[med-svn] [sra-sdk] 01/02: Imported Upstream version 2.3.2-4

Andreas Tille tille at debian.org
Tue Aug 13 09:11:36 UTC 2013


This is an automated email from the git hooks/post-receive script.

tille pushed a commit to branch master
in repository sra-sdk.

commit 5dafdbf8b2adf26e89e817d285dc29681467c2c2
Author: Andreas Tille <tille at debian.org>
Date:   Tue Aug 13 11:06:45 2013 +0200

    Imported Upstream version 2.3.2-4
---
 CHANGES                                            |   30 -
 Makefile                                           |   45 +-
 README                                             |   22 +-
 README-WINDOWS.txt                                 |   15 +
 README-build                                       |  237 -
 README-build.txt                                   |  259 +
 README-config.txt                                  |   58 +
 USAGE                                              |  162 -
 build/BUILD.linux                                  |    2 +-
 build/BUILD.mac                                    |    2 +-
 build/BUILD.win                                    |    2 +-
 build/COMP.mac                                     |    2 +-
 build/LNKG.linux                                   |    1 +
 build/LNKG.mac                                     |    1 +
 build/LNKG.win                                     |    1 +
 build/Makefile.clang                               |   80 +
 build/Makefile.env                                 |  140 +-
 build/Makefile.gcc                                 |   18 +-
 build/Makefile.linux                               |    7 +
 build/Makefile.mac                                 |    7 +
 build/Makefile.rules                               |    5 -
 build/Makefile.shell                               |  102 +-
 build/Makefile.vc++                                |   22 +-
 build/Makefile.win                                 |    7 +
 build/ld.linux.cmn.sh                              |    6 +-
 build/ld.linux.dlib.sh                             |    4 +
 build/ld.linux.exe.sh                              |    7 +-
 build/ld.linux.ln.sh                               |   13 +-
 build/ld.linux.slib.sh                             |    4 +-
 build/ld.mac.cmn.sh                                |   12 +-
 build/ld.mac.dlib.sh                               |  116 +-
 build/ld.mac.exe.sh                                |  118 +-
 build/ld.mac.ln.sh                                 |    2 +
 build/ld.mac.slib.sh                               |    6 +-
 build/ld.sh                                        |  272 +-
 build/ld.win.cmn.sh                                |    7 +-
 build/ld.win.dlib.sh                               |   60 +-
 build/ld.win.exe.sh                                |    6 +-
 build/ld.win.slib.sh                               |   51 +-
 build/mac.arch.sh                                  |    9 +-
 build/sra-dflt-schema.sh                           |   50 +-
 build/win-cc.sh                                    |  110 +-
 configuration-assistant.perl                       | 1266 +-
 doc/help/html/bam-load-help.html                   |   29 +
 doc/help/html/bam-loader-help.html                 |   31 -
 doc/help/html/crc32sum-help.html                   |    2 +-
 interfaces/align/align-access.h                    |   11 +-
 interfaces/align/align.vschema                     |  675 +-
 interfaces/align/alignarc.h                        |   63 -
 interfaces/align/bam.h                             |   91 +-
 interfaces/align/dna-reverse-cmpl.h                |   43 +
 interfaces/align/iterator.h                        |  610 +
 interfaces/align/manager.h                         |   69 +
 interfaces/align/qstat.vschema                     |   87 +
 interfaces/align/quality-quantizer.h               |   49 +
 interfaces/align/reader-refseq.h                   |    6 +-
 interfaces/align/reference.h                       |  150 +
 interfaces/align/refseq-mgr.h                      |   16 +-
 interfaces/align/refseq.vschema                    |  100 +
 interfaces/align/seq.vschema                       |  300 +
 interfaces/align/writer-alignment.h                |   49 +-
 interfaces/align/writer-reference.h                |   45 +-
 interfaces/align/writer-refseq.h                   |    6 +-
 interfaces/align/writer-sequence.h                 |   16 +-
 interfaces/cc/gcc/i386/atomic.h                    |    1 +
 interfaces/cc/gcc/i386/fmtdef.h                    |   42 -
 interfaces/cc/gcc/noarch/bitstr.h                  |   29 +-
 interfaces/cc/gcc/v128.h                           | 1088 +
 interfaces/cc/gcc/x86_64/fmtdef.h                  |   58 -
 interfaces/cc/vc++/compiler.h                      |    2 +-
 interfaces/cc/vc++/i386/arch-impl.h                |  194 -
 interfaces/cc/vc++/i386/fmtdef.h                   |   42 -
 interfaces/cc/vc++/noarch/arch-impl.h              |  194 +
 interfaces/cc/vc++/noarch/bitstr.h                 |    8 +-
 interfaces/cc/vc++/stdint.h                        |   43 +-
 interfaces/cc/vc++/x86_64/arch-impl.h              |  133 -
 interfaces/cc/vc++/x86_64/fmtdef.h                 |   41 -
 interfaces/ext/libxml/DOCBparser.h                 |   96 +
 interfaces/ext/libxml/HTMLparser.h                 |  303 +
 interfaces/ext/libxml/HTMLtree.h                   |  147 +
 interfaces/ext/libxml/SAX.h                        |  173 +
 interfaces/ext/libxml/SAX2.h                       |  176 +
 interfaces/ext/libxml/c14n.h                       |  115 +
 interfaces/ext/libxml/catalog.h                    |  182 +
 interfaces/ext/libxml/chvalid.h                    |  230 +
 interfaces/ext/libxml/debugXML.h                   |  217 +
 interfaces/ext/libxml/dict.h                       |   69 +
 interfaces/ext/libxml/encoding.h                   |  226 +
 interfaces/ext/libxml/entities.h                   |  150 +
 interfaces/ext/libxml/globals.h                    |  491 +
 interfaces/ext/libxml/hash.h                       |  233 +
 interfaces/ext/libxml/list.h                       |  137 +
 interfaces/ext/libxml/nanoftp.h                    |  143 +
 interfaces/ext/libxml/nanohttp.h                   |   81 +
 interfaces/ext/libxml/parser.h                     | 1226 +
 interfaces/ext/libxml/parserInternals.h            |  611 +
 interfaces/ext/libxml/pattern.h                    |  100 +
 interfaces/ext/libxml/relaxng.h                    |  213 +
 interfaces/ext/libxml/schemasInternals.h           |  958 +
 interfaces/ext/libxml/schematron.h                 |  142 +
 interfaces/ext/libxml/threads.h                    |   84 +
 interfaces/ext/libxml/tree.h                       | 1252 +
 interfaces/ext/libxml/uri.h                        |   94 +
 interfaces/ext/libxml/valid.h                      |  458 +
 interfaces/ext/libxml/xinclude.h                   |  125 +
 interfaces/ext/libxml/xlink.h                      |  189 +
 interfaces/ext/libxml/xmlIO.h                      |  360 +
 interfaces/ext/libxml/xmlautomata.h                |  146 +
 interfaces/ext/libxml/xmlerror.h                   |  944 +
 interfaces/ext/libxml/xmlexports.h                 |  157 +
 interfaces/ext/libxml/xmlmemory.h                  |  224 +
 interfaces/ext/libxml/xmlmodule.h                  |   57 +
 interfaces/ext/libxml/xmlreader.h                  |  424 +
 interfaces/ext/libxml/xmlregexp.h                  |  222 +
 interfaces/ext/libxml/xmlsave.h                    |   87 +
 interfaces/ext/libxml/xmlschemas.h                 |  218 +
 interfaces/ext/libxml/xmlschemastypes.h            |  151 +
 interfaces/ext/libxml/xmlstring.h                  |  140 +
 interfaces/ext/libxml/xmlunicode.h                 |  202 +
 interfaces/ext/libxml/xmlversion.h                 |  458 +
 interfaces/ext/libxml/xmlwriter.h                  |  485 +
 interfaces/ext/libxml/xpath.h                      |  546 +
 interfaces/ext/libxml/xpathInternals.h             |  630 +
 interfaces/ext/libxml/xpointer.h                   |  114 +
 interfaces/insdc/insdc.h                           |   35 +
 interfaces/insdc/sra.h                             |   27 +-
 interfaces/insdc/sra.vschema                       |    1 +
 interfaces/kapp/args.h                             |   54 +-
 interfaces/kapp/loader-file.h                      |   17 +-
 interfaces/kapp/loader-meta.h                      |    2 +-
 interfaces/kapp/log-xml.h                          |   10 +-
 interfaces/kapp/queue-file.h                       |  149 +
 interfaces/kdb/btree.h                             |   95 +-
 interfaces/kdb/consistency-check.h                 |   21 +-
 interfaces/kdb/database.h                          |   18 +-
 interfaces/kdb/kdb-priv.h                          |   12 +
 interfaces/kdb/manager.h                           |   40 +-
 interfaces/kdb/namelist.h                          |    3 +-
 interfaces/kdb/table.h                             |   14 +
 interfaces/kfg/config.h                            |  168 +-
 interfaces/kfg/kfg-priv.h                          |    4 +
 interfaces/kfg/repository.h                        |  271 +
 interfaces/kfs/arc.h                               |   14 +
 interfaces/kfs/buffile.h                           |   10 +
 interfaces/kfs/cacheteefile.h                      |  147 +
 interfaces/kfs/directory.h                         |   63 +-
 interfaces/kfs/file.h                              |   29 +
 interfaces/kfs/impl.h                              |   11 +-
 interfaces/kfs/kfs-priv.h                          |   31 +-
 interfaces/kfs/lockfile.h                          |  116 +
 interfaces/kfs/path-priv.h                         |  101 -
 interfaces/kfs/path.h                              |  237 -
 interfaces/kfs/quickmount.h                        |   61 +
 interfaces/kfs/ramfile.h                           |   75 +
 interfaces/kfs/readheadfile.h                      |   86 +
 interfaces/kfs/sra.h                               |   19 +-
 interfaces/kfs/tar.h                               |    5 +
 interfaces/klib/checksum.h                         |    2 +-
 interfaces/klib/debug.h                            |   33 +-
 interfaces/klib/defs.h                             |    7 +-
 interfaces/klib/extern.h                           |    6 +-
 interfaces/klib/klib-priv.h                        |  106 +
 interfaces/klib/ksort-macro.h                      |  257 +
 interfaces/klib/log.h                              |    4 +-
 interfaces/klib/namelist.h                         |   10 +
 interfaces/klib/out.h                              |    6 +-
 interfaces/klib/printf.h                           |  260 +-
 interfaces/klib/rc.h                               |  129 +-
 interfaces/klib/refcount.h                         |    8 +-
 interfaces/klib/report.h                           |   98 +
 interfaces/klib/sort.h                             |   60 +
 interfaces/klib/status.h                           |    2 +-
 interfaces/klib/vector.h                           |  155 +
 interfaces/klib/xml.h                              |  355 -
 interfaces/klib/xml.hpp                            |  198 -
 interfaces/kns/KCurlRequest.h                      |   65 +
 interfaces/kns/curl-file.h                         |   49 +
 interfaces/kns/entrez-fetcher.h                    |   88 +
 interfaces/kns/extern.h                            |   41 +
 interfaces/kns/impl.h                              |  104 +
 interfaces/kns/manager.h                           |   85 +
 interfaces/kns/stream.h                            |  126 +
 interfaces/kns/url-fetcher.h                       |   66 +
 interfaces/kproc/impl.h                            |  104 +
 interfaces/kproc/procmgr.h                         |  115 +
 interfaces/kproc/q-extern.h                        |    4 +-
 interfaces/kproc/queue.h                           |    2 +-
 interfaces/kproc/sem.h                             |    8 +
 interfaces/kproc/task.h                            |   83 +
 interfaces/kproc/timeout.h                         |   64 +
 interfaces/krypto/cipher-impl.h                    |    1 +
 interfaces/krypto/cipher-priv.h                    |    1 +
 interfaces/krypto/cipher-test.h                    |   49 +
 interfaces/krypto/cipher.h                         |  208 +
 interfaces/krypto/ciphermgr-priv.h                 |   38 +
 interfaces/krypto/ciphermgr.h                      |   98 +
 interfaces/krypto/encfile-priv.h                   |  250 +
 interfaces/krypto/encfile.h                        |  134 +
 interfaces/krypto/extern.h                         |   66 +
 interfaces/krypto/key.h                            |  103 +
 interfaces/krypto/manager-priv.h                   |   26 +
 interfaces/krypto/manager.h                        |   33 +
 interfaces/krypto/reencfile.h                      |   91 +
 interfaces/krypto/rng-impl.h                       |   86 +
 interfaces/krypto/rng.h                            |   68 +
 interfaces/krypto/testciphermgr.h                  |   58 +
 interfaces/krypto/wgaencrypt.h                     |  128 +
 interfaces/ktst/test_tools.hpp                     |   93 +-
 interfaces/ktst/unit_test.hpp                      |  283 +-
 interfaces/ktst/unit_test_suite.hpp                |  524 +-
 interfaces/kxml/xml.h                              |  382 +
 interfaces/loader/alignment-writer.h               |   97 +
 interfaces/loader/common-reader-priv.h             |  300 +
 interfaces/loader/common-reader.h                  |  486 +
 interfaces/loader/common-writer.h                  |  190 +
 interfaces/loader/mmarray.h                        |   50 +
 interfaces/loader/reference-writer.h               |   78 +
 interfaces/loader/sequence-writer.h                |   91 +
 interfaces/ncbi/seq.vschema                        |   27 +-
 interfaces/ncbi/wgs-contig.h                       |  176 +
 interfaces/ncbi/wgs-contig.vschema                 |  660 +
 interfaces/os/mac/os-native.h                      |    6 +-
 interfaces/os/unix/unix-native.h                   |   13 -
 interfaces/os/win/atomic64.h                       |   34 +-
 interfaces/os/win/os-native.h                      |   59 +-
 interfaces/sra/impl.h                              |   20 +
 interfaces/sra/pevents.vschema                     |    2 +-
 interfaces/sra/sradb-priv.h                        |  123 +-
 interfaces/sra/srapath.h                           |    9 +-
 interfaces/vdb/blob.h                              |  147 +
 interfaces/vdb/built-in.vschema                    |   26 +-
 interfaces/vdb/cursor.h                            |   37 +
 interfaces/vdb/database.h                          |   18 +-
 interfaces/vdb/dependencies.h                      |  211 +
 interfaces/vdb/manager.h                           |   23 +
 interfaces/vdb/manager.hpp                         |    8 +-
 interfaces/vdb/report.h                            |   92 +
 interfaces/vdb/vdb-priv.h                          |   70 +-
 interfaces/vdb/vdb.vschema                         |   59 +-
 interfaces/vfs/extern.h                            |   42 +
 interfaces/vfs/manager-priv.h                      |  115 +
 interfaces/vfs/manager.h                           |  306 +
 interfaces/vfs/path-priv.h                         |  149 +
 interfaces/vfs/path.h                              |  289 +
 interfaces/vfs/resolver.h                          |  206 +
 libs/Makefile                                      |   19 +-
 libs/align/Makefile                                |   39 +-
 libs/align/al_iterator.c                           |  562 +
 libs/align/align-access.c                          |   22 +-
 libs/align/align_mgr.c                             |  108 +
 libs/align/bam.c                                   | 2883 +-
 libs/align/debug.h                                 |   36 +-
 libs/align/dna-reverse-cmpl.c                      |   80 +
 libs/align/libalign-access.vers                    |    2 +-
 libs/align/libalign-reader.vers                    |    2 +-
 libs/align/pl_iterator.c                           |  671 +
 libs/align/quality-quantizer.c                     |  105 +
 libs/align/reader-cmn.c                            |  290 +-
 libs/align/reader-cmn.h                            |   31 +-
 libs/align/reader-refseq.c                         |  103 +-
 libs/align/ref_iterator.c                          |  866 +
 libs/align/reference-cmn.c                         |   43 +
 libs/align/reference-cmn.h                         |   38 +
 libs/align/reference.c                             | 1933 +
 libs/align/refseq-mgr.c                            |  626 +-
 libs/align/writer-alignment.c                      |  128 +-
 libs/align/writer-cmn.c                            |  112 +-
 libs/align/writer-priv.h                           |   10 +-
 libs/align/writer-ref.c                            |  175 +-
 libs/align/writer-ref.h                            |   22 +-
 libs/align/writer-reference.c                      | 2987 +-
 libs/align/writer-refseq.c                         |   19 +-
 libs/align/writer-sequence.c                       |  221 +-
 libs/axf/Makefile                                  |   25 +-
 libs/axf/align-local_ref_id.c                      |   70 +-
 libs/axf/align-local_ref_start.c                   |   61 +-
 libs/axf/align-ref-name.c                          |   52 +-
 libs/axf/align-ref-pos.c                           |  147 +-
 libs/axf/align-ref-seq-id.c                        |   60 +-
 libs/axf/align-restore-read.c                      |   28 +-
 libs/axf/cigar.c                                   | 1089 +-
 libs/axf/get-sam-flags.c                           |   80 +-
 libs/axf/get_mate_align_ids.c                      |  271 +
 libs/axf/libaxf.vers                               |    2 +-
 libs/axf/libaxf.vers.h                             |    1 -
 libs/axf/libwaxf.vers                              |    2 +-
 libs/axf/libwaxf.vers.h                            |    1 -
 libs/axf/make-cmp-read_desc.c                      |  156 +
 libs/axf/not-my-row.c                              |    2 +-
 libs/axf/project_read_from_sequence.c              |  119 +-
 libs/axf/ref-preserve_qual.c                       |    2 +
 libs/axf/ref-restore-read.c                        |    6 +-
 libs/axf/ref-tbl-sub-select.c                      |  471 +-
 libs/axf/ref-tbl.c                                 |   85 +
 libs/axf/ref-tbl.h                                 |   32 +
 libs/axf/refseq-stats.c                            |    2 +-
 libs/axf/seq-construct-read.c                      |  125 +
 libs/axf/seq-restore-read.c                        |   92 +-
 libs/axf/template-len.c                            |  112 +-
 libs/ext/Makefile                                  |    3 +-
 libs/ext/bzip2/Makefile                            |   93 +-
 libs/ext/bzip2/blocksort.c                         | 1094 +
 libs/ext/bzip2/bzip2-1.0.6.tar.gz                  |  Bin 0 -> 782025 bytes
 libs/ext/bzip2/bzip2.c                             | 2034 +
 libs/ext/bzip2/bzip2recover.c                      |  514 +
 libs/ext/bzip2/bzlib.c                             | 1572 +
 libs/ext/bzip2/bzlib.h                             |  282 +
 libs/ext/bzip2/bzlib_private.h                     |  509 +
 libs/ext/bzip2/compress.c                          |  672 +
 libs/ext/bzip2/crctable.c                          |  104 +
 libs/ext/bzip2/decompress.c                        |  646 +
 libs/ext/bzip2/dlltest.c                           |  175 +
 libs/ext/bzip2/huffman.c                           |  205 +
 libs/ext/bzip2/libbz2.def                          |   27 +
 libs/{axf/libaxf.vers => ext/bzip2/libbz2.vers}    |    0
 libs/ext/bzip2/mk251.c                             |   31 +
 libs/ext/bzip2/randtable.c                         |   84 +
 libs/ext/bzip2/spewG.c                             |   54 +
 libs/ext/bzip2/unzcrash.c                          |  141 +
 libs/ext/curl/Makefile                             |  103 +
 libs/ext/zlib/Makefile                             |   97 +-
 libs/ext/zlib/adler32.c                            |  179 +
 libs/ext/zlib/compress.c                           |   80 +
 libs/ext/zlib/crc32.c                              |  425 +
 libs/ext/zlib/crc32.h                              |  441 +
 libs/ext/zlib/deflate.c                            | 1965 +
 libs/ext/zlib/deflate.h                            |  346 +
 libs/ext/zlib/gzclose.c                            |   25 +
 libs/ext/zlib/gzguts.h                             |  193 +
 libs/ext/zlib/gzlib.c                              |  620 +
 libs/ext/zlib/gzread.c                             |  589 +
 libs/ext/zlib/gzwrite.c                            |  565 +
 libs/ext/zlib/infback.c                            |  640 +
 libs/ext/zlib/inffast.c                            |  340 +
 libs/ext/zlib/inffast.h                            |   11 +
 libs/ext/zlib/inffixed.h                           |   94 +
 libs/ext/zlib/inflate.c                            | 1496 +
 libs/ext/zlib/inflate.h                            |  122 +
 libs/ext/zlib/inftrees.c                           |  306 +
 libs/ext/zlib/inftrees.h                           |   62 +
 libs/ext/zlib/libz.def                             |   84 +
 libs/ext/zlib/libz.vers                            |    1 +
 libs/ext/zlib/trees.c                              | 1224 +
 libs/ext/zlib/trees.h                              |  128 +
 libs/ext/zlib/uncompr.c                            |   59 +
 libs/ext/zlib/zconf.h                              |  506 +
 libs/ext/zlib/zlib-1.2.7.tar.gz                    |  Bin 0 -> 560351 bytes
 libs/ext/zlib/zlib.h                               | 1744 +
 libs/ext/zlib/zutil.c                              |  324 +
 libs/ext/zlib/zutil.h                              |  252 +
 libs/kapp/Makefile                                 |   10 +
 libs/kapp/args.c                                   |  749 +-
 libs/kapp/args_debug.h                             |   47 +
 libs/kapp/libload.vers                             |    2 +-
 libs/kapp/loader-file.c                            |  117 +-
 libs/kapp/log-xml.c                                |   26 +-
 libs/kapp/main.c                                   |   36 +-
 libs/kapp/queue-file.c                             |  925 +
 libs/kapp/tokenizer.c                              |  525 +
 libs/kapp/unix/sysmain.c                           |   13 +
 libs/kapp/win/sysmain.c                            |   18 +
 libs/kdb/Makefile                                  |   20 +-
 libs/kdb/btree.c                                   |   69 +-
 libs/kdb/coldata.c                                 |    2 +-
 libs/kdb/colidx0.c                                 |    4 +-
 libs/kdb/colidx1.c                                 |    8 +-
 libs/kdb/colidx2-priv.h                            |   29 +-
 libs/kdb/colidx2.c                                 |  114 +-
 libs/kdb/column-cc.c                               |   67 +-
 libs/kdb/column.c                                  |   26 +-
 libs/kdb/database-cc.c                             |  232 +-
 libs/kdb/database-cmn.c                            |    2 +-
 libs/kdb/database.c                                |  198 +-
 libs/kdb/dbcc-cmn.c                                |    2 +-
 libs/kdb/dbmgr-cmn.c                               |   62 +-
 libs/kdb/dbmgr-priv.h                              |    5 +-
 libs/kdb/dbmgr.c                                   |  255 +-
 libs/kdb/idxblk.c                                  |    9 +-
 libs/kdb/index-cmn.h                               |    7 +-
 libs/kdb/index.c                                   |   16 +-
 libs/kdb/kdb-priv.h                                |   45 +-
 libs/kdb/kdb.c                                     |  652 +-
 libs/kdb/libkdb.vers                               |    2 +-
 libs/kdb/libkdb.vers.h                             |    1 -
 libs/kdb/libwkdb.vers                              |    2 +-
 libs/kdb/libwkdb.vers.h                            |    1 -
 libs/kdb/meta.c                                    |   69 +-
 libs/kdb/ptrieval-v2.c                             |  115 +-
 libs/kdb/table-cc.c                                |  229 +-
 libs/kdb/table.c                                   |  133 +-
 libs/kdb/trieidx-v2.c                              |   21 +-
 libs/kdb/trieval-v2.c                              |    4 +-
 libs/kdb/wcolidx0.c                                |    4 +-
 libs/kdb/wcolidx1.c                                |   10 +-
 libs/kdb/wcolidx2.c                                |    6 +-
 libs/kdb/wcolumn.c                                 |   74 +-
 libs/kdb/wdatabase.c                               |  233 +-
 libs/kdb/wdbmgr.c                                  |   15 +-
 libs/kdb/windex.c                                  |   16 +-
 libs/kdb/wkdb-priv.h                               |   62 +-
 libs/kdb/wkdb.c                                    |  653 +-
 libs/kdb/wmeta.c                                   |   90 +-
 libs/kdb/wtable.c                                  |  186 +-
 libs/kdb/wtrieidx-v1.c                             |    2 +-
 libs/kdb/wtrieidx-v2.c                             |   14 +-
 libs/kfg/Makefile                                  |   43 +-
 libs/kfg/config-grammar.c                          | 1725 +
 libs/kfg/config-lex.c                              | 2511 +
 libs/kfg/config-tokens.h                           |   75 +
 libs/kfg/config.c                                  | 2309 +-
 libs/kfg/config.linux.kfg                          |   29 -
 libs/kfg/config.mac.kfg                            |   29 -
 libs/kfg/config.win.kfg                            |   29 -
 libs/kfg/default.kfg                               |   45 +
 libs/kfg/kfg-parse.h                               |   81 +
 libs/kfg/libkfg.vers                               |    2 +-
 libs/kfg/report-kfg.c                              |  505 +
 libs/kfg/report.c                                  |  433 +
 libs/kfg/repository.c                              | 1087 +
 libs/kfs/Makefile                                  |   24 +-
 libs/kfs/arc.c                                     |  273 +-
 libs/kfs/buffile-read.c                            |  265 +
 libs/kfs/buffile-write.c                           |    4 +-
 libs/kfs/buffile.c                                 |    2 +-
 libs/kfs/bzip.c                                    |   34 +-
 libs/kfs/cacheteefile.c                            | 1689 +
 libs/kfs/countfile.c                               |   11 +
 libs/kfs/crc32.c                                   |   19 +-
 libs/kfs/directory.c                               |  183 +-
 libs/kfs/ffext.c                                   |   12 +-
 libs/kfs/ffmagic.c                                 |  122 +-
 libs/kfs/file.c                                    |  160 +-
 libs/kfs/fileformat-priv.h                         |    2 +-
 libs/kfs/gzip.c                                    |    5 +-
 libs/kfs/libkfs.vers                               |    2 +-
 libs/kfs/lockfile.c                                |  350 +
 libs/kfs/md5.c                                     |   42 +-
 libs/kfs/mmap.c                                    |   12 +-
 libs/kfs/nullfile.c                                |    1 +
 libs/kfs/pagefile.c                                |  121 +-
 libs/kfs/path-priv.h                               |  114 -
 libs/kfs/path.c                                    | 1669 -
 libs/kfs/quickmount.c                              |  967 +
 libs/kfs/ramfile.c                                 |  415 +
 libs/kfs/readheadfile.c                            |  294 +
 libs/kfs/report.c                                  |  169 +
 libs/kfs/sra.c                                     |   79 +-
 libs/kfs/subfile.c                                 |   18 +-
 libs/kfs/tar.c                                     |   94 +-
 libs/kfs/teefile.c                                 |    1 +
 libs/kfs/tocentry.c                                |   39 +-
 libs/kfs/tocfile.c                                 |    2 +-
 libs/kfs/unix/sysdir-priv.h                        |    9 -
 libs/kfs/unix/sysdir.c                             |   94 +-
 libs/kfs/unix/sysdll.c                             |  120 +-
 libs/kfs/unix/sysfile-priv.h                       |    2 +-
 libs/kfs/unix/sysfile.c                            |   24 +-
 libs/kfs/unix/syslockfile.c                        |  215 +
 libs/kfs/unix/syspath.c                            |  126 -
 libs/kfs/win/lnk_tools.c                           |    9 +-
 libs/kfs/win/sysdir-priv.h                         |    4 +-
 libs/kfs/win/sysdir.c                              |  254 +-
 libs/kfs/win/sysdll.c                              |  115 +-
 libs/kfs/win/sysfile-priv.h                        |    5 +-
 libs/kfs/win/sysfile.c                             |  347 +-
 libs/kfs/win/syslockfile.c                         |   67 +
 libs/kfs/win/sysmmap.c                             |    2 +
 libs/kfs/win/syspath.c                             |  287 -
 libs/klib/Judy.h                                   |  629 +
 libs/klib/Makefile                                 |   36 +-
 libs/klib/SHA-32bit.c                              |    8 +-
 libs/klib/SHA-64bit.c                              |    8 +-
 libs/klib/data-buffer.c                            |  223 +-
 libs/klib/judy-vector.c                            |  892 +
 libs/klib/judy/Judy1.h                             |  549 +
 libs/klib/judy/JudyByCount.c                       |  952 +
 libs/klib/judy/JudyByCountWithDefs.c               |    4 +
 libs/klib/judy/JudyCascade.c                       | 1940 +
 libs/klib/judy/JudyCount.c                         | 1193 +
 libs/klib/judy/JudyCreateBranch.c                  |  312 +
 libs/klib/judy/JudyDecascade.c                     | 1204 +
 libs/klib/judy/JudyDel.c                           | 2144 +
 libs/klib/judy/JudyFirst.c                         |  211 +
 libs/klib/judy/JudyFreeArray.c                     |  361 +
 libs/klib/judy/JudyGet.c                           | 1092 +
 libs/klib/judy/JudyHS.c                            |  770 +
 libs/klib/judy/JudyHS.h                            |   35 +
 libs/klib/judy/JudyIns.c                           | 1871 +
 libs/klib/judy/JudyInsArray.c                      | 1176 +
 libs/klib/judy/JudyInsertBranch.c                  |  133 +
 libs/klib/judy/JudyL.h                             |  503 +
 libs/klib/judy/JudyMalloc.c                        |   86 +
 libs/klib/judy/JudyMallocIF.c                      |  780 +
 libs/klib/judy/JudyMemActive.c                     |  257 +
 libs/klib/judy/JudyMemUsed.c                       |   59 +
 libs/klib/judy/JudyNext.c                          |    2 +
 libs/klib/judy/JudyNextEmpty.c                     |    2 +
 libs/klib/judy/JudyPrev.c                          |    2 +
 libs/klib/judy/JudyPrevEmpty.c                     |    2 +
 libs/klib/judy/JudyPrevNext.c                      | 1888 +
 libs/klib/judy/JudyPrevNextEmpty.c                 | 1388 +
 libs/klib/judy/JudyPrintJP.c                       |  399 +
 libs/klib/judy/JudyPrivate.h                       | 1610 +
 libs/klib/judy/JudyPrivate1L.h                     |  483 +
 libs/klib/judy/JudyPrivateBranch.h                 |  777 +
 libs/klib/judy/JudySL.c                            | 1125 +
 libs/klib/judy/JudyTablesGen.c                     |  294 +
 libs/klib/judy/Makefile                            |  207 +
 libs/klib/judy/j__udyGet.c                         |    2 +
 libs/klib/ksort.c                                  |   97 +
 libs/klib/libklib.vers                             |    2 +-
 libs/klib/libklib.vers.h                           |    1 -
 libs/klib/log.c                                    |   40 +-
 libs/klib/pbstree-impl.c                           |  220 +-
 libs/klib/printf.c                                 | 2329 +-
 libs/klib/qsort.c                                  |   34 +-
 libs/klib/refcount.c                               |    1 -
 libs/klib/report.c                                 |  816 +
 libs/klib/status.c                                 |    4 +-
 libs/klib/symtab.c                                 |    2 +-
 libs/klib/token.c                                  |    9 +-
 libs/klib/unix/systime.c                           |    4 +-
 libs/klib/unpack.c                                 |  176 +-
 libs/klib/vector_namelist.c                        |   57 +
 libs/klib/vlen-encode.c                            |    3 +-
 libs/klib/win/syserrcode.c                         |    2 +-
 libs/klib/win/syswriter.c                          |   17 +-
 libs/klib/writer.c                                 |    8 +-
 libs/kns/KCurlFile.c                               |  716 +
 libs/kns/KCurlRequest.c                            |  438 +
 libs/kns/Makefile                                  |  125 +
 libs/kns/curlhdr/curl.h                            | 1600 +
 libs/kns/curlhdr/curlver.h                         |   56 +
 libs/kns/curlhdr/easy.h                            |   81 +
 libs/kns/curlhdr/multi.h                           |  344 +
 libs/kns/curlhdr/types.h                           |    1 +
 libs/kns/entrez-fetcher.c                          |  221 +
 libs/kns/kns_manager.c                             |  263 +
 libs/kns/kns_mgr_priv.h                            |   59 +
 .../libalign-writer.vers => kns/libkns.vers}       |    0
 libs/kns/libkurl.vers                              |    1 +
 libs/kns/stream-from-files.c                       |  168 +
 libs/kns/stream-from-streams.c                     |  150 +
 libs/kns/stream-priv.h                             |   32 +
 libs/kns/stream.c                                  |  336 +
 libs/kns/url-fetcher-curl.c                        |  255 +
 libs/kns/url-fetcher-impl.h                        |  109 +
 libs/kns/url-fetcher.c                             |  129 +
 libs/kproc/Makefile                                |   55 +-
 libs/kproc/bsd/syslock.c                           |    1 +
 libs/kproc/libkproc.vers                           |    2 +-
 libs/kproc/libkq.vers                              |    2 +-
 libs/kproc/libksproc.vers                          |    2 +-
 libs/kproc/linux/syslock.c                         |    1 +
 libs/kproc/procmgr.c                               |  412 +
 libs/kproc/queue.c                                 |   93 +-
 libs/kproc/sem.c                                   |   79 +-
 libs/kproc/sttimeout.c                             |    1 +
 libs/kproc/task.c                                  |  156 +
 libs/kproc/unix/syscond.c                          |   46 +-
 libs/kproc/unix/systimeout.c                       |    1 +
 libs/kproc/win/syscond-priv.h                      |   10 +-
 libs/kproc/win/syscond.c                           |  238 +-
 libs/kproc/win/syslock.c                           |    6 +-
 libs/krypto/Makefile                               |  336 +
 libs/krypto/aes-byte.c                             |  236 +
 libs/krypto/aes-ncbi-priv.h                        |  227 +
 libs/krypto/aes-ncbi.aes-ni.pic.o.list             |38295 ++++++++++
 libs/krypto/aes-ncbi.c                             | 2644 +
 libs/krypto/aes-ncbi.vec.pic.o.list                |74023 +++++++++++++++++++
 libs/krypto/aes-ncbi.vecreg.pic.o.list             |75192 ++++++++++++++++++++
 libs/krypto/aes-priv.h                             |   94 +
 libs/krypto/aes.c                                  |    1 +
 libs/krypto/aes_core.c                             | 1181 +
 libs/krypto/blockcipher-impl.h                     |  187 +
 libs/krypto/blockcipher-priv.h                     |   90 +
 libs/krypto/blockcipher.c                          |    3 +
 libs/krypto/cipher-byte.c                          |  522 +
 libs/krypto/cipher-impl.h                          |  174 +
 libs/krypto/cipher-no-vec.c                        |   41 +
 libs/krypto/cipher-priv.h                          |   79 +
 libs/krypto/cipher-vec.aes-ni.pic.o.list           |10909 +++
 libs/krypto/cipher-vec.c                           |  808 +
 libs/krypto/cipher-vec.vec.pic.o.list              |10959 +++
 libs/krypto/cipher-vec.vecreg.pic.o.list           |10919 +++
 libs/krypto/cipher.c                               |  536 +
 libs/krypto/ciphermgr.c                            |  295 +
 libs/krypto/compile-test.aes-ni.pic.o.list         |  592 +
 libs/krypto/compile-test.c                         |   50 +
 libs/krypto/compile-test.vec.pic.o.list            |  590 +
 libs/krypto/compile-test.vecreg.pic.o.list         |  592 +
 libs/krypto/csprng.c                               |  163 +
 libs/krypto/encfile-priv.h                         |  163 +
 libs/krypto/encfile.c                              | 2122 +
 libs/krypto/encfilev2.c                            | 2589 +
 libs/krypto/key.c                                  |  126 +
 libs/krypto/libkrypto.vers                         |    1 +
 .../libkryptotest.vers}                            |    0
 libs/krypto/manager.c                              |   11 +
 libs/krypto/ncbi-priv.h                            |  122 +
 libs/krypto/no-null-ncbi.aes-ni.pic.o.list         | 2539 +
 libs/krypto/no-null-ncbi.c                         |   59 +
 libs/krypto/no-null-ncbi.vec.pic.o.list            | 2540 +
 libs/krypto/no-null-ncbi.vecreg.pic.o.list         | 2540 +
 libs/krypto/null-ncbi-priv.h                       |   56 +
 libs/krypto/null-ncbi.c                            |  251 +
 libs/krypto/null-ncbi.vec.pic.o.list               | 4406 ++
 libs/krypto/null-ncbi.vecreg.pic.o.list            | 4406 ++
 libs/krypto/reencfile.c                            | 1255 +
 libs/krypto/rng-impl.h                             |   91 +
 build/STATIC => libs/krypto/rng-priv.h             |    0
 libs/krypto/rng.c                                  |  120 +
 libs/krypto/testcipher.c                           |   76 +
 libs/krypto/wgaencrypt.c                           | 1254 +
 libs/ktst/Makefile                                 |   90 +
 libs/ktst/testcase.cpp                             |   95 +
 libs/ktst/testenv.cpp                              |  503 +
 libs/ktst/testrunner.cpp                           |   77 +
 libs/ktst/unix/runprocesstestcase.cpp              |  100 +
 libs/ktst/win/runprocesstestcase.cpp               |  141 +
 libs/kxml/Makefile                                 |    4 +-
 libs/kxml/libkxfs.vers                             |    2 +-
 libs/kxml/libkxml.vers                             |    2 +-
 libs/kxml/xml.c                                    |   44 +-
 libs/kxml/xtoc-parsexml.c                          |   36 +-
 libs/kxml/xtoc.c                                   |  389 +-
 libs/loader/Makefile                               |   99 +
 libs/loader/alignment-writer.c                     |  226 +
 libs/loader/common-reader.c                        |  614 +
 libs/loader/common-writer.c                        | 1987 +
 libs/loader/mmarray.c                              |  131 +
 libs/loader/reference-writer.c                     |  459 +
 libs/loader/sequence-writer.c                      |  361 +
 libs/search/Makefile                               |   10 +-
 libs/search/libksrch.vers                          |    2 +-
 libs/search/libksrch.vers.h                        |    1 -
 libs/sra/Makefile                                  |   99 +-
 libs/sra/libsradb.vers                             |    2 +-
 libs/sra/libsradb.vers.h                           |    1 -
 libs/sra/libsrareader.vers                         |    2 +-
 libs/sra/libsrareader.vers.h                       |    1 -
 libs/sra/libsraschema.vers.h                       |    1 -
 libs/sra/libwsradb.vers                            |    2 +-
 libs/sra/libwsradb.vers.h                          |    1 -
 libs/sra/libwsraschema.vers.h                      |    1 -
 libs/sra/reader-abi.c                              |   25 +-
 libs/sra/reader-fastq.c                            |   16 +-
 libs/sra/reader-illumina.c                         |   96 +-
 libs/sra/reader-sff.c                              |  115 +-
 libs/sra/sra-dflt-schema.c                         |    1 -
 libs/sra/sra-priv.h                                |   21 +-
 libs/sra/sracache.c                                |  466 +
 libs/sra/sramgr-cmn.c                              |  206 +-
 libs/sra/srapath-stub.c                            |  408 -
 libs/sra/sraschema-stub.c                          |   67 -
 libs/sra/sratbl-cmn.c                              |  320 +-
 libs/sra/wsramgr.c                                 |    1 +
 libs/sra/wsraschema-stub.c                         |   67 -
 libs/sra/wsratbl.c                                 |   19 +-
 libs/sraxf/Makefile                                |   26 +-
 libs/sraxf/fix_read_seg_impl.h                     |  169 +
 libs/sraxf/format-spot-name.c                      |   11 +-
 libs/sraxf/index_lookup.c                          |   23 +-
 libs/sraxf/libsraxf.vers                           |    2 +-
 libs/sraxf/libsraxf.vers.h                         |    1 -
 libs/sraxf/libwsraxf.vers                          |    2 +-
 libs/sraxf/libwsraxf.vers.h                        |    1 -
 libs/sraxf/prefix-tree-to-name.c                   |    2 -
 libs/sraxf/read-desc.c                             |    9 +-
 libs/sraxf/read-seg-from-readn.c                   |   43 +-
 libs/sraxf/stats.c                                 |  193 +-
 libs/sraxf/stats_quality.c                         |    2 +-
 libs/sraxf/tokenize-spot_name-ion-torrent.c        |   67 +-
 libs/vdb/Makefile                                  |   25 +-
 libs/vdb/blob-priv.h                               |   67 +-
 libs/vdb/blob.c                                    |  895 +-
 libs/vdb/blob.h                                    |    7 -
 libs/vdb/column-cmn.c                              |   22 +-
 libs/vdb/column-priv.h                             |   56 +-
 libs/vdb/cursor-cmn.c                              |  656 +-
 libs/vdb/cursor-priv.h                             |   36 +-
 libs/vdb/cursor.c                                  |    3 +-
 libs/vdb/database-cmn.c                            |   25 +
 libs/vdb/database-depend.c                         | 1715 +
 libs/vdb/dbmgr-cmn.c                               |  324 +-
 libs/vdb/dbmgr-priv.h                              |   42 -
 libs/vdb/dbmgr.c                                   |    5 -
 libs/vdb/delta_average.c                           |  297 +
 libs/vdb/libvdb.vers                               |    2 +-
 libs/vdb/libvdb.vers.h                             |    1 -
 libs/vdb/libwvdb.vers                              |    2 +-
 libs/vdb/libwvdb.vers.h                            |    1 -
 libs/vdb/linker-cmn.c                              |   25 +
 libs/vdb/linker-int.c                              |   11 +-
 libs/vdb/linker-priv.h                             |    7 +
 libs/vdb/meta-attr-write.c                         |   21 +-
 libs/vdb/page-map.c                                | 1397 +-
 libs/vdb/page-map.h                                |  291 +-
 libs/vdb/phys-cmn.c                                |   39 +-
 libs/vdb/prod-cmn.c                                |  291 +-
 libs/vdb/prod-expr.c                               |   12 +-
 libs/vdb/prod-func.c                               |    6 +-
 libs/vdb/prod-priv.h                               |   50 +-
 libs/vdb/prod.c                                    |   13 +
 libs/vdb/redimension.c                             |    1 +
 libs/vdb/report-vdb.c                              |  856 +
 libs/vdb/schema-dump.c                             |   37 +-
 libs/vdb/schema-expr.c                             |   11 +-
 libs/vdb/schema-int.c                              |    1 +
 libs/vdb/schema-parse.c                            |    8 +
 libs/vdb/schema-parse.h                            |    5 +
 libs/vdb/schema-priv.h                             |    3 +
 libs/vdb/schema-tbl.c                              |   54 +-
 libs/vdb/schema-type.c                             |   18 +-
 libs/vdb/schema.c                                  |   26 +-
 libs/vdb/table-cmn.c                               |  123 +-
 libs/vdb/table-priv.h                              |    2 +-
 libs/vdb/wcolumn.c                                 | 1177 +-
 libs/vdb/wcursor.c                                 |  274 +-
 libs/vdb/wdbmgr.c                                  |    7 -
 libs/vdb/wphys.c                                   |   99 +-
 libs/vdb/wprod.c                                   |   28 +-
 libs/vdb/wtable.c                                  |  113 +-
 libs/vfs/Makefile                                  |  139 +
 libs/vfs/libsrapath.vers                           |    1 +
 libs/vfs/libvfs.vers                               |    1 +
 libs/vfs/manager.c                                 | 3709 +
 libs/vfs/path-priv.h                               |  115 +
 libs/vfs/path.c                                    | 2457 +
 libs/vfs/resolver-priv.h                           |  144 +
 libs/vfs/resolver.c                                | 2694 +
 libs/vfs/srapath-stub.c                            |  372 +
 libs/vfs/srapath.c                                 | 1424 +
 libs/vfs/unix/syspath.c                            |  127 +
 libs/vfs/win/syspath.c                             |  288 +
 libs/vxf/Makefile                                  |   68 +-
 libs/vxf/checksum.c                                |    2 +
 libs/vxf/irzip.c                                   |    6 +-
 libs/vxf/irzip.impl.h                              |  174 +-
 libs/vxf/iunzip.c                                  |    7 +-
 libs/vxf/izip-common.h                             |    4 +-
 libs/vxf/libvxf.vers                               |    2 +-
 libs/vxf/libvxf.vers.h                             |    1 -
 libs/vxf/libwvxf.vers                              |    2 +-
 libs/vxf/lower-case-tech-reads.c                   |  111 +
 libs/vxf/math-funcs-impl.h                         |    2 +-
 libs/vxf/simple-sub-select.c                       |   79 +-
 libs/vxf/sprintf.c                                 | 1308 +-
 libs/vxf/unzip.c                                   |   16 +-
 libs/vxf/vec-sum.c                                 |  214 +-
 libs/vxf/wgs-tokenize-accession.c                  |  212 +
 libs/wgsxf/Makefile                                |  138 +
 libs/wgsxf/build_read_type.c                       |  113 +
 libs/wgsxf/build_scaffold.c                        |  388 +
 .../libalign-writer.vers => wgsxf/libwgsxf.vers}   |    0
 .../libalign-writer.vers => wgsxf/libwwgsxf.vers}  |    0
 tools/Makefile                                     |   25 +-
 tools/align-info/Makefile                          |   37 +-
 tools/align-info/align-info.c                      |  547 +-
 tools/align-info/align-info.vers                   |    2 +-
 tools/align-info/align-info.vers.h                 |    1 -
 tools/bam-loader/Globals.h                         |   90 +
 tools/bam-loader/KFileHelper.c                     |  142 +
 tools/bam-loader/KFileHelper.h                     |   48 +
 tools/bam-loader/KVPFile.c                         |  355 +
 tools/bam-loader/KVPFile.h                         |  164 +
 tools/bam-loader/Makefile                          |  136 +
 tools/bam-loader/alignment-writer.c                |  176 +
 tools/bam-loader/alignment-writer.h                |   95 +
 tools/bam-loader/analysis.c                        |  157 +
 tools/bam-loader/analysis.h                        |   49 +
 tools/bam-loader/bam-load.vers                     |    1 +
 tools/bam-loader/bam-loader.c                      |  987 +
 tools/bam-loader/hashtable.c                       |  878 +
 tools/bam-loader/hashtable.h                       |   55 +
 tools/bam-loader/loader-imp.c                      | 2097 +
 tools/bam-loader/loader-imp.h                      |   29 +
 tools/bam-loader/reference-writer.c                |  447 +
 tools/bam-loader/reference-writer.h                |   69 +
 tools/bam-loader/sequence-writer.c                 |  345 +
 tools/bam-loader/sequence-writer.h                 |   84 +
 tools/cg-load/Makefile                             |  119 +
 tools/cg-load/cg-load.c                            | 1120 +
 tools/cg-load/cg-load.vers                         |    1 +
 tools/cg-load/debug.h                              |   34 +
 tools/cg-load/defs.h                               |  136 +
 tools/cg-load/f1_3.c                               |   76 +
 tools/cg-load/f1_5.c                               |   76 +
 tools/cg-load/f2_0.c                               |   79 +
 tools/cg-load/f2_2.c                               |   95 +
 tools/cg-load/factory-cmn.h                        |   61 +
 tools/cg-load/factory-evidence-dnbs.c              |  351 +
 tools/cg-load/factory-evidence-dnbs.h              |   43 +
 tools/cg-load/factory-evidence-intervals.c         |  306 +
 tools/cg-load/factory-evidence-intervals.h         |   43 +
 tools/cg-load/factory-file.h                       |   43 +
 tools/cg-load/factory-mappings.c                   |  338 +
 tools/cg-load/factory-mappings.h                   |   43 +
 tools/cg-load/factory-reads.c                      |  261 +
 tools/cg-load/factory-reads.h                      |   43 +
 tools/cg-load/file-version-factory.c               |  157 +
 tools/cg-load/file.c                               |  403 +
 tools/cg-load/file.h                               |  330 +
 tools/cg-load/writer-algn.c                        |  775 +
 tools/cg-load/writer-algn.h                        |   62 +
 tools/cg-load/writer-evidence-dnbs.c               |  227 +
 tools/cg-load/writer-evidence-dnbs.h               |   88 +
 tools/cg-load/writer-evidence-intervals.c          |  255 +
 tools/cg-load/writer-evidence-intervals.h          |   68 +
 tools/cg-load/writer-seq.c                         |  135 +
 tools/cg-load/writer-seq.h                         |   58 +
 tools/fastq-loader/Makefile                        |  222 +
 tools/fastq-loader/fastq-grammar.c                 | 2100 +
 tools/fastq-loader/fastq-grammar.y                 |  294 +
 tools/fastq-loader/fastq-lex.c                     | 2418 +
 tools/fastq-loader/fastq-lex.l                     |  294 +
 tools/fastq-loader/fastq-loader.c                  |  541 +
 tools/fastq-loader/fastq-parse.h                   |  140 +
 tools/fastq-loader/fastq-reader.c                  |  701 +
 tools/fastq-loader/fastq-reader.h                  |   50 +
 tools/fastq-loader/fastq-tokens.h                  |   64 +
 tools/fastq-loader/latf-load.vers                  |    1 +
 tools/fastq-loader/loader-imp.c                    |  242 +
 tools/kar/Makefile                                 |   34 +-
 tools/kar/kar.c                                    |  104 +-
 tools/kar/kar.vers                                 |    2 +-
 tools/kar/kar.vers.h                               |    1 -
 tools/kar/sra-kar.c                                |   37 +-
 tools/kar/sra-kar.vers                             |    2 +-
 tools/kar/sra-kar.vers.h                           |    1 -
 tools/nenctool/Makefile                            |  123 +
 tools/nenctool/nenctest.c                          |  502 +
 tools/nenctool/nenctest.vers                       |    1 +
 tools/nenctool/nenctool.c                          |  446 +
 tools/nenctool/nenctool.vers                       |    1 +
 tools/nencvalid/Makefile                           |  111 +
 tools/nencvalid/nencvalid.c                        |  683 +
 tools/nencvalid/nencvalid.vers                     |    1 +
 tools/prefetch/Makefile                            |  111 +
 tools/prefetch/prefetch.c                          | 1177 +
 tools/prefetch/prefetch.vers                       |    1 +
 tools/refseq-load/Makefile                         |   26 +-
 tools/refseq-load/context.c                        |  115 +-
 tools/refseq-load/context.h                        |    8 +-
 tools/refseq-load/definitions.h                    |    4 -
 tools/refseq-load/refseq-load.c                    |  468 +-
 tools/refseq-load/refseq-load.vers                 |    2 +-
 tools/refseq-load/refseq-load.vers.h               |    1 -
 tools/sam-dump/#Makefile#                          |  118 +
 tools/sam-dump/Makefile                            |   38 +-
 tools/sam-dump/sam-dump.c                          | 5607 +-
 tools/sam-dump/sam-dump.vers                       |    2 +-
 tools/sam-dump/sam-dump.vers.h                     |    1 -
 tools/sra-dbcc/#Makefile#                          |  126 +
 tools/sra-dbcc/Makefile                            |   40 +-
 tools/sra-dbcc/sra-dbcc.c                          | 1464 +-
 tools/sra-dbcc/sra-dbcc.vers                       |    2 +-
 tools/sra-dbcc/sra-dbcc.vers.h                     |    1 -
 tools/sra-dump/Makefile                            |   46 +-
 tools/sra-dump/abi-dump.vers                       |    2 +-
 tools/sra-dump/abi-dump.vers.h                     |    1 -
 tools/sra-dump/abi.c                               |  118 +-
 tools/sra-dump/core.c                              | 1454 +-
 tools/sra-dump/core.h                              |    2 +-
 tools/sra-dump/factory.c                           |   77 +-
 tools/sra-dump/factory.h                           |   23 +-
 tools/sra-dump/fasta_dump.c                        |  752 +
 tools/sra-dump/fasta_dump.h                        |   36 +
 tools/sra-dump/fastq-dump.vers                     |    2 +-
 tools/sra-dump/fastq-dump.vers.h                   |    1 -
 tools/sra-dump/fastq.c                             | 3507 +-
 tools/sra-dump/illumina-dump.vers                  |    2 +-
 tools/sra-dump/illumina-dump.vers.h                |    1 -
 tools/sra-dump/illumina.c                          |  110 +-
 tools/sra-dump/sff-dump.vers                       |    2 +-
 tools/sra-dump/sff-dump.vers.h                     |    1 -
 tools/sra-dump/sff.c                               |   23 +-
 tools/sra-dump/sra-dump.c                          |   60 +-
 tools/sra-dump/sra-dump.vers                       |    2 +-
 tools/sra-dump/sra-dump.vers.h                     |    1 -
 tools/sra-load/Makefile                            |   36 +-
 tools/sra-load/abi-load.vers                       |    2 +-
 tools/sra-load/abi-load.vers.h                     |    1 -
 tools/sra-load/absolid-fmt.c                       |    6 -
 tools/sra-load/common-xml.c                        |   79 +-
 tools/sra-load/common-xml.h                        |   30 +-
 tools/sra-load/experiment-xml.c                    |  170 +-
 tools/sra-load/experiment-xml.h                    |    1 -
 tools/sra-load/fastq-fmt.c                         |   33 +-
 tools/sra-load/fastq-load.vers                     |    2 +-
 tools/sra-load/fastq-load.vers.h                   |    1 -
 tools/sra-load/helicos-fmt.c                       |    5 -
 tools/sra-load/helicos-load.vers                   |    2 +-
 tools/sra-load/helicos-load.vers.h                 |    1 -
 tools/sra-load/illumina-fmt.c                      |    5 -
 tools/sra-load/illumina-load.vers                  |    2 +-
 tools/sra-load/illumina-load.vers.h                |    1 -
 tools/sra-load/loader-file.c                       |    9 +-
 tools/sra-load/loader-file.h                       |    4 +-
 tools/sra-load/loader-fmt.h                        |    1 +
 tools/sra-load/loader.c                            |   66 +-
 tools/sra-load/run-xml.c                           |    5 +-
 tools/sra-load/run-xml.h                           |    3 +-
 tools/sra-load/sff-fmt.c                           |    5 -
 tools/sra-load/sff-load.vers                       |    2 +-
 tools/sra-load/sff-load.vers.h                     |    1 -
 tools/sra-load/srf-fmt.c                           |    5 -
 tools/sra-load/srf-load.vers                       |    2 +-
 tools/sra-load/srf-load.vers.h                     |    1 -
 tools/sra-load/writer-absolid.c                    |   10 +-
 tools/sra-load/writer-absolid.h                    |    5 +-
 tools/sra-pileup/Makefile                          |  152 +
 tools/sra-pileup/cg_tools.c                        |  532 +
 tools/sra-pileup/cg_tools.h                        |   64 +
 tools/sra-pileup/cmdline_cmn.c                     | 1042 +
 tools/sra-pileup/cmdline_cmn.h                     |  133 +
 tools/sra-pileup/debug.h                           |   34 +
 tools/sra-pileup/inputfiles.c                      |  376 +
 tools/sra-pileup/inputfiles.h                      |   99 +
 tools/sra-pileup/matecache.c                       |  439 +
 tools/sra-pileup/matecache.h                       |  119 +
 tools/sra-pileup/out_redir.c                       |  120 +
 tools/sra-pileup/out_redir.h                       |   64 +
 tools/sra-pileup/read_fkt.c                        |  338 +
 tools/sra-pileup/read_fkt.h                        |   63 +
 tools/sra-pileup/reref.c                           |  498 +
 tools/sra-pileup/reref.h                           |   48 +
 tools/sra-pileup/sam-aligned.c                     | 1604 +
 tools/sra-pileup/sam-aligned.h                     |   45 +
 tools/sra-pileup/sam-dump-opts.c                   | 1493 +
 tools/sra-pileup/sam-dump-opts.h                   |  277 +
 tools/sra-pileup/sam-dump.c                        | 4917 ++
 tools/sra-pileup/sam-dump.vers                     |    1 +
 tools/sra-pileup/sam-dump3.c                       |  532 +
 tools/sra-pileup/sam-hdr.c                         |  425 +
 tools/sra-pileup/sam-hdr.h                         |   41 +
 tools/sra-pileup/sam-unaligned.c                   | 1411 +
 tools/sra-pileup/sam-unaligned.h                   |   43 +
 tools/sra-pileup/sra-pileup.c                      | 1834 +
 tools/sra-pileup/sra-pileup.vers                   |    1 +
 tools/sra-sort/Makefile                            |  141 +
 tools/sra-sort/Makefile.cc                         |   24 +
 tools/sra-sort/Makefile.clang                      |   27 +
 tools/sra-sort/Makefile.gcc                        |   27 +
 tools/sra-sort/Makefile.vc++                       |   24 +
 tools/sra-sort/buff-writer.c                       |  785 +
 tools/sra-sort/buff-writer.h                       |   64 +
 tools/sra-sort/caps.c                              |  125 +
 tools/sra-sort/caps.h                              |   70 +
 tools/sra-sort/capture-first-half-aligned.c        |  192 +
 tools/sra-sort/col-pair.c                          |  816 +
 tools/sra-sort/col-pair.h                          |  323 +
 tools/sra-sort/csra-pair.c                         |  216 +
 tools/sra-sort/csra-pair.h                         |   84 +
 tools/sra-sort/csra-tbl.c                          |  783 +
 tools/sra-sort/csra-tbl.h                          |   83 +
 tools/sra-sort/ctx.h                               |  105 +
 tools/sra-sort/db-pair.c                           |  883 +
 tools/sra-sort/db-pair.h                           |  208 +
 tools/sra-sort/dir-pair.c                          |  504 +
 tools/sra-sort/dir-pair.h                          |  124 +
 tools/sra-sort/dump-blob-boundaries.c              |  203 +
 tools/sra-sort/except.c                            |  231 +
 tools/sra-sort/except.h                            |  160 +
 tools/sra-sort/gcc-ped.sh                          |   39 +
 tools/sra-sort/glob-poslen.c                       |  349 +
 tools/sra-sort/glob-poslen.h                       |   95 +
 tools/sra-sort/id-mapper-col.c                     |  260 +
 tools/sra-sort/id-mapper-col.h                     |   55 +
 tools/sra-sort/idx-mapping.c                       |   92 +
 tools/sra-sort/idx-mapping.h                       |   59 +
 tools/sra-sort/map-file.c                          | 1192 +
 tools/sra-sort/map-file.h                          |  172 +
 tools/sra-sort/mapping-row-set.c                   |  496 +
 tools/sra-sort/mem.c                               |   68 +
 tools/sra-sort/mem.h                               |  128 +
 tools/sra-sort/membank-priv.h                      |   44 +
 tools/sra-sort/membank.c                           |  296 +
 tools/sra-sort/meta-pair.c                         |  458 +
 tools/sra-sort/meta-pair.h                         |  109 +
 tools/sra-sort/paged-membank.c                     |  244 +
 tools/sra-sort/paged-mmapbank.c                    |  399 +
 tools/sra-sort/poslen-col-pair.c                   |  559 +
 tools/sra-sort/poslen-col-pair.h                   |   63 +
 tools/sra-sort/ref-alignid-col.c                   |  705 +
 tools/sra-sort/ref-alignid-col.h                   |   53 +
 tools/sra-sort/row-set-priv.h                      |   44 +
 tools/sra-sort/row-set.c                           |  208 +
 tools/sra-sort/row-set.h                           |  215 +
 tools/sra-sort/run.c                               |  388 +
 tools/sra-sort/simple-row-set.c                    |  212 +
 tools/sra-sort/sort-defs.h                         |   82 +
 tools/sra-sort/sorting-row-set.c                   |  405 +
 tools/sra-sort/sra-sort.c                          |  754 +
 tools/sra-sort/sra-sort.h                          |  171 +
 tools/sra-sort/sra-sort.vers                       |    1 +
 tools/sra-sort/status.h                            |   48 +
 tools/sra-sort/tbl-pair.c                          | 1055 +
 tools/sra-sort/tbl-pair.h                          |  209 +
 tools/sra-sort/xcheck-ref-align.c                  |  404 +
 tools/sra-sort/xcheck.h                            |   49 +
 tools/sra-stat/Makefile                            |   42 +-
 tools/sra-stat/sra-stat.c                          | 2353 +-
 tools/sra-stat/sra-stat.vers                       |    2 +-
 tools/sra-stat/sra-stat.vers.h                     |    1 -
 tools/srapath/Makefile                             |   96 +
 tools/srapath/srapath.c                            |  283 +
 tools/srapath/srapath.vers                         |    1 +
 tools/util/Makefile                                |  131 +-
 tools/util/kdbmeta.c                               |  545 +-
 tools/util/kdbmeta.vers                            |    2 +-
 tools/util/kdbmeta.vers.h                          |    1 -
 tools/util/mac/syspass.c                           |   48 +
 tools/util/rcexplain.vers                          |    2 +-
 tools/util/rcexplain.vers.h                        |    1 -
 tools/util/rowwritetest.c                          |   14 +-
 tools/util/rowwritetest.vers                       |    2 +-
 tools/util/syspass-priv.h                          |   44 +
 tools/util/test-sra.c                              | 1165 +
 tools/util/test-sra.vers                           |    1 +
 tools/util/testld.vers                             |    2 +-
 tools/util/txt2kdb.vers                            |    2 +-
 tools/util/unix/syspass.c                          |   62 +
 tools/util/vdb-lock.c                              |    4 +-
 tools/util/vdb-lock.vers                           |    2 +-
 tools/util/vdb-lock.vers.h                         |    1 -
 tools/util/vdb-passwd.c                            |  276 +
 tools/util/vdb-passwd.vers                         |    1 +
 tools/util/vdb-unlock.c                            |    4 +-
 tools/util/vdb-unlock.vers                         |    2 +-
 tools/util/vdb-unlock.vers.h                       |    1 -
 tools/util/win/syspass.c                           |   53 +
 tools/vdb-config/Makefile                          |   25 +-
 tools/vdb-config/vdb-config.c                      |  386 +-
 tools/vdb-config/vdb-config.vers                   |    2 +-
 tools/vdb-config/vdb-config.vers.h                 |    1 -
 tools/vdb-copy/#Makefile#                          |  137 +
 tools/vdb-copy/Makefile                            |   37 +-
 tools/vdb-copy/coldefs.c                           |   43 +-
 tools/vdb-copy/coldefs.h                           |    2 +-
 tools/vdb-copy/context.c                           |    4 +
 tools/vdb-copy/context.h                           |    8 +
 tools/vdb-copy/copy_meta.c                         |  165 +-
 tools/vdb-copy/definitions.h                       |    2 +
 tools/vdb-copy/helper.c                            |   14 +-
 tools/vdb-copy/helper.h                            |    3 +-
 tools/vdb-copy/namelist_tools.c                    |    2 +-
 tools/vdb-copy/num-gen.c                           |   10 +-
 tools/vdb-copy/progressbar.c                       |   18 +-
 tools/vdb-copy/redactval.c                         |    1 -
 tools/vdb-copy/type_matcher.c                      |   24 +-
 tools/vdb-copy/vdb-copy-includes.h                 |    2 +
 tools/vdb-copy/vdb-copy.c                          |  119 +-
 tools/vdb-copy/vdb-copy.vers                       |    2 +-
 tools/vdb-copy/vdb-copy.vers.h                     |    1 -
 tools/vdb-decrypt/Makefile                         |  130 +
 tools/vdb-decrypt/shared.c                         | 1270 +
 tools/vdb-decrypt/shared.h                         |   93 +
 tools/vdb-decrypt/vdb-decrypt.c                    |  280 +
 tools/vdb-decrypt/vdb-decrypt.vers                 |    1 +
 tools/vdb-decrypt/vdb-encrypt.c                    |  227 +
 tools/vdb-decrypt/vdb-encrypt.vers                 |    1 +
 tools/vdb-dump/#Makefile#                          |  130 +
 tools/vdb-dump/Makefile                            |   39 +-
 tools/vdb-dump/vdb-dump-coldefs.c                  |  258 +-
 tools/vdb-dump/vdb-dump-coldefs.h                  |    4 +-
 tools/vdb-dump/vdb-dump-context.c                  |   79 +-
 tools/vdb-dump/vdb-dump-context.h                  |   17 +-
 tools/vdb-dump/vdb-dump-filter.c                   |    4 +-
 tools/vdb-dump/vdb-dump-formats.c                  |   55 +-
 tools/vdb-dump/vdb-dump-helper.c                   |   78 +-
 tools/vdb-dump/vdb-dump-helper.h                   |    2 +-
 tools/vdb-dump/vdb-dump-num-gen.c                  |    4 +-
 tools/vdb-dump/vdb-dump-num-gen.h                  |    3 +-
 tools/vdb-dump/vdb-dump-row-context.h              |    1 +
 tools/vdb-dump/vdb-dump-str.c                      |   32 +-
 tools/vdb-dump/vdb-dump-tools.c                    |    1 -
 tools/vdb-dump/vdb-dump.c                          |  767 +-
 tools/vdb-dump/vdb-dump.vers                       |    2 +-
 tools/vdb-dump/vdb-dump.vers.h                     |    1 -
 tools/vdb-validate/Makefile                        |  114 +
 tools/vdb-validate/vdb-validate.c                  | 2325 +
 tools/vdb-validate/vdb-validate.vers               |    1 +
 1083 files changed, 478413 insertions(+), 20164 deletions(-)

diff --git a/CHANGES b/CHANGES
deleted file mode 100644
index 63d53dc..0000000
--- a/CHANGES
+++ /dev/null
@@ -1,30 +0,0 @@
-# ===========================================================================
-#
-#                            PUBLIC DOMAIN NOTICE
-#               National Center for Biotechnology Information
-#
-#  This software/database is a "United States Government Work" under the
-#  terms of the United States Copyright Act.  It was written as part of
-#  the author's official duties as a United States Government employee and
-#  thus cannot be copyrighted.  This software/database is freely available
-#  to the public for use. The National Library of Medicine and the U.S.
-#  Government have not placed any restriction on its use or reproduction.
-#
-#  Although all reasonable efforts have been taken to ensure the accuracy
-#  and reliability of the software and data, the NLM and the U.S.
-#  Government do not and cannot warrant the performance or results that
-#  may be obtained by using this software or data. The NLM and the U.S.
-#  Government disclaim all warranties, express or implied, including
-#  warranties of performance, merchantability or fitness for any particular
-#  purpose.
-#
-#  Please cite the author in any work or product based on this material.
-#
-# ===========================================================================
-
-
-The NCBI SRA Software Development Kit
-Contact: sra-tools at ncbi.nlm.nih.gov
-
-Release documentation is now being delivered at
-http://trace.ncbi.nlm.nih.gov/Traces/sra/sra.cgi?view=software
diff --git a/Makefile b/Makefile
index 85bb82c..b556f1a 100644
--- a/Makefile
+++ b/Makefile
@@ -47,17 +47,6 @@ $(SUBDIRS) test:
 .PHONY: default $(SUBDIRS) test
 
 #-------------------------------------------------------------------------------
-# static vs. dynamic
-#
-static:
-	@ touch "$(CURDIR)/build/STATIC"
-
-dynamic:
-	@ rm -f "$(CURDIR)/build/STATIC"
-
-.PHONY: static dynamic
-
-#-------------------------------------------------------------------------------
 # all
 #
 SUBDIRS_ALL = $(addsuffix _all,$(SUBDIRS))
@@ -89,27 +78,45 @@ SUBDIRS_CLEAN = $(addsuffix _clean,$(SUBDIRS_ALL))
 clean: $(SUBDIRS_CLEAN)
 
 $(SUBDIRS_CLEAN):
-	@ $(MAKE) -C $(subst _all_clean,,$@) clean
+	@ $(MAKE) -s -C $(subst _all_clean,,$@) clean
 
 .PHONY: clean $(SUBDIRS_CLEAN)
 
 
 #-------------------------------------------------------------------------------
+# runtests
+#
+SUBDIRS_RUNTESTS = $(addsuffix _runtests, libs tools test)
+
+runtests: std $(SUBDIRS_RUNTESTS)
+
+$(SUBDIRS_RUNTESTS):
+	@ $(MAKE) -C $(subst _runtests,,$@) runtests
+
+.PHONY: runtests $(SUBDIRS_RUNTESTS)
+
+#-------------------------------------------------------------------------------
 # pass-through targets
 #
-COMPILERS = GCC ICC VC++
-ARCHITECTURES = i386 x86_64
-CONFIG = debug profile release
+COMPILERS = GCC VC++ CLANG
+ARCHITECTURES = i386 x86_64 sparc32 sparc64
+CONFIG = debug profile release static dynamic
+PUBLISH = scm pubtools
+REPORTS = bindir targdir osdir config compilers architecture architectures
 PASSTHRUS = \
-	out bindir \
+	out \
 	CC $(COMPILERS) \
 	$(ARCHITECTURES) \
-	$(CONFIG)
+	$(CONFIG) $(PUBLISH)
 
 $(PASSTHRUS):
-	@ $(MAKE) TOP=$(CURDIR) -f build/Makefile.env $@
+	@ $(MAKE) -s TOP=$(CURDIR) -f build/Makefile.env $@
+	@ $(MAKE) -s TOP=$(CURDIR) -f build/Makefile.env rebuild-dirlinks config
+
+$(REPORTS):
+	@ $(MAKE) -s TOP=$(CURDIR) -f build/Makefile.env $@
 
-.PHONY: $(PASSTHRUS)
+.PHONY: $(PASSTHRUS) $(REPORTS)
 
 
 #-------------------------------------------------------------------------------
diff --git a/README b/README
index 6abcab1..b9cb81e 100644
--- a/README
+++ b/README
@@ -32,26 +32,8 @@ http://trace.ncbi.nlm.nih.gov/Traces/sra/std
 The SRA Toolkit and SDK from NCBI is a collection of tools and
 libraries for using data in the INSDC Sequence Read Archives.
 
-With this release, NCBI has implemented Compression by Reference, a
-sequence alignment compression process for storing sequence data.
-Currently BAM, Complete Genomics and Illumina export.txt formats
-contain alignment information. Compression by Reference only stores
-the difference in base pairs between sequence data and the segments it
-aligns to.  The decompression process to restore original data such as
-fastq-dump would require fast access to the actual sequences of the
-references. NCBI recommends that SRA users dedicate local disk space
-to store local references downloaded from the NCBI SRA site. Linked
-references should be in a location accessible by the SRA Reader
-software.
-
-Older files in the NCBI system may not have been compressed using
-Compression by Reference.  For more information on how to use
-Reference-based compressed files, download local references, and use
-related tools please refer to Compression by Reference file on the
-NCBI SRA website:
-
-    "http://trace.ncbi.nlm.nih.gov/Traces/sra/sra.cgi?view=softwareReadme"
-
+With this release, NCBI has implemented Automatic Remote Access by accession,
+making it possible to access data using NCBI servers without prior download.
 
 For additional information on using and building the toolkit,
 please visit our web site at:
diff --git a/README-WINDOWS.txt b/README-WINDOWS.txt
index 6a72a3b..fc27bf0 100644
--- a/README-WINDOWS.txt
+++ b/README-WINDOWS.txt
@@ -29,6 +29,21 @@ The NCBI SRA ( Sequence Read Archive ) SDK ( Software Development Kit )
 Contact: sra-tools at ncbi.nlm.nih.gov
 
 
+NOTICE:
+
+  Effective as of release 2.1.8, NCBI is no longer supporting public sources for
+  Windows builds. The sources will still contain everything that we use to build
+  the binaries, but may not build in your environment.
+
+  The reason for this change has to do with dependencies upon third party
+  libraries, which are commonly installed on other platforms, but could be
+  described as "hit and miss" on Windows. When the libraries DO exist, it is
+  difficult to know if they have a correct or compatible calling convention.
+
+  We will continue to distribute pre-built binaries for Windows. You are welcome
+  to try your luck at compiling the sources yourself under Cygwin.
+
+
 ENVIRONMENT:
 
   The Windows build uses the same makefiles as Linux and Mac, and has
diff --git a/README-build b/README-build
deleted file mode 100644
index fe1d722..0000000
--- a/README-build
+++ /dev/null
@@ -1,237 +0,0 @@
-# ===========================================================================
-#
-#                            PUBLIC DOMAIN NOTICE
-#               National Center for Biotechnology Information
-#
-#  This software/database is a "United States Government Work" under the
-#  terms of the United States Copyright Act.  It was written as part of
-#  the author's official duties as a United States Government employee and
-#  thus cannot be copyrighted.  This software/database is freely available
-#  to the public for use. The National Library of Medicine and the U.S.
-#  Government have not placed any restriction on its use or reproduction.
-#
-#  Although all reasonable efforts have been taken to ensure the accuracy
-#  and reliability of the software and data, the NLM and the U.S.
-#  Government do not and cannot warrant the performance or results that
-#  may be obtained by using this software or data. The NLM and the U.S.
-#  Government disclaim all warranties, express or implied, including
-#  warranties of performance, merchantability or fitness for any particular
-#  purpose.
-#
-#  Please cite the author in any work or product based on this material.
-#
-# ===========================================================================
-
-
-The NCBI SRA ( Sequence Read Archive ) SDK ( Software Development Kit )
-
-
-Contact: sra-tools at ncbi.nlm.nih.gov
-http://trace.ncbi.nlm.nih.gov/Traces/sra/std
-
-
-This version of the NCBI SRA SDK generates loading and dumping tools with
-their respective libraries for building new and accessing existing runs.
-It may be built with GCC, ICC or Microsoft VC++.
-
-
-REQUIREMENTS:
-
-This software release was designed to run under Linux, MacOSX and Windows
-operating systems on Intel x86-compatible 32 and 64 bit architectures.
-
-  ar                # tested with version 2.15.90
-  bash              # certain scripts require bash
-  make              # GNU make version 3.80 or later
-  gcc, g++          # tested with 4.1.2, but should work with others
-  libz              # version 1
-  libbz2            # version 1
-  libxml2           # tested with version 2.6.7 [Linux and Mac only]
-
-If your system does NOT have libz or libbz2, or if the build fails due to
-missing one of the expected libraries, try running "make all" which will
-attempt to download the sources to libz and libbz2 and build them.
-
-OPTIONS:
-
-Specific versions of ICC are supported as an alternate compiler.
-
-  icc, icpc         # tested with 11.0 (64-bit) and 10.1 (32-bit)
-                    # 32-bit 11.0 does not work
-
-WINDOWS BUILD:
-
-The Windows build uses the same makefiles as Linux and Mac, and has been tested
-under Cygwin. You need to execute Cygwin AFTER sourcing the Microsoft batch file
-from Visual Studio.
-
-
-CONTENTS:
-
-  CHANGES           # describes changes at pertinent levels
-  Makefile          # drives configuration and sub-target builds
-  README
-  README-WINDOWS.txt
-  USAGE
-  build             # holds special makefiles and configuration
-  interfaces        # contains module interfaces, schema, plus
-                      compiler and platform specific includes
-  libs              # sdk library code
-  tools             # toolkit code
-  test              # testing code
-
-
-CONFIGURATION:
-
-There are three configurable parameters:
-  1) BUILD  = 'debug', 'release' etc.
-  2) COMP   = 'GCC' etc.
-  3) OUTDIR = <path-to-binaries-libs-objfiles>
-
-The target architecture is chosen to match your build host. At this
-time, only the Macintosh build will support cross-compilation. In the
-instructions below, x86_64 is the assumed architecture. If your host
-is i386 (32-bit), then you would substitute 32 for paths that contain
-64.
-
-
-BUILD INSTRUCTIONS:
-
-## create output directories and symlinks for first time
-
-  $ OUTDIR=<path-to-output>
-  $ make OUTDIR="$OUTDIR" out
-
-The path in OUTDIR MUST be a full path - relative paths may fail.
-
-## decide upon STATIC or DYNAMIC builds
-#  VDB.2 was designed to make use of dynamic libraries, but
-#  in many environments static builds are more convenient or may even be
-#  required, due to installation restrictions.
-#
-#  THE BUILD DOES NOT CURRENTLY SUPPORT PARALLEL DYNAMIC AND STATIC MODES
-#  if you switch between them, you should perform a "make clean" first.
-
-  $ make static
--OR_
-  $ make dynamic
-
-## if you are using a dynamic build, update LD_LIBRARY_PATH - probably want to put
-# in shell startup ( ensure that libz, libbz2 and libxml2 can be found in your path )
-
-  $ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$OUTDIR/lib64"
-
-## the build uses "TOP" as an internal variable
-#  if you have it defined in your shell environment, unset it before making
-
-## build the libraries and binaries
-
-  $ make GCC debug     # optionally set compiler and/or build
-  $ make               # builds libraries and binary executables
-
-The standard make will cause default libraries and tools to be built. Binary
-executables and both shared and static libraries can be found in their
-respective output directories.
-
-If the build fails due to not finding libz or libbz2, try:
-
-  $ make all           # see note above on libraries
-
-
-STATIC BUILD RESULTS:
-
-<OUTDIR>/bin64/         # (bin32 for 32-bit builds)
-  abi-dump              # dump to ABI-native format
-  abi-load              # load from ABI-native format
-  align-info            # retrieve information from cSRA object
-  fastq-dump            # dump to FASTQ format
-  fastq-load            # load from FASTQ format
-  helicos-load          # load from Helicos native format
-  illumina-dump         # dump to Illumina-native format
-  illumina-load         # load from Illumina-native format
-  kar                   # single file archive utility
-  kdbmeta               # access db, table or column metadata
-  rcexplain             # return code display utility
-  sam-dump              # dump to SAM format from cSRA
-  sff-dump              # dumps 454 runs in SFF format
-  sff-load              # load from SFF format
-  sra-dbcc              # consistency checker
-  sra-kar               # sra-specific kar tool
-  sra-stat              # gather run statistics and print to stdout
-  srf-load              # load from SRF format
-  vdb-copy              # tool to copy tables
-  vdb-dump              # dump rows in a textual format
-  vdb-lock              # locks an object against modification
-  vdb-unlock            # unlocks an object
-
-<OUTDIR>/bin64/ncbi     # (bin32 for 32-bit builds)
-  config.kfg            # simple text file for configuring file system
-
-<OUTDIR>/lib64/         # (lib32 for 32-bit builds)
-  libkdb                # static physical layer reading library
-  libkfg                # static configuration library
-  libkfs                # static file system library
-  libklib               # static support library
-  libkproc              # static process synchronization library
-  libkq                 # static cross-thread queue library
-  libksproc             # static single-threaded emulation library
-  libksrch              # static search algorithm library
-  libkxfs               # static XML to filesystem library
-  libkxml               # static XML container support library
-  libload               # static loader tool utility library
-  libsradb              # static API for accessing sra
-  libsrareader          # static reader library
-  libsraschema          # static version of SRA schema
-  libvdb                # static virtual layer reading library
-  libwkdb               # static physical layer update library
-  libwsradb             # static update API for SRA
-  libwvdb               # static virtual layer update library
-
-<OUTDIR>/mod64/         # (mod32 for 32-bit builds)
-  -- empty --
-
-<OUTDIR>/wmod64/        # (wmod32 for 32-bit builds)
-  -- empty --
-
-
-
-DYNAMIC BUILD RESULTS:
-
-<OUTDIR>/bin64/         # (bin32 for 32-bit builds)
-  -- same as static --
-
-<OUTDIR>/bin64/ncbi     # (bin32 for 32-bit builds)
-  -- empty --
-
-<OUTDIR>/lib64/         # (lib32 for 32-bit builds)
-  libkdb                # physical layer reading library
-  libkfg                # configuration library
-  libkfs                # file system library
-  libklib               # support library
-  libkproc              # process synchronization library
-  libkq                 # cross-thread queue library
-  libksproc             # single-threaded emulation library
-  libksrch              # search algorithm library
-  libkxfs               # XML to filesystem library
-  libkxml               # XML container support library
-  libload               # loader tool utility library
-  libsra-schema         # weak-linked sra schema
-  libsradb              # API for accessing sra
-  libsrapath            # weak-link stubs for srapath
-  libsrareader          # reader library
-  libvdb                # virtual layer reading library
-  libwkdb               # physical layer update library
-  libwsradb             # update API for SRA
-  libwvdb               # virtual layer update library
-
-<OUTDIR>/lib64/ncbi     # (lib32 for 32-bit builds)
-  config.kfg            # simple text file for configuring file system
-
-<OUTDIR>/mod64/         # (mod32 for 32-bit builds)
-  libaxf                # cSRA-specific VDB external functions
-  libsraxf              # sra-specific VDB external functions
-  libvxf                # generic VDB external functions
-
-<OUTDIR>/wmod64/        # (wmod32 for 32-bit builds)
-  libwsraxf             # sra-specific VDB external functions for update
-  libwvxf               # update VDB external functions
diff --git a/README-build.txt b/README-build.txt
new file mode 100644
index 0000000..300f138
--- /dev/null
+++ b/README-build.txt
@@ -0,0 +1,259 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+The NCBI SRA ( Sequence Read Archive ) SDK ( Software Development Kit )
+
+
+Contact: sra-tools at ncbi.nlm.nih.gov
+http://trace.ncbi.nlm.nih.gov/Traces/sra/std
+
+
+This version of the NCBI SRA SDK generates tools with their respective libraries
+for building new and accessing existing runs. It may be built with GCC.
+
+
+REQUIREMENTS:
+
+This software release was designed to run under Linux, MacOSX and Windows
+operating systems on Intel x86-compatible 32 and 64 bit architectures.
+
+  ar                # tested with version 2.22
+  bash              # certain scripts require bash
+  make              # GNU make version 3.81 or later
+  gcc, g++          # tested with 4.4.2, but should work with others
+  libxml2           # tested with version 2.7.6
+  libcurl           # tested with version 7.27
+
+WINDOWS BUILD:
+
+The Windows build uses the same make files as Linux and Mac, and has been tested
+under Cygwin. You need to execute Cygwin AFTER sourcing the Microsoft batch file
+from Visual Studio.
+
+
+CONTENTS:
+
+  Makefile          # drives configuration and sub-target builds
+  README
+  README-WINDOWS.txt
+  build             # holds special makefiles and configuration
+  interfaces        # contains module interfaces, schema, plus
+                      compiler and platform specific includes
+  libs              # sdk library code
+  tools             # toolkit code
+
+
+CONFIGURATION:
+
+There are three configurable parameters:
+  1) BUILD  = 'debug', 'release' etc.
+  2) COMP   = 'GCC' etc.
+  3) OUTDIR = <path-to-binaries-libs-objfiles>
+
+The target architecture is chosen to match your build host. At this
+time, only the Macintosh build will support cross-compilation. In the
+instructions below, x86_64 is the assumed architecture. If your host
+is i386 (32-bit), then you would substitute 32 for paths that contain
+64.
+
+Running "make help" will list more details of how your build may
+be configured:
+
+  Before initial build, run 'make OUTDIR=<dir> out' from
+  the project root to set the output directory of your builds.
+
+  To select a compiler, run 'make <comp>' where
+  comp = { GCC VC++ CLANG }.
+
+  For hosts that support cross-compilation ( only Macintosh today ),
+  you can run 'make <arch>' where arch = { i386 x86_64 sparc32 sparc64 }.
+
+  To set a build configuration, run 'make <config>' where
+  config = { debug profile release static dynamic }.
+
+Running "make config" will show the current configuration, e.g.:
+
+  current build is linux static rel x86_64 build using gcc tools
+  output target directory is '$PATH_TO_OUTPUT/linux/gcc/stat/x86_64/rel'
+
+where "$PATH_TO_OUTPUT" is local to your system, of course.
+
+
+BUILD INSTRUCTIONS:
+
+## create output directories and symlinks for first time
+
+  $ OUTDIR=<path-to-output>
+  $ make OUTDIR="$OUTDIR" out
+
+The path in OUTDIR MUST be a full path - relative paths may fail.
+
+## decide upon STATIC or DYNAMIC builds
+#  VDB.2 was designed to make use of dynamic libraries, but
+#  in many environments static builds are more convenient or may even be
+#  required, due to installation restrictions.
+#
+#  THE BUILD DOES NOT CURRENTLY SUPPORT PARALLEL DYNAMIC AND STATIC MODES
+#  if you switch between them, you should perform a "make clean" first.
+
+  $ make static
+-OR_
+  $ make dynamic
+
+## if you are using a dynamic build, update LD_LIBRARY_PATH - probably want to put
+# in shell startup ( ensure that libz, libbz2 and libxml2 can be found in your path )
+
+  $ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$OUTDIR/lib64"
+
+## the build uses "TOP" as an internal variable
+#  if you have it defined in your shell environment, unset it before making
+
+## build the libraries and binaries
+
+  $ make GCC debug     # optionally set compiler and/or build
+  $ make               # builds libraries and binary executables
+
+The standard make will cause default libraries and tools to be built. Binary
+executables and both shared and static libraries can be found in their
+respective output directories.
+
+
+STATIC BUILD RESULTS:
+
+<OUTDIR>/bin64/         # (bin32 for 32-bit builds)
+  abi-dump              # dump to ABI-native format
+  abi-load              # load from ABI-native format
+  align-info            # retrieve information from SRA alignment object (cSRA)
+  bam-load              # load from BAM format into SRA (cSRA)
+  cg-load               # load from Complete Genomics native format
+  fastq-dump            # dump to FASTQ format
+  fastq-load            # load from FASTQ format
+  helicos-load          # load from Helicos native format
+  illumina-dump         # dump to Illumina-native format
+  illumina-load         # load from Illumina-native format
+  kar                   # single file archive utility
+  kdbmeta               # access db, table or column metadata
+  latf-load             # generic FASTQ loader
+  prefetch              # tool to download runs from NCBI by accession
+  rcexplain             # return code display utility
+  sam-dump              # dump to SAM format from cSRA
+  sff-dump              # dumps 454 runs in SFF format
+  sff-load              # load from SFF format
+  sra-kar               # sra-specific kar tool
+  sra-pileup            # produces SAM-style pileup information from SRA (cSRA)
+  sra-sort              # canonically orders SRA (cSRA) data for improved access
+  sra-stat              # gather run statistics and print to stdout
+  srapath               # returns the full location of an object by accession
+  srf-load              # load from SRF format
+  test-sra              # test user's environment for configuration and libraries
+  vdb-config            # display and/or modify user configuration
+  vdb-copy              # tool to copy tables
+  vdb-decrypt           # tool to decrypt files from dbGap
+  vdb-dump              # dump rows in a textual format
+  vdb-encrypt           # to to (re)encrypt files using dbGap encryption key
+  vdb-lock              # locks an object against modification
+  vdb-unlock            # unlocks an object
+
+<OUTDIR>/lib64/         # (lib32 for 32-bit builds)
+  libalign-access       # BAM format reading API
+  libalign-reader       # SRA (cSRA) alignment reading API
+  libbz2                # bzip2 library
+  libkdb                # physical layer reading library
+  libkfg                # configuration library
+  libkfs                # physical file system library
+  libklib               # support library
+  libkproc              # process synchronization library
+  libkq                 # cross-thread queue library
+  libkrypto             # cryptographic library
+  libsproc              # single-threaded stub library
+  libksrch              # search algorithm library
+  libkurl               # interface to libcurl
+  libkxfs               # XML to filesystem library
+  libkxml               # XML container support library
+  libload               # loader tool utility library
+  libsradb              # API for accessing sra
+  libsrareader          # reader library
+  libsraschema          # version of SRA schema for reading
+  libvdb                # virtual layer reading library
+  libvfs                # virtual file system library
+  libwkdb               # physical layer update library
+  libwsradb             # update API for SRA
+  libwsraschema         # version of SRA schema for update
+  libwvdb               # virtual layer update library
+  libz                  # gzip library
+
+<OUTDIR>/mod64/         # (mod32 for 32-bit builds)
+  -- empty --
+
+<OUTDIR>/wmod64/        # (wmod32 for 32-bit builds)
+  -- empty --
+
+
+
+DYNAMIC BUILD RESULTS:
+
+<OUTDIR>/bin64/         # (bin32 for 32-bit builds)
+  -- same as static --
+
+<OUTDIR>/lib64/         # (lib32 for 32-bit builds)
+  libalign-access       # BAM format reading API
+  libalign-reader       # SRA (cSRA) alignment reading API
+  libbz2                # static bzip2 library
+  libkdb                # physical layer reading library
+  libkfg                # configuration library
+  libkfs                # physical file system library
+  libklib               # support library
+  libkproc              # process synchronization library
+  libkq                 # cross-thread queue library
+  libkrypto             # cryptographic library
+  libsproc              # single-threaded stub library
+  libksrch              # search algorithm library
+  libkurl               # interface to libcurl
+  libkxfs               # XML to filesystem library
+  libkxml               # XML container support library
+  libload               # loader tool utility library
+  libsradb              # API for accessing sra
+  libsrareader          # reader library
+  libsraschema          # static version of SRA schema for reading
+  libvdb                # virtual layer reading library
+  libvfs                # virtual file system library
+  libwkdb               # physical layer update library
+  libwsradb             # update API for SRA
+  libwsraschema         # static version of SRA schema for update
+  libwvdb               # virtual layer update library
+  libz                  # static gzip library
+
+<OUTDIR>/mod64/         # (mod32 for 32-bit builds)
+  libaxf                # cSRA-specific VDB external functions
+  libsraxf              # SRA-specific VDB external functions
+  libvxf                # generic VDB external functions
+  libwgsxf              # WGS-specific VDB external functions
+
+<OUTDIR>/wmod64/        # (wmod32 for 32-bit builds)
+  libwaxf               # cSRA-specific VDB external functions for update
+  libwsraxf             # SRA-specific VDB external functions for update
+  libwvxf               # update VDB external functions
+  libwwgsxf             # WGS-specific VDB external functions for update
+
diff --git a/README-config.txt b/README-config.txt
new file mode 100644
index 0000000..f64ffdb
--- /dev/null
+++ b/README-config.txt
@@ -0,0 +1,58 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+The NCBI SRA ( Sequence Read Archive )
+
+
+Contact: sra-tools at ncbi.nlm.nih.gov
+http://trace.ncbi.nlm.nih.gov/Traces/sra/std
+
+About configuration-assistant:
+
+  configuration-assistant.perl will help you to configure the SRA tools to be able
+  to access the local reference repository and to download the correct references
+  for a given cSRA file.
+
+To run configuration-assistant on Linux or Mac:
+  - open a shell
+  - change directory to the folder where you extracted the toolkit (cd .../sratoolkit...),
+  - type 'perl configuration-assistant.perl' (without the quotation marks).
+
+
+To run configuration-assistant on Windows:
+
+  - open Command Prompt (Start->Run->cmd.exe),
+  - change directory to the folder where you extracted the toolkit (cd ...\sratoolkit.x.x.x-win64),
+  - type 'perl configuration-assistant.perl' (without the quotation marks).
+
+
+If the following message shows up:
+
+  "'perl' is not recognized as an internal or external command,
+    operable program or batch file."
+
+that means perl is not installed or not installed properly.
+
+Download Perl at ActiveState.com (http://www.activestate.com/activeperl/downloads)
diff --git a/USAGE b/USAGE
deleted file mode 100644
index 148122e..0000000
--- a/USAGE
+++ /dev/null
@@ -1,162 +0,0 @@
-# ===========================================================================
-#
-#                            PUBLIC DOMAIN NOTICE
-#               National Center for Biotechnology Information
-#
-#  This software/database is a "United States Government Work" under the
-#  terms of the United States Copyright Act.  It was written as part of
-#  the author's official duties as a United States Government employee and
-#  thus cannot be copyrighted.  This software/database is freely available
-#  to the public for use. The National Library of Medicine and the U.S.
-#  Government have not placed any restriction on its use or reproduction.
-#
-#  Although all reasonable efforts have been taken to ensure the accuracy
-#  and reliability of the software and data, the NLM and the U.S.
-#  Government do not and cannot warrant the performance or results that
-#  may be obtained by using this software or data. The NLM and the U.S.
-#  Government disclaim all warranties, express or implied, including
-#  warranties of performance, merchantability or fitness for any particular
-#  purpose.
-#
-#  Please cite the author in any work or product based on this material.
-#
-# ===========================================================================
-
-
-The NCBI SRA ( Sequence Read Archive ) Toolkit
-
-
-Contact: sra-tools at ncbi.nlm.nih.gov
-http://trace.ncbi.nlm.nih.gov/Traces/sra/sra.cgi?view=software
-
-
-For preliminary documentation on tool usage, consult the files within
-the "help" directory.
-
-
-CHANGES:
-
-SRA Toolkit includes new features in sam-dump tool and vdb-dump tools.  
-
-Sam-dump now supports slicing across multiple sequences, and dumping cSRA files to fasta and fastq formats. In addition, sam-dump has three new parameters
--=|--hide-identical              Output '=' if base is identical to reference
---gzip                           Compress output using gzip
---bzip2                          Compress output using bzip2
-
-vdb-dump has two new parameters
--o|--column_enum_short           enumerates columns in short form
--b|--boolean                     defines how boolean's are printed (1,T)
-
-We have combined the functionality of two scripts, config-assistant.perl and reference-assistant.perl into a single script, configuration-assistant.perl that helps users download the correct references for a given cSRA file and configure the user environment for the SRA Toolkit.
-
-DESCRIPTION:
-
- This release includes tools for reading the SRA archive, generally
- by converting individual runs into some commonly used format such as
- fastq. Support for NCBI's Compression by Reference is also included.
-
- "Linux" binaries have been created on CentOS and SuSE Linux
- distributions. They are not guaranteed to work on other
- distributions. In particular, the version of libc.so should be
- compatible. They are specific to the x86-family architectures.
-
- "Windows" binaries have been created using MSVC's (not Cygwin)
- tools. This release includes Win32 binaries. The "*-load" tools
- are not released for "Windows".
-
- "Mac OS X" binaries are available for the x86-family
- architectures. They will NOT run on PPC Macs. The 64-bit binaries
- will run only on OS 10.6. The 32-bit binaries should run on either
- 10.5 or later.
-
-
-CONTENTS:
-
- "abi-dump"            - dump ABI color-space runs into their native format
- "abi-load"            - load ABI color-space runs
- "fastq-dump"          - dump any run of any platform in FASTQ format
- "fastq-load"          - load FASTQ runs
- "helicos-load"        - load HELICOS runs
- "illumina-dump"       - dump Illumina runs into their native format
- "illumina-load"       - load Illumina native runs
- "kar"                 - an archive extraction tool for .sra files
- "kdbmeta"             - display the contents of one or more metadata stores
- "rcexplain"           - print out error string for return codes (RC)
- "refseq-load"         - ( NEW for Linux and Mac ) download a reference
-                         sequence object
- "sff-dump"            - dump 454 runs into SFF format
- "sff-load"            - load 454 SFF runs
- "sra-dbcc"            - check SRA runs
- "sra-dump"            - dump any run in a textual format [see note below]
- "sra-kar"             - creates a single file archive from an SRA run
- "sra-stat"            - display run column statistics
- "srf-load"            - load SRF runs
- "sam-dump"            - dump a cSRA into the SAM-format
- "vdb-copy"            - copy SRA objects
- "vdb-dump"            - display SRA objects in a textual format [see note below]
- "vdb-lock"            - lock an object against modification
- "vdb-unlock"          - unlock an object
- "align-info"          - displays which references a csra-archive uses
- "vdb-config"          - displays the configuration
-
-
-NOTES:
-
- The "sam-dump" tool only works on cSRA's. ( See README-csra )
- The textual dumpers "sra-dump" and "vdb-dump" are provided in this
- release as an aid in visual inspection. It is likely that their
- actual output formatting will be changed in the near future to a
- stricter, more formalized representation[s].
-
- The "help" information will be improved in near future releases, and
- the tool options will become standardized across the set. We will
- also be providing documentation on our web site.
-
- Tool options may change in the next release. Version 1 tool options
- will remain supported wherever possible in order to preserve
- operation of any existing scripts.
-
-
-CAVEATS:
-
- SRA tools are designed to handle very large amounts of data, and are
- not currently oriented toward desktop use. They work well within any
- Unix-like environment, such as Linux or MacOS's BSD shell.
-
- Windows operation presents a few challenges. We have tested our
- binaries under the MS "cmd.exe" shell and Cygwin's bash. Our tools
- know how to accept paths in Windows, Cygwin, POSIX and MinGW
- formats. Internally, all paths are treated as MinGW-style POSIX
- paths, so any information appearing in output will reflect this
- conversion:
-
-   # simple file names
-   SRR012345.sra                   => [NO CHANGE]
-
-   # relative paths
-   win\SRR012345.sra               => win/SRR012345.sra
-
-   # full or drive-relative paths
-   C:\sra\win\SRR012345.sra        => /C/sra/win/SRR012345.sra
-
-   # network paths
-   \\server\sra\SRR012345.sra      => //server/sra/SRR012345.sra
-
-   # POSIX paths
-   /sra/posix/SRR012345.sra        => [NO CHANGE]
-
-   # Cygwin full paths
-   /cygdrive/C/sra/SRR012345.sra   => /C/sra/SRR012345.sra
-
- There are some situations where the software may behave unexpectedly
- due to path conversions. In particular, since Windows does not
- conform to POSIX path conventions, there may be difficulties
- combining network paths with non-network paths, explicitly or
- implicitly. IF YOU HAVE PROBLEMS, we recommend mounting file servers
- as network drives.
-
- If you run the software under Cygwin, you should take care to use
- either relative paths (those that do not begin with '/') or full
- paths that start with "/cygdrive/". The reason is that Cygwin
- provides its own path manipulation, but our tools are not aware of
- which shell they are running under.
diff --git a/build/BUILD.linux b/build/BUILD.linux
index 79f9a60..7d0ab7a 100644
--- a/build/BUILD.linux
+++ b/build/BUILD.linux
@@ -1 +1 @@
-pub
+dbg
diff --git a/build/BUILD.mac b/build/BUILD.mac
index 79f9a60..17640be 100644
--- a/build/BUILD.mac
+++ b/build/BUILD.mac
@@ -1 +1 @@
-pub
+rel
diff --git a/build/BUILD.win b/build/BUILD.win
index 79f9a60..17640be 100644
--- a/build/BUILD.win
+++ b/build/BUILD.win
@@ -1 +1 @@
-pub
+rel
diff --git a/build/COMP.mac b/build/COMP.mac
index 90584dd..e671fa2 100644
--- a/build/COMP.mac
+++ b/build/COMP.mac
@@ -1 +1 @@
-gcc
+clang
diff --git a/build/LNKG.linux b/build/LNKG.linux
new file mode 100644
index 0000000..d37cc1c
--- /dev/null
+++ b/build/LNKG.linux
@@ -0,0 +1 @@
+dyn
diff --git a/build/LNKG.mac b/build/LNKG.mac
new file mode 100644
index 0000000..fa47d9e
--- /dev/null
+++ b/build/LNKG.mac
@@ -0,0 +1 @@
+stat
diff --git a/build/LNKG.win b/build/LNKG.win
new file mode 100644
index 0000000..fa47d9e
--- /dev/null
+++ b/build/LNKG.win
@@ -0,0 +1 @@
+stat
diff --git a/build/Makefile.clang b/build/Makefile.clang
new file mode 100644
index 0000000..51d6c8a
--- /dev/null
+++ b/build/Makefile.clang
@@ -0,0 +1,80 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+# compilers
+CC = @ $(TOP)/build/cc.sh $(OS) 'clang -c' \
+	 $(CHECKSUM) --objx $(OBJX) --cflags "$(CFLAGS)" -MD
+CP = @ $(TOP)/build/cc.sh $(OS) 'clang -xc++ -c' \
+	 $(CHECKSUM) --objx $(OBJX) --cflags "$(CPFLAGS)" -MD
+
+# C preprocessor
+PP = gcc -E $(CFLAGS)
+
+# linkers
+LD = @ $(TOP)/build/ld.sh $(OS) $(ARCH) gcc \
+	--build $(BUILD) --ldflags "$(LDFLAGS)" $(STATIC) \
+	$(STATICSYSLIBS) $(CHECKSUM) --objx $(OBJX) --shlx $(SHLX) --libx $(LIBX) \
+	-MD --srcdir $(SRCDIR) --bindir $(BINDIR) -L$(LIBDIR):$(ILIBDIR)
+
+LP = @ $(TOP)/build/ld.sh $(OS) $(ARCH) g++ \
+	--build $(BUILD) --ldflags "$(LDFLAGS)" $(STATIC) \
+	$(STATICSYSLIBS) $(CHECKSUM) --objx $(OBJX) --shlx $(SHLX) --libx $(LIBX) \
+	-MD --srcdir $(SRCDIR) --bindir $(BINDIR) -L$(LIBDIR):$(ILIBDIR)
+
+# tool options
+WARN = -Wall -Wno-variadic-macros -Wno-long-long # -Wconversion
+ifeq (linux,$(OS))
+    NO_ARRAY_BOUNDS_WARNING = -Wno-array-bounds
+endif
+
+ifeq (64,$(BITS))
+	CARCH = -m64
+else
+	CARCH = -m32
+endif
+
+ifeq (prof, $(BUILD))
+	PROF = -pg
+endif
+
+ifeq (dbg, $(BUILD))
+	DBG = -g
+	OPT = $(WARN)
+	NOPT = $(WARN)
+	# GCC seems unable to use c99 without ansi, which
+	# basically clobbers features back to c89. the options
+	# must be specified in the order shown.
+	PED = -std=c99 -ansi -pedantic # -fdiagnostics-show-option
+else
+
+ifeq (x86_64, $(ARCH))
+	OPT = -O3 -Wall -Wno-variadic-macros -fno-strict-aliasing
+else
+	OPT = -O3 -Wno-variadic-macros -fno-strict-aliasing
+endif
+endif
+
+# clang is designed to be a GCC substitute
+COMP_DAD = gcc
diff --git a/build/Makefile.env b/build/Makefile.env
index 3bef237..4c32b99 100644
--- a/build/Makefile.env
+++ b/build/Makefile.env
@@ -37,8 +37,9 @@ LIBEXT = $(LIBX) $(SHLX)
 # normally build static intermediate libs
 ILIBEXT = $(LIBX)
 
-# only build dynamic library modules
-MODEXT = $(SHLX)
+# would normally only build dynamic library modules,
+# but some tools are expecting to be able to static link
+MODEXT = $(LIBX) $(SHLX)
 
 # determine BUILD
 ifeq (,$(BUILD))
@@ -59,27 +60,24 @@ ifeq (rel,$(BUILD))
 endif
 ifeq (prof,$(BUILD))
 	DEBUG := -DNDEBUG -D_PROFILING
-	STATIC = --static
-endif
-ifeq (pub,$(BUILD))
-	DEBUG := -DNDEBUG
-	BUILDTYPE = rel
-	STATIC = --static
-	STATICSYSLIBS := --static-system-libs
 endif
 
-
 # allow for an all-static build
-ifndef STATIC
-	STATIC = $(shell test -f $(TOP)/build/STATIC && echo "--static")
-endif
-ifeq (--static,$(STATIC))
+ifeq (stat,$(LNKG))
+	STATIC = --static
 	LINKAGE := -D_STATIC
 	LIBEXT = $(LIBX)
 	ILIBEXT = $(LIBX)
 	MODEXT = $(LIBX)
+	STAT_OR_DYN = static
+	STATICSYSLIBS := --static-system-libs
+
+else
+	STAT_OR_DYN = dynamic
 endif
 
+LOCAL_OR_REMOTE = local
+
 
 # drop all suffix rules
 .SUFFIXES:
@@ -89,9 +87,22 @@ include $(TOP)/build/Makefile.$(OS)
 include $(TOP)/build/Makefile.$(COMP)
 include $(TOP)/build/Makefile.rules
 
+# external schema modules
+EXT_SCHEMA_MODULES = axf sraxf wgsxf vxf
+READONLY_SCHEMA_LIBS = $(addprefix -d,$(EXT_SCHEMA_MODULES))
+UPDATE_SCHEMA_LIBS = $(addprefix -dw,$(EXT_SCHEMA_MODULES))
+ALWAYS_STATIC_SCHEMA_LIBS = $(addprefix -s,$(EXT_SCHEMA_MODULES))
+
 # full directory paths
-TARGDIR = $(OUTDIR)/$(OSFLAV)/$(BUILD)/$(COMP)/$(ARCH)
+OLD_TARGDIR = $(OUTDIR)/$(OSFLAV)/$(BUILD)/$(TOOLSET)/$(ARCH)
+TARGDIR = $(OUTDIR)/$(OSFLAV)/$(TOOLSET)/$(LNKG)/$(ARCH)/$(BUILD)
 BINDIR = $(TARGDIR)/bin
+ifeq (win,$(OS))
+    # on Windows, place test executables next to .dlls
+    TEST_BINDIR = $(BINDIR)
+else
+    TEST_BINDIR = $(TARGDIR)/test-bin
+endif
 ILIBDIR = $(TARGDIR)/ilib
 LIBDIR = $(TARGDIR)/lib
 MODDIR = $(TARGDIR)/mod
@@ -116,22 +127,23 @@ endif
 endif
 
 # make reissue command
-MAKE_CMD = $(MAKE) BUILD=$(BUILD) COMP=$(COMP) TOP=$(TOP) \
-	SRCDIR=$(SRCDIR) OUTDIR=$(OUTDIR) -C $(OBJDIR) -f $(SRCDIR)/Makefile
+MAKE_CMD = $(MAKE) BUILD=$(BUILD) TOOLSET=$(TOOLSET) COMP=$(COMP) LNKG=$(LNKG) \
+    TOP=$(TOP) SRCDIR=$(SRCDIR) OUTDIR=$(OUTDIR) -C $(OBJDIR) -f $(SRCDIR)/Makefile
 
 # directory and link creation
-SUBDIRS = bin ilib lib mod wmod
+SUBDIRS = bin test-bin ilib lib mod wmod
 OUTDIRS = schema
 
 # clean rules
 stdclean:
-	@ rm -rf $(OBJDIR)
-	@ rm -f $(addsuffix .vers.h,$(ALL_TOOLS) $(ALL_LIBS)) \
+	@ -rm -rf $(OBJDIR)
+	@ rm -rf $(addsuffix .vers.h,$(ALL_TOOLS) $(ALL_LIBS)) \
 			$(addsuffix .*,$(addprefix $(ILIBDIR)/,$(ALL_LIBS))) \
 			$(addsuffix .*,$(addprefix $(LIBDIR)/,$(ALL_LIBS))) \
 			$(addsuffix .*,$(addprefix $(MODDIR)/,$(ALL_LIBS))) \
 			$(addsuffix .*,$(addprefix $(WMODDIR)/,$(ALL_LIBS))) \
-			$(addsuffix *,$(addprefix $(BINDIR)/,$(ALL_TOOLS) $(ALL_LIBS)))
+			$(addsuffix *,$(addprefix $(BINDIR)/,$(ALL_TOOLS) $(ALL_LIBS))) \
+			$(addsuffix *,$(addprefix $(TEST_BINDIR)/,$(TEST_TOOLS)))
 
 # removing symbolic links that point to specific builds
 removelinks:
@@ -143,6 +155,10 @@ removelinks:
 makedirs:
 	@ mkdir -p $(addprefix $(TARGDIR)/,$(SUBDIRS) obj/$(MODULE)) $(NCBIDIR)
 
+# build version include files
+vers-includes: makedirs
+	@ $(MAKE_CMD) -s $(TARGDIR)/$@
+
 ifeq (win,$(OS))
 
 # Windows doesn't really support symbolic links
@@ -155,66 +171,79 @@ LNDIRS = $(addprefix ln_,$(SUBDIRS))
 $(LNDIRS):
 	@ ln -s $(TARGDIR)/$(subst ln_,,$@) $(OUTDIR)/$(subst ln_,,$@)$(BITS)
 
+ifdef NOREBUILD_LINKS
+rebuild-dirlinks:
+	@ true
+else
 rebuild-dirlinks: removelinks makedirs $(LNDIRS)
 	@ ln -s $(TOP)/interfaces $(OUTDIR)/schema
+endif
 
 endif
 
-.PHONY: stdclean removelinks makedirs rebuild-dirlinks
+.PHONY: stdclean removelinks makedirs vers-includes rebuild-dirlinks
 
 # configuration targets 
 out:
-	 echo $(OUTDIR) > $(TOP)/build/OUTDIR.$(OS)
+	@ echo $(OUTDIR) > $(TOP)/build/OUTDIR.$(BUILD_OS)
 	@ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
 
 CC:
 	@ echo cc > $(TOP)/build/COMP.$(OS)
-	@ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
 
 GCC:
 	@ echo gcc > $(TOP)/build/COMP.$(OS)
-	@ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
 
 ICC:
 	@ echo icc > $(TOP)/build/COMP.$(OS)
-	@ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
 
 VC++:
 	@ echo vc++ > $(TOP)/build/COMP.$(OS)
-	@ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
+
+CLANG:
+	@ echo clang > $(TOP)/build/COMP.$(OS)
+
+static:
+	@ echo stat > $(TOP)/build/LNKG.$(OS)
+
+dynamic:
+	@ echo dyn > $(TOP)/build/LNKG.$(OS)
 
 debug:
 	@ echo dbg > $(TOP)/build/BUILD.$(OS)
-	@ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
 
-profile:
+profile: static
 	@ echo prof > $(TOP)/build/BUILD.$(OS)
-	@ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
 
 release:
 	@ echo rel > $(TOP)/build/BUILD.$(OS)
-	@ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
 
-scm:
-	@ echo scm > $(TOP)/build/BUILD.$(OS)
-	@ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
-
-pubtools:
-	@ echo pub > $(TOP)/build/BUILD.$(OS)
-	@ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
+pubtools: release static
 
 bindir:
 	@ echo "$(BINDIR)"
 
-purify:
-	@ echo pur > $(TOP)/build/BUILD.$(OS)
-	@ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
+targdir:
+	@ echo "$(TARGDIR)"
 
-purecov:
-	@ echo pcov > $(TOP)/build/BUILD.$(OS)
-	@ $(MAKE) TOP=$(TOP) -f $(TOP)/build/Makefile.env rebuild-dirlinks
+osdir:
+	@ echo "$(OUTDIR)/$(OSFLAV)"
+
+compilers:
+	@ echo "$(COMPILERS)"
+
+architectures:
+	@ echo "$(ARCHITECTURES)"
 
-.PHONY: out CC GCC ICC debug profile release scm purify purecov
+architecture:
+	@ echo "$(ARCH)"
+
+config:
+	@ echo "  current build is $(BUILD_OS) $(STAT_OR_DYN) $(BUILD) $(ARCH) build using $(TOOLSET) tools"
+	@ echo "  output target directory is '$(TARGDIR)'"
+	@ echo
+
+.PHONY: out CC GCC ICC debug profile release bindir report_config
 
 # includes based upon build
 ITF = $(TOP)/interfaces
@@ -264,7 +293,8 @@ INCDIRS = \
 	$(addprefix -I,$(SRCDIRS_OS)) \
 	$(addprefix -I,$(SRCDIR) $(ITF)) \
 	$(addprefix -I,$(INCDIRS_COMP)) \
-	$(addprefix -I,$(INCDIRS_OS) $(XTINC))
+	$(addprefix -I,$(INCDIRS_OS) $(XTINC)) \
+	-I.
 
 
 # defines that describe os & architecture
@@ -274,4 +304,20 @@ ARCHDEFS = -D_ARCH_BITS=$(BITS) -DLIBPREFIX=$(LPFX) -DSHLIBEXT=$(DLLX)
 # default tool parameters
 CFLAGS	= $(DEBUG) $(DBG) $(CARCH) $(PROF) $(PED) $(LINKAGE) $(DEFINES) $(ARCHDEFS) $(INCDIRS)
 CPFLAGS = $(DEBUG) $(DBG) $(CARCH) $(PROF) $(LINKAGE) $(DEFINES) $(ARCHDEFS) $(INCDIRS)
-LDFLAGS = $(DBG) $(PROF)
+LDFLAGS = $(DBG) $(PROF) $(CARCH)
+
+#-------------------------------------------------------------------------------
+# runtests
+#
+ifeq ($(RUNTESTS_OVERRIDE),)
+runtests: std $(TEST_TOOLS)
+	@ echo "$0 $*"; export LD_LIBRARY_PATH=$(LIBDIR);\
+	for i in $(TEST_TOOLS);\
+	do\
+		echo ++++++++++++++++++++++++++++++++++++++++++++++++++++++;\
+		echo Run $(TEST_BINDIR)/$$i;eval $(RUN_REMOTELY) $(TEST_BINDIR)/$$i;r=$$?; \
+		if [ "$$r" != "0" ] ; then exit $$r; fi; \
+	done
+
+.PHONY: runtests
+endif
diff --git a/build/Makefile.gcc b/build/Makefile.gcc
index 59a169c..271dff3 100644
--- a/build/Makefile.gcc
+++ b/build/Makefile.gcc
@@ -44,7 +44,14 @@ LP = @ $(TOP)/build/ld.sh $(OS) $(ARCH) g++ \
 	-MD --srcdir $(SRCDIR) --bindir $(BINDIR) -L$(LIBDIR):$(ILIBDIR)
 
 # tool options
-WARN = -Wall # -Wconversion
+WARN = -Wall -Wno-long-long 
+ifneq (sun,$(OS))
+    WARN += -Wno-variadic-macros
+endif
+
+ifeq (linux,$(OS))
+    NO_ARRAY_BOUNDS_WARNING = -Wno-array-bounds
+endif
 
 ifeq (64,$(BITS))
 	CARCH = -m64
@@ -60,12 +67,15 @@ ifeq (dbg, $(BUILD))
 	DBG = -g
 	OPT = $(WARN)
 	NOPT = $(WARN)
-	PED = -std=c99 -ansi -pedantic
+	# GCC seems unable to use c99 without ansi, which
+	# basically clobbers features back to c89. the options
+	# must be specified in the order shown.
+	PED = -std=c99 -ansi -pedantic # -fdiagnostics-show-option
 else
 
 ifeq (x86_64, $(ARCH))
-	OPT = -O3 -fno-strict-aliasing
+	OPT = -O3 -Wall -Wno-variadic-macros -fno-strict-aliasing
 else
-	OPT = -O3 -fno-strict-aliasing
+	OPT = -O3 -Wno-variadic-macros -fno-strict-aliasing
 endif
 endif
diff --git a/build/Makefile.linux b/build/Makefile.linux
index e6468de..a5fcd45 100644
--- a/build/Makefile.linux
+++ b/build/Makefile.linux
@@ -73,3 +73,10 @@ ifdef NCBI
   endif
 	DFLT_LIBXML_INCLUDES = $(NCBI)/libxml/include/libxml2
 endif
+
+# flex+bison
+LEX  = @ true
+YACC = @ true
+
+# build matrix
+COMPILERS = GCC # ICC
diff --git a/build/Makefile.mac b/build/Makefile.mac
index a17f50a..74e5160 100644
--- a/build/Makefile.mac
+++ b/build/Makefile.mac
@@ -68,3 +68,10 @@ OS_DAD = bsd
 OS_GDAD = unix
 
 LIBXML_LPATH = /usr/lib
+
+# flex+bison: on Mac, use source-controlled generated .c/.h files
+YACC = @ true
+LEX = @ true
+
+# build matrix
+COMPILERS = GCC CLANG
diff --git a/build/Makefile.rules b/build/Makefile.rules
index 699e0e5..bb18f20 100644
--- a/build/Makefile.rules
+++ b/build/Makefile.rules
@@ -99,11 +99,6 @@
 	$(CP) -S -o $@ -fPIC $(NOPT) $<
 
 
-######################################################################
-## TBD: *.vers.h will no longer be generated or used for executables #
-#       instead, we will update the linker to produce a *.vers.o     #
-#       with a stub for KAppVersion to return a constant             #
-######################################################################
 # version include generation
 %.vers.h: %.vers
 	$(TOP)/build/make-vers-inc.sh $^ > $@
diff --git a/build/Makefile.shell b/build/Makefile.shell
index 70844af..4aaeb86 100644
--- a/build/Makefile.shell
+++ b/build/Makefile.shell
@@ -27,61 +27,77 @@
 UNAME = $(shell uname -s)
 
 ifeq (Darwin, $(UNAME))
-	OS = mac
+	HOST_OS = mac
 endif
 ifeq (Linux, $(UNAME))
-	OS = linux
+	HOST_OS = linux
 endif
 ifeq (SunOS, $(UNAME))
-	OS = sun
+	HOST_OS = sun
+	ARCHITECTURES = x86_64 i386
 endif
 ifeq (xCYGWIN, $(findstring xCYGWIN,x$(UNAME)))
-	OS = win
+	HOST_OS = win
 endif
 ifeq (xMINGW, $(findstring xMINGW,x$(UNAME)))
-	OS = win
+	HOST_OS = win
 endif
 
-# OS flavor is normally OS
-OSFLAV = $(OS)
+# assume build OS is the same as host OS
+OS = $(HOST_OS)
+BUILD_OS = $(OS)
 
 # determine ARCH
-ifeq (mac,$(OS))
-	ARCH = $(shell $(TOP)/build/mac.arch.sh)
+ARCHITECTURES = default
+ifeq (mac,$(HOST_OS))
+	HOST_ARCH = $(shell $(TOP)/build/mac.arch.sh)
 else
 	MARCH = $(shell uname -m)
 
 	ifeq (i386, $(MARCH))
-		ARCH = i386
+		HOST_ARCH = i386
 	endif
 	ifeq (i486, $(MARCH))
-		ARCH = i386
+		HOST_ARCH = i386
 	endif
 	ifeq (i586, $(MARCH))
-		ARCH = i386
+		HOST_ARCH = i386
 	endif
 	ifeq (i686, $(MARCH))
-		ARCH = i386
+		ifeq (WOW64x, $(findstring WOW64x,$(UNAME)x))
+			# 64-bit capable Cygwin. Analyze the version of cl to set the corect architecture
+			CL = $(shell cl.exe 2>&1 >/dev/null)
+			ifeq (for x64, $(findstring for x64, $(CL)))
+				HOST_ARCH = x86_64
+			else
+				HOST_ARCH = i386
+			endif			
+		else
+			HOST_ARCH = i386
+		endif	
 	endif
 	ifeq (x86_64, $(MARCH))
-		ARCH = x86_64
+		HOST_ARCH = x86_64
 	endif
-	ifeq (sun4u,$(MARCH))
-		ARCH = sparc32
+	ifeq (i86pc, $(MARCH))
+		HOST_ARCH = x86_64
+		ARCHITECTURES = x86_64 i386
+	endif
+	ifeq (sun4v,$(MARCH))
+		HOST_ARCH = sparc64
+		ARCHITECTURES = sparc64 sparc32
 	endif
 endif
 
-# determine BITS
-ifeq (x86_64, $(ARCH))
-	BITS = 64
-else
-	BITS = 32
-endif
+ARCH = $(HOST_ARCH)
+REMOTE_ARCH = $(ARCH)
 
-# first pass through defines SRCDIR
-ifndef SRCDIR
+# pick up dependencies from object directory
+ifdef SRCDIR
+	include $(wildcard *.d)
+else
 
-# set SRCDIR from MODULE
+# determine SRCDIR
 ifdef MODULE
 	SRCDIR=$(TOP)/$(MODULE)
 else
@@ -90,7 +106,7 @@ endif
 
 # set OUTDIR
 ifndef OUTDIR
-	OUTDIR = $(shell test -f $(TOP)/build/OUTDIR.$(OS) && cat $(TOP)/build/OUTDIR.$(OS) || echo $(TOP))
+	OUTDIR = $(shell test -f $(TOP)/build/OUTDIR && mv $(TOP)/build/OUTDIR $(TOP)/build/OUTDIR.$(BUILD_OS); test -f $(TOP)/build/OUTDIR.$(BUILD_OS) && cat $(TOP)/build/OUTDIR.$(BUILD_OS) || echo $(TOP))
 	ifeq (,$(OUTDIR))
 		OUTDIR = $(TOP)
 	endif
@@ -99,8 +115,36 @@ ifndef OUTDIR
 	endif
 endif
 
-# set COMP and BUILD
-COMP = $(shell test -f $(TOP)/build/COMP.$(OS) && cat $(TOP)/build/COMP.$(OS) || echo gcc)
-BUILD = $(shell test -f $(TOP)/build/BUILD.$(OS) && cat $(TOP)/build/BUILD.$(OS) || echo dbg)
+# set COMP, LNKG and BUILD
+COMP = $(shell test -f $(TOP)/build/COMP && mv $(TOP)/build/COMP $(TOP)/build/COMP.$(OS); test -f $(TOP)/build/COMP.$(OS) && cat $(TOP)/build/COMP.$(OS) || echo gcc)
+LNKG = $(shell test -f $(TOP)/build/STATIC && mv $(TOP)/build/STATIC $(TOP)/build/LNKG.$(OS) && echo stat > $(TOP)/build/LNKG.$(OS); test -f $(TOP)/build/LNKG.$(OS) && cat $(TOP)/build/LNKG.$(OS) || echo stat)
+BUILD = $(shell test -f $(TOP)/build/BUILD && mv $(TOP)/build/BUILD $(TOP)/build/BUILD.$(OS); test -f $(TOP)/build/BUILD.$(OS) && cat $(TOP)/build/BUILD.$(OS) || echo dbg)
+TOOLSET := $(COMP)
+
+ifdef USE_GCC_IF_ICC
+ifeq (icc,$(COMP))
+COMP = gcc
+endif
+ifeq (clang,$(COMP))
+COMP = gcc
+endif
+endif
+
+endif
 
+# OS flavor is normally OS
+OSFLAV = $(OS)
+
+# determine BITS
+ifeq (x86_64, $(ARCH))
+	BITS = 64
+endif
+ifeq (sparc64, $(ARCH))
+	BITS = 64
+endif
+ifeq (i386, $(ARCH))
+	BITS = 32
+endif
+ifeq (sparc32, $(ARCH))
+	BITS = 32
 endif
diff --git a/build/Makefile.vc++ b/build/Makefile.vc++
index 3835d7d..e2c3815 100644
--- a/build/Makefile.vc++
+++ b/build/Makefile.vc++
@@ -22,31 +22,33 @@
 #
 # ===========================================================================
 
-
+# RFLAGS have to go before any other flags since they can affect their handling
 # compilers
-CC = @ $(TOP)/build/win-cc.sh win "cl /c -D_WIN32_WINNT=0x0502" \
-	 $(CHECKSUM) --objx $(OBJX) $(CFLAGS) -MD
-CP = @ $(TOP)/build/win-cc.sh win "cl /c" \
-	 $(CHECKSUM) --objx $(OBJX) $(CPFLAGS) -MD
+CC = @ $(TOP)/build/win-cc.sh $(BUILD_OS) "cl /c /D_WIN32_WINNT=0x0502" \
+	 $(CHECKSUM) --objx $(OBJX) $(RFLAGS) $(CFLAGS) -MD 
+	 
+CP = @ $(TOP)/build/win-cc.sh $(BUILD_OS) "cl /c" \
+	 $(CHECKSUM) --objx $(OBJX) $(RFLAGS) $(CPFLAGS) -MD -EHsc
+	 
 
 # C preprocessor
 PP = gcc -E $(CFLAGS)
 
 # linkers
-LD = @ $(TOP)/build/ld.sh win $(ARCH) link \
-	--build $(BUILD) $(LDFLAGS) $(STATIC) $(CHECKSUM) \
+LD = @ $(TOP)/build/ld.sh $(BUILD_OS) $(ARCH) link \
+	--build $(BUILD) $(RFLAGS) $(LDFLAGS) $(STATIC) $(CHECKSUM) \
 	--objx $(OBJX) --shlx $(SHLX) --libx $(LIBX) \
 	-MD --srcdir $(SRCDIR) --bindir $(BINDIR) -L$(LIBDIR):$(ILIBDIR)
 
-LP = @ $(TOP)/build/ld.sh win $(ARCH) link \
-	--build $(BUILD) $(LDFLAGS) $(STATIC) $(CHECKSUM) \
+LP = @ $(TOP)/build/ld.sh $(BUILD_OS) $(ARCH) link \
+	--build $(BUILD) $(RFLAGS) $(LDFLAGS) $(STATIC) $(CHECKSUM) \
 	--objx $(OBJX) --shlx $(SHLX) --libx $(LIBX) \
 	-MD --srcdir $(SRCDIR) --bindir $(BINDIR) -L$(LIBDIR):$(ILIBDIR)
 
 # tool options
 CDECL = -Gd
 STDCALL = -Gz
-CALLCONV = $(STDCALL)
+CALLCONV = $(CDECL)
 STRING_POOLING = -GF
 OPT := $(STRING_POOLING) $(CALLCONV) -nologo
 NOPT := -Od $(OPT)
diff --git a/build/Makefile.win b/build/Makefile.win
index 5238a36..5644350 100644
--- a/build/Makefile.win
+++ b/build/Makefile.win
@@ -57,3 +57,10 @@ DLLX = dll
 
 # compilation defines
 DEFINES	:= -DWINDOWS
+
+# flex+bison: on Windows, use source-controlled generated .c/.h files
+YACC = @ true
+LEX = @ true
+
+# build matrix
+COMPILERS = VC++
diff --git a/build/ld.linux.cmn.sh b/build/ld.linux.cmn.sh
index 8779412..f896821 100755
--- a/build/ld.linux.cmn.sh
+++ b/build/ld.linux.cmn.sh
@@ -63,7 +63,11 @@ MODE=$(expr $MODE / 2)
 DYLD=$(expr $MODE % 2)
 MODE=$(expr $MODE / 2)
 KPROC=$(expr $MODE % 2)
-THREADS=$(expr $MODE / 2)
+MODE=$(expr $MODE / 2)
+THREADS=$(expr $MODE % 2)
+MODE=$(expr $MODE / 2)
+KRYPTO=$(expr $MODE % 2)
+CRYPTO=$(expr $MODE / 2)
 
 # decode SCMFLAGS
 CHECKSUM=$(expr $SCMFLAGS % 2)
diff --git a/build/ld.linux.dlib.sh b/build/ld.linux.dlib.sh
index d086ddd..308f4d3 100755
--- a/build/ld.linux.dlib.sh
+++ b/build/ld.linux.dlib.sh
@@ -82,6 +82,10 @@ then
         DIRS="${DIRS#:}"
     done
 
+    # update LD_LIBRARY_PATH
+    unset LD_LIBRARY_PATH
+    export LD_LIBRARY_PATH="$LDIRS:$XDIRS"
+
     # tack on libraries, finding as we go
     for LIB in $LIBS
     do
diff --git a/build/ld.linux.exe.sh b/build/ld.linux.exe.sh
index c1d6231..17ddf5c 100755
--- a/build/ld.linux.exe.sh
+++ b/build/ld.linux.exe.sh
@@ -66,7 +66,8 @@ CMD="$EXE_CMD $LDFLAGS"
 # the main application will substitute for name lookup
 if [ $STATIC -eq 1 ] && [ $DYLD -eq 1 ]
 then
-    CMD="$CMD $LD_EXPORT_GLOBAL $LD_MULTIPLE_DEFS"
+#    CMD="$CMD $LD_EXPORT_GLOBAL $LD_MULTIPLE_DEFS"
+    CMD="$CMD $LD_EXPORT_GLOBAL"
 fi
 
 # tack on object files
@@ -89,6 +90,10 @@ then
         DIRS="${DIRS#:}"
     done
 
+    # update LD_LIBRARY_PATH
+    unset LD_LIBRARY_PATH
+    export LD_LIBRARY_PATH="$LDIRS:$XDIRS"
+
     # tack on libraries, finding as we go
     for LIB in $LIBS
     do
diff --git a/build/ld.linux.ln.sh b/build/ld.linux.ln.sh
index c248afa..ee5bd9d 100755
--- a/build/ld.linux.ln.sh
+++ b/build/ld.linux.ln.sh
@@ -40,7 +40,12 @@ TARG=$(basename "$TARG")
 
 # put extension back onto name
 NAME="$NAME$DBGAP"
-[ "$EXT" != "" ] && NAME="$NAME.$EXT"
+STATIC_NAME="$NAME-static"
+if [ "$EXT" != "" ]
+then
+    NAME="$NAME.$EXT"
+    STATIC_NAME="$STATIC_NAME.$EXT"
+fi
 
 # break out version
 set-vers ()
@@ -73,6 +78,12 @@ then
         create-link "$NAME.$MAJ.$MIN.$REL" "$NAME.$MAJ"
         create-link "$NAME.$MAJ" "$NAME"
 
+        # for static libraries, create special link
+        if [ "$TYPE" = "slib" ]
+        then
+            create-link "$NAME" "$STATIC_NAME"
+        fi
+
     # for name with major version in it
     elif [ "$TARG" = "$NAME.$MAJ" ]
     then
diff --git a/build/ld.linux.slib.sh b/build/ld.linux.slib.sh
index 1a420b8..4eb0a8e 100755
--- a/build/ld.linux.slib.sh
+++ b/build/ld.linux.slib.sh
@@ -99,10 +99,10 @@ then
 
         # look at linkage
         case "$LIB" in
-        -l*|-s*)
+        -s*)
 
             # force static load
-            LIBPATH="$(find-lib $LIBNAME.a $LDIRS)"
+            find-lib $LIBNAME.a $LDIRS
             if [ "$LIBPATH" != "" ]
             then
 
diff --git a/build/ld.mac.cmn.sh b/build/ld.mac.cmn.sh
index 066db13..ab1d23c 100755
--- a/build/ld.mac.cmn.sh
+++ b/build/ld.mac.cmn.sh
@@ -46,7 +46,7 @@ DEPFILE="$3"
 shift 3
 
 MODE="$1"
-CHECKSUM="$2"
+SCMFLAGS="$2"
 LDFLAGS="$3"
 shift 3
 
@@ -63,7 +63,15 @@ MODE=$(expr $MODE / 2)
 DYLD=$(expr $MODE % 2)
 MODE=$(expr $MODE / 2)
 KPROC=$(expr $MODE % 2)
-THREADS=$(expr $MODE / 2)
+MODE=$(expr $MODE / 2)
+THREADS=$(expr $MODE % 2)
+MODE=$(expr $MODE / 2)
+KRYPTO=$(expr $MODE % 2)
+CRYPTO=$(expr $MODE / 2)
+
+# decode SCMFLAGS
+CHECKSUM=$(expr $SCMFLAGS % 2)
+STATICSYSLIBS=$(expr $SCMFLAGS / 2)
 
 # return parameter for find-lib
 LIBPATH=''
diff --git a/build/ld.mac.dlib.sh b/build/ld.mac.dlib.sh
index ff54ec5..6f28f6b 100755
--- a/build/ld.mac.dlib.sh
+++ b/build/ld.mac.dlib.sh
@@ -86,13 +86,21 @@ then
 
         # look at linkage
         case "$LIB" in
+        -ldl|-ddl)
+
+            # always load libdl as shared library
+            load-ref-symbols
+            load-dynamic
+            CMD="$CMD -ldl"
+            ;;
+
         -l*)
 
             # normal or dynamic linkage
             FOUND=0
             if [ $STATIC -eq 0 ]
             then
-                find-lib $LIBNAME.so $LDIRS
+                find-lib $LIBNAME.dylib $LDIRS
                 if [ "$LIBPATH" != "" ]
                 then
 
@@ -110,6 +118,26 @@ then
             # try static only
             if [ $FOUND -eq 0 ]
             then
+                find-lib $LIBNAME-static.a $LDIRS
+                if [ "$LIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # add it to dependencies
+                    DEPS="$DEPS $LIBPATH"
+
+                    # load static
+                    load-static
+                    load-all-symbols
+                    CMD="$CMD -l$LIBNAME-static"
+
+                fi
+            fi
+
+            if [ $FOUND -eq 0 ]
+            then
                 find-lib $LIBNAME.a $LDIRS
                 if [ "$LIBPATH" != "" ]
                 then
@@ -131,9 +159,29 @@ then
             # not found within our directories
             if [ $FOUND -eq 0 ]
             then
-                # set load to normal
-                load-ref-symbols
-                load-dynamic
+
+                if [ $STATICSYSLIBS -eq 1 ]
+                then
+                    case "$LIBNAME" in
+                    z|bz2)
+                        # set load to static
+                        load-static
+                        load-all-symbols
+                        ;;
+
+                    *)
+                        # set load to dynamic
+                        load-ref-symbols
+                        load-dynamic
+                        ;;
+
+                    esac
+                else
+                    # set load to normal
+                    load-ref-symbols
+                    load-dynamic
+                fi
+
                 CMD="$CMD -l$LIBNAME"
             fi
             ;;
@@ -142,7 +190,7 @@ then
 
             # force static load
             FOUND=0
-            find-lib $LIBNAME.a $LDIRS
+            find-lib $LIBNAME-static.a $LDIRS
             if [ "$LIBPATH" != "" ]
             then
 
@@ -155,16 +203,56 @@ then
                 # load static
                 load-static
                 load-all-symbols
-                CMD="$CMD -l$LIBNAME"
+                CMD="$CMD -l$LIBNAME-static"
 
             fi
 
+            if [ $FOUND -eq 0 ]
+            then
+                find-lib $LIBNAME.a $LDIRS
+                if [ "$LIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # add it to dependencies
+                    DEPS="$DEPS $LIBPATH"
+
+                    # load static
+                    load-static
+                    load-all-symbols
+                    CMD="$CMD -l$LIBNAME"
+
+                fi
+            fi
+
             # not found within our directories
             if [ $FOUND -eq 0 ]
             then
-                # set load to static
-                load-static
-                load-all-symbols
+
+                if [ $STATIC -eq 1 ] || [ $STATICSYSLIBS -eq 1 ]
+                then
+                    # set load to static
+                    load-static
+                    load-all-symbols
+                else
+
+                    case "$LIBNAME" in
+                    z|bz2)
+                        # set load to dynamic
+                        load-ref-symbols
+                        load-dynamic
+                        ;;
+
+                    *)
+                        # set load to static
+                        load-static
+                        load-all-symbols
+                        ;;
+                    esac
+                fi
+
                 CMD="$CMD -l$LIBNAME"
             fi
             ;;
@@ -175,7 +263,7 @@ then
             FOUND=0
             if [ $STATIC -eq 0 ]
             then
-                find-lib $LIBNAME.so $LDIRS
+                find-lib $LIBNAME.dylib $LDIRS
                 if [ "$LIBPATH" != "" ]
                 then
 
@@ -209,8 +297,14 @@ fi
 load-ref-symbols
 load-dynamic
 
+# add in pthreads
+if [ $THREADS -ne 0 ]
+then
+    CMD="$CMD -lpthread"
+fi
+
 # produce shared library
-echo $CMD
+echo "$CMD"
 $CMD || exit $?
 
 # produce dependencies
diff --git a/build/ld.mac.exe.sh b/build/ld.mac.exe.sh
index 1701cc2..9ac44ef 100755
--- a/build/ld.mac.exe.sh
+++ b/build/ld.mac.exe.sh
@@ -94,6 +94,14 @@ then
 
         # look at linkage
         case "$LIB" in
+        -ldl|-ddl)
+
+            # always load libdl as shared library
+            load-ref-symbols
+            load-dynamic
+            CMD="$CMD -ldl"
+            ;;
+
         -l*)
 
             # normal or dynamic linkage
@@ -117,6 +125,26 @@ then
             # try static only
             if [ $FOUND -eq 0 ]
             then
+                find-lib $LIBNAME-static.a $LDIRS
+                if [ "$LIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # add it to dependencies
+                    DEPS="$DEPS $LIBPATH"
+
+                    # load static
+                    load-static
+                    [ $STATIC -eq 1 ] && load-all-symbols
+                    CMD="$CMD -l$LIBNAME-static"
+
+                fi
+            fi
+
+            if [ $FOUND -eq 0 ]
+            then
                 find-lib $LIBNAME.a $LDIRS
                 if [ "$LIBPATH" != "" ]
                 then
@@ -128,7 +156,9 @@ then
                     DEPS="$DEPS $LIBPATH"
 
                     # load static
-                    CMD="$CMD $LIBPATH"
+                    load-static
+                    [ $STATIC -eq 1 ] && load-all-symbols
+                    CMD="$CMD -l$LIBNAME"
 
                 fi
             fi
@@ -136,8 +166,28 @@ then
             # not found within our directories
             if [ $FOUND -eq 0 ]
             then
+
+                # do not need to load all symbols for external libs
                 [ $STATIC -eq 1 ] && load-ref-symbols
-                load-dynamic
+
+                if [ $STATICSYSLIBS -eq 1 ]
+                then
+                    case "$LIBNAME" in
+                    z|bz2)
+                        # set load to static
+                        load-static
+                        ;;
+
+                    *)
+                        # set load to dynamic
+                        load-dynamic
+                        ;;
+
+                    esac
+                else
+                    # set load to normal
+                    load-dynamic
+                fi
 
                 CMD="$CMD -l$LIBNAME"
             fi
@@ -147,7 +197,7 @@ then
 
             # force static load
             FOUND=0
-            find-lib $LIBNAME.a $LDIRS
+            find-lib $LIBNAME-static.a $LDIRS
             if [ "$LIBPATH" != "" ]
             then
 
@@ -157,17 +207,61 @@ then
                 # add it to dependencies
                 DEPS="$DEPS $LIBPATH"
 
-                # load library directly
-                CMD="$CMD $LIBPATH"
+                # load static
+                load-static
+                [ $STATIC -eq 1 ] && load-all-symbols
+                CMD="$CMD -l$LIBNAME-static"
 
             fi
 
+            if [ $FOUND -eq 0 ]
+            then
+                find-lib $LIBNAME.a $LDIRS
+                if [ "$LIBPATH" != "" ]
+                then
+
+                    # found it
+                    FOUND=1
+
+                    # add it to dependencies
+                    DEPS="$DEPS $LIBPATH"
+
+                    # load static
+                    load-static
+                    [ $STATIC -eq 1 ] && load-all-symbols
+                    CMD="$CMD -l$LIBNAME"
+
+                fi
+            fi
+
             # not found within our directories
             if [ $FOUND -eq 0 ]
             then
-                # set load to static
-                load-static
-                [ $STATIC -eq 1 ] && load-all-symbols
+
+                # do not need to load all symbols for external libs
+                [ $STATIC -eq 1 ] && load-ref-symbols
+
+                if [ $STATIC -eq 1 ] || [ $STATICSYSLIBS -eq 1 ]
+                then
+
+                    # set load to static
+                    load-static
+
+                else
+
+                    # special case for libs we have in "ext"
+                    # that are sometimes requested as static
+                    case "$LIBNAME" in
+                    z|bz2)
+                        # set load to dynamic
+                        load-dynamic
+                        ;;
+                    *)
+                        load-static
+                        ;;
+                    esac
+                fi
+
                 CMD="$CMD -l$LIBNAME"
             fi
             ;;
@@ -191,7 +285,7 @@ then
                     load-static
                     load-all-symbols
 
-                    CMD="$CMD $LIBPATH"
+                    CMD="$CMD -l$LIBNAME"
 
                 fi
 
@@ -216,6 +310,12 @@ fi
 load-ref-symbols
 load-dynamic
 
+# add in pthreads
+if [ $THREADS -ne 0 ]
+then
+    CMD="$CMD -lpthread"
+fi
+
 # produce shared library
 echo $CMD
 $CMD || exit $?
diff --git a/build/ld.mac.ln.sh b/build/ld.mac.ln.sh
index efc834a..55216fd 100755
--- a/build/ld.mac.ln.sh
+++ b/build/ld.mac.ln.sh
@@ -40,6 +40,7 @@ TARG=$(basename "$TARG")
 
 # put extension back onto name, unless it's "dylib"
 NAME="$NAME$DBGAP"
+STATIC_LIB_NAME="$NAME-static.a"
 [ "$EXT" != "" ] && [ "$EXT" != "dylib" ] && NAME="$NAME.$EXT"
 
 # break out version
@@ -86,6 +87,7 @@ then
     then
         create-link "$NAME_MMR" "$NAME_M"
         create-link "$NAME_M" "$NAME"
+        [ "$EXT" = "a" ] && create-link "$NAME" "$STATIC_LIB_NAME"
 
     # for name with major version in it
     elif [ "$TARG" = "$NAME_M" ]
diff --git a/build/ld.mac.slib.sh b/build/ld.mac.slib.sh
index 07faab0..41a3afe 100755
--- a/build/ld.mac.slib.sh
+++ b/build/ld.mac.slib.sh
@@ -47,7 +47,7 @@ convert-static ()
 {
     # list members
     local path="$1"
-    local mbrs="$(ar -t $path)"
+    local mbrs="$(ar -t $path | grep -v '__.SYMDEF SORTED')"
 
     # unpack archive into temporary directory
     mkdir -p ld-tmp
@@ -95,10 +95,10 @@ then
 
         # look at linkage
         case "$LIB" in
-        -l*|-s*)
+        -s*)
 
             # force static load
-            LIBPATH="$(find-lib $LIBNAME.a $LDIRS)"
+            find-lib $LIBNAME.a $LDIRS
             if [ "$LIBPATH" != "" ]
             then
 
diff --git a/build/ld.sh b/build/ld.sh
index 0976636..1f2b86b 100755
--- a/build/ld.sh
+++ b/build/ld.sh
@@ -54,8 +54,18 @@ STATIC=0
 DYLD=0
 STATICSYSLIBS=0
 CHECKSUM=0
-THREADS=0
 KPROC=0
+THREADS=0
+HAVE_KSPROC=0
+NEED_KPROC=0
+HAVE_GZIP=0
+NEED_GZIP=0
+HAVE_BZIP=0
+NEED_BZIP=0
+HAVE_SRAPATH=0
+NEED_SRAPATH=0
+HAVE_DL=0
+NEED_DL=0
 unset BUILD
 unset LDIRS
 unset XDIRS
@@ -69,6 +79,12 @@ unset OBJS
 unset LIBS
 unset DEPFILE
 
+# paths for translating local to remote
+unset RHOME
+unset LHOME
+unset RHOST
+unset PROXY_TOOL
+
 while [ $# -ne 0 ]
 do
 
@@ -120,6 +136,31 @@ do
         BINDIR="$2"
         shift
         ;;
+        
+    --rhome)
+        RHOME="$2"
+        shift
+        ;;
+
+    --lhome)
+        LHOME="$2"
+        shift
+        ;;
+
+    --rhost)
+        RHOST="$2"
+        shift
+        ;;
+
+    --rport)
+        RPORT="$2"
+        shift
+        ;;
+
+    --proxy_tool)
+        PROXY_TOOL="$2"
+        shift
+        ;;
 
     -MD)
         DEPFILE=1
@@ -189,30 +230,121 @@ do
         TARG="$ARG"
         ;;
 
-    -lpthread|-spthread|-dpthread)
-        THREADS=8
+    -lz|-sz|-dz)
+        LIBS="$LIBS $1"
+        HAVE_GZIP=1
+        ;;
+    -lbz2|-sbz2|-dbz2)
+        LIBS="$LIBS $1"
+        HAVE_BZIP=1
+        ;;
+    -ldl|-sdl|-ddl)
+        LIBS="$LIBS $1"
+        HAVE_DL=1
         ;;
 
-    -lkproc)
+    -lsrapath|-ssrapath|-dsrapath)
         LIBS="$LIBS $1"
-        KPROC=4
+        HAVE_SRAPATH=1
+        ;;
+    -lsradb|-ssradb|-dsradb|-lwsradb|-swsradb)
+        LIBS="$LIBS $1"
+        NEED_DL=1
+        DYLD=2
+        if [ $STATIC -ne 0 ]
+        then
+            NEED_SRAPATH=1
+        fi
+        ;;
+
+    -lkrypto|-dkrypto)
+        LIBS="$LIBS $1"
+        if [ $STATIC -ne 0 ]
+        then
+            NEED_KPROC=1
+        fi
+        ;;
+    -skrypto)
+        LIBS="$LIBS $1"
+        NEED_KPROC=1
         ;;
 
+    -lkproc|-dkproc)
+        KPROC=4
+        LIBS="$LIBS $1"
+        ;;
     -skproc)
+        KPROC=4
+        THREADS=8
+        LIBS="$LIBS $1"
+        ;;
+
+    -[lds]ksproc)
+        HAVE_KSPROC=1
         LIBS="$LIBS $1"
+        THREADS=0
+        ;;
+
+    -lpthread|-spthread|-dpthread)
         THREADS=8
-        KPROC=4
         ;;
 
-    -l*|-s*)
+    -lkfs)
         LIBS="$LIBS $1"
+        if [ $STATIC -ne 0 ]
+        then
+            NEED_GZIP=1
+            NEED_BZIP=1
+            NEED_DL=1
+        fi
         ;;
 
-    -dkproc)
+    -skfs)
         LIBS="$LIBS $1"
-        KPROC=4
+        NEED_GZIP=1
+        NEED_BZIP=1
+        NEED_DL=1
+        ;;
+
+    -dkfs)
+        LIBS="$LIBS $1"
+        NEED_GZIP=1
+        NEED_BZIP=1
+        NEED_DL=1
         DYLD=2
         ;;
+
+    -svfs)
+        LIBS="$LIBS $1"
+        NEED_SRAPATH=1
+        ;;
+
+    -lvfs)
+        LIBS="$LIBS $1"
+        if [ $STATIC -ne 0 ]
+        then
+            NEED_SRAPATH=1
+        fi
+        ;;
+
+    -dvfs)
+        LIBS="$LIBS $1"
+        if [ $STATIC -ne 0 ]
+        then
+            NEED_SRAPATH=1
+        fi
+        DYLD=2
+        ;;
+
+    -lncbi-bam|-sncbi-bam|-dncbi-bam)
+        LIBS="$LIBS $1"
+        #NEED_GZIP=1
+        ;;
+
+    -l*|-s*)
+        LIBS="$LIBS $1"
+        ;;
+
     -d*)
         LIBS="$LIBS $1"
         DYLD=2
@@ -246,27 +378,34 @@ then
     EXT="$DYLX"
     NAME="${NAME%.$DYLX}"
 fi
+
 unset VERS
-if [ "$NAME" != "${NAME%.[0-9][0-9]*}" ]
+
+V="${NAME#${NAME%\.[^.]*}\.}"
+if [[ $V == ${V//[^0-9]/} ]]
 then
-    ARG="${NAME%.[0-9][0-9]*}"
-    VERS="${NAME#$ARG}"
+    ARG="${NAME%\.$V}"
+    VERS="$V"
     NAME="${ARG#.}"
 
-    if [ "$NAME" != "${NAME%.[0-9][0-9]*}" ]
+	V="${NAME#${NAME%\.[^.]*}\.}"
+	if [[ $V == ${V//[^0-9]/} ]]
     then
-        ARG="${NAME%.[0-9][0-9]*}"
-        VERS="${NAME#$ARG}.$VERS"
-        NAME="${ARG#.}"
+	    ARG="${NAME%\.$V}"
+    	VERS="$V.$VERS"
+	    NAME="${ARG#.}"
 
-        if [ "$NAME" != "${NAME%.[0-9][0-9]*}" ]
+		V="${NAME#${NAME%\.[^.]*}\.}"
+		if [[ $V == ${V//[^0-9]/} ]]
         then
-            ARG="${NAME%.[0-9][0-9]*}"
-            VERS="${NAME#$ARG}.$VERS"
-            NAME="${ARG#.}"
+		    ARG="${NAME%\.$V}"
+	    	VERS="$V.$VERS"
+		    NAME="${ARG#.}"
         fi
     fi
+	#echo "ARG=$ARG,VERS=$VERS,NAME=$NAME"
 fi
+
 case "$TYPE" in
 dlib)
     if [ "$SHLX" != "" ]
@@ -304,60 +443,87 @@ then
     fi
 
     ARG=$(cat $VERSFILE)
-    if [ "$VERS" != "" ] && [ "$VERS" != "$ARG" ]
+    if [ "$VERS" != "" ] && [ "$VERS" != "$ARG" ] && [ "$ARG" = "${ARG#$VERS.}" ]
     then
-        echo "$SELF_NAME: version from file '$VERSFILE' does not match '$VERS'"
+        echo "$SELF_NAME: version from file '$VERSFILE' ($ARG) does not match '$VERS'"
         exit 5
     fi
     VERS="$ARG"
 fi
 
-#echo "# $SELF_NAME"
-#echo "#   BUILD          : $BUILD"
-#echo "#   OS             : $OS"
-#echo "#   ARCH           : $ARCH"
-#echo "#   tool           : $LD"
-#echo "#   dep file       : $DEPFILE"
-#echo "#   LDFLAGS        : $LDFLAGS"
-#echo "#   static sys libs: $STATICSYSLIBS"
-#echo "#   checksum       : $CHECKSUM"
-#echo "#   static         : $STATIC"
-#echo "#   kproc          : $KPROC"
-#echo "#   thread libs    : $THREADS"
-#echo "#   type           : $TYPE"
-#echo "#   srcdir         : $SRCDIR"
-#echo "#   bindir         : $BINDIR"
-#echo "#   LDIRS          : $LDIRS"
-#echo "#   XDIRS          : $XDIRS"
-#echo "#   vers file      : $VERSFILE"
-#echo "#   vers dir       : $VERSDIR"
-#echo "#   target         : $TARG"
-#echo "#   outdir         : $OUTDIR"
-#echo "#   name           : $NAME"
-#echo "#   dbgap          : $DBGAP"
-#echo "#   extension      : $EXT"
-#echo "#   version        : $VERS"
-#echo "#   objects        : $OBJS"
-#echo "#   libraries      : $LIBS"
-#echo "#   script-base    : $SCRIPT_BASE"
+# detect need for kproc
+if [ $KPROC -eq 0 ] && [ $NEED_KPROC -ne 0 ] && [ $HAVE_KSPROC -eq 0 ]
+then
+    KPROC=4
+    LIBS="$LIBS -lkproc"
+fi
+
+# turn on threads for kproc
+[ $STATIC -eq 0 ] && [ "$NAME" = "libkproc" ] && THREADS=8
+[ $STATIC -ne 0 ] && [ $KPROC -ne 0 ] && THREADS=8
+
+# supply missing libraries
+[ $HAVE_GZIP -eq 0 ] && [ $NEED_GZIP -ne 0 ] && LIBS="$LIBS -lz"
+[ $HAVE_BZIP -eq 0 ] && [ $NEED_BZIP -ne 0 ] && LIBS="$LIBS -lbz2"
+[ $HAVE_DL -eq 0 ] && [ $NEED_DL -ne 0 ] && LIBS="$LIBS -ldl"
+[ $HAVE_SRAPATH -eq 0 ] && [ $NEED_SRAPATH -ne 0 ] && [ "$TYPE" = "exe" ] && LIBS="$LIBS -ssrapath"
 
 # overwrite dependencies
 [ -f "$DEPFILE" ] && rm -f "$DEPFILE"
 
 # generate mode
-[ $STATIC -ne 0 ] && [ $KPROC -ne 0 ] && THREADS=8
 MODE=$(expr $THREADS + $KPROC + $DYLD + $STATIC)
 
 # generate SCM flags
 SCMFLAGS=$(expr $STATICSYSLIBS + $STATICSYSLIBS + $CHECKSUM)
+if [ 0 -ne 0 ]
+then
+    echo "# $SELF_NAME"
+    echo "#   script-base    : $SCRIPT_BASE"
+    echo "#   OS             : $OS"
+    echo "#   type           : $TYPE"
+    echo "#   tool           : $LD"
+    echo "#   ARCH           : $ARCH"
+    echo "#   BUILD          : $BUILD"
+    echo "#   srcdir         : $SRCDIR"
+    echo "#   bindir         : $BINDIR"
+    echo "#   outdir         : $OUTDIR"
+    echo "#   target         : $TARG"
+    echo "#   name           : $NAME"
+    echo "#   dbgap          : $DBGAP"
+    echo "#   version        : $VERS"
+    echo "#   vers file      : $VERSFILE"
+    echo "#   dep file       : $DEPFILE"
+    echo "#   mode           : $MODE"
+    echo "#   DYLD           : $DYLD"
+    echo "#   SCMFLAGS       : $SCMFLAGS"
+    echo "#   LDFLAGS        : $LDFLAGS"
+    echo "#   LDIRS          : $LDIRS"
+    echo "#   XDIRS          : $XDIRS"
+    echo "#   objects        : $OBJS"
+    echo "#   libraries      : $LIBS"
+    echo "#   rhost          : $RHOST"
+    echo "#   rport          : $RPORT"
+    echo "#   rhome          : $RHOME"
+    echo "#   lhome          : $LHOME"
+    echo "#   proxy_tool     : $PROXY_TOOL"
+
+    echo "#   static sys libs: $STATICSYSLIBS"
+    echo "#   checksum       : $CHECKSUM"
+    echo "#   static         : $STATIC"
+    echo "#   kproc          : $KPROC"
+    echo "#   thread libs    : $THREADS"
+    echo "#   vers dir       : $VERSDIR"
+    echo "#   extension      : $EXT"
+fi
 
 # perform link
 "$SCRIPT_BASE.$OS.$TYPE.sh" "$LD" "$ARCH" "$BUILD" "$SRCDIR" "$BINDIR" "$OUTDIR" \
     "$TARG" "$NAME" "$DBGAP" "$VERS" "$VERSFILE" "$DEPFILE" "$MODE" "$SCMFLAGS" \
-    "$LDFLAGS" "$LDIRS" "$XDIRS" "$OBJS" "$LIBS" || exit $?
+    "$LDFLAGS" "$LDIRS" "$XDIRS" "$OBJS" "$LIBS" "$RHOST" "$RPORT" "$RHOME" "$LHOME" "$PROXY_TOOL" || exit $?
 
 # establish links
-if [ "$VERS" != "" ] && [ "$OS" != "win" ]
+if [ "$VERS" != "" ] && [ "$OS" != "win" ] && [ "$OS" != "rwin" ]
 then
     $SCRIPT_BASE.$OS.ln.sh "$TYPE" "$OUTDIR" "$TARG" "$NAME" "$DBGAP" "$EXT" "$VERS"
 fi
diff --git a/build/ld.win.cmn.sh b/build/ld.win.cmn.sh
index ec41236..f40fd0c 100755
--- a/build/ld.win.cmn.sh
+++ b/build/ld.win.cmn.sh
@@ -56,6 +56,7 @@ shift 2
 
 OBJS="$1"
 LIBS="$2"
+shift 2
 
 # decode MODE
 STATIC=$(expr $MODE % 2)
@@ -63,7 +64,11 @@ MODE=$(expr $MODE / 2)
 DYLD=$(expr $MODE % 2)
 MODE=$(expr $MODE / 2)
 KPROC=$(expr $MODE % 2)
-THREADS=$(expr $MODE / 2)
+MODE=$(expr $MODE / 2)
+THREADS=$(expr $MODE % 2)
+MODE=$(expr $MODE / 2)
+KRYPTO=$(expr $MODE % 2)
+CRYPTO=$(expr $MODE / 2)
 
 ##### TEMPORARY #####
 KPROC=0
diff --git a/build/ld.win.dlib.sh b/build/ld.win.dlib.sh
index 9bfa4b8..f21eadf 100755
--- a/build/ld.win.dlib.sh
+++ b/build/ld.win.dlib.sh
@@ -61,33 +61,28 @@ CMD="$DLIB_CMD $LDFLAGS OLE32.lib"
 # function to convert static libraries to individual COFF files
 convert-static ()
 {
-    if [ $STATIC -eq 0 ]
+    # list members
+    local path="$1"
+    local mbrs="$(ar -t $path)"
+
+    # create sub directory
+    rm -rf "$2" && mkdir "$2"
+    if ! cd "$2"
     then
-        CMD="$CMD $2.a"
-    else
-        # list members
-        local path="$1"
-        local mbrs="$(ar -t $path)"
-
-        # create sub directory
-        rm -rf "$2" && mkdir "$2"
-        if ! cd "$2"
-        then
-            echo "$SELF_NAME: failed to cd to $2"
-            exit 5
-        fi
-        ar -x "$path"
-
-        # add source files to link
-        local m=
-        for m in $mbrs
-        do
-            CMD="$CMD $2/$m"
-        done
-
-        # return to prior location
-        cd - > /dev/null
+        echo "$SELF_NAME: failed to cd to $2"
+        exit 5
     fi
+    ar -x "$path"
+
+    # add source files to link
+    local m=
+    for m in $mbrs
+    do
+        CMD="$CMD $2/$m"
+    done
+
+    # return to prior location
+    cd - > /dev/null
 }
 
 # tack on object files
@@ -150,9 +145,9 @@ then
             ;;
 
 ##### TEMPORARY #####
-# skip kproc
+# use ksproc for kproc
     kproc)
-        continue
+        xLIBNAME=ksproc
         ;;
 #####################
 
@@ -309,16 +304,21 @@ load-dynamic
 
 # produce shared library, stub library and exp file
 echo $CMD
-if ! $CMD
+$CMD
+STATUS=$?
+if [[ ${STATUS} != 0 ]]
 then
-    STATUS=$?
     rm -f "$TARG" "${TARG%lib}dll"
     exit $STATUS
 fi
 
 # copy dll to binary directory, so they can be found by the executables
-# leave the dll in it's original place, so that they can be found in /mod and /wmod too
 cp "${TARG%lib}dll" "$BINDIR"
+STATUS=$?
+if [[ ${STATUS} != 0 ]]
+then
+    exit $STATUS
+fi
 
 # produce dependencies
 if [ "$DEPFILE" != "" ]
diff --git a/build/ld.win.exe.sh b/build/ld.win.exe.sh
index 2b698b2..975505c 100755
--- a/build/ld.win.exe.sh
+++ b/build/ld.win.exe.sh
@@ -73,7 +73,7 @@ convert-static ()
         CMD="$CMD $2.a"
     else
         # list members
-        local path="$1"
+        local path=`cd $(dirname $1);pwd`/$(basename $1) # make sure path is absolute
         local mbrs="$(ar -t $path)"
 
         # create sub directory
@@ -172,9 +172,9 @@ then
             ;;
 
 ##### TEMPORARY #####
-# skip kproc
+# use ksproc for kproc
     kproc)
-        continue
+        xLIBNAME=ksproc
         ;;
 #####################
 
diff --git a/build/ld.win.slib.sh b/build/ld.win.slib.sh
index 104bf6b..17bbc25 100755
--- a/build/ld.win.slib.sh
+++ b/build/ld.win.slib.sh
@@ -50,34 +50,29 @@ fi
 # function to convert an archive into individual object files
 convert-static ()
 {
-    if [ $STATIC -eq 0 ]
+    # list members
+    local path="$1"
+    local mbrs="$(ar -t $path)"
+
+    # unpack archive into temporary directory
+    mkdir -p ld-tmp
+    if ! cd ld-tmp
     then
-        CMD="$CMD $(cygpath -w $1)"
-    else
-        # list members
-        local path="$1"
-        local mbrs="$(ar -t $path)"
-
-        # unpack archive into temporary directory
-        mkdir -p ld-tmp
-        if ! cd ld-tmp
-        then
-            echo "$SELF_NAME: failed to cd to ld-tmp"
-            exit 5
-        fi
-        ar -x "$path"
-
-        # rename and add to source files list
-        local m=
-        for m in $mbrs
-        do
-            mv $m $NAME-$m
-            CMD="$CMD ld-tmp/$NAME-$m"
-        done
-
-        # return to prior location
-        cd - > /dev/null
+        echo "$SELF_NAME: failed to cd to ld-tmp"
+        exit 5
     fi
+    ar -x "$path"
+
+    # rename and add to source files list
+    local m=
+    for m in $mbrs
+    do
+        mv $m $NAME-$m
+        CMD="$CMD ld-tmp/$NAME-$m"
+    done
+
+    # return to prior location
+    cd - > /dev/null
 }
 
 if [ $STATIC -eq 0 ]
@@ -105,10 +100,10 @@ then
 
         # look at linkage
         case "$xLIB" in
-        -l*|-s*)
+        -s*)
 
             # force static load
-            xLIBPATH="$(find-lib $xLIBNAME.lib $LDIRS)"
+            find-lib $xLIBNAME.a $LDIRS
             if [ "$xLIBPATH" != "" ]
             then
 
diff --git a/build/mac.arch.sh b/build/mac.arch.sh
index 19121e0..60ee5d4 100755
--- a/build/mac.arch.sh
+++ b/build/mac.arch.sh
@@ -25,12 +25,19 @@
 
 # PPC or Intel?
 ARCH="$(uname -m)"
+if [ "$ARCH" = "x86_64" ]
+then
+    echo $ARCH
+    exit 0
+fi
 
 # the Mac likes to keep its architecture hidden because for all practical
 # purposes, it is both 32 and 64 bit, and makes use of emulation as needed.
 
 # does the hardware support 64-bit mode, even in emulation?
-CAP64=$(/usr/sbin/sysctl -n hw.cpu64bit_capable)
+SYSCTL=/usr/sbin/sysctl
+[ -x /sbin/sysctl ] && SYSCTL=/sbin/sysctl
+CAP64=$($SYSCTL -n hw.cpu64bit_capable)
 
 # real 64-bit hardware has > 32 bits of address space
 PADDR_BITS=$(/usr/sbin/sysctl -n machdep.cpu.address_bits.physical)
diff --git a/build/sra-dflt-schema.sh b/build/sra-dflt-schema.sh
index 86eaa65..79249f1 100755
--- a/build/sra-dflt-schema.sh
+++ b/build/sra-dflt-schema.sh
@@ -33,22 +33,42 @@ shift
 
 # binary compiler
 CC="$1"
-shift
+shift 
 
 # everything except windows is fine as-is
-if [ "$OS" != "win" ]
-then
+if [[ "$OS" != "win" && "$OS" != "rwin" ]]
+then 
     echo "$CC $*"
     $CC $*
     exit $?
 fi
 
+if [[ "$OS" == "rwin" ]]
+then # for rwin, $CC is a multi-word string; extract server location data from it:
+#                $(TOP)/build/run_remotely.sh $(PROXY_TOOL) $(RHOST) $(RPORT) $(RHOME) $(LHOME) $(TOP) $(SCHEMA_EXE)
+    PARMS=($CC)
+    RHOME=${PARMS[4]}
+    LHOME=${PARMS[5]}
+    TOP=${PARMS[6]}
+fi
+
 # state
 unset ARGS
 unset DEPENDENCIES
 unset DEPTARG
 unset TARG
 
+function convert_path
+{
+    if [[ "$OS" != "rwin" ]]
+    then
+        convert_path_result="$(cygpath -w $1)"
+    else
+        convert_path_result="$RHOME${1#$LHOME}"
+        convert_path_result="$(echo $convert_path_result | tr '/' '\\')"
+    fi
+}
+
 # process parameters for windows
 while [ $# -ne 0 ]
 do
@@ -62,8 +82,8 @@ do
             shift
         fi
         TARG="$ARG"
-        ARG="$(cygpath -w $ARG)"
-        ARGS="$ARGS -o$ARG"
+        convert_path $ARG
+        ARGS="$ARGS -o${convert_path_result}"
         ;;
 
     -I*)
@@ -73,8 +93,9 @@ do
             ARG="$2"
             shift
         fi
-        ARG="$(cygpath -w $ARG)"
-        ARGS="$ARGS -I$ARG"
+        
+        convert_path $ARG
+        ARGS="$ARGS -I${convert_path_result}"
         ;;
 
     -T*)
@@ -86,13 +107,13 @@ do
         fi
         DEPTARG="$ARG"
         DEPENDENCIES=1
-        ARG="$(cygpath -w $ARG)"
-        ARGS="$ARGS -T$ARG"
+        convert_path $ARG
+        ARGS="$ARGS -T${convert_path_result}"
         ;;
 
     *)
-        ARG="$(cygpath -w $1)"
-        ARGS="$ARGS $ARG"
+        convert_path $1
+        ARGS="$ARGS ${convert_path_result}"
         ;;
 
     esac
@@ -102,11 +123,12 @@ do
 done
 
 echo "$CC $ARGS"
-if ! $CC $ARGS
+$CC $ARGS
+STATUS=$?
+if [[ ${STATUS} != 0 ]]
 then
-    STATUS=$?
     rm -f $TARG $DEPTARG
-    exit $?
+    exit ${STATUS}
 fi
 
 if [ $DEPENDENCIES -eq 1 ]
diff --git a/build/win-cc.sh b/build/win-cc.sh
index f989761..d869894 100755
--- a/build/win-cc.sh
+++ b/build/win-cc.sh
@@ -42,6 +42,24 @@ unset OBJX
 unset SRCFILE
 unset SOURCES
 unset DEPENDENCIES
+# paths for translating local to remote
+unset RHOME
+unset LHOME
+unset RHOST
+unset RPORT
+unset PROXY_TOOL
+
+function convert_path
+{
+    if [ "$OS" != "rwin" ] ; then
+        convert_path_result="$(cygpath -w $1)"
+    elif [ "$1" != "." ] ; then
+        convert_path_result="$RHOME${1#$LHOME}"
+        convert_path_result="${convert_path_result//\//\\}"
+    else
+        convert_path_result="."
+    fi
+}
 
 while [ $# -ne 0 ]
 do
@@ -64,6 +82,31 @@ do
         shift
         ;;
 
+    --rhome)
+        RHOME="$2"
+        shift
+        ;;
+
+    --lhome)
+        LHOME="$2"
+        shift
+        ;;
+
+    --rhost)
+        RHOST="$2"
+        shift
+        ;;
+
+    --rport)
+        RPORT="$2"
+        shift
+        ;;
+
+    --proxy_tool)
+        PROXY_TOOL="$2"
+        shift
+        ;;
+
     -D*)
         ARG="${1#-D}"
         if [ "$ARG" = "" ]
@@ -81,8 +124,8 @@ do
             ARG="$2"
             shift
         fi
-        ARG="$(cygpath -w $ARG)"
-        ARGS="$ARGS /I$ARG"
+        convert_path $ARG
+        ARGS="$ARGS /I$convert_path_result"
         ;;
 
     -o*)
@@ -115,8 +158,9 @@ do
     *)
         SRCFILE="$(basename $1)"
         SOURCES="$SOURCES $1"
-        ARG="$(cygpath -w $1)"
-        ARGS="$ARGS $ARG"
+        convert_path $1
+        ARGS="$ARGS $convert_path_result"
+        SRCDIR="$(dirname $1)" # assume the last source file is in the same dir as all the .vers files we need as dependencies
         ;;
         
     esac
@@ -127,15 +171,16 @@ done
 unset STATUS
 
 CMD="$CC $ARGS"
-echo "$CMD"
 
 # run command with redirection
-if $CMD > $TARG.out 2> $TARG.err
+if [ "$OS" = "win" ]
 then
-    # success
-    STATUS=0
+    $CMD > $TARG.out 2> $TARG.err
+    STATUS=$?
 else
-    # failure
+    # determine current directory
+    CURDIR="$(pwd)"
+    ${TOP}/build/run_remotely.sh $PROXY_TOOL $RHOST $RPORT $RHOME $LHOME $CURDIR $CMD > $TARG.out 2> $TARG.err
     STATUS=$?
 fi
 
@@ -144,12 +189,51 @@ if [ "$DEPENDENCIES" = "1" ]
 then
     sed -e '/including file/!d' -e 's/.*including file: *\([^\r\n][^\r\n]*\)/\1/g' -e '/ /d' $TARG.out > $TARG.inc
     echo -n "$TARG.$OBJX: $SOURCES" | sed -e 's/\r//g' > $TARG.d
-    for inc in $(cat $TARG.inc)
-    do
-        echo -n " $(cygpath -u $inc)"  | sed -e 's/\r//g' >> $TARG.d
-    done
+    if [ "$OS" = "win" ]
+    then 
+        for inc in $(cat $TARG.inc)
+        do
+            # vers.h files are now generated in the objdir
+            if [ "$inc" != "${inc%.vers.h}" ]
+            then
+                inc="${inc%.h}"
+            fi
+            echo -n " $(cygpath -u $inc)"  | sed -e 's/\r//g' >> $TARG.d
+        done
+    else # rwin
+        # sometimes home path comes back in lowercase
+        # make sure to compare lowercased prefixes
+        rhome_low=$(echo ${RHOME} | tr '[A-Z]' '[a-z]' | tr '\\' '/')
+        rhome_len=${#RHOME}
+
+        for inc in $(cat $TARG.inc)
+        do
+            inc_low=$(echo ${inc} | tr '[A-Z]' '[a-z]' | tr '\\' '/')
+            # vers.h files are now generated in the objdir
+            if [ "$inc" != "${inc%.vers.h}" ]
+            then
+                # convert the "...vers.h" in the object directory into "...vers" in the source directory
+                inc="${inc%.h}"
+                if [ "${inc_low#$rhome_low}" != "$inc_low" ]
+                then
+                    inc="${inc:$rhome_len}"
+                    inc="${inc//\\//}"
+                    inc="$(basename $inc)"
+                    inc="$SRCDIR/$inc"
+                fi
+            else
+                if [ "${inc_low#$rhome_low}" != "$inc_low" ]
+                then
+                    inc="$LHOME${inc:$rhome_len}"
+                fi
+            fi
+            echo -n " $inc" | tr '\\' '/' >> $TARG.d
+        done
+    fi
+    echo >> $TARG.d
 fi
 
+echo "$CMD"
 # repeat output files but without CR
 sed -e 's/\r//g' $TARG.err > /dev/stderr
 sed -e 's/\r//g' -e "/^$SRCFILE$/d" -e '/including file/d' $TARG.out
diff --git a/configuration-assistant.perl b/configuration-assistant.perl
index 0d7901f..cdc4c29 100755
--- a/configuration-assistant.perl
+++ b/configuration-assistant.perl
@@ -1,10 +1,10 @@
-#!/usr/local/bin/perl -w
+#!/usr/bin/perl -w
 
 ################################################################################
 # N.B. Run "perl configuration-assistant.perl" if you see a message like:
-# configuration-assistant.pl: /bin/perl: bad interpreter: No such file or directory
+# configuration-assistant.perl: /usr/bin/perl: bad interpreter: No such file or directory
 ################################################################################
-# v.1.0.2
+my $VERSION = '2.3.2.4';
 ################################################################################
 
 use strict;
@@ -15,10 +15,12 @@ use File::Basename qw(basename dirname);
 use File::Path "mkpath";
 use File::Spec;
 use Getopt::Long "GetOptions";
+use IO::Handle;
+use Getopt::Long "GetOptions";
 
 sub println { print @_; print "\n"; }
 
-select((select(STDOUT), $| = 1)[0]);
+STDOUT->autoflush(1);
 
 my $R = 1;
 my $W = 2;
@@ -28,243 +30,148 @@ my $FOUND = 16;
 my $RWX = $FOUND + $R + $W + $X;
 
 println "==========================================";
-println "The SRA toolkit documentation page is";
+println "Welcome to the SRA Toolkit Configuration Script.";
+println "SRA toolkit documentation:";
 println "http://www.ncbi.nlm.nih.gov/Traces/sra/std";
 println "==========================================\n";
 
 my %options;
-Help() unless (GetOptions(\%options, "help", "verbose"));
-Help() if ($options{help});
+Help(1) unless (GetOptions(\%options, 'fix', 'help', 'version', 'wordy'));
+Help(0) if ($options{help});
+Version() if ($options{version});
 
-#try_help() if ($#ARGV >= 0);
+$options{references} = 1 if ($#ARGV >= 0);
 
-my ($VDB_CONFIG, $BIN_DIR) = find_bin("vdb-config");
+println "cwd = '" . getcwd() . "'\n";
 
-my %refseq_cfg;
-my @KFG_FILES;
-my $fixed_config = 0;
+my $DECRYPTION_PKG;
 {
-    print "checking configuration files... ";
-    my $f = `$VDB_CONFIG -f`;
-    if ($f =~ /\w/) {
-        while (chomp $f) {}
-        @KFG_FILES = split /\n/, $f;
-        println "'$f'";
-        %refseq_cfg = check_refseq_kfg();
-    } else {
-        println "not found";
+    my ($fastq_dump, $fastq_dir) = FindBin("fastq-dump", "optional");
+    my ($sam_dump, $sam_dir) = FindBin("sam-dump", "optional");
+    if (! $fastq_dump && ! $sam_dump) {
+        println "presuming to be run in decryption package";
+        $DECRYPTION_PKG = 1;
     }
 }
 
-if ($refseq_cfg{NO_volumes} or $refseq_cfg{NO_servers}) {
-    fix_config(\%refseq_cfg,
-        "Existing configuration is invalid. Whould you like to fix it?",
-        "Your tools will not work properly.\n" .
-        "For more information visit SRA website.");
-}
-
-if ($refseq_cfg{refseq_dir}) {
-    if ($refseq_cfg{FIX_volumes} or $refseq_cfg{FIX_paths}) {
-        $refseq_cfg{refseq_dir} = ask_refseq_change($refseq_cfg{refseq_dir});
-        if ($refseq_cfg{refseq_dir} ne 'READ^ONLY') {
-            my $config_dir = del_all_cfg_path($refseq_cfg{refseq_dir});
-            create_cfg($config_dir, $refseq_cfg{refseq_dir}, $BIN_DIR);
-        }
-    } elsif (not $refseq_cfg{refseq_dir_prm}) {
-        unless (askYn("Configuration is found\n"
-            . "but the local reference repository $refseq_cfg{refseq_dir} "
-            . "does not exist.\n"
-            . "Do you want to create it?"))
-        {
-            println "Your tools will not work properly.";
-            println "Remote reference sequences will not be resolved.";
-            println "For more information visit SRA website.";
-            exit 1;
-        }
-        my $prm = check_dir($refseq_cfg{refseq_dir}, "create_missing");
-        my $created = $prm & $CREATED;
-        $prm &= ~ $CREATED;
-        if ($prm != $RWX) {
-            if ($^O ne 'cygwin' or $created != $CREATED) {
-                FATAL("Cannot create $refseq_cfg{refseq_dir}");
-                fix_config(\%refseq_cfg,
-                    "Local reference repository is read-only. ".
-                    "Whould you like to change it?",
-                    "You will not be able to upload reference sequences.\n" .
-                    "For more information visit SRA website.");
-            }
-        }
-        ++$fixed_config;
-    }
-} else {
-    unless (askYn("Do you want to create a new configuration?")) {
-        println "Your tools will not work properly without configuration.";
-        println "For more information visit SRA website.";
-        exit 1;
-    }
-
-    print "checking configuration directories... ";
-    my $paths = `$VDB_CONFIG -d`;
-    if ($?) {
-        die $!;
-    }
-    while (chomp $paths) {}
-    my @paths = split /:/, $paths;
-    println if ($#paths >= 0);
-
-    my $config_dir;
-    foreach (@paths) {
-        next if ($_ eq '/etc/ncbi');
-        if ($^O eq 'MSWin32') { # Windows: translate POSIX to Windows path
-            tr|/|\\|;
-            s/^\\([a-zA-Z])\\/$1:\\/;
-        } elsif ($^O eq 'cygwin') {
-            if (m|^/([a-zA-Z])/|) {
-                $_ = "/cygdrive$_";
-            }
-        }
-
-        my $prm = check_dir($_, "create_missing");
-        my $created = $prm & $CREATED;
-        $prm &= ~ $CREATED;
-        if ($prm == $RWX or ($^O eq 'cygwin' and $created == $CREATED)) {
-            $config_dir = $_;
-            last;
-        }
-    }
-    FATAL("cannot find a usable directory to create configuration file")
-        unless ($config_dir);
+my ($VDB_CONFIG, $BIN_DIR) = FindBin("vdb-config");
 
-    ($refseq_cfg{refseq_dir}, $refseq_cfg{refseq_dir_prm}) = make_refseq_dir();
-
-    create_cfg($config_dir, $refseq_cfg{refseq_dir}, $BIN_DIR);
-    ++$fixed_config;
-}
-
-if ($#ARGV >= 0) {
-    $options{references} = 1;
-} elsif ($fixed_config == 0) {
-    $options{references} = 1;
-}
-$options{references} = ask
-       ("Would you like to test cSRA files for remote reference dependencies?",
-        $fixed_config)
-    unless ($options{references});
-exit 0 unless ($options{references});
-
-my $CHECK_ONLY = $refseq_cfg{refseq_dir} eq 'READ^ONLY';
-
-my ($ALIGN_INFO, $ALIGN_INFO_DIR) = find_bin("align-info");
-WARN("using align-info and vdb-config located in different directories:\n"
-        . "\t$ALIGN_INFO\n\t$VDB_CONFIG")
-    if ($BIN_DIR ne $ALIGN_INFO_DIR);
-
-my $WGET;
-unless ($CHECK_ONLY) {
-    print "checking for wget... ";
-    my $out = `wget -h 2>&1`;
-    if ($? == 0) {
-        println "yes";
-        $WGET = "wget -O";
-    } else {
-        println "no";
-    }
-
-    unless ($WGET) {
-        print "checking for curl... ";
-        my $out = `curl -h 2>&1`;
-        if ($? == 0) {
-            println "yes";
-            $WGET = "curl -o";
-        } else {
-            println "no";
-        }
-    }
-    unless ($WGET) {
-        print "checking for ./wget... ";
-        my $cmd = dirname($0) ."/wget";
-        my $out = `$cmd -h 2>&1`;
-        if ($? == 0) {
-            println "yes";
-            $WGET = "$cmd -O";
-        } else {
-            println "no";
-        }
-    }
-    FATAL("none of wget, curl could be found") unless ($WGET);
-}
-
-if ($#ARGV > -1) {
-    foreach (@ARGV) {
-        load($CHECK_ONLY, $refseq_cfg{refseq_dir}, $_);
-    }
-} else {
-    while (1) {
-        my $f = ask("Enter cSRA file name (Press Enter to exit)");
-        last unless ($f);
-        load($CHECK_ONLY, $refseq_cfg{refseq_dir}, $f);
-    }
+my %kfg;
+Kfg(\%kfg, 'read', 'Reading configuration');
+umask 0002;
+my $fixed = FixKfg(\%kfg);
+if ($fixed) {
+    undef %kfg;
+    Kfg(\%kfg, 'read', 'Checking configuration');
 }
+#DoKryptoCfg(\%kfg);
 
 ################################################################################
 # FUNCTIONS #
 ################################################################################
 
-sub ask {
+sub Ask {
     my ($prompt) = @_;
+
     print "$prompt: ";
+
     my $in = <STDIN>;
     unless ($in) {
         println;
         return "";
     }
+
     chomp $in;
     return $in;
 }
-sub askYn { return askYN($_[0], 'yes');}
-sub askyN { return askYN($_[0], 'no' );}
-sub askYN {
+
+sub AskYn { return AskYN($_[0], 'yes');}
+sub AskyN { return AskYN($_[0], 'no' );}
+
+sub AskYN {
     my ($q, $yes) = @_;
+
     $yes = '' if ($yes eq 'no');
+
     print "$q ";
+
     if ($yes) {
         print "[Y/n] ";
     } else {
         print "[y/N] ";
     }
+
     my $in = <STDIN>;
     chomp $in;
     if ($in) {
-        return $in eq 'Y' or $in eq 'y'
-          or $in eq 'YES' or $in eq 'yes' or $in eq 'Yes';
+        return $in eq 'Y' || $in eq 'y'
+          || $in eq 'YES' || $in eq 'yes' || $in eq 'Yes';
     } else {
         return $yes;
     }
 }
-sub ask_refseq_change {
+
+sub AskRefseqChange {
     my ($refseq) = @_;
+
     die unless ($refseq);
+
     my $force;
+
     while (1) {
+        my $read = -r $refseq && -x $refseq;
         println "Your repository directory is $refseq.";
-        println "It is read-only. You cannot add new sequences to it.";
+        my $dflt;
+        if ($read) {
+            println "It is read-only. You cannot add new sequences to it.";
+            $dflt = "1";
+        } else {
+            println "You cannot read it.";
+            $dflt = "2";
+        }
         println "Make your choice:";
         println "1) Use existing repository";
         println "2) Use a different repository";
         println "3) exit the script";
-        print "Your selection? [1] ";
+        print "Your selection? [$dflt] ";
+
         my $in = <STDIN>;
         chomp $in;
-        return 'READ^ONLY' if (! $in or $in eq "1");
+        $in = $dflt unless ($in);
+
+        if ($in eq "1") {
+            unless ($read) {
+                Fatal(
+"Ask the owner of $refseq to allow you access $refseq directory\n" .
+"Otherwise the dumpers will not be able to find reference files"
+                );
+            }
+            return ($refseq, 'READ^ONLY');
+        }
+
         if ($in eq "2") {
             last;
         }
+
         exit 0 if ($in eq "3");
     }
-    my ($path, $perm) = make_refseq_dir();
-    return $path;
+
+    my ($path, $perm) = MakeRefseqDir();
+
+    return ($path, '');
+}
+
+sub Home {
+    if ($ENV{HOME}) {
+        return $ENV{HOME};
+    } elsif ($ENV{USERPROFILE}) {
+        return $ENV{USERPROFILE};
+    } else {
+        return '';
+    }
 }
-sub make_refseq_dir {
+
+sub MakeRefseqDir {
     my $deflt;
     if ($^O eq 'cygwin' and $ENV{USERPROFILE}) {
         $deflt = $ENV{USERPROFILE};
@@ -273,11 +180,10 @@ sub make_refseq_dir {
         if ($1) {
             $deflt = "/cygdrive$deflt";
         }
-    } elsif ($ENV{HOME}) {
-        $deflt = $ENV{HOME};
-    } elsif ($ENV{USERPROFILE}) {
-        $deflt = $ENV{USERPROFILE};
     } else {
+        $deflt = Home();
+    }
+    unless ($deflt) {
         $deflt = getcwd();
     }
     $deflt = "." unless($deflt);
@@ -303,199 +209,310 @@ sub make_refseq_dir {
             $path = $deflt;
         }
         exit 1 unless ($path);
-        my $perm = check_dir($path, "create_missing");
-        my $prm = $perm;
+        my ($prm_org, $perm) = CheckDir($path, "create_missing");
+        my $prm = $prm_org;
         my $created = $prm & $CREATED;
-        $prm &= ~ $CREATED;
-        if ($prm == $RWX or ($^O eq 'cygwin' and $created == $CREATED)) {
-            return ($path, $perm);
+        $prm &= $RWX;
+        if ($prm == $RWX || ($^O eq 'cygwin' and $created == $CREATED)) {
+            return ($path, $prm_org);
+        } elsif ($prm & $FOUND) {
+            println "'$path' does not seem to be writable.";
+            println "You will not be able to add new sequences to it.";
+            if (AskyN("Do you want to use it?")) {
+                return ($path, $prm_org);
+            }
         }
     }
 }
 
-sub create_cfg {
-    my ($config_dir, $refseq_dir, $bin_dir) = @_;
+sub Posixify {
+    ($_) = @_;
 
-    my $kfg;
-    for (my $i = 0; ; ++$i) {
-        $kfg = "$config_dir/ncbi-config";
-        $kfg .= "$i" if ($i);
-        $kfg .= ".kfg";
-        last unless (-e $kfg);
-    }
-
-    print "creating configuration file $kfg... ";
-    {
-        # convert refseq_dir to POSIX path
-        $refseq_dir =~ s|^/cygdrive/|/|;
-        $refseq_dir =~ tr|\\|/|;
-        $refseq_dir =~ s|^([a-zA-Z]):/|/$1/|;
-    }
+    # convert to POSIX path
+    s|^/cygdrive/|/|;
+    tr|\\|/|;
+    s|^([a-zA-Z]):/|/$1/|;
 
-    open(F, ">$kfg") or die "cannot open $kfg";
-    print F "refseq/paths = \"$refseq_dir\"\n";
-    close F or die "cannot close $kfg";
-    println "ok";
+    return $_;
+}
 
-    my %tmp_cfg = check_refseq_kfg();
-    die unless ($tmp_cfg{refseq_dir_prm} = $RWX);
+sub Version {
+      my $bin = basename($0);
+      print << "END";
+$bin version $VERSION
+END
 
-    println "N.B. Configuration file location is relative to the binaries";
-    {
-        if ($bin_dir and (File::Spec->catfile($bin_dir, "ncbi") eq $config_dir))
-        {
-            println "     ($bin_dir)";
-        }
-    }
-    println "     It can be lost of you move an application";
+      exit 0;
 }
 
 sub Help {
+    my ($exit) = @_;
+    $exit = 0 unless ($exit);
       my $bin = basename($0);
       print << "END";
-$bin version 1.0.2
+$bin version $VERSION
 
 Utility to help configure the SRA tools to be able
 to access the local reference repository,
-determine which reference sequences a cSRA file relies
+determine which reference sequences a SRA file relies
 upon and to fetch them from NCBI.
 Fetched references are placed in the local reference repository.
 
-Usage: $bin [-v] [cSRA_FILE...]
+Usage: $bin [--fix] [--wordy] [SRA_FILE ...]
 
 Options
--v, --verbose       increase "fetcher" verbosity
+-f, --fix         re-download existing reference files;
+                  fix refseq repository permissions
+-v, --version     print version and exit
+-w, --wordy       increase "fetcher" verbosity
 END
 
-      exit 1;
+      exit $exit;
 }
 
-sub fix_config {
+sub FixRefseqCfg {
     my ($refseq_cfg, $question, $bye) = @_;
-    unless (askYn($question)) {
+
+    unless (AskYn($question)) {
         print $bye;
         exit 1;
     }
-    my $config_dir = del_all_cfg_path($refseq_cfg);
-    ($refseq_cfg->{refseq_dir}, $refseq_cfg{refseq_dir_prm})
-        = make_refseq_dir();
-    create_cfg($config_dir, $refseq_cfg->{refseq_dir}, $BIN_DIR);
-}
-
-sub del_all_cfg_path {
-    my ($refseq_cfg) = @_;
-    my $config_dir;
-    my %bak;
-    foreach (@KFG_FILES) {
-        my $f = $_;
-        my $file_bak;
-        my $fixed = "";
-        open IN, $f or die "cannot open $_";
-        while (<IN>) {
-            if (m|refseq/servers| or m|refseq/volumes| or m|refseq/paths|) {
-                $config_dir = dirname($f) unless ($config_dir);
-                $fixed .= "# $_";
-                for (my $i = 0; not $file_bak; ++$i) {
-                    $file_bak = "$f.bak";
-                    $file_bak .= "$i" if ($i);
-                    last unless (-e $file_bak);
-                }
-            } else {
-                $fixed .= $_;
-            }
+
+    ($refseq_cfg->{refseq_dir}, $refseq_cfg->{refseq_dir_prm})
+        = MakeRefseqDir();
+    UpdateRefseqCfgNode($refseq_cfg->{refseq_dir});
+}
+
+sub UpdateRefseqCfgNode {
+    ($_) = @_;
+    $_ = Posixify($_);
+    UpdateConfigNode('refseq/paths' , $_);
+}
+
+sub UpdateKryptoCfgNode {
+    ($_) = @_;
+    $_ = Posixify($_);
+    UpdateConfigNode('krypto/pwfile', $_);
+}
+    
+sub UpdateConfigNode {
+    my ($name, $val) = @_;
+
+    print "'$name' => '$val': ";
+    my $cmd = "$VDB_CONFIG -s \"$name=$val\"";
+#   println "\n$cmd";
+    `$cmd`;
+    if ($?) {
+        println "error: $!";
+    } else {
+        println "updated";
+    }
+}
+
+sub DoSchemaCfg {
+    my $error;
+
+    print "checking schema configuration... ";
+
+    my $tmp = `$VDB_CONFIG vdb/schema/paths 2>&1`;
+    if ($? == 0) {
+        chomp $tmp;
+
+        if ($tmp =~ m|<paths>(.+)</paths>|) {
+            my $paths = $1;
+            println $paths;
+            my @paths = split(/:/, $paths);
+
+            $error += !CheckSchemaFile('align/align.vschema', @paths);
+            $error += !CheckSchemaFile('ncbi/seq.vschema'   , @paths);
+            $error += !CheckSchemaFile('vdb/vdb.vschema'    , @paths);
+        } else {
+            $error = "unexpected: $tmp";
+            println $error;
         }
-        close $f;
-        if ($file_bak) {
-            unless (rename($f, $file_bak)) {
-                rollback(%bak);
-                FATAL("Cannot update(save) $f: is file/directory writable?");
-            } else {
-                $bak{$file_bak} = $f;
-                unless (open(OUT, ">$f")) {
-                    rollback(%bak);
-                    FATAL("Cannot update $f: $!");
-                }
-                print OUT $fixed;
-                unless (close(OUT)) {
-                    rollback(%bak);
-                    FATAL("Cannot update(close) $f: $!");
-                }
-            }
+    } elsif ($tmp =~ /path not found/) {
+        $error = "not found";
+        println $error;
+    } else {
+        $error = "unknown vdb-config schema error";
+        println $error;
+    }
+
+    if ($error) {
+        println "--------------------------------------";
+        println "WARNING: SCHEMA FILES CANNOT BE FOUND.";
+        println "IT COULD CAUSE LOADERS TO FAIL.";
+        println "--------------------------------------";
+    }
+
+    return ! $error;
+}
+
+sub CheckSchemaFile {
+    my ($file, @dir) = @_;
+
+    my $cygdrive = '/cygdrive';
+    my $hasCygdrive = -e '/cygdrive';
+
+    print "checking $file... ";
+
+    foreach my $dir(@dir) {
+        my $path = "$dir/$file";
+        if (-e $path) {
+            println $path;
+            return 1;
         }
     }
-    return $config_dir;
+
+    println "not found";
+
+    return 0;
 }
 
-sub rollback {
-    my (%bak) = @_;
-    while (my ($bak, $orig) = each %bak) {
-        rename($bak, $orig);
+sub CleanEmptyFiles {
+    my ($refseq_dir) = @_;
+
+    print "checking $refseq_dir for invalid empty reference files... ";
+
+    my $i = 0;
+    opendir DIR, $refseq_dir or die "cannot opendir $refseq_dir";
+    while ($_ = readdir DIR) {
+        next if (/^\.{1,2}$/);
+
+        my $f = "$refseq_dir/$_";
+
+        my $empty;
+        if (-z $f) {
+            ++$empty;
+        } elsif (-d $f) {
+            # skip a directory
+        } elsif (-s $f < 999) {
+            open F, $f or die "cannot open $f";
+            my $data = '';
+            while (<F>) {
+                while(chomp) {};
+                $data .= $_;
+            }
+            ++$empty if ($data =~ m|<title>404 - Not Found</title>|);
+        }
+        if ($empty) {
+            unlink $f or die "cannot remove $f";
+            ++$i;
+        }
     }
+    closedir DIR;
+
+    if ($i)
+    {   println "$i found"; }
+    else
+    {   println "none found"; }
 }
 
-sub load {
-    my ($check_only, $refseq_dir, $f) = @_;
-    println "Determining $f external dependencies...";
-    my $cmd = "$ALIGN_INFO $f";
-    my @info = `$cmd`;
-    if ($?) {
-        println "$f: error";
+sub FixRefseqDirPermissions {
+    my ($dir, $read_only) = @_;
+    print "checking refseq repository...";
+    my $mode = (stat($dir))[2] & 07777;
+
+    if ($read_only) {
+        println " read-only";
+        print "\tchecking directory permissions...";
+        unless (-r $dir && -x $dir) {
+            Fatal("\n$dir cannot be accessed. "
+                . "Either update its permissions\n"
+                . "or choose another directory for refseq repository.");
+        }
+        println " OK";
+        print "\tchecking file permissions...";
+        opendir REP, $dir or die "cannot opendir $dir";
+        my $ok = 1;
+        while (my $f = readdir REP) {
+            next if ($f =~ /^\.{1,2}$/);
+            unless (-r "$dir/$f") {
+                Warn("\n$dir/$f is not readable. "
+                    . "Either update its permissions\n"
+                    . "or choose another directory for refseq repository.");
+                $ok = 0;
+            }
+        }
+        closedir REP;
+        println " OK" if $ok;
+        println "\tchecking parent directories...";
+        my @dirs = File::Spec->splitdir($dir);
+        my $p = File::Spec->rootdir;
+        while (@dirs) {
+            $_ = shift @dirs;
+            $p = File::Spec->catdir($p, $_);
+            print "\t\t$p";
+            $ok = 1;
+            unless (-r $p && -x $p) {
+                Warn("\n$p cannot be accessed. "
+                    . "Either update its permissions\n"
+                    . "or choose another directory for refseq repository.");
+                $ok = 0;
+            }
+            println " OK" if $ok;
+        }
     } else {
-        my $refs = 0;
-        my $ok = 0;
-        my $ko = 0;
-        foreach (@info) {
-            chomp;
-            my @r = split /,/;
-            if ($#r >= 3) {
-                my ($seqId, $remote) = ($r[0], $r[3]);
-                ++$refs;
-                if ($remote eq 'remote') {
-                    if ($check_only) {
-                        println "$seqId: unresolved";
-                        ++$ok;
-                    } else {
-                        print "Downloading $seqId... ";
-                        println if ($options{verbose});
-                        my $cmd = "$WGET \"$refseq_dir/$seqId\"" .
-                          " http://ftp-trace.ncbi.nlm.nih.gov/sra/refseq/$seqId"
-                          . " 2>&1";
-                        my $res;
-                        if ($options{verbose}) {
-                            $res = system($cmd);
-                        } else {
-                            `$cmd`;
-                            $res = $?;
-                        }
-                        print "$seqId: " if ($options{verbose});
-                        if ($res) {
-                            println "failed";
-                            ++$ko;
-                        } else {
-                            println "ok";
-                            ++$ok;
-                        }
-                    }
+        println " writable";
+        print "\tchecking directory permissions...";
+        my $ok = 1;
+        if (($mode & 0755) != 0755) {
+            $mode |= 0755;
+            if (chmod($mode, $dir) != 1) {
+                Warn("\n$dir is not acessible by some of the users\n"
+                    . "Dumping of some files could fail if run by anoother user"
+                  );
+                $ok = 0;
+            } else { println " fixed" }
+        } else { println " OK" }
+        $ok = "OK";
+        print "\tchecking file permissions...";
+        opendir REP, $dir or die "cannot opendir $dir";
+        while (my $next = readdir REP) {
+            next if ($next =~ /^\.{1,2}$/);
+            my $f = "$dir/$next";
+            my $mode = (stat($f))[2] & 07777;
+            if (($mode & 0644) != 0644) {
+                if ($ok) {
+                    $mode |= 0644;
+                    if (chmod($mode, $f) != 1) {
+                        Warn("\n$f cannot be acessed by some of the users\n"
+                                . "Dumping of some files could fail "
+                                . "if run by anoother user");
+                        $ok = "";
+                    } else { $ok = "fixed" }
                 }
             }
         }
-        if ($check_only) {
-            if ($ok == 0) {
-                println "All $refs references were found";
-            } else {
-                println "$refs references were checked, $ok missed";
-            }
-        } else {
-            print "All $refs references were checked (";
-            print "$ko failed, " if ($ko);
-            println "$ok downloaded)";
+        closedir REP;
+        println " $ok" if ($ok);
+        $ok = 1;
+        println "\tchecking parent directories...";
+        my @dirs = File::Spec->splitdir($dir);
+        my $p = File::Spec->rootdir;
+        while (@dirs) {
+            $_ = shift @dirs;
+            $p = File::Spec->catdir($p, $_);
+            print "\t\t$p";
+            my $mode = (stat($p))[2] & 07777;
+            if (($mode & 0550) != 0550) {
+                if ($ok) {
+                    $mode |= 0550;
+                    if (chmod($mode, $p) != 1) {
+                        Warn("\n$p cannot be acessed by some of the users\n"
+                                . "Dumping of some files could fail "
+                                . "if run by anoother user");
+                        $ok = 0;
+                    } else { println " fixed" }
+                }
+            } else { println " OK" }
         }
     }
 }
 
 ################################################################################
 
-sub check_dir {
+sub CheckDir {
     my ($dir, $create_missing) = @_;
 
     $dir = File::Spec->canonpath($dir);
@@ -504,7 +521,7 @@ sub check_dir {
     my $prm = 0;
     unless (-e $dir) {
         println "not found";
-        return 0 unless ($create_missing);
+        return (0, 0) unless ($create_missing);
 
         print "checking ${dir}'s parents... ";
         $dir = File::Spec->canonpath($dir);
@@ -513,7 +530,7 @@ sub check_dir {
         if ($^O eq 'MSWin32') {
             $test = "";
         } else {
-            FATAL("bad root directory '$test'") unless (-e $test);
+            Fatal("bad root directory '$test'") unless (-e $test);
         }
         foreach (@dirs) {
             my $prev = $test;
@@ -531,12 +548,12 @@ sub check_dir {
         print "($test)... ";
         my $cygwin_beauty;
 # cygwin does not detect -r for $ENV{USERPROFILE}
-        if (! -r $test or ! -x $test) {
+        if (! -r $test || ! -x $test) {
             if ($^O eq 'cygwin') {
                 ++$cygwin_beauty;
             } else {
                 println "not readable";
-                return 0;
+                return (0, 0);
             }
         }
         if (! -x $test) {
@@ -544,7 +561,7 @@ sub check_dir {
                 ++$cygwin_beauty;
             } else {
                 println "not writable";
-                return 0;
+                return (0, 0);
             }
         }
         if ($cygwin_beauty) {
@@ -557,13 +574,14 @@ sub check_dir {
         unless (mkpath($dir)) {
             die "cannot mkdir $dir" unless ($cygwin_beauty);
             println "failed. Is it writable?";
-            return 0;
+            return (0, 0);
         }
         println("ok");
         $prm += $CREATED;
         print "checking $dir... ";
     }
 
+    my $perm = (stat($dir))[2];
     $prm += $FOUND;
 
     {
@@ -579,7 +597,7 @@ sub check_dir {
             $prm += $X;
         }
 
-        if (! -r $dir or ! -x $dir) {
+        if (! -r $dir || ! -x $dir) {
             if ($^O eq 'cygwin') {
                 ++$cygwin_beauty;
             } else {
@@ -602,53 +620,43 @@ sub check_dir {
         }
     }
 
-    return $prm;
+    return ($prm, $perm);
 }
 
-sub check_refseq_kfg {
+sub CheckCfg {
     print "checking refseq configuration... ";
-    my %refseq_cfg;
-    refseq_from_kfg(\%refseq_cfg);
-
-    if ($refseq_cfg{servers} and !$refseq_cfg{volumes}) {
-        ++$refseq_cfg{NO_volumes};
-        println "found invalid";
-        return %refseq_cfg;
-        FATAL("need to update existing invalid configuration");
-        # TODO
-    } elsif ($refseq_cfg{volumes} and !$refseq_cfg{servers}) {
-        ++$refseq_cfg{NO_servers};
-        println "found invalid";
-        FATAL("need to update existing invalid configuration");
-        # TODO
-    } elsif ($refseq_cfg{servers} and $refseq_cfg{volumes}) {
-        println "servers=$refseq_cfg{servers}volumes=$refseq_cfg{volumes}";
-        if ($refseq_cfg{paths}) {
-           WARN("/refseq/servers&volumes found: /refseq/paths will be ignored");
-        }
-    } elsif ($refseq_cfg{paths}) {
-        println "paths=refseq_cfg{paths}";
+
+    my %konfig;
+    RefseqFromConfig(\%konfig);
+
+    if ($konfig{refseqrepository} || $konfig{servers} || $konfig{volumes})
+    {
+        if ($konfig{refseqrepository}) {
+            println "refseq/repository found:";
+        } elsif ($konfig{servers}) {
+            println "refseq/servers found:";
+        } elsif ($konfig{volumes}) {
+            println "refseq/volumes found:";
+        }
+        println "Seems to be running in NCBI environment:";
+        println "      refseq configuration fix/update is disabled;";
+        println "      reference files download is disabled.";
+        ++$options{NCBI};
+        return;
+    }
+
+    if ($konfig{paths}) {
+        println "paths=$konfig{paths}";
     } else {
         println "not found";
-        return %refseq_cfg;
+        return %konfig;
     }
 
-    if ($refseq_cfg{servers} and index($refseq_cfg{servers}, ":") != -1) {
-        die "Unexpected configuration: servers=$refseq_cfg{servers}";
-    }
-    if ($refseq_cfg{volumes} and index($refseq_cfg{volumes}, ":") != -1) {
-        die "Unexpected configuration: volumes=$refseq_cfg{volumes}";
-    }
-    if ($refseq_cfg{paths} and index($refseq_cfg{paths}, ":") != -1) {
-        die "Unexpected configuration: paths=$refseq_cfg{paths}";
+    if ($konfig{paths} and index($konfig{paths}, ":") != -1) {
+        die "Unexpected configuration: paths=$konfig{paths}";
     }
 
-    my $dir;
-    if ($refseq_cfg{servers} and $refseq_cfg{volumes}) {
-        $dir = File::Spec->catdir($refseq_cfg{servers}, $refseq_cfg{volumes});
-    } else {
-        $dir ="$refseq_cfg{paths}";
-    }
+    my $dir = "$konfig{paths}";
 
     if ($^O eq 'MSWin32') { # Windows: translate POSIX to Windows path
         $dir =~ tr|/|\\|;
@@ -657,26 +665,90 @@ sub check_refseq_kfg {
         $dir = "/cygdrive$dir";
     }
 
-    $refseq_cfg{refseq_dir} = $dir;
-    my $prm = check_dir($dir);
-    $refseq_cfg{refseq_dir_prm} = $prm;
+    $konfig{refseq_dir} = $dir;
+    my ($prm, $perm) = CheckDir($dir);
+    $konfig{refseq_dir_prm} = $prm;
     if ($prm == 0) { # not found
-        return %refseq_cfg;
+        return %konfig;
     } elsif ($prm != $RWX) {
         if ($^O ne 'cygwin') {
-            if ($refseq_cfg{servers}) {
-                ++$refseq_cfg{FIX_volumes};
+            ++$konfig{FIX_paths};
+#           Fatal("refseq repository is invalid or read-only");
+        } # else cygwin does not always can tell permissions correctly
+    }
+    return %konfig;
+}
+
+sub FindWget {
+    my $WGET;
+
+    print "checking for wget... ";
+    my $out = `wget -h 2>&1`;
+    if ($? == 0) {
+        println "yes";
+        if ($options{fix}) {
+            $WGET = "wget -O";
+        } else {
+            $WGET = "wget -c -O";
+        }
+        ++$options{all_references};
+    } else {
+        println "no";
+    }
+
+    unless ($WGET) {
+        print "checking for curl... ";
+        my $out = `curl -h 2>&1`;
+        if ($? == 0) {
+            println "yes";
+            $WGET = "curl -o";
+            ++$options{all_references} if ($options{fix});
+        } else {
+            println "no";
+        }
+    }
+
+    unless ($WGET) {
+        print "checking for ./wget... ";
+        my $cmd = dirname($0) ."/wget";
+        my $out = `$cmd -h 2>&1`;
+        if ($? == 0) {
+            println "yes";
+            if ($options{fix}) {
+                $WGET = "$cmd -O";
             } else {
-                ++$refseq_cfg{FIX_paths};
+                $WGET = "$cmd -c -O";
             }
-#           FATAL("refseq repository is invalid or read-only");
-        } # else cygwin does not always can tell permissions correctly
+            ++$options{all_references};
+        } else {
+            println "no";
+        }
+    }
+
+    unless ($WGET) {
+        print "checking for ./wget.exe... ";
+        my $cmd = dirname($0) ."/wget.exe";
+        my $out = `$cmd -h 2>&1`;
+        if ($? == 0) {
+            println "yes";
+            if ($options{fix}) {
+                $WGET = "$cmd -O";
+            } else {
+                $WGET = "$cmd -c -O";
+            }
+            ++$options{all_references};
+        } else {
+            println "no";
+        }
     }
-    return %refseq_cfg;
+
+    Fatal("none of wget, curl could be found") unless ($WGET);
+
+    return $WGET;
 }
 
-sub find_bin {
-    my ($name) = @_;
+sub FindBin {
+    my ($name, $optional) = @_;
 
     my $prompt = "checking for $name";
     my $basedir = dirname($0);
@@ -690,13 +762,19 @@ sub find_bin {
             if ($? == 0) {
                 chomp $dir;
                 my $try = File::Spec->catfile($dir, $name);
-                print "($try)... ";
-                my $tmp = `$try -h 2>&1`;
-                if ($? == 0) {
-                    println "yes";
-                    return ($try, $dir);
+                print "($try";
+                if (-e $try) {
+                    print ": found)... ";
+                    my $tmp = `$try -h 2>&1`;
+                    if ($? == 0) {
+                        println "yes";
+                        return ($try, $dir);
+                    } else {
+                        println "\nfailed to run '$try -h'";
+                    }
+                } else {
+                    println ": not found)";
                 }
-                println "no";
             }
         }
     } else {
@@ -706,13 +784,36 @@ sub find_bin {
     # try the script directory
     {
         my $try = File::Spec->catfile($basedir, $name);
-        print "$prompt ($try)... ";
-        my $tmp = `$try -h 2>&1`;
-        if ($? == 0) {
-            println "yes";
-            return ($try, $basedir);
+        print "$prompt ($try";
+        if (-e $try) {
+            print ": found)... ";
+            my $tmp = `$try -h 2>&1`;
+            if ($? == 0) {
+                println "yes";
+                return ($try, $basedir);
+            } else {
+                println "\nfailed to run '$try -h'";
+            }
         } else {
-            println "no";
+            println ": not found)";
+        }
+    }
+
+    # the script directory: windows
+    {
+        my $try = File::Spec->catfile($basedir, "$name.exe");
+        print "$prompt ($try";
+        if (-e $try) {
+            print ": found)... ";
+            my $tmp = `$try -h 2>&1`;
+            if ($? == 0) {
+                println "yes";
+                return ($try, $basedir);
+            } else {
+                println "\nfailed to run '$try -h'";
+            }
+        } else {
+            println ": not found)";
         }
     }
 
@@ -729,47 +830,382 @@ sub find_bin {
         }
     }
 
-    FATAL("$name could not be found");
+    Fatal("$name could not be found") unless ($optional);
+    return (undef, undef);
+}
+
+sub DoKryptoCfg {
+    my ($kfg) = @_;
+
+    my $v = $kfg->{'krypto/pwfile'};
+    unless ($v) {
+        println "failed to read krypto configuration";
+        return;
+    }
+
+    my $dflt = $DECRYPTION_PKG ? 'y' : 'n';
+    print "Do you want to " . ((-e $v) ? "update" : "set") . " your dbGap encryption key? [" .
+        ($DECRYPTION_PKG ? "Y/n" : "y/N") . "] ";
+    my $answer = GetYNAnswer($dflt, 'y');
+    UpdateKryptoCfg() if ($answer eq 'y');
+}
+
+sub UpdateKryptoCfg {
+    my $VDB_PASSWD = (FindBin('vdb-passwd'))[0];
+
+    my $res = system("$VDB_PASSWD -q");
+    if ($res) {
+        println "password update failed";
+    } else {
+        println "password updated ok";
+    }
 }
 
-sub refseq_config {
+sub RefseqConfig {
     my ($nm) = @_;
-    my $v = `$VDB_CONFIG refseq/$nm 2>&1`;
+
+    $_ = `$VDB_CONFIG refseq/$nm 2>&1`;
+
     if ($?) {
-        if ($v =~ /path not found while opening node/) {
-            $v = '';
+        if (/path not found while opening node/) {
+            $_ = '';
         } else {
             die $!;
         }
     } else {
-        $v =~ /<$nm>(.*)<\/$nm>/;
+        m|<$nm>(.*)</$nm>|s;
         die "Invalid 'refseq/$nm' configuration" unless ($1);
         # TODO die if (refseq/paths = "") : fix it
-        $v = $1;
+        $_ = $1;
     }
-    return $v;
+
+    return $_;
 }
 
-sub refseq_from_kfg {
+sub RefseqFromConfig {
     my ($refseq) = @_;
-    $refseq->{servers} = refseq_config('servers');
-    $refseq->{volumes} = refseq_config('volumes');
-    $refseq->{paths} = refseq_config('paths');
+
+    $refseq->{paths} = RefseqConfig('paths');
+    $refseq->{refseqrepository} = RefseqConfig('repository');
+    $refseq->{servers} = RefseqConfig('servers');
+    $refseq->{volumes} = RefseqConfig('volumes');
+}
+
+sub GetKfgNode {
+    my ($nm, $specPrnt) = @_;
+
+    print "$nm: ";
+
+    @_ = split(/\//, $nm);
+    die "GetKfgNode($nm)" if ($#_ < 0);
+    my $leaf = $_[$#_];
+
+    $_ = `$VDB_CONFIG $nm 2>&1`;
+
+    if ($?) {
+        if (/path not found while opening node/) {
+            $_ = '';
+        } else {
+            println;
+            die $!;
+        }
+    } else {
+        m|<$leaf>(.*)</$leaf>|s;
+        unless ($1) {
+            println;
+            die "Invalid '$nm' configuration: '$_'" 
+        }
+        $_ = $1;
+    }
+
+    if ($_) {
+        if ($specPrnt) {
+            if ($specPrnt  eq 'file') {
+                print "'$_': ";
+                if (-e $_) {
+                    println "exists";
+                } else {
+                    println "does not exist";
+                }
+            } else {
+                println "found";
+            }
+        } else {
+            println "'$_'";
+        }
+    } else {
+        println "not found";
+    }
+
+    return $_;
 }
 
-sub FATAL {
+sub Kfg {
+    my ($kfg, $kfgMode, $msg) = @_;
+    my $updated;
+    my $read;
+    if ($kfgMode eq 'fix') {
+        println "\n$msg";
+    } else {
+        println "\n$msg";
+        $read = 1;
+    }
+
+    if ($read) {
+        $kfg->{dflt_user_root} = File::Spec->catdir(Home(), 'ncbi', 'public');
+    }
+
+#   my $nm = 'krypto/pwfile';
+#   if ($read) {
+#       $kfg->{$nm} = GetKfgNode($nm, 'file');
+#       if ($kfg->{$nm} eq '1' || $kfg->{$nm} eq '/.ncbi/vdb-passwd') {
+#            # fix bugs introduced by previous script version
+#            $kfg->{$nm} = '';
+#       }
+#       println;
+#   } else {
+#       if (!$kfg->{$nm}) {
+#           my $path = Posixify(
+#               File::Spec->catdir(Home(), '.ncbi', 'vdb-passwd'));
+#           UpdateConfigNode($nm, $path);
+#           $updated = 1;
+#       }
+#   }
+
+    if ($read) {
+        my $nm = 'refseq/servers';
+        $kfg->{$nm} = GetKfgNode($nm, 'file');
+
+        $nm = 'refseq/volumes';
+        $kfg->{$nm} = GetKfgNode($nm);
+        if ($kfg->{'refseq/servers'} && !($kfg->{'refseq/servers'} =~ m|^/net|)
+            && !($kfg->{'refseq/servers'} =~ m|^/panfs/|))
+        {
+            $kfg->{dflt_user_root}
+                = File::Spec->catdir($kfg->{'refseq/servers'});
+        }
+
+        $nm = 'refseq/paths';
+        $kfg->{$nm} = GetKfgNode($nm, 'file');
+        if ($kfg->{$nm} && ($kfg->{$nm} =~ m|^(.+)/refseq$|)) {
+            $kfg->{dflt_user_root} = $1;
+        }
+
+        println;
+    }
+
+
+    if ($read) {
+        my $nm = 'repository';
+        $kfg->{$nm} = GetKfgNode($nm, 'dont print');
+    }
+
+    my $disableRemoteName = 'repository/remote/main/NCBI/disabled';
+    my %remote = (
+        'repository/remote/main/NCBI/root'
+                         => 'http://ftp-trace.ncbi.nlm.nih.gov/sra',
+        'repository/remote/main/NCBI/apps/sra/volumes/fuse1000'
+                         => 'sra-instant/reads/ByRun/sra',
+        'repository/remote/main/NCBI/apps/refseq/volumes/refseq' => 'refseq',
+        'repository/remote/main/NCBI/apps/wgs/volumes/fuseWGS'   => 'wgs',
+        $disableRemoteName                                       => '',
+        'repository/remote/protected/CGI/resolver-cgi'
+                         => 'http://www.ncbi.nlm.nih.gov/Traces/names/names.cgi'
+    );
+
+    my $userRootName = 'repository/user/main/public/root';
+    my $enableCacheName = 'repository/user/main/public/cache-enabled';
+    my %user = (
+        $userRootName => '',
+        'repository/user/main/public/apps/sra/volumes/sraFlat'   => 'sra',
+        'repository/user/main/public/apps/refseq/volumes/refseq' => 'refseq',
+        'repository/user/main/public/apps/wgs/volumes/wgsFlat'   => 'wgs',
+        $enableCacheName                                         => ''
+   );
+
+    if ($read && $kfg->{repository}) {
+        my $nm = 'repository/site';
+        $kfg->{$nm} = GetKfgNode($nm, 'dont print');
+
+        println;
+    }
+
+    if ($read && $kfg->{repository}) {
+        my $nm = 'repository/remote';
+        $kfg->{$nm} = GetKfgNode($nm, 'dont print');
+    }
+
+    foreach my $nm(keys %remote) {
+        if ($read) {
+            if ($kfg->{'repository/remote'}) {
+                $kfg->{$nm} = GetKfgNode($nm);
+                unless ($kfg->{$nm}) {
+                    if ($nm ne $disableRemoteName || ! $DECRYPTION_PKG) {
+                        $kfg->{fix_remote} = 1;
+                    }
+                }
+            }
+        } else {
+            my $v = $remote{$nm};
+            if (!$kfg->{$nm}) {
+                if (!$v) {
+                    unless ($nm eq $disableRemoteName) {
+                        println "$nm: unknown";
+                        next;
+                    }
+                    next if ($DECRYPTION_PKG);
+                    print "\nWould you like to enable Remote Internet"
+                        . " access to NCBI(recommented)? [Y/n] ";
+                    my $answer = GetYNAnswer('y', 'n');
+                    if ($answer eq 'y') {
+                        $v = 'no';
+                    } else {
+                        println "You will be able to work "
+                            . "just with SRR files found locally";
+                        $v = 'yes';
+                    }
+                }
+                UpdateConfigNode($nm, $v);
+                $updated = 1;
+            } elsif ($v && ($kfg->{$nm} ne $v)) {
+                UpdateConfigNode($nm, $v);
+                $updated = 1;
+            }
+        }
+    }
+
+    if ($read && $kfg->{repository}) {
+        my $nm = 'repository/user';
+        $kfg->{$nm} = GetKfgNode($nm, 'dont print');
+    }
+
+    foreach my $nm(keys %user) {
+        if ($read) {
+            if ($kfg->{'repository/user'}) {
+                my $mode;
+                $mode = 'file' if ($nm eq $userRootName);
+                $kfg->{$nm} = GetKfgNode($nm, $mode);
+                $kfg->{fix_user} = 1 unless ($kfg->{$nm});
+            }
+        } elsif (!$kfg->{$nm}) {
+            my $v = $user{$nm};
+            unless ($v) {
+                next if ($DECRYPTION_PKG);
+                if ($nm eq $userRootName) {
+                    my $dflt = '';
+                    if ($kfg->{dflt_user_root}) {
+                        $dflt = $kfg->{dflt_user_root};
+                    }
+                    println;
+                    print
+               "The SRA Toolkit has the ability to download and cache data.\n" .
+               "Please indicate where data should be stored.\n" .
+               "You should choose a volume with enough free space.\n" .
+               "Path to your Repository ";
+                    print "[ $dflt ]: " if ($dflt);
+                    my $in = <STDIN>;
+                    chomp $in;
+                    $in = $dflt unless ($in);
+                    if (-e $in) {
+                        unless (-d $in) {
+                            println "$in: bad path";
+                        }
+                    } else {
+                        println "Directory '$in' does not exist.";
+                        print "Would you like to create it? [Y/n] ";
+                        my $answer = GetYNAnswer('y', 'y');
+                        if ($answer eq 'y') {
+                            print "'$in': creating... ";
+                            if (mkpath($in)) {
+                                println "ok";
+                            } else {
+                                println "error";
+                            }
+                        }
+                    }
+                    $v = Posixify($in);
+                } elsif ($nm eq $enableCacheName) {
+                    print
+            "\nWould you like to enable caching of downloaded data? [Y/n] ";
+                    my $answer = GetYNAnswer('y', 'y');
+                    $v = $answer eq 'n' ? 'false' : 'true';
+                } else {
+                    println "$nm: unknown";
+                    next;
+                }
+            }
+            UpdateConfigNode($nm, $v);
+            $updated = 1;
+        }
+    }
+
+    println;
+
+    if ($read) {
+        if (!$kfg->{repository} || $kfg->{fix_remote} || $kfg->{fix_user}) {
+            println "Configuration is incorrect";
+        } else {
+            println "Configuration is correct";
+        }
+    }
+
+    return $updated;
+}
+
+sub FixKfg {
+    my ($kfg) = @_;
+
+    if (!$kfg->{repository} || $kfg->{fix_remote} || $kfg->{fix_user}) {
+        print "Your configuration is incomplete. " .
+            "Would you like to fix it? [Y/n] ";
+        my $answer = GetYNAnswer('y', 'n');
+        if ($answer eq 'y') {
+            return Kfg($kfg, 'fix', 'Fixing configuration');
+        } else {
+            println
+                "Warning: Some tools could fail without proper configuration.";
+        }
+    }
+
+    return 0;
+}
+
+sub GetYNAnswer {
+    my ($dflt, $no) = @_;
+    my $in = <STDIN>;
+    chomp $in;
+    if ($in) {
+        if ($in eq 'Y' || $in eq 'y' ||
+            $in eq 'YES' || $in eq 'yes' || $in eq 'Yes')
+        {
+            return 'y';
+        } elsif ($in eq 'N' || $in eq 'n'
+            || $in eq 'NO' || $in eq 'no' || $in eq 'No')
+        {
+            return 'n';
+        } else {
+            return $no;
+        }
+    } else {
+        return $dflt;
+    }
+}
+
+sub Fatal {
     my ($msg) = @_;
+
     print basename($0);
-    println ": FATAL: $msg";
+    println ": Fatal: $msg";
+
     exit 1;
 }
 
-sub WARN {
+sub Warn {
     my ($msg) = @_;
+
     print basename($0);
     println ": WARNING: $msg";
 }
 
-################################################################################
 # EOF #
 ################################################################################
diff --git a/doc/help/html/bam-load-help.html b/doc/help/html/bam-load-help.html
new file mode 100644
index 0000000..69bc6fa
--- /dev/null
+++ b/doc/help/html/bam-load-help.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+       "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title>bam-load help</title>
+</head>
+<body>
+
+<pre>
+Usage:
+bam-load [Options] BAMFILE
+    Load a bam file.
+
+Options:
+  -o, --output=TABLEPATH    REQUIRED: path to a table where the table will be put
+  -V, --version             this will cause the program to emit the internal
+                            version number before any other action
+  -v, --verbose             extra information will be output during
+                            processing second occurrence on the command line
+                            means even more
+  -h, -?, --help            print this message
+  -l, --log-level=LEVEL     the next token will affect the logging level of
+                            the program  accepted tokens are the numbers
+                            0-15, fatal, sys, int, err, warn, info
+                          , debug1...debug10
+</pre>
+
+</body>
+</html>
diff --git a/doc/help/html/bam-loader-help.html b/doc/help/html/bam-loader-help.html
deleted file mode 100644
index c55de32..0000000
--- a/doc/help/html/bam-loader-help.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-       "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<title>bam-loader help</title>
-</head>
-<body>
-
-<pre>
-Usage:
- bam-loader 0.0.1
-
-bam-loader [Options] BAMFILE
-    Load a bam file.
-
-Options:
-  -o, --output=TABLEPATH    REQUIRED: path to a table where the table will be put
-  -V, --version             this will cause the program to emit the internal
-                            version number before any other action
-  -v, --verbose             extra information will be output during
-                            processing second occurrence on the command line
-                            means even more
-  -h, -?, --help            print this message
-  -l, --log-level=LEVEL     the next token will affect the logging level of
-                            the program  accepted tokens are the numbers
-                            0-15, fatal, sys, int, err, warn, info
-                          , debug1...debug10
-</pre>
-
-</body>
-</html>
diff --git a/doc/help/html/crc32sum-help.html b/doc/help/html/crc32sum-help.html
index 8092dbb..d12b31f 100644
--- a/doc/help/html/crc32sum-help.html
+++ b/doc/help/html/crc32sum-help.html
@@ -7,7 +7,7 @@
 <body>
 
 <pre>
-: usage: crc32sum [<option>] file [file...]
+: usage: crc32sum [<option>] file [file...]
 
     options:
       -c          check CRC32 against given list
diff --git a/doc/help/txt/fastq-dump-help.txt b/doc/help/txt/fastq-dump-help.txt
old mode 100755
new mode 100644
diff --git a/interfaces/align/align-access.h b/interfaces/align/align-access.h
index 106e56c..75f92ea 100644
--- a/interfaces/align/align-access.h
+++ b/interfaces/align/align-access.h
@@ -39,7 +39,12 @@
 extern "C" {
 #endif
 
-struct KPath;
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct VPath;
+
 
 /*--------------------------------------------------------------------------
  * constants
@@ -91,9 +96,9 @@ typedef struct AlignAccessDB AlignAccessDB;
  * NB - on Windows, these paths should be converted POSIX-style
  */
 ALIGN_EXTERN rc_t CC AlignAccessMgrMakeBAMDB ( const AlignAccessMgr *self,
-    const AlignAccessDB **db, struct KPath const *bam );
+    const AlignAccessDB **db, struct VPath const *bam );
 ALIGN_EXTERN rc_t CC AlignAccessMgrMakeIndexBAMDB ( const AlignAccessMgr *self,
-    const AlignAccessDB **db, struct KPath const *bam, struct KPath const *bam_index );
+    const AlignAccessDB **db, struct VPath const *bam, struct VPath const *bam_index );
 
 /* AddRef
  * Release
diff --git a/interfaces/align/align.vschema b/interfaces/align/align.vschema
index 06edb91..d7c35c9 100644
--- a/interfaces/align/align.vschema
+++ b/interfaces/align/align.vschema
@@ -54,7 +54,7 @@ typedef U32 NCBI:align:ploidy;
 
 
 /* cigar
- *  construct "cigar" alignment string
+ *  construct "cigar" alignment string or length arrays
  *
  * "ctype" [ CONST ] - select variant of format
  *   0 => both matches and mismatches represented as M
@@ -68,12 +68,23 @@ typedef U32 NCBI:align:ploidy;
  *
  *  "ref_offset" [ DATA ] - a packed sequence of signed offsets to aligned position
  *   one entry for every true in "has_ref_offset"
+ *
+ *  "read_len" [ DATA ] - v2: elem_count defines PLOIDY and values are an actual length of reads in spot
  */
 extern function 
-ascii NCBI:align:cigar #1 < U8 ctype > ( bool has_mismatch, bool has_ref_offset, I32 ref_offset )
-    = ALIGN:cigar;
-extern function U32 NCBI:align:edit_distance #1 ( bool has_mismatch, bool has_ref_offset, I32 ref_offset );
+ascii NCBI:align:cigar #1 < U8 ctype > ( bool has_mismatch, bool has_ref_offset,
+    I32 ref_offset, * INSDC:coord:len ref_len ) = ALIGN:cigar;
+
+extern function < type T >
+T NCBI:align:cigar #2 < U8 ctype > ( bool has_mismatch, bool has_ref_offset,
+      I32 ref_offset, INSDC:coord:len read_len, * INSDC:coord:len ref_len ) = ALIGN:cigar_2;
 
+extern function U32 NCBI:align:edit_distance #1
+    ( bool has_mismatch, bool has_ref_offset, I32 ref_offset );
+    
+extern function U32 NCBI:align:edit_distance #2
+    ( bool has_mismatch, bool has_ref_offset, I32 ref_offset, INSDC:coord:len ref_len, *INSDC:coord:len read_len)
+  = NCBI:align:edit_distance_2;
 
 /* project_from_sequence
  *  projects column from SEQUENCE
@@ -103,7 +114,7 @@ T NCBI:align:project_from_sequence #1 < ascii col> ( I64 seq_spot_id, INSDC:coor
  */
 extern function
 INSDC:4na:bin NCBI:align:align_restore_read #1 ( INSDC:4na:bin ref_read, bool has_mismatch,
-        INSDC:4na:bin mismatch, bool has_ref_offset, I32 ref_offset)
+        INSDC:4na:bin mismatch, bool has_ref_offset, I32 ref_offset * INSDC:coord:len read_len)
     = ALIGN:align_restore_read;
 
 
@@ -145,20 +156,6 @@ INSDC:4na:bin NCBI:align:ref_sub_select #1 ( I64 id, INSDC:coord:zero start,
     = ALIGN:ref_sub_select;
 
 
-/* ref_sub_select_preserve_qual
- *  projects from reference
- *
- *  "id" [ DATA ]
- *
- *  "start" [ DATA ] and "len" [ DATA ]
- *
- *  "ref_ploidy" [ DATA, OPTIONAL ]
- */
-extern function
-bool NCBI:align:ref_sub_select_preserve_qual #1 ( I64 id, INSDC:coord:zero start,
-        INSDC:coord:len len * U32 ref_ploidy);
-
-
 /* ref_restore_read
  *  restores read from central storage
  *
@@ -303,20 +300,36 @@ extern function U32 NCBI:align:get_sam_flags #2 (
 extern function INSDC:coord:len NCBI:align:get_left_soft_clip #1
     ( bool has_ref_offset, I32 ref_offset );
 
+extern function INSDC:coord:len NCBI:align:get_left_soft_clip #2
+    ( bool has_ref_offset, I32 ref_offset, INSDC:coord:len read_len )
+   = NCBI:align:get_left_soft_clip_2;
+
 /* get_right_soft_clip
  *  compute the length of the soft clip on the right edge of the alignment
  */
 extern function INSDC:coord:len NCBI:align:get_right_soft_clip #1
     ( bool has_mismatch, INSDC:coord:len left_clip * bool has_ref_offset );
+    
 extern function INSDC:coord:len NCBI:align:get_right_soft_clip #2
     ( bool has_mismatch, INSDC:coord:len left_clip, bool has_ref_offset, I32 ref_offset )
    = NCBI:align:get_right_soft_clip_2;
 
+extern function INSDC:coord:len NCBI:align:get_right_soft_clip #3
+    ( bool has_ref_offset, I32 ref_offset, INSDC:coord:len ref_len )
+   = NCBI:align:get_right_soft_clip_3;
+
+extern function INSDC:coord:len NCBI:align:get_right_soft_clip #4
+    ( bool has_ref_offset, I32 ref_offset, INSDC:coord:len read_len, INSDC:coord:len ref_len )
+   = NCBI:align:get_right_soft_clip_4;
+
 /* get_clipped_cigar
  *  compute the CIGAR string with the soft clipping removed
  */
 extern function ascii NCBI:align:get_clipped_cigar #1 ( ascii cigar );
 
+extern function < type T > 
+T NCBI:align:get_clipped_cigar #2 ( ascii cigar, INSDC:coord:len cigar_len ) = NCBI:align:get_clipped_cigar_2;
+
 /* get_clipped_ref_offset
  *  compute the reference offsets with the soft clipping removed
  */
@@ -330,11 +343,15 @@ extern function I32 NCBI:align:get_clipped_ref_offset #1
 extern function < type T > T NCBI:align:clip #1
     ( T object, INSDC:coord:len left_clip, INSDC:coord:len right_clip);
 
+extern function < type T > T NCBI:align:clip #2
+    ( T object, INSDC:coord:len read_len, INSDC:coord:len left_clip, INSDC:coord:len right_clip)
+   = NCBI:align:clip_2;
+
 /* get_ref_len
  *  compute reference length from alignment information
  */
 extern function INSDC:coord:len NCBI:align:get_ref_len #1
-    ( bool has_ref_offset, I32 ref_offset, INSDC:coord:len right_clip );
+    ( bool has_ref_offset, I32 ref_offset, * INSDC:coord:len right_clip );
 
 /* get_mismatch_read
  *  generate the READ with matching bases replaced with '='
@@ -364,33 +381,6 @@ function bool NCBI:align:get_ref_delete #1
     ( bool has_mismatch, bool has_ref_offset, I32 ref_offset,
       INSDC:coord:len ref_len );
 
-/* get_ref_preserve_qual
- *  compute the positions where corresponding qualities should be preserved
- *  when converting to an analysis database.  In reference coordinate space.
- *  This is imported by generate_preserve_qual.
- * Preserve where:
- *  one position to each side of a mismatch
- *  two positions to each side of an indel
- */
-function bool NCBI:align:get_ref_preserve_qual #1
-    ( bool has_mismatch, bool has_ref_offset, I32 ref_offset,
-      INSDC:coord:len ref_len );
-
-/* get_seq_preserve_qual
- *  the positions where corresponding qualities should be preserved
- *  when converting to an analysis database.  In sequence coordinate space.
- */
-function bool NCBI:align:get_seq_preserve_qual #1
-    ( bool ref_preserve_qual, bool has_ref_offset, I32 ref_offset );
-
-/* generate_preserve_qual
- *  the positions where corresponding qualities should be preserved
- *  when converting to an analysis database.
- *  This is pulled from get_ref_preserve_qual, piled up, and or'ed together.
- */
-extern function bool NCBI:align:generate_preserve_qual #1
-    ( utf8 ref_name, INSDC:coord:len seq_len, U32 max_seq_len );
-    
 extern function INSDC:quality:phred NCBI:align:compress_quality #1
     ( INSDC:quality:phred quality, bool preserved );
 
@@ -398,6 +388,41 @@ extern function INSDC:quality:phred NCBI:align:decompress_quality #1
     < INSDC:quality:phred restored_qual_value >
     ( INSDC:quality:phred cmp_quality, bool preserved );
 
+/* make_cmp_read_start
+ *
+ */
+extern function INSDC:coord:zero NCBI:align:make_read_start #1
+    (INSDC:coord:len read_len);
+
+/* make_cmp_read_desc
+ *  determines whether an element of "operand" is aligned
+ *  by looking at the corresponding element of "align_id"
+ *
+ *  zeros out unaligned elements of operand, unless "invert" is true,
+ *  in which case it zeros out aligned elements.
+ *
+ *  "T" [ TYPE ] - type of operand
+ *
+ *  "invert" [ CONST ] - if true, invert the logic of which elements
+ *  to zero out.
+ *
+ *  "operand" [ DATA ] - uncompressed data
+ *
+ *  "align_id" [ DATA ] - indication of alignment
+ */
+extern function < type T >
+T NCBI:align:make_cmp_read_desc #1 <bool invert>(T operand, I64 align_id);
+
+/* seq_construct_read
+ *  assembles read from aligned and unaligned parts
+ */
+extern function < type T >
+T NCBI:align:seq_construct_read #1 (
+    T aligned, INSDC:coord:len aligned_read_len,
+    T unaligned, INSDC:coord:len unaligned_read_len );
+    
+extern function I64 NCBI:align:get_mate_align_id #1 ( I64 spot_id );
+
 /*--------------------------------------------------------------------------
  * tables
  */
@@ -408,11 +433,9 @@ extern function INSDC:quality:phred NCBI:align:decompress_quality #1
  */
 table NCBI:align:tbl:ref_block_cmn #1.0.0
 {
-    // TBD:
-    // Name of Reference table; should be a constant
-    // extern column zip_encoding < ascii > REF_TABLE;
     readonly column ascii REF_TABLE
-        = < ascii > echo < 'REFERENCE' > ();
+        = < ascii > meta:read < "CONFIG/REF_TABLE" > ()
+        | < ascii > echo < 'REFERENCE' > ();
 
     // REF_ID is rowid in Reference Table REF_TABLE
     extern column I64 REF_ID
@@ -421,17 +444,20 @@ table NCBI:align:tbl:ref_block_cmn #1.0.0
     // this is a redefinition of REF_START
     // REF_START is the offset within REFERENCE.READ
     extern column INSDC:coord:zero REF_START
-        = out_local_ref_start;
+        = out_ref_start;
 
     // global REF_START
     extern column U64 GLOBAL_REF_START
         = out_global_ref_start;
 
     // REF_LEN the length of a read projection on reference
-    // extern column < INSDC:coord:len > izip_encoding REF_LEN;
+    INSDC:coord:len out_ref_len_internal
+        = NCBI:align:get_ref_len ( out_has_ref_offset, out_ref_offset );
+
     INSDC:coord:len out_ref_len
         = .REF_LEN
-        | NCBI:align:get_ref_len ( out_has_ref_offset, out_ref_offset, out_right_clip );
+        | NCBI:align:get_ref_len ( out_has_ref_offset, out_ref_offset, out_right_clip )
+        | out_ref_len_internal;
         
     physical column < INSDC:coord:len > izip_encoding .REF_LEN = REF_LEN;
     extern column INSDC:coord:len REF_LEN = out_ref_len;
@@ -448,7 +474,7 @@ table NCBI:align:tbl:ref_block_cmn #1.0.0
      *  per PLOIDY
      */
     readonly column INSDC:coord:zero REF_POS
-        = NCBI:align:ref_pos ( out_ref_id, out_local_ref_start );
+        = NCBI:align:ref_pos ( out_ref_id, out_ref_start );
 
     /* REF_NAME
      *  the name of the reference
@@ -459,7 +485,8 @@ table NCBI:align:tbl:ref_block_cmn #1.0.0
     /* REF_SEQ_ID
      */
     readonly column ascii REF_SEQ_ID
-        = NCBI:align:ref_seq_id ( out_ref_id );
+        = NCBI:align:ref_seq_id ( out_ref_id )
+        | < ascii > echo < '' > ();
 };
 
 
@@ -473,7 +500,7 @@ table NCBI:align:tbl:global_ref_block #1.0.0
     physical < U64 > izip_encoding .GLOBAL_REF_START = GLOBAL_REF_START;
 
     I64 out_ref_id = NCBI:align:local_ref_id ( .GLOBAL_REF_START );
-    INSDC:coord:zero out_local_ref_start = NCBI:align:local_ref_start ( .GLOBAL_REF_START );
+    INSDC:coord:zero out_ref_start = NCBI:align:local_ref_start ( .GLOBAL_REF_START );
 };
 
 
@@ -486,7 +513,7 @@ table NCBI:align:tbl:local_ref_block #1.0.0
     I64 out_ref_id = .REF_ID;
     physical < I64 > izip_encoding .REF_ID = REF_ID;
 
-    INSDC:coord:zero out_local_ref_start = .REF_START;
+    INSDC:coord:zero out_ref_start = .REF_START;
     physical < INSDC:coord:zero > izip_encoding .REF_START = REF_START;
 };
 
@@ -494,7 +521,7 @@ table NCBI:align:tbl:local_ref_block #1.0.0
 /* align_cmn
  *  common interface and implementation for alignment object
  */
-table NCBI:align:tbl:align_cmn #1.1.0
+table NCBI:align:tbl:align_cmn #2
     = NCBI:tbl:base_space_common #1.0.3
     , NCBI:SRA:tbl:stats #1.2.0
     , NCBI:align:tbl:ref_block_cmn #1.0.0
@@ -516,19 +543,28 @@ table NCBI:align:tbl:align_cmn #1.1.0
 /* Soft-Clipped data block */
 
     readonly column INSDC:coord:len LEFT_SOFT_CLIP
-        = NCBI:align:get_left_soft_clip ( HAS_REF_OFFSET, REF_OFFSET );
+        = NCBI:align:get_left_soft_clip ( HAS_REF_OFFSET, REF_OFFSET, out_read_len );
         
-    INSDC:coord:len out_right_clip = NCBI:align:get_right_soft_clip #2( out_has_mismatch, LEFT_SOFT_CLIP, out_has_ref_offset,out_ref_offset );
+    INSDC:coord:len out_right_clip
+        = NCBI:align:get_right_soft_clip #4 ( out_has_ref_offset, out_ref_offset, out_read_len, out_ref_len )
+        | NCBI:align:get_right_soft_clip #3 ( out_has_ref_offset, out_ref_offset, out_ref_len )
+        | NCBI:align:get_right_soft_clip #2 ( out_has_mismatch, LEFT_SOFT_CLIP, out_has_ref_offset, out_ref_offset );
     readonly column INSDC:coord:len RIGHT_SOFT_CLIP = out_right_clip;
         
     readonly column ascii CLIPPED_CIGAR_LONG
-        = NCBI:align:get_clipped_cigar ( CIGAR_LONG );
+        = < ascii > NCBI:align:get_clipped_cigar ( CIGAR_LONG, CIGAR_LONG_LEN );
+
+    readonly column INSDC:coord:len CLIPPED_CIGAR_LONG_LEN
+        = < INSDC:coord:len > NCBI:align:get_clipped_cigar ( CIGAR_LONG, CIGAR_LONG_LEN );
 
     readonly column ascii CLIPPED_CIGAR_SHORT
-        = NCBI:align:get_clipped_cigar ( CIGAR_SHORT );
+        = < ascii > NCBI:align:get_clipped_cigar ( CIGAR_SHORT, CIGAR_SHORT_LEN );
         
+    readonly column INSDC:coord:len CLIPPED_CIGAR_SHORT_LEN
+        = < INSDC:coord:len > NCBI:align:get_clipped_cigar ( CIGAR_SHORT, CIGAR_SHORT_LEN );
+
     bool out_clipped_has_mismatch
-        = < bool > NCBI:align:clip (out_has_mismatch, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
+        = < bool > NCBI:align:clip (out_has_mismatch, out_read_len, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
         
     readonly column ascii CLIPPED_HAS_MISMATCH
         = < U8 , ascii > map < [ 0 , 1 ] , '01'  > ( out_clipped_has_mismatch );
@@ -536,33 +572,26 @@ table NCBI:align:tbl:align_cmn #1.1.0
     readonly column bool CLIPPED_HAS_MISMATCH = out_clipped_has_mismatch;
 
     bool out_clipped_has_ref_offset
-        = < bool > NCBI:align:clip (HAS_REF_OFFSET, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
+        = < bool > NCBI:align:clip (HAS_REF_OFFSET, out_read_len, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
 
     readonly column ascii CLIPPED_HAS_REF_OFFSET
         = < U8 , ascii > map < [ 0 , 1 ] , '01'  > ( out_clipped_has_ref_offset );
 
     readonly column bool CLIPPED_HAS_REF_OFFSET = out_clipped_has_ref_offset;
 
+    // TBD cannot be computed right unless HAS_MISMATCH and! READ_LEN is used
     readonly column INSDC:dna:text CLIPPED_MISMATCH
-        = < INSDC:dna:text > NCBI:align:clip ( out_mismatch_dna_text, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
+        = < INSDC:dna:text > NCBI:align:clip #1 ( out_mismatch_dna_text, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
 
     readonly column I32 CLIPPED_REF_OFFSET
         = NCBI:align:get_clipped_ref_offset ( HAS_REF_OFFSET, REF_OFFSET );
         
     readonly column INSDC:quality:phred CLIPPED_QUALITY
-        = < INSDC:quality:phred > NCBI:align:clip (out_qual_phred, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
+        = < INSDC:quality:phred > NCBI:align:clip (out_qual_phred, out_read_len, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
         
     readonly column INSDC:dna:text CLIPPED_READ
-        = < INSDC:dna:text > NCBI:align:clip (READ, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
+        = < INSDC:dna:text > NCBI:align:clip (READ, out_read_len, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
 
-    bool out_clipped_preserve_qual
-        = < bool > NCBI:align:clip (out_seq_preserve_qual, LEFT_SOFT_CLIP, RIGHT_SOFT_CLIP);
-        
-    readonly column ascii CLIPPED_PRESERVE_QUAL
-        = < U8 , ascii > map < [ 0 , 1 ] , '01'  > ( out_clipped_preserve_qual );
-
-    readonly column bool CLIPPED_PRESERVE_QUAL = out_clipped_preserve_qual;
-    
 /* Sequence Block */
 
     extern column < NCBI:align:ploidy > izip_encoding PLOIDY;
@@ -595,18 +624,22 @@ table NCBI:align:tbl:align_cmn #1.1.0
     INSDC:quality:phred out_raw_qual = < INSDC:quality:phred >
         NCBI:align:project_from_sequence < '( INSDC:quality:phred ) QUALITY'> ( .SEQ_SPOT_ID, .SEQ_READ_ID );
     INSDC:quality:phred out_qual_phred
-        = NCBI:align:decompress_quality < 40 > ( .CMP_QUALITY, PRESERVE_QUAL )
-        | NCBI:align:raw_restore_qual ( out_raw_qual, .REF_ORIENTATION );
-    readonly column INSDC:quality:text:phred_33 SAM_QUALITY = QUALITY; // simple alias
+        = NCBI:align:raw_restore_qual ( out_raw_qual, .REF_ORIENTATION )
+        | < INSDC:quality:phred > echo < 30 > ( out_4na_bin );
+    readonly column INSDC:quality:text:phred_33 SAM_QUALITY = QUALITY ;
 
     // project read group and name
     ascii out_spot_group = < ascii > simple_sub_select < 'SEQUENCE','SPOT_GROUP'> (.SEQ_SPOT_ID);
 
+
+    INSDC:SRA:spotid_t tmp_seq_spot_id
+        = cast ( .SEQ_SPOT_ID )
+        ;
     physical <ascii> zip_encoding .SEQ_NAME = SEQ_NAME;
     extern column ascii SEQ_NAME
         = .SEQ_NAME
         | < ascii > simple_sub_select < 'SEQUENCE','NAME'> (.SEQ_SPOT_ID)
-        | sprintf < "%u" > ( .SEQ_SPOT_ID );
+        | sprintf < "%u" > ( tmp_seq_spot_id );
 
     // compute sam flags
     /* blows up parser: starts at schema-tbl.c:2138
@@ -646,12 +679,14 @@ table NCBI:align:tbl:align_cmn #1.1.0
     INSDC:SRA:read_filter out_rd_filter
         = .RD_FILTER
         | < INSDC:SRA:read_filter > NCBI:align:project_from_sequence < 'READ_FILTER' > ( .SEQ_SPOT_ID, .SEQ_READ_ID ) 
-        | < INSDC:SRA:read_filter > echo < SRA_READ_FILTER_PASS > ( out_ref_len );
+        | < INSDC:SRA:read_filter > echo < SRA_READ_FILTER_PASS > ( out_read_len );
 
     INSDC:SRA:platform_id out_platform
         = .PLATFORM
+        | < INSDC:SRA:platform_id > simple_sub_select < 'SEQUENCE','PLATFORM'> (.SEQ_SPOT_ID)
         | < INSDC:SRA:platform_id > echo < SRA_PLATFORM_UNDEFINED > ();
 
+    U8 out_alignment_count = <U8> NCBI:align:project_from_sequence < 'ALIGNMENT_COUNT' > ( .SEQ_SPOT_ID, .SEQ_READ_ID );
 
     /* out_read_type
      *  set to SRA_READ_TYPE_FORWARD + SRA_READ_TYPE_BIOLOGICAL
@@ -678,13 +713,15 @@ table NCBI:align:tbl:align_cmn #1.1.0
 
     // MAPQ - single value quality of the mapping; the scale is submitter specific
     extern column < I32 > izip_encoding MAPQ;
-    
+
     extern column INSDC:coord:zero MATE_REF_POS = out_mate_ref_pos;
     extern column INSDC:coord:len MATE_REF_LEN = out_mate_ref_len;
     extern column I64 MATE_REF_ID = out_mate_ref_id;
     extern column I32 TEMPLATE_LEN = out_template_len;
     extern column bool MATE_REF_ORIENTATION = out_mate_ref_orientation;
     readonly column ascii MATE_REF_NAME = NCBI:align:ref_name ( out_mate_ref_id );
+    readonly column ascii MATE_REF_SEQ_ID = NCBI:align:ref_seq_id( out_mate_ref_id );
+    readonly column U8 ALIGNMENT_COUNT  = out_alignment_count;
 
 
 /********************************
@@ -715,21 +752,14 @@ table NCBI:align:tbl:align_cmn #1.1.0
     readonly column INSDC:dna:text REF_READ
         = < INSDC:4na:bin, INSDC:dna:text > map < INSDC:4na:map:BINSET, INSDC:4na:map:CHARSET > ( REF_READ );
 
-    // TDB: fix this function
     readonly column INSDC:4na:bin REF_READ
-        = NCBI:align:ref_sub_select (out_ref_id, out_local_ref_start, out_ref_len, .REF_PLOIDY)
-        | NCBI:align:ref_sub_select (out_ref_id, out_local_ref_start, out_ref_len );
-
-    bool in_preserve_qual_ref
-        = NCBI:align:ref_sub_select_preserve_qual (out_ref_id, out_local_ref_start, out_ref_len, .REF_PLOIDY)
-        | NCBI:align:ref_sub_select_preserve_qual (out_ref_id, out_local_ref_start, out_ref_len );
-
-    readonly column ascii PRESERVE_QUAL_REF = < U8 , ascii > map < [ 0 , 1 ] , '01'  > ( in_preserve_qual_ref );
-    readonly column bool  PRESERVE_QUAL_REF = in_preserve_qual_ref;
-
-    INSDC:quality:phred out_cmp_quality
-        = NCBI:align:compress_quality ( CLIPPED_QUALITY, CLIPPED_PRESERVE_QUAL );
+        = NCBI:align:ref_sub_select (out_ref_id, out_ref_start, out_ref_len, .REF_PLOIDY)
+        | NCBI:align:ref_sub_select (out_ref_id, out_ref_start, out_ref_len );
         
+    INSDC:4na:bin ref_read_internal
+        = NCBI:align:ref_sub_select (out_ref_id, out_ref_start, out_ref_len_internal, .REF_PLOIDY)
+        | NCBI:align:ref_sub_select (out_ref_id, out_ref_start, out_ref_len_internal);
+
     // text forms of reads
     INSDC:dna:text out_dna_text
         = < INSDC:4na:bin, INSDC:dna:text > map < INSDC:4na:map:BINSET, INSDC:4na:map:CHARSET > ( out_4na_bin );
@@ -739,10 +769,23 @@ table NCBI:align:tbl:align_cmn #1.1.0
         = out_raw_read;
 
     // CIGARs
-    // TBD: when PLOIDY more than 1
-    readonly column ascii CIGAR_LONG  = NCBI:align:cigar < 1 > (out_has_mismatch, out_has_ref_offset, out_ref_offset);
-    readonly column ascii CIGAR_SHORT = NCBI:align:cigar < 0 > (out_has_mismatch, out_has_ref_offset, out_ref_offset);
-    readonly column U32   EDIT_DISTANCE = NCBI:align:edit_distance (out_has_mismatch, out_has_ref_offset, out_ref_offset); 
+    readonly column ascii CIGAR_LONG
+        = < ascii > NCBI:align:cigar #2 < 1 > (out_has_mismatch, out_has_ref_offset, out_ref_offset, out_read_len, out_ref_len)
+        | < ascii > NCBI:align:cigar #2 < 1 > (out_has_mismatch, out_has_ref_offset, out_ref_offset, out_read_len);
+    readonly column INSDC:coord:len CIGAR_LONG_LEN
+        = < INSDC:coord:len > NCBI:align:cigar #2 < 1 > (out_has_mismatch, out_has_ref_offset, out_ref_offset, out_read_len, out_ref_len)
+        | < INSDC:coord:len > NCBI:align:cigar #2 < 1 > (out_has_mismatch, out_has_ref_offset, out_ref_offset, out_read_len);
+    readonly column ascii CIGAR_SHORT
+        = < ascii > NCBI:align:cigar #2 < 0 > (out_has_mismatch, out_has_ref_offset, out_ref_offset, out_read_len, out_ref_len)
+        | < ascii > NCBI:align:cigar #2 < 0 > (out_has_mismatch, out_has_ref_offset, out_ref_offset, out_read_len);
+    readonly column INSDC:coord:len CIGAR_SHORT_LEN
+        = < INSDC:coord:len > NCBI:align:cigar #2 < 0 > (out_has_mismatch, out_has_ref_offset, out_ref_offset, out_read_len, out_ref_len)
+        | < INSDC:coord:len > NCBI:align:cigar #2 < 0 > (out_has_mismatch, out_has_ref_offset, out_ref_offset, out_read_len);
+
+    readonly column U32 EDIT_DISTANCE
+        = NCBI:align:edit_distance #2 (out_has_mismatch, out_has_ref_offset, out_ref_offset, out_ref_len, out_read_len)
+        | NCBI:align:edit_distance #2 (out_has_mismatch, out_has_ref_offset, out_ref_offset, out_ref_len)
+        | NCBI:align:edit_distance #1 (out_has_mismatch, out_has_ref_offset, out_ref_offset);
 
     readonly column ascii HAS_MISMATCH = < U8 , ascii > map < [ 0 , 1 ] , '01'  > ( out_has_mismatch );
     
@@ -750,17 +793,6 @@ table NCBI:align:tbl:align_cmn #1.1.0
     readonly column ascii SEQ_SPOT_GROUP = out_spot_group;
 
 
-/* These columns for calculating the positions where quality is preserved when
- * converting to an analysis database.
- */ 
-    bool out_ref_preserve_qual = NCBI:align:get_ref_preserve_qual ( out_has_mismatch, out_has_ref_offset, out_ref_offset, out_ref_len );
-    readonly column ascii REF_PRESERVE_QUAL = < U8 , ascii > map < [ 0 , 1 ] , '01'  > ( out_ref_preserve_qual );
-    readonly column bool REF_PRESERVE_QUAL = out_ref_preserve_qual;
-    
-    bool out_seq_preserve_qual = NCBI:align:get_seq_preserve_qual ( in_preserve_qual_ref, out_has_ref_offset, out_ref_offset );
-    readonly column ascii PRESERVE_QUAL = < U8 , ascii > map < [ 0 , 1 ] , '01'  > ( out_seq_preserve_qual );
-    readonly column bool PRESERVE_QUAL = out_seq_preserve_qual;
-
 /* These columns are purely informational. */    
     bool out_ref_mismatch = NCBI:align:get_ref_mismatch ( out_has_mismatch, out_has_ref_offset, out_ref_offset, out_ref_len );
     readonly column ascii REF_MISMATCH = < U8 , ascii > map < [ 0 , 1 ] , '01'  > ( out_ref_mismatch );
@@ -782,42 +814,61 @@ table NCBI:align:tbl:align_cmn #1.1.0
  *  alignment transcript is calculated
  */
 table NCBI:align:tbl:align_full #1.0.0
-    = NCBI:align:tbl:align_cmn #1.1.0
+    = NCBI:align:tbl:align_cmn #2
 {
     bool out_is_secondary = <bool> echo < true > ();
     // restore reads to its raw form (orientation is restored)
+
     INSDC:4na:bin out_raw_read
-        = < INSDC:4na:bin > simple_sub_select  < 'PRIMARY_ALIGNMENT', '( INSDC:4na:bin ) RAW_READ' > (PRIMARY_ALIGNMENT_ID)
+        = < INSDC:4na:bin > simple_sub_select  < 'PRIMARY_ALIGNMENT', '( INSDC:4na:bin ) RAW_READ' > (.PRIMARY_ALIGNMENT_ID)
         | < INSDC:4na:bin > NCBI:align:project_from_sequence < '( INSDC:4na:bin ) READ'> ( .SEQ_SPOT_ID, .SEQ_READ_ID );
         
-    INSDC:4na:bin out_4na_bin = NCBI:align:raw_restore_read ( out_raw_read, .REF_ORIENTATION );
+    INSDC:4na:bin out_4na_bin 
+	    = NCBI:align:align_restore_read ( ref_read_internal, out_has_mismatch, tmp_out_mismatch_4na_bin, out_has_ref_offset, out_ref_offset, .READ_LEN )
+	    | NCBI:align:align_restore_read ( ref_read_internal, out_has_mismatch, tmp_out_mismatch_4na_bin, out_has_ref_offset, out_ref_offset )
+    	    | NCBI:align:raw_restore_read ( out_raw_read, .REF_ORIENTATION );
 	
 
     // flags mismatches with the reference
     // produced by actual comparison of REF_READ and READ
+    // TMP_HAS_MISMATCH is a hack to speed up retrieval during coverage recalculation
+    column bool_encoding TMP_HAS_MISMATCH;
     bool out_has_mismatch
-        = NCBI:align:generate_has_mismatch ( REF_READ, READ, out_has_ref_offset, out_ref_offset );
+        = .TMP_HAS_MISMATCH 
+	| NCBI:align:generate_has_mismatch ( REF_READ, READ, out_has_ref_offset, out_ref_offset );
+    readonly column bool HAS_MISMATCH = out_has_mismatch;
 
     INSDC:4na:bin out_mismatch_4na_bin
         = NCBI:align:generate_mismatch ( REF_READ, READ, out_has_ref_offset, out_ref_offset );
-        
+
+    INSDC:4na:bin tmp_out_mismatch_4na_bin =  < INSDC:dna:text, INSDC:4na:bin > map < INSDC:4na:map:CHARSET, INSDC:4na:map:BINSET > ( .TMP_MISMATCH );
+
+    // temporary column for reference coverage calculation        
+    column < INSDC:dna:text> zip_encoding TMP_MISMATCH;
+
     INSDC:dna:text out_mismatch_dna_text
-        = < INSDC:4na:bin, INSDC:dna:text > map < INSDC:4na:map:BINSET, INSDC:4na:map:CHARSET > ( out_mismatch_4na_bin );
+        = .TMP_MISMATCH
+        | < INSDC:4na:bin, INSDC:dna:text > map < INSDC:4na:map:BINSET, INSDC:4na:map:CHARSET > ( out_mismatch_4na_bin );
     
     readonly column INSDC:dna:text MISMATCH = out_mismatch_dna_text;
     readonly column INSDC:4na:bin MISMATCH = out_mismatch_4na_bin;
 
     physical column < INSDC:coord:zero > izip_encoding .MATE_REF_POS = MATE_REF_POS;
-    INSDC:coord:zero out_mate_ref_pos = .MATE_REF_POS;
+    INSDC:coord:zero out_mate_ref_pos = .MATE_REF_POS
+                                      | < INSDC:coord:zero > simple_sub_select < '','REF_POS'> (MATE_ALIGN_ID);
     
     physical column < I64 > izip_encoding .MATE_REF_ID = MATE_REF_ID;
-    I64 out_mate_ref_id = .MATE_REF_ID;
+    I64 out_mate_ref_id = .MATE_REF_ID
+                        | < I64 > simple_sub_select < '','REF_ID'> (MATE_ALIGN_ID);
     
+    INSDC:coord:len out_mate_ref_len = < INSDC:coord:len > simple_sub_select < '','REF_LEN'> (MATE_ALIGN_ID);
     physical column < I32 > izip_encoding .TEMPLATE_LEN = TEMPLATE_LEN;
-    I32 out_template_len = .TEMPLATE_LEN;
+    I32 out_template_len = .TEMPLATE_LEN
+            | NCBI:align:template_len(REF_POS,out_mate_ref_pos,out_ref_len,out_mate_ref_len,REF_NAME,MATE_REF_NAME,SEQ_READ_ID);
 
     physical column < bool > izip_encoding .MATE_REF_ORIENTATION = MATE_REF_ORIENTATION;
-    bool out_mate_ref_orientation = .MATE_REF_ORIENTATION;
+    bool out_mate_ref_orientation = .MATE_REF_ORIENTATION
+                                  | < bool >  simple_sub_select < '','REF_ORIENTATION'> (MATE_ALIGN_ID);
 
     I64 out_mate_align_id = .MATE_ALIGN_ID;
     physical column <I64> izip_encoding .MATE_ALIGN_ID = MATE_ALIGN_ID;
@@ -838,8 +889,8 @@ table NCBI:align:tbl:align_full #1.0.0
  *  alignment transcript is stored
  *  original sequence is reconstructed
  */
-table NCBI:align:tbl:compressed_by_reference #1.0.0
-    = NCBI:align:tbl:align_cmn #1.1.0
+table NCBI:align:tbl:compressed_by_reference #1.1.0
+    = NCBI:align:tbl:align_cmn #2
 {
     bool out_is_secondary = <bool> echo < false > ();
 
@@ -850,7 +901,11 @@ table NCBI:align:tbl:compressed_by_reference #1.0.0
     bool out_has_mismatch = .HAS_MISMATCH;
 
     // has number of elements equal to number of true elements in HAS_MISMATCH
-    extern column INSDC:dna:text MISMATCH = out_mismatch_dna_text;
+    extern column INSDC:dna:text MISMATCH
+    {
+        read = out_mismatch_dna_text;
+        validate = < INSDC:dna:text > compare ( in_mismatch_dna_text, out_mismatch_dna_text );
+    }
 
     INSDC:dna:text in_mismatch_dna_text
         = < INSDC:dna:text, INSDC:dna:text > map < '.acmgrsvtwyhkdbn','NACMGRSVTWYHKDBN' > ( MISMATCH );
@@ -858,24 +913,26 @@ table NCBI:align:tbl:compressed_by_reference #1.0.0
     INSDC:4na:bin in_mismatch_4na_bin
         = < INSDC:dna:text, INSDC:4na:bin > map < INSDC:4na:map:CHARSET, INSDC:4na:map:BINSET > ( in_mismatch_dna_text );
 
-    physical column < INSDC:4na:bin > zip_encoding  .MISMATCH = in_mismatch_4na_bin;
+    extern column < ascii > zip_encoding ALIGN_GROUP;
 
+    physical column < INSDC:4na:bin > zip_encoding .MISMATCH = in_mismatch_4na_bin;
+    
     INSDC:4na:bin out_mismatch_4na_bin = .MISMATCH;
     INSDC:dna:text out_mismatch_dna_text
         = < INSDC:4na:bin, INSDC:dna:text > map < INSDC:4na:map:BINSET, INSDC:4na:map:CHARSET > ( out_mismatch_4na_bin );
     
-
     I64 out_mate_align_id
         = .MATE_ALIGN_ID
-        | NCBI:align:not_my_row (primary_align_pair);
+        | NCBI:align:get_mate_align_id (.SEQ_SPOT_ID);
         
     physical column <I64> izip_encoding .MATE_ALIGN_ID = MATE_ALIGN_ID;
     extern column I64 MATE_ALIGN_ID = out_mate_align_id;
 
     // restore reads from alignment columns and the reference
-    // TBD: update for PLOIDY by looping in REF_READ
-    INSDC:4na:bin out_4na_bin = NCBI:align:align_restore_read ( REF_READ,
-        out_has_mismatch, .MISMATCH, out_has_ref_offset, out_ref_offset );
+    // optional .READ_LEN size defines PLOIDY
+    INSDC:4na:bin out_4na_bin
+	    = NCBI:align:align_restore_read ( ref_read_internal, out_has_mismatch, .MISMATCH, out_has_ref_offset, out_ref_offset, .READ_LEN )
+	    | NCBI:align:align_restore_read ( ref_read_internal, out_has_mismatch, .MISMATCH, out_has_ref_offset, out_ref_offset );
 
     // restore reads to its raw form (orientation is restored)
     INSDC:4na:bin out_raw_read = NCBI:align:raw_restore_read (out_4na_bin,.REF_ORIENTATION);
@@ -888,6 +945,8 @@ table NCBI:align:tbl:compressed_by_reference #1.0.0
     readonly column U32   MATE_EDIT_DISTANCE   = < U32 >   simple_sub_select < '','EDIT_DISTANCE'> (MATE_ALIGN_ID);
     readonly column ascii MATE_CIGAR_LONG      = < ascii > simple_sub_select < '','CIGAR_LONG'> (MATE_ALIGN_ID);
     readonly column ascii MATE_CIGAR_SHORT     = < ascii > simple_sub_select < '','CIGAR_SHORT'> (MATE_ALIGN_ID);
+    readonly column INSDC:coord:len MATE_CIGAR_LONG_LEN  = < INSDC:coord:len > simple_sub_select < '','CIGAR_LONG_LEN'> (MATE_ALIGN_ID);
+    readonly column INSDC:coord:len MATE_CIGAR_SHORT_LEN = < INSDC:coord:len > simple_sub_select < '','CIGAR_SHORT_LEN'> (MATE_ALIGN_ID);
     
     I32 out_template_len = NCBI:align:template_len (REF_POS,out_mate_ref_pos,out_ref_len,out_mate_ref_len,REF_NAME,MATE_REF_NAME,SEQ_READ_ID);    
 };
@@ -896,40 +955,61 @@ table NCBI:align:tbl:compressed_by_reference #1.0.0
 /* align_sorted
  *  deflated alignment data sorted against reference
  */
-table NCBI:align:tbl:align_sorted #1.0.0
-    = NCBI:align:tbl:compressed_by_reference #1.0.0
+table NCBI:align:tbl:align_sorted #1.1.0
+    = NCBI:align:tbl:compressed_by_reference #1.1.0
     , NCBI:align:tbl:global_ref_block #1.0.0
 {
+    // 128K
+    column default limit = 131072;
 };
 
 
 /* align_unsorted
  *  deflated alignment unsorted data
  */
-table NCBI:align:tbl:align_unsorted #1.0.0
-    = NCBI:align:tbl:compressed_by_reference #1.0.0
+table NCBI:align:tbl:align_unsorted #1.1.0
+    = NCBI:align:tbl:compressed_by_reference #1.1.0
     , NCBI:align:tbl:local_ref_block #1.0.0
 {
+    // 128K
+    column default limit = 131072;
 };
 
 
 /* align_mate_sorted
  */
-table NCBI:align:tbl:align_mate_sorted #1.0.0
+table NCBI:align:tbl:align_mate_sorted #1.0.1
     = NCBI:align:tbl:align_full #1.0.0
     , NCBI:align:tbl:global_ref_block #1.0.0
 {
+    // 128K
+    column default limit = 131072;
 };
 
 
 /* align_mate_unsorted
  */
-table NCBI:align:tbl:align_mate_unsorted #1.0.0
+table NCBI:align:tbl:align_mate_unsorted #1.0.1
     = NCBI:align:tbl:align_full #1.0.0
     , NCBI:align:tbl:local_ref_block #1.0.0
 {
+    // 128K
+    column default limit = 131072;
 };
 
+/* align_allele
+ *  alleles coverage extension
+ */
+table NCBI:align:tbl:align_allele #1.1.0
+    = NCBI:align:tbl:align_unsorted #1.1.0
+{
+    extern column < I64 > izip_encoding EVIDENCE_ALIGNMENT_IDS;
+
+    /*
+    INSDC:quality:phred out_qual_phred
+        = < INSDC:quality:phred > echo < 30 > ( out_4na_bin );
+    */
+};
 
 /*--------------------------------------------------------------------------
  * seq
@@ -954,11 +1034,14 @@ I64 NCBI:align:sorted:alignment_id_encoding #1.0
 
 table NCBI:align:tbl:seq #1.0.0 =
     NCBI:tbl:base_space #2.0.3,
-    NCBI:tbl:phred_quality #2.0.3,
+    NCBI:tbl:phred_quality #2.0.4,
     NCBI:align:tbl:cmp_base_space #1,
     NCBI:SRA:tbl:spotdesc #1.0.2,
     NCBI:SRA:tbl:stats #1.2.0
 {
+    // 128K
+    column default limit = 131072;
+
     // gets primary record in alignment table (size of column is NREADS)
     // if sorted - should used special encoding
     extern column <I64> izip_encoding PRIMARY_ALIGNMENT_ID;
@@ -973,11 +1056,273 @@ table NCBI:align:tbl:seq #1.0.0 =
     ascii out_name_fmt = < ascii > echo < '$R' > ();
 
     // temparary column
-    extern column < U32 > izip_encoding TMP_KEY_ID;
+    extern column < U64 > izip_encoding TMP_KEY_ID;
 
-//Restored  READ
+    // restored  READ
     INSDC:4na:bin out_dcmp_4na_bin
         = NCBI:align:seq_restore_read (out_cmp_4na_bin, .PRIMARY_ALIGNMENT_ID, .READ_LEN, .READ_TYPE);
+    
+    extern column < U64 > izip_encoding TI;
+};
+
+
+table NCBI:align:tbl:cs_seq #1.1
+{
+    /* writable columns */
+    extern column INSDC:color:text CMP_CSREAD
+        = out_cmp_color_text
+        ;
+
+    extern column < INSDC:dna:text > zip_encoding CS_KEY;
+
+    extern default column < INSDC:quality:phred > zip_encoding QUALITY;
+
+    extern column < I64 > izip_encoding PRIMARY_ALIGNMENT_ID;
+
+    extern column < U8 > zip_encoding ALIGNMENT_COUNT;
+
+    extern column < INSDC:SRA:platform_id > zip_encoding PLATFORM;
+
+    extern column < ascii > zip_encoding LABEL;
+    extern column < INSDC:coord:zero > izip_encoding LABEL_START;
+    extern column < INSDC:coord:len > izip_encoding LABEL_LEN;
+
+    extern column < INSDC:SRA:xread_type > zip_encoding READ_TYPE;
+    extern column < INSDC:coord:zero > izip_encoding READ_START;
+    extern column < INSDC:coord:len > izip_encoding READ_LEN;
+    extern column < INSDC:SRA:read_filter > zip_encoding READ_FILTER;
+
+    extern column < U64 > izip_encoding TMP_KEY_ID;
+
+    extern column < ascii > zip_encoding SPOT_GROUP;
+
+    extern column < U64 > izip_encoding TI;
+
+    /* writing rules */
+    INSDC:x2cs:bin in_cmp_x2cs_bin
+        = < INSDC:color:text, INSDC:x2cs:bin > map < INSDC:x2cs:map:CHARSET, INSDC:x2cs:map:BINSET > ( CMP_CSREAD )
+        ;
+    INSDC:2cs:bin in_cmp_2cs_bin
+        = < INSDC:x2cs:bin, INSDC:2cs:bin > map < INSDC:x2cs:map:BINSET, [ 0, 1, 2, 3, 0 ] > ( in_cmp_x2cs_bin )
+        ;
+    INSDC:x2cs:bin in_cmp_alt_x2cs_bin
+        = < INSDC:x2cs:bin, INSDC:x2cs:bin > map < INSDC:x2cs:map:BINSET, [ 0, 0, 0, 0, 4 ] > ( in_cmp_x2cs_bin )
+        ;
+    physical column INSDC:2cs:packed .CMP_CSREAD
+        = ( INSDC:2cs:packed ) pack ( in_cmp_2cs_bin )
+        ;
+    physical column < INSDC:x2cs:bin > zip_encoding .CMP_ALTCSREAD
+        = < INSDC:x2cs:bin > trim < ALIGN_LEFT, 0 > ( in_cmp_alt_x2cs_bin )
+        ;
+
+    /* reading rules */
+    INSDC:2cs:packed phys_cmp_2cs_packed
+        = .CMP_CSREAD
+        ;
+    INSDC:x2cs:bin phys_cmp_alt_x2cs_bin
+        = .CMP_ALTCSREAD
+        ;
+    INSDC:2cs:packed phys_2cs_packed
+        = .CSREAD
+        ;
+    INSDC:x2cs:bin phys_alt_x2cs_bin
+        = .ALTCSREAD
+        ;
+    INSDC:2cs:bin out_cmp_2cs_bin
+        = ( INSDC:2cs:bin ) unpack ( phys_cmp_2cs_packed )
+        ;
+    INSDC:2cs:bin out_2cs_bin
+        = ( INSDC:2cs:bin ) unpack ( phys_2cs_packed )
+        ;
+    INSDC:x2cs:bin out_cmp_x2cs_bin
+        = ( INSDC:x2cs:bin ) < U8 > bit_or < ALIGN_RIGHT > ( out_cmp_2cs_bin, phys_cmp_alt_x2cs_bin )
+        | ( INSDC:x2cs:bin ) out_cmp_2cs_bin
+        ;
+    INSDC:x2cs:bin out_x2cs_bin
+        = ( INSDC:x2cs:bin ) < U8 > bit_or < ALIGN_RIGHT > ( out_2cs_bin, phys_alt_x2cs_bin )
+        | ( INSDC:x2cs:bin ) out_2cs_bin
+        ;
+     INSDC:color:text out_cmp_color_text
+        = < INSDC:x2cs:bin, INSDC:color:text > map <  INSDC:x2cs:map:BINSET, INSDC:x2cs:map:CHARSET > ( out_cmp_x2cs_bin )
+        ;
+     INSDC:color:text out_color_text
+        = < INSDC:x2cs:bin, INSDC:color:text > map <  INSDC:x2cs:map:BINSET, INSDC:x2cs:map:CHARSET > ( out_x2cs_bin )
+        ;
+
+    /* triggers from stats */
+    INSDC:quality:phred in_qual_phred
+        = QUALITY
+        ;
+    INSDC:coord:len in_read_len
+        = READ_LEN
+        ;
+    INSDC:SRA:xread_type in_read_type
+        = READ_TYPE
+        ;
+    ascii in_spot_group
+        = SPOT_GROUP
+        ;
+    trigger meta_stats
+        = NCBI:SRA:cmp_stats_trigger ( in_cmp_x2cs_bin, in_qual_phred, in_read_len, in_read_type, in_spot_group )
+        | NCBI:SRA:cmp_stats_trigger ( in_cmp_x2cs_bin, in_qual_phred, in_read_len, in_read_type )
+        ;
+    trigger qual_stats
+        = NCBI:SRA:phred_stats_trigger #1 ( in_qual_phred )
+        ;
+};
+
+table NCBI:align:view:cs_seq #1.1 = NCBI:align:tbl:cs_seq #1.1
+{
+    // various READ columns
+    default readonly column INSDC:dna:text READ
+        = < INSDC:4na:bin, INSDC:dna:text > map < INSDC:4na:map:BINSET, INSDC:4na:map:CHARSET > ( out_dcmp_4na_bin )
+        | < INSDC:4na:bin, INSDC:dna:text > map < INSDC:4na:map:BINSET, INSDC:4na:map:CHARSET > ( out_4na_bin )
+        ;
+    readonly column INSDC:4na:bin READ = out_dcmp_4na_bin | out_4na_bin;
+    readonly column INSDC:4na:packed READ = pack ( out_dcmp_4na_bin ) | pack ( out_4na_bin );
+    readonly column INSDC:x2na:bin READ = out_dcmp_x2na_bin | out_x2na_bin;
+    readonly column INSDC:2na:bin READ = out_dcmp_2na_bin | out_2na_bin;
+    INSDC:2na:bin out_dcmp_2na_bin
+        = < INSDC:x2na:bin, INSDC:2na:bin > map < INSDC:x2na:map:BINSET, [ 0, 1, 2, 3, 0 ] > ( out_dcmp_x2na_bin )
+        ;
+    INSDC:2na:bin out_2na_bin
+        = < INSDC:x2na:bin, INSDC:2na:bin > map < INSDC:x2na:map:BINSET, [ 0, 1, 2, 3, 0 ] > ( out_x2na_bin )
+        ;
+    readonly column INSDC:2na:packed READ = pack ( out_dcmp_2na_bin ) | pack ( out_2na_bin );
+
+    // decompression in base space
+    INSDC:coord:len cmp_read_len
+        = < INSDC:coord:len > NCBI:align:make_cmp_read_desc #1 < true > ( .READ_LEN, .PRIMARY_ALIGNMENT_ID )
+        ;
+    INSDC:coord:zero cmp_read_start
+        = NCBI:align:make_read_start #1 ( cmp_read_len )
+        ; 
+    INSDC:x2na:bin out_cmp_x2na_bin
+        = NCBI:dna_from_color #1 ( out_cmp_x2cs_bin, cmp_read_start, cmp_read_len, .CS_KEY, color_matrix )
+        ;
+    INSDC:x2na:bin out_x2na_bin
+        = NCBI:dna_from_color #1 ( out_x2cs_bin, .READ_START, .READ_LEN, .CS_KEY, color_matrix )
+        ;
+    INSDC:4na:bin out_cmp_4na_bin
+        = < INSDC:x2na:bin, INSDC:4na:bin > map < INSDC:x2na:map:BINSET, [ 1, 2, 4, 8, 15 ] > ( out_cmp_x2na_bin )
+        ;
+    INSDC:4na:bin out_4na_bin
+        = < INSDC:x2na:bin, INSDC:4na:bin > map < INSDC:x2na:map:BINSET, [ 1, 2, 4, 8, 15 ] > ( out_x2na_bin )
+        ;
+    INSDC:4na:bin out_dcmp_4na_bin
+        = NCBI:align:seq_restore_read ( out_cmp_4na_bin, .PRIMARY_ALIGNMENT_ID, .READ_LEN, .READ_TYPE )
+        ;
+
+
+    // various CSREAD columns
+    default readonly column INSDC:color:text CSREAD
+        = < INSDC:x2cs:bin, INSDC:color:text > map <  INSDC:x2cs:map:BINSET, INSDC:x2cs:map:CHARSET > ( out_dcmp_x2cs_bin )
+        | out_color_text;
+    readonly column INSDC:x2cs:bin CSREAD = out_dcmp_x2cs_bin | out_x2cs_bin;
+    readonly column INSDC:2cs:bin CSREAD = out_dcmp_2cs_bin | out_2cs_bin;
+    INSDC:2cs:bin out_dcmp_2cs_bin
+        = < INSDC:x2cs:bin, INSDC:2cs:bin > map < INSDC:x2cs:map:BINSET, [ 0, 1, 2, 3, 0 ] > ( out_dcmp_x2cs_bin )
+        ;
+    readonly column INSDC:2cs:packed CSREAD = pack ( out_dcmp_2cs_bin ) | out_2cs_bin;
+
+
+    // decompression in color space
+    INSDC:x2na:bin out_dcmp_x2na_bin
+        = < INSDC:4na:bin, INSDC:x2na:bin > map < INSDC:4na:map:BINSET, [ 4,0,1,4,2,4,4,4,3,4,4,4,4,4,4,4 ] > ( out_dcmp_4na_bin )
+        ;
+    INSDC:x2cs:bin out_dcmp_x2na_x2cs_bin
+        = NCBI:color_from_dna #1 ( out_dcmp_x2na_bin, .READ_START, .READ_LEN, .CS_KEY, color_matrix )
+        ;
+    INSDC:coord:len aligned_read_len
+        = < INSDC:coord:len > NCBI:align:make_cmp_read_desc #1 < false > ( .READ_LEN, .PRIMARY_ALIGNMENT_ID )
+        ; 
+    INSDC:x2cs:bin out_dcmp_x2cs_bin
+        = < INSDC:x2cs:bin > NCBI:align:seq_construct_read #1 ( out_dcmp_x2na_x2cs_bin, .READ_LEN, out_cmp_x2cs_bin, cmp_read_len )
+        ;
+
+    // CS_NATIVE - dynamic
+    U32 cmp_csread_row_len
+        = row_len #1 ( phys_cmp_2cs_packed )
+        ;
+    U32 cmp_csread_not_zero
+        = < U32 > clip < 0, 1 > ( cmp_csread_row_len )
+        ;
+    readonly column bool CS_NATIVE
+        = < U32, bool > map < [ 0, 1 ], [ false, true ] > ( cmp_cs_read_not_zero )
+        ;
+
+    // COLOR_MATRIX
+    readonly column U8 COLOR_MATRIX
+        = color_matrix
+        ;
+    U8 color_matrix
+        = < U8 > echo < INSDC:color:default_matrix > ()
+        ;
+
+    // various QUALITY types
+    readonly column INSDC:quality:text:phred_33 QUALITY
+        = out_qual_text_phred_33
+        | ( INSDC:quality:text:phred_33 ) < B8 > sum < 33 > ( .QUALITY );
+    readonly column INSDC:quality:text:phred_64 QUALITY
+        = out_qual_text_phred_64
+        | ( INSDC:quality:text:phred_64 ) < B8 > sum < 64 > ( .QUALITY );
+
+    // SPOT_LEN
+    INSDC:coord:len spot_len
+        = ( INSDC:coord:len ) row_len ( out_dcmp_4na_bin )
+        ;
+    readonly column INSDC:coord:len SPOT_LEN = spot_len;
+
+    // TRIM_START
+    readonly column INSDC:coord:zero TRIM_START
+        = < INSDC:coord:zero > echo < 0 > ()
+        ;
+    readonly column INSDC:coord:one TRIM_START
+        = < INSDC:coord:one > echo < 1 > ()
+        ;
+    // TRIM_LEN
+    readonly column INSDC:coord:len TRIM_LEN = spot_len;
+
+    // MIN_SPOT_ID
+    readonly column INSDC:SRA:spotid_t MIN_SPOT_ID
+        = < INSDC:SRA:spotid_t > meta:value < "STATS/TABLE/SPOT_MIN" > ()
+        ;
+    // MAX_SPOT_ID
+    readonly column INSDC:SRA:spotid_t MAX_SPOT_ID
+        = < INSDC:SRA:spotid_t > meta:value < "STATS/TABLE/SPOT_MAX" > ()
+        ;
+    // SPOT_COUNT
+    readonly column U64 SPOT_COUNT
+        = < U64 > meta:value < "STATS/TABLE/SPOT_COUNT" > ()
+        ;
+    // BASE_COUNT
+    U64 base_count
+        = < U64 > meta:value < "STATS/TABLE/BASE_COUNT" > ()
+        ;
+    readonly column U64 BASE_COUNT = base_count;
+    // BIO_BASE_COUNT
+    readonly column U64 BIO_BASE_COUNT
+        = < U64 > meta:value < "STATS/TABLE/BIO_BASE_COUNT" > ()
+        ;
+    // CMP_BASE_COUNT
+    readonly column U64 CMP_BASE_COUNT
+        = < U64 > meta:value < "STATS/TABLE/CMP_BASE_COUNT" > ()
+        | base_count
+        ;
+
+    // various PLATFORM
+    // TBD
+
+    // SPOT_ID
+    I64 rowid_64 = row_id ();
+    readonly column INSDC:SRA:spotid_t SPOT_ID
+        = cast ( rowid_64 )
+        ;
+        
+    readonly column ascii NAME
+        = sprintf < "%u" > ( SPOT_ID )
+        ;
+
 };
 
 
@@ -998,7 +1343,7 @@ table NCBI:align:tbl:seq #1.0.0 =
 * - 0 < rowlen(.READ)< SEQ_LEN -- the sequence have to be filled with 'N's
 * 
 v***********************************/
-table NCBI:align:tbl:reference #1.1.0 =
+table NCBI:align:tbl:reference #2 =
     NCBI:align:tbl:cmp_base_space #1,
     NCBI:tbl:base_space #2.0.3,
     NCBI:tbl:seqloc #1,
@@ -1060,15 +1405,6 @@ table NCBI:align:tbl:reference #1.1.0 =
 
 // Columns of computed coverages by alignment
 
-    // Preserve Quality bit map
-    extern column bool PRESERVE_QUAL = out_preserve_qual;
-    physical bool_encoding .PRESERVE_QUAL = PRESERVE_QUAL;
-    bool out_preserve_qual
-        = .PRESERVE_QUAL
-        | NCBI:align:generate_preserve_qual(NAME, SEQ_LEN, .MAX_SEQ_LEN);
-
-    readonly default column ascii PRESERVE_QUAL = < U8 , ascii > map < [ 0 , 1 ] , '01'  > ( out_preserve_qual );
-    
     // TBD: use percentiles instead of min/max?
     // maximum value clipped at 255 of the coverage density
     // for a chunk
@@ -1087,6 +1423,14 @@ table NCBI:align:tbl:reference #1.1.0 =
     // List of row ids from alignment tables
     extern column < I64 > izip_encoding PRIMARY_ALIGNMENT_IDS;
     extern column < I64 > izip_encoding SECONDARY_ALIGNMENT_IDS;
+    extern column < I64 > izip_encoding EVIDENCE_INTERVAL_IDS;
+
+    // both OVERLAP_REF_* columns are array of three elements, matching number of *_IDS columns above.
+    // points back to an offset where the alignments to this chunk start
+    extern column < INSDC:coord:zero > izip_encoding OVERLAP_REF_POS;
+    // indicates the length of the longest tail of the alignmnent to this chunk which start in previous chunks
+    // if value of an element in this col is zero corresponding value of OVERLAP_REF_POS is meaningless
+    extern column < INSDC:coord:len > izip_encoding OVERLAP_REF_LEN;
 
     // Mechanism to seach for NAME 
     readonly column vdb:row_id_range NAME_RANGE
@@ -1098,31 +1442,46 @@ table NCBI:align:tbl:reference #1.1.0 =
 }
 
 // THE DATABASES
-database NCBI:align:db:alignment_sorted #1.1
+database NCBI:align:db:alignment_sorted #1.2.1
 {
-    table NCBI:align:tbl:reference #1.1 REFERENCE;
-    table NCBI:align:tbl:align_sorted #1.0 PRIMARY_ALIGNMENT;
+    table NCBI:align:tbl:reference #2 REFERENCE;
+    table NCBI:align:tbl:align_sorted #1.1 PRIMARY_ALIGNMENT;
     table NCBI:align:tbl:align_mate_sorted #1.0 SECONDARY_ALIGNMENT;
     table NCBI:align:tbl:seq #1.0 SEQUENCE;
+    table NCBI:align:view:cs_seq #1.1 CS_SEQUENCE;
     table NCBI:align:tbl:qstat #1.0 QUAL_STAT;
 };
 
-database NCBI:align:db:alignment_unsorted #1.1
+database NCBI:align:db:alignment_unsorted #1.2.1
 {
-    table NCBI:align:tbl:reference #1.1 REFERENCE;
-    table NCBI:align:tbl:align_unsorted #1.0 PRIMARY_ALIGNMENT;
+    table NCBI:align:tbl:reference #2 REFERENCE;
+    table NCBI:align:tbl:align_unsorted #1.1 PRIMARY_ALIGNMENT;
     table NCBI:align:tbl:align_mate_unsorted #1.0 SECONDARY_ALIGNMENT;
     table NCBI:align:tbl:seq #1.0 SEQUENCE;
+    table NCBI:align:view:cs_seq #1.1 CS_SEQUENCE;
     table NCBI:align:tbl:qstat #1.0 QUAL_STAT;
 };
 
-database NCBI:align:db:alignment_evidence #1.1
+database NCBI:align:db:alignment_evidence #1.2.1
 {
-    table NCBI:align:tbl:reference #1.1 REFERENCE;
-    table NCBI:align:tbl:align_unsorted #1.0 PRIMARY_ALIGNMENT;
+    table NCBI:align:tbl:reference #2 REFERENCE;
+    table NCBI:align:tbl:align_unsorted #1.1 PRIMARY_ALIGNMENT;
     table NCBI:align:tbl:align_mate_unsorted #1.0 SECONDARY_ALIGNMENT;
-    table NCBI:align:tbl:align_unsorted #1.0 EVIDENCE_INTERVAL;
+    table NCBI:align:tbl:align_allele #1.1 EVIDENCE_INTERVAL;
+    table NCBI:align:tbl:align_mate_unsorted #1.0 EVIDENCE_ALIGNMENT;
+    table NCBI:align:tbl:seq #1.0 SEQUENCE;
+    table NCBI:align:view:cs_seq #1.1 CS_SEQUENCE;
+    table NCBI:align:tbl:qstat #1.0 QUAL_STAT;
+};
+
+database NCBI:align:db:alignment_evidence_sorted #1.0.1
+{
+    table NCBI:align:tbl:reference #2 REFERENCE;
+    table NCBI:align:tbl:align_sorted #1.1 PRIMARY_ALIGNMENT;
+    table NCBI:align:tbl:align_mate_sorted #1.0 SECONDARY_ALIGNMENT;
+    table NCBI:align:tbl:align_allele #1.1 EVIDENCE_INTERVAL;
     table NCBI:align:tbl:align_mate_unsorted #1.0 EVIDENCE_ALIGNMENT;
     table NCBI:align:tbl:seq #1.0 SEQUENCE;
+    table NCBI:align:view:cs_seq #1.1 CS_SEQUENCE;
     table NCBI:align:tbl:qstat #1.0 QUAL_STAT;
 };
diff --git a/interfaces/align/alignarc.h b/interfaces/align/alignarc.h
deleted file mode 100644
index ab87c4e..0000000
--- a/interfaces/align/alignarc.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#ifndef _h_align_alignarc_
-#define _h_align_alignarc_
-
-#ifndef _h_klib_defs_
-#include <klib/defs.h>
-#endif
-
-#ifndef _h_align_extern_
- #include <align/extern.h>
-#endif
-
-#include <stdarg.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*--------------------------------------------------------------------------
- * AlignMgr
- *  opaque handle to Alignment Archive
- */
-typedef struct AlignMgr AlignMgr;
-
-
-/*--------------------------------------------------------------------------
- * AlignTable
- *  an alignment guy
- */
-typedef struct AlignTable AlignTable;
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _h_align_alignarc_ */
diff --git a/interfaces/align/bam.h b/interfaces/align/bam.h
index 99e9b1f..09f78a3 100644
--- a/interfaces/align/bam.h
+++ b/interfaces/align/bam.h
@@ -47,7 +47,7 @@ extern "C" {
  */
 struct KDirectory;
 struct KFile;
-struct KPath;
+struct VPath;
 struct AlignAccessDB;
 struct AlignAccessAlignmentEnumerator;
 
@@ -215,14 +215,18 @@ ALIGN_EXTERN bool CC BAMAlignmentHasColorSpace ( const BAMAlignment *self );
  */
 ALIGN_EXTERN rc_t CC BAMAlignmentGetCSKey ( const BAMAlignment *self, char cskey[1] );
 
+ALIGN_EXTERN rc_t CC BAMAlignmentGetCSSeqLen ( const BAMAlignment *self, uint32_t *seqLen );
 /* GetCSSequence
- *  get the colorspace sequence data [0..ReadLength)
- *  caller provides buffer of ReadLength bytes
+ *  get the colorspace sequence data [0..seqLen)
+ *  caller provides buffer of seqLen bytes
  *
- *  "csseq" [ OUT ] - pointer to a buffer of at least ReadLength bytes
+ *  "csseq" [ OUT ] - pointer to a buffer of at least seqLen bytes
+ *  "seqLen" [ IN ] - length of sequence from BAMAlignmentGetCSSeqLen
  */
-ALIGN_EXTERN rc_t CC BAMAlignmentGetCSSequence ( const BAMAlignment *self, char csseq[] );
-    
+ALIGN_EXTERN rc_t CC BAMAlignmentGetCSSequence ( const BAMAlignment *self, char *csseq, uint32_t seqLen );
+
+ALIGN_EXTERN rc_t CC BAMAlignmentGetCSQuality(BAMAlignment const *cself, uint8_t const **quality, uint8_t *offset);
+
 
 /* GetFlags
  *  return the raw "flags" bitmap word
@@ -284,15 +288,15 @@ ALIGN_EXTERN rc_t CC BAMAlignmentGetMapQuality ( const BAMAlignment *self, uint8
 typedef uint32_t BAMCigarType;
 enum BAMCigarTypes
 {
-    ct_Match    = 'M',
-    ct_Insert   = 'I',
-    ct_Delete   = 'D',
-    ct_Skip     = 'N',
-    ct_SoftClip = 'S',
-    ct_HardClip = 'H',
-    ct_Padded   = 'P',
-    ct_Equal    = '=',
-    ct_NotEqual = 'X',
+    ct_Match    = 'M', /* 0 */
+    ct_Insert   = 'I', /* 1 */
+    ct_Delete   = 'D', /* 2 */
+    ct_Skip     = 'N', /* 3 */
+    ct_SoftClip = 'S', /* 4 */
+    ct_HardClip = 'H', /* 5 */
+    ct_Padded   = 'P', /* 6 */
+    ct_Equal    = '=', /* 7 */
+    ct_NotEqual = 'X', /* 8 */
     ct_Overlap  = 'B' /* Complete Genomics extension */
 };
 
@@ -419,34 +423,35 @@ struct BAMOptData
 
 typedef struct BAMOptData BAMOptData;
 
-#ifndef USE_OLD_BAM_OPT_FOR_EACH
-#define USE_OLD_BAM_OPT_FOR_EACH 0
-#endif
-#if USE_OLD_BAM_OPT_FOR_EACH
-/* Optional data callback function */
-typedef rc_t ( CC * BAMOptionalDataFunction )
-    ( void *ctx, const char tag[2], BAMOptDataValueType type,
-      const void *value, uint32_t size );
-
-ALIGN_EXTERN rc_t CC BAMAlignmentOptDataForEach
-    ( const BAMAlignment *self, void *ctx, BAMOptionalDataFunction callback );
-
-typedef rc_t ( CC * BAMOptionalDataFunction2 )
-    ( void *ctx, const char tag[2], const BAMOptData *value );
-
-ALIGN_EXTERN rc_t CC BAMAlignmentOptDataForEach2
-    ( const BAMAlignment *self, void *ctx, BAMOptionalDataFunction2 callback );
-
-#else    
-
 typedef rc_t ( CC * BAMOptionalDataFunction )
     ( void *ctx, const char tag[2], const BAMOptData *value );
 
 ALIGN_EXTERN rc_t CC BAMAlignmentOptDataForEach
     ( const BAMAlignment *self, void *ctx, BAMOptionalDataFunction callback );
 
-#endif
+    
+ALIGN_EXTERN bool CC BAMAlignmentHasCGData(BAMAlignment const *self);
 
+    
+ALIGN_EXTERN
+rc_t CC BAMAlignmentGetCGSeqQual(BAMAlignment const *self,
+                                 char sequence[/* 35 */],
+                                 uint8_t quality[/* 35 */]);
+
+ALIGN_EXTERN
+rc_t CC BAMAlignmentGetCGCigar(BAMAlignment const *self,
+                               uint32_t *cigar,
+                               uint32_t cig_max,
+                               uint32_t *cig_act);
+    
+ALIGN_EXTERN rc_t BAMAlignmentGetTI(BAMAlignment const *self, uint64_t *ti);
+
+ALIGN_EXTERN rc_t BAMAlignmentGetCGAlignGroup(BAMAlignment const *self,
+                                              char buffer[],
+                                              size_t max_size,
+                                              size_t *act_size);
+    
+    
 /*--------------------------------------------------------------------------
  * BAMFile
  */
@@ -497,6 +502,10 @@ typedef uint64_t BAMFilePosition;
  */
 ALIGN_EXTERN rc_t CC BAMFileMake ( const BAMFile **result, const char *path, ... );
 
+ALIGN_EXTERN rc_t CC BAMFileMakeWithHeader ( const BAMFile **result,
+                                            char const headerText[],
+                                            char const path[], ... );
+
 /* MakeWithDir
  *  open the BAM file specified by path and supplied directory
  *
@@ -522,8 +531,8 @@ ALIGN_EXTERN rc_t CC BAMFileMakeWithKFile(const BAMFile **result,
  *
  *  "file" [ IN ] - an open KFile
  */
-ALIGN_EXTERN rc_t CC BAMFileMakeWithKPath(const BAMFile **result,
-    struct KPath const *path);
+ALIGN_EXTERN rc_t CC BAMFileMakeWithVPath(const BAMFile **result,
+    struct VPath const *path);
 
 /* ExportBAMFile
  *  export the BAMFile object in use by the AlignAccessDB, if any
@@ -643,7 +652,7 @@ ALIGN_EXTERN rc_t CC BAMFileGetReadGroupByName ( const BAMFile *self,
  */
 ALIGN_EXTERN rc_t CC BAMFileOpenIndex ( const BAMFile *self, const char *path );
 
-ALIGN_EXTERN rc_t CC BAMFileOpenIndexWithKPath ( const BAMFile *self, struct KPath const *path );
+ALIGN_EXTERN rc_t CC BAMFileOpenIndexWithVPath ( const BAMFile *self, struct VPath const *path );
 
 /* IsIndexed
  *  returns true if true
@@ -771,8 +780,8 @@ typedef rc_t (CC *BAMValidateCallback)(void *ctx, rc_t result, const BAMValidate
 
 /* Validate
  */
-ALIGN_EXTERN rc_t CC BAMValidate ( struct KPath const *bam,
-                                   struct KPath const *bai,
+ALIGN_EXTERN rc_t CC BAMValidate ( struct VPath const *bam,
+                                   struct VPath const *bai,
                                    BAMValidateOption options,
                                    BAMValidateCallback callback,
                                    void *callbackContext
diff --git a/interfaces/align/dna-reverse-cmpl.h b/interfaces/align/dna-reverse-cmpl.h
new file mode 100644
index 0000000..82c4783
--- /dev/null
+++ b/interfaces/align/dna-reverse-cmpl.h
@@ -0,0 +1,43 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_align_dna_reverse_cmpl_
+#define _h_align_dna_reverse_cmpl_
+
+#ifndef _h_align_extern_
+#include <align/extern.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ALIGN_EXTERN rc_t CC DNAReverseCompliment(const INSDC_dna_text* seq, INSDC_dna_text* cmpl, uint32_t len);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_align_dna_reverse_cmpl_ */
diff --git a/interfaces/align/iterator.h b/interfaces/align/iterator.h
new file mode 100644
index 0000000..94b92ed
--- /dev/null
+++ b/interfaces/align/iterator.h
@@ -0,0 +1,610 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_align_iterator_
+#define _h_align_iterator_
+
+#ifndef _h_align_extern_
+#include <align/extern.h>
+#endif
+
+#ifndef _h_klib_container_
+#include <klib/container.h>
+#endif
+
+#ifndef _h_insdc_insdc_
+#include <insdc/insdc.h>
+#endif
+
+#ifndef _h_vdb_database_
+#include <vdb/database.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct VCursor;
+struct AlignMgr;
+struct ReferenceObj;
+
+
+/*--------------------------------------------------------------------------
+ * AlignmentIterator
+ *  walk across a single alignment in reference space
+ */
+typedef struct AlignmentIterator AlignmentIterator;
+
+
+/* Make
+ *  create an encapsulation of alignment
+ *
+ *  iter [ OUT ] - return parameter for new iterator
+ *
+ *  copy [ IN ] - when "true" the data will be copied.
+ *  otherwise, pointers will be expected to refer to data
+ *  with a lifetime >= that of the iterator being created.
+ *
+ *  "ref_pos" [ IN ] and "ref_len" [ IN ] - projection onto reference
+ *
+ *  "read" [ IN ] and "read_len" [ IN ] - full sequence of alignment
+ *
+ *  "has_mismatch" [ IN ] - describes comparison result of each base
+ *  in "read" against the alignment.
+ *
+ *  "has_ref_offset" [ IN ] - describes positions of reference offsets
+ *
+ *  "ref_offset" [ IN ] and "ref_offset_len" [ IN ] - packed array of
+ *  offsets of position against reference.
+ */
+ALIGN_EXTERN rc_t CC AlignMgrMakeAlignmentIterator ( struct AlignMgr const *self,
+    AlignmentIterator **iter,
+    bool copy,
+    INSDC_coord_zero ref_pos,
+    INSDC_coord_len ref_len,
+    const INSDC_4na_bin *read,
+    INSDC_coord_len read_len,
+    const bool *has_mismatch,
+    const bool *has_ref_offset,
+    const int32_t *ref_offset,
+    uint32_t ref_offset_len,
+    INSDC_coord_zero ref_window_start,
+    INSDC_coord_len ref_window_len );
+
+
+/* AddRef
+ * Release
+ */
+ALIGN_EXTERN rc_t CC AlignmentIteratorAddRef ( const AlignmentIterator *self );
+ALIGN_EXTERN rc_t CC AlignmentIteratorRelease ( const AlignmentIterator *self );
+
+
+/* Next
+ *  advance position by 1 in reference space
+ *  must be called initially to advance to first element
+ *
+ *  returns RCState = rcDone when done
+ */
+ALIGN_EXTERN rc_t CC AlignmentIteratorNext ( AlignmentIterator *self );
+
+
+/* State
+ *  returns bitmap of state bits and event code at the current position
+ *  will return invalid before initial Next message or after final
+ *
+ *  bits [ 0..7 ] :
+ *    { 0..15 }             = 4na mismatch (NACMGRSVTWYHKDBN)
+ *    64                    = match
+ *    128                   = skip
+ *  bit [ 8 ]               = have insert if ! 0
+ *  bit [ 9 ]               = have delete if ! 0
+ *  bit [ 10 ]              = first base if ! 0
+ *  bit [ 11 ]              = last base if ! 0
+ *  bit [ 31 ]              = iterator position is invalid if ! 0
+ *                            NB - converts state word to negative
+ */
+enum
+{
+    align_iter_match      = ( 1 <<  8 ),
+    align_iter_skip       = ( 1 <<  9 ),
+
+    align_iter_insert     = ( 1 << 10 ),
+    align_iter_delete     = ( 1 << 11 ),
+    align_iter_first      = ( 1 << 12 ),
+    align_iter_last       = ( 1 << 13 ),
+
+    align_iter_invalid    = ( 1 << 31 )
+};
+
+ALIGN_EXTERN int32_t CC AlignmentIteratorState ( const AlignmentIterator *self,
+                                                 INSDC_coord_zero *seq_pos );
+
+
+/* Position
+ *  return current position of iterator relative to reference
+ */
+ALIGN_EXTERN rc_t CC AlignmentIteratorPosition ( const AlignmentIterator *self,
+                                                 INSDC_coord_zero *pos );
+
+
+/* BasesInserted
+ *  return the number of inserted bases and a pointer to their values
+ *
+ *  "bases" [ OUT, NULL OKAY ] - optional output parameter to inserted bases
+ *
+ *  returns count of bases inserted at current position
+ */
+ALIGN_EXTERN uint32_t CC AlignmentIteratorBasesInserted
+    ( const AlignmentIterator *self, const INSDC_4na_bin **bases );
+
+
+/* BasesDeleted
+ *  return the number of bases deleted at the current position
+ *  also returns the location on the reference where the delete starts
+ *
+ *  "pos" [ OUT ] - return parameter for location on the reference
+ *  where delete starts, and continues for the number of bases given by function return
+ *
+ *  returns count of bases deleted at current position
+ */
+ALIGN_EXTERN uint32_t CC AlignmentIteratorBasesDeleted
+    ( const AlignmentIterator *self, INSDC_coord_zero *pos );
+
+
+/*--------------------------------------------------------------------------
+ * PlacementRecord
+ *  record describing a placement
+ */
+typedef struct PlacementRecord PlacementRecord;
+struct PlacementRecord
+{
+    DLNode n;
+
+    /* row id of alignment record */
+    int64_t id;
+
+    /* object representing reference sequence */
+    struct ReferenceObj const *ref;
+
+    /* placement position and length on reference */
+    INSDC_coord_zero pos;
+    INSDC_coord_len len;
+
+    /* mapping quality of alignment */
+    int32_t mapq;
+
+    /* spotgroup is now in here too */
+    uint32_t spot_group_len;
+    char * spot_group;
+};
+
+
+/* Cast
+ *  cast to an extended object
+ *
+ *  "ext" [ IN ] - selects the extended object level
+ *  can be placementRecordExtension0 or placementRecordExtension1
+ */
+
+enum { placementRecordExtension0, placementRecordExtension1 };
+
+ALIGN_EXTERN void* CC PlacementRecordCast ( const PlacementRecord *self, uint32_t ext );
+
+
+ALIGN_EXTERN void* CC PlacementRecord_get_ext_data_ptr ( const PlacementRecord *self, uint32_t ext );
+
+
+/* Whack
+ *  destroys PlacementRecord and any associated extensions
+ */
+ALIGN_EXTERN void CC PlacementRecordWhack ( const PlacementRecord *self );
+
+
+/* structure of function pointers for creating extensions
+   all function pointers are optional ( NULL OKAY ) */
+typedef struct PlacementRecordExtendFuncs PlacementRecordExtendFuncs;
+struct PlacementRecordExtendFuncs
+{
+    /* opaque pointer to data passed to each function */
+    void *data;
+
+    /* destructor */
+    void ( CC * destroy ) ( void *obj, void *data );
+
+    /* constructor */
+    rc_t ( CC * populate ) ( void *obj, const PlacementRecord *placement,
+        struct VCursor const *curs, INSDC_coord_zero ref_window_start,
+        INSDC_coord_len ref_window_len, void *data );
+
+    /* variable allocation size calculation
+       when non-NULL, takes precedence over "fixed_size" */
+    bool ( CC * filter ) ( struct VCursor const *curs, int64_t row_id,
+        const PlacementRecord *placement, INSDC_coord_zero ref_window_start,
+        INSDC_coord_len ref_window_len, void *data );
+
+    /* variable allocation size calculation
+       when non-NULL, takes precedence over "fixed_size" */
+    rc_t ( CC * alloc_size ) ( struct VCursor const *curs, int64_t row_id, size_t * size, void *data );
+    
+    /* fixed allocation size
+       ignored if "alloc_size" is non-NULL,
+       must be non-zero otherwise */
+    size_t fixed_size;
+};
+
+
+/* external functions for extension of a placement record
+   to include ( construct ) an AlignmentIterator */
+ALIGN_EXTERN void CC AlignIteratorRecordDestroy ( void *obj, void *data );
+ALIGN_EXTERN rc_t CC AlignIteratorRecordPopulate ( void *obj,
+    const PlacementRecord *placement, struct VCursor const *curs,
+    INSDC_coord_zero ref_window_start, INSDC_coord_len ref_window_len, void *data );
+ALIGN_EXTERN rc_t CC AlignIteratorRecordSize ( struct VCursor const *curs, int64_t row_id, size_t * size, void *data );
+
+
+/*--------------------------------------------------------------------------
+ * PlacementIterator
+ *  walk across placements from an alignment db within a reference window
+ */
+typedef struct PlacementIterator PlacementIterator;
+
+
+/* Make
+ *  create a placement iterator
+ *
+ *  "iter" [ OUT ] - return parameter for iterator
+ *
+ *  "ref_obj" [ IN, NULL OKAY ] - optional parameter giving an object
+ *  representing the reference sequence for this iterator. it will be
+ *  inserted into each PlacementRecord (see above) and made available to
+ *  outer code.
+ *
+ *  "ref_pos" [ IN ] and "ref_len" [ IN ] - window onto reference
+ *
+ *  "min_mapq" [ IN ] - minimum map quality value
+ *
+ *  "ref_cur" [ IN ] - read-only cursor on REFERENCE table
+ *  will be modified as necessary to contain requisite columns
+ *  will be opened by iterator.
+ *
+ *  "align_cur" [ IN ] - read-only cursor on PRIMARY_ALIGNMENT or SECONDARY_ALIGNMENT
+ *  table ( see "secondary" ). will be modified as necessary to contain
+ *  requisite columns. will be opened by iterator.
+ *
+ *  "ids" [ IN ] - an enum describing which column of alignment ids should
+ *  be used when reading "ref"
+ *
+ *  "ext_0" [ IN, NULL OKAY ] and "ext_1" [ IN, NULL OKAY ] - optional pointers
+ *  to blocks describing how to extend the basic placement record
+ *
+ *  rd_group [ IN, NULL OKAY ]
+ *      != NULL, non empty string ... produce all alignments with this string as
+ *                  spot-group ( no matter what the "real" spot-group of the
+ *                  alignment is )
+ *
+ *      != NULL, empty string ... produce all alignments with the "real" spot-group
+ *                  read from the column "SPOT_GROUP"
+ *
+ *      == NULL, ... produce all alignments with no spot-group assigned ( the user
+ *                  does not wish the data to be read, the alignment to be bined )
+ */
+
+typedef uint8_t align_id_src;
+enum { primary_align_ids, secondary_align_ids, evidence_align_ids };
+
+ALIGN_EXTERN rc_t CC AlignMgrMakePlacementIterator ( struct AlignMgr const *self,
+    PlacementIterator **iter, struct ReferenceObj const *ref_obj,
+    INSDC_coord_zero ref_pos, INSDC_coord_len ref_len, int32_t min_mapq,
+    struct VCursor const *ref_cur, struct VCursor const *align_cur, align_id_src ids,
+    const PlacementRecordExtendFuncs *ext_0, const PlacementRecordExtendFuncs *ext_1,
+    const char * spot_group );
+
+
+/* AddRef
+ * Release
+ */
+ALIGN_EXTERN rc_t CC PlacementIteratorAddRef ( const PlacementIterator *self );
+ALIGN_EXTERN rc_t CC PlacementIteratorRelease ( const PlacementIterator *self );
+
+
+/* RefWindow
+ *  returns the reference identification string and iteration window
+ */
+ALIGN_EXTERN rc_t CC PlacementIteratorRefWindow ( const PlacementIterator *self,
+    const char **idstr, INSDC_coord_zero *pos, INSDC_coord_len *len );
+
+
+/* RefObj
+ *  returns the Ref-obj, that was used to create this placement-iterator
+ */
+ALIGN_EXTERN rc_t CC PlacementIteratorRefObj( const PlacementIterator * self,
+    struct ReferenceObj const ** refobj );
+
+
+/* NextAvailPos
+ *  check the next available position having one or more placements
+ *
+ *  "pos" [ OUT ] - next position on reference having one or more placements
+ *  may return negative position, indicating an alignment that wraps around
+ *  a circular reference, and starts in negative space after linearization.
+ *
+ *  "len" [ OUT, NULL OKAY ] - optional return parameter for length of
+ *  placement at that position
+ *
+ *  returns non-zero rc when no window is done
+ *  (rcRange, rcDone)
+ */
+ALIGN_EXTERN rc_t CC PlacementIteratorNextAvailPos ( const PlacementIterator *self,
+    INSDC_coord_zero *pos, INSDC_coord_len *len );
+
+
+/* NextRecordAt
+ *  retrieve a placement at the requested position
+ *
+ *  "pos" [ IN ] - required position of the placement
+ *  obtained from "NextAvailPos"
+ *
+ *  "rec" [ OUT ] - returned record
+ *  must be freed via PlacementRecordWhack
+ *
+ *  returns non-zero rc when no more placements are available
+ *  (rcOffset, rcDone)
+ */
+ALIGN_EXTERN rc_t CC PlacementIteratorNextRecordAt ( PlacementIterator *self,
+    INSDC_coord_zero pos, const PlacementRecord **rec );
+
+
+/* NextIdAt
+ *  retrieve a row id at the requested position
+ *
+ *  "pos" [ IN ] - required position of the placement
+ *  obtained from "NextAvailPos"
+ *
+ *  "id" [ OUT ] - returned row-id, within domain of align cursor
+ *
+ *  "len" [ OUT, NULL OKAY ] - optional return parameter for length of
+ *  placement on reference
+ *
+ *  returns non-zero rc when no more placements are available
+ *  (rcOffset, rcDone)
+ */
+ALIGN_EXTERN rc_t CC PlacementIteratorNextIdAt ( PlacementIterator *self,
+    INSDC_coord_zero pos, int64_t *row_id, INSDC_coord_len *len );
+
+
+/*--------------------------------------------------------------------------
+ * PlacementSetIterator
+ *  walk across placements from an alignment db within a reference window
+ */
+typedef struct PlacementSetIterator PlacementSetIterator;
+
+
+/* Make
+ *  create a placement set iterator
+ *
+ *  "iter" [ OUT ] - return parameter for iterator
+ *
+ *  "ref_pos" [ IN ] and "ref_len" [ IN ] - window onto reference
+ */
+ALIGN_EXTERN rc_t CC AlignMgrMakePlacementSetIterator ( struct AlignMgr const *self,
+    PlacementSetIterator **iter );
+
+
+/* AddPlacementIterator
+ *  adds a placement iterator
+ *  used to provide ordered placements within window
+ */
+ALIGN_EXTERN rc_t CC PlacementSetIteratorAddPlacementIterator
+    ( PlacementSetIterator *self, PlacementIterator *pi );
+
+
+/* AddRef
+ * Release
+ */
+ALIGN_EXTERN rc_t CC PlacementSetIteratorAddRef ( const PlacementSetIterator *self );
+ALIGN_EXTERN rc_t CC PlacementSetIteratorRelease ( const PlacementSetIterator *self );
+
+
+ALIGN_EXTERN rc_t CC PlacementSetIteratorNextReference ( PlacementSetIterator *self,
+    INSDC_coord_zero *first_pos, INSDC_coord_len *len, struct ReferenceObj const ** refobj );
+
+ALIGN_EXTERN rc_t CC PlacementSetIteratorNextWindow ( PlacementSetIterator *self,
+    INSDC_coord_zero *first_pos, INSDC_coord_len *len );
+
+/* NextAvailPos
+ *  check the next available position having one or more placements
+ *
+ *  "pos" [ OUT ] - next position on reference having one or more placements
+ *  may return negative position, indicating an alignment that wraps around
+ *  a circular reference, and starts in negative space after linearization.
+ *
+ *  "len" [ OUT, NULL OKAY ] - optional return parameter for length of
+ *  placement at that position
+ *
+ *  returns non-zero rc when no more placements are available
+ *  TBD - define a proper value
+ */
+ALIGN_EXTERN rc_t CC PlacementSetIteratorNextAvailPos ( const PlacementSetIterator *self,
+    INSDC_coord_zero *pos, INSDC_coord_len *len );
+
+
+/* NextRecordAt
+ *  retrieve a placement at the requested position
+ *
+ *  "pos" [ IN ] - required position of the placement
+ *  obtained from "NextAvailPos"
+ *
+ *  "rec" [ OUT ] - returned record
+ *  must be freed via PlacementRecordWhack
+ */
+ALIGN_EXTERN rc_t CC PlacementSetIteratorNextRecordAt ( PlacementSetIterator *self,
+    INSDC_coord_zero pos, const PlacementRecord **rec );
+
+
+/* NextIdAt
+ *  retrieve a row id at the requested position
+ *
+ *  "pos" [ IN ] - required position of the placement
+ *  obtained from "NextAvailPos"
+ *
+ *  "id" [ OUT ] - returned row-id, within domain of align cursor
+ *
+ *  "len" [ OUT, NULL OKAY ] - optional return parameter for length of
+ *  placement on reference
+ */
+ALIGN_EXTERN rc_t CC PlacementSetIteratorNextIdAt ( PlacementSetIterator *self,
+    INSDC_coord_zero pos, int64_t *row_id, INSDC_coord_len *len );
+
+
+/*--------------------------------------------------------------------------
+ * ReferenceIterator
+ *  walk across placements from an alignment db within a reference window
+ */
+typedef struct ReferenceIterator ReferenceIterator;
+
+
+/* Make
+ *  create a reference iterator
+ *
+ *  "iter" [ OUT ] - return parameter for iterator
+ *
+ *  "ext_1" [ IN, NULL OKAY ] - optional pointer to a block describing how
+ *  to extend the align-iterator record
+ *
+ *  "min_mapq" [ IN ] - minimum map quality value
+ */
+ALIGN_EXTERN rc_t CC AlignMgrMakeReferenceIterator ( struct AlignMgr const *self,
+    ReferenceIterator **iter, const PlacementRecordExtendFuncs *ext_1, int32_t min_mapq );
+
+
+/* AddRef
+ * Release
+ */
+ALIGN_EXTERN rc_t CC ReferenceIteratorAddRef ( const ReferenceIterator *self );
+ALIGN_EXTERN rc_t CC ReferenceIteratorRelease ( const ReferenceIterator *self );
+
+
+/* AddPlacementIterator
+ *  adds a placement iterator
+ *  used to provide ordered placements within window
+ */
+#if 0
+ALIGN_EXTERN rc_t CC ReferenceIteratorAddPlacementIterator
+    ( ReferenceIterator *self, PlacementIterator *pi );
+#endif
+
+/* AddPlacements
+ *  adds a source for placements (file/table)
+ *  used to provide ordered placements within window
+ */
+ALIGN_EXTERN rc_t CC ReferenceIteratorAddPlacements ( ReferenceIterator *self,
+    struct ReferenceObj const *ref_obj, INSDC_coord_zero ref_pos, INSDC_coord_len ref_len,
+    struct VCursor const *ref, struct VCursor const *align, align_id_src ids,
+    const char * spot_group );
+
+
+/* NextReference
+ *  advance to the next reference
+ */
+ALIGN_EXTERN rc_t CC ReferenceIteratorNextReference ( ReferenceIterator *self,
+    INSDC_coord_zero *first_pos, INSDC_coord_len *len, struct ReferenceObj const ** refobj );
+
+/* NextWindow
+ *  advance to the next window on the reference
+ */
+ALIGN_EXTERN rc_t CC ReferenceIteratorNextWindow ( ReferenceIterator *self,
+    INSDC_coord_zero *first_pos, INSDC_coord_len *len );
+
+/* NextSpotGroup
+ *  advance to the next spot_group on the reference
+ */
+ALIGN_EXTERN rc_t CC ReferenceIteratorNextSpotGroup ( ReferenceIterator *self,
+    const char ** name, size_t * len );
+
+
+/* NextPos
+ *  advance to the next position on current reference
+ *  resets internal iterator on placements at that position
+ */
+ALIGN_EXTERN rc_t CC ReferenceIteratorNextPos ( ReferenceIterator *self, bool skip_empty );
+
+
+/* Position
+ *  return current position on the reference
+ */
+ALIGN_EXTERN rc_t CC ReferenceIteratorPosition ( const ReferenceIterator *self,
+    INSDC_coord_zero *pos, uint32_t * depth, INSDC_4na_bin * base );
+
+
+/* NextPlacement
+ *  advance internal iterator to next placement in list
+ *  returns a pointer to the next placement object at current position
+ */
+ALIGN_EXTERN rc_t CC ReferenceIteratorNextPlacement ( ReferenceIterator *self,
+    const PlacementRecord **rec );
+
+
+/* State
+ *  return state of current placement at current position
+ */
+ALIGN_EXTERN int32_t CC ReferenceIteratorState ( const ReferenceIterator *self, INSDC_coord_zero *seq_pos );
+
+
+/* BasesInserted
+ *  return the number of inserted bases and a pointer to their values
+ *
+ *  "bases" [ OUT, NULL OKAY ] - optional output parameter to inserted bases
+ *
+ *  returns count of bases inserted at current position
+ */
+ALIGN_EXTERN uint32_t CC ReferenceIteratorBasesInserted ( const ReferenceIterator *self,
+    const INSDC_4na_bin **bases );
+
+
+/* BasesDeleted
+ *  return the number of bases deleted at the current position
+ *  also returns the location on the reference where the delete starts
+ *
+ *  "pos" [ OUT ] - return parameter for location on the reference
+ *  where delete starts, and continues for the number of bases given by function return
+ *
+ *  "bases" [ OUT, NULL OKAY ] - optional output parameter to deleted bases
+ *
+ *  returns count of bases deleted at current position
+ */
+ALIGN_EXTERN uint32_t CC ReferenceIteratorBasesDeleted ( const ReferenceIterator *self,
+    INSDC_coord_zero *pos, const INSDC_4na_bin **bases );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_align_iterator_ */
diff --git a/interfaces/align/manager.h b/interfaces/align/manager.h
new file mode 100644
index 0000000..4527f8a
--- /dev/null
+++ b/interfaces/align/manager.h
@@ -0,0 +1,69 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_align_manager_
+#define _h_align_manager_
+
+#ifndef _h_align_extern_
+#include <align/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * AlignMgr
+ *  manages the alignment module
+ */
+typedef struct AlignMgr AlignMgr;
+
+/* MakeRead
+ *  make for read-only operations
+ * MakeUpdate
+ *  make for read/write operations
+ */
+ALIGN_EXTERN rc_t CC AlignMgrMakeRead ( const AlignMgr **mgr );
+ALIGN_EXTERN rc_t CC AlignMgrMakeUpdate ( AlignMgr **mgr );
+
+
+/* AddRef
+ * Release
+ */
+ALIGN_EXTERN rc_t CC AlignMgrAddRef ( const AlignMgr *self );
+ALIGN_EXTERN rc_t CC AlignMgrRelease ( const AlignMgr *self );
+
+    
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_align_manager_ */
diff --git a/interfaces/align/qstat.vschema b/interfaces/align/qstat.vschema
new file mode 100644
index 0000000..d97c20b
--- /dev/null
+++ b/interfaces/align/qstat.vschema
@@ -0,0 +1,87 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/*==========================================================================
+ * VDB Quality Statistics Table
+ */
+version 1;
+
+include 'vdb/vdb.vschema';
+include 'ncbi/ncbi.vschema';
+
+table NCBI:align:tbl:qstat #1.0
+{
+    /* SPOT_GROUP
+     */
+    extern column < ascii > zip_encoding SPOT_GROUP;
+
+    /* CYCLE
+     *  machine cycle
+     */
+    extern column < U32 > izip_encoding CYCLE;
+
+    /* KMER
+     *  use dimer
+     */
+    extern column INSDC:dna:text KMER;
+
+    /* HPRUN
+     *  homopolymer run
+     *  number of bases of the same type preceding the current base
+     */
+    extern column < INSDC:coord:len > izip_encoding HPRUN;
+
+    /* GC_CONTENT
+     *  number of G's or C's in the 7 bases preceding the current base
+     */
+    extern column < U32 > izip_encoding GC_CONTENT;
+
+    /* ORIG_QUAL
+     *  original quality scores
+     */
+    extern column < INSDC:quality:phred > zip_encoding ORIG_QUAL;
+
+    /* MAX_QUAL
+     *  max. quality score in read
+     */
+    extern column < INSDC:quality:phred > zip_encoding MAX_QUAL;
+
+    /* NREAD
+     *  number of the read
+     */
+    extern column < U8 > zip_encoding NREAD;
+
+    /* TOTAL_COUNT
+     *  total count of observed events
+     */
+    extern column < U32 > izip_encoding TOTAL_COUNT;
+
+    /* MISMATCH_COUNT
+     *  count of observed mismatches
+     */
+    extern column < U32 > izip_encoding MISMATCH_COUNT;
+
+};
diff --git a/interfaces/align/quality-quantizer.h b/interfaces/align/quality-quantizer.h
new file mode 100644
index 0000000..223ffda
--- /dev/null
+++ b/interfaces/align/quality-quantizer.h
@@ -0,0 +1,49 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+
+#ifndef _h_align_quality_quantizer_
+#define _h_align_quality_quantizer_
+
+#ifndef _h_align_extern_
+#include <align/extern.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* InitMatrix
+ *  
+ *
+ */
+ALIGN_EXTERN bool CC QualityQuantizerInitMatrix(uint8_t result[256], char const initializer[]);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_align_quality_quantizer_ */
diff --git a/interfaces/align/reader-refseq.h b/interfaces/align/reader-refseq.h
index 443e0ee..e7c4ac1 100644
--- a/interfaces/align/reader-refseq.h
+++ b/interfaces/align/reader-refseq.h
@@ -50,7 +50,7 @@ ALIGN_EXTERN void CC TableReaderRefSeq_Whack(const TableReaderRefSeq* cself);
 
 ALIGN_EXTERN rc_t CC TableReaderRefSeq_SeqId(const TableReaderRefSeq* cself, const char** id, uint32_t* id_sz);
 
-ALIGN_EXTERN rc_t CC TableReaderRefSeq_SeqLength(const TableReaderRefSeq* cself, uint64_t* len);
+ALIGN_EXTERN rc_t CC TableReaderRefSeq_SeqLength(const TableReaderRefSeq* cself, INSDC_coord_len* len);
 
 ALIGN_EXTERN rc_t CC TableReaderRefSeq_Circular(const TableReaderRefSeq* cself, bool* circular);
 
@@ -60,8 +60,8 @@ ALIGN_EXTERN rc_t CC TableReaderRefSeq_MD5(const TableReaderRefSeq* cself, const
 /* read a chunk of refseq into buffer from offset up to offset + len
    if offset is beyond non-circular refseq size error is returned
  */
-ALIGN_EXTERN rc_t CC TableReaderRefSeq_Read(const TableReaderRefSeq* cself, int64_t offset, INSDC_coord_len len,
-                                            INSDC_dna_text* buffer, INSDC_coord_len* written);
+ALIGN_EXTERN rc_t CC TableReaderRefSeq_Read(const TableReaderRefSeq* cself, INSDC_coord_zero offset, INSDC_coord_len len,
+                                            uint8_t* buffer, INSDC_coord_len* written);
 #ifdef __cplusplus
 }
 #endif
diff --git a/interfaces/align/reference.h b/interfaces/align/reference.h
new file mode 100644
index 0000000..d105d44
--- /dev/null
+++ b/interfaces/align/reference.h
@@ -0,0 +1,150 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was readten as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_align_reader_reference_
+#define _h_align_reader_reference_
+
+#ifndef _h_align_extern_
+#include <align/extern.h>
+#endif
+
+#ifndef _h_vdb_cursor_
+#include <vdb/cursor.h>
+#endif
+
+#ifndef _h_vdb_table_
+#include <vdb/table.h>
+#endif
+
+#ifndef _h_vdb_database_
+#include <vdb/database.h>
+#endif
+
+#ifndef _h_vdb_manager_
+#include <vdb/manager.h>
+#endif
+
+#ifndef _h_align_iterator_
+#include <align/iterator.h>
+#endif
+
+#ifndef _h_insdc_insdc_
+#include <insdc/insdc.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct VCursor;
+struct PlacementIterator;
+
+enum ReferenceList_Options {
+    ereferencelist_4na = 0x01, /* READ in 4na, otherwise it is DNA */
+    /* next 3 options are used only if iterator is NOT created using existing cursor */
+    ereferencelist_usePrimaryIds = 0x02, /* read PRIMARY_ALIGNMENT_IDS too */
+    ereferencelist_useSecondaryIds = 0x04, /* read SECONDARY_ALIGNMENT_IDS too */
+    ereferencelist_useEvidenceIds = 0x08 /* use EVIDENCE_ALIGNMENT */
+};
+
+typedef struct ReferenceList ReferenceList;
+
+/** name is used to limit only to a single sequence - for quick lookups **/
+/** numbins is used to divide whole reference table in equi-row-bins and show only the bin where the name is falling to **/
+ALIGN_EXTERN rc_t CC ReferenceList_MakeCursor(const ReferenceList** cself, const VCursor* cursor, uint32_t options,
+                                              const char* name, const uint32_t numbins);
+
+ALIGN_EXTERN rc_t CC ReferenceList_MakeTable(const ReferenceList** cself, const VTable* table, uint32_t options,
+                                             size_t cache, const char* name, const uint32_t numbins);
+
+ALIGN_EXTERN rc_t CC ReferenceList_MakeDatabase(const ReferenceList** cself, const VDatabase* db, uint32_t options,
+                                                size_t cache, const char* name, const uint32_t numbins);
+
+ALIGN_EXTERN rc_t CC ReferenceList_MakePath(const ReferenceList** cself, const VDBManager* vmgr, const char* dbpath,
+                                            uint32_t options, size_t cache,const char *name, const uint32_t numbins);
+
+ALIGN_EXTERN rc_t CC ReferenceList_AddRef(const ReferenceList *cself);
+ALIGN_EXTERN void CC ReferenceList_Release(const ReferenceList* cself);
+
+/* number of items in the list */
+ALIGN_EXTERN rc_t CC ReferenceList_Count(const ReferenceList* cself, uint32_t* count);
+
+typedef struct ReferenceObj ReferenceObj;
+
+/* find object by SEQ_ID and if not found by NAME */
+ALIGN_EXTERN rc_t CC ReferenceList_Find(const ReferenceList* cself, const ReferenceObj** obj, const char* key, size_t key_sz);
+
+/* idx is 0-based */
+ALIGN_EXTERN rc_t CC ReferenceList_Get(const ReferenceList* cself, const ReferenceObj** obj, uint32_t idx);
+
+ALIGN_EXTERN rc_t ReferenceObj_AddRef(const ReferenceObj *cself);
+ALIGN_EXTERN void CC ReferenceObj_Release(const ReferenceObj* cself);
+
+/* internal idx for use in ReferenceList_Get above */
+ALIGN_EXTERN rc_t CC ReferenceObj_Idx(const ReferenceObj* cself, uint32_t* idx);
+/* Gets RowId range for the object */
+ALIGN_EXTERN rc_t CC ReferenceObj_IdRange(const ReferenceObj* cself, int64_t* start, int64_t* stop);
+/* Gets Current bin number if ReferenceList was binned*/
+ALIGN_EXTERN rc_t CC ReferenceObj_Bin(const ReferenceObj* cself, uint32_t* bin);
+
+ALIGN_EXTERN rc_t CC ReferenceObj_SeqId(const ReferenceObj* cself, const char** seqid);
+
+ALIGN_EXTERN rc_t CC ReferenceObj_Name(const ReferenceObj* cself, const char** name);
+
+ALIGN_EXTERN rc_t CC ReferenceObj_SeqLength(const ReferenceObj* cself, INSDC_coord_len* len);
+
+ALIGN_EXTERN rc_t CC ReferenceObj_Circular(const ReferenceObj* cself, bool* circular);
+
+/* check if actual refseq data is located in external table (external == true on return)
+   optionally obtain its path, returned path == NULL means actual refseq is missing
+   if path was requested and obtained caller must free(path)! */
+ALIGN_EXTERN rc_t CC ReferenceObj_External(const ReferenceObj* cself, bool* external, char** path);
+
+/* read a chunk of refseq into buffer from offset up to offset + len
+   if offset is beyond non-circular refseq size error is returned
+ */
+ALIGN_EXTERN rc_t CC ReferenceObj_Read(const ReferenceObj* cself, INSDC_coord_zero offset, INSDC_coord_len len,
+                                       uint8_t* buffer, INSDC_coord_len* written);
+
+ALIGN_EXTERN rc_t CC ReferenceObj_GetIdCount( const ReferenceObj* cself, int64_t row_id, uint32_t *count );
+
+/* return pointer to iterator for (PRIMARY|SECONDARY)_ALIGNMENT_IDS to a given range on reference,
+   both cursors could be NULL
+   ref_len will be truncated to seq length for non-circular references
+   for other parameters see AlignMgrMakePlacementIterator
+ */
+ALIGN_EXTERN rc_t CC ReferenceObj_MakePlacementIterator ( const ReferenceObj* cself,
+    PlacementIterator **iter,
+    INSDC_coord_zero ref_window_start,
+    INSDC_coord_len ref_window_len, int32_t min_mapq,
+    struct VCursor const *ref_cur, struct VCursor const *align_cur, align_id_src ids,
+    const PlacementRecordExtendFuncs *ext_0, const PlacementRecordExtendFuncs *ext_1,
+    const char * rd_group );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_align_reader_reference_ */
diff --git a/interfaces/align/refseq-mgr.h b/interfaces/align/refseq-mgr.h
index 936b0a7..bfa73ca 100644
--- a/interfaces/align/refseq-mgr.h
+++ b/interfaces/align/refseq-mgr.h
@@ -50,15 +50,17 @@ ALIGN_EXTERN rc_t CC RefSeqMgr_Make(const RefSeqMgr** cself, const VDBManager* v
 
 ALIGN_EXTERN rc_t CC RefSeqMgr_Release(const RefSeqMgr* cself);
 
-/* return value if 0 means object was found */
-ALIGN_EXTERN rc_t RefSeqMgr_Exists(const RefSeqMgr* cself, const char* accession, uint32_t accession_sz);
+ALIGN_EXTERN rc_t CC RefSeqMgr_SetCache(RefSeqMgr const *cself, size_t cache, uint32_t keep_open_num);
+
+/* return value if 0 means object was found, path is optional */
+ALIGN_EXTERN rc_t RefSeqMgr_Exists(const RefSeqMgr* cself, const char* accession, uint32_t accession_sz, char** path);
 
 /* Read from refseq ided by seq_id chunk of 'len' bases into provided 'buffer' (must be enough big for len);
    on return written has number of bases written
  */
 ALIGN_EXTERN rc_t CC RefSeqMgr_Read(const RefSeqMgr* cself, const char* seq_id, uint32_t seq_id_sz,
-                                    int64_t offset, INSDC_coord_len len,
-                                    INSDC_dna_text* buffer, INSDC_coord_len* written);
+                                    INSDC_coord_zero offset, INSDC_coord_len len,
+                                    uint8_t* buffer, INSDC_coord_len* written);
 
 typedef struct RefSeq RefSeq;
 
@@ -66,12 +68,12 @@ ALIGN_EXTERN rc_t CC RefSeqMgr_GetSeq(const RefSeqMgr* cmgr, const RefSeq** csel
 
 /* Same as RefSeqMgr_Read
  */
-ALIGN_EXTERN rc_t CC RefSeq_Read(const RefSeq* cself, int64_t offset, INSDC_coord_len len,
-                                 INSDC_dna_text* buffer, INSDC_coord_len* written);
+ALIGN_EXTERN rc_t CC RefSeq_Read(const RefSeq* cself, INSDC_coord_zero offset, INSDC_coord_len len,
+                                 uint8_t* buffer, INSDC_coord_len* written);
 
 ALIGN_EXTERN rc_t CC RefSeq_Circular(const RefSeq* cself, bool* circular);
 
-ALIGN_EXTERN rc_t CC RefSeq_SeqLength(const RefSeq* cself, uint64_t* len);
+ALIGN_EXTERN rc_t CC RefSeq_SeqLength(const RefSeq* cself, INSDC_coord_len* len);
 
 ALIGN_EXTERN rc_t CC RefSeq_MD5(const RefSeq* cself, const uint8_t** md5);
 
diff --git a/interfaces/align/refseq.vschema b/interfaces/align/refseq.vschema
new file mode 100644
index 0000000..7ea0dc8
--- /dev/null
+++ b/interfaces/align/refseq.vschema
@@ -0,0 +1,100 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/*==========================================================================
+ * VDB Reference Sequence types, functions and tables
+ */
+version 1;
+
+include 'vdb/vdb.vschema';
+include 'ncbi/seq.vschema';
+include 'ncbi/sra.vschema';
+include 'ncbi/stats.vschema';
+
+
+extern function U8 NCBI:refseq:stats #1 ( INSDC:4na:bin seq )
+    = NCBI:refSeq:stats;
+
+table NCBI:refseq:tbl:reference #1.0.2 =
+    NCBI:tbl:base_space #2.0.2,
+    NCBI:tbl:phred_quality #2.0.3,
+    NCBI:tbl:seqloc #1.0,
+    NCBI:SRA:tbl:stats #1.1.2
+{
+    // 128K
+    column default limit = 131072;
+
+    extern column U32 MAX_SEQ_LEN;                  /* must be static */
+    extern column < ascii > izip_encoding DEF_LINE; /* remainder of defline after SEQ_ID */
+
+    // trigger upconverts to INSDC:dna:text to get MD5
+    trigger table_stats
+        = NCBI:refseq:stats(in_4na_bin);
+
+    readonly column U64 TOTAL_SEQ_LEN
+        = < U64 > meta:value < 'STATS/TOTAL_SEQ_LEN', true >();
+        
+    readonly column U8[16] MD5
+        = < U8[16] > meta:read < 'STATS/MD5', true >();
+        
+    // indicates if sequence has circular structure
+    // should be static
+    extern column bool_encoding CIRCULAR;
+    
+    /* columns:
+     *  READ
+     *  QUALITY (optional)
+     *  SEQ_ID
+     *  SEQ_START
+     *  SEQ_LEN
+     *  MAX_SEQ_LEN
+     *  TOTAL_SEQ_LEN
+     *  DEF_LINE
+     */
+
+    // make CS_KEY writable
+    INSDC:dna:text in_cs_key
+        = < INSDC:dna:text, INSDC:dna:text > map < 'acgtn', 'ACGTN' > ( CS_KEY );
+    physical column < INSDC:dna:text > zip_encoding .CS_KEY = in_cs_key;
+    // extra columns needed for CS conversion
+    INSDC:coord:zero out_read_start = < INSDC:coord:zero> echo < 0 > ();
+    INSDC:coord:len  out_read_len =  .SEQ_LEN;
+    
+    INSDC:coord:len _alt_in_read_len
+        = READ_LEN
+        | SEQ_LEN;
+
+    INSDC:SRA:xread_type _alt_in_read_type
+        = READ_TYPE
+        | < INSDC:SRA:xread_type > echo < SRA_READ_TYPE_BIOLOGICAL > ();
+
+    INSDC:SRA:xread_type out_read_type
+        = .READ_TYPE
+        | < INSDC:SRA:xread_type > echo < SRA_READ_TYPE_BIOLOGICAL > ();
+};
+
+// older spelling
+alias NCBI:refseq:tbl:reference NCBI:refSeq:tbl:reference;
diff --git a/interfaces/align/seq.vschema b/interfaces/align/seq.vschema
new file mode 100644
index 0000000..9b2f452
--- /dev/null
+++ b/interfaces/align/seq.vschema
@@ -0,0 +1,300 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/*==========================================================================
+ * Sequence schema
+ */
+version 1;
+
+include 'vdb/vdb.vschema';
+include 'ncbi/seq.vschema';
+
+
+/* cmp_base_space
+ *  table representing compressed reads in base space,
+ *  where the bases are only stored for unaligned reads
+ */
+table NCBI:align:tbl:cmp_base_space #1
+    = INSDC:tbl:sequence #1.0.1
+    , NCBI:tbl:dcmp_base_space #1
+{
+    /* CMP_READ
+     *  read compressed against a reference sequence
+     */
+
+    // default is IUPAC character representation
+    extern default column INSDC:dna:text CMP_READ
+    {
+        read = out_cmp_dna_text;
+        validate = < INSDC:dna:text > compare ( in_cmp_dna_text, out_cmp_dna_text );
+    }
+
+    // 4na representation
+    extern column INSDC:4na:bin CMP_READ = out_cmp_4na_bin;
+    extern column INSDC:4na:packed CMP_READ = out_cmp_4na_packed;
+
+    // x2na representation - 2na with ambiguity
+    extern column INSDC:x2na:bin CMP_READ = out_cmp_x2na_bin;
+
+    // 2na representation - 2na with no ambiguity
+    extern column INSDC:2na:bin CMP_READ = out_cmp_2na_bin;
+    extern column INSDC:2na:packed CMP_READ = out_cmp_2na_packed;
+
+
+    /* input processing rules
+     */
+
+    // compressed input text
+    INSDC:dna:text in_cmp_dna_text
+        = < INSDC:dna:text, INSDC:dna:text > map < '.acmgrsvtwyhkdbn','NACMGRSVTWYHKDBN' > ( CMP_READ );
+
+    // compressed input 4na bin
+    INSDC:4na:bin in_cmp_4na_bin
+        = < INSDC:4na:bin > range_validate < 0, 15 > ( CMP_READ )
+        | ( INSDC:4na:bin ) unpack ( in_cmp_4na_packed )
+        | < INSDC:dna:text, INSDC:4na:bin > map < INSDC:4na:map:CHARSET, INSDC:4na:map:BINSET > ( in_cmp_dna_text )
+        | < INSDC:x2na:bin, INSDC:4na:bin > map < INSDC:x2na:map:BINSET, [ 1, 2, 4, 8, 15 ] > ( in_cmp_x2na_bin );
+
+    // compressed input 4na packed
+    INSDC:4na:packed in_cmp_4na_packed = CMP_READ;
+
+    // compressed input x2na bin
+    INSDC:x2na:bin in_cmp_x2na_bin
+        = < INSDC:x2na:bin > range_validate < 0, 4 > ( CMP_READ )
+        | < INSDC:4na:bin, INSDC:x2na:bin > map < INSDC:4na:map:BINSET, [ 4,0,1,4,2,4,4,4,3,4,4,4,4,4,4,4 ] > ( in_cmp_4na_bin );
+
+    // compressed input 2na bin
+    INSDC:2na:bin in_cmp_2na_bin
+        = < INSDC:2na:bin > range_validate < 0, 3 > ( CMP_READ )
+        | ( INSDC:2na:bin ) unpack ( in_cmp_2na_packed )
+        | INSDC:SEQ:rand_4na_2na ( in_cmp_4na_bin );
+
+    // compressed input 2na packed
+    INSDC:2na:packed in_cmp_2na_packed = CMP_READ;
+
+    // input 4na alt-read ( ambiguities )
+    INSDC:4na:bin in_cmp_alt_4na_bin
+        = < INSDC:4na:bin, INSDC:4na:bin > map < INSDC:4na:map:BINSET, [ 15,0,0,3,0,5,6,7,0,9,10,11,12,13,14,15 ] > ( in_cmp_4na_bin );
+
+    // preparing a feed into stats column
+    U8 in_cmp_stats_bin = in_cmp_2na_bin;
+
+
+    /* physical columns
+     */
+
+    physical column INSDC:2na:packed .CMP_READ
+        = in_cmp_2na_packed
+        | ( INSDC:2na:packed ) pack ( in_cmp_2na_bin );
+
+    physical column < INSDC:4na:bin > zip_encoding .CMP_ALTREAD
+        = < INSDC:4na:bin > trim < 0, 0 > ( in_cmp_alt_4na_bin );
+
+
+    /* output processing rules
+     */
+
+    // output 2na packed
+    INSDC:2na:packed out_cmp_2na_packed = .CMP_READ;
+
+    // unambiguous unpacked 2na
+    INSDC:2na:bin out_cmp_2na_bin
+        = ( INSDC:2na:bin ) unpack ( out_cmp_2na_packed );
+
+    // output x2na bin
+    INSDC:x2na:bin out_cmp_x2na_bin
+        = < INSDC:4na:bin, INSDC:x2na:bin > map < INSDC:4na:map:BINSET, [ 4,0,1,4,2,4,4,4,3,4,4,4,4,4,4,4 ] > ( out_cmp_4na_bin );
+
+    // output 2na->4na bin
+    INSDC:4na:bin out_cmp_2na_4na_bin
+        = < INSDC:2na:bin, INSDC:4na:bin > map < INSDC:2na:map:BINSET, [ 1, 2, 4, 8 ] > ( out_cmp_2na_bin );
+
+    // output 4na bin
+    INSDC:4na:bin out_cmp_4na_bin
+        = < INSDC:4na:bin > bit_or < ALIGN_RIGHT > ( out_cmp_2na_4na_bin, .CMP_ALTREAD )
+        | out_cmp_2na_4na_bin;
+
+    // synthesized packed 4na
+    INSDC:4na:packed out_cmp_4na_packed
+        = ( INSDC:4na:packed ) pack ( out_cmp_4na_bin );
+
+    // output text
+    INSDC:dna:text out_cmp_dna_text
+        = < INSDC:4na:bin, INSDC:dna:text > map < INSDC:4na:map:BINSET, INSDC:4na:map:CHARSET > ( out_cmp_4na_bin );
+
+
+    /* decompressed sequences
+     *   source is out_dcmp_4na_bin - a virtual production
+     */
+
+    // synthesize x2na_bin, 2na_bin and 2na_packed
+    INSDC:x2na:bin out_dcmp_x2na_bin
+        = < INSDC:4na:bin, INSDC:x2na:bin > map < INSDC:4na:map:BINSET, [ 4,0,1,4,2,4,4,4,3,4,4,4,4,4,4,4 ] > ( out_dcmp_4na_bin );
+    INSDC:2na:bin out_dcmp_2na_bin
+        = < INSDC:x2na:bin, INSDC:2na:bin > map < [ 0,1,2,3,4 ], [ 0,1,2,3,0 ] > ( out_dcmp_x2na_bin );
+    INSDC:2na:packed out_dcmp_2na_packed
+        = ( INSDC:2na:packed ) pack ( out_dcmp_2na_bin );
+
+
+	/* INSDC:tbl:sequence inherited productions
+	 *  cs_native
+	 *  out_cs_key
+	 *  out_signal
+	 *  out_2cs_bin
+	 *  out_2na_bin
+	 *  out_4na_bin
+	 *  out_dna_text
+	 *  out_x2cs_bin
+	 *  out_x2na_bin
+	 *  out_2cs_packed
+	 *  out_2na_packed
+	 *  out_4na_packed
+	 *  out_color_text
+	 *  out_color_matrix
+	 */
+
+	/* NCBI:tbl:dcmp_base_space inherited productions
+	 *  out_dcmp_4na_bin
+	 */
+}
+
+
+/* cmp_color_space
+ *  table representing compressed reads in color space,
+ *  where the colors are only stored for unaligned reads
+ */
+table NCBI:align:tbl:cmp_color_space #1 =
+    INSDC:tbl:sequence #1.0.1, NCBI:tbl:dcmp_color_space #1
+{
+    /* CMP_CSREAD
+     *  read compressed against a reference sequence
+     */
+
+    // default is IUPAC character representation
+    extern default column INSDC:color:text CMP_CSREAD = out_cmp_color_text;
+
+    // x2cs representation - 2cs with ambiguity
+    extern column INSDC:x2cs:bin CMP_CSREAD = out_cmp_x2cs_bin;
+
+    // 2cs representation - 2cs with no ambiguity
+    extern column INSDC:2cs:bin CMP_CSREAD = out_cmp_2cs_bin;
+    extern column INSDC:2cs:packed CMP_CSREAD = out_cmp_2cs_packed;
+
+
+    /* input processing rules
+     */
+
+    // compressed input text
+    INSDC:color:text in_cmp_color_text = CMP_CSREAD;
+
+    // compressed input x2cs bin
+    INSDC:x2cs:bin in_cmp_x2cs_bin
+        = < INSDC:x2cs:bin > range_validate < 0, 4 > ( CMP_CSREAD )
+        | < INSDC:color:text, INSDC:x2cs:bin > map < INSDC:x2cs:map:CHARSET, INSDC:x2cs:map:BINSET > ( in_cmp_color_text );
+
+    // compressed input 2cs bin
+    INSDC:2cs:bin in_cmp_2cs_bin
+        = < INSDC:2cs:bin > range_validate < 0, 3 > ( CMP_CSREAD )
+        | ( INSDC:2cs:bin ) unpack ( in_cmp_2cs_packed )
+        | < INSDC:x2cs:bin, INSDC:2cs:bin > map < INSDC:x2cs:map:BINSET, [ 0, 1, 2, 3, 0 ] > ( in_cmp_x2cs_bin );
+
+    // compressed input 2cs packed
+    INSDC:2cs:packed in_cmp_2cs_packed = CMP_CSREAD;
+
+    // compressed input x2cs alt-read ( ambiguities )
+    INSDC:x2cs:bin in_cmp_alt_x2cs_bin
+        = < INSDC:x2cs:bin, INSDC:x2cs:bin > map < INSDC:x2cs:map:BINSET, [ 0, 0, 0, 0, 4 ] > ( in_cmp_x2cs_bin );
+
+    // preparing a feed into stats column
+    U8 in_cmp_stats_bin = in_cmp_2cs_bin;
+
+
+    /* physical columns
+     */
+
+    physical column INSDC:2cs:packed .CMP_CSREAD
+        = in_cmp_2cs_packed
+        | ( INSDC:2cs:packed ) pack ( in_cmp_2cs_bin );
+
+    physical column < INSDC:x2cs:bin > zip_encoding .CMP_ALTCSREAD
+        = < INSDC:x2cs:bin > trim < 0, 0 > ( in_cmp_alt_x2cs_bin );
+
+
+    /* output processing rules
+     */
+
+    // compressed output 2cs packed
+    INSDC:2cs:packed out_cmp_2cs_packed = .CMP_CSREAD;
+
+    // unambiguous unpacked 2cs
+    INSDC:2cs:bin out_cmp_2cs_bin
+        = ( INSDC:2cs:bin ) unpack ( out_cmp_2cs_packed );
+
+    // unpacked 2cs with ambiguity
+    INSDC:x2cs:bin out_cmp_x2cs_bin
+        = ( INSDC:x2cs:bin ) < U8 > bit_or < ALIGN_RIGHT > ( out_cmp_2cs_bin, .CMP_ALTCSREAD )
+        | ( INSDC:x2cs:bin ) out_cmp_2cs_bin;
+
+    // output text
+    INSDC:color:text out_cmp_color_text
+        = < INSDC:x2cs:bin, INSDC:color:text > map <  INSDC:x2cs:map:BINSET, INSDC:x2cs:map:CHARSET > ( out_cmp_x2cs_bin );
+
+
+    /* decompressed sequences
+     *   sources are out_dcmp_x2cs_bin - virtual production
+     */
+
+    // synthesize 2cs_bin and 2cs_packed
+    INSDC:2cs:bin out_dcmp_2cs_bin
+        = < INSDC:x2cs:bin, INSDC:2cs:bin > map < [ 0,1,2,3,4 ], [ 0,1,2,3,0 ] > ( out_dcmp_x2cs_bin );
+    INSDC:2cs:packed out_dcmp_2cs_packed
+        = ( INSDC:2cs:packed ) pack ( out_dcmp_2cs_bin );
+
+
+	/* INSDC:tbl:sequence inherited productions
+	 *  cs_native
+	 *  out_cs_key
+	 *  out_signal
+	 *  out_2cs_bin
+	 *  out_2na_bin
+	 *  out_4na_bin
+	 *  out_dna_text
+	 *  out_x2cs_bin
+	 *  out_x2na_bin
+	 *  out_2cs_packed
+	 *  out_2na_packed
+	 *  out_4na_packed
+	 *  out_color_text
+	 *  out_qual_phred
+	 *  out_color_matrix
+	 *  out_qual_text_phred_33
+	 *  out_qual_text_phred_64
+	 */
+
+	/* NCBI:tbl:dcmp_color_space inherited productions
+	 *  out_dcmp_x2cs_bin
+	 */
+}
diff --git a/interfaces/align/writer-alignment.h b/interfaces/align/writer-alignment.h
index 5f616a4..a52db48 100644
--- a/interfaces/align/writer-alignment.h
+++ b/interfaces/align/writer-alignment.h
@@ -59,7 +59,9 @@ enum ETableWriterAlgn_ColNames {
     ewalgn_cn_HAS_REF_OFFSET,
     ewalgn_cn_MISMATCH,
     ewalgn_cn_REF_OFFSET,
-    ewalgn_cn_Last = ewalgn_cn_REF_OFFSET
+    ewalgn_cn_EVIDENCE_ALIGNMENT_IDS,
+    ewalgn_cn_ALIGN_GROUP,
+    ewalgn_cn_Last = ewalgn_cn_ALIGN_GROUP
 };
 
 typedef uint8_t ETableWriterAlgn_TableType;
@@ -74,7 +76,8 @@ enum ETableWriterAlgn_ColOptions {
     ewalgn_co_SEQ_SPOT_ID = 0x01,   /* SEQ_SPOT_ID will be written with the whole record */
     ewalgn_co_TMP_KEY_ID = 0x02,    /* use TMP_KEY_ID column, by default not opened */
     ewalgn_co_PLOIDY = 0x04,        /* ploidy is more than 1, columns PLOIDY, READ_START, READ_LEN needs data */
-    ewalgn_co_unsorted = 0x08       /* use the unsorted table scheme */
+    ewalgn_co_unsorted = 0x08,       /* use the unsorted table scheme */
+    ewalgn_co_MATE_ALIGN_ID_only = 0x10 /* disable all other MATE_* columns */
 };
 
 typedef struct TableWriterAlgnData_struct {
@@ -83,27 +86,29 @@ typedef struct TableWriterAlgnData_struct {
     TableWriterData seq_read_id;
     TableWriterData tmp_key_id;
 
-    /* filled out by ReferenceMgr_Compress */
-    uint32_t ploidy; /* incremented sequentially for each call, set it to 0 for each new spot */
-    TableWriterData read_start;
-    TableWriterData read_len;
-    TableWriterData has_ref_offset;
-    TableWriterData ref_offset;
-    TableWriterData ref_id; /* unsorted */
-    TableWriterData ref_start; /* unsorted */
-    TableWriterData global_ref_start; /* sorted */
-    /* not used for secondary and evidence alignment table type */
-    TableWriterData has_mismatch; 
-    TableWriterData mismatch;
+    /* BEGIN filled out by ReferenceMgr_Compress */
+    uint32_t ploidy; /* incremented sequentially for each call, must be set to 0 for each new spot */
+    TableWriterData read_start; /* mandatory */
+    TableWriterData read_len; /* mandatory */
+    TableWriterData has_ref_offset; /* mandatory */
+    TableWriterData ref_offset; /* mandatory */
+    TableWriterData ref_id; /* used for unsorted*/
+    TableWriterData ref_start; /* used only for unsorted */
+    TableWriterData global_ref_start; /* used only for sorted */
+    TableWriterData has_mismatch;  /* mandatory only for primary */
+    TableWriterData mismatch; /* mandatory only for primary */
+
+    INSDC_coord_len ref_len; /* projection on refseq is same for all alleles! */
     /* tmp data, never saved to db */
-    TableWriterData effective_offset; /* recalculated based on CIGAR and circularity in Compression */
-    TableWriterData ref_len;
-    TableWriterData ref_1st_row_id;
-    /* filled out by ReferenceMgr_Compress end */
+    /* recalculated offset in reference based on CIGAR and circularity in Compression */
+    INSDC_coord_zero effective_offset; 
+    int64_t ref_1st_row_id;
+    /* END filled out by ReferenceMgr_Compress */
 
     TableWriterData ref_orientation;
     TableWriterData ref_ploidy;
     TableWriterData mapq;
+    TableWriterData align_group; /* set length to 0 if not used */
 
     /* used only only in secondary */
     TableWriterData mate_ref_orientation;
@@ -111,6 +116,9 @@ typedef struct TableWriterAlgnData_struct {
     TableWriterData mate_ref_pos;
     TableWriterData mate_align_id;
     TableWriterData template_len;
+
+    /* used only in for ewalgn_tabletype_EvidenceInterval table type */
+    TableWriterData alingment_ids;
 } TableWriterAlgnData;
 
 typedef struct TableWriterAlgn TableWriterAlgn;
@@ -133,14 +141,11 @@ ALIGN_EXTERN rc_t CC TableWriterAlgn_Write(const TableWriterAlgn* cself, const T
 ALIGN_EXTERN rc_t CC TableWriterAlgn_TmpKeyStart(const TableWriterAlgn* cself);
 
 /* retrieve TMP_KEY value by rowid */
-ALIGN_EXTERN rc_t CC TableWriterAlgn_TmpKey(const TableWriterAlgn* cself, int64_t rowid, uint32_t* key_id);
+ALIGN_EXTERN rc_t CC TableWriterAlgn_TmpKey(const TableWriterAlgn* cself, int64_t rowid, uint64_t* key_id);
 
 /* assign a SPOT_ID value to row */
 ALIGN_EXTERN rc_t CC TableWriterAlgn_Write_SpotId(const TableWriterAlgn* cself, int64_t rowid, int64_t spot_id);
 
-/* utillity function */
-ALIGN_EXTERN rc_t CC TableWriterAlgn_ReverseCompliment(const INSDC_dna_text* seq, INSDC_dna_text* cmpl, uint32_t len);
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/interfaces/align/writer-reference.h b/interfaces/align/writer-reference.h
index 74dd22a..cfdca83 100644
--- a/interfaces/align/writer-reference.h
+++ b/interfaces/align/writer-reference.h
@@ -39,9 +39,12 @@
 extern "C" {
 #endif
 
+struct KFile;
+
 enum EReference_Options {
     ewrefmgr_co_allREADs = 0x01, /* always write READ */
-    ewrefmgr_co_Coverage = 0x02  /* use coverage data, by default not used */
+    ewrefmgr_co_Coverage = 0x02,  /* use coverage data, by default not used */
+    ewrefmgr_co_AcceptHardClip = 0x04 /* accept hard clipping in CIGAR */
 };
 
 typedef struct ReferenceMgr ReferenceMgr;
@@ -62,51 +65,69 @@ ALIGN_EXTERN rc_t CC ReferenceMgr_Make(const ReferenceMgr** cself, VDatabase* db
                                        const uint32_t options, const char* conf, const char* path, uint32_t max_seq_len,
                                        size_t cache, uint32_t num_open);
 
-ALIGN_EXTERN rc_t CC ReferenceMgr_Release(const ReferenceMgr* cself, bool commit, uint64_t* rows, bool build_coverage);
+ALIGN_EXTERN rc_t CC ReferenceMgr_Release(const ReferenceMgr* cself, bool commit, uint64_t* const rows, bool build_coverage);
+
+ALIGN_EXTERN rc_t CC ReferenceMgr_SetCache(ReferenceMgr const *const self, size_t cache, uint32_t num_open);
 
 typedef struct ReferenceSeq ReferenceSeq;
 
 /* id: chr12 or NC_000001.3 */
-ALIGN_EXTERN rc_t CC ReferenceMgr_GetSeq(const ReferenceMgr* cself, const ReferenceSeq** seq, const char* id);
+ALIGN_EXTERN rc_t CC ReferenceMgr_GetSeq(const ReferenceMgr* const cself, const ReferenceSeq** const seq, const char* id);
+
+ALIGN_EXTERN rc_t CC ReferenceMgr_Verify(const ReferenceMgr* cself, const char* id, INSDC_coord_len length, const uint8_t md5[16]);
 
-ALIGN_EXTERN rc_t CC ReferenceMgr_Verify(const ReferenceMgr* cself, const char* id, uint64_t length, const uint8_t md5[16]);
+ALIGN_EXTERN rc_t CC ReferenceMgr_FastaPath(const ReferenceMgr* cself, const char* fasta_path);
+
+ALIGN_EXTERN rc_t CC ReferenceMgr_FastaFile(const ReferenceMgr* cself, struct KFile const* file);
 
 enum EReference_CompressionOptions {
     ewrefmgr_cmp_Binary = 0x01, /* binary cigar on input (BAM format: 28+4 bits) */
-    ewrefmgr_cmp_NoMismatch = 0x02  /* do not fill out MISMATCH data */
+    ewrefmgr_cmp_Exact = 0x02 /* exact matching no cliping */
 };
 
 ALIGN_EXTERN rc_t CC ReferenceMgr_Compress(const ReferenceMgr* cself, uint32_t options,
-                                           const char* id, int64_t offset,
+                                           const char* id, INSDC_coord_zero offset,
                                            const char* seq, INSDC_coord_len seq_len,
                                            const void* cigar, uint32_t cigar_len,
+                                           INSDC_coord_zero allele_offset, const char* allele, INSDC_coord_len allele_len,INSDC_coord_zero offset_in_allele,
+                                           const void* allele_cigar, uint32_t allele_cigar_len,
                                            TableWriterAlgnData* data);
 
 /* Read refseq chunk of 'len' bases into provided 'buffer' (must be enough big for len);
    ref_len - on return has number of bases written to the buffer
  */
-ALIGN_EXTERN rc_t CC ReferenceSeq_Read(const ReferenceSeq* cself, int64_t offset, INSDC_coord_len len,
-                                       INSDC_dna_text* buffer, INSDC_coord_len* ref_len);
+ALIGN_EXTERN rc_t CC ReferenceSeq_Read(const ReferenceSeq* cself, INSDC_coord_zero offset, INSDC_coord_len len,
+                                       uint8_t* buffer, INSDC_coord_len* ref_len);
 
 ALIGN_EXTERN rc_t CC ReferenceSeq_Get1stRow(const ReferenceSeq* cself, int64_t* row_id);
 
 ALIGN_EXTERN rc_t CC ReferenceSeq_Compress(const ReferenceSeq* cself, uint32_t options,
-                                           int64_t offset,
+                                           INSDC_coord_zero offset,
                                            const char* seq, INSDC_coord_len seq_len,
                                            const void* cigar, uint32_t cigar_len,
+                                           INSDC_coord_zero allele_offset, const char* allele, INSDC_coord_len allele_len,INSDC_coord_zero offset_in_allele,
+                                           const void* allele_cigar, uint32_t allele_cigar_len,
                                            TableWriterAlgnData* data);
 
+enum ReferenceSeqCoverageTableType {
+    ewrefcov_primary_table = 0,
+    ewrefcov_secondary_table,
+    ewrefcov_evidence_table
+};
 
 typedef struct ReferenceSeqCoverage_struct {
+    /* based only on primary and secondary */
     uint8_t high;
     uint8_t low;
     uint32_t mismatches;
     uint32_t indels;
-    TableWriterData primary_ids;
-    TableWriterData secondary_ids;
+    /* in that order (use enum above): prim, 2nd, evidence */
+    INSDC_coord_zero overlap_ref_pos[3];
+    INSDC_coord_len overlap_ref_len[3];
+    TableWriterData ids[3];
 } ReferenceSeqCoverage;
 
-ALIGN_EXTERN rc_t CC ReferenceSeq_AddCoverage(const ReferenceSeq* cself, int64_t offset, const ReferenceSeqCoverage* data);
+ALIGN_EXTERN rc_t CC ReferenceSeq_AddCoverage(const ReferenceSeq* cself, INSDC_coord_zero offset, const ReferenceSeqCoverage* data);
 
 ALIGN_EXTERN rc_t CC ReferenceSeq_Release(const ReferenceSeq* cself);
 
diff --git a/interfaces/align/writer-refseq.h b/interfaces/align/writer-refseq.h
index 0dedcbd..6a12d09 100644
--- a/interfaces/align/writer-refseq.h
+++ b/interfaces/align/writer-refseq.h
@@ -68,8 +68,10 @@ typedef struct TableWriterRefSeq TableWriterRefSeq;
 ALIGN_EXTERN rc_t CC TableWriterRefSeq_Make(const TableWriterRefSeq** cself, VDBManager* mgr, const char* schema_path,
                                             const char* table_path, const uint32_t options);
 
-/* rows optional here */
-ALIGN_EXTERN rc_t CC TableWriterRefSeq_Whack(const TableWriterRefSeq* cself, bool commit, uint64_t* rows);
+/* rows optional here, app signature is mandatory */
+ALIGN_EXTERN rc_t CC TableWriterRefSeq_Whack(const TableWriterRefSeq* cself, bool commit, uint64_t* rows,
+                                             const char* argv0, const char* argv0_date,
+                                             const char* app_name, ver_t app_version);
 
 ALIGN_EXTERN rc_t CC TableWriterRefSeq_WriteDefault(const TableWriterRefSeq* cself,
                                                     enum ETableWriterRefSeq_ColNames col, const TableWriterData* data);
diff --git a/interfaces/align/writer-sequence.h b/interfaces/align/writer-sequence.h
index a0cfbc5..3282b07 100644
--- a/interfaces/align/writer-sequence.h
+++ b/interfaces/align/writer-sequence.h
@@ -53,7 +53,8 @@ enum ETableWriterSeq_ColNames {
     ewseq_cn_TMP_KEY_ID,
     ewseq_cn_SPOT_GROUP,
     ewseq_cn_READ_FILTER,
-    ewseq_cn_Last = ewseq_cn_READ_FILTER
+    ewseq_cn_TI,
+    ewseq_cn_Last = ewseq_cn_TI
 };
 
 enum ETableWriterSeq_ColOptions {
@@ -61,8 +62,9 @@ enum ETableWriterSeq_ColOptions {
     ewseq_co_FullQuality = 0x02, /* write full quality values, by default [1,10,20,30] */
     ewseq_co_AlignData = 0x04,   /* PRIMARY_ALIGNMENT_ID, ALIGNMENT_COUNT will be written with the whole record */
     ewseq_co_NoLabelData = 0x08, /* LABEL and related columns will not be written */
-    ewseq_co_ColorSpace = 0x10,   /* CMP_CSREAD will be written instead of CMP_READ */
-    ewseq_co_SpotGroup = 0x20   /* SPOT_GROUP will be written */
+    ewseq_co_ColorSpace = 0x10,  /* CMP_CSREAD will be written instead of CMP_READ */
+    ewseq_co_SpotGroup = 0x20,   /* SPOT_GROUP will be written */
+    ewseq_co_TI = 0x40           /* TI will be written */
 };
 
 typedef struct TableWriterSeqData_struct {
@@ -77,10 +79,13 @@ typedef struct TableWriterSeqData_struct {
     TableWriterData read_type;
     TableWriterData read_start;
     TableWriterData read_len;
-    uint32_t tmp_key_id;
+    uint64_t tmp_key_id;
     TableWriterData spot_group;
     TableWriterData cskey;
     TableWriterData read_filter;
+    TableWriterData no_quantize_mask;
+    TableWriterData platform;
+    TableWriterData ti;
 } TableWriterSeqData;
 
 typedef struct TableWriterSeq TableWriterSeq;
@@ -129,8 +134,9 @@ ALIGN_EXTERN rc_t CC TableWriterSeq_Write(const TableWriterSeq* cself, const Tab
 ALIGN_EXTERN rc_t CC TableWriterSeq_TmpKeyStart(const TableWriterSeq* cself);
 
 /* retrieve TMP_KEY value by rowid */
-ALIGN_EXTERN rc_t CC TableWriterSeq_TmpKey(const TableWriterSeq* cself, int64_t rowid, uint32_t *key_id);
+ALIGN_EXTERN rc_t CC TableWriterSeq_TmpKey(const TableWriterSeq* cself, int64_t rowid, uint64_t *key_id);
 
+/* passing rowid == 0 will cause the cursor to be flushed */
 ALIGN_EXTERN rc_t CC TableWriterSeq_WriteAlignmentData(const TableWriterSeq* cself, int64_t rowid,
                                                        const TableWriterData* primary_alignment_id,
                                                        const TableWriterData* alignment_count);
diff --git a/interfaces/cc/gcc/i386/atomic.h b/interfaces/cc/gcc/i386/atomic.h
index 111462a..f0abfc2 100644
--- a/interfaces/cc/gcc/i386/atomic.h
+++ b/interfaces/cc/gcc/i386/atomic.h
@@ -35,6 +35,7 @@
 extern "C" {
 #endif
 
+typedef int atomic_int;
 typedef struct atomic32_t atomic_t;
 
 /* ( * v ) */
diff --git a/interfaces/cc/gcc/i386/fmtdef.h b/interfaces/cc/gcc/i386/fmtdef.h
deleted file mode 100644
index d51c88f..0000000
--- a/interfaces/cc/gcc/i386/fmtdef.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#ifndef _h_fmtdef_
-#define _h_fmtdef_
-
-/* int64_t is "long long int" in 32 bit */
-#define LD64 "lld"
-#define LU64 "llu"
-#define LX64 "llX"
-#define Lx64 "llx"
-
-/* size_t is traditionally "unsigned int"
-   although it should have been "long unsigned int" */
-#define LUSZ "u"
-#define LXSZ "X"
-#define LxSZ "x"
-
-#endif /* _h_fmtdef_ */
diff --git a/interfaces/cc/gcc/noarch/bitstr.h b/interfaces/cc/gcc/noarch/bitstr.h
index b28ec12..2bb5bd0 100644
--- a/interfaces/cc/gcc/noarch/bitstr.h
+++ b/interfaces/cc/gcc/noarch/bitstr.h
@@ -41,19 +41,19 @@
 extern "C" {
 #endif
 
-/* bitcpy                                                                                                                                                                                                    
- *  copy a string of bits from source to dest                                                                                                                                                                
- *                                                                                                                                                                                                           
- *  both source and dest may have non-byte aligned pointers                                                                                                                                                  
- *  the number of bits to copy need not be byte aligned                                                                                                                                                      
- *                                                                                                                                                                                                           
- *  depending upon architecture and OS conventions, the word                                                                                                                                                 
- *  size may be adjusted to 1, 2, or 4 bytes, where the base                                                                                                                                                 
- *  pointers are always word aligned.                                                                                                                                                                        
- *                                                                                                                                                                                                           
- *  bits in memory are always treated as big-endian, meaning                                                                                                                                                 
- *  that on multi-byte fetches and stores, we perform byte-swapping                                                                                                                                          
- *  if there are shifts or masks                                                                                                                                                                             
+/* bitcpy
+ *  copy a string of bits from source to dest
+ *
+ *  both source and dest may have non-byte aligned pointers
+ *  the number of bits to copy need not be byte aligned
+ *
+ *  depending upon architecture and OS conventions, the word
+ *  size may be adjusted to 1, 2, or 4 bytes, where the base
+ *  pointers are always word aligned.
+ *
+ *  bits in memory are always treated as big-endian, meaning
+ *  that on multi-byte fetches and stores, we perform byte-swapping
+ *  if there are shifts or masks
  */
 static __inline__
 void bitcpy ( void *dbase, bitsz_t doff, const void *sbase, bitsz_t soff, bitsz_t sz )
@@ -155,7 +155,8 @@ void bitcpy ( void *dbase, bitsz_t doff, const void *sbase, bitsz_t soff, bitsz_
                 for ( acc <<= WRDSIZE, i = 0; i < scountz; acc <<= WRDSIZE )
                 {
                     dst [ i ] = BSWAP ( reg );
-                    acc |= BSWAP ( src [ ++ i ] );
+                    ++ i;
+                    acc |= BSWAP ( src [ i ] );
                     reg = ( WRD ) ( acc >> shift );
                 }
 
diff --git a/interfaces/cc/gcc/v128.h b/interfaces/cc/gcc/v128.h
new file mode 100644
index 0000000..e16e31b
--- /dev/null
+++ b/interfaces/cc/gcc/v128.h
@@ -0,0 +1,1088 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_v128_
+#define _h_v128_
+
+#include <stdint.h>
+#include <x86intrin.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef int8_t   v128_i8_t  __attribute__ ((vector_size (16),__may_alias__));
+typedef uint8_t  v128_u8_t  __attribute__ ((vector_size (16),__may_alias__));
+typedef int16_t  v128_i16_t __attribute__ ((vector_size (16),__may_alias__));
+typedef int32_t  v128_i32_t __attribute__ ((vector_size (16),__may_alias__));
+typedef int64_t  v128_i64_t __attribute__ ((vector_size (16),__may_alias__));
+typedef uint16_t v128_u16_t __attribute__ ((vector_size (16),__may_alias__));
+typedef uint32_t v128_u32_t __attribute__ ((vector_size (16),__may_alias__));
+typedef uint64_t v128_u64_t __attribute__ ((vector_size (16),__may_alias__));
+typedef float    v128_f_t   __attribute__ ((vector_size (16),__may_alias__));
+typedef double   v128_d_t   __attribute__ ((vector_size (16),__may_alias__));
+
+/* NOTE:
+ * these types are to hide perceived flaws in the Intel/GCC code
+ * don't use them outside of this file.  uint8_t, int8_t and int64_t all
+ * fail to compile so the above types can't be used within this file in some 
+ * places.
+ */
+typedef char          v128_c_t   __attribute__ ((vector_size (16),__may_alias__));
+typedef long long int v128_lli_t __attribute__ ((vector_size (16),__may_alias__));
+
+
+#if USE_VEC_REG
+
+/* SSE
+  movss
+  movaps
+  movups
+  movlps
+  movhps
+  movlhps
+  movhlps
+*/
+
+#ifdef __MMX__
+/* MMX
+   v8qi __builtin_ia32_paddb (v8qi, v8qi)
+   v4hi __builtin_ia32_paddw (v4hi, v4hi)
+   v2si __builtin_ia32_paddd (v2si, v2si)
+   v8qi __builtin_ia32_psubb (v8qi, v8qi)
+   v4hi __builtin_ia32_psubw (v4hi, v4hi)
+   v2si __builtin_ia32_psubd (v2si, v2si)
+   v8qi __builtin_ia32_paddsb (v8qi, v8qi)
+   v4hi __builtin_ia32_paddsw (v4hi, v4hi)
+   v8qi __builtin_ia32_psubsb (v8qi, v8qi)
+   v4hi __builtin_ia32_psubsw (v4hi, v4hi)
+   v8qi __builtin_ia32_paddusb (v8qi, v8qi)
+   v4hi __builtin_ia32_paddusw (v4hi, v4hi)
+   v8qi __builtin_ia32_psubusb (v8qi, v8qi)
+   v4hi __builtin_ia32_psubusw (v4hi, v4hi)
+   v4hi __builtin_ia32_pmullw (v4hi, v4hi)
+   v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
+   di __builtin_ia32_pand (di, di)
+   di __builtin_ia32_pandn (di,di)
+   di __builtin_ia32_por (di, di)
+   di __builtin_ia32_pxor (di, di)
+   v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
+   v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
+   v2si __builtin_ia32_pcmpeqd (v2si, v2si)
+   v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
+   v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
+   v2si __builtin_ia32_pcmpgtd (v2si, v2si)
+   v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
+   v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
+   v2si __builtin_ia32_punpckhdq (v2si, v2si)
+   v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
+   v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
+   v2si __builtin_ia32_punpckldq (v2si, v2si)
+   v8qi __builtin_ia32_packsswb (v4hi, v4hi)
+   v4hi __builtin_ia32_packssdw (v2si, v2si)
+   v8qi __builtin_ia32_packuswb (v4hi, v4hi)
+     
+   v4hi __builtin_ia32_psllw (v4hi, v4hi)
+   v2si __builtin_ia32_pslld (v2si, v2si)
+   v1di __builtin_ia32_psllq (v1di, v1di)
+   v4hi __builtin_ia32_psrlw (v4hi, v4hi)
+   v2si __builtin_ia32_psrld (v2si, v2si)
+   v1di __builtin_ia32_psrlq (v1di, v1di)
+   v4hi __builtin_ia32_psraw (v4hi, v4hi)
+   v2si __builtin_ia32_psrad (v2si, v2si)
+   v4hi __builtin_ia32_psllwi (v4hi, int)
+   v2si __builtin_ia32_pslldi (v2si, int)
+   v1di __builtin_ia32_psllqi (v1di, int)
+   v4hi __builtin_ia32_psrlwi (v4hi, int)
+   v2si __builtin_ia32_psrldi (v2si, int)
+   v1di __builtin_ia32_psrlqi (v1di, int)
+   v4hi __builtin_ia32_psrawi (v4hi, int)
+   v2si __builtin_ia32_psradi (v2si, int)
+*/
+#endif
+
+#ifdef __SSE__
+/* SSE
+   v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
+   v8qi __builtin_ia32_pavgb (v8qi, v8qi)
+   v4hi __builtin_ia32_pavgw (v4hi, v4hi)
+   v1di __builtin_ia32_psadbw (v8qi, v8qi)
+   v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
+   v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
+   v8qi __builtin_ia32_pminub (v8qi, v8qi)
+   v4hi __builtin_ia32_pminsw (v4hi, v4hi)
+   int __builtin_ia32_pextrw (v4hi, int)
+   v4hi __builtin_ia32_pinsrw (v4hi, int, int)
+   int __builtin_ia32_pmovmskb (v8qi)
+   void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
+   void __builtin_ia32_movntq (di *, di)
+   void __builtin_ia32_sfence (void)
+
+   int __builtin_ia32_comieq (v4sf, v4sf)
+   int __builtin_ia32_comineq (v4sf, v4sf)
+   int __builtin_ia32_comilt (v4sf, v4sf)
+   int __builtin_ia32_comile (v4sf, v4sf)
+   int __builtin_ia32_comigt (v4sf, v4sf)
+   int __builtin_ia32_comige (v4sf, v4sf)
+   int __builtin_ia32_ucomieq (v4sf, v4sf)
+   int __builtin_ia32_ucomineq (v4sf, v4sf)
+   int __builtin_ia32_ucomilt (v4sf, v4sf)
+   int __builtin_ia32_ucomile (v4sf, v4sf)
+   int __builtin_ia32_ucomigt (v4sf, v4sf)
+   int __builtin_ia32_ucomige (v4sf, v4sf)
+   v4sf __builtin_ia32_addps (v4sf, v4sf)
+   v4sf __builtin_ia32_subps (v4sf, v4sf)
+   v4sf __builtin_ia32_mulps (v4sf, v4sf)
+   v4sf __builtin_ia32_divps (v4sf, v4sf)
+   v4sf __builtin_ia32_addss (v4sf, v4sf)
+   v4sf __builtin_ia32_subss (v4sf, v4sf)
+   v4sf __builtin_ia32_mulss (v4sf, v4sf)
+   v4sf __builtin_ia32_divss (v4sf, v4sf)
+   v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
+   v4si __builtin_ia32_cmpltps (v4sf, v4sf)
+   v4si __builtin_ia32_cmpleps (v4sf, v4sf)
+   v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
+   v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
+   v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
+   v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
+   v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
+   v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
+   v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
+   v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
+   v4si __builtin_ia32_cmpordps (v4sf, v4sf)
+   v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
+   v4si __builtin_ia32_cmpltss (v4sf, v4sf)
+   v4si __builtin_ia32_cmpless (v4sf, v4sf)
+   v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
+   v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
+   v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
+   v4si __builtin_ia32_cmpnless (v4sf, v4sf)
+   v4si __builtin_ia32_cmpordss (v4sf, v4sf)
+   v4sf __builtin_ia32_maxps (v4sf, v4sf)
+   v4sf __builtin_ia32_maxss (v4sf, v4sf)
+   v4sf __builtin_ia32_minps (v4sf, v4sf)
+   v4sf __builtin_ia32_minss (v4sf, v4sf)
+   v4sf __builtin_ia32_andps (v4sf, v4sf)
+   v4sf __builtin_ia32_andnps (v4sf, v4sf)
+   v4sf __builtin_ia32_orps (v4sf, v4sf)
+   v4sf __builtin_ia32_xorps (v4sf, v4sf)
+   v4sf __builtin_ia32_movss (v4sf, v4sf)
+   v4sf __builtin_ia32_movhlps (v4sf, v4sf)
+   v4sf __builtin_ia32_movlhps (v4sf, v4sf)
+   v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
+   v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
+   v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
+   v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
+   v2si __builtin_ia32_cvtps2pi (v4sf)
+   int __builtin_ia32_cvtss2si (v4sf)
+   v2si __builtin_ia32_cvttps2pi (v4sf)
+   int __builtin_ia32_cvttss2si (v4sf)
+   v4sf __builtin_ia32_rcpps (v4sf)
+   v4sf __builtin_ia32_rsqrtps (v4sf)
+   v4sf __builtin_ia32_sqrtps (v4sf)
+   v4sf __builtin_ia32_rcpss (v4sf)
+   v4sf __builtin_ia32_rsqrtss (v4sf)
+   v4sf __builtin_ia32_sqrtss (v4sf)
+   v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
+*/
+static __inline
+v128_u8_t op_SHUFPS ( v128_u8_t vin1, v128_u8_t vin2, const int mask )
+    __attribute__ ((always_inline));
+
+static __inline
+v128_u8_t op_SHUFPS (v128_u8_t vin1, v128_u8_t vin2, const int mask)
+{
+    return ( v128_u8_t ) __builtin_ia32_shufps ((v128_f_t)vin1, (v128_f_t)vin2, mask);
+}
+
+ /*
+   void __builtin_ia32_movntps (float *, v4sf)
+   int __builtin_ia32_movmskps (v4sf)
+
+v4sf __builtin_ia32_loadaps (float *)
+Generates the movaps machine instruction as a load from memory. 
+void __builtin_ia32_storeaps (float *, v4sf)
+Generates the movaps machine instruction as a store to memory. 
+v4sf __builtin_ia32_loadups (float *)
+Generates the movups machine instruction as a load from memory. 
+void __builtin_ia32_storeups (float *, v4sf)
+Generates the movups machine instruction as a store to memory. 
+v4sf __builtin_ia32_loadsss (float *)
+Generates the movss machine instruction as a load from memory. 
+void __builtin_ia32_storess (float *, v4sf)
+Generates the movss machine instruction as a store to memory. 
+v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)
+Generates the movhps machine instruction as a load from memory. 
+v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)
+Generates the movlps machine instruction as a load from memory 
+void __builtin_ia32_storehps (v2sf *, v4sf)
+Generates the movhps machine instruction as a store to memory. 
+void __builtin_ia32_storelps (v2sf *, v4sf)
+Generates the movlps machine instruction as a store to memory.
+*/
+#endif
+
+#ifdef __SSE2__
+/* sse2
+     int __builtin_ia32_comisdeq (v2df, v2df)
+     int __builtin_ia32_comisdlt (v2df, v2df)
+     int __builtin_ia32_comisdle (v2df, v2df)
+     int __builtin_ia32_comisdgt (v2df, v2df)
+     int __builtin_ia32_comisdge (v2df, v2df)
+     int __builtin_ia32_comisdneq (v2df, v2df)
+     int __builtin_ia32_ucomisdeq (v2df, v2df)
+     int __builtin_ia32_ucomisdlt (v2df, v2df)
+     int __builtin_ia32_ucomisdle (v2df, v2df)
+     int __builtin_ia32_ucomisdgt (v2df, v2df)
+     int __builtin_ia32_ucomisdge (v2df, v2df)
+     int __builtin_ia32_ucomisdneq (v2df, v2df)
+     v2df __builtin_ia32_cmpeqpd (v2df, v2df)
+     v2df __builtin_ia32_cmpltpd (v2df, v2df)
+     v2df __builtin_ia32_cmplepd (v2df, v2df)
+     v2df __builtin_ia32_cmpgtpd (v2df, v2df)
+     v2df __builtin_ia32_cmpgepd (v2df, v2df)
+     v2df __builtin_ia32_cmpunordpd (v2df, v2df)
+     v2df __builtin_ia32_cmpneqpd (v2df, v2df)
+     v2df __builtin_ia32_cmpnltpd (v2df, v2df)
+     v2df __builtin_ia32_cmpnlepd (v2df, v2df)
+     v2df __builtin_ia32_cmpngtpd (v2df, v2df)
+     v2df __builtin_ia32_cmpngepd (v2df, v2df)
+     v2df __builtin_ia32_cmpordpd (v2df, v2df)
+     v2df __builtin_ia32_cmpeqsd (v2df, v2df)
+     v2df __builtin_ia32_cmpltsd (v2df, v2df)
+     v2df __builtin_ia32_cmplesd (v2df, v2df)
+     v2df __builtin_ia32_cmpunordsd (v2df, v2df)
+     v2df __builtin_ia32_cmpneqsd (v2df, v2df)
+     v2df __builtin_ia32_cmpnltsd (v2df, v2df)
+     v2df __builtin_ia32_cmpnlesd (v2df, v2df)
+     v2df __builtin_ia32_cmpordsd (v2df, v2df)
+     v2di __builtin_ia32_paddq (v2di, v2di)
+     v2di __builtin_ia32_psubq (v2di, v2di)
+     v2df __builtin_ia32_addpd (v2df, v2df)
+     v2df __builtin_ia32_subpd (v2df, v2df)
+     v2df __builtin_ia32_mulpd (v2df, v2df)
+     v2df __builtin_ia32_divpd (v2df, v2df)
+     v2df __builtin_ia32_addsd (v2df, v2df)
+     v2df __builtin_ia32_subsd (v2df, v2df)
+     v2df __builtin_ia32_mulsd (v2df, v2df)
+     v2df __builtin_ia32_divsd (v2df, v2df)
+     v2df __builtin_ia32_minpd (v2df, v2df)
+     v2df __builtin_ia32_maxpd (v2df, v2df)
+     v2df __builtin_ia32_minsd (v2df, v2df)
+     v2df __builtin_ia32_maxsd (v2df, v2df)
+     v2df __builtin_ia32_andpd (v2df, v2df)
+     v2df __builtin_ia32_andnpd (v2df, v2df)
+     v2df __builtin_ia32_orpd (v2df, v2df)
+     v2df __builtin_ia32_xorpd (v2df, v2df)
+     v2df __builtin_ia32_movsd (v2df, v2df)
+     v2df __builtin_ia32_unpckhpd (v2df, v2df)
+     v2df __builtin_ia32_unpcklpd (v2df, v2df)
+     v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
+     v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
+     v4si __builtin_ia32_paddd128 (v4si, v4si)
+     v2di __builtin_ia32_paddq128 (v2di, v2di)
+     v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
+     v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
+     v4si __builtin_ia32_psubd128 (v4si, v4si)
+     v2di __builtin_ia32_psubq128 (v2di, v2di)
+     v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
+     v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
+     v2di __builtin_ia32_pand128 (v2di, v2di)
+     v2di __builtin_ia32_pandn128 (v2di, v2di)
+     v2di __builtin_ia32_por128 (v2di, v2di)
+     v2di __builtin_ia32_pxor128 (v2di, v2di)
+     v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
+     v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
+     v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
+     v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
+     v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
+     v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
+     v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
+     v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
+     v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
+     v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
+     v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
+     v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
+     v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
+     v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
+     v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
+     v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
+     v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
+     v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
+     v4si __builtin_ia32_punpckldq128 (v4si, v4si)
+     v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
+     v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
+     v8hi __builtin_ia32_packssdw128 (v4si, v4si)
+     v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
+     v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
+     void __builtin_ia32_maskmovdqu (v16qi, v16qi)
+     v2df __builtin_ia32_loadupd (double *)
+     void __builtin_ia32_storeupd (double *, v2df)
+     v2df __builtin_ia32_loadhpd (v2df, double const *)
+     v2df __builtin_ia32_loadlpd (v2df, double const *)
+     int __builtin_ia32_movmskpd (v2df)
+     int __builtin_ia32_pmovmskb128 (v16qi)
+     void __builtin_ia32_movnti (int *, int)
+     void __builtin_ia32_movntpd (double *, v2df)
+     void __builtin_ia32_movntdq (v2df *, v2df)
+     v4si __builtin_ia32_pshufd (v4si, int)
+     v8hi __builtin_ia32_pshuflw (v8hi, int)
+     v8hi __builtin_ia32_pshufhw (v8hi, int)
+     v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
+     v2df __builtin_ia32_sqrtpd (v2df)
+     v2df __builtin_ia32_sqrtsd (v2df)
+     v2df __builtin_ia32_shufpd (v2df, v2df, int)
+*/
+static __inline
+v128_u8_t op_SHUFPD (v128_u8_t vin1, v128_u8_t vin2, const int mask)
+    __attribute__ ((always_inline));
+
+static __inline
+v128_u8_t op_SHUFPD (v128_u8_t vin1, v128_u8_t vin2, const int mask)
+{
+    return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+}
+
+/*
+     v2df __builtin_ia32_cvtdq2pd (v4si)
+     v4sf __builtin_ia32_cvtdq2ps (v4si)
+     v4si __builtin_ia32_cvtpd2dq (v2df)
+     v2si __builtin_ia32_cvtpd2pi (v2df)
+     v4sf __builtin_ia32_cvtpd2ps (v2df)
+     v4si __builtin_ia32_cvttpd2dq (v2df)
+     v2si __builtin_ia32_cvttpd2pi (v2df)
+     v2df __builtin_ia32_cvtpi2pd (v2si)
+     int __builtin_ia32_cvtsd2si (v2df)
+     int __builtin_ia32_cvttsd2si (v2df)
+     long long __builtin_ia32_cvtsd2si64 (v2df)
+     long long __builtin_ia32_cvttsd2si64 (v2df)
+     v4si __builtin_ia32_cvtps2dq (v4sf)
+     v2df __builtin_ia32_cvtps2pd (v4sf)
+     v4si __builtin_ia32_cvttps2dq (v4sf)
+     v2df __builtin_ia32_cvtsi2sd (v2df, int)
+     v2df __builtin_ia32_cvtsi642sd (v2df, long long)
+     v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
+     v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
+     void __builtin_ia32_clflush (const void *)
+     void __builtin_ia32_lfence (void)
+     void __builtin_ia32_mfence (void)
+     v16qi __builtin_ia32_loaddqu (const char *)
+     void __builtin_ia32_storedqu (char *, v16qi)
+     v1di __builtin_ia32_pmuludq (v2si, v2si)
+     v2di __builtin_ia32_pmuludq128 (v4si, v4si)
+     v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
+     v4si __builtin_ia32_pslld128 (v4si, v4si)
+     v2di __builtin_ia32_psllq128 (v2di, v2di)
+     v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
+     v4si __builtin_ia32_psrld128 (v4si, v4si)
+     v2di __builtin_ia32_psrlq128 (v2di, v2di)
+     v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
+     v4si __builtin_ia32_psrad128 (v4si, v4si)
+     v2di __builtin_ia32_pslldqi128 (v2di, int)
+     v8hi __builtin_ia32_psllwi128 (v8hi, int)
+     v4si __builtin_ia32_pslldi128 (v4si, int)
+*/
+
+static __inline
+v128_u8_t op_PSLLDI128 ( v128_u8_t vin, const int bit_count )
+    __attribute__ ((always_inline));
+
+static __inline
+v128_u8_t op_PSLLDI128 (v128_u8_t vin, const int bit_count)
+{
+    return (v128_u8_t)__builtin_ia32_pslldi128 ((v128_i32_t)vin, bit_count);
+}
+
+/*
+     v2di __builtin_ia32_psllqi128 (v2di, int)
+     v2di __builtin_ia32_psrldqi128 (v2di, int)
+     v8hi __builtin_ia32_psrlwi128 (v8hi, int)
+     v4si __builtin_ia32_psrldi128 (v4si, int)
+*/
+
+static __inline
+v128_u8_t op_PSRLDI128 ( v128_u8_t vin, const int bit_count )
+    __attribute__ ((always_inline));
+
+static __inline
+v128_u8_t op_PSRLDI128 (v128_u8_t vin, const int bit_count)
+{
+    return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+}
+
+/*
+     v2di __builtin_ia32_psrlqi128 (v2di, int)
+     v8hi __builtin_ia32_psrawi128 (v8hi, int)
+     v4si __builtin_ia32_psradi128 (v4si, int)
+     v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
+     v2di __builtin_ia32_movq128 (v2di)
+*/
+static __inline__
+v128_u8_t op_PSHUFD128 ( v128_u8_t vin, const int mask )
+    __attribute__ ((always_inline));
+     
+static __inline__
+v128_u8_t op_PSHUFD128 (v128_u8_t vin, const int mask)
+{
+    return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+}
+#endif
+
+#ifdef __SSE3__
+/* sse3
+     v2df __builtin_ia32_addsubpd (v2df, v2df)
+     v4sf __builtin_ia32_addsubps (v4sf, v4sf)
+     v2df __builtin_ia32_haddpd (v2df, v2df)
+     v4sf __builtin_ia32_haddps (v4sf, v4sf)
+     v2df __builtin_ia32_hsubpd (v2df, v2df)
+     v4sf __builtin_ia32_hsubps (v4sf, v4sf)
+     v16qi __builtin_ia32_lddqu (char const *)
+     void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
+     v2df __builtin_ia32_movddup (v2df)
+     v4sf __builtin_ia32_movshdup (v4sf)
+     v4sf __builtin_ia32_movsldup (v4sf)
+     void __builtin_ia32_mwait (unsigned int, unsigned int)
+
+v2df __builtin_ia32_loadddup (double const *)
+
+*/
+
+#endif
+
+#ifdef __SSSE3__
+
+/* ssse3
+ *
+ * The following built-in functions are available when -mssse3 is used. All of
+ * them generate the machine instruction that is part of the name with MMX
+ * registers.
+ *
+ * 
+     v2si __builtin_ia32_phaddd (v2si, v2si)
+     v4hi __builtin_ia32_phaddw (v4hi, v4hi)
+     v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
+     v2si __builtin_ia32_phsubd (v2si, v2si)
+     v4hi __builtin_ia32_phsubw (v4hi, v4hi)
+     v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
+     v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
+     v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
+     v8qi __builtin_ia32_pshufb (v8qi, v8qi)
+     v8qi __builtin_ia32_psignb (v8qi, v8qi)
+     v2si __builtin_ia32_psignd (v2si, v2si)
+     v4hi __builtin_ia32_psignw (v4hi, v4hi)
+     v1di __builtin_ia32_palignr (v1di, v1di, int)
+     v8qi __builtin_ia32_pabsb (v8qi)
+     v2si __builtin_ia32_pabsd (v2si)
+     v4hi __builtin_ia32_pabsw (v4hi)
+The following built-in functions are available when -mssse3 is used.
+All of them generate the machine instruction that is part of the name
+with SSE registers.
+
+     v4si __builtin_ia32_phaddd128 (v4si, v4si)
+     v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
+     v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
+     v4si __builtin_ia32_phsubd128 (v4si, v4si)
+     v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
+     v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
+     v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
+     v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
++    v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
+     v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
+     v4si __builtin_ia32_psignd128 (v4si, v4si)
+     v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
+     v2di __builtin_ia32_palignr128 (v2di, v2di, int)
+     v16qi __builtin_ia32_pabsb128 (v16qi)
+     v4si __builtin_ia32_pabsd128 (v4si)
+     v8hi __builtin_ia32_pabsw128 (v8hi)
+ */
+
+static __inline__
+v128_u8_t op_PSHUFB128 (register v128_u8_t vin, register const v128_u8_t vtab)
+    __attribute__ ((always_inline));
+
+static __inline__
+v128_u8_t op_PSHUFB128 (register v128_u8_t vin, register const v128_u8_t vtab)
+{
+    return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+}
+#endif
+
+#ifdef __SSE4_1__
+/* sse4.1
+The following built-in functions are available when -msse4.1 is used.
+All of them generate the machine instruction that is part of the name.
+
+     v2df __builtin_ia32_blendpd (v2df, v2df, const int)
+     v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
+     v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
+     v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
+     v2df __builtin_ia32_dppd (v2df, v2df, const int)
+     v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
+     v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
+     v2di __builtin_ia32_movntdqa (v2di *);
+     v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
+     v8hi __builtin_ia32_packusdw128 (v4si, v4si)
+     v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
+     v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
+     v2di __builtin_ia32_pcmpeqq (v2di, v2di)
+     v8hi __builtin_ia32_phminposuw128 (v8hi)
+     v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
+     v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
+     v4si __builtin_ia32_pmaxud128 (v4si, v4si)
+     v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
+     v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
+     v4si __builtin_ia32_pminsd128 (v4si, v4si)
+     v4si __builtin_ia32_pminud128 (v4si, v4si)
+     v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
+     v4si __builtin_ia32_pmovsxbd128 (v16qi)
+     v2di __builtin_ia32_pmovsxbq128 (v16qi)
+     v8hi __builtin_ia32_pmovsxbw128 (v16qi)
+     v2di __builtin_ia32_pmovsxdq128 (v4si)
+     v4si __builtin_ia32_pmovsxwd128 (v8hi)
+     v2di __builtin_ia32_pmovsxwq128 (v8hi)
+     v4si __builtin_ia32_pmovzxbd128 (v16qi)
+     v2di __builtin_ia32_pmovzxbq128 (v16qi)
+     v8hi __builtin_ia32_pmovzxbw128 (v16qi)
+     v2di __builtin_ia32_pmovzxdq128 (v4si)
+     v4si __builtin_ia32_pmovzxwd128 (v8hi)
+     v2di __builtin_ia32_pmovzxwq128 (v8hi)
+     v2di __builtin_ia32_pmuldq128 (v4si, v4si)
+     v4si __builtin_ia32_pmulld128 (v4si, v4si)
+     int __builtin_ia32_ptestc128 (v2di, v2di)
+     int __builtin_ia32_ptestnzc128 (v2di, v2di)
+     int __builtin_ia32_ptestz128 (v2di, v2di)
+     v2df __builtin_ia32_roundpd (v2df, const int)
+     v4sf __builtin_ia32_roundps (v4sf, const int)
+     v2df __builtin_ia32_roundsd (v2df, v2df, const int)
+     v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
+The following built-in functions are available when -msse4.1 is used.
+
+v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)
+Generates the insertps machine instruction. 
+int __builtin_ia32_vec_ext_v16qi (v16qi, const int)
+Generates the pextrb machine instruction. 
+v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)
+Generates the pinsrb machine instruction. 
+v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)
+Generates the pinsrd machine instruction. 
+*/
+static __inline__
+v128_u8_t op_PINSRUD (register v128_u8_t vin, uint32_t ii, const int off)
+    __attribute__ ((always_inline));
+static __inline__
+v128_u8_t op_PINSRUD (register v128_u8_t vin, uint32_t ii, const int off)
+{
+    return (v128_u8_t)__builtin_ia32_vec_set_v4si ((v128_i32_t)vin, ii, off);
+}
+/*
+v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)
+Generates the pinsrq machine instruction in 64bit mode.
+The following built-in functions are changed to generate new SSE4.1 instructions when -msse4.1 is used.
+
+float __builtin_ia32_vec_ext_v4sf (v4sf, const int)
+Generates the extractps machine instruction. 
+int __builtin_ia32_vec_ext_v4si (v4si, const int)
+Generates the pextrd machine instruction. 
+long long __builtin_ia32_vec_ext_v2di (v2di, const int)
+Generates the pextrq machine instruction in 64bit mode.
+ */
+
+#endif
+
+#ifdef __SSE4_2__
+
+/* sse4.2
+The following built-in functions are available when -msse4.2 is used.
+All of them generate the machine instruction that is part of the name.
+
+     v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
+     int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
+     int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
+     int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
+     int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
+     int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
+     int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
+     v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
+     int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
+     int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
+     int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
+     int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
+     int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
+     int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
+     v2di __builtin_ia32_pcmpgtq (v2di, v2di)
+The following built-in functions are available when -msse4.2 is used.
+
+unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)
+Generates the crc32b machine instruction. 
+unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)
+Generates the crc32w machine instruction. 
+unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)
+Generates the crc32l machine instruction. 
+unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)
+Generates the crc32q machine instruction.
+The following built-in functions are changed to generate new SSE4.2 instructions when -msse4.2 is used.
+
+int __builtin_popcount (unsigned int)
+Generates the popcntl machine instruction. 
+int __builtin_popcountl (unsigned long)
+Generates the popcntl or popcntq machine instruction, depending on the size of unsigned long. 
+int __builtin_popcountll (unsigned long long)
+Generates the popcntq machine instruction.
+
+*/
+
+#endif
+
+/* avx
+The following built-in functions are available when -mavx is used.
+All of them generate the machine instruction that is part of the name.
+
+     v4df __builtin_ia32_addpd256 (v4df,v4df)
+     v8sf __builtin_ia32_addps256 (v8sf,v8sf)
+     v4df __builtin_ia32_addsubpd256 (v4df,v4df)
+     v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
+     v4df __builtin_ia32_andnpd256 (v4df,v4df)
+     v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
+     v4df __builtin_ia32_andpd256 (v4df,v4df)
+     v8sf __builtin_ia32_andps256 (v8sf,v8sf)
+     v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
+     v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
+     v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
+     v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
+     v2df __builtin_ia32_cmppd (v2df,v2df,int)
+     v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
+     v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
+     v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
+     v2df __builtin_ia32_cmpsd (v2df,v2df,int)
+     v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
+     v4df __builtin_ia32_cvtdq2pd256 (v4si)
+     v8sf __builtin_ia32_cvtdq2ps256 (v8si)
+     v4si __builtin_ia32_cvtpd2dq256 (v4df)
+     v4sf __builtin_ia32_cvtpd2ps256 (v4df)
+     v8si __builtin_ia32_cvtps2dq256 (v8sf)
+     v4df __builtin_ia32_cvtps2pd256 (v4sf)
+     v4si __builtin_ia32_cvttpd2dq256 (v4df)
+     v8si __builtin_ia32_cvttps2dq256 (v8sf)
+     v4df __builtin_ia32_divpd256 (v4df,v4df)
+     v8sf __builtin_ia32_divps256 (v8sf,v8sf)
+     v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
+     v4df __builtin_ia32_haddpd256 (v4df,v4df)
+     v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
+     v4df __builtin_ia32_hsubpd256 (v4df,v4df)
+     v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
+     v32qi __builtin_ia32_lddqu256 (pcchar)
+     v32qi __builtin_ia32_loaddqu256 (pcchar)
+     v4df __builtin_ia32_loadupd256 (pcdouble)
+     v8sf __builtin_ia32_loadups256 (pcfloat)
+     v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
+     v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
+     v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
+     v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
+     void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
+     void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
+     void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
+     void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
+     v4df __builtin_ia32_maxpd256 (v4df,v4df)
+     v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
+     v4df __builtin_ia32_minpd256 (v4df,v4df)
+     v8sf __builtin_ia32_minps256 (v8sf,v8sf)
+     v4df __builtin_ia32_movddup256 (v4df)
+     int __builtin_ia32_movmskpd256 (v4df)
+     int __builtin_ia32_movmskps256 (v8sf)
+     v8sf __builtin_ia32_movshdup256 (v8sf)
+     v8sf __builtin_ia32_movsldup256 (v8sf)
+     v4df __builtin_ia32_mulpd256 (v4df,v4df)
+     v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
+     v4df __builtin_ia32_orpd256 (v4df,v4df)
+     v8sf __builtin_ia32_orps256 (v8sf,v8sf)
+     v2df __builtin_ia32_pd_pd256 (v4df)
+     v4df __builtin_ia32_pd256_pd (v2df)
+     v4sf __builtin_ia32_ps_ps256 (v8sf)
+     v8sf __builtin_ia32_ps256_ps (v4sf)
+     int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
+     int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
+     int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
+     v8sf __builtin_ia32_rcpps256 (v8sf)
+     v4df __builtin_ia32_roundpd256 (v4df,int)
+     v8sf __builtin_ia32_roundps256 (v8sf,int)
+     v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
+     v8sf __builtin_ia32_rsqrtps256 (v8sf)
+     v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
+     v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
+     v4si __builtin_ia32_si_si256 (v8si)
+     v8si __builtin_ia32_si256_si (v4si)
+     v4df __builtin_ia32_sqrtpd256 (v4df)
+     v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
+     v8sf __builtin_ia32_sqrtps256 (v8sf)
+     void __builtin_ia32_storedqu256 (pchar,v32qi)
+     void __builtin_ia32_storeupd256 (pdouble,v4df)
+     void __builtin_ia32_storeups256 (pfloat,v8sf)
+     v4df __builtin_ia32_subpd256 (v4df,v4df)
+     v8sf __builtin_ia32_subps256 (v8sf,v8sf)
+     v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
+     v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
+     v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
+     v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
+     v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
+     v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
+     v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
+     v4sf __builtin_ia32_vbroadcastss (pcfloat)
+     v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
+     v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
+     v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
+     v4si __builtin_ia32_vextractf128_si256 (v8si,int)
+     v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
+     v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
+     v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
+     v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
+     v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
+     v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
+     v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
+     v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
+     v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
+     v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
+     v2df __builtin_ia32_vpermilpd (v2df,int)
+     v4df __builtin_ia32_vpermilpd256 (v4df,int)
+     v4sf __builtin_ia32_vpermilps (v4sf,int)
+     v8sf __builtin_ia32_vpermilps256 (v8sf,int)
+     v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
+     v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
+     v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
+     v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
+     int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
+     int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
+     int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
+     int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
+     int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
+     int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
+     int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
+     int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
+     int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
+     int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
+     int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
+     int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
+     void __builtin_ia32_vzeroall (void)
+     void __builtin_ia32_vzeroupper (void)
+     v4df __builtin_ia32_xorpd256 (v4df,v4df)
+     v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
+
+
+
+*/
+
+#ifdef __AES__
+/*
+ * AES-NI instruction set
+ * includes PCMUL
+ */
+
+/* AES-NI aes
+ */
+
+   
+/* v2di __builtin_ia32_aesenc128 (v2di, v2di) */
+static __inline__
+v128_u8_t op_AESENC (register v128_u8_t state, register const v128_u8_t round_key)
+{
+    return (v128_u8_t)__builtin_ia32_aesenc128 ((v128_lli_t)state,
+                                               (v128_lli_t)round_key);
+}
+
+
+/* v2di __builtin_ia32_aesenclast128 (v2di, v2di) */
+static __inline__
+v128_u8_t op_AESENCLAST (register v128_u8_t state,
+                        register const v128_u8_t round_key)
+{
+    return (v128_u8_t)__builtin_ia32_aesenclast128 ((v128_lli_t)state,
+                                                   (v128_lli_t)round_key);
+}
+
+
+/* v2di __builtin_ia32_aesdec128 (v2di, v2di) */
+static __inline__
+v128_u8_t op_AESDEC (register v128_u8_t state, register const v128_u8_t round_key)
+{
+    return (v128_u8_t)__builtin_ia32_aesdec128 ((v128_lli_t)state,
+                                               (v128_lli_t)round_key);
+}
+
+
+/* v2di __builtin_ia32_aesdeclast128 (v2di, v2di) */
+static __inline__
+v128_u8_t op_AESDECLAST (register v128_u8_t state,
+                        register const v128_u8_t round_key)
+{
+    return (v128_u8_t)__builtin_ia32_aesdeclast128 ((v128_lli_t)state,
+                                                   (v128_lli_t)round_key);
+}
+
+
+/* v2di __builtin_ia32_aeskeygenassist128 (v2di, const int) */
+static __inline__
+v128_u8_t op_AESKEYGENASSIST (register const v128_u8_t round_key,
+                             const int rcon ) __attribute__ ((always_inline));
+static __inline__
+v128_u8_t op_AESKEYGENASSIST (register const v128_u8_t round_key,
+                             const int rcon )
+{
+    return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+                                                         rcon);
+}
+
+
+/* v2di __builtin_ia32_aesimc128 (v2di) */
+static __inline__
+v128_u8_t op_AESIMC (register const v128_u8_t round_key)
+{
+    return (v128_u8_t)__builtin_ia32_aesimc128 ((v128_lli_t)round_key);
+}
+
+/* pclmul
+v2di __builtin_ia32_pclmulqdq128 (v2di, v2di, const int)
+*/
+#endif
+
+#ifdef __SSE5__
+/* sse5
+     v2df __builtin_ia32_comeqpd (v2df, v2df)
+     v2df __builtin_ia32_comeqps (v2df, v2df)
+     v4sf __builtin_ia32_comeqsd (v4sf, v4sf)
+     v4sf __builtin_ia32_comeqss (v4sf, v4sf)
+     v2df __builtin_ia32_comfalsepd (v2df, v2df)
+     v2df __builtin_ia32_comfalseps (v2df, v2df)
+     v4sf __builtin_ia32_comfalsesd (v4sf, v4sf)
+     v4sf __builtin_ia32_comfalsess (v4sf, v4sf)
+     v2df __builtin_ia32_comgepd (v2df, v2df)
+     v2df __builtin_ia32_comgeps (v2df, v2df)
+     v4sf __builtin_ia32_comgesd (v4sf, v4sf)
+     v4sf __builtin_ia32_comgess (v4sf, v4sf)
+     v2df __builtin_ia32_comgtpd (v2df, v2df)
+     v2df __builtin_ia32_comgtps (v2df, v2df)
+     v4sf __builtin_ia32_comgtsd (v4sf, v4sf)
+     v4sf __builtin_ia32_comgtss (v4sf, v4sf)
+     v2df __builtin_ia32_comlepd (v2df, v2df)
+     v2df __builtin_ia32_comleps (v2df, v2df)
+     v4sf __builtin_ia32_comlesd (v4sf, v4sf)
+     v4sf __builtin_ia32_comless (v4sf, v4sf)
+     v2df __builtin_ia32_comltpd (v2df, v2df)
+     v2df __builtin_ia32_comltps (v2df, v2df)
+     v4sf __builtin_ia32_comltsd (v4sf, v4sf)
+     v4sf __builtin_ia32_comltss (v4sf, v4sf)
+     v2df __builtin_ia32_comnepd (v2df, v2df)
+     v2df __builtin_ia32_comneps (v2df, v2df)
+     v4sf __builtin_ia32_comnesd (v4sf, v4sf)
+     v4sf __builtin_ia32_comness (v4sf, v4sf)
+     v2df __builtin_ia32_comordpd (v2df, v2df)
+     v2df __builtin_ia32_comordps (v2df, v2df)
+     v4sf __builtin_ia32_comordsd (v4sf, v4sf)
+     v4sf __builtin_ia32_comordss (v4sf, v4sf)
+     v2df __builtin_ia32_comtruepd (v2df, v2df)
+     v2df __builtin_ia32_comtrueps (v2df, v2df)
+     v4sf __builtin_ia32_comtruesd (v4sf, v4sf)
+     v4sf __builtin_ia32_comtruess (v4sf, v4sf)
+     v2df __builtin_ia32_comueqpd (v2df, v2df)
+     v2df __builtin_ia32_comueqps (v2df, v2df)
+     v4sf __builtin_ia32_comueqsd (v4sf, v4sf)
+     v4sf __builtin_ia32_comueqss (v4sf, v4sf)
+     v2df __builtin_ia32_comugepd (v2df, v2df)
+     v2df __builtin_ia32_comugeps (v2df, v2df)
+     v4sf __builtin_ia32_comugesd (v4sf, v4sf)
+     v4sf __builtin_ia32_comugess (v4sf, v4sf)
+     v2df __builtin_ia32_comugtpd (v2df, v2df)
+     v2df __builtin_ia32_comugtps (v2df, v2df)
+     v4sf __builtin_ia32_comugtsd (v4sf, v4sf)
+     v4sf __builtin_ia32_comugtss (v4sf, v4sf)
+     v2df __builtin_ia32_comulepd (v2df, v2df)
+     v2df __builtin_ia32_comuleps (v2df, v2df)
+     v4sf __builtin_ia32_comulesd (v4sf, v4sf)
+     v4sf __builtin_ia32_comuless (v4sf, v4sf)
+     v2df __builtin_ia32_comultpd (v2df, v2df)
+     v2df __builtin_ia32_comultps (v2df, v2df)
+     v4sf __builtin_ia32_comultsd (v4sf, v4sf)
+     v4sf __builtin_ia32_comultss (v4sf, v4sf)
+     v2df __builtin_ia32_comunepd (v2df, v2df)
+     v2df __builtin_ia32_comuneps (v2df, v2df)
+     v4sf __builtin_ia32_comunesd (v4sf, v4sf)
+     v4sf __builtin_ia32_comuness (v4sf, v4sf)
+     v2df __builtin_ia32_comunordpd (v2df, v2df)
+     v2df __builtin_ia32_comunordps (v2df, v2df)
+     v4sf __builtin_ia32_comunordsd (v4sf, v4sf)
+     v4sf __builtin_ia32_comunordss (v4sf, v4sf)
+     v2df __builtin_ia32_fmaddpd (v2df, v2df, v2df)
+     v4sf __builtin_ia32_fmaddps (v4sf, v4sf, v4sf)
+     v2df __builtin_ia32_fmaddsd (v2df, v2df, v2df)
+     v4sf __builtin_ia32_fmaddss (v4sf, v4sf, v4sf)
+     v2df __builtin_ia32_fmsubpd (v2df, v2df, v2df)
+     v4sf __builtin_ia32_fmsubps (v4sf, v4sf, v4sf)
+     v2df __builtin_ia32_fmsubsd (v2df, v2df, v2df)
+     v4sf __builtin_ia32_fmsubss (v4sf, v4sf, v4sf)
+     v2df __builtin_ia32_fnmaddpd (v2df, v2df, v2df)
+     v4sf __builtin_ia32_fnmaddps (v4sf, v4sf, v4sf)
+     v2df __builtin_ia32_fnmaddsd (v2df, v2df, v2df)
+     v4sf __builtin_ia32_fnmaddss (v4sf, v4sf, v4sf)
+     v2df __builtin_ia32_fnmsubpd (v2df, v2df, v2df)
+     v4sf __builtin_ia32_fnmsubps (v4sf, v4sf, v4sf)
+     v2df __builtin_ia32_fnmsubsd (v2df, v2df, v2df)
+     v4sf __builtin_ia32_fnmsubss (v4sf, v4sf, v4sf)
+     v2df __builtin_ia32_frczpd (v2df)
+     v4sf __builtin_ia32_frczps (v4sf)
+     v2df __builtin_ia32_frczsd (v2df, v2df)
+     v4sf __builtin_ia32_frczss (v4sf, v4sf)
+     v2di __builtin_ia32_pcmov (v2di, v2di, v2di)
+     v2di __builtin_ia32_pcmov_v2di (v2di, v2di, v2di)
+     v4si __builtin_ia32_pcmov_v4si (v4si, v4si, v4si)
+     v8hi __builtin_ia32_pcmov_v8hi (v8hi, v8hi, v8hi)
+     v16qi __builtin_ia32_pcmov_v16qi (v16qi, v16qi, v16qi)
+     v2df __builtin_ia32_pcmov_v2df (v2df, v2df, v2df)
+     v4sf __builtin_ia32_pcmov_v4sf (v4sf, v4sf, v4sf)
+     v16qi __builtin_ia32_pcomeqb (v16qi, v16qi)
+     v8hi __builtin_ia32_pcomeqw (v8hi, v8hi)
+     v4si __builtin_ia32_pcomeqd (v4si, v4si)
+     v2di __builtin_ia32_pcomeqq (v2di, v2di)
+     v16qi __builtin_ia32_pcomequb (v16qi, v16qi)
+     v4si __builtin_ia32_pcomequd (v4si, v4si)
+     v2di __builtin_ia32_pcomequq (v2di, v2di)
+     v8hi __builtin_ia32_pcomequw (v8hi, v8hi)
+     v8hi __builtin_ia32_pcomeqw (v8hi, v8hi)
+     v16qi __builtin_ia32_pcomfalseb (v16qi, v16qi)
+     v4si __builtin_ia32_pcomfalsed (v4si, v4si)
+     v2di __builtin_ia32_pcomfalseq (v2di, v2di)
+     v16qi __builtin_ia32_pcomfalseub (v16qi, v16qi)
+     v4si __builtin_ia32_pcomfalseud (v4si, v4si)
+     v2di __builtin_ia32_pcomfalseuq (v2di, v2di)
+     v8hi __builtin_ia32_pcomfalseuw (v8hi, v8hi)
+     v8hi __builtin_ia32_pcomfalsew (v8hi, v8hi)
+     v16qi __builtin_ia32_pcomgeb (v16qi, v16qi)
+     v4si __builtin_ia32_pcomged (v4si, v4si)
+     v2di __builtin_ia32_pcomgeq (v2di, v2di)
+     v16qi __builtin_ia32_pcomgeub (v16qi, v16qi)
+     v4si __builtin_ia32_pcomgeud (v4si, v4si)
+     v2di __builtin_ia32_pcomgeuq (v2di, v2di)
+     v8hi __builtin_ia32_pcomgeuw (v8hi, v8hi)
+     v8hi __builtin_ia32_pcomgew (v8hi, v8hi)
+     v16qi __builtin_ia32_pcomgtb (v16qi, v16qi)
+     v4si __builtin_ia32_pcomgtd (v4si, v4si)
+     v2di __builtin_ia32_pcomgtq (v2di, v2di)
+     v16qi __builtin_ia32_pcomgtub (v16qi, v16qi)
+     v4si __builtin_ia32_pcomgtud (v4si, v4si)
+     v2di __builtin_ia32_pcomgtuq (v2di, v2di)
+     v8hi __builtin_ia32_pcomgtuw (v8hi, v8hi)
+     v8hi __builtin_ia32_pcomgtw (v8hi, v8hi)
+     v16qi __builtin_ia32_pcomleb (v16qi, v16qi)
+     v4si __builtin_ia32_pcomled (v4si, v4si)
+     v2di __builtin_ia32_pcomleq (v2di, v2di)
+     v16qi __builtin_ia32_pcomleub (v16qi, v16qi)
+     v4si __builtin_ia32_pcomleud (v4si, v4si)
+     v2di __builtin_ia32_pcomleuq (v2di, v2di)
+     v8hi __builtin_ia32_pcomleuw (v8hi, v8hi)
+     v8hi __builtin_ia32_pcomlew (v8hi, v8hi)
+     v16qi __builtin_ia32_pcomltb (v16qi, v16qi)
+     v4si __builtin_ia32_pcomltd (v4si, v4si)
+     v2di __builtin_ia32_pcomltq (v2di, v2di)
+     v16qi __builtin_ia32_pcomltub (v16qi, v16qi)
+     v4si __builtin_ia32_pcomltud (v4si, v4si)
+     v2di __builtin_ia32_pcomltuq (v2di, v2di)
+     v8hi __builtin_ia32_pcomltuw (v8hi, v8hi)
+     v8hi __builtin_ia32_pcomltw (v8hi, v8hi)
+     v16qi __builtin_ia32_pcomneb (v16qi, v16qi)
+     v4si __builtin_ia32_pcomned (v4si, v4si)
+     v2di __builtin_ia32_pcomneq (v2di, v2di)
+     v16qi __builtin_ia32_pcomneub (v16qi, v16qi)
+     v4si __builtin_ia32_pcomneud (v4si, v4si)
+     v2di __builtin_ia32_pcomneuq (v2di, v2di)
+     v8hi __builtin_ia32_pcomneuw (v8hi, v8hi)
+     v8hi __builtin_ia32_pcomnew (v8hi, v8hi)
+     v16qi __builtin_ia32_pcomtrueb (v16qi, v16qi)
+     v4si __builtin_ia32_pcomtrued (v4si, v4si)
+     v2di __builtin_ia32_pcomtrueq (v2di, v2di)
+     v16qi __builtin_ia32_pcomtrueub (v16qi, v16qi)
+     v4si __builtin_ia32_pcomtrueud (v4si, v4si)
+     v2di __builtin_ia32_pcomtrueuq (v2di, v2di)
+     v8hi __builtin_ia32_pcomtrueuw (v8hi, v8hi)
+     v8hi __builtin_ia32_pcomtruew (v8hi, v8hi)
+     v4df __builtin_ia32_permpd (v2df, v2df, v16qi)
+     v4sf __builtin_ia32_permps (v4sf, v4sf, v16qi)
+     v4si __builtin_ia32_phaddbd (v16qi)
+     v2di __builtin_ia32_phaddbq (v16qi)
+     v8hi __builtin_ia32_phaddbw (v16qi)
+     v2di __builtin_ia32_phadddq (v4si)
+     v4si __builtin_ia32_phaddubd (v16qi)
+     v2di __builtin_ia32_phaddubq (v16qi)
+     v8hi __builtin_ia32_phaddubw (v16qi)
+     v2di __builtin_ia32_phaddudq (v4si)
+     v4si __builtin_ia32_phadduwd (v8hi)
+     v2di __builtin_ia32_phadduwq (v8hi)
+     v4si __builtin_ia32_phaddwd (v8hi)
+     v2di __builtin_ia32_phaddwq (v8hi)
+     v8hi __builtin_ia32_phsubbw (v16qi)
+     v2di __builtin_ia32_phsubdq (v4si)
+     v4si __builtin_ia32_phsubwd (v8hi)
+     v4si __builtin_ia32_pmacsdd (v4si, v4si, v4si)
+     v2di __builtin_ia32_pmacsdqh (v4si, v4si, v2di)
+     v2di __builtin_ia32_pmacsdql (v4si, v4si, v2di)
+     v4si __builtin_ia32_pmacssdd (v4si, v4si, v4si)
+     v2di __builtin_ia32_pmacssdqh (v4si, v4si, v2di)
+     v2di __builtin_ia32_pmacssdql (v4si, v4si, v2di)
+     v4si __builtin_ia32_pmacsswd (v8hi, v8hi, v4si)
+     v8hi __builtin_ia32_pmacssww (v8hi, v8hi, v8hi)
+     v4si __builtin_ia32_pmacswd (v8hi, v8hi, v4si)
+     v8hi __builtin_ia32_pmacsww (v8hi, v8hi, v8hi)
+     v4si __builtin_ia32_pmadcsswd (v8hi, v8hi, v4si)
+     v4si __builtin_ia32_pmadcswd (v8hi, v8hi, v4si)
+     v16qi __builtin_ia32_pperm (v16qi, v16qi, v16qi)
+     v16qi __builtin_ia32_protb (v16qi, v16qi)
+     v4si __builtin_ia32_protd (v4si, v4si)
+     v2di __builtin_ia32_protq (v2di, v2di)
+     v8hi __builtin_ia32_protw (v8hi, v8hi)
+     v16qi __builtin_ia32_pshab (v16qi, v16qi)
+     v4si __builtin_ia32_pshad (v4si, v4si)
+     v2di __builtin_ia32_pshaq (v2di, v2di)
+     v8hi __builtin_ia32_pshaw (v8hi, v8hi)
+     v16qi __builtin_ia32_pshlb (v16qi, v16qi)
+     v4si __builtin_ia32_pshld (v4si, v4si)
+     v2di __builtin_ia32_pshlq (v2di, v2di)
+     v8hi __builtin_ia32_pshlw (v8hi, v8hi)
+The following builtin-in functions are available when -msse5 is used.
+The second argument must be an integer constant and generate the machine
+instruction that is part of the name with the `_imm' suffix removed.
+
+     v16qi __builtin_ia32_protb_imm (v16qi, int)
+     v4si __builtin_ia32_protd_imm (v4si, int)
+     v2di __builtin_ia32_protq_imm (v2di, int)
+     v8hi __builtin_ia32_protw_imm (v8hi, int)
+
+
+*/
+#endif
+
+#endif /* if USE_VECREG */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_v128_ */
diff --git a/interfaces/cc/gcc/x86_64/fmtdef.h b/interfaces/cc/gcc/x86_64/fmtdef.h
deleted file mode 100644
index 150b807..0000000
--- a/interfaces/cc/gcc/x86_64/fmtdef.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#ifndef _h_fmtdef_
-#define _h_fmtdef_
-
-#if MAC
-
-/* int64_t is still a "long long int" */
-#define LD64 "lld"
-#define LU64 "llu"
-#define LX64 "llX"
-#define Lx64 "llx"
-
-/* size_t is now a "long unsigned int" */
-#define LUSZ "lu"
-#define LXSZ "lX"
-#define LxSZ "lx"
-
-#else /* MAC */
-
-/* int64_t is now a "long int" */
-#define LD64 "ld"
-#define LU64 "lu"
-#define LX64 "lX"
-#define Lx64 "lx"
-
-/* size_t is now a "long unsigned int" */
-#define LUSZ "lu"
-#define LXSZ "lX"
-#define LxSZ "lx"
-
-#endif /* MAC */
-
-#endif /* _h_fmtdef_ */
diff --git a/interfaces/cc/vc++/compiler.h b/interfaces/cc/vc++/compiler.h
index 2c2837d..46a1ac0 100644
--- a/interfaces/cc/vc++/compiler.h
+++ b/interfaces/cc/vc++/compiler.h
@@ -37,7 +37,7 @@ extern "C" {
 static __inline
 float roundf( float value_in )
 {
-    return ( value_in < 0 ) ? ceilf ( value_in - 0.5 ) : floorf ( value_in + 0.5 );
+    return ( value_in < 0 ) ? ceilf ( value_in - 0.5F ) : floorf ( value_in + 0.5 );
 }
 
 #define lroundf( x ) (long int)roundf( x )
diff --git a/interfaces/cc/vc++/i386/arch-impl.h b/interfaces/cc/vc++/i386/arch-impl.h
index 9745a2b..2494460 100644
--- a/interfaces/cc/vc++/i386/arch-impl.h
+++ b/interfaces/cc/vc++/i386/arch-impl.h
@@ -31,204 +31,10 @@
 #include "../noarch/arch-impl.h"
 #endif
 
-#ifndef _INC_STDLIB
-#include <stdlib.h>
-#endif
-
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-typedef struct int128_t int128_t;
-struct int128_t
-{
-    uint64_t lo;
-    int64_t hi;
-};
-
-static __inline
-int64_t int128_hi ( const int128_t *self )
-{
-    return self -> hi;
-}
-
-static __inline
-uint64_t int128_lo ( const int128_t *self )
-{
-    return self -> lo;
-}
-
-static __inline
-void int128_sethi ( int128_t *self, int64_t i )
-{
-    self -> hi = i;
-}
-
-static __inline
-void int128_setlo ( int128_t *self, uint64_t i )
-{
-    self -> lo = i;
-}
-
-typedef struct uint128_t uint128_t;
-struct uint128_t
-{
-    uint64_t lo;
-    uint64_t hi;
-};
-
-static __inline
-uint64_t uint128_hi ( const uint128_t *self )
-{
-    return self -> hi;
-}
-
-static __inline
-uint64_t uint128_lo ( const uint128_t *self )
-{
-    return self -> lo;
-}
-
-static __inline
-void uint128_sethi ( uint128_t *self, uint64_t i )
-{
-    self -> hi = i;
-}
-
-static __inline
-void uint128_setlo ( uint128_t *self, uint64_t i )
-{
-    self -> lo = i;
-}
-
-static __inline
-void int128_add ( int128_t *self, const int128_t *i )
-{
-    uint64_t carry = ( ( const uint32_t* ) self ) [ 0 ] + ( ( const uint32_t* ) i ) [ 0 ];
-    self -> hi += i -> hi;
-    carry = ( ( const uint32_t* ) self ) [ 1 ] + ( ( const uint32_t* ) i ) [ 1 ] + ( carry >> 32 );
-    self -> lo += i -> lo;
-    self -> hi += carry >> 32;
-}
-
-static __inline
-void int128_sub ( int128_t *self, const int128_t *i )
-{
-    int carry = i -> lo > self -> lo;
-    self -> hi -= i -> hi;
-    self -> lo -= i -> lo;
-    self -> hi -= carry;
-}
-
-static __inline
-void int128_sar ( int128_t *self, uint32_t i )
-{
-    if ( i < 64 )
-    {
-        self -> lo = ( self -> hi << ( 64 - i ) ) |  ( self -> lo >> i );
-        self -> hi >>= i;
-    }
-    else
-    {
-        self -> lo = self -> hi >> ( i - 64 );
-        self -> hi >>= 63;
-    }
-}
-
-static __inline
-void int128_shl ( int128_t *self, uint32_t i )
-{
-    if ( i < 64 )
-    {
-        self -> hi = ( self -> hi << i ) | ( int64_t ) ( self -> lo >> ( 64 - i ) );
-        self -> lo <<= i;
-    }
-    else
-    {
-        self -> hi = ( int64_t ) ( self -> lo << ( i - 64 ) );
-        self -> lo = 0;
-    }
-}
-
-static __inline
-void uint128_and ( uint128_t *self, const uint128_t *i )
-{
-    self -> lo &= i -> lo;
-    self -> hi &= i -> hi;
-}
-
-static __inline
-void uint128_or ( uint128_t *self, const uint128_t *i )
-{
-    self -> lo |= i -> lo;
-    self -> hi |= i -> hi;
-}
-
-static __inline
-void uint128_orlo ( uint128_t *self, uint64_t i )
-{
-    self -> lo |= i;
-}
-
-static __inline
-void uint128_xor ( uint128_t *self, const uint128_t *i )
-{
-    self -> lo ^= i -> lo;
-    self -> hi ^= i -> hi;
-}
-
-static __inline
-void uint128_not ( uint128_t *self )
-{
-    self -> lo = ~ self -> lo;
-    self -> hi = ~ self -> hi;
-}
-
-static __inline
-void uint128_shr ( uint128_t *self, uint32_t i )
-{
-    if ( i < 64 )
-    {
-        self -> lo = ( self -> hi << ( 64 - i ) ) |  ( self -> lo >> i );
-        self -> hi >>= i;
-    }
-    else
-    {
-        self -> lo = self -> hi >> ( i - 64 );
-        self -> hi >>= 63;
-    }
-}
-
-static __inline
-void uint128_shl ( uint128_t *self, uint32_t i )
-{
-    if ( i < 64 )
-    {
-        self -> hi = ( self -> hi << i ) | ( self -> lo >> ( 64 - i ) );
-        self -> lo <<= i;
-    }
-    else
-    {
-        self -> hi = self -> lo << ( i - 64 );
-        self -> lo = 0;
-    }
-}
-
-static __inline
-void uint128_bswap ( uint128_t *self )
-{
-    uint64_t tmp = _byteswap_uint64 ( self -> lo );
-    self -> lo = _byteswap_uint64 ( self -> hi );
-    ( ( uint64_t* ) self ) [ 1 ] = tmp;
-}
-
-static __inline
-void uint128_bswap_copy ( uint128_t *to, const uint128_t *from )
-{
-    to -> lo = _byteswap_uint64 ( from -> hi );
-    to -> hi = _byteswap_uint64 ( from -> lo );
-}
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/interfaces/cc/vc++/i386/fmtdef.h b/interfaces/cc/vc++/i386/fmtdef.h
deleted file mode 100644
index d51c88f..0000000
--- a/interfaces/cc/vc++/i386/fmtdef.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#ifndef _h_fmtdef_
-#define _h_fmtdef_
-
-/* int64_t is "long long int" in 32 bit */
-#define LD64 "lld"
-#define LU64 "llu"
-#define LX64 "llX"
-#define Lx64 "llx"
-
-/* size_t is traditionally "unsigned int"
-   although it should have been "long unsigned int" */
-#define LUSZ "u"
-#define LXSZ "X"
-#define LxSZ "x"
-
-#endif /* _h_fmtdef_ */
diff --git a/interfaces/cc/vc++/noarch/arch-impl.h b/interfaces/cc/vc++/noarch/arch-impl.h
index 9cf5132..94feb4f 100644
--- a/interfaces/cc/vc++/noarch/arch-impl.h
+++ b/interfaces/cc/vc++/noarch/arch-impl.h
@@ -29,6 +29,10 @@
 
 #include <stdint.h>
 
+#ifndef _INC_STDLIB
+#include <stdlib.h>
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -85,6 +89,196 @@ int32_t uint32_lsbit ( uint32_t self )
     return uint16_lsbit ( self >> 16 ) + 16;
 }
 
+typedef struct int128_t int128_t;
+struct int128_t
+{
+    uint64_t lo;
+    int64_t hi;
+};
+
+static __inline
+int64_t int128_hi ( const int128_t *self )
+{
+    return self -> hi;
+}
+
+static __inline
+uint64_t int128_lo ( const int128_t *self )
+{
+    return self -> lo;
+}
+
+static __inline
+void int128_sethi ( int128_t *self, int64_t i )
+{
+    self -> hi = i;
+}
+
+static __inline
+void int128_setlo ( int128_t *self, uint64_t i )
+{
+    self -> lo = i;
+}
+
+typedef struct uint128_t uint128_t;
+struct uint128_t
+{
+    uint64_t lo;
+    uint64_t hi;
+};
+
+static __inline
+uint64_t uint128_hi ( const uint128_t *self )
+{
+    return self -> hi;
+}
+
+static __inline
+uint64_t uint128_lo ( const uint128_t *self )
+{
+    return self -> lo;
+}
+
+static __inline
+void uint128_sethi ( uint128_t *self, uint64_t i )
+{
+    self -> hi = i;
+}
+
+static __inline
+void uint128_setlo ( uint128_t *self, uint64_t i )
+{
+    self -> lo = i;
+}
+
+static __inline
+void int128_add ( int128_t *self, const int128_t *i )
+{
+    uint64_t carry = ( ( const uint32_t* ) self ) [ 0 ] + ( ( const uint32_t* ) i ) [ 0 ];
+    self -> hi += i -> hi;
+    carry = ( ( const uint32_t* ) self ) [ 1 ] + ( ( const uint32_t* ) i ) [ 1 ] + ( carry >> 32 );
+    self -> lo += i -> lo;
+    self -> hi += carry >> 32;
+}
+
+static __inline
+void int128_sub ( int128_t *self, const int128_t *i )
+{
+    int carry = i -> lo > self -> lo;
+    self -> hi -= i -> hi;
+    self -> lo -= i -> lo;
+    self -> hi -= carry;
+}
+
+static __inline
+void int128_sar ( int128_t *self, uint32_t i )
+{
+    if ( i < 64 )
+    {
+        self -> lo = ( self -> hi << ( 64 - i ) ) |  ( self -> lo >> i );
+        self -> hi >>= i;
+    }
+    else
+    {
+        self -> lo = self -> hi >> ( i - 64 );
+        self -> hi >>= 63;
+    }
+}
+
+static __inline
+void int128_shl ( int128_t *self, uint32_t i )
+{
+    if ( i < 64 )
+    {
+        self -> hi = ( self -> hi << i ) | ( int64_t ) ( self -> lo >> ( 64 - i ) );
+        self -> lo <<= i;
+    }
+    else
+    {
+        self -> hi = ( int64_t ) ( self -> lo << ( i - 64 ) );
+        self -> lo = 0;
+    }
+}
+
+static __inline
+void uint128_and ( uint128_t *self, const uint128_t *i )
+{
+    self -> lo &= i -> lo;
+    self -> hi &= i -> hi;
+}
+
+static __inline
+void uint128_or ( uint128_t *self, const uint128_t *i )
+{
+    self -> lo |= i -> lo;
+    self -> hi |= i -> hi;
+}
+
+static __inline
+void uint128_orlo ( uint128_t *self, uint64_t i )
+{
+    self -> lo |= i;
+}
+
+static __inline
+void uint128_xor ( uint128_t *self, const uint128_t *i )
+{
+    self -> lo ^= i -> lo;
+    self -> hi ^= i -> hi;
+}
+
+static __inline
+void uint128_not ( uint128_t *self )
+{
+    self -> lo = ~ self -> lo;
+    self -> hi = ~ self -> hi;
+}
+
+static __inline
+void uint128_shr ( uint128_t *self, uint32_t i )
+{
+    if ( i < 64 )
+    {
+        self -> lo = ( self -> hi << ( 64 - i ) ) |  ( self -> lo >> i );
+        self -> hi >>= i;
+    }
+    else
+    {
+        self -> lo = self -> hi >> ( i - 64 );
+        self -> hi >>= 63;
+    }
+}
+
+static __inline
+void uint128_shl ( uint128_t *self, uint32_t i )
+{
+    if ( i < 64 )
+    {
+        self -> hi = ( self -> hi << i ) | ( self -> lo >> ( 64 - i ) );
+        self -> lo <<= i;
+    }
+    else
+    {
+        self -> hi = self -> lo << ( i - 64 );
+        self -> lo = 0;
+    }
+}
+
+static __inline
+void uint128_bswap ( uint128_t *self )
+{
+    uint64_t tmp = _byteswap_uint64 ( self -> lo );
+    self -> lo = _byteswap_uint64 ( self -> hi );
+    ( ( uint64_t* ) self ) [ 1 ] = tmp;
+}
+
+static __inline
+void uint128_bswap_copy ( uint128_t *to, const uint128_t *from )
+{
+    to -> lo = _byteswap_uint64 ( from -> hi );
+    to -> hi = _byteswap_uint64 ( from -> lo );
+}
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/interfaces/cc/vc++/noarch/bitstr.h b/interfaces/cc/vc++/noarch/bitstr.h
index de0880f..88a4c34 100644
--- a/interfaces/cc/vc++/noarch/bitstr.h
+++ b/interfaces/cc/vc++/noarch/bitstr.h
@@ -94,7 +94,7 @@ void bitcpy ( void *dbase, bitsz_t doff, const void *sbase, bitsz_t soff, bitsz_
         soff &= ( WRDSIZE - 1 );
 
         /* calculate number of words - 1 in dst */
-        dcountz = ( doff + sz + ( WRDSIZE - 1 ) - WRDSIZE ) >> WRDSHIFT;
+        dcountz = ( size_t ) ( ( doff + sz + ( WRDSIZE - 1 ) - WRDSIZE ) >> WRDSHIFT );
 
         /* calculate masks */
         lmask = rmask = ~ 0;
@@ -139,7 +139,7 @@ void bitcpy ( void *dbase, bitsz_t doff, const void *sbase, bitsz_t soff, bitsz_
         else
         {
             /* source count may differ from dest count */
-            size_t scountz = ( soff + sz + ( WRDSIZE - 1 ) - WRDSIZE ) >> WRDSHIFT;
+            size_t scountz = ( size_t ) ( ( soff + sz + ( WRDSIZE - 1 ) - WRDSIZE ) >> WRDSHIFT );
 
             /* use double-word accumulator */
             ACC acc = BSWAP ( src [ 0 ] );
@@ -259,7 +259,7 @@ int bitcmp ( const void *abase, bitsz_t aoff, const void *bbase, bitsz_t boff, b
            at least 1. our loops treat the last word
            specially, so calculate a loop counter that
            excludes the last word */
-        lcountz = ( aoff + sz + ( WRDSIZE - 1 ) - WRDSIZE ) >> WRDSHIFT;
+        lcountz = ( size_t ) ( ( aoff + sz + ( WRDSIZE - 1 ) - WRDSIZE ) >> WRDSHIFT );
 
         /* calculate masks */
         lmask = rmask = ~ 0;
@@ -301,7 +301,7 @@ int bitcmp ( const void *abase, bitsz_t aoff, const void *bbase, bitsz_t boff, b
                since alignments differ, the span of "sz"
                bits may hit a different number of words in
                the left array than in the right. */
-            size_t rcountz = ( boff + sz + ( WRDSIZE - 1 ) - WRDSIZE ) >> WRDSHIFT;
+            size_t rcountz = ( size_t ) ( ( boff + sz + ( WRDSIZE - 1 ) - WRDSIZE ) >> WRDSHIFT );
 
             /* use double-word accumulator
                note that the extra bits get ignored */
diff --git a/interfaces/cc/vc++/stdint.h b/interfaces/cc/vc++/stdint.h
index 7c6cdf1..057374c 100644
--- a/interfaces/cc/vc++/stdint.h
+++ b/interfaces/cc/vc++/stdint.h
@@ -47,29 +47,70 @@ typedef unsigned __int16 uint16_t;
 typedef unsigned __int32 uint32_t;
 typedef unsigned __int64 uint64_t;
 
+#ifndef INT8_MAX
 #define INT8_MAX _I8_MAX
+#endif
+
+#ifndef INT8_MIN
 #define INT8_MIN _I8_MIN
+#endif
+
+#ifndef UINT8_MAX
 #define UINT8_MAX _UI8_MAX
+#endif
 
+#ifndef INT16_MAX
 #define INT16_MAX _I16_MAX
+#endif
+
+#ifndef INT16_MIN
 #define INT16_MIN _I16_MIN
+#endif
+
+#ifndef UINT16_MAX
 #define UINT16_MAX _UI16_MAX
+#endif
 
+#ifndef INT32_MAX
 #define INT32_MAX _I32_MAX
+#endif
+
+#ifndef INT32_MIN
 #define INT32_MIN _I32_MIN
+#endif
+
+#ifndef UINT32_MAX
 #define UINT32_MAX _UI32_MAX
+#endif
 
+#ifndef INT64_MAX
 #define INT64_MAX _I64_MAX
+#endif
+
+#ifndef INT64_MIN
 #define INT64_MIN _I64_MIN
+#endif
+
+#ifndef UINT64_MAX
 #define UINT64_MAX _UI64_MAX
+#endif
 
 #ifndef SIZE_T_MAX
 #define SIZE_T_MAX ((size_t)(-(1ULL)))
 #endif
 
+#if !defined(__cplusplus)  ||  defined(__STDC_CONSTANT_MACROS)
+#ifndef UINT64_C
+#define UINT64_C(x) (x ## ULL)
+#endif
+#ifndef INT64_C
+#define INT64_C(x) (x ## LL)
+#endif
+#endif
 
-
+#ifndef __func__
 #define __func__ __FUNCTION__
+#endif
 
 #ifdef __cplusplus
 }
diff --git a/interfaces/cc/vc++/x86_64/arch-impl.h b/interfaces/cc/vc++/x86_64/arch-impl.h
index 104d643..2494460 100644
--- a/interfaces/cc/vc++/x86_64/arch-impl.h
+++ b/interfaces/cc/vc++/x86_64/arch-impl.h
@@ -35,139 +35,6 @@
 extern "C" {
 #endif
 
-typedef __int128 int128_t;
-
-static __inline
-int64_t int128_hi ( const int128_t *self )
-{
-    return ( ( const int64_t* ) self ) [ 1 ];
-}
-
-static __inline
-uint64_t int128_lo ( const int128_t *self )
-{
-    return ( ( const uint64_t* ) self ) [ 0 ];
-}
-
-static __inline
-void int128_sethi ( int128_t *self, int64_t i )
-{
-    ( ( int64_t* ) self ) [ 1 ] = i;
-}
-
-static __inline
-void int128_setlo ( int128_t *self, uint64_t i )
-{
-    ( ( uint64_t* ) self ) [ 0 ] = i;
-}
-
-typedef __uint128 uint128_t;
-
-static __inline
-uint64_t uint128_hi ( const uint128_t *self )
-{
-    return ( ( const uint64_t* ) self ) [ 1 ];
-}
-
-static __inline
-uint64_t uint128_lo ( const uint128_t *self )
-{
-    return ( ( const uint64_t* ) self ) [ 0 ];
-}
-
-static __inline
-void uint128_sethi ( uint128_t *self, uint64_t i )
-{
-    ( ( uint64_t* ) self ) [ 1 ] = i;
-}
-
-static __inline
-void uint128_setlo ( uint128_t *self, uint64_t i )
-{
-    ( ( uint64_t* ) self ) [ 0 ] = i;
-}
-
-static __inline
-void int128_add ( int128_t *self, const int128_t *i )
-{
-    * self += * i;
-}
-
-static __inline
-void int128_sub ( int128_t *self, const int128_t *i )
-{
-    * self -= * i;
-}
-
-static __inline
-void int128_sar ( int128_t *self, uint32_t i )
-{
-    * self >>= i;
-}
-
-static __inline
-void int128_shl ( int128_t *self, uint32_t i )
-{
-    * self << i;
-}
-
-static __inline
-void uint128_and ( uint128_t *self, const uint128_t *i )
-{
-    * self &= * i;
-}
-
-static __inline
-void uint128_or ( uint128_t *self, const uint128_t *i )
-{
-    * self |= * i;
-}
-
-static __inline
-void uint128_orlo ( uint128_t *self, uint64_t i )
-{
-    ( ( uint64_t* ) self ) [ 0 ] |= i;
-}
-
-static __inline
-void uint128_xor ( uint128_t *self, const uint128_t *i )
-{
-    * self ^= * i;
-}
-
-static __inline
-void uint128_not ( uint128_t *self )
-{
-    * self = ~ * self;
-}
-
-static __inline
-void uint128_shr ( uint128_t *self, uint32_t i )
-{
-    * self >>= i;
-}
-
-static __inline
-void uint128_shl ( uint128_t *self, uint32_t i )
-{
-    * self <<= i;
-}
-
-static __inline
-void uint128_bswap ( uint128_t *self )
-{
-    uint64_t tmp = _byteswap_uint64 ( ( ( const uint64_t* ) self ) [ 0 ] );
-    ( ( uint64_t* ) self ) [ 0 ] = _byteswap_uint64 ( ( ( const uint64_t* ) self ) [ 1 ] );
-    ( ( uint64_t* ) self ) [ 1 ] = tmp;
-}
-
-static __inline
-void uint128_bswap_copy ( uint128_t *to, const uint128_t *from )
-{
-    ( ( uint64_t* ) to ) [ 0 ] = _byteswap_uint64 ( ( ( const uint64_t* ) from ) [ 1 ] );
-    ( ( uint64_t* ) to ) [ 1 ] = _byteswap_uint64 ( ( ( const uint64_t* ) from ) [ 0 ] );
-}
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/interfaces/cc/vc++/x86_64/fmtdef.h b/interfaces/cc/vc++/x86_64/fmtdef.h
deleted file mode 100644
index 2a39d7c..0000000
--- a/interfaces/cc/vc++/x86_64/fmtdef.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#ifndef _h_fmtdef_
-#define _h_fmtdef_
-
-/* int64_t is now a "long int" */
-#define LD64 "ld"
-#define LU64 "lu"
-#define LX64 "lX"
-#define Lx64 "lx"
-
-/* size_t is now a "long unsigned int" */
-#define LUSZ "lu"
-#define LXSZ "lX"
-#define LxSZ "lx"
-
-#endif /* _h_fmtdef_ */
diff --git a/interfaces/ext/libxml/DOCBparser.h b/interfaces/ext/libxml/DOCBparser.h
new file mode 100644
index 0000000..461d4ee
--- /dev/null
+++ b/interfaces/ext/libxml/DOCBparser.h
@@ -0,0 +1,96 @@
+/*
+ * Summary: old DocBook SGML parser
+ * Description: interface for a DocBook SGML non-verifying parser
+ * This code is DEPRECATED, and should not be used anymore.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __DOCB_PARSER_H__
+#define __DOCB_PARSER_H__
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_DOCB_ENABLED
+
+#include <libxml/parser.h>
+#include <libxml/parserInternals.h>
+
+#ifndef IN_LIBXML
+#ifdef __GNUC__
+#warning "The DOCBparser module has been deprecated in libxml2-2.6.0"
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Most of the back-end structures from XML and SGML are shared.
+ */
+typedef xmlParserCtxt docbParserCtxt;
+typedef xmlParserCtxtPtr docbParserCtxtPtr;
+typedef xmlSAXHandler docbSAXHandler;
+typedef xmlSAXHandlerPtr docbSAXHandlerPtr;
+typedef xmlParserInput docbParserInput;
+typedef xmlParserInputPtr docbParserInputPtr;
+typedef xmlDocPtr docbDocPtr;
+
+/*
+ * There is only few public functions.
+ */
+XMLPUBFUN int XMLCALL
+		     docbEncodeEntities(unsigned char *out,
+                                        int *outlen,
+                                        const unsigned char *in,
+                                        int *inlen, int quoteChar);
+
+XMLPUBFUN docbDocPtr XMLCALL             
+		     docbSAXParseDoc   (xmlChar *cur,
+                                        const char *encoding,
+                                        docbSAXHandlerPtr sax,
+                                        void *userData);
+XMLPUBFUN docbDocPtr XMLCALL             
+		     docbParseDoc      (xmlChar *cur,
+                                        const char *encoding);
+XMLPUBFUN docbDocPtr XMLCALL             
+		     docbSAXParseFile  (const char *filename,
+                                        const char *encoding,
+                                        docbSAXHandlerPtr sax,
+                                        void *userData);
+XMLPUBFUN docbDocPtr XMLCALL             
+		     docbParseFile     (const char *filename,
+                                        const char *encoding);
+
+/**
+ * Interfaces for the Push mode.
+ */
+XMLPUBFUN void XMLCALL                  
+		     docbFreeParserCtxt      (docbParserCtxtPtr ctxt);
+XMLPUBFUN docbParserCtxtPtr XMLCALL     
+		     docbCreatePushParserCtxt(docbSAXHandlerPtr sax,
+                                              void *user_data,
+                                              const char *chunk,
+                                              int size,
+                                              const char *filename,
+                                              xmlCharEncoding enc);
+XMLPUBFUN int XMLCALL                   
+		     docbParseChunk          (docbParserCtxtPtr ctxt,
+                                              const char *chunk,
+                                              int size,
+                                              int terminate);
+XMLPUBFUN docbParserCtxtPtr XMLCALL       
+		     docbCreateFileParserCtxt(const char *filename,
+                                              const char *encoding);
+XMLPUBFUN int XMLCALL                   
+		     docbParseDocument       (docbParserCtxtPtr ctxt);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_DOCB_ENABLED */
+
+#endif /* __DOCB_PARSER_H__ */
diff --git a/interfaces/ext/libxml/HTMLparser.h b/interfaces/ext/libxml/HTMLparser.h
new file mode 100644
index 0000000..05905e4
--- /dev/null
+++ b/interfaces/ext/libxml/HTMLparser.h
@@ -0,0 +1,303 @@
+/*
+ * Summary: interface for an HTML 4.0 non-verifying parser
+ * Description: this module implements an HTML 4.0 non-verifying parser
+ *              with API compatible with the XML parser ones. It should
+ *              be able to parse "real world" HTML, even if severely
+ *              broken from a specification point of view.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __HTML_PARSER_H__
+#define __HTML_PARSER_H__
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+
+#ifdef LIBXML_HTML_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Most of the back-end structures from XML and HTML are shared.
+ */
+typedef xmlParserCtxt htmlParserCtxt;
+typedef xmlParserCtxtPtr htmlParserCtxtPtr;
+typedef xmlParserNodeInfo htmlParserNodeInfo;
+typedef xmlSAXHandler htmlSAXHandler;
+typedef xmlSAXHandlerPtr htmlSAXHandlerPtr;
+typedef xmlParserInput htmlParserInput;
+typedef xmlParserInputPtr htmlParserInputPtr;
+typedef xmlDocPtr htmlDocPtr;
+typedef xmlNodePtr htmlNodePtr;
+
+/*
+ * Internal description of an HTML element, representing HTML 4.01
+ * and XHTML 1.0 (which share the same structure).
+ */
+typedef struct _htmlElemDesc htmlElemDesc;
+typedef htmlElemDesc *htmlElemDescPtr;
+struct _htmlElemDesc {
+    const char *name;	/* The tag name */
+    char startTag;      /* Whether the start tag can be implied */
+    char endTag;        /* Whether the end tag can be implied */
+    char saveEndTag;    /* Whether the end tag should be saved */
+    char empty;         /* Is this an empty element ? */
+    char depr;          /* Is this a deprecated element ? */
+    char dtd;           /* 1: only in Loose DTD, 2: only Frameset one */
+    char isinline;      /* is this a block 0 or inline 1 element */
+    const char *desc;   /* the description */
+
+/* NRK Jan.2003
+ * New fields encapsulating HTML structure
+ *
+ * Bugs:
+ *	This is a very limited representation.  It fails to tell us when
+ *	an element *requires* subelements (we only have whether they're
+ *	allowed or not), and it doesn't tell us where CDATA and PCDATA
+ *	are allowed.  Some element relationships are not fully represented:
+ *	these are flagged with the word MODIFIER
+ */
+    const char** subelts;		/* allowed sub-elements of this element */
+    const char* defaultsubelt;	/* subelement for suggested auto-repair
+					   if necessary or NULL */
+    const char** attrs_opt;		/* Optional Attributes */
+    const char** attrs_depr;		/* Additional deprecated attributes */
+    const char** attrs_req;		/* Required attributes */
+};
+
+/*
+ * Internal description of an HTML entity.
+ */
+typedef struct _htmlEntityDesc htmlEntityDesc;
+typedef htmlEntityDesc *htmlEntityDescPtr;
+struct _htmlEntityDesc {
+    unsigned int value;	/* the UNICODE value for the character */
+    const char *name;	/* The entity name */
+    const char *desc;   /* the description */
+};
+
+/*
+ * There is only few public functions.
+ */
+XMLPUBFUN const htmlElemDesc * XMLCALL 	
+			htmlTagLookup	(const xmlChar *tag);
+XMLPUBFUN const htmlEntityDesc * XMLCALL 	
+			htmlEntityLookup(const xmlChar *name);
+XMLPUBFUN const htmlEntityDesc * XMLCALL 	
+			htmlEntityValueLookup(unsigned int value);
+
+XMLPUBFUN int XMLCALL			
+			htmlIsAutoClosed(htmlDocPtr doc,
+					 htmlNodePtr elem);
+XMLPUBFUN int XMLCALL			
+			htmlAutoCloseTag(htmlDocPtr doc,
+					 const xmlChar *name,
+					 htmlNodePtr elem);
+XMLPUBFUN const htmlEntityDesc * XMLCALL	
+			htmlParseEntityRef(htmlParserCtxtPtr ctxt,
+					 const xmlChar **str);
+XMLPUBFUN int XMLCALL			
+			htmlParseCharRef(htmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL			
+			htmlParseElement(htmlParserCtxtPtr ctxt);
+
+XMLPUBFUN htmlParserCtxtPtr XMLCALL	
+			htmlNewParserCtxt(void);
+
+XMLPUBFUN htmlParserCtxtPtr XMLCALL	
+			htmlCreateMemoryParserCtxt(const char *buffer,
+						   int size);
+
+XMLPUBFUN int XMLCALL			
+			htmlParseDocument(htmlParserCtxtPtr ctxt);
+XMLPUBFUN htmlDocPtr XMLCALL		
+			htmlSAXParseDoc	(xmlChar *cur,
+					 const char *encoding,
+					 htmlSAXHandlerPtr sax,
+					 void *userData);
+XMLPUBFUN htmlDocPtr XMLCALL		
+			htmlParseDoc	(xmlChar *cur,
+					 const char *encoding);
+XMLPUBFUN htmlDocPtr XMLCALL		
+			htmlSAXParseFile(const char *filename,
+					 const char *encoding,
+					 htmlSAXHandlerPtr sax,
+					 void *userData);
+XMLPUBFUN htmlDocPtr XMLCALL		
+			htmlParseFile	(const char *filename,
+					 const char *encoding);
+XMLPUBFUN int XMLCALL			
+			UTF8ToHtml	(unsigned char *out,
+					 int *outlen,
+					 const unsigned char *in,
+					 int *inlen);
+XMLPUBFUN int XMLCALL			
+			htmlEncodeEntities(unsigned char *out,
+					 int *outlen,
+					 const unsigned char *in,
+					 int *inlen, int quoteChar);
+XMLPUBFUN int XMLCALL			
+			htmlIsScriptAttribute(const xmlChar *name);
+XMLPUBFUN int XMLCALL			
+			htmlHandleOmittedElem(int val);
+
+#ifdef LIBXML_PUSH_ENABLED
+/**
+ * Interfaces for the Push mode.
+ */
+XMLPUBFUN htmlParserCtxtPtr XMLCALL	
+			htmlCreatePushParserCtxt(htmlSAXHandlerPtr sax,
+						 void *user_data,
+						 const char *chunk,
+						 int size,
+						 const char *filename,
+						 xmlCharEncoding enc);
+XMLPUBFUN int XMLCALL			
+			htmlParseChunk		(htmlParserCtxtPtr ctxt,
+						 const char *chunk,
+						 int size,
+						 int terminate);
+#endif /* LIBXML_PUSH_ENABLED */
+
+XMLPUBFUN void XMLCALL			
+			htmlFreeParserCtxt	(htmlParserCtxtPtr ctxt);
+
+/*
+ * New set of simpler/more flexible APIs
+ */
+/**
+ * xmlParserOption:
+ *
+ * This is the set of XML parser options that can be passed down
+ * to the xmlReadDoc() and similar calls.
+ */
+typedef enum {
+    HTML_PARSE_RECOVER  = 1<<0, /* Relaxed parsing */
+    HTML_PARSE_NOERROR	= 1<<5,	/* suppress error reports */
+    HTML_PARSE_NOWARNING= 1<<6,	/* suppress warning reports */
+    HTML_PARSE_PEDANTIC	= 1<<7,	/* pedantic error reporting */
+    HTML_PARSE_NOBLANKS	= 1<<8,	/* remove blank nodes */
+    HTML_PARSE_NONET	= 1<<11,/* Forbid network access */
+    HTML_PARSE_COMPACT  = 1<<16 /* compact small text nodes */
+} htmlParserOption;
+
+XMLPUBFUN void XMLCALL
+		htmlCtxtReset		(htmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+		htmlCtxtUseOptions	(htmlParserCtxtPtr ctxt,
+					 int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+		htmlReadDoc		(const xmlChar *cur,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+		htmlReadFile		(const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+		htmlReadMemory		(const char *buffer,
+					 int size,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+		htmlReadFd		(int fd,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+		htmlReadIO		(xmlInputReadCallback ioread,
+					 xmlInputCloseCallback ioclose,
+					 void *ioctx,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+		htmlCtxtReadDoc		(xmlParserCtxtPtr ctxt,
+					 const xmlChar *cur,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+		htmlCtxtReadFile		(xmlParserCtxtPtr ctxt,
+					 const char *filename,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+		htmlCtxtReadMemory		(xmlParserCtxtPtr ctxt,
+					 const char *buffer,
+					 int size,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+		htmlCtxtReadFd		(xmlParserCtxtPtr ctxt,
+					 int fd,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN htmlDocPtr XMLCALL
+		htmlCtxtReadIO		(xmlParserCtxtPtr ctxt,
+					 xmlInputReadCallback ioread,
+					 xmlInputCloseCallback ioclose,
+					 void *ioctx,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+
+/* NRK/Jan2003: further knowledge of HTML structure
+ */
+typedef enum {
+  HTML_NA = 0 ,		/* something we don't check at all */
+  HTML_INVALID = 0x1 ,
+  HTML_DEPRECATED = 0x2 ,
+  HTML_VALID = 0x4 ,
+  HTML_REQUIRED = 0xc /* VALID bit set so ( & HTML_VALID ) is TRUE */
+} htmlStatus ;
+
+/* Using htmlElemDesc rather than name here, to emphasise the fact
+   that otherwise there's a lookup overhead
+*/
+XMLPUBFUN htmlStatus XMLCALL htmlAttrAllowed(const htmlElemDesc*, const xmlChar*, int) ;
+XMLPUBFUN int XMLCALL htmlElementAllowedHere(const htmlElemDesc*, const xmlChar*) ;
+XMLPUBFUN htmlStatus XMLCALL htmlElementStatusHere(const htmlElemDesc*, const htmlElemDesc*) ;
+XMLPUBFUN htmlStatus XMLCALL htmlNodeStatus(const htmlNodePtr, int) ;
+/**
+ * htmlDefaultSubelement:
+ * @elt: HTML element
+ *
+ * Returns the default subelement for this element
+ */
+#define htmlDefaultSubelement(elt) elt->defaultsubelt
+/**
+ * htmlElementAllowedHereDesc:
+ * @parent: HTML parent element
+ * @elt: HTML element
+ *
+ * Checks whether an HTML element description may be a
+ * direct child of the specified element.
+ *
+ * Returns 1 if allowed; 0 otherwise.
+ */
+#define htmlElementAllowedHereDesc(parent,elt) \
+	htmlElementAllowedHere((parent), (elt)->name)
+/**
+ * htmlRequiredAttrs:
+ * @elt: HTML element
+ *
+ * Returns the attributes required for the specified element.
+ */
+#define htmlRequiredAttrs(elt) (elt)->attrs_req
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_HTML_ENABLED */
+#endif /* __HTML_PARSER_H__ */
diff --git a/interfaces/ext/libxml/HTMLtree.h b/interfaces/ext/libxml/HTMLtree.h
new file mode 100644
index 0000000..6ea8207
--- /dev/null
+++ b/interfaces/ext/libxml/HTMLtree.h
@@ -0,0 +1,147 @@
+/*
+ * Summary: specific APIs to process HTML tree, especially serialization
+ * Description: this module implements a few function needed to process
+ *              tree in an HTML specific way.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __HTML_TREE_H__
+#define __HTML_TREE_H__
+
+#include <stdio.h>
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/HTMLparser.h>
+
+#ifdef LIBXML_HTML_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/**
+ * HTML_TEXT_NODE:
+ *
+ * Macro. A text node in a HTML document is really implemented
+ * the same way as a text node in an XML document.
+ */
+#define HTML_TEXT_NODE		XML_TEXT_NODE
+/**
+ * HTML_ENTITY_REF_NODE:
+ *
+ * Macro. An entity reference in a HTML document is really implemented
+ * the same way as an entity reference in an XML document.
+ */
+#define HTML_ENTITY_REF_NODE	XML_ENTITY_REF_NODE
+/**
+ * HTML_COMMENT_NODE:
+ *
+ * Macro. A comment in a HTML document is really implemented
+ * the same way as a comment in an XML document.
+ */
+#define HTML_COMMENT_NODE	XML_COMMENT_NODE
+/**
+ * HTML_PRESERVE_NODE:
+ *
+ * Macro. A preserved node in a HTML document is really implemented
+ * the same way as a CDATA section in an XML document.
+ */
+#define HTML_PRESERVE_NODE	XML_CDATA_SECTION_NODE
+/**
+ * HTML_PI_NODE:
+ *
+ * Macro. A processing instruction in a HTML document is really implemented
+ * the same way as a processing instruction in an XML document.
+ */
+#define HTML_PI_NODE		XML_PI_NODE
+
+XMLPUBFUN htmlDocPtr XMLCALL
+		htmlNewDoc		(const xmlChar *URI,
+					 const xmlChar *ExternalID);
+XMLPUBFUN htmlDocPtr XMLCALL	
+		htmlNewDocNoDtD		(const xmlChar *URI,
+					 const xmlChar *ExternalID);
+XMLPUBFUN const xmlChar * XMLCALL	
+		htmlGetMetaEncoding	(htmlDocPtr doc);
+XMLPUBFUN int XMLCALL		
+		htmlSetMetaEncoding	(htmlDocPtr doc,
+					 const xmlChar *encoding);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL	    
+		htmlDocDumpMemory	(xmlDocPtr cur,
+					 xmlChar **mem,
+					 int *size);
+XMLPUBFUN void XMLCALL	    
+		htmlDocDumpMemoryFormat	(xmlDocPtr cur,
+					 xmlChar **mem,
+					 int *size,
+					 int format);
+XMLPUBFUN int XMLCALL		
+		htmlDocDump		(FILE *f,
+					 xmlDocPtr cur);
+XMLPUBFUN int XMLCALL		
+		htmlSaveFile		(const char *filename,
+					 xmlDocPtr cur);
+XMLPUBFUN int XMLCALL		
+		htmlNodeDump		(xmlBufferPtr buf,
+					 xmlDocPtr doc,
+					 xmlNodePtr cur);
+XMLPUBFUN void XMLCALL		
+		htmlNodeDumpFile	(FILE *out,
+					 xmlDocPtr doc,
+					 xmlNodePtr cur);
+XMLPUBFUN int XMLCALL		
+		htmlNodeDumpFileFormat	(FILE *out,
+					 xmlDocPtr doc,
+					 xmlNodePtr cur,
+					 const char *encoding,
+					 int format);
+XMLPUBFUN int XMLCALL		
+		htmlSaveFileEnc		(const char *filename,
+					 xmlDocPtr cur,
+					 const char *encoding);
+XMLPUBFUN int XMLCALL		
+		htmlSaveFileFormat	(const char *filename,
+					 xmlDocPtr cur,
+					 const char *encoding,
+					 int format);
+
+XMLPUBFUN void XMLCALL		
+		htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf,
+					 xmlDocPtr doc,
+					 xmlNodePtr cur,
+					 const char *encoding,
+					 int format);
+XMLPUBFUN void XMLCALL		
+		htmlDocContentDumpOutput(xmlOutputBufferPtr buf,
+					 xmlDocPtr cur,
+					 const char *encoding);
+XMLPUBFUN void XMLCALL		
+		htmlDocContentDumpFormatOutput(xmlOutputBufferPtr buf,
+					 xmlDocPtr cur,
+					 const char *encoding,
+					 int format);
+XMLPUBFUN void XMLCALL 
+		htmlNodeDumpOutput	(xmlOutputBufferPtr buf, 
+					 xmlDocPtr doc,
+					 xmlNodePtr cur, 
+					 const char *encoding);
+
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+XMLPUBFUN int XMLCALL		
+		htmlIsBooleanAttr	(const xmlChar *name);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_HTML_ENABLED */
+
+#endif /* __HTML_TREE_H__ */
+
diff --git a/interfaces/ext/libxml/SAX.h b/interfaces/ext/libxml/SAX.h
new file mode 100644
index 0000000..0ca161b
--- /dev/null
+++ b/interfaces/ext/libxml/SAX.h
@@ -0,0 +1,173 @@
+/*
+ * Summary: Old SAX version 1 handler, deprecated
+ * Description: DEPRECATED set of SAX version 1 interfaces used to
+ *              build the DOM tree.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_SAX_H__
+#define __XML_SAX_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+#include <libxml/xlink.h>
+
+#ifdef LIBXML_LEGACY_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+XMLPUBFUN const xmlChar * XMLCALL
+		getPublicId			(void *ctx);
+XMLPUBFUN const xmlChar * XMLCALL	
+		getSystemId			(void *ctx);
+XMLPUBFUN void XMLCALL		
+		setDocumentLocator		(void *ctx,
+						 xmlSAXLocatorPtr loc);
+    
+XMLPUBFUN int XMLCALL		
+		getLineNumber			(void *ctx);
+XMLPUBFUN int XMLCALL		
+		getColumnNumber			(void *ctx);
+
+XMLPUBFUN int XMLCALL		
+		isStandalone			(void *ctx);
+XMLPUBFUN int XMLCALL		
+		hasInternalSubset		(void *ctx);
+XMLPUBFUN int XMLCALL		
+		hasExternalSubset		(void *ctx);
+
+XMLPUBFUN void XMLCALL		
+		internalSubset			(void *ctx,
+						 const xmlChar *name,
+						 const xmlChar *ExternalID,
+						 const xmlChar *SystemID);
+XMLPUBFUN void XMLCALL		
+		externalSubset			(void *ctx,
+						 const xmlChar *name,
+						 const xmlChar *ExternalID,
+						 const xmlChar *SystemID);
+XMLPUBFUN xmlEntityPtr XMLCALL	
+		getEntity			(void *ctx,
+						 const xmlChar *name);
+XMLPUBFUN xmlEntityPtr XMLCALL	
+		getParameterEntity		(void *ctx,
+						 const xmlChar *name);
+XMLPUBFUN xmlParserInputPtr XMLCALL 
+		resolveEntity			(void *ctx,
+						 const xmlChar *publicId,
+						 const xmlChar *systemId);
+
+XMLPUBFUN void XMLCALL		
+		entityDecl			(void *ctx,
+						 const xmlChar *name,
+						 int type,
+						 const xmlChar *publicId,
+						 const xmlChar *systemId,
+						 xmlChar *content);
+XMLPUBFUN void XMLCALL		
+		attributeDecl			(void *ctx,
+						 const xmlChar *elem,
+						 const xmlChar *fullname,
+						 int type,
+						 int def,
+						 const xmlChar *defaultValue,
+						 xmlEnumerationPtr tree);
+XMLPUBFUN void XMLCALL		
+		elementDecl			(void *ctx,
+						 const xmlChar *name,
+						 int type,
+						 xmlElementContentPtr content);
+XMLPUBFUN void XMLCALL		
+		notationDecl			(void *ctx,
+						 const xmlChar *name,
+						 const xmlChar *publicId,
+						 const xmlChar *systemId);
+XMLPUBFUN void XMLCALL		
+		unparsedEntityDecl		(void *ctx,
+						 const xmlChar *name,
+						 const xmlChar *publicId,
+						 const xmlChar *systemId,
+						 const xmlChar *notationName);
+
+XMLPUBFUN void XMLCALL		
+		startDocument			(void *ctx);
+XMLPUBFUN void XMLCALL		
+		endDocument			(void *ctx);
+XMLPUBFUN void XMLCALL		
+		attribute			(void *ctx,
+						 const xmlChar *fullname,
+						 const xmlChar *value);
+XMLPUBFUN void XMLCALL		
+		startElement			(void *ctx,
+						 const xmlChar *fullname,
+						 const xmlChar **atts);
+XMLPUBFUN void XMLCALL		
+		endElement			(void *ctx,
+						 const xmlChar *name);
+XMLPUBFUN void XMLCALL		
+		reference			(void *ctx,
+						 const xmlChar *name);
+XMLPUBFUN void XMLCALL		
+		characters			(void *ctx,
+						 const xmlChar *ch,
+						 int len);
+XMLPUBFUN void XMLCALL		
+		ignorableWhitespace		(void *ctx,
+						 const xmlChar *ch,
+						 int len);
+XMLPUBFUN void XMLCALL		
+		processingInstruction		(void *ctx,
+						 const xmlChar *target,
+						 const xmlChar *data);
+XMLPUBFUN void XMLCALL		
+		globalNamespace			(void *ctx,
+						 const xmlChar *href,
+						 const xmlChar *prefix);
+XMLPUBFUN void XMLCALL		
+		setNamespace			(void *ctx,
+						 const xmlChar *name);
+XMLPUBFUN xmlNsPtr XMLCALL	
+		getNamespace			(void *ctx);
+XMLPUBFUN int XMLCALL		
+		checkNamespace			(void *ctx,
+						 xmlChar *nameSpace);
+XMLPUBFUN void XMLCALL		
+		namespaceDecl			(void *ctx,
+						 const xmlChar *href,
+						 const xmlChar *prefix);
+XMLPUBFUN void XMLCALL		
+		comment				(void *ctx,
+						 const xmlChar *value);
+XMLPUBFUN void XMLCALL		
+		cdataBlock			(void *ctx,
+						 const xmlChar *value,
+						 int len);
+
+#ifdef LIBXML_SAX1_ENABLED
+XMLPUBFUN void XMLCALL		
+		initxmlDefaultSAXHandler	(xmlSAXHandlerV1 *hdlr,
+						 int warning);
+#ifdef LIBXML_HTML_ENABLED
+XMLPUBFUN void XMLCALL		
+		inithtmlDefaultSAXHandler	(xmlSAXHandlerV1 *hdlr);
+#endif
+#ifdef LIBXML_DOCB_ENABLED
+XMLPUBFUN void XMLCALL		
+		initdocbDefaultSAXHandler	(xmlSAXHandlerV1 *hdlr);
+#endif
+#endif /* LIBXML_SAX1_ENABLED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_LEGACY_ENABLED */
+
+#endif /* __XML_SAX_H__ */
diff --git a/interfaces/ext/libxml/SAX2.h b/interfaces/ext/libxml/SAX2.h
new file mode 100644
index 0000000..8d2db02
--- /dev/null
+++ b/interfaces/ext/libxml/SAX2.h
@@ -0,0 +1,176 @@
+/*
+ * Summary: SAX2 parser interface used to build the DOM tree
+ * Description: those are the default SAX2 interfaces used by
+ *              the library when building DOM tree.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_SAX2_H__
+#define __XML_SAX2_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+#include <libxml/xlink.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+XMLPUBFUN const xmlChar * XMLCALL
+		xmlSAX2GetPublicId		(void *ctx);
+XMLPUBFUN const xmlChar * XMLCALL	
+		xmlSAX2GetSystemId		(void *ctx);
+XMLPUBFUN void XMLCALL		
+		xmlSAX2SetDocumentLocator	(void *ctx,
+						 xmlSAXLocatorPtr loc);
+    
+XMLPUBFUN int XMLCALL		
+		xmlSAX2GetLineNumber		(void *ctx);
+XMLPUBFUN int XMLCALL		
+		xmlSAX2GetColumnNumber		(void *ctx);
+
+XMLPUBFUN int XMLCALL		
+		xmlSAX2IsStandalone		(void *ctx);
+XMLPUBFUN int XMLCALL		
+		xmlSAX2HasInternalSubset	(void *ctx);
+XMLPUBFUN int XMLCALL		
+		xmlSAX2HasExternalSubset	(void *ctx);
+
+XMLPUBFUN void XMLCALL		
+		xmlSAX2InternalSubset		(void *ctx,
+						 const xmlChar *name,
+						 const xmlChar *ExternalID,
+						 const xmlChar *SystemID);
+XMLPUBFUN void XMLCALL		
+		xmlSAX2ExternalSubset		(void *ctx,
+						 const xmlChar *name,
+						 const xmlChar *ExternalID,
+						 const xmlChar *SystemID);
+XMLPUBFUN xmlEntityPtr XMLCALL	
+		xmlSAX2GetEntity		(void *ctx,
+						 const xmlChar *name);
+XMLPUBFUN xmlEntityPtr XMLCALL	
+		xmlSAX2GetParameterEntity	(void *ctx,
+						 const xmlChar *name);
+XMLPUBFUN xmlParserInputPtr XMLCALL 
+		xmlSAX2ResolveEntity		(void *ctx,
+						 const xmlChar *publicId,
+						 const xmlChar *systemId);
+
+XMLPUBFUN void XMLCALL		
+		xmlSAX2EntityDecl		(void *ctx,
+						 const xmlChar *name,
+						 int type,
+						 const xmlChar *publicId,
+						 const xmlChar *systemId,
+						 xmlChar *content);
+XMLPUBFUN void XMLCALL		
+		xmlSAX2AttributeDecl		(void *ctx,
+						 const xmlChar *elem,
+						 const xmlChar *fullname,
+						 int type,
+						 int def,
+						 const xmlChar *defaultValue,
+						 xmlEnumerationPtr tree);
+XMLPUBFUN void XMLCALL		
+		xmlSAX2ElementDecl		(void *ctx,
+						 const xmlChar *name,
+						 int type,
+						 xmlElementContentPtr content);
+XMLPUBFUN void XMLCALL		
+		xmlSAX2NotationDecl		(void *ctx,
+						 const xmlChar *name,
+						 const xmlChar *publicId,
+						 const xmlChar *systemId);
+XMLPUBFUN void XMLCALL		
+		xmlSAX2UnparsedEntityDecl	(void *ctx,
+						 const xmlChar *name,
+						 const xmlChar *publicId,
+						 const xmlChar *systemId,
+						 const xmlChar *notationName);
+
+XMLPUBFUN void XMLCALL		
+		xmlSAX2StartDocument		(void *ctx);
+XMLPUBFUN void XMLCALL		
+		xmlSAX2EndDocument		(void *ctx);
+#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
+XMLPUBFUN void XMLCALL		
+		xmlSAX2StartElement		(void *ctx,
+						 const xmlChar *fullname,
+						 const xmlChar **atts);
+XMLPUBFUN void XMLCALL		
+		xmlSAX2EndElement		(void *ctx,
+						 const xmlChar *name);
+#endif /* LIBXML_SAX1_ENABLED or LIBXML_HTML_ENABLED */
+XMLPUBFUN void XMLCALL
+		xmlSAX2StartElementNs		(void *ctx,
+						 const xmlChar *localname,
+						 const xmlChar *prefix,
+						 const xmlChar *URI,
+						 int nb_namespaces,
+						 const xmlChar **namespaces,
+						 int nb_attributes,
+						 int nb_defaulted,
+						 const xmlChar **attributes);
+XMLPUBFUN void XMLCALL
+		xmlSAX2EndElementNs		(void *ctx,
+						 const xmlChar *localname,
+						 const xmlChar *prefix,
+						 const xmlChar *URI);
+XMLPUBFUN void XMLCALL		
+		xmlSAX2Reference		(void *ctx,
+						 const xmlChar *name);
+XMLPUBFUN void XMLCALL		
+		xmlSAX2Characters		(void *ctx,
+						 const xmlChar *ch,
+						 int len);
+XMLPUBFUN void XMLCALL		
+		xmlSAX2IgnorableWhitespace	(void *ctx,
+						 const xmlChar *ch,
+						 int len);
+XMLPUBFUN void XMLCALL		
+		xmlSAX2ProcessingInstruction	(void *ctx,
+						 const xmlChar *target,
+						 const xmlChar *data);
+XMLPUBFUN void XMLCALL		
+		xmlSAX2Comment			(void *ctx,
+						 const xmlChar *value);
+XMLPUBFUN void XMLCALL		
+		xmlSAX2CDataBlock		(void *ctx,
+						 const xmlChar *value,
+						 int len);
+
+#ifdef LIBXML_SAX1_ENABLED
+XMLPUBFUN int XMLCALL
+		xmlSAXDefaultVersion		(int version);
+#endif /* LIBXML_SAX1_ENABLED */
+
+XMLPUBFUN int XMLCALL
+		xmlSAXVersion			(xmlSAXHandler *hdlr,
+						 int version);
+XMLPUBFUN void XMLCALL		
+		xmlSAX2InitDefaultSAXHandler    (xmlSAXHandler *hdlr,
+						 int warning);
+#ifdef LIBXML_HTML_ENABLED
+XMLPUBFUN void XMLCALL		
+		xmlSAX2InitHtmlDefaultSAXHandler(xmlSAXHandler *hdlr);
+XMLPUBFUN void XMLCALL		
+		htmlDefaultSAXHandlerInit	(void);
+#endif
+#ifdef LIBXML_DOCB_ENABLED
+XMLPUBFUN void XMLCALL		
+		xmlSAX2InitDocbDefaultSAXHandler(xmlSAXHandler *hdlr);
+XMLPUBFUN void XMLCALL		
+		docbDefaultSAXHandlerInit	(void);
+#endif
+XMLPUBFUN void XMLCALL		
+		xmlDefaultSAXHandlerInit	(void);
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_SAX2_H__ */
diff --git a/interfaces/ext/libxml/c14n.h b/interfaces/ext/libxml/c14n.h
new file mode 100644
index 0000000..a8aa737
--- /dev/null
+++ b/interfaces/ext/libxml/c14n.h
@@ -0,0 +1,115 @@
+/*
+ * Summary: Provide Canonical XML and Exclusive XML Canonicalization
+ * Description: the c14n modules provides a
+ *
+ * "Canonical XML" implementation
+ * http://www.w3.org/TR/xml-c14n
+ *
+ * and an
+ *
+ * "Exclusive XML Canonicalization" implementation
+ * http://www.w3.org/TR/xml-exc-c14n
+
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Aleksey Sanin <aleksey at aleksey.com>
+ */
+#ifndef __XML_C14N_H__
+#define __XML_C14N_H__
+#ifdef LIBXML_C14N_ENABLED
+#ifdef LIBXML_OUTPUT_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/xpath.h>
+
+/*
+ * XML Canonicazation
+ * http://www.w3.org/TR/xml-c14n
+ *
+ * Exclusive XML Canonicazation
+ * http://www.w3.org/TR/xml-exc-c14n
+ *
+ * Canonical form of an XML document could be created if and only if
+ *  a) default attributes (if any) are added to all nodes
+ *  b) all character and parsed entity references are resolved
+ * In order to achive this in libxml2 the document MUST be loaded with
+ * following global setings:
+ *
+ *    xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
+ *    xmlSubstituteEntitiesDefault(1);
+ *
+ * or corresponding parser context setting:
+ *    xmlParserCtxtPtr ctxt;
+ *
+ *    ...
+ *    ctxt->loadsubset = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
+ *    ctxt->replaceEntities = 1;
+ *    ...
+ */
+
+
+XMLPUBFUN int XMLCALL
+		xmlC14NDocSaveTo	(xmlDocPtr doc,
+					 xmlNodeSetPtr nodes,
+					 int exclusive,
+					 xmlChar **inclusive_ns_prefixes,
+					 int with_comments,
+					 xmlOutputBufferPtr buf);
+
+XMLPUBFUN int XMLCALL
+		xmlC14NDocDumpMemory	(xmlDocPtr doc,
+					 xmlNodeSetPtr nodes,
+					 int exclusive,
+					 xmlChar **inclusive_ns_prefixes,
+					 int with_comments,
+					 xmlChar **doc_txt_ptr);
+
+XMLPUBFUN int XMLCALL
+		xmlC14NDocSave		(xmlDocPtr doc,
+					 xmlNodeSetPtr nodes,
+					 int exclusive,
+					 xmlChar **inclusive_ns_prefixes,
+					 int with_comments,
+					 const char* filename,
+					 int compression);
+
+
+/**
+ * This is the core C14N function
+ */
+/**
+ * xmlC14NIsVisibleCallback:
+ * @user_data: user data
+ * @node: the curent node
+ * @parent: the parent node
+ *
+ * Signature for a C14N callback on visible nodes
+ *
+ * Returns 1 if the node should be included
+ */
+typedef int (*xmlC14NIsVisibleCallback)	(void* user_data,
+					 xmlNodePtr node,
+					 xmlNodePtr parent);
+
+XMLPUBFUN int XMLCALL
+		xmlC14NExecute		(xmlDocPtr doc,
+					 xmlC14NIsVisibleCallback is_visible_callback,
+					 void* user_data,
+					 int exclusive,
+					 xmlChar **inclusive_ns_prefixes,
+					 int with_comments,
+					 xmlOutputBufferPtr buf);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* LIBXML_OUTPUT_ENABLED */
+#endif /* LIBXML_C14N_ENABLED */
+#endif /* __XML_C14N_H__ */
+
diff --git a/interfaces/ext/libxml/catalog.h b/interfaces/ext/libxml/catalog.h
new file mode 100644
index 0000000..b444137
--- /dev/null
+++ b/interfaces/ext/libxml/catalog.h
@@ -0,0 +1,182 @@
+/**
+ * Summary: interfaces to the Catalog handling system
+ * Description: the catalog module implements the support for
+ * XML Catalogs and SGML catalogs
+ *
+ * SGML Open Technical Resolution TR9401:1997.
+ * http://www.jclark.com/sp/catalog.htm
+ *
+ * XML Catalogs Working Draft 06 August 2001
+ * http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_CATALOG_H__
+#define __XML_CATALOG_H__
+
+#include <stdio.h>
+
+#include <libxml/xmlversion.h>
+#include <libxml/xmlstring.h>
+#include <libxml/tree.h>
+
+#ifdef LIBXML_CATALOG_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * XML_CATALOGS_NAMESPACE:
+ *
+ * The namespace for the XML Catalogs elements.
+ */
+#define XML_CATALOGS_NAMESPACE					\
+    (const xmlChar *) "urn:oasis:names:tc:entity:xmlns:xml:catalog"
+/**
+ * XML_CATALOG_PI:
+ *
+ * The specific XML Catalog Processing Instuction name.
+ */
+#define XML_CATALOG_PI						\
+    (const xmlChar *) "oasis-xml-catalog"
+
+/*
+ * The API is voluntarily limited to general cataloging.
+ */
+typedef enum {
+    XML_CATA_PREFER_NONE = 0,
+    XML_CATA_PREFER_PUBLIC = 1,
+    XML_CATA_PREFER_SYSTEM
+} xmlCatalogPrefer;
+
+typedef enum {
+    XML_CATA_ALLOW_NONE = 0,
+    XML_CATA_ALLOW_GLOBAL = 1,
+    XML_CATA_ALLOW_DOCUMENT = 2,
+    XML_CATA_ALLOW_ALL = 3
+} xmlCatalogAllow;
+
+typedef struct _xmlCatalog xmlCatalog;
+typedef xmlCatalog *xmlCatalogPtr;
+
+/*
+ * Operations on a given catalog.
+ */
+XMLPUBFUN xmlCatalogPtr XMLCALL
+		xmlNewCatalog		(int sgml);
+XMLPUBFUN xmlCatalogPtr XMLCALL	
+		xmlLoadACatalog		(const char *filename);
+XMLPUBFUN xmlCatalogPtr XMLCALL	
+		xmlLoadSGMLSuperCatalog	(const char *filename);
+XMLPUBFUN int XMLCALL		
+		xmlConvertSGMLCatalog	(xmlCatalogPtr catal);
+XMLPUBFUN int XMLCALL		
+		xmlACatalogAdd		(xmlCatalogPtr catal,
+					 const xmlChar *type,
+					 const xmlChar *orig,
+					 const xmlChar *replace);
+XMLPUBFUN int XMLCALL		
+		xmlACatalogRemove	(xmlCatalogPtr catal,
+					 const xmlChar *value);
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlACatalogResolve	(xmlCatalogPtr catal,
+					 const xmlChar *pubID,
+	                                 const xmlChar *sysID);
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlACatalogResolveSystem(xmlCatalogPtr catal,
+					 const xmlChar *sysID);
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlACatalogResolvePublic(xmlCatalogPtr catal,
+					 const xmlChar *pubID);
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlACatalogResolveURI	(xmlCatalogPtr catal,
+					 const xmlChar *URI);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL		
+		xmlACatalogDump		(xmlCatalogPtr catal,
+					 FILE *out);
+#endif /* LIBXML_OUTPUT_ENABLED */
+XMLPUBFUN void XMLCALL		
+		xmlFreeCatalog		(xmlCatalogPtr catal);
+XMLPUBFUN int XMLCALL		
+		xmlCatalogIsEmpty	(xmlCatalogPtr catal);
+
+/*
+ * Global operations.
+ */
+XMLPUBFUN void XMLCALL		
+		xmlInitializeCatalog	(void);
+XMLPUBFUN int XMLCALL		
+		xmlLoadCatalog		(const char *filename);
+XMLPUBFUN void XMLCALL		
+		xmlLoadCatalogs		(const char *paths);
+XMLPUBFUN void XMLCALL		
+		xmlCatalogCleanup	(void);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL		
+		xmlCatalogDump		(FILE *out);
+#endif /* LIBXML_OUTPUT_ENABLED */
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlCatalogResolve	(const xmlChar *pubID,
+	                                 const xmlChar *sysID);
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlCatalogResolveSystem	(const xmlChar *sysID);
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlCatalogResolvePublic	(const xmlChar *pubID);
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlCatalogResolveURI	(const xmlChar *URI);
+XMLPUBFUN int XMLCALL		
+		xmlCatalogAdd		(const xmlChar *type,
+					 const xmlChar *orig,
+					 const xmlChar *replace);
+XMLPUBFUN int XMLCALL		
+		xmlCatalogRemove	(const xmlChar *value);
+XMLPUBFUN xmlDocPtr XMLCALL	
+		xmlParseCatalogFile	(const char *filename);
+XMLPUBFUN int XMLCALL		
+		xmlCatalogConvert	(void);
+
+/*
+ * Strictly minimal interfaces for per-document catalogs used
+ * by the parser.
+ */
+XMLPUBFUN void XMLCALL		
+		xmlCatalogFreeLocal	(void *catalogs);
+XMLPUBFUN void * XMLCALL		
+		xmlCatalogAddLocal	(void *catalogs,
+					 const xmlChar *URL);
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlCatalogLocalResolve	(void *catalogs,
+					 const xmlChar *pubID,
+	                                 const xmlChar *sysID);
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlCatalogLocalResolveURI(void *catalogs,
+					 const xmlChar *URI);
+/*
+ * Preference settings.
+ */
+XMLPUBFUN int XMLCALL		
+		xmlCatalogSetDebug	(int level);
+XMLPUBFUN xmlCatalogPrefer XMLCALL 
+		xmlCatalogSetDefaultPrefer(xmlCatalogPrefer prefer);
+XMLPUBFUN void XMLCALL		
+		xmlCatalogSetDefaults	(xmlCatalogAllow allow);
+XMLPUBFUN xmlCatalogAllow XMLCALL	
+		xmlCatalogGetDefaults	(void);
+
+
+/* DEPRECATED interfaces */
+XMLPUBFUN const xmlChar * XMLCALL	
+		xmlCatalogGetSystem	(const xmlChar *sysID);
+XMLPUBFUN const xmlChar * XMLCALL	
+		xmlCatalogGetPublic	(const xmlChar *pubID);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* LIBXML_CATALOG_ENABLED */
+#endif /* __XML_CATALOG_H__ */
diff --git a/interfaces/ext/libxml/chvalid.h b/interfaces/ext/libxml/chvalid.h
new file mode 100644
index 0000000..fb43016
--- /dev/null
+++ b/interfaces/ext/libxml/chvalid.h
@@ -0,0 +1,230 @@
+/*
+ * Summary: Unicode character range checking
+ * Description: this module exports interfaces for the character
+ *               range validation APIs
+ *
+ * This file is automatically generated from the cvs source
+ * definition files using the genChRanges.py Python script
+ *
+ * Generation date: Mon Mar 27 11:09:48 2006
+ * Sources: chvalid.def
+ * Author: William Brack <wbrack at mmm.com.hk>
+ */
+
+#ifndef __XML_CHVALID_H__
+#define __XML_CHVALID_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/xmlstring.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Define our typedefs and structures
+ *
+ */
+typedef struct _xmlChSRange xmlChSRange;
+typedef xmlChSRange *xmlChSRangePtr;
+struct _xmlChSRange {
+    unsigned short	low;
+    unsigned short	high;
+};
+
+typedef struct _xmlChLRange xmlChLRange;
+typedef xmlChLRange *xmlChLRangePtr;
+struct _xmlChLRange {
+    unsigned int	low;
+    unsigned int	high;
+};
+
+typedef struct _xmlChRangeGroup xmlChRangeGroup;
+typedef xmlChRangeGroup *xmlChRangeGroupPtr;
+struct _xmlChRangeGroup {
+    int			nbShortRange;
+    int			nbLongRange;
+    const xmlChSRange	*shortRange;	/* points to an array of ranges */
+    const xmlChLRange	*longRange;
+};
+
+/**
+ * Range checking routine
+ */
+XMLPUBFUN int XMLCALL
+		xmlCharInRange(unsigned int val, const xmlChRangeGroup *group);
+
+
+/**
+ * xmlIsBaseChar_ch:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsBaseChar_ch(c)	(((0x41 <= (c)) && ((c) <= 0x5a)) || \
+				 ((0x61 <= (c)) && ((c) <= 0x7a)) || \
+				 ((0xc0 <= (c)) && ((c) <= 0xd6)) || \
+				 ((0xd8 <= (c)) && ((c) <= 0xf6)) || \
+				  (0xf8 <= (c)))
+
+/**
+ * xmlIsBaseCharQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsBaseCharQ(c)	(((c) < 0x100) ? \
+				 xmlIsBaseChar_ch((c)) : \
+				 xmlCharInRange((c), &xmlIsBaseCharGroup))
+
+XMLPUBVAR const xmlChRangeGroup xmlIsBaseCharGroup;
+
+/**
+ * xmlIsBlank_ch:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsBlank_ch(c)	(((c) == 0x20) || \
+				 ((0x9 <= (c)) && ((c) <= 0xa)) || \
+				 ((c) == 0xd))
+
+/**
+ * xmlIsBlankQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsBlankQ(c)		(((c) < 0x100) ? \
+				 xmlIsBlank_ch((c)) : 0)
+
+
+/**
+ * xmlIsChar_ch:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsChar_ch(c)		(((0x9 <= (c)) && ((c) <= 0xa)) || \
+				 ((c) == 0xd) || \
+				  (0x20 <= (c)))
+
+/**
+ * xmlIsCharQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsCharQ(c)		(((c) < 0x100) ? \
+				 xmlIsChar_ch((c)) :\
+				(((0x100 <= (c)) && ((c) <= 0xd7ff)) || \
+				 ((0xe000 <= (c)) && ((c) <= 0xfffd)) || \
+				 ((0x10000 <= (c)) && ((c) <= 0x10ffff))))
+
+XMLPUBVAR const xmlChRangeGroup xmlIsCharGroup;
+
+/**
+ * xmlIsCombiningQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsCombiningQ(c)	(((c) < 0x100) ? \
+				 0 : \
+				 xmlCharInRange((c), &xmlIsCombiningGroup))
+
+XMLPUBVAR const xmlChRangeGroup xmlIsCombiningGroup;
+
+/**
+ * xmlIsDigit_ch:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsDigit_ch(c)	(((0x30 <= (c)) && ((c) <= 0x39)))
+
+/**
+ * xmlIsDigitQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsDigitQ(c)		(((c) < 0x100) ? \
+				 xmlIsDigit_ch((c)) : \
+				 xmlCharInRange((c), &xmlIsDigitGroup))
+
+XMLPUBVAR const xmlChRangeGroup xmlIsDigitGroup;
+
+/**
+ * xmlIsExtender_ch:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsExtender_ch(c)	(((c) == 0xb7))
+
+/**
+ * xmlIsExtenderQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsExtenderQ(c)	(((c) < 0x100) ? \
+				 xmlIsExtender_ch((c)) : \
+				 xmlCharInRange((c), &xmlIsExtenderGroup))
+
+XMLPUBVAR const xmlChRangeGroup xmlIsExtenderGroup;
+
+/**
+ * xmlIsIdeographicQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsIdeographicQ(c)	(((c) < 0x100) ? \
+				 0 :\
+				(((0x4e00 <= (c)) && ((c) <= 0x9fa5)) || \
+				 ((c) == 0x3007) || \
+				 ((0x3021 <= (c)) && ((c) <= 0x3029))))
+
+XMLPUBVAR const xmlChRangeGroup xmlIsIdeographicGroup;
+XMLPUBVAR const unsigned char xmlIsPubidChar_tab[256];
+
+/**
+ * xmlIsPubidChar_ch:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsPubidChar_ch(c)	(xmlIsPubidChar_tab[(c)])
+
+/**
+ * xmlIsPubidCharQ:
+ * @c: char to validate
+ *
+ * Automatically generated by genChRanges.py
+ */
+#define xmlIsPubidCharQ(c)	(((c) < 0x100) ? \
+				 xmlIsPubidChar_ch((c)) : 0)
+
+XMLPUBFUN int XMLCALL
+		xmlIsBaseChar(unsigned int ch);
+XMLPUBFUN int XMLCALL
+		xmlIsBlank(unsigned int ch);
+XMLPUBFUN int XMLCALL
+		xmlIsChar(unsigned int ch);
+XMLPUBFUN int XMLCALL
+		xmlIsCombining(unsigned int ch);
+XMLPUBFUN int XMLCALL
+		xmlIsDigit(unsigned int ch);
+XMLPUBFUN int XMLCALL
+		xmlIsExtender(unsigned int ch);
+XMLPUBFUN int XMLCALL
+		xmlIsIdeographic(unsigned int ch);
+XMLPUBFUN int XMLCALL
+		xmlIsPubidChar(unsigned int ch);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_CHVALID_H__ */
diff --git a/interfaces/ext/libxml/debugXML.h b/interfaces/ext/libxml/debugXML.h
new file mode 100644
index 0000000..5a9d20b
--- /dev/null
+++ b/interfaces/ext/libxml/debugXML.h
@@ -0,0 +1,217 @@
+/*
+ * Summary: Tree debugging APIs
+ * Description: Interfaces to a set of routines used for debugging the tree
+ *              produced by the XML parser.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __DEBUG_XML__
+#define __DEBUG_XML__
+#include <stdio.h>
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef LIBXML_DEBUG_ENABLED
+
+#include <libxml/xpath.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The standard Dump routines.
+ */
+XMLPUBFUN void XMLCALL	
+	xmlDebugDumpString	(FILE *output,
+				 const xmlChar *str);
+XMLPUBFUN void XMLCALL	
+	xmlDebugDumpAttr	(FILE *output,
+				 xmlAttrPtr attr,
+				 int depth);
+XMLPUBFUN void XMLCALL	
+	xmlDebugDumpAttrList	(FILE *output,
+				 xmlAttrPtr attr,
+				 int depth);
+XMLPUBFUN void XMLCALL	
+	xmlDebugDumpOneNode	(FILE *output,
+				 xmlNodePtr node,
+				 int depth);
+XMLPUBFUN void XMLCALL
+	xmlDebugDumpNode	(FILE *output,
+				 xmlNodePtr node,
+				 int depth);
+XMLPUBFUN void XMLCALL
+	xmlDebugDumpNodeList	(FILE *output,
+				 xmlNodePtr node,
+				 int depth);
+XMLPUBFUN void XMLCALL
+	xmlDebugDumpDocumentHead(FILE *output,
+				 xmlDocPtr doc);
+XMLPUBFUN void XMLCALL
+	xmlDebugDumpDocument	(FILE *output,
+				 xmlDocPtr doc);
+XMLPUBFUN void XMLCALL	
+	xmlDebugDumpDTD		(FILE *output,
+				 xmlDtdPtr dtd);
+XMLPUBFUN void XMLCALL	
+	xmlDebugDumpEntities	(FILE *output,
+				 xmlDocPtr doc);
+
+/****************************************************************
+ *								*
+ *	 		Checking routines			*
+ *								*
+ ****************************************************************/
+
+XMLPUBFUN int XMLCALL
+	xmlDebugCheckDocument	(FILE * output,
+				 xmlDocPtr doc);
+
+/****************************************************************
+ *								*
+ *	 		XML shell helpers			*
+ *								*
+ ****************************************************************/
+
+XMLPUBFUN void XMLCALL	
+	xmlLsOneNode		(FILE *output, xmlNodePtr node);
+XMLPUBFUN int XMLCALL	
+	xmlLsCountNode		(xmlNodePtr node);
+
+XMLPUBFUN const char * XMLCALL 
+	xmlBoolToText		(int boolval);
+
+/****************************************************************
+ *								*
+ *	 The XML shell related structures and functions		*
+ *								*
+ ****************************************************************/
+
+#ifdef LIBXML_XPATH_ENABLED
+/**
+ * xmlShellReadlineFunc:
+ * @prompt:  a string prompt
+ *
+ * This is a generic signature for the XML shell input function.
+ *
+ * Returns a string which will be freed by the Shell.
+ */
+typedef char * (* xmlShellReadlineFunc)(char *prompt);
+
+/**
+ * xmlShellCtxt:
+ *
+ * A debugging shell context.
+ * TODO: add the defined function tables.
+ */
+typedef struct _xmlShellCtxt xmlShellCtxt;
+typedef xmlShellCtxt *xmlShellCtxtPtr;
+struct _xmlShellCtxt {
+    char *filename;
+    xmlDocPtr doc;
+    xmlNodePtr node;
+    xmlXPathContextPtr pctxt;
+    int loaded;
+    FILE *output;
+    xmlShellReadlineFunc input;
+};
+
+/**
+ * xmlShellCmd:
+ * @ctxt:  a shell context
+ * @arg:  a string argument
+ * @node:  a first node
+ * @node2:  a second node
+ *
+ * This is a generic signature for the XML shell functions.
+ *
+ * Returns an int, negative returns indicating errors.
+ */
+typedef int (* xmlShellCmd) (xmlShellCtxtPtr ctxt,
+                             char *arg,
+			     xmlNodePtr node,
+			     xmlNodePtr node2);
+
+XMLPUBFUN void XMLCALL	
+	xmlShellPrintXPathError	(int errorType,
+				 const char *arg);
+XMLPUBFUN void XMLCALL	
+	xmlShellPrintXPathResult(xmlXPathObjectPtr list);
+XMLPUBFUN int XMLCALL	
+	xmlShellList		(xmlShellCtxtPtr ctxt,
+				 char *arg,
+				 xmlNodePtr node,
+				 xmlNodePtr node2);
+XMLPUBFUN int XMLCALL	
+	xmlShellBase		(xmlShellCtxtPtr ctxt,
+				 char *arg,
+				 xmlNodePtr node,
+				 xmlNodePtr node2);
+XMLPUBFUN int XMLCALL	
+	xmlShellDir		(xmlShellCtxtPtr ctxt,
+				 char *arg,
+				 xmlNodePtr node,
+				 xmlNodePtr node2);
+XMLPUBFUN int XMLCALL	
+	xmlShellLoad		(xmlShellCtxtPtr ctxt,
+				 char *filename,
+				 xmlNodePtr node,
+				 xmlNodePtr node2);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL	
+	xmlShellPrintNode	(xmlNodePtr node);
+XMLPUBFUN int XMLCALL	
+	xmlShellCat		(xmlShellCtxtPtr ctxt,
+				 char *arg,
+				 xmlNodePtr node,
+				 xmlNodePtr node2);
+XMLPUBFUN int XMLCALL	
+	xmlShellWrite		(xmlShellCtxtPtr ctxt,
+				 char *filename,
+				 xmlNodePtr node,
+				 xmlNodePtr node2);
+XMLPUBFUN int XMLCALL	
+	xmlShellSave		(xmlShellCtxtPtr ctxt,
+				 char *filename,
+				 xmlNodePtr node,
+				 xmlNodePtr node2);
+#endif /* LIBXML_OUTPUT_ENABLED */
+#ifdef LIBXML_VALID_ENABLED
+XMLPUBFUN int XMLCALL	
+	xmlShellValidate	(xmlShellCtxtPtr ctxt,
+				 char *dtd,
+				 xmlNodePtr node,
+				 xmlNodePtr node2);
+#endif /* LIBXML_VALID_ENABLED */
+XMLPUBFUN int XMLCALL	
+	xmlShellDu		(xmlShellCtxtPtr ctxt,
+				 char *arg,
+				 xmlNodePtr tree,
+				 xmlNodePtr node2);
+XMLPUBFUN int XMLCALL	
+	xmlShellPwd		(xmlShellCtxtPtr ctxt,
+				 char *buffer,
+				 xmlNodePtr node,
+				 xmlNodePtr node2);
+
+/*
+ * The Shell interface.
+ */
+XMLPUBFUN void XMLCALL	
+	xmlShell		(xmlDocPtr doc,
+				 char *filename,
+				 xmlShellReadlineFunc input,
+				 FILE *output);
+			 
+#endif /* LIBXML_XPATH_ENABLED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_DEBUG_ENABLED */
+#endif /* __DEBUG_XML__ */
diff --git a/interfaces/ext/libxml/dict.h b/interfaces/ext/libxml/dict.h
new file mode 100644
index 0000000..abb8339
--- /dev/null
+++ b/interfaces/ext/libxml/dict.h
@@ -0,0 +1,69 @@
+/*
+ * Summary: string dictionnary
+ * Description: dictionary of reusable strings, just used to avoid allocation
+ *         and freeing operations.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_DICT_H__
+#define __XML_DICT_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The dictionnary.
+ */
+typedef struct _xmlDict xmlDict;
+typedef xmlDict *xmlDictPtr;
+
+/*
+ * Constructor and destructor.
+ */
+XMLPUBFUN xmlDictPtr XMLCALL
+			xmlDictCreate	(void);
+XMLPUBFUN xmlDictPtr XMLCALL
+			xmlDictCreateSub(xmlDictPtr sub);
+XMLPUBFUN int XMLCALL
+			xmlDictReference(xmlDictPtr dict);
+XMLPUBFUN void XMLCALL			
+			xmlDictFree	(xmlDictPtr dict);
+
+/*
+ * Lookup of entry in the dictionnary.
+ */
+XMLPUBFUN const xmlChar * XMLCALL		
+			xmlDictLookup	(xmlDictPtr dict,
+		                         const xmlChar *name,
+		                         int len);
+XMLPUBFUN const xmlChar * XMLCALL		
+			xmlDictExists	(xmlDictPtr dict,
+		                         const xmlChar *name,
+		                         int len);
+XMLPUBFUN const xmlChar * XMLCALL		
+			xmlDictQLookup	(xmlDictPtr dict,
+		                         const xmlChar *prefix,
+		                         const xmlChar *name);
+XMLPUBFUN int XMLCALL
+			xmlDictOwns	(xmlDictPtr dict,
+					 const xmlChar *str);
+XMLPUBFUN int XMLCALL			
+			xmlDictSize	(xmlDictPtr dict);
+
+/*
+ * Cleanup function
+ */
+XMLPUBFUN void XMLCALL
+                        xmlDictCleanup  (void);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* ! __XML_DICT_H__ */
diff --git a/interfaces/ext/libxml/encoding.h b/interfaces/ext/libxml/encoding.h
new file mode 100644
index 0000000..c74b25f
--- /dev/null
+++ b/interfaces/ext/libxml/encoding.h
@@ -0,0 +1,226 @@
+/*
+ * Summary: interface for the encoding conversion functions
+ * Description: interface for the encoding conversion functions needed for
+ *              XML basic encoding and iconv() support.
+ *
+ * Related specs are
+ * rfc2044        (UTF-8 and UTF-16) F. Yergeau Alis Technologies
+ * [ISO-10646]    UTF-8 and UTF-16 in Annexes
+ * [ISO-8859-1]   ISO Latin-1 characters codes.
+ * [UNICODE]      The Unicode Consortium, "The Unicode Standard --
+ *                Worldwide Character Encoding -- Version 1.0", Addison-
+ *                Wesley, Volume 1, 1991, Volume 2, 1992.  UTF-8 is
+ *                described in Unicode Technical Report #4.
+ * [US-ASCII]     Coded Character Set--7-bit American Standard Code for
+ *                Information Interchange, ANSI X3.4-1986.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_CHAR_ENCODING_H__
+#define __XML_CHAR_ENCODING_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_ICONV_ENABLED
+#include <iconv.h>
+#endif
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * xmlCharEncoding:
+ *
+ * Predefined values for some standard encodings.
+ * Libxml does not do beforehand translation on UTF8 and ISOLatinX.
+ * It also supports ASCII, ISO-8859-1, and UTF16 (LE and BE) by default.
+ *
+ * Anything else would have to be translated to UTF8 before being
+ * given to the parser itself. The BOM for UTF16 and the encoding
+ * declaration are looked at and a converter is looked for at that
+ * point. If not found the parser stops here as asked by the XML REC. A
+ * converter can be registered by the user using xmlRegisterCharEncodingHandler
+ * but the current form doesn't allow stateful transcoding (a serious
+ * problem agreed !). If iconv has been found it will be used
+ * automatically and allow stateful transcoding, the simplest is then
+ * to be sure to enable iconv and to provide iconv libs for the encoding
+ * support needed.
+ *
+ * Note that the generic "UTF-16" is not a predefined value.  Instead, only
+ * the specific UTF-16LE and UTF-16BE are present.
+ */
+typedef enum {
+    XML_CHAR_ENCODING_ERROR=   -1, /* No char encoding detected */
+    XML_CHAR_ENCODING_NONE=	0, /* No char encoding detected */
+    XML_CHAR_ENCODING_UTF8=	1, /* UTF-8 */
+    XML_CHAR_ENCODING_UTF16LE=	2, /* UTF-16 little endian */
+    XML_CHAR_ENCODING_UTF16BE=	3, /* UTF-16 big endian */
+    XML_CHAR_ENCODING_UCS4LE=	4, /* UCS-4 little endian */
+    XML_CHAR_ENCODING_UCS4BE=	5, /* UCS-4 big endian */
+    XML_CHAR_ENCODING_EBCDIC=	6, /* EBCDIC uh! */
+    XML_CHAR_ENCODING_UCS4_2143=7, /* UCS-4 unusual ordering */
+    XML_CHAR_ENCODING_UCS4_3412=8, /* UCS-4 unusual ordering */
+    XML_CHAR_ENCODING_UCS2=	9, /* UCS-2 */
+    XML_CHAR_ENCODING_8859_1=	10,/* ISO-8859-1 ISO Latin 1 */
+    XML_CHAR_ENCODING_8859_2=	11,/* ISO-8859-2 ISO Latin 2 */
+    XML_CHAR_ENCODING_8859_3=	12,/* ISO-8859-3 */
+    XML_CHAR_ENCODING_8859_4=	13,/* ISO-8859-4 */
+    XML_CHAR_ENCODING_8859_5=	14,/* ISO-8859-5 */
+    XML_CHAR_ENCODING_8859_6=	15,/* ISO-8859-6 */
+    XML_CHAR_ENCODING_8859_7=	16,/* ISO-8859-7 */
+    XML_CHAR_ENCODING_8859_8=	17,/* ISO-8859-8 */
+    XML_CHAR_ENCODING_8859_9=	18,/* ISO-8859-9 */
+    XML_CHAR_ENCODING_2022_JP=  19,/* ISO-2022-JP */
+    XML_CHAR_ENCODING_SHIFT_JIS=20,/* Shift_JIS */
+    XML_CHAR_ENCODING_EUC_JP=   21,/* EUC-JP */
+    XML_CHAR_ENCODING_ASCII=    22 /* pure ASCII */
+} xmlCharEncoding;
+
+/**
+ * xmlCharEncodingInputFunc:
+ * @out:  a pointer to an array of bytes to store the UTF-8 result
+ * @outlen:  the length of @out
+ * @in:  a pointer to an array of chars in the original encoding
+ * @inlen:  the length of @in
+ *
+ * Take a block of chars in the original encoding and try to convert
+ * it to an UTF-8 block of chars out.
+ *
+ * Returns the number of bytes written, -1 if lack of space, or -2
+ *     if the transcoding failed.
+ * The value of @inlen after return is the number of octets consumed
+ *     if the return value is positive, else unpredictiable.
+ * The value of @outlen after return is the number of octets consumed.
+ */
+typedef int (* xmlCharEncodingInputFunc)(unsigned char *out, int *outlen,
+                                         const unsigned char *in, int *inlen);
+
+
+/**
+ * xmlCharEncodingOutputFunc:
+ * @out:  a pointer to an array of bytes to store the result
+ * @outlen:  the length of @out
+ * @in:  a pointer to an array of UTF-8 chars
+ * @inlen:  the length of @in
+ *
+ * Take a block of UTF-8 chars in and try to convert it to another
+ * encoding.
+ * Note: a first call designed to produce heading info is called with
+ * in = NULL. If stateful this should also initialize the encoder state.
+ *
+ * Returns the number of bytes written, -1 if lack of space, or -2
+ *     if the transcoding failed.
+ * The value of @inlen after return is the number of octets consumed
+ *     if the return value is positive, else unpredictiable.
+ * The value of @outlen after return is the number of octets produced.
+ */
+typedef int (* xmlCharEncodingOutputFunc)(unsigned char *out, int *outlen,
+                                          const unsigned char *in, int *inlen);
+
+
+/*
+ * Block defining the handlers for non UTF-8 encodings.
+ * If iconv is supported, there are two extra fields.
+ */
+
+typedef struct _xmlCharEncodingHandler xmlCharEncodingHandler;
+typedef xmlCharEncodingHandler *xmlCharEncodingHandlerPtr;
+struct _xmlCharEncodingHandler {
+    char                       *name;
+    xmlCharEncodingInputFunc   input;
+    xmlCharEncodingOutputFunc  output;
+#ifdef LIBXML_ICONV_ENABLED
+    iconv_t                    iconv_in;
+    iconv_t                    iconv_out;
+#endif /* LIBXML_ICONV_ENABLED */
+};
+
+#ifdef __cplusplus
+}
+#endif
+#include <libxml/tree.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Interfaces for encoding handlers.
+ */
+XMLPUBFUN void XMLCALL	
+	xmlInitCharEncodingHandlers	(void);
+XMLPUBFUN void XMLCALL	
+	xmlCleanupCharEncodingHandlers	(void);
+XMLPUBFUN void XMLCALL	
+	xmlRegisterCharEncodingHandler	(xmlCharEncodingHandlerPtr handler);
+XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL
+	xmlGetCharEncodingHandler	(xmlCharEncoding enc);
+XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL
+	xmlFindCharEncodingHandler	(const char *name);
+XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL
+	xmlNewCharEncodingHandler	(const char *name, 
+                          		 xmlCharEncodingInputFunc input,
+                          		 xmlCharEncodingOutputFunc output);
+
+/*
+ * Interfaces for encoding names and aliases.
+ */
+XMLPUBFUN int XMLCALL	
+	xmlAddEncodingAlias		(const char *name,
+					 const char *alias);
+XMLPUBFUN int XMLCALL	
+	xmlDelEncodingAlias		(const char *alias);
+XMLPUBFUN const char * XMLCALL
+	xmlGetEncodingAlias		(const char *alias);
+XMLPUBFUN void XMLCALL	
+	xmlCleanupEncodingAliases	(void);
+XMLPUBFUN xmlCharEncoding XMLCALL
+	xmlParseCharEncoding		(const char *name);
+XMLPUBFUN const char * XMLCALL
+	xmlGetCharEncodingName		(xmlCharEncoding enc);
+
+/*
+ * Interfaces directly used by the parsers.
+ */
+XMLPUBFUN xmlCharEncoding XMLCALL
+	xmlDetectCharEncoding		(const unsigned char *in,
+					 int len);
+
+XMLPUBFUN int XMLCALL	
+	xmlCharEncOutFunc		(xmlCharEncodingHandler *handler,
+					 xmlBufferPtr out,
+					 xmlBufferPtr in);
+
+XMLPUBFUN int XMLCALL	
+	xmlCharEncInFunc		(xmlCharEncodingHandler *handler,
+					 xmlBufferPtr out,
+					 xmlBufferPtr in);
+XMLPUBFUN int XMLCALL
+	xmlCharEncFirstLine		(xmlCharEncodingHandler *handler,
+					 xmlBufferPtr out,
+					 xmlBufferPtr in);
+XMLPUBFUN int XMLCALL	
+	xmlCharEncCloseFunc		(xmlCharEncodingHandler *handler);
+
+/*
+ * Export a few useful functions
+ */
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN int XMLCALL	
+	UTF8Toisolat1			(unsigned char *out,
+					 int *outlen,
+					 const unsigned char *in,
+					 int *inlen);
+#endif /* LIBXML_OUTPUT_ENABLED */
+XMLPUBFUN int XMLCALL	
+	isolat1ToUTF8			(unsigned char *out,
+					 int *outlen,
+					 const unsigned char *in,
+					 int *inlen);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __XML_CHAR_ENCODING_H__ */
diff --git a/interfaces/ext/libxml/entities.h b/interfaces/ext/libxml/entities.h
new file mode 100644
index 0000000..cefb97f
--- /dev/null
+++ b/interfaces/ext/libxml/entities.h
@@ -0,0 +1,150 @@
+/*
+ * Summary: interface for the XML entities handling
+ * Description: this module provides some of the entity API needed
+ *              for the parser and applications.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_ENTITIES_H__
+#define __XML_ENTITIES_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The different valid entity types.
+ */
+typedef enum {
+    XML_INTERNAL_GENERAL_ENTITY = 1,
+    XML_EXTERNAL_GENERAL_PARSED_ENTITY = 2,
+    XML_EXTERNAL_GENERAL_UNPARSED_ENTITY = 3,
+    XML_INTERNAL_PARAMETER_ENTITY = 4,
+    XML_EXTERNAL_PARAMETER_ENTITY = 5,
+    XML_INTERNAL_PREDEFINED_ENTITY = 6
+} xmlEntityType;
+
+/*
+ * An unit of storage for an entity, contains the string, the value
+ * and the linkind data needed for the linking in the hash table.
+ */
+
+struct _xmlEntity {
+    void           *_private;	        /* application data */
+    xmlElementType          type;       /* XML_ENTITY_DECL, must be second ! */
+    const xmlChar          *name;	/* Entity name */
+    struct _xmlNode    *children;	/* First child link */
+    struct _xmlNode        *last;	/* Last child link */
+    struct _xmlDtd       *parent;	/* -> DTD */
+    struct _xmlNode        *next;	/* next sibling link  */
+    struct _xmlNode        *prev;	/* previous sibling link  */
+    struct _xmlDoc          *doc;       /* the containing document */
+
+    xmlChar                *orig;	/* content without ref substitution */
+    xmlChar             *content;	/* content or ndata if unparsed */
+    int                   length;	/* the content length */
+    xmlEntityType          etype;	/* The entity type */
+    const xmlChar    *ExternalID;	/* External identifier for PUBLIC */
+    const xmlChar      *SystemID;	/* URI for a SYSTEM or PUBLIC Entity */
+
+    struct _xmlEntity     *nexte;	/* unused */
+    const xmlChar           *URI;	/* the full URI as computed */
+    int                    owner;	/* does the entity own the childrens */
+    int			 checked;	/* was the entity content checked */
+					/* this is also used to count entites
+					 * references done from that entity */
+};
+
+/*
+ * All entities are stored in an hash table.
+ * There is 2 separate hash tables for global and parameter entities.
+ */
+
+typedef struct _xmlHashTable xmlEntitiesTable;
+typedef xmlEntitiesTable *xmlEntitiesTablePtr;
+
+/*
+ * External functions:
+ */
+
+#ifdef LIBXML_LEGACY_ENABLED
+XMLPUBFUN void XMLCALL
+		xmlInitializePredefinedEntities	(void);
+#endif /* LIBXML_LEGACY_ENABLED */
+
+XMLPUBFUN xmlEntityPtr XMLCALL
+			xmlNewEntity		(xmlDocPtr doc,
+						 const xmlChar *name,
+						 int type,
+						 const xmlChar *ExternalID,
+						 const xmlChar *SystemID,
+						 const xmlChar *content);
+XMLPUBFUN xmlEntityPtr XMLCALL
+			xmlAddDocEntity		(xmlDocPtr doc,
+						 const xmlChar *name,
+						 int type,
+						 const xmlChar *ExternalID,
+						 const xmlChar *SystemID,
+						 const xmlChar *content);
+XMLPUBFUN xmlEntityPtr XMLCALL
+			xmlAddDtdEntity		(xmlDocPtr doc,
+						 const xmlChar *name,
+						 int type,
+						 const xmlChar *ExternalID,
+						 const xmlChar *SystemID,
+						 const xmlChar *content);
+XMLPUBFUN xmlEntityPtr XMLCALL
+			xmlGetPredefinedEntity	(const xmlChar *name);
+XMLPUBFUN xmlEntityPtr XMLCALL
+			xmlGetDocEntity		(xmlDocPtr doc,
+						 const xmlChar *name);
+XMLPUBFUN xmlEntityPtr XMLCALL
+			xmlGetDtdEntity		(xmlDocPtr doc,
+						 const xmlChar *name);
+XMLPUBFUN xmlEntityPtr XMLCALL
+			xmlGetParameterEntity	(xmlDocPtr doc,
+						 const xmlChar *name);
+#ifdef LIBXML_LEGACY_ENABLED
+XMLPUBFUN const xmlChar * XMLCALL
+			xmlEncodeEntities	(xmlDocPtr doc,
+						 const xmlChar *input);
+#endif /* LIBXML_LEGACY_ENABLED */
+XMLPUBFUN xmlChar * XMLCALL
+			xmlEncodeEntitiesReentrant(xmlDocPtr doc,
+						 const xmlChar *input);
+XMLPUBFUN xmlChar * XMLCALL
+			xmlEncodeSpecialChars	(xmlDocPtr doc,
+						 const xmlChar *input);
+XMLPUBFUN xmlEntitiesTablePtr XMLCALL
+			xmlCreateEntitiesTable	(void);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlEntitiesTablePtr XMLCALL
+			xmlCopyEntitiesTable	(xmlEntitiesTablePtr table);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN void XMLCALL
+			xmlFreeEntitiesTable	(xmlEntitiesTablePtr table);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+			xmlDumpEntitiesTable	(xmlBufferPtr buf,
+						 xmlEntitiesTablePtr table);
+XMLPUBFUN void XMLCALL
+			xmlDumpEntityDecl	(xmlBufferPtr buf,
+						 xmlEntityPtr ent);
+#endif /* LIBXML_OUTPUT_ENABLED */
+#ifdef LIBXML_LEGACY_ENABLED
+XMLPUBFUN void XMLCALL
+			xmlCleanupPredefinedEntities(void);
+#endif /* LIBXML_LEGACY_ENABLED */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+# endif /* __XML_ENTITIES_H__ */
diff --git a/interfaces/ext/libxml/globals.h b/interfaces/ext/libxml/globals.h
new file mode 100644
index 0000000..57e25fa
--- /dev/null
+++ b/interfaces/ext/libxml/globals.h
@@ -0,0 +1,491 @@
+/*
+ * Summary: interface for all global variables of the library
+ * Description: all the global variables and thread handling for
+ *              those variables is handled by this module.
+ *
+ * The bottom of this file is automatically generated by build_glob.py
+ * based on the description file global.data
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Gary Pennington <Gary.Pennington at uk.sun.com>, Daniel Veillard
+ */
+
+#ifndef __XML_GLOBALS_H
+#define __XML_GLOBALS_H
+
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+#include <libxml/xmlerror.h>
+#include <libxml/SAX.h>
+#include <libxml/SAX2.h>
+#include <libxml/xmlmemory.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+XMLPUBFUN void XMLCALL xmlInitGlobals(void);
+XMLPUBFUN void XMLCALL xmlCleanupGlobals(void);
+
+/**
+ * xmlParserInputBufferCreateFilenameFunc:
+ * @URI: the URI to read from
+ * @enc: the requested source encoding
+ *
+ * Signature for the function doing the lookup for a suitable input method
+ * corresponding to an URI.
+ *
+ * Returns the new xmlParserInputBufferPtr in case of success or NULL if no
+ *         method was found.
+ */
+typedef xmlParserInputBufferPtr (*xmlParserInputBufferCreateFilenameFunc) (const char *URI, xmlCharEncoding enc);
+
+/**
+ * xmlOutputBufferCreateFilenameFunc:
+ * @URI: the URI to write to
+ * @enc: the requested target encoding
+ *
+ * Signature for the function doing the lookup for a suitable output method
+ * corresponding to an URI.
+ *
+ * Returns the new xmlOutputBufferPtr in case of success or NULL if no
+ *         method was found.
+ */
+typedef xmlOutputBufferPtr (*xmlOutputBufferCreateFilenameFunc) (const char *URI, xmlCharEncodingHandlerPtr encoder, int compression);
+
+XMLPUBFUN xmlParserInputBufferCreateFilenameFunc
+XMLCALL xmlParserInputBufferCreateFilenameDefault (xmlParserInputBufferCreateFilenameFunc func);
+XMLPUBFUN xmlOutputBufferCreateFilenameFunc
+XMLCALL xmlOutputBufferCreateFilenameDefault (xmlOutputBufferCreateFilenameFunc func);
+
+/*
+ * Externally global symbols which need to be protected for backwards
+ * compatibility support.
+ */
+
+#undef	docbDefaultSAXHandler
+#undef	htmlDefaultSAXHandler
+#undef	oldXMLWDcompatibility
+#undef	xmlBufferAllocScheme
+#undef	xmlDefaultBufferSize
+#undef	xmlDefaultSAXHandler
+#undef	xmlDefaultSAXLocator
+#undef	xmlDoValidityCheckingDefaultValue
+#undef	xmlFree
+#undef	xmlGenericError
+#undef	xmlStructuredError
+#undef	xmlGenericErrorContext
+#undef	xmlGetWarningsDefaultValue
+#undef	xmlIndentTreeOutput
+#undef  xmlTreeIndentString
+#undef	xmlKeepBlanksDefaultValue
+#undef	xmlLineNumbersDefaultValue
+#undef	xmlLoadExtDtdDefaultValue
+#undef	xmlMalloc
+#undef	xmlMallocAtomic
+#undef	xmlMemStrdup
+#undef	xmlParserDebugEntities
+#undef	xmlParserVersion
+#undef	xmlPedanticParserDefaultValue
+#undef	xmlRealloc
+#undef	xmlSaveNoEmptyTags
+#undef	xmlSubstituteEntitiesDefaultValue
+#undef  xmlRegisterNodeDefaultValue
+#undef  xmlDeregisterNodeDefaultValue
+#undef  xmlLastError
+#undef  xmlParserInputBufferCreateFilenameValue
+#undef  xmlOutputBufferCreateFilenameValue
+
+/**
+ * xmlRegisterNodeFunc:
+ * @node: the current node
+ *
+ * Signature for the registration callback of a created node
+ */
+typedef void (*xmlRegisterNodeFunc) (xmlNodePtr node);
+/**
+ * xmlDeregisterNodeFunc:
+ * @node: the current node
+ *
+ * Signature for the deregistration callback of a discarded node
+ */
+typedef void (*xmlDeregisterNodeFunc) (xmlNodePtr node);
+
+typedef struct _xmlGlobalState xmlGlobalState;
+typedef xmlGlobalState *xmlGlobalStatePtr;
+struct _xmlGlobalState
+{
+	const char *xmlParserVersion;
+
+	xmlSAXLocator xmlDefaultSAXLocator;
+	xmlSAXHandlerV1 xmlDefaultSAXHandler;
+	xmlSAXHandlerV1 docbDefaultSAXHandler;
+	xmlSAXHandlerV1 htmlDefaultSAXHandler;
+
+	xmlFreeFunc xmlFree;
+	xmlMallocFunc xmlMalloc;
+	xmlStrdupFunc xmlMemStrdup;
+	xmlReallocFunc xmlRealloc;
+
+	xmlGenericErrorFunc xmlGenericError;
+	xmlStructuredErrorFunc xmlStructuredError;
+	void *xmlGenericErrorContext;
+
+	int oldXMLWDcompatibility;
+
+	xmlBufferAllocationScheme xmlBufferAllocScheme;
+	int xmlDefaultBufferSize;
+
+	int xmlSubstituteEntitiesDefaultValue;
+	int xmlDoValidityCheckingDefaultValue;
+	int xmlGetWarningsDefaultValue;
+	int xmlKeepBlanksDefaultValue;
+	int xmlLineNumbersDefaultValue;
+	int xmlLoadExtDtdDefaultValue;
+	int xmlParserDebugEntities;
+	int xmlPedanticParserDefaultValue;
+
+	int xmlSaveNoEmptyTags;
+	int xmlIndentTreeOutput;
+	const char *xmlTreeIndentString;
+
+	xmlRegisterNodeFunc xmlRegisterNodeDefaultValue;
+	xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue;
+
+	xmlMallocFunc xmlMallocAtomic;
+	xmlError xmlLastError;
+
+	xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValue;
+	xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue;
+};
+
+#ifdef __cplusplus
+}
+#endif
+#include <libxml/threads.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+XMLPUBFUN void XMLCALL	xmlInitializeGlobalState(xmlGlobalStatePtr gs);
+
+XMLPUBFUN void XMLCALL xmlThrDefSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler);
+
+XMLPUBFUN void XMLCALL xmlThrDefSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler);
+
+XMLPUBFUN xmlRegisterNodeFunc XMLCALL xmlRegisterNodeDefault(xmlRegisterNodeFunc func);
+XMLPUBFUN xmlRegisterNodeFunc XMLCALL xmlThrDefRegisterNodeDefault(xmlRegisterNodeFunc func);
+XMLPUBFUN xmlDeregisterNodeFunc XMLCALL xmlDeregisterNodeDefault(xmlDeregisterNodeFunc func);
+XMLPUBFUN xmlDeregisterNodeFunc XMLCALL xmlThrDefDeregisterNodeDefault(xmlDeregisterNodeFunc func);
+
+XMLPUBFUN xmlOutputBufferCreateFilenameFunc XMLCALL
+	xmlThrDefOutputBufferCreateFilenameDefault(xmlOutputBufferCreateFilenameFunc func);
+XMLPUBFUN xmlParserInputBufferCreateFilenameFunc XMLCALL
+	xmlThrDefParserInputBufferCreateFilenameDefault(xmlParserInputBufferCreateFilenameFunc func);
+
+/** DOC_DISABLE */
+/*
+ * In general the memory allocation entry points are not kept
+ * thread specific but this can be overridden by LIBXML_THREAD_ALLOC_ENABLED
+ *    - xmlMalloc
+ *    - xmlMallocAtomic
+ *    - xmlRealloc
+ *    - xmlMemStrdup
+ *    - xmlFree
+ */
+
+#ifdef LIBXML_THREAD_ALLOC_ENABLED
+#ifdef LIBXML_THREAD_ENABLED
+XMLPUBFUN  xmlMallocFunc * XMLCALL __xmlMalloc(void);
+#define xmlMalloc \
+(*(__xmlMalloc()))
+#else
+XMLPUBVAR xmlMallocFunc xmlMalloc;
+#endif
+
+#ifdef LIBXML_THREAD_ENABLED
+XMLPUBFUN  xmlMallocFunc * XMLCALL __xmlMallocAtomic(void);
+#define xmlMallocAtomic \
+(*(__xmlMallocAtomic()))
+#else
+XMLPUBVAR xmlMallocFunc xmlMallocAtomic;
+#endif
+
+#ifdef LIBXML_THREAD_ENABLED
+XMLPUBFUN  xmlReallocFunc * XMLCALL __xmlRealloc(void);
+#define xmlRealloc \
+(*(__xmlRealloc()))
+#else
+XMLPUBVAR xmlReallocFunc xmlRealloc;
+#endif
+
+#ifdef LIBXML_THREAD_ENABLED
+XMLPUBFUN  xmlFreeFunc * XMLCALL __xmlFree(void);
+#define xmlFree \
+(*(__xmlFree()))
+#else
+XMLPUBVAR xmlFreeFunc xmlFree;
+#endif
+
+#ifdef LIBXML_THREAD_ENABLED
+XMLPUBFUN  xmlStrdupFunc * XMLCALL __xmlMemStrdup(void);
+#define xmlMemStrdup \
+(*(__xmlMemStrdup()))
+#else
+XMLPUBVAR xmlStrdupFunc xmlMemStrdup;
+#endif
+
+#else /* !LIBXML_THREAD_ALLOC_ENABLED */
+XMLPUBVAR xmlMallocFunc xmlMalloc;
+XMLPUBVAR xmlMallocFunc xmlMallocAtomic;
+XMLPUBVAR xmlReallocFunc xmlRealloc;
+XMLPUBVAR xmlFreeFunc xmlFree;
+XMLPUBVAR xmlStrdupFunc xmlMemStrdup;
+#endif /* LIBXML_THREAD_ALLOC_ENABLED */
+
+#ifdef LIBXML_DOCB_ENABLED
+XMLPUBFUN  xmlSAXHandlerV1 * XMLCALL __docbDefaultSAXHandler(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define docbDefaultSAXHandler \
+(*(__docbDefaultSAXHandler()))
+#else
+XMLPUBVAR xmlSAXHandlerV1 docbDefaultSAXHandler;
+#endif
+#endif
+
+#ifdef LIBXML_HTML_ENABLED
+XMLPUBFUN xmlSAXHandlerV1 * XMLCALL __htmlDefaultSAXHandler(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define htmlDefaultSAXHandler \
+(*(__htmlDefaultSAXHandler()))
+#else
+XMLPUBVAR xmlSAXHandlerV1 htmlDefaultSAXHandler;
+#endif
+#endif
+
+XMLPUBFUN xmlError * XMLCALL __xmlLastError(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlLastError \
+(*(__xmlLastError()))
+#else
+XMLPUBVAR xmlError xmlLastError;
+#endif
+
+/*
+ * Everything starting from the line below is
+ * Automatically generated by build_glob.py.
+ * Do not modify the previous line.
+ */
+
+
+XMLPUBFUN int * XMLCALL __oldXMLWDcompatibility(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define oldXMLWDcompatibility \
+(*(__oldXMLWDcompatibility()))
+#else
+XMLPUBVAR int oldXMLWDcompatibility;
+#endif
+
+XMLPUBFUN xmlBufferAllocationScheme * XMLCALL __xmlBufferAllocScheme(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlBufferAllocScheme \
+(*(__xmlBufferAllocScheme()))
+#else
+XMLPUBVAR xmlBufferAllocationScheme xmlBufferAllocScheme;
+#endif
+XMLPUBFUN xmlBufferAllocationScheme XMLCALL xmlThrDefBufferAllocScheme(xmlBufferAllocationScheme v);
+
+XMLPUBFUN int * XMLCALL __xmlDefaultBufferSize(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlDefaultBufferSize \
+(*(__xmlDefaultBufferSize()))
+#else
+XMLPUBVAR int xmlDefaultBufferSize;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefDefaultBufferSize(int v);
+
+XMLPUBFUN xmlSAXHandlerV1 * XMLCALL __xmlDefaultSAXHandler(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlDefaultSAXHandler \
+(*(__xmlDefaultSAXHandler()))
+#else
+XMLPUBVAR xmlSAXHandlerV1 xmlDefaultSAXHandler;
+#endif
+
+XMLPUBFUN xmlSAXLocator * XMLCALL __xmlDefaultSAXLocator(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlDefaultSAXLocator \
+(*(__xmlDefaultSAXLocator()))
+#else
+XMLPUBVAR xmlSAXLocator xmlDefaultSAXLocator;
+#endif
+
+XMLPUBFUN int * XMLCALL __xmlDoValidityCheckingDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlDoValidityCheckingDefaultValue \
+(*(__xmlDoValidityCheckingDefaultValue()))
+#else
+XMLPUBVAR int xmlDoValidityCheckingDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefDoValidityCheckingDefaultValue(int v);
+
+XMLPUBFUN xmlGenericErrorFunc * XMLCALL __xmlGenericError(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlGenericError \
+(*(__xmlGenericError()))
+#else
+XMLPUBVAR xmlGenericErrorFunc xmlGenericError;
+#endif
+
+XMLPUBFUN xmlStructuredErrorFunc * XMLCALL __xmlStructuredError(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlStructuredError \
+(*(__xmlStructuredError()))
+#else
+XMLPUBVAR xmlStructuredErrorFunc xmlStructuredError;
+#endif
+
+XMLPUBFUN void * * XMLCALL __xmlGenericErrorContext(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlGenericErrorContext \
+(*(__xmlGenericErrorContext()))
+#else
+XMLPUBVAR void * xmlGenericErrorContext;
+#endif
+
+XMLPUBFUN int * XMLCALL __xmlGetWarningsDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlGetWarningsDefaultValue \
+(*(__xmlGetWarningsDefaultValue()))
+#else
+XMLPUBVAR int xmlGetWarningsDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefGetWarningsDefaultValue(int v);
+
+XMLPUBFUN int * XMLCALL __xmlIndentTreeOutput(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlIndentTreeOutput \
+(*(__xmlIndentTreeOutput()))
+#else
+XMLPUBVAR int xmlIndentTreeOutput;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefIndentTreeOutput(int v);
+
+XMLPUBFUN const char * * XMLCALL __xmlTreeIndentString(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlTreeIndentString \
+(*(__xmlTreeIndentString()))
+#else
+XMLPUBVAR const char * xmlTreeIndentString;
+#endif
+XMLPUBFUN const char * XMLCALL xmlThrDefTreeIndentString(const char * v);
+
+XMLPUBFUN int * XMLCALL __xmlKeepBlanksDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlKeepBlanksDefaultValue \
+(*(__xmlKeepBlanksDefaultValue()))
+#else
+XMLPUBVAR int xmlKeepBlanksDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefKeepBlanksDefaultValue(int v);
+
+XMLPUBFUN int * XMLCALL __xmlLineNumbersDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlLineNumbersDefaultValue \
+(*(__xmlLineNumbersDefaultValue()))
+#else
+XMLPUBVAR int xmlLineNumbersDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefLineNumbersDefaultValue(int v);
+
+XMLPUBFUN int * XMLCALL __xmlLoadExtDtdDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlLoadExtDtdDefaultValue \
+(*(__xmlLoadExtDtdDefaultValue()))
+#else
+XMLPUBVAR int xmlLoadExtDtdDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefLoadExtDtdDefaultValue(int v);
+
+XMLPUBFUN int * XMLCALL __xmlParserDebugEntities(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlParserDebugEntities \
+(*(__xmlParserDebugEntities()))
+#else
+XMLPUBVAR int xmlParserDebugEntities;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefParserDebugEntities(int v);
+
+XMLPUBFUN const char * * XMLCALL __xmlParserVersion(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlParserVersion \
+(*(__xmlParserVersion()))
+#else
+XMLPUBVAR const char * xmlParserVersion;
+#endif
+
+XMLPUBFUN int * XMLCALL __xmlPedanticParserDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlPedanticParserDefaultValue \
+(*(__xmlPedanticParserDefaultValue()))
+#else
+XMLPUBVAR int xmlPedanticParserDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefPedanticParserDefaultValue(int v);
+
+XMLPUBFUN int * XMLCALL __xmlSaveNoEmptyTags(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlSaveNoEmptyTags \
+(*(__xmlSaveNoEmptyTags()))
+#else
+XMLPUBVAR int xmlSaveNoEmptyTags;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefSaveNoEmptyTags(int v);
+
+XMLPUBFUN int * XMLCALL __xmlSubstituteEntitiesDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlSubstituteEntitiesDefaultValue \
+(*(__xmlSubstituteEntitiesDefaultValue()))
+#else
+XMLPUBVAR int xmlSubstituteEntitiesDefaultValue;
+#endif
+XMLPUBFUN int XMLCALL xmlThrDefSubstituteEntitiesDefaultValue(int v);
+
+XMLPUBFUN xmlRegisterNodeFunc * XMLCALL __xmlRegisterNodeDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlRegisterNodeDefaultValue \
+(*(__xmlRegisterNodeDefaultValue()))
+#else
+XMLPUBVAR xmlRegisterNodeFunc xmlRegisterNodeDefaultValue;
+#endif
+
+XMLPUBFUN xmlDeregisterNodeFunc * XMLCALL __xmlDeregisterNodeDefaultValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlDeregisterNodeDefaultValue \
+(*(__xmlDeregisterNodeDefaultValue()))
+#else
+XMLPUBVAR xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue;
+#endif
+
+XMLPUBFUN xmlParserInputBufferCreateFilenameFunc * XMLCALL __xmlParserInputBufferCreateFilenameValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlParserInputBufferCreateFilenameValue \
+(*(__xmlParserInputBufferCreateFilenameValue()))
+#else
+XMLPUBVAR xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValue;
+#endif
+
+XMLPUBFUN xmlOutputBufferCreateFilenameFunc * XMLCALL __xmlOutputBufferCreateFilenameValue(void);
+#ifdef LIBXML_THREAD_ENABLED
+#define xmlOutputBufferCreateFilenameValue \
+(*(__xmlOutputBufferCreateFilenameValue()))
+#else
+XMLPUBVAR xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue;
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __XML_GLOBALS_H */
diff --git a/interfaces/ext/libxml/hash.h b/interfaces/ext/libxml/hash.h
new file mode 100644
index 0000000..7fe4be7
--- /dev/null
+++ b/interfaces/ext/libxml/hash.h
@@ -0,0 +1,233 @@
+/*
+ * Summary: Chained hash tables
+ * Description: This module implements the hash table support used in 
+ * 		various places in the library.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Bjorn Reese <bjorn.reese at systematic.dk>
+ */
+
+#ifndef __XML_HASH_H__
+#define __XML_HASH_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The hash table.
+ */
+typedef struct _xmlHashTable xmlHashTable;
+typedef xmlHashTable *xmlHashTablePtr;
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+#include <libxml/dict.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Recent version of gcc produce a warning when a function pointer is assigned
+ * to an object pointer, or vice versa.  The following macro is a dirty hack
+ * to allow suppression of the warning.  If your architecture has function
+ * pointers which are a different size than a void pointer, there may be some
+ * serious trouble within the library.
+ */
+/**
+ * XML_CAST_FPTR:
+ * @fptr:  pointer to a function
+ *
+ * Macro to do a casting from an object pointer to a
+ * function pointer without encountering a warning from
+ * gcc
+ *
+ * #define XML_CAST_FPTR(fptr) (*(void **)(&fptr))
+ * This macro violated ISO C aliasing rules (gcc4 on s390 broke)
+ * so it is disabled now
+ */
+
+#define XML_CAST_FPTR(fptr) fptr
+
+
+/*
+ * function types:
+ */
+/**
+ * xmlHashDeallocator:
+ * @payload:  the data in the hash
+ * @name:  the name associated
+ *
+ * Callback to free data from a hash.
+ */
+typedef void (*xmlHashDeallocator)(void *payload, xmlChar *name);
+/**
+ * xmlHashCopier:
+ * @payload:  the data in the hash
+ * @name:  the name associated
+ *
+ * Callback to copy data from a hash.
+ *
+ * Returns a copy of the data or NULL in case of error.
+ */
+typedef void *(*xmlHashCopier)(void *payload, xmlChar *name);
+/**
+ * xmlHashScanner:
+ * @payload:  the data in the hash
+ * @data:  extra scannner data
+ * @name:  the name associated
+ *
+ * Callback when scanning data in a hash with the simple scanner.
+ */
+typedef void (*xmlHashScanner)(void *payload, void *data, xmlChar *name);
+/**
+ * xmlHashScannerFull:
+ * @payload:  the data in the hash
+ * @data:  extra scannner data
+ * @name:  the name associated
+ * @name2:  the second name associated
+ * @name3:  the third name associated
+ *
+ * Callback when scanning data in a hash with the full scanner.
+ */
+typedef void (*xmlHashScannerFull)(void *payload, void *data,
+				   const xmlChar *name, const xmlChar *name2,
+				   const xmlChar *name3);
+
+/*
+ * Constructor and destructor.
+ */
+XMLPUBFUN xmlHashTablePtr XMLCALL
+			xmlHashCreate	(int size);
+XMLPUBFUN xmlHashTablePtr XMLCALL
+			xmlHashCreateDict(int size,
+					 xmlDictPtr dict);
+XMLPUBFUN void XMLCALL			
+			xmlHashFree	(xmlHashTablePtr table,
+					 xmlHashDeallocator f);
+
+/*
+ * Add a new entry to the hash table.
+ */
+XMLPUBFUN int XMLCALL			
+			xmlHashAddEntry	(xmlHashTablePtr table,
+		                         const xmlChar *name,
+		                         void *userdata);
+XMLPUBFUN int XMLCALL			
+			xmlHashUpdateEntry(xmlHashTablePtr table,
+		                         const xmlChar *name,
+		                         void *userdata,
+					 xmlHashDeallocator f);
+XMLPUBFUN int XMLCALL		    
+			xmlHashAddEntry2(xmlHashTablePtr table,
+		                         const xmlChar *name,
+		                         const xmlChar *name2,
+		                         void *userdata);
+XMLPUBFUN int XMLCALL			
+			xmlHashUpdateEntry2(xmlHashTablePtr table,
+		                         const xmlChar *name,
+		                         const xmlChar *name2,
+		                         void *userdata,
+					 xmlHashDeallocator f);
+XMLPUBFUN int XMLCALL			
+			xmlHashAddEntry3(xmlHashTablePtr table,
+		                         const xmlChar *name,
+		                         const xmlChar *name2,
+		                         const xmlChar *name3,
+		                         void *userdata);
+XMLPUBFUN int XMLCALL			
+			xmlHashUpdateEntry3(xmlHashTablePtr table,
+		                         const xmlChar *name,
+		                         const xmlChar *name2,
+		                         const xmlChar *name3,
+		                         void *userdata,
+					 xmlHashDeallocator f);
+
+/*
+ * Remove an entry from the hash table.
+ */
+XMLPUBFUN int XMLCALL     
+			xmlHashRemoveEntry(xmlHashTablePtr table, const xmlChar *name,
+                           xmlHashDeallocator f);
+XMLPUBFUN int XMLCALL     
+			xmlHashRemoveEntry2(xmlHashTablePtr table, const xmlChar *name,
+                            const xmlChar *name2, xmlHashDeallocator f);
+XMLPUBFUN int  XMLCALL    
+			xmlHashRemoveEntry3(xmlHashTablePtr table, const xmlChar *name,
+                            const xmlChar *name2, const xmlChar *name3,
+                            xmlHashDeallocator f);
+
+/*
+ * Retrieve the userdata.
+ */
+XMLPUBFUN void * XMLCALL			
+			xmlHashLookup	(xmlHashTablePtr table,
+					 const xmlChar *name);
+XMLPUBFUN void * XMLCALL			
+			xmlHashLookup2	(xmlHashTablePtr table,
+					 const xmlChar *name,
+					 const xmlChar *name2);
+XMLPUBFUN void * XMLCALL			
+			xmlHashLookup3	(xmlHashTablePtr table,
+					 const xmlChar *name,
+					 const xmlChar *name2,
+					 const xmlChar *name3);
+XMLPUBFUN void * XMLCALL			
+			xmlHashQLookup	(xmlHashTablePtr table,
+					 const xmlChar *name,
+					 const xmlChar *prefix);
+XMLPUBFUN void * XMLCALL			
+			xmlHashQLookup2	(xmlHashTablePtr table,
+					 const xmlChar *name,
+					 const xmlChar *prefix,
+					 const xmlChar *name2,
+					 const xmlChar *prefix2);
+XMLPUBFUN void * XMLCALL			
+			xmlHashQLookup3	(xmlHashTablePtr table,
+					 const xmlChar *name,
+					 const xmlChar *prefix,
+					 const xmlChar *name2,
+					 const xmlChar *prefix2,
+					 const xmlChar *name3,
+					 const xmlChar *prefix3);
+
+/*
+ * Helpers.
+ */
+XMLPUBFUN xmlHashTablePtr XMLCALL		
+			xmlHashCopy	(xmlHashTablePtr table,
+					 xmlHashCopier f);
+XMLPUBFUN int XMLCALL			
+			xmlHashSize	(xmlHashTablePtr table);
+XMLPUBFUN void XMLCALL			
+			xmlHashScan	(xmlHashTablePtr table,
+					 xmlHashScanner f,
+					 void *data);
+XMLPUBFUN void XMLCALL			
+			xmlHashScan3	(xmlHashTablePtr table,
+					 const xmlChar *name,
+					 const xmlChar *name2,
+					 const xmlChar *name3,
+					 xmlHashScanner f,
+					 void *data);
+XMLPUBFUN void XMLCALL			
+			xmlHashScanFull	(xmlHashTablePtr table,
+					 xmlHashScannerFull f,
+					 void *data);
+XMLPUBFUN void XMLCALL			
+			xmlHashScanFull3(xmlHashTablePtr table,
+					 const xmlChar *name,
+					 const xmlChar *name2,
+					 const xmlChar *name3,
+					 xmlHashScannerFull f,
+					 void *data);
+#ifdef __cplusplus
+}
+#endif
+#endif /* ! __XML_HASH_H__ */
diff --git a/interfaces/ext/libxml/list.h b/interfaces/ext/libxml/list.h
new file mode 100644
index 0000000..1d83482
--- /dev/null
+++ b/interfaces/ext/libxml/list.h
@@ -0,0 +1,137 @@
+/*
+ * Summary: lists interfaces
+ * Description: this module implement the list support used in 
+ * various place in the library.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Gary Pennington <Gary.Pennington at uk.sun.com>
+ */
+
+#ifndef __XML_LINK_INCLUDE__
+#define __XML_LINK_INCLUDE__
+
+#include <libxml/xmlversion.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _xmlLink xmlLink;
+typedef xmlLink *xmlLinkPtr;
+
+typedef struct _xmlList xmlList;
+typedef xmlList *xmlListPtr;
+
+/**
+ * xmlListDeallocator:
+ * @lk:  the data to deallocate
+ *
+ * Callback function used to free data from a list.
+ */
+typedef void (*xmlListDeallocator) (xmlLinkPtr lk);
+/**
+ * xmlListDataCompare:
+ * @data0: the first data
+ * @data1: the second data
+ *
+ * Callback function used to compare 2 data.
+ *
+ * Returns 0 is equality, -1 or 1 otherwise depending on the ordering.
+ */
+typedef int  (*xmlListDataCompare) (const void *data0, const void *data1);
+/**
+ * xmlListWalker:
+ * @data: the data found in the list
+ * @user: extra user provided data to the walker
+ *
+ * Callback function used when walking a list with xmlListWalk().
+ *
+ * Returns 0 to stop walking the list, 1 otherwise.
+ */
+typedef int (*xmlListWalker) (const void *data, const void *user);
+
+/* Creation/Deletion */
+XMLPUBFUN xmlListPtr XMLCALL
+		xmlListCreate		(xmlListDeallocator deallocator,
+	                                 xmlListDataCompare compare);
+XMLPUBFUN void XMLCALL		
+		xmlListDelete		(xmlListPtr l);
+
+/* Basic Operators */
+XMLPUBFUN void * XMLCALL		
+		xmlListSearch		(xmlListPtr l,
+					 void *data);
+XMLPUBFUN void * XMLCALL		
+		xmlListReverseSearch	(xmlListPtr l,
+					 void *data);
+XMLPUBFUN int XMLCALL		
+		xmlListInsert		(xmlListPtr l,
+					 void *data) ;
+XMLPUBFUN int XMLCALL		
+		xmlListAppend		(xmlListPtr l,
+					 void *data) ;
+XMLPUBFUN int XMLCALL		
+		xmlListRemoveFirst	(xmlListPtr l,
+					 void *data);
+XMLPUBFUN int XMLCALL		
+		xmlListRemoveLast	(xmlListPtr l,
+					 void *data);
+XMLPUBFUN int XMLCALL		
+		xmlListRemoveAll	(xmlListPtr l,
+					 void *data);
+XMLPUBFUN void XMLCALL		
+		xmlListClear		(xmlListPtr l);
+XMLPUBFUN int XMLCALL		
+		xmlListEmpty		(xmlListPtr l);
+XMLPUBFUN xmlLinkPtr XMLCALL	
+		xmlListFront		(xmlListPtr l);
+XMLPUBFUN xmlLinkPtr XMLCALL	
+		xmlListEnd		(xmlListPtr l);
+XMLPUBFUN int XMLCALL		
+		xmlListSize		(xmlListPtr l);
+
+XMLPUBFUN void XMLCALL		
+		xmlListPopFront		(xmlListPtr l);
+XMLPUBFUN void XMLCALL		
+		xmlListPopBack		(xmlListPtr l);
+XMLPUBFUN int XMLCALL		
+		xmlListPushFront	(xmlListPtr l,
+					 void *data);
+XMLPUBFUN int XMLCALL		
+		xmlListPushBack		(xmlListPtr l,
+					 void *data);
+
+/* Advanced Operators */
+XMLPUBFUN void XMLCALL		
+		xmlListReverse		(xmlListPtr l);
+XMLPUBFUN void XMLCALL		
+		xmlListSort		(xmlListPtr l);
+XMLPUBFUN void XMLCALL		
+		xmlListWalk		(xmlListPtr l,
+					 xmlListWalker walker,
+					 const void *user);
+XMLPUBFUN void XMLCALL		
+		xmlListReverseWalk	(xmlListPtr l,
+					 xmlListWalker walker,
+					 const void *user);
+XMLPUBFUN void XMLCALL		
+		xmlListMerge		(xmlListPtr l1,
+					 xmlListPtr l2);
+XMLPUBFUN xmlListPtr XMLCALL	
+		xmlListDup		(const xmlListPtr old);
+XMLPUBFUN int XMLCALL		
+		xmlListCopy		(xmlListPtr cur,
+					 const xmlListPtr old);
+/* Link operators */
+XMLPUBFUN void * XMLCALL          
+		xmlLinkGetData          (xmlLinkPtr lk);
+
+/* xmlListUnique() */
+/* xmlListSwap */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __XML_LINK_INCLUDE__ */
diff --git a/interfaces/ext/libxml/nanoftp.h b/interfaces/ext/libxml/nanoftp.h
new file mode 100644
index 0000000..e3c28a0
--- /dev/null
+++ b/interfaces/ext/libxml/nanoftp.h
@@ -0,0 +1,143 @@
+/*
+ * Summary: minimal FTP implementation
+ * Description: minimal FTP implementation allowing to fetch resources
+ *              like external subset.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+ 
+#ifndef __NANO_FTP_H__
+#define __NANO_FTP_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_FTP_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * ftpListCallback: 
+ * @userData:  user provided data for the callback
+ * @filename:  the file name (including "->" when links are shown)
+ * @attrib:  the attribute string
+ * @owner:  the owner string
+ * @group:  the group string
+ * @size:  the file size
+ * @links:  the link count
+ * @year:  the year
+ * @month:  the month
+ * @day:  the day
+ * @hour:  the hour
+ * @minute:  the minute
+ *
+ * A callback for the xmlNanoFTPList command.
+ * Note that only one of year and day:minute are specified.
+ */
+typedef void (*ftpListCallback) (void *userData,
+	                         const char *filename, const char *attrib,
+	                         const char *owner, const char *group,
+				 unsigned long size, int links, int year,
+				 const char *month, int day, int hour,
+				 int minute);
+/**
+ * ftpDataCallback: 
+ * @userData: the user provided context
+ * @data: the data received
+ * @len: its size in bytes
+ *
+ * A callback for the xmlNanoFTPGet command.
+ */
+typedef void (*ftpDataCallback) (void *userData,
+				 const char *data,
+				 int len);
+
+/*
+ * Init
+ */
+XMLPUBFUN void XMLCALL
+	xmlNanoFTPInit		(void);
+XMLPUBFUN void XMLCALL	
+	xmlNanoFTPCleanup	(void);
+
+/*
+ * Creating/freeing contexts.
+ */
+XMLPUBFUN void * XMLCALL	
+	xmlNanoFTPNewCtxt	(const char *URL);
+XMLPUBFUN void XMLCALL	
+	xmlNanoFTPFreeCtxt	(void * ctx);
+XMLPUBFUN void * XMLCALL 	
+	xmlNanoFTPConnectTo	(const char *server,
+				 int port);
+/*
+ * Opening/closing session connections.
+ */
+XMLPUBFUN void * XMLCALL 	
+	xmlNanoFTPOpen		(const char *URL);
+XMLPUBFUN int XMLCALL	
+	xmlNanoFTPConnect	(void *ctx);
+XMLPUBFUN int XMLCALL	
+	xmlNanoFTPClose		(void *ctx);
+XMLPUBFUN int XMLCALL	
+	xmlNanoFTPQuit		(void *ctx);
+XMLPUBFUN void XMLCALL	
+	xmlNanoFTPScanProxy	(const char *URL);
+XMLPUBFUN void XMLCALL	
+	xmlNanoFTPProxy		(const char *host,
+				 int port,
+				 const char *user,
+				 const char *passwd,
+				 int type);
+XMLPUBFUN int XMLCALL	
+	xmlNanoFTPUpdateURL	(void *ctx,
+				 const char *URL);
+
+/*
+ * Rather internal commands.
+ */
+XMLPUBFUN int XMLCALL	
+	xmlNanoFTPGetResponse	(void *ctx);
+XMLPUBFUN int XMLCALL	
+	xmlNanoFTPCheckResponse	(void *ctx);
+
+/*
+ * CD/DIR/GET handlers.
+ */
+XMLPUBFUN int XMLCALL	
+	xmlNanoFTPCwd		(void *ctx,
+				 const char *directory);
+XMLPUBFUN int XMLCALL	
+	xmlNanoFTPDele		(void *ctx,
+				 const char *file);
+
+XMLPUBFUN int XMLCALL	
+	xmlNanoFTPGetConnection	(void *ctx);
+XMLPUBFUN int XMLCALL	
+	xmlNanoFTPCloseConnection(void *ctx);
+XMLPUBFUN int XMLCALL	
+	xmlNanoFTPList		(void *ctx,
+				 ftpListCallback callback,
+				 void *userData,
+				 const char *filename);
+XMLPUBFUN int XMLCALL	
+	xmlNanoFTPGetSocket	(void *ctx,
+				 const char *filename);
+XMLPUBFUN int XMLCALL	
+	xmlNanoFTPGet		(void *ctx,
+				 ftpDataCallback callback,
+				 void *userData,
+				 const char *filename);
+XMLPUBFUN int XMLCALL	
+	xmlNanoFTPRead		(void *ctx,
+				 void *dest,
+				 int len);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* LIBXML_FTP_ENABLED */
+#endif /* __NANO_FTP_H__ */
diff --git a/interfaces/ext/libxml/nanohttp.h b/interfaces/ext/libxml/nanohttp.h
new file mode 100644
index 0000000..1d8ac24
--- /dev/null
+++ b/interfaces/ext/libxml/nanohttp.h
@@ -0,0 +1,81 @@
+/*
+ * Summary: minimal HTTP implementation
+ * Description: minimal HTTP implementation allowing to fetch resources
+ *              like external subset.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+ 
+#ifndef __NANO_HTTP_H__
+#define __NANO_HTTP_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_HTTP_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+XMLPUBFUN void XMLCALL
+	xmlNanoHTTPInit		(void);
+XMLPUBFUN void XMLCALL	
+	xmlNanoHTTPCleanup	(void);
+XMLPUBFUN void XMLCALL	
+	xmlNanoHTTPScanProxy	(const char *URL);
+XMLPUBFUN int XMLCALL	
+	xmlNanoHTTPFetch	(const char *URL,
+				 const char *filename,
+				 char **contentType);
+XMLPUBFUN void * XMLCALL	
+	xmlNanoHTTPMethod	(const char *URL,
+				 const char *method,
+				 const char *input,
+				 char **contentType,
+				 const char *headers,
+				 int   ilen);
+XMLPUBFUN void * XMLCALL	
+	xmlNanoHTTPMethodRedir	(const char *URL,
+				 const char *method,
+				 const char *input,
+				 char **contentType,
+				 char **redir,
+				 const char *headers,
+				 int   ilen);
+XMLPUBFUN void * XMLCALL	
+	xmlNanoHTTPOpen		(const char *URL,
+				 char **contentType);
+XMLPUBFUN void * XMLCALL	
+	xmlNanoHTTPOpenRedir	(const char *URL,
+				 char **contentType,
+				 char **redir);
+XMLPUBFUN int XMLCALL	
+	xmlNanoHTTPReturnCode	(void *ctx);
+XMLPUBFUN const char * XMLCALL 
+	xmlNanoHTTPAuthHeader	(void *ctx);
+XMLPUBFUN const char * XMLCALL
+	xmlNanoHTTPRedir	(void *ctx);
+XMLPUBFUN int XMLCALL
+	xmlNanoHTTPContentLength( void * ctx );
+XMLPUBFUN const char * XMLCALL
+	xmlNanoHTTPEncoding	(void *ctx);
+XMLPUBFUN const char * XMLCALL
+	xmlNanoHTTPMimeType	(void *ctx);
+XMLPUBFUN int XMLCALL	
+	xmlNanoHTTPRead		(void *ctx,
+				 void *dest,
+				 int len);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN int XMLCALL	
+	xmlNanoHTTPSave		(void *ctxt,
+				 const char *filename);
+#endif /* LIBXML_OUTPUT_ENABLED */
+XMLPUBFUN void XMLCALL	
+	xmlNanoHTTPClose	(void *ctx);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_HTTP_ENABLED */
+#endif /* __NANO_HTTP_H__ */
diff --git a/interfaces/ext/libxml/parser.h b/interfaces/ext/libxml/parser.h
new file mode 100644
index 0000000..567addb
--- /dev/null
+++ b/interfaces/ext/libxml/parser.h
@@ -0,0 +1,1226 @@
+/*
+ * Summary: the core parser module
+ * Description: Interfaces, constants and types related to the XML parser
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_PARSER_H__
+#define __XML_PARSER_H__
+
+#include <stdarg.h>
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/dict.h>
+#include <libxml/hash.h>
+#include <libxml/valid.h>
+#include <libxml/entities.h>
+#include <libxml/xmlerror.h>
+#include <libxml/xmlstring.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * XML_DEFAULT_VERSION:
+ *
+ * The default version of XML used: 1.0
+ */
+#define XML_DEFAULT_VERSION	"1.0"
+
+/**
+ * xmlParserInput:
+ *
+ * An xmlParserInput is an input flow for the XML processor.
+ * Each entity parsed is associated an xmlParserInput (except the
+ * few predefined ones). This is the case both for internal entities
+ * - in which case the flow is already completely in memory - or
+ * external entities - in which case we use the buf structure for
+ * progressive reading and I18N conversions to the internal UTF-8 format.
+ */
+
+/**
+ * xmlParserInputDeallocate:
+ * @str:  the string to deallocate
+ *
+ * Callback for freeing some parser input allocations.
+ */
+typedef void (* xmlParserInputDeallocate)(xmlChar *str);
+
+struct _xmlParserInput {
+    /* Input buffer */
+    xmlParserInputBufferPtr buf;      /* UTF-8 encoded buffer */
+
+    const char *filename;             /* The file analyzed, if any */
+    const char *directory;            /* the directory/base of the file */
+    const xmlChar *base;              /* Base of the array to parse */
+    const xmlChar *cur;               /* Current char being parsed */
+    const xmlChar *end;               /* end of the array to parse */
+    int length;                       /* length if known */
+    int line;                         /* Current line */
+    int col;                          /* Current column */
+    /*
+     * NOTE: consumed is only tested for equality in the parser code,
+     *       so even if there is an overflow this should not give troubles
+     *       for parsing very large instances.
+     */
+    unsigned long consumed;           /* How many xmlChars already consumed */
+    xmlParserInputDeallocate free;    /* function to deallocate the base */
+    const xmlChar *encoding;          /* the encoding string for entity */
+    const xmlChar *version;           /* the version string for entity */
+    int standalone;                   /* Was that entity marked standalone */
+    int id;                           /* an unique identifier for the entity */
+};
+
+/**
+ * xmlParserNodeInfo:
+ *
+ * The parser can be asked to collect Node informations, i.e. at what
+ * place in the file they were detected. 
+ * NOTE: This is off by default and not very well tested.
+ */
+typedef struct _xmlParserNodeInfo xmlParserNodeInfo;
+typedef xmlParserNodeInfo *xmlParserNodeInfoPtr;
+
+struct _xmlParserNodeInfo {
+  const struct _xmlNode* node;
+  /* Position & line # that text that created the node begins & ends on */
+  unsigned long begin_pos;
+  unsigned long begin_line;
+  unsigned long end_pos;
+  unsigned long end_line;
+};
+
+typedef struct _xmlParserNodeInfoSeq xmlParserNodeInfoSeq;
+typedef xmlParserNodeInfoSeq *xmlParserNodeInfoSeqPtr;
+struct _xmlParserNodeInfoSeq {
+  unsigned long maximum;
+  unsigned long length;
+  xmlParserNodeInfo* buffer;
+};
+
+/**
+ * xmlParserInputState:
+ *
+ * The parser is now working also as a state based parser.
+ * The recursive one use the state info for entities processing.
+ */
+typedef enum {
+    XML_PARSER_EOF = -1,	/* nothing is to be parsed */
+    XML_PARSER_START = 0,	/* nothing has been parsed */
+    XML_PARSER_MISC,		/* Misc* before int subset */
+    XML_PARSER_PI,		/* Within a processing instruction */
+    XML_PARSER_DTD,		/* within some DTD content */
+    XML_PARSER_PROLOG,		/* Misc* after internal subset */
+    XML_PARSER_COMMENT,		/* within a comment */
+    XML_PARSER_START_TAG,	/* within a start tag */
+    XML_PARSER_CONTENT,		/* within the content */
+    XML_PARSER_CDATA_SECTION,	/* within a CDATA section */
+    XML_PARSER_END_TAG,		/* within a closing tag */
+    XML_PARSER_ENTITY_DECL,	/* within an entity declaration */
+    XML_PARSER_ENTITY_VALUE,	/* within an entity value in a decl */
+    XML_PARSER_ATTRIBUTE_VALUE,	/* within an attribute value */
+    XML_PARSER_SYSTEM_LITERAL,	/* within a SYSTEM value */
+    XML_PARSER_EPILOG, 		/* the Misc* after the last end tag */
+    XML_PARSER_IGNORE,		/* within an IGNORED section */
+    XML_PARSER_PUBLIC_LITERAL 	/* within a PUBLIC value */
+} xmlParserInputState;
+
+/**
+ * XML_DETECT_IDS:
+ *
+ * Bit in the loadsubset context field to tell to do ID/REFs lookups.
+ * Use it to initialize xmlLoadExtDtdDefaultValue.
+ */
+#define XML_DETECT_IDS		2
+
+/**
+ * XML_COMPLETE_ATTRS:
+ *
+ * Bit in the loadsubset context field to tell to do complete the
+ * elements attributes lists with the ones defaulted from the DTDs.
+ * Use it to initialize xmlLoadExtDtdDefaultValue.
+ */
+#define XML_COMPLETE_ATTRS	4
+
+/**
+ * XML_SKIP_IDS:
+ *
+ * Bit in the loadsubset context field to tell to not do ID/REFs registration.
+ * Used to initialize xmlLoadExtDtdDefaultValue in some special cases.
+ */
+#define XML_SKIP_IDS		8
+
+/**
+ * xmlParserMode:
+ *
+ * A parser can operate in various modes
+ */
+typedef enum {
+    XML_PARSE_UNKNOWN = 0,
+    XML_PARSE_DOM = 1,
+    XML_PARSE_SAX = 2,
+    XML_PARSE_PUSH_DOM = 3,
+    XML_PARSE_PUSH_SAX = 4,
+    XML_PARSE_READER = 5
+} xmlParserMode;
+
+/**
+ * xmlParserCtxt:
+ *
+ * The parser context.
+ * NOTE This doesn't completely define the parser state, the (current ?)
+ *      design of the parser uses recursive function calls since this allow
+ *      and easy mapping from the production rules of the specification
+ *      to the actual code. The drawback is that the actual function call
+ *      also reflect the parser state. However most of the parsing routines
+ *      takes as the only argument the parser context pointer, so migrating
+ *      to a state based parser for progressive parsing shouldn't be too hard.
+ */
+struct _xmlParserCtxt {
+    struct _xmlSAXHandler *sax;       /* The SAX handler */
+    void            *userData;        /* For SAX interface only, used by DOM build */
+    xmlDocPtr           myDoc;        /* the document being built */
+    int            wellFormed;        /* is the document well formed */
+    int       replaceEntities;        /* shall we replace entities ? */
+    const xmlChar    *version;        /* the XML version string */
+    const xmlChar   *encoding;        /* the declared encoding, if any */
+    int            standalone;        /* standalone document */
+    int                  html;        /* an HTML(1)/Docbook(2) document */
+
+    /* Input stream stack */
+    xmlParserInputPtr  input;         /* Current input stream */
+    int                inputNr;       /* Number of current input streams */
+    int                inputMax;      /* Max number of input streams */
+    xmlParserInputPtr *inputTab;      /* stack of inputs */
+
+    /* Node analysis stack only used for DOM building */
+    xmlNodePtr         node;          /* Current parsed Node */
+    int                nodeNr;        /* Depth of the parsing stack */
+    int                nodeMax;       /* Max depth of the parsing stack */
+    xmlNodePtr        *nodeTab;       /* array of nodes */
+
+    int record_info;                  /* Whether node info should be kept */
+    xmlParserNodeInfoSeq node_seq;    /* info about each node parsed */
+
+    int errNo;                        /* error code */
+
+    int     hasExternalSubset;        /* reference and external subset */
+    int             hasPErefs;        /* the internal subset has PE refs */
+    int              external;        /* are we parsing an external entity */
+
+    int                 valid;        /* is the document valid */
+    int              validate;        /* shall we try to validate ? */
+    xmlValidCtxt        vctxt;        /* The validity context */
+
+    xmlParserInputState instate;      /* current type of input */
+    int                 token;        /* next char look-ahead */    
+
+    char           *directory;        /* the data directory */
+
+    /* Node name stack */
+    const xmlChar     *name;          /* Current parsed Node */
+    int                nameNr;        /* Depth of the parsing stack */
+    int                nameMax;       /* Max depth of the parsing stack */
+    const xmlChar *   *nameTab;       /* array of nodes */
+
+    long               nbChars;       /* number of xmlChar processed */
+    long            checkIndex;       /* used by progressive parsing lookup */
+    int             keepBlanks;       /* ugly but ... */
+    int             disableSAX;       /* SAX callbacks are disabled */
+    int               inSubset;       /* Parsing is in int 1/ext 2 subset */
+    const xmlChar *    intSubName;    /* name of subset */
+    xmlChar *          extSubURI;     /* URI of external subset */
+    xmlChar *          extSubSystem;  /* SYSTEM ID of external subset */
+
+    /* xml:space values */
+    int *              space;         /* Should the parser preserve spaces */
+    int                spaceNr;       /* Depth of the parsing stack */
+    int                spaceMax;      /* Max depth of the parsing stack */
+    int *              spaceTab;      /* array of space infos */
+
+    int                depth;         /* to prevent entity substitution loops */
+    xmlParserInputPtr  entity;        /* used to check entities boundaries */
+    int                charset;       /* encoding of the in-memory content
+				         actually an xmlCharEncoding */
+    int                nodelen;       /* Those two fields are there to */
+    int                nodemem;       /* Speed up large node parsing */
+    int                pedantic;      /* signal pedantic warnings */
+    void              *_private;      /* For user data, libxml won't touch it */
+
+    int                loadsubset;    /* should the external subset be loaded */
+    int                linenumbers;   /* set line number in element content */
+    void              *catalogs;      /* document's own catalog */
+    int                recovery;      /* run in recovery mode */
+    int                progressive;   /* is this a progressive parsing */
+    xmlDictPtr         dict;          /* dictionnary for the parser */
+    const xmlChar *   *atts;          /* array for the attributes callbacks */
+    int                maxatts;       /* the size of the array */
+    int                docdict;       /* use strings from dict to build tree */
+
+    /*
+     * pre-interned strings
+     */
+    const xmlChar *str_xml;
+    const xmlChar *str_xmlns;
+    const xmlChar *str_xml_ns;
+
+    /*
+     * Everything below is used only by the new SAX mode
+     */
+    int                sax2;          /* operating in the new SAX mode */
+    int                nsNr;          /* the number of inherited namespaces */
+    int                nsMax;         /* the size of the arrays */
+    const xmlChar *   *nsTab;         /* the array of prefix/namespace name */
+    int               *attallocs;     /* which attribute were allocated */
+    void *            *pushTab;       /* array of data for push */
+    xmlHashTablePtr    attsDefault;   /* defaulted attributes if any */
+    xmlHashTablePtr    attsSpecial;   /* non-CDATA attributes if any */
+    int                nsWellFormed;  /* is the document XML Nanespace okay */
+    int                options;       /* Extra options */
+
+    /*
+     * Those fields are needed only for treaming parsing so far
+     */
+    int               dictNames;    /* Use dictionary names for the tree */
+    int               freeElemsNr;  /* number of freed element nodes */
+    xmlNodePtr        freeElems;    /* List of freed element nodes */
+    int               freeAttrsNr;  /* number of freed attributes nodes */
+    xmlAttrPtr        freeAttrs;    /* List of freed attributes nodes */
+
+    /*
+     * the complete error informations for the last error.
+     */
+    xmlError          lastError;
+    xmlParserMode     parseMode;    /* the parser mode */
+    unsigned long    nbentities;    /* number of entities references */
+    unsigned long  sizeentities;    /* size of parsed entities */
+};
+
+/**
+ * xmlSAXLocator:
+ *
+ * A SAX Locator.
+ */
+struct _xmlSAXLocator {
+    const xmlChar *(*getPublicId)(void *ctx);
+    const xmlChar *(*getSystemId)(void *ctx);
+    int (*getLineNumber)(void *ctx);
+    int (*getColumnNumber)(void *ctx);
+};
+
+/**
+ * xmlSAXHandler:
+ *
+ * A SAX handler is bunch of callbacks called by the parser when processing
+ * of the input generate data or structure informations.
+ */
+
+/**
+ * resolveEntitySAXFunc:
+ * @ctx:  the user data (XML parser context)
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ *
+ * Callback:
+ * The entity loader, to control the loading of external entities,
+ * the application can either:
+ *    - override this resolveEntity() callback in the SAX block
+ *    - or better use the xmlSetExternalEntityLoader() function to
+ *      set up it's own entity resolution routine
+ *
+ * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
+ */
+typedef xmlParserInputPtr (*resolveEntitySAXFunc) (void *ctx,
+				const xmlChar *publicId,
+				const xmlChar *systemId);
+/**
+ * internalSubsetSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ * @name:  the root element name
+ * @ExternalID:  the external ID
+ * @SystemID:  the SYSTEM ID (e.g. filename or URL)
+ *
+ * Callback on internal subset declaration.
+ */
+typedef void (*internalSubsetSAXFunc) (void *ctx,
+				const xmlChar *name,
+				const xmlChar *ExternalID,
+				const xmlChar *SystemID);
+/**
+ * externalSubsetSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ * @name:  the root element name
+ * @ExternalID:  the external ID
+ * @SystemID:  the SYSTEM ID (e.g. filename or URL)
+ *
+ * Callback on external subset declaration.
+ */
+typedef void (*externalSubsetSAXFunc) (void *ctx,
+				const xmlChar *name,
+				const xmlChar *ExternalID,
+				const xmlChar *SystemID);
+/**
+ * getEntitySAXFunc:
+ * @ctx:  the user data (XML parser context)
+ * @name: The entity name
+ *
+ * Get an entity by name.
+ *
+ * Returns the xmlEntityPtr if found.
+ */
+typedef xmlEntityPtr (*getEntitySAXFunc) (void *ctx,
+				const xmlChar *name);
+/**
+ * getParameterEntitySAXFunc:
+ * @ctx:  the user data (XML parser context)
+ * @name: The entity name
+ *
+ * Get a parameter entity by name.
+ *
+ * Returns the xmlEntityPtr if found.
+ */
+typedef xmlEntityPtr (*getParameterEntitySAXFunc) (void *ctx,
+				const xmlChar *name);
+/**
+ * entityDeclSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ * @name:  the entity name 
+ * @type:  the entity type 
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ * @content: the entity value (without processing).
+ *
+ * An entity definition has been parsed.
+ */
+typedef void (*entityDeclSAXFunc) (void *ctx,
+				const xmlChar *name,
+				int type,
+				const xmlChar *publicId,
+				const xmlChar *systemId,
+				xmlChar *content);
+/**
+ * notationDeclSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ * @name: The name of the notation
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ *
+ * What to do when a notation declaration has been parsed.
+ */
+typedef void (*notationDeclSAXFunc)(void *ctx,
+				const xmlChar *name,
+				const xmlChar *publicId,
+				const xmlChar *systemId);
+/**
+ * attributeDeclSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ * @elem:  the name of the element
+ * @fullname:  the attribute name 
+ * @type:  the attribute type 
+ * @def:  the type of default value
+ * @defaultValue: the attribute default value
+ * @tree:  the tree of enumerated value set
+ *
+ * An attribute definition has been parsed.
+ */
+typedef void (*attributeDeclSAXFunc)(void *ctx,
+				const xmlChar *elem,
+				const xmlChar *fullname,
+				int type,
+				int def,
+				const xmlChar *defaultValue,
+				xmlEnumerationPtr tree);
+/**
+ * elementDeclSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ * @name:  the element name 
+ * @type:  the element type 
+ * @content: the element value tree
+ *
+ * An element definition has been parsed.
+ */
+typedef void (*elementDeclSAXFunc)(void *ctx,
+				const xmlChar *name,
+				int type,
+				xmlElementContentPtr content);
+/**
+ * unparsedEntityDeclSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ * @name: The name of the entity
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ * @notationName: the name of the notation
+ *
+ * What to do when an unparsed entity declaration is parsed.
+ */
+typedef void (*unparsedEntityDeclSAXFunc)(void *ctx,
+				const xmlChar *name,
+				const xmlChar *publicId,
+				const xmlChar *systemId,
+				const xmlChar *notationName);
+/**
+ * setDocumentLocatorSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ * @loc: A SAX Locator
+ *
+ * Receive the document locator at startup, actually xmlDefaultSAXLocator.
+ * Everything is available on the context, so this is useless in our case.
+ */
+typedef void (*setDocumentLocatorSAXFunc) (void *ctx,
+				xmlSAXLocatorPtr loc);
+/**
+ * startDocumentSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ *
+ * Called when the document start being processed.
+ */
+typedef void (*startDocumentSAXFunc) (void *ctx);
+/**
+ * endDocumentSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ *
+ * Called when the document end has been detected.
+ */
+typedef void (*endDocumentSAXFunc) (void *ctx);
+/**
+ * startElementSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ * @name:  The element name, including namespace prefix
+ * @atts:  An array of name/value attributes pairs, NULL terminated
+ *
+ * Called when an opening tag has been processed.
+ */
+typedef void (*startElementSAXFunc) (void *ctx,
+				const xmlChar *name,
+				const xmlChar **atts);
+/**
+ * endElementSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ * @name:  The element name
+ *
+ * Called when the end of an element has been detected.
+ */
+typedef void (*endElementSAXFunc) (void *ctx,
+				const xmlChar *name);
+/**
+ * attributeSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ * @name:  The attribute name, including namespace prefix
+ * @value:  The attribute value
+ *
+ * Handle an attribute that has been read by the parser.
+ * The default handling is to convert the attribute into an
+ * DOM subtree and past it in a new xmlAttr element added to
+ * the element.
+ */
+typedef void (*attributeSAXFunc) (void *ctx,
+				const xmlChar *name,
+				const xmlChar *value);
+/**
+ * referenceSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ * @name:  The entity name
+ *
+ * Called when an entity reference is detected. 
+ */
+typedef void (*referenceSAXFunc) (void *ctx,
+				const xmlChar *name);
+/**
+ * charactersSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ * @ch:  a xmlChar string
+ * @len: the number of xmlChar
+ *
+ * Receiving some chars from the parser.
+ */
+typedef void (*charactersSAXFunc) (void *ctx,
+				const xmlChar *ch,
+				int len);
+/**
+ * ignorableWhitespaceSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ * @ch:  a xmlChar string
+ * @len: the number of xmlChar
+ *
+ * Receiving some ignorable whitespaces from the parser.
+ * UNUSED: by default the DOM building will use characters.
+ */
+typedef void (*ignorableWhitespaceSAXFunc) (void *ctx,
+				const xmlChar *ch,
+				int len);
+/**
+ * processingInstructionSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ * @target:  the target name
+ * @data: the PI data's
+ *
+ * A processing instruction has been parsed.
+ */
+typedef void (*processingInstructionSAXFunc) (void *ctx,
+				const xmlChar *target,
+				const xmlChar *data);
+/**
+ * commentSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ * @value:  the comment content
+ *
+ * A comment has been parsed.
+ */
+typedef void (*commentSAXFunc) (void *ctx,
+				const xmlChar *value);
+/**
+ * cdataBlockSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ * @value:  The pcdata content
+ * @len:  the block length
+ *
+ * Called when a pcdata block has been parsed.
+ */
+typedef void (*cdataBlockSAXFunc) (
+	                        void *ctx,
+				const xmlChar *value,
+				int len);
+/**
+ * warningSAXFunc:
+ * @ctx:  an XML parser context
+ * @msg:  the message to display/transmit
+ * @...:  extra parameters for the message display
+ * 
+ * Display and format a warning messages, callback.
+ */
+typedef void (XMLCDECL *warningSAXFunc) (void *ctx,
+				const char *msg, ...) ATTRIBUTE_PRINTF(2,3);
+/**
+ * errorSAXFunc:
+ * @ctx:  an XML parser context
+ * @msg:  the message to display/transmit
+ * @...:  extra parameters for the message display
+ * 
+ * Display and format an error messages, callback.
+ */
+typedef void (XMLCDECL *errorSAXFunc) (void *ctx,
+				const char *msg, ...) ATTRIBUTE_PRINTF(2,3);
+/**
+ * fatalErrorSAXFunc:
+ * @ctx:  an XML parser context
+ * @msg:  the message to display/transmit
+ * @...:  extra parameters for the message display
+ * 
+ * Display and format fatal error messages, callback.
+ * Note: so far fatalError() SAX callbacks are not used, error()
+ *       get all the callbacks for errors.
+ */
+typedef void (XMLCDECL *fatalErrorSAXFunc) (void *ctx,
+				const char *msg, ...) ATTRIBUTE_PRINTF(2,3);
+/**
+ * isStandaloneSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ *
+ * Is this document tagged standalone?
+ *
+ * Returns 1 if true
+ */
+typedef int (*isStandaloneSAXFunc) (void *ctx);
+/**
+ * hasInternalSubsetSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ *
+ * Does this document has an internal subset.
+ *
+ * Returns 1 if true
+ */
+typedef int (*hasInternalSubsetSAXFunc) (void *ctx);
+
+/**
+ * hasExternalSubsetSAXFunc:
+ * @ctx:  the user data (XML parser context)
+ *
+ * Does this document has an external subset?
+ *
+ * Returns 1 if true
+ */
+typedef int (*hasExternalSubsetSAXFunc) (void *ctx);
+
+/************************************************************************
+ *									*
+ *			The SAX version 2 API extensions		*
+ *									*
+ ************************************************************************/
+/**
+ * XML_SAX2_MAGIC:
+ *
+ * Special constant found in SAX2 blocks initialized fields
+ */
+#define XML_SAX2_MAGIC 0xDEEDBEAF
+
+/**
+ * startElementNsSAX2Func:
+ * @ctx:  the user data (XML parser context)
+ * @localname:  the local name of the element
+ * @prefix:  the element namespace prefix if available
+ * @URI:  the element namespace name if available
+ * @nb_namespaces:  number of namespace definitions on that node
+ * @namespaces:  pointer to the array of prefix/URI pairs namespace definitions
+ * @nb_attributes:  the number of attributes on that node
+ * @nb_defaulted:  the number of defaulted attributes. The defaulted
+ *                  ones are at the end of the array
+ * @attributes:  pointer to the array of (localname/prefix/URI/value/end)
+ *               attribute values.
+ *
+ * SAX2 callback when an element start has been detected by the parser.
+ * It provides the namespace informations for the element, as well as
+ * the new namespace declarations on the element.
+ */
+
+typedef void (*startElementNsSAX2Func) (void *ctx,
+					const xmlChar *localname,
+					const xmlChar *prefix,
+					const xmlChar *URI,
+					int nb_namespaces,
+					const xmlChar **namespaces,
+					int nb_attributes,
+					int nb_defaulted,
+					const xmlChar **attributes);
+ 
+/**
+ * endElementNsSAX2Func:
+ * @ctx:  the user data (XML parser context)
+ * @localname:  the local name of the element
+ * @prefix:  the element namespace prefix if available
+ * @URI:  the element namespace name if available
+ *
+ * SAX2 callback when an element end has been detected by the parser.
+ * It provides the namespace informations for the element.
+ */
+
+typedef void (*endElementNsSAX2Func)   (void *ctx,
+					const xmlChar *localname,
+					const xmlChar *prefix,
+					const xmlChar *URI);
+
+
+struct _xmlSAXHandler {
+    internalSubsetSAXFunc internalSubset;
+    isStandaloneSAXFunc isStandalone;
+    hasInternalSubsetSAXFunc hasInternalSubset;
+    hasExternalSubsetSAXFunc hasExternalSubset;
+    resolveEntitySAXFunc resolveEntity;
+    getEntitySAXFunc getEntity;
+    entityDeclSAXFunc entityDecl;
+    notationDeclSAXFunc notationDecl;
+    attributeDeclSAXFunc attributeDecl;
+    elementDeclSAXFunc elementDecl;
+    unparsedEntityDeclSAXFunc unparsedEntityDecl;
+    setDocumentLocatorSAXFunc setDocumentLocator;
+    startDocumentSAXFunc startDocument;
+    endDocumentSAXFunc endDocument;
+    startElementSAXFunc startElement;
+    endElementSAXFunc endElement;
+    referenceSAXFunc reference;
+    charactersSAXFunc characters;
+    ignorableWhitespaceSAXFunc ignorableWhitespace;
+    processingInstructionSAXFunc processingInstruction;
+    commentSAXFunc comment;
+    warningSAXFunc warning;
+    errorSAXFunc error;
+    fatalErrorSAXFunc fatalError; /* unused error() get all the errors */
+    getParameterEntitySAXFunc getParameterEntity;
+    cdataBlockSAXFunc cdataBlock;
+    externalSubsetSAXFunc externalSubset;
+    unsigned int initialized;
+    /* The following fields are extensions available only on version 2 */
+    void *_private;
+    startElementNsSAX2Func startElementNs;
+    endElementNsSAX2Func endElementNs;
+    xmlStructuredErrorFunc serror;
+};
+
+/*
+ * SAX Version 1
+ */
+typedef struct _xmlSAXHandlerV1 xmlSAXHandlerV1;
+typedef xmlSAXHandlerV1 *xmlSAXHandlerV1Ptr;
+struct _xmlSAXHandlerV1 {
+    internalSubsetSAXFunc internalSubset;
+    isStandaloneSAXFunc isStandalone;
+    hasInternalSubsetSAXFunc hasInternalSubset;
+    hasExternalSubsetSAXFunc hasExternalSubset;
+    resolveEntitySAXFunc resolveEntity;
+    getEntitySAXFunc getEntity;
+    entityDeclSAXFunc entityDecl;
+    notationDeclSAXFunc notationDecl;
+    attributeDeclSAXFunc attributeDecl;
+    elementDeclSAXFunc elementDecl;
+    unparsedEntityDeclSAXFunc unparsedEntityDecl;
+    setDocumentLocatorSAXFunc setDocumentLocator;
+    startDocumentSAXFunc startDocument;
+    endDocumentSAXFunc endDocument;
+    startElementSAXFunc startElement;
+    endElementSAXFunc endElement;
+    referenceSAXFunc reference;
+    charactersSAXFunc characters;
+    ignorableWhitespaceSAXFunc ignorableWhitespace;
+    processingInstructionSAXFunc processingInstruction;
+    commentSAXFunc comment;
+    warningSAXFunc warning;
+    errorSAXFunc error;
+    fatalErrorSAXFunc fatalError; /* unused error() get all the errors */
+    getParameterEntitySAXFunc getParameterEntity;
+    cdataBlockSAXFunc cdataBlock;
+    externalSubsetSAXFunc externalSubset;
+    unsigned int initialized;
+};
+
+
+/**
+ * xmlExternalEntityLoader:
+ * @URL: The System ID of the resource requested
+ * @ID: The Public ID of the resource requested
+ * @context: the XML parser context 
+ *
+ * External entity loaders types.
+ *
+ * Returns the entity input parser.
+ */
+typedef xmlParserInputPtr (*xmlExternalEntityLoader) (const char *URL,
+					 const char *ID,
+					 xmlParserCtxtPtr context);
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <libxml/encoding.h>
+#include <libxml/xmlIO.h>
+#include <libxml/globals.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*
+ * Init/Cleanup
+ */
+XMLPUBFUN void XMLCALL		
+		xmlInitParser		(void);
+XMLPUBFUN void XMLCALL		
+		xmlCleanupParser	(void);
+
+/*
+ * Input functions
+ */
+XMLPUBFUN int XMLCALL		
+		xmlParserInputRead	(xmlParserInputPtr in,
+					 int len);
+XMLPUBFUN int XMLCALL		
+		xmlParserInputGrow	(xmlParserInputPtr in,
+					 int len);
+
+/*
+ * Basic parsing Interfaces
+ */
+#ifdef LIBXML_SAX1_ENABLED
+XMLPUBFUN xmlDocPtr XMLCALL	
+		xmlParseDoc		(const xmlChar *cur);
+XMLPUBFUN xmlDocPtr XMLCALL	
+		xmlParseFile		(const char *filename);
+XMLPUBFUN xmlDocPtr XMLCALL	
+		xmlParseMemory		(const char *buffer,
+					 int size);
+#endif /* LIBXML_SAX1_ENABLED */
+XMLPUBFUN int XMLCALL		
+		xmlSubstituteEntitiesDefault(int val);
+XMLPUBFUN int XMLCALL		
+		xmlKeepBlanksDefault	(int val);
+XMLPUBFUN void XMLCALL		
+		xmlStopParser		(xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL		
+		xmlPedanticParserDefault(int val);
+XMLPUBFUN int XMLCALL		
+		xmlLineNumbersDefault	(int val);
+
+#ifdef LIBXML_SAX1_ENABLED
+/*
+ * Recovery mode 
+ */
+XMLPUBFUN xmlDocPtr XMLCALL	
+		xmlRecoverDoc		(xmlChar *cur);
+XMLPUBFUN xmlDocPtr XMLCALL	
+		xmlRecoverMemory	(const char *buffer,
+					 int size);
+XMLPUBFUN xmlDocPtr XMLCALL	
+		xmlRecoverFile		(const char *filename);
+#endif /* LIBXML_SAX1_ENABLED */
+
+/*
+ * Less common routines and SAX interfaces
+ */
+XMLPUBFUN int XMLCALL		
+		xmlParseDocument	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL		
+		xmlParseExtParsedEnt	(xmlParserCtxtPtr ctxt);
+#ifdef LIBXML_SAX1_ENABLED
+XMLPUBFUN int XMLCALL		
+		xmlSAXUserParseFile	(xmlSAXHandlerPtr sax,
+					 void *user_data,
+					 const char *filename);
+XMLPUBFUN int XMLCALL		
+		xmlSAXUserParseMemory	(xmlSAXHandlerPtr sax,
+					 void *user_data,
+					 const char *buffer,
+					 int size);
+XMLPUBFUN xmlDocPtr XMLCALL	
+		xmlSAXParseDoc		(xmlSAXHandlerPtr sax,
+					 const xmlChar *cur,
+					 int recovery);
+XMLPUBFUN xmlDocPtr XMLCALL	
+		xmlSAXParseMemory	(xmlSAXHandlerPtr sax,
+					 const char *buffer,
+                                   	 int size,
+					 int recovery);
+XMLPUBFUN xmlDocPtr XMLCALL	
+		xmlSAXParseMemoryWithData (xmlSAXHandlerPtr sax,
+					 const char *buffer,
+                                   	 int size,
+					 int recovery,
+					 void *data);
+XMLPUBFUN xmlDocPtr XMLCALL	
+		xmlSAXParseFile		(xmlSAXHandlerPtr sax,
+					 const char *filename,
+					 int recovery);
+XMLPUBFUN xmlDocPtr XMLCALL	
+		xmlSAXParseFileWithData	(xmlSAXHandlerPtr sax,
+					 const char *filename,
+					 int recovery,
+					 void *data);
+XMLPUBFUN xmlDocPtr XMLCALL	
+		xmlSAXParseEntity	(xmlSAXHandlerPtr sax,
+					 const char *filename);
+XMLPUBFUN xmlDocPtr XMLCALL	
+		xmlParseEntity		(const char *filename);
+#endif /* LIBXML_SAX1_ENABLED */
+
+#ifdef LIBXML_VALID_ENABLED
+XMLPUBFUN xmlDtdPtr XMLCALL	
+		xmlSAXParseDTD		(xmlSAXHandlerPtr sax,
+					 const xmlChar *ExternalID,
+					 const xmlChar *SystemID);
+XMLPUBFUN xmlDtdPtr XMLCALL	
+		xmlParseDTD		(const xmlChar *ExternalID,
+					 const xmlChar *SystemID);
+XMLPUBFUN xmlDtdPtr XMLCALL	
+		xmlIOParseDTD		(xmlSAXHandlerPtr sax,
+					 xmlParserInputBufferPtr input,
+					 xmlCharEncoding enc);
+#endif /* LIBXML_VALID_ENABLE */
+#ifdef LIBXML_SAX1_ENABLED
+XMLPUBFUN int XMLCALL	
+		xmlParseBalancedChunkMemory(xmlDocPtr doc,
+					 xmlSAXHandlerPtr sax,
+					 void *user_data,
+					 int depth,
+					 const xmlChar *string,
+					 xmlNodePtr *lst);
+#endif /* LIBXML_SAX1_ENABLED */
+XMLPUBFUN xmlParserErrors XMLCALL
+		xmlParseInNodeContext	(xmlNodePtr node,
+					 const char *data,
+					 int datalen,
+					 int options,
+					 xmlNodePtr *lst);
+#ifdef LIBXML_SAX1_ENABLED
+XMLPUBFUN int XMLCALL          
+		xmlParseBalancedChunkMemoryRecover(xmlDocPtr doc,
+                     xmlSAXHandlerPtr sax,
+                     void *user_data,
+                     int depth,
+                     const xmlChar *string,
+                     xmlNodePtr *lst,
+                     int recover);
+XMLPUBFUN int XMLCALL		
+		xmlParseExternalEntity	(xmlDocPtr doc,
+					 xmlSAXHandlerPtr sax,
+					 void *user_data,
+					 int depth,
+					 const xmlChar *URL,
+					 const xmlChar *ID,
+					 xmlNodePtr *lst);
+#endif /* LIBXML_SAX1_ENABLED */
+XMLPUBFUN int XMLCALL		
+		xmlParseCtxtExternalEntity(xmlParserCtxtPtr ctx,
+					 const xmlChar *URL,
+					 const xmlChar *ID,
+					 xmlNodePtr *lst);
+
+/*
+ * Parser contexts handling.
+ */
+XMLPUBFUN xmlParserCtxtPtr XMLCALL	
+		xmlNewParserCtxt	(void);
+XMLPUBFUN int XMLCALL		
+		xmlInitParserCtxt	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL		
+		xmlClearParserCtxt	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL		
+		xmlFreeParserCtxt	(xmlParserCtxtPtr ctxt);
+#ifdef LIBXML_SAX1_ENABLED
+XMLPUBFUN void XMLCALL		
+		xmlSetupParserForBuffer	(xmlParserCtxtPtr ctxt,
+					 const xmlChar* buffer,
+					 const char *filename);
+#endif /* LIBXML_SAX1_ENABLED */
+XMLPUBFUN xmlParserCtxtPtr XMLCALL 
+		xmlCreateDocParserCtxt	(const xmlChar *cur);
+
+#ifdef LIBXML_LEGACY_ENABLED
+/*
+ * Reading/setting optional parsing features.
+ */
+XMLPUBFUN int XMLCALL		
+		xmlGetFeaturesList	(int *len,
+					 const char **result);
+XMLPUBFUN int XMLCALL		
+		xmlGetFeature		(xmlParserCtxtPtr ctxt,
+					 const char *name,
+					 void *result);
+XMLPUBFUN int XMLCALL		
+		xmlSetFeature		(xmlParserCtxtPtr ctxt,
+					 const char *name,
+					 void *value);
+#endif /* LIBXML_LEGACY_ENABLED */
+
+#ifdef LIBXML_PUSH_ENABLED
+/*
+ * Interfaces for the Push mode.
+ */
+XMLPUBFUN xmlParserCtxtPtr XMLCALL 
+		xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax,
+					 void *user_data,
+					 const char *chunk,
+					 int size,
+					 const char *filename);
+XMLPUBFUN int XMLCALL		 
+		xmlParseChunk		(xmlParserCtxtPtr ctxt,
+					 const char *chunk,
+					 int size,
+					 int terminate);
+#endif /* LIBXML_PUSH_ENABLED */
+
+/*
+ * Special I/O mode.
+ */
+
+XMLPUBFUN xmlParserCtxtPtr XMLCALL 
+		xmlCreateIOParserCtxt	(xmlSAXHandlerPtr sax,
+					 void *user_data,
+					 xmlInputReadCallback   ioread,
+					 xmlInputCloseCallback  ioclose,
+					 void *ioctx,
+					 xmlCharEncoding enc);
+
+XMLPUBFUN xmlParserInputPtr XMLCALL 
+		xmlNewIOInputStream	(xmlParserCtxtPtr ctxt,
+					 xmlParserInputBufferPtr input,
+					 xmlCharEncoding enc);
+
+/*
+ * Node infos.
+ */
+XMLPUBFUN const xmlParserNodeInfo* XMLCALL
+		xmlParserFindNodeInfo	(const xmlParserCtxtPtr ctxt,
+				         const xmlNodePtr node);
+XMLPUBFUN void XMLCALL		
+		xmlInitNodeInfoSeq	(xmlParserNodeInfoSeqPtr seq);
+XMLPUBFUN void XMLCALL		
+		xmlClearNodeInfoSeq	(xmlParserNodeInfoSeqPtr seq);
+XMLPUBFUN unsigned long XMLCALL 
+		xmlParserFindNodeInfoIndex(const xmlParserNodeInfoSeqPtr seq,
+                                         const xmlNodePtr node);
+XMLPUBFUN void XMLCALL		
+		xmlParserAddNodeInfo	(xmlParserCtxtPtr ctxt,
+					 const xmlParserNodeInfoPtr info);
+
+/*
+ * External entities handling actually implemented in xmlIO.
+ */
+
+XMLPUBFUN void XMLCALL		
+		xmlSetExternalEntityLoader(xmlExternalEntityLoader f);
+XMLPUBFUN xmlExternalEntityLoader XMLCALL
+		xmlGetExternalEntityLoader(void);
+XMLPUBFUN xmlParserInputPtr XMLCALL
+		xmlLoadExternalEntity	(const char *URL,
+					 const char *ID,
+					 xmlParserCtxtPtr ctxt);
+
+/*
+ * Index lookup, actually implemented in the encoding module
+ */
+XMLPUBFUN long XMLCALL
+		xmlByteConsumed		(xmlParserCtxtPtr ctxt);
+
+/*
+ * New set of simpler/more flexible APIs
+ */
+/**
+ * xmlParserOption:
+ *
+ * This is the set of XML parser options that can be passed down
+ * to the xmlReadDoc() and similar calls.
+ */
+typedef enum {
+    XML_PARSE_RECOVER	= 1<<0,	/* recover on errors */
+    XML_PARSE_NOENT	= 1<<1,	/* substitute entities */
+    XML_PARSE_DTDLOAD	= 1<<2,	/* load the external subset */
+    XML_PARSE_DTDATTR	= 1<<3,	/* default DTD attributes */
+    XML_PARSE_DTDVALID	= 1<<4,	/* validate with the DTD */
+    XML_PARSE_NOERROR	= 1<<5,	/* suppress error reports */
+    XML_PARSE_NOWARNING	= 1<<6,	/* suppress warning reports */
+    XML_PARSE_PEDANTIC	= 1<<7,	/* pedantic error reporting */
+    XML_PARSE_NOBLANKS	= 1<<8,	/* remove blank nodes */
+    XML_PARSE_SAX1	= 1<<9,	/* use the SAX1 interface internally */
+    XML_PARSE_XINCLUDE	= 1<<10,/* Implement XInclude substitition  */
+    XML_PARSE_NONET	= 1<<11,/* Forbid network access */
+    XML_PARSE_NODICT	= 1<<12,/* Do not reuse the context dictionnary */
+    XML_PARSE_NSCLEAN	= 1<<13,/* remove redundant namespaces declarations */
+    XML_PARSE_NOCDATA	= 1<<14,/* merge CDATA as text nodes */
+    XML_PARSE_NOXINCNODE= 1<<15,/* do not generate XINCLUDE START/END nodes */
+    XML_PARSE_COMPACT   = 1<<16,/* compact small text nodes; no modification of
+                                   the tree allowed afterwards (will possibly
+				   crash if you try to modify the tree) */
+    XML_PARSE_OLD10	= 1<<17,/* parse using XML-1.0 before update 5 */
+    XML_PARSE_NOBASEFIX = 1<<18,/* do not fixup XINCLUDE xml:base uris */
+    XML_PARSE_HUGE      = 1<<19, /* relax any hardcoded limit from the parser */
+    XML_PARSE_OLDSAX    = 1<<20 /* parse using SAX2 interface from before 2.7.0 */
+} xmlParserOption;
+
+XMLPUBFUN void XMLCALL
+		xmlCtxtReset		(xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+		xmlCtxtResetPush	(xmlParserCtxtPtr ctxt,
+					 const char *chunk,
+					 int size,
+					 const char *filename,
+					 const char *encoding);
+XMLPUBFUN int XMLCALL
+		xmlCtxtUseOptions	(xmlParserCtxtPtr ctxt,
+					 int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+		xmlReadDoc		(const xmlChar *cur,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+		xmlReadFile		(const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+		xmlReadMemory		(const char *buffer,
+					 int size,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+		xmlReadFd		(int fd,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+		xmlReadIO		(xmlInputReadCallback ioread,
+					 xmlInputCloseCallback ioclose,
+					 void *ioctx,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+		xmlCtxtReadDoc		(xmlParserCtxtPtr ctxt,
+					 const xmlChar *cur,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+		xmlCtxtReadFile		(xmlParserCtxtPtr ctxt,
+					 const char *filename,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+		xmlCtxtReadMemory		(xmlParserCtxtPtr ctxt,
+					 const char *buffer,
+					 int size,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+		xmlCtxtReadFd		(xmlParserCtxtPtr ctxt,
+					 int fd,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN xmlDocPtr XMLCALL
+		xmlCtxtReadIO		(xmlParserCtxtPtr ctxt,
+					 xmlInputReadCallback ioread,
+					 xmlInputCloseCallback ioclose,
+					 void *ioctx,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+
+/*
+ * Library wide options
+ */
+/**
+ * xmlFeature:
+ *
+ * Used to examine the existance of features that can be enabled
+ * or disabled at compile-time.
+ * They used to be called XML_FEATURE_xxx but this clashed with Expat
+ */
+typedef enum {
+    XML_WITH_THREAD = 1,
+    XML_WITH_TREE = 2,
+    XML_WITH_OUTPUT = 3,
+    XML_WITH_PUSH = 4,
+    XML_WITH_READER = 5,
+    XML_WITH_PATTERN = 6,
+    XML_WITH_WRITER = 7,
+    XML_WITH_SAX1 = 8,
+    XML_WITH_FTP = 9,
+    XML_WITH_HTTP = 10,
+    XML_WITH_VALID = 11,
+    XML_WITH_HTML = 12,
+    XML_WITH_LEGACY = 13,
+    XML_WITH_C14N = 14,
+    XML_WITH_CATALOG = 15,
+    XML_WITH_XPATH = 16,
+    XML_WITH_XPTR = 17,
+    XML_WITH_XINCLUDE = 18,
+    XML_WITH_ICONV = 19,
+    XML_WITH_ISO8859X = 20,
+    XML_WITH_UNICODE = 21,
+    XML_WITH_REGEXP = 22,
+    XML_WITH_AUTOMATA = 23,
+    XML_WITH_EXPR = 24,
+    XML_WITH_SCHEMAS = 25,
+    XML_WITH_SCHEMATRON = 26,
+    XML_WITH_MODULES = 27,
+    XML_WITH_DEBUG = 28,
+    XML_WITH_DEBUG_MEM = 29,
+    XML_WITH_DEBUG_RUN = 30,
+    XML_WITH_ZLIB = 31,
+    XML_WITH_NONE = 99999 /* just to be sure of allocation size */
+} xmlFeature;
+
+XMLPUBFUN int XMLCALL
+		xmlHasFeature		(xmlFeature feature);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_PARSER_H__ */
+
diff --git a/interfaces/ext/libxml/parserInternals.h b/interfaces/ext/libxml/parserInternals.h
new file mode 100644
index 0000000..a5e75b5
--- /dev/null
+++ b/interfaces/ext/libxml/parserInternals.h
@@ -0,0 +1,611 @@
+/*
+ * Summary: internals routines exported by the parser.
+ * Description: this module exports a number of internal parsing routines
+ *              they are not really all intended for applications but
+ *              can prove useful doing low level processing.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_PARSER_INTERNALS_H__
+#define __XML_PARSER_INTERNALS_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/parser.h>
+#include <libxml/HTMLparser.h>
+#include <libxml/chvalid.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlParserMaxDepth:
+ *
+ * arbitrary depth limit for the XML documents that we allow to
+ * process. This is not a limitation of the parser but a safety
+ * boundary feature, use XML_PARSE_HUGE option to override it.
+ */
+XMLPUBVAR unsigned int xmlParserMaxDepth;
+
+/**
+ * XML_MAX_TEXT_LENGTH:
+ *
+ * Maximum size allowed for a single text node when building a tree.
+ * This is not a limitation of the parser but a safety boundary feature,
+ * use XML_PARSE_HUGE option to override it.
+ */
+#define XML_MAX_TEXT_LENGTH 10000000
+
+/**
+ * XML_MAX_NAMELEN:
+ *
+ * Identifiers can be longer, but this will be more costly
+ * at runtime.
+ */
+#define XML_MAX_NAMELEN 100
+
+/**
+ * INPUT_CHUNK:
+ *
+ * The parser tries to always have that amount of input ready.
+ * One of the point is providing context when reporting errors.
+ */
+#define INPUT_CHUNK	250
+
+/************************************************************************
+ *									*
+ * UNICODE version of the macros.      					*
+ *									*
+ ************************************************************************/
+/**
+ * IS_BYTE_CHAR:
+ * @c:  an byte value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ * [2] Char ::= #x9 | #xA | #xD | [#x20...]
+ * any byte character in the accepted range
+ */
+#define IS_BYTE_CHAR(c)	 xmlIsChar_ch(c)
+
+/**
+ * IS_CHAR:
+ * @c:  an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ * [2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD]
+ *                  | [#x10000-#x10FFFF]
+ * any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.
+ */
+#define IS_CHAR(c)   xmlIsCharQ(c)
+
+/**
+ * IS_CHAR_CH:
+ * @c: an xmlChar (usually an unsigned char)
+ *
+ * Behaves like IS_CHAR on single-byte value
+ */
+#define IS_CHAR_CH(c)  xmlIsChar_ch(c)
+
+/**
+ * IS_BLANK:
+ * @c:  an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ * [3] S ::= (#x20 | #x9 | #xD | #xA)+
+ */
+#define IS_BLANK(c)  xmlIsBlankQ(c)
+
+/**
+ * IS_BLANK_CH:
+ * @c:  an xmlChar value (normally unsigned char)
+ *
+ * Behaviour same as IS_BLANK
+ */
+#define IS_BLANK_CH(c)  xmlIsBlank_ch(c)
+
+/**
+ * IS_BASECHAR:
+ * @c:  an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ * [85] BaseChar ::= ... long list see REC ...
+ */
+#define IS_BASECHAR(c) xmlIsBaseCharQ(c)
+
+/**
+ * IS_DIGIT:
+ * @c:  an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ * [88] Digit ::= ... long list see REC ...
+ */
+#define IS_DIGIT(c) xmlIsDigitQ(c)
+
+/**
+ * IS_DIGIT_CH:
+ * @c:  an xmlChar value (usually an unsigned char)
+ *
+ * Behaves like IS_DIGIT but with a single byte argument
+ */
+#define IS_DIGIT_CH(c)  xmlIsDigit_ch(c)
+
+/**
+ * IS_COMBINING:
+ * @c:  an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ * [87] CombiningChar ::= ... long list see REC ...
+ */
+#define IS_COMBINING(c) xmlIsCombiningQ(c)
+
+/**
+ * IS_COMBINING_CH:
+ * @c:  an xmlChar (usually an unsigned char)
+ *
+ * Always false (all combining chars > 0xff)
+ */
+#define IS_COMBINING_CH(c) 0 
+
+/**
+ * IS_EXTENDER:
+ * @c:  an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ *
+ * [89] Extender ::= #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 |
+ *                   #x0E46 | #x0EC6 | #x3005 | [#x3031-#x3035] |
+ *                   [#x309D-#x309E] | [#x30FC-#x30FE]
+ */
+#define IS_EXTENDER(c) xmlIsExtenderQ(c)
+
+/**
+ * IS_EXTENDER_CH:
+ * @c:  an xmlChar value (usually an unsigned char)
+ *
+ * Behaves like IS_EXTENDER but with a single-byte argument
+ */
+#define IS_EXTENDER_CH(c)  xmlIsExtender_ch(c)
+
+/**
+ * IS_IDEOGRAPHIC:
+ * @c:  an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ *
+ * [86] Ideographic ::= [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]
+ */
+#define IS_IDEOGRAPHIC(c) xmlIsIdeographicQ(c)
+
+/**
+ * IS_LETTER:
+ * @c:  an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ *
+ * [84] Letter ::= BaseChar | Ideographic 
+ */
+#define IS_LETTER(c) (IS_BASECHAR(c) || IS_IDEOGRAPHIC(c))
+
+/**
+ * IS_LETTER_CH:
+ * @c:  an xmlChar value (normally unsigned char)
+ *
+ * Macro behaves like IS_LETTER, but only check base chars
+ *
+ */
+#define IS_LETTER_CH(c) xmlIsBaseChar_ch(c)
+
+/**
+ * IS_ASCII_LETTER:
+ * @c: an xmlChar value
+ *
+ * Macro to check [a-zA-Z]
+ *
+ */
+#define IS_ASCII_LETTER(c)	(((0x41 <= (c)) && ((c) <= 0x5a)) || \
+				 ((0x61 <= (c)) && ((c) <= 0x7a)))
+
+/**
+ * IS_ASCII_DIGIT:
+ * @c: an xmlChar value
+ *
+ * Macro to check [0-9]
+ *
+ */
+#define IS_ASCII_DIGIT(c)	((0x30 <= (c)) && ((c) <= 0x39))
+
+/**
+ * IS_PUBIDCHAR:
+ * @c:  an UNICODE value (int)
+ *
+ * Macro to check the following production in the XML spec:
+ *
+ *
+ * [13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]
+ */
+#define IS_PUBIDCHAR(c)	xmlIsPubidCharQ(c)
+
+/**
+ * IS_PUBIDCHAR_CH:
+ * @c:  an xmlChar value (normally unsigned char)
+ *
+ * Same as IS_PUBIDCHAR but for single-byte value
+ */
+#define IS_PUBIDCHAR_CH(c) xmlIsPubidChar_ch(c)
+
+/**
+ * SKIP_EOL:
+ * @p:  and UTF8 string pointer
+ *
+ * Skips the end of line chars.
+ */
+#define SKIP_EOL(p) 							\
+    if (*(p) == 0x13) { p++ ; if (*(p) == 0x10) p++; }			\
+    if (*(p) == 0x10) { p++ ; if (*(p) == 0x13) p++; }
+
+/**
+ * MOVETO_ENDTAG:
+ * @p:  and UTF8 string pointer
+ *
+ * Skips to the next '>' char.
+ */
+#define MOVETO_ENDTAG(p)						\
+    while ((*p) && (*(p) != '>')) (p)++
+
+/**
+ * MOVETO_STARTTAG:
+ * @p:  and UTF8 string pointer
+ *
+ * Skips to the next '<' char.
+ */
+#define MOVETO_STARTTAG(p)						\
+    while ((*p) && (*(p) != '<')) (p)++
+
+/**
+ * Global variables used for predefined strings.
+ */
+XMLPUBVAR const xmlChar xmlStringText[];
+XMLPUBVAR const xmlChar xmlStringTextNoenc[];
+XMLPUBVAR const xmlChar xmlStringComment[];
+
+/*
+ * Function to finish the work of the macros where needed.
+ */
+XMLPUBFUN int XMLCALL                   xmlIsLetter     (int c);
+
+/**
+ * Parser context.
+ */
+XMLPUBFUN xmlParserCtxtPtr XMLCALL	
+			xmlCreateFileParserCtxt	(const char *filename);
+XMLPUBFUN xmlParserCtxtPtr XMLCALL	
+			xmlCreateURLParserCtxt	(const char *filename,
+						 int options);
+XMLPUBFUN xmlParserCtxtPtr XMLCALL	
+			xmlCreateMemoryParserCtxt(const char *buffer,
+						 int size);
+XMLPUBFUN xmlParserCtxtPtr XMLCALL	
+			xmlCreateEntityParserCtxt(const xmlChar *URL,
+						 const xmlChar *ID,
+						 const xmlChar *base);
+XMLPUBFUN int XMLCALL			
+			xmlSwitchEncoding	(xmlParserCtxtPtr ctxt,
+						 xmlCharEncoding enc);
+XMLPUBFUN int XMLCALL			
+			xmlSwitchToEncoding	(xmlParserCtxtPtr ctxt,
+					 xmlCharEncodingHandlerPtr handler);
+XMLPUBFUN int XMLCALL			
+			xmlSwitchInputEncoding	(xmlParserCtxtPtr ctxt,
+						 xmlParserInputPtr input,
+					 xmlCharEncodingHandlerPtr handler);
+
+#ifdef IN_LIBXML
+/* internal error reporting */
+XMLPUBFUN void XMLCALL
+			__xmlErrEncoding	(xmlParserCtxtPtr ctxt,
+						 xmlParserErrors xmlerr,
+						 const char *msg,
+						 const xmlChar * str1,
+						 const xmlChar * str2);
+#endif
+
+/**
+ * Input Streams.
+ */
+XMLPUBFUN xmlParserInputPtr XMLCALL	
+			xmlNewStringInputStream	(xmlParserCtxtPtr ctxt,
+						 const xmlChar *buffer);
+XMLPUBFUN xmlParserInputPtr XMLCALL	
+			xmlNewEntityInputStream	(xmlParserCtxtPtr ctxt,
+						 xmlEntityPtr entity);
+XMLPUBFUN int XMLCALL			
+			xmlPushInput		(xmlParserCtxtPtr ctxt,
+						 xmlParserInputPtr input);
+XMLPUBFUN xmlChar XMLCALL			
+			xmlPopInput		(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL			
+			xmlFreeInputStream	(xmlParserInputPtr input);
+XMLPUBFUN xmlParserInputPtr XMLCALL	
+			xmlNewInputFromFile	(xmlParserCtxtPtr ctxt,
+						 const char *filename);
+XMLPUBFUN xmlParserInputPtr XMLCALL	
+			xmlNewInputStream	(xmlParserCtxtPtr ctxt);
+
+/**
+ * Namespaces.
+ */
+XMLPUBFUN xmlChar * XMLCALL		
+			xmlSplitQName		(xmlParserCtxtPtr ctxt,
+						 const xmlChar *name,
+						 xmlChar **prefix);
+
+/**
+ * Generic production rules.
+ */
+XMLPUBFUN const xmlChar * XMLCALL		
+			xmlParseName		(xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL		
+			xmlParseNmtoken		(xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL		
+			xmlParseEntityValue	(xmlParserCtxtPtr ctxt,
+						 xmlChar **orig);
+XMLPUBFUN xmlChar * XMLCALL		
+			xmlParseAttValue	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL		
+			xmlParseSystemLiteral	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL		
+			xmlParsePubidLiteral	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL			
+			xmlParseCharData	(xmlParserCtxtPtr ctxt,
+						 int cdata);
+XMLPUBFUN xmlChar * XMLCALL		
+			xmlParseExternalID	(xmlParserCtxtPtr ctxt,
+						 xmlChar **publicID,
+						 int strict);
+XMLPUBFUN void XMLCALL			
+			xmlParseComment		(xmlParserCtxtPtr ctxt);
+XMLPUBFUN const xmlChar * XMLCALL		
+			xmlParsePITarget	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL			
+			xmlParsePI		(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL			
+			xmlParseNotationDecl	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL			
+			xmlParseEntityDecl	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL			
+			xmlParseDefaultDecl	(xmlParserCtxtPtr ctxt,
+						 xmlChar **value);
+XMLPUBFUN xmlEnumerationPtr XMLCALL	
+			xmlParseNotationType	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlEnumerationPtr XMLCALL	
+			xmlParseEnumerationType	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL			
+			xmlParseEnumeratedType	(xmlParserCtxtPtr ctxt,
+						 xmlEnumerationPtr *tree);
+XMLPUBFUN int XMLCALL			
+			xmlParseAttributeType	(xmlParserCtxtPtr ctxt,
+						 xmlEnumerationPtr *tree);
+XMLPUBFUN void XMLCALL			
+			xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlElementContentPtr XMLCALL	
+			xmlParseElementMixedContentDecl
+						(xmlParserCtxtPtr ctxt,
+						 int inputchk);
+XMLPUBFUN xmlElementContentPtr XMLCALL	
+			xmlParseElementChildrenContentDecl
+						(xmlParserCtxtPtr ctxt,
+						 int inputchk);
+XMLPUBFUN int XMLCALL			
+			xmlParseElementContentDecl(xmlParserCtxtPtr ctxt,
+						 const xmlChar *name,
+						 xmlElementContentPtr *result);
+XMLPUBFUN int XMLCALL			
+			xmlParseElementDecl	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL			
+			xmlParseMarkupDecl	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL			
+			xmlParseCharRef		(xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlEntityPtr XMLCALL		
+			xmlParseEntityRef	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL			
+			xmlParseReference	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL			
+			xmlParsePEReference	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL			
+			xmlParseDocTypeDecl	(xmlParserCtxtPtr ctxt);
+#ifdef LIBXML_SAX1_ENABLED
+XMLPUBFUN const xmlChar * XMLCALL		
+			xmlParseAttribute	(xmlParserCtxtPtr ctxt,
+						 xmlChar **value);
+XMLPUBFUN const xmlChar * XMLCALL		
+			xmlParseStartTag	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL			
+			xmlParseEndTag		(xmlParserCtxtPtr ctxt);
+#endif /* LIBXML_SAX1_ENABLED */
+XMLPUBFUN void XMLCALL			
+			xmlParseCDSect		(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL			
+			xmlParseContent		(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL			
+			xmlParseElement		(xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL		
+			xmlParseVersionNum	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL		
+			xmlParseVersionInfo	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL		
+			xmlParseEncName		(xmlParserCtxtPtr ctxt);
+XMLPUBFUN const xmlChar * XMLCALL		
+			xmlParseEncodingDecl	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL			
+			xmlParseSDDecl		(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL			
+			xmlParseXMLDecl		(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL			
+			xmlParseTextDecl	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL			
+			xmlParseMisc		(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL			
+			xmlParseExternalSubset	(xmlParserCtxtPtr ctxt,
+						 const xmlChar *ExternalID,
+						 const xmlChar *SystemID); 
+/**
+ * XML_SUBSTITUTE_NONE:
+ *
+ * If no entities need to be substituted.
+ */
+#define XML_SUBSTITUTE_NONE	0
+/**
+ * XML_SUBSTITUTE_REF:
+ *
+ * Whether general entities need to be substituted.
+ */
+#define XML_SUBSTITUTE_REF	1
+/**
+ * XML_SUBSTITUTE_PEREF:
+ *
+ * Whether parameter entities need to be substituted.
+ */
+#define XML_SUBSTITUTE_PEREF	2
+/**
+ * XML_SUBSTITUTE_BOTH:
+ *
+ * Both general and parameter entities need to be substituted.
+ */
+#define XML_SUBSTITUTE_BOTH 	3
+
+XMLPUBFUN xmlChar * XMLCALL
+		xmlStringDecodeEntities		(xmlParserCtxtPtr ctxt,
+						 const xmlChar *str,
+						 int what,
+						 xmlChar end,
+						 xmlChar  end2,
+						 xmlChar end3);
+XMLPUBFUN xmlChar * XMLCALL
+		xmlStringLenDecodeEntities	(xmlParserCtxtPtr ctxt,
+						 const xmlChar *str,
+						 int len,
+						 int what,
+						 xmlChar end,
+						 xmlChar  end2,
+						 xmlChar end3);
+
+/*
+ * Generated by MACROS on top of parser.c c.f. PUSH_AND_POP.
+ */
+XMLPUBFUN int XMLCALL			nodePush		(xmlParserCtxtPtr ctxt,
+						 xmlNodePtr value);
+XMLPUBFUN xmlNodePtr XMLCALL		nodePop			(xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL			inputPush		(xmlParserCtxtPtr ctxt,
+						 xmlParserInputPtr value);
+XMLPUBFUN xmlParserInputPtr XMLCALL	inputPop		(xmlParserCtxtPtr ctxt);
+XMLPUBFUN const xmlChar * XMLCALL	namePop			(xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL			namePush		(xmlParserCtxtPtr ctxt,
+						 const xmlChar *value);
+
+/*
+ * other commodities shared between parser.c and parserInternals.
+ */
+XMLPUBFUN int XMLCALL			xmlSkipBlankChars	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL			xmlStringCurrentChar	(xmlParserCtxtPtr ctxt,
+						 const xmlChar *cur,
+						 int *len);
+XMLPUBFUN void XMLCALL			xmlParserHandlePEReference(xmlParserCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL			xmlCheckLanguageID	(const xmlChar *lang);
+
+/*
+ * Really core function shared with HTML parser.
+ */
+XMLPUBFUN int XMLCALL			xmlCurrentChar		(xmlParserCtxtPtr ctxt,
+						 int *len);
+XMLPUBFUN int XMLCALL		xmlCopyCharMultiByte	(xmlChar *out,
+						 int val);
+XMLPUBFUN int XMLCALL			xmlCopyChar		(int len,
+						 xmlChar *out,
+						 int val);
+XMLPUBFUN void XMLCALL			xmlNextChar		(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL			xmlParserInputShrink	(xmlParserInputPtr in);
+
+#ifdef LIBXML_HTML_ENABLED
+/*
+ * Actually comes from the HTML parser but launched from the init stuff.
+ */
+XMLPUBFUN void XMLCALL			htmlInitAutoClose	(void);
+XMLPUBFUN htmlParserCtxtPtr XMLCALL	htmlCreateFileParserCtxt(const char *filename,
+	                                         const char *encoding);
+#endif
+
+/*
+ * Specific function to keep track of entities references
+ * and used by the XSLT debugger.
+ */
+#ifdef LIBXML_LEGACY_ENABLED
+/**
+ * xmlEntityReferenceFunc:
+ * @ent: the entity
+ * @firstNode:  the fist node in the chunk
+ * @lastNode:  the last nod in the chunk
+ *
+ * Callback function used when one needs to be able to track back the
+ * provenance of a chunk of nodes inherited from an entity replacement.
+ */
+typedef	void	(*xmlEntityReferenceFunc)	(xmlEntityPtr ent,
+						 xmlNodePtr firstNode,
+						 xmlNodePtr lastNode);
+  
+XMLPUBFUN void XMLCALL		xmlSetEntityReferenceFunc	(xmlEntityReferenceFunc func);
+
+XMLPUBFUN xmlChar * XMLCALL		
+			xmlParseQuotedString	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+                        xmlParseNamespace       (xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL		
+			xmlNamespaceParseNSDef	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL		
+			xmlScanName		(xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL		
+			xmlNamespaceParseNCName	(xmlParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL	xmlParserHandleReference(xmlParserCtxtPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL		
+			xmlNamespaceParseQName	(xmlParserCtxtPtr ctxt,
+						 xmlChar **prefix);
+/**
+ * Entities
+ */
+XMLPUBFUN xmlChar * XMLCALL
+		xmlDecodeEntities		(xmlParserCtxtPtr ctxt,
+						 int len,
+						 int what,
+						 xmlChar end,
+						 xmlChar  end2,
+						 xmlChar end3);
+XMLPUBFUN void XMLCALL			
+			xmlHandleEntity		(xmlParserCtxtPtr ctxt,
+						 xmlEntityPtr entity);
+
+#endif /* LIBXML_LEGACY_ENABLED */
+
+#ifdef IN_LIBXML
+/*
+ * internal only
+ */
+XMLPUBFUN void XMLCALL
+	xmlErrMemory		(xmlParserCtxtPtr ctxt,
+				 const char *extra);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_PARSER_INTERNALS_H__ */
diff --git a/interfaces/ext/libxml/pattern.h b/interfaces/ext/libxml/pattern.h
new file mode 100644
index 0000000..97d2cd2
--- /dev/null
+++ b/interfaces/ext/libxml/pattern.h
@@ -0,0 +1,100 @@
+/*
+ * Summary: pattern expression handling
+ * Description: allows to compile and test pattern expressions for nodes
+ *              either in a tree or based on a parser state.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_PATTERN_H__
+#define __XML_PATTERN_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/dict.h>
+
+#ifdef LIBXML_PATTERN_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlPattern:
+ *
+ * A compiled (XPath based) pattern to select nodes
+ */
+typedef struct _xmlPattern xmlPattern;
+typedef xmlPattern *xmlPatternPtr;
+
+/**
+ * xmlPatternFlags:
+ *
+ * This is the set of options affecting the behaviour of pattern
+ * matching with this module
+ *
+ */
+typedef enum {
+    XML_PATTERN_DEFAULT		= 0,	/* simple pattern match */
+    XML_PATTERN_XPATH		= 1<<0,	/* standard XPath pattern */
+    XML_PATTERN_XSSEL		= 1<<1,	/* XPath subset for schema selector */
+    XML_PATTERN_XSFIELD		= 1<<2	/* XPath subset for schema field */
+} xmlPatternFlags;
+
+XMLPUBFUN void XMLCALL
+			xmlFreePattern		(xmlPatternPtr comp);
+
+XMLPUBFUN void XMLCALL
+			xmlFreePatternList	(xmlPatternPtr comp);
+
+XMLPUBFUN xmlPatternPtr XMLCALL
+			xmlPatterncompile	(const xmlChar *pattern,
+						 xmlDict *dict,
+						 int flags,
+						 const xmlChar **namespaces);
+XMLPUBFUN int XMLCALL
+			xmlPatternMatch		(xmlPatternPtr comp,
+						 xmlNodePtr node);
+
+/* streaming interfaces */
+typedef struct _xmlStreamCtxt xmlStreamCtxt;
+typedef xmlStreamCtxt *xmlStreamCtxtPtr;
+
+XMLPUBFUN int XMLCALL
+			xmlPatternStreamable	(xmlPatternPtr comp);
+XMLPUBFUN int XMLCALL
+			xmlPatternMaxDepth	(xmlPatternPtr comp);
+XMLPUBFUN int XMLCALL
+			xmlPatternMinDepth	(xmlPatternPtr comp);
+XMLPUBFUN int XMLCALL
+			xmlPatternFromRoot	(xmlPatternPtr comp);
+XMLPUBFUN xmlStreamCtxtPtr XMLCALL
+			xmlPatternGetStreamCtxt	(xmlPatternPtr comp);
+XMLPUBFUN void XMLCALL
+			xmlFreeStreamCtxt	(xmlStreamCtxtPtr stream);
+XMLPUBFUN int XMLCALL
+			xmlStreamPushNode	(xmlStreamCtxtPtr stream,
+						 const xmlChar *name,
+						 const xmlChar *ns,
+						 int nodeType);
+XMLPUBFUN int XMLCALL
+			xmlStreamPush		(xmlStreamCtxtPtr stream,
+						 const xmlChar *name,
+						 const xmlChar *ns);
+XMLPUBFUN int XMLCALL
+			xmlStreamPushAttr	(xmlStreamCtxtPtr stream,
+						 const xmlChar *name,
+						 const xmlChar *ns);
+XMLPUBFUN int XMLCALL
+			xmlStreamPop		(xmlStreamCtxtPtr stream);
+XMLPUBFUN int XMLCALL
+			xmlStreamWantsAnyNode	(xmlStreamCtxtPtr stream);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_PATTERN_ENABLED */
+
+#endif /* __XML_PATTERN_H__ */
diff --git a/interfaces/ext/libxml/relaxng.h b/interfaces/ext/libxml/relaxng.h
new file mode 100644
index 0000000..d3e39e0
--- /dev/null
+++ b/interfaces/ext/libxml/relaxng.h
@@ -0,0 +1,213 @@
+/*
+ * Summary: implementation of the Relax-NG validation
+ * Description: implementation of the Relax-NG validation
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_RELAX_NG__
+#define __XML_RELAX_NG__
+
+#include <libxml/xmlversion.h>
+#include <libxml/hash.h>
+#include <libxml/xmlstring.h>
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _xmlRelaxNG xmlRelaxNG;
+typedef xmlRelaxNG *xmlRelaxNGPtr;
+
+
+/**
+ * xmlRelaxNGValidityErrorFunc:
+ * @ctx: the validation context
+ * @msg: the message
+ * @...: extra arguments
+ *
+ * Signature of an error callback from a Relax-NG validation
+ */
+typedef void (XMLCDECL *xmlRelaxNGValidityErrorFunc) (void *ctx, const char *msg, ...) ATTRIBUTE_PRINTF(2,3);
+
+/**
+ * xmlRelaxNGValidityWarningFunc:
+ * @ctx: the validation context
+ * @msg: the message
+ * @...: extra arguments
+ *
+ * Signature of a warning callback from a Relax-NG validation
+ */
+typedef void (XMLCDECL *xmlRelaxNGValidityWarningFunc) (void *ctx, const char *msg, ...) ATTRIBUTE_PRINTF(2,3);
+
+/**
+ * A schemas validation context
+ */
+typedef struct _xmlRelaxNGParserCtxt xmlRelaxNGParserCtxt;
+typedef xmlRelaxNGParserCtxt *xmlRelaxNGParserCtxtPtr;
+
+typedef struct _xmlRelaxNGValidCtxt xmlRelaxNGValidCtxt;
+typedef xmlRelaxNGValidCtxt *xmlRelaxNGValidCtxtPtr;
+
+/*
+ * xmlRelaxNGValidErr:
+ *
+ * List of possible Relax NG validation errors
+ */
+typedef enum {
+    XML_RELAXNG_OK = 0,
+    XML_RELAXNG_ERR_MEMORY,
+    XML_RELAXNG_ERR_TYPE,
+    XML_RELAXNG_ERR_TYPEVAL,
+    XML_RELAXNG_ERR_DUPID,
+    XML_RELAXNG_ERR_TYPECMP,
+    XML_RELAXNG_ERR_NOSTATE,
+    XML_RELAXNG_ERR_NODEFINE,
+    XML_RELAXNG_ERR_LISTEXTRA,
+    XML_RELAXNG_ERR_LISTEMPTY,
+    XML_RELAXNG_ERR_INTERNODATA,
+    XML_RELAXNG_ERR_INTERSEQ,
+    XML_RELAXNG_ERR_INTEREXTRA,
+    XML_RELAXNG_ERR_ELEMNAME,
+    XML_RELAXNG_ERR_ATTRNAME,
+    XML_RELAXNG_ERR_ELEMNONS,
+    XML_RELAXNG_ERR_ATTRNONS,
+    XML_RELAXNG_ERR_ELEMWRONGNS,
+    XML_RELAXNG_ERR_ATTRWRONGNS,
+    XML_RELAXNG_ERR_ELEMEXTRANS,
+    XML_RELAXNG_ERR_ATTREXTRANS,
+    XML_RELAXNG_ERR_ELEMNOTEMPTY,
+    XML_RELAXNG_ERR_NOELEM,
+    XML_RELAXNG_ERR_NOTELEM,
+    XML_RELAXNG_ERR_ATTRVALID,
+    XML_RELAXNG_ERR_CONTENTVALID,
+    XML_RELAXNG_ERR_EXTRACONTENT,
+    XML_RELAXNG_ERR_INVALIDATTR,
+    XML_RELAXNG_ERR_DATAELEM,
+    XML_RELAXNG_ERR_VALELEM,
+    XML_RELAXNG_ERR_LISTELEM,
+    XML_RELAXNG_ERR_DATATYPE,
+    XML_RELAXNG_ERR_VALUE,
+    XML_RELAXNG_ERR_LIST,
+    XML_RELAXNG_ERR_NOGRAMMAR,
+    XML_RELAXNG_ERR_EXTRADATA,
+    XML_RELAXNG_ERR_LACKDATA,
+    XML_RELAXNG_ERR_INTERNAL,
+    XML_RELAXNG_ERR_ELEMWRONG,
+    XML_RELAXNG_ERR_TEXTWRONG
+} xmlRelaxNGValidErr;
+
+/*
+ * xmlRelaxNGParserFlags:
+ *
+ * List of possible Relax NG Parser flags
+ */
+typedef enum {
+    XML_RELAXNGP_NONE = 0,
+    XML_RELAXNGP_FREE_DOC = 1,
+    XML_RELAXNGP_CRNG = 2
+} xmlRelaxNGParserFlag;
+
+XMLPUBFUN int XMLCALL
+		    xmlRelaxNGInitTypes		(void);
+XMLPUBFUN void XMLCALL
+		    xmlRelaxNGCleanupTypes	(void);
+
+/*
+ * Interfaces for parsing.
+ */
+XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
+		    xmlRelaxNGNewParserCtxt	(const char *URL);
+XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
+		    xmlRelaxNGNewMemParserCtxt	(const char *buffer,
+						 int size);
+XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
+		    xmlRelaxNGNewDocParserCtxt	(xmlDocPtr doc);
+
+XMLPUBFUN int XMLCALL
+		    xmlRelaxParserSetFlag	(xmlRelaxNGParserCtxtPtr ctxt,
+						 int flag);
+
+XMLPUBFUN void XMLCALL
+		    xmlRelaxNGFreeParserCtxt	(xmlRelaxNGParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+		    xmlRelaxNGSetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
+					 xmlRelaxNGValidityErrorFunc err,
+					 xmlRelaxNGValidityWarningFunc warn,
+					 void *ctx);
+XMLPUBFUN int XMLCALL
+		    xmlRelaxNGGetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
+					 xmlRelaxNGValidityErrorFunc *err,
+					 xmlRelaxNGValidityWarningFunc *warn,
+					 void **ctx);
+XMLPUBFUN void XMLCALL
+		    xmlRelaxNGSetParserStructuredErrors(
+					 xmlRelaxNGParserCtxtPtr ctxt,
+					 xmlStructuredErrorFunc serror,
+					 void *ctx);
+XMLPUBFUN xmlRelaxNGPtr XMLCALL
+		    xmlRelaxNGParse		(xmlRelaxNGParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+		    xmlRelaxNGFree		(xmlRelaxNGPtr schema);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+		    xmlRelaxNGDump		(FILE *output,
+					 xmlRelaxNGPtr schema);
+XMLPUBFUN void XMLCALL
+		    xmlRelaxNGDumpTree	(FILE * output,
+					 xmlRelaxNGPtr schema);
+#endif /* LIBXML_OUTPUT_ENABLED */
+/*
+ * Interfaces for validating
+ */
+XMLPUBFUN void XMLCALL
+		    xmlRelaxNGSetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
+					 xmlRelaxNGValidityErrorFunc err,
+					 xmlRelaxNGValidityWarningFunc warn,
+					 void *ctx);
+XMLPUBFUN int XMLCALL
+		    xmlRelaxNGGetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
+					 xmlRelaxNGValidityErrorFunc *err,
+					 xmlRelaxNGValidityWarningFunc *warn,
+					 void **ctx);
+XMLPUBFUN void XMLCALL
+			xmlRelaxNGSetValidStructuredErrors(xmlRelaxNGValidCtxtPtr ctxt,
+					  xmlStructuredErrorFunc serror, void *ctx);
+XMLPUBFUN xmlRelaxNGValidCtxtPtr XMLCALL
+		    xmlRelaxNGNewValidCtxt	(xmlRelaxNGPtr schema);
+XMLPUBFUN void XMLCALL
+		    xmlRelaxNGFreeValidCtxt	(xmlRelaxNGValidCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+		    xmlRelaxNGValidateDoc	(xmlRelaxNGValidCtxtPtr ctxt,
+						 xmlDocPtr doc);
+/*
+ * Interfaces for progressive validation when possible
+ */
+XMLPUBFUN int XMLCALL
+		    xmlRelaxNGValidatePushElement	(xmlRelaxNGValidCtxtPtr ctxt,
+					 xmlDocPtr doc,
+					 xmlNodePtr elem);
+XMLPUBFUN int XMLCALL
+		    xmlRelaxNGValidatePushCData	(xmlRelaxNGValidCtxtPtr ctxt,
+					 const xmlChar *data,
+					 int len);
+XMLPUBFUN int XMLCALL
+		    xmlRelaxNGValidatePopElement	(xmlRelaxNGValidCtxtPtr ctxt,
+					 xmlDocPtr doc,
+					 xmlNodePtr elem);
+XMLPUBFUN int XMLCALL
+		    xmlRelaxNGValidateFullElement	(xmlRelaxNGValidCtxtPtr ctxt,
+					 xmlDocPtr doc,
+					 xmlNodePtr elem);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+
+#endif /* __XML_RELAX_NG__ */
diff --git a/interfaces/ext/libxml/schemasInternals.h b/interfaces/ext/libxml/schemasInternals.h
new file mode 100644
index 0000000..b68a6e1
--- /dev/null
+++ b/interfaces/ext/libxml/schemasInternals.h
@@ -0,0 +1,958 @@
+/*
+ * Summary: internal interfaces for XML Schemas
+ * Description: internal interfaces for the XML Schemas handling
+ *              and schema validity checking
+ *		The Schemas development is a Work In Progress.
+ *              Some of those interfaces are not garanteed to be API or ABI stable !
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_SCHEMA_INTERNALS_H__
+#define __XML_SCHEMA_INTERNALS_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+
+#include <libxml/xmlregexp.h>
+#include <libxml/hash.h>
+#include <libxml/dict.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+    XML_SCHEMAS_UNKNOWN = 0,
+    XML_SCHEMAS_STRING,
+    XML_SCHEMAS_NORMSTRING,
+    XML_SCHEMAS_DECIMAL,
+    XML_SCHEMAS_TIME,
+    XML_SCHEMAS_GDAY,
+    XML_SCHEMAS_GMONTH,
+    XML_SCHEMAS_GMONTHDAY,
+    XML_SCHEMAS_GYEAR,
+    XML_SCHEMAS_GYEARMONTH,
+    XML_SCHEMAS_DATE,
+    XML_SCHEMAS_DATETIME,
+    XML_SCHEMAS_DURATION,
+    XML_SCHEMAS_FLOAT,
+    XML_SCHEMAS_DOUBLE,
+    XML_SCHEMAS_BOOLEAN,
+    XML_SCHEMAS_TOKEN,
+    XML_SCHEMAS_LANGUAGE,
+    XML_SCHEMAS_NMTOKEN,
+    XML_SCHEMAS_NMTOKENS,
+    XML_SCHEMAS_NAME,
+    XML_SCHEMAS_QNAME,
+    XML_SCHEMAS_NCNAME,
+    XML_SCHEMAS_ID,
+    XML_SCHEMAS_IDREF,
+    XML_SCHEMAS_IDREFS,
+    XML_SCHEMAS_ENTITY,
+    XML_SCHEMAS_ENTITIES,
+    XML_SCHEMAS_NOTATION,
+    XML_SCHEMAS_ANYURI,
+    XML_SCHEMAS_INTEGER,
+    XML_SCHEMAS_NPINTEGER,
+    XML_SCHEMAS_NINTEGER,
+    XML_SCHEMAS_NNINTEGER,
+    XML_SCHEMAS_PINTEGER,
+    XML_SCHEMAS_INT,
+    XML_SCHEMAS_UINT,
+    XML_SCHEMAS_LONG,
+    XML_SCHEMAS_ULONG,
+    XML_SCHEMAS_SHORT,
+    XML_SCHEMAS_USHORT,
+    XML_SCHEMAS_BYTE,
+    XML_SCHEMAS_UBYTE,
+    XML_SCHEMAS_HEXBINARY,
+    XML_SCHEMAS_BASE64BINARY,
+    XML_SCHEMAS_ANYTYPE,
+    XML_SCHEMAS_ANYSIMPLETYPE
+} xmlSchemaValType;
+
+/*
+ * XML Schemas defines multiple type of types.
+ */
+typedef enum {
+    XML_SCHEMA_TYPE_BASIC = 1, /* A built-in datatype */
+    XML_SCHEMA_TYPE_ANY,
+    XML_SCHEMA_TYPE_FACET,
+    XML_SCHEMA_TYPE_SIMPLE,
+    XML_SCHEMA_TYPE_COMPLEX,
+    XML_SCHEMA_TYPE_SEQUENCE = 6,
+    XML_SCHEMA_TYPE_CHOICE,
+    XML_SCHEMA_TYPE_ALL,
+    XML_SCHEMA_TYPE_SIMPLE_CONTENT,
+    XML_SCHEMA_TYPE_COMPLEX_CONTENT,
+    XML_SCHEMA_TYPE_UR,
+    XML_SCHEMA_TYPE_RESTRICTION,
+    XML_SCHEMA_TYPE_EXTENSION,
+    XML_SCHEMA_TYPE_ELEMENT,
+    XML_SCHEMA_TYPE_ATTRIBUTE,
+    XML_SCHEMA_TYPE_ATTRIBUTEGROUP,
+    XML_SCHEMA_TYPE_GROUP,
+    XML_SCHEMA_TYPE_NOTATION,
+    XML_SCHEMA_TYPE_LIST,
+    XML_SCHEMA_TYPE_UNION,
+    XML_SCHEMA_TYPE_ANY_ATTRIBUTE,
+    XML_SCHEMA_TYPE_IDC_UNIQUE,
+    XML_SCHEMA_TYPE_IDC_KEY,
+    XML_SCHEMA_TYPE_IDC_KEYREF,
+    XML_SCHEMA_TYPE_PARTICLE = 25, 
+    XML_SCHEMA_TYPE_ATTRIBUTE_USE, 
+    XML_SCHEMA_FACET_MININCLUSIVE = 1000,
+    XML_SCHEMA_FACET_MINEXCLUSIVE,
+    XML_SCHEMA_FACET_MAXINCLUSIVE,
+    XML_SCHEMA_FACET_MAXEXCLUSIVE,
+    XML_SCHEMA_FACET_TOTALDIGITS,
+    XML_SCHEMA_FACET_FRACTIONDIGITS,
+    XML_SCHEMA_FACET_PATTERN,
+    XML_SCHEMA_FACET_ENUMERATION,
+    XML_SCHEMA_FACET_WHITESPACE,
+    XML_SCHEMA_FACET_LENGTH,
+    XML_SCHEMA_FACET_MAXLENGTH,
+    XML_SCHEMA_FACET_MINLENGTH,
+    XML_SCHEMA_EXTRA_QNAMEREF = 2000,
+    XML_SCHEMA_EXTRA_ATTR_USE_PROHIB
+} xmlSchemaTypeType;
+
+typedef enum {
+    XML_SCHEMA_CONTENT_UNKNOWN = 0,
+    XML_SCHEMA_CONTENT_EMPTY = 1,
+    XML_SCHEMA_CONTENT_ELEMENTS,
+    XML_SCHEMA_CONTENT_MIXED,
+    XML_SCHEMA_CONTENT_SIMPLE,
+    XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS, /* Obsolete */
+    XML_SCHEMA_CONTENT_BASIC,
+    XML_SCHEMA_CONTENT_ANY
+} xmlSchemaContentType;
+
+typedef struct _xmlSchemaVal xmlSchemaVal;
+typedef xmlSchemaVal *xmlSchemaValPtr;
+
+typedef struct _xmlSchemaType xmlSchemaType;
+typedef xmlSchemaType *xmlSchemaTypePtr;
+
+typedef struct _xmlSchemaFacet xmlSchemaFacet;
+typedef xmlSchemaFacet *xmlSchemaFacetPtr;
+
+/**
+ * Annotation
+ */
+typedef struct _xmlSchemaAnnot xmlSchemaAnnot;
+typedef xmlSchemaAnnot *xmlSchemaAnnotPtr;
+struct _xmlSchemaAnnot {
+    struct _xmlSchemaAnnot *next;
+    xmlNodePtr content;         /* the annotation */
+};
+
+/**
+ * XML_SCHEMAS_ANYATTR_SKIP:
+ *
+ * Skip unknown attribute from validation
+ * Obsolete, not used anymore.
+ */
+#define XML_SCHEMAS_ANYATTR_SKIP        1
+/**
+ * XML_SCHEMAS_ANYATTR_LAX:
+ *
+ * Ignore validation non definition on attributes
+ * Obsolete, not used anymore.
+ */
+#define XML_SCHEMAS_ANYATTR_LAX                2
+/**
+ * XML_SCHEMAS_ANYATTR_STRICT:
+ *
+ * Apply strict validation rules on attributes
+ * Obsolete, not used anymore.
+ */
+#define XML_SCHEMAS_ANYATTR_STRICT        3
+/**
+ * XML_SCHEMAS_ANY_SKIP:
+ *
+ * Skip unknown attribute from validation
+ */
+#define XML_SCHEMAS_ANY_SKIP        1
+/**
+ * XML_SCHEMAS_ANY_LAX:
+ *
+ * Used by wildcards.
+ * Validate if type found, don't worry if not found
+ */
+#define XML_SCHEMAS_ANY_LAX                2
+/**
+ * XML_SCHEMAS_ANY_STRICT:
+ *
+ * Used by wildcards.
+ * Apply strict validation rules
+ */
+#define XML_SCHEMAS_ANY_STRICT        3
+/**
+ * XML_SCHEMAS_ATTR_USE_PROHIBITED:
+ *
+ * Used by wildcards.
+ * The attribute is prohibited.
+ */
+#define XML_SCHEMAS_ATTR_USE_PROHIBITED 0
+/**
+ * XML_SCHEMAS_ATTR_USE_REQUIRED:
+ *
+ * The attribute is required.
+ */
+#define XML_SCHEMAS_ATTR_USE_REQUIRED 1
+/**
+ * XML_SCHEMAS_ATTR_USE_OPTIONAL:
+ *
+ * The attribute is optional.
+ */
+#define XML_SCHEMAS_ATTR_USE_OPTIONAL 2
+/**
+ * XML_SCHEMAS_ATTR_GLOBAL:
+ *
+ * allow elements in no namespace
+ */
+#define XML_SCHEMAS_ATTR_GLOBAL        1 << 0
+/**
+ * XML_SCHEMAS_ATTR_NSDEFAULT:
+ *
+ * allow elements in no namespace
+ */
+#define XML_SCHEMAS_ATTR_NSDEFAULT        1 << 7
+/**
+ * XML_SCHEMAS_ATTR_INTERNAL_RESOLVED:
+ *
+ * this is set when the "type" and "ref" references
+ * have been resolved.
+ */
+#define XML_SCHEMAS_ATTR_INTERNAL_RESOLVED        1 << 8
+/**
+ * XML_SCHEMAS_ATTR_FIXED:
+ *
+ * the attribute has a fixed value
+ */
+#define XML_SCHEMAS_ATTR_FIXED        1 << 9
+
+/**
+ * xmlSchemaAttribute:
+ * An attribute definition.
+ */
+
+typedef struct _xmlSchemaAttribute xmlSchemaAttribute;
+typedef xmlSchemaAttribute *xmlSchemaAttributePtr;
+struct _xmlSchemaAttribute {
+    xmlSchemaTypeType type;
+    struct _xmlSchemaAttribute *next; /* the next attribute (not used?) */
+    const xmlChar *name; /* the name of the declaration */
+    const xmlChar *id; /* Deprecated; not used */
+    const xmlChar *ref; /* Deprecated; not used */
+    const xmlChar *refNs; /* Deprecated; not used */
+    const xmlChar *typeName; /* the local name of the type definition */
+    const xmlChar *typeNs; /* the ns URI of the type definition */
+    xmlSchemaAnnotPtr annot;
+
+    xmlSchemaTypePtr base; /* Deprecated; not used */
+    int occurs; /* Deprecated; not used */
+    const xmlChar *defValue; /* The initial value of the value constraint */
+    xmlSchemaTypePtr subtypes; /* the type definition */
+    xmlNodePtr node;
+    const xmlChar *targetNamespace;
+    int flags;
+    const xmlChar *refPrefix; /* Deprecated; not used */
+    xmlSchemaValPtr defVal; /* The compiled value constraint */
+    xmlSchemaAttributePtr refDecl; /* Deprecated; not used */
+};
+
+/**
+ * xmlSchemaAttributeLink:
+ * Used to build a list of attribute uses on complexType definitions.
+ * WARNING: Deprecated; not used.
+ */
+typedef struct _xmlSchemaAttributeLink xmlSchemaAttributeLink;
+typedef xmlSchemaAttributeLink *xmlSchemaAttributeLinkPtr;
+struct _xmlSchemaAttributeLink {
+    struct _xmlSchemaAttributeLink *next;/* the next attribute link ... */
+    struct _xmlSchemaAttribute *attr;/* the linked attribute */
+};
+
+/**
+ * XML_SCHEMAS_WILDCARD_COMPLETE:
+ *
+ * If the wildcard is complete.
+ */
+#define XML_SCHEMAS_WILDCARD_COMPLETE 1 << 0
+
+/**
+ * xmlSchemaCharValueLink:
+ * Used to build a list of namespaces on wildcards.
+ */
+typedef struct _xmlSchemaWildcardNs xmlSchemaWildcardNs;
+typedef xmlSchemaWildcardNs *xmlSchemaWildcardNsPtr;
+struct _xmlSchemaWildcardNs {
+    struct _xmlSchemaWildcardNs *next;/* the next constraint link ... */
+    const xmlChar *value;/* the value */
+};
+
+/**
+ * xmlSchemaWildcard.
+ * A wildcard.
+ */
+typedef struct _xmlSchemaWildcard xmlSchemaWildcard;
+typedef xmlSchemaWildcard *xmlSchemaWildcardPtr;
+struct _xmlSchemaWildcard {
+    xmlSchemaTypeType type;        /* The kind of type */
+    const xmlChar *id; /* Deprecated; not used */
+    xmlSchemaAnnotPtr annot;
+    xmlNodePtr node;
+    int minOccurs; /* Deprecated; not used */
+    int maxOccurs; /* Deprecated; not used */
+    int processContents;
+    int any; /* Indicates if the ns constraint is of ##any */
+    xmlSchemaWildcardNsPtr nsSet; /* The list of allowed namespaces */
+    xmlSchemaWildcardNsPtr negNsSet; /* The negated namespace */
+    int flags;
+};
+
+/**
+ * XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED:
+ *
+ * The attribute wildcard has been already builded.
+ */
+#define XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED 1 << 0
+/**
+ * XML_SCHEMAS_ATTRGROUP_GLOBAL:
+ *
+ * The attribute wildcard has been already builded.
+ */
+#define XML_SCHEMAS_ATTRGROUP_GLOBAL 1 << 1
+/**
+ * XML_SCHEMAS_ATTRGROUP_MARKED:
+ *
+ * Marks the attr group as marked; used for circular checks.
+ */
+#define XML_SCHEMAS_ATTRGROUP_MARKED 1 << 2
+
+/**
+ * XML_SCHEMAS_ATTRGROUP_REDEFINED:
+ *
+ * The attr group was redefined.
+ */
+#define XML_SCHEMAS_ATTRGROUP_REDEFINED 1 << 3
+/**
+ * XML_SCHEMAS_ATTRGROUP_HAS_REFS:
+ *
+ * Whether this attr. group contains attr. group references.
+ */
+#define XML_SCHEMAS_ATTRGROUP_HAS_REFS 1 << 4
+
+/**
+ * An attribute group definition.
+ *
+ * xmlSchemaAttribute and xmlSchemaAttributeGroup start of structures
+ * must be kept similar
+ */
+typedef struct _xmlSchemaAttributeGroup xmlSchemaAttributeGroup;
+typedef xmlSchemaAttributeGroup *xmlSchemaAttributeGroupPtr;
+struct _xmlSchemaAttributeGroup {
+    xmlSchemaTypeType type;        /* The kind of type */
+    struct _xmlSchemaAttribute *next;/* the next attribute if in a group ... */
+    const xmlChar *name;
+    const xmlChar *id;
+    const xmlChar *ref; /* Deprecated; not used */
+    const xmlChar *refNs; /* Deprecated; not used */
+    xmlSchemaAnnotPtr annot;
+
+    xmlSchemaAttributePtr attributes; /* Deprecated; not used */
+    xmlNodePtr node;
+    int flags;
+    xmlSchemaWildcardPtr attributeWildcard;
+    const xmlChar *refPrefix; /* Deprecated; not used */
+    xmlSchemaAttributeGroupPtr refItem; /* Deprecated; not used */
+    const xmlChar *targetNamespace;
+    void *attrUses;
+};
+
+/**
+ * xmlSchemaTypeLink:
+ * Used to build a list of types (e.g. member types of
+ * simpleType with variety "union").
+ */
+typedef struct _xmlSchemaTypeLink xmlSchemaTypeLink;
+typedef xmlSchemaTypeLink *xmlSchemaTypeLinkPtr;
+struct _xmlSchemaTypeLink {
+    struct _xmlSchemaTypeLink *next;/* the next type link ... */
+    xmlSchemaTypePtr type;/* the linked type */
+};
+
+/**
+ * xmlSchemaFacetLink:
+ * Used to build a list of facets.
+ */
+typedef struct _xmlSchemaFacetLink xmlSchemaFacetLink;
+typedef xmlSchemaFacetLink *xmlSchemaFacetLinkPtr;
+struct _xmlSchemaFacetLink {
+    struct _xmlSchemaFacetLink *next;/* the next facet link ... */
+    xmlSchemaFacetPtr facet;/* the linked facet */
+};
+
+/**
+ * XML_SCHEMAS_TYPE_MIXED:
+ *
+ * the element content type is mixed
+ */
+#define XML_SCHEMAS_TYPE_MIXED                1 << 0
+/**
+ * XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION:
+ *
+ * the simple or complex type has a derivation method of "extension".
+ */
+#define XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION                1 << 1
+/**
+ * XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION:
+ *
+ * the simple or complex type has a derivation method of "restriction".
+ */
+#define XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION                1 << 2
+/**
+ * XML_SCHEMAS_TYPE_GLOBAL:
+ *
+ * the type is global
+ */
+#define XML_SCHEMAS_TYPE_GLOBAL                1 << 3
+/**
+ * XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD:
+ *
+ * the complexType owns an attribute wildcard, i.e.
+ * it can be freed by the complexType
+ */
+#define XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD    1 << 4 /* Obsolete. */
+/**
+ * XML_SCHEMAS_TYPE_VARIETY_ABSENT:
+ *
+ * the simpleType has a variety of "absent".
+ * TODO: Actually not necessary :-/, since if
+ * none of the variety flags occur then it's
+ * automatically absent.
+ */
+#define XML_SCHEMAS_TYPE_VARIETY_ABSENT    1 << 5
+/**
+ * XML_SCHEMAS_TYPE_VARIETY_LIST:
+ *
+ * the simpleType has a variety of "list".
+ */
+#define XML_SCHEMAS_TYPE_VARIETY_LIST    1 << 6
+/**
+ * XML_SCHEMAS_TYPE_VARIETY_UNION:
+ *
+ * the simpleType has a variety of "union".
+ */
+#define XML_SCHEMAS_TYPE_VARIETY_UNION    1 << 7
+/**
+ * XML_SCHEMAS_TYPE_VARIETY_ATOMIC:
+ *
+ * the simpleType has a variety of "union".
+ */
+#define XML_SCHEMAS_TYPE_VARIETY_ATOMIC    1 << 8
+/**
+ * XML_SCHEMAS_TYPE_FINAL_EXTENSION:
+ *
+ * the complexType has a final of "extension".
+ */
+#define XML_SCHEMAS_TYPE_FINAL_EXTENSION    1 << 9
+/**
+ * XML_SCHEMAS_TYPE_FINAL_RESTRICTION:
+ *
+ * the simpleType/complexType has a final of "restriction".
+ */
+#define XML_SCHEMAS_TYPE_FINAL_RESTRICTION    1 << 10
+/**
+ * XML_SCHEMAS_TYPE_FINAL_LIST:
+ *
+ * the simpleType has a final of "list".
+ */
+#define XML_SCHEMAS_TYPE_FINAL_LIST    1 << 11
+/**
+ * XML_SCHEMAS_TYPE_FINAL_UNION:
+ *
+ * the simpleType has a final of "union".
+ */
+#define XML_SCHEMAS_TYPE_FINAL_UNION    1 << 12
+/**
+ * XML_SCHEMAS_TYPE_FINAL_DEFAULT:
+ *
+ * the simpleType has a final of "default".
+ */
+#define XML_SCHEMAS_TYPE_FINAL_DEFAULT    1 << 13
+/**
+ * XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE:
+ *
+ * Marks the item as a builtin primitive.
+ */
+#define XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE    1 << 14
+/**
+ * XML_SCHEMAS_TYPE_MARKED:
+ *
+ * Marks the item as marked; used for circular checks.
+ */
+#define XML_SCHEMAS_TYPE_MARKED        1 << 16
+/**
+ * XML_SCHEMAS_TYPE_BLOCK_DEFAULT:
+ *
+ * the complexType did not specify 'block' so use the default of the
+ * <schema> item.
+ */
+#define XML_SCHEMAS_TYPE_BLOCK_DEFAULT    1 << 17
+/**
+ * XML_SCHEMAS_TYPE_BLOCK_EXTENSION:
+ *
+ * the complexType has a 'block' of "extension".
+ */
+#define XML_SCHEMAS_TYPE_BLOCK_EXTENSION    1 << 18
+/**
+ * XML_SCHEMAS_TYPE_BLOCK_RESTRICTION:
+ *
+ * the complexType has a 'block' of "restriction".
+ */
+#define XML_SCHEMAS_TYPE_BLOCK_RESTRICTION    1 << 19
+/**
+ * XML_SCHEMAS_TYPE_ABSTRACT:
+ *
+ * the simple/complexType is abstract.
+ */
+#define XML_SCHEMAS_TYPE_ABSTRACT    1 << 20
+/**
+ * XML_SCHEMAS_TYPE_FACETSNEEDVALUE:
+ *
+ * indicates if the facets need a computed value
+ */
+#define XML_SCHEMAS_TYPE_FACETSNEEDVALUE    1 << 21
+/**
+ * XML_SCHEMAS_TYPE_INTERNAL_RESOLVED:
+ *
+ * indicates that the type was typefixed
+ */
+#define XML_SCHEMAS_TYPE_INTERNAL_RESOLVED    1 << 22
+/**
+ * XML_SCHEMAS_TYPE_INTERNAL_INVALID:
+ *
+ * indicates that the type is invalid
+ */
+#define XML_SCHEMAS_TYPE_INTERNAL_INVALID    1 << 23
+/**
+ * XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE:
+ *
+ * a whitespace-facet value of "preserve"
+ */
+#define XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE    1 << 24
+/**
+ * XML_SCHEMAS_TYPE_WHITESPACE_REPLACE:
+ *
+ * a whitespace-facet value of "replace"
+ */
+#define XML_SCHEMAS_TYPE_WHITESPACE_REPLACE    1 << 25
+/**
+ * XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE:
+ *
+ * a whitespace-facet value of "collapse"
+ */
+#define XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE    1 << 26
+/**
+ * XML_SCHEMAS_TYPE_HAS_FACETS:
+ *
+ * has facets
+ */
+#define XML_SCHEMAS_TYPE_HAS_FACETS    1 << 27
+/**
+ * XML_SCHEMAS_TYPE_NORMVALUENEEDED:
+ *
+ * indicates if the facets (pattern) need a normalized value
+ */
+#define XML_SCHEMAS_TYPE_NORMVALUENEEDED    1 << 28
+
+/**
+ * XML_SCHEMAS_TYPE_FIXUP_1:
+ *
+ * First stage of fixup was done.
+ */
+#define XML_SCHEMAS_TYPE_FIXUP_1    1 << 29
+
+/**
+ * XML_SCHEMAS_TYPE_REDEFINED:
+ *
+ * The type was redefined.
+ */
+#define XML_SCHEMAS_TYPE_REDEFINED    1 << 30
+/**
+ * XML_SCHEMAS_TYPE_REDEFINING:
+ *
+ * The type redefines an other type.
+ */
+/* #define XML_SCHEMAS_TYPE_REDEFINING    1 << 31 */
+
+/**
+ * _xmlSchemaType:
+ *
+ * Schemas type definition.
+ */
+struct _xmlSchemaType {
+    xmlSchemaTypeType type; /* The kind of type */
+    struct _xmlSchemaType *next; /* the next type if in a sequence ... */
+    const xmlChar *name;
+    const xmlChar *id ; /* Deprecated; not used */
+    const xmlChar *ref; /* Deprecated; not used */
+    const xmlChar *refNs; /* Deprecated; not used */
+    xmlSchemaAnnotPtr annot;
+    xmlSchemaTypePtr subtypes;
+    xmlSchemaAttributePtr attributes; /* Deprecated; not used */
+    xmlNodePtr node;
+    int minOccurs; /* Deprecated; not used */
+    int maxOccurs; /* Deprecated; not used */
+
+    int flags;
+    xmlSchemaContentType contentType;
+    const xmlChar *base; /* Base type's local name */
+    const xmlChar *baseNs; /* Base type's target namespace */
+    xmlSchemaTypePtr baseType; /* The base type component */
+    xmlSchemaFacetPtr facets; /* Local facets */
+    struct _xmlSchemaType *redef; /* Deprecated; not used */
+    int recurse; /* Obsolete */
+    xmlSchemaAttributeLinkPtr *attributeUses; /* Deprecated; not used */
+    xmlSchemaWildcardPtr attributeWildcard;
+    int builtInType; /* Type of built-in types. */
+    xmlSchemaTypeLinkPtr memberTypes; /* member-types if a union type. */
+    xmlSchemaFacetLinkPtr facetSet; /* All facets (incl. inherited) */
+    const xmlChar *refPrefix; /* Deprecated; not used */
+    xmlSchemaTypePtr contentTypeDef; /* Used for the simple content of complex types.
+                                        Could we use @subtypes for this? */
+    xmlRegexpPtr contModel; /* Holds the automaton of the content model */
+    const xmlChar *targetNamespace;
+    void *attrUses;
+};
+
+/*
+ * xmlSchemaElement:
+ * An element definition.
+ *
+ * xmlSchemaType, xmlSchemaFacet and xmlSchemaElement start of
+ * structures must be kept similar
+ */
+/**
+ * XML_SCHEMAS_ELEM_NILLABLE:
+ *
+ * the element is nillable
+ */
+#define XML_SCHEMAS_ELEM_NILLABLE        1 << 0
+/**
+ * XML_SCHEMAS_ELEM_GLOBAL:
+ *
+ * the element is global
+ */
+#define XML_SCHEMAS_ELEM_GLOBAL                1 << 1
+/**
+ * XML_SCHEMAS_ELEM_DEFAULT:
+ *
+ * the element has a default value
+ */
+#define XML_SCHEMAS_ELEM_DEFAULT        1 << 2
+/**
+ * XML_SCHEMAS_ELEM_FIXED:
+ *
+ * the element has a fixed value
+ */
+#define XML_SCHEMAS_ELEM_FIXED                1 << 3
+/**
+ * XML_SCHEMAS_ELEM_ABSTRACT:
+ *
+ * the element is abstract
+ */
+#define XML_SCHEMAS_ELEM_ABSTRACT        1 << 4
+/**
+ * XML_SCHEMAS_ELEM_TOPLEVEL:
+ *
+ * the element is top level
+ * obsolete: use XML_SCHEMAS_ELEM_GLOBAL instead
+ */
+#define XML_SCHEMAS_ELEM_TOPLEVEL        1 << 5
+/**
+ * XML_SCHEMAS_ELEM_REF:
+ *
+ * the element is a reference to a type
+ */
+#define XML_SCHEMAS_ELEM_REF                1 << 6
+/**
+ * XML_SCHEMAS_ELEM_NSDEFAULT:
+ *
+ * allow elements in no namespace
+ * Obsolete, not used anymore.
+ */
+#define XML_SCHEMAS_ELEM_NSDEFAULT        1 << 7
+/**
+ * XML_SCHEMAS_ELEM_INTERNAL_RESOLVED:
+ *
+ * this is set when "type", "ref", "substitutionGroup"
+ * references have been resolved.
+ */
+#define XML_SCHEMAS_ELEM_INTERNAL_RESOLVED        1 << 8
+ /**
+ * XML_SCHEMAS_ELEM_CIRCULAR:
+ *
+ * a helper flag for the search of circular references.
+ */
+#define XML_SCHEMAS_ELEM_CIRCULAR        1 << 9
+/**
+ * XML_SCHEMAS_ELEM_BLOCK_ABSENT:
+ *
+ * the "block" attribute is absent
+ */
+#define XML_SCHEMAS_ELEM_BLOCK_ABSENT        1 << 10
+/**
+ * XML_SCHEMAS_ELEM_BLOCK_EXTENSION:
+ *
+ * disallowed substitutions are absent
+ */
+#define XML_SCHEMAS_ELEM_BLOCK_EXTENSION        1 << 11
+/**
+ * XML_SCHEMAS_ELEM_BLOCK_RESTRICTION:
+ *
+ * disallowed substitutions: "restriction"
+ */
+#define XML_SCHEMAS_ELEM_BLOCK_RESTRICTION        1 << 12
+/**
+ * XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION:
+ *
+ * disallowed substitutions: "substituion"
+ */
+#define XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION        1 << 13
+/**
+ * XML_SCHEMAS_ELEM_FINAL_ABSENT:
+ *
+ * substitution group exclusions are absent
+ */
+#define XML_SCHEMAS_ELEM_FINAL_ABSENT        1 << 14
+/**
+ * XML_SCHEMAS_ELEM_FINAL_EXTENSION:
+ *
+ * substitution group exclusions: "extension"
+ */
+#define XML_SCHEMAS_ELEM_FINAL_EXTENSION        1 << 15
+/**
+ * XML_SCHEMAS_ELEM_FINAL_RESTRICTION:
+ *
+ * substitution group exclusions: "restriction"
+ */
+#define XML_SCHEMAS_ELEM_FINAL_RESTRICTION        1 << 16
+/**
+ * XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD:
+ *
+ * the declaration is a substitution group head
+ */
+#define XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD        1 << 17
+/**
+ * XML_SCHEMAS_ELEM_INTERNAL_CHECKED:
+ *
+ * this is set when the elem decl has been checked against
+ * all constraints
+ */
+#define XML_SCHEMAS_ELEM_INTERNAL_CHECKED        1 << 18
+
+typedef struct _xmlSchemaElement xmlSchemaElement;
+typedef xmlSchemaElement *xmlSchemaElementPtr;
+struct _xmlSchemaElement {
+    xmlSchemaTypeType type; /* The kind of type */
+    struct _xmlSchemaType *next; /* Not used? */
+    const xmlChar *name;
+    const xmlChar *id; /* Deprecated; not used */
+    const xmlChar *ref; /* Deprecated; not used */
+    const xmlChar *refNs; /* Deprecated; not used */
+    xmlSchemaAnnotPtr annot;
+    xmlSchemaTypePtr subtypes; /* the type definition */
+    xmlSchemaAttributePtr attributes;
+    xmlNodePtr node;
+    int minOccurs; /* Deprecated; not used */
+    int maxOccurs; /* Deprecated; not used */
+
+    int flags;
+    const xmlChar *targetNamespace;
+    const xmlChar *namedType;
+    const xmlChar *namedTypeNs;
+    const xmlChar *substGroup;
+    const xmlChar *substGroupNs;
+    const xmlChar *scope;
+    const xmlChar *value; /* The original value of the value constraint. */
+    struct _xmlSchemaElement *refDecl; /* This will now be used for the
+                                          substitution group affiliation */
+    xmlRegexpPtr contModel; /* Obsolete for WXS, maybe used for RelaxNG */
+    xmlSchemaContentType contentType;
+    const xmlChar *refPrefix; /* Deprecated; not used */
+    xmlSchemaValPtr defVal; /* The compiled value contraint. */
+    void *idcs; /* The identity-constraint defs */
+};
+
+/*
+ * XML_SCHEMAS_FACET_UNKNOWN:
+ *
+ * unknown facet handling
+ */
+#define XML_SCHEMAS_FACET_UNKNOWN        0
+/*
+ * XML_SCHEMAS_FACET_PRESERVE:
+ *
+ * preserve the type of the facet
+ */
+#define XML_SCHEMAS_FACET_PRESERVE        1
+/*
+ * XML_SCHEMAS_FACET_REPLACE:
+ *
+ * replace the type of the facet
+ */
+#define XML_SCHEMAS_FACET_REPLACE        2
+/*
+ * XML_SCHEMAS_FACET_COLLAPSE:
+ *
+ * collapse the types of the facet
+ */
+#define XML_SCHEMAS_FACET_COLLAPSE        3
+/**
+ * A facet definition.
+ */
+struct _xmlSchemaFacet {
+    xmlSchemaTypeType type;        /* The kind of type */
+    struct _xmlSchemaFacet *next;/* the next type if in a sequence ... */
+    const xmlChar *value; /* The original value */
+    const xmlChar *id; /* Obsolete */
+    xmlSchemaAnnotPtr annot;
+    xmlNodePtr node;
+    int fixed; /* XML_SCHEMAS_FACET_PRESERVE, etc. */
+    int whitespace;
+    xmlSchemaValPtr val; /* The compiled value */
+    xmlRegexpPtr    regexp; /* The regex for patterns */
+};
+
+/**
+ * A notation definition.
+ */
+typedef struct _xmlSchemaNotation xmlSchemaNotation;
+typedef xmlSchemaNotation *xmlSchemaNotationPtr;
+struct _xmlSchemaNotation {
+    xmlSchemaTypeType type; /* The kind of type */
+    const xmlChar *name;
+    xmlSchemaAnnotPtr annot;
+    const xmlChar *identifier;
+    const xmlChar *targetNamespace;
+};
+
+/*
+* TODO: Actually all those flags used for the schema should sit
+* on the schema parser context, since they are used only
+* during parsing an XML schema document, and not available
+* on the component level as per spec.
+*/
+/**
+ * XML_SCHEMAS_QUALIF_ELEM:
+ *
+ * Reflects elementFormDefault == qualified in
+ * an XML schema document.
+ */
+#define XML_SCHEMAS_QUALIF_ELEM                1 << 0
+/**
+ * XML_SCHEMAS_QUALIF_ATTR:
+ *
+ * Reflects attributeFormDefault == qualified in
+ * an XML schema document.
+ */
+#define XML_SCHEMAS_QUALIF_ATTR            1 << 1
+/**
+ * XML_SCHEMAS_FINAL_DEFAULT_EXTENSION:
+ *
+ * the schema has "extension" in the set of finalDefault.
+ */
+#define XML_SCHEMAS_FINAL_DEFAULT_EXTENSION        1 << 2
+/**
+ * XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION:
+ *
+ * the schema has "restriction" in the set of finalDefault.
+ */
+#define XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION            1 << 3
+/**
+ * XML_SCHEMAS_FINAL_DEFAULT_LIST:
+ *
+ * the cshema has "list" in the set of finalDefault.
+ */
+#define XML_SCHEMAS_FINAL_DEFAULT_LIST            1 << 4
+/**
+ * XML_SCHEMAS_FINAL_DEFAULT_UNION:
+ *
+ * the schema has "union" in the set of finalDefault.
+ */
+#define XML_SCHEMAS_FINAL_DEFAULT_UNION            1 << 5
+/**
+ * XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION:
+ *
+ * the schema has "extension" in the set of blockDefault.
+ */
+#define XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION            1 << 6
+/**
+ * XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION:
+ *
+ * the schema has "restriction" in the set of blockDefault.
+ */
+#define XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION            1 << 7
+/**
+ * XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION:
+ *
+ * the schema has "substitution" in the set of blockDefault.
+ */
+#define XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION            1 << 8
+/**
+ * XML_SCHEMAS_INCLUDING_CONVERT_NS:
+ *
+ * the schema is currently including an other schema with
+ * no target namespace.
+ */
+#define XML_SCHEMAS_INCLUDING_CONVERT_NS            1 << 9
+/**
+ * _xmlSchema:
+ *
+ * A Schemas definition
+ */
+struct _xmlSchema {
+    const xmlChar *name; /* schema name */
+    const xmlChar *targetNamespace; /* the target namespace */
+    const xmlChar *version;
+    const xmlChar *id; /* Obsolete */
+    xmlDocPtr doc;
+    xmlSchemaAnnotPtr annot;
+    int flags;
+
+    xmlHashTablePtr typeDecl;
+    xmlHashTablePtr attrDecl;
+    xmlHashTablePtr attrgrpDecl;
+    xmlHashTablePtr elemDecl;
+    xmlHashTablePtr notaDecl;
+
+    xmlHashTablePtr schemasImports;
+
+    void *_private;        /* unused by the library for users or bindings */
+    xmlHashTablePtr groupDecl;
+    xmlDictPtr      dict;
+    void *includes;     /* the includes, this is opaque for now */
+    int preserve;        /* whether to free the document */
+    int counter; /* used to give ononymous components unique names */
+    xmlHashTablePtr idcDef; /* All identity-constraint defs. */
+    void *volatiles; /* Obsolete */
+};
+
+XMLPUBFUN void XMLCALL         xmlSchemaFreeType        (xmlSchemaTypePtr type);
+XMLPUBFUN void XMLCALL         xmlSchemaFreeWildcard(xmlSchemaWildcardPtr wildcard);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+#endif /* __XML_SCHEMA_INTERNALS_H__ */
diff --git a/interfaces/ext/libxml/schematron.h b/interfaces/ext/libxml/schematron.h
new file mode 100644
index 0000000..f442826
--- /dev/null
+++ b/interfaces/ext/libxml/schematron.h
@@ -0,0 +1,142 @@
+/*
+ * Summary: XML Schemastron implementation
+ * Description: interface to the XML Schematron validity checking.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_SCHEMATRON_H__
+#define __XML_SCHEMATRON_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_SCHEMATRON_ENABLED
+
+#include <libxml/tree.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+    XML_SCHEMATRON_OUT_QUIET = 1 << 0,	/* quiet no report */
+    XML_SCHEMATRON_OUT_TEXT = 1 << 1,	/* build a textual report */
+    XML_SCHEMATRON_OUT_XML = 1 << 2,	/* output SVRL */
+    XML_SCHEMATRON_OUT_ERROR = 1 << 3,  /* output via xmlStructuredErrorFunc */
+    XML_SCHEMATRON_OUT_FILE = 1 << 8,	/* output to a file descriptor */
+    XML_SCHEMATRON_OUT_BUFFER = 1 << 9,	/* output to a buffer */
+    XML_SCHEMATRON_OUT_IO = 1 << 10	/* output to I/O mechanism */
+} xmlSchematronValidOptions;
+
+/**
+ * The schemas related types are kept internal
+ */
+typedef struct _xmlSchematron xmlSchematron;
+typedef xmlSchematron *xmlSchematronPtr;
+
+/**
+ * xmlSchematronValidityErrorFunc:
+ * @ctx: the validation context
+ * @msg: the message
+ * @...: extra arguments
+ *
+ * Signature of an error callback from a Schematron validation
+ */
+typedef void (*xmlSchematronValidityErrorFunc) (void *ctx, const char *msg, ...);
+
+/**
+ * xmlSchematronValidityWarningFunc:
+ * @ctx: the validation context
+ * @msg: the message
+ * @...: extra arguments
+ *
+ * Signature of a warning callback from a Schematron validation
+ */
+typedef void (*xmlSchematronValidityWarningFunc) (void *ctx, const char *msg, ...);
+
+/**
+ * A schemas validation context
+ */
+typedef struct _xmlSchematronParserCtxt xmlSchematronParserCtxt;
+typedef xmlSchematronParserCtxt *xmlSchematronParserCtxtPtr;
+
+typedef struct _xmlSchematronValidCtxt xmlSchematronValidCtxt;
+typedef xmlSchematronValidCtxt *xmlSchematronValidCtxtPtr;
+
+/*
+ * Interfaces for parsing.
+ */
+XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL 
+	    xmlSchematronNewParserCtxt	(const char *URL);
+XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL 
+	    xmlSchematronNewMemParserCtxt(const char *buffer,
+					 int size);
+XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL
+	    xmlSchematronNewDocParserCtxt(xmlDocPtr doc);
+XMLPUBFUN void XMLCALL		
+	    xmlSchematronFreeParserCtxt	(xmlSchematronParserCtxtPtr ctxt);
+/*****
+XMLPUBFUN void XMLCALL		
+	    xmlSchematronSetParserErrors(xmlSchematronParserCtxtPtr ctxt,
+					 xmlSchematronValidityErrorFunc err,
+					 xmlSchematronValidityWarningFunc warn,
+					 void *ctx);
+XMLPUBFUN int XMLCALL
+		xmlSchematronGetParserErrors(xmlSchematronParserCtxtPtr ctxt,
+					xmlSchematronValidityErrorFunc * err,
+					xmlSchematronValidityWarningFunc * warn,
+					void **ctx);
+XMLPUBFUN int XMLCALL
+		xmlSchematronIsValid	(xmlSchematronValidCtxtPtr ctxt);
+ *****/
+XMLPUBFUN xmlSchematronPtr XMLCALL	
+	    xmlSchematronParse		(xmlSchematronParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL		
+	    xmlSchematronFree		(xmlSchematronPtr schema);
+/*
+ * Interfaces for validating
+ */
+XMLPUBFUN void XMLCALL
+	    xmlSchematronSetValidStructuredErrors(
+	                                  xmlSchematronValidCtxtPtr ctxt,
+					  xmlStructuredErrorFunc serror,
+					  void *ctx);
+/******
+XMLPUBFUN void XMLCALL		
+	    xmlSchematronSetValidErrors	(xmlSchematronValidCtxtPtr ctxt,
+					 xmlSchematronValidityErrorFunc err,
+					 xmlSchematronValidityWarningFunc warn,
+					 void *ctx);
+XMLPUBFUN int XMLCALL
+	    xmlSchematronGetValidErrors	(xmlSchematronValidCtxtPtr ctxt,
+					 xmlSchematronValidityErrorFunc *err,
+					 xmlSchematronValidityWarningFunc *warn,
+					 void **ctx);
+XMLPUBFUN int XMLCALL
+	    xmlSchematronSetValidOptions(xmlSchematronValidCtxtPtr ctxt,
+					 int options);
+XMLPUBFUN int XMLCALL
+	    xmlSchematronValidCtxtGetOptions(xmlSchematronValidCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+            xmlSchematronValidateOneElement (xmlSchematronValidCtxtPtr ctxt,
+			                 xmlNodePtr elem);
+ *******/
+
+XMLPUBFUN xmlSchematronValidCtxtPtr XMLCALL	
+	    xmlSchematronNewValidCtxt	(xmlSchematronPtr schema,
+	    				 int options);
+XMLPUBFUN void XMLCALL			
+	    xmlSchematronFreeValidCtxt	(xmlSchematronValidCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL			
+	    xmlSchematronValidateDoc	(xmlSchematronValidCtxtPtr ctxt,
+					 xmlDocPtr instance);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_SCHEMATRON_ENABLED */
+#endif /* __XML_SCHEMATRON_H__ */
diff --git a/interfaces/ext/libxml/threads.h b/interfaces/ext/libxml/threads.h
new file mode 100644
index 0000000..d31f16a
--- /dev/null
+++ b/interfaces/ext/libxml/threads.h
@@ -0,0 +1,84 @@
+/**
+ * Summary: interfaces for thread handling
+ * Description: set of generic threading related routines
+ *              should work with pthreads, Windows native or TLS threads
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_THREADS_H__
+#define __XML_THREADS_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * xmlMutex are a simple mutual exception locks.
+ */
+typedef struct _xmlMutex xmlMutex;
+typedef xmlMutex *xmlMutexPtr;
+
+/*
+ * xmlRMutex are reentrant mutual exception locks.
+ */
+typedef struct _xmlRMutex xmlRMutex;
+typedef xmlRMutex *xmlRMutexPtr;
+
+#ifdef __cplusplus
+}
+#endif
+#include <libxml/globals.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+XMLPUBFUN xmlMutexPtr XMLCALL
+			xmlNewMutex	(void);
+XMLPUBFUN void XMLCALL
+			xmlMutexLock	(xmlMutexPtr tok);
+XMLPUBFUN void XMLCALL
+			xmlMutexUnlock	(xmlMutexPtr tok);
+XMLPUBFUN void XMLCALL
+			xmlFreeMutex	(xmlMutexPtr tok);
+
+XMLPUBFUN xmlRMutexPtr XMLCALL
+			xmlNewRMutex	(void);
+XMLPUBFUN void XMLCALL
+			xmlRMutexLock	(xmlRMutexPtr tok);
+XMLPUBFUN void XMLCALL
+			xmlRMutexUnlock	(xmlRMutexPtr tok);
+XMLPUBFUN void XMLCALL
+			xmlFreeRMutex	(xmlRMutexPtr tok);
+
+/*
+ * Library wide APIs.
+ */
+XMLPUBFUN void XMLCALL
+			xmlInitThreads	(void);
+XMLPUBFUN void XMLCALL
+			xmlLockLibrary	(void);
+XMLPUBFUN void XMLCALL
+			xmlUnlockLibrary(void);
+XMLPUBFUN int XMLCALL
+			xmlGetThreadId	(void);
+XMLPUBFUN int XMLCALL
+			xmlIsMainThread	(void);
+XMLPUBFUN void XMLCALL
+			xmlCleanupThreads(void);
+XMLPUBFUN xmlGlobalStatePtr XMLCALL
+			xmlGetGlobalState(void);
+
+#if defined(HAVE_WIN32_THREADS) && !defined(HAVE_COMPILER_TLS) && defined(LIBXML_STATIC_FOR_DLL)
+int XMLCALL xmlDllMain(void *hinstDLL, unsigned long fdwReason, void *lpvReserved);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __XML_THREADS_H__ */
diff --git a/interfaces/ext/libxml/tree.h b/interfaces/ext/libxml/tree.h
new file mode 100644
index 0000000..b733589
--- /dev/null
+++ b/interfaces/ext/libxml/tree.h
@@ -0,0 +1,1252 @@
+/*
+ * Summary: interfaces for tree manipulation
+ * Description: this module describes the structures found in an tree resulting
+ *              from an XML or HTML parsing, as well as the API provided for
+ *              various processing on that tree
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_TREE_H__
+#define __XML_TREE_H__
+
+#include <stdio.h>
+#include <libxml/xmlversion.h>
+#include <libxml/xmlstring.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Some of the basic types pointer to structures:
+ */
+/* xmlIO.h */
+typedef struct _xmlParserInputBuffer xmlParserInputBuffer;
+typedef xmlParserInputBuffer *xmlParserInputBufferPtr;
+
+typedef struct _xmlOutputBuffer xmlOutputBuffer;
+typedef xmlOutputBuffer *xmlOutputBufferPtr;
+
+/* parser.h */
+typedef struct _xmlParserInput xmlParserInput;
+typedef xmlParserInput *xmlParserInputPtr;
+
+typedef struct _xmlParserCtxt xmlParserCtxt;
+typedef xmlParserCtxt *xmlParserCtxtPtr;
+
+typedef struct _xmlSAXLocator xmlSAXLocator;
+typedef xmlSAXLocator *xmlSAXLocatorPtr;
+
+typedef struct _xmlSAXHandler xmlSAXHandler;
+typedef xmlSAXHandler *xmlSAXHandlerPtr;
+
+/* entities.h */
+typedef struct _xmlEntity xmlEntity;
+typedef xmlEntity *xmlEntityPtr;
+
+/**
+ * BASE_BUFFER_SIZE:
+ *
+ * default buffer size 4000.
+ */
+#define BASE_BUFFER_SIZE 4096
+
+/**
+ * LIBXML_NAMESPACE_DICT:
+ *
+ * Defines experimental behaviour:
+ * 1) xmlNs gets an additional field @context (a xmlDoc)
+ * 2) when creating a tree, xmlNs->href is stored in the dict of xmlDoc.
+ */
+/* #define LIBXML_NAMESPACE_DICT */
+
+/**
+ * xmlBufferAllocationScheme:
+ *
+ * A buffer allocation scheme can be defined to either match exactly the
+ * need or double it's allocated size each time it is found too small.
+ */
+
+typedef enum {
+    XML_BUFFER_ALLOC_DOUBLEIT,	/* double each time one need to grow */
+    XML_BUFFER_ALLOC_EXACT,	/* grow only to the minimal size */
+    XML_BUFFER_ALLOC_IMMUTABLE, /* immutable buffer */
+    XML_BUFFER_ALLOC_IO		/* special allocation scheme used for I/O */
+} xmlBufferAllocationScheme;
+
+/**
+ * xmlBuffer:
+ *
+ * A buffer structure.
+ */
+typedef struct _xmlBuffer xmlBuffer;
+typedef xmlBuffer *xmlBufferPtr;
+struct _xmlBuffer {
+    xmlChar *content;		/* The buffer content UTF8 */
+    unsigned int use;		/* The buffer size used */
+    unsigned int size;		/* The buffer size */
+    xmlBufferAllocationScheme alloc; /* The realloc method */
+    xmlChar *contentIO;		/* in IO mode we may have a different base */
+};
+
+/**
+ * XML_XML_NAMESPACE:
+ *
+ * This is the namespace for the special xml: prefix predefined in the
+ * XML Namespace specification.
+ */
+#define XML_XML_NAMESPACE \
+    (const xmlChar *) "http://www.w3.org/XML/1998/namespace"
+
+/**
+ * XML_XML_ID:
+ *
+ * This is the name for the special xml:id attribute
+ */
+#define XML_XML_ID (const xmlChar *) "xml:id"
+
+/*
+ * The different element types carried by an XML tree.
+ *
+ * NOTE: This is synchronized with DOM Level1 values
+ *       See http://www.w3.org/TR/REC-DOM-Level-1/
+ *
+ * Actually this had diverged a bit, and now XML_DOCUMENT_TYPE_NODE should
+ * be deprecated to use an XML_DTD_NODE.
+ */
+typedef enum {
+    XML_ELEMENT_NODE=		1,
+    XML_ATTRIBUTE_NODE=		2,
+    XML_TEXT_NODE=		3,
+    XML_CDATA_SECTION_NODE=	4,
+    XML_ENTITY_REF_NODE=	5,
+    XML_ENTITY_NODE=		6,
+    XML_PI_NODE=		7,
+    XML_COMMENT_NODE=		8,
+    XML_DOCUMENT_NODE=		9,
+    XML_DOCUMENT_TYPE_NODE=	10,
+    XML_DOCUMENT_FRAG_NODE=	11,
+    XML_NOTATION_NODE=		12,
+    XML_HTML_DOCUMENT_NODE=	13,
+    XML_DTD_NODE=		14,
+    XML_ELEMENT_DECL=		15,
+    XML_ATTRIBUTE_DECL=		16,
+    XML_ENTITY_DECL=		17,
+    XML_NAMESPACE_DECL=		18,
+    XML_XINCLUDE_START=		19,
+    XML_XINCLUDE_END=		20
+#ifdef LIBXML_DOCB_ENABLED
+   ,XML_DOCB_DOCUMENT_NODE=	21
+#endif
+} xmlElementType;
+
+
+/**
+ * xmlNotation:
+ *
+ * A DTD Notation definition.
+ */
+
+typedef struct _xmlNotation xmlNotation;
+typedef xmlNotation *xmlNotationPtr;
+struct _xmlNotation {
+    const xmlChar               *name;	        /* Notation name */
+    const xmlChar               *PublicID;	/* Public identifier, if any */
+    const xmlChar               *SystemID;	/* System identifier, if any */
+};
+
+/**
+ * xmlAttributeType:
+ *
+ * A DTD Attribute type definition.
+ */
+
+typedef enum {
+    XML_ATTRIBUTE_CDATA = 1,
+    XML_ATTRIBUTE_ID,
+    XML_ATTRIBUTE_IDREF	,
+    XML_ATTRIBUTE_IDREFS,
+    XML_ATTRIBUTE_ENTITY,
+    XML_ATTRIBUTE_ENTITIES,
+    XML_ATTRIBUTE_NMTOKEN,
+    XML_ATTRIBUTE_NMTOKENS,
+    XML_ATTRIBUTE_ENUMERATION,
+    XML_ATTRIBUTE_NOTATION
+} xmlAttributeType;
+
+/**
+ * xmlAttributeDefault:
+ *
+ * A DTD Attribute default definition.
+ */
+
+typedef enum {
+    XML_ATTRIBUTE_NONE = 1,
+    XML_ATTRIBUTE_REQUIRED,
+    XML_ATTRIBUTE_IMPLIED,
+    XML_ATTRIBUTE_FIXED
+} xmlAttributeDefault;
+
+/**
+ * xmlEnumeration:
+ *
+ * List structure used when there is an enumeration in DTDs.
+ */
+
+typedef struct _xmlEnumeration xmlEnumeration;
+typedef xmlEnumeration *xmlEnumerationPtr;
+struct _xmlEnumeration {
+    struct _xmlEnumeration    *next;	/* next one */
+    const xmlChar            *name;	/* Enumeration name */
+};
+
+/**
+ * xmlAttribute:
+ *
+ * An Attribute declaration in a DTD.
+ */
+
+typedef struct _xmlAttribute xmlAttribute;
+typedef xmlAttribute *xmlAttributePtr;
+struct _xmlAttribute {
+    void           *_private;	        /* application data */
+    xmlElementType          type;       /* XML_ATTRIBUTE_DECL, must be second ! */
+    const xmlChar          *name;	/* Attribute name */
+    struct _xmlNode    *children;	/* NULL */
+    struct _xmlNode        *last;	/* NULL */
+    struct _xmlDtd       *parent;	/* -> DTD */
+    struct _xmlNode        *next;	/* next sibling link  */
+    struct _xmlNode        *prev;	/* previous sibling link  */
+    struct _xmlDoc          *doc;       /* the containing document */
+
+    struct _xmlAttribute  *nexth;	/* next in hash table */
+    xmlAttributeType       atype;	/* The attribute type */
+    xmlAttributeDefault      def;	/* the default */
+    const xmlChar  *defaultValue;	/* or the default value */
+    xmlEnumerationPtr       tree;       /* or the enumeration tree if any */
+    const xmlChar        *prefix;	/* the namespace prefix if any */
+    const xmlChar          *elem;	/* Element holding the attribute */
+};
+
+/**
+ * xmlElementContentType:
+ *
+ * Possible definitions of element content types.
+ */
+typedef enum {
+    XML_ELEMENT_CONTENT_PCDATA = 1,
+    XML_ELEMENT_CONTENT_ELEMENT,
+    XML_ELEMENT_CONTENT_SEQ,
+    XML_ELEMENT_CONTENT_OR
+} xmlElementContentType;
+
+/**
+ * xmlElementContentOccur:
+ *
+ * Possible definitions of element content occurrences.
+ */
+typedef enum {
+    XML_ELEMENT_CONTENT_ONCE = 1,
+    XML_ELEMENT_CONTENT_OPT,
+    XML_ELEMENT_CONTENT_MULT,
+    XML_ELEMENT_CONTENT_PLUS
+} xmlElementContentOccur;
+
+/**
+ * xmlElementContent:
+ *
+ * An XML Element content as stored after parsing an element definition
+ * in a DTD.
+ */
+
+typedef struct _xmlElementContent xmlElementContent;
+typedef xmlElementContent *xmlElementContentPtr;
+struct _xmlElementContent {
+    xmlElementContentType     type;	/* PCDATA, ELEMENT, SEQ or OR */
+    xmlElementContentOccur    ocur;	/* ONCE, OPT, MULT or PLUS */
+    const xmlChar             *name;	/* Element name */
+    struct _xmlElementContent *c1;	/* first child */
+    struct _xmlElementContent *c2;	/* second child */
+    struct _xmlElementContent *parent;	/* parent */
+    const xmlChar             *prefix;	/* Namespace prefix */
+};
+
+/**
+ * xmlElementTypeVal:
+ *
+ * The different possibilities for an element content type.
+ */
+
+typedef enum {
+    XML_ELEMENT_TYPE_UNDEFINED = 0,
+    XML_ELEMENT_TYPE_EMPTY = 1,
+    XML_ELEMENT_TYPE_ANY,
+    XML_ELEMENT_TYPE_MIXED,
+    XML_ELEMENT_TYPE_ELEMENT
+} xmlElementTypeVal;
+
+#ifdef __cplusplus
+}
+#endif
+#include <libxml/xmlregexp.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlElement:
+ *
+ * An XML Element declaration from a DTD.
+ */
+
+typedef struct _xmlElement xmlElement;
+typedef xmlElement *xmlElementPtr;
+struct _xmlElement {
+    void           *_private;	        /* application data */
+    xmlElementType          type;       /* XML_ELEMENT_DECL, must be second ! */
+    const xmlChar          *name;	/* Element name */
+    struct _xmlNode    *children;	/* NULL */
+    struct _xmlNode        *last;	/* NULL */
+    struct _xmlDtd       *parent;	/* -> DTD */
+    struct _xmlNode        *next;	/* next sibling link  */
+    struct _xmlNode        *prev;	/* previous sibling link  */
+    struct _xmlDoc          *doc;       /* the containing document */
+
+    xmlElementTypeVal      etype;	/* The type */
+    xmlElementContentPtr content;	/* the allowed element content */
+    xmlAttributePtr   attributes;	/* List of the declared attributes */
+    const xmlChar        *prefix;	/* the namespace prefix if any */
+#ifdef LIBXML_REGEXP_ENABLED
+    xmlRegexpPtr       contModel;	/* the validating regexp */
+#else
+    void	      *contModel;
+#endif
+};
+
+
+/**
+ * XML_LOCAL_NAMESPACE:
+ *
+ * A namespace declaration node.
+ */
+#define XML_LOCAL_NAMESPACE XML_NAMESPACE_DECL
+typedef xmlElementType xmlNsType;
+
+/**
+ * xmlNs:
+ *
+ * An XML namespace.
+ * Note that prefix == NULL is valid, it defines the default namespace
+ * within the subtree (until overridden).
+ *
+ * xmlNsType is unified with xmlElementType.
+ */
+
+typedef struct _xmlNs xmlNs;
+typedef xmlNs *xmlNsPtr;
+struct _xmlNs {
+    struct _xmlNs  *next;	/* next Ns link for this node  */
+    xmlNsType      type;	/* global or local */
+    const xmlChar *href;	/* URL for the namespace */
+    const xmlChar *prefix;	/* prefix for the namespace */
+    void           *_private;   /* application data */
+    struct _xmlDoc *context;		/* normally an xmlDoc */
+};
+
+/**
+ * xmlDtd:
+ *
+ * An XML DTD, as defined by <!DOCTYPE ... There is actually one for
+ * the internal subset and for the external subset.
+ */
+typedef struct _xmlDtd xmlDtd;
+typedef xmlDtd *xmlDtdPtr;
+struct _xmlDtd {
+    void           *_private;	/* application data */
+    xmlElementType  type;       /* XML_DTD_NODE, must be second ! */
+    const xmlChar *name;	/* Name of the DTD */
+    struct _xmlNode *children;	/* the value of the property link */
+    struct _xmlNode *last;	/* last child link */
+    struct _xmlDoc  *parent;	/* child->parent link */
+    struct _xmlNode *next;	/* next sibling link  */
+    struct _xmlNode *prev;	/* previous sibling link  */
+    struct _xmlDoc  *doc;	/* the containing document */
+
+    /* End of common part */
+    void          *notations;   /* Hash table for notations if any */
+    void          *elements;    /* Hash table for elements if any */
+    void          *attributes;  /* Hash table for attributes if any */
+    void          *entities;    /* Hash table for entities if any */
+    const xmlChar *ExternalID;	/* External identifier for PUBLIC DTD */
+    const xmlChar *SystemID;	/* URI for a SYSTEM or PUBLIC DTD */
+    void          *pentities;   /* Hash table for param entities if any */
+};
+
+/**
+ * xmlAttr:
+ *
+ * An attribute on an XML node.
+ */
+typedef struct _xmlAttr xmlAttr;
+typedef xmlAttr *xmlAttrPtr;
+struct _xmlAttr {
+    void           *_private;	/* application data */
+    xmlElementType   type;      /* XML_ATTRIBUTE_NODE, must be second ! */
+    const xmlChar   *name;      /* the name of the property */
+    struct _xmlNode *children;	/* the value of the property */
+    struct _xmlNode *last;	/* NULL */
+    struct _xmlNode *parent;	/* child->parent link */
+    struct _xmlAttr *next;	/* next sibling link  */
+    struct _xmlAttr *prev;	/* previous sibling link  */
+    struct _xmlDoc  *doc;	/* the containing document */
+    xmlNs           *ns;        /* pointer to the associated namespace */
+    xmlAttributeType atype;     /* the attribute type if validating */
+    void            *psvi;	/* for type/PSVI informations */
+};
+
+/**
+ * xmlID:
+ *
+ * An XML ID instance.
+ */
+
+typedef struct _xmlID xmlID;
+typedef xmlID *xmlIDPtr;
+struct _xmlID {
+    struct _xmlID    *next;	/* next ID */
+    const xmlChar    *value;	/* The ID name */
+    xmlAttrPtr        attr;	/* The attribute holding it */
+    const xmlChar    *name;	/* The attribute if attr is not available */
+    int               lineno;	/* The line number if attr is not available */
+    struct _xmlDoc   *doc;	/* The document holding the ID */
+};
+
+/**
+ * xmlRef:
+ *
+ * An XML IDREF instance.
+ */
+
+typedef struct _xmlRef xmlRef;
+typedef xmlRef *xmlRefPtr;
+struct _xmlRef {
+    struct _xmlRef    *next;	/* next Ref */
+    const xmlChar     *value;	/* The Ref name */
+    xmlAttrPtr        attr;	/* The attribute holding it */
+    const xmlChar    *name;	/* The attribute if attr is not available */
+    int               lineno;	/* The line number if attr is not available */
+};
+
+/**
+ * xmlNode:
+ *
+ * A node in an XML tree.
+ */
+typedef struct _xmlNode xmlNode;
+typedef xmlNode *xmlNodePtr;
+struct _xmlNode {
+    void           *_private;	/* application data */
+    xmlElementType   type;	/* type number, must be second ! */
+    const xmlChar   *name;      /* the name of the node, or the entity */
+    struct _xmlNode *children;	/* parent->childs link */
+    struct _xmlNode *last;	/* last child link */
+    struct _xmlNode *parent;	/* child->parent link */
+    struct _xmlNode *next;	/* next sibling link  */
+    struct _xmlNode *prev;	/* previous sibling link  */
+    struct _xmlDoc  *doc;	/* the containing document */
+
+    /* End of common part */
+    xmlNs           *ns;        /* pointer to the associated namespace */
+    xmlChar         *content;   /* the content */
+    struct _xmlAttr *properties;/* properties list */
+    xmlNs           *nsDef;     /* namespace definitions on this node */
+    void            *psvi;	/* for type/PSVI informations */
+    unsigned short   line;	/* line number */
+    unsigned short   extra;	/* extra data for XPath/XSLT */
+};
+
+/**
+ * XML_GET_CONTENT:
+ *
+ * Macro to extract the content pointer of a node.
+ */
+#define XML_GET_CONTENT(n)					\
+    ((n)->type == XML_ELEMENT_NODE ? NULL : (n)->content)
+
+/**
+ * XML_GET_LINE:
+ *
+ * Macro to extract the line number of an element node. 
+ */
+#define XML_GET_LINE(n)						\
+    (xmlGetLineNo(n))
+
+/**
+ * xmlDocProperty
+ *
+ * Set of properties of the document as found by the parser
+ * Some of them are linked to similary named xmlParserOption
+ */
+typedef enum {
+    XML_DOC_WELLFORMED		= 1<<0, /* document is XML well formed */
+    XML_DOC_NSVALID		= 1<<1, /* document is Namespace valid */
+    XML_DOC_OLD10		= 1<<2, /* parsed with old XML-1.0 parser */
+    XML_DOC_DTDVALID		= 1<<3, /* DTD validation was successful */
+    XML_DOC_XINCLUDE		= 1<<4, /* XInclude substitution was done */
+    XML_DOC_USERBUILT		= 1<<5, /* Document was built using the API
+                                           and not by parsing an instance */
+    XML_DOC_INTERNAL		= 1<<6, /* built for internal processing */
+    XML_DOC_HTML		= 1<<7  /* parsed or built HTML document */
+} xmlDocProperties;
+
+/**
+ * xmlDoc:
+ *
+ * An XML document.
+ */
+typedef struct _xmlDoc xmlDoc;
+typedef xmlDoc *xmlDocPtr;
+struct _xmlDoc {
+    void           *_private;	/* application data */
+    xmlElementType  type;       /* XML_DOCUMENT_NODE, must be second ! */
+    char           *name;	/* name/filename/URI of the document */
+    struct _xmlNode *children;	/* the document tree */
+    struct _xmlNode *last;	/* last child link */
+    struct _xmlNode *parent;	/* child->parent link */
+    struct _xmlNode *next;	/* next sibling link  */
+    struct _xmlNode *prev;	/* previous sibling link  */
+    struct _xmlDoc  *doc;	/* autoreference to itself */
+
+    /* End of common part */
+    int             compression;/* level of zlib compression */
+    int             standalone; /* standalone document (no external refs) 
+				     1 if standalone="yes"
+				     0 if standalone="no"
+				    -1 if there is no XML declaration
+				    -2 if there is an XML declaration, but no
+					standalone attribute was specified */
+    struct _xmlDtd  *intSubset;	/* the document internal subset */
+    struct _xmlDtd  *extSubset;	/* the document external subset */
+    struct _xmlNs   *oldNs;	/* Global namespace, the old way */
+    const xmlChar  *version;	/* the XML version string */
+    const xmlChar  *encoding;   /* external initial encoding, if any */
+    void           *ids;        /* Hash table for ID attributes if any */
+    void           *refs;       /* Hash table for IDREFs attributes if any */
+    const xmlChar  *URL;	/* The URI for that document */
+    int             charset;    /* encoding of the in-memory content
+				   actually an xmlCharEncoding */
+    struct _xmlDict *dict;      /* dict used to allocate names or NULL */
+    void           *psvi;	/* for type/PSVI informations */
+    int             parseFlags;	/* set of xmlParserOption used to parse the
+				   document */
+    int             properties;	/* set of xmlDocProperties for this document
+				   set at the end of parsing */
+};
+
+
+typedef struct _xmlDOMWrapCtxt xmlDOMWrapCtxt;
+typedef xmlDOMWrapCtxt *xmlDOMWrapCtxtPtr;
+
+/**
+ * xmlDOMWrapAcquireNsFunction:
+ * @ctxt:  a DOM wrapper context
+ * @node:  the context node (element or attribute) 
+ * @nsName:  the requested namespace name
+ * @nsPrefix:  the requested namespace prefix 
+ *
+ * A function called to acquire namespaces (xmlNs) from the wrapper.
+ *
+ * Returns an xmlNsPtr or NULL in case of an error.
+ */
+typedef xmlNsPtr (*xmlDOMWrapAcquireNsFunction) (xmlDOMWrapCtxtPtr ctxt,
+						 xmlNodePtr node,
+						 const xmlChar *nsName,
+						 const xmlChar *nsPrefix);
+
+/**
+ * xmlDOMWrapCtxt:
+ *
+ * Context for DOM wrapper-operations.
+ */
+struct _xmlDOMWrapCtxt {
+    void * _private;
+    /*
+    * The type of this context, just in case we need specialized
+    * contexts in the future.
+    */
+    int type;
+    /*
+    * Internal namespace map used for various operations.
+    */
+    void * namespaceMap;
+    /*
+    * Use this one to acquire an xmlNsPtr intended for node->ns.
+    * (Note that this is not intended for elem->nsDef).
+    */
+    xmlDOMWrapAcquireNsFunction getNsForNodeFunc;
+};
+
+/**
+ * xmlChildrenNode:
+ *
+ * Macro for compatibility naming layer with libxml1. Maps
+ * to "children."
+ */
+#ifndef xmlChildrenNode
+#define xmlChildrenNode children
+#endif
+
+/**
+ * xmlRootNode:
+ *
+ * Macro for compatibility naming layer with libxml1. Maps 
+ * to "children".
+ */
+#ifndef xmlRootNode
+#define xmlRootNode children
+#endif
+
+/*
+ * Variables.
+ */
+
+/*
+ * Some helper functions
+ */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
+XMLPUBFUN int XMLCALL
+		xmlValidateNCName	(const xmlChar *value,
+					 int space);
+#endif
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+XMLPUBFUN int XMLCALL		
+		xmlValidateQName	(const xmlChar *value,
+					 int space);
+XMLPUBFUN int XMLCALL		
+		xmlValidateName		(const xmlChar *value,
+					 int space);
+XMLPUBFUN int XMLCALL		
+		xmlValidateNMToken	(const xmlChar *value,
+					 int space);
+#endif
+
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlBuildQName		(const xmlChar *ncname,
+					 const xmlChar *prefix,
+					 xmlChar *memory,
+					 int len);
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlSplitQName2		(const xmlChar *name,
+					 xmlChar **prefix);
+XMLPUBFUN const xmlChar * XMLCALL	
+		xmlSplitQName3		(const xmlChar *name,
+					 int *len);
+
+/*
+ * Handling Buffers.
+ */
+
+XMLPUBFUN void XMLCALL		
+		xmlSetBufferAllocationScheme(xmlBufferAllocationScheme scheme);
+XMLPUBFUN xmlBufferAllocationScheme XMLCALL	 
+		xmlGetBufferAllocationScheme(void);
+
+XMLPUBFUN xmlBufferPtr XMLCALL	
+		xmlBufferCreate		(void);
+XMLPUBFUN xmlBufferPtr XMLCALL	
+		xmlBufferCreateSize	(size_t size);
+XMLPUBFUN xmlBufferPtr XMLCALL	
+		xmlBufferCreateStatic	(void *mem,
+					 size_t size);
+XMLPUBFUN int XMLCALL		
+		xmlBufferResize		(xmlBufferPtr buf,
+					 unsigned int size);
+XMLPUBFUN void XMLCALL		
+		xmlBufferFree		(xmlBufferPtr buf);
+XMLPUBFUN int XMLCALL		
+		xmlBufferDump		(FILE *file,
+					 xmlBufferPtr buf);
+XMLPUBFUN int XMLCALL		
+		xmlBufferAdd		(xmlBufferPtr buf,
+					 const xmlChar *str,
+					 int len);
+XMLPUBFUN int XMLCALL		
+		xmlBufferAddHead	(xmlBufferPtr buf,
+					 const xmlChar *str,
+					 int len);
+XMLPUBFUN int XMLCALL		
+		xmlBufferCat		(xmlBufferPtr buf,
+					 const xmlChar *str);
+XMLPUBFUN int XMLCALL	
+		xmlBufferCCat		(xmlBufferPtr buf,
+					 const char *str);
+XMLPUBFUN int XMLCALL		
+		xmlBufferShrink		(xmlBufferPtr buf,
+					 unsigned int len);
+XMLPUBFUN int XMLCALL		
+		xmlBufferGrow		(xmlBufferPtr buf,
+					 unsigned int len);
+XMLPUBFUN void XMLCALL		
+		xmlBufferEmpty		(xmlBufferPtr buf);
+XMLPUBFUN const xmlChar* XMLCALL	
+		xmlBufferContent	(const xmlBufferPtr buf);
+XMLPUBFUN void XMLCALL		
+		xmlBufferSetAllocationScheme(xmlBufferPtr buf,
+					 xmlBufferAllocationScheme scheme);
+XMLPUBFUN int XMLCALL		
+		xmlBufferLength		(const xmlBufferPtr buf);
+
+/*
+ * Creating/freeing new structures.
+ */
+XMLPUBFUN xmlDtdPtr XMLCALL	
+		xmlCreateIntSubset	(xmlDocPtr doc,
+					 const xmlChar *name,
+					 const xmlChar *ExternalID,
+					 const xmlChar *SystemID);
+XMLPUBFUN xmlDtdPtr XMLCALL	
+		xmlNewDtd		(xmlDocPtr doc,
+					 const xmlChar *name,
+					 const xmlChar *ExternalID,
+					 const xmlChar *SystemID);
+XMLPUBFUN xmlDtdPtr XMLCALL	
+		xmlGetIntSubset		(xmlDocPtr doc);
+XMLPUBFUN void XMLCALL		
+		xmlFreeDtd		(xmlDtdPtr cur);
+#ifdef LIBXML_LEGACY_ENABLED
+XMLPUBFUN xmlNsPtr XMLCALL	
+		xmlNewGlobalNs		(xmlDocPtr doc,
+					 const xmlChar *href,
+					 const xmlChar *prefix);
+#endif /* LIBXML_LEGACY_ENABLED */
+XMLPUBFUN xmlNsPtr XMLCALL	
+		xmlNewNs		(xmlNodePtr node,
+					 const xmlChar *href,
+					 const xmlChar *prefix);
+XMLPUBFUN void XMLCALL		
+		xmlFreeNs		(xmlNsPtr cur);
+XMLPUBFUN void XMLCALL		
+		xmlFreeNsList		(xmlNsPtr cur);
+XMLPUBFUN xmlDocPtr XMLCALL 	
+		xmlNewDoc		(const xmlChar *version);
+XMLPUBFUN void XMLCALL		
+		xmlFreeDoc		(xmlDocPtr cur);
+XMLPUBFUN xmlAttrPtr XMLCALL	
+		xmlNewDocProp		(xmlDocPtr doc,
+					 const xmlChar *name,
+					 const xmlChar *value);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \
+    defined(LIBXML_SCHEMAS_ENABLED)
+XMLPUBFUN xmlAttrPtr XMLCALL	
+		xmlNewProp		(xmlNodePtr node,
+					 const xmlChar *name,
+					 const xmlChar *value);
+#endif
+XMLPUBFUN xmlAttrPtr XMLCALL	
+		xmlNewNsProp		(xmlNodePtr node,
+					 xmlNsPtr ns,
+					 const xmlChar *name,
+					 const xmlChar *value);
+XMLPUBFUN xmlAttrPtr XMLCALL	
+		xmlNewNsPropEatName	(xmlNodePtr node,
+					 xmlNsPtr ns,
+					 xmlChar *name,
+					 const xmlChar *value);
+XMLPUBFUN void XMLCALL		
+		xmlFreePropList		(xmlAttrPtr cur);
+XMLPUBFUN void XMLCALL		
+		xmlFreeProp		(xmlAttrPtr cur);
+XMLPUBFUN xmlAttrPtr XMLCALL	
+		xmlCopyProp		(xmlNodePtr target,
+					 xmlAttrPtr cur);
+XMLPUBFUN xmlAttrPtr XMLCALL	
+		xmlCopyPropList		(xmlNodePtr target,
+					 xmlAttrPtr cur);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlDtdPtr XMLCALL	
+		xmlCopyDtd		(xmlDtdPtr dtd);
+#endif /* LIBXML_TREE_ENABLED */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+XMLPUBFUN xmlDocPtr XMLCALL	
+		xmlCopyDoc		(xmlDocPtr doc,
+					 int recursive);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+/*
+ * Creating new nodes.
+ */
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlNewDocNode		(xmlDocPtr doc,
+					 xmlNsPtr ns,
+					 const xmlChar *name,
+					 const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlNewDocNodeEatName	(xmlDocPtr doc,
+					 xmlNsPtr ns,
+					 xmlChar *name,
+					 const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlNewNode		(xmlNsPtr ns,
+					 const xmlChar *name);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlNewNodeEatName	(xmlNsPtr ns,
+					 xmlChar *name);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlNewChild		(xmlNodePtr parent,
+					 xmlNsPtr ns,
+					 const xmlChar *name,
+					 const xmlChar *content);
+#endif
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlNewDocText		(xmlDocPtr doc,
+					 const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlNewText		(const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlNewDocPI		(xmlDocPtr doc,
+					 const xmlChar *name,
+					 const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlNewPI		(const xmlChar *name,
+					 const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlNewDocTextLen	(xmlDocPtr doc,
+					 const xmlChar *content,
+					 int len);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlNewTextLen		(const xmlChar *content,
+					 int len);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlNewDocComment	(xmlDocPtr doc,
+					 const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlNewComment		(const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlNewCDataBlock	(xmlDocPtr doc,
+					 const xmlChar *content,
+					 int len);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlNewCharRef		(xmlDocPtr doc,
+					 const xmlChar *name);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlNewReference		(xmlDocPtr doc,
+					 const xmlChar *name);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlCopyNode		(const xmlNodePtr node,
+					 int recursive);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlDocCopyNode		(const xmlNodePtr node,
+					 xmlDocPtr doc,
+					 int recursive);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlDocCopyNodeList	(xmlDocPtr doc,
+					 const xmlNodePtr node);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlCopyNodeList		(const xmlNodePtr node);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlNewTextChild		(xmlNodePtr parent,
+					 xmlNsPtr ns,
+					 const xmlChar *name,
+					 const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlNewDocRawNode	(xmlDocPtr doc,
+					 xmlNsPtr ns,
+					 const xmlChar *name,
+					 const xmlChar *content);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlNewDocFragment	(xmlDocPtr doc);
+#endif /* LIBXML_TREE_ENABLED */
+
+/*
+ * Navigating.
+ */
+XMLPUBFUN long XMLCALL		
+		xmlGetLineNo		(xmlNodePtr node);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED)
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlGetNodePath		(xmlNodePtr node);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED) */
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlDocGetRootElement	(xmlDocPtr doc);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlGetLastChild		(xmlNodePtr parent);
+XMLPUBFUN int XMLCALL		
+		xmlNodeIsText		(xmlNodePtr node);
+XMLPUBFUN int XMLCALL		
+		xmlIsBlankNode		(xmlNodePtr node);
+
+/*
+ * Changing the structure.
+ */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlDocSetRootElement	(xmlDocPtr doc,
+					 xmlNodePtr root);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN void XMLCALL		
+		xmlNodeSetName		(xmlNodePtr cur,
+					 const xmlChar *name);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlAddChild		(xmlNodePtr parent,
+					 xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlAddChildList		(xmlNodePtr parent,
+					 xmlNodePtr cur);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlReplaceNode		(xmlNodePtr old,
+					 xmlNodePtr cur);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \
+    defined(LIBXML_SCHEMAS_ENABLED)
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlAddPrevSibling	(xmlNodePtr cur,
+					 xmlNodePtr elem);
+#endif /* LIBXML_TREE_ENABLED || LIBXML_HTML_ENABLED || LIBXML_SCHEMAS_ENABLED */
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlAddSibling		(xmlNodePtr cur,
+					 xmlNodePtr elem);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlAddNextSibling	(xmlNodePtr cur,
+					 xmlNodePtr elem);
+XMLPUBFUN void XMLCALL		
+		xmlUnlinkNode		(xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlTextMerge		(xmlNodePtr first,
+					 xmlNodePtr second);
+XMLPUBFUN int XMLCALL		
+		xmlTextConcat		(xmlNodePtr node,
+					 const xmlChar *content,
+					 int len);
+XMLPUBFUN void XMLCALL		
+		xmlFreeNodeList		(xmlNodePtr cur);
+XMLPUBFUN void XMLCALL		
+		xmlFreeNode		(xmlNodePtr cur);
+XMLPUBFUN void XMLCALL		
+		xmlSetTreeDoc		(xmlNodePtr tree,
+					 xmlDocPtr doc);
+XMLPUBFUN void XMLCALL		
+		xmlSetListDoc		(xmlNodePtr list,
+					 xmlDocPtr doc);
+/*
+ * Namespaces.
+ */
+XMLPUBFUN xmlNsPtr XMLCALL	
+		xmlSearchNs		(xmlDocPtr doc,
+					 xmlNodePtr node,
+					 const xmlChar *nameSpace);
+XMLPUBFUN xmlNsPtr XMLCALL	
+		xmlSearchNsByHref	(xmlDocPtr doc,
+					 xmlNodePtr node,
+					 const xmlChar *href);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+XMLPUBFUN xmlNsPtr * XMLCALL	
+		xmlGetNsList		(xmlDocPtr doc,
+					 xmlNodePtr node);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) */
+
+XMLPUBFUN void XMLCALL		
+		xmlSetNs		(xmlNodePtr node,
+					 xmlNsPtr ns);
+XMLPUBFUN xmlNsPtr XMLCALL	
+		xmlCopyNamespace	(xmlNsPtr cur);
+XMLPUBFUN xmlNsPtr XMLCALL	
+		xmlCopyNamespaceList	(xmlNsPtr cur);
+
+/*
+ * Changing the content.
+ */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED)
+XMLPUBFUN xmlAttrPtr XMLCALL	
+		xmlSetProp		(xmlNodePtr node,
+					 const xmlChar *name,
+					 const xmlChar *value);
+XMLPUBFUN xmlAttrPtr XMLCALL	
+		xmlSetNsProp		(xmlNodePtr node,
+					 xmlNsPtr ns,
+					 const xmlChar *name,
+					 const xmlChar *value);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) */
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlGetNoNsProp		(xmlNodePtr node,
+					 const xmlChar *name);
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlGetProp		(xmlNodePtr node,
+					 const xmlChar *name);
+XMLPUBFUN xmlAttrPtr XMLCALL	
+		xmlHasProp		(xmlNodePtr node,
+					 const xmlChar *name);
+XMLPUBFUN xmlAttrPtr XMLCALL	
+		xmlHasNsProp		(xmlNodePtr node,
+					 const xmlChar *name,
+					 const xmlChar *nameSpace);
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlGetNsProp		(xmlNodePtr node,
+					 const xmlChar *name,
+					 const xmlChar *nameSpace);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlStringGetNodeList	(xmlDocPtr doc,
+					 const xmlChar *value);
+XMLPUBFUN xmlNodePtr XMLCALL	
+		xmlStringLenGetNodeList	(xmlDocPtr doc,
+					 const xmlChar *value,
+					 int len);
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlNodeListGetString	(xmlDocPtr doc,
+					 xmlNodePtr list,
+					 int inLine);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlNodeListGetRawString	(xmlDocPtr doc,
+					 xmlNodePtr list,
+					 int inLine);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN void XMLCALL		
+		xmlNodeSetContent	(xmlNodePtr cur,
+					 const xmlChar *content);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN void XMLCALL		
+		xmlNodeSetContentLen	(xmlNodePtr cur,
+					 const xmlChar *content,
+					 int len);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN void XMLCALL		
+		xmlNodeAddContent	(xmlNodePtr cur,
+					 const xmlChar *content);
+XMLPUBFUN void XMLCALL		
+		xmlNodeAddContentLen	(xmlNodePtr cur,
+					 const xmlChar *content,
+					 int len);
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlNodeGetContent	(xmlNodePtr cur);
+XMLPUBFUN int XMLCALL
+		xmlNodeBufGetContent	(xmlBufferPtr buffer,
+					 xmlNodePtr cur);
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlNodeGetLang		(xmlNodePtr cur);
+XMLPUBFUN int XMLCALL		
+		xmlNodeGetSpacePreserve	(xmlNodePtr cur);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN void XMLCALL		
+		xmlNodeSetLang		(xmlNodePtr cur,
+					 const xmlChar *lang);
+XMLPUBFUN void XMLCALL		
+		xmlNodeSetSpacePreserve (xmlNodePtr cur,
+					 int val);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlNodeGetBase		(xmlDocPtr doc,
+					 xmlNodePtr cur);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
+XMLPUBFUN void XMLCALL		
+		xmlNodeSetBase		(xmlNodePtr cur,
+					 const xmlChar *uri);
+#endif
+
+/*
+ * Removing content.
+ */
+XMLPUBFUN int XMLCALL		
+		xmlRemoveProp		(xmlAttrPtr cur);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+XMLPUBFUN int XMLCALL		
+		xmlUnsetNsProp		(xmlNodePtr node,
+					 xmlNsPtr ns,
+					 const xmlChar *name);
+XMLPUBFUN int XMLCALL		
+		xmlUnsetProp		(xmlNodePtr node,
+					 const xmlChar *name);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+
+/*
+ * Internal, don't use.
+ */
+XMLPUBFUN void XMLCALL		
+		xmlBufferWriteCHAR	(xmlBufferPtr buf,
+					 const xmlChar *string);
+XMLPUBFUN void XMLCALL		
+		xmlBufferWriteChar	(xmlBufferPtr buf,
+					 const char *string);
+XMLPUBFUN void XMLCALL		
+		xmlBufferWriteQuotedString(xmlBufferPtr buf,
+					 const xmlChar *string);
+
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void xmlAttrSerializeTxtContent(xmlBufferPtr buf,
+					 xmlDocPtr doc,
+					 xmlAttrPtr attr,
+					 const xmlChar *string);
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+#ifdef LIBXML_TREE_ENABLED
+/*
+ * Namespace handling.
+ */
+XMLPUBFUN int XMLCALL		
+		xmlReconciliateNs	(xmlDocPtr doc,
+					 xmlNodePtr tree);
+#endif
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/*
+ * Saving.
+ */
+XMLPUBFUN void XMLCALL		
+		xmlDocDumpFormatMemory	(xmlDocPtr cur,
+					 xmlChar **mem,
+					 int *size,
+					 int format);
+XMLPUBFUN void XMLCALL		
+		xmlDocDumpMemory	(xmlDocPtr cur,
+					 xmlChar **mem,
+					 int *size);
+XMLPUBFUN void XMLCALL		
+		xmlDocDumpMemoryEnc	(xmlDocPtr out_doc,
+					 xmlChar **doc_txt_ptr,
+					 int * doc_txt_len,
+					 const char *txt_encoding);
+XMLPUBFUN void XMLCALL		
+		xmlDocDumpFormatMemoryEnc(xmlDocPtr out_doc,
+					 xmlChar **doc_txt_ptr,
+					 int * doc_txt_len,
+					 const char *txt_encoding,
+					 int format);
+XMLPUBFUN int XMLCALL		
+		xmlDocFormatDump	(FILE *f,
+					 xmlDocPtr cur,
+					 int format);
+XMLPUBFUN int XMLCALL	
+		xmlDocDump		(FILE *f,
+					 xmlDocPtr cur);
+XMLPUBFUN void XMLCALL		
+		xmlElemDump		(FILE *f,
+					 xmlDocPtr doc,
+					 xmlNodePtr cur);
+XMLPUBFUN int XMLCALL		
+		xmlSaveFile		(const char *filename,
+					 xmlDocPtr cur);
+XMLPUBFUN int XMLCALL		
+		xmlSaveFormatFile	(const char *filename,
+					 xmlDocPtr cur,
+					 int format);
+XMLPUBFUN int XMLCALL		
+		xmlNodeDump		(xmlBufferPtr buf,
+					 xmlDocPtr doc,
+					 xmlNodePtr cur,
+					 int level,
+					 int format);
+
+XMLPUBFUN int XMLCALL		
+		xmlSaveFileTo		(xmlOutputBufferPtr buf,
+					 xmlDocPtr cur,
+					 const char *encoding);
+XMLPUBFUN int XMLCALL             
+		xmlSaveFormatFileTo     (xmlOutputBufferPtr buf,
+					 xmlDocPtr cur,
+				         const char *encoding,
+				         int format);
+XMLPUBFUN void XMLCALL		
+		xmlNodeDumpOutput	(xmlOutputBufferPtr buf,
+					 xmlDocPtr doc,
+					 xmlNodePtr cur,
+					 int level,
+					 int format,
+					 const char *encoding);
+
+XMLPUBFUN int XMLCALL		
+		xmlSaveFormatFileEnc    (const char *filename,
+					 xmlDocPtr cur,
+					 const char *encoding,
+					 int format);
+
+XMLPUBFUN int XMLCALL		
+		xmlSaveFileEnc		(const char *filename,
+					 xmlDocPtr cur,
+					 const char *encoding);
+
+#endif /* LIBXML_OUTPUT_ENABLED */
+/*
+ * XHTML
+ */
+XMLPUBFUN int XMLCALL		
+		xmlIsXHTML		(const xmlChar *systemID,
+					 const xmlChar *publicID);
+
+/*
+ * Compression.
+ */
+XMLPUBFUN int XMLCALL		
+		xmlGetDocCompressMode	(xmlDocPtr doc);
+XMLPUBFUN void XMLCALL		
+		xmlSetDocCompressMode	(xmlDocPtr doc,
+					 int mode);
+XMLPUBFUN int XMLCALL		
+		xmlGetCompressMode	(void);
+XMLPUBFUN void XMLCALL		
+		xmlSetCompressMode	(int mode);
+
+/*
+* DOM-wrapper helper functions.
+*/
+XMLPUBFUN xmlDOMWrapCtxtPtr XMLCALL
+		xmlDOMWrapNewCtxt	(void);
+XMLPUBFUN void XMLCALL
+		xmlDOMWrapFreeCtxt	(xmlDOMWrapCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+	    xmlDOMWrapReconcileNamespaces(xmlDOMWrapCtxtPtr ctxt,
+					 xmlNodePtr elem,
+					 int options);
+XMLPUBFUN int XMLCALL
+	    xmlDOMWrapAdoptNode		(xmlDOMWrapCtxtPtr ctxt,
+					 xmlDocPtr sourceDoc,
+					 xmlNodePtr node,
+					 xmlDocPtr destDoc,		    
+					 xmlNodePtr destParent,
+					 int options);
+XMLPUBFUN int XMLCALL
+	    xmlDOMWrapRemoveNode	(xmlDOMWrapCtxtPtr ctxt,
+					 xmlDocPtr doc,
+					 xmlNodePtr node,
+					 int options);
+XMLPUBFUN int XMLCALL
+	    xmlDOMWrapCloneNode		(xmlDOMWrapCtxtPtr ctxt,
+					 xmlDocPtr sourceDoc,
+					 xmlNodePtr node,
+					 xmlNodePtr *clonedNode,
+					 xmlDocPtr destDoc,
+					 xmlNodePtr destParent,
+					 int deep,
+					 int options);
+
+#ifdef LIBXML_TREE_ENABLED
+/*
+ * 5 interfaces from DOM ElementTraversal, but different in entities
+ * traversal.
+ */
+XMLPUBFUN unsigned long XMLCALL
+            xmlChildElementCount        (xmlNodePtr parent);
+XMLPUBFUN xmlNodePtr XMLCALL
+            xmlNextElementSibling       (xmlNodePtr node);
+XMLPUBFUN xmlNodePtr XMLCALL
+            xmlFirstElementChild        (xmlNodePtr parent);
+XMLPUBFUN xmlNodePtr XMLCALL
+            xmlLastElementChild         (xmlNodePtr parent);
+XMLPUBFUN xmlNodePtr XMLCALL
+            xmlPreviousElementSibling   (xmlNodePtr node);
+#endif
+#ifdef __cplusplus
+}
+#endif
+#ifndef __XML_PARSER_H__
+#include <libxml/xmlmemory.h>
+#endif
+
+#endif /* __XML_TREE_H__ */
+
diff --git a/interfaces/ext/libxml/uri.h b/interfaces/ext/libxml/uri.h
new file mode 100644
index 0000000..db48262
--- /dev/null
+++ b/interfaces/ext/libxml/uri.h
@@ -0,0 +1,94 @@
+/**
+ * Summary: library of generic URI related routines
+ * Description: library of generic URI related routines
+ *              Implements RFC 2396
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_URI_H__
+#define __XML_URI_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlURI:
+ *
+ * A parsed URI reference. This is a struct containing the various fields
+ * as described in RFC 2396 but separated for further processing.
+ *
+ * Note: query is a deprecated field which is incorrectly unescaped.
+ * query_raw takes precedence over query if the former is set.
+ * See: http://mail.gnome.org/archives/xml/2007-April/thread.html#00127
+ */
+typedef struct _xmlURI xmlURI;
+typedef xmlURI *xmlURIPtr;
+struct _xmlURI {
+    char *scheme;	/* the URI scheme */
+    char *opaque;	/* opaque part */
+    char *authority;	/* the authority part */
+    char *server;	/* the server part */
+    char *user;		/* the user part */
+    int port;		/* the port number */
+    char *path;		/* the path string */
+    char *query;	/* the query string (deprecated - use with caution) */
+    char *fragment;	/* the fragment identifier */
+    int  cleanup;	/* parsing potentially unclean URI */
+    char *query_raw;	/* the query string (as it appears in the URI) */
+};
+
+/*
+ * This function is in tree.h:
+ * xmlChar *	xmlNodeGetBase	(xmlDocPtr doc,
+ *                               xmlNodePtr cur);
+ */
+XMLPUBFUN xmlURIPtr XMLCALL
+		xmlCreateURI		(void);
+XMLPUBFUN xmlChar * XMLCALL
+		xmlBuildURI		(const xmlChar *URI,
+					 const xmlChar *base);
+XMLPUBFUN xmlChar * XMLCALL
+		xmlBuildRelativeURI	(const xmlChar *URI,
+					 const xmlChar *base);
+XMLPUBFUN xmlURIPtr XMLCALL
+		xmlParseURI		(const char *str);
+XMLPUBFUN xmlURIPtr XMLCALL
+		xmlParseURIRaw		(const char *str,
+					 int raw);
+XMLPUBFUN int XMLCALL
+		xmlParseURIReference	(xmlURIPtr uri,
+					 const char *str);
+XMLPUBFUN xmlChar * XMLCALL
+		xmlSaveUri		(xmlURIPtr uri);
+XMLPUBFUN void XMLCALL
+		xmlPrintURI		(FILE *stream,
+					 xmlURIPtr uri);
+XMLPUBFUN xmlChar * XMLCALL
+		xmlURIEscapeStr         (const xmlChar *str,
+					 const xmlChar *list);
+XMLPUBFUN char * XMLCALL
+		xmlURIUnescapeString	(const char *str,
+					 int len,
+					 char *target);
+XMLPUBFUN int XMLCALL
+		xmlNormalizeURIPath	(char *path);
+XMLPUBFUN xmlChar * XMLCALL
+		xmlURIEscape		(const xmlChar *str);
+XMLPUBFUN void XMLCALL
+		xmlFreeURI		(xmlURIPtr uri);
+XMLPUBFUN xmlChar* XMLCALL
+		xmlCanonicPath		(const xmlChar *path);
+XMLPUBFUN xmlChar* XMLCALL
+		xmlPathToURI		(const xmlChar *path);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_URI_H__ */
diff --git a/interfaces/ext/libxml/valid.h b/interfaces/ext/libxml/valid.h
new file mode 100644
index 0000000..f1892b0
--- /dev/null
+++ b/interfaces/ext/libxml/valid.h
@@ -0,0 +1,458 @@
+/*
+ * Summary: The DTD validation
+ * Description: API for the DTD handling and the validity checking
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_VALID_H__
+#define __XML_VALID_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/xmlerror.h>
+#include <libxml/tree.h>
+#include <libxml/list.h>
+#include <libxml/xmlautomata.h>
+#include <libxml/xmlregexp.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Validation state added for non-determinist content model.
+ */
+typedef struct _xmlValidState xmlValidState;
+typedef xmlValidState *xmlValidStatePtr;
+
+/**
+ * xmlValidityErrorFunc:
+ * @ctx:  usually an xmlValidCtxtPtr to a validity error context,
+ *        but comes from ctxt->userData (which normally contains such
+ *        a pointer); ctxt->userData can be changed by the user.
+ * @msg:  the string to format *printf like vararg
+ * @...:  remaining arguments to the format
+ *
+ * Callback called when a validity error is found. This is a message
+ * oriented function similar to an *printf function.
+ */
+typedef void (XMLCDECL *xmlValidityErrorFunc) (void *ctx,
+			     const char *msg,
+			     ...) ATTRIBUTE_PRINTF(2,3);
+
+/**
+ * xmlValidityWarningFunc:
+ * @ctx:  usually an xmlValidCtxtPtr to a validity error context,
+ *        but comes from ctxt->userData (which normally contains such
+ *        a pointer); ctxt->userData can be changed by the user.
+ * @msg:  the string to format *printf like vararg
+ * @...:  remaining arguments to the format
+ *
+ * Callback called when a validity warning is found. This is a message
+ * oriented function similar to an *printf function.
+ */
+typedef void (XMLCDECL *xmlValidityWarningFunc) (void *ctx,
+			       const char *msg,
+			       ...) ATTRIBUTE_PRINTF(2,3);
+
+#ifdef IN_LIBXML
+/**
+ * XML_CTXT_FINISH_DTD_0:
+ *
+ * Special value for finishDtd field when embedded in an xmlParserCtxt
+ */
+#define XML_CTXT_FINISH_DTD_0 0xabcd1234
+/**
+ * XML_CTXT_FINISH_DTD_1:
+ *
+ * Special value for finishDtd field when embedded in an xmlParserCtxt
+ */
+#define XML_CTXT_FINISH_DTD_1 0xabcd1235
+#endif
+
+/*
+ * xmlValidCtxt:
+ * An xmlValidCtxt is used for error reporting when validating.
+ */
+typedef struct _xmlValidCtxt xmlValidCtxt;
+typedef xmlValidCtxt *xmlValidCtxtPtr;
+struct _xmlValidCtxt {
+    void *userData;			/* user specific data block */
+    xmlValidityErrorFunc error;		/* the callback in case of errors */
+    xmlValidityWarningFunc warning;	/* the callback in case of warning */
+
+    /* Node analysis stack used when validating within entities */
+    xmlNodePtr         node;          /* Current parsed Node */
+    int                nodeNr;        /* Depth of the parsing stack */
+    int                nodeMax;       /* Max depth of the parsing stack */
+    xmlNodePtr        *nodeTab;       /* array of nodes */
+
+    unsigned int     finishDtd;       /* finished validating the Dtd ? */
+    xmlDocPtr              doc;       /* the document */
+    int                  valid;       /* temporary validity check result */
+
+    /* state state used for non-determinist content validation */
+    xmlValidState     *vstate;        /* current state */
+    int                vstateNr;      /* Depth of the validation stack */
+    int                vstateMax;     /* Max depth of the validation stack */
+    xmlValidState     *vstateTab;     /* array of validation states */
+
+#ifdef LIBXML_REGEXP_ENABLED
+    xmlAutomataPtr            am;     /* the automata */
+    xmlAutomataStatePtr    state;     /* used to build the automata */
+#else
+    void                     *am;
+    void                  *state;
+#endif
+};
+
+/*
+ * ALL notation declarations are stored in a table.
+ * There is one table per DTD.
+ */
+
+typedef struct _xmlHashTable xmlNotationTable;
+typedef xmlNotationTable *xmlNotationTablePtr;
+
+/*
+ * ALL element declarations are stored in a table.
+ * There is one table per DTD.
+ */
+
+typedef struct _xmlHashTable xmlElementTable;
+typedef xmlElementTable *xmlElementTablePtr;
+
+/*
+ * ALL attribute declarations are stored in a table.
+ * There is one table per DTD.
+ */
+
+typedef struct _xmlHashTable xmlAttributeTable;
+typedef xmlAttributeTable *xmlAttributeTablePtr;
+
+/*
+ * ALL IDs attributes are stored in a table.
+ * There is one table per document.
+ */
+
+typedef struct _xmlHashTable xmlIDTable;
+typedef xmlIDTable *xmlIDTablePtr;
+
+/*
+ * ALL Refs attributes are stored in a table.
+ * There is one table per document.
+ */
+
+typedef struct _xmlHashTable xmlRefTable;
+typedef xmlRefTable *xmlRefTablePtr;
+
+/* Notation */
+XMLPUBFUN xmlNotationPtr XMLCALL	    
+		xmlAddNotationDecl	(xmlValidCtxtPtr ctxt,
+					 xmlDtdPtr dtd,
+					 const xmlChar *name,
+					 const xmlChar *PublicID,
+					 const xmlChar *SystemID);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlNotationTablePtr XMLCALL 
+		xmlCopyNotationTable	(xmlNotationTablePtr table);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN void XMLCALL		    
+		xmlFreeNotationTable	(xmlNotationTablePtr table);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL		    
+		xmlDumpNotationDecl	(xmlBufferPtr buf,
+					 xmlNotationPtr nota);
+XMLPUBFUN void XMLCALL		    
+		xmlDumpNotationTable	(xmlBufferPtr buf,
+					 xmlNotationTablePtr table);
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/* Element Content */
+/* the non Doc version are being deprecated */
+XMLPUBFUN xmlElementContentPtr XMLCALL 
+		xmlNewElementContent	(const xmlChar *name,
+					 xmlElementContentType type);
+XMLPUBFUN xmlElementContentPtr XMLCALL 
+		xmlCopyElementContent	(xmlElementContentPtr content);
+XMLPUBFUN void XMLCALL		     
+		xmlFreeElementContent	(xmlElementContentPtr cur);
+/* the new versions with doc argument */
+XMLPUBFUN xmlElementContentPtr XMLCALL 
+		xmlNewDocElementContent	(xmlDocPtr doc,
+					 const xmlChar *name,
+					 xmlElementContentType type);
+XMLPUBFUN xmlElementContentPtr XMLCALL 
+		xmlCopyDocElementContent(xmlDocPtr doc,
+					 xmlElementContentPtr content);
+XMLPUBFUN void XMLCALL		     
+		xmlFreeDocElementContent(xmlDocPtr doc,
+					 xmlElementContentPtr cur);
+XMLPUBFUN void XMLCALL		     
+		xmlSnprintfElementContent(char *buf,
+					 int size,
+	                                 xmlElementContentPtr content,
+					 int englob);
+#ifdef LIBXML_OUTPUT_ENABLED
+/* DEPRECATED */
+XMLPUBFUN void XMLCALL		     
+		xmlSprintfElementContent(char *buf,
+	                                 xmlElementContentPtr content,
+					 int englob);
+#endif /* LIBXML_OUTPUT_ENABLED */
+/* DEPRECATED */
+
+/* Element */
+XMLPUBFUN xmlElementPtr XMLCALL	   
+		xmlAddElementDecl	(xmlValidCtxtPtr ctxt,
+					 xmlDtdPtr dtd,
+					 const xmlChar *name,
+					 xmlElementTypeVal type,
+					 xmlElementContentPtr content);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlElementTablePtr XMLCALL 
+		xmlCopyElementTable	(xmlElementTablePtr table);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN void XMLCALL		   
+		xmlFreeElementTable	(xmlElementTablePtr table);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL		   
+		xmlDumpElementTable	(xmlBufferPtr buf,
+					 xmlElementTablePtr table);
+XMLPUBFUN void XMLCALL		   
+		xmlDumpElementDecl	(xmlBufferPtr buf,
+					 xmlElementPtr elem);
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/* Enumeration */
+XMLPUBFUN xmlEnumerationPtr XMLCALL 
+		xmlCreateEnumeration	(const xmlChar *name);
+XMLPUBFUN void XMLCALL		   
+		xmlFreeEnumeration	(xmlEnumerationPtr cur);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlEnumerationPtr XMLCALL  
+		xmlCopyEnumeration	(xmlEnumerationPtr cur);
+#endif /* LIBXML_TREE_ENABLED */
+
+/* Attribute */
+XMLPUBFUN xmlAttributePtr XMLCALL	    
+		xmlAddAttributeDecl	(xmlValidCtxtPtr ctxt,
+					 xmlDtdPtr dtd,
+					 const xmlChar *elem,
+					 const xmlChar *name,
+					 const xmlChar *ns,
+					 xmlAttributeType type,
+					 xmlAttributeDefault def,
+					 const xmlChar *defaultValue,
+					 xmlEnumerationPtr tree);
+#ifdef LIBXML_TREE_ENABLED
+XMLPUBFUN xmlAttributeTablePtr XMLCALL 
+		xmlCopyAttributeTable  (xmlAttributeTablePtr table);
+#endif /* LIBXML_TREE_ENABLED */
+XMLPUBFUN void XMLCALL		     
+		xmlFreeAttributeTable  (xmlAttributeTablePtr table);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL		     
+		xmlDumpAttributeTable  (xmlBufferPtr buf,
+					xmlAttributeTablePtr table);
+XMLPUBFUN void XMLCALL		     
+		xmlDumpAttributeDecl   (xmlBufferPtr buf,
+					xmlAttributePtr attr);
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/* IDs */
+XMLPUBFUN xmlIDPtr XMLCALL	
+		xmlAddID	       (xmlValidCtxtPtr ctxt,
+					xmlDocPtr doc,
+					const xmlChar *value,
+					xmlAttrPtr attr);
+XMLPUBFUN void XMLCALL		
+		xmlFreeIDTable	       (xmlIDTablePtr table);
+XMLPUBFUN xmlAttrPtr XMLCALL	
+		xmlGetID	       (xmlDocPtr doc,
+					const xmlChar *ID);
+XMLPUBFUN int XMLCALL		
+		xmlIsID		       (xmlDocPtr doc,
+					xmlNodePtr elem,
+					xmlAttrPtr attr);
+XMLPUBFUN int XMLCALL		
+		xmlRemoveID	       (xmlDocPtr doc, 
+					xmlAttrPtr attr);
+
+/* IDREFs */
+XMLPUBFUN xmlRefPtr XMLCALL	
+		xmlAddRef	       (xmlValidCtxtPtr ctxt,
+					xmlDocPtr doc,
+					const xmlChar *value,
+					xmlAttrPtr attr);
+XMLPUBFUN void XMLCALL		
+		xmlFreeRefTable	       (xmlRefTablePtr table);
+XMLPUBFUN int XMLCALL		
+		xmlIsRef	       (xmlDocPtr doc,
+					xmlNodePtr elem,
+					xmlAttrPtr attr);
+XMLPUBFUN int XMLCALL		
+		xmlRemoveRef	       (xmlDocPtr doc, 
+					xmlAttrPtr attr);
+XMLPUBFUN xmlListPtr XMLCALL	
+		xmlGetRefs	       (xmlDocPtr doc,
+					const xmlChar *ID);
+
+/**
+ * The public function calls related to validity checking.
+ */
+#ifdef LIBXML_VALID_ENABLED
+/* Allocate/Release Validation Contexts */
+XMLPUBFUN xmlValidCtxtPtr XMLCALL	    
+		xmlNewValidCtxt(void);
+XMLPUBFUN void XMLCALL		    
+		xmlFreeValidCtxt(xmlValidCtxtPtr);
+
+XMLPUBFUN int XMLCALL		
+		xmlValidateRoot		(xmlValidCtxtPtr ctxt,
+					 xmlDocPtr doc);
+XMLPUBFUN int XMLCALL		
+		xmlValidateElementDecl	(xmlValidCtxtPtr ctxt,
+					 xmlDocPtr doc,
+		                         xmlElementPtr elem);
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlValidNormalizeAttributeValue(xmlDocPtr doc,
+					 xmlNodePtr elem,
+					 const xmlChar *name,
+					 const xmlChar *value);
+XMLPUBFUN xmlChar * XMLCALL	
+		xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt,
+					 xmlDocPtr doc,
+					 xmlNodePtr elem,
+					 const xmlChar *name,
+					 const xmlChar *value);
+XMLPUBFUN int XMLCALL		
+		xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt,
+					 xmlDocPtr doc,
+		                         xmlAttributePtr attr);
+XMLPUBFUN int XMLCALL		
+		xmlValidateAttributeValue(xmlAttributeType type,
+					 const xmlChar *value);
+XMLPUBFUN int XMLCALL		
+		xmlValidateNotationDecl	(xmlValidCtxtPtr ctxt,
+					 xmlDocPtr doc,
+		                         xmlNotationPtr nota);
+XMLPUBFUN int XMLCALL		
+		xmlValidateDtd		(xmlValidCtxtPtr ctxt,
+					 xmlDocPtr doc,
+					 xmlDtdPtr dtd);
+XMLPUBFUN int XMLCALL		
+		xmlValidateDtdFinal	(xmlValidCtxtPtr ctxt,
+					 xmlDocPtr doc);
+XMLPUBFUN int XMLCALL		
+		xmlValidateDocument	(xmlValidCtxtPtr ctxt,
+					 xmlDocPtr doc);
+XMLPUBFUN int XMLCALL		
+		xmlValidateElement	(xmlValidCtxtPtr ctxt,
+					 xmlDocPtr doc,
+					 xmlNodePtr elem);
+XMLPUBFUN int XMLCALL		
+		xmlValidateOneElement	(xmlValidCtxtPtr ctxt,
+					 xmlDocPtr doc,
+		                         xmlNodePtr elem);
+XMLPUBFUN int XMLCALL	
+		xmlValidateOneAttribute	(xmlValidCtxtPtr ctxt,
+					 xmlDocPtr doc,
+					 xmlNodePtr	elem,
+					 xmlAttrPtr attr,
+					 const xmlChar *value);
+XMLPUBFUN int XMLCALL		
+		xmlValidateOneNamespace	(xmlValidCtxtPtr ctxt,
+					 xmlDocPtr doc,
+					 xmlNodePtr elem,
+					 const xmlChar *prefix,
+					 xmlNsPtr ns,
+					 const xmlChar *value);
+XMLPUBFUN int XMLCALL		
+		xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt,
+					 xmlDocPtr doc);
+#endif /* LIBXML_VALID_ENABLED */
+
+#if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+XMLPUBFUN int XMLCALL		
+		xmlValidateNotationUse	(xmlValidCtxtPtr ctxt,
+					 xmlDocPtr doc,
+					 const xmlChar *notationName);
+#endif /* LIBXML_VALID_ENABLED or LIBXML_SCHEMAS_ENABLED */
+
+XMLPUBFUN int XMLCALL		
+		xmlIsMixedElement	(xmlDocPtr doc,
+					 const xmlChar *name);
+XMLPUBFUN xmlAttributePtr XMLCALL	
+		xmlGetDtdAttrDesc	(xmlDtdPtr dtd,
+					 const xmlChar *elem,
+					 const xmlChar *name);
+XMLPUBFUN xmlAttributePtr XMLCALL	
+		xmlGetDtdQAttrDesc	(xmlDtdPtr dtd,
+					 const xmlChar *elem,
+					 const xmlChar *name,
+					 const xmlChar *prefix);
+XMLPUBFUN xmlNotationPtr XMLCALL	
+		xmlGetDtdNotationDesc	(xmlDtdPtr dtd,
+					 const xmlChar *name);
+XMLPUBFUN xmlElementPtr XMLCALL	
+		xmlGetDtdQElementDesc	(xmlDtdPtr dtd,
+					 const xmlChar *name,
+					 const xmlChar *prefix);
+XMLPUBFUN xmlElementPtr XMLCALL	
+		xmlGetDtdElementDesc	(xmlDtdPtr dtd,
+					 const xmlChar *name);
+
+#ifdef LIBXML_VALID_ENABLED
+
+XMLPUBFUN int XMLCALL		
+		xmlValidGetPotentialChildren(xmlElementContent *ctree,
+					 const xmlChar **names,
+					 int *len,
+					 int max);
+
+XMLPUBFUN int XMLCALL		
+		xmlValidGetValidElements(xmlNode *prev,
+					 xmlNode *next,
+					 const xmlChar **names,
+					 int max);
+XMLPUBFUN int XMLCALL		
+		xmlValidateNameValue	(const xmlChar *value);
+XMLPUBFUN int XMLCALL		
+		xmlValidateNamesValue	(const xmlChar *value);
+XMLPUBFUN int XMLCALL		
+		xmlValidateNmtokenValue	(const xmlChar *value);
+XMLPUBFUN int XMLCALL		
+		xmlValidateNmtokensValue(const xmlChar *value);
+
+#ifdef LIBXML_REGEXP_ENABLED
+/*
+ * Validation based on the regexp support
+ */
+XMLPUBFUN int XMLCALL		
+		xmlValidBuildContentModel(xmlValidCtxtPtr ctxt,
+					 xmlElementPtr elem);
+
+XMLPUBFUN int XMLCALL		
+		xmlValidatePushElement	(xmlValidCtxtPtr ctxt,
+					 xmlDocPtr doc,
+					 xmlNodePtr elem,
+					 const xmlChar *qname);
+XMLPUBFUN int XMLCALL		
+		xmlValidatePushCData	(xmlValidCtxtPtr ctxt,
+					 const xmlChar *data,
+					 int len);
+XMLPUBFUN int XMLCALL		
+		xmlValidatePopElement	(xmlValidCtxtPtr ctxt,
+					 xmlDocPtr doc,
+					 xmlNodePtr elem,
+					 const xmlChar *qname);
+#endif /* LIBXML_REGEXP_ENABLED */
+#endif /* LIBXML_VALID_ENABLED */
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_VALID_H__ */
diff --git a/interfaces/ext/libxml/xinclude.h b/interfaces/ext/libxml/xinclude.h
new file mode 100644
index 0000000..ba9c9b5
--- /dev/null
+++ b/interfaces/ext/libxml/xinclude.h
@@ -0,0 +1,125 @@
+/*
+ * Summary: implementation of XInclude
+ * Description: API to handle XInclude processing,
+ * implements the
+ * World Wide Web Consortium Last Call Working Draft 10 November 2003
+ * http://www.w3.org/TR/2003/WD-xinclude-20031110
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XINCLUDE_H__
+#define __XML_XINCLUDE_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef LIBXML_XINCLUDE_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * XINCLUDE_NS:
+ *
+ * Macro defining the Xinclude namespace: http://www.w3.org/2003/XInclude
+ */
+#define XINCLUDE_NS (const xmlChar *) "http://www.w3.org/2003/XInclude"
+/**
+ * XINCLUDE_OLD_NS:
+ *
+ * Macro defining the draft Xinclude namespace: http://www.w3.org/2001/XInclude
+ */
+#define XINCLUDE_OLD_NS (const xmlChar *) "http://www.w3.org/2001/XInclude"
+/**
+ * XINCLUDE_NODE:
+ *
+ * Macro defining "include"
+ */
+#define XINCLUDE_NODE (const xmlChar *) "include"
+/**
+ * XINCLUDE_FALLBACK:
+ *
+ * Macro defining "fallback"
+ */
+#define XINCLUDE_FALLBACK (const xmlChar *) "fallback"
+/**
+ * XINCLUDE_HREF:
+ *
+ * Macro defining "href"
+ */
+#define XINCLUDE_HREF (const xmlChar *) "href"
+/**
+ * XINCLUDE_PARSE:
+ *
+ * Macro defining "parse"
+ */
+#define XINCLUDE_PARSE (const xmlChar *) "parse"
+/**
+ * XINCLUDE_PARSE_XML:
+ *
+ * Macro defining "xml"
+ */
+#define XINCLUDE_PARSE_XML (const xmlChar *) "xml"
+/**
+ * XINCLUDE_PARSE_TEXT:
+ *
+ * Macro defining "text"
+ */
+#define XINCLUDE_PARSE_TEXT (const xmlChar *) "text"
+/**
+ * XINCLUDE_PARSE_ENCODING:
+ *
+ * Macro defining "encoding"
+ */
+#define XINCLUDE_PARSE_ENCODING (const xmlChar *) "encoding"
+/**
+ * XINCLUDE_PARSE_XPOINTER:
+ *
+ * Macro defining "xpointer"
+ */
+#define XINCLUDE_PARSE_XPOINTER (const xmlChar *) "xpointer"
+
+typedef struct _xmlXIncludeCtxt xmlXIncludeCtxt;
+typedef xmlXIncludeCtxt *xmlXIncludeCtxtPtr;
+
+/*
+ * standalone processing
+ */
+XMLPUBFUN int XMLCALL	
+		xmlXIncludeProcess	(xmlDocPtr doc);
+XMLPUBFUN int XMLCALL	
+		xmlXIncludeProcessFlags	(xmlDocPtr doc,
+					 int flags);
+XMLPUBFUN int XMLCALL	
+		xmlXIncludeProcessFlagsData(xmlDocPtr doc,
+					 int flags,
+					 void *data);
+XMLPUBFUN int XMLCALL	
+		xmlXIncludeProcessTree	(xmlNodePtr tree);
+XMLPUBFUN int XMLCALL	
+		xmlXIncludeProcessTreeFlags(xmlNodePtr tree,
+					 int flags);
+/*
+ * contextual processing
+ */
+XMLPUBFUN xmlXIncludeCtxtPtr XMLCALL
+		xmlXIncludeNewContext	(xmlDocPtr doc);
+XMLPUBFUN int XMLCALL
+		xmlXIncludeSetFlags	(xmlXIncludeCtxtPtr ctxt,
+					 int flags);
+XMLPUBFUN void XMLCALL
+		xmlXIncludeFreeContext	(xmlXIncludeCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+		xmlXIncludeProcessNode	(xmlXIncludeCtxtPtr ctxt,
+					 xmlNodePtr tree);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_XINCLUDE_ENABLED */
+
+#endif /* __XML_XINCLUDE_H__ */
diff --git a/interfaces/ext/libxml/xlink.h b/interfaces/ext/libxml/xlink.h
new file mode 100644
index 0000000..083c7ed
--- /dev/null
+++ b/interfaces/ext/libxml/xlink.h
@@ -0,0 +1,189 @@
+/*
+ * Summary: unfinished XLink detection module
+ * Description: unfinished XLink detection module
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XLINK_H__
+#define __XML_XLINK_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef LIBXML_XPTR_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Various defines for the various Link properties.
+ *
+ * NOTE: the link detection layer will try to resolve QName expansion
+ *       of namespaces. If "foo" is the prefix for "http://foo.com/"
+ *       then the link detection layer will expand role="foo:myrole"
+ *       to "http://foo.com/:myrole".
+ * NOTE: the link detection layer will expand URI-Refences found on
+ *       href attributes by using the base mechanism if found.
+ */
+typedef xmlChar *xlinkHRef;
+typedef xmlChar *xlinkRole;
+typedef xmlChar *xlinkTitle;
+
+typedef enum {
+    XLINK_TYPE_NONE = 0,
+    XLINK_TYPE_SIMPLE,
+    XLINK_TYPE_EXTENDED,
+    XLINK_TYPE_EXTENDED_SET
+} xlinkType;
+
+typedef enum {
+    XLINK_SHOW_NONE = 0,
+    XLINK_SHOW_NEW,
+    XLINK_SHOW_EMBED,
+    XLINK_SHOW_REPLACE
+} xlinkShow;
+
+typedef enum {
+    XLINK_ACTUATE_NONE = 0,
+    XLINK_ACTUATE_AUTO,
+    XLINK_ACTUATE_ONREQUEST
+} xlinkActuate;
+
+/**
+ * xlinkNodeDetectFunc:
+ * @ctx:  user data pointer
+ * @node:  the node to check
+ * 
+ * This is the prototype for the link detection routine.
+ * It calls the default link detection callbacks upon link detection.
+ */
+typedef void (*xlinkNodeDetectFunc) (void *ctx, xmlNodePtr node);
+
+/*
+ * The link detection module interact with the upper layers using
+ * a set of callback registered at parsing time.
+ */
+
+/**
+ * xlinkSimpleLinkFunk:
+ * @ctx:  user data pointer
+ * @node:  the node carrying the link
+ * @href:  the target of the link
+ * @role:  the role string
+ * @title:  the link title
+ *
+ * This is the prototype for a simple link detection callback.
+ */
+typedef void
+(*xlinkSimpleLinkFunk)	(void *ctx,
+			 xmlNodePtr node,
+			 const xlinkHRef href,
+			 const xlinkRole role,
+			 const xlinkTitle title);
+
+/**
+ * xlinkExtendedLinkFunk:
+ * @ctx:  user data pointer
+ * @node:  the node carrying the link
+ * @nbLocators: the number of locators detected on the link
+ * @hrefs:  pointer to the array of locator hrefs
+ * @roles:  pointer to the array of locator roles
+ * @nbArcs: the number of arcs detected on the link
+ * @from:  pointer to the array of source roles found on the arcs
+ * @to:  pointer to the array of target roles found on the arcs
+ * @show:  array of values for the show attributes found on the arcs
+ * @actuate:  array of values for the actuate attributes found on the arcs
+ * @nbTitles: the number of titles detected on the link
+ * @title:  array of titles detected on the link
+ * @langs:  array of xml:lang values for the titles
+ *
+ * This is the prototype for a extended link detection callback.
+ */
+typedef void
+(*xlinkExtendedLinkFunk)(void *ctx,
+			 xmlNodePtr node,
+			 int nbLocators,
+			 const xlinkHRef *hrefs,
+			 const xlinkRole *roles,
+			 int nbArcs,
+			 const xlinkRole *from,
+			 const xlinkRole *to,
+			 xlinkShow *show,
+			 xlinkActuate *actuate,
+			 int nbTitles,
+			 const xlinkTitle *titles,
+			 const xmlChar **langs);
+
+/**
+ * xlinkExtendedLinkSetFunk:
+ * @ctx:  user data pointer
+ * @node:  the node carrying the link
+ * @nbLocators: the number of locators detected on the link
+ * @hrefs:  pointer to the array of locator hrefs
+ * @roles:  pointer to the array of locator roles
+ * @nbTitles: the number of titles detected on the link
+ * @title:  array of titles detected on the link
+ * @langs:  array of xml:lang values for the titles
+ *
+ * This is the prototype for a extended link set detection callback.
+ */
+typedef void
+(*xlinkExtendedLinkSetFunk)	(void *ctx,
+				 xmlNodePtr node,
+				 int nbLocators,
+				 const xlinkHRef *hrefs,
+				 const xlinkRole *roles,
+				 int nbTitles,
+				 const xlinkTitle *titles,
+				 const xmlChar **langs);
+
+/**
+ * This is the structure containing a set of Links detection callbacks.
+ *
+ * There is no default xlink callbacks, if one want to get link
+ * recognition activated, those call backs must be provided before parsing.
+ */
+typedef struct _xlinkHandler xlinkHandler;
+typedef xlinkHandler *xlinkHandlerPtr;
+struct _xlinkHandler {
+    xlinkSimpleLinkFunk simple;
+    xlinkExtendedLinkFunk extended;
+    xlinkExtendedLinkSetFunk set;
+};
+
+/*
+ * The default detection routine, can be overridden, they call the default
+ * detection callbacks. 
+ */
+
+XMLPUBFUN xlinkNodeDetectFunc XMLCALL	
+		xlinkGetDefaultDetect	(void);
+XMLPUBFUN void XMLCALL			
+		xlinkSetDefaultDetect	(xlinkNodeDetectFunc func);
+
+/*
+ * Routines to set/get the default handlers.
+ */
+XMLPUBFUN xlinkHandlerPtr XMLCALL	
+		xlinkGetDefaultHandler	(void);
+XMLPUBFUN void XMLCALL		
+		xlinkSetDefaultHandler	(xlinkHandlerPtr handler);
+
+/*
+ * Link detection module itself.
+ */
+XMLPUBFUN xlinkType XMLCALL	 
+		xlinkIsLink		(xmlDocPtr doc,
+					 xmlNodePtr node);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_XPTR_ENABLED */
+
+#endif /* __XML_XLINK_H__ */
diff --git a/interfaces/ext/libxml/xmlIO.h b/interfaces/ext/libxml/xmlIO.h
new file mode 100644
index 0000000..eea9ed6
--- /dev/null
+++ b/interfaces/ext/libxml/xmlIO.h
@@ -0,0 +1,360 @@
+/*
+ * Summary: interface for the I/O interfaces used by the parser
+ * Description: interface for the I/O interfaces used by the parser
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_IO_H__
+#define __XML_IO_H__
+
+#include <stdio.h>
+#include <libxml/xmlversion.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Those are the functions and datatypes for the parser input
+ * I/O structures.
+ */
+
+/**
+ * xmlInputMatchCallback:
+ * @filename: the filename or URI
+ *
+ * Callback used in the I/O Input API to detect if the current handler 
+ * can provide input fonctionnalities for this resource.
+ *
+ * Returns 1 if yes and 0 if another Input module should be used
+ */
+typedef int (XMLCALL *xmlInputMatchCallback) (char const *filename);
+/**
+ * xmlInputOpenCallback:
+ * @filename: the filename or URI
+ *
+ * Callback used in the I/O Input API to open the resource
+ *
+ * Returns an Input context or NULL in case or error
+ */
+typedef void * (XMLCALL *xmlInputOpenCallback) (char const *filename);
+/**
+ * xmlInputReadCallback:
+ * @context:  an Input context
+ * @buffer:  the buffer to store data read
+ * @len:  the length of the buffer in bytes
+ *
+ * Callback used in the I/O Input API to read the resource
+ *
+ * Returns the number of bytes read or -1 in case of error
+ */
+typedef int (XMLCALL *xmlInputReadCallback) (void * context, char * buffer, int len);
+/**
+ * xmlInputCloseCallback:
+ * @context:  an Input context
+ *
+ * Callback used in the I/O Input API to close the resource
+ *
+ * Returns 0 or -1 in case of error
+ */
+typedef int (XMLCALL *xmlInputCloseCallback) (void * context);
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/*
+ * Those are the functions and datatypes for the library output
+ * I/O structures.
+ */
+
+/**
+ * xmlOutputMatchCallback:
+ * @filename: the filename or URI
+ *
+ * Callback used in the I/O Output API to detect if the current handler 
+ * can provide output fonctionnalities for this resource.
+ *
+ * Returns 1 if yes and 0 if another Output module should be used
+ */
+typedef int (XMLCALL *xmlOutputMatchCallback) (char const *filename);
+/**
+ * xmlOutputOpenCallback:
+ * @filename: the filename or URI
+ *
+ * Callback used in the I/O Output API to open the resource
+ *
+ * Returns an Output context or NULL in case or error
+ */
+typedef void * (XMLCALL *xmlOutputOpenCallback) (char const *filename);
+/**
+ * xmlOutputWriteCallback:
+ * @context:  an Output context
+ * @buffer:  the buffer of data to write
+ * @len:  the length of the buffer in bytes
+ *
+ * Callback used in the I/O Output API to write to the resource
+ *
+ * Returns the number of bytes written or -1 in case of error
+ */
+typedef int (XMLCALL *xmlOutputWriteCallback) (void * context, const char * buffer,
+                                       int len);
+/**
+ * xmlOutputCloseCallback:
+ * @context:  an Output context
+ *
+ * Callback used in the I/O Output API to close the resource
+ *
+ * Returns 0 or -1 in case of error
+ */
+typedef int (XMLCALL *xmlOutputCloseCallback) (void * context);
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#include <libxml/globals.h>
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/encoding.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+struct _xmlParserInputBuffer {
+    void*                  context;
+    xmlInputReadCallback   readcallback;
+    xmlInputCloseCallback  closecallback;
+    
+    xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
+    
+    xmlBufferPtr buffer;    /* Local buffer encoded in UTF-8 */
+    xmlBufferPtr raw;       /* if encoder != NULL buffer for raw input */
+    int	compressed;	    /* -1=unknown, 0=not compressed, 1=compressed */
+    int error;
+    unsigned long rawconsumed;/* amount consumed from raw */
+};
+
+
+#ifdef LIBXML_OUTPUT_ENABLED
+struct _xmlOutputBuffer {
+    void*                   context;
+    xmlOutputWriteCallback  writecallback;
+    xmlOutputCloseCallback  closecallback;
+    
+    xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
+    
+    xmlBufferPtr buffer;    /* Local buffer encoded in UTF-8 or ISOLatin */
+    xmlBufferPtr conv;      /* if encoder != NULL buffer for output */
+    int written;            /* total number of byte written */
+    int error;
+};
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+/*
+ * Interfaces for input
+ */
+XMLPUBFUN void XMLCALL	
+	xmlCleanupInputCallbacks		(void);
+
+XMLPUBFUN int XMLCALL
+	xmlPopInputCallbacks			(void);
+
+XMLPUBFUN void XMLCALL	
+	xmlRegisterDefaultInputCallbacks	(void);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+	xmlAllocParserInputBuffer		(xmlCharEncoding enc);
+
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+	xmlParserInputBufferCreateFilename	(const char *URI,
+                                                 xmlCharEncoding enc);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+	xmlParserInputBufferCreateFile		(FILE *file,
+                                                 xmlCharEncoding enc);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+	xmlParserInputBufferCreateFd		(int fd,
+	                                         xmlCharEncoding enc);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+	xmlParserInputBufferCreateMem		(const char *mem, int size,
+	                                         xmlCharEncoding enc);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+	xmlParserInputBufferCreateStatic	(const char *mem, int size,
+	                                         xmlCharEncoding enc);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+	xmlParserInputBufferCreateIO		(xmlInputReadCallback   ioread,
+						 xmlInputCloseCallback  ioclose,
+						 void *ioctx,
+	                                         xmlCharEncoding enc);
+XMLPUBFUN int XMLCALL	
+	xmlParserInputBufferRead		(xmlParserInputBufferPtr in,
+						 int len);
+XMLPUBFUN int XMLCALL	
+	xmlParserInputBufferGrow		(xmlParserInputBufferPtr in,
+						 int len);
+XMLPUBFUN int XMLCALL	
+	xmlParserInputBufferPush		(xmlParserInputBufferPtr in,
+						 int len,
+						 const char *buf);
+XMLPUBFUN void XMLCALL	
+	xmlFreeParserInputBuffer		(xmlParserInputBufferPtr in);
+XMLPUBFUN char * XMLCALL	
+	xmlParserGetDirectory			(const char *filename);
+
+XMLPUBFUN int XMLCALL     
+	xmlRegisterInputCallbacks		(xmlInputMatchCallback matchFunc,
+						 xmlInputOpenCallback openFunc,
+						 xmlInputReadCallback readFunc,
+						 xmlInputCloseCallback closeFunc);
+
+xmlParserInputBufferPtr
+	__xmlParserInputBufferCreateFilename(const char *URI,
+										xmlCharEncoding enc);
+
+#ifdef LIBXML_OUTPUT_ENABLED
+/*
+ * Interfaces for output
+ */
+XMLPUBFUN void XMLCALL	
+	xmlCleanupOutputCallbacks		(void);
+XMLPUBFUN void XMLCALL	
+	xmlRegisterDefaultOutputCallbacks(void);
+XMLPUBFUN xmlOutputBufferPtr XMLCALL
+	xmlAllocOutputBuffer		(xmlCharEncodingHandlerPtr encoder);
+
+XMLPUBFUN xmlOutputBufferPtr XMLCALL
+	xmlOutputBufferCreateFilename	(const char *URI,
+					 xmlCharEncodingHandlerPtr encoder,
+					 int compression);
+
+XMLPUBFUN xmlOutputBufferPtr XMLCALL
+	xmlOutputBufferCreateFile	(FILE *file,
+					 xmlCharEncodingHandlerPtr encoder);
+
+XMLPUBFUN xmlOutputBufferPtr XMLCALL
+	xmlOutputBufferCreateBuffer	(xmlBufferPtr buffer,
+					 xmlCharEncodingHandlerPtr encoder);
+
+XMLPUBFUN xmlOutputBufferPtr XMLCALL
+	xmlOutputBufferCreateFd		(int fd,
+					 xmlCharEncodingHandlerPtr encoder);
+
+XMLPUBFUN xmlOutputBufferPtr XMLCALL
+	xmlOutputBufferCreateIO		(xmlOutputWriteCallback   iowrite,
+					 xmlOutputCloseCallback  ioclose,
+					 void *ioctx,
+					 xmlCharEncodingHandlerPtr encoder);
+
+XMLPUBFUN int XMLCALL	
+	xmlOutputBufferWrite		(xmlOutputBufferPtr out,
+					 int len,
+					 const char *buf);
+XMLPUBFUN int XMLCALL	
+	xmlOutputBufferWriteString	(xmlOutputBufferPtr out,
+					 const char *str);
+XMLPUBFUN int XMLCALL	
+	xmlOutputBufferWriteEscape	(xmlOutputBufferPtr out,
+					 const xmlChar *str,
+					 xmlCharEncodingOutputFunc escaping);
+
+XMLPUBFUN int XMLCALL	
+	xmlOutputBufferFlush		(xmlOutputBufferPtr out);
+XMLPUBFUN int XMLCALL	
+	xmlOutputBufferClose		(xmlOutputBufferPtr out);
+
+XMLPUBFUN int XMLCALL     
+	xmlRegisterOutputCallbacks	(xmlOutputMatchCallback matchFunc,
+					 xmlOutputOpenCallback openFunc,
+					 xmlOutputWriteCallback writeFunc,
+					 xmlOutputCloseCallback closeFunc);
+
+xmlOutputBufferPtr
+	__xmlOutputBufferCreateFilename(const char *URI,
+                              xmlCharEncodingHandlerPtr encoder,
+                              int compression);
+
+#ifdef LIBXML_HTTP_ENABLED
+/*  This function only exists if HTTP support built into the library  */
+XMLPUBFUN void XMLCALL	
+	xmlRegisterHTTPPostCallbacks	(void );
+#endif /* LIBXML_HTTP_ENABLED */
+	
+#endif /* LIBXML_OUTPUT_ENABLED */
+
+XMLPUBFUN xmlParserInputPtr XMLCALL
+	xmlCheckHTTPInput		(xmlParserCtxtPtr ctxt,
+					 xmlParserInputPtr ret);
+
+/*
+ * A predefined entity loader disabling network accesses
+ */
+XMLPUBFUN xmlParserInputPtr XMLCALL 
+	xmlNoNetExternalEntityLoader	(const char *URL,
+					 const char *ID,
+					 xmlParserCtxtPtr ctxt);
+
+/* 
+ * xmlNormalizeWindowsPath is obsolete, don't use it. 
+ * Check xmlCanonicPath in uri.h for a better alternative.
+ */
+XMLPUBFUN xmlChar * XMLCALL 
+	xmlNormalizeWindowsPath		(const xmlChar *path);
+
+XMLPUBFUN int XMLCALL	
+	xmlCheckFilename		(const char *path);
+/**
+ * Default 'file://' protocol callbacks 
+ */
+XMLPUBFUN int XMLCALL	
+	xmlFileMatch 			(const char *filename);
+XMLPUBFUN void * XMLCALL	
+	xmlFileOpen 			(const char *filename);
+XMLPUBFUN int XMLCALL	
+	xmlFileRead 			(void * context, 
+					 char * buffer, 
+					 int len);
+XMLPUBFUN int XMLCALL	
+	xmlFileClose 			(void * context);
+
+/**
+ * Default 'http://' protocol callbacks 
+ */
+#ifdef LIBXML_HTTP_ENABLED
+XMLPUBFUN int XMLCALL	
+	xmlIOHTTPMatch 			(const char *filename);
+XMLPUBFUN void * XMLCALL	
+	xmlIOHTTPOpen 			(const char *filename);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void * XMLCALL	
+	xmlIOHTTPOpenW			(const char * post_uri,
+					 int   compression );
+#endif /* LIBXML_OUTPUT_ENABLED */
+XMLPUBFUN int XMLCALL 	
+	xmlIOHTTPRead			(void * context, 
+					 char * buffer, 
+					 int len);
+XMLPUBFUN int XMLCALL	
+	xmlIOHTTPClose 			(void * context);
+#endif /* LIBXML_HTTP_ENABLED */
+
+/**
+ * Default 'ftp://' protocol callbacks 
+ */
+#ifdef LIBXML_FTP_ENABLED 
+XMLPUBFUN int XMLCALL	
+	xmlIOFTPMatch 			(const char *filename);
+XMLPUBFUN void * XMLCALL	
+	xmlIOFTPOpen 			(const char *filename);
+XMLPUBFUN int XMLCALL 	
+	xmlIOFTPRead			(void * context, 
+					 char * buffer, 
+					 int len);
+XMLPUBFUN int XMLCALL 	
+	xmlIOFTPClose 			(void * context);
+#endif /* LIBXML_FTP_ENABLED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __XML_IO_H__ */
diff --git a/interfaces/ext/libxml/xmlautomata.h b/interfaces/ext/libxml/xmlautomata.h
new file mode 100644
index 0000000..f98b55e
--- /dev/null
+++ b/interfaces/ext/libxml/xmlautomata.h
@@ -0,0 +1,146 @@
+/*
+ * Summary: API to build regexp automata
+ * Description: the API to build regexp automata
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_AUTOMATA_H__
+#define __XML_AUTOMATA_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+
+#ifdef LIBXML_REGEXP_ENABLED
+#ifdef LIBXML_AUTOMATA_ENABLED
+#include <libxml/xmlregexp.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlAutomataPtr:
+ *
+ * A libxml automata description, It can be compiled into a regexp
+ */
+typedef struct _xmlAutomata xmlAutomata;
+typedef xmlAutomata *xmlAutomataPtr;
+
+/**
+ * xmlAutomataStatePtr:
+ *
+ * A state int the automata description,
+ */
+typedef struct _xmlAutomataState xmlAutomataState;
+typedef xmlAutomataState *xmlAutomataStatePtr;
+
+/*
+ * Building API
+ */
+XMLPUBFUN xmlAutomataPtr XMLCALL		
+		    xmlNewAutomata		(void);
+XMLPUBFUN void XMLCALL			
+		    xmlFreeAutomata		(xmlAutomataPtr am);
+
+XMLPUBFUN xmlAutomataStatePtr XMLCALL	
+		    xmlAutomataGetInitState	(xmlAutomataPtr am);
+XMLPUBFUN int XMLCALL			
+		    xmlAutomataSetFinalState	(xmlAutomataPtr am,
+						 xmlAutomataStatePtr state);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL	
+		    xmlAutomataNewState		(xmlAutomataPtr am);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL	
+		    xmlAutomataNewTransition	(xmlAutomataPtr am,
+						 xmlAutomataStatePtr from,
+						 xmlAutomataStatePtr to,
+						 const xmlChar *token,
+						 void *data);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL	
+		    xmlAutomataNewTransition2	(xmlAutomataPtr am,
+						 xmlAutomataStatePtr from,
+						 xmlAutomataStatePtr to,
+						 const xmlChar *token,
+						 const xmlChar *token2,
+						 void *data);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+                    xmlAutomataNewNegTrans	(xmlAutomataPtr am,
+						 xmlAutomataStatePtr from,
+						 xmlAutomataStatePtr to,
+						 const xmlChar *token,
+						 const xmlChar *token2,
+						 void *data);
+
+XMLPUBFUN xmlAutomataStatePtr XMLCALL	
+		    xmlAutomataNewCountTrans	(xmlAutomataPtr am,
+						 xmlAutomataStatePtr from,
+						 xmlAutomataStatePtr to,
+						 const xmlChar *token,
+						 int min,
+						 int max,
+						 void *data);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL	
+		    xmlAutomataNewCountTrans2	(xmlAutomataPtr am,
+						 xmlAutomataStatePtr from,
+						 xmlAutomataStatePtr to,
+						 const xmlChar *token,
+						 const xmlChar *token2,
+						 int min,
+						 int max,
+						 void *data);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL	
+		    xmlAutomataNewOnceTrans	(xmlAutomataPtr am,
+						 xmlAutomataStatePtr from,
+						 xmlAutomataStatePtr to,
+						 const xmlChar *token,
+						 int min,
+						 int max,
+						 void *data);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
+		    xmlAutomataNewOnceTrans2	(xmlAutomataPtr am, 
+						 xmlAutomataStatePtr from,
+						 xmlAutomataStatePtr to, 
+						 const xmlChar *token,
+						 const xmlChar *token2,
+						 int min, 
+						 int max, 
+						 void *data);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL	
+		    xmlAutomataNewAllTrans	(xmlAutomataPtr am,
+						 xmlAutomataStatePtr from,
+						 xmlAutomataStatePtr to,
+						 int lax);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL	
+		    xmlAutomataNewEpsilon	(xmlAutomataPtr am,
+						 xmlAutomataStatePtr from,
+						 xmlAutomataStatePtr to);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL	
+		    xmlAutomataNewCountedTrans	(xmlAutomataPtr am,
+						 xmlAutomataStatePtr from,
+						 xmlAutomataStatePtr to,
+						 int counter);
+XMLPUBFUN xmlAutomataStatePtr XMLCALL	
+		    xmlAutomataNewCounterTrans	(xmlAutomataPtr am,
+						 xmlAutomataStatePtr from,
+						 xmlAutomataStatePtr to,
+						 int counter);
+XMLPUBFUN int XMLCALL			
+		    xmlAutomataNewCounter	(xmlAutomataPtr am,
+						 int min,
+						 int max);
+
+XMLPUBFUN xmlRegexpPtr XMLCALL		
+		    xmlAutomataCompile		(xmlAutomataPtr am);
+XMLPUBFUN int XMLCALL	    		
+		    xmlAutomataIsDeterminist	(xmlAutomataPtr am);
+
+#ifdef __cplusplus
+}
+#endif 
+
+#endif /* LIBXML_AUTOMATA_ENABLED */
+#endif /* LIBXML_REGEXP_ENABLED */
+
+#endif /* __XML_AUTOMATA_H__ */
diff --git a/interfaces/ext/libxml/xmlerror.h b/interfaces/ext/libxml/xmlerror.h
new file mode 100644
index 0000000..7cce9c3
--- /dev/null
+++ b/interfaces/ext/libxml/xmlerror.h
@@ -0,0 +1,944 @@
+/*
+ * Summary: error handling
+ * Description: the API used to report errors
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#include <libxml/parser.h>
+
+#ifndef __XML_ERROR_H__
+#define __XML_ERROR_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlErrorLevel:
+ *
+ * Indicates the level of an error
+ */
+typedef enum {
+    XML_ERR_NONE = 0,
+    XML_ERR_WARNING = 1,	/* A simple warning */
+    XML_ERR_ERROR = 2,		/* A recoverable error */
+    XML_ERR_FATAL = 3		/* A fatal error */
+} xmlErrorLevel;
+
+/**
+ * xmlErrorDomain:
+ *
+ * Indicates where an error may have come from
+ */
+typedef enum {
+    XML_FROM_NONE = 0,
+    XML_FROM_PARSER,	/* The XML parser */
+    XML_FROM_TREE,	/* The tree module */
+    XML_FROM_NAMESPACE,	/* The XML Namespace module */
+    XML_FROM_DTD,	/* The XML DTD validation with parser context*/
+    XML_FROM_HTML,	/* The HTML parser */
+    XML_FROM_MEMORY,	/* The memory allocator */
+    XML_FROM_OUTPUT,	/* The serialization code */
+    XML_FROM_IO,	/* The Input/Output stack */
+    XML_FROM_FTP,	/* The FTP module */
+    XML_FROM_HTTP,	/* The HTTP module */
+    XML_FROM_XINCLUDE,	/* The XInclude processing */
+    XML_FROM_XPATH,	/* The XPath module */
+    XML_FROM_XPOINTER,	/* The XPointer module */
+    XML_FROM_REGEXP,	/* The regular expressions module */
+    XML_FROM_DATATYPE,	/* The W3C XML Schemas Datatype module */
+    XML_FROM_SCHEMASP,	/* The W3C XML Schemas parser module */
+    XML_FROM_SCHEMASV,	/* The W3C XML Schemas validation module */
+    XML_FROM_RELAXNGP,	/* The Relax-NG parser module */
+    XML_FROM_RELAXNGV,	/* The Relax-NG validator module */
+    XML_FROM_CATALOG,	/* The Catalog module */
+    XML_FROM_C14N,	/* The Canonicalization module */
+    XML_FROM_XSLT,	/* The XSLT engine from libxslt */
+    XML_FROM_VALID,	/* The XML DTD validation with valid context */
+    XML_FROM_CHECK,	/* The error checking module */
+    XML_FROM_WRITER,	/* The xmlwriter module */
+    XML_FROM_MODULE,	/* The dynamically loaded module module*/
+    XML_FROM_I18N,	/* The module handling character conversion */
+    XML_FROM_SCHEMATRONV	/* The Schematron validator module */
+} xmlErrorDomain;
+
+/**
+ * xmlError:
+ *
+ * An XML Error instance.
+ */
+
+typedef struct _xmlError xmlError;
+typedef xmlError *xmlErrorPtr;
+struct _xmlError {
+    int		domain;	/* What part of the library raised this error */
+    int		code;	/* The error code, e.g. an xmlParserError */
+    char       *message;/* human-readable informative error message */
+    xmlErrorLevel level;/* how consequent is the error */
+    char       *file;	/* the filename */
+    int		line;	/* the line number if available */
+    char       *str1;	/* extra string information */
+    char       *str2;	/* extra string information */
+    char       *str3;	/* extra string information */
+    int		int1;	/* extra number information */
+    int		int2;	/* column number of the error or 0 if N/A (todo: rename this field when we would break ABI) */
+    void       *ctxt;   /* the parser context if available */
+    void       *node;   /* the node in the tree */
+};
+
+/**
+ * xmlParserError:
+ *
+ * This is an error that the XML (or HTML) parser can generate
+ */
+typedef enum {
+    XML_ERR_OK = 0,
+    XML_ERR_INTERNAL_ERROR, /* 1 */
+    XML_ERR_NO_MEMORY, /* 2 */
+    XML_ERR_DOCUMENT_START, /* 3 */
+    XML_ERR_DOCUMENT_EMPTY, /* 4 */
+    XML_ERR_DOCUMENT_END, /* 5 */
+    XML_ERR_INVALID_HEX_CHARREF, /* 6 */
+    XML_ERR_INVALID_DEC_CHARREF, /* 7 */
+    XML_ERR_INVALID_CHARREF, /* 8 */
+    XML_ERR_INVALID_CHAR, /* 9 */
+    XML_ERR_CHARREF_AT_EOF, /* 10 */
+    XML_ERR_CHARREF_IN_PROLOG, /* 11 */
+    XML_ERR_CHARREF_IN_EPILOG, /* 12 */
+    XML_ERR_CHARREF_IN_DTD, /* 13 */
+    XML_ERR_ENTITYREF_AT_EOF, /* 14 */
+    XML_ERR_ENTITYREF_IN_PROLOG, /* 15 */
+    XML_ERR_ENTITYREF_IN_EPILOG, /* 16 */
+    XML_ERR_ENTITYREF_IN_DTD, /* 17 */
+    XML_ERR_PEREF_AT_EOF, /* 18 */
+    XML_ERR_PEREF_IN_PROLOG, /* 19 */
+    XML_ERR_PEREF_IN_EPILOG, /* 20 */
+    XML_ERR_PEREF_IN_INT_SUBSET, /* 21 */
+    XML_ERR_ENTITYREF_NO_NAME, /* 22 */
+    XML_ERR_ENTITYREF_SEMICOL_MISSING, /* 23 */
+    XML_ERR_PEREF_NO_NAME, /* 24 */
+    XML_ERR_PEREF_SEMICOL_MISSING, /* 25 */
+    XML_ERR_UNDECLARED_ENTITY, /* 26 */
+    XML_WAR_UNDECLARED_ENTITY, /* 27 */
+    XML_ERR_UNPARSED_ENTITY, /* 28 */
+    XML_ERR_ENTITY_IS_EXTERNAL, /* 29 */
+    XML_ERR_ENTITY_IS_PARAMETER, /* 30 */
+    XML_ERR_UNKNOWN_ENCODING, /* 31 */
+    XML_ERR_UNSUPPORTED_ENCODING, /* 32 */
+    XML_ERR_STRING_NOT_STARTED, /* 33 */
+    XML_ERR_STRING_NOT_CLOSED, /* 34 */
+    XML_ERR_NS_DECL_ERROR, /* 35 */
+    XML_ERR_ENTITY_NOT_STARTED, /* 36 */
+    XML_ERR_ENTITY_NOT_FINISHED, /* 37 */
+    XML_ERR_LT_IN_ATTRIBUTE, /* 38 */
+    XML_ERR_ATTRIBUTE_NOT_STARTED, /* 39 */
+    XML_ERR_ATTRIBUTE_NOT_FINISHED, /* 40 */
+    XML_ERR_ATTRIBUTE_WITHOUT_VALUE, /* 41 */
+    XML_ERR_ATTRIBUTE_REDEFINED, /* 42 */
+    XML_ERR_LITERAL_NOT_STARTED, /* 43 */
+    XML_ERR_LITERAL_NOT_FINISHED, /* 44 */
+    XML_ERR_COMMENT_NOT_FINISHED, /* 45 */
+    XML_ERR_PI_NOT_STARTED, /* 46 */
+    XML_ERR_PI_NOT_FINISHED, /* 47 */
+    XML_ERR_NOTATION_NOT_STARTED, /* 48 */
+    XML_ERR_NOTATION_NOT_FINISHED, /* 49 */
+    XML_ERR_ATTLIST_NOT_STARTED, /* 50 */
+    XML_ERR_ATTLIST_NOT_FINISHED, /* 51 */
+    XML_ERR_MIXED_NOT_STARTED, /* 52 */
+    XML_ERR_MIXED_NOT_FINISHED, /* 53 */
+    XML_ERR_ELEMCONTENT_NOT_STARTED, /* 54 */
+    XML_ERR_ELEMCONTENT_NOT_FINISHED, /* 55 */
+    XML_ERR_XMLDECL_NOT_STARTED, /* 56 */
+    XML_ERR_XMLDECL_NOT_FINISHED, /* 57 */
+    XML_ERR_CONDSEC_NOT_STARTED, /* 58 */
+    XML_ERR_CONDSEC_NOT_FINISHED, /* 59 */
+    XML_ERR_EXT_SUBSET_NOT_FINISHED, /* 60 */
+    XML_ERR_DOCTYPE_NOT_FINISHED, /* 61 */
+    XML_ERR_MISPLACED_CDATA_END, /* 62 */
+    XML_ERR_CDATA_NOT_FINISHED, /* 63 */
+    XML_ERR_RESERVED_XML_NAME, /* 64 */
+    XML_ERR_SPACE_REQUIRED, /* 65 */
+    XML_ERR_SEPARATOR_REQUIRED, /* 66 */
+    XML_ERR_NMTOKEN_REQUIRED, /* 67 */
+    XML_ERR_NAME_REQUIRED, /* 68 */
+    XML_ERR_PCDATA_REQUIRED, /* 69 */
+    XML_ERR_URI_REQUIRED, /* 70 */
+    XML_ERR_PUBID_REQUIRED, /* 71 */
+    XML_ERR_LT_REQUIRED, /* 72 */
+    XML_ERR_GT_REQUIRED, /* 73 */
+    XML_ERR_LTSLASH_REQUIRED, /* 74 */
+    XML_ERR_EQUAL_REQUIRED, /* 75 */
+    XML_ERR_TAG_NAME_MISMATCH, /* 76 */
+    XML_ERR_TAG_NOT_FINISHED, /* 77 */
+    XML_ERR_STANDALONE_VALUE, /* 78 */
+    XML_ERR_ENCODING_NAME, /* 79 */
+    XML_ERR_HYPHEN_IN_COMMENT, /* 80 */
+    XML_ERR_INVALID_ENCODING, /* 81 */
+    XML_ERR_EXT_ENTITY_STANDALONE, /* 82 */
+    XML_ERR_CONDSEC_INVALID, /* 83 */
+    XML_ERR_VALUE_REQUIRED, /* 84 */
+    XML_ERR_NOT_WELL_BALANCED, /* 85 */
+    XML_ERR_EXTRA_CONTENT, /* 86 */
+    XML_ERR_ENTITY_CHAR_ERROR, /* 87 */
+    XML_ERR_ENTITY_PE_INTERNAL, /* 88 */
+    XML_ERR_ENTITY_LOOP, /* 89 */
+    XML_ERR_ENTITY_BOUNDARY, /* 90 */
+    XML_ERR_INVALID_URI, /* 91 */
+    XML_ERR_URI_FRAGMENT, /* 92 */
+    XML_WAR_CATALOG_PI, /* 93 */
+    XML_ERR_NO_DTD, /* 94 */
+    XML_ERR_CONDSEC_INVALID_KEYWORD, /* 95 */
+    XML_ERR_VERSION_MISSING, /* 96 */
+    XML_WAR_UNKNOWN_VERSION, /* 97 */
+    XML_WAR_LANG_VALUE, /* 98 */
+    XML_WAR_NS_URI, /* 99 */
+    XML_WAR_NS_URI_RELATIVE, /* 100 */
+    XML_ERR_MISSING_ENCODING, /* 101 */
+    XML_WAR_SPACE_VALUE, /* 102 */
+    XML_ERR_NOT_STANDALONE, /* 103 */
+    XML_ERR_ENTITY_PROCESSING, /* 104 */
+    XML_ERR_NOTATION_PROCESSING, /* 105 */
+    XML_WAR_NS_COLUMN, /* 106 */
+    XML_WAR_ENTITY_REDEFINED, /* 107 */
+    XML_ERR_UNKNOWN_VERSION, /* 108 */
+    XML_ERR_VERSION_MISMATCH, /* 109 */
+    XML_NS_ERR_XML_NAMESPACE = 200,
+    XML_NS_ERR_UNDEFINED_NAMESPACE, /* 201 */
+    XML_NS_ERR_QNAME, /* 202 */
+    XML_NS_ERR_ATTRIBUTE_REDEFINED, /* 203 */
+    XML_NS_ERR_EMPTY, /* 204 */
+    XML_NS_ERR_COLON, /* 205 */
+    XML_DTD_ATTRIBUTE_DEFAULT = 500,
+    XML_DTD_ATTRIBUTE_REDEFINED, /* 501 */
+    XML_DTD_ATTRIBUTE_VALUE, /* 502 */
+    XML_DTD_CONTENT_ERROR, /* 503 */
+    XML_DTD_CONTENT_MODEL, /* 504 */
+    XML_DTD_CONTENT_NOT_DETERMINIST, /* 505 */
+    XML_DTD_DIFFERENT_PREFIX, /* 506 */
+    XML_DTD_ELEM_DEFAULT_NAMESPACE, /* 507 */
+    XML_DTD_ELEM_NAMESPACE, /* 508 */
+    XML_DTD_ELEM_REDEFINED, /* 509 */
+    XML_DTD_EMPTY_NOTATION, /* 510 */
+    XML_DTD_ENTITY_TYPE, /* 511 */
+    XML_DTD_ID_FIXED, /* 512 */
+    XML_DTD_ID_REDEFINED, /* 513 */
+    XML_DTD_ID_SUBSET, /* 514 */
+    XML_DTD_INVALID_CHILD, /* 515 */
+    XML_DTD_INVALID_DEFAULT, /* 516 */
+    XML_DTD_LOAD_ERROR, /* 517 */
+    XML_DTD_MISSING_ATTRIBUTE, /* 518 */
+    XML_DTD_MIXED_CORRUPT, /* 519 */
+    XML_DTD_MULTIPLE_ID, /* 520 */
+    XML_DTD_NO_DOC, /* 521 */
+    XML_DTD_NO_DTD, /* 522 */
+    XML_DTD_NO_ELEM_NAME, /* 523 */
+    XML_DTD_NO_PREFIX, /* 524 */
+    XML_DTD_NO_ROOT, /* 525 */
+    XML_DTD_NOTATION_REDEFINED, /* 526 */
+    XML_DTD_NOTATION_VALUE, /* 527 */
+    XML_DTD_NOT_EMPTY, /* 528 */
+    XML_DTD_NOT_PCDATA, /* 529 */
+    XML_DTD_NOT_STANDALONE, /* 530 */
+    XML_DTD_ROOT_NAME, /* 531 */
+    XML_DTD_STANDALONE_WHITE_SPACE, /* 532 */
+    XML_DTD_UNKNOWN_ATTRIBUTE, /* 533 */
+    XML_DTD_UNKNOWN_ELEM, /* 534 */
+    XML_DTD_UNKNOWN_ENTITY, /* 535 */
+    XML_DTD_UNKNOWN_ID, /* 536 */
+    XML_DTD_UNKNOWN_NOTATION, /* 537 */
+    XML_DTD_STANDALONE_DEFAULTED, /* 538 */
+    XML_DTD_XMLID_VALUE, /* 539 */
+    XML_DTD_XMLID_TYPE, /* 540 */
+    XML_DTD_DUP_TOKEN, /* 541 */
+    XML_HTML_STRUCURE_ERROR = 800,
+    XML_HTML_UNKNOWN_TAG, /* 801 */
+    XML_RNGP_ANYNAME_ATTR_ANCESTOR = 1000,
+    XML_RNGP_ATTR_CONFLICT, /* 1001 */
+    XML_RNGP_ATTRIBUTE_CHILDREN, /* 1002 */
+    XML_RNGP_ATTRIBUTE_CONTENT, /* 1003 */
+    XML_RNGP_ATTRIBUTE_EMPTY, /* 1004 */
+    XML_RNGP_ATTRIBUTE_NOOP, /* 1005 */
+    XML_RNGP_CHOICE_CONTENT, /* 1006 */
+    XML_RNGP_CHOICE_EMPTY, /* 1007 */
+    XML_RNGP_CREATE_FAILURE, /* 1008 */
+    XML_RNGP_DATA_CONTENT, /* 1009 */
+    XML_RNGP_DEF_CHOICE_AND_INTERLEAVE, /* 1010 */
+    XML_RNGP_DEFINE_CREATE_FAILED, /* 1011 */
+    XML_RNGP_DEFINE_EMPTY, /* 1012 */
+    XML_RNGP_DEFINE_MISSING, /* 1013 */
+    XML_RNGP_DEFINE_NAME_MISSING, /* 1014 */
+    XML_RNGP_ELEM_CONTENT_EMPTY, /* 1015 */
+    XML_RNGP_ELEM_CONTENT_ERROR, /* 1016 */
+    XML_RNGP_ELEMENT_EMPTY, /* 1017 */
+    XML_RNGP_ELEMENT_CONTENT, /* 1018 */
+    XML_RNGP_ELEMENT_NAME, /* 1019 */
+    XML_RNGP_ELEMENT_NO_CONTENT, /* 1020 */
+    XML_RNGP_ELEM_TEXT_CONFLICT, /* 1021 */
+    XML_RNGP_EMPTY, /* 1022 */
+    XML_RNGP_EMPTY_CONSTRUCT, /* 1023 */
+    XML_RNGP_EMPTY_CONTENT, /* 1024 */
+    XML_RNGP_EMPTY_NOT_EMPTY, /* 1025 */
+    XML_RNGP_ERROR_TYPE_LIB, /* 1026 */
+    XML_RNGP_EXCEPT_EMPTY, /* 1027 */
+    XML_RNGP_EXCEPT_MISSING, /* 1028 */
+    XML_RNGP_EXCEPT_MULTIPLE, /* 1029 */
+    XML_RNGP_EXCEPT_NO_CONTENT, /* 1030 */
+    XML_RNGP_EXTERNALREF_EMTPY, /* 1031 */
+    XML_RNGP_EXTERNAL_REF_FAILURE, /* 1032 */
+    XML_RNGP_EXTERNALREF_RECURSE, /* 1033 */
+    XML_RNGP_FORBIDDEN_ATTRIBUTE, /* 1034 */
+    XML_RNGP_FOREIGN_ELEMENT, /* 1035 */
+    XML_RNGP_GRAMMAR_CONTENT, /* 1036 */
+    XML_RNGP_GRAMMAR_EMPTY, /* 1037 */
+    XML_RNGP_GRAMMAR_MISSING, /* 1038 */
+    XML_RNGP_GRAMMAR_NO_START, /* 1039 */
+    XML_RNGP_GROUP_ATTR_CONFLICT, /* 1040 */
+    XML_RNGP_HREF_ERROR, /* 1041 */
+    XML_RNGP_INCLUDE_EMPTY, /* 1042 */
+    XML_RNGP_INCLUDE_FAILURE, /* 1043 */
+    XML_RNGP_INCLUDE_RECURSE, /* 1044 */
+    XML_RNGP_INTERLEAVE_ADD, /* 1045 */
+    XML_RNGP_INTERLEAVE_CREATE_FAILED, /* 1046 */
+    XML_RNGP_INTERLEAVE_EMPTY, /* 1047 */
+    XML_RNGP_INTERLEAVE_NO_CONTENT, /* 1048 */
+    XML_RNGP_INVALID_DEFINE_NAME, /* 1049 */
+    XML_RNGP_INVALID_URI, /* 1050 */
+    XML_RNGP_INVALID_VALUE, /* 1051 */
+    XML_RNGP_MISSING_HREF, /* 1052 */
+    XML_RNGP_NAME_MISSING, /* 1053 */
+    XML_RNGP_NEED_COMBINE, /* 1054 */
+    XML_RNGP_NOTALLOWED_NOT_EMPTY, /* 1055 */
+    XML_RNGP_NSNAME_ATTR_ANCESTOR, /* 1056 */
+    XML_RNGP_NSNAME_NO_NS, /* 1057 */
+    XML_RNGP_PARAM_FORBIDDEN, /* 1058 */
+    XML_RNGP_PARAM_NAME_MISSING, /* 1059 */
+    XML_RNGP_PARENTREF_CREATE_FAILED, /* 1060 */
+    XML_RNGP_PARENTREF_NAME_INVALID, /* 1061 */
+    XML_RNGP_PARENTREF_NO_NAME, /* 1062 */
+    XML_RNGP_PARENTREF_NO_PARENT, /* 1063 */
+    XML_RNGP_PARENTREF_NOT_EMPTY, /* 1064 */
+    XML_RNGP_PARSE_ERROR, /* 1065 */
+    XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME, /* 1066 */
+    XML_RNGP_PAT_ATTR_ATTR, /* 1067 */
+    XML_RNGP_PAT_ATTR_ELEM, /* 1068 */
+    XML_RNGP_PAT_DATA_EXCEPT_ATTR, /* 1069 */
+    XML_RNGP_PAT_DATA_EXCEPT_ELEM, /* 1070 */
+    XML_RNGP_PAT_DATA_EXCEPT_EMPTY, /* 1071 */
+    XML_RNGP_PAT_DATA_EXCEPT_GROUP, /* 1072 */
+    XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE, /* 1073 */
+    XML_RNGP_PAT_DATA_EXCEPT_LIST, /* 1074 */
+    XML_RNGP_PAT_DATA_EXCEPT_ONEMORE, /* 1075 */
+    XML_RNGP_PAT_DATA_EXCEPT_REF, /* 1076 */
+    XML_RNGP_PAT_DATA_EXCEPT_TEXT, /* 1077 */
+    XML_RNGP_PAT_LIST_ATTR, /* 1078 */
+    XML_RNGP_PAT_LIST_ELEM, /* 1079 */
+    XML_RNGP_PAT_LIST_INTERLEAVE, /* 1080 */
+    XML_RNGP_PAT_LIST_LIST, /* 1081 */
+    XML_RNGP_PAT_LIST_REF, /* 1082 */
+    XML_RNGP_PAT_LIST_TEXT, /* 1083 */
+    XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME, /* 1084 */
+    XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME, /* 1085 */
+    XML_RNGP_PAT_ONEMORE_GROUP_ATTR, /* 1086 */
+    XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR, /* 1087 */
+    XML_RNGP_PAT_START_ATTR, /* 1088 */
+    XML_RNGP_PAT_START_DATA, /* 1089 */
+    XML_RNGP_PAT_START_EMPTY, /* 1090 */
+    XML_RNGP_PAT_START_GROUP, /* 1091 */
+    XML_RNGP_PAT_START_INTERLEAVE, /* 1092 */
+    XML_RNGP_PAT_START_LIST, /* 1093 */
+    XML_RNGP_PAT_START_ONEMORE, /* 1094 */
+    XML_RNGP_PAT_START_TEXT, /* 1095 */
+    XML_RNGP_PAT_START_VALUE, /* 1096 */
+    XML_RNGP_PREFIX_UNDEFINED, /* 1097 */
+    XML_RNGP_REF_CREATE_FAILED, /* 1098 */
+    XML_RNGP_REF_CYCLE, /* 1099 */
+    XML_RNGP_REF_NAME_INVALID, /* 1100 */
+    XML_RNGP_REF_NO_DEF, /* 1101 */
+    XML_RNGP_REF_NO_NAME, /* 1102 */
+    XML_RNGP_REF_NOT_EMPTY, /* 1103 */
+    XML_RNGP_START_CHOICE_AND_INTERLEAVE, /* 1104 */
+    XML_RNGP_START_CONTENT, /* 1105 */
+    XML_RNGP_START_EMPTY, /* 1106 */
+    XML_RNGP_START_MISSING, /* 1107 */
+    XML_RNGP_TEXT_EXPECTED, /* 1108 */
+    XML_RNGP_TEXT_HAS_CHILD, /* 1109 */
+    XML_RNGP_TYPE_MISSING, /* 1110 */
+    XML_RNGP_TYPE_NOT_FOUND, /* 1111 */
+    XML_RNGP_TYPE_VALUE, /* 1112 */
+    XML_RNGP_UNKNOWN_ATTRIBUTE, /* 1113 */
+    XML_RNGP_UNKNOWN_COMBINE, /* 1114 */
+    XML_RNGP_UNKNOWN_CONSTRUCT, /* 1115 */
+    XML_RNGP_UNKNOWN_TYPE_LIB, /* 1116 */
+    XML_RNGP_URI_FRAGMENT, /* 1117 */
+    XML_RNGP_URI_NOT_ABSOLUTE, /* 1118 */
+    XML_RNGP_VALUE_EMPTY, /* 1119 */
+    XML_RNGP_VALUE_NO_CONTENT, /* 1120 */
+    XML_RNGP_XMLNS_NAME, /* 1121 */
+    XML_RNGP_XML_NS, /* 1122 */
+    XML_XPATH_EXPRESSION_OK = 1200,
+    XML_XPATH_NUMBER_ERROR, /* 1201 */
+    XML_XPATH_UNFINISHED_LITERAL_ERROR, /* 1202 */
+    XML_XPATH_START_LITERAL_ERROR, /* 1203 */
+    XML_XPATH_VARIABLE_REF_ERROR, /* 1204 */
+    XML_XPATH_UNDEF_VARIABLE_ERROR, /* 1205 */
+    XML_XPATH_INVALID_PREDICATE_ERROR, /* 1206 */
+    XML_XPATH_EXPR_ERROR, /* 1207 */
+    XML_XPATH_UNCLOSED_ERROR, /* 1208 */
+    XML_XPATH_UNKNOWN_FUNC_ERROR, /* 1209 */
+    XML_XPATH_INVALID_OPERAND, /* 1210 */
+    XML_XPATH_INVALID_TYPE, /* 1211 */
+    XML_XPATH_INVALID_ARITY, /* 1212 */
+    XML_XPATH_INVALID_CTXT_SIZE, /* 1213 */
+    XML_XPATH_INVALID_CTXT_POSITION, /* 1214 */
+    XML_XPATH_MEMORY_ERROR, /* 1215 */
+    XML_XPTR_SYNTAX_ERROR, /* 1216 */
+    XML_XPTR_RESOURCE_ERROR, /* 1217 */
+    XML_XPTR_SUB_RESOURCE_ERROR, /* 1218 */
+    XML_XPATH_UNDEF_PREFIX_ERROR, /* 1219 */
+    XML_XPATH_ENCODING_ERROR, /* 1220 */
+    XML_XPATH_INVALID_CHAR_ERROR, /* 1221 */
+    XML_TREE_INVALID_HEX = 1300,
+    XML_TREE_INVALID_DEC, /* 1301 */
+    XML_TREE_UNTERMINATED_ENTITY, /* 1302 */
+    XML_TREE_NOT_UTF8, /* 1303 */
+    XML_SAVE_NOT_UTF8 = 1400,
+    XML_SAVE_CHAR_INVALID, /* 1401 */
+    XML_SAVE_NO_DOCTYPE, /* 1402 */
+    XML_SAVE_UNKNOWN_ENCODING, /* 1403 */
+    XML_REGEXP_COMPILE_ERROR = 1450,
+    XML_IO_UNKNOWN = 1500,
+    XML_IO_EACCES, /* 1501 */
+    XML_IO_EAGAIN, /* 1502 */
+    XML_IO_EBADF, /* 1503 */
+    XML_IO_EBADMSG, /* 1504 */
+    XML_IO_EBUSY, /* 1505 */
+    XML_IO_ECANCELED, /* 1506 */
+    XML_IO_ECHILD, /* 1507 */
+    XML_IO_EDEADLK, /* 1508 */
+    XML_IO_EDOM, /* 1509 */
+    XML_IO_EEXIST, /* 1510 */
+    XML_IO_EFAULT, /* 1511 */
+    XML_IO_EFBIG, /* 1512 */
+    XML_IO_EINPROGRESS, /* 1513 */
+    XML_IO_EINTR, /* 1514 */
+    XML_IO_EINVAL, /* 1515 */
+    XML_IO_EIO, /* 1516 */
+    XML_IO_EISDIR, /* 1517 */
+    XML_IO_EMFILE, /* 1518 */
+    XML_IO_EMLINK, /* 1519 */
+    XML_IO_EMSGSIZE, /* 1520 */
+    XML_IO_ENAMETOOLONG, /* 1521 */
+    XML_IO_ENFILE, /* 1522 */
+    XML_IO_ENODEV, /* 1523 */
+    XML_IO_ENOENT, /* 1524 */
+    XML_IO_ENOEXEC, /* 1525 */
+    XML_IO_ENOLCK, /* 1526 */
+    XML_IO_ENOMEM, /* 1527 */
+    XML_IO_ENOSPC, /* 1528 */
+    XML_IO_ENOSYS, /* 1529 */
+    XML_IO_ENOTDIR, /* 1530 */
+    XML_IO_ENOTEMPTY, /* 1531 */
+    XML_IO_ENOTSUP, /* 1532 */
+    XML_IO_ENOTTY, /* 1533 */
+    XML_IO_ENXIO, /* 1534 */
+    XML_IO_EPERM, /* 1535 */
+    XML_IO_EPIPE, /* 1536 */
+    XML_IO_ERANGE, /* 1537 */
+    XML_IO_EROFS, /* 1538 */
+    XML_IO_ESPIPE, /* 1539 */
+    XML_IO_ESRCH, /* 1540 */
+    XML_IO_ETIMEDOUT, /* 1541 */
+    XML_IO_EXDEV, /* 1542 */
+    XML_IO_NETWORK_ATTEMPT, /* 1543 */
+    XML_IO_ENCODER, /* 1544 */
+    XML_IO_FLUSH, /* 1545 */
+    XML_IO_WRITE, /* 1546 */
+    XML_IO_NO_INPUT, /* 1547 */
+    XML_IO_BUFFER_FULL, /* 1548 */
+    XML_IO_LOAD_ERROR, /* 1549 */
+    XML_IO_ENOTSOCK, /* 1550 */
+    XML_IO_EISCONN, /* 1551 */
+    XML_IO_ECONNREFUSED, /* 1552 */
+    XML_IO_ENETUNREACH, /* 1553 */
+    XML_IO_EADDRINUSE, /* 1554 */
+    XML_IO_EALREADY, /* 1555 */
+    XML_IO_EAFNOSUPPORT, /* 1556 */
+    XML_XINCLUDE_RECURSION=1600,
+    XML_XINCLUDE_PARSE_VALUE, /* 1601 */
+    XML_XINCLUDE_ENTITY_DEF_MISMATCH, /* 1602 */
+    XML_XINCLUDE_NO_HREF, /* 1603 */
+    XML_XINCLUDE_NO_FALLBACK, /* 1604 */
+    XML_XINCLUDE_HREF_URI, /* 1605 */
+    XML_XINCLUDE_TEXT_FRAGMENT, /* 1606 */
+    XML_XINCLUDE_TEXT_DOCUMENT, /* 1607 */
+    XML_XINCLUDE_INVALID_CHAR, /* 1608 */
+    XML_XINCLUDE_BUILD_FAILED, /* 1609 */
+    XML_XINCLUDE_UNKNOWN_ENCODING, /* 1610 */
+    XML_XINCLUDE_MULTIPLE_ROOT, /* 1611 */
+    XML_XINCLUDE_XPTR_FAILED, /* 1612 */
+    XML_XINCLUDE_XPTR_RESULT, /* 1613 */
+    XML_XINCLUDE_INCLUDE_IN_INCLUDE, /* 1614 */
+    XML_XINCLUDE_FALLBACKS_IN_INCLUDE, /* 1615 */
+    XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE, /* 1616 */
+    XML_XINCLUDE_DEPRECATED_NS, /* 1617 */
+    XML_XINCLUDE_FRAGMENT_ID, /* 1618 */
+    XML_CATALOG_MISSING_ATTR = 1650,
+    XML_CATALOG_ENTRY_BROKEN, /* 1651 */
+    XML_CATALOG_PREFER_VALUE, /* 1652 */
+    XML_CATALOG_NOT_CATALOG, /* 1653 */
+    XML_CATALOG_RECURSION, /* 1654 */
+    XML_SCHEMAP_PREFIX_UNDEFINED = 1700,
+    XML_SCHEMAP_ATTRFORMDEFAULT_VALUE, /* 1701 */
+    XML_SCHEMAP_ATTRGRP_NONAME_NOREF, /* 1702 */
+    XML_SCHEMAP_ATTR_NONAME_NOREF, /* 1703 */
+    XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF, /* 1704 */
+    XML_SCHEMAP_ELEMFORMDEFAULT_VALUE, /* 1705 */
+    XML_SCHEMAP_ELEM_NONAME_NOREF, /* 1706 */
+    XML_SCHEMAP_EXTENSION_NO_BASE, /* 1707 */
+    XML_SCHEMAP_FACET_NO_VALUE, /* 1708 */
+    XML_SCHEMAP_FAILED_BUILD_IMPORT, /* 1709 */
+    XML_SCHEMAP_GROUP_NONAME_NOREF, /* 1710 */
+    XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI, /* 1711 */
+    XML_SCHEMAP_IMPORT_REDEFINE_NSNAME, /* 1712 */
+    XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI, /* 1713 */
+    XML_SCHEMAP_INVALID_BOOLEAN, /* 1714 */
+    XML_SCHEMAP_INVALID_ENUM, /* 1715 */
+    XML_SCHEMAP_INVALID_FACET, /* 1716 */
+    XML_SCHEMAP_INVALID_FACET_VALUE, /* 1717 */
+    XML_SCHEMAP_INVALID_MAXOCCURS, /* 1718 */
+    XML_SCHEMAP_INVALID_MINOCCURS, /* 1719 */
+    XML_SCHEMAP_INVALID_REF_AND_SUBTYPE, /* 1720 */
+    XML_SCHEMAP_INVALID_WHITE_SPACE, /* 1721 */
+    XML_SCHEMAP_NOATTR_NOREF, /* 1722 */
+    XML_SCHEMAP_NOTATION_NO_NAME, /* 1723 */
+    XML_SCHEMAP_NOTYPE_NOREF, /* 1724 */
+    XML_SCHEMAP_REF_AND_SUBTYPE, /* 1725 */
+    XML_SCHEMAP_RESTRICTION_NONAME_NOREF, /* 1726 */
+    XML_SCHEMAP_SIMPLETYPE_NONAME, /* 1727 */
+    XML_SCHEMAP_TYPE_AND_SUBTYPE, /* 1728 */
+    XML_SCHEMAP_UNKNOWN_ALL_CHILD, /* 1729 */
+    XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD, /* 1730 */
+    XML_SCHEMAP_UNKNOWN_ATTR_CHILD, /* 1731 */
+    XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD, /* 1732 */
+    XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP, /* 1733 */
+    XML_SCHEMAP_UNKNOWN_BASE_TYPE, /* 1734 */
+    XML_SCHEMAP_UNKNOWN_CHOICE_CHILD, /* 1735 */
+    XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD, /* 1736 */
+    XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD, /* 1737 */
+    XML_SCHEMAP_UNKNOWN_ELEM_CHILD, /* 1738 */
+    XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD, /* 1739 */
+    XML_SCHEMAP_UNKNOWN_FACET_CHILD, /* 1740 */
+    XML_SCHEMAP_UNKNOWN_FACET_TYPE, /* 1741 */
+    XML_SCHEMAP_UNKNOWN_GROUP_CHILD, /* 1742 */
+    XML_SCHEMAP_UNKNOWN_IMPORT_CHILD, /* 1743 */
+    XML_SCHEMAP_UNKNOWN_LIST_CHILD, /* 1744 */
+    XML_SCHEMAP_UNKNOWN_NOTATION_CHILD, /* 1745 */
+    XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD, /* 1746 */
+    XML_SCHEMAP_UNKNOWN_REF, /* 1747 */
+    XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD, /* 1748 */
+    XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD, /* 1749 */
+    XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD, /* 1750 */
+    XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD, /* 1751 */
+    XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD, /* 1752 */
+    XML_SCHEMAP_UNKNOWN_TYPE, /* 1753 */
+    XML_SCHEMAP_UNKNOWN_UNION_CHILD, /* 1754 */
+    XML_SCHEMAP_ELEM_DEFAULT_FIXED, /* 1755 */
+    XML_SCHEMAP_REGEXP_INVALID, /* 1756 */
+    XML_SCHEMAP_FAILED_LOAD, /* 1757 */
+    XML_SCHEMAP_NOTHING_TO_PARSE, /* 1758 */
+    XML_SCHEMAP_NOROOT, /* 1759 */
+    XML_SCHEMAP_REDEFINED_GROUP, /* 1760 */
+    XML_SCHEMAP_REDEFINED_TYPE, /* 1761 */
+    XML_SCHEMAP_REDEFINED_ELEMENT, /* 1762 */
+    XML_SCHEMAP_REDEFINED_ATTRGROUP, /* 1763 */
+    XML_SCHEMAP_REDEFINED_ATTR, /* 1764 */
+    XML_SCHEMAP_REDEFINED_NOTATION, /* 1765 */
+    XML_SCHEMAP_FAILED_PARSE, /* 1766 */
+    XML_SCHEMAP_UNKNOWN_PREFIX, /* 1767 */
+    XML_SCHEMAP_DEF_AND_PREFIX, /* 1768 */
+    XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD, /* 1769 */
+    XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI, /* 1770 */
+    XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI, /* 1771 */
+    XML_SCHEMAP_NOT_SCHEMA, /* 1772 */
+    XML_SCHEMAP_UNKNOWN_MEMBER_TYPE, /* 1773 */
+    XML_SCHEMAP_INVALID_ATTR_USE, /* 1774 */
+    XML_SCHEMAP_RECURSIVE, /* 1775 */
+    XML_SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE, /* 1776 */
+    XML_SCHEMAP_INVALID_ATTR_COMBINATION, /* 1777 */
+    XML_SCHEMAP_INVALID_ATTR_INLINE_COMBINATION, /* 1778 */
+    XML_SCHEMAP_MISSING_SIMPLETYPE_CHILD, /* 1779 */
+    XML_SCHEMAP_INVALID_ATTR_NAME, /* 1780 */
+    XML_SCHEMAP_REF_AND_CONTENT, /* 1781 */
+    XML_SCHEMAP_CT_PROPS_CORRECT_1, /* 1782 */
+    XML_SCHEMAP_CT_PROPS_CORRECT_2, /* 1783 */
+    XML_SCHEMAP_CT_PROPS_CORRECT_3, /* 1784 */
+    XML_SCHEMAP_CT_PROPS_CORRECT_4, /* 1785 */
+    XML_SCHEMAP_CT_PROPS_CORRECT_5, /* 1786 */
+    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1, /* 1787 */
+    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1, /* 1788 */
+    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2, /* 1789 */
+    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_2, /* 1790 */
+    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_3, /* 1791 */
+    XML_SCHEMAP_WILDCARD_INVALID_NS_MEMBER, /* 1792 */
+    XML_SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE, /* 1793 */
+    XML_SCHEMAP_UNION_NOT_EXPRESSIBLE, /* 1794 */
+    XML_SCHEMAP_SRC_IMPORT_3_1, /* 1795 */
+    XML_SCHEMAP_SRC_IMPORT_3_2, /* 1796 */
+    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_1, /* 1797 */
+    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2, /* 1798 */
+    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_3, /* 1799 */
+    XML_SCHEMAP_COS_CT_EXTENDS_1_3, /* 1800 */
+    XML_SCHEMAV_NOROOT = 1801,
+    XML_SCHEMAV_UNDECLAREDELEM, /* 1802 */
+    XML_SCHEMAV_NOTTOPLEVEL, /* 1803 */
+    XML_SCHEMAV_MISSING, /* 1804 */
+    XML_SCHEMAV_WRONGELEM, /* 1805 */
+    XML_SCHEMAV_NOTYPE, /* 1806 */
+    XML_SCHEMAV_NOROLLBACK, /* 1807 */
+    XML_SCHEMAV_ISABSTRACT, /* 1808 */
+    XML_SCHEMAV_NOTEMPTY, /* 1809 */
+    XML_SCHEMAV_ELEMCONT, /* 1810 */
+    XML_SCHEMAV_HAVEDEFAULT, /* 1811 */
+    XML_SCHEMAV_NOTNILLABLE, /* 1812 */
+    XML_SCHEMAV_EXTRACONTENT, /* 1813 */
+    XML_SCHEMAV_INVALIDATTR, /* 1814 */
+    XML_SCHEMAV_INVALIDELEM, /* 1815 */
+    XML_SCHEMAV_NOTDETERMINIST, /* 1816 */
+    XML_SCHEMAV_CONSTRUCT, /* 1817 */
+    XML_SCHEMAV_INTERNAL, /* 1818 */
+    XML_SCHEMAV_NOTSIMPLE, /* 1819 */
+    XML_SCHEMAV_ATTRUNKNOWN, /* 1820 */
+    XML_SCHEMAV_ATTRINVALID, /* 1821 */
+    XML_SCHEMAV_VALUE, /* 1822 */
+    XML_SCHEMAV_FACET, /* 1823 */
+    XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1, /* 1824 */
+    XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2, /* 1825 */
+    XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_3, /* 1826 */
+    XML_SCHEMAV_CVC_TYPE_3_1_1, /* 1827 */
+    XML_SCHEMAV_CVC_TYPE_3_1_2, /* 1828 */
+    XML_SCHEMAV_CVC_FACET_VALID, /* 1829 */
+    XML_SCHEMAV_CVC_LENGTH_VALID, /* 1830 */
+    XML_SCHEMAV_CVC_MINLENGTH_VALID, /* 1831 */
+    XML_SCHEMAV_CVC_MAXLENGTH_VALID, /* 1832 */
+    XML_SCHEMAV_CVC_MININCLUSIVE_VALID, /* 1833 */
+    XML_SCHEMAV_CVC_MAXINCLUSIVE_VALID, /* 1834 */
+    XML_SCHEMAV_CVC_MINEXCLUSIVE_VALID, /* 1835 */
+    XML_SCHEMAV_CVC_MAXEXCLUSIVE_VALID, /* 1836 */
+    XML_SCHEMAV_CVC_TOTALDIGITS_VALID, /* 1837 */
+    XML_SCHEMAV_CVC_FRACTIONDIGITS_VALID, /* 1838 */
+    XML_SCHEMAV_CVC_PATTERN_VALID, /* 1839 */
+    XML_SCHEMAV_CVC_ENUMERATION_VALID, /* 1840 */
+    XML_SCHEMAV_CVC_COMPLEX_TYPE_2_1, /* 1841 */
+    XML_SCHEMAV_CVC_COMPLEX_TYPE_2_2, /* 1842 */
+    XML_SCHEMAV_CVC_COMPLEX_TYPE_2_3, /* 1843 */
+    XML_SCHEMAV_CVC_COMPLEX_TYPE_2_4, /* 1844 */
+    XML_SCHEMAV_CVC_ELT_1, /* 1845 */
+    XML_SCHEMAV_CVC_ELT_2, /* 1846 */
+    XML_SCHEMAV_CVC_ELT_3_1, /* 1847 */
+    XML_SCHEMAV_CVC_ELT_3_2_1, /* 1848 */
+    XML_SCHEMAV_CVC_ELT_3_2_2, /* 1849 */
+    XML_SCHEMAV_CVC_ELT_4_1, /* 1850 */
+    XML_SCHEMAV_CVC_ELT_4_2, /* 1851 */
+    XML_SCHEMAV_CVC_ELT_4_3, /* 1852 */
+    XML_SCHEMAV_CVC_ELT_5_1_1, /* 1853 */
+    XML_SCHEMAV_CVC_ELT_5_1_2, /* 1854 */
+    XML_SCHEMAV_CVC_ELT_5_2_1, /* 1855 */
+    XML_SCHEMAV_CVC_ELT_5_2_2_1, /* 1856 */
+    XML_SCHEMAV_CVC_ELT_5_2_2_2_1, /* 1857 */
+    XML_SCHEMAV_CVC_ELT_5_2_2_2_2, /* 1858 */
+    XML_SCHEMAV_CVC_ELT_6, /* 1859 */
+    XML_SCHEMAV_CVC_ELT_7, /* 1860 */
+    XML_SCHEMAV_CVC_ATTRIBUTE_1, /* 1861 */
+    XML_SCHEMAV_CVC_ATTRIBUTE_2, /* 1862 */
+    XML_SCHEMAV_CVC_ATTRIBUTE_3, /* 1863 */
+    XML_SCHEMAV_CVC_ATTRIBUTE_4, /* 1864 */
+    XML_SCHEMAV_CVC_COMPLEX_TYPE_3_1, /* 1865 */
+    XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_1, /* 1866 */
+    XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_2, /* 1867 */
+    XML_SCHEMAV_CVC_COMPLEX_TYPE_4, /* 1868 */
+    XML_SCHEMAV_CVC_COMPLEX_TYPE_5_1, /* 1869 */
+    XML_SCHEMAV_CVC_COMPLEX_TYPE_5_2, /* 1870 */
+    XML_SCHEMAV_ELEMENT_CONTENT, /* 1871 */
+    XML_SCHEMAV_DOCUMENT_ELEMENT_MISSING, /* 1872 */
+    XML_SCHEMAV_CVC_COMPLEX_TYPE_1, /* 1873 */
+    XML_SCHEMAV_CVC_AU, /* 1874 */
+    XML_SCHEMAV_CVC_TYPE_1, /* 1875 */
+    XML_SCHEMAV_CVC_TYPE_2, /* 1876 */
+    XML_SCHEMAV_CVC_IDC, /* 1877 */
+    XML_SCHEMAV_CVC_WILDCARD, /* 1878 */
+    XML_SCHEMAV_MISC, /* 1879 */
+    XML_XPTR_UNKNOWN_SCHEME = 1900,
+    XML_XPTR_CHILDSEQ_START, /* 1901 */
+    XML_XPTR_EVAL_FAILED, /* 1902 */
+    XML_XPTR_EXTRA_OBJECTS, /* 1903 */
+    XML_C14N_CREATE_CTXT = 1950,
+    XML_C14N_REQUIRES_UTF8, /* 1951 */
+    XML_C14N_CREATE_STACK, /* 1952 */
+    XML_C14N_INVALID_NODE, /* 1953 */
+    XML_C14N_UNKNOW_NODE, /* 1954 */
+    XML_C14N_RELATIVE_NAMESPACE, /* 1955 */
+    XML_FTP_PASV_ANSWER = 2000,
+    XML_FTP_EPSV_ANSWER, /* 2001 */
+    XML_FTP_ACCNT, /* 2002 */
+    XML_FTP_URL_SYNTAX, /* 2003 */
+    XML_HTTP_URL_SYNTAX = 2020,
+    XML_HTTP_USE_IP, /* 2021 */
+    XML_HTTP_UNKNOWN_HOST, /* 2022 */
+    XML_SCHEMAP_SRC_SIMPLE_TYPE_1 = 3000,
+    XML_SCHEMAP_SRC_SIMPLE_TYPE_2, /* 3001 */
+    XML_SCHEMAP_SRC_SIMPLE_TYPE_3, /* 3002 */
+    XML_SCHEMAP_SRC_SIMPLE_TYPE_4, /* 3003 */
+    XML_SCHEMAP_SRC_RESOLVE, /* 3004 */
+    XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE, /* 3005 */
+    XML_SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE, /* 3006 */
+    XML_SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES, /* 3007 */
+    XML_SCHEMAP_ST_PROPS_CORRECT_1, /* 3008 */
+    XML_SCHEMAP_ST_PROPS_CORRECT_2, /* 3009 */
+    XML_SCHEMAP_ST_PROPS_CORRECT_3, /* 3010 */
+    XML_SCHEMAP_COS_ST_RESTRICTS_1_1, /* 3011 */
+    XML_SCHEMAP_COS_ST_RESTRICTS_1_2, /* 3012 */
+    XML_SCHEMAP_COS_ST_RESTRICTS_1_3_1, /* 3013 */
+    XML_SCHEMAP_COS_ST_RESTRICTS_1_3_2, /* 3014 */
+    XML_SCHEMAP_COS_ST_RESTRICTS_2_1, /* 3015 */
+    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_1, /* 3016 */
+    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2, /* 3017 */
+    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_1, /* 3018 */
+    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2, /* 3019 */
+    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_3, /* 3020 */
+    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_4, /* 3021 */
+    XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_5, /* 3022 */
+    XML_SCHEMAP_COS_ST_RESTRICTS_3_1, /* 3023 */
+    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1, /* 3024 */
+    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1_2, /* 3025 */
+    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_2, /* 3026 */
+    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_1, /* 3027 */
+    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_3, /* 3028 */
+    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_4, /* 3029 */
+    XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_5, /* 3030 */
+    XML_SCHEMAP_COS_ST_DERIVED_OK_2_1, /* 3031 */
+    XML_SCHEMAP_COS_ST_DERIVED_OK_2_2, /* 3032 */
+    XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED, /* 3033 */
+    XML_SCHEMAP_S4S_ELEM_MISSING, /* 3034 */
+    XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, /* 3035 */
+    XML_SCHEMAP_S4S_ATTR_MISSING, /* 3036 */
+    XML_SCHEMAP_S4S_ATTR_INVALID_VALUE, /* 3037 */
+    XML_SCHEMAP_SRC_ELEMENT_1, /* 3038 */
+    XML_SCHEMAP_SRC_ELEMENT_2_1, /* 3039 */
+    XML_SCHEMAP_SRC_ELEMENT_2_2, /* 3040 */
+    XML_SCHEMAP_SRC_ELEMENT_3, /* 3041 */
+    XML_SCHEMAP_P_PROPS_CORRECT_1, /* 3042 */
+    XML_SCHEMAP_P_PROPS_CORRECT_2_1, /* 3043 */
+    XML_SCHEMAP_P_PROPS_CORRECT_2_2, /* 3044 */
+    XML_SCHEMAP_E_PROPS_CORRECT_2, /* 3045 */
+    XML_SCHEMAP_E_PROPS_CORRECT_3, /* 3046 */
+    XML_SCHEMAP_E_PROPS_CORRECT_4, /* 3047 */
+    XML_SCHEMAP_E_PROPS_CORRECT_5, /* 3048 */
+    XML_SCHEMAP_E_PROPS_CORRECT_6, /* 3049 */
+    XML_SCHEMAP_SRC_INCLUDE, /* 3050 */
+    XML_SCHEMAP_SRC_ATTRIBUTE_1, /* 3051 */
+    XML_SCHEMAP_SRC_ATTRIBUTE_2, /* 3052 */
+    XML_SCHEMAP_SRC_ATTRIBUTE_3_1, /* 3053 */
+    XML_SCHEMAP_SRC_ATTRIBUTE_3_2, /* 3054 */
+    XML_SCHEMAP_SRC_ATTRIBUTE_4, /* 3055 */
+    XML_SCHEMAP_NO_XMLNS, /* 3056 */
+    XML_SCHEMAP_NO_XSI, /* 3057 */
+    XML_SCHEMAP_COS_VALID_DEFAULT_1, /* 3058 */
+    XML_SCHEMAP_COS_VALID_DEFAULT_2_1, /* 3059 */
+    XML_SCHEMAP_COS_VALID_DEFAULT_2_2_1, /* 3060 */
+    XML_SCHEMAP_COS_VALID_DEFAULT_2_2_2, /* 3061 */
+    XML_SCHEMAP_CVC_SIMPLE_TYPE, /* 3062 */
+    XML_SCHEMAP_COS_CT_EXTENDS_1_1, /* 3063 */
+    XML_SCHEMAP_SRC_IMPORT_1_1, /* 3064 */
+    XML_SCHEMAP_SRC_IMPORT_1_2, /* 3065 */
+    XML_SCHEMAP_SRC_IMPORT_2, /* 3066 */
+    XML_SCHEMAP_SRC_IMPORT_2_1, /* 3067 */
+    XML_SCHEMAP_SRC_IMPORT_2_2, /* 3068 */
+    XML_SCHEMAP_INTERNAL, /* 3069 non-W3C */
+    XML_SCHEMAP_NOT_DETERMINISTIC, /* 3070 non-W3C */
+    XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_1, /* 3071 */
+    XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_2, /* 3072 */
+    XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_3, /* 3073 */
+    XML_SCHEMAP_MG_PROPS_CORRECT_1, /* 3074 */
+    XML_SCHEMAP_MG_PROPS_CORRECT_2, /* 3075 */
+    XML_SCHEMAP_SRC_CT_1, /* 3076 */
+    XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3, /* 3077 */
+    XML_SCHEMAP_AU_PROPS_CORRECT_2, /* 3078 */
+    XML_SCHEMAP_A_PROPS_CORRECT_2, /* 3079 */
+    XML_SCHEMAP_C_PROPS_CORRECT, /* 3080 */
+    XML_SCHEMAP_SRC_REDEFINE, /* 3081 */
+    XML_SCHEMAP_SRC_IMPORT, /* 3082 */
+    XML_SCHEMAP_WARN_SKIP_SCHEMA, /* 3083 */
+    XML_SCHEMAP_WARN_UNLOCATED_SCHEMA, /* 3084 */
+    XML_SCHEMAP_WARN_ATTR_REDECL_PROH, /* 3085 */
+    XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH, /* 3085 */
+    XML_SCHEMAP_AG_PROPS_CORRECT, /* 3086 */
+    XML_SCHEMAP_COS_CT_EXTENDS_1_2, /* 3087 */
+    XML_SCHEMAP_AU_PROPS_CORRECT, /* 3088 */
+    XML_SCHEMAP_A_PROPS_CORRECT_3, /* 3089 */
+    XML_SCHEMAP_COS_ALL_LIMITED, /* 3090 */
+    XML_SCHEMATRONV_ASSERT = 4000, /* 4000 */
+    XML_SCHEMATRONV_REPORT,
+    XML_MODULE_OPEN = 4900, /* 4900 */
+    XML_MODULE_CLOSE, /* 4901 */
+    XML_CHECK_FOUND_ELEMENT = 5000,
+    XML_CHECK_FOUND_ATTRIBUTE, /* 5001 */
+    XML_CHECK_FOUND_TEXT, /* 5002 */
+    XML_CHECK_FOUND_CDATA, /* 5003 */
+    XML_CHECK_FOUND_ENTITYREF, /* 5004 */
+    XML_CHECK_FOUND_ENTITY, /* 5005 */
+    XML_CHECK_FOUND_PI, /* 5006 */
+    XML_CHECK_FOUND_COMMENT, /* 5007 */
+    XML_CHECK_FOUND_DOCTYPE, /* 5008 */
+    XML_CHECK_FOUND_FRAGMENT, /* 5009 */
+    XML_CHECK_FOUND_NOTATION, /* 5010 */
+    XML_CHECK_UNKNOWN_NODE, /* 5011 */
+    XML_CHECK_ENTITY_TYPE, /* 5012 */
+    XML_CHECK_NO_PARENT, /* 5013 */
+    XML_CHECK_NO_DOC, /* 5014 */
+    XML_CHECK_NO_NAME, /* 5015 */
+    XML_CHECK_NO_ELEM, /* 5016 */
+    XML_CHECK_WRONG_DOC, /* 5017 */
+    XML_CHECK_NO_PREV, /* 5018 */
+    XML_CHECK_WRONG_PREV, /* 5019 */
+    XML_CHECK_NO_NEXT, /* 5020 */
+    XML_CHECK_WRONG_NEXT, /* 5021 */
+    XML_CHECK_NOT_DTD, /* 5022 */
+    XML_CHECK_NOT_ATTR, /* 5023 */
+    XML_CHECK_NOT_ATTR_DECL, /* 5024 */
+    XML_CHECK_NOT_ELEM_DECL, /* 5025 */
+    XML_CHECK_NOT_ENTITY_DECL, /* 5026 */
+    XML_CHECK_NOT_NS_DECL, /* 5027 */
+    XML_CHECK_NO_HREF, /* 5028 */
+    XML_CHECK_WRONG_PARENT,/* 5029 */
+    XML_CHECK_NS_SCOPE, /* 5030 */
+    XML_CHECK_NS_ANCESTOR, /* 5031 */
+    XML_CHECK_NOT_UTF8, /* 5032 */
+    XML_CHECK_NO_DICT, /* 5033 */
+    XML_CHECK_NOT_NCNAME, /* 5034 */
+    XML_CHECK_OUTSIDE_DICT, /* 5035 */
+    XML_CHECK_WRONG_NAME, /* 5036 */
+    XML_CHECK_NAME_NOT_NULL, /* 5037 */
+    XML_I18N_NO_NAME = 6000,
+    XML_I18N_NO_HANDLER, /* 6001 */
+    XML_I18N_EXCESS_HANDLER, /* 6002 */
+    XML_I18N_CONV_FAILED, /* 6003 */
+    XML_I18N_NO_OUTPUT /* 6004 */
+#if 0
+    XML_CHECK_, /* 5033 */
+    XML_CHECK_X /* 503 */
+#endif
+} xmlParserErrors;
+
+/**
+ * xmlGenericErrorFunc:
+ * @ctx:  a parsing context
+ * @msg:  the message
+ * @...:  the extra arguments of the varags to format the message
+ *
+ * Signature of the function to use when there is an error and
+ * no parsing or validity context available .
+ */
+typedef void (XMLCDECL *xmlGenericErrorFunc) (void *ctx,
+				 const char *msg,
+				 ...) ATTRIBUTE_PRINTF(2,3);
+/**
+ * xmlStructuredErrorFunc:
+ * @userData:  user provided data for the error callback
+ * @error:  the error being raised.
+ *
+ * Signature of the function to use when there is an error and
+ * the module handles the new error reporting mechanism.
+ */
+typedef void (XMLCALL *xmlStructuredErrorFunc) (void *userData, xmlErrorPtr error);
+
+/*
+ * Use the following function to reset the two global variables
+ * xmlGenericError and xmlGenericErrorContext.
+ */
+XMLPUBFUN void XMLCALL
+    xmlSetGenericErrorFunc	(void *ctx,
+				 xmlGenericErrorFunc handler);
+XMLPUBFUN void XMLCALL
+    initGenericErrorDefaultFunc	(xmlGenericErrorFunc *handler);
+
+XMLPUBFUN void XMLCALL
+    xmlSetStructuredErrorFunc	(void *ctx,
+				 xmlStructuredErrorFunc handler);
+/*
+ * Default message routines used by SAX and Valid context for error
+ * and warning reporting.
+ */
+XMLPUBFUN void XMLCDECL
+    xmlParserError		(void *ctx,
+				 const char *msg,
+				 ...) ATTRIBUTE_PRINTF(2,3);
+XMLPUBFUN void XMLCDECL
+    xmlParserWarning		(void *ctx,
+				 const char *msg,
+				 ...) ATTRIBUTE_PRINTF(2,3);
+XMLPUBFUN void XMLCDECL
+    xmlParserValidityError	(void *ctx,
+				 const char *msg,
+				 ...) ATTRIBUTE_PRINTF(2,3);
+XMLPUBFUN void XMLCDECL
+    xmlParserValidityWarning	(void *ctx,
+				 const char *msg,
+				 ...) ATTRIBUTE_PRINTF(2,3);
+XMLPUBFUN void XMLCALL
+    xmlParserPrintFileInfo	(xmlParserInputPtr input);
+XMLPUBFUN void XMLCALL
+    xmlParserPrintFileContext	(xmlParserInputPtr input);
+
+/*
+ * Extended error information routines
+ */
+XMLPUBFUN xmlErrorPtr XMLCALL
+    xmlGetLastError		(void);
+XMLPUBFUN void XMLCALL
+    xmlResetLastError		(void);
+XMLPUBFUN xmlErrorPtr XMLCALL
+    xmlCtxtGetLastError		(void *ctx);
+XMLPUBFUN void XMLCALL
+    xmlCtxtResetLastError	(void *ctx);
+XMLPUBFUN void XMLCALL
+    xmlResetError		(xmlErrorPtr err);
+XMLPUBFUN int XMLCALL
+    xmlCopyError		(xmlErrorPtr from,
+				 xmlErrorPtr to);
+
+#ifdef IN_LIBXML
+/*
+ * Internal callback reporting routine
+ */
+XMLPUBFUN void XMLCALL
+    __xmlRaiseError		(xmlStructuredErrorFunc schannel,
+				 xmlGenericErrorFunc channel,
+				 void *data,
+                                 void *ctx,
+				 void *node,
+				 int domain,
+				 int code,
+				 xmlErrorLevel level,
+				 const char *file,
+				 int line,
+				 const char *str1,
+				 const char *str2,
+				 const char *str3,
+				 int int1,
+				 int col,
+				 const char *msg,
+				 ...) ATTRIBUTE_PRINTF(16,17);
+XMLPUBFUN void XMLCALL
+    __xmlSimpleError		(int domain,
+				 int code,
+				 xmlNodePtr node,
+				 const char *msg,
+				 const char *extra);
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_ERROR_H__ */
diff --git a/interfaces/ext/libxml/xmlexports.h b/interfaces/ext/libxml/xmlexports.h
new file mode 100644
index 0000000..29a6f54
--- /dev/null
+++ b/interfaces/ext/libxml/xmlexports.h
@@ -0,0 +1,157 @@
+/*
+ * Summary: macros for marking symbols as exportable/importable.
+ * Description: macros for marking symbols as exportable/importable.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Igor Zlatovic <igor at zlatkovic.com>
+ */
+
+#ifndef __XML_EXPORTS_H__
+#define __XML_EXPORTS_H__
+
+/**
+ * XMLPUBFUN, XMLPUBVAR, XMLCALL
+ *
+ * Macros which declare an exportable function, an exportable variable and
+ * the calling convention used for functions.
+ *
+ * Please use an extra block for every platform/compiler combination when
+ * modifying this, rather than overlong #ifdef lines. This helps
+ * readability as well as the fact that different compilers on the same
+ * platform might need different definitions.
+ */
+
+/**
+ * XMLPUBFUN:
+ *
+ * Macros which declare an exportable function
+ */
+#define XMLPUBFUN
+/**
+ * XMLPUBVAR:
+ *
+ * Macros which declare an exportable variable
+ */
+#define XMLPUBVAR extern
+/**
+ * XMLCALL:
+ *
+ * Macros which declare the called convention for exported functions
+ */
+#define XMLCALL
+/**
+ * XMLCDECL:
+ *
+ * Macro which declares the calling convention for exported functions that 
+ * use '...'.
+ */
+#define XMLCDECL
+
+/** DOC_DISABLE */
+
+/* Windows platform with MS compiler */
+#if defined(_WIN32) && defined(_MSC_VER)
+  #undef XMLPUBFUN
+  #undef XMLPUBVAR
+  #undef XMLCALL
+  #undef XMLCDECL
+  #if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
+    #define XMLPUBFUN __declspec(dllexport)
+    #define XMLPUBVAR __declspec(dllexport)
+  #else
+    #define XMLPUBFUN
+    #if !defined(LIBXML_STATIC)
+      #define XMLPUBVAR __declspec(dllimport) extern
+    #else
+      #define XMLPUBVAR extern
+    #endif
+  #endif
+  #if defined(LIBXML_FASTCALL)
+    #define XMLCALL __fastcall
+  #else
+    #define XMLCALL __cdecl
+  #endif
+  #define XMLCDECL __cdecl
+  #if !defined _REENTRANT
+    #define _REENTRANT
+  #endif
+#endif
+
+/* Windows platform with Borland compiler */
+#if defined(_WIN32) && defined(__BORLANDC__)
+  #undef XMLPUBFUN
+  #undef XMLPUBVAR
+  #undef XMLCALL
+  #undef XMLCDECL
+  #if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
+    #define XMLPUBFUN __declspec(dllexport)
+    #define XMLPUBVAR __declspec(dllexport) extern
+  #else
+    #define XMLPUBFUN
+    #if !defined(LIBXML_STATIC)
+      #define XMLPUBVAR __declspec(dllimport) extern
+    #else
+      #define XMLPUBVAR extern
+    #endif
+  #endif
+  #define XMLCALL __cdecl
+  #define XMLCDECL __cdecl
+  #if !defined _REENTRANT
+    #define _REENTRANT
+  #endif
+#endif
+
+/* Windows platform with GNU compiler (Mingw) */
+#if defined(_WIN32) && defined(__MINGW32__)
+  #undef XMLPUBFUN
+  #undef XMLPUBVAR
+  #undef XMLCALL
+  #undef XMLCDECL
+  #if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
+    #define XMLPUBFUN __declspec(dllexport)
+    #define XMLPUBVAR __declspec(dllexport)
+  #else
+    #define XMLPUBFUN
+    #if !defined(LIBXML_STATIC)
+      #define XMLPUBVAR __declspec(dllimport) extern
+    #else
+      #define XMLPUBVAR extern
+    #endif
+  #endif
+  #define XMLCALL __cdecl
+  #define XMLCDECL __cdecl
+  #if !defined _REENTRANT
+    #define _REENTRANT
+  #endif
+#endif
+
+/* Cygwin platform, GNU compiler */
+#if defined(_WIN32) && defined(__CYGWIN__)
+  #undef XMLPUBFUN
+  #undef XMLPUBVAR
+  #undef XMLCALL
+  #undef XMLCDECL
+  #if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
+    #define XMLPUBFUN __declspec(dllexport)
+    #define XMLPUBVAR __declspec(dllexport)
+  #else
+    #define XMLPUBFUN
+    #if !defined(LIBXML_STATIC)
+      #define XMLPUBVAR __declspec(dllimport) extern
+    #else
+      #define XMLPUBVAR
+    #endif
+  #endif
+  #define XMLCALL __cdecl
+  #define XMLCDECL __cdecl
+#endif
+
+/* Compatibility */
+#if !defined(LIBXML_DLL_IMPORT)
+#define LIBXML_DLL_IMPORT XMLPUBVAR
+#endif
+
+#endif /* __XML_EXPORTS_H__ */
+
+
diff --git a/interfaces/ext/libxml/xmlmemory.h b/interfaces/ext/libxml/xmlmemory.h
new file mode 100644
index 0000000..8f3b109
--- /dev/null
+++ b/interfaces/ext/libxml/xmlmemory.h
@@ -0,0 +1,224 @@
+/*
+ * Summary: interface for the memory allocator
+ * Description: provides interfaces for the memory allocator,
+ *              including debugging capabilities.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __DEBUG_MEMORY_ALLOC__
+#define __DEBUG_MEMORY_ALLOC__
+
+#include <stdio.h>
+#include <libxml/xmlversion.h>
+
+/**
+ * DEBUG_MEMORY:
+ *
+ * DEBUG_MEMORY replaces the allocator with a collect and debug
+ * shell to the libc allocator.
+ * DEBUG_MEMORY should only be activated when debugging
+ * libxml i.e. if libxml has been configured with --with-debug-mem too.
+ */
+/* #define DEBUG_MEMORY_FREED */
+/* #define DEBUG_MEMORY_LOCATION */
+
+#ifdef DEBUG
+#ifndef DEBUG_MEMORY
+#define DEBUG_MEMORY
+#endif
+#endif
+
+/**
+ * DEBUG_MEMORY_LOCATION:
+ *
+ * DEBUG_MEMORY_LOCATION should be activated only when debugging
+ * libxml i.e. if libxml has been configured with --with-debug-mem too.
+ */
+#ifdef DEBUG_MEMORY_LOCATION
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The XML memory wrapper support 4 basic overloadable functions.
+ */
+/**
+ * xmlFreeFunc:
+ * @mem: an already allocated block of memory
+ *
+ * Signature for a free() implementation.
+ */
+typedef void (XMLCALL *xmlFreeFunc)(void *mem);
+/**
+ * xmlMallocFunc:
+ * @size:  the size requested in bytes
+ *
+ * Signature for a malloc() implementation.
+ *
+ * Returns a pointer to the newly allocated block or NULL in case of error.
+ */
+typedef void *(ATTRIBUTE_ALLOC_SIZE(1) XMLCALL *xmlMallocFunc)(size_t size);
+
+/**
+ * xmlReallocFunc:
+ * @mem: an already allocated block of memory
+ * @size:  the new size requested in bytes
+ *
+ * Signature for a realloc() implementation.
+ *
+ * Returns a pointer to the newly reallocated block or NULL in case of error.
+ */
+typedef void *(XMLCALL *xmlReallocFunc)(void *mem, size_t size);
+
+/**
+ * xmlStrdupFunc:
+ * @str: a zero terminated string
+ *
+ * Signature for an strdup() implementation.
+ *
+ * Returns the copy of the string or NULL in case of error.
+ */
+typedef char *(XMLCALL *xmlStrdupFunc)(const char *str);
+
+/*
+ * The 4 interfaces used for all memory handling within libxml.
+LIBXML_DLL_IMPORT extern xmlFreeFunc xmlFree;
+LIBXML_DLL_IMPORT extern xmlMallocFunc xmlMalloc;
+LIBXML_DLL_IMPORT extern xmlMallocFunc xmlMallocAtomic;
+LIBXML_DLL_IMPORT extern xmlReallocFunc xmlRealloc;
+LIBXML_DLL_IMPORT extern xmlStrdupFunc xmlMemStrdup;
+ */
+
+/*
+ * The way to overload the existing functions.
+ * The xmlGc function have an extra entry for atomic block
+ * allocations useful for garbage collected memory allocators
+ */
+XMLPUBFUN int XMLCALL
+	xmlMemSetup	(xmlFreeFunc freeFunc,
+			 xmlMallocFunc mallocFunc,
+			 xmlReallocFunc reallocFunc,
+			 xmlStrdupFunc strdupFunc);
+XMLPUBFUN int XMLCALL
+	xmlMemGet	(xmlFreeFunc *freeFunc,
+			 xmlMallocFunc *mallocFunc,
+			 xmlReallocFunc *reallocFunc,
+			 xmlStrdupFunc *strdupFunc);
+XMLPUBFUN int XMLCALL
+	xmlGcMemSetup	(xmlFreeFunc freeFunc,
+			 xmlMallocFunc mallocFunc,
+			 xmlMallocFunc mallocAtomicFunc,
+			 xmlReallocFunc reallocFunc,
+			 xmlStrdupFunc strdupFunc);
+XMLPUBFUN int XMLCALL
+	xmlGcMemGet	(xmlFreeFunc *freeFunc,
+			 xmlMallocFunc *mallocFunc,
+			 xmlMallocFunc *mallocAtomicFunc,
+			 xmlReallocFunc *reallocFunc,
+			 xmlStrdupFunc *strdupFunc);
+
+/*
+ * Initialization of the memory layer.
+ */
+XMLPUBFUN int XMLCALL
+	xmlInitMemory	(void);
+
+/*
+ * Cleanup of the memory layer.
+ */
+XMLPUBFUN void XMLCALL
+                xmlCleanupMemory        (void);
+/*
+ * These are specific to the XML debug memory wrapper.
+ */
+XMLPUBFUN int XMLCALL
+	xmlMemUsed	(void);
+XMLPUBFUN int XMLCALL
+	xmlMemBlocks	(void);
+XMLPUBFUN void XMLCALL
+	xmlMemDisplay	(FILE *fp);
+XMLPUBFUN void XMLCALL
+	xmlMemDisplayLast(FILE *fp, long nbBytes);
+XMLPUBFUN void XMLCALL
+	xmlMemShow	(FILE *fp, int nr);
+XMLPUBFUN void XMLCALL
+	xmlMemoryDump	(void);
+XMLPUBFUN void * XMLCALL
+	xmlMemMalloc	(size_t size) ATTRIBUTE_ALLOC_SIZE(1);
+XMLPUBFUN void * XMLCALL
+	xmlMemRealloc	(void *ptr,size_t size);
+XMLPUBFUN void XMLCALL
+	xmlMemFree	(void *ptr);
+XMLPUBFUN char * XMLCALL
+	xmlMemoryStrdup	(const char *str);
+XMLPUBFUN void * XMLCALL
+	xmlMallocLoc	(size_t size, const char *file, int line) ATTRIBUTE_ALLOC_SIZE(1);
+XMLPUBFUN void * XMLCALL
+	xmlReallocLoc	(void *ptr, size_t size, const char *file, int line);
+XMLPUBFUN void * XMLCALL
+	xmlMallocAtomicLoc (size_t size, const char *file, int line) ATTRIBUTE_ALLOC_SIZE(1);
+XMLPUBFUN char * XMLCALL
+	xmlMemStrdupLoc	(const char *str, const char *file, int line);
+
+
+#ifdef DEBUG_MEMORY_LOCATION
+/**
+ * xmlMalloc:
+ * @size:  number of bytes to allocate
+ *
+ * Wrapper for the malloc() function used in the XML library.
+ *
+ * Returns the pointer to the allocated area or NULL in case of error.
+ */
+#define xmlMalloc(size) xmlMallocLoc((size), __FILE__, __LINE__)
+/**
+ * xmlMallocAtomic:
+ * @size:  number of bytes to allocate
+ *
+ * Wrapper for the malloc() function used in the XML library for allocation
+ * of block not containing pointers to other areas.
+ *
+ * Returns the pointer to the allocated area or NULL in case of error.
+ */
+#define xmlMallocAtomic(size) xmlMallocAtomicLoc((size), __FILE__, __LINE__)
+/**
+ * xmlRealloc:
+ * @ptr:  pointer to the existing allocated area
+ * @size:  number of bytes to allocate
+ *
+ * Wrapper for the realloc() function used in the XML library.
+ *
+ * Returns the pointer to the allocated area or NULL in case of error.
+ */
+#define xmlRealloc(ptr, size) xmlReallocLoc((ptr), (size), __FILE__, __LINE__)
+/**
+ * xmlMemStrdup:
+ * @str:  pointer to the existing string
+ *
+ * Wrapper for the strdup() function, xmlStrdup() is usually preferred.
+ *
+ * Returns the pointer to the allocated area or NULL in case of error.
+ */
+#define xmlMemStrdup(str) xmlMemStrdupLoc((str), __FILE__, __LINE__)
+
+#endif /* DEBUG_MEMORY_LOCATION */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#ifndef __XML_GLOBALS_H
+#ifndef __XML_THREADS_H__
+#include <libxml/threads.h>
+#include <libxml/globals.h>
+#endif
+#endif
+
+#endif  /* __DEBUG_MEMORY_ALLOC__ */
+
diff --git a/interfaces/ext/libxml/xmlmodule.h b/interfaces/ext/libxml/xmlmodule.h
new file mode 100644
index 0000000..8f4a560
--- /dev/null
+++ b/interfaces/ext/libxml/xmlmodule.h
@@ -0,0 +1,57 @@
+/*
+ * Summary: dynamic module loading
+ * Description: basic API for dynamic module loading, used by
+ *              libexslt added in 2.6.17
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Joel W. Reed
+ */
+
+#ifndef __XML_MODULE_H__
+#define __XML_MODULE_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_MODULES_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlModulePtr:
+ *
+ * A handle to a dynamically loaded module
+ */
+typedef struct _xmlModule xmlModule;
+typedef xmlModule *xmlModulePtr;
+
+/**
+ * xmlModuleOption:
+ *
+ * enumeration of options that can be passed down to xmlModuleOpen()
+ */
+typedef enum {
+    XML_MODULE_LAZY = 1,	/* lazy binding */
+    XML_MODULE_LOCAL= 2		/* local binding */
+} xmlModuleOption;
+
+XMLPUBFUN xmlModulePtr XMLCALL xmlModuleOpen	(const char *filename,
+						 int options);
+
+XMLPUBFUN int XMLCALL xmlModuleSymbol		(xmlModulePtr module,
+						 const char* name,
+						 void **result);
+
+XMLPUBFUN int XMLCALL xmlModuleClose		(xmlModulePtr module);
+
+XMLPUBFUN int XMLCALL xmlModuleFree		(xmlModulePtr module);
+
+#ifdef __cplusplus
+}
+#endif 
+
+#endif /* LIBXML_MODULES_ENABLED */
+
+#endif /*__XML_MODULE_H__ */
diff --git a/interfaces/ext/libxml/xmlreader.h b/interfaces/ext/libxml/xmlreader.h
new file mode 100644
index 0000000..6964482
--- /dev/null
+++ b/interfaces/ext/libxml/xmlreader.h
@@ -0,0 +1,424 @@
+/*
+ * Summary: the XMLReader implementation
+ * Description: API of the XML streaming API based on C# interfaces.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XMLREADER_H__
+#define __XML_XMLREADER_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/xmlIO.h>
+#ifdef LIBXML_SCHEMAS_ENABLED
+#include <libxml/relaxng.h>
+#include <libxml/xmlschemas.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlParserSeverities:
+ *
+ * How severe an error callback is when the per-reader error callback API
+ * is used.
+ */
+typedef enum {
+    XML_PARSER_SEVERITY_VALIDITY_WARNING = 1,
+    XML_PARSER_SEVERITY_VALIDITY_ERROR = 2,
+    XML_PARSER_SEVERITY_WARNING = 3,
+    XML_PARSER_SEVERITY_ERROR = 4
+} xmlParserSeverities;
+
+#ifdef LIBXML_READER_ENABLED
+
+/**
+ * xmlTextReaderMode:
+ *
+ * Internal state values for the reader.
+ */
+typedef enum {
+    XML_TEXTREADER_MODE_INITIAL = 0,
+    XML_TEXTREADER_MODE_INTERACTIVE = 1,
+    XML_TEXTREADER_MODE_ERROR = 2,
+    XML_TEXTREADER_MODE_EOF =3,
+    XML_TEXTREADER_MODE_CLOSED = 4,
+    XML_TEXTREADER_MODE_READING = 5
+} xmlTextReaderMode;
+
+/**
+ * xmlParserProperties:
+ *
+ * Some common options to use with xmlTextReaderSetParserProp, but it
+ * is better to use xmlParserOption and the xmlReaderNewxxx and
+ * xmlReaderForxxx APIs now.
+ */
+typedef enum {
+    XML_PARSER_LOADDTD = 1,
+    XML_PARSER_DEFAULTATTRS = 2,
+    XML_PARSER_VALIDATE = 3,
+    XML_PARSER_SUBST_ENTITIES = 4
+} xmlParserProperties;
+
+/**
+ * xmlReaderTypes:
+ *
+ * Predefined constants for the different types of nodes.
+ */
+typedef enum {
+    XML_READER_TYPE_NONE = 0,
+    XML_READER_TYPE_ELEMENT = 1,
+    XML_READER_TYPE_ATTRIBUTE = 2,
+    XML_READER_TYPE_TEXT = 3,
+    XML_READER_TYPE_CDATA = 4,
+    XML_READER_TYPE_ENTITY_REFERENCE = 5,
+    XML_READER_TYPE_ENTITY = 6,
+    XML_READER_TYPE_PROCESSING_INSTRUCTION = 7,
+    XML_READER_TYPE_COMMENT = 8,
+    XML_READER_TYPE_DOCUMENT = 9,
+    XML_READER_TYPE_DOCUMENT_TYPE = 10,
+    XML_READER_TYPE_DOCUMENT_FRAGMENT = 11,
+    XML_READER_TYPE_NOTATION = 12,
+    XML_READER_TYPE_WHITESPACE = 13,
+    XML_READER_TYPE_SIGNIFICANT_WHITESPACE = 14,
+    XML_READER_TYPE_END_ELEMENT = 15,
+    XML_READER_TYPE_END_ENTITY = 16,
+    XML_READER_TYPE_XML_DECLARATION = 17
+} xmlReaderTypes;
+
+/**
+ * xmlTextReader:
+ *
+ * Structure for an xmlReader context.
+ */
+typedef struct _xmlTextReader xmlTextReader;
+
+/**
+ * xmlTextReaderPtr:
+ *
+ * Pointer to an xmlReader context.
+ */
+typedef xmlTextReader *xmlTextReaderPtr;
+
+/*
+ * Constructors & Destructor
+ */
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+			xmlNewTextReader	(xmlParserInputBufferPtr input,
+	                                         const char *URI);
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+			xmlNewTextReaderFilename(const char *URI);
+
+XMLPUBFUN void XMLCALL
+			xmlFreeTextReader	(xmlTextReaderPtr reader);
+
+XMLPUBFUN int XMLCALL
+            xmlTextReaderSetup(xmlTextReaderPtr reader,
+                   xmlParserInputBufferPtr input, const char *URL,
+                   const char *encoding, int options);
+
+/*
+ * Iterators
+ */
+XMLPUBFUN int XMLCALL
+			xmlTextReaderRead	(xmlTextReaderPtr reader);
+
+#ifdef LIBXML_WRITER_ENABLED
+XMLPUBFUN xmlChar * XMLCALL
+			xmlTextReaderReadInnerXml	(xmlTextReaderPtr reader);
+
+XMLPUBFUN xmlChar * XMLCALL
+			xmlTextReaderReadOuterXml	(xmlTextReaderPtr reader);
+#endif
+
+XMLPUBFUN xmlChar * XMLCALL
+			xmlTextReaderReadString		(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+			xmlTextReaderReadAttributeValue	(xmlTextReaderPtr reader);
+
+/*
+ * Attributes of the node
+ */
+XMLPUBFUN int XMLCALL
+			xmlTextReaderAttributeCount(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+			xmlTextReaderDepth	(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+			xmlTextReaderHasAttributes(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+			xmlTextReaderHasValue(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+			xmlTextReaderIsDefault	(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+			xmlTextReaderIsEmptyElement(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+			xmlTextReaderNodeType	(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+			xmlTextReaderQuoteChar	(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+			xmlTextReaderReadState	(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+                        xmlTextReaderIsNamespaceDecl(xmlTextReaderPtr reader);
+
+XMLPUBFUN const xmlChar * XMLCALL
+		    xmlTextReaderConstBaseUri	(xmlTextReaderPtr reader);
+XMLPUBFUN const xmlChar * XMLCALL
+		    xmlTextReaderConstLocalName	(xmlTextReaderPtr reader);
+XMLPUBFUN const xmlChar * XMLCALL
+		    xmlTextReaderConstName	(xmlTextReaderPtr reader);
+XMLPUBFUN const xmlChar * XMLCALL
+		    xmlTextReaderConstNamespaceUri(xmlTextReaderPtr reader);
+XMLPUBFUN const xmlChar * XMLCALL
+		    xmlTextReaderConstPrefix	(xmlTextReaderPtr reader);
+XMLPUBFUN const xmlChar * XMLCALL
+		    xmlTextReaderConstXmlLang	(xmlTextReaderPtr reader);
+XMLPUBFUN const xmlChar * XMLCALL
+		    xmlTextReaderConstString	(xmlTextReaderPtr reader,
+						 const xmlChar *str);
+XMLPUBFUN const xmlChar * XMLCALL
+		    xmlTextReaderConstValue	(xmlTextReaderPtr reader);
+
+/*
+ * use the Const version of the routine for
+ * better performance and simpler code
+ */
+XMLPUBFUN xmlChar * XMLCALL
+			xmlTextReaderBaseUri	(xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+			xmlTextReaderLocalName	(xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+			xmlTextReaderName	(xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+			xmlTextReaderNamespaceUri(xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+			xmlTextReaderPrefix	(xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+			xmlTextReaderXmlLang	(xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+			xmlTextReaderValue	(xmlTextReaderPtr reader);
+
+/*
+ * Methods of the XmlTextReader
+ */
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderClose		(xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+		    xmlTextReaderGetAttributeNo	(xmlTextReaderPtr reader,
+						 int no);
+XMLPUBFUN xmlChar * XMLCALL
+		    xmlTextReaderGetAttribute	(xmlTextReaderPtr reader,
+						 const xmlChar *name);
+XMLPUBFUN xmlChar * XMLCALL
+		    xmlTextReaderGetAttributeNs	(xmlTextReaderPtr reader,
+						 const xmlChar *localName,
+						 const xmlChar *namespaceURI);
+XMLPUBFUN xmlParserInputBufferPtr XMLCALL
+		    xmlTextReaderGetRemainder	(xmlTextReaderPtr reader);
+XMLPUBFUN xmlChar * XMLCALL
+		    xmlTextReaderLookupNamespace(xmlTextReaderPtr reader,
+						 const xmlChar *prefix);
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderMoveToAttributeNo(xmlTextReaderPtr reader,
+						 int no);
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderMoveToAttribute(xmlTextReaderPtr reader,
+						 const xmlChar *name);
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderMoveToAttributeNs(xmlTextReaderPtr reader,
+						 const xmlChar *localName,
+						 const xmlChar *namespaceURI);
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderMoveToFirstAttribute(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderMoveToNextAttribute(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderMoveToElement	(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderNormalization	(xmlTextReaderPtr reader);
+XMLPUBFUN const xmlChar * XMLCALL
+		    xmlTextReaderConstEncoding  (xmlTextReaderPtr reader);
+
+/*
+ * Extensions
+ */
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderSetParserProp	(xmlTextReaderPtr reader,
+						 int prop,
+						 int value);
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderGetParserProp	(xmlTextReaderPtr reader,
+						 int prop);
+XMLPUBFUN xmlNodePtr XMLCALL
+		    xmlTextReaderCurrentNode	(xmlTextReaderPtr reader);
+
+XMLPUBFUN int XMLCALL
+            xmlTextReaderGetParserLineNumber(xmlTextReaderPtr reader);
+
+XMLPUBFUN int XMLCALL
+            xmlTextReaderGetParserColumnNumber(xmlTextReaderPtr reader);
+
+XMLPUBFUN xmlNodePtr XMLCALL
+		    xmlTextReaderPreserve	(xmlTextReaderPtr reader);
+#ifdef LIBXML_PATTERN_ENABLED
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderPreservePattern(xmlTextReaderPtr reader,
+						 const xmlChar *pattern,
+						 const xmlChar **namespaces);
+#endif /* LIBXML_PATTERN_ENABLED */
+XMLPUBFUN xmlDocPtr XMLCALL
+		    xmlTextReaderCurrentDoc	(xmlTextReaderPtr reader);
+XMLPUBFUN xmlNodePtr XMLCALL
+		    xmlTextReaderExpand		(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderNext		(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderNextSibling	(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderIsValid	(xmlTextReaderPtr reader);
+#ifdef LIBXML_SCHEMAS_ENABLED
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderRelaxNGValidate(xmlTextReaderPtr reader,
+						 const char *rng);
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader,
+						 xmlRelaxNGPtr schema);
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderSchemaValidate	(xmlTextReaderPtr reader,
+						 const char *xsd);
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderSchemaValidateCtxt(xmlTextReaderPtr reader,
+						 xmlSchemaValidCtxtPtr ctxt,
+						 int options);
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderSetSchema	(xmlTextReaderPtr reader,
+						 xmlSchemaPtr schema);
+#endif
+XMLPUBFUN const xmlChar * XMLCALL
+		    xmlTextReaderConstXmlVersion(xmlTextReaderPtr reader);
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderStandalone     (xmlTextReaderPtr reader);
+
+
+/*
+ * Index lookup
+ */
+XMLPUBFUN long XMLCALL
+		xmlTextReaderByteConsumed	(xmlTextReaderPtr reader);
+
+/*
+ * New more complete APIs for simpler creation and reuse of readers
+ */
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+		xmlReaderWalker		(xmlDocPtr doc);
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+		xmlReaderForDoc		(const xmlChar * cur,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+		xmlReaderForFile	(const char *filename,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+		xmlReaderForMemory	(const char *buffer,
+					 int size,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+		xmlReaderForFd		(int fd,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN xmlTextReaderPtr XMLCALL
+		xmlReaderForIO		(xmlInputReadCallback ioread,
+					 xmlInputCloseCallback ioclose,
+					 void *ioctx,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+
+XMLPUBFUN int XMLCALL
+		xmlReaderNewWalker	(xmlTextReaderPtr reader,
+					 xmlDocPtr doc);
+XMLPUBFUN int XMLCALL
+		xmlReaderNewDoc		(xmlTextReaderPtr reader,
+					 const xmlChar * cur,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN int XMLCALL
+		xmlReaderNewFile	(xmlTextReaderPtr reader,
+					 const char *filename,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN int XMLCALL
+		xmlReaderNewMemory	(xmlTextReaderPtr reader,
+					 const char *buffer,
+					 int size,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN int XMLCALL
+		xmlReaderNewFd		(xmlTextReaderPtr reader,
+					 int fd,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN int XMLCALL
+		xmlReaderNewIO		(xmlTextReaderPtr reader,
+					 xmlInputReadCallback ioread,
+					 xmlInputCloseCallback ioclose,
+					 void *ioctx,
+					 const char *URL,
+					 const char *encoding,
+					 int options);
+/*
+ * Error handling extensions
+ */
+typedef void *  xmlTextReaderLocatorPtr;
+
+/**
+ * xmlTextReaderErrorFunc:
+ * @arg: the user argument
+ * @msg: the message
+ * @severity: the severity of the error
+ * @locator: a locator indicating where the error occured
+ *
+ * Signature of an error callback from a reader parser
+ */
+typedef void   (XMLCALL *xmlTextReaderErrorFunc)(void *arg,
+						 const char *msg,
+						 xmlParserSeverities severity,
+						 xmlTextReaderLocatorPtr locator);
+XMLPUBFUN int XMLCALL
+		    xmlTextReaderLocatorLineNumber(xmlTextReaderLocatorPtr locator);
+/*int             xmlTextReaderLocatorLinePosition(xmlTextReaderLocatorPtr locator);*/
+XMLPUBFUN xmlChar * XMLCALL
+		    xmlTextReaderLocatorBaseURI (xmlTextReaderLocatorPtr locator);
+XMLPUBFUN void XMLCALL
+		    xmlTextReaderSetErrorHandler(xmlTextReaderPtr reader,
+						 xmlTextReaderErrorFunc f,
+						 void *arg);
+XMLPUBFUN void XMLCALL
+		    xmlTextReaderSetStructuredErrorHandler(xmlTextReaderPtr reader,
+							   xmlStructuredErrorFunc f,
+							   void *arg);
+XMLPUBFUN void XMLCALL
+		    xmlTextReaderGetErrorHandler(xmlTextReaderPtr reader,
+						 xmlTextReaderErrorFunc *f,
+						 void **arg);
+
+#endif /* LIBXML_READER_ENABLED */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __XML_XMLREADER_H__ */
+
diff --git a/interfaces/ext/libxml/xmlregexp.h b/interfaces/ext/libxml/xmlregexp.h
new file mode 100644
index 0000000..7009645
--- /dev/null
+++ b/interfaces/ext/libxml/xmlregexp.h
@@ -0,0 +1,222 @@
+/*
+ * Summary: regular expressions handling
+ * Description: basic API for libxml regular expressions handling used
+ *              for XML Schemas and validation.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_REGEXP_H__
+#define __XML_REGEXP_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_REGEXP_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlRegexpPtr:
+ *
+ * A libxml regular expression, they can actually be far more complex
+ * thank the POSIX regex expressions.
+ */
+typedef struct _xmlRegexp xmlRegexp;
+typedef xmlRegexp *xmlRegexpPtr;
+
+/**
+ * xmlRegExecCtxtPtr:
+ *
+ * A libxml progressive regular expression evaluation context
+ */
+typedef struct _xmlRegExecCtxt xmlRegExecCtxt;
+typedef xmlRegExecCtxt *xmlRegExecCtxtPtr;
+
+#ifdef __cplusplus
+}
+#endif
+#include <libxml/tree.h>
+#include <libxml/dict.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * The POSIX like API
+ */
+XMLPUBFUN xmlRegexpPtr XMLCALL
+		    xmlRegexpCompile	(const xmlChar *regexp);
+XMLPUBFUN void XMLCALL			 xmlRegFreeRegexp(xmlRegexpPtr regexp);
+XMLPUBFUN int XMLCALL
+		    xmlRegexpExec	(xmlRegexpPtr comp,
+					 const xmlChar *value);
+XMLPUBFUN void XMLCALL
+		    xmlRegexpPrint	(FILE *output,
+					 xmlRegexpPtr regexp);
+XMLPUBFUN int XMLCALL
+		    xmlRegexpIsDeterminist(xmlRegexpPtr comp);
+
+/**
+ * xmlRegExecCallbacks:
+ * @exec: the regular expression context
+ * @token: the current token string
+ * @transdata: transition data
+ * @inputdata: input data
+ *
+ * Callback function when doing a transition in the automata
+ */
+typedef void (*xmlRegExecCallbacks) (xmlRegExecCtxtPtr exec,
+	                             const xmlChar *token,
+				     void *transdata,
+				     void *inputdata);
+
+/*
+ * The progressive API
+ */
+XMLPUBFUN xmlRegExecCtxtPtr XMLCALL
+		    xmlRegNewExecCtxt	(xmlRegexpPtr comp,
+					 xmlRegExecCallbacks callback,
+					 void *data);
+XMLPUBFUN void XMLCALL
+		    xmlRegFreeExecCtxt	(xmlRegExecCtxtPtr exec);
+XMLPUBFUN int XMLCALL
+		    xmlRegExecPushString(xmlRegExecCtxtPtr exec,
+					 const xmlChar *value,
+					 void *data);
+XMLPUBFUN int XMLCALL
+		    xmlRegExecPushString2(xmlRegExecCtxtPtr exec,
+					 const xmlChar *value,
+					 const xmlChar *value2,
+					 void *data);
+
+XMLPUBFUN int XMLCALL
+		    xmlRegExecNextValues(xmlRegExecCtxtPtr exec,
+					 int *nbval,
+					 int *nbneg,
+					 xmlChar **values,
+					 int *terminal);
+XMLPUBFUN int XMLCALL
+		    xmlRegExecErrInfo	(xmlRegExecCtxtPtr exec,
+					 const xmlChar **string,
+					 int *nbval,
+					 int *nbneg,
+					 xmlChar **values,
+					 int *terminal);
+#ifdef LIBXML_EXPR_ENABLED
+/*
+ * Formal regular expression handling
+ * Its goal is to do some formal work on content models
+ */
+
+/* expressions are used within a context */
+typedef struct _xmlExpCtxt xmlExpCtxt;
+typedef xmlExpCtxt *xmlExpCtxtPtr;
+
+XMLPUBFUN void XMLCALL
+			xmlExpFreeCtxt	(xmlExpCtxtPtr ctxt);
+XMLPUBFUN xmlExpCtxtPtr XMLCALL
+			xmlExpNewCtxt	(int maxNodes,
+					 xmlDictPtr dict);
+
+XMLPUBFUN int XMLCALL
+			xmlExpCtxtNbNodes(xmlExpCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+			xmlExpCtxtNbCons(xmlExpCtxtPtr ctxt);
+
+/* Expressions are trees but the tree is opaque */
+typedef struct _xmlExpNode xmlExpNode;
+typedef xmlExpNode *xmlExpNodePtr;
+
+typedef enum {
+    XML_EXP_EMPTY = 0,
+    XML_EXP_FORBID = 1,
+    XML_EXP_ATOM = 2,
+    XML_EXP_SEQ = 3,
+    XML_EXP_OR = 4,
+    XML_EXP_COUNT = 5
+} xmlExpNodeType;
+
+/*
+ * 2 core expressions shared by all for the empty language set
+ * and for the set with just the empty token
+ */
+XMLPUBVAR xmlExpNodePtr forbiddenExp;
+XMLPUBVAR xmlExpNodePtr emptyExp;
+
+/*
+ * Expressions are reference counted internally
+ */
+XMLPUBFUN void XMLCALL
+			xmlExpFree	(xmlExpCtxtPtr ctxt,
+					 xmlExpNodePtr expr);
+XMLPUBFUN void XMLCALL
+			xmlExpRef	(xmlExpNodePtr expr);
+
+/*
+ * constructors can be either manual or from a string
+ */
+XMLPUBFUN xmlExpNodePtr XMLCALL
+			xmlExpParse	(xmlExpCtxtPtr ctxt,
+					 const char *expr);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+			xmlExpNewAtom	(xmlExpCtxtPtr ctxt,
+					 const xmlChar *name,
+					 int len);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+			xmlExpNewOr	(xmlExpCtxtPtr ctxt,
+					 xmlExpNodePtr left,
+					 xmlExpNodePtr right);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+			xmlExpNewSeq	(xmlExpCtxtPtr ctxt,
+					 xmlExpNodePtr left,
+					 xmlExpNodePtr right);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+			xmlExpNewRange	(xmlExpCtxtPtr ctxt,
+					 xmlExpNodePtr subset,
+					 int min,
+					 int max);
+/*
+ * The really interesting APIs
+ */
+XMLPUBFUN int XMLCALL
+			xmlExpIsNillable(xmlExpNodePtr expr);
+XMLPUBFUN int XMLCALL
+			xmlExpMaxToken	(xmlExpNodePtr expr);
+XMLPUBFUN int XMLCALL
+			xmlExpGetLanguage(xmlExpCtxtPtr ctxt,
+					 xmlExpNodePtr expr,
+					 const xmlChar**langList,
+					 int len);
+XMLPUBFUN int XMLCALL
+			xmlExpGetStart	(xmlExpCtxtPtr ctxt,
+					 xmlExpNodePtr expr,
+					 const xmlChar**tokList,
+					 int len);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+			xmlExpStringDerive(xmlExpCtxtPtr ctxt,
+					 xmlExpNodePtr expr,
+					 const xmlChar *str,
+					 int len);
+XMLPUBFUN xmlExpNodePtr XMLCALL
+			xmlExpExpDerive	(xmlExpCtxtPtr ctxt,
+					 xmlExpNodePtr expr,
+					 xmlExpNodePtr sub);
+XMLPUBFUN int XMLCALL
+			xmlExpSubsume	(xmlExpCtxtPtr ctxt,
+					 xmlExpNodePtr expr,
+					 xmlExpNodePtr sub);
+XMLPUBFUN void XMLCALL
+			xmlExpDump	(xmlBufferPtr buf,
+					 xmlExpNodePtr expr);
+#endif /* LIBXML_EXPR_ENABLED */
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_REGEXP_ENABLED */
+
+#endif /*__XML_REGEXP_H__ */
diff --git a/interfaces/ext/libxml/xmlsave.h b/interfaces/ext/libxml/xmlsave.h
new file mode 100644
index 0000000..4201b4d
--- /dev/null
+++ b/interfaces/ext/libxml/xmlsave.h
@@ -0,0 +1,87 @@
+/*
+ * Summary: the XML document serializer
+ * Description: API to save document or subtree of document
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XMLSAVE_H__
+#define __XML_XMLSAVE_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/encoding.h>
+#include <libxml/xmlIO.h>
+
+#ifdef LIBXML_OUTPUT_ENABLED
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlSaveOption:
+ *
+ * This is the set of XML save options that can be passed down
+ * to the xmlSaveToFd() and similar calls.
+ */
+typedef enum {
+    XML_SAVE_FORMAT     = 1<<0,	/* format save output */
+    XML_SAVE_NO_DECL    = 1<<1,	/* drop the xml declaration */
+    XML_SAVE_NO_EMPTY	= 1<<2, /* no empty tags */
+    XML_SAVE_NO_XHTML	= 1<<3, /* disable XHTML1 specific rules */
+    XML_SAVE_XHTML	= 1<<4, /* force XHTML1 specific rules */
+    XML_SAVE_AS_XML     = 1<<5, /* force XML serialization on HTML doc */
+    XML_SAVE_AS_HTML    = 1<<6  /* force HTML serialization on XML doc */
+} xmlSaveOption;
+
+
+typedef struct _xmlSaveCtxt xmlSaveCtxt;
+typedef xmlSaveCtxt *xmlSaveCtxtPtr;
+
+XMLPUBFUN xmlSaveCtxtPtr XMLCALL
+		xmlSaveToFd		(int fd,
+					 const char *encoding,
+					 int options);
+XMLPUBFUN xmlSaveCtxtPtr XMLCALL
+		xmlSaveToFilename	(const char *filename,
+					 const char *encoding,
+					 int options);
+
+XMLPUBFUN xmlSaveCtxtPtr XMLCALL
+		xmlSaveToBuffer		(xmlBufferPtr buffer,
+					 const char *encoding,
+					 int options);
+
+XMLPUBFUN xmlSaveCtxtPtr XMLCALL
+		xmlSaveToIO		(xmlOutputWriteCallback iowrite,
+					 xmlOutputCloseCallback ioclose,
+					 void *ioctx,
+					 const char *encoding,
+					 int options);
+
+XMLPUBFUN long XMLCALL
+		xmlSaveDoc		(xmlSaveCtxtPtr ctxt,
+					 xmlDocPtr doc);
+XMLPUBFUN long XMLCALL
+		xmlSaveTree		(xmlSaveCtxtPtr ctxt,
+					 xmlNodePtr node);
+
+XMLPUBFUN int XMLCALL
+		xmlSaveFlush		(xmlSaveCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+		xmlSaveClose		(xmlSaveCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+		xmlSaveSetEscape	(xmlSaveCtxtPtr ctxt,
+					 xmlCharEncodingOutputFunc escape);
+XMLPUBFUN int XMLCALL
+		xmlSaveSetAttrEscape	(xmlSaveCtxtPtr ctxt,
+					 xmlCharEncodingOutputFunc escape);
+#ifdef __cplusplus
+}
+#endif
+#endif /* LIBXML_OUTPUT_ENABLED */
+#endif /* __XML_XMLSAVE_H__ */
+
+
diff --git a/interfaces/ext/libxml/xmlschemas.h b/interfaces/ext/libxml/xmlschemas.h
new file mode 100644
index 0000000..ebef3a7
--- /dev/null
+++ b/interfaces/ext/libxml/xmlschemas.h
@@ -0,0 +1,218 @@
+/*
+ * Summary: incomplete XML Schemas structure implementation
+ * Description: interface to the XML Schemas handling and schema validity
+ *              checking, it is incomplete right now.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_SCHEMA_H__
+#define __XML_SCHEMA_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+
+#include <libxml/tree.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * This error codes are obsolete; not used any more.
+ */
+typedef enum {
+    XML_SCHEMAS_ERR_OK		= 0,
+    XML_SCHEMAS_ERR_NOROOT	= 1,
+    XML_SCHEMAS_ERR_UNDECLAREDELEM,
+    XML_SCHEMAS_ERR_NOTTOPLEVEL,
+    XML_SCHEMAS_ERR_MISSING,
+    XML_SCHEMAS_ERR_WRONGELEM,
+    XML_SCHEMAS_ERR_NOTYPE,
+    XML_SCHEMAS_ERR_NOROLLBACK,
+    XML_SCHEMAS_ERR_ISABSTRACT,
+    XML_SCHEMAS_ERR_NOTEMPTY,
+    XML_SCHEMAS_ERR_ELEMCONT,
+    XML_SCHEMAS_ERR_HAVEDEFAULT,
+    XML_SCHEMAS_ERR_NOTNILLABLE,
+    XML_SCHEMAS_ERR_EXTRACONTENT,
+    XML_SCHEMAS_ERR_INVALIDATTR,
+    XML_SCHEMAS_ERR_INVALIDELEM,
+    XML_SCHEMAS_ERR_NOTDETERMINIST,
+    XML_SCHEMAS_ERR_CONSTRUCT,
+    XML_SCHEMAS_ERR_INTERNAL,
+    XML_SCHEMAS_ERR_NOTSIMPLE,
+    XML_SCHEMAS_ERR_ATTRUNKNOWN,
+    XML_SCHEMAS_ERR_ATTRINVALID,
+    XML_SCHEMAS_ERR_VALUE,
+    XML_SCHEMAS_ERR_FACET,
+    XML_SCHEMAS_ERR_,
+    XML_SCHEMAS_ERR_XXX
+} xmlSchemaValidError;
+
+/*
+* ATTENTION: Change xmlSchemaSetValidOptions's check
+* for invalid values, if adding to the validation
+* options below.
+*/
+/**
+ * xmlSchemaValidOption:
+ *
+ * This is the set of XML Schema validation options.
+ */
+typedef enum {
+    XML_SCHEMA_VAL_VC_I_CREATE			= 1<<0
+	/* Default/fixed: create an attribute node
+	* or an element's text node on the instance.
+	*/
+} xmlSchemaValidOption;
+
+/*
+    XML_SCHEMA_VAL_XSI_ASSEMBLE			= 1<<1,
+	* assemble schemata using
+	* xsi:schemaLocation and
+	* xsi:noNamespaceSchemaLocation
+*/
+
+/**
+ * The schemas related types are kept internal
+ */
+typedef struct _xmlSchema xmlSchema;
+typedef xmlSchema *xmlSchemaPtr;
+
+/**
+ * xmlSchemaValidityErrorFunc:
+ * @ctx: the validation context
+ * @msg: the message
+ * @...: extra arguments
+ *
+ * Signature of an error callback from an XSD validation
+ */
+typedef void (XMLCDECL *xmlSchemaValidityErrorFunc) (void *ctx, const char *msg, ...) ATTRIBUTE_PRINTF(2,3);
+
+/**
+ * xmlSchemaValidityWarningFunc:
+ * @ctx: the validation context
+ * @msg: the message
+ * @...: extra arguments
+ *
+ * Signature of a warning callback from an XSD validation
+ */
+typedef void (XMLCDECL *xmlSchemaValidityWarningFunc) (void *ctx, const char *msg, ...) ATTRIBUTE_PRINTF(2,3);
+
+/**
+ * A schemas validation context
+ */
+typedef struct _xmlSchemaParserCtxt xmlSchemaParserCtxt;
+typedef xmlSchemaParserCtxt *xmlSchemaParserCtxtPtr;
+
+typedef struct _xmlSchemaValidCtxt xmlSchemaValidCtxt;
+typedef xmlSchemaValidCtxt *xmlSchemaValidCtxtPtr;
+
+/*
+ * Interfaces for parsing.
+ */
+XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL
+	    xmlSchemaNewParserCtxt	(const char *URL);
+XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL
+	    xmlSchemaNewMemParserCtxt	(const char *buffer,
+					 int size);
+XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL
+	    xmlSchemaNewDocParserCtxt	(xmlDocPtr doc);
+XMLPUBFUN void XMLCALL
+	    xmlSchemaFreeParserCtxt	(xmlSchemaParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+	    xmlSchemaSetParserErrors	(xmlSchemaParserCtxtPtr ctxt,
+					 xmlSchemaValidityErrorFunc err,
+					 xmlSchemaValidityWarningFunc warn,
+					 void *ctx);
+XMLPUBFUN void XMLCALL
+	    xmlSchemaSetParserStructuredErrors(xmlSchemaParserCtxtPtr ctxt,
+					 xmlStructuredErrorFunc serror,
+					 void *ctx);
+XMLPUBFUN int XMLCALL
+		xmlSchemaGetParserErrors(xmlSchemaParserCtxtPtr ctxt,
+					xmlSchemaValidityErrorFunc * err,
+					xmlSchemaValidityWarningFunc * warn,
+					void **ctx);
+XMLPUBFUN int XMLCALL
+		xmlSchemaIsValid	(xmlSchemaValidCtxtPtr ctxt);
+
+XMLPUBFUN xmlSchemaPtr XMLCALL
+	    xmlSchemaParse		(xmlSchemaParserCtxtPtr ctxt);
+XMLPUBFUN void XMLCALL
+	    xmlSchemaFree		(xmlSchemaPtr schema);
+#ifdef LIBXML_OUTPUT_ENABLED
+XMLPUBFUN void XMLCALL
+	    xmlSchemaDump		(FILE *output,
+					 xmlSchemaPtr schema);
+#endif /* LIBXML_OUTPUT_ENABLED */
+/*
+ * Interfaces for validating
+ */
+XMLPUBFUN void XMLCALL
+	    xmlSchemaSetValidErrors	(xmlSchemaValidCtxtPtr ctxt,
+					 xmlSchemaValidityErrorFunc err,
+					 xmlSchemaValidityWarningFunc warn,
+					 void *ctx);
+XMLPUBFUN void XMLCALL
+	    xmlSchemaSetValidStructuredErrors(xmlSchemaValidCtxtPtr ctxt,
+					 xmlStructuredErrorFunc serror,
+					 void *ctx);
+XMLPUBFUN int XMLCALL
+	    xmlSchemaGetValidErrors	(xmlSchemaValidCtxtPtr ctxt,
+					 xmlSchemaValidityErrorFunc *err,
+					 xmlSchemaValidityWarningFunc *warn,
+					 void **ctx);
+XMLPUBFUN int XMLCALL
+	    xmlSchemaSetValidOptions	(xmlSchemaValidCtxtPtr ctxt,
+					 int options);
+XMLPUBFUN int XMLCALL
+	    xmlSchemaValidCtxtGetOptions(xmlSchemaValidCtxtPtr ctxt);
+
+XMLPUBFUN xmlSchemaValidCtxtPtr XMLCALL
+	    xmlSchemaNewValidCtxt	(xmlSchemaPtr schema);
+XMLPUBFUN void XMLCALL
+	    xmlSchemaFreeValidCtxt	(xmlSchemaValidCtxtPtr ctxt);
+XMLPUBFUN int XMLCALL
+	    xmlSchemaValidateDoc	(xmlSchemaValidCtxtPtr ctxt,
+					 xmlDocPtr instance);
+XMLPUBFUN int XMLCALL
+            xmlSchemaValidateOneElement (xmlSchemaValidCtxtPtr ctxt,
+			                 xmlNodePtr elem);
+XMLPUBFUN int XMLCALL
+	    xmlSchemaValidateStream	(xmlSchemaValidCtxtPtr ctxt,
+					 xmlParserInputBufferPtr input,
+					 xmlCharEncoding enc,
+					 xmlSAXHandlerPtr sax,
+					 void *user_data);
+XMLPUBFUN int XMLCALL
+	    xmlSchemaValidateFile	(xmlSchemaValidCtxtPtr ctxt,
+					 const char * filename,
+					 int options);
+
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
+	    xmlSchemaValidCtxtGetParserCtxt(xmlSchemaValidCtxtPtr ctxt);
+
+/*
+ * Interface to insert Schemas SAX validation in a SAX stream
+ */
+typedef struct _xmlSchemaSAXPlug xmlSchemaSAXPlugStruct;
+typedef xmlSchemaSAXPlugStruct *xmlSchemaSAXPlugPtr;
+
+XMLPUBFUN xmlSchemaSAXPlugPtr XMLCALL
+            xmlSchemaSAXPlug		(xmlSchemaValidCtxtPtr ctxt,
+					 xmlSAXHandlerPtr *sax,
+					 void **user_data);
+XMLPUBFUN int XMLCALL
+            xmlSchemaSAXUnplug		(xmlSchemaSAXPlugPtr plug);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+#endif /* __XML_SCHEMA_H__ */
diff --git a/interfaces/ext/libxml/xmlschemastypes.h b/interfaces/ext/libxml/xmlschemastypes.h
new file mode 100644
index 0000000..9a3a7a1
--- /dev/null
+++ b/interfaces/ext/libxml/xmlschemastypes.h
@@ -0,0 +1,151 @@
+/*
+ * Summary: implementation of XML Schema Datatypes
+ * Description: module providing the XML Schema Datatypes implementation
+ *              both definition and validity checking
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+
+#ifndef __XML_SCHEMA_TYPES_H__
+#define __XML_SCHEMA_TYPES_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_SCHEMAS_ENABLED
+
+#include <libxml/schemasInternals.h>
+#include <libxml/xmlschemas.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+    XML_SCHEMA_WHITESPACE_UNKNOWN = 0,
+    XML_SCHEMA_WHITESPACE_PRESERVE = 1,
+    XML_SCHEMA_WHITESPACE_REPLACE = 2,
+    XML_SCHEMA_WHITESPACE_COLLAPSE = 3
+} xmlSchemaWhitespaceValueType;
+
+XMLPUBFUN void XMLCALL		
+    		xmlSchemaInitTypes		(void);
+XMLPUBFUN void XMLCALL		
+		xmlSchemaCleanupTypes		(void);
+XMLPUBFUN xmlSchemaTypePtr XMLCALL 
+		xmlSchemaGetPredefinedType	(const xmlChar *name,
+						 const xmlChar *ns);
+XMLPUBFUN int XMLCALL		
+		xmlSchemaValidatePredefinedType	(xmlSchemaTypePtr type,
+						 const xmlChar *value,
+						 xmlSchemaValPtr *val);
+XMLPUBFUN int XMLCALL		
+		xmlSchemaValPredefTypeNode	(xmlSchemaTypePtr type,
+						 const xmlChar *value,
+						 xmlSchemaValPtr *val,
+						 xmlNodePtr node);
+XMLPUBFUN int XMLCALL		
+		xmlSchemaValidateFacet		(xmlSchemaTypePtr base,
+						 xmlSchemaFacetPtr facet,
+						 const xmlChar *value,
+						 xmlSchemaValPtr val);
+XMLPUBFUN int XMLCALL
+		xmlSchemaValidateFacetWhtsp	(xmlSchemaFacetPtr facet,
+						 xmlSchemaWhitespaceValueType fws,
+						 xmlSchemaValType valType,						 
+						 const xmlChar *value,
+						 xmlSchemaValPtr val,
+						 xmlSchemaWhitespaceValueType ws);
+XMLPUBFUN void XMLCALL		
+		xmlSchemaFreeValue		(xmlSchemaValPtr val);
+XMLPUBFUN xmlSchemaFacetPtr XMLCALL 
+		xmlSchemaNewFacet		(void);
+XMLPUBFUN int XMLCALL		
+		xmlSchemaCheckFacet		(xmlSchemaFacetPtr facet,
+						 xmlSchemaTypePtr typeDecl,
+						 xmlSchemaParserCtxtPtr ctxt,
+						 const xmlChar *name);
+XMLPUBFUN void XMLCALL		
+		xmlSchemaFreeFacet		(xmlSchemaFacetPtr facet);
+XMLPUBFUN int XMLCALL		
+		xmlSchemaCompareValues		(xmlSchemaValPtr x,
+						 xmlSchemaValPtr y);
+XMLPUBFUN xmlSchemaTypePtr XMLCALL		
+    xmlSchemaGetBuiltInListSimpleTypeItemType	(xmlSchemaTypePtr type);
+XMLPUBFUN int XMLCALL
+    xmlSchemaValidateListSimpleTypeFacet	(xmlSchemaFacetPtr facet,
+						 const xmlChar *value,
+						 unsigned long actualLen,
+						 unsigned long *expectedLen);
+XMLPUBFUN xmlSchemaTypePtr XMLCALL
+		xmlSchemaGetBuiltInType		(xmlSchemaValType type);
+XMLPUBFUN int XMLCALL
+		xmlSchemaIsBuiltInTypeFacet	(xmlSchemaTypePtr type, 
+						 int facetType);
+XMLPUBFUN xmlChar * XMLCALL
+		xmlSchemaCollapseString		(const xmlChar *value);
+XMLPUBFUN xmlChar * XMLCALL
+		xmlSchemaWhiteSpaceReplace	(const xmlChar *value);
+XMLPUBFUN unsigned long  XMLCALL
+		xmlSchemaGetFacetValueAsULong	(xmlSchemaFacetPtr facet);
+XMLPUBFUN int XMLCALL
+		xmlSchemaValidateLengthFacet	(xmlSchemaTypePtr type, 
+						 xmlSchemaFacetPtr facet,
+						 const xmlChar *value,
+						 xmlSchemaValPtr val,
+						 unsigned long *length);
+XMLPUBFUN int XMLCALL
+		xmlSchemaValidateLengthFacetWhtsp(xmlSchemaFacetPtr facet,
+						  xmlSchemaValType valType,
+						  const xmlChar *value,
+						  xmlSchemaValPtr val,						  
+						  unsigned long *length,
+						  xmlSchemaWhitespaceValueType ws);
+XMLPUBFUN int XMLCALL
+		xmlSchemaValPredefTypeNodeNoNorm(xmlSchemaTypePtr type, 
+						 const xmlChar *value,
+						 xmlSchemaValPtr *val, 
+						 xmlNodePtr node);
+XMLPUBFUN int XMLCALL
+		xmlSchemaGetCanonValue		(xmlSchemaValPtr val,
+						 const xmlChar **retValue);
+XMLPUBFUN int XMLCALL
+		xmlSchemaGetCanonValueWhtsp	(xmlSchemaValPtr val,						 
+						 const xmlChar **retValue,
+						 xmlSchemaWhitespaceValueType ws);
+XMLPUBFUN int XMLCALL
+		xmlSchemaValueAppend		(xmlSchemaValPtr prev,
+						 xmlSchemaValPtr cur);
+XMLPUBFUN xmlSchemaValPtr XMLCALL
+		xmlSchemaValueGetNext		(xmlSchemaValPtr cur);
+XMLPUBFUN const xmlChar * XMLCALL
+		xmlSchemaValueGetAsString	(xmlSchemaValPtr val);
+XMLPUBFUN int XMLCALL
+		xmlSchemaValueGetAsBoolean	(xmlSchemaValPtr val);
+XMLPUBFUN xmlSchemaValPtr XMLCALL
+		xmlSchemaNewStringValue		(xmlSchemaValType type,
+						 const xmlChar *value);
+XMLPUBFUN xmlSchemaValPtr XMLCALL
+		xmlSchemaNewNOTATIONValue	(const xmlChar *name,
+						 const xmlChar *ns);
+XMLPUBFUN xmlSchemaValPtr XMLCALL
+		xmlSchemaNewQNameValue		(const xmlChar *namespaceName,
+						 const xmlChar *localName);
+XMLPUBFUN int XMLCALL
+		xmlSchemaCompareValuesWhtsp	(xmlSchemaValPtr x,
+						 xmlSchemaWhitespaceValueType xws,
+						 xmlSchemaValPtr y,
+						 xmlSchemaWhitespaceValueType yws);
+XMLPUBFUN xmlSchemaValPtr XMLCALL
+		xmlSchemaCopyValue		(xmlSchemaValPtr val);
+XMLPUBFUN xmlSchemaValType XMLCALL
+		xmlSchemaGetValType		(xmlSchemaValPtr val);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_SCHEMAS_ENABLED */
+#endif /* __XML_SCHEMA_TYPES_H__ */
diff --git a/interfaces/ext/libxml/xmlstring.h b/interfaces/ext/libxml/xmlstring.h
new file mode 100644
index 0000000..1dfc5ea
--- /dev/null
+++ b/interfaces/ext/libxml/xmlstring.h
@@ -0,0 +1,140 @@
+/*
+ * Summary: set of routines to process strings
+ * Description: type and interfaces needed for the internal string handling
+ *              of the library, especially UTF8 processing.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_STRING_H__
+#define __XML_STRING_H__
+
+#include <stdarg.h>
+#include <libxml/xmlversion.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * xmlChar:
+ *
+ * This is a basic byte in an UTF-8 encoded string.
+ * It's unsigned allowing to pinpoint case where char * are assigned
+ * to xmlChar * (possibly making serialization back impossible).
+ */
+typedef unsigned char xmlChar;
+
+/**
+ * BAD_CAST:
+ *
+ * Macro to cast a string to an xmlChar * when one know its safe.
+ */
+#define BAD_CAST (xmlChar *)
+
+/*
+ * xmlChar handling
+ */
+XMLPUBFUN xmlChar * XMLCALL
+                xmlStrdup                (const xmlChar *cur);
+XMLPUBFUN xmlChar * XMLCALL
+                xmlStrndup               (const xmlChar *cur,
+                                         int len);
+XMLPUBFUN xmlChar * XMLCALL
+                xmlCharStrndup           (const char *cur,
+                                         int len);
+XMLPUBFUN xmlChar * XMLCALL
+                xmlCharStrdup            (const char *cur);
+XMLPUBFUN xmlChar * XMLCALL
+                xmlStrsub                (const xmlChar *str,
+                                         int start,
+                                         int len);
+XMLPUBFUN const xmlChar * XMLCALL
+                xmlStrchr                (const xmlChar *str,
+                                         xmlChar val);
+XMLPUBFUN const xmlChar * XMLCALL
+                xmlStrstr                (const xmlChar *str,
+                                         const xmlChar *val);
+XMLPUBFUN const xmlChar * XMLCALL
+                xmlStrcasestr            (const xmlChar *str,
+                                         xmlChar *val);
+XMLPUBFUN int XMLCALL
+                xmlStrcmp                (const xmlChar *str1,
+                                         const xmlChar *str2);
+XMLPUBFUN int XMLCALL
+                xmlStrncmp               (const xmlChar *str1,
+                                         const xmlChar *str2,
+                                         int len);
+XMLPUBFUN int XMLCALL
+                xmlStrcasecmp            (const xmlChar *str1,
+                                         const xmlChar *str2);
+XMLPUBFUN int XMLCALL
+                xmlStrncasecmp           (const xmlChar *str1,
+                                         const xmlChar *str2,
+                                         int len);
+XMLPUBFUN int XMLCALL
+                xmlStrEqual              (const xmlChar *str1,
+                                         const xmlChar *str2);
+XMLPUBFUN int XMLCALL
+                xmlStrQEqual             (const xmlChar *pref,
+                                         const xmlChar *name,
+                                         const xmlChar *str);
+XMLPUBFUN int XMLCALL
+                xmlStrlen                (const xmlChar *str);
+XMLPUBFUN xmlChar * XMLCALL
+                xmlStrcat                (xmlChar *cur,
+                                         const xmlChar *add);
+XMLPUBFUN xmlChar * XMLCALL
+                xmlStrncat               (xmlChar *cur,
+                                         const xmlChar *add,
+                                         int len);
+XMLPUBFUN xmlChar * XMLCALL
+                xmlStrncatNew            (const xmlChar *str1,
+                                         const xmlChar *str2,
+                                         int len);
+XMLPUBFUN int XMLCALL
+                xmlStrPrintf             (xmlChar *buf,
+                                         int len,
+                                         const xmlChar *msg,
+                                         ...);
+XMLPUBFUN int XMLCALL
+                xmlStrVPrintf                (xmlChar *buf,
+                                         int len,
+                                         const xmlChar *msg,
+                                         va_list ap);
+
+XMLPUBFUN int XMLCALL
+        xmlGetUTF8Char                   (const unsigned char *utf,
+                                         int *len);
+XMLPUBFUN int XMLCALL
+        xmlCheckUTF8                     (const unsigned char *utf);
+XMLPUBFUN int XMLCALL
+        xmlUTF8Strsize                   (const xmlChar *utf,
+                                         int len);
+XMLPUBFUN xmlChar * XMLCALL 
+        xmlUTF8Strndup                   (const xmlChar *utf,
+                                         int len);
+XMLPUBFUN const xmlChar * XMLCALL 
+        xmlUTF8Strpos                    (const xmlChar *utf,
+                                         int pos);
+XMLPUBFUN int XMLCALL
+        xmlUTF8Strloc                    (const xmlChar *utf,
+                                         const xmlChar *utfchar);
+XMLPUBFUN xmlChar * XMLCALL 
+        xmlUTF8Strsub                    (const xmlChar *utf,
+                                         int start,
+                                         int len);
+XMLPUBFUN int XMLCALL
+        xmlUTF8Strlen                    (const xmlChar *utf);
+XMLPUBFUN int XMLCALL
+        xmlUTF8Size                      (const xmlChar *utf);
+XMLPUBFUN int XMLCALL
+        xmlUTF8Charcmp                   (const xmlChar *utf1,
+                                         const xmlChar *utf2);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_STRING_H__ */
diff --git a/interfaces/ext/libxml/xmlunicode.h b/interfaces/ext/libxml/xmlunicode.h
new file mode 100644
index 0000000..01ac8b6
--- /dev/null
+++ b/interfaces/ext/libxml/xmlunicode.h
@@ -0,0 +1,202 @@
+/*
+ * Summary: Unicode character APIs
+ * Description: API for the Unicode character APIs
+ *
+ * This file is automatically generated from the
+ * UCS description files of the Unicode Character Database
+ * http://www.unicode.org/Public/4.0-Update1/UCD-4.0.1.html
+ * using the genUnicode.py Python script.
+ *
+ * Generation date: Mon Mar 27 11:09:52 2006
+ * Sources: Blocks-4.0.1.txt UnicodeData-4.0.1.txt
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_UNICODE_H__
+#define __XML_UNICODE_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_UNICODE_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+XMLPUBFUN int XMLCALL xmlUCSIsAegeanNumbers	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsAlphabeticPresentationForms	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsArabic	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsArabicPresentationFormsA	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsArabicPresentationFormsB	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsArmenian	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsArrows	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBasicLatin	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBengali	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBlockElements	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBopomofo	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBopomofoExtended	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBoxDrawing	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBraillePatterns	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsBuhid	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsByzantineMusicalSymbols	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKCompatibility	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKCompatibilityForms	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKCompatibilityIdeographs	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKCompatibilityIdeographsSupplement	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKRadicalsSupplement	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKSymbolsandPunctuation	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKUnifiedIdeographs	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKUnifiedIdeographsExtensionA	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCJKUnifiedIdeographsExtensionB	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCherokee	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCombiningDiacriticalMarks	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCombiningDiacriticalMarksforSymbols	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCombiningHalfMarks	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCombiningMarksforSymbols	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsControlPictures	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCurrencySymbols	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCypriotSyllabary	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCyrillic	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCyrillicSupplement	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsDeseret	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsDevanagari	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsDingbats	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsEnclosedAlphanumerics	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsEnclosedCJKLettersandMonths	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsEthiopic	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGeneralPunctuation	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGeometricShapes	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGeorgian	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGothic	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGreek	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGreekExtended	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGreekandCoptic	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGujarati	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsGurmukhi	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHalfwidthandFullwidthForms	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHangulCompatibilityJamo	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHangulJamo	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHangulSyllables	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHanunoo	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHebrew	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHighPrivateUseSurrogates	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHighSurrogates	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsHiragana	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsIPAExtensions	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsIdeographicDescriptionCharacters	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKanbun	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKangxiRadicals	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKannada	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKatakana	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKatakanaPhoneticExtensions	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKhmer	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsKhmerSymbols	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLao	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLatin1Supplement	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLatinExtendedA	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLatinExtendedB	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLatinExtendedAdditional	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLetterlikeSymbols	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLimbu	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLinearBIdeograms	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLinearBSyllabary	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsLowSurrogates	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMalayalam	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMathematicalAlphanumericSymbols	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMathematicalOperators	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousMathematicalSymbolsA	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousMathematicalSymbolsB	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousSymbols	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousSymbolsandArrows	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousTechnical	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMongolian	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMusicalSymbols	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsMyanmar	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsNumberForms	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsOgham	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsOldItalic	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsOpticalCharacterRecognition	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsOriya	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsOsmanya	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsPhoneticExtensions	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsPrivateUse	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsPrivateUseArea	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsRunic	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsShavian	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSinhala	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSmallFormVariants	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSpacingModifierLetters	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSpecials	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSuperscriptsandSubscripts	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSupplementalArrowsA	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSupplementalArrowsB	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSupplementalMathematicalOperators	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSupplementaryPrivateUseAreaA	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSupplementaryPrivateUseAreaB	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsSyriac	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTagalog	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTagbanwa	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTags	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTaiLe	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTaiXuanJingSymbols	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTamil	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTelugu	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsThaana	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsThai	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsTibetan	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsUgaritic	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsUnifiedCanadianAboriginalSyllabics	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsVariationSelectors	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsVariationSelectorsSupplement	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsYiRadicals	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsYiSyllables	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsYijingHexagramSymbols	(int code);
+
+XMLPUBFUN int XMLCALL xmlUCSIsBlock	(int code, const char *block);
+
+XMLPUBFUN int XMLCALL xmlUCSIsCatC	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatCc	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatCf	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatCo	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatCs	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatL	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatLl	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatLm	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatLo	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatLt	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatLu	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatM	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatMc	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatMe	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatMn	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatN	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatNd	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatNl	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatNo	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatP	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPc	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPd	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPe	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPf	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPi	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPo	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatPs	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatS	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatSc	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatSk	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatSm	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatSo	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatZ	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatZl	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatZp	(int code);
+XMLPUBFUN int XMLCALL xmlUCSIsCatZs	(int code);
+
+XMLPUBFUN int XMLCALL xmlUCSIsCat	(int code, const char *cat);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_UNICODE_ENABLED */
+
+#endif /* __XML_UNICODE_H__ */
diff --git a/interfaces/ext/libxml/xmlversion.h b/interfaces/ext/libxml/xmlversion.h
new file mode 100644
index 0000000..0660956
--- /dev/null
+++ b/interfaces/ext/libxml/xmlversion.h
@@ -0,0 +1,458 @@
+/*
+ * Summary: compile-time version informations
+ * Description: compile-time version informations for the XML library
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_VERSION_H__
+#define __XML_VERSION_H__
+
+#include <libxml/xmlexports.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * use those to be sure nothing nasty will happen if
+ * your library and includes mismatch
+ */
+#ifndef LIBXML2_COMPILING_MSCCDEF
+XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
+#endif /* LIBXML2_COMPILING_MSCCDEF */
+
+/**
+ * LIBXML_DOTTED_VERSION:
+ *
+ * the version string like "1.2.3"
+ */
+#define LIBXML_DOTTED_VERSION "2.7.3"
+
+/**
+ * LIBXML_VERSION:
+ *
+ * the version number: 1.2.3 value is 10203
+ */
+#define LIBXML_VERSION 20703
+
+/**
+ * LIBXML_VERSION_STRING:
+ *
+ * the version number string, 1.2.3 value is "10203"
+ */
+#define LIBXML_VERSION_STRING "20703"
+
+/**
+ * LIBXML_VERSION_EXTRA:
+ *
+ * extra version information, used to show a CVS compilation
+ */
+#define LIBXML_VERSION_EXTRA ""
+
+/**
+ * LIBXML_TEST_VERSION:
+ *
+ * Macro to check that the libxml version in use is compatible with
+ * the version the software has been compiled against
+ */
+#define LIBXML_TEST_VERSION xmlCheckVersion(20703);
+
+#ifndef VMS
+#if 0
+/**
+ * WITH_TRIO:
+ *
+ * defined if the trio support need to be configured in
+ */
+#define WITH_TRIO
+#else
+/**
+ * WITHOUT_TRIO:
+ *
+ * defined if the trio support should not be configured in
+ */
+#define WITHOUT_TRIO
+#endif
+#else /* VMS */
+/**
+ * WITH_TRIO:
+ *
+ * defined if the trio support need to be configured in
+ */
+#define WITH_TRIO 1
+#endif /* VMS */
+
+/**
+ * LIBXML_THREAD_ENABLED:
+ *
+ * Whether the thread support is configured in
+ */
+#if 1
+#if defined(_REENTRANT) || defined(__MT__) || \
+    (defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE - 0 >= 199506L))
+#define LIBXML_THREAD_ENABLED
+#endif
+#endif
+
+/**
+ * LIBXML_TREE_ENABLED:
+ *
+ * Whether the DOM like tree manipulation API support is configured in
+ */
+#if 1
+#define LIBXML_TREE_ENABLED
+#endif
+
+/**
+ * LIBXML_OUTPUT_ENABLED:
+ *
+ * Whether the serialization/saving support is configured in
+ */
+#if 1
+#define LIBXML_OUTPUT_ENABLED
+#endif
+
+/**
+ * LIBXML_PUSH_ENABLED:
+ *
+ * Whether the push parsing interfaces are configured in
+ */
+#if 1
+#define LIBXML_PUSH_ENABLED
+#endif
+
+/**
+ * LIBXML_READER_ENABLED:
+ *
+ * Whether the xmlReader parsing interface is configured in
+ */
+#if 1
+#define LIBXML_READER_ENABLED
+#endif
+
+/**
+ * LIBXML_PATTERN_ENABLED:
+ *
+ * Whether the xmlPattern node selection interface is configured in
+ */
+#if 1
+#define LIBXML_PATTERN_ENABLED
+#endif
+
+/**
+ * LIBXML_WRITER_ENABLED:
+ *
+ * Whether the xmlWriter saving interface is configured in
+ */
+#if 1
+#define LIBXML_WRITER_ENABLED
+#endif
+
+/**
+ * LIBXML_SAX1_ENABLED:
+ *
+ * Whether the older SAX1 interface is configured in
+ */
+#if 1
+#define LIBXML_SAX1_ENABLED
+#endif
+
+/**
+ * LIBXML_FTP_ENABLED:
+ *
+ * Whether the FTP support is configured in
+ */
+#if 1
+#define LIBXML_FTP_ENABLED
+#endif
+
+/**
+ * LIBXML_HTTP_ENABLED:
+ *
+ * Whether the HTTP support is configured in
+ */
+#if 1
+#define LIBXML_HTTP_ENABLED
+#endif
+
+/**
+ * LIBXML_VALID_ENABLED:
+ *
+ * Whether the DTD validation support is configured in
+ */
+#if 1
+#define LIBXML_VALID_ENABLED
+#endif
+
+/**
+ * LIBXML_HTML_ENABLED:
+ *
+ * Whether the HTML support is configured in
+ */
+#if 1
+#define LIBXML_HTML_ENABLED
+#endif
+
+/**
+ * LIBXML_LEGACY_ENABLED:
+ *
+ * Whether the deprecated APIs are compiled in for compatibility
+ */
+#if 1
+#define LIBXML_LEGACY_ENABLED
+#endif
+
+/**
+ * LIBXML_C14N_ENABLED:
+ *
+ * Whether the Canonicalization support is configured in
+ */
+#if 1
+#define LIBXML_C14N_ENABLED
+#endif
+
+/**
+ * LIBXML_CATALOG_ENABLED:
+ *
+ * Whether the Catalog support is configured in
+ */
+#if 1
+#define LIBXML_CATALOG_ENABLED
+#endif
+
+/**
+ * LIBXML_DOCB_ENABLED:
+ *
+ * Whether the SGML Docbook support is configured in
+ */
+#if 1
+#define LIBXML_DOCB_ENABLED
+#endif
+
+/**
+ * LIBXML_XPATH_ENABLED:
+ *
+ * Whether XPath is configured in
+ */
+#if 1
+#define LIBXML_XPATH_ENABLED
+#endif
+
+/**
+ * LIBXML_XPTR_ENABLED:
+ *
+ * Whether XPointer is configured in
+ */
+#if 1
+#define LIBXML_XPTR_ENABLED
+#endif
+
+/**
+ * LIBXML_XINCLUDE_ENABLED:
+ *
+ * Whether XInclude is configured in
+ */
+#if 1
+#define LIBXML_XINCLUDE_ENABLED
+#endif
+
+/**
+ * LIBXML_ICONV_ENABLED:
+ *
+ * Whether iconv support is available
+ */
+#if 1
+#define LIBXML_ICONV_ENABLED
+#endif
+
+/**
+ * LIBXML_ISO8859X_ENABLED:
+ *
+ * Whether ISO-8859-* support is made available in case iconv is not
+ */
+#if 1
+#define LIBXML_ISO8859X_ENABLED
+#endif
+
+/**
+ * LIBXML_DEBUG_ENABLED:
+ *
+ * Whether Debugging module is configured in
+ */
+#if 0
+#define LIBXML_DEBUG_ENABLED
+#endif
+
+/**
+ * DEBUG_MEMORY_LOCATION:
+ *
+ * Whether the memory debugging is configured in
+ */
+#if 0
+#define DEBUG_MEMORY_LOCATION
+#endif
+
+/**
+ * LIBXML_DEBUG_RUNTIME:
+ *
+ * Whether the runtime debugging is configured in
+ */
+#if 0
+#define LIBXML_DEBUG_RUNTIME
+#endif
+
+/**
+ * LIBXML_UNICODE_ENABLED:
+ *
+ * Whether the Unicode related interfaces are compiled in
+ */
+#if 1
+#define LIBXML_UNICODE_ENABLED
+#endif
+
+/**
+ * LIBXML_REGEXP_ENABLED:
+ *
+ * Whether the regular expressions interfaces are compiled in
+ */
+#if 1
+#define LIBXML_REGEXP_ENABLED
+#endif
+
+/**
+ * LIBXML_AUTOMATA_ENABLED:
+ *
+ * Whether the automata interfaces are compiled in
+ */
+#if 1
+#define LIBXML_AUTOMATA_ENABLED
+#endif
+
+/**
+ * LIBXML_EXPR_ENABLED:
+ *
+ * Whether the formal expressions interfaces are compiled in
+ */
+#if 1
+#define LIBXML_EXPR_ENABLED
+#endif
+
+/**
+ * LIBXML_SCHEMAS_ENABLED:
+ *
+ * Whether the Schemas validation interfaces are compiled in
+ */
+#if 1
+#define LIBXML_SCHEMAS_ENABLED
+#endif
+
+/**
+ * LIBXML_SCHEMATRON_ENABLED:
+ *
+ * Whether the Schematron validation interfaces are compiled in
+ */
+#if 1
+#define LIBXML_SCHEMATRON_ENABLED
+#endif
+
+/**
+ * LIBXML_MODULES_ENABLED:
+ *
+ * Whether the module interfaces are compiled in
+ */
+#if 1
+#define LIBXML_MODULES_ENABLED
+/**
+ * LIBXML_MODULE_EXTENSION:
+ *
+ * the string suffix used by dynamic modules (usually shared libraries)
+ */
+#define LIBXML_MODULE_EXTENSION ".so" 
+#endif
+
+/**
+ * LIBXML_ZLIB_ENABLED:
+ *
+ * Whether the Zlib support is compiled in
+ */
+#if 0
+#define LIBXML_ZLIB_ENABLED
+#endif
+
+#ifdef __GNUC__
+#ifdef HAVE_ANSIDECL_H
+#include <ansidecl.h>
+#endif
+
+/**
+ * ATTRIBUTE_UNUSED:
+ *
+ * Macro used to signal to GCC unused function parameters
+ */
+
+#ifndef ATTRIBUTE_UNUSED
+#define ATTRIBUTE_UNUSED __attribute__((unused))
+#endif
+
+/**
+ * ATTRIBUTE_ALLOC_SIZE:
+ *
+ * Macro used to indicate to GCC this is an allocator function
+ */
+
+#ifndef ATTRIBUTE_ALLOC_SIZE
+# if ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))
+#  define ATTRIBUTE_ALLOC_SIZE(x) __attribute__((alloc_size(x)))
+# else
+#  define ATTRIBUTE_ALLOC_SIZE(x)
+# endif
+#else
+# define ATTRIBUTE_ALLOC_SIZE(x)
+#endif
+
+/**
+ * ATTRIBUTE_PRINTF:
+ *
+ * Macro used to indicate to GCC the parameter are printf like
+ */
+
+#ifndef ATTRIBUTE_PRINTF
+# if ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
+#  define ATTRIBUTE_PRINTF(fmt,args) __attribute__((__format__(__printf__,fmt,args)))
+# else
+#  define ATTRIBUTE_PRINTF(fmt,args)
+# endif
+#else
+# define ATTRIBUTE_PRINTF(fmt,args)
+#endif
+
+#else /* ! __GNUC__ */
+/**
+ * ATTRIBUTE_UNUSED:
+ *
+ * Macro used to signal to GCC unused function parameters
+ */
+#define ATTRIBUTE_UNUSED
+/**
+ * ATTRIBUTE_ALLOC_SIZE:
+ *
+ * Macro used to indicate to GCC this is an allocator function
+ */
+#define ATTRIBUTE_ALLOC_SIZE(x)
+/**
+ * ATTRIBUTE_PRINTF:
+ *
+ * Macro used to indicate to GCC the parameter are printf like
+ */
+#define ATTRIBUTE_PRINTF(fmt,args)
+#endif /* __GNUC__ */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif
+
+
diff --git a/interfaces/ext/libxml/xmlwriter.h b/interfaces/ext/libxml/xmlwriter.h
new file mode 100644
index 0000000..df4509d
--- /dev/null
+++ b/interfaces/ext/libxml/xmlwriter.h
@@ -0,0 +1,485 @@
+
+/*
+ * Summary: text writing API for XML
+ * Description: text writing API for XML
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Alfred Mickautsch <alfred at mickautsch.de>
+ */
+
+#ifndef __XML_XMLWRITER_H__
+#define __XML_XMLWRITER_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_WRITER_ENABLED
+
+#include <stdarg.h>
+#include <libxml/xmlIO.h>
+#include <libxml/list.h>
+#include <libxml/xmlstring.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    typedef struct _xmlTextWriter xmlTextWriter;
+    typedef xmlTextWriter *xmlTextWriterPtr;
+
+/*
+ * Constructors & Destructor
+ */
+    XMLPUBFUN xmlTextWriterPtr XMLCALL
+        xmlNewTextWriter(xmlOutputBufferPtr out);
+    XMLPUBFUN xmlTextWriterPtr XMLCALL
+        xmlNewTextWriterFilename(const char *uri, int compression);
+    XMLPUBFUN xmlTextWriterPtr XMLCALL
+        xmlNewTextWriterMemory(xmlBufferPtr buf, int compression);
+    XMLPUBFUN xmlTextWriterPtr XMLCALL
+        xmlNewTextWriterPushParser(xmlParserCtxtPtr ctxt, int compression);
+    XMLPUBFUN xmlTextWriterPtr XMLCALL
+        xmlNewTextWriterDoc(xmlDocPtr * doc, int compression);
+    XMLPUBFUN xmlTextWriterPtr XMLCALL
+        xmlNewTextWriterTree(xmlDocPtr doc, xmlNodePtr node,
+                             int compression);
+    XMLPUBFUN void XMLCALL xmlFreeTextWriter(xmlTextWriterPtr writer);
+
+/*
+ * Functions
+ */
+
+
+/*
+ * Document
+ */
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterStartDocument(xmlTextWriterPtr writer,
+                                   const char *version,
+                                   const char *encoding,
+                                   const char *standalone);
+    XMLPUBFUN int XMLCALL xmlTextWriterEndDocument(xmlTextWriterPtr
+                                                   writer);
+
+/*
+ * Comments
+ */
+    XMLPUBFUN int XMLCALL xmlTextWriterStartComment(xmlTextWriterPtr
+                                                    writer);
+    XMLPUBFUN int XMLCALL xmlTextWriterEndComment(xmlTextWriterPtr writer);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteFormatComment(xmlTextWriterPtr writer,
+                                        const char *format, ...)
+					ATTRIBUTE_PRINTF(2,3);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteVFormatComment(xmlTextWriterPtr writer,
+                                         const char *format,
+                                         va_list argptr)
+					 ATTRIBUTE_PRINTF(2,0);
+    XMLPUBFUN int XMLCALL xmlTextWriterWriteComment(xmlTextWriterPtr
+                                                    writer,
+                                                    const xmlChar *
+                                                    content);
+
+/*
+ * Elements
+ */
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterStartElement(xmlTextWriterPtr writer,
+                                  const xmlChar * name);
+    XMLPUBFUN int XMLCALL xmlTextWriterStartElementNS(xmlTextWriterPtr
+                                                      writer,
+                                                      const xmlChar *
+                                                      prefix,
+                                                      const xmlChar * name,
+                                                      const xmlChar *
+                                                      namespaceURI);
+    XMLPUBFUN int XMLCALL xmlTextWriterEndElement(xmlTextWriterPtr writer);
+    XMLPUBFUN int XMLCALL xmlTextWriterFullEndElement(xmlTextWriterPtr
+                                                      writer);
+
+/*
+ * Elements conveniency functions
+ */
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteFormatElement(xmlTextWriterPtr writer,
+                                        const xmlChar * name,
+                                        const char *format, ...)
+					ATTRIBUTE_PRINTF(3,4);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteVFormatElement(xmlTextWriterPtr writer,
+                                         const xmlChar * name,
+                                         const char *format,
+                                         va_list argptr)
+					 ATTRIBUTE_PRINTF(3,0);
+    XMLPUBFUN int XMLCALL xmlTextWriterWriteElement(xmlTextWriterPtr
+                                                    writer,
+                                                    const xmlChar * name,
+                                                    const xmlChar *
+                                                    content);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteFormatElementNS(xmlTextWriterPtr writer,
+                                          const xmlChar * prefix,
+                                          const xmlChar * name,
+                                          const xmlChar * namespaceURI,
+                                          const char *format, ...)
+					  ATTRIBUTE_PRINTF(5,6);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteVFormatElementNS(xmlTextWriterPtr writer,
+                                           const xmlChar * prefix,
+                                           const xmlChar * name,
+                                           const xmlChar * namespaceURI,
+                                           const char *format,
+                                           va_list argptr)
+					   ATTRIBUTE_PRINTF(5,0);
+    XMLPUBFUN int XMLCALL xmlTextWriterWriteElementNS(xmlTextWriterPtr
+                                                      writer,
+                                                      const xmlChar *
+                                                      prefix,
+                                                      const xmlChar * name,
+                                                      const xmlChar *
+                                                      namespaceURI,
+                                                      const xmlChar *
+                                                      content);
+
+/*
+ * Text
+ */
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteFormatRaw(xmlTextWriterPtr writer,
+                                    const char *format, ...)
+				    ATTRIBUTE_PRINTF(2,3);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteVFormatRaw(xmlTextWriterPtr writer,
+                                     const char *format, va_list argptr)
+				     ATTRIBUTE_PRINTF(2,0);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteRawLen(xmlTextWriterPtr writer,
+                                 const xmlChar * content, int len);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteRaw(xmlTextWriterPtr writer,
+                              const xmlChar * content);
+    XMLPUBFUN int XMLCALL xmlTextWriterWriteFormatString(xmlTextWriterPtr
+                                                         writer,
+                                                         const char
+                                                         *format, ...)
+							 ATTRIBUTE_PRINTF(2,3);
+    XMLPUBFUN int XMLCALL xmlTextWriterWriteVFormatString(xmlTextWriterPtr
+                                                          writer,
+                                                          const char
+                                                          *format,
+                                                          va_list argptr)
+							  ATTRIBUTE_PRINTF(2,0);
+    XMLPUBFUN int XMLCALL xmlTextWriterWriteString(xmlTextWriterPtr writer,
+                                                   const xmlChar *
+                                                   content);
+    XMLPUBFUN int XMLCALL xmlTextWriterWriteBase64(xmlTextWriterPtr writer,
+                                                   const char *data,
+                                                   int start, int len);
+    XMLPUBFUN int XMLCALL xmlTextWriterWriteBinHex(xmlTextWriterPtr writer,
+                                                   const char *data,
+                                                   int start, int len);
+
+/*
+ * Attributes
+ */
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterStartAttribute(xmlTextWriterPtr writer,
+                                    const xmlChar * name);
+    XMLPUBFUN int XMLCALL xmlTextWriterStartAttributeNS(xmlTextWriterPtr
+                                                        writer,
+                                                        const xmlChar *
+                                                        prefix,
+                                                        const xmlChar *
+                                                        name,
+                                                        const xmlChar *
+                                                        namespaceURI);
+    XMLPUBFUN int XMLCALL xmlTextWriterEndAttribute(xmlTextWriterPtr
+                                                    writer);
+
+/*
+ * Attributes conveniency functions
+ */
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteFormatAttribute(xmlTextWriterPtr writer,
+                                          const xmlChar * name,
+                                          const char *format, ...)
+					  ATTRIBUTE_PRINTF(3,4);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteVFormatAttribute(xmlTextWriterPtr writer,
+                                           const xmlChar * name,
+                                           const char *format,
+                                           va_list argptr)
+					   ATTRIBUTE_PRINTF(3,0);
+    XMLPUBFUN int XMLCALL xmlTextWriterWriteAttribute(xmlTextWriterPtr
+                                                      writer,
+                                                      const xmlChar * name,
+                                                      const xmlChar *
+                                                      content);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteFormatAttributeNS(xmlTextWriterPtr writer,
+                                            const xmlChar * prefix,
+                                            const xmlChar * name,
+                                            const xmlChar * namespaceURI,
+                                            const char *format, ...)
+					    ATTRIBUTE_PRINTF(5,6);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteVFormatAttributeNS(xmlTextWriterPtr writer,
+                                             const xmlChar * prefix,
+                                             const xmlChar * name,
+                                             const xmlChar * namespaceURI,
+                                             const char *format,
+                                             va_list argptr)
+					     ATTRIBUTE_PRINTF(5,0);
+    XMLPUBFUN int XMLCALL xmlTextWriterWriteAttributeNS(xmlTextWriterPtr
+                                                        writer,
+                                                        const xmlChar *
+                                                        prefix,
+                                                        const xmlChar *
+                                                        name,
+                                                        const xmlChar *
+                                                        namespaceURI,
+                                                        const xmlChar *
+                                                        content);
+
+/*
+ * PI's
+ */
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterStartPI(xmlTextWriterPtr writer,
+                             const xmlChar * target);
+    XMLPUBFUN int XMLCALL xmlTextWriterEndPI(xmlTextWriterPtr writer);
+
+/*
+ * PI conveniency functions
+ */
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteFormatPI(xmlTextWriterPtr writer,
+                                   const xmlChar * target,
+                                   const char *format, ...)
+				   ATTRIBUTE_PRINTF(3,4);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteVFormatPI(xmlTextWriterPtr writer,
+                                    const xmlChar * target,
+                                    const char *format, va_list argptr)
+				    ATTRIBUTE_PRINTF(3,0);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWritePI(xmlTextWriterPtr writer,
+                             const xmlChar * target,
+                             const xmlChar * content);
+
+/**
+ * xmlTextWriterWriteProcessingInstruction:
+ *
+ * This macro maps to xmlTextWriterWritePI
+ */
+#define xmlTextWriterWriteProcessingInstruction xmlTextWriterWritePI
+
+/*
+ * CDATA
+ */
+    XMLPUBFUN int XMLCALL xmlTextWriterStartCDATA(xmlTextWriterPtr writer);
+    XMLPUBFUN int XMLCALL xmlTextWriterEndCDATA(xmlTextWriterPtr writer);
+
+/*
+ * CDATA conveniency functions
+ */
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteFormatCDATA(xmlTextWriterPtr writer,
+                                      const char *format, ...)
+				      ATTRIBUTE_PRINTF(2,3);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteVFormatCDATA(xmlTextWriterPtr writer,
+                                       const char *format, va_list argptr)
+				       ATTRIBUTE_PRINTF(2,0);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteCDATA(xmlTextWriterPtr writer,
+                                const xmlChar * content);
+
+/*
+ * DTD
+ */
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterStartDTD(xmlTextWriterPtr writer,
+                              const xmlChar * name,
+                              const xmlChar * pubid,
+                              const xmlChar * sysid);
+    XMLPUBFUN int XMLCALL xmlTextWriterEndDTD(xmlTextWriterPtr writer);
+
+/*
+ * DTD conveniency functions
+ */
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteFormatDTD(xmlTextWriterPtr writer,
+                                    const xmlChar * name,
+                                    const xmlChar * pubid,
+                                    const xmlChar * sysid,
+                                    const char *format, ...)
+				    ATTRIBUTE_PRINTF(5,6);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteVFormatDTD(xmlTextWriterPtr writer,
+                                     const xmlChar * name,
+                                     const xmlChar * pubid,
+                                     const xmlChar * sysid,
+                                     const char *format, va_list argptr)
+				     ATTRIBUTE_PRINTF(5,0);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteDTD(xmlTextWriterPtr writer,
+                              const xmlChar * name,
+                              const xmlChar * pubid,
+                              const xmlChar * sysid,
+                              const xmlChar * subset);
+
+/**
+ * xmlTextWriterWriteDocType:
+ *
+ * this macro maps to xmlTextWriterWriteDTD
+ */
+#define xmlTextWriterWriteDocType xmlTextWriterWriteDTD
+
+/*
+ * DTD element definition
+ */
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterStartDTDElement(xmlTextWriterPtr writer,
+                                     const xmlChar * name);
+    XMLPUBFUN int XMLCALL xmlTextWriterEndDTDElement(xmlTextWriterPtr
+                                                     writer);
+
+/*
+ * DTD element definition conveniency functions
+ */
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteFormatDTDElement(xmlTextWriterPtr writer,
+                                           const xmlChar * name,
+                                           const char *format, ...)
+					   ATTRIBUTE_PRINTF(3,4);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteVFormatDTDElement(xmlTextWriterPtr writer,
+                                            const xmlChar * name,
+                                            const char *format,
+                                            va_list argptr)
+					    ATTRIBUTE_PRINTF(3,0);
+    XMLPUBFUN int XMLCALL xmlTextWriterWriteDTDElement(xmlTextWriterPtr
+                                                       writer,
+                                                       const xmlChar *
+                                                       name,
+                                                       const xmlChar *
+                                                       content);
+
+/*
+ * DTD attribute list definition
+ */
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterStartDTDAttlist(xmlTextWriterPtr writer,
+                                     const xmlChar * name);
+    XMLPUBFUN int XMLCALL xmlTextWriterEndDTDAttlist(xmlTextWriterPtr
+                                                     writer);
+
+/*
+ * DTD attribute list definition conveniency functions
+ */
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteFormatDTDAttlist(xmlTextWriterPtr writer,
+                                           const xmlChar * name,
+                                           const char *format, ...)
+					   ATTRIBUTE_PRINTF(3,4);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteVFormatDTDAttlist(xmlTextWriterPtr writer,
+                                            const xmlChar * name,
+                                            const char *format,
+                                            va_list argptr)
+					    ATTRIBUTE_PRINTF(3,0);
+    XMLPUBFUN int XMLCALL xmlTextWriterWriteDTDAttlist(xmlTextWriterPtr
+                                                       writer,
+                                                       const xmlChar *
+                                                       name,
+                                                       const xmlChar *
+                                                       content);
+
+/*
+ * DTD entity definition
+ */
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterStartDTDEntity(xmlTextWriterPtr writer,
+                                    int pe, const xmlChar * name);
+    XMLPUBFUN int XMLCALL xmlTextWriterEndDTDEntity(xmlTextWriterPtr
+                                                    writer);
+
+/*
+ * DTD entity definition conveniency functions
+ */
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteFormatDTDInternalEntity(xmlTextWriterPtr writer,
+                                                  int pe,
+                                                  const xmlChar * name,
+                                                  const char *format, ...)
+						  ATTRIBUTE_PRINTF(4,5);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteVFormatDTDInternalEntity(xmlTextWriterPtr writer,
+                                                   int pe,
+                                                   const xmlChar * name,
+                                                   const char *format,
+                                                   va_list argptr)
+						   ATTRIBUTE_PRINTF(4,0);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteDTDInternalEntity(xmlTextWriterPtr writer,
+                                            int pe,
+                                            const xmlChar * name,
+                                            const xmlChar * content);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteDTDExternalEntity(xmlTextWriterPtr writer,
+                                            int pe,
+                                            const xmlChar * name,
+                                            const xmlChar * pubid,
+                                            const xmlChar * sysid,
+                                            const xmlChar * ndataid);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteDTDExternalEntityContents(xmlTextWriterPtr
+                                                    writer,
+                                                    const xmlChar * pubid,
+                                                    const xmlChar * sysid,
+                                                    const xmlChar *
+                                                    ndataid);
+    XMLPUBFUN int XMLCALL xmlTextWriterWriteDTDEntity(xmlTextWriterPtr
+                                                      writer, int pe,
+                                                      const xmlChar * name,
+                                                      const xmlChar *
+                                                      pubid,
+                                                      const xmlChar *
+                                                      sysid,
+                                                      const xmlChar *
+                                                      ndataid,
+                                                      const xmlChar *
+                                                      content);
+
+/*
+ * DTD notation definition
+ */
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterWriteDTDNotation(xmlTextWriterPtr writer,
+                                      const xmlChar * name,
+                                      const xmlChar * pubid,
+                                      const xmlChar * sysid);
+
+/*
+ * Indentation
+ */
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterSetIndent(xmlTextWriterPtr writer, int indent);
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterSetIndentString(xmlTextWriterPtr writer,
+                                     const xmlChar * str);
+
+/*
+ * misc
+ */
+    XMLPUBFUN int XMLCALL xmlTextWriterFlush(xmlTextWriterPtr writer);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_WRITER_ENABLED */
+
+#endif                          /* __XML_XMLWRITER_H__ */
diff --git a/interfaces/ext/libxml/xpath.h b/interfaces/ext/libxml/xpath.h
new file mode 100644
index 0000000..1a9e30e
--- /dev/null
+++ b/interfaces/ext/libxml/xpath.h
@@ -0,0 +1,546 @@
+/*
+ * Summary: XML Path Language implementation
+ * Description: API for the XML Path Language implementation
+ *
+ * XML Path Language implementation
+ * XPath is a language for addressing parts of an XML document,
+ * designed to be used by both XSLT and XPointer
+ *     http://www.w3.org/TR/xpath
+ *
+ * Implements
+ * W3C Recommendation 16 November 1999
+ *     http://www.w3.org/TR/1999/REC-xpath-19991116
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XPATH_H__
+#define __XML_XPATH_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_XPATH_ENABLED
+
+#include <libxml/xmlerror.h>
+#include <libxml/tree.h>
+#include <libxml/hash.h>
+#endif /* LIBXML_XPATH_ENABLED */
+
+#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+#ifdef __cplusplus
+extern "C" {
+#endif
+#endif /* LIBXML_XPATH_ENABLED or LIBXML_SCHEMAS_ENABLED */
+	
+#ifdef LIBXML_XPATH_ENABLED
+
+typedef struct _xmlXPathContext xmlXPathContext;
+typedef xmlXPathContext *xmlXPathContextPtr;
+typedef struct _xmlXPathParserContext xmlXPathParserContext;
+typedef xmlXPathParserContext *xmlXPathParserContextPtr;
+
+/**
+ * The set of XPath error codes.
+ */
+
+typedef enum {
+    XPATH_EXPRESSION_OK = 0,
+    XPATH_NUMBER_ERROR,
+    XPATH_UNFINISHED_LITERAL_ERROR,
+    XPATH_START_LITERAL_ERROR,
+    XPATH_VARIABLE_REF_ERROR,
+    XPATH_UNDEF_VARIABLE_ERROR,
+    XPATH_INVALID_PREDICATE_ERROR,
+    XPATH_EXPR_ERROR,
+    XPATH_UNCLOSED_ERROR,
+    XPATH_UNKNOWN_FUNC_ERROR,
+    XPATH_INVALID_OPERAND,
+    XPATH_INVALID_TYPE,
+    XPATH_INVALID_ARITY,
+    XPATH_INVALID_CTXT_SIZE,
+    XPATH_INVALID_CTXT_POSITION,
+    XPATH_MEMORY_ERROR,
+    XPTR_SYNTAX_ERROR,
+    XPTR_RESOURCE_ERROR,
+    XPTR_SUB_RESOURCE_ERROR,
+    XPATH_UNDEF_PREFIX_ERROR,
+    XPATH_ENCODING_ERROR,
+    XPATH_INVALID_CHAR_ERROR,
+    XPATH_INVALID_CTXT
+} xmlXPathError;
+
+/*
+ * A node-set (an unordered collection of nodes without duplicates).
+ */
+typedef struct _xmlNodeSet xmlNodeSet;
+typedef xmlNodeSet *xmlNodeSetPtr;
+struct _xmlNodeSet {
+    int nodeNr;			/* number of nodes in the set */
+    int nodeMax;		/* size of the array as allocated */
+    xmlNodePtr *nodeTab;	/* array of nodes in no particular order */
+    /* @@ with_ns to check wether namespace nodes should be looked at @@ */
+};
+
+/*
+ * An expression is evaluated to yield an object, which
+ * has one of the following four basic types:
+ *   - node-set
+ *   - boolean
+ *   - number
+ *   - string
+ *
+ * @@ XPointer will add more types !
+ */
+
+typedef enum {
+    XPATH_UNDEFINED = 0,
+    XPATH_NODESET = 1,
+    XPATH_BOOLEAN = 2,
+    XPATH_NUMBER = 3,
+    XPATH_STRING = 4,
+    XPATH_POINT = 5,
+    XPATH_RANGE = 6,
+    XPATH_LOCATIONSET = 7,
+    XPATH_USERS = 8,
+    XPATH_XSLT_TREE = 9  /* An XSLT value tree, non modifiable */
+} xmlXPathObjectType;
+
+typedef struct _xmlXPathObject xmlXPathObject;
+typedef xmlXPathObject *xmlXPathObjectPtr;
+struct _xmlXPathObject {
+    xmlXPathObjectType type;
+    xmlNodeSetPtr nodesetval;
+    int boolval;
+    double floatval;
+    xmlChar *stringval;
+    void *user;
+    int index;
+    void *user2;
+    int index2;
+};
+
+/**
+ * xmlXPathConvertFunc:
+ * @obj:  an XPath object
+ * @type:  the number of the target type
+ *
+ * A conversion function is associated to a type and used to cast
+ * the new type to primitive values.
+ *
+ * Returns -1 in case of error, 0 otherwise
+ */
+typedef int (*xmlXPathConvertFunc) (xmlXPathObjectPtr obj, int type);
+
+/*
+ * Extra type: a name and a conversion function.
+ */
+
+typedef struct _xmlXPathType xmlXPathType;
+typedef xmlXPathType *xmlXPathTypePtr;
+struct _xmlXPathType {
+    const xmlChar         *name;		/* the type name */
+    xmlXPathConvertFunc func;		/* the conversion function */
+};
+
+/*
+ * Extra variable: a name and a value.
+ */
+
+typedef struct _xmlXPathVariable xmlXPathVariable;
+typedef xmlXPathVariable *xmlXPathVariablePtr;
+struct _xmlXPathVariable {
+    const xmlChar       *name;		/* the variable name */
+    xmlXPathObjectPtr value;		/* the value */
+};
+
+/**
+ * xmlXPathEvalFunc:
+ * @ctxt: an XPath parser context
+ * @nargs: the number of arguments passed to the function
+ *
+ * An XPath evaluation function, the parameters are on the XPath context stack.
+ */
+
+typedef void (*xmlXPathEvalFunc)(xmlXPathParserContextPtr ctxt,
+	                         int nargs);
+
+/*
+ * Extra function: a name and a evaluation function.
+ */
+
+typedef struct _xmlXPathFunct xmlXPathFunct;
+typedef xmlXPathFunct *xmlXPathFuncPtr;
+struct _xmlXPathFunct {
+    const xmlChar      *name;		/* the function name */
+    xmlXPathEvalFunc func;		/* the evaluation function */
+};
+
+/**
+ * xmlXPathAxisFunc:
+ * @ctxt:  the XPath interpreter context
+ * @cur:  the previous node being explored on that axis
+ *
+ * An axis traversal function. To traverse an axis, the engine calls
+ * the first time with cur == NULL and repeat until the function returns
+ * NULL indicating the end of the axis traversal.
+ *
+ * Returns the next node in that axis or NULL if at the end of the axis.
+ */
+
+typedef xmlXPathObjectPtr (*xmlXPathAxisFunc) (xmlXPathParserContextPtr ctxt,
+				 xmlXPathObjectPtr cur);
+
+/*
+ * Extra axis: a name and an axis function.
+ */
+
+typedef struct _xmlXPathAxis xmlXPathAxis;
+typedef xmlXPathAxis *xmlXPathAxisPtr;
+struct _xmlXPathAxis {
+    const xmlChar      *name;		/* the axis name */
+    xmlXPathAxisFunc func;		/* the search function */
+};
+
+/**
+ * xmlXPathFunction:
+ * @ctxt:  the XPath interprestation context
+ * @nargs:  the number of arguments
+ *
+ * An XPath function.
+ * The arguments (if any) are popped out from the context stack
+ * and the result is pushed on the stack.
+ */
+
+typedef void (*xmlXPathFunction) (xmlXPathParserContextPtr ctxt, int nargs);
+
+/*
+ * Function and Variable Lookup.
+ */
+
+/**
+ * xmlXPathVariableLookupFunc:
+ * @ctxt:  an XPath context
+ * @name:  name of the variable
+ * @ns_uri:  the namespace name hosting this variable
+ *
+ * Prototype for callbacks used to plug variable lookup in the XPath
+ * engine.
+ *
+ * Returns the XPath object value or NULL if not found.
+ */
+typedef xmlXPathObjectPtr (*xmlXPathVariableLookupFunc) (void *ctxt,
+                                         const xmlChar *name,
+                                         const xmlChar *ns_uri);
+
+/**
+ * xmlXPathFuncLookupFunc:
+ * @ctxt:  an XPath context
+ * @name:  name of the function
+ * @ns_uri:  the namespace name hosting this function
+ *
+ * Prototype for callbacks used to plug function lookup in the XPath
+ * engine.
+ *
+ * Returns the XPath function or NULL if not found.
+ */
+typedef xmlXPathFunction (*xmlXPathFuncLookupFunc) (void *ctxt,
+					 const xmlChar *name,
+					 const xmlChar *ns_uri);
+
+/**
+ * xmlXPathFlags:
+ * Flags for XPath engine compilation and runtime
+ */
+/**
+ * XML_XPATH_CHECKNS:
+ *
+ * check namespaces at compilation
+ */
+#define XML_XPATH_CHECKNS (1<<0)
+/**
+ * XML_XPATH_NOVAR:
+ *
+ * forbid variables in expression
+ */
+#define XML_XPATH_NOVAR	  (1<<1)
+
+/**
+ * xmlXPathContext:
+ *
+ * Expression evaluation occurs with respect to a context.
+ * he context consists of:
+ *    - a node (the context node) 
+ *    - a node list (the context node list) 
+ *    - a set of variable bindings 
+ *    - a function library 
+ *    - the set of namespace declarations in scope for the expression 
+ * Following the switch to hash tables, this need to be trimmed up at
+ * the next binary incompatible release.
+ * The node may be modified when the context is passed to libxml2
+ * for an XPath evaluation so you may need to initialize it again
+ * before the next call.
+ */
+
+struct _xmlXPathContext {
+    xmlDocPtr doc;			/* The current document */
+    xmlNodePtr node;			/* The current node */
+
+    int nb_variables_unused;		/* unused (hash table) */
+    int max_variables_unused;		/* unused (hash table) */
+    xmlHashTablePtr varHash;		/* Hash table of defined variables */
+
+    int nb_types;			/* number of defined types */
+    int max_types;			/* max number of types */
+    xmlXPathTypePtr types;		/* Array of defined types */
+
+    int nb_funcs_unused;		/* unused (hash table) */
+    int max_funcs_unused;		/* unused (hash table) */
+    xmlHashTablePtr funcHash;		/* Hash table of defined funcs */
+
+    int nb_axis;			/* number of defined axis */
+    int max_axis;			/* max number of axis */
+    xmlXPathAxisPtr axis;		/* Array of defined axis */
+
+    /* the namespace nodes of the context node */
+    xmlNsPtr *namespaces;		/* Array of namespaces */
+    int nsNr;				/* number of namespace in scope */
+    void *user;				/* function to free */
+
+    /* extra variables */
+    int contextSize;			/* the context size */
+    int proximityPosition;		/* the proximity position */
+
+    /* extra stuff for XPointer */
+    int xptr;				/* is this an XPointer context? */
+    xmlNodePtr here;			/* for here() */
+    xmlNodePtr origin;			/* for origin() */
+
+    /* the set of namespace declarations in scope for the expression */
+    xmlHashTablePtr nsHash;		/* The namespaces hash table */
+    xmlXPathVariableLookupFunc varLookupFunc;/* variable lookup func */
+    void *varLookupData;		/* variable lookup data */
+
+    /* Possibility to link in an extra item */
+    void *extra;                        /* needed for XSLT */
+
+    /* The function name and URI when calling a function */
+    const xmlChar *function;
+    const xmlChar *functionURI;
+
+    /* function lookup function and data */
+    xmlXPathFuncLookupFunc funcLookupFunc;/* function lookup func */
+    void *funcLookupData;		/* function lookup data */
+
+    /* temporary namespace lists kept for walking the namespace axis */
+    xmlNsPtr *tmpNsList;		/* Array of namespaces */
+    int tmpNsNr;			/* number of namespaces in scope */
+
+    /* error reporting mechanism */
+    void *userData;                     /* user specific data block */
+    xmlStructuredErrorFunc error;       /* the callback in case of errors */
+    xmlError lastError;			/* the last error */
+    xmlNodePtr debugNode;		/* the source node XSLT */
+
+    /* dictionary */
+    xmlDictPtr dict;			/* dictionary if any */
+
+    int flags;				/* flags to control compilation */
+
+    /* Cache for reusal of XPath objects */
+    void *cache;
+};
+
+/*
+ * The structure of a compiled expression form is not public.
+ */
+
+typedef struct _xmlXPathCompExpr xmlXPathCompExpr;
+typedef xmlXPathCompExpr *xmlXPathCompExprPtr;
+
+/**
+ * xmlXPathParserContext:
+ *
+ * An XPath parser context. It contains pure parsing informations,
+ * an xmlXPathContext, and the stack of objects.
+ */
+struct _xmlXPathParserContext {
+    const xmlChar *cur;			/* the current char being parsed */
+    const xmlChar *base;			/* the full expression */
+
+    int error;				/* error code */
+
+    xmlXPathContextPtr  context;	/* the evaluation context */
+    xmlXPathObjectPtr     value;	/* the current value */
+    int                 valueNr;	/* number of values stacked */
+    int                valueMax;	/* max number of values stacked */
+    xmlXPathObjectPtr *valueTab;	/* stack of values */
+
+    xmlXPathCompExprPtr comp;		/* the precompiled expression */
+    int xptr;				/* it this an XPointer expression */
+    xmlNodePtr         ancestor;	/* used for walking preceding axis */
+};
+
+/************************************************************************
+ *									*
+ *			Public API					*
+ *									*
+ ************************************************************************/
+
+/**
+ * Objects and Nodesets handling
+ */
+
+XMLPUBVAR double xmlXPathNAN;
+XMLPUBVAR double xmlXPathPINF;
+XMLPUBVAR double xmlXPathNINF;
+
+/* These macros may later turn into functions */
+/**
+ * xmlXPathNodeSetGetLength:
+ * @ns:  a node-set
+ *
+ * Implement a functionality similar to the DOM NodeList.length.
+ *
+ * Returns the number of nodes in the node-set.
+ */
+#define xmlXPathNodeSetGetLength(ns) ((ns) ? (ns)->nodeNr : 0)
+/**
+ * xmlXPathNodeSetItem:
+ * @ns:  a node-set
+ * @index:  index of a node in the set
+ *
+ * Implements a functionality similar to the DOM NodeList.item().
+ *
+ * Returns the xmlNodePtr at the given @index in @ns or NULL if
+ *         @index is out of range (0 to length-1)
+ */
+#define xmlXPathNodeSetItem(ns, index)				\
+		((((ns) != NULL) && 				\
+		  ((index) >= 0) && ((index) < (ns)->nodeNr)) ?	\
+		 (ns)->nodeTab[(index)]				\
+		 : NULL)
+/**
+ * xmlXPathNodeSetIsEmpty:
+ * @ns: a node-set
+ *
+ * Checks whether @ns is empty or not.
+ *
+ * Returns %TRUE if @ns is an empty node-set.
+ */
+#define xmlXPathNodeSetIsEmpty(ns)                                      \
+    (((ns) == NULL) || ((ns)->nodeNr == 0) || ((ns)->nodeTab == NULL))
+
+
+XMLPUBFUN void XMLCALL		   
+		    xmlXPathFreeObject		(xmlXPathObjectPtr obj);
+XMLPUBFUN xmlNodeSetPtr XMLCALL	   
+		    xmlXPathNodeSetCreate	(xmlNodePtr val);
+XMLPUBFUN void XMLCALL		   
+		    xmlXPathFreeNodeSetList	(xmlXPathObjectPtr obj);
+XMLPUBFUN void XMLCALL		   
+		    xmlXPathFreeNodeSet		(xmlNodeSetPtr obj);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL  
+		    xmlXPathObjectCopy		(xmlXPathObjectPtr val);
+XMLPUBFUN int XMLCALL		   
+		    xmlXPathCmpNodes		(xmlNodePtr node1,
+						 xmlNodePtr node2);
+/**
+ * Conversion functions to basic types.
+ */
+XMLPUBFUN int XMLCALL		   
+		    xmlXPathCastNumberToBoolean	(double val);
+XMLPUBFUN int XMLCALL		   
+		    xmlXPathCastStringToBoolean	(const xmlChar * val);
+XMLPUBFUN int XMLCALL		   
+		    xmlXPathCastNodeSetToBoolean(xmlNodeSetPtr ns);
+XMLPUBFUN int XMLCALL		   
+		    xmlXPathCastToBoolean	(xmlXPathObjectPtr val);
+
+XMLPUBFUN double XMLCALL		   
+		    xmlXPathCastBooleanToNumber	(int val);
+XMLPUBFUN double XMLCALL		   
+		    xmlXPathCastStringToNumber	(const xmlChar * val);
+XMLPUBFUN double XMLCALL		   
+		    xmlXPathCastNodeToNumber	(xmlNodePtr node);
+XMLPUBFUN double XMLCALL		   
+		    xmlXPathCastNodeSetToNumber	(xmlNodeSetPtr ns);
+XMLPUBFUN double XMLCALL		   
+		    xmlXPathCastToNumber	(xmlXPathObjectPtr val);
+
+XMLPUBFUN xmlChar * XMLCALL	   
+		    xmlXPathCastBooleanToString	(int val);
+XMLPUBFUN xmlChar * XMLCALL	   
+		    xmlXPathCastNumberToString	(double val);
+XMLPUBFUN xmlChar * XMLCALL	   
+		    xmlXPathCastNodeToString	(xmlNodePtr node);
+XMLPUBFUN xmlChar * XMLCALL	   
+		    xmlXPathCastNodeSetToString	(xmlNodeSetPtr ns);
+XMLPUBFUN xmlChar * XMLCALL	   
+		    xmlXPathCastToString	(xmlXPathObjectPtr val);
+
+XMLPUBFUN xmlXPathObjectPtr XMLCALL  
+		    xmlXPathConvertBoolean	(xmlXPathObjectPtr val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL  
+		    xmlXPathConvertNumber	(xmlXPathObjectPtr val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL  
+		    xmlXPathConvertString	(xmlXPathObjectPtr val);
+
+/**
+ * Context handling.
+ */
+XMLPUBFUN xmlXPathContextPtr XMLCALL 
+		    xmlXPathNewContext		(xmlDocPtr doc);
+XMLPUBFUN void XMLCALL
+		    xmlXPathFreeContext		(xmlXPathContextPtr ctxt);
+XMLPUBFUN int XMLCALL
+		    xmlXPathContextSetCache(xmlXPathContextPtr ctxt,
+				            int active,
+					    int value,
+					    int options);
+/**
+ * Evaluation functions.
+ */
+XMLPUBFUN long XMLCALL               
+		    xmlXPathOrderDocElems	(xmlDocPtr doc);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL  
+		    xmlXPathEval		(const xmlChar *str,
+						 xmlXPathContextPtr ctx);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL  
+		    xmlXPathEvalExpression	(const xmlChar *str,
+						 xmlXPathContextPtr ctxt);
+XMLPUBFUN int XMLCALL                
+		    xmlXPathEvalPredicate	(xmlXPathContextPtr ctxt,
+						 xmlXPathObjectPtr res);
+/**
+ * Separate compilation/evaluation entry points.
+ */
+XMLPUBFUN xmlXPathCompExprPtr XMLCALL 
+		    xmlXPathCompile		(const xmlChar *str);
+XMLPUBFUN xmlXPathCompExprPtr XMLCALL 
+		    xmlXPathCtxtCompile		(xmlXPathContextPtr ctxt,
+		    				 const xmlChar *str);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL   
+		    xmlXPathCompiledEval	(xmlXPathCompExprPtr comp,
+						 xmlXPathContextPtr ctx);
+XMLPUBFUN int XMLCALL   
+		    xmlXPathCompiledEvalToBoolean(xmlXPathCompExprPtr comp,
+						 xmlXPathContextPtr ctxt);
+XMLPUBFUN void XMLCALL                
+		    xmlXPathFreeCompExpr	(xmlXPathCompExprPtr comp);
+#endif /* LIBXML_XPATH_ENABLED */
+#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+XMLPUBFUN void XMLCALL		   
+		    xmlXPathInit		(void);
+XMLPUBFUN int XMLCALL
+		xmlXPathIsNaN	(double val);
+XMLPUBFUN int XMLCALL
+		xmlXPathIsInf	(double val);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_XPATH_ENABLED or LIBXML_SCHEMAS_ENABLED*/
+#endif /* ! __XML_XPATH_H__ */
diff --git a/interfaces/ext/libxml/xpathInternals.h b/interfaces/ext/libxml/xpathInternals.h
new file mode 100644
index 0000000..dcd5243
--- /dev/null
+++ b/interfaces/ext/libxml/xpathInternals.h
@@ -0,0 +1,630 @@
+/*
+ * Summary: internal interfaces for XML Path Language implementation
+ * Description: internal interfaces for XML Path Language implementation
+ *              used to build new modules on top of XPath like XPointer and
+ *              XSLT
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XPATH_INTERNALS_H__
+#define __XML_XPATH_INTERNALS_H__
+
+#include <libxml/xmlversion.h>
+#include <libxml/xpath.h>
+
+#ifdef LIBXML_XPATH_ENABLED
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/************************************************************************
+ *									*
+ *			Helpers						*
+ *									*
+ ************************************************************************/
+
+/*
+ * Many of these macros may later turn into functions. They
+ * shouldn't be used in #ifdef's preprocessor instructions.
+ */
+/**
+ * xmlXPathSetError:
+ * @ctxt:  an XPath parser context
+ * @err:  an xmlXPathError code
+ *
+ * Raises an error.
+ */
+#define xmlXPathSetError(ctxt, err)					\
+    { xmlXPatherror((ctxt), __FILE__, __LINE__, (err));			\
+      if ((ctxt) != NULL) (ctxt)->error = (err); }
+
+/**
+ * xmlXPathSetArityError:
+ * @ctxt:  an XPath parser context
+ *
+ * Raises an XPATH_INVALID_ARITY error.
+ */
+#define xmlXPathSetArityError(ctxt)					\
+    xmlXPathSetError((ctxt), XPATH_INVALID_ARITY)
+
+/**
+ * xmlXPathSetTypeError:
+ * @ctxt:  an XPath parser context
+ *
+ * Raises an XPATH_INVALID_TYPE error.
+ */
+#define xmlXPathSetTypeError(ctxt)					\
+    xmlXPathSetError((ctxt), XPATH_INVALID_TYPE)
+
+/**
+ * xmlXPathGetError:
+ * @ctxt:  an XPath parser context
+ *
+ * Get the error code of an XPath context.
+ *
+ * Returns the context error.
+ */
+#define xmlXPathGetError(ctxt)	  ((ctxt)->error)
+
+/**
+ * xmlXPathCheckError:
+ * @ctxt:  an XPath parser context
+ *
+ * Check if an XPath error was raised.
+ *
+ * Returns true if an error has been raised, false otherwise.
+ */
+#define xmlXPathCheckError(ctxt)  ((ctxt)->error != XPATH_EXPRESSION_OK)
+
+/**
+ * xmlXPathGetDocument:
+ * @ctxt:  an XPath parser context
+ *
+ * Get the document of an XPath context.
+ *
+ * Returns the context document.
+ */
+#define xmlXPathGetDocument(ctxt)	((ctxt)->context->doc)
+
+/**
+ * xmlXPathGetContextNode:
+ * @ctxt: an XPath parser context
+ *
+ * Get the context node of an XPath context.
+ *
+ * Returns the context node.
+ */
+#define xmlXPathGetContextNode(ctxt)	((ctxt)->context->node)
+
+XMLPUBFUN int XMLCALL		
+		xmlXPathPopBoolean	(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN double XMLCALL		
+    		xmlXPathPopNumber	(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL	
+    		xmlXPathPopString	(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN xmlNodeSetPtr XMLCALL	
+    		xmlXPathPopNodeSet	(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void * XMLCALL		
+    		xmlXPathPopExternal	(xmlXPathParserContextPtr ctxt);
+
+/**
+ * xmlXPathReturnBoolean:
+ * @ctxt:  an XPath parser context
+ * @val:  a boolean
+ *
+ * Pushes the boolean @val on the context stack.
+ */
+#define xmlXPathReturnBoolean(ctxt, val)				\
+    valuePush((ctxt), xmlXPathNewBoolean(val))
+
+/**
+ * xmlXPathReturnTrue:
+ * @ctxt:  an XPath parser context
+ *
+ * Pushes true on the context stack.
+ */
+#define xmlXPathReturnTrue(ctxt)   xmlXPathReturnBoolean((ctxt), 1)
+
+/**
+ * xmlXPathReturnFalse:
+ * @ctxt:  an XPath parser context
+ *
+ * Pushes false on the context stack.
+ */
+#define xmlXPathReturnFalse(ctxt)  xmlXPathReturnBoolean((ctxt), 0)
+
+/**
+ * xmlXPathReturnNumber:
+ * @ctxt:  an XPath parser context
+ * @val:  a double
+ *
+ * Pushes the double @val on the context stack.
+ */
+#define xmlXPathReturnNumber(ctxt, val)					\
+    valuePush((ctxt), xmlXPathNewFloat(val))
+
+/**
+ * xmlXPathReturnString:
+ * @ctxt:  an XPath parser context
+ * @str:  a string
+ *
+ * Pushes the string @str on the context stack.
+ */
+#define xmlXPathReturnString(ctxt, str)					\
+    valuePush((ctxt), xmlXPathWrapString(str))
+
+/**
+ * xmlXPathReturnEmptyString:
+ * @ctxt:  an XPath parser context
+ *
+ * Pushes an empty string on the stack.
+ */
+#define xmlXPathReturnEmptyString(ctxt)					\
+    valuePush((ctxt), xmlXPathNewCString(""))
+
+/**
+ * xmlXPathReturnNodeSet:
+ * @ctxt:  an XPath parser context
+ * @ns:  a node-set
+ *
+ * Pushes the node-set @ns on the context stack.
+ */
+#define xmlXPathReturnNodeSet(ctxt, ns)					\
+    valuePush((ctxt), xmlXPathWrapNodeSet(ns))
+
+/**
+ * xmlXPathReturnEmptyNodeSet:
+ * @ctxt:  an XPath parser context
+ *
+ * Pushes an empty node-set on the context stack.
+ */
+#define xmlXPathReturnEmptyNodeSet(ctxt)				\
+    valuePush((ctxt), xmlXPathNewNodeSet(NULL))
+
+/**
+ * xmlXPathReturnExternal:
+ * @ctxt:  an XPath parser context
+ * @val:  user data
+ *
+ * Pushes user data on the context stack.
+ */
+#define xmlXPathReturnExternal(ctxt, val)				\
+    valuePush((ctxt), xmlXPathWrapExternal(val))
+
+/**
+ * xmlXPathStackIsNodeSet:
+ * @ctxt: an XPath parser context
+ *
+ * Check if the current value on the XPath stack is a node set or
+ * an XSLT value tree.
+ *
+ * Returns true if the current object on the stack is a node-set.
+ */
+#define xmlXPathStackIsNodeSet(ctxt)					\
+    (((ctxt)->value != NULL)						\
+     && (((ctxt)->value->type == XPATH_NODESET)				\
+         || ((ctxt)->value->type == XPATH_XSLT_TREE)))
+
+/**
+ * xmlXPathStackIsExternal:
+ * @ctxt: an XPath parser context
+ *
+ * Checks if the current value on the XPath stack is an external
+ * object.
+ *
+ * Returns true if the current object on the stack is an external
+ * object.
+ */
+#define xmlXPathStackIsExternal(ctxt)					\
+	((ctxt->value != NULL) && (ctxt->value->type == XPATH_USERS))
+
+/**
+ * xmlXPathEmptyNodeSet:
+ * @ns:  a node-set
+ *
+ * Empties a node-set.
+ */
+#define xmlXPathEmptyNodeSet(ns)					\
+    { while ((ns)->nodeNr > 0) (ns)->nodeTab[(ns)->nodeNr--] = NULL; }
+
+/**
+ * CHECK_ERROR:
+ *
+ * Macro to return from the function if an XPath error was detected.
+ */
+#define CHECK_ERROR							\
+    if (ctxt->error != XPATH_EXPRESSION_OK) return
+
+/**
+ * CHECK_ERROR0:
+ *
+ * Macro to return 0 from the function if an XPath error was detected.
+ */
+#define CHECK_ERROR0							\
+    if (ctxt->error != XPATH_EXPRESSION_OK) return(0)
+
+/**
+ * XP_ERROR:
+ * @X:  the error code
+ *
+ * Macro to raise an XPath error and return.
+ */
+#define XP_ERROR(X)							\
+    { xmlXPathErr(ctxt, X); return; }
+
+/**
+ * XP_ERROR0:
+ * @X:  the error code
+ *
+ * Macro to raise an XPath error and return 0.
+ */
+#define XP_ERROR0(X)							\
+    { xmlXPathErr(ctxt, X); return(0); }
+
+/**
+ * CHECK_TYPE:
+ * @typeval:  the XPath type
+ *
+ * Macro to check that the value on top of the XPath stack is of a given
+ * type.
+ */
+#define CHECK_TYPE(typeval)						\
+    if ((ctxt->value == NULL) || (ctxt->value->type != typeval))	\
+        XP_ERROR(XPATH_INVALID_TYPE)
+
+/**
+ * CHECK_TYPE0:
+ * @typeval:  the XPath type
+ *
+ * Macro to check that the value on top of the XPath stack is of a given
+ * type. Return(0) in case of failure
+ */
+#define CHECK_TYPE0(typeval)						\
+    if ((ctxt->value == NULL) || (ctxt->value->type != typeval))	\
+        XP_ERROR0(XPATH_INVALID_TYPE)
+
+/**
+ * CHECK_ARITY:
+ * @x:  the number of expected args
+ *
+ * Macro to check that the number of args passed to an XPath function matches.
+ */
+#define CHECK_ARITY(x)							\
+    if (ctxt == NULL) return;						\
+    if (nargs != (x))							\
+        XP_ERROR(XPATH_INVALID_ARITY);
+
+/**
+ * CAST_TO_STRING:
+ *
+ * Macro to try to cast the value on the top of the XPath stack to a string.
+ */
+#define CAST_TO_STRING							\
+    if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING))	\
+        xmlXPathStringFunction(ctxt, 1);
+
+/**
+ * CAST_TO_NUMBER:
+ *
+ * Macro to try to cast the value on the top of the XPath stack to a number.
+ */
+#define CAST_TO_NUMBER							\
+    if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER))	\
+        xmlXPathNumberFunction(ctxt, 1);
+
+/**
+ * CAST_TO_BOOLEAN:
+ *
+ * Macro to try to cast the value on the top of the XPath stack to a boolean.
+ */
+#define CAST_TO_BOOLEAN							\
+    if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_BOOLEAN))	\
+        xmlXPathBooleanFunction(ctxt, 1);
+
+/*
+ * Variable Lookup forwarding.
+ */
+
+XMLPUBFUN void XMLCALL	
+	xmlXPathRegisterVariableLookup	(xmlXPathContextPtr ctxt,
+					 xmlXPathVariableLookupFunc f,
+					 void *data);
+
+/*
+ * Function Lookup forwarding.
+ */
+
+XMLPUBFUN void XMLCALL	
+	    xmlXPathRegisterFuncLookup	(xmlXPathContextPtr ctxt,
+					 xmlXPathFuncLookupFunc f,
+					 void *funcCtxt);
+
+/*
+ * Error reporting.
+ */
+XMLPUBFUN void XMLCALL		
+		xmlXPatherror	(xmlXPathParserContextPtr ctxt,
+				 const char *file,
+				 int line,
+				 int no);
+
+XMLPUBFUN void XMLCALL
+		xmlXPathErr	(xmlXPathParserContextPtr ctxt,
+				 int error);
+
+#ifdef LIBXML_DEBUG_ENABLED
+XMLPUBFUN void XMLCALL		
+		xmlXPathDebugDumpObject	(FILE *output,
+					 xmlXPathObjectPtr cur,
+					 int depth);
+XMLPUBFUN void XMLCALL		
+	    xmlXPathDebugDumpCompExpr(FILE *output,
+					 xmlXPathCompExprPtr comp,
+					 int depth);
+#endif
+/**
+ * NodeSet handling.
+ */
+XMLPUBFUN int XMLCALL		
+		xmlXPathNodeSetContains		(xmlNodeSetPtr cur,
+						 xmlNodePtr val);
+XMLPUBFUN xmlNodeSetPtr XMLCALL	
+		xmlXPathDifference		(xmlNodeSetPtr nodes1,
+						 xmlNodeSetPtr nodes2);
+XMLPUBFUN xmlNodeSetPtr XMLCALL	
+		xmlXPathIntersection		(xmlNodeSetPtr nodes1,
+						 xmlNodeSetPtr nodes2);
+
+XMLPUBFUN xmlNodeSetPtr XMLCALL	
+		xmlXPathDistinctSorted		(xmlNodeSetPtr nodes);
+XMLPUBFUN xmlNodeSetPtr XMLCALL	
+		xmlXPathDistinct		(xmlNodeSetPtr nodes);
+
+XMLPUBFUN int XMLCALL		
+		xmlXPathHasSameNodes		(xmlNodeSetPtr nodes1,
+						 xmlNodeSetPtr nodes2);
+
+XMLPUBFUN xmlNodeSetPtr XMLCALL	
+		xmlXPathNodeLeadingSorted	(xmlNodeSetPtr nodes,
+						 xmlNodePtr node);
+XMLPUBFUN xmlNodeSetPtr XMLCALL	
+		xmlXPathLeadingSorted		(xmlNodeSetPtr nodes1,
+						 xmlNodeSetPtr nodes2);
+XMLPUBFUN xmlNodeSetPtr XMLCALL	
+		xmlXPathNodeLeading		(xmlNodeSetPtr nodes,
+						 xmlNodePtr node);
+XMLPUBFUN xmlNodeSetPtr XMLCALL	
+		xmlXPathLeading			(xmlNodeSetPtr nodes1,
+						 xmlNodeSetPtr nodes2);
+
+XMLPUBFUN xmlNodeSetPtr XMLCALL	
+		xmlXPathNodeTrailingSorted	(xmlNodeSetPtr nodes,
+						 xmlNodePtr node);
+XMLPUBFUN xmlNodeSetPtr XMLCALL	
+		xmlXPathTrailingSorted		(xmlNodeSetPtr nodes1,
+						 xmlNodeSetPtr nodes2);
+XMLPUBFUN xmlNodeSetPtr XMLCALL	
+		xmlXPathNodeTrailing		(xmlNodeSetPtr nodes,
+						 xmlNodePtr node);
+XMLPUBFUN xmlNodeSetPtr XMLCALL	
+		xmlXPathTrailing		(xmlNodeSetPtr nodes1,
+						 xmlNodeSetPtr nodes2);
+
+
+/**
+ * Extending a context.
+ */
+
+XMLPUBFUN int XMLCALL		   
+		xmlXPathRegisterNs		(xmlXPathContextPtr ctxt,
+						 const xmlChar *prefix,
+						 const xmlChar *ns_uri);
+XMLPUBFUN const xmlChar * XMLCALL	   
+		xmlXPathNsLookup		(xmlXPathContextPtr ctxt,
+						 const xmlChar *prefix);
+XMLPUBFUN void XMLCALL		   
+		xmlXPathRegisteredNsCleanup	(xmlXPathContextPtr ctxt);
+
+XMLPUBFUN int XMLCALL		   
+		xmlXPathRegisterFunc		(xmlXPathContextPtr ctxt,
+						 const xmlChar *name,
+						 xmlXPathFunction f);
+XMLPUBFUN int XMLCALL		   
+		xmlXPathRegisterFuncNS		(xmlXPathContextPtr ctxt,
+						 const xmlChar *name,
+						 const xmlChar *ns_uri,
+						 xmlXPathFunction f);
+XMLPUBFUN int XMLCALL		   
+		xmlXPathRegisterVariable	(xmlXPathContextPtr ctxt,
+						 const xmlChar *name,
+						 xmlXPathObjectPtr value);
+XMLPUBFUN int XMLCALL		   
+		xmlXPathRegisterVariableNS	(xmlXPathContextPtr ctxt,
+						 const xmlChar *name,
+						 const xmlChar *ns_uri,
+						 xmlXPathObjectPtr value);
+XMLPUBFUN xmlXPathFunction XMLCALL   
+		xmlXPathFunctionLookup		(xmlXPathContextPtr ctxt,
+						 const xmlChar *name);
+XMLPUBFUN xmlXPathFunction XMLCALL   
+		xmlXPathFunctionLookupNS	(xmlXPathContextPtr ctxt,
+						 const xmlChar *name,
+						 const xmlChar *ns_uri);
+XMLPUBFUN void XMLCALL		   
+		xmlXPathRegisteredFuncsCleanup	(xmlXPathContextPtr ctxt);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL  
+		xmlXPathVariableLookup		(xmlXPathContextPtr ctxt,
+						 const xmlChar *name);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL  
+		xmlXPathVariableLookupNS	(xmlXPathContextPtr ctxt,
+						 const xmlChar *name,
+						 const xmlChar *ns_uri);
+XMLPUBFUN void XMLCALL		   
+		xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt);
+
+/**
+ * Utilities to extend XPath.
+ */
+XMLPUBFUN xmlXPathParserContextPtr XMLCALL
+		  xmlXPathNewParserContext	(const xmlChar *str,
+			  			 xmlXPathContextPtr ctxt);
+XMLPUBFUN void XMLCALL		  
+		xmlXPathFreeParserContext	(xmlXPathParserContextPtr ctxt);
+
+/* TODO: remap to xmlXPathValuePop and Push. */
+XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+		valuePop			(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN int XMLCALL		  
+		valuePush			(xmlXPathParserContextPtr ctxt,
+					 	 xmlXPathObjectPtr value);
+
+XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+		xmlXPathNewString		(const xmlChar *val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+		xmlXPathNewCString		(const char *val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+		xmlXPathWrapString		(xmlChar *val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+		xmlXPathWrapCString		(char * val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+		xmlXPathNewFloat		(double val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+		xmlXPathNewBoolean		(int val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+		xmlXPathNewNodeSet		(xmlNodePtr val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+		xmlXPathNewValueTree		(xmlNodePtr val);
+XMLPUBFUN void XMLCALL		  
+		xmlXPathNodeSetAdd		(xmlNodeSetPtr cur,
+						 xmlNodePtr val);
+XMLPUBFUN void XMLCALL              
+		xmlXPathNodeSetAddUnique	(xmlNodeSetPtr cur,
+						 xmlNodePtr val);
+XMLPUBFUN void XMLCALL		  
+		xmlXPathNodeSetAddNs		(xmlNodeSetPtr cur, 
+						 xmlNodePtr node, 
+						 xmlNsPtr ns);
+XMLPUBFUN void XMLCALL              
+		xmlXPathNodeSetSort		(xmlNodeSetPtr set);
+
+XMLPUBFUN void XMLCALL		  
+		xmlXPathRoot			(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void XMLCALL		  
+		xmlXPathEvalExpr		(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL	  
+		xmlXPathParseName		(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL	  
+		xmlXPathParseNCName		(xmlXPathParserContextPtr ctxt);
+
+/*
+ * Existing functions.
+ */
+XMLPUBFUN double XMLCALL 
+		xmlXPathStringEvalNumber	(const xmlChar *str);
+XMLPUBFUN int XMLCALL 
+		xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt, 
+						 xmlXPathObjectPtr res);
+XMLPUBFUN void XMLCALL 
+		xmlXPathRegisterAllFunctions	(xmlXPathContextPtr ctxt);
+XMLPUBFUN xmlNodeSetPtr XMLCALL 
+		xmlXPathNodeSetMerge		(xmlNodeSetPtr val1, 
+						 xmlNodeSetPtr val2);
+XMLPUBFUN void XMLCALL 
+		xmlXPathNodeSetDel		(xmlNodeSetPtr cur, 
+						 xmlNodePtr val);
+XMLPUBFUN void XMLCALL 
+		xmlXPathNodeSetRemove		(xmlNodeSetPtr cur, 
+						 int val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+		xmlXPathNewNodeSetList		(xmlNodeSetPtr val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+		xmlXPathWrapNodeSet		(xmlNodeSetPtr val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+		xmlXPathWrapExternal		(void *val);
+
+XMLPUBFUN int XMLCALL xmlXPathEqualValues(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN int XMLCALL xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN int XMLCALL xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict);
+XMLPUBFUN void XMLCALL xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void XMLCALL xmlXPathAddValues(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void XMLCALL xmlXPathSubValues(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void XMLCALL xmlXPathMultValues(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void XMLCALL xmlXPathDivValues(xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void XMLCALL xmlXPathModValues(xmlXPathParserContextPtr ctxt);
+
+XMLPUBFUN int XMLCALL xmlXPathIsNodeType(const xmlChar *name);
+
+/*
+ * Some of the axis navigation routines.
+ */
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextSelf(xmlXPathParserContextPtr ctxt,
+			xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextChild(xmlXPathParserContextPtr ctxt,
+			xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt,
+			xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt,
+			xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextParent(xmlXPathParserContextPtr ctxt,
+			xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt,
+			xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt,
+			xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt,
+			xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt,
+			xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt,
+			xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt,
+			xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt,
+			xmlNodePtr cur);
+XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt,
+			xmlNodePtr cur);
+/*
+ * The official core of XPath functions.
+ */
+XMLPUBFUN void XMLCALL xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs);
+XMLPUBFUN void XMLCALL xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, int nargs);
+
+/**
+ * Really internal functions
+ */
+XMLPUBFUN void XMLCALL xmlXPathNodeSetFreeNs(xmlNsPtr ns);
+ 
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_XPATH_ENABLED */
+#endif /* ! __XML_XPATH_INTERNALS_H__ */
diff --git a/interfaces/ext/libxml/xpointer.h b/interfaces/ext/libxml/xpointer.h
new file mode 100644
index 0000000..dde1dfb
--- /dev/null
+++ b/interfaces/ext/libxml/xpointer.h
@@ -0,0 +1,114 @@
+/*
+ * Summary: API to handle XML Pointers
+ * Description: API to handle XML Pointers
+ * Base implementation was made accordingly to
+ * W3C Candidate Recommendation 7 June 2000
+ * http://www.w3.org/TR/2000/CR-xptr-20000607
+ *
+ * Added support for the element() scheme described in:
+ * W3C Proposed Recommendation 13 November 2002
+ * http://www.w3.org/TR/2002/PR-xptr-element-20021113/  
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_XPTR_H__
+#define __XML_XPTR_H__
+
+#include <libxml/xmlversion.h>
+
+#ifdef LIBXML_XPTR_ENABLED
+
+#include <libxml/tree.h>
+#include <libxml/xpath.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * A Location Set
+ */
+typedef struct _xmlLocationSet xmlLocationSet;
+typedef xmlLocationSet *xmlLocationSetPtr;
+struct _xmlLocationSet {
+    int locNr;		      /* number of locations in the set */
+    int locMax;		      /* size of the array as allocated */
+    xmlXPathObjectPtr *locTab;/* array of locations */
+};
+
+/*
+ * Handling of location sets.
+ */
+
+XMLPUBFUN xmlLocationSetPtr XMLCALL			
+		    xmlXPtrLocationSetCreate	(xmlXPathObjectPtr val);
+XMLPUBFUN void XMLCALL			
+		    xmlXPtrFreeLocationSet	(xmlLocationSetPtr obj);
+XMLPUBFUN xmlLocationSetPtr XMLCALL	
+		    xmlXPtrLocationSetMerge	(xmlLocationSetPtr val1,
+						 xmlLocationSetPtr val2);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL	
+		    xmlXPtrNewRange		(xmlNodePtr start,
+						 int startindex,
+						 xmlNodePtr end,
+						 int endindex);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL	
+		    xmlXPtrNewRangePoints	(xmlXPathObjectPtr start,
+						 xmlXPathObjectPtr end);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL	
+		    xmlXPtrNewRangeNodePoint	(xmlNodePtr start,
+						 xmlXPathObjectPtr end);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL	
+		    xmlXPtrNewRangePointNode	(xmlXPathObjectPtr start,
+						 xmlNodePtr end);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL			
+		    xmlXPtrNewRangeNodes	(xmlNodePtr start,
+						 xmlNodePtr end);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL	
+		    xmlXPtrNewLocationSetNodes	(xmlNodePtr start,
+						 xmlNodePtr end);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL	
+		    xmlXPtrNewLocationSetNodeSet(xmlNodeSetPtr set);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL	
+		    xmlXPtrNewRangeNodeObject	(xmlNodePtr start,
+						 xmlXPathObjectPtr end);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL	
+		    xmlXPtrNewCollapsedRange	(xmlNodePtr start);
+XMLPUBFUN void XMLCALL			
+		    xmlXPtrLocationSetAdd	(xmlLocationSetPtr cur,
+						 xmlXPathObjectPtr val);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL	
+		    xmlXPtrWrapLocationSet	(xmlLocationSetPtr val);
+XMLPUBFUN void XMLCALL			
+		    xmlXPtrLocationSetDel	(xmlLocationSetPtr cur,
+						 xmlXPathObjectPtr val);
+XMLPUBFUN void XMLCALL			
+		    xmlXPtrLocationSetRemove	(xmlLocationSetPtr cur,
+						 int val);
+
+/*
+ * Functions.
+ */
+XMLPUBFUN xmlXPathContextPtr XMLCALL	
+		    xmlXPtrNewContext		(xmlDocPtr doc,
+						 xmlNodePtr here,
+						 xmlNodePtr origin);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL	
+		    xmlXPtrEval			(const xmlChar *str,
+						 xmlXPathContextPtr ctx);
+XMLPUBFUN void XMLCALL					    
+		    xmlXPtrRangeToFunction	(xmlXPathParserContextPtr ctxt,
+       						 int nargs);
+XMLPUBFUN xmlNodePtr XMLCALL		
+		    xmlXPtrBuildNodeList	(xmlXPathObjectPtr obj);
+XMLPUBFUN void XMLCALL		
+		    xmlXPtrEvalRangePredicate	(xmlXPathParserContextPtr ctxt);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBXML_XPTR_ENABLED */
+#endif /* __XML_XPTR_H__ */
diff --git a/interfaces/insdc/insdc.h b/interfaces/insdc/insdc.h
index 9c1107c..33e6e94 100644
--- a/interfaces/insdc/insdc.h
+++ b/interfaces/insdc/insdc.h
@@ -235,6 +235,41 @@ typedef INSDC_coord_val INSDC_coord_one;
 typedef INSDC_coord_zero INSDC_position_zero;
 typedef INSDC_coord_one INSDC_position_one;
 
+
+/*--------------------------------------------------------------------------
+ * read description
+ *  type and filter constants
+ */
+
+
+/* read type
+ *  describes the type of read within a spot
+ *  the extended version also describes its orientation
+ */
+typedef uint8_t INSDC_read_type;
+enum
+{
+    /* read_type */
+    READ_TYPE_TECHNICAL  = 0,
+    READ_TYPE_BIOLOGICAL = 1,
+
+    /* orientation - applied as bits, e.g.:
+       type = READ_TYPE_BIOLOGICAL | READ_TYPE_REVERSE */
+    READ_TYPE_FORWARD = 2,
+    READ_TYPE_REVERSE = 4
+};
+
+/* read filter
+ */
+typedef uint8_t INSDC_read_filter;
+enum
+{
+    READ_FILTER_PASS = 0,
+    READ_FILTER_REJECT = 1,
+    READ_FILTER_CRITERIA = 2,
+    READ_FILTER_REDACTED = 3
+};
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/interfaces/insdc/sra.h b/interfaces/insdc/sra.h
index df4e00f..85a94f7 100644
--- a/interfaces/insdc/sra.h
+++ b/interfaces/insdc/sra.h
@@ -27,8 +27,8 @@
 #ifndef _h_insdc_sra_
 #define _h_insdc_sra_
 
-#ifndef _h_klib_defs_
-#include <klib/defs.h>
+#ifndef _h_insdc_insdc_
+#include <insdc/insdc.h>
 #endif
 
 #ifdef __cplusplus
@@ -56,13 +56,13 @@ typedef uint64_t INSDC_SRA_spot_ids_found [ 4 ];
 /* read filter
  */
 #define sra_read_filter_t "INSDC:SRA:read_filter"
-typedef uint8_t INSDC_SRA_read_filter;
+typedef INSDC_read_filter INSDC_SRA_read_filter;
 enum
 {
-    SRA_READ_FILTER_PASS = 0,
-    SRA_READ_FILTER_REJECT = 1,
-    SRA_READ_FILTER_CRITERIA = 2,
-    SRA_READ_FILTER_REDACTED = 3
+    SRA_READ_FILTER_PASS = READ_FILTER_PASS,
+    SRA_READ_FILTER_REJECT = READ_FILTER_REJECT,
+    SRA_READ_FILTER_CRITERIA = READ_FILTER_CRITERIA,
+    SRA_READ_FILTER_REDACTED = READ_FILTER_REDACTED
 };
 
 
@@ -71,18 +71,18 @@ enum
  *  the extended version also describes its orientation
  */
 #define sra_read_type_t "INSDC:SRA:xread_type"
-typedef uint8_t INSDC_SRA_xread_type;
+typedef INSDC_read_type INSDC_SRA_xread_type;
 typedef INSDC_SRA_xread_type INSDC_SRA_read_type;
 enum
 {
     /* read_type and xread_type */
-    SRA_READ_TYPE_TECHNICAL  = 0,
-    SRA_READ_TYPE_BIOLOGICAL = 1,
+    SRA_READ_TYPE_TECHNICAL  = READ_TYPE_TECHNICAL,
+    SRA_READ_TYPE_BIOLOGICAL = READ_TYPE_BIOLOGICAL,
 
     /* xread_type only - applied as bits, e.g.:
        type = SRA_READ_TYPE_BIOLOGICAL | SRA_READ_TYPE_REVERSE */
-    SRA_READ_TYPE_FORWARD = 2,
-    SRA_READ_TYPE_REVERSE = 4
+    SRA_READ_TYPE_FORWARD = READ_TYPE_FORWARD,
+    SRA_READ_TYPE_REVERSE = READ_TYPE_REVERSE
 };
 
 
@@ -99,7 +99,8 @@ enum
     SRA_PLATFORM_COMPLETE_GENOMICS = 4,
     SRA_PLATFORM_HELICOS           = 5,
     SRA_PLATFORM_PACBIO_SMRT       = 6,
-    SRA_PLATFORM_ION_TORRENT       = 7
+    SRA_PLATFORM_ION_TORRENT       = 7,
+    SRA_PLATFORM_SANGER            = 8
 };
 
 #ifdef __cplusplus
diff --git a/interfaces/insdc/sra.vschema b/interfaces/insdc/sra.vschema
index ed196e5..e5dc2f6 100644
--- a/interfaces/insdc/sra.vschema
+++ b/interfaces/insdc/sra.vschema
@@ -374,6 +374,7 @@ const INSDC:SRA:platform_id SRA_PLATFORM_COMPLETE_GENOMICS = 4;
 const INSDC:SRA:platform_id SRA_PLATFORM_HELICOS           = 5;
 const INSDC:SRA:platform_id SRA_PLATFORM_PACBIO_SMRT       = 6;
 const INSDC:SRA:platform_id SRA_PLATFORM_ION_TORRENT       = 7;
+const INSDC:SRA:platform_id SRA_PLATFORM_SANGER            = 8;
 
 table INSDC:SRA:tbl:sra #1.0.3 =
     INSDC:tbl:sequence #1.0.1, INSDC:SRA:tbl:spotname #1.0.1,
diff --git a/interfaces/kapp/args.h b/interfaces/kapp/args.h
index 949ba72..e19a394 100644
--- a/interfaces/kapp/args.h
+++ b/interfaces/kapp/args.h
@@ -35,6 +35,10 @@
 extern "C" {
 #endif
 
+/* this define is while adding the --option-file to standard options
+ * and it might not be right yet */
+#define USE_OPTFILE    1
+
 /*
  * Terminology for this module:
  *
@@ -76,13 +80,24 @@ extern OptDef StandardOptions [];
 #define OPTION_HELP      "help"
 #define OPTION_VERSION   "version"
 #define OPTION_VERBOSE   "verbose"
-
+#define OPTION_QUIET     "quiet"
+#if USE_OPTFILE
+#define OPTION_OPTFILE   "option-file"
+#endif
+#define OPTION_NO_USER_SETTINGS "no-user-settings"
 #define ALIAS_DEBUG     "+"
 #define ALIAS_LOG_LEVEL "L"
 #define ALIAS_HELP      "h?"
 #define ALIAS_HELP1     "h"
 #define ALIAS_VERSION   "V"
 #define ALIAS_VERBOSE   "v"
+#define ALIAS_QUIET     "q"
+#if USE_OPTFILE
+#define ALIAS_OPTFILE   ""
+#endif
+
+#define OPTION_REPORT   "ncbi_error_report"
+#define ALIAS_REPORT    ""
 
 /*--------------------------------------------------------------------------
  * Args
@@ -103,6 +118,9 @@ rc_t CC ArgsMake ( Args ** pself );
  */
 rc_t CC ArgsWhack ( Args * self );
 
+#ifndef ArgsRelease
+#define ArgsRelease(self) ArgsWhack(self)
+#endif
 
 /* AddOptionArray
  *  helper function to call the ArgsAddOption() multiple times
@@ -127,6 +145,35 @@ rc_t CC ArgsAddStandardOptions ( Args * self );
 rc_t CC ArgsParse ( Args * self, int argc, char *argv[] );
 
 
+/* tokenizes a file into an user supplied argv array ( not the one from main() ! )
+ * the result can be passed into ArgsParse(), enables commandline-options from a file
+ *  caller has to free the created array via Args_free_token_argv()
+ */
+rc_t CC Args_tokenize_file_into_argv( const char * filename, int * argc, char *** argv );
+
+rc_t CC Args_tokenize_file_and_progname_into_argv( const char * filename, const char * progname,
+                                                   int * argc, char *** argv );
+
+/* free's the array that was created by calling Args_tokenize_file_into_argv()
+ */
+void CC Args_free_token_argv( int argc, char * argv[] );
+
+
+/* looks in args for file_option(s), if found loades the files, parses them
+   if this results in more files to be parsed ( kind of includes ),
+   the parsing continues recursivly
+ */
+rc_t CC Args_parse_inf_file( Args * args, const char * file_option );
+
+
+/* looks in the unparsed original argv for the value of an option
+   >>> this is a hack to enable special treatment for tools that do not use
+       the standard args-parsing <<<
+ */
+rc_t CC Args_find_option_in_argv( int argc, char * argv[],
+                                  const char * option_name,
+                                  char * option, size_t option_len );
+
 /* OptionCount
  *  how many times did this Option occur?
  */
@@ -188,6 +235,7 @@ rc_t CC ArgsMakeStandardOptions (Args** pself);
 
 rc_t CC ArgsHandleHelp (Args * self);
 rc_t CC ArgsHandleVersion (Args * self);
+rc_t CC ArgsHandleOptfile (Args * self);
 
 /*
  * ArgsHandleLogLevel
@@ -212,6 +260,10 @@ rc_t CC ArgsOptionSingleString (const Args * self, const char * option, const ch
 rc_t CC ArgsProgram (const Args * args, const char ** fullpath, const char ** progname);
 
 
+/* after arguments are parsed; check to see if any required arguments are missing */
+rc_t CC ArgsCheckRequired (Args * args);
+
+
 /*
  * Help Interface:
  * This interface is an extention os the Args Interface that is used for
diff --git a/interfaces/kapp/loader-file.h b/interfaces/kapp/loader-file.h
index d067a77..e4c0de8 100644
--- a/interfaces/kapp/loader-file.h
+++ b/interfaces/kapp/loader-file.h
@@ -36,6 +36,8 @@
 
 #include <stdarg.h>
 
+#include <klib/log.h>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -47,7 +49,13 @@ struct KDirectory;
 */
 typedef struct KLoaderFile KLoaderFile;
 
-KAPP_EXTERN rc_t CC KLoaderFile_Make(const KLoaderFile **file, struct KDirectory const* dir, const char* filename, const uint8_t* md5_digest);
+/*
+    md5_digest - not null forces MD5 verification for the file content
+    read_ahead - force reading of the file in a diff thread, ahead of time,
+                 usefull on compressed file, speeds up MD5 verify too
+*/
+KAPP_EXTERN rc_t CC KLoaderFile_Make(const KLoaderFile **file, struct KDirectory const* dir, const char* filename,
+                                     const uint8_t* md5_digest, bool read_ahead);
 
 KAPP_EXTERN rc_t CC KLoaderFile_Release(const KLoaderFile* cself, bool exclude_from_progress);
 
@@ -57,6 +65,8 @@ KAPP_EXTERN rc_t CC KLoaderFile_Close(const KLoaderFile* cself);
 /* restart reading from beginning of the file */
 KAPP_EXTERN rc_t CC KLoaderFile_Reset(const KLoaderFile* cself);
 
+KAPP_EXTERN rc_t CC KLoaderFile_SetReadAhead(const KLoaderFile* cself, bool read_ahead);
+
 /* print error msg file file info and return original!! rc
    if msg is NULL fmt is not used so call with NULL, NULL if no msg needs to be printed */
 KAPP_EXTERN rc_t CC KLoaderFile_LOG(const KLoaderFile* cself, KLogLevel lvl, rc_t rc, const char *msg, const char *fmt, ...);
@@ -74,9 +84,12 @@ KAPP_EXTERN rc_t CC KLoaderFile_Line(const KLoaderFile* cself, uint64_t* line);
 /* file name */
 KAPP_EXTERN rc_t CC KLoaderFile_Name(const KLoaderFile *self, const char **name);
 
-/* file name completly resolved */
+/* real file name */
 KAPP_EXTERN rc_t CC KLoaderFile_FullName(const KLoaderFile *self, const char **name);
 
+/* file name completly resolved */
+KAPP_EXTERN rc_t CC KLoaderFile_ResolveName(const KLoaderFile *self, char *resolved, size_t rsize);
+
 /* Readline
  *  makes next line from a file available in buffer.
  *  eligable EOL symbols are: \n (unix), \r (older mac), \r\n (win)
diff --git a/interfaces/kapp/loader-meta.h b/interfaces/kapp/loader-meta.h
index 6976d2d..28a711a 100644
--- a/interfaces/kapp/loader-meta.h
+++ b/interfaces/kapp/loader-meta.h
@@ -40,7 +40,7 @@ extern "C" {
 
 struct KMDataNode;
 
-KAPP_EXTERN rc_t CC KLoaderMeta_Write(KMDataNode* root,
+KAPP_EXTERN rc_t CC KLoaderMeta_Write(struct KMDataNode* root,
                                       const char* argv0, const char* argv0_date,
                                       const char* app_name, ver_t app_version);
 
diff --git a/interfaces/kapp/log-xml.h b/interfaces/kapp/log-xml.h
index 4f7b77b..9517fb8 100644
--- a/interfaces/kapp/log-xml.h
+++ b/interfaces/kapp/log-xml.h
@@ -38,6 +38,8 @@
 extern "C" {
 #endif
 
+struct KDirectory;
+
 KAPP_EXTERN_DATA const OptDef XMLLogger_Args [];
 KAPP_EXTERN_DATA const size_t XMLLogger_ArgsQty;
 
@@ -46,7 +48,8 @@ typedef struct XMLLogger XMLLogger;
 /*
   Creates XML logging based on dir and command line
  */
-KAPP_EXTERN rc_t CC XMLLogger_Make(const XMLLogger** cself, KDirectory* dir, const Args *args);
+KAPP_EXTERN rc_t CC XMLLogger_Make(const XMLLogger** cself,
+    struct KDirectory* dir, const Args *args);
 
 /*
   Creates XML logging based on dir, logpath pair or fd directly
@@ -57,12 +60,15 @@ KAPP_EXTERN rc_t CC XMLLogger_Make(const XMLLogger** cself, KDirectory* dir, con
 
   if both logpath == NULL and fd < 0 than no XML log is produced normal log gets full inforamtion
  */
-KAPP_EXTERN rc_t CC XMLLogger_Make2(const XMLLogger** cself, KDirectory* dir, const char* logpath, const int fd);
+KAPP_EXTERN rc_t CC XMLLogger_Make2(const XMLLogger** cself,
+    struct KDirectory* dir, const char* logpath, const int fd);
 
 KAPP_EXTERN void CC XMLLogger_Usage(void);
 
 KAPP_EXTERN void CC XMLLogger_Release(const XMLLogger* cself);
 
+KAPP_EXTERN rc_t CC XMLLogger_Encode(const char* src, char *dst, size_t dst_sz, size_t *num_writ);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/interfaces/kapp/queue-file.h b/interfaces/kapp/queue-file.h
new file mode 100644
index 0000000..79fa890
--- /dev/null
+++ b/interfaces/kapp/queue-file.h
@@ -0,0 +1,149 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_kapp_queue_file_
+#define _h_kapp_queue_file_
+
+#ifndef _h_kapp_extern_
+#include <kapp/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * KQueueFile
+ *  an extension to KFile that runs on a background thread
+ */
+struct KFile;
+
+
+/* MakeRead
+ *  make a queue file for reading-ahead on background thread
+ *
+ *  when the file is created, a background thread is started
+ *  that begins reading from "src" at position "pos", into
+ *  buffers of size "buffer_size". each buffer is pushed into
+ *  a cross-thread queue where it is consumed by the reading
+ *  thread.
+ *
+ *  the background thread is throttled by queue capacity - determined
+ *  by "queue_bytes" and "block_size", such that if the queue is full,
+ *  the thread will sleep. the consumer thread is also throttled by the
+ *  queue in that it will sleep if the queue is empty with pending data.
+ *
+ *  the background thread will exit upon reaching end of file,
+ *  upon a permanent error, or if the queue is sealed by the consumer
+ *  thread.
+ *
+ *  when the file is collected in response to a release message,
+ *  the queue will be sealed against further inserts, pending buffers
+ *  will be discarded, the background thread will be joined, and
+ *  the source file will be released.
+ *
+ *  the intended usage is serial reading of the file. reads
+ *  may only progress forward, i.e. backing up is not permitted.
+ *
+ *  "qf" [ OUT ] - return parameter for queue file
+ *
+ *  "pos" [ IN ] - starting position for reads from "src".
+ *  NB - "src" must support being addressed at this position.
+ *
+ *  "src" [ IN ] - source file for read-ahead on background thread.
+ *  must have read permissions.
+ *
+ *  "queue_bytes" [ IN ] - the read-ahead limit of the background
+ *  thread, in bytes. this is the amount of data that will be queued
+ *  for the consumer thread before the bg thread sleeps.
+ *
+ *  "block_size" [ IN, DEFAULT ZERO ] - optional parameter giving
+ *  desired block size when reading from "src". this may be used
+ *  to tune reading for source data, e.g. 64K blocks for gzip.
+ *
+ *  "timeout_ms" [ IN, DEFAULT ZERO ] - optional parameter specifying the period of time (in ms)
+ *  at which the background thread will check whether it is to quit (e.g. the foregrount thread has sealed the buffer),
+ *  when the queue cannot be written into.  If 0 specified, the timeout is set to 150 ms.
+ */
+KAPP_EXTERN rc_t CC KQueueFileMakeRead ( struct KFile const **qf, uint64_t pos,
+    struct KFile const *src, size_t queue_bytes, size_t block_size, uint32_t timeout_ms );
+
+
+/* MakeWrite
+ *  make a queue file for writing-behind on background thread
+ *
+ *  when the file is created, a background thread is started that
+ *  waits for buffers to appear in the cross-thread queue. as the producer
+ *  thread writes, data are accumulated into buffers which are pushed
+ *  into the queue as they fill, and written in turn on the bg thread.
+ *
+ *  the producer thread is throttled by queue capacity - determined by
+ *  "queue_bytes" and "block_size", such that if the queue is full,
+ *  the thread will sleep. the background thread is also throttled by
+ *  the queue in that it will sleep if the queue is empty with pending
+ *  data.
+ *
+ *  the background thread will exit upon a permanent error, or if the
+ *  queue is sealed by the producer thread.
+ *
+ *  when the file is collected in response to a release message,
+ *  the queue will be sealed against further inserts, pending buffers
+ *  will be written, the background thread will be joined, and
+ *  the source file will be released.
+ *
+ *  the intended usage is serial writing of the file. random writes
+ *  will be accepted, but may reduce the queue efficiency.
+ *
+ *  "qf" [ OUT ] - return parameter for queue file
+ *
+ *  "dst" [ IN ] - destination file for write-behind on background thread.
+ *  must have write permissions.
+ *
+ *  "queue_bytes" [ IN ] - the write-behind limit of the producer
+ *  thread, in bytes. this is the amount of data that will be queued
+ *  for the background thread before the producer thread sleeps.
+ *
+ *  "block_size" [ IN, DEFAULT ZERO ] - optional parameter giving
+ *  desired block size when writing to "dst". this may be used
+ *  to tune writing for source data, e.g. 64K blocks for gzip.
+ *
+ *  "timeout_ms" [ IN, DEFAULT ZERO ] - optional parameter specifying the period of time (in ms)
+ *  at which the background thread will check whether it is to quit (e.g. the foregrount thread has sealed the buffer),
+ *  when the queue cannot be read from.  If 0 specified, the timeout is set to 150 ms.
+ */
+KAPP_EXTERN rc_t CC KQueueFileMakeWrite ( struct KFile **qf,
+    struct KFile *dst, size_t queue_bytes, size_t block_size, uint32_t timeout_ms );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kapp_queue_file_ */
diff --git a/interfaces/kdb/btree.h b/interfaces/kdb/btree.h
index 83d46f2..0f6e85d 100644
--- a/interfaces/kdb/btree.h
+++ b/interfaces/kdb/btree.h
@@ -58,6 +58,7 @@ extern "C" {
  * forwards
  */
 struct KFile;
+struct KDataBuffer;
 
 
 /*--------------------------------------------------------------------------
@@ -130,6 +131,7 @@ enum
     kbtFloatKey,                /* key is a float                   */
     kbtDoubleKey,               /* key is a double                  */
 #endif
+    kbtPacked2naKey,            /* key is in packed 2na             */
     kbtLastDefined
 };
 
@@ -161,6 +163,8 @@ enum
  *   opaque key sizes. min == max implies fixed size. ignored for well
  *   known fixed size key types.
  *
+ *  "id_size" [ IN ] - size of id in bytes, from 1 to 8.
+ *
  *  "min_value_size" [ IN ] and "max_value_size" [ IN ] - specifies the allowed
  *   value sizes. min == max implies fixed size.
  *
@@ -173,7 +177,7 @@ KDB_EXTERN rc_t CC KBTreeMakeRead ( const KBTree **bt,
 #if BTREE_KEY2ID
 KDB_EXTERN rc_t CC KBTreeMakeUpdate ( KBTree **bt, struct KFile *backing,
     size_t climit, bool write_through, KBTreeKeyType type,
-    size_t min_key_size, size_t max_key_size,
+    size_t min_key_size, size_t max_key_size, size_t id_size,
     KBTreeCompareFunc cmp );
 #else
 KDB_EXTERN rc_t CC KBTreeMakeUpdate ( KBTree **bt, struct KFile *backing,
@@ -225,7 +229,7 @@ KDB_EXTERN rc_t CC KBTreeSize ( const KBTree *self,
  *   opaque key
  */
 #if BTREE_KEY2ID
-KDB_EXTERN rc_t CC KBTreeFind ( const KBTree *self, uint32_t *id,
+KDB_EXTERN rc_t CC KBTreeFind ( const KBTree *self, uint64_t *id,
     const void *key, size_t key_size );
 #else
 KDB_EXTERN rc_t CC KBTreeFind ( const KBTree *self, KBTreeValue *val,
@@ -233,6 +237,89 @@ KDB_EXTERN rc_t CC KBTreeFind ( const KBTree *self, KBTreeValue *val,
 #endif
 
 
+/* FindOne
+ *  searches for a match
+ *  where "match" is defined as an exact match
+ *  of the shorter ( key, entry ) against the
+ *  corresponding prefix of the longer.
+ *
+ *  "id" [ OUT ] - return id of matching entry if found
+ *
+ *  "key" [ IN ] and "key_size" [ IN ] - describes an
+ *   opaque key
+ *
+ *  "match_type" [ IN ] - choose search algorithm
+ *
+ *  "remainder" [ OUT ] - returns the number of bytes
+ *  left unmatched by comparison between the key and entry.
+ *  values:
+ *    = 0    - exact match
+ *    < 0    - key is shorter than entry
+ *    > 0    - key is longer than entry
+ */
+#if BTREE_KEY2ID && 1
+typedef uint32_t KBTreeMatchType;
+enum
+{
+    kbtMatchFirst = 1,       /* choose first matching entry       */
+    kbtMatchRandom           /* choose a matching entry at random */
+};
+
+typedef struct KBTreeMatchResult KBTreeMatchResult;
+struct KBTreeMatchResult
+{
+    uint64_t id;
+    int64_t remainder;
+};
+
+KDB_EXTERN rc_t CC KBTreeFindOne ( const KBTree *self,
+    KBTreeMatchResult *found, KBTreeMatchType match_type,
+    const void *key, size_t key_size );
+#endif
+
+
+/* FindAll
+ *  searches for all matches
+ *  where "match" is defined as an exact match
+ *  of the shorter ( key, entry ) against the
+ *  corresponding prefix of the longer.
+ *
+ *  "ids" [ IN/OUT ] - array of uint64_t gets dynamically
+ *  resized based upon the number of matches
+ *
+ *  "key" [ IN ] and "key_size" [ IN ] - describes an
+ *   opaque key
+ *
+ *  "remainder" [ OUT ] - returns the number of bytes
+ *  left unmatched by comparison between the key and entry.
+ *  values:
+ *    = 0    - exact match
+ *    < 0    - key is shorter than entry
+ *    > 0    - key is longer than entry
+ */
+#if BTREE_KEY2ID && 1
+KDB_EXTERN rc_t CC KBTreeFindAll ( const KBTree *self,
+    struct KDataBuffer *found_set,
+    const void *key, size_t key_size );
+#endif
+
+
+/* FindCustom
+ *  searches for a match using a custom function
+ *
+ *  "val" [ OUT ] - return parameter for value found
+ *   accessed via KBTreeValueAccess* described above
+ *   must be balanced with a call to KBTreeValueWhack.
+ *
+ *  "key" [ IN ] and "key_size" [ IN ] - describes an
+ *   opaque key
+ */
+#if BTREE_KEY2ID && 0
+KDB_EXTERN rc_t CC KBTreeFindCustom ( const KBTree *self, uint64_t *id,
+    const void *key, size_t key_size, KBTreeCompareFunc custom_cmp );
+#endif
+
+
 /* Entry
  *  searches for a match or creates a new entry
  *
@@ -252,7 +339,7 @@ KDB_EXTERN rc_t CC KBTreeFind ( const KBTree *self, KBTreeValue *val,
  *   opaque key
  */
 #if BTREE_KEY2ID
-KDB_EXTERN rc_t CC KBTreeEntry ( KBTree *self, uint32_t *id,
+KDB_EXTERN rc_t CC KBTreeEntry ( KBTree *self, uint64_t *id,
     bool *was_inserted, const void *key, size_t key_size );
 #else
 KDB_EXTERN rc_t CC KBTreeEntry ( KBTree *self, KBTreeValue *val,
@@ -270,7 +357,7 @@ KDB_EXTERN rc_t CC KBTreeEntry ( KBTree *self, KBTreeValue *val,
  */
 #if BTREE_KEY2ID
 KDB_EXTERN rc_t CC KBTreeForEach ( const KBTree *self, bool reverse,
-    void ( CC * f ) ( const void *key, size_t key_size, uint32_t id, void *data ), void *data );
+    void ( CC * f ) ( const void *key, size_t key_size, uint64_t id, void *data ), void *data );
 #else
 KDB_EXTERN rc_t CC KBTreeForEach ( const KBTree *self, bool reverse,
     void ( CC * f ) ( const void *key, size_t key_size, KBTreeValue *val, void *data ), void *data );
diff --git a/interfaces/kdb/consistency-check.h b/interfaces/kdb/consistency-check.h
index d4a607d..18444e4 100644
--- a/interfaces/kdb/consistency-check.h
+++ b/interfaces/kdb/consistency-check.h
@@ -31,6 +31,10 @@
 #include <kdb/extern.h>
 #endif
 
+#ifndef _h_insdc_sra_
+#include <insdc/sra.h>
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -51,7 +55,8 @@ enum
     ccrpt_Done,
     ccrpt_MD5,
     ccrpt_Blob,
-    ccrpt_Index
+    ccrpt_Index,
+    ccrpt_Visit
 };
 
 
@@ -72,14 +77,12 @@ struct CCReportInfoBlock
         {
             const char *mesg;
             rc_t rc;
-
         } done;
 
         struct ccrb_md5_s
         {
             const char *file;
             rc_t rc;
-
         } MD5;
 
         struct ccrb_blob_s
@@ -98,25 +101,31 @@ struct CCReportInfoBlock
             uint64_t num_holes;
 
         } index;
-
+        
+        struct ccrb_visit_s {
+            unsigned depth;
+        } visit;
     } info;
 };
 
 typedef rc_t ( CC *CCReportFunc ) ( const CCReportInfoBlock *info, void *data );
 
+/* a flag for level parameter */
+#define CC_INDEX_ONLY 0x80000000
 
 /*--------------------------------------------------------------------------
  * KDatabase
  */
 KDB_EXTERN rc_t CC KDatabaseConsistencyCheck ( struct KDatabase const *self,
-    uint32_t level, CCReportFunc report, void *data );
+    uint32_t depth, uint32_t level, CCReportFunc report, void *data );
 
 
 /*--------------------------------------------------------------------------
  * KTable
  */
 KDB_EXTERN rc_t CC KTableConsistencyCheck ( struct KTable const *self,
-    uint32_t level, CCReportFunc report, void *data );
+    uint32_t depth, uint32_t level, CCReportFunc report, void *data,
+    INSDC_SRA_platform_id platform);
 
 
 /*--------------------------------------------------------------------------
diff --git a/interfaces/kdb/database.h b/interfaces/kdb/database.h
index 20cbee8..af65ebb 100644
--- a/interfaces/kdb/database.h
+++ b/interfaces/kdb/database.h
@@ -134,15 +134,29 @@ KDB_EXTERN bool CC KDatabaseLocked ( const KDatabase *self );
  *  returns true if requested object exists
  *
  *  "type" [ IN ] - a KDBPathType
- *  valid values are kptIndex and kptColumn
+ *  valid values are kptDatabase, kptTable and kptIndex
  *
- *  "path" [ IN ] - NUL terminated path
+ *  "name" [ IN ] - NUL terminated object name
  */
 KDB_EXTERN bool CC KDatabaseExists ( const KDatabase *self, uint32_t type,
     const char *name, ... );
 KDB_EXTERN bool CC KDatabaseVExists ( const KDatabase *self, uint32_t type,
     const char *name, va_list args );
 
+/* IsAlias
+ *  returns true if object name is an alias
+ *  returns path to fundamental name if it was aliased
+ *
+ *  "type" [ IN ] - a KDBPathType
+ *  valid values are kptDatabase, kptTable and kptIndex
+ *
+ *  "resolved" [ OUT ] and "rsize" [ IN ] - optional output buffer
+ *  for fundamenta object name if "alias" is not a fundamental name, 
+ *
+ *  "name" [ IN ] - NUL terminated object name
+ */
+KDB_EXTERN bool CC KDatabaseIsAlias ( const KDatabase *self, uint32_t type,
+    char *resolved, size_t rsize, const char *name );
 
 /* Writable
  *  returns 0 if object is writable
diff --git a/interfaces/kdb/kdb-priv.h b/interfaces/kdb/kdb-priv.h
index 5fb4724..280f0de 100644
--- a/interfaces/kdb/kdb-priv.h
+++ b/interfaces/kdb/kdb-priv.h
@@ -76,6 +76,12 @@ KDB_EXTERN rc_t CC KDBManagerVGetTableModDate ( struct KDBManager const *self,
 KDB_EXTERN rc_t CC KDatabaseOpenDirectoryRead ( struct KDatabase const *self, struct KDirectory const **dir );
 KDB_EXTERN rc_t CC KDatabaseOpenDirectoryUpdate ( struct KDatabase *self, struct KDirectory **dir );
 
+/* GetPath
+ *  return the absolute path to DB
+ */
+KDB_EXTERN rc_t CC KDatabaseGetPath ( struct KDatabase const *self,
+    const char **path );
+
 
 /*--------------------------------------------------------------------------
  * KTable
@@ -90,6 +96,12 @@ KDB_EXTERN rc_t CC KTableOpenDirectoryUpdate ( struct KTable *self, struct KDire
 #define KTableGetDirectoryRead KTableOpenDirectoryRead
 #define KTableGetDirectoryUpdate KTableOpenDirectoryUpdate
 
+/* GetPath
+ *  return the absolute path to table
+ */
+KDB_EXTERN rc_t CC KTableGetPath ( struct KTable const *self,
+    const char **path );
+
 
 /*--------------------------------------------------------------------------
  * KColumn
diff --git a/interfaces/kdb/manager.h b/interfaces/kdb/manager.h
index 31c5577..48576a3 100644
--- a/interfaces/kdb/manager.h
+++ b/interfaces/kdb/manager.h
@@ -31,29 +31,37 @@
 #include <kdb/extern.h>
 #endif
 
-#ifndef _h_kfs_directory_
-#include <kfs/directory.h>
-#endif
+/* #ifndef _h_kfs_directory_ */
+/* #include <kfs/directory.h> */
+/* #endif */
+#include <kfs/defs.h> /* kpt types */
 
+#include <stdarg.h>
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
+struct VPath;
+struct KDirectory;
 
 /*--------------------------------------------------------------------------
  * KDBPathType
- *  extends KPathType from <kfs/directory.h>
+ *  extends KPathType from <kfs/defs.h>
  */
 enum
 {
     /* must be handled carefully and can not go back to KDirectory 
-    * as this value has a different meaning in KDirectory */
+     * as this value has a different meaning in KDirectory */
     kptAny = 0,
     kptDatabase = kptLastDefined,
     kptTable,
     kptIndex,
-    kptColumn
+    kptColumn,
+
+    /* these values may not be used in KDBManagerExists below */
+    kptMetadata,
+    kptPrereleaseTbl
 };
 
 
@@ -81,8 +89,8 @@ KDB_EXTERN rc_t CC KDBManagerRelease ( const KDBManager *self );
  *  "wd" [ IN, NULL OKAY ] - optional working directory for
  *  accessing the file system. mgr will attach its own reference.
  */
-KDB_EXTERN rc_t CC KDBManagerMakeRead ( const KDBManager **mgr, const KDirectory *wd );
-KDB_EXTERN rc_t CC KDBManagerMakeUpdate ( KDBManager **mgr, KDirectory *wd );
+KDB_EXTERN rc_t CC KDBManagerMakeRead ( const KDBManager **mgr, const struct KDirectory *wd );
+KDB_EXTERN rc_t CC KDBManagerMakeUpdate ( KDBManager **mgr, struct KDirectory *wd );
 
 
 /* Version
@@ -97,6 +105,9 @@ KDB_EXTERN rc_t CC KDBManagerVersion ( const KDBManager *self, uint32_t *version
  *  "type" [ IN ] - a KDBPathType
  *
  *  "path" [ IN ] - NUL terminated path
+ *
+ * DEPRECATED:
+ * Should use KDBManagerPathType for reduced network thrashing.
  */
 KDB_EXTERN bool CC KDBManagerExists ( const KDBManager *self, uint32_t type,
     const char *name, ... );
@@ -154,13 +165,14 @@ KDB_EXTERN rc_t CC KDBManagerRunPeriodicTasks ( const KDBManager *self );
 
 
 /* PathType
- * check the path type of an object/directory path.
- * this is an extension of the KDirectoryPathType and will return
- * the KDirectory values if a path type is not specifically a
- * kdb object
+ *  check the path type of an object/directory path.
+ *  this is an extension of the KDirectoryPathType and will return
+ *  the KDirectory values if a path type is not specifically a
+ *  kdb object
  */
-KDB_EXTERN int CC KDBManagerPathType ( const KDBManager * self, const char *path, ... );
-KDB_EXTERN int CC KDBManagerVPathType ( const KDBManager * self, const char *path, va_list args );
+KDB_EXTERN int CC KDBManagerPathTypeVP ( const KDBManager * self, const struct VPath * path );
+KDB_EXTERN int CC KDBManagerPathType   ( const KDBManager * self, const char *path, ... );
+KDB_EXTERN int CC KDBManagerVPathType  ( const KDBManager * self, const char *path, va_list args );
 
 
 #ifdef __cplusplus
diff --git a/interfaces/kdb/namelist.h b/interfaces/kdb/namelist.h
index 773d7df..68233f4 100644
--- a/interfaces/kdb/namelist.h
+++ b/interfaces/kdb/namelist.h
@@ -70,7 +70,8 @@ KDB_EXTERN rc_t CC KTableListIdx ( struct KTable const *self, struct KNamelist *
  *  create metadata node listings
  */
 KDB_EXTERN rc_t CC KMDataNodeListAttr ( struct KMDataNode const *self, struct KNamelist **names );
-KDB_EXTERN rc_t CC KMDataNodeListChild ( struct KMDataNode const *self, struct KNamelist **names );
+KDB_EXTERN rc_t CC KMDataNodeListChildren ( struct KMDataNode const *self, struct KNamelist **names );
+#define KMDataNodeListChild KMDataNodeListChildren
 
 
 #ifdef __cplusplus
diff --git a/interfaces/kdb/table.h b/interfaces/kdb/table.h
index a506938..2d1a819 100644
--- a/interfaces/kdb/table.h
+++ b/interfaces/kdb/table.h
@@ -143,6 +143,20 @@ KDB_EXTERN bool CC KTableExists ( const KTable *self, uint32_t type,
 KDB_EXTERN bool CC KTableVExists ( const KTable *self, uint32_t type,
     const char *name, va_list args );
 
+/* IsAlias
+ *  returns true if object name is an alias
+ *  returns path to fundamental name if it was aliased
+ *
+ *  "type" [ IN ] - a KDBPathType
+ *  valid values are kptIndex and kptColumn
+ *
+ *  "resolved" [ OUT ] and "rsize" [ IN ] - optional output buffer
+ *  for fundamenta object name if "alias" is not a fundamental name, 
+ *
+ *  "name" [ IN ] - NUL terminated object name
+ */
+KDB_EXTERN bool CC KTableIsAlias ( const KTable *self, uint32_t type,
+    char *resolved, size_t rsize, const char *name );
 
 /* Writable
  *  returns 0 if object is writable
diff --git a/interfaces/kfg/config.h b/interfaces/kfg/config.h
index c61ab4c..f58eb61 100644
--- a/interfaces/kfg/config.h
+++ b/interfaces/kfg/config.h
@@ -54,12 +54,20 @@ extern "C" {
 
 
 /*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KFile;
+struct KDirectory;
+struct KNamelist;
+struct VPath;
+struct String;
+
+/*--------------------------------------------------------------------------
  * KConfig
  *  configuration paramter manager
  */
 typedef struct KConfig KConfig;
 
-struct KDirectory;
 
 /* Make
  *  create a process-global configuration manager
@@ -71,7 +79,6 @@ struct KDirectory;
 KFG_EXTERN rc_t CC KConfigMake ( KConfig **cfg,
     struct KDirectory const * optional_search_base );
 
-
 /* AddRef
  * Release
  */
@@ -82,11 +89,103 @@ KFG_EXTERN rc_t CC KConfigRelease ( const KConfig *self );
 /* LoadFile
  * loads a configuration file
  */
-struct KFile;
 KFG_EXTERN rc_t CC KConfigLoadFile ( KConfig * self,
     const char * path, struct KFile const * file );
 
 
+/* Commit
+ *  commits changes to user's private configuration file
+ */
+KFG_EXTERN rc_t CC KConfigCommit ( KConfig *self );
+
+/* ReadBool
+ *  read a boolean node value
+ *
+ * self [ IN ] - KConfig object
+ * path [ IN ] - path to the node
+ * result [ OUT ] - return value (true if "TRUE", false if "FALSE"; rc != 0 if neither)
+ *
+ */
+KFG_EXTERN rc_t CC KConfigReadBool ( const KConfig* self, const char* path, bool* result );
+    
+/* ReadI64
+ *  read an integer node value
+ *
+ * self [ IN ] - KConfig object
+ * path [ IN ] - path to the node
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+KFG_EXTERN rc_t CC KConfigReadI64 ( const KConfig* self, const char* path, int64_t* result );
+
+/* ReadU64
+ *  read an unsigned node value
+ *
+ * self [ IN ] - KConfig object
+ * path [ IN ] - path to the node
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+KFG_EXTERN rc_t CC KConfigReadU64 ( const KConfig* self, const char* path, uint64_t* result );
+
+/* ReadF64
+ *  read an F64 node value
+ *
+ * self [ IN ] - KConfig object
+ * path [ IN ] - path to the node
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+KFG_EXTERN rc_t CC KConfigReadF64( const KConfig* self, const char* path, double* result );
+
+#if 0
+/*** NB - temporarily lives in vfs due to library interdependencies ***/
+
+/* ReadVPath
+ *  read a VPath node value
+ *
+ * self [ IN ] - KConfig object
+ * path [ IN ] - path to the node
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+KFG_EXTERN rc_t CC KConfigReadVPath ( const KConfig* self, const char* path, struct VPath** result );
+#endif
+
+/* ReadString
+ *  read a String node value
+ *
+ * self [ IN ] - KConfig object
+ * path [ IN ] - path to the node
+ * result [ OUT ] - return value; caller responsible for deallocation
+ *
+ */
+KFG_EXTERN rc_t CC KConfigReadString ( const KConfig* self, const char* path, struct String** result );
+
+
+/* Print
+ *  print configuration to output handler (using OUTMSG)
+ */
+KFG_EXTERN rc_t CC KConfigPrint ( const KConfig * self, int indent );
+
+
+/* ImportNgc
+ *  import ngc file into current configuration
+ *
+ * self [ IN ] - KConfig object
+ * path [ IN ] - path to the ngc file
+ * pathToProtectedRepository [ IN, NULL OKAY ] - optional - the
+ *  special value NULL is interpreted as ${HOME}/ncbi/dbGap-$(Project #)
+ */
+KFG_EXTERN rc_t CC KConfigImportNgc(KConfig *self,
+    const char *ngcPath, const char *pathToProtectedRepository);
+
+/* DisableUserSettings
+ *  for testing purposes
+ */
+KFG_EXTERN void CC KConfigDisableUserSettings ( void );
+
+
 /*--------------------------------------------------------------------------
  * KConfigNode
  *  node within configuration tree
@@ -164,12 +263,69 @@ KFG_EXTERN rc_t CC KConfigNodeRead ( const KConfigNode *self,
     size_t offset, char *buffer, size_t bsize,
     size_t *num_read, size_t *remaining );
 
+/* ReadBool
+ *  read a boolean node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (true if "TRUE", false if "FALSE"; rc != 0 if neither)
+ *
+ */
+KFG_EXTERN rc_t CC KConfigNodeReadBool ( const KConfigNode *self, bool* result );
+    
+/* ReadI64
+ *  read an integer node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+KFG_EXTERN rc_t CC KConfigNodeReadI64 ( const KConfigNode *self, int64_t* result );
 
-/* ListChild
+/* ReadU64
+ *  read an unsigned node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+KFG_EXTERN rc_t CC KConfigNodeReadU64 ( const KConfigNode *self, uint64_t* result );
+
+/* ReadF64
+ *  read an F64 node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+KFG_EXTERN rc_t CC KConfigNodeReadF64 ( const KConfigNode *self, double* result );
+
+#if 0
+/*** NB - temporarily lives in vfs due to library interdependencies ***/
+
+/* ReadVPath
+ *  read a VPath node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+KFG_EXTERN rc_t CC KConfigNodeReadVPath ( const KConfigNode *self, struct VPath** result );
+#endif
+
+/* ReadString
+ *  read a String node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value; caller responsible for deallocation
+ *
+ */
+KFG_EXTERN rc_t CC KConfigNodeReadString ( const KConfigNode *self, struct String** result );
+
+/* ListChildren - nee ListChild
  *  list all named children
  */
-struct KNamelist;
-KFG_EXTERN rc_t CC KConfigNodeListChild ( const KConfigNode *self,
+#define KConfigNodeListChild KConfigNodeListChildren
+KFG_EXTERN rc_t CC KConfigNodeListChildren ( const KConfigNode *self,
     struct KNamelist **names );
 
 
diff --git a/interfaces/kfg/kfg-priv.h b/interfaces/kfg/kfg-priv.h
index dc8f00c..59a4dcd 100644
--- a/interfaces/kfg/kfg-priv.h
+++ b/interfaces/kfg/kfg-priv.h
@@ -48,6 +48,10 @@ KFG_EXTERN rc_t CC KConfigListIncluded ( const KConfig *self,
 KFG_EXTERN rc_t CC KConfigGetLoadPath ( const KConfig *self,
     const char **path );
 
+/* call KConfigMake not initializing the static global KConfig pointer */
+KFG_EXTERN rc_t CC KConfigMakeLocal ( KConfig **cfg,
+                                     const struct KDirectory * cfgdir );
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/interfaces/kfg/repository.h b/interfaces/kfg/repository.h
new file mode 100644
index 0000000..6d90247
--- /dev/null
+++ b/interfaces/kfg/repository.h
@@ -0,0 +1,271 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kfg_repository_
+#define _h_kfg_repository_
+
+#ifndef _h_kfg_extern_
+#include <kfg/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KConfig;
+
+
+/*--------------------------------------------------------------------------
+ * KRepository
+ *  presents structured access to a storage repository
+ *  as modeled in KConfig.
+ *
+ *  all objects are obtained via KRepositoryMgr ( see below )
+ */
+typedef struct KRepository KRepository;
+
+
+/* AddRef
+ * Release
+ */
+KFG_EXTERN rc_t CC KRepositoryAddRef ( const KRepository *self );
+KFG_EXTERN rc_t CC KRepositoryRelease ( const KRepository *self );
+
+
+/* Category
+ * SubCategory
+ *  tells what the repository category or sub-category are
+ *  or returns "bad" if the repository object is not usable.
+ */
+typedef uint32_t KRepCategory;
+enum
+{
+    krepBadCategory,
+    krepUserCategory,
+    krepSiteCategory,
+    krepRemoteCategory
+};
+
+typedef uint32_t KRepSubCategory;
+enum
+{
+    krepBadSubCategory,
+    krepMainSubCategory,
+    krepAuxSubCategory,
+    krepProtectedSubCategory
+};
+
+KFG_EXTERN KRepCategory CC KRepositoryCategory ( const KRepository *self );
+KFG_EXTERN KRepSubCategory CC KRepositorySubCategory ( const KRepository *self );
+
+
+/* Name
+ *  get the repository name
+ *  attempts to copy NUL-terminated name into provided buffer
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - name output parameter
+ *
+ *  "name_size" [ OUT, NULL OKAY ] - returns the name size in
+ *  bytes, excluding any NUL termination.
+ */
+KFG_EXTERN rc_t CC KRepositoryName ( const KRepository *self,
+    char *buffer, size_t bsize, size_t *name_size );
+
+
+/* DisplayName
+ *  get the repository display name,
+ *  if different from its actual name
+ *
+ *  attempts to copy NUL-terminated name into provided buffer
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - name output parameter
+ *
+ *  "name_size" [ OUT, NULL OKAY ] - returns the name size in
+ *  bytes, excluding any NUL termination.
+ */
+KFG_EXTERN rc_t CC KRepositoryDisplayName ( const KRepository *self,
+    char *buffer, size_t bsize, size_t *name_size );
+
+
+/* Root
+ *  read the root path as a POSIX path or URL
+ *
+ *  attempts to copy NUL-terminated path into provided buffer
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - path output parameter
+ *
+ *  "root_size" [ OUT, NULL OKAY ] - returns the path size in
+ *  bytes, excluding any NUL termination.
+ */
+KFG_EXTERN rc_t CC KRepositoryRoot ( const KRepository *self,
+    char *buffer, size_t bsize, size_t *root_size );
+
+
+/* Disabled
+ *  discover whether the repository is enabled
+ */
+KFG_EXTERN bool CC KRepositoryDisabled ( const KRepository *self );
+
+/* CacheEnabled
+ *  discover whether the repository supports caching
+ */
+KFG_EXTERN bool CC KRepositoryCacheEnabled ( const KRepository *self );
+
+
+/* DownloadTicket
+ *  return any associated download ticket
+ *
+ *  attempts to copy NUL-terminated ticket into provided buffer
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - ticket output parameter
+ *
+ *  "ticket_size" [ OUT, NULL OKAY ] - returns the ticket size in
+ *  bytes, excluding any NUL termination.
+ */
+KFG_EXTERN rc_t CC KRepositoryDownloadTicket ( const KRepository *self,
+    char *buffer, size_t bsize, size_t *ticket_size );
+
+
+/* EncryptionKey
+ *  return any associated encryption key
+ *
+ *  attempts to copy NUL-terminated key into provided buffer
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - encryption key output parameter
+ *
+ *  "key_size" [ OUT, NULL OKAY ] - returns the key size in
+ *  bytes, excluding any NUL termination.
+ */
+KFG_EXTERN rc_t CC KRepositoryEncryptionKey ( const KRepository *self,
+    char *buffer, size_t bsize, size_t *key_size );
+
+
+/* EncryptionKeyFile
+ *  return path to any associated encryption key file
+ *
+ *  attempts to copy NUL-terminated path into provided buffer
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - key file path output parameter
+ *
+ *  "path_size" [ OUT, NULL OKAY ] - returns the path size in
+ *  bytes, excluding any NUL termination.
+ */
+KFG_EXTERN rc_t CC KRepositoryEncryptionKeyFile ( const KRepository *self,
+    char *buffer, size_t bsize, size_t *path_size );
+
+
+/* Description
+ *  return any associated descriptive text
+ *
+ *  attempts to copy NUL-terminated description into provided buffer
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - description text output parameter
+ *
+ *  "desc_size" [ OUT, NULL OKAY ] - returns the text size in
+ *  bytes, excluding any NUL termination.
+ */
+KFG_EXTERN rc_t CC KRepositoryDescription ( const KRepository *self,
+    char *buffer, size_t bsize, size_t *desc_size );
+
+
+/*--------------------------------------------------------------------------
+ * KRepositoryVector
+ *  uses Vector API
+ *  holds zero or more KRepository objects
+ */
+typedef struct Vector KRepositoryVector;
+
+
+/* Whack
+ *  destroy your vector
+ */
+KFG_EXTERN rc_t CC KRepositoryVectorWhack ( KRepositoryVector *self );
+
+
+/*--------------------------------------------------------------------------
+ * KRepositoryMgr
+ *  manages structured access to repositories
+ */
+typedef struct KRepositoryMgr KRepositoryMgr;
+
+
+/* Make
+ *  create a repository manager
+ *  uses values from "self"
+ */
+KFG_EXTERN rc_t CC KConfigMakeRepositoryMgrRead ( struct KConfig const *self,
+    const KRepositoryMgr **mgr );
+KFG_EXTERN rc_t CC KConfigMakeRepositoryMgrUpdate ( struct KConfig *self,
+    KRepositoryMgr **mgr );
+
+
+/* AddRef
+ * Release
+ */
+KFG_EXTERN rc_t CC KRepositoryMgrAddRef ( const KRepositoryMgr *self );
+KFG_EXTERN rc_t CC KRepositoryMgrRelease ( const KRepositoryMgr *self );
+
+
+/* UserRepositories
+ *  retrieve all user repositories in a Vector
+ */
+KFG_EXTERN rc_t CC KRepositoryMgrUserRepositories ( const KRepositoryMgr *self,
+    KRepositoryVector *user_repositories );
+
+
+/* SiteRepositories
+ *  retrieve all site repositories in a Vector
+ */
+KFG_EXTERN rc_t CC KRepositoryMgrSiteRepositories ( const KRepositoryMgr *self,
+    KRepositoryVector *site_repositories );
+
+
+/* RemoteRepositories
+ *  retrieve all remote repositories in a Vector
+ */
+KFG_EXTERN rc_t CC KRepositoryMgrRemoteRepositories ( const KRepositoryMgr *self,
+    KRepositoryVector *remote_repositories );
+
+/* CurrentProtectedRepository
+ *  returns the currently active user protected repository
+ */
+KFG_EXTERN rc_t CC KRepositoryMgrCurrentProtectedRepository ( const KRepositoryMgr *self,
+    const KRepository **protected );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfg_repository_ */
diff --git a/interfaces/kfs/arc.h b/interfaces/kfs/arc.h
index 374a872..8eca2fe 100644
--- a/interfaces/kfs/arc.h
+++ b/interfaces/kfs/arc.h
@@ -42,6 +42,7 @@ extern "C" {
 #endif
 
 struct KDirectory;
+struct KFile;
 struct KToc;
 struct vector;
 
@@ -94,6 +95,19 @@ KFS_EXTERN rc_t CC KDirectoryOpenArcDirRead(const struct KDirectory * self,
         bool( CC * )(const struct KDirectory*, const char *, void*), void*),
         bool (CC* filter )(const KDirectory*, const char *, void *), void * filterparam);
 
+KFS_EXTERN rc_t CC KDirectoryOpenArcDirRead_silent(const struct KDirectory * self, 
+    const struct KDirectory ** pdir, bool chroot, const char * path, KArcFSType baseType,
+    rc_t ( CC * parse )(struct KToc *,const void *,
+        bool( CC * )(const struct KDirectory*, const char *, void*), void*),
+        bool (CC* filter )(const KDirectory*, const char *, void *), void * filterparam);
+
+KFS_EXTERN rc_t CC KDirectoryOpenArcDirRead_silent_preopened(const struct KDirectory * self, 
+    const struct KDirectory ** pdir, bool chroot, const char * path, KArcFSType baseType,
+    void * f,
+    rc_t ( CC * parse )(struct KToc *,const void *,
+        bool( CC * )(const struct KDirectory*, const char *, void*), void*),
+        bool (CC* filter )(const KDirectory*, const char *, void *), void * filterparam);
+
 
 
 
diff --git a/interfaces/kfs/buffile.h b/interfaces/kfs/buffile.h
index 73e24e3..f32837b 100644
--- a/interfaces/kfs/buffile.h
+++ b/interfaces/kfs/buffile.h
@@ -77,6 +77,16 @@ KFS_EXTERN rc_t CC KBufFileMakeRead ( struct KFile const ** buf,
 KFS_EXTERN rc_t CC KBufFileMakeWrite ( struct KFile ** buf,
     struct KFile * original, bool update, size_t bsize );
 
+
+
+
+KFS_EXTERN rc_t CC KBufReadFileMakeRead ( const struct KFile ** bp,
+     const struct KFile * original, size_t bsize );
+
+KFS_EXTERN rc_t CC KBufWriteFileMakeWrite ( struct KFile ** bp,
+     struct KFile * original, size_t bsize );
+
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/interfaces/kfs/cacheteefile.h b/interfaces/kfs/cacheteefile.h
new file mode 100644
index 0000000..aad2b9c
--- /dev/null
+++ b/interfaces/kfs/cacheteefile.h
@@ -0,0 +1,147 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kfs_cacheteefile_
+#define _h_kfs_cacheteefile_
+
+#ifndef _h_kfs_extern_
+#include <kfs/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#include <stdarg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KFile;
+struct KDirectory;
+
+
+/*--------------------------------------------------------------------------
+ * KDirectory
+ */
+
+/* MakeCacheTee
+ *  takes a KFile as source
+ *
+ *  "tee" [ OUT ] - return parameter for tee file
+ *
+ *  "remote" [ IN ] - the source file, generally costly to read which is
+ *  the motivation behind caching its output
+ *
+ *  "logger" [ IN, NULL OKAY ] - optional debugging output for observing
+ *  access patterns of "remote"
+ *
+ *  "blocksize" [ IN ] - the cache-file page size
+ *                       ( if 0 ... default-value will be 32k )
+ *
+ *  "cluster" [ IN ] - a blocking factor for accessing "remote"
+ *  reads are in blocks of size "blocksize" * "cluster"
+ *  ( 1...4 makes most sense )
+ *
+ *  "report" [ IN ] - when true, provides more verbose debugging output
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting full cache file, i.e. the name of the file
+ *  as it would appear after promoting from partial to full status.
+ *
+ * the function creates a new ( cached ) KFile in **tee
+ *
+ * the caller can access this file to read and query the filesize, these are the only
+ * supported messages to this object
+ *
+ * when the caller requests data that is not already cached in the local file,
+ * the cached file will read from the remote-file, write into the local-file and then
+ * return the requested data in the read-buffer
+ *
+ * when the caller requests data that is already cached, the data will be read from
+ * the local file only, no remote request will be made
+ *
+ * when the caller requests data this is partially cached, the file will return the
+ * part that comes first either from the remote or from the local file
+ * in this case the file will return less data than requested
+ *
+ * when the caller opens an existing local file that contains a full copy of the
+ * remote file, the local KFile will be returned in self
+ *
+ * this function will check if the remote-file and the local file ( if it already exists )
+ * do have the same size and blocksize
+ *
+ */
+KFS_EXTERN rc_t CC KDirectoryMakeCacheTee ( struct KDirectory *self,
+    struct KFile const **tee, struct KFile const *remote, struct KFile *logger,
+    uint32_t blocksize, uint32_t cluster, bool report, const char *path, ... );
+KFS_EXTERN rc_t CC KDirectoryVMakeCacheTee ( struct KDirectory *self,
+    struct KFile const **tee, struct KFile const *remote, struct KFile *logger,
+    uint32_t blocksize, uint32_t cluster, bool report, const char *path, va_list args );
+
+/* -----
+ * checks if a given file ( has to be a local file )
+ *
+ * a ... is a backing cache-file for the CacheTee-file
+ * b ... all blocks have been filled with the remote content
+ *
+ * it returns the result of the check in *is_complete
+ */
+KFS_EXTERN rc_t CC IsCacheFileComplete( const struct KFile * self, bool * is_complete, bool silent);
+
+
+/* -----
+ * truncates a cache-file for a CacheTee-filec by removing the bitmap/content-lenght/block-size
+ *
+ * it returns the result of the check in *is_complete
+ */
+KFS_EXTERN rc_t CC TruncateCacheFile( struct KFile * self );
+
+
+/* -----
+ * examens the file, and reports what percentage of blocks are in the cache...
+ *
+ */
+KFS_EXTERN rc_t CC GetCacheCompleteness( const struct KFile * self, float * percent );
+
+
+/* -----
+ * examens the file, and reports the size of the original file ( without the cachefile-footer )
+ *
+ */
+KFS_EXTERN rc_t CC GetCacheTruncatedSize( const struct KFile * self, uint64_t * truncated_size, bool silent );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfs_teefile_ */
diff --git a/interfaces/kfs/directory.h b/interfaces/kfs/directory.h
index 209b263..a6b3fab 100644
--- a/interfaces/kfs/directory.h
+++ b/interfaces/kfs/directory.h
@@ -78,6 +78,9 @@ KFS_EXTERN rc_t CC KDirectoryRelease ( const KDirectory *self );
  *
  *  "path" [ IN, NULL OKAY ] - optional parameter for target
  *  directory. if NULL or empty, interpreted to mean "."
+ *
+ *  function makes a flat list, does not step into sub-dirs!
+ *
  */
 KFS_EXTERN rc_t CC KDirectoryList ( const KDirectory *self, struct KNamelist **list,
     bool ( CC * f ) ( const KDirectory *dir, const char *name, void *data ),
@@ -274,18 +277,22 @@ KFS_EXTERN rc_t CC KDirectoryVSetDate ( KDirectory *self, bool recurse,
 
 /* CreateAlias
  *  creates a path alias according to create mode
+ *  such that "alias" => "targ"
  *
  *  "access" [ IN ] - standard Unix directory access mode
  *  used when "mode" has kcmParents set and alias path does
  *  not exist.
  *
- *  "mode" [ IN ] - a creation mode ( see explanation above ).
+ *  "mode" [ IN ] - a creation mode ( see explanation in kfs/defs.h ).
  *
  *  "targ" [ IN ] - NUL terminated string in directory-native
- *  character set denoting target object
+ *  character set denoting target object, i.e. the object which
+ *  is designated by symlink "alias". THE PATH IS GIVEN RELATIVE
+ *  TO DIRECTORY ( "self" ), NOT SYMLINK ( "alias" )!
  *
  *  "alias" [ IN ] - NUL terminated string in directory-native
- *  character set denoting target alias
+ *  character set denoting target alias, i.e. the symlink that
+ *  designates a target "targ".
  */
 KFS_EXTERN rc_t CC KDirectoryCreateAlias ( KDirectory *self,
     uint32_t access, KCreateMode mode,
@@ -330,7 +337,7 @@ KFS_EXTERN rc_t CC KDirectoryVOpenFileWrite ( KDirectory *self,
  *
  *  "access" [ IN ] - standard Unix access mode, e.g. 0664
  *
- *  "mode" [ IN ] - a creation mode ( see explanation above ).
+ *  "mode" [ IN ] - a creation mode ( see explanation in kfs/defs.h ).
  *
  *  "path" [ IN ] - NUL terminated string in directory-native
  *  character set denoting target file
@@ -436,7 +443,7 @@ KFS_EXTERN rc_t CC KDirectoryVOpenDirUpdate ( KDirectory *self,
  *
  *  "access" [ IN ] - standard Unix directory mode, e.g.0775
  *
- *  "mode" [ IN ] - a creation mode ( see explanation above ).
+ *  "mode" [ IN ] - a creation mode ( see explanation in defs.h ).
  *
  *  "path" [ IN ] - NUL terminated string in directory-native
  *  character set denoting target directory
@@ -446,6 +453,52 @@ KFS_EXTERN rc_t CC KDirectoryCreateDir ( KDirectory *self,
 KFS_EXTERN rc_t CC KDirectoryVCreateDir ( KDirectory *self,
     uint32_t access, KCreateMode mode, const char *path, va_list args );
 
+
+/* CopyPath
+ *  copies a file
+ *
+ *  "src_path" [ IN ] - path to source-file
+ *
+ *  "dst_path" [ IN ] - file to create
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target directory
+ */
+KFS_EXTERN rc_t CC KDirectoryCopyPath ( const KDirectory *src_dir,
+    KDirectory *dst_dir, const char *src_path, const char * dst_path );
+
+
+/* CopyPaths
+ *  copies files, optional recursive in sub-dirs...
+ *
+ *  "recursive" [ IN ] - handle subdir's recursivly
+ *
+ *  "src" [ IN ] - what directory to copy
+ *
+ *  "dst" [ IN ] - into what directory to copy
+ *      ( will be created if it does not already exist )
+ *
+ */
+LIB_EXPORT rc_t CC KDirectoryCopyPaths( const KDirectory * src_dir,
+    KDirectory *dst_dir, bool recursive, const char *src, const char *dst );
+
+
+/* Copy
+ *  detects if src is a file or a directory
+ *
+ *  "recursive" [ IN ] - handle subdir's recursivly 
+ *            ( if srs is a directory )
+ *
+ *  "src" [ IN ] - what file/directory to copy
+ *
+ *  "dst" [ IN ] - into what file/directory to copy
+ *      ( will be created if it does not already exist )
+ *
+ */
+LIB_EXPORT rc_t CC KDirectoryCopy( const KDirectory * src_dir,
+    KDirectory *dst_dir, bool recursive, const char *src, const char *dst );
+
+
 /* NativeDir
  *  returns a native file-system directory node reference
  *  the directory root will be "/" and set to the native
diff --git a/interfaces/kfs/file.h b/interfaces/kfs/file.h
index c1d240a..47fe143 100644
--- a/interfaces/kfs/file.h
+++ b/interfaces/kfs/file.h
@@ -119,6 +119,21 @@ KFS_EXTERN rc_t CC KFileSetSize ( KFile *self, uint64_t size );
 KFS_EXTERN rc_t CC KFileRead ( const KFile *self, uint64_t pos,
     void *buffer, size_t bsize, size_t *num_read );
 
+/* ReadAll
+ *  read from file until "bsize" bytes have been retrieved
+ *  or until end-of-input
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ *  "num_read" [ OUT ] - return parameter giving number of bytes
+ *  actually read. when returned value is zero and return code is
+ *  also zero, interpreted as end of file.
+ */
+KFS_EXTERN rc_t CC KFileReadAll ( const KFile *self, uint64_t pos,
+    void *buffer, size_t bsize, size_t *num_read );
+
 /* Write
  *  write file at known position
  *
@@ -132,6 +147,20 @@ KFS_EXTERN rc_t CC KFileRead ( const KFile *self, uint64_t pos,
 KFS_EXTERN rc_t CC KFileWrite ( KFile *self, uint64_t pos,
     const void *buffer, size_t size, size_t *num_writ );
 
+/* WriteAll
+ *  write to file until "size" bytes have been transferred
+ *  or until no further progress can be made
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ *  "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually written
+ */
+KFS_EXTERN rc_t CC KFileWriteAll ( KFile *self, uint64_t pos,
+    const void *buffer, size_t size, size_t *num_writ );
+
 /* MakeStdIn
  *  creates a read-only file on stdin
  */
diff --git a/interfaces/kfs/impl.h b/interfaces/kfs/impl.h
index 70b3b79..22bf168 100644
--- a/interfaces/kfs/impl.h
+++ b/interfaces/kfs/impl.h
@@ -74,7 +74,7 @@ struct KFile
 {
     const KFile_vt *vt;
     const KDirectory *dir;
-    atomic32_t refcount;
+    KRefcount refcount;
     uint8_t read_enabled;
     uint8_t write_enabled;
     uint8_t align [ 2 ];
@@ -122,6 +122,7 @@ union KFile_vt
  *  initialize a newly allocated file object
  */
 KFS_EXTERN rc_t CC KFileInit ( KFile *self, const KFile_vt *vt,
+    const char *classname, const char *fname,
     bool read_enabled, bool write_enabled );
 
 /* Destroy
@@ -254,6 +255,14 @@ KFS_EXTERN rc_t CC KDirectoryDestroyFile ( const KDirectory *self, KFile *f );
 KFS_EXTERN struct KSysDir* CC KDirectoryGetSysDir ( const KDirectory *self );
 
 
+/* RealPath
+ *  exposes functionality of system directory
+ */
+KFS_EXTERN rc_t CC KSysDirRealPath ( struct KSysDir const *self,
+    char *real, size_t bsize, const char *path, ... );
+KFS_EXTERN rc_t CC KSysDirVRealPath ( struct KSysDir const *self,
+    char *real, size_t bsize, const char *path, va_list args );
+
 
 /*--------------------------------------------------------------------------
  * KArrayFile
diff --git a/interfaces/kfs/kfs-priv.h b/interfaces/kfs/kfs-priv.h
index 73a1568..3f4a82b 100644
--- a/interfaces/kfs/kfs-priv.h
+++ b/interfaces/kfs/kfs-priv.h
@@ -46,6 +46,7 @@ extern "C" {
 struct KDirectory;
 struct KFile;
 struct KPath;
+struct KDlset;
 struct KArrayFile;
 struct KNamelist;
 
@@ -56,31 +57,6 @@ struct KNamelist;
 KFS_EXTERN rc_t CC KFileMakeFDFileRead ( struct KFile const **f, int fd );
 KFS_EXTERN rc_t CC KFileMakeFDFileWrite ( struct KFile **f, bool update, int fd );
 
-KFS_EXTERN int CC KDirectoryVOpenSraArchiveRead_silent ( struct KDirectory const *self,
-    struct KDirectory const **sra_dir, int chroot, const char *path, va_list args );
-
-KFS_EXTERN int CC KDirectoryOpenSraArchiveRead_silent ( struct KDirectory const *self,
-    struct KDirectory const **sra_dir, int chroot, const char *path, ... );
-    
-KFS_EXTERN int CC KDirectoryVOpenTarArchiveRead_silent ( struct KDirectory const *self,
-    struct KDirectory const **sra_dir, int chroot, const char *path, va_list args );
-
-KFS_EXTERN int CC KDirectoryOpenTarArchiveRead_silent ( struct KDirectory const *self,
-    struct KDirectory const **sra_dir, int chroot, const char *path, ... );
-
-
-/*
- * copy the path string out of a KPath object.
- * if buffer is too short an RC (rcBuffer, rcInsufficient) is returned
- * and nothing is copied.
- * if there is a room the NUL is copied as well
- */
-KFS_EXTERN rc_t CC KPathReadPath (const struct KPath * self, char * buffer,
-                                  size_t buffer_size, size_t * num_read);
-
-/* get current working directory */
-KFS_EXTERN rc_t CC KPathGetCWD (char * buffer, size_t buffer_size);
-
 /* GetMeta
  *  extracts metadata into a string-vector
  *
@@ -92,6 +68,11 @@ KFS_EXTERN rc_t CC KPathGetCWD (char * buffer, size_t buffer_size);
 KFS_EXTERN rc_t CC KArrayFileGetMeta ( struct KArrayFile const *self, const char *key,
     const struct KNamelist **list );
 
+/* List
+ *  list the paths to the libraries in the set
+ */
+KFS_EXTERN rc_t CC KDlsetList ( struct KDlset const *self, struct KNamelist **list );
+
     
 #ifdef __cplusplus
 }
diff --git a/interfaces/kfs/lockfile.h b/interfaces/kfs/lockfile.h
new file mode 100644
index 0000000..ef83254
--- /dev/null
+++ b/interfaces/kfs/lockfile.h
@@ -0,0 +1,116 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kfs_lockfile_
+#define _h_kfs_lockfile_
+
+#ifndef _h_kfs_extern_
+#include <kfs/extern.h>
+#endif
+
+#ifndef _h_kfs_defs_
+#include <kfs/defs.h>
+#endif
+
+#include <stdarg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KFile;
+struct KDirectory;
+
+
+/*--------------------------------------------------------------------------
+ * KLockFile
+ *  a mutual exclusion lock on a file
+ *  the lock is acquired upon creation
+ *  and released upon destruction
+ *
+ * NB - only guaranteed to work when used from a single host
+ */
+typedef struct KLockFile KLockFile;
+
+
+/* AddRef
+ * Release
+ */
+KFS_EXTERN rc_t CC KLockFileAddRef ( const KLockFile *self );
+KFS_EXTERN rc_t CC KLockFileRelease ( const KLockFile *self );
+
+
+
+/*--------------------------------------------------------------------------
+ * KDirectory
+ *  interface extensions
+ */
+
+
+/* CreateLockFile
+ *  attempts to create a KLockFile
+ *
+ *  "lock" [ OUT ] - return parameter for newly created lock file
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting lock file
+ */
+KFS_EXTERN rc_t CC KDirectoryCreateLockFile ( struct KDirectory *self,
+    KLockFile **lock, const char *path, ... );
+KFS_EXTERN rc_t CC KDirectoryVCreateLockFile ( struct KDirectory *self,
+    KLockFile **lock, const char *path, va_list args );
+
+
+/* CreateExclusiveAccessFile
+ *  opens a file with exclusive write access
+ *
+ *  "f" [ OUT ] - return parameter for newly opened file
+ *
+ *  "update" [ IN ] - if true, open in read/write mode
+ *  otherwise, open in write-only mode
+ *
+ *  "access" [ IN ] - standard Unix access mode, e.g. 0664
+ *
+ *  "mode" [ IN ] - a creation mode ( see explanation above ).
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target file
+ */
+KFS_EXTERN rc_t CC KDirectoryCreateExclusiveAccessFile ( struct KDirectory *self, struct KFile **f,
+    bool update, uint32_t access, KCreateMode mode, const char *path, ... );
+KFS_EXTERN rc_t CC KDirectoryVCreateExclusiveAccessFile ( struct KDirectory *self, struct KFile **f,
+    bool update, uint32_t access, KCreateMode mode, const char *path, va_list args );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfs_lockfile_ */
diff --git a/interfaces/kfs/path-priv.h b/interfaces/kfs/path-priv.h
deleted file mode 100644
index c2cb5a7..0000000
--- a/interfaces/kfs/path-priv.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*===========================================================================
-*
-*                            Public Domain Notice
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#ifndef _h_kfs_path_priv_
-#define _h_kfs_path_priv_
-
-#ifndef _h_kfs_extern_
-#include <kfs/extern.h>
-#endif
-
-#ifndef _h_klib_defs_
-#include <klib/defs.h>
-#endif
-
-#include <kfs/path.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* options for a KPath possibly obtained from a query string on an URI */
-typedef uint32_t KPOption_t;
-enum eKPOption_t
-{
-    kpopt_encrypted,
-    kpopt_pwpath,
-    kpopt_pwfd,
-    kpopt_count
-};
-
-
-/* =====
- * Much of what follows is expected to move into the interface kfs/path.h
- * once it becomes supported.
- */
-
-/* MakeFmt
- *  make a path object from a format string plus arguments
- *
- *  "new_path" [ OUT ] - a reference to the new object.
- *
- *  "fmt" [ IN ] and "args" [ IN ] - arguments to string_printf
- *  ( see <klib/text.h> ) to build a NUL-terminated string
- *  that conforms with the rules for "posix_path"
- *
- * NB - SECURITY RISK IF USED DIRECTLY FROM EXTERNAL STRINGS.
- *      ALSO, FMT IS **NOT** PRINTF COMPATIBLE - see string_printf.
- */
-KFS_EXTERN rc_t CC KPathMakeFmt ( KPath ** new_path, const char * fmt, ... );
-KFS_EXTERN rc_t CC KPathMakeVFmt ( KPath ** new_path, const char * fmt, va_list args );
-
-
-/* Bill - I don't know that we're ready to export these yet */
-KFS_EXTERN rc_t CC KPathMakeRelative ( KPath ** new_path, const KPath * base_path,
-                                       const char * relative_path );
-KFS_EXTERN rc_t CC KPathMakeRelativeFmt ( KPath ** new_path, const KPath * base_path,
-                                          const char * fmt, ... );
-KFS_EXTERN rc_t CC KPathVMakeRelativeFmt ( KPath ** new_path, const KPath * base_path,
-                                           const char * fmt, va_list args );
-KFS_EXTERN rc_t CC KPathMakeCurrentPath ( KPath ** new_path );
-
-KFS_EXTERN rc_t CC KPathMakeURI ( KPath ** new_path, const char * uri );
-
-
-KFS_EXTERN rc_t CC KPathReadPath (const struct  KPath * self, char * buffer,
-                                  size_t buffer_size, size_t * num_read);
-
-KFS_EXTERN rc_t CC KPathOption (const KPath * self, KPOption_t option,
-                                char * buffer, size_t buffer_size,
-                                size_t * num_read);
-
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _h_kfs_path_priv_ */
diff --git a/interfaces/kfs/path.h b/interfaces/kfs/path.h
deleted file mode 100644
index b3c2aa2..0000000
--- a/interfaces/kfs/path.h
+++ /dev/null
@@ -1,237 +0,0 @@
-/*===========================================================================
-*
-*                            Public Domain Notice
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#ifndef _h_kfs_path_
-#define _h_kfs_path_
-
-#ifndef _h_kfs_extern_
-#include <kfs/extern.h>
-#endif
-
-#ifndef _h_klib_defs_
-#include <klib/defs.h>
-#endif
-
-#include <stdarg.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/*--------------------------------------------------------------------------
- *
- * The ABNF form described in RFC5234 will be used to define URLS and paths
- * with some handwaving instead of complete character definitions for case 
- * insensitivity.  CORE definitions from RFC5234 will be used again handwaving
- * case insensitivity.
- *
- * --------------------
- *
- * URL for a KPath
- *
- *  as per RFC 3986, an URI consists of:
- *
- *    URI           = scheme ":" heir-part [ "?" query ] [ "#" fragment ]
- *
- *  We will support however something intbetween an URI and an IRI in that we'll
- *  all UTF-8 rather than limit certain characters to ASCII.
- *
- *  For the NCBI path  URL:  The hier-part is intended to be compatible with the 
- *                    "file:" scheme  Authority on any of the Unix-like operating
- *                    systems must either be empty or "localhost".  For Windows
- *                    it must  be a host that can be used if the "file" url is
- *                    translated into a UNC style Windows path.  Also in a
- *                    Windows kfs: URL a single colon ':' will be allowed only at
- *                    the end of a single character rive letter for the first
- *                    sub-part of the path.
- *
- *    scheme        = "ncbi-file" ; ( case insensitive )
- *
- *    hier-part     = "//" authority path-abempty
- *                  / path-absolute
- *                  / path-relative
- *                  / path-empty
- *
- * by RFC 3986 authority is
- *    authority     = [ userinfo "@" ] host [ ":" port]
- * but at this point we only recognize
- *    authority     = host
- *
- * by RFC 3986 host is
- *    host          = IP-literal / IPv4address / reg-name
- * but at this point we only recognize
- *    host          = reg-name
- *
- *    reg-name      = *( unreserved / pct-encoded / sub-delims )
- *
- *    path          = path-abempty
- *                  / path-absolute
- *                  / path-noscheme
- *                  / path-rootless
- *                  / path-empty
- *
- *    path-abempty  = * ( "/" segment )
- *
- *    path-absolute = "/" segment-nz *( "/" segment )
- *
- *    path-noscheme = segment-nz-nc *( "/" segment )
- *
- *    path-rootless = segment-nz *( "/" segment )
- *
- *    path-empty    = ""
- *
- *    segment       = *pchar       ; can be empty
- *    segment-nz    = 1*pchar      ; can't be empty
- *    segment-nz-nc = 1*pchar-nz   ; can't be empty
- *
- *    pchar         = ":" / pchar-nc
- *
- *    pchar-nc      = unreserved / pct-encoded / sub-delims ? "@"
- *
- *    pct-encoded   = "%" HEXDIG HEXDIG ; hex digits are 0-9, a-f or A-F
- *
- *    authority   = "localhost" / host-name ; the host name is an O/S specific 
- *                                          ; name of a remote host 
- *
- *    query       = query_entry [ * ( "&" query_entry ) ]
- *
- *    query_entry = "encrypt" / "enc" / ( "pwfile=" hier-part ) / ( "pwfd=" fd )
- *
- *    fd          = 1* DIGIT
- *
- *    unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~" / UTF-8
- *
- *    reserved    = gen-delims / subdelims
- *
- *    gen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"
- *
- *    sub-delims  = "!" / "$" / "&" / "'" / "(" / ")" / "*"
- *                / "+" / "," / ";" / "="
- *
- * Handwaving on the UTF-8.  We'll accept it rather than requiring percent encoding
- * in most cases.
-
- * Examples:
- *         "ncbi-file://home/my-name/data-files"
- *         "ncbi-file://win-server/archive/secure/read12345?encrypted"
- *         "ncbi-file:///c:/scanned-data/0001/file.sra?enc?pwd-file=c:/Users/JamesMcCoy/ncbi.pwd"
- *
- *  We allow an implied scheme of "kfs" if none present.
- *  'host-name' is partially implemented for Windows.  Not currently for any the
- *  of the supported Unix systems.  We do not support IP addresses instead of 
- *  host names.
- *
- *  'path' can be either absolute or relative and must be posix style as per 
- *  RFC 3986 and matches the "file" scheme.
- *
- *  'fragment' is not yet implemented or defined.
- *
- *  'fd' is a system specific file handle.  Not yet supported on Windows.
- *
- * --------------------
- *
- * KFS posix_path representation:
- *
- * The internal representation of a path for KFS resembles very closely the
- * POSIX pathname crossed with the Windows UNC path.  Only the Unix "/" 
- * separator is allowed not the "\" for paths.
- *
- * posix-path     = full-path / relative-path
- *
- * full-path      = ["//" host] "/" [ directory-path "/" ] resource
- *
- * relative-path  = [ directory-path "/" ] resource
- *
- * directory-path = resource [ "/" directory-path ]
- *
- * resource       = string ; (UTF-8 O/S specific name for a directory or a file)
- *
- * host           = string ; (UTF-8 O/S specific name for the local or remote host)
- *
- * For a host "localhost" is a synonym for the current host.
- * The "//host" is not guaranteed to work for all systems except "//localhost"
- *
- * The resource "." is assumed to mean the local directory and will be stripped
- * when a path is made canonical.
- *
- * The resource ".." is assumed to mean the containing directory and when made 
- * canonical it will be left in at the begining for relative paths or removed along 
- * with the preceding resource name.
- *
- * For Windows the device is handled in a unique way with some potential for ambiguity.
- * The UNC approach for a named drive "C:" becomes "/c".  So "C:\" becomes "/c/".
- *
- * In the future the complex approach from the "file:" URL should be adopted 
- * with the ":" allowed only in the first directory name in a path.  RFC 3986 
- * notes though that this complex approach puts some five variants into the ABNF
- * to describe the path portion of an URL.
- */
-
-typedef struct KPath KPath;
-
-
-/* AddRef
- * Release
- *  ignores NULL references
- */
-KFS_EXTERN rc_t CC KPathAddRef ( const KPath *self );
-KFS_EXTERN rc_t CC KPathRelease ( const KPath *self );
-
-
-/* Make
- *  make a path object from a POSIX path string
- *  or an URL using the kfs scheme.  THe file scheme might be supported in the
- *  future perhaps with other suitable schemes as well.
- *
- *  "new_path" [ OUT ] - a reference to the new object.
- *
- *  "posix_path" [ IN ] - a UTF-8, NUL-terminated POSIX-compliant path
- *  or a fully formed "kfs" or "file" url.
- */
-KFS_EXTERN rc_t CC KPathMake ( KPath ** new_path, const char * posix_path);
-
-
-/* MakeSysPath
- *  make a path object from an external, OS-specific path string
- *  or a listed kfs URL.
- *
- *  "new_path" [ OUT ] - a reference to the new object.
- *
- *  "sys_path" [ IN ] - a UTF-8, NUL-terminated, O/S specific file path
- *   with an optional query part for encryption.
- *   The path portion must be legal characters in path names for the O/S in use.
- *
- * NB - see <klib/text.h> for functions to convert between character sets.
- */
-KFS_EXTERN rc_t CC KPathMakeSysPath ( KPath ** new_path, const char * sys_path );
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _h_kfs_path_ */
diff --git a/interfaces/kfs/quickmount.h b/interfaces/kfs/quickmount.h
new file mode 100644
index 0000000..6ecbaef
--- /dev/null
+++ b/interfaces/kfs/quickmount.h
@@ -0,0 +1,61 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kfs_quick_mount_
+#define _h_kfs_quick_mount_
+
+#ifndef _h_kfs_extern_
+#include <kfs/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct KDirectory;
+struct KFile;
+
+typedef struct KQuickMountDir KQuickMountDir;
+
+/* OpenQuickMountDirRead
+ *
+ */
+KFS_EXTERN rc_t KQuickMountDirMake (const struct KDirectory * self, 
+                                    const struct KDirectory ** pnewdir,
+                                    const struct KFile * file,
+                                    const char * path, size_t path_size,
+                                    const char * mount, size_t mount_size);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfs_quick_mount_ */
diff --git a/interfaces/kfs/ramfile.h b/interfaces/kfs/ramfile.h
new file mode 100644
index 0000000..65957b1
--- /dev/null
+++ b/interfaces/kfs/ramfile.h
@@ -0,0 +1,75 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kfs_ramfile_
+#define _h_kfs_ramfile_
+
+#ifndef _h_kfs_extern_
+#include <kfs/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct KFile;
+
+typedef struct KRamFile KRamFile;
+
+/* -----
+ * fakes file reads and writes into a buffer
+ *
+ * writes never fail. Acts like a sliding window from previous writes of possible
+ * reads only succeed of they are from what was contained in the last write
+ *
+ * zero fills are put in where possible. If you write a buffer, slide the window with 
+ * a write that doesn't fill the buffer, the rest will be zero not what was previously written
+ *
+ * The Read only form doesn;t allow writes but will reflect what was put in
+ * the buffer outside of the KFile
+ *
+ * The write only will accept writes but can only be accessed outside of the KFile.
+ *
+ * The update form tries its best to give what was asked for [see above]
+ */
+KFS_EXTERN rc_t CC KRamFileMakeRead (const struct KFile ** self,
+                                     char * buffer, size_t buffer_size);
+
+KFS_EXTERN rc_t CC KRamFileMakeWrite (struct KFile ** self,
+                                      char * buffer, size_t buffer_size);
+
+KFS_EXTERN rc_t CC KRamFileMakeUpdate (struct KFile ** self,
+                                       char * buffer, size_t buffer_size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfs_ramfile_ */
diff --git a/interfaces/kfs/readheadfile.h b/interfaces/kfs/readheadfile.h
new file mode 100644
index 0000000..1cd47a1
--- /dev/null
+++ b/interfaces/kfs/readheadfile.h
@@ -0,0 +1,86 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kfs_readheadfile_
+#define _h_kfs_readheadfile_
+
+#ifndef _h_kfs_extern_
+#include <kfs/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards allowing opaque class typing
+ */
+struct KFile;
+
+
+/* MakeReadHead
+ *  make a read-only file where we buffer only the first part of the file
+ *  this is pretty much only needed to type a file when we don't know
+ *  or want to see if we can acess randomly.  This is a fairly smart type
+ *  that will take ownership of the pointer to the 'original' KFile
+ *  reference.  If it finds that the 'original' KFile is seekable (has
+ *  random access) it will merely return a reference to that const KFile *
+ *  rather than creating a new KFile that will in most cases pass through 
+ *  all method calls to the original.
+ *
+ *  This type was created primarily to allow the reading of the first part
+ *  of a file for type recognition with out forcing numerous cases of
+ *  duplicated code to check for random access on an existing KFile reference
+ *  and handling of the pre-read in the application.
+ *
+ *  This class is intended for files that once typed will be read straight
+ *  through.  If more random access to the file is needed the KBufFile is 
+ *  indicated rather than this one.  If a straight through access is needed
+ *  this is a far lighter weight solution than KBufFile.
+ *
+ *  A references is added to the original even if it becomes used as the new
+ *  file because it allows random access.
+ *
+ *  "buf" [ OUT ] - return parameter for new buffered file
+ *
+ *  "original" [ IN ] - source file to be buffered. must have read access
+ *
+ *  "bsize" [ IN ] - buffer size
+ */
+KFS_EXTERN 
+rc_t CC KFileMakeReadHead (const struct KFile ** pself,
+                           const struct KFile * original,
+                           size_t buffer_size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfs_readheadfile_ */
diff --git a/interfaces/kfs/sra.h b/interfaces/kfs/sra.h
index 60b72cd..ef52bc4 100644
--- a/interfaces/kfs/sra.h
+++ b/interfaces/kfs/sra.h
@@ -55,7 +55,7 @@ extern "C" {
  * just these enumerated values.  
  */
 typedef uint32_t KSRAFileAlignment;
-enum KSRAFileAlignment
+enum eKSRAFileAlignment
 {
     /* align on byte count unit boundaries
      * set this to the number of bytes in the alignment unit
@@ -109,9 +109,6 @@ struct KSraHeader
 
 
 
-KFS_EXTERN rc_t CC SraHeaderMake (KSraHeader ** self, size_t treesize, KSRAFileAlignment alignment);
-KFS_EXTERN rc_t CC SraHeaderValidate (const KSraHeader * self, bool * reverse, uint32_t * version);
-KFS_EXTERN size_t CC SraHeaderSize (const KSraHeader * self);
 #define FS_SRA_CUR_VERSION 1
 
 KFS_EXTERN uint64_t CC SraHeaderGetFileOffset (const KSraHeader * self);
@@ -165,6 +162,18 @@ KFS_EXTERN rc_t CC KDirectoryOpenSraArchiveRead ( struct KDirectory const *self,
     struct KDirectory const **sra_dir, int chroot, const char *path, ... );
 KFS_EXTERN rc_t CC KDirectoryVOpenSraArchiveRead ( struct KDirectory const *self,
     struct KDirectory const **sra_dir, int chroot, const char *path, va_list args );
+KFS_EXTERN rc_t CC KDirectoryOpenSraArchiveRead_silent ( struct KDirectory const *self,
+    struct KDirectory const **sra_dir, int chroot, const char *path, ... );
+KFS_EXTERN rc_t CC KDirectoryVOpenSraArchiveRead_silent ( struct KDirectory const *self,
+    struct KDirectory const **sra_dir, int chroot, const char *path, va_list args );
+KFS_EXTERN rc_t CC KDirectoryOpenSraArchiveRead_silent_preopened ( struct KDirectory const *self,
+    struct KDirectory const **sra_dir, int chroot, const struct KFile * f, const char *path, ... );
+KFS_EXTERN rc_t CC KDirectoryVOpenSraArchiveRead_silent_preopened ( struct KDirectory const *self,
+    struct KDirectory const **sra_dir, int chroot, const struct KFile * f, const char *path, va_list args );
+KFS_EXTERN rc_t CC KDirectoryOpenSraArchiveReadUnbounded_silent_preopened ( struct KDirectory const *self,
+    struct KDirectory const **sra_dir, int chroot, const struct KFile * f, const char *path, ... );
+KFS_EXTERN rc_t CC KDirectoryVOpenSraArchiveReadUnbounded_silent_preopened ( struct KDirectory const *self,
+    struct KDirectory const **sra_dir, int chroot, const struct KFile * f, const char *path, va_list args );
 /* copycat needs an unbounded version - that is filesize is not necessarily known
  * this is unsafe for most other uses */
 KFS_EXTERN rc_t CC KDirectoryOpenSraArchiveReadUnbounded ( struct KDirectory const *self,
@@ -172,6 +181,8 @@ KFS_EXTERN rc_t CC KDirectoryOpenSraArchiveReadUnbounded ( struct KDirectory con
 KFS_EXTERN rc_t CC KDirectoryVOpenSraArchiveReadUnbounded ( struct KDirectory const *self,
     struct KDirectory const **sra_dir, int chroot, const char *path, va_list args );
 
+KFS_EXTERN rc_t CC KFileIsSRA (const char * b, size_t z);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/interfaces/kfs/tar.h b/interfaces/kfs/tar.h
index 4491538..96d8c63 100644
--- a/interfaces/kfs/tar.h
+++ b/interfaces/kfs/tar.h
@@ -82,6 +82,11 @@ KFS_EXTERN int CC KDirectoryOpenTarArchiveRead_silent ( struct KDirectory const
 KFS_EXTERN int CC KDirectoryVOpenTarArchiveRead_silent ( struct KDirectory const *self,
     struct KDirectory const **tar_dir, int chroot, const char *path, va_list args );
 
+KFS_EXTERN int CC KDirectoryOpenTarArchiveRead_silent_preopened ( struct KDirectory const *self,
+    struct KDirectory const **tar_dir, int chroot, const struct KFile * f, const char *path, ... );
+KFS_EXTERN int CC KDirectoryVOpenTarArchiveRead_silent_preopened ( struct KDirectory const *self,
+    struct KDirectory const **tar_dir, int chroot, const struct KFile * f, const char *path, va_list args );
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/interfaces/klib/checksum.h b/interfaces/klib/checksum.h
index 78e5afc..5c38ee8 100644
--- a/interfaces/klib/checksum.h
+++ b/interfaces/klib/checksum.h
@@ -106,7 +106,7 @@ struct SHA64bitState
 {
     uint64_t len;
     uint64_t H [ 8 ];
-    uint32_t cur;
+    unsigned long cur;
     uint8_t W [ 128 ];
 };
 
diff --git a/interfaces/klib/debug.h b/interfaces/klib/debug.h
index 80b40f8..3b321ef 100644
--- a/interfaces/klib/debug.h
+++ b/interfaces/klib/debug.h
@@ -61,7 +61,7 @@ extern "C" {
 
 /*
  * To add a new module, just add it to the list in MODULE_NAMES but as a 
- * parameters to the macro "_module"
+ * parameter to the macro "_module"
  *
  * Then add the conditions for that module.  There must be at least one.
  * Put them in the macro "_condition"
@@ -102,10 +102,10 @@ extern "C" {
  */
 
 #define MODULE_NAMES() \
-    _module(APP)  _module(KDB) _module(REF)   _module(LEGREF) \
+    _module(APP)  _module(BLAST) _module(KDB) _module(REF)   _module(LEGREF) \
     _module(KFS)  _module(XML)   _module(VDB) _module(SRA)    \
     _module(XARC) _module(ALIGN) _module(KFG) _module(KRYPTO) \
-    _module(SEARCH) _module(LOADLIB)
+    _module(SEARCH) _module(LOADLIB) _module(VFS) _module(AES) _module(ARGS)
 
 #define APP_CONDITIONS() \
     _condition(APP,0)  _condition(APP,1)  _condition(APP,2)  _condition(APP,3)  \
@@ -125,6 +125,9 @@ extern "C" {
     _condition(APP,56) _condition(APP,57) _condition(APP,58) _condition(APP,59) \
     _condition(APP,60) _condition(APP,61) _condition(APP,62) _condition(APP,63) 
 
+#define BLAST_CONDITIONS() \
+    _condition(BLAST,BLAST)
+
 #define KDB_CONDITIONS() \
     _condition(KDB,KDB)
 
@@ -139,8 +142,10 @@ extern "C" {
     _condition(KFS,MD5)      _condition(KFS,DLL) _condition(KFS,KFFENTRY) _condition(KFS,KFF)  \
     _condition(KFS,ARCENTRY) _condition(KFS,ARC) _condition(KFS,TOCENTRY) _condition(KFS,TOC)  \
     _condition(KFS,TARENTRY) _condition(KFS,TAR) _condition(KFS,SRASORT)  _condition(KFS,GZIP) \
-    _condition(KFS,DIR)  _condition(KFS,COUNTER) _condition(KFS,BZIP)     _condition(KFS,SYS) \
-    _condition(KFS,MGR)     _condition(KFS,PATH)
+    _condition(KFS,DIR)  _condition(KFS,COUNTER) _condition(KFS,BZIP)     _condition(KFS,SYS)
+
+#define VFS_CONDITIONS() \
+    _condition(VFS,MGR)     _condition(VFS,PATH)
 
 #define XML_CONDITIONS() \
     _condition(XML,XML)
@@ -161,13 +166,22 @@ extern "C" {
     _condition(XARC,ARC)
 
 #define ALIGN_CONDITIONS() \
-    _condition(ALIGN,WRITER)
+    _condition(ALIGN,WRITER) _condition(ALIGN,COMPRESS) _condition(ALIGN,COVERAGE) \
+    _condition(ALIGN,BAM) _condition(ALIGN,BGZF) _condition(ALIGN,CFG)
 
 #define KFG_CONDITIONS() \
-    _condition(KFG,LOAD) 
+    _condition(KFG,LOAD) _condition(KFG,NODE)
 
 #define KRYPTO_CONDITIONS() \
-    _condition(KRYPTO,STS) _condition(KRYPTO,CFG) _condition(KRYPTO,ENCRYPT) _condition(KRYPTO,DECRYPT) 
+    _condition(KRYPTO,STS) \
+    _condition(KRYPTO,CFG) \
+    _condition(KRYPTO,ENCRYPT) \
+    _condition(KRYPTO,DECRYPT)
+
+#define AES_CONDITIONS() \
+    _condition(AES,KEYEXP) _condition(AES,CIPHER) \
+    _condition(AES,INVKEYEXP) _condition(AES,INVCIPHER) \
+    _condition(AES,OBJECT)
 
 #define SEARCH_CONDITIONS() \
     _condition(SEARCH,MYERS)
@@ -175,6 +189,9 @@ extern "C" {
 #define LOADLIB_CONDITIONS() \
     _condition(LOADLIB,PBAR) _condition(LOADLIB,FILE) _condition(LOADLIB,XLOG)
 
+#define ARGS_CONDITIONS() \
+    _condition(ARGS,WRITER)
+
 /*
  * Nothing below here needs to be changed when just adding new modules
  * and/or conditions
diff --git a/interfaces/klib/defs.h b/interfaces/klib/defs.h
index afc3400..b5f37ce 100644
--- a/interfaces/klib/defs.h
+++ b/interfaces/klib/defs.h
@@ -33,10 +33,11 @@
 
 #include <stdint.h>
 #include <stddef.h>
-#include <stdbool.h>
 
 #ifdef __cplusplus
 extern "C" {
+#else
+#include <stdbool.h>
 #endif
 
 /*--------------------------------------------------------------------------
@@ -87,7 +88,7 @@ typedef int64_t KTime_t;
 
 /*--------------------------------------------------------------------------
  * ver_t
- *  32 bit 2 part type
+ *  32 bit 4 part type
  */
 typedef uint32_t ver_t;
 
@@ -112,7 +113,7 @@ typedef uint32_t ver_t;
 
 /*--------------------------------------------------------------------------
  * KCreateMode
- *  values are defined in <kfs/directory.h>
+ *  values are defined in <kfs/defs.h>
  */
 typedef uint32_t KCreateMode;
 
diff --git a/interfaces/klib/extern.h b/interfaces/klib/extern.h
index 38abab1..92727f0 100644
--- a/interfaces/klib/extern.h
+++ b/interfaces/klib/extern.h
@@ -40,7 +40,11 @@
 #else
 
 #define KLIB_EXTERN LIB_IMPORT
+#ifdef __cplusplus
+#define KLIB_EXTERN_DATA extern /* LIB_IMPORT_DATA */
+#else
 #define KLIB_EXTERN_DATA LIB_IMPORT_DATA
+#endif
 
 #endif
 
@@ -54,7 +58,7 @@
    function addresses resolve to the thunk and not
    the actual function. */
 #define LIB_IMPORT extern
-#define LIB_IMPORT_DATA __declspec ( dllimport )
+#define LIB_IMPORT_DATA extern __declspec ( dllimport )
 #define LIB_EXPORT __declspec ( dllexport )
 #define LIB_EXPORT_DATA __declspec ( dllexport )
 
diff --git a/interfaces/klib/klib-priv.h b/interfaces/klib/klib-priv.h
new file mode 100644
index 0000000..f3a0f6f
--- /dev/null
+++ b/interfaces/klib/klib-priv.h
@@ -0,0 +1,106 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_klib_priv_
+#define _h_klib_priv_
+
+#ifndef _h_klib_extern_
+#include <klib/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifndef _h_klib_writer_
+#include <klib/writer.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ */
+
+
+/* reporting structure
+ */
+typedef struct ReportFuncs ReportFuncs;
+struct ReportFuncs
+{
+    void ( CC * report ) ( uint32_t indent, const char* name, uint32_t count, ... );
+    void ( CC * reportData ) ( uint32_t indent, const char* name, const char* data, uint32_t count, ... );
+    rc_t ( CC * reportData1 ) ( const char* data );
+    void ( CC * reportOpen ) ( uint32_t indent, const char* name, uint32_t count, ... );
+    void ( CC * reportOpen1 ) ( uint32_t indent, const char* name );
+    void ( CC * reportClose ) ( uint32_t indent, const char* name );
+    void ( CC * reportClose1 ) ( const char* name );
+    void ( CC * reportError ) ( uint32_t indent, rc_t rc, const char* function );
+    void ( CC * reportErrorStr ) ( uint32_t indent, rc_t rc, const char* function,
+        const char* name, const char* val );
+    void ( CC * reportErrorStrImpl ) ( uint32_t indent, rc_t rc, const char* function,
+        const char* name, const char* val, bool eol );
+    void ( CC * reportErrorStrInt ) ( uint32_t indent, rc_t rc, const char* function,
+        const char* names, const char* vals, const char* namei, uint32_t vali );
+    void ( CC * reportError3Str ) ( uint32_t indent, rc_t rc, const char* function,
+        const char* name, const char* v1, const char* v2, const char* v3, bool eol );
+};
+
+
+/* InitKFS
+ */
+KLIB_EXTERN void CC ReportInitKFS (
+    rc_t ( CC * report_cwd ) ( const ReportFuncs *f, uint32_t indent ),
+    rc_t ( CC * report_redirect ) ( KWrtHandler* handler,
+        const char* filename, bool* to_file, bool finalize ) );
+
+/* InitConfig
+ *  returns appname if available
+ */
+KLIB_EXTERN const char* CC ReportInitConfig ( rc_t ( CC * report ) ( const ReportFuncs *f, uint32_t indent ) );
+
+
+/* InitVDB
+ */
+KLIB_EXTERN rc_t CC ReportInitVDB(
+    rc_t (CC *report_obj)(const ReportFuncs *f,
+        uint32_t indent, const char *path, bool *wasDbOrTableSet),
+    rc_t (CC *report_software)(const ReportFuncs *f,
+        uint32_t indent, const char *argv_0, const char *date, ver_t tool_ver),
+    rc_t (CC *whack)(void));
+
+
+/* RecordZombieFile
+ */
+KLIB_EXTERN void CC ReportRecordZombieFile ( void );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_klib_priv_ */
diff --git a/interfaces/klib/ksort-macro.h b/interfaces/klib/ksort-macro.h
new file mode 100644
index 0000000..e86d57b
--- /dev/null
+++ b/interfaces/klib/ksort-macro.h
@@ -0,0 +1,257 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_klib_ksort_macro_
+#define _h_klib_ksort_macro_
+
+#include <limits.h>
+#include <stdlib.h>
+
+
+/* Copyright (C) 1991,1992,1996,1997,1999,2004 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Written by Douglas C. Schmidt (schmidt at ics.uci.edu).
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+/* If you consider tuning this algorithm, you should consult first:
+   Engineering a sort function; Jon Bentley and M. Douglas McIlroy;
+   Software - Practice and Experience; Vol. 23 (11), 1249-1265, 1993.  */
+
+/* Discontinue quicksort algorithm when partition gets below this size.
+   This particular magic number was chosen to work best on a Sun 4/260. */
+#ifndef KSORT_MAX_THRESH
+#define KSORT_MAX_THRESH 4
+#endif
+
+/* Stack node declarations used to store unfulfilled partition obligations. */
+#ifndef ksort_stack_node_declared
+#define ksort_stack_node_declared 1
+typedef struct ksort_stack_node ksort_stack_node;
+struct ksort_stack_node
+{
+    char *lo;
+    char *hi;
+};
+#endif
+
+/* The next 4 #defines implement a very fast in-line stack abstraction. */
+/* The stack needs log (total_elements) entries (we could even subtract
+   log(MAX_THRESH)).  Since total_elements has type size_t, we get as
+   upper bound for log (total_elements):
+   bits per byte (CHAR_BIT) * sizeof(size_t).  */
+
+#ifndef KSORT_STACK_SIZE
+#define KSORT_STACK_SIZE	(CHAR_BIT * sizeof(size_t))
+#endif
+
+#ifndef KSORT_PUSH
+#define KSORT_PUSH(low, high)	((void) ((top->lo = (low)), (top->hi = (high)), ++top))
+#endif
+
+#ifndef KSORT_POP
+#define	KSORT_POP(low, high)	((void) (--top, (low = top->lo), (high = top->hi)))
+#endif
+
+#ifndef KSORT_STACK_EMPTY
+#define	KSORT_STACK_EMPTY	( stack >= top )
+#endif
+
+#ifndef KSORT_SWAP
+#define KSORT_SWAP( a, b, off, size )           \
+    do                                          \
+    {                                           \
+        register size_t i, end = off + size;    \
+        register char *__a = (a), *__b = (b);   \
+        for ( i = off; i < end; ++ i )          \
+        {                                       \
+            char __tmp = __a [ i ];             \
+            __a [ i ] = __b [ i ];              \
+            __b [ i ] = __tmp;                  \
+        }                                       \
+    } while (0)
+#endif
+
+#define KSORT_TSWAP( T, a, b )                  \
+    do                                          \
+    {                                           \
+        T tmp = * ( const T* ) ( a );           \
+        * ( T* ) ( a ) = * ( const T* ) ( b );  \
+        * ( T* ) ( b ) = tmp;                   \
+    }                                           \
+    while ( 0 )
+
+
+/* Order size using quicksort.  This implementation incorporates
+   four optimizations discussed in Sedgewick:
+
+   1. Non-recursive, using an explicit stack of pointer that store the
+   next array partition to sort.  To save time, this maximum amount
+   of space required to store an array of SIZE_MAX is allocated on the
+   stack.  Assuming a 32-bit (64 bit) integer for size_t, this needs
+   only 32 * sizeof(stack_node) == 256 bytes (for 64 bit: 1024 bytes).
+   Pretty cheap, actually.
+
+   2. Chose the pivot element using a median-of-three decision tree.
+   This reduces the probability of selecting a bad pivot value and
+   eliminates certain extraneous comparisons.
+
+   3. Only quicksorts TOTAL_ELEMS / MAX_THRESH partitions, leaving
+   insertion sort to order the MAX_THRESH items within each partition.
+   This is a big win, since insertion sort is faster for small, mostly
+   sorted array segments.
+
+   4. The larger of the two sub-partitions is always pushed onto the
+   stack first, with the algorithm then concentrating on the
+   smaller partition.  This *guarantees* no more than log (total_elems)
+   stack size is needed (actually O(1) in this case)!  */
+
+#define KSORT( PBASE, TOTAL_ELEMS, ELEM_SIZE, SWAP_OFFSET, SWAP_SIZE )            \
+    register char *base_ptr = ( char* ) ( PBASE );                                \
+    const size_t max_thresh = KSORT_MAX_THRESH * ( ELEM_SIZE );                   \
+    if ( ( TOTAL_ELEMS ) < 2)                                                     \
+        return;                                                                   \
+    if ( ( TOTAL_ELEMS ) > KSORT_MAX_THRESH)                                      \
+    {                                                                             \
+        char *lo = base_ptr;                                                      \
+        char *hi = & lo [ ( ELEM_SIZE ) * ( ( TOTAL_ELEMS ) - 1 ) ];              \
+        ksort_stack_node stack [ KSORT_STACK_SIZE ];                              \
+        ksort_stack_node *top = stack;                                            \
+        KSORT_PUSH (NULL, NULL);                                                  \
+        while ( ! KSORT_STACK_EMPTY )                                             \
+        {                                                                         \
+            char *left_ptr;                                                       \
+            char *right_ptr;                                                      \
+            char *mid = lo + ( ELEM_SIZE ) * ( ( hi - lo ) / ( ELEM_SIZE ) >> 1 );\
+            if ( CMP ( ( void* ) mid, ( void* ) lo ) < 0 )                        \
+                SWAP ( mid, lo, ( SWAP_OFFSET ), ( SWAP_SIZE ) );                 \
+            if ( CMP ( ( void* ) hi, ( void* ) mid) < 0 )                         \
+                SWAP ( mid, hi, ( SWAP_OFFSET ), ( SWAP_SIZE ) );                 \
+            else                                                                  \
+                goto jump_over;                                                   \
+            if ( CMP ( ( void* ) mid, ( void* ) lo ) < 0 )                        \
+                SWAP ( mid, lo, ( SWAP_OFFSET ), ( SWAP_SIZE ) );                 \
+        jump_over:                                                                \
+            left_ptr  = lo + ( ELEM_SIZE );                                       \
+            right_ptr = hi - ( ELEM_SIZE );                                       \
+            do                                                                    \
+            {                                                                     \
+                while ( CMP ( ( void* ) left_ptr, ( void* ) mid ) < 0 )           \
+                    left_ptr += ( ELEM_SIZE );                                    \
+                while ( CMP ( ( void* ) mid, ( void* ) right_ptr ) < 0 )          \
+                    right_ptr -= ( ELEM_SIZE );                                   \
+                if ( left_ptr < right_ptr )                                       \
+                {                                                                 \
+                    SWAP ( left_ptr, right_ptr, ( SWAP_OFFSET ), ( SWAP_SIZE ) ); \
+                    if ( mid == left_ptr )                                        \
+                        mid = right_ptr;                                          \
+                    else if ( mid == right_ptr )                                  \
+                        mid = left_ptr;                                           \
+                    left_ptr += ( ELEM_SIZE );                                    \
+                    right_ptr -= ( ELEM_SIZE );                                   \
+                }                                                                 \
+                else if ( left_ptr == right_ptr )                                 \
+                {                                                                 \
+                    left_ptr += ( ELEM_SIZE );                                    \
+                    right_ptr -= ( ELEM_SIZE );                                   \
+                    break;                                                        \
+                }                                                                 \
+            }                                                                     \
+            while ( left_ptr <= right_ptr );                                      \
+            if ((size_t) (right_ptr - lo) <= max_thresh)                          \
+            {                                                                     \
+                if ((size_t) (hi - left_ptr) <= max_thresh)                       \
+                    KSORT_POP (lo, hi);                                           \
+                else                                                              \
+                    lo = left_ptr;                                                \
+            }                                                                     \
+            else if ((size_t) (hi - left_ptr) <= max_thresh)                      \
+                hi = right_ptr;                                                   \
+            else if ((right_ptr - lo) > (hi - left_ptr))                          \
+            {                                                                     \
+                KSORT_PUSH (lo, right_ptr);                                       \
+                lo = left_ptr;                                                    \
+            }                                                                     \
+            else                                                                  \
+            {                                                                     \
+                KSORT_PUSH (left_ptr, hi);                                        \
+                hi = right_ptr;                                                   \
+            }                                                                     \
+        }                                                                         \
+    }                                                                             \
+    {                                                                             \
+        register char *run_ptr;                                                   \
+        char *const end_ptr = & base_ptr [(ELEM_SIZE)*((TOTAL_ELEMS)-1)];         \
+        char *tmp_ptr = base_ptr;                                                 \
+        char *thresh = base_ptr + max_thresh;                                     \
+        if ( thresh > end_ptr )                                                   \
+            thresh = end_ptr;                                                     \
+        for (run_ptr = tmp_ptr+(ELEM_SIZE);run_ptr<=thresh;run_ptr+=(ELEM_SIZE))  \
+            if ( CMP ( ( void* ) run_ptr, ( void* ) tmp_ptr ) < 0 )               \
+                tmp_ptr = run_ptr;                                                \
+        if (tmp_ptr != base_ptr)                                                  \
+            SWAP ( tmp_ptr, base_ptr, ( SWAP_OFFSET ), ( SWAP_SIZE ) );           \
+        tmp_ptr = base_ptr + ( ELEM_SIZE );                                       \
+        for ( run_ptr = base_ptr + ( 2 * ( ELEM_SIZE ) );                         \
+              run_ptr <= end_ptr; tmp_ptr = run_ptr, run_ptr += ( ELEM_SIZE ) )   \
+        {                                                                         \
+            for ( ; tmp_ptr >= base_ptr; tmp_ptr -= ( ELEM_SIZE ) )               \
+            {                                                                     \
+                if ( CMP ( run_ptr, tmp_ptr ) >= 0 )                              \
+                    break;                                                        \
+            }                                                                     \
+            tmp_ptr += ( ELEM_SIZE );                                             \
+            if ( tmp_ptr != run_ptr )                                             \
+            {                                                                     \
+                char *trav;                                                       \
+                trav = run_ptr + ( ELEM_SIZE );                                   \
+                while ( --trav >= run_ptr )                                       \
+                {                                                                 \
+                    char c = *trav;                                               \
+                    char *hi, *lo;                                                \
+                    for (hi=lo=trav; (lo-=(ELEM_SIZE)) >= tmp_ptr; hi=lo)         \
+                        *hi = *lo;                                                \
+                    *hi = c;                                                      \
+                }                                                                 \
+            }                                                                     \
+        }                                                                         \
+    }                                                                             \
+    ( void ) 0
+
+#endif /* _h_klib_ksort_macro_ */
diff --git a/interfaces/klib/log.h b/interfaces/klib/log.h
index 04701f2..dd4f6eb 100644
--- a/interfaces/klib/log.h
+++ b/interfaces/klib/log.h
@@ -64,7 +64,7 @@ extern "C" {
  *  "debug" - verbose output for use in debugging
  */
 typedef uint32_t KLogLevel;
-enum KLogLevel
+enum
 {
     klogLevelMin = 0,
     klogFatal = klogLevelMin,
@@ -143,7 +143,7 @@ KLIB_EXTERN rc_t CC KLogLibHandlerSetStdErr (void);
 /* formatting */
 
 typedef uint32_t KLogFmtFlags;
-enum KLogFmtFlags
+enum
 {
     klogFmtTimestamp = 0x00000001,
     klogFmtSeverity = 0x00000002,
diff --git a/interfaces/klib/namelist.h b/interfaces/klib/namelist.h
index a744d02..9826d1e 100644
--- a/interfaces/klib/namelist.h
+++ b/interfaces/klib/namelist.h
@@ -142,6 +142,16 @@ KLIB_EXTERN rc_t CC VNameListCount ( const VNamelist *self, uint32_t *count );
  */
 KLIB_EXTERN rc_t CC VNameListGet ( const VNamelist *self, uint32_t idx, const char **name );
 
+
+/* Reorder
+ *  sort the names according to case sensitivity
+ *  and UNICODE character code ordering
+ *
+ *  "case_insensitive" [ IN ] - when true, perform "tolower" on
+ *   each character before compare
+ */
+KLIB_EXTERN void CC VNamelistReorder ( VNamelist *self, bool case_insensitive );
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/interfaces/klib/out.h b/interfaces/klib/out.h
index 2253e00..02aa06f 100644
--- a/interfaces/klib/out.h
+++ b/interfaces/klib/out.h
@@ -65,6 +65,8 @@ KLIB_EXTERN rc_t CC KOutInit (void);
 
 KLIB_EXTERN rc_t CC KOutMsg (const char * fmt, ...);
 
+#define KOutStr(str) KOutMsg("%s",str)
+
 /*
  * A usage could look like
  *
@@ -72,8 +74,10 @@ KLIB_EXTERN rc_t CC KOutMsg (const char * fmt, ...);
  *
  */
 #define OUTMSG(msg) \
-    (void)((KOutWriterGet() != NULL) ? KOutMsg msg : 0)
+    ((KOutWriterGet() != NULL) ? KOutMsg msg : 0)
 
+#define OUTSTR(msg) \
+    ((KOutWriterGet() != NULL) ? KOutStr (msg) : 0)
 
 #ifdef __cplusplus
 }
diff --git a/interfaces/klib/printf.h b/interfaces/klib/printf.h
index 794ae5d..baf05bc 100644
--- a/interfaces/klib/printf.h
+++ b/interfaces/klib/printf.h
@@ -41,11 +41,24 @@
 extern "C" {
 #endif
 
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct String;
+struct KSymbol;
+struct KWrtHandler;
+
+
 /*--------------------------------------------------------------------------
  * FORMAT
  *  a description of the string_printf formatting
  */
 
+#define SUPPORT_PERCENT_N 1
+
+
 /*
   The standard C library formatting approach was taken as a basis.
 
@@ -61,37 +74,48 @@ extern "C" {
 
     flags
         = ' '           : prepend space to a numeral if it does not have a sign
-        | '-'           : left-align parameter within field
         | '+'           : always produce a sign on numeric conversion
-        | '0'           : left-pad with zeroes rather than spaces
+        | '-'           : left-align parameter within field
+        | '0'           : left-pad with zeros rather than spaces
         | '#'           : use "alternate" representation
         | ','           : produce comma-separated triples
         | '\''          :  "      "
         ;
 
-    field-width
-        = DECIMAL       : a base-10 numeral
+    field-width *(1)
+        = DECIMAL       : an unsigned base-10 numeral
         | '*'           : take field width from args as type 'uint32_t'
         ;
 
-    precision
-        = DECIMAL       : a base-10 numeral
+    precision *(1)(2)(3)
+        = DECIMAL       : an unsigned base-10 numeral
         | '*'           : take precision from args as type 'uint32_t'
+        |               : an empty precision means 0
         ;
 
     index
         = idx           : a single, zero-based vector element
         | idx '-' idx   : a fully-closed, zero-based interval
+        | idx '/' len   : a start index plus length
         ;
 
     idx
-        = DECIMAL       : a base-10 numeral
-        | '$'           : the last element in vector
+        = DECIMAL       : an unsigned base-10 numeral
         | '*'           : take index from args as type 'uint32_t'
+        | '$'           : last vector element
+        |               : an empty index means 0 or $
+        ;
+
+    len
+        = DECIMAL       : a base-10 numeral
+        | '*'           : take length from args as type 'uint32_t'
+        | '$'           : length-of ( vector )
+        |               : an empty length means $
         ;
 
     storage-class-width
-        = 'h'           : half the normal size
+        = 't'           : tiny integer ( i.e. byte )
+        | 'h'           : half the normal size
         | 'l'           : twice the normal size
         | 'z'           : sizeof size_t
         | time-modifier
@@ -103,25 +127,41 @@ extern "C" {
         | 'z'           : date, time and zone
         ;
 
-    storage-class
-        = 'd' | 'i'     : decimal int32_t
-        | 'u'           : decimal uint32_t
-        | 'x'           : lower-case hex uint32_t
-        | 'X'           : upper-case hex uint32_t
-        | 'o'           : octal uint32_t
-        | 'b'           : binary uint32_t
+    scalar storage-class
+        = 'd' | 'i'     : decimal signed integer
+        | 'u'           : decimal unsigned integer
+        | 'x'           : lower-case hex integer
+        | 'X'           : upper-case hex integer
+        | 'o'           : octal integer
+        | 'b'           : binary integer
         | 'p'           : hex void*
         | 'f'           : double
         | 'e'           : scientific notation double
         | 'g'           : general double
         | 'c'           : UTF-32 character
-        | 's'           : UTF-8 string
-        | 'S'           : const String* [ see above ]
         | 'N'           : const KSymbol* [ <klib/symbol.h> ]
-        | 'V'           : tri-part version [ ver_t ]
+        | 'V' *(4)      : tri-part version [ ver_t ]
         | 'R'           : return code [ rc_t ]
         | 'T'           : const KTime*  [ <klib/time.h> ]
         | '!'           ; operating specific error code ( i.e. errno or GetLastError() )
+        | 'n' *(5)      ; output of number of characters printed so far to uint32_t*
+        ;
+
+    single-index vector storage-class *(6)(7)
+        = 'd' | 'i'     : as above
+        | 'u' | 'x'     : index range is ignored
+        | 'X' | 'o'     : start index is used
+        | 'b' | 'p'     : to select element
+        | 'f' | 'e' | 'g'
+        | 'N'           : const KSymbol* [ <klib/symbol.h> ]
+        | 'V' *(4)      : tri-part version [ ver_t ]
+        | 'R'           : return code [ rc_t ]
+        | 'T'           : const KTime*  [ <klib/time.h> ]
+        ;
+
+    index-range vector storage-class *(8)
+        = 'c' *(9)      : unbounded character vector
+        | 's' | 'S'     : bounded character vector
         ;
 
   Notes:
@@ -132,9 +172,21 @@ extern "C" {
         minimum number of fields required.
      4. the storage-class-width is interpreted differently for storage-class
         'T' ( const KTime* )
+     5. %n may not be supported for security purposes
+     6. when an index is specified, the argument is taken as an
+        unbounded vector. if an index range is given, only the
+        starting index is used, and only a single element is selected.
+     7. the vector reference class is determined by both the format
+        and the size modifier.
+     8. an index for character classes may specify a string as the
+        selection. when missing, the default start index is 0 while
+        the default end index is $.
+     9. a character vector is NOT assumed to be NUL-terminated,
+        and in this case the default end index is the start index.
 
  */
 
+
 /* string_printf
  *  provides a facility similar to snprintf
  *  formatting is similar but differs somewhat [ see FORMAT at bottom ]
@@ -162,6 +214,176 @@ KLIB_EXTERN rc_t CC string_vprintf ( char *dst, size_t bsize,
     size_t *num_writ, const char *fmt, va_list args );
 
 
+/*--------------------------------------------------------------------------
+ * structured_printf
+ *  the engine behind string_printf
+ */
+
+/* formatting
+ */
+enum
+{
+    spfNone,                                    /* 'n', sptTerm                       */
+    spfText,                                    /* 'csS', literal                     */
+    spfSignedInt,                               /* 'di'                               */
+    spfUnsigned,                                /* 'bouxX'                            */
+    spfStdFloat,                                /* 'f'                                */
+    spfGenFloat,                                /* 'g'                                */
+    spfSciFloat,                                /* 'e'                                */
+    spfVersion,                                 /* 'V'                                */
+    spfSymbol,                                  /* 'N'                                */
+    spfTime,                                    /* [ 'hlz' + ] 'T'                    */
+    spfRC,                                      /* 'R'                                */
+    spfOSErr                                    /* '!'                                */
+};
+
+/* types
+ */
+enum
+{
+    sptTerm,                                    /* terminates format                  */
+    sptLiteral,                                 /* char literal        - arg in fmt   */
+    sptSignedInt,                               /* signed scalar int   - arg is d     */
+    sptSignedInt8Vect,                          /* signed vector int   - arg is d8    */
+    sptSignedInt16Vect,                         /* signed vector int   - arg is d16   */
+    sptSignedInt32Vect,                         /* signed vector int   - arg is d32   */
+    sptSignedInt64Vect,                         /* signed vector int   - arg is d64   */
+    sptUnsignedInt,                             /* unsigned scalar int - arg is u     */
+    sptUnsignedInt8Vect,                        /* unsigned vector int - arg is u8    */
+    sptUnsignedInt16Vect,                       /* unsigned vector int - arg is u16   */
+    sptUnsignedInt32Vect,                       /* unsigned vector int - arg is u32   */
+    sptUnsignedInt64Vect,                       /* unsigned vector int - arg is u64   */
+    sptFloat,                                   /* scalar float        - arg is f     */
+    sptFloat32Vect,                             /* vector float        - arg is f32   */
+    sptFloat64Vect,                             /* vector float        - arg is f64   */
+    sptFloatLongVect,                           /* vector float        - arg is flong */
+    sptChar,                                    /* scalar character    - arg is c     */
+    sptNulTermString,                           /* vector character    - arg is s     */
+    sptString,                                  /* vector character    - arg is S     */
+    sptUCS2String,                              /* vector character    - arg is S     */
+    sptUTF32String,                             /* vector character    - arg is S     */
+    sptPointer,                                 /* object reference    - arg is p     */
+    sptRowId,                                   /* current row id      - arg is d     */
+    sptRowLen                                   /* current row length  - arg is u     */
+#if SUPPORT_PERCENT_N
+    , sptBytesPrinted                           /* output parameter    - arg is n     */
+#endif
+};
+
+
+/* format
+ *  structured and constant format information
+ *  takes the place of format string
+ *  flags indicate whether fields are active
+ *  and in some cases whether the value is external, in the next arg
+ */
+typedef struct PrintFmt PrintFmt;
+struct PrintFmt
+{
+    union
+    {
+        struct
+        {
+            uint64_t min_field_width;           /* minimum field width in characters  */
+            uint64_t precision;                 /* precision in characters            */
+            uint64_t start_idx;                 /* zero-based starting vector index   */
+            uint64_t select_len;                /* length of selection or 0 for inf   */
+        } f;
+        struct
+        {
+            const char *text;                   /* string literal text pointer        */
+            size_t size;                        /* string literal text size           */
+        } l;
+    } u;
+    unsigned int upper_case_num       : 1;      /* upper-case numerals                */
+    unsigned int reverse_alnum        : 1;      /* reverse ordering of alpha-numeric  */
+    unsigned int thousands_separate   : 1;      /* separate numerals by thousands     */
+    unsigned int ext_field_width      : 1;      /* field width is external argument   */
+    unsigned int ext_precision        : 1;      /* precision is external argument     */
+    unsigned int inf_start_index      : 1;      /* start index is last in vector      */
+    unsigned int ext_start_index      : 1;      /* start index is external argument   */
+    unsigned int inf_stop_index       : 1;      /* stop index is last in vector       */
+    unsigned int ext_stop_index       : 1;      /* stop index is an external argument */
+    unsigned int ext_select_len       : 1;      /* selection length is external       */
+    unsigned int add_prefix           : 1;      /* '#' flag on 'boxX'                 */
+    unsigned int force_decimal_point  : 1;      /* '#' flag on 'efg'                  */
+    unsigned int leave_trailing_zeros : 1;      /* '#' flag on 'g'                    */
+    unsigned int print_time           : 1;
+    unsigned int print_date           : 1;
+    unsigned int print_weekday        : 1;
+    unsigned int print_timezone       : 1;
+    unsigned int hour_24              : 1;
+    unsigned int min_vers_components  : 1;
+    unsigned int explain_rc           : 1;
+    unsigned int type_cast            : 1;      /* if true, convert type for fmt      */
+    unsigned int pointer_arg          : 1;      /* argument is a pointer              */
+    uint32_t radix;                             /* 0 default, 2, 8, 10, 16, .. 36     */
+    uint8_t fmt;                                /* spf... from above                  */
+    uint8_t type;                               /* spt... from above                  */
+    char sign;                                  /* 0, ' ' or '+'                      */
+    char left_fill;                             /* 0 for left-align, ' ' or '0'       */
+};
+
+
+/* argument
+ *  union of argument values
+ *  passed as an array, much like va_arg
+ */
+typedef union PrintArg PrintArg;
+union PrintArg
+{
+    int64_t d;                                  /* signed integer scalar              */
+    const int8_t *d8;                           /* signed integer vectors             */
+    const int16_t *d16;
+    const int32_t *d32;
+    const int64_t *d64;
+
+    uint64_t u;                                 /* unsigned integer scalar            */
+    const uint8_t *u8;                          /* unsigned integer vectors           */
+    const uint16_t *u16;
+    const uint32_t *u32;
+    const uint64_t *u64;
+
+    double f;                                   /* floating point scalar              */
+    const float *f32;                           /* floating point vectors             */
+    const double *f64;
+    const long double *flong;
+
+    uint32_t c;                                 /* character scalar                   */
+    const char *s;                              /* NUL-terminated char vector         */
+    struct String const *S;                     /* character vector                   */
+
+    const void *p;                              /* object reference                   */
+
+#if SUPPORT_PERCENT_N
+    uint32_t *n;                                /* output parameter                   */
+#endif
+};
+
+
+/* structured_printf
+ *  uses constant format descriptors and argument block
+ *  prints to "out" handler
+ */
+KLIB_EXTERN rc_t CC structured_printf ( struct KWrtHandler const *out,
+    size_t *num_writ, const PrintFmt *fmt, const PrintArg *args );
+
+
+/* structured_sprintf
+ *  uses constant format descriptors and argument block
+ *  prints to UTF-8 character buffer "dst"
+ */
+KLIB_EXTERN rc_t CC structured_sprintf ( char *dst, size_t bsize,
+    size_t *num_writ, const PrintFmt *fmt, const PrintArg *args );
+
+
+/* TEMPORARY */
+KLIB_EXTERN rc_t CC new_string_printf ( char *dst, size_t bsize,
+    size_t *num_writ, const char *fmt, ... );
+KLIB_EXTERN rc_t CC new_string_vprintf ( char *dst, size_t bsize,
+    size_t *num_writ, const char *fmt, va_list args );
+
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/interfaces/klib/rc.h b/interfaces/klib/rc.h
index b9de799..e7ad1a4 100644
--- a/interfaces/klib/rc.h
+++ b/interfaces/klib/rc.h
@@ -35,10 +35,15 @@
 #include <klib/defs.h>
 #endif
 
-#if ! defined _h_compiler_ && _DEBUGGING
+#if _DEBUGGING
+
+#ifndef _h_compiler_
 #include <compiler.h>
 #endif
 
+#include <assert.h>
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -74,7 +79,7 @@ extern "C" {
 #if _DEBUGGING && ! defined RECORD_RC_FILE_LINE
 #define RECORD_RC_FILE_LINE 1
 #elif ! defined RECORD_RC_FILE_LINE
-#define RECORD_RC_FILE_LINE 1
+#define RECORD_RC_FILE_LINE 0
 #endif
 
 
@@ -99,10 +104,11 @@ RC_ENUM ( RCModule )
     RC_ENTRY ( rcSRA, "short read archive" )
     RC_VLAST ( rcLastModule_v1_0 )
     RC_ENTRY ( rcKFG = rcLastModule_v1_0, "configuration" )
-    RC_ENTRY ( rcAlign, "alignment module" )
+    RC_ENTRY ( rcAlign, "alignment" )
     RC_ENTRY ( rcKrypto, "cryptographic" )
     RC_ENTRY ( rcRDBMS, "RDBMS" )
     RC_ENTRY ( rcNS, "network system" )
+    RC_ENTRY ( rcVFS, "virtual file system" )
     RC_LAST ( rcLastModule_v1_1 )
 };
 
@@ -168,15 +174,11 @@ RC_ENUM ( RCTarget )
     RC_VLAST ( rcLastTarget_v1_0 )
     RC_ENTRY ( rcProduction = rcLastTarget_v1_0, "schema production" )
     RC_ENTRY ( rcEncryptionKey, "encryption key" )
-    RC_ENTRY ( rcInput, "input" )
     RC_ENTRY ( rcRng, "random number generator" )
-    RC_ENTRY ( rcTest, "test" )
     RC_ENTRY ( rcCmd, "command" )
-    RC_ENTRY ( rcConfig, "configuration" )
     RC_ENTRY ( rcData, "data" )
     RC_ENTRY ( rcQuery, "query" )
     RC_ENTRY ( rcUri, "uri" )
-    RC_ENTRY ( rcWriter, "stream writer" )
     RC_LAST ( rcLastTarget_v1_1 )
 };
 
@@ -253,6 +255,7 @@ RC_ENUM ( RCContext )
     RC_ENTRY ( rcRetrieving, "retrieving" )
     RC_ENTRY ( rcSending, "sending" )
     RC_ENTRY ( rcProcessing, "processing" )
+    RC_ENTRY ( rcIdentifying, "type identifying" )
     RC_LAST ( rcLastContext_v1_1 )
 };
 
@@ -352,6 +355,7 @@ RC_ENUM ( RCState )
     RC_ENTRY ( rcUnequal, "unequal" )
     RC_ENTRY ( rcFailed, "failed" )
     RC_ENTRY ( rcNotAvailable, "not available" )
+    RC_ENTRY ( rcWrongType, "wrong type" )
     RC_LAST ( rcLastState_v1_1 )
 };
 
@@ -365,95 +369,65 @@ KLIB_EXTERN bool CC GetUnreadRCInfo ( rc_t *rc, const char **filename, const cha
 
 #if RECORD_RC_FILE_LINE
 
-#define SET_RC_FILE_FUNC_LINE( rc ) \
-    SetRCFileFuncLine ( ( rc ), __FILE__, __func__, __LINE__ )
+    #if defined(__SUNPRO_CC)  &&  __SUNPRO_CC <= 0x590  &&  defined(__cplusplus)
+    
+        #define SET_RC_FILE_FUNC_LINE( rc ) \
+            SetRCFileFuncLine ( ( rc ), __FILE__, "(unknown)", __LINE__ )
+    
+    #else
+    
+        #define SET_RC_FILE_FUNC_LINE( rc ) \
+            SetRCFileFuncLine ( ( rc ), __FILE__, __func__, __LINE__ )
+    
+    #endif
+
 #else
 
-#define SET_RC_FILE_FUNC_LINE( rc ) \
-    ( rc_t ) ( rc )
+    #define SET_RC_FILE_FUNC_LINE( rc ) \
+        ( rc_t ) ( rc )
 
 #endif
 
-/* for C++ they are all inline functions to allow type checks for parameters */
-#ifdef __cplusplus
-
-/* CTX
- *  form a context from parts
- */
-static __inline__
-rc_t CTX ( enum RCModule mod, enum RCTarget targ, enum RCContext ctx )
-{
 #ifdef assert
-    assert ( rcLastModule_v1_1 <= ( 1 << 5 ) );
-    assert ( rcLastTarget_v1_1 <= ( 1 << 6 ) );
-    assert ( rcLastContext_v1_1 <= ( 1 << 7 ) );
-    assert ( mod < rcLastModule_v1_1 );
-    assert ( targ < rcLastTarget_v1_1 );
-    assert ( ctx < rcLastContext_v1_1 );
-#endif
-    return ( rc_t ) (
-        ( ( rc_t ) mod  << 27 ) |  /* 5 bits */
-        ( ( rc_t ) targ << 21 ) |  /* 6 bits */
-        ( ( rc_t ) ctx  << 14 ) ); /* 7 bits */
-}
+#define ASSERT_MOD_TARG_CTX() \
+    assert ( ( int ) rcLastModule_v1_1  < ( 1 << 5 ) ), \
+    assert ( ( int ) rcLastTarget_v1_1  < ( 1 << 6 ) ), \
+    assert ( ( int ) rcLastContext_v1_1  < ( 1 << 7 ) )
+
+#define ASSERT_OBJ_STATE() \
+    assert ( ( int ) rcLastObject_v1_1  < ( 1 << 8 ) ), \
+    assert ( ( int ) rcLastState_v1_1  < ( 1 << 6 ) )
+#else
+#define ASSERT_MOD_TARG_CTX() ( void ) 0
 
-/* RC
-*  form a complete return code from parts
-*/
-static __inline__
-rc_t RC ( enum RCModule mod, enum RCTarget targ, enum RCContext ctx, int obj, enum RCState state )
-{
-#ifdef assert
-    assert ( rcLastObject_v1_1 <= ( 1 << 8 ) );
-    assert ( rcLastState_v1_1 <= ( 1 << 6 ) );
-    assert ( obj < rcLastObject_v1_1 );
-    assert ( state < rcLastState_v1_1 );
+#define ASSERT_OBJ_STATE() ( void ) 0
 #endif
-    return SET_RC_FILE_FUNC_LINE (
-        CTX ( mod, targ, ctx ) | /* 18 bits */
-        ( ( rc_t ) obj << 6 )  | /*  8 bits */
-        ( ( rc_t ) state ) );    /*  6 bits */
-
-}
 
-/* ResetRCContext
-*  rewrite rc to reflect different context
-*  typically used to pass out return codes
-*/
-static __inline__
-rc_t ResetRCContext ( rc_t rc, enum RCModule mod, enum RCTarget targ, enum RCContext ctx )
-{
-    return ( rc & 0x3FFF ) | CTX ( mod, targ, ctx );
-}
-
-/* ResetRCState
-*  rewrite rc to reflect different state
-*  typically used to pass out return codes
-*/
-static __inline__
-rc_t ResetRCState( rc_t rc, int obj, enum RCState state )
-{
-    return ( rc & 0xFFFFC000 )    | /* 18 bits */
-        ( ( rc_t ) obj << 6 )     | /*  8 bits */
-        ( ( rc_t ) state );         /*  6 bits */
-}
-
-#else /* __cplusplus */
-
-#define CTX( mod, targ, ctx ) \
-    ( rc_t ) (                                      \
+/* CTX
+ *  form a context from parts
+ */
+#define CTX( mod, targ, ctx )                       \
+    ( rc_t ) ( ASSERT_MOD_TARG_CTX (), (            \
         ( ( rc_t ) ( mod )  << 27 ) | /* 5 bits */  \
         ( ( rc_t ) ( targ ) << 21 ) | /* 6 bits */  \
-        ( ( rc_t ) ( ctx )  << 14 ) ) /* 7 bits */
+        ( ( rc_t ) ( ctx )  << 14 ) ) /* 7 bits */  \
+    )
 
 /* RC
  *  form a complete return code from parts
  */
+#define SILENT_RC( mod, targ, ctx, obj, state )              \
+    ( rc_t ) ( ASSERT_OBJ_STATE (),                          \
+        CTX ( mod, targ, ctx )    | /* 18 bits */            \
+        ( ( rc_t ) ( obj ) << 6 ) | /*  8 bits */            \
+        ( ( rc_t ) ( state ) ) )    /*  6 bits */
+
 #define RC( mod, targ, ctx, obj, state )                     \
+    ( rc_t ) ( ASSERT_OBJ_STATE (),                          \
     SET_RC_FILE_FUNC_LINE (                                  \
         CTX ( mod, targ, ctx )    | /* 18 bits */            \
         ( ( rc_t ) ( obj ) << 6 ) | /*  8 bits */            \
-        ( ( rc_t ) ( state ) ) )    /*  6 bits */
+        ( ( rc_t ) ( state ) ) ) )  /*  6 bits */
 
 /* ResetRCContext
  *  rewrite rc to reflect different context
@@ -501,7 +475,6 @@ rc_t ResetRCState( rc_t rc, int obj, enum RCState state )
 #define GetRCState( rc ) \
     ( enum RCState ) ( ( rc ) & 0x3F )
 
-#endif /* RC_EMIT */
 
 #ifdef __cplusplus
 }
diff --git a/interfaces/klib/refcount.h b/interfaces/klib/refcount.h
index 8984577..bc7cfd5 100644
--- a/interfaces/klib/refcount.h
+++ b/interfaces/klib/refcount.h
@@ -50,10 +50,6 @@
 
 #include <klib/debug.h>
 
-#ifndef _h_fmtdef_
-#include <fmtdef.h>
-#endif
-
 #endif
 
 #ifdef __cplusplus
@@ -233,8 +229,8 @@ KLIB_EXTERN int CC KDualRefDropDep ( const KDualRef *self, const char *clsname )
                                 "instance 0x%zX: initial refcount %d\n",  \
                                 clsname, op, name, instance, refcount ))
 #define CNTMSG( clsname, op, instance, refcount )                       \
-    DBGMSG ( REFMOD, REFCOND, ( "about to %s instance 0x%zX: prior refcount = %d\n", \
-                                op, instance, refcount ))
+    DBGMSG ( REFMOD, REFCOND, ( "about to %s instance 0x%zX: prior refcount = %d for %s\n", \
+                                op, instance, refcount, clsname ))
 #define REFMSG( clsname, op, instance ) \
     CNTMSG ( clsname, op, instance, atomic32_read ( instance ) )
 #define REFNEW_COMMA( clsname, op, name, instance, refcount ) \
diff --git a/interfaces/klib/report.h b/interfaces/klib/report.h
new file mode 100644
index 0000000..2c60e2f
--- /dev/null
+++ b/interfaces/klib/report.h
@@ -0,0 +1,98 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_klib_report_
+#define _h_klib_report_
+
+#ifndef _h_klib_extern_
+#include <klib/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * An unrecoverable error happened.
+ * We can help to solve it
+ * by reporting information about known application execution environment.
+ */
+
+
+/* Init
+ *  initialize with common information
+ *
+ *  "argc" [ IN ] and "argv" [ IN ] - intact command line
+ *
+ *  "tool_version" [ IN ] - version of tool
+ */
+KLIB_EXTERN void CC ReportInit ( int argc, char *argv [],
+    ver_t tool_version );
+
+
+/* BuildDate
+ *  set the build date of the tool
+ *
+ *  "date" [ IN ] - pre-processor __DATE__
+ */
+KLIB_EXTERN void CC ReportBuildDate ( const char *date );
+
+
+/* Silence
+ *  tell report to be silent at exit
+ *  useful especially in response to ^C
+ */
+KLIB_EXTERN void CC ReportSilence ( void );
+
+
+/* Finalize
+ *  perform cleanup
+ *  optionally report error condition
+ *
+ *  "rc" [ IN ] - report environment information if not zero
+ */
+KLIB_EXTERN rc_t CC ReportFinalize ( rc_t rc );
+
+
+/* ResetObject
+ *  Resets the name of the current object beeing processes(path or accession),
+ *  usually from command line.
+ *  Should be called each time
+ *  when starting next command line argument processing.
+ */
+KLIB_EXTERN rc_t CC ReportResetObject ( const char *path );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_klib_report_ */
diff --git a/interfaces/klib/sort.h b/interfaces/klib/sort.h
index dd986c2..4adf75a 100644
--- a/interfaces/klib/sort.h
+++ b/interfaces/klib/sort.h
@@ -35,6 +35,10 @@
 #include <klib/defs.h>
 #endif
 
+#ifndef _h_klib_ksort_macro_
+#include <klib/ksort-macro.h>
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -48,6 +52,62 @@ KLIB_EXTERN void CC ksort ( void *pbase, size_t total_elems, size_t size,
     int ( CC * cmp ) ( const void*, const void*, void *data ), void *data );
 
 
+/* various custom ksort operations
+ *  structures will generally want their own functions
+ *  these fundamental types can be standardized
+ */
+KLIB_EXTERN void CC ksort_int32_t ( int32_t *pbase, size_t total_elems );
+KLIB_EXTERN void CC ksort_uint32_t ( uint32_t *pbase, size_t total_elems );
+KLIB_EXTERN void CC ksort_int64_t ( int64_t *pbase, size_t total_elems );
+KLIB_EXTERN void CC ksort_uint64_t ( uint64_t *pbase, size_t total_elems );
+
+
+/* KSORT
+ *  macro ( see <klib/ksort-macro.h> )
+ *  allows creation of a custom qsort with inlined compare and swap
+ *  MUCH faster than normal qsort or ksort.
+ *
+ *  basically you need to define a macro CMP() and another SWAP(),
+ *  and the KSORT macro will fill in the rest.
+ *
+ *  CMP() needs to evaluate to a signed 32-bit integer.
+ *  THIS WILL CHANGE TO BECOME LESS_THAN( a, b ).
+ *
+ *  SWAP() will generally be a custom operation, but can be
+ *  defined in terms of a default operation similar to qsort.
+ *
+ *  an example usage follows:
+ */
+#if 0
+static
+void ksort_int64_t ( int64_t *base, size_t count )
+{
+    /* swap is performed on full element, not byte-for-byte */
+#define SWAP( a, b, off, size )                             \
+    do                                                      \
+    {                                                       \
+        int64_t tmp = * ( const int64_t* ) ( a );           \
+        * ( int64_t* ) ( a ) = * ( const int64_t* ) ( b );  \
+        * ( int64_t* ) ( b ) = tmp;                         \
+    }                                                       \
+    while ( 0 )
+
+    /* 64-bit comparison producing a signed 32-bit result */
+#define CMP( a, b )                                                     \
+    ( ( * ( const int64_t* ) ( a ) < * ( const int64_t* ) ( b ) ) ? -1 : \
+      ( * ( const int64_t* ) ( a ) > * ( const int64_t* ) ( b ) ) )
+}
+
+    /* let the macro fill out the remainder */
+    KSORT ( base, count, sizeof * base, 0, sizeof * base );
+
+    /* free up macros for future use */
+#undef SWAP
+#undef CMP
+
+#endif
+
+
 /*--------------------------------------------------------------------------
  * kbsearch
  *  bsearch with a function data pointer
diff --git a/interfaces/klib/status.h b/interfaces/klib/status.h
index 73249c8..718c38f 100644
--- a/interfaces/klib/status.h
+++ b/interfaces/klib/status.h
@@ -78,7 +78,7 @@ KLIB_EXTERN rc_t CC KStsLibHandlerSetStdErr ( void );
 
 /* formatting */
 typedef uint32_t KStsFmtFlags;
-enum KStsFmtFlags
+enum KStsFmtFlagsEnum
 {
     kstsFmtTimestamp = 0x00000001,
     kstsFmtPid = 0x00000002,
diff --git a/interfaces/klib/vector.h b/interfaces/klib/vector.h
index 4bc553b..be72b90 100644
--- a/interfaces/klib/vector.h
+++ b/interfaces/klib/vector.h
@@ -41,6 +41,161 @@ extern "C" {
 
 
 /*--------------------------------------------------------------------------
+ * KVector
+ *  encapsulated vector interface
+ *
+ *  a vector obeys a particular set of messages
+ *  it may be implemented as an array, but not necessarily.
+ *
+ *  the principal property of a vector is that it acts as a map
+ *  between an integer key and a value of some type. in this case,
+ *  we only accept unsigned integers as keys.
+ */
+typedef struct KVector KVector;
+
+
+/* Make
+ *  create an empty vector
+ */
+KLIB_EXTERN rc_t CC KVectorMake ( KVector **v );
+
+
+/* AddRef
+ * Release
+ */
+KLIB_EXTERN rc_t CC KVectorAddRef ( const KVector *self );
+KLIB_EXTERN rc_t CC KVectorRelease ( const KVector *self );
+
+
+/* Get
+ *  get an untyped value
+ *  returns rc_t state of rcNull if index is not set
+ *
+ *  "key" [ IN ] - vector index
+ *
+ *  "value_buffer" [ OUT ] and "bsize" [ IN ] - return buffer for value
+ *
+ *  "bytes" [ OUT ] - return parameter for bytes in value
+ *
+ * NB - if rc_t state is rcInsufficient, "bytes" will contain
+ *  the number of bytes required to access the indexed value
+ */
+KLIB_EXTERN rc_t CC KVectorGet ( const KVector *self, uint64_t key,
+    void *value_buffer, size_t bsize, size_t *bytes );
+
+/* Get
+ *  get typed values
+ *  returns rc_t state of rcNull if index is not set
+ *
+ *  "key" [ IN ] - vector index
+ *
+ *  "value" [ OUT ] - return parameter for value
+ */
+KLIB_EXTERN rc_t CC KVectorGetBool ( const KVector *self, uint64_t key, bool *value );
+
+KLIB_EXTERN rc_t CC KVectorGetI8 ( const KVector *self, uint64_t key, int8_t *value );
+KLIB_EXTERN rc_t CC KVectorGetI16 ( const KVector *self, uint64_t key, int16_t *value );
+KLIB_EXTERN rc_t CC KVectorGetI32 ( const KVector *self, uint64_t key, int32_t *value );
+KLIB_EXTERN rc_t CC KVectorGetI64 ( const KVector *self, uint64_t key, int64_t *value );
+
+KLIB_EXTERN rc_t CC KVectorGetU8 ( const KVector *self, uint64_t key, uint8_t *value );
+KLIB_EXTERN rc_t CC KVectorGetU16 ( const KVector *self, uint64_t key, uint16_t *value );
+KLIB_EXTERN rc_t CC KVectorGetU32 ( const KVector *self, uint64_t key, uint32_t *value );
+KLIB_EXTERN rc_t CC KVectorGetU64 ( const KVector *self, uint64_t key, uint64_t *value );
+
+KLIB_EXTERN rc_t CC KVectorGetF32 ( const KVector *self, uint64_t key, float *value );
+KLIB_EXTERN rc_t CC KVectorGetF64 ( const KVector *self, uint64_t key, double *value );
+
+KLIB_EXTERN rc_t CC KVectorGetPtr ( const KVector *self, uint64_t key, void **value );
+
+
+/* Set
+ *  set an untyped value
+ *
+ *  "key" [ IN ] - vector index
+ *
+ *  "value" [ IN ] and "bytes" [ IN ] - value buffer
+ */
+KLIB_EXTERN rc_t CC KVectorSet ( KVector *self, uint64_t key,
+    const void *value, size_t bytes );
+
+/* Set
+ *  set typed values
+ *
+ *  "key" [ IN ] - vector index
+ *
+ *  "data" [ IN ] - value
+ */
+KLIB_EXTERN rc_t CC KVectorSetBool ( KVector *self, uint64_t key, bool value );
+
+KLIB_EXTERN rc_t CC KVectorSetI8 ( KVector *self, uint64_t key, int8_t value );
+KLIB_EXTERN rc_t CC KVectorSetI16 ( KVector *self, uint64_t key, int16_t value );
+KLIB_EXTERN rc_t CC KVectorSetI32 ( KVector *self, uint64_t key, int32_t value );
+KLIB_EXTERN rc_t CC KVectorSetI64 ( KVector *self, uint64_t key, int64_t value );
+
+KLIB_EXTERN rc_t CC KVectorSetU8 ( KVector *self, uint64_t key, uint8_t value );
+KLIB_EXTERN rc_t CC KVectorSetU16 ( KVector *self, uint64_t key, uint16_t value );
+KLIB_EXTERN rc_t CC KVectorSetU32 ( KVector *self, uint64_t key, uint32_t value );
+KLIB_EXTERN rc_t CC KVectorSetU64 ( KVector *self, uint64_t key, uint64_t value );
+
+KLIB_EXTERN rc_t CC KVectorSetF32 ( KVector *self, uint64_t key, float value );
+KLIB_EXTERN rc_t CC KVectorSetF64 ( KVector *self, uint64_t key, double value );
+
+KLIB_EXTERN rc_t CC KVectorSetPtr ( KVector *self, uint64_t key, const void *value );
+
+
+/* Unset
+ *  unset an entry
+ *  returns rc_t state rcNull if index is not set
+ *
+ *  "key" [ IN ] - vector index
+ */
+KLIB_EXTERN rc_t CC KVectorUnset ( KVector *self, uint64_t key );
+
+
+/* Visit
+ *  executes a function on each key/value pair
+ *  returns early if "f" returns non-zero rc_t
+ *
+ *  "reverse" [ IN ] - if true, execute in reverse order
+ *
+ *  "f" [ IN ] and "user_data" [ IN, OPAQUE ] - function to be
+ *  executed on each vector element or until the function
+ *  returns true.
+ */
+KLIB_EXTERN rc_t CC KVectorVisit ( const KVector *self, bool reverse,
+    rc_t ( CC * f ) ( uint64_t key, const void *value, size_t bytes, void *user_data ),
+    void *user_data );
+
+/* Visit
+ *  visit typed values
+ *  returns early if "f" returns non-zero rc_t
+ *
+ *  "reverse" [ IN ] - if true, execute in reverse order
+ *
+ *  "f" [ IN ] and "user_data" [ IN, OPAQUE ] - function to be
+ *  executed on each vector element or until the function
+ *  returns true.
+ */
+KLIB_EXTERN rc_t CC KVectorVisitBool ( const KVector *self, bool reverse,
+    rc_t ( CC * f ) ( uint64_t key, bool value, void *user_data ),
+    void *user_data );
+KLIB_EXTERN rc_t CC KVectorVisitI64 ( const KVector *self, bool reverse,
+    rc_t ( CC * f ) ( uint64_t key, int64_t value, void *user_data ),
+    void *user_data );
+KLIB_EXTERN rc_t CC KVectorVisitU64 ( const KVector *self, bool reverse,
+    rc_t ( CC * f ) ( uint64_t key, uint64_t value, void *user_data ),
+    void *user_data );
+KLIB_EXTERN rc_t CC KVectorVisitF64 ( const KVector *self, bool reverse,
+    rc_t ( CC * f ) ( uint64_t key, double value, void *user_data ),
+    void *user_data );
+KLIB_EXTERN rc_t CC KVectorVisitPtr ( const KVector *self, bool reverse,
+    rc_t ( CC * f ) ( uint64_t key, const void *value, void *user_data ),
+    void *user_data );
+
+
+
+/*--------------------------------------------------------------------------
  * Vector
  *  simple vector of void*
  */
diff --git a/interfaces/klib/xml.h b/interfaces/klib/xml.h
deleted file mode 100644
index 165a6e6..0000000
--- a/interfaces/klib/xml.h
+++ /dev/null
@@ -1,355 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#ifndef _h_klib_xml_
-#define _h_klib_xml_
-
-#ifndef _h_klib_extern_
-#include <klib/extern.h>
-#endif
-
-#ifndef _h_klib_defs_
-#include <klib/defs.h>
-#endif
-
-#include <stdarg.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/*--------------------------------------------------------------------------
- * forwards
- */
-struct KFile;
-struct KNamelist;
-struct KXMLNodeset;
-
-
-/*--------------------------------------------------------------------------
- * XML node
- */
-typedef struct KXMLNode KXMLNode;
-
-/* AddRef
- * Release
- */
-KLIB_EXTERN rc_t CC KXMLNodeAddRef ( const KXMLNode *self );
-KLIB_EXTERN rc_t CC KXMLNodeRelease ( const KXMLNode *self );
-
-/* GetName
- * Get node path from parent nodeset
- */
-KLIB_EXTERN rc_t CC KXMLNodeGetName ( const KXMLNode *self, const char **name );
-
-/* Get element name (tag)
- */
-KLIB_EXTERN rc_t CC KXMLNodeElementName ( const KXMLNode *self, const char **name );
-
-/* Read
- */
-KLIB_EXTERN rc_t CC KXMLNodeRead ( const KXMLNode *self,
-    size_t offset, void *buffer, size_t size,
-    size_t *num_read, size_t *remaining );
-
-/* Write
- */
-KLIB_EXTERN rc_t CC KXMLNodeWrite ( KXMLNode *self,
-    size_t offset, const void *buffer, size_t size );
-
-/* Append
- */
-KLIB_EXTERN rc_t CC KXMLNodeAppend ( KXMLNode *self,
-    const void *buffer, size_t bsize );
-
-
-/* ReadAs ( formatted )
- *  reads as integer or float value in native byte order
- *  casts smaller-sized values to desired size, e.g.
- *    uint32_t to uint64_t
- *
- *  "i" [ OUT ] - return parameter for signed integer
- *  "u" [ OUT ] - return parameter for unsigned integer
- *  "f" [ OUT ] - return parameter for double float
- */
-KLIB_EXTERN rc_t CC KXMLNodeReadAsI16 ( const KXMLNode *self, int16_t *i );
-KLIB_EXTERN rc_t CC KXMLNodeReadAsU16 ( const KXMLNode *self, uint16_t *u );
-KLIB_EXTERN rc_t CC KXMLNodeReadAsI32 ( const KXMLNode *self, int32_t *i );
-KLIB_EXTERN rc_t CC KXMLNodeReadAsU32 ( const KXMLNode *self, uint32_t *u );
-KLIB_EXTERN rc_t CC KXMLNodeReadAsI64 ( const KXMLNode *self, int64_t *i );
-KLIB_EXTERN rc_t CC KXMLNodeReadAsU64 ( const KXMLNode *self, uint64_t *u );
-KLIB_EXTERN rc_t CC KXMLNodeReadAsF64 ( const KXMLNode *self, double *f );
-
-
-/* ReadCString ( formatted )
- *  reads as C-string
- *
- *  "buffer" [ OUT ] and "bsize" [ IN ] - output buffer for
- *  NUL terminated string.
- *
- *  "size" [ OUT ] - return parameter giving size of string
- *  not including NUL byte. the size is set both upon success
- *  and insufficient buffer space error.
- */
-KLIB_EXTERN rc_t CC KXMLNodeReadCString ( const KXMLNode *self,
-    char *buffer, size_t bsize, size_t *size );
-
-/* ReadCStr
- *  reads node value as C-string
- *
- *  "str" [ IN ] - returned pointer to a NULL terminated string.
- *                 Caller responsible to dealloc (free)!
- *  "default_value" [IN] - default value used in case node value is empty, NULL - none
- */
-KLIB_EXTERN rc_t CC KXMLNodeReadCStr( const KXMLNode *self, char** str, const char* default_value );
-
-/* Write ( formatted )
- *  writes string
- *
- *  "str" [ IN ] - NULL terminated string.
- */
-KLIB_EXTERN rc_t CC KXMLNodeWriteCString ( KXMLNode *self, const char *str );
-
-
-/* OpenNodesetRead
- *
- * NB. OpenNodesetRead could return Nodeset with 0 elements.
- *  To make sure the node exists you should verify that (KXMLNodesetCount > 0)
- */
-KLIB_EXTERN rc_t CC KXMLNodeOpenNodesetRead ( const KXMLNode *self,
-    struct KXMLNodeset const **ns, const char *path, ... );
-KLIB_EXTERN rc_t CC KXMLNodeVOpenNodesetRead ( const KXMLNode *self,
-    struct KXMLNodeset const **ns, const char *path, va_list args );
-
-/* OpenNodesetUpdate
- */
-KLIB_EXTERN rc_t CC KXMLNodeOpenNodesetUpdate ( KXMLNode *self,
-    struct KXMLNodeset **ns, const char *path, ... );
-KLIB_EXTERN rc_t CC KXMLNodeVOpenNodesetUpdate ( KXMLNode *self,
-    struct KXMLNodeset **ns, const char *path, va_list args );
-
-/* ReadAttr
- */
-KLIB_EXTERN rc_t CC KXMLNodeReadAttr ( const KXMLNode *self,
-     const char *attr, void *buffer, size_t bsize,
-     size_t *num_read, size_t *remaining );
-
-/* WriteAttr
- */
-KLIB_EXTERN rc_t CC KXMLNodeWriteAttr ( KXMLNode *self,
-     const char *attr, const void *buffer, size_t size );
-
-
-/* ReadAttrAs ( formatted )
- *  reads as integer or float value in native byte order
- *  casts smaller-sized values to desired size, e.g.
- *    uint32_t to uint64_t
- *
- *  "i" [ OUT ] - return parameter for signed integer
- *  "u" [ OUT ] - return parameter for unsigned integer
- *  "f" [ OUT ] - return parameter for double float
- */
-KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsI16 ( const KXMLNode *self, const char *attr, int16_t *i );
-KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsU16 ( const KXMLNode *self, const char *attr, uint16_t *u );
-KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsI32 ( const KXMLNode *self, const char *attr, int32_t *i );
-KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsU32 ( const KXMLNode *self, const char *attr, uint32_t *u );
-KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsI64 ( const KXMLNode *self, const char *attr, int64_t *i );
-KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsU64 ( const KXMLNode *self, const char *attr, uint64_t *u );
-KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsF64 ( const KXMLNode *self, const char *attr, double *f );
-
-
-/* ReadAttrCString ( formatted )
- *  reads as C-string
- *
- *  "buffer" [ OUT ] and "bsize" [ IN ] - output buffer for
- *  NUL terminated string.
- *
- *  "size" [ OUT ] - return parameter giving size of string
- *  not including NUL byte. the size is set both upon success
- *  and insufficient buffer space error.
- */
-KLIB_EXTERN rc_t CC KXMLNodeReadAttrCString ( const KXMLNode *self, const char *attr,
-    char *buffer, size_t bsize, size_t *size );
-
-/* ReadAttrCStr
- *  reads attribute as C-string
- *
- *  "str" [ IN ] - returned pointer to a NULL terminated string.
- *                 Caller responsible to dealloc (free)!
- *  "default_value" [IN] - default value used in case node value is empty, NULL - none
- */
-KLIB_EXTERN rc_t CC KXMLNodeReadAttrCStr( const KXMLNode *self, const char *attr, char** str, const char* default_value);
-
-/* CountChildNodes
- *  count child nodes
- */
-KLIB_EXTERN rc_t CC KXMLNodeCountChildNodes(const KXMLNode *self,
-    uint32_t *count);
-
-/* GetNodeRead
- *  access indexed node
- *  "idx" [ IN ] - a zero-based index
- */
-KLIB_EXTERN rc_t CC KXMLNodeGetNodeRead ( const KXMLNode *self,
-    const KXMLNode **node, uint32_t idx );
-
-/* ListAttr
- *  list all named attributes
- */
-KLIB_EXTERN rc_t CC KXMLNodeListAttr ( const KXMLNode *self,
-    struct KNamelist const **names );
-
-/* ListChild
- *  list all named children
- */
-KLIB_EXTERN rc_t CC KXMLNodeListChild ( const KXMLNode *self,
-    struct KNamelist const **names );
-
-
-/* GetFirstChildNodeRead
- *  Returns the first(with index 0) sub-node of self using path.
- *  Is equivalent to:
- *          KXMLNodeOpenNodesetRead(self, &nc, path, ...);
- *          KXMLNodesetGetNodeRead(ns, node, 0);
- *  It will return NotFound error if any node exists
- */
-KLIB_EXTERN rc_t CC KXMLNodeGetFirstChildNodeRead ( const KXMLNode *self,
-    const KXMLNode **node, const char *path, ... );
-KLIB_EXTERN rc_t CC KXMLNodeVGetFirstChildNodeRead ( const KXMLNode *self,
-    const KXMLNode **node, const char *path, va_list args );
-
-
-/*--------------------------------------------------------------------------
- * XML node set
- */
-typedef struct KXMLNodeset KXMLNodeset;
-
-/* AddRef
- * Release
- */
-KLIB_EXTERN rc_t CC KXMLNodesetAddRef ( const KXMLNodeset *self );
-KLIB_EXTERN rc_t CC KXMLNodesetRelease ( const KXMLNodeset *self );
-
-/* Count
- *  retrieve the number of nodes in set
- */
-KLIB_EXTERN rc_t CC KXMLNodesetCount ( const KXMLNodeset *self, uint32_t *count );
-
-/* GetNode
- *  access indexed node
- *  "idx" [ IN ] - a zero-based index
- */
-KLIB_EXTERN rc_t CC KXMLNodesetGetNodeRead ( const KXMLNodeset *self,
-    const KXMLNode **node, uint32_t idx );
-
-
-/*--------------------------------------------------------------------------
- * XML document
- */
-typedef struct KXMLDoc KXMLDoc;
-
-/* AddRef
- * Release
- *  ignores NULL references
- */
-KLIB_EXTERN rc_t CC KXMLDocAddRef ( const KXMLDoc *self );
-KLIB_EXTERN rc_t CC KXMLDocRelease ( const KXMLDoc *self );
-
-/* OpenNodesetRead
- *  opens a node set with given path
- */
-KLIB_EXTERN rc_t CC KXMLDocOpenNodesetRead ( const KXMLDoc *self,
-    const KXMLNodeset **ns, const char *path, ... );
-KLIB_EXTERN rc_t CC KXMLDocVOpenNodesetRead ( const KXMLDoc *self,
-    const KXMLNodeset **ns, const char *path, va_list args );
-
-/* OpenNodesetUpdate
- *  opens a node set with given path
- */
-KLIB_EXTERN rc_t CC KXMLDocOpenNodesetUpdate ( KXMLDoc *self,
-    KXMLNodeset **ns, const char *path, ... );
-KLIB_EXTERN rc_t CC KXMLDocVOpenNodesetUpdate ( KXMLDoc *self,
-    KXMLNodeset **ns, const char *path, va_list args );
-
-
-/*--------------------------------------------------------------------------
- * XML manager
- */
-typedef struct KXMLMgr KXMLMgr;
-
-/* Make
- *  make an XML manager object
- */
-KLIB_EXTERN rc_t CC KXMLMgrMakeRead ( const KXMLMgr **mgr );
-
-/* AddRef
- * Release
- *  ignores NULL references
- */
-KLIB_EXTERN rc_t CC KXMLMgrAddRef ( const KXMLMgr *self );
-KLIB_EXTERN rc_t CC KXMLMgrRelease ( const KXMLMgr *self );
-
-/* MakeDoc
- *  create a document object from source file
- */
-KLIB_EXTERN rc_t CC KXMLMgrMakeDocRead ( const KXMLMgr *self,
-    const KXMLDoc **doc, struct KFile const *src );
-
-/* MakeDoc
- *  create a document object from memory
- */
-KLIB_EXTERN rc_t KXMLMgrMakeDocReadFromMemory ( const KXMLMgr *self,
-    const KXMLDoc **result, const char* buffer, uint64_t size );
-
-/*--------------------------------------------------------------------------
- * KDirectory
- *  this will probably be relocated later on
- */
-struct KDirectory;
-
-/* OpenXTocDirRead
- *  open copycat XML as a chroot'd directory
- *  XML data comes from a KFile in this case
- *
- *  "dir" [ OUT ] - return parameter for directory object
- *
- *  "base_path" [ IN ] - NUL terminated string giving the path
- *   of the new directory relative to "self". NB - can be absolute
- *   or relative, but is always interpreted by "self".
- *
- *  "xml" [ IN ] - file containing XML data produced by copycat tool
- */
-KLIB_EXTERN rc_t CC KDirectoryOpenXTocDirRead ( struct KDirectory const * self,
-    struct KDirectory const ** dir, const char * base_path, struct KFile const * xml);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _h_klib_xml_ */
diff --git a/interfaces/klib/xml.hpp b/interfaces/klib/xml.hpp
deleted file mode 100644
index 24dbfcd..0000000
--- a/interfaces/klib/xml.hpp
+++ /dev/null
@@ -1,198 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#ifndef _hpp_klib_xml_
-#define _hpp_klib_xml_
-
-#ifndef _h_klib_xml_
-#include <klib/xml.h>
-#endif
-
-/*--------------------------------------------------------------------------
- * XML node
- */
-struct KXMLNode
-{
-    /* AddRef
-     * Release
-     */
-    inline rc_t AddRef ( void ) const
-    { return KXMLNodeAddRef ( this ); }
-    inline rc_t Release ( void ) const
-    { return KXMLNodeRelease ( this ); }
-
-    /* GetName
-     */
-    inline rc_t GetName ( const char **name ) const
-    { return KXMLNodeGetName ( this, name ); }
-
-    /* OpenNodesetRead
-     */
-    inline rc_t OpenNodesetRead ( struct KXMLNodeset const **ns,
-        const char *path, ... ) const
-    {
-        va_list args;
-        va_start ( args, path );
-        rc_t status = KXMLNodeVOpenNodesetRead ( this, ns, path, args );
-        va_end ( args );
-        return status;
-    }
-
-    /* ReadAttr
-     */
-    inline rc_t ReadAttr ( const char *attr, void *buffer, size_t bsize,
-         size_t *num_read, size_t *remaining ) const
-    {
-        return KXMLNodeReadAttr
-            ( this, attr, buffer, bsize, num_read, remaining );
-    }
-
-    /* CountNodes
-     *  count child nodes
-     */
-    inline rc_t CountChildNodes ( uint32_t *count ) const
-    { return KXMLNodeCountChildNodes ( this, count ); }
-
-    /* GetNodeRead
-     *  access indexed node
-     *  "idx" [ IN ] - a zero-based index
-     */
-    inline rc_t GetNodeRead ( const KXMLNode **node,
-        uint32_t idx ) const 
-    { return KXMLNodeGetNodeRead ( this, node, idx ); }
-
-    /* ListChild
-     *  list all named children
-     */
-    inline rc_t ListChild ( struct KNamelist const **names ) const
-    { return KXMLNodeListChild ( this, names ); }
-
-    inline rc_t GetFirstChildNodeRead ( const KXMLNode **node,
-        const char *path, ... ) const
-    {
-        va_list args;
-        va_start ( args, path );
-        rc_t rc = KXMLNodeVGetFirstChildNodeRead ( this, node, path, args );
-        va_end ( args );
-        return rc;
-    }
-
-    inline rc_t Read ( int32_t *i ) const
-    { return KXMLNodeReadAsI32 ( this, i ); }
-
-    inline rc_t Read ( char *buffer, size_t bsize, size_t *size ) const
-    { return KXMLNodeReadCString ( this, buffer, bsize, size ); }
-
-    inline rc_t ReadAttr ( const char *attr, int32_t *i ) const 
-    { return KXMLNodeReadAttrAsI32 ( this, attr, i ); }
-
-    inline rc_t ReadAttr ( const char *attr,
-        char *buffer, size_t bsize, size_t *size ) const
-    { return KXMLNodeReadAttrCString ( this, attr, buffer, bsize, size ); }
-};
-
-/*--------------------------------------------------------------------------
- * XML node set
- */
-struct KXMLNodeset
-{
-    /* AddRef
-     * Release
-     */
-    inline rc_t AddRef ( void ) const
-    { return KXMLNodesetAddRef ( this ); }
-    inline rc_t Release ( void ) const
-    { return KXMLNodesetRelease ( this ); }
-
-    /* Count
-     *  retrieve the number of nodes in set
-     */
-    inline rc_t Count ( uint32_t *count ) const
-    { return KXMLNodesetCount ( this, count ); }
-
-    /* GetNode
-     *  access indexed node
-     */
-    inline rc_t GetNodeRead ( const KXMLNode **node, uint32_t idx ) const
-    { return KXMLNodesetGetNodeRead ( this, node, idx ); }
-};
-
-/*--------------------------------------------------------------------------
- * XML document
- */
-struct KXMLDoc
-{
-    /* AddRef
-     * Release
-     *  ignores NULL references
-     */
-    inline rc_t AddRef ( void ) const
-    { return KXMLDocAddRef ( this ); }
-    inline rc_t Release ( void ) const
-    { return KXMLDocRelease ( this ); }
-
-    /* OpenNodesetRead
-     *  opens a node set with given path
-     */
-    inline rc_t OpenNodesetRead ( const KXMLNodeset **ns, const char *path, ... ) const
-    {
-        va_list args;
-        va_start ( args, path );
-        int status = KXMLDocVOpenNodesetRead ( this, ns, path, args );
-        va_end ( args );
-        return status;
-    }
-};
-
-/*--------------------------------------------------------------------------
- * XML manager
- */
-struct KXMLMgr
-{
-    /* Make
-     *  make an XML manager object
-     */
-    static inline rc_t MakeRead ( const KXMLMgr **mgr )
-    { return KXMLMgrMakeRead ( mgr ); }
-
-    /* AddRef
-     * Release
-     *  ignores NULL references
-     */
-    inline rc_t AddRef ( void ) const
-    { return KXMLMgrAddRef ( this ); }
-    inline rc_t Release ( void ) const
-    { return KXMLMgrRelease ( this ); }
-
-    /* MakeDoc
-     *  create a document object from source file
-     */
-    inline rc_t MakeDocRead ( const KXMLDoc **doc, struct KFile const *src ) const
-    { return KXMLMgrMakeDocRead ( this, doc, src ); }
-
-};
-
-#endif /* _hpp_klib_xml_ */
diff --git a/interfaces/kns/KCurlRequest.h b/interfaces/kns/KCurlRequest.h
new file mode 100644
index 0000000..215ca40
--- /dev/null
+++ b/interfaces/kns/KCurlRequest.h
@@ -0,0 +1,65 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_kns_request_
+#define _h_kns_request_
+
+#ifndef _h_kns_extern_
+#include <kns/extern.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+struct String;
+struct KNSManager;
+struct KDataBuffer;
+
+struct KCurlRequest;
+
+KNS_EXTERN rc_t CC KNSManagerMakeRequest( struct KNSManager const *kns_mgr, struct KCurlRequest **self, const char * url, bool verbose );
+
+KNS_EXTERN rc_t CC KCurlRequestAddRef ( const struct KCurlRequest *self );
+
+KNS_EXTERN rc_t CC KCurlRequestRelease( const struct KCurlRequest *self );
+
+KNS_EXTERN rc_t CC KCurlRequestAddFields( struct KCurlRequest *self, const char * fields );
+
+KNS_EXTERN rc_t CC KCurlRequestAddSFields( struct KCurlRequest *self, struct String const * fields );
+
+KNS_EXTERN rc_t CC KCurlRequestAddField( struct KCurlRequest *self, const char * name, const char * value );
+
+KNS_EXTERN rc_t CC KCurlRequestAddSField( struct KCurlRequest *self, struct String const * name, struct String const * value );
+
+KNS_EXTERN rc_t CC KCurlRequestPerform( struct KCurlRequest *self, struct KDataBuffer * buffer );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/interfaces/kns/curl-file.h b/interfaces/kns/curl-file.h
new file mode 100644
index 0000000..77aabe4
--- /dev/null
+++ b/interfaces/kns/curl-file.h
@@ -0,0 +1,49 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_curl_file_
+#define _h_curl_file_
+
+#ifndef _h_kns_extern_
+#include <kns/extern.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * KCurlFile
+ *  a remote file, fetched (in parts) via http using libcurl
+ */
+KNS_EXTERN rc_t CC KCurlFileMake ( struct KFile const **self, const char * url, bool verbose );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/interfaces/kns/entrez-fetcher.h b/interfaces/kns/entrez-fetcher.h
new file mode 100644
index 0000000..7d79cd7
--- /dev/null
+++ b/interfaces/kns/entrez-fetcher.h
@@ -0,0 +1,88 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_entrez_fetcher_
+#define _h_entrez_fetcher_
+
+#ifndef _h_url_fetcher_
+#include <kns/url-fetcher.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * KEntrezFetcher
+ *  everything to fetch DNA-text from entrez - server
+ */
+typedef struct KEntrezFetcher KEntrezFetcher;
+
+
+/* Make
+ *  create a fetcher object
+ */
+rc_t KEntrezFetcherMake ( KEntrezFetcher **fetcher, KUrlFetcher * url_fetcher );
+
+/* Setup
+ *  prepares a fetch and indicates to caller the buffer size
+ *
+ *  "server" [ IN ] - NUL terminated URI, e.g.
+ *     "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi"
+ *
+ *  "seq_id" [ IN ] - NUL terminated sequence identifier, e.g. "NC_000001"
+ *  max_seq_len : 1024
+ *  row_id      : 11
+ *  row_count   : 1
+ */
+rc_t KEntrezFetcherSetup ( KEntrezFetcher *self,
+    const char * server, const char * seq_id, 
+    const size_t max_seq_len, const uint64_t row_id, const size_t row_count,
+    size_t * buffsize );
+
+
+/* Setup
+ *  prepares a fetch by giving it a usable url
+ */
+rc_t KEntrezFetcherSetupUri ( KEntrezFetcher *self, const char * uri );
+
+
+/* AddRef
+ * Release
+ */
+rc_t KEntrezFetcherAddRef ( const KEntrezFetcher *self );
+rc_t KEntrezFetcherRelease ( const KEntrezFetcher *self );
+
+/* Read
+ *  reads data from prepared URI
+ */
+rc_t KEntrezFetcherRead ( KEntrezFetcher *self,
+                       void *dst, size_t dst_size, size_t *num_read );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_entrez_fetcher_ */
diff --git a/interfaces/kns/extern.h b/interfaces/kns/extern.h
new file mode 100644
index 0000000..afd5c00
--- /dev/null
+++ b/interfaces/kns/extern.h
@@ -0,0 +1,41 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kns_extern_
+#define _h_kns_extern_
+
+#if ! defined EXPORT_LATCH && defined _LIBRARY
+#define KNS_EXTERN LIB_EXPORT
+#define EXPORT_LATCH 1
+#else
+#define KNS_EXTERN LIB_IMPORT
+#endif
+
+#ifndef _h_klib_extern_
+#include <klib/extern.h>
+#endif
+
+#endif /* _h_kns_extern_ */
diff --git a/interfaces/kns/impl.h b/interfaces/kns/impl.h
new file mode 100644
index 0000000..eec1bd8
--- /dev/null
+++ b/interfaces/kns/impl.h
@@ -0,0 +1,104 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kns_impl_
+#define _h_kns_impl_
+
+#ifndef _h_kns_extern_
+#include <kns/extern.h>
+#endif
+
+#ifndef _h_kns_stream_
+#include <kns/stream.h>
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+typedef union KStream_vt KStream_vt;
+
+
+/*--------------------------------------------------------------------------
+ * KStream
+ *  a virtual stream
+ */
+struct KStream
+{
+    const KStream_vt *vt;
+    KRefcount refcount;
+    uint8_t read_enabled;
+    uint8_t write_enabled;
+    uint8_t align [ 2 ];
+};
+
+#ifndef KSTREAM_IMPL
+#define KSTREAM_IMPL struct KStream
+#endif
+
+typedef struct KStream_vt_v1 KStream_vt_v1;
+struct KStream_vt_v1
+{
+    /* version == 1.x */
+    uint32_t maj;
+    uint32_t min;
+
+    /* start minor version == 0 */
+    rc_t ( CC * destroy ) ( KSTREAM_IMPL *self );
+    rc_t ( CC * read ) ( const KSTREAM_IMPL *self,
+        void *buffer, size_t bsize, size_t *num_read );
+    rc_t ( CC * write ) ( KSTREAM_IMPL *self,
+        const void *buffer, size_t size, size_t *num_writ );
+    /* end minor version == 0 */
+};
+
+union KStream_vt
+{
+    KStream_vt_v1 v1;
+};
+
+
+/* Init
+ *  initialize a newly allocated stream object
+ */
+KNS_EXTERN rc_t CC KStreamInit ( KStream *self, const KStream_vt *vt,
+    const char *classname, const char *strname,
+    bool read_enabled, bool write_enabled );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kns_impl_ */
diff --git a/interfaces/kns/manager.h b/interfaces/kns/manager.h
new file mode 100644
index 0000000..1c78d49
--- /dev/null
+++ b/interfaces/kns/manager.h
@@ -0,0 +1,85 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_kns_manager_
+#define _h_kns_manager_
+
+#ifndef _h_kns_extern_
+#include <kns/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+
+
+/*--------------------------------------------------------------------------
+ * KNSManager
+ *  manages the network system
+ */
+typedef struct KNSManager KNSManager;
+
+
+/* Make
+ *  create a manager instance
+ */
+KNS_EXTERN rc_t CC KNSManagerMake ( KNSManager **mgr );
+
+
+/* AddRef
+ * Release
+ *  ignores NULL references
+ */
+KNS_EXTERN rc_t CC KNSManagerAddRef ( const KNSManager *self );
+KNS_EXTERN rc_t CC KNSManagerRelease ( const KNSManager *self );
+
+
+/* Avail - DEPRECATED
+ *  indicate to caller whether networking services are available
+ *  mainly here to support libcurl
+ */
+KNS_EXTERN rc_t CC KNSManagerAvail ( const KNSManager *self );
+
+/* CurlVersion - DEPRECATED
+ *  indicate which version of curl is available
+ *  return this as a string, because this is how libcurl does it
+ */
+KNS_EXTERN rc_t CC KNSManagerCurlVersion ( const KNSManager *self, const char ** version_string );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kns_manager_ */
diff --git a/interfaces/kns/stream.h b/interfaces/kns/stream.h
new file mode 100644
index 0000000..a7c1bf7
--- /dev/null
+++ b/interfaces/kns/stream.h
@@ -0,0 +1,126 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kns_stream_
+#define _h_kns_stream_
+
+#ifndef _h_kns_extern_
+#include <kns/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * KStream
+ *  the stream is defined to have no concept of size,
+ *  and to not support any form of random access
+ */
+typedef struct KStream KStream;
+
+
+/* AddRef
+ * Release
+ *  ignores NULL references
+ */
+KNS_EXTERN rc_t CC KStreamAddRef ( const KStream *self );
+KNS_EXTERN rc_t CC KStreamRelease ( const KStream *self );
+
+
+/* Read
+ *  read data from stream
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ *  "num_read" [ OUT ] - return parameter giving number of bytes
+ *  actually read. when returned value is zero and return code is
+ *  also zero, interpreted as end of stream.
+ */
+KNS_EXTERN rc_t CC KStreamRead ( const KStream *self,
+    void *buffer, size_t bsize, size_t *num_read );
+
+/* ReadAll
+ *  read from stream until "bsize" bytes have been retrieved
+ *  or until end-of-input
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ *  "num_read" [ OUT ] - return parameter giving number of bytes
+ *  actually read. when returned value is zero and return code is
+ *  also zero, interpreted as end of stream.
+ */
+KNS_EXTERN rc_t CC KStreamReadAll ( const KStream *self,
+    void *buffer, size_t bsize, size_t *num_read );
+
+
+/* Write
+ *  send data to stream
+ *
+ *  "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ *  "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually written
+ */
+KNS_EXTERN rc_t CC KStreamWrite ( KStream *self,
+    const void *buffer, size_t size, size_t *num_writ );
+
+/* WriteAll
+ *  write to stream until "size" bytes have been transferred
+ *  or until no further progress can be made
+ *
+ *  "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ *  "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually written
+ */
+KNS_EXTERN rc_t CC KStreamWriteAll ( KStream *self,
+    const void *buffer, size_t size, size_t *num_writ );
+
+
+/* MakeStdIn
+ *  creates a read-only stream on stdin
+ */
+KNS_EXTERN rc_t CC KStreamMakeStdIn ( const KStream **std_in );
+
+/* MakeStdOut
+ * MakeStdErr
+ *  creates a write-only stream on stdout or stderr
+ */
+KNS_EXTERN rc_t CC KStreamMakeStdOut ( KStream **std_out );
+KNS_EXTERN rc_t CC KStreamMakeStdErr ( KStream **std_err );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kns_stream_ */
diff --git a/interfaces/kns/url-fetcher.h b/interfaces/kns/url-fetcher.h
new file mode 100644
index 0000000..36ac6a7
--- /dev/null
+++ b/interfaces/kns/url-fetcher.h
@@ -0,0 +1,66 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_url_fetcher_
+#define _h_url_fetcher_
+
+#ifndef _h_kns_extern_
+#include <kns/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * KUrlFetcher
+ *  a generic way of fetching data from a url
+ */
+typedef struct KUrlFetcher KUrlFetcher;
+
+/* AddRef
+ * Release
+ *  ignores NULL references
+ */
+KNS_EXTERN rc_t CC KUrlFetcherAddRef ( const KUrlFetcher *self );
+KNS_EXTERN rc_t CC KUrlFetcherRelease ( const KUrlFetcher *self );
+
+KNS_EXTERN rc_t CC KUrlFetcherRead( KUrlFetcher *self, const char *uri,
+                      void *dst, size_t to_read, size_t *num_read );
+
+/* this typedef has to stay here for the virtual interface to work...*/
+typedef struct KUrlFetcherCurl KUrlFetcherCurl;
+
+KNS_EXTERN rc_t CC KUrlFetcherCurlMake( KUrlFetcher **fetcher, const bool verbose );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/interfaces/kproc/impl.h b/interfaces/kproc/impl.h
new file mode 100644
index 0000000..4d99b04
--- /dev/null
+++ b/interfaces/kproc/impl.h
@@ -0,0 +1,104 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kproc_impl_
+#define _h_kproc_impl_
+
+#ifndef _h_kproc_extern_
+#include <kproc/extern.h>
+#endif
+
+#ifndef _h_kproc_task_
+#include <kproc/task.h>
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+typedef union KTask_vt KTask_vt;
+
+
+/*--------------------------------------------------------------------------
+ * KTask
+ *  a deferred task abstraction
+ *  specific task objects are constructed with required parameters
+ *  and implement the Execute method to perform their operation
+ */
+struct KTask
+{
+    const KTask_vt *vt;
+    KRefcount refcount;
+    uint8_t align [ 4 ];
+};
+
+#ifndef KTASK_IMPL
+#define KTASK_IMPL struct KTask
+#endif
+
+typedef struct KTask_vt_v1 KTask_vt_v1;
+struct KTask_vt_v1
+{
+    /* version == 1.x */
+    uint32_t maj;
+    uint32_t min;
+
+    /* start minor version == 0 */
+    rc_t ( CC * destroy ) ( KTASK_IMPL *self );
+    rc_t ( CC * execute ) ( KTASK_IMPL * self );
+    /* end minor version == 0 */
+};
+
+union KTask_vt
+{
+    KTask_vt_v1 v1;
+};
+
+/* Init
+ *  initialize a newly allocated task object
+ */
+KPROC_EXTERN rc_t CC KTaskInit ( KTask *self, const KTask_vt *vt, const char *clsname, const char *name );
+
+
+/* Destroy
+ *  destroy task
+ */
+KPROC_EXTERN rc_t CC KTaskDestroy ( KTask *self, const char *clsname );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kproc_impl_ */
diff --git a/interfaces/kproc/procmgr.h b/interfaces/kproc/procmgr.h
new file mode 100644
index 0000000..d0b0a44
--- /dev/null
+++ b/interfaces/kproc/procmgr.h
@@ -0,0 +1,115 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kproc_procmgr_
+#define _h_kproc_procmgr_
+
+#ifndef _h_kproc_extern_
+#include <kproc/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KTask;
+struct KTaskTicket;
+
+
+/*--------------------------------------------------------------------------
+ * KProcMgr
+ */
+typedef struct KProcMgr KProcMgr;
+
+
+/* Init
+ *  initialize the proc mgr
+ *  creates the singleton object
+ */
+KPROC_EXTERN rc_t CC KProcMgrInit ( void );
+
+/* Whack
+ *  tear down proc mgr
+ *  runs any outstanding cleanup tasks
+ *  deletes the singleton object
+ *  intended to be called from an "atexit()" or similar task
+ */
+KPROC_EXTERN rc_t CC KProcMgrWhack ( void );
+
+
+/* MakeSingleton
+ *  access singleton process manager
+ *  returns a new reference
+ *  or an error code if not initialized
+ *  VDB-2 ONLY
+ */
+KPROC_EXTERN rc_t CC KProcMgrMakeSingleton ( KProcMgr ** mgr );
+
+
+/* AddRef
+ * Release
+ *  here to support refcounting API
+ *  not generally useful in that the proc mgr
+ *  will stay around until process exit
+ */
+KPROC_EXTERN rc_t CC KProcMgrAddRef ( const KProcMgr *self );
+KPROC_EXTERN rc_t CC KProcMgrRelease ( const KProcMgr *self );
+
+
+/* AddCleanupTask
+ *  add a task to be performed at process exit time
+ *
+ *  "ticket" [ OUT ] - an id that can be used later to remove task
+ *
+ *  "task" [ IN ] - task object that will be executed at process
+ *   exit, unless previously removed ( see RemoveCleanupTask ).
+ *   NB - a new reference to "task" will be created
+ */
+KPROC_EXTERN rc_t CC KProcMgrAddCleanupTask ( KProcMgr *self,
+    struct KTaskTicket *ticket, struct KTask *task );
+
+
+/* RemoveCleanupTask
+ *  remove a task from exit queue
+ *  releases reference to task object
+ *  returns an rcNotFound code if task no longer exists
+ */
+KPROC_EXTERN rc_t CC KProcMgrRemoveCleanupTask ( KProcMgr *self,
+    struct KTaskTicket const *ticket );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kproc_procmgr_ */
diff --git a/interfaces/kproc/q-extern.h b/interfaces/kproc/q-extern.h
index cb2c74c..96f01d4 100644
--- a/interfaces/kproc/q-extern.h
+++ b/interfaces/kproc/q-extern.h
@@ -25,9 +25,9 @@
 */
 
 #ifndef _h_kproc_q_extern_
-#define _h_kprocc_q_extern_
+#define _h_kproc_q_extern_
 
-#if ! defined EXPORT_LATCH && defined _LIBRARY
+#if ! defined EXPORT_LATCH && _LIBRARY
 #define KQ_EXTERN LIB_EXPORT
 #define EXPORT_LATCH 1
 #else
diff --git a/interfaces/kproc/queue.h b/interfaces/kproc/queue.h
index 3a7f927..e1d5bca 100644
--- a/interfaces/kproc/queue.h
+++ b/interfaces/kproc/queue.h
@@ -31,7 +31,7 @@
 #include <klib/defs.h>
 #endif
 
-#include <kproc/extern.h>
+#include <kproc/q-extern.h>
 
 #ifdef __cplusplus
 extern "C" {
diff --git a/interfaces/kproc/sem.h b/interfaces/kproc/sem.h
index ce10440..32ee405 100644
--- a/interfaces/kproc/sem.h
+++ b/interfaces/kproc/sem.h
@@ -80,6 +80,14 @@ KPROC_EXTERN rc_t CC KSemaphoreTimedWait ( KSemaphore *self,
     struct KLock *lock, struct timeout_t *tm );
 
 
+/* Cancel
+ *  signal that the count will never increase
+ *
+ * NB - external lock used for synchronization must be locked by current thread
+ */
+KPROC_EXTERN rc_t CC KSemaphoreCancel ( KSemaphore *self );
+
+
 /* Signal
  *  signal that a count has become available
  *
diff --git a/interfaces/kproc/task.h b/interfaces/kproc/task.h
new file mode 100644
index 0000000..5e49547
--- /dev/null
+++ b/interfaces/kproc/task.h
@@ -0,0 +1,83 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kproc_task_
+#define _h_kproc_task_
+
+#ifndef _h_kproc_extern_
+#include <kproc/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+
+
+/*--------------------------------------------------------------------------
+ * KTask
+ *  a deferred task abstraction
+ *  specific task objects are constructed with required parameters
+ *  and implement the Execute method to perform their operation
+ */
+typedef struct KTask KTask;
+
+
+/* AddRef
+ * Release
+ */
+KPROC_EXTERN rc_t CC KTaskAddRef ( const KTask *self );
+KPROC_EXTERN rc_t CC KTaskRelease ( const KTask *self );
+KPROC_EXTERN rc_t CC KTaskDestroy ( KTask *self, const char *clsname );
+
+/* Execute
+ *  perform deferred operation
+ */
+KPROC_EXTERN rc_t CC KTaskExecute ( KTask *self );
+
+/*--------------------------------------------------------------------------
+ * KTaskTicket
+ *  an opaque object holding task identification
+ */
+typedef struct KTaskTicket KTaskTicket;
+struct KTaskTicket
+{
+    uint64_t info [ 2 ];
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kproc_task_ */
diff --git a/interfaces/kproc/timeout.h b/interfaces/kproc/timeout.h
new file mode 100644
index 0000000..017f1a3
--- /dev/null
+++ b/interfaces/kproc/timeout.h
@@ -0,0 +1,64 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kproc_timeout_
+#define _h_kproc_timeout_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifndef _h_kproc_extern_
+#include <kproc/extern.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * system specific timeout object
+ */
+typedef struct timeout_t timeout_t;
+
+
+/* Init
+ *  initialize a timeout in milliseconds
+ */
+KPROC_EXTERN rc_t CC TimeoutInit ( timeout_t *tm, uint32_t msec );
+
+
+/* Prepare
+ *  ensures that a timeout is prepared with an absolute value
+*/
+KPROC_EXTERN rc_t CC TimeoutPrepare ( timeout_t *tm );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kproc_timeout_ */
diff --git a/interfaces/krypto/cipher-impl.h b/interfaces/krypto/cipher-impl.h
new file mode 100644
index 0000000..02214d4
--- /dev/null
+++ b/interfaces/krypto/cipher-impl.h
@@ -0,0 +1 @@
+#error "OBSOLETE do not use"
diff --git a/interfaces/krypto/cipher-priv.h b/interfaces/krypto/cipher-priv.h
new file mode 100644
index 0000000..328ba6d
--- /dev/null
+++ b/interfaces/krypto/cipher-priv.h
@@ -0,0 +1 @@
+#error "Obsolete do not use"
diff --git a/interfaces/krypto/cipher-test.h b/interfaces/krypto/cipher-test.h
new file mode 100644
index 0000000..f123525
--- /dev/null
+++ b/interfaces/krypto/cipher-test.h
@@ -0,0 +1,49 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#ifndef _h_krypto_cipher_test_
+#define _h_krypto_cipher_test_
+
+#include <krypto/extern.h>
+#include <klib/defs.h>
+
+#include <krypto/ciphermgr.h>
+
+KRYPTO_EXTERN rc_t KCipherTestVecAesNiMake (struct KCipher ** new_cipher,
+                                            kcipher_type type);
+KRYPTO_EXTERN rc_t KCipherTestVecRegMake   (struct KCipher ** new_cipher,
+                                            kcipher_type type);
+KRYPTO_EXTERN rc_t KCipherTestVecMake      (struct KCipher ** new_cipher,
+                                            kcipher_type type);
+KRYPTO_EXTERN rc_t KCipherTestByteMake     (struct KCipher ** new_cipher,
+                                            kcipher_type type);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _h_krypto_cipher_test_ */
diff --git a/interfaces/krypto/cipher.h b/interfaces/krypto/cipher.h
new file mode 100644
index 0000000..2f22733
--- /dev/null
+++ b/interfaces/krypto/cipher.h
@@ -0,0 +1,208 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#ifndef _h_krypto_cipher_
+#define _h_krypto_cipher_
+
+#include <krypto/extern.h>
+#include <klib/defs.h>
+
+typedef struct KCipher KCipher;
+
+KRYPTO_EXTERN 
+rc_t CC KCipherAddref (const KCipher * self);
+
+KRYPTO_EXTERN rc_t CC KCipherRelease (const KCipher * self);
+
+KRYPTO_EXTERN rc_t CC KCipherBlockSize (const KCipher * self, size_t * bytes);
+
+KRYPTO_EXTERN rc_t CC KCipherSetEncryptKey (KCipher * self,
+                                            const void * user_key,
+                                            size_t user_key_size);
+
+KRYPTO_EXTERN rc_t CC KCipherSetDecryptKey (KCipher * self,
+                                            const void * user_key,
+                                            size_t user_key_size);
+
+/*
+ * Set the ivec (Initialization vector or feedback) for the cipher
+ * this is done automatically for the longer runs defined below.
+ *
+ * the size of ivec  must match KCipherBlockSize
+ *
+ * the ivec is copied into the cipher not used in place
+ */
+KRYPTO_EXTERN
+ rc_t CC KCipherSetEncryptIVec (KCipher * self, const void * ivec);
+
+KRYPTO_EXTERN
+ rc_t CC KCipherSetDecryptIVec (KCipher * self, const void * ivec);
+
+
+typedef void (*cipher_ctr_func)(void * ivec);
+
+KRYPTO_EXTERN rc_t CC KCipherSetEncryptCtrFunc (KCipher * self, cipher_ctr_func func);
+
+KRYPTO_EXTERN rc_t CC KCipherSetDecryptCtrFunc (KCipher * self, cipher_ctr_func func);
+
+/*
+ * 'in' can equal 'out'
+ */
+KRYPTO_EXTERN rc_t CC KCipherEncrypt (KCipher * self, const void * in, void * out);
+
+KRYPTO_EXTERN rc_t CC KCipherDecrypt (KCipher * self, const void * in, void * out);
+
+
+/* ====================
+ * longer runs of multiple blocks.
+ *
+ * The algorithms are well defined and standard in most cases.
+ *
+ * PT: plain text block
+ * CT: cipher text block
+ * EK: encryption key
+ * DK: decryption key (might be sthe same as EK)
+ * ENC: encrypt cipher function on a block using a key
+ * DEC: decrypt cipher function on a block using a key
+ * IV: initialization vector - used as feedback for chaining
+ * N:  number used once (nonce)
+ * FB: feedback is the next IV in a chained/feedback mode
+ */
+
+/* -----
+ * NOTE:
+ * 'in' can be the same as 'out' but other overlaps are dangers as a block at a
+ * time is written. The code does not look for overlaps at this point.
+ */
+
+/* ----------
+ * Electronic Code Book - simple cipher with no chaining feedback  just iterate
+ * simple encrypt/decrypt with the plain, text, cipher text and key/
+ *
+ * CT = ENC (PT,EK)
+ * PT = DEC (CT,DK)
+ */
+
+/* -----
+ * NOTE: currently an implmentation detail limits us to 8192 bit cipher block
+ * size.  Changing MAX_BLOCK_SIZE in cipher.c can up that limit without 
+ * causing any other compatibility issues. 
+ *
+ * Two local byte arrays are defined on the stack of 1024 bytes or 8192 bits.
+ */
+KRYPTO_EXTERN rc_t CC KCipherEncryptECB (KCipher * self, const void * in, void * out,
+                                         uint32_t block_count);
+
+KRYPTO_EXTERN rc_t CC KCipherDecryptECB (KCipher * self, const void * in, void * out,
+                                         uint32_t block_count);
+
+/* ----------
+ * Cipher-Block Chaining
+ * CT = (FB = ENC (PT^IV, EK))
+ * PT = DEC ((FB = CT), DK)
+ *
+ */
+KRYPTO_EXTERN rc_t CC KCipherEncryptCBC (KCipher * self, const void * in, void * out,
+                                         uint32_t block_count);
+
+KRYPTO_EXTERN rc_t CC KCipherDecryptCBC (KCipher * self, const void * in, void * out,
+                                         uint32_t block_count);
+
+/* ----------
+ * Propagating cipher-block chaining
+ * FB = PT ^ (CT = ENC ((PT^IV), EK))
+ * FB = CT ^ (PT = DEC (CT,DK) ^ IV)
+ */
+
+/* not yet implemented */
+
+/* ----------
+ * Cipher Feedback
+ * CT = (FB = PT) ^ ENC (IV, EK))
+ * PT = (FB = CT) ^ ENC (IV, DK)
+ *
+ * NOTE the use of the encrypt function for decryption
+ *
+ * Not implemented as the openssl does something different
+ */
+KRYPTO_EXTERN
+rc_t CC KCipherEncryptCFB (KCipher * self, const void * in, void * out,
+                           uint32_t block_count);
+
+KRYPTO_EXTERN
+rc_t CC KCipherDecryptCFB (KCipher * self, const void * in, void * out,
+                           uint32_t block_count);
+
+KRYPTO_EXTERN
+rc_t CC KCipherEncryptPCFB (KCipher * self, const void * in, void * out,
+                            uint32_t block_count);
+
+KRYPTO_EXTERN
+rc_t CC KCipherDecryptPCFB (KCipher * self, const void * in, void * out,
+                            uint32_t block_count);
+
+/* ----------
+ * Output Feedback
+ * CT = PT ^ (FB = ENC (IV, EK))
+ * PT = CT ^ (FB = ENC (IV, DK))
+ *
+ * NOTE the use of the encrypt function for decryption
+ *
+ * Not implemented as the openssl does something different
+ */
+KRYPTO_EXTERN
+rc_t CC KCipherEncryptOFB (KCipher * self, const void * in, void * out,
+                           uint32_t block_count);
+
+KRYPTO_EXTERN
+rc_t CC KCipherDecryptOFB (KCipher * self, const void * in, void * out,
+                           uint32_t block_count);
+
+/* ----------
+ * Counter
+ * IV is a nonce and not re-used as FB
+ * CT = PT ^ ENC (N, EK)
+ * PT = CT ^ ENC (N, DK)
+ *
+ * NOTE the use of the encrypt function for decryption
+ *
+ * nonce is a function that given an iv generates the next iv
+ *
+ */
+KRYPTO_EXTERN
+rc_t CC KCipherEncryptCTR (KCipher * self, const void * in,
+                           void * out, uint32_t block_count);
+KRYPTO_EXTERN
+rc_t CC KCipherDecryptCTR (KCipher * self, const void * in,
+                           void * out, uint32_t block_count);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _h_krypto_cipher_ */
diff --git a/interfaces/krypto/ciphermgr-priv.h b/interfaces/krypto/ciphermgr-priv.h
new file mode 100644
index 0000000..943e067
--- /dev/null
+++ b/interfaces/krypto/ciphermgr-priv.h
@@ -0,0 +1,38 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+
+
+#ifdef  __cplusplus
+}
+#endif
+
+
+
+#endif /* #ifndef _h_krypto_manager_priv_ */
diff --git a/interfaces/krypto/ciphermgr.h b/interfaces/krypto/ciphermgr.h
new file mode 100644
index 0000000..2534400
--- /dev/null
+++ b/interfaces/krypto/ciphermgr.h
@@ -0,0 +1,98 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_krypto_manager_
+#define _h_krypto_manager_
+
+#ifndef _h_krypto_extern_
+#include <krypto/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+
+#ifndef _h_kfs_defs_
+#include <kfs/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* enabled/disable a set of in-house clean;y written aes ciphers. some optimize
+ * for certain c processors */
+
+#define USE_NCBI_AES 1
+
+
+/*--------------------------------------------------------------------------
+ * KCipherManager
+ */
+struct KCipher;
+
+typedef struct KCipherManager KCipherManager;
+
+/* AddRef
+ * Release
+ *  ignores NULL references
+ */
+KRYPTO_EXTERN
+rc_t CC KCipherManagerAddRef (const KCipherManager *self);
+
+KRYPTO_EXTERN
+rc_t CC KCipherManagerRelease (const KCipherManager *self);
+
+
+/* MakeCipher
+ */
+typedef uint32_t kcipher_type;
+enum
+{
+    kcipher_null, /* no encryption = just a copy */
+    kcipher_AES,
+    kcipher_count
+};
+
+
+KRYPTO_EXTERN
+rc_t CC KCipherManagerMakeCipher (const KCipherManager * self,
+                                  struct KCipher ** cipher,
+                                  kcipher_type type);
+
+/* Make
+ */
+KRYPTO_EXTERN
+rc_t CC KCipherManagerMake (KCipherManager ** pmanager);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfs_manager_ */
diff --git a/interfaces/krypto/encfile-priv.h b/interfaces/krypto/encfile-priv.h
new file mode 100644
index 0000000..79d2fd1
--- /dev/null
+++ b/interfaces/krypto/encfile-priv.h
@@ -0,0 +1,250 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_krypto_encfile_priv_
+#define _h_krypto_encfile_priv_
+
+#ifndef _h_krypto_extern_
+#include <krypto/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#include <krypto/encfile.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DEBUG_STS(msg)     DBGMSG(DBG_KRYPTO,DBG_FLAG(DBG_KRYPTO_STS),msg)
+#define DEBUG_CFG(msg)     DBGMSG(DBG_KRYPTO,DBG_FLAG(DBG_KRYPTO_CFG_,msg)
+#define DEBUG_ENCRYPT(msg) DBGMSG(DBG_KRYPTO,DBG_FLAG(DBG_KRYPTO_ENCRYPT),msg)
+#define DEBUG_DECRYPT(msg) DBGMSG(DBG_KRYPTO,DBG_FLAG(DBG_KRYPTO_DECRYPT),msg)
+
+/* -----
+ * Encrypted file structure:
+ *   - File Header
+ *   - zero or more data blocks
+ *   - file footer
+ *
+ * File Header:
+ *   - file signature "NCBInenc"
+ *   - byte order flag 
+ *   - version
+ *
+ * Data Block:
+ *   - rkey - randomly generated 32 byte key for this block (encrypted using user key)
+ *   - encrypted block of 32768 bytes size above says how many are really used (encrypted using rkey and salt above)
+ *   - block-offset + (valid bytes in block % 32768)
+ *   - crc-32 (includes phantom block start offset as initial seed)
+ *
+ * File Footer:
+ *   - footer signature "foot"
+ *   - checksum of crcs
+ */
+
+
+/* ----------------------------------------------------------------------
+ * Header - the file header
+ * all constant values for the first version
+ */
+typedef char KEncFileSig [8];
+typedef uint32_t Endian_t;
+typedef uint32_t KEncFileVersion;
+
+
+typedef struct KEncFileHeader KEncFileHeader;
+struct KEncFileHeader
+{
+    KEncFileSig     file_sig;   /* "NCBInenc" or "NCBIkenc" */
+    Endian_t        byte_order; /* do we byte swap on read? */
+    KEncFileVersion version;    /* simple incrementation starting at 1 */
+};
+
+
+/* ----------------------------------------------------------------------
+ * KEncFileBlock
+ *    The body of the file is blocks containing a portion of the decrypted
+ *    file.  These are an ordered sequence with the last block being the
+ *    same size as the rest but with only some of the data portion being
+ *    a part of the file.
+ *
+ *    An crypted file is longer than an unencrypted file by 
+ *       a constant: the lengths of the header and the footer
+ *       proportinally by the length of the block key and crc
+ */
+
+/* -----
+ * Key  the header for an encrypted block
+ *
+ * when initialized the first 38 bytes should be set to random data.
+ * valid is a count of how many bytes in the block are valid data
+ * offset is the offset of this block with in the decrypted file
+ */
+typedef uint8_t KEncFileKey [32];
+
+
+/* -----
+ * We sized the data portion of a block to match the KPageFile
+ * structure allowing a KBufFile in front of a KEncFile to
+ * operate in a fairly efficient manner
+ */
+#define ENC_DATA_BLOCK_SIZE     (32*1024)
+typedef uint8_t KEncFileData [ENC_DATA_BLOCK_SIZE];
+
+typedef uint16_t KEncFileOffValid;
+
+typedef uint64_t KEncFileBlockId;
+typedef uint16_t KEncFileBlockValid;
+
+/* -----
+ * we use the same 32 bit CRC as the rest of the project
+ */
+typedef uint32_t KEncFileCRC;
+
+
+/*
+ * NOTE:
+ * The size of data + u + id + crc + crc_copy must remain divisible
+ * by the size of key
+ */
+typedef struct KEncFileBlock KEncFileBlock;
+struct KEncFileBlock
+{
+    KEncFileKey         key;  /* encrypted with the user key */
+    KEncFileData        data; /* encrypted with block key */
+    union
+    {
+        KEncFileBlockValid  valid; /* obscured and encrypted */
+        uint8_t bytes [16];        /* mostly fill */
+    } u;
+    KEncFileBlockId     id;        /* plain text */
+    KEncFileCRC         crc;       /* plain text */
+    KEncFileCRC         crc_copy;  /* plain text */
+};
+
+
+/* ----------------------------------------------------------------------
+ * Foot - the ending of an encrypted file: 
+ *   these are in plan text for non-decryption validation of the whole file
+ *
+ * In Version 1 the crc_checksum is required.
+ * In Version 2 the crc_checksum is optional - if 0 it is not computed.
+ */
+typedef uint64_t KEncFileFooter_t;
+typedef struct KEncFileFooter KEncFileFooter;
+struct KEncFileFooter
+{
+    KEncFileFooter_t block_count;  /* how many blocks do we have? */
+    KEncFileFooter_t crc_checksum; /* sum of crcs of all blocks */
+};
+
+
+/* ----------
+ * Read mode is fully seekable if the underlying KFile is seekable some
+ * integrity checking will not be performed in allowing this seeking.
+ */
+KRYPTO_EXTERN rc_t CC KEncFileMakeRead_v1 (const struct KFile ** pself,
+                                           const struct KFile * encrypted_input,
+                                           const struct KKey * key);
+
+KRYPTO_EXTERN rc_t CC KEncFileMakeRead_v2 (const struct KFile ** pself,
+                                           const struct KFile * encrypted_input,
+                                           const struct KKey * key);
+
+
+/* ----------
+ * Write mode encrypted file can only be written straight through from the
+ * first byte to the last.
+ */
+KRYPTO_EXTERN rc_t CC KEncFileMakeWrite_v1 (struct KFile ** pself,
+                                            struct KFile * encrypted_output,
+                                            const struct KKey * key);
+
+KRYPTO_EXTERN rc_t CC KEncFileMakeWrite_v2 (struct KFile ** pself,
+                                            struct KFile * encrypted_output,
+                                            const struct KKey * key);
+
+
+/* ----------
+ * Update mode is read/write mode where seeking within the file is allowed.
+ *
+ * NOTE this is in the private interface because it is not actually working
+ * yet.
+ */
+KRYPTO_EXTERN rc_t CC KEncFileMakeUpdate_v1 (struct KFile ** pself, 
+                                             struct KFile * encrypted,
+                                             const struct KKey * key);
+
+KRYPTO_EXTERN rc_t CC KEncFileMakeUpdate_v2 (struct KFile ** pself, 
+                                             struct KFile * encrypted,
+                                             const struct KKey * key);
+
+
+/* ----------
+ * Validate mode can not be read or written.
+ * Upon open the whole file is read from begining to end and all CRC
+ * and other integrity checks are performed immedaitely
+ */
+KRYPTO_EXTERN rc_t CC KEncFileValidate_v1 (const struct KFile * encrypted);
+
+KRYPTO_EXTERN rc_t CC KEncFileValidate_v2 (const struct KFile * encrypted);
+
+
+/* ----------
+ * Identify whether a file is a KEncFile type encrypted file by the header.
+ * read the header into a buffer and pass it into this function.  
+ * The buffer_size needs to be at least 8 but more bytes lead to a better
+ * check up to the size of the header of a KEncFile type encrypted file.
+ * As the header may change in the future (in a backwards compatible way)
+ * that size might change from the current 16.
+ *
+ * Possible returns:
+ * 0:
+ *      the file is an identified KEncFile type file.  False positives are
+ *      possible if a file happens to match at 8 or more bytes
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType)
+ *      the file is definitely not a KEncFIle type encrypted file.
+ *     
+ * RC (rcFS, rcFile, rcIdentifying, rcParam, rcNull)
+ *      bad parameters in the call
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcBuffer, rcInsufficient)
+ *      not a large enough buffer to make an identification
+ */
+KRYPTO_EXTERN rc_t CC KFileIsEnc_v1 (const char * buffer, size_t buffer_size);
+
+KRYPTO_EXTERN rc_t CC KFileIsEnc_v2 (const char * buffer, size_t buffer_size);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_krypto_encfile_priv_ */
diff --git a/interfaces/krypto/encfile.h b/interfaces/krypto/encfile.h
new file mode 100644
index 0000000..df8efe1
--- /dev/null
+++ b/interfaces/krypto/encfile.h
@@ -0,0 +1,134 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/*
+ * This needs to be changed to true in about the middle of summer 2013
+ *
+ * When re-enabling this feature also fix test/kreypto/Makefile
+ */
+#define SENC_IS_NENC_FOR_WRITER 0
+
+
+#ifndef _h_krypto_encfile_
+#define _h_krypto_encfile_
+
+#ifndef _h_krypto_extern_
+#include <krypto/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct KFile;
+struct KKey;
+
+typedef struct KEncFile KEncFile;
+
+/* ----------
+ * Read mode is fully seekable if the underlying KFile is seekable some
+ * integrity checking will not be performed in allowing this seeking.
+ *
+ * One difference between update and read mode is the handling of
+ * "missing blocks". Open for update will read a missing block as all
+ * zero while 
+ */
+KRYPTO_EXTERN rc_t CC KEncFileMakeRead (const struct KFile ** pself,
+                                        const struct KFile * encrypted_input,
+                                        const struct KKey * key);
+
+
+/* ----------
+ * Write mode encrypted file can only be written straight through from the
+ * first byte to the last.
+ */
+KRYPTO_EXTERN rc_t CC KEncFileMakeWrite (struct KFile ** pself,
+                                         struct KFile * encrypted_output,
+                                         const struct KKey * key);
+
+
+/* ----------
+ * Update mode is read/write mode where seeking within the file is allowed.
+ * 
+ * One difference between update and read mode is the handling of
+ * "missing blocks". Open for update will read a missing block as all
+ * zero while 
+ */
+KRYPTO_EXTERN rc_t CC KEncFileMakeUpdate (struct KFile ** pself, 
+                                          struct KFile * encrypted,
+                                          const struct KKey * key);
+
+
+/* ----------
+ * Validate mode can not be read or written.
+ * Upon open the whole file is read from begining to end and all CRC
+ * and other integrity checks are performed immedaitely
+ */
+KRYPTO_EXTERN rc_t CC KEncFileValidate (const struct KFile * encrypted);
+
+
+/* ----------
+ * Identify whether a file is a KEncFile type encrypted file by the header.
+ * read the header into a buffer and pass it into this function.  
+ * The buffer_size needs to be at least 8 but more bytes lead to a better
+ * check up to the size of the header of a KEncFile type encrypted file.
+ * As the header may change in the future (in a backwards compatible way)
+ * that size might change from the current 16.
+ *
+ * Possible returns:
+ * 0:
+ *      the file is an identified KEncFile type file.  False positives are
+ *      possible if a file happens to match at 8 or more bytes
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType)
+ *      the file is definitely not a KEncFIle type encrypted file.
+ *     
+ * RC (rcFS, rcFile, rcIdentifying, rcParam, rcNull)
+ *      bad parameters in the call
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcBuffer, rcInsufficient)
+ *      not a large enough buffer to make an identification
+ */
+
+/* requires NCBInenc or NCBIsenc or signature but if available
+ * checks the byte order and version fields
+ */
+KRYPTO_EXTERN rc_t CC KFileIsEnc (const char * buffer, size_t buffer_size);
+
+/* same as above but requires NCBIsenc signature only */
+KRYPTO_EXTERN rc_t CC KFileIsSraEnc (const char * buffer, size_t buffer_size);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_krypto_encfile_ */
diff --git a/interfaces/krypto/extern.h b/interfaces/krypto/extern.h
new file mode 100644
index 0000000..4663585
--- /dev/null
+++ b/interfaces/krypto/extern.h
@@ -0,0 +1,66 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_krypto_extern_
+#define _h_krypto_extern_
+
+#ifndef _h_klib_callconv_
+#include <klib/callconv.h>
+#endif
+
+#if ! defined EXPORT_LATCH && _LIBRARY
+
+#define KRYPTO_EXTERN LIB_EXPORT
+#define KRYPTO_EXTERN_DATA extern LIB_EXPORT
+#define EXPORT_LATCH 1
+
+#else
+
+#define KRYPTO_EXTERN LIB_IMPORT
+#define KRYPTO_EXTERN_DATA LIB_IMPORT
+
+#endif
+
+#if defined _MSC_VER && ! _STATIC
+
+/* __declspec ( dllimport ) will cause creation of
+   function pointers rather than thunks, which makes
+   the code that imports unable to link statically
+   against a library. we leave this symbol defined as
+   "extern" to use thunks instead. as a result, all
+   function addresses resolve to the thunk and not
+   the actual function. */
+#define LIB_IMPORT extern
+#define LIB_EXPORT __declspec ( dllexport )
+
+#else
+
+#define LIB_IMPORT extern
+#define LIB_EXPORT
+
+#endif
+
+#endif /* _h_krypto_extern_ */
diff --git a/interfaces/krypto/key.h b/interfaces/krypto/key.h
new file mode 100644
index 0000000..f170d7d
--- /dev/null
+++ b/interfaces/krypto/key.h
@@ -0,0 +1,103 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kfs_key_
+#define _h_kfs_key_
+
+#ifndef _h_krypto_extern_
+#include <krypto/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct KKey KKey;
+
+
+typedef uint32_t KKeyType;
+enum eKKeyType
+{
+    kkeyNone,
+    kkeyAES128,
+    kkeyAES192,
+    kkeyAES256,
+    kkeyTypeCount
+};
+
+#define KKeyTypeDefault (kkeyAES128)
+
+struct KKey
+{
+    KKeyType type;
+    uint8_t  text [32]; /* might be more, might be less */
+};
+
+enum eKKeySize
+{
+    kkeyMinimumSize = 6
+};
+
+KRYPTO_EXTERN_DATA KKey KKeyEncrypt;
+KRYPTO_EXTERN_DATA KKey KKeyDecrypt;
+
+/* WGA ncryption passwords are only significant to 32 characters */
+#define WGA_MAX_PASSWORD (32)
+KRYPTO_EXTERN_DATA char WGAEncryptPassword[WGA_MAX_PASSWORD];
+KRYPTO_EXTERN_DATA char WGADecryptPassword[WGA_MAX_PASSWORD];
+
+typedef char KryptoKeyMapNCBI [32*2];
+typedef char KryptoKeyMapWGA  [2 + 32*2];
+typedef char KryptoKeyMap [(2*sizeof(KryptoKeyMapNCBI))+(2*sizeof(KryptoKeyMapWGA))+1];
+enum
+{
+    KryptoKeyMapEncrypt = 0,
+    KryptoKeyMapDecrypt = sizeof(KryptoKeyMapNCBI),
+    KryptoKeyMapWGAEncrypt = KryptoKeyMapDecrypt + sizeof(KryptoKeyMapNCBI),
+    KryptoKeyMapWGADecrypt = KryptoKeyMapWGAEncrypt + sizeof(KryptoKeyMapWGA),
+    KryptoKeyMapNul = KryptoKeyMapWGADecrypt + sizeof(KryptoKeyMapWGA)
+};
+
+KRYPTO_EXTERN  rc_t CC KKeyInitRead (KKey * self, KKeyType key_type, 
+                                     const void * password, size_t password_size);
+
+KRYPTO_EXTERN rc_t CC KKeyInitUpdate (KKey * key, KKeyType key_type, 
+                                      const void * password, size_t password_size);
+
+
+#define FAIL_SHORT_PASSWORD (false)
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfs_key_ */
diff --git a/interfaces/krypto/manager-priv.h b/interfaces/krypto/manager-priv.h
new file mode 100644
index 0000000..f2f3346
--- /dev/null
+++ b/interfaces/krypto/manager-priv.h
@@ -0,0 +1,26 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#error "OBSOLETE do not use"
diff --git a/interfaces/krypto/manager.h b/interfaces/krypto/manager.h
new file mode 100644
index 0000000..0581659
--- /dev/null
+++ b/interfaces/krypto/manager.h
@@ -0,0 +1,33 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_krypto_manager_
+#define _h_krypto_manager_
+
+
+DO NOT USE
+
+#endif /* _h_krypto_manager_ */
diff --git a/interfaces/krypto/reencfile.h b/interfaces/krypto/reencfile.h
new file mode 100644
index 0000000..02d4894
--- /dev/null
+++ b/interfaces/krypto/reencfile.h
@@ -0,0 +1,91 @@
+
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_krypto_reencfile_
+#define _h_krypto_reencfile_
+
+#ifndef _h_krypto_extern_
+#include <krypto/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Currently only the read version is implmented
+ */
+#define REENCFILE_WRITE_SUPPORTED 0
+/*
+ * Currently the input encrypted KFile must respond to KFileSize
+ * with the size of the encrypted file. 
+ */
+#define REENCFILE_STREAM_SUPPORTED 0
+
+
+struct KFile;
+struct KKey;
+
+typedef struct KReencFile KReencFile;
+
+/* ----------
+ * Read mode is fully seekable if the underlying KFile is seekable some
+ * integrity checking will not be performed in allowing this seeking.
+ */
+KRYPTO_EXTERN rc_t CC KReencFileMakeRead (const struct KFile ** pself, 
+                                          const struct KFile * encrypted,
+                                          const struct KKey * deckey,
+                                          const struct KKey * enckey);
+
+KRYPTO_EXTERN rc_t CC KEncryptFileMakeRead (const struct KFile ** pself, 
+                                            const struct KFile * encrypted,
+                                            const struct KKey * enckey);
+
+
+/* ----------
+ * Write mode encrypted file can only be written straight through form the
+ * first byte to the last.
+ */
+#if REENCFILE_WRITE_SUPPORTED
+KRYPTO_EXTERN rc_t CC KReencFileMakeWrite (struct KFile ** pself, 
+                                           struct KFile * encrypted,
+                                           const struct KKey * deckey,
+                                           const struct KKey * enckey);
+#endif
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_krypto_reencfile_ */
diff --git a/interfaces/krypto/rng-impl.h b/interfaces/krypto/rng-impl.h
new file mode 100644
index 0000000..96d03fe
--- /dev/null
+++ b/interfaces/krypto/rng-impl.h
@@ -0,0 +1,86 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kryptoimpl_
+#define _h_kryptoimpl_
+
+#include <krypto/extern.h>
+#include <krypto/rng.h>
+#include <klib/refcount.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+
+typedef union KRng_vt KRng_vt;
+
+struct KRng
+{
+    const union KRng_vt *vt;
+    KRefcount refcount;
+};
+
+#ifndef KRNG_IMPL
+#define KRNG_IMPL KRng
+#endif
+
+typedef struct KRng_vt_v1 KRng_vt_v1;
+struct KRng_vt_v1
+{
+    /* version == 1.x */
+    uint32_t maj;
+    uint32_t min;
+
+    /* start minor version == 0 */
+    rc_t (CC * destroy) (KRNG_IMPL * self);
+    rc_t (CC * seed)    (KRNG_IMPL * self);
+    rc_t (CC * reseed)  (KRNG_IMPL * self, const void * buff, size_t buff_size);
+    rc_t (CC * read)    (const KRNG_IMPL *self, void * buff, uint32_t buff_len,
+                         uint32_t * num_read);
+    /* end minor version == 0 */
+    /* start minor version == 1 */
+    /* end minor version == 1 */
+    /* end version == 1.x */
+};
+
+union KRng_vt
+{
+    KRng_vt_v1 v1;
+};
+
+KRYPTO_EXTERN rc_t CC KRngInit (KRng * self, union KRng_vt * vt, const char * type);
+KRYPTO_EXTERN rc_t CC KRngSysEntropy (KRng * self, uint8_t * buffer, size_t size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kryptoimpl_ */
diff --git a/interfaces/krypto/rng.h b/interfaces/krypto/rng.h
new file mode 100644
index 0000000..32b0d47
--- /dev/null
+++ b/interfaces/krypto/rng.h
@@ -0,0 +1,68 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_krypto_rng_
+#define _h_krypto_rng_
+
+#ifndef _h_krypto_extern_
+#include <krypto/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct KRng KRng;
+
+/* attach a new 'ownership' reference */
+KRYPTO_EXTERN rc_t CC KRngAddRef (const KRng * self);
+
+/* release an 'ownership' reference */
+KRYPTO_EXTERN rc_t CC KRngRelease (const KRng * self);
+
+/* call to the system entropy function and [re-]seed the rng */
+KRYPTO_EXTERN rc_t CC KRngSeed (KRng * self);
+
+/* fill a buffer of a given size with random values: type sepcific as to the meaning or size of elements
+ * return the number of elements actually written to the buffer */
+KRYPTO_EXTERN rc_t CC KRngRead (const KRng * self, void * buffer, uint32_t bsize, uint32_t * num_read);
+
+
+/*
+ * Cryptographically secure pseudo-random number generator
+ * elements are 8 bits long
+ */
+KRYPTO_EXTERN rc_t CC KCSPRngMake (KRng ** pself);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_krypto_rng_ */
diff --git a/interfaces/krypto/testciphermgr.h b/interfaces/krypto/testciphermgr.h
new file mode 100644
index 0000000..ffaa35a
--- /dev/null
+++ b/interfaces/krypto/testciphermgr.h
@@ -0,0 +1,58 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_krypto_manager_test_
+#define _h_krypto_manager_test_
+
+#include <krypto/ciphermgr.h>
+
+/* MakeCipher
+ */
+typedef int32_t kcipher_subtype;
+enum
+{
+    ksubcipher_none = -1,
+    ksubcipher_byte,
+    ksubcipher_vec,
+    ksubcipher_vecreg,
+    ksubcipher_accelerated, /* for example AES-NI */ 
+    ksubcipher_count
+};
+
+extern kcipher_subtype KCipherSubType;
+
+
+KRYPTO_EXTERN
+rc_t CC KCipherManagerTestMakeCipher (const KCipherManager * self,
+                                      struct KCipher ** cipher,
+                                      kcipher_type type,
+                                      kcipher_subtype subtype);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfs_manager_ */
diff --git a/interfaces/krypto/wgaencrypt.h b/interfaces/krypto/wgaencrypt.h
new file mode 100644
index 0000000..b8cfeeb
--- /dev/null
+++ b/interfaces/krypto/wgaencrypt.h
@@ -0,0 +1,128 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_krypto_wgaencryptfile_
+#define _h_krypto_wgaencryptfile_
+
+#ifndef _h_krypto_extern_
+#include <krypto/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KFile;
+
+
+/*--------------------------------------------------------------------------
+ * KFile
+ *  wga extensions
+ */
+
+/* MakeWGAEncRead
+ *
+ * Parameters:
+ *   pself is a KFile that will represent the unencrypted side of operations.
+ *
+ *   encrypted is a KFile that will represent the encrypted side of operations.
+ *
+ *   key is an arbitrary array of characters
+ *
+ *   key_size is how many bytes to use from key.  Maximum used is 256.
+ *
+ *   encoding is one of the three values defined by FER_ENCODING above.  Any
+ *   other values will cause a failure.
+ *
+ * KFileMakeWGAEncRead
+ *   A file opened for read can only read and decrypt an encrypted file.  Seeks
+ *   within the file are allowed if the KFile for the encrypted file allows
+ *    seeks.
+ * 
+ * KFileMakeWGAEncUpdate
+ *   A file opened for update must be able to read and write from the encrypted
+ *   file.  Seeks within the file are allowed if the KFile for the encrypted 
+ *   file allows seeks.
+ *
+ * KFileMakeWGAEncRead
+ *   A Write opened file can only be written.  Seeks backwards are not allowed.
+ *   Seeks forward will cause NUL data bytes to be inserted before encryption.
+ *   An attempt will be made to truncate the encrypted file but failure of that
+ *   operation will not fail this call.  Writes will begin at position 0.  If
+ *   the file already existed and could not be truncated a corrupt file will
+ *   result if the whole of the old contents are not over-written.
+ *
+ *
+ * NOTE: cipher must be of type kcipherAES
+ *
+ */
+KRYPTO_EXTERN rc_t CC KFileMakeWGAEncRead (const struct KFile ** pself, 
+                                           const struct KFile * encrypted,
+                                           const char * key,
+                                           size_t key_size);
+
+
+/* IsWGAEnc
+ *  identify whether a file is a KFileWGAEnc type encrypted file by the header.
+ *  read the header into a buffer and pass it into this function.  
+ *  The buffer_size needs to be at least 8 but more bytes lead to a better
+ *  check up to the size of the header of a KFileWGAEnc type encrypted file.
+ *  This file type is deprecated and is not versioned.  Hopefully we won't
+ *  have to deal with changes to the format.
+ *
+ * Possible returns:
+ *  0:
+ *      the file is an identified KFileWGAEnc type file.  False positives are
+ *      possible if a file happens to match at 8 or more bytes
+ *
+ *  RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType)
+ *      the file is definitely not a KFileWGAEnc type encrypted file.
+ *     
+ *  RC (rcFS, rcFile, rcIdentifying, rcParam, rcNull)
+ *      bad parameters in the call
+ *
+ *  RC (rcFS, rcFile, rcIdentifying, rcBuffer, rcInsufficient)
+ *      not a large enough buffer to make an identification
+ */
+KRYPTO_EXTERN rc_t CC KFileIsWGAEnc (const void * buffer, size_t buffer_size);
+
+KRYPTO_EXTERN rc_t CC WGAEncValidate (const struct KFile * file, 
+                                      const char * password,
+                                      size_t password_size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfs_wgaencryptfile_ */
diff --git a/interfaces/ktst/test_tools.hpp b/interfaces/ktst/test_tools.hpp
index 6e7b085..b6644da 100644
--- a/interfaces/ktst/test_tools.hpp
+++ b/interfaces/ktst/test_tools.hpp
@@ -2,6 +2,7 @@
 #define _h_ktst_test_tools_
 
 ////////////////////////////////////////////////////////////////////////////////
+// these macros are available outside of test cases' code
 
 #define LOG(log_level, msg) \
 if (log_level >= ncbi::NK::TestEnv::verbosity) std::cerr << msg
@@ -12,97 +13,7 @@ if (log_level >= ncbi::NK::TestEnv::verbosity) std::cerr << msg
 
 #define TEST_CHECKPOINT(M) TEST_MESSAGE(M)
 
-#define CHECK(exp)       \
-  ( (exp)                      \
-      ? report_passed((#exp), __FILE__, __LINE__) \
-      : report_error ((#exp), __FILE__, __LINE__) )
-
-/* TODO #define CHECK_MESSAGE(exp, M)       \
-  std::ostringstream s, s << M, \
-  ( (exp)                      \
-      ? report_passed(s.str(),__FILE__,__LINE__) \
-      : report_error (s.str(),__FILE__,__LINE__) )*/
-
-#define REQUIRE(exp)     \
-  ( (exp)                      \
-      ? report_passed        ((#exp), __FILE__, __LINE__) \
-      : _REPORT_CRITICAL_ERROR_((#exp), __FILE__, __LINE__) )
-
-#define CHECK_CLOSE(left, right, tolerance) \
-( (ncbi::NK::abs((left) - (right)) < (tolerance)) \
-?report_passed_close(#left,#right,(left),(right),(tolerance),__FILE__,__LINE__)\
-: report_error_close(#left,#right,(left),(right),(tolerance), \
-    ncbi::NK::abs((left) - (right)), __FILE__, __LINE__) )
-
-#define REQUIRE_CLOSE(left, right, tolerance) \
-( (ncbi::NK::abs((left) - (right)) < (tolerance)) \
-?report_passed_close(#left,#right,(left),(right),(tolerance),__FILE__,__LINE__)\
-: report_error_close(#left,#right,(left),(right),(tolerance), \
-    ncbi::NK::abs((left) - (right)), __FILE__, __LINE__, true) )
-
-#define CHECK_EQUAL(e1, e2)  \
-  ( ((e1) == (e2))                      \
-      ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, "==", "!=") \
-      : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, "==", "!=") )
-
-#define REQUIRE_EQUAL(e1, e2)  \
-  ( ((e1) == (e2))                      \
-      ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, "==", "!=") \
-      : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, "==", "!=", true) )
-
-#define CHECK_GE(e1, e2) \
-  ( ((e1) >= (e2))                      \
-      ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, ">=", "<") \
-      : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, ">=", "<") )
-
-#define REQUIRE_GE(e1, e2) \
-  ( ((e1) >= (e2))                      \
-      ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, ">=", "<") \
-      : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, ">=", "<", true) )
-
-#define CHECK_GT(e1, e2) \
-  ( ((e1) > (e2))                      \
-      ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, ">", "<=") \
-      : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, ">", "<=") )
-
-#define REQUIRE_GT(e1, e2) \
-  ( ((e1) > (e2))                      \
-      ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, ">", "<=") \
-      : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, ">", "<=", true) )
-
-#define CHECK_LE(e1, e2) \
-  ( ((e1) <= (e2))                      \
-      ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, "<=", ">") \
-      : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, "<=", ">") )
-
-#define REQUIRE_LE(e1, e2) \
-  ( ((e1) <= (e2))                      \
-      ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, "<=", ">") \
-      : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, "<=", ">", true) )
-
-#define CHECK_LT(e1, e2) \
-  ( ((e1) < (e2))                      \
-      ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, "<", ">=") \
-      : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, "<", ">=") )
-
-#define REQUIRE_LT(e1, e2) \
-  ( ((e1) < (e2))                      \
-      ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, "<", ">=") \
-      : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, "<", ">=", true) )
-
-#define CHECK_NE(e1, e2)  \
-  ( ((e1) != (e2))                      \
-      ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, "!=", "==") \
-      : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, "!=", "==") )
-
-#define REQUIRE_NE(e1, e2)  \
-  ( ((e1) != (e2))                      \
-      ? report_passed2(#e1,#e2,(e1),(e2),__FILE__,__LINE__, "!=", "==") \
-      : report_error2 (#e1,#e2,(e1),(e2),__FILE__,__LINE__, "!=", "==", true) )
-
-#define ERROR( msg_ )    \
-      report_error( (msg_), __FILE__, __LINE__, true )
-
+// report failure from a fixture
 #define FAIL( msg_ )     \
       _REPORT_CRITICAL_ERROR_( (msg_), __FILE__, __LINE__, true )
 
diff --git a/interfaces/ktst/unit_test.hpp b/interfaces/ktst/unit_test.hpp
index c4385e6..1cdbd50 100644
--- a/interfaces/ktst/unit_test.hpp
+++ b/interfaces/ktst/unit_test.hpp
@@ -1,70 +1,249 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
 #ifndef _h_ktst_unit_test_
 #define _h_ktst_unit_test_
 
-#include <ktst/test_tools.hpp>
 #include <ktst/unit_test_suite.hpp>
 
-#include <iostream> // cout
-#include <sstream> // ostringstream
-#include <vector>
-#include <cassert>
-#include <csignal> /* sigaction */
-
 ////////////////////////////////////////////////////////////////////////////////
+namespace ncbi { namespace NK {
 
-#define FIXTURE_TEST_CASE(test_name, F) \
-namespace ncbi { namespace NK { \
-class C##test_name : public TestCase { \
-public: \
-    C##test_name(void* globalFixtute, F* fixture) : TestCase(#test_name) \
-        , _globalFixture \
-            (static_cast<AUTO_TEST_CASE_FIXTURE*>(globalFixtute)) \
-        , _fixture(fixture) {} \
-    void test_method(); \
-private: \
-    AUTO_TEST_CASE_FIXTURE* GET_GLOBAL_FIXTURE(void) const \
-    { return _globalFixture; } \
-    F* GET_FIXTURE(void) const { return _fixture; } \
-    AUTO_TEST_CASE_FIXTURE* _globalFixture; \
-    F* _fixture; \
-}; \
-class C##test_name##Invoker : TestInvoker { \
-public: C##test_name##Invoker(void) : TestInvoker(#test_name) \
-{ GetTestSuite()->Add(this); } \
-private: virtual void Run(void* globalFixtute) { \
-        F fixture; \
-        C##test_name t(globalFixtute, &fixture); \
-        try { \
-            t.test_method(); \
-            SetErrorCounter(t.GetErrorCounter()); \
-        } catch (...) { \
-            SetErrorCounter(t.GetErrorCounter()); \
-            throw; \
-        } \
-    } \
-}; \
-static C##test_name##Invoker* _##test_name##instance \
-    = new C##test_name##Invoker; \
-} } /* ncbi::NK */ \
-void ncbi::NK::C##test_name::test_method()
+// a utility template used to pass test character string case names to FixtureTestCase
+template<class T>
+struct TestCaseTraits
+{
+    static const char* name;
+};
+
+// create an executable test case class with the given fixture.
+template <class TCaseTraits, class TFixture>
+class FixtureTestCase : public ncbi::NK::TestCase, public TFixture { 
+public:
+    typedef TCaseTraits Traits;
+
+    // Represents the global test fixture. Cast to the correct data type in the test code
+    typedef void AUTO_TEST_CASE_FIXTURE;
+
+public: 
+    FixtureTestCase(void* globalFixture) 
+    : TestCase(TCaseTraits::name), _globalFixture (static_cast<AUTO_TEST_CASE_FIXTURE*>(globalFixture)) 
+    {
+    }
+
+protected: 
+    AUTO_TEST_CASE_FIXTURE* GET_GLOBAL_FIXTURE(void) const { return _globalFixture; } 
+    AUTO_TEST_CASE_FIXTURE* _globalFixture; 
+
+    const TFixture* GET_FIXTURE(void) const { return this; } 
+    TFixture* GET_FIXTURE(void) { return this; } 
+}; 
 
+// Create an invoker object for a test case with a given fixture.
+// The invoker object is static and registers itself with the global test suite during initialization.
+// When executed, the invoker will instantiate a fixture and a test case object and execute object's test method 
+// on the current thread.
+template <class TCase, class TFixture>
+class TestCaseInvoker : ncbi::NK::TestInvoker { 
+public: 
+    TestCaseInvoker() : TestInvoker(TCase::Traits::name) 
+    { 
+        ncbi::NK::GetTestSuite()->Add(this); 
+    } 
+private: 
+    virtual void Run(void* globalFixture) 
+    { 
+        try
+        { // in case constructor throws
+            TCase t(globalFixture); 
+            try { 
+                t.test_method(); 
+                SetErrorCounter(t.GetErrorCounter()); 
+            } catch (...) { 
+                SetErrorCounter(t.GetErrorCounter()); 
+                if (GetErrorCounter() == 0)
+                {
+                    SetErrorCounter(1);
+                }
+                throw; 
+            } 
+        }
+        catch (const execution_aborted&)
+        {
+            SetErrorCounter(1);
+            throw; 
+        } 
+        catch (const std::exception& ex)
+        {
+            if (!ncbi::NK::TestEnv::lastLocation.empty())
+            {
+                LOG(ncbi::NK::LogLevel::e_fatal_error, ncbi::NK::TestEnv::lastLocation << ": last checkpoint before exception \"" << ex.what() << "\"\n");
+            }        
+            SetErrorCounter(1);
+            throw; 
+        } 
+        catch (...) // a non-framework exception escaped
+        { 
+            if (!ncbi::NK::TestEnv::lastLocation.empty())
+            {
+                LOG(ncbi::NK::LogLevel::e_fatal_error, ncbi::NK::TestEnv::lastLocation << ": last checkpoint before an unknown exception\n");
+            }        
+            SetErrorCounter(1);
+            throw; 
+        } 
+    } 
+    static TestCaseInvoker instance;
+}; 
+
+// Create an out-of-thread invoker object for a test case with a given fixture.
+// The invoker object is static and registers itself with the global test suite during initialization.
+// When executed, the invoker will instantiate a fixture and a test case object and execute object's test method 
+// as a child process (Unix) or on a separate thread(Windows).
+template <class TCase, class TFixture, int rc, int timeout>
+class ProcessTestCaseInvoker : ncbi::NK::TestInvoker { 
+public: 
+    ProcessTestCaseInvoker() : TestInvoker(TCase::Traits::name) 
+    { 
+        ncbi::NK::GetTestSuite()->Add(this); 
+    } 
+private: 
+    virtual void Run(void* globalFixture) 
+    { 
+        try
+        {
+            TCase t(globalFixture); 
+            if (ncbi::NK::TestEnv::RunProcessTestCase(t, (void(ncbi::NK::TestCase::*)())&TCase::test_method, timeout) != rc)
+            {
+                throw ncbi::NK::execution_aborted(); 
+            }
+            SetErrorCounter(t.GetErrorCounter());
+        }
+        catch (...)
+        { 
+            if (GetErrorCounter() == 0)
+            {
+                SetErrorCounter(1);
+            }
+            throw; 
+        } 
+    }
+}; 
+
+}} // namespace
+
+// macros to be used to instantiate test cases
+
+// user code should not not use this directly. 
+#define DEFINE_TEST_CASE(testcase, F, rc, timeout) \
+    struct testcase { \
+        class dummy{}; \
+        typedef ncbi::NK::FixtureTestCase< ::ncbi::NK::TestCaseTraits<dummy>, F> Case;\
+        struct Instance : public Case { \
+            Instance(void* g) : Case(g){}\
+            void test_method(); } ; \
+        class Invoker : public ::ncbi::NK::TestCaseInvoker<Instance, F> {}; \
+        class ProcessInvoker : public ::ncbi::NK::ProcessTestCaseInvoker<Instance, F, rc, timeout> {}; \
+    };\
+    template<> const char* ::ncbi::NK::TestCaseTraits<testcase::dummy>::name=#testcase; 
+
+// define an in-thread test case with a fixture
+#define FIXTURE_TEST_CASE(testcase, F) \
+    DEFINE_TEST_CASE(testcase, F, 0, 0) \
+    static testcase::Invoker testcase##Invoker;\
+    void testcase::Instance::test_method()
+
+// define an in-thread test case without a fixture
 #define TEST_CASE(test_name) FIXTURE_TEST_CASE(test_name, ncbi::NK::Empty)
 
+// define an out-of-thread test case with a fixture, expected exit code, and a timeout (in seconds)
+#define PROCESS_FIXTURE_TEST_CASE(testcase, F, rc, timeout) \
+    DEFINE_TEST_CASE(testcase, F, rc, timeout) \
+    static testcase::ProcessInvoker testcase##Invoker;\
+    void testcase::Instance::test_method()
+
+// define an out-of-thread test case with an expected exit code and a timeout (in seconds), no fixture
+#define PROCESS_TEST_CASE(test_name, rc, timeout) PROCESS_FIXTURE_TEST_CASE(test_name, ncbi::NK::Empty, rc, timeout)
+
+// fix param type
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+#define DECLARE_EXTERN_C_ENTRYPOINTS                             \
+    extern "C"                                                   \
+    {                                                            \
+        rc_t CC UsageSummary ( const char *progname )            \
+        { return ncbi::NK::TestEnv::UsageSummary ( progname ); } \
+                                                                 \
+        rc_t CC Usage ( const Args *args )                       \
+        { return ncbi::NK::TestEnv::Usage ( args ); }            \
+    }
+#else
+#define DECLARE_EXTERN_C_ENTRYPOINTS
+#endif
+
+// define a suite of test cases with a global fixture 
+// Note: Typed access to global fixture from the test cases' code is not currently implemented
 #define FIXTURE_TEST_SUITE( suite_name, F ) \
+DECLARE_EXTERN_C_ENTRYPOINTS \
+typedef F AUTO_TEST_CASE_FIXTURE; \
+int suite_name(int argc, char* argv[]) { \
+    ncbi::NK::TestEnv args(argc, argv); \
+    if (args.catch_system_errors) { \
+        args.set_handlers(); \
+    } \
+    ncbi::NK::counter_t ec = ncbi::NK::Main<AUTO_TEST_CASE_FIXTURE>(argc, argv, #suite_name); \
+    return ec == 0 ? 0 : -ec; /* positive rc represents the signal that killed the process */ \
+} 
+
+// define a suite of test cases with a global fixture
+// with callback to handle application command line arguments
+#define FIXTURE_TEST_SUITE_WITH_ARGS_HANDLER( suite_name, F, Handler ) \
+DECLARE_EXTERN_C_ENTRYPOINTS \
 typedef F AUTO_TEST_CASE_FIXTURE; \
-int main(int argc, char* argv[]) { \
+int suite_name(int argc, char* argv[]) { \
+    ncbi::NK::TestEnv args(argc, argv, Handler); \
+    if (args.catch_system_errors) { \
+        args.set_handlers(); \
+    } \
+    ncbi::NK::counter_t ec = ncbi::NK::Main<AUTO_TEST_CASE_FIXTURE>(argc, argv, #suite_name); \
+    return ec == 0 ? 0 : -ec; /* positive rc represents the signal that killed the process */ \
+}
+
+// define a suite of test cases with a global fixture; command line parsing, Usage and UsageSummary functions are supplied by the user's code
+#define FIXTURE_TEST_SUITE_WITH_USAGE( suite_name, F ) \
+typedef F AUTO_TEST_CASE_FIXTURE; \
+int suite_name(int argc, char* argv[]) { \
     ncbi::NK::TestEnv args(argc, argv); \
     if (args.catch_system_errors) { \
         args.set_handlers(); \
     } \
-    ncbi::NK::counter_t ec = \
-        ncbi::NK::Main<AUTO_TEST_CASE_FIXTURE>(argc, argv, #suite_name); \
-    return ec == 0 ? EXIT_SUCCESS : EXIT_FAILURE; \
-} \
-std::string ncbi::NK::TestEnv::lastLocation; \
-ncbi::NK::LogLevel::E ncbi::NK::TestEnv::verbosity = LogLevel::e_error;
-
-#define TEST_SUITE( suite_name ) \
-FIXTURE_TEST_SUITE(suite_name, ncbi::NK::Empty)
+    ncbi::NK::counter_t ec = ncbi::NK::Main<AUTO_TEST_CASE_FIXTURE>(argc, argv, #suite_name); \
+    return ec == 0 ? 0 : -ec; /* positive rc represents the signal that killed the process */ \
+} 
+
+#define TEST_SUITE( suite_name ) FIXTURE_TEST_SUITE(suite_name, ncbi::NK::Empty)
+#define TEST_SUITE_WITH_USAGE( suite_name ) FIXTURE_TEST_SUITE_WITH_USAGE(suite_name, ncbi::NK::Empty)
+#define TEST_SUITE_WITH_ARGS_HANDLER( suite_name, Handler ) FIXTURE_TEST_SUITE_WITH_ARGS_HANDLER(suite_name, ncbi::NK::Empty, Handler)
 
 #endif// _h_ktst_unit_test_
diff --git a/interfaces/ktst/unit_test_suite.hpp b/interfaces/ktst/unit_test_suite.hpp
index e01baaf..0d87c48 100644
--- a/interfaces/ktst/unit_test_suite.hpp
+++ b/interfaces/ktst/unit_test_suite.hpp
@@ -1,13 +1,67 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
 #ifndef NCBI_NK_UNIT_TEST__SUITE_HPP
 #define NCBI_NK_UNIT_TEST__SUITE_HPP
 
-#include <iostream> // cerr
-#include <sstream>  // ostringstream
+// turn on INT64_C, UINT64_C etc.
+#define __STDC_CONSTANT_MACROS
+#include <klib/defs.h>
+
+#include <string>
 #include <vector>
-#include <csignal>  // sigaction 
 #include <cassert>
+#include <iostream>
+
+// it's generally a bad idea to make the test suite rely upon code under test
+#define ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED 0
 
 ////////////////////////////////////////////////////////////////////////////////
+// these macros are available outside of test cases' code
+
+#define LOG(log_level, msg) \
+    if (log_level >= ncbi::NK::TestEnv::verbosity) std::cerr << msg
+
+#define TEST_MESSAGE(M) \
+{ ncbi::NK::saveLocation(__FILE__,__LINE__); \
+    LOG(ncbi::NK::LogLevel::e_message, M << std::endl); }
+
+#define TEST_CHECKPOINT(M) TEST_MESSAGE(M)
+
+// report failure from a fixture
+#define FAIL( msg_ )     \
+      ncbi::NK::_REPORT_CRITICAL_ERROR_( (msg_), __FILE__, __LINE__, true )
+
+#define GET_TEST_SUITE ncbi::NK::GetTestSuite
+
+////////////////////////////////////////////////////////////////////////////////
+
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+struct Args;
+#endif
 
 namespace ncbi { namespace NK { 
 
@@ -31,196 +85,79 @@ public:
     };
 };
 
+extern void saveLocation(const char* file, int line);
+extern void _REPORT_CRITICAL_ERROR_(const std::string& msg, const char* file, int line, bool is_msg);
+
 template<class T> const T abs(const T& a) { return a >= 0 ? a : -a; }
 
+class TestCase;
+
 class TestEnv {
 public:
-    TestEnv(int argc, char* argv[]) : catch_system_errors(true) {
-        process_args(argc, argv);
-    }
+	typedef rc_t ArgsHandler(int argc, char* argv[]);
 
-    void set_handlers(void) {
-        struct sigaction act;
-        memset(&act, 0, sizeof act);
-        act.sa_handler = SigHandler;
-        act.sa_flags = SA_RESETHAND;
-        int status = sigaction(SIGFPE , &act, NULL);
-        status     = sigaction(SIGILL , &act, NULL);
-        status     = sigaction(SIGSEGV, &act, NULL);
-    }
+    TestEnv(int argc, char* argv[], ArgsHandler *argsHandler = NULL);
+    ~TestEnv(void);
+
+    static void set_handlers(void);
 
     static std::string lastLocation;
     static LogLevel::E verbosity;
     bool catch_system_errors;
 
+    static int RunProcessTestCase(TestCase&, void(TestCase::*)(), int);
+    static unsigned int Sleep(unsigned int seconds);
+    
+    static const int TEST_CASE_TIMED_OUT=14;
+    static const int TEST_CASE_FAILED=255;
+
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+    static struct Args* GetArgs() { return args; }
+#endif
+
+    static rc_t UsageSummary(const char* progname);
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+    static rc_t Usage(const Args* args);
+#else
+    static rc_t Usage(const char *progname);
+#endif
+
 private:
-    static void SigHandler(int sig) {
-        switch (sig) {
-            case SIGFPE:
-                LOG(ncbi::NK::LogLevel::e_fatal_error,
-                    "fatal error: signal: SIGFPE(Floating point exception)\n");
-                break;
-            case SIGILL:
-                LOG(ncbi::NK::LogLevel::e_fatal_error,
-                    "fatal error: signal: SIGILL(Illegal instruction)\n");
-                break;
-            case SIGSEGV:
-                LOG(ncbi::NK::LogLevel::e_fatal_error,
-                    "fatal error: signal: SIGSEGV(Segmentation fault)\n");
-                break;
-            default:
-                LOG(ncbi::NK::LogLevel::e_fatal_error,
-                    "fatal error: signal: " << sig << "\n");
-                break;
-        }
-        if (!ncbi::NK::TestEnv::lastLocation.empty()) {
-            LOG(ncbi::NK::LogLevel::e_fatal_error,
-                ncbi::NK::TestEnv::lastLocation << ": last checkpoint\n");
-        }
-        LOG(ncbi::NK::LogLevel::e_fatal_error, "Test is aborted\n");
-        exit(1);
-    }
+    static void TermHandler();
 
-    void process_args(int argc, char* argv[]) {
-        bool debug = false;
-        LogLevel::E detected = LogLevel::e_undefined;
-        char arg_catch_system_errors[] = "-catch_system_errors=";
-        char arg_log_level          [] = "-l=";
-        for (int i = 1; i < argc; ++i) {
-            if (strncmp(argv[i], arg_log_level, strlen(arg_log_level))
-                == 0)
-            {
-                char* a = argv[i] + strlen(arg_log_level);
-                if (strcmp(a, "test_suite") == 0)
-                { detected = LogLevel::e_test_suite; }
-                else if (strcmp(a, "all"    ) == 0)
-                { detected = LogLevel::e_all; }
-                else if (strcmp(a, "message") == 0)
-                { detected = LogLevel::e_message; }
-                else if (strcmp(a, "warning") == 0)
-                { detected = LogLevel::e_warning; }
-                else if (strcmp(a, "error"  ) == 0)
-                { detected = LogLevel::e_error; }
-                else if (strcmp(a, "nothing") == 0)
-                { detected = LogLevel::e_nothing; }
-                else if (strcmp(a, "fatal_error") == 0)
-                { detected = LogLevel::e_fatal_error; }
-                if (detected != LogLevel::e_undefined) {
-                    verbosity = detected;
-                    if (debug) {
-                        LOG(LogLevel::e_nothing,
-                            "debug: log_level was set to " << a << std::endl);
-                    }
-                }
-                else {
-                    verbosity = LogLevel::e_error;
-                    if (debug) {
-                        LOG(LogLevel::e_nothing,
-                            "debug: log_level was set to error\n");
-                    }
-                }
-            }
-            else if (strncmp(argv[i], arg_catch_system_errors,
-                strlen(arg_catch_system_errors)) == 0)
-            {
-                char* a = argv[i] + strlen(arg_catch_system_errors);
-                if (strcmp(a, "n") == 0 || strcmp(a, "no") == 0) {
-                    catch_system_errors = false;
-                    if (debug) {
-                        LOG(LogLevel::e_nothing,
-                           "debug: arg_catch_system_errors was set to false\n");
-                    }
-                }
-                else {
-                    if (debug) {
-                        LOG(LogLevel::e_nothing,
-                           "debug: arg_catch_system_errors was set to true\n");
-                    }
-                }
-            }
-            else if (strcmp(argv[i], "-debug") == 0) {
-                debug = true;
-                LOG(LogLevel::e_nothing, "debug: debug was set to true\n");
-            }
-            else if (strcmp(argv[i], "-h") == 0) {
-                if (debug) {
-                    LOG(LogLevel::e_nothing, "debug: help was set to true\n");
-                }
-                std::cerr << "Usage:\n"
-<< argv[0] << " [-debug] [-catch_system_errors=[yes|y|no|n]] "
-"[-l=<value>] [-h]\nwhere:\n"
-"debug - Print recognized command line arguments (should be specified first)\n"
-"catch_system_errors - "
-  "Allows to switch between catching and ignoring system errors (signals)\n"
-"l (log_level) - Specifies log level\n"
-"\tall        - report all log messages\n"
-"\t             including the passed test notification\n"
-"\ttest_suite - show test suite messages\n"
-"\tmessage    - show user messages\n"
-"\twarning    - report warnings issued by user\n"
-"\terror      - report all error conditions (default)\n"
-"\tfatal_error- report user or system originated fatal errors\n"
-"\t             (for example, memory access violation)\n"
-"\tnothing    - do not report any information\n"
-"h (help) - this help message\n"; exit(0);
-            }
-        }
+    static void SigHandler(int sig);
 
-        if (verbosity == LogLevel::e_undefined) {
-            verbosity = LogLevel::e_error;
-            if (debug) {
-                LOG(LogLevel::e_nothing,
-                    "debug: log_level was set to error\n");
-            }
-        }
-    }
+    rc_t process_args(int argc, char* argv[], ArgsHandler* argsHandler);
+
+    int argc2;
+    char** argv2;
+
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+    static struct Args* args;
+#endif
 };
 
 class TestCase {
 protected:
-    TestCase(const std::string& name) : _name(name), _ec(0) {}
+    TestCase(const std::string& name);
 
 public:
     ncbi::NK::counter_t GetErrorCounter(void) { return _ec; }
     const std::string& GetName(void) const { return _name; }
 
 protected:
-    void report_error(const char* msg, const char* file, int line,
-        bool is_msg = false, bool isCritical = false)
-    {
-        ncbi_NK_saveLocation(file, line);
-        ++_ec;
-        LOG(LogLevel::e_error, file << "(" << line << "): ");
-        if (isCritical) {
-            LOG(LogLevel::e_error, "fatal ");
-        }
-        LOG(LogLevel::e_error, "error in \"" << _name << "\": ");
-        if (is_msg) {
-            LOG(LogLevel::e_error, msg);
-        }
-        else {
-            if (isCritical) {
-                LOG(LogLevel::e_error, "critical ");
-            }
-            LOG(LogLevel::e_error, "check " << msg << " failed");
-        }
-        LOG(LogLevel::e_error, std::endl);
-        if (isCritical)
-        { throw ncbi::NK::execution_aborted(); }
-    }
+    void ErrorCounterAdd(ncbi::NK::counter_t ec) { _ec += ec; }
 
-    void report_passed(const char* msg, const char* file, int line) {
-        ncbi_NK_saveLocation(file, line);
-        LOG(LogLevel::e_all, file << "(" << line << "): info: "
-            "check " << msg << " passed" << std::endl);
-    }
+    void report_error(const char* msg, const char* file, int line, bool is_msg = false, bool isCritical = false);
 
-    template<class T1, class T2>
-    void report_error2(const char* e1, const char* e2, T1 t1, T2 t2,
+    void report_passed(const char* msg, const char* file, int line);
+
+    template<class T1>
+    void report_error2(const char* e1, const char* e2, T1 t1, T1 t2,
         const char* file, int line, const char* eq, const char* ne,
         bool isCritical = false)
     {
-        ncbi_NK_saveLocation(file, line);
+        ncbi::NK::saveLocation(file, line);
         ++_ec;
         LOG(LogLevel::e_error, file << "(" << line << "): ");
         if (isCritical) {
@@ -236,13 +173,29 @@ protected:
         if (isCritical)
         { throw ncbi::NK::execution_aborted(); }
     }
+    // pointers reported as ints (otherwise << may crash if given an invalid pointer)
+    template<class T1>
+    void report_error2(const char* e1, const char* e2, const T1* t1, const T1* t2,
+        const char* file, int line, const char* eq, const char* ne,
+        bool isCritical = false)
+    {
+        report_error2(e1, e2, (uint64_t)t1, (uint64_t)t2,file, line, eq, ne,isCritical);
+    }
+    template<class T1>
+    void report_error2(const char* e1, const char* e2, T1* t1, T1* t2,
+        const char* file, int line, const char* eq, const char* ne,
+        bool isCritical = false)
+    {
+        report_error2(e1, e2, (uint64_t)t1, (uint64_t)t2,file, line, eq, ne,isCritical);
+    }
+
 
     template<class T1, class T2>
     void report_passed2(const char* e1, const char* e2,
         const T1& t1, const T2& t2,
         const char* file, int line, const char* eq, const char* ne)
     {
-        ncbi_NK_saveLocation(file, line);
+        ncbi::NK::saveLocation(file, line);
         LOG(LogLevel::e_all, file << "(" << line << "): info: "
             "check " << e1 << " " << eq << " " << e2 << " passed" << std::endl);
     }
@@ -252,7 +205,7 @@ protected:
         const T1& t1, const T2& t2, const T3& tolerance,
         const char* file, int line)
     {
-        ncbi_NK_saveLocation(file, line);
+        ncbi::NK::saveLocation(file, line);
         LOG(LogLevel::e_all, file << "(" << line << "): "
             "info: difference between "
             << e1 << "{" << t1 << "} and " << e2 << "{" << t2 << "} "
@@ -264,7 +217,7 @@ protected:
         const T1& t1, const T2& t2, const T3& tolerance, const T4& diff,
         const char* file, int line, bool isCritical = false)
     {
-        ncbi_NK_saveLocation(file, line);
+        ncbi::NK::saveLocation(file, line);
         ++_ec;
         LOG(LogLevel::e_error, file << "(" << line << "): ");
         if (isCritical) {
@@ -278,15 +231,164 @@ protected:
         { throw ncbi::NK::execution_aborted(); }
     }
 
-    void ncbi_NK_saveLocation(const char* file, int line) {
-        std::ostringstream s;
-        s << file << "(" << line << ")";
-        ncbi::NK::TestEnv::lastLocation = s.str();
+    void _REPORT_CRITICAL_ERROR_(const std::string& msg, const char* file, int line, bool is_msg = false);
+
+#define CHECK(exp)       \
+  ( (exp)                      \
+      ? report_passed((#exp), __FILE__, __LINE__) \
+      : report_error ((#exp), __FILE__, __LINE__) )
+
+/* TODO #define CHECK_MESSAGE(exp, M)       \
+  std::ostringstream s, s << M, \
+  ( (exp)                      \
+      ? report_passed(s.str(),__FILE__,__LINE__) \
+      : report_error (s.str(),__FILE__,__LINE__) )*/
+
+#define REQUIRE(exp)     \
+  ( (exp)                      \
+      ? report_passed        ((#exp), __FILE__, __LINE__) \
+      : _REPORT_CRITICAL_ERROR_((#exp), __FILE__, __LINE__) )
+
+#define CHECK_CLOSE(left, right, tolerance) \
+( (ncbi::NK::abs((left) - (right)) < (tolerance)) \
+?report_passed_close(#left,#right,(left),(right),(tolerance),__FILE__,__LINE__)\
+: report_error_close(#left,#right,(left),(right),(tolerance), \
+    ncbi::NK::abs((left) - (right)), __FILE__, __LINE__) )
+
+#define REQUIRE_CLOSE(left, right, tolerance) \
+( (ncbi::NK::abs((left) - (right)) < (tolerance)) \
+?report_passed_close(#left,#right,(left),(right),(tolerance),__FILE__,__LINE__)\
+: report_error_close(#left,#right,(left),(right),(tolerance), \
+    ncbi::NK::abs((left) - (right)), __FILE__, __LINE__, true) )
+
+    template<class T>
+    void AssertEqual(const T& e1, const T& e2, const char* e1str, const char* e2str, const char* file, unsigned int line, bool critical=false)
+    {
+        if (e1 == e2)
+        {
+            report_passed2(e1str, e2str, e1, e2, file, line, "==", "!=");
+        }
+        else
+        {
+            report_error2 (e1str, e2str, e1, e2, file, line, "==", "!=", critical);
+        }
+    }
+#define CHECK_EQUAL(e1, e2)     AssertEqual((e1),(e2),#e1,#e2,__FILE__,__LINE__, false)
+#define CHECK_EQ(e1, e2)        CHECK_EQUAL(e1,e2)
+#define REQUIRE_EQUAL(e1, e2)   AssertEqual((e1),(e2),#e1,#e2,__FILE__,__LINE__, true)
+#define REQUIRE_EQ(e1, e2)      REQUIRE_EQUAL(e1,e2)
+
+    template<class T>
+    void AssertNotEqual(const T& e1, const T& e2, const char* e1str, const char* e2str, const char* file, unsigned int line, bool critical=false)
+    {
+        if (e1 != e2)
+        {
+            report_passed2(e1str, e2str, e1, e2, file, line, "!=", "==");
+        }
+        else
+        {
+            report_error2 (e1str, e2str, e1, e2, file, line, "!=", "==", critical);
+        }
+    }
+#define CHECK_NE(e1, e2)     AssertNotEqual((e1),(e2),#e1,#e2,__FILE__,__LINE__, false)
+#define REQUIRE_NE(e1, e2)   AssertNotEqual((e1),(e2),#e1,#e2,__FILE__,__LINE__, true)
+
+    template<class T>
+    void AssertGreaterOrEqual(const T& e1, const T& e2, const char* e1str, const char* e2str, const char* file, unsigned int line, bool critical=false)
+    {
+        if (e1 >= e2)
+        {
+            report_passed2(e1str, e2str, e1, e2, file, line, ">=", "<");
+        }
+        else
+        {
+            report_error2 (e1str, e2str, e1, e2, file, line, ">=", "<", critical);
+        }
+    }
+#define CHECK_GE(e1, e2)    AssertGreaterOrEqual((e1),(e2),#e1,#e2,__FILE__,__LINE__, false)
+#define REQUIRE_GE(e1, e2)  AssertGreaterOrEqual((e1),(e2),#e1,#e2,__FILE__,__LINE__, true)
+
+    template<class T>
+    void AssertGreater(const T& e1, const T& e2, const char* e1str, const char* e2str, const char* file, unsigned int line, bool critical=false)
+    {
+        if (e1 > e2)
+        {
+            report_passed2(e1str, e2str, e1, e2, file, line, ">", "<=");
+        }
+        else
+        {
+            report_error2 (e1str, e2str, e1, e2, file, line, ">", "<=", critical);
+        }
+    }
+#define CHECK_GT(e1, e2)    AssertGreater((e1),(e2),#e1,#e2,__FILE__,__LINE__, false)
+#define REQUIRE_GT(e1, e2)  AssertGreater((e1),(e2),#e1,#e2,__FILE__,__LINE__, true)
+
+    template<class T>
+    void AssertLessOrEqual(const T& e1, const T& e2, const char* e1str, const char* e2str, const char* file, unsigned int line, bool critical=false)
+    {
+        if (e1 <= e2)
+        {
+            report_passed2(e1str, e2str, e1, e2, file, line, "<=", ">");
+        }
+        else
+        {
+            report_error2 (e1str, e2str, e1, e2, file, line, "<=", ">", critical);
+        }
+    }
+#define CHECK_LE(e1, e2)    AssertLessOrEqual((e1),(e2),#e1,#e2,__FILE__,__LINE__, false)
+#define REQUIRE_LE(e1, e2)  AssertLessOrEqual((e1),(e2),#e1,#e2,__FILE__,__LINE__, true)
+
+    template<class T>
+    void AssertLess(const T& e1, const T& e2, const char* e1str, const char* e2str, const char* file, unsigned int line, bool critical=false)
+    {
+        if (e1 < e2)
+        {
+            report_passed2(e1str, e2str, e1, e2, file, line, "<", ">=");
+        }
+        else
+        {
+            report_error2 (e1str, e2str, e1, e2, file, line, "<", ">=", critical);
+        }
     }
+#define CHECK_LT(e1, e2)    AssertLess((e1),(e2),#e1,#e2,__FILE__,__LINE__, false)
+#define REQUIRE_LT(e1, e2)  AssertLess((e1),(e2),#e1,#e2,__FILE__,__LINE__, true)
+
+    void report_rc(rc_t rc, const char* callStr, const char* file, int line, int successExpected, bool isCritical = false);
 
-    void _REPORT_CRITICAL_ERROR_(const std::string& msg,
-        const char* file, int line, bool is_msg = false)
-    { report_error( msg.c_str(), file, line, is_msg, true ); }
+#define CHECK_RC(exp)   report_rc((exp), #exp, __FILE__, __LINE__, true, false)
+#define REQUIRE_RC(exp) report_rc((exp), #exp, __FILE__, __LINE__, true, true)
+#define CHECK_RC_FAIL(exp)   report_rc((exp), #exp, __FILE__, __LINE__, false, false)
+#define REQUIRE_RC_FAIL(exp) report_rc((exp), #exp, __FILE__, __LINE__, false, true)
+
+    template<class T>
+    void AssertNull(const T* e1, const char* e1str,const char* file, unsigned int line, bool critical=false)
+    {
+        if (e1 == 0)
+        {
+            report_passed2(e1str, "NULL", e1, (const T*)0, file, line, "==", "!=");
+        }
+        else
+        {
+            report_error2 (e1str, "NULL", e1, (const T*)0, file, line, "==", "!=", critical);
+        }
+    }
+#define CHECK_NULL(e1)   AssertNull((e1), #e1, __FILE__,__LINE__, false)
+#define REQUIRE_NULL(e1) AssertNull((e1), #e1, __FILE__,__LINE__, true)
+
+    template<class T>
+    void AssertNotNull(const T* e1, const char* e1str,const char* file, unsigned int line, bool critical=false)
+    {
+        if (e1 != 0)
+        {
+            report_passed2(e1str, "NULL", e1, (const T*)0, file, line, "!=", "==");
+        }
+        else
+        {
+            report_error2 (e1str, "NULL", e1, (const T*)0, file, line, "!=", "==", critical);
+        }
+    }
+#define CHECK_NOT_NULL(e1)   AssertNotNull((e1), #e1, __FILE__,__LINE__, false)
+#define REQUIRE_NOT_NULL(e1) AssertNotNull((e1), #e1, __FILE__,__LINE__, true)
 
 private:
     const std::string _name;
@@ -313,53 +415,21 @@ class TestRunner {
     typedef T::const_iterator TCI;
 
 public:
-    TestRunner() : argc(0), argv(NULL) {}
+    TestRunner();
 
     int    argc;
     char** argv;
 
-    void ReportTestNumber(void) {
-        T::size_type sz = _cases.size();
-        if (sz == 1) {
-           LOG(LogLevel::e_fatal_error, "Running " << sz << " test case...\n");
-        } else if (sz > 1) {
-           LOG(LogLevel::e_fatal_error, "Running " << sz << " test cases...\n");
-        }
-    }
-    void SetArgs(int argc, char* argv[]) {
-        this->argc = argc;
-        this->argv = argv;
-    }
-    void Add(ncbi::NK::TestInvoker* t) {
-        if (t) {
-            _cases.push_back(t);
-        }
-    }
-    ncbi::NK::counter_t Run(void* globalFixtute) const {
-        ncbi::NK::counter_t ec = 0;
-        for (TCI it = _cases.begin(); it != _cases.end(); ++it) {
-           ncbi::NK::TestInvoker* c = *it;
-           try {
-               LOG(LogLevel::e_test_suite,
-                   "Entering test case \"" << c->GetName() << "\"\n");
-               c->Run(globalFixtute);
-               LOG(LogLevel::e_test_suite,
-                   "Leaving test case \"" << c->GetName() << "\"\n");
-           } catch (const ncbi::NK::execution_aborted&) {
-               LOG(LogLevel::e_test_suite,
-                   "Leaving test case \"" << c->GetName() << "\"\n");
-           }
-           ec += c->GetErrorCounter();
-        }
-        return ec;
-    }
+    void ReportTestNumber(void);
+    void SetArgs(int argc, char* argv[]);
+    void Add(ncbi::NK::TestInvoker* t);
+    counter_t Run(void* globalFixtute) const;
 
 private:
     T _cases;
 };
 
-static ncbi::NK::TestRunner* GetTestSuite(void)
-{ static ncbi::NK::TestRunner* t = new ncbi::NK::TestRunner; return t; }
+extern ncbi::NK::TestRunner* GetTestSuite();
 
 template<class TFixture>
 ncbi::NK::counter_t Main(int argc, char* argv[],
@@ -377,7 +447,16 @@ ncbi::NK::counter_t Main(int argc, char* argv[],
         ec = t->Run(&globalFixtute);
         LOG(ncbi::NK::LogLevel::e_test_suite,
             "Leaving test suite \"" << suite_name << "\"\n";)
-    } catch (const ncbi::NK::execution_aborted& e) { ++ec; }
+    } 
+    catch (std::exception& ex) 
+    { 
+        LOG(ncbi::NK::LogLevel::e_nothing, std::string("*** Exception caught: ") + ex.what());
+        ++ec; 
+    }
+    catch (...) 
+    { 
+        ++ec; 
+    }
     switch (ec) {
         case 0:
           LOG(ncbi::NK::LogLevel::e_nothing, "\n*** No errors detected\n");
@@ -396,22 +475,5 @@ ncbi::NK::counter_t Main(int argc, char* argv[],
 
 } } // namespace ncbi::NK
 
-inline void ncbi_NK_saveLocation(const char* file, int line) {}
-inline void _REPORT_CRITICAL_ERROR_(const std::string& msg,
-                                    const char* file, int line, bool is_msg)
-{
-    LOG(ncbi::NK::LogLevel::e_error, file << "(" << line << "): ");
-    LOG(ncbi::NK::LogLevel::e_error, "fatal ");
-    LOG(ncbi::NK::LogLevel::e_error, "error in fixture: ");
-    if (is_msg) {
-        LOG(ncbi::NK::LogLevel::e_error, msg);
-    }
-    else {
-        LOG(ncbi::NK::LogLevel::e_error, "critical ");
-        LOG(ncbi::NK::LogLevel::e_error, "check " << msg << " failed");
-    }
-    LOG(ncbi::NK::LogLevel::e_error, std::endl);
-    throw ncbi::NK::execution_aborted();
- }
 
 #endif// NCBI_NK_UNIT_TEST__SUITE_HPP
diff --git a/interfaces/kxml/xml.h b/interfaces/kxml/xml.h
new file mode 100644
index 0000000..2f42564
--- /dev/null
+++ b/interfaces/kxml/xml.h
@@ -0,0 +1,382 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kxml_xml_
+#define _h_kxml_xml_
+
+#ifndef _h_klib_extern_
+#include <klib/extern.h>
+#endif
+
+#include <klib/defs.h>
+
+#include <stdarg.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KFile;
+struct KNamelist;
+struct KXMLNodeset;
+
+
+/*--------------------------------------------------------------------------
+ * XML node
+ */
+typedef struct KXMLNode KXMLNode;
+
+/* AddRef
+ * Release
+ */
+KLIB_EXTERN rc_t CC KXMLNodeAddRef ( const KXMLNode *self );
+KLIB_EXTERN rc_t CC KXMLNodeRelease ( const KXMLNode *self );
+
+/* GetName
+ * Get node path from parent nodeset
+ */
+KLIB_EXTERN rc_t CC KXMLNodeGetName ( const KXMLNode *self, const char **name );
+
+/* Get element name (tag)
+ */
+KLIB_EXTERN rc_t CC KXMLNodeElementName ( const KXMLNode *self, const char **name );
+
+/* Read
+ */
+KLIB_EXTERN rc_t CC KXMLNodeRead ( const KXMLNode *self,
+    size_t offset, void *buffer, size_t size,
+    size_t *num_read, size_t *remaining );
+
+/* Write
+ */
+KLIB_EXTERN rc_t CC KXMLNodeWrite ( KXMLNode *self,
+    size_t offset, const void *buffer, size_t size );
+
+/* Append
+ */
+KLIB_EXTERN rc_t CC KXMLNodeAppend ( KXMLNode *self,
+    const void *buffer, size_t bsize );
+
+
+/* ReadAs ( formatted )
+ *  reads as integer or float value in native byte order
+ *  casts smaller-sized values to desired size, e.g.
+ *    uint32_t to uint64_t
+ *
+ *  "i" [ OUT ] - return parameter for signed integer
+ *  "u" [ OUT ] - return parameter for unsigned integer
+ *  "f" [ OUT ] - return parameter for double float
+ */
+KLIB_EXTERN rc_t CC KXMLNodeReadAsI16 ( const KXMLNode *self, int16_t *i );
+KLIB_EXTERN rc_t CC KXMLNodeReadAsU16 ( const KXMLNode *self, uint16_t *u );
+KLIB_EXTERN rc_t CC KXMLNodeReadAsI32 ( const KXMLNode *self, int32_t *i );
+KLIB_EXTERN rc_t CC KXMLNodeReadAsU32 ( const KXMLNode *self, uint32_t *u );
+KLIB_EXTERN rc_t CC KXMLNodeReadAsI64 ( const KXMLNode *self, int64_t *i );
+KLIB_EXTERN rc_t CC KXMLNodeReadAsU64 ( const KXMLNode *self, uint64_t *u );
+KLIB_EXTERN rc_t CC KXMLNodeReadAsF64 ( const KXMLNode *self, double *f );
+
+
+/* ReadCString ( formatted )
+ *  reads as C-string
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - output buffer for
+ *  NUL terminated string.
+ *
+ *  "size" [ OUT ] - return parameter giving size of string
+ *  not including NUL byte. the size is set both upon success
+ *  and insufficient buffer space error.
+ */
+KLIB_EXTERN rc_t CC KXMLNodeReadCString ( const KXMLNode *self,
+    char *buffer, size_t bsize, size_t *size );
+
+/* ReadCStr
+ *  reads node value as C-string
+ *
+ *  "str" [ IN ] - returned pointer to a NULL terminated string.
+ *                 Caller responsible to dealloc (free)!
+ *  "default_value" [IN] - default value used in case node value is empty, NULL - none
+ */
+KLIB_EXTERN rc_t CC KXMLNodeReadCStr( const KXMLNode *self, char** str, const char* default_value );
+
+/* Write ( formatted )
+ *  writes string
+ *
+ *  "str" [ IN ] - NULL terminated string.
+ */
+KLIB_EXTERN rc_t CC KXMLNodeWriteCString ( KXMLNode *self, const char *str );
+
+
+/* OpenNodesetRead
+ *
+ * NB. OpenNodesetRead could return Nodeset with 0 elements.
+ *  To make sure the node exists you should verify that (KXMLNodesetCount > 0)
+ */
+KLIB_EXTERN rc_t CC KXMLNodeOpenNodesetRead ( const KXMLNode *self,
+    struct KXMLNodeset const **ns, const char *path, ... );
+KLIB_EXTERN rc_t CC KXMLNodeVOpenNodesetRead ( const KXMLNode *self,
+    struct KXMLNodeset const **ns, const char *path, va_list args );
+
+/* OpenNodesetUpdate
+ */
+KLIB_EXTERN rc_t CC KXMLNodeOpenNodesetUpdate ( KXMLNode *self,
+    struct KXMLNodeset **ns, const char *path, ... );
+KLIB_EXTERN rc_t CC KXMLNodeVOpenNodesetUpdate ( KXMLNode *self,
+    struct KXMLNodeset **ns, const char *path, va_list args );
+
+/* ReadAttr
+ */
+KLIB_EXTERN rc_t CC KXMLNodeReadAttr ( const KXMLNode *self,
+     const char *attr, void *buffer, size_t bsize,
+     size_t *num_read, size_t *remaining );
+
+/* WriteAttr
+ */
+KLIB_EXTERN rc_t CC KXMLNodeWriteAttr ( KXMLNode *self,
+     const char *attr, const void *buffer, size_t size );
+
+
+/* ReadAttrAs ( formatted )
+ *  reads as integer or float value in native byte order
+ *  casts smaller-sized values to desired size, e.g.
+ *    uint32_t to uint64_t
+ *
+ *  "i" [ OUT ] - return parameter for signed integer
+ *  "u" [ OUT ] - return parameter for unsigned integer
+ *  "f" [ OUT ] - return parameter for double float
+ */
+KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsI16 ( const KXMLNode *self, const char *attr, int16_t *i );
+KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsU16 ( const KXMLNode *self, const char *attr, uint16_t *u );
+KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsI32 ( const KXMLNode *self, const char *attr, int32_t *i );
+KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsU32 ( const KXMLNode *self, const char *attr, uint32_t *u );
+KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsI64 ( const KXMLNode *self, const char *attr, int64_t *i );
+KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsU64 ( const KXMLNode *self, const char *attr, uint64_t *u );
+KLIB_EXTERN rc_t CC KXMLNodeReadAttrAsF64 ( const KXMLNode *self, const char *attr, double *f );
+
+
+/* ReadAttrCString ( formatted )
+ *  reads as C-string
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - output buffer for
+ *  NUL terminated string.
+ *
+ *  "size" [ OUT ] - return parameter giving size of string
+ *  not including NUL byte. the size is set both upon success
+ *  and insufficient buffer space error.
+ */
+KLIB_EXTERN rc_t CC KXMLNodeReadAttrCString ( const KXMLNode *self, const char *attr,
+    char *buffer, size_t bsize, size_t *size );
+
+/* ReadAttrCStr
+ *  reads attribute as C-string
+ *
+ *  "str" [ IN ] - returned pointer to a NULL terminated string.
+ *                 Caller responsible to dealloc (free)!
+ *  "default_value" [IN] - default value used in case node value is empty, NULL - none
+ */
+KLIB_EXTERN rc_t CC KXMLNodeReadAttrCStr( const KXMLNode *self, const char *attr, char** str, const char* default_value);
+
+/* CountChildNodes
+ *  count child nodes
+ */
+KLIB_EXTERN rc_t CC KXMLNodeCountChildNodes(const KXMLNode *self,
+    uint32_t *count);
+
+/* GetNodeRead
+ *  access indexed node
+ *  "idx" [ IN ] - a zero-based index
+ */
+KLIB_EXTERN rc_t CC KXMLNodeGetNodeRead ( const KXMLNode *self,
+    const KXMLNode **node, uint32_t idx );
+
+/* ListAttr
+ *  list all named attributes
+ */
+KLIB_EXTERN rc_t CC KXMLNodeListAttr ( const KXMLNode *self,
+    struct KNamelist const **names );
+
+/* ListChild
+ *  list all named children
+ */
+KLIB_EXTERN rc_t CC KXMLNodeListChild ( const KXMLNode *self,
+    struct KNamelist const **names );
+
+
+/* GetFirstChildNodeRead
+ *  Returns the first(with index 0) sub-node of self using path.
+ *  Is equivalent to:
+ *          KXMLNodeOpenNodesetRead(self, &nc, path, ...);
+ *          KXMLNodesetGetNodeRead(ns, node, 0);
+ *  It will return NotFound error if any node exists
+ */
+KLIB_EXTERN rc_t CC KXMLNodeGetFirstChildNodeRead ( const KXMLNode *self,
+    const KXMLNode **node, const char *path, ... );
+KLIB_EXTERN rc_t CC KXMLNodeVGetFirstChildNodeRead ( const KXMLNode *self,
+    const KXMLNode **node, const char *path, va_list args );
+
+
+/*--------------------------------------------------------------------------
+ * XML node set
+ */
+typedef struct KXMLNodeset KXMLNodeset;
+
+/* AddRef
+ * Release
+ */
+KLIB_EXTERN rc_t CC KXMLNodesetAddRef ( const KXMLNodeset *self );
+KLIB_EXTERN rc_t CC KXMLNodesetRelease ( const KXMLNodeset *self );
+
+/* Count
+ *  retrieve the number of nodes in set
+ */
+KLIB_EXTERN rc_t CC KXMLNodesetCount ( const KXMLNodeset *self, uint32_t *count );
+
+/* GetNode
+ *  access indexed node
+ *  "idx" [ IN ] - a zero-based index
+ */
+KLIB_EXTERN rc_t CC KXMLNodesetGetNodeRead ( const KXMLNodeset *self,
+    const KXMLNode **node, uint32_t idx );
+
+
+/*--------------------------------------------------------------------------
+ * XML document
+ */
+typedef struct KXMLDoc KXMLDoc;
+
+/* AddRef
+ * Release
+ *  ignores NULL references
+ */
+KLIB_EXTERN rc_t CC KXMLDocAddRef ( const KXMLDoc *self );
+KLIB_EXTERN rc_t CC KXMLDocRelease ( const KXMLDoc *self );
+
+/* OpenNodesetRead
+ *  opens a node set with given path
+ */
+KLIB_EXTERN rc_t CC KXMLDocOpenNodesetRead ( const KXMLDoc *self,
+    const KXMLNodeset **ns, const char *path, ... );
+KLIB_EXTERN rc_t CC KXMLDocVOpenNodesetRead ( const KXMLDoc *self,
+    const KXMLNodeset **ns, const char *path, va_list args );
+
+/* OpenNodesetUpdate
+ *  opens a node set with given path
+ */
+KLIB_EXTERN rc_t CC KXMLDocOpenNodesetUpdate ( KXMLDoc *self,
+    KXMLNodeset **ns, const char *path, ... );
+KLIB_EXTERN rc_t CC KXMLDocVOpenNodesetUpdate ( KXMLDoc *self,
+    KXMLNodeset **ns, const char *path, va_list args );
+
+
+/*--------------------------------------------------------------------------
+ * XML manager
+ */
+typedef struct KXMLMgr KXMLMgr;
+
+/* Make
+ *  make an XML manager object
+ */
+KLIB_EXTERN rc_t CC KXMLMgrMakeRead ( const KXMLMgr **mgr );
+
+/* AddRef
+ * Release
+ *  ignores NULL references
+ */
+KLIB_EXTERN rc_t CC KXMLMgrAddRef ( const KXMLMgr *self );
+KLIB_EXTERN rc_t CC KXMLMgrRelease ( const KXMLMgr *self );
+
+/* MakeDoc
+ *  create a document object from source file
+ */
+KLIB_EXTERN rc_t CC KXMLMgrMakeDocRead ( const KXMLMgr *self,
+    const KXMLDoc **doc, struct KFile const *src );
+
+/* MakeDoc
+ *  create a document object from memory
+ */
+KLIB_EXTERN rc_t KXMLMgrMakeDocReadFromMemory ( const KXMLMgr *self,
+    const KXMLDoc **result, const char* buffer, uint64_t size );
+
+/*--------------------------------------------------------------------------
+ * KDirectory
+ *  this will probably be relocated later on
+ */
+struct KDirectory;
+struct KFile;
+struct String;
+struct VFSManager;
+struct VPath;
+
+/* OpenXTocDirRead
+ *  open copycat XML as a chroot'd directory
+ *  XML data comes from a KFile in this case
+ *
+ *  "dir" [ OUT ] - return parameter for directory object
+ *
+ *  "base_path" [ IN ] - NUL terminated string giving the path
+ *   of the new directory relative to "self". NB - can be absolute
+ *   or relative, but is always interpreted by "self".
+ *
+ *  "xml" [ IN ] - file containing XML data produced by copycat tool
+ */
+rc_t CC KDirectoryOpenXTocDirRead (const struct KDirectory * self,
+                                   const struct KDirectory ** pnew_dir,
+                                   bool chroot,
+                                   const struct KFile * xml,
+                                   const char * path, ... );
+rc_t CC KDirectoryVOpenXTocDirRead (const struct KDirectory * self,
+                                    const struct KDirectory ** pnew_dir,
+                                    bool chroot,
+                                    const struct KFile * xml,
+                                    const char * _path,
+                                    va_list args );
+rc_t CC KDirectoryOpenXTocDirRead (const struct KDirectory * self,
+                                   const struct KDirectory ** pnew_dir,
+                                   bool chroot,
+                                   const struct KFile * xml,
+                                   const char * path, ... );
+rc_t CC KDirectoryOpenXTocDirReadDir (const struct KDirectory * self,
+                                      const struct KDirectory ** pnew_dir,
+                                      const struct KFile * xml,
+                                      const struct String * spath);
+
+rc_t CC VFSManagerOpenXTocDirRead (const struct VFSManager * self,
+                                   const struct KDirectory ** pnew_dir,
+                                   const struct KFile * xml,
+                                   const struct VPath * path);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kxml_xml_ */
diff --git a/interfaces/loader/alignment-writer.h b/interfaces/loader/alignment-writer.h
new file mode 100644
index 0000000..7ad3613
--- /dev/null
+++ b/interfaces/loader/alignment-writer.h
@@ -0,0 +1,97 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_ALIGNMENT_WRITER_H_
+#define BAM_LOAD_ALIGNMENT_WRITER_H_ 1
+
+#include <klib/text.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <insdc/insdc.h>
+
+#include <align/writer-alignment.h>
+
+typedef struct AlignmentWriter AlignmentWriter;
+typedef struct AlignmentRecord AlignmentRecord;
+
+struct AlignmentRecord {
+    TableWriterAlgnData data;
+    int64_t alignId;
+    bool isPrimary;
+
+    INSDC_coord_one read_id;
+    int64_t ref_id;
+    INSDC_coord_zero ref_start;
+    uint64_t global_ref_start;
+    bool ref_orientation;
+    uint32_t mapq;
+    uint64_t tmp_key_id;
+
+    INSDC_coord_zero read_start;
+    INSDC_coord_len read_len;
+
+    bool mate_ref_orientation;
+    int64_t mate_ref_id;
+    INSDC_coord_zero mate_ref_pos;
+    int64_t mate_align_id;
+    int32_t template_len;
+};
+
+#define AR_REF_ID(X) ((X).ref_id)
+#define AR_REF_START(X) ((X).global_ref_start)
+#define AR_REF_LEN(X) ((X).ref_len)
+#define AR_REF_ORIENT(X) ((X).ref_orientation)
+#define AR_READNO(X) ((X).read_id)
+#define AR_MAPQ(X) ((X).mapq)
+#define AR_KEY(X) ((X).tmp_key_id)
+
+#define AR_BASECOUNT(X) ((X).data.has_mismatch.elements)
+#define AR_HAS_MISMATCH(X) ((bool *)((X).data.has_mismatch.buffer))
+#define AR_HAS_OFFSET(X) ((bool *)((X).data.has_ref_offset.buffer))
+
+#define AR_NUM_MISMATCH(X) ((X).data.mismatch.elements)
+#define AR_MISMATCH(X) ((char *)((X).data.mismatch.buffer))
+
+#define AR_NUM_OFFSET(X) ((X).data.ref_offset.elements)
+#define AR_OFFSET(X) ((INSDC_coord_zero *)((X).data.ref_offset.buffer))
+
+AlignmentWriter *AlignmentMake(VDatabase *db);
+
+rc_t AlignmentWriteRecord(AlignmentWriter * const self, AlignmentRecord * const data, bool expectUnsorted);
+
+rc_t AlignmentStartUpdatingSpotIds(AlignmentWriter * const self);
+
+rc_t AlignmentGetSpotKey(AlignmentWriter * const self, uint64_t *keyId);
+
+rc_t AlignmentWriteSpotId(AlignmentWriter * const self, int64_t const spotId);
+
+rc_t AlignmentWhack(AlignmentWriter * const self, bool const commit);
+
+void AlignmentRecordInit(AlignmentRecord *self, void *buffer, unsigned readlen, char **endp, bool expectUnsorted);
+
+#endif
diff --git a/interfaces/loader/common-reader-priv.h b/interfaces/loader/common-reader-priv.h
new file mode 100644
index 0000000..26a8e19
--- /dev/null
+++ b/interfaces/loader/common-reader-priv.h
@@ -0,0 +1,300 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_common_reader_priv_
+#define _h_common_reader_priv_
+
+#include <loader/common-reader.h>
+
+#include <klib/refcount.h>
+#include <klib/text.h>
+#include <klib/data-buffer.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*TODO: add module rcLoader to rc.h? */
+#define RC_MODULE rcAlign
+
+/*--------------------------------------------------------------------------
+ ReaderFile
+ */
+#ifndef READERFILE_IMPL
+    #define READERFILE_IMPL struct ReaderFile
+#endif
+
+typedef struct ReaderFile_vt_v1_struct {
+    /* version == 1.x */
+    uint32_t maj;
+    uint32_t min;
+
+    /* start minor version == 0 */
+    rc_t ( *destroy   )                 ( READERFILE_IMPL* self );
+    rc_t ( *getRecord )                 ( const READERFILE_IMPL *self, const Record** result );
+    float ( *getProportionalPosition )  ( const READERFILE_IMPL *self );
+    rc_t ( *getReferenceInfo )          ( const READERFILE_IMPL *self, const ReferenceInfo** result );
+    /* end minor version == 0 */
+
+} ReaderFile_vt_v1;
+
+typedef union ReaderFile_vt {
+    ReaderFile_vt_v1* v1;
+} ReaderFile_vt;
+
+struct ReaderFile
+{
+    ReaderFile_vt vt;
+    KRefcount refcount;
+    char* pathname;
+};
+
+/* Init
+ *  polymorphic parent constructor
+ */
+rc_t CC ReaderFileInit ( READERFILE_IMPL *self );
+
+/* Whack
+ *  destructor
+ */
+rc_t CC ReaderFileWhack ( ReaderFile *self );
+
+/*--------------------------------------------------------------------------
+ Record
+ */
+#ifndef RECORD_IMPL
+    #define RECORD_IMPL struct Record
+#endif
+
+typedef struct Record_vt_v1_struct {
+    /* version == 1.x */
+    uint32_t maj;
+    uint32_t min;
+
+    /* start minor version == 0 */
+    rc_t ( *addRef  ) ( const RECORD_IMPL* self );
+    rc_t ( *release ) ( const RECORD_IMPL* self );
+    rc_t ( *getSequence  ) ( const RECORD_IMPL *self, const Sequence** result );
+    rc_t ( *getAlignment ) ( const RECORD_IMPL *self, const Alignment** result );
+    rc_t ( *getRejected  ) ( const RECORD_IMPL *self, const Rejected** result );
+    /* end minor version == 0 */
+
+} Record_vt_v1;
+
+typedef union Record_vt {
+    Record_vt_v1* v1;
+} Record_vt;
+
+struct Record
+{
+    Record_vt vt;
+};
+
+/*--------------------------------------------------------------------------
+ Sequence
+ */
+#ifndef SEQUENCE_IMPL
+    #define SEQUENCE_IMPL struct Sequence
+#endif
+
+typedef struct Sequence_vt_v1_struct {
+    /* version == 1.x */
+    uint32_t maj;
+    uint32_t min;
+
+    /* start minor version == 0 */
+    rc_t ( *addRef  ) ( const SEQUENCE_IMPL* self );
+    rc_t ( *release ) ( const SEQUENCE_IMPL* self );
+
+    rc_t ( *getReadLength   )   ( const SEQUENCE_IMPL *self, uint32_t *length );
+    rc_t ( *getRead         )   ( const SEQUENCE_IMPL *self, char *sequence );
+    rc_t ( *getRead2        )   ( const SEQUENCE_IMPL *self, char *sequence, uint32_t start, uint32_t stop );
+    rc_t ( *getQuality      )   ( const SEQUENCE_IMPL *self, const int8_t **quality, uint8_t *offset, int *qualType );
+    rc_t ( *getSpotGroup    )   ( const SEQUENCE_IMPL *self, const char **name, size_t *length );
+    rc_t ( *getSpotName     )   ( const SEQUENCE_IMPL *self, const char **name, size_t *length );
+    bool ( *isColorSpace    )   ( const SEQUENCE_IMPL *self );
+    rc_t ( *getCSKey        )   ( const SEQUENCE_IMPL *self, char cskey[1] );
+    rc_t ( *getCSReadLength )   ( const SEQUENCE_IMPL *self, uint32_t *length );
+    rc_t ( *getCSRead       )   ( const SEQUENCE_IMPL *self, char *sequence );
+    rc_t ( *getCSQuality    )   ( const SEQUENCE_IMPL *self, const int8_t **quality, uint8_t *offset, int *qualType );
+                          
+    bool ( *wasPaired     )     ( const SEQUENCE_IMPL *self );
+    int  ( *orientationSelf )   ( const SEQUENCE_IMPL *self );
+    int  ( *orientationMate )   ( const SEQUENCE_IMPL *self );
+    bool ( *isFirst       )     ( const SEQUENCE_IMPL *self );
+    bool ( *isSecond      )     ( const SEQUENCE_IMPL *self );
+    bool ( *isDuplicate   )     ( const SEQUENCE_IMPL *self ); 
+    bool ( *isLowQuality   )    ( const SEQUENCE_IMPL *self ); 
+
+    rc_t ( *getTI ) ( const SEQUENCE_IMPL *self, uint64_t *ti );
+    
+    /* end minor version == 0 */
+
+} Sequence_vt_v1;
+
+typedef union Sequence_vt {
+    Sequence_vt_v1* v1;
+} Sequence_vt;
+
+struct Sequence
+{
+    Sequence_vt vt;
+};
+
+/*--------------------------------------------------------------------------
+ Alignment
+ */
+#ifndef ALIGNMENT_IMPL
+    #define ALIGNMENT_IMPL struct Alignment
+#endif
+
+typedef struct Alignment_vt_v1_struct {
+    /* version == 1.x */
+    uint32_t maj;
+    uint32_t min;
+
+    /* start minor version == 0 */
+    
+    rc_t ( *addRef  ) ( const ALIGNMENT_IMPL* self );
+    rc_t ( *release ) ( const ALIGNMENT_IMPL* self );
+    
+    rc_t ( *getRefSeqId         )   ( const ALIGNMENT_IMPL *self, int32_t *refSeqId );
+    rc_t ( *getMateRefSeqId     )   ( const ALIGNMENT_IMPL *self, int32_t *refSeqId );
+    rc_t ( *getPosition         )   ( const ALIGNMENT_IMPL *self, int64_t *pos );
+    rc_t ( *getMatePosition     )   ( const ALIGNMENT_IMPL *self, int64_t *pos );
+    rc_t ( *getMapQuality       )   ( const ALIGNMENT_IMPL *self, uint8_t *qual );
+    rc_t ( *getAlignmentDetail  )   ( const ALIGNMENT_IMPL *self, AlignmentDetail *rslt, uint32_t count, uint32_t *actual, int32_t *firstMatch, int32_t *lastMatch );
+    rc_t ( *getAlignOpCount     )   ( const ALIGNMENT_IMPL *self, uint32_t *n );
+    rc_t ( *getInsertSize       )   ( const ALIGNMENT_IMPL *self, int64_t *size );
+    rc_t ( *getCG               )   ( const ALIGNMENT_IMPL *self, const CGData** result );
+    rc_t ( *getBAMCigar         )   ( const ALIGNMENT_IMPL *self, uint32_t const **rslt, uint32_t *length );
+    
+    bool ( *isSecondary ) ( const ALIGNMENT_IMPL *self ); 
+    
+    /* end minor version == 0 */
+
+} Alignment_vt_v1;
+
+typedef union Alignment_vt {
+    Alignment_vt_v1* v1;
+} Alignment_vt;
+
+struct Alignment
+{
+    Alignment_vt vt;
+};
+
+/*--------------------------------------------------------------------------
+ CGData
+ */
+#ifndef CGDATA_IMPL
+    #define CGDATA_IMPL struct CGData
+#endif
+
+typedef struct CGData_vt_v1_struct {
+    /* version == 1.x */
+    uint32_t maj;
+    uint32_t min;
+
+    /* start minor version == 0 */
+    
+    rc_t ( *addRef  ) ( const CGDATA_IMPL* self );
+    rc_t ( *release ) ( const CGDATA_IMPL* self );
+
+    rc_t ( * getSeqQual )       ( const CGDATA_IMPL* self, char sequence[/* 35 */], uint8_t quality[/* 35 */] );
+    rc_t ( * getCigar )         ( const CGDATA_IMPL* self, uint32_t *cigar, uint32_t cig_max, uint32_t *cig_act );
+    rc_t ( * getAlignGroup )    ( const CGDATA_IMPL* self, char buffer[], size_t max_size, size_t *act_size);
+    /* end minor version == 0 */
+
+} CGData_vt_v1;
+
+typedef union CGData_vt {
+    CGData_vt_v1* v1;
+} CGData_vt;
+
+struct CGData
+{
+    CGData_vt vt;
+};
+
+/*--------------------------------------------------------------------------
+ Rejected
+ */
+
+struct Rejected {
+    KRefcount   refcount;
+
+    String      source;
+    const char* message;
+    uint64_t    line;
+    uint64_t    column;
+    bool        fatal;
+};
+
+rc_t CC RejectedInit ( Rejected *self );
+
+/*--------------------------------------------------------------------------
+ ReferenceInfo
+ */
+
+#ifndef REFERENCEINFO_IMPL
+    #define REFERENCEINFO_IMPL struct ReferenceInfo
+#endif
+
+typedef struct ReferenceInfo_vt_v1_struct {
+    /* version == 1.x */
+    uint32_t maj;
+    uint32_t min;
+
+    /* start minor version == 0 */
+    
+    rc_t ( *addRef  ) ( const REFERENCEINFO_IMPL* self );
+    rc_t ( *release ) ( const REFERENCEINFO_IMPL* self );
+
+    rc_t ( *getRefSeqCount )        ( const REFERENCEINFO_IMPL* self, uint32_t* count );
+    rc_t ( *getRefSeq )             ( const REFERENCEINFO_IMPL* self, uint32_t n, ReferenceSequence* result );
+    rc_t ( *getReadGroupCount )     ( const REFERENCEINFO_IMPL* self, uint32_t* count );
+    rc_t ( *getReadGroup )          ( const REFERENCEINFO_IMPL* self, unsigned n, ReadGroup* result );
+    rc_t ( *getReadGroupByName )    ( const REFERENCEINFO_IMPL* self, const char* name, ReadGroup* result );
+
+    /* end minor version == 0 */
+
+} ReferenceInfo_vt_v1;
+
+typedef union ReferenceInfo_vt {
+    ReferenceInfo_vt_v1* v1;
+} ReferenceInfo_vt;
+
+struct ReferenceInfo
+{
+    ReferenceInfo_vt vt;
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_common_reader_priv_ */
diff --git a/interfaces/loader/common-reader.h b/interfaces/loader/common-reader.h
new file mode 100644
index 0000000..b6cd796
--- /dev/null
+++ b/interfaces/loader/common-reader.h
@@ -0,0 +1,486 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_common_reader_
+#define _h_common_reader_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+typedef struct ReaderFile           ReaderFile;
+typedef struct Record               Record;
+typedef struct Sequence             Sequence;
+typedef struct Alignment            Alignment;
+typedef struct CGData               CGData;  
+typedef struct Rejected             Rejected;
+typedef struct ReferenceInfo        ReferenceInfo;
+
+/*--------------------------------------------------------------------------
+ ReaderFile
+ */
+rc_t CC ReaderFileAddRef ( const ReaderFile *self );
+rc_t CC ReaderFileRelease ( const ReaderFile *self );
+
+/* GetRecord
+ * Parses the next record from the source. At the end of the file, rc == 0, *result == 0.
+ */
+rc_t CC ReaderFileGetRecord( const ReaderFile *self, const Record** result);
+
+/* GetPathname
+ * Returns input's pathname, if applicable.
+ */
+const char* CC ReaderFileGetPathname ( const ReaderFile *self );
+
+/* GetProportionalPosition
+ *  get the aproximate proportional position in the input file
+ *  this is intended to be useful for computing progress
+ *
+ * NB - does not return rc_t
+ */
+float CC ReaderFileGetProportionalPosition ( const ReaderFile *self );
+
+/* GetReferenceInfo
+ *
+ */
+rc_t CC ReaderFileGetReferenceInfo ( const ReaderFile *self, const ReferenceInfo** result );
+
+/*--------------------------------------------------------------------------
+ Record
+ */
+
+/* AddRef
+ * Release
+ */
+rc_t CC RecordAddRef ( const Record *self );
+rc_t CC RecordRelease ( const Record *self );
+
+rc_t CC RecordGetRejected ( const Record *self, const Rejected** result);
+rc_t CC RecordGetSequence ( const Record *self, const Sequence** result);
+rc_t CC RecordGetAlignment( const Record *self, const Alignment** result);
+
+/*--------------------------------------------------------------------------
+ Sequence
+ */
+
+/* AddRef
+ * Release
+ */
+rc_t CC SequenceAddRef ( const Sequence *self );
+rc_t CC SequenceRelease ( const Sequence *self );
+
+/* GetReadLength
+ *  get the sequence length
+ *  i.e. the number of elements of both sequence and quality
+ *
+ *  "length" [ OUT ] - length in bases of query sequence and quality
+ */
+rc_t CC SequenceGetReadLength ( const Sequence *self, uint32_t *length );
+
+/* GetRead
+ *  get the sequence data [0..ReadLength)
+ *  caller provides buffer of ReadLength bytes
+ *
+ *  "sequence" [ OUT ] - pointer to a buffer of at least ReadLength bytes
+ */
+rc_t CC SequenceGetRead( const Sequence *self, char *sequence );
+
+/* GetRead2
+ *  get the sequence data [0..ReadLength)
+ *  caller provides buffer of ReadLength bytes
+ *
+ *  "sequence" [ OUT ] - pointer to a buffer of at least ReadLength bytes
+ *
+ *  "start" [ IN ] and "stop" [ IN ] - zero-based coordinates, half-closed interval; both have to be within ReadLength
+ */
+rc_t CC SequenceGetRead2 ( const Sequence *self, char *sequence, uint32_t start, uint32_t stop);
+
+enum QualityType {
+    QT_Unknown = 0,
+    QT_Phred,
+    QT_LogOdds
+};
+/* GetQuality
+ *  get the raw quality data [0..ReadLength) from OQ if possible else from QUAL
+ *  values are unsigned with 0xFF == missing
+ *
+ *  "quality" [ OUT ] - return param for quality sequence
+ *   held internally, validity is guaranteed for the life of the sequence
+ *  
+ *  "offset" [ OUT ] - the zero point of quality (33, 64; 0 for binary)
+ *  
+ *  "qualType" [ OUT ] - quality type (phred, log-odds, unknown)
+ */
+rc_t CC SequenceGetQuality(const Sequence *self, const int8_t **quality, uint8_t *offset, int *qualType);
+
+/* SequenceGetSpotGroup
+ *  get the name of the spot group (e.g. accession)
+ *
+ *  "name" [ OUT ] - return param for group name
+ *   held internally, validity is guaranteed for the life of the sequence
+ *
+ *  "length" [ OUT ] - return the number of bytes in "name"
+ */
+rc_t CC SequenceGetSpotGroup ( const Sequence *self, const char **name, size_t *length );
+
+
+/* SequenceGetSpotName
+ *  get the read name and length in bytes
+ *
+ *  "name" [ OUT ] - return param for read group name
+ *   held internally, validity is guaranteed for the life of the sequence
+ *
+ *  "length" [ OUT ] - return the number of bytes in "name"
+ */
+rc_t CC SequenceGetSpotName ( const Sequence *self, const char **name, size_t *length );
+
+/* IsColorSpace
+ *  Does the sequence have colorspace info
+ */
+bool CC SequenceIsColorSpace ( const Sequence *self );
+
+/* GetCSKey
+ *  get the colorspace key
+ *
+ *  "cskey" [ OUT ] - return param 
+ *
+ *  return: if no colorspace info, RC is 0 but the value of cskey is undefined
+ */
+rc_t CC SequenceGetCSKey ( const Sequence *self, char cskey[1] );
+
+/* GetCSReadLength
+ *  get the color space sequence length
+ *  i.e. the number of elements of both sequence and quality
+ *
+ *  "length" [ OUT ] - length in bases of query sequence and quality
+ */
+rc_t CC SequenceGetCSReadLength ( const Sequence *self, uint32_t *length );
+
+/* GetCSRead
+ *  get the color space sequence data [0..ReadLength)
+ *  caller provides buffer of ReadLength bytes
+ *
+ *  "sequence" [ OUT ] - pointer to a buffer of at least ReadLength bytes
+ */
+rc_t CC SequenceGetCSRead( const Sequence *self, char *sequence );
+
+/* GetCSQuality
+ *  get the color spaqce sequence's raw quality data [0..ReadLength) from OQ if possible else from QUAL
+ *  values are unsigned with 0xFF == missing
+ *
+ *  "quality" [ OUT ] - return param for quality sequence
+ *   held internally, validity is guaranteed for the life of the sequence
+ *  
+ *  "offset" [ OUT ] - the zero point of quality (33, 64; 0 for binary)
+ *  
+ *  "qualType" [ OUT ] - quality type (phred, log-odds, unknown)
+ */
+rc_t CC SequenceGetCSQuality(const Sequence *self, const int8_t **quality, uint8_t *offset, int *qualType);
+
+
+/* WasPaired
+ * true if read number is present and not 0 
+ */ 
+bool CC SequenceWasPaired     ( const Sequence *self ); 
+
+enum ReadOrientation {
+    ReadOrientationUnknown,
+    ReadOrientationForward,
+    ReadOrientationReverse
+};
+/* SequenceGetOrientationSelf
+ */ 
+int CC SequenceGetOrientationSelf( const Sequence *self ); 
+/* SequenceGetOrientationMate
+ */ 
+int CC SequenceGetOrientationMate( const Sequence *self ); 
+
+/* IsFirst
+ * fastq: read number is present and equal to 1
+ */ 
+bool CC SequenceIsFirst       ( const Sequence *self ); 
+/* IsSecond
+ * fastq: read number is present and equal to 2
+ */
+bool CC SequenceIsSecond      ( const Sequence *self ); 
+/* IsDuplicate
+ * 
+ */
+bool CC SequenceIsDuplicate( const Sequence *self ); 
+/* IsLowQuality
+ * 
+ */
+bool CC SequenceIsLowQuality( const Sequence *self ); 
+
+/*  RecordGetTI
+ *
+ */
+rc_t SequenceGetTI(Sequence const *self, uint64_t *ti);
+
+/*--------------------------------------------------------------------------
+ Alignment
+ */
+
+/* AddRef
+ * Release
+ */
+rc_t CC AlignmentAddRef ( const Alignment *self );
+rc_t CC AlignmentRelease ( const Alignment *self );
+
+/* GetRefSeqId
+ *  get id of reference sequence
+ *  pass result into BAMFileGetRefSeqById to get the Reference Sequence record
+ *
+ *  "refSeqId" [ OUT ] - zero-based id of reference sequence
+ *   returns -1 if set is invalid within BAM ( rc may be zero )
+ */
+rc_t CC AlignmentGetRefSeqId ( const Alignment *self, int32_t *refSeqId );
+
+/* GetMateRefSeqId
+ *  get id of mate's reference sequence
+ *  pass result into BAMFileGetRefSeqById to get the Reference Sequence record
+ *
+ *  "refSeqId" [ OUT ] - zero-based id of reference sequence
+ *   returns -1 if invalid
+ */
+rc_t CC AlignmentGetMateRefSeqId ( const Alignment *self, int32_t *refSeqId );
+
+/* GetPosition
+ *  get the aligned position on the ref. seq.
+ *
+ *  "n" [ IN ] - zero-based position index for cases of multiple alignments
+ *
+ *  "pos" [ OUT ] - zero-based position on reference sequence
+ *  returns -1 if invalid
+ */
+rc_t CC AlignmentGetPosition ( const Alignment *self, int64_t *pos );
+
+/* GetMatePosition
+ *  starting coordinate of mate's alignment on ref. seq.
+ *
+ *  "pos" [ OUT ] - zero-based position on reference sequence
+ *  returns -1 if invalid
+ */
+rc_t CC AlignmentGetMatePosition ( const Alignment *self, int64_t *pos );
+
+/* GetMapQuality
+ *  return the quality score of mapping
+ *
+ *  "qual" [ OUT ] - return param for quality score
+ */
+rc_t CC AlignmentGetMapQuality ( const Alignment *self, uint8_t *qual );
+
+/* GetAlignmentDetail
+ *  get the alignment details
+ *
+ *  "rslt" [ OUT, NULL OKAY ] and "count" [ IN ] - array to hold detail records
+ *
+ *  "actual" [ OUT, NULL OKAY ] - number of elements written to "rslt"
+ *   required if "rslt" is NULL
+ *
+ *  "firstMatch" [ OUT, NULL OKAY ] - zero-based index into "rslt" of the first match to the refSeq
+ *   or < 0 if invalid
+ *
+ *  "lastMatch" [ OUT, NULL OKAY ] - zero-based index into "rslt" of the last match to the refSeq
+ *   or < 0 if invalid
+ */
+typedef uint32_t AlignOpType;
+enum AlignOpTypes
+{
+    align_Match    = 'M', /* 0 */
+    align_Insert   = 'I', /* 1 */
+    align_Delete   = 'D', /* 2 */
+    align_Skip     = 'N', /* 3 */
+    align_SoftClip = 'S', /* 4 */
+    align_HardClip = 'H', /* 5 */
+    align_Padded   = 'P', /* 6 */
+    align_Equal    = '=', /* 7 */
+    align_NotEqual = 'X', /* 8 */
+    align_Overlap  = 'B' /* Complete Genomics extension */
+};
+
+typedef struct AlignmentDetail AlignmentDetail;
+struct AlignmentDetail
+{
+    int64_t refSeq_pos; /* position on refSeq where this alignment region starts or -1 if NA */
+    int32_t read_pos;   /* position on read where this alignment region starts or -1 if NA */
+    uint32_t length;    /* length of alignment region */
+    AlignOpType type;  /* type of alignment */
+};
+
+rc_t CC AlignmentGetAlignmentDetail ( const Alignment *self,
+                                      AlignmentDetail *rslt, 
+                                      uint32_t count, 
+                                      uint32_t *actual,
+                                      int32_t *firstMatch, 
+                                      int32_t *lastMatch );
+
+
+/* GetCigarCount
+ *  the number of CIGAR elements
+ *  a CIGAR element consists of the pair of matching op code and op length
+ *
+ *  "n" [ OUT ] - return param for cigar count
+ */
+rc_t CC AlignmentGetAlignOpCount ( const Alignment *self, uint32_t *n );
+
+
+/* GetInsertSize
+ *  distance in bases to start of mate's alignment on ref. seq.
+ *
+ *  "size" [ OUT ] - >0 for first in pair, <0 for second
+ */
+rc_t CC AlignmentGetInsertSize ( const Alignment *self, int64_t *size );
+
+/* GetBAMCigar
+ *
+ */
+rc_t CC AlignmentGetBAMCigar(const Alignment *cself, uint32_t const **rslt, uint32_t *length);
+
+/* IsSecondary
+ * 
+ */
+bool CC AlignmentIsSecondary( const Alignment *self ); 
+
+
+/* AlignmentGetCG
+ * rc_t == 0, result == 0 if no CG data 
+ */
+rc_t CC AlignmentGetCGData ( const Alignment *self, const CGData** result);
+
+/*--------------------------------------------------------------------------
+ * CGData
+ */
+rc_t CC CGDataAddRef ( const CGData *self );
+rc_t CC CGDataRelease ( const CGData *self );
+
+/* CGGetSeqQual
+ */
+rc_t CC CGDataGetSeqQual ( const CGData* self,
+                           char sequence[/* 35 */],
+                           uint8_t quality[/* 35 */] );
+
+/* CGGetCigar
+ */
+rc_t CC CGDataGetCigar ( const CGData* self,
+                         uint32_t *cigar,
+                         uint32_t cig_max,
+                         uint32_t *cig_act );
+
+/* CGGetAlignGroup
+ */
+rc_t CC CGDataGetAlignGroup ( const CGData* self,
+                              char buffer[],
+                              size_t max_size,
+                              size_t *act_size );
+
+/*--------------------------------------------------------------------------
+ * Rejected
+ */
+
+/* AddRef
+ * Release
+ */
+rc_t CC RejectedAddRef ( const Rejected *self );
+rc_t CC RejectedRelease ( const Rejected *self );
+
+/* GetError
+ *  "text" [ OUT ] - NUL-terminated error message, held internally
+ *  "line" [ OUT ] - 1-based line # in the source (0 for binary formats)
+ *  "column" [ OUT ] - 1-based column # in the source (offset from the start of the file for binary formats)
+ *  "fatal" [ OUT ] - no further parsing should be done (likely an unsupported format)
+ */
+rc_t CC RejectedGetError( const Rejected* self, const char** text, uint64_t* line, uint64_t* column, bool* fatal );
+
+/* GetData
+ *  "data" [ OUT ] - raw input representing the rejected record. held internally
+ *  "length" [ OUT ] - size of the data buffer
+ */
+rc_t CC RejectedGetData( const Rejected* self, const void** text, size_t* length );
+
+/*--------------------------------------------------------------------------
+ * ReferenceInfo
+ */
+typedef struct ReferenceSequence 
+{
+    uint64_t length;
+    const char *name; /* not null unique */
+    const uint8_t *checksum;
+} ReferenceSequence;
+
+typedef struct ReadGroup
+{
+    const char *name; /* not null unique, accession e.g. SRR001138 */
+    const char *platform; /* e.g. ILLUMINA */
+} ReadGroup;
+
+rc_t CC ReferenceInfoAddRef ( const ReferenceInfo *self );
+rc_t CC ReferenceInfoRelease ( const ReferenceInfo *self );
+
+/* GetRefSeqCount
+ *  get the number of Reference Sequences refered to in the header
+ *  this is not necessarily the number of Reference Sequences referenced
+ *  by the alignments
+ */
+rc_t CC ReferenceInfoGetRefSeqCount ( const ReferenceInfo *self, uint32_t* count );
+
+/* GetRefSeq
+ *  get the n'th Ref. Seq. where n is [0..RefSeqCount)
+ *  the result is populated with pointers that are good for precisely at long as the ReferenceInfo exists.
+ */
+rc_t CC ReferenceInfoGetRefSeq ( const ReferenceInfo *self, uint32_t n, ReferenceSequence *result );
+
+/* GetReadGroupCount
+ *  get the number of Read Groups (accessions, etc.) refered to in the header
+ *  this is not necessarily the number of Read Groups referenced
+ *  by the alignments
+ */
+rc_t CC ReferenceInfoGetReadGroupCount ( const ReferenceInfo *self, uint32_t *count );
+
+/* GetReadGroup
+ *  get the n'th Read Group where n is [0..ReadGroupCount)
+ *  the result is populated with pointers that are good for precisely at long as the ReferenceInfo exists.
+ */
+rc_t CC ReferenceInfoGetReadGroup ( const ReferenceInfo *self, unsigned n, ReadGroup *result );
+
+/* GetReadGroupByName
+ *  get a Read Group by its name
+ *  the result is populated with pointers that are good for precisely at long as the ReferenceInfo exists.
+ */
+rc_t CC ReferenceInfoGetReadGroupByName ( const ReferenceInfo *self, const char *name, ReadGroup *result );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_common_reader_ */
diff --git a/interfaces/loader/common-writer.h b/interfaces/loader/common-writer.h
new file mode 100644
index 0000000..c81c0ce
--- /dev/null
+++ b/interfaces/loader/common-writer.h
@@ -0,0 +1,190 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_common_writer_
+#define _h_common_writer_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifndef _h_insdc_sra_
+#include <insdc/sra.h>
+#endif
+
+#ifndef _h_mmarray_
+#include <loader/mmarray.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+
+struct VDBManager;
+struct VDatabase;
+struct KMemBank;
+struct KBTree;
+struct KLoadProgressbar;
+struct ReaderFile;
+struct CommonWriter;
+struct SequenceWriter;
+struct AlignmentWriter;
+struct Reference;
+
+/*--------------------------------------------------------------------------
+ * CommonWriterSettings
+ */
+enum LoaderModes {
+    mode_Archive,
+    mode_Analysis
+};
+
+typedef struct CommonWriterSettings
+{
+    uint64_t numfiles;
+    char const *inpath;
+    char const *outpath;
+    char const *tmpfs;
+    
+    struct KFile *noMatchLog;
+    
+    char const *schemaPath;
+    char const *schemaIncludePath;
+    
+    char const *refXRefPath;
+    
+    char const *QualQuantizer;
+    
+    char const *refFilter;
+
+    char const** refFiles; /* NULL-terminated array pointing to argv */
+    
+    char const *headerText;
+    
+    uint64_t maxAlignCount;
+    size_t cache_size;
+
+    uint64_t errCount;
+    uint64_t maxErrCount;
+    uint64_t maxErrPct;
+    uint64_t maxWarnCount_NoMatch;
+    uint64_t maxWarnCount_DupConflict;
+    uint64_t pid;
+    uint64_t minMatchCount; /* minimum number of matches to count as an alignment */
+    int minMapQual;
+    enum LoaderModes mode;
+    uint32_t maxSeqLen;
+    bool omit_aligned_reads;
+    bool omit_reference_reads;
+    bool no_real_output;
+    bool expectUnsorted;
+    bool noVerifyReferences;
+    bool onlyVerifyReferences;
+    bool useQUAL;
+    bool limit2config;
+    bool editAlignedQual;
+    bool keepMismatchQual;
+    bool acceptBadDups; /* accept spots with inconsistent PCR duplicate flags */
+    bool acceptNoMatch; /* accept without any matching bases */
+    uint8_t alignedQualValue;
+    bool allUnaligned; /* treat all records as unaligned */
+    bool noColorSpace;
+    bool noSecondary;
+    bool hasTI;
+    bool acceptHardClip;
+    INSDC_SRA_platform_id platform;
+    bool parseSpotName;
+} CommonWriterSettings;
+
+/*--------------------------------------------------------------------------
+ * SpotAssembler
+ */
+
+#define FRAG_CHUNK_SIZE (128)
+
+typedef struct SpotAssembler {
+    const struct KLoadProgressbar *progress[4];
+    struct KBTree *key2id[NUM_ID_SPACES];
+    char *key2id_names;
+    struct MMArray *id2value;
+    struct KMemBank *fragsBoth; /*** mate will be there soon ***/
+    struct KMemBank *fragsOne;  /*** mate may not be found soon or even show up ***/
+    int64_t spotId;
+    int64_t primaryId;
+    int64_t secondId;
+    uint64_t alignCount;
+    
+    uint32_t idCount[NUM_ID_SPACES];
+    uint32_t key2id_hash[NUM_ID_SPACES];
+    
+    unsigned key2id_max;
+    unsigned key2id_name_max;
+    unsigned key2id_name_alloc;
+    unsigned key2id_count;
+    
+    unsigned key2id_name[NUM_ID_SPACES];
+    /* this array is kept in name order */
+    /* this maps the names to key2id and idCount */
+    unsigned key2id_oid[NUM_ID_SPACES];
+    
+    unsigned pass;
+    bool isColorSpace;
+    
+} SpotAssembler;
+
+INSDC_SRA_platform_id PlatformToId(const char* name);
+
+/*--------------------------------------------------------------------------
+ * CommonWriter
+ */
+typedef struct CommonWriter {
+    CommonWriterSettings settings;
+    SpotAssembler ctx;
+    struct Reference* ref;
+    struct SequenceWriter* seq;
+    struct AlignmentWriter* align;
+    bool had_alignments;
+    bool had_sequences;
+    unsigned err_count;
+    bool commit;
+} CommonWriter;
+
+rc_t CommonWriterInit(CommonWriter* self, struct VDBManager *mgr, struct VDatabase *db, const CommonWriterSettings* settings);
+
+rc_t CommonWriterArchive(CommonWriter* self, const struct ReaderFile *);
+rc_t CommonWriterComplete(CommonWriter* self, bool quitting);
+
+rc_t CommonWriterWhack(CommonWriter* self);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_common_writer_ */
diff --git a/interfaces/loader/mmarray.h b/interfaces/loader/mmarray.h
new file mode 100644
index 0000000..7786b81
--- /dev/null
+++ b/interfaces/loader/mmarray.h
@@ -0,0 +1,50 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_mmarray_
+#define _h_mmarray_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+
+struct KFile;
+
+#define NUM_ID_SPACES (256u)
+
+struct MMArray;
+
+rc_t MMArrayMake(struct MMArray **rslt, struct KFile *fp, uint32_t elemSize);
+
+rc_t MMArrayGet(struct MMArray *const self, void **const value, uint64_t const element);
+
+void MMArrayWhack(struct MMArray *self);
+
+#endif
diff --git a/interfaces/loader/reference-writer.h b/interfaces/loader/reference-writer.h
new file mode 100644
index 0000000..7e354e4
--- /dev/null
+++ b/interfaces/loader/reference-writer.h
@@ -0,0 +1,78 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef LOADER_REFERENCE_WRITER_H_
+#define LOADER_REFERENCE_WRITER_H_ 1
+
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <klib/data-buffer.h>
+
+#include <align/writer-reference.h>
+#include "alignment-writer.h"
+
+typedef struct Reference {
+    const ReferenceMgr *mgr;
+    const ReferenceSeq *rseq;
+    int64_t lastRefId;
+    int32_t lastOffset;
+    unsigned curPos;
+    unsigned endPos;
+    unsigned length;
+    KDataBuffer coverage;
+    KDataBuffer mismatches;
+    KDataBuffer indels;
+    KDataBuffer pri_align;
+    KDataBuffer sec_align;
+    KDataBuffer pri_overlap;
+    KDataBuffer sec_overlap;
+    bool out_of_order;
+    bool acceptHardClip;
+    char last_id[256];
+} Reference;
+
+rc_t ReferenceInit(Reference *self, const VDBManager *mgr, VDatabase *db, 
+                   bool expectUnsorted,
+                   bool acceptHardClip,
+                   char const *refXRefPath,
+                   char const *inpath,
+                   uint32_t maxSeqLen,  /*TODO: save in Reference object, reuse in other functions*/
+                   char const** refFiles
+                   );
+rc_t ReferenceSetFile(Reference *self, const char *id, uint64_t length, uint8_t const md5[16], uint32_t maxSeqLen);
+rc_t ReferenceVerify(Reference const *self, char const id[], uint64_t length, uint8_t const md5[16]);
+rc_t ReferenceGet1stRow(Reference const *self, int64_t *refID, char const refName[]);
+rc_t ReferenceAddAlignId(Reference *self,
+                         int64_t align_id,
+                         bool is_primary
+                         );
+rc_t ReferenceRead(Reference *self, AlignmentRecord *data, uint64_t const pos,
+                   uint32_t const rawCigar[], uint32_t const cigCount,
+                   char const seqDNA[], uint32_t const seqLen, uint32_t *matches, bool acceptNoMatch, unsigned minMatchCount, uint32_t maxSeqLen);
+rc_t ReferenceWhack(Reference *self, bool commit, uint32_t maxSeqLen);
+
+#endif
diff --git a/interfaces/loader/sequence-writer.h b/interfaces/loader/sequence-writer.h
new file mode 100644
index 0000000..c7565cb
--- /dev/null
+++ b/interfaces/loader/sequence-writer.h
@@ -0,0 +1,91 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_SEQUENCE_WRITER_H_
+#define BAM_LOAD_SEQUENCE_WRITER_H_ 1
+
+#include <insdc/sra.h>
+
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <klib/text.h>
+#include <klib/data-buffer.h>
+
+struct TableWriterSeq;
+
+typedef struct s_sequence_record {
+    char *seq;
+    uint8_t *qual;
+    uint32_t *readStart;
+    uint32_t *readLen;
+    uint8_t *orientation;
+    uint8_t *is_bad;
+    uint8_t *alignmentCount;
+    char *spotGroup;
+    bool *aligned;
+    char *cskey;
+    uint64_t *ti;
+    uint64_t keyId;
+    unsigned spotGroupLen;
+    KDataBuffer storage;
+    uint8_t numreads;
+} SequenceRecord;
+
+
+rc_t SequenceRecordInit(SequenceRecord *self,
+                        unsigned numreads, unsigned readLen[]);
+
+rc_t SequenceRecordAppend(SequenceRecord *self,
+                          const SequenceRecord *other);
+
+typedef struct SequenceWriter {
+    VDatabase *db;
+    struct TableWriterSeq const *tbl;
+} SequenceWriter;
+
+SequenceWriter *SequenceWriterInit(SequenceWriter *self, VDatabase *db);
+
+rc_t SequenceWriteRecord(SequenceWriter *self, SequenceRecord const *rec,
+                         bool color, bool isDup, INSDC_SRA_platform_id platform,
+                         bool keepMismatchQual,
+                         bool no_real_output,
+                         bool hasTI,
+                         char const *QualQuantizer
+                         );
+
+rc_t SequenceDoneWriting(SequenceWriter *self);
+rc_t SequenceReadKey(const SequenceWriter *self, int64_t row, uint64_t *key);
+rc_t SequenceUpdateAlignData(SequenceWriter *self, int64_t row, unsigned nreads,
+                             const int64_t primeId[/* nreads */],
+                             const uint8_t alignCount[/* nreads */]);
+
+void SequenceWhack(SequenceWriter *self, bool commit);
+
+
+#endif /* ndef BAM_LOAD_SEQUENCE_WRITER_H_ */
diff --git a/interfaces/ncbi/seq.vschema b/interfaces/ncbi/seq.vschema
index 707def9..bfb8f1a 100644
--- a/interfaces/ncbi/seq.vschema
+++ b/interfaces/ncbi/seq.vschema
@@ -358,9 +358,6 @@ table NCBI:tbl:base_space #2.0.3
  *  nucleotide sequences in color space
  */
 
-/* TBD - does this function need to know something about
- *  whether a read is forward or reverse?
- */
 extern function
 INSDC:x2na:bin NCBI:dna_from_color #1 ( INSDC:x2cs:bin color_bin,
      INSDC:coord:zero read_start, INSDC:coord:len read_len,
@@ -377,8 +374,7 @@ table NCBI:tbl:dcmp_color_space #1
     INSDC:dna:text dcmp_virtual_productions
         = out_dcmp_x2cs_bin
         | out_dcmp_2cs_bin
-        | out_dcmp_2cs_packed
-        | out_dcmp_cs_key;
+        | out_dcmp_2cs_packed;
 }
 
 /* history:
@@ -449,7 +445,6 @@ table NCBI:tbl:color_space_common #1.0.3
 	 */
 
 	/* NCBI:tbl:dcmp_color_space inherited productions
-	 *  out_dcmp_cs_key
 	 *  out_dcmp_2cs_bin
 	 *  out_dcmp_x2cs_bin
 	 *  out_dcmp_2cs_packed
@@ -599,9 +594,7 @@ table NCBI:tbl:color_space #2.1
         | ( INSDC:x2cs:bin ) out_2cs_bin;
 
     // read directly from physical column
-    INSDC:dna:text out_cs_key
-        = .CS_KEY
-        | out_dcmp_cs_key;
+    INSDC:dna:text out_cs_key = .CS_KEY;
 
     // color matrix may be synthesized
     U8 out_color_matrix
@@ -614,7 +607,6 @@ table NCBI:tbl:color_space #2.1
 	 */
 
 	/* NCBI:tbl:dcmp_color_space inherited productions
-	 *  out_dcmp_cs_key
 	 *  out_dcmp_2cs_bin
 	 *  out_dcmp_x2cs_bin
 	 *  out_dcmp_2cs_packed
@@ -653,6 +645,7 @@ table NCBI:tbl:protein #1 = INSDC:tbl:protein
  *  reserves value 0 as ambiguity symbol for reads
  */
 
+
 /* history:
  *  1.0.1 - base explicitly upon sequence #1.0.1
  */
@@ -696,8 +689,10 @@ table NCBI:tbl:phred_quality #1.0.1 = NCBI:tbl:phred_quality_nocol #1.0.1
  *  2.0.1 - added feed of in_stats_qual
  *  2.0.2 - added input of text encodings
  *  2.0.3 - base explicitly upon sequence #1.0.1
+ *  2.0.4 - change compression from izip to zip
+ *  2.0.5 - change from zip to delta_average_zip
  */
-table NCBI:tbl:phred_quality #2.0.3 = INSDC:tbl:sequence #1.0.1
+table NCBI:tbl:phred_quality #2.0.4 = INSDC:tbl:sequence #1.0.1
 {
     // read directly quality as  phred
     INSDC:quality:phred out_qual_phred = .QUALITY;
@@ -712,7 +707,10 @@ table NCBI:tbl:phred_quality #2.0.3 = INSDC:tbl:sequence #1.0.1
         | ( INSDC:quality:phred ) < B8 > diff < 64 > ( in_qual_text_phred_64 );
 
     // physical storage
-    physical column < INSDC:quality:phred > izip_encoding .QUALITY = in_qual_phred;
+/*** next line is  for future change in production, but we have to wait until supporting code is released to the public ***/
+// physical column < INSDC:quality:phred > delta_average_zip_encoding .QUALITY = in_qual_phred;
+/*** NB *** MUST change table version to 2.0.5 and propagate to all derived tables ***/
+    physical column < INSDC:quality:phred > zip_encoding .QUALITY = in_qual_phred;
 
     // feed to compressed statistics
     INSDC:quality:phred in_stats_qual = in_qual_phred;
@@ -856,8 +854,9 @@ table NCBI:tbl:log_odds_quality_nocol #2.0.1 = INSDC:tbl:sequence #1.0.1
  *  2.0.1 - added feed of in_stats_qual
  *  2.0.2 - added input of text encodings
  *  2.0.3 - base explicitly upon log_odds_quality_nocol #2.0.1
+ *  2.0.4 - changed compression from izip to zip
  */
-table NCBI:tbl:log_odds_quality #2.0.3 = NCBI:tbl:log_odds_quality_nocol #2.0.1
+table NCBI:tbl:log_odds_quality #2.0.4 = NCBI:tbl:log_odds_quality_nocol #2.0.1
 {
     INSDC:quality:log_odds out_qual_log_odds= .QUALITY;
 
@@ -872,7 +871,7 @@ table NCBI:tbl:log_odds_quality #2.0.3 = NCBI:tbl:log_odds_quality_nocol #2.0.1
         = QUALITY
         | ( INSDC:quality:log_odds ) < B8 > diff < 64 > ( in_qual_text_log_odds_64 );
 
-    physical column < INSDC:quality:log_odds > izip_encoding .QUALITY
+    physical column < INSDC:quality:log_odds > zip_encoding .QUALITY
         = in_qual_log_odds;
 
     // feed to compressed statistics
diff --git a/interfaces/ncbi/wgs-contig.h b/interfaces/ncbi/wgs-contig.h
new file mode 100644
index 0000000..7b8ab2d
--- /dev/null
+++ b/interfaces/ncbi/wgs-contig.h
@@ -0,0 +1,176 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_ncbi_wgs_contig_
+#define _h_ncbi_wgs_contig_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*==========================================================================
+ * WGS Contig
+ */
+
+
+/*--------------------------------------------------------------------------
+ * types
+ * constants
+ */
+
+/* component_props
+ *  a signed value describing either contigs or gaps
+ *  where values >= 0 refer to contigs
+ *  and negatives describe gaps
+ */
+typedef int16_t NCBI_WGS_component_props;
+
+/* component description
+ *  the sequencing status of the component
+ *
+ *  These typically correspond to keywords in the INSDC submission.
+ *  Current acceptable values are_
+ *    A           Active Finishing
+ *    D           Draft HTG (often phase1 and phase2 are called Draft,
+ *                whether or not they have the draft keyword).
+ *    F           Finished HTG (phase3)
+ *    G           Whole Genome Finishing
+ *    O           Other sequence (typically means no HTG keyword)
+ *    P           Pre Draft
+ *    W           WGS contig
+ */
+enum
+{
+    NCBI_WGS_component_WGS                  = 0,
+    NCBI_WGS_component_ActiveFinishing      = 1,
+    NCBI_WGS_component_DraftHTG             = 2,
+    NCBI_WGS_component_FinishedHTG          = 3,
+    NCBI_WGS_component_WholeGenomeFinishing = 4,
+    NCBI_WGS_component_OtherSequence        = 5,
+    NCBI_WGS_component_PreDraft             = 6
+};
+
+/* strand
+ *  specifies the orientation of the component relative to scaffold
+ *  values given allow strand to be determined as "prop / 16"
+ *  yielding_
+ *    0           unknown orientation
+ *    1           plus strand
+ *    2           negative strand
+ */
+enum
+{
+    NCBI_WGS_strand_plus                    = 1 * 16,
+    NCBI_WGS_strand_minus                   = 2 * 16
+};
+
+
+/* gap description
+ *  These typically correspond to keywords in the INSDC submission.
+ *  Current acceptable values are_
+ *    N           gap with specified size
+ *    U           gap of unknown size, defaulting to 100 bases.
+ */
+enum
+{
+    NCBI_WGS_gap_known                      = 1 * -1,
+    NCBI_WGS_gap_unknown                    = 2 * -1
+};
+
+/* gap type
+ *  scaffold          a gap between two sequence contigs in a scaffold
+ *  contig            an unspanned gap between two sequence contigs
+ *  centromere        a gap inserted for the centromere
+ *  short_arm         a gap inserted at the start of an acrocentric chromosome
+ *  heterochromatin   a gap inserted for an especially large region of heterochromatic sequence
+ *  telomere          a gap inserted for the telomere
+ *  repeat            an unresolvable repeat
+ */
+enum
+{
+    NCBI_WGS_gap_scaffold                   = 1 * -4,
+    NCBI_WGS_gap_contig                     = 2 * -4,
+    NCBI_WGS_gap_centromere                 = 3 * -4,
+    NCBI_WGS_gap_short_arm                  = 4 * -4,
+    NCBI_WGS_gap_heterochromatin            = 5 * -4,
+    NCBI_WGS_gap_telomere                   = 6 * -4,
+    NCBI_WGS_gap_repeat                     = 7 * -4
+};
+
+/* gap linkage evidence
+ *  paired-ends       paired sequences from the two ends of a DNA fragment
+ *  align_genus       alignment to a reference genome within the same genus
+ *  align_xgenus      alignment to a reference genome within another genus
+ *  align_trnscpt     alignment to a transcript from the same species
+ *  within_clone      sequence on both sides of the gap is derived from
+ *                    the same clone, but the gap is not spanned by paired-ends
+ *  clone_contig      linkage is provided by a clone contig in the tiling path
+ *  map               linkage asserted using a non-sequence based map
+ *                    such as RH, linkage, fingerprint or optical
+ *  strobe            strobe sequencing (PacBio)
+ *  unspecified
+ */
+enum
+{
+    NCBI_WGS_gap_linkage_paired_ends        = 1 * -64,
+    NCBI_WGS_gap_linkage_align_genus        = 2 * -64,
+    NCBI_WGS_gap_linkage_align_xgenus       = 3 * -64,
+    NCBI_WGS_gap_linkage_align_trnscpt      = 4 * -64,
+    NCBI_WGS_gap_linkage_within_clone       = 5 * -64,
+    NCBI_WGS_gap_linkage_clone_contig       = 6 * -64,
+    NCBI_WGS_gap_linkage_map                = 7 * -64,
+    NCBI_WGS_gap_linkage_strobe             = 8 * -64,
+    NCBI_WGS_gap_linkage_unspecified        = 9 * -64
+};
+
+
+/*--------------------------------------------------------------------------
+ * accession tokenization constants
+ */
+
+/* tokenize_nuc_accession
+ * tokenize_prot_accession
+ *  scans name on input
+ *  tokenizes into parts
+ */
+enum
+{
+    NCBI_WGS_acc_token_unrecognized =  1,
+    NCBI_WGS_acc_token_prefix       =  2,
+    NCBI_WGS_acc_token_contig       =  3
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_ncbi_wgs_contig_ */
diff --git a/interfaces/ncbi/wgs-contig.vschema b/interfaces/ncbi/wgs-contig.vschema
new file mode 100644
index 0000000..c31914f
--- /dev/null
+++ b/interfaces/ncbi/wgs-contig.vschema
@@ -0,0 +1,660 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/*==========================================================================
+ * WGS Contig
+ */
+version 1;
+
+include 'vdb/vdb.vschema';
+include 'ncbi/ncbi.vschema';
+include 'ncbi/seq.vschema';
+include 'ncbi/spotname.vschema';
+include 'ncbi/stats.vschema';
+
+
+/*--------------------------------------------------------------------------
+ * types
+ * constants
+ */
+
+/* component_props
+ *  a signed value describing either contigs or gaps
+ *  where values >= 0 refer to contigs
+ *  and negatives describe gaps
+ */
+typedef I16 NCBI:WGS:component_props;
+
+/* component description
+ *  the sequencing status of the component
+ *
+ *  These typically correspond to keywords in the INSDC submission.
+ *  Current acceptable values are:
+ *    A           Active Finishing
+ *    D           Draft HTG (often phase1 and phase2 are called Draft,
+ *                whether or not they have the draft keyword).
+ *    F           Finished HTG (phase3)
+ *    G           Whole Genome Finishing
+ *    O           Other sequence (typically means no HTG keyword)
+ *    P           Pre Draft
+ *    W           WGS contig
+ */
+const NCBI:WGS:component_props NCBI:WGS:component:WGS                  = 0;
+const NCBI:WGS:component_props NCBI:WGS:component:ActiveFinishing      = 1;
+const NCBI:WGS:component_props NCBI:WGS:component:DraftHTG             = 2;
+const NCBI:WGS:component_props NCBI:WGS:component:FinishedHTG          = 3;
+const NCBI:WGS:component_props NCBI:WGS:component:WholeGenomeFinishing = 4;
+const NCBI:WGS:component_props NCBI:WGS:component:OtherSequence        = 5;
+const NCBI:WGS:component_props NCBI:WGS:component:PreDraft             = 6;
+
+/* strand
+ *  specifies the orientation of the component relative to scaffold
+ *  values given allow strand to be determined as "prop / 16"
+ *  yielding:
+ *    0           unknown orientation
+ *    1           plus strand
+ *    2           negative strand
+ */
+const NCBI:WGS:component_props NCBI:WGS:strand:plus                    = 16;
+const NCBI:WGS:component_props NCBI:WGS:strand:minus                   = 32;
+
+
+/* gap description
+ *  These typically correspond to keywords in the INSDC submission.
+ *  Current acceptable values are:
+ *    N           gap with specified size
+ *    U           gap of unknown size, defaulting to 100 bases.
+ */
+const NCBI:WGS:component_props NCBI:WGS:gap:known                      = -1;
+const NCBI:WGS:component_props NCBI:WGS:gap:unknown                    = -2;
+
+/* gap type
+ *  scaffold          a gap between two sequence contigs in a scaffold
+ *  contig            an unspanned gap between two sequence contigs
+ *  centromere        a gap inserted for the centromere
+ *  short_arm         a gap inserted at the start of an acrocentric chromosome
+ *  heterochromatin   a gap inserted for an especially large region of heterochromatic sequence
+ *  telomere          a gap inserted for the telomere
+ *  repeat            an unresolvable repeat
+ */
+const NCBI:WGS:component_props NCBI:WGS:gap:scaffold                   = -4;
+const NCBI:WGS:component_props NCBI:WGS:gap:contig                     = -8;
+const NCBI:WGS:component_props NCBI:WGS:gap:centromere                 = -12;
+const NCBI:WGS:component_props NCBI:WGS:gap:short_arm                  = -16;
+const NCBI:WGS:component_props NCBI:WGS:gap:heterochromatin            = -20;
+const NCBI:WGS:component_props NCBI:WGS:gap:telomere                   = -24;
+const NCBI:WGS:component_props NCBI:WGS:gap:repeat                     = -28;
+
+/* gap linkage evidence
+ *  paired-ends       paired sequences from the two ends of a DNA fragment
+ *  align_genus       alignment to a reference genome within the same genus
+ *  align_xgenus      alignment to a reference genome within another genus
+ *  align_trnscpt     alignment to a transcript from the same species
+ *  within_clone      sequence on both sides of the gap is derived from
+ *                    the same clone, but the gap is not spanned by paired-ends
+ *  clone_contig      linkage is provided by a clone contig in the tiling path
+ *  map               linkage asserted using a non-sequence based map
+ *                    such as RH, linkage, fingerprint or optical
+ *  strobe            strobe sequencing (PacBio)
+ *  unspecified
+ */
+const NCBI:WGS:component_props NCBI:WGS:gap:linkage:paired_ends        = -64;
+const NCBI:WGS:component_props NCBI:WGS:gap:linkage:align_genus        = -128;
+const NCBI:WGS:component_props NCBI:WGS:gap:linkage:align_xgenus       = -192;
+const NCBI:WGS:component_props NCBI:WGS:gap:linkage:align_trnscpt      = -256;
+const NCBI:WGS:component_props NCBI:WGS:gap:linkage:within_clone       = -320;
+const NCBI:WGS:component_props NCBI:WGS:gap:linkage:clone_contig       = -384;
+const NCBI:WGS:component_props NCBI:WGS:gap:linkage:map                = -448;
+const NCBI:WGS:component_props NCBI:WGS:gap:linkage:strobe             = -512;
+const NCBI:WGS:component_props NCBI:WGS:gap:linkage:unspecified        = -576;
+
+
+/*--------------------------------------------------------------------------
+ * functions
+ */
+
+/* tokenize_nuc_accession
+ * tokenize_prot_accession
+ *  scans name on input
+ *  tokenizes into parts
+ */
+extern function text:token
+    NCBI:WGS:tokenize_nuc_accession #1 ( ascii acc );
+extern function text:token
+    NCBI:WGS:tokenize_prot_accession #1 ( ascii acc );
+
+const U16 NCBI:WGS:acc_token:unrecognized =  1;
+const U16 NCBI:WGS:acc_token:prefix       =  2;
+const U16 NCBI:WGS:acc_token:contig       =  3;
+
+
+/* build_scaffold_read
+ *  assembles contigs and gaps into a single row
+ *  transcribes + strand contigs as they are,
+ *  performs reverse complement of - strand contigs,
+ *  fills gaps with stated number of N
+ *
+ * build_scaffold_quality
+ *  assembles contig and gap qualities into a single row
+ *  contig qualities are taken as they are,
+ *  gap qualities are assigned a constant
+ *
+ *  "component_start" [ DATA ] - starting locations on each
+ *   component or 0 for gaps. normal starting point is 0,
+ *   but offsets are supported.
+ *  NB - ONE-BASED COORDINATES
+ *
+ *  "component_len" [ DATA ] - length of contig sequence
+ *   from component_start, or length of gap, projected onto
+ *   scaffold at scaffold_start.
+ *
+ *  "component_props" [ DATA ] - see discussion of type
+ *   distinguish between contigs and gaps, indicate strand
+ *
+ *  "component_id" [ DATA ] - foreign keys into SEQUENCE table
+ *   row_len ( component_id ) == count-of-contigs ( component_props )
+ */
+extern function INSDC:4na:bin NCBI:WGS:build_scaffold_read #1
+    ( INSDC:coord:one component_start, INSDC:coord:len component_len,
+      NCBI:WGS:component_props component_props, I64 component_id );
+
+extern function INSDC:quality:phred NCBI:WGS:build_scaffold_qual #1
+    ( INSDC:coord:one component_start, INSDC:coord:len component_len,
+      NCBI:WGS:component_props component_props, I64 component_id );
+
+
+/* build_read_type
+ *  generate standard SRA read type from component properties
+ *  contigs are biological, gaps are technical
+ *
+ *  "component_props" [ DATA ] - see discussion of type
+ *   distinguish between contigs and gaps, indicate strand
+ */
+extern function INSDC:SRA:xread_type
+    NCBI:WGS:build_read_type #1 ( NCBI:WGS:component_props component_props );
+
+
+/*--------------------------------------------------------------------------
+ * nucleotide
+ */
+table NCBI:WGS:tbl:nucleotide #1.1
+    = NCBI:tbl:base_space #2.0.3
+    , NCBI:tbl:phred_quality #2.0.4
+    , NCBI:SRA:tbl:stats #1.2.0
+{
+    /* ACCESSION
+     *  [<opt-prefix>]<4-letter-prefix><2-digit-version><6-or-7-digit-contig>
+     */
+    extern column ascii ACCESSION = out_accession;
+    extern column U32   ACC_VERSION = .ACC_VERSION | <U32> echo <1> ();
+
+    // input
+    ascii in_accession = ACCESSION;
+
+    // parsed input
+    text:token in_acc_token
+        = NCBI:WGS:tokenize_nuc_accession ( in_accession );
+    //  [<opt-prefix>]<4-letter-prefix><2-digit-version>
+    ascii in_acc_prefix
+        = extract_token < 0 > ( in_accession, in_acc_token );
+    // <6-or-7-digit-contig>
+    ascii in_contig_text
+        = extract_token < 1 > ( in_accession, in_acc_token );
+    U32 in_contig_len
+        = row_len ( in_contig_text );
+    U64 in_contig_bin
+        = strtonum ( in_contig_text );
+
+    // physical storage
+    physical column < ascii > zip_encoding .ACC_PREFIX = in_acc_prefix;
+    physical column < U32 > izip_encoding .ACC_CONTIG_LEN = in_contig_len;
+    physical column < U64 > izip_encoding .ACC_CONTIG = in_contig_bin;
+    physical column < U32 > izip_encoding .ACC_VERSION = ACC_VERSION; //needed to back-fill WGS data from ID where version may be > 1
+
+    // output
+    ascii out_acc_prefix
+        = .ACC_PREFIX
+        | < ascii > meta:read < 'ACC_PREFIX', true > ()
+        ;
+    U32 out_acc_contig_len
+        = .ACC_CONTIG_LEN
+        | < U32 > meta:value < 'ACC_CONTIG_LEN', true > ()
+        ;
+    U64 out_acc_contig
+        = .ACC_CONTIG
+        | ( U64 ) row_id ()
+        ;
+    ascii out_accession
+        = sprintf < "%s%0*u" > ( out_acc_prefix, out_acc_contig_len, out_acc_contig );
+
+    readonly column ascii ACC_PREFIX
+        = .ACC_PREFIX
+        | < ascii > meta:read < 'ACC_PREFIX', true > ()
+        ;
+    readonly column U32 ACC_CONTIG_LEN
+        = .ACC_CONTIG_LEN
+        | < U32 > meta:value < 'ACC_CONTIG_LEN', true > ()
+        ;
+
+    /* CONTIG_NAME
+     *  principal name
+     */
+    extern column utf8 CONTIG_NAME
+        = idx:text:project < 'contig_name' > ( .CONTIG_NAME );
+
+    physical column < utf8 > zip_encoding .CONTIG_NAME
+        = idx:text:insert < 'contig_name' > ( CONTIG_NAME );
+
+    ascii out_contig_name = cast ( CONTIG_NAME );
+
+    // NB - this is only useful if CONTIG_NAME is unique
+    // or if clustered by CONTIG_NAME
+    readonly column vdb:row_id_range CONTIG_NAME_ROW_RANGE
+        = idx:text:lookup < 'contig_name', 'NAME_QUERY' > ();
+
+    /* EXTRA_SEQIDS
+     *  pipe-separated list of additional names
+     */
+    extern column < ascii > zip_encoding EXTRA_SEQIDS;
+
+    /* TITLE
+     */
+    extern column < ascii > zip_encoding TITLE;
+
+    /* GI
+     *  gi is indexed in a parallel table
+     */
+    extern column < NCBI:gi > izip_encoding GI;
+
+    /* TAXID
+     *  taxonomy id
+     */
+    extern column < NCBI:taxid > izip_encoding TAXID;
+
+    /* GB_STATE
+     *  genbank state
+     */
+    extern column < NCBI:gb_state > izip_encoding GB_STATE;
+
+    /* DESCR
+     *  ASN.1 description
+     */
+    extern column < NCBI:asn:binary > zip_encoding DESCR;
+
+    /* ANNOT
+     *  ASN.1 annotation
+     */
+    extern column < NCBI:asn:binary > zip_encoding ANNOT;
+
+    ascii out_seqid_gi = sprintf < "gi|%u" > ( .GI );
+    ascii out_seqid_gb = sprintf < "gb|%s.%u|" > ( out_accession, ACC_VERSION )
+                       | sprintf < "gb|%s.1|" > ( out_accession );
+    ascii out_seqid_gnl = sprintf < "gnl|WGS:%s|%s" > (.ACC_PREFIX, out_contig_name ) | <ascii> echo < '' > ();
+
+
+    /* outputs to spotname */
+    ascii out_seqid_name
+        = sprintf < "%s|%s" > ( out_seqid_gi , out_seqid_gb )
+		| sprintf < "%s" > ( out_seqid_gb );
+
+    ascii out_spot_name = sprintf < "%s %s" > ( out_seqid_name, .TITLE );
+
+    readonly column ascii SEQ_ID = out_seqid_name;
+    readonly column ascii SEQ_ID_GNL = out_seqid_gnl;
+
+    /* outputs to spotdesc */
+    // INSDC:coord:len in_read_len  = (INSDC:coord:len) row_len ( in_2na_bin );
+    INSDC:coord:len  out_read_len = (INSDC:coord:len) row_len ( out_2na_bin );
+    INSDC:coord:len  trim_len = (INSDC:coord:len) row_len ( out_2na_bin );
+    INSDC:coord:zero out_read_start = <INSDC:coord:zero> echo < 0 > ();
+    INSDC:coord:zero trim_start = <INSDC:coord:zero> echo < 0 > ();
+    INSDC:SRA:read_filter out_rd_filter = < INSDC:SRA:read_filter > echo < SRA_READ_FILTER_PASS > ();
+    INSDC:SRA:xread_type  out_read_type = < INSDC:SRA:xread_type > echo < SRA_READ_TYPE_BIOLOGICAL > ();
+    // help trigger statistics
+    INSDC:SRA:xread_type  _alt_in_read_type = < INSDC:SRA:xread_type > echo < SRA_READ_TYPE_BIOLOGICAL > ();
+    INSDC:coord:len       _alt_in_read_len  = (INSDC:coord:len) row_len ( in_2na_bin );
+
+    ascii out_label = < ascii > echo < "contig" > ();
+    INSDC:coord:len out_label_len = < INSDC:coord:len > echo < 6 > ();
+    INSDC:coord:zero out_label_start = < INSDC:coord:zero > echo < 0 > ();
+
+    INSDC:SRA:platform_id out_platform = < INSDC:SRA:platform_id > echo < SRA_PLATFORM_UNDEFINED > ();
+};
+
+
+/*--------------------------------------------------------------------------
+ * protein
+ *  contig
+ */
+table NCBI:WGS:tbl:protein #1
+    = NCBI:tbl:protein #1.0.0
+{
+    /* ACCESSION
+     *  [<opt-prefix>]<4-letter-prefix><2-digit-version><6-or-7-digit-contig>
+     */
+    extern column ascii ACCESSION = out_accession;
+
+    // input
+    ascii in_accession = ACCESSION;
+
+    // parsed input
+    text:token in_acc_token
+        = NCBI:WGS:tokenize_prot_accession ( in_accession );
+    //  [<opt-prefix>]<4-letter-prefix><2-digit-version>
+    ascii in_acc_prefix
+        = extract_token < 0 > ( in_accession, in_acc_token );
+    // <6-or-7-digit-contig>
+    ascii in_contig_text
+        = extract_token < 1 > ( in_accession, in_acc_token );
+    U32 in_contig_len
+        = row_len ( in_contig_text );
+    I64 in_contig_bin
+        = strtonum ( in_contig_text );
+
+    // physical storage
+    physical column < ascii > zip_encoding .ACC_PREFIX = in_acc_prefix;
+    physical column < U32 > izip_encoding .ACC_CONTIG_LEN = in_contig_len;
+    physical column < U64 > izip_encoding .ACC_CONTIG = in_contig_bin;
+
+    // output
+    ascii out_acc_prefix
+        = .ACC_PREFIX
+        | < ascii > meta:read < 'ACC_PREFIX', true > ()
+        ;
+    U32 out_acc_contig_len
+        = .ACC_CONTIG_LEN
+        | < U32 > meta:value < 'ACC_CONTIG_LEN', true > ()
+        ;
+    U64 out_acc_contig
+        = .ACC_CONTIG
+        | ( U64 ) row_id ()
+        ;
+    ascii out_accession
+        = sprintf < "%s%0*u" > ( out_acc_prefix, out_acc_contig_len, out_acc_contig );
+
+    /* TITLE
+     */
+    extern column < ascii > zip_encoding TITLE;
+
+    /* GI
+     *  gi is indexed in a parallel table
+     */
+    extern column < NCBI:gi > izip_encoding GI;
+
+    /* GB_STATE
+     *  genbank state
+     */
+    extern column < NCBI:gb_state > izip_encoding GB_STATE;
+
+    /* DESCR
+     *  ASN.1 description
+     */
+    extern column < NCBI:asn:binary > zip_encoding DESCR;
+
+    /* ANNOT
+     *  ASN.1 annotation
+     */
+    extern column < NCBI:asn:binary > zip_encoding ANNOT;
+
+    /* outputs to spotname */
+    ascii out_seqid_name = sprintf < "TBD" > ( .ACC_PREFIX, out_accession );
+    ascii out_spot_name = sprintf < "%s %s" > ( out_seqid_name, .TITLE );
+
+    /* TBD
+     *  need to create an extension to NCBI:tbl:protein
+     *  that satisfies fastq-dump requirements for READ and QUALITY
+     */
+};
+
+
+/*--------------------------------------------------------------------------
+ * gi_idx
+ *  gi is row-id
+ */
+table NCBI:WGS:tbl:gi_idx #1
+{
+    /* NUC_ROW_ID
+     *  row-id in nucleotide table
+     */
+    extern column < I64 > izip_encoding NUC_ROW_ID;
+
+    /* PROT_ROW_ID
+     *  row-id in protein table
+     */
+    extern column < I64 > izip_encoding PROT_ROW_ID;
+};
+
+
+/*--------------------------------------------------------------------------
+ * scaffold
+ *  records AGP data
+ */
+table NCBI:WGS:tbl:scaffold #1
+{
+    /* SCAFFOLD_NAME
+     *  This is the identifier for the object being assembled.
+     *  This can be a chromosome, scaffold or contig.
+     *  If an accession.version identifier is not used to describe
+     *  the object the naming convention is to precede chromosome numbers
+     *  (e.g. chr1) and linkage group numbers  (e.g. LG3).
+     *  Contigs or scaffolds may have any identifier that is unique
+     *  within the assembly
+     */
+    extern column utf8 SCAFFOLD_NAME
+        = out_scaffold_name;
+    extern column ascii SCAFFOLD_NAME = cast (out_scaffold_name);
+    utf8 out_scaffold_name
+        = idx:text:project < 'scaffold_name' > ( .SCAFFOLD_NAME );
+    physical column < utf8 > zip_encoding .SCAFFOLD_NAME
+        = idx:text:insert < 'scaffold_name' > ( SCAFFOLD_NAME );
+
+    /* COMPONENT_START
+     *  starting position within the component sequence
+     */
+    extern column < INSDC:coord:one > izip_encoding COMPONENT_START;
+
+    /* COMPONENT_LEN
+     *  length of the component/gap projected onto the scaffold
+     */
+    extern column < INSDC:coord:len > izip_encoding COMPONENT_LEN;
+
+    /* COMPONENT_PROPS
+     *  see description of type
+     */
+    extern column < NCBI:WGS:component_props > zip_encoding COMPONENT_PROPS;
+
+    /* COMPONENT_ID
+     *  one row-id for each non-gap component in COMPONENT_TYPE
+     */
+    extern column < I64 > izip_encoding COMPONENT_ID;
+}
+
+table NCBI:WGS:view:scaffold #1 = NCBI:WGS:tbl:scaffold #1
+{
+    /* ACCESSION
+     *  scaffold accession
+     */
+    readonly column ascii ACCESSION
+        = out_accession;
+    I64 scaffold_row_id
+        = row_id ();
+    I64 acc_row_id
+        = < I64 > echo < 1 > ();
+    ascii acc_prefix
+        = < ascii > simple_sub_select < 'SEQUENCE', 'ACC_PREFIX' > ( acc_row_id );
+    U32 acc_contig_len
+        = < ascii > simple_sub_select < 'SEQUENCE', 'ACC_CONTIG_LEN' > ( acc_row_id );
+    ascii out_accession
+        = sprintf < "%sS%0*d" > ( acc_prefix, acc_contig_len, scaffold_row_id );
+
+    /* READ
+     *  base space construction of entire scaffold
+     */
+
+    // construct the read from contigs and gaps
+    INSDC:4na:bin out_4na_bin = NCBI:WGS:build_scaffold_read
+        ( .COMPONENT_START, .COMPONENT_LEN, .COMPONENT_PROPS, .COMPONENT_ID );
+
+    // various READ columns
+    default readonly column INSDC:dna:text READ
+        = < INSDC:4na:bin, INSDC:dna:text > map < INSDC:4na:map:BINSET, INSDC:4na:map:CHARSET > ( out_4na_bin );
+    readonly column INSDC:4na:bin READ
+        = out_4na_bin;
+    readonly column INSDC:4na:packed READ
+        = pack ( out_4na_bin );
+    readonly column INSDC:x2na:bin READ
+        = out_x2na_bin;
+    INSDC:x2na:bin out_x2na_bin
+        = < INSDC:4na:bin, INSDC:x2na:bin > map < INSDC:4na:map:BINSET, [ 4,0,1,4,2,4,4,4,3,4,4,4,4,4,4,4 ] > ( out_4na_bin );
+    readonly column INSDC:2na:bin READ
+        = out_2na_bin;
+    INSDC:2na:bin out_2na_bin
+        = < INSDC:x2na:bin, INSDC:2na:bin > map < INSDC:x2na:map:BINSET, [ 0, 1, 2, 3, 0 ] > ( out_x2na_bin );
+    readonly column INSDC:2na:packed READ
+        = pack ( out_2na_bin );
+
+
+    /* CSREAD
+     *  base space converted to color space
+     */
+    default readonly column INSDC:color:text CSREAD
+        = < INSDC:x2cs:bin, INSDC:color:text > map <  INSDC:x2cs:map:BINSET, INSDC:x2cs:map:CHARSET > ( out_x2cs_bin );
+    readonly column INSDC:x2cs:bin CSREAD
+        = out_x2cs_bin;
+    INSDC:x2cs:bin out_x2cs_bin
+        = NCBI:color_from_dna ( out_x2na_bin, out_read_start, .COMPONENT_LEN, out_cs_key, out_color_matrix );
+    readonly column INSDC:2cs:bin CSREAD
+        = out_2cs_bin;
+    INSDC:2cs:bin out_2cs_bin
+        = < INSDC:x2cs:bin, INSDC:2cs:bin > map < INSDC:x2cs:map:BINSET, [ 0, 1, 2, 3, 0 ] > ( out_x2cs_bin );
+    readonly column INSDC:2cs:packed CSREAD
+        = pack ( out_2cs_bin );
+
+    /* CS_NATIVE
+     *  is color-space the native sequence space
+     */
+    readonly column bool CS_NATIVE
+        = < bool > echo < false > ();
+
+    /* CS_KEY
+     *  leading call given in base-space
+     */
+    readonly column INSDC:dna:text CS_KEY
+        = out_cs_key;
+    INSDC:dna:text out_cs_key
+        = < INSDC:dna:text > echo < 'T' > ( .COMPONENT_LEN );
+
+    /* COLOR_MATRIX
+     *  matrix used for color-space conversions
+     */
+    readonly column U8 COLOR_MATRIX
+        = out_color_matrix;
+    U8 out_color_matrix
+        = < U8 > echo < INSDC:color:default_matrix > ();
+
+
+    /* QUALITY
+     *  base or color call qualities
+     */
+    INSDC:quality:phred out_qual_phred = NCBI:WGS:build_scaffold_qual
+        ( .COMPONENT_START, .COMPONENT_LEN, .COMPONENT_PROPS, .COMPONENT_ID );
+
+    // PHRED is default
+    default readonly column INSDC:quality:phred QUALITY
+        = out_qual_phred;
+
+    // textual encodings
+    readonly column INSDC:quality:text:phred_33 QUALITY
+        = ( INSDC:quality:text:phred_33 ) < B8 > sum < 33 > ( out_qual_phred );
+    readonly column INSDC:quality:text:phred_64 QUALITY
+        = ( INSDC:quality:text:phred_64 ) < B8 > sum < 64 > ( out_qual_phred );
+
+
+    /* PLATFORM
+     *  sequencing platform, if known
+     */
+    INSDC:SRA:platform_id out_platform
+        = < INSDC:SRA:platform_id > echo < SRA_PLATFORM_UNDEFINED > ();
+    readonly column INSDC:SRA:platform_id PLATFORM
+        = out_platform;
+
+    /* SPOT_ID
+     *  support for libsra
+     */
+    INSDC:SRA:spotid_t out_spot_id
+        = cast ( scaffold_row_id );
+    readonly column INSDC:SRA:spotid_t SPOT_ID
+        = out_spot_id;
+
+    /* NAME
+     *  spot name
+     */
+    readonly column ascii NAME
+        = out_scaffold_name;
+
+    /* SPOT_LEN
+     * TRIM_START
+     * TRIM_LEN
+     *  spot descriptor
+     */
+    readonly column INSDC:coord:len SPOT_LEN
+        = out_spot_len;
+    INSDC:coord:len out_spot_len
+        = < INSDC:coord:len > vec_sum ( .COMPONENT_LEN );
+    readonly column INSDC:coord:zero TRIM_START
+        = < INSDC:coord:zero > echo < 0 > ();
+    readonly column INSDC:coord:len TRIM_LEN
+        = out_spot_len;
+
+
+    /* READ_START
+     * READ_LEN
+     * READ_TYPE
+     *  read descriptor portion
+     */
+    readonly column INSDC:coord:zero READ_START
+        = out_read_start;
+    INSDC:coord:zero out_read_start
+        = ( INSDC:coord:zero ) < U32 > integral ( .COMPONENT_LEN );
+    readonly column INSDC:coord:len READ_LEN
+        = .COMPONENT_LEN;
+    readonly column INSDC:SRA:xread_type READ_TYPE
+        = out_read_type;
+    INSDC:SRA:xread_type out_read_type
+        = NCBI:WGS:build_read_type ( .COMPONENT_PROPS );
+}
+
+
+/*--------------------------------------------------------------------------
+ * contig
+ */
+database NCBI:WGS:db:contig #1.1
+{
+    table NCBI:WGS:tbl:nucleotide SEQUENCE;
+    table NCBI:WGS:tbl:protein PROTEIN;
+    table NCBI:WGS:tbl:gi_idx GI_IDX;
+    table NCBI:WGS:tbl:scaffold SCAFFOLD;
+};
diff --git a/interfaces/os/mac/os-native.h b/interfaces/os/mac/os-native.h
index eeacd46..079c12b 100644
--- a/interfaces/os/mac/os-native.h
+++ b/interfaces/os/mac/os-native.h
@@ -45,6 +45,7 @@ extern "C" {
  */
 char *strdup ( const char *str );
 
+#if !defined(__MAC_10_7) || (__MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_7)
 static __inline__
 char *strndup ( const char *str, size_t n )
 {
@@ -54,7 +55,7 @@ char *strndup ( const char *str, size_t n )
     if ( end != NULL )
         n = end - str;
 
-    dupstr = malloc ( n + 1 );
+    dupstr = (char*)malloc ( n + 1 );
     if ( dupstr != NULL )
     {
         memcpy ( dupstr, str, n );
@@ -63,6 +64,7 @@ char *strndup ( const char *str, size_t n )
 
     return dupstr;
 }
+#endif
 
 /*--------------------------------------------------------------------------
  * strchrnul - implemented inline here
@@ -83,7 +85,7 @@ static __inline__
 void *memrchr ( const void *s, int c, size_t n )
 {
     size_t i;
-    const char *cp = s;
+    const char *cp = (const char*)s;
     for ( i = n; i > 0; )
     {
         if ( ( int ) cp [ -- i ] == c )
diff --git a/interfaces/os/unix/unix-native.h b/interfaces/os/unix/unix-native.h
index 21459f8..236806a 100644
--- a/interfaces/os/unix/unix-native.h
+++ b/interfaces/os/unix/unix-native.h
@@ -44,7 +44,6 @@ extern "C" {
  *  a structure for communicating a timeout
  *  which under Unix converts to an absolute time once prepared
  */
-typedef struct timeout_t timeout_t;
 struct timeout_t
 {
     struct timespec ts;
@@ -52,18 +51,6 @@ struct timeout_t
     uint32_t prepared;
 };
 
-/* Init
- *  initialize a timeout in milliseconds
- */
-rc_t TimeoutInit ( timeout_t *tm, uint32_t msec );
-
-
-/* Prepare
- *  ensures that a timeout is prepared with an absolute value
-*/
-rc_t TimeoutPrepare ( timeout_t *tm );
-
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/interfaces/os/win/atomic64.h b/interfaces/os/win/atomic64.h
index 566204a..cb9870e 100644
--- a/interfaces/os/win/atomic64.h
+++ b/interfaces/os/win/atomic64.h
@@ -57,7 +57,7 @@ struct atomic64_t
     atomic64_read_and_add ( v, i )
 
 /* add to v -> counter and return the result */
-static __inline int atomic64_add_and_read ( atomic64_t *v, int i )
+static __inline LONG64 atomic64_add_and_read ( atomic64_t *v, int i )
 {
 	return atomic64_read_and_add ( v, i ) + i;
 }
@@ -90,9 +90,9 @@ static __inline int atomic64_add_and_read ( atomic64_t *v, int i )
     InterlockedCompareExchange64 ( & ( v ) -> counter, ( s ), ( t ) )
 
 /* conditional modifications */
-static __inline int atomic64_read_and_add_lt ( atomic64_t *v, int i, int t )
+static __inline LONG64 atomic64_read_and_add_lt ( atomic64_t *v, int i, int t )
 {
-	LONG val, val_intern;
+	LONG64 val, val_intern;
 	for ( val = atomic64_read ( v ); val < t; val = val_intern )
 	{
 		val_intern = atomic64_test_and_set ( v, val + i, val );
@@ -102,9 +102,9 @@ static __inline int atomic64_read_and_add_lt ( atomic64_t *v, int i, int t )
 	return val;
 }
 
-static __inline int atomic64_read_and_add_le ( atomic64_t *v, int i, int t )
+static __inline LONG64 atomic64_read_and_add_le ( atomic64_t *v, int i, int t )
 {
-	LONG val, val_intern;
+	LONG64 val, val_intern;
 	for ( val = atomic64_read ( v ); val <= t; val = val_intern )
 	{
 		val_intern = atomic64_test_and_set ( v, val + i, val );
@@ -114,9 +114,9 @@ static __inline int atomic64_read_and_add_le ( atomic64_t *v, int i, int t )
 	return val;
 }
 
-static __inline int atomic64_read_and_add_eq ( atomic64_t *v, int i, int t )
+static __inline LONG64 atomic64_read_and_add_eq ( atomic64_t *v, int i, int t )
 {
-	LONG val, val_intern;
+	LONG64 val, val_intern;
 	for ( val = atomic64_read( v ); val == t; val = val_intern )
 	{
 		val_intern = atomic64_test_and_set ( v, val + i, val );
@@ -126,9 +126,9 @@ static __inline int atomic64_read_and_add_eq ( atomic64_t *v, int i, int t )
 	return val;
 }
 
-static __inline int atomic64_read_and_add_ne ( atomic64_t *v, int i, int t )
+static __inline LONG64 atomic64_read_and_add_ne ( atomic64_t *v, int i, int t )
 {
-	LONG val, val_intern;
+	LONG64 val, val_intern;
 	for ( val = atomic64_read ( v ); val != t; val = val_intern )
 	{
 		val_intern = atomic64_test_and_set ( v, val + i, val );
@@ -138,9 +138,9 @@ static __inline int atomic64_read_and_add_ne ( atomic64_t *v, int i, int t )
 	return val;
 }
 
-static __inline int atomic64_read_and_add_ge ( atomic64_t *v, int i, int t )
+static __inline LONG64 atomic64_read_and_add_ge ( atomic64_t *v, int i, int t )
 {
-	LONG val, val_intern;
+	LONG64 val, val_intern;
 	for ( val = atomic64_read ( v ); val >= t; val = val_intern )
 	{
 		val_intern = atomic64_test_and_set ( v, val + i, val );
@@ -150,9 +150,9 @@ static __inline int atomic64_read_and_add_ge ( atomic64_t *v, int i, int t )
 	return val;
 }
 
-static __inline int atomic64_read_and_add_gt ( atomic64_t *v, int i, int t )
+static __inline LONG64 atomic64_read_and_add_gt ( atomic64_t *v, int i, int t )
 {
-	LONG val, val_intern;
+	LONG64 val, val_intern;
 	for ( val = atomic64_read ( v ); val > t; val = val_intern )
 	{
 		val_intern = atomic64_test_and_set ( v, val + i, val );
@@ -162,9 +162,9 @@ static __inline int atomic64_read_and_add_gt ( atomic64_t *v, int i, int t )
 	return val;
 }
 
-static __inline int atomic64_read_and_add_odd ( atomic64_t *v, int i )
+static __inline LONG64 atomic64_read_and_add_odd ( atomic64_t *v, int i )
 {
-	LONG val, val_intern;
+	LONG64 val, val_intern;
 	for ( val = atomic64_read ( v ); ( val & 1 ) != 0; val = val_intern )
 	{
 		val_intern = atomic64_test_and_set ( v, val + i, val );
@@ -174,9 +174,9 @@ static __inline int atomic64_read_and_add_odd ( atomic64_t *v, int i )
 	return val;
 }
 
-static __inline int atomic64_read_and_add_even ( atomic64_t *v, int i )
+static __inline LONG64 atomic64_read_and_add_even ( atomic64_t *v, int i )
 {
-	LONG val, val_intern;
+	LONG64 val, val_intern;
 	for ( val = atomic64_read ( v ); ( val & 1 ) == 0; val = val_intern )
 	{
 		val_intern = atomic64_test_and_set ( v, val + i, val );
diff --git a/interfaces/os/win/os-native.h b/interfaces/os/win/os-native.h
index cb24027..224129a 100644
--- a/interfaces/os/win/os-native.h
+++ b/interfaces/os/win/os-native.h
@@ -49,7 +49,9 @@
 #include <klib/text.h>
 #endif
 
+#include <ctype.h>
 #include <direct.h>
+#include <math.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -68,31 +70,24 @@ extern "C" {
  *  a structure for communicating a timeout
  *  which under Windows is a relative time
  */
-typedef struct timeout_t timeout_t;
 struct timeout_t
 {
     uint32_t mS;
+    uint32_t prepared;
 };
 
-/* Init
- *  initialize a timeout in milliseconds
- */
-rc_t CC TimeoutInit ( timeout_t *tm, uint32_t msec );
-
-
-/* Prepare
- *  ensures that a timeout is prepared with an absolute value
-*/
-#define TimeoutPrepare( tm ) \
-    ( ( void ) ( tm ), 0 )
-
-
 /* not consistent across all windows? */
 /* #define snprintf _snprintf */
 
 
+#ifndef putenv
+#define putenv( s ) _putenv ( s )
+#endif
+
 #define mkdir( d, m ) _mkdir( d )
 #define strcasecmp _stricmp
+#define strtoll _strtoi64
+#define strtok_r strtok_s
 
 #undef strdup
 #define strdup( str ) \
@@ -114,7 +109,7 @@ static __inline__
 void *memrchr ( const void *s, int c, size_t n )
 {
     size_t i;
-    const char *cp = s;
+    const char *cp = (const char*)s;
     for ( i = n; i > 0; )
     {
         if ( ( int ) cp [ -- i ] == c )
@@ -163,6 +158,8 @@ char *strsep ( char **stringp, const char *delim )
 	return NULL;
 }
 
+#define gmtime_r(t, tm) gmtime_s(tm, t)
+#define timegm _mkgmtime
 
 static __inline
 int strncasecmp( const char *s1, const char *s2, size_t n )
@@ -170,6 +167,38 @@ int strncasecmp( const char *s1, const char *s2, size_t n )
     return _strnicmp( s1, s2, n );
 }
 
+static __inline 
+const char *strcasestr (const char *s1, const char *s2)
+{
+    unsigned char c2 = tolower((unsigned char) *s2);
+    size_t l1 = strlen(s1), l2 = strlen(s2);
+    
+    if (l2 == 0) {
+        return s1;
+    }
+
+    while (l1 >= l2) {
+        if (tolower((unsigned char) *s1) == c2
+            &&  (l2 == 1  ||  _strnicmp(s1 + 1, s2 + 1, l2 - 1) == 0)) {
+            return s1;
+        }
+        ++s1;
+        --l1;
+    }
+
+    return NULL;
+}
+
+static __inline
+long int lround ( double x )
+{
+    double val = ( x < 0.0 ) ? ceil ( x - 0.5 ) : floor ( x + 0.5 );
+    if ( val > ( double ) LONG_MAX )
+        return LONG_MAX;
+    if ( val < ( double ) LONG_MIN )
+        return LONG_MIN;
+    return ( long int ) val;
+}
 
 #ifdef __cplusplus
 }
diff --git a/interfaces/sra/impl.h b/interfaces/sra/impl.h
index 86674ee..815d5a6 100644
--- a/interfaces/sra/impl.h
+++ b/interfaces/sra/impl.h
@@ -50,6 +50,7 @@ struct KNamelist;
 struct KDirectory;
 typedef union SRAPath_vt SRAPath_vt;
 typedef struct SRAPath_vt_v1 SRAPath_vt_v1;
+typedef struct SRAPath_vt_v2 SRAPath_vt_v2;
 
 
 /*--------------------------------------------------------------------------
@@ -83,9 +84,28 @@ struct SRAPath_vt_v1
     rc_t ( CC *listPath ) ( const SRAPATH_IMPL *self, struct KNamelist **runs, bool deep );
 };
 
+struct SRAPath_vt_v2
+{
+    /* version == 2.x */
+    uint32_t maj;
+    uint32_t min;
+
+    rc_t ( CC *addref ) ( const SRAPATH_IMPL *self );
+    rc_t ( CC *release ) ( const SRAPATH_IMPL *self );
+    rc_t ( CC *version ) ( const SRAPATH_IMPL *self, uint32_t *version );
+    rc_t ( CC *clear ) ( SRAPATH_IMPL *self );
+    rc_t ( CC *addRepPath ) ( SRAPATH_IMPL *self, const char *path );
+    rc_t ( CC *addVolPath ) ( SRAPATH_IMPL *self, const char *path );
+    rc_t ( CC *fullPath ) ( const SRAPATH_IMPL *self, const char *rep, const char *vol,
+			 const char *acc, char *path, size_t path_max );
+    bool ( CC *testPath ) ( const SRAPATH_IMPL *self, const char *path );
+    rc_t ( CC *findPath ) ( const SRAPATH_IMPL *self, const char *acc, char *path, size_t path_max, size_t *rep_len );
+};
+
 union SRAPath_vt
 {
     SRAPath_vt_v1 v1;
+    SRAPath_vt_v2 v2;
 };
 
 
diff --git a/interfaces/sra/pevents.vschema b/interfaces/sra/pevents.vschema
index 5fd53be..8072810 100644
--- a/interfaces/sra/pevents.vschema
+++ b/interfaces/sra/pevents.vschema
@@ -71,7 +71,7 @@ table NCBI:SRA:tbl:pevents #1.0
         zip_encoding #1.0 < Z_RLE > .SORT_ORDER = sort_encode;
 
     F32 reorder = NCBI:SRA:reorder < 4 > ( sort_encode, LIKELIHOODS );
-    F32 like_scale = vdb:vec_sum < F32, 4 > ( reorder );
+    F32 like_scale = vdb:fixed_vec_sum < F32, 4 > ( reorder );
 
     physical column < F32 >
         fzip_encoding #1.0 < 4 > .SCALE = like_scale;
diff --git a/interfaces/sra/sradb-priv.h b/interfaces/sra/sradb-priv.h
index 204008b..d22d8d0 100644
--- a/interfaces/sra/sradb-priv.h
+++ b/interfaces/sra/sradb-priv.h
@@ -27,6 +27,18 @@
 #ifndef _h_sra_sradb_priv_
 #define _h_sra_sradb_priv_
 
+#ifndef _h_klib_container_
+#include <klib/container.h>
+#endif
+
+#ifndef _h_klib_text
+#include <klib/text.h>
+#endif
+
+#ifndef _h_klib_vector
+#include <klib/vector.h>
+#endif
+
 #ifndef _h_sra_sradb_
 #include <sra/sradb.h>
 #endif
@@ -52,14 +64,15 @@ extern "C" {
  * forwards
  */
 struct KFile;
+struct KDirectory;
 struct KDBManager;
 struct KTable;
+struct KLock;
 struct VDBManager;
 struct VTable;
 struct VSchema;
 struct SRAPath;
 
-
 /*--------------------------------------------------------------------------
  * SRAMgr
  *  opaque handle to SRA library
@@ -116,6 +129,11 @@ SRA_EXTERN rc_t CC SRAMgrVGetTableModDate ( const SRAMgr *self,
 SRA_EXTERN rc_t CC SRAMgrGetTableModDate ( const SRAMgr *self,
     KTime_t *mtime, const char *spec, ... );
 
+/* ConfigReload
+ *  update SRAPath object
+ */
+SRA_EXTERN rc_t CC SRAMgrConfigReload( const SRAMgr *self, struct KDirectory const *wd );
+
 
 /*--------------------------------------------------------------------------
  * SRATable
@@ -153,7 +171,11 @@ SRA_EXTERN rc_t CC SRATableGetKTableUpdate ( SRATable *self, struct KTable **ktb
 SRA_EXTERN rc_t CC SRATableMakeSingleFileArchive ( const SRATable *self,
     struct KFile const **sfa, bool lightweight, const char** ext );
 
-
+/* SingleFileArchiveExt
+ *  retrieve archive extension based on object in the spec
+ */
+SRA_EXTERN rc_t CC SRAMgrSingleFileArchiveExt(const SRAMgr *self,
+    const char* spec, const bool lightweight, const char** ext);
 /*--------------------------------------------------------------------------
  * SRAPath
  */
@@ -162,7 +184,7 @@ SRA_EXTERN rc_t CC SRATableMakeSingleFileArchive ( const SRATable *self,
  *  finds location of run within rep-server/volume matrix
  *  returns length of rep-server portion
  */
-SRA_PATH_EXTERN rc_t CC SRAPathFindWithRepLen ( struct SRAPath const *self,
+SRA_EXTERN rc_t CC SRAPathFindWithRepLen ( struct SRAPath const *self,
     const char *accession, char *path, size_t path_max, size_t *rep_len );
 
 
@@ -263,7 +285,102 @@ SRA_EXTERN const SRATableData *CC SRATableGetTableData ( const SRATable *self );
 
 #endif
 
+/*--------------------------------------------------------------------------
+ * SRA Accession Cache
+ */
+struct SRACacheIndex;
+
+typedef struct SRACacheMetrics
+{   /* 0 = metric not used */
+
+    /* sizeof table data */
+    /* expanded cache bytes, i.e. cursor */
+    uint64_t bytes;
+    uint32_t elements; /* open tables */
+    uint32_t threads;
+    uint32_t fds;
+} SRACacheMetrics;
+
+#define SRACacheThresholdSoftBytesDefault       ((uint64_t)0)
+#define SRACacheThresholdSoftElementsDefault    ((uint32_t)1000)
+#define SRACacheThresholdSoftThreadsDefault     ((uint32_t)0)
+#define SRACacheThresholdSoftFdsDefault         ((uint32_t)0)
+
+#define SRACacheThresholdHardBytesDefault       ((uint64_t)0)
+#define SRACacheThresholdHardElementsDefault    ((uint32_t)10000)
+#define SRACacheThresholdHardThreadsDefault     ((uint32_t)0)
+#define SRACacheThresholdHardFdsDefault         ((uint32_t)0)
+
+SRA_EXTERN bool CC SRACacheMetricsLessThan(const SRACacheMetrics* a, const SRACacheMetrics* b);
+
+typedef struct SRACacheElement 
+{
+    DLNode dad;
+    
+    SRATable*   object;
+    
+    KTime_t lastAccessed;
+    
+    struct SRACacheIndex* index;
+    uint32_t key;
+
+    SRACacheMetrics metrics;
+} SRACacheElement;
+
+SRA_EXTERN rc_t CC SRACacheElementMake(SRACacheElement**        self, 
+                                       SRATable*                object, 
+                                       struct SRACacheIndex*    index, 
+                                       uint32_t                 key, 
+                                       const SRACacheMetrics*   metrics);
+SRA_EXTERN rc_t CC SRACacheElementDestroy(SRACacheElement* self);
+
+typedef struct SRACacheIndex
+{
+    BSTNode dad;
+    
+    String* prefix;
+    KVector* body; /* KVector<SRACacheElement*> */
+} SRACacheIndex;
+
+SRA_EXTERN rc_t CC SRACacheIndexMake(SRACacheIndex** self, String* prefix);
+SRA_EXTERN rc_t CC SRACacheIndexDestroy(SRACacheIndex* self);
+
+typedef struct SRACache
+{
+    BSTree indexes; /* grows as needed */
+
+    DLList lru; /* DLList<SRACacheElement*>;  head is the oldest */
+    
+    SRACacheMetrics softThreshold;
+    SRACacheMetrics hardThreshold;
+    SRACacheMetrics usage;
+    
+    struct KLock* mutex; 
+    
+} SRACache;
+
+SRA_EXTERN rc_t CC SRACacheInit(SRACache**);
+
+SRA_EXTERN rc_t CC SRACacheGetSoftThreshold(SRACache* self, SRACacheMetrics* metrics);
+SRA_EXTERN rc_t CC SRACacheSetSoftThreshold(SRACache* self, const SRACacheMetrics* metrics);
+
+SRA_EXTERN rc_t CC SRACacheGetHardThreshold(SRACache* self, SRACacheMetrics* metrics);
+SRA_EXTERN rc_t CC SRACacheSetHardThreshold(SRACache* self, const SRACacheMetrics* metrics);
+
+SRA_EXTERN rc_t CC SRACacheGetUsage(SRACache* self, SRACacheMetrics* metrics);
+
+/* flush tables until usage is lower than specified in self->softThreshold */
+SRA_EXTERN rc_t CC SRACacheFlush(SRACache* self); 
+
+/* if found, moves element to the back of the list; return NULL object if not in the cache */
+SRA_EXTERN rc_t CC SRACacheGetTable(SRACache* self, const char* acc, const SRATable** object); 
+
+/* 
+ * fails if table is already in the cache
+ */
+SRA_EXTERN rc_t CC SRACacheAddTable(SRACache* self, const char* acc, SRATable*); 
 
+SRA_EXTERN rc_t CC SRACacheWhack(SRACache* self);
 
 #ifdef __cplusplus
 }
diff --git a/interfaces/sra/srapath.h b/interfaces/sra/srapath.h
index 19cc6ab..9965e8d 100644
--- a/interfaces/sra/srapath.h
+++ b/interfaces/sra/srapath.h
@@ -43,6 +43,8 @@
 extern "C" {
 #endif
 
+#define TOOLS_USE_SRAPATH 0
+
 /*--------------------------------------------------------------------------
  * forwards
  */
@@ -76,7 +78,6 @@ SRA_EXTERN rc_t CC SRAPathMake ( SRAPath **pm, struct KDirectory const *dir );
 SRA_EXTERN rc_t CC SRAPathAddRef ( const SRAPath *self );
 SRA_EXTERN rc_t CC SRAPathRelease ( const SRAPath *self );
 
-
 /* Version
  *  returns the library version
  */
@@ -84,13 +85,13 @@ SRA_EXTERN rc_t CC SRAPathVersion ( const SRAPath *self, uint32_t *version );
 
 
 /* Clear
- *  forget all existing server and volume paths
+ *  forget existing server and volume paths for the default repository
  */
 SRA_EXTERN rc_t CC SRAPathClear ( SRAPath *self );
 
 
 /* AddRepPath
- *  add a replication path
+ *  add a replication path to the default repository
  *
  *  "rep" [ IN ] - NUL-terminated server search path
  *  may be a compound path with ':' separator characters, e.g.
@@ -105,7 +106,7 @@ SRA_EXTERN rc_t CC SRAPathAddRepPath ( SRAPath *self, const char *rep );
 
 
 /* AddVolPath
- *  add a volume path
+ *  add a volume path to the default repository
  *
  *  "vol" [ IN ] - NUL-terminated volume search path
  *  may be a compound path with ':' separator characters, e.g.
diff --git a/interfaces/vdb/blob.h b/interfaces/vdb/blob.h
new file mode 100644
index 0000000..89feaa5
--- /dev/null
+++ b/interfaces/vdb/blob.h
@@ -0,0 +1,147 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_blob_
+#define _h_vdb_blob_
+
+#ifndef _h_vdb_extern_
+#include <vdb/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+
+
+/*--------------------------------------------------------------------------
+ * VBlob
+ *  a collection of data cells
+ */
+typedef struct VBlob VBlob;
+
+
+/* AddRef
+ * Release
+ *  all objects are reference counted
+ *  NULL references are ignored
+ */
+VDB_EXTERN rc_t CC VBlobAddRef ( const VBlob *self );
+VDB_EXTERN rc_t CC VBlobRelease ( const VBlob *self );
+
+
+/* IdRange
+ *  returns id range for blob
+ *
+ *  "first" [ OUT, NULL OKAY ] and "count" [ OUT, NULL OKAY ] -
+ *  id range is returned in these output parameters, where
+ *  at least ONE must be NOT-NULL
+ */
+VDB_EXTERN rc_t CC VBlobIdRange ( const VBlob *self,
+    int64_t *first, uint64_t *count );
+
+
+/* Read
+ *  read entire single cell of byte-aligned data into a buffer
+ *
+ *  "row_id" [ IN ] - allows ReadDirect random access to any cell
+ *  in column
+ *
+ *  "elem_bits" [ IN ] - expected element size in bits, required
+ *  to be compatible with the actual element size, and be a multiple
+ *  of 8 ( byte-aligned ). for non-byte-aligned data, see ReadBits
+ *
+ *  "buffer" [ OUT ] and "blen" [ IN ] - return buffer for row data
+ *  where "blen" gives buffer capacity in elements. the total buffer
+ *  size in bytes == ( "elem_bits" * "blen" + 7 ) / 8.
+ *
+ *  "row_len" [ OUT ] - return parameter for the number of elements
+ *  in the requested row.
+ *
+ *  when the return code is 0, "row_len" will contain the number of
+ *  elements read into buffer. if the return code indicates that the
+ *  buffer is too small, "row_len" will give the required buffer length.
+ */
+VDB_EXTERN rc_t CC VBlobRead ( const VBlob *self, int64_t row_id,
+    uint32_t elem_bits, void *buffer, uint32_t blen, uint32_t *row_len );
+
+
+/* ReadBits
+ *  read single row of potentially bit-aligned cell data into a buffer
+ *
+ *  "elem_bits" [ IN ] - expected element size in bits, required to be
+ *  compatible with the actual element size, and may ( or may not ) be
+ *  a multiple of 8 ( byte aligned ).
+ *
+ *  "start" [ IN ] - zero-based starting index to first element,
+ *  valid from 0 .. row_len - 1
+ *
+ *  "buffer" [ IN ], "boff" [ IN ] and "blen" [ IN ] -
+ *  return buffer for row data, where "boff" is in BITS
+ *  and "blen" is in ELEMENTS.
+ *
+ *  "num_read" [ OUT ] - return parameter for the number of elements
+ *  read, which is <= "blen"
+ *
+ *  "remaining" [ OUT, NULL OKAY ] - optional return parameter for
+ *  the number of elements remaining to be read. specifically,
+ *  "start" + "num_read" + "remaining" == row length, assuming that
+ *  "start" <= row length.
+ */
+VDB_EXTERN rc_t CC VBlobReadBits ( const VBlob *self, int64_t row_id,
+    uint32_t elem_bits, uint32_t start, void *buffer, uint32_t boff,
+    uint32_t blen, uint32_t *num_read, uint32_t *remaining );
+
+
+/* CellData
+ *  access pointer to single cell of potentially bit-aligned cell data
+ *
+ *  "elem_bits" [ OUT, NULL OKAY ] - optional return parameter for
+ *  element size in bits
+ *
+ *  "base" [ OUT ] and "boff" [ OUT, NULL OKAY ] -
+ *  compound return parameter for pointer to row starting bit
+ *  where "boff" is in BITS
+ *
+ *  "row_len" [ OUT, NULL OKAY ] - the number of elements in cell
+ */
+VDB_EXTERN rc_t CC VBlobCellData ( const VBlob *self, int64_t row_id,
+    uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*  _h_vdb_blob_ */
diff --git a/interfaces/vdb/built-in.vschema b/interfaces/vdb/built-in.vschema
index ba43a3a..07b28c0 100644
--- a/interfaces/vdb/built-in.vschema
+++ b/interfaces/vdb/built-in.vschema
@@ -45,6 +45,7 @@ typeset integer_set { I8, U8, I16, U16, I32, U32, I64, U64 };
 typeset float_set { F32, F64 };
 typeset numeric_set { integer_set, float_set };
 typeset text_set { utf8, utf16, utf32, ascii };
+typeset text8_set { utf8, ascii };
 typeset transpose_set { B8, B16, B32, B64 };
 
 
@@ -53,6 +54,7 @@ typeset transpose_set { B8, B16, B32, B64 };
  */
 fmtdef merged_fmt;
 fmtdef transposed_fmt;
+fmtdef delta_averaged_fmt;
 
 
 /*--------------------------------------------------------------------------
@@ -81,11 +83,10 @@ any cast #1.0 ( any in )
  *  performs a bitwise operation 'OR' for every byte in A and B
  *  A and B are not neccesarily have the same size
  *  the resulting row will have the size of B while OR operation is done for portion of A overlapping B
- *  For different sizes of A and B 'align' parameter provides what edge of A and B are alligned
+ *  For different sizes of A and B 'align' parameter provides what edge of A and B are aligned
  *  possible values ALIGN_LEFT, ALIGN_RIGHT
  * 
  */
-
 function < type T >
 T  bit_or #1 < U8 align > ( T  A, T B  )
     = vdb:bit_or;
@@ -207,7 +208,7 @@ T range_validate #1.0 < T lower, T upper > ( T in )
 
 
 /* select
- *  return first non-null input for id
+ *  return first non-empty input for id
  *  inputs are taken from first to last
  *
  *  "T" [ TYPE ] - data type of selection
@@ -271,6 +272,17 @@ function
 transpose_set detranspose #1 ( transposed_fmt in )
     = vdb:detranspose;
 
+/*
+ * delta_average computes average representation of the maximium 
+ * lengh row and deltas every row against it
+ */
+function
+delta_averaged_fmt delta_average #1 ( any in ) 
+     = vdb:delta_average;
+
+function
+any undelta_average #1 ( delta_averaged_fmt in )
+    = vdb:undelta_average;
 
 /* merge
  *  merges all input blobs of any format/type into a single blob
@@ -350,7 +362,7 @@ ascii meta:attr:write #1.0 < ascii node, ascii attr > ( ascii in );
  *  "name" [ CONST ] - parameter name
  */
 function
-utf8 parameter:read #1.0 < ascii name, * bool deterministic > ();
+text8_set parameter:read #1.0 < ascii name, * bool deterministic > ();
 
 
 /* environment:read
@@ -359,7 +371,7 @@ utf8 parameter:read #1.0 < ascii name, * bool deterministic > ();
  *  "name" [ CONST ] - environment variable name
  */
 function
-utf8 environment:read #1.0 < ascii name > ();
+text8_set environment:read #1.0 < ascii name > ();
 
 
 /* idx:text:project
@@ -372,12 +384,12 @@ utf8 environment:read #1.0 < ascii name > ();
  *  of values to substitute for values not
  *  found in the index.
  */
-function utf8 idx:text:project #1.0 < ascii index_name > ( * utf8 substitute );
+function text8_set idx:text:project #1.0 < ascii index_name > ( * text8_set substitute );
 
 
 /* idx:text:insert
  */
-function utf8 idx:text:insert #1.0 < ascii index_name > ( utf8 key );
+function text8_set idx:text:insert #1.0 < ascii index_name > ( text8_set key );
 
 
 /* vdb:row_id_range
diff --git a/interfaces/vdb/cursor.h b/interfaces/vdb/cursor.h
index e90ef5f..55dce40 100644
--- a/interfaces/vdb/cursor.h
+++ b/interfaces/vdb/cursor.h
@@ -49,6 +49,7 @@ extern "C" {
 /*--------------------------------------------------------------------------
  * forwards
  */
+struct VBlob;
 struct VTable;
 struct VTypedesc;
 struct VTypedecl;
@@ -222,6 +223,17 @@ VDB_EXTERN rc_t CC VCursorOpenRow ( const VCursor *self );
  */
 VDB_EXTERN rc_t CC VCursorCommitRow ( VCursor *self );
 
+/* RepeatRow
+ *  repeats the current row by the count provided
+ *  row must have been committed
+ *
+ *  AVAILABILITY: version 2.6
+ *
+ *  "count" [ IN ] - the number of times to repeat
+ *  the current row.
+ */
+VDB_EXTERN rc_t CC VCursorRepeatRow ( VCursor *self, uint64_t count );
+
 /* CloseRow
  *  balances OpenRow message
  *  if there are uncommitted modifications,
@@ -241,6 +253,26 @@ VDB_EXTERN rc_t CC VCursorCloseRow ( const VCursor *self );
 VDB_EXTERN rc_t CC VCursorFlushPage ( VCursor *self );
 
 
+/* GetBlob
+ *  retrieve a blob of data containing the current row id
+ * GetBlobDirect
+ *  retrieve a blob of data containing the requested row id
+ *
+ *  "blob" [ OUT ] - return parameter for a new reference
+ *  to VBlob containing requested cell. NB - must be released
+ *  via VBlobRelease when no longer needed.
+ *
+ *  "row_id" [ IN ] - allows ReadDirect random access to any cell
+ *  in column
+ *
+ *  "col_idx" [ IN ] - index of column to be read, returned by "AddColumn"
+ */
+VDB_EXTERN rc_t CC VCursorGetBlob ( const VCursor *self,
+    struct VBlob const **blob, uint32_t col_idx );
+VDB_EXTERN rc_t CC VCursorGetBlobDirect ( const VCursor *self,
+    struct VBlob const **blob, int64_t row_id, uint32_t col_idx );
+
+
 /* Read
  *  read entire single row of byte-aligned data into a buffer
  * ReadDirect
@@ -397,6 +429,11 @@ VDB_EXTERN rc_t CC VCursorSetUserData ( const VCursor *self,
     void *data, void ( CC * destroy ) ( void *data ) );
 
 
+VDB_EXTERN rc_t CC VCursorLinkedCursorGet(const VCursor *cself,const char *tbl,VCursor const **curs);
+VDB_EXTERN rc_t CC VCursorLinkedCursorSet(const VCursor *cself,const char *tbl,VCursor const *curs);
+
+
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/interfaces/vdb/database.h b/interfaces/vdb/database.h
index 82be035..2753eee 100644
--- a/interfaces/vdb/database.h
+++ b/interfaces/vdb/database.h
@@ -188,6 +188,22 @@ VDB_EXTERN rc_t CC VDatabaseTypespec ( const VDatabase *self,
 VDB_EXTERN bool CC VDatabaseLocked ( const VDatabase *self );
 
 
+/* IsAlias
+ *  returns true if object name is an alias
+ *  returns path to fundamental name if it was aliased
+ *
+ *  "type" [ IN ] - a KDBPathType
+ *  valid values are kptDatabase, kptTable and kptIndex
+ *
+ *  "resolved" [ OUT ] and "rsize" [ IN ] - optional output buffer
+ *  for fundamenta object name if "alias" is not a fundamental name, 
+ *
+ *  "name" [ IN ] - NUL terminated object name
+ */
+VDB_EXTERN bool CC VDatabaseIsAlias ( const VDatabase *self, uint32_t type,
+    char *resolved, size_t rsize, const char *name );
+
+
 /* Writable
  *  returns 0 if object is writable
  *  or a reason why if not
@@ -288,7 +304,7 @@ VDB_EXTERN rc_t CC VDatabaseOpenSchema ( const VDatabase *self, struct VSchema c
  *
  * "names" [ OUT ] - return parameter for table 
  */
-VDB_EXTERN rc_t CC VDatabaseListTbl( const VDatabase *self, KNamelist **names );
+VDB_EXTERN rc_t CC VDatabaseListTbl ( const VDatabase *self, KNamelist **names );
 
 /* lists the sub-databases of the database
  *
diff --git a/interfaces/vdb/dependencies.h b/interfaces/vdb/dependencies.h
new file mode 100644
index 0000000..4e96670
--- /dev/null
+++ b/interfaces/vdb/dependencies.h
@@ -0,0 +1,211 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+#ifndef _h_vdb_dependencies_
+#define _h_vdb_dependencies_
+
+
+#ifndef _h_vdb_extern_
+#include <vdb/extern.h>
+#endif
+
+#ifndef _h_klib_rc_
+#include <klib/rc.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct VDatabase;
+struct VTable;
+
+
+/*--------------------------------------------------------------------------
+ * VDBDependencies
+ *  information about VDatabase dependencies
+ *
+ *  object contains zero or more dependencies
+ *
+ *  each dependency has a number of properties, accessible via index
+ */
+typedef struct VDBDependencies VDBDependencies;
+
+
+/* AddRef
+ * Release
+ *  all objects are reference counted
+ *  NULL references are ignored */
+VDB_EXTERN rc_t CC VDBDependenciesAddRef ( const VDBDependencies *self );
+VDB_EXTERN rc_t CC VDBDependenciesRelease ( const VDBDependencies *self );
+
+/* ListDependencies
+ *  create a dependencies object: list all dependencies
+ *
+ *  "dep" [ OUT ] - return for VDBDependencies object
+ *
+ *  "missing" [ IN ] - if true, list only missing dependencies
+ *  otherwise, list all dependencies
+ */
+VDB_EXTERN rc_t CC VDatabaseListDependencies ( struct VDatabase const *self,
+    const VDBDependencies **dep, bool missing );
+
+/* Count
+ *  retrieve the number of dependencies
+ *
+ *  "count" [ OUT ] - return parameter for dependencies count
+ */
+VDB_EXTERN rc_t CC VDBDependenciesCount ( const VDBDependencies *self,
+    uint32_t *count );
+
+
+/* Type
+ *  describe the dependency object type ( see kbd/manager.h )
+ *
+ *  "type" [ OUT ] - a KDBPathType
+ *
+ *  "idx" [ IN ] - zero-based index of dependency
+ */
+VDB_EXTERN rc_t CC VDBDependenciesType ( const VDBDependencies *self,
+    uint32_t *type, uint32_t idx );
+
+
+/* Local
+ *  retrieve local property
+ *
+ *  "local" [ OUT ] - true if object is stored internally
+ *
+ *  "idx" [ IN ] - zero-based index of dependency
+ */
+VDB_EXTERN rc_t CC VDBDependenciesLocal ( const VDBDependencies *self,
+    bool *local, uint32_t idx );
+
+
+/* SeqId
+ *  retrieve sequence id of object
+ *
+ *  "seq_id" [ OUT ] - returned pointer should not be freed.
+ *   becomes invalid after VDBDependenciesRelease
+ *
+ *  "idx" [ IN ] - zero-based index of dependency
+ */
+VDB_EXTERN rc_t CC VDBDependenciesSeqId ( const VDBDependencies *self,
+    const char **seq_id, uint32_t idx );
+
+
+/* Name
+ *  retrieve object name
+ *
+ * "name" [ OUT ] - returner pointed should not be freed.
+ *  it becomes invalid after VDBDependenciesRelease
+ *
+ *  "idx" [ IN ] - zero-based index of dependency
+ */
+VDB_EXTERN rc_t CC VDBDependenciesName ( const VDBDependencies *self,
+    const char **name, uint32_t idx );
+
+
+/* Circular
+ *  retrieve circular property
+ *  reference sequences may be circular
+ *
+ *  "circular" [ OUT ] - true if dependency is a circular reference table
+ *
+ *  "idx" [ IN ] - zero-based index of dependency
+ */
+VDB_EXTERN rc_t CC VDBDependenciesCircular ( const VDBDependencies *self,
+    bool *circular, uint32_t idx );
+
+
+/* Path
+ *  returns [Local] path for resolved dependency,
+ *  returns NULL for local and missing dependency.
+ *
+ *  "path" [ OUT ] - returned pointer should not be freed.
+ *   it becomes invalid after VDBDependenciesRelease
+ *
+ *  "idx" [ IN ] - zero-based index of dependency
+ */
+VDB_EXTERN rc_t CC VDBDependenciesPath ( const VDBDependencies *self,
+    const char **path, uint32_t idx );
+
+/* PathRemote
+ *  returns Remote path for dependency,
+ *  returns NULL for not found dependency.
+ *
+ *  "path" [ OUT ] - returned pointer should not be freed.
+ *   it becomes invalid after VDBDependenciesRelease
+ *
+ *  "idx" [ IN ] - zero-based index of dependency
+ */
+VDB_EXTERN rc_t CC VDBDependenciesPathRemote ( const VDBDependencies *self,
+    const char **path, uint32_t idx );
+
+/* PathCache
+ *  returns Cache path for dependency,
+ *  returns NULL for not found dependency.
+ *
+ *  "path" [ OUT ] - returned pointer should not be freed.
+ *   it becomes invalid after VDBDependenciesRelease
+ *
+ *  "idx" [ IN ] - zero-based index of dependency
+ */
+VDB_EXTERN rc_t CC VDBDependenciesPathCache ( const VDBDependencies *self,
+    const char **path, uint32_t idx );
+
+/* Error
+ *  trying to analyze rc code and object
+ *  in order to recognize dependencies error
+ *
+ *  db OR table - only one is required
+ */
+VDB_EXTERN bool CC UIError( rc_t rc,
+    struct VDatabase const *db, struct VTable const *table);
+
+/* report error(s) via PLOGERR based on an object
+ * log_list - if true logs the missing items list also
+ */
+VDB_EXTERN void CC UIDatabaseLOGError( rc_t rc,
+    struct VDatabase const *db, bool log_list );
+VDB_EXTERN void CC UITableLOGError( rc_t rc,
+    struct VTable const *table, bool log_list );
+
+/* return human-readable string explaining rc code.
+ * the string should not be freed
+ */
+VDB_EXTERN const char* CC UIDatabaseGetErrorString(rc_t rc);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _h_vdb_dependencies_ */
diff --git a/interfaces/vdb/manager.h b/interfaces/vdb/manager.h
index d06bc63..90ccb2f 100644
--- a/interfaces/vdb/manager.h
+++ b/interfaces/vdb/manager.h
@@ -157,6 +157,29 @@ VDB_EXTERN rc_t CC VDBManagerGetUserData ( const VDBManager *self, void **data )
 VDB_EXTERN rc_t CC VDBManagerSetUserData ( const VDBManager *self,
     void *data, void ( CC * destroy ) ( void *data ) );
 
+
+/* GetObjVersion
+ *  returns the vdb-version of the given object
+ *
+ *  "version" [ OUT ] - discovered vdb-version
+ *
+ *  "path"    [ IN ] - path to the object to be examined ( database or table )
+ */
+VDB_EXTERN rc_t CC VDBManagerGetObjVersion ( const VDBManager *self,
+    ver_t * version, const char *path );
+
+
+/* PathType
+ *  check the path type of an object/directory path.
+ *
+ *  this is an extension of the KDirectoryPathType ( see <kdb/manager.h> )
+ *  and will return the KDirectory values if a path type is not specifically
+ *  a VDB or KDB object.
+ */
+VDB_EXTERN int CC VDBManagerPathType ( const VDBManager * self,
+    const char *path, ... );
+VDB_EXTERN int CC VDBManagerVPathType ( const VDBManager * self,
+    const char *path, va_list args );
         
 #ifdef __cplusplus
 }
diff --git a/interfaces/vdb/manager.hpp b/interfaces/vdb/manager.hpp
index e02e0d8..b7becc3 100644
--- a/interfaces/vdb/manager.hpp
+++ b/interfaces/vdb/manager.hpp
@@ -181,7 +181,7 @@ struct VDBManager
      *  wd-native character set giving path to table
      */
     inline rc_t OpenTable ( const VTable **tbl, struct VSchema const *schema,
-        const char *path, ... ) throw()
+        const char *path, ... ) const throw ()
     {
         va_list args;
         va_start ( args, path );
@@ -190,11 +190,11 @@ struct VDBManager
         return rc;
     }
     inline rc_t OpenTable ( const VTable **tbl, struct VSchema const *schema,
-        const char *path, va_list args ) throw()
+        const char *path, va_list args ) const throw ()
     { return VDBManagerVOpenTableRead ( this, tbl, schema, path, args ); }
 
     inline rc_t OpenTable ( VTable **tbl, struct VSchema const *schema,
-        const char *path, ... ) throw()
+        const char *path, ... ) throw ()
     {
         va_list args;
         va_start ( args, path );
@@ -203,7 +203,7 @@ struct VDBManager
         return rc;
     }
     inline rc_t OpenTable ( VTable **tbl, struct VSchema const *schema,
-        const char *path, va_list args ) throw()
+        const char *path, va_list args ) throw ()
     { return VDBManagerVOpenTableUpdate ( this, tbl, schema, path, args ); }
 
 
diff --git a/interfaces/vdb/report.h b/interfaces/vdb/report.h
new file mode 100644
index 0000000..90d3695
--- /dev/null
+++ b/interfaces/vdb/report.h
@@ -0,0 +1,92 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vdb_report_
+#define _h_vdb_report_
+
+#ifndef _h_vdb_extern_
+#include <vdb/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct VDBManager;
+struct VDatabase;
+struct VTable;
+
+
+/*--------------------------------------------------------------------------
+ * An unrecoverable error happened.
+ * We can help to solve it
+ * by reporting information about known application execution environment.
+ */
+
+
+/* SetVDBManager
+ *  remember the manager in use
+ */
+VDB_EXTERN rc_t CC ReportSetVDBManager ( struct VDBManager const *mgr );
+
+
+/* SetDatabase
+ *  To be called after application successfully opened Database
+ *  specified in command line.
+ *  If the application supports multiple objects passed in command line
+ *  to be processed in a loop: should be called for each argument database.
+ *
+ *  "path" [ IN ] - path to the database that is used to access it
+ */
+VDB_EXTERN rc_t CC ReportResetDatabase ( const char *path,
+    struct VDatabase const *db );
+
+
+/* SetTable
+ *  To be called after application successfully opened Table
+ *  specified in command line.
+ *  If the application supports multiple objects passed in command line
+ *  to be processed in a loop: should be called for each argument table.
+ *
+ *  "path" [ IN ] - path to the table that is used to access it
+ */
+VDB_EXTERN rc_t CC ReportResetTable ( const char *path,
+    struct VTable const *tbl );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_vdb_report_ */
diff --git a/interfaces/vdb/vdb-priv.h b/interfaces/vdb/vdb-priv.h
index 2e8b6e6..2d3640d 100644
--- a/interfaces/vdb/vdb-priv.h
+++ b/interfaces/vdb/vdb-priv.h
@@ -77,6 +77,17 @@ VDB_EXTERN rc_t CC VDBManagerOpenKDBManagerUpdate ( struct VDBManager *self,
 #define VDBManagerGetKDBManagerUpdate VDBManagerOpenKDBManagerUpdate
 
 
+/* ListExternalSchemaModules
+ */
+VDB_EXTERN rc_t CC VDBManagerListExternalSchemaModules ( struct VDBManager const *self,
+    struct KNamelist **list );
+
+/* DisablePagemapThread
+ *  this can cause difficulties for some clients
+ */
+VDB_EXTERN rc_t CC VDBManagerDisablePagemapThread ( struct VDBManager const *self );
+
+
 /*--------------------------------------------------------------------------
  * VSchema
  */
@@ -123,10 +134,34 @@ VDB_EXTERN rc_t CC VTableOpenKTableUpdate ( struct VTable *self, struct KTable *
 
 #define VTableGetKTableRead VTableOpenKTableRead
 #define VTableGetKTableUpdate VTableOpenKTableUpdate
-    
-VDB_EXTERN rc_t CC VTableDropColumn(struct VTable *self, const char *name, ...);
-VDB_EXTERN rc_t CC VTableVDropColumn(struct VTable *self, const char *name, va_list args);
-    
+
+
+/* DropColumn
+ */
+VDB_EXTERN rc_t CC VTableDropColumn ( struct VTable *self, const char *name, ... );
+VDB_EXTERN rc_t CC VTableVDropColumn ( struct VTable *self, const char *name, va_list args );
+
+/* RenameColumn
+ */
+VDB_EXTERN rc_t CC VTableRenameColumn ( struct VTable *self, bool force,
+    const char *from, const char *to );
+
+/* ListPhysColumns
+ * ListSeededWritableColumns
+ *  avail: 2.4
+ */
+VDB_EXTERN rc_t CC VTableListPhysColumns ( struct VTable const *self, struct KNamelist **names );
+VDB_EXTERN rc_t CC VTableListSeededWritableColumns ( struct VTable *self,
+    struct KNamelist **names, struct KNamelist const *seed );
+
+
+/* HasStaticColumn
+ *  given a physical column name, report whether it exists
+ *  and is ( currently ) static
+ *  avail: 2.5
+ */
+VDB_EXTERN bool CC VTableHasStaticColumn ( struct VTable const *self, const char *name );
+
 
 /* VUntypedTableTest
  *  support for tables created before embedded schema
@@ -147,18 +182,41 @@ typedef bool ( CC * VUntypedTableTest )
  *  useful if table was opened using a later version of schema than
  *  was used for its creation.
  */
-rc_t VTableStoreSchema ( struct VTable *self );
+VDB_EXTERN rc_t VTableStoreSchema ( struct VTable *self );
 
 
 /*--------------------------------------------------------------------------
  * VCursor
  */
 
+
+/* CreateCursorView
+ *  creates a read-only cursor onto table
+ *  uses table schema as base
+ *  uses view described in viewspec as view
+ *
+ *  AVAILABILITY: version 2.3
+ *
+ *  for pre-vdb-2.3 tables, defaults to CreateCursorRead, ignoring
+ *  schema specification
+ *
+ *  "curs" [ OUT ] - return parameter for newly created cursor
+ *
+ *  "viewspec" [ IN ] - NUL terminated string describing the view schema
+ */
+VDB_EXTERN rc_t CC VTableCreateCursorView ( struct VTable const *self,
+    struct VCursor const **curs, const char *viewspec );
+
 /* PermitPostOpenAdd
  *  allows columns to be added to open cursor
  *  for write cursor, the effect lasts until the first row commit
  */
 VDB_EXTERN rc_t CC VCursorPermitPostOpenAdd ( struct VCursor const *self );
+/*  SuspendTriggers
+ *  blocks resolution of schema-based triggers
+ *
+ */
+VDB_EXTERN rc_t CC VCursorSuspendTriggers ( struct VCursor const *self );
 
 /*  VCursorGetSchema
  *  returns current schema of the open cursor
@@ -178,6 +236,8 @@ VDB_EXTERN rc_t CC VCursorPageIdRange ( struct VCursor const *self,
     uint32_t idx, int64_t id, int64_t *first, int64_t *last );
 
 
+VDB_EXTERN rc_t CC VCursorLinkedCursorGet(const struct VCursor *cself,const char *tbl, struct VCursor const **curs);
+VDB_EXTERN rc_t CC VCursorLinkedCursorSet(const struct VCursor *cself,const char *tbl, struct VCursor const *curs);
 
 
 /*--------------------------------------------------------------------------
diff --git a/interfaces/vdb/vdb.vschema b/interfaces/vdb/vdb.vschema
index 4d8f428..fa501c9 100644
--- a/interfaces/vdb/vdb.vschema
+++ b/interfaces/vdb/vdb.vschema
@@ -421,7 +421,7 @@ T [ * ] paste #1.0 ( T [ * ] in, ... )
 
 
 /* vec_sum
- *  compute the sum of all the elements of the input vector
+ *  compute the sum of all the elements of the row
  *
  *  "T" [ TYPE ] - base element type to be processed
  *
@@ -431,6 +431,17 @@ function < type T >
 T vec_sum #1.0 ( T [ * ] in )
     = vdb:vec_sum;
 
+/* vec_sum
+ *  compute the sum of all the elements of the input vector
+ *
+ *  "T" [ TYPE ] - base element type to be processed
+ *
+ *  "in" [ DATA ] - the input
+ */
+function < type T >
+T fixed_vec_sum #1.0 ( T [ * ] in )
+    = vdb:fixed_vec_sum;
+
 
 /* checksum
  *  compute a checksum ( hash ) of all of the input bytes
@@ -634,6 +645,21 @@ T delta_zip_encoding #1.0
         return zip < Z_RLE, Z_BEST_SPEED > ( dlt );
     }
 }
+physical < type T >
+T delta_average_zip_encoding #1.0
+{
+    decode
+    {
+        delta_averaged_fmt t = unzip ( @ );
+        return undelta_average ( t );
+    }
+
+    encode
+    {
+        delta_averaged_fmt t = delta_average ( @ );
+        return zip < Z_RLE, Z_BEST_SPEED > ( t );
+    }
+}
 
 /* bzip
  * bunzip
@@ -721,7 +747,7 @@ numeric_set strtonum #1.0 < * U32 radix > ( text_set str )
  *
  *  formatting rules differ somewhat from C sprintf:
  *
- *    '%' [ <flags> ] [ <field-width> ] [ ':' <index-range> ] [ '.' <precision> ] <storage-class>
+ *        '%' [ <flags> ] [ <field-width> ] [ '.' <precision> ] [ ':' <index> ] <storage-class>
  *
  *  where:
  *
@@ -739,22 +765,33 @@ numeric_set strtonum #1.0 < * U32 radix > ( text_set str )
  *        | '*'           : take field width from args
  *        ;
  *
- *    index-range
- *        = index
- *        | index '-' index
+ *    precision
+ *        = DECIMAL       : a base-10 numeral
+ *        | '*'           : take precision from args
+ *        |               : an empty precision means 0
  *        ;
  *
  *    index
- *        = DECIMAL       : a base-10 numeral
- *        | '$'           : last vector element
+ *        = idx           : a single, zero-based vector element
+ *        | idx '-' idx   : a fully-closed, zero-based interval
+ *        | idx '/' len   : a start index plus length
+ *        ;
+ *
+ *    idx
+ *        = DECIMAL       : an unsigned base-10 numeral
  *        | '*'           : take index from args
+ *        | '$'           : last element in cell
+ *        |               : an empty index means 0 or $
  *        ;
  *
- *    precision
+ *    len
  *        = DECIMAL       : a base-10 numeral
- *        | '*'           : take precision from args
+ *        | '*'           : take length from args
+ *        | '$'           : row-length of ( cell )
+ *        |               : an empty length means $
  *        ;
  *
+ *
  *    storage-class
  *        = 'd' | 'i'     : general decimal integer
  *        | 'u'           : decimal unsigned integer
@@ -769,10 +806,12 @@ numeric_set strtonum #1.0 < * U32 radix > ( text_set str )
  *        ;
  *
  *
- *  "fmt" [ CONST ] - constant format string
+ *  "fmt" [ CONST ] - constant format string, adhering to
+ *  the description above
  *
  *  "p1" [ DATA ] - first param
  *  this and any subsequent params must correspond to format
+ *  in type/position/number.
  */
 function
 text_set sprintf #1.0 < ascii fmt > ( any p1, ... )
diff --git a/interfaces/vfs/extern.h b/interfaces/vfs/extern.h
new file mode 100644
index 0000000..5b85276
--- /dev/null
+++ b/interfaces/vfs/extern.h
@@ -0,0 +1,42 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vfs_extern_
+#define _h_vfs_extern_
+
+#if ! defined EXPORT_LATCH && defined _LIBRARY
+#define VFS_EXTERN LIB_EXPORT
+#define VFS_EXTERN_DATA extern LIB_EXPORT
+#define EXPORT_LATCH 1
+#else
+#define VFS_EXTERN LIB_IMPORT
+#endif
+
+#ifndef _h_klib_extern_
+#include <klib/extern.h>
+#endif
+
+#endif /* _h_vfs_extern_ */
diff --git a/interfaces/vfs/manager-priv.h b/interfaces/vfs/manager-priv.h
new file mode 100644
index 0000000..6039528
--- /dev/null
+++ b/interfaces/vfs/manager-priv.h
@@ -0,0 +1,115 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_vfs_manager_priv_
+#define _h_vfs_manager_priv_
+
+#ifndef _h_vfs_extern_
+#include <vfs/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+
+#ifndef _h_kfs_defs_
+#include <kfs/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ENV_KRYPTO_PWFILE       "VDB_PWFILE"
+#define KFG_KRYPTO_PWFILE         "krypto/pwfile"
+#define KFG_KRYPTO_PWFD         "krypto/pwfd"
+
+
+struct VFSManager;
+struct KDirectory;
+struct KFile;
+struct VPath;
+struct SRAPath;
+
+
+/* this resembles the interface functions in manager.h
+ * but allows the use of a KDirectory for the base instead of a VPath
+ * of a directory
+ *
+ * this is expected to be more temporary if this code base continues.
+ * much longer
+ */
+VFS_EXTERN rc_t CC VFSManagerResolvePathRelativeDir (const struct VFSManager * self,
+                                                     uint32_t flags,
+                                                     const struct  KDirectory * base_dir,
+                                                     const struct  VPath * in_path,
+                                                     struct VPath ** out_path);
+
+
+
+/* bad interface.  Bad! Bad!
+ * but needed to hack VFS into KDB
+ */
+VFS_EXTERN rc_t CC VFSManagerOpenFileReadDirectoryRelative (const struct VFSManager *self, 
+    const struct KDirectory * dir, struct KFile const **f, const struct VPath * path);
+
+VFS_EXTERN rc_t CC VFSManagerOpenFileReadDirectoryRelativeDecrypt (const struct VFSManager *self, 
+    const struct KDirectory * dir, struct KFile const **f, const struct VPath * path);
+
+VFS_EXTERN rc_t CC VFSManagerOpenDirectoryReadDirectoryRelative ( const struct VFSManager *self,
+    struct KDirectory const * dir, struct KDirectory const **d, const struct VPath * path );
+
+VFS_EXTERN rc_t CC VFSManagerOpenDirectoryReadDirectoryRelativeDecrypt ( const struct VFSManager *self,
+    struct KDirectory const * dir, struct KDirectory const **d, const struct VPath * path );
+
+VFS_EXTERN rc_t CC VFSManagerOpenDirectoryUpdateDirectoryRelative ( const struct VFSManager *self,
+    struct KDirectory const * dir, struct KDirectory **d, const struct VPath * path );
+
+VFS_EXTERN rc_t CC VPathMakeDirectoryRelative ( struct VPath ** new_path,
+    struct KDirectory const * dir, const char * posix_path, struct SRAPath * srapathmgr);
+
+
+VFS_EXTERN rc_t CC VFSManagerOpenFileReadDecrypt (const struct VFSManager *self,
+                                                  struct KFile const **f,
+                                                  const struct VPath * path);
+
+
+/*
+ * quick hack for vdb-validate for immediate testing release
+ */
+VFS_EXTERN rc_t CC VFSManagerWGAValidateHack (const struct VFSManager * self, 
+                                              const struct KFile * file,
+                                              const char * path); /* we'll move this to a vpath */
+
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_vfs_manager_priv_ */
diff --git a/interfaces/vfs/manager.h b/interfaces/vfs/manager.h
new file mode 100644
index 0000000..5c89823
--- /dev/null
+++ b/interfaces/vfs/manager.h
@@ -0,0 +1,306 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_vfs_manager_
+#define _h_vfs_manager_
+
+#ifndef _h_vfs_extern_
+#include <vfs/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+
+#ifndef _h_kfs_defs_
+#include <kfs/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KFile;
+struct VPath;
+struct SRAPath;
+struct VResolver;
+struct KDirectory;
+struct VPath;
+
+/* temporary */
+
+
+/*--------------------------------------------------------------------------
+ * VFSManager
+ */
+typedef struct VFSManager VFSManager;
+
+#define VFS_KRYPTO_PASSWORD_MAX_SIZE 4096
+
+
+/* AddRef
+ * Release
+ *  ignores NULL references
+ */
+VFS_EXTERN rc_t CC VFSManagerAddRef ( const VFSManager *self );
+VFS_EXTERN rc_t CC VFSManagerRelease ( const VFSManager *self );
+
+/* OpenFileRead
+ *  opens an existing file with read-only access
+ *
+ *  "f" [ OUT ] - return parameter for newly opened file
+ *
+ *  "path" [ IN ] VPath representing the path, URL or URN of the desired file
+ */
+VFS_EXTERN rc_t CC VFSManagerOpenFileRead (const VFSManager *self, 
+                                           struct KFile const **f,
+                                           const struct VPath * path);
+
+VFS_EXTERN rc_t CC VFSManagerOpenDirectoryRead ( const VFSManager *self,
+    struct KDirectory const **d, const struct VPath * path );
+
+/* it forces decryption to be used for kdb */
+VFS_EXTERN rc_t CC VFSManagerOpenDirectoryReadDecrypt ( const VFSManager *self,
+    struct KDirectory const **d, const struct VPath * path );
+
+VFS_EXTERN rc_t CC VFSManagerOpenDirectoryUpdate ( const VFSManager *self,
+    struct KDirectory **d, const struct VPath * path );
+
+
+/* OpenFileWrite
+ *  opens an existing file with write access
+ *
+ *  "f" [ OUT ] - return parameter for newly opened file
+ *
+ *  "update" [ IN ] - if true, open in read/write mode
+ *  otherwise, open in write-only mode
+ *
+ *  "path" [ IN ] VPath representing the path, URL or URN of the desired file
+ */
+VFS_EXTERN rc_t CC VFSManagerOpenFileWrite (const VFSManager *self,
+                                            struct KFile **f,
+                                            bool update,
+                                            const struct VPath * path);
+
+/* CreateFile
+ *  opens a file with write access
+ *
+ *  "f" [ OUT ] - return parameter for newly opened file
+ *
+ *  "update" [ IN ] - if true, open in read/write mode
+ *  otherwise, open in write-only mode
+ *
+ *  "access" [ IN ] - standard Unix access mode, e.g. 0664
+ *
+ *  "mode" [ IN ] - a creation mode ( see explanation above ).
+ *
+ *  "path" [ IN ] VPath representing the path, URL or URN of the desired file
+ */
+VFS_EXTERN rc_t CC VFSManagerCreateFile (const VFSManager *self, 
+                                         struct KFile **f,
+                                         bool update, uint32_t access,
+                                         KCreateMode mode,
+                                         const struct VPath * path );
+
+
+/* Remove
+ *  remove an accessible object from its directory
+ *
+ *  "force" [ IN ] - if true and target is a directory,
+ *  remove recursively
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target object
+ */
+VFS_EXTERN rc_t CC VFSManagerRemove (const VFSManager *self, bool force,
+                                     const struct VPath * path );
+
+
+/* Make
+ */
+VFS_EXTERN rc_t CC VFSManagerMake ( VFSManager ** pmanager );
+
+
+/* GetConfigPWFile
+ */
+VFS_EXTERN rc_t CC VFSManagerGetConfigPWFile (const VFSManager * self, 
+                                              char * b, size_t bz, size_t * pz);
+
+
+/* GetCWD
+ */
+VFS_EXTERN rc_t CC VFSManagerGetCWD (const VFSManager * self, struct KDirectory ** cwd);
+
+/* GetSRAPath
+ *  why aren't any of these functions properly commented?
+ */
+VFS_EXTERN rc_t CC VFSManagerGetSRAPath ( const VFSManager * self, struct SRAPath ** pmgr );
+
+VFS_EXTERN rc_t CC VFSManagerGetResolver ( const VFSManager * self, struct VResolver ** resolver );
+
+
+VFS_EXTERN rc_t CC VFSManagerGetKryptoPassword (const VFSManager * self, char * new_password, size_t max_size, size_t * size);
+
+#if 0 /* obsoleted? */
+VFS_EXTERN rc_t CC VFSManagerSetKryptoPassword (const VFSManager * self, char * new_password, size_t size);
+VFS_EXTERN rc_t CC VFSManagerResetKryptoPassword (const VFSManager * self, 
+                                                  char * new_password, size_t size,
+                                                  char * new_password, size_t size);
+#else
+
+/*
+  NULL value for self
+  RC (rcVFS, rcEncryptionKey, rcUpdating, rcSelf, rcNull);
+
+  NULL value for password or 0 value for size
+  RC (rcVFS, rcEncryptionKey, rcUpdating, rcParam, rcNull);
+
+  size greater than VFS_KRYPTO_PASSWORD_MAX_SIZE
+  RC (rcVFS, rcEncryptionKey, rcUpdating, rcSize, rcExcessive);
+
+  illegal CR or LF (NL) in the password
+  RC (rcVFS, rcEncryptionKey, rcUpdating, rcEncryptionKey, rcInvalid);
+
+  path/file name for password too long for function as written
+  RC (rcVFS, rcEncryptionKey, rcUpdating, rcPath, rcExcessive);
+
+  existing password path/file name is not a file
+  RC (rcVFS, rcEncryptionKey, rcUpdating, rcPath, rcIncorrect);
+
+  unknown file type for configured path/file name
+  RC (rcVFS, rcEncryptionKey, rcUpdating, rcPath, rcCorrupt);
+
+  incomplete writes to temporary password file
+  RC (rcVFS, rcEncryptionKey, rcWriting, rcFile, rcInsufficient);
+
+  other errors from KFS and KLIB
+*/
+
+/* pwd_dir[pwd_dir_size] -
+    Output parameters for path to directory containing the password file.
+    pwd_dir is not updated if pwd_dir == NULL or pwd_dir_size == 0
+                  or pwd_dir_size is insufficient to copy the path
+ */
+VFS_EXTERN rc_t CC VFSManagerUpdateKryptoPassword (const VFSManager * self, 
+                                                   const char * password,
+                                                   size_t size,
+                                                   char * pwd_dir,
+                                                   size_t pwd_dir_size);
+
+#endif
+
+
+VFS_EXTERN rc_t CC VFSManagerResolveSpec ( const VFSManager * self,
+                                           const char * spec,
+                                           struct VPath ** path_to_build,
+                                           const struct KFile ** remote_file,
+                                           const struct VPath ** local_cache,
+                                           bool resolve_acc );
+
+struct KDirectory;
+
+VFS_EXTERN rc_t CC VFSManagerResolveSpecIntoDir ( const VFSManager * self,
+                                                  const char * spec,
+                                                  const struct KDirectory ** dir,
+                                                  bool resolve_acc );
+
+/*--------------------------------------------------------------------------
+ * KConfig
+ *  placing some KConfig code that relies upon VFS here
+ */
+struct KConfig;
+struct KConfigNode;
+
+
+/* ReadVPath
+ *  read a VPath node value
+ *
+ * self [ IN ] - KConfig object
+ * path [ IN ] - path to the node
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+VFS_EXTERN rc_t CC KConfigReadVPath ( struct KConfig const* self, const char* path, struct VPath** result );
+
+/* ReadVPath
+ *  read a VPath node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+VFS_EXTERN rc_t CC KConfigNodeReadVPath ( struct KConfigNode const *self, struct VPath** result );
+
+
+
+/* ResolvePath
+ *
+ * take a VPath and resolve to a final form apropriate for KDB
+ *
+ * that is take a relative path and resolve it against the CWD
+ * or take an accession and resolve into the local or remote 
+ * VResolver file based on config. It is just a single resolution percall
+ *
+ * flags
+ *      can disable all Accession resolution
+ *      can let VPath With no scheme be treated as a possible accession
+ *
+ */
+
+/* bit values for flags */
+    /* allow no local accession resolution */
+#define vfsmgr_rflag_no_acc_local (1<<0)
+    /* allow no remote accession resolution */
+#define vfsmgr_rflag_no_acc_remote (1<<1)
+    /* never do VResolver Accession resolution */
+#define vfsmgr_rflag_no_acc  (vfsmgr_rflag_no_acc_local|vfsmgr_rflag_no_acc_remote)
+    /* use VResolver Accession resolution for simple names with no scheme */
+
+#define vfsmgr_rflag_kdb_acc (1<<2)
+    /* over ridden by vfsmgr_rflag_no_acc */
+
+
+VFS_EXTERN rc_t CC VFSManagerResolvePath (const VFSManager * self,
+                                          uint32_t flags,
+                                          const struct  VPath * in_path,
+                                          struct VPath ** out_path);
+
+VFS_EXTERN rc_t CC VFSManagerResolvePathRelative (const VFSManager * self,
+                                                  uint32_t flags,
+                                                  const struct  VPath * base_path,
+                                                  const struct  VPath * in_path,
+                                                  struct VPath ** out_path);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfs_manager_ */
diff --git a/interfaces/vfs/path-priv.h b/interfaces/vfs/path-priv.h
new file mode 100644
index 0000000..98fe948
--- /dev/null
+++ b/interfaces/vfs/path-priv.h
@@ -0,0 +1,149 @@
+/*===========================================================================
+*
+*                            Public Domain Notice
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vfs_path_priv_
+#define _h_vfs_path_priv_
+
+#ifndef _h_vfs_extern_
+#include <vfs/extern.h>
+#endif
+
+#ifndef _h_vfs_path_
+#include <vfs/path.h>
+#endif
+
+#include <stdarg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+typedef int32_t VPUri_t;
+enum eVPUri_t
+{
+    vpuri_invalid = -1,
+    vpuri_none, 
+    vpuri_not_supported,
+    vpuri_ncbi_file,
+    vpuri_ncbi_vfs = vpuri_ncbi_file,
+#if SUPPORT_FILE_URL
+    vpuri_file,
+#endif
+    vpuri_ncbi_acc,
+    vpuri_http,
+    vpuri_ftp,
+    vpuri_ncbi_legrefseq,
+    vpuri_count
+};
+*/
+
+#define NCBI_FILE_SCHEME       "ncbi-file"
+#define NCBI_ACCESSION_SCHEME  "ncbi-acc"
+#define HTTP_SCHEME            "http"
+#define FTP_SCHEME             "ftp"
+#define NCBI_LEGREFSEQ_SCHEME  "x-ncbi-legrefseq"
+
+VFS_EXTERN VPUri_t VPathGetUri_t (const VPath * self);
+
+
+
+
+/* options for a VPath possibly obtained from a query string on an URI */
+typedef uint32_t VPOption_t;
+enum eVPOption_t
+{
+    vpopt_encrypted,
+    vpopt_pwpath,
+    vpopt_pwfd,
+    vpopt_readgroup,
+    vpopt_temporary_pw_hack,
+    vpopt_vdb_ctx,
+    vpopt_gap_ticket, 
+    vpopt_count
+};
+
+
+/* =====
+ * Much of what follows is expected to move into the interface vfs/path.h
+ * once it becomes supported.
+ */
+
+/* MakeFmt
+ *  make a path object from a format string plus arguments
+ *
+ *  "new_path" [ OUT ] - a reference to the new object.
+ *
+ *  "fmt" [ IN ] and "args" [ IN ] - arguments to string_printf
+ *  ( see <klib/text.h> ) to build a NUL-terminated string
+ *  that conforms with the rules for "posix_path"
+ *
+ * NB - SECURITY RISK IF USED DIRECTLY FROM EXTERNAL STRINGS.
+ *      ALSO, FMT IS **NOT** PRINTF COMPATIBLE - see string_printf.
+ */
+VFS_EXTERN rc_t CC VPathMakeFmt ( VPath ** new_path, const char * fmt, ... );
+VFS_EXTERN rc_t CC VPathMakeVFmt ( VPath ** new_path, const char * fmt, va_list args );
+
+
+/* Bill - I don't know that we're ready to export these yet */
+VFS_EXTERN rc_t CC VPathMakeRelative ( VPath ** new_path, const VPath * base_path,
+                                       const char * relative_path );
+VFS_EXTERN rc_t CC VPathMakeRelativeFmt ( VPath ** new_path, const VPath * base_path,
+                                          const char * fmt, ... );
+VFS_EXTERN rc_t CC VPathVMakeRelativeFmt ( VPath ** new_path, const VPath * base_path,
+                                           const char * fmt, va_list args );
+VFS_EXTERN rc_t CC VPathMakeCurrentPath ( VPath ** new_path );
+
+VFS_EXTERN rc_t CC VPathMakeURI ( VPath ** new_path, const char * uri );
+
+
+VFS_EXTERN rc_t CC VPathReadPath ( const VPath * self, char * buffer,
+                                  size_t buffer_size, size_t * num_read);
+
+VFS_EXTERN rc_t CC VPathOption ( const VPath * self, VPOption_t option,
+                                char * buffer, size_t buffer_size,
+                                size_t * num_read);
+
+/*
+ * copy the path string out of a KPath object.
+ * if buffer is too short an RC (rcBuffer, rcInsufficient) is returned
+ * and nothing is copied.
+ * if there is a room the NUL is copied as well
+ */
+VFS_EXTERN rc_t CC VPathReadPath ( const VPath * self, char * buffer,
+                                  size_t buffer_size, size_t * num_read);
+
+
+/* get current working directory */
+VFS_EXTERN rc_t CC VPathGetCWD (char * buffer, size_t buffer_size);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_vfs_path_priv_ */
diff --git a/interfaces/vfs/path.h b/interfaces/vfs/path.h
new file mode 100644
index 0000000..9a1df57
--- /dev/null
+++ b/interfaces/vfs/path.h
@@ -0,0 +1,289 @@
+/*===========================================================================
+*
+*                            Public Domain Notice
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vfs_path_
+#define _h_vfs_path_
+
+#ifndef SUPPORT_FILE_URL
+#define SUPPORT_FILE_URL 1
+#endif
+
+#ifndef _h_vfs_extern_
+#include <vfs/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct String;
+
+
+/*--------------------------------------------------------------------------
+ *
+ * The ABNF form described in RFC5234 will be used to define URLS and paths
+ * with some handwaving instead of complete character definitions for case 
+ * insensitivity.  CORE definitions from RFC5234 will be used again handwaving
+ * case insensitivity.
+ *
+ * --------------------
+ *
+ * URL for a VPath
+ *
+ *  as per RFC 3986, an URI consists of:
+ *
+ *    URI           = scheme ":" heir-part [ "?" query ] [ "#" fragment ]
+ *
+ *  We will support however something intbetween an URI and an IRI in that we'll
+ *  all UTF-8 rather than limit certain characters to ASCII.
+ *
+ *  For the NCBI path  URL:  The hier-part is intended to be compatible with the 
+ *                    "file:" scheme  Authority on any of the Unix-like operating
+ *                    systems must either be empty or "localhost".  For Windows
+ *                    it must  be a host that can be used if the "file" url is
+ *                    translated into a UNC style Windows path.  Also in a
+ *                    Windows vfs: URL a single colon ':' will be allowed only at
+ *                    the end of a single character rive letter for the first
+ *                    sub-part of the path.
+ *
+ *    scheme        = "ncbi-file" ; ( case insensitive )
+ *
+ *    hier-part     = "//" authority path-abempty
+ *                  / path-absolute
+ *                  / path-relative
+ *                  / path-empty
+ *
+ * by RFC 3986 authority is
+ *    authority     = [ userinfo "@" ] host [ ":" port]
+ * but at this point we only recognize
+ *    authority     = host
+ *
+ * by RFC 3986 host is
+ *    host          = IP-literal / IPv4address / reg-name
+ * but at this point we only recognize
+ *    host          = reg-name
+ *
+ *    reg-name      = *( unreserved / pct-encoded / sub-delims )
+ *
+ *    path          = path-abempty
+ *                  / path-absolute
+ *                  / path-noscheme
+ *                  / path-rootless
+ *                  / path-empty
+ *
+ *    path-abempty  = * ( "/" segment )
+ *
+ *    path-absolute = "/" segment-nz *( "/" segment )
+ *
+ *    path-noscheme = segment-nz-nc *( "/" segment )
+ *
+ *    path-rootless = segment-nz *( "/" segment )
+ *
+ *    path-empty    = ""
+ *
+ *    segment       = *pchar       ; can be empty
+ *    segment-nz    = 1*pchar      ; can't be empty
+ *    segment-nz-nc = 1*pchar-nz   ; can't be empty
+ *
+ *    pchar         = ":" / pchar-nc
+ *
+ *    pchar-nc      = unreserved / pct-encoded / sub-delims ? "@"
+ *
+ *    pct-encoded   = "%" HEXDIG HEXDIG ; hex digits are 0-9, a-f or A-F
+ *
+ *    authority   = "localhost" / host-name ; the host name is an O/S specific 
+ *                                          ; name of a remote host 
+ *
+ *    query       = query_entry [ * ( "&" query_entry ) ]
+ *
+ *    query_entry = "encrypt" / "enc" / ( "pwfile=" hier-part ) / ( "pwfd=" fd )
+ *
+ *    fd          = 1* DIGIT
+ *
+ *    unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~" / UTF-8
+ *
+ *    reserved    = gen-delims / subdelims
+ *
+ *    gen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"
+ *
+ *    sub-delims  = "!" / "$" / "&" / "'" / "(" / ")" / "*"
+ *                / "+" / "," / ";" / "="
+ *
+ * Handwaving on the UTF-8.  We'll accept it rather than requiring percent encoding
+ * in most cases.
+
+ * Examples:
+ *         "ncbi-file://home/my-name/data-files"
+ *         "ncbi-file://win-server/archive/secure/read12345?encrypted"
+ *         "ncbi-file:///c:/scanned-data/0001/file.sra?enc?pwd-file=c:/Users/JamesMcCoy/ncbi.pwd"
+ *
+ *  We allow an implied scheme of "vfs" if none present.
+ *  'host-name' is partially implemented for Windows.  Not currently for any the
+ *  of the supported Unix systems.  We do not support IP addresses instead of 
+ *  host names.
+ *
+ *  'path' can be either absolute or relative and must be posix style as per 
+ *  RFC 3986 and matches the "file" scheme.
+ *
+ *  'fragment' is not yet implemented or defined.
+ *
+ *  'fd' is a system specific file handle.  Not yet supported on Windows.
+ *
+ * --------------------
+ *
+ * VFS posix_path representation:
+ *
+ * The internal representation of a path for VFS resembles very closely the
+ * POSIX pathname crossed with the Windows UNC path.  Only the Unix "/" 
+ * separator is allowed not the "\" for paths.
+ *
+ * posix-path     = full-path / relative-path
+ *
+ * full-path      = ["//" host] "/" [ directory-path "/" ] resource
+ *
+ * relative-path  = [ directory-path "/" ] resource
+ *
+ * directory-path = resource [ "/" directory-path ]
+ *
+ * resource       = string ; (UTF-8 O/S specific name for a directory or a file)
+ *
+ * host           = string ; (UTF-8 O/S specific name for the local or remote host)
+ *
+ * For a host "localhost" is a synonym for the current host.
+ * The "//host" is not guaranteed to work for all systems except "//localhost"
+ *
+ * The resource "." is assumed to mean the local directory and will be stripped
+ * when a path is made canonical.
+ *
+ * The resource ".." is assumed to mean the containing directory and when made 
+ * canonical it will be left in at the begining for relative paths or removed along 
+ * with the preceding resource name.
+ *
+ * For Windows the device is handled in a unique way with some potential for ambiguity.
+ * The UNC approach for a named drive "C:" becomes "/c".  So "C:\" becomes "/c/".
+ *
+ * In the future the complex approach from the "file:" URL should be adopted 
+ * with the ":" allowed only in the first directory name in a path.  RFC 3986 
+ * notes though that this complex approach puts some five variants into the ABNF
+ * to describe the path portion of an URL.
+ */
+
+typedef struct VPath VPath;
+
+/* AddRef
+ * Release
+ *  ignores NULL references
+ */
+VFS_EXTERN rc_t CC VPathAddRef ( const VPath *self );
+VFS_EXTERN rc_t CC VPathRelease ( const VPath *self );
+
+
+/* Make
+ *  make a path object from a POSIX path string
+ *  or an URL using the vfs scheme.  THe file scheme might be supported in the
+ *  future perhaps with other suitable schemes as well.
+ *
+ *  "new_path" [ OUT ] - a reference to the new object.
+ *
+ *  "posix_path" [ IN ] - a UTF-8, NUL-terminated POSIX-compliant path
+ *  or a fully formed "vfs" or "file" url.
+ */
+VFS_EXTERN rc_t CC VPathMake ( VPath ** new_path, const char * posix_path);
+
+
+/* MakeSysPath
+ *  make a path object from an external, OS-specific path string
+ *  or a listed vfs URL.
+ *
+ *  "new_path" [ OUT ] - a reference to the new object.
+ *
+ *  "sys_path" [ IN ] - a UTF-8, NUL-terminated, O/S specific file path
+ *   with an optional query part for encryption.
+ *   The path portion must be legal characters in path names for the O/S in use.
+ *
+ * NB - see <klib/text.h> for functions to convert between character sets.
+ */
+VFS_EXTERN rc_t CC VPathMakeSysPath ( VPath ** new_path, const char * sys_path );
+
+
+/* ReadPath
+ *  returns the hierarchical part of the VPath
+ */
+VFS_EXTERN rc_t CC VPathReadPath ( const VPath * self,
+    char * buffer, size_t buffer_size, size_t * num_read );
+
+/* GetPath
+ *  returns an allocation of hierarchical part of the VPath ( ? )
+ */
+VFS_EXTERN rc_t CC VPathGetPath ( const VPath * self, struct String const ** path );
+
+
+/* MakeString
+ *  convert a VPath into a String
+ *  create a String that is the "URI" representation of VPath.
+ *  If the incoming string had no scheme, this will not as well
+ */
+VFS_EXTERN rc_t CC VPathMakeString ( const VPath * self, struct String const ** uri );
+
+
+/* GetScheme
+ *  returns the scheme as an allocation or as an enum
+ */
+typedef int32_t VPUri_t;
+enum eVPUri_t
+{
+    vpuri_invalid = -1,
+    vpuri_none, 
+    vpuri_not_supported,
+    vpuri_ncbi_file,
+    vpuri_ncbi_vfs = vpuri_ncbi_file,
+#if SUPPORT_FILE_URL
+    vpuri_file,
+#endif
+    vpuri_ncbi_acc,
+    vpuri_http,
+    vpuri_ftp,
+    vpuri_ncbi_legrefseq,
+    vpuri_count
+};
+
+VFS_EXTERN rc_t CC VPathGetScheme ( const VPath * self, struct String const ** scheme );
+VFS_EXTERN rc_t CC VPathGetScheme_t ( const VPath * self, VPUri_t * uri_type );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_vfs_path_ */
diff --git a/interfaces/vfs/resolver.h b/interfaces/vfs/resolver.h
new file mode 100644
index 0000000..76c5ffb
--- /dev/null
+++ b/interfaces/vfs/resolver.h
@@ -0,0 +1,206 @@
+/*===========================================================================
+*
+*                            Public Domain Notice
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vfs_resolver_
+#define _h_vfs_resolver_
+
+#ifndef _h_vfs_extern_
+#include <vfs/extern.h>
+#endif
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KFile;
+struct VPath;
+struct KConfig;
+struct VFSManager;
+
+
+/*--------------------------------------------------------------------------
+ * VResolver
+ */
+typedef struct VResolver VResolver;
+
+
+/* Make
+ *  ask the VFS manager to make a resolver
+ */
+VFS_EXTERN rc_t CC VFSManagerMakeResolver ( struct VFSManager const * self,
+    VResolver ** new_resolver, struct KConfig const * cfg );
+
+
+/* AddRef
+ * Release
+ */
+VFS_EXTERN rc_t CC VResolverAddRef ( const VResolver * self );
+VFS_EXTERN rc_t CC VResolverRelease ( const VResolver * self );
+
+
+/* Local
+ *  Find an existing local file/directory that is named by the accession.
+ *  rcState of rcNotFound means it does not exist.
+ *
+ *  other rc code for failure are possible.
+ *
+ *  Accession must be an ncbi-acc scheme or a simple name with no 
+ *  directory paths.
+ */
+VFS_EXTERN rc_t CC VResolverLocal ( const VResolver * self,
+    struct VPath const * accession, struct VPath const ** path );
+
+
+/* Remote
+ *  Find an existing remote file that is named by the accession.
+ *
+ *  rcState of rcNotFound means it did not exist and can not be 
+ *  downloaded. Probably a bad accession name.
+ *
+ *  Need a specific rc for no network configured.
+ *  Need a specific rc for network access permitted.
+ *
+ *  Other rc code for failure are possible.
+ *
+ *  Accession must be an ncbi-acc scheme or a simple name with no 
+ *  directory paths.
+ *
+ *  "opt_file_rtn" [ OUT, NULL OKAY ] - optional return parameter for
+ *   any KFile that may be opened as a result of resolution. This can
+ *   happen if resolving an accession involves opening a URL to a
+ *   remote server, for example, in which case the KFile can be returned.
+ */
+VFS_EXTERN rc_t CC VResolverRemote ( const VResolver * self,
+    struct VPath const * accession, struct VPath const ** path,
+    struct KFile const ** opt_file_rtn );
+
+
+/* Cache
+ *  Find a cache directory that might or might not contain a partially
+ *  downloaded file.
+ *
+ *  Accession must be an ncbi-acc scheme, an http url or a simple name with no 
+ *  directory paths. All three should return the same directory URL as a VPath. (?)
+ *  Or should it be a directory or a file url depending upon finding a partial
+ *  download? This would require co-ordination with all download mechanisms that
+ *  we permit.
+ *
+ *  With refseq holding wgs objects we have a case were the downloaded file is not
+ *  named the same as the original accession as the file archive you want is a
+ *  container for other files.
+ *
+ *  Find local will give a path that has a special scheme in these cases. 
+ *  Find remote will give the url for the container that contains the accession
+ *  so using the returned VPath from resolve remote is better than the original
+ *  accession in this one case.  I think...
+ */
+VFS_EXTERN rc_t CC VResolverCache ( const VResolver * self,
+    struct VPath const * url, struct VPath const ** path, uint64_t file_size );
+
+
+/* EnableState
+ *  modifies how the various properties are interpreted
+ */
+typedef uint32_t VResolverEnableState;
+enum
+{
+    vrUseConfig = 0,            /* take enable/disable state from KConfig */
+    vrAlwaysEnable = 1,         /* always enable, regardless of KConfig   */
+    vrAlwaysDisable = 2         /* always disable, regardless of KConfig  */
+};
+
+
+/* LocalEnable
+ *  modify settings for using local repositories,
+ *  meaning site, user-public and user-protected.
+ *
+ *  "enable" [ IN ] - enable or disable local access,
+ *  or follow settings in KConfig
+ *
+ *  returns the previous state of "remote-enabled" property
+ *
+ * NB - in VDB-2, the state is associated with library code
+ *  shared libraries in separate closures will have separate
+ *  state. this can only occur if dynamic ( manual ) loading of
+ *  shared libraries is used, and will not occur with normal
+ *  usage. in VDB-3 the state will be stored with the process,
+ *  not the library.
+ */
+VFS_EXTERN VResolverEnableState CC VResolveLocalEnable ( const VResolver * self,
+    VResolverEnableState enable );
+
+
+/* RemoteEnable
+ *  modify settings for using remote repositories
+ *
+ *  "enable" [ IN ] - enable or disable remote access,
+ *  or follow settings in KConfig
+ *
+ *  returns the previous state of "remote-enabled" property
+ *
+ * NB - in VDB-2, the state is associated with library code
+ *  shared libraries in separate closures will have separate
+ *  state. this can only occur if dynamic ( manual ) loading of
+ *  shared libraries is used, and will not occur with normal
+ *  usage. in VDB-3 the state will be stored with the process,
+ *  not the library.
+ */
+VFS_EXTERN VResolverEnableState CC VResolverRemoteEnable ( const VResolver * self,
+    VResolverEnableState enable );
+
+
+/* CacheEnable
+ *  modify settings for caching files in user repositories
+ *
+ *  "enable" [ IN ] - enable or disable user repository cache,
+ *  or follow settings in KConfig
+ *
+ *  returns the previous state of "cache-enabled" property
+ *
+ * NB - in VDB-2, the state is associated with library code
+ *  shared libraries in separate closures will have separate
+ *  state. this can only occur if dynamic ( manual ) loading of
+ *  shared libraries is used, and will not occur with normal
+ *  usage. in VDB-3 the state will be stored with the process,
+ *  not the library.
+ */
+VFS_EXTERN VResolverEnableState CC VResolverCacheEnable ( const VResolver * self,
+    VResolverEnableState enable );
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_vfs_resolver_ */
diff --git a/libs/Makefile b/libs/Makefile
index 18d43d4..2840672 100644
--- a/libs/Makefile
+++ b/libs/Makefile
@@ -36,8 +36,11 @@ SUBDIRS = \
 	klib \
 	kproc \
 	kfs \
+	kns \
 	kxml \
 	kfg \
+	krypto \
+	vfs \
 	kapp \
 	kdb \
 	vdb \
@@ -46,7 +49,10 @@ SUBDIRS = \
 	sra \
 	sraxf \
 	align \
-	axf
+	axf \
+	wgsxf \
+	ktst \
+	loader
 
 default: $(SUBDIRS)
 
@@ -104,6 +110,17 @@ $(SUBDIRS_TAG):
 
 .PHONY: tag $(SUBDIRS_TAG)
 
+#-------------------------------------------------------------------------------
+# runtests
+#
+SUBDIRS_RUNTESTS = $(addsuffix _runtests, kfg vxf)
+
+runtests: std $(SUBDIRS_RUNTESTS)
+
+$(SUBDIRS_RUNTESTS):
+	@ $(MAKE) -C $(subst _runtests,,$@) runtests
+
+.PHONY: runtests $(SUBDIRS_RUNTESTS)
 
 #-------------------------------------------------------------------------------
 # pass-through
diff --git a/libs/align/Makefile b/libs/align/Makefile
index 26aca1b..22ee629 100644
--- a/libs/align/Makefile
+++ b/libs/align/Makefile
@@ -72,6 +72,14 @@ clean: stdclean
 
 .PHONY: clean
 
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: \
+	$(addsuffix _tag,$(ALL_LIBS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_LIBS))
+
 
 #-------------------------------------------------------------------------------
 # libncbi-bam
@@ -85,15 +93,19 @@ BAM_OBJ = \
 	$(addsuffix .$(LOBX),$(BAM_SRC))
 
 BAM_LIB = \
+	-lvfs \
 	-lkfs \
 	-lklib \
 	-lz
 
 $(ILIBDIR)/libncbi-bam.$(SHLX): $(BAM_OBJ)
-	$(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(BAM_LIB)
+	$(LD) --dlib -o $@ $^ $(BAM_LIB)
 
 $(ILIBDIR)/libncbi-bam.$(LIBX): $(BAM_OBJ)
-	$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(BAM_LIB)
+	$(LD) --slib -o $@ $^ $(BAM_LIB)
+
+libncbi-bam_tag:
+	@ $(TOP)/build/tag-module.sh $(MODULE) libncbi-bam $(BAM_OBJ)
 
 
 #-------------------------------------------------------------------------------
@@ -109,7 +121,9 @@ ALIGN_ACCESS_OBJ = \
 
 ALIGN_ACCESS_LIB = \
 	-sncbi-bam \
+	-lvfs \
 	-lkfs \
+	-dkproc \
 	-lklib \
 	-lz
 
@@ -119,6 +133,8 @@ $(LIBDIR)/libalign-access.$(SHLX): $(ALIGN_ACCESS_OBJ)
 $(LIBDIR)/libalign-access.$(LIBX): $(ALIGN_ACCESS_OBJ)
 	$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(ALIGN_ACCESS_LIB)
 
+libalign-access_tag:
+	@ $(TOP)/build/tag-module.sh $(MODULE) libalign-access $(ALIGN_ACCESS_OBJ)
 
 #-------------------------------------------------------------------------------
 # align-reader
@@ -126,9 +142,17 @@ $(LIBDIR)/libalign-access.$(LIBX): $(ALIGN_ACCESS_OBJ)
 $(LIBDIR)/libalign-reader: $(addprefix $(LIBDIR)/libalign-reader.,$(LIBEXT))
 
 ALIGN_READER_SRC = \
+	align_mgr \
+	al_iterator \
+	ref_iterator \
+	pl_iterator \
+	dna-reverse-cmpl \
+	reference-cmn \
 	reader-cmn \
 	reader-refseq \
-	refseq-mgr
+	reference \
+	refseq-mgr \
+	quality-quantizer
 
 ALIGN_READER_OBJ = \
 	$(addsuffix .$(LOBX),$(ALIGN_READER_SRC))
@@ -147,14 +171,18 @@ $(LIBDIR)/libalign-reader.$(SHLX): $(ALIGN_READER_OBJ)
 $(LIBDIR)/libalign-reader.$(LIBX): $(ALIGN_READER_OBJ)
 	$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(ALIGN_READER_LIB)
 
+libalign-reader_tag:
+	@ $(TOP)/build/tag-module.sh $(MODULE) libalign-reader $(ALIGN_READER_OBJ)
 
 #-------------------------------------------------------------------------------
 # align-writer
 #
-$(ILIBDIR)/libalign-writer: $(addprefix $(ILIBDIR)/libalign-writer.,$(ILIBEXT))
+$(ILIBDIR)/libalign-writer: $(addprefix $(ILIBDIR)/libalign-writer.,$(LIBX))
 
 ALIGN_WRITER_SRC = \
+    dna-reverse-cmpl \
 	reader-cmn \
+	reference-cmn \
 	reader-refseq \
 	refseq-mgr \
 	writer-cmn \
@@ -180,3 +208,6 @@ $(ILIBDIR)/libalign-writer.$(SHLX): $(ALIGN_WRITER_OBJ)
 
 $(ILIBDIR)/libalign-writer.$(LIBX): $(ALIGN_WRITER_OBJ)
 	$(LD) --slib -o $@ $^ $(ALIGN_WRITER_LIB)
+
+libalign-writer_tag:
+	@ $(TOP)/build/tag-module.sh $(MODULE) libalign-writer $(ALIGN_WRITER_OBJ)
diff --git a/libs/align/al_iterator.c b/libs/align/al_iterator.c
new file mode 100644
index 0000000..e53fc27
--- /dev/null
+++ b/libs/align/al_iterator.c
@@ -0,0 +1,562 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <align/extern.h>
+
+#include <klib/rc.h>
+#include <klib/container.h>
+#include <klib/refcount.h>
+#include <klib/sort.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <insdc/insdc.h>
+#include <align/iterator.h>
+#include <align/manager.h>
+#include <vdb/cursor.h>
+#include <sysalloc.h>
+
+#include "debug.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+#define COL_READ "READ"
+#define COL_HAS_MISMATCH "HAS_MISMATCH"
+#define COL_HAS_REF_OFFSET "HAS_REF_OFFSET"
+#define COL_REF_OFFSET "REF_OFFSET"
+
+typedef struct pos_offset
+{
+    uint32_t pos;
+    int32_t offset;
+} pos_offset;
+
+
+struct AlignmentIterator
+{
+    struct AlignMgr const *amgr;   /* the alignment-manager... */
+
+    /* data to walk */
+    bool * has_mismatch;    /* copy of HAS_MISMATCH */
+    INSDC_4na_bin * read;   /* copy of READ */
+    uint32_t read_len;      /* length of READ */
+    uint32_t ref_len;       /* length of projection on reference */
+
+    INSDC_coord_zero ref_window_start;  /* where the requested window on the reference starts */
+    INSDC_coord_len  ref_window_len;    /* how long the requested window on the reference is */
+
+    pos_offset * pos_ofs;   /* computed by walking HAS_REF_OFFSET, REF_OFFSET ( method 1 ) */
+    uint32_t pos_ofs_idx;   /* current index into pos_ofs[] */
+    uint32_t pos_ofs_cnt;   /* how many pos_ofs-values are there */
+
+    int32_t abs_ref_start;  /* absolute reference-related start-position   */
+    int32_t rel_ref_pos;    /* relative reference-related position ( relative to start of sequence )  */
+    uint32_t seq_pos;       /* position on the sequence, as the reference sees it */
+    uint32_t skip;          /* how many bases to skip if we are in DELETE */
+    uint32_t flags;         /* flags it, when we are in INSERT/DELETE */
+    uint32_t inserts;       /* how many inserts */
+
+    KRefcount refcount;
+    bool free_on_whack;     /* true if allocated and allowing references */
+    uint8_t align [ 3 ];
+};
+
+
+/* forward decl. for private helper functions */
+static rc_t compute_posofs(  AlignmentIterator * self,
+    const bool * has_ref_offset,
+    const int32_t * ref_offset,
+    uint32_t ref_offset_len );
+
+static void al_iter_adjust_next( AlignmentIterator * self );
+
+LIB_EXPORT void CC AlignIteratorRecordDestroy ( void *obj, void *data )
+{
+    /* nothing to do, because there are no sub-allocations etc. ... */
+}
+
+
+static rc_t get_idx_and_read( struct VCursor const *curs,
+                              const char * name,
+                              int64_t row_id,
+                              const void ** base,
+                              uint32_t * len )
+{
+    uint32_t column_idx;
+    rc_t rc = VCursorGetColumnIdx ( curs, &column_idx, name );
+    if ( rc != 0 )
+        LOGERR( klogInt, rc, "VCursorGetColumnIdx() failed" );
+    else
+    {
+        uint32_t elem_bits, boff, len_intern;
+        const void * ptr;
+        rc = VCursorCellDataDirect ( curs, row_id, column_idx, 
+                                     &elem_bits, &ptr, &boff, &len_intern );
+        if ( rc != 0 )
+            LOGERR( klogInt, rc, "VCursorCellDataDirect() failed" );
+        else
+        {
+            assert( boff == 0 );
+            if ( len != NULL ) *len = len_intern;
+            if ( base != NULL ) *base = ptr;
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC AlignIteratorRecordPopulate ( void *obj,
+    const PlacementRecord *placement, struct VCursor const *curs, 
+    INSDC_coord_zero ref_window_start, INSDC_coord_len ref_window_len, void *data )
+{
+    /* read the data required to build a Alignment-Iterator,
+       then create the Alignment-Iterator into the already allocated memory */
+    const void * base;
+    const void * base_has_ref_offset;
+    const void * base_ref_offset;
+
+    INSDC_coord_len data_len;
+    uint32_t ref_offset_len;
+    rc_t rc;
+
+    AlignmentIterator *iter = ( AlignmentIterator * ) obj;
+    AlignMgr *almgr = ( AlignMgr * ) data;
+
+    uint8_t * ptr = ( void* ) iter;
+    ptr += ( sizeof *iter );
+
+    rc = get_idx_and_read( curs, COL_HAS_MISMATCH, placement->id, &base, &data_len );
+    if ( rc == 0 )
+    {
+        /* copy HAS_MISMATCH into place, point the header-value to it, advance */
+        memcpy( ptr, base, data_len );
+        iter->has_mismatch = (bool *)ptr;
+        ptr += data_len;
+    }
+
+    if ( rc == 0 )
+    {
+        rc = get_idx_and_read( curs, COL_READ, placement->id, &base, &data_len );
+        /* copy READ into place, point the header-value to it, advance */
+        if ( rc == 0 )
+        {
+            memcpy( ptr, base, data_len );
+            iter->read = ( INSDC_4na_bin * )ptr;
+            iter->read_len = data_len;
+            iter->abs_ref_start = placement->pos;
+            iter->ref_len = placement->len;
+            iter->rel_ref_pos = 0;
+            iter->seq_pos = 0;
+            ptr += data_len;
+            iter->pos_ofs = (pos_offset *)ptr;
+            iter->ref_window_start = ref_window_start;
+            iter->ref_window_len = ref_window_len;
+            iter->free_on_whack = false;
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        rc = get_idx_and_read( curs, COL_HAS_REF_OFFSET, placement->id, &base_has_ref_offset, &data_len );
+    }
+    if ( rc == 0 )
+    {
+        rc = get_idx_and_read( curs, COL_REF_OFFSET, placement->id, &base_ref_offset, &ref_offset_len );
+    }
+    if ( rc == 0 )
+    {
+        rc = compute_posofs( iter,
+                             ( const bool * )base_has_ref_offset, 
+                             ( const int32_t * )base_ref_offset, 
+                             ref_offset_len );
+    }
+    if ( rc == 0 )
+    {
+        if ( iter->pos_ofs_idx == 0 )
+            al_iter_adjust_next( iter );
+        KRefcountInit( &iter->refcount, 1, "AlignmentIterator", "Make", "align" );
+        data_len = 0;
+        while( ( iter->abs_ref_start + iter->rel_ref_pos ) < ref_window_start && rc == 0 )
+        {
+            rc = AlignmentIteratorNext ( iter );
+            data_len++;
+        }
+    }
+    if ( rc == 0 )  {   rc = AlignMgrAddRef ( almgr );  }
+    if ( rc == 0 )  {   iter->amgr = almgr;  }
+
+/*
+    if ( rc == 0 )
+    {
+        OUTMSG(( "placement[%lu] at %u (w=%u) next(%u) \n", 
+                 placement->id, iter->abs_ref_start, ref_window_start, data_len ));
+    }
+*/
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC AlignIteratorRecordSize ( struct VCursor const *curs, int64_t row_id, size_t *size, void *data )
+{
+    uint32_t ref_offset_len, read_len;
+
+    rc_t rc = get_idx_and_read( curs, COL_REF_OFFSET, row_id, NULL, &ref_offset_len );
+    if ( rc == 0 )
+        rc = get_idx_and_read( curs, COL_READ, row_id, NULL, &read_len );
+
+    if ( rc == 0 )
+    {
+        AlignmentIterator * ali = NULL;
+        size_t po_size = ( ( sizeof *(ali->pos_ofs) ) * ( ref_offset_len ) );
+        *size = ( ( sizeof *ali ) + ( read_len * 2 ) + po_size );
+    }
+
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC AlignMgrMakeAlignmentIterator ( struct AlignMgr const *self,
+    AlignmentIterator **iter,
+    bool copy,
+    INSDC_coord_zero ref_pos,
+    INSDC_coord_len ref_len,
+    const INSDC_4na_bin *read,
+    INSDC_coord_len read_len,
+    const bool *has_mismatch,
+    const bool *has_ref_offset,
+    const int32_t *ref_offset,
+    uint32_t ref_offset_len,
+    INSDC_coord_zero ref_window_start,
+    INSDC_coord_len ref_window_len )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        rc = RC( rcAlign, rcIterator, rcConstructing, rcSelf, rcNull );
+    else
+    {
+        if ( iter == NULL || has_mismatch == NULL || has_ref_offset == NULL ||
+             read == NULL || read_len == 0 )
+            rc = RC( rcAlign, rcIterator, rcConstructing, rcParam, rcNull );
+        else
+        {
+            AlignmentIterator * ali = NULL;
+            size_t po_size = ( ( sizeof *(ali->pos_ofs) ) * ( ref_offset_len ) );
+            size_t full_size = ( sizeof *ali ) + ( read_len * 2 ) + po_size;
+      
+            uint8_t * ptr = calloc( full_size, 1 );
+            *iter = NULL;
+            if ( ptr == NULL )
+                rc = RC( rcAlign, rcIterator, rcConstructing, rcMemory, rcExhausted );
+            else
+            {
+                ali = ( AlignmentIterator * )ptr;
+                ptr += ( sizeof *ali );
+
+                KRefcountInit( &ali->refcount, 1, "AlignmentIterator", "Make", "align" );
+
+                /* copy HAS_MISMATCH into place, point the header-value to it, advance */
+                memcpy( ptr, has_mismatch, read_len );
+                ali->has_mismatch = (bool *)ptr;
+                ptr += read_len;
+
+                /* copy READ into place, point the header-value to it, advance */
+                memcpy( ptr, read, read_len );
+                ali->read = ( INSDC_4na_bin * )ptr;
+                ptr += read_len;
+
+                ali->read_len = read_len;
+                ali->ref_len = ref_len;
+                ali->abs_ref_start = ref_pos;
+                ali->pos_ofs = (pos_offset *)ptr;
+                ali->ref_window_start = ref_window_start;
+                ali->ref_window_len = ref_window_len;
+                ali->free_on_whack = true;
+
+                rc = compute_posofs( ali, has_ref_offset, ref_offset, ref_offset_len );
+                if ( ali->pos_ofs_idx == 0 )
+                    al_iter_adjust_next( ali );
+
+                if ( rc == 0 )
+                {
+                    rc = AlignMgrAddRef ( self );
+                    if ( rc == 0 )
+                        ali->amgr = self;
+                }
+            }
+
+            if ( rc == 0 )
+                *iter = ali;
+            else
+                free( ali );
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC AlignmentIteratorAddRef( const AlignmentIterator * cself )
+{
+    rc_t rc = 0;
+    if ( cself == NULL )
+        rc = RC( rcAlign, rcIterator, rcAttaching, rcSelf, rcNull );
+    else
+    {
+        if ( KRefcountAdd( &cself->refcount, "AlignmentIterator" ) != krefOkay )
+        {
+            rc = RC( rcAlign, rcIterator, rcAttaching, rcError, rcUnexpected );
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC AlignmentIteratorRelease( const AlignmentIterator * cself )
+{
+    rc_t rc = 0;
+    if ( cself == NULL )
+        rc = RC( rcAlign, rcIterator, rcReleasing, rcSelf, rcNull );
+    else
+    {
+        if ( KRefcountDrop( &cself->refcount, "AlignmentIterator" ) == krefWhack )
+        {
+            AlignmentIterator * self = ( AlignmentIterator * ) cself;
+            AlignMgrRelease ( self->amgr );
+            if ( self->free_on_whack )
+                free( self );
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC AlignmentIteratorNext ( AlignmentIterator *self )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        rc = RC( rcAlign, rcIterator, rcPositioning, rcSelf, rcNull );
+    else
+    {
+        self->flags = 0;
+        self->rel_ref_pos++;
+
+        if ( self->rel_ref_pos >= self->ref_len )
+            rc = SILENT_RC( rcAlign, rcIterator, rcPositioning, rcItem, rcDone );
+        else
+        {
+            if ( self->skip > 0 )
+            {
+                self->flags |=  align_iter_skip;
+                self->skip--;
+            }
+            else if ( self->inserts > 0 )
+            {
+                self->seq_pos += ( self->inserts + 1 );
+                self->inserts = 0;
+            }
+            else
+            {
+                self->seq_pos++;
+            }
+            al_iter_adjust_next( self );
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT int32_t CC AlignmentIteratorState ( const AlignmentIterator *self,
+                                               INSDC_coord_zero *seq_pos )
+{
+    uint32_t res = align_iter_invalid;
+    if ( self != NULL )
+    {
+        INSDC_coord_zero pos = self->seq_pos;
+        if ( pos < self->read_len )
+        {
+            res = ( self->read[ pos ] & 0x0F );
+
+            if ( self->rel_ref_pos < 1 )
+                res |= align_iter_first;
+
+            if ( self->rel_ref_pos == ( self->ref_len - 1 ) )
+                res |= align_iter_last;
+
+            if ( !self->has_mismatch[ pos ] )
+                res |= align_iter_match;
+
+            res |= self->flags;
+
+            if ( seq_pos != NULL )
+                *seq_pos = pos;
+        }
+    }
+    return res;
+}
+
+
+LIB_EXPORT rc_t CC AlignmentIteratorPosition ( const AlignmentIterator *self,
+                                               INSDC_coord_zero *pos )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        rc = RC( rcAlign, rcIterator, rcPositioning, rcSelf, rcNull );
+    else
+    {
+        if ( pos == NULL )
+            rc = RC( rcAlign, rcIterator, rcPositioning, rcParam, rcNull );
+        else
+        {
+            *pos = ( self->abs_ref_start + self->rel_ref_pos );
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT uint32_t CC AlignmentIteratorBasesInserted
+    ( const AlignmentIterator *self, const INSDC_4na_bin **bases )
+{
+    uint32_t res = 0;
+    if ( ( self != NULL )&&( bases != NULL ) )
+    {
+        res = self->inserts;
+        *bases = &( self->read[ self->seq_pos + 1 ] );
+    }
+    return res;
+}
+
+
+LIB_EXPORT uint32_t CC AlignmentIteratorBasesDeleted
+    ( const AlignmentIterator *self, INSDC_coord_zero *pos )
+{
+    uint32_t res = 0;
+    if ( ( self != NULL )&&( pos != NULL ) )
+    {
+        res = ( self->skip );
+        *pos = ( self->abs_ref_start + self->rel_ref_pos + 1 ); 
+    }
+    return res;
+}
+
+
+/* ============ private static functions ============ */
+static rc_t compute_posofs(  AlignmentIterator * self,
+    const bool * has_ref_offset, const int32_t * ref_offset, uint32_t ref_offset_len )
+{
+    rc_t rc = 0;
+
+    self->pos_ofs_idx = 0;
+    self->pos_ofs_cnt = ref_offset_len;
+    if ( ref_offset_len > 0 )
+    {
+        int32_t shift = 0;
+        uint32_t seq_position;
+        uint32_t src = 0;
+        uint32_t dst = 0;
+
+        if ( has_ref_offset[ 0 ] && ( ref_offset[ 0 ] < 0 ) )
+        {
+            shift = ref_offset[ src++ ];
+            self->seq_pos = -( shift );
+            self->pos_ofs_cnt--;
+        }
+
+        seq_position = self->seq_pos;
+        while( seq_position < self->read_len && rc == 0 )
+        {
+            if ( has_ref_offset[ seq_position ] )
+            {
+                /* we do have to process a reference-offset ! */
+                if ( src < ref_offset_len )
+                {
+                    /* we do have a ref-offset value available... */
+                    int32_t ro = ref_offset[ src++ ];
+                    if ( ro == 0 )
+                    {
+                        /* zero-values in REF_OFFSET are an error ! */
+                        rc = RC( rcAlign, rcIterator, rcConstructing, rcItem, rcNull );
+                    }
+                    else
+                    {
+                        /* ref-offset is positive: DELETE against the reference */
+                        self->pos_ofs[ dst ].pos = ( seq_position + shift - 1 );
+                        self->pos_ofs[ dst++ ].offset = ro;
+                        shift += ro;
+
+                        /* !!! CHANGE on May 04 2012 !!!
+                           the unused bits in has_ref_offset after an insert ( negative ro )
+                           are used now to hint the position of a "B"-cigar-string-case
+                           for cSRA-files created Complete-Genomic-Submissions
+                           that means we have to jump forward with seq_position in this case!
+                        */
+                        if ( ro < 0 )
+                        {
+                            seq_position -= ( ro + 1 );
+                        }
+                    }
+                }
+                else
+                {
+                    /* if has_ref_offset has more flags than ref_offset has values... */
+                    rc = RC( rcAlign, rcIterator, rcConstructing, rcItem, rcTooBig );
+                }
+            }
+            ++seq_position;
+        }
+
+/*      OUTMSG(( "pos_ofs:" ));
+        for ( src = 0; src < self->pos_ofs_cnt; ++src )
+        {
+            OUTMSG(( "[%u/%u]", self->pos_ofs[ src ].pos, self->pos_ofs[ src ].offset ));
+        }
+        OUTMSG(( "\n" )); */
+    }
+    return rc;
+}
+
+
+static void al_iter_adjust_next( AlignmentIterator * self )
+{
+    if ( self->pos_ofs_idx < self->pos_ofs_cnt )
+    {
+        if ( self->rel_ref_pos == self->pos_ofs[ self->pos_ofs_idx ].pos )
+        {
+            /* we have to adjust... */
+            int32_t ro = self->pos_ofs[ self->pos_ofs_idx++ ].offset;
+            if ( ro < 0 )
+            {
+                self->flags |= align_iter_insert;
+                self->inserts = (-ro);
+            }
+            else
+            {
+                self->flags |= align_iter_delete;
+                self->skip = ro;
+            }
+        }
+    }
+}
diff --git a/libs/align/align-access.c b/libs/align/align-access.c
index fbd0047..7518d53 100644
--- a/libs/align/align-access.c
+++ b/libs/align/align-access.c
@@ -26,13 +26,13 @@
 
 #include <align/extern.h>
 #include <klib/rc.h>
+#include <klib/text.h>
 #include <align/align-access.h>
-#include <sysalloc.h>
 #include <atomic32.h>
 
-#include <kfs/path.h>
+#include <vfs/path.h>
+#include <sysalloc.h>
 
-#include <fmtdef.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
@@ -88,14 +88,14 @@ struct AlignAccessDB {
     const BAMFile *innerSelf;
 };
 
-LIB_EXPORT rc_t CC AlignAccessMgrMakeBAMDB(const AlignAccessMgr *self, const AlignAccessDB **db, const KPath *bam) {
+LIB_EXPORT rc_t CC AlignAccessMgrMakeBAMDB(const AlignAccessMgr *self, const AlignAccessDB **db, const VPath *bam) {
     AlignAccessDB *lhs = malloc(sizeof(*lhs));
     rc_t rc;
 
     if (lhs == NULL)
         return RC(rcAlign, rcMgr, rcConstructing, rcMemory, rcExhausted);
     
-    rc = BAMFileMakeWithKPath(&lhs->innerSelf, bam);
+    rc = BAMFileMakeWithVPath(&lhs->innerSelf, bam);
     if (rc) {
         free(lhs);
         return rc;
@@ -108,10 +108,10 @@ LIB_EXPORT rc_t CC AlignAccessMgrMakeBAMDB(const AlignAccessMgr *self, const Ali
     return 0;
 }
 
-LIB_EXPORT rc_t CC AlignAccessMgrMakeIndexBAMDB(const AlignAccessMgr *self, const AlignAccessDB **db, const KPath *bam, const KPath *bam_index) {
+LIB_EXPORT rc_t CC AlignAccessMgrMakeIndexBAMDB(const AlignAccessMgr *self, const AlignAccessDB **db, const VPath *bam, const VPath *bam_index) {
     rc_t rc = AlignAccessMgrMakeBAMDB(self, db, bam);
     if (rc == 0) {
-        rc = BAMFileOpenIndexWithKPath((**db).innerSelf, bam_index);
+        rc = BAMFileOpenIndexWithVPath((**db).innerSelf, bam_index);
         if (rc == 0)
             return 0;
         AlignAccessDBRelease(*db);
@@ -252,7 +252,7 @@ LIB_EXPORT rc_t CC AlignAccessRefSeqEnumeratorGetID(const AlignAccessRefSeqEnume
     rc = BAMFileGetRefSeq(cself->parent->innerSelf, cself->cur, &cur);
     if (rc)
         return rc;
-    id_act_size = strlen(cur->name) + 1;
+    id_act_size = string_size( cur->name ) + 1;
     if (id_size != NULL)
         *id_size = id_act_size;
     if (id_buffer != NULL) {
@@ -481,7 +481,7 @@ LIB_EXPORT rc_t CC AlignAccessAlignmentEnumeratorGetRefSeqID(
     rc = BAMFileGetRefSeq(self->parent->innerSelf, id, &cur);
     if (rc)
         return rc;
-    id_act_size = strlen(cur->name) + 1;
+    id_act_size = string_size( cur->name ) + 1;
     if (id_size != NULL)
         *id_size = id_act_size;
     if (id_buffer != NULL) {
@@ -548,7 +548,7 @@ LIB_EXPORT rc_t CC AlignAccessAlignmentEnumeratorGetShortSeqAccessionID(
     if (readGroupName == 0)
         *id_size = 0;
     else {
-        id_act_size = strlen(readGroupName) + 1;
+        id_act_size = string_size( readGroupName ) + 1;
         if (id_size != NULL)
             *id_size = id_act_size;
         if (id_buffer != NULL) {
@@ -578,7 +578,7 @@ LIB_EXPORT rc_t CC AlignAccessAlignmentEnumeratorGetShortSeqID(
     if (rc)
         return rc;
 
-    id_act_size = strlen(readName) + 1;
+    id_act_size = string_size( readName ) + 1;
     if (id_size != NULL)
         *id_size = id_act_size;
     if (id_buffer != NULL) {
diff --git a/libs/align/align_mgr.c b/libs/align/align_mgr.c
new file mode 100644
index 0000000..c700463
--- /dev/null
+++ b/libs/align/align_mgr.c
@@ -0,0 +1,108 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <align/extern.h>
+
+#include <klib/rc.h>
+#include <klib/container.h>
+#include <klib/refcount.h>
+#include <klib/sort.h>
+#include <insdc/insdc.h>
+#include <align/iterator.h>
+#include <align/manager.h>
+#include <sysalloc.h>
+
+#include "debug.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+struct AlignMgr
+{
+    KRefcount refcount;
+    /* what else will be here ? */
+};
+
+
+LIB_EXPORT rc_t CC AlignMgrMakeRead ( const struct AlignMgr **self )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        rc = RC( rcAlign, rcIterator, rcConstructing, rcSelf, rcNull );
+    else
+    {
+        AlignMgr * alm = calloc( sizeof * alm, 1 );
+        if ( alm == NULL )
+            rc = RC( rcAlign, rcIterator, rcConstructing, rcMemory, rcExhausted );
+        else
+        {
+            KRefcountInit( &alm->refcount, 1, "AlignMgr", "Make", "align" );
+        }
+
+        if ( rc == 0 )
+            *self = alm;
+        else
+            free( alm );
+    }
+    return rc;
+
+}
+
+
+LIB_EXPORT rc_t CC AlignMgrAddRef ( const AlignMgr *self )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        rc = RC( rcAlign, rcIterator, rcAttaching, rcSelf, rcNull );
+    else
+    {
+        if ( KRefcountAdd( &self->refcount, "AlignMgr" ) != krefOkay )
+        {
+            rc = RC( rcAlign, rcIterator, rcAttaching, rcError, rcUnexpected );
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC AlignMgrRelease ( const AlignMgr *cself )
+{
+    rc_t rc = 0;
+    if ( cself == NULL )
+        rc = RC( rcAlign, rcIterator, rcReleasing, rcSelf, rcNull );
+    else
+    {
+        if ( KRefcountDrop( &cself->refcount, "AlignMgr" ) == krefWhack )
+        {
+            AlignMgr * self = ( AlignMgr * ) cself;
+            free( self );
+        }
+    }
+    return rc;
+
+}
diff --git a/libs/align/bam.c b/libs/align/bam.c
index 2f4a22c..843c498 100644
--- a/libs/align/bam.c
+++ b/libs/align/bam.c
@@ -26,11 +26,15 @@
 
 #include <align/extern.h>
 #include <klib/defs.h>
+#include <klib/debug.h>
 #include <klib/sort.h>
 #include <klib/rc.h>
 #include <kfs/file.h>
 #include <kfs/directory.h>
 #include <kfs/mmap.h>
+#include <klib/printf.h>
+#include <klib/log.h>
+#include <klib/text.h>
 #include <sysalloc.h>
 
 #include <atomic32.h>
@@ -39,7 +43,8 @@
 #include <align/bam.h>
 #include "bam-priv.h"
 
-#include <kfs/path.h>
+#include <vfs/path.h>
+#include <vfs/path-priv.h>
 #include <kfs/kfs-priv.h>
 
 #include <limits.h>
@@ -58,26 +63,26 @@
 #include <zlib.h>
 
 #if __BYTE_ORDER == __LITTLE_ENDIAN
-#define LE2HUI16(X) (*((const uint16_t *)(X)))
-#define LE2HUI32(X) (*((const uint32_t *)(X)))
-#define LE2HUI64(X) (*((const uint64_t *)(X)))
-#define LE2HI16(X)  (*((const  int16_t *)(X)))
-#define LE2HI32(X)  (*((const  int32_t *)(X)))
-#define LE2HI64(X)  (*((const  int64_t *)(X)))
+static uint16_t LE2HUI16(void const *X) { uint16_t y; memcpy(&y, X, sizeof(y)); return y; }
+static uint32_t LE2HUI32(void const *X) { uint32_t y; memcpy(&y, X, sizeof(y)); return y; }
+static uint64_t LE2HUI64(void const *X) { uint64_t y; memcpy(&y, X, sizeof(y)); return y; }
+static  int16_t  LE2HI16(void const *X) {  int16_t y; memcpy(&y, X, sizeof(y)); return y; }
+static  int32_t  LE2HI32(void const *X) {  int32_t y; memcpy(&y, X, sizeof(y)); return y; }
+static  int64_t  LE2HI64(void const *X) {  int64_t y; memcpy(&y, X, sizeof(y)); return y; }
 #endif
 #if __BYTE_ORDER == __BIG_ENDIAN
-#define LE2HUI16(X) ((uint16_t)(bswap_16(*((const uint16_t *)(X)))))
-#define LE2HUI32(X) ((uint32_t)(bswap_32(*((const uint32_t *)(X)))))
-#define LE2HUI64(X) ((uint64_t)(bswap_64(*((const uint64_t *)(X)))))
-#define LE2HI16(X)  (( int16_t)(bswap_16(*((const  int16_t *)(X)))))
-#define LE2HI32(X)  (( int32_t)(bswap_32(*((const  int32_t *)(X)))))
-#define LE2HI64(X)  (( int64_t)(bswap_64(*((const  int64_t *)(X)))))
+static uint16_t LE2HUI16(void const *X) { uint16_t y; memcpy(&y, X, sizeof(y)); return (uint16_t)bswap_16(y); }
+static uint32_t LE2HUI32(void const *X) { uint32_t y; memcpy(&y, X, sizeof(y)); return (uint32_t)bswap_32(y); }
+static uint64_t LE2HUI64(void const *X) { uint64_t y; memcpy(&y, X, sizeof(y)); return (uint64_t)bswap_64(y); }
+static  int16_t  LE2HI16(void const *X) {  int16_t y; memcpy(&y, X, sizeof(y)); return ( int16_t)bswap_16(y); }
+static  int32_t  LE2HI32(void const *X) {  int32_t y; memcpy(&y, X, sizeof(y)); return ( int32_t)bswap_32(y); }
+static  int64_t  LE2HI64(void const *X) {  int64_t y; memcpy(&y, X, sizeof(y)); return ( int64_t)bswap_64(y); }
 #endif
 
 typedef struct BAMIndex BAMIndex;
 typedef struct BGZFile BGZFile;
 
-#define USEMMAP 0
+/* #pragma mark BGZFile *** Start *** */
 
 #define VALIDATE_BGZF_HEADER 1
 #if (ZLIB_VERNUM < 0x1230)
@@ -92,98 +97,58 @@ typedef uint8_t zlib_block_t[ZLIB_BLOCK_SIZE];
 #define MEM_ALIGN_SIZE ( 64 * 1024 )
 /* MEM_CHUNK_SIZE must be an integer multiple of ZLIB_BLOCK_SIZE.
  * The multiple must be >= 2 shouldn't be < 3.
- * If using mmap, it can be much bigger and let the OS deal with the IO.
  */
-#if USEMMAP
-#define MEM_CHUNK_SIZE ( 256 * ZLIB_BLOCK_SIZE ) /* 16 MB */
-#else
 #define MEM_CHUNK_SIZE ( 256 * ZLIB_BLOCK_SIZE )
-#endif
+#define CG_NUM_SEGS 4
+
+typedef struct BGZFile_vt_s {
+    rc_t (*FileRead)(void *, zlib_block_t, unsigned *);
+    uint64_t (*FileGetPos)(void const *);
+    float (*FileProPos)(void const *);
+    uint64_t (*FileGetSize)(void const *);
+    rc_t (*FileSetPos)(void *, uint64_t);
+    void (*FileWhack)(void *);
+} BGZFile_vt;
 
 struct BGZFile {
     uint64_t fsize;
     uint64_t fpos;  /* position in file of first byte in buffer */
     const uint8_t *buf;   /* page aligned or memmapped */
-#if USEMMAP
-    const KMMap *mm;
-#else
     const KFile *kfp;
     uint8_t *_buf;  /* allocated */
     unsigned malign;
-#endif
     size_t bcount;  /* number of valid bytes in buffer */
     uint32_t bpos;  /* position in buffer of read head */
     z_stream zs;
-#if USEMMAP
-    bool sequentialForward;
-#endif
 };
 
-static rc_t BGZFileInit(BGZFile *self, const KFile *kfp)
-{
-    int i;
-    rc_t rc;
-    
-    memset(self, 0, sizeof(*self));
-
-    i = inflateInit2(&self->zs, MAX_WBITS + 16); /* max + enable gzip headers */
-    switch (i) {
-    case Z_OK:
-        break;
-    case Z_MEM_ERROR:
-        return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
-    default:
-        return RC(rcAlign, rcFile, rcConstructing, rcNoObj, rcUnexpected);
-    }
-    
-    rc = KFileSize(kfp, &self->fsize);
-    if (rc)
-        return rc;
-
-#if USEMMAP
-    rc = KMMapMakeRgnRead(&self->mm, kfp, 0, MEM_CHUNK_SIZE);
-#else
-    self->_buf = malloc(MEM_CHUNK_SIZE + MEM_ALIGN_SIZE);
-    if (self->_buf == NULL)
-        return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
-    self->malign = (MEM_ALIGN_SIZE - ((intptr_t)self->_buf & (MEM_ALIGN_SIZE - 1))) & (MEM_ALIGN_SIZE - 1);
-    self->buf = self->_buf + self->malign;
-
-    self->kfp = kfp;
-    KFileAddRef(kfp);
-#endif
-    
-    return 0;
-}
-
-static rc_t BGZFileGetMoreBytes(BGZFile *self)
+static
+rc_t BGZFileGetMoreBytes(BGZFile *self)
 {
     rc_t rc;
     
     self->fpos += self->bpos;
     self->bpos &= (MEM_ALIGN_SIZE - 1);
     self->fpos -= self->bpos;
-#if USEMMAP
-    rc = KMMapReposition(self->mm, self->fpos, &self->bcount);
-    if (rc)
-        return rc;
-    rc = KMMapAddrRead(self->mm, (const void **)&self->buf);
-#else
+
     rc = KFileRead(self->kfp, self->fpos, self->_buf + self->malign,
                    MEM_CHUNK_SIZE, &self->bcount);
-#endif
-    if (rc)
+    if (rc) {
+        DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("Error reading BAM file: %R\n", rc));
         return rc;
+    }
     if (self->bcount == 0 || self->bcount == self->bpos)
         return RC(rcAlign, rcFile, rcReading, rcData, rcInsufficient);
-    
+
     self->zs.avail_in = (uInt)(self->bcount - self->bpos);
     self->zs.next_in = (Bytef *)&self->buf[self->bpos];
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("Read %u bytes from BAM file at position %lu\n", self->zs.avail_in, self->fpos));
     
     return 0;
 }
 
-static rc_t BGZFileRead(BGZFile *self, zlib_block_t dst, uint32_t *pNumRead)
+static
+rc_t BGZFileRead(BGZFile *self, zlib_block_t dst, unsigned *pNumRead)
 {
 #if VALIDATE_BGZF_HEADER
     uint8_t extra[256];
@@ -194,7 +159,7 @@ static rc_t BGZFileRead(BGZFile *self, zlib_block_t dst, uint32_t *pNumRead)
     int zr;
     
     *pNumRead = 0;
-    if (self->bcount == 0) {
+    if (self->bcount == 0 || self->zs.avail_in == 0) {
         rc = BGZFileGetMoreBytes(self);
         if (rc)
             return rc;
@@ -213,48 +178,66 @@ static rc_t BGZFileRead(BGZFile *self, zlib_block_t dst, uint32_t *pNumRead)
     self->zs.avail_out = sizeof(zlib_block_t);
 
     for (loops = 0; loops != 2; ++loops) {
-        uInt temp = self->zs.total_in;
+        uInt const in = self->zs.total_in;
         
         zr = inflate(&self->zs, Z_FINISH);
-        self->bpos += self->zs.total_in - temp;
+        self->bpos += self->zs.total_in - in;
         assert(self->zs.avail_in == self->bcount - self->bpos);
+        
         switch (zr) {
         case Z_OK:
         case Z_BUF_ERROR:
             rc = BGZFileGetMoreBytes(self);
-            if (rc)
+            if (rc) {
+                if (GetRCObject(rc) == rcData && GetRCState(rc) == rcInsufficient) {
+                    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("EOF in Zlib block after %lu bytes\n", self->fpos + self->bpos));
+                    rc = RC(rcAlign, rcFile, rcReading, rcFile, rcTooShort);
+                }
                 return rc;
+            }
             break;
         case Z_STREAM_END:
+            DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("Zlib block size (before/after): %u/%u\n", self->zs.total_in, self->zs.total_out));
 #if VALIDATE_BGZF_HEADER
             if (head.done) {
+                unsigned const extra_len = head.extra_len;
                 unsigned i;
                 unsigned bsize = 0;
-                uint16_t t16;
                 
-                for (i = 0; i < head.extra_len; ) {
-                    if (extra[i] == 'B' && extra[i + 1] == 'C') {
-                        memcpy(&t16, &extra[i + 4], 2);
-                        bsize = 1 + LE2HUI16(&t16);
+                DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("GZIP Header extra length: %u\n", extra_len));
+                for (i = 0; i < extra_len; ) {
+                    uint8_t const si1 = extra[i + 0];
+                    uint8_t const si2 = extra[i + 1];
+                    unsigned const slen = LE2HUI16(&extra[i + 2]);
+                    
+                    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("GZIP Header extra: %c%c(%u)\n", si1, si2, slen));
+                    if (si1 == 'B' && si2 == 'C') {
+                        bsize = 1 + LE2HUI16(&extra[i + 4]);
+                        DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("BGZF Header extra field BC: bsize %u\n", bsize));
                         break;
                     }
-                    memcpy(&t16, &extra[i + 2], 2);
-                    i += LE2HUI16(&t16);
+                    i += slen + 4;
                 }
-                if (bsize == 0 || bsize != self->zs.total_in)
+                if (bsize == 0 || bsize != self->zs.total_in) {
+                    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("BGZF Header extra field BC not found\n"));
                     rc = RC(rcAlign, rcFile, rcReading, rcFormat, rcInvalid); /* not BGZF */
+                }
             }
-            else
+            else {
+                DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("GZIP Header not found\n"));
                 rc = RC(rcAlign, rcFile, rcReading, rcFile, rcCorrupt);
+            }
 #endif
             *pNumRead = self->zs.total_out;
             zr = inflateReset(&self->zs);
             assert(zr == Z_OK);
             return rc;
         default:
+            DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("Unexpected Zlib result %i\n", zr));
             return RC(rcAlign, rcFile, rcReading, rcFile, rcCorrupt);
         }
     }
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BGZF), ("Failed reading BAM file after %lu bytes\n", self->fpos + self->bpos));
     return RC(rcAlign, rcFile, rcReading, rcFile, rcTooShort);
 }
 
@@ -326,16 +309,13 @@ static rc_t BGZFileWalkBlocksND(BGZFile *self, BGZFileWalkBlocks_cb cb, void *ct
             hsize += temp;
             if (head.done) {
                 unsigned i;
-                uint16_t t16;
                 
                 for (i = 0; i < head.extra_len; ) {
                     if (extra[i] == 'B' && extra[i + 1] == 'C') {
-                        memcpy(&t16, &extra[i + 4], 2);
-                        bsize = 1 + LE2HUI16(&t16);
+                        bsize = 1 + LE2HUI16(&extra[i + 4]);
                         break;
                     }
-                    memcpy(&t16, &extra[i + 2], 2);
-                    i += LE2HUI16(&t16);
+                    i += LE2HUI16(&extra[i + 2]);
                 }
                 break;
             }
@@ -394,7 +374,7 @@ static rc_t BGZFileWalkBlocksUnzip(BGZFile *self, zlib_block_t *bufp, BGZFileWal
 {
     rc_t rc;
     rc_t rc2;
-    uint32_t dsize;
+    unsigned dsize;
     
     do {
         uint64_t const fpos = self->fpos + self->bpos;
@@ -430,18 +410,230 @@ static rc_t BGZFileWalkBlocks(BGZFile *self, bool decompress, zlib_block_t *bufp
         return BGZFileWalkBlocksND(self, cb, ctx);
 }
 
+static uint64_t BGZFileGetSize(BGZFile const *const self)
+{
+    return self->fsize;
+}
+
 static void BGZFileWhack(BGZFile *self)
 {
     inflateEnd(&self->zs);
-#if USEMMAP
-    KMMapRelease(self->mm);
-#else
     KFileRelease(self->kfp);
     if (self->_buf)
         free(self->_buf);
-#endif
 }
 
+static rc_t BGZFileInit(BGZFile *self, const KFile *kfp, BGZFile_vt *vt)
+{
+    int i;
+    rc_t rc;
+    static BGZFile_vt const my_vt = {
+        (rc_t (*)(void *, zlib_block_t, unsigned *))BGZFileRead,
+        (uint64_t (*)(void const *))BGZFileGetPos,
+        (float (*)(void const *))BGZFileProPos,
+        (uint64_t (*)(void const *))BGZFileGetSize,
+        (rc_t (*)(void *, uint64_t))BGZFileSetPos,
+        (void (*)(void *))BGZFileWhack
+    };
+    
+    memset(self, 0, sizeof(*self));
+    memset(vt, 0, sizeof(*vt));
+    
+    i = inflateInit2(&self->zs, MAX_WBITS + 16); /* max + enable gzip headers */
+    switch (i) {
+    case Z_OK:
+        break;
+    case Z_MEM_ERROR:
+        return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+    default:
+        return RC(rcAlign, rcFile, rcConstructing, rcNoObj, rcUnexpected);
+    }
+    
+    rc = KFileSize(kfp, &self->fsize);
+    if (rc)
+        return rc;
+    
+    self->_buf = malloc(MEM_CHUNK_SIZE + MEM_ALIGN_SIZE);
+    if (self->_buf == NULL)
+        return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+    self->malign = (MEM_ALIGN_SIZE - ((intptr_t)self->_buf & (MEM_ALIGN_SIZE - 1))) & (MEM_ALIGN_SIZE - 1);
+    self->buf = self->_buf + self->malign;
+    
+    self->kfp = kfp;
+    KFileAddRef(kfp);
+
+    *vt = my_vt;
+    
+    return 0;
+}
+
+/* #pragma mark BGZFile *** End *** */
+
+#ifndef WINDOWS
+
+#include <kproc/thread.h>
+#include <kproc/lock.h>
+#include <kproc/cond.h>
+
+/* #pragma mark BGZThreadFile *** Start *** */
+typedef struct BGZThreadFile_s BGZThreadFile;
+
+#define BUFFER_COUNT (3)
+
+typedef struct BGZThreadFileWorkQElem_s BGZThreadFileWorkQElem;
+
+struct BGZThreadFileWorkQElem_s {
+    uint8_t *buf;
+    uint64_t pos;
+    unsigned bsz;
+};
+
+struct BGZThreadFile_s {
+    BGZFile file;
+    KLock *lock;
+    KCondition *have_data;
+    KCondition *need_data;
+    KThread *th;
+    uint64_t pos;
+    BGZThreadFileWorkQElem que[BUFFER_COUNT];
+    rc_t volatile rc;
+    unsigned volatile nque;
+    bool eof;
+    uint8_t buffer[sizeof(zlib_block_t) * BUFFER_COUNT];
+};
+
+static rc_t BGZThreadFileRead(BGZThreadFile *self, zlib_block_t dst, unsigned *pNumRead)
+{
+    rc_t rc;
+    
+    *pNumRead = 0;
+    
+    KLockAcquire(self->lock);
+    if ((rc = self->rc) == 0) {
+        while (self->nque == 0 && (rc = self->rc) == 0)
+            KConditionWait(self->have_data, self->lock);
+        if (rc == 0) {
+            BGZThreadFileWorkQElem const work = self->que[0];
+            
+            self->pos = work.pos;
+            if (work.buf) {
+                memcpy(dst, work.buf, *pNumRead = work.bsz);
+                memmove(&self->que[0], &self->que[1], --self->nque * sizeof(self->que[0]));
+                KConditionSignal(self->need_data);
+            }
+            else {
+                self->eof = true;
+                self->rc = rc = RC(rcAlign, rcFile, rcReading, rcData, rcInsufficient);
+            }
+        }
+    }
+    KLockUnlock(self->lock);
+    return rc;
+}
+
+static rc_t CC BGZThreadFileMain(KThread const *const th, void *const vp)
+{
+    BGZThreadFile *const self = (BGZThreadFile *)vp;
+    rc_t rc = 0;
+    unsigned bufno;
+    
+    KLockAcquire(self->lock);
+    for (bufno = 0; ; bufno = (bufno + 1) % BUFFER_COUNT) {
+        while (self->nque == BUFFER_COUNT)
+            KConditionWait(self->need_data, self->lock);
+        {
+            BGZThreadFileWorkQElem work;
+            
+            work.pos = BGZFileGetPos(&self->file);
+            work.buf = &self->buffer[bufno * sizeof(zlib_block_t)];
+            rc = BGZFileRead(&self->file, work.buf, &work.bsz);
+            if (GetRCObject(rc) == rcData && GetRCState(rc) == rcInsufficient)
+                work.buf = NULL;
+            else if (rc)
+                break;
+            self->que[self->nque++] = work;
+            KConditionSignal(self->have_data);
+        }
+    }
+    self->rc = rc;
+    KLockUnlock(self->lock);
+    return 0;
+}
+
+static uint64_t BGZThreadFileGetPos(BGZThreadFile const *const self)
+{
+    return self->pos;
+}
+
+/* returns the position as proportion of the whole file */ 
+static float BGZThreadFileProPos(BGZThreadFile const *const self)
+{
+    return BGZThreadFileGetPos(self) / (double)self->file.fsize;
+}
+
+static uint64_t BGZThreadFileGetSize(BGZThreadFile const *const self)
+{
+    return BGZFileGetSize(&self->file);
+}
+
+static rc_t BGZThreadFileSetPos(BGZThreadFile *const self)
+{
+    return RC(rcAlign, rcFile, rcPositioning, rcFunction, rcUnsupported);
+}
+
+static void BGZThreadFileWhack(BGZThreadFile *const self)
+{
+    KThreadCancel(self->th);
+    KThreadWait(self->th, NULL);
+    BGZFileWhack(&self->file);
+    KConditionRelease(self->need_data);
+    KConditionRelease(self->have_data);
+    KLockRelease(self->lock);
+    KThreadRelease(self->th);
+}
+
+static rc_t BGZThreadFileInit(BGZThreadFile *self, const KFile *kfp, BGZFile_vt *vt)
+{
+    rc_t rc;
+    static BGZFile_vt const my_vt = {
+        (rc_t (*)(void *, zlib_block_t, unsigned *))BGZThreadFileRead,
+        (uint64_t (*)(void const *))BGZThreadFileGetPos,
+        (float (*)(void const *))BGZThreadFileProPos,
+        (uint64_t (*)(void const *))BGZThreadFileGetSize,
+        (rc_t (*)(void *, uint64_t))BGZThreadFileSetPos,
+        (void (*)(void *))BGZThreadFileWhack
+    };
+    
+    memset(self, 0, sizeof(self));
+    
+    rc = BGZFileInit(&self->file, kfp, vt);
+    if (rc == 0) {
+        rc = KLockMake(&self->lock);
+        if (rc == 0) {
+            rc = KConditionMake(&self->have_data);
+            if (rc == 0) {
+                rc = KConditionMake(&self->need_data);
+                if (rc == 0) {
+                    rc = KThreadMake(&self->th, BGZThreadFileMain, self);
+                    if (rc == 0) {
+                        *vt = my_vt;
+                        return 0;
+                    }
+                    KConditionRelease(self->need_data);
+                }
+                KConditionRelease(self->have_data);
+            }
+            KLockRelease(self->lock);
+        }
+        BGZFileWhack(&self->file);
+    }
+    memset(self, 0, sizeof(self));
+    memset(vt, 0, sizeof(*vt));
+    return rc;
+}
+
+#endif
+
 struct BAMIndex {
     BAMFilePosition *refSeq[1];
 };
@@ -450,25 +642,33 @@ struct BAMFile {
     uint64_t fpos_first;
     uint64_t fpos_cur;
     
-    BGZFile file;
-    BAMRefSeq *refSeq;
-    BAMReadGroup *readGroup;
-    BAMAlignment *bufLocker;
-    const char *version;
+    union {
+        BGZFile plain;
+#ifndef WINDOWS
+        BGZThreadFile thread;
+#endif
+    } file;
+    BGZFile_vt vt;
+    
+    BAMRefSeq *refSeq;          /* pointers into headerData1 except name points into headerData2 */ 
+    BAMReadGroup *readGroup;    /* pointers into headerData1 */
+    char const *version;
     char const *header;
-    char const *headerData1;
-    char const *headerData2;
-    const BAMIndex *ndx;
+    char    *headerData1;       /* gets used for refSeq and readGroup */
+    uint8_t *headerData2;       /* gets used for refSeq */
+    BAMAlignment *bufLocker;
+    BAMIndex const *ndx;
     
     unsigned refSeqs;
     unsigned readGroups;
     
     atomic32_t refcount;
-    unsigned ucfirst;    /* offset of first record in uncompressed buffer */
-    unsigned bufSize;    /* current size of uncompressed buffer */
-    unsigned bufCurrent; /* location in uncompressed buffer of read head */
+    unsigned ucfirst;           /* offset of first record in uncompressed buffer */
+    unsigned bufSize;           /* current size of uncompressed buffer */
+    unsigned bufCurrent;        /* location in uncompressed buffer of read head */
     bool eof;
-    zlib_block_t buffer; /* uncompressed buffer */
+    bool threaded;
+    zlib_block_t buffer;        /* uncompressed buffer */
 };
 
 struct bam_alignment_s {
@@ -485,9 +685,9 @@ struct bam_alignment_s {
     uint8_t ins_size[4];
     char read_name[1 /* read_name_len */];
 /* if you change length of read_name,
- * adjust calculation of offsets in BAMAlignmentParse */
+ * adjust calculation of offsets in BAMFileRead */
 /*  uint32_t cigar[n_cigars];
- *  uint8_t seq[(read_len + 1) >> 1];
+ *  uint8_t seq[(read_len + 1) / 2];
  *  uint8_t qual[read_len];
  *  uint8_t extra[...];
  */
@@ -498,21 +698,24 @@ typedef union bam_alignment_u {
     uint8_t raw[sizeof(struct bam_alignment_s)];
 } bam_alignment;
 
+struct offset_size_s {
+    unsigned offset;
+    unsigned size; /* this is the total length of the tag; length of data is size - 3 */
+};
+
 struct BAMAlignment {
     atomic32_t refcount;
     
     BAMFile *parent;
     bam_alignment *data;
+    uint8_t *storage;
     unsigned datasize;
         
     unsigned cigar;
     unsigned seq;
     unsigned qual;
-    unsigned extra;
-    unsigned readGroupName;
-    unsigned csread;
-    
-    uint8_t storage[1];
+    unsigned numExtra;
+    struct offset_size_s extra[1];
 };
 
 static const char cigarChars[] = {
@@ -529,17 +732,11 @@ static const char cigarChars[] = {
 };
 
 static int32_t getRefSeqId(const BAMAlignment *cself) {
-    int32_t y;
-    
-    memcpy(&y, cself->data->cooked.rID, 4);
-    return LE2HI32(&y);
+    return LE2HI32(cself->data->cooked.rID);
 }
 
 static int32_t getPosition(const BAMAlignment *cself) {
-    int32_t y;
-    
-    memcpy(&y, cself->data->cooked.pos, 4);
-    return LE2HI32(&y);
+    return LE2HI32(cself->data->cooked.pos);
 }
 
 static uint8_t getReadNameLength(const BAMAlignment *cself) {
@@ -547,10 +744,7 @@ static uint8_t getReadNameLength(const BAMAlignment *cself) {
 }
 
 static uint16_t getBin(const BAMAlignment *cself) {
-    uint16_t y;
-    
-    memcpy(&y, cself->data->cooked.bin, 2);
-    return LE2HUI16(&y);
+    return LE2HUI16(cself->data->cooked.bin);
 }
 
 static uint8_t getMapQual(const BAMAlignment *cself) {
@@ -558,51 +752,131 @@ static uint8_t getMapQual(const BAMAlignment *cself) {
 }
 
 static uint16_t getCigarCount(const BAMAlignment *cself) {
-    uint16_t y;
-    
-    memcpy(&y, cself->data->cooked.n_cigars, 2);
-    return LE2HUI16(&y);
+    return LE2HUI16(cself->data->cooked.n_cigars);
 }
 
 static uint16_t getFlags(const BAMAlignment *cself) {
-    uint16_t y;
-    
-    memcpy(&y, cself->data->cooked.flags, 2);
-    return LE2HUI16(&y);
+    return LE2HUI16(cself->data->cooked.flags);
 }
 
 static uint32_t getReadLen(const BAMAlignment *cself) {
-    uint32_t y;
-    
-    memcpy(&y, cself->data->cooked.read_len, 4);
-    return LE2HUI32(&y);
+    return LE2HUI32(cself->data->cooked.read_len);
 }
 
 static int32_t getMateRefSeqId(const BAMAlignment *cself) {
-    int32_t y;
-    
-    memcpy(&y, cself->data->cooked.mate_rID, 4);
-    return LE2HI32(&y);
+    return LE2HI32(cself->data->cooked.mate_rID);
 }
 
 static int32_t getMatePos(const BAMAlignment *cself) {
-    int32_t y;
-    
-    memcpy(&y, cself->data->cooked.mate_pos, 4);
-    return LE2HI32(&y);
+    return LE2HI32(cself->data->cooked.mate_pos);
 }
 
 static int32_t getInsertSize(const BAMAlignment *cself) {
-    int32_t y;
-    
-    memcpy(&y, cself->data->cooked.ins_size, 4);
-    return LE2HI32(&y);
+    return LE2HI32(cself->data->cooked.ins_size);
 }
 
-static const char *getReadName(const BAMAlignment *cself) {
+static char const *getReadName(const BAMAlignment *cself) {
     return &cself->data->cooked.read_name[0];
 }
 
+static void const *getCigarBase(BAMAlignment const *cself)
+{
+    return &cself->data->raw[cself->cigar];
+}
+
+static int opt_tag_cmp(uint8_t const a[2], uint8_t const b[2])
+{
+    int const d0 = (int)a[0] - (int)b[0];
+    return d0 ? d0 : ((int)a[1] - (int)b[1]);
+}
+
+static int CC OptTag_sort(void const *a, void const *b, void *ctx)
+{
+    BAMAlignment const *const self = ctx;
+    unsigned const a_off = ((struct offset_size_s const *)a)->offset;
+    unsigned const b_off = ((struct offset_size_s const *)b)->offset;
+    
+    return opt_tag_cmp(&self->data->raw[a_off], &self->data->raw[b_off]);
+}
+
+static int CC OptTag_cmp(void const *key, void const *item, void *ctx)
+{
+    BAMAlignment const *const self = ctx;
+    unsigned const offset = ((struct offset_size_s const *)item)->offset;
+    
+    return opt_tag_cmp(key, &self->data->raw[offset]);
+}
+
+static char const *get_RG(BAMAlignment const *cself)
+{
+    struct offset_size_s const *const x = kbsearch("RG", cself->extra, cself->numExtra, sizeof(cself->extra[0]), OptTag_cmp, (void *)cself);
+    return (char const *)(x && cself->data->raw[x->offset + 2] == 'Z' ? &cself->data->raw[x->offset + 3] : NULL);
+}
+
+static struct offset_size_s const *get_CS_info(BAMAlignment const *cself)
+{
+    return kbsearch("CS", cself->extra, cself->numExtra, sizeof(cself->extra[0]), OptTag_cmp, (void *)cself);
+}
+
+static struct offset_size_s const *get_CQ_info(BAMAlignment const *cself)
+{
+    return kbsearch("CQ", cself->extra, cself->numExtra, sizeof(cself->extra[0]), OptTag_cmp, (void *)cself);
+}
+
+static char const *get_CS(BAMAlignment const *cself)
+{
+    struct offset_size_s const *const x = get_CS_info(cself);
+    return (char const *)(x && cself->data->raw[x->offset + 2] == 'Z' ? &cself->data->raw[x->offset + 3] : NULL);
+}
+
+static uint8_t const *get_CQ(BAMAlignment const *cself)
+{
+    struct offset_size_s const *const x = get_CQ_info(cself);
+    return (uint8_t const *)(x && cself->data->raw[x->offset + 2] == 'Z' ? &cself->data->raw[x->offset + 3] : NULL);
+}
+
+static struct offset_size_s const *get_OQ_info(BAMAlignment const *cself)
+{
+    return kbsearch("OQ", cself->extra, cself->numExtra, sizeof(cself->extra[0]), OptTag_cmp, (void *)cself);
+}
+
+static uint8_t const *get_OQ(BAMAlignment const *cself)
+{
+    struct offset_size_s const *const x = get_OQ_info(cself);
+    return (uint8_t const *)(x && cself->data->raw[x->offset + 2] == 'Z' ? &cself->data->raw[x->offset + 3] : NULL);
+}
+
+static char const *get_XT(BAMAlignment const *cself)
+{
+    struct offset_size_s const *const x = kbsearch("XT", cself->extra, cself->numExtra, sizeof(cself->extra[0]), OptTag_cmp, (void *)cself);
+    return (char const *)(x && cself->data->raw[x->offset + 2] == 'Z' ? &cself->data->raw[x->offset + 3] : NULL);
+}
+
+static struct offset_size_s const *get_CG_ZA_info(BAMAlignment const *cself)
+{
+    return kbsearch("ZA", cself->extra, cself->numExtra, sizeof(cself->extra[0]), OptTag_cmp, (void *)cself);
+}
+
+static struct offset_size_s const *get_CG_ZI_info(BAMAlignment const *cself)
+{
+    return kbsearch("ZI", cself->extra, cself->numExtra, sizeof(cself->extra[0]), OptTag_cmp, (void *)cself);
+}
+
+static struct offset_size_s const *get_CG_GC_info(BAMAlignment const *cself)
+{
+    return kbsearch("GC", cself->extra, cself->numExtra, sizeof(cself->extra[0]), OptTag_cmp, (void *)cself);
+}
+
+static struct offset_size_s const *get_CG_GS_info(BAMAlignment const *cself)
+{
+    return kbsearch("GS", cself->extra, cself->numExtra, sizeof(cself->extra[0]), OptTag_cmp, (void *)cself);
+}
+
+static struct offset_size_s const *get_CG_GQ_info(BAMAlignment const *cself)
+{
+    return kbsearch("GQ", cself->extra, cself->numExtra, sizeof(cself->extra[0]), OptTag_cmp, (void *)cself);
+}
+
 static rc_t BAMFileReadn(BAMFile *self, const unsigned len, uint8_t dst[/* len */]) {
     rc_t rc;
     unsigned cur;
@@ -630,14 +904,14 @@ static rc_t BAMFileReadn(BAMFile *self, const unsigned len, uint8_t dst[/* len *
              *    self->fpos_cur == BGZFileGetPos(&self->file)
              * is already true.
              */
-            self->fpos_cur = BGZFileGetPos(&self->file);
+            self->fpos_cur = self->vt.FileGetPos(&self->file);
             self->bufCurrent = 0;
             self->bufSize = 0;
             if (cur + n == len)
                 return 0;
         }
 
-        rc = BGZFileRead(&self->file, self->buffer, &self->bufSize);
+        rc = self->vt.FileRead(&self->file, self->buffer, &self->bufSize);
         if (rc)
             return rc;
         if (self->bufSize == 0 || self->bufSize <= self->bufCurrent)
@@ -645,312 +919,410 @@ static rc_t BAMFileReadn(BAMFile *self, const unsigned len, uint8_t dst[/* len *
     }
 }
 
-static rc_t BAMFileReadUI32(BAMFile *self, uint32_t *rhs) {
-    uint8_t buf[sizeof(*rhs)];
-    rc_t rc = BAMFileReadn(self, sizeof(buf), buf);
+static rc_t BAMFileReadI32(BAMFile *self, int32_t *rhs)
+{
+    uint8_t buf[sizeof(int32_t)];
+    rc_t rc = BAMFileReadn(self, sizeof(int32_t), buf);
+    
     if (rc == 0)
-        *rhs = LE2HUI32(buf);
+        *rhs = LE2HI32(buf);
     return rc;
 }
 
-static int CC comp_ReadGroup(const void *A, const void *B, void * ignored) {
-    const BAMReadGroup *a = (const BAMReadGroup *)A;
-    const BAMReadGroup *b = (const BAMReadGroup *)B;
-    
-    if (a->name == NULL) {
-        if (b->name)
-            return -1;
-        else
-            return 0;
-    }
-    if (b->name == NULL) {
-        if (a->name)
-            return 1;
-        else
-            return 0;
-    }
-    return strcmp(a->name, b->name);
+static int CC comp_ReadGroup(const void *a, const void *b, void *ignored) {
+    return strcmp(((BAMReadGroup const *)a)->name, ((BAMReadGroup const *)b)->name);
 }
 
-static int CC comp_RefSeqName ( const void *A, const void *B, void * ignored ) {
-    const BAMRefSeq *a = *(const BAMRefSeq **)A;
-    const BAMRefSeq *b = *(const BAMRefSeq **)B;
-    
-    if (a->name == NULL) {
-        if (b->name)
-            return -1;
-        else
-            return 0;
+static rc_t ParseHD(BAMFile *self, char hdata[], unsigned hlen, unsigned *used)
+{
+    unsigned i;
+    unsigned tag;
+    unsigned value;
+    int st = 0;
+    int ws = 1;
+
+    for (i = 0; i < hlen; ++i) {
+        char const cc = hdata[i];
+        
+        if (ws && isspace(cc))
+            continue;
+        ws = 0;
+        
+        switch (st) {
+        case 0:
+            tag = i;
+            ++st;
+            break;
+        case 1:
+            if (isspace(cc))
+                return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+            ++st;
+            break;
+        case 2:
+            if (cc != ':')
+                return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+            hdata[i] = '\0';
+            value = i + 1;
+            ++st;
+            break;
+        case 3:
+            if (cc == '\t' || cc == '\r' || cc == '\n') {
+                hdata[i] = '\0';
+                
+                if (strcmp(&hdata[tag], "VN") == 0)
+                    self->version = &hdata[value];
+                
+                ++st;
+                ws = 1;
+            }
+            break;
+        case 4:
+            if (cc == '@')
+                goto DONE;
+            tag = i;
+            st = 1;
+            break;
+        }
     }
-    if (b->name == NULL) {
-        if (a->name)
-            return 1;
-        else
-            return 0;
+    if (st == 4) {
+DONE:
+        *used = i;
+        return 0;
     }
-    return strcmp(a->name, b->name);
+    return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
 }
 
-static rc_t ParseHeader(BAMFile *self, char hdata[], size_t hlen, const BAMRefSeq ** rs_by_name) {
-    unsigned readGroups = 0;
-    const char *const endp = hdata + hlen;
-    const char *token = NULL, *value = NULL;
-    int st = 0, eat_ws = 1;
+static rc_t ParseSQ(BAMFile *self, char hdata[], unsigned hlen, unsigned *used, unsigned const rs_by_name[])
+{
+    unsigned i;
+    unsigned tag;
+    unsigned value;
+    int st = 0;
+    int ws = 1;
     BAMRefSeq rs;
     
-#define ST_HD_START 10
-#define ST_SQ_START 20
-#define ST_RG_START 30
-
-    while (hdata != endp) {
-        if (eat_ws && isspace(*hdata)) {
-            ++hdata;
+    memset(&rs, 0, sizeof(rs));
+    
+    for (i = 0; i < hlen; ++i) {
+        char const cc = hdata[i];
+        
+        if (ws && isspace(cc))
             continue;
-        }
-        else
-            eat_ws = 0;
+        ws = 0;
         
         switch (st) {
-            case 0:
-                if (*hdata == '@')
-                    ++st;
-                else
-                    return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
-                break;
-            case 1:
-                if (isspace(*hdata))
-                    return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
-                token = hdata;
-                ++st;
-                break;
-            case 2:
-                if (isspace(*hdata)) {
-                    *hdata = '\0';
-                    if (hdata - token == 2) {
-                        eat_ws = 1;
-                        if (strcmp(token, "HD") == 0)
-                            st = ST_HD_START;
-                        else if (strcmp(token, "SQ") == 0)
-                            st = ST_SQ_START;
-                        else if (strcmp(token, "RG") == 0)
-                            st = ST_RG_START;
-                    }
-                    if (st == 2) {
-                        ++st;
-                        eat_ws = 0;
-                    }
-                }
-                else if (hdata - token > 2)
-                    ++st;
-                break;
-            case 3:
-                if (*hdata == '\r' || *hdata == '\n') {
-                    st = 0;
-                    eat_ws = 1;
-                }
-                break;
-            case ST_HD_START:
-                token = hdata;
-                ++st;
-                break;
-            case ST_HD_START + 1:
-                if (isspace(*hdata))
-                    return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
-                ++st;
-                break;
-            case ST_HD_START + 2:
-                if (*hdata != ':')
+        case 0:
+            tag = i;
+            ++st;
+            break;
+        case 1:
+            if (isspace(cc))
+                return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+            ++st;
+            break;
+        case 2:
+#define HACKAMATIC 1
+#if HACKAMATIC
+            if (cc != ':') {
+                if (i + 1 >= hlen || hdata[i+1] != ':')
                     return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
-                *hdata = '\0';
-                eat_ws = 1;
-                ++st;
-                break;
-            case ST_HD_START + 3:
-                value = hdata;
-                ++st;
-                break;
-            case ST_HD_START + 4:
-                if (*hdata == '\t' || *hdata == '\r' || *hdata == '\n') {
-                    *hdata = '\0';
-                    
-                    if (strcmp(token, "VN") == 0)
-                        self->version = value;
-                    
-                    ++st;
-                    eat_ws = 1;
-                }
-                break;
-            case ST_HD_START + 5:
-                if (*hdata == '@')
-                    st = 1;
-                else {
-                    token = hdata;
-                    st = ST_HD_START + 1;
-                }
-                break;
+                else
+                    ++i;
+            }
+#else
+            if (cc != ':')
+                return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+#endif
+            hdata[i] = '\0';
+            value = i + 1;
+            ++st;
+            break;
+        case 3:
+            if (cc == '\t' || cc == '\r' || cc == '\n') {
+                unsigned j;
                 
+                hdata[i] = '\0';
                 
-            case ST_SQ_START:
-                memset(&rs, 0, sizeof(rs));
-                token = hdata;
-                ++st;
-                break;
-            case ST_SQ_START + 1:
-                if (isspace(*hdata))
-                    return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
-                ++st;
-                break;
-            case ST_SQ_START + 2:
-                if (*hdata != ':')
-                    return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
-                *hdata = '\0';
-                eat_ws = 1;
-                ++st;
-                break;
-            case ST_SQ_START + 3:
-                value = hdata;
-                ++st;
-                break;
-            case ST_SQ_START + 4:
-                if (*hdata == '\t' || *hdata == '\r' || *hdata == '\n') {
-                    *hdata = '\0';
+                while (value < i && isspace(hdata[value]))
+                    ++value;
+                for (j = i; value < j && isspace(hdata[j - 1]); )
+                    hdata[--j] = '\0';
+                
+                if (strcmp(&hdata[tag], "SN") == 0)
+                    rs.name = &hdata[value];
+                else if (strcmp(&hdata[tag], "LN") == 0)
+                    rs.length = strtou64(&hdata[value], NULL, 10);
+                else if (strcmp(&hdata[tag], "AS") == 0)
+                    rs.assemblyId = &hdata[value];
+#if HACKAMATIC
+                else if (strcmp(&hdata[tag], "M5") == 0 || strcmp(&hdata[tag], "MD5") == 0)
+#else
+                else if (strcmp(&hdata[tag], "M5") == 0)
+#endif
+#undef HACKAMATIC
+                {
+                    unsigned len = j - value;
                     
-                    if (strcmp(token, "SN") == 0)
-                        rs.name = value;
-                    else if (strcmp(token, "LN") == 0)
-                        rs.length = strtou64(value, NULL, 10);
-                    else if (strcmp(token, "AS") == 0)
-                        rs.assemblyId = value;
-                    else if (strcmp(token, "M5") == 0) {
-                        unsigned len = hdata - value;
-                        
-                        while (isspace(value[len - 1]))
-                            --len;
-                        
-                        if ((value[0] == '\'' || value[0] == '"') && value[len - 1] == value[0]) {
-                            ++value;
-                            len -= 2;
-                        }
-                        if (len == 32) {
-                            unsigned i;
-                            
-                            rs.checksum = &rs.checksum_array[0];
-                            for (i = 0; i != 16; ++i) {
-                                int const ch1 = toupper(value[i * 2 + 0]);
-                                int const ch2 = toupper(value[i * 2 + 1]);
-                                
-                                if (isxdigit(ch1) && isxdigit(ch2)) {
-                                    rs.checksum_array[i] =
-                                        ((ch1 > '9' ? (ch1 - ('A' - 10)) : (ch1 - '0')) << 4) +
-                                         (ch2 > '9' ? (ch2 - ('A' - 10)) : (ch2 - '0'));
-                                }
-                                else {
-                                    rs.checksum = NULL;
-                                    break;
-                                }
-                            }
-                        }
+                    if ((hdata[value] == '\'' || hdata[value] == '"') && hdata[value + len - 1] == hdata[value]) {
+                        ++value;
+                        len -= 2;
                     }
-                    else if (strcmp(token, "UR") == 0)
-                        rs.uri = value;
-                    else if (strcmp(token, "SP") == 0)
-                        rs.species = value;
-                    
-                    ++st;
-                    eat_ws = 1;
-                }
-                break;
-            case ST_SQ_START + 5:
-                if (*hdata == '@') {
-                    if (rs.name != NULL) {
-                        BAMRefSeq *y = &rs, **xx = kbsearch( &y, rs_by_name, self->refSeqs, sizeof(y), comp_RefSeqName, NULL );
-
-                        if (xx != NULL) {
-                            BAMRefSeq *x = *xx;
+                    if (len == 32) {
+                        rs.checksum = &rs.checksum_array[0];
+                        for (j = 0; j != 16; ++j) {
+                            int const ch1 = toupper(hdata[value + j * 2 + 0]);
+                            int const ch2 = toupper(hdata[value + j * 2 + 1]);
                             
-                            x->assemblyId = rs.assemblyId;
-                            if (rs.checksum) {
-                                x->checksum = &x->checksum_array[0];
-                                memcpy(x->checksum_array, rs.checksum_array, 16);
+                            if (isxdigit(ch1) && isxdigit(ch2)) {
+                                rs.checksum_array[j] =
+                                    ((ch1 > '9' ? (ch1 - ('A' - 10)) : (ch1 - '0')) << 4) +
+                                     (ch2 > '9' ? (ch2 - ('A' - 10)) : (ch2 - '0'));
+                            }
+                            else {
+                                rs.checksum = NULL;
+                                break;
                             }
-                            else
-                                x->checksum = NULL;
-                            x->uri = rs.uri;
-                            x->species = rs.species;
                         }
                     }
-                    st = 1;
                 }
-                else {
-                    token = hdata;
-                    st = ST_SQ_START + 1;
+                else if (strcmp(&hdata[tag], "UR") == 0)
+                    rs.uri = &hdata[value];
+                else if (strcmp(&hdata[tag], "SP") == 0)
+                    rs.species = &hdata[value];
+                
+                ++st;
+                ws = 1;
+            }
+            break;
+        case 4:
+            if (cc == '@')
+                goto DONE;
+            tag = i;
+            st = 1;
+            break;
+        }
+    }
+DONE:
+    if (st == 4) {
+        unsigned f = 0;
+        unsigned e = self->refSeqs;
+        
+        if (rs.name == NULL) /* required tags */
+            return RC(rcAlign, rcFile, rcParsing, rcConstraint, rcViolated);
+        
+        while (f < e) {
+            unsigned const m = (f + e) >> 1;
+            BAMRefSeq *const x = &self->refSeq[rs_by_name[m]];
+            int const cmp = strcmp(rs.name, x->name);
+            
+            if (cmp < 0)
+                e = m;
+            else if (cmp > 0)
+                f = m + 1;
+            else {
+                x->assemblyId = rs.assemblyId;
+                x->uri = rs.uri;
+                x->species = rs.species;
+                if (rs.checksum) {
+                    x->checksum = &x->checksum_array[0];
+                    memcpy(x->checksum_array, rs.checksum_array, 16);
                 }
+                else
+                    x->checksum = NULL;
                 break;
+            }
+        }
+        *used = i;
+        return 0;
+    }
+    return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+}
+
+static rc_t ParseRG(BAMFile *self, char hdata[], unsigned hlen, unsigned *used, BAMReadGroup *dst)
+{
+    unsigned i;
+    unsigned tag;
+    unsigned value;
+    int st = 0;
+    int ws = 1;
+#if _DEBUGGING
+    char const *cur = hdata;
+#endif
+    
+    memset(dst, 0, sizeof(*dst));
+    
+    for (i = 0; i < hlen; ++i) {
+        char const cc = hdata[i];
+        
+        if (ws && isspace(cc))
+            continue;
+        ws = 0;
+        
+        switch (st) {
+        case 0:
+            tag = i;
+            ++st;
+            break;
+        case 1:
+            if (isspace(cc))
+                return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+            ++st;
+            break;
+        case 2:
+            if (cc != ':')
+                return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+#if _DEBUGGING
+            cur = hdata + i + 1;
+#endif
+            hdata[i] = '\0';
+            value = i + 1;
+            ++st;
+            break;
+        case 3:
+            if (cc == '\t' || cc == '\r' || cc == '\n') {
+                unsigned j = i;
+#if _DEBUGGING
+                cur = hdata + i + 1;
+#endif
+                hdata[i] = '\0';
+
+                while (value < i && isspace(hdata[value]))
+                    ++value;
+                while (value < j && isspace(hdata[j - 1]))
+                    hdata[--j] = '\0';
                 
+                if ((hdata[value] == '\"' || hdata[value] == '\'') && hdata[value] == hdata[j - 1]) {
+                    ++value;
+                    hdata[j - 1] = '\0';
+                }
+                if (strcmp(&hdata[tag], "ID") == 0)
+                    dst->name = &hdata[value];
+                else if (strcmp(&hdata[tag], "SM") == 0)
+                    dst->sample = &hdata[value];
+                else if (strcmp(&hdata[tag], "LB") == 0)
+                    dst->library = &hdata[value];
+                else if (strcmp(&hdata[tag], "DS") == 0)
+                    dst->description = &hdata[value];
+                else if (strcmp(&hdata[tag], "PU") == 0)
+                    dst->unit = &hdata[value];
+                else if (strcmp(&hdata[tag], "PI") == 0)
+                    dst->insertSize = &hdata[value];
+                else if (strcmp(&hdata[tag], "CN") == 0)
+                    dst->center = &hdata[value];
+                else if (strcmp(&hdata[tag], "DT") == 0)
+                    dst->runDate = &hdata[value];
+                else if (strcmp(&hdata[tag], "PL") == 0)
+                    dst->platform = &hdata[value];
                 
-            case ST_RG_START:
-                token = hdata;
                 ++st;
-                break;
-            case ST_RG_START + 1:
-                if (isspace(*hdata))
-                    return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
-                ++st;
-                break;
-            case ST_RG_START + 2:
-                if (*hdata != ':')
-                    return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
-                *hdata = '\0';
-                eat_ws = 1;
-                ++st;
-                break;
-            case ST_RG_START + 3:
-                value = hdata;
+                ws = 1;
+            }
+            break;
+        case 4:
+            if (cc == '@')
+                goto DONE;
+            tag = i;
+            st = 1;
+            break;
+        }
+    }
+    if (st == 4) {
+DONE:
+        *used = i;
+        if (dst->name == NULL) /* required */
+            return RC(rcAlign, rcFile, rcParsing, rcConstraint, rcViolated);
+        return 0;
+    }
+    return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+}
+
+static rc_t ParseHeader(BAMFile *self, char hdata[], unsigned hlen, unsigned const rs_by_name[]) {
+    unsigned rg = 0;
+    unsigned i;
+    unsigned tag;
+    int st = 0;
+    int ws = 1;
+    unsigned used;
+    rc_t rc;
+    
+    for (i = 0; i < hlen; ++i) {
+        char const cc = hdata[i];
+        
+        if (ws && isspace(cc))
+            continue;
+        ws = 0;
+        
+        switch (st) {
+        case 0:
+            if (cc == '@')
                 ++st;
-                break;
-            case ST_RG_START + 4:
-                if (*hdata == '\t' || *hdata == '\r' || *hdata == '\n') {
-                    *hdata = '\0';
-                    
-                    if (strcmp(token, "ID") == 0)
-                        self->readGroup[readGroups].name = value;
-                    else if (strcmp(token, "SM") == 0)
-                        self->readGroup[readGroups].sample = value;
-                    else if (strcmp(token, "LB") == 0)
-                        self->readGroup[readGroups].library = value;
-                    else if (strcmp(token, "DS") == 0)
-                        self->readGroup[readGroups].description = value;
-                    else if (strcmp(token, "PU") == 0)
-                        self->readGroup[readGroups].unit = value;
-                    else if (strcmp(token, "PI") == 0)
-                        self->readGroup[readGroups].insertSize = value;
-                    else if (strcmp(token, "CN") == 0)
-                        self->readGroup[readGroups].center = value;
-                    else if (strcmp(token, "DT") == 0)
-                        self->readGroup[readGroups].runDate = value;
-                    else if (strcmp(token, "PL") == 0)
-                        self->readGroup[readGroups].platform = value;
-                    
-                    ++st;
-                    eat_ws = 1;
-                }
-                break;
-            case ST_RG_START + 5:
-                if (*hdata == '@') {
-                    ++readGroups;
-                    st = 1;
+            else
+                return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+            break;
+        case 1:
+            if (isspace(cc))
+                return RC(rcAlign, rcFile, rcParsing, rcData, rcInvalid);
+            tag = i;
+            ++st;
+            break;
+        case 2:
+            if (isspace(cc)) {
+                hdata[i] = '\0';
+                if (i - tag == 2) {
+                    if (strcmp(&hdata[tag], "HD") == 0) {
+                        rc = ParseHD(self, &hdata[i + 1], hlen - i - 1, &used);
+                        if (rc) return rc;
+                        i += used;
+                        st = 0;
+                    }
+                    else if (strcmp(&hdata[tag], "SQ") == 0) {
+                        rc = ParseSQ(self, &hdata[i + 1], hlen - i - 1, &used, rs_by_name);
+                        if (rc) return rc;
+                        i += used;
+                        st = 0;
+                    }
+                    else if (strcmp(&hdata[tag], "RG") == 0) {
+                        rc = ParseRG(self, &hdata[i + 1], hlen - i - 1, &used, &self->readGroup[rg]);
+                        if (GetRCObject(rc) == rcConstraint && GetRCState(rc) == rcViolated) {
+                            (void)LOGERR(klogWarn, rc, "Read Group is missing ID in BAM header");
+                            rc = 0;
+                            if (self->readGroups) --self->readGroups;
+                        }
+                        else if (rc)
+                            return rc;
+                        else
+                            ++rg;
+                        i += used;
+                        st = 0;
+                    }
                 }
-                else {
-                    token = hdata;
-                    st = ST_RG_START + 1;
+                if (st == 2) {
+                    ++st;
+                    ws = 0;
                 }
-                break;
+            }
+            else if (i - tag > 2)
+                ++st;
+            break;
+        case 3:
+            if (cc == '\r' || cc == '\n') {
+                st = 0;
+                ws = 1;
+            }
+            break;
         }
-        ++hdata;
     }
     ksort( self->readGroup, self->readGroups, sizeof(self->readGroup[0]), comp_ReadGroup, NULL );
-    for (readGroups = 0; readGroups != self->readGroups; ++readGroups)
-        self->readGroup[readGroups].id = readGroups;
+    for (rg = 0; rg != self->readGroups; ++rg) {
+        if (rg > 0 && strcmp(self->readGroup[rg - 1].name, self->readGroup[rg].name) == 0)
+            return RC(rcAlign, rcFile, rcParsing, rcConstraint, rcViolated);  /* name must be unique */
+        self->readGroup[rg].id = rg;
+    }
+    for (i = 0; i < self->refSeqs; ++i) {
+        if (self->refSeq[i].length == 0) {
+            (void)PLOGMSG(klogWarn, (klogWarn, "Reference '$(ref)' has zero length", "ref=%s", self->refSeq[i].name));
+        }
+    }
     
     return 0;
 }
@@ -974,124 +1346,200 @@ static rc_t CountReadGroups(char const txt[], size_t len, unsigned *reads) {
     return 0;
 }
 
-static rc_t ProcessHeader(BAMFile *self) {
-    rc_t rc;
-    uint8_t magic[4];
-    uint32_t hlen;
+static rc_t ReadMagic(BAMFile *self)
+{
+    uint8_t sig[4];
+    rc_t rc = BAMFileReadn(self, 4, sig);
+    
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM signature: '%c%c%c' %u\n", sig[0], sig[1], sig[2], sig[3]));
+    if (rc == 0 && (sig[0] != 'B' || sig[1] != 'A' || sig[2] != 'M' || sig[3] != 1))
+        rc = RC(rcAlign, rcFile, rcReading, rcHeader, rcBadVersion);
+    return rc;
+}
+
+static rc_t ReadHeaders(BAMFile *self,
+                        char **headerText, unsigned *headerTextLen,
+                        uint8_t **refData, unsigned *numrefs)
+{
+    unsigned hlen;
+    char *htxt = NULL;
     unsigned nrefs;
-    char *htxt;
-    char *names = NULL;
-    size_t in_names = 0, names_size;
-    struct {
-        size_t name;
-        uint32_t length;
-    } *refs;
-    const BAMRefSeq **rs_by_name = NULL;
-    
-    rc = BAMFileReadn(self, sizeof(magic), magic);
-    if (rc)
-        return rc;
-    if (memcmp(magic, "BAM\1", 4) != 0)
-        return RC(rcAlign, rcFile, rcConstructing, rcData, rcBadVersion);
+    uint8_t *rdat = NULL;
+    unsigned rdsz;
+    unsigned rdms;
+    unsigned i;
+    int32_t i32;
+    rc_t rc = BAMFileReadI32(self, &i32);
+    
+    if (rc) return rc;
 
-    rc = BAMFileReadUI32(self, &hlen);
-    if (rc)
-        return rc;
+    if (i32 < 0) {
+        rc = RC(rcAlign, rcFile, rcReading, rcHeader, rcInvalid);
+        goto BAILOUT;
+    }
+    hlen = i32;
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM Header text size: %u\n", hlen));
+    if (hlen) {
+        htxt = malloc(hlen + 1);
+        if (htxt == NULL) {
+            rc = RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+            goto BAILOUT;
+        }
+        
+        rc = BAMFileReadn(self, hlen, (uint8_t *)htxt); if (rc) goto BAILOUT;
+        htxt[hlen] = '\0';
+    }
+    rc = BAMFileReadI32(self, &i32); if (rc) goto BAILOUT;
+    if (i32 < 0) {
+        rc = RC(rcAlign, rcFile, rcReading, rcHeader, rcInvalid);
+        goto BAILOUT;
+    }
+    nrefs = i32;
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM Header reference count: %u\n", nrefs));
+    if (nrefs) {
+        rdms = nrefs * 16;
+        if (rdms < 4096)
+            rdms = 4096;
+        rdat = malloc(rdms);
+        if (rdat == NULL) {
+            rc = RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+            goto BAILOUT;
+        }
+        for (i = rdsz = 0; i < nrefs; ++i) {
+            rc = BAMFileReadI32(self, &i32); if (rc) goto BAILOUT;
+            if (i32 <= 0) {
+                rc = RC(rcAlign, rcFile, rcReading, rcHeader, rcInvalid);
+                goto BAILOUT;
+            }
+            if (rdsz + i32 + 8 > rdms) {
+                void *tmp;
+                
+                do { rdms <<= 1; } while (rdsz + i32 + 8 > rdms);
+                tmp = realloc(rdat, rdms);
+                if (tmp == NULL) {
+                    rc = RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+                    goto BAILOUT;
+                }
+                rdat = tmp;
+            }
+            memcpy(rdat + rdsz, &i32, 4);
+            rdsz += 4;
+            rc = BAMFileReadn(self, i32, &rdat[rdsz]); if (rc) goto BAILOUT;
+            rdsz += i32;
+            rc = BAMFileReadI32(self, &i32); if (rc) goto BAILOUT;
+            memcpy(rdat + rdsz, &i32, 4);
+            rdsz += 4;
+        }
+    }
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM Header reference size: %u\n", rdsz));
     
-    self->header = htxt = malloc(hlen + 1);
-    if (htxt == NULL)
-        return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+    *headerText = htxt;
+    *headerTextLen = hlen;
+    *refData = rdat;
+    *numrefs = nrefs;
+    return 0;
     
-    self->headerData1 = htxt = malloc(hlen + 1);
-    if (htxt == NULL)
-        return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+BAILOUT:
+    if (htxt)
+        free(htxt);
+    if (rdat)
+        free(rdat);
     
-    rc = BAMFileReadn(self, hlen, (uint8_t *)htxt);
-    if (rc == 0) {
-        htxt[hlen] = 0;
+    return rc;
+}
+
+static int CC comp_RefSeqName(const void *A, const void *B, void *ignored) {
+    BAMFile const *self = (BAMFile const *)ignored;
+    unsigned const a = *(unsigned const *)A;
+    unsigned const b = *(unsigned const *)B;
+    
+    return strcmp(self->refSeq[a].name, self->refSeq[b].name);
+}
+
+static rc_t ProcessHeader(BAMFile *self, char const headerText[])
+{
+    unsigned *rs_by_name = NULL;
+    unsigned i;
+    unsigned cp;
+    char *htxt;
+    uint8_t *rdat;
+    unsigned hlen;
+    unsigned nrefs;
+    rc_t rc = ReadMagic(self);
+
+    if (rc) return rc;
+
+    rc = ReadHeaders(self, &htxt, &hlen, &rdat, &nrefs);
+    if (rc) return rc;
+    
+    self->fpos_first = self->fpos_cur;
+    self->ucfirst = self->bufCurrent;
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM Data records start at: %lu+%u\n", self->ucfirst, self->fpos_first));
+
+    if (headerText) {
+        free(htxt);
+        hlen = string_size( headerText );
+        htxt = malloc(hlen + 1);
+        if (htxt == NULL) {
+            free(rdat);
+            return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+        }
+        memcpy(htxt, headerText, hlen + 1);
+    }
+    
+    self->headerData2 = rdat;
+    if (hlen) {
+        self->header = htxt;
+        self->headerData1 = malloc(hlen + 1);
+        if (self->headerData1 == NULL)
+            return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+        memcpy(self->headerData1, self->header, hlen + 1);
+    }
+    else {
+        htxt = malloc(1);
+        htxt[0] = '\0';
+        self->header = htxt;
+        self->headerData1 = NULL;
+    }
+    self->refSeqs = nrefs;
+    if (nrefs) {
+        self->refSeq = calloc(nrefs, sizeof(self->refSeq[0]));
+        if (self->refSeq == NULL)
+            return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
         
-        memcpy((char *)self->header, htxt, hlen + 1);
+        rs_by_name = calloc(nrefs, sizeof(rs_by_name[0]));
+        if (rs_by_name == NULL)
+            return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
         
-        rc = BAMFileReadUI32(self, &nrefs);
-        if (rc == 0) {
-            names = malloc(names_size = 1024);
-            if (names == NULL)
-                rc = RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
-
-            if (rc == 0) {
-                refs = malloc(nrefs * sizeof(refs[0]));
-                if (refs == NULL)
-                    rc = RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
-                else {
-                    int i;
-                    
-                    for (i = 0; i != nrefs; ++i) {
-                        uint32_t namelen;
-                        
-                        rc = BAMFileReadUI32(self, &namelen);
-                        if (rc)
-                            break;
-                        if (namelen + in_names >= names_size) {
-                            void *temp = realloc(names, names_size <<= 1);
-                            
-                            if (temp == NULL) {
-                                rc = RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
-                                break;
-                            }
-                            names = temp;
-                        }
-                        refs[i].name = in_names;
-                        rc = BAMFileReadn(self, namelen, (uint8_t *)&names[in_names]);
-                        if (rc)
-                            break;
-                        rc = BAMFileReadUI32(self, &refs[i].length);
-                        if (rc)
-                            break;
-                        in_names += namelen;
-                    }
-                    if (rc == 0) {
-                        self->refSeqs = nrefs;
-                        self->refSeq = calloc(self->refSeqs, sizeof(self->refSeq[0]));
-                        if (self->refSeq == NULL)
-                            rc = RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
-                    }
-                    if (rc == 0) {
-                        rs_by_name = malloc(self->refSeqs * sizeof(*rs_by_name));
-                        if (rs_by_name == NULL)
-                            rc = RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
-                    }
-                    if (rc == 0) {
-                        self->headerData2 = names;
-                        
-                        for (i = 0; i != nrefs; ++i) {
-                            rs_by_name[i] = self->refSeq + i;
-                            self->refSeq[i].id = i;
-                            self->refSeq[i].name = names + refs[i].name;
-                            self->refSeq[i].length = refs[i].length;
-                        }
-                        /* cast to to quiet a warning from VS C */
-                        ksort( (void*const)rs_by_name, self->refSeqs, sizeof(rs_by_name[0]), comp_RefSeqName, NULL );
-                    }
-                    free(refs);
-                }
-            }
+        for (i = cp = 0; i < nrefs; ++i) {
+            uint32_t nlen;
+            uint32_t rlen;
+            
+            rs_by_name[i] = i;
+            self->refSeq[i].id = i;
+            memcpy(&nlen, &self->headerData2[cp], 4);
+            cp += 4;
+            self->refSeq[i].name = (char const *)&self->headerData2[cp];
+            cp += nlen;
+            memcpy(&rlen, &self->headerData2[cp], 4);
+            self->headerData2[cp] = 0;
+            cp += 4;
+            self->refSeq[i].length = rlen;
         }
+        ksort((void *)rs_by_name, self->refSeqs, sizeof(rs_by_name[0]), comp_RefSeqName, self);
+    }
+    if (self->headerData1) {
+        rc = CountReadGroups(self->headerData1, hlen, &self->readGroups);
         if (rc == 0) {
-            self->fpos_first = self->fpos_cur;
-            self->ucfirst = self->bufCurrent;
-
-            rc = CountReadGroups(htxt, hlen, &self->readGroups);
-            if (rc == 0) {
-                self->readGroup = calloc(self->readGroups, sizeof(self->readGroup[0]));
-                if (self->readGroup != NULL)
-                    rc = ParseHeader(self, htxt, hlen, rs_by_name);
-                else
-                    rc = RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
-            }
+            self->readGroup = calloc(self->readGroups, sizeof(self->readGroup[0]));
+            if (self->readGroup != NULL)
+                rc = ParseHeader(self, self->headerData1, hlen, rs_by_name);
+            else
+                rc = RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
         }
     }
-    if ( rs_by_name != NULL )
-        free( (void*) rs_by_name );
+    if (rs_by_name != NULL)
+        free((void *)rs_by_name);
     
     return rc;
 }
@@ -1111,13 +1559,17 @@ static rc_t BAMFileWhack(BAMFile *self) {
         free((void *)self->headerData2);
     if (self->ndx)
         BAMIndexWhack(self->ndx);
-    BGZFileWhack(&self->file);
+    if (self->vt.FileWhack)
+        self->vt.FileWhack(&self->file);
 
     return 0;
 }
 
 /* file is retained */
-LIB_EXPORT rc_t CC BAMFileMakeWithKFile(const BAMFile **cself, const KFile *file)
+static rc_t BAMFileMakeWithKFileAndHeader(BAMFile const **cself,
+                                          KFile const *file,
+                                          char const *headerText,
+                                          bool threaded)
 {
     BAMFile *self = calloc(1, sizeof(*self));
     rc_t rc;
@@ -1125,11 +1577,16 @@ LIB_EXPORT rc_t CC BAMFileMakeWithKFile(const BAMFile **cself, const KFile *file
     if (self == NULL)
         return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
     
-    memset(self, 0, sizeof(*self));
     atomic32_set(&self->refcount, 1);
-    rc = BGZFileInit(&self->file, file);
+#ifndef WINDOWS
+    if (threaded)
+        rc = BGZThreadFileInit(&self->file.thread, file, &self->vt);
+    else
+#endif
+        rc = BGZFileInit(&self->file.plain, file, &self->vt);
+
     if (rc == 0) {
-        rc = ProcessHeader(self);
+        rc = ProcessHeader(self, headerText);
         if (rc == 0) {
             *cself = self;
             return 0;
@@ -1139,6 +1596,12 @@ LIB_EXPORT rc_t CC BAMFileMakeWithKFile(const BAMFile **cself, const KFile *file
     return rc;
 }
 
+/* file is retained */
+LIB_EXPORT rc_t CC BAMFileMakeWithKFile(const BAMFile **cself, const KFile *file)
+{
+    return BAMFileMakeWithKFileAndHeader(cself, file, NULL, false);
+}
+
 LIB_EXPORT rc_t CC BAMFileVMakeWithDir(const BAMFile **result,
                                          const KDirectory *dir,
                                          const char *path,
@@ -1192,13 +1655,40 @@ LIB_EXPORT rc_t CC BAMFileMake(const BAMFile **cself, const char *path, ...)
     return rc;
 }
 
-LIB_EXPORT rc_t CC BAMFileMakeWithKPath(const BAMFile **cself, const KPath *kpath)
+LIB_EXPORT rc_t CC BAMFileMakeWithHeader ( const BAMFile **cself,
+                                          char const headerText[],
+                                          char const path[], ... )
+{
+    KDirectory *dir;
+    va_list args;
+    rc_t rc;
+    const KFile *kf;
+    
+    if (cself == NULL)
+        return RC(rcAlign, rcFile, rcOpening, rcParam, rcNull);
+    *cself = NULL;
+    
+    rc = KDirectoryNativeDir(&dir);
+    if (rc) return rc;
+    va_start(args, path);
+    rc = KDirectoryVOpenFileRead(dir, &kf, path, args);
+    if (rc == 0) {
+        rc = BAMFileMakeWithKFileAndHeader(cself, kf, headerText, false);
+        KFileRelease(kf);
+    }
+    va_end(args);
+    KDirectoryRelease(dir);
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC BAMFileMakeWithVPath(const BAMFile **cself, const VPath *kpath)
 {
     char path[4096];
     size_t nread;
     rc_t rc;
 
-    rc = KPathReadPath(kpath, path, sizeof(path), &nread);
+    rc = VPathReadPath(kpath, path, sizeof(path), &nread);
     if (rc == 0)
         rc = BAMFileMake(cself, "%.*s", (int)nread, path);
     return rc;
@@ -1226,93 +1716,188 @@ LIB_EXPORT rc_t CC BAMFileRelease(const BAMFile *cself) {
     return rc;
 }
 
-LIB_EXPORT float CC BAMFileGetProportionalPosition(const BAMFile *self)
-{
-    return BGZFileProPos(&self->file);
-}
-
-LIB_EXPORT rc_t CC BAMFileGetPosition(const BAMFile *self, BAMFilePosition *pos) {
-    *pos = (self->fpos_cur << 16) | self->bufCurrent;
-    return 0;
-}
-
-static rc_t BAMFileSetPositionInt(const BAMFile *cself, uint64_t fpos, uint16_t bpos)
-{
-    BAMFile *self = (BAMFile *)cself;
-    
-    if (cself->fpos_first > fpos || fpos > cself->file.fsize ||
-        (fpos == cself->fpos_first && bpos < cself->ucfirst))
-    {
-        return RC(rcAlign, rcFile, rcPositioning, rcParam, rcInvalid);
-    }
-    if (cself->fpos_cur == fpos) {
-        if (bpos <= cself->bufSize) {
-            self->eof = false;
-            self->bufCurrent = bpos;
-            return 0;
-        }
-        return RC(rcAlign, rcFile, rcPositioning, rcParam, rcInvalid);
-    }
-    BGZFileSetPos(&self->file, fpos);
-    self->eof = false;
-    self->bufSize = 0; /* force re-read */
-    self->bufCurrent = bpos;
-    self->fpos_cur = fpos;
-    return 0;
-}
-
-LIB_EXPORT rc_t CC BAMFileSetPosition(const BAMFile *cself, const BAMFilePosition *pos)
-{
-    return BAMFileSetPositionInt(cself, *pos >> 16, (uint16_t)(*pos));
-}
-
-LIB_EXPORT rc_t CC BAMFileRewind(const BAMFile *cself)
+LIB_EXPORT float CC BAMFileGetProportionalPosition(const BAMFile *self)
+{
+    return self->vt.FileProPos(&self->file);
+}
+
+LIB_EXPORT rc_t CC BAMFileGetPosition(const BAMFile *self, BAMFilePosition *pos) {
+    *pos = (self->fpos_cur << 16) | self->bufCurrent;
+    return 0;
+}
+
+static rc_t BAMFileSetPositionInt(const BAMFile *cself, uint64_t fpos, uint16_t bpos)
+{
+    rc_t rc;
+    BAMFile *self = (BAMFile *)cself;
+    
+    if (cself->fpos_first > fpos || fpos > cself->vt.FileGetSize(&cself->file) ||
+        (fpos == cself->fpos_first && bpos < cself->ucfirst))
+    {
+        return RC(rcAlign, rcFile, rcPositioning, rcParam, rcInvalid);
+    }
+    if (cself->fpos_cur == fpos) {
+        if (bpos <= cself->bufSize) {
+            self->eof = false;
+            self->bufCurrent = bpos;
+            return 0;
+        }
+        return RC(rcAlign, rcFile, rcPositioning, rcParam, rcInvalid);
+    }
+    rc = self->vt.FileSetPos(&self->file, fpos);
+    if (rc == 0) {
+        self->eof = false;
+        self->bufSize = 0; /* force re-read */
+        self->bufCurrent = bpos;
+        self->fpos_cur = fpos;
+    }
+    return rc;
+}
+
+LIB_EXPORT rc_t CC BAMFileSetPosition(const BAMFile *cself, const BAMFilePosition *pos)
+{
+    return BAMFileSetPositionInt(cself, *pos >> 16, (uint16_t)(*pos));
+}
+
+LIB_EXPORT rc_t CC BAMFileRewind(const BAMFile *cself)
+{
+    return BAMFileSetPositionInt(cself, cself->fpos_first, cself->ucfirst);
+}
+
+typedef bool (* i_OptData_f)(void *ctx, char const tag[2], BAMOptDataValueType type, unsigned length,
+                             unsigned count, unsigned size, void const *value);
+
+static rc_t ParseOptData(uint8_t const data[], unsigned const n, void *ctx, i_OptData_f f)
+{
+    unsigned i = 0;
+    rc_t rc = 0;
+    
+    while (rc == 0 && i + 3 < n) {
+        char const *const tag = (char const *)&data[i];
+        int type = data[i + 2];
+        uint8_t const *const vp = &data[i + 3];
+        unsigned len = 0;
+        unsigned size = 0;
+        unsigned count = 1;
+        unsigned offset = 0;
+        
+        switch (type) {
+        case dt_CSTRING:
+        case dt_HEXSTRING:
+            len = 0;
+            while (i + len + 3 != n && vp[len] != '\0')
+                ++len;
+            if (i + len + 3 == n) {
+                rc = RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+                break;
+            }
+            size = len;
+            ++len;
+            break;
+        case dt_INT8:
+        case dt_UINT8:
+        case dt_ASCII:
+            size = len = 1;
+            break;
+        case dt_INT16:
+        case dt_UINT16:
+            size = len = 2;
+            break;
+        case dt_INT:
+        case dt_FLOAT32:
+        case dt_UINT:
+            size = len = 4;
+            break;
+        case dt_FLOAT64:
+            size = len = 8;
+            break;
+        case dt_NUM_ARRAY:
+            offset = len = 5;
+            {
+                unsigned elem_size = 0;
+                uint32_t elem_count = 0;
+                
+                switch (vp[0]) {
+                case dt_INT8:
+                case dt_UINT8:
+                    elem_size = 1;
+                    break;
+                case dt_INT16:
+                case dt_UINT16:
+                    elem_size = 2;
+                    break;
+                case dt_FLOAT32:
+                case dt_INT:
+                case dt_UINT:
+                    elem_size = 4;
+                    break;
+                case dt_FLOAT64:
+                    elem_size = 8;
+                    break;
+                default:
+                    rc = RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
+                    break;
+                }
+                if (rc)
+                    break;
+                elem_count = LE2HUI32(&vp[1]);
+                len += elem_size * elem_count;
+                if (i + len + 3 > n) {
+                    rc = RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+                    break;
+                }
+                type = vp[0];
+                count = elem_count;
+                size = elem_size;
+            }
+            break;
+        default:
+            rc = RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
+            break;
+        }
+        if (rc)
+            break;
+        i += len + 3;
+        if (f(ctx, tag, type, len + 3, count, size, &vp[offset]))
+            break;
+    }
+    return rc;
+}
+
+static bool CountOptTags(void *ctx, char const tag[2], BAMOptDataValueType type, unsigned length,
+                         unsigned count, unsigned size, void const *value)
 {
-    return BAMFileSetPositionInt(cself, cself->fpos_first, cself->ucfirst);
+    ++*(unsigned *)ctx;
+    return false;
 }
 
-static void BAMFileUnlockBuffer(BAMFile *self) {
-    if (self->bufLocker != NULL) {
-        memcpy(self->bufLocker->storage, self->bufLocker->data, self->bufLocker->datasize);
-        self->bufLocker->data = (bam_alignment *)&self->bufLocker->storage[0];
-        self->bufLocker = NULL;
-    }
-}
+struct ctx_LoadOptTags_s {
+    unsigned i;
+    BAMAlignment *self;
+};
 
-static
-rc_t BAMAlignmentParse(BAMAlignment *y, const uint8_t data[], uint32_t datasize)
+static bool LoadOptTags(void *Ctx, char const tag[2], BAMOptDataValueType type, unsigned length,
+                         unsigned count, unsigned size, void const *value)
 {
-    y->datasize = datasize;
-    y->data = (bam_alignment *)&data[0];
+    struct ctx_LoadOptTags_s *ctx = Ctx;
+    BAMAlignment *self = ctx->self;
     
-    /* calculate the offsets and verify that none are beyond the end of data */
-    y->cigar = sizeof(struct bam_alignment_s) + getReadNameLength(y) - 1;
-    if (y->cigar >= datasize)
-        return RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid);
-    
-    y->seq   = y->cigar + 4 * getCigarCount(y);
-    if (y->seq >= datasize)
-        return RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid);
-    
-    y->qual  = y->seq + ((getReadLen(y) + 1) >> 1);
-    if (y->qual >= datasize)
-        return RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid);
-    
-    y->extra = y->qual + getReadLen(y);
-    if (y->extra > datasize) /* if extra is empty, it will be equal to datasize */
-        return RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid);
-    
-    y->readGroupName = 0;
-    y->csread = 0;
-    return 0;
+    self->extra[ctx->i].offset = (uint8_t const *)&tag[0] - (uint8_t const *)&self->data->raw[0];
+    self->extra[ctx->i].size = length;
+    ++ctx->i;
+    return false;
 }
 
 LIB_EXPORT rc_t CC BAMFileRead(const BAMFile *cself, const BAMAlignment **rhs)
 {
     BAMFile *self = (BAMFile *)cself;
     BAMAlignment *y;
-    uint32_t datasize;
+    BAMAlignment x;
+    struct ctx_LoadOptTags_s load_ctx;
+    bool local = false;
+    int32_t i32;
     rc_t rc;
+    unsigned xtra;
     
     *rhs = NULL;
 
@@ -1322,9 +1907,17 @@ LIB_EXPORT rc_t CC BAMFileRead(const BAMFile *cself, const BAMAlignment **rhs)
     if (cself->bufCurrent >= cself->bufSize && cself->eof)
         return RC(rcAlign, rcFile, rcReading, rcRow, rcNotFound);
 
-    BAMFileUnlockBuffer(self);
-
-    rc = BAMFileReadUI32(self, &datasize);
+    if (self->bufLocker != NULL) {
+        if (self->bufLocker->storage == NULL)
+            self->bufLocker->storage = malloc(self->bufLocker->datasize);
+        if (self->bufLocker->storage == NULL)
+            return RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+        memcpy(self->bufLocker->storage, self->bufLocker->data, self->bufLocker->datasize);
+        self->bufLocker->data = (bam_alignment *)&self->bufLocker->storage[0];
+        self->bufLocker = NULL;
+    }
+    
+    rc = BAMFileReadI32(self, &i32);
     if (rc) {
         if (GetRCObject(rc) == rcData && GetRCState(rc) == rcInsufficient) {
             self->eof = true;
@@ -1332,45 +1925,77 @@ LIB_EXPORT rc_t CC BAMFileRead(const BAMFile *cself, const BAMAlignment **rhs)
         }
         return rc;
     }
-    /* it should never be bigger than 64K */
-    if ((datasize & 0xFFFF) != datasize) {
-        /* probably a seek to a bad position */
-        return RC(rcAlign, rcFile, rcReading, rcData, rcTooBig);
-    }
-    y = malloc(sizeof(*y) - sizeof(y->storage) + datasize);
-    if (y == NULL)
-        return RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
-
-    y->datasize = datasize;
+    if (i32 <= 0)
+        return RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
     
-    if (self->bufCurrent + datasize <= self->bufSize) {
-        /* all of the data needed for this record is in the buffer
-         * so instead of copying it, we'll take the pointer and
-         * place a reservation on the buffer to prevent it from
-         * going away on us.  Note that enough storage was allocated
-         * that if the reservation needs to be broken there is space
-         * to copy the data into.
-         */
-        rc = BAMAlignmentParse(y, &self->buffer[self->bufCurrent], datasize);
-        if (rc) {
-            free(y);
-            return rc;
-        }
-        self->bufLocker = y;
-        self->bufCurrent += datasize;
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM record: { size: %i }\n", i32));
+    memset(&x, 0, sizeof(x));
+    x.datasize = i32;
+    
+    if (self->bufCurrent + x.datasize <= self->bufSize) {
+        x.data = (bam_alignment *)&self->buffer[self->bufCurrent];
+        local = true;
     }
     else {
-        rc = BAMFileReadn(self, datasize, y->storage);
-        if (rc == 0)
-            rc = BAMAlignmentParse(y, y->storage, datasize);
+        x.storage = malloc(x.datasize);
+        if (x.storage == NULL)
+            return RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+
+        rc = BAMFileReadn(self, x.datasize, x.storage);
         if (rc) {
-            free(y);
+            free(x.storage);
             return rc;
         }
+        x.data = (bam_alignment *)x.storage;
+    }
+    {{
+        unsigned const nameLen = getReadNameLength(&x);
+        unsigned const cigCnt  = getCigarCount(&x);
+        unsigned const readLen = getReadLen(&x);
+        
+        DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM record: { name length: %u, cigar count: %u, read length %u }\n", nameLen, cigCnt, readLen));
+        x.cigar = sizeof(x.data[0]) + nameLen - 1;
+        x.seq   = x.cigar + 4 * cigCnt;
+        x.qual  = x.seq + (readLen + 1) / 2;
+        xtra    = x.qual + readLen;
+    }}
+    if (   x.cigar >= x.datasize
+        || x.seq   >  x.datasize
+        || x.qual  >  x.datasize
+        || xtra    >  x.datasize
+        || (rc = ParseOptData(&x.data->raw[xtra], x.datasize - xtra, &x.numExtra, CountOptTags)) != 0)
+    {
+	rc = RC(rcAlign, rcFile, rcReading, rcRow, rcInvalid);
+        free(x.storage);
+        return rc;
+    }
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("BAM record: { number of extra fields: %u }\n", x.numExtra));
+    y = calloc(sizeof(*y) + (x.numExtra ? x.numExtra - 1 : 0) * sizeof(y->extra), 1);
+    if (y == NULL) {
+        free(x.storage);
+        return RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+    }
+    *y = x;
+    load_ctx.self = y;
+    load_ctx.i = 0;
+    if ((rc = ParseOptData(&y->data->raw[xtra], y->datasize - xtra, &load_ctx, LoadOptTags)) != 0) {
+        free(x.storage);
+        free(y);
+        return rc;
     }
+    ksort(y->extra, y->numExtra, sizeof(y->extra[0]), OptTag_sort, y);
 
     BAMFileAddRef(y->parent = self);
     atomic32_set(&y->refcount, 1);
+    if (local) {
+        self->bufLocker = y;
+        self->bufCurrent += y->datasize;
+        if (self->bufCurrent == self->bufSize) {
+            self->fpos_cur = self->vt.FileGetPos(&self->file);
+            self->bufCurrent = 0;
+            self->bufSize = 0;
+        }
+    }
     
     *rhs = y;
     return 0;
@@ -1428,7 +2053,7 @@ LIB_EXPORT rc_t CC BAMFileGetReadGroup(const BAMFile *cself, unsigned i, const B
 LIB_EXPORT rc_t CC BAMFileGetHeaderText(BAMFile const *cself, char const **header, size_t *header_len)
 {
     *header = cself->header;
-    *header_len = strlen(*header);
+    *header_len = *header ? string_size( *header ) : 0;
     return 0;
 }
 
@@ -1446,6 +2071,7 @@ static rc_t BAMAlignmentWhack(BAMAlignment *self)
     if (self->parent->bufLocker == self)
         self->parent->bufLocker = NULL;
     BAMFileRelease(self->parent);
+    free(self->storage);
     free(self);
     return 0;
 }
@@ -1473,10 +2099,7 @@ LIB_EXPORT uint16_t CC BAMAlignmentBadFields(const BAMAlignment *self)
 
 static uint32_t BAMAlignmentGetCigarElement(const BAMAlignment *self, unsigned i)
 {
-    uint32_t y;
-    
-    memcpy(&y, &self->data->raw[self->cigar + i * 4], 4);
-    return LE2HUI32(&y);
+    return LE2HUI32(&((uint8_t const *)getCigarBase(self))[i * 4]);
 }
 
 LIB_EXPORT rc_t CC BAMAlignmentGetRefSeqId(const BAMAlignment *cself, int32_t *rhs)
@@ -1620,8 +2243,7 @@ unsigned ReferenceLengthFromCIGAR(const BAMAlignment *self)
     }
     return y;
 }
-#if 0
-Ken: don't delete it! It's documentation!
+
 static
 unsigned SequenceLengthFromCIGAR(const BAMAlignment *self)
 {
@@ -1646,7 +2268,6 @@ unsigned SequenceLengthFromCIGAR(const BAMAlignment *self)
     }
     return y;
 }
-#endif
 
 LIB_EXPORT rc_t CC BAMAlignmentGetPosition2(const BAMAlignment *cself, int64_t *rhs, uint32_t *length)
 {
@@ -1658,90 +2279,7 @@ LIB_EXPORT rc_t CC BAMAlignmentGetPosition2(const BAMAlignment *cself, int64_t *
 
 LIB_EXPORT rc_t CC BAMAlignmentGetReadGroupName(const BAMAlignment *cself, const char **rhs)
 {
-    if (cself->readGroupName == 0) {
-        const unsigned n = cself->datasize;
-        unsigned i = cself->extra;
-        rc_t rc = 0;
-        
-        while (i + 3 < n) {
-            const char *const tag = (const char *)&cself->data->raw[i];
-            const int type = cself->data->raw[i + 2];
-            const uint8_t *const value = &cself->data->raw[i + 3];
-            unsigned size = 3;
-            
-            switch (type) {
-            case dt_CSTRING:
-                if (tag[0] == 'R' && tag[1] == 'G')
-                    ((BAMAlignment *)cself)->readGroupName = i + 3;
-            case dt_HEXSTRING:
-                while (size != n && tag[size] != '\0')
-                    ++size;
-                if (size == n)
-                    rc = RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
-                else
-                    ++size;
-                break;
-            case dt_INT8:
-            case dt_UINT8:
-            case dt_ASCII:
-                size += 1;
-                break;
-            case dt_INT16:
-            case dt_UINT16:
-                size += 2;
-                break;
-            case dt_FLOAT32:
-            case dt_INT:
-            case dt_UINT:
-                size += 4;
-                break;
-            case dt_FLOAT64:
-                size += 8;
-                break;
-            case dt_NUM_ARRAY:
-                size += 5;
-                {
-                    uint32_t elem_count;
-                    
-                    memcpy(&elem_count, &value[1], 4);
-                    elem_count = LE2HUI32(&elem_count);
-                    switch (value[0]) {
-                    case dt_INT8:
-                    case dt_UINT8:
-                        size += elem_count;
-                        break;
-                    case dt_INT16:
-                    case dt_UINT16:
-                        size += elem_count * 2;
-                        break;
-                    case dt_FLOAT32:
-                    case dt_INT:
-                    case dt_UINT:
-                        size += elem_count * 4;
-                        break;
-                    case dt_FLOAT64:
-                        size += elem_count * 8;
-                        break;
-                    default:
-                        rc = RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
-                    }
-                }
-                break;
-            default:
-                rc = RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
-            }
-            if (rc) {
-                ((BAMAlignment *)cself)->readGroupName = 0;
-                break;
-            }
-            i += size;
-        }
-    }
-
-    if (cself->readGroupName != 0)
-        *rhs = (const char *)&cself->data->raw[cself->readGroupName];
-    else
-        *rhs = NULL;
+    *rhs = get_RG(cself);
     return 0;
 }
 
@@ -1753,7 +2291,7 @@ LIB_EXPORT rc_t CC BAMAlignmentGetReadName(const BAMAlignment *cself, const char
 
 LIB_EXPORT rc_t CC BAMAlignmentGetReadName2(const BAMAlignment *cself, const char **rhs, size_t *length)
 {
-    *length = getReadNameLength(cself);
+    *length = getReadNameLength(cself) - 1;
     *rhs = getReadName(cself);
     return 0;
 }
@@ -1776,9 +2314,9 @@ LIB_EXPORT rc_t CC BAMAlignmentGetCigarCount(const BAMAlignment *cself, unsigned
     return 0;
 }
 
-LIB_EXPORT rc_t CC BAMAlignmentGetRawCigar(const BAMAlignment *cself, uint32_t const **rslt, uint32_t *length)
+LIB_EXPORT rc_t CC BAMAlignmentGetRawCigar(const BAMAlignment *cself, uint32_t const *rslt[], uint32_t *length)
 {
-    *rslt = (uint32_t*)&cself->data->raw[cself->cigar];
+    *rslt = getCigarBase(cself);
     *length = getCigarCount(cself);
     return 0;
 }
@@ -1811,7 +2349,7 @@ LIB_EXPORT rc_t CC BAMAlignmentGetSequence2(const BAMAlignment *cself, char *rhs
      *   N    T    G    K    C    Y    S    B    A    W    R    D    M    H    V    =
      */
     static const char  tr[16] = "=ACMGRSVTWYHKDBN";
-    /* static const char ctr[16] = "=TGKCYSBAWRDMHVN"; */
+ /* static const char ctr[16] = "=TGKCYSBAWRDMHVN"; */
     unsigned const n = getReadLen(cself);
     const uint8_t * const seq = &cself->data->raw[cself->seq];
     unsigned si, di;
@@ -1832,190 +2370,91 @@ LIB_EXPORT rc_t CC BAMAlignmentGetSequence(const BAMAlignment *cself, char *rhs)
 {
     return BAMAlignmentGetSequence2(cself, rhs, 0, 0);
 }
-
-static rc_t BAMAlignmentGetCSRead(BAMAlignment const *cself);
-
-LIB_EXPORT bool CC BAMAlignmentHasColorSpace(BAMAlignment const *cself)
-{
-    if (cself->csread == 0) {
-        BAMAlignmentGetCSRead(cself);
-        if (cself->csread == 0)
-            return false;
-    }
-    return true;
-}
-
-LIB_EXPORT rc_t CC BAMAlignmentGetCSKey(BAMAlignment const *cself, char rhs[1])
-{
-    if (cself->csread == 0) {
-        BAMAlignmentGetCSRead(cself);
-        if (cself->csread == 0)
-            return RC(rcAlign, rcFile, rcReading, rcData, rcNotFound);
-    }
-    *rhs = cself->data->raw[cself->csread];
-    return 0;
-}
-
-LIB_EXPORT rc_t CC BAMAlignmentGetCSSequence(BAMAlignment const *cself, char rhs[])
-{
-    if (cself->csread == 0) {
-        BAMAlignmentGetCSRead(cself);
-        if (cself->csread == 0)
-            return RC(rcAlign, rcFile, rcReading, rcData, rcNotFound);
-    }
-    memcpy(rhs, &cself->data->raw[cself->csread + 1], getReadLen(cself));
-    return 0;
-}
-
-LIB_EXPORT rc_t CC BAMAlignmentGetQuality(const BAMAlignment *cself, const uint8_t **rhs)
-{
-    *rhs = &cself->data->raw[cself->qual];
-    return 0;
-}
-
-typedef bool (* i_OptData_f)(BAMAlignment const *cself, void *ctx, char const tag[2], BAMOptDataValueType type, unsigned count,
-                             void const *value, unsigned size);
-
-static rc_t BAMAlignmentParseOptData(BAMAlignment const *cself, void *ctx, i_OptData_f f)
-{
-    unsigned const n = cself->datasize;
-    unsigned i = cself->extra;
-    rc_t rc = 0;
-    
-    while (rc == 0 && i + 3 < n) {
-        char const *const tag = (char const *)&cself->data->raw[i];
-        int type = cself->data->raw[i + 2];
-        const uint8_t *const vp = &cself->data->raw[i + 3];
-        unsigned len = 0;
-        unsigned size = 0;
-        unsigned count = 1;
-        unsigned offset = 0;
-        
-        switch (type) {
-        case dt_CSTRING:
-        case dt_HEXSTRING:
-            len = 0;
-            while (i + len + 3 != n && vp[len] != '\0')
-                ++len;
-            if (i + len + 3 == n) {
-                rc = RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
-                break;
-            }
-            size = len;
-            ++len;
-            break;
-        case dt_INT8:
-        case dt_UINT8:
-        case dt_ASCII:
-            size = len = 1;
-            break;
-        case dt_INT16:
-        case dt_UINT16:
-            size = len = 2;
-            break;
-        case dt_INT:
-        case dt_FLOAT32:
-        case dt_UINT:
-            size = len = 4;
-            break;
-        case dt_FLOAT64:
-            size = len = 8;
-            break;
-        case dt_NUM_ARRAY:
-            offset = len = 5;
-            {
-                unsigned elem_size = 0;
-                uint32_t elem_count = 0;
-                
-                switch (vp[0]) {
-                case dt_INT8:
-                case dt_UINT8:
-                    elem_size = 1;
-                    break;
-                case dt_INT16:
-                case dt_UINT16:
-                    elem_size = 2;
-                    break;
-                case dt_FLOAT32:
-                case dt_INT:
-                case dt_UINT:
-                    elem_size = 4;
-                    break;
-                case dt_FLOAT64:
-                    elem_size = 8;
-                    break;
-                default:
-                    rc = RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
-                    break;
-                }
-                if (rc)
-                    break;
-                memcpy(&elem_count, &vp[1], 4);
-                elem_count = LE2HUI32(&elem_count);
-                len += elem_size * elem_count;
-                if (i + len + 3 > n) {
-                    rc = RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
-                    break;
-                }
-                type = vp[0];
-                count = elem_count;
-                size = elem_size;
-            }
-            break;
-        default:
-            rc = RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
-            break;
-        }
-        if (rc)
-            break;
-        i += len + 3;
-        if (f(cself, ctx, tag, type, count, &vp[offset], size))
-            break;
-    }
-    return rc;
+
+LIB_EXPORT bool CC BAMAlignmentHasColorSpace(BAMAlignment const *cself)
+{
+    return get_CS(cself) != NULL;
 }
 
-static bool BAMAlignmentGetCS(BAMAlignment const *cself, void *ctx, char const tag[2],
-                              BAMOptDataValueType type, unsigned count,
-                              void const *value, unsigned size)
+LIB_EXPORT rc_t CC BAMAlignmentGetCSKey(BAMAlignment const *cself, char rhs[1])
 {
-    if (tag[0] == 'C' && tag[1] == 'S' && size == getReadLen(cself) + 1) {
-        *(uint8_t const **)ctx = value;
-        return true;
-    }
-    return false;
+    char const *const vCS = get_CS(cself);
+    
+    if (vCS)
+        rhs[0] = vCS[0];
+    return 0;
 }
 
-static rc_t BAMAlignmentGetCSRead(BAMAlignment const *cself)
+LIB_EXPORT rc_t CC BAMAlignmentGetCSSeqLen(BAMAlignment const *cself, uint32_t *const rhs)
 {
-    uint8_t const *cs = NULL;
-    rc_t rc = BAMAlignmentParseOptData(cself, &cs, BAMAlignmentGetCS);
-    if (rc == 0 && cs != NULL) {
-        ((BAMAlignment *)cself)->csread = cs - cself->data->raw;
-    }
-    return rc;
+    struct offset_size_s const *const vCS = get_CS_info(cself);
+    
+    *rhs = vCS ? vCS->size - 5 : 0;
+    return 0;
 }
 
-static bool BAMAlignmentGetOQ(BAMAlignment const *cself, void *ctx, char const tag[2],
-                              BAMOptDataValueType type, unsigned count,
-                              void const *value, unsigned size)
+LIB_EXPORT rc_t CC BAMAlignmentGetCSSequence(BAMAlignment const *cself, char rhs[], uint32_t const seqlen)
 {
-    if (tag[0] == 'O' && tag[1] == 'Q') {
-        *(uint8_t const **)ctx = value;
-        return true;
+    char const *const vCS = get_CS(cself);
+    
+    if (vCS) {
+        unsigned i;
+        
+        for (i = 0;i != seqlen; ++i) {
+            char const ch = vCS[i+1];
+            
+            rhs[i] = (ch == '4') ? '.' : ch;
+        }
     }
-    return false;
+    return 0;
+}
+
+LIB_EXPORT rc_t CC BAMAlignmentGetQuality(const BAMAlignment *cself, const uint8_t **rhs)
+{
+    *rhs = &cself->data->raw[cself->qual];
+    return 0;
 }
 
 LIB_EXPORT rc_t CC BAMAlignmentGetQuality2(BAMAlignment const *cself, uint8_t const **rhs, uint8_t *offset)
 {
-    rc_t rc;
+    uint8_t const *const OQ = get_OQ(cself);
     
-    *offset = 33;
-    *rhs = NULL;
-    rc = BAMAlignmentParseOptData(cself, ( void* ) rhs, BAMAlignmentGetOQ);
-    if (rc == 0 && *rhs != NULL)
-        return 0;
+    if (OQ) {
+        struct offset_size_s const *const oq = get_OQ_info(cself);
+        
+        if (oq->size - 4 == getReadLen(cself)) {
+            *offset = 33;
+            *rhs = OQ;
+        }
+        else
+            return RC(rcAlign, rcRow, rcReading, rcData, rcInconsistent);
+    }
+    else {
+        *offset = 0;
+        *rhs = &cself->data->raw[cself->qual];
+    }
+    return 0;
+}
+
+LIB_EXPORT rc_t CC BAMAlignmentGetCSQuality(BAMAlignment const *cself, uint8_t const **rhs, uint8_t *offset)
+{
+    struct offset_size_s const *const cs = get_CS_info(cself);
+    struct offset_size_s const *const cq = get_CQ_info(cself);
+    uint8_t const *const CQ = get_CQ(cself);
+    
+    if (cs && cq && CQ) {
+        if (cs->size == cq->size) {
+            *offset = 33;
+            *rhs = CQ + 1;
+            return 0;
+        }
+        if (cs->size == cq->size + 1) {
+            *offset = 33;
+            *rhs = CQ;
+            return 0;
+        }
+        return RC(rcAlign, rcRow, rcReading, rcData, rcInconsistent);
+    }
     *offset = 0;
     *rhs = &cself->data->raw[cself->qual];
     return 0;
@@ -2051,7 +2490,7 @@ typedef struct OptForEach_ctx_s {
 static bool i_OptDataForEach(BAMAlignment const *cself, void *Ctx, char const tag[2], BAMOptDataValueType type, unsigned count, void const *value, unsigned size)
 {
     OptForEach_ctx_t *ctx = (OptForEach_ctx_t *)Ctx;
-    size_t const need = (size_t)&((BAMOptData const *)NULL)->u.f64[(count * size + sizeof(double))/sizeof(double)];
+    size_t const need = (size_t)&((BAMOptData const *)NULL)->u.f64[(count * size + sizeof(double) - 1)/sizeof(double)];
     
     if (need > ctx->valsize) {
         void *const temp = realloc(ctx->alloced, need);
@@ -2063,12 +2502,13 @@ static bool i_OptDataForEach(BAMAlignment const *cself, void *Ctx, char const ta
         ctx->valsize = need;
     }
     ctx->val->type = type;
-    ctx->val->element_count = (type == dt_CSTRING || type == dt_HEXSTRING) ? size : count;
+    ctx->val->element_count = (type == dt_CSTRING || type == dt_HEXSTRING) ? size - 1 : count;
     
     memcpy(ctx->val->u.u8, value, size * count);
 #if __BYTE_ORDER == __BIG_ENDIAN
     {{
         unsigned di;
+	uint32_t elem_count = ctx->val->element_count;
         
         switch (size) {
         case 2:
@@ -2090,66 +2530,7 @@ static bool i_OptDataForEach(BAMAlignment const *cself, void *Ctx, char const ta
     return ctx->rc != 0;
 }
 
-#if USE_OLD_BAM_OPT_FOR_EACH
-LIB_EXPORT rc_t CC BAMAlignmentOptDataForEach(const BAMAlignment *cself, void *ctx, BAMOptionalDataFunction f)
-{
-    const char *const auxData = (const char *)&cself->data->raw[cself->extra];
-    const unsigned n = cself->datasize - cself->extra;
-    unsigned i;
-    rc_t rc;
-    
-    if (n < 4)
-        return 0;
-    for (i = 0; i < n - 3; ) {
-        const char *const tag = &auxData[i];
-        const int type = ((const uint8_t *)auxData)[i + 2];
-        const uint8_t *const value = (const uint8_t *)&auxData[i + 3];
-        unsigned size = 3;
-        
-        switch (type) {
-        case dt_CSTRING:
-        case dt_HEXSTRING:
-            while (size != n && tag[size] != '\0')
-                ++size;
-            if (size == n)
-                return RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
-            ++size;
-            break;
-        case dt_INT8:
-        case dt_UINT8:
-        case dt_ASCII:
-            size += 1;
-            break;
-        case dt_INT16:
-        case dt_UINT16:
-            size += 2;
-            break;
-        case dt_FLOAT32:
-        case dt_INT:
-        case dt_UINT:
-            size += 4;
-            break;
-        case dt_FLOAT64:
-            size += 8;
-            break;
-        case dt_NUM_ARRAY:
-            /* TODO: implement */
-        default:
-            return RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
-        }
-        rc = f(ctx, tag, type, value, size - 3);
-        if (rc)
-            return rc;
-        i += size;
-    }
-    return 0;
-}
-
-LIB_EXPORT rc_t CC BAMAlignmentOptDataForEach2(const BAMAlignment *cself, void *ctx, BAMOptionalDataFunction2 f)
-#else
-
 LIB_EXPORT rc_t CC BAMAlignmentOptDataForEach(const BAMAlignment *cself, void *user_ctx, BAMOptionalDataFunction f)
-#endif
 {
     union u {
         BAMOptData value;
@@ -2157,6 +2538,7 @@ LIB_EXPORT rc_t CC BAMAlignmentOptDataForEach(const BAMAlignment *cself, void *u
     } value_auto;
     OptForEach_ctx_t ctx;
     rc_t rc;
+    unsigned i;
     
     ctx.val = &value_auto.value;
     ctx.alloced = NULL;
@@ -2165,22 +2547,453 @@ LIB_EXPORT rc_t CC BAMAlignmentOptDataForEach(const BAMAlignment *cself, void *u
     ctx.user_f = f;
     ctx.user_ctx = user_ctx;
     
-    rc = BAMAlignmentParseOptData(cself, &ctx, i_OptDataForEach);
-    if (rc == 0)
-        rc = ctx.rc;
+    for (i = 0; i != cself->numExtra; ++i) {
+        char const *const tag = (char const *)&cself->data->raw[cself->extra[i].offset];
+        uint8_t type = tag[2];
+        uint8_t const *const vp = (uint8_t const *)&tag[3];
+        unsigned len = cself->extra[i].size - 3;
+        unsigned size = cself->extra[i].size - 3;
+        unsigned count = 1;
+        unsigned offset = 0;
+        
+        if (type == dt_NUM_ARRAY) {
+            unsigned elem_size = 0;
+            uint32_t elem_count = 0;
+            
+            offset = len = 5;
+            switch (vp[0]) {
+            case dt_INT8:
+            case dt_UINT8:
+                elem_size = 1;
+                break;
+            case dt_INT16:
+            case dt_UINT16:
+                elem_size = 2;
+                break;
+            case dt_FLOAT32:
+            case dt_INT:
+            case dt_UINT:
+                elem_size = 4;
+                break;
+            case dt_FLOAT64:
+                elem_size = 8;
+                break;
+            default:
+                rc = RC(rcAlign, rcFile, rcReading, rcData, rcUnexpected);
+                break;
+            }
+            if (rc)
+                break;
+            elem_count = LE2HUI32(&vp[1]);
+            len += elem_size * elem_count;
+            type = vp[0];
+            count = elem_count;
+            size = elem_size;
+            break;
+        }
+        if (i_OptDataForEach(cself, &ctx, tag, type, count, &vp[offset], size))
+            break;
+    }
+    rc = ctx.rc;
     if (ctx.alloced)
         free(ctx.alloced);
     return rc;
 }
 
-/* MARK: BAMIndex stuff */
+LIB_EXPORT bool CC BAMAlignmentHasCGData(BAMAlignment const *self)
+{
+    return get_CG_GC_info(self) && get_CG_GS_info(self) && get_CG_GQ_info(self);
+}
+
+static bool BAMAlignmentParseCGTag(BAMAlignment const *self,uint32_t *cg_segs,uint32_t max_cg_segs)
+{
+/*** patern in cg_segs should be nSnGnSnG - no more then 7 segments **/
+    struct offset_size_s const *const GCi = get_CG_GC_info(self);
+    char *cg  = (char *) &self->data->raw[GCi->offset + 3];
+    char *end = cg + GCi->size -4;
+    /** init**/
+    int iseg=0;
+    char last_op='S';
+    cg_segs[iseg] = 0;
+
+    while(cg < end && iseg < max_cg_segs){
+        int op_len = strtol(cg,&cg,10);
+        char op = *cg;
+        cg++;
+        if(op==last_op){
+                cg_segs[iseg] += op_len;
+        } else{
+                last_op = op;
+                iseg++;
+                cg_segs[iseg] = op_len;
+        }
+    }
+    for(iseg+=1;iseg < max_cg_segs;iseg ++){
+        cg_segs[iseg] = 0;
+    }
+    return true;
+}
+
+static
+rc_t ExtractInt32(BAMAlignment const *self, int32_t *result,
+                  struct offset_size_s const *const tag)
+{
+    int32_t y;
+    
+    switch (self->data->raw[tag->offset + 2]) {
+    case 'c':
+        if (tag->size == 4)
+            y = ((int8_t const *)self->data->raw)[tag->offset + 3];
+        else
+            return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+        break;
+    case 'C':
+        if (tag->size == 4)
+            y = ((uint8_t const *)self->data->raw)[tag->offset + 3];
+        else
+            return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+        break;
+    case 's':
+        if (tag->size == 5)
+            y = LE2HI16(self->data->raw + tag->offset + 3);
+        else
+            return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+        break;
+    case 'S':
+        if (tag->size == 5)
+            y = LE2HUI16(self->data->raw + tag->offset + 3);
+        else
+            return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+        break;
+    case 'i':
+        if (tag->size == 7)
+            y = LE2HI32(self->data->raw + tag->offset + 3);
+        else
+            return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+        break;
+    case 'I':
+        if (tag->size == 7)
+            y = LE2HUI32(self->data->raw + tag->offset + 3);
+        else
+            return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+        break;
+    default:
+        return RC(rcAlign, rcRow, rcReading, rcData, rcNotFound);
+    }
+    *result = y;
+    return 0;
+}
+
+LIB_EXPORT
+rc_t CC BAMAlignmentGetCGAlignGroup(BAMAlignment const *self,
+                                    char buffer[],
+                                    size_t max_size,
+                                    size_t *act_size)
+{
+    struct offset_size_s const *const ZA = get_CG_ZA_info(self);
+    struct offset_size_s const *const ZI = get_CG_ZI_info(self);
+    
+    if (ZA && ZI) {
+        rc_t rc;
+        int32_t za;
+        int32_t zi;
+        
+        rc = ExtractInt32(self, &za, ZA); if (rc) return rc;
+        rc = ExtractInt32(self, &zi, ZI); if (rc) return rc;
+        return string_printf(buffer, max_size, act_size, "%i_%i", zi, za);
+    }
+    return RC(rcAlign, rcRow, rcReading, rcData, rcNotFound);
+}
+
+LIB_EXPORT
+rc_t CC BAMAlignmentGetCGSeqQual(BAMAlignment const *self,
+                                 char sequence[],
+                                 uint8_t quality[])
+{
+    struct offset_size_s const *const GCi = get_CG_GC_info(self);
+    struct offset_size_s const *const GSi = get_CG_GS_info(self);
+    struct offset_size_s const *const GQi = get_CG_GQ_info(self);
+
+    if (GCi && GSi && GQi) {
+        char const *const vGS = (char const *)&self->data->raw[GSi->offset + 3];
+        char const *const GQ = (char const *)&self->data->raw[GQi->offset + 3];
+        unsigned const GSsize = GSi->size - 4;
+        unsigned const sn = getReadLen(self);
+        uint32_t cg_segs[2*CG_NUM_SEGS-1]; /** 4 segments + 3gaps **/
+        unsigned i,G,S;
+
+        if (GSi->size != GQi->size)
+            return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+        if (SequenceLengthFromCIGAR(self) != sn)
+            return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+        if (!BAMAlignmentParseCGTag(self, cg_segs,2*CG_NUM_SEGS-1))
+            return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+
+        for(S=cg_segs[0],G=0,i=1;i<CG_NUM_SEGS;i++){ /** sum all S and G **/
+                S += cg_segs[2*i];
+                G += cg_segs[2*i-1];
+        }
+        if (G + G != GSsize || S + G > sn || sn + G != 35) {
+            /*fprintf(stderr, "GSsize: %u; sn: %u; S: %u; G: %u\n", GSsize, sn, S, G);*/
+            return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+        }
+        if(G > 0){
+                int nsi=cg_segs[0];/** new index into sequence */
+                int osi=nsi+G;     /** old index into sequence */
+                int k;             /** index into inserted sequence **/
+                /***make room for inserts **/
+                memmove(sequence + osi, sequence + nsi, sn - nsi);
+                memmove(quality  + osi, quality  + nsi, sn - nsi);
+                for(i=1,k=0;i<CG_NUM_SEGS && nsi < osi;i++){/*** when osi and nsi meet we are done ***/
+                        int j;
+                        for(j = cg_segs[2*i-1];j>0;j--){/** insert mode **/
+                                sequence[nsi] = vGS[k];
+                                quality [nsi] = GQ[k] - 33;
+                                nsi++;k++;
+                                sequence[nsi] = vGS[k];
+                                quality [nsi] = GQ[k] - 33;
+                                nsi++;k++;
+                                osi++;
+                        }
+                        if(nsi < osi){
+                                for(j=cg_segs[2*i];j>0;j--){/** copy mode **/
+                                        sequence[nsi] = sequence[osi];
+                                        quality[nsi]  = quality[osi];
+                                        nsi++;osi++;
+                                }
+                        }
+                }
+        }
+        return 0;
+    }
+    return RC(rcAlign, rcRow, rcReading, rcData, rcNotFound);
+}
+
+
+static unsigned splice(uint32_t cigar[], unsigned n, unsigned at, unsigned out, unsigned in, uint32_t const new_values[/* in */])
+{
+    assert(at + out <= n);
+    memmove(&cigar[at + in], &cigar[at + out], (n - at - out) * 4);
+    if (in)
+        memcpy(&cigar[at], new_values, in * 4);
+    return n + in - out;
+}
+
+#define OPCODE_2_FIX (0xF)
+
+static unsigned insert_B(unsigned S, unsigned G, uint32_t cigar[], unsigned n)
+{
+    unsigned i;
+    unsigned pos;
+    unsigned T=S+G;
+    
+    for (pos = i = 0; i < n; ++i) {
+        unsigned const opcode = cigar[i] & 0xF;
+        
+        switch (opcode) {
+        case 0:
+        case 1:
+        case 4:
+        case 7:
+        case 8:
+            {{
+                unsigned const len = cigar[i] >> 4;
+                unsigned const nxt = pos + len;
+                
+                if (pos <= T && T <= nxt) {
+                    unsigned const l = T - pos;
+                    unsigned const r = len - l;
+                    unsigned B = i + 2;
+                    unsigned in = 4;
+                    uint32_t Ops[4];
+                    uint32_t *ops = Ops;
+                    
+                    Ops[0] = (l << 4) | opcode;
+                    Ops[1] = (G << 4) | 9; /* B */
+                    Ops[2] = (G << 4) | 0; /* M this is not backwards */
+                    Ops[3] = (r << 4) | opcode;
+                    
+                    if (r == 0)
+                        --in;
+                    if (l == 0) {
+                        ++ops;
+                        --in;
+                        --B;
+                    }
+                    n = splice(cigar, n, i, 1, in, ops);
+                    return n;;
+                }
+                pos = nxt;
+            }}
+            break;
+        default:
+            break;
+        }
+    }
+    return n;
+}
+
+static unsigned fix_I(uint32_t cigar[], unsigned n)
+{
+    unsigned i;
+    int last_b = 0;
+    
+    for (i = 0; i < n; ++i) {
+        unsigned const opcode = cigar[i] & 0xF;
+        
+        if (opcode == 0xF) {
+            unsigned const oplen = cigar[i] >> 4;
+            uint32_t ops[2];
+            
+            if (0/*last_b*/) {
+                ops[0] = (oplen << 4) | 0; /* M */
+                ops[1] = (oplen << 4) | 9; /* B */
+            }
+            else {
+                ops[0] = (oplen << 4) | 9; /* B */
+                ops[1] = (oplen << 4) | 0; /* M */
+            }
+            
+            n = splice(cigar, n, i, 1, 2, ops);
+            ++i;
+        }
+        else if (opcode == 9)
+            last_b = 1;
+        else
+            last_b = 0;
+    }
+    return n;
+}
+
+static unsigned fix_IN(uint32_t cigar[], unsigned n)
+{
+    unsigned i;
+    
+    for (i = 1; i < n; ++i) {
+        unsigned const opL = cigar[i-1] & 0xF;
+        unsigned const opI = cigar[ i ] & 0xF;
+        
+        if (opL == 1 && opI == 3) {
+            unsigned const oplen = cigar[i-1] >> 4;
+            uint32_t ops[2];
+            
+            ops[0] = (oplen << 4) | 9; /* B */
+            ops[1] = (oplen << 4) | 0; /* M */
+            
+            n = splice(cigar, n, i-1, 1, 2, ops);
+            ++i;
+        }
+        else if (opL == 3 && opI == 1) {
+            unsigned const oplen = cigar[i] >> 4;
+            uint32_t ops[2];
+            
+            ops[0] = (oplen << 4) | 9; /* M */
+            ops[1] = (oplen << 4) | 0; /* B */
+            
+            n = splice(cigar, n, i, 1, 2, ops);
+            ++i;
+        }
+    }
+    return n;
+}
+
+static unsigned canonicalize(uint32_t cigar[], unsigned n)
+{
+    unsigned i;
+    
+    for (i = n; i > 0; ) {
+        --i;
+        if (cigar[i] >> 4 == 0 || (cigar[i] & 0xF) == 6)
+            n = splice(cigar, n, i, 1, 0, NULL);
+    }
+    for (i = 1; i < n; ) {
+        unsigned const opL = cigar[i-1] & 0xF;
+        unsigned const opI = cigar[ i ] & 0xF;
+        
+        if (opI == opL) {
+            unsigned const oplen = (cigar[i] >> 4) + (cigar[i-1] >> 4);
+            uint32_t const op = (oplen << 4) | opI;
+
+            n = splice(cigar, n, i-1, 2, 1, &op);
+        }
+        else
+            ++i;
+    }
+#if 0
+    if ((cigar[0] & 0xF) == 1)
+        cigar[0] = (cigar[0] & ~(uint32_t)0xF) | 4; /* I -> S */
+    if ((cigar[n - 1] & 0xF) == 1)
+        cigar[n - 1] = (cigar[n - 1] & ~(uint32_t)0xF) | 4; /* I -> S */
+#endif
+    return n;
+}
+
+static void reverse(uint32_t cigar[], unsigned n)
+{
+    unsigned i;
+    unsigned j;
+    
+    for (j = n - 1, i = 0; i < j; ++i, --j) {
+        uint32_t const tmp = cigar[i];
+        cigar[i] = cigar[j];
+        cigar[j] = tmp;
+    }
+}
+
+LIB_EXPORT
+rc_t CC BAMAlignmentGetCGCigar(BAMAlignment const *self,
+                               uint32_t *cigar,
+                               uint32_t cig_max,
+                               uint32_t *cig_act)
+{
+    struct offset_size_s const *const GCi = get_CG_GC_info(self);
+
+    *cig_act = 0;
+
+    if (GCi) {
+        uint32_t i,G,S;
+        unsigned n = getCigarCount(self);
+        uint32_t cg_segs[2*CG_NUM_SEGS-1]; /** 4 segments + 3gaps **/
+
+        if (!BAMAlignmentParseCGTag(self, cg_segs, 2*CG_NUM_SEGS-1))
+            return RC(rcAlign, rcRow, rcReading, rcData, rcInvalid);
+        if (cig_max < n + 5)
+            return RC(rcAlign, rcRow, rcReading, rcBuffer, rcInsufficient);
+
+        memcpy(cigar, getCigarBase(self), n * 4);
+        n = canonicalize(cigar, n); /* just in case */
+        for(i=0,S=0; i< CG_NUM_SEGS-1;i++){
+                S+=cg_segs[2*i];
+                G=cg_segs[2*i+1];
+                if(G > 0){
+                        n = insert_B(S, G, cigar, n);
+                        S+=G;
+                }
+        }
+        *cig_act = n;
+        return 0;
+    }
+    return RC(rcAlign, rcRow, rcReading, rcData, rcNotFound);
+}
 
-static uint64_t get_pos(const uint8_t *buf)
+
+LIB_EXPORT rc_t BAMAlignmentGetTI(BAMAlignment const *self, uint64_t *ti)
 {
-    uint64_t v64;
+    char const *const TI = get_XT(self);
+    long long unsigned temp;
+    
+    if (TI && sscanf(TI, "ti|%llu", &temp) == 1) {
+        *ti = (uint64_t)temp;
+        return 0;
+    }
+    return RC(rcAlign, rcRow, rcReading, rcData, rcNotFound);
+}
+
+/* MARK: BAMIndex stuff */
 
-    memcpy(&v64, buf, 8);
-    return LE2HUI64(&v64);
+static uint64_t get_pos(uint8_t const buf[])
+{
+    return LE2HUI64(buf);
 }
 
 #define MAX_BIN 37449
@@ -2245,7 +3058,7 @@ typedef rc_t (*WalkIndexStructureCallBack)(const uint8_t data[], size_t dlen,
                                            void *ctx);
 
 static
-rc_t WalkIndexStructure(const uint8_t buf[], size_t blen,
+rc_t WalkIndexStructure(uint8_t const buf[], size_t const blen,
                         WalkIndexStructureCallBack func,
                         void *ctx
                         )
@@ -2255,17 +3068,21 @@ rc_t WalkIndexStructure(const uint8_t buf[], size_t blen,
     unsigned i;
     rc_t rc;
     
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("Index data length: %u", blen));
+
     if (cp + 4 > blen)
         return RC(rcAlign, rcIndex, rcReading, rcData, rcInsufficient);
+    
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("Index signature: '%c%c%c%u'", buf[cp+0], buf[cp+1], buf[cp+2], buf[cp+3]));
     if (memcmp(buf + cp, "BAI\1", 4) != 0)
         return RC(rcAlign, rcIndex, rcReading, rcFormat, rcUnknown);
-    cp += 4;
     
+    cp += 4;
     if (cp + 4 > blen)
         return RC(rcAlign, rcIndex, rcReading, rcData, rcInsufficient);
-    memcpy(&nrefs, buf + cp, 4);
-    nrefs = LE2HI32(&nrefs);
-    cp += 4;
+
+    nrefs = LE2HI32(buf + cp); cp += 4;
+    DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("Index reference count: %i", nrefs));
     
     if (nrefs == 0)
         return RC(rcAlign, rcIndex, rcReading, rcData, rcEmpty);
@@ -2276,20 +3093,23 @@ rc_t WalkIndexStructure(const uint8_t buf[], size_t blen,
         int32_t intervals;
         unsigned di;
         
+        DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("Index reference %u: starts at %u", i, cp));
         if (cp + 4 > blen)
             return RC(rcAlign, rcIndex, rcReading, rcData, rcInsufficient);
-        memcpy(&bins, buf + cp, 4); cp += 4;
-        bins = LE2HI32(&bins);
         
+        bins = LE2HI32(buf + cp); cp += 4;
+        DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("Index reference %u: %i bins", i, nrefs));
+
         for (di = 0; di < bins; ++di) {
             uint32_t binNo;
             
             if (cp + 8 > blen)
                 return RC(rcAlign, rcIndex, rcReading, rcData, rcInsufficient);
-            memcpy(&binNo, buf + cp, 4); cp += 4;
-            memcpy(&chunks, buf + cp, 4); cp += 4;
-            binNo = LE2HUI32(&binNo);
-            chunks = LE2HI32(&chunks);
+
+            binNo = LE2HUI32(buf + cp); cp += 4;
+            chunks = LE2HI32(buf + cp); cp += 4;
+            DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("Index reference %u, bin %u: %i chunks", i, binNo, chunks));
+            
             if (cp + 16 * chunks > blen)
                 return RC(rcAlign, rcIndex, rcReading, rcData, rcInsufficient);
             rc = func(&buf[cp], 16 * chunks, i, nrefs, bai_StartStopPairs, binNo, bins, chunks, ctx);
@@ -2299,8 +3119,10 @@ rc_t WalkIndexStructure(const uint8_t buf[], size_t blen,
         }
         if (cp + 4 > blen)
             return RC(rcAlign, rcIndex, rcReading, rcData, rcInsufficient);
-        memcpy(&intervals, buf + cp, 4); cp += 4;
-        intervals = LE2HI32(&intervals);
+
+        intervals = LE2HI32(buf + cp); cp += 4;
+        DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_BAM), ("Index reference %u: %i intervals", i, intervals));
+
         if (cp + 8 * intervals > blen)
             return RC(rcAlign, rcIndex, rcReading, rcData, rcInsufficient);
         rc = func(&buf[cp], 8 * intervals, i, nrefs, bai_16kIntervals, ~(unsigned)0, bins, intervals, ctx);
@@ -2394,17 +3216,9 @@ rc_t LoadIndex2a(const uint8_t data[], size_t dlen, unsigned refNo,
         if (n_ival > 1)
             break;
         
-#if _DEBUGGING
-        {{
-            uint32_t bin_no;
-
-            memcpy(&bin_no, ctx->base + cp, 4);
-            assert(i == LE2HI32(&bin_no));
-        }}
-#endif
+        assert(i == LE2HI32(ctx->base + cp));
         cp += 4;
-        memcpy(&chunk_count, ctx->base + cp, 4); cp += 4;
-        chunk_count = LE2HI32(&chunk_count);
+        chunk_count = LE2HI32(ctx->base + cp); cp += 4;
         found = ctx->refSeq[refNo][ival];
         for (k = 0; k < chunk_count; ++k) {
             const uint64_t start = get_pos(ctx->base + cp);
@@ -2437,8 +3251,7 @@ rc_t LoadIndex2a(const uint8_t data[], size_t dlen, unsigned refNo,
         if (ival + n_ival > max_ival)
             n_ival = max_ival - ival;
         
-        memcpy(&chunk_count, ctx->base + cp + 4, 4); cp += 8;
-        chunk_count = LE2HI32(&chunk_count);
+        chunk_count = LE2HI32(ctx->base + cp + 4); cp += 8;
         for (k = 0; k < chunk_count; ++k) {
             const uint64_t start = get_pos(ctx->base + cp);
             const uint64_t end   = get_pos(ctx->base + cp + 8);
@@ -2566,13 +3379,13 @@ rc_t BAMFileOpenIndexInternal(const BAMFile *self, const char *path)
     if (rc == 0) {
         buf = malloc(fsize);
         if (buf != NULL) {
-            size_t read;
+            size_t nread;
             
-            rc = KFileRead(kf, 0, buf, fsize, &read);
+            rc = KFileRead(kf, 0, buf, fsize, &nread);
             KFileRelease(kf);
             if (rc == 0) {
-                if (read == fsize) {
-                    rc = LoadIndex((BAMFile *)self, buf, read);
+                if (nread == fsize) {
+                    rc = LoadIndex((BAMFile *)self, buf, nread);
                     free(buf);
                     return rc;
                 }
@@ -2591,11 +3404,11 @@ LIB_EXPORT rc_t CC BAMFileOpenIndex(const BAMFile *self, const char *path)
     return BAMFileOpenIndexInternal(self, path);
 }
 
-LIB_EXPORT rc_t CC BAMFileOpenIndexWithKPath(const BAMFile *self, const KPath *kpath)
+LIB_EXPORT rc_t CC BAMFileOpenIndexWithVPath(const BAMFile *self, const VPath *kpath)
 {
     char path[4096];
     size_t nread;
-    rc_t rc = KPathReadPath(kpath, path, sizeof(path), &nread);
+    rc_t rc = VPathReadPath(kpath, path, sizeof(path), &nread);
 
     if (rc == 0) {
         path[nread] = '\0';
@@ -2720,11 +3533,11 @@ static rc_t BAMIndexWhack(const BAMIndex *cself) {
 
 /* MARK: BAM Validation Stuff */
 
-static rc_t OpenKPathRead(const KFile **fp, struct KPath const *path)
+static rc_t OpenVPathRead(const KFile **fp, struct VPath const *path)
 {
     char buffer[4096];
     size_t blen;
-    rc_t rc = KPathReadPath(path, buffer, sizeof(buffer), &blen);
+    rc_t rc = VPathReadPath(path, buffer, sizeof(buffer), &blen);
     
     if (rc == 0) {
         KDirectory *dir;
@@ -2738,10 +3551,10 @@ static rc_t OpenKPathRead(const KFile **fp, struct KPath const *path)
     return rc;
 }
 
-static rc_t ReadKPath(void **data, size_t *dsize, struct KPath const *path)
+static rc_t ReadVPath(void **data, size_t *dsize, struct VPath const *path)
 {
     const KFile *fp;
-    rc_t rc = OpenKPathRead(&fp, path);
+    rc_t rc = OpenVPathRead(&fp, path);
     
     if (rc == 0) {
         uint8_t *buff;
@@ -2774,13 +3587,14 @@ static rc_t ReadKPath(void **data, size_t *dsize, struct KPath const *path)
     return rc;
 }
 
-static rc_t KPath2BGZF(BGZFile *bgzf, struct KPath const *path)
+static rc_t VPath2BGZF(BGZFile *bgzf, struct VPath const *path)
 {
     const KFile *fp;
-    rc_t rc = OpenKPathRead(&fp, path);
+    BGZFile_vt dummy;
+    rc_t rc = OpenVPathRead(&fp, path);
     
     if (rc == 0) {
-        rc = BGZFileInit(bgzf, fp);
+        rc = BGZFileInit(bgzf, fp, &dummy);
         KFileRelease(fp);
     }
     return rc;
@@ -2917,16 +3731,14 @@ rc_t BAMValidateHeader(const uint8_t data[],
     if (memcmp(data, "BAM\1", 4) != 0)
         return RC(rcAlign, rcFile, rcValidating, rcFormat, rcUnrecognized);
     
-    memcpy(&hlen, &data[4], 4);
-    hlen = LE2HI32(&hlen);
+    hlen = LE2HI32(&data[4]);
     if (hlen < 0)
         return RC(rcAlign, rcFile, rcValidating, rcData, rcInvalid);
     
     if (dsize < hlen + 12)
         return RC(rcAlign, rcFile, rcValidating, rcData, rcIncomplete);
     
-    memcpy(&refs, &data[hlen + 8], 4);
-    refs = LE2HI32(&refs);
+    refs = LE2HI32(&data[hlen + 8]);
     if (refs < 0)
         return RC(rcAlign, rcFile, rcValidating, rcData, rcInvalid);
     
@@ -2936,8 +3748,7 @@ rc_t BAMValidateHeader(const uint8_t data[],
         if (dsize < cp + 4)
             return RC(rcAlign, rcFile, rcValidating, rcData, rcIncomplete);
         
-        memcpy(&nlen, &data[cp], 4);
-        nlen = LE2HI32(&nlen);
+        nlen = LE2HI32(&data[cp]);
         if (nlen < 0)
             return RC(rcAlign, rcFile, rcValidating, rcData, rcInvalid);
         
@@ -2953,8 +3764,8 @@ rc_t BAMValidateHeader(const uint8_t data[],
     return 0;
 }
 
-static rc_t BAMValidateIndex(struct KPath const *bampath,
-                             struct KPath const *baipath,
+static rc_t BAMValidateIndex(struct VPath const *bampath,
+                             struct VPath const *baipath,
                              BAMValidateOption options,
                              BAMValidateCallback callback,
                              void *callbackContext
@@ -2976,7 +3787,7 @@ static rc_t BAMValidateIndex(struct KPath const *bampath,
     if ((options & bvo_IndexOptions) == 0)
         return callback(callbackContext, 0, &stats);
 
-    rc = ReadKPath((void **)&bai, &bai_size, baipath);
+    rc = ReadVPath((void **)&bai, &bai_size, baipath);
     if (rc)
         return rc;
     
@@ -2992,7 +3803,7 @@ static rc_t BAMValidateIndex(struct KPath const *bampath,
     if ((options & bvo_IndexOptions) == bvo_IndexStructure)
         return WalkIndexStructure(bai, bai_size, IndexValidateStructure, &ctx);
 
-    rc = KPath2BGZF(&bam, bampath);
+    rc = VPath2BGZF(&bam, bampath);
     if (rc == 0) {
         ctx.mpositions = 1024 * 32;
         ctx.position = malloc(ctx.mpositions * sizeof(ctx.position[0]));
@@ -3065,8 +3876,7 @@ static rc_t BAMValidateIndex(struct KPath const *bampath,
                         if (dsize - bpos < 4 || dsize - bpos < rsize)
                             goto BAD_BLOCK_OFFSET;
                     }
-                    memcpy(&temp, data + bpos, 4);
-                    rsize = LE2HI32(&temp);
+                    rsize = LE2HI32(data + bpos);
                     if (rsize <= 0)
                         goto BAD_BLOCK_OFFSET;
                     if (rsize > 0xFFFF) {
@@ -3076,7 +3886,7 @@ static rc_t BAMValidateIndex(struct KPath const *bampath,
                     }
                     if (dsize - bpos < rsize)
                         goto READ_MORE;
-                    rc = BAMAlignmentParse(&algn, data + bpos + 4, rsize);
+/*                    rc = BAMAlignmentParse(&algn, data + bpos + 4, rsize); */
                     if (rc)
                         goto BAD_BLOCK_OFFSET;
                     ++stats.indexBlockOffset.good;
@@ -3233,8 +4043,7 @@ static rc_t BAMValidate2(void *Ctx, const BGZFile *file,
                 while (cp + 4 < ctx->bsize) {
                     int32_t rsize;
                     
-                    memcpy(&rsize, &ctx->buf[cp], 4);
-                    rsize = LE2HI32(&rsize);
+                    rsize = LE2HI32(&ctx->buf[cp]);
                     if (rsize < 0) {
                         ++ctx->stats->blockStructure.error;
                         ctx->options = bvo_BlockStructure;
@@ -3256,7 +4065,7 @@ static rc_t BAMValidate2(void *Ctx, const BGZFile *file,
                         if (ctx->options > bvo_BlockStructure) {
                             BAMAlignment algn;
                             
-                            rc = BAMAlignmentParse(&algn, &ctx->buf[cp + 4], rsize);
+/*                            rc = BAMAlignmentParse(&algn, &ctx->buf[cp + 4], rsize); */
                             if (rc == 0) {
                                 ++ctx->stats->recordStructure.good;
                                 if (ctx->options > bvo_RecordStructure)
@@ -3304,7 +4113,7 @@ static rc_t BAMValidate2(void *Ctx, const BGZFile *file,
     return fatal ? rc : rc2;
 }
 
-static rc_t BAMValidateBAM(struct KPath const *bampath,
+static rc_t BAMValidateBAM(struct VPath const *bampath,
                            BAMValidateOption options,
                            BAMValidateCallback callback,
                            void *callbackContext
@@ -3337,7 +4146,7 @@ static rc_t BAMValidateBAM(struct KPath const *bampath,
     if (options > bvo_RecordStructure)
         options = bvo_RecordStructure | (options & 0xFFF0);
     
-    rc = KPath2BGZF(&bam, bampath);
+    rc = VPath2BGZF(&bam, bampath);
     if (rc == 0) {
         stats.bamFileSize = bam.fsize;
         if ((options & 7) > bvo_BlockHeaders)
@@ -3354,8 +4163,8 @@ static rc_t CC dummy_cb(void *ctx, rc_t result, const BAMValidateStats *stats)
     return 0;
 }
 
-LIB_EXPORT rc_t CC BAMValidate(struct KPath const *bampath,
-                               struct KPath const *baipath,
+LIB_EXPORT rc_t CC BAMValidate(struct VPath const *bampath,
+                               struct VPath const *baipath,
                                BAMValidateOption options,
                                BAMValidateCallback callback,
                                void *callbackContext
diff --git a/libs/align/debug.h b/libs/align/debug.h
index cf18501..7c03771 100644
--- a/libs/align/debug.h
+++ b/libs/align/debug.h
@@ -29,15 +29,49 @@
 #include <klib/debug.h>
 
 #if _DEBUGGING
+
 #define ALIGN_DBGF(msg) DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_WRITER), msg)
 #define ALIGN_DBG(fmt, ...) ALIGN_DBGF(("%s:%u: " fmt "\n", __func__, __LINE__, __VA_ARGS__))
 #define ALIGN_DBGERR(rc) if(rc != 0) {ALIGN_DBGF(("%s:%u: %R\n", __func__, __LINE__, rc));}
 #define ALIGN_DBGERRP(fmt, rc, ...) if(rc != 0) {ALIGN_DBGF(("%s:%u: %R " fmt "\n", __func__, __LINE__, rc, __VA_ARGS__));}
+
+#define ALIGN_C_DBGF(msg) DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_COMPRESS), msg)
+#define ALIGN_C_DBG(fmt, ...) ALIGN_C_DBGF(("%s:%u: " fmt "\n", __func__, __LINE__, __VA_ARGS__))
+#define ALIGN_C_DBGERR(rc) if(rc != 0) {ALIGN_C_DBGF(("%s:%u: %R\n", __func__, __LINE__, rc));}
+#define ALIGN_C_DBGERRP(fmt, rc, ...) if(rc != 0) {ALIGN_C_DBGF(("%s:%u: %R " fmt "\n", __func__, __LINE__, rc, __VA_ARGS__));}
+
+#define ALIGN_R_DBGF(msg) DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_COVERAGE), msg)
+#define ALIGN_R_DBG(fmt, ...) ALIGN_R_DBGF(("%s:%u: " fmt "\n", __func__, __LINE__, __VA_ARGS__))
+#define ALIGN_R_DBGERR(rc) if(rc != 0) {ALIGN_R_DBGF(("%s:%u: %R\n", __func__, __LINE__, rc));}
+#define ALIGN_R_DBGERRP(fmt, rc, ...) if(rc != 0) {ALIGN_R_DBGF(("%s:%u: %R " fmt "\n", __func__, __LINE__, rc, __VA_ARGS__));}
+
+#define ALIGN_CF_DBGF(msg) DBGMSG(DBG_ALIGN, DBG_FLAG(DBG_ALIGN_CFG), msg)
+#define ALIGN_CF_DBG(fmt, ...) ALIGN_CF_DBGF(("%s:%u: " fmt "\n", __func__, __LINE__, __VA_ARGS__))
+#define ALIGN_CF_DBGERR(rc) if(rc != 0) {ALIGN_CF_DBGF(("%s:%u: %R\n", __func__, __LINE__, rc));}
+#define ALIGN_CF_DBGERRP(fmt, rc, ...) if(rc != 0) {ALIGN_CF_DBGF(("%s:%u: %R " fmt "\n", __func__, __LINE__, rc, __VA_ARGS__));}
+
 #else
+
+#define ALIGN_DBGF(msg) ((void)0)
 #define ALIGN_DBG(fmt, ...) ((void)0)
 #define ALIGN_DBGERR(rc) ((void)0)
 #define ALIGN_DBGERRP(fmt, rc, ...) ((void)0)
-#define ALIGN_DBGF(msg) ((void)0)
+
+#define ALIGN_C_DBGF(msg) ((void)0)
+#define ALIGN_C_DBG(fmt, ...) ((void)0)
+#define ALIGN_C_DBGERR(rc) ((void)0)
+#define ALIGN_C_DBGERRP(fmt, rc, ...) ((void)0)
+
+#define ALIGN_R_DBGF(msg) ((void)0)
+#define ALIGN_R_DBG(fmt, ...) ((void)0)
+#define ALIGN_R_DBGERR(rc) ((void)0)
+#define ALIGN_R_DBGERRP(fmt, rc, ...) ((void)0)
+
+#define ALIGN_CF_DBGF(msg) ((void)0)
+#define ALIGN_CF_DBG(fmt, ...) ((void)0)
+#define ALIGN_CF_DBGERR(rc) ((void)0)
+#define ALIGN_CF_DBGERRP(fmt, rc, ...) ((void)0)
+
 #endif
 
 #endif /* _h_align_debug_ */
diff --git a/libs/align/dna-reverse-cmpl.c b/libs/align/dna-reverse-cmpl.c
new file mode 100644
index 0000000..3476106
--- /dev/null
+++ b/libs/align/dna-reverse-cmpl.c
@@ -0,0 +1,80 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <align/extern.h>
+
+#include <klib/rc.h>
+#include <insdc/insdc.h>
+#include <sysalloc.h>
+
+#include "debug.h"
+#include <align/dna-reverse-cmpl.h>
+#include <string.h>
+
+LIB_EXPORT rc_t CC DNAReverseCompliment(const INSDC_dna_text* seq, INSDC_dna_text* cmpl, uint32_t len)
+{
+    rc_t rc = 0;
+    uint32_t i;
+    static INSDC_dna_text compl[256] = "~";
+
+    if( seq == NULL || compl == NULL ) {
+        rc = RC( rcAlign, rcType, rcConverting, rcParam, rcNull);
+    } else {
+        if( compl[0] == '~' ) {
+            INSDC_dna_text* x = (INSDC_dna_text*)&compl[0];
+            memset(x, 0, sizeof(compl));
+            x['A'] = x['a'] = 'T';
+            x['T'] = x['t'] = 'A';
+            x['U'] = x['u'] = 'A';
+            x['G'] = x['g'] = 'C';
+            x['C'] = x['c'] = 'G';
+            x['Y'] = x['y'] = 'R';
+            x['R'] = x['r'] = 'Y';
+            x['S'] = x['s'] = 'S';
+            x['W'] = x['w'] = 'W';
+            x['K'] = x['k'] = 'M';
+            x['M'] = x['m'] = 'K';
+            x['B'] = x['b'] = 'V';
+            x['D'] = x['d'] = 'H';
+            x['H'] = x['h'] = 'D';
+            x['V'] = x['v'] = 'B';
+            x['N'] = x['n'] = 'N';
+            x['0'] = '0';
+            x['1'] = '1';
+            x['2'] = '2';
+            x['3'] = '3';
+        }
+        cmpl += len;
+        for(i = 0; i < len; i++) {
+            *--cmpl= compl[(int)seq[i]];
+            if( *cmpl == '\0' ) {
+                rc = RC(rcAlign, rcFormatter, rcWriting, rcData, rcInvalid);
+                break;
+            }
+        }
+    }
+    ALIGN_DBGERR(rc);
+    return rc;
+}
diff --git a/libs/align/libalign-access.vers b/libs/align/libalign-access.vers
index 21e8796..a970716 100644
--- a/libs/align/libalign-access.vers
+++ b/libs/align/libalign-access.vers
@@ -1 +1 @@
-1.0.3
+1.0.15
diff --git a/libs/align/libalign-reader.vers b/libs/align/libalign-reader.vers
index 6d7de6e..2ac9634 100644
--- a/libs/align/libalign-reader.vers
+++ b/libs/align/libalign-reader.vers
@@ -1 +1 @@
-1.0.2
+1.0.13
diff --git a/libs/align/pl_iterator.c b/libs/align/pl_iterator.c
new file mode 100644
index 0000000..b627af6
--- /dev/null
+++ b/libs/align/pl_iterator.c
@@ -0,0 +1,671 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <align/extern.h>
+
+#include <klib/rc.h>
+#include <klib/vector.h>
+#include <klib/refcount.h>
+#include <klib/sort.h>
+#include <klib/text.h>
+#include <klib/out.h>
+#include <insdc/insdc.h>
+#include <align/manager.h>
+#include <align/iterator.h>
+#include <sysalloc.h>
+
+#include "debug.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+
+typedef struct window
+{
+    INSDC_coord_zero first;
+    INSDC_coord_len len;
+} window;
+
+
+typedef struct pi_entry
+{
+    DLNode n;                       /* to have it in a DLList */
+    PlacementIterator *pi;          /* the placement-iterator we have added */
+    window nxt_avail;               /* the next available position of the placement-iterator */
+} pi_entry;
+
+
+typedef struct pi_window
+{
+    DLNode n;                       /* to have it in a DLList */
+    window w;                       /* the window of the placement-iterator */
+    DLList pi_entries;              /* it has a DLList of pi_entry-struct's */
+    uint32_t count;                 /* how many entries do we have */
+} pi_window;
+
+
+typedef struct pi_ref
+{
+    DLNode n;                       /* to have it in a DLList */
+    char * name;                    /* the name of the reference it referes to */
+    window outer;                   /* the sum of all windows it has... */
+    bool outer_initialized;         /* has the outer-window been initialized */
+    DLList pi_windows;              /* it has a DLList of pi_window-struct's */
+} pi_ref;
+
+
+struct PlacementSetIterator
+{
+    KRefcount refcount;
+    struct AlignMgr const *amgr;    /* the alignment-manager... ( right now: we store it, but that's it )*/
+    DLList pi_refs;                 /* a list of references we have to iterate over... */
+    pi_ref * current_ref;           /* what is the current reference, we are handling ? */
+    pi_window * current_window;     /* what is the current window, we are handling ? */
+    pi_entry * current_entry;       /* what is the current pi-entry, we are handling ? */
+};
+
+
+/* =================================================================================================== */
+
+
+LIB_EXPORT rc_t CC AlignMgrMakePlacementSetIterator ( struct AlignMgr const *self,
+    PlacementSetIterator **iter )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        rc = RC( rcAlign, rcIterator, rcConstructing, rcSelf, rcNull );
+    else
+    {
+        if ( iter == NULL  )
+            rc = RC( rcAlign, rcIterator, rcConstructing, rcParam, rcNull );
+        else
+        {
+            PlacementSetIterator * psi = calloc( sizeof * psi, 1 );
+            if ( psi == NULL )
+                rc = RC( rcAlign, rcIterator, rcConstructing, rcMemory, rcExhausted );
+            else
+            {
+                rc = AlignMgrAddRef ( self );
+                if ( rc == 0 )
+                {
+                    KRefcountInit( &psi->refcount, 1, "PlacementSetIterator", "Make", "align" );
+                    psi->amgr = self;
+                    psi->current_ref = NULL;          /* we don't know that yet */
+                    psi->current_window = NULL;
+                    psi->current_entry = NULL;
+                    DLListInit( &psi->pi_refs );
+                }
+            }
+            if ( rc == 0 )
+                *iter = psi;
+            else
+                free( psi );
+        }
+    }
+
+    return rc;
+}
+
+
+/* =================================================================================================== */
+
+
+static int cmp_pchar( const char * a, const char * b )
+{
+    int res = 0;
+    if ( ( a != NULL )&&( b != NULL ) )
+    {
+        size_t len_a = string_size( a );
+        size_t len_b = string_size( b );
+        res = string_cmp ( a, len_a, b, len_b, ( len_a < len_b ) ? len_b : len_a );
+    }
+    return res;
+}
+
+
+/* =================================================================================================== */
+
+
+typedef struct pi_ref_cb_ctx
+{
+    const char * name;
+    pi_ref *res;
+} pi_ref_cb_ctx;
+
+
+static bool CC find_pi_ref_callback( DLNode *n, void *data )
+{
+    pi_ref_cb_ctx *ctx = ( pi_ref_cb_ctx * )data;
+    pi_ref * pr = ( pi_ref * ) n;
+    bool res = ( cmp_pchar( ctx->name, pr->name ) == 0 );
+    if ( res )
+    {
+        ctx->res = pr;
+    }
+    return res;
+}
+
+
+static pi_ref * find_pi_ref( const DLList * list, const char * name )
+{
+    pi_ref_cb_ctx ctx;
+    ctx.res = NULL;
+    ctx.name = name;
+    DLListDoUntil ( list, false, find_pi_ref_callback, &ctx );
+    return ctx.res;
+}
+
+
+/* =================================================================================================== */
+
+typedef struct pi_window_cb_ctx
+{
+    window *w;
+    pi_window *res;
+} pi_window_cb_ctx;
+
+
+static bool CC find_pi_window_callback( DLNode *n, void *data )
+{
+    pi_window_cb_ctx *ctx = ( pi_window_cb_ctx * )data;
+    pi_window * pw = ( pi_window * ) n;
+    bool res = ( pw->w.first == ctx->w->first && pw->w.len == ctx->w->len );
+    if ( res )
+        ctx->res = pw;
+    return res;
+}
+
+
+static pi_window * find_pi_window( const DLList * list, window * w )
+{
+    pi_window_cb_ctx ctx;
+    ctx.res = NULL;
+    ctx.w = w;
+    DLListDoUntil ( list, false, find_pi_window_callback, &ctx );
+    return ctx.res;
+}
+
+
+/* =================================================================================================== */
+
+
+static rc_t make_pi_window( pi_window ** pw, DLList * list, window * w )
+{
+    rc_t rc = 0;
+    *pw = calloc( 1, sizeof ** pw );
+    if ( *pw == NULL )
+        rc = RC( rcAlign, rcIterator, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        (*pw)->w.first = w->first;
+        (*pw)->w.len = w->len;
+        DLListInit( &( (*pw)->pi_entries ) );
+        DLListPushTail ( list, ( DLNode * )(*pw) );
+    }
+    return rc;
+}
+
+
+static rc_t add_to_pi_window( pi_window * pw, PlacementIterator *pi )
+{
+    rc_t rc = 0;
+    pi_entry * pie = calloc( 1, sizeof *pie );
+    if ( pie == NULL )
+        rc = RC( rcAlign, rcIterator, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        pie->pi = pi;       /* store the placement-iterator in it's entry-struct */
+        rc = PlacementIteratorNextAvailPos ( pi, &(pie->nxt_avail.first), &(pie->nxt_avail.len) );
+        if ( rc == 0 )
+        {
+            PlacementIteratorAddRef ( pi );
+            DLListPushTail ( &pw->pi_entries, ( DLNode * )pie );
+        }
+        else
+        {
+            free( pie );
+            ALIGN_DBG( "PlacementIter has no placements...", 0 );
+        }
+    }
+    return rc;
+}
+
+
+/* =================================================================================================== */
+
+
+static rc_t make_pi_ref( pi_ref ** pr, DLList * list, const char * name )
+{
+    rc_t rc = 0;
+    *pr = calloc( 1, sizeof ** pr );
+    if ( *pr == NULL )
+        rc = RC( rcAlign, rcIterator, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        (*pr)->name = string_dup_measure ( name, NULL );
+        DLListInit( &( (*pr)->pi_windows ) );
+        DLListPushTail ( list, ( DLNode * )(*pr) );
+    }
+    return rc;
+}
+
+
+static rc_t add_to_pi_ref( pi_ref * pr, window * w, PlacementIterator *pi )
+{
+    rc_t rc = 0;
+    pi_window * pw = find_pi_window( &pr->pi_windows, w );
+
+    if ( pw == NULL )
+        rc = make_pi_window( &pw, &pr->pi_windows, w );
+    if ( rc == 0 )
+        rc = add_to_pi_window( pw, pi );
+
+    if ( rc == 0 )
+    {
+        /* keep track of the outer window... */
+        if ( DLListHead( &pr->pi_windows ) == NULL )
+        {
+            /* first window ?*/
+            pr->outer.first = w->first;
+            pr->outer.len = w->len;
+        }
+        else
+        {
+            if ( w->first < pr->outer.first )
+                pr->outer.first = w->first;
+            if ( w->first + w->len > pr->outer.first + pr->outer.len )
+                pr->outer.len = ( ( w->first + w->len ) - pr->outer.first ) + 1;
+        }
+    }
+    return rc;
+}
+
+
+/* =================================================================================================== */
+
+
+LIB_EXPORT rc_t CC PlacementSetIteratorAddPlacementIterator ( PlacementSetIterator *self,
+    PlacementIterator *pi )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        rc = RC( rcAlign, rcIterator, rcConstructing, rcSelf, rcNull );
+    else
+    {
+        if ( pi == NULL  )
+            rc = RC( rcAlign, rcIterator, rcConstructing, rcParam, rcNull );
+        else
+        {
+            const char * name;      /* what reference are we aligning against */
+            window w;               /* where does the pi start/end, against said reference */
+
+            /* to find the name of the reference used, important for adding the iterator */
+            rc = PlacementIteratorRefWindow ( pi, &name, &(w.first), &(w.len) );
+            if ( rc == 0 )
+            {
+                pi_ref * pr = find_pi_ref( &self->pi_refs, name );
+                /* if we do not have a pi_ref yet with this name: make one! */
+                if ( pr == NULL )
+                    rc = make_pi_ref( &pr, &self->pi_refs, name );
+                /* add the placement-iterator to the newly-made or existing pi_ref! */
+                if ( rc == 0 )
+                    rc = add_to_pi_ref( pr, &w, pi );
+            }
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC PlacementSetIteratorAddRef ( const PlacementSetIterator *cself )
+{
+    rc_t rc = 0;
+    if ( cself == NULL )
+        rc = RC( rcAlign, rcIterator, rcAttaching, rcSelf, rcNull );
+    else
+    {
+        if ( KRefcountAdd( &cself->refcount, "PlacementSetIterator" ) != krefOkay )
+        {
+            rc = RC( rcAlign, rcIterator, rcAttaching, rcError, rcUnexpected );
+        }
+    }
+    return rc;
+}
+
+
+/* =================================================================================================== */
+
+
+static void CC pi_entry_whacker( DLNode *n, void *data )
+{
+    pi_entry * pie = ( pi_entry * )n;
+    PlacementIteratorRelease ( pie->pi );
+    free( pie );
+}
+
+static void CC pi_window_whacker( DLNode *n, void *data )
+{
+    pi_window * pw = ( pi_window * )n;
+    DLListWhack ( &pw->pi_entries, pi_entry_whacker, NULL );
+    free( pw );
+}
+
+static void CC pi_ref_whacker( DLNode *n, void *data )
+{
+    pi_ref * pr = ( pi_ref * )n;
+    DLListWhack ( &pr->pi_windows, pi_window_whacker, NULL );
+    free( pr->name );
+    free( pr );
+}
+
+
+static void pl_set_iter_clear_curr_ref_window( PlacementSetIterator *self )
+{
+    if ( self->current_window != NULL )
+    {
+        pi_window_whacker( (DLNode *)self->current_window, NULL );
+        self->current_window = NULL;
+    }
+}
+
+
+static void pl_set_iter_clear_curr_ref( PlacementSetIterator *self )
+{
+    if ( self->current_ref != NULL )
+    {
+        pi_ref_whacker( (DLNode *)self->current_ref, NULL );
+        self->current_ref = NULL;
+    }
+}
+
+/* =================================================================================================== */
+
+
+LIB_EXPORT rc_t CC PlacementSetIteratorRelease ( const PlacementSetIterator *cself )
+{
+    rc_t rc = 0;
+    if ( cself == NULL )
+        rc = RC( rcAlign, rcIterator, rcReleasing, rcSelf, rcNull );
+    else
+    {
+        if ( KRefcountDrop( &cself->refcount, "PlacementSetIterator" ) == krefWhack )
+        {
+            PlacementSetIterator * self = ( PlacementSetIterator * ) cself;
+
+            pl_set_iter_clear_curr_ref_window( self );
+            pl_set_iter_clear_curr_ref( self );
+
+            /* release the DLList of pi-ref's and the pi's in it... */
+            DLListWhack ( &self->pi_refs, pi_ref_whacker, NULL );
+
+            AlignMgrRelease ( self->amgr );
+
+            free( self );
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC PlacementSetIteratorNextReference ( PlacementSetIterator *self,
+    INSDC_coord_zero *first_pos, INSDC_coord_len *len, struct ReferenceObj const ** refobj )
+{
+    rc_t rc = 0;
+    if ( refobj != NULL ) { *refobj = NULL; }
+
+    if ( self == NULL )
+        return RC( rcAlign, rcIterator, rcReleasing, rcSelf, rcNull );
+
+    pl_set_iter_clear_curr_ref_window( self );
+    pl_set_iter_clear_curr_ref( self );
+    self->current_entry = NULL;     /* what is the current pi-entry, we are handling ? */
+
+    /* !!! here we are taking the next reference from the top of the list */
+    self->current_ref = ( pi_ref * )DLListPopHead ( &self->pi_refs );
+
+    if ( self->current_ref == NULL )
+    {
+        return SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+    }
+
+    if ( first_pos != NULL ) *first_pos = self->current_ref->outer.first;
+    if ( len != NULL) *len = self->current_ref->outer.len;
+
+    /* if the caller wants to know the ref-obj... */
+    if ( refobj != NULL )
+    {
+        pi_window *pw = ( pi_window * )DLListHead( &(self->current_ref->pi_windows) );
+        if ( pw != NULL )
+        {
+            pi_entry * pie = ( pi_entry * )DLListHead( &(pw->pi_entries) );
+            if ( pie != NULL )
+            {
+                rc = PlacementIteratorRefObj( pie->pi, refobj );
+            }
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC PlacementSetIteratorNextWindow ( PlacementSetIterator *self,
+    INSDC_coord_zero *first_pos, INSDC_coord_len *len )
+{
+    rc_t rc = 0;
+    if ( first_pos != NULL ) { *first_pos = 0; }
+    if ( len != NULL ) { *len = 0; }
+
+    if ( self == NULL )
+        return RC( rcAlign, rcIterator, rcReleasing, rcSelf, rcNull );
+
+    self->current_entry = NULL;     /* what is the current pi-entry, we are handling ? */
+
+    if ( self->current_ref == NULL )
+    {
+        return SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+    }
+
+    pl_set_iter_clear_curr_ref_window( self );
+
+    /* !!! here we are taking the next window from the top of the list */
+    self->current_window = ( pi_window * )DLListPopHead ( &(self->current_ref->pi_windows) );
+
+    /* check if we have reached the last window on this reference... */
+    if ( self->current_window == NULL )
+    {
+        return SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+    }
+
+    /* point to the first entry in this window... */
+    self->current_entry = ( pi_entry * )DLListHead( &(self->current_window->pi_entries) );
+
+    /* if the caller wants to know first_pos / len */
+    if ( first_pos != NULL )
+    {
+        *first_pos = self->current_window->w.first;
+    }
+    if ( len != NULL )
+    {
+        *len = self->current_window->w.len;
+    }
+
+    return rc;
+}
+
+typedef struct pi_ref_nxt_avail_pos_ctx
+{
+    uint32_t count;
+    INSDC_coord_zero min_pos;
+    INSDC_coord_len min_len;
+    bool min_pos_initialized;
+    rc_t rc;
+} pi_ref_nxt_avail_pos_ctx;
+
+static void CC nxt_avail_pos_cb( DLNode * n, void * data )
+{
+    pi_ref_nxt_avail_pos_ctx * ctx = ( pi_ref_nxt_avail_pos_ctx * ) data;
+    if ( ctx->rc == 0 )
+    {
+        pi_entry * pie = ( pi_entry * )n;
+        rc_t rc = PlacementIteratorNextAvailPos ( pie->pi, &(pie->nxt_avail.first), &(pie->nxt_avail.len) );
+        if ( rc == 0 )
+        {
+/*            OUTMSG(( "nxt_avail.first=%u w.last=%u\n", pie->nxt_avail.first, pie->w.last )); */
+            ( ctx->count )++;
+            if ( ctx->min_pos_initialized )
+            {
+                if ( pie->nxt_avail.first < ctx->min_pos )
+                {
+                    ctx->min_pos = pie->nxt_avail.first;
+                    ctx->min_len = pie->nxt_avail.len;
+                }
+            }
+            else
+            {
+                ctx->min_pos = pie->nxt_avail.first;
+                ctx->min_len = pie->nxt_avail.len;
+                ctx->min_pos_initialized = true;
+            }
+        }
+        else
+        {
+            if ( GetRCState( rc ) != rcDone )
+                ctx->rc = rc;
+        }
+    }
+}
+
+
+LIB_EXPORT rc_t CC PlacementSetIteratorNextAvailPos ( const PlacementSetIterator *cself,
+    INSDC_coord_zero *pos, INSDC_coord_len *len )
+{
+    rc_t rc = 0;
+    if ( cself == NULL )
+        rc = RC( rcAlign, rcIterator, rcAccessing, rcSelf, rcNull );
+    else
+    {
+        if ( pos == NULL )
+            rc = RC( rcAlign, rcIterator, rcAccessing, rcParam, rcNull );
+        else
+        {
+            PlacementSetIterator *self = ( PlacementSetIterator * )cself;
+            if ( self->current_ref == NULL || self->current_window == NULL )
+            {
+                rc = SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+            }
+            else
+            {
+                /* loop through all the pi_entry int the current_pi_ref */
+                pi_ref_nxt_avail_pos_ctx ctx;
+                ctx.count = 0;
+                ctx.rc = 0;
+                ctx.min_pos = 0;
+                ctx.min_len = 0;
+                ctx.min_pos_initialized = false;
+                DLListForEach ( &(self->current_window->pi_entries),
+                                false, nxt_avail_pos_cb, &ctx );
+                rc = ctx.rc;
+                if ( ctx.count == 0 )
+                {
+                    rc = SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+                }
+                else
+                {
+                    *pos = ctx.min_pos;
+                    if ( len != NULL )
+                    {
+                        *len = ctx.min_len;
+                    }
+                }
+            } 
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC PlacementSetIteratorNextRecordAt ( PlacementSetIterator *self,
+    INSDC_coord_zero pos, const PlacementRecord **rec )
+{
+    rc_t rc = 0;
+    pi_window * pw;
+    bool done;
+
+    if ( rec == NULL )
+        return RC( rcAlign, rcIterator, rcAccessing, rcParam, rcNull );
+    *rec = NULL;
+    if ( self == NULL )
+        return RC( rcAlign, rcIterator, rcAccessing, rcSelf, rcNull );
+    if ( self->current_ref == NULL )
+    {
+        /* no more reference to iterator over! the iterator is done! */
+        return SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+    }
+    if ( self->current_window == NULL )
+    {
+        /* no more windows to iterator over! the iterator is done! */
+        return SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+    }
+
+    pw = self->current_window;
+    done = false;
+    do
+    {
+        if ( self->current_entry == NULL )
+        {
+            self->current_entry = ( pi_entry * )DLListHead( &(pw->pi_entries) );
+        }
+        done = ( self->current_entry == NULL );
+        rc = ( done ? SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone ) : 0 );
+        if ( rc == 0 )
+        {
+            rc = PlacementIteratorNextRecordAt ( self->current_entry->pi, pos, rec );
+            done = ( GetRCState( rc ) != rcDone );
+            if ( !done )
+            {
+                self->current_entry = ( pi_entry * )DLNodeNext( ( DLNode * )self->current_entry );
+                done = ( self->current_entry == NULL );
+                rc = ( done ? SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone ) : 0 );
+            }
+        }
+    } while ( !done );
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC PlacementSetIteratorNextIdAt ( PlacementSetIterator *self,
+    INSDC_coord_zero pos, int64_t *row_id, INSDC_coord_len *len )
+{
+    const PlacementRecord *rec;
+    rc_t rc = PlacementSetIteratorNextRecordAt ( self, pos, &rec );
+    if ( rc == 0 )
+    {
+        if ( row_id != NULL ) *row_id = rec->id;
+        if ( len != NULL ) *len = rec->len;
+    }
+    return rc;
+}
diff --git a/libs/align/quality-quantizer.c b/libs/align/quality-quantizer.c
new file mode 100644
index 0000000..15205ca
--- /dev/null
+++ b/libs/align/quality-quantizer.c
@@ -0,0 +1,105 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <stdint.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <klib/defs.h>
+#include <align/quality-quantizer.h>
+
+LIB_EXPORT
+bool CC QualityQuantizerInitMatrix(uint8_t dst[256], char const quant[])
+{
+    unsigned i = 0;
+    unsigned limit = 0;
+    unsigned value = 0;
+    unsigned cur;
+    int ws = 1;
+    int st = 0;
+    
+    memset(dst, 0, 256);
+    for (cur = 0; quant[cur] != 0; ++cur) {
+        int const ch = quant[cur];
+        
+        if (ws) {
+            if (isspace(ch))
+                continue;
+            ws = false;
+        }
+        switch (st) {
+        case 0:
+            if (isdigit(ch)) {
+                value = (value * 10) + ch - '0';
+                break;
+            }
+            else if (isspace(ch)) {
+                ++st;
+                ws = true;
+                break;
+            }
+            ++st;
+            /* no break */
+        case 1:
+            if (ch != ':')
+                return false;
+            ws = true;
+            ++st;
+            break;
+        case 2:
+            if (isdigit(ch)) {
+                limit  = (limit * 10) + ch - '0';
+                break;
+            }
+            else if (isspace(ch)) {
+                ++st;
+                ws = true;
+                break;
+            }
+            else if (ch == '-' && limit == 0) {
+                memset(dst + i, value, 256 - i);
+                return true;
+            }
+            ++st;
+            /* no break */
+        case 3:
+            if (ch != ',')
+                return false;
+            ws = true;
+            st = 0;
+            if (i > limit)
+                return false;
+            /* set from dst[i..(limit - 1)] = value
+             * not inclusive of the endpoint
+             */
+            memset(dst + i, value, limit - i);
+            i = limit;
+            limit = value = 0;
+            break;
+        }
+    }
+    return false;
+}
diff --git a/libs/align/reader-cmn.c b/libs/align/reader-cmn.c
index c147563..607ac09 100644
--- a/libs/align/reader-cmn.c
+++ b/libs/align/reader-cmn.c
@@ -26,6 +26,7 @@
 #include <klib/rc.h>
 #include <vdb/table.h>
 #include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
 
 #include "reader-cmn.h"
 #include "debug.h"
@@ -34,98 +35,283 @@
 #include <stdlib.h>
 #include <string.h>
 
-struct TableReader {
-    const VTable* tbl;
+struct TableReader
+{
     const VCursor* curs;
     const TableReaderColumn* cols;
     int64_t curr;
 };
 
-rc_t CC TableReader_Make(const TableReader** cself, const VTable* table, TableReaderColumn* cols, size_t cache)
+
+rc_t CC TableReader_Make( const TableReader** cself, const VTable* table,
+                          TableReaderColumn* cols, size_t cache )
+{
+    rc_t rc = 0;
+    const VCursor* curs;
+
+    if ( table == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcConstructing, rcParam, rcInvalid );
+    }
+    else
+    {
+        rc = VTableCreateCachedCursorRead( table, &curs, cache );
+        if ( rc == 0 )
+        {
+            rc = TableReader_MakeCursor( cself, curs, cols );
+            VCursorRelease( curs );
+        }
+    }
+    ALIGN_DBGERR( rc );
+    return rc;
+}
+
+
+rc_t CC TableReader_MakeCursor( const TableReader** cself, const VCursor* cursor,
+                                TableReaderColumn* cols )
 {
     rc_t rc = 0;
     TableReader* obj = NULL;
 
-    if( cself == NULL || table == NULL || cols == NULL || cols->name == NULL ) {
-        rc = RC(rcAlign, rcType, rcConstructing, rcParam, rcInvalid);
-    } else if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
-        rc = RC(rcAlign, rcType, rcConstructing, rcMemory, rcExhausted);
-    } else {
-        obj->tbl = table;
-        VTableAddRef(table);
-        obj->cols = cols;
-        if( (rc = VTableCreateCachedCursorRead(obj->tbl, &obj->curs, cache)) == 0 ) {
-            while(cols->name != NULL) {
-                if( !(cols->flags & ercol_Skip) ) {
-                    if( (rc = VCursorAddColumn(obj->curs, &cols->idx, cols->name)) != 0) {
-                        if( GetRCState(rc) == rcNotFound && (cols->flags & ercol_Optional) ) {
+    if ( cself == NULL || cursor == NULL || cols == NULL || cols->name == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcConstructing, rcParam, rcInvalid );
+    }
+    else if ( ( obj = calloc( 1, sizeof( *obj ) ) ) == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcConstructing, rcMemory, rcExhausted );
+    }
+    else
+    {
+        rc = VCursorAddRef( cursor );
+        if ( rc == 0 )
+        {
+            obj->curs = cursor;
+/*            obj->cursor_open = false; */
+            obj->cols = cols;
+            while ( rc == 0 && cols->name != NULL)
+            {
+                if ( !( cols->flags & ercol_Skip ) )
+                {
+                    rc = VCursorAddColumn( obj->curs, &cols->idx, cols->name );
+                    if ( rc != 0 )
+                    {
+                        if ( ( rc != 0 && ( cols->flags & ercol_Optional ) ) || GetRCState( rc ) == rcExists )
+                        {
                             rc = 0;
                         }
+                        else
+                        {
+                            ALIGN_DBGERRP( "cannot add column '%s' to cursor", rc, cols->name );
+                        }
                     }
                 }
                 cols++;
             }
-            if( rc == 0 ) {
-                rc = VCursorOpen(obj->curs);
+            if ( rc == 0 )
+            {
+                rc = VCursorOpen( obj->curs );
             }
         }
     }
-    if( rc == 0 ) {
+
+
+    if( rc == 0 )
+    {
         *cself = obj;
-        ALIGN_DBG("ok%c", '!');
-    } else {
-        TableReader_Whack(obj);
-        ALIGN_DBGERRP("table", rc, 0);
+/*        ALIGN_DBG("ok%c", '!'); */
+    }
+    else
+    {
+        TableReader_Whack( obj );
+        ALIGN_DBGERRP( "TableReader_MakeCursor() failed", rc, 0 );
     }
     return rc;
 }
 
-void CC TableReader_Whack(const TableReader* cself)
+
+void CC TableReader_Whack( const TableReader* cself )
 {
-    if( cself != NULL ) {
-        VCursorRelease(cself->curs);
-        VTableRelease(cself->tbl);
-        free((TableReader*)cself);
+    if ( cself != NULL )
+    {
+        VCursorRelease( cself->curs );
+        free( ( TableReader* ) cself );
     }
 }
 
-rc_t CC TableReader_ReadRow(const TableReader* cself, int64_t rowid)
+/*
+rc_t CC TableReader_OpenCursor( const TableReader* cself )
+{
+    TableReader * tr = ( TableReader * )cself;
+    VCursor * curs = ( VCursor * )tr->curs;
+    rc_t rc = VCursorOpen( curs );
+    tr->cursor_open = ( rc == 0 );
+    return rc;
+}
+*/
+
+rc_t CC TableReader_ReadRow( const TableReader* cself, int64_t rowid )
 {
     rc_t rc = 0;
     TableReaderColumn* c = NULL;
 
-    if( cself == NULL ) {
+    if ( cself == NULL )
+    {
         rc = RC(rcAlign, rcType, rcOpening, rcSelf, rcNull);
-    } else if( cself->curr != rowid &&
-               (rc = VCursorCloseRow(cself->curs)) == 0 &&
-               (rc = VCursorSetRowId(cself->curs, rowid)) == 0 &&
-               (rc = VCursorOpenRow(cself->curs)) == 0 ) {
-        uint32_t boff = 0;
-        c = (TableReaderColumn*)(cself->cols);
-        while(c->name != NULL) {
-            if (c->idx != 0) {
-                rc = VCursorCellData(cself->curs, c->idx, NULL, (const void**)&c->base, &boff, &c->len);
-                if (rc) {
-                    if (c->flags & ercol_Optional) {
-                        rc = 0;
+    }
+    else if ( cself->curr != rowid )
+    {
+/*
+        if ( !cself->cursor_open )
+            rc = TableReader_OpenCursor( cself );
+*/
+        if ( rc == 0 )
+        {
+            rc = VCursorCloseRow( cself->curs );
+            if ( rc == 0 )
+            {
+                rc = VCursorSetRowId( cself->curs, rowid );
+                if ( rc == 0 )
+                {
+                    rc = VCursorOpenRow( cself->curs );
+                    if ( rc == 0 )
+                    {
+                        uint32_t boff = 0;
+                        c = ( TableReaderColumn* )( cself->cols );
+                        while ( c->name != NULL )
+                        {
+                            if ( c->idx != 0 )
+                            {
+                                /* TBD - FIX ME
+                                   this can be dangerous, since VCursorCellData
+                                   can cause cache flushes, invalidating previous
+                                   reads. THESE MUST BE FETCHED UPON DEMAND, NOT
+                                   PREFETCHED!!
+                                */
+                                rc = VCursorCellData( cself->curs, c->idx, NULL, (const void**)&c->base.var, &boff, &c->len );
+                                if ( rc != 0 )
+                                {
+                                    if ( c->flags & ercol_Optional )
+                                        rc = 0;
+                                    c->base.var = NULL;
+                                    c->len = 0;
+                                }
+                                else if ( boff != 0 )
+                                {
+                                    rc = RC( rcAlign, rcType, rcReading, rcData, rcUnsupported );
+                                }
+                            }
+                            c++;
+                        }
                     }
                 }
-                else if (boff != 0) {
-                    rc = RC(rcAlign, rcType, rcReading, rcData, rcUnsupported);
-                }
             }
-            c++;
         }
     }
-    if( rc != 0 ) {
-        ALIGN_DBGERRP("column %s row %ld", rc, c ? c->name : "<none>", rowid);
-    } else {
-        ((TableReader*)cself)->curr = rowid;
+
+    if ( rc != 0 )
+    {
+        ALIGN_DBGERRP( "column %s row %ld", rc, c ? c->name : "<none>", rowid );
+    }
+    else
+    {
+        ( ( TableReader* )cself )->curr = rowid;
     }
     return rc;
 }
 
-rc_t CC TableReader_IdRange(const TableReader* cself, int64_t* first, uint64_t* count)
+
+rc_t CC TableReader_IdRange( const TableReader* cself, int64_t* first, uint64_t* count )
+{
+    rc_t rc = 0;
+    if ( cself == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcRetrieving, rcSelf, rcNull );
+    }
+    else
+    {
+/*
+        if ( !cself->cursor_open )
+            rc = TableReader_OpenCursor( cself );
+        if ( rc == 0 )
+*/
+            rc = VCursorIdRange( cself->curs, 0, first, count );
+    }
+    return rc;
+}
+
+
+rc_t CC TableReader_OpenIndex( const TableReader* cself, const char* name, const KIndex** idx )
+{
+    rc_t rc = 0;
+
+    if ( cself == NULL || name == NULL || idx == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcNull );
+    }
+    else
+    {
+/*
+        if ( !cself->cursor_open )
+            rc = TableReader_OpenCursor( cself );
+        if ( rc == 0 )
+        {
+*/
+            const VTable* tbl;
+            rc = VCursorOpenParentRead( cself->curs, &tbl );
+            if ( rc == 0 )
+            {
+                rc = VTableOpenIndexRead( tbl, idx, name );
+                VTableRelease( tbl );
+            }
+/*        } */
+    }
+    return rc;
+}
+
+
+rc_t CC TableReader_PageIdRange( const TableReader *cself, int64_t rowid,
+                                 int64_t *pfirst, int64_t *plast )
 {
-    return VCursorIdRange(cself->curs, 0, first, count);
+    rc_t rc = 0;
+    
+    if ( cself == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcOpening, rcSelf, rcNull );
+    }
+    else
+    {
+/*
+        if ( !cself->cursor_open )
+            rc = TableReader_OpenCursor( cself );
+        if ( rc == 0 )
+        {
+*/
+            if ( pfirst != NULL || plast != NULL )
+            {
+                int64_t first = INT64_MAX;
+                int64_t last = INT64_MIN;
+                unsigned i;
+                
+                for ( i = 0; cself->cols[ i ].name != NULL; ++i )
+                {
+                    if ( cself->cols[i].idx != 0 )
+                    {
+                        int64_t tfirst;
+                        int64_t tlast;
+                        
+                        rc = VCursorPageIdRange( cself->curs, cself->cols[ i ].idx, rowid, &tfirst, &tlast );
+                        if ( rc == 0 )
+                        {
+                            if ( first > tfirst ) { first = tfirst; }
+                            if ( last < tlast ) { last = tlast; }
+                        }
+                    }
+                }
+                if ( pfirst != NULL ) { *pfirst = first; }
+                if ( plast  != NULL ) { *plast  = last; }
+            }
+/*        } */
+    }
+    return rc;
 }
diff --git a/libs/align/reader-cmn.h b/libs/align/reader-cmn.h
index 840d090..3310999 100644
--- a/libs/align/reader-cmn.h
+++ b/libs/align/reader-cmn.h
@@ -26,8 +26,8 @@
 #ifndef _h_align_reader_cmn_
 #define _h_align_reader_cmn_
 
-#include <vdb/manager.h>
-#include <vdb/database.h>
+#include <insdc/insdc.h>
+#include <insdc/sra.h>
 
 enum TableReaderColumn_Array {
     ercol_Optional = 0x01,
@@ -38,7 +38,24 @@ enum TableReaderColumn_Array {
 typedef struct TableReaderColumn_struct {
     uint32_t idx;
     const char* name;
-    const void* base;
+    union {
+        const void* var;
+        const char* str;
+        const bool* buul;
+        const uint8_t* u8;
+        const int16_t* i16;
+        const uint16_t* u16;
+        const int32_t* i32;
+        const uint32_t* u32;
+        const int64_t* i64;
+        const uint64_t* u64;
+        const INSDC_coord_one* coord1;
+        const INSDC_coord_zero* coord0;
+        const INSDC_coord_len* coord_len;
+        const INSDC_coord_val* coord_val;
+        const INSDC_SRA_xread_type* read_type;
+        const INSDC_SRA_read_filter* read_filter;
+    } base;
     uint32_t len;
     uint32_t flags;
 } TableReaderColumn;
@@ -47,10 +64,18 @@ typedef struct TableReader TableReader;
 
 rc_t CC TableReader_Make(const TableReader** cself, const VTable* table, TableReaderColumn* cols, size_t cache);
 
+rc_t CC TableReader_MakeCursor(const TableReader** cself, const VCursor* cursor, TableReaderColumn* cols );
+
+rc_t CC TableReader_OpenCursor( const TableReader* cself );
+
 void CC TableReader_Whack(const TableReader* cself);
 
 rc_t CC TableReader_ReadRow(const TableReader* cself, int64_t rowid);
 
 rc_t CC TableReader_IdRange(const TableReader* cself, int64_t* first, uint64_t* count);
 
+rc_t CC TableReader_OpenIndex(const TableReader* cself, const char* name, const KIndex** idx);
+
+rc_t CC TableReader_PageIdRange(const TableReader *cself, int64_t rowid, int64_t *first, int64_t *last);
+
 #endif /* _h_align_reader_cmn_ */
diff --git a/libs/align/reader-refseq.c b/libs/align/reader-refseq.c
index bb72a4b..0a29c53 100644
--- a/libs/align/reader-refseq.c
+++ b/libs/align/reader-refseq.c
@@ -26,14 +26,17 @@
 #include <align/extern.h>
 
 #include <klib/rc.h>
+#include <klib/text.h>
 #include <insdc/insdc.h>
 #include <vdb/manager.h>
 #include <vdb/table.h>
+#include <vdb/cursor.h>
 #include <align/reader-refseq.h>
 #include <os-native.h>
 #include <sysalloc.h>
 
 #include "reader-cmn.h"
+#include "reference-cmn.h"
 #include "debug.h"
 
 #include <stdlib.h>
@@ -46,12 +49,11 @@
 static const TableReaderColumn TableReaderRefSeq_cols[] =
 {
     /* order important, see code below! */
-    {0, "(INSDC:dna:text)READ", NULL, 0, 0},
-    {0, "(INSDC:4na:bin)READ", NULL, 0, ercol_Skip},
-    {0, "QUALITY", NULL, 0, ercol_Skip | ercol_Optional},
-    {0, "SEQ_START", NULL, 0, 0},
-    {0, "SEQ_LEN", NULL, 0, 0},
-    {0, NULL, NULL, 0, 0}
+    {0, "(INSDC:dna:text)READ", {NULL}, 0, 0},
+    {0, "(INSDC:4na:bin)READ", {NULL}, 0, ercol_Skip},
+    {0, "QUALITY", {NULL}, 0, ercol_Skip | ercol_Optional},
+    {0, "SEQ_LEN", {NULL}, 0, 0},
+    {0, NULL, {NULL}, 0, 0}
 };
 
 struct TableReaderRefSeq {
@@ -59,13 +61,12 @@ struct TableReaderRefSeq {
     TableReaderColumn cols[sizeof(TableReaderRefSeq_cols)/sizeof(TableReaderRefSeq_cols[0])];
     char seq_id[256];
     uint32_t max_seq_len;
-    uint64_t total_seq_len;
+    INSDC_coord_len total_seq_len;
     bool circular;
     bool has_md5;
     uint8_t md5[16];
-    const char** read;
-    const INSDC_coord_one** seq_start;
-    const INSDC_coord_len** seq_len;
+    const TableReaderColumn* read;
+    const TableReaderColumn* seq_len;
 };
 
 LIB_EXPORT rc_t CC TableReaderRefSeq_MakeTable(const TableReaderRefSeq** cself, const VDBManager* vmgr,
@@ -82,28 +83,34 @@ LIB_EXPORT rc_t CC TableReaderRefSeq_MakeTable(const TableReaderRefSeq** cself,
         const TableReader* tmp;
         TableReaderColumn static_cols[] = {
             /* order important, see code below! */
-            {0, "MAX_SEQ_LEN", NULL, 0, 0},
-            {0, "SEQ_ID", NULL, 0, 0},
-            {0, "TOTAL_SEQ_LEN", NULL, 0, 0},
-            {0, "CIRCULAR", NULL, 0, 0},
-            {0, "MD5", NULL, 0, ercol_Optional},
-            {0, NULL, NULL, 0, 0}
+            {0, "MAX_SEQ_LEN", {NULL}, 0, 0},
+            {0, "SEQ_ID", {NULL}, 0, 0},
+            {0, "TOTAL_SEQ_LEN", {NULL}, 0, 0},
+            {0, "CIRCULAR", {NULL}, 0, 0},
+            {0, "MD5", {NULL}, 0, ercol_Optional},
+            {0, NULL, {NULL}, 0, 0}
         };
         if( (rc = TableReader_Make(&tmp, table, static_cols, 0)) == 0 ) {
             if( (rc = TableReader_ReadRow(tmp, 1)) == 0 ) {
-                self->max_seq_len = *((uint32_t*)(static_cols[0].base));
-                self->total_seq_len = *((uint64_t*)(static_cols[2].base));
-                if( static_cols[1].base != NULL ) {
-                    if( static_cols[1].len > sizeof(self->seq_id) - 1 ) {
-                        rc = RC(rcAlign, rcType, rcConstructing, rcBuffer, rcInsufficient);
-                    } else {
-                        strncpy(self->seq_id, static_cols[1].base, static_cols[1].len);
-                        self->seq_id[static_cols[1].len] = '\0';
+                self->max_seq_len = static_cols[0].base.u32[0];
+                self->total_seq_len = static_cols[2].base.u64[0];
+                if( self->total_seq_len != static_cols[2].base.u64[0] ) {
+                    rc = RC(rcAlign, rcType, rcConstructing, rcData, rcOutofrange);
+                }
+                if( static_cols[1].base.var != NULL ) {
+                    if ( static_cols[ 1 ].len > sizeof( self->seq_id ) - 1 )
+                    {
+                        rc = RC( rcAlign, rcType, rcConstructing, rcBuffer, rcInsufficient );
+                    }
+                    else
+                    {
+                        string_copy( self->seq_id, ( sizeof self->seq_id ) -  1, static_cols[1].base.str, static_cols[1].len );
+                        self->seq_id[ static_cols[ 1 ].len ] = '\0';
                     }
                 }
-                self->circular = *((bool*)(static_cols[3].base));
-                if( static_cols[4].base != NULL ) {
-                    memcpy(self->md5, static_cols[4].base, sizeof(self->md5));
+                self->circular = static_cols[3].base.buul[0];
+                if( static_cols[4].base.var != NULL ) {
+                    memcpy(self->md5, static_cols[4].base.var, sizeof(self->md5));
                     self->has_md5 = true;
                 }
             }
@@ -112,19 +119,18 @@ LIB_EXPORT rc_t CC TableReaderRefSeq_MakeTable(const TableReaderRefSeq** cself,
 
         memcpy(self->cols, TableReaderRefSeq_cols, sizeof(TableReaderRefSeq_cols));
         if( options & errefseq_4NA) {
-            self->cols[0].flags = ercol_Skip;
-            self->cols[1].flags = 0;
-            self->read = (const char**)&(self->cols[1].base);
+            self->cols[0].flags |= ercol_Skip;
+            self->cols[1].flags &= ~ercol_Skip;
+            self->read = &self->cols[1];
         } else {
-            self->read = (const char**)&(self->cols[0].base);
+            self->read = &self->cols[0];
         }
-        self->seq_start = (const INSDC_coord_one**)&(self->cols[3].base);
-        self->seq_len = (const INSDC_coord_len**)&(self->cols[4].base);
+        self->seq_len = &self->cols[3];
         rc = TableReader_Make(&self->base, table, self->cols, cache);
     }
     if( rc == 0 ) {
         *cself = self;
-        ALIGN_DBG("table 0x%p opened 0x%p", table, self);
+        /* ALIGN_DBG("table 0x%p opened 0x%p", table, self); */
     } else {
         TableReaderRefSeq_Whack(self);
         ALIGN_DBGERRP("table for 0x%p", rc, table);
@@ -145,7 +151,7 @@ LIB_EXPORT rc_t CC TableReaderRefSeq_MakePath(const TableReaderRefSeq** cself, c
         VTableRelease(tbl);
     }
     if( rc == 0 ) {
-        ALIGN_DBG("table %s opened 0x%p", path, *cself);
+        /* ALIGN_DBG("table %s opened 0x%p", path, *cself); */
     } else {
         ALIGN_DBGERRP("table for %s", rc, path);
     }
@@ -155,7 +161,7 @@ LIB_EXPORT rc_t CC TableReaderRefSeq_MakePath(const TableReaderRefSeq** cself, c
 LIB_EXPORT void CC TableReaderRefSeq_Whack(const TableReaderRefSeq* cself)
 {
     if( cself != NULL ) {
-        ALIGN_DBG("table 0x%p closed", cself);
+        /* ALIGN_DBG("table 0x%p closed", cself); */
         TableReader_Whack(cself->base);
         free((TableReaderRefSeq*)cself);
     }
@@ -168,13 +174,13 @@ LIB_EXPORT rc_t CC TableReaderRefSeq_SeqId(const TableReaderRefSeq* cself, const
         rc = RC(rcAlign, rcType, rcReading, rcParam, rcNull);
     } else {
         *id = cself->seq_id;
-        *id_sz = strlen(cself->seq_id);
+        *id_sz = string_size(cself->seq_id);
     }
     ALIGN_DBGERR(rc);
     return rc;
 }
 
-LIB_EXPORT rc_t CC TableReaderRefSeq_SeqLength(const TableReaderRefSeq* cself, uint64_t* len)
+LIB_EXPORT rc_t CC TableReaderRefSeq_SeqLength(const TableReaderRefSeq* cself, INSDC_coord_len* len)
 {
     rc_t rc = 0;
     if( cself == NULL || len == NULL ) {
@@ -210,8 +216,8 @@ LIB_EXPORT rc_t CC TableReaderRefSeq_MD5(const TableReaderRefSeq* cself, const u
     return rc;
 }
 
-LIB_EXPORT rc_t CC TableReaderRefSeq_Read(const TableReaderRefSeq* cself, int64_t offset, INSDC_coord_len len,
-                                          INSDC_dna_text* buffer, INSDC_coord_len* written)
+LIB_EXPORT rc_t CC TableReaderRefSeq_Read(const TableReaderRefSeq* cself, INSDC_coord_zero offset, INSDC_coord_len len,
+                                          uint8_t* buffer, INSDC_coord_len* written)
 {
     rc_t rc = 0;
 
@@ -219,33 +225,24 @@ LIB_EXPORT rc_t CC TableReaderRefSeq_Read(const TableReaderRefSeq* cself, int64_
         rc = RC(rcAlign, rcType, rcReading, rcParam, rcNull);
     } else if( len == 0 ) {
         *written = 0;
-    } else if( !cself->circular && (offset < 0 || offset >= cself->total_seq_len) ) {
-        rc = RC(rcAlign, rcType, rcReading, rcParam, rcOutofrange);
-    } else {
+    } else if( (rc = ReferenceSeq_ReOffset(cself->circular, cself->total_seq_len, &offset)) == 0 ) {
         INSDC_coord_len q = 0;
-
-        if( offset < 0 ) {
-            /* revert offset to positive */
-            offset = cself->total_seq_len - ((-offset) % cself->total_seq_len);
-        } else if( offset > cself->total_seq_len ) {
-            offset %= cself->total_seq_len;
-        }
         *written = 0;
         do {
             int64_t rowid = offset / cself->max_seq_len + 1;
             INSDC_coord_zero s = offset % cself->max_seq_len;
             if( (rc = TableReader_ReadRow(cself->base, rowid)) == 0 ) {
-                q = **(cself->seq_len) - s;
+                q = cself->seq_len->base.coord_len[0] - s;
                 if( q > len ) {
                     q = len;
                 }
-                memcpy(&buffer[*written], *(cself->read) + s, q);
+                memcpy(&buffer[*written], cself->read->base.str + s, q);
                 *written += q;
                 offset += q;
                 len -= q;
             }
             /* SEQ_LEN < MAX_SEQ_LEN is last row unless it is CIRCULAR */
-            if( (**(cself->seq_len) < cself->max_seq_len) ) {
+            if( cself->seq_len->base.coord_len[0] < cself->max_seq_len ) {
                 if( !cself->circular ) {
                     break;
                 }
diff --git a/libs/align/ref_iterator.c b/libs/align/ref_iterator.c
new file mode 100644
index 0000000..8d91afc
--- /dev/null
+++ b/libs/align/ref_iterator.c
@@ -0,0 +1,866 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <align/extern.h>
+
+#include <klib/rc.h>
+#include <klib/container.h>
+#include <klib/refcount.h>
+#include <klib/sort.h>
+#include <klib/text.h>
+#include <klib/out.h>
+#include <insdc/insdc.h>
+#include <align/reference.h>
+#include <align/iterator.h>
+#include <align/manager.h>
+#include <sysalloc.h>
+
+#include "debug.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+#define COL_READ "(INSDC:4na:bin)READ"
+#define COL_HAS_MISMATCH "(bool)HAS_MISMATCH"
+#define COL_HAS_REF_OFFSET "(bool)HAS_REF_OFFSET"
+#define COL_REF_OFFSET "(I32)REF_OFFSET"
+#define COL_READ_GROUP "(ascii)SEQ_SPOT_GROUP"
+
+
+typedef struct spot_group
+{
+    DLNode n;                       /* to have it in a DLList */
+    char * name;                    /* the name of the read-group, can be NULL */
+    size_t len;                     /* the length of the name */
+    DLList records;                 /* has list of PlacementRecords... */
+} spot_group;
+
+
+static rc_t make_spot_group( spot_group ** sg, DLList * list, const char * name, size_t len )
+{
+    rc_t rc = 0;
+    *sg = calloc( 1, sizeof ** sg );
+    if ( *sg == NULL )
+        rc = RC( rcAlign, rcIterator, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        if ( len > 0 && name != NULL )
+        {
+            (*sg)->name = string_dup( name, len );
+            if ( (*sg)->name != NULL )
+            {
+                (*sg)->len = len;
+            }
+        }
+        /* if name is NULL, the spot-group is initialized with 0 via calloc() */
+        DLListInit( &( (*sg)->records ) );
+        DLListPushTail ( list, ( DLNode * )(*sg) );
+    }
+    return rc;
+}
+
+
+static void CC whack_the_placement_record( DLNode *n, void *data )
+{    PlacementRecordWhack ( ( PlacementRecord * )n );   }
+
+static void free_spot_group( spot_group *sg )
+{
+    if ( sg->name != NULL ) free( sg->name );
+    DLListWhack ( &sg->records, whack_the_placement_record, NULL );
+    free( sg );
+}
+
+
+static void CC whack_the_spot_group( DLNode *n, void *data )
+{    free_spot_group ( ( spot_group * )n );   }
+
+static void clear_spot_group_list( DLList * list )
+{
+    DLListWhack ( list, whack_the_spot_group, NULL );
+}
+
+
+typedef struct find_spot_group_cb_ctx
+{
+    const char * name;
+    size_t len;
+    spot_group *res;
+} find_spot_group_cb_ctx;
+
+
+static bool CC find_spot_group_callback( DLNode *n, void *data )
+{
+    find_spot_group_cb_ctx *ctx = ( find_spot_group_cb_ctx * )data;
+    spot_group * sg = ( spot_group * ) n;
+    bool res = false;
+
+    if ( ctx->name == NULL || sg->name == NULL )
+    {
+        res = true;
+    }
+    else
+    {
+        res = ( string_cmp ( sg->name, sg->len, 
+                             ctx->name, ctx->len, 
+                             ( sg->len < ctx->len ) ? ctx->len : sg->len ) == 0 );
+    }
+
+    if ( res )
+    {
+        ctx->res = sg;
+    }
+    return res;
+}
+
+static spot_group * find_spot_group( DLList * list, const char * name, size_t len )
+{
+    find_spot_group_cb_ctx ctx;
+    ctx.res = NULL;
+    ctx.name = name;
+    ctx.len = len;
+    DLListDoUntil ( list, false, find_spot_group_callback, &ctx );
+    return ctx.res;
+}
+
+static rc_t add_to_spot_groups( DLList * list, const PlacementRecord *rec )
+{
+    rc_t rc = 0;
+    spot_group * sg = find_spot_group( list, rec->spot_group, rec->spot_group_len );
+    if ( sg == NULL )
+    {
+        rc = make_spot_group( &sg, list, rec->spot_group, rec->spot_group_len );
+    }
+    if ( rc == 0 )
+    {
+        DLListPushTail ( &sg->records, ( DLNode * )(rec) );
+    }
+    return rc;
+}
+
+
+static uint32_t remove_invalid_records( const struct ReferenceObj * const refobj,
+                                        DLList * list, INSDC_coord_zero pos )
+{
+    uint32_t res = 0;
+    spot_group * sg = ( spot_group * )DLListHead( list );
+    while ( sg != NULL )
+    {
+        spot_group *nxt = ( spot_group * )DLNodeNext( ( DLNode * )sg );
+        PlacementRecord *rec = ( PlacementRecord * )DLListHead( &sg->records );
+        while ( rec != NULL )
+        {
+            PlacementRecord *nxt_rec = ( PlacementRecord * )DLNodeNext( ( DLNode * )rec );
+            INSDC_coord_zero end_pos = ( rec->pos + rec->len );
+            bool remove = ( end_pos <= pos );
+            if ( !remove )
+            {
+                AlignmentIterator * al_iter = PlacementRecordCast ( rec, placementRecordExtension0 );
+                int32_t state = AlignmentIteratorState ( al_iter, NULL );
+                remove = ( ( state & align_iter_invalid ) == align_iter_invalid );
+            }
+            if ( remove )
+            {
+                DLListUnlink ( &sg->records, ( DLNode * )rec );
+                PlacementRecordWhack ( rec );
+            }
+            else
+            {
+                res++;
+            }
+            rec = nxt_rec;
+        }
+        sg = nxt;
+    }
+    return res;
+}
+
+
+static void inc_alignment_iterators( DLList * list, INSDC_coord_zero pos )
+{
+    spot_group * sg = ( spot_group * )DLListHead( list );
+    while ( sg != NULL )
+    {
+        spot_group *nxt = ( spot_group * )DLNodeNext( ( DLNode * )sg );
+        PlacementRecord *rec = ( PlacementRecord * )DLListHead( &sg->records );
+        while ( rec != NULL )
+        {
+            PlacementRecord *nxt_rec = ( PlacementRecord * )DLNodeNext( ( DLNode * )rec );
+            AlignmentIterator * al_iter = PlacementRecordCast ( rec, placementRecordExtension0 );
+            if ( rec->pos <= pos && al_iter != NULL )
+            {
+                AlignmentIteratorNext ( al_iter );
+            }
+            rec = nxt_rec;
+        }
+        sg = nxt;
+    }
+}
+
+/* ======================================================================================== */
+
+
+struct ReferenceIterator
+{
+    KRefcount refcount;
+    struct AlignMgr const *amgr;
+
+    DLList spot_groups;                     /* has a list of spot-groups... */
+
+    int32_t min_mapq;                       /* has a minimum mapq-value... */
+    PlacementRecordExtendFuncs ext_func;    /* has a struct with record-extension-functions from client*/
+    PlacementRecordExtendFuncs int_func;    /* has a struct with record-extension-functions for itself*/
+
+    uint32_t depth;                         /* how many records are in the list */
+    INSDC_coord_zero current_pos;           /* what is the current ref-position on the current ref. */
+    INSDC_coord_zero last_pos;              /* what is the current ref-position on the current ref. */
+    INSDC_coord_zero nxt_avail_pos;         /* what is the next available ref-position on the current ref. */
+    spot_group *current_spot_group;         /* what is the next spot-group to be handled */
+    PlacementRecord *current_rec;           /* the current-record at the current position */
+    bool need_init;                         /* do we need to init for the first next()-call */
+    PlacementSetIterator * pl_set_iter;     /* holds a list of placement-iterators */
+    struct ReferenceObj const * refobj;     /* cached result of ReferenceIteratorNextReference(...) */
+};
+
+
+LIB_EXPORT void CC RefIterRecordDestroy ( void *obj, void *data )
+{
+    /* nothing to do, because there are no sub-allocations etc. ... */
+}
+
+
+LIB_EXPORT rc_t CC RefIterRecordSize ( struct VCursor const *curs,
+    int64_t row_id, size_t * size, void *data )
+{
+    /* discover the size of the ref-iter-part to be allocated... */
+    return AlignIteratorRecordSize ( curs, row_id, size, data );
+}
+
+
+LIB_EXPORT rc_t CC RefIterRecordPopulate ( void *obj,
+    const PlacementRecord *placement, struct VCursor const *curs,
+    INSDC_coord_zero ref_window_start, INSDC_coord_len ref_window_len, void *data )
+{
+    return AlignIteratorRecordPopulate ( obj, placement, curs, ref_window_start, ref_window_len, data );
+}
+
+
+static void CC RefIterDestroyRecPart( void *obj, void *data )
+{
+    AlignmentIterator *iter = ( AlignmentIterator * )obj;
+    if ( iter != NULL )
+        AlignmentIteratorRelease( iter );
+}
+
+LIB_EXPORT rc_t CC AlignMgrMakeReferenceIterator ( struct AlignMgr const *self,
+    ReferenceIterator **iter, const PlacementRecordExtendFuncs *ext_1, int32_t min_mapq )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        rc = RC( rcAlign, rcIterator, rcConstructing, rcSelf, rcNull );
+    else
+    {
+        if ( iter == NULL  )
+            rc = RC( rcAlign, rcIterator, rcConstructing, rcParam, rcNull );
+        else
+        {
+            ReferenceIterator * refi = calloc( sizeof * refi, 1 );
+            if ( refi == NULL )
+                rc = RC( rcAlign, rcIterator, rcConstructing, rcMemory, rcExhausted );
+            else
+            {
+                KRefcountInit( &refi->refcount, 1, "ReferenceIterator", "Make", "align" );
+                refi->min_mapq = min_mapq;
+                if ( ext_1 != NULL )
+                {
+                    refi->ext_func.data = ext_1->data;
+                    refi->ext_func.destroy = ext_1->destroy;
+                    refi->ext_func.populate = ext_1->populate;
+                    refi->ext_func.alloc_size = ext_1->alloc_size;
+                    refi->ext_func.fixed_size = ext_1->fixed_size;
+                }
+
+                refi->int_func.data = ( void * )self;
+                refi->int_func.destroy = RefIterDestroyRecPart;
+                refi->int_func.populate = RefIterRecordPopulate;
+                refi->int_func.alloc_size = RefIterRecordSize; 
+
+                DLListInit( &(refi->spot_groups) );
+                rc = AlignMgrMakePlacementSetIterator ( self, &refi->pl_set_iter );
+                refi->need_init = true;
+            }
+
+            if ( rc == 0 )
+                rc = AlignMgrAddRef ( self );
+
+            if ( rc == 0 )
+            {
+                refi->amgr = self;
+                *iter = refi;
+            }
+            else
+                free( refi );
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorAddRef ( const ReferenceIterator *self )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        rc = RC( rcAlign, rcIterator, rcAttaching, rcSelf, rcNull );
+    else
+    {
+        if ( KRefcountAdd( &self->refcount, "ReferenceIterator" ) != krefOkay )
+        {
+            rc = RC( rcAlign, rcIterator, rcAttaching, rcError, rcUnexpected );
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorRelease ( const ReferenceIterator *cself )
+{
+    rc_t rc = 0;
+    if ( cself == NULL )
+        rc = RC( rcAlign, rcIterator, rcReleasing, rcSelf, rcNull );
+    else
+    {
+        if ( KRefcountDrop( &cself->refcount, "ReferenceIterator" ) == krefWhack )
+        {
+            ReferenceIterator * self = ( ReferenceIterator * ) cself;
+            /* we 'own' the records! - we have to destroy them, if some are left in here */
+            clear_spot_group_list( &self->spot_groups );
+            rc = PlacementSetIteratorRelease ( self->pl_set_iter );
+            AlignMgrRelease ( self->amgr );
+            free( self );
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorAddPlacementIterator( ReferenceIterator *self,
+    PlacementIterator *pi )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        rc = RC( rcAlign, rcIterator, rcConstructing, rcSelf, rcNull );
+    else
+    {
+        if ( pi == NULL )
+            rc = RC( rcAlign, rcIterator, rcConstructing, rcParam, rcNull );
+        else
+        {
+            rc = PlacementSetIteratorAddPlacementIterator ( self->pl_set_iter, pi );
+        }
+    }
+    return rc;
+}
+
+
+#define ALIGN_COL_COUNT 4
+
+static const char * align_cols[ ALIGN_COL_COUNT ] = 
+{ COL_REF_OFFSET, COL_HAS_REF_OFFSET, COL_HAS_MISMATCH, COL_READ };
+
+
+static rc_t prepare_align_cursor( struct VCursor const *align )
+{
+    rc_t rc = 0;
+    uint32_t i, throw_away_idx;
+
+    for ( i = 0; i < ALIGN_COL_COUNT && rc == 0; ++i ) {
+        rc =VCursorAddColumn ( align, &throw_away_idx, "%s", align_cols[ i ] );
+        if( GetRCState(rc) == rcExists ) {
+            rc = 0;
+        }
+    }
+        
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorAddPlacements( ReferenceIterator *self,
+     struct ReferenceObj const *ref_obj, INSDC_coord_zero ref_pos, INSDC_coord_len ref_len,
+     struct VCursor const *ref, struct VCursor const *align, align_id_src ids,
+     const char * spot_group )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        rc = RC( rcAlign, rcIterator, rcConstructing, rcSelf, rcNull );
+    else
+    {
+        if ( ref_obj == NULL )
+            rc = RC( rcAlign, rcIterator, rcConstructing, rcParam, rcNull );
+        else
+        {
+            if ( align != NULL )
+                rc = prepare_align_cursor( align );
+
+            if ( rc == 0 )
+            {
+                PlacementIterator *pi;
+
+                rc = ReferenceObj_MakePlacementIterator ( ref_obj, &pi, ref_pos, ref_len, self->min_mapq,
+                        ref, align, ids, &self->int_func, &self->ext_func, spot_group );
+                if ( rc == 0 )
+                {
+                    rc = PlacementSetIteratorAddPlacementIterator ( self->pl_set_iter, pi );
+                    if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+                }
+            }
+            /* if rc != 0 then ref_obj had NO AddRef inside  ReferenceObj_MakePlacementIterator() ! */
+            if ( rc == 0 )
+                ReferenceObj_Release( ref_obj );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t fill_recordlist( ReferenceIterator *self, INSDC_coord_zero pos )
+{
+    rc_t rc;
+    do
+    {
+        const PlacementRecord *rec;
+        /* from the placement-set-iterator into our list... */
+        rc = PlacementSetIteratorNextRecordAt ( self->pl_set_iter, pos, &rec );
+        if ( rc == 0 )
+        {
+            if ( rec->pos == pos )
+            {
+                self->depth++;
+                rc = add_to_spot_groups( &self->spot_groups, rec );
+            }
+            else
+                PlacementRecordWhack ( rec );
+        }
+    } while( rc == 0 );
+
+    if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorNextReference ( ReferenceIterator *self,
+    INSDC_coord_zero *first_pos, INSDC_coord_len *len, struct ReferenceObj const ** refobj )
+{
+    rc_t rc = 0;
+
+    if ( refobj != NULL )
+        *refobj = NULL;
+
+    if ( self == NULL )
+        rc = RC( rcAlign, rcIterator, rcAccessing, rcSelf, rcNull );
+    else
+    {
+        struct ReferenceObj const * robj;
+        rc = PlacementSetIteratorNextReference ( self->pl_set_iter, first_pos, len, &robj );
+        clear_spot_group_list( &self->spot_groups );
+        if ( rc == 0 )
+        {
+            /* cache the returned refobj in order to get to reference-bases later... */
+            self->refobj = robj;
+            self->need_init = true;
+        }
+        else
+        {
+            self->refobj = NULL;
+        }
+
+        if ( refobj != NULL )
+        {
+            *refobj = self->refobj;
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorNextWindow ( ReferenceIterator *self,
+    INSDC_coord_zero *first_pos, INSDC_coord_len *len )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        rc = RC( rcAlign, rcIterator, rcAccessing, rcSelf, rcNull );
+    else
+    {
+        rc = PlacementSetIteratorNextWindow ( self->pl_set_iter, first_pos, len );
+        clear_spot_group_list( &self->spot_groups );
+        if ( rc == 0 )
+        {
+            self->need_init = true;
+            self->current_pos = *first_pos;
+            self->current_spot_group = NULL;
+            self->last_pos = self->current_pos + *len - 1;
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorNextSpotGroup ( ReferenceIterator *self,
+    const char ** name, size_t * len )
+{
+    rc_t rc = 0;
+
+    if ( self->current_spot_group == NULL )
+    {
+        self->current_spot_group = ( spot_group * )DLListHead( &self->spot_groups );
+        if ( self->current_spot_group == NULL )
+        {
+            rc = SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+        }
+    }
+    else
+    {
+        spot_group *nxt  = ( spot_group * )DLNodeNext( ( DLNode * ) self->current_spot_group );
+        if ( nxt == NULL )
+        {
+            rc = SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+        }
+        else
+        {
+            self->current_spot_group = nxt;
+        }
+    }
+    self->current_rec = NULL;
+
+    if ( rc == 0 && self->current_spot_group != NULL )
+    {
+        if ( name != NULL )
+        {
+            *name = self->current_spot_group->name;
+        }
+        if ( len != NULL )
+        {
+            *len = self->current_spot_group->len;
+        }
+    }
+    return rc;
+}
+
+
+/* iterates the PlacementSetIterator forward to reach self->current_pos on the reference */
+static rc_t first_ref_iter_nxt_pos( ReferenceIterator *self, bool skip_empty )
+{
+    rc_t rc;
+    bool loop;
+    self->need_init = false;
+    do
+    {
+        rc = PlacementSetIteratorNextAvailPos ( self->pl_set_iter, &self->nxt_avail_pos, NULL );
+        loop = ( rc == 0 );
+        if ( loop )
+        {
+            loop = ( self->nxt_avail_pos <= self->current_pos );
+            if ( loop )
+            {
+                rc = fill_recordlist( self, self->nxt_avail_pos );
+                self->depth = remove_invalid_records( self->refobj, &self->spot_groups, self->nxt_avail_pos - 1 );
+            }
+        }
+    } while ( loop );
+
+    if ( skip_empty && self->nxt_avail_pos > self->current_pos && self->depth == 0 )
+    {
+        self->current_pos = self->nxt_avail_pos;
+    }
+    self->depth = remove_invalid_records( self->refobj, &self->spot_groups, self->current_pos );
+
+    if ( GetRCState( rc ) == rcDone ) rc = 0;
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorNextPos ( ReferenceIterator *self, bool skip_empty )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        rc = RC( rcAlign, rcIterator, rcAccessing, rcSelf, rcNull );
+    else
+    {
+        self->current_rec = NULL;
+        if ( self->need_init )
+        {
+            rc = first_ref_iter_nxt_pos( self, skip_empty );
+        }
+        else
+        {
+            /* increment the current position */
+            self->current_pos++;
+
+            if ( self->current_pos <= self->last_pos )
+            {
+                /* jump over gaps, if requested ... */
+                if ( self->depth == 0 && skip_empty )
+                {
+                    self->current_pos = self->nxt_avail_pos;
+                }
+
+                /* increment the internal alignment-iterator of every placement-record */
+                inc_alignment_iterators( &self->spot_groups, self->current_pos );
+
+                /* loop through the list to look if we have to remove records,
+                   that do end before this new position */
+                self->depth = remove_invalid_records( self->refobj, &self->spot_groups, self->current_pos );
+
+                rc = fill_recordlist( self, self->current_pos );
+                if ( rc == 0 )
+                {
+                    self->current_spot_group = NULL;
+                    /* set our sights to the next position... */
+                    rc = PlacementSetIteratorNextAvailPos ( self->pl_set_iter, &self->nxt_avail_pos, NULL );
+                    if ( GetRCState( rc ) == rcDone )
+                    {
+                        if ( self->depth > 0 )
+                        {
+                            rc = 0;
+                        }
+                        else if ( !skip_empty )
+                        {
+                            if ( self->current_pos <= self->last_pos ) rc = 0;
+                        }
+                    }
+                }
+            }
+            else
+            {
+                rc = SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+                clear_spot_group_list( &self->spot_groups );
+            }
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorPosition ( const ReferenceIterator *self,
+    INSDC_coord_zero *pos, uint32_t * depth, INSDC_4na_bin * base )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        rc = RC( rcAlign, rcIterator, rcAccessing, rcSelf, rcNull );
+    else
+    {
+        /* return position, many records our record-list, and the base at this position */
+        if ( pos != NULL )
+        {
+            *pos = self->current_pos;
+        }
+
+        if ( depth != NULL )
+        {
+            *depth = self->depth;
+        }
+
+        if ( base != NULL )
+        {
+            uint32_t written;
+            *base = 0;
+            /* problem! how to get the base if depth == 0 */
+            if ( self->current_rec != NULL )
+            {
+                rc = ReferenceObj_Read( self->current_rec->ref, self->current_pos, 1, base, &written );
+            }
+            else if ( self->refobj != NULL )
+            {
+                rc = ReferenceObj_Read( self->refobj, self->current_pos, 1, base, &written );
+            }
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorNextPlacement ( ReferenceIterator *self,
+    const PlacementRecord **rec )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+    {
+        rc = RC( rcAlign, rcIterator, rcAccessing, rcSelf, rcNull );
+    }
+    else if ( rec == NULL )
+    {
+        rc = RC( rcAlign, rcIterator, rcAccessing, rcParam, rcNull );
+    }
+    else
+    {
+        if ( self->current_spot_group == NULL )
+        {
+            rc = SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+        }
+        else
+        {
+            if ( self->current_rec == NULL )
+            {
+                self->current_rec = ( PlacementRecord * )DLListHead( &self->current_spot_group->records );
+            }
+            else
+            {
+                self->current_rec = ( PlacementRecord * )DLNodeNext( ( DLNode * )self->current_rec );
+            }
+
+            if ( self->current_rec == NULL )
+            {
+                rc = SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+            }
+            else
+            {
+                *rec = self->current_rec;
+            }
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceIteratorGetPlacement ( ReferenceIterator *self,
+    const PlacementRecord **rec )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+    {
+        rc = RC( rcAlign, rcIterator, rcAccessing, rcSelf, rcNull );
+    }
+    else if ( rec == NULL )
+    {
+        rc = RC( rcAlign, rcIterator, rcAccessing, rcParam, rcNull );
+    }
+    else
+    {
+        if ( self->current_spot_group == NULL )
+        {
+            rc = SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+        }
+        else
+        {
+            if ( self->current_rec != NULL )
+            {
+                /* remove the 'previous' current-rec! */
+                DLListPopHead ( &self->current_spot_group->records );
+                PlacementRecordWhack ( self->current_rec );
+                self->depth--;
+                self->current_rec = NULL;
+            }
+
+            self->current_rec = ( PlacementRecord * )DLListHead( &self->current_spot_group->records );
+            if ( self->current_rec == NULL )
+            {
+                rc = SILENT_RC( rcAlign, rcIterator, rcAccessing, rcOffset, rcDone );
+            }
+            else
+            {
+                *rec = self->current_rec;
+            }
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT int32_t CC ReferenceIteratorState ( const ReferenceIterator *self,
+    INSDC_coord_zero *seq_pos )
+{
+    int32_t res = align_iter_invalid;
+    if ( seq_pos != NULL )
+    {
+        *seq_pos = 0;
+    }
+    if ( self != NULL )
+    {
+        /* PlacementRecordCast returns NULL if self->current_rec is NULL */
+        AlignmentIterator * al_iter = PlacementRecordCast ( self->current_rec, placementRecordExtension0 );
+        if ( al_iter != NULL )
+            res = AlignmentIteratorState ( al_iter, seq_pos );
+    }
+    return res;
+}
+
+
+LIB_EXPORT uint32_t CC ReferenceIteratorBasesInserted ( const ReferenceIterator *self,
+    const INSDC_4na_bin **bases )
+{
+    uint32_t res = align_iter_invalid;
+    if ( bases != NULL )
+    {
+        *bases = NULL;
+    }
+    if ( self != NULL )
+    {
+        /* PlacementRecordCast returns NULL if self->current_rec is NULL */
+        AlignmentIterator * al_iter = PlacementRecordCast ( self->current_rec, placementRecordExtension0 );
+        if ( al_iter != NULL )
+            res = AlignmentIteratorBasesInserted( al_iter, bases );
+    }
+    return res;
+}
+
+
+LIB_EXPORT uint32_t CC ReferenceIteratorBasesDeleted ( const ReferenceIterator *self,
+    INSDC_coord_zero *pos, const INSDC_4na_bin **bases )
+{
+    uint32_t res = align_iter_invalid;
+    if ( bases != NULL )
+    {
+        *bases = NULL;
+    }
+    if ( self != NULL )
+    {
+        /* PlacementRecordCast returns NULL if self->current_rec is NULL */
+        AlignmentIterator * al_iter = PlacementRecordCast ( self->current_rec, placementRecordExtension0 );
+        if ( al_iter != NULL )
+        {
+            INSDC_coord_zero temp_pos;
+            res = AlignmentIteratorBasesDeleted( al_iter, &temp_pos );
+            if ( ( res & align_iter_invalid ) != align_iter_invalid )
+            {
+                if ( pos != NULL ) { *pos = temp_pos; }
+                /* where to get the reference-bases from ? PlacementRecord.ref ! */
+                if ( res > 0 && bases != NULL )
+                {
+                    uint8_t * buffer = malloc( res );
+                    if ( buffer != NULL )
+                    {
+                        INSDC_coord_len written;
+                        rc_t rc = ReferenceObj_Read( self->current_rec->ref, temp_pos, res, buffer, &written );
+                        if ( rc == 0 )
+                        {
+                            *bases = buffer;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return res;
+}
diff --git a/libs/align/reference-cmn.c b/libs/align/reference-cmn.c
new file mode 100644
index 0000000..59e7c3d
--- /dev/null
+++ b/libs/align/reference-cmn.c
@@ -0,0 +1,43 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+#include <align/extern.h>
+
+#include <klib/rc.h>
+#include <insdc/insdc.h>
+
+#include "reference-cmn.h"
+#include <sysalloc.h>
+
+rc_t CC ReferenceSeq_ReOffset(bool circular, INSDC_coord_len seq_len, INSDC_coord_zero* offset)
+{
+    if( !circular && (*offset < 0 || *offset >= seq_len) ) {
+        return RC(rcAlign, rcType, rcReading, rcOffset, rcOutofrange);
+    } else if( *offset < 0 ) {
+        *offset = seq_len - ((-(*offset)) % seq_len);
+    } else if( circular && *offset > seq_len ) {
+        *offset %= seq_len;
+    }
+    return 0;
+}
diff --git a/libs/align/reference-cmn.h b/libs/align/reference-cmn.h
new file mode 100644
index 0000000..76fac49
--- /dev/null
+++ b/libs/align/reference-cmn.h
@@ -0,0 +1,38 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was readten as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#ifndef _h_align_reference_cmn_
+#define _h_align_reference_cmn_
+
+#include <klib/defs.h>
+
+/* Validates and adjusts offset for a RefSeq based on its attributes
+ * circular [IN]
+ * seq_len [IN]
+ * offset [IN,OUT] always be >= 0 upon return
+ */
+rc_t CC ReferenceSeq_ReOffset(bool circular, INSDC_coord_len seq_len, INSDC_coord_zero* offset);
+
+#endif /* _h_align_reference_cmn_ */
diff --git a/libs/align/reference.c b/libs/align/reference.c
new file mode 100644
index 0000000..553652b
--- /dev/null
+++ b/libs/align/reference.c
@@ -0,0 +1,1933 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was readten as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <align/extern.h>
+
+#include <klib/rc.h>
+#include <klib/container.h>
+#include <klib/refcount.h>
+#include <klib/vector.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <insdc/insdc.h>
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <vdb/cursor.h>
+#include <vdb/table.h>
+#include <vdb/vdb-priv.h>
+#include <align/iterator.h>
+#include <align/reference.h>
+#include <align/refseq-mgr.h>
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include "reader-cmn.h"
+#include "reference-cmn.h"
+#include "debug.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+#include <assert.h>
+
+/* This is a temporary define, used to test code to deal with
+   circular references and new means of tracking window end */
+
+enum EReferenceList_ColNames
+{
+    ereflst_cn_READ_dna,
+    ereflst_cn_READ_4na,
+    ereflst_cn_SEQ_LEN,
+    ereflst_cn_PRIMARY_ALIGNMENT_IDS,
+    ereflst_cn_SECONDARY_ALIGNMENT_IDS,
+    ereflst_cn_EVIDENCE_INTERVAL_IDS,
+    ereflst_cn_OVERLAP_REF_POS,
+    ereflst_cn_OVERLAP_REF_LEN
+};
+
+const TableReaderColumn ReferenceList_cols[] =
+{
+    { 0, "(INSDC:dna:text)READ",    { NULL }, 0, 0 },
+    { 0, "(INSDC:4na:bin)READ",     { NULL }, 0, ercol_Skip },
+    { 0, "SEQ_LEN",                 { NULL }, 0, 0 },
+    { 0, "PRIMARY_ALIGNMENT_IDS",   { NULL }, 0, ercol_Skip },
+    { 0, "SECONDARY_ALIGNMENT_IDS", { NULL }, 0, ercol_Skip },
+    { 0, "EVIDENCE_INTERVAL_IDS",   { NULL }, 0, ercol_Skip | ercol_Optional },
+    { 0, "OVERLAP_REF_POS",         { NULL }, 0, ercol_Optional },
+    { 0, "OVERLAP_REF_LEN",         { NULL }, 0, ercol_Optional },
+    { 0, NULL,                      { NULL }, 0, 0 }
+};
+
+enum EPlacementIterator_ColNames
+{
+    eplacementiter_cn_REF_POS,
+    eplacementiter_cn_REF_LEN,
+    eplacementiter_cn_MAPQ,
+    eplacementiter_cn_READ_GROUP
+};
+
+const TableReaderColumn PlacementIterator_cols[] =
+{
+    { 0, "REF_POS",     { NULL }, 0, 0 },
+    { 0, "REF_LEN",     { NULL }, 0, 0 },
+    { 0, "MAPQ",        { NULL }, 0, 0 },
+    { 0, "SPOT_GROUP",  { NULL }, 0, 0 },
+    { 0, NULL,          { NULL }, 0, 0 }
+};
+
+struct ReferenceList
+{
+    KRefcount refcount;
+    const RefSeqMgr* refseqmgr;
+    const VCursor* cursor;
+    BSTree name_tree;
+    BSTree seqid_tree;
+    uint32_t options;
+    size_t cache;
+    uint32_t max_seq_len;
+    uint32_t nodes_qty;
+    uint32_t nodes_max_qty;
+    const TableReader* reader;
+    TableReaderColumn reader_cols[ sizeof( ReferenceList_cols ) / sizeof( ReferenceList_cols[ 0 ] ) ];
+    const TableReader* iter;
+    TableReaderColumn iter_cols[ sizeof( PlacementIterator_cols ) / sizeof( PlacementIterator_cols[ 0 ] ) ];
+    /* last are children using realloc!! */
+    ReferenceObj* nodes[ 2 ];
+};
+
+struct ReferenceObj
+{
+    /* we use this in 2 lists so we need to adjust results of Find, etc calls for name tree!! */
+    BSTNode by_seqid; /* primary key */
+    BSTNode by_name; /* struct addr will be by_name[-1]; */
+    ReferenceList* mgr;
+    uint32_t id;
+    uint32_t bin;
+    char* name;
+    char* seqid;
+    bool circular;
+    bool read_present;
+    int64_t start_rowid;
+    int64_t end_rowid;
+    INSDC_coord_len seq_len;
+};
+
+
+static int CC ReferenceObj_CmpSeqId( const void *item, const BSTNode *n )
+{
+    return strcasecmp( ( const char* )item, ( ( const ReferenceObj* )n )->seqid );
+}
+
+
+static int CC ReferenceObj_SortSeqId( const BSTNode *item, const BSTNode *n )
+{
+    return ReferenceObj_CmpSeqId( ( ( const ReferenceObj* )item )->seqid, n );
+}
+
+
+static int CC ReferenceObj_CmpName( const void *item, const BSTNode *n )
+{
+    return strcasecmp( ( const char* )item, ( ( const ReferenceObj* )&n[ -1 ] )->name );
+}
+
+
+static int CC ReferenceObj_SortName( const BSTNode *item, const BSTNode *n )
+{
+    return ReferenceObj_CmpName( ( ( const ReferenceObj* )&item[ -1 ] )->name, n );
+}
+
+static rc_t ReferenceObj_Alloc( ReferenceObj** self, const char* seqid, size_t seqid_sz,
+                                const char* name, size_t name_sz)
+{
+    rc_t rc = 0;
+    if ( self == NULL || seqid == NULL || seqid_sz == 0 || name == NULL || name_sz == 0 )
+    {
+        rc = RC( rcAlign, rcIndex, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        ReferenceObj* obj = calloc( 1,  sizeof( *obj ) + seqid_sz + 1 + name_sz + 1 );
+        if ( obj == NULL )
+        {
+            rc = RC( rcAlign, rcIndex, rcConstructing, rcMemory, rcExhausted );
+        }
+        else
+        {
+            obj->seqid = ( char* )&obj[ 1 ];
+            obj->name = obj->seqid;
+            obj->name += seqid_sz + 1;
+            memcpy( obj->seqid, seqid, seqid_sz );
+            obj->seqid[ seqid_sz ] = '\0';
+            memcpy( obj->name, name, name_sz );
+            obj->name[ name_sz ] = '\0';
+            *self = obj;
+        }
+    }
+    return rc;
+}
+
+
+/* helper function for ReferenceList_MakeCursor() */
+static rc_t ReferenceList_handle_filter( const KIndex* iname, const char * filt_name, uint32_t bin_size,
+                                         int64_t *start, int64_t tbl_start, uint64_t *count, int *bin_num,
+                                         TableReaderColumn *h, const TableReader* tmp )
+{
+    rc_t rc = 0;
+    if ( strncmp( filt_name, "START_ROW:", 10 ) )
+    {
+        if ( bin_size == 0 || strncmp( filt_name, "BIN_NUM:", 8 ) )
+        {
+            rc = KIndexFindText( iname, filt_name, start, count, NULL, NULL );
+            if( rc == 0 && bin_size > 0 )
+            {
+                /** change start to the beginning of the bin **/
+                *bin_num = ( *start - tbl_start ) / bin_size;
+            }
+        }
+        else
+        {
+            *bin_num = atoi( filt_name + 8 );
+        }
+        if ( bin_size > 0 )
+        {
+            *start = tbl_start + ( bin_size * (*bin_num) );
+            rc = TableReader_ReadRow( tmp, *start );
+            if ( rc == 0 )
+            {
+                int64_t r_start;
+                char name[ 4096 ];
+                if ( h[ 0 ].len < sizeof( name ) )
+                {
+                    memcpy( name, h[ 0 ].base.str, h[ 0 ].len );
+                    name[ h[ 0 ].len ] = '\0';
+                    rc = KIndexFindText( iname, name, &r_start, count, NULL, NULL );
+                    if ( rc == 0 && *start > r_start )
+                    { /*** move start to the beginning of the fully contained sequence **/
+                        *start = r_start + *count;
+                    }
+                }
+                else
+                {
+                    rc = RC( rcAlign, rcType, rcConstructing, rcName, rcTooLong );
+                }
+            }
+        }
+    }
+    else
+    {
+        int64_t req_start = atoi( filt_name + 10 );
+        if ( req_start >= *start && req_start < *start + *count )
+        {
+            int64_t delta = req_start - *start;
+            *start = req_start;
+            *count -= delta;
+        }
+        else
+        {
+            rc = RC( rcAlign, rcType, rcConstructing, rcId, rcOutofrange );
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceList_MakeCursor( const ReferenceList** cself, const VCursor* cursor, uint32_t options,
+                                             const char* filt_name, const uint32_t numbins )
+{
+    rc_t rc = 0;
+    ReferenceList* self = NULL;
+
+    if ( cself == NULL || cursor == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else if ( ( self = calloc( 1, sizeof( *self ) ) ) == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcConstructing, rcMemory, rcExhausted );
+    }
+    else
+    {
+        const TableReader* tmp = NULL;
+        uint32_t bin_size;
+        int bin_num = -1;
+        TableReaderColumn h[] =
+        {
+            { 0, "NAME",        {NULL}, 0, 0 }, /*0*/
+            { 0, "SEQ_ID",      {NULL}, 0, 0 }, /*1*/
+            { 0, "SEQ_LEN",     {NULL}, 0, 0 }, /*2*/
+            { 0, "CIRCULAR",    {NULL}, 0, 0 }, /*3*/
+            { 0, "MAX_SEQ_LEN", {NULL}, 0, 0 }, /*4*/
+            { 0, "SEQ_START",   {NULL}, 0, 0 }, /*5*/
+            { 0, "CMP_READ",    {NULL}, 0, 0 }, /*6*/
+            { 0, NULL,          {NULL}, 0, 0 }
+        };
+        KRefcountInit( &self->refcount, 1, "ReferenceList", "Make", "align" );
+        BSTreeInit( &self->name_tree );
+        BSTreeInit( &self->seqid_tree );
+        self->options = options;
+        self->nodes_max_qty = sizeof( self->nodes ) / sizeof( self->nodes[ 0 ] );
+
+        rc = VCursorAddRef( self->cursor = cursor );
+        if ( rc == 0 )
+        {
+            rc = TableReader_MakeCursor( &tmp, cursor, h );
+            if ( rc == 0 )
+            {
+                int64_t start, tbl_start, tbl_stop;
+                uint64_t count;
+                const KIndex* iname = NULL;
+                bool only_one = false;
+
+                /* index is optional */
+                rc_t rctmp = TableReader_OpenIndex( tmp, "i_name", &iname );
+                ALIGN_DBGERRP( "index '%s' was not found", rctmp, "i_name" );
+
+                rc = TableReader_IdRange( tmp, &start, &count );
+                assert( rc == 0 );
+                tbl_start = start;
+                tbl_stop  = start + count -1;
+                if ( numbins > 0 )
+                {
+                    bin_size = ( count + numbins -1 ) / numbins;
+                }
+                else
+                {
+                    bin_size = 0;
+                }
+
+                if ( iname && filt_name )
+                {
+                    if ( bin_size == 0 )
+                    {
+                        only_one = true;
+                    }
+                    rc = ReferenceList_handle_filter( iname, filt_name, bin_size, &start, tbl_start,
+                                                      &count, &bin_num, h, tmp );
+                }
+
+                if ( rc == 0 )
+                {
+                    ReferenceObj* node = NULL;
+                    uint32_t last_name_len = 0;
+                    bool read_determination_done = false;
+
+                    while ( rc == 0  && start <= tbl_stop )
+                    {
+                        if ( bin_num < 0 && count == 0 )
+                        {
+                            /*** normal loop without binning ***/
+                            break;
+                        }
+                        rc = TableReader_ReadRow( tmp, start );
+                        if ( rc == 0 )
+                        {
+                            if ( node == NULL || last_name_len != h[0].len ||
+                                 strncmp( h[ 0 ].base.str, node->name, h[ 0 ].len) != 0 )
+                            {
+                                uint32_t cur_bin = ( bin_size > 0 ) ? ( start-tbl_start ) / bin_size : 0;
+                                if ( only_one && self->nodes_qty == 1 )
+                                {
+                                    break;
+                                }
+                                if ( bin_num >= 0 && cur_bin != bin_num )
+                                {
+                                    break;
+                                }
+                                if ( node == NULL && h[ 4 ].len > 0 )
+                                {
+                                    self->max_seq_len = h[ 4 ].base.u32[ 0 ];
+                                }
+                                if ( self->nodes_qty == self->nodes_max_qty )
+                                {
+                                    ReferenceList* tmp = realloc( self, sizeof( *self ) + sizeof( node ) * self->nodes_max_qty );
+                                    if ( tmp == NULL )
+                                    {
+                                        rc = RC(rcAlign, rcType, rcConstructing, rcMemory, rcExhausted);
+                                    }
+                                    else
+                                    {
+                                        self = tmp;
+                                        self->nodes_max_qty += sizeof( self->nodes ) / sizeof( self->nodes[ 0 ] );
+                                    }
+                                }
+                                if ( rc == 0 )
+                                {
+                                    rc = ReferenceObj_Alloc( &node, h[ 1 ].base.str, h[ 1 ].len, h[ 0 ].base.str, h[ 0 ].len );
+                                    if ( rc == 0 )
+                                    {
+                                        node->id = self->nodes_qty;
+                                        self->nodes[ self->nodes_qty++ ] = node;
+                                        last_name_len = h[ 0 ].len;
+                                        node->circular = h[ 3 ].len ? h[ 3 ].base.buul[ 0 ] : false;
+                                        node->start_rowid = start;
+                                        node->seq_len = 0;
+                                        node->bin = cur_bin;
+                                        read_determination_done = false;
+                                        rc = BSTreeInsertUnique( &self->seqid_tree, &node->by_seqid, NULL, ReferenceObj_SortSeqId );
+                                        if ( rc == 0 )
+                                        {
+                                            rc = BSTreeInsertUnique( &self->name_tree, &node->by_name, NULL, ReferenceObj_SortName );
+                                        }
+                                    }
+                                }
+                            }
+                            if ( rc == 0 )
+                            {
+                                INSDC_coord_len cur_seq_len = h[ 2 ].base.coord_len[ 0 ];
+                                if ( cur_seq_len == 0 )
+                                {
+                                    /* assign it to max-seq-len */
+                                    cur_seq_len = h[ 4 ].base.coord_len[ 0 ];
+                                }
+
+                                if ( h[ 6 ].len > 0 )
+                                {/** CMP_READ > 0 -- truly local ***/
+                                    node->read_present = true; 
+                                    read_determination_done = true;
+                                }
+                                else if ( h[ 5 ].base.coord1[ 0 ] != 0 )
+                                { /*** truly remote ***/
+                                    node->read_present = false;
+                                    read_determination_done = true;
+                                } /*** else still not sure **/
+
+                                if ( read_determination_done && iname != NULL )
+                                {
+                                    /* scroll to last row for this reference projecting the seq_len */
+                                    int64_t r_start;
+                                    uint64_t r_count;
+                                    if ( KIndexFindText( iname, node->name, &r_start, &r_count, NULL, NULL ) == 0 )
+                                    {
+                                        assert( node->start_rowid == r_start );
+                                        /* not last ref row */
+                                        if ( start != r_start + r_count - 1 )
+                                        {
+                                            /* we need to pickup last row SEQ_LEN for this reference
+                                            so we step back 2 rows in table from this ref end row
+                                            and also skip rows already scanned for read presence */
+                                            r_count -= ( start - r_start ) + 2;
+                                            node->seq_len += cur_seq_len * r_count;
+                                            start += r_count;
+                                            count -= r_count;
+                                        }
+                                    }
+                                }
+                                node->seq_len += cur_seq_len;
+                                node->end_rowid = start;
+                            }
+                        }
+                        else if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcRow )
+                        {
+                            rc = 0;
+                        }
+                        start++;
+                        count--;
+                    }
+                    for ( start = 0; rc == 0 && start < self->nodes_qty; start++ )
+                    {
+                        self->nodes[ start ]->mgr = self;
+                    }
+                    if ( rc == 0 && self->max_seq_len == 0 )
+                    {
+                        rc = RC(rcAlign, rcType, rcConstructing, rcData, rcCorrupt);
+                    }
+                }
+                KIndexRelease( iname );
+            }
+        }
+        TableReader_Whack( tmp );
+    }
+
+    if ( rc == 0 )
+    {
+        *cself = self;
+        /* ALIGN_DBG("created 0x%p with cursor 0x%p", self, cursor); */
+    }
+    else
+    {
+        *cself = NULL;
+        ReferenceList_Release( self );
+        /* ALIGN_DBGERRP( "failed for cursor 0x%p", rc, cursor ); */
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceList_MakeTable( const ReferenceList** cself, const VTable* table, uint32_t options,
+                                            size_t cache, const char* filt_name, const uint32_t numbins )
+{
+    rc_t rc = 0;
+    const VCursor* curs;
+
+    if ( table == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = VTableCreateCachedCursorRead( table, &curs, cache );
+        if ( rc == 0 )
+        {
+            rc = VCursorPermitPostOpenAdd( curs );
+            if ( rc == 0 )
+            {
+                rc = ReferenceList_MakeCursor( cself, curs, options, filt_name, numbins );
+                if ( rc == 0 )
+                {
+                    ( (ReferenceList*)(*cself))->cache = cache;
+                }
+                VCursorRelease(curs);
+            }
+        }
+    }
+    ALIGN_DBGERRP( "failed for table 0x%p", rc, table );
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceList_MakeDatabase( const ReferenceList** cself, const VDatabase* db, uint32_t options,
+                                               size_t cache, const char* name, const uint32_t numbins )
+{
+    rc_t rc = 0;
+    const VTable* tbl = NULL;
+    const char* nm = "REFERENCE";
+    /*const char* nm = (options & ereferencelist_useEvidence) ? "EVIDENCE_INTERVAL" : "REFERENCE";*/
+
+    if ( db == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = VDatabaseOpenTableRead( db, &tbl, nm );
+        if ( rc == 0 )
+        {
+            rc = ReferenceList_MakeTable( cself, tbl, options, cache, name, numbins );
+            VTableRelease( tbl );
+        }
+    }
+    ALIGN_DBGERRP( "failed for database 0x%p", rc, db );
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceList_MakePath( const ReferenceList** cself, const VDBManager* vmgr, const char* dbpath,
+                                           uint32_t options, size_t cache, const char* name, const uint32_t numbins )
+{
+    rc_t rc = 0;
+    const VDatabase* db = NULL;
+
+    if ( vmgr == NULL || dbpath == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = VDBManagerOpenDBRead( vmgr, &db, NULL, "%s", dbpath );
+        if ( rc == 0 )
+        {
+            rc = ReferenceList_MakeDatabase( cself, db, options, cache, name, numbins );
+            VDatabaseRelease( db );
+        }
+    }
+    ALIGN_DBGERRP( "failed for database %s", rc, dbpath );
+    return rc;
+}
+
+
+static rc_t ReferenceList_OpenCursor( ReferenceList* self )
+{
+    rc_t rc = 0;
+
+    assert( self != NULL );
+
+    memcpy( self->reader_cols, ReferenceList_cols, sizeof( ReferenceList_cols ) );
+
+    if ( self->options & ereferencelist_4na )
+    {
+        self->reader_cols[ ereflst_cn_READ_dna ].flags |= ercol_Skip;
+        self->reader_cols[ ereflst_cn_READ_4na ].flags &= ~ercol_Skip;
+    }
+
+    if ( self->options & ereferencelist_usePrimaryIds )
+    {
+        self->reader_cols[ ereflst_cn_PRIMARY_ALIGNMENT_IDS ].flags &= ~ercol_Skip;
+    }
+
+    if ( self->options & ereferencelist_useSecondaryIds )
+    {
+        self->reader_cols[ ereflst_cn_SECONDARY_ALIGNMENT_IDS ].flags &= ~ercol_Skip;
+    }
+
+    if ( self->options & ereferencelist_useEvidenceIds )
+    {
+        self->reader_cols[ ereflst_cn_EVIDENCE_INTERVAL_IDS ].flags &= ~ercol_Skip;
+    }
+
+    if ( !( self->options &
+          ( ereferencelist_usePrimaryIds | ereferencelist_useSecondaryIds | ereferencelist_useEvidenceIds ) ) )
+    {
+        self->reader_cols[ ereflst_cn_OVERLAP_REF_POS ].flags |= ercol_Skip;
+        self->reader_cols[ ereflst_cn_OVERLAP_REF_LEN ].flags |= ercol_Skip;
+    }
+    rc = TableReader_MakeCursor( &self->reader, self->cursor, self->reader_cols );
+    ALIGN_DBGERR( rc );
+    return rc;
+}
+
+
+static rc_t ReferenceList_OpenCursor2( ReferenceList* self, align_id_src ids )
+{
+    rc_t rc = 0;
+
+    assert( self != NULL );
+    if ( ids != primary_align_ids && ids != secondary_align_ids && ids != evidence_align_ids )
+    {
+        rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcOutofrange );
+    }
+    else if ( ids == primary_align_ids && !( self->options & ereferencelist_usePrimaryIds ) )
+    {
+        rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+    }
+    else if ( ids == secondary_align_ids && !( self->options & ereferencelist_useSecondaryIds ) )
+    {
+        rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+    }
+    else if ( ids == evidence_align_ids && !( self->options & ereferencelist_useEvidenceIds ) )
+    {
+        rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+    }
+    else
+    {
+        const VTable* vtbl = NULL;
+        rc = VCursorOpenParentRead( self->cursor, &vtbl );
+        if ( rc == 0 )
+        {
+            if ( rc == 0 )
+            {
+                const VDatabase* db = NULL;
+                rc = VTableOpenParentRead( vtbl, &db );
+                if ( rc == 0 )
+                {
+                    rc = VDatabaseOpenTableRead( db, &vtbl, ids == primary_align_ids ? "PRIMARY_ALIGNMENT" :
+                           ( ids == secondary_align_ids ? "SECONDARY_ALIGNMENT" : "EVIDENCE_INTERVAL" ) );
+                    if ( rc == 0 )
+                    {
+                        memcpy( self->iter_cols, PlacementIterator_cols, sizeof( PlacementIterator_cols ) );
+                        rc = TableReader_Make( &self->iter, vtbl, self->iter_cols, self->cache );
+                    }
+                    VDatabaseRelease( db );
+                }
+            }
+            VTableRelease( vtbl );
+        }
+    }
+    ALIGN_DBGERR( rc );
+    return rc;
+}
+
+
+static rc_t ReferenceList_RefSeqMgr( const ReferenceList* cself, const RefSeqMgr** rmgr )
+{
+    rc_t rc = 0;
+
+    assert( rmgr != NULL );
+
+    if ( cself->refseqmgr == NULL )
+    {
+        const VTable* vtbl = NULL;
+        rc = VCursorOpenParentRead( cself->cursor, &vtbl );
+        if ( rc == 0 )
+        {
+            const VDBManager* vmgr;
+            rc = VTableOpenManagerRead( vtbl, &vmgr );
+            if ( rc == 0 )
+            {
+                rc = RefSeqMgr_Make( &( (ReferenceList*)cself )->refseqmgr, vmgr,
+                                     ( cself->options & ereferencelist_4na ) ? errefseq_4NA : 0, cself->cache, 2 );
+                VDBManagerRelease( vmgr );
+            }
+            VTableRelease( vtbl );
+        }
+    }
+    *rmgr = cself->refseqmgr;
+    ALIGN_DBGERR(rc);
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceList_AddRef( const ReferenceList *cself )
+{
+    rc_t rc = 0;
+    if ( cself != NULL )
+    {
+        if ( KRefcountAdd( &cself->refcount, "ReferenceList" ) != krefOkay )
+        {
+            rc = RC( rcAlign, rcType, rcAttaching, rcError, rcUnexpected );
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT void CC ReferenceList_Release( const ReferenceList* cself )
+{
+    if ( cself != NULL )
+    {
+        if ( KRefcountDrop(&cself->refcount, "ReferenceList") == krefWhack )
+        {
+            ReferenceList* self = ( ReferenceList* )cself;
+            TableReader_Whack( self->reader );
+            TableReader_Whack( cself->iter );
+            RefSeqMgr_Release( self->refseqmgr );
+            while( self->nodes_qty-- > 0 )
+            {
+                free( self->nodes[ self->nodes_qty ] );
+            }
+            VCursorRelease( cself->cursor );
+            KRefcountWhack( &self->refcount, "ReferenceList" );
+            free( self );
+        }
+    }
+}
+
+
+LIB_EXPORT rc_t CC ReferenceList_Count(const ReferenceList* cself, uint32_t* count)
+{
+    rc_t rc = 0;
+    if ( cself == NULL || count == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcNull );
+    }
+    else
+    {
+        *count = cself->nodes_qty;
+    }
+    ALIGN_DBGERR( rc );
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceList_Find( const ReferenceList* cself, const ReferenceObj** obj,
+                                       const char* key, size_t key_sz )
+{
+    rc_t rc = 0;
+    char buf[4096], *b = buf;
+
+    if ( cself == NULL || obj == NULL || key == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcSearching, rcParam, rcNull );
+    }
+    else if ( key_sz >= sizeof( buf ) && ( b = malloc( key_sz + 1 ) ) == NULL )
+    {
+        rc = RC(rcAlign, rcType, rcSearching, rcMemory, rcExhausted);
+    }
+    else
+    {
+        memcpy( b, key, key_sz );
+        b[ key_sz ] = '\0';
+        *obj = ( ReferenceObj* )BSTreeFind( &cself->seqid_tree, b, ReferenceObj_CmpSeqId );
+        if ( *obj == NULL )
+        {
+            const BSTNode* n = BSTreeFind( &cself->name_tree, b, ReferenceObj_CmpName );
+            if ( n != NULL )
+            {
+                *obj = ( ReferenceObj* )&n[ -1 ];
+            }
+        }
+        if ( *obj == NULL )
+        {
+            rc = RC( rcAlign, rcType, rcSearching, rcItem, rcNotFound );
+        }
+        else
+        {
+            rc = ReferenceList_AddRef( cself );
+            if ( rc != 0 )
+            {
+                *obj = NULL;
+            }
+        }
+
+        if ( b != buf )
+        {
+            free( b );
+        }
+    }
+    ALIGN_DBGERR( rc );
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceList_Get( const ReferenceList* cself, const ReferenceObj** obj, uint32_t idx )
+{
+    rc_t rc = 0;
+    if ( cself == NULL || obj == NULL || idx >= cself->nodes_qty )
+    {
+        rc = RC( rcAlign, rcType, rcRetrieving, rcParam, rcInvalid );
+    }
+    else
+    {
+        rc = ReferenceList_AddRef( cself );
+        if ( rc == 0 )
+        {
+            *obj = cself->nodes[ idx ];
+        }
+        else
+        {
+            *obj = NULL;
+        }
+    }
+    ALIGN_DBGERR( rc );
+    return rc;
+}
+
+
+LIB_EXPORT rc_t ReferenceObj_AddRef( const ReferenceObj *cself )
+{
+    if ( cself == NULL )
+    {
+        return RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+    } 
+    else
+    {
+        return ReferenceList_AddRef( cself->mgr );
+    }
+}
+
+
+LIB_EXPORT void ReferenceObj_Release( const ReferenceObj *cself )
+{
+    ReferenceList_Release( cself ? cself->mgr : NULL );
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_Idx( const ReferenceObj* cself, uint32_t* idx )
+{
+    rc_t rc = 0;
+    if ( cself == NULL || idx == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+    }
+    else
+    {
+        *idx = cself->id;
+    }
+    ALIGN_DBGERR( rc );
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_IdRange( const ReferenceObj* cself, int64_t* start, int64_t* stop )
+{
+    rc_t rc = 0;
+    if ( cself == NULL || (start == NULL && stop == NULL) )
+    {
+        rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+    }
+    else
+    {
+        if ( start != NULL )
+        {
+            *start = cself->start_rowid;
+        }
+        if ( stop != NULL )
+        {
+            *stop = cself->end_rowid;
+        }
+    }
+    ALIGN_DBGERR( rc );
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_Bin( const ReferenceObj* cself, uint32_t* bin )
+{
+    rc_t rc = 0;
+    if ( cself == NULL || bin == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+    }
+    else
+    {
+        *bin = cself->bin;
+    }
+    ALIGN_DBGERR( rc );
+    return rc;
+
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_SeqId( const ReferenceObj* cself, const char** seqid )
+{
+    rc_t rc = 0;
+    if ( cself == NULL || seqid == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+    }
+    else
+    {
+        *seqid = cself->seqid;
+    }
+    ALIGN_DBGERR( rc );
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_Name( const ReferenceObj* cself, const char** name )
+{
+    rc_t rc = 0;
+    if ( cself == NULL || name == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+    }
+    else
+    {
+        *name = cself->name;
+    }
+    ALIGN_DBGERR( rc );
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_SeqLength( const ReferenceObj* cself, INSDC_coord_len* len )
+{
+    rc_t rc = 0;
+    if ( cself == NULL || len == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+    }
+    else
+    {
+        *len = cself->seq_len;
+    }
+    ALIGN_DBGERR( rc );
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_Circular( const ReferenceObj* cself, bool* circular )
+{
+    rc_t rc = 0;
+    if ( cself == NULL || circular == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+    }
+    else
+    {
+        *circular = cself->circular;
+    }
+    ALIGN_DBGERR( rc );
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_External( const ReferenceObj* cself, bool* external, char** path )
+{
+    rc_t rc = 0;
+
+    if ( cself == NULL || external == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+    }
+    else
+    {
+        const RefSeqMgr* rmgr;
+        *external = !cself->read_present;
+        if ( path != NULL && !cself->read_present )
+        {
+            rc = ReferenceList_RefSeqMgr( cself->mgr, &rmgr );
+            if ( rc == 0 )
+            {
+                *path = NULL;
+                rc = RefSeqMgr_Exists( rmgr, cself->seqid, string_size( cself->seqid ), NULL );
+                if ( GetRCObject( rc ) == rcTable && GetRCState( rc ) == rcNotFound )
+                {
+                    rc = 0;
+                }
+            }
+        }
+    }
+    ALIGN_DBGERR( rc );
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_Read( const ReferenceObj* cself, INSDC_coord_zero offset, INSDC_coord_len len,
+                                      uint8_t* buffer, INSDC_coord_len* written )
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || buffer == NULL || written == NULL )
+    {
+        rc = RC ( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+    }
+    else
+    {
+        rc = ReferenceSeq_ReOffset( cself->circular, cself->seq_len, &offset );
+        if ( rc == 0 )
+        {
+            if ( cself->mgr->reader != NULL || ( rc = ReferenceList_OpenCursor( cself->mgr ) ) == 0 )
+            {
+                int cid = ( cself->mgr->options & ereferencelist_4na ) ? ereflst_cn_READ_4na : ereflst_cn_READ_dna;
+                INSDC_coord_len q = 0;
+                *written = 0;
+                do
+                {
+                    int64_t rowid = cself->start_rowid + offset / cself->mgr->max_seq_len;
+                    INSDC_coord_zero s = offset % cself->mgr->max_seq_len;
+                    rc = TableReader_ReadRow( cself->mgr->reader, rowid );
+                    if ( rc == 0 )
+                    {
+                        q = cself->mgr->reader_cols[ereflst_cn_SEQ_LEN].base.coord_len[0] - s;
+                        if ( q > len ) { q = len; }
+                        memcpy( &buffer[ *written ], &cself->mgr->reader_cols[ cid ].base.str[ s ], q );
+                        *written += q;
+                        offset += q;
+                        len -= q;
+                    }
+                    /* SEQ_LEN < MAX_SEQ_LEN is last row unless it is CIRCULAR */
+                    if ( cself->mgr->reader_cols[ ereflst_cn_SEQ_LEN ].base.coord_len[ 0 ] < cself->mgr->max_seq_len )
+                    {
+                        if ( !cself->circular ) { break; }
+                        offset = 0;
+                    }
+                } while ( rc == 0 && q > 0 && len > 0 );
+            }
+        }
+    }
+    ALIGN_DBGERR( rc );
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_GetIdCount( const ReferenceObj* cself, int64_t row_id, uint32_t *count )
+{
+    rc_t rc = 0;
+
+    if ( cself == NULL || count == NULL )
+    {
+        rc = RC ( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+    }
+    else if ( cself->mgr == NULL )
+    {
+        rc = RC ( rcAlign, rcType, rcAccessing, rcItem, rcInvalid );
+    }
+    else
+    {
+        *count = 0;
+
+        if ( cself->mgr->reader == NULL )
+            rc = ReferenceList_OpenCursor( cself->mgr );
+
+        if ( rc == 0 )
+        {
+            rc = TableReader_ReadRow( cself->mgr->reader, row_id );
+            if ( rc == 0 )
+            {
+                TableReaderColumn *col = &( cself->mgr->reader_cols[ ereflst_cn_PRIMARY_ALIGNMENT_IDS ] );
+                count[ 0 ] = col->len;
+                col = &( cself->mgr->reader_cols[ ereflst_cn_SECONDARY_ALIGNMENT_IDS ] );
+                count[ 1 ] = col->len;
+                col = &( cself->mgr->reader_cols[ ereflst_cn_EVIDENCE_INTERVAL_IDS ] );
+                count[ 2 ] = col->len;
+            }
+        }
+    }
+    return rc;
+}
+
+
+typedef struct PlacementRecExtensionInfo PlacementRecExtensionInfo;
+struct PlacementRecExtensionInfo
+{
+    /* data, destructor and size for extension 1 */
+    void * data;
+    void ( CC * destroy ) ( void *obj, void *data );
+    size_t size;
+};
+
+
+LIB_EXPORT void * CC PlacementRecordCast ( const PlacementRecord *self, uint32_t ext )
+{
+    void * res = NULL;
+    if ( self != NULL )
+    {
+        uint8_t * ptr = ( uint8_t * ) self;
+        PlacementRecExtensionInfo * ext_info;
+
+/**********************************************
+    +---------------+
+    | core          |   PlacementRecord *
+    +---------------+
+    | read_group    |   char *
+    +---------------+
+    | ext_info1     |   PlacementRecExtensionInfo *
+    | ext_info2     |   PlacementRecExtensionInfo *
+    +---------------+
+    | ext1          |   ??? *
+    +---------------+
+    | ext2          |   ??? *
+    +---------------+
+**********************************************/
+        ptr += ( sizeof * self );
+        ptr += self->spot_group_len;
+        ext_info = ( PlacementRecExtensionInfo * )( ptr );
+        ptr += ( 2 * ( sizeof * ext_info ) );
+        switch( ext )
+        {
+            case placementRecordExtension0 : res = ( void * ) ptr;
+                                             break;
+
+            case placementRecordExtension1 : res = ( void * ) ( ptr + ext_info->size );
+                                             break;
+        }
+    }
+    return res;
+}
+
+
+LIB_EXPORT void * CC PlacementRecord_get_ext_data_ptr ( const PlacementRecord *self, uint32_t ext )
+{
+    void * res = NULL;
+    if ( self != NULL )
+    {
+        uint8_t * ptr = ( uint8_t * ) self;
+        PlacementRecExtensionInfo * ext_info;
+        ptr += ( sizeof * self );
+        ptr += self->spot_group_len;    /* ptr points now to the 1st ext-info-block */
+        ext_info = ( PlacementRecExtensionInfo * )( ptr );
+        switch( ext )
+        {
+        case placementRecordExtension0 : res = ext_info[ 0 ].data; break;
+        case placementRecordExtension1 : res = ext_info[ 1 ].data; break;
+        }
+    }
+    return res;
+}
+
+
+LIB_EXPORT void CC PlacementRecordWhack( const PlacementRecord *cself )
+{
+    if ( cself != NULL ) 
+    {
+        PlacementRecord * self = ( PlacementRecord * )cself;
+        PlacementRecExtensionInfo * ext_info;
+        uint8_t * ptr = ( uint8_t * )self;
+        ptr += sizeof( *self );
+        ptr += self->spot_group_len;
+        ext_info = ( PlacementRecExtensionInfo * ) ptr;
+
+        /* destroy from the outer callback-block beginning */
+        if ( ext_info[ 1 ].destroy != NULL )
+        {
+            void *obj = PlacementRecordCast ( self, placementRecordExtension1 );
+            ext_info[ 1 ].destroy( obj, ext_info[ 1 ].data );
+        }
+
+        if ( ext_info[ 0 ].destroy != NULL )
+        {
+            void *obj = PlacementRecordCast ( self, placementRecordExtension0 );
+            ext_info[ 0 ].destroy( obj, ext_info[ 0 ].data );
+        }
+        /* now deallocate ( or put back into pool ) */
+        free( self );
+    }
+}
+
+struct PlacementIterator
+{
+    const ReferenceObj* obj;
+    INSDC_coord_zero ref_window_start;
+    INSDC_coord_len ref_window_len;
+
+    int64_t last_ref_row_of_window_rel;     /* relative to start of reference, not window */
+    int64_t cur_ref_row_rel;                /* current row relative to start of reference */
+    int64_t rowcount_of_ref;                /* precomputed: how many rows does this reference has */
+
+    /* own reader in case of ref cursor based construction */
+    const TableReader* ref_reader;
+    TableReaderColumn* ref_cols;
+    TableReaderColumn ref_cols_own[sizeof(ReferenceList_cols)/sizeof(ReferenceList_cols[0])];
+
+    /* own reader in case of align cursor based construction */
+    const TableReader* align_reader;
+    TableReaderColumn* align_cols;
+    TableReaderColumn align_cols_own[sizeof(PlacementIterator_cols)/sizeof(PlacementIterator_cols[0])];
+
+    /* current reference table row */
+    int64_t current_reftable_row;
+
+    const TableReaderColumn* ids_col;
+    Vector ids;
+    /* PlacementRecord c-tor params */
+    PlacementRecordExtendFuncs ext_0;
+    PlacementRecordExtendFuncs ext_1;
+
+    /* if this field is :
+     * NULL ... group by original read-group from the source-file
+     * points to empty string ... do not perform grouping at all
+     * point to non-empty string ... group by this string
+    */
+    const char * spot_group;
+    size_t spot_group_len;
+    int32_t min_mapq;
+
+    const VCursor* align_curs;
+};
+
+
+static void enter_spotgroup ( PlacementIterator *iter, const char * spot_group )
+{
+    if ( spot_group == NULL )
+    {
+        iter->spot_group = NULL;
+        iter->spot_group_len = 0;
+    }
+    else
+    {
+        iter->spot_group_len = string_size ( spot_group );
+        if ( iter->spot_group_len > 0 )
+        {
+            iter->spot_group = string_dup_measure ( spot_group, NULL );
+        }
+        else
+        {
+            iter->spot_group = calloc( 1, 1 );
+        }
+    }
+}
+
+
+static int64_t calc_overlaped( PlacementIterator * o, align_id_src ids )
+{
+    int64_t res = o->ref_window_start;
+    bool from_ref_table = false;
+
+/*
+    uint32_t ofs = 0;
+    switch ( ids )
+    {
+        case primary_align_ids   : ofs = 0; break;
+        case secondary_align_ids : ofs = 1; break;
+        case evidence_align_ids  : ofs = 2; break;
+    }
+
+    if ( o->ref_cols[ ereflst_cn_OVERLAP_REF_LEN ].idx != 0 && 
+         o->ref_cols[ ereflst_cn_OVERLAP_REF_LEN ].len > ofs )
+    {
+        INSDC_coord_len overlap_ref_len = o->ref_cols[ ereflst_cn_OVERLAP_REF_LEN ].base.coord_len[ ofs ];
+        if ( overlap_ref_len < o->obj->mgr->max_seq_len )
+        {
+            if ( o->ref_cols[ ereflst_cn_OVERLAP_REF_POS ].idx != 0 && 
+                 o->ref_cols[ ereflst_cn_OVERLAP_REF_POS ].len > ofs )
+            {
+                res = o->ref_cols[ereflst_cn_OVERLAP_REF_POS].base.coord0[ ofs ];
+                from_ref_table = true;
+            }
+        }
+    }
+*/
+
+    if ( !from_ref_table )
+    {
+        /* default is step back 10 rows/50k bases */
+        int64_t ref_pos_lookback = ( 10 * o->obj->mgr->max_seq_len );
+        if ( o->obj->circular )
+        {
+            int64_t const half = ( o->obj->seq_len / 2 );
+
+            if ( ref_pos_lookback > half )
+            {
+                /* go back no more than one full length */
+                ref_pos_lookback = half;
+            }
+            res = ( o->ref_window_start - ref_pos_lookback ); /* could become negative */
+        }
+        else
+        {
+            res = ( o->ref_window_start < ref_pos_lookback ? 0 : ( o->ref_window_start - ref_pos_lookback ) );
+        }
+    }
+    return res;
+}
+
+
+LIB_EXPORT rc_t CC ReferenceObj_MakePlacementIterator ( const ReferenceObj* cself,
+    PlacementIterator **iter,
+    INSDC_coord_zero ref_window_start, INSDC_coord_len ref_window_len,
+    int32_t min_mapq,
+    struct VCursor const *ref_cur, struct VCursor const *align_cur, align_id_src ids,
+    const PlacementRecordExtendFuncs *ext_0, const PlacementRecordExtendFuncs *ext_1,
+    const char * spot_group )
+{
+    rc_t rc = 0;
+    PlacementIterator* o = NULL;
+
+    if ( cself == NULL || iter == NULL )
+    {
+        rc = RC(rcAlign, rcType, rcAccessing, rcParam, rcInvalid);
+    }
+    else if ( ( rc = ReferenceSeq_ReOffset( cself->circular, cself->seq_len, &ref_window_start ) ) != 0 )
+    {
+    }
+    else if ( ( o = calloc( 1, sizeof( *o ) ) ) == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcAccessing, rcMemory, rcExhausted );
+    }
+    else
+    {
+        rc = ReferenceList_AddRef( cself->mgr );
+        if ( rc == 0 )
+        {
+            ReferenceList* mgr = cself->mgr;
+            o->obj = cself;
+            /* o->wrapped_around = false; */
+            ReferenceObj_AddRef( o->obj );
+            o->min_mapq = min_mapq;
+
+            if ( ext_0 != NULL )
+            {
+                o->ext_0.data = ext_0->data;
+                o->ext_0.destroy = ext_0->destroy;
+                o->ext_0.populate = ext_0->populate;
+                o->ext_0.alloc_size = ext_0->alloc_size;
+                o->ext_0.fixed_size = ext_0->fixed_size;
+            }
+
+            if ( ext_1 != NULL )
+            {
+                o->ext_1.data = ext_1->data;
+                o->ext_1.destroy = ext_1->destroy;
+                o->ext_1.populate = ext_1->populate;
+                o->ext_1.alloc_size = ext_1->alloc_size;
+                o->ext_1.fixed_size = ext_1->fixed_size;
+            }
+
+            if ( ref_cur == NULL )
+            {
+                if ( mgr->reader == NULL )
+                {
+                    rc = ReferenceList_OpenCursor( mgr );
+                }
+                if ( rc == 0 )
+                {
+                    o->ref_reader = mgr->reader;
+                    o->ref_cols = mgr->reader_cols;
+                }
+            }
+            else
+            {
+                memcpy( o->ref_cols_own, ReferenceList_cols, sizeof( o->ref_cols_own ) );
+                o->ref_cols = o->ref_cols_own;
+                rc = TableReader_MakeCursor( &o->ref_reader, ref_cur, o->ref_cols_own );
+            }
+
+            if ( align_cur == NULL )
+            {
+                bool b_assign = ( mgr->iter != NULL );
+                if ( !b_assign )
+                {
+                    rc = ReferenceList_OpenCursor2( mgr, ids );
+                    b_assign = ( rc == 0 );
+                }
+                if ( b_assign )
+                {
+                    o->align_reader = mgr->iter;
+                    o->align_cols = mgr->iter_cols;
+                }
+            }
+            else
+            {
+                memcpy( o->align_cols_own, PlacementIterator_cols, sizeof( o->align_cols_own ) );
+                o->align_cols = o->align_cols_own;
+                o->align_curs = align_cur;
+                rc = TableReader_MakeCursor( &o->align_reader, align_cur, o->align_cols );
+            }
+
+            if ( rc == 0 )
+            {
+                int64_t first_ref_row_of_window_rel = ( ref_window_start / mgr->max_seq_len );
+                int64_t first_ref_row_of_window_abs = ( cself->start_rowid + first_ref_row_of_window_rel );
+
+                /* in bases */
+                o->ref_window_start = ref_window_start;
+                o->ref_window_len = ref_window_len;
+
+                /* in reference-rows */
+                o->last_ref_row_of_window_rel = ref_window_start;
+                o->last_ref_row_of_window_rel += ref_window_len;
+                o->last_ref_row_of_window_rel /= mgr->max_seq_len;
+                o->rowcount_of_ref = ( cself->end_rowid - cself->start_rowid );
+
+                /* get effective starting offset based on overlap
+                   from alignments which started before the requested pos */
+                rc = TableReader_ReadRow( o->ref_reader, first_ref_row_of_window_abs );
+                if ( rc == 0 )
+                {
+                    int64_t ref_pos_overlapped = calc_overlaped( o, ids );
+                    ALIGN_DBG( "ref_pos_overlapped: %li", ref_pos_overlapped );
+
+                    /* the absolute row where we are reading from */
+                    o->cur_ref_row_rel = ( ref_pos_overlapped / mgr->max_seq_len ) - 1;
+
+                    VectorInit( &o->ids, 0, 100 );
+
+                    o->ids_col = &o->ref_cols[ids == primary_align_ids ? ereflst_cn_PRIMARY_ALIGNMENT_IDS :
+                            ( ids == secondary_align_ids ? ereflst_cn_SECONDARY_ALIGNMENT_IDS : ereflst_cn_EVIDENCE_INTERVAL_IDS ) ];
+
+                    ALIGN_DBG( "iter.last_ref_row_of_window_rel: %li", o->last_ref_row_of_window_rel );
+                    ALIGN_DBG( "iter.rowcount_of_ref: %li", o->rowcount_of_ref );
+                    ALIGN_DBG( "iter.cur_ref_row_rel: %li", o->cur_ref_row_rel );
+                }
+            }
+
+            if ( rc != 0 )
+            {
+                ReferenceObj_Release( o->obj );
+            }
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        enter_spotgroup ( o, spot_group );
+        *iter = o;
+/*        ALIGN_DBG( "iter for %s:%s opened 0x%p", cself->seqid, cself->name, o ); */
+    }
+    else
+    {
+        *iter = NULL;
+        PlacementIteratorRelease( o );
+        ALIGN_DBGERRP( "iter for %s:%s", rc, cself->seqid, cself->name );
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC PlacementIteratorAddRef ( const PlacementIterator *cself )
+{
+    return ReferenceList_AddRef(cself ? cself->obj->mgr : NULL);
+}
+
+
+static void CC PlacementIterator_whack_recs( void *item, void *data )
+{
+    PlacementRecordWhack( ( PlacementRecord * ) item );
+}
+
+
+LIB_EXPORT rc_t CC PlacementIteratorRelease ( const PlacementIterator *cself )
+{
+    if ( cself != NULL )
+    {
+        PlacementIterator* self = ( PlacementIterator* )cself;
+
+        VectorWhack( &self->ids, PlacementIterator_whack_recs, NULL );
+
+        if ( self->ref_reader != self->obj->mgr->reader )
+        {
+            TableReader_Whack( self->ref_reader );
+        }
+        if ( self->align_reader != self->obj->mgr->iter )
+        {
+            TableReader_Whack( self->align_reader );
+        }
+        ReferenceObj_Release( self->obj );
+        ReferenceList_Release( self->obj->mgr );
+        if ( self->spot_group != NULL )
+        {
+            free( ( void * )self->spot_group );
+        }
+        free( self );
+    }
+    return 0;
+}
+
+
+LIB_EXPORT rc_t CC PlacementIteratorRefWindow( const PlacementIterator *self,
+                                               const char **idstr, INSDC_coord_zero* pos, INSDC_coord_len* len )
+{
+    rc_t rc = 0;
+
+    if ( self == NULL || (idstr == NULL || pos == NULL || len == NULL ) )
+    {
+        rc = RC(rcAlign, rcType, rcAccessing, rcParam, rcInvalid);
+    }
+    else
+    {
+        if ( idstr != NULL ) { *idstr = self->obj->seqid; }
+        if ( pos != NULL )   { *pos = self->ref_window_start; }
+        if ( len != NULL )   { *len = self -> ref_window_len; }
+    }
+    ALIGN_DBGERR( rc );
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC PlacementIteratorRefObj( const PlacementIterator * self,
+                                            struct ReferenceObj const ** refobj )
+{
+    rc_t rc = 0;
+
+    if ( self == NULL || refobj == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+    }
+    else
+    {
+        *refobj = self->obj;
+    }
+    ALIGN_DBGERR( rc );
+    return rc;
+}
+
+
+#if _DEBUGGING
+static void CC PlacementRecordVector_dump( void *item, void *data )
+{
+    const PlacementRecord* i = ( const PlacementRecord* )item;
+    ALIGN_DBG( " {%u, %u, %li}", i->pos, i->len, i->id );
+}
+#endif
+
+
+/* this comparison function performs last-to-first
+   ordering in the Vector. for this reason, all
+   comparisons and return values are reversed. */
+static int CC PlacementRecordVector_cmp( const void** left, const void** right, void* data )
+{
+    const PlacementRecord* l = *( ( const PlacementRecord** )left );
+    const PlacementRecord* r = *( ( const PlacementRecord** )right );
+
+    /* order by pos desc
+       return right - left rather than
+       normal left - right to reverse result */
+    int32_t d = r -> pos - l -> pos;
+    if ( d != 0 )
+        return d;
+
+    /* ...len asc */
+    if ( l -> len < r -> len )
+        return -1;
+    if ( l -> len > r -> len )
+        return 1;
+
+    /* ...id desc */
+    if ( l -> id > r -> id )
+        return -1;
+    if ( l -> id < r -> id )
+        return 1;
+    return 0;
+}
+
+
+static rc_t allocate_populate_rec( const PlacementIterator *cself,
+                                   PlacementRecord **rec,
+                                   struct VCursor const *curs,
+                                   int64_t id,
+                                   INSDC_coord_zero apos,
+                                   INSDC_coord_len alen )
+{
+    rc_t rc = 0;
+
+    {
+        PlacementRecExtensionInfo * ext_info;
+        size_t spot_group_len, size0, size1, total_size;
+
+        if ( cself->spot_group_len > 0 )
+        {
+            /* use the read-group from the PlacementIterator as an fix override ... */
+            spot_group_len = cself->spot_group_len;
+        }
+        else
+        {
+            if ( cself->spot_group != NULL )
+            {
+                /* iterator has an empty (not NULL) spot-group: use the orignal data! */
+                spot_group_len = cself->align_cols[eplacementiter_cn_READ_GROUP].len;
+            }
+            else
+            {
+                /* do not use spotgroups at all ! */
+                spot_group_len = 0;
+            }
+        }
+
+        /* use callback or fixed size to discover the size of portions 0 and 1 */
+        if ( cself->ext_0.alloc_size != NULL )
+        {
+            rc = cself->ext_0.alloc_size( curs, id, &size0, cself->ext_0.data );
+            if ( rc != 0 )
+                return rc;
+        }
+        else
+            size0 = cself->ext_0.fixed_size;
+
+        if ( cself->ext_1.alloc_size != NULL )
+        {
+            rc = cself->ext_1.alloc_size( curs, id, &size1, cself->ext_1.data );
+            if ( rc != 0 )
+                return rc;
+        }
+        else
+            size1 = cself->ext_1.fixed_size;
+        
+        /* allocate the record ( or take it from a pool ) */
+        total_size = ( sizeof **rec ) + spot_group_len + ( 2 * ( sizeof *ext_info ) ) + size0 + size1;
+        *rec = calloc( 1, total_size );
+        if ( *rec == NULL )
+        {
+            rc = RC( rcAlign, rcType, rcAccessing, rcMemory, rcExhausted );
+        }
+        else
+        {
+            PlacementRecord *pr = * rec;
+            uint8_t * ptr = ( uint8_t * )( * rec );
+            ptr += sizeof ( **rec );
+            pr->spot_group = (char *)ptr;
+            ptr += spot_group_len ;
+            ext_info = ( PlacementRecExtensionInfo * )ptr;
+
+            /* prepopulate the core-record : */
+            pr->id  = id;               /* the row-id */
+            pr->ref = cself->obj;       /* the ReferenceObj it refers to */
+            pr->pos = apos;             /* the positon on the reference */
+            pr->len = alen;             /* the length on the reference */
+            pr->mapq = cself->align_cols[eplacementiter_cn_MAPQ].base.i32[ 0 ]; /* mapq */
+
+            /* populate the spot-group : (with the values discovered at the "size-phase" ) */
+            pr->spot_group_len = spot_group_len;
+            if ( cself->spot_group_len > 0 )
+            {
+                /* we make a copy of the spot-group-override commin from the iterator */
+                string_copy ( pr->spot_group, spot_group_len, cself->spot_group, spot_group_len );
+            }
+            else
+            {
+                if ( cself->spot_group != NULL )
+                {
+                    /* iterator has an empty (not NULL) spot-group: use the orignal data! */
+                    string_copy( pr->spot_group, spot_group_len,
+                                 cself->align_cols[eplacementiter_cn_READ_GROUP].base.str, spot_group_len );
+                }
+            }
+
+            ext_info[ 0 ].data = cself->ext_0.data;          /* the opt. context ptr. */
+            ext_info[ 0 ].destroy = cself->ext_0.destroy;    /* the opt. destructor */
+            ext_info[ 0 ].size = size0;                      /* discovered size from above */
+
+            ext_info[ 1 ].data = cself->ext_1.data;          /* the opt. context ptr. */
+            ext_info[ 1 ].destroy = cself->ext_1.destroy;    /* the opt. destructor */
+            ext_info[ 1 ].size = size1;                      /* discovered size from above */
+
+            /* pass the record now to the opt. populate-callbacks */
+            if ( cself->ext_0.populate != NULL )
+            {
+                void * obj = PlacementRecordCast ( pr, placementRecordExtension0 );
+                rc = cself->ext_0.populate( obj, pr, curs,
+                                            cself->ref_window_start,
+                                            cself->ref_window_len,
+                                            cself->ext_0.data );
+                if ( rc != 0 && cself->ext_0.destroy != NULL )
+                {
+                    void *obj = PlacementRecordCast ( pr, placementRecordExtension0 );
+                    cself->ext_0.destroy( obj, cself->ext_0.data );
+                }
+            }
+
+            if ( rc == 0 && cself->ext_1.populate != NULL )
+            {
+                void * obj = PlacementRecordCast ( pr, placementRecordExtension1 );
+                rc = cself->ext_1.populate( obj, pr, curs, 
+                                            cself->ref_window_start,
+                                            cself->ref_window_len,
+                                            cself->ext_1.data );
+                if ( rc != 0 )
+                {
+                    if ( cself->ext_1.destroy != NULL )
+                    {
+                        void *obj = PlacementRecordCast ( pr, placementRecordExtension1 );
+                        cself->ext_1.destroy( obj, cself->ext_1.data );
+                    }
+                    if ( cself->ext_0.destroy != NULL )
+                    {
+                        void *obj = PlacementRecordCast ( pr, placementRecordExtension0 );
+                        cself->ext_0.destroy( obj, cself->ext_0.data );
+                    }
+
+                }
+            }
+
+            if ( rc != 0 )
+            {
+                /* free */
+                free( *rec );
+                *rec = NULL;
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t make_alignment( PlacementIterator *self, int64_t align_id,
+                            INSDC_coord_zero apos, INSDC_coord_len alen )
+{
+    PlacementRecord *rec;
+    rc_t rc = allocate_populate_rec( self, &rec, self->align_curs, align_id, apos, alen );
+    if ( rc == 0 )
+    {
+        /*ALIGN_DBG("align %p: {%li, %u, %u} - added[%u]", rec, cself->ids_col->base.i64[i],
+            apos, alen, VectorLength(&cself->ids));*/
+        rc = VectorAppend( &self->ids, NULL, rec );
+        if ( rc != 0 )
+            PlacementRecordWhack( rec );
+    }
+    else
+    {
+        if ( GetRCState( rc ) == rcIgnored )
+            rc = 0; /* do not break the loop if a record is filtered out! */
+    }
+    return rc;
+}
+
+
+/*
+  we have read a single row from REFERENCE, including the
+  alignment ids. use each alignment id from this row to
+  populate internal vector
+*/
+static rc_t read_alignments( PlacementIterator *self )
+{
+    rc_t rc = 0;
+    uint32_t i;
+    /* fill out vector */
+    /*ALIGN_DBG("align rows: %u", cself->ids_col->len);*/
+    for ( i = 0; rc == 0 && i < self->ids_col->len; i++ )
+    {
+        rc = TableReader_ReadRow( self->align_reader, self->ids_col->base.i64[ i ] );
+        if ( rc == 0 )
+        {
+            INSDC_coord_zero apos = self->align_cols[ eplacementiter_cn_REF_POS ].base.coord0[ 0 ];
+            INSDC_coord_len alen  = self->align_cols[ eplacementiter_cn_REF_LEN ].base.coord_len[ 0 ];
+            /*ALIGN_DBG("align row: {%li, %u, %u}", cself->ids_col->base.i64[i], apos, alen);*/
+
+            if ( self->cur_ref_row_rel < 0 )
+                apos -= self->obj->seq_len;
+
+            /* at this point we have the position of the alignment.
+               we want it to intersect with the window */
+
+            /* test mapq */
+            if ( self->align_cols[eplacementiter_cn_MAPQ].base.i32[ 0 ] < self->min_mapq )
+                continue;
+
+            /* case 1: alignment, which is expressed in
+               linear coordinates, is entirely to left of
+               window. */
+            if ( (INSDC_coord_zero)( apos + alen ) <= self -> ref_window_start )
+            {
+                /* ignore this alignment */
+                continue;
+            }
+
+            /* case 2: alignment is to the right of window */
+            if ( apos >= ( self -> ref_window_start + self -> ref_window_len ) )
+            {
+                /* if not circular, it cannot intersect */
+                if ( ! self -> obj -> circular )
+                {
+                    /* this seems like it indicates end of window,
+                       however there is no guarantee that the ids
+                       being fetched are in reference order. they are
+                       supposed to be in row order ( cluster ) to
+                       reduce random access to cursor. unless row
+                       order is guaranteed to be reference order,
+                       we cannot know that the loop can be terminated. */
+                    continue;
+                }
+
+                /* circular, but still within linear range
+                   means it cannot wrap around to intersect */
+                if ( (INSDC_coord_zero)( apos + alen ) <= self->obj->seq_len )
+                    continue;
+
+            }
+            else if ( ( self->obj->circular )&&( apos + alen > self->obj->seq_len ) ) 
+            {
+                /* the end of the alignment sticks over the end of the reference! 
+                   ---> we have the rare case of an alignment that wraps arround !
+                   let as insert the alignment 2 times!
+                   ( one with neg. position, one at real position ) */
+                rc =  make_alignment( self, self->ids_col->base.i64[i], apos - self->obj->seq_len, alen );
+            }
+
+            /* having arrived here, we know the alignment intersects our window
+               apos MAY be < 0 if the alignment wrapped around */
+            if ( rc == 0 )
+                rc =  make_alignment( self, self->ids_col->base.i64[i], apos, alen );
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC PlacementIteratorNextAvailPos( const PlacementIterator *cself,
+    INSDC_coord_zero *pos, INSDC_coord_len *len )
+{
+    rc_t rc = 0;
+    PlacementIterator* self = (PlacementIterator*)cself;
+
+    if ( self == NULL || ( pos == NULL && len == NULL ) )
+    {
+        rc = RC( rcAlign, rcType, rcSelecting, rcParam, rcInvalid );
+    }
+    else
+    {
+        while ( rc == 0 && VectorLength( &self->ids ) == 0 )
+        {
+            /* read ids */
+
+            self->cur_ref_row_rel++;   /* increment row offset */
+
+            ALIGN_DBG( "ref row: %li-%li-%li",
+                       self->obj->start_rowid, self->cur_ref_row_rel, self->last_ref_row_of_window_rel );
+
+            if ( self->cur_ref_row_rel > self->last_ref_row_of_window_rel )
+                rc = SILENT_RC( rcAlign, rcType, rcSelecting, rcRange, rcDone );
+            else
+            {
+                int64_t row = ( self->obj->start_rowid + self->cur_ref_row_rel );
+                if ( self->cur_ref_row_rel < 0 )
+                    row += self->rowcount_of_ref;
+
+                rc = TableReader_ReadRow( self->ref_reader, row );
+                if ( rc == 0 )
+                    rc = read_alignments( self );
+
+                if ( ( rc == 0 || GetRCState( rc ) == rcDone) && VectorLength( &cself->ids ) > 0 )
+                {
+                    VectorReorder( &self->ids, PlacementRecordVector_cmp, NULL );
+#if _DEBUGGING && 0
+                    ALIGN_DBG( "REFERENCE row %li %u recs order by pos asc, len desc, id asc",
+                                row, VectorLength( &cself->ids ) );
+                    VectorForEach( &self->ids, true, PlacementRecordVector_dump, NULL );
+#endif
+                }
+            }
+        }
+
+        if ( rc == 0 || GetRCState( rc ) == rcDone )
+        {
+            uint32_t count = VectorLength( &cself->ids );
+            if ( count > 0 )
+            {
+                PlacementRecord* r = VectorLast( &cself->ids );
+                rc = 0;
+                if ( pos != NULL ) { *pos = r->pos; }
+                if ( len != NULL ) { *len = r->len; }
+
+/*                ALIGN_DBG( "PlacementIteratorNextAvailPos( pos=%u, n=%u )", r->pos, count ); */
+                if ( !( cself->obj->circular ) && ( r->pos >= ( cself->ref_window_start + cself->ref_window_len ) ) )
+                {
+                    /* the alignment !starts! after the end of the of the requested window! */
+                    rc = SILENT_RC( rcAlign, rcType, rcSelecting, rcRange, rcDone );
+                }
+            }
+            else
+                ALIGN_DBG( "PlacementIteratorNextAvailPos( no placements )", 0 );
+        }
+    }
+
+    if ( rc != 0 && GetRCState(rc) != rcDone )
+        ALIGN_DBGERR( rc );
+
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC PlacementIteratorNextRecordAt( PlacementIterator *cself,
+    INSDC_coord_zero pos, const PlacementRecord **rec )
+{
+    rc_t rc = 0;
+    if ( cself == NULL || rec == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+    }
+    else
+    {
+        uint32_t vlen = VectorLength( &cself->ids );
+        *rec = NULL;
+        if ( vlen > 0 )
+        {
+            PlacementRecord* r = VectorLast( &cself->ids );
+            if ( r->pos == pos )
+            {
+                VectorRemove( &cself->ids, vlen - 1, (void**)rec );
+            }
+        }
+    }
+
+    if ( rc == 0 && *rec == NULL )
+    {
+        rc = SILENT_RC( rcAlign, rcType, rcSelecting, rcOffset, rcDone );
+    }
+    else
+    {
+        ALIGN_DBGERR( rc );
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC PlacementIteratorNextIdAt( PlacementIterator *cself,
+                                              INSDC_coord_zero pos, int64_t *row_id, INSDC_coord_len *len )
+{
+    rc_t rc = 0;
+    const PlacementRecord* r = NULL;
+
+    if ( cself == NULL || row_id == NULL )
+    {
+        rc = RC( rcAlign, rcType, rcAccessing, rcParam, rcInvalid );
+    }
+    else
+    {
+        rc = PlacementIteratorNextRecordAt( cself, pos, &r );
+        if ( rc  == 0 )
+        {
+            *row_id = r->id;
+            if ( len != NULL ) { *len = r->len; }
+            PlacementRecordWhack( r );
+        }
+    }
+
+    if ( GetRCState( rc ) != rcDone )
+    {
+        ALIGN_DBGERR( rc );
+    }
+    return rc;
+}
diff --git a/libs/align/refseq-mgr.c b/libs/align/refseq-mgr.c
index 9df013d..fde6e90 100644
--- a/libs/align/refseq-mgr.c
+++ b/libs/align/refseq-mgr.c
@@ -23,6 +23,7 @@
 * ===========================================================================
 *
 */
+
 #include <align/extern.h>
 
 #include <klib/rc.h>
@@ -50,6 +51,10 @@
 #include <ctype.h>
 #include <assert.h>
 
+/*#define ALIGN_DBG KOutMsg*/
+
+#define USE_OWN_REFSEQ_RESOLVER 0
+
 struct RefSeqMgr {
     BSTree tree;
     KConfig *kfg;
@@ -63,12 +68,154 @@ struct RefSeqMgr {
     BSTree vdbs;
 };
 
+struct RefSeq {
+    BSTNode dad;
+    const RefSeqMgr* mgr;
+    const TableReaderRefSeq* reader;
+    uint64_t usage;
+    uint32_t accession_sz;
+    /* must be last member of struct */
+    char accession[1];
+};
+
+typedef struct RefSeqMgr_Db_struct {
+    BSTNode dad;
+    char key[4096];
+    const VDatabase* db;
+} RefSeqMgr_Db;
+
+#if USE_OWN_REFSEQ_RESOLVER
+struct FindTable_ctx {
+    RefSeqMgr* self;
+    const KDBManager* kmgr;
+    const VTable** tbl;
+    char const* name;
+    uint32_t name_sz;
+    bool found;
+    rc_t rc;
+    char** path; /* optional */
+};
+#endif
+
 static
-rc_t RefSeqMgr_KfgReadStr(const KConfig* kfg, const char* path, char* value, size_t value_sz)
+rc_t RefSeqMgr_ConfigValue ( const KConfig *kfg, const char *node_path, char *value, size_t value_size )
 {
+    const KConfigNode *node;
+    rc_t rc = KConfigOpenNodeRead ( kfg, & node, node_path );
+    if ( rc == 0 )
+    {
+        size_t num_read, remaining;
+        rc = KConfigNodeRead ( node, 0, value, value_size - 1, & num_read,  & remaining );
+        if ( rc == 0 )
+        {
+            if ( remaining != 0 )
+                rc = RC ( rcSRA, rcMgr, rcConstructing, rcString, rcExcessive );
+            else
+                value [ num_read ] = 0;
+        }
+        
+        KConfigNodeRelease ( node );
+    }
+    return rc;
+}
+
+static
+rc_t RefSeqMgr_KfgReadRepositories(const KConfig* kfg, char* paths, size_t paths_sz)
+{
+    /* servers are children of refseq/repository, e.g.:             /refseq/repository/main="..." */ 
+    /* volumes are in refseq/repository/<serverName>/volumes, e.g.: /refseq/repository/main/volumes="..." */
+    /* all server/volume combinations are returned in paths separated by ':' */
+    
     rc_t rc = 0;
     const KConfigNode *node;
+#define KFG_PATH "/refseq/repository/"
+    paths[0] = 0;
+    
+    rc = KConfigOpenNodeRead ( kfg, & node, KFG_PATH );
+    if ( rc == 0 )
+    {
+        KNamelist* children;
+        rc = KConfigNodeListChild ( node, &children );
+        if ( rc == 0 )
+        {
+            uint32_t count;
+            rc = KNamelistCount ( children, &count );
+            if ( rc == 0 )
+            {
+                uint32_t i;
+                for (i = 0; i < count; ++i) /* for all servers */
+                {
+                    const char* name;
+                    rc = KNamelistGet ( children, i, &name );
+                    if ( rc == 0 )
+                    {
+#define BufSize 4096
+                        char server[ BufSize ];
+                        char buf[ BufSize ];
+                        size_t num_writ;
+                        
+                        rc = string_printf(buf, BufSize, &num_writ, KFG_PATH "%s", name);
+                        if (rc == 0)
+                        {
+                            rc = RefSeqMgr_ConfigValue ( kfg, buf, server, sizeof(server) );
+                            if (rc == 0)
+                            {
+                                rc = string_printf(buf, BufSize, &num_writ, KFG_PATH "%s/volumes", name);
+                                if (rc == 0)
+                                {
+                                    char volumes[ BufSize ];
+                                    rc = RefSeqMgr_ConfigValue ( kfg, buf, volumes, sizeof(volumes) );
+                                    if (rc == 0)
+                                    {   /* create a server/volume pair for every combination, append to paths, ':' - separate */ 
+                                        char *vol_rem = volumes;
+                                        char *vol_sep;
+                                        
+                                        do {
+                                            char const *volume = vol_rem;
+                                            vol_sep = string_chr(volume, string_size(volume), ':');
+                                            if(vol_sep) {
+                                                vol_rem = vol_sep + 1;
+                                                *vol_sep = 0;
+                                            }
+                                            string_copy(paths + string_size(paths), paths_sz - string_size(paths), server, string_size(server));
+                                            if (paths[string_size(paths)-1] != '/')
+                                            {
+                                                string_copy(paths + string_size(paths), paths_sz - string_size(paths), "/", 1);
+                                            }
+                                            string_copy(paths + string_size(paths), paths_sz - string_size(paths), volume, string_size(volume));
+                                            string_copy(paths + string_size(paths), paths_sz - string_size(paths), ":", 1);
+                                        } while(vol_sep);
+                                    }
+                                }
+                            }
+                        }
+#undef BufSize
+                    }
+                    if ( rc != 0 )
+                    {
+                        break;
+                    }
+                }
+            }
+            KNamelistRelease ( children );
+        }
+        
+        KConfigNodeRelease ( node );
+    }
+    if (GetRCState(rc) == rcNotFound)
+    {
+        paths[0] = '\0';
+        return 0;
+    }
+    return 0;
+}
 
+static
+rc_t RefSeqMgr_KfgReadStr(const KConfig* kfg, const char* path, char* value, size_t value_sz)
+{
+    rc_t rc = 0;
+    const KConfigNode *node;
+    
     if ( (rc = KConfigOpenNodeRead(kfg, &node, path)) == 0 ) {
         size_t num_read, remaining;
         if( (rc = KConfigNodeRead(node, 0, value, value_sz - 1, &num_read, &remaining)) == 0 ) {
@@ -94,95 +241,91 @@ rc_t RefSeqMgr_ForEachVolume(const RefSeqMgr* cself, RefSeqMgr_ForEachVolume_cal
     
     if( cself == NULL || cb == NULL ) {
         rc = RC(rcAlign, rcType, rcConstructing, rcParam, rcNull);
-    } else if( (rc = RefSeqMgr_KfgReadStr(cself->kfg, "refseq/servers", servers, sizeof(servers))) != 0 ||
-               (rc = RefSeqMgr_KfgReadStr(cself->kfg, "refseq/volumes", volumes, sizeof(volumes))) != 0 ) {
-        ALIGN_DBGERRP("%s", rc, "RefSeqMgr_KfgReadStr(servers/volumes)");
+    } else if( cb(".", NULL, data) ) {
+        /* found in local dir */
+    } else if( (rc = RefSeqMgr_KfgReadStr(cself->kfg, "refseq/paths", servers, sizeof(servers))) != 0 ) {
+        ALIGN_DBGERRP("%s", rc, "RefSeqMgr_KfgReadStr(paths)");
     } else {
         bool found = false;
-        char *srv_sep;
-        char *srv_rem = servers;
-
-        /* servers and volumes are depricated and optional */
-        if( servers[0] != '\0' || volumes[0] != '\0' ) {
+        if( servers[0] != '\0' ) {
+            char *srv_sep;
+            char *srv_rem = servers;
             do {
-                char vol[4096];
-                char const *server = srv_rem;
-                char *vol_rem = vol;
-                char *vol_sep;
+                char const* server = srv_rem;
                 
-                strcpy(vol, volumes);
                 srv_sep = strchr(server, ':');
                 if(srv_sep) {
                     srv_rem = srv_sep + 1;
                     *srv_sep = 0;
                 }
-                do {
-                    char const *volume = vol_rem;
-                    
-                    vol_sep = strchr(volume, ':');
-                    if(vol_sep) {
-                        vol_rem = vol_sep + 1;
-                        *vol_sep = 0;
-                    }
-                    found = cb(server, volume, data);
-                } while(!found && vol_sep);
-            } while(!found && srv_sep);
+                if( cb(server, NULL, data) ) {
+                    found = true;
+                    break;
+                }
+            } while(srv_sep);
         }
         if( !found ) {
-            if( (rc = RefSeqMgr_KfgReadStr(cself->kfg, "refseq/paths", servers, sizeof(servers))) != 0 ) {
-                ALIGN_DBGERRP("%s", rc, "RefSeqMgr_KfgReadStr(paths)");
-            } else {
+            /* locate refseq servers/volumes in possibly multiple repositories */
+            if( (rc = RefSeqMgr_KfgReadRepositories(cself->kfg, servers, sizeof(servers))) != 0 ) {
+                ALIGN_DBGERRP("%s", rc, "RefSeqMgr_KfgReadStr(refseq/repository/*)");
+            };
+            if( servers[0] != '\0' ) {
                 char *srv_sep;
                 char *srv_rem = servers;
-
-                if( servers[0] == '\0' ) {
-                    /* local local dir */
-                    memcpy(servers, ".", 2);
-                }
                 do {
                     char const* server = srv_rem;
-
+                    
                     srv_sep = strchr(server, ':');
                     if(srv_sep) {
                         srv_rem = srv_sep + 1;
                         *srv_sep = 0;
                     }
                     if( cb(server, NULL, data) ) {
+                        found = true;
                         break;
                     }
                 } while(srv_sep);
             }
         }
+        if( !found ) {
+            if ( (rc = RefSeqMgr_KfgReadStr(cself->kfg, "refseq/servers", servers, sizeof(servers))) != 0 ||
+                (rc = RefSeqMgr_KfgReadStr(cself->kfg, "refseq/volumes", volumes, sizeof(volumes))) != 0 ) {
+                ALIGN_DBGERRP("%s", rc, "RefSeqMgr_KfgReadStr(servers/volumes)");
+            } 
+            /* servers and volumes are deprecated and optional */
+            if( rc == 0 && (servers[0] != '\0' || volumes[0] != '\0') ) {
+                char *srv_sep;
+                char *srv_rem = servers;
+                do {
+                    char vol[ 4096 ];
+                    char const *server = srv_rem;
+                    char *vol_rem = vol;
+                    char *vol_sep;
+                    
+                    string_copy ( vol, sizeof vol, volumes, string_size( volumes ) );
+                    srv_sep = strchr(server, ':');
+                    if(srv_sep) {
+                        srv_rem = srv_sep + 1;
+                        *srv_sep = 0;
+                    }
+                    do {
+                        char const *volume = vol_rem;
+                        
+                        vol_sep = strchr(volume, ':');
+                        if(vol_sep) {
+                            vol_rem = vol_sep + 1;
+                            *vol_sep = 0;
+                        }
+                        found = cb(server, volume, data);
+                    } while(!found && vol_sep);
+                } while(!found && srv_sep);
+            }
+        }
     }
     return rc;
 }
 
-struct RefSeq {
-    BSTNode dad;
-    const RefSeqMgr* mgr;
-    const TableReaderRefSeq* reader;
-    uint64_t usage;
-    uint32_t accession_sz;
-    /* must be last member of struct */
-    char accession[1];
-};
-
-typedef struct RefSeqMgr_Db_struct {
-    BSTNode dad;
-    char key[4096];
-    const VDatabase* db;
-} RefSeqMgr_Db;
-
-struct FindTable_ctx {
-    RefSeqMgr* self;
-    const KDBManager* kmgr;
-    const VTable** tbl;
-    char const* name;
-    uint32_t name_sz;
-    bool found;
-    rc_t rc;
-};
-
+#if USE_OWN_REFSEQ_RESOLVER
 static
 int CC RefSeqMgr_DbSort(const BSTNode* item, const BSTNode* node)
 {
@@ -198,29 +341,31 @@ int CC RefSeqMgr_FindDb(const void *item, const BSTNode *node)
 static
 bool FindTable(char const server[], char const volume[], void *data)
 {
+    const VTable* tbl = NULL;
     struct FindTable_ctx *ctx = data;
-    int pathType;
     const char* vol_sep = "/";
     
-    if( volume == NULL ) {
+    if( volume == NULL || string_size(volume) == 0) {
         volume = "";
         vol_sep = "";
     }
-    ALIGN_DBG("try table '%s%s%s/%.*s'", server, vol_sep, volume, ctx->name_sz, ctx->name);
-    pathType = KDBManagerPathType(ctx->kmgr, "%s%s%s/%.*s", server, vol_sep, volume, ctx->name_sz, ctx->name);
-    pathType &= ~kptAlias;
-
-    if( pathType == kptTable ) {
-        ALIGN_DBG("found table '%s%s%s/%.*s'", server, vol_sep, volume, ctx->name_sz, ctx->name);
-        ctx->found = true;
-        if (ctx->tbl) {
-            ctx->rc = VDBManagerOpenTableRead(ctx->self->vmgr, ctx->tbl, NULL, "%s%s%s/%.*s", server, vol_sep, volume, ctx->name_sz, ctx->name);
-        }
-    } else if( pathType == kptNotFound ) {
+    ctx->rc = VDBManagerOpenTableRead(ctx->self->vmgr, &tbl, NULL, "%s%s%s/%.*s", server, vol_sep, volume, ctx->name_sz, ctx->name);
+    ALIGN_DBG("trying '%s%s%s/%.*s'...", server, vol_sep, volume, ctx->name_sz, ctx->name);
+    
+    ctx->found = false;
+    
+    if(ctx->rc == 0){
+        ALIGN_DBG("found\n", "");
+	    ctx->found = true;
+    }
+    else if (GetRCState(ctx->rc) == rcNotFound) {
+        ctx->rc = 0;
+        ALIGN_DBG("not found\n", "");
+        
         /* can be kar */
         if( ctx->name_sz > 7 ) {
             uint32_t i = 0;
-
+            
             /* check for pattern '\w{4}\d{2}[\.\d]+' */
             while( isalpha(ctx->name[i]) && i < 4 ) {
                 i++;
@@ -235,21 +380,21 @@ bool FindTable(char const server[], char const volume[], void *data)
             if( i == ctx->name_sz ) {
                 char key[4096];
                 size_t n;
-
+                
                 if( string_printf(key, sizeof(key), &n, "%s%s%s/%.*s", server, vol_sep, volume, 6, ctx->name) != 0 ) {
-                    LOGMSG(klogWarn, "kar-vdb lookup buffer");
+                    (void)LOGMSG(klogWarn, "kar-vdb lookup buffer");
                 } else {
-                    RefSeqMgr_Db* db = NULL;
-                    ALIGN_DBG("retry as '%s/%.*s'", key, ctx->name_sz, ctx->name);
-                    db = (RefSeqMgr_Db*)BSTreeFind(&ctx->self->vdbs, key, RefSeqMgr_FindDb);
+                    RefSeqMgr_Db *db = (RefSeqMgr_Db*)BSTreeFind(&ctx->self->vdbs, key, RefSeqMgr_FindDb);
+                    
+                    ALIGN_DBG("trying database '%s%s%s/%.*s'...", server, vol_sep, volume, 6, ctx->name);
                     if( db == NULL ) {
                         const VDatabase* vdb = NULL;
-                        if( VDBManagerOpenDBRead(ctx->self->vmgr, &vdb, NULL, key) == 0 ) {
+                        if( (ctx->rc = VDBManagerOpenDBRead(ctx->self->vmgr, &vdb, NULL, key)) == 0 ) {
                             db = malloc(sizeof(*db));
                             if( db == NULL ) {
                                 ctx->rc = RC(rcAlign, rcDatabase, rcOpening, rcMemory, rcExhausted);
                             } else {
-                                strcpy(db->key, key);
+                                string_copy( db->key, sizeof db->key, key, string_size( key ) );
                                 db->db = vdb;
                                 ctx->rc = BSTreeInsertUnique(&ctx->self->vdbs, &db->dad, NULL, RefSeqMgr_DbSort);
                             }
@@ -261,26 +406,42 @@ bool FindTable(char const server[], char const volume[], void *data)
                         }
                     }
                     if( db != NULL ) {
-                        const VTable* tbl = NULL;
-
-                        if( VDatabaseOpenTableRead(db->db, &tbl, "%.*s", ctx->name_sz, ctx->name) == 0 ) {
+                        ALIGN_DBG(" table '%.*s'", ctx->name_sz, ctx->name);
+                        if( (ctx->rc = VDatabaseOpenTableRead(db->db, &tbl, "%.*s", ctx->name_sz, ctx->name)) == 0 ) {
                             ctx->found = true;
-                            if(ctx->tbl) {
-                                *(ctx->tbl) = tbl;
-                            } else {
-                                VTableRelease(tbl);
-                            }
+                            ALIGN_DBG("found\n", "");
                         }
+                        else
+                            ALIGN_DBG("not found\n", "");
                     }
+                    else
+                        ALIGN_DBG("not found\n", "");
                 }
             }
         }
     }
+    if( ctx->found){
+        if(ctx->tbl)  *(ctx->tbl) = tbl;
+        else VTableRelease(tbl);
+    }
+    if( ctx->found && ctx->path != NULL ) {
+        size_t path_sz = string_size( server ) + string_size( vol_sep ) + string_size( volume ) + 1 + ctx->name_sz + 1;
+        char* path = malloc(path_sz);
+        if( path == NULL ) {
+            ctx->rc = RC(rcAlign, rcPath, rcConstructing, rcMemory, rcExhausted);
+        } else {
+            if( (ctx->rc = string_printf(path, path_sz, &path_sz, "%s%s%s/%.*s", server, vol_sep, volume, ctx->name_sz, ctx->name)) == 0 ) {
+                *(ctx->path) = path;
+            } else {
+                free(path);
+            }
+        }
+    }
     return ctx->found;
 }
 
 static
-rc_t RefSeqMgr_FindTable(const RefSeqMgr* cself, char const accession[], uint32_t accession_sz, VTable const **tbl)
+rc_t RefSeqMgr_FindTable(const RefSeqMgr* cself, char const accession[], uint32_t accession_sz, VTable const **tbl, char** path)
 {
     rc_t rc;
     struct FindTable_ctx ctx;
@@ -294,6 +455,7 @@ rc_t RefSeqMgr_FindTable(const RefSeqMgr* cself, char const accession[], uint32_
         ctx.found = false;
         ctx.tbl = tbl;
         ctx.rc = 0;
+        ctx.path = path;
         
         rc = RefSeqMgr_ForEachVolume(cself, FindTable, &ctx);
         if(rc == 0 && ctx.rc == 0 && !ctx.found) {
@@ -303,31 +465,64 @@ rc_t RefSeqMgr_FindTable(const RefSeqMgr* cself, char const accession[], uint32_
     }
     return rc ? rc : ctx.rc;
 }
+#endif
 
-LIB_EXPORT rc_t CC RefSeqMgr_Make(const RefSeqMgr** cself, const VDBManager* vmgr, uint32_t reader_options, size_t cache, uint32_t keep_open_num)
+LIB_EXPORT rc_t CC RefSeqMgr_SetCache(RefSeqMgr const *const cself, size_t cache, uint32_t keep_open_num)
+{
+    if (cself) {
+        RefSeqMgr *const self = (RefSeqMgr *)cself;
+        
+        self->cache = cache;
+        self->num_open_max = keep_open_num;
+    }
+    return 0;
+}
+
+LIB_EXPORT rc_t CC RefSeqMgr_Make( const RefSeqMgr** cself, const VDBManager* vmgr,
+                                   uint32_t reader_options, size_t cache, uint32_t keep_open_num )
 {
     rc_t rc = 0;
     RefSeqMgr* obj = NULL;
     
-    if( cself == NULL || vmgr == NULL ) {
-        rc = RC(rcAlign, rcIndex, rcConstructing, rcParam, rcNull);
-    } else if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
-        rc = RC(rcAlign, rcIndex, rcConstructing, rcMemory, rcExhausted);
-    } else if( (rc = KConfigMake(&obj->kfg, NULL)) == 0 &&
-               (rc = VDBManagerAddRef(vmgr)) == 0 ) {
-        BSTreeInit(&obj->tree);
-        BSTreeInit(&obj->vdbs);
-        obj->vmgr = vmgr;
-        obj->cache = cache;
-        obj->num_open_max = keep_open_num;
-        obj->reader_options = reader_options;
+    if ( cself == NULL || vmgr == NULL )
+    {
+        rc = RC( rcAlign, rcIndex, rcConstructing, rcParam, rcNull );
     }
-    if( rc == 0 ) {
+    else
+    {
+        obj = calloc( 1, sizeof( *obj ) );
+        if ( obj == NULL )
+        {
+            rc = RC( rcAlign, rcIndex, rcConstructing, rcMemory, rcExhausted );
+        }
+        else
+        {
+            rc = KConfigMake( &obj->kfg, NULL );
+            if ( rc == 0 )
+            {
+                rc = VDBManagerAddRef( vmgr );
+                if ( rc == 0 )
+                {
+                    BSTreeInit( &obj->tree );
+                    BSTreeInit( &obj->vdbs );
+                    obj->vmgr = vmgr;
+                    obj->cache = cache;
+                    obj->num_open_max = keep_open_num;
+                    obj->reader_options = reader_options;
+                }
+            }
+        }
+    }
+
+    if ( rc == 0 )
+    {
         *cself = obj;
-        ALIGN_DBG("max_open: %u", obj->num_open_max);
-    } else {
-        RefSeqMgr_Release(obj);
-        ALIGN_DBGERR(rc);
+/*        ALIGN_DBG( "max_open: %u", obj->num_open_max ); */
+    }
+    else
+    {
+        RefSeqMgr_Release( obj );
+        ALIGN_DBGERR( rc );
     }
     return rc;
 }
@@ -361,14 +556,28 @@ LIB_EXPORT rc_t CC RefSeqMgr_Release(const RefSeqMgr* cself)
     return 0;
 }
 
-LIB_EXPORT rc_t RefSeqMgr_Exists(const RefSeqMgr* cself, const char* accession, uint32_t accession_sz)
+LIB_EXPORT rc_t RefSeqMgr_Exists(const RefSeqMgr* cself, const char* accession, uint32_t accession_sz, char** path)
 {
     rc_t rc = 0;
 
     if( cself == NULL || accession == NULL || accession_sz == 0 ) {
         rc = RC(rcAlign, rcIndex, rcAccessing, rcParam, rcNull);
-    } else {
-        rc = RefSeqMgr_FindTable(cself, accession, accession_sz, NULL);
+    }
+    else {
+#if USE_OWN_REFSEQ_RESOLVER
+        rc = RefSeqMgr_FindTable(cself, accession, accession_sz, NULL, path);
+#else
+        VTable const *tbl = NULL;
+
+        /* if "accession" is not a path,
+           prepend special scheme to tell VResolver
+           to treat WGS accessions as Refseq */
+        if ( string_chr ( accession, accession_sz, '/' ) == NULL )
+            rc = VDBManagerOpenTableRead(cself->vmgr, &tbl, NULL, "ncbi-acc:%.*s?vdb-ctx=refseq", accession_sz, accession);
+        else
+            rc = VDBManagerOpenTableRead(cself->vmgr, &tbl, NULL, "%.*s", accession_sz, accession);
+        VTableRelease(tbl);
+#endif
     }
     return rc;
 }
@@ -397,22 +606,9 @@ int CC RefSeq_Sort(const BSTNode* item, const BSTNode* node)
     return i->accession_sz - n->accession_sz;
 }
 
-static
-void CC RefSeq_Unused( BSTNode *node, void *data )
-{
-    RefSeq* n = (RefSeq*)node;
-    RefSeq** d = (RefSeq**)data;
-
-    if( n->reader != NULL ) {
-        if( *d == NULL || (*d)->usage > n->usage ) {
-            *d = n;
-        }
-    }
-}
-
 LIB_EXPORT rc_t CC RefSeqMgr_Read(const RefSeqMgr* cself, const char* seq_id, uint32_t seq_id_sz,
-                                  int64_t offset, INSDC_coord_len len,
-                                  INSDC_dna_text* buffer, INSDC_coord_len* written)
+                                  INSDC_coord_zero offset, INSDC_coord_len len,
+                                  uint8_t* buffer, INSDC_coord_len* written)
 {
     rc_t rc = 0;
     const RefSeq* obj;
@@ -424,78 +620,144 @@ LIB_EXPORT rc_t CC RefSeqMgr_Read(const RefSeqMgr* cself, const char* seq_id, ui
     return rc;
 }
 
-LIB_EXPORT rc_t CC RefSeqMgr_GetSeq(const RefSeqMgr* cmgr, const RefSeq** cself, const char* seq_id, uint32_t seq_id_sz)
+static
+void CC RefSeq_Oldest( BSTNode *node, void *Data )
 {
-    rc_t rc = 0;
-    RefSeq* obj = NULL;
-    RefSeqMgr* mgr = (RefSeqMgr*)cmgr;
+    RefSeq const *const n = (RefSeq const *)node;
+    RefSeq const **const rslt = (RefSeq const **)Data;
+    RefSeq const *const d = *rslt;
+    
+    if (n->reader != NULL && (d == NULL || n->usage < d->usage))
+        *rslt = n;
+}
 
-    if( cmgr == NULL || cself == NULL || seq_id == NULL ) {
-        rc = RC(rcAlign, rcIndex, rcConstructing, rcParam, rcNull);
-    } else {
-        String s;
-        StringInit(&s, seq_id, seq_id_sz, seq_id_sz);
-        if( cmgr->last_used != NULL && RefSeq_Cmp(&s, &cmgr->last_used->dad) == 0 ) {
-            obj = cmgr->last_used;
-        } else {
-            *cself = NULL;
-            obj = (RefSeq*)BSTreeFind(&cmgr->tree, &s, RefSeq_Cmp);
-            if( obj == NULL ) {
-                if( (obj = calloc(1,  sizeof(*obj) + seq_id_sz)) == NULL ) {
-                    rc = RC(rcAlign, rcIndex, rcConstructing, rcMemory, rcExhausted);
-                } else {
-                    memcpy(obj->accession, seq_id, seq_id_sz);
-                    obj->accession_sz = seq_id_sz;
-                    obj->mgr = cmgr;
-                    if( (rc = BSTreeInsertUnique(&mgr->tree, &obj->dad, NULL, RefSeq_Sort)) != 0 ) {
-                        free(obj);
-                    }
-                }
-            }
+static
+rc_t RefSeqMgr_GetReader(RefSeqMgr *const mgr, RefSeq *const obj)
+{
+    rc_t rc = 0;
+    
+    if (obj->reader == NULL) {
+        VTable const *tbl;
+        
+        while (mgr->num_open_max > 0 && mgr->num_open >= mgr->num_open_max) {
+            RefSeq *old;
+            
+        REMOVE_OLDEST:
+            old = NULL;
+            BSTreeForEach(&mgr->tree, false, RefSeq_Oldest, &old);
+            if (old == NULL)
+                break;
+            
+            TableReaderRefSeq_Whack(old->reader);
+            old->reader = NULL;
+            --mgr->num_open;
         }
+#if USE_OWN_REFSEQ_RESOLVER
+        rc = RefSeqMgr_FindTable(mgr, obj->accession, obj->accession_sz, &tbl, NULL);
+#else
+        /* if "accession" is not a path,
+           prepend special scheme to tell VResolver
+           to treat WGS accessions as Refseq */
+        if ( string_chr ( obj -> accession, obj -> accession_sz, '/' ) == NULL )
+            rc = VDBManagerOpenTableRead(mgr->vmgr, &tbl, NULL, "ncbi-acc:%.*s?vdb-ctx=refseq", obj->accession_sz, obj->accession);
+        else
+            rc = VDBManagerOpenTableRead(mgr->vmgr, &tbl, NULL, "%.*s", obj->accession_sz, obj->accession);
+#endif
+        if (rc == 0)
+            rc = TableReaderRefSeq_MakeTable(&obj->reader, mgr->vmgr, tbl,
+                                             mgr->reader_options, mgr->cache);
+        if (rc == 0) {
+            VTableRelease(tbl);
+            ++mgr->num_open;
+        }
+        else if ( GetRCObject(rc) == rcMemory &&
+                 (GetRCState (rc) == rcInsufficient || GetRCState(rc) == rcExhausted))
+        {
+            if (mgr->num_open_max == 0 || mgr->num_open < mgr->num_open_max)
+                return rc;
+            rc = 0;
+            goto REMOVE_OLDEST;
+        }
+        else
+            return rc;
     }
-    if( rc == 0 ) {
-        if( obj->reader == NULL ) {
-            const VTable* tbl;
-
-            if( cmgr->num_open_max > 0 && cmgr->num_open >= cmgr->num_open_max ) {
-                RefSeq* old = NULL;
-                BSTreeForEach(&cmgr->tree, false, RefSeq_Unused, &old);
-                if( old != NULL ) {
-                    TableReaderRefSeq_Whack(old->reader);
-                    old->reader = NULL;
-                    mgr->num_open--;
-                }
-            }
-            if( (rc = RefSeqMgr_FindTable(cmgr, obj->accession, obj->accession_sz, &tbl)) == 0 ) {
-                if( (rc = TableReaderRefSeq_MakeTable(&obj->reader, cmgr->vmgr, tbl,
-                                                      cmgr->reader_options, cmgr->cache)) == 0 ) {
-                    mgr->num_open++;
+    mgr->last_used = obj;
+    return rc;
+}
+
+static
+rc_t RefSeqMgr_GetSeqInternal(RefSeqMgr *const mgr, RefSeq const **const cself,
+                              char const seq_id[], unsigned const seq_id_sz)
+{
+    
+    rc_t rc;
+    RefSeq *obj;
+    String s;
+    
+    StringInit(&s, seq_id, seq_id_sz, seq_id_sz);
+    
+    *cself = NULL;
+    if (mgr->last_used != NULL && RefSeq_Cmp(&s, &mgr->last_used->dad) == 0)
+        obj = mgr->last_used;
+    else {
+        obj = (RefSeq*)BSTreeFind(&mgr->tree, &s, RefSeq_Cmp);
+        if (obj == NULL) {
+            obj = calloc(1, sizeof(*obj) + seq_id_sz);
+            if (obj) {
+                memcpy(obj->accession, seq_id, seq_id_sz);
+                obj->accession_sz = seq_id_sz;
+                obj->mgr = mgr;
+                rc = BSTreeInsertUnique(&mgr->tree, &obj->dad, NULL, RefSeq_Sort);
+                if (rc) {
+                    free(obj);
+                    return rc;
                 }
-                VTableRelease(tbl);
             }
-        }
-        if( rc == 0 ) {
-            mgr->last_used = obj;
+            else
+                return RC(rcAlign, rcIndex, rcConstructing, rcMemory, rcExhausted);
         }
     }
-    if( rc == 0 ) {
-        *cself = obj;
-    } else {
+    rc = RefSeqMgr_GetReader(mgr, obj);
+    *cself = obj;
+    
+    return rc;
+}
+
+LIB_EXPORT rc_t CC RefSeqMgr_GetSeq(const RefSeqMgr* cmgr, const RefSeq** cself, const char* seq_id, uint32_t seq_id_sz)
+{
+    rc_t rc;
+
+    if (cmgr == NULL || cself == NULL || seq_id == NULL)
+        rc = RC(rcAlign, rcIndex, rcConstructing, rcParam, rcNull);
+    else
+        rc = RefSeqMgr_GetSeqInternal((RefSeqMgr *)cmgr, cself, seq_id, seq_id_sz);
+
+    if (rc)
         ALIGN_DBGERRP("SEQ_ID: '%.*s'", rc, seq_id_sz, seq_id);
-    }
+
     return rc;
 }
 
-LIB_EXPORT rc_t CC RefSeq_Read(const RefSeq* cself, int64_t offset, INSDC_coord_len len,
-                               INSDC_dna_text* buffer, INSDC_coord_len* written)
+LIB_EXPORT rc_t CC RefSeq_Read(const RefSeq* cself, INSDC_coord_zero offset, INSDC_coord_len len,
+                               uint8_t* buffer, INSDC_coord_len* written)
 {
     rc_t rc = 0;
 
     if( cself == NULL || buffer == NULL || written == NULL ) {
         rc = RC(rcAlign, rcFile, rcReading, rcParam, rcNull);
-    } else if( (rc = TableReaderRefSeq_Read(cself->reader, offset, len, buffer, written)) == 0 ) {
-        ((RefSeq*)cself)->usage = ++((RefSeqMgr*)cself->mgr)->usage;
+    }
+    else {
+        RefSeq *const self = (RefSeq *)cself;
+        RefSeqMgr *const mgr = (RefSeqMgr *)self->mgr;
+        
+        rc = RefSeqMgr_GetReader(mgr, self);
+        if (rc == 0) {
+            TableReaderRefSeq const *const reader = self->reader;
+            
+            rc = TableReaderRefSeq_Read(reader, offset, len, buffer, written);
+            if (rc == 0)
+                self->usage = ++mgr->usage;
+        }
     }
     ALIGN_DBGERR(rc);
     return rc;
@@ -514,7 +776,7 @@ LIB_EXPORT rc_t CC RefSeq_Circular(const RefSeq* cself, bool* circular)
     return rc;
 }
 
-LIB_EXPORT rc_t CC RefSeq_SeqLength(const RefSeq* cself, uint64_t* len)
+LIB_EXPORT rc_t CC RefSeq_SeqLength(const RefSeq* cself, INSDC_coord_len* len)
 {
     rc_t rc = 0;
 
diff --git a/libs/align/writer-alignment.c b/libs/align/writer-alignment.c
index 7605f60..63b54f7 100644
--- a/libs/align/writer-alignment.c
+++ b/libs/align/writer-alignment.c
@@ -28,6 +28,7 @@
 #include <klib/rc.h>
 #include <insdc/insdc.h>
 #include <vdb/database.h>
+#include <vdb/cursor.h>
 #include <align/writer-alignment.h>
 #include "writer-priv.h"
 #include "reader-cmn.h"
@@ -44,38 +45,41 @@
 static const TableWriterColumn TableWriterAlgn_cols[ewalgn_cn_Last + 1] =
 {
     /* order is important, see enum in .h !!! */
-    {0, "TMP_KEY_ID", sizeof(uint32_t) * 8, ewcol_Temporary | ewcol_Ignore},
+    {0, "TMP_KEY_ID", sizeof(uint64_t) * 8, ewcol_Temporary | ewcol_Ignore},
     {0, "PLOIDY", sizeof(uint32_t) * 8, ewcol_Ignore},
     {0, "SEQ_SPOT_ID", sizeof(int64_t) * 8, ewcol_IsArray | ewcol_Ignore},
     {0, "SEQ_READ_ID", sizeof(INSDC_coord_one) * 8, ewcol_IsArray },
     {0, "READ_START", sizeof(INSDC_coord_zero) * 8, ewcol_IsArray | ewcol_Ignore},
     {0, "READ_LEN", sizeof(INSDC_coord_len) * 8, ewcol_IsArray | ewcol_Ignore},
-    {0, "REF_ID", sizeof(int64_t) * 8, ewcol_IsArray | ewcol_Ignore},
-    {0, "REF_START", sizeof(INSDC_coord_zero) * 8, ewcol_IsArray | ewcol_Ignore},
-    {0, "GLOBAL_REF_START", sizeof(uint64_t) * 8, ewcol_IsArray},
-    {0, "REF_LEN", sizeof(INSDC_coord_len) * 8, ewcol_IsArray | ewcol_Ignore},
-    {0, "REF_ORIENTATION", sizeof(bool) * 8, ewcol_IsArray},
+    {0, "REF_ID", sizeof(int64_t) * 8, ewcol_Ignore},
+    {0, "REF_START", sizeof(INSDC_coord_zero) * 8, ewcol_Ignore},
+    {0, "GLOBAL_REF_START", sizeof(uint64_t) * 8, 0},
+    {0, "REF_LEN", sizeof(INSDC_coord_len) * 8, 0},
+    {0, "REF_ORIENTATION", sizeof(bool) * 8, 0},
     {0, "REF_PLOIDY", sizeof(uint32_t) * 8, ewcol_IsArray | ewcol_Ignore},
     {0, "MATE_REF_ORIENTATION", sizeof(bool) * 8, ewcol_Ignore},
     {0, "MATE_REF_ID", sizeof(int64_t) * 8, ewcol_Ignore},
     {0, "MATE_REF_POS", sizeof(INSDC_coord_zero) * 8, ewcol_Ignore},
     {0, "MATE_ALIGN_ID", sizeof(int64_t) * 8, ewcol_Ignore},
     {0, "TEMPLATE_LEN", sizeof(INSDC_coord_zero) * 8, ewcol_Ignore},
-    {0, "MAPQ", sizeof(int32_t) * 8, ewcol_IsArray},
+    {0, "MAPQ", sizeof(int32_t) * 8, 0},
     {0, "HAS_MISMATCH", sizeof(bool) * 8, ewcol_IsArray},
     {0, "(bool)HAS_REF_OFFSET", sizeof(bool) * 8, ewcol_IsArray},
     {0, "MISMATCH", sizeof(INSDC_dna_text) * 8, ewcol_IsArray},
-    {0, "REF_OFFSET", sizeof(int32_t) * 8, ewcol_IsArray}
+    {0, "REF_OFFSET", sizeof(int32_t) * 8, ewcol_IsArray},
+    {0, "EVIDENCE_ALIGNMENT_IDS", sizeof(int64_t) * 8, ewcol_IsArray | ewcol_Ignore},
+    {0, "ALIGN_GROUP", sizeof(char) * 8, ewcol_IsArray | ewcol_Ignore }
 };
 
 static const TableReaderColumn TableAlgnReadTmpKey_cols[] = {
-    {0, "TMP_KEY_ID", NULL, 0, 0},
-    {0, NULL, NULL, 0, 0}
+    {0, "TMP_KEY_ID", {NULL}, 0, 0},
+    {0, NULL, {NULL}, 0, 0}
 };
 
 struct TableWriterAlgn {
     uint32_t options;
     const TableWriter* base;
+    const char* ref_table_name;
     uint8_t cursor_id;
     TableWriterColumn cols[sizeof(TableWriterAlgn_cols)/sizeof(TableWriterAlgn_cols[0])];
     uint8_t spotid_cursor_id;
@@ -98,17 +102,22 @@ LIB_EXPORT rc_t CC TableWriterAlgn_Make(const TableWriterAlgn** cself, VDatabase
         if( self == NULL ) {
             rc = RC(rcAlign, rcFormatter, rcConstructing, rcMemory, rcExhausted);
         } else {
+            self->ref_table_name = "REFERENCE";
             memcpy(self->cols, TableWriterAlgn_cols, sizeof(TableWriterAlgn_cols));
             switch(type) {
             case ewalgn_tabletype_PrimaryAlignment:
                 tbl_nm = "PRIMARY_ALIGNMENT";
+                self->cols[ewalgn_cn_ALIGN_GROUP].flags &= ~ewcol_Ignore;
                 break;
             case ewalgn_tabletype_SecondaryAlignment:
                 tbl_nm = "SECONDARY_ALIGNMENT";
-                self->cols[ewalgn_cn_REF_LEN].flags &= ~ewcol_Ignore;
+#if 0
                 self->cols[ewalgn_cn_HAS_MISMATCH].flags |= ewcol_Ignore;
                 self->cols[ewalgn_cn_MISMATCH].flags |= ewcol_Ignore;
-
+#else
+                self->cols[ewalgn_cn_MISMATCH].name = "TMP_MISMATCH";
+                self->cols[ewalgn_cn_HAS_MISMATCH].name = "TMP_HAS_MISMATCH";
+#endif
                 self->cols[ewalgn_cn_MATE_REF_ORIENTATION].flags &= ~ewcol_Ignore;
                 self->cols[ewalgn_cn_MATE_REF_ID].flags &= ~ewcol_Ignore;
                 self->cols[ewalgn_cn_MATE_REF_POS].flags &= ~ewcol_Ignore;
@@ -119,14 +128,21 @@ LIB_EXPORT rc_t CC TableWriterAlgn_Make(const TableWriterAlgn** cself, VDatabase
                 tbl_nm = "EVIDENCE_INTERVAL";
                 options |= ewalgn_co_unsorted;
                 options |= ewalgn_co_PLOIDY;
+                self->cols[ewalgn_cn_SEQ_SPOT_ID].flags |= ewcol_Ignore;
                 self->cols[ewalgn_cn_SEQ_READ_ID].flags |= ewcol_Ignore;
+                self->cols[ewalgn_cn_EVIDENCE_ALIGNMENT_IDS].flags &= ~ewcol_Ignore;
                 break;
             case ewalgn_tabletype_EvidenceAlignment:
                 tbl_nm = "EVIDENCE_ALIGNMENT";
-                self->cols[ewalgn_cn_REF_LEN].flags &= ~ewcol_Ignore;
+                self->ref_table_name = "EVIDENCE_INTERVAL";
                 self->cols[ewalgn_cn_REF_PLOIDY].flags &= ~ewcol_Ignore;
+#if 0
                 self->cols[ewalgn_cn_HAS_MISMATCH].flags |= ewcol_Ignore;
                 self->cols[ewalgn_cn_MISMATCH].flags |= ewcol_Ignore;
+#else
+		self->cols[ewalgn_cn_MISMATCH].name = "TMP_MISMATCH";
+                self->cols[ewalgn_cn_HAS_MISMATCH].name = "TMP_HAS_MISMATCH";
+#endif
                 options |= ewalgn_co_unsorted;
                 break;
             default:
@@ -147,8 +163,20 @@ LIB_EXPORT rc_t CC TableWriterAlgn_Make(const TableWriterAlgn** cself, VDatabase
                 self->cols[ewalgn_cn_REF_ID].flags &= ~ewcol_Ignore;
                 self->cols[ewalgn_cn_REF_START].flags &= ~ewcol_Ignore;
                 self->cols[ewalgn_cn_GLOBAL_REF_START].flags |= ewcol_Ignore;
+                if( type == ewalgn_tabletype_SecondaryAlignment ) {
+                    self->cols[ewalgn_cn_MISMATCH].name = "TMP_MISMATCH";
+                    self->cols[ewalgn_cn_MISMATCH].flags &= ~ewcol_Ignore;
+                    self->cols[ewalgn_cn_HAS_MISMATCH].name = "TMP_HAS_MISMATCH";
+                    self->cols[ewalgn_cn_HAS_MISMATCH].flags &= ~ewcol_Ignore;
+                }
+            }
+            if( options & ewalgn_co_MATE_ALIGN_ID_only ) {
+                self->cols[ewalgn_cn_MATE_REF_ORIENTATION].flags |= ewcol_Ignore;
+                self->cols[ewalgn_cn_MATE_REF_ID].flags |= ewcol_Ignore;
+                self->cols[ewalgn_cn_MATE_REF_POS].flags |= ewcol_Ignore;
+                self->cols[ewalgn_cn_TEMPLATE_LEN].flags |= ewcol_Ignore;
             }
-            if( (rc = TableWriter_Make(&self->base, db, tbl_nm)) == 0 ) {
+            if( (rc = TableWriter_Make(&self->base, db, tbl_nm, NULL)) == 0 ) {
                 rc = TableWriter_AddCursor(self->base, self->cols, sizeof(self->cols)/sizeof(self->cols[0]), &self->cursor_id);
                 self->options = options;
             }
@@ -168,7 +196,20 @@ LIB_EXPORT rc_t CC TableWriterAlgn_Whack(const TableWriterAlgn* cself, bool comm
 {
     rc_t rc = 0;
     if( cself != NULL ) {
+        VTable* vtbl;
+
         TableReader_Whack(cself->tmpkey_reader);
+        if( (rc = TableWriter_GetVTable(cself->base, &vtbl)) == 0 ) {
+            KMetadata* meta;
+            if( (rc = VTableOpenMetadataUpdate(vtbl, &meta)) == 0 ) {
+                KMDataNode* node;
+                if( (rc = KMetadataOpenNodeUpdate(meta, &node, "CONFIG/REF_TABLE")) == 0 ) {
+                    rc = KMDataNodeWriteCString(node, cself->ref_table_name);
+                    KMDataNodeRelease(node);
+                }
+                KMetadataRelease(meta);
+            }
+        }
         rc = TableWriter_Whack(cself->base, commit, rows);
         free((TableWriterAlgn*)cself);
     }
@@ -208,17 +249,24 @@ LIB_EXPORT rc_t CC TableWriterAlgn_Write(const TableWriterAlgn* cself, const Tab
         TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_GLOBAL_REF_START], data->global_ref_start);
         TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_HAS_MISMATCH], data->has_mismatch);
         TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_MISMATCH], data->mismatch);
-        TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_REF_LEN], data->ref_len);
+        TW_COL_WRITE_VAR(cself->base, cself->cols[ewalgn_cn_REF_LEN], data->ref_len);
 
         TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_REF_ORIENTATION], data->ref_orientation);
         TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_REF_PLOIDY], data->ref_ploidy);
         TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_MAPQ], data->mapq);
 
+        if( data->mate_align_id.elements != 1 ) {
+            TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_MATE_ALIGN_ID], data->mate_align_id);
+        } else {
+            TW_COL_WRITE_BUF(cself->base, cself->cols[ewalgn_cn_MATE_ALIGN_ID], data->mate_align_id.buffer,
+                             ((const int64_t*)(data->mate_align_id.buffer))[0] ? 1 : 0);
+        }
         TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_MATE_REF_ORIENTATION], data->mate_ref_orientation);
         TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_MATE_REF_ID], data->mate_ref_id);
         TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_MATE_REF_POS], data->mate_ref_pos);
-        TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_MATE_ALIGN_ID], data->mate_align_id);
         TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_TEMPLATE_LEN], data->template_len);
+        TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_EVIDENCE_ALIGNMENT_IDS], data->alingment_ids);
+        TW_COL_WRITE(cself->base, cself->cols[ewalgn_cn_ALIGN_GROUP], data->align_group);
 
         if( rc == 0 ) {
             rc = TableWriter_CloseRow(cself->base);
@@ -239,7 +287,7 @@ LIB_EXPORT rc_t CC TableWriterAlgn_TmpKeyStart(const TableWriterAlgn* cself)
         ALIGN_DBGERR(rc);
     } else if( (rc = TableWriter_CloseCursor(cself->base, cself->cursor_id, NULL)) == 0 ) {
         TableWriterAlgn* self = (TableWriterAlgn*)cself;
-        const VTable* vtbl = NULL;
+        VTable* vtbl = NULL;
         memcpy(&self->cols_read_tmpkey, &TableAlgnReadTmpKey_cols, sizeof(TableAlgnReadTmpKey_cols));
         if( (rc = TableWriter_GetVTable(cself->base, &vtbl)) == 0 &&
             (rc = TableReader_Make(&self->tmpkey_reader, vtbl, self->cols_read_tmpkey, 50 * 1024 * 1024)) == 0 ) {
@@ -255,7 +303,7 @@ LIB_EXPORT rc_t CC TableWriterAlgn_TmpKeyStart(const TableWriterAlgn* cself)
     return rc;
 }
 
-LIB_EXPORT rc_t CC TableWriterAlgn_TmpKey(const TableWriterAlgn* cself, int64_t rowid, uint32_t* key_id)
+LIB_EXPORT rc_t CC TableWriterAlgn_TmpKey(const TableWriterAlgn* cself, int64_t rowid, uint64_t* key_id)
 {
     rc_t rc = 0;
 
@@ -266,7 +314,7 @@ LIB_EXPORT rc_t CC TableWriterAlgn_TmpKey(const TableWriterAlgn* cself, int64_t
         rc = RC( rcAlign, rcType, rcReading, rcMode, rcNotOpen);
         ALIGN_DBGERR(rc);
     } else if( (rc = TableReader_ReadRow(cself->tmpkey_reader, rowid)) == 0 ) {
-        memcpy(key_id, cself->cols_read_tmpkey[0].base, sizeof(*key_id));
+        memcpy(key_id, cself->cols_read_tmpkey[0].base.var, sizeof(*key_id));
     }
     return rc;
 }
@@ -289,45 +337,3 @@ LIB_EXPORT rc_t CC TableWriterAlgn_Write_SpotId(const TableWriterAlgn* cself, in
     }
     return rc;
 }
-
-LIB_EXPORT rc_t CC TableWriterAlgn_ReverseCompliment(const INSDC_dna_text* seq, INSDC_dna_text* cmpl, uint32_t len)
-{
-    rc_t rc = 0;
-    uint32_t i;
-    static INSDC_dna_text compl[256] = "~";
-
-    if( seq == NULL || compl == NULL ) {
-        rc = RC( rcAlign, rcType, rcConverting, rcParam, rcNull);
-    } else {
-        if( compl[0] == '~' ) {
-            INSDC_dna_text* x = (INSDC_dna_text*)&compl[0];
-            memset(x, 0, sizeof(compl));
-            x['A'] = x['a'] = 'T';
-            x['T'] = x['t'] = 'A';
-            x['U'] = x['u'] = 'A';
-            x['G'] = x['g'] = 'C';
-            x['C'] = x['c'] = 'G';
-            x['Y'] = x['y'] = 'R';
-            x['R'] = x['r'] = 'Y';
-            x['S'] = x['s'] = 'S';
-            x['W'] = x['w'] = 'W';
-            x['K'] = x['k'] = 'M';
-            x['M'] = x['m'] = 'K';
-            x['B'] = x['b'] = 'V';
-            x['D'] = x['d'] = 'H';
-            x['H'] = x['h'] = 'D';
-            x['V'] = x['v'] = 'B';
-            x['N'] = x['n'] = 'N';
-        }
-        cmpl += len;
-        for(i = 0; i < len; i++) {
-            *--cmpl= compl[(int)seq[i]];
-            if( *cmpl == '\0' ) {
-                rc = RC(rcAlign, rcFormatter, rcWriting, rcData, rcInvalid);
-                break;
-            }
-        }
-    }
-    ALIGN_DBGERR(rc);
-    return rc;
-}
diff --git a/libs/align/writer-cmn.c b/libs/align/writer-cmn.c
index d99262b..df4b0fa 100644
--- a/libs/align/writer-cmn.c
+++ b/libs/align/writer-cmn.c
@@ -25,6 +25,10 @@
 */
 #include <klib/rc.h>
 #include <klib/log.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <kdb/meta.h>
+#include <kapp/main.h>
 #include <vdb/table.h>
 #include <vdb/cursor.h>
 #include <vdb/schema.h>
@@ -36,6 +40,7 @@
 
 #include <stdlib.h>
 #include <string.h>
+#include <time.h>
 
 #define TW_MAX_CURSORS 8
 
@@ -67,11 +72,11 @@ rc_t TableWriter_Init(TableWriter** self, const char* table, const char* table_p
     } else if( (*self = calloc(1, sizeof(**self))) == NULL ) {
         rc = RC(rcAlign, rcType, rcConstructing, rcMemory, rcExhausted);
     } else {
-        (*self)->table = strdup(table);
+        (*self)->table = string_dup( table, string_size( table ) );
         if( (*self)->table == NULL ) {
             rc = RC(rcAlign, rcType, rcConstructing, rcMemory, rcExhausted);
         } else if( table_path != NULL ) {
-            (*self)->table_path = strdup(table_path);
+            (*self)->table_path = string_dup( table_path, string_size( table_path ) );
             if( (*self)->table_path == NULL ) {
                 rc = RC(rcAlign, rcType, rcConstructing, rcMemory, rcExhausted);
             }
@@ -96,7 +101,7 @@ rc_t TableWriter_OpenCursor(const TableWriter* cself, uint8_t cursor_id)
             } else if( self->is_update ) {
                 rc = VDatabaseOpenTableUpdate(self->vdb, &self->vtbl, self->table);
             } else {
-                rc = VDatabaseCreateTable(self->vdb, &self->vtbl, self->table, kcmCreate | kcmMD5, self->table);
+                rc = VDatabaseCreateTable(self->vdb, &self->vtbl, self->table, kcmCreate | kcmMD5, self->table_path);
             }
         }
 
@@ -129,14 +134,14 @@ rc_t TableWriter_OpenCursor(const TableWriter* cself, uint8_t cursor_id)
     return rc;
 }
 
-rc_t CC TableWriter_Make(const TableWriter** cself, VDatabase *db, const char* table)
+rc_t CC TableWriter_Make(const TableWriter** cself, VDatabase *db, const char* table, const char* table_path)
 {
     rc_t rc = 0;
     TableWriter* obj = NULL;
 
     if( cself == NULL ) {
         rc = RC(rcAlign, rcType, rcConstructing, rcParam, rcNull);
-    } else if( (rc = TableWriter_Init(&obj, table, NULL)) == 0 &&
+    } else if( (rc = TableWriter_Init(&obj, table, table_path ? table_path : table)) == 0 &&
                (rc = VDatabaseAddRef(db)) == 0 ) {
         obj->vdb = db;
     }
@@ -145,7 +150,7 @@ rc_t CC TableWriter_Make(const TableWriter** cself, VDatabase *db, const char* t
         ALIGN_DBG("table %s opened for writing", (*cself)->table);
     } else {
         TableWriter_Whack(obj, false, NULL);
-        ALIGN_DBGERRP("table %s", rc, table);
+        ALIGN_DBGERRP("table %s at %s", rc, table, table_path);
     }
     return rc;
 }
@@ -196,7 +201,7 @@ rc_t CC TableWriter_MakeUpdate(const TableWriter** cself, VDatabase *db, const c
     return rc;
 }
 
-rc_t CC TableWriter_GetVTable(const TableWriter* cself, const VTable** vtbl)
+rc_t CC TableWriter_GetVTable(const TableWriter* cself, VTable** vtbl)
 {
     rc_t rc = 0;
 
@@ -208,6 +213,66 @@ rc_t CC TableWriter_GetVTable(const TableWriter* cself, const VTable** vtbl)
     return rc;
 }
 
+rc_t CC TableWriter_Sign(const TableWriter* cself, const char* argv0, const char* argv0_date, const char* app_name, ver_t app_version)
+{
+    rc_t rc = 0;
+    KMetadata* meta = NULL;
+    KMDataNode* root = NULL;
+
+    if( cself == NULL || argv0 == NULL || argv0_date == NULL || app_name == NULL || app_version == 0 ) {
+        rc = RC(rcAlign, rcMetadata, rcWriting, rcParam, rcNull);
+    } else if( (rc = VTableOpenMetadataUpdate(cself->vtbl, &meta)) == 0 &&
+               (rc = KMetadataOpenNodeUpdate(meta, &root, "/")) == 0 ) {
+        KMDataNode *node = NULL;
+        if( (rc = KMDataNodeOpenNodeUpdate(root, &node, "SOFTWARE")) == 0 ) {
+            char str_vers[64];
+            KMDataNode *subNode = NULL;
+            if( (rc = KMDataNodeOpenNodeUpdate(node, &subNode, "loader")) == 0 ) {
+                if( (rc = string_printf(str_vers, sizeof(str_vers), NULL, "%V", KAppVersion())) == 0 ) {
+                    rc = KMDataNodeWriteAttr(subNode, "vers", str_vers);
+                }
+                if(rc == 0) {
+                    rc = KMDataNodeWriteAttr(subNode, "date", argv0_date);
+                }
+                if(rc == 0) {
+                    const char* tool_name = strrchr(argv0, '/');
+                    const char* r = strrchr(argv0, '\\');
+                    if( tool_name != NULL && r != NULL && tool_name < r ) {
+                        tool_name = r;
+                    }
+                    if( tool_name++ == NULL) {
+                        tool_name = argv0;
+                    }
+                    rc = KMDataNodeWriteAttr(subNode, "name", tool_name);
+                }
+                KMDataNodeRelease(subNode);
+            }
+            if(rc == 0 && (rc = KMDataNodeOpenNodeUpdate(node, &subNode, "formatter")) == 0 ) {
+                if( (rc = string_printf(str_vers, sizeof(str_vers), NULL, "%V", app_version)) == 0 ) {
+                    rc = KMDataNodeWriteAttr(subNode, "vers", str_vers);
+                }
+                if(rc == 0) {
+                    rc = KMDataNodeWriteAttr(subNode, "name", app_name ? app_name : "internal");
+                }
+                KMDataNodeRelease(subNode);
+            }
+            KMDataNodeRelease(node);
+        }
+        if( rc == 0 && (rc = KMDataNodeOpenNodeUpdate(root, &node, "LOAD")) == 0 ) {
+            KMDataNode *subNode = NULL;
+            if( (rc = KMDataNodeOpenNodeUpdate(node, &subNode, "timestamp")) == 0 ) {
+                time_t t = time(NULL);
+                rc = KMDataNodeWrite(subNode, &t, sizeof(t));
+                KMDataNodeRelease(subNode);
+            }
+            KMDataNodeRelease(node);
+        }
+    }
+    KMDataNodeRelease(root);
+    KMetadataRelease(meta);
+    return rc;
+}
+
 rc_t CC TableWriter_Whack(const TableWriter* cself, bool commit, uint64_t* rows)
 {
     rc_t rc = 0;
@@ -223,10 +288,12 @@ rc_t CC TableWriter_Whack(const TableWriter* cself, bool commit, uint64_t* rows)
             if( self->cursors[i].col_qty > 0 ) {
                 self->curr = &self->cursors[i];
                 if( self->curr->cursor != NULL ) {
+                    rc_t rc1 = 0, rc2;
                     if( commit ) {
-                        rc = VCursorCommit(self->curr->cursor);
+                        rc1 = VCursorCommit(self->curr->cursor);
                     }
-                    VCursorRelease(self->curr->cursor);
+                    rc2 = VCursorRelease(self->curr->cursor);
+                    rc = rc ? rc : (rc1 ? rc1 : rc2);
                     self->curr->cursor = NULL;
                 }
                 if( i == 0 && rows != NULL ) {
@@ -239,11 +306,11 @@ rc_t CC TableWriter_Whack(const TableWriter* cself, bool commit, uint64_t* rows)
                 self->curr = &self->cursors[i];
                 for(j = 0; j < self->curr->col_qty; j++) {
                     if( self->curr->cols[j].idx != 0 && (self->curr->cols[j].flags & ewcol_Temporary) ) {
-                        if( (rc = VTableDropColumn(self->vtbl, self->curr->cols[j].name)) != 0 ) {
-                            (void)PLOGERR(klogWarn, (klogWarn, rc,
+                        rc_t rc1;
+                        if( (rc1 = VTableDropColumn(self->vtbl, self->curr->cols[j].name)) != 0 ) {
+                            (void)PLOGERR(klogWarn, (klogWarn, rc1,
                                 "table $(table) failed to drop temporary column '$(column)'",
                                 "table=%s,column=%s", self->table, self->curr->cols[j].name));
-                            rc = 0;
                         } else {
                             ALIGN_DBG("table %s dropped tmp col %s", self->table, self->curr->cols[j].name);
                         }
@@ -251,7 +318,7 @@ rc_t CC TableWriter_Whack(const TableWriter* cself, bool commit, uint64_t* rows)
                 }
             }
         }
-        if( commit && rc == 0 ) {
+        if( commit && rc == 0 && self->vtbl != NULL ) {
             rc = VTableReindex(self->vtbl);
         }
         VTableRelease(self->vtbl);
@@ -334,6 +401,25 @@ rc_t CC TableWriter_CloseCursor(const TableWriter* cself, uint8_t cursor_id, uin
     return rc;
 }
 
+rc_t CC TableWriter_Flush(const TableWriter *cself, const uint8_t cursor_id)
+{
+    rc_t rc = 0;
+    
+    if( cself == NULL || cursor_id >= TW_MAX_CURSORS || cself->cursors[cursor_id].col_qty == 0 ) {
+        rc = RC(rcAlign, rcType, rcOpening, rcParam, rcInvalid);
+        ALIGN_DBGERR(rc);
+    }
+    else if( cself->cursors[cursor_id].cursor != NULL ) {
+        rc = VCursorFlushPage(cself->cursors[cursor_id].cursor);
+        if( rc == 0 ) {
+            ALIGN_DBG("table %s cursor %hu flushed", cself->table, cursor_id);
+        } else {
+            ALIGN_DBGERRP("table %s cursor %hu flushing", rc, cself->table, cursor_id);
+        }
+    }
+    return rc;
+}
+
 rc_t CC TableWriter_OpenRow(const TableWriter* cself, int64_t* rowid, const uint8_t cursor_id)
 {
     rc_t rc = 0;
diff --git a/libs/align/writer-priv.h b/libs/align/writer-priv.h
index 199c92b..a9099a8 100644
--- a/libs/align/writer-priv.h
+++ b/libs/align/writer-priv.h
@@ -29,6 +29,7 @@
 #include <vdb/manager.h>
 #include <vdb/database.h>
 #include <vdb/table.h>
+#include <kdb/meta.h>
 
 #include <align/writer-cmn.h>
 
@@ -48,7 +49,7 @@ typedef struct TableWriterColumn_struct {
 
 typedef struct TableWriter TableWriter;
 
-rc_t CC TableWriter_Make(const TableWriter** cself, VDatabase *db, const char* table);
+rc_t CC TableWriter_Make(const TableWriter** cself, VDatabase *db, const char* table, const char* table_path /* NULL */);
 
 rc_t CC TableWriter_MakeMgr(const TableWriter** cself, VDBManager* mgr, const char* schema_path, const char* type, const char* table_path);
 
@@ -57,7 +58,9 @@ rc_t CC TableWriter_MakeUpdate(const TableWriter** cself, VDatabase *db, const c
 /* add scursor based on column list */
 rc_t CC TableWriter_AddCursor(const TableWriter* cself, TableWriterColumn* cols, uint32_t col_qty, uint8_t* cursor_id);
 
-rc_t CC TableWriter_GetVTable(const TableWriter* cself, const VTable** vtbl);
+rc_t CC TableWriter_GetVTable(const TableWriter* cself, VTable** vtbl);
+
+rc_t CC TableWriter_Sign(const TableWriter* cself, const char* argv0, const char* argv0_date, const char* app_name, ver_t app_version);
 
 /* optionally return internal vtbl still open but committed */
 rc_t CC TableWriter_Whack(const TableWriter* cself, bool commit, uint64_t* rows);
@@ -65,6 +68,9 @@ rc_t CC TableWriter_Whack(const TableWriter* cself, bool commit, uint64_t* rows)
 /* commits and closes cursor_id, returns number of rows written in cursor, optionally */
 rc_t CC TableWriter_CloseCursor(const TableWriter* cself, uint8_t cursor_id, uint64_t* rows);
 
+/* flushes any pending writes into the table */
+rc_t CC TableWriter_Flush(const TableWriter *cself, const uint8_t cursor_id);
+
 /* CANNOT OPEN ROWS IN MULTIPLE CURSORS AT ONCE
     Use sequence:
     OpenRow
diff --git a/libs/align/writer-ref.c b/libs/align/writer-ref.c
index bbde6d1..d4d04a9 100644
--- a/libs/align/writer-ref.c
+++ b/libs/align/writer-ref.c
@@ -26,6 +26,7 @@
 #include <align/extern.h>
 
 #include <klib/rc.h>
+#include <kfs/file.h>
 #include <insdc/insdc.h>
 #include <vdb/table.h>
 #include <align/writer-refseq.h>
@@ -62,8 +63,11 @@ static const TableWriterColumn TableWriterRefCoverage_cols[ewrefcv_cn_Last + 1]
     {0, "CGRAPH_LOW", sizeof(uint8_t) * 8, 0},
     {0, "CGRAPH_MISMATCHES", sizeof(uint32_t) * 8, 0},
     {0, "CGRAPH_INDELS", sizeof(uint32_t) * 8, 0},
+    {0, "OVERLAP_REF_POS", sizeof(INSDC_coord_zero) * 8, ewcol_IsArray},
+    {0, "OVERLAP_REF_LEN", sizeof(INSDC_coord_len) * 8, ewcol_IsArray},
     {0, "PRIMARY_ALIGNMENT_IDS", sizeof(int64_t) * 8, ewcol_IsArray},
-    {0, "SECONDARY_ALIGNMENT_IDS", sizeof(int64_t) * 8, ewcol_IsArray}
+    {0, "SECONDARY_ALIGNMENT_IDS", sizeof(int64_t) * 8, ewcol_IsArray},
+    {0, "EVIDENCE_INTERVAL_IDS", sizeof(int64_t) * 8, ewcol_IsArray}
 };
 
 struct TableWriterRef {
@@ -98,7 +102,7 @@ rc_t CC TableWriterRef_Make(const TableWriterRef** cself, VDatabase* db, const u
             if( !(options & ewref_co_QUALITY) ) {
                 self->cols_data[ewrefd_cn_QUALITY].flags |= ewcol_Ignore;
             }
-            if( (rc = TableWriter_Make(&self->base, db, "REFERENCE")) == 0 &&
+            if( (rc = TableWriter_Make(&self->base, db, "REFERENCE", NULL)) == 0 &&
                 (rc = TableWriter_AddCursor(self->base, self->cols_data,
                             sizeof(self->cols_data) / sizeof(self->cols_data[0]), &self->cursor_id)) == 0 ) {
                 self->options = options;
@@ -171,13 +175,17 @@ rc_t TableWriterRef_WriteDefaults(const TableWriterRef* cself)
             ReferenceSeqCoverage c;
 
             memset(&c, 0, sizeof(c));
-            c.primary_ids.buffer = c.secondary_ids.buffer = &c;
             TW_COL_WRITE_DEF_VAR(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_CGRAPH_HIGH], c.low);
             TW_COL_WRITE_DEF_VAR(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_CGRAPH_LOW], c.high);
             TW_COL_WRITE_DEF_VAR(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_CGRAPH_MISMATCHES], c.mismatches);
             TW_COL_WRITE_DEF_VAR(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_CGRAPH_INDELS], c.indels);
-            TW_COL_WRITE_DEF(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_PRIMARY_ALIGNMENT_IDS], c.primary_ids);
-            TW_COL_WRITE_DEF(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_SECONDARY_ALIGNMENT_IDS], c.secondary_ids);
+            TW_COL_WRITE_DEF_BUF(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_OVERLAP_REF_POS],
+                    c.overlap_ref_pos, sizeof(c.overlap_ref_pos) / sizeof(c.overlap_ref_pos[0]));
+            TW_COL_WRITE_DEF_BUF(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_OVERLAP_REF_LEN],
+                    c.overlap_ref_len, sizeof(c.overlap_ref_len) / sizeof(c.overlap_ref_len[0]));
+            TW_COL_WRITE_DEF(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_PRIMARY_ALIGNMENT_IDS], c.ids[ewrefcov_primary_table]);
+            TW_COL_WRITE_DEF(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_SECONDARY_ALIGNMENT_IDS], c.ids[ewrefcov_secondary_table]);
+            TW_COL_WRITE_DEF(self->base, self->coverage_cursor_id, self->cols_coverage[ewrefcv_cn_EVIDENCE_INTERVAL_IDS], c.ids[ewrefcov_evidence_table]);
         }
     }
     return rc;
@@ -233,8 +241,10 @@ rc_t CC TableWriterRef_Write(const TableWriterRef* cself, const TableWriterRefDa
         ALIGN_DBGERRP("%s is longer than %s", rc, cself->cols_data[ewrefd_cn_READ].name, cself->cols_data[ewrefd_cn_MAX_SEQ_LEN].name);
     } else if( (rc = TableWriter_OpenRow(cself->base, rowid, cself->cursor_id)) == 0 ) {
         const INSDC_dna_text* b = data->read.buffer;
-        INSDC_coord_len len = data->read.elements;
+        INSDC_coord_len const len = data->read.elements;
         bool write_read = data->seq_id.elements < 1 || data->force_READ_write;
+        INSDC_coord_len trim_len = len;
+        
         if( cself->last_seq_id_len != data->seq_id.elements ||
             strncmp(cself->last_seq_id, data->seq_id.buffer, cself->last_seq_id_len) != 0 ) {
             /* new seq_id: reset counters and mem it */
@@ -245,32 +255,43 @@ rc_t CC TableWriterRef_Write(const TableWriterRef* cself, const TableWriterRefDa
             self->last_cs_key = 'T';
         }
         /* trunc trailing N */
-        while( len > 0 && toupper(b[len - 1]) == 'N' ) {
-            len--;
+        b += len - 1;
+        while( trim_len > 0 && (*b == 'N' || *b == 'n' || *b == '.') ) {
+            trim_len--; b--;
         }
         TW_COL_WRITE(cself->base, cself->cols_data[ewrefd_cn_NAME], data->name);
-        TW_COL_WRITE_BUF(cself->base, cself->cols_data[ewrefd_cn_READ], data->read.buffer, (write_read ? len : 0));
+        TW_COL_WRITE_BUF(cself->base, cself->cols_data[ewrefd_cn_READ], data->read.buffer, (write_read ? trim_len : 0));
         TW_COL_WRITE(cself->base, cself->cols_data[ewrefd_cn_QUALITY], data->quality);
         TW_COL_WRITE(cself->base, cself->cols_data[ewrefd_cn_SEQ_ID], data->seq_id);
-        if( len == 0 ) {
-            TW_COL_WRITE_VAR(cself->base, cself->cols_data[ewrefd_cn_SEQ_START], len);
+        if( trim_len == 0 ) {
+            TW_COL_WRITE_VAR(cself->base, cself->cols_data[ewrefd_cn_SEQ_START], trim_len);
         } else {
             TW_COL_WRITE_VAR(cself->base, cself->cols_data[ewrefd_cn_SEQ_START], cself->seq_start_last);
         }
-        TW_COL_WRITE_VAR(cself->base, cself->cols_data[ewrefd_cn_SEQ_LEN], data->read.elements);
+        TW_COL_WRITE_VAR(cself->base, cself->cols_data[ewrefd_cn_SEQ_LEN], len);
         TW_COL_WRITE_VAR(cself->base, cself->cols_data[ewrefd_cn_CS_KEY], cself->last_cs_key);
         TW_COL_WRITE_VAR(cself->base, cself->cols_data[ewrefd_cn_CIRCULAR], data->circular);
         if( rc == 0 && (rc = TableWriter_CloseRow(cself->base)) == 0 ) {
             TableWriterRef* self = (TableWriterRef*)cself;
             
             self->last_cs_key = ((const char*)(data->read.buffer))[data->read.elements - 1];
+            switch (self->last_cs_key) {
+            case 'A':
+            case 'C':
+            case 'G':
+            case 'T':
+                break;
+            default:
+                self->last_cs_key = 'T';
+                break;
+            }
             self->seq_start_last += data->read.elements;
         }
     }
     return rc;
 }
 
-rc_t CC TableWriterRef_WriteCoverage(const TableWriterRef* cself, int64_t rowid, int64_t offset, const ReferenceSeqCoverage* coverage)
+rc_t CC TableWriterRef_WriteCoverage(const TableWriterRef* cself, int64_t rowid, INSDC_coord_zero offset, const ReferenceSeqCoverage* coverage)
 {
     rc_t rc = 0;
 
@@ -284,11 +305,11 @@ rc_t CC TableWriterRef_WriteCoverage(const TableWriterRef* cself, int64_t rowid,
         ALIGN_DBGERRP("coverage %s", rc, "data");
     } else if( offset > cself->seq_start_last ) {
         rc = RC(rcAlign, rcType, rcWriting, rcData, rcInvalid);
-        ALIGN_DBGERRP("%lu is beyond last written chunk", rc, offset);
+        ALIGN_DBGERRP("%i is beyond last written chunk", rc, offset);
     } else {
         if( (rowid + offset / cself->max_seq_len) - cself->last_coverage_row > 1 ) {
             /* fill in gap in coverage rows with default values */
-            ALIGN_DBG("%gap in coverage rows (%li,%li) -> use defaults", cself->last_coverage_row, rowid + offset / cself->max_seq_len);
+            ALIGN_DBG("gap in coverage rows (%li,%li) -> use defaults", cself->last_coverage_row, rowid + offset / cself->max_seq_len);
             rc = TableWriterRef_DefaultCoverage(cself, rowid + offset / cself->max_seq_len);
         }
         if( rc == 0 && (rc = TableWriter_OpenRowId(cself->base, rowid + offset / cself->max_seq_len, cself->coverage_cursor_id)) == 0 ) {
@@ -296,8 +317,13 @@ rc_t CC TableWriterRef_WriteCoverage(const TableWriterRef* cself, int64_t rowid,
             TW_COL_WRITE_VAR(cself->base, cself->cols_coverage[ewrefcv_cn_CGRAPH_LOW], coverage->low);
             TW_COL_WRITE_VAR(cself->base, cself->cols_coverage[ewrefcv_cn_CGRAPH_MISMATCHES], coverage->mismatches);
             TW_COL_WRITE_VAR(cself->base, cself->cols_coverage[ewrefcv_cn_CGRAPH_INDELS], coverage->indels);
-            TW_COL_WRITE(cself->base, cself->cols_coverage[ewrefcv_cn_PRIMARY_ALIGNMENT_IDS], coverage->primary_ids);
-            TW_COL_WRITE(cself->base, cself->cols_coverage[ewrefcv_cn_SECONDARY_ALIGNMENT_IDS], coverage->secondary_ids);
+            TW_COL_WRITE_BUF(cself->base, cself->cols_coverage[ewrefcv_cn_OVERLAP_REF_POS],
+                    coverage->overlap_ref_pos, sizeof(coverage->overlap_ref_pos) / sizeof(coverage->overlap_ref_pos[0]));
+            TW_COL_WRITE_BUF(cself->base, cself->cols_coverage[ewrefcv_cn_OVERLAP_REF_LEN],
+                    coverage->overlap_ref_len, sizeof(coverage->overlap_ref_len) / sizeof(coverage->overlap_ref_len[0]));
+            TW_COL_WRITE(cself->base, cself->cols_coverage[ewrefcv_cn_PRIMARY_ALIGNMENT_IDS], coverage->ids[ewrefcov_primary_table]);
+            TW_COL_WRITE(cself->base, cself->cols_coverage[ewrefcv_cn_SECONDARY_ALIGNMENT_IDS], coverage->ids[ewrefcov_secondary_table]);
+            TW_COL_WRITE(cself->base, cself->cols_coverage[ewrefcv_cn_EVIDENCE_INTERVAL_IDS], coverage->ids[ewrefcov_evidence_table]);
             if( rc == 0 ) {
                 TableWriterRef* self = (TableWriterRef*)cself;
                 self->last_coverage_row = rowid + offset / cself->max_seq_len;
@@ -312,10 +338,10 @@ struct TableWriterRefCoverage {
     const TableWriter* base;
     bool init; /* default written indicator */
     uint8_t cursor_id;
-    TableWriterColumn cols[sizeof(TableWriterRefCoverage_cols)/sizeof(TableWriterRefCoverage_cols[0])];
+    TableWriterColumn cols[ewrefcv_cn_ReCover + 1];
 };
 
-rc_t CC TableWriterRefCoverage_Make(const TableWriterRefCoverage** cself, VDatabase* db)
+rc_t CC TableWriterRefCoverage_MakeCoverage(const TableWriterRefCoverage** cself, VDatabase* db, const uint32_t options)
 {
     rc_t rc = 0;
     TableWriterRefCoverage* self = NULL;
@@ -327,7 +353,7 @@ rc_t CC TableWriterRefCoverage_Make(const TableWriterRefCoverage** cself, VDatab
         if( self == NULL ) {
             rc = RC(rcAlign, rcFormatter, rcConstructing, rcMemory, rcExhausted);
         } else {
-            memcpy(self->cols, TableWriterRefCoverage_cols, sizeof(TableWriterRefCoverage_cols));
+            memcpy(self->cols, TableWriterRefCoverage_cols, sizeof(self->cols));
             if( (rc = TableWriter_MakeUpdate(&self->base, db, "REFERENCE")) == 0 ) {
                 rc = TableWriter_AddCursor(self->base, self->cols,
                         sizeof(self->cols) / sizeof(self->cols[0]), &self->cursor_id);
@@ -336,13 +362,44 @@ rc_t CC TableWriterRefCoverage_Make(const TableWriterRefCoverage** cself, VDatab
     }
     if( rc == 0 ) {
         *cself = self;
-        ALIGN_DBG("table %s", "opened");
+        ALIGN_R_DBG("table %s", "opened");
     } else {
         TableWriterRefCoverage_Whack(self, false, NULL);
         ALIGN_DBGERR(rc);
     }
     return rc;
 }
+rc_t CC TableWriterRefCoverage_MakeIds(const TableWriterRefCoverage** cself, VDatabase* db, const char  * col_name)
+{
+    rc_t rc = 0;
+    TableWriterRefCoverage* self = NULL;
+
+    if( cself == NULL ) {
+        rc = RC(rcAlign, rcFormatter, rcConstructing, rcParam, rcNull);
+    } else {
+        self = calloc(1, sizeof(*self));
+        if( self == NULL ) {
+            rc = RC(rcAlign, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+        } else {
+            if( (rc = TableWriter_MakeUpdate(&self->base, db, "REFERENCE")) == 0 ) {
+                self->cols[0].idx = 0;
+                self->cols[0].name = col_name;
+                self->cols[0].element_bits = 8 * sizeof(int64_t);
+                self->cols[0].flags=ewcol_IsArray;
+                rc = TableWriter_AddCursor(self->base, self->cols,1, &self->cursor_id);
+            }
+        }
+    }
+    if( rc == 0 ) {
+        *cself = self;
+        ALIGN_R_DBG("table %s", "opened");
+    } else {
+        TableWriterRefCoverage_Whack(self, false, NULL);
+        ALIGN_DBGERR(rc);
+    }
+    return rc;
+}
+
 
 rc_t CC TableWriterRefCoverage_Whack(const TableWriterRefCoverage* cself, bool commit, uint64_t* rows)
 {
@@ -355,36 +412,70 @@ rc_t CC TableWriterRefCoverage_Whack(const TableWriterRefCoverage* cself, bool c
     return rc;
 }
 
-rc_t CC TableWriterRefCoverage_Write(const TableWriterRefCoverage* cself, int64_t rowid, const ReferenceSeqCoverage* coverage)
+
+rc_t CC TableWriterRefCoverage_WriteCoverage(const TableWriterRefCoverage* cself, int64_t rowid, const ReferenceSeqCoverage* coverage)
 {
     rc_t rc = 0;
 
     if( cself == NULL || coverage == NULL ) {
         rc = RC(rcAlign, rcType, rcWriting, rcParam, rcNull);
         ALIGN_DBGERR(rc);
-    } else if( !cself->init ) {
-        ReferenceSeqCoverage c;
+    }
+    else {
+        if( !cself->init ) {
+            /* set the defaults */
+            ReferenceSeqCoverage c;
+            
+            memset(&c, 0, sizeof(c));
+            TW_COL_WRITE_DEF_VAR(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_CGRAPH_HIGH], c.low);
+            TW_COL_WRITE_DEF_VAR(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_CGRAPH_LOW], c.high);
+            TW_COL_WRITE_DEF_VAR(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_CGRAPH_MISMATCHES], c.mismatches);
+            TW_COL_WRITE_DEF_VAR(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_CGRAPH_INDELS], c.indels);
+            TW_COL_WRITE_DEF_BUF(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_OVERLAP_REF_POS],
+                                 c.overlap_ref_pos, sizeof(c.overlap_ref_pos) / sizeof(c.overlap_ref_pos[0]));
+            TW_COL_WRITE_DEF_BUF(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_OVERLAP_REF_LEN],
+                                 c.overlap_ref_len, sizeof(c.overlap_ref_len) / sizeof(c.overlap_ref_len[0]));
+            
+            ((TableWriterRefCoverage*)cself)->init = true;
+        }
+        if( rc == 0 && (rc = TableWriter_OpenRowId(cself->base, rowid, cself->cursor_id)) == 0 ) {
+            TW_COL_WRITE_VAR(cself->base, cself->cols[ewrefcv_cn_CGRAPH_HIGH], coverage->high);
+            TW_COL_WRITE_VAR(cself->base, cself->cols[ewrefcv_cn_CGRAPH_LOW], coverage->low);
+            TW_COL_WRITE_VAR(cself->base, cself->cols[ewrefcv_cn_CGRAPH_MISMATCHES], coverage->mismatches);
+            TW_COL_WRITE_VAR(cself->base, cself->cols[ewrefcv_cn_CGRAPH_INDELS], coverage->indels);
+            TW_COL_WRITE_BUF(cself->base, cself->cols[ewrefcv_cn_OVERLAP_REF_POS],
+                             coverage->overlap_ref_pos, sizeof(coverage->overlap_ref_pos) / sizeof(coverage->overlap_ref_pos[0]));
+            TW_COL_WRITE_BUF(cself->base, cself->cols[ewrefcv_cn_OVERLAP_REF_LEN],
+                             coverage->overlap_ref_len, sizeof(coverage->overlap_ref_len) / sizeof(coverage->overlap_ref_len[0]));
             
-        memset(&c, 0, sizeof(c));
-        c.primary_ids.buffer = c.secondary_ids.buffer = &c;
-        TW_COL_WRITE_DEF_VAR(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_CGRAPH_HIGH], c.low);
-        TW_COL_WRITE_DEF_VAR(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_CGRAPH_LOW], c.high);
-        TW_COL_WRITE_DEF_VAR(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_CGRAPH_MISMATCHES], c.mismatches);
-        TW_COL_WRITE_DEF_VAR(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_CGRAPH_INDELS], c.indels);
-        TW_COL_WRITE_DEF(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_PRIMARY_ALIGNMENT_IDS], c.primary_ids);
-        TW_COL_WRITE_DEF(cself->base, cself->cursor_id, cself->cols[ewrefcv_cn_SECONDARY_ALIGNMENT_IDS], c.secondary_ids);
-        ((TableWriterRefCoverage*)cself)->init = true;
+            if( rc == 0 ) {
+                rc = TableWriter_CloseRow(cself->base);
+            }
+        }
     }
-    if( rc == 0 && (rc = TableWriter_OpenRowId(cself->base, rowid, cself->cursor_id)) == 0 ) {
-        TW_COL_WRITE_VAR(cself->base, cself->cols[ewrefcv_cn_CGRAPH_HIGH], coverage->high);
-        TW_COL_WRITE_VAR(cself->base, cself->cols[ewrefcv_cn_CGRAPH_LOW], coverage->low);
-        TW_COL_WRITE_VAR(cself->base, cself->cols[ewrefcv_cn_CGRAPH_MISMATCHES], coverage->mismatches);
-        TW_COL_WRITE_VAR(cself->base, cself->cols[ewrefcv_cn_CGRAPH_INDELS], coverage->indels);
-        TW_COL_WRITE(cself->base, cself->cols[ewrefcv_cn_PRIMARY_ALIGNMENT_IDS], coverage->primary_ids);
-        TW_COL_WRITE(cself->base, cself->cols[ewrefcv_cn_SECONDARY_ALIGNMENT_IDS], coverage->secondary_ids);
-        if( rc == 0 ) {
-            rc = TableWriter_CloseRow(cself->base);
+    return rc;
+}
+rc_t CC TableWriterRefCoverage_WriteIds(const TableWriterRefCoverage* cself, int64_t rowid, const int64_t* buf,uint32_t num)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || (buf  == NULL && num > 0)) {
+        rc = RC(rcAlign, rcType, rcWriting, rcParam, rcNull);
+        ALIGN_DBGERR(rc);
+    }
+    else {
+        if( !cself->init ) {
+            /* set the defaults */
+            TW_COL_WRITE_DEF_BUF(cself->base, cself->cursor_id, cself->cols[0],NULL,0);
+            ((TableWriterRefCoverage*)cself)->init = true;
+        }
+        if( rc == 0 && (rc = TableWriter_OpenRowId(cself->base, rowid, cself->cursor_id)) == 0 ) {
+            TW_COL_WRITE_BUF(cself->base, cself->cols[0],buf,num);
+            if( rc == 0 ) {
+                rc = TableWriter_CloseRow(cself->base);
+            }
         }
     }
     return rc;
 }
+
diff --git a/libs/align/writer-ref.h b/libs/align/writer-ref.h
index a2a9568..e059a0b 100644
--- a/libs/align/writer-ref.h
+++ b/libs/align/writer-ref.h
@@ -45,19 +45,23 @@ enum ETableWriterRefData_ColNames {
 
 enum ETableWriterRefCoverage_ColNames {
     /* coverage data starts here */
-    ewrefcv_cn_CGRAPH_HIGH,
+    ewrefcv_cn_CGRAPH_HIGH=0,
     ewrefcv_cn_CGRAPH_LOW,
     ewrefcv_cn_CGRAPH_MISMATCHES,
     ewrefcv_cn_CGRAPH_INDELS,
+    ewrefcv_cn_OVERLAP_REF_POS,
+    ewrefcv_cn_OVERLAP_REF_LEN,
+    ewrefcv_cn_ReCover = ewrefcv_cn_OVERLAP_REF_LEN,
     ewrefcv_cn_PRIMARY_ALIGNMENT_IDS,
     ewrefcv_cn_SECONDARY_ALIGNMENT_IDS,
-    ewrefcv_cn_Last = ewrefcv_cn_SECONDARY_ALIGNMENT_IDS
+    ewrefcv_cn_EVIDENCE_INTERVAL_IDS,
+    ewrefcv_cn_Last = ewrefcv_cn_EVIDENCE_INTERVAL_IDS
 };
 
 enum ETableWriterRef_ColOptions {
     ewref_co_SaveRead = 0x01, /* always write READ */
-    ewref_co_QUALITY = 0x02, /* use QUALITY column, by default not opened */
-    ewref_co_Coverage = 0x04 /* use coverage columns, by default not opened */
+    ewref_co_QUALITY = 0x02,  /* use QUALITY column, by default not opened */
+    ewref_co_Coverage = 0x04  /* use coverage columns, by default not opened */
 };
 
 typedef struct TableWriterRefData_struct {
@@ -85,18 +89,18 @@ rc_t CC TableWriterRef_WriteDefaultCovarage(const TableWriterRef* cself, enum ET
 /* rowid optional here */
 rc_t CC TableWriterRef_Write(const TableWriterRef* cself, const TableWriterRefData* data, int64_t* rowid);
 
-rc_t CC TableWriterRef_WriteCoverage(const TableWriterRef* cself, int64_t rowid, int64_t offset, const ReferenceSeqCoverage* coverage);
+rc_t CC TableWriterRef_WriteCoverage(const TableWriterRef* cself, int64_t rowid, INSDC_coord_zero offset, const ReferenceSeqCoverage* coverage);
 
 
 
 
 typedef struct TableWriterRefCoverage TableWriterRefCoverage;
 
-rc_t CC TableWriterRefCoverage_Make(const TableWriterRefCoverage** cself, VDatabase* db);
-
+rc_t CC TableWriterRefCoverage_MakeCoverage(const TableWriterRefCoverage** cself, VDatabase* db, const uint32_t options);
+rc_t CC TableWriterRefCoverage_MakeIds(const TableWriterRefCoverage** cself, VDatabase* db, const char *col_name);
 /* rows optional here */
 rc_t CC TableWriterRefCoverage_Whack(const TableWriterRefCoverage* cself, bool commit, uint64_t* rows);
-
-rc_t CC TableWriterRefCoverage_Write(const TableWriterRefCoverage* cself, int64_t rowid, const ReferenceSeqCoverage* coverage);
+rc_t CC TableWriterRefCoverage_WriteCoverage(const TableWriterRefCoverage* cself, int64_t rowid, const ReferenceSeqCoverage* coverage);
+rc_t CC TableWriterRefCoverage_WriteIds(const TableWriterRefCoverage* cself, int64_t rowid, const int64_t* buf,uint32_t num);
 
 #endif /* _h_align_writer_ref_ */
diff --git a/libs/align/writer-reference.c b/libs/align/writer-reference.c
index dd7e990..b310617 100644
--- a/libs/align/writer-reference.c
+++ b/libs/align/writer-reference.c
@@ -24,17 +24,22 @@
 */
 #include <align/extern.h>
 
+#include <kapp/main.h>
 #include <klib/log.h>
 #include <klib/rc.h>
-#include <kapp/main.h>
 #include <klib/sort.h>
+#include <klib/data-buffer.h>
 #include <klib/container.h>
+#include <klib/checksum.h>
+#include <klib/text.h>
 #include <kfs/mmap.h>
 #include <kfs/file.h>
 #include <kdb/manager.h>
 #include <vdb/database.h>
 #include <vdb/table.h>
+#include <vdb/cursor.h>
 #include <vdb/manager.h>
+#include <vdb/vdb-priv.h>
 #include <sra/sradb.h>
 
 #include <align/writer-reference.h>
@@ -43,6 +48,7 @@
 #include "refseq-mgr-priv.h"
 #include "writer-ref.h"
 #include "reader-cmn.h"
+#include "reference-cmn.h"
 #include "debug.h"
 #include <os-native.h>
 #include <sysalloc.h>
@@ -53,78 +59,173 @@
 #include <ctype.h>
 #include <assert.h>
 
-struct ReferenceMgr {
-    const TableWriterRef* writer;
-    const KDirectory* dir;
-    BSTree tree;
-    uint32_t options;
-    const VDBManager* vmgr;
-    const RefSeqMgr* rmgr;
-    VDatabase* db;
-    size_t cache;
-    uint32_t num_open_max;
-    uint32_t num_open;
-    uint64_t usage;
-    uint32_t max_seq_len;
-    /* last seq end */
-    int64_t ref_rowid;
-    int32_t compress_buf[10240];
-    /* must be last element of struct! */
-    INSDC_dna_text seq_buf[TableWriterRefSeq_MAX_SEQ_LEN];
+/*
+ * ReferenceSeq objects:
+ *  ReferenceSeq objects may be unattached, i.e. they might not yet represent an
+ *  actual sequence.
+ *
+ *  ReferenceSeq objects may be attached, i.e. they represent a sequence from
+ *  either RefSeq or a fasta file.
+ *
+ *  A ReferenceSeq object may be refered to by more than one id, but a
+ *  ReferenceSeq object has only one canonical id.
+ *
+ *  More than one ReferenceSeq object may be associated with the same seqId.
+ *
+ *  More than one ReferenceSeq object may be attached to the same sequence.
+ *  This will cause the REFERENCE table to have more than one copy of the
+ *  sequence.
+ *
+ *  ReferenceSeq objects may be created from the config file.  These objects
+ *  will have an id, a seqId, but no fastaSeqId.  These are unattached.
+ *
+ *  ReferenceSeq objects may be created from explicit fasta files.  These
+ *  objects will have a fastaSeqId, but *** NO id OR seqId ***. These are
+ *  attached.
+ *
+ *  ReferenceSeq objects may be created on the fly by requesting an id that
+ *  isn't already in the collection.  These objects will have the requested id.
+ *
+ * When a reference is requested (by id):
+ *  Resolve the id to a ReferenceSeq object.
+ *  If the object is unattached, attach it to a sequence.
+ *  If the sequence is not yet written to the REFERENCE table, write it to the
+ *  REFERENCE table.  NAME gets id; SEQID gets seqId unless seqId is null, then
+ *  SEQID gets id.
+ *
+ * Resolving id's to ReferenceSeq objects:
+ *  Search the id index and if the found object is attached, return it.
+ *  Search the identifiers in the fastaSeqIds or seqIds.
+ *  If different objects were found from both searches, use sequence length and
+ *  MD5 to break the tie (if both match then use RefSeq).  If no sequence length
+ *  or MD5 then fail.
+ *  If no objects were found from either search, then create a new unattached
+ *  ReferenceSeq object.
+ *  If the object's id is null, set it to the id.
+ *  It the object was not found in the id index, add it.
+ *
+ * Attaching ReferenceSeq objects to sequences:
+ *  Search RefSeq for seqId.
+ *  Else search RefSeq for id.
+ *  Else search for seqId in the loaded fasta files.
+ *  Else search data directory for id.fasta or id.fa; load it or fail.
+ *  Else search data directory for seqId.fasta or seqId.fa; load it or fail.
+ *  Else fail.
+ *  If failed, mark the object as dead.
+ *
+ *
+ *
+ * Config file:
+ *  The config file consists of lines containing whitespace (preferably tab)
+ *  seperated fields.  The fields are:
+ *      NAME (unique)
+ *      SEQID
+ *      extra (optional)
+ *
+ *  There is one ReferenceSeq object created per record in the config file.
+ *  NAME is stored in id; SEQID is stored in seqId; if extra contains the word
+ *  'circular' (case-insensitive), true is stored in circular.  These
+ *  ReferenceSeq object are created in the unattached state, i.e. not attached
+ *  to a fasta file or a RefSeq library object.
+ *
+ * Fasta files:
+ *  Fasta file consists of one of more sequences.  A sequence in a fasta file
+ *  consists of a seqid line followed by lines containing the bases of the
+ *  sequence.  A seqid line starts with '>' and the next word (whitespace
+ *  delimited) is the seqid.  The seqid may consist of '|' delimited identifiers
+ *  (this is purposely vague).  The fasta seqid is stored in fastaSeqId.
+ *
+ * Fasta files may be loaded explicitly:
+ *  When a fasta file is loaded explicitly, a new ReferenceSeq object is created
+ *  (with id == NULL) for each sequence found in the file.
+ *
+ * Fasta files may be loaded implicitly:
+ *  When an id can't be found in the set of ReferenceSeq objects and can't be
+ *  found as an accession by RefSeq, an attempt is made to load a fasta file
+ *  named <id>.fasta or <id>.fa in the directory given to the constructor.  If
+ *  this succeeds, a new ReferenceSeq object with the given id is attached to
+ *  the sequence.  In this situation, to avoid ambiquity, there can be only one
+ *  sequence in the fasta file.
+ *
+ */
+
+enum ReferenceSeqType {
+    rst_unattached,
+    rst_local,
+    rst_refSeqById,
+    rst_refSeqBySeqId,
+    rst_dead
 };
 
 struct ReferenceSeq {
-    BSTNode dad;
-    const ReferenceMgr* mgr;
-    bool local;
-    char id[64];
-    char accession[64];
+    ReferenceMgr *mgr;
+    char *id;
+    char *seqId;
+    char *fastaSeqId;
+    /* ref table position */
+    int64_t start_rowid;
+    /* total reference length */
+    INSDC_coord_len seq_len;
+    int type;
     bool circular;
+    uint8_t md5[16];
     union {
         struct {
-            /* local file data */
-            uint64_t file_size;
-            uint64_t line_sz; /* length of line w/ \n */
-            uint64_t fasta_offset; /* first base in file */
-            const KMMap* map;
-            /* cache last call to KMMapReposition */
-            uint64_t map_from;
-            uint64_t map_to;
+            KDataBuffer buf;
+            uint8_t const *data;
         } local;
-        struct {
-            const RefSeq* o;
-            uint64_t usage;
-        } refseq;
+        RefSeq const *refseq;
     } u;
-    /* ref table position */
-    int64_t start_rowid;
-    /* total reference length */
-    uint64_t seq_len;
 };
 
-static
-int CC ReferenceSeq_Cmp(const void *item, const BSTNode *n)
-{
-    return strcasecmp((const char*)item, ((const ReferenceSeq*)n)->id);
-}
+struct ReferenceMgr {
+    TableWriterRef const *writer;
+    KDirectory const *dir;
+    RefSeqMgr const *rmgr;
+    VDatabase *db;
+    ReferenceSeq *refSeq;
+    
+    int64_t ref_rowid;
+    
+    size_t cache;
+    
+    uint32_t options;
+    uint32_t num_open_max;
+    uint32_t num_open;
+    uint32_t max_seq_len;
+    
+    KDataBuffer compress;
+    KDataBuffer seq;
+    KDataBuffer refSeqs;
+    KDataBuffer refSeqsById;
+};
+
+typedef struct key_id_t {
+    char const *key;
+    int64_t id;
+} key_id_t;
 
 static
-int CC ReferenceSeq_Sort(const BSTNode *item, const BSTNode *n)
+int CC key_id_cmp(const void *arg1, const void *arg2, void *data)
 {
-    return ReferenceSeq_Cmp(((const ReferenceSeq*)item)->id, n);
+    key_id_t const *a = arg1;
+    key_id_t const *b = arg2;
+    
+    return strcmp(a->key, b->key);
 }
 
 static
-void CC ReferenceSeq_Unused( BSTNode *node, void *data )
+void CC ReferenceSeq_Whack(ReferenceSeq *self)
 {
-    ReferenceSeq* n = (ReferenceSeq*)node;
-    ReferenceSeq** d = (ReferenceSeq**)data;
-
-    if( !n->local && n->u.refseq.o != NULL ) {
-        if( *d == NULL || (*d)->u.refseq.usage > n->u.refseq.usage ) {
-            *d = n;
-        }
+    if (self->type == rst_local) {
+        KDataBufferWhack(&self->u.local.buf);
+    }
+    else if (self->type == rst_refSeqById || self->type == rst_refSeqBySeqId) {
+        RefSeq_Release(self->u.refseq);
     }
+    free(self->id);
+    free(self->seqId);
+    free(self->fastaSeqId);
 }
 
 struct OpenConfigFile_ctx {
@@ -156,11 +257,13 @@ bool OpenConfigFile(char const server[], char const volume[], void *Ctx)
 }
 
 static
-rc_t FindAndOpenConfigFile(const RefSeqMgr* rmgr, KDirectory const *dir, KFile const **kfp, char const conf[])
+rc_t FindAndOpenConfigFile(RefSeqMgr const *const rmgr,
+                           KDirectory const *const dir,
+                           KFile const **const kfp, char const conf[])
 {
     rc_t rc = KDirectoryOpenFileRead(dir, kfp, conf);
     
-    if(rc) {
+    if (rc) {
         struct OpenConfigFile_ctx ctx;
 
         ctx.name = conf;
@@ -176,442 +279,1457 @@ rc_t FindAndOpenConfigFile(const RefSeqMgr* rmgr, KDirectory const *dir, KFile c
     return rc;
 }
 
+enum comparison_weights {
+    no_match        = 0,
+    substring_match = (1u << 0),
+    expected_prefix = (1u << 1),
+    exact_match     = (1u << 2),
+    seq_len_match   = (1u << 3),
+    md5_match       = (1u << 4)
+};
+
 static
-rc_t ReferenceMgr_Conf(const RefSeqMgr* rmgr, BSTree* tree, KDirectory const *dir, VDBManager const *vmgr, char const conf[])
+unsigned str_weight(char const str[], char const qry[], unsigned const qry_len)
 {
-    rc_t rc = 0;
+    char const *const fnd = strcasestr(str, qry);
+    unsigned wt = no_match;
+    
+    if (fnd) {
+        unsigned const fnd_len = string_size( fnd );
+        unsigned const fndlen = (fnd_len > qry_len && fnd[qry_len] == '|') ? qry_len : fnd_len;
+        
+        if (fndlen == qry_len && (fnd == str || fnd[-1] == '|')) {
+            wt |= substring_match;
+            
+            if (fnd == str) {
+                if (fnd[fndlen] == '\0')
+                    wt |= exact_match;
+            }
+            else {
+                /* check for expected prefices */
+                char const *ns = fnd - 1;
+                
+                while (ns != str && ns[-1] != '|')
+                    --ns;
+                
+                if (   memcmp(ns, "ref|", 4) == 0
+                    || memcmp(ns, "emb|", 4) == 0
+                    || memcmp(ns, "dbg|", 4) == 0
+                    || memcmp(ns, "tpg|", 4) == 0
+                    || memcmp(ns, "tpe|", 4) == 0
+                    || memcmp(ns, "tpd|", 4) == 0
+                    || memcmp(ns, "gpp|", 4) == 0
+                    || memcmp(ns,  "gb|", 3) == 0
+                    )
+                {
+                    wt |= expected_prefix;
+                }
+            }
+        }
+    }
+    return wt;
+}
+
+static
+rc_t ReferenceMgr_AddId(ReferenceMgr *const self, char const ID[],
+                        ReferenceSeq const *const obj)
+{
+    char *id = string_dup( ID, string_size( ID ) );
+    unsigned const last_id = self->refSeqsById.elem_count;
+    
+    if (id) {
+        rc_t rc = KDataBufferResize(&self->refSeqsById, last_id + 1);
+        
+        if (rc == 0) {
+            key_id_t *kid = &((key_id_t *)self->refSeqsById.base)[last_id];
+            
+            kid->key = id;
+            kid->id = obj - self->refSeq;
+            
+            ksort(self->refSeqsById.base, self->refSeqsById.elem_count, sizeof(key_id_t), key_id_cmp, NULL);
+        }
+        else
+            free(id);
+        
+        return rc;
+    }
+    else
+        return RC(rcAlign, rcIndex, rcInserting, rcMemory, rcExhausted);
+}
+
+static
+key_id_t *ReferenceMgr_FindId(ReferenceMgr const *const self, char const id[])
+{
+    key_id_t qry;
+    
+    qry.key = id;
+    qry.id = 0;
+    
+    return kbsearch(&qry, self->refSeqsById.base,
+                    self->refSeqsById.elem_count,
+                    sizeof(qry), key_id_cmp, NULL);
+}
+
+static
+rc_t ReferenceMgr_NewReferenceSeq(ReferenceMgr *const self, ReferenceSeq **const rslt)
+{
+    unsigned const last_rs = self->refSeqs.elem_count;
+    rc_t rc = KDataBufferResize(&self->refSeqs, last_rs + 1);
+    
+    if (rc) return rc;
+    self->refSeq = self->refSeqs.base;
+    
+    *rslt = &self->refSeq[last_rs];
+    memset(&self->refSeq[last_rs], 0, sizeof(self->refSeq[0]));
+    self->refSeq[last_rs].mgr = self;
+
+    return 0;
+}
+
+static
+int CC config_cmp(void const *A, void const *B, void *Data)
+{
+    struct {
+        unsigned id;
+        unsigned seqId;
+        unsigned extra;
+        unsigned extralen;
+    } const *const a = A;
+    struct {
+        unsigned id;
+        unsigned seqId;
+        unsigned extra;
+        unsigned extralen;
+    } const *const b = B;
+    char const *const data = Data;
+    
+    return strcmp(&data[a->id], &data[b->id]);
+}
+
+static
+rc_t ReferenceMgr_ProcessConf(ReferenceMgr *const self, char Data[], unsigned const len)
+{
+    rc_t rc;
+    unsigned i;
+    unsigned j;
+    struct {
+        unsigned id;
+        unsigned seqId;
+        unsigned extra;
+        unsigned extralen;
+    } *data, tmp;
+    KDataBuffer buf;
+    
+    memset(&buf, 0, sizeof(buf));
+    buf.elem_bits = sizeof(data[0]) * 8;
+    
+    for (j = i = 0; i < len; ++j) {
+        unsigned lineEnd;
+        unsigned id;
+        unsigned acc;
+        unsigned ii;
+        
+        for (lineEnd = i; lineEnd != len; ++lineEnd) {
+            int const ch = Data[lineEnd];
+            
+            if (ch == '\n')
+                break;
+            if (ch == '\r')
+                break;
+        }
+        if (i == lineEnd) {
+            ++i;
+            continue;
+        }
+        Data[lineEnd] = '\0';
+        for (id = i; id != lineEnd; ++id) {
+            int const ch = Data[id];
+            
+            if (!isspace(ch))
+                break;
+        }
+        for (ii = id; ii != lineEnd; ++ii) {
+            int const ch = Data[ii];
+            
+            if (isspace(ch)) {
+                Data[ii++] = '\0';
+                break;
+            }
+        }
+        for (acc = ii; acc < lineEnd; ++acc) {
+            int const ch = Data[acc];
+            
+            if (!isspace(ch))
+                break;
+        }
+        if (acc >= lineEnd)
+            return RC(rcAlign, rcFile, rcReading, rcFormat, rcInvalid);
+        
+        for (ii = acc; ii != lineEnd; ++ii) {
+            int const ch = Data[ii];
+            
+            if (isspace(ch)) {
+                Data[ii++] = '\0';
+                break;
+            }
+        }
+        tmp.id = id;
+        tmp.seqId = acc;
+        tmp.extra = ii;
+        tmp.extralen = lineEnd > ii ? lineEnd - ii : 0;
+        
+        if ((rc = KDataBufferResize(&buf, buf.elem_count + 1)) != 0) return rc;
+        data = buf.base;
+        
+        data[buf.elem_count-1] = tmp;
+        i = lineEnd + 1;
+    }
+    
+    /* check unique */
+    ksort(data, buf.elem_count, sizeof(data[0]), config_cmp, Data);
+    for (i = 1; i < buf.elem_count; ++i) {
+        if (strcmp(&Data[data[i-1].id], &Data[data[i].id]) == 0)
+            return RC(rcAlign, rcIndex, rcConstructing, rcItem, rcExists);
+    }
+
+    for (i = 0; i != buf.elem_count; ++i) {
+        unsigned const extralen = data[i].extralen;
+        char const *const id    = &Data[data[i].id];
+        char const *const seqId = &Data[data[i].seqId];
+        char const *const extra = extralen ? &Data[data[i].extra] : NULL;
+        bool circular = false;
+        ReferenceSeq *rs;
+        
+        if (extra && extralen >= 8) {
+            char const *const circ = strcasestr(extra, "circular");
+            
+            circular = circ && (circ == extra || isspace(circ[-1])) &&
+                       (circ[8] == '\0' || isspace(circ[8]));
+        }
+        if ((rc = ReferenceMgr_NewReferenceSeq(self, &rs)) != 0) return rc;
+        
+        rs->id = string_dup( id, string_size( id ) );
+        if ( rs->id == NULL )
+            return RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+
+        rs->seqId = string_dup( seqId, string_size( seqId ) );
+        if ( rs->seqId == NULL )
+            return RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+        
+        rs->circular = circular;
+    }
+    KDataBufferWhack(&buf);
+    return 0;
+}
+
+static
+rc_t ReferenceMgr_Conf(ReferenceMgr *const self, char const conf[])
+{
+    rc_t rc;
     const KFile* kf = NULL;
 
-    assert(tree != NULL);
-    assert(dir != NULL);
+    if (conf == NULL)
+        return 0;
+    
+    rc = FindAndOpenConfigFile(self->rmgr, self->dir, &kf, conf);
+    if (rc == 0) {
+        uint64_t sz;
+        KDataBuffer buf;
+        
+        rc = KFileSize(kf, &sz);
+        assert(rc == 0);
+        if (sz == 0)
+            (void)PLOGMSG(klogWarn, (klogWarn, "Configuration file '$(file)' is empty", "file=%s", conf));
+        else {
+            rc = KDataBufferMakeBytes(&buf, sz + 1);
+            if (rc == 0) {
+                size_t nread;
+                
+                rc = KFileReadAll(kf, 0, buf.base, sz, &nread);
+                if (rc == 0) {
+                    assert(nread == sz);
+                    ((char *)buf.base)[sz] = '\n'; /* make sure that last line is terminated */
+                    rc = ReferenceMgr_ProcessConf(self, buf.base, sz + 1);
+                }
+                KDataBufferWhack(&buf);
+            }
+        }
+        KFileRelease(kf);
+    }
+    return rc;
+}
+
+static
+rc_t ReferenceMgr_FastaFile_GetSeqIds(KDataBuffer *const buf, char const data[], uint64_t const len)
+{
+    uint64_t pos;
+    int st = 0;
+    
+    for (pos = 0; pos < len; ++pos) {
+        int const ch = data[pos];
+        
+        if (st == 0) {
+            if (ch == '>') {
+                uint64_t const n = buf->elem_count;
+                rc_t rc = KDataBufferResize(buf, n + 1);
+                
+                if (rc)
+                    return rc;
+                ((uint64_t *)buf->base)[n] = pos;
+                st = 1;
+            }
+        }
+        else if (ch == '\r' || ch == '\n') 
+            st = 0;
+    }
+    return 0;
+}
+
+static
+rc_t ReferenceMgr_ImportFasta(ReferenceMgr *const self, ReferenceSeq *obj, KDataBuffer *const buf)
+{
+    unsigned seqId;
+    unsigned seqIdLen;
+    unsigned ln;
+    unsigned src;
+    unsigned dst;
+    unsigned start=0;
+    char *const data = buf->base;
+    unsigned const len = buf->elem_count;
+    rc_t rc;
+    MD5State mds;
+    
+    memset(obj, 0, sizeof(*obj));
+    obj->mgr = self;
+    
+    if (len == 0)
+        return 0;
+    assert(data[0] == '>');
+    
+    for (ln = 1; ln != len; ++ln) {
+        int const ch = data[ln];
+        
+        if (ch == '\r' || ch == '\n') {
+            data[ln] = '\0';
+            start = ln + 1;
+            break;
+        }
+    }
+    for (seqId = 1; seqId != ln; ++seqId) {
+        if (!isspace(data[seqId]))
+            break;
+    }
+    for (seqIdLen = 0; seqId + seqIdLen < ln; ++seqIdLen) {
+        if (isspace(data[seqId + seqIdLen])) {
+            ln = seqId + seqIdLen;
+            data[ln] = '\0';
+            break;
+        }
+    }
+    if (seqIdLen == 0)
+        return RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+    
+    obj->fastaSeqId = string_dup( &data[ seqId ], string_size( &data[ seqId ] ) );
+    if ( obj->fastaSeqId == NULL )
+        return RC(rcAlign, rcFile, rcReading, rcMemory, rcExhausted);
+    
+    MD5StateInit(&mds);
+    for (dst = src = start; src != len; ++src) {
+        int const ch = toupper(data[src]);
+        
+        if (isspace(ch))
+            continue;
+        
+        if (strchr(INSDC_4na_map_CHARSET, ch) == NULL && ch != 'X')
+            return RC(rcAlign, rcFile, rcReading, rcData, rcInvalid);
+        
+        data[dst] = ch == 'X' ? 'N' : ch;
+        MD5StateAppend(&mds, data + dst, 1);
+        ++dst;
+    }
+    MD5StateFinish(&mds, obj->md5);
+    rc = KDataBufferSub(buf, &obj->u.local.buf, start, dst - start);
+    if (rc == 0) {
+        obj->type = rst_local;
+        obj->seq_len = dst - start;
+    }
+    else
+        obj->type = rst_dead;
+    return rc;
+}
 
-    if( conf != NULL &&
-        (rc = FindAndOpenConfigFile(rmgr, dir, &kf, conf)) == 0 ) {
-        const KMMap* mm;
-        uint64_t pos = 0;
-        size_t page_sz;
-        const char* str;
+#define READ_CHUNK_SIZE (1024 * 1024)
 
-        if( (rc = KMMapMakeRead(&mm, kf)) == 0 ) {
+static
+rc_t ReferenceMgr_ImportFastaFile(ReferenceMgr *const self, KFile const *kf,
+                                  ReferenceSeq *rslt)
+{
+    uint64_t file_size;
+    rc_t rc = KFileSize(kf, &file_size);
+    
+    if (rc == 0) {
+        KDataBuffer fbuf;
+        
+        rc = KDataBufferMake(&fbuf, 8, file_size);
+        if (rc == 0) {
+            fbuf.elem_count = 0;
             do {
-                ReferenceSeq* tmp = NULL;
-                if( (rc = KMMapReposition(mm, pos, &page_sz)) == 0 &&
-                    (rc = KMMapAddrRead(mm, (const void**)&str)) == 0 ) {
-                    while( rc == 0 && page_sz > 0 ) {
-                        const char* n = memchr(str, '\n', page_sz);
-                        const char* r = memchr(str, '\r', page_sz);
-
-                        if( (tmp = calloc(1,  sizeof(*tmp))) == NULL ) {
-                            rc = RC(rcAlign, rcIndex, rcConstructing, rcMemory, rcExhausted);
-                            break;
-                        }
-                        if(n == NULL && r == NULL) {
-                            n = str + page_sz + 1;
-                            page_sz = 0;
-                        } else {
-                            if( n == NULL || (r != NULL && r < n) ) {
-                                n = r;
-                            }
-                            page_sz -= n - str + 1;
-                        }
-                        r = str;
-                        /* find id: chr6 */
-                        while( r < n && !isspace(*r)){ r++; }
-                        if( r == n ) {
-                            rc = RC(rcAlign, rcIndex, rcConstructing, rcFileFormat, rcInvalid);
-                            break;
-                        } else if( r - str >= sizeof(tmp->id) ) {
-                            rc = RC(rcAlign, rcIndex, rcConstructing, rcBuffer, rcInsufficient);
-                            break;
-                        } else {
-                            memcpy(tmp->id, str, r - str);
-                            tmp->id[r - str] = '\0';
-                        }
-                        /* skip space(s) */
-                        while( r < n && isspace(*r)){ r++; }
-                        if( r >= n ) {
-                            rc = RC(rcAlign, rcIndex, rcConstructing, rcFileFormat, rcInvalid);
-                            break;
-                        }
-                        str = r;
-                        /* get accession */
-                        while( r < n && !isspace(*r)){ r++; }
-                        if( r - str >= sizeof(tmp->accession) ) {
-                            rc = RC(rcAlign, rcIndex, rcConstructing, rcBuffer, rcInsufficient);
-                            break;
-                        } else {
-                            memcpy(tmp->accession, str, r - str);
-                            tmp->accession[r - str] = '\0';
-                        }
-                        if( RefSeqMgr_Exists(rmgr, tmp->accession, r - str) == 0 ) {
-                            tmp->local = false;
-                            if( (rc = BSTreeInsertUnique(tree, &tmp->dad, NULL, ReferenceSeq_Sort)) != 0 ) {
-                                break;
-                            }
-                            ALIGN_DBG("RefSeq translation added '%s' -> '%s'", tmp->id, tmp->accession);
-                        } else {
-                            /* skips unknown references, later may be picked up as local files */
-                            (void)PLOGMSG(klogWarn, (klogWarn, "RefSeq table '$(acc)' for '$(id)' was not found",
-                                                               "acc=%s,id=%s", tmp->accession, tmp->id));
-                            free(tmp);
-                        }
-                        tmp = NULL;
-                        str = n + 1;
+                size_t const readable = file_size - fbuf.elem_count;
+                size_t const to_read = readable > READ_CHUNK_SIZE ? READ_CHUNK_SIZE : readable;
+                size_t nread = 0;
+                
+                rc = KFileRead(kf, fbuf.elem_count, &((uint8_t *)fbuf.base)[fbuf.elem_count], to_read, &nread);
+                if (rc != 0 || nread == 0)
+                    break;
+                fbuf.elem_count += nread;
+            } while (fbuf.elem_count < file_size);
+            if (rc == 0) {
+                char const *const base = fbuf.base;
+                KDataBuffer seqIdBuf;
+                
+                memset(&seqIdBuf, 0, sizeof(seqIdBuf));
+                seqIdBuf.elem_bits = sizeof(file_size) * 8;
+                
+                rc = ReferenceMgr_FastaFile_GetSeqIds(&seqIdBuf, base, file_size);
+                if (rc == 0) {
+                    uint64_t const *const seqIdOffset = seqIdBuf.base;
+                    unsigned const seqIds = seqIdBuf.elem_count;
+                    unsigned i;
+                    KDataBuffer sub;
+                    
+                    if (rslt) {
+                        if (seqIds > 1)
+                            rc = RC(rcAlign, rcFile, rcReading, rcItem, rcUnexpected);
+                        
+                        memset(&sub, 0, sizeof(sub));
+                        KDataBufferSub(&fbuf, &sub, seqIdOffset[0], file_size - seqIdOffset[0]);
+                        rc = ReferenceMgr_ImportFasta(self, rslt, &sub);
+                        KDataBufferWhack(&sub);
                     }
+                    else
+                        for (i = 0; i != seqIds; ++i) {
+                            uint64_t const ofs = seqIdOffset[i];
+                            uint64_t const nxt = (i < seqIds - 1) ? seqIdOffset[i + 1] : file_size;
+                            uint64_t const len = nxt - ofs;
+                            ReferenceSeq tmp;
+                            ReferenceSeq *new_seq;
+                            
+                            memset(&sub, 0, sizeof(sub));
+                            KDataBufferSub(&fbuf, &sub, ofs, len);
+                            rc = ReferenceMgr_ImportFasta(self, &tmp, &sub);
+                            KDataBufferWhack(&sub);
+                            if (rc) break;
+                            
+                            rc = ReferenceMgr_NewReferenceSeq(self, &new_seq);
+                            if (rc) break;
+                            
+                            *new_seq = tmp;
+                        }
                 }
-                free(tmp);
-            } while(rc == 0 && page_sz > 0);
-            KMMapRelease(mm);
+                KDataBufferWhack(&seqIdBuf);
+            }
+            KDataBufferWhack(&fbuf);
         }
+    }
+    return rc;
+}
+
+static
+rc_t OpenFastaFile(KFile const **const kf,
+                   KDirectory const *const dir,
+                   char const base[],
+                   unsigned const len)
+{
+    char fname_a[4096];
+    char *fname_h = NULL;
+    char *fname = fname_a;
+    rc_t rc;
+    
+    if (len + 7 >= sizeof(fname_a)) {
+        fname_h = malloc(len + 7);
+        if (fname_h)
+            fname = fname_h;
+        else
+            return RC(rcAlign, rcFile, rcOpening, rcMemory, rcExhausted);
+    }
+    memcpy(fname, base, len);
+    memcpy(fname + len, ".fasta", 7);
+    
+    rc = KDirectoryOpenFileRead(dir, kf, fname);
+    if (rc) {
+        fname[len + 3] = '\0'; /* base.fasta -> base.fa */
+        
+        rc = KDirectoryOpenFileRead(dir, kf, fname);
+    }
+    free(fname_h);
+    return rc;
+}
+
+#if 1
+void ReferenceSeq_Dump(ReferenceSeq const *const rs, unsigned const i, key_id_t const *const key_id_array, unsigned const m)
+{
+    static char const *types[] = {
+        "'unattached'",
+        "'fasta'",
+        "'RefSeq-by-id'",
+        "'RefSeq-by-seqid'",
+        "'dead'"
+    };
+    unsigned j;
+    
+    ALIGN_CF_DBGF(("{ "));
+    ALIGN_CF_DBGF(("type: %s, ", (rs->type < 0 || rs->type > rst_dead) ? "null" : types[rs->type]));
+    
+    if (rs->id)
+        ALIGN_CF_DBGF(("id: '%s', ", rs->id));
+    else
+        ALIGN_CF_DBGF(("id: null, "));
+    
+    if (rs->seqId)
+        ALIGN_CF_DBGF(("seqId: '%s', ", rs->seqId));
+    else
+        ALIGN_CF_DBGF(("seqId: null, "));
+    
+    if (rs->fastaSeqId)
+        ALIGN_CF_DBGF(("fastaSeqId: '%s', ", rs->fastaSeqId));
+    else
+        ALIGN_CF_DBGF(("fastaSeqId: null, "));
+    
+    ALIGN_CF_DBGF(("seq-len: %u, ", rs->seq_len));
+    ALIGN_CF_DBGF(("circular: %s, ", rs->circular ? "true" : "false"));
+    
+    if (rs->md5) {
+        ALIGN_CF_DBGF(("md5: '"));
+        for (j = 0; j != 16; ++j)
+            ALIGN_CF_DBGF(("%02X", rs->md5[j]));
+        ALIGN_CF_DBGF(("', "));
+    }
+    else
+        ALIGN_CF_DBGF(("md5: null, "));
+    
+    
+    ALIGN_CF_DBGF(("keys: [ "));
+    for (j = 0; j != m; ++j) {
+        key_id_t const *const kid = &key_id_array[j];
+        
+        if (kid->id == i)
+            ALIGN_CF_DBGF(("'%s', ", kid->key));
+    }
+    ALIGN_CF_DBGF(("] }"));
+}
+
+void ReferenceMgr_DumpConfig(ReferenceMgr const *const self)
+{
+    unsigned const n = self->refSeqs.elem_count;
+    unsigned const m = self->refSeqsById.elem_count;
+    key_id_t const *const key_id_array = self->refSeqsById.base;
+    unsigned i;
+    
+    ALIGN_CF_DBGF(("config: [\n"));
+    for (i = 0; i != n; ++i) {
+        ALIGN_CF_DBGF(("\t"));
+        ReferenceSeq_Dump(&self->refSeq[i], i, key_id_array, m);
+        ALIGN_CF_DBGF((",\n"));
+    }
+    ALIGN_CF_DBGF(("]\n"));
+}
+#endif
+
+static
+rc_t ReferenceMgr_TryFasta(ReferenceMgr *const self, ReferenceSeq *const seq,
+                           char const id[], unsigned const idLen)
+{
+    KFile const *kf = NULL;
+    rc_t rc;
+    
+    rc = OpenFastaFile(&kf, self->dir, id, idLen);
+    
+    if (rc == 0) {
+        rc = ReferenceMgr_ImportFastaFile(self, kf, seq);
         KFileRelease(kf);
     }
     return rc;
 }
 
-LIB_EXPORT rc_t CC ReferenceMgr_Make(const ReferenceMgr** cself, VDatabase* db, const VDBManager* vmgr,
-                                     const uint32_t options, const char* conf, const char* path,
-                                     uint32_t max_seq_len, size_t cache, uint32_t num_open)
+static
+rc_t ReferenceSeq_GetRefSeqInfo(ReferenceSeq *const self)
+{
+    rc_t rc;
+    uint8_t const *md5;
+    
+    assert(self != NULL);
+    assert(self->type == rst_refSeqById || self->type == rst_refSeqBySeqId);
+    
+    if ((rc = RefSeq_Circular(self->u.refseq, &self->circular)) != 0)
+        return rc;
+    if ((rc = RefSeq_SeqLength(self->u.refseq, &self->seq_len)) != 0)
+        return rc;
+    if ((rc = RefSeq_MD5(self->u.refseq, &md5)) != 0)
+        return rc;
+    
+    memcpy(self->md5, md5, 16);
+    return 0;
+}
+
+static
+rc_t ReferenceSeq_Attach(ReferenceMgr *const self, ReferenceSeq *const rs)
 {
+    unsigned const seqid_len = rs->seqId ? string_size( rs->seqId ) : 0;
+    unsigned const id_len = rs->id ? string_size( rs->id ) : 0;
     rc_t rc = 0;
-    KDirectory* dir = NULL;
-    ReferenceMgr* obj = NULL;
-    uint32_t wopt = 0;
+    KFile const *kf = NULL;
     
-    wopt |= (options & ewrefmgr_co_allREADs) ? ewref_co_SaveRead : 0;
-    wopt |= (options & ewrefmgr_co_Coverage) ? ewref_co_Coverage : 0;
+    assert(rs->type == rst_unattached);
+    assert(id_len != 0 || seqid_len != 0);
+    
+    if (seqid_len) {
+        if (RefSeqMgr_Exists(self->rmgr, rs->seqId, seqid_len, NULL) == 0) {
+            rc = RefSeqMgr_GetSeq(self->rmgr, &rs->u.refseq, rs->seqId, seqid_len);
+            if (rc == 0) {
+                rs->type = rst_refSeqBySeqId;
+                rc = ReferenceSeq_GetRefSeqInfo(rs);
+            }
+            return rc;
+        }
+    }
+    if (id_len) {
+        if (RefSeqMgr_Exists(self->rmgr, rs->id, id_len, NULL) == 0) {
+            rc = RefSeqMgr_GetSeq(self->rmgr, &rs->u.refseq, rs->id, id_len);
+            if (rc == 0) {
+                rs->type = rst_refSeqById;
+                rc = ReferenceSeq_GetRefSeqInfo(rs);
+            }
+            return rc;
+        }
+    }
+    if (id_len) {
+        rc = OpenFastaFile(&kf, self->dir, rs->id, id_len);
+        if (rc && seqid_len)
+            rc = OpenFastaFile(&kf, self->dir, rs->seqId, seqid_len);
+    }
+    else
+        rc = OpenFastaFile(&kf, self->dir, rs->seqId, seqid_len);
+    
+    if (kf) {
+        ReferenceSeq tmp;
+        
+        rc = ReferenceMgr_ImportFastaFile(self, kf, &tmp);
+        KFileRelease(kf);
+        if (rc == 0) {
+            tmp.id = rs->id;
+            tmp.seqId = rs->seqId;
+            tmp.circular = rs->circular;
+            
+            *rs = tmp;
+        }
+        return rc;
+    }
+    return 0;
+}
 
-    if( max_seq_len == 0 ) {
-        max_seq_len = TableWriterRefSeq_MAX_SEQ_LEN;
+static
+rc_t ReferenceMgr_OpenSeq(ReferenceMgr *const self, ReferenceSeq **const rslt,
+                          char const id[],
+                          unsigned const seq_len,
+                          uint8_t const md5[16])
+{
+    unsigned const idLen = string_size( id );
+    key_id_t const *const fnd = ReferenceMgr_FindId(self, id);
+    
+    assert(rslt != NULL);
+    *rslt = NULL;
+    if (fnd) {
+        if (self->refSeq[fnd->id].type == rst_dead)
+            return RC(rcAlign, rcIndex, rcSearching, rcItem, rcInvalid);
+        *rslt = &self->refSeq[fnd->id];
+        return 0;
     }
-    if( cself == NULL || (vmgr == NULL && conf != NULL) ) {
-        rc = RC(rcAlign, rcIndex, rcConstructing, rcParam, rcNull);
-    } else if( (obj = calloc(1, sizeof(*obj) + max_seq_len - sizeof(obj->seq_buf))) == NULL ) {
-        rc = RC(rcAlign, rcIndex, rcConstructing, rcMemory, rcExhausted);
+    else {
+        unsigned const n = self->refSeqs.elem_count;
+        unsigned i;
+        ReferenceSeq *seq = NULL;
+        rc_t rc = 0;
+        
+        /* try to find by id; this should work most of the time */
+        for (i = 0; i != n; ++i) {
+            ReferenceSeq *const rs = &self->refSeq[i];
 
-    } else if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
-        BSTreeInit(&obj->tree);
-        obj->options = options;
-        obj->cache = cache;
-        obj->num_open_max = num_open;
-        obj->max_seq_len = max_seq_len;
-        if( (rc = VDBManagerAddRef(vmgr)) == 0 ) {
-            obj->vmgr = vmgr;
+            if (rs->type == rst_dead)
+                continue;
+            
+            if (rs->id && strcmp(rs->id, id) == 0) {
+                seq = rs;
+                break;
+            }
         }
-        if( rc == 0 && db != NULL && (rc = VDatabaseAddRef(db)) == 0 ) {
-            obj->db = db;
+        if (seq == NULL) {
+            /* try to find by seqId */
+            for (i = 0; i != n; ++i) {
+                ReferenceSeq *const rs = &self->refSeq[i];
+                
+                if (rs->type == rst_dead)
+                    continue;
+                
+                if (rs->seqId && strcasecmp(rs->seqId, id) == 0) {
+                    seq = rs;
+                    break;
+                }
+            }
         }
-        if( rc == 0 ) {
-            if( path == NULL ) {
-                if( (rc = KDirectoryAddRef(dir)) == 0 ) {
-                    obj->dir = dir;
+        if (seq == NULL) {
+            /* try to find id within fasta seqIds */
+            unsigned best_wt = 0;
+            unsigned best = n;
+            
+            for (i = 0; i != n; ++i) {
+                ReferenceSeq const *const rs = &self->refSeq[i];
+                
+                if (rs->fastaSeqId) {
+                    unsigned wt = str_weight(rs->fastaSeqId, id, idLen);
+                    
+                    if (wt != no_match) {
+                        if (seq_len && rs->seq_len == seq_len)
+                            wt |= seq_len_match;
+                        if (md5 && memcmp(rs->md5, md5, 16) == 0)
+                            wt |= md5_match;
+                    }
+                    if (best_wt < wt) {
+                        best_wt = wt;
+                        best = i;
+                    }
                 }
-            } else {
-                rc = KDirectoryOpenDirRead(dir, &obj->dir, false, path);
             }
-            if( rc == 0 ) {
-                rc = RefSeqMgr_Make(&obj->rmgr, obj->vmgr, 0, cache, num_open);
+            if (best < n)
+                seq = &self->refSeq[best];
+        }
+        if (seq == NULL) {
+            /* try id.fasta or id.fa */
+            rc = ReferenceMgr_NewReferenceSeq(self, &seq);
+            if (rc) return rc;
+            rc = ReferenceMgr_TryFasta(self, seq, id, idLen);
+            if (GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcPath)
+                rc = 0;
+            else if (rc) return rc;
+        }
+        else if (seq->type == rst_unattached) {
+            /* expect to get here most of the time
+             *
+             * ReferenceSeq_Attach tries to get reference:
+             *  from RefSeqMgr:
+             *   by seqId
+             *   by id
+             *  from self->dir (data directory)
+             *   id.fasta
+             *   id.fa
+             *   seqId.fasta
+             *   seqId.fa
+             */
+            rc = ReferenceSeq_Attach(self, seq);
+            if (rc) return rc;
+            
+            if (seq->type == rst_unattached && seq->seqId != NULL) {
+                /* attach didn't work for id; try to find seqId within fasta seqIds */
+                unsigned const seqIdLen = string_size( seq->seqId );
+                unsigned best_wt = 0;
+                unsigned best = n;
+                
+                for (i = 0; i != n; ++i) {
+                    ReferenceSeq const *const rs = &self->refSeq[i];
+                    
+                    if (rs->type == rst_local && rs->fastaSeqId) {
+                        unsigned wt = str_weight(rs->fastaSeqId, seq->seqId, seqIdLen);
+                        
+                        if (wt != no_match) {
+                            if (seq_len && rs->seq_len == seq_len)
+                                wt |= seq_len_match;
+                            if (md5 && memcmp(rs->md5, md5, 16) == 0)
+                                wt |= md5_match;
+                        }
+                        if (best_wt < wt) {
+                            best_wt = wt;
+                            best = i;
+                        }
+                    }
+                }
+                if (best < n) {
+                    char *const tmp_id = seq->id;
+                    char *const tmp_seqId = seq->seqId;
+                    bool const tmp_circ = seq->circular;
+                    
+                    *seq = self->refSeq[best];
+                    seq->id = tmp_id;
+                    seq->seqId = tmp_seqId;
+                    seq->fastaSeqId = NULL;
+                    seq->circular = tmp_circ;
+
+                    /* add another reference to the data buffer */
+                    rc = KDataBufferSub(&self->refSeq[best].u.local.buf, &seq->u.local.buf, 0, 0);
+                    if (rc) return rc;
+                }
             }
         }
-        if (rc == 0 && (rc = ReferenceMgr_Conf(obj->rmgr, &obj->tree, obj->dir, obj->vmgr, conf)) != 0 ) {
-            (void)PLOGERR(klogErr, (klogErr, rc, "failed to open configuration $(file)", "file=%s/%s", path ? path : ".", conf));
+        assert(seq != NULL);
+        if (seq->type == rst_unattached) {
+            /* nothing has worked and nothing left to try */
+            seq->type = rst_dead;
+            rc = RC(rcAlign, rcFile, rcConstructing, rcId, rcNotFound);
         }
+        else {
+            ReferenceSeq *alt = NULL;
+            
+            /* perform ambiguity check
+             *
+             * This search follows the same pattern as the main search but has
+             * more stringent conditions.  One hopes that it fails to find
+             * anything.
+             */
+            for (i = 0; i != n; ++i) {
+                ReferenceSeq *const rs = &self->refSeq[i];
+                
+                if (   rs->type != rst_dead
+                    && rs->type != rst_unattached
+                    && rs != seq
+                    && rs->id != NULL
+                    && strcmp(id, rs->id) == 0
+                    && (seq_len == 0 || seq_len == rs->seq_len))
+                {
+                    alt = rs;
+                    break;
+                }
+            }
+            if (alt == NULL) {
+                for (i = 0; i != n; ++i) {
+                    ReferenceSeq *const rs = &self->refSeq[i];
+                    
+                    if (   rs->type != rst_dead
+                        && rs->type != rst_unattached
+                        && rs != seq
+                        && rs->seqId != NULL
+                        && strcasecmp(id, rs->seqId) == 0
+                        && (seq_len == 0 || seq_len == rs->seq_len))
+                    {
+                        alt = rs;
+                        break;
+                    }
+                }
+            }
+            if (alt == NULL) {
+                unsigned best_wt = 0;
+                unsigned best = n;
+                
+                for (i = 0; i != n; ++i) {
+                    ReferenceSeq const *const rs = &self->refSeq[i];
+                    
+                    if (rs != seq && rs->fastaSeqId && rs != seq) {
+                        unsigned wt = str_weight(rs->fastaSeqId, id, idLen);
+                        
+                        if (wt != no_match) {
+                            if (seq_len && rs->seq_len == seq_len)
+                                wt |= seq_len_match;
+                            if (md5 && memcmp(rs->md5, md5, 16) == 0)
+                                wt |= md5_match;
+                        }
+                        if (best_wt < wt) {
+                            best_wt = wt;
+                            best = i;
+                        }
+                    }
+                }
+                if (best < n)
+                    alt = &self->refSeq[best];
+            }
+            /* try to knock the alternative out of consideration
+             * if it survives length and md5 tests, it is *really* likely to be
+             * a duplicate.
+             */
+            if (alt != NULL && seq_len != 0 && seq_len != alt->seq_len)
+                alt = NULL;
+            if (alt != NULL && md5 != NULL && memcmp(md5, alt->md5, 16) != 0)
+                alt = NULL;
+            if (alt != NULL) {
+                seq->type = rst_dead;
+                rc = RC(rcAlign, rcFile, rcConstructing, rcId, rcAmbiguous);
+            }
+        }
+        if ( seq->id == NULL )
+        {
+            seq->id = string_dup( id, string_size( id ) );
+            if ( seq->id == NULL )
+                return RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
+        }
+        /* finally, associate the id with the object and put it in the index */
+        {{
+            rc_t rc2 = ReferenceMgr_AddId(self, id, seq);
+            if (rc == 0)
+                rc = rc2;
+        }}
+        if (rc == 0)
+            *rslt = seq;
+        return rc;
     }
-    KDirectoryRelease(dir);
-    if( rc == 0 ) {
-        *cself = obj;
-        ALIGN_DBG("conf %s, local path '%s'", conf ? conf : "", path ? path : "");
-    } else {
-        ReferenceMgr_Release(obj, false, NULL, false);
-        ALIGN_DBGERR(rc);
+}
+
+LIB_EXPORT rc_t CC ReferenceMgr_SetCache(ReferenceMgr const *const self, size_t cache, uint32_t num_open)
+{
+    return RefSeqMgr_SetCache(self->rmgr, cache, num_open);
+}
+
+static
+rc_t OpenDataDirectory(KDirectory const **rslt, char const path[])
+{
+    KDirectory *dir;
+    rc_t rc = KDirectoryNativeDir(&dir);
+    
+    if (rc == 0) {
+        if (path) {
+            rc = KDirectoryOpenDirRead(dir, rslt, false, path);
+            KDirectoryRelease(dir);
+        }
+        else
+            *rslt = dir;
     }
     return rc;
 }
 
-static
-void CC ReferenceSeq_Whack(BSTNode *n, void *data)
+LIB_EXPORT rc_t CC ReferenceMgr_Make(ReferenceMgr const **cself, VDatabase *db,
+                                     VDBManager const* vmgr,
+                                     const uint32_t options, char const conf[], char const path[],
+                                     uint32_t max_seq_len, size_t cache, uint32_t num_open)
 {
-    ReferenceSeq* self = (ReferenceSeq*)n;
-    if( self->local ) {
-        KMMapRelease(self->u.local.map);
-    } else {
-        RefSeq_Release(self->u.refseq.o);
+    rc_t rc;
+    ReferenceMgr *self;
+    uint32_t wopt = 0;
+    
+    if (cself == NULL)
+        return RC(rcAlign, rcIndex, rcConstructing, rcParam, rcNull);
+    
+    wopt |= (options & ewrefmgr_co_allREADs) ? ewref_co_SaveRead : 0;
+    wopt |= (options & ewrefmgr_co_Coverage) ? ewref_co_Coverage : 0;
+
+    if (max_seq_len == 0)
+        max_seq_len = TableWriterRefSeq_MAX_SEQ_LEN;
+    
+    self = calloc(1, sizeof(*self));
+    if (self) {
+        rc = KDataBufferMakeBytes(&self->seq, max_seq_len);
+        if (rc == 0) {
+            self->compress.elem_bits = 32;
+            self->refSeqs.elem_bits = sizeof(ReferenceSeq) * 8;
+            self->refSeqsById.elem_bits = sizeof(key_id_t) * 8;
+            
+            self->options = options;
+            self->cache = cache;
+            self->num_open_max = num_open;
+            self->max_seq_len = max_seq_len;
+            if (db) VDatabaseAddRef(self->db = db);
+            rc = OpenDataDirectory(&self->dir, path);
+            if (rc == 0) {
+                rc = RefSeqMgr_Make(&self->rmgr, vmgr, 0, cache, num_open);
+                if (rc == 0) {
+                    rc = ReferenceMgr_Conf(self, conf);
+                    if (rc == 0) {
+                        *cself = self;
+                        ALIGN_DBG("conf %s, local path '%s'", conf ? conf : "", path ? path : "");
+                        return 0;
+                    }
+                    (void)PLOGERR(klogErr, (klogErr, rc, "failed to open configuration $(file)", "file=%s/%s", path ? path : ".", conf));
+                }
+            }
+        }
+        ReferenceMgr_Release(self, false, NULL, false);
     }
-    free(self);
+    else
+        rc = RC(rcAlign, rcIndex, rcConstructing, rcMemory, rcExhausted);
+
+    ALIGN_DBGERR(rc);
+
+    return rc;
+}
+
+#define ID_CHUNK_SZ 256
+
+typedef struct TChunk32_struct {
+    struct TChunk32_struct* next;
+    uint32_t id[ID_CHUNK_SZ]; /*** will only work with positive ids **/
+} TChunk32;
+
+typedef struct AlignId32List_struct {
+	TChunk32* head;
+	TChunk32* tail;
+	uint32_t  tail_qty;  /** number elements in the last chunk **/
+	uint32_t  chunk_qty; /** number of chunks */
+} AlignId32List;
+typedef struct AlignIdList_struct {
+	AlignId32List **sub_list;
+	uint32_t        sub_list_count; 
+} AlignIdList;
+
+static uint64_t AlignId32ListCount(AlignId32List *l)
+{ return (l->chunk_qty>0)?ID_CHUNK_SZ*(l->chunk_qty-1)+ l->tail_qty:0;}
+
+static uint64_t AlignIdListCount(AlignIdList *l)
+{
+	uint64_t ret=0;
+	if(l){
+		uint32_t i;
+		for(i=0;i<l->sub_list_count;i++){
+			if(l->sub_list[i]){
+				ret += AlignId32ListCount(l->sub_list[i]);
+			}
+		}
+	}
+	return ret;
+}
+static int int64_compare(const void *A, const void *B, void *ignore)
+{
+	return *(int64_t*)A -  *(int64_t*)B;
+}
+static uint64_t AlignIdListFlatCopy(AlignIdList *l,int64_t *buf,uint64_t num_elem,bool do_sort)
+{
+	uint64_t res=0;
+	uint32_t i,j;
+	AlignId32List* cl;
+	assert(l!=0);
+
+	if((cl = l->sub_list[0])!=NULL){
+		TChunk32* head  = cl->head;
+		while(head !=  cl->tail){
+			for(i=0;i<ID_CHUNK_SZ && res < num_elem;i++,res++){
+				buf[res] = head->id[i];
+			}
+			head = head->next;
+		}
+		for(i=0;i<cl->tail_qty && res < num_elem;i++,res++){
+			buf[res] = head->id[i];
+		}
+	}
+	for(j = 1; j< l->sub_list_count && res < num_elem;j++){
+		if((cl = l->sub_list[j])!=NULL){
+			TChunk32* head  = cl->head;
+			uint64_t  hi = ((uint64_t)j) << 32;
+			while(head !=  cl->tail){
+				for(i=0;i<ID_CHUNK_SZ && res < num_elem;i++,res++){
+					buf[res] = hi | head->id[i];
+				}
+				head = head->next;
+			}
+			for(i=0;i<cl->tail_qty && res < num_elem;i++,res++){
+				buf[res] = hi | head->id[i];
+			}
+		}
+	}
+	if(do_sort && res > 1) 
+		ksort(buf,res,sizeof(*buf),int64_compare,NULL);
+	return res;
+}
+
+static rc_t AlignId32ListAddId(AlignId32List *l,const uint32_t id)
+{
+	if(l->tail  == NULL){
+		l->head = l->tail = malloc(sizeof(*l->tail));
+		if(l->tail == NULL) return RC(rcAlign, rcTable, rcCommitting, rcMemory, rcExhausted);
+		l->chunk_qty =1;
+		l->tail_qty = 0;	
+	}
+	if(l->tail_qty == ID_CHUNK_SZ){/** chunk is full **/
+		l->tail->next = malloc(sizeof(*l->tail));
+		if(l->tail == NULL) return RC(rcAlign, rcTable, rcCommitting, rcMemory, rcExhausted);
+		l->tail = l->tail->next;
+		l->chunk_qty ++;
+		l->tail_qty = 0;	
+	}
+	l->tail->id[l->tail_qty++]=id;
+	return 0;
+}
+
+static rc_t AlignIdListAddId(AlignIdList *l,const int64_t id)
+{
+	uint32_t  sub_id,id32;
+	if(id < 0) return RC(rcAlign, rcTable, rcCommitting, rcId, rcOutofrange);
+	id32 = (uint32_t) id;
+	sub_id = id >> 32;
+	if(sub_id >= l->sub_list_count) return RC(rcAlign, rcTable, rcCommitting, rcId, rcOutofrange);
+	if(l->sub_list[sub_id] == NULL){
+		l->sub_list[sub_id] = calloc(1,sizeof(AlignId32List));
+		if(l->sub_list[sub_id] == NULL) return RC(rcAlign, rcTable, rcCommitting, rcMemory, rcExhausted);
+	}
+	return AlignId32ListAddId(l->sub_list[sub_id],id32);
+}
+
+static void AlignId32ListRelease(AlignId32List *l)
+{
+	if(l){
+		while(l->head != l->tail){
+			TChunk32* head = l->head;
+			l->head = l->head->next;
+			free(head);
+		}
+		free(l->head);
+		free(l);
+	}
+}
+static void AlignIdListRelease(AlignIdList *l)
+{
+        if(l){
+		uint32_t i;
+		for(i=0;i<l->sub_list_count;i++){
+			AlignId32ListRelease(l->sub_list[i]);
+		}
+		free(l->sub_list);
+		free(l);
+        }
 }
 
-#define ID_CHUNK_SZ 16
-typedef struct TChunk_struct {
-    struct TChunk_struct* next;
-    uint16_t secondary; /* bit mask */
-    int64_t id[ID_CHUNK_SZ];
-} TChunk;
 
 typedef struct {
+    AlignIdList*	idlist;
     ReferenceSeqCoverage cover;
-    TChunk* head;
-    TChunk* tail;
-    uint8_t tail_qty; /* id count within tail */
-    uint32_t id_qty; /* id count overall */
-    uint8_t* hilo; /* array of max_seq_len */
+    INSDC_coord_len bin_seq_len;
 } TCover;
 
 static
-void ReferenceMgr_TCoverRelease(const TCover* c)
+void ReferenceMgr_TCoverRelease(TCover* c)
 {
-    TChunk* h = c->head;
-    while( h != NULL ) {
-        TChunk* n = h->next;
-        free(h);
-        h = n;
-    }
+	if(c){
+		AlignIdListRelease(c->idlist);
+		c->idlist = NULL;
+	}
 }
+static 
+rc_t ReferenceMgr_TCoverSetMaxId(TCover* c,int64_t id)
+{
+	uint32_t  sub_id;
+	if(id < 0) return RC(rcAlign, rcTable, rcCommitting, rcId, rcOutofrange);
+	sub_id = id >> 32;
+	if(c->idlist == NULL){
+		c->idlist = calloc(1,sizeof(AlignIdList));
+		if(c->idlist==NULL) return RC(rcAlign, rcTable, rcCommitting, rcMemory, rcExhausted);
+		c->idlist->sub_list_count = sub_id+1;
+		c->idlist->sub_list = calloc(c->idlist->sub_list_count,sizeof(c->idlist->sub_list[0]));
+		if( c->idlist->sub_list == NULL) return RC(rcAlign, rcTable, rcCommitting, rcMemory, rcExhausted);
+	} else {
+		return RC(rcAlign, rcTable, rcCommitting, rcParam, rcUnexpected);
+	}
+	return 0;
+}
+
 static
-int CC int64_cmp( const void* l, const void* r, void *data )
+rc_t CoverageGetSeqLen(ReferenceMgr const *const mgr, TCover data[], uint64_t const rows)
 {
-    return *(const int64_t*)l - *(const int64_t*)r;
+    TableReaderColumn acols[] =
+    {
+        {0, "(INSDC:coord:len)SEQ_LEN", {NULL}, 0, 0},
+        {0, NULL, {NULL}, 0, 0}
+    };
+    VTable const *tbl;
+    rc_t rc = VDatabaseOpenTableRead(mgr->db, &tbl, "REFERENCE");
+    
+    if (rc == 0) {
+        TableReader const *reader;
+        
+        rc = TableReader_Make(&reader, tbl, acols, 0);
+        if (rc == 0) {
+            uint64_t i;
+            
+            for (i = 0; i != rows; ++i) {
+                rc = TableReader_ReadRow(reader, i + 1);
+                if (rc == 0 && acols->len > 0)
+                    data[i].bin_seq_len = acols->base.coord_len[0];
+            }
+            TableReader_Whack(reader);
+        }
+        VTableRelease(tbl);
+    }
+    return rc;
 }
 
 static
-rc_t ReferenceMgr_ReCover(const ReferenceMgr* cself, uint64_t rows)
+rc_t ReferenceMgr_ReCover(const ReferenceMgr* cself, uint64_t ref_rows)
 {
     rc_t rc = 0;
-    int i;
     uint64_t new_rows = 0;
     const TableWriterRefCoverage* cover_writer = NULL;
-
+    
     TableReaderColumn acols[] =
     {
-        {0, "REF_ID", NULL, 0, 0},
-        {0, "REF_START", NULL, 0, 0},
-        {0, "REF_LEN", NULL, 0, 0},
-        {0, "MISMATCH", NULL, 0, 0},
-        {0, "REF_OFFSET", NULL, 0, 0},
-        {0, "HAS_REF_OFFSET", NULL, 0, 0},
-        {0, NULL, NULL, 0, 0}
+        {0, "REF_ID", {NULL}, 0, 0},
+        {0, "REF_START", {NULL}, 0, 0},
+        {0, "CIGAR_LONG",{NULL}, 0, 0},
+        {0, "REF_POS",{NULL}, 0, 0},
+        {0, NULL, {NULL}, 0, 0}
     };
-    const int64_t** al_ref_id = (const int64_t**)&acols[0].base;
-    const INSDC_coord_zero** al_ref_start = (const INSDC_coord_zero**)&acols[1].base;
-    const INSDC_coord_len** al_ref_len =  (const INSDC_coord_len**)&acols[2].base;
-    const uint32_t* mismatch_len =  &acols[3].len;
-    const uint32_t* ref_offset_len =  &acols[4].len;
-    const int32_t** ref_offset = (const int32_t **)&acols[4].base;
-    const uint8_t** has_ref_offset = (const uint8_t **)&acols[5].base;
-
-    /* TODO TO DO TBD change to work properly with mutiple reads in alignment table */
-
-    if( (rc = TableWriterRefCoverage_Make(&cover_writer, cself->db)) == 0 ) {
-        rc_t rc1 = 0;
-        /* array of ids for sorting and writing to table:
-           for head prim_ids , from tail secondry_ids */
-        int64_t ref_from = 1, *ids = NULL, rr;
-        size_t ids_sz = 0;
-        uint64_t ref_qty = rows;
-
-        ALIGN_DBG("sizeof(TCover) %u, sizeof(TChunk) %u", sizeof(TCover), sizeof(TChunk));
-        while( rc == 0 && ref_from <= rows ) {
-            const char* tbls[] = {"PRIMARY_ALIGNMENT", "SECONDARY_ALIGNMENT"};
-            TCover* data = NULL;
-            uint8_t* hilo;
-            /* allocate mem for up to ref_qty of reference coverage data up to 4Gb */
-            do {
-                TCover* t = NULL;
-                if( (ref_qty * (sizeof(*t) + cself->max_seq_len)) > (4L * 1024 * 1024 * 1024) ||
-                    (t = calloc(ref_qty, sizeof(*t) + cself->max_seq_len)) == NULL ) {
-                    ref_qty = ref_qty / 3 * 2;
+    const int64_t** al_ref_id = &acols[0].base.i64;
+    const INSDC_coord_zero** al_ref_start = &acols[1].base.coord0;
+    const TableReaderColumn* cigar =  &acols[2];
+    const INSDC_coord_zero** al_ref_pos = &acols[3].base.coord0;
+    /* order is important see ReferenceSeqCoverage struct */
+    struct {
+        const char* nm;
+	    const char* col;
+        bool ids_only;
+    } tbls[] = { {"PRIMARY_ALIGNMENT", "PRIMARY_ALIGNMENT_IDS",false},
+        {"SECONDARY_ALIGNMENT", "SECONDARY_ALIGNMENT_IDS",false},
+        {"EVIDENCE_INTERVAL", "EVIDENCE_INTERVAL_IDS", true} };
+	int tbls_qty=(sizeof(tbls)/sizeof(tbls[0]));
+    rc_t rc1 = 0;
+    int64_t rr;
+    uint32_t i;
+    uint8_t* hilo=NULL;
+    TCover* data = NULL;
+    
+    /* allocate mem for ref_rows of reference coverage*/
+    if((data = calloc(ref_rows, (sizeof(*data) + cself->max_seq_len))) == NULL ) {
+		rc = RC(rcAlign, rcTable, rcCommitting, rcMemory, rcExhausted);
+    } else {
+		/** allocation for both data and hilo was done in 1 shot ***/
+		hilo = (uint8_t *)&data[ref_rows];
+        rc = CoverageGetSeqLen(cself, data, ref_rows);
+    }
+    /* grep through tables for coverage data */
+    ALIGN_R_DBG("covering REFERENCE rowid range [1:%ld]",ref_rows);
+    for(i = 0; rc == 0 && i < tbls_qty; i++) { /* TABLE LOOP STARTS */
+        const VTable* table = NULL;
+        const TableReader* reader = NULL;
+        int64_t al_from;
+        uint64_t al_qty;
+        
+        ALIGN_R_DBG("covering REFERENCE with %s", tbls[i].nm);
+        if( (rc = VDatabaseOpenTableRead(cself->db, &table, tbls[i].nm)) != 0 ) {
+            if( GetRCState(rc) == rcNotFound ) {
+                ALIGN_R_DBG("table %s was not found, ignored", tbls[i].nm);
+                rc = 0;
+                continue;
+            } else {
+                break;
+            }
+        }
+        if( (rc = TableReader_Make(&reader, table, acols, cself->cache)) == 0 &&
+           (rc = TableReader_IdRange(reader, &al_from, &al_qty)) == 0 ) {
+            int64_t al_rowid;
+            
+            for(al_rowid = al_from; rc == 0 && al_rowid < al_from + al_qty; al_rowid++) {
+                if( (rc = TableReader_ReadRow(reader, al_rowid)) != 0 ) {
+                    break;
+                }
+                rr    = **al_ref_id-1;
+                /**** Record ALIGNMENT_IDS ***/
+                if(   data[rr].idlist == NULL 
+                   && (rc = ReferenceMgr_TCoverSetMaxId(data+rr,al_from + al_qty))!=0){
+                    break; /*** out-of-memory ***/
                 }
-                if( ref_qty < 1 ) {
-                    rc = RC(rcAlign, rcTable, rcCommitting, rcMemory, rcExhausted);
+                if((rc = AlignIdListAddId(data[rr].idlist,al_rowid))!=0){
+                    break; /*** out-of-memory ***/
                 }
-                data = t;
-                hilo = (uint8_t*)&data[ref_qty];
-            } while( rc == 0 && data == NULL );
-            /* grep through tables for coverage data */
-            ALIGN_DBG("covering REFERENCE rowid range [%ld:%ld]", ref_from, ref_from + ref_qty - 1);
-            for(i = 0; rc == 0 && i < sizeof(tbls)/sizeof(tbls[0]); i++ ) {
-                const VTable* table = NULL;
-                const TableReader* reader = NULL;
-                int64_t al_from;
-                uint64_t al_qty;
-
-                if( (rc = VDatabaseOpenTableRead(cself->db, &table, tbls[i])) == 0 &&
-                    (rc = TableReader_Make(&reader, table, acols, cself->cache)) == 0 &&
-                    (rc = TableReader_IdRange(reader, &al_from, &al_qty)) == 0 ) {
-                    int64_t al_rowid;
-                    for(al_rowid = al_from; rc == 0 && al_rowid <= al_qty; al_rowid++) {
-                        int64_t ref_r, al_ref_id_end;
-                        uint64_t j, seq_start = 0, refseq_start, refseq_len;
-                        if( (rc = TableReader_ReadRow(reader, al_rowid)) != 0 ) {
+                /**** Done alignment ids ***/
+                if( !tbls[i].ids_only ) { /*** work on statistics ***/
+                    char const *c = cigar->base.str;
+                    const char *c_end = c + cigar->len;
+                    int64_t const global_ref_pos = rr*cself->max_seq_len + **al_ref_start; /** global_ref_start **/
+                    int64_t const global_refseq_start = global_ref_pos -  **al_ref_pos;   /** global_ref_start of current reference **/
+                    unsigned const bin_no = global_ref_pos / cself->max_seq_len;
+                    TCover *const bin = &data[bin_no];
+                    uint8_t *const cov = &hilo[global_ref_pos];
+                    int64_t ref_offset = 0;
+                    int64_t max_ref_offset = 0;
+                    int64_t min_ref_offset = 0;
+                    int64_t j;
+
+                    while (rc == 0 && c < c_end) {
+                        int op_len = strtol(c, (char **)&c, 10);
+                        int const op = *c++;
+                        
+                        switch (op){
+                        case 'I':/* extra bases in the read **/
+                            ++bin->cover.indels;
+                        case 'S':/* skip in the read */
                             break;
+                        case 'B':/* back up in the sequence */
+                            if (ref_offset > op_len)
+                                ref_offset -= op_len;
+                            else
+                                ref_offset = 0;
+                            break;
+                        case 'D': /** delete in the reference ***/
+                            ++bin->cover.indels;
+                        case 'N': /** expected skip in the reference ***/
+                            ref_offset += op_len;
+                            break;
+                        case 'X':
+                            bin->cover.mismatches += op_len;
+                        case '=':
+                            ref_offset += op_len;
+                            break;
+                        default:
+                            rc = RC(rcAlign, rcTable, rcCommitting, rcData, rcUnrecognized);
                         }
-                        /* alignment can run across multiple reference chunks */
-                        al_ref_id_end = cself->max_seq_len - **al_ref_start;
-                        if( al_ref_id_end < **al_ref_len ) {
-                            al_ref_id_end = (**al_ref_len - al_ref_id_end) / cself->max_seq_len + 1;
-                        } else {
-                            al_ref_id_end = 1;
-                        }
-                        al_ref_id_end += **al_ref_id;
-                        refseq_start = **al_ref_start;
-                        ALIGN_DBG("al row %li has REF_ID [%ld,%ld], REF_START: %u, REF_LEN %u",
-                                    al_rowid, **al_ref_id, al_ref_id_end - 1, **al_ref_start, **al_ref_len);
-                        for(ref_r = **al_ref_id; ref_r < al_ref_id_end; ref_r++) {
-                            refseq_len = cself->max_seq_len - refseq_start;
-                            if( seq_start + refseq_len > **al_ref_len ) {
-                                refseq_len = **al_ref_len - seq_start;
+                        if (min_ref_offset > ref_offset)
+                            min_ref_offset = ref_offset;
+                        if (max_ref_offset < ref_offset)
+                            max_ref_offset = ref_offset;
+                    }
+                    for (j = min_ref_offset; j < max_ref_offset; ++j) {
+                        unsigned const hl = cov[j];
+                        
+                        if (hl < UINT8_MAX)
+                            cov[j] = hl + 1;
+                    }
+                    /*** check if OVERLAPS are needed ***/
+                    {
+                        int64_t min_rr = (global_ref_pos + min_ref_offset)/cself->max_seq_len;
+                        int64_t max_rr = (global_ref_pos + max_ref_offset)/cself->max_seq_len;
+                        
+                        if(min_rr < 0) min_rr = 0;
+                        if(max_rr >= ref_rows) max_rr = ref_rows -1;
+                        
+                        assert(min_rr<= max_rr);
+                        
+                        if(min_rr < max_rr){
+                            int64_t  overlap_ref_pos; /** relative the beginning of the reference **/
+                            uint32_t overlap_ref_len = (global_ref_pos + max_ref_offset) % cself->max_seq_len ;
+                            
+                            min_rr++;
+                            if (global_ref_pos + min_ref_offset > global_refseq_start) {
+                                overlap_ref_pos = global_ref_pos + min_ref_offset - global_refseq_start;
                             }
-                            ALIGN_DBG("covered ref_id %ld [%ld,%ld]", ref_r, refseq_start, refseq_start + refseq_len);
-                            if( ref_r >= ref_from && ref_r < ref_from + ref_qty ) {
-                                uint64_t k = ref_r - ref_from;
-                                ALIGN_DBG("%ld is a match for %ld[%lu]", ref_r, ref_from + k, k);
-                                if( data[k].tail_qty == ID_CHUNK_SZ || data[k].head == NULL ) {
-                                    TChunk* x = malloc(sizeof(*(data[k].tail)));
-                                    while( x == NULL ) {
-                                        /* release last ref cover_writer record and retry */
-                                        ReferenceMgr_TCoverRelease(&data[--ref_qty]);
-                                        ALIGN_DBG("downsize covering REFERENCE rowid range [%ld:%ld] from %s",
-                                                  ref_from, ref_from + ref_qty - 1, tbls[i]);
-                                        if( ref_qty < 1 ) {
-                                            rc = RC(rcAlign, rcTable, rcCommitting, rcMemory, rcExhausted);
-                                            break;
-                                        } else if( ref_r >= ref_from + ref_qty ) {
-                                            break;
-                                        }
-                                    }
-                                    if( rc != 0 ) {
-                                        break;
-                                    }
-                                    if( data[k].head == NULL ) {
-                                        data[k].head = x;
-                                    } else {
-                                        data[k].tail->next = x;
-                                    }
-                                    x->secondary = 0;
-                                    data[k].tail = x;
-                                    data[k].tail->next = NULL;
-                                    data[k].tail_qty = 0;
-                                    data[k].hilo = &hilo[cself->max_seq_len * k];
-                                }
-                                data[k].tail->id[data[k].tail_qty] = al_rowid;
-                                if( i > 0 ) {
-                                    data[k].tail->secondary |= 1 << data[k].tail_qty;
-                                }
-                                data[k].tail_qty++;
-                                data[k].id_qty++;
-                                if( ref_r == **al_ref_id ) {
-                                    /* write those to 1st chunk only */
-                                    
-                                    unsigned left_soft_clip = 0;
-                                    
-                                    if (*ref_offset_len > 0 && (*has_ref_offset)[0] != 0 && (*ref_offset)[0] < 0) {
-                                        left_soft_clip = 1;
-                                    }
-                                    data[k].cover.mismatches += *mismatch_len;
-                                    data[k].cover.indels += *ref_offset_len - left_soft_clip;
-                                }
-                                for(j = refseq_start; j < refseq_start + refseq_len; j++) {
-                                    if( data[k].hilo[j] < UINT8_MAX ) {
-                                        data[k].hilo[j]++;
-                                    }
+                            else {
+                                overlap_ref_pos = 1;
+                            }
+                            for ( ; min_rr < max_rr; ++min_rr) {
+                                if (   data[min_rr].cover.overlap_ref_pos[i] == 0 /*** NOT SET***/
+                                    || overlap_ref_pos < data[min_rr].cover.overlap_ref_pos[i])
+                                {
+									data[min_rr].cover.overlap_ref_pos[i] = overlap_ref_pos;
                                 }
+                                data[min_rr].cover.overlap_ref_len[i] = cself->max_seq_len; /*** in between chunks get full length of overlap **/
+                            }
+                            if (   data[min_rr].cover.overlap_ref_pos[i] == 0
+                                || overlap_ref_pos < data[min_rr].cover.overlap_ref_pos[i])
+                            {
+								data[min_rr].cover.overlap_ref_pos[i] = overlap_ref_pos;
                             }
-                            seq_start += refseq_len;
-                            refseq_start = 0;
+                            if (overlap_ref_len > data[min_rr].cover.overlap_ref_len[i])
+								data[min_rr].cover.overlap_ref_len[i] = overlap_ref_len;
                         }
-                        rc = rc ? rc : Quitting();
                     }
-                }
-                VTableRelease(table);
-                TableReader_Whack(reader);
+                } /**** DONE WITH WORK ON STATISTICS ***/
+                ALIGN_DBGERR(rc);
+                rc = rc ? rc : Quitting();
             }
-            /* prep and write coverage data */
-            for(rr = 0; rc == 0 && rr < ref_qty; rr++) {
-                uint32_t i;
-                TChunk* x;
-                ReferenceSeqCoverage* c = &data[rr].cover;
-
-                while( ids_sz < data[rr].id_qty ) {
-                    int64_t* n = realloc(ids, data[rr].id_qty * sizeof(*ids));
-                    if( n == NULL ) {
-                        ReferenceMgr_TCoverRelease(&data[--ref_qty]);
-                        ALIGN_DBG("downsize covering REFERENCE rowid range [%ld:%ld]", ref_from, ref_from + ref_qty - 1);
-                        if( ref_qty < 1 ) {
-                            rc = RC(rcAlign, rcTable, rcCommitting, rcMemory, rcExhausted);
-                            break;
-                        } else if( rr >= ref_qty ) {
-                            break;
+		    /*** HAVE TO RELEASE **/
+		    TableReader_Whack(reader);
+		    VTableRelease(table);
+		    /*** NOW SAVE AND RELEASE THE COLUMN ***/
+		    if( (rc = TableWriterRefCoverage_MakeIds(&cover_writer, cself->db, tbls[i].col)) == 0 ) {
+                for(rr=0; rc ==0 &&  rr < ref_rows; rr ++){
+                    uint64_t num_elem = AlignIdListCount( data[rr].idlist);
+                    uint64_t num_elem_copied = 0;
+                    if(num_elem > 0 ){
+#define BUF_STACK_COUNT 128 * 1024
+                        int64_t buf_stack[BUF_STACK_COUNT];
+                        int64_t *buf_alloc = NULL;
+                        int64_t *buf = buf_stack;
+                        if(num_elem > BUF_STACK_COUNT){
+                            buf=buf_alloc=malloc(num_elem*sizeof(buf[0]));
+                            if(buf_alloc == NULL) 
+                                rc = RC(rcAlign, rcTable, rcCommitting, rcMemory, rcExhausted);
                         }
-                    } else {
-                        ids = n;
-                        ids_sz = data[rr].id_qty;
-                    }
-                }
-                if( rc != 0 || rr >= ref_qty ) {
-                    break;
-                }
-                ALIGN_DBGF(("ref rowid %ld:", ref_from + rr));
-                x = data[rr].head;
-                while( x != NULL ) {
-                    uint8_t q = data[rr].tail == x ? data[rr].tail_qty : ID_CHUNK_SZ;
-                    for(i = 0; i < q; i++) {
-                        ALIGN_DBGF((" %lu[%c]", x->id[i], (x->secondary & i) ? 's' : 'p'));
-                        if( x->secondary & i ) {
-                            ids[ids_sz - ++c->secondary_ids.elements] = x->id[i];
-                        } else {
-                            ids[c->primary_ids.elements++] = x->id[i];
+                        if(rc == 0){
+                            num_elem_copied = AlignIdListFlatCopy(data[rr].idlist,buf,num_elem,true);
+                            assert(num_elem == num_elem_copied);
+                        }
+                        ReferenceMgr_TCoverRelease(data+rr); /** release memory ***/
+                        if(rc == 0){
+                            rc = TableWriterRefCoverage_WriteIds(cover_writer, rr+1, buf,num_elem);
                         }
+                        if(buf_alloc) free(buf_alloc);
+                    } else {
+                        rc = TableWriterRefCoverage_WriteIds(cover_writer, rr+1, NULL,0);
                     }
-                    x = x->next;
                 }
-                c->primary_ids.buffer = ids;
-                c->secondary_ids.buffer = &ids[ids_sz - c->secondary_ids.elements];
-                ALIGN_DBGF((" ids 0x%p:0x%p,", ids, ids + ids_sz));
-                ALIGN_DBGF((" prm 0x%p q=%lu,", c->primary_ids.buffer, c->primary_ids.elements));
-                ALIGN_DBGF((" 2nd 0x%p q=%lu\n", c->secondary_ids.buffer, c->secondary_ids.elements));
-                ksort((void*)(c->primary_ids.buffer), c->primary_ids.elements, sizeof(*ids), int64_cmp, NULL);
-                ksort((void*)(c->secondary_ids.buffer), c->secondary_ids.elements, sizeof(*ids), int64_cmp, NULL);
-                if( data[rr].hilo != NULL ) {
-                    memset(&c->low, 0xFF, sizeof(c->low));
-                    for(i = 0; i < cself->max_seq_len; i++) {
-                        if( c->high < data[rr].hilo[i] ) {
-                            c->high = data[rr].hilo[i];
-                        }
-                        if( c->low > data[rr].hilo[i] ) {
-                            c->low = data[rr].hilo[i];
-                        }
+                if(rc == 0){
+                    rc = TableWriterRefCoverage_Whack(cover_writer, rc == 0, &new_rows);
+                    if( rc == 0  && ref_rows != new_rows ) {
+                        rc = RC(rcAlign, rcTable, rcCommitting, rcData, rcInconsistent);
                     }
                 }
-                rc = TableWriterRefCoverage_Write(cover_writer, ref_from + rr, c);
-                ReferenceMgr_TCoverRelease(&data[rr]);
-            }
-            free(data);
-            ref_from += ref_qty;
-            ref_qty = rows - ref_from + 1;
-        }
-        free(ids);
-        rc1 = TableWriterRefCoverage_Whack(cover_writer, rc == 0, &new_rows);
-        rc = rc ? rc : rc1;
-        if( rc == 0 && rows != new_rows ) {
-            rc = RC(rcAlign, rcTable, rcCommitting, rcData, rcInconsistent);
-        }
-    }
-    return rc;
+                ALIGN_DBGERR(rc);
+		    }
+		} else {
+			TableReader_Whack(reader);
+			VTableRelease(table);
+		}
+	}/* TABLE LOOP ENDS **/
+    /* prep and write coverage data */
+	if(rc == 0) {
+        uint64_t k;
+        
+		rc = TableWriterRefCoverage_MakeCoverage(&cover_writer, cself->db, 0);
+		for (rr = 0, k = 0; rc == 0 && rr != ref_rows; ++rr, k += cself->max_seq_len) {
+            unsigned hi = 0;
+            unsigned lo = 255;
+            
+		    for (i = 0; i != data[rr].bin_seq_len; ++i) {
+                unsigned const depth = hilo[k + i];
+                
+                if (hi < depth) hi = depth;
+                if (lo > depth) lo = depth;
+		    }
+            data[rr].cover.high = hi;
+            data[rr].cover.low  = lo;
+		    rc = TableWriterRefCoverage_WriteCoverage(cover_writer,rr+1, &data[rr].cover);
+		}
+		free(data);
+		rc1 = TableWriterRefCoverage_Whack(cover_writer, rc == 0, &new_rows);
+		rc = rc ? rc : rc1;
+		if( rc == 0 && ref_rows != new_rows ) {
+		    rc = RC(rcAlign, rcTable, rcCommitting, rcData, rcInconsistent);
+		}
+	}
+    ALIGN_DBGERR(rc);
+	return rc;
 }
 
-LIB_EXPORT rc_t CC ReferenceMgr_Release(const ReferenceMgr* cself, bool commit, uint64_t* rows, bool build_coverage)
+LIB_EXPORT rc_t CC ReferenceMgr_Release(const ReferenceMgr *cself,
+                                        bool commit,
+                                        uint64_t *const Rows,
+                                        bool build_coverage)
 {
     rc_t rc = 0;
-    if( cself != NULL ) {
-        uint64_t rr, *r = rows ? rows : &rr;
-        ReferenceMgr* self = (ReferenceMgr*)cself;
 
-        rc = TableWriterRef_Whack(self->writer, commit, r);
-        BSTreeWhack(&self->tree, ReferenceSeq_Whack, NULL);
+    if (cself != NULL) {
+        ReferenceMgr *const self = (ReferenceMgr *)cself;
+        uint64_t rows;
+        unsigned i;
+        
+        rc = TableWriterRef_Whack(self->writer, commit, &rows);
+        if (Rows) *Rows = rows;
         KDirectoryRelease(self->dir);
-        if( rc == 0 && build_coverage ) {
-            rc = ReferenceMgr_ReCover(cself, *r);
+        
+        for (i = 0; i != self->refSeqsById.elem_count; ++i)
+            free((void *)((key_id_t *)self->refSeqsById.base)[i].key);
+        
+        for (i = 0; i != self->refSeqs.elem_count; ++i)
+            ReferenceSeq_Whack(&self->refSeq[i]);
+        
+        KDataBufferWhack(&self->compress);
+        KDataBufferWhack(&self->seq);
+        KDataBufferWhack(&self->refSeqs);
+        KDataBufferWhack(&self->refSeqsById);
+        
+        if (rc == 0 && build_coverage && commit)
+            rc = ReferenceMgr_ReCover(cself, rows);
+#if 0 
+        {
+            VTable* t = NULL;
+            
+            if (VDatabaseOpenTableUpdate(self->db, &t, "SECONDARY_ALIGNMENT") == 0) {
+                VTableDropColumn(t, "TMP_MISMATCH");
+                VTableDropColumn(t, "TMP_HAS_MISMATCH");
+            }
+            VTableRelease(t);
         }
+#endif
         VDatabaseRelease(self->db);
-        VDBManagerRelease(self->vmgr);
         RefSeqMgr_Release(self->rmgr);
         free(self);
     }
@@ -619,228 +1737,139 @@ LIB_EXPORT rc_t CC ReferenceMgr_Release(const ReferenceMgr* cself, bool commit,
 }
 
 static
-rc_t ReferenceSeq_Local(ReferenceSeq** self, BSTree* tree, const char* id, const KFile* kf)
+rc_t ReferenceSeq_ReadDirect(ReferenceSeq *self,
+                             int offset,
+                             unsigned const len,
+                             bool read_circular,
+                             uint8_t buffer[],
+                             unsigned* written,
+                             bool force_linear)
 {
-    rc_t rc = 0;
-    ReferenceSeq* obj;
-    size_t page_sz;
+    *written = 0;
+    if (len == 0)
+        return 0;
     
-    assert(self != NULL);
-    assert(id != NULL);
-    assert(kf != NULL);
-        
-    *self = NULL;
-    if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
-        rc = RC(rcAlign, rcFile, rcConstructing, rcMemory, rcExhausted);
-    } else if( ((obj->local = true)) &&
-               (rc = KFileSize(kf, &obj->u.local.file_size)) == 0 &&
-               (rc = KMMapMakeRead(&obj->u.local.map, kf)) == 0 &&
-               (rc = KMMapReposition(obj->u.local.map, 0, &page_sz)) == 0 ) {
-        const char* addr;
-
-        obj->u.local.map_to = page_sz;
-        /* make sure we have 2 lines */
-        if( (rc = KMMapAddrRead(obj->u.local.map, (const void**)&addr)) == 0 ) {
-            const char* sp = memchr(addr, ' ', page_sz);
-            const char* nl1 = memchr(addr, '\n', page_sz);
-            const char* nl2 = memchr(nl1 + 1, '\n', page_sz - (nl1 - addr));
-            sp = sp ? sp : nl1;
-            if( addr[0] != '>' || nl1 == NULL || nl2 == NULL || sp-- > nl1 ) {
-                rc = RC(rcAlign, rcFile, rcConstructing, rcData, rcUnrecognized);
-            } else if( strlen(id) >= sizeof(obj->id) || (sp - addr) >= sizeof(obj->accession) ) {
-                rc = RC(rcAlign, rcFile, rcConstructing, rcBuffer, rcInsufficient);
-            } else {
-                strcpy(obj->id, id);
-                memcpy(obj->accession, &addr[1], sp - addr);
-                obj->accession[sp - addr] = '\0';
-                obj->u.local.line_sz = nl2 - nl1 - 1;
-                obj->u.local.fasta_offset = (nl1 - addr) + 1;
-                obj->seq_len = obj->u.local.file_size - obj->u.local.fasta_offset;
-                obj->seq_len -= obj->seq_len / obj->u.local.line_sz; /* remove \n qty */
-                rc = BSTreeInsertUnique(tree, &obj->dad, NULL, ReferenceSeq_Sort);
-            }
+    if (read_circular || self->circular) {
+        if (offset < 0) {
+            unsigned const n = (-offset) / self->seq_len;
+            offset = (self->seq_len * (n + 1) + offset) % self->seq_len;
         }
+        else if (offset > self->seq_len)
+            offset %= self->seq_len;
     }
-    if( rc == 0 ) {
-        *self = obj;
-        ALIGN_DBG("RefSeq local fasta added '%s' -> '%s'", obj->id, obj->accession);
-    } else {
-        ReferenceSeq_Whack(&obj->dad, NULL);
-        ALIGN_DBGERR(rc);
-    }
-    return rc;
-}
-
-static
-rc_t ReferenceSeq_ReOffset(const ReferenceSeq* self, int64_t* offset)
-{
-    /* see TableReaderRefSeq_Read, same logic */
-    if( !self->circular && (*offset < 0 || *offset >= self->seq_len) ) {
+    else if (offset >= self->seq_len)
         return RC(rcAlign, rcType, rcReading, rcOffset, rcOutofrange);
-    } else if( *offset < 0 ) {
-        *offset = self->seq_len - ((-(*offset)) % self->seq_len);
-    } else if( self->circular && *offset > self->seq_len ) {
-        *offset %= self->seq_len;
+    
+    if (self->type == rst_local) {
+        uint8_t const *const src = self->u.local.buf.base;
+        unsigned dst_off = 0;
+        
+        while (dst_off < len) {
+            unsigned const writable = len - dst_off;
+            unsigned const readable = self->seq_len - offset;
+            unsigned const to_write = readable < writable ? readable : writable;
+            
+            memcpy(&buffer[dst_off], &src[offset], to_write);
+            *written += to_write;
+            if (!read_circular)
+                break;
+            offset = 0;
+            dst_off += to_write;
+        }
+        return 0;
     }
-    return 0;
+    else if (self->type == rst_refSeqById || self->type == rst_refSeqBySeqId) {
+        unsigned to_write = len;
+        
+        if (!self->circular || force_linear) {
+            unsigned const readable = self->seq_len - offset;
+            
+            if (to_write > readable)
+                to_write = readable;
+        }
+        return RefSeq_Read(self->u.refseq, offset, to_write, buffer, written);
+    }
+    return RC(rcAlign, rcType, rcReading, rcType, rcInvalid);
 }
 
 static
-rc_t ReferenceSeq_ReadDirect(ReferenceSeq* self, int64_t offset, INSDC_coord_len len, bool read_curcular,
-                             INSDC_dna_text* buffer, INSDC_coord_len* written)
+rc_t ReferenceMgr_LoadSeq(ReferenceMgr *const self, ReferenceSeq *obj)
 {
-    rc_t rc = 0;
-
-    *written = 0;
-    if( (rc = ReferenceSeq_ReOffset(self, &offset)) != 0 ) {
-    } else if( self->local ) {
-        /* translate offset into file dimensions */
-        offset += offset / self->u.local.line_sz; /* add \n on each line */
-        offset += self->u.local.fasta_offset; /* add defline */
-        if( offset >= self->u.local.file_size ) {
-            return RC(rcAlign, rcFile, rcReading, rcOffset, rcOutofrange);
-        } else {
-            size_t page;
-            const char* str;
-            do {
-                if( offset < self->u.local.map_from || self->u.local.map_to < offset ) {
-                    if( (rc = KMMapReposition(self->u.local.map, offset, &page)) == 0 ) {
-                        self->u.local.map_from = offset;
-                        self->u.local.map_to = offset + page;
-                    }
-                }
-                if( rc == 0 && (rc = KMMapAddrRead(self->u.local.map, (const void**)&str)) == 0 ) {
-                    offset += page;
-                    while( page > 0 && len > 0 ) {
-                        char* nl = memchr(str, '\n', page);
-                        size_t q = (nl == NULL) ? page : nl - str;
-                        if( q > len ) {
-                            q = len;
-                        }
-                        memcpy(&buffer[*written], str, q);
-                        *written = *written + q;
-                        len -= q;
-                        if( nl != NULL ) {
-                            q++;
-                        }
-                        page -= q;
-                        str += q;
-                    }
-                }
-                if( read_curcular && offset >= self->u.local.file_size ) {
-                    offset = self->u.local.fasta_offset;
-                }
-            } while( rc == 0 && len > 0 && offset < self->u.local.file_size );
-        }
-    } else {
-        /* we need to trim len to actual length of seq */
-        if( !read_curcular && (offset + len) >= self->seq_len ) {
-            len = self->seq_len - offset;
+    KDataBuffer readBuf;
+    rc_t rc = KDataBufferMake(&readBuf, 8, self->max_seq_len);
+    
+    if (rc == 0) {
+        char const *const id = obj->id;
+        char const *const seqId = obj->seqId ? obj->seqId : id;
+        TableWriterRefData data;
+        INSDC_coord_zero offset = 0;
+        
+        obj->start_rowid = self->ref_rowid + 1;
+        data.name.buffer = id;
+        data.name.elements = string_size( id );
+        data.read.buffer = readBuf.base;
+        data.seq_id.buffer = seqId;
+        data.seq_id.elements = string_size( seqId );
+        data.force_READ_write = obj->type == rst_local || (self->options & ewrefmgr_co_allREADs);
+        data.circular = obj->circular;
+        
+        if (self->writer == NULL) {
+            uint32_t wopt = 0;
+            
+            wopt |= (self->options & ewrefmgr_co_allREADs) ? ewref_co_SaveRead : 0;
+            wopt |= (self->options & ewrefmgr_co_Coverage) ? ewref_co_Coverage : 0;
+            if( (rc = TableWriterRef_Make(&self->writer, self->db, wopt)) == 0 ) {
+                TableWriterData mlen;
+                
+                mlen.buffer = &self->max_seq_len;
+                mlen.elements = 1;
+                rc = TableWriterRef_WriteDefaultData(self->writer, ewrefseq_cn_MAX_SEQ_LEN, &mlen);
+            }
         }
-        if( rc == 0 && (rc = RefSeq_Read(self->u.refseq.o, offset, len, buffer, written)) == 0 ) {
-            self->u.refseq.usage = ++((ReferenceMgr*)self->mgr)->usage;
+        while (rc == 0 && offset < obj->seq_len) {
+            unsigned row_len;
+            
+            rc = ReferenceSeq_ReadDirect(obj, offset, self->max_seq_len, false,
+                                         readBuf.base, &row_len, true);
+            if (rc != 0 || row_len == 0) break;
+            
+            data.read.elements = row_len;
+            rc = TableWriterRef_Write(self->writer, &data, NULL);
+            offset += row_len;
+            ++self->ref_rowid;
         }
+        KDataBufferWhack(&readBuf);
     }
-    ALIGN_DBGERR(rc);
     return rc;
 }
 
-static
-rc_t CC ReferenceMgr_Find(const ReferenceMgr* cself, const char* id, ReferenceSeq** seq, const KFile** kf)
-{
-    *seq = (ReferenceSeq*)BSTreeFind(&cself->tree, id, ReferenceSeq_Cmp);
-    if( *seq == NULL ) {
-        /* try local file */
-        return KDirectoryOpenFileRead(cself->dir, kf, "%s.fasta", id);
-    }
-    *kf = NULL;
-    return 0;
-}
-
-LIB_EXPORT rc_t CC ReferenceMgr_GetSeq(const ReferenceMgr* cself, const ReferenceSeq** seq, const char* id)
+LIB_EXPORT rc_t CC ReferenceMgr_GetSeq(ReferenceMgr const *const cself,
+                                       ReferenceSeq const **const seq,
+                                       char const id[])
 {
-    rc_t rc = 0;
-    ReferenceSeq* obj;
+    ReferenceMgr *const self = (ReferenceMgr *)cself;
     
-    if( cself == NULL || seq == NULL || id == NULL ) {
-        rc = RC(rcAlign, rcFile, rcConstructing, rcParam, rcNull);
-    } else {
-        ReferenceMgr* mgr = (ReferenceMgr*)cself;
-        const KFile* kf;
+    if  (self == NULL || seq == NULL || id == NULL )
+        return RC(rcAlign, rcFile, rcConstructing, rcParam, rcNull);
+    
+    *seq = NULL;
+    {
+        ReferenceSeq *obj;
+        rc_t rc = ReferenceMgr_OpenSeq(self, &obj, id, 0, NULL);
         
-        *seq = NULL;
-        rc = ReferenceMgr_Find(cself, id, &obj, &kf);
-        if( rc == 0 && obj == NULL ) {
-            /* it is local file */
-            rc = ReferenceSeq_Local(&obj, &mgr->tree, id, kf);
-            KFileRelease(kf);
-        }
-        if( rc == 0 && !obj->local && obj->u.refseq.o == NULL ) {
-            if( cself->num_open_max > 0 && cself->num_open >= cself->num_open_max ) {
-                ReferenceSeq* old = NULL;
-                BSTreeForEach(&cself->tree, false, ReferenceSeq_Unused, &old);
-                if( old != NULL ) {
-                    RefSeq_Release(old->u.refseq.o);
-                    old->u.refseq.o = NULL;
-                    mgr->num_open--;
-                }
-            }
-            rc = RefSeqMgr_GetSeq(cself->rmgr, &obj->u.refseq.o, obj->accession, strlen(obj->accession));
-            if( rc == 0 &&
-                (rc = RefSeq_Circular(obj->u.refseq.o, &obj->circular)) == 0 &&
-                (rc = RefSeq_SeqLength(obj->u.refseq.o, &obj->seq_len)) == 0 ) {
-                mgr->num_open++;
-            }
-        }
-        if( rc == 0 && obj->start_rowid == 0 ) {
-            /* append to the whole thing to REFERENCE table since we encounter it for the 1st time */
-            TableWriterRefData data;
-            INSDC_coord_len len = 0;
-            int64_t offset = 0;
-            obj->mgr = cself;
-            obj->start_rowid = mgr->ref_rowid + 1;
-            data.name.buffer = obj->id;
-            data.name.elements = strlen(obj->id);
-            data.read.buffer = mgr->seq_buf;
-            data.seq_id.buffer = obj->accession;
-            data.seq_id.elements = strlen(obj->accession);
-            data.force_READ_write = obj->local || (cself->options & ewrefmgr_co_allREADs);
-            data.circular = obj->circular;
-            if (cself->writer == NULL) {
-                uint32_t wopt = 0;
-
-                wopt |= (mgr->options & ewrefmgr_co_allREADs) ? ewref_co_SaveRead : 0;
-                wopt |= (mgr->options & ewrefmgr_co_Coverage) ? ewref_co_Coverage : 0;
-                if( (rc = TableWriterRef_Make(&mgr->writer, mgr->db, wopt)) == 0 ) {
-                    TableWriterData mlen;
-                    mlen.buffer = &mgr->max_seq_len;
-                    mlen.elements = 1;
-                    rc = TableWriterRef_WriteDefaultData(mgr->writer, ewrefseq_cn_MAX_SEQ_LEN, &mlen);
-                }
-            }
-            if (rc == 0) {
-                do {
-                    if( (rc = ReferenceSeq_ReadDirect(obj, offset, mgr->max_seq_len, false,
-                                                      mgr->seq_buf, &len)) == 0 && len > 0 ) {
-                        data.read.elements = len;
-                        rc = TableWriterRef_Write(cself->writer, &data, NULL);
-                        offset += len;
-                        mgr->ref_rowid++;
-                    }
-                } while( rc == 0 && len > 0 && offset < obj->seq_len );
-            }
+        if (rc) return rc;
+        if (obj->start_rowid == 0) {
+            rc = ReferenceMgr_LoadSeq(self, obj);
+            if (rc) return rc;
         }
-    }
-    if( rc == 0 ) {
         *seq = obj;
-    } else {
-        ALIGN_DBGERR(rc);
     }
-    return rc;
+    return 0;
 }
 
-LIB_EXPORT rc_t CC ReferenceMgr_Verify(const ReferenceMgr* cself, const char* id, uint64_t seq_len, const uint8_t* md5)
+LIB_EXPORT rc_t CC ReferenceMgr_Verify(const ReferenceMgr* cself, const char* id, INSDC_coord_len seq_len, const uint8_t* md5)
 {
+#if 0
     rc_t rc = 0;
     ReferenceSeq* rseq;
     const KFile* kf;
@@ -859,13 +1888,29 @@ LIB_EXPORT rc_t CC ReferenceMgr_Verify(const ReferenceMgr* cself, const char* id
                 rc = RC(rcAlign, rcFile, rcValidating, rcSize, rcUnequal);
                 ALIGN_DBGERRP("%s->%s SEQ_LEN verification", rc, id, rseq->accession);
             }
+            if( rc == 0 && md5 != NULL && memcmp(md5, rseq->u.local.md5, sizeof(rseq->u.local.md5)) != 0 ) {
+                unsigned i;
+                rc = RC(rcAlign, rcTable, rcValidating, rcChecksum, rcUnequal);
+                ALIGN_DBGERRP("%s->%s MD5 verification", rc, id, rseq->accession);
+                ALIGN_DBGF((" local '"));
+                for(i = 0; i < sizeof(rseq->u.local.md5); i++) {
+                    ALIGN_DBGF(("%02hx", rseq->u.local.md5[i]));
+                }
+                ALIGN_DBGF(("'  <> match '"));
+                for(i = 0; i < sizeof(rseq->u.local.md5); i++) {
+                    ALIGN_DBGF(("%02hx", md5[i]));
+                }
+                ALIGN_DBGF(("'\n"));
+            } else {
+                ALIGN_DBG("%s->%s MD5 verification ok", id, rseq->accession);
+            }
         } else {
             const RefSeq* tmp = rseq->u.refseq.o;
-            uint64_t o_len;
+            INSDC_coord_len o_len;
             const uint8_t* o_md5;
 
             if( tmp == NULL ) {
-                if( (rc = RefSeqMgr_GetSeq(cself->rmgr, &tmp, rseq->accession, strlen(rseq->accession))) != 0 ||
+                if( (rc = RefSeqMgr_GetSeq(cself->rmgr, &tmp, rseq->accession, string_size( rseq->accession ))) != 0 ||
                     (rc = RefSeq_SeqLength(tmp, &o_len)) != 0 ) {
                     ALIGN_DBGERRP("%s->%s verification", rc, id, rseq->accession);
                 }
@@ -881,7 +1926,7 @@ LIB_EXPORT rc_t CC ReferenceMgr_Verify(const ReferenceMgr* cself, const char* id
                 }
             }
             if( rc == 0 && (rc = RefSeq_MD5(tmp, &o_md5)) == 0 ) {
-                if( md5 != NULL && o_md5 != NULL && memcmp(md5, o_md5, 16) != 0 ) {
+                if( md5 != NULL && o_md5 != NULL && memcmp(md5, o_md5, sizeof(rseq->u.local.md5)) != 0 ) {
                     rc = RC(rcAlign, rcTable, rcValidating, rcChecksum, rcUnequal);
                     ALIGN_DBGERRP("%s->%s MD5 verification", rc, id, rseq->accession);
                 } else {
@@ -899,12 +1944,283 @@ LIB_EXPORT rc_t CC ReferenceMgr_Verify(const ReferenceMgr* cself, const char* id
         ALIGN_DBGERRP("%s verification", rc, id);
     }
     return rc;
+#else
+    if (cself == NULL || id == NULL)
+        return RC(rcAlign, rcFile, rcValidating, rcParam, rcNull);
+    {
+        ReferenceMgr *self = (ReferenceMgr *)cself;
+        ReferenceSeq *rseq;
+        rc_t rc = ReferenceMgr_OpenSeq(self, &rseq, id, seq_len, md5);
+        
+        if (rc) return rc;
+        if (rseq->seq_len != seq_len) {
+            rc = RC(rcAlign, rcFile, rcValidating, rcSize, rcUnequal);
+            ALIGN_DBGERRP("%s->%s SEQ_LEN verification", rc, id, rseq->seqId);
+        }
+        if (md5 && memcmp(md5, rseq->md5, sizeof(rseq->md5)) != 0 ) {
+            unsigned i;
+            
+            rc = RC(rcAlign, rcTable, rcValidating, rcChecksum, rcUnequal);
+            ALIGN_DBGERRP("%s->%s MD5 verification", rc, id, rseq->seqId);
+            ALIGN_DBGF((" found '"));
+            for(i = 0; i < sizeof(rseq->md5); i++) {
+                ALIGN_DBGF(("%02hx", rseq->md5[i]));
+            }
+            ALIGN_DBGF(("'  != requested '"));
+            for(i = 0; i < sizeof(rseq->md5); i++) {
+                ALIGN_DBGF(("%02hx", md5[i]));
+            }
+            ALIGN_DBGF(("'\n"));
+        } else {
+            ALIGN_DBG("%s->%s MD5 verification ok", id, rseq->seqId);
+        }
+        if( rc == 0 ) {
+            ALIGN_DBG("%s verification ok", id);
+        } else {
+            ALIGN_DBGERRP("%s verification", rc, id);
+        }
+        return rc;
+    }
+#endif
+}
+
+LIB_EXPORT rc_t CC ReferenceMgr_FastaPath(const ReferenceMgr* cself, const char* fasta_path)
+{
+    rc_t rc = 0;
+    KDirectory* dir;
+
+    if( cself == NULL || fasta_path == NULL ) {
+        rc = RC(rcAlign, rcFile, rcConstructing, rcParam, rcNull);
+    } else if( (rc = KDirectoryNativeDir(&dir)) == 0 ) {
+        const KFile* kf;
+        if( (rc = KDirectoryOpenFileRead(dir, &kf, "%s", fasta_path)) == 0 ) {
+            rc = ReferenceMgr_FastaFile(cself, kf);
+            KFileRelease(kf);
+        }
+        KDirectoryRelease(dir);
+    }
+    ALIGN_DBGERRP("from file %s", rc, fasta_path);
+    return rc;
+}
+
+LIB_EXPORT rc_t CC ReferenceMgr_FastaFile(const ReferenceMgr* cself, const KFile* file)
+{
+    if( cself == NULL || file == NULL ) {
+        return RC(rcAlign, rcFile, rcConstructing, rcParam, rcNull);
+    }
+    return ReferenceMgr_ImportFastaFile((ReferenceMgr *)cself, file, NULL);
+}
+
+static
+int extrace_cigar_op(char *op,
+                     uint32_t *op_len,
+                     char const *const cigar,
+                     uint32_t const cigar_len,
+                     uint32_t const offset,
+                     uint32_t const options,
+                     unsigned *const bin)
+{
+    static char const op_txt[] = "MIDNSHP=XB??????";
+    uint32_t i = offset;
+    
+    if (options & ewrefmgr_cmp_Binary) {
+        uint32_t c;
+        
+        memcpy(&c, cigar + i * 4, 4);
+        *bin = c & 0x0F;
+        *op = op_txt[c & 0x0F];
+        *op_len = c >> 4;
+    }
+    else {
+        uint32_t len = 0;
+        int ch;
+
+        while(i < cigar_len && (ch = cigar[i]) != '\0' && isdigit(ch)) {
+            len *= 10;
+            len += ch - '0';
+            ++i;
+        }
+        *bin = *op = ch;
+        *op_len = len;
+    }
+    return i - offset;
+}
+
+static
+rc_t cigar2offset(const uint32_t options, const void* cigar, uint32_t cigar_len, int32_t* out, uint32_t out_sz, uint32_t out_used,
+                  INSDC_coord_len* seq_len, INSDC_coord_len* ref_len, INSDC_coord_len* max_ref_len)
+{
+    rc_t rc = 0;
+    uint32_t i;
+    uint32_t last_match = 0;
+    uint32_t op_len;
+    uint32_t last_soft_len = 0;
+    uint32_t b_len = 0;
+    uint32_t last_op = cigar_len - 1;
+    char op;
+    unsigned op_bin;
+    
+    if ((options & ewrefmgr_cmp_Binary) == 0) {
+        for (i = 0; i < cigar_len; last_op = ++i) {
+            i += extrace_cigar_op(&op, &op_len, cigar, cigar_len, i, options, &op_bin);
+        }
+    }
+    
+#if _DEBUGGING
+    ALIGN_C_DBGF(("%s:%u: ", __func__, __LINE__));
+    if( options & ewrefmgr_cmp_Binary ) {
+        ALIGN_C_DBGF(("bin cigar '"));
+        for(i = 0; i < cigar_len; i++) {
+            extrace_cigar_op(&op, &op_len, cigar, cigar_len, i, options, &op_bin);
+            ALIGN_C_DBGF(("%u%c", op_len, op));
+        }
+    } else {
+        ALIGN_C_DBGF(("cigar '%.*s", cigar_len, cigar));
+    }
+    ALIGN_C_DBGF(("'[%u]\n", cigar_len));
+#endif
+    
+    *seq_len = 0;
+    *ref_len = 0;
+    *max_ref_len = 0;
+    memset(out, 0, out_used * sizeof(*out) * 2);
+    for(i = 0; rc == 0 && i < cigar_len; i++) {
+        i += extrace_cigar_op(&op, &op_len, cigar, cigar_len, i, options, &op_bin);
+        if (op == 'P') {
+            continue;
+        }
+        if( op != 'S' && op != 'I' ) {
+            last_soft_len = 0;
+        }
+        switch(op) {
+        case 'M':
+        case '=':
+        case 'X':
+            *seq_len += op_len;
+            *ref_len += op_len;
+            *max_ref_len += op_len;
+            if(b_len > op_len) {
+                b_len -= op_len;
+            }
+            else {
+                b_len=0;
+                last_match = *seq_len;
+            }
+            break;
+        case 'S':
+        case 'I':
+            last_soft_len += op_len;
+            *max_ref_len += op_len;
+            *seq_len += op_len;
+            if (last_match < out_sz) {
+                if (i < last_op) {
+                    if (b_len > 0) {/** not right soft clip **/
+                        assert(out[last_match] < 0);
+                        out[last_match-out[last_match]] = 0x80000000;
+                    }
+                    out[last_match] += -op_len;
+                }
+                if (b_len == 0) last_match = *seq_len;
+            } else {
+                rc = RC(rcAlign, rcFile, rcProcessing, rcData, rcInconsistent);
+            }
+            
+            break;
+        case 'B':
+            /* Complete Genomics CIGAR style specific:
+             overlap between consecutive reads
+             ex: sequence 6 bases: ACACTG, reference 2 bases: ACTG,
+             cigar will be: 2M2B2M
+             no need to move sequence position
+             */
+            if( last_match < out_sz ) {
+                if(b_len > 0 && i < cigar_len -1){/** not right soft clip **/
+                    assert(out[last_match] < 0);
+                    out[last_match-out[last_match]] = 0x80000000;
+                }
+                out[last_match] -= op_len;
+            } else {
+                rc = RC(rcAlign, rcFile, rcProcessing, rcData, rcInconsistent);
+            }
+            if( *ref_len < op_len ) {
+                *ref_len = 0;
+            } else {
+                *ref_len -= op_len;
+            }
+            *max_ref_len += op_len;
+            b_len += op_len;
+            break;
+        case 'D':
+        case 'N':
+            if( last_match < out_sz ) {
+                out[last_match] += op_len;
+            } else if (last_match == out_sz && last_match > 0 ){ /*** delete at the end ***/
+                out[last_match-1] += op_len;
+            } else {
+                rc = RC(rcAlign, rcFile, rcProcessing, rcData, rcInconsistent);
+            }
+            *ref_len += op_len;
+            *max_ref_len += op_len;
+            break;
+        case 'H':
+            if ((options & ewrefmgr_co_AcceptHardClip) == 0)
+            {
+                rc = RC(rcAlign, rcFile, rcProcessing, rcData, rcInvalid);
+                (void)LOGERR(klogErr, rc, "Hard clipping of sequence data is not allowed");
+            }
+            break;
+        default:
+            rc = RC(rcAlign, rcFile, rcProcessing, rcData, rcUnrecognized);
+            if ((options & ewrefmgr_cmp_Binary) == 0)
+                (void)PLOGERR(klogErr, (klogErr, rc, "Invalid or unrecognized CIGAR operation '$(opcode)'", "opcode=%c", op));
+            else if (op != '?')
+                (void)PLOGERR(klogErr, (klogErr, rc, "Invalid or unrecognized CIGAR operation '$(opcode)' (binary code: $(opbin))", "opcode=%c,opbin=%u", op, op_bin));
+            else
+                (void)PLOGERR(klogErr, (klogErr, rc, "Invalid or unrecognized CIGAR operation (binary code: $(opbin))", "opbin=%u", op_bin));
+            break;
+        }
+    }
+    if( !(options & ewrefmgr_cmp_Exact) && last_soft_len > 0 ) {
+        ALIGN_C_DBG("trailing soft clip %u @ %u", last_soft_len, last_match);
+        out[last_match] += last_soft_len;
+    }
+#if _DEBUGGING
+    ALIGN_C_DBGF(("%s:%u: offsets: ", __func__, __LINE__));
+    last_match = last_match > *seq_len ? last_match : *seq_len;
+    for(i = 0; i <= last_match; i++) {
+        if( i == *seq_len ) {
+            ALIGN_C_DBGF((" | "));
+        }
+        ALIGN_C_DBGF(("%i%c", out[i], ((i + 1) % 5) ? ',' : ' '));
+    }
+    ALIGN_C_DBGF((" cigar derived seq_len %u, ref_len %u, max_ref_len %u\n", *seq_len, *ref_len, *max_ref_len));
+#endif
+    return rc;
+}
+
+static
+void ReferenceSeq_TranslateOffset_int(ReferenceSeq const *const cself,
+                                      INSDC_coord_zero const offset,
+                                      int64_t *const ref_id,
+                                      INSDC_coord_zero *const ref_start,
+                                      uint64_t *const global_ref_start)
+{
+    if (ref_id)
+        *ref_id = cself->start_rowid + offset / cself->mgr->max_seq_len;
+    
+    if (ref_start)
+        *ref_start = offset % cself->mgr->max_seq_len;
+    
+    if (global_ref_start)
+        *global_ref_start = (cself->start_rowid - 1) * cself->mgr->max_seq_len + offset;
 }
 
 LIB_EXPORT rc_t CC ReferenceMgr_Compress(const ReferenceMgr* cself, uint32_t options,
-                                         const char* id, int64_t offset,
+                                         const char* id, INSDC_coord_zero offset,
                                          const char* seq, INSDC_coord_len seq_len,
                                          const void* cigar, uint32_t cigar_len,
+                                         INSDC_coord_zero allele_offset, const char* allele, INSDC_coord_len allele_len,INSDC_coord_zero offset_in_allele,
+                                         const void* allele_cigar, uint32_t allele_cigar_len,
                                          TableWriterAlgnData* data)
 {
     rc_t rc = 0;
@@ -913,261 +2229,310 @@ LIB_EXPORT rc_t CC ReferenceMgr_Compress(const ReferenceMgr* cself, uint32_t opt
     if( cself == NULL || id == NULL ) {
         rc = RC(rcAlign, rcFile, rcProcessing, rcParam, rcNull);
     } else if( (rc = ReferenceMgr_GetSeq(cself, &refseq, id)) == 0 ) {
-        rc = ReferenceSeq_Compress(refseq, options, offset, seq, seq_len, cigar, cigar_len, data);
+        rc = ReferenceSeq_Compress(refseq, options, offset, seq, seq_len, cigar, cigar_len,
+                                   allele_offset, allele, allele_len,offset_in_allele,
+				   allele_cigar, allele_cigar_len, data);
         ReferenceSeq_Release(refseq);
     }
-    ALIGN_DBGERR(rc);
+    ALIGN_C_DBGERR(rc);
     return rc;
 }
 
-LIB_EXPORT rc_t CC ReferenceSeq_Compress(const ReferenceSeq* cself, uint32_t options, int64_t offset,
+LIB_EXPORT rc_t CC ReferenceSeq_Compress(const ReferenceSeq* cself, const uint32_t options, INSDC_coord_zero offset,
                                          const char* seq, INSDC_coord_len seq_len,
                                          const void* cigar, uint32_t cigar_len,
+                                         INSDC_coord_zero allele_offset, const char* allele,
+					 INSDC_coord_len allele_len,
+					 INSDC_coord_zero offset_in_allele,
+                                         const void* allele_cigar, uint32_t allele_cigar_len,
                                          TableWriterAlgnData* data)
 {
     rc_t rc = 0;
 
-    ALIGN_DBG("align '%.*s'[%u] to '%s' at %li using '%.*s'[%u]",
-        (int)seq_len, seq, seq_len, cself ? cself->id : NULL, offset, 
-          (options & ewrefmgr_cmp_Binary) ? 3 : (int)cigar_len, (options & ewrefmgr_cmp_Binary) ? "bin" : cigar, cigar_len);
-
-    if( cself == NULL || seq == NULL || cigar == NULL || cigar_len == 0 || data == NULL ) {
-        rc = RC(rcAlign, rcFile, rcProcessing, rcParam, rcInvalid);
-    } else if( seq_len > sizeof(cself->mgr->compress_buf) / sizeof(cself->mgr->compress_buf[0]) ) {
-        rc = RC(rcAlign, rcFile, rcProcessing, rcBuffer, rcInsufficient);
-    } else if( (rc = ReferenceSeq_ReOffset(cself, &offset)) == 0 ) {
-        INSDC_coord_len seq_pos = 0;
-        uint32_t i, last_match = 0, op_len;
-        unsigned char op;
+    if( cself == NULL || seq == NULL || cigar == NULL || cigar_len == 0 || data == NULL ||
+        (!(allele == NULL && allele_len == 0 && allele_cigar == NULL && allele_cigar_len == 0) &&
+         !(allele != NULL && allele_cigar != NULL && allele_cigar_len != 0)) ) {
+        return RC(rcAlign, rcFile, rcProcessing, rcParam, rcInvalid);
+    }
+    if (seq_len * 2 > cself->mgr->compress.elem_count) {
+        rc = KDataBufferResize(&cself->mgr->compress, seq_len * 2);
+        if (rc) return rc;
+    }
+    if ((rc = ReferenceSeq_ReOffset(cself->circular, cself->seq_len, &offset)) == 0 ) {
+        INSDC_coord_len i, seq_pos = 0, allele_ref_end = 0, ref_len = 0, rl = 0, max_rl = 0;
         INSDC_coord_zero* read_start = &((INSDC_coord_zero*)(data->read_start.buffer))[data->ploidy];
         INSDC_coord_len* read_len = &((INSDC_coord_len*)(data->read_len.buffer))[data->ploidy];
-        INSDC_coord_len rl = 0, *ref_len = &((INSDC_coord_len*)(data->ref_len.buffer))[data->ploidy];
-        bool* has_ref_offset;
-        uint64_t i_ref_offset_elements;
-        int32_t* ref_offset, *cb = (int32_t*)(cself->mgr->compress_buf);
+        bool* has_ref_offset, *has_mismatch;
+        int32_t* ref_offset;
+        uint8_t* mismatch; 
+        uint8_t sref_buf[64 * 1024];
+        void *href_buf = NULL;
+        uint8_t *ref_buf = sref_buf;
+	int32_t  allele_off_buf[1024];
+#if _DEBUGGING
+        uint64_t i_ref_offset_elements, i_mismatch_elements;
+        char x[4096];
+#endif
 
         if( data->ploidy == 0 ) {
             data->has_ref_offset.elements = seq_len;
             data->ref_offset.elements = 0;
+            data->has_mismatch.elements = seq_len;
+            data->mismatch.elements = 0;
             *read_start = 0;
-            i_ref_offset_elements = 0;
-        } else {
+        }
+        else {
             data->has_ref_offset.elements += seq_len;
+            data->has_mismatch.elements += seq_len;
             *read_start = read_start[-1] + read_len[-1];
-            i_ref_offset_elements = data->ref_offset.elements;
         }
         *read_len = seq_len;
-        *ref_len = 0;
+        has_ref_offset = &((bool*)(data->has_ref_offset.buffer))[*read_start];
+        ref_offset = (int32_t*)(data->ref_offset.buffer);
+        has_mismatch = &((bool*)(data->has_mismatch.buffer))[*read_start];
+        mismatch = (uint8_t*)(data->mismatch.buffer);
 
 #if _DEBUGGING
-        ALIGN_DBG("real offset %li ref is circular? %s", offset, cself->circular ? "true" : "false");
-        if( options & ewrefmgr_cmp_Binary ) {
-            ALIGN_DBGF(("%s:%u: bin cigar:", __func__, __LINE__));
-            for(i = 0; i < cigar_len; i++) {
-                const uint32_t* c = cigar;
-                op = c[i] & 0x0F;
-                op_len = c[i] >> 4;
-                ALIGN_DBGF(("%u%c", op_len, "MIDNSHP=XB"[op]));
-            }
-            ALIGN_DBGF(("\n"));
-        }
+        i_ref_offset_elements = data->ref_offset.elements;
+        i_mismatch_elements = data->mismatch.elements;
+        ALIGN_C_DBG("align%s '%.*s'[%u] to '%s:%s' at %i", (options & ewrefmgr_cmp_Exact) ? " EXACT" : "",
+                    seq_len, seq, seq_len, cself->id, cself->seqId, offset);
 #endif
-        memset(cb, 0, sizeof(*cb) * seq_len);
-        for(i = 0; rc == 0 && i < cigar_len; i++) {
-            if( options & ewrefmgr_cmp_Binary ) {
-                const uint32_t* c = cigar;
-                op = c[i] & 0x0F;
-                op_len = c[i] >> 4;
-            } else {
-                const unsigned char* c = cigar;
-                op_len = 0;
-                while( c[i] != '\0' && isdigit(c[i]) ) {
-                    op_len *= 10;
-                    op_len += c[i++] - '0';
-                }
-                /* avoid intersecting with 4-bit binary above */
-                op = c[i] <= 0x0F ? 0xFF : c[i];
-            }
-            switch(op) {
-                case 'M':
-                case 0:
-                case '=':
-                case 7:
-                case 'X':
-                case 8:
-                    seq_pos += op_len;
-                    rl += op_len;
-                    *ref_len = rl;
-                    last_match = seq_pos;
-                    break;
-                case 'I':
-                case 1:
-                case 'S':
-                case 4:
-                    seq_pos += op_len;
-                    cb[last_match] += -op_len;
-                    break;
-                case 'B':
-                case 9:
-                    /* Complete Genomics CIGAR style specific:
-                       overlap between consecutive reads
-                       ex: sequence 6 bases: ACACTG, reference 2 bases: ACTG,
-                       cigar will be: 2M2B2M
-                       no need to move sequence position
-                    */
-                    cb[last_match] -= op_len;
-                    if( rl < op_len ) {
-                        /* step back beyond ref start */
-                        offset -= op_len - rl;
-                        rl = 0;
-                    } else {
-                        rl -= op_len;
-                    }
-                    break;
-                case 'D':
-                case 2:
-                case 'N':
-                case 3:
-                    cb[last_match] += op_len;
-                    rl += op_len;
-                    break;
-                case 'P':
-                case 6:
-                    continue;
-                case 'H':
-                case 5:
-                default:
-                    rc = RC(rcAlign, rcFile, rcProcessing, rcData, rcUnrecognized);
-            }
+        if( allele != NULL ) {
+            /* determine length of reference for subst by allele */
+            ALIGN_C_DBG("apply allele %.*s[%u] at %i w/cigar below",
+                        allele_len, allele, allele_len, allele_offset);
+            rc = cigar2offset(options, allele_cigar, allele_cigar_len,
+                    allele_off_buf, sizeof(allele_off_buf)/sizeof(*allele_off_buf)/2,
+                    allele_len, &seq_pos, &allele_ref_end, &max_rl);
+            /* where allele ends on reference */
+            allele_ref_end += allele_offset;
         }
         if( rc == 0 ) {
-            /* do not write leading deletes just move reference offset */
-            if( cb[0] > 0 ) {
-                offset += cb[0];
-                *ref_len -= cb[0];
-                cb[0] = 0;
+            rc = cigar2offset(options, cigar, cigar_len,
+                              (int32_t*)(cself->mgr->compress.base), cself->mgr->compress.elem_count / 2,
+                             seq_len, &seq_pos, &rl, &max_rl);
+        }
+        if( allele != NULL ) {
+            if( allele_offset + allele_ref_end < offset || allele_offset >= offset + rl ) {
+                (void)PLOGMSG(klogWarn, (klogWarn,
+                    "allele $(a) offset $(ao) $(ac) is not within referenced region in $(id) at offset $(ro) $(rc)",
+                    "a=%.*s,ao=%i,ac=%.*s,id=%s,ro=%i,rc=%.*s",
+                    allele_len, allele, allele_offset, (options & ewrefmgr_cmp_Binary) ? 0 : allele_cigar_len, allele_cigar,
+                    cself->seqId, offset, (options & ewrefmgr_cmp_Binary) ? 0 : cigar_len, cigar));
+                allele = NULL;
             }
-#if _DEBUGGING
-            ALIGN_DBGF(("%s:%u: last_match %u, offsets:", __func__, __LINE__, last_match));
-            for(i = 0; i < seq_len; i++) {
-                ALIGN_DBGF(("%i%c", cb[i], ((i + 1) % 5) ? ',' : '~'));
+        }
+        if( rc == 0 ) {
+            if( !(options & ewrefmgr_cmp_Exact) ) {
+                /* do not write leading deletes just move reference offset */
+                int32_t *const compress_buf = cself->mgr->compress.base;
+                if( compress_buf[0] > 0 ) {
+                    offset += compress_buf[0];
+                    rl -= compress_buf[0];
+                    max_rl -= compress_buf[0];
+                    compress_buf[0] = 0;
+                    ALIGN_C_DBG("adjusted offset %i", offset);
+                }
             }
-            ALIGN_DBGF(("\n"));
-#endif
-            has_ref_offset = &((bool*)(data->has_ref_offset.buffer))[*read_start];
-            ref_offset = (int32_t*)(data->ref_offset.buffer);
-            /* do not write trailing indels cause they are simple mismatches */
-            for(i = 0; i < last_match; i++) {
-                has_ref_offset[i] = cb[i] != 0;
-                if( has_ref_offset[i] ) {
-                    ref_offset[data->ref_offset.elements++] = cb[i];
+            ref_len = rl;
+            if( (offset + max_rl) > cself->seq_len && !cself->circular ) {
+                max_rl = cself->seq_len - offset;
+                if( max_rl < rl ) {
+                    /* ref_len used for compression cannot be shorter than ref_len derived from cigar,
+                       if there is a shortage it will fail later here */
+                    max_rl = rl;
                 }
+                ALIGN_C_DBG("max_ref_len truncated to %u cause it goes beyond refseq length %lu at offset %i",
+                             max_rl, cself->seq_len, offset);
             }
-            memset(&has_ref_offset[last_match], 0, seq_len - last_match);
+            ALIGN_C_DBG("chosen REF_LEN %u, ref len for match %u", ref_len, max_rl);
 
-#if _DEBUGGING
-            ALIGN_DBG("aligned at %li ref_len %u, num offsets %lu, seq_pos %u", offset, *ref_len, data->ref_offset.elements, seq_pos);
-            ALIGN_DBGF(("%s:%u: HAS_REF_OFFSET: ", __func__, __LINE__));
-            for(i = 0; i < seq_len; i++) {
-                ALIGN_DBGF(("%c", (has_ref_offset[i] != 0) ? '1' : '0'));
+            assert(seq_len == seq_pos);
+            if (max_rl > sizeof(sref_buf)) {
+                if (href_buf)
+                    free(href_buf);
+                href_buf = malloc(max_rl);
+                if (href_buf == NULL)
+                    rc = RC(rcAlign, rcFile, rcProcessing, rcMemory, rcExhausted);
+                ref_buf = href_buf;
             }
-            ALIGN_DBGF((", REF_OFFSET:"));
-            for(i = i_ref_offset_elements; i < data->ref_offset.elements; i++) {
-                ALIGN_DBGF((" %i,", ref_offset[i]));
+            if (rc == 0) {
+                int64_t ref_pos;
+
+                if( allele != NULL ) {
+                    /* subst allele in reference */
+                    if( allele_offset <= offset ) {
+                        /* move allele start inside referenced chunk */
+			    allele     += offset_in_allele;
+			    allele_len -= offset_in_allele;
+                            rl = 0;
+                    } else {
+                        /* fetch portion of reference which comes before allele */
+                        rl = allele_offset - offset;
+                        rc = ReferenceSeq_ReadDirect((ReferenceSeq*)cself, offset, rl, true, ref_buf, &i, false);
+                        if( rc == 0 && rl != i ) {
+                            /* here we need to test it otherwise excessive portion of allele could be fetch in next if */
+                            rc = RC(rcAlign, rcFile, rcProcessing, rcRange, rcExcessive);
+                        }
+                    }
+                    if( rc == 0 && allele_len < (max_rl - rl) ) {
+                        memcpy(&ref_buf[rl], allele, allele_len);
+                        rl += allele_len;
+                        /* append tail of actual reference */
+                        rc = ReferenceSeq_ReadDirect((ReferenceSeq*)cself, allele_ref_end, max_rl - rl, true, &ref_buf[rl], &i, false);
+                        rl += i;
+                    } else if( rc == 0 ) {
+                        /* allele is longer than needed */
+                        memcpy(&ref_buf[rl], allele, max_rl - rl);
+                        rl = max_rl;
+                    }
+                } else {
+                    rc = ReferenceSeq_ReadDirect((ReferenceSeq*)cself, offset, max_rl, true, ref_buf, &rl, false);
+                }
+                if( rc != 0 || max_rl != rl ) {
+                    rc = rc ? rc : RC(rcAlign, rcFile, rcProcessing, rcRange, rcExcessive);
+                    ALIGN_C_DBGERRP("refseq is shorter: at offset %i need %u bases", rc, offset, max_rl);
+                } else {
+                    int32_t *const compress_buf = cself->mgr->compress.base;
+                    for(seq_pos = 0, ref_pos = 0; seq_pos < seq_len; seq_pos++, ref_pos++) {
+                        has_ref_offset[seq_pos] = compress_buf[seq_pos] != 0;
+                        if( has_ref_offset[seq_pos]){
+                            if(compress_buf[seq_pos] == 0x80000000 ){
+                                compress_buf[seq_pos] = 0; /** the hack has served its purpose **/
+                            } else {
+                                ref_offset[data->ref_offset.elements++] = compress_buf[seq_pos];
+                                ref_pos += compress_buf[seq_pos];
+                            }
+                        }
+                        if( (ref_pos < 0) || (ref_pos >= max_rl) || 
+                            ((toupper(ref_buf[ref_pos]) != toupper(seq[seq_pos])) && (seq[seq_pos] != '=')) ) {
+                            has_mismatch[seq_pos] = true;
+                            mismatch[data->mismatch.elements++] = seq[seq_pos];
+                        } else {
+                            /* match! */
+                            has_mismatch[seq_pos] = false;
+                        }
+                    }
+                }
             }
-            ALIGN_DBGF(("[%u]\n", data->ref_offset.elements - i_ref_offset_elements));
-#endif
-            assert(seq_len == seq_pos);
         }
 #if _DEBUGGING
-        if( rc == 0 ) {
-#else
-        if( rc == 0 && !(options & ewrefmgr_cmp_NoMismatch) ) {
-#endif
-            bool* has_mismatch = &((bool*)(data->has_mismatch.buffer))[*read_start];
-            INSDC_dna_text* mismatch = (INSDC_dna_text*)(data->mismatch.buffer);
-            INSDC_dna_text ref_buf[20480];
-
-            if( *ref_len > sizeof(ref_buf) ) {
-                rc = RC(rcAlign, rcFile, rcProcessing, rcBuffer, rcInsufficient);
-            } else if( (rc = ReferenceSeq_ReadDirect((ReferenceSeq*)cself, offset, *ref_len,
-                                                                      true, ref_buf, &rl)) == 0 ) {
-                int64_t ref_pos = 0;
-                uint64_t ref_offset_pos = i_ref_offset_elements;
-                uint64_t i_mismatch_elements;
-
-                ALIGN_DBG("ref %.*s[%u]", rl, ref_buf, rl);
-                if( data->ploidy == 0 ) {
-                    data->has_mismatch.elements = 0;
-                    data->mismatch.elements = 0;
-                }
-                i_mismatch_elements = data->mismatch.elements;
-                data->has_mismatch.elements += seq_len;
+        if(rc == 0 ) {
+            int32_t j;
+            memset(x, '-', sizeof(x) - 1);
+            x[sizeof(x) - 2] = '\0';
 
-                ALIGN_DBGF(("%s:%u: HAS_MISMATCH: ", __func__, __LINE__));
-                for(seq_pos = 0; seq_pos < seq_len; seq_pos++, ref_pos++) {
-                    if( has_ref_offset[seq_pos] ) {
-                        ref_pos += ref_offset[ref_offset_pos++];
-                    }
-                    if( (ref_pos < 0) || (ref_pos >= rl) || 
-                        ((toupper(ref_buf[ref_pos]) != toupper(seq[seq_pos])) && (seq[seq_pos] != '=')) ) {
-                        has_mismatch[seq_pos] = true;
-                        mismatch[data->mismatch.elements++] = seq[seq_pos];
+            ALIGN_C_DBG("ref: %.*s [%u]", max_rl, ref_buf, max_rl);
+            ALIGN_C_DBGF(("%s:%u: ref: ", __func__, __LINE__));
+            for(seq_pos = 0, j = 0, rl = 0, i = 0; seq_pos < seq_len; seq_pos++, j++) {
+                if( has_ref_offset[seq_pos] ) {
+                    if( ref_offset[i_ref_offset_elements + rl] > 0 ) {
+                        ALIGN_C_DBGF(("%.*s", (uint32_t)(ref_offset[i_ref_offset_elements + rl]), &ref_buf[j]));
                     } else {
-                        has_mismatch[seq_pos] = false;
+                        i = -ref_offset[i_ref_offset_elements + rl];
                     }
-                    ALIGN_DBGF(("%c", has_mismatch[seq_pos] ? '1' : '0'));
+                    j += ref_offset[i_ref_offset_elements + rl];
+                    rl++;
+                }
+                ALIGN_C_DBGF(("%c", (j < 0 || j >= max_rl) ? '-' : (i > 0) ? tolower(ref_buf[j]) : ref_buf[j]));
+                if( i > 0  ) {
+                    i--;
                 }
-                ALIGN_DBGF((", MISMATCH: '%.*s'[%u]\n", (int)(data->mismatch.elements - i_mismatch_elements),
-                    &mismatch[i_mismatch_elements], data->mismatch.elements - i_mismatch_elements));
             }
-        }
-        if( rc == 0 ) {
-            if( data->ref_1st_row_id.buffer ) {
-                ((INSDC_coord_len*)(data->ref_1st_row_id.buffer))[data->ploidy] = cself->start_rowid;
-                data->ref_1st_row_id.elements = data->ploidy + 1;
-                ALIGN_DBG("1st ROW_ID %u", ((INSDC_coord_len*)(data->ref_1st_row_id.buffer))[data->ploidy]);
+            ALIGN_C_DBGF(("\n%s:%u: seq: ", __func__, __LINE__));
+            for(i = 0, j = 0; i < seq_len; i++) {
+                if( has_ref_offset[i] && ref_offset[i_ref_offset_elements + j++] > 0 ) {
+                    ALIGN_C_DBGF(("%.*s", ref_offset[i_ref_offset_elements + j - 1], x));
+                }
+                ALIGN_C_DBGF(("%c", seq[i]));
             }
-
-            if( data->ref_id.buffer ) {
-                ((int64_t*)(data->ref_id.buffer))[data->ploidy] = cself->start_rowid + offset / cself->mgr->max_seq_len;
-                data->ref_id.elements = data->ploidy + 1;
-                ALIGN_DBG("REF_ID: %li", ((int64_t*)(data->ref_id.buffer))[data->ploidy]);
+            ALIGN_C_DBGF((" [%u]\n", seq_len));
+            ALIGN_C_DBGF(("%s:%u: hro: ", __func__, __LINE__));
+            for(i = 0, j = 0; i < seq_len; i++) {
+                if( has_ref_offset[i] && ref_offset[i_ref_offset_elements + j++] > 0 ) {
+                    ALIGN_C_DBGF(("%.*s", ref_offset[i_ref_offset_elements + j - 1], x));
+                }
+                ALIGN_C_DBGF(("%c", has_ref_offset[i] + '0'));
             }
-            if( data->ref_start.buffer ) {
-                ((INSDC_coord_zero*)(data->ref_start.buffer))[data->ploidy] = offset % cself->mgr->max_seq_len;
-                data->ref_start.elements = data->ploidy + 1;
-                ALIGN_DBG("REF_START %i", ((INSDC_coord_zero*)(data->ref_start.buffer))[data->ploidy]);
+            ALIGN_C_DBGF((", ro:"));
+            for(i = i_ref_offset_elements; i < data->ref_offset.elements; i++) {
+                ALIGN_C_DBGF((" %i,", ref_offset[i]));
             }
-            if( data->global_ref_start.buffer ) {
-                ((uint64_t*)(data->global_ref_start.buffer))[data->ploidy] = (cself->start_rowid - 1) * cself->mgr->max_seq_len + offset;
-                data->global_ref_start.elements = data->ploidy + 1;
-                ALIGN_DBG("GLOBAL_REF_START %lu", ((uint64_t*)(data->global_ref_start.buffer))[data->ploidy]);
+            ALIGN_C_DBGF(("[%u]\n", data->ref_offset.elements - i_ref_offset_elements));
+            ALIGN_C_DBGF(("%s:%u: hmm: ", __func__, __LINE__));
+            for(i = 0, j = 0; i < seq_len; i++) {
+                if( has_ref_offset[i] && ref_offset[i_ref_offset_elements + j++] > 0 ) {
+                    ALIGN_C_DBGF(("%.*s", ref_offset[i_ref_offset_elements + j - 1], x));
+                }
+                ALIGN_C_DBGF(("%c", has_mismatch[i] + '0'));
             }
-            if( data->effective_offset.buffer ) {
-                ((int64_t*)(data->effective_offset.buffer))[data->ploidy] = offset;
-                data->effective_offset.elements = data->ploidy + 1;
-                ALIGN_DBG("OFFSET %li", ((int64_t*)(data->effective_offset.buffer))[data->ploidy]);
+            ALIGN_C_DBGF((", mm: '%.*s'[%u]\n", (int)(data->mismatch.elements - i_mismatch_elements),
+                &mismatch[i_mismatch_elements], data->mismatch.elements - i_mismatch_elements));
+        }
+#endif
+        if( rc == 0 ) {
+            if( data->ploidy == 0 ) {
+                int64_t *const ref_id = (int64_t *)data->ref_id.buffer;
+                INSDC_coord_zero *const ref_start = (INSDC_coord_zero *)data->ref_start.buffer;
+                uint64_t *const global_ref_start = (uint64_t *)data->global_ref_start.buffer;
+                
+                data->ref_1st_row_id = cself->start_rowid;
+                data->effective_offset = offset;
+                data->ref_len = ref_len;
+                ALIGN_C_DBGF(("%s:%u: reference 1st ROW_ID %li OFFSET %i REF_LEN %u",
+                    __func__, __LINE__, data->ref_1st_row_id, data->effective_offset, data->ref_len));
+                
+                ReferenceSeq_TranslateOffset_int(cself, offset, ref_id, ref_start, global_ref_start);
+                
+                if (ref_id) {
+                    data->ref_id.elements = 1;
+                    ALIGN_C_DBGF((" REF_ID %li", ref_id[0]));
+                }
+                if (ref_start) {
+                    data->ref_start.elements = 1;
+                    ALIGN_C_DBGF((" REF_START %i", ref_start[0]));
+                }
+                if (global_ref_start) {
+                    data->global_ref_start.elements = 1;
+                    ALIGN_C_DBGF((" GLOBAL_REF_START %lu", global_ref_start[0]));
+                }
+                ALIGN_C_DBGF(("\n"));
+            } else {
+                if( data->ref_1st_row_id != cself->start_rowid || data->effective_offset != offset ) {
+                    rc = RC(rcAlign, rcFile, rcProcessing, rcData, rcInconsistent);
+                    (void)PLOGERR(klogErr, (klogErr, rc,
+                        "all reads in alignment record must align to same refseq at same location $(r1)@$(o1) <> $(r2):$(a2)@$(o2)",
+                        "r1=%li,o1=%i,r2=%s,a2=%s,o2=%i", data->ref_1st_row_id, data->effective_offset, cself->id, cself->seqId, offset));
+                } else if( data->ref_len != ref_len ) {
+                    rc = RC(rcAlign, rcFile, rcProcessing, rcData, rcInconsistent);
+                    (void)PLOGERR(klogErr, (klogErr, rc,
+                        "all reads in alignment record must have same size projection on refseq $(rl1) <> $(rl2) $(r):$(a)@$(o)",
+                        "rl1=%u,rl2=%u,r=%s,a=%s,o=%i", data->ref_len, ref_len, cself->id, cself->seqId, offset));
+                }
             }
+        }
+        if( rc == 0 ) {
             data->ploidy++;
             data->read_start.elements = data->ploidy;
             data->read_len.elements = data->ploidy;
-            data->ref_len.elements = data->ploidy;
         }
+        if (href_buf)
+            free(href_buf);
     }
-    ALIGN_DBGERR(rc);
+    ALIGN_C_DBGERR(rc);
     return rc;
 }
 
-LIB_EXPORT rc_t CC ReferenceSeq_Read(const ReferenceSeq* cself, int64_t offset, INSDC_coord_len len,
-                                     INSDC_dna_text* buffer, INSDC_coord_len* ref_len)
+LIB_EXPORT rc_t CC ReferenceSeq_Read(const ReferenceSeq* cself, INSDC_coord_zero offset, INSDC_coord_len len,
+                                     uint8_t* buffer, INSDC_coord_len* ref_len)
 {
     rc_t rc = 0;
 
     if( cself == NULL || buffer == NULL || ref_len == NULL ) {
         rc = RC(rcAlign, rcFile, rcReading, rcParam, rcNull);
     } else {
-        rc = ReferenceSeq_ReadDirect((ReferenceSeq*)cself, offset, len, true, buffer, ref_len);
+        rc = ReferenceSeq_ReadDirect((ReferenceSeq*)cself, offset, len, true, buffer, ref_len, false);
     }
     ALIGN_DBGERR(rc);
     return rc;
@@ -1185,7 +2550,7 @@ LIB_EXPORT rc_t CC ReferenceSeq_Get1stRow(const ReferenceSeq* cself, int64_t* ro
     return rc;
 }
 
-LIB_EXPORT rc_t CC ReferenceSeq_AddCoverage(const ReferenceSeq* cself, int64_t offset, const ReferenceSeqCoverage* data)
+LIB_EXPORT rc_t CC ReferenceSeq_AddCoverage(const ReferenceSeq* cself, INSDC_coord_zero offset, const ReferenceSeqCoverage* data)
 {
     rc_t rc = 0;
 
@@ -1193,8 +2558,8 @@ LIB_EXPORT rc_t CC ReferenceSeq_AddCoverage(const ReferenceSeq* cself, int64_t o
         rc = RC(rcAlign, rcFile, rcReading, rcParam, rcNull);
     } else if( !(cself->mgr->options & ewrefmgr_co_Coverage) ) {
         rc = RC( rcAlign, rcType, rcWriting, rcData, rcUnexpected);
-        ALIGN_DBGERRP("coverage %s", rc, "data");
-    } else if( (rc = ReferenceSeq_ReOffset(cself, &offset)) == 0 ) {
+        ALIGN_R_DBGERRP("coverage %s", rc, "data");
+    } else if( (rc = ReferenceSeq_ReOffset(cself->circular, cself->seq_len, &offset)) == 0 ) {
         rc = TableWriterRef_WriteCoverage(cself->mgr->writer, cself->start_rowid, offset, data);
     }
     ALIGN_DBGERR(rc);
diff --git a/libs/align/writer-refseq.c b/libs/align/writer-refseq.c
index 43995c5..6da7795 100644
--- a/libs/align/writer-refseq.c
+++ b/libs/align/writer-refseq.c
@@ -69,10 +69,9 @@ LIB_EXPORT rc_t CC TableWriterRefSeq_Make(const TableWriterRefSeq** cself, VDBMa
 {
     rc_t rc = 0;
 
-    if( cself == NULL )
+    if( cself == NULL ) {
         rc = RC(rcAlign, rcFormatter, rcConstructing, rcParam, rcNull);
-    else
-    {
+    } else {
         TableWriterRefSeq* self = calloc(1, sizeof(*self));
         if( self == NULL ) {
             rc = RC(rcAlign, rcFormatter, rcConstructing, rcMemory, rcExhausted);
@@ -89,18 +88,26 @@ LIB_EXPORT rc_t CC TableWriterRefSeq_Make(const TableWriterRefSeq** cself, VDBMa
             *cself = self;
             ALIGN_DBG("table %s created", table_path);
         } else {
-            TableWriterRefSeq_Whack(self, false, NULL);
+            TableWriterRefSeq_Whack(self, false, NULL, NULL, NULL, NULL, 0);
             ALIGN_DBGERRP("table %s", rc, table_path);
         }
     }
     return rc;
 }
 
-LIB_EXPORT rc_t CC TableWriterRefSeq_Whack(const TableWriterRefSeq* cself, bool commit, uint64_t* rows)
+LIB_EXPORT rc_t CC TableWriterRefSeq_Whack(const TableWriterRefSeq* cself, bool commit, uint64_t* rows,
+                                           const char* argv0, const char* argv0_date,
+                                           const char* app_name, ver_t app_version)
 {
     rc_t rc = 0;
+
     if( cself != NULL ) {
-        rc = TableWriter_Whack(cself->base, commit, rows);
+        rc_t rc1;
+        if( commit ) {
+            rc = TableWriter_Sign(cself->base, argv0, argv0_date, app_name, app_version);
+        }
+        rc1 = TableWriter_Whack(cself->base, rc ? false : commit, rows);
+        rc = rc ? rc : rc1;
         free((TableWriterRefSeq*)cself);
     }
     return rc;
diff --git a/libs/align/writer-sequence.c b/libs/align/writer-sequence.c
index 4e5f634..4453ac5 100644
--- a/libs/align/writer-sequence.c
+++ b/libs/align/writer-sequence.c
@@ -26,8 +26,13 @@
 #include <align/extern.h>
 
 #include <klib/rc.h>
+#include <klib/vector.h>
+#include <klib/sort.h>
+#include <klib/data-buffer.h>
+#include <klib/printf.h>
 #include <insdc/insdc.h>
 #include <vdb/database.h>
+#include <vdb/cursor.h>
 #include <sra/sradb.h>
 #include <align/writer-sequence.h>
 #include "writer-priv.h"
@@ -47,7 +52,7 @@ static const TableWriterColumn TableWriterSeq_cols[ewseq_cn_Last + 1] =
     /* order is important, see Write below!!! */
     {0, "(INSDC:dna:text)CMP_READ", sizeof(char) * 8, ewcol_IsArray},
     {0, "(INSDC:color:text)CMP_CSREAD", sizeof(char) * 8, ewcol_IsArray | ewcol_Ignore},
-    {0, "CSKEY", sizeof(char) * 8, ewcol_IsArray | ewcol_Ignore},
+    {0, "CS_KEY", sizeof(char) * 8, ewcol_IsArray | ewcol_Ignore},
     {0, "QUALITY", sizeof(INSDC_quality_phred) * 8, ewcol_IsArray},
     {0, "PRIMARY_ALIGNMENT_ID", sizeof(int64_t) * 8, ewcol_IsArray},
     {0, "ALIGNMENT_COUNT", sizeof(uint8_t) * 8, ewcol_IsArray},
@@ -58,14 +63,16 @@ static const TableWriterColumn TableWriterSeq_cols[ewseq_cn_Last + 1] =
     {0, "READ_TYPE", sizeof(SRAReadTypes) * 8, ewcol_IsArray},
     {0, "READ_START", sizeof(INSDC_coord_zero) * 8, ewcol_IsArray},
     {0, "READ_LEN", sizeof(INSDC_coord_len) * 8, ewcol_IsArray},
-    {0, "TMP_KEY_ID", sizeof(uint32_t) * 8, ewcol_Temporary},
+    {0, "TMP_KEY_ID", sizeof(uint64_t) * 8, ewcol_Temporary},
     {0, "SPOT_GROUP", sizeof(char) * 8, ewcol_IsArray | ewcol_Ignore},
-    {0, "READ_FILTER", sizeof(uint8_t) * 8, ewcol_IsArray}
+    {0, "READ_FILTER", sizeof(uint8_t) * 8, ewcol_IsArray},
+    {0, "TI", sizeof(uint64_t) * 8, ewcol_IsArray | ewcol_Ignore}
 };
 
 static const TableReaderColumn TableSeqReadTmpKey_cols[] = {
-    {0, "TMP_KEY_ID", NULL, 0, 0},
-    {0, NULL, NULL, 0, 0}
+    {0, "TMP_KEY_ID", {NULL}, 0, 0},
+    {0, "READ_LEN", {NULL}, 0, 0},
+    {0, NULL, {NULL}, 0, 0}
 };
 
 struct TableWriterSeq {
@@ -81,6 +88,11 @@ struct TableWriterSeq {
     TableWriterColumn cols_alignd[2];
     const TableReader* tmpkey_reader;
     TableReaderColumn cols_read_tmpkey[sizeof(TableSeqReadTmpKey_cols) / sizeof(TableSeqReadTmpKey_cols[0])];
+    KVector *stats;
+    unsigned statsCount;
+    int64_t tmpKeyIdFirst;
+    int64_t tmpKeyIdLast;
+    bool flush;
 };
 
 static bool TableWriterSeq_InitQuantMatrix(uint8_t dst[256], char const quant[])
@@ -160,11 +172,112 @@ static bool TableWriterSeq_InitQuantMatrix(uint8_t dst[256], char const quant[])
     return false;
 }
 
+typedef struct { uint64_t distance, count; } stats_pair_t;
+
+typedef struct { 
+    stats_pair_t *stats;
+    unsigned i;
+} pb_t;
+
+static rc_t CC stats_cb(uint64_t key, uint64_t value, void *user_data)
+{
+    pb_t *pb = user_data;
+    
+    pb->stats[pb->i].distance = key;
+    pb->stats[pb->i].count = value;
+    ++pb->i;
+    
+    return 0;
+}
+
+static int CC stats_cmp_count(const void *A, const void *B, void *ignore)
+{
+    if (((stats_pair_t const *)A)->distance == 0)
+        return -1;
+    if (((stats_pair_t const *)B)->distance == 0)
+        return 1;
+    if (((stats_pair_t const *)B)->count < ((stats_pair_t const *)A)->count)
+        return -1;
+    if (((stats_pair_t const *)B)->count > ((stats_pair_t const *)A)->count)
+        return 1;
+    if (((stats_pair_t const *)B)->distance < ((stats_pair_t const *)A)->distance)
+        return 1;
+    if (((stats_pair_t const *)B)->distance > ((stats_pair_t const *)A)->distance)
+        return -1;
+    return 0;
+}
+
+static int CC stats_cmp_distance(const void *A, const void *B, void *ignore)
+{
+    if (((stats_pair_t const *)A)->distance < ((stats_pair_t const *)B)->distance)
+        return -1;
+    if (((stats_pair_t const *)A)->distance > ((stats_pair_t const *)B)->distance)
+        return 1;
+    return 0;
+}
+
+static rc_t TableWriterSeq_WriteStatistics(TableWriterSeq const *cself, KMDataNode *node)
+{
+    pb_t pb;
+    rc_t rc;
+    KDataBuffer buf;
+    
+    rc = KDataBufferMake(&buf, 8 * sizeof(pb.stats[0]), cself->statsCount);
+    if (rc) return rc;
+    
+    pb.stats = buf.base;
+    pb.i = 0;
+    rc = KVectorVisitU64(cself->stats, 0, stats_cb, &pb);
+    if (rc == 0) {
+        unsigned i;
+        unsigned const n = cself->statsCount < 126 ? cself->statsCount : 126;
+        uint64_t *const distance = buf.base;
+        
+        ksort(pb.stats, cself->statsCount, sizeof(pb.stats[0]), stats_cmp_count, NULL);
+        ksort(pb.stats, n, sizeof(pb.stats[0]), stats_cmp_distance, NULL);
+        for (i = 0; i != n; ++i) {
+            distance[i] = pb.stats[i].distance;
+        }
+        rc = KMDataNodeWrite(node, distance, n * sizeof(distance[0]));
+    }
+    KDataBufferWhack(&buf);
+    return rc;
+}
+
+static rc_t TableWriterSeq_CollectStatistics(TableWriterSeq *self, const TableWriterData* primary_alignment_id)
+{
+    rc_t rc;
+    int64_t mate[2] = {0, 0};
+    uint64_t distance = 0;
+    uint64_t count = 0;
+    
+    memcpy(mate, primary_alignment_id->buffer, sizeof(mate[0]) * primary_alignment_id->elements);
+    if (mate[0] && mate[1]) {
+        distance = (mate[0] < mate[1]) ? (mate[1] - mate[0]) : (mate[0] - mate[1]);
+    }
+    else
+        return 0;
+    if (self->stats == NULL) {
+        rc = KVectorMake(&self->stats); if (rc) return rc;
+    }
+    rc = KVectorGetU64(self->stats, distance, &count);
+    if (GetRCObject(rc) == rcItem && GetRCState(rc) == rcNotFound) {
+        rc = KVectorSetU64(self->stats, distance, 1);
+        if (rc == 0) ++self->statsCount;
+    }
+    else if (rc == 0) {
+        ++count;
+        rc = KVectorSetU64(self->stats, distance, count);
+    }
+    return rc;
+}
+
 LIB_EXPORT rc_t CC TableWriterSeq_Make(const TableWriterSeq** cself, VDatabase* db,
                                        uint32_t const options, char const qual_quantization[])
 {
     rc_t rc = 0;
     TableWriterSeq* self = NULL;
+    char const *tblName = (options & ewseq_co_ColorSpace) ? "CS_SEQUENCE" : "SEQUENCE";
 
     if( cself == NULL || db == NULL ) {
         rc = RC(rcAlign, rcFormatter, rcConstructing, rcParam, rcNull);
@@ -193,7 +306,10 @@ LIB_EXPORT rc_t CC TableWriterSeq_Make(const TableWriterSeq** cself, VDatabase*
             if( options & ewseq_co_SpotGroup) {
                 self->cols[ewseq_cn_SPOT_GROUP].flags &= ~ewcol_Ignore;
             }
-            if( (rc = TableWriter_Make(&self->base, db, "SEQUENCE")) == 0 ) {
+            if( options & ewseq_co_TI) {
+                self->cols[ewseq_cn_TI].flags &= ~ewcol_Ignore;
+            }
+            if( (rc = TableWriter_Make(&self->base, db, tblName, "SEQUENCE")) == 0 ) {
                 rc = TableWriter_AddCursor(self->base, self->cols, sizeof(self->cols)/sizeof(self->cols[0]), &self->cursor_id);
             }
         }
@@ -232,8 +348,24 @@ LIB_EXPORT rc_t CC TableWriterSeq_Whack(const TableWriterSeq* cself, bool commit
 
     if( cself != NULL ) {
         TableWriterSeq* self = (TableWriterSeq*)cself;
+        VTable *vtbl;
+        
         TableReader_Whack(cself->tmpkey_reader);
-        rc = TableWriter_Whack(cself->base, commit, rows);
+#if 1
+        if (cself->stats && commit && (rc = TableWriter_GetVTable(cself->base, &vtbl)) == 0 ) {
+            KMetadata* meta;
+            if( (rc = VTableOpenMetadataUpdate(vtbl, &meta)) == 0 ) {
+                KMDataNode* node;
+                if( (rc = KMetadataOpenNodeUpdate(meta, &node, "MATE_STATISTICS")) == 0 ) {
+                    rc = TableWriterSeq_WriteStatistics(cself, node);
+                    KMDataNodeRelease(node);
+                }
+                KMetadataRelease(meta);
+            }
+        }
+#endif
+        rc = TableWriter_Whack(cself->base, commit && (rc == 0), rows);
+        KVectorRelease(cself->stats);
         free(self->qual_buf);
         free(self);
     }
@@ -299,6 +431,9 @@ LIB_EXPORT rc_t CC TableWriterSeq_Write(const TableWriterSeq* cself, const Table
     } else if( (cself->options & ewseq_co_AlignData) && data->alignment_count.elements != data->nreads ) {
         rc = RC(rcAlign, rcType, rcWriting, rcData, rcInconsistent);
         ALIGN_DBGERRP("nreads and alignment_count length %u <> %lu", rc, data->nreads, data->alignment_count.elements);
+    } else if( data->no_quantize_mask.buffer && data->no_quantize_mask.elements != data->quality.elements ) {
+        rc = RC(rcAlign, rcType, rcWriting, rcData, rcInconsistent);
+        ALIGN_DBGERRP("quality and no_quantize_mask length %u <> %lu", rc, data->quality.elements, data->no_quantize_mask.elements);
     } else if( !(cself->options & ewseq_co_NoLabelData) &&
                (lbl = ((data->label.buffer ? 1 : 0) + (data->label_start.buffer ? 1 : 0) +
                                                   (data->label_len.buffer ? 1 : 0))) != 0 && lbl != 3 ) {
@@ -308,6 +443,9 @@ LIB_EXPORT rc_t CC TableWriterSeq_Write(const TableWriterSeq* cself, const Table
         if( cself->options & ewseq_co_AlignData ) {
             TW_COL_WRITE(cself->base, cself->cols[ewseq_cn_PRIMARY_ALIGNMENT_ID], data->primary_alignment_id);
             TW_COL_WRITE(cself->base, cself->cols[ewseq_cn_ALIGNMENT_COUNT], data->alignment_count);
+            if (rc == 0) {
+                rc = TableWriterSeq_CollectStatistics((TableWriterSeq *)cself, &data->primary_alignment_id);
+            }
         }
         if( cself->options & ewseq_co_SaveRead ) {
             TW_COL_WRITE(cself->base, cself->cols[ewseq_cn_READ], data->sequence);
@@ -342,8 +480,18 @@ LIB_EXPORT rc_t CC TableWriterSeq_Write(const TableWriterSeq* cself, const Table
                     ((TableWriterSeq*)cself)->qual_buf = p;
                 }
             }
-            for(i = 0; i < data->quality.elements; i++ ) {
-                cself->qual_buf[i] = cself->discrete_qual[b[i]];
+            if (data->no_quantize_mask.buffer) {
+                bool const *mask = data->no_quantize_mask.buffer;
+                
+                for(i = 0; i < data->quality.elements; i++ ) {
+                    uint8_t const q = b[i] & 0x3F;
+                    cself->qual_buf[i] = mask[i] ? q : cself->discrete_qual[q];
+                }
+            }
+            else {
+                for(i = 0; i < data->quality.elements; i++ ) {
+                    cself->qual_buf[i] = cself->discrete_qual[b[i]];
+                }
             }
             TW_COL_WRITE_BUF(cself->base, cself->cols[ewseq_cn_QUALITY], cself->qual_buf, data->quality.elements);
         }
@@ -359,6 +507,8 @@ LIB_EXPORT rc_t CC TableWriterSeq_Write(const TableWriterSeq* cself, const Table
         TW_COL_WRITE(cself->base, cself->cols[ewseq_cn_SPOT_GROUP], data->spot_group);
         TW_COL_WRITE(cself->base, cself->cols[ewseq_cn_CSKEY], data->cskey);
         TW_COL_WRITE(cself->base, cself->cols[ewseq_cn_READ_FILTER], data->read_filter);
+        TW_COL_WRITE(cself->base, cself->cols[ewseq_cn_PLATFORM], data->platform);
+        TW_COL_WRITE(cself->base, cself->cols[ewseq_cn_TI], data->ti);
         if( rc == 0 ) {
             rc = TableWriter_CloseRow(cself->base);
         }
@@ -378,7 +528,10 @@ LIB_EXPORT rc_t CC TableWriterSeq_TmpKeyStart(const TableWriterSeq* cself)
         ALIGN_DBGERR(rc);
     } else if( (rc = TableWriter_CloseCursor(cself->base, 0, NULL)) == 0 ) {
         TableWriterSeq* self = (TableWriterSeq*)cself;
-        const VTable* vtbl = NULL;
+        VTable* vtbl = NULL;
+        
+        self->tmpKeyIdFirst = INT64_MAX;
+        self->tmpKeyIdLast = INT64_MIN;
         memcpy(&self->cols_read_tmpkey, &TableSeqReadTmpKey_cols, sizeof(TableSeqReadTmpKey_cols));
         if( (rc = TableWriter_GetVTable(cself->base, &vtbl)) == 0 &&
             (rc = TableReader_Make(&self->tmpkey_reader, vtbl, self->cols_read_tmpkey, 50 * 1024 * 1024)) == 0 ) {
@@ -391,7 +544,7 @@ LIB_EXPORT rc_t CC TableWriterSeq_TmpKeyStart(const TableWriterSeq* cself)
     return rc;
 }
 
-LIB_EXPORT rc_t CC TableWriterSeq_TmpKey(const TableWriterSeq* cself, int64_t rowid, uint32_t* key_id)
+LIB_EXPORT rc_t CC TableWriterSeq_TmpKey(const TableWriterSeq* cself, int64_t rowid, uint64_t* key_id)
 {
     rc_t rc = 0;
 
@@ -402,7 +555,13 @@ LIB_EXPORT rc_t CC TableWriterSeq_TmpKey(const TableWriterSeq* cself, int64_t ro
         rc = RC( rcAlign, rcType, rcReading, rcMode, rcNotOpen);
         ALIGN_DBGERR(rc);
     } else if( (rc = TableReader_ReadRow(cself->tmpkey_reader, rowid)) == 0 ) {
-        memcpy(key_id, cself->cols_read_tmpkey[0].base, sizeof(*key_id));
+        memcpy(key_id, cself->cols_read_tmpkey[0].base.var, sizeof(*key_id));
+        if (cself->tmpKeyIdLast < rowid || rowid < cself->tmpKeyIdFirst) {
+            rc = TableReader_PageIdRange(cself->tmpkey_reader, rowid,
+                                        &((TableWriterSeq*)cself)->tmpKeyIdFirst,
+                                        &((TableWriterSeq*)cself)->tmpKeyIdLast);
+            ((TableWriterSeq*)cself)->flush = rc == 0;
+        }
     }
     return rc;
 }
@@ -413,17 +572,43 @@ LIB_EXPORT rc_t CC TableWriterSeq_WriteAlignmentData(const TableWriterSeq* cself
 {
     rc_t rc = 0;
 
-    if( cself == NULL || rowid == 0 || primary_alignment_id == NULL ) {
+    if( cself == NULL ) {
         rc = RC( rcAlign, rcType, rcWriting, rcParam, rcNull);
         ALIGN_DBGERR(rc);
     } else if( cself->options & ewseq_co_AlignData ) {
         rc = RC( rcAlign, rcType, rcWriting, rcParam, rcViolated);
         ALIGN_DBGERR(rc);
-    } else if( (rc = TableWriter_OpenRowId(cself->base, rowid, cself->alignd_cursor_id)) == 0 ) {
-        TW_COL_WRITE(cself->base, cself->cols_alignd[0], *primary_alignment_id);
-        TW_COL_WRITE(cself->base, cself->cols_alignd[1], *alignment_count);
-        if( rc == 0 ) {
-            rc = TableWriter_CloseRow(cself->base);
+    } else if( rowid == 0 ) {
+        rc = TableWriter_Flush(cself->base, cself->alignd_cursor_id);
+    }
+    else if( primary_alignment_id == NULL || alignment_count == NULL ) {
+        rc = RC( rcAlign, rcType, rcWriting, rcParam, rcNull);
+        ALIGN_DBGERR(rc);
+    } else if( (rc = TableReader_ReadRow(cself->tmpkey_reader, rowid)) != 0 ||
+        cself->cols_read_tmpkey[1].len != primary_alignment_id->elements ) {
+        rc = rc ? rc : RC(rcAlign, rcType, rcWriting, rcData, rcInconsistent);
+        ALIGN_DBGERRP("nreads and primary_alignment_id length %u <> %lu",
+            rc, cself->cols_read_tmpkey[1].len, primary_alignment_id->elements);
+    } else if( primary_alignment_id->elements != alignment_count->elements ) {
+        rc = RC(rcAlign, rcType, rcWriting, rcData, rcInconsistent);
+        ALIGN_DBGERRP("primary_alignment_id and alignment_count length %u <> %lu",
+            rc, primary_alignment_id->elements, alignment_count->elements);
+    }
+    else {
+        if (cself->flush) {
+            rc = TableWriter_Flush(cself->base, cself->alignd_cursor_id);
+            ((TableWriterSeq*)cself)->flush = false;
+        }
+        if( rc == 0 &&
+           (rc = TableWriter_OpenRowId(cself->base, rowid, cself->alignd_cursor_id)) == 0 ) {
+            TW_COL_WRITE(cself->base, cself->cols_alignd[0], *primary_alignment_id);
+            TW_COL_WRITE(cself->base, cself->cols_alignd[1], *alignment_count);
+            if( rc == 0 ) {
+                rc = TableWriter_CloseRow(cself->base);
+            }
+            if (rc == 0/* && (cself->options & ewseq_co_WantMateStats)*/) {
+                rc = TableWriterSeq_CollectStatistics((TableWriterSeq *)cself, primary_alignment_id);
+            }
         }
     }
     return rc;
diff --git a/libs/axf/Makefile b/libs/axf/Makefile
index 9af57d2..f9710fd 100644
--- a/libs/axf/Makefile
+++ b/libs/axf/Makefile
@@ -25,7 +25,7 @@
 
 default: std
 
-TOP ?= $(abspath ../..)
+TOP ?= $(shell ../../build/abspath.sh ../..)
 MODULE = libs/axf
 
 MOD_LIBS = \
@@ -43,15 +43,13 @@ include $(TOP)/build/Makefile.env
 #-------------------------------------------------------------------------------
 # outer targets
 #
-vers-includes: $(addsuffix .vers.h,$(ALL_LIBS))
-
-all std: makedirs vers-includes
+all std: makedirs
 	@ $(MAKE_CMD) $(TARGDIR)/std
 
-$(ALL_LIBS): makedirs vers-includes
+$(ALL_LIBS): makedirs
 	@ $(MAKE_CMD) $(TARGDIR)/$@
 
-.PHONY: vers-includes all std $(ALL_LIBS)
+.PHONY: all std $(ALL_LIBS)
 
 #-------------------------------------------------------------------------------
 # std
@@ -82,6 +80,7 @@ AXF_SRC = \
 	raw-restore-read \
 	raw-restore-qual \
 	seq-restore-read \
+	seq-construct-read \
 	cigar \
 	project_read_from_sequence \
 	not-my-row \
@@ -94,16 +93,19 @@ AXF_SRC = \
 	align-local_ref_start \
 	generate-mismatch-qual \
 	mismatch-restore-qual \
-	ref-preserve_qual
+	ref-preserve_qual \
+	ref-tbl \
+	make-cmp-read_desc \
+	get_mate_align_ids
 
 AXF_OBJ = \
 	$(addsuffix .$(LOBX),$(AXF_SRC))
 
 AXF_LIB = \
+	-lalign-reader \
 	-dvdb \
 	-dkdb \
 	-dklib \
-	-dalign-reader \
 	-dm \
 	-dz
 
@@ -113,7 +115,7 @@ $(MODDIR)/libaxf.$(SHLX): $(AXF_OBJ)
 $(TARGDIR)/libaxf.$(LIBX): $(ILIBDIR)/libaxf.$(LIBX)
 
 $(ILIBDIR)/libaxf.$(LIBX): $(AXF_OBJ)
-	$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(AXF_LIB)
+	$(LD) --slib -o $@ $^ $(AXF_LIB)
 
 
 #-------------------------------------------------------------------------------
@@ -131,10 +133,11 @@ WAXF_OBJ = \
 	$(addsuffix .$(LOBX),$(WAXF_SRC))
 
 WAXF_LIB = \
+	-lalign-reader \
 	-dwvdb \
 	-dwkdb \
+	-lkfg \
 	-dklib \
-	-dalign-writer \
 	-dm \
 	-dz
 
@@ -144,4 +147,4 @@ $(WMODDIR)/libwaxf.$(SHLX): $(WAXF_OBJ)
 $(TARGDIR)/libwaxf.$(LIBX): $(ILIBDIR)/libwaxf.$(LIBX)
 
 $(ILIBDIR)/libwaxf.$(LIBX): $(WAXF_OBJ)
-	$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(WAXF_LIB)
+	$(LD) --slib -o $@ $^ $(WAXF_LIB)
diff --git a/libs/axf/align-local_ref_id.c b/libs/axf/align-local_ref_id.c
index 64b3c5c..97f8efb 100644
--- a/libs/axf/align-local_ref_id.c
+++ b/libs/axf/align-local_ref_id.c
@@ -37,6 +37,8 @@
 
 #include <bitstr.h>
 
+#include "ref-tbl.h"
+
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
@@ -44,7 +46,7 @@
 typedef struct LocalRefID LocalRefID;
 struct LocalRefID
 {
-    uint32_t maxSeqLen;
+    uint32_t max_seq_len;
 };
 
 static
@@ -58,53 +60,37 @@ void CC LocalRefIDWhack ( void *obj )
 }
 
 static
-rc_t LocalRefIDMake ( LocalRefID **objp, const VTable *tbl )
+rc_t LocalRefIDMake ( LocalRefID **objp, const VTable *tbl, const VCursor *native_curs)
 {
     rc_t rc;
-    const VCursor *curs;
-    uint32_t colIdx;
-
     /* create the object */
     LocalRefID *obj = malloc ( sizeof * obj );
     if ( obj == NULL ) {
         rc = RC ( rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted );
     } else {
-        /* get at the parent database */
-        const VDatabase *db;
-        rc = VTableOpenParentRead ( tbl, & db );
-        if ( rc == 0 )
-        {
-            /* open the reference table */
-            const VTable *reftbl;
-            rc = VDatabaseOpenTableRead ( db, & reftbl, "REFERENCE" );
-            VDatabaseRelease ( db );
-            if ( rc == 0 )
-            {
-                /* create a cursor */
-                rc = VTableCreateCursorRead ( reftbl, & curs);
-                VTableRelease ( reftbl );
-                if( rc == 0 ) {
-                    /* add columns to cursor */
-                    if( (rc = VCursorAddColumn(curs, &colIdx, "(U32)MAX_SEQ_LEN")) == 0 ) {
-                        rc = VCursorOpen(curs);
-                    }
-                    if (rc == 0) {
-                        const void *base;
-                        uint32_t row_len;
-                        
-                        rc = VCursorCellDataDirect(curs, 1, colIdx, NULL, &base, NULL, &row_len);
-                        if (rc == 0) {
-                            memcpy(&obj->maxSeqLen, base, 4);
-                        }
-                    }
-                    VCursorRelease(curs);
-                    if( rc == 0 ) {
-                        *objp = obj;
-                        return 0;
+	const VCursor *curs=NULL;
+	 /* open the reference table cursor*/
+	if( (rc = AlignRefTableCursor(tbl, native_curs, &curs, NULL)) == 0 ){
+		uint32_t itmp;
+                if(  (rc = VCursorAddColumn(curs, &itmp, "(U32)MAX_SEQ_LEN")) == 0 || GetRCState(rc) == rcExists)  {
+                    const void *base;
+                    uint32_t row_len;
+                    rc = VCursorCellDataDirect(curs, 1, itmp, NULL, &base, NULL, &row_len);
+                    if(rc == 0) {
+                        assert(row_len == 1);
+                        memcpy(&obj->max_seq_len, base, 4);
                     }
                 }
-            }
-        }
+                if( GetRCObject(rc) == rcColumn && GetRCState(rc) == rcNotFound ) {
+                    obj->max_seq_len = 0;
+                    rc = 0;
+                }
+		VCursorRelease(curs);
+		if(rc == 0){
+			*objp = obj;
+			return 0;
+		}
+	}
         free ( obj );
     }
     return rc;
@@ -119,10 +105,10 @@ rc_t CC align_local_ref_id ( void *data, const VXformInfo *info, void *Dst, cons
     LocalRefID const *self = (void const *)data;
     int64_t *dst=(int64_t*)Dst;
     uint64_t const *global_ref_start = Src; 
-    unsigned i;
+    uint64_t i;
 
     for (i = 0; i != elem_count; ++i) {
-        dst[i] = global_ref_start[i] / self->maxSeqLen + 1;
+        dst[i] = global_ref_start[i] / self->max_seq_len + 1;
     }
     return 0;
 }
@@ -131,7 +117,7 @@ VTRANSFACT_IMPL ( NCBI_align_local_ref_id, 1, 0, 0 ) ( const void *self, const V
     VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
 {
     LocalRefID *fself;
-    rc_t rc = LocalRefIDMake ( & fself, info -> tbl );
+    rc_t rc = LocalRefIDMake ( & fself, info -> tbl,  (const VCursor*)info->parms );
     if ( rc == 0 )
     {
         rslt -> self = fself;
diff --git a/libs/axf/align-local_ref_start.c b/libs/axf/align-local_ref_start.c
index 46ea655..6b37120 100644
--- a/libs/axf/align-local_ref_start.c
+++ b/libs/axf/align-local_ref_start.c
@@ -37,6 +37,8 @@
 
 #include <bitstr.h>
 
+#include "ref-tbl.h"
+
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
@@ -44,7 +46,7 @@
 typedef struct LocalRefStart LocalRefStart;
 struct LocalRefStart
 {
-    uint32_t maxSeqLen;
+    uint32_t max_seq_len;
 };
 
 static
@@ -58,52 +60,37 @@ void CC LocalRefStartWhack ( void *obj )
 }
 
 static
-rc_t LocalRefStartMake ( LocalRefStart **objp, const VTable *tbl )
+rc_t LocalRefStartMake ( LocalRefStart **objp, const VTable *tbl, const VCursor *native_curs )
 {
     rc_t rc;
-    const VCursor *curs;
-    uint32_t colIdx;
 
     /* create the object */
     LocalRefStart *obj = malloc ( sizeof * obj );
     if ( obj == NULL ) {
         rc = RC ( rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted );
     } else {
-        /* get at the parent database */
-        const VDatabase *db;
-        rc = VTableOpenParentRead ( tbl, & db );
-        if ( rc == 0 )
-        {
-            /* open the reference table */
-            const VTable *reftbl;
-            rc = VDatabaseOpenTableRead ( db, & reftbl, "REFERENCE" );
-            VDatabaseRelease ( db );
-            if ( rc == 0 )
-            {
-                /* create a cursor */
-                rc = VTableCreateCursorRead ( reftbl, & curs);
-                VTableRelease ( reftbl );
-                if( rc == 0 ) {
-                    /* add columns to cursor */
-                    if( (rc = VCursorAddColumn(curs, &colIdx, "(U32)MAX_SEQ_LEN")) == 0 ) {
-                        rc = VCursorOpen(curs);
-                    }
-                    if (rc == 0) {
-                        const void *base;
-                        uint32_t row_len;
-                        
-                        rc = VCursorCellDataDirect(curs, 1, colIdx, NULL, &base, NULL, &row_len);
-                        if (rc == 0) {
-                            memcpy(&obj->maxSeqLen, base, 4);
-                        }
+	const VCursor *curs=NULL;
+         /* open the reference table cursor*/
+        if( (rc = AlignRefTableCursor(tbl, native_curs, &curs, NULL)) == 0 ){
+                uint32_t itmp;
+                if(  (rc = VCursorAddColumn(curs, &itmp, "(U32)MAX_SEQ_LEN")) == 0 || GetRCState(rc) == rcExists)  {
+                    const void *base;
+                    uint32_t row_len;
+                    rc = VCursorCellDataDirect(curs, 1, itmp, NULL, &base, NULL, &row_len);
+                    if(rc == 0) {
+                        assert(row_len == 1);
+                        memcpy(&obj->max_seq_len, base, 4);
                     }
-                    VCursorRelease(curs);
-                    if( rc == 0 ) {
+                }
+                if( GetRCObject(rc) == rcColumn && GetRCState(rc) == rcNotFound ) {
+                    obj->max_seq_len = 0;
+                    rc = 0;
+                }
+                VCursorRelease(curs);
+                if(rc == 0){
                         *objp = obj;
                         return 0;
-                    }
                 }
-            }
         }
         free ( obj );
     }
@@ -122,7 +109,7 @@ rc_t CC align_local_ref_start ( void *data, const VXformInfo *info, void *Dst, c
     unsigned i;
     
     for (i = 0; i != elem_count; ++i) {
-        dst[i] = global_ref_start[i] % self->maxSeqLen;
+        dst[i] = global_ref_start[i] % self->max_seq_len;
     }
     return 0;
 }
@@ -131,7 +118,7 @@ VTRANSFACT_IMPL ( NCBI_align_local_ref_start, 1, 0, 0 ) ( const void *self, cons
     VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
 {
     LocalRefStart *fself;
-    rc_t rc = LocalRefStartMake ( & fself, info -> tbl );
+    rc_t rc = LocalRefStartMake ( & fself, info -> tbl, (const VCursor*)info->parms  );
     if ( rc == 0 )
     {
         rslt -> self = fself;
diff --git a/libs/axf/align-ref-name.c b/libs/axf/align-ref-name.c
index e40118e..ce7fc21 100644
--- a/libs/axf/align-ref-name.c
+++ b/libs/axf/align-ref-name.c
@@ -37,6 +37,8 @@
 
 #include <bitstr.h>
 
+#include "ref-tbl.h"
+
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
@@ -60,7 +62,7 @@ void CC RefNameWhack ( void *obj )
 }
 
 static
-rc_t RefNameMake ( RefName **objp, const VTable *tbl )
+rc_t RefNameMake ( RefName **objp, const VTable *tbl, const VCursor *native_curs )
 {
     rc_t rc;
 
@@ -69,32 +71,23 @@ rc_t RefNameMake ( RefName **objp, const VTable *tbl )
     if ( obj == NULL ) {
         rc = RC ( rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted );
     } else {
-        /* get at the parent database */
-        const VDatabase *db;
-        rc = VTableOpenParentRead ( tbl, & db );
-        if ( rc == 0 )
-        {
-            /* open the reference table */
-            const VTable *reftbl;
-            rc = VDatabaseOpenTableRead ( db, & reftbl, "REFERENCE" );
-            VDatabaseRelease ( db );
-            if ( rc == 0 )
-            {
-                /* create a cursor */
-                rc = VTableCreateCachedCursorRead(reftbl, &obj->curs, 2*1024u * 1024u);
-                VTableRelease ( reftbl );
+	obj->curs=NULL;
+        /* open the reference cursor */
+	rc = AlignRefTableCursor(tbl, native_curs, &obj->curs, NULL);
+	if(rc == 0){
+                /* add columns to cursor */
+		rc = VCursorAddColumn(obj->curs, &obj->name_idx, "(utf8)REF_NAME");
+		if( GetRCObject(rc) == rcColumn && GetRCState(rc) == rcNotFound ) {
+			rc = VCursorAddColumn(obj->curs, &obj->name_idx, "(utf8)NAME");
+		}
+		if(GetRCState(rc) == rcExists){
+			rc = 0;
+		}
                 if( rc == 0 ) {
-                    /* add columns to cursor */
-                    if( (rc = VCursorAddColumn(obj->curs, &obj->name_idx, "(utf8)NAME")) == 0 ) {
-                        rc = VCursorOpen(obj->curs);
-                    }
-                    if( rc == 0 ) {
-                        *objp = obj;
-                        return 0;
-                    }
-                    VCursorRelease ( obj -> curs );
+                    *objp = obj;
+                    return 0;
                 }
-            }
+                VCursorRelease ( obj -> curs );
         }
         free ( obj );
     }
@@ -102,7 +95,7 @@ rc_t RefNameMake ( RefName **objp, const VTable *tbl )
 }
 
 enum align_ref_name_args {
-    REF_ID,
+    REF_ID
 };
 
 /*
@@ -114,7 +107,6 @@ rc_t CC align_ref_name ( void *data, const VXformInfo *info,
 {
     rc_t rc;
     RefName const *self = (void const *)data;
-    uint8_t *dst;
     char const *name = NULL;
     uint32_t name_len;
 
@@ -132,8 +124,8 @@ rc_t CC align_ref_name ( void *data, const VXformInfo *info,
     }
     
     if (GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcRow) {
-        name = "*";
-        name_len = 1;
+        name = "";
+        name_len = 0;
     }
     else if (rc) return rc;
     
@@ -153,7 +145,7 @@ VTRANSFACT_IMPL ( NCBI_align_ref_name, 1, 0, 0 ) ( const void *self, const VXfac
     VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
 {
     RefName *fself;
-    rc_t rc = RefNameMake ( & fself, info -> tbl );
+    rc_t rc = RefNameMake ( & fself, info -> tbl,(const VCursor*)info->parms  );
     if ( rc == 0 )
     {
         rslt -> self = fself;
diff --git a/libs/axf/align-ref-pos.c b/libs/axf/align-ref-pos.c
index 2c2c79c..fb891e2 100644
--- a/libs/axf/align-ref-pos.c
+++ b/libs/axf/align-ref-pos.c
@@ -38,6 +38,8 @@
 
 #include <bitstr.h>
 
+#include "ref-tbl.h"
+
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
@@ -104,7 +106,7 @@ void CC RefPosWhack ( void *obj )
 }
 
 static
-rc_t RefPosMake ( RefPos **objp, const VTable *tbl )
+rc_t RefPosMake ( RefPos **objp, const VTable *tbl, const VCursor *native_curs )
 {
     rc_t rc;
 
@@ -113,54 +115,44 @@ rc_t RefPosMake ( RefPos **objp, const VTable *tbl )
     if ( obj == NULL ) {
         rc = RC ( rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted );
     } else {
-        /* get at the parent database */
-        const VDatabase *db;
-	BSTreeInit(&obj->tr_range);
-        rc = VTableOpenParentRead ( tbl, & db );
-        if ( rc == 0 )
-        {
-            /* open the reference table */
-            const VTable *reftbl;
-            rc = VDatabaseOpenTableRead ( db, & reftbl, "REFERENCE" );
-            VDatabaseRelease ( db );
-	    if ( rc == 0 ){
-		const VCursor* ctmp;
-		rc = VTableCreateCursorRead ( reftbl, & ctmp);
-		if(rc==0){
-			uint32_t	itmp;
-			rc = VCursorAddColumn(ctmp, &itmp, "(U32)MAX_SEQ_LEN");
-			if(rc==0) rc = VCursorOpen(ctmp);
-			if(rc==0) {
-				const void *base;
-	                        uint32_t row_len;
-				rc = VCursorCellDataDirect(ctmp, 1,itmp, NULL, &base, NULL, &row_len);
-				if (rc == 0) {
-					assert(row_len == 1);
-					memcpy(&obj->max_seq_len, base, 4);
-				}
-			}
-		}
-	    }
-            if ( rc == 0 )
-            {
-                /* create a cursor */
-                rc = VTableCreateCachedCursorRead(reftbl, &obj->curs, 4*1024*1024);
-                VTableRelease ( reftbl );
-                if( rc == 0 ) {
-                    /* add columns to cursor */
-                    if( (rc = VCursorAddColumn(obj->curs, &obj->name_idx, "(utf8)NAME")) == 0 &&
-                        (rc = VCursorAddColumn(obj->curs, &obj->name_range_idx, "NAME_RANGE")) == 0 ) {
-                        rc = VCursorOpen(obj->curs);
-                    }
-                    if( rc == 0 ) {
-                        *objp = obj;
-                        return 0;
+	obj->curs=NULL;
+        BSTreeInit(&obj->tr_range);
+        /* open the reference table cursor*/
+	  
+	if( (rc = AlignRefTableCursor(tbl, native_curs, &obj->curs, NULL)) == 0 ) {
+                uint32_t itmp;
+                if(  (rc = VCursorAddColumn(obj->curs, &itmp, "(U32)MAX_SEQ_LEN")) == 0 || GetRCState(rc) == rcExists)  {
+                    const void *base;
+                    uint32_t row_len;
+                    rc = VCursorCellDataDirect(obj->curs, 1, itmp, NULL, &base, NULL, &row_len);
+                    if(rc == 0) {
+                        assert(row_len == 1);
+                        memcpy(&obj->max_seq_len, base, 4);
                     }
-                    VCursorRelease ( obj -> curs );
                 }
-            }
+                if( GetRCObject(rc) == rcColumn && GetRCState(rc) == rcNotFound ) {
+		    /*** no MAX_SEQ_LEN means that REF_POS==REF_START **/
+		    VCursorRelease(obj->curs);
+		    obj->curs = NULL;
+                    obj->max_seq_len = 0;
+		    obj->name_range_idx = 0;
+		    obj->name_idx = 0;
+                    rc = 0;
+                } else if( rc == 0 ) {
+                        /* add columns to cursor */
+			rc = VCursorAddColumn(obj->curs, &obj->name_idx, "(utf8)NAME");
+			if(rc == 0 || GetRCState(rc) == rcExists)
+				rc = VCursorAddColumn(obj->curs, &obj->name_range_idx, "NAME_RANGE");
+			if(GetRCState(rc) == rcExists)
+				rc = 0;
+                }
+        }
+        if( rc == 0 ) {
+            *objp = obj;
+        } else {
+	    VCursorRelease(obj->curs);
+            free(obj);
         }
-        free ( obj );
     }
     return rc;
 }
@@ -182,58 +174,55 @@ rc_t CC align_ref_pos ( void *data, const VXformInfo *info,
     rc_t rc;
     RefPos const *self = (void const *)data;
     int64_t ref_row_id;
-    char const *name = NULL;
-    uint32_t name_len;
     INSDC_coord_zero *ref_pos;
     unsigned const ploidy = argv[REF_START].u.data.elem_count;
     unsigned i;
-    BSTRowRange *brr;
 
     /* get start and length of reference segment */
-    int64_t const *ref_id = argv[REF_ID].u.data.base;
-    INSDC_coord_zero const *ref_start = argv[REF_START].u.data.base;
+    int64_t const *ref_id;
+    INSDC_coord_zero const *ref_start;
 
     assert(argv[REF_ID].u.data.elem_bits == sizeof(*ref_id) * 8);
     assert(argv[REF_START].u.data.elem_bits == sizeof(*ref_start) * 8);
 
-    ref_id += argv[REF_ID].u.data.first_elem;
+    ref_start = argv[REF_START].u.data.base;
     ref_start += argv[REF_START].u.data.first_elem;
 
+    if( self->curs != NULL ) {
+        char const *name = NULL;
+        uint32_t name_len;
+        BSTRowRange *brr;
 
-    brr = (BSTRowRange*)BSTreeFind(&self->tr_range,&ref_id[0],row_range_cmp);
+        ref_id = argv[REF_ID].u.data.base;
+        ref_id += argv[REF_ID].u.data.first_elem;
 
+        brr = (BSTRowRange*)BSTreeFind(&self->tr_range,&ref_id[0],row_range_cmp);
+        if(brr==NULL) {
+            RowRange *new_rr;
+            rc = VCursorCellDataDirect(self->curs, ref_id[0], self->name_idx, NULL, (void const **)&name, NULL, &name_len);
+            if (rc) return rc;
+            rc = VCursorParamsSet((struct VCursorParams const *)self->curs, "QUERY_SEQ_NAME", "%.*s", name_len, name);
+            if (rc) return rc;
 
-    if(brr==NULL){
-        RowRange *new_rr;
-    	rc = VCursorSetRowId(self->curs, ref_id[0]);
-    	if (rc) return rc;
-	rc = VCursorOpenRow(self->curs);
-	if (rc) return rc;
-	rc = VCursorCellData(self->curs, self->name_idx, NULL, (void const **)&name, NULL, &name_len);
-	if (rc) return rc;
-        rc = VCursorParamsSet((struct VCursorParams const *)self->curs, "QUERY_SEQ_NAME", "%.*s", name_len, name);
-        if (rc) return rc;
-        
-        rc = VCursorCellData(self->curs, self->name_range_idx, NULL, (void const **)&new_rr, NULL, NULL);
-        if (rc) return rc;
-        
-        VCursorCloseRow(self->curs);
-	brr=malloc(sizeof(*brr));
-	memcpy(&brr->rr,new_rr,sizeof(*new_rr));
-	BSTreeInsert((BSTree*)&self->tr_range,(BSTNode*)brr, row_range_sort);
-    }
+            rc = VCursorCellDataDirect(self->curs, ref_id[0], self->name_range_idx, NULL, (void const **)&new_rr, NULL, NULL);
+            if (rc) return rc;
 
-    ref_row_id = brr->rr.start_id;
-    
-    rc = KDataBufferCast(rslt->data, rslt->data, sizeof(ref_pos[0]) * 8, true);
-    if (rc) return rc;
+            brr=malloc(sizeof(*brr));
+            memcpy(&brr->rr,new_rr,sizeof(*new_rr));
+            BSTreeInsert((BSTree*)&self->tr_range,(BSTNode*)brr, row_range_sort);
+        }
+        ref_row_id = brr->rr.start_id;
+    }
 
     rc = KDataBufferResize(rslt->data, ploidy);
     if (rc) return rc;
     
-    ref_pos = rslt->data->base;    
+    ref_pos = rslt->data->base;
     for (i = 0; i != ploidy; ++i) {
-        ref_pos[i] = (ref_id[0] - ref_row_id) * self->max_seq_len + ref_start[i];
+        ref_pos[i] = ref_start[i];
+        if( self->curs != NULL ) {
+            ref_pos[i] += (ref_id[0] - ref_row_id) * self->max_seq_len;
+        }
     }
     rslt->elem_count = ploidy;
     rslt->elem_bits = sizeof(ref_pos[0]) * 8;
@@ -244,7 +233,7 @@ VTRANSFACT_IMPL ( NCBI_align_ref_pos, 1, 0, 0 ) ( const void *self, const VXfact
     VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
 {
     RefPos *fself;
-    rc_t rc = RefPosMake ( & fself, info -> tbl );
+    rc_t rc = RefPosMake ( & fself, info -> tbl,  (const VCursor*)info->parms);
     if ( rc == 0 )
     {
         rslt -> self = fself;
diff --git a/libs/axf/align-ref-seq-id.c b/libs/axf/align-ref-seq-id.c
index 5b22a80..6d0d8a7 100644
--- a/libs/axf/align-ref-seq-id.c
+++ b/libs/axf/align-ref-seq-id.c
@@ -37,6 +37,8 @@
 
 #include <bitstr.h>
 
+#include "ref-tbl.h"
+
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
@@ -60,7 +62,7 @@ void CC RefSeqIDWhack ( void *obj )
 }
 
 static
-rc_t RefSeqIDMake ( RefSeqID **objp, const VTable *tbl )
+rc_t RefSeqIDMake ( RefSeqID **objp, const VTable *tbl, const VCursor *native_curs )
 {
     rc_t rc;
 
@@ -69,32 +71,23 @@ rc_t RefSeqIDMake ( RefSeqID **objp, const VTable *tbl )
     if ( obj == NULL ) {
         rc = RC ( rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted );
     } else {
-        /* get at the parent database */
-        const VDatabase *db;
-        rc = VTableOpenParentRead ( tbl, & db );
-        if ( rc == 0 )
-        {
-            /* open the reference table */
-            const VTable *reftbl;
-            rc = VDatabaseOpenTableRead ( db, & reftbl, "REFERENCE" );
-            VDatabaseRelease ( db );
-            if ( rc == 0 )
-            {
-                /* create a cursor */
-                rc = VTableCreateCachedCursorRead(reftbl, &obj->curs, 2*1024*1024);
-                VTableRelease ( reftbl );
+	obj->curs=NULL;
+        /* open the reference cursor */
+        rc = AlignRefTableCursor(tbl, native_curs, &obj->curs, NULL);
+        if(rc == 0){
+                /* add columns to cursor */
+                rc = VCursorAddColumn(obj->curs, &obj->seqID_idx, "SEQ_ID");
+                if( GetRCObject(rc) == rcColumn && GetRCState(rc) == rcNotFound ) {
+                        rc = VCursorAddColumn(obj->curs, &obj->seqID_idx, "REF_SEQ_ID");
+                }
+                if(GetRCState(rc) == rcExists){
+                        rc = 0;
+                }
                 if( rc == 0 ) {
-                    /* add columns to cursor */
-                    if( (rc = VCursorAddColumn(obj->curs, &obj->seqID_idx, "SEQ_ID")) == 0 ) {
-                        rc = VCursorOpen(obj->curs);
-                    }
-                    if( rc == 0 ) {
-                        *objp = obj;
-                        return 0;
-                    }
-                    VCursorRelease ( obj -> curs );
+                    *objp = obj;
+                    return 0;
                 }
-            }
+                VCursorRelease ( obj -> curs );
         }
         free ( obj );
     }
@@ -102,7 +95,7 @@ rc_t RefSeqIDMake ( RefSeqID **objp, const VTable *tbl )
 }
 
 enum align_ref_name_args {
-    REF_ID,
+    REF_ID
 };
 
 /*
@@ -114,7 +107,6 @@ rc_t CC align_ref_seq_id ( void *data, const VXformInfo *info,
 {
     rc_t rc;
     RefSeqID const *self = (void const *)data;
-    uint8_t *dst;
     char const *name = NULL;
     uint32_t name_len;
 
@@ -123,11 +115,19 @@ rc_t CC align_ref_seq_id ( void *data, const VXformInfo *info,
 
     assert(argv[REF_ID].u.data.elem_bits == sizeof(*ref_id) * 8);
 
+    if( self->curs == NULL || argv[REF_ID].u.data.elem_count == 0 ) {
+        rslt->elem_count = 0;
+        return 0;
+    }
     ref_id += argv[REF_ID].u.data.first_elem;
     
     rc = VCursorCellDataDirect(self->curs, ref_id[0], self->seqID_idx, NULL, (void const **)&name, NULL, &name_len);
-    if (rc) return rc;
-    
+    if (GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcRow) {
+        name = "";
+        name_len = 0;
+    } else if( rc != 0 ) {
+        return rc;
+    }
     rc = KDataBufferCast(rslt->data, rslt->data, sizeof(name[0]) * 8, true);
     if (rc) return rc;
 
@@ -144,7 +144,7 @@ VTRANSFACT_IMPL ( NCBI_align_ref_seq_id, 1, 0, 0 ) ( const void *self, const VXf
     VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
 {
     RefSeqID *fself;
-    rc_t rc = RefSeqIDMake ( & fself, info -> tbl );
+    rc_t rc = RefSeqIDMake ( & fself, info -> tbl, (const VCursor*)info->parms  );
     if ( rc == 0 )
     {
         rslt -> self = fself;
diff --git a/libs/axf/align-restore-read.c b/libs/axf/align-restore-read.c
index 1bd6d27..95b2066 100644
--- a/libs/axf/align-restore-read.c
+++ b/libs/axf/align-restore-read.c
@@ -47,7 +47,7 @@ rc_t CC align_restore_read_impl ( void *data, const VXformInfo *info, int64_t ro
     VRowResult *rslt, uint32_t argc, const VRowData argv [] )
 {
     rc_t rc;
-    int mmi,roi,rri,di;
+    int mmi,roi,rri,di,bi;
     const INSDC_4na_bin	*ref_read 	= argv[0].u.data.base;
     const uint32_t	ref_read_len 	= argv[0].u.data.elem_count;
     const uint8_t	*has_mismatch	= argv[1].u.data.base;
@@ -58,6 +58,8 @@ rc_t CC align_restore_read_impl ( void *data, const VXformInfo *info, int64_t ro
     const uint32_t	has_ref_offset_len = argv[3].u.data.elem_count;
     const int32_t 	*ref_offset	= argv[4].u.data.base;
     const uint32_t	ref_offset_len  = argv[4].u.data.elem_count;
+    uint32_t ploidy = 1, rl;
+    const INSDC_coord_len* read_len = &has_mismatch_len;
 
     INSDC_4na_bin *dst;
     uint32_t	dst_len;
@@ -76,6 +78,13 @@ rc_t CC align_restore_read_impl ( void *data, const VXformInfo *info, int64_t ro
 
     if ( has_mismatch_len != has_ref_offset_len )
 		return RC(rcXF, rcFunction, rcExecuting, rcData, rcInconsistent);
+
+    if( argc > 5 ) {
+        assert(argv[5].u.data.elem_bits == 32);
+        ploidy = argv[5].u.data.elem_count;
+        read_len = argv[5].u.data.base;
+        read_len += argv[5].u.data.first_elem;
+    }
     dst_len = has_mismatch_len;
 
     /* resize output row for the total number of reads */    
@@ -85,12 +94,13 @@ rc_t CC align_restore_read_impl ( void *data, const VXformInfo *info, int64_t ro
     rslt -> elem_count = dst_len;
     dst = rslt -> data -> base;
     /**** MAIN RESTORATION LOOP ***/
-    for(mmi=roi=rri=di=0; di < dst_len; di++,rri++){
-        if(has_ref_offset[di]){
+    for(mmi=roi=rri=di=bi=0, rl = 1; di < dst_len; di++,rri++,rl++,bi++){
+        if(has_ref_offset[di] && bi >= 0){ /** bi can only become negative on Bs; skip has_ref_offset if Bs are not exhausted ***/
             if(roi >= ref_offset_len)
                 return RC(rcXF, rcFunction, rcExecuting, rcData, rcInconsistent);
-            rri += ref_offset[roi]; /** can lead to negative rri ***/
-            roi ++;
+            memcpy ( & bi, ref_offset + roi, sizeof bi );
+            rri += bi; /** can lead to negative rri ***/                
+            roi++;
         }
         if(has_mismatch[di]){
             if(mmi >= mismatch_len)
@@ -103,6 +113,12 @@ rc_t CC align_restore_read_impl ( void *data, const VXformInfo *info, int64_t ro
             }
             dst[di]=ref_read[rri];
         }
+        if( ploidy > 1 && rl == read_len[0] ) {
+            rri = -1;
+            rl = 0;
+            ploidy--;
+            read_len++;
+        }
     }
     return 0;
 }
@@ -112,7 +128,7 @@ rc_t CC align_restore_read_impl ( void *data, const VXformInfo *info, int64_t ro
  * function
  * INSDC:4na:bin ALIGN:align_restore_read #1( INSDC:4na:bin ref_read, bool has_mismatch, INSDC:4na:bin mismatch, bool has_ref_offset, I32 ref_offset);
  */
-VTRANSFACT_IMPL ( ALIGN_align_restore_read, 1, 0, 0 ) ( const void *Self, const VXfactInfo *info,
+VTRANSFACT_IMPL ( ALIGN_align_restore_read, 1, 0, 1 ) ( const void *Self, const VXfactInfo *info,
     VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
 {
 
diff --git a/libs/axf/cigar.c b/libs/axf/cigar.c
index 1932c37..ead65c3 100644
--- a/libs/axf/cigar.c
+++ b/libs/axf/cigar.c
@@ -34,6 +34,7 @@
 #include <klib/data-buffer.h>
 #include <bitstr.h>
 #include <sysalloc.h>
+#include <klib/printf.h>
 
 #include <klib/out.h>
 
@@ -46,160 +47,368 @@
 
 #include <insdc/insdc.h>
 
+#define ARG_BASE(TYPE, N) (((TYPE const *)argv[(N)].u.data.base) + argv[(N)].u.data.first_elem)
+#define ARG_ALIAS(TYPE, NAME, N) TYPE const *const NAME = ARG_BASE(TYPE, N)
+#define ARG_ALIAS_COND(TYPE, NAME, N, ALT) TYPE const *const NAME = ((argc > (N)) ? ARG_BASE(TYPE, N) : ALT)
+
 typedef struct trim_self_struct {
     uint8_t version;
 } self_t;
 
 static
-rc_t cigar_string(char cigar_buf[], size_t bmax, size_t *bsize, int version,
-                  uint8_t const has_mismatch[],
-                  uint8_t const has_ref_offset[],
-                  int32_t const ref_offset[],
-                  unsigned len,
-                  unsigned ro_len)
+rc_t op2b(KDataBuffer *dst, unsigned const offset, unsigned *const count, int const opcode, unsigned oplen)
 {
-    size_t bsz = 0;
-    uint32_t i,roi,m,mm;
+    unsigned digits = 1;
+    unsigned scale = 10;
     
-#define MACRO_FLUSH_MATCH \
-if(m > 0){ \
-    if(bsz > bmax - 10) /*** reserve some space for %d%c ***/ \
-        return RC(rcXF, rcFunction, rcExecuting, rcBuffer, rcInsufficient ); \
-    bsz += sprintf(cigar_buf+bsz,"%d=",m); \
-    m = 0; \
-}
+    if (oplen == 0) {
+        *count = 0;
+        return 0;
+    }
+    while (scale < oplen) {
+        scale *= 10;
+        ++digits;
+    }
+    if (scale == oplen) /* oplen is whole power of 10 */
+        ++digits;
 
-#define MACRO_FLUSH_MISMATCH \
-if(mm > 0){ \
-    if(bsz > bmax - 10) /*** reserve some space for %d%c ***/ \
-        return RC(rcXF, rcFunction, rcExecuting, rcBuffer, rcInsufficient ); \
-    if(i==len) bsz += sprintf(cigar_buf+bsz,"%dS",mm); \
-    else       bsz += sprintf(cigar_buf+bsz,"%dX",mm); \
-    mm = 0; \
+    *count = digits + 1;
+    
+    if (dst) {
+        unsigned const need = offset + digits + 1;
+        
+        if (need > dst->elem_count) {
+            rc_t rc = KDataBufferResize(dst, need);
+            if (rc) return rc;
+        }
+        {
+            char *const base = &((char *)dst->base)[offset];
+            
+            base[digits] = opcode;
+            do {
+                unsigned const digit = oplen % 10;
+                
+                oplen /= 10;
+                base[--digits] = digit + '0';
+            } while (digits);
+        }
+    }
+    return 0;
 }
 
+static
+rc_t cigar_string(KDataBuffer *dst, size_t boff, uint64_t *bsize, bool const full,
+                  bool const has_mismatch[], bool const has_ref_offset[],
+                  INSDC_coord_zero const read_start, INSDC_coord_zero const read_end,
+                  int32_t const ref_offset[], unsigned const ro_len, unsigned *ro_offset)
+{
+    size_t bsz = 0;
+    unsigned nwrit;
+    uint32_t i,m,mm;
+    rc_t rc;
+    unsigned cur_off = ro_offset ? *ro_offset : 0;
+    
+#define BUF_WRITE(OP, LEN) if ((rc = op2b(dst, bsz + boff, &nwrit, (OP), (LEN))) != 0) return rc; bsz += nwrit;
+
+#define MACRO_FLUSH_MATCH    { BUF_WRITE('=', m); m = 0; }
+#define MACRO_FLUSH_MISMATCH { BUF_WRITE(i == read_end ? 'S' : 'X', mm); mm = 0; }
+
 #define MACRO_FLUSH_BOTH \
 if(m+mm > 0) { \
-    if(i==len) { \
-        if(bsz > bmax - 20) /*** reserve some space for %d%c%d%c ***/ \
-            return RC(rcXF, rcFunction, rcExecuting, rcBuffer, rcInsufficient ); \
-        if(m > 0)  bsz += sprintf(cigar_buf+bsz,"%dM",m); \
-        if(mm > 0) bsz += sprintf(cigar_buf+bsz,"%dS",mm); \
+    if(i==read_end && has_ref_offset[i]) { \
+        BUF_WRITE('M', m); BUF_WRITE('S', mm); \
     } else { \
-        if(bsz > bmax - 10) /*** reserve some space for %d%c ***/ \
-            return RC(rcXF, rcFunction, rcExecuting, rcBuffer, rcInsufficient ); \
-        bsz += sprintf(cigar_buf+bsz,"%dM",m+mm); \
+        BUF_WRITE('M', m + mm) \
     } \
     m=mm=0; \
 }
 
 #define MACRO_FLUSH \
-if(version==1){ \
+if(full){ \
     MACRO_FLUSH_MATCH; \
     MACRO_FLUSH_MISMATCH; \
 } else { \
     MACRO_FLUSH_BOTH; \
 }
-    for ( i = roi = bsz = m = mm = 0; i < len; ++i)
-    {
+    for(i = read_start, bsz = m = mm = 0; i < read_end; i++) {
         if(has_ref_offset[i]){ /*** No offset in the reference **/
-            uint32_t offset;
+            int32_t offset;
             
-            if( roi >= ro_len) /*** bad data ***/
-                return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid );
-            if( ref_offset[roi] > 0 ){ /*** insert in the reference, delete in sequence ***/
-                offset = ref_offset[roi];
+            if( cur_off >= ro_len) /*** bad data ***/
+                return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+            
+            offset = ref_offset[cur_off++];
+            
+            if( offset > 0 ){ /*** insert in the reference, delete in sequence ***/
                 if(i==0) /**** deletes in the beginning are disallowed, REF_START should have been moved and delete converted to insert **/
                     return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid );
                 MACRO_FLUSH;
-                if(bsz > bmax - 10) /*** reserve some space for %d%c ***/
-                    return RC(rcXF, rcFunction, rcExecuting, rcBuffer, rcInsufficient );
-                bsz += sprintf(cigar_buf+bsz,"%dD",ref_offset[roi]);
-            } else if ( ref_offset[roi] < 0){ /**** delete from the reference ***/
-                offset = -ref_offset[roi];
-                if( i + offset > len)
+                BUF_WRITE('D', offset);
+            } else if ( offset < 0){ /**** delete from the reference ***/
+                offset = -offset;
+                if( i + offset > read_end)
                     return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid );
-                if(bsz > bmax - 10) /*** reserve some space for %d%c ***/
-                    return RC(rcXF, rcFunction, rcExecuting, rcBuffer, rcInsufficient );
-                if(i > 0) { /** normally indels are after the current base ***/
+                if(i > 0) { /** normally indels are before the current base ***/
                     MACRO_FLUSH;
-                    if( i + offset == len) /*** end soft clip **/
-                        bsz += sprintf(cigar_buf+bsz,"%dS",offset);
-                    else 
-                        bsz += sprintf(cigar_buf+bsz,"%dI",offset);
+                    BUF_WRITE('I', offset);
                 } else { /***  this  is a soft clip at the beginning ***/
-                    m=mm=0;
-                    bsz += sprintf(cigar_buf+bsz,"%dS",offset);
+                    BUF_WRITE('S', offset);
                 }
                 i += offset;
             } else { /*** Not possible ??? ***/
                 return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid );
             }
-            roi++;
         }
-        if(has_mismatch[i]){
-            if(version==1){
-                MACRO_FLUSH_MATCH;
-            }
-            mm++;
-        } else {
-            if(version==1) {
-                MACRO_FLUSH_MISMATCH;
+        if(i < read_end ){
+            if(has_mismatch[i]){
+                if(full) {
+                    MACRO_FLUSH_MATCH;
+                }
+                mm++;
             } else {
-                m+=mm;
-                mm=0;
+                if(full) {
+                    MACRO_FLUSH_MISMATCH;
+                } else {
+                    m+=mm;
+                    mm=0;
+                }
+                m++;
             }
-            m++;
         }
     }
     MACRO_FLUSH;
     *bsize = bsz;
+    if (ro_offset) *ro_offset = cur_off;
+    return 0;
+    
+#undef BUF_WRITE
+#undef MACRO_FLUSH_MATCH
+#undef MACRO_FLUSH_MISMATCH
+#undef MACRO_FLUSH_BOTH
+#undef MACRO_FLUSH
+}
+
+
+static
+rc_t cigar_string_2(KDataBuffer *dst, size_t boff, uint64_t *bsize, const int version,
+                    bool const has_mismatch[], bool const has_ref_offset[],
+                    INSDC_coord_zero const read_start, INSDC_coord_zero const read_end,
+                    int32_t const ref_offset[], unsigned const ro_len, unsigned* ro_offset,
+                    unsigned const reflen, bool use_S)
+{
+    int ri;
+    unsigned si;
+    unsigned di;
+    rc_t rc;
+    unsigned nwrit;
+    unsigned cur_off = ro_offset ? *ro_offset : 0;
+    unsigned op_len;
+    int opcode;
+    int const opM = version == 1 ? '=' : 'M';
+    int const opX = version == 1 ? 'X' : 'M';
+    int const opS = use_S ? 'S' : 'I';
+    
+#define BUF_WRITE(OP, LEN) { if ((rc = op2b(dst, di + boff, &nwrit, (OP), (LEN))) != 0) return rc; di += nwrit; }
+    si=read_start;
+    if (/* !use_S && */read_start == read_end && reflen > 0) {/** full delete as a last ploidy ends up written nowhere  **/
+        di=0;
+        opcode = 'D';
+        op_len = reflen;
+    }
+    else for (op_len = di = 0, opcode = ri = 0; si < read_end && ri <= (int)reflen; ) {
+        if (has_ref_offset[si]) {
+            int offs;
+            
+            if(op_len > 0) {
+                BUF_WRITE(opcode, op_len);
+                op_len = 0;
+            }
+            if (cur_off >= ro_len) /*** bad data ***/
+                return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+
+            offs = ref_offset[cur_off++];
+            if (offs < 0) {
+                unsigned j;
+                for(j=1; j<-offs && (si + j) < read_end;){
+                    if(has_ref_offset[si+j]){/*** structured insert **/
+                        BUF_WRITE(si ? 'I' : opS, j);
+                        offs += j;
+                        si   += j;
+                        j=1;
+                    } else {
+                        j++;
+                    }
+                }
+                if(offs < 0){
+                    BUF_WRITE(si ? 'I' : opS, -offs);
+                    si -= offs;
+                }
+                continue;
+            }
+            else if (offs > 0) {
+                BUF_WRITE('D', offs);
+                ri += offs;
+            }
+            else
+                return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+        }
+        if (ri < (int)reflen) {
+            int const op_nxt = (has_mismatch[si] ? opX : opM);
+            
+            if (op_len == 0 || opcode == op_nxt)
+                ++op_len;
+            else {
+                BUF_WRITE(opcode, op_len);
+                op_len = 1;
+            }
+            opcode = op_nxt;
+        }
+        else
+            break;
+        ++si;
+        ++ri;
+    }
+    BUF_WRITE(opcode, op_len);
+    if (si < read_end){
+        if (cur_off + 1 < ro_len) { 
+            assert(read_end + ref_offset[cur_off] == si);
+            cur_off++;
+            BUF_WRITE('I', read_end - si);
+        }
+        else {
+            BUF_WRITE(opS, read_end - si);
+        }
+    }
+    *bsize = di;
+    if (ro_offset) *ro_offset = cur_off;
+
     return 0;
+#undef BUF_WRITE
+}
+
+static INSDC_coord_len right_soft_clip(unsigned seq_len, unsigned ref_len,
+                                       unsigned noffsets,
+                                       int32_t const ref_offset[])
+{
+    INSDC_coord_len a = ref_len;
+    unsigned i;
+    
+    for (i = 0; i < noffsets; ++i)
+        a -= ref_offset[i];
+    return a < seq_len ? seq_len - a : 0;
 }
 
 static
 rc_t CC cigar_impl ( void *data, const VXformInfo *info, int64_t row_id,
     VRowResult *rslt, uint32_t argc, const VRowData argv [] )
 {
+    self_t const *self = data;
+    unsigned const rdln = argv[0].u.data.elem_count;
+    unsigned const ro_len = argv[2].u.data.elem_count;
+    bool const *has_mismatch   = argv[0].u.data.base;
+    bool const *has_ref_offset = argv[1].u.data.base;
+    int32_t const *ref_offset   = argv[2].u.data.base;
     rc_t rc;
-    const self_t *self = data;
-    uint32_t len    = argv[0].u.data.elem_count;
-    uint32_t ro_len = argv[2].u.data.elem_count;
-    char   cigar_buf[1024];
-    size_t cbi;
-    const uint8_t *has_mismatch   = argv [ 0 ] . u . data . base;
-    const uint8_t *has_ref_offset = argv [ 1 ] . u . data . base;
-    const int32_t *ref_offset     = argv [ 2 ] . u . data . base;
     
     assert(argv[0].u.data.elem_bits == 8);
     assert(argv[1].u.data.elem_bits == 8);
     assert(argv[2].u.data.elem_bits == 32);
 
-    assert(len == argv[1].u.data.elem_count);
+    assert(rdln == argv[1].u.data.elem_count);
 
-    has_mismatch   += argv [ 0 ] . u . data . first_elem;
-    has_ref_offset += argv [ 1 ] . u . data . first_elem;
-    ref_offset     += argv [ 2 ] . u . data . first_elem;
+    has_mismatch   += argv[0].u.data.first_elem;
+    has_ref_offset += argv[1].u.data.first_elem;
+    ref_offset     += argv[2].u.data.first_elem;
 
-    rc = cigar_string(cigar_buf, sizeof(cigar_buf), &cbi, self->version, has_mismatch, has_ref_offset, ref_offset, len, ro_len);
-    if (rc) return rc;
-   
-    /* resize output row for the total number of reads */    
-    rslt -> data -> elem_bits = 8;
-    rc = KDataBufferResize ( rslt -> data, cbi );
-    if ( rc != 0 )
-        return rc;
+    rslt->data->elem_bits = 8;
+    if (argc == 3)
+        rc = cigar_string(rslt->data, 0, &rslt->elem_count, self->version & 0x1,
+                          has_mismatch, has_ref_offset,
+                          0, rdln, ref_offset, ro_len, NULL);
+    else {
+        int32_t const *const rfln = argv[3].u.data.base;
+        
+        rc = cigar_string_2(rslt->data, 0, &rslt->elem_count, self->version & 0x1,
+                            has_mismatch, has_ref_offset,
+                            0, rdln, ref_offset, ro_len, NULL,
+                            rfln[argv[3].u.data.first_elem],true);
+    }
+    return rc;
+}
 
-    rslt -> elem_count = cbi;
-    if(cbi > 0)
-        memcpy(rslt -> data -> base, cigar_buf, cbi );
+static
+rc_t CC cigar_impl_2 ( void *data, const VXformInfo *info, int64_t row_id,
+                        VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+{
+    self_t const *self = data;
+    bool const *has_mismatch        = argv[0].u.data.base;
+    bool const *has_ref_offset      = argv[1].u.data.base;
+    int32_t const *ref_offset       = argv[2].u.data.base;
+    INSDC_coord_len const *read_len = argv[3].u.data.base;
+    uint32_t const nreads = argv[3].u.data.elem_count;
+    uint32_t const ro_len = argv[2].u.data.elem_count;
+    uint32_t n;
+    uint32_t ro_offset = 0;
+    rc_t rc = 0;
+    uint64_t cnt;
+    INSDC_coord_zero start;
+    INSDC_coord_len *cigar_len;
+    KDataBuffer *buf = (self->version & 0x04) ? NULL : rslt->data;
+    
+    assert(argv[0].u.data.elem_bits == 8);
+    assert(argv[1].u.data.elem_bits == 8);
+    assert(argv[2].u.data.elem_bits == 32);
+    assert(argv[3].u.data.elem_bits == 32);
+    
+    has_mismatch   += argv[0].u.data.first_elem;
+    has_ref_offset += argv[1].u.data.first_elem;
+    ref_offset     += argv[2].u.data.first_elem;
+    read_len       += argv[3].u.data.first_elem;
+
+    if( self->version & 0x4 ) {
+        rslt->data->elem_bits = sizeof(*cigar_len) * 8;
+        rslt->elem_count = nreads;
+        rc = KDataBufferResize(rslt->data, rslt->elem_count); if (rc) return rc;
+        cigar_len = rslt->data->base;
+        if (argv[0].u.data.elem_count == 0 ||
+            argv[1].u.data.elem_count == 0)
+        {
+            memset(cigar_len, 0, sizeof(cigar_len[0]) * nreads);
+            return 0;
+        }
+    }
+    else {
+        rslt->data->elem_bits = 8;
+        rslt->elem_count = 0;
+    }
+    for (n = 0, start = 0, ro_offset = 0; n < nreads; start += read_len[n++]) {
+        if (argc == 4)
+            rc = cigar_string(buf, rslt->elem_count, &cnt, self->version & 0x1,
+                              has_mismatch, has_ref_offset,
+                              start, start + read_len[n],
+                              ref_offset, ro_len, &ro_offset);
+        else {
+            int32_t const *const reflen = argv[4].u.data.base;
+            
+            rc = cigar_string_2(buf, rslt->elem_count, &cnt, self->version & 0x1,
+                                has_mismatch, has_ref_offset,
+                                start, start + read_len[n],
+                                ref_offset, ro_len, &ro_offset,
+                                reflen[argv[4].u.data.first_elem],(nreads==1));
+        }
+        if (rc) return rc;
+        if (self->version & 0x04)
+            cigar_len[n] = cnt;
+        else
+            rslt->elem_count += cnt;
+    }
     return 0;
 }
 
 static
 void CC self_whack( void *ptr )
 {
-        free( ptr );
+    free( ptr );
 }
 
 
@@ -214,11 +423,11 @@ VTRANSFACT_IMPL ( ALIGN_cigar, 1, 0, 0 ) ( const void *Self, const VXfactInfo *i
 
     self.version =cp -> argv [ 0 ] . data . u8 [ 0 ];
     switch(self.version){
-	case 0:
-        case 1:
-		break;
-	default:
-		return RC ( rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect );
+    case 0:
+    case 1:
+        break;
+    default:
+        return RC ( rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect );
     }
     rslt->u.rf = cigar_impl;
     rslt->variant = vftRow;
@@ -229,54 +438,85 @@ VTRANSFACT_IMPL ( ALIGN_cigar, 1, 0, 0 ) ( const void *Self, const VXfactInfo *i
     return 0;
 }
 
+VTRANSFACT_IMPL ( ALIGN_cigar_2, 2, 0, 0 ) ( const void *Self, const VXfactInfo *info,
+                                          VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+{
+    self_t self;
+    const VTypedesc* tp = &info->fdesc.desc;
+
+    self.version = cp->argv[0].data.u8[0];
+    switch(self.version) {
+    case 0x0:
+    case 0x1:
+        break;
+    default:
+        return RC(rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect);
+    }
+
+    if( tp->domain == vtdAscii && tp->intrinsic_bits == 8 ) {
+        self.version |= 0x2;
+    } else if( tp->domain == vtdUint && tp->intrinsic_bits == sizeof(INSDC_coord_len) * 8 ) {
+        self.version |= 0x4;
+    } else {
+        return RC(rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect);
+    }
+    rslt->u.rf = cigar_impl_2;
+    rslt->variant = vftRow;
+    rslt->self = malloc(sizeof self);
+    memcpy(rslt->self, &self, sizeof(self));
+    rslt->whack = self_whack;
+    return 0;
+}
+
 static
 rc_t CC edit_distance_impl ( void *data, const VXformInfo *info, int64_t row_id,
-    VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+                            VRowResult *rslt, uint32_t argc, const VRowData argv [] )
 {
     rc_t rc;
     uint32_t i,roi,mrun;
     uint32_t len    = argv[0].u.data.elem_count;
-    uint32_t ro_len = argv[2].u.data.elem_count;
     uint32_t *dst;
-
-    const uint8_t *has_mismatch   = argv [ 0 ] . u . data . base;
-    const uint8_t *has_ref_offset = argv [ 1 ] . u . data . base;
-    const int32_t *ref_offset     = argv [ 2 ] . u . data . base;
+    
+    uint8_t const *has_mismatch   = argv [ 0 ] . u . data . base;
+    uint8_t const *has_ref_offset = argv [ 1 ] . u . data . base;
+    int32_t const *ref_offset     = argv [ 2 ] . u . data . base;
     
     assert(argv[0].u.data.elem_bits == 8);
     assert(argv[1].u.data.elem_bits == 8);
     assert(argv[2].u.data.elem_bits == 32);
-
+    
     assert(len == argv[1].u.data.elem_count);
-
+    
     has_mismatch   += argv [ 0 ] . u . data . first_elem;
     has_ref_offset += argv [ 1 ] . u . data . first_elem;
     ref_offset     += argv [ 2 ] . u . data . first_elem;
-
+    
     /* resize output row for the total number of reads */    
+    rslt->data->elem_bits = rslt->elem_bits;
     rc = KDataBufferResize ( rslt -> data, 1);
     if ( rc != 0 ) return rc;
+    
     rslt -> elem_count = 1;
     dst = rslt -> data -> base;
     dst[0]=0;
     if(len == 0) return 0; /** nothing to do **/
-
+    
     if(has_ref_offset[0]){/** skip mismatches from the beginning == soft clip ***/
-	if(ref_offset[0] > 0)  /**** deletes in the beginning are disallowed, REF_START should have been moved and delete converted to insert **/
-		return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid );
-	i=-ref_offset[0];
-	roi=1;
-	mrun=0;
+        if(ref_offset[0] > 0)  /**** deletes in the beginning are disallowed, REF_START should have been moved and delete converted to insert **/
+            return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid );
+        i=-ref_offset[0];
+        roi=1;
+        mrun=0;
     } else {
-	i=roi=0;
+        i=roi=0;
     }
     for(mrun=0;i<len;i++){
-	if(has_mismatch[i]){
-		mrun++;
-	} else {/*** intentionally skipping last run of mismatches **/
-		dst[0]+=mrun;
-		mrun=0;
-	}
+        if(has_mismatch[i]){
+            mrun++;
+        } else {/*** intentionally skipping last run of mismatches **/
+            dst[0]+=mrun;
+            mrun=0;
+        }
     }
     return 0;
 }
@@ -295,7 +535,139 @@ VTRANSFACT_IMPL ( NCBI_align_edit_distance, 1, 0, 0 ) ( const void *Self, const
 
 
 /*
- * function bool ALIGN:generate_has_mismatch #1 (INSDC:4na:bin reference,INSDC:4na:bin subject, bool has_ref_offset, I32 ref_offset);
+ * edit distance = sum of lengths of inserts
+ *               + sum of lengths of deletes
+ *               + number of mismatches
+ * excluding soft clips
+ */
+
+unsigned edit_distance(bool const has_ref_offset[],
+                       bool const has_mismatch[],
+                       unsigned const readlen,
+                       unsigned const reflen,
+                       int32_t const ref_offset[],
+                       unsigned const offsets)
+{
+    if (readlen == 0) {
+        /* full delete */
+        return reflen;
+    }
+    else {
+        INSDC_coord_len const rsc = right_soft_clip(readlen, reflen, offsets, ref_offset);
+        unsigned indels = 0;
+        unsigned misses = 0;
+        unsigned i = 0;
+        unsigned j = 0;
+        
+        if (has_ref_offset[0] && ref_offset[j] < 0)
+            j = i = 1;
+        
+        /* sum of insert lengths + sum of delete lengths excluding soft clips */
+        for ( ; i < readlen - rsc; ++i) {
+            if (has_ref_offset[i]) {
+                int const offset = ref_offset[j++];
+                
+                if (offset < 0)
+                    indels += -offset;
+                else
+                    indels +=  offset;
+            }
+        }
+        /* sum of mismatches not in inserts or soft clips */
+        for (j = i = 0; i < readlen - rsc;) {
+            if (has_ref_offset[i]) {
+                int offset = ref_offset[j++];
+                
+                if (offset < 0) {
+                    i += -offset;
+                    continue;
+                }
+            }
+            misses += has_mismatch[i] ? 1 : 0;
+            ++i;
+        }
+        return indels + misses;
+    }
+}
+
+static
+rc_t CC edit_distance_2_impl ( void *data, const VXformInfo *info, int64_t row_id,
+    VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+{
+    rc_t rc;
+    unsigned const nreads = argc > 4 ? argv[4].u.data.elem_count : 1;
+    unsigned const len = argv[0].u.data.elem_count;
+    unsigned const noffsets = argv[2].u.data.elem_count;
+    INSDC_coord_len const dummy_rl = len;
+
+    ARG_ALIAS     (bool           , has_mismatch  , 0);
+    ARG_ALIAS     (bool           , has_ref_offset, 1);
+    ARG_ALIAS     (int32_t        , ref_offset    , 2);
+    ARG_ALIAS     (INSDC_coord_len, ref_len       , 3);
+    ARG_ALIAS_COND(INSDC_coord_len, readlen       , 4, &dummy_rl);
+    
+    assert(argv[0].u.data.elem_bits == sizeof(has_mismatch  [0]) * 8);
+    assert(argv[1].u.data.elem_bits == sizeof(has_ref_offset[0]) * 8);
+    assert(argv[2].u.data.elem_bits == sizeof(ref_offset    [0]) * 8);
+    assert(argv[3].u.data.elem_bits == sizeof(ref_len       [0]) * 8);
+
+    rslt->data->elem_bits = rslt->elem_bits;
+    if (len == 0) {
+        return KDataBufferResize(rslt->data, rslt->elem_count = 0);
+    }
+    
+    assert(len == argv[1].u.data.elem_count);
+
+    rslt->elem_count = nreads;
+    rc = KDataBufferResize(rslt->data, nreads);
+    if (rc == 0) {
+        unsigned i;
+        unsigned start = 0;
+        unsigned offset = 0;
+        uint32_t *const dst = rslt->data->base;
+        
+        for (i = 0; i < nreads; ++i) {
+            unsigned const rlen = readlen[i];
+            unsigned j;
+            unsigned offsets = 0;
+            
+            for (j = 0; j < rlen; ++j) {
+                if (has_ref_offset[start + j])
+                    ++offsets;
+            }
+            if (offsets + offset > noffsets)
+                return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+            
+            dst[i] = edit_distance(has_ref_offset + start,
+                                   has_mismatch + start,
+                                   rlen,
+                                   ref_len[0],
+                                   ref_offset + offset,
+                                   offsets);
+            start += rlen;
+            offset += offsets;
+        }
+    }
+    return rc;
+}
+
+/*
+ * function
+ * U32 NCBI:align:edit_distance #2 ( bool has_mismatch, bool has_ref_offset,
+ *     I32 ref_offset, INSDC:coord:len ref_len );
+ */
+VTRANSFACT_IMPL ( NCBI_align_edit_distance_2, 2, 0, 0 ) ( const void *Self, const VXfactInfo *info,
+    VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+{
+    rslt->u.rf = edit_distance_2_impl;
+    rslt->variant = vftRow;
+    return 0;
+}
+
+
+/*
+ * function bool ALIGN:generate_has_mismatch #1 (INSDC:4na:bin reference,
+ *     INSDC:4na:bin subject, bool has_ref_offset, I32 ref_offset);
  */
 static
 rc_t CC generate_has_mismatch_impl ( void *data, const VXformInfo *info, int64_t row_id,
@@ -313,9 +685,17 @@ rc_t CC generate_has_mismatch_impl ( void *data, const VXformInfo *info, int64_t
     const int32_t *ref_offset = argv [ 3 ] . u . data . base;
 
     uint8_t * dst;
-    uint32_t  len;
+    uint32_t  len = 0;
 
-    assert(sbj_len == hro_len );
+    rslt -> data -> elem_bits = 8;
+    if (sbj_len == 0) {
+        rc = KDataBufferResize ( rslt -> data, 0 );
+        if ( rc != 0 )
+            return rc;
+        rslt -> elem_count = 0;
+        return 0;
+    }
+    assert(sbj_len == hro_len);
     len = sbj_len;
 
     ref            += argv [ 0 ] . u . data . first_elem;
@@ -331,16 +711,16 @@ rc_t CC generate_has_mismatch_impl ( void *data, const VXformInfo *info, int64_t
     rslt -> elem_count = len;
     dst = rslt -> data->base;
     for(si=ri=roi=0;si< len;si++,ri++){
-	if(has_ref_offset[si] != 0){/*** need to offset the reference ***/
-		if( roi >= ro_len){
-			return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid );
-		}
-		ri += ref_offset[roi];
-	}
-	if(ri >=0 && ri < ref_len && (sbj[si]&ref[ri])!=0)
-		dst[si]=0;
-	else
-		dst[si]=1;
+        if(has_ref_offset[si] != 0){/*** need to offset the reference ***/
+            if( roi >= ro_len){
+                return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid );
+            }
+            ri += ref_offset[roi++];
+        }
+        if(ri >=0 && ri < ref_len && sbj[si]==ref[ri])
+            dst[si]=0;
+        else
+            dst[si]=1;
     }
     return 0;
 }
@@ -357,7 +737,7 @@ VTRANSFACT_IMPL ( ALIGN_generate_has_mismatch, 1, 0, 0 ) ( const void *Self, con
 }
 
 /*
- * function bool ALIGN:generate_has_mismatch #1 (INSDC:4na:bin reference,INSDC:4na:bin subject, bool has_ref_offset, I32 ref_offset);
+ * function bool ALIGN:generate_mismatch #1 (INSDC:4na:bin reference,INSDC:4na:bin subject, bool has_ref_offset, I32 ref_offset);
  */
 static
 rc_t CC generate_mismatch_impl ( void *data, const VXformInfo *info, int64_t row_id,
@@ -376,6 +756,10 @@ rc_t CC generate_mismatch_impl ( void *data, const VXformInfo *info, int64_t row
     uint8_t	buf[5*1024];
     uint32_t  len;
 
+    rslt -> data -> elem_bits = 8;
+    if (sbj_len == 0) {
+        return KDataBufferResize(rslt->data, rslt->elem_count = 0);
+    }
     assert(sbj_len == hro_len );
 
     ref            += argv [ 0 ] . u . data . first_elem;
@@ -384,20 +768,19 @@ rc_t CC generate_mismatch_impl ( void *data, const VXformInfo *info, int64_t row
     ref_offset     += argv [ 3 ] . u . data . first_elem;
 
     for(si=ri=roi=0,len=0;si<sbj_len;si++,ri++){
-	if(has_ref_offset[si] != 0){/*** need to offset the reference ***/
-		if( roi >= ro_len){
-			return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid );
-		}
-		ri += ref_offset[roi];
-	}
-	if(ri >=0 && ri < ref_len && (sbj[si]&ref[ri])!=0){/*noop*/}
-	else {
-		if(len > sizeof(buf)) return RC(rcXF, rcFunction, rcExecuting, rcBuffer, rcInsufficient);
-		buf[len++]=sbj[si];
-	}
+        if(has_ref_offset[si] != 0){/*** need to offset the reference ***/
+            if( roi >= ro_len){
+                return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid );
+            }
+            ri += ref_offset[roi++];
+        }
+        if(ri >=0 && ri < ref_len && sbj[si]==ref[ri]){/*noop*/}
+        else {
+            if(len > sizeof(buf)) return RC(rcXF, rcFunction, rcExecuting, rcBuffer, rcInsufficient);
+            buf[len++]=sbj[si];
+        }
     }
     /* resize output row for the total number of reads */
-    rslt -> data -> elem_bits = 8;
     rc = KDataBufferResize ( rslt -> data, len );
     if ( rc != 0 )
         return rc;
@@ -434,9 +817,9 @@ rc_t CC generate_mismatch_qual_impl ( void *data, const VXformInfo *info, int64_
     q    += argv[0].u.data.first_elem;
     h_mm += argv[1].u.data.first_elem;
     for(mm_cnt=0,i=0;i<argv[0].u.data.elem_count;i++){
-	if(h_mm[i]){
-		buf[mm_cnt++]=q[i];
-	}
+        if(h_mm[i]){
+            buf[mm_cnt++]=q[i];
+        }
     }
     /* resize output row for the total number of reads */
     rslt -> data -> elem_bits = 8;
@@ -544,6 +927,61 @@ rc_t CC left_soft_clip_impl ( void *data, const VXformInfo *info, int64_t row_id
     return rc;
 }
 
+static
+rc_t CC left_soft_clip_impl_2 ( void *data, const VXformInfo *info, int64_t row_id,
+    VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+{
+    rc_t rc;
+    INSDC_coord_len* result;
+    const bool* has_ref_offset = argv[0].u.data.base;
+    const int32_t* ref_offset = argv[1].u.data.base;
+    const uint64_t n_offsets = argv[1].u.data.elem_count;
+    const INSDC_coord_len* read_len = argv[2].u.data.base;
+    const uint32_t nreads = argv[2].u.data.elem_count;
+    uint32_t n, roi;
+    INSDC_coord_zero start;
+
+    assert(argv[0].u.data.elem_bits == sizeof(has_ref_offset[0]) * 8);
+    assert(argv[1].u.data.elem_bits == sizeof(ref_offset[0]) * 8);
+    assert(argv[2].u.data.elem_bits == sizeof(read_len[0]) * 8);
+    
+    has_ref_offset += argv[0].u.data.first_elem;
+    ref_offset += argv[1].u.data.first_elem;
+    read_len += argv[2].u.data.first_elem;
+
+    rslt->data->elem_bits = sizeof(*result) * 8;
+    rslt->elem_count = nreads;
+    rc = KDataBufferResize(rslt->data, rslt->elem_count);
+    result = rslt->data->base;
+
+    for(n = roi = start = 0; rc == 0 && n < nreads; start += read_len[n++]) {
+        if(has_ref_offset[start] && ref_offset[roi] < 0) {
+            if( roi >= n_offsets ) {
+                rc = RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+                break;
+            }
+            result[n] = -ref_offset[roi];
+        } else {
+            result[n] = 0;
+        }
+        if( n < nreads - 1 && roi < n_offsets ) {
+            /* scroll through has_ref_offset and consume ref_offsets for this read
+               only if there is next read or more offsets */
+            uint32_t k;
+            for(k = start; k < start + read_len[n]; k++) {
+                if( has_ref_offset[k] ) {
+                    if( roi >= n_offsets ) {
+                        rc = RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+                        break;
+                    }
+                    roi++;
+                }
+            }
+        }
+    }
+    return rc;
+}
+
 VTRANSFACT_IMPL ( NCBI_align_get_left_soft_clip, 1, 0, 0 ) ( const void *Self, const VXfactInfo *info,
     VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
 {
@@ -554,7 +992,15 @@ VTRANSFACT_IMPL ( NCBI_align_get_left_soft_clip, 1, 0, 0 ) ( const void *Self, c
     return 0;
 }
 
-
+VTRANSFACT_IMPL ( NCBI_align_get_left_soft_clip_2, 2, 0, 0 ) ( const void *Self, const VXfactInfo *info,
+    VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+{
+    rslt->u.rf = left_soft_clip_impl_2;
+    rslt->variant = vftRow;
+    rslt -> self = NULL;
+    rslt -> whack = NULL;
+    return 0;
+}
 
 /*
  * function INSDC:coord:len NCBI:align:get_right_soft_clip #1 ( 
@@ -571,38 +1017,41 @@ rc_t CC right_soft_clip_impl ( void *data, const VXformInfo *info, int64_t row_i
     bool const *has_mismatch = argv[0].u.data.base;
     bool const *has_ref_offset = NULL;
     int32_t    last_ref_offset = 0;
-
+    
     assert(argv[0].u.data.elem_bits == sizeof(has_mismatch[0]) * 8);
     has_mismatch += argv[0].u.data.first_elem;
-
+    
     if( argc > 2 ) {
         has_ref_offset = argv[2].u.data.base;
         has_ref_offset += argv[2].u.data.first_elem;
-	if(argc > 3 ) {
-		int32_t *ro = argv[3].u.data.base;
-		ro         += argv[3].u.data.first_elem;
-		if(argv[3].u.data.elem_count > 0){
-			last_ref_offset = ro[argv[3].u.data.elem_count-1];
-		}
-	}
+        if(argc > 3 ) {
+            const int32_t *ro = argv[3].u.data.base;
+            ro += argv[3].u.data.first_elem;
+            if(argv[3].u.data.elem_count > 0){
+                last_ref_offset = ro[argv[3].u.data.elem_count-1];
+            }
+        }
     }
-
+    
     assert(argv[1].u.data.elem_bits == sizeof(left) * 8);
     left = ((INSDC_coord_len const *)argv[1].u.data.base)[argv[1].u.data.first_elem];
     
     while (right != left && has_mismatch[right - 1] &&
-           (has_ref_offset == NULL || has_ref_offset[right - 1] == 0) ) {
+           (has_ref_offset == NULL || has_ref_offset[right - 1] == 0) )
+    {
         ++result;
         --right;
     }
-    while(right > 0 && has_ref_offset[right - 1] == 0 && last_ref_offset <0){ /*** some mismatches from left needs to be recovered to cover for inserts **/
-	last_ref_offset++;
-	right--;
+    while(right > 0 && last_ref_offset <0 && has_ref_offset[right - 1] == 0){ /*** some mismatches from left needs to be recovered to cover for inserts **/
+        last_ref_offset++;
+        right--;
     }
     if(last_ref_offset < -1 ){
-	last_ref_offset ++;
-	if(result < -last_ref_offset) result=0;
-	else result += last_ref_offset;
+        last_ref_offset ++;
+        if(result < -last_ref_offset) result=0;
+        else result += last_ref_offset;
+    } else if (last_ref_offset > 0){
+	result += last_ref_offset;
     }
     
     rslt->data->elem_bits = sizeof(result) * 8;
@@ -622,6 +1071,7 @@ VTRANSFACT_IMPL ( NCBI_align_get_right_soft_clip, 1, 0, 0 ) ( const void *Self,
     rslt -> whack = NULL;
     return 0;
 }
+
 VTRANSFACT_IMPL ( NCBI_align_get_right_soft_clip_2, 2, 0, 0 ) ( const void *Self, const VXfactInfo *info,
     VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
 {
@@ -633,7 +1083,111 @@ VTRANSFACT_IMPL ( NCBI_align_get_right_soft_clip_2, 2, 0, 0 ) ( const void *Self
 }
 
 
+/*
+ * function INSDC:coord:len NCBI:align:get_right_soft_clip #3 
+ *     ( bool has_ref_offset, I32 ref_offset, INSDC:coord:len ref_len )
+ */
+static
+rc_t CC right_soft_clip_3_impl ( void *data, const VXformInfo *info, int64_t row_id,
+                              VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+{
+    rc_t rc;
+    INSDC_coord_len const ref_len = ((INSDC_coord_len const *)argv[2].u.data.base)[argv[2].u.data.first_elem];
+    unsigned const seq_len = argv[0].u.data.elem_count;
+    int32_t const *ref_offset  = &((int32_t const *)argv[1].u.data.base)[argv[1].u.data.first_elem];
+    unsigned const n = argv[1].u.data.elem_count;
+    
+    assert(argv[1].u.data.elem_bits == sizeof(ref_offset    [0]) * 8);
+    assert(argv[2].u.data.elem_bits == sizeof(ref_len          ) * 8);
+
+    rslt->data->elem_bits = rslt->elem_bits;
+    rslt->elem_count = 1;
+    rc = KDataBufferResize(rslt->data, 1);
+    if (rc == 0)
+        ((INSDC_coord_len *)rslt->data->base)[0] = right_soft_clip(seq_len, ref_len, n, ref_offset);
+    return rc;
+}
+
+VTRANSFACT_IMPL ( NCBI_align_get_right_soft_clip_3, 3, 0, 0 )
+    ( const void *Self, const VXfactInfo *info, VFuncDesc *rslt,
+      const VFactoryParams *cp, const VFunctionParams *dp )
+{
+    rslt->u.rf = right_soft_clip_3_impl;
+    rslt->variant = vftRow;
+    rslt -> self = NULL;
+    rslt -> whack = NULL;
+    return 0;
+}
+
+static
+rc_t CC right_soft_clip_4_impl ( void *data, const VXformInfo *info, int64_t row_id,
+                                 VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+{
+    rc_t rc;
+    INSDC_coord_len* result;
+    const bool* has_ref_offset = argv[0].u.data.base;
+    const int32_t* ref_offset = argv[1].u.data.base;
+    const uint64_t n_offsets = argv[1].u.data.elem_count;
+    const INSDC_coord_len* read_len = argv[2].u.data.base;
+    const uint32_t nreads = argv[2].u.data.elem_count;
+    const INSDC_coord_len* ref_len = argv[3].u.data.base;
+    uint32_t n, roi;
+    INSDC_coord_zero start;
+
+    assert(argv[0].u.data.elem_bits == sizeof(has_ref_offset[0]) * 8);
+    assert(argv[1].u.data.elem_bits == sizeof(ref_offset[0]) * 8);
+    assert(argv[2].u.data.elem_bits == sizeof(read_len[0]) * 8);
+    assert(argv[3].u.data.elem_bits == sizeof(ref_len[0]) * 8);
+    assert(argv[3].u.data.elem_count == 1);
+    
+    has_ref_offset += argv[0].u.data.first_elem;
+    ref_offset += argv[1].u.data.first_elem;
+    read_len += argv[2].u.data.first_elem;
+    ref_len += argv[3].u.data.first_elem;
+
+    rslt->data->elem_bits = sizeof(*result) * 8;
+    rslt->elem_count = nreads;
+    rc = KDataBufferResize(rslt->data, rslt->elem_count);
+    result = rslt->data->base;
+
+    for(n = roi = start = 0; rc == 0 && n < nreads; ++n) {
+        INSDC_coord_len const rlen = read_len[n];
+        unsigned k;
+        unsigned offset_count;
+        
+        for (k = offset_count = 0; k < rlen; ++k) {
+            if (has_ref_offset[k + start])
+                ++offset_count;
+        }
+        result[n] = right_soft_clip(rlen, ref_len[0], offset_count, ref_offset);
+        ref_offset += offset_count;
+        start += rlen;
+#if 0
+        result[n] = read_len[n] - ref_len[0];
+        for(k = start; k < start + read_len[n]; k++) {
+            if( has_ref_offset[k] ) {
+                if( roi >= n_offsets ) {
+                    rc = RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+                    break;
+                }
+                result[n] += ref_offset[roi++];
+            }
+        }
+#endif
+    }
+    return rc;
+}
 
+VTRANSFACT_IMPL ( NCBI_align_get_right_soft_clip_4, 4, 0, 0 )
+    ( const void *Self, const VXfactInfo *info, VFuncDesc *rslt,
+      const VFactoryParams *cp, const VFunctionParams *dp )
+{
+    rslt->u.rf = right_soft_clip_4_impl;
+    rslt->variant = vftRow;
+    rslt -> self = NULL;
+    rslt -> whack = NULL;
+    return 0;
+}
 
 /*
  * function ascii NCBI:align:get_clipped_cigar #1 ( ascii cigar )
@@ -674,6 +1228,71 @@ rc_t CC clipped_cigar_impl ( void *data, const VXformInfo *info, int64_t row_id,
     return rc;
 }
 
+static
+rc_t CC clipped_cigar_impl_v2 ( void *data, const VXformInfo *info, int64_t row_id,
+                                VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+{
+    rc_t rc = 0;
+    const char* cigar = argv[0].u.data.base;
+    const INSDC_coord_len* cigar_len = argv[1].u.data.base;
+    const uint32_t nreads = argv[1].u.data.elem_count;
+    INSDC_coord_len* new_cigar_len;
+    uint32_t n;
+    INSDC_coord_zero rstart;
+    
+    assert(argv[0].u.data.elem_bits == sizeof(*cigar) * 8);
+    assert(argv[1].u.data.elem_bits == sizeof(*cigar_len) * 8);
+
+    if (argv[0].u.data.elem_count == 0) {
+        return KDataBufferResize(rslt->data, rslt->elem_count = 0);
+    }
+    
+    cigar += argv[0].u.data.first_elem;
+    cigar_len += argv[1].u.data.first_elem;
+
+    if( data != NULL ) {
+        rslt->data->elem_bits = sizeof(*cigar_len) * 8;
+        rslt->elem_count = nreads;
+        rc = KDataBufferResize(rslt->data, rslt->elem_count);
+        new_cigar_len = rslt->data->base;
+    } else {
+        rslt->elem_count = 0;
+        rslt->data->elem_bits = sizeof(*cigar) * 8;
+    }
+    for(n = rstart = 0; n < nreads; rstart += cigar_len[n++]) {
+        INSDC_coord_zero i = rstart, start = rstart;
+        INSDC_coord_zero end = start + cigar_len[n];
+
+        /* drop all \d+S groups at head */
+        while(i < end) {
+            if(cigar[i] == 'S') {
+                start = i + 1;
+            } else if( !isdigit(cigar[i]) ) {
+                break;
+            }
+            i++;
+        }
+        /* drop all \d+S groups at tail */
+        while(end > start) {
+            end--;
+            if(cigar[end] != 'S' && !isdigit(cigar[end]) ) {
+                break;
+            }
+        }
+        if( data == NULL ) {
+            int64_t x = end - start + 1;
+            if( x > 0 && (rc = KDataBufferResize(rslt->data, rslt->elem_count + x)) == 0 ) {
+                char* b = rslt->data->base;
+                memcpy(&b[rslt->elem_count], &cigar[start], x);
+                rslt->elem_count += x;
+            }
+        } else {
+            new_cigar_len[n] = end - start + 1;
+        }
+    }
+    return rc;
+}
+
 VTRANSFACT_IMPL ( NCBI_align_get_clipped_cigar, 1, 0, 0 ) ( const void *Self, const VXfactInfo *info,
     VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
 {
@@ -684,6 +1303,24 @@ VTRANSFACT_IMPL ( NCBI_align_get_clipped_cigar, 1, 0, 0 ) ( const void *Self, co
     return 0;
 }
 
+VTRANSFACT_IMPL ( NCBI_align_get_clipped_cigar_2, 2, 0, 0 ) ( const void *Self, const VXfactInfo *info,
+    VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+{
+    const VTypedesc* tp = &info->fdesc.desc;
+
+    if( tp->domain == vtdAscii && tp->intrinsic_bits == 8 ) {
+        rslt->self = NULL;
+    } else if( tp->domain == vtdUint && tp->intrinsic_bits == sizeof(INSDC_coord_len) * 8 ) {
+        rslt->self = rslt; /* something different from NULL :) */
+    } else {
+        return RC(rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect);
+    }
+    rslt->u.rf = clipped_cigar_impl_v2;
+    rslt->variant = vftRow;
+    rslt->whack = NULL;
+    return 0;
+}
+
 
 
 /*
@@ -740,31 +1377,67 @@ rc_t CC get_ref_len_impl ( void *data, const VXformInfo *info, int64_t row_id,
     VRowResult *rslt, uint32_t argc, const VRowData argv [] )
 {
     rc_t rc;
-    INSDC_coord_len result;
+    INSDC_coord_len result,right=0;
+    
+    unsigned const read_len = argv[0].u.data.elem_count;
     unsigned const n_offsets = argv[1].u.data.elem_count;
-    INSDC_coord_len const *right = argv[2].u.data.base;
+    bool const *hro = argv[0].u.data.base;
     int32_t const *ref_offset = argv[1].u.data.base;
-    int32_t sum;
-    unsigned i;
     
-    assert(argv[2].u.data.elem_bits == sizeof(right[0]) * 8);
-    assert(argv[0].u.data.elem_count >= right[argv[2].u.data.first_elem]);
     assert(argv[1].u.data.elem_bits == sizeof(ref_offset[0]) * 8);
-
-    ref_offset += argv[1].u.data.first_elem;
-    result = argv[0].u.data.elem_count - right[argv[2].u.data.first_elem];
     
-    for (sum = 0, i = 0; i != n_offsets; ++i) {
-        sum += ref_offset[i];
+    hro += argv[0].u.data.first_elem;
+    ref_offset += argv[1].u.data.first_elem;
+
+    if( argc > 2 ) {
+	right = ((INSDC_coord_len*)argv[2].u.data.base)[argv[2].u.data.first_elem];
+        
+        assert(argv[2].u.data.elem_bits == sizeof(right) * 8);
+        assert(read_len >= right);
+    }
+    if( n_offsets == 0){
+	if(read_len < right) return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+	result = read_len - right;
+    } else {
+	int32_t  ires, rov;
+	unsigned i;
+	
+	if(argc > 2){/*** clipping ***/
+		for(i=0,ires=read_len - right;i<n_offsets;i++){
+			memcpy( & rov, ref_offset + i, sizeof rov );
+			ires += rov;
+        }
+	} else {
+		int32_t sum_pos,sum_neg;
+		for(i=0,sum_pos=sum_neg=0;i<n_offsets;i++){
+			memcpy( & rov, ref_offset + i, sizeof rov );
+			if (rov > 0) sum_pos += rov;
+			else         sum_neg += rov;            
+		}
+		if(sum_pos + sum_neg >= 0){/** all offsets may not over-shorten needed reference ***/
+			ires = read_len + sum_pos + sum_neg;
+		} else { /** inefficient case - exact reach into the reference is needed **/
+			unsigned j;
+			for(i=0,j=0,sum_pos=0,ires=0;j<read_len; j++){
+				if(hro[i]){
+					if(i >= n_offsets) return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+					memcpy( & rov, ref_offset + i, sizeof rov );
+					ires += rov;
+					i++;
+				}
+				sum_pos ++;
+				if(sum_pos > ires) ires=sum_pos;
+			}
+		}
+	}
+	if(ires < 0) return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+	result=ires;
     }
-    assert((int32_t)result >= -sum);
-    result += sum;
-    
     rslt->data->elem_bits = sizeof(result) * 8;
     rslt->elem_count = 1;
     rc = KDataBufferResize(rslt->data, rslt->elem_count);
     if (rc == 0)
-        memcpy(rslt->data->base, &result, sizeof(result));
+	memcpy(rslt->data->base,&result,sizeof(result));
     return rc;
 }
 
@@ -793,7 +1466,10 @@ rc_t CC clip_impl ( void *data, const VXformInfo *info, int64_t row_id,
     INSDC_coord_len right = ((INSDC_coord_len const *)argv[2].u.data.base)[argv[2].u.data.first_elem];
 
     rslt->data->elem_bits = argv[0].u.data.elem_bits;
-    rslt->elem_count = argv[0].u.data.elem_count - left - right;
+    if (argv[0].u.data.elem_count >= left + right)
+        rslt->elem_count = argv[0].u.data.elem_count - left - right;
+    else
+        rslt->elem_count = 0;
     rc = KDataBufferResize(rslt->data, rslt->elem_count);
     if (rc == 0) {
         if ((rslt->data->elem_bits & 7) == 0)
@@ -818,7 +1494,62 @@ VTRANSFACT_IMPL ( NCBI_align_clip, 1, 0, 0 ) ( const void *Self, const VXfactInf
     return 0;
 }
 
+static
+rc_t CC clip_impl_2 ( void *data, const VXformInfo *info, int64_t row_id,
+                      VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+{
+    rc_t rc;
+    const INSDC_coord_len* read_len = argv[1].u.data.base;
+    const uint32_t nreads = argv[1].u.data.elem_count;
+    const INSDC_coord_len* left =  argv[2].u.data.base;
+    const INSDC_coord_len* right = argv[3].u.data.base;
+    uint32_t n;
+    INSDC_coord_zero start;
+
+    assert(argv[1].u.data.elem_count == argv[2].u.data.elem_count);
+    assert(argv[1].u.data.elem_count == argv[3].u.data.elem_count);
+    assert(argv[1].u.data.elem_bits == sizeof(read_len[0]) * 8);
+    assert(argv[2].u.data.elem_bits == sizeof(left[0]) * 8);
+    assert(argv[2].u.data.elem_bits == sizeof(right[0]) * 8);
+
+    read_len += argv[1].u.data.first_elem;
+    left += argv[2].u.data.first_elem;
+    right += argv[3].u.data.first_elem;
 
+    rslt->data->elem_bits = argv[0].u.data.elem_bits;
+    rslt->elem_count = 0;
+    rc = KDataBufferResize(rslt->data, rslt->elem_count);
+    if (rc)
+        return rc;
+    if (argv[0].u.data.elem_count == 0)
+        return 0;
+
+    for(n = start = 0; rc == 0 && n < nreads; start += read_len[n++]) {
+        uint64_t x = left[n] + right[n];
+        assert(argv[0].u.data.elem_count >= start);
+        assert(argv[0].u.data.elem_count >= start + read_len[n]);
+        if( read_len[n] > x ) {
+            x = read_len[n] - x;
+            if( x > 0 && (rc = KDataBufferResize(rslt->data, rslt->elem_count + x)) == 0) {
+                bitcpy(rslt->data->base, rslt->elem_count * argv[0].u.data.elem_bits,
+                       argv[0].u.data.base, (argv[0].u.data.first_elem + start + left[n]) * argv[0].u.data.elem_bits,
+                       x * rslt->data->elem_bits);
+                rslt->elem_count += x;
+            }
+        }
+    }
+    return rc;
+}
+
+VTRANSFACT_IMPL ( NCBI_align_clip_2, 2, 0, 0 ) ( const void *Self, const VXfactInfo *info,
+    VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+{
+    rslt->u.rf = clip_impl_2;
+    rslt->variant = vftRow;
+    rslt -> self = NULL;
+    rslt -> whack = NULL;
+    return 0;
+}
 
 /*
  * function bool NCBI:align:get_ref_mismatch #1
diff --git a/libs/axf/get-sam-flags.c b/libs/axf/get-sam-flags.c
index c69066b..4d6574f 100644
--- a/libs/axf/get-sam-flags.c
+++ b/libs/axf/get-sam-flags.c
@@ -41,6 +41,13 @@
 #include <ctype.h>
 #include <assert.h>
 
+
+/* "properly aligned" fragments according to the aligner
+   may mean minimally that the fragments are on the same
+   chromosome. */
+#define PROPER_ALIGNED_MEANS_SAME_CHROMOSOME 1
+
+
 static
 rc_t CC get_sam_flags_impl(void *data, const VXformInfo *info,
                            int64_t row_id, VRowResult *rslt,
@@ -49,14 +56,14 @@ rc_t CC get_sam_flags_impl(void *data, const VXformInfo *info,
 {
     rc_t 	rc;
     int32_t	*dst;
-    const INSDC_coord_one  *rid = argv[1].u.data.base;
-    const int32_t  	   *tlen = argv[2].u.data.base;
-    const bool	           *ro1 = argv[3].u.data.base;
-    const bool             *ro2 = argv[4].u.data.base;
-    const bool             *sec = argv[5].u.data.base;
+    const INSDC_coord_one  *rid = argv[1].u.data.base; /* SEQ_READ_ID */
+    const int32_t         *tlen = argv[2].u.data.base; /* TEMPLATE_LEN */
+    const bool	           *ro1 = argv[3].u.data.base; /* REF_ORIENTATION */
+    const bool             *ro2 = argv[4].u.data.base; /* MATE_REF_ORIENTATION */
+    const bool             *sec = argv[5].u.data.base; 
+    const bool             mate_present = (argv[4].u.data.elem_count > 0 );
     const SRAReadFilter    *flt = argc > 6 ? argv[6].u.data.base : NULL;
 
-    assert(nreads > 0);
     assert(argv[1].u.data.elem_count == 1);
     assert(argv[2].u.data.elem_count == 1);
     assert(argv[3].u.data.elem_count == 1);
@@ -65,10 +72,12 @@ rc_t CC get_sam_flags_impl(void *data, const VXformInfo *info,
     
     
     rc = KDataBufferResize(rslt->data, 1);
-    if(rc != 0) return rc;
+    if(rc != 0)
+        return rc;
     rslt->elem_count=1;
     dst = rslt->data->base;
     dst[0]=0;
+    if(nreads == 0) return 0;
     
     
     rid  += argv[1].u.data.first_elem;
@@ -80,34 +89,47 @@ rc_t CC get_sam_flags_impl(void *data, const VXformInfo *info,
         flt += argv[6].u.data.first_elem;
     
     /***************** SAM FLAGS************
-     Bit  Description
-     0x1 template having multiple fragments in sequencing
-     0x2 each fragment properly aligned according to the aligner
-     0x4 fragment unmapped
-     0x8 next fragment in the template unmapped
-     0x10 SEQ being reverse complemented
-     0x20 SEQ of the next fragment in the template being reversed
-     0x40 the first fragment in the template
-     0x80 the last fragment in the template
+      Bit  Description
+     0x001 template having multiple fragments in sequencing
+     0x002 each fragment properly aligned according to the aligner
+     0x004 fragment unmapped
+     0x008 next fragment in the template unmapped
+     0x010 SEQ being reverse complemented
+     0x020 SEQ of the next fragment in the template being reversed
+     0x040 the first fragment in the template
+     0x080 the last fragment in the template
      0x100 secondary alignment
      0x200 not passing quality controls
      0x400 PCR or optical duplicate
     ****************************/
-    if(ro1[0])      dst[0] |= 0x10;
-    if(sec[0])      dst[0] |= 0x100;
+    if(ro1[0])
+        dst[0] |= 0x10;
+    if(sec[0])
+        dst[0] |= 0x100;
     if(nreads > 1) {
-        if(rid[0] == 1) dst[0] |= 0x40;
-        if (rid[0] == nreads) dst[0] |= 0x80;
+        if(rid[0] == 1)
+            dst[0] |= 0x40;
+        if (rid[0] == nreads)
+            dst[0] |= 0x80;
         dst[0] |= 0x1;
-        if(tlen[0] != 0 ){
-            dst[0] |= 0x2;
-            if(ro2[0]) dst[0] |= 0x20;
+        if(mate_present) {
+#if PROPER_ALIGNED_MEANS_SAME_CHROMOSOME
+           if( tlen[0] != 0 )
+#endif
+                dst[0] |= 0x2;
+           if(ro2[0])
+                dst[0] |= 0x20;
         } else {
             dst[0] |= 0x8;
         }
     }
-    if (flt && flt[0] == SRA_READ_FILTER_CRITERIA)
-        dst[0] |= 0x400;
+    if( flt ) {
+        if( flt[0] == SRA_READ_FILTER_REJECT ) {
+            dst[0] |= 0x200;
+        } else if( flt[0] == SRA_READ_FILTER_CRITERIA ) {
+            dst[0] |= 0x400;
+        }
+    }
     return rc;	
 }
 
@@ -120,11 +142,15 @@ rc_t CC get_sam_flags_impl_v1(void *data,const VXformInfo *info, int64_t row_id,
     
     assert(argv[0].u.data.elem_bits == sizeof(read_len[0]) * 8);
     read_len += argv[0].u.data.first_elem;
-    
-    for (i = 0; i != argv[0].u.data.elem_count; ++i) {
+   
+#if 1 
+    for (i = 0, nreads = 0; i != argv[0].u.data.elem_count; ++i) {
         if (read_len[i] != 0)
             ++nreads;
     }
+#else
+    nreads = argv[0].u.data.elem_count;
+#endif
     return get_sam_flags_impl(data, info, row_id, rslt, nreads, argc, argv);
 }
 
diff --git a/libs/axf/get_mate_align_ids.c b/libs/axf/get_mate_align_ids.c
new file mode 100644
index 0000000..d96e65d
--- /dev/null
+++ b/libs/axf/get_mate_align_ids.c
@@ -0,0 +1,271 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <vdb/extern.h>
+#include <vdb/xform.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+
+#include <kdb/meta.h>
+
+#include <klib/rc.h>
+#include <klib/data-buffer.h>
+#include <klib/sort.h>
+#include <klib/vector.h>
+
+#include <insdc/sra.h>
+#include <insdc/insdc.h>
+
+#include <bitstr.h>
+#include <sysalloc.h>
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <stdio.h>
+#include <ctype.h>
+
+typedef struct ID_cache_t
+{
+    uint32_t idx;
+    VCursor const *curs;
+    KVector *j_cache;
+    KVector *p_cache;
+}ID_cache_t;
+
+#define MIN_DIFF_TO_CACHE 10000
+#define TMP_CACHE_PAGESIZE (16*1024)
+
+
+static rc_t lookup_mate(ID_cache_t *const self, int64_t const id, int64_t *mateid)
+{
+    return KVectorGetI64(self->j_cache, (uint64_t)id,mateid);
+}
+
+static rc_t cache_mate(ID_cache_t *self, int64_t id, int64_t mateid)
+{
+    return KVectorSetU64(self->j_cache, (uint64_t)id, mateid);
+}
+
+static rc_t fetch_mates(ID_cache_t *self, int64_t spotid, const int64_t **ids,uint32_t *rlen)
+{
+    rc_t rc = 0;
+    uint32_t elem_bits;
+    uint32_t boff;
+
+    rc = VCursorCellDataDirect(self->curs, spotid, self->idx,&elem_bits, (const void**) ids, &boff, rlen);
+    assert(*rlen==0 || elem_bits==64);
+    assert(boff==0);
+    return rc;
+}
+static rc_t fetch_mate_id(ID_cache_t *self, int64_t spotid, int64_t const id, int64_t *mateid)
+{
+    rc_t rc = 0;
+    uint32_t rlen;
+    int i;
+    const int64_t *base;
+
+    
+
+    rc = fetch_mates(self, spotid,&base,&rlen);
+    if(rc) return rc;
+    if (rlen > 2) return RC(rcXF, rcFunction, rcExecuting, rcConstraint, rcViolated);
+    mateid[0]=0;
+    for(i=0;i<rlen;i++){
+	if(base[i] != id) {
+		mateid[0] = base[i];
+	}
+    }
+    return rc;
+}
+
+static
+rc_t get_mate_algn_id_impl(ID_cache_t *const self,
+                          int64_t const row, int64_t rslt[],
+                          int64_t const spotid)
+{
+    rc_t rc = 0;
+    bool    page_processed=false;
+    int64_t first,first_blob,last,last_blob;
+
+    /** check cache **/
+    rc = lookup_mate(self, row, rslt);
+    if (rc == 0) return 0;
+
+    /** Page boundary is defined by the variable "first" **/
+    rc = VCursorPageIdRange(self->curs, self->idx, spotid, &first_blob, &last_blob);      if (rc) return rc;
+    first = spotid & ~(TMP_CACHE_PAGESIZE - 1 );
+    if(first < first_blob) first = first_blob;
+    last = first + TMP_CACHE_PAGESIZE -1;
+    if(last > last_blob) last = last_blob;
+
+    rc = KVectorGetBool(self->p_cache, (uint64_t)first,&page_processed);
+    if (rc == 0 && page_processed) { /*** This page was processed before. Row did not need caching. Just fetch Row being asked **/
+	return fetch_mate_id(self, spotid, row, rslt);
+    } else { /** unprocessed page **/
+	int64_t i;
+	
+	rc = KVectorSetBool(self->p_cache, (uint64_t)first,true); /** mark as processed **/
+	if(rc) return rc;
+	
+	for(i=first;i<=last;i++){
+		int64_t	ids[2]={0,0};
+		const int64_t *ptr;
+		uint32_t rlen;
+		rc = fetch_mates(self, i, &ptr,&rlen);
+		if(rc){
+			if(GetRCState ( rc ) == rcNotFound ) rc = 0;
+			else return rc;
+		}
+		memcpy(ids,ptr,rlen*sizeof(*ptr));
+		if(ids[0]!= 0 && ids[1] != 0 && labs(ids[0] - ids[1])> MIN_DIFF_TO_CACHE){
+			rc = cache_mate((ID_cache_t*)self,ids[0],ids[1]);
+			if(rc) return rc;
+			rc = cache_mate((ID_cache_t*)self,ids[1],ids[0]);
+			if(rc) return rc;
+		}
+		if(i==spotid){
+			if(ids[0] == row){
+				rslt[0] = ids[1];
+			} else if(ids[1] == row){
+				rslt[0] = ids[0];
+			} else {
+				return RC(rcXF, rcFunction, rcExecuting, rcData, rcInconsistent);
+			} 
+		}
+	}
+    }
+    return rc;
+}
+static
+rc_t CC get_mate_algn_id_drvr(void *Self,
+                              const VXformInfo *info, int64_t row_id,
+                              VRowResult *rslt,
+                              uint32_t argc, const VRowData argv [] )
+{
+    rc_t rc;
+    ID_cache_t *self = Self;
+
+    rslt->data->elem_bits = rslt->elem_bits;
+    rc = KDataBufferResize(rslt->data, 1);
+    if (rc == 0) {
+#if 0
+        rc = get_mate_algn_id_impl(self, row_id, rslt->data->base,
+           ((int64_t const *)argv[0].u.data.base)[argv[0].u.data.first_elem]);
+#else
+	rc = fetch_mate_id(self, ((int64_t const *)argv[0].u.data.base)[argv[0].u.data.first_elem], row_id, rslt->data->base);
+#endif
+        if (rc == 0){
+	    if(*(int64_t*)rslt->data->base == 0) rslt->elem_count = 0;
+            else rslt->elem_count = 1;
+	}
+    }
+    return rc;
+}
+
+/* open_sub_cursor
+ */
+static
+rc_t open_sub_cursor(ID_cache_t *self, const VXfactInfo *info, const VCursor *native_curs)
+{
+    rc_t rc;
+
+    rc = VCursorLinkedCursorGet(native_curs,"SEQUENCE",&self->curs);
+    if(rc != 0){
+	const VDatabase *db;
+	const VTable *tbl;
+	/* get at the parent database */
+	rc = VTableOpenParentRead ( info -> tbl, & db );
+	if(rc != 0) return rc;
+	/* open the table */
+	rc = VDatabaseOpenTableRead ( db, &tbl, "SEQUENCE" );
+	VDatabaseRelease ( db );
+	if(rc != 0) return rc;
+	/* create a cursor */
+	rc = VTableCreateCachedCursorRead(tbl, &self->curs,2UL*1024*1024*1024);
+	VTableRelease(tbl);
+	if(rc != 0) return rc;
+	rc = VCursorPermitPostOpenAdd( self->curs );
+	if(rc != 0) return rc;
+	rc = VCursorOpen( self->curs );
+	if(rc != 0) return rc;
+	rc = VCursorLinkedCursorSet(native_curs,"SEQUENCE",self->curs);
+	if(rc != 0) return rc;
+    } else {
+	    VCursorAddRef(self->curs);
+    }
+    rc = VCursorAddColumn(self->curs, &self->idx, "(I64)PRIMARY_ALIGNMENT_ID");
+    if (rc == 0) {
+	rc = KVectorMake(&self->j_cache);
+	if(rc==0) rc = KVectorMake(&self->p_cache);
+	if(rc==0) return 0;
+    }
+    VCursorRelease(self->curs);
+    return rc;
+}
+
+
+/* close_sub_cursor
+ */
+static
+void CC close_sub_cursor(void *data)
+{
+    ID_cache_t *self = data;
+
+    VCursorRelease(self->curs);
+    KVectorRelease(self->j_cache);
+    KVectorRelease(self->p_cache);
+    free(self);
+}
+
+
+/*
+ * extern function I64[2] NCBI:align:get_mate_id #1 (I64 spotId);
+ */
+VTRANSFACT_IMPL(NCBI_align_get_mate_align_id, 1, 0, 0) (const void *Self, const VXfactInfo *info,
+    VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp)
+{
+    rc_t rc;
+    ID_cache_t *self = calloc(1, sizeof(*self));
+
+    if (self == NULL)
+        return RC(rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted);
+
+    rc = open_sub_cursor(self, info, (const VCursor*)info->parms);
+    if (rc == 0) {
+        rslt->self = self;
+        rslt->u.rf = get_mate_algn_id_drvr;
+        rslt->variant = vftIdDepRow;
+        rslt->whack = close_sub_cursor;
+    }
+    else {
+        free(self);
+    }
+
+    return rc;
+}
diff --git a/libs/axf/libaxf.vers b/libs/axf/libaxf.vers
index af0b7dd..b0f3d96 100644
--- a/libs/axf/libaxf.vers
+++ b/libs/axf/libaxf.vers
@@ -1 +1 @@
-1.0.6
+1.0.8
diff --git a/libs/axf/libaxf.vers.h b/libs/axf/libaxf.vers.h
deleted file mode 100644
index 22278b1..0000000
--- a/libs/axf/libaxf.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBAXF_VERS 0x01000006
diff --git a/libs/axf/libwaxf.vers b/libs/axf/libwaxf.vers
index af0b7dd..b0f3d96 100644
--- a/libs/axf/libwaxf.vers
+++ b/libs/axf/libwaxf.vers
@@ -1 +1 @@
-1.0.6
+1.0.8
diff --git a/libs/axf/libwaxf.vers.h b/libs/axf/libwaxf.vers.h
deleted file mode 100644
index dfcee7a..0000000
--- a/libs/axf/libwaxf.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBWAXF_VERS 0x01000006
diff --git a/libs/axf/make-cmp-read_desc.c b/libs/axf/make-cmp-read_desc.c
new file mode 100644
index 0000000..67026c0
--- /dev/null
+++ b/libs/axf/make-cmp-read_desc.c
@@ -0,0 +1,156 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <vdb/extern.h>
+#include <vdb/xform.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/schema.h>
+
+
+#include <klib/defs.h>
+#include <klib/rc.h>
+#include <kdb/meta.h>
+#include <klib/data-buffer.h>
+#include <insdc/insdc.h>
+#include <align/refseq-mgr.h>
+#include <bitstr.h>
+#include <sysalloc.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <stdio.h>
+#include <insdc/sra.h>
+
+static void copy(void *dst, size_t doff, void const *src, size_t soff, size_t bits)
+{
+    if ((doff & 7) == 0 && (soff & 7) == 0 && (bits & 7) == 0)
+        memcpy(&((char *)dst)[doff >> 3], &((char const *)src)[soff >> 3], bits >> 3);
+    else
+        bitcpy(dst, doff, src, soff, bits);
+}
+
+static
+rc_t CC make_cmp_read_desc_inv_impl(void *data, const VXformInfo *info, int64_t row_id,
+    VFixedRowResult const *rslt, uint32_t argc, VRowData const argv [] )
+{
+    int64_t const *const alignId = &((int64_t const *)argv[1].u.data.base)[argv[1].u.data.first_elem];
+    void const *const ZERO = data;
+    void const *const base = argv[0].u.data.base;
+    unsigned src = argv[0].u.data.first_elem * rslt->elem_bits;
+    unsigned dst = rslt->first_elem * rslt->elem_bits;
+    unsigned i;
+    
+    for (i = 0; i != rslt->elem_count; ++i) {
+        bool const aligned = alignId[i] != 0;
+
+        copy(rslt->base, dst, !aligned ? base : ZERO, !aligned ? src : 0, rslt->elem_bits);
+
+        src += rslt->elem_bits;
+        dst += rslt->elem_bits;
+    }
+    return 0;
+}
+
+static
+rc_t CC make_cmp_read_desc_impl(void *data, const VXformInfo *info, int64_t row_id,
+    VFixedRowResult const *rslt, uint32_t argc, VRowData const argv [] )
+{
+    int64_t const *const alignId = &((int64_t const *)argv[1].u.data.base)[argv[1].u.data.first_elem];
+    void const *const ZERO = data;
+    void const *const base = argv[0].u.data.base;
+    unsigned src = argv[0].u.data.first_elem * rslt->elem_bits;
+    unsigned dst = rslt->first_elem * rslt->elem_bits;
+    unsigned i;
+    
+    for (i = 0; i != rslt->elem_count; ++i) {
+        bool const aligned = alignId[i] != 0;
+
+        copy(rslt->base, dst, aligned ? base : ZERO, aligned ? src : 0, rslt->elem_bits);
+
+        src += rslt->elem_bits;
+        dst += rslt->elem_bits;
+    }
+    return 0;
+}
+
+static
+rc_t CC make_read_start_impl(void *data, const VXformInfo *info, int64_t row_id,
+                             VFixedRowResult const *rslt, uint32_t argc, VRowData const argv [] )
+{
+    INSDC_coord_zero *const dst = &((INSDC_coord_zero *)rslt->base)[rslt->first_elem];
+    INSDC_coord_len const *const readlen = &((INSDC_coord_len const *)argv[0].u.data.base)[argv[0].u.data.first_elem];
+    INSDC_coord_zero start;
+    unsigned i;
+    
+    for (start = 0, i = 0; i != rslt->elem_count; ++i) {
+        INSDC_coord_len const rlen = readlen[i];
+
+        dst[i] = start;
+        start += rlen;
+    }
+    return 0;
+}
+
+static rc_t make_cmp_read_desc_factory(const void *Self,
+                                       const VXfactInfo *info,
+                                       VFuncDesc *rslt,
+                                       const VFactoryParams *cp,
+                                       const VFunctionParams *dp)
+{
+    rslt->self = calloc(1, (info->fdesc.desc.intrinsic_bits * info->fdesc.desc.intrinsic_bits + 7) >> 3);
+    if (rslt->self == NULL)
+        return RC(rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted);
+    rslt->whack = free;
+    rslt->u.pf = cp->argv[0].data.b[0] ? make_cmp_read_desc_inv_impl : make_cmp_read_desc_impl;
+    rslt->variant = vftFixedRow;
+    return 0;
+}
+
+/* 
+ * function < type T >
+ * T NCBI:align:make_cmp_read_desc #1 <bool invert>(T operand, I64 align_id);
+ */
+VTRANSFACT_IMPL ( NCBI_align_make_cmp_read_desc, 1, 0, 0 )
+    ( const void *Self, const VXfactInfo *info, VFuncDesc *rslt,
+      const VFactoryParams *cp, const VFunctionParams *dp )
+{
+    return make_cmp_read_desc_factory(Self, info, rslt, cp, dp);
+}
+
+/*
+ * extern function INSDC:coord:zero NCBI:align:make_read_start #1
+ *     (INSDC:coord:len read_len, I64 align_id);
+ */
+VTRANSFACT_IMPL ( NCBI_align_make_read_start, 1, 0, 0 )
+    ( const void *Self, const VXfactInfo *info, VFuncDesc *rslt,
+      const VFactoryParams *cp, const VFunctionParams *dp )
+{
+    rslt->u.pf = make_read_start_impl;
+    rslt->variant = vftFixedRow;
+    return 0;
+}
diff --git a/libs/axf/not-my-row.c b/libs/axf/not-my-row.c
index 974bc92..165b205 100644
--- a/libs/axf/not-my-row.c
+++ b/libs/axf/not-my-row.c
@@ -54,7 +54,7 @@ rc_t CC not_my_row_impl(void *data,const VXformInfo *info, int64_t row_id, VRowR
 		int i,j;
 		dst = rslt->data->base;
 		for(i=j=0;i<len;i++){
-			if(src[i]!=row_id){
+			if(src[i]!=row_id && src[i] > 0/**we used alignment is as 0 to indicate no alignmnent**/){
 				dst[j++]=src[i];
 			}
 		}
diff --git a/libs/axf/project_read_from_sequence.c b/libs/axf/project_read_from_sequence.c
index 963f445..cb2e6f2 100644
--- a/libs/axf/project_read_from_sequence.c
+++ b/libs/axf/project_read_from_sequence.c
@@ -28,6 +28,7 @@
 #include <vdb/database.h>
 #include <vdb/table.h>
 #include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
 
 
 #include <klib/defs.h>
@@ -65,7 +66,7 @@ void CC RestoreReadWhack ( void *obj )
 }
 
 static
-rc_t RestoreReadMake ( RestoreRead **objp, const VXfactInfo *info, const VFactoryParams *cp )
+rc_t RestoreReadMake ( RestoreRead **objp, const VXfactInfo *info, const VFactoryParams *cp, const VCursor *native_curs )
 {
     rc_t rc;
 
@@ -74,59 +75,60 @@ rc_t RestoreReadMake ( RestoreRead **objp, const VXfactInfo *info, const VFactor
     if ( obj == NULL ) {
         rc = RC ( rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted );
     } else {
-        /* get at the parent database */
-        const VDatabase *db;
-        rc = VTableOpenParentRead ( info -> tbl, & db );
-        if ( rc == 0 ) {
-            /* open the primary alignment table */
-            const VTable *patbl;
-            rc = VDatabaseOpenTableRead ( db, & patbl, "SEQUENCE" );
-            VDatabaseRelease ( db );
-            if ( rc == 0 )
-            {
-                /* create a cursor */
-                rc = VTableCreateCachedCursorRead(patbl, &obj->curs, 4*1024*1024);
-                VTableRelease ( patbl );
-                if ( rc == 0 )
-                {
-                    /* add columns to cursor */
-                    assert ( cp -> argc == 1 );
-                    rc = VCursorAddColumn ( obj -> curs, & obj -> col_idx, "%.*s",
-                        cp -> argv [ 0 ] . count, cp -> argv [ 0 ] . data . ascii );
-                    if ( rc == 0)
-                        rc = VCursorAddColumn ( obj -> curs, & obj -> read_len_idx, "(INSDC:coord:len)READ_LEN" );
-                    if ( rc == 0)
-                        rc = VCursorAddColumn ( obj -> curs, & obj -> read_start_idx, "(INSDC:coord:zero)READ_START");
-                    if ( rc == 0 )
-                    {
-                        rc = VCursorOpen ( obj -> curs );
-                        if ( rc == 0 )
-                        {
-                            VTypedesc src;
-                            rc = VCursorDatatype ( obj -> curs, obj -> col_idx, NULL, & src );
-                            if ( rc == 0 )
-                            {
-                                /* selected column should have same characteristics */
-                                if ( src . domain != info -> fdesc . desc . domain                 ||
-                                     src . intrinsic_bits != info -> fdesc . desc . intrinsic_bits ||
-                                     src . intrinsic_dim != info -> fdesc . desc. intrinsic_dim )
-                                {
-                                    rc = RC ( rcXF, rcFunction, rcConstructing, rcType, rcInconsistent );
-                                }
-                                else if ( ( src . intrinsic_bits & 7 ) != 0 )
-                                    rc = RC ( rcXF, rcFunction, rcConstructing, rcType, rcUnsupported );
-                                else
-                                {
-                                    * objp = obj;
-                                    return 0;
-                                }
-                            }
-                        }
-                    }
-
-                    VCursorRelease ( obj -> curs );
-                }
-            }
+        rc = VCursorLinkedCursorGet(native_curs,"SEQUENCE",&obj->curs);
+	if(rc != 0){
+		const VDatabase *db;
+		const VTable *tbl;
+		/* get at the parent database */
+		rc = VTableOpenParentRead ( info -> tbl, & db );
+		if(rc != 0) return rc;
+		/* open the table */
+		rc = VDatabaseOpenTableRead ( db, &tbl, "SEQUENCE" );
+		VDatabaseRelease ( db );
+		if(rc != 0) return rc;
+		/* create a cursor */
+                rc = VTableCreateCachedCursorRead(tbl, &obj->curs,2UL*1024*1024*1024);
+		VTableRelease(tbl);
+		if(rc != 0) return rc;
+		rc = VCursorPermitPostOpenAdd( obj->curs );
+                if(rc != 0) return rc;
+                rc = VCursorOpen( obj->curs );
+                if(rc != 0) return rc;
+                rc = VCursorLinkedCursorSet(native_curs,"SEQUENCE",obj->curs);
+                if(rc != 0) return rc;
+	} else {
+		VCursorAddRef(obj->curs);
+	}
+	if ( rc == 0 )
+	{
+	    /* add columns to cursor */
+	    assert ( cp -> argc == 1 );
+	    rc = VCursorAddColumn ( obj -> curs, & obj -> col_idx, "%.*s",
+		cp -> argv [ 0 ] . count, cp -> argv [ 0 ] . data . ascii );
+	    if ( rc == 0 || GetRCState(rc) == rcExists )
+		rc = VCursorAddColumn ( obj -> curs, & obj -> read_len_idx, "(INSDC:coord:len)READ_LEN" );
+	    if ( rc == 0 || GetRCState(rc) == rcExists )
+		rc = VCursorAddColumn ( obj -> curs, & obj -> read_start_idx, "(INSDC:coord:zero)READ_START");
+	    if ( rc == 0  || GetRCState(rc) == rcExists) {
+		VTypedesc src;
+		rc = VCursorDatatype ( obj -> curs, obj -> col_idx, NULL, & src );
+		if ( rc == 0 ){
+			/* selected column should have same characteristics */
+			if ( src . domain != info -> fdesc . desc . domain                 ||
+			     src . intrinsic_bits != info -> fdesc . desc . intrinsic_bits ||
+			     src . intrinsic_dim != info -> fdesc . desc. intrinsic_dim )
+			{
+			    rc = RC ( rcXF, rcFunction, rcConstructing, rcType, rcInconsistent );
+			}
+			else if ( ( src . intrinsic_bits & 7 ) != 0 )
+			    rc = RC ( rcXF, rcFunction, rcConstructing, rcType, rcUnsupported );
+			else
+			{
+			    * objp = obj;
+			    return 0;
+			}
+		}
+	    }
         }
         free ( obj );
     }
@@ -160,9 +162,14 @@ rc_t CC project_from_sequence_impl ( void *data, const VXformInfo *info,
     assert(argv[1].u.data.elem_bits == 32);
     assert(argv[1].u.data.elem_count == 1);
 
+    if(spot_id[0] == 0){ /*** valid case , the projection should be empty ***/
+	rslt->elem_count =0;
+	return 0;
+    }
     assert ( read_id_in[0] > 0 );
     read_id = read_id_in[0] - 1; /** make zero - based **/
 
+
     rc = VCursorCellDataDirect(self->curs, spot_id[0], self->read_len_idx, NULL, (void const **)&read_len, NULL, &nreads);
     if (rc) return rc;
     
@@ -209,11 +216,11 @@ VTRANSFACT_IMPL ( ALIGN_project_from_sequence, 1, 0, 0 ) ( const void *Self, con
     VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
 {
     RestoreRead *fself;
-    rc_t rc = RestoreReadMake ( & fself, info, cp );
+    rc_t rc = RestoreReadMake ( & fself, info, cp, (const VCursor*)info->parms  );
     if(rc == 0 ) {
         rslt->self = fself;
         rslt->u.ndf = project_from_sequence_impl;
-        rslt->variant = vftNonDetRow;
+        rslt->variant = vftRow;
         rslt -> whack = RestoreReadWhack;
     }
     return rc;
diff --git a/libs/axf/ref-preserve_qual.c b/libs/axf/ref-preserve_qual.c
index 44de091..b4d1e3f 100644
--- a/libs/axf/ref-preserve_qual.c
+++ b/libs/axf/ref-preserve_qual.c
@@ -320,6 +320,8 @@ rc_t CC generate_preserve_qual_impl(void *Self, VXformInfo const *info,
     rslt->data->elem_bits = rslt->elem_bits;
     rslt->elem_count = seq_len;
     rc = KDataBufferResize(rslt->data, rslt->elem_count);                       if (rc) return rc;
+    memset(rslt->data->base, 0, (seq_len * rslt->elem_bits + 7) >> 3);
+    return 0;
     
     StringInit(&refName, &((char const *)argv[0].u.data.base)[argv[0].u.data.first_elem],
                argv[0].u.data.elem_count, argv[0].u.data.elem_count);
diff --git a/libs/axf/ref-restore-read.c b/libs/axf/ref-restore-read.c
index fbdf9ce..beb4599 100644
--- a/libs/axf/ref-restore-read.c
+++ b/libs/axf/ref-restore-read.c
@@ -75,7 +75,7 @@ rc_t RestoreReadMake ( RestoreRead **objp, const VDBManager *mgr )
     if( obj == NULL ) {
 		rc = RC(rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted);
     } else {
-        if( (rc = RefSeqMgr_Make(&obj->rmgr, mgr, errefseq_4NA, 32 * 1024 * 1024, 10)) == 0 ) {
+        if( (rc = RefSeqMgr_Make(&obj->rmgr, mgr, errefseq_4NA, 1024 * 1024 * 1024, 30)) == 0 ) {
 		    *objp = obj;
         } else {
             *objp = NULL;
@@ -91,7 +91,7 @@ rc_t CC ref_restore_read_impl ( void *data, const VXformInfo *info, int64_t row_
 {
     rc_t rc;
     RestoreRead* self = data;
-    INSDC_dna_text* dst;
+    uint8_t* dst;
     uint32_t read_len     = argv[0].u.data.elem_count;
     const uint8_t *read   = argv[0].u.data.base;
     uint32_t seqid_len    = argv[1].u.data.elem_count;
@@ -155,7 +155,7 @@ VTRANSFACT_IMPL ( ALIGN_ref_restore_read, 1, 0, 0 ) ( const void *Self, const VX
     if(rc == 0 ) {
         rslt->self = fself;
         rslt->u.ndf = ref_restore_read_impl;
-        rslt->variant = vftNonDetRow;
+        rslt->variant = vftRow;
         rslt -> whack = RestoreReadWhack;
     }
     return rc;
diff --git a/libs/axf/ref-tbl-sub-select.c b/libs/axf/ref-tbl-sub-select.c
index 67920d7..7719353 100644
--- a/libs/axf/ref-tbl-sub-select.c
+++ b/libs/axf/ref-tbl-sub-select.c
@@ -37,6 +37,8 @@
 
 #include <bitstr.h>
 
+#include "ref-tbl.h"
+
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
@@ -45,232 +47,321 @@
 typedef struct RefTableSubSelect RefTableSubSelect;
 struct RefTableSubSelect
 {
+    rc_t (*func)(struct RefTableSubSelect* self, int64_t ref_row_id,
+                 INSDC_coord_zero offset, INSDC_coord_len ref_len,
+                 uint32_t ref_ploidy, VRowResult* rslt);
     const VCursor *curs;
     uint32_t out_idx;
-    uint32_t circular_idx;
-    uint32_t name_idx;
-    uint32_t name_range_idx;
+    union {
+        struct {
+            uint32_t circular_idx;
+            uint32_t name_idx;
+            uint32_t name_range_idx;
+            uint32_t seq_len_idx;
+            uint32_t max_seq_len_idx;
+            /* set once upon 1st call */
+            /* set once per each call, if changed from previous */
+            char* name;
+            uint32_t name_len;
+            int64_t start_id;
+            int64_t stop_id;
+            bool circular;
+            INSDC_coord_len seq_len;
+            uint32_t max_seq_len;
+        } ref;
+        struct {
+            uint32_t ref_id_idx;
+            uint32_t ref_start_idx;
+            uint32_t ref_len_idx;
+            uint32_t read_start_idx;
+            uint32_t read_len_idx;
+            struct RefTableSubSelect* parent;
+        } mod;
+    } u;
 };
 
+/*
+  ref_ploidy != 0 means that offset here is relative to ref_row_id, so it can be
+    negative or positive and can extend between rows within same refseq
+  ref_ploidy means that offset is normal REF_START
+ */
+
 static
-void CC RefTableSubSelectWhack ( void *obj )
+rc_t CC REFERENCE_TABLE_sub_select(RefTableSubSelect* self, int64_t ref_row_id,
+                             INSDC_coord_zero offset, INSDC_coord_len ref_len,
+                             uint32_t ref_ploidy, VRowResult* rslt)
 {
-    RefTableSubSelect * self = obj;
-    if ( self != NULL )
-    {
-        VCursorRelease ( self -> curs );
-        free ( self );
+    rc_t rc = 0;
+    INSDC_coord_len num_read;
+
+    if( ref_row_id < self->u.ref.start_id || ref_row_id > self->u.ref.stop_id ) {
+        /* update cached ref data if ref has changed */
+        const char* n;
+        uint32_t n_len;
+        struct {
+            int64_t start_id;
+            int64_t stop_id;
+        } *out;
+
+        if( (rc = VCursorCellDataDirect(self->curs, ref_row_id, self->u.ref.name_idx, NULL, (const void**)&n, NULL, &n_len)) == 0 &&
+            /* use i_name to find current ref rowid range */
+            (rc = VCursorParamsSet((const struct VCursorParams *)(self->curs), "QUERY_SEQ_NAME", "%.*s", n_len, n)) == 0 &&
+            (rc = VCursorCellDataDirect(self->curs, ref_row_id, self->u.ref.name_range_idx, NULL, (const void**)&out, NULL, NULL)) == 0 ) {
+
+            if( self->u.ref.name_len < n_len ) {
+                void* p = realloc(self->u.ref.name, n_len);
+                if( p == NULL ) {
+                    rc = RC(rcXF, rcFunction, rcSelecting, rcMemory, rcExhausted);
+                } else {
+                    self->u.ref.name = (char*)p;
+                }
+            }
+            if( rc == 0 ) {
+                const bool* c;
+                INSDC_coord_len* sl;
+                uint32_t* m;
+
+                memcpy(self->u.ref.name, n, n_len);
+                self->u.ref.name_len = n_len;
+                self->u.ref.start_id = out->start_id;
+                self->u.ref.stop_id = out->stop_id;
+                if( (rc = VCursorCellDataDirect(self->curs, self->u.ref.stop_id, self->u.ref.circular_idx, NULL, (const void**)&c, NULL, NULL)) == 0 &&
+                    (rc = VCursorCellDataDirect(self->curs, self->u.ref.stop_id, self->u.ref.seq_len_idx, NULL, (const void**)&sl, NULL, NULL)) == 0 &&
+                    (rc = VCursorCellDataDirect(self->curs, self->u.ref.stop_id, self->u.ref.max_seq_len_idx, NULL, (const void**)&m, NULL, NULL)) == 0 ) {
+                    
+                    self->u.ref.circular = c[0];
+                    self->u.ref.seq_len = m[0] * (self->u.ref.stop_id - self->u.ref.start_id) + sl[0];
+                    self->u.ref.max_seq_len = m[0];
+                }
+            }
+        }
+    }
+    if( rc == 0 && ref_ploidy != 0 ) {
+        /* convert offset to normal from start of ref relative to current row */
+        offset += self->u.ref.max_seq_len * (ref_row_id - self->u.ref.start_id);
+        if( self->u.ref.circular ) {
+            /* make offset positive starting from refseq actual start */
+            if( offset < 0 ) {
+                offset = self->u.ref.seq_len - ((-offset) % self->u.ref.seq_len);
+            } else {
+                offset %= self->u.ref.seq_len;
+            }
+        } else if( offset < 0 || offset >= self->u.ref.seq_len ) {
+            rc = RC(rcXF, rcFunction, rcSelecting, rcData, rcCorrupt);
+        }
+        ref_row_id = self->u.ref.start_id + offset / self->u.ref.max_seq_len;
+        offset %= self->u.ref.max_seq_len;
+    }
+    /* read the data */
+    for(num_read = 0; rc == 0 && num_read < ref_len && ref_row_id <= self->u.ref.stop_id; offset = 0) {
+            uint32_t bits;
+            const void* output;
+            uint32_t boff;
+            uint32_t row_len;
+
+            if( (rc = VCursorCellDataDirect(self->curs, ref_row_id,self->out_idx, &bits, &output, &boff, &row_len)) == 0 ) {
+                /* row_len MUST be > offset */
+                if( row_len <= offset ) {
+                    rc = RC(rcXF, rcFunction, rcSelecting, rcData, rcCorrupt);
+                } else {
+                    row_len -= offset;
+                    if(ref_len < row_len + num_read) {
+                        row_len = ref_len - num_read;
+                    }
+                    /* copy data */
+                    bitcpy(rslt->data->base, rslt->elem_count * bits, output, offset * bits + boff, row_len * bits);
+                    rslt->elem_count += row_len;
+                    num_read += row_len;
+                    if( ++ref_row_id > self->u.ref.stop_id && self->u.ref.circular ) {
+                        ref_row_id = self->u.ref.start_id;
+                    }
+                }
+            }
+    }
+    /* detect incomplete read */
+    if( rc == 0 && num_read == 0 ) {
+        rc = RC(rcXF, rcFunction, rcSelecting, rcTransfer, rcIncomplete);
     }
+    return rc;
 }
 
 static
-rc_t RefTable_READ_SubSelectMake ( RefTableSubSelect **objp, const VTable *tbl )
+rc_t CC ALIGN_CMN_TABLE_sub_select(RefTableSubSelect* self, int64_t ref_row_id,
+                                   INSDC_coord_zero offset, INSDC_coord_len ref_len,
+                                   uint32_t ref_ploidy, VRowResult* rslt)
 {
-    rc_t rc;
+	rc_t rc=0;
+        INSDC_coord_len num_read = 0;
+        const int64_t* al_ref_id = NULL;
+        int64_t al_ref_id_value;
+        const INSDC_coord_zero* al_ref_start = NULL;
 
-    /* create the object */
-    RefTableSubSelect *obj = malloc ( sizeof * obj );
-    if ( obj == NULL ) {
-        rc = RC ( rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted );
-    } else {
-        /* get at the parent database */
-        const VDatabase *db;
-        rc = VTableOpenParentRead ( tbl, & db );
-        if ( rc == 0 )
-        {
-            /* open the reference table */
-            const VTable *reftbl;
-            rc = VDatabaseOpenTableRead ( db, & reftbl, "REFERENCE" );
-            VDatabaseRelease ( db );
-            if ( rc == 0 )
-            {
-                /* create a cursor */
-                rc = VTableCreateCachedCursorRead(reftbl, &obj->curs, 4*1024*1024);
-                VTableRelease ( reftbl );
-                if( rc == 0 ) {
-                    /* add columns to cursor */
-                    if( (rc = VCursorAddColumn(obj->curs, &obj->out_idx,  "(INSDC:4na:bin) READ")) == 0 &&
-                        (rc = VCursorAddColumn(obj->curs, &obj->name_idx, "(utf8)NAME")) == 0 &&
-                        (rc = VCursorAddColumn(obj->curs, &obj->circular_idx, "CIRCULAR")) == 0 &&
-                        (rc = VCursorAddColumn(obj->curs, &obj->name_range_idx, "NAME_RANGE")) == 0 ) {
-                        rc = VCursorOpen(obj->curs);
-                    }
-                    if( rc == 0 ) {
-                        *objp = obj;
-                        return 0;
+        if( offset < 0 ) {
+            if( (rc = VCursorCellDataDirect(self->curs, ref_row_id, self->u.mod.ref_id_idx, NULL, (void const **)&al_ref_id, NULL, NULL)) == 0 &&
+                (rc = VCursorCellDataDirect(self->curs, ref_row_id,self->u.mod.ref_start_idx, NULL, (void const **)&al_ref_start, NULL, NULL)) == 0 ) {
+                memcpy ( & al_ref_id_value, al_ref_id, sizeof *al_ref_id );
+                if( -offset > ref_len ) {
+                    /* requested chunk is to the left and is not using allele data */
+                    rc = RC(rcXF, rcFunction, rcSelecting, rcData, rcCorrupt);
+                } else if( (rc = self->u.mod.parent->func(self->u.mod.parent, al_ref_id_value, offset + al_ref_start[0],
+                                                          -offset, ref_ploidy, rslt)) == 0 ) {
+                    /* read left portion of underlying reference */
+                    num_read += rslt->elem_count;
+                    offset = 0;
+                }
+            }
+        }
+        if( rc == 0 && num_read < ref_len ) {
+            /* copy self */
+            void const* output;
+            uint32_t bits, boff, rs_len, rl_len;
+            const INSDC_coord_zero* rs;
+            const INSDC_coord_len* rl;
+
+            if( (rc = VCursorCellDataDirect(self->curs, ref_row_id, self->out_idx, &bits, &output, &boff, NULL)) == 0 &&
+                (rc = VCursorCellDataDirect(self->curs, ref_row_id, self->u.mod.read_start_idx, NULL, (void const **)&rs, NULL, &rs_len)) == 0 &&
+                (rc = VCursorCellDataDirect(self->curs, ref_row_id, self->u.mod.read_len_idx, NULL, (void const **)&rl, NULL, &rl_len)) == 0 ) {
+                assert(rs_len == rl_len);
+                assert(ref_ploidy > 0 && ref_ploidy <= rl_len);
+                if( offset > rl[ref_ploidy - 1] ) {
+                    /* requested chunk starts beyond allele */
+                    rc = RC(rcXF, rcFunction, rcSelecting, rcData, rcCorrupt);
+                } else {
+                    INSDC_coord_len left = ref_len - num_read;
+                    if( (rl[ref_ploidy - 1] - offset) < left ) {
+                        left = rl[ref_ploidy - 1] - offset;
                     }
-                    VCursorRelease ( obj -> curs );
+                    bitcpy(rslt->data->base, rslt->elem_count * bits, output, (rs[ref_ploidy - 1] + offset) * bits + boff, left * bits);
+                    num_read += left;
+                    rslt->elem_count += left;
                 }
             }
         }
-        free ( obj );
-    }
+        if( rc == 0 && num_read < ref_len ) {
+            const INSDC_coord_len* al_ref_len;
+            /* copy right portion of underlying reference */
+            if( al_ref_id == NULL || al_ref_start == NULL ) {
+                if( (rc = VCursorCellDataDirect(self->curs, ref_row_id, self->u.mod.ref_id_idx, NULL, (void const **)&al_ref_id, NULL, NULL)) == 0 ) {
+                     rc = VCursorCellDataDirect(self->curs, ref_row_id, self->u.mod.ref_start_idx, NULL, (void const **)&al_ref_start, NULL, NULL);
+                }
+            }
+            if( rc == 0 ) {
+                rc = VCursorCellDataDirect(self->curs, ref_row_id, self->u.mod.ref_len_idx, NULL, (void const **)&al_ref_len, NULL, NULL);
+            }
+            memcpy ( & al_ref_id_value, al_ref_id, sizeof *al_ref_id );
+            if( rc == 0 &&
+                (rc = self->u.mod.parent->func(self->u.mod.parent, al_ref_id_value, al_ref_start[0] + al_ref_len[0],
+                                 ref_len - num_read, ref_ploidy, rslt)) == 0 ) {
+            }
+        }
     return rc;
 }
 
 static
-rc_t RefTable_PRESERVE_QUAL_SubSelectMake ( RefTableSubSelect **objp, const VTable *tbl )
+void CC RefTableSubSelect_Whack ( void *obj )
+{
+    if( obj != NULL ) {
+        RefTableSubSelect* self = (RefTableSubSelect*)obj;
+        VCursorRelease(self->curs);
+        if( self->func != REFERENCE_TABLE_sub_select ) {
+            RefTableSubSelect_Whack(self->u.mod.parent);
+        } else {
+            free(self->u.ref.name);
+        }
+        free(self);
+    }
+}
+
+/* normal way to do it */
+#define IS_ADDED(c, i, n) ((rc = VCursorAddColumn(c, i, n)) == 0 || \
+                           (GetRCObject(rc) == rcColumn && GetRCState(rc) == rcExists))
+
+static
+rc_t RefTableSubSelect_Make( RefTableSubSelect **objp, const VTable *tbl, const VCursor *native_curs, const char* out_col_name )
 {
     rc_t rc;
-    
+
     /* create the object */
-    RefTableSubSelect *obj = malloc ( sizeof * obj );
-    if ( obj == NULL ) {
-        rc = RC ( rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted );
+    RefTableSubSelect* obj = (RefTableSubSelect*)calloc(1, sizeof(*obj));
+    if( obj == NULL ) {
+        rc = RC(rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted);
     } else {
-        /* get at the parent database */
-        const VDatabase *db;
-        rc = VTableOpenParentRead ( tbl, & db );
-        if ( rc == 0 )
-        {
-            /* open the reference table */
-            const VTable *reftbl;
-            rc = VDatabaseOpenTableRead ( db, & reftbl, "REFERENCE" );
-            VDatabaseRelease ( db );
-            if ( rc == 0 )
-            {
-                /* create a cursor */
-                rc = VTableCreateCachedCursorRead(reftbl, &obj->curs, 4*1024*1024);
-                VTableRelease ( reftbl );
-                if( rc == 0 ) {
-                    /* add columns to cursor */
-                    if( (rc = VCursorAddColumn(obj->curs, &obj->out_idx,  "(bool)PRESERVE_QUAL")) == 0 &&
-                       (rc = VCursorAddColumn(obj->curs, &obj->name_idx, "(utf8)NAME")) == 0 &&
-                       (rc = VCursorAddColumn(obj->curs, &obj->circular_idx, "CIRCULAR")) == 0 &&
-                       (rc = VCursorAddColumn(obj->curs, &obj->name_range_idx, "NAME_RANGE")) == 0 ) {
-                        rc = VCursorOpen(obj->curs);
+	const VTable *reftbl=NULL;
+        /* open the reference table cursor*/
+        if( (rc = AlignRefTableCursor(tbl, native_curs, &obj->curs,&reftbl)) == 0 ) {
+                /* add columns to cursor */
+                if( IS_ADDED(obj->curs, &obj->u.ref.circular_idx, "CIRCULAR") ) {
+                    /* normal REFERENCE table */
+                    if( IS_ADDED(obj->curs, &obj->u.ref.name_idx, "(utf8)NAME") &&
+                        IS_ADDED(obj->curs, &obj->u.ref.name_range_idx, "NAME_RANGE") &&
+                        IS_ADDED(obj->curs, &obj->u.ref.seq_len_idx, "SEQ_LEN") &&
+                        IS_ADDED(obj->curs, &obj->u.ref.max_seq_len_idx, "MAX_SEQ_LEN") ) {
+                        obj->func = REFERENCE_TABLE_sub_select;
+                        rc = 0;
                     }
-                    if( rc == 0 ) {
-                        *objp = obj;
-                        return 0;
+                } else if( GetRCObject(rc) == rcColumn && GetRCState(rc) == rcNotFound ) {
+                    /* try as align_cmn */
+                    if( (rc = RefTableSubSelect_Make(&obj->u.mod.parent, reftbl, native_curs, out_col_name)) ==0 &&
+                        IS_ADDED(obj->curs, &obj->u.mod.ref_id_idx, "REF_ID") &&
+                        IS_ADDED(obj->curs, &obj->u.mod.ref_start_idx, "REF_START") &&
+                        IS_ADDED(obj->curs, &obj->u.mod.ref_len_idx, "REF_LEN") &&
+                        IS_ADDED(obj->curs, &obj->u.mod.read_start_idx, "READ_START") &&
+                        IS_ADDED(obj->curs, &obj->u.mod.read_len_idx, "READ_LEN") ) {
+                        obj->func = ALIGN_CMN_TABLE_sub_select;
+                        rc = 0;
                     }
-                    VCursorRelease ( obj -> curs );
                 }
-            }
+                if( rc == 0 && IS_ADDED(obj->curs, &obj->out_idx,  out_col_name) ) {
+                    rc = 0;
+                }
+                if( rc == 0 ) {
+                    *objp = obj;
+		    VTableRelease(reftbl);
+                    return 0;
+                }
+                VCursorRelease(obj->curs);
         }
-        free ( obj );
+	VTableRelease(reftbl);
+        free(obj);
     }
     return rc;
 }
 
-static void my_copy(void *Dst, bitsz_t doff, void const *Src, bitsz_t soff, bitsz_t sz)
-{
-    if ((doff & 7) == 0 && (soff & 7) == 0 && (sz & 7) == 0) {
-        uint8_t *const dst = (uint8_t *)Dst;
-        uint8_t const *const src = (uint8_t const *)Src;
-        
-        memcpy(&dst[doff >> 3], &src[soff >> 3], sz >> 3);
-    }
-    else
-        bitcpy(Dst, doff, Src, soff, sz);
-}
-
 static
 rc_t CC reftbl_sub_select ( void *data, const VXformInfo *info,
-    int64_t row_id, VRowResult *rslt, uint32_t argc, const VRowData argv[] )
+                           int64_t row_id, VRowResult *rslt, uint32_t argc, const VRowData argv[] )
 {
     rc_t rc;
-    const RefTableSubSelect * self = (const void*)data;
-    uint8_t *dst;
-    uint32_t num_read, row_len, ref_len;
-    INSDC_coord_zero offset;
-    int64_t ref_row_id;
-    char* name = NULL;
-    uint32_t name_len = 0;
-    const bool* circular;
-
-    /* get start and length of reference segment */
-    const int64_t* ref_id = argv[0].u.data.base;
-    const INSDC_coord_zero* ref_start = argv[1].u.data.base;
-    const INSDC_coord_len* ref_lenv  = argv[2].u.data.base;
-
+    RefTableSubSelect* self = (RefTableSubSelect*)data;
+    const int64_t* ref_id = (const int64_t*)argv[0].u.data.base;
+    const INSDC_coord_zero* ref_start = (const INSDC_coord_zero*)argv[1].u.data.base;
+    const INSDC_coord_len* ref_len = (const INSDC_coord_len*)argv[2].u.data.base;
+    const uint32_t* ref_ploidy = NULL;
+    
+    if( argc > 3 ) {
+        ref_ploidy = (const uint32_t*)argv[3].u.data.base;
+        ref_ploidy += argv[3].u.data.first_elem;
+        assert(argv[3].u.data.elem_bits == sizeof(*ref_ploidy) * 8 );
+    }
     assert(argv[0].u.data.elem_bits == sizeof(*ref_id) * 8 );
     assert(argv[1].u.data.elem_bits == sizeof(*ref_start) * 8 );
-    assert(argv[2].u.data.elem_bits == sizeof(*ref_lenv) * 8 );
+    assert(argv[2].u.data.elem_bits == sizeof(*ref_len) * 8 );
+
+    ref_id += argv[0].u.data.first_elem;
+    ref_start += argv[1].u.data.first_elem;
+    ref_len += argv[2].u.data.first_elem;
 
-    ref_lenv += argv[2].u.data.first_elem;
-    ref_len = ref_lenv[0];
     /* get the memory for output row */
-    
     rslt->data->elem_bits = rslt->elem_bits;
-    if((rc = KDataBufferResize ( rslt->data, ref_len )) == 0 ) {
-        dst = rslt->data->base;
-        /* starting row and offset */
-        ref_id += argv[0].u.data.first_elem;
-        ref_start += argv[1].u.data.first_elem;
-        ref_row_id = ref_id[0];
-        offset = ref_start[0];
-    }
-    /* read the sequence */
-    for( num_read = 0; rc == 0 && num_read < ref_len; offset = 0, num_read += row_len ) {
-        VCursorCloseRow(self->curs);
-        if( (rc = VCursorSetRowId(self->curs, ref_row_id)) == 0 &&
-            (rc = VCursorOpenRow(self->curs)) == 0 ) {
-            void const* output;
-            const char* name_next;
-            uint32_t name_len_next;
-            uint32_t bits;
-            uint32_t boff;
-            
-            if( (rc = VCursorCellData(self->curs, self->out_idx, &bits, &output, &boff, &row_len)) == 0 &&
-                (rc = VCursorCellData(self->curs, self->name_idx, NULL, (void const **)&name_next, NULL, &name_len_next)) == 0 ) {
-                if( name != NULL && (name_len != name_len_next || memcmp(name, name_next, name_len) != 0) ) {
-                    /* next name detected */
-                    if( *circular ) {
-                        /* use i_name to find 1st rowid */
-                        if( (rc = VCursorParamsSet((const struct VCursorParams *)(self->curs),
-                                                   "QUERY_SEQ_NAME", "%.*s", name_len, name)) == 0 ) {
-                            struct {
-                                int64_t start_id;
-                                uint64_t id_count;
-                            } *out;
-                            if( (rc = VCursorCellData(self->curs, self->name_range_idx, NULL, (const void**)&out, NULL, NULL)) == 0 ) {
-                                row_len = 0;
-                                ref_row_id = out->start_id;
-                            }
-                        }
-                        continue;
-                    } else {
-                        rc = RC(rcXF, rcFunction, rcSelecting, rcData, rcCorrupt);
-                    }
-                } else if( name == NULL ) {
-                    uint32_t l;
-                    if( (rc = VCursorCellData(self->curs, self->circular_idx, NULL,
-                                              (const void**)&circular, NULL, &l)) == 0 ) {
-                        assert(l == sizeof(*circular));
-                        name = malloc(name_len_next);
-                        if( name == NULL ) {
-                            rc = RC(rcXF, rcFunction, rcSelecting, rcMemory, rcExhausted);
-                        } else {
-                            memcpy(name, name_next, name_len_next);
-                            name_len = name_len_next;
-                        }
-                    }
-                }
-                if( rc == 0 ) {
-                    /* row_len MUST be > offset */
-                    if( row_len <= offset ) {
-                        rc = RC(rcXF, rcFunction, rcSelecting, rcData, rcCorrupt);
-                    } else {
-                        row_len -= offset;
-                        if(ref_len < row_len + num_read) {
-                            row_len = ref_len - num_read;
-                        }
-                        /* copy data */
-                        my_copy(dst, num_read * bits, output, offset * bits + boff, row_len * bits);
-
-                        ref_row_id++;
-                    }
-                }
-            }
-        }
-    }
-    /* detect incomplete read */
-    if( rc == 0 && num_read < ref_len ) {
-        rc = RC(rcXF, rcFunction, rcSelecting, rcTransfer, rcIncomplete);
+    if( (rc = KDataBufferResize(rslt->data, ref_len[0])) == 0 ) {
+        /* must set it to 0 here - functions above accumulate */
+        rslt->elem_count = 0;
+	if(ref_len[0] > 0){
+		int64_t ref_id_val;
+		memcpy ( & ref_id_val, ref_id, sizeof ref_id_val );
+		rc = self->func(self, ref_id_val, ref_start[0], ref_len[0], ref_ploidy ? ref_ploidy[0] : 0, rslt);
+	}
     }
-    free(name);
-    rslt->elem_count = num_read;
     return rc;
 }
 
@@ -278,13 +369,13 @@ VTRANSFACT_IMPL ( ALIGN_ref_sub_select, 1, 0, 0 ) ( const void *self, const VXfa
     VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
 {
     RefTableSubSelect *fself;
-    rc_t rc = RefTable_READ_SubSelectMake ( & fself, info -> tbl );
+    rc_t rc = RefTableSubSelect_Make ( & fself, info -> tbl, (const VCursor*)info->parms ,"(INSDC:4na:bin)READ" );
     if ( rc == 0 )
     {
         rslt -> self = fself;
-        rslt -> whack = RefTableSubSelectWhack;
+        rslt -> whack = RefTableSubSelect_Whack;
         rslt -> u . ndf = reftbl_sub_select;
-        rslt -> variant = vftNonDetRow;
+        rslt -> variant = vftRow;
     }
 
     return rc;
@@ -294,13 +385,13 @@ VTRANSFACT_IMPL ( NCBI_align_ref_sub_select_preserve_qual, 1, 0, 0 ) ( const voi
                                                    VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
 {
     RefTableSubSelect *fself;
-    rc_t rc = RefTable_PRESERVE_QUAL_SubSelectMake ( & fself, info -> tbl );
+    rc_t rc = RefTableSubSelect_Make( & fself, info -> tbl, (const VCursor*)info->parms , "(bool)PRESERVE_QUAL" );
     if ( rc == 0 )
     {
         rslt -> self = fself;
-        rslt -> whack = RefTableSubSelectWhack;
+        rslt -> whack = RefTableSubSelect_Whack;
         rslt -> u . ndf = reftbl_sub_select;
-        rslt -> variant = vftNonDetRow;
+        rslt -> variant = vftRow;
     }
     
     return rc;
diff --git a/libs/axf/ref-tbl.c b/libs/axf/ref-tbl.c
new file mode 100644
index 0000000..57e0933
--- /dev/null
+++ b/libs/axf/ref-tbl.c
@@ -0,0 +1,85 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/vdb-priv.h>
+#include <vdb/cursor.h>
+#include <kdb/meta.h>
+#include <klib/rc.h>
+
+#include "ref-tbl.h"
+#include <string.h>
+
+rc_t AlignRefTableCursor(const VTable* table, const VCursor *native_curs, const VCursor** ref_cursor,const VTable **reftbl)
+{
+	rc_t rc = 0;
+	char ref_tbl_name[512] =  "REFERENCE";
+	const KMetadata* meta;
+	const VCursor *curs;
+
+	if( (rc = VTableOpenMetadataRead(table, &meta)) == 0 ) {
+	    const KMDataNode* node;
+            if( (rc = KMetadataOpenNodeRead(meta, &node, "CONFIG/REF_TABLE")) == 0 ) {
+                size_t sz;
+                rc = KMDataNodeReadCString(node, ref_tbl_name, sizeof(ref_tbl_name), &sz);
+                ref_tbl_name[sz] = '\0';
+                KMDataNodeRelease(node);
+            }
+            KMetadataRelease(meta);
+        }
+	rc = VCursorLinkedCursorGet(native_curs,ref_tbl_name,&curs);
+	if(rc != 0){
+		const VDatabase *db;
+                const VTable *tbl;
+                /* get at the parent database */
+                rc = VTableOpenParentRead ( table, & db );
+                if(rc != 0) return rc;
+                /* open the table */
+                rc = VDatabaseOpenTableRead ( db, &tbl, ref_tbl_name);
+                VDatabaseRelease ( db );
+                if(rc != 0) return rc;
+                /* create a cursor */
+                rc = VTableCreateCachedCursorRead(tbl, &curs,256*1024*1024);
+		if(reftbl){
+			*reftbl = tbl;
+                } else {
+			VTableRelease(tbl);
+		}
+                if(rc != 0) return rc;
+                rc = VCursorPermitPostOpenAdd( curs );
+                if(rc != 0) return rc;
+                rc = VCursorOpen( curs );
+                if(rc != 0) return rc;
+                if(native_curs)
+                    rc = VCursorLinkedCursorSet(native_curs,ref_tbl_name,curs);
+                
+                if(rc != 0) return rc;
+	} else {
+		VCursorAddRef(curs);
+	}
+	*ref_cursor = curs;
+	return 0;
+}
diff --git a/libs/axf/ref-tbl.h b/libs/axf/ref-tbl.h
new file mode 100644
index 0000000..24cbf80
--- /dev/null
+++ b/libs/axf/ref-tbl.h
@@ -0,0 +1,32 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_axf_ref_tbl_
+#define _h_axf_ref_tbl_
+
+/* Caller must release ref_cursor */
+rc_t AlignRefTableCursor(const VTable* table, const VCursor *native_curs, const VCursor** ref_cursor, const VTable **reftbl);
+
+#endif /* _h_axf_ref_tbl_ */
diff --git a/libs/axf/refseq-stats.c b/libs/axf/refseq-stats.c
index 8b6bf22..c77368c 100644
--- a/libs/axf/refseq-stats.c
+++ b/libs/axf/refseq-stats.c
@@ -134,7 +134,7 @@ VTRANSFACT_IMPL ( NCBI_refSeq_stats, 1, 0, 0 ) ( const void *self, const VXfactI
             if( rc == 0 ) {
                 rslt->self = data;
                 rslt->whack = refseq_meta_stats_whack;
-                rslt->variant = vftNonDetRow;
+                rslt->variant = vftRow;
                 rslt->u.rf = refseq_meta_stats;
                 data->crc32 = 0;
                 CRC32Init();
diff --git a/libs/axf/seq-construct-read.c b/libs/axf/seq-construct-read.c
new file mode 100644
index 0000000..d0fc66e
--- /dev/null
+++ b/libs/axf/seq-construct-read.c
@@ -0,0 +1,125 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <vdb/extern.h>
+#include <vdb/xform.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/schema.h>
+
+
+#include <klib/defs.h>
+#include <klib/rc.h>
+#include <kdb/meta.h>
+#include <klib/data-buffer.h>
+#include <insdc/insdc.h>
+#include <align/refseq-mgr.h>
+#include <bitstr.h>
+#include <sysalloc.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <stdio.h>
+#include <insdc/sra.h>
+
+
+static
+rc_t CC seq_construct_read ( void *data, const VXformInfo *info, int64_t row_id,
+    VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+{
+    rc_t rc;
+    uint8_t *dst;
+
+    /* base pointers to input data */
+    const uint8_t *aligned = argv [ 0 ] . u . data . base;
+    const INSDC_coord_len *aligned_len = argv [ 1 ] . u . data . base;
+    const uint8_t *unaligned = argv [ 2 ] . u . data . base;
+    const INSDC_coord_len *unaligned_len = argv [ 3 ] . u . data . base;
+
+    /* the number of reads */
+    uint32_t i, seqlen, aligned_seqlen, unaligned_seqlen;
+    uint32_t nreads = argv [ 1 ] . u . data . elem_count;
+
+    /* require the same dimension for both inputs */
+    if ( argv [ 1 ] . u . data . elem_count != argv [ 3 ] . u . data . elem_count )
+        return RC ( rcXF, rcFunction, rcExecuting, rcData, rcInconsistent );
+
+    /* offset base pointers to start of row */
+    aligned += argv [ 0 ] . u . data . first_elem;
+    aligned_len += argv [ 1 ] . u . data . first_elem;
+    unaligned += argv [ 2 ] . u . data . first_elem;
+    unaligned_len += argv [ 3 ] . u . data . first_elem;
+
+    /* calculate new sequence length */
+    for ( i = seqlen = 0; i < nreads; ++ i )
+        seqlen += unaligned_len [ i ] != 0 ? unaligned_len [ i ] : aligned_len [ i ];
+
+    /* set output buffer size */
+    rslt -> data -> elem_bits = 8;
+    rc = KDataBufferResize ( rslt -> data, seqlen );
+    if ( rc != 0 )
+        return rc;
+
+    /* produce final sequence */
+    for ( dst = rslt -> data -> base, i = seqlen = aligned_seqlen = unaligned_seqlen = 0; i < nreads; ++ i )
+    {
+        /* give preference to unaligned */
+        if ( unaligned_len [ i ] != 0 )
+        {
+            memcpy ( & dst [ seqlen ], & unaligned [ unaligned_seqlen ], unaligned_len [ i ] );
+            seqlen += unaligned_len [ i ];
+        }
+        else
+        {
+            memcpy ( & dst [ seqlen ], & aligned [ aligned_seqlen ], aligned_len [ i ] );
+            seqlen += aligned_len [ i ];
+        }
+
+        aligned_seqlen += aligned_len [ i ];
+        unaligned_seqlen += unaligned_len [ i ];
+    }
+
+    rslt -> elem_count = seqlen;
+
+    return 0;
+}
+
+/* 
+ * function < type T >
+ * T NCBI:align:seq_construct_read #1 (T     read, INSDC:coord:len     read_len,
+ *                                     T cmp_read, INSDC:coord:len cmp_read_len);
+ */
+VTRANSFACT_IMPL ( NCBI_align_seq_construct_read, 1, 0, 0 )
+    ( const void *Self, const VXfactInfo *info,
+      VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+{
+    if (info->fdesc.desc.intrinsic_bits * info->fdesc.desc.intrinsic_dim != 8)
+        return RC(rcAlign, rcFunction, rcConstructing, rcType, rcIncorrect);
+    rslt->u.ndf = seq_construct_read;
+    rslt->variant = vftRow;
+    return 0;
+}
diff --git a/libs/axf/seq-restore-read.c b/libs/axf/seq-restore-read.c
index f1667c6..1141717 100644
--- a/libs/axf/seq-restore-read.c
+++ b/libs/axf/seq-restore-read.c
@@ -28,6 +28,7 @@
 #include <vdb/database.h>
 #include <vdb/table.h>
 #include <vdb/cursor.h>
+#include <vdb/schema.h>
 
 
 #include <klib/defs.h>
@@ -82,7 +83,7 @@ rc_t RestoreReadMake ( RestoreRead **objp, const VTable *tbl )
             VDatabaseRelease ( db );
             if ( rc == 0 ) {
                 /* create a cursor */
-                rc = VTableCreateCachedCursorRead(patbl, &obj->curs, 4*1024*1024);
+                rc = VTableCreateCachedCursorRead(patbl, &obj->curs, 256*1024*1024UL);
                 VTableRelease ( patbl );
                 if ( rc == 0 ) {
                     /* add columns to cursor */
@@ -109,7 +110,7 @@ static INSDC_4na_bin  map[]={
 /*3  0011 - 1100*/ 12,
 /*4  0100 - 0010*/ 2,
 /*5  0101 - 1010*/ 10,
-/*6  0110 - 0110*/ 6,
+/*  0110 - 0110*/ 6,
 /*7  0111 - 1110*/ 14,
 /*8  1000 - 0001*/ 1,
 /*9  1001 - 1001*/ 9,
@@ -136,21 +137,21 @@ rc_t CC seq_restore_read_impl ( void *data, const VXformInfo *info, int64_t row_
     const int64_t	*align_id	= argv[1].u.data.base;
     const INSDC_coord_len *read_len  	= argv[2].u.data.base;
     const uint8_t	*read_type	= argv[3].u.data.base;
-
+    
     assert(argv[0].u.data.elem_bits == 8);
     assert(argv[1].u.data.elem_bits == 64);
     assert(argv[2].u.data.elem_bits == sizeof(INSDC_coord_len)*8);
     assert(argv[2].u.data.elem_count == num_reads);
     assert(argv[3].u.data.elem_count == num_reads);
-
-
+    
+    
     src   += argv [ 0 ] . u . data . first_elem;
     align_id  += argv [ 1 ] . u . data . first_elem;
     read_len  += argv [ 2 ] . u . data . first_elem;
     read_type += argv [ 3 ] . u . data . first_elem;
-
+    
     for(i=0,len=0;i<num_reads;i++){
-	len+=read_len[i];
+        len+=read_len[i];
     }
     /* resize output row */    
     rslt->data->elem_bits = 8;
@@ -158,46 +159,40 @@ rc_t CC seq_restore_read_impl ( void *data, const VXformInfo *info, int64_t row_
     rslt->elem_count = len;
     dst = rslt->data->base;
     if ( rc == 0  && len > 0 ) {
-	if(len == src_len){ /*** shortcut - all data is local ***/
-		memcpy(dst,src,len);
-	} else for(i=0;i<num_reads && rc == 0;i++){ /*** checking read by read ***/
-		if(align_id[i] > 0) {
-			/* set the starting row id */
-			rc = VCursorSetRowId ( self -> curs, align_id[i] );
-			if(rc==0) rc = VCursorOpenRow ( self -> curs );
-			if(rc==0){
-				const INSDC_4na_bin *r_src;
-				uint32_t             r_src_len;
-				rc = VCursorCellData ( self -> curs, self -> read_idx, NULL, ( const void** ) & r_src, NULL, & r_src_len );
-				if(rc == 0){
-					if(r_src_len == read_len[i]){
-						if(read_type[i]&SRA_READ_TYPE_FORWARD){
-							memcpy(dst,r_src,read_len[i]);
-						}else if(read_type[i]&SRA_READ_TYPE_REVERSE){
-							int j,k;
-							for(j=0,k=read_len[i]-1;j<read_len[i];j++,k--){
-								dst[j]=map[r_src[k]&15];
-							}
-						} else {
-							rc = RC(rcXF, rcFunction, rcExecuting, rcData, rcInconsistent);
-						}
-					} else {
-						rc = RC(rcXF, rcFunction, rcExecuting, rcData, rcInconsistent);
-					}
-				}
-				VCursorCloseRow ( self -> curs );			
-			}
-		} else { /*** data is in READ column **/
-			if(src_len >= read_len[i]){
-				memcpy(dst,src,read_len[i]);
-				src_len -= read_len[i];
-				src     += read_len[i];
-			} else {
-				return RC(rcXF, rcFunction, rcExecuting, rcData, rcInconsistent );
-			}
-		}
-		dst += read_len[i];
-	}
+        if(len == src_len){ /*** shortcut - all data is local ***/
+            memcpy(dst,src,len);
+        } else for(i=0;i<num_reads && rc == 0;i++){ /*** checking read by read ***/
+            if(align_id[i] > 0) {
+                    const INSDC_4na_bin *r_src;
+                    uint32_t             r_src_len;
+                    rc = VCursorCellDataDirect ( self -> curs,  align_id[i], self -> read_idx, NULL, ( const void** ) & r_src, NULL, & r_src_len );
+                    if(rc == 0){
+                        if(r_src_len == read_len[i]){
+                            if(read_type[i]&SRA_READ_TYPE_FORWARD){
+                                memcpy(dst,r_src,read_len[i]);
+                            }else if(read_type[i]&SRA_READ_TYPE_REVERSE){
+                                int j,k;
+                                for(j=0,k=read_len[i]-1;j<read_len[i];j++,k--){
+                                    dst[j]=map[r_src[k]&15];
+                                }
+                            } else {
+                                rc = RC(rcXF, rcFunction, rcExecuting, rcData, rcInconsistent);
+                            }
+                        } else {
+                            rc = RC(rcXF, rcFunction, rcExecuting, rcData, rcInconsistent);
+                        }
+                    }
+            } else { /*** data is in READ column **/
+                if(src_len >= read_len[i]){
+                    memcpy(dst,src,read_len[i]);
+                    src_len -= read_len[i];
+                    src     += read_len[i];
+                } else {
+                    return RC(rcXF, rcFunction, rcExecuting, rcData, rcInconsistent );
+                }
+            }
+            dst += read_len[i];
+        }
     }
     return rc;
 }
@@ -214,9 +209,8 @@ VTRANSFACT_IMPL ( ALIGN_seq_restore_read, 1, 0, 0 ) ( const void *Self, const VX
     if(rc == 0 ) {
         rslt->self = fself;
         rslt->u.ndf = seq_restore_read_impl;
-        rslt->variant = vftNonDetRow;
+        rslt->variant = vftRow;
         rslt -> whack = RestoreReadWhack;
     }
     return rc;
 }
-
diff --git a/libs/axf/template-len.c b/libs/axf/template-len.c
index b1a3dff..07266db 100644
--- a/libs/axf/template-len.c
+++ b/libs/axf/template-len.c
@@ -42,50 +42,80 @@
 static
 rc_t CC template_len_impl(void *data,const VXformInfo *info, int64_t row_id, VRowResult *rslt, uint32_t argc, const VRowData argv [] ) 
 {
-	rc_t 	rc;
-	int32_t	*dst;
-	const INSDC_coord_zero *p1 = argv[0].u.data.base;
-	const INSDC_coord_zero *p2 = argv[1].u.data.base;
-	const INSDC_coord_len  *l1 = argv[2].u.data.base;
-        const INSDC_coord_len  *l2 = argv[3].u.data.base;
-        const char             *n1 = argv[4].u.data.base;
-	const char             *n2 = argv[5].u.data.base;
-	const INSDC_coord_one  *r1 = argv[6].u.data.base;
+    rc_t 	rc;
+    int32_t	*dst;
+    const INSDC_coord_zero *p1 = argv[0].u.data.base;
+    const INSDC_coord_zero *p2 = argv[1].u.data.base;
+    const INSDC_coord_len  *l1 = argv[2].u.data.base;
+    const INSDC_coord_len  *l2 = argv[3].u.data.base;
+    const char             *n1 = argv[4].u.data.base;
+    const char             *n2 = argv[5].u.data.base;
+    const INSDC_coord_one  *r1 = argv[6].u.data.base;
 
-	/** primary should have everything defines ***/
-	assert(argv[0].u.data.elem_count == 1);
-	assert(argv[2].u.data.elem_count == 1);
-	assert(argv[4].u.data.elem_count > 0 );
-	assert(argv[6].u.data.elem_count == 1);
+    /** primary should have everything defines ***/
+    assert(argv[0].u.data.elem_count == 1);
+    assert(argv[2].u.data.elem_count == 1);
+    assert(argv[4].u.data.elem_count > 0 );
+    assert(argv[6].u.data.elem_count == 1);
 
+    rc = KDataBufferResize(rslt->data, 1);
+    if(rc != 0) return rc;
+    rslt->elem_count=1;
+    dst = rslt->data->base;
+    dst[0] = 0;
 
-	rc = KDataBufferResize(rslt->data, 1);
-	if(rc != 0) return rc;
-	rslt->elem_count=1;
-	dst = rslt->data->base;
-	dst[0]=0;
-	
-	/*** check if the mate is mapped **/
-	if(   argv[1].u.data.elem_count > 0
-           && argv[3].u.data.elem_count > 0
-	   && argv[4].u.data.elem_count == argv[5].u.data.elem_count){ 
-		n1+=argv[4].u.data.first_elem;
-		n2+=argv[5].u.data.first_elem;
-		r1+=argv[6].u.data.first_elem;
-		if(memcmp(n1,n2,argv[4].u.data.elem_count)==0){ /*** same reference name ***/
-			dst[0] = p2[argv[1].u.data.first_elem] -  p1[argv[0].u.data.first_elem];
-			if(dst[0] < 0){
-				dst[0] -= l1[argv[2].u.data.first_elem];
-			} else if (dst[0] > 0) {
-				dst[0] += l2[argv[3].u.data.first_elem];
-			} else if(r1[0]==1){/*** bam wants to give positive TLEN ***/
-				dst[0] = l1[argv[2].u.data.first_elem];
-			} else if(r1[0]==2){/*** bam wants to give negative TLEN ***/
-                                dst[0] = -l2[argv[3].u.data.first_elem];
-                        } 
-		}
-	}
-	return rc;	
+    /*** check if the mate is mapped **/
+    if(   argv[1].u.data.elem_count > 0
+        && argv[3].u.data.elem_count > 0
+        && argv[4].u.data.elem_count == argv[5].u.data.elem_count)
+    {
+        n1+=argv[4].u.data.first_elem;
+        n2+=argv[5].u.data.first_elem;
+        r1+=argv[6].u.data.first_elem;
+        
+        if(   argv[4].u.data.elem_count == argv[5].u.data.elem_count
+            && memcmp(n1,n2,argv[4].u.data.elem_count)==0) /*** same reference name ***/
+        {
+#if 1
+            unsigned const self_left  = p1[argv[0].u.data.first_elem];
+            unsigned const mate_left  = p2[argv[1].u.data.first_elem];
+            unsigned const self_right = self_left + l1[argv[2].u.data.first_elem];
+            unsigned const mate_right = mate_left + l2[argv[3].u.data.first_elem];
+            unsigned const  leftmost  = (self_left  < mate_left ) ? self_left  : mate_left;
+            unsigned const rightmost  = (self_right > mate_right) ? self_right : mate_right;
+            unsigned const tlen = rightmost - leftmost;
+            
+            /* The standard says, "The leftmost segment has a plus sign and the rightmost has a minus sign." */
+            if (   (self_left <= mate_left && self_right >= mate_right)     /* mate fully contained within self or */
+                || (mate_left <= self_left && mate_right >= self_right))    /* self fully contained within mate; */
+            {
+                if (self_left < mate_left || (r1[0] == 1 && self_left == mate_left))
+                    dst[0] = tlen;
+                else
+                    dst[0] = -tlen;
+            }
+            else if (   (self_right == mate_right && mate_left == leftmost) /* both are rightmost, but mate is leftmost */
+                     ||  self_right == rightmost)
+            {
+                dst[0] = -tlen;
+            }
+            else
+                dst[0] = tlen;
+#else
+            dst[0] = p2[argv[1].u.data.first_elem] -  p1[argv[0].u.data.first_elem];
+            if(dst[0] < 0){
+                dst[0] -= l1[argv[2].u.data.first_elem];
+            } else if (dst[0] > 0) {
+                dst[0] += l2[argv[3].u.data.first_elem];
+            } else if(r1[0]==1){/*** bam wants to give positive TLEN ***/
+                dst[0] = l1[argv[2].u.data.first_elem];
+            } else if(r1[0]==2){/*** bam wants to give negative TLEN ***/
+                dst[0] = -l2[argv[3].u.data.first_elem];
+            } 
+#endif
+        }
+    }
+    return 0;	
 }
 
 VTRANSFACT_IMPL ( NCBI_align_template_len, 1, 0, 0 ) ( const void *self, const VXfactInfo *info, VFuncDesc *rslt,
diff --git a/libs/ext/Makefile b/libs/ext/Makefile
index 8d213f2..faa5ee5 100644
--- a/libs/ext/Makefile
+++ b/libs/ext/Makefile
@@ -33,7 +33,8 @@ include $(TOP)/build/Makefile.shell
 #
 SUBDIRS = \
 	zlib \
-	bzip2
+	bzip2 \
+	curl
 
 default: $(SUBDIRS)
 
diff --git a/libs/ext/bzip2/Makefile b/libs/ext/bzip2/Makefile
index 7940b76..7a0a693 100644
--- a/libs/ext/bzip2/Makefile
+++ b/libs/ext/bzip2/Makefile
@@ -42,16 +42,16 @@ ALL_LIBS = \
 #-------------------------------------------------------------------------------
 # outer targets
 #
-std: makedirs download-$(OS)
+std: makedirs download
 	@ $(MAKE_CMD) $(TARGDIR)/$@
 
 all: makedirs download
 	@ $(MAKE_CMD) $(TARGDIR)/$@
 
-$(INT_LIBS): makedirs download-$(OS)
+$(INT_LIBS): makedirs download
 	@ $(MAKE_CMD) $(ILIBDIR)/$@
 
-$(EXT_LIBS): makedirs download-$(OS)
+$(EXT_LIBS): makedirs download
 	@ $(MAKE_CMD) $(LIBDIR)/$@
 
 .PHONY: all std $(ALL_LIBS)
@@ -66,7 +66,7 @@ $(TARGDIR)/all: $(LIBDIR)/libbz2
 #-------------------------------------------------------------------------------
 # std
 #
-$(TARGDIR)/std: $(LIBDIR)/libbz2-$(OS)
+$(TARGDIR)/std: $(LIBDIR)/libbz2
 
 .PHONY: $(TARGDIR)/std
 
@@ -74,37 +74,18 @@ $(TARGDIR)/std: $(LIBDIR)/libbz2-$(OS)
 # clean
 #
 clean: stdclean
+	@ rm -f libbz2.vers
 
 .PHONY: clean
 
 #-------------------------------------------------------------------------------
-# libbz2-$(OS)
-#
-NORMALLY_HAVE = \
-	unix \
-	linux \
-	mac \
-	sun
-
-DONT_HAVE = \
-	win
-
-LIBBZ2_SYS_HAS_LIB = \
-	$(addprefix $(LIBDIR)/libbz2-,$(NORMALLY_HAVE))
-
-$(LIBBZ2_SYS_HAS_LIB):
-	@ true
-
-LIBBZ2_SYS_NEEDS_LIB = \
-	$(addprefix $(LIBDIR)/libbz2-,$(DONT_HAVE))
-
-$(LIBBZ2_SYS_NEEDS_LIB): $(LIBDIR)/libbz2
-
-
-#-------------------------------------------------------------------------------
 # libbz2
 #
+ifeq (win,$(OS))
 $(LIBDIR)/libbz2: $(addprefix $(LIBDIR)/libbz2.,$(LIBEXT))
+else
+$(LIBDIR)/libbz2: $(addprefix $(LIBDIR)/libbz2.,$(LIBX))
+endif
 
 LIBBZ2_SRC = \
 	blocksort \
@@ -128,38 +109,52 @@ $(LIBDIR)/libbz2.$(LIBX): $(LIBBZ2_OBJ)
 
 
 #-------------------------------------------------------------------------------
-# download-$(OS)
-#
-LIBBZ2_SYS_HAS_SRC = \
-	$(addprefix download-,$(NORMALLY_HAVE))
-
-$(LIBBZ2_SYS_HAS_SRC):
-	@ true
-
-LIBBZ2_SYS_NEEDS_SRC = \
-	$(addprefix download-,$(DONT_HAVE))
-
-$(LIBBZ2_SYS_NEEDS_SRC): download
-
-
-#-------------------------------------------------------------------------------
 # libbz2 download
 #
 BZIP2_VERS := \
 	1.0.6
 
-bzip2-$(BZIP2_VERS).tar.gz:
+BZIP2_TAR = \
+	bzip2-$(BZIP2_VERS).tar
+
+BZIP2_TAR_GZ = \
+	$(BZIP2_TAR).gz
+
+ifeq (win,$(OS))
+ECHO_VERS = echo -ne $(BZIP2_VERS) "\n"
+else
+ECHO_VERS = echo $(BZIP2_VERS)
+endif
+
+ifeq (sun,$(OS))
+	BZIP2_TAR_GET = $(BZIP2_TAR)
+	TAR_CMD = tar -xf
+else
+	BZIP2_TAR_GET = $(BZIP2_TAR_GZ)
+	TAR_CMD = tar --no-same-owner -x -z -f
+endif
+
+ifeq (mac,$(OS))
+RETRIEVE = curl -O
+else
+RETRIEVE = wget
+endif
+
+$(BZIP2_TAR_GZ):
 	@ echo downloading the sources
-	wget http://bzip.org/$(BZIP2_VERS)/bzip2-$(BZIP2_VERS).tar.gz
+	$(RETRIEVE) http://bzip.org/$(BZIP2_VERS)/bzip2-$(BZIP2_VERS).tar.gz
 	@ touch $@
 
-libbz2.vers: bzip2-$(BZIP2_VERS).tar.gz
+$(BZIP2_TAR): $(BZIP2_TAR_GZ)
+	gzcat $^ > $@
+
+libbz2.vers: $(BZIP2_TAR_GET)
 	@ echo unpacking the sources
-	tar xzf $^
+	$(TAR_CMD) $^
 	mv bzip2-$(BZIP2_VERS)/*.[ch] .
 	mv bzip2-$(BZIP2_VERS)/*.def .
-	rm -rf bzip2-$(BZIP2_VERS)
-	@ echo $(BZIP2_VERS) > $@
+	-rm -rf bzip2-$(BZIP2_VERS)
+	@ $(ECHO_VERS) > $@
 
 download: libbz2.vers
 
diff --git a/libs/ext/bzip2/blocksort.c b/libs/ext/bzip2/blocksort.c
new file mode 100644
index 0000000..d0d662c
--- /dev/null
+++ b/libs/ext/bzip2/blocksort.c
@@ -0,0 +1,1094 @@
+
+/*-------------------------------------------------------------*/
+/*--- Block sorting machinery                               ---*/
+/*---                                           blocksort.c ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
+   README file.
+
+   This program is released under the terms of the license contained
+   in the file LICENSE.
+   ------------------------------------------------------------------ */
+
+
+#include "bzlib_private.h"
+
+/*---------------------------------------------*/
+/*--- Fallback O(N log(N)^2) sorting        ---*/
+/*--- algorithm, for repetitive blocks      ---*/
+/*---------------------------------------------*/
+
+/*---------------------------------------------*/
+static 
+__inline__
+void fallbackSimpleSort ( UInt32* fmap, 
+                          UInt32* eclass, 
+                          Int32   lo, 
+                          Int32   hi )
+{
+   Int32 i, j, tmp;
+   UInt32 ec_tmp;
+
+   if (lo == hi) return;
+
+   if (hi - lo > 3) {
+      for ( i = hi-4; i >= lo; i-- ) {
+         tmp = fmap[i];
+         ec_tmp = eclass[tmp];
+         for ( j = i+4; j <= hi && ec_tmp > eclass[fmap[j]]; j += 4 )
+            fmap[j-4] = fmap[j];
+         fmap[j-4] = tmp;
+      }
+   }
+
+   for ( i = hi-1; i >= lo; i-- ) {
+      tmp = fmap[i];
+      ec_tmp = eclass[tmp];
+      for ( j = i+1; j <= hi && ec_tmp > eclass[fmap[j]]; j++ )
+         fmap[j-1] = fmap[j];
+      fmap[j-1] = tmp;
+   }
+}
+
+
+/*---------------------------------------------*/
+#define fswap(zz1, zz2) \
+   { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }
+
+#define fvswap(zzp1, zzp2, zzn)       \
+{                                     \
+   Int32 yyp1 = (zzp1);               \
+   Int32 yyp2 = (zzp2);               \
+   Int32 yyn  = (zzn);                \
+   while (yyn > 0) {                  \
+      fswap(fmap[yyp1], fmap[yyp2]);  \
+      yyp1++; yyp2++; yyn--;          \
+   }                                  \
+}
+
+
+#define fmin(a,b) ((a) < (b)) ? (a) : (b)
+
+#define fpush(lz,hz) { stackLo[sp] = lz; \
+                       stackHi[sp] = hz; \
+                       sp++; }
+
+#define fpop(lz,hz) { sp--;              \
+                      lz = stackLo[sp];  \
+                      hz = stackHi[sp]; }
+
+#define FALLBACK_QSORT_SMALL_THRESH 10
+#define FALLBACK_QSORT_STACK_SIZE   100
+
+
+static
+void fallbackQSort3 ( UInt32* fmap, 
+                      UInt32* eclass,
+                      Int32   loSt, 
+                      Int32   hiSt )
+{
+   Int32 unLo, unHi, ltLo, gtHi, n, m;
+   Int32 sp, lo, hi;
+   UInt32 med, r, r3;
+   Int32 stackLo[FALLBACK_QSORT_STACK_SIZE];
+   Int32 stackHi[FALLBACK_QSORT_STACK_SIZE];
+
+   r = 0;
+
+   sp = 0;
+   fpush ( loSt, hiSt );
+
+   while (sp > 0) {
+
+      AssertH ( sp < FALLBACK_QSORT_STACK_SIZE - 1, 1004 );
+
+      fpop ( lo, hi );
+      if (hi - lo < FALLBACK_QSORT_SMALL_THRESH) {
+         fallbackSimpleSort ( fmap, eclass, lo, hi );
+         continue;
+      }
+
+      /* Random partitioning.  Median of 3 sometimes fails to
+         avoid bad cases.  Median of 9 seems to help but 
+         looks rather expensive.  This too seems to work but
+         is cheaper.  Guidance for the magic constants 
+         7621 and 32768 is taken from Sedgewick's algorithms
+         book, chapter 35.
+      */
+      r = ((r * 7621) + 1) % 32768;
+      r3 = r % 3;
+      if (r3 == 0) med = eclass[fmap[lo]]; else
+      if (r3 == 1) med = eclass[fmap[(lo+hi)>>1]]; else
+                   med = eclass[fmap[hi]];
+
+      unLo = ltLo = lo;
+      unHi = gtHi = hi;
+
+      while (1) {
+         while (1) {
+            if (unLo > unHi) break;
+            n = (Int32)eclass[fmap[unLo]] - (Int32)med;
+            if (n == 0) { 
+               fswap(fmap[unLo], fmap[ltLo]); 
+               ltLo++; unLo++; 
+               continue; 
+            };
+            if (n > 0) break;
+            unLo++;
+         }
+         while (1) {
+            if (unLo > unHi) break;
+            n = (Int32)eclass[fmap[unHi]] - (Int32)med;
+            if (n == 0) { 
+               fswap(fmap[unHi], fmap[gtHi]); 
+               gtHi--; unHi--; 
+               continue; 
+            };
+            if (n < 0) break;
+            unHi--;
+         }
+         if (unLo > unHi) break;
+         fswap(fmap[unLo], fmap[unHi]); unLo++; unHi--;
+      }
+
+      AssertD ( unHi == unLo-1, "fallbackQSort3(2)" );
+
+      if (gtHi < ltLo) continue;
+
+      n = fmin(ltLo-lo, unLo-ltLo); fvswap(lo, unLo-n, n);
+      m = fmin(hi-gtHi, gtHi-unHi); fvswap(unLo, hi-m+1, m);
+
+      n = lo + unLo - ltLo - 1;
+      m = hi - (gtHi - unHi) + 1;
+
+      if (n - lo > hi - m) {
+         fpush ( lo, n );
+         fpush ( m, hi );
+      } else {
+         fpush ( m, hi );
+         fpush ( lo, n );
+      }
+   }
+}
+
+#undef fmin
+#undef fpush
+#undef fpop
+#undef fswap
+#undef fvswap
+#undef FALLBACK_QSORT_SMALL_THRESH
+#undef FALLBACK_QSORT_STACK_SIZE
+
+
+/*---------------------------------------------*/
+/* Pre:
+      nblock > 0
+      eclass exists for [0 .. nblock-1]
+      ((UChar*)eclass) [0 .. nblock-1] holds block
+      ptr exists for [0 .. nblock-1]
+
+   Post:
+      ((UChar*)eclass) [0 .. nblock-1] holds block
+      All other areas of eclass destroyed
+      fmap [0 .. nblock-1] holds sorted order
+      bhtab [ 0 .. 2+(nblock/32) ] destroyed
+*/
+
+#define       SET_BH(zz)  bhtab[(zz) >> 5] |= (1 << ((zz) & 31))
+#define     CLEAR_BH(zz)  bhtab[(zz) >> 5] &= ~(1 << ((zz) & 31))
+#define     ISSET_BH(zz)  (bhtab[(zz) >> 5] & (1 << ((zz) & 31)))
+#define      WORD_BH(zz)  bhtab[(zz) >> 5]
+#define UNALIGNED_BH(zz)  ((zz) & 0x01f)
+
+static
+void fallbackSort ( UInt32* fmap, 
+                    UInt32* eclass, 
+                    UInt32* bhtab,
+                    Int32   nblock,
+                    Int32   verb )
+{
+   Int32 ftab[257];
+   Int32 ftabCopy[256];
+   Int32 H, i, j, k, l, r, cc, cc1;
+   Int32 nNotDone;
+   Int32 nBhtab;
+   UChar* eclass8 = (UChar*)eclass;
+
+   /*--
+      Initial 1-char radix sort to generate
+      initial fmap and initial BH bits.
+   --*/
+   if (verb >= 4)
+      VPrintf0 ( "        bucket sorting ...\n" );
+   for (i = 0; i < 257;    i++) ftab[i] = 0;
+   for (i = 0; i < nblock; i++) ftab[eclass8[i]]++;
+   for (i = 0; i < 256;    i++) ftabCopy[i] = ftab[i];
+   for (i = 1; i < 257;    i++) ftab[i] += ftab[i-1];
+
+   for (i = 0; i < nblock; i++) {
+      j = eclass8[i];
+      k = ftab[j] - 1;
+      ftab[j] = k;
+      fmap[k] = i;
+   }
+
+   nBhtab = 2 + (nblock / 32);
+   for (i = 0; i < nBhtab; i++) bhtab[i] = 0;
+   for (i = 0; i < 256; i++) SET_BH(ftab[i]);
+
+   /*--
+      Inductively refine the buckets.  Kind-of an
+      "exponential radix sort" (!), inspired by the
+      Manber-Myers suffix array construction algorithm.
+   --*/
+
+   /*-- set sentinel bits for block-end detection --*/
+   for (i = 0; i < 32; i++) { 
+      SET_BH(nblock + 2*i);
+      CLEAR_BH(nblock + 2*i + 1);
+   }
+
+   /*-- the log(N) loop --*/
+   H = 1;
+   while (1) {
+
+      if (verb >= 4) 
+         VPrintf1 ( "        depth %6d has ", H );
+
+      j = 0;
+      for (i = 0; i < nblock; i++) {
+         if (ISSET_BH(i)) j = i;
+         k = fmap[i] - H; if (k < 0) k += nblock;
+         eclass[k] = j;
+      }
+
+      nNotDone = 0;
+      r = -1;
+      while (1) {
+
+	 /*-- find the next non-singleton bucket --*/
+         k = r + 1;
+         while (ISSET_BH(k) && UNALIGNED_BH(k)) k++;
+         if (ISSET_BH(k)) {
+            while (WORD_BH(k) == 0xffffffff) k += 32;
+            while (ISSET_BH(k)) k++;
+         }
+         l = k - 1;
+         if (l >= nblock) break;
+         while (!ISSET_BH(k) && UNALIGNED_BH(k)) k++;
+         if (!ISSET_BH(k)) {
+            while (WORD_BH(k) == 0x00000000) k += 32;
+            while (!ISSET_BH(k)) k++;
+         }
+         r = k - 1;
+         if (r >= nblock) break;
+
+         /*-- now [l, r] bracket current bucket --*/
+         if (r > l) {
+            nNotDone += (r - l + 1);
+            fallbackQSort3 ( fmap, eclass, l, r );
+
+            /*-- scan bucket and generate header bits-- */
+            cc = -1;
+            for (i = l; i <= r; i++) {
+               cc1 = eclass[fmap[i]];
+               if (cc != cc1) { SET_BH(i); cc = cc1; };
+            }
+         }
+      }
+
+      if (verb >= 4) 
+         VPrintf1 ( "%6d unresolved strings\n", nNotDone );
+
+      H *= 2;
+      if (H > nblock || nNotDone == 0) break;
+   }
+
+   /*-- 
+      Reconstruct the original block in
+      eclass8 [0 .. nblock-1], since the
+      previous phase destroyed it.
+   --*/
+   if (verb >= 4)
+      VPrintf0 ( "        reconstructing block ...\n" );
+   j = 0;
+   for (i = 0; i < nblock; i++) {
+      while (ftabCopy[j] == 0) j++;
+      ftabCopy[j]--;
+      eclass8[fmap[i]] = (UChar)j;
+   }
+   AssertH ( j < 256, 1005 );
+}
+
+#undef       SET_BH
+#undef     CLEAR_BH
+#undef     ISSET_BH
+#undef      WORD_BH
+#undef UNALIGNED_BH
+
+
+/*---------------------------------------------*/
+/*--- The main, O(N^2 log(N)) sorting       ---*/
+/*--- algorithm.  Faster for "normal"       ---*/
+/*--- non-repetitive blocks.                ---*/
+/*---------------------------------------------*/
+
+/*---------------------------------------------*/
+static
+__inline__
+Bool mainGtU ( UInt32  i1, 
+               UInt32  i2,
+               UChar*  block, 
+               UInt16* quadrant,
+               UInt32  nblock,
+               Int32*  budget )
+{
+   Int32  k;
+   UChar  c1, c2;
+   UInt16 s1, s2;
+
+   AssertD ( i1 != i2, "mainGtU" );
+   /* 1 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 2 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 3 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 4 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 5 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 6 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 7 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 8 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 9 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 10 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 11 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+   /* 12 */
+   c1 = block[i1]; c2 = block[i2];
+   if (c1 != c2) return (c1 > c2);
+   i1++; i2++;
+
+   k = nblock + 8;
+
+   do {
+      /* 1 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 2 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 3 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 4 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 5 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 6 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 7 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+      /* 8 */
+      c1 = block[i1]; c2 = block[i2];
+      if (c1 != c2) return (c1 > c2);
+      s1 = quadrant[i1]; s2 = quadrant[i2];
+      if (s1 != s2) return (s1 > s2);
+      i1++; i2++;
+
+      if (i1 >= nblock) i1 -= nblock;
+      if (i2 >= nblock) i2 -= nblock;
+
+      k -= 8;
+      (*budget)--;
+   }
+      while (k >= 0);
+
+   return False;
+}
+
+
+/*---------------------------------------------*/
+/*--
+   Knuth's increments seem to work better
+   than Incerpi-Sedgewick here.  Possibly
+   because the number of elems to sort is
+   usually small, typically <= 20.
+--*/
+static
+Int32 incs[14] = { 1, 4, 13, 40, 121, 364, 1093, 3280,
+                   9841, 29524, 88573, 265720,
+                   797161, 2391484 };
+
+static
+void mainSimpleSort ( UInt32* ptr,
+                      UChar*  block,
+                      UInt16* quadrant,
+                      Int32   nblock,
+                      Int32   lo, 
+                      Int32   hi, 
+                      Int32   d,
+                      Int32*  budget )
+{
+   Int32 i, j, h, bigN, hp;
+   UInt32 v;
+
+   bigN = hi - lo + 1;
+   if (bigN < 2) return;
+
+   hp = 0;
+   while (incs[hp] < bigN) hp++;
+   hp--;
+
+   for (; hp >= 0; hp--) {
+      h = incs[hp];
+
+      i = lo + h;
+      while (True) {
+
+         /*-- copy 1 --*/
+         if (i > hi) break;
+         v = ptr[i];
+         j = i;
+         while ( mainGtU ( 
+                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget 
+                 ) ) {
+            ptr[j] = ptr[j-h];
+            j = j - h;
+            if (j <= (lo + h - 1)) break;
+         }
+         ptr[j] = v;
+         i++;
+
+         /*-- copy 2 --*/
+         if (i > hi) break;
+         v = ptr[i];
+         j = i;
+         while ( mainGtU ( 
+                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget 
+                 ) ) {
+            ptr[j] = ptr[j-h];
+            j = j - h;
+            if (j <= (lo + h - 1)) break;
+         }
+         ptr[j] = v;
+         i++;
+
+         /*-- copy 3 --*/
+         if (i > hi) break;
+         v = ptr[i];
+         j = i;
+         while ( mainGtU ( 
+                    ptr[j-h]+d, v+d, block, quadrant, nblock, budget 
+                 ) ) {
+            ptr[j] = ptr[j-h];
+            j = j - h;
+            if (j <= (lo + h - 1)) break;
+         }
+         ptr[j] = v;
+         i++;
+
+         if (*budget < 0) return;
+      }
+   }
+}
+
+
+/*---------------------------------------------*/
+/*--
+   The following is an implementation of
+   an elegant 3-way quicksort for strings,
+   described in a paper "Fast Algorithms for
+   Sorting and Searching Strings", by Robert
+   Sedgewick and Jon L. Bentley.
+--*/
+
+#define mswap(zz1, zz2) \
+   { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; }
+
+#define mvswap(zzp1, zzp2, zzn)       \
+{                                     \
+   Int32 yyp1 = (zzp1);               \
+   Int32 yyp2 = (zzp2);               \
+   Int32 yyn  = (zzn);                \
+   while (yyn > 0) {                  \
+      mswap(ptr[yyp1], ptr[yyp2]);    \
+      yyp1++; yyp2++; yyn--;          \
+   }                                  \
+}
+
+static 
+__inline__
+UChar mmed3 ( UChar a, UChar b, UChar c )
+{
+   UChar t;
+   if (a > b) { t = a; a = b; b = t; };
+   if (b > c) { 
+      b = c;
+      if (a > b) b = a;
+   }
+   return b;
+}
+
+#define mmin(a,b) ((a) < (b)) ? (a) : (b)
+
+#define mpush(lz,hz,dz) { stackLo[sp] = lz; \
+                          stackHi[sp] = hz; \
+                          stackD [sp] = dz; \
+                          sp++; }
+
+#define mpop(lz,hz,dz) { sp--;             \
+                         lz = stackLo[sp]; \
+                         hz = stackHi[sp]; \
+                         dz = stackD [sp]; }
+
+
+#define mnextsize(az) (nextHi[az]-nextLo[az])
+
+#define mnextswap(az,bz)                                        \
+   { Int32 tz;                                                  \
+     tz = nextLo[az]; nextLo[az] = nextLo[bz]; nextLo[bz] = tz; \
+     tz = nextHi[az]; nextHi[az] = nextHi[bz]; nextHi[bz] = tz; \
+     tz = nextD [az]; nextD [az] = nextD [bz]; nextD [bz] = tz; }
+
+
+#define MAIN_QSORT_SMALL_THRESH 20
+#define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT)
+#define MAIN_QSORT_STACK_SIZE 100
+
+static
+void mainQSort3 ( UInt32* ptr,
+                  UChar*  block,
+                  UInt16* quadrant,
+                  Int32   nblock,
+                  Int32   loSt, 
+                  Int32   hiSt, 
+                  Int32   dSt,
+                  Int32*  budget )
+{
+   Int32 unLo, unHi, ltLo, gtHi, n, m, med;
+   Int32 sp, lo, hi, d;
+
+   Int32 stackLo[MAIN_QSORT_STACK_SIZE];
+   Int32 stackHi[MAIN_QSORT_STACK_SIZE];
+   Int32 stackD [MAIN_QSORT_STACK_SIZE];
+
+   Int32 nextLo[3];
+   Int32 nextHi[3];
+   Int32 nextD [3];
+
+   sp = 0;
+   mpush ( loSt, hiSt, dSt );
+
+   while (sp > 0) {
+
+      AssertH ( sp < MAIN_QSORT_STACK_SIZE - 2, 1001 );
+
+      mpop ( lo, hi, d );
+      if (hi - lo < MAIN_QSORT_SMALL_THRESH || 
+          d > MAIN_QSORT_DEPTH_THRESH) {
+         mainSimpleSort ( ptr, block, quadrant, nblock, lo, hi, d, budget );
+         if (*budget < 0) return;
+         continue;
+      }
+
+      med = (Int32) 
+            mmed3 ( block[ptr[ lo         ]+d],
+                    block[ptr[ hi         ]+d],
+                    block[ptr[ (lo+hi)>>1 ]+d] );
+
+      unLo = ltLo = lo;
+      unHi = gtHi = hi;
+
+      while (True) {
+         while (True) {
+            if (unLo > unHi) break;
+            n = ((Int32)block[ptr[unLo]+d]) - med;
+            if (n == 0) { 
+               mswap(ptr[unLo], ptr[ltLo]); 
+               ltLo++; unLo++; continue; 
+            };
+            if (n >  0) break;
+            unLo++;
+         }
+         while (True) {
+            if (unLo > unHi) break;
+            n = ((Int32)block[ptr[unHi]+d]) - med;
+            if (n == 0) { 
+               mswap(ptr[unHi], ptr[gtHi]); 
+               gtHi--; unHi--; continue; 
+            };
+            if (n <  0) break;
+            unHi--;
+         }
+         if (unLo > unHi) break;
+         mswap(ptr[unLo], ptr[unHi]); unLo++; unHi--;
+      }
+
+      AssertD ( unHi == unLo-1, "mainQSort3(2)" );
+
+      if (gtHi < ltLo) {
+         mpush(lo, hi, d+1 );
+         continue;
+      }
+
+      n = mmin(ltLo-lo, unLo-ltLo); mvswap(lo, unLo-n, n);
+      m = mmin(hi-gtHi, gtHi-unHi); mvswap(unLo, hi-m+1, m);
+
+      n = lo + unLo - ltLo - 1;
+      m = hi - (gtHi - unHi) + 1;
+
+      nextLo[0] = lo;  nextHi[0] = n;   nextD[0] = d;
+      nextLo[1] = m;   nextHi[1] = hi;  nextD[1] = d;
+      nextLo[2] = n+1; nextHi[2] = m-1; nextD[2] = d+1;
+
+      if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);
+      if (mnextsize(1) < mnextsize(2)) mnextswap(1,2);
+      if (mnextsize(0) < mnextsize(1)) mnextswap(0,1);
+
+      AssertD (mnextsize(0) >= mnextsize(1), "mainQSort3(8)" );
+      AssertD (mnextsize(1) >= mnextsize(2), "mainQSort3(9)" );
+
+      mpush (nextLo[0], nextHi[0], nextD[0]);
+      mpush (nextLo[1], nextHi[1], nextD[1]);
+      mpush (nextLo[2], nextHi[2], nextD[2]);
+   }
+}
+
+#undef mswap
+#undef mvswap
+#undef mpush
+#undef mpop
+#undef mmin
+#undef mnextsize
+#undef mnextswap
+#undef MAIN_QSORT_SMALL_THRESH
+#undef MAIN_QSORT_DEPTH_THRESH
+#undef MAIN_QSORT_STACK_SIZE
+
+
+/*---------------------------------------------*/
+/* Pre:
+      nblock > N_OVERSHOOT
+      block32 exists for [0 .. nblock-1 +N_OVERSHOOT]
+      ((UChar*)block32) [0 .. nblock-1] holds block
+      ptr exists for [0 .. nblock-1]
+
+   Post:
+      ((UChar*)block32) [0 .. nblock-1] holds block
+      All other areas of block32 destroyed
+      ftab [0 .. 65536 ] destroyed
+      ptr [0 .. nblock-1] holds sorted order
+      if (*budget < 0), sorting was abandoned
+*/
+
+#define BIGFREQ(b) (ftab[((b)+1) << 8] - ftab[(b) << 8])
+#define SETMASK (1 << 21)
+#define CLEARMASK (~(SETMASK))
+
+static
+void mainSort ( UInt32* ptr, 
+                UChar*  block,
+                UInt16* quadrant, 
+                UInt32* ftab,
+                Int32   nblock,
+                Int32   verb,
+                Int32*  budget )
+{
+   Int32  i, j, k, ss, sb;
+   Int32  runningOrder[256];
+   Bool   bigDone[256];
+   Int32  copyStart[256];
+   Int32  copyEnd  [256];
+   UChar  c1;
+   Int32  numQSorted;
+   UInt16 s;
+   if (verb >= 4) VPrintf0 ( "        main sort initialise ...\n" );
+
+   /*-- set up the 2-byte frequency table --*/
+   for (i = 65536; i >= 0; i--) ftab[i] = 0;
+
+   j = block[0] << 8;
+   i = nblock-1;
+   for (; i >= 3; i -= 4) {
+      quadrant[i] = 0;
+      j = (j >> 8) | ( ((UInt16)block[i]) << 8);
+      ftab[j]++;
+      quadrant[i-1] = 0;
+      j = (j >> 8) | ( ((UInt16)block[i-1]) << 8);
+      ftab[j]++;
+      quadrant[i-2] = 0;
+      j = (j >> 8) | ( ((UInt16)block[i-2]) << 8);
+      ftab[j]++;
+      quadrant[i-3] = 0;
+      j = (j >> 8) | ( ((UInt16)block[i-3]) << 8);
+      ftab[j]++;
+   }
+   for (; i >= 0; i--) {
+      quadrant[i] = 0;
+      j = (j >> 8) | ( ((UInt16)block[i]) << 8);
+      ftab[j]++;
+   }
+
+   /*-- (emphasises close relationship of block & quadrant) --*/
+   for (i = 0; i < BZ_N_OVERSHOOT; i++) {
+      block   [nblock+i] = block[i];
+      quadrant[nblock+i] = 0;
+   }
+
+   if (verb >= 4) VPrintf0 ( "        bucket sorting ...\n" );
+
+   /*-- Complete the initial radix sort --*/
+   for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1];
+
+   s = block[0] << 8;
+   i = nblock-1;
+   for (; i >= 3; i -= 4) {
+      s = (s >> 8) | (block[i] << 8);
+      j = ftab[s] -1;
+      ftab[s] = j;
+      ptr[j] = i;
+      s = (s >> 8) | (block[i-1] << 8);
+      j = ftab[s] -1;
+      ftab[s] = j;
+      ptr[j] = i-1;
+      s = (s >> 8) | (block[i-2] << 8);
+      j = ftab[s] -1;
+      ftab[s] = j;
+      ptr[j] = i-2;
+      s = (s >> 8) | (block[i-3] << 8);
+      j = ftab[s] -1;
+      ftab[s] = j;
+      ptr[j] = i-3;
+   }
+   for (; i >= 0; i--) {
+      s = (s >> 8) | (block[i] << 8);
+      j = ftab[s] -1;
+      ftab[s] = j;
+      ptr[j] = i;
+   }
+
+   /*--
+      Now ftab contains the first loc of every small bucket.
+      Calculate the running order, from smallest to largest
+      big bucket.
+   --*/
+   for (i = 0; i <= 255; i++) {
+      bigDone     [i] = False;
+      runningOrder[i] = i;
+   }
+
+   {
+      Int32 vv;
+      Int32 h = 1;
+      do h = 3 * h + 1; while (h <= 256);
+      do {
+         h = h / 3;
+         for (i = h; i <= 255; i++) {
+            vv = runningOrder[i];
+            j = i;
+            while ( BIGFREQ(runningOrder[j-h]) > BIGFREQ(vv) ) {
+               runningOrder[j] = runningOrder[j-h];
+               j = j - h;
+               if (j <= (h - 1)) goto zero;
+            }
+            zero:
+            runningOrder[j] = vv;
+         }
+      } while (h != 1);
+   }
+
+   /*--
+      The main sorting loop.
+   --*/
+
+   numQSorted = 0;
+
+   for (i = 0; i <= 255; i++) {
+
+      /*--
+         Process big buckets, starting with the least full.
+         Basically this is a 3-step process in which we call
+         mainQSort3 to sort the small buckets [ss, j], but
+         also make a big effort to avoid the calls if we can.
+      --*/
+      ss = runningOrder[i];
+
+      /*--
+         Step 1:
+         Complete the big bucket [ss] by quicksorting
+         any unsorted small buckets [ss, j], for j != ss.  
+         Hopefully previous pointer-scanning phases have already
+         completed many of the small buckets [ss, j], so
+         we don't have to sort them at all.
+      --*/
+      for (j = 0; j <= 255; j++) {
+         if (j != ss) {
+            sb = (ss << 8) + j;
+            if ( ! (ftab[sb] & SETMASK) ) {
+               Int32 lo = ftab[sb]   & CLEARMASK;
+               Int32 hi = (ftab[sb+1] & CLEARMASK) - 1;
+               if (hi > lo) {
+                  if (verb >= 4)
+                     VPrintf4 ( "        qsort [0x%x, 0x%x]   "
+                                "done %d   this %d\n",
+                                ss, j, numQSorted, hi - lo + 1 );
+                  mainQSort3 ( 
+                     ptr, block, quadrant, nblock, 
+                     lo, hi, BZ_N_RADIX, budget 
+                  );   
+                  numQSorted += (hi - lo + 1);
+                  if (*budget < 0) return;
+               }
+            }
+            ftab[sb] |= SETMASK;
+         }
+      }
+
+      AssertH ( !bigDone[ss], 1006 );
+
+      /*--
+         Step 2:
+         Now scan this big bucket [ss] so as to synthesise the
+         sorted order for small buckets [t, ss] for all t,
+         including, magically, the bucket [ss,ss] too.
+         This will avoid doing Real Work in subsequent Step 1's.
+      --*/
+      {
+         for (j = 0; j <= 255; j++) {
+            copyStart[j] =  ftab[(j << 8) + ss]     & CLEARMASK;
+            copyEnd  [j] = (ftab[(j << 8) + ss + 1] & CLEARMASK) - 1;
+         }
+         for (j = ftab[ss << 8] & CLEARMASK; j < copyStart[ss]; j++) {
+            k = ptr[j]-1; if (k < 0) k += nblock;
+            c1 = block[k];
+            if (!bigDone[c1])
+               ptr[ copyStart[c1]++ ] = k;
+         }
+         for (j = (ftab[(ss+1) << 8] & CLEARMASK) - 1; j > copyEnd[ss]; j--) {
+            k = ptr[j]-1; if (k < 0) k += nblock;
+            c1 = block[k];
+            if (!bigDone[c1]) 
+               ptr[ copyEnd[c1]-- ] = k;
+         }
+      }
+
+      AssertH ( (copyStart[ss]-1 == copyEnd[ss])
+                || 
+                /* Extremely rare case missing in bzip2-1.0.0 and 1.0.1.
+                   Necessity for this case is demonstrated by compressing 
+                   a sequence of approximately 48.5 million of character 
+                   251; 1.0.0/1.0.1 will then die here. */
+                (copyStart[ss] == 0 && copyEnd[ss] == nblock-1),
+                1007 )
+
+      for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= SETMASK;
+
+      /*--
+         Step 3:
+         The [ss] big bucket is now done.  Record this fact,
+         and update the quadrant descriptors.  Remember to
+         update quadrants in the overshoot area too, if
+         necessary.  The "if (i < 255)" test merely skips
+         this updating for the last bucket processed, since
+         updating for the last bucket is pointless.
+
+         The quadrant array provides a way to incrementally
+         cache sort orderings, as they appear, so as to 
+         make subsequent comparisons in fullGtU() complete
+         faster.  For repetitive blocks this makes a big
+         difference (but not big enough to be able to avoid
+         the fallback sorting mechanism, exponential radix sort).
+
+         The precise meaning is: at all times:
+
+            for 0 <= i < nblock and 0 <= j <= nblock
+
+            if block[i] != block[j], 
+
+               then the relative values of quadrant[i] and 
+                    quadrant[j] are meaningless.
+
+               else {
+                  if quadrant[i] < quadrant[j]
+                     then the string starting at i lexicographically
+                     precedes the string starting at j
+
+                  else if quadrant[i] > quadrant[j]
+                     then the string starting at j lexicographically
+                     precedes the string starting at i
+
+                  else
+                     the relative ordering of the strings starting
+                     at i and j has not yet been determined.
+               }
+      --*/
+      bigDone[ss] = True;
+
+      if (i < 255) {
+         Int32 bbStart  = ftab[ss << 8] & CLEARMASK;
+         Int32 bbSize   = (ftab[(ss+1) << 8] & CLEARMASK) - bbStart;
+         Int32 shifts   = 0;
+
+         while ((bbSize >> shifts) > 65534) shifts++;
+
+         for (j = bbSize-1; j >= 0; j--) {
+            Int32 a2update     = ptr[bbStart + j];
+            UInt16 qVal        = (UInt16)(j >> shifts);
+            quadrant[a2update] = qVal;
+            if (a2update < BZ_N_OVERSHOOT)
+               quadrant[a2update + nblock] = qVal;
+         }
+         AssertH ( ((bbSize-1) >> shifts) <= 65535, 1002 );
+      }
+
+   }
+
+   if (verb >= 4)
+      VPrintf3 ( "        %d pointers, %d sorted, %d scanned\n",
+                 nblock, numQSorted, nblock - numQSorted );
+}
+
+#undef BIGFREQ
+#undef SETMASK
+#undef CLEARMASK
+
+
+/*---------------------------------------------*/
+/* Pre:
+      nblock > 0
+      arr2 exists for [0 .. nblock-1 +N_OVERSHOOT]
+      ((UChar*)arr2)  [0 .. nblock-1] holds block
+      arr1 exists for [0 .. nblock-1]
+
+   Post:
+      ((UChar*)arr2) [0 .. nblock-1] holds block
+      All other areas of block destroyed
+      ftab [ 0 .. 65536 ] destroyed
+      arr1 [0 .. nblock-1] holds sorted order
+*/
+void BZ2_blockSort ( EState* s )
+{
+   UInt32* ptr    = s->ptr; 
+   UChar*  block  = s->block;
+   UInt32* ftab   = s->ftab;
+   Int32   nblock = s->nblock;
+   Int32   verb   = s->verbosity;
+   Int32   wfact  = s->workFactor;
+   UInt16* quadrant;
+   Int32   budget;
+   Int32   budgetInit;
+   Int32   i;
+
+   if (nblock < 10000) {
+      fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );
+   } else {
+      /* Calculate the location for quadrant, remembering to get
+         the alignment right.  Assumes that &(block[0]) is at least
+         2-byte aligned -- this should be ok since block is really
+         the first section of arr2.
+      */
+      i = nblock+BZ_N_OVERSHOOT;
+      if (i & 1) i++;
+      quadrant = (UInt16*)(&(block[i]));
+
+      /* (wfact-1) / 3 puts the default-factor-30
+         transition point at very roughly the same place as 
+         with v0.1 and v0.9.0.  
+         Not that it particularly matters any more, since the
+         resulting compressed stream is now the same regardless
+         of whether or not we use the main sort or fallback sort.
+      */
+      if (wfact < 1  ) wfact = 1;
+      if (wfact > 100) wfact = 100;
+      budgetInit = nblock * ((wfact-1) / 3);
+      budget = budgetInit;
+
+      mainSort ( ptr, block, quadrant, ftab, nblock, verb, &budget );
+      if (verb >= 3) 
+         VPrintf3 ( "      %d work, %d block, ratio %5.2f\n",
+                    budgetInit - budget,
+                    nblock, 
+                    (float)(budgetInit - budget) /
+                    (float)(nblock==0 ? 1 : nblock) ); 
+      if (budget < 0) {
+         if (verb >= 2) 
+            VPrintf0 ( "    too repetitive; using fallback"
+                       " sorting algorithm\n" );
+         fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb );
+      }
+   }
+
+   s->origPtr = -1;
+   for (i = 0; i < s->nblock; i++)
+      if (ptr[i] == 0)
+         { s->origPtr = i; break; };
+
+   AssertH( s->origPtr != -1, 1003 );
+}
+
+
+/*-------------------------------------------------------------*/
+/*--- end                                       blocksort.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/libs/ext/bzip2/bzip2-1.0.6.tar.gz b/libs/ext/bzip2/bzip2-1.0.6.tar.gz
new file mode 100644
index 0000000..e47e903
Binary files /dev/null and b/libs/ext/bzip2/bzip2-1.0.6.tar.gz differ
diff --git a/libs/ext/bzip2/bzip2.c b/libs/ext/bzip2/bzip2.c
new file mode 100644
index 0000000..6de9d1d
--- /dev/null
+++ b/libs/ext/bzip2/bzip2.c
@@ -0,0 +1,2034 @@
+
+/*-----------------------------------------------------------*/
+/*--- A block-sorting, lossless compressor        bzip2.c ---*/
+/*-----------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
+   README file.
+
+   This program is released under the terms of the license contained
+   in the file LICENSE.
+   ------------------------------------------------------------------ */
+
+
+/* Place a 1 beside your platform, and 0 elsewhere.
+   Generic 32-bit Unix.
+   Also works on 64-bit Unix boxes.
+   This is the default.
+*/
+#define BZ_UNIX      1
+
+/*--
+  Win32, as seen by Jacob Navia's excellent
+  port of (Chris Fraser & David Hanson)'s excellent
+  lcc compiler.  Or with MS Visual C.
+  This is selected automatically if compiled by a compiler which
+  defines _WIN32, not including the Cygwin GCC.
+--*/
+#define BZ_LCCWIN32  0
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#undef  BZ_LCCWIN32
+#define BZ_LCCWIN32 1
+#undef  BZ_UNIX
+#define BZ_UNIX 0
+#endif
+
+
+/*---------------------------------------------*/
+/*--
+  Some stuff for all platforms.
+--*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <signal.h>
+#include <math.h>
+#include <errno.h>
+#include <ctype.h>
+#include "bzlib.h"
+
+#define ERROR_IF_EOF(i)       { if ((i) == EOF)  ioError(); }
+#define ERROR_IF_NOT_ZERO(i)  { if ((i) != 0)    ioError(); }
+#define ERROR_IF_MINUS_ONE(i) { if ((i) == (-1)) ioError(); }
+
+
+/*---------------------------------------------*/
+/*--
+   Platform-specific stuff.
+--*/
+
+#if BZ_UNIX
+#   include <fcntl.h>
+#   include <sys/types.h>
+#   include <utime.h>
+#   include <unistd.h>
+#   include <sys/stat.h>
+#   include <sys/times.h>
+
+#   define PATH_SEP    '/'
+#   define MY_LSTAT    lstat
+#   define MY_STAT     stat
+#   define MY_S_ISREG  S_ISREG
+#   define MY_S_ISDIR  S_ISDIR
+
+#   define APPEND_FILESPEC(root, name) \
+      root=snocString((root), (name))
+
+#   define APPEND_FLAG(root, name) \
+      root=snocString((root), (name))
+
+#   define SET_BINARY_MODE(fd) /**/
+
+#   ifdef __GNUC__
+#      define NORETURN __attribute__ ((noreturn))
+#   else
+#      define NORETURN /**/
+#   endif
+
+#   ifdef __DJGPP__
+#     include <io.h>
+#     include <fcntl.h>
+#     undef MY_LSTAT
+#     undef MY_STAT
+#     define MY_LSTAT stat
+#     define MY_STAT stat
+#     undef SET_BINARY_MODE
+#     define SET_BINARY_MODE(fd)                        \
+        do {                                            \
+           int retVal = setmode ( fileno ( fd ),        \
+                                  O_BINARY );           \
+           ERROR_IF_MINUS_ONE ( retVal );               \
+        } while ( 0 )
+#   endif
+
+#   ifdef __CYGWIN__
+#     include <io.h>
+#     include <fcntl.h>
+#     undef SET_BINARY_MODE
+#     define SET_BINARY_MODE(fd)                        \
+        do {                                            \
+           int retVal = setmode ( fileno ( fd ),        \
+                                  O_BINARY );           \
+           ERROR_IF_MINUS_ONE ( retVal );               \
+        } while ( 0 )
+#   endif
+#endif /* BZ_UNIX */
+
+
+
+#if BZ_LCCWIN32
+#   include <io.h>
+#   include <fcntl.h>
+#   include <sys\stat.h>
+
+#   define NORETURN       /**/
+#   define PATH_SEP       '\\'
+#   define MY_LSTAT       _stat
+#   define MY_STAT        _stat
+#   define MY_S_ISREG(x)  ((x) & _S_IFREG)
+#   define MY_S_ISDIR(x)  ((x) & _S_IFDIR)
+
+#   define APPEND_FLAG(root, name) \
+      root=snocString((root), (name))
+
+#   define APPEND_FILESPEC(root, name)                \
+      root = snocString ((root), (name))
+
+#   define SET_BINARY_MODE(fd)                        \
+      do {                                            \
+         int retVal = setmode ( fileno ( fd ),        \
+                                O_BINARY );           \
+         ERROR_IF_MINUS_ONE ( retVal );               \
+      } while ( 0 )
+
+#endif /* BZ_LCCWIN32 */
+
+
+/*---------------------------------------------*/
+/*--
+  Some more stuff for all platforms :-)
+--*/
+
+typedef char            Char;
+typedef unsigned char   Bool;
+typedef unsigned char   UChar;
+typedef int             Int32;
+typedef unsigned int    UInt32;
+typedef short           Int16;
+typedef unsigned short  UInt16;
+                                       
+#define True  ((Bool)1)
+#define False ((Bool)0)
+
+/*--
+  IntNative is your platform's `native' int size.
+  Only here to avoid probs with 64-bit platforms.
+--*/
+typedef int IntNative;
+
+
+/*---------------------------------------------------*/
+/*--- Misc (file handling) data decls             ---*/
+/*---------------------------------------------------*/
+
+Int32   verbosity;
+Bool    keepInputFiles, smallMode, deleteOutputOnInterrupt;
+Bool    forceOverwrite, testFailsExist, unzFailsExist, noisy;
+Int32   numFileNames, numFilesProcessed, blockSize100k;
+Int32   exitValue;
+
+/*-- source modes; F==file, I==stdin, O==stdout --*/
+#define SM_I2O           1
+#define SM_F2O           2
+#define SM_F2F           3
+
+/*-- operation modes --*/
+#define OM_Z             1
+#define OM_UNZ           2
+#define OM_TEST          3
+
+Int32   opMode;
+Int32   srcMode;
+
+#define FILE_NAME_LEN 1034
+
+Int32   longestFileName;
+Char    inName [FILE_NAME_LEN];
+Char    outName[FILE_NAME_LEN];
+Char    tmpName[FILE_NAME_LEN];
+Char    *progName;
+Char    progNameReally[FILE_NAME_LEN];
+FILE    *outputHandleJustInCase;
+Int32   workFactor;
+
+static void    panic                 ( const Char* ) NORETURN;
+static void    ioError               ( void )        NORETURN;
+static void    outOfMemory           ( void )        NORETURN;
+static void    configError           ( void )        NORETURN;
+static void    crcError              ( void )        NORETURN;
+static void    cleanUpAndFail        ( Int32 )       NORETURN;
+static void    compressedStreamEOF   ( void )        NORETURN;
+
+static void    copyFileName ( Char*, Char* );
+static void*   myMalloc     ( Int32 );
+static void    applySavedFileAttrToOutputFile ( IntNative fd );
+
+
+
+/*---------------------------------------------------*/
+/*--- An implementation of 64-bit ints.  Sigh.    ---*/
+/*--- Roll on widespread deployment of ANSI C9X ! ---*/
+/*---------------------------------------------------*/
+
+typedef
+   struct { UChar b[8]; } 
+   UInt64;
+
+
+static
+void uInt64_from_UInt32s ( UInt64* n, UInt32 lo32, UInt32 hi32 )
+{
+   n->b[7] = (UChar)((hi32 >> 24) & 0xFF);
+   n->b[6] = (UChar)((hi32 >> 16) & 0xFF);
+   n->b[5] = (UChar)((hi32 >> 8)  & 0xFF);
+   n->b[4] = (UChar) (hi32        & 0xFF);
+   n->b[3] = (UChar)((lo32 >> 24) & 0xFF);
+   n->b[2] = (UChar)((lo32 >> 16) & 0xFF);
+   n->b[1] = (UChar)((lo32 >> 8)  & 0xFF);
+   n->b[0] = (UChar) (lo32        & 0xFF);
+}
+
+
+static
+double uInt64_to_double ( UInt64* n )
+{
+   Int32  i;
+   double base = 1.0;
+   double sum  = 0.0;
+   for (i = 0; i < 8; i++) {
+      sum  += base * (double)(n->b[i]);
+      base *= 256.0;
+   }
+   return sum;
+}
+
+
+static
+Bool uInt64_isZero ( UInt64* n )
+{
+   Int32 i;
+   for (i = 0; i < 8; i++)
+      if (n->b[i] != 0) return 0;
+   return 1;
+}
+
+
+/* Divide *n by 10, and return the remainder.  */
+static 
+Int32 uInt64_qrm10 ( UInt64* n )
+{
+   UInt32 rem, tmp;
+   Int32  i;
+   rem = 0;
+   for (i = 7; i >= 0; i--) {
+      tmp = rem * 256 + n->b[i];
+      n->b[i] = tmp / 10;
+      rem = tmp % 10;
+   }
+   return rem;
+}
+
+
+/* ... and the Whole Entire Point of all this UInt64 stuff is
+   so that we can supply the following function.
+*/
+static
+void uInt64_toAscii ( char* outbuf, UInt64* n )
+{
+   Int32  i, q;
+   UChar  buf[32];
+   Int32  nBuf   = 0;
+   UInt64 n_copy = *n;
+   do {
+      q = uInt64_qrm10 ( &n_copy );
+      buf[nBuf] = q + '0';
+      nBuf++;
+   } while (!uInt64_isZero(&n_copy));
+   outbuf[nBuf] = 0;
+   for (i = 0; i < nBuf; i++) 
+      outbuf[i] = buf[nBuf-i-1];
+}
+
+
+/*---------------------------------------------------*/
+/*--- Processing of complete files and streams    ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------*/
+static 
+Bool myfeof ( FILE* f )
+{
+   Int32 c = fgetc ( f );
+   if (c == EOF) return True;
+   ungetc ( c, f );
+   return False;
+}
+
+
+/*---------------------------------------------*/
+static 
+void compressStream ( FILE *stream, FILE *zStream )
+{
+   BZFILE* bzf = NULL;
+   UChar   ibuf[5000];
+   Int32   nIbuf;
+   UInt32  nbytes_in_lo32, nbytes_in_hi32;
+   UInt32  nbytes_out_lo32, nbytes_out_hi32;
+   Int32   bzerr, bzerr_dummy, ret;
+
+   SET_BINARY_MODE(stream);
+   SET_BINARY_MODE(zStream);
+
+   if (ferror(stream)) goto errhandler_io;
+   if (ferror(zStream)) goto errhandler_io;
+
+   bzf = BZ2_bzWriteOpen ( &bzerr, zStream, 
+                           blockSize100k, verbosity, workFactor );   
+   if (bzerr != BZ_OK) goto errhandler;
+
+   if (verbosity >= 2) fprintf ( stderr, "\n" );
+
+   while (True) {
+
+      if (myfeof(stream)) break;
+      nIbuf = fread ( ibuf, sizeof(UChar), 5000, stream );
+      if (ferror(stream)) goto errhandler_io;
+      if (nIbuf > 0) BZ2_bzWrite ( &bzerr, bzf, (void*)ibuf, nIbuf );
+      if (bzerr != BZ_OK) goto errhandler;
+
+   }
+
+   BZ2_bzWriteClose64 ( &bzerr, bzf, 0, 
+                        &nbytes_in_lo32, &nbytes_in_hi32,
+                        &nbytes_out_lo32, &nbytes_out_hi32 );
+   if (bzerr != BZ_OK) goto errhandler;
+
+   if (ferror(zStream)) goto errhandler_io;
+   ret = fflush ( zStream );
+   if (ret == EOF) goto errhandler_io;
+   if (zStream != stdout) {
+      Int32 fd = fileno ( zStream );
+      if (fd < 0) goto errhandler_io;
+      applySavedFileAttrToOutputFile ( fd );
+      ret = fclose ( zStream );
+      outputHandleJustInCase = NULL;
+      if (ret == EOF) goto errhandler_io;
+   }
+   outputHandleJustInCase = NULL;
+   if (ferror(stream)) goto errhandler_io;
+   ret = fclose ( stream );
+   if (ret == EOF) goto errhandler_io;
+
+   if (verbosity >= 1) {
+      if (nbytes_in_lo32 == 0 && nbytes_in_hi32 == 0) {
+	 fprintf ( stderr, " no data compressed.\n");
+      } else {
+	 Char   buf_nin[32], buf_nout[32];
+	 UInt64 nbytes_in,   nbytes_out;
+	 double nbytes_in_d, nbytes_out_d;
+	 uInt64_from_UInt32s ( &nbytes_in, 
+			       nbytes_in_lo32, nbytes_in_hi32 );
+	 uInt64_from_UInt32s ( &nbytes_out, 
+			       nbytes_out_lo32, nbytes_out_hi32 );
+	 nbytes_in_d  = uInt64_to_double ( &nbytes_in );
+	 nbytes_out_d = uInt64_to_double ( &nbytes_out );
+	 uInt64_toAscii ( buf_nin, &nbytes_in );
+	 uInt64_toAscii ( buf_nout, &nbytes_out );
+	 fprintf ( stderr, "%6.3f:1, %6.3f bits/byte, "
+		   "%5.2f%% saved, %s in, %s out.\n",
+		   nbytes_in_d / nbytes_out_d,
+		   (8.0 * nbytes_out_d) / nbytes_in_d,
+		   100.0 * (1.0 - nbytes_out_d / nbytes_in_d),
+		   buf_nin,
+		   buf_nout
+		 );
+      }
+   }
+
+   return;
+
+   errhandler:
+   BZ2_bzWriteClose64 ( &bzerr_dummy, bzf, 1, 
+                        &nbytes_in_lo32, &nbytes_in_hi32,
+                        &nbytes_out_lo32, &nbytes_out_hi32 );
+   switch (bzerr) {
+      case BZ_CONFIG_ERROR:
+         configError(); break;
+      case BZ_MEM_ERROR:
+         outOfMemory (); break;
+      case BZ_IO_ERROR:
+         errhandler_io:
+         ioError(); break;
+      default:
+         panic ( "compress:unexpected error" );
+   }
+
+   panic ( "compress:end" );
+   /*notreached*/
+}
+
+
+
+/*---------------------------------------------*/
+static 
+Bool uncompressStream ( FILE *zStream, FILE *stream )
+{
+   BZFILE* bzf = NULL;
+   Int32   bzerr, bzerr_dummy, ret, nread, streamNo, i;
+   UChar   obuf[5000];
+   UChar   unused[BZ_MAX_UNUSED];
+   Int32   nUnused;
+   void*   unusedTmpV;
+   UChar*  unusedTmp;
+
+   nUnused = 0;
+   streamNo = 0;
+
+   SET_BINARY_MODE(stream);
+   SET_BINARY_MODE(zStream);
+
+   if (ferror(stream)) goto errhandler_io;
+   if (ferror(zStream)) goto errhandler_io;
+
+   while (True) {
+
+      bzf = BZ2_bzReadOpen ( 
+               &bzerr, zStream, verbosity, 
+               (int)smallMode, unused, nUnused
+            );
+      if (bzf == NULL || bzerr != BZ_OK) goto errhandler;
+      streamNo++;
+
+      while (bzerr == BZ_OK) {
+         nread = BZ2_bzRead ( &bzerr, bzf, obuf, 5000 );
+         if (bzerr == BZ_DATA_ERROR_MAGIC) goto trycat;
+         if ((bzerr == BZ_OK || bzerr == BZ_STREAM_END) && nread > 0)
+            fwrite ( obuf, sizeof(UChar), nread, stream );
+         if (ferror(stream)) goto errhandler_io;
+      }
+      if (bzerr != BZ_STREAM_END) goto errhandler;
+
+      BZ2_bzReadGetUnused ( &bzerr, bzf, &unusedTmpV, &nUnused );
+      if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" );
+
+      unusedTmp = (UChar*)unusedTmpV;
+      for (i = 0; i < nUnused; i++) unused[i] = unusedTmp[i];
+
+      BZ2_bzReadClose ( &bzerr, bzf );
+      if (bzerr != BZ_OK) panic ( "decompress:bzReadGetUnused" );
+
+      if (nUnused == 0 && myfeof(zStream)) break;
+   }
+
+   closeok:
+   if (ferror(zStream)) goto errhandler_io;
+   if (stream != stdout) {
+      Int32 fd = fileno ( stream );
+      if (fd < 0) goto errhandler_io;
+      applySavedFileAttrToOutputFile ( fd );
+   }
+   ret = fclose ( zStream );
+   if (ret == EOF) goto errhandler_io;
+
+   if (ferror(stream)) goto errhandler_io;
+   ret = fflush ( stream );
+   if (ret != 0) goto errhandler_io;
+   if (stream != stdout) {
+      ret = fclose ( stream );
+      outputHandleJustInCase = NULL;
+      if (ret == EOF) goto errhandler_io;
+   }
+   outputHandleJustInCase = NULL;
+   if (verbosity >= 2) fprintf ( stderr, "\n    " );
+   return True;
+
+   trycat: 
+   if (forceOverwrite) {
+      rewind(zStream);
+      while (True) {
+      	 if (myfeof(zStream)) break;
+      	 nread = fread ( obuf, sizeof(UChar), 5000, zStream );
+      	 if (ferror(zStream)) goto errhandler_io;
+      	 if (nread > 0) fwrite ( obuf, sizeof(UChar), nread, stream );
+      	 if (ferror(stream)) goto errhandler_io;
+      }
+      goto closeok;
+   }
+  
+   errhandler:
+   BZ2_bzReadClose ( &bzerr_dummy, bzf );
+   switch (bzerr) {
+      case BZ_CONFIG_ERROR:
+         configError(); break;
+      case BZ_IO_ERROR:
+         errhandler_io:
+         ioError(); break;
+      case BZ_DATA_ERROR:
+         crcError();
+      case BZ_MEM_ERROR:
+         outOfMemory();
+      case BZ_UNEXPECTED_EOF:
+         compressedStreamEOF();
+      case BZ_DATA_ERROR_MAGIC:
+         if (zStream != stdin) fclose(zStream);
+         if (stream != stdout) fclose(stream);
+         if (streamNo == 1) {
+            return False;
+         } else {
+            if (noisy)
+            fprintf ( stderr, 
+                      "\n%s: %s: trailing garbage after EOF ignored\n",
+                      progName, inName );
+            return True;       
+         }
+      default:
+         panic ( "decompress:unexpected error" );
+   }
+
+   panic ( "decompress:end" );
+   return True; /*notreached*/
+}
+
+
+/*---------------------------------------------*/
+static 
+Bool testStream ( FILE *zStream )
+{
+   BZFILE* bzf = NULL;
+   Int32   bzerr, bzerr_dummy, ret, nread, streamNo, i;
+   UChar   obuf[5000];
+   UChar   unused[BZ_MAX_UNUSED];
+   Int32   nUnused;
+   void*   unusedTmpV;
+   UChar*  unusedTmp;
+
+   nUnused = 0;
+   streamNo = 0;
+
+   SET_BINARY_MODE(zStream);
+   if (ferror(zStream)) goto errhandler_io;
+
+   while (True) {
+
+      bzf = BZ2_bzReadOpen ( 
+               &bzerr, zStream, verbosity, 
+               (int)smallMode, unused, nUnused
+            );
+      if (bzf == NULL || bzerr != BZ_OK) goto errhandler;
+      streamNo++;
+
+      while (bzerr == BZ_OK) {
+         nread = BZ2_bzRead ( &bzerr, bzf, obuf, 5000 );
+         if (bzerr == BZ_DATA_ERROR_MAGIC) goto errhandler;
+      }
+      if (bzerr != BZ_STREAM_END) goto errhandler;
+
+      BZ2_bzReadGetUnused ( &bzerr, bzf, &unusedTmpV, &nUnused );
+      if (bzerr != BZ_OK) panic ( "test:bzReadGetUnused" );
+
+      unusedTmp = (UChar*)unusedTmpV;
+      for (i = 0; i < nUnused; i++) unused[i] = unusedTmp[i];
+
+      BZ2_bzReadClose ( &bzerr, bzf );
+      if (bzerr != BZ_OK) panic ( "test:bzReadGetUnused" );
+      if (nUnused == 0 && myfeof(zStream)) break;
+
+   }
+
+   if (ferror(zStream)) goto errhandler_io;
+   ret = fclose ( zStream );
+   if (ret == EOF) goto errhandler_io;
+
+   if (verbosity >= 2) fprintf ( stderr, "\n    " );
+   return True;
+
+   errhandler:
+   BZ2_bzReadClose ( &bzerr_dummy, bzf );
+   if (verbosity == 0) 
+      fprintf ( stderr, "%s: %s: ", progName, inName );
+   switch (bzerr) {
+      case BZ_CONFIG_ERROR:
+         configError(); break;
+      case BZ_IO_ERROR:
+         errhandler_io:
+         ioError(); break;
+      case BZ_DATA_ERROR:
+         fprintf ( stderr,
+                   "data integrity (CRC) error in data\n" );
+         return False;
+      case BZ_MEM_ERROR:
+         outOfMemory();
+      case BZ_UNEXPECTED_EOF:
+         fprintf ( stderr,
+                   "file ends unexpectedly\n" );
+         return False;
+      case BZ_DATA_ERROR_MAGIC:
+         if (zStream != stdin) fclose(zStream);
+         if (streamNo == 1) {
+          fprintf ( stderr, 
+                    "bad magic number (file not created by bzip2)\n" );
+            return False;
+         } else {
+            if (noisy)
+            fprintf ( stderr, 
+                      "trailing garbage after EOF ignored\n" );
+            return True;       
+         }
+      default:
+         panic ( "test:unexpected error" );
+   }
+
+   panic ( "test:end" );
+   return True; /*notreached*/
+}
+
+
+/*---------------------------------------------------*/
+/*--- Error [non-] handling grunge                ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------*/
+static
+void setExit ( Int32 v )
+{
+   if (v > exitValue) exitValue = v;
+}
+
+
+/*---------------------------------------------*/
+static 
+void cadvise ( void )
+{
+   if (noisy)
+   fprintf (
+      stderr,
+      "\nIt is possible that the compressed file(s) have become corrupted.\n"
+        "You can use the -tvv option to test integrity of such files.\n\n"
+        "You can use the `bzip2recover' program to attempt to recover\n"
+        "data from undamaged sections of corrupted files.\n\n"
+    );
+}
+
+
+/*---------------------------------------------*/
+static 
+void showFileNames ( void )
+{
+   if (noisy)
+   fprintf (
+      stderr,
+      "\tInput file = %s, output file = %s\n",
+      inName, outName 
+   );
+}
+
+
+/*---------------------------------------------*/
+static 
+void cleanUpAndFail ( Int32 ec )
+{
+   IntNative      retVal;
+   struct MY_STAT statBuf;
+
+   if ( srcMode == SM_F2F 
+        && opMode != OM_TEST
+        && deleteOutputOnInterrupt ) {
+
+      /* Check whether input file still exists.  Delete output file
+         only if input exists to avoid loss of data.  Joerg Prante, 5
+         January 2002.  (JRS 06-Jan-2002: other changes in 1.0.2 mean
+         this is less likely to happen.  But to be ultra-paranoid, we
+         do the check anyway.)  */
+      retVal = MY_STAT ( inName, &statBuf );
+      if (retVal == 0) {
+         if (noisy)
+            fprintf ( stderr, 
+                      "%s: Deleting output file %s, if it exists.\n",
+                      progName, outName );
+         if (outputHandleJustInCase != NULL)
+            fclose ( outputHandleJustInCase );
+         retVal = remove ( outName );
+         if (retVal != 0)
+            fprintf ( stderr,
+                      "%s: WARNING: deletion of output file "
+                      "(apparently) failed.\n",
+                      progName );
+      } else {
+         fprintf ( stderr,
+                   "%s: WARNING: deletion of output file suppressed\n",
+                    progName );
+         fprintf ( stderr,
+                   "%s:    since input file no longer exists.  Output file\n",
+                   progName );
+         fprintf ( stderr,
+                   "%s:    `%s' may be incomplete.\n",
+                   progName, outName );
+         fprintf ( stderr, 
+                   "%s:    I suggest doing an integrity test (bzip2 -tv)"
+                   " of it.\n",
+                   progName );
+      }
+   }
+
+   if (noisy && numFileNames > 0 && numFilesProcessed < numFileNames) {
+      fprintf ( stderr, 
+                "%s: WARNING: some files have not been processed:\n"
+                "%s:    %d specified on command line, %d not processed yet.\n\n",
+                progName, progName,
+                numFileNames, numFileNames - numFilesProcessed );
+   }
+   setExit(ec);
+   exit(exitValue);
+}
+
+
+/*---------------------------------------------*/
+static 
+void panic ( const Char* s )
+{
+   fprintf ( stderr,
+             "\n%s: PANIC -- internal consistency error:\n"
+             "\t%s\n"
+             "\tThis is a BUG.  Please report it to me at:\n"
+             "\tjseward at bzip.org\n",
+             progName, s );
+   showFileNames();
+   cleanUpAndFail( 3 );
+}
+
+
+/*---------------------------------------------*/
+static 
+void crcError ( void )
+{
+   fprintf ( stderr,
+             "\n%s: Data integrity error when decompressing.\n",
+             progName );
+   showFileNames();
+   cadvise();
+   cleanUpAndFail( 2 );
+}
+
+
+/*---------------------------------------------*/
+static 
+void compressedStreamEOF ( void )
+{
+  if (noisy) {
+    fprintf ( stderr,
+	      "\n%s: Compressed file ends unexpectedly;\n\t"
+	      "perhaps it is corrupted?  *Possible* reason follows.\n",
+	      progName );
+    perror ( progName );
+    showFileNames();
+    cadvise();
+  }
+  cleanUpAndFail( 2 );
+}
+
+
+/*---------------------------------------------*/
+static 
+void ioError ( void )
+{
+   fprintf ( stderr,
+             "\n%s: I/O or other error, bailing out.  "
+             "Possible reason follows.\n",
+             progName );
+   perror ( progName );
+   showFileNames();
+   cleanUpAndFail( 1 );
+}
+
+
+/*---------------------------------------------*/
+static 
+void mySignalCatcher ( IntNative n )
+{
+   fprintf ( stderr,
+             "\n%s: Control-C or similar caught, quitting.\n",
+             progName );
+   cleanUpAndFail(1);
+}
+
+
+/*---------------------------------------------*/
+static 
+void mySIGSEGVorSIGBUScatcher ( IntNative n )
+{
+   if (opMode == OM_Z)
+      fprintf ( 
+      stderr,
+      "\n%s: Caught a SIGSEGV or SIGBUS whilst compressing.\n"
+      "\n"
+      "   Possible causes are (most likely first):\n"
+      "   (1) This computer has unreliable memory or cache hardware\n"
+      "       (a surprisingly common problem; try a different machine.)\n"
+      "   (2) A bug in the compiler used to create this executable\n"
+      "       (unlikely, if you didn't compile bzip2 yourself.)\n"
+      "   (3) A real bug in bzip2 -- I hope this should never be the case.\n"
+      "   The user's manual, Section 4.3, has more info on (1) and (2).\n"
+      "   \n"
+      "   If you suspect this is a bug in bzip2, or are unsure about (1)\n"
+      "   or (2), feel free to report it to me at: jseward at bzip.org.\n"
+      "   Section 4.3 of the user's manual describes the info a useful\n"
+      "   bug report should have.  If the manual is available on your\n"
+      "   system, please try and read it before mailing me.  If you don't\n"
+      "   have the manual or can't be bothered to read it, mail me anyway.\n"
+      "\n",
+      progName );
+      else
+      fprintf ( 
+      stderr,
+      "\n%s: Caught a SIGSEGV or SIGBUS whilst decompressing.\n"
+      "\n"
+      "   Possible causes are (most likely first):\n"
+      "   (1) The compressed data is corrupted, and bzip2's usual checks\n"
+      "       failed to detect this.  Try bzip2 -tvv my_file.bz2.\n"
+      "   (2) This computer has unreliable memory or cache hardware\n"
+      "       (a surprisingly common problem; try a different machine.)\n"
+      "   (3) A bug in the compiler used to create this executable\n"
+      "       (unlikely, if you didn't compile bzip2 yourself.)\n"
+      "   (4) A real bug in bzip2 -- I hope this should never be the case.\n"
+      "   The user's manual, Section 4.3, has more info on (2) and (3).\n"
+      "   \n"
+      "   If you suspect this is a bug in bzip2, or are unsure about (2)\n"
+      "   or (3), feel free to report it to me at: jseward at bzip.org.\n"
+      "   Section 4.3 of the user's manual describes the info a useful\n"
+      "   bug report should have.  If the manual is available on your\n"
+      "   system, please try and read it before mailing me.  If you don't\n"
+      "   have the manual or can't be bothered to read it, mail me anyway.\n"
+      "\n",
+      progName );
+
+   showFileNames();
+   if (opMode == OM_Z)
+      cleanUpAndFail( 3 ); else
+      { cadvise(); cleanUpAndFail( 2 ); }
+}
+
+
+/*---------------------------------------------*/
+static 
+void outOfMemory ( void )
+{
+   fprintf ( stderr,
+             "\n%s: couldn't allocate enough memory\n",
+             progName );
+   showFileNames();
+   cleanUpAndFail(1);
+}
+
+
+/*---------------------------------------------*/
+static 
+void configError ( void )
+{
+   fprintf ( stderr,
+             "bzip2: I'm not configured correctly for this platform!\n"
+             "\tI require Int32, Int16 and Char to have sizes\n"
+             "\tof 4, 2 and 1 bytes to run properly, and they don't.\n"
+             "\tProbably you can fix this by defining them correctly,\n"
+             "\tand recompiling.  Bye!\n" );
+   setExit(3);
+   exit(exitValue);
+}
+
+
+/*---------------------------------------------------*/
+/*--- The main driver machinery                   ---*/
+/*---------------------------------------------------*/
+
+/* All rather crufty.  The main problem is that input files
+   are stat()d multiple times before use.  This should be
+   cleaned up. 
+*/
+
+/*---------------------------------------------*/
+static 
+void pad ( Char *s )
+{
+   Int32 i;
+   if ( (Int32)strlen(s) >= longestFileName ) return;
+   for (i = 1; i <= longestFileName - (Int32)strlen(s); i++)
+      fprintf ( stderr, " " );
+}
+
+
+/*---------------------------------------------*/
+static 
+void copyFileName ( Char* to, Char* from ) 
+{
+   if ( strlen(from) > FILE_NAME_LEN-10 )  {
+      fprintf (
+         stderr,
+         "bzip2: file name\n`%s'\n"
+         "is suspiciously (more than %d chars) long.\n"
+         "Try using a reasonable file name instead.  Sorry! :-)\n",
+         from, FILE_NAME_LEN-10
+      );
+      setExit(1);
+      exit(exitValue);
+   }
+
+  strncpy(to,from,FILE_NAME_LEN-10);
+  to[FILE_NAME_LEN-10]='\0';
+}
+
+
+/*---------------------------------------------*/
+static 
+Bool fileExists ( Char* name )
+{
+   FILE *tmp   = fopen ( name, "rb" );
+   Bool exists = (tmp != NULL);
+   if (tmp != NULL) fclose ( tmp );
+   return exists;
+}
+
+
+/*---------------------------------------------*/
+/* Open an output file safely with O_EXCL and good permissions.
+   This avoids a race condition in versions < 1.0.2, in which
+   the file was first opened and then had its interim permissions
+   set safely.  We instead use open() to create the file with
+   the interim permissions required. (--- --- rw-).
+
+   For non-Unix platforms, if we are not worrying about
+   security issues, simple this simply behaves like fopen.
+*/
+static
+FILE* fopen_output_safely ( Char* name, const char* mode )
+{
+#  if BZ_UNIX
+   FILE*     fp;
+   IntNative fh;
+   fh = open(name, O_WRONLY|O_CREAT|O_EXCL, S_IWUSR|S_IRUSR);
+   if (fh == -1) return NULL;
+   fp = fdopen(fh, mode);
+   if (fp == NULL) close(fh);
+   return fp;
+#  else
+   return fopen(name, mode);
+#  endif
+}
+
+
+/*---------------------------------------------*/
+/*--
+  if in doubt, return True
+--*/
+static 
+Bool notAStandardFile ( Char* name )
+{
+   IntNative      i;
+   struct MY_STAT statBuf;
+
+   i = MY_LSTAT ( name, &statBuf );
+   if (i != 0) return True;
+   if (MY_S_ISREG(statBuf.st_mode)) return False;
+   return True;
+}
+
+
+/*---------------------------------------------*/
+/*--
+  rac 11/21/98 see if file has hard links to it
+--*/
+static 
+Int32 countHardLinks ( Char* name )
+{  
+   IntNative      i;
+   struct MY_STAT statBuf;
+
+   i = MY_LSTAT ( name, &statBuf );
+   if (i != 0) return 0;
+   return (statBuf.st_nlink - 1);
+}
+
+
+/*---------------------------------------------*/
+/* Copy modification date, access date, permissions and owner from the
+   source to destination file.  We have to copy this meta-info off
+   into fileMetaInfo before starting to compress / decompress it,
+   because doing it afterwards means we get the wrong access time.
+
+   To complicate matters, in compress() and decompress() below, the
+   sequence of tests preceding the call to saveInputFileMetaInfo()
+   involves calling fileExists(), which in turn establishes its result
+   by attempting to fopen() the file, and if successful, immediately
+   fclose()ing it again.  So we have to assume that the fopen() call
+   does not cause the access time field to be updated.
+
+   Reading of the man page for stat() (man 2 stat) on RedHat 7.2 seems
+   to imply that merely doing open() will not affect the access time.
+   Therefore we merely need to hope that the C library only does
+   open() as a result of fopen(), and not any kind of read()-ahead
+   cleverness.
+
+   It sounds pretty fragile to me.  Whether this carries across
+   robustly to arbitrary Unix-like platforms (or even works robustly
+   on this one, RedHat 7.2) is unknown to me.  Nevertheless ...  
+*/
+#if BZ_UNIX
+static 
+struct MY_STAT fileMetaInfo;
+#endif
+
+static 
+void saveInputFileMetaInfo ( Char *srcName )
+{
+#  if BZ_UNIX
+   IntNative retVal;
+   /* Note use of stat here, not lstat. */
+   retVal = MY_STAT( srcName, &fileMetaInfo );
+   ERROR_IF_NOT_ZERO ( retVal );
+#  endif
+}
+
+
+static 
+void applySavedTimeInfoToOutputFile ( Char *dstName )
+{
+#  if BZ_UNIX
+   IntNative      retVal;
+   struct utimbuf uTimBuf;
+
+   uTimBuf.actime = fileMetaInfo.st_atime;
+   uTimBuf.modtime = fileMetaInfo.st_mtime;
+
+   retVal = utime ( dstName, &uTimBuf );
+   ERROR_IF_NOT_ZERO ( retVal );
+#  endif
+}
+
+static 
+void applySavedFileAttrToOutputFile ( IntNative fd )
+{
+#  if BZ_UNIX
+   IntNative retVal;
+
+   retVal = fchmod ( fd, fileMetaInfo.st_mode );
+   ERROR_IF_NOT_ZERO ( retVal );
+
+   (void) fchown ( fd, fileMetaInfo.st_uid, fileMetaInfo.st_gid );
+   /* chown() will in many cases return with EPERM, which can
+      be safely ignored.
+   */
+#  endif
+}
+
+
+/*---------------------------------------------*/
+static 
+Bool containsDubiousChars ( Char* name )
+{
+#  if BZ_UNIX
+   /* On unix, files can contain any characters and the file expansion
+    * is performed by the shell.
+    */
+   return False;
+#  else /* ! BZ_UNIX */
+   /* On non-unix (Win* platforms), wildcard characters are not allowed in 
+    * filenames.
+    */
+   for (; *name != '\0'; name++)
+      if (*name == '?' || *name == '*') return True;
+   return False;
+#  endif /* BZ_UNIX */
+}
+
+
+/*---------------------------------------------*/
+#define BZ_N_SUFFIX_PAIRS 4
+
+const Char* zSuffix[BZ_N_SUFFIX_PAIRS] 
+   = { ".bz2", ".bz", ".tbz2", ".tbz" };
+const Char* unzSuffix[BZ_N_SUFFIX_PAIRS] 
+   = { "", "", ".tar", ".tar" };
+
+static 
+Bool hasSuffix ( Char* s, const Char* suffix )
+{
+   Int32 ns = strlen(s);
+   Int32 nx = strlen(suffix);
+   if (ns < nx) return False;
+   if (strcmp(s + ns - nx, suffix) == 0) return True;
+   return False;
+}
+
+static 
+Bool mapSuffix ( Char* name, 
+                 const Char* oldSuffix, 
+                 const Char* newSuffix )
+{
+   if (!hasSuffix(name,oldSuffix)) return False;
+   name[strlen(name)-strlen(oldSuffix)] = 0;
+   strcat ( name, newSuffix );
+   return True;
+}
+
+
+/*---------------------------------------------*/
+static 
+void compress ( Char *name )
+{
+   FILE  *inStr;
+   FILE  *outStr;
+   Int32 n, i;
+   struct MY_STAT statBuf;
+
+   deleteOutputOnInterrupt = False;
+
+   if (name == NULL && srcMode != SM_I2O)
+      panic ( "compress: bad modes\n" );
+
+   switch (srcMode) {
+      case SM_I2O: 
+         copyFileName ( inName, (Char*)"(stdin)" );
+         copyFileName ( outName, (Char*)"(stdout)" ); 
+         break;
+      case SM_F2F: 
+         copyFileName ( inName, name );
+         copyFileName ( outName, name );
+         strcat ( outName, ".bz2" ); 
+         break;
+      case SM_F2O: 
+         copyFileName ( inName, name );
+         copyFileName ( outName, (Char*)"(stdout)" ); 
+         break;
+   }
+
+   if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {
+      if (noisy)
+      fprintf ( stderr, "%s: There are no files matching `%s'.\n",
+                progName, inName );
+      setExit(1);
+      return;
+   }
+   if ( srcMode != SM_I2O && !fileExists ( inName ) ) {
+      fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
+                progName, inName, strerror(errno) );
+      setExit(1);
+      return;
+   }
+   for (i = 0; i < BZ_N_SUFFIX_PAIRS; i++) {
+      if (hasSuffix(inName, zSuffix[i])) {
+         if (noisy)
+         fprintf ( stderr, 
+                   "%s: Input file %s already has %s suffix.\n",
+                   progName, inName, zSuffix[i] );
+         setExit(1);
+         return;
+      }
+   }
+   if ( srcMode == SM_F2F || srcMode == SM_F2O ) {
+      MY_STAT(inName, &statBuf);
+      if ( MY_S_ISDIR(statBuf.st_mode) ) {
+         fprintf( stderr,
+                  "%s: Input file %s is a directory.\n",
+                  progName,inName);
+         setExit(1);
+         return;
+      }
+   }
+   if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) {
+      if (noisy)
+      fprintf ( stderr, "%s: Input file %s is not a normal file.\n",
+                progName, inName );
+      setExit(1);
+      return;
+   }
+   if ( srcMode == SM_F2F && fileExists ( outName ) ) {
+      if (forceOverwrite) {
+	 remove(outName);
+      } else {
+	 fprintf ( stderr, "%s: Output file %s already exists.\n",
+		   progName, outName );
+	 setExit(1);
+	 return;
+      }
+   }
+   if ( srcMode == SM_F2F && !forceOverwrite &&
+        (n=countHardLinks ( inName )) > 0) {
+      fprintf ( stderr, "%s: Input file %s has %d other link%s.\n",
+                progName, inName, n, n > 1 ? "s" : "" );
+      setExit(1);
+      return;
+   }
+
+   if ( srcMode == SM_F2F ) {
+      /* Save the file's meta-info before we open it.  Doing it later
+         means we mess up the access times. */
+      saveInputFileMetaInfo ( inName );
+   }
+
+   switch ( srcMode ) {
+
+      case SM_I2O:
+         inStr = stdin;
+         outStr = stdout;
+         if ( isatty ( fileno ( stdout ) ) ) {
+            fprintf ( stderr,
+                      "%s: I won't write compressed data to a terminal.\n",
+                      progName );
+            fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
+                              progName, progName );
+            setExit(1);
+            return;
+         };
+         break;
+
+      case SM_F2O:
+         inStr = fopen ( inName, "rb" );
+         outStr = stdout;
+         if ( isatty ( fileno ( stdout ) ) ) {
+            fprintf ( stderr,
+                      "%s: I won't write compressed data to a terminal.\n",
+                      progName );
+            fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
+                              progName, progName );
+            if ( inStr != NULL ) fclose ( inStr );
+            setExit(1);
+            return;
+         };
+         if ( inStr == NULL ) {
+            fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
+                      progName, inName, strerror(errno) );
+            setExit(1);
+            return;
+         };
+         break;
+
+      case SM_F2F:
+         inStr = fopen ( inName, "rb" );
+         outStr = fopen_output_safely ( outName, "wb" );
+         if ( outStr == NULL) {
+            fprintf ( stderr, "%s: Can't create output file %s: %s.\n",
+                      progName, outName, strerror(errno) );
+            if ( inStr != NULL ) fclose ( inStr );
+            setExit(1);
+            return;
+         }
+         if ( inStr == NULL ) {
+            fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
+                      progName, inName, strerror(errno) );
+            if ( outStr != NULL ) fclose ( outStr );
+            setExit(1);
+            return;
+         };
+         break;
+
+      default:
+         panic ( "compress: bad srcMode" );
+         break;
+   }
+
+   if (verbosity >= 1) {
+      fprintf ( stderr,  "  %s: ", inName );
+      pad ( inName );
+      fflush ( stderr );
+   }
+
+   /*--- Now the input and output handles are sane.  Do the Biz. ---*/
+   outputHandleJustInCase = outStr;
+   deleteOutputOnInterrupt = True;
+   compressStream ( inStr, outStr );
+   outputHandleJustInCase = NULL;
+
+   /*--- If there was an I/O error, we won't get here. ---*/
+   if ( srcMode == SM_F2F ) {
+      applySavedTimeInfoToOutputFile ( outName );
+      deleteOutputOnInterrupt = False;
+      if ( !keepInputFiles ) {
+         IntNative retVal = remove ( inName );
+         ERROR_IF_NOT_ZERO ( retVal );
+      }
+   }
+
+   deleteOutputOnInterrupt = False;
+}
+
+
+/*---------------------------------------------*/
+static 
+void uncompress ( Char *name )
+{
+   FILE  *inStr;
+   FILE  *outStr;
+   Int32 n, i;
+   Bool  magicNumberOK;
+   Bool  cantGuess;
+   struct MY_STAT statBuf;
+
+   deleteOutputOnInterrupt = False;
+
+   if (name == NULL && srcMode != SM_I2O)
+      panic ( "uncompress: bad modes\n" );
+
+   cantGuess = False;
+   switch (srcMode) {
+      case SM_I2O: 
+         copyFileName ( inName, (Char*)"(stdin)" );
+         copyFileName ( outName, (Char*)"(stdout)" ); 
+         break;
+      case SM_F2F: 
+         copyFileName ( inName, name );
+         copyFileName ( outName, name );
+         for (i = 0; i < BZ_N_SUFFIX_PAIRS; i++)
+            if (mapSuffix(outName,zSuffix[i],unzSuffix[i]))
+               goto zzz; 
+         cantGuess = True;
+         strcat ( outName, ".out" );
+         break;
+      case SM_F2O: 
+         copyFileName ( inName, name );
+         copyFileName ( outName, (Char*)"(stdout)" ); 
+         break;
+   }
+
+   zzz:
+   if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {
+      if (noisy)
+      fprintf ( stderr, "%s: There are no files matching `%s'.\n",
+                progName, inName );
+      setExit(1);
+      return;
+   }
+   if ( srcMode != SM_I2O && !fileExists ( inName ) ) {
+      fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
+                progName, inName, strerror(errno) );
+      setExit(1);
+      return;
+   }
+   if ( srcMode == SM_F2F || srcMode == SM_F2O ) {
+      MY_STAT(inName, &statBuf);
+      if ( MY_S_ISDIR(statBuf.st_mode) ) {
+         fprintf( stderr,
+                  "%s: Input file %s is a directory.\n",
+                  progName,inName);
+         setExit(1);
+         return;
+      }
+   }
+   if ( srcMode == SM_F2F && !forceOverwrite && notAStandardFile ( inName )) {
+      if (noisy)
+      fprintf ( stderr, "%s: Input file %s is not a normal file.\n",
+                progName, inName );
+      setExit(1);
+      return;
+   }
+   if ( /* srcMode == SM_F2F implied && */ cantGuess ) {
+      if (noisy)
+      fprintf ( stderr, 
+                "%s: Can't guess original name for %s -- using %s\n",
+                progName, inName, outName );
+      /* just a warning, no return */
+   }   
+   if ( srcMode == SM_F2F && fileExists ( outName ) ) {
+      if (forceOverwrite) {
+	remove(outName);
+      } else {
+        fprintf ( stderr, "%s: Output file %s already exists.\n",
+                  progName, outName );
+        setExit(1);
+        return;
+      }
+   }
+   if ( srcMode == SM_F2F && !forceOverwrite &&
+        (n=countHardLinks ( inName ) ) > 0) {
+      fprintf ( stderr, "%s: Input file %s has %d other link%s.\n",
+                progName, inName, n, n > 1 ? "s" : "" );
+      setExit(1);
+      return;
+   }
+
+   if ( srcMode == SM_F2F ) {
+      /* Save the file's meta-info before we open it.  Doing it later
+         means we mess up the access times. */
+      saveInputFileMetaInfo ( inName );
+   }
+
+   switch ( srcMode ) {
+
+      case SM_I2O:
+         inStr = stdin;
+         outStr = stdout;
+         if ( isatty ( fileno ( stdin ) ) ) {
+            fprintf ( stderr,
+                      "%s: I won't read compressed data from a terminal.\n",
+                      progName );
+            fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
+                              progName, progName );
+            setExit(1);
+            return;
+         };
+         break;
+
+      case SM_F2O:
+         inStr = fopen ( inName, "rb" );
+         outStr = stdout;
+         if ( inStr == NULL ) {
+            fprintf ( stderr, "%s: Can't open input file %s:%s.\n",
+                      progName, inName, strerror(errno) );
+            if ( inStr != NULL ) fclose ( inStr );
+            setExit(1);
+            return;
+         };
+         break;
+
+      case SM_F2F:
+         inStr = fopen ( inName, "rb" );
+         outStr = fopen_output_safely ( outName, "wb" );
+         if ( outStr == NULL) {
+            fprintf ( stderr, "%s: Can't create output file %s: %s.\n",
+                      progName, outName, strerror(errno) );
+            if ( inStr != NULL ) fclose ( inStr );
+            setExit(1);
+            return;
+         }
+         if ( inStr == NULL ) {
+            fprintf ( stderr, "%s: Can't open input file %s: %s.\n",
+                      progName, inName, strerror(errno) );
+            if ( outStr != NULL ) fclose ( outStr );
+            setExit(1);
+            return;
+         };
+         break;
+
+      default:
+         panic ( "uncompress: bad srcMode" );
+         break;
+   }
+
+   if (verbosity >= 1) {
+      fprintf ( stderr, "  %s: ", inName );
+      pad ( inName );
+      fflush ( stderr );
+   }
+
+   /*--- Now the input and output handles are sane.  Do the Biz. ---*/
+   outputHandleJustInCase = outStr;
+   deleteOutputOnInterrupt = True;
+   magicNumberOK = uncompressStream ( inStr, outStr );
+   outputHandleJustInCase = NULL;
+
+   /*--- If there was an I/O error, we won't get here. ---*/
+   if ( magicNumberOK ) {
+      if ( srcMode == SM_F2F ) {
+         applySavedTimeInfoToOutputFile ( outName );
+         deleteOutputOnInterrupt = False;
+         if ( !keepInputFiles ) {
+            IntNative retVal = remove ( inName );
+            ERROR_IF_NOT_ZERO ( retVal );
+         }
+      }
+   } else {
+      unzFailsExist = True;
+      deleteOutputOnInterrupt = False;
+      if ( srcMode == SM_F2F ) {
+         IntNative retVal = remove ( outName );
+         ERROR_IF_NOT_ZERO ( retVal );
+      }
+   }
+   deleteOutputOnInterrupt = False;
+
+   if ( magicNumberOK ) {
+      if (verbosity >= 1)
+         fprintf ( stderr, "done\n" );
+   } else {
+      setExit(2);
+      if (verbosity >= 1)
+         fprintf ( stderr, "not a bzip2 file.\n" ); else
+         fprintf ( stderr,
+                   "%s: %s is not a bzip2 file.\n",
+                   progName, inName );
+   }
+
+}
+
+
+/*---------------------------------------------*/
+static 
+void testf ( Char *name )
+{
+   FILE *inStr;
+   Bool allOK;
+   struct MY_STAT statBuf;
+
+   deleteOutputOnInterrupt = False;
+
+   if (name == NULL && srcMode != SM_I2O)
+      panic ( "testf: bad modes\n" );
+
+   copyFileName ( outName, (Char*)"(none)" );
+   switch (srcMode) {
+      case SM_I2O: copyFileName ( inName, (Char*)"(stdin)" ); break;
+      case SM_F2F: copyFileName ( inName, name ); break;
+      case SM_F2O: copyFileName ( inName, name ); break;
+   }
+
+   if ( srcMode != SM_I2O && containsDubiousChars ( inName ) ) {
+      if (noisy)
+      fprintf ( stderr, "%s: There are no files matching `%s'.\n",
+                progName, inName );
+      setExit(1);
+      return;
+   }
+   if ( srcMode != SM_I2O && !fileExists ( inName ) ) {
+      fprintf ( stderr, "%s: Can't open input %s: %s.\n",
+                progName, inName, strerror(errno) );
+      setExit(1);
+      return;
+   }
+   if ( srcMode != SM_I2O ) {
+      MY_STAT(inName, &statBuf);
+      if ( MY_S_ISDIR(statBuf.st_mode) ) {
+         fprintf( stderr,
+                  "%s: Input file %s is a directory.\n",
+                  progName,inName);
+         setExit(1);
+         return;
+      }
+   }
+
+   switch ( srcMode ) {
+
+      case SM_I2O:
+         if ( isatty ( fileno ( stdin ) ) ) {
+            fprintf ( stderr,
+                      "%s: I won't read compressed data from a terminal.\n",
+                      progName );
+            fprintf ( stderr, "%s: For help, type: `%s --help'.\n",
+                              progName, progName );
+            setExit(1);
+            return;
+         };
+         inStr = stdin;
+         break;
+
+      case SM_F2O: case SM_F2F:
+         inStr = fopen ( inName, "rb" );
+         if ( inStr == NULL ) {
+            fprintf ( stderr, "%s: Can't open input file %s:%s.\n",
+                      progName, inName, strerror(errno) );
+            setExit(1);
+            return;
+         };
+         break;
+
+      default:
+         panic ( "testf: bad srcMode" );
+         break;
+   }
+
+   if (verbosity >= 1) {
+      fprintf ( stderr, "  %s: ", inName );
+      pad ( inName );
+      fflush ( stderr );
+   }
+
+   /*--- Now the input handle is sane.  Do the Biz. ---*/
+   outputHandleJustInCase = NULL;
+   allOK = testStream ( inStr );
+
+   if (allOK && verbosity >= 1) fprintf ( stderr, "ok\n" );
+   if (!allOK) testFailsExist = True;
+}
+
+
+/*---------------------------------------------*/
+static 
+void license ( void )
+{
+   fprintf ( stderr,
+
+    "bzip2, a block-sorting file compressor.  "
+    "Version %s.\n"
+    "   \n"
+    "   Copyright (C) 1996-2010 by Julian Seward.\n"
+    "   \n"
+    "   This program is free software; you can redistribute it and/or modify\n"
+    "   it under the terms set out in the LICENSE file, which is included\n"
+    "   in the bzip2-1.0.6 source distribution.\n"
+    "   \n"
+    "   This program is distributed in the hope that it will be useful,\n"
+    "   but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+    "   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
+    "   LICENSE file for more details.\n"
+    "   \n",
+    BZ2_bzlibVersion()
+   );
+}
+
+
+/*---------------------------------------------*/
+static 
+void usage ( Char *fullProgName )
+{
+   fprintf (
+      stderr,
+      "bzip2, a block-sorting file compressor.  "
+      "Version %s.\n"
+      "\n   usage: %s [flags and input files in any order]\n"
+      "\n"
+      "   -h --help           print this message\n"
+      "   -d --decompress     force decompression\n"
+      "   -z --compress       force compression\n"
+      "   -k --keep           keep (don't delete) input files\n"
+      "   -f --force          overwrite existing output files\n"
+      "   -t --test           test compressed file integrity\n"
+      "   -c --stdout         output to standard out\n"
+      "   -q --quiet          suppress noncritical error messages\n"
+      "   -v --verbose        be verbose (a 2nd -v gives more)\n"
+      "   -L --license        display software version & license\n"
+      "   -V --version        display software version & license\n"
+      "   -s --small          use less memory (at most 2500k)\n"
+      "   -1 .. -9            set block size to 100k .. 900k\n"
+      "   --fast              alias for -1\n"
+      "   --best              alias for -9\n"
+      "\n"
+      "   If invoked as `bzip2', default action is to compress.\n"
+      "              as `bunzip2',  default action is to decompress.\n"
+      "              as `bzcat', default action is to decompress to stdout.\n"
+      "\n"
+      "   If no file names are given, bzip2 compresses or decompresses\n"
+      "   from standard input to standard output.  You can combine\n"
+      "   short flags, so `-v -4' means the same as -v4 or -4v, &c.\n"
+#     if BZ_UNIX
+      "\n"
+#     endif
+      ,
+
+      BZ2_bzlibVersion(),
+      fullProgName
+   );
+}
+
+
+/*---------------------------------------------*/
+static 
+void redundant ( Char* flag )
+{
+   fprintf ( 
+      stderr, 
+      "%s: %s is redundant in versions 0.9.5 and above\n",
+      progName, flag );
+}
+
+
+/*---------------------------------------------*/
+/*--
+  All the garbage from here to main() is purely to
+  implement a linked list of command-line arguments,
+  into which main() copies argv[1 .. argc-1].
+
+  The purpose of this exercise is to facilitate 
+  the expansion of wildcard characters * and ? in 
+  filenames for OSs which don't know how to do it
+  themselves, like MSDOS, Windows 95 and NT.
+
+  The actual Dirty Work is done by the platform-
+  specific macro APPEND_FILESPEC.
+--*/
+
+typedef
+   struct zzzz {
+      Char        *name;
+      struct zzzz *link;
+   }
+   Cell;
+
+
+/*---------------------------------------------*/
+static 
+void *myMalloc ( Int32 n )
+{
+   void* p;
+
+   p = malloc ( (size_t)n );
+   if (p == NULL) outOfMemory ();
+   return p;
+}
+
+
+/*---------------------------------------------*/
+static 
+Cell *mkCell ( void )
+{
+   Cell *c;
+
+   c = (Cell*) myMalloc ( sizeof ( Cell ) );
+   c->name = NULL;
+   c->link = NULL;
+   return c;
+}
+
+
+/*---------------------------------------------*/
+static 
+Cell *snocString ( Cell *root, Char *name )
+{
+   if (root == NULL) {
+      Cell *tmp = mkCell();
+      tmp->name = (Char*) myMalloc ( 5 + strlen(name) );
+      strcpy ( tmp->name, name );
+      return tmp;
+   } else {
+      Cell *tmp = root;
+      while (tmp->link != NULL) tmp = tmp->link;
+      tmp->link = snocString ( tmp->link, name );
+      return root;
+   }
+}
+
+
+/*---------------------------------------------*/
+static 
+void addFlagsFromEnvVar ( Cell** argList, Char* varName ) 
+{
+   Int32 i, j, k;
+   Char *envbase, *p;
+
+   envbase = getenv(varName);
+   if (envbase != NULL) {
+      p = envbase;
+      i = 0;
+      while (True) {
+         if (p[i] == 0) break;
+         p += i;
+         i = 0;
+         while (isspace((Int32)(p[0]))) p++;
+         while (p[i] != 0 && !isspace((Int32)(p[i]))) i++;
+         if (i > 0) {
+            k = i; if (k > FILE_NAME_LEN-10) k = FILE_NAME_LEN-10;
+            for (j = 0; j < k; j++) tmpName[j] = p[j];
+            tmpName[k] = 0;
+            APPEND_FLAG(*argList, tmpName);
+         }
+      }
+   }
+}
+
+
+/*---------------------------------------------*/
+#define ISFLAG(s) (strcmp(aa->name, (s))==0)
+
+IntNative main ( IntNative argc, Char *argv[] )
+{
+   Int32  i, j;
+   Char   *tmp;
+   Cell   *argList;
+   Cell   *aa;
+   Bool   decode;
+
+   /*-- Be really really really paranoid :-) --*/
+   if (sizeof(Int32) != 4 || sizeof(UInt32) != 4  ||
+       sizeof(Int16) != 2 || sizeof(UInt16) != 2  ||
+       sizeof(Char)  != 1 || sizeof(UChar)  != 1)
+      configError();
+
+   /*-- Initialise --*/
+   outputHandleJustInCase  = NULL;
+   smallMode               = False;
+   keepInputFiles          = False;
+   forceOverwrite          = False;
+   noisy                   = True;
+   verbosity               = 0;
+   blockSize100k           = 9;
+   testFailsExist          = False;
+   unzFailsExist           = False;
+   numFileNames            = 0;
+   numFilesProcessed       = 0;
+   workFactor              = 30;
+   deleteOutputOnInterrupt = False;
+   exitValue               = 0;
+   i = j = 0; /* avoid bogus warning from egcs-1.1.X */
+
+   /*-- Set up signal handlers for mem access errors --*/
+   signal (SIGSEGV, mySIGSEGVorSIGBUScatcher);
+#  if BZ_UNIX
+#  ifndef __DJGPP__
+   signal (SIGBUS,  mySIGSEGVorSIGBUScatcher);
+#  endif
+#  endif
+
+   copyFileName ( inName,  (Char*)"(none)" );
+   copyFileName ( outName, (Char*)"(none)" );
+
+   copyFileName ( progNameReally, argv[0] );
+   progName = &progNameReally[0];
+   for (tmp = &progNameReally[0]; *tmp != '\0'; tmp++)
+      if (*tmp == PATH_SEP) progName = tmp + 1;
+
+
+   /*-- Copy flags from env var BZIP2, and 
+        expand filename wildcards in arg list.
+   --*/
+   argList = NULL;
+   addFlagsFromEnvVar ( &argList,  (Char*)"BZIP2" );
+   addFlagsFromEnvVar ( &argList,  (Char*)"BZIP" );
+   for (i = 1; i <= argc-1; i++)
+      APPEND_FILESPEC(argList, argv[i]);
+
+
+   /*-- Find the length of the longest filename --*/
+   longestFileName = 7;
+   numFileNames    = 0;
+   decode          = True;
+   for (aa = argList; aa != NULL; aa = aa->link) {
+      if (ISFLAG("--")) { decode = False; continue; }
+      if (aa->name[0] == '-' && decode) continue;
+      numFileNames++;
+      if (longestFileName < (Int32)strlen(aa->name) )
+         longestFileName = (Int32)strlen(aa->name);
+   }
+
+
+   /*-- Determine source modes; flag handling may change this too. --*/
+   if (numFileNames == 0)
+      srcMode = SM_I2O; else srcMode = SM_F2F;
+
+
+   /*-- Determine what to do (compress/uncompress/test/cat). --*/
+   /*-- Note that subsequent flag handling may change this. --*/
+   opMode = OM_Z;
+
+   if ( (strstr ( progName, "unzip" ) != 0) ||
+        (strstr ( progName, "UNZIP" ) != 0) )
+      opMode = OM_UNZ;
+
+   if ( (strstr ( progName, "z2cat" ) != 0) ||
+        (strstr ( progName, "Z2CAT" ) != 0) ||
+        (strstr ( progName, "zcat" ) != 0)  ||
+        (strstr ( progName, "ZCAT" ) != 0) )  {
+      opMode = OM_UNZ;
+      srcMode = (numFileNames == 0) ? SM_I2O : SM_F2O;
+   }
+
+
+   /*-- Look at the flags. --*/
+   for (aa = argList; aa != NULL; aa = aa->link) {
+      if (ISFLAG("--")) break;
+      if (aa->name[0] == '-' && aa->name[1] != '-') {
+         for (j = 1; aa->name[j] != '\0'; j++) {
+            switch (aa->name[j]) {
+               case 'c': srcMode          = SM_F2O; break;
+               case 'd': opMode           = OM_UNZ; break;
+               case 'z': opMode           = OM_Z; break;
+               case 'f': forceOverwrite   = True; break;
+               case 't': opMode           = OM_TEST; break;
+               case 'k': keepInputFiles   = True; break;
+               case 's': smallMode        = True; break;
+               case 'q': noisy            = False; break;
+               case '1': blockSize100k    = 1; break;
+               case '2': blockSize100k    = 2; break;
+               case '3': blockSize100k    = 3; break;
+               case '4': blockSize100k    = 4; break;
+               case '5': blockSize100k    = 5; break;
+               case '6': blockSize100k    = 6; break;
+               case '7': blockSize100k    = 7; break;
+               case '8': blockSize100k    = 8; break;
+               case '9': blockSize100k    = 9; break;
+               case 'V':
+               case 'L': license();            break;
+               case 'v': verbosity++; break;
+               case 'h': usage ( progName );
+                         exit ( 0 );
+                         break;
+               default:  fprintf ( stderr, "%s: Bad flag `%s'\n",
+                                   progName, aa->name );
+                         usage ( progName );
+                         exit ( 1 );
+                         break;
+            }
+         }
+      }
+   }
+   
+   /*-- And again ... --*/
+   for (aa = argList; aa != NULL; aa = aa->link) {
+      if (ISFLAG("--")) break;
+      if (ISFLAG("--stdout"))            srcMode          = SM_F2O;  else
+      if (ISFLAG("--decompress"))        opMode           = OM_UNZ;  else
+      if (ISFLAG("--compress"))          opMode           = OM_Z;    else
+      if (ISFLAG("--force"))             forceOverwrite   = True;    else
+      if (ISFLAG("--test"))              opMode           = OM_TEST; else
+      if (ISFLAG("--keep"))              keepInputFiles   = True;    else
+      if (ISFLAG("--small"))             smallMode        = True;    else
+      if (ISFLAG("--quiet"))             noisy            = False;   else
+      if (ISFLAG("--version"))           license();                  else
+      if (ISFLAG("--license"))           license();                  else
+      if (ISFLAG("--exponential"))       workFactor = 1;             else 
+      if (ISFLAG("--repetitive-best"))   redundant(aa->name);        else
+      if (ISFLAG("--repetitive-fast"))   redundant(aa->name);        else
+      if (ISFLAG("--fast"))              blockSize100k = 1;          else
+      if (ISFLAG("--best"))              blockSize100k = 9;          else
+      if (ISFLAG("--verbose"))           verbosity++;                else
+      if (ISFLAG("--help"))              { usage ( progName ); exit ( 0 ); }
+         else
+         if (strncmp ( aa->name, "--", 2) == 0) {
+            fprintf ( stderr, "%s: Bad flag `%s'\n", progName, aa->name );
+            usage ( progName );
+            exit ( 1 );
+         }
+   }
+
+   if (verbosity > 4) verbosity = 4;
+   if (opMode == OM_Z && smallMode && blockSize100k > 2) 
+      blockSize100k = 2;
+
+   if (opMode == OM_TEST && srcMode == SM_F2O) {
+      fprintf ( stderr, "%s: -c and -t cannot be used together.\n",
+                progName );
+      exit ( 1 );
+   }
+
+   if (srcMode == SM_F2O && numFileNames == 0)
+      srcMode = SM_I2O;
+
+   if (opMode != OM_Z) blockSize100k = 0;
+
+   if (srcMode == SM_F2F) {
+      signal (SIGINT,  mySignalCatcher);
+      signal (SIGTERM, mySignalCatcher);
+#     if BZ_UNIX
+      signal (SIGHUP,  mySignalCatcher);
+#     endif
+   }
+
+   if (opMode == OM_Z) {
+     if (srcMode == SM_I2O) {
+        compress ( NULL );
+     } else {
+        decode = True;
+        for (aa = argList; aa != NULL; aa = aa->link) {
+           if (ISFLAG("--")) { decode = False; continue; }
+           if (aa->name[0] == '-' && decode) continue;
+           numFilesProcessed++;
+           compress ( aa->name );
+        }
+     }
+   } 
+   else
+
+   if (opMode == OM_UNZ) {
+      unzFailsExist = False;
+      if (srcMode == SM_I2O) {
+         uncompress ( NULL );
+      } else {
+         decode = True;
+         for (aa = argList; aa != NULL; aa = aa->link) {
+            if (ISFLAG("--")) { decode = False; continue; }
+            if (aa->name[0] == '-' && decode) continue;
+            numFilesProcessed++;
+            uncompress ( aa->name );
+         }      
+      }
+      if (unzFailsExist) { 
+         setExit(2); 
+         exit(exitValue);
+      }
+   } 
+
+   else {
+      testFailsExist = False;
+      if (srcMode == SM_I2O) {
+         testf ( NULL );
+      } else {
+         decode = True;
+         for (aa = argList; aa != NULL; aa = aa->link) {
+	    if (ISFLAG("--")) { decode = False; continue; }
+            if (aa->name[0] == '-' && decode) continue;
+            numFilesProcessed++;
+            testf ( aa->name );
+	 }
+      }
+      if (testFailsExist && noisy) {
+         fprintf ( stderr,
+           "\n"
+           "You can use the `bzip2recover' program to attempt to recover\n"
+           "data from undamaged sections of corrupted files.\n\n"
+         );
+         setExit(2);
+         exit(exitValue);
+      }
+   }
+
+   /* Free the argument list memory to mollify leak detectors 
+      (eg) Purify, Checker.  Serves no other useful purpose.
+   */
+   aa = argList;
+   while (aa != NULL) {
+      Cell* aa2 = aa->link;
+      if (aa->name != NULL) free(aa->name);
+      free(aa);
+      aa = aa2;
+   }
+
+   return exitValue;
+}
+
+
+/*-----------------------------------------------------------*/
+/*--- end                                         bzip2.c ---*/
+/*-----------------------------------------------------------*/
diff --git a/libs/ext/bzip2/bzip2recover.c b/libs/ext/bzip2/bzip2recover.c
new file mode 100644
index 0000000..f9de049
--- /dev/null
+++ b/libs/ext/bzip2/bzip2recover.c
@@ -0,0 +1,514 @@
+/*-----------------------------------------------------------*/
+/*--- Block recoverer program for bzip2                   ---*/
+/*---                                      bzip2recover.c ---*/
+/*-----------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
+   README file.
+
+   This program is released under the terms of the license contained
+   in the file LICENSE.
+   ------------------------------------------------------------------ */
+
+/* This program is a complete hack and should be rewritten properly.
+	 It isn't very complicated. */
+
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+/* This program records bit locations in the file to be recovered.
+   That means that if 64-bit ints are not supported, we will not
+   be able to recover .bz2 files over 512MB (2^32 bits) long.
+   On GNU supported platforms, we take advantage of the 64-bit
+   int support to circumvent this problem.  Ditto MSVC.
+
+   This change occurred in version 1.0.2; all prior versions have
+   the 512MB limitation.
+*/
+#ifdef __GNUC__
+   typedef  unsigned long long int  MaybeUInt64;
+#  define MaybeUInt64_FMT "%Lu"
+#else
+#ifdef _MSC_VER
+   typedef  unsigned __int64  MaybeUInt64;
+#  define MaybeUInt64_FMT "%I64u"
+#else
+   typedef  unsigned int   MaybeUInt64;
+#  define MaybeUInt64_FMT "%u"
+#endif
+#endif
+
+typedef  unsigned int   UInt32;
+typedef  int            Int32;
+typedef  unsigned char  UChar;
+typedef  char           Char;
+typedef  unsigned char  Bool;
+#define True    ((Bool)1)
+#define False   ((Bool)0)
+
+
+#define BZ_MAX_FILENAME 2000
+
+Char inFileName[BZ_MAX_FILENAME];
+Char outFileName[BZ_MAX_FILENAME];
+Char progName[BZ_MAX_FILENAME];
+
+MaybeUInt64 bytesOut = 0;
+MaybeUInt64 bytesIn  = 0;
+
+
+/*---------------------------------------------------*/
+/*--- Header bytes                                ---*/
+/*---------------------------------------------------*/
+
+#define BZ_HDR_B 0x42                         /* 'B' */
+#define BZ_HDR_Z 0x5a                         /* 'Z' */
+#define BZ_HDR_h 0x68                         /* 'h' */
+#define BZ_HDR_0 0x30                         /* '0' */
+ 
+
+/*---------------------------------------------------*/
+/*--- I/O errors                                  ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------*/
+static void readError ( void )
+{
+   fprintf ( stderr,
+             "%s: I/O error reading `%s', possible reason follows.\n",
+            progName, inFileName );
+   perror ( progName );
+   fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n",
+             progName );
+   exit ( 1 );
+}
+
+
+/*---------------------------------------------*/
+static void writeError ( void )
+{
+   fprintf ( stderr,
+             "%s: I/O error reading `%s', possible reason follows.\n",
+            progName, inFileName );
+   perror ( progName );
+   fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n",
+             progName );
+   exit ( 1 );
+}
+
+
+/*---------------------------------------------*/
+static void mallocFail ( Int32 n )
+{
+   fprintf ( stderr,
+             "%s: malloc failed on request for %d bytes.\n",
+            progName, n );
+   fprintf ( stderr, "%s: warning: output file(s) may be incomplete.\n",
+             progName );
+   exit ( 1 );
+}
+
+
+/*---------------------------------------------*/
+static void tooManyBlocks ( Int32 max_handled_blocks )
+{
+   fprintf ( stderr,
+             "%s: `%s' appears to contain more than %d blocks\n",
+            progName, inFileName, max_handled_blocks );
+   fprintf ( stderr,
+             "%s: and cannot be handled.  To fix, increase\n",
+             progName );
+   fprintf ( stderr, 
+             "%s: BZ_MAX_HANDLED_BLOCKS in bzip2recover.c, and recompile.\n",
+             progName );
+   exit ( 1 );
+}
+
+
+
+/*---------------------------------------------------*/
+/*--- Bit stream I/O                              ---*/
+/*---------------------------------------------------*/
+
+typedef
+   struct {
+      FILE*  handle;
+      Int32  buffer;
+      Int32  buffLive;
+      Char   mode;
+   }
+   BitStream;
+
+
+/*---------------------------------------------*/
+static BitStream* bsOpenReadStream ( FILE* stream )
+{
+   BitStream *bs = malloc ( sizeof(BitStream) );
+   if (bs == NULL) mallocFail ( sizeof(BitStream) );
+   bs->handle = stream;
+   bs->buffer = 0;
+   bs->buffLive = 0;
+   bs->mode = 'r';
+   return bs;
+}
+
+
+/*---------------------------------------------*/
+static BitStream* bsOpenWriteStream ( FILE* stream )
+{
+   BitStream *bs = malloc ( sizeof(BitStream) );
+   if (bs == NULL) mallocFail ( sizeof(BitStream) );
+   bs->handle = stream;
+   bs->buffer = 0;
+   bs->buffLive = 0;
+   bs->mode = 'w';
+   return bs;
+}
+
+
+/*---------------------------------------------*/
+static void bsPutBit ( BitStream* bs, Int32 bit )
+{
+   if (bs->buffLive == 8) {
+      Int32 retVal = putc ( (UChar) bs->buffer, bs->handle );
+      if (retVal == EOF) writeError();
+      bytesOut++;
+      bs->buffLive = 1;
+      bs->buffer = bit & 0x1;
+   } else {
+      bs->buffer = ( (bs->buffer << 1) | (bit & 0x1) );
+      bs->buffLive++;
+   };
+}
+
+
+/*---------------------------------------------*/
+/*--
+   Returns 0 or 1, or 2 to indicate EOF.
+--*/
+static Int32 bsGetBit ( BitStream* bs )
+{
+   if (bs->buffLive > 0) {
+      bs->buffLive --;
+      return ( ((bs->buffer) >> (bs->buffLive)) & 0x1 );
+   } else {
+      Int32 retVal = getc ( bs->handle );
+      if ( retVal == EOF ) {
+         if (errno != 0) readError();
+         return 2;
+      }
+      bs->buffLive = 7;
+      bs->buffer = retVal;
+      return ( ((bs->buffer) >> 7) & 0x1 );
+   }
+}
+
+
+/*---------------------------------------------*/
+static void bsClose ( BitStream* bs )
+{
+   Int32 retVal;
+
+   if ( bs->mode == 'w' ) {
+      while ( bs->buffLive < 8 ) {
+         bs->buffLive++;
+         bs->buffer <<= 1;
+      };
+      retVal = putc ( (UChar) (bs->buffer), bs->handle );
+      if (retVal == EOF) writeError();
+      bytesOut++;
+      retVal = fflush ( bs->handle );
+      if (retVal == EOF) writeError();
+   }
+   retVal = fclose ( bs->handle );
+   if (retVal == EOF) {
+      if (bs->mode == 'w') writeError(); else readError();
+   }
+   free ( bs );
+}
+
+
+/*---------------------------------------------*/
+static void bsPutUChar ( BitStream* bs, UChar c )
+{
+   Int32 i;
+   for (i = 7; i >= 0; i--)
+      bsPutBit ( bs, (((UInt32) c) >> i) & 0x1 );
+}
+
+
+/*---------------------------------------------*/
+static void bsPutUInt32 ( BitStream* bs, UInt32 c )
+{
+   Int32 i;
+
+   for (i = 31; i >= 0; i--)
+      bsPutBit ( bs, (c >> i) & 0x1 );
+}
+
+
+/*---------------------------------------------*/
+static Bool endsInBz2 ( Char* name )
+{
+   Int32 n = strlen ( name );
+   if (n <= 4) return False;
+   return
+      (name[n-4] == '.' &&
+       name[n-3] == 'b' &&
+       name[n-2] == 'z' &&
+       name[n-1] == '2');
+}
+
+
+/*---------------------------------------------------*/
+/*---                                             ---*/
+/*---------------------------------------------------*/
+
+/* This logic isn't really right when it comes to Cygwin. */
+#ifdef _WIN32
+#  define  BZ_SPLIT_SYM  '\\'  /* path splitter on Windows platform */
+#else
+#  define  BZ_SPLIT_SYM  '/'   /* path splitter on Unix platform */
+#endif
+
+#define BLOCK_HEADER_HI  0x00003141UL
+#define BLOCK_HEADER_LO  0x59265359UL
+
+#define BLOCK_ENDMARK_HI 0x00001772UL
+#define BLOCK_ENDMARK_LO 0x45385090UL
+
+/* Increase if necessary.  However, a .bz2 file with > 50000 blocks
+   would have an uncompressed size of at least 40GB, so the chances
+   are low you'll need to up this.
+*/
+#define BZ_MAX_HANDLED_BLOCKS 50000
+
+MaybeUInt64 bStart [BZ_MAX_HANDLED_BLOCKS];
+MaybeUInt64 bEnd   [BZ_MAX_HANDLED_BLOCKS];
+MaybeUInt64 rbStart[BZ_MAX_HANDLED_BLOCKS];
+MaybeUInt64 rbEnd  [BZ_MAX_HANDLED_BLOCKS];
+
+Int32 main ( Int32 argc, Char** argv )
+{
+   FILE*       inFile;
+   FILE*       outFile;
+   BitStream*  bsIn, *bsWr;
+   Int32       b, wrBlock, currBlock, rbCtr;
+   MaybeUInt64 bitsRead;
+
+   UInt32      buffHi, buffLo, blockCRC;
+   Char*       p;
+
+   strcpy ( progName, argv[0] );
+   inFileName[0] = outFileName[0] = 0;
+
+   fprintf ( stderr, 
+             "bzip2recover 1.0.6: extracts blocks from damaged .bz2 files.\n" );
+
+   if (argc != 2) {
+      fprintf ( stderr, "%s: usage is `%s damaged_file_name'.\n",
+                        progName, progName );
+      switch (sizeof(MaybeUInt64)) {
+         case 8:
+            fprintf(stderr, 
+                    "\trestrictions on size of recovered file: None\n");
+            break;
+         case 4:
+            fprintf(stderr, 
+                    "\trestrictions on size of recovered file: 512 MB\n");
+            fprintf(stderr, 
+                    "\tto circumvent, recompile with MaybeUInt64 as an\n"
+                    "\tunsigned 64-bit int.\n");
+            break;
+         default:
+            fprintf(stderr, 
+                    "\tsizeof(MaybeUInt64) is not 4 or 8 -- "
+                    "configuration error.\n");
+            break;
+      }
+      exit(1);
+   }
+
+   if (strlen(argv[1]) >= BZ_MAX_FILENAME-20) {
+      fprintf ( stderr, 
+                "%s: supplied filename is suspiciously (>= %d chars) long.  Bye!\n",
+                progName, (int)strlen(argv[1]) );
+      exit(1);
+   }
+
+   strcpy ( inFileName, argv[1] );
+
+   inFile = fopen ( inFileName, "rb" );
+   if (inFile == NULL) {
+      fprintf ( stderr, "%s: can't read `%s'\n", progName, inFileName );
+      exit(1);
+   }
+
+   bsIn = bsOpenReadStream ( inFile );
+   fprintf ( stderr, "%s: searching for block boundaries ...\n", progName );
+
+   bitsRead = 0;
+   buffHi = buffLo = 0;
+   currBlock = 0;
+   bStart[currBlock] = 0;
+
+   rbCtr = 0;
+
+   while (True) {
+      b = bsGetBit ( bsIn );
+      bitsRead++;
+      if (b == 2) {
+         if (bitsRead >= bStart[currBlock] &&
+            (bitsRead - bStart[currBlock]) >= 40) {
+            bEnd[currBlock] = bitsRead-1;
+            if (currBlock > 0)
+               fprintf ( stderr, "   block %d runs from " MaybeUInt64_FMT 
+                                 " to " MaybeUInt64_FMT " (incomplete)\n",
+                         currBlock,  bStart[currBlock], bEnd[currBlock] );
+         } else
+            currBlock--;
+         break;
+      }
+      buffHi = (buffHi << 1) | (buffLo >> 31);
+      buffLo = (buffLo << 1) | (b & 1);
+      if ( ( (buffHi & 0x0000ffff) == BLOCK_HEADER_HI 
+             && buffLo == BLOCK_HEADER_LO)
+           || 
+           ( (buffHi & 0x0000ffff) == BLOCK_ENDMARK_HI 
+             && buffLo == BLOCK_ENDMARK_LO)
+         ) {
+         if (bitsRead > 49) {
+            bEnd[currBlock] = bitsRead-49;
+         } else {
+            bEnd[currBlock] = 0;
+         }
+         if (currBlock > 0 &&
+	     (bEnd[currBlock] - bStart[currBlock]) >= 130) {
+            fprintf ( stderr, "   block %d runs from " MaybeUInt64_FMT 
+                              " to " MaybeUInt64_FMT "\n",
+                      rbCtr+1,  bStart[currBlock], bEnd[currBlock] );
+            rbStart[rbCtr] = bStart[currBlock];
+            rbEnd[rbCtr] = bEnd[currBlock];
+            rbCtr++;
+         }
+         if (currBlock >= BZ_MAX_HANDLED_BLOCKS)
+            tooManyBlocks(BZ_MAX_HANDLED_BLOCKS);
+         currBlock++;
+
+         bStart[currBlock] = bitsRead;
+      }
+   }
+
+   bsClose ( bsIn );
+
+   /*-- identified blocks run from 1 to rbCtr inclusive. --*/
+
+   if (rbCtr < 1) {
+      fprintf ( stderr,
+                "%s: sorry, I couldn't find any block boundaries.\n",
+                progName );
+      exit(1);
+   };
+
+   fprintf ( stderr, "%s: splitting into blocks\n", progName );
+
+   inFile = fopen ( inFileName, "rb" );
+   if (inFile == NULL) {
+      fprintf ( stderr, "%s: can't open `%s'\n", progName, inFileName );
+      exit(1);
+   }
+   bsIn = bsOpenReadStream ( inFile );
+
+   /*-- placate gcc's dataflow analyser --*/
+   blockCRC = 0; bsWr = 0;
+
+   bitsRead = 0;
+   outFile = NULL;
+   wrBlock = 0;
+   while (True) {
+      b = bsGetBit(bsIn);
+      if (b == 2) break;
+      buffHi = (buffHi << 1) | (buffLo >> 31);
+      buffLo = (buffLo << 1) | (b & 1);
+      if (bitsRead == 47+rbStart[wrBlock]) 
+         blockCRC = (buffHi << 16) | (buffLo >> 16);
+
+      if (outFile != NULL && bitsRead >= rbStart[wrBlock]
+                          && bitsRead <= rbEnd[wrBlock]) {
+         bsPutBit ( bsWr, b );
+      }
+
+      bitsRead++;
+
+      if (bitsRead == rbEnd[wrBlock]+1) {
+         if (outFile != NULL) {
+            bsPutUChar ( bsWr, 0x17 ); bsPutUChar ( bsWr, 0x72 );
+            bsPutUChar ( bsWr, 0x45 ); bsPutUChar ( bsWr, 0x38 );
+            bsPutUChar ( bsWr, 0x50 ); bsPutUChar ( bsWr, 0x90 );
+            bsPutUInt32 ( bsWr, blockCRC );
+            bsClose ( bsWr );
+         }
+         if (wrBlock >= rbCtr) break;
+         wrBlock++;
+      } else
+      if (bitsRead == rbStart[wrBlock]) {
+         /* Create the output file name, correctly handling leading paths. 
+            (31.10.2001 by Sergey E. Kusikov) */
+         Char* split;
+         Int32 ofs, k;
+         for (k = 0; k < BZ_MAX_FILENAME; k++) 
+            outFileName[k] = 0;
+         strcpy (outFileName, inFileName);
+         split = strrchr (outFileName, BZ_SPLIT_SYM);
+         if (split == NULL) {
+            split = outFileName;
+         } else {
+            ++split;
+	 }
+	 /* Now split points to the start of the basename. */
+         ofs  = split - outFileName;
+         sprintf (split, "rec%5d", wrBlock+1);
+         for (p = split; *p != 0; p++) if (*p == ' ') *p = '0';
+         strcat (outFileName, inFileName + ofs);
+
+         if ( !endsInBz2(outFileName)) strcat ( outFileName, ".bz2" );
+
+         fprintf ( stderr, "   writing block %d to `%s' ...\n",
+                           wrBlock+1, outFileName );
+
+         outFile = fopen ( outFileName, "wb" );
+         if (outFile == NULL) {
+            fprintf ( stderr, "%s: can't write `%s'\n",
+                      progName, outFileName );
+            exit(1);
+         }
+         bsWr = bsOpenWriteStream ( outFile );
+         bsPutUChar ( bsWr, BZ_HDR_B );    
+         bsPutUChar ( bsWr, BZ_HDR_Z );    
+         bsPutUChar ( bsWr, BZ_HDR_h );    
+         bsPutUChar ( bsWr, BZ_HDR_0 + 9 );
+         bsPutUChar ( bsWr, 0x31 ); bsPutUChar ( bsWr, 0x41 );
+         bsPutUChar ( bsWr, 0x59 ); bsPutUChar ( bsWr, 0x26 );
+         bsPutUChar ( bsWr, 0x53 ); bsPutUChar ( bsWr, 0x59 );
+      }
+   }
+
+   fprintf ( stderr, "%s: finished\n", progName );
+   return 0;
+}
+
+
+
+/*-----------------------------------------------------------*/
+/*--- end                                  bzip2recover.c ---*/
+/*-----------------------------------------------------------*/
diff --git a/libs/ext/bzip2/bzlib.c b/libs/ext/bzip2/bzlib.c
new file mode 100644
index 0000000..bd358a7
--- /dev/null
+++ b/libs/ext/bzip2/bzlib.c
@@ -0,0 +1,1572 @@
+
+/*-------------------------------------------------------------*/
+/*--- Library top-level functions.                          ---*/
+/*---                                               bzlib.c ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
+   README file.
+
+   This program is released under the terms of the license contained
+   in the file LICENSE.
+   ------------------------------------------------------------------ */
+
+/* CHANGES
+   0.9.0    -- original version.
+   0.9.0a/b -- no changes in this file.
+   0.9.0c   -- made zero-length BZ_FLUSH work correctly in bzCompress().
+     fixed bzWrite/bzRead to ignore zero-length requests.
+     fixed bzread to correctly handle read requests after EOF.
+     wrong parameter order in call to bzDecompressInit in
+     bzBuffToBuffDecompress.  Fixed.
+*/
+
+#include "bzlib_private.h"
+
+
+/*---------------------------------------------------*/
+/*--- Compression stuff                           ---*/
+/*---------------------------------------------------*/
+
+
+/*---------------------------------------------------*/
+#ifndef BZ_NO_STDIO
+void BZ2_bz__AssertH__fail ( int errcode )
+{
+   fprintf(stderr, 
+      "\n\nbzip2/libbzip2: internal error number %d.\n"
+      "This is a bug in bzip2/libbzip2, %s.\n"
+      "Please report it to me at: jseward at bzip.org.  If this happened\n"
+      "when you were using some program which uses libbzip2 as a\n"
+      "component, you should also report this bug to the author(s)\n"
+      "of that program.  Please make an effort to report this bug;\n"
+      "timely and accurate bug reports eventually lead to higher\n"
+      "quality software.  Thanks.  Julian Seward, 10 December 2007.\n\n",
+      errcode,
+      BZ2_bzlibVersion()
+   );
+
+   if (errcode == 1007) {
+   fprintf(stderr,
+      "\n*** A special note about internal error number 1007 ***\n"
+      "\n"
+      "Experience suggests that a common cause of i.e. 1007\n"
+      "is unreliable memory or other hardware.  The 1007 assertion\n"
+      "just happens to cross-check the results of huge numbers of\n"
+      "memory reads/writes, and so acts (unintendedly) as a stress\n"
+      "test of your memory system.\n"
+      "\n"
+      "I suggest the following: try compressing the file again,\n"
+      "possibly monitoring progress in detail with the -vv flag.\n"
+      "\n"
+      "* If the error cannot be reproduced, and/or happens at different\n"
+      "  points in compression, you may have a flaky memory system.\n"
+      "  Try a memory-test program.  I have used Memtest86\n"
+      "  (www.memtest86.com).  At the time of writing it is free (GPLd).\n"
+      "  Memtest86 tests memory much more thorougly than your BIOSs\n"
+      "  power-on test, and may find failures that the BIOS doesn't.\n"
+      "\n"
+      "* If the error can be repeatably reproduced, this is a bug in\n"
+      "  bzip2, and I would very much like to hear about it.  Please\n"
+      "  let me know, and, ideally, save a copy of the file causing the\n"
+      "  problem -- without which I will be unable to investigate it.\n"
+      "\n"
+   );
+   }
+
+   exit(3);
+}
+#endif
+
+
+/*---------------------------------------------------*/
+static
+int bz_config_ok ( void )
+{
+   if (sizeof(int)   != 4) return 0;
+   if (sizeof(short) != 2) return 0;
+   if (sizeof(char)  != 1) return 0;
+   return 1;
+}
+
+
+/*---------------------------------------------------*/
+static
+void* default_bzalloc ( void* opaque, Int32 items, Int32 size )
+{
+   void* v = malloc ( items * size );
+   return v;
+}
+
+static
+void default_bzfree ( void* opaque, void* addr )
+{
+   if (addr != NULL) free ( addr );
+}
+
+
+/*---------------------------------------------------*/
+static
+void prepare_new_block ( EState* s )
+{
+   Int32 i;
+   s->nblock = 0;
+   s->numZ = 0;
+   s->state_out_pos = 0;
+   BZ_INITIALISE_CRC ( s->blockCRC );
+   for (i = 0; i < 256; i++) s->inUse[i] = False;
+   s->blockNo++;
+}
+
+
+/*---------------------------------------------------*/
+static
+void init_RL ( EState* s )
+{
+   s->state_in_ch  = 256;
+   s->state_in_len = 0;
+}
+
+
+static
+Bool isempty_RL ( EState* s )
+{
+   if (s->state_in_ch < 256 && s->state_in_len > 0)
+      return False; else
+      return True;
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzCompressInit) 
+                    ( bz_stream* strm, 
+                     int        blockSize100k,
+                     int        verbosity,
+                     int        workFactor )
+{
+   Int32   n;
+   EState* s;
+
+   if (!bz_config_ok()) return BZ_CONFIG_ERROR;
+
+   if (strm == NULL || 
+       blockSize100k < 1 || blockSize100k > 9 ||
+       workFactor < 0 || workFactor > 250)
+     return BZ_PARAM_ERROR;
+
+   if (workFactor == 0) workFactor = 30;
+   if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;
+   if (strm->bzfree == NULL) strm->bzfree = default_bzfree;
+
+   s = BZALLOC( sizeof(EState) );
+   if (s == NULL) return BZ_MEM_ERROR;
+   s->strm = strm;
+
+   s->arr1 = NULL;
+   s->arr2 = NULL;
+   s->ftab = NULL;
+
+   n       = 100000 * blockSize100k;
+   s->arr1 = BZALLOC( n                  * sizeof(UInt32) );
+   s->arr2 = BZALLOC( (n+BZ_N_OVERSHOOT) * sizeof(UInt32) );
+   s->ftab = BZALLOC( 65537              * sizeof(UInt32) );
+
+   if (s->arr1 == NULL || s->arr2 == NULL || s->ftab == NULL) {
+      if (s->arr1 != NULL) BZFREE(s->arr1);
+      if (s->arr2 != NULL) BZFREE(s->arr2);
+      if (s->ftab != NULL) BZFREE(s->ftab);
+      if (s       != NULL) BZFREE(s);
+      return BZ_MEM_ERROR;
+   }
+
+   s->blockNo           = 0;
+   s->state             = BZ_S_INPUT;
+   s->mode              = BZ_M_RUNNING;
+   s->combinedCRC       = 0;
+   s->blockSize100k     = blockSize100k;
+   s->nblockMAX         = 100000 * blockSize100k - 19;
+   s->verbosity         = verbosity;
+   s->workFactor        = workFactor;
+
+   s->block             = (UChar*)s->arr2;
+   s->mtfv              = (UInt16*)s->arr1;
+   s->zbits             = NULL;
+   s->ptr               = (UInt32*)s->arr1;
+
+   strm->state          = s;
+   strm->total_in_lo32  = 0;
+   strm->total_in_hi32  = 0;
+   strm->total_out_lo32 = 0;
+   strm->total_out_hi32 = 0;
+   init_RL ( s );
+   prepare_new_block ( s );
+   return BZ_OK;
+}
+
+
+/*---------------------------------------------------*/
+static
+void add_pair_to_block ( EState* s )
+{
+   Int32 i;
+   UChar ch = (UChar)(s->state_in_ch);
+   for (i = 0; i < s->state_in_len; i++) {
+      BZ_UPDATE_CRC( s->blockCRC, ch );
+   }
+   s->inUse[s->state_in_ch] = True;
+   switch (s->state_in_len) {
+      case 1:
+         s->block[s->nblock] = (UChar)ch; s->nblock++;
+         break;
+      case 2:
+         s->block[s->nblock] = (UChar)ch; s->nblock++;
+         s->block[s->nblock] = (UChar)ch; s->nblock++;
+         break;
+      case 3:
+         s->block[s->nblock] = (UChar)ch; s->nblock++;
+         s->block[s->nblock] = (UChar)ch; s->nblock++;
+         s->block[s->nblock] = (UChar)ch; s->nblock++;
+         break;
+      default:
+         s->inUse[s->state_in_len-4] = True;
+         s->block[s->nblock] = (UChar)ch; s->nblock++;
+         s->block[s->nblock] = (UChar)ch; s->nblock++;
+         s->block[s->nblock] = (UChar)ch; s->nblock++;
+         s->block[s->nblock] = (UChar)ch; s->nblock++;
+         s->block[s->nblock] = ((UChar)(s->state_in_len-4));
+         s->nblock++;
+         break;
+   }
+}
+
+
+/*---------------------------------------------------*/
+static
+void flush_RL ( EState* s )
+{
+   if (s->state_in_ch < 256) add_pair_to_block ( s );
+   init_RL ( s );
+}
+
+
+/*---------------------------------------------------*/
+#define ADD_CHAR_TO_BLOCK(zs,zchh0)               \
+{                                                 \
+   UInt32 zchh = (UInt32)(zchh0);                 \
+   /*-- fast track the common case --*/           \
+   if (zchh != zs->state_in_ch &&                 \
+       zs->state_in_len == 1) {                   \
+      UChar ch = (UChar)(zs->state_in_ch);        \
+      BZ_UPDATE_CRC( zs->blockCRC, ch );          \
+      zs->inUse[zs->state_in_ch] = True;          \
+      zs->block[zs->nblock] = (UChar)ch;          \
+      zs->nblock++;                               \
+      zs->state_in_ch = zchh;                     \
+   }                                              \
+   else                                           \
+   /*-- general, uncommon cases --*/              \
+   if (zchh != zs->state_in_ch ||                 \
+      zs->state_in_len == 255) {                  \
+      if (zs->state_in_ch < 256)                  \
+         add_pair_to_block ( zs );                \
+      zs->state_in_ch = zchh;                     \
+      zs->state_in_len = 1;                       \
+   } else {                                       \
+      zs->state_in_len++;                         \
+   }                                              \
+}
+
+
+/*---------------------------------------------------*/
+static
+Bool copy_input_until_stop ( EState* s )
+{
+   Bool progress_in = False;
+
+   if (s->mode == BZ_M_RUNNING) {
+
+      /*-- fast track the common case --*/
+      while (True) {
+         /*-- block full? --*/
+         if (s->nblock >= s->nblockMAX) break;
+         /*-- no input? --*/
+         if (s->strm->avail_in == 0) break;
+         progress_in = True;
+         ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); 
+         s->strm->next_in++;
+         s->strm->avail_in--;
+         s->strm->total_in_lo32++;
+         if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;
+      }
+
+   } else {
+
+      /*-- general, uncommon case --*/
+      while (True) {
+         /*-- block full? --*/
+         if (s->nblock >= s->nblockMAX) break;
+         /*-- no input? --*/
+         if (s->strm->avail_in == 0) break;
+         /*-- flush/finish end? --*/
+         if (s->avail_in_expect == 0) break;
+         progress_in = True;
+         ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); 
+         s->strm->next_in++;
+         s->strm->avail_in--;
+         s->strm->total_in_lo32++;
+         if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++;
+         s->avail_in_expect--;
+      }
+   }
+   return progress_in;
+}
+
+
+/*---------------------------------------------------*/
+static
+Bool copy_output_until_stop ( EState* s )
+{
+   Bool progress_out = False;
+
+   while (True) {
+
+      /*-- no output space? --*/
+      if (s->strm->avail_out == 0) break;
+
+      /*-- block done? --*/
+      if (s->state_out_pos >= s->numZ) break;
+
+      progress_out = True;
+      *(s->strm->next_out) = s->zbits[s->state_out_pos];
+      s->state_out_pos++;
+      s->strm->avail_out--;
+      s->strm->next_out++;
+      s->strm->total_out_lo32++;
+      if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
+   }
+
+   return progress_out;
+}
+
+
+/*---------------------------------------------------*/
+static
+Bool handle_compress ( bz_stream* strm )
+{
+   Bool progress_in  = False;
+   Bool progress_out = False;
+   EState* s = strm->state;
+   
+   while (True) {
+
+      if (s->state == BZ_S_OUTPUT) {
+         progress_out |= copy_output_until_stop ( s );
+         if (s->state_out_pos < s->numZ) break;
+         if (s->mode == BZ_M_FINISHING && 
+             s->avail_in_expect == 0 &&
+             isempty_RL(s)) break;
+         prepare_new_block ( s );
+         s->state = BZ_S_INPUT;
+         if (s->mode == BZ_M_FLUSHING && 
+             s->avail_in_expect == 0 &&
+             isempty_RL(s)) break;
+      }
+
+      if (s->state == BZ_S_INPUT) {
+         progress_in |= copy_input_until_stop ( s );
+         if (s->mode != BZ_M_RUNNING && s->avail_in_expect == 0) {
+            flush_RL ( s );
+            BZ2_compressBlock ( s, (Bool)(s->mode == BZ_M_FINISHING) );
+            s->state = BZ_S_OUTPUT;
+         }
+         else
+         if (s->nblock >= s->nblockMAX) {
+            BZ2_compressBlock ( s, False );
+            s->state = BZ_S_OUTPUT;
+         }
+         else
+         if (s->strm->avail_in == 0) {
+            break;
+         }
+      }
+
+   }
+
+   return progress_in || progress_out;
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzCompress) ( bz_stream *strm, int action )
+{
+   Bool progress;
+   EState* s;
+   if (strm == NULL) return BZ_PARAM_ERROR;
+   s = strm->state;
+   if (s == NULL) return BZ_PARAM_ERROR;
+   if (s->strm != strm) return BZ_PARAM_ERROR;
+
+   preswitch:
+   switch (s->mode) {
+
+      case BZ_M_IDLE:
+         return BZ_SEQUENCE_ERROR;
+
+      case BZ_M_RUNNING:
+         if (action == BZ_RUN) {
+            progress = handle_compress ( strm );
+            return progress ? BZ_RUN_OK : BZ_PARAM_ERROR;
+         } 
+         else
+	 if (action == BZ_FLUSH) {
+            s->avail_in_expect = strm->avail_in;
+            s->mode = BZ_M_FLUSHING;
+            goto preswitch;
+         }
+         else
+         if (action == BZ_FINISH) {
+            s->avail_in_expect = strm->avail_in;
+            s->mode = BZ_M_FINISHING;
+            goto preswitch;
+         }
+         else 
+            return BZ_PARAM_ERROR;
+
+      case BZ_M_FLUSHING:
+         if (action != BZ_FLUSH) return BZ_SEQUENCE_ERROR;
+         if (s->avail_in_expect != s->strm->avail_in) 
+            return BZ_SEQUENCE_ERROR;
+         progress = handle_compress ( strm );
+         if (s->avail_in_expect > 0 || !isempty_RL(s) ||
+             s->state_out_pos < s->numZ) return BZ_FLUSH_OK;
+         s->mode = BZ_M_RUNNING;
+         return BZ_RUN_OK;
+
+      case BZ_M_FINISHING:
+         if (action != BZ_FINISH) return BZ_SEQUENCE_ERROR;
+         if (s->avail_in_expect != s->strm->avail_in) 
+            return BZ_SEQUENCE_ERROR;
+         progress = handle_compress ( strm );
+         if (!progress) return BZ_SEQUENCE_ERROR;
+         if (s->avail_in_expect > 0 || !isempty_RL(s) ||
+             s->state_out_pos < s->numZ) return BZ_FINISH_OK;
+         s->mode = BZ_M_IDLE;
+         return BZ_STREAM_END;
+   }
+   return BZ_OK; /*--not reached--*/
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzCompressEnd)  ( bz_stream *strm )
+{
+   EState* s;
+   if (strm == NULL) return BZ_PARAM_ERROR;
+   s = strm->state;
+   if (s == NULL) return BZ_PARAM_ERROR;
+   if (s->strm != strm) return BZ_PARAM_ERROR;
+
+   if (s->arr1 != NULL) BZFREE(s->arr1);
+   if (s->arr2 != NULL) BZFREE(s->arr2);
+   if (s->ftab != NULL) BZFREE(s->ftab);
+   BZFREE(strm->state);
+
+   strm->state = NULL;   
+
+   return BZ_OK;
+}
+
+
+/*---------------------------------------------------*/
+/*--- Decompression stuff                         ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzDecompressInit) 
+                     ( bz_stream* strm, 
+                       int        verbosity,
+                       int        small )
+{
+   DState* s;
+
+   if (!bz_config_ok()) return BZ_CONFIG_ERROR;
+
+   if (strm == NULL) return BZ_PARAM_ERROR;
+   if (small != 0 && small != 1) return BZ_PARAM_ERROR;
+   if (verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR;
+
+   if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc;
+   if (strm->bzfree == NULL) strm->bzfree = default_bzfree;
+
+   s = BZALLOC( sizeof(DState) );
+   if (s == NULL) return BZ_MEM_ERROR;
+   s->strm                  = strm;
+   strm->state              = s;
+   s->state                 = BZ_X_MAGIC_1;
+   s->bsLive                = 0;
+   s->bsBuff                = 0;
+   s->calculatedCombinedCRC = 0;
+   strm->total_in_lo32      = 0;
+   strm->total_in_hi32      = 0;
+   strm->total_out_lo32     = 0;
+   strm->total_out_hi32     = 0;
+   s->smallDecompress       = (Bool)small;
+   s->ll4                   = NULL;
+   s->ll16                  = NULL;
+   s->tt                    = NULL;
+   s->currBlockNo           = 0;
+   s->verbosity             = verbosity;
+
+   return BZ_OK;
+}
+
+
+/*---------------------------------------------------*/
+/* Return  True iff data corruption is discovered.
+   Returns False if there is no problem.
+*/
+static
+Bool unRLE_obuf_to_output_FAST ( DState* s )
+{
+   UChar k1;
+
+   if (s->blockRandomised) {
+
+      while (True) {
+         /* try to finish existing run */
+         while (True) {
+            if (s->strm->avail_out == 0) return False;
+            if (s->state_out_len == 0) break;
+            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
+            BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
+            s->state_out_len--;
+            s->strm->next_out++;
+            s->strm->avail_out--;
+            s->strm->total_out_lo32++;
+            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
+         }
+
+         /* can a new run be started? */
+         if (s->nblock_used == s->save_nblock+1) return False;
+               
+         /* Only caused by corrupt data stream? */
+         if (s->nblock_used > s->save_nblock+1)
+            return True;
+   
+         s->state_out_len = 1;
+         s->state_out_ch = s->k0;
+         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; 
+         k1 ^= BZ_RAND_MASK; s->nblock_used++;
+         if (s->nblock_used == s->save_nblock+1) continue;
+         if (k1 != s->k0) { s->k0 = k1; continue; };
+   
+         s->state_out_len = 2;
+         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; 
+         k1 ^= BZ_RAND_MASK; s->nblock_used++;
+         if (s->nblock_used == s->save_nblock+1) continue;
+         if (k1 != s->k0) { s->k0 = k1; continue; };
+   
+         s->state_out_len = 3;
+         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; 
+         k1 ^= BZ_RAND_MASK; s->nblock_used++;
+         if (s->nblock_used == s->save_nblock+1) continue;
+         if (k1 != s->k0) { s->k0 = k1; continue; };
+   
+         BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; 
+         k1 ^= BZ_RAND_MASK; s->nblock_used++;
+         s->state_out_len = ((Int32)k1) + 4;
+         BZ_GET_FAST(s->k0); BZ_RAND_UPD_MASK; 
+         s->k0 ^= BZ_RAND_MASK; s->nblock_used++;
+      }
+
+   } else {
+
+      /* restore */
+      UInt32        c_calculatedBlockCRC = s->calculatedBlockCRC;
+      UChar         c_state_out_ch       = s->state_out_ch;
+      Int32         c_state_out_len      = s->state_out_len;
+      Int32         c_nblock_used        = s->nblock_used;
+      Int32         c_k0                 = s->k0;
+      UInt32*       c_tt                 = s->tt;
+      UInt32        c_tPos               = s->tPos;
+      char*         cs_next_out          = s->strm->next_out;
+      unsigned int  cs_avail_out         = s->strm->avail_out;
+      Int32         ro_blockSize100k     = s->blockSize100k;
+      /* end restore */
+
+      UInt32       avail_out_INIT = cs_avail_out;
+      Int32        s_save_nblockPP = s->save_nblock+1;
+      unsigned int total_out_lo32_old;
+
+      while (True) {
+
+         /* try to finish existing run */
+         if (c_state_out_len > 0) {
+            while (True) {
+               if (cs_avail_out == 0) goto return_notr;
+               if (c_state_out_len == 1) break;
+               *( (UChar*)(cs_next_out) ) = c_state_out_ch;
+               BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );
+               c_state_out_len--;
+               cs_next_out++;
+               cs_avail_out--;
+            }
+            s_state_out_len_eq_one:
+            {
+               if (cs_avail_out == 0) { 
+                  c_state_out_len = 1; goto return_notr;
+               };
+               *( (UChar*)(cs_next_out) ) = c_state_out_ch;
+               BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch );
+               cs_next_out++;
+               cs_avail_out--;
+            }
+         }   
+         /* Only caused by corrupt data stream? */
+         if (c_nblock_used > s_save_nblockPP)
+            return True;
+
+         /* can a new run be started? */
+         if (c_nblock_used == s_save_nblockPP) {
+            c_state_out_len = 0; goto return_notr;
+         };   
+         c_state_out_ch = c_k0;
+         BZ_GET_FAST_C(k1); c_nblock_used++;
+         if (k1 != c_k0) { 
+            c_k0 = k1; goto s_state_out_len_eq_one; 
+         };
+         if (c_nblock_used == s_save_nblockPP) 
+            goto s_state_out_len_eq_one;
+   
+         c_state_out_len = 2;
+         BZ_GET_FAST_C(k1); c_nblock_used++;
+         if (c_nblock_used == s_save_nblockPP) continue;
+         if (k1 != c_k0) { c_k0 = k1; continue; };
+   
+         c_state_out_len = 3;
+         BZ_GET_FAST_C(k1); c_nblock_used++;
+         if (c_nblock_used == s_save_nblockPP) continue;
+         if (k1 != c_k0) { c_k0 = k1; continue; };
+   
+         BZ_GET_FAST_C(k1); c_nblock_used++;
+         c_state_out_len = ((Int32)k1) + 4;
+         BZ_GET_FAST_C(c_k0); c_nblock_used++;
+      }
+
+      return_notr:
+      total_out_lo32_old = s->strm->total_out_lo32;
+      s->strm->total_out_lo32 += (avail_out_INIT - cs_avail_out);
+      if (s->strm->total_out_lo32 < total_out_lo32_old)
+         s->strm->total_out_hi32++;
+
+      /* save */
+      s->calculatedBlockCRC = c_calculatedBlockCRC;
+      s->state_out_ch       = c_state_out_ch;
+      s->state_out_len      = c_state_out_len;
+      s->nblock_used        = c_nblock_used;
+      s->k0                 = c_k0;
+      s->tt                 = c_tt;
+      s->tPos               = c_tPos;
+      s->strm->next_out     = cs_next_out;
+      s->strm->avail_out    = cs_avail_out;
+      /* end save */
+   }
+   return False;
+}
+
+
+
+/*---------------------------------------------------*/
+__inline__ Int32 BZ2_indexIntoF ( Int32 indx, Int32 *cftab )
+{
+   Int32 nb, na, mid;
+   nb = 0;
+   na = 256;
+   do {
+      mid = (nb + na) >> 1;
+      if (indx >= cftab[mid]) nb = mid; else na = mid;
+   }
+   while (na - nb != 1);
+   return nb;
+}
+
+
+/*---------------------------------------------------*/
+/* Return  True iff data corruption is discovered.
+   Returns False if there is no problem.
+*/
+static
+Bool unRLE_obuf_to_output_SMALL ( DState* s )
+{
+   UChar k1;
+
+   if (s->blockRandomised) {
+
+      while (True) {
+         /* try to finish existing run */
+         while (True) {
+            if (s->strm->avail_out == 0) return False;
+            if (s->state_out_len == 0) break;
+            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
+            BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
+            s->state_out_len--;
+            s->strm->next_out++;
+            s->strm->avail_out--;
+            s->strm->total_out_lo32++;
+            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
+         }
+   
+         /* can a new run be started? */
+         if (s->nblock_used == s->save_nblock+1) return False;
+
+         /* Only caused by corrupt data stream? */
+         if (s->nblock_used > s->save_nblock+1)
+            return True;
+   
+         s->state_out_len = 1;
+         s->state_out_ch = s->k0;
+         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; 
+         k1 ^= BZ_RAND_MASK; s->nblock_used++;
+         if (s->nblock_used == s->save_nblock+1) continue;
+         if (k1 != s->k0) { s->k0 = k1; continue; };
+   
+         s->state_out_len = 2;
+         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; 
+         k1 ^= BZ_RAND_MASK; s->nblock_used++;
+         if (s->nblock_used == s->save_nblock+1) continue;
+         if (k1 != s->k0) { s->k0 = k1; continue; };
+   
+         s->state_out_len = 3;
+         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; 
+         k1 ^= BZ_RAND_MASK; s->nblock_used++;
+         if (s->nblock_used == s->save_nblock+1) continue;
+         if (k1 != s->k0) { s->k0 = k1; continue; };
+   
+         BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; 
+         k1 ^= BZ_RAND_MASK; s->nblock_used++;
+         s->state_out_len = ((Int32)k1) + 4;
+         BZ_GET_SMALL(s->k0); BZ_RAND_UPD_MASK; 
+         s->k0 ^= BZ_RAND_MASK; s->nblock_used++;
+      }
+
+   } else {
+
+      while (True) {
+         /* try to finish existing run */
+         while (True) {
+            if (s->strm->avail_out == 0) return False;
+            if (s->state_out_len == 0) break;
+            *( (UChar*)(s->strm->next_out) ) = s->state_out_ch;
+            BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch );
+            s->state_out_len--;
+            s->strm->next_out++;
+            s->strm->avail_out--;
+            s->strm->total_out_lo32++;
+            if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++;
+         }
+   
+         /* can a new run be started? */
+         if (s->nblock_used == s->save_nblock+1) return False;
+
+         /* Only caused by corrupt data stream? */
+         if (s->nblock_used > s->save_nblock+1)
+            return True;
+   
+         s->state_out_len = 1;
+         s->state_out_ch = s->k0;
+         BZ_GET_SMALL(k1); s->nblock_used++;
+         if (s->nblock_used == s->save_nblock+1) continue;
+         if (k1 != s->k0) { s->k0 = k1; continue; };
+   
+         s->state_out_len = 2;
+         BZ_GET_SMALL(k1); s->nblock_used++;
+         if (s->nblock_used == s->save_nblock+1) continue;
+         if (k1 != s->k0) { s->k0 = k1; continue; };
+   
+         s->state_out_len = 3;
+         BZ_GET_SMALL(k1); s->nblock_used++;
+         if (s->nblock_used == s->save_nblock+1) continue;
+         if (k1 != s->k0) { s->k0 = k1; continue; };
+   
+         BZ_GET_SMALL(k1); s->nblock_used++;
+         s->state_out_len = ((Int32)k1) + 4;
+         BZ_GET_SMALL(s->k0); s->nblock_used++;
+      }
+
+   }
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzDecompress) ( bz_stream *strm )
+{
+   Bool    corrupt;
+   DState* s;
+   if (strm == NULL) return BZ_PARAM_ERROR;
+   s = strm->state;
+   if (s == NULL) return BZ_PARAM_ERROR;
+   if (s->strm != strm) return BZ_PARAM_ERROR;
+
+   while (True) {
+      if (s->state == BZ_X_IDLE) return BZ_SEQUENCE_ERROR;
+      if (s->state == BZ_X_OUTPUT) {
+         if (s->smallDecompress)
+            corrupt = unRLE_obuf_to_output_SMALL ( s ); else
+            corrupt = unRLE_obuf_to_output_FAST  ( s );
+         if (corrupt) return BZ_DATA_ERROR;
+         if (s->nblock_used == s->save_nblock+1 && s->state_out_len == 0) {
+            BZ_FINALISE_CRC ( s->calculatedBlockCRC );
+            if (s->verbosity >= 3) 
+               VPrintf2 ( " {0x%08x, 0x%08x}", s->storedBlockCRC, 
+                          s->calculatedBlockCRC );
+            if (s->verbosity >= 2) VPrintf0 ( "]" );
+            if (s->calculatedBlockCRC != s->storedBlockCRC)
+               return BZ_DATA_ERROR;
+            s->calculatedCombinedCRC 
+               = (s->calculatedCombinedCRC << 1) | 
+                    (s->calculatedCombinedCRC >> 31);
+            s->calculatedCombinedCRC ^= s->calculatedBlockCRC;
+            s->state = BZ_X_BLKHDR_1;
+         } else {
+            return BZ_OK;
+         }
+      }
+      if (s->state >= BZ_X_MAGIC_1) {
+         Int32 r = BZ2_decompress ( s );
+         if (r == BZ_STREAM_END) {
+            if (s->verbosity >= 3)
+               VPrintf2 ( "\n    combined CRCs: stored = 0x%08x, computed = 0x%08x", 
+                          s->storedCombinedCRC, s->calculatedCombinedCRC );
+            if (s->calculatedCombinedCRC != s->storedCombinedCRC)
+               return BZ_DATA_ERROR;
+            return r;
+         }
+         if (s->state != BZ_X_OUTPUT) return r;
+      }
+   }
+
+   AssertH ( 0, 6001 );
+
+   return 0;  /*NOTREACHED*/
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzDecompressEnd)  ( bz_stream *strm )
+{
+   DState* s;
+   if (strm == NULL) return BZ_PARAM_ERROR;
+   s = strm->state;
+   if (s == NULL) return BZ_PARAM_ERROR;
+   if (s->strm != strm) return BZ_PARAM_ERROR;
+
+   if (s->tt   != NULL) BZFREE(s->tt);
+   if (s->ll16 != NULL) BZFREE(s->ll16);
+   if (s->ll4  != NULL) BZFREE(s->ll4);
+
+   BZFREE(strm->state);
+   strm->state = NULL;
+
+   return BZ_OK;
+}
+
+
+#ifndef BZ_NO_STDIO
+/*---------------------------------------------------*/
+/*--- File I/O stuff                              ---*/
+/*---------------------------------------------------*/
+
+#define BZ_SETERR(eee)                    \
+{                                         \
+   if (bzerror != NULL) *bzerror = eee;   \
+   if (bzf != NULL) bzf->lastErr = eee;   \
+}
+
+typedef 
+   struct {
+      FILE*     handle;
+      Char      buf[BZ_MAX_UNUSED];
+      Int32     bufN;
+      Bool      writing;
+      bz_stream strm;
+      Int32     lastErr;
+      Bool      initialisedOk;
+   }
+   bzFile;
+
+
+/*---------------------------------------------*/
+static Bool myfeof ( FILE* f )
+{
+   Int32 c = fgetc ( f );
+   if (c == EOF) return True;
+   ungetc ( c, f );
+   return False;
+}
+
+
+/*---------------------------------------------------*/
+BZFILE* BZ_API(BZ2_bzWriteOpen) 
+                    ( int*  bzerror,      
+                      FILE* f, 
+                      int   blockSize100k, 
+                      int   verbosity,
+                      int   workFactor )
+{
+   Int32   ret;
+   bzFile* bzf = NULL;
+
+   BZ_SETERR(BZ_OK);
+
+   if (f == NULL ||
+       (blockSize100k < 1 || blockSize100k > 9) ||
+       (workFactor < 0 || workFactor > 250) ||
+       (verbosity < 0 || verbosity > 4))
+      { BZ_SETERR(BZ_PARAM_ERROR); return NULL; };
+
+   if (ferror(f))
+      { BZ_SETERR(BZ_IO_ERROR); return NULL; };
+
+   bzf = malloc ( sizeof(bzFile) );
+   if (bzf == NULL)
+      { BZ_SETERR(BZ_MEM_ERROR); return NULL; };
+
+   BZ_SETERR(BZ_OK);
+   bzf->initialisedOk = False;
+   bzf->bufN          = 0;
+   bzf->handle        = f;
+   bzf->writing       = True;
+   bzf->strm.bzalloc  = NULL;
+   bzf->strm.bzfree   = NULL;
+   bzf->strm.opaque   = NULL;
+
+   if (workFactor == 0) workFactor = 30;
+   ret = BZ2_bzCompressInit ( &(bzf->strm), blockSize100k, 
+                              verbosity, workFactor );
+   if (ret != BZ_OK)
+      { BZ_SETERR(ret); free(bzf); return NULL; };
+
+   bzf->strm.avail_in = 0;
+   bzf->initialisedOk = True;
+   return bzf;   
+}
+
+
+
+/*---------------------------------------------------*/
+void BZ_API(BZ2_bzWrite)
+             ( int*    bzerror, 
+               BZFILE* b, 
+               void*   buf, 
+               int     len )
+{
+   Int32 n, n2, ret;
+   bzFile* bzf = (bzFile*)b;
+
+   BZ_SETERR(BZ_OK);
+   if (bzf == NULL || buf == NULL || len < 0)
+      { BZ_SETERR(BZ_PARAM_ERROR); return; };
+   if (!(bzf->writing))
+      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
+   if (ferror(bzf->handle))
+      { BZ_SETERR(BZ_IO_ERROR); return; };
+
+   if (len == 0)
+      { BZ_SETERR(BZ_OK); return; };
+
+   bzf->strm.avail_in = len;
+   bzf->strm.next_in  = buf;
+
+   while (True) {
+      bzf->strm.avail_out = BZ_MAX_UNUSED;
+      bzf->strm.next_out = bzf->buf;
+      ret = BZ2_bzCompress ( &(bzf->strm), BZ_RUN );
+      if (ret != BZ_RUN_OK)
+         { BZ_SETERR(ret); return; };
+
+      if (bzf->strm.avail_out < BZ_MAX_UNUSED) {
+         n = BZ_MAX_UNUSED - bzf->strm.avail_out;
+         n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), 
+                       n, bzf->handle );
+         if (n != n2 || ferror(bzf->handle))
+            { BZ_SETERR(BZ_IO_ERROR); return; };
+      }
+
+      if (bzf->strm.avail_in == 0)
+         { BZ_SETERR(BZ_OK); return; };
+   }
+}
+
+
+/*---------------------------------------------------*/
+void BZ_API(BZ2_bzWriteClose)
+                  ( int*          bzerror, 
+                    BZFILE*       b, 
+                    int           abandon,
+                    unsigned int* nbytes_in,
+                    unsigned int* nbytes_out )
+{
+   BZ2_bzWriteClose64 ( bzerror, b, abandon, 
+                        nbytes_in, NULL, nbytes_out, NULL );
+}
+
+
+void BZ_API(BZ2_bzWriteClose64)
+                  ( int*          bzerror, 
+                    BZFILE*       b, 
+                    int           abandon,
+                    unsigned int* nbytes_in_lo32,
+                    unsigned int* nbytes_in_hi32,
+                    unsigned int* nbytes_out_lo32,
+                    unsigned int* nbytes_out_hi32 )
+{
+   Int32   n, n2, ret;
+   bzFile* bzf = (bzFile*)b;
+
+   if (bzf == NULL)
+      { BZ_SETERR(BZ_OK); return; };
+   if (!(bzf->writing))
+      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
+   if (ferror(bzf->handle))
+      { BZ_SETERR(BZ_IO_ERROR); return; };
+
+   if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = 0;
+   if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = 0;
+   if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = 0;
+   if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = 0;
+
+   if ((!abandon) && bzf->lastErr == BZ_OK) {
+      while (True) {
+         bzf->strm.avail_out = BZ_MAX_UNUSED;
+         bzf->strm.next_out = bzf->buf;
+         ret = BZ2_bzCompress ( &(bzf->strm), BZ_FINISH );
+         if (ret != BZ_FINISH_OK && ret != BZ_STREAM_END)
+            { BZ_SETERR(ret); return; };
+
+         if (bzf->strm.avail_out < BZ_MAX_UNUSED) {
+            n = BZ_MAX_UNUSED - bzf->strm.avail_out;
+            n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), 
+                          n, bzf->handle );
+            if (n != n2 || ferror(bzf->handle))
+               { BZ_SETERR(BZ_IO_ERROR); return; };
+         }
+
+         if (ret == BZ_STREAM_END) break;
+      }
+   }
+
+   if ( !abandon && !ferror ( bzf->handle ) ) {
+      fflush ( bzf->handle );
+      if (ferror(bzf->handle))
+         { BZ_SETERR(BZ_IO_ERROR); return; };
+   }
+
+   if (nbytes_in_lo32 != NULL)
+      *nbytes_in_lo32 = bzf->strm.total_in_lo32;
+   if (nbytes_in_hi32 != NULL)
+      *nbytes_in_hi32 = bzf->strm.total_in_hi32;
+   if (nbytes_out_lo32 != NULL)
+      *nbytes_out_lo32 = bzf->strm.total_out_lo32;
+   if (nbytes_out_hi32 != NULL)
+      *nbytes_out_hi32 = bzf->strm.total_out_hi32;
+
+   BZ_SETERR(BZ_OK);
+   BZ2_bzCompressEnd ( &(bzf->strm) );
+   free ( bzf );
+}
+
+
+/*---------------------------------------------------*/
+BZFILE* BZ_API(BZ2_bzReadOpen) 
+                   ( int*  bzerror, 
+                     FILE* f, 
+                     int   verbosity,
+                     int   small,
+                     void* unused,
+                     int   nUnused )
+{
+   bzFile* bzf = NULL;
+   int     ret;
+
+   BZ_SETERR(BZ_OK);
+
+   if (f == NULL || 
+       (small != 0 && small != 1) ||
+       (verbosity < 0 || verbosity > 4) ||
+       (unused == NULL && nUnused != 0) ||
+       (unused != NULL && (nUnused < 0 || nUnused > BZ_MAX_UNUSED)))
+      { BZ_SETERR(BZ_PARAM_ERROR); return NULL; };
+
+   if (ferror(f))
+      { BZ_SETERR(BZ_IO_ERROR); return NULL; };
+
+   bzf = malloc ( sizeof(bzFile) );
+   if (bzf == NULL) 
+      { BZ_SETERR(BZ_MEM_ERROR); return NULL; };
+
+   BZ_SETERR(BZ_OK);
+
+   bzf->initialisedOk = False;
+   bzf->handle        = f;
+   bzf->bufN          = 0;
+   bzf->writing       = False;
+   bzf->strm.bzalloc  = NULL;
+   bzf->strm.bzfree   = NULL;
+   bzf->strm.opaque   = NULL;
+   
+   while (nUnused > 0) {
+      bzf->buf[bzf->bufN] = *((UChar*)(unused)); bzf->bufN++;
+      unused = ((void*)( 1 + ((UChar*)(unused))  ));
+      nUnused--;
+   }
+
+   ret = BZ2_bzDecompressInit ( &(bzf->strm), verbosity, small );
+   if (ret != BZ_OK)
+      { BZ_SETERR(ret); free(bzf); return NULL; };
+
+   bzf->strm.avail_in = bzf->bufN;
+   bzf->strm.next_in  = bzf->buf;
+
+   bzf->initialisedOk = True;
+   return bzf;   
+}
+
+
+/*---------------------------------------------------*/
+void BZ_API(BZ2_bzReadClose) ( int *bzerror, BZFILE *b )
+{
+   bzFile* bzf = (bzFile*)b;
+
+   BZ_SETERR(BZ_OK);
+   if (bzf == NULL)
+      { BZ_SETERR(BZ_OK); return; };
+
+   if (bzf->writing)
+      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
+
+   if (bzf->initialisedOk)
+      (void)BZ2_bzDecompressEnd ( &(bzf->strm) );
+   free ( bzf );
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzRead) 
+           ( int*    bzerror, 
+             BZFILE* b, 
+             void*   buf, 
+             int     len )
+{
+   Int32   n, ret;
+   bzFile* bzf = (bzFile*)b;
+
+   BZ_SETERR(BZ_OK);
+
+   if (bzf == NULL || buf == NULL || len < 0)
+      { BZ_SETERR(BZ_PARAM_ERROR); return 0; };
+
+   if (bzf->writing)
+      { BZ_SETERR(BZ_SEQUENCE_ERROR); return 0; };
+
+   if (len == 0)
+      { BZ_SETERR(BZ_OK); return 0; };
+
+   bzf->strm.avail_out = len;
+   bzf->strm.next_out = buf;
+
+   while (True) {
+
+      if (ferror(bzf->handle)) 
+         { BZ_SETERR(BZ_IO_ERROR); return 0; };
+
+      if (bzf->strm.avail_in == 0 && !myfeof(bzf->handle)) {
+         n = fread ( bzf->buf, sizeof(UChar), 
+                     BZ_MAX_UNUSED, bzf->handle );
+         if (ferror(bzf->handle))
+            { BZ_SETERR(BZ_IO_ERROR); return 0; };
+         bzf->bufN = n;
+         bzf->strm.avail_in = bzf->bufN;
+         bzf->strm.next_in = bzf->buf;
+      }
+
+      ret = BZ2_bzDecompress ( &(bzf->strm) );
+
+      if (ret != BZ_OK && ret != BZ_STREAM_END)
+         { BZ_SETERR(ret); return 0; };
+
+      if (ret == BZ_OK && myfeof(bzf->handle) && 
+          bzf->strm.avail_in == 0 && bzf->strm.avail_out > 0)
+         { BZ_SETERR(BZ_UNEXPECTED_EOF); return 0; };
+
+      if (ret == BZ_STREAM_END)
+         { BZ_SETERR(BZ_STREAM_END);
+           return len - bzf->strm.avail_out; };
+      if (bzf->strm.avail_out == 0)
+         { BZ_SETERR(BZ_OK); return len; };
+      
+   }
+
+   return 0; /*not reached*/
+}
+
+
+/*---------------------------------------------------*/
+void BZ_API(BZ2_bzReadGetUnused) 
+                     ( int*    bzerror, 
+                       BZFILE* b, 
+                       void**  unused, 
+                       int*    nUnused )
+{
+   bzFile* bzf = (bzFile*)b;
+   if (bzf == NULL)
+      { BZ_SETERR(BZ_PARAM_ERROR); return; };
+   if (bzf->lastErr != BZ_STREAM_END)
+      { BZ_SETERR(BZ_SEQUENCE_ERROR); return; };
+   if (unused == NULL || nUnused == NULL)
+      { BZ_SETERR(BZ_PARAM_ERROR); return; };
+
+   BZ_SETERR(BZ_OK);
+   *nUnused = bzf->strm.avail_in;
+   *unused = bzf->strm.next_in;
+}
+#endif
+
+
+/*---------------------------------------------------*/
+/*--- Misc convenience stuff                      ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzBuffToBuffCompress) 
+                         ( char*         dest, 
+                           unsigned int* destLen,
+                           char*         source, 
+                           unsigned int  sourceLen,
+                           int           blockSize100k, 
+                           int           verbosity, 
+                           int           workFactor )
+{
+   bz_stream strm;
+   int ret;
+
+   if (dest == NULL || destLen == NULL || 
+       source == NULL ||
+       blockSize100k < 1 || blockSize100k > 9 ||
+       verbosity < 0 || verbosity > 4 ||
+       workFactor < 0 || workFactor > 250) 
+      return BZ_PARAM_ERROR;
+
+   if (workFactor == 0) workFactor = 30;
+   strm.bzalloc = NULL;
+   strm.bzfree = NULL;
+   strm.opaque = NULL;
+   ret = BZ2_bzCompressInit ( &strm, blockSize100k, 
+                              verbosity, workFactor );
+   if (ret != BZ_OK) return ret;
+
+   strm.next_in = source;
+   strm.next_out = dest;
+   strm.avail_in = sourceLen;
+   strm.avail_out = *destLen;
+
+   ret = BZ2_bzCompress ( &strm, BZ_FINISH );
+   if (ret == BZ_FINISH_OK) goto output_overflow;
+   if (ret != BZ_STREAM_END) goto errhandler;
+
+   /* normal termination */
+   *destLen -= strm.avail_out;   
+   BZ2_bzCompressEnd ( &strm );
+   return BZ_OK;
+
+   output_overflow:
+   BZ2_bzCompressEnd ( &strm );
+   return BZ_OUTBUFF_FULL;
+
+   errhandler:
+   BZ2_bzCompressEnd ( &strm );
+   return ret;
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzBuffToBuffDecompress) 
+                           ( char*         dest, 
+                             unsigned int* destLen,
+                             char*         source, 
+                             unsigned int  sourceLen,
+                             int           small,
+                             int           verbosity )
+{
+   bz_stream strm;
+   int ret;
+
+   if (dest == NULL || destLen == NULL || 
+       source == NULL ||
+       (small != 0 && small != 1) ||
+       verbosity < 0 || verbosity > 4) 
+          return BZ_PARAM_ERROR;
+
+   strm.bzalloc = NULL;
+   strm.bzfree = NULL;
+   strm.opaque = NULL;
+   ret = BZ2_bzDecompressInit ( &strm, verbosity, small );
+   if (ret != BZ_OK) return ret;
+
+   strm.next_in = source;
+   strm.next_out = dest;
+   strm.avail_in = sourceLen;
+   strm.avail_out = *destLen;
+
+   ret = BZ2_bzDecompress ( &strm );
+   if (ret == BZ_OK) goto output_overflow_or_eof;
+   if (ret != BZ_STREAM_END) goto errhandler;
+
+   /* normal termination */
+   *destLen -= strm.avail_out;
+   BZ2_bzDecompressEnd ( &strm );
+   return BZ_OK;
+
+   output_overflow_or_eof:
+   if (strm.avail_out > 0) {
+      BZ2_bzDecompressEnd ( &strm );
+      return BZ_UNEXPECTED_EOF;
+   } else {
+      BZ2_bzDecompressEnd ( &strm );
+      return BZ_OUTBUFF_FULL;
+   };      
+
+   errhandler:
+   BZ2_bzDecompressEnd ( &strm );
+   return ret; 
+}
+
+
+/*---------------------------------------------------*/
+/*--
+   Code contributed by Yoshioka Tsuneo (tsuneo at rr.iij4u.or.jp)
+   to support better zlib compatibility.
+   This code is not _officially_ part of libbzip2 (yet);
+   I haven't tested it, documented it, or considered the
+   threading-safeness of it.
+   If this code breaks, please contact both Yoshioka and me.
+--*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------------*/
+/*--
+   return version like "0.9.5d, 4-Sept-1999".
+--*/
+const char * BZ_API(BZ2_bzlibVersion)(void)
+{
+   return BZ_VERSION;
+}
+
+
+#ifndef BZ_NO_STDIO
+/*---------------------------------------------------*/
+
+#if defined(_WIN32) || defined(OS2) || defined(MSDOS)
+#   include <fcntl.h>
+#   include <io.h>
+#   define SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY)
+#else
+#   define SET_BINARY_MODE(file)
+#endif
+static
+BZFILE * bzopen_or_bzdopen
+               ( const char *path,   /* no use when bzdopen */
+                 int fd,             /* no use when bzdopen */
+                 const char *mode,
+                 int open_mode)      /* bzopen: 0, bzdopen:1 */
+{
+   int    bzerr;
+   char   unused[BZ_MAX_UNUSED];
+   int    blockSize100k = 9;
+   int    writing       = 0;
+   char   mode2[10]     = "";
+   FILE   *fp           = NULL;
+   BZFILE *bzfp         = NULL;
+   int    verbosity     = 0;
+   int    workFactor    = 30;
+   int    smallMode     = 0;
+   int    nUnused       = 0; 
+
+   if (mode == NULL) return NULL;
+   while (*mode) {
+      switch (*mode) {
+      case 'r':
+         writing = 0; break;
+      case 'w':
+         writing = 1; break;
+      case 's':
+         smallMode = 1; break;
+      default:
+         if (isdigit((int)(*mode))) {
+            blockSize100k = *mode-BZ_HDR_0;
+         }
+      }
+      mode++;
+   }
+   strcat(mode2, writing ? "w" : "r" );
+   strcat(mode2,"b");   /* binary mode */
+
+   if (open_mode==0) {
+      if (path==NULL || strcmp(path,"")==0) {
+        fp = (writing ? stdout : stdin);
+        SET_BINARY_MODE(fp);
+      } else {
+        fp = fopen(path,mode2);
+      }
+   } else {
+#ifdef BZ_STRICT_ANSI
+      fp = NULL;
+#else
+      fp = fdopen(fd,mode2);
+#endif
+   }
+   if (fp == NULL) return NULL;
+
+   if (writing) {
+      /* Guard against total chaos and anarchy -- JRS */
+      if (blockSize100k < 1) blockSize100k = 1;
+      if (blockSize100k > 9) blockSize100k = 9; 
+      bzfp = BZ2_bzWriteOpen(&bzerr,fp,blockSize100k,
+                             verbosity,workFactor);
+   } else {
+      bzfp = BZ2_bzReadOpen(&bzerr,fp,verbosity,smallMode,
+                            unused,nUnused);
+   }
+   if (bzfp == NULL) {
+      if (fp != stdin && fp != stdout) fclose(fp);
+      return NULL;
+   }
+   return bzfp;
+}
+
+
+/*---------------------------------------------------*/
+/*--
+   open file for read or write.
+      ex) bzopen("file","w9")
+      case path="" or NULL => use stdin or stdout.
+--*/
+BZFILE * BZ_API(BZ2_bzopen)
+               ( const char *path,
+                 const char *mode )
+{
+   return bzopen_or_bzdopen(path,-1,mode,/*bzopen*/0);
+}
+
+
+/*---------------------------------------------------*/
+BZFILE * BZ_API(BZ2_bzdopen)
+               ( int fd,
+                 const char *mode )
+{
+   return bzopen_or_bzdopen(NULL,fd,mode,/*bzdopen*/1);
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzread) (BZFILE* b, void* buf, int len )
+{
+   int bzerr, nread;
+   if (((bzFile*)b)->lastErr == BZ_STREAM_END) return 0;
+   nread = BZ2_bzRead(&bzerr,b,buf,len);
+   if (bzerr == BZ_OK || bzerr == BZ_STREAM_END) {
+      return nread;
+   } else {
+      return -1;
+   }
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzwrite) (BZFILE* b, void* buf, int len )
+{
+   int bzerr;
+
+   BZ2_bzWrite(&bzerr,b,buf,len);
+   if(bzerr == BZ_OK){
+      return len;
+   }else{
+      return -1;
+   }
+}
+
+
+/*---------------------------------------------------*/
+int BZ_API(BZ2_bzflush) (BZFILE *b)
+{
+   /* do nothing now... */
+   return 0;
+}
+
+
+/*---------------------------------------------------*/
+void BZ_API(BZ2_bzclose) (BZFILE* b)
+{
+   int bzerr;
+   FILE *fp;
+   
+   if (b==NULL) {return;}
+   fp = ((bzFile *)b)->handle;
+   if(((bzFile*)b)->writing){
+      BZ2_bzWriteClose(&bzerr,b,0,NULL,NULL);
+      if(bzerr != BZ_OK){
+         BZ2_bzWriteClose(NULL,b,1,NULL,NULL);
+      }
+   }else{
+      BZ2_bzReadClose(&bzerr,b);
+   }
+   if(fp!=stdin && fp!=stdout){
+      fclose(fp);
+   }
+}
+
+
+/*---------------------------------------------------*/
+/*--
+   return last error code 
+--*/
+static const char *bzerrorstrings[] = {
+       "OK"
+      ,"SEQUENCE_ERROR"
+      ,"PARAM_ERROR"
+      ,"MEM_ERROR"
+      ,"DATA_ERROR"
+      ,"DATA_ERROR_MAGIC"
+      ,"IO_ERROR"
+      ,"UNEXPECTED_EOF"
+      ,"OUTBUFF_FULL"
+      ,"CONFIG_ERROR"
+      ,"???"   /* for future */
+      ,"???"   /* for future */
+      ,"???"   /* for future */
+      ,"???"   /* for future */
+      ,"???"   /* for future */
+      ,"???"   /* for future */
+};
+
+
+const char * BZ_API(BZ2_bzerror) (BZFILE *b, int *errnum)
+{
+   int err = ((bzFile *)b)->lastErr;
+
+   if(err>0) err = 0;
+   *errnum = err;
+   return bzerrorstrings[err*-1];
+}
+#endif
+
+
+/*-------------------------------------------------------------*/
+/*--- end                                           bzlib.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/libs/ext/bzip2/bzlib.h b/libs/ext/bzip2/bzlib.h
new file mode 100644
index 0000000..8277123
--- /dev/null
+++ b/libs/ext/bzip2/bzlib.h
@@ -0,0 +1,282 @@
+
+/*-------------------------------------------------------------*/
+/*--- Public header file for the library.                   ---*/
+/*---                                               bzlib.h ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
+   README file.
+
+   This program is released under the terms of the license contained
+   in the file LICENSE.
+   ------------------------------------------------------------------ */
+
+
+#ifndef _BZLIB_H
+#define _BZLIB_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define BZ_RUN               0
+#define BZ_FLUSH             1
+#define BZ_FINISH            2
+
+#define BZ_OK                0
+#define BZ_RUN_OK            1
+#define BZ_FLUSH_OK          2
+#define BZ_FINISH_OK         3
+#define BZ_STREAM_END        4
+#define BZ_SEQUENCE_ERROR    (-1)
+#define BZ_PARAM_ERROR       (-2)
+#define BZ_MEM_ERROR         (-3)
+#define BZ_DATA_ERROR        (-4)
+#define BZ_DATA_ERROR_MAGIC  (-5)
+#define BZ_IO_ERROR          (-6)
+#define BZ_UNEXPECTED_EOF    (-7)
+#define BZ_OUTBUFF_FULL      (-8)
+#define BZ_CONFIG_ERROR      (-9)
+
+typedef 
+   struct {
+      char *next_in;
+      unsigned int avail_in;
+      unsigned int total_in_lo32;
+      unsigned int total_in_hi32;
+
+      char *next_out;
+      unsigned int avail_out;
+      unsigned int total_out_lo32;
+      unsigned int total_out_hi32;
+
+      void *state;
+
+      void *(*bzalloc)(void *,int,int);
+      void (*bzfree)(void *,void *);
+      void *opaque;
+   } 
+   bz_stream;
+
+
+#ifndef BZ_IMPORT
+#define BZ_EXPORT
+#endif
+
+#ifndef BZ_NO_STDIO
+/* Need a definitition for FILE */
+#include <stdio.h>
+#endif
+
+#ifdef _WIN32
+#   include <windows.h>
+#   ifdef small
+      /* windows.h define small to char */
+#      undef small
+#   endif
+#   ifdef BZ_EXPORT
+#   define BZ_API(func) WINAPI func
+#   define BZ_EXTERN extern
+#   else
+   /* import windows dll dynamically */
+#   define BZ_API(func) (WINAPI * func)
+#   define BZ_EXTERN
+#   endif
+#else
+#   define BZ_API(func) func
+#   define BZ_EXTERN extern
+#endif
+
+
+/*-- Core (low-level) library functions --*/
+
+BZ_EXTERN int BZ_API(BZ2_bzCompressInit) ( 
+      bz_stream* strm, 
+      int        blockSize100k, 
+      int        verbosity, 
+      int        workFactor 
+   );
+
+BZ_EXTERN int BZ_API(BZ2_bzCompress) ( 
+      bz_stream* strm, 
+      int action 
+   );
+
+BZ_EXTERN int BZ_API(BZ2_bzCompressEnd) ( 
+      bz_stream* strm 
+   );
+
+BZ_EXTERN int BZ_API(BZ2_bzDecompressInit) ( 
+      bz_stream *strm, 
+      int       verbosity, 
+      int       small
+   );
+
+BZ_EXTERN int BZ_API(BZ2_bzDecompress) ( 
+      bz_stream* strm 
+   );
+
+BZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) ( 
+      bz_stream *strm 
+   );
+
+
+
+/*-- High(er) level library functions --*/
+
+#ifndef BZ_NO_STDIO
+#define BZ_MAX_UNUSED 5000
+
+typedef void BZFILE;
+
+BZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) ( 
+      int*  bzerror,   
+      FILE* f, 
+      int   verbosity, 
+      int   small,
+      void* unused,    
+      int   nUnused 
+   );
+
+BZ_EXTERN void BZ_API(BZ2_bzReadClose) ( 
+      int*    bzerror, 
+      BZFILE* b 
+   );
+
+BZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) ( 
+      int*    bzerror, 
+      BZFILE* b, 
+      void**  unused,  
+      int*    nUnused 
+   );
+
+BZ_EXTERN int BZ_API(BZ2_bzRead) ( 
+      int*    bzerror, 
+      BZFILE* b, 
+      void*   buf, 
+      int     len 
+   );
+
+BZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) ( 
+      int*  bzerror,      
+      FILE* f, 
+      int   blockSize100k, 
+      int   verbosity, 
+      int   workFactor 
+   );
+
+BZ_EXTERN void BZ_API(BZ2_bzWrite) ( 
+      int*    bzerror, 
+      BZFILE* b, 
+      void*   buf, 
+      int     len 
+   );
+
+BZ_EXTERN void BZ_API(BZ2_bzWriteClose) ( 
+      int*          bzerror, 
+      BZFILE*       b, 
+      int           abandon, 
+      unsigned int* nbytes_in, 
+      unsigned int* nbytes_out 
+   );
+
+BZ_EXTERN void BZ_API(BZ2_bzWriteClose64) ( 
+      int*          bzerror, 
+      BZFILE*       b, 
+      int           abandon, 
+      unsigned int* nbytes_in_lo32, 
+      unsigned int* nbytes_in_hi32, 
+      unsigned int* nbytes_out_lo32, 
+      unsigned int* nbytes_out_hi32
+   );
+#endif
+
+
+/*-- Utility functions --*/
+
+BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) ( 
+      char*         dest, 
+      unsigned int* destLen,
+      char*         source, 
+      unsigned int  sourceLen,
+      int           blockSize100k, 
+      int           verbosity, 
+      int           workFactor 
+   );
+
+BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) ( 
+      char*         dest, 
+      unsigned int* destLen,
+      char*         source, 
+      unsigned int  sourceLen,
+      int           small, 
+      int           verbosity 
+   );
+
+
+/*--
+   Code contributed by Yoshioka Tsuneo (tsuneo at rr.iij4u.or.jp)
+   to support better zlib compatibility.
+   This code is not _officially_ part of libbzip2 (yet);
+   I haven't tested it, documented it, or considered the
+   threading-safeness of it.
+   If this code breaks, please contact both Yoshioka and me.
+--*/
+
+BZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) (
+      void
+   );
+
+#ifndef BZ_NO_STDIO
+BZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) (
+      const char *path,
+      const char *mode
+   );
+
+BZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) (
+      int        fd,
+      const char *mode
+   );
+         
+BZ_EXTERN int BZ_API(BZ2_bzread) (
+      BZFILE* b, 
+      void* buf, 
+      int len 
+   );
+
+BZ_EXTERN int BZ_API(BZ2_bzwrite) (
+      BZFILE* b, 
+      void*   buf, 
+      int     len 
+   );
+
+BZ_EXTERN int BZ_API(BZ2_bzflush) (
+      BZFILE* b
+   );
+
+BZ_EXTERN void BZ_API(BZ2_bzclose) (
+      BZFILE* b
+   );
+
+BZ_EXTERN const char * BZ_API(BZ2_bzerror) (
+      BZFILE *b, 
+      int    *errnum
+   );
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/*-------------------------------------------------------------*/
+/*--- end                                           bzlib.h ---*/
+/*-------------------------------------------------------------*/
diff --git a/libs/ext/bzip2/bzlib_private.h b/libs/ext/bzip2/bzlib_private.h
new file mode 100644
index 0000000..5d0217f
--- /dev/null
+++ b/libs/ext/bzip2/bzlib_private.h
@@ -0,0 +1,509 @@
+
+/*-------------------------------------------------------------*/
+/*--- Private header file for the library.                  ---*/
+/*---                                       bzlib_private.h ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
+   README file.
+
+   This program is released under the terms of the license contained
+   in the file LICENSE.
+   ------------------------------------------------------------------ */
+
+
+#ifndef _BZLIB_PRIVATE_H
+#define _BZLIB_PRIVATE_H
+
+#include <stdlib.h>
+
+#ifndef BZ_NO_STDIO
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#endif
+
+#include "bzlib.h"
+
+
+
+/*-- General stuff. --*/
+
+#define BZ_VERSION  "1.0.6, 6-Sept-2010"
+
+typedef char            Char;
+typedef unsigned char   Bool;
+typedef unsigned char   UChar;
+typedef int             Int32;
+typedef unsigned int    UInt32;
+typedef short           Int16;
+typedef unsigned short  UInt16;
+
+#define True  ((Bool)1)
+#define False ((Bool)0)
+
+#ifndef __GNUC__
+#define __inline__  /* */
+#endif 
+
+#ifndef BZ_NO_STDIO
+
+extern void BZ2_bz__AssertH__fail ( int errcode );
+#define AssertH(cond,errcode) \
+   { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); }
+
+#if BZ_DEBUG
+#define AssertD(cond,msg) \
+   { if (!(cond)) {       \
+      fprintf ( stderr,   \
+        "\n\nlibbzip2(debug build): internal error\n\t%s\n", msg );\
+      exit(1); \
+   }}
+#else
+#define AssertD(cond,msg) /* */
+#endif
+
+#define VPrintf0(zf) \
+   fprintf(stderr,zf)
+#define VPrintf1(zf,za1) \
+   fprintf(stderr,zf,za1)
+#define VPrintf2(zf,za1,za2) \
+   fprintf(stderr,zf,za1,za2)
+#define VPrintf3(zf,za1,za2,za3) \
+   fprintf(stderr,zf,za1,za2,za3)
+#define VPrintf4(zf,za1,za2,za3,za4) \
+   fprintf(stderr,zf,za1,za2,za3,za4)
+#define VPrintf5(zf,za1,za2,za3,za4,za5) \
+   fprintf(stderr,zf,za1,za2,za3,za4,za5)
+
+#else
+
+extern void bz_internal_error ( int errcode );
+#define AssertH(cond,errcode) \
+   { if (!(cond)) bz_internal_error ( errcode ); }
+#define AssertD(cond,msg)                do { } while (0)
+#define VPrintf0(zf)                     do { } while (0)
+#define VPrintf1(zf,za1)                 do { } while (0)
+#define VPrintf2(zf,za1,za2)             do { } while (0)
+#define VPrintf3(zf,za1,za2,za3)         do { } while (0)
+#define VPrintf4(zf,za1,za2,za3,za4)     do { } while (0)
+#define VPrintf5(zf,za1,za2,za3,za4,za5) do { } while (0)
+
+#endif
+
+
+#define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1)
+#define BZFREE(ppp)  (strm->bzfree)(strm->opaque,(ppp))
+
+
+/*-- Header bytes. --*/
+
+#define BZ_HDR_B 0x42   /* 'B' */
+#define BZ_HDR_Z 0x5a   /* 'Z' */
+#define BZ_HDR_h 0x68   /* 'h' */
+#define BZ_HDR_0 0x30   /* '0' */
+  
+/*-- Constants for the back end. --*/
+
+#define BZ_MAX_ALPHA_SIZE 258
+#define BZ_MAX_CODE_LEN    23
+
+#define BZ_RUNA 0
+#define BZ_RUNB 1
+
+#define BZ_N_GROUPS 6
+#define BZ_G_SIZE   50
+#define BZ_N_ITERS  4
+
+#define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE))
+
+
+
+/*-- Stuff for randomising repetitive blocks. --*/
+
+extern Int32 BZ2_rNums[512];
+
+#define BZ_RAND_DECLS                          \
+   Int32 rNToGo;                               \
+   Int32 rTPos                                 \
+
+#define BZ_RAND_INIT_MASK                      \
+   s->rNToGo = 0;                              \
+   s->rTPos  = 0                               \
+
+#define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0)
+
+#define BZ_RAND_UPD_MASK                       \
+   if (s->rNToGo == 0) {                       \
+      s->rNToGo = BZ2_rNums[s->rTPos];         \
+      s->rTPos++;                              \
+      if (s->rTPos == 512) s->rTPos = 0;       \
+   }                                           \
+   s->rNToGo--;
+
+
+
+/*-- Stuff for doing CRCs. --*/
+
+extern UInt32 BZ2_crc32Table[256];
+
+#define BZ_INITIALISE_CRC(crcVar)              \
+{                                              \
+   crcVar = 0xffffffffL;                       \
+}
+
+#define BZ_FINALISE_CRC(crcVar)                \
+{                                              \
+   crcVar = ~(crcVar);                         \
+}
+
+#define BZ_UPDATE_CRC(crcVar,cha)              \
+{                                              \
+   crcVar = (crcVar << 8) ^                    \
+            BZ2_crc32Table[(crcVar >> 24) ^    \
+                           ((UChar)cha)];      \
+}
+
+
+
+/*-- States and modes for compression. --*/
+
+#define BZ_M_IDLE      1
+#define BZ_M_RUNNING   2
+#define BZ_M_FLUSHING  3
+#define BZ_M_FINISHING 4
+
+#define BZ_S_OUTPUT    1
+#define BZ_S_INPUT     2
+
+#define BZ_N_RADIX 2
+#define BZ_N_QSORT 12
+#define BZ_N_SHELL 18
+#define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2)
+
+
+
+
+/*-- Structure holding all the compression-side stuff. --*/
+
+typedef
+   struct {
+      /* pointer back to the struct bz_stream */
+      bz_stream* strm;
+
+      /* mode this stream is in, and whether inputting */
+      /* or outputting data */
+      Int32    mode;
+      Int32    state;
+
+      /* remembers avail_in when flush/finish requested */
+      UInt32   avail_in_expect;
+
+      /* for doing the block sorting */
+      UInt32*  arr1;
+      UInt32*  arr2;
+      UInt32*  ftab;
+      Int32    origPtr;
+
+      /* aliases for arr1 and arr2 */
+      UInt32*  ptr;
+      UChar*   block;
+      UInt16*  mtfv;
+      UChar*   zbits;
+
+      /* for deciding when to use the fallback sorting algorithm */
+      Int32    workFactor;
+
+      /* run-length-encoding of the input */
+      UInt32   state_in_ch;
+      Int32    state_in_len;
+      BZ_RAND_DECLS;
+
+      /* input and output limits and current posns */
+      Int32    nblock;
+      Int32    nblockMAX;
+      Int32    numZ;
+      Int32    state_out_pos;
+
+      /* map of bytes used in block */
+      Int32    nInUse;
+      Bool     inUse[256];
+      UChar    unseqToSeq[256];
+
+      /* the buffer for bit stream creation */
+      UInt32   bsBuff;
+      Int32    bsLive;
+
+      /* block and combined CRCs */
+      UInt32   blockCRC;
+      UInt32   combinedCRC;
+
+      /* misc administratium */
+      Int32    verbosity;
+      Int32    blockNo;
+      Int32    blockSize100k;
+
+      /* stuff for coding the MTF values */
+      Int32    nMTF;
+      Int32    mtfFreq    [BZ_MAX_ALPHA_SIZE];
+      UChar    selector   [BZ_MAX_SELECTORS];
+      UChar    selectorMtf[BZ_MAX_SELECTORS];
+
+      UChar    len     [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+      Int32    code    [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+      Int32    rfreq   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+      /* second dimension: only 3 needed; 4 makes index calculations faster */
+      UInt32   len_pack[BZ_MAX_ALPHA_SIZE][4];
+
+   }
+   EState;
+
+
+
+/*-- externs for compression. --*/
+
+extern void 
+BZ2_blockSort ( EState* );
+
+extern void 
+BZ2_compressBlock ( EState*, Bool );
+
+extern void 
+BZ2_bsInitWrite ( EState* );
+
+extern void 
+BZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 );
+
+extern void 
+BZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 );
+
+
+
+/*-- states for decompression. --*/
+
+#define BZ_X_IDLE        1
+#define BZ_X_OUTPUT      2
+
+#define BZ_X_MAGIC_1     10
+#define BZ_X_MAGIC_2     11
+#define BZ_X_MAGIC_3     12
+#define BZ_X_MAGIC_4     13
+#define BZ_X_BLKHDR_1    14
+#define BZ_X_BLKHDR_2    15
+#define BZ_X_BLKHDR_3    16
+#define BZ_X_BLKHDR_4    17
+#define BZ_X_BLKHDR_5    18
+#define BZ_X_BLKHDR_6    19
+#define BZ_X_BCRC_1      20
+#define BZ_X_BCRC_2      21
+#define BZ_X_BCRC_3      22
+#define BZ_X_BCRC_4      23
+#define BZ_X_RANDBIT     24
+#define BZ_X_ORIGPTR_1   25
+#define BZ_X_ORIGPTR_2   26
+#define BZ_X_ORIGPTR_3   27
+#define BZ_X_MAPPING_1   28
+#define BZ_X_MAPPING_2   29
+#define BZ_X_SELECTOR_1  30
+#define BZ_X_SELECTOR_2  31
+#define BZ_X_SELECTOR_3  32
+#define BZ_X_CODING_1    33
+#define BZ_X_CODING_2    34
+#define BZ_X_CODING_3    35
+#define BZ_X_MTF_1       36
+#define BZ_X_MTF_2       37
+#define BZ_X_MTF_3       38
+#define BZ_X_MTF_4       39
+#define BZ_X_MTF_5       40
+#define BZ_X_MTF_6       41
+#define BZ_X_ENDHDR_2    42
+#define BZ_X_ENDHDR_3    43
+#define BZ_X_ENDHDR_4    44
+#define BZ_X_ENDHDR_5    45
+#define BZ_X_ENDHDR_6    46
+#define BZ_X_CCRC_1      47
+#define BZ_X_CCRC_2      48
+#define BZ_X_CCRC_3      49
+#define BZ_X_CCRC_4      50
+
+
+
+/*-- Constants for the fast MTF decoder. --*/
+
+#define MTFA_SIZE 4096
+#define MTFL_SIZE 16
+
+
+
+/*-- Structure holding all the decompression-side stuff. --*/
+
+typedef
+   struct {
+      /* pointer back to the struct bz_stream */
+      bz_stream* strm;
+
+      /* state indicator for this stream */
+      Int32    state;
+
+      /* for doing the final run-length decoding */
+      UChar    state_out_ch;
+      Int32    state_out_len;
+      Bool     blockRandomised;
+      BZ_RAND_DECLS;
+
+      /* the buffer for bit stream reading */
+      UInt32   bsBuff;
+      Int32    bsLive;
+
+      /* misc administratium */
+      Int32    blockSize100k;
+      Bool     smallDecompress;
+      Int32    currBlockNo;
+      Int32    verbosity;
+
+      /* for undoing the Burrows-Wheeler transform */
+      Int32    origPtr;
+      UInt32   tPos;
+      Int32    k0;
+      Int32    unzftab[256];
+      Int32    nblock_used;
+      Int32    cftab[257];
+      Int32    cftabCopy[257];
+
+      /* for undoing the Burrows-Wheeler transform (FAST) */
+      UInt32   *tt;
+
+      /* for undoing the Burrows-Wheeler transform (SMALL) */
+      UInt16   *ll16;
+      UChar    *ll4;
+
+      /* stored and calculated CRCs */
+      UInt32   storedBlockCRC;
+      UInt32   storedCombinedCRC;
+      UInt32   calculatedBlockCRC;
+      UInt32   calculatedCombinedCRC;
+
+      /* map of bytes used in block */
+      Int32    nInUse;
+      Bool     inUse[256];
+      Bool     inUse16[16];
+      UChar    seqToUnseq[256];
+
+      /* for decoding the MTF values */
+      UChar    mtfa   [MTFA_SIZE];
+      Int32    mtfbase[256 / MTFL_SIZE];
+      UChar    selector   [BZ_MAX_SELECTORS];
+      UChar    selectorMtf[BZ_MAX_SELECTORS];
+      UChar    len  [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+
+      Int32    limit  [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+      Int32    base   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+      Int32    perm   [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+      Int32    minLens[BZ_N_GROUPS];
+
+      /* save area for scalars in the main decompress code */
+      Int32    save_i;
+      Int32    save_j;
+      Int32    save_t;
+      Int32    save_alphaSize;
+      Int32    save_nGroups;
+      Int32    save_nSelectors;
+      Int32    save_EOB;
+      Int32    save_groupNo;
+      Int32    save_groupPos;
+      Int32    save_nextSym;
+      Int32    save_nblockMAX;
+      Int32    save_nblock;
+      Int32    save_es;
+      Int32    save_N;
+      Int32    save_curr;
+      Int32    save_zt;
+      Int32    save_zn; 
+      Int32    save_zvec;
+      Int32    save_zj;
+      Int32    save_gSel;
+      Int32    save_gMinlen;
+      Int32*   save_gLimit;
+      Int32*   save_gBase;
+      Int32*   save_gPerm;
+
+   }
+   DState;
+
+
+
+/*-- Macros for decompression. --*/
+
+#define BZ_GET_FAST(cccc)                     \
+    /* c_tPos is unsigned, hence test < 0 is pointless. */ \
+    if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \
+    s->tPos = s->tt[s->tPos];                 \
+    cccc = (UChar)(s->tPos & 0xff);           \
+    s->tPos >>= 8;
+
+#define BZ_GET_FAST_C(cccc)                   \
+    /* c_tPos is unsigned, hence test < 0 is pointless. */ \
+    if (c_tPos >= (UInt32)100000 * (UInt32)ro_blockSize100k) return True; \
+    c_tPos = c_tt[c_tPos];                    \
+    cccc = (UChar)(c_tPos & 0xff);            \
+    c_tPos >>= 8;
+
+#define SET_LL4(i,n)                                          \
+   { if (((i) & 0x1) == 0)                                    \
+        s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else    \
+        s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4);  \
+   }
+
+#define GET_LL4(i)                             \
+   ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF)
+
+#define SET_LL(i,n)                          \
+   { s->ll16[i] = (UInt16)(n & 0x0000ffff);  \
+     SET_LL4(i, n >> 16);                    \
+   }
+
+#define GET_LL(i) \
+   (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16))
+
+#define BZ_GET_SMALL(cccc)                            \
+    /* c_tPos is unsigned, hence test < 0 is pointless. */ \
+    if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \
+    cccc = BZ2_indexIntoF ( s->tPos, s->cftab );    \
+    s->tPos = GET_LL(s->tPos);
+
+
+/*-- externs for decompression. --*/
+
+extern Int32 
+BZ2_indexIntoF ( Int32, Int32* );
+
+extern Int32 
+BZ2_decompress ( DState* );
+
+extern void 
+BZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*,
+                           Int32,  Int32, Int32 );
+
+
+#endif
+
+
+/*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/
+
+#ifdef BZ_NO_STDIO
+#ifndef NULL
+#define NULL 0
+#endif
+#endif
+
+
+/*-------------------------------------------------------------*/
+/*--- end                                   bzlib_private.h ---*/
+/*-------------------------------------------------------------*/
diff --git a/libs/ext/bzip2/compress.c b/libs/ext/bzip2/compress.c
new file mode 100644
index 0000000..caf7696
--- /dev/null
+++ b/libs/ext/bzip2/compress.c
@@ -0,0 +1,672 @@
+
+/*-------------------------------------------------------------*/
+/*--- Compression machinery (not incl block sorting)        ---*/
+/*---                                            compress.c ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
+   README file.
+
+   This program is released under the terms of the license contained
+   in the file LICENSE.
+   ------------------------------------------------------------------ */
+
+
+/* CHANGES
+    0.9.0    -- original version.
+    0.9.0a/b -- no changes in this file.
+    0.9.0c   -- changed setting of nGroups in sendMTFValues() 
+                so as to do a bit better on small files
+*/
+
+#include "bzlib_private.h"
+
+
+/*---------------------------------------------------*/
+/*--- Bit stream I/O                              ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------------*/
+void BZ2_bsInitWrite ( EState* s )
+{
+   s->bsLive = 0;
+   s->bsBuff = 0;
+}
+
+
+/*---------------------------------------------------*/
+static
+void bsFinishWrite ( EState* s )
+{
+   while (s->bsLive > 0) {
+      s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24);
+      s->numZ++;
+      s->bsBuff <<= 8;
+      s->bsLive -= 8;
+   }
+}
+
+
+/*---------------------------------------------------*/
+#define bsNEEDW(nz)                           \
+{                                             \
+   while (s->bsLive >= 8) {                   \
+      s->zbits[s->numZ]                       \
+         = (UChar)(s->bsBuff >> 24);          \
+      s->numZ++;                              \
+      s->bsBuff <<= 8;                        \
+      s->bsLive -= 8;                         \
+   }                                          \
+}
+
+
+/*---------------------------------------------------*/
+static
+__inline__
+void bsW ( EState* s, Int32 n, UInt32 v )
+{
+   bsNEEDW ( n );
+   s->bsBuff |= (v << (32 - s->bsLive - n));
+   s->bsLive += n;
+}
+
+
+/*---------------------------------------------------*/
+static
+void bsPutUInt32 ( EState* s, UInt32 u )
+{
+   bsW ( s, 8, (u >> 24) & 0xffL );
+   bsW ( s, 8, (u >> 16) & 0xffL );
+   bsW ( s, 8, (u >>  8) & 0xffL );
+   bsW ( s, 8,  u        & 0xffL );
+}
+
+
+/*---------------------------------------------------*/
+static
+void bsPutUChar ( EState* s, UChar c )
+{
+   bsW( s, 8, (UInt32)c );
+}
+
+
+/*---------------------------------------------------*/
+/*--- The back end proper                         ---*/
+/*---------------------------------------------------*/
+
+/*---------------------------------------------------*/
+static
+void makeMaps_e ( EState* s )
+{
+   Int32 i;
+   s->nInUse = 0;
+   for (i = 0; i < 256; i++)
+      if (s->inUse[i]) {
+         s->unseqToSeq[i] = s->nInUse;
+         s->nInUse++;
+      }
+}
+
+
+/*---------------------------------------------------*/
+static
+void generateMTFValues ( EState* s )
+{
+   UChar   yy[256];
+   Int32   i, j;
+   Int32   zPend;
+   Int32   wr;
+   Int32   EOB;
+
+   /* 
+      After sorting (eg, here),
+         s->arr1 [ 0 .. s->nblock-1 ] holds sorted order,
+         and
+         ((UChar*)s->arr2) [ 0 .. s->nblock-1 ] 
+         holds the original block data.
+
+      The first thing to do is generate the MTF values,
+      and put them in
+         ((UInt16*)s->arr1) [ 0 .. s->nblock-1 ].
+      Because there are strictly fewer or equal MTF values
+      than block values, ptr values in this area are overwritten
+      with MTF values only when they are no longer needed.
+
+      The final compressed bitstream is generated into the
+      area starting at
+         (UChar*) (&((UChar*)s->arr2)[s->nblock])
+
+      These storage aliases are set up in bzCompressInit(),
+      except for the last one, which is arranged in 
+      compressBlock().
+   */
+   UInt32* ptr   = s->ptr;
+   UChar* block  = s->block;
+   UInt16* mtfv  = s->mtfv;
+
+   makeMaps_e ( s );
+   EOB = s->nInUse+1;
+
+   for (i = 0; i <= EOB; i++) s->mtfFreq[i] = 0;
+
+   wr = 0;
+   zPend = 0;
+   for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i;
+
+   for (i = 0; i < s->nblock; i++) {
+      UChar ll_i;
+      AssertD ( wr <= i, "generateMTFValues(1)" );
+      j = ptr[i]-1; if (j < 0) j += s->nblock;
+      ll_i = s->unseqToSeq[block[j]];
+      AssertD ( ll_i < s->nInUse, "generateMTFValues(2a)" );
+
+      if (yy[0] == ll_i) { 
+         zPend++;
+      } else {
+
+         if (zPend > 0) {
+            zPend--;
+            while (True) {
+               if (zPend & 1) {
+                  mtfv[wr] = BZ_RUNB; wr++; 
+                  s->mtfFreq[BZ_RUNB]++; 
+               } else {
+                  mtfv[wr] = BZ_RUNA; wr++; 
+                  s->mtfFreq[BZ_RUNA]++; 
+               }
+               if (zPend < 2) break;
+               zPend = (zPend - 2) / 2;
+            };
+            zPend = 0;
+         }
+         {
+            register UChar  rtmp;
+            register UChar* ryy_j;
+            register UChar  rll_i;
+            rtmp  = yy[1];
+            yy[1] = yy[0];
+            ryy_j = &(yy[1]);
+            rll_i = ll_i;
+            while ( rll_i != rtmp ) {
+               register UChar rtmp2;
+               ryy_j++;
+               rtmp2  = rtmp;
+               rtmp   = *ryy_j;
+               *ryy_j = rtmp2;
+            };
+            yy[0] = rtmp;
+            j = ryy_j - &(yy[0]);
+            mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++;
+         }
+
+      }
+   }
+
+   if (zPend > 0) {
+      zPend--;
+      while (True) {
+         if (zPend & 1) {
+            mtfv[wr] = BZ_RUNB; wr++; 
+            s->mtfFreq[BZ_RUNB]++; 
+         } else {
+            mtfv[wr] = BZ_RUNA; wr++; 
+            s->mtfFreq[BZ_RUNA]++; 
+         }
+         if (zPend < 2) break;
+         zPend = (zPend - 2) / 2;
+      };
+      zPend = 0;
+   }
+
+   mtfv[wr] = EOB; wr++; s->mtfFreq[EOB]++;
+
+   s->nMTF = wr;
+}
+
+
+/*---------------------------------------------------*/
+#define BZ_LESSER_ICOST  0
+#define BZ_GREATER_ICOST 15
+
+static
+void sendMTFValues ( EState* s )
+{
+   Int32 v, t, i, j, gs, ge, totc, bt, bc, iter;
+   Int32 nSelectors, alphaSize, minLen, maxLen, selCtr;
+   Int32 nGroups, nBytes;
+
+   /*--
+   UChar  len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+   is a global since the decoder also needs it.
+
+   Int32  code[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+   Int32  rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE];
+   are also globals only used in this proc.
+   Made global to keep stack frame size small.
+   --*/
+
+
+   UInt16 cost[BZ_N_GROUPS];
+   Int32  fave[BZ_N_GROUPS];
+
+   UInt16* mtfv = s->mtfv;
+
+   if (s->verbosity >= 3)
+      VPrintf3( "      %d in block, %d after MTF & 1-2 coding, "
+                "%d+2 syms in use\n", 
+                s->nblock, s->nMTF, s->nInUse );
+
+   alphaSize = s->nInUse+2;
+   for (t = 0; t < BZ_N_GROUPS; t++)
+      for (v = 0; v < alphaSize; v++)
+         s->len[t][v] = BZ_GREATER_ICOST;
+
+   /*--- Decide how many coding tables to use ---*/
+   AssertH ( s->nMTF > 0, 3001 );
+   if (s->nMTF < 200)  nGroups = 2; else
+   if (s->nMTF < 600)  nGroups = 3; else
+   if (s->nMTF < 1200) nGroups = 4; else
+   if (s->nMTF < 2400) nGroups = 5; else
+                       nGroups = 6;
+
+   /*--- Generate an initial set of coding tables ---*/
+   { 
+      Int32 nPart, remF, tFreq, aFreq;
+
+      nPart = nGroups;
+      remF  = s->nMTF;
+      gs = 0;
+      while (nPart > 0) {
+         tFreq = remF / nPart;
+         ge = gs-1;
+         aFreq = 0;
+         while (aFreq < tFreq && ge < alphaSize-1) {
+            ge++;
+            aFreq += s->mtfFreq[ge];
+         }
+
+         if (ge > gs 
+             && nPart != nGroups && nPart != 1 
+             && ((nGroups-nPart) % 2 == 1)) {
+            aFreq -= s->mtfFreq[ge];
+            ge--;
+         }
+
+         if (s->verbosity >= 3)
+            VPrintf5( "      initial group %d, [%d .. %d], "
+                      "has %d syms (%4.1f%%)\n",
+                      nPart, gs, ge, aFreq, 
+                      (100.0 * (float)aFreq) / (float)(s->nMTF) );
+ 
+         for (v = 0; v < alphaSize; v++)
+            if (v >= gs && v <= ge) 
+               s->len[nPart-1][v] = BZ_LESSER_ICOST; else
+               s->len[nPart-1][v] = BZ_GREATER_ICOST;
+ 
+         nPart--;
+         gs = ge+1;
+         remF -= aFreq;
+      }
+   }
+
+   /*--- 
+      Iterate up to BZ_N_ITERS times to improve the tables.
+   ---*/
+   for (iter = 0; iter < BZ_N_ITERS; iter++) {
+
+      for (t = 0; t < nGroups; t++) fave[t] = 0;
+
+      for (t = 0; t < nGroups; t++)
+         for (v = 0; v < alphaSize; v++)
+            s->rfreq[t][v] = 0;
+
+      /*---
+        Set up an auxiliary length table which is used to fast-track
+	the common case (nGroups == 6). 
+      ---*/
+      if (nGroups == 6) {
+         for (v = 0; v < alphaSize; v++) {
+            s->len_pack[v][0] = (s->len[1][v] << 16) | s->len[0][v];
+            s->len_pack[v][1] = (s->len[3][v] << 16) | s->len[2][v];
+            s->len_pack[v][2] = (s->len[5][v] << 16) | s->len[4][v];
+	 }
+      }
+
+      nSelectors = 0;
+      totc = 0;
+      gs = 0;
+      while (True) {
+
+         /*--- Set group start & end marks. --*/
+         if (gs >= s->nMTF) break;
+         ge = gs + BZ_G_SIZE - 1; 
+         if (ge >= s->nMTF) ge = s->nMTF-1;
+
+         /*-- 
+            Calculate the cost of this group as coded
+            by each of the coding tables.
+         --*/
+         for (t = 0; t < nGroups; t++) cost[t] = 0;
+
+         if (nGroups == 6 && 50 == ge-gs+1) {
+            /*--- fast track the common case ---*/
+            register UInt32 cost01, cost23, cost45;
+            register UInt16 icv;
+            cost01 = cost23 = cost45 = 0;
+
+#           define BZ_ITER(nn)                \
+               icv = mtfv[gs+(nn)];           \
+               cost01 += s->len_pack[icv][0]; \
+               cost23 += s->len_pack[icv][1]; \
+               cost45 += s->len_pack[icv][2]; \
+
+            BZ_ITER(0);  BZ_ITER(1);  BZ_ITER(2);  BZ_ITER(3);  BZ_ITER(4);
+            BZ_ITER(5);  BZ_ITER(6);  BZ_ITER(7);  BZ_ITER(8);  BZ_ITER(9);
+            BZ_ITER(10); BZ_ITER(11); BZ_ITER(12); BZ_ITER(13); BZ_ITER(14);
+            BZ_ITER(15); BZ_ITER(16); BZ_ITER(17); BZ_ITER(18); BZ_ITER(19);
+            BZ_ITER(20); BZ_ITER(21); BZ_ITER(22); BZ_ITER(23); BZ_ITER(24);
+            BZ_ITER(25); BZ_ITER(26); BZ_ITER(27); BZ_ITER(28); BZ_ITER(29);
+            BZ_ITER(30); BZ_ITER(31); BZ_ITER(32); BZ_ITER(33); BZ_ITER(34);
+            BZ_ITER(35); BZ_ITER(36); BZ_ITER(37); BZ_ITER(38); BZ_ITER(39);
+            BZ_ITER(40); BZ_ITER(41); BZ_ITER(42); BZ_ITER(43); BZ_ITER(44);
+            BZ_ITER(45); BZ_ITER(46); BZ_ITER(47); BZ_ITER(48); BZ_ITER(49);
+
+#           undef BZ_ITER
+
+            cost[0] = cost01 & 0xffff; cost[1] = cost01 >> 16;
+            cost[2] = cost23 & 0xffff; cost[3] = cost23 >> 16;
+            cost[4] = cost45 & 0xffff; cost[5] = cost45 >> 16;
+
+         } else {
+	    /*--- slow version which correctly handles all situations ---*/
+            for (i = gs; i <= ge; i++) { 
+               UInt16 icv = mtfv[i];
+               for (t = 0; t < nGroups; t++) cost[t] += s->len[t][icv];
+            }
+         }
+ 
+         /*-- 
+            Find the coding table which is best for this group,
+            and record its identity in the selector table.
+         --*/
+         bc = 999999999; bt = -1;
+         for (t = 0; t < nGroups; t++)
+            if (cost[t] < bc) { bc = cost[t]; bt = t; };
+         totc += bc;
+         fave[bt]++;
+         s->selector[nSelectors] = bt;
+         nSelectors++;
+
+         /*-- 
+            Increment the symbol frequencies for the selected table.
+          --*/
+         if (nGroups == 6 && 50 == ge-gs+1) {
+            /*--- fast track the common case ---*/
+
+#           define BZ_ITUR(nn) s->rfreq[bt][ mtfv[gs+(nn)] ]++
+
+            BZ_ITUR(0);  BZ_ITUR(1);  BZ_ITUR(2);  BZ_ITUR(3);  BZ_ITUR(4);
+            BZ_ITUR(5);  BZ_ITUR(6);  BZ_ITUR(7);  BZ_ITUR(8);  BZ_ITUR(9);
+            BZ_ITUR(10); BZ_ITUR(11); BZ_ITUR(12); BZ_ITUR(13); BZ_ITUR(14);
+            BZ_ITUR(15); BZ_ITUR(16); BZ_ITUR(17); BZ_ITUR(18); BZ_ITUR(19);
+            BZ_ITUR(20); BZ_ITUR(21); BZ_ITUR(22); BZ_ITUR(23); BZ_ITUR(24);
+            BZ_ITUR(25); BZ_ITUR(26); BZ_ITUR(27); BZ_ITUR(28); BZ_ITUR(29);
+            BZ_ITUR(30); BZ_ITUR(31); BZ_ITUR(32); BZ_ITUR(33); BZ_ITUR(34);
+            BZ_ITUR(35); BZ_ITUR(36); BZ_ITUR(37); BZ_ITUR(38); BZ_ITUR(39);
+            BZ_ITUR(40); BZ_ITUR(41); BZ_ITUR(42); BZ_ITUR(43); BZ_ITUR(44);
+            BZ_ITUR(45); BZ_ITUR(46); BZ_ITUR(47); BZ_ITUR(48); BZ_ITUR(49);
+
+#           undef BZ_ITUR
+
+         } else {
+	    /*--- slow version which correctly handles all situations ---*/
+            for (i = gs; i <= ge; i++)
+               s->rfreq[bt][ mtfv[i] ]++;
+         }
+
+         gs = ge+1;
+      }
+      if (s->verbosity >= 3) {
+         VPrintf2 ( "      pass %d: size is %d, grp uses are ", 
+                   iter+1, totc/8 );
+         for (t = 0; t < nGroups; t++)
+            VPrintf1 ( "%d ", fave[t] );
+         VPrintf0 ( "\n" );
+      }
+
+      /*--
+        Recompute the tables based on the accumulated frequencies.
+      --*/
+      /* maxLen was changed from 20 to 17 in bzip2-1.0.3.  See 
+         comment in huffman.c for details. */
+      for (t = 0; t < nGroups; t++)
+         BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]), 
+                                 alphaSize, 17 /*20*/ );
+   }
+
+
+   AssertH( nGroups < 8, 3002 );
+   AssertH( nSelectors < 32768 &&
+            nSelectors <= (2 + (900000 / BZ_G_SIZE)),
+            3003 );
+
+
+   /*--- Compute MTF values for the selectors. ---*/
+   {
+      UChar pos[BZ_N_GROUPS], ll_i, tmp2, tmp;
+      for (i = 0; i < nGroups; i++) pos[i] = i;
+      for (i = 0; i < nSelectors; i++) {
+         ll_i = s->selector[i];
+         j = 0;
+         tmp = pos[j];
+         while ( ll_i != tmp ) {
+            j++;
+            tmp2 = tmp;
+            tmp = pos[j];
+            pos[j] = tmp2;
+         };
+         pos[0] = tmp;
+         s->selectorMtf[i] = j;
+      }
+   };
+
+   /*--- Assign actual codes for the tables. --*/
+   for (t = 0; t < nGroups; t++) {
+      minLen = 32;
+      maxLen = 0;
+      for (i = 0; i < alphaSize; i++) {
+         if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
+         if (s->len[t][i] < minLen) minLen = s->len[t][i];
+      }
+      AssertH ( !(maxLen > 17 /*20*/ ), 3004 );
+      AssertH ( !(minLen < 1),  3005 );
+      BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]), 
+                          minLen, maxLen, alphaSize );
+   }
+
+   /*--- Transmit the mapping table. ---*/
+   { 
+      Bool inUse16[16];
+      for (i = 0; i < 16; i++) {
+          inUse16[i] = False;
+          for (j = 0; j < 16; j++)
+             if (s->inUse[i * 16 + j]) inUse16[i] = True;
+      }
+     
+      nBytes = s->numZ;
+      for (i = 0; i < 16; i++)
+         if (inUse16[i]) bsW(s,1,1); else bsW(s,1,0);
+
+      for (i = 0; i < 16; i++)
+         if (inUse16[i])
+            for (j = 0; j < 16; j++) {
+               if (s->inUse[i * 16 + j]) bsW(s,1,1); else bsW(s,1,0);
+            }
+
+      if (s->verbosity >= 3) 
+         VPrintf1( "      bytes: mapping %d, ", s->numZ-nBytes );
+   }
+
+   /*--- Now the selectors. ---*/
+   nBytes = s->numZ;
+   bsW ( s, 3, nGroups );
+   bsW ( s, 15, nSelectors );
+   for (i = 0; i < nSelectors; i++) { 
+      for (j = 0; j < s->selectorMtf[i]; j++) bsW(s,1,1);
+      bsW(s,1,0);
+   }
+   if (s->verbosity >= 3)
+      VPrintf1( "selectors %d, ", s->numZ-nBytes );
+
+   /*--- Now the coding tables. ---*/
+   nBytes = s->numZ;
+
+   for (t = 0; t < nGroups; t++) {
+      Int32 curr = s->len[t][0];
+      bsW ( s, 5, curr );
+      for (i = 0; i < alphaSize; i++) {
+         while (curr < s->len[t][i]) { bsW(s,2,2); curr++; /* 10 */ };
+         while (curr > s->len[t][i]) { bsW(s,2,3); curr--; /* 11 */ };
+         bsW ( s, 1, 0 );
+      }
+   }
+
+   if (s->verbosity >= 3)
+      VPrintf1 ( "code lengths %d, ", s->numZ-nBytes );
+
+   /*--- And finally, the block data proper ---*/
+   nBytes = s->numZ;
+   selCtr = 0;
+   gs = 0;
+   while (True) {
+      if (gs >= s->nMTF) break;
+      ge = gs + BZ_G_SIZE - 1; 
+      if (ge >= s->nMTF) ge = s->nMTF-1;
+      AssertH ( s->selector[selCtr] < nGroups, 3006 );
+
+      if (nGroups == 6 && 50 == ge-gs+1) {
+            /*--- fast track the common case ---*/
+            UInt16 mtfv_i;
+            UChar* s_len_sel_selCtr 
+               = &(s->len[s->selector[selCtr]][0]);
+            Int32* s_code_sel_selCtr
+               = &(s->code[s->selector[selCtr]][0]);
+
+#           define BZ_ITAH(nn)                      \
+               mtfv_i = mtfv[gs+(nn)];              \
+               bsW ( s,                             \
+                     s_len_sel_selCtr[mtfv_i],      \
+                     s_code_sel_selCtr[mtfv_i] )
+
+            BZ_ITAH(0);  BZ_ITAH(1);  BZ_ITAH(2);  BZ_ITAH(3);  BZ_ITAH(4);
+            BZ_ITAH(5);  BZ_ITAH(6);  BZ_ITAH(7);  BZ_ITAH(8);  BZ_ITAH(9);
+            BZ_ITAH(10); BZ_ITAH(11); BZ_ITAH(12); BZ_ITAH(13); BZ_ITAH(14);
+            BZ_ITAH(15); BZ_ITAH(16); BZ_ITAH(17); BZ_ITAH(18); BZ_ITAH(19);
+            BZ_ITAH(20); BZ_ITAH(21); BZ_ITAH(22); BZ_ITAH(23); BZ_ITAH(24);
+            BZ_ITAH(25); BZ_ITAH(26); BZ_ITAH(27); BZ_ITAH(28); BZ_ITAH(29);
+            BZ_ITAH(30); BZ_ITAH(31); BZ_ITAH(32); BZ_ITAH(33); BZ_ITAH(34);
+            BZ_ITAH(35); BZ_ITAH(36); BZ_ITAH(37); BZ_ITAH(38); BZ_ITAH(39);
+            BZ_ITAH(40); BZ_ITAH(41); BZ_ITAH(42); BZ_ITAH(43); BZ_ITAH(44);
+            BZ_ITAH(45); BZ_ITAH(46); BZ_ITAH(47); BZ_ITAH(48); BZ_ITAH(49);
+
+#           undef BZ_ITAH
+
+      } else {
+	 /*--- slow version which correctly handles all situations ---*/
+         for (i = gs; i <= ge; i++) {
+            bsW ( s, 
+                  s->len  [s->selector[selCtr]] [mtfv[i]],
+                  s->code [s->selector[selCtr]] [mtfv[i]] );
+         }
+      }
+
+
+      gs = ge+1;
+      selCtr++;
+   }
+   AssertH( selCtr == nSelectors, 3007 );
+
+   if (s->verbosity >= 3)
+      VPrintf1( "codes %d\n", s->numZ-nBytes );
+}
+
+
+/*---------------------------------------------------*/
+void BZ2_compressBlock ( EState* s, Bool is_last_block )
+{
+   if (s->nblock > 0) {
+
+      BZ_FINALISE_CRC ( s->blockCRC );
+      s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31);
+      s->combinedCRC ^= s->blockCRC;
+      if (s->blockNo > 1) s->numZ = 0;
+
+      if (s->verbosity >= 2)
+         VPrintf4( "    block %d: crc = 0x%08x, "
+                   "combined CRC = 0x%08x, size = %d\n",
+                   s->blockNo, s->blockCRC, s->combinedCRC, s->nblock );
+
+      BZ2_blockSort ( s );
+   }
+
+   s->zbits = (UChar*) (&((UChar*)s->arr2)[s->nblock]);
+
+   /*-- If this is the first block, create the stream header. --*/
+   if (s->blockNo == 1) {
+      BZ2_bsInitWrite ( s );
+      bsPutUChar ( s, BZ_HDR_B );
+      bsPutUChar ( s, BZ_HDR_Z );
+      bsPutUChar ( s, BZ_HDR_h );
+      bsPutUChar ( s, (UChar)(BZ_HDR_0 + s->blockSize100k) );
+   }
+
+   if (s->nblock > 0) {
+
+      bsPutUChar ( s, 0x31 ); bsPutUChar ( s, 0x41 );
+      bsPutUChar ( s, 0x59 ); bsPutUChar ( s, 0x26 );
+      bsPutUChar ( s, 0x53 ); bsPutUChar ( s, 0x59 );
+
+      /*-- Now the block's CRC, so it is in a known place. --*/
+      bsPutUInt32 ( s, s->blockCRC );
+
+      /*-- 
+         Now a single bit indicating (non-)randomisation. 
+         As of version 0.9.5, we use a better sorting algorithm
+         which makes randomisation unnecessary.  So always set
+         the randomised bit to 'no'.  Of course, the decoder
+         still needs to be able to handle randomised blocks
+         so as to maintain backwards compatibility with
+         older versions of bzip2.
+      --*/
+      bsW(s,1,0);
+
+      bsW ( s, 24, s->origPtr );
+      generateMTFValues ( s );
+      sendMTFValues ( s );
+   }
+
+
+   /*-- If this is the last block, add the stream trailer. --*/
+   if (is_last_block) {
+
+      bsPutUChar ( s, 0x17 ); bsPutUChar ( s, 0x72 );
+      bsPutUChar ( s, 0x45 ); bsPutUChar ( s, 0x38 );
+      bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 );
+      bsPutUInt32 ( s, s->combinedCRC );
+      if (s->verbosity >= 2)
+         VPrintf1( "    final combined CRC = 0x%08x\n   ", s->combinedCRC );
+      bsFinishWrite ( s );
+   }
+}
+
+
+/*-------------------------------------------------------------*/
+/*--- end                                        compress.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/libs/ext/bzip2/crctable.c b/libs/ext/bzip2/crctable.c
new file mode 100644
index 0000000..1fea7e9
--- /dev/null
+++ b/libs/ext/bzip2/crctable.c
@@ -0,0 +1,104 @@
+
+/*-------------------------------------------------------------*/
+/*--- Table for doing CRCs                                  ---*/
+/*---                                            crctable.c ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
+   README file.
+
+   This program is released under the terms of the license contained
+   in the file LICENSE.
+   ------------------------------------------------------------------ */
+
+
+#include "bzlib_private.h"
+
+/*--
+  I think this is an implementation of the AUTODIN-II,
+  Ethernet & FDDI 32-bit CRC standard.  Vaguely derived
+  from code by Rob Warnock, in Section 51 of the
+  comp.compression FAQ.
+--*/
+
+UInt32 BZ2_crc32Table[256] = {
+
+   /*-- Ugly, innit? --*/
+
+   0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L,
+   0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L,
+   0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L,
+   0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL,
+   0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L,
+   0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L,
+   0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L,
+   0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL,
+   0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L,
+   0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L,
+   0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L,
+   0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL,
+   0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L,
+   0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L,
+   0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L,
+   0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL,
+   0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL,
+   0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L,
+   0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L,
+   0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL,
+   0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL,
+   0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L,
+   0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L,
+   0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL,
+   0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL,
+   0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L,
+   0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L,
+   0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL,
+   0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL,
+   0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L,
+   0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L,
+   0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL,
+   0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L,
+   0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL,
+   0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL,
+   0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L,
+   0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L,
+   0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL,
+   0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL,
+   0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L,
+   0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L,
+   0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL,
+   0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL,
+   0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L,
+   0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L,
+   0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL,
+   0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL,
+   0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L,
+   0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L,
+   0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL,
+   0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L,
+   0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L,
+   0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L,
+   0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL,
+   0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L,
+   0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L,
+   0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L,
+   0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL,
+   0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L,
+   0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L,
+   0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L,
+   0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL,
+   0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L,
+   0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L
+};
+
+
+/*-------------------------------------------------------------*/
+/*--- end                                        crctable.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/libs/ext/bzip2/decompress.c b/libs/ext/bzip2/decompress.c
new file mode 100644
index 0000000..311f566
--- /dev/null
+++ b/libs/ext/bzip2/decompress.c
@@ -0,0 +1,646 @@
+
+/*-------------------------------------------------------------*/
+/*--- Decompression machinery                               ---*/
+/*---                                          decompress.c ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
+   README file.
+
+   This program is released under the terms of the license contained
+   in the file LICENSE.
+   ------------------------------------------------------------------ */
+
+
+#include "bzlib_private.h"
+
+
+/*---------------------------------------------------*/
+static
+void makeMaps_d ( DState* s )
+{
+   Int32 i;
+   s->nInUse = 0;
+   for (i = 0; i < 256; i++)
+      if (s->inUse[i]) {
+         s->seqToUnseq[s->nInUse] = i;
+         s->nInUse++;
+      }
+}
+
+
+/*---------------------------------------------------*/
+#define RETURN(rrr)                               \
+   { retVal = rrr; goto save_state_and_return; };
+
+#define GET_BITS(lll,vvv,nnn)                     \
+   case lll: s->state = lll;                      \
+   while (True) {                                 \
+      if (s->bsLive >= nnn) {                     \
+         UInt32 v;                                \
+         v = (s->bsBuff >>                        \
+             (s->bsLive-nnn)) & ((1 << nnn)-1);   \
+         s->bsLive -= nnn;                        \
+         vvv = v;                                 \
+         break;                                   \
+      }                                           \
+      if (s->strm->avail_in == 0) RETURN(BZ_OK);  \
+      s->bsBuff                                   \
+         = (s->bsBuff << 8) |                     \
+           ((UInt32)                              \
+              (*((UChar*)(s->strm->next_in))));   \
+      s->bsLive += 8;                             \
+      s->strm->next_in++;                         \
+      s->strm->avail_in--;                        \
+      s->strm->total_in_lo32++;                   \
+      if (s->strm->total_in_lo32 == 0)            \
+         s->strm->total_in_hi32++;                \
+   }
+
+#define GET_UCHAR(lll,uuu)                        \
+   GET_BITS(lll,uuu,8)
+
+#define GET_BIT(lll,uuu)                          \
+   GET_BITS(lll,uuu,1)
+
+/*---------------------------------------------------*/
+#define GET_MTF_VAL(label1,label2,lval)           \
+{                                                 \
+   if (groupPos == 0) {                           \
+      groupNo++;                                  \
+      if (groupNo >= nSelectors)                  \
+         RETURN(BZ_DATA_ERROR);                   \
+      groupPos = BZ_G_SIZE;                       \
+      gSel = s->selector[groupNo];                \
+      gMinlen = s->minLens[gSel];                 \
+      gLimit = &(s->limit[gSel][0]);              \
+      gPerm = &(s->perm[gSel][0]);                \
+      gBase = &(s->base[gSel][0]);                \
+   }                                              \
+   groupPos--;                                    \
+   zn = gMinlen;                                  \
+   GET_BITS(label1, zvec, zn);                    \
+   while (1) {                                    \
+      if (zn > 20 /* the longest code */)         \
+         RETURN(BZ_DATA_ERROR);                   \
+      if (zvec <= gLimit[zn]) break;              \
+      zn++;                                       \
+      GET_BIT(label2, zj);                        \
+      zvec = (zvec << 1) | zj;                    \
+   };                                             \
+   if (zvec - gBase[zn] < 0                       \
+       || zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE)  \
+      RETURN(BZ_DATA_ERROR);                      \
+   lval = gPerm[zvec - gBase[zn]];                \
+}
+
+
+/*---------------------------------------------------*/
+Int32 BZ2_decompress ( DState* s )
+{
+   UChar      uc;
+   Int32      retVal;
+   Int32      minLen, maxLen;
+   bz_stream* strm = s->strm;
+
+   /* stuff that needs to be saved/restored */
+   Int32  i;
+   Int32  j;
+   Int32  t;
+   Int32  alphaSize;
+   Int32  nGroups;
+   Int32  nSelectors;
+   Int32  EOB;
+   Int32  groupNo;
+   Int32  groupPos;
+   Int32  nextSym;
+   Int32  nblockMAX;
+   Int32  nblock;
+   Int32  es;
+   Int32  N;
+   Int32  curr;
+   Int32  zt;
+   Int32  zn; 
+   Int32  zvec;
+   Int32  zj;
+   Int32  gSel;
+   Int32  gMinlen;
+   Int32* gLimit;
+   Int32* gBase;
+   Int32* gPerm;
+
+   if (s->state == BZ_X_MAGIC_1) {
+      /*initialise the save area*/
+      s->save_i           = 0;
+      s->save_j           = 0;
+      s->save_t           = 0;
+      s->save_alphaSize   = 0;
+      s->save_nGroups     = 0;
+      s->save_nSelectors  = 0;
+      s->save_EOB         = 0;
+      s->save_groupNo     = 0;
+      s->save_groupPos    = 0;
+      s->save_nextSym     = 0;
+      s->save_nblockMAX   = 0;
+      s->save_nblock      = 0;
+      s->save_es          = 0;
+      s->save_N           = 0;
+      s->save_curr        = 0;
+      s->save_zt          = 0;
+      s->save_zn          = 0;
+      s->save_zvec        = 0;
+      s->save_zj          = 0;
+      s->save_gSel        = 0;
+      s->save_gMinlen     = 0;
+      s->save_gLimit      = NULL;
+      s->save_gBase       = NULL;
+      s->save_gPerm       = NULL;
+   }
+
+   /*restore from the save area*/
+   i           = s->save_i;
+   j           = s->save_j;
+   t           = s->save_t;
+   alphaSize   = s->save_alphaSize;
+   nGroups     = s->save_nGroups;
+   nSelectors  = s->save_nSelectors;
+   EOB         = s->save_EOB;
+   groupNo     = s->save_groupNo;
+   groupPos    = s->save_groupPos;
+   nextSym     = s->save_nextSym;
+   nblockMAX   = s->save_nblockMAX;
+   nblock      = s->save_nblock;
+   es          = s->save_es;
+   N           = s->save_N;
+   curr        = s->save_curr;
+   zt          = s->save_zt;
+   zn          = s->save_zn; 
+   zvec        = s->save_zvec;
+   zj          = s->save_zj;
+   gSel        = s->save_gSel;
+   gMinlen     = s->save_gMinlen;
+   gLimit      = s->save_gLimit;
+   gBase       = s->save_gBase;
+   gPerm       = s->save_gPerm;
+
+   retVal = BZ_OK;
+
+   switch (s->state) {
+
+      GET_UCHAR(BZ_X_MAGIC_1, uc);
+      if (uc != BZ_HDR_B) RETURN(BZ_DATA_ERROR_MAGIC);
+
+      GET_UCHAR(BZ_X_MAGIC_2, uc);
+      if (uc != BZ_HDR_Z) RETURN(BZ_DATA_ERROR_MAGIC);
+
+      GET_UCHAR(BZ_X_MAGIC_3, uc)
+      if (uc != BZ_HDR_h) RETURN(BZ_DATA_ERROR_MAGIC);
+
+      GET_BITS(BZ_X_MAGIC_4, s->blockSize100k, 8)
+      if (s->blockSize100k < (BZ_HDR_0 + 1) || 
+          s->blockSize100k > (BZ_HDR_0 + 9)) RETURN(BZ_DATA_ERROR_MAGIC);
+      s->blockSize100k -= BZ_HDR_0;
+
+      if (s->smallDecompress) {
+         s->ll16 = BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) );
+         s->ll4  = BZALLOC( 
+                      ((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar) 
+                   );
+         if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR);
+      } else {
+         s->tt  = BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) );
+         if (s->tt == NULL) RETURN(BZ_MEM_ERROR);
+      }
+
+      GET_UCHAR(BZ_X_BLKHDR_1, uc);
+
+      if (uc == 0x17) goto endhdr_2;
+      if (uc != 0x31) RETURN(BZ_DATA_ERROR);
+      GET_UCHAR(BZ_X_BLKHDR_2, uc);
+      if (uc != 0x41) RETURN(BZ_DATA_ERROR);
+      GET_UCHAR(BZ_X_BLKHDR_3, uc);
+      if (uc != 0x59) RETURN(BZ_DATA_ERROR);
+      GET_UCHAR(BZ_X_BLKHDR_4, uc);
+      if (uc != 0x26) RETURN(BZ_DATA_ERROR);
+      GET_UCHAR(BZ_X_BLKHDR_5, uc);
+      if (uc != 0x53) RETURN(BZ_DATA_ERROR);
+      GET_UCHAR(BZ_X_BLKHDR_6, uc);
+      if (uc != 0x59) RETURN(BZ_DATA_ERROR);
+
+      s->currBlockNo++;
+      if (s->verbosity >= 2)
+         VPrintf1 ( "\n    [%d: huff+mtf ", s->currBlockNo );
+ 
+      s->storedBlockCRC = 0;
+      GET_UCHAR(BZ_X_BCRC_1, uc);
+      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
+      GET_UCHAR(BZ_X_BCRC_2, uc);
+      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
+      GET_UCHAR(BZ_X_BCRC_3, uc);
+      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
+      GET_UCHAR(BZ_X_BCRC_4, uc);
+      s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc);
+
+      GET_BITS(BZ_X_RANDBIT, s->blockRandomised, 1);
+
+      s->origPtr = 0;
+      GET_UCHAR(BZ_X_ORIGPTR_1, uc);
+      s->origPtr = (s->origPtr << 8) | ((Int32)uc);
+      GET_UCHAR(BZ_X_ORIGPTR_2, uc);
+      s->origPtr = (s->origPtr << 8) | ((Int32)uc);
+      GET_UCHAR(BZ_X_ORIGPTR_3, uc);
+      s->origPtr = (s->origPtr << 8) | ((Int32)uc);
+
+      if (s->origPtr < 0)
+         RETURN(BZ_DATA_ERROR);
+      if (s->origPtr > 10 + 100000*s->blockSize100k) 
+         RETURN(BZ_DATA_ERROR);
+
+      /*--- Receive the mapping table ---*/
+      for (i = 0; i < 16; i++) {
+         GET_BIT(BZ_X_MAPPING_1, uc);
+         if (uc == 1) 
+            s->inUse16[i] = True; else 
+            s->inUse16[i] = False;
+      }
+
+      for (i = 0; i < 256; i++) s->inUse[i] = False;
+
+      for (i = 0; i < 16; i++)
+         if (s->inUse16[i])
+            for (j = 0; j < 16; j++) {
+               GET_BIT(BZ_X_MAPPING_2, uc);
+               if (uc == 1) s->inUse[i * 16 + j] = True;
+            }
+      makeMaps_d ( s );
+      if (s->nInUse == 0) RETURN(BZ_DATA_ERROR);
+      alphaSize = s->nInUse+2;
+
+      /*--- Now the selectors ---*/
+      GET_BITS(BZ_X_SELECTOR_1, nGroups, 3);
+      if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR);
+      GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15);
+      if (nSelectors < 1) RETURN(BZ_DATA_ERROR);
+      for (i = 0; i < nSelectors; i++) {
+         j = 0;
+         while (True) {
+            GET_BIT(BZ_X_SELECTOR_3, uc);
+            if (uc == 0) break;
+            j++;
+            if (j >= nGroups) RETURN(BZ_DATA_ERROR);
+         }
+         s->selectorMtf[i] = j;
+      }
+
+      /*--- Undo the MTF values for the selectors. ---*/
+      {
+         UChar pos[BZ_N_GROUPS], tmp, v;
+         for (v = 0; v < nGroups; v++) pos[v] = v;
+   
+         for (i = 0; i < nSelectors; i++) {
+            v = s->selectorMtf[i];
+            tmp = pos[v];
+            while (v > 0) { pos[v] = pos[v-1]; v--; }
+            pos[0] = tmp;
+            s->selector[i] = tmp;
+         }
+      }
+
+      /*--- Now the coding tables ---*/
+      for (t = 0; t < nGroups; t++) {
+         GET_BITS(BZ_X_CODING_1, curr, 5);
+         for (i = 0; i < alphaSize; i++) {
+            while (True) {
+               if (curr < 1 || curr > 20) RETURN(BZ_DATA_ERROR);
+               GET_BIT(BZ_X_CODING_2, uc);
+               if (uc == 0) break;
+               GET_BIT(BZ_X_CODING_3, uc);
+               if (uc == 0) curr++; else curr--;
+            }
+            s->len[t][i] = curr;
+         }
+      }
+
+      /*--- Create the Huffman decoding tables ---*/
+      for (t = 0; t < nGroups; t++) {
+         minLen = 32;
+         maxLen = 0;
+         for (i = 0; i < alphaSize; i++) {
+            if (s->len[t][i] > maxLen) maxLen = s->len[t][i];
+            if (s->len[t][i] < minLen) minLen = s->len[t][i];
+         }
+         BZ2_hbCreateDecodeTables ( 
+            &(s->limit[t][0]), 
+            &(s->base[t][0]), 
+            &(s->perm[t][0]), 
+            &(s->len[t][0]),
+            minLen, maxLen, alphaSize
+         );
+         s->minLens[t] = minLen;
+      }
+
+      /*--- Now the MTF values ---*/
+
+      EOB      = s->nInUse+1;
+      nblockMAX = 100000 * s->blockSize100k;
+      groupNo  = -1;
+      groupPos = 0;
+
+      for (i = 0; i <= 255; i++) s->unzftab[i] = 0;
+
+      /*-- MTF init --*/
+      {
+         Int32 ii, jj, kk;
+         kk = MTFA_SIZE-1;
+         for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) {
+            for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
+               s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj);
+               kk--;
+            }
+            s->mtfbase[ii] = kk + 1;
+         }
+      }
+      /*-- end MTF init --*/
+
+      nblock = 0;
+      GET_MTF_VAL(BZ_X_MTF_1, BZ_X_MTF_2, nextSym);
+
+      while (True) {
+
+         if (nextSym == EOB) break;
+
+         if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) {
+
+            es = -1;
+            N = 1;
+            do {
+               /* Check that N doesn't get too big, so that es doesn't
+                  go negative.  The maximum value that can be
+                  RUNA/RUNB encoded is equal to the block size (post
+                  the initial RLE), viz, 900k, so bounding N at 2
+                  million should guard against overflow without
+                  rejecting any legitimate inputs. */
+               if (N >= 2*1024*1024) RETURN(BZ_DATA_ERROR);
+               if (nextSym == BZ_RUNA) es = es + (0+1) * N; else
+               if (nextSym == BZ_RUNB) es = es + (1+1) * N;
+               N = N * 2;
+               GET_MTF_VAL(BZ_X_MTF_3, BZ_X_MTF_4, nextSym);
+            }
+               while (nextSym == BZ_RUNA || nextSym == BZ_RUNB);
+
+            es++;
+            uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ];
+            s->unzftab[uc] += es;
+
+            if (s->smallDecompress)
+               while (es > 0) {
+                  if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
+                  s->ll16[nblock] = (UInt16)uc;
+                  nblock++;
+                  es--;
+               }
+            else
+               while (es > 0) {
+                  if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
+                  s->tt[nblock] = (UInt32)uc;
+                  nblock++;
+                  es--;
+               };
+
+            continue;
+
+         } else {
+
+            if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR);
+
+            /*-- uc = MTF ( nextSym-1 ) --*/
+            {
+               Int32 ii, jj, kk, pp, lno, off;
+               UInt32 nn;
+               nn = (UInt32)(nextSym - 1);
+
+               if (nn < MTFL_SIZE) {
+                  /* avoid general-case expense */
+                  pp = s->mtfbase[0];
+                  uc = s->mtfa[pp+nn];
+                  while (nn > 3) {
+                     Int32 z = pp+nn;
+                     s->mtfa[(z)  ] = s->mtfa[(z)-1];
+                     s->mtfa[(z)-1] = s->mtfa[(z)-2];
+                     s->mtfa[(z)-2] = s->mtfa[(z)-3];
+                     s->mtfa[(z)-3] = s->mtfa[(z)-4];
+                     nn -= 4;
+                  }
+                  while (nn > 0) { 
+                     s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--; 
+                  };
+                  s->mtfa[pp] = uc;
+               } else { 
+                  /* general case */
+                  lno = nn / MTFL_SIZE;
+                  off = nn % MTFL_SIZE;
+                  pp = s->mtfbase[lno] + off;
+                  uc = s->mtfa[pp];
+                  while (pp > s->mtfbase[lno]) { 
+                     s->mtfa[pp] = s->mtfa[pp-1]; pp--; 
+                  };
+                  s->mtfbase[lno]++;
+                  while (lno > 0) {
+                     s->mtfbase[lno]--;
+                     s->mtfa[s->mtfbase[lno]] 
+                        = s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1];
+                     lno--;
+                  }
+                  s->mtfbase[0]--;
+                  s->mtfa[s->mtfbase[0]] = uc;
+                  if (s->mtfbase[0] == 0) {
+                     kk = MTFA_SIZE-1;
+                     for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) {
+                        for (jj = MTFL_SIZE-1; jj >= 0; jj--) {
+                           s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj];
+                           kk--;
+                        }
+                        s->mtfbase[ii] = kk + 1;
+                     }
+                  }
+               }
+            }
+            /*-- end uc = MTF ( nextSym-1 ) --*/
+
+            s->unzftab[s->seqToUnseq[uc]]++;
+            if (s->smallDecompress)
+               s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else
+               s->tt[nblock]   = (UInt32)(s->seqToUnseq[uc]);
+            nblock++;
+
+            GET_MTF_VAL(BZ_X_MTF_5, BZ_X_MTF_6, nextSym);
+            continue;
+         }
+      }
+
+      /* Now we know what nblock is, we can do a better sanity
+         check on s->origPtr.
+      */
+      if (s->origPtr < 0 || s->origPtr >= nblock)
+         RETURN(BZ_DATA_ERROR);
+
+      /*-- Set up cftab to facilitate generation of T^(-1) --*/
+      /* Check: unzftab entries in range. */
+      for (i = 0; i <= 255; i++) {
+         if (s->unzftab[i] < 0 || s->unzftab[i] > nblock)
+            RETURN(BZ_DATA_ERROR);
+      }
+      /* Actually generate cftab. */
+      s->cftab[0] = 0;
+      for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1];
+      for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1];
+      /* Check: cftab entries in range. */
+      for (i = 0; i <= 256; i++) {
+         if (s->cftab[i] < 0 || s->cftab[i] > nblock) {
+            /* s->cftab[i] can legitimately be == nblock */
+            RETURN(BZ_DATA_ERROR);
+         }
+      }
+      /* Check: cftab entries non-descending. */
+      for (i = 1; i <= 256; i++) {
+         if (s->cftab[i-1] > s->cftab[i]) {
+            RETURN(BZ_DATA_ERROR);
+         }
+      }
+
+      s->state_out_len = 0;
+      s->state_out_ch  = 0;
+      BZ_INITIALISE_CRC ( s->calculatedBlockCRC );
+      s->state = BZ_X_OUTPUT;
+      if (s->verbosity >= 2) VPrintf0 ( "rt+rld" );
+
+      if (s->smallDecompress) {
+
+         /*-- Make a copy of cftab, used in generation of T --*/
+         for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i];
+
+         /*-- compute the T vector --*/
+         for (i = 0; i < nblock; i++) {
+            uc = (UChar)(s->ll16[i]);
+            SET_LL(i, s->cftabCopy[uc]);
+            s->cftabCopy[uc]++;
+         }
+
+         /*-- Compute T^(-1) by pointer reversal on T --*/
+         i = s->origPtr;
+         j = GET_LL(i);
+         do {
+            Int32 tmp = GET_LL(j);
+            SET_LL(j, i);
+            i = j;
+            j = tmp;
+         }
+            while (i != s->origPtr);
+
+         s->tPos = s->origPtr;
+         s->nblock_used = 0;
+         if (s->blockRandomised) {
+            BZ_RAND_INIT_MASK;
+            BZ_GET_SMALL(s->k0); s->nblock_used++;
+            BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; 
+         } else {
+            BZ_GET_SMALL(s->k0); s->nblock_used++;
+         }
+
+      } else {
+
+         /*-- compute the T^(-1) vector --*/
+         for (i = 0; i < nblock; i++) {
+            uc = (UChar)(s->tt[i] & 0xff);
+            s->tt[s->cftab[uc]] |= (i << 8);
+            s->cftab[uc]++;
+         }
+
+         s->tPos = s->tt[s->origPtr] >> 8;
+         s->nblock_used = 0;
+         if (s->blockRandomised) {
+            BZ_RAND_INIT_MASK;
+            BZ_GET_FAST(s->k0); s->nblock_used++;
+            BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; 
+         } else {
+            BZ_GET_FAST(s->k0); s->nblock_used++;
+         }
+
+      }
+
+      RETURN(BZ_OK);
+
+
+
+    endhdr_2:
+
+      GET_UCHAR(BZ_X_ENDHDR_2, uc);
+      if (uc != 0x72) RETURN(BZ_DATA_ERROR);
+      GET_UCHAR(BZ_X_ENDHDR_3, uc);
+      if (uc != 0x45) RETURN(BZ_DATA_ERROR);
+      GET_UCHAR(BZ_X_ENDHDR_4, uc);
+      if (uc != 0x38) RETURN(BZ_DATA_ERROR);
+      GET_UCHAR(BZ_X_ENDHDR_5, uc);
+      if (uc != 0x50) RETURN(BZ_DATA_ERROR);
+      GET_UCHAR(BZ_X_ENDHDR_6, uc);
+      if (uc != 0x90) RETURN(BZ_DATA_ERROR);
+
+      s->storedCombinedCRC = 0;
+      GET_UCHAR(BZ_X_CCRC_1, uc);
+      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
+      GET_UCHAR(BZ_X_CCRC_2, uc);
+      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
+      GET_UCHAR(BZ_X_CCRC_3, uc);
+      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
+      GET_UCHAR(BZ_X_CCRC_4, uc);
+      s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc);
+
+      s->state = BZ_X_IDLE;
+      RETURN(BZ_STREAM_END);
+
+      default: AssertH ( False, 4001 );
+   }
+
+   AssertH ( False, 4002 );
+
+   save_state_and_return:
+
+   s->save_i           = i;
+   s->save_j           = j;
+   s->save_t           = t;
+   s->save_alphaSize   = alphaSize;
+   s->save_nGroups     = nGroups;
+   s->save_nSelectors  = nSelectors;
+   s->save_EOB         = EOB;
+   s->save_groupNo     = groupNo;
+   s->save_groupPos    = groupPos;
+   s->save_nextSym     = nextSym;
+   s->save_nblockMAX   = nblockMAX;
+   s->save_nblock      = nblock;
+   s->save_es          = es;
+   s->save_N           = N;
+   s->save_curr        = curr;
+   s->save_zt          = zt;
+   s->save_zn          = zn;
+   s->save_zvec        = zvec;
+   s->save_zj          = zj;
+   s->save_gSel        = gSel;
+   s->save_gMinlen     = gMinlen;
+   s->save_gLimit      = gLimit;
+   s->save_gBase       = gBase;
+   s->save_gPerm       = gPerm;
+
+   return retVal;   
+}
+
+
+/*-------------------------------------------------------------*/
+/*--- end                                      decompress.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/libs/ext/bzip2/dlltest.c b/libs/ext/bzip2/dlltest.c
new file mode 100644
index 0000000..03fa146
--- /dev/null
+++ b/libs/ext/bzip2/dlltest.c
@@ -0,0 +1,175 @@
+/*
+   minibz2
+      libbz2.dll test program.
+      by Yoshioka Tsuneo (tsuneo at rr.iij4u.or.jp)
+      This file is Public Domain.  Welcome any email to me.
+
+   usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]
+*/
+
+#define BZ_IMPORT
+#include <stdio.h>
+#include <stdlib.h>
+#include "bzlib.h"
+#ifdef _WIN32
+#include <io.h>
+#endif
+
+
+#ifdef _WIN32
+
+#define BZ2_LIBNAME "libbz2-1.0.2.DLL" 
+
+#include <windows.h>
+static int BZ2DLLLoaded = 0;
+static HINSTANCE BZ2DLLhLib;
+int BZ2DLLLoadLibrary(void)
+{
+   HINSTANCE hLib;
+
+   if(BZ2DLLLoaded==1){return 0;}
+   hLib=LoadLibrary(BZ2_LIBNAME);
+   if(hLib == NULL){
+      fprintf(stderr,"Can't load %s\n",BZ2_LIBNAME);
+      return -1;
+   }
+   BZ2_bzlibVersion=GetProcAddress(hLib,"BZ2_bzlibVersion");
+   BZ2_bzopen=GetProcAddress(hLib,"BZ2_bzopen");
+   BZ2_bzdopen=GetProcAddress(hLib,"BZ2_bzdopen");
+   BZ2_bzread=GetProcAddress(hLib,"BZ2_bzread");
+   BZ2_bzwrite=GetProcAddress(hLib,"BZ2_bzwrite");
+   BZ2_bzflush=GetProcAddress(hLib,"BZ2_bzflush");
+   BZ2_bzclose=GetProcAddress(hLib,"BZ2_bzclose");
+   BZ2_bzerror=GetProcAddress(hLib,"BZ2_bzerror");
+
+   if (!BZ2_bzlibVersion || !BZ2_bzopen || !BZ2_bzdopen
+       || !BZ2_bzread || !BZ2_bzwrite || !BZ2_bzflush
+       || !BZ2_bzclose || !BZ2_bzerror) {
+      fprintf(stderr,"GetProcAddress failed.\n");
+      return -1;
+   }
+   BZ2DLLLoaded=1;
+   BZ2DLLhLib=hLib;
+   return 0;
+
+}
+int BZ2DLLFreeLibrary(void)
+{
+   if(BZ2DLLLoaded==0){return 0;}
+   FreeLibrary(BZ2DLLhLib);
+   BZ2DLLLoaded=0;
+}
+#endif /* WIN32 */
+
+void usage(void)
+{
+   puts("usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]");
+}
+
+int main(int argc,char *argv[])
+{
+   int decompress = 0;
+   int level = 9;
+   char *fn_r = NULL;
+   char *fn_w = NULL;
+
+#ifdef _WIN32
+   if(BZ2DLLLoadLibrary()<0){
+      fprintf(stderr,"Loading of %s failed.  Giving up.\n", BZ2_LIBNAME);
+      exit(1);
+   }
+   printf("Loading of %s succeeded.  Library version is %s.\n",
+          BZ2_LIBNAME, BZ2_bzlibVersion() );
+#endif
+   while(++argv,--argc){
+      if(**argv =='-' || **argv=='/'){
+         char *p;
+
+         for(p=*argv+1;*p;p++){
+            if(*p=='d'){
+               decompress = 1;
+            }else if('1'<=*p && *p<='9'){
+               level = *p - '0';
+            }else{
+               usage();
+               exit(1);
+            }
+         }
+      }else{
+         break;
+      }
+   }
+   if(argc>=1){
+      fn_r = *argv;
+      argc--;argv++;
+   }else{
+      fn_r = NULL;
+   }
+   if(argc>=1){
+      fn_w = *argv;
+      argc--;argv++;
+   }else{
+      fn_w = NULL;
+   }
+   {
+      int len;
+      char buff[0x1000];
+      char mode[10];
+
+      if(decompress){
+         BZFILE *BZ2fp_r = NULL;
+         FILE *fp_w = NULL;
+
+         if(fn_w){
+            if((fp_w = fopen(fn_w,"wb"))==NULL){
+               printf("can't open [%s]\n",fn_w);
+               perror("reason:");
+               exit(1);
+            }
+         }else{
+            fp_w = stdout;
+         }
+         if((fn_r == NULL && (BZ2fp_r = BZ2_bzdopen(fileno(stdin),"rb"))==NULL)
+            || (fn_r != NULL && (BZ2fp_r = BZ2_bzopen(fn_r,"rb"))==NULL)){
+            printf("can't bz2openstream\n");
+            exit(1);
+         }
+         while((len=BZ2_bzread(BZ2fp_r,buff,0x1000))>0){
+            fwrite(buff,1,len,fp_w);
+         }
+         BZ2_bzclose(BZ2fp_r);
+         if(fp_w != stdout) fclose(fp_w);
+      }else{
+         BZFILE *BZ2fp_w = NULL;
+         FILE *fp_r = NULL;
+
+         if(fn_r){
+            if((fp_r = fopen(fn_r,"rb"))==NULL){
+               printf("can't open [%s]\n",fn_r);
+               perror("reason:");
+               exit(1);
+            }
+         }else{
+            fp_r = stdin;
+         }
+         mode[0]='w';
+         mode[1] = '0' + level;
+         mode[2] = '\0';
+
+         if((fn_w == NULL && (BZ2fp_w = BZ2_bzdopen(fileno(stdout),mode))==NULL)
+            || (fn_w !=NULL && (BZ2fp_w = BZ2_bzopen(fn_w,mode))==NULL)){
+            printf("can't bz2openstream\n");
+            exit(1);
+         }
+         while((len=fread(buff,1,0x1000,fp_r))>0){
+            BZ2_bzwrite(BZ2fp_w,buff,len);
+         }
+         BZ2_bzclose(BZ2fp_w);
+         if(fp_r!=stdin)fclose(fp_r);
+      }
+   }
+#ifdef _WIN32
+   BZ2DLLFreeLibrary();
+#endif
+   return 0;
+}
diff --git a/libs/ext/bzip2/huffman.c b/libs/ext/bzip2/huffman.c
new file mode 100644
index 0000000..2283fdb
--- /dev/null
+++ b/libs/ext/bzip2/huffman.c
@@ -0,0 +1,205 @@
+
+/*-------------------------------------------------------------*/
+/*--- Huffman coding low-level stuff                        ---*/
+/*---                                             huffman.c ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
+   README file.
+
+   This program is released under the terms of the license contained
+   in the file LICENSE.
+   ------------------------------------------------------------------ */
+
+
+#include "bzlib_private.h"
+
+/*---------------------------------------------------*/
+#define WEIGHTOF(zz0)  ((zz0) & 0xffffff00)
+#define DEPTHOF(zz1)   ((zz1) & 0x000000ff)
+#define MYMAX(zz2,zz3) ((zz2) > (zz3) ? (zz2) : (zz3))
+
+#define ADDWEIGHTS(zw1,zw2)                           \
+   (WEIGHTOF(zw1)+WEIGHTOF(zw2)) |                    \
+   (1 + MYMAX(DEPTHOF(zw1),DEPTHOF(zw2)))
+
+#define UPHEAP(z)                                     \
+{                                                     \
+   Int32 zz, tmp;                                     \
+   zz = z; tmp = heap[zz];                            \
+   while (weight[tmp] < weight[heap[zz >> 1]]) {      \
+      heap[zz] = heap[zz >> 1];                       \
+      zz >>= 1;                                       \
+   }                                                  \
+   heap[zz] = tmp;                                    \
+}
+
+#define DOWNHEAP(z)                                   \
+{                                                     \
+   Int32 zz, yy, tmp;                                 \
+   zz = z; tmp = heap[zz];                            \
+   while (True) {                                     \
+      yy = zz << 1;                                   \
+      if (yy > nHeap) break;                          \
+      if (yy < nHeap &&                               \
+          weight[heap[yy+1]] < weight[heap[yy]])      \
+         yy++;                                        \
+      if (weight[tmp] < weight[heap[yy]]) break;      \
+      heap[zz] = heap[yy];                            \
+      zz = yy;                                        \
+   }                                                  \
+   heap[zz] = tmp;                                    \
+}
+
+
+/*---------------------------------------------------*/
+void BZ2_hbMakeCodeLengths ( UChar *len, 
+                             Int32 *freq,
+                             Int32 alphaSize,
+                             Int32 maxLen )
+{
+   /*--
+      Nodes and heap entries run from 1.  Entry 0
+      for both the heap and nodes is a sentinel.
+   --*/
+   Int32 nNodes, nHeap, n1, n2, i, j, k;
+   Bool  tooLong;
+
+   Int32 heap   [ BZ_MAX_ALPHA_SIZE + 2 ];
+   Int32 weight [ BZ_MAX_ALPHA_SIZE * 2 ];
+   Int32 parent [ BZ_MAX_ALPHA_SIZE * 2 ]; 
+
+   for (i = 0; i < alphaSize; i++)
+      weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8;
+
+   while (True) {
+
+      nNodes = alphaSize;
+      nHeap = 0;
+
+      heap[0] = 0;
+      weight[0] = 0;
+      parent[0] = -2;
+
+      for (i = 1; i <= alphaSize; i++) {
+         parent[i] = -1;
+         nHeap++;
+         heap[nHeap] = i;
+         UPHEAP(nHeap);
+      }
+
+      AssertH( nHeap < (BZ_MAX_ALPHA_SIZE+2), 2001 );
+   
+      while (nHeap > 1) {
+         n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);
+         n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1);
+         nNodes++;
+         parent[n1] = parent[n2] = nNodes;
+         weight[nNodes] = ADDWEIGHTS(weight[n1], weight[n2]);
+         parent[nNodes] = -1;
+         nHeap++;
+         heap[nHeap] = nNodes;
+         UPHEAP(nHeap);
+      }
+
+      AssertH( nNodes < (BZ_MAX_ALPHA_SIZE * 2), 2002 );
+
+      tooLong = False;
+      for (i = 1; i <= alphaSize; i++) {
+         j = 0;
+         k = i;
+         while (parent[k] >= 0) { k = parent[k]; j++; }
+         len[i-1] = j;
+         if (j > maxLen) tooLong = True;
+      }
+      
+      if (! tooLong) break;
+
+      /* 17 Oct 04: keep-going condition for the following loop used
+         to be 'i < alphaSize', which missed the last element,
+         theoretically leading to the possibility of the compressor
+         looping.  However, this count-scaling step is only needed if
+         one of the generated Huffman code words is longer than
+         maxLen, which up to and including version 1.0.2 was 20 bits,
+         which is extremely unlikely.  In version 1.0.3 maxLen was
+         changed to 17 bits, which has minimal effect on compression
+         ratio, but does mean this scaling step is used from time to
+         time, enough to verify that it works.
+
+         This means that bzip2-1.0.3 and later will only produce
+         Huffman codes with a maximum length of 17 bits.  However, in
+         order to preserve backwards compatibility with bitstreams
+         produced by versions pre-1.0.3, the decompressor must still
+         handle lengths of up to 20. */
+
+      for (i = 1; i <= alphaSize; i++) {
+         j = weight[i] >> 8;
+         j = 1 + (j / 2);
+         weight[i] = j << 8;
+      }
+   }
+}
+
+
+/*---------------------------------------------------*/
+void BZ2_hbAssignCodes ( Int32 *code,
+                         UChar *length,
+                         Int32 minLen,
+                         Int32 maxLen,
+                         Int32 alphaSize )
+{
+   Int32 n, vec, i;
+
+   vec = 0;
+   for (n = minLen; n <= maxLen; n++) {
+      for (i = 0; i < alphaSize; i++)
+         if (length[i] == n) { code[i] = vec; vec++; };
+      vec <<= 1;
+   }
+}
+
+
+/*---------------------------------------------------*/
+void BZ2_hbCreateDecodeTables ( Int32 *limit,
+                                Int32 *base,
+                                Int32 *perm,
+                                UChar *length,
+                                Int32 minLen,
+                                Int32 maxLen,
+                                Int32 alphaSize )
+{
+   Int32 pp, i, j, vec;
+
+   pp = 0;
+   for (i = minLen; i <= maxLen; i++)
+      for (j = 0; j < alphaSize; j++)
+         if (length[j] == i) { perm[pp] = j; pp++; };
+
+   for (i = 0; i < BZ_MAX_CODE_LEN; i++) base[i] = 0;
+   for (i = 0; i < alphaSize; i++) base[length[i]+1]++;
+
+   for (i = 1; i < BZ_MAX_CODE_LEN; i++) base[i] += base[i-1];
+
+   for (i = 0; i < BZ_MAX_CODE_LEN; i++) limit[i] = 0;
+   vec = 0;
+
+   for (i = minLen; i <= maxLen; i++) {
+      vec += (base[i+1] - base[i]);
+      limit[i] = vec-1;
+      vec <<= 1;
+   }
+   for (i = minLen + 1; i <= maxLen; i++)
+      base[i] = ((limit[i-1] + 1) << 1) - base[i];
+}
+
+
+/*-------------------------------------------------------------*/
+/*--- end                                         huffman.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/libs/ext/bzip2/libbz2.def b/libs/ext/bzip2/libbz2.def
new file mode 100644
index 0000000..2dc0dd8
--- /dev/null
+++ b/libs/ext/bzip2/libbz2.def
@@ -0,0 +1,27 @@
+LIBRARY			LIBBZ2
+DESCRIPTION		"libbzip2: library for data compression"
+EXPORTS
+	BZ2_bzCompressInit
+	BZ2_bzCompress
+	BZ2_bzCompressEnd
+	BZ2_bzDecompressInit
+	BZ2_bzDecompress
+	BZ2_bzDecompressEnd
+	BZ2_bzReadOpen
+	BZ2_bzReadClose
+	BZ2_bzReadGetUnused
+	BZ2_bzRead
+	BZ2_bzWriteOpen
+	BZ2_bzWrite
+	BZ2_bzWriteClose
+	BZ2_bzWriteClose64
+	BZ2_bzBuffToBuffCompress
+	BZ2_bzBuffToBuffDecompress
+	BZ2_bzlibVersion
+	BZ2_bzopen
+	BZ2_bzdopen
+	BZ2_bzread
+	BZ2_bzwrite
+	BZ2_bzflush
+	BZ2_bzclose
+	BZ2_bzerror
diff --git a/libs/axf/libaxf.vers b/libs/ext/bzip2/libbz2.vers
similarity index 100%
copy from libs/axf/libaxf.vers
copy to libs/ext/bzip2/libbz2.vers
diff --git a/libs/ext/bzip2/mk251.c b/libs/ext/bzip2/mk251.c
new file mode 100644
index 0000000..c9c36f6
--- /dev/null
+++ b/libs/ext/bzip2/mk251.c
@@ -0,0 +1,31 @@
+
+/* Spew out a long sequence of the byte 251.  When fed to bzip2
+   versions 1.0.0 or 1.0.1, causes it to die with internal error
+   1007 in blocksort.c.  This assertion misses an extremely rare
+   case, which is fixed in this version (1.0.2) and above.
+*/
+
+/* ------------------------------------------------------------------
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
+   README file.
+
+   This program is released under the terms of the license contained
+   in the file LICENSE.
+   ------------------------------------------------------------------ */
+
+
+#include <stdio.h>
+
+int main ()
+{
+   int i;
+   for (i = 0; i < 48500000 ; i++)
+     putchar(251);
+   return 0;
+}
diff --git a/libs/ext/bzip2/randtable.c b/libs/ext/bzip2/randtable.c
new file mode 100644
index 0000000..6d62459
--- /dev/null
+++ b/libs/ext/bzip2/randtable.c
@@ -0,0 +1,84 @@
+
+/*-------------------------------------------------------------*/
+/*--- Table for randomising repetitive blocks               ---*/
+/*---                                           randtable.c ---*/
+/*-------------------------------------------------------------*/
+
+/* ------------------------------------------------------------------
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
+   README file.
+
+   This program is released under the terms of the license contained
+   in the file LICENSE.
+   ------------------------------------------------------------------ */
+
+
+#include "bzlib_private.h"
+
+
+/*---------------------------------------------*/
+Int32 BZ2_rNums[512] = { 
+   619, 720, 127, 481, 931, 816, 813, 233, 566, 247, 
+   985, 724, 205, 454, 863, 491, 741, 242, 949, 214, 
+   733, 859, 335, 708, 621, 574, 73, 654, 730, 472, 
+   419, 436, 278, 496, 867, 210, 399, 680, 480, 51, 
+   878, 465, 811, 169, 869, 675, 611, 697, 867, 561, 
+   862, 687, 507, 283, 482, 129, 807, 591, 733, 623, 
+   150, 238, 59, 379, 684, 877, 625, 169, 643, 105, 
+   170, 607, 520, 932, 727, 476, 693, 425, 174, 647, 
+   73, 122, 335, 530, 442, 853, 695, 249, 445, 515, 
+   909, 545, 703, 919, 874, 474, 882, 500, 594, 612, 
+   641, 801, 220, 162, 819, 984, 589, 513, 495, 799, 
+   161, 604, 958, 533, 221, 400, 386, 867, 600, 782, 
+   382, 596, 414, 171, 516, 375, 682, 485, 911, 276, 
+   98, 553, 163, 354, 666, 933, 424, 341, 533, 870, 
+   227, 730, 475, 186, 263, 647, 537, 686, 600, 224, 
+   469, 68, 770, 919, 190, 373, 294, 822, 808, 206, 
+   184, 943, 795, 384, 383, 461, 404, 758, 839, 887, 
+   715, 67, 618, 276, 204, 918, 873, 777, 604, 560, 
+   951, 160, 578, 722, 79, 804, 96, 409, 713, 940, 
+   652, 934, 970, 447, 318, 353, 859, 672, 112, 785, 
+   645, 863, 803, 350, 139, 93, 354, 99, 820, 908, 
+   609, 772, 154, 274, 580, 184, 79, 626, 630, 742, 
+   653, 282, 762, 623, 680, 81, 927, 626, 789, 125, 
+   411, 521, 938, 300, 821, 78, 343, 175, 128, 250, 
+   170, 774, 972, 275, 999, 639, 495, 78, 352, 126, 
+   857, 956, 358, 619, 580, 124, 737, 594, 701, 612, 
+   669, 112, 134, 694, 363, 992, 809, 743, 168, 974, 
+   944, 375, 748, 52, 600, 747, 642, 182, 862, 81, 
+   344, 805, 988, 739, 511, 655, 814, 334, 249, 515, 
+   897, 955, 664, 981, 649, 113, 974, 459, 893, 228, 
+   433, 837, 553, 268, 926, 240, 102, 654, 459, 51, 
+   686, 754, 806, 760, 493, 403, 415, 394, 687, 700, 
+   946, 670, 656, 610, 738, 392, 760, 799, 887, 653, 
+   978, 321, 576, 617, 626, 502, 894, 679, 243, 440, 
+   680, 879, 194, 572, 640, 724, 926, 56, 204, 700, 
+   707, 151, 457, 449, 797, 195, 791, 558, 945, 679, 
+   297, 59, 87, 824, 713, 663, 412, 693, 342, 606, 
+   134, 108, 571, 364, 631, 212, 174, 643, 304, 329, 
+   343, 97, 430, 751, 497, 314, 983, 374, 822, 928, 
+   140, 206, 73, 263, 980, 736, 876, 478, 430, 305, 
+   170, 514, 364, 692, 829, 82, 855, 953, 676, 246, 
+   369, 970, 294, 750, 807, 827, 150, 790, 288, 923, 
+   804, 378, 215, 828, 592, 281, 565, 555, 710, 82, 
+   896, 831, 547, 261, 524, 462, 293, 465, 502, 56, 
+   661, 821, 976, 991, 658, 869, 905, 758, 745, 193, 
+   768, 550, 608, 933, 378, 286, 215, 979, 792, 961, 
+   61, 688, 793, 644, 986, 403, 106, 366, 905, 644, 
+   372, 567, 466, 434, 645, 210, 389, 550, 919, 135, 
+   780, 773, 635, 389, 707, 100, 626, 958, 165, 504, 
+   920, 176, 193, 713, 857, 265, 203, 50, 668, 108, 
+   645, 990, 626, 197, 510, 357, 358, 850, 858, 364, 
+   936, 638
+};
+
+
+/*-------------------------------------------------------------*/
+/*--- end                                       randtable.c ---*/
+/*-------------------------------------------------------------*/
diff --git a/libs/ext/bzip2/spewG.c b/libs/ext/bzip2/spewG.c
new file mode 100644
index 0000000..14a3649
--- /dev/null
+++ b/libs/ext/bzip2/spewG.c
@@ -0,0 +1,54 @@
+
+/* spew out a thoroughly gigantic file designed so that bzip2
+   can compress it reasonably rapidly.  This is to help test
+   support for large files (> 2GB) in a reasonable amount of time.
+   I suggest you use the undocumented --exponential option to
+   bzip2 when compressing the resulting file; this saves a bit of
+   time.  Note: *don't* bother with --exponential when compressing 
+   Real Files; it'll just waste a lot of CPU time :-)
+   (but is otherwise harmless).
+*/
+
+/* ------------------------------------------------------------------
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
+   README file.
+
+   This program is released under the terms of the license contained
+   in the file LICENSE.
+	 ------------------------------------------------------------------ */
+
+
+#define _FILE_OFFSET_BITS 64
+
+#include <stdio.h>
+#include <stdlib.h>
+
+/* The number of megabytes of junk to spew out (roughly) */
+#define MEGABYTES 5000
+
+#define N_BUF 1000000
+char buf[N_BUF];
+
+int main ( int argc, char** argv )
+{
+   int ii, kk, p;
+   srandom(1);
+   setbuffer ( stdout, buf, N_BUF );
+   for (kk = 0; kk < MEGABYTES * 515; kk+=3) {
+      p = 25+random()%50;
+      for (ii = 0; ii < p; ii++)
+         printf ( "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" );
+      for (ii = 0; ii < p-1; ii++)
+         printf ( "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" );
+      for (ii = 0; ii < p+1; ii++)
+         printf ( "ccccccccccccccccccccccccccccccccccccc" );
+   }
+   fflush(stdout);
+   return 0;
+}
diff --git a/libs/ext/bzip2/unzcrash.c b/libs/ext/bzip2/unzcrash.c
new file mode 100644
index 0000000..7041da5
--- /dev/null
+++ b/libs/ext/bzip2/unzcrash.c
@@ -0,0 +1,141 @@
+
+/* A test program written to test robustness to decompression of
+   corrupted data.  Usage is 
+       unzcrash filename
+   and the program will read the specified file, compress it (in memory),
+   and then repeatedly decompress it, each time with a different bit of
+   the compressed data inverted, so as to test all possible one-bit errors.
+   This should not cause any invalid memory accesses.  If it does, 
+   I want to know about it!
+
+   PS.  As you can see from the above description, the process is
+   incredibly slow.  A file of size eg 5KB will cause it to run for
+   many hours.
+*/
+
+/* ------------------------------------------------------------------
+   This file is part of bzip2/libbzip2, a program and library for
+   lossless, block-sorting data compression.
+
+   bzip2/libbzip2 version 1.0.6 of 6 September 2010
+   Copyright (C) 1996-2010 Julian Seward <jseward at bzip.org>
+
+   Please read the WARNING, DISCLAIMER and PATENTS sections in the 
+   README file.
+
+   This program is released under the terms of the license contained
+   in the file LICENSE.
+   ------------------------------------------------------------------ */
+
+
+#include <stdio.h>
+#include <assert.h>
+#include "bzlib.h"
+
+#define M_BLOCK 1000000
+
+typedef unsigned char uchar;
+
+#define M_BLOCK_OUT (M_BLOCK + 1000000)
+uchar inbuf[M_BLOCK];
+uchar outbuf[M_BLOCK_OUT];
+uchar zbuf[M_BLOCK + 600 + (M_BLOCK / 100)];
+
+int nIn, nOut, nZ;
+
+static char *bzerrorstrings[] = {
+       "OK"
+      ,"SEQUENCE_ERROR"
+      ,"PARAM_ERROR"
+      ,"MEM_ERROR"
+      ,"DATA_ERROR"
+      ,"DATA_ERROR_MAGIC"
+      ,"IO_ERROR"
+      ,"UNEXPECTED_EOF"
+      ,"OUTBUFF_FULL"
+      ,"???"   /* for future */
+      ,"???"   /* for future */
+      ,"???"   /* for future */
+      ,"???"   /* for future */
+      ,"???"   /* for future */
+      ,"???"   /* for future */
+};
+
+void flip_bit ( int bit )
+{
+   int byteno = bit / 8;
+   int bitno  = bit % 8;
+   uchar mask = 1 << bitno;
+   //fprintf ( stderr, "(byte %d  bit %d  mask %d)",
+   //          byteno, bitno, (int)mask );
+   zbuf[byteno] ^= mask;
+}
+
+int main ( int argc, char** argv )
+{
+   FILE* f;
+   int   r;
+   int   bit;
+   int   i;
+
+   if (argc != 2) {
+      fprintf ( stderr, "usage: unzcrash filename\n" );
+      return 1;
+   }
+
+   f = fopen ( argv[1], "r" );
+   if (!f) {
+      fprintf ( stderr, "unzcrash: can't open %s\n", argv[1] );
+      return 1;
+   }
+
+   nIn = fread ( inbuf, 1, M_BLOCK, f );
+   fprintf ( stderr, "%d bytes read\n", nIn );
+
+   nZ = M_BLOCK;
+   r = BZ2_bzBuffToBuffCompress (
+         zbuf, &nZ, inbuf, nIn, 9, 0, 30 );
+
+   assert (r == BZ_OK);
+   fprintf ( stderr, "%d after compression\n", nZ );
+
+   for (bit = 0; bit < nZ*8; bit++) {
+      fprintf ( stderr, "bit %d  ", bit );
+      flip_bit ( bit );
+      nOut = M_BLOCK_OUT;
+      r = BZ2_bzBuffToBuffDecompress (
+            outbuf, &nOut, zbuf, nZ, 0, 0 );
+      fprintf ( stderr, " %d  %s ", r, bzerrorstrings[-r] );
+
+      if (r != BZ_OK) {
+         fprintf ( stderr, "\n" );
+      } else {
+         if (nOut != nIn) {
+           fprintf(stderr, "nIn/nOut mismatch %d %d\n", nIn, nOut );
+           return 1;
+         } else {
+           for (i = 0; i < nOut; i++)
+             if (inbuf[i] != outbuf[i]) { 
+                fprintf(stderr, "mismatch at %d\n", i ); 
+                return 1; 
+           }
+           if (i == nOut) fprintf(stderr, "really ok!\n" );
+         }
+      }
+
+      flip_bit ( bit );
+   }
+
+#if 0
+   assert (nOut == nIn);
+   for (i = 0; i < nOut; i++) {
+     if (inbuf[i] != outbuf[i]) {
+        fprintf ( stderr, "difference at %d !\n", i );
+        return 1;
+     }
+   }
+#endif
+
+   fprintf ( stderr, "all ok\n" );
+   return 0;
+}
diff --git a/libs/ext/curl/Makefile b/libs/ext/curl/Makefile
new file mode 100644
index 0000000..e5736a8
--- /dev/null
+++ b/libs/ext/curl/Makefile
@@ -0,0 +1,103 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../../build/abspath.sh ../../..)
+MODULE = libs/ext/curl
+
+include $(TOP)/build/Makefile.env
+
+INT_LIBS = \
+
+EXT_LIBS = \
+	libcurl
+
+ALL_LIBS = \
+	$(INT_LIBS) \
+	$(EXT_LIBS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+ifneq (rwin,$(BUILD_OS))
+
+all std clean $(ALL_LIBS):
+	@true
+
+.PHONY: all std clean $(ALL_LIBS)
+
+else
+
+std: makedirs 
+	@ $(MAKE_CMD) $(TARGDIR)/$@
+
+all: makedirs 
+	@ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(INT_LIBS): makedirs 
+	@ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_LIBS): makedirs 
+	@ $(MAKE_CMD) $(LIBDIR)/$@
+
+.PHONY: all std $(ALL_LIBS)
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: $(BINDIR)/libcurl.$(DLLX)
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: $(BINDIR)/libcurl.$(DLLX)
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+	rm -f $(BINDIR)/libcurl.$(DLLX)
+    
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# libcurl
+#
+LIBCURL_VERS := \
+	7.29.0
+
+ifeq (dbg,$(BUILD))
+    DBG=-dbg
+endif
+$(BINDIR)/libcurl.$(DLLX): /panfs/pan1/sra-test/TOOLKIT/libcurl/$(LIBCURL_VERS)/win$(BITS)$(DBG)/libcurl.$(DLLX)
+	cp $^ $@
+
+endif
+    
diff --git a/libs/ext/zlib/Makefile b/libs/ext/zlib/Makefile
index e8329bf..6339903 100644
--- a/libs/ext/zlib/Makefile
+++ b/libs/ext/zlib/Makefile
@@ -42,16 +42,16 @@ ALL_LIBS = \
 #-------------------------------------------------------------------------------
 # outer targets
 #
-std: makedirs download-$(OS)
+std: makedirs download
 	@ $(MAKE_CMD) $(TARGDIR)/$@
 
 all: makedirs download
 	@ $(MAKE_CMD) $(TARGDIR)/$@
 
-$(INT_LIBS): makedirs download-$(OS)
+$(INT_LIBS): makedirs download
 	@ $(MAKE_CMD) $(ILIBDIR)/$@
 
-$(EXT_LIBS): makedirs download-$(OS)
+$(EXT_LIBS): makedirs download
 	@ $(MAKE_CMD) $(LIBDIR)/$@
 
 .PHONY: all std $(ALL_LIBS)
@@ -66,7 +66,7 @@ $(TARGDIR)/all: $(LIBDIR)/libz
 #-------------------------------------------------------------------------------
 # std
 #
-$(TARGDIR)/std: $(LIBDIR)/libz-$(OS)
+$(TARGDIR)/std: $(LIBDIR)/libz
 
 .PHONY: $(TARGDIR)/std
 
@@ -74,37 +74,18 @@ $(TARGDIR)/std: $(LIBDIR)/libz-$(OS)
 # clean
 #
 clean: stdclean
+	@ rm -f libz.vers
 
 .PHONY: clean
 
 #-------------------------------------------------------------------------------
-# libz-$(OS)
-#
-NORMALLY_HAVE = \
-	unix \
-	linux \
-	mac \
-	sun
-
-DONT_HAVE = \
-	win
-
-LIBZ_SYS_HAS_LIB = \
-	$(addprefix $(LIBDIR)/libz-,$(NORMALLY_HAVE))
-
-$(LIBZ_SYS_HAS_LIB):
-	@ true
-
-LIBZ_SYS_NEEDS_LIB = \
-	$(addprefix $(LIBDIR)/libz-,$(DONT_HAVE))
-
-$(LIBZ_SYS_NEEDS_LIB): $(LIBDIR)/libz
-
-
-#-------------------------------------------------------------------------------
 # libz
 #
+ifeq (win,$(OS))
 $(LIBDIR)/libz: $(addprefix $(LIBDIR)/libz.,$(LIBEXT))
+else
+$(LIBDIR)/libz: $(addprefix $(LIBDIR)/libz.,$(LIBX))
+endif
 
 LIBZ_SRC = \
 	adler32 \
@@ -137,38 +118,52 @@ $(LIBDIR)/libz.$(LIBX): $(LIBZ_OBJ)
 
 
 #-------------------------------------------------------------------------------
-# download-$(OS)
-#
-LIBZ_SYS_HAS_SRC = \
-	$(addprefix download-,$(NORMALLY_HAVE))
-
-$(LIBZ_SYS_HAS_SRC):
-	@ true
-
-LIBZ_SYS_NEEDS_SRC = \
-	$(addprefix download-,$(DONT_HAVE))
-
-$(LIBZ_SYS_NEEDS_SRC): download
-
-
-#-------------------------------------------------------------------------------
 # libz download
 #
 ZLIB_VERS := \
-	1.2.5
-
-zlib-$(ZLIB_VERS).tar.gz:
+	1.2.7
+
+ZLIB_TAR = \
+	zlib-$(ZLIB_VERS).tar
+
+ZLIB_TAR_GZ = \
+	$(ZLIB_TAR).gz
+
+ifeq (win,$(OS))
+ECHO_VERS = echo -ne $(ZLIB_VERS) "\n"
+else
+ECHO_VERS = echo $(ZLIB_VERS)
+endif
+
+ifeq (sun,$(OS))
+	ZLIB_TAR_GET = $(ZLIB_TAR)
+	TAR_CMD = tar -xf
+else
+	ZLIB_TAR_GET = $(ZLIB_TAR_GZ)
+	TAR_CMD = tar --no-same-owner -x -z -f
+endif
+
+ifeq (mac,$(OS))
+RETRIEVE = curl -O
+else
+RETRIEVE = wget
+endif
+
+$(ZLIB_TAR_GZ):
 	@ echo downloading the sources
-	wget http://zlib.net/$@
+	$(RETRIEVE) http://zlib.net/$@
 	@ touch $@
 
-libz.vers: zlib-$(ZLIB_VERS).tar.gz
+$(ZLIB_TAR): $(ZLIB_TAR_GZ)
+	gzcat $^ > $@
+
+libz.vers: $(ZLIB_TAR_GET)
 	@ echo unpacking the sources
-	tar xzf $^
+	$(TAR_CMD) $^
 	mv zlib-$(ZLIB_VERS)/*.[ch] .
 	mv zlib-$(ZLIB_VERS)/win32/zlib.def libz.def
-	rm -rf zlib-$(ZLIB_VERS)
-	@ echo $(ZLIB_VERS) > $@
+	-rm -rf zlib-$(ZLIB_VERS) >/dev/null
+	@ $(ECHO_VERS) > $@
 
 download: libz.vers
 
diff --git a/libs/ext/zlib/adler32.c b/libs/ext/zlib/adler32.c
new file mode 100644
index 0000000..a868f07
--- /dev/null
+++ b/libs/ext/zlib/adler32.c
@@ -0,0 +1,179 @@
+/* adler32.c -- compute the Adler-32 checksum of a data stream
+ * Copyright (C) 1995-2011 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#include "zutil.h"
+
+#define local static
+
+local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
+
+#define BASE 65521      /* largest prime smaller than 65536 */
+#define NMAX 5552
+/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
+
+#define DO1(buf,i)  {adler += (buf)[i]; sum2 += adler;}
+#define DO2(buf,i)  DO1(buf,i); DO1(buf,i+1);
+#define DO4(buf,i)  DO2(buf,i); DO2(buf,i+2);
+#define DO8(buf,i)  DO4(buf,i); DO4(buf,i+4);
+#define DO16(buf)   DO8(buf,0); DO8(buf,8);
+
+/* use NO_DIVIDE if your processor does not do division in hardware --
+   try it both ways to see which is faster */
+#ifdef NO_DIVIDE
+/* note that this assumes BASE is 65521, where 65536 % 65521 == 15
+   (thank you to John Reiser for pointing this out) */
+#  define CHOP(a) \
+    do { \
+        unsigned long tmp = a >> 16; \
+        a &= 0xffffUL; \
+        a += (tmp << 4) - tmp; \
+    } while (0)
+#  define MOD28(a) \
+    do { \
+        CHOP(a); \
+        if (a >= BASE) a -= BASE; \
+    } while (0)
+#  define MOD(a) \
+    do { \
+        CHOP(a); \
+        MOD28(a); \
+    } while (0)
+#  define MOD63(a) \
+    do { /* this assumes a is not negative */ \
+        z_off64_t tmp = a >> 32; \
+        a &= 0xffffffffL; \
+        a += (tmp << 8) - (tmp << 5) + tmp; \
+        tmp = a >> 16; \
+        a &= 0xffffL; \
+        a += (tmp << 4) - tmp; \
+        tmp = a >> 16; \
+        a &= 0xffffL; \
+        a += (tmp << 4) - tmp; \
+        if (a >= BASE) a -= BASE; \
+    } while (0)
+#else
+#  define MOD(a) a %= BASE
+#  define MOD28(a) a %= BASE
+#  define MOD63(a) a %= BASE
+#endif
+
+/* ========================================================================= */
+uLong ZEXPORT adler32(adler, buf, len)
+    uLong adler;
+    const Bytef *buf;
+    uInt len;
+{
+    unsigned long sum2;
+    unsigned n;
+
+    /* split Adler-32 into component sums */
+    sum2 = (adler >> 16) & 0xffff;
+    adler &= 0xffff;
+
+    /* in case user likes doing a byte at a time, keep it fast */
+    if (len == 1) {
+        adler += buf[0];
+        if (adler >= BASE)
+            adler -= BASE;
+        sum2 += adler;
+        if (sum2 >= BASE)
+            sum2 -= BASE;
+        return adler | (sum2 << 16);
+    }
+
+    /* initial Adler-32 value (deferred check for len == 1 speed) */
+    if (buf == Z_NULL)
+        return 1L;
+
+    /* in case short lengths are provided, keep it somewhat fast */
+    if (len < 16) {
+        while (len--) {
+            adler += *buf++;
+            sum2 += adler;
+        }
+        if (adler >= BASE)
+            adler -= BASE;
+        MOD28(sum2);            /* only added so many BASE's */
+        return adler | (sum2 << 16);
+    }
+
+    /* do length NMAX blocks -- requires just one modulo operation */
+    while (len >= NMAX) {
+        len -= NMAX;
+        n = NMAX / 16;          /* NMAX is divisible by 16 */
+        do {
+            DO16(buf);          /* 16 sums unrolled */
+            buf += 16;
+        } while (--n);
+        MOD(adler);
+        MOD(sum2);
+    }
+
+    /* do remaining bytes (less than NMAX, still just one modulo) */
+    if (len) {                  /* avoid modulos if none remaining */
+        while (len >= 16) {
+            len -= 16;
+            DO16(buf);
+            buf += 16;
+        }
+        while (len--) {
+            adler += *buf++;
+            sum2 += adler;
+        }
+        MOD(adler);
+        MOD(sum2);
+    }
+
+    /* return recombined sums */
+    return adler | (sum2 << 16);
+}
+
+/* ========================================================================= */
+local uLong adler32_combine_(adler1, adler2, len2)
+    uLong adler1;
+    uLong adler2;
+    z_off64_t len2;
+{
+    unsigned long sum1;
+    unsigned long sum2;
+    unsigned rem;
+
+    /* for negative len, return invalid adler32 as a clue for debugging */
+    if (len2 < 0)
+        return 0xffffffffUL;
+
+    /* the derivation of this formula is left as an exercise for the reader */
+    MOD63(len2);                /* assumes len2 >= 0 */
+    rem = (unsigned)len2;
+    sum1 = adler1 & 0xffff;
+    sum2 = rem * sum1;
+    MOD(sum2);
+    sum1 += (adler2 & 0xffff) + BASE - 1;
+    sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem;
+    if (sum1 >= BASE) sum1 -= BASE;
+    if (sum1 >= BASE) sum1 -= BASE;
+    if (sum2 >= (BASE << 1)) sum2 -= (BASE << 1);
+    if (sum2 >= BASE) sum2 -= BASE;
+    return sum1 | (sum2 << 16);
+}
+
+/* ========================================================================= */
+uLong ZEXPORT adler32_combine(adler1, adler2, len2)
+    uLong adler1;
+    uLong adler2;
+    z_off_t len2;
+{
+    return adler32_combine_(adler1, adler2, len2);
+}
+
+uLong ZEXPORT adler32_combine64(adler1, adler2, len2)
+    uLong adler1;
+    uLong adler2;
+    z_off64_t len2;
+{
+    return adler32_combine_(adler1, adler2, len2);
+}
diff --git a/libs/ext/zlib/compress.c b/libs/ext/zlib/compress.c
new file mode 100644
index 0000000..ea4dfbe
--- /dev/null
+++ b/libs/ext/zlib/compress.c
@@ -0,0 +1,80 @@
+/* compress.c -- compress a memory buffer
+ * Copyright (C) 1995-2005 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#define ZLIB_INTERNAL
+#include "zlib.h"
+
+/* ===========================================================================
+     Compresses the source buffer into the destination buffer. The level
+   parameter has the same meaning as in deflateInit.  sourceLen is the byte
+   length of the source buffer. Upon entry, destLen is the total size of the
+   destination buffer, which must be at least 0.1% larger than sourceLen plus
+   12 bytes. Upon exit, destLen is the actual size of the compressed buffer.
+
+     compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_BUF_ERROR if there was not enough room in the output buffer,
+   Z_STREAM_ERROR if the level parameter is invalid.
+*/
+int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
+    Bytef *dest;
+    uLongf *destLen;
+    const Bytef *source;
+    uLong sourceLen;
+    int level;
+{
+    z_stream stream;
+    int err;
+
+    stream.next_in = (Bytef*)source;
+    stream.avail_in = (uInt)sourceLen;
+#ifdef MAXSEG_64K
+    /* Check for source > 64K on 16-bit machine: */
+    if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
+#endif
+    stream.next_out = dest;
+    stream.avail_out = (uInt)*destLen;
+    if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
+
+    stream.zalloc = (alloc_func)0;
+    stream.zfree = (free_func)0;
+    stream.opaque = (voidpf)0;
+
+    err = deflateInit(&stream, level);
+    if (err != Z_OK) return err;
+
+    err = deflate(&stream, Z_FINISH);
+    if (err != Z_STREAM_END) {
+        deflateEnd(&stream);
+        return err == Z_OK ? Z_BUF_ERROR : err;
+    }
+    *destLen = stream.total_out;
+
+    err = deflateEnd(&stream);
+    return err;
+}
+
+/* ===========================================================================
+ */
+int ZEXPORT compress (dest, destLen, source, sourceLen)
+    Bytef *dest;
+    uLongf *destLen;
+    const Bytef *source;
+    uLong sourceLen;
+{
+    return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION);
+}
+
+/* ===========================================================================
+     If the default memLevel or windowBits for deflateInit() is changed, then
+   this function needs to be updated.
+ */
+uLong ZEXPORT compressBound (sourceLen)
+    uLong sourceLen;
+{
+    return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
+           (sourceLen >> 25) + 13;
+}
diff --git a/libs/ext/zlib/crc32.c b/libs/ext/zlib/crc32.c
new file mode 100644
index 0000000..979a719
--- /dev/null
+++ b/libs/ext/zlib/crc32.c
@@ -0,0 +1,425 @@
+/* crc32.c -- compute the CRC-32 of a data stream
+ * Copyright (C) 1995-2006, 2010, 2011, 2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ *
+ * Thanks to Rodney Brown <rbrown64 at csc.com.au> for his contribution of faster
+ * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing
+ * tables for updating the shift register in one step with three exclusive-ors
+ * instead of four steps with four exclusive-ors.  This results in about a
+ * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3.
+ */
+
+/* @(#) $Id$ */
+
+/*
+  Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore
+  protection on the static variables used to control the first-use generation
+  of the crc tables.  Therefore, if you #define DYNAMIC_CRC_TABLE, you should
+  first call get_crc_table() to initialize the tables before allowing more than
+  one thread to use crc32().
+
+  DYNAMIC_CRC_TABLE and MAKECRCH can be #defined to write out crc32.h.
+ */
+
+#ifdef MAKECRCH
+#  include <stdio.h>
+#  ifndef DYNAMIC_CRC_TABLE
+#    define DYNAMIC_CRC_TABLE
+#  endif /* !DYNAMIC_CRC_TABLE */
+#endif /* MAKECRCH */
+
+#include "zutil.h"      /* for STDC and FAR definitions */
+
+#define local static
+
+/* Definitions for doing the crc four data bytes at a time. */
+#if !defined(NOBYFOUR) && defined(Z_U4)
+#  define BYFOUR
+#endif
+#ifdef BYFOUR
+   local unsigned long crc32_little OF((unsigned long,
+                        const unsigned char FAR *, unsigned));
+   local unsigned long crc32_big OF((unsigned long,
+                        const unsigned char FAR *, unsigned));
+#  define TBLS 8
+#else
+#  define TBLS 1
+#endif /* BYFOUR */
+
+/* Local functions for crc concatenation */
+local unsigned long gf2_matrix_times OF((unsigned long *mat,
+                                         unsigned long vec));
+local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat));
+local uLong crc32_combine_ OF((uLong crc1, uLong crc2, z_off64_t len2));
+
+
+#ifdef DYNAMIC_CRC_TABLE
+
+local volatile int crc_table_empty = 1;
+local z_crc_t FAR crc_table[TBLS][256];
+local void make_crc_table OF((void));
+#ifdef MAKECRCH
+   local void write_table OF((FILE *, const z_crc_t FAR *));
+#endif /* MAKECRCH */
+/*
+  Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
+  x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.
+
+  Polynomials over GF(2) are represented in binary, one bit per coefficient,
+  with the lowest powers in the most significant bit.  Then adding polynomials
+  is just exclusive-or, and multiplying a polynomial by x is a right shift by
+  one.  If we call the above polynomial p, and represent a byte as the
+  polynomial q, also with the lowest power in the most significant bit (so the
+  byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p,
+  where a mod b means the remainder after dividing a by b.
+
+  This calculation is done using the shift-register method of multiplying and
+  taking the remainder.  The register is initialized to zero, and for each
+  incoming bit, x^32 is added mod p to the register if the bit is a one (where
+  x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by
+  x (which is shifting right by one and adding x^32 mod p if the bit shifted
+  out is a one).  We start with the highest power (least significant bit) of
+  q and repeat for all eight bits of q.
+
+  The first table is simply the CRC of all possible eight bit values.  This is
+  all the information needed to generate CRCs on data a byte at a time for all
+  combinations of CRC register values and incoming bytes.  The remaining tables
+  allow for word-at-a-time CRC calculation for both big-endian and little-
+  endian machines, where a word is four bytes.
+*/
+local void make_crc_table()
+{
+    z_crc_t c;
+    int n, k;
+    z_crc_t poly;                       /* polynomial exclusive-or pattern */
+    /* terms of polynomial defining this crc (except x^32): */
+    static volatile int first = 1;      /* flag to limit concurrent making */
+    static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
+
+    /* See if another task is already doing this (not thread-safe, but better
+       than nothing -- significantly reduces duration of vulnerability in
+       case the advice about DYNAMIC_CRC_TABLE is ignored) */
+    if (first) {
+        first = 0;
+
+        /* make exclusive-or pattern from polynomial (0xedb88320UL) */
+        poly = 0;
+        for (n = 0; n < (int)(sizeof(p)/sizeof(unsigned char)); n++)
+            poly |= (z_crc_t)1 << (31 - p[n]);
+
+        /* generate a crc for every 8-bit value */
+        for (n = 0; n < 256; n++) {
+            c = (z_crc_t)n;
+            for (k = 0; k < 8; k++)
+                c = c & 1 ? poly ^ (c >> 1) : c >> 1;
+            crc_table[0][n] = c;
+        }
+
+#ifdef BYFOUR
+        /* generate crc for each value followed by one, two, and three zeros,
+           and then the byte reversal of those as well as the first table */
+        for (n = 0; n < 256; n++) {
+            c = crc_table[0][n];
+            crc_table[4][n] = ZSWAP32(c);
+            for (k = 1; k < 4; k++) {
+                c = crc_table[0][c & 0xff] ^ (c >> 8);
+                crc_table[k][n] = c;
+                crc_table[k + 4][n] = ZSWAP32(c);
+            }
+        }
+#endif /* BYFOUR */
+
+        crc_table_empty = 0;
+    }
+    else {      /* not first */
+        /* wait for the other guy to finish (not efficient, but rare) */
+        while (crc_table_empty)
+            ;
+    }
+
+#ifdef MAKECRCH
+    /* write out CRC tables to crc32.h */
+    {
+        FILE *out;
+
+        out = fopen("crc32.h", "w");
+        if (out == NULL) return;
+        fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n");
+        fprintf(out, " * Generated automatically by crc32.c\n */\n\n");
+        fprintf(out, "local const z_crc_t FAR ");
+        fprintf(out, "crc_table[TBLS][256] =\n{\n  {\n");
+        write_table(out, crc_table[0]);
+#  ifdef BYFOUR
+        fprintf(out, "#ifdef BYFOUR\n");
+        for (k = 1; k < 8; k++) {
+            fprintf(out, "  },\n  {\n");
+            write_table(out, crc_table[k]);
+        }
+        fprintf(out, "#endif\n");
+#  endif /* BYFOUR */
+        fprintf(out, "  }\n};\n");
+        fclose(out);
+    }
+#endif /* MAKECRCH */
+}
+
+#ifdef MAKECRCH
+local void write_table(out, table)
+    FILE *out;
+    const z_crc_t FAR *table;
+{
+    int n;
+
+    for (n = 0; n < 256; n++)
+        fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : "    ",
+                (unsigned long)(table[n]),
+                n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", "));
+}
+#endif /* MAKECRCH */
+
+#else /* !DYNAMIC_CRC_TABLE */
+/* ========================================================================
+ * Tables of CRC-32s of all single-byte values, made by make_crc_table().
+ */
+#include "crc32.h"
+#endif /* DYNAMIC_CRC_TABLE */
+
+/* =========================================================================
+ * This function can be used by asm versions of crc32()
+ */
+const z_crc_t FAR * ZEXPORT get_crc_table()
+{
+#ifdef DYNAMIC_CRC_TABLE
+    if (crc_table_empty)
+        make_crc_table();
+#endif /* DYNAMIC_CRC_TABLE */
+    return (const z_crc_t FAR *)crc_table;
+}
+
+/* ========================================================================= */
+#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8)
+#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1
+
+/* ========================================================================= */
+unsigned long ZEXPORT crc32(crc, buf, len)
+    unsigned long crc;
+    const unsigned char FAR *buf;
+    uInt len;
+{
+    if (buf == Z_NULL) return 0UL;
+
+#ifdef DYNAMIC_CRC_TABLE
+    if (crc_table_empty)
+        make_crc_table();
+#endif /* DYNAMIC_CRC_TABLE */
+
+#ifdef BYFOUR
+    if (sizeof(void *) == sizeof(ptrdiff_t)) {
+        z_crc_t endian;
+
+        endian = 1;
+        if (*((unsigned char *)(&endian)))
+            return crc32_little(crc, buf, len);
+        else
+            return crc32_big(crc, buf, len);
+    }
+#endif /* BYFOUR */
+    crc = crc ^ 0xffffffffUL;
+    while (len >= 8) {
+        DO8;
+        len -= 8;
+    }
+    if (len) do {
+        DO1;
+    } while (--len);
+    return crc ^ 0xffffffffUL;
+}
+
+#ifdef BYFOUR
+
+/* ========================================================================= */
+#define DOLIT4 c ^= *buf4++; \
+        c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \
+            crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24]
+#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4
+
+/* ========================================================================= */
+local unsigned long crc32_little(crc, buf, len)
+    unsigned long crc;
+    const unsigned char FAR *buf;
+    unsigned len;
+{
+    register z_crc_t c;
+    register const z_crc_t FAR *buf4;
+
+    c = (z_crc_t)crc;
+    c = ~c;
+    while (len && ((ptrdiff_t)buf & 3)) {
+        c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
+        len--;
+    }
+
+    buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
+    while (len >= 32) {
+        DOLIT32;
+        len -= 32;
+    }
+    while (len >= 4) {
+        DOLIT4;
+        len -= 4;
+    }
+    buf = (const unsigned char FAR *)buf4;
+
+    if (len) do {
+        c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
+    } while (--len);
+    c = ~c;
+    return (unsigned long)c;
+}
+
+/* ========================================================================= */
+#define DOBIG4 c ^= *++buf4; \
+        c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \
+            crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24]
+#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
+
+/* ========================================================================= */
+local unsigned long crc32_big(crc, buf, len)
+    unsigned long crc;
+    const unsigned char FAR *buf;
+    unsigned len;
+{
+    register z_crc_t c;
+    register const z_crc_t FAR *buf4;
+
+    c = ZSWAP32((z_crc_t)crc);
+    c = ~c;
+    while (len && ((ptrdiff_t)buf & 3)) {
+        c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
+        len--;
+    }
+
+    buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
+    buf4--;
+    while (len >= 32) {
+        DOBIG32;
+        len -= 32;
+    }
+    while (len >= 4) {
+        DOBIG4;
+        len -= 4;
+    }
+    buf4++;
+    buf = (const unsigned char FAR *)buf4;
+
+    if (len) do {
+        c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
+    } while (--len);
+    c = ~c;
+    return (unsigned long)(ZSWAP32(c));
+}
+
+#endif /* BYFOUR */
+
+#define GF2_DIM 32      /* dimension of GF(2) vectors (length of CRC) */
+
+/* ========================================================================= */
+local unsigned long gf2_matrix_times(mat, vec)
+    unsigned long *mat;
+    unsigned long vec;
+{
+    unsigned long sum;
+
+    sum = 0;
+    while (vec) {
+        if (vec & 1)
+            sum ^= *mat;
+        vec >>= 1;
+        mat++;
+    }
+    return sum;
+}
+
+/* ========================================================================= */
+local void gf2_matrix_square(square, mat)
+    unsigned long *square;
+    unsigned long *mat;
+{
+    int n;
+
+    for (n = 0; n < GF2_DIM; n++)
+        square[n] = gf2_matrix_times(mat, mat[n]);
+}
+
+/* ========================================================================= */
+local uLong crc32_combine_(crc1, crc2, len2)
+    uLong crc1;
+    uLong crc2;
+    z_off64_t len2;
+{
+    int n;
+    unsigned long row;
+    unsigned long even[GF2_DIM];    /* even-power-of-two zeros operator */
+    unsigned long odd[GF2_DIM];     /* odd-power-of-two zeros operator */
+
+    /* degenerate case (also disallow negative lengths) */
+    if (len2 <= 0)
+        return crc1;
+
+    /* put operator for one zero bit in odd */
+    odd[0] = 0xedb88320UL;          /* CRC-32 polynomial */
+    row = 1;
+    for (n = 1; n < GF2_DIM; n++) {
+        odd[n] = row;
+        row <<= 1;
+    }
+
+    /* put operator for two zero bits in even */
+    gf2_matrix_square(even, odd);
+
+    /* put operator for four zero bits in odd */
+    gf2_matrix_square(odd, even);
+
+    /* apply len2 zeros to crc1 (first square will put the operator for one
+       zero byte, eight zero bits, in even) */
+    do {
+        /* apply zeros operator for this bit of len2 */
+        gf2_matrix_square(even, odd);
+        if (len2 & 1)
+            crc1 = gf2_matrix_times(even, crc1);
+        len2 >>= 1;
+
+        /* if no more bits set, then done */
+        if (len2 == 0)
+            break;
+
+        /* another iteration of the loop with odd and even swapped */
+        gf2_matrix_square(odd, even);
+        if (len2 & 1)
+            crc1 = gf2_matrix_times(odd, crc1);
+        len2 >>= 1;
+
+        /* if no more bits set, then done */
+    } while (len2 != 0);
+
+    /* return combined crc */
+    crc1 ^= crc2;
+    return crc1;
+}
+
+/* ========================================================================= */
+uLong ZEXPORT crc32_combine(crc1, crc2, len2)
+    uLong crc1;
+    uLong crc2;
+    z_off_t len2;
+{
+    return crc32_combine_(crc1, crc2, len2);
+}
+
+uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
+    uLong crc1;
+    uLong crc2;
+    z_off64_t len2;
+{
+    return crc32_combine_(crc1, crc2, len2);
+}
diff --git a/libs/ext/zlib/crc32.h b/libs/ext/zlib/crc32.h
new file mode 100644
index 0000000..9e0c778
--- /dev/null
+++ b/libs/ext/zlib/crc32.h
@@ -0,0 +1,441 @@
+/* crc32.h -- tables for rapid CRC calculation
+ * Generated automatically by crc32.c
+ */
+
+local const z_crc_t FAR crc_table[TBLS][256] =
+{
+  {
+    0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL,
+    0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL,
+    0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL,
+    0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL,
+    0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL,
+    0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL,
+    0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL,
+    0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL,
+    0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL,
+    0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL,
+    0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL,
+    0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL,
+    0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL,
+    0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL,
+    0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL,
+    0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL,
+    0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL,
+    0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL,
+    0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL,
+    0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL,
+    0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL,
+    0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL,
+    0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL,
+    0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL,
+    0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL,
+    0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL,
+    0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL,
+    0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL,
+    0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL,
+    0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL,
+    0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL,
+    0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL,
+    0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL,
+    0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL,
+    0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL,
+    0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL,
+    0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL,
+    0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL,
+    0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL,
+    0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL,
+    0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL,
+    0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL,
+    0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL,
+    0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL,
+    0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL,
+    0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL,
+    0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL,
+    0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL,
+    0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL,
+    0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL,
+    0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL,
+    0x2d02ef8dUL
+#ifdef BYFOUR
+  },
+  {
+    0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL,
+    0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL,
+    0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL,
+    0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL,
+    0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL,
+    0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL,
+    0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL,
+    0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL,
+    0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL,
+    0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL,
+    0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL,
+    0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL,
+    0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL,
+    0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL,
+    0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL,
+    0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL,
+    0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL,
+    0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL,
+    0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL,
+    0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL,
+    0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL,
+    0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL,
+    0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL,
+    0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL,
+    0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL,
+    0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL,
+    0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL,
+    0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL,
+    0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL,
+    0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL,
+    0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL,
+    0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL,
+    0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL,
+    0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL,
+    0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL,
+    0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL,
+    0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL,
+    0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL,
+    0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL,
+    0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL,
+    0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL,
+    0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL,
+    0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL,
+    0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL,
+    0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL,
+    0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL,
+    0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL,
+    0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL,
+    0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL,
+    0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL,
+    0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL,
+    0x9324fd72UL
+  },
+  {
+    0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL,
+    0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL,
+    0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL,
+    0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL,
+    0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL,
+    0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL,
+    0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL,
+    0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL,
+    0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL,
+    0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL,
+    0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL,
+    0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL,
+    0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL,
+    0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL,
+    0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL,
+    0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL,
+    0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL,
+    0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL,
+    0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL,
+    0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL,
+    0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL,
+    0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL,
+    0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL,
+    0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL,
+    0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL,
+    0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL,
+    0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL,
+    0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL,
+    0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL,
+    0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL,
+    0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL,
+    0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL,
+    0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL,
+    0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL,
+    0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL,
+    0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL,
+    0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL,
+    0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL,
+    0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL,
+    0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL,
+    0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL,
+    0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL,
+    0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL,
+    0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL,
+    0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL,
+    0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL,
+    0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL,
+    0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL,
+    0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL,
+    0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL,
+    0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL,
+    0xbe9834edUL
+  },
+  {
+    0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL,
+    0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL,
+    0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL,
+    0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL,
+    0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL,
+    0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL,
+    0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL,
+    0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL,
+    0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL,
+    0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL,
+    0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL,
+    0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL,
+    0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL,
+    0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL,
+    0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL,
+    0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL,
+    0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL,
+    0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL,
+    0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL,
+    0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL,
+    0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL,
+    0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL,
+    0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL,
+    0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL,
+    0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL,
+    0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL,
+    0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL,
+    0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL,
+    0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL,
+    0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL,
+    0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL,
+    0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL,
+    0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL,
+    0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL,
+    0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL,
+    0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL,
+    0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL,
+    0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL,
+    0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL,
+    0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL,
+    0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL,
+    0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL,
+    0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL,
+    0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL,
+    0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL,
+    0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL,
+    0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL,
+    0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL,
+    0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL,
+    0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL,
+    0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL,
+    0xde0506f1UL
+  },
+  {
+    0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL,
+    0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL,
+    0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL,
+    0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL,
+    0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL,
+    0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL,
+    0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL,
+    0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL,
+    0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL,
+    0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL,
+    0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL,
+    0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL,
+    0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL,
+    0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL,
+    0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL,
+    0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL,
+    0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL,
+    0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL,
+    0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL,
+    0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL,
+    0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL,
+    0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL,
+    0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL,
+    0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL,
+    0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL,
+    0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL,
+    0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL,
+    0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL,
+    0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL,
+    0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL,
+    0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL,
+    0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL,
+    0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL,
+    0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL,
+    0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL,
+    0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL,
+    0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL,
+    0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL,
+    0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL,
+    0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL,
+    0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL,
+    0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL,
+    0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL,
+    0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL,
+    0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL,
+    0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL,
+    0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL,
+    0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL,
+    0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL,
+    0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL,
+    0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL,
+    0x8def022dUL
+  },
+  {
+    0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL,
+    0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL,
+    0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL,
+    0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL,
+    0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL,
+    0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL,
+    0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL,
+    0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL,
+    0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL,
+    0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL,
+    0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL,
+    0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL,
+    0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL,
+    0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL,
+    0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL,
+    0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL,
+    0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL,
+    0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL,
+    0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL,
+    0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL,
+    0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL,
+    0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL,
+    0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL,
+    0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL,
+    0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL,
+    0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL,
+    0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL,
+    0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL,
+    0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL,
+    0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL,
+    0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL,
+    0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL,
+    0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL,
+    0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL,
+    0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL,
+    0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL,
+    0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL,
+    0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL,
+    0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL,
+    0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL,
+    0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL,
+    0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL,
+    0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL,
+    0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL,
+    0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL,
+    0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL,
+    0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL,
+    0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL,
+    0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL,
+    0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL,
+    0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL,
+    0x72fd2493UL
+  },
+  {
+    0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL,
+    0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL,
+    0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL,
+    0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL,
+    0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL,
+    0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL,
+    0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL,
+    0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL,
+    0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL,
+    0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL,
+    0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL,
+    0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL,
+    0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL,
+    0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL,
+    0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL,
+    0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL,
+    0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL,
+    0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL,
+    0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL,
+    0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL,
+    0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL,
+    0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL,
+    0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL,
+    0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL,
+    0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL,
+    0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL,
+    0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL,
+    0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL,
+    0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL,
+    0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL,
+    0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL,
+    0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL,
+    0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL,
+    0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL,
+    0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL,
+    0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL,
+    0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL,
+    0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL,
+    0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL,
+    0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL,
+    0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL,
+    0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL,
+    0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL,
+    0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL,
+    0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL,
+    0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL,
+    0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL,
+    0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL,
+    0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL,
+    0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL,
+    0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL,
+    0xed3498beUL
+  },
+  {
+    0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL,
+    0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL,
+    0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL,
+    0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL,
+    0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL,
+    0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL,
+    0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL,
+    0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL,
+    0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL,
+    0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL,
+    0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL,
+    0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL,
+    0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL,
+    0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL,
+    0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL,
+    0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL,
+    0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL,
+    0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL,
+    0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL,
+    0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL,
+    0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL,
+    0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL,
+    0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL,
+    0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL,
+    0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL,
+    0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL,
+    0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL,
+    0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL,
+    0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL,
+    0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL,
+    0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL,
+    0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL,
+    0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL,
+    0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL,
+    0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL,
+    0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL,
+    0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL,
+    0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL,
+    0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL,
+    0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL,
+    0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL,
+    0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL,
+    0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL,
+    0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL,
+    0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL,
+    0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL,
+    0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL,
+    0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL,
+    0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL,
+    0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL,
+    0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL,
+    0xf10605deUL
+#endif
+  }
+};
diff --git a/libs/ext/zlib/deflate.c b/libs/ext/zlib/deflate.c
new file mode 100644
index 0000000..9e4c2cb
--- /dev/null
+++ b/libs/ext/zlib/deflate.c
@@ -0,0 +1,1965 @@
+/* deflate.c -- compress data using the deflation algorithm
+ * Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/*
+ *  ALGORITHM
+ *
+ *      The "deflation" process depends on being able to identify portions
+ *      of the input text which are identical to earlier input (within a
+ *      sliding window trailing behind the input currently being processed).
+ *
+ *      The most straightforward technique turns out to be the fastest for
+ *      most input files: try all possible matches and select the longest.
+ *      The key feature of this algorithm is that insertions into the string
+ *      dictionary are very simple and thus fast, and deletions are avoided
+ *      completely. Insertions are performed at each input character, whereas
+ *      string matches are performed only when the previous match ends. So it
+ *      is preferable to spend more time in matches to allow very fast string
+ *      insertions and avoid deletions. The matching algorithm for small
+ *      strings is inspired from that of Rabin & Karp. A brute force approach
+ *      is used to find longer strings when a small match has been found.
+ *      A similar algorithm is used in comic (by Jan-Mark Wams) and freeze
+ *      (by Leonid Broukhis).
+ *         A previous version of this file used a more sophisticated algorithm
+ *      (by Fiala and Greene) which is guaranteed to run in linear amortized
+ *      time, but has a larger average cost, uses more memory and is patented.
+ *      However the F&G algorithm may be faster for some highly redundant
+ *      files if the parameter max_chain_length (described below) is too large.
+ *
+ *  ACKNOWLEDGEMENTS
+ *
+ *      The idea of lazy evaluation of matches is due to Jan-Mark Wams, and
+ *      I found it in 'freeze' written by Leonid Broukhis.
+ *      Thanks to many people for bug reports and testing.
+ *
+ *  REFERENCES
+ *
+ *      Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
+ *      Available in http://tools.ietf.org/html/rfc1951
+ *
+ *      A description of the Rabin and Karp algorithm is given in the book
+ *         "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
+ *
+ *      Fiala,E.R., and Greene,D.H.
+ *         Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595
+ *
+ */
+
+/* @(#) $Id$ */
+
+#include "deflate.h"
+
+const char deflate_copyright[] =
+   " deflate 1.2.7 Copyright 1995-2012 Jean-loup Gailly and Mark Adler ";
+/*
+  If you use the zlib library in a product, an acknowledgment is welcome
+  in the documentation of your product. If for some reason you cannot
+  include such an acknowledgment, I would appreciate that you keep this
+  copyright string in the executable of your product.
+ */
+
+/* ===========================================================================
+ *  Function prototypes.
+ */
+typedef enum {
+    need_more,      /* block not completed, need more input or more output */
+    block_done,     /* block flush performed */
+    finish_started, /* finish started, need only more output at next deflate */
+    finish_done     /* finish done, accept no more input or output */
+} block_state;
+
+typedef block_state (*compress_func) OF((deflate_state *s, int flush));
+/* Compression function. Returns the block state after the call. */
+
+local void fill_window    OF((deflate_state *s));
+local block_state deflate_stored OF((deflate_state *s, int flush));
+local block_state deflate_fast   OF((deflate_state *s, int flush));
+#ifndef FASTEST
+local block_state deflate_slow   OF((deflate_state *s, int flush));
+#endif
+local block_state deflate_rle    OF((deflate_state *s, int flush));
+local block_state deflate_huff   OF((deflate_state *s, int flush));
+local void lm_init        OF((deflate_state *s));
+local void putShortMSB    OF((deflate_state *s, uInt b));
+local void flush_pending  OF((z_streamp strm));
+local int read_buf        OF((z_streamp strm, Bytef *buf, unsigned size));
+#ifdef ASMV
+      void match_init OF((void)); /* asm code initialization */
+      uInt longest_match  OF((deflate_state *s, IPos cur_match));
+#else
+local uInt longest_match  OF((deflate_state *s, IPos cur_match));
+#endif
+
+#ifdef DEBUG
+local  void check_match OF((deflate_state *s, IPos start, IPos match,
+                            int length));
+#endif
+
+/* ===========================================================================
+ * Local data
+ */
+
+#define NIL 0
+/* Tail of hash chains */
+
+#ifndef TOO_FAR
+#  define TOO_FAR 4096
+#endif
+/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
+
+/* Values for max_lazy_match, good_match and max_chain_length, depending on
+ * the desired pack level (0..9). The values given below have been tuned to
+ * exclude worst case performance for pathological files. Better values may be
+ * found for specific files.
+ */
+typedef struct config_s {
+   ush good_length; /* reduce lazy search above this match length */
+   ush max_lazy;    /* do not perform lazy search above this match length */
+   ush nice_length; /* quit search above this match length */
+   ush max_chain;
+   compress_func func;
+} config;
+
+#ifdef FASTEST
+local const config configuration_table[2] = {
+/*      good lazy nice chain */
+/* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
+/* 1 */ {4,    4,  8,    4, deflate_fast}}; /* max speed, no lazy matches */
+#else
+local const config configuration_table[10] = {
+/*      good lazy nice chain */
+/* 0 */ {0,    0,  0,    0, deflate_stored},  /* store only */
+/* 1 */ {4,    4,  8,    4, deflate_fast}, /* max speed, no lazy matches */
+/* 2 */ {4,    5, 16,    8, deflate_fast},
+/* 3 */ {4,    6, 32,   32, deflate_fast},
+
+/* 4 */ {4,    4, 16,   16, deflate_slow},  /* lazy matches */
+/* 5 */ {8,   16, 32,   32, deflate_slow},
+/* 6 */ {8,   16, 128, 128, deflate_slow},
+/* 7 */ {8,   32, 128, 256, deflate_slow},
+/* 8 */ {32, 128, 258, 1024, deflate_slow},
+/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */
+#endif
+
+/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
+ * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
+ * meaning.
+ */
+
+#define EQUAL 0
+/* result of memcmp for equal strings */
+
+#ifndef NO_DUMMY_DECL
+struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
+#endif
+
+/* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */
+#define RANK(f) (((f) << 1) - ((f) > 4 ? 9 : 0))
+
+/* ===========================================================================
+ * Update a hash value with the given input byte
+ * IN  assertion: all calls to to UPDATE_HASH are made with consecutive
+ *    input characters, so that a running hash key can be computed from the
+ *    previous key instead of complete recalculation each time.
+ */
+#define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask)
+
+
+/* ===========================================================================
+ * Insert string str in the dictionary and set match_head to the previous head
+ * of the hash chain (the most recent string with same hash key). Return
+ * the previous length of the hash chain.
+ * If this file is compiled with -DFASTEST, the compression level is forced
+ * to 1, and no hash chains are maintained.
+ * IN  assertion: all calls to to INSERT_STRING are made with consecutive
+ *    input characters and the first MIN_MATCH bytes of str are valid
+ *    (except for the last MIN_MATCH-1 bytes of the input file).
+ */
+#ifdef FASTEST
+#define INSERT_STRING(s, str, match_head) \
+   (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
+    match_head = s->head[s->ins_h], \
+    s->head[s->ins_h] = (Pos)(str))
+#else
+#define INSERT_STRING(s, str, match_head) \
+   (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
+    match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \
+    s->head[s->ins_h] = (Pos)(str))
+#endif
+
+/* ===========================================================================
+ * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
+ * prev[] will be initialized on the fly.
+ */
+#define CLEAR_HASH(s) \
+    s->head[s->hash_size-1] = NIL; \
+    zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
+
+/* ========================================================================= */
+int ZEXPORT deflateInit_(strm, level, version, stream_size)
+    z_streamp strm;
+    int level;
+    const char *version;
+    int stream_size;
+{
+    return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
+                         Z_DEFAULT_STRATEGY, version, stream_size);
+    /* To do: ignore strm->next_in if we use it as window */
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
+                  version, stream_size)
+    z_streamp strm;
+    int  level;
+    int  method;
+    int  windowBits;
+    int  memLevel;
+    int  strategy;
+    const char *version;
+    int stream_size;
+{
+    deflate_state *s;
+    int wrap = 1;
+    static const char my_version[] = ZLIB_VERSION;
+
+    ushf *overlay;
+    /* We overlay pending_buf and d_buf+l_buf. This works since the average
+     * output size for (length,distance) codes is <= 24 bits.
+     */
+
+    if (version == Z_NULL || version[0] != my_version[0] ||
+        stream_size != sizeof(z_stream)) {
+        return Z_VERSION_ERROR;
+    }
+    if (strm == Z_NULL) return Z_STREAM_ERROR;
+
+    strm->msg = Z_NULL;
+    if (strm->zalloc == (alloc_func)0) {
+#ifdef Z_SOLO
+        return Z_STREAM_ERROR;
+#else
+        strm->zalloc = zcalloc;
+        strm->opaque = (voidpf)0;
+#endif
+    }
+    if (strm->zfree == (free_func)0)
+#ifdef Z_SOLO
+        return Z_STREAM_ERROR;
+#else
+        strm->zfree = zcfree;
+#endif
+
+#ifdef FASTEST
+    if (level != 0) level = 1;
+#else
+    if (level == Z_DEFAULT_COMPRESSION) level = 6;
+#endif
+
+    if (windowBits < 0) { /* suppress zlib wrapper */
+        wrap = 0;
+        windowBits = -windowBits;
+    }
+#ifdef GZIP
+    else if (windowBits > 15) {
+        wrap = 2;       /* write gzip wrapper instead */
+        windowBits -= 16;
+    }
+#endif
+    if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
+        windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
+        strategy < 0 || strategy > Z_FIXED) {
+        return Z_STREAM_ERROR;
+    }
+    if (windowBits == 8) windowBits = 9;  /* until 256-byte window bug fixed */
+    s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));
+    if (s == Z_NULL) return Z_MEM_ERROR;
+    strm->state = (struct internal_state FAR *)s;
+    s->strm = strm;
+
+    s->wrap = wrap;
+    s->gzhead = Z_NULL;
+    s->w_bits = windowBits;
+    s->w_size = 1 << s->w_bits;
+    s->w_mask = s->w_size - 1;
+
+    s->hash_bits = memLevel + 7;
+    s->hash_size = 1 << s->hash_bits;
+    s->hash_mask = s->hash_size - 1;
+    s->hash_shift =  ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);
+
+    s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte));
+    s->prev   = (Posf *)  ZALLOC(strm, s->w_size, sizeof(Pos));
+    s->head   = (Posf *)  ZALLOC(strm, s->hash_size, sizeof(Pos));
+
+    s->high_water = 0;      /* nothing written to s->window yet */
+
+    s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
+
+    overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
+    s->pending_buf = (uchf *) overlay;
+    s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
+
+    if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
+        s->pending_buf == Z_NULL) {
+        s->status = FINISH_STATE;
+        strm->msg = (char*)ERR_MSG(Z_MEM_ERROR);
+        deflateEnd (strm);
+        return Z_MEM_ERROR;
+    }
+    s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
+    s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
+
+    s->level = level;
+    s->strategy = strategy;
+    s->method = (Byte)method;
+
+    return deflateReset(strm);
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
+    z_streamp strm;
+    const Bytef *dictionary;
+    uInt  dictLength;
+{
+    deflate_state *s;
+    uInt str, n;
+    int wrap;
+    unsigned avail;
+    unsigned char *next;
+
+    if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL)
+        return Z_STREAM_ERROR;
+    s = strm->state;
+    wrap = s->wrap;
+    if (wrap == 2 || (wrap == 1 && s->status != INIT_STATE) || s->lookahead)
+        return Z_STREAM_ERROR;
+
+    /* when using zlib wrappers, compute Adler-32 for provided dictionary */
+    if (wrap == 1)
+        strm->adler = adler32(strm->adler, dictionary, dictLength);
+    s->wrap = 0;                    /* avoid computing Adler-32 in read_buf */
+
+    /* if dictionary would fill window, just replace the history */
+    if (dictLength >= s->w_size) {
+        if (wrap == 0) {            /* already empty otherwise */
+            CLEAR_HASH(s);
+            s->strstart = 0;
+            s->block_start = 0L;
+            s->insert = 0;
+        }
+        dictionary += dictLength - s->w_size;  /* use the tail */
+        dictLength = s->w_size;
+    }
+
+    /* insert dictionary into window and hash */
+    avail = strm->avail_in;
+    next = strm->next_in;
+    strm->avail_in = dictLength;
+    strm->next_in = (Bytef *)dictionary;
+    fill_window(s);
+    while (s->lookahead >= MIN_MATCH) {
+        str = s->strstart;
+        n = s->lookahead - (MIN_MATCH-1);
+        do {
+            UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
+#ifndef FASTEST
+            s->prev[str & s->w_mask] = s->head[s->ins_h];
+#endif
+            s->head[s->ins_h] = (Pos)str;
+            str++;
+        } while (--n);
+        s->strstart = str;
+        s->lookahead = MIN_MATCH-1;
+        fill_window(s);
+    }
+    s->strstart += s->lookahead;
+    s->block_start = (long)s->strstart;
+    s->insert = s->lookahead;
+    s->lookahead = 0;
+    s->match_length = s->prev_length = MIN_MATCH-1;
+    s->match_available = 0;
+    strm->next_in = next;
+    strm->avail_in = avail;
+    s->wrap = wrap;
+    return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateResetKeep (strm)
+    z_streamp strm;
+{
+    deflate_state *s;
+
+    if (strm == Z_NULL || strm->state == Z_NULL ||
+        strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) {
+        return Z_STREAM_ERROR;
+    }
+
+    strm->total_in = strm->total_out = 0;
+    strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
+    strm->data_type = Z_UNKNOWN;
+
+    s = (deflate_state *)strm->state;
+    s->pending = 0;
+    s->pending_out = s->pending_buf;
+
+    if (s->wrap < 0) {
+        s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */
+    }
+    s->status = s->wrap ? INIT_STATE : BUSY_STATE;
+    strm->adler =
+#ifdef GZIP
+        s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
+#endif
+        adler32(0L, Z_NULL, 0);
+    s->last_flush = Z_NO_FLUSH;
+
+    _tr_init(s);
+
+    return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateReset (strm)
+    z_streamp strm;
+{
+    int ret;
+
+    ret = deflateResetKeep(strm);
+    if (ret == Z_OK)
+        lm_init(strm->state);
+    return ret;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateSetHeader (strm, head)
+    z_streamp strm;
+    gz_headerp head;
+{
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    if (strm->state->wrap != 2) return Z_STREAM_ERROR;
+    strm->state->gzhead = head;
+    return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflatePending (strm, pending, bits)
+    unsigned *pending;
+    int *bits;
+    z_streamp strm;
+{
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    if (pending != Z_NULL)
+        *pending = strm->state->pending;
+    if (bits != Z_NULL)
+        *bits = strm->state->bi_valid;
+    return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflatePrime (strm, bits, value)
+    z_streamp strm;
+    int bits;
+    int value;
+{
+    deflate_state *s;
+    int put;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    s = strm->state;
+    if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3))
+        return Z_BUF_ERROR;
+    do {
+        put = Buf_size - s->bi_valid;
+        if (put > bits)
+            put = bits;
+        s->bi_buf |= (ush)((value & ((1 << put) - 1)) << s->bi_valid);
+        s->bi_valid += put;
+        _tr_flush_bits(s);
+        value >>= put;
+        bits -= put;
+    } while (bits);
+    return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateParams(strm, level, strategy)
+    z_streamp strm;
+    int level;
+    int strategy;
+{
+    deflate_state *s;
+    compress_func func;
+    int err = Z_OK;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    s = strm->state;
+
+#ifdef FASTEST
+    if (level != 0) level = 1;
+#else
+    if (level == Z_DEFAULT_COMPRESSION) level = 6;
+#endif
+    if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) {
+        return Z_STREAM_ERROR;
+    }
+    func = configuration_table[s->level].func;
+
+    if ((strategy != s->strategy || func != configuration_table[level].func) &&
+        strm->total_in != 0) {
+        /* Flush the last buffer: */
+        err = deflate(strm, Z_BLOCK);
+    }
+    if (s->level != level) {
+        s->level = level;
+        s->max_lazy_match   = configuration_table[level].max_lazy;
+        s->good_match       = configuration_table[level].good_length;
+        s->nice_match       = configuration_table[level].nice_length;
+        s->max_chain_length = configuration_table[level].max_chain;
+    }
+    s->strategy = strategy;
+    return err;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain)
+    z_streamp strm;
+    int good_length;
+    int max_lazy;
+    int nice_length;
+    int max_chain;
+{
+    deflate_state *s;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    s = strm->state;
+    s->good_match = good_length;
+    s->max_lazy_match = max_lazy;
+    s->nice_match = nice_length;
+    s->max_chain_length = max_chain;
+    return Z_OK;
+}
+
+/* =========================================================================
+ * For the default windowBits of 15 and memLevel of 8, this function returns
+ * a close to exact, as well as small, upper bound on the compressed size.
+ * They are coded as constants here for a reason--if the #define's are
+ * changed, then this function needs to be changed as well.  The return
+ * value for 15 and 8 only works for those exact settings.
+ *
+ * For any setting other than those defaults for windowBits and memLevel,
+ * the value returned is a conservative worst case for the maximum expansion
+ * resulting from using fixed blocks instead of stored blocks, which deflate
+ * can emit on compressed data for some combinations of the parameters.
+ *
+ * This function could be more sophisticated to provide closer upper bounds for
+ * every combination of windowBits and memLevel.  But even the conservative
+ * upper bound of about 14% expansion does not seem onerous for output buffer
+ * allocation.
+ */
+uLong ZEXPORT deflateBound(strm, sourceLen)
+    z_streamp strm;
+    uLong sourceLen;
+{
+    deflate_state *s;
+    uLong complen, wraplen;
+    Bytef *str;
+
+    /* conservative upper bound for compressed data */
+    complen = sourceLen +
+              ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5;
+
+    /* if can't get parameters, return conservative bound plus zlib wrapper */
+    if (strm == Z_NULL || strm->state == Z_NULL)
+        return complen + 6;
+
+    /* compute wrapper length */
+    s = strm->state;
+    switch (s->wrap) {
+    case 0:                                 /* raw deflate */
+        wraplen = 0;
+        break;
+    case 1:                                 /* zlib wrapper */
+        wraplen = 6 + (s->strstart ? 4 : 0);
+        break;
+    case 2:                                 /* gzip wrapper */
+        wraplen = 18;
+        if (s->gzhead != Z_NULL) {          /* user-supplied gzip header */
+            if (s->gzhead->extra != Z_NULL)
+                wraplen += 2 + s->gzhead->extra_len;
+            str = s->gzhead->name;
+            if (str != Z_NULL)
+                do {
+                    wraplen++;
+                } while (*str++);
+            str = s->gzhead->comment;
+            if (str != Z_NULL)
+                do {
+                    wraplen++;
+                } while (*str++);
+            if (s->gzhead->hcrc)
+                wraplen += 2;
+        }
+        break;
+    default:                                /* for compiler happiness */
+        wraplen = 6;
+    }
+
+    /* if not default parameters, return conservative bound */
+    if (s->w_bits != 15 || s->hash_bits != 8 + 7)
+        return complen + wraplen;
+
+    /* default settings: return tight bound for that case */
+    return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
+           (sourceLen >> 25) + 13 - 6 + wraplen;
+}
+
+/* =========================================================================
+ * Put a short in the pending buffer. The 16-bit value is put in MSB order.
+ * IN assertion: the stream state is correct and there is enough room in
+ * pending_buf.
+ */
+local void putShortMSB (s, b)
+    deflate_state *s;
+    uInt b;
+{
+    put_byte(s, (Byte)(b >> 8));
+    put_byte(s, (Byte)(b & 0xff));
+}
+
+/* =========================================================================
+ * Flush as much pending output as possible. All deflate() output goes
+ * through this function so some applications may wish to modify it
+ * to avoid allocating a large strm->next_out buffer and copying into it.
+ * (See also read_buf()).
+ */
+local void flush_pending(strm)
+    z_streamp strm;
+{
+    unsigned len;
+    deflate_state *s = strm->state;
+
+    _tr_flush_bits(s);
+    len = s->pending;
+    if (len > strm->avail_out) len = strm->avail_out;
+    if (len == 0) return;
+
+    zmemcpy(strm->next_out, s->pending_out, len);
+    strm->next_out  += len;
+    s->pending_out  += len;
+    strm->total_out += len;
+    strm->avail_out  -= len;
+    s->pending -= len;
+    if (s->pending == 0) {
+        s->pending_out = s->pending_buf;
+    }
+}
+
+/* ========================================================================= */
+int ZEXPORT deflate (strm, flush)
+    z_streamp strm;
+    int flush;
+{
+    int old_flush; /* value of flush param for previous deflate call */
+    deflate_state *s;
+
+    if (strm == Z_NULL || strm->state == Z_NULL ||
+        flush > Z_BLOCK || flush < 0) {
+        return Z_STREAM_ERROR;
+    }
+    s = strm->state;
+
+    if (strm->next_out == Z_NULL ||
+        (strm->next_in == Z_NULL && strm->avail_in != 0) ||
+        (s->status == FINISH_STATE && flush != Z_FINISH)) {
+        ERR_RETURN(strm, Z_STREAM_ERROR);
+    }
+    if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
+
+    s->strm = strm; /* just in case */
+    old_flush = s->last_flush;
+    s->last_flush = flush;
+
+    /* Write the header */
+    if (s->status == INIT_STATE) {
+#ifdef GZIP
+        if (s->wrap == 2) {
+            strm->adler = crc32(0L, Z_NULL, 0);
+            put_byte(s, 31);
+            put_byte(s, 139);
+            put_byte(s, 8);
+            if (s->gzhead == Z_NULL) {
+                put_byte(s, 0);
+                put_byte(s, 0);
+                put_byte(s, 0);
+                put_byte(s, 0);
+                put_byte(s, 0);
+                put_byte(s, s->level == 9 ? 2 :
+                            (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+                             4 : 0));
+                put_byte(s, OS_CODE);
+                s->status = BUSY_STATE;
+            }
+            else {
+                put_byte(s, (s->gzhead->text ? 1 : 0) +
+                            (s->gzhead->hcrc ? 2 : 0) +
+                            (s->gzhead->extra == Z_NULL ? 0 : 4) +
+                            (s->gzhead->name == Z_NULL ? 0 : 8) +
+                            (s->gzhead->comment == Z_NULL ? 0 : 16)
+                        );
+                put_byte(s, (Byte)(s->gzhead->time & 0xff));
+                put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff));
+                put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff));
+                put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff));
+                put_byte(s, s->level == 9 ? 2 :
+                            (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+                             4 : 0));
+                put_byte(s, s->gzhead->os & 0xff);
+                if (s->gzhead->extra != Z_NULL) {
+                    put_byte(s, s->gzhead->extra_len & 0xff);
+                    put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);
+                }
+                if (s->gzhead->hcrc)
+                    strm->adler = crc32(strm->adler, s->pending_buf,
+                                        s->pending);
+                s->gzindex = 0;
+                s->status = EXTRA_STATE;
+            }
+        }
+        else
+#endif
+        {
+            uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
+            uInt level_flags;
+
+            if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)
+                level_flags = 0;
+            else if (s->level < 6)
+                level_flags = 1;
+            else if (s->level == 6)
+                level_flags = 2;
+            else
+                level_flags = 3;
+            header |= (level_flags << 6);
+            if (s->strstart != 0) header |= PRESET_DICT;
+            header += 31 - (header % 31);
+
+            s->status = BUSY_STATE;
+            putShortMSB(s, header);
+
+            /* Save the adler32 of the preset dictionary: */
+            if (s->strstart != 0) {
+                putShortMSB(s, (uInt)(strm->adler >> 16));
+                putShortMSB(s, (uInt)(strm->adler & 0xffff));
+            }
+            strm->adler = adler32(0L, Z_NULL, 0);
+        }
+    }
+#ifdef GZIP
+    if (s->status == EXTRA_STATE) {
+        if (s->gzhead->extra != Z_NULL) {
+            uInt beg = s->pending;  /* start of bytes to update crc */
+
+            while (s->gzindex < (s->gzhead->extra_len & 0xffff)) {
+                if (s->pending == s->pending_buf_size) {
+                    if (s->gzhead->hcrc && s->pending > beg)
+                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
+                                            s->pending - beg);
+                    flush_pending(strm);
+                    beg = s->pending;
+                    if (s->pending == s->pending_buf_size)
+                        break;
+                }
+                put_byte(s, s->gzhead->extra[s->gzindex]);
+                s->gzindex++;
+            }
+            if (s->gzhead->hcrc && s->pending > beg)
+                strm->adler = crc32(strm->adler, s->pending_buf + beg,
+                                    s->pending - beg);
+            if (s->gzindex == s->gzhead->extra_len) {
+                s->gzindex = 0;
+                s->status = NAME_STATE;
+            }
+        }
+        else
+            s->status = NAME_STATE;
+    }
+    if (s->status == NAME_STATE) {
+        if (s->gzhead->name != Z_NULL) {
+            uInt beg = s->pending;  /* start of bytes to update crc */
+            int val;
+
+            do {
+                if (s->pending == s->pending_buf_size) {
+                    if (s->gzhead->hcrc && s->pending > beg)
+                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
+                                            s->pending - beg);
+                    flush_pending(strm);
+                    beg = s->pending;
+                    if (s->pending == s->pending_buf_size) {
+                        val = 1;
+                        break;
+                    }
+                }
+                val = s->gzhead->name[s->gzindex++];
+                put_byte(s, val);
+            } while (val != 0);
+            if (s->gzhead->hcrc && s->pending > beg)
+                strm->adler = crc32(strm->adler, s->pending_buf + beg,
+                                    s->pending - beg);
+            if (val == 0) {
+                s->gzindex = 0;
+                s->status = COMMENT_STATE;
+            }
+        }
+        else
+            s->status = COMMENT_STATE;
+    }
+    if (s->status == COMMENT_STATE) {
+        if (s->gzhead->comment != Z_NULL) {
+            uInt beg = s->pending;  /* start of bytes to update crc */
+            int val;
+
+            do {
+                if (s->pending == s->pending_buf_size) {
+                    if (s->gzhead->hcrc && s->pending > beg)
+                        strm->adler = crc32(strm->adler, s->pending_buf + beg,
+                                            s->pending - beg);
+                    flush_pending(strm);
+                    beg = s->pending;
+                    if (s->pending == s->pending_buf_size) {
+                        val = 1;
+                        break;
+                    }
+                }
+                val = s->gzhead->comment[s->gzindex++];
+                put_byte(s, val);
+            } while (val != 0);
+            if (s->gzhead->hcrc && s->pending > beg)
+                strm->adler = crc32(strm->adler, s->pending_buf + beg,
+                                    s->pending - beg);
+            if (val == 0)
+                s->status = HCRC_STATE;
+        }
+        else
+            s->status = HCRC_STATE;
+    }
+    if (s->status == HCRC_STATE) {
+        if (s->gzhead->hcrc) {
+            if (s->pending + 2 > s->pending_buf_size)
+                flush_pending(strm);
+            if (s->pending + 2 <= s->pending_buf_size) {
+                put_byte(s, (Byte)(strm->adler & 0xff));
+                put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
+                strm->adler = crc32(0L, Z_NULL, 0);
+                s->status = BUSY_STATE;
+            }
+        }
+        else
+            s->status = BUSY_STATE;
+    }
+#endif
+
+    /* Flush as much pending output as possible */
+    if (s->pending != 0) {
+        flush_pending(strm);
+        if (strm->avail_out == 0) {
+            /* Since avail_out is 0, deflate will be called again with
+             * more output space, but possibly with both pending and
+             * avail_in equal to zero. There won't be anything to do,
+             * but this is not an error situation so make sure we
+             * return OK instead of BUF_ERROR at next call of deflate:
+             */
+            s->last_flush = -1;
+            return Z_OK;
+        }
+
+    /* Make sure there is something to do and avoid duplicate consecutive
+     * flushes. For repeated and useless calls with Z_FINISH, we keep
+     * returning Z_STREAM_END instead of Z_BUF_ERROR.
+     */
+    } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) &&
+               flush != Z_FINISH) {
+        ERR_RETURN(strm, Z_BUF_ERROR);
+    }
+
+    /* User must not provide more input after the first FINISH: */
+    if (s->status == FINISH_STATE && strm->avail_in != 0) {
+        ERR_RETURN(strm, Z_BUF_ERROR);
+    }
+
+    /* Start a new block or continue the current one.
+     */
+    if (strm->avail_in != 0 || s->lookahead != 0 ||
+        (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
+        block_state bstate;
+
+        bstate = s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :
+                    (s->strategy == Z_RLE ? deflate_rle(s, flush) :
+                        (*(configuration_table[s->level].func))(s, flush));
+
+        if (bstate == finish_started || bstate == finish_done) {
+            s->status = FINISH_STATE;
+        }
+        if (bstate == need_more || bstate == finish_started) {
+            if (strm->avail_out == 0) {
+                s->last_flush = -1; /* avoid BUF_ERROR next call, see above */
+            }
+            return Z_OK;
+            /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
+             * of deflate should use the same flush parameter to make sure
+             * that the flush is complete. So we don't have to output an
+             * empty block here, this will be done at next call. This also
+             * ensures that for a very small output buffer, we emit at most
+             * one empty block.
+             */
+        }
+        if (bstate == block_done) {
+            if (flush == Z_PARTIAL_FLUSH) {
+                _tr_align(s);
+            } else if (flush != Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */
+                _tr_stored_block(s, (char*)0, 0L, 0);
+                /* For a full flush, this empty block will be recognized
+                 * as a special marker by inflate_sync().
+                 */
+                if (flush == Z_FULL_FLUSH) {
+                    CLEAR_HASH(s);             /* forget history */
+                    if (s->lookahead == 0) {
+                        s->strstart = 0;
+                        s->block_start = 0L;
+                        s->insert = 0;
+                    }
+                }
+            }
+            flush_pending(strm);
+            if (strm->avail_out == 0) {
+              s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */
+              return Z_OK;
+            }
+        }
+    }
+    Assert(strm->avail_out > 0, "bug2");
+
+    if (flush != Z_FINISH) return Z_OK;
+    if (s->wrap <= 0) return Z_STREAM_END;
+
+    /* Write the trailer */
+#ifdef GZIP
+    if (s->wrap == 2) {
+        put_byte(s, (Byte)(strm->adler & 0xff));
+        put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
+        put_byte(s, (Byte)((strm->adler >> 16) & 0xff));
+        put_byte(s, (Byte)((strm->adler >> 24) & 0xff));
+        put_byte(s, (Byte)(strm->total_in & 0xff));
+        put_byte(s, (Byte)((strm->total_in >> 8) & 0xff));
+        put_byte(s, (Byte)((strm->total_in >> 16) & 0xff));
+        put_byte(s, (Byte)((strm->total_in >> 24) & 0xff));
+    }
+    else
+#endif
+    {
+        putShortMSB(s, (uInt)(strm->adler >> 16));
+        putShortMSB(s, (uInt)(strm->adler & 0xffff));
+    }
+    flush_pending(strm);
+    /* If avail_out is zero, the application will call deflate again
+     * to flush the rest.
+     */
+    if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */
+    return s->pending != 0 ? Z_OK : Z_STREAM_END;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateEnd (strm)
+    z_streamp strm;
+{
+    int status;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+    status = strm->state->status;
+    if (status != INIT_STATE &&
+        status != EXTRA_STATE &&
+        status != NAME_STATE &&
+        status != COMMENT_STATE &&
+        status != HCRC_STATE &&
+        status != BUSY_STATE &&
+        status != FINISH_STATE) {
+      return Z_STREAM_ERROR;
+    }
+
+    /* Deallocate in reverse order of allocations: */
+    TRY_FREE(strm, strm->state->pending_buf);
+    TRY_FREE(strm, strm->state->head);
+    TRY_FREE(strm, strm->state->prev);
+    TRY_FREE(strm, strm->state->window);
+
+    ZFREE(strm, strm->state);
+    strm->state = Z_NULL;
+
+    return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
+}
+
+/* =========================================================================
+ * Copy the source state to the destination state.
+ * To simplify the source, this is not supported for 16-bit MSDOS (which
+ * doesn't have enough memory anyway to duplicate compression states).
+ */
+int ZEXPORT deflateCopy (dest, source)
+    z_streamp dest;
+    z_streamp source;
+{
+#ifdef MAXSEG_64K
+    return Z_STREAM_ERROR;
+#else
+    deflate_state *ds;
+    deflate_state *ss;
+    ushf *overlay;
+
+
+    if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
+        return Z_STREAM_ERROR;
+    }
+
+    ss = source->state;
+
+    zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
+
+    ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
+    if (ds == Z_NULL) return Z_MEM_ERROR;
+    dest->state = (struct internal_state FAR *) ds;
+    zmemcpy((voidpf)ds, (voidpf)ss, sizeof(deflate_state));
+    ds->strm = dest;
+
+    ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
+    ds->prev   = (Posf *)  ZALLOC(dest, ds->w_size, sizeof(Pos));
+    ds->head   = (Posf *)  ZALLOC(dest, ds->hash_size, sizeof(Pos));
+    overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
+    ds->pending_buf = (uchf *) overlay;
+
+    if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
+        ds->pending_buf == Z_NULL) {
+        deflateEnd (dest);
+        return Z_MEM_ERROR;
+    }
+    /* following zmemcpy do not work for 16-bit MSDOS */
+    zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
+    zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos));
+    zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos));
+    zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
+
+    ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
+    ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
+    ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
+
+    ds->l_desc.dyn_tree = ds->dyn_ltree;
+    ds->d_desc.dyn_tree = ds->dyn_dtree;
+    ds->bl_desc.dyn_tree = ds->bl_tree;
+
+    return Z_OK;
+#endif /* MAXSEG_64K */
+}
+
+/* ===========================================================================
+ * Read a new buffer from the current input stream, update the adler32
+ * and total number of bytes read.  All deflate() input goes through
+ * this function so some applications may wish to modify it to avoid
+ * allocating a large strm->next_in buffer and copying from it.
+ * (See also flush_pending()).
+ */
+local int read_buf(strm, buf, size)
+    z_streamp strm;
+    Bytef *buf;
+    unsigned size;
+{
+    unsigned len = strm->avail_in;
+
+    if (len > size) len = size;
+    if (len == 0) return 0;
+
+    strm->avail_in  -= len;
+
+    zmemcpy(buf, strm->next_in, len);
+    if (strm->state->wrap == 1) {
+        strm->adler = adler32(strm->adler, buf, len);
+    }
+#ifdef GZIP
+    else if (strm->state->wrap == 2) {
+        strm->adler = crc32(strm->adler, buf, len);
+    }
+#endif
+    strm->next_in  += len;
+    strm->total_in += len;
+
+    return (int)len;
+}
+
+/* ===========================================================================
+ * Initialize the "longest match" routines for a new zlib stream
+ */
+local void lm_init (s)
+    deflate_state *s;
+{
+    s->window_size = (ulg)2L*s->w_size;
+
+    CLEAR_HASH(s);
+
+    /* Set the default configuration parameters:
+     */
+    s->max_lazy_match   = configuration_table[s->level].max_lazy;
+    s->good_match       = configuration_table[s->level].good_length;
+    s->nice_match       = configuration_table[s->level].nice_length;
+    s->max_chain_length = configuration_table[s->level].max_chain;
+
+    s->strstart = 0;
+    s->block_start = 0L;
+    s->lookahead = 0;
+    s->insert = 0;
+    s->match_length = s->prev_length = MIN_MATCH-1;
+    s->match_available = 0;
+    s->ins_h = 0;
+#ifndef FASTEST
+#ifdef ASMV
+    match_init(); /* initialize the asm code */
+#endif
+#endif
+}
+
+#ifndef FASTEST
+/* ===========================================================================
+ * Set match_start to the longest match starting at the given string and
+ * return its length. Matches shorter or equal to prev_length are discarded,
+ * in which case the result is equal to prev_length and match_start is
+ * garbage.
+ * IN assertions: cur_match is the head of the hash chain for the current
+ *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
+ * OUT assertion: the match length is not greater than s->lookahead.
+ */
+#ifndef ASMV
+/* For 80x86 and 680x0, an optimized version will be provided in match.asm or
+ * match.S. The code will be functionally equivalent.
+ */
+local uInt longest_match(s, cur_match)
+    deflate_state *s;
+    IPos cur_match;                             /* current match */
+{
+    unsigned chain_length = s->max_chain_length;/* max hash chain length */
+    register Bytef *scan = s->window + s->strstart; /* current string */
+    register Bytef *match;                       /* matched string */
+    register int len;                           /* length of current match */
+    int best_len = s->prev_length;              /* best match length so far */
+    int nice_match = s->nice_match;             /* stop if match long enough */
+    IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
+        s->strstart - (IPos)MAX_DIST(s) : NIL;
+    /* Stop when cur_match becomes <= limit. To simplify the code,
+     * we prevent matches with the string of window index 0.
+     */
+    Posf *prev = s->prev;
+    uInt wmask = s->w_mask;
+
+#ifdef UNALIGNED_OK
+    /* Compare two bytes at a time. Note: this is not always beneficial.
+     * Try with and without -DUNALIGNED_OK to check.
+     */
+    register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
+    register ush scan_start = *(ushf*)scan;
+    register ush scan_end   = *(ushf*)(scan+best_len-1);
+#else
+    register Bytef *strend = s->window + s->strstart + MAX_MATCH;
+    register Byte scan_end1  = scan[best_len-1];
+    register Byte scan_end   = scan[best_len];
+#endif
+
+    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
+     * It is easy to get rid of this optimization if necessary.
+     */
+    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
+
+    /* Do not waste too much time if we already have a good match: */
+    if (s->prev_length >= s->good_match) {
+        chain_length >>= 2;
+    }
+    /* Do not look for matches beyond the end of the input. This is necessary
+     * to make deflate deterministic.
+     */
+    if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
+
+    Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
+
+    do {
+        Assert(cur_match < s->strstart, "no future");
+        match = s->window + cur_match;
+
+        /* Skip to next match if the match length cannot increase
+         * or if the match length is less than 2.  Note that the checks below
+         * for insufficient lookahead only occur occasionally for performance
+         * reasons.  Therefore uninitialized memory will be accessed, and
+         * conditional jumps will be made that depend on those values.
+         * However the length of the match is limited to the lookahead, so
+         * the output of deflate is not affected by the uninitialized values.
+         */
+#if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
+        /* This code assumes sizeof(unsigned short) == 2. Do not use
+         * UNALIGNED_OK if your compiler uses a different size.
+         */
+        if (*(ushf*)(match+best_len-1) != scan_end ||
+            *(ushf*)match != scan_start) continue;
+
+        /* It is not necessary to compare scan[2] and match[2] since they are
+         * always equal when the other bytes match, given that the hash keys
+         * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
+         * strstart+3, +5, ... up to strstart+257. We check for insufficient
+         * lookahead only every 4th comparison; the 128th check will be made
+         * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
+         * necessary to put more guard bytes at the end of the window, or
+         * to check more often for insufficient lookahead.
+         */
+        Assert(scan[2] == match[2], "scan[2]?");
+        scan++, match++;
+        do {
+        } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+                 scan < strend);
+        /* The funny "do {}" generates better code on most compilers */
+
+        /* Here, scan <= window+strstart+257 */
+        Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+        if (*scan == *match) scan++;
+
+        len = (MAX_MATCH - 1) - (int)(strend-scan);
+        scan = strend - (MAX_MATCH-1);
+
+#else /* UNALIGNED_OK */
+
+        if (match[best_len]   != scan_end  ||
+            match[best_len-1] != scan_end1 ||
+            *match            != *scan     ||
+            *++match          != scan[1])      continue;
+
+        /* The check at best_len-1 can be removed because it will be made
+         * again later. (This heuristic is not always a win.)
+         * It is not necessary to compare scan[2] and match[2] since they
+         * are always equal when the other bytes match, given that
+         * the hash keys are equal and that HASH_BITS >= 8.
+         */
+        scan += 2, match++;
+        Assert(*scan == *match, "match[2]?");
+
+        /* We check for insufficient lookahead only every 8th comparison;
+         * the 256th check will be made at strstart+258.
+         */
+        do {
+        } while (*++scan == *++match && *++scan == *++match &&
+                 *++scan == *++match && *++scan == *++match &&
+                 *++scan == *++match && *++scan == *++match &&
+                 *++scan == *++match && *++scan == *++match &&
+                 scan < strend);
+
+        Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+
+        len = MAX_MATCH - (int)(strend - scan);
+        scan = strend - MAX_MATCH;
+
+#endif /* UNALIGNED_OK */
+
+        if (len > best_len) {
+            s->match_start = cur_match;
+            best_len = len;
+            if (len >= nice_match) break;
+#ifdef UNALIGNED_OK
+            scan_end = *(ushf*)(scan+best_len-1);
+#else
+            scan_end1  = scan[best_len-1];
+            scan_end   = scan[best_len];
+#endif
+        }
+    } while ((cur_match = prev[cur_match & wmask]) > limit
+             && --chain_length != 0);
+
+    if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
+    return s->lookahead;
+}
+#endif /* ASMV */
+
+#else /* FASTEST */
+
+/* ---------------------------------------------------------------------------
+ * Optimized version for FASTEST only
+ */
+local uInt longest_match(s, cur_match)
+    deflate_state *s;
+    IPos cur_match;                             /* current match */
+{
+    register Bytef *scan = s->window + s->strstart; /* current string */
+    register Bytef *match;                       /* matched string */
+    register int len;                           /* length of current match */
+    register Bytef *strend = s->window + s->strstart + MAX_MATCH;
+
+    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
+     * It is easy to get rid of this optimization if necessary.
+     */
+    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
+
+    Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
+
+    Assert(cur_match < s->strstart, "no future");
+
+    match = s->window + cur_match;
+
+    /* Return failure if the match length is less than 2:
+     */
+    if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1;
+
+    /* The check at best_len-1 can be removed because it will be made
+     * again later. (This heuristic is not always a win.)
+     * It is not necessary to compare scan[2] and match[2] since they
+     * are always equal when the other bytes match, given that
+     * the hash keys are equal and that HASH_BITS >= 8.
+     */
+    scan += 2, match += 2;
+    Assert(*scan == *match, "match[2]?");
+
+    /* We check for insufficient lookahead only every 8th comparison;
+     * the 256th check will be made at strstart+258.
+     */
+    do {
+    } while (*++scan == *++match && *++scan == *++match &&
+             *++scan == *++match && *++scan == *++match &&
+             *++scan == *++match && *++scan == *++match &&
+             *++scan == *++match && *++scan == *++match &&
+             scan < strend);
+
+    Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+
+    len = MAX_MATCH - (int)(strend - scan);
+
+    if (len < MIN_MATCH) return MIN_MATCH - 1;
+
+    s->match_start = cur_match;
+    return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead;
+}
+
+#endif /* FASTEST */
+
+#ifdef DEBUG
+/* ===========================================================================
+ * Check that the match at match_start is indeed a match.
+ */
+local void check_match(s, start, match, length)
+    deflate_state *s;
+    IPos start, match;
+    int length;
+{
+    /* check that the match is indeed a match */
+    if (zmemcmp(s->window + match,
+                s->window + start, length) != EQUAL) {
+        fprintf(stderr, " start %u, match %u, length %d\n",
+                start, match, length);
+        do {
+            fprintf(stderr, "%c%c", s->window[match++], s->window[start++]);
+        } while (--length != 0);
+        z_error("invalid match");
+    }
+    if (z_verbose > 1) {
+        fprintf(stderr,"\\[%d,%d]", start-match, length);
+        do { putc(s->window[start++], stderr); } while (--length != 0);
+    }
+}
+#else
+#  define check_match(s, start, match, length)
+#endif /* DEBUG */
+
+/* ===========================================================================
+ * Fill the window when the lookahead becomes insufficient.
+ * Updates strstart and lookahead.
+ *
+ * IN assertion: lookahead < MIN_LOOKAHEAD
+ * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
+ *    At least one byte has been read, or avail_in == 0; reads are
+ *    performed for at least two bytes (required for the zip translate_eol
+ *    option -- not supported here).
+ */
+local void fill_window(s)
+    deflate_state *s;
+{
+    register unsigned n, m;
+    register Posf *p;
+    unsigned more;    /* Amount of free space at the end of the window. */
+    uInt wsize = s->w_size;
+
+    Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
+
+    do {
+        more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
+
+        /* Deal with !@#$% 64K limit: */
+        if (sizeof(int) <= 2) {
+            if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
+                more = wsize;
+
+            } else if (more == (unsigned)(-1)) {
+                /* Very unlikely, but possible on 16 bit machine if
+                 * strstart == 0 && lookahead == 1 (input done a byte at time)
+                 */
+                more--;
+            }
+        }
+
+        /* If the window is almost full and there is insufficient lookahead,
+         * move the upper half to the lower one to make room in the upper half.
+         */
+        if (s->strstart >= wsize+MAX_DIST(s)) {
+
+            zmemcpy(s->window, s->window+wsize, (unsigned)wsize);
+            s->match_start -= wsize;
+            s->strstart    -= wsize; /* we now have strstart >= MAX_DIST */
+            s->block_start -= (long) wsize;
+
+            /* Slide the hash table (could be avoided with 32 bit values
+               at the expense of memory usage). We slide even when level == 0
+               to keep the hash table consistent if we switch back to level > 0
+               later. (Using level 0 permanently is not an optimal usage of
+               zlib, so we don't care about this pathological case.)
+             */
+            n = s->hash_size;
+            p = &s->head[n];
+            do {
+                m = *--p;
+                *p = (Pos)(m >= wsize ? m-wsize : NIL);
+            } while (--n);
+
+            n = wsize;
+#ifndef FASTEST
+            p = &s->prev[n];
+            do {
+                m = *--p;
+                *p = (Pos)(m >= wsize ? m-wsize : NIL);
+                /* If n is not on any hash chain, prev[n] is garbage but
+                 * its value will never be used.
+                 */
+            } while (--n);
+#endif
+            more += wsize;
+        }
+        if (s->strm->avail_in == 0) break;
+
+        /* If there was no sliding:
+         *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
+         *    more == window_size - lookahead - strstart
+         * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
+         * => more >= window_size - 2*WSIZE + 2
+         * In the BIG_MEM or MMAP case (not yet supported),
+         *   window_size == input_size + MIN_LOOKAHEAD  &&
+         *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
+         * Otherwise, window_size == 2*WSIZE so more >= 2.
+         * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
+         */
+        Assert(more >= 2, "more < 2");
+
+        n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more);
+        s->lookahead += n;
+
+        /* Initialize the hash value now that we have some input: */
+        if (s->lookahead + s->insert >= MIN_MATCH) {
+            uInt str = s->strstart - s->insert;
+            s->ins_h = s->window[str];
+            UPDATE_HASH(s, s->ins_h, s->window[str + 1]);
+#if MIN_MATCH != 3
+            Call UPDATE_HASH() MIN_MATCH-3 more times
+#endif
+            while (s->insert) {
+                UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
+#ifndef FASTEST
+                s->prev[str & s->w_mask] = s->head[s->ins_h];
+#endif
+                s->head[s->ins_h] = (Pos)str;
+                str++;
+                s->insert--;
+                if (s->lookahead + s->insert < MIN_MATCH)
+                    break;
+            }
+        }
+        /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
+         * but this is not important since only literal bytes will be emitted.
+         */
+
+    } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);
+
+    /* If the WIN_INIT bytes after the end of the current data have never been
+     * written, then zero those bytes in order to avoid memory check reports of
+     * the use of uninitialized (or uninitialised as Julian writes) bytes by
+     * the longest match routines.  Update the high water mark for the next
+     * time through here.  WIN_INIT is set to MAX_MATCH since the longest match
+     * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
+     */
+    if (s->high_water < s->window_size) {
+        ulg curr = s->strstart + (ulg)(s->lookahead);
+        ulg init;
+
+        if (s->high_water < curr) {
+            /* Previous high water mark below current data -- zero WIN_INIT
+             * bytes or up to end of window, whichever is less.
+             */
+            init = s->window_size - curr;
+            if (init > WIN_INIT)
+                init = WIN_INIT;
+            zmemzero(s->window + curr, (unsigned)init);
+            s->high_water = curr + init;
+        }
+        else if (s->high_water < (ulg)curr + WIN_INIT) {
+            /* High water mark at or above current data, but below current data
+             * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
+             * to end of window, whichever is less.
+             */
+            init = (ulg)curr + WIN_INIT - s->high_water;
+            if (init > s->window_size - s->high_water)
+                init = s->window_size - s->high_water;
+            zmemzero(s->window + s->high_water, (unsigned)init);
+            s->high_water += init;
+        }
+    }
+
+    Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
+           "not enough room for search");
+}
+
+/* ===========================================================================
+ * Flush the current block, with given end-of-file flag.
+ * IN assertion: strstart is set to the end of the current match.
+ */
+#define FLUSH_BLOCK_ONLY(s, last) { \
+   _tr_flush_block(s, (s->block_start >= 0L ? \
+                   (charf *)&s->window[(unsigned)s->block_start] : \
+                   (charf *)Z_NULL), \
+                (ulg)((long)s->strstart - s->block_start), \
+                (last)); \
+   s->block_start = s->strstart; \
+   flush_pending(s->strm); \
+   Tracev((stderr,"[FLUSH]")); \
+}
+
+/* Same but force premature exit if necessary. */
+#define FLUSH_BLOCK(s, last) { \
+   FLUSH_BLOCK_ONLY(s, last); \
+   if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \
+}
+
+/* ===========================================================================
+ * Copy without compression as much as possible from the input stream, return
+ * the current block state.
+ * This function does not insert new strings in the dictionary since
+ * uncompressible data is probably not useful. This function is used
+ * only for the level=0 compression option.
+ * NOTE: this function should be optimized to avoid extra copying from
+ * window to pending_buf.
+ */
+local block_state deflate_stored(s, flush)
+    deflate_state *s;
+    int flush;
+{
+    /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
+     * to pending_buf_size, and each stored block has a 5 byte header:
+     */
+    ulg max_block_size = 0xffff;
+    ulg max_start;
+
+    if (max_block_size > s->pending_buf_size - 5) {
+        max_block_size = s->pending_buf_size - 5;
+    }
+
+    /* Copy as much as possible from input to output: */
+    for (;;) {
+        /* Fill the window as much as possible: */
+        if (s->lookahead <= 1) {
+
+            Assert(s->strstart < s->w_size+MAX_DIST(s) ||
+                   s->block_start >= (long)s->w_size, "slide too late");
+
+            fill_window(s);
+            if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
+
+            if (s->lookahead == 0) break; /* flush the current block */
+        }
+        Assert(s->block_start >= 0L, "block gone");
+
+        s->strstart += s->lookahead;
+        s->lookahead = 0;
+
+        /* Emit a stored block if pending_buf will be full: */
+        max_start = s->block_start + max_block_size;
+        if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
+            /* strstart == 0 is possible when wraparound on 16-bit machine */
+            s->lookahead = (uInt)(s->strstart - max_start);
+            s->strstart = (uInt)max_start;
+            FLUSH_BLOCK(s, 0);
+        }
+        /* Flush if we may have to slide, otherwise block_start may become
+         * negative and the data will be gone:
+         */
+        if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
+            FLUSH_BLOCK(s, 0);
+        }
+    }
+    s->insert = 0;
+    if (flush == Z_FINISH) {
+        FLUSH_BLOCK(s, 1);
+        return finish_done;
+    }
+    if ((long)s->strstart > s->block_start)
+        FLUSH_BLOCK(s, 0);
+    return block_done;
+}
+
+/* ===========================================================================
+ * Compress as much as possible from the input stream, return the current
+ * block state.
+ * This function does not perform lazy evaluation of matches and inserts
+ * new strings in the dictionary only for unmatched strings or for short
+ * matches. It is used only for the fast compression options.
+ */
+local block_state deflate_fast(s, flush)
+    deflate_state *s;
+    int flush;
+{
+    IPos hash_head;       /* head of the hash chain */
+    int bflush;           /* set if current block must be flushed */
+
+    for (;;) {
+        /* Make sure that we always have enough lookahead, except
+         * at the end of the input file. We need MAX_MATCH bytes
+         * for the next match, plus MIN_MATCH bytes to insert the
+         * string following the next match.
+         */
+        if (s->lookahead < MIN_LOOKAHEAD) {
+            fill_window(s);
+            if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
+                return need_more;
+            }
+            if (s->lookahead == 0) break; /* flush the current block */
+        }
+
+        /* Insert the string window[strstart .. strstart+2] in the
+         * dictionary, and set hash_head to the head of the hash chain:
+         */
+        hash_head = NIL;
+        if (s->lookahead >= MIN_MATCH) {
+            INSERT_STRING(s, s->strstart, hash_head);
+        }
+
+        /* Find the longest match, discarding those <= prev_length.
+         * At this point we have always match_length < MIN_MATCH
+         */
+        if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) {
+            /* To simplify the code, we prevent matches with the string
+             * of window index 0 (in particular we have to avoid a match
+             * of the string with itself at the start of the input file).
+             */
+            s->match_length = longest_match (s, hash_head);
+            /* longest_match() sets match_start */
+        }
+        if (s->match_length >= MIN_MATCH) {
+            check_match(s, s->strstart, s->match_start, s->match_length);
+
+            _tr_tally_dist(s, s->strstart - s->match_start,
+                           s->match_length - MIN_MATCH, bflush);
+
+            s->lookahead -= s->match_length;
+
+            /* Insert new strings in the hash table only if the match length
+             * is not too large. This saves time but degrades compression.
+             */
+#ifndef FASTEST
+            if (s->match_length <= s->max_insert_length &&
+                s->lookahead >= MIN_MATCH) {
+                s->match_length--; /* string at strstart already in table */
+                do {
+                    s->strstart++;
+                    INSERT_STRING(s, s->strstart, hash_head);
+                    /* strstart never exceeds WSIZE-MAX_MATCH, so there are
+                     * always MIN_MATCH bytes ahead.
+                     */
+                } while (--s->match_length != 0);
+                s->strstart++;
+            } else
+#endif
+            {
+                s->strstart += s->match_length;
+                s->match_length = 0;
+                s->ins_h = s->window[s->strstart];
+                UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
+#if MIN_MATCH != 3
+                Call UPDATE_HASH() MIN_MATCH-3 more times
+#endif
+                /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
+                 * matter since it will be recomputed at next deflate call.
+                 */
+            }
+        } else {
+            /* No match, output a literal byte */
+            Tracevv((stderr,"%c", s->window[s->strstart]));
+            _tr_tally_lit (s, s->window[s->strstart], bflush);
+            s->lookahead--;
+            s->strstart++;
+        }
+        if (bflush) FLUSH_BLOCK(s, 0);
+    }
+    s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
+    if (flush == Z_FINISH) {
+        FLUSH_BLOCK(s, 1);
+        return finish_done;
+    }
+    if (s->last_lit)
+        FLUSH_BLOCK(s, 0);
+    return block_done;
+}
+
+#ifndef FASTEST
+/* ===========================================================================
+ * Same as above, but achieves better compression. We use a lazy
+ * evaluation for matches: a match is finally adopted only if there is
+ * no better match at the next window position.
+ */
+local block_state deflate_slow(s, flush)
+    deflate_state *s;
+    int flush;
+{
+    IPos hash_head;          /* head of hash chain */
+    int bflush;              /* set if current block must be flushed */
+
+    /* Process the input block. */
+    for (;;) {
+        /* Make sure that we always have enough lookahead, except
+         * at the end of the input file. We need MAX_MATCH bytes
+         * for the next match, plus MIN_MATCH bytes to insert the
+         * string following the next match.
+         */
+        if (s->lookahead < MIN_LOOKAHEAD) {
+            fill_window(s);
+            if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
+                return need_more;
+            }
+            if (s->lookahead == 0) break; /* flush the current block */
+        }
+
+        /* Insert the string window[strstart .. strstart+2] in the
+         * dictionary, and set hash_head to the head of the hash chain:
+         */
+        hash_head = NIL;
+        if (s->lookahead >= MIN_MATCH) {
+            INSERT_STRING(s, s->strstart, hash_head);
+        }
+
+        /* Find the longest match, discarding those <= prev_length.
+         */
+        s->prev_length = s->match_length, s->prev_match = s->match_start;
+        s->match_length = MIN_MATCH-1;
+
+        if (hash_head != NIL && s->prev_length < s->max_lazy_match &&
+            s->strstart - hash_head <= MAX_DIST(s)) {
+            /* To simplify the code, we prevent matches with the string
+             * of window index 0 (in particular we have to avoid a match
+             * of the string with itself at the start of the input file).
+             */
+            s->match_length = longest_match (s, hash_head);
+            /* longest_match() sets match_start */
+
+            if (s->match_length <= 5 && (s->strategy == Z_FILTERED
+#if TOO_FAR <= 32767
+                || (s->match_length == MIN_MATCH &&
+                    s->strstart - s->match_start > TOO_FAR)
+#endif
+                )) {
+
+                /* If prev_match is also MIN_MATCH, match_start is garbage
+                 * but we will ignore the current match anyway.
+                 */
+                s->match_length = MIN_MATCH-1;
+            }
+        }
+        /* If there was a match at the previous step and the current
+         * match is not better, output the previous match:
+         */
+        if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) {
+            uInt max_insert = s->strstart + s->lookahead - MIN_MATCH;
+            /* Do not insert strings in hash table beyond this. */
+
+            check_match(s, s->strstart-1, s->prev_match, s->prev_length);
+
+            _tr_tally_dist(s, s->strstart -1 - s->prev_match,
+                           s->prev_length - MIN_MATCH, bflush);
+
+            /* Insert in hash table all strings up to the end of the match.
+             * strstart-1 and strstart are already inserted. If there is not
+             * enough lookahead, the last two strings are not inserted in
+             * the hash table.
+             */
+            s->lookahead -= s->prev_length-1;
+            s->prev_length -= 2;
+            do {
+                if (++s->strstart <= max_insert) {
+                    INSERT_STRING(s, s->strstart, hash_head);
+                }
+            } while (--s->prev_length != 0);
+            s->match_available = 0;
+            s->match_length = MIN_MATCH-1;
+            s->strstart++;
+
+            if (bflush) FLUSH_BLOCK(s, 0);
+
+        } else if (s->match_available) {
+            /* If there was no match at the previous position, output a
+             * single literal. If there was a match but the current match
+             * is longer, truncate the previous match to a single literal.
+             */
+            Tracevv((stderr,"%c", s->window[s->strstart-1]));
+            _tr_tally_lit(s, s->window[s->strstart-1], bflush);
+            if (bflush) {
+                FLUSH_BLOCK_ONLY(s, 0);
+            }
+            s->strstart++;
+            s->lookahead--;
+            if (s->strm->avail_out == 0) return need_more;
+        } else {
+            /* There is no previous match to compare with, wait for
+             * the next step to decide.
+             */
+            s->match_available = 1;
+            s->strstart++;
+            s->lookahead--;
+        }
+    }
+    Assert (flush != Z_NO_FLUSH, "no flush?");
+    if (s->match_available) {
+        Tracevv((stderr,"%c", s->window[s->strstart-1]));
+        _tr_tally_lit(s, s->window[s->strstart-1], bflush);
+        s->match_available = 0;
+    }
+    s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
+    if (flush == Z_FINISH) {
+        FLUSH_BLOCK(s, 1);
+        return finish_done;
+    }
+    if (s->last_lit)
+        FLUSH_BLOCK(s, 0);
+    return block_done;
+}
+#endif /* FASTEST */
+
+/* ===========================================================================
+ * For Z_RLE, simply look for runs of bytes, generate matches only of distance
+ * one.  Do not maintain a hash table.  (It will be regenerated if this run of
+ * deflate switches away from Z_RLE.)
+ */
+local block_state deflate_rle(s, flush)
+    deflate_state *s;
+    int flush;
+{
+    int bflush;             /* set if current block must be flushed */
+    uInt prev;              /* byte at distance one to match */
+    Bytef *scan, *strend;   /* scan goes up to strend for length of run */
+
+    for (;;) {
+        /* Make sure that we always have enough lookahead, except
+         * at the end of the input file. We need MAX_MATCH bytes
+         * for the longest run, plus one for the unrolled loop.
+         */
+        if (s->lookahead <= MAX_MATCH) {
+            fill_window(s);
+            if (s->lookahead <= MAX_MATCH && flush == Z_NO_FLUSH) {
+                return need_more;
+            }
+            if (s->lookahead == 0) break; /* flush the current block */
+        }
+
+        /* See how many times the previous byte repeats */
+        s->match_length = 0;
+        if (s->lookahead >= MIN_MATCH && s->strstart > 0) {
+            scan = s->window + s->strstart - 1;
+            prev = *scan;
+            if (prev == *++scan && prev == *++scan && prev == *++scan) {
+                strend = s->window + s->strstart + MAX_MATCH;
+                do {
+                } while (prev == *++scan && prev == *++scan &&
+                         prev == *++scan && prev == *++scan &&
+                         prev == *++scan && prev == *++scan &&
+                         prev == *++scan && prev == *++scan &&
+                         scan < strend);
+                s->match_length = MAX_MATCH - (int)(strend - scan);
+                if (s->match_length > s->lookahead)
+                    s->match_length = s->lookahead;
+            }
+            Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
+        }
+
+        /* Emit match if have run of MIN_MATCH or longer, else emit literal */
+        if (s->match_length >= MIN_MATCH) {
+            check_match(s, s->strstart, s->strstart - 1, s->match_length);
+
+            _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush);
+
+            s->lookahead -= s->match_length;
+            s->strstart += s->match_length;
+            s->match_length = 0;
+        } else {
+            /* No match, output a literal byte */
+            Tracevv((stderr,"%c", s->window[s->strstart]));
+            _tr_tally_lit (s, s->window[s->strstart], bflush);
+            s->lookahead--;
+            s->strstart++;
+        }
+        if (bflush) FLUSH_BLOCK(s, 0);
+    }
+    s->insert = 0;
+    if (flush == Z_FINISH) {
+        FLUSH_BLOCK(s, 1);
+        return finish_done;
+    }
+    if (s->last_lit)
+        FLUSH_BLOCK(s, 0);
+    return block_done;
+}
+
+/* ===========================================================================
+ * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.
+ * (It will be regenerated if this run of deflate switches away from Huffman.)
+ */
+local block_state deflate_huff(s, flush)
+    deflate_state *s;
+    int flush;
+{
+    int bflush;             /* set if current block must be flushed */
+
+    for (;;) {
+        /* Make sure that we have a literal to write. */
+        if (s->lookahead == 0) {
+            fill_window(s);
+            if (s->lookahead == 0) {
+                if (flush == Z_NO_FLUSH)
+                    return need_more;
+                break;      /* flush the current block */
+            }
+        }
+
+        /* Output a literal byte */
+        s->match_length = 0;
+        Tracevv((stderr,"%c", s->window[s->strstart]));
+        _tr_tally_lit (s, s->window[s->strstart], bflush);
+        s->lookahead--;
+        s->strstart++;
+        if (bflush) FLUSH_BLOCK(s, 0);
+    }
+    s->insert = 0;
+    if (flush == Z_FINISH) {
+        FLUSH_BLOCK(s, 1);
+        return finish_done;
+    }
+    if (s->last_lit)
+        FLUSH_BLOCK(s, 0);
+    return block_done;
+}
diff --git a/libs/ext/zlib/deflate.h b/libs/ext/zlib/deflate.h
new file mode 100644
index 0000000..fbac44d
--- /dev/null
+++ b/libs/ext/zlib/deflate.h
@@ -0,0 +1,346 @@
+/* deflate.h -- internal compression state
+ * Copyright (C) 1995-2012 Jean-loup Gailly
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+   part of the implementation of the compression library and is
+   subject to change. Applications should only use zlib.h.
+ */
+
+/* @(#) $Id$ */
+
+#ifndef DEFLATE_H
+#define DEFLATE_H
+
+#include "zutil.h"
+
+/* define NO_GZIP when compiling if you want to disable gzip header and
+   trailer creation by deflate().  NO_GZIP would be used to avoid linking in
+   the crc code when it is not needed.  For shared libraries, gzip encoding
+   should be left enabled. */
+#ifndef NO_GZIP
+#  define GZIP
+#endif
+
+/* ===========================================================================
+ * Internal compression state.
+ */
+
+#define LENGTH_CODES 29
+/* number of length codes, not counting the special END_BLOCK code */
+
+#define LITERALS  256
+/* number of literal bytes 0..255 */
+
+#define L_CODES (LITERALS+1+LENGTH_CODES)
+/* number of Literal or Length codes, including the END_BLOCK code */
+
+#define D_CODES   30
+/* number of distance codes */
+
+#define BL_CODES  19
+/* number of codes used to transfer the bit lengths */
+
+#define HEAP_SIZE (2*L_CODES+1)
+/* maximum heap size */
+
+#define MAX_BITS 15
+/* All codes must not exceed MAX_BITS bits */
+
+#define Buf_size 16
+/* size of bit buffer in bi_buf */
+
+#define INIT_STATE    42
+#define EXTRA_STATE   69
+#define NAME_STATE    73
+#define COMMENT_STATE 91
+#define HCRC_STATE   103
+#define BUSY_STATE   113
+#define FINISH_STATE 666
+/* Stream status */
+
+
+/* Data structure describing a single value and its code string. */
+typedef struct ct_data_s {
+    union {
+        ush  freq;       /* frequency count */
+        ush  code;       /* bit string */
+    } fc;
+    union {
+        ush  dad;        /* father node in Huffman tree */
+        ush  len;        /* length of bit string */
+    } dl;
+} FAR ct_data;
+
+#define Freq fc.freq
+#define Code fc.code
+#define Dad  dl.dad
+#define Len  dl.len
+
+typedef struct static_tree_desc_s  static_tree_desc;
+
+typedef struct tree_desc_s {
+    ct_data *dyn_tree;           /* the dynamic tree */
+    int     max_code;            /* largest code with non zero frequency */
+    static_tree_desc *stat_desc; /* the corresponding static tree */
+} FAR tree_desc;
+
+typedef ush Pos;
+typedef Pos FAR Posf;
+typedef unsigned IPos;
+
+/* A Pos is an index in the character window. We use short instead of int to
+ * save space in the various tables. IPos is used only for parameter passing.
+ */
+
+typedef struct internal_state {
+    z_streamp strm;      /* pointer back to this zlib stream */
+    int   status;        /* as the name implies */
+    Bytef *pending_buf;  /* output still pending */
+    ulg   pending_buf_size; /* size of pending_buf */
+    Bytef *pending_out;  /* next pending byte to output to the stream */
+    uInt   pending;      /* nb of bytes in the pending buffer */
+    int   wrap;          /* bit 0 true for zlib, bit 1 true for gzip */
+    gz_headerp  gzhead;  /* gzip header information to write */
+    uInt   gzindex;      /* where in extra, name, or comment */
+    Byte  method;        /* STORED (for zip only) or DEFLATED */
+    int   last_flush;    /* value of flush param for previous deflate call */
+
+                /* used by deflate.c: */
+
+    uInt  w_size;        /* LZ77 window size (32K by default) */
+    uInt  w_bits;        /* log2(w_size)  (8..16) */
+    uInt  w_mask;        /* w_size - 1 */
+
+    Bytef *window;
+    /* Sliding window. Input bytes are read into the second half of the window,
+     * and move to the first half later to keep a dictionary of at least wSize
+     * bytes. With this organization, matches are limited to a distance of
+     * wSize-MAX_MATCH bytes, but this ensures that IO is always
+     * performed with a length multiple of the block size. Also, it limits
+     * the window size to 64K, which is quite useful on MSDOS.
+     * To do: use the user input buffer as sliding window.
+     */
+
+    ulg window_size;
+    /* Actual size of window: 2*wSize, except when the user input buffer
+     * is directly used as sliding window.
+     */
+
+    Posf *prev;
+    /* Link to older string with same hash index. To limit the size of this
+     * array to 64K, this link is maintained only for the last 32K strings.
+     * An index in this array is thus a window index modulo 32K.
+     */
+
+    Posf *head; /* Heads of the hash chains or NIL. */
+
+    uInt  ins_h;          /* hash index of string to be inserted */
+    uInt  hash_size;      /* number of elements in hash table */
+    uInt  hash_bits;      /* log2(hash_size) */
+    uInt  hash_mask;      /* hash_size-1 */
+
+    uInt  hash_shift;
+    /* Number of bits by which ins_h must be shifted at each input
+     * step. It must be such that after MIN_MATCH steps, the oldest
+     * byte no longer takes part in the hash key, that is:
+     *   hash_shift * MIN_MATCH >= hash_bits
+     */
+
+    long block_start;
+    /* Window position at the beginning of the current output block. Gets
+     * negative when the window is moved backwards.
+     */
+
+    uInt match_length;           /* length of best match */
+    IPos prev_match;             /* previous match */
+    int match_available;         /* set if previous match exists */
+    uInt strstart;               /* start of string to insert */
+    uInt match_start;            /* start of matching string */
+    uInt lookahead;              /* number of valid bytes ahead in window */
+
+    uInt prev_length;
+    /* Length of the best match at previous step. Matches not greater than this
+     * are discarded. This is used in the lazy match evaluation.
+     */
+
+    uInt max_chain_length;
+    /* To speed up deflation, hash chains are never searched beyond this
+     * length.  A higher limit improves compression ratio but degrades the
+     * speed.
+     */
+
+    uInt max_lazy_match;
+    /* Attempt to find a better match only when the current match is strictly
+     * smaller than this value. This mechanism is used only for compression
+     * levels >= 4.
+     */
+#   define max_insert_length  max_lazy_match
+    /* Insert new strings in the hash table only if the match length is not
+     * greater than this length. This saves time but degrades compression.
+     * max_insert_length is used only for compression levels <= 3.
+     */
+
+    int level;    /* compression level (1..9) */
+    int strategy; /* favor or force Huffman coding*/
+
+    uInt good_match;
+    /* Use a faster search when the previous match is longer than this */
+
+    int nice_match; /* Stop searching when current match exceeds this */
+
+                /* used by trees.c: */
+    /* Didn't use ct_data typedef below to suppress compiler warning */
+    struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */
+    struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
+    struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */
+
+    struct tree_desc_s l_desc;               /* desc. for literal tree */
+    struct tree_desc_s d_desc;               /* desc. for distance tree */
+    struct tree_desc_s bl_desc;              /* desc. for bit length tree */
+
+    ush bl_count[MAX_BITS+1];
+    /* number of codes at each bit length for an optimal tree */
+
+    int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */
+    int heap_len;               /* number of elements in the heap */
+    int heap_max;               /* element of largest frequency */
+    /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
+     * The same heap array is used to build all trees.
+     */
+
+    uch depth[2*L_CODES+1];
+    /* Depth of each subtree used as tie breaker for trees of equal frequency
+     */
+
+    uchf *l_buf;          /* buffer for literals or lengths */
+
+    uInt  lit_bufsize;
+    /* Size of match buffer for literals/lengths.  There are 4 reasons for
+     * limiting lit_bufsize to 64K:
+     *   - frequencies can be kept in 16 bit counters
+     *   - if compression is not successful for the first block, all input
+     *     data is still in the window so we can still emit a stored block even
+     *     when input comes from standard input.  (This can also be done for
+     *     all blocks if lit_bufsize is not greater than 32K.)
+     *   - if compression is not successful for a file smaller than 64K, we can
+     *     even emit a stored file instead of a stored block (saving 5 bytes).
+     *     This is applicable only for zip (not gzip or zlib).
+     *   - creating new Huffman trees less frequently may not provide fast
+     *     adaptation to changes in the input data statistics. (Take for
+     *     example a binary file with poorly compressible code followed by
+     *     a highly compressible string table.) Smaller buffer sizes give
+     *     fast adaptation but have of course the overhead of transmitting
+     *     trees more frequently.
+     *   - I can't count above 4
+     */
+
+    uInt last_lit;      /* running index in l_buf */
+
+    ushf *d_buf;
+    /* Buffer for distances. To simplify the code, d_buf and l_buf have
+     * the same number of elements. To use different lengths, an extra flag
+     * array would be necessary.
+     */
+
+    ulg opt_len;        /* bit length of current block with optimal trees */
+    ulg static_len;     /* bit length of current block with static trees */
+    uInt matches;       /* number of string matches in current block */
+    uInt insert;        /* bytes at end of window left to insert */
+
+#ifdef DEBUG
+    ulg compressed_len; /* total bit length of compressed file mod 2^32 */
+    ulg bits_sent;      /* bit length of compressed data sent mod 2^32 */
+#endif
+
+    ush bi_buf;
+    /* Output buffer. bits are inserted starting at the bottom (least
+     * significant bits).
+     */
+    int bi_valid;
+    /* Number of valid bits in bi_buf.  All bits above the last valid bit
+     * are always zero.
+     */
+
+    ulg high_water;
+    /* High water mark offset in window for initialized bytes -- bytes above
+     * this are set to zero in order to avoid memory check warnings when
+     * longest match routines access bytes past the input.  This is then
+     * updated to the new high water mark.
+     */
+
+} FAR deflate_state;
+
+/* Output a byte on the stream.
+ * IN assertion: there is enough room in pending_buf.
+ */
+#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
+
+
+#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
+/* Minimum amount of lookahead, except at the end of the input file.
+ * See deflate.c for comments about the MIN_MATCH+1.
+ */
+
+#define MAX_DIST(s)  ((s)->w_size-MIN_LOOKAHEAD)
+/* In order to simplify the code, particularly on 16 bit machines, match
+ * distances are limited to MAX_DIST instead of WSIZE.
+ */
+
+#define WIN_INIT MAX_MATCH
+/* Number of bytes after end of data in window to initialize in order to avoid
+   memory checker errors from longest match routines */
+
+        /* in trees.c */
+void ZLIB_INTERNAL _tr_init OF((deflate_state *s));
+int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
+void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf,
+                        ulg stored_len, int last));
+void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s));
+void ZLIB_INTERNAL _tr_align OF((deflate_state *s));
+void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
+                        ulg stored_len, int last));
+
+#define d_code(dist) \
+   ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
+/* Mapping from a distance to a distance code. dist is the distance - 1 and
+ * must not have side effects. _dist_code[256] and _dist_code[257] are never
+ * used.
+ */
+
+#ifndef DEBUG
+/* Inline versions of _tr_tally for speed: */
+
+#if defined(GEN_TREES_H) || !defined(STDC)
+  extern uch ZLIB_INTERNAL _length_code[];
+  extern uch ZLIB_INTERNAL _dist_code[];
+#else
+  extern const uch ZLIB_INTERNAL _length_code[];
+  extern const uch ZLIB_INTERNAL _dist_code[];
+#endif
+
+# define _tr_tally_lit(s, c, flush) \
+  { uch cc = (c); \
+    s->d_buf[s->last_lit] = 0; \
+    s->l_buf[s->last_lit++] = cc; \
+    s->dyn_ltree[cc].Freq++; \
+    flush = (s->last_lit == s->lit_bufsize-1); \
+   }
+# define _tr_tally_dist(s, distance, length, flush) \
+  { uch len = (length); \
+    ush dist = (distance); \
+    s->d_buf[s->last_lit] = dist; \
+    s->l_buf[s->last_lit++] = len; \
+    dist--; \
+    s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
+    s->dyn_dtree[d_code(dist)].Freq++; \
+    flush = (s->last_lit == s->lit_bufsize-1); \
+  }
+#else
+# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
+# define _tr_tally_dist(s, distance, length, flush) \
+              flush = _tr_tally(s, distance, length)
+#endif
+
+#endif /* DEFLATE_H */
diff --git a/libs/ext/zlib/gzclose.c b/libs/ext/zlib/gzclose.c
new file mode 100644
index 0000000..caeb99a
--- /dev/null
+++ b/libs/ext/zlib/gzclose.c
@@ -0,0 +1,25 @@
+/* gzclose.c -- zlib gzclose() function
+ * Copyright (C) 2004, 2010 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "gzguts.h"
+
+/* gzclose() is in a separate file so that it is linked in only if it is used.
+   That way the other gzclose functions can be used instead to avoid linking in
+   unneeded compression or decompression routines. */
+int ZEXPORT gzclose(file)
+    gzFile file;
+{
+#ifndef NO_GZCOMPRESS
+    gz_statep state;
+
+    if (file == NULL)
+        return Z_STREAM_ERROR;
+    state = (gz_statep)file;
+
+    return state->mode == GZ_READ ? gzclose_r(file) : gzclose_w(file);
+#else
+    return gzclose_r(file);
+#endif
+}
diff --git a/libs/ext/zlib/gzguts.h b/libs/ext/zlib/gzguts.h
new file mode 100644
index 0000000..ee3f281
--- /dev/null
+++ b/libs/ext/zlib/gzguts.h
@@ -0,0 +1,193 @@
+/* gzguts.h -- zlib internal header definitions for gz* operations
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#ifdef _LARGEFILE64_SOURCE
+#  ifndef _LARGEFILE_SOURCE
+#    define _LARGEFILE_SOURCE 1
+#  endif
+#  ifdef _FILE_OFFSET_BITS
+#    undef _FILE_OFFSET_BITS
+#  endif
+#endif
+
+#ifdef HAVE_HIDDEN
+#  define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
+#else
+#  define ZLIB_INTERNAL
+#endif
+
+#include <stdio.h>
+#include "zlib.h"
+#ifdef STDC
+#  include <string.h>
+#  include <stdlib.h>
+#  include <limits.h>
+#endif
+#include <fcntl.h>
+
+#ifdef _WIN32
+#  include <stddef.h>
+#endif
+
+#if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32)
+#  include <io.h>
+#endif
+
+#ifdef NO_DEFLATE       /* for compatibility with old definition */
+#  define NO_GZCOMPRESS
+#endif
+
+#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550)
+#  ifndef HAVE_VSNPRINTF
+#    define HAVE_VSNPRINTF
+#  endif
+#endif
+
+#if defined(__CYGWIN__)
+#  ifndef HAVE_VSNPRINTF
+#    define HAVE_VSNPRINTF
+#  endif
+#endif
+
+#if defined(MSDOS) && defined(__BORLANDC__) && (BORLANDC > 0x410)
+#  ifndef HAVE_VSNPRINTF
+#    define HAVE_VSNPRINTF
+#  endif
+#endif
+
+#ifndef HAVE_VSNPRINTF
+#  ifdef MSDOS
+/* vsnprintf may exist on some MS-DOS compilers (DJGPP?),
+ but for now we just assume it doesn't. */
+#    define NO_vsnprintf
+#  endif
+#  ifdef __TURBOC__
+#    define NO_vsnprintf
+#  endif
+#  ifdef WIN32
+/* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */
+#    if !defined(vsnprintf) && !defined(NO_vsnprintf)
+#      if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 )
+#         define vsnprintf _vsnprintf
+#      endif
+#    endif
+#  endif
+#  ifdef __SASC
+#    define NO_vsnprintf
+#  endif
+#  ifdef VMS
+#    define NO_vsnprintf
+#  endif
+#  ifdef __OS400__
+#    define NO_vsnprintf
+#  endif
+#  ifdef __MVS__
+#    define NO_vsnprintf
+#  endif
+#endif
+
+#ifndef local
+#  define local static
+#endif
+/* compile with -Dlocal if your debugger can't find static symbols */
+
+/* gz* functions always use library allocation functions */
+#ifndef STDC
+  extern voidp  malloc OF((uInt size));
+  extern void   free   OF((voidpf ptr));
+#endif
+
+/* get errno and strerror definition */
+#if defined UNDER_CE
+#  include <windows.h>
+#  define zstrerror() gz_strwinerror((DWORD)GetLastError())
+#else
+#  ifndef NO_STRERROR
+#    include <errno.h>
+#    define zstrerror() strerror(errno)
+#  else
+#    define zstrerror() "stdio error (consult errno)"
+#  endif
+#endif
+
+/* provide prototypes for these when building zlib without LFS */
+#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0
+    ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
+    ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
+    ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
+    ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
+#endif
+
+/* default memLevel */
+#if MAX_MEM_LEVEL >= 8
+#  define DEF_MEM_LEVEL 8
+#else
+#  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
+#endif
+
+/* default i/o buffer size -- double this for output when reading */
+#define GZBUFSIZE 8192
+
+/* gzip modes, also provide a little integrity check on the passed structure */
+#define GZ_NONE 0
+#define GZ_READ 7247
+#define GZ_WRITE 31153
+#define GZ_APPEND 1     /* mode set to GZ_WRITE after the file is opened */
+
+/* values for gz_state how */
+#define LOOK 0      /* look for a gzip header */
+#define COPY 1      /* copy input directly */
+#define GZIP 2      /* decompress a gzip stream */
+
+/* internal gzip file state data structure */
+typedef struct {
+        /* exposed contents for gzgetc() macro */
+    struct gzFile_s x;      /* "x" for exposed */
+                            /* x.have: number of bytes available at x.next */
+                            /* x.next: next output data to deliver or write */
+                            /* x.pos: current position in uncompressed data */
+        /* used for both reading and writing */
+    int mode;               /* see gzip modes above */
+    int fd;                 /* file descriptor */
+    char *path;             /* path or fd for error messages */
+    unsigned size;          /* buffer size, zero if not allocated yet */
+    unsigned want;          /* requested buffer size, default is GZBUFSIZE */
+    unsigned char *in;      /* input buffer */
+    unsigned char *out;     /* output buffer (double-sized when reading) */
+    int direct;             /* 0 if processing gzip, 1 if transparent */
+        /* just for reading */
+    int how;                /* 0: get header, 1: copy, 2: decompress */
+    z_off64_t start;        /* where the gzip data started, for rewinding */
+    int eof;                /* true if end of input file reached */
+    int past;               /* true if read requested past end */
+        /* just for writing */
+    int level;              /* compression level */
+    int strategy;           /* compression strategy */
+        /* seek request */
+    z_off64_t skip;         /* amount to skip (already rewound if backwards) */
+    int seek;               /* true if seek request pending */
+        /* error information */
+    int err;                /* error code */
+    char *msg;              /* error message */
+        /* zlib inflate or deflate stream */
+    z_stream strm;          /* stream structure in-place (not a pointer) */
+} gz_state;
+typedef gz_state FAR *gz_statep;
+
+/* shared functions */
+void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *));
+#if defined UNDER_CE
+char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error));
+#endif
+
+/* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t
+   value -- needed when comparing unsigned to z_off64_t, which is signed
+   (possible z_off64_t types off_t, off64_t, and long are all signed) */
+#ifdef INT_MAX
+#  define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX)
+#else
+unsigned ZLIB_INTERNAL gz_intmax OF((void));
+#  define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax())
+#endif
diff --git a/libs/ext/zlib/gzlib.c b/libs/ext/zlib/gzlib.c
new file mode 100644
index 0000000..ca55c6e
--- /dev/null
+++ b/libs/ext/zlib/gzlib.c
@@ -0,0 +1,620 @@
+/* gzlib.c -- zlib functions common to reading and writing gzip files
+ * Copyright (C) 2004, 2010, 2011, 2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "gzguts.h"
+
+#if defined(_WIN32) && !defined(__BORLANDC__)
+#  define LSEEK _lseeki64
+#else
+#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
+#  define LSEEK lseek64
+#else
+#  define LSEEK lseek
+#endif
+#endif
+
+/* Local functions */
+local void gz_reset OF((gz_statep));
+local gzFile gz_open OF((const void *, int, const char *));
+
+#if defined UNDER_CE
+
+/* Map the Windows error number in ERROR to a locale-dependent error message
+   string and return a pointer to it.  Typically, the values for ERROR come
+   from GetLastError.
+
+   The string pointed to shall not be modified by the application, but may be
+   overwritten by a subsequent call to gz_strwinerror
+
+   The gz_strwinerror function does not change the current setting of
+   GetLastError. */
+char ZLIB_INTERNAL *gz_strwinerror (error)
+     DWORD error;
+{
+    static char buf[1024];
+
+    wchar_t *msgbuf;
+    DWORD lasterr = GetLastError();
+    DWORD chars = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM
+        | FORMAT_MESSAGE_ALLOCATE_BUFFER,
+        NULL,
+        error,
+        0, /* Default language */
+        (LPVOID)&msgbuf,
+        0,
+        NULL);
+    if (chars != 0) {
+        /* If there is an \r\n appended, zap it.  */
+        if (chars >= 2
+            && msgbuf[chars - 2] == '\r' && msgbuf[chars - 1] == '\n') {
+            chars -= 2;
+            msgbuf[chars] = 0;
+        }
+
+        if (chars > sizeof (buf) - 1) {
+            chars = sizeof (buf) - 1;
+            msgbuf[chars] = 0;
+        }
+
+        wcstombs(buf, msgbuf, chars + 1);
+        LocalFree(msgbuf);
+    }
+    else {
+        sprintf(buf, "unknown win32 error (%ld)", error);
+    }
+
+    SetLastError(lasterr);
+    return buf;
+}
+
+#endif /* UNDER_CE */
+
+/* Reset gzip file state */
+local void gz_reset(state)
+    gz_statep state;
+{
+    state->x.have = 0;              /* no output data available */
+    if (state->mode == GZ_READ) {   /* for reading ... */
+        state->eof = 0;             /* not at end of file */
+        state->past = 0;            /* have not read past end yet */
+        state->how = LOOK;          /* look for gzip header */
+    }
+    state->seek = 0;                /* no seek request pending */
+    gz_error(state, Z_OK, NULL);    /* clear error */
+    state->x.pos = 0;               /* no uncompressed data yet */
+    state->strm.avail_in = 0;       /* no input data yet */
+}
+
+/* Open a gzip file either by name or file descriptor. */
+local gzFile gz_open(path, fd, mode)
+    const void *path;
+    int fd;
+    const char *mode;
+{
+    gz_statep state;
+    size_t len;
+    int oflag;
+#ifdef O_CLOEXEC
+    int cloexec = 0;
+#endif
+#ifdef O_EXCL
+    int exclusive = 0;
+#endif
+
+    /* check input */
+    if (path == NULL)
+        return NULL;
+
+    /* allocate gzFile structure to return */
+    state = malloc(sizeof(gz_state));
+    if (state == NULL)
+        return NULL;
+    state->size = 0;            /* no buffers allocated yet */
+    state->want = GZBUFSIZE;    /* requested buffer size */
+    state->msg = NULL;          /* no error message yet */
+
+    /* interpret mode */
+    state->mode = GZ_NONE;
+    state->level = Z_DEFAULT_COMPRESSION;
+    state->strategy = Z_DEFAULT_STRATEGY;
+    state->direct = 0;
+    while (*mode) {
+        if (*mode >= '0' && *mode <= '9')
+            state->level = *mode - '0';
+        else
+            switch (*mode) {
+            case 'r':
+                state->mode = GZ_READ;
+                break;
+#ifndef NO_GZCOMPRESS
+            case 'w':
+                state->mode = GZ_WRITE;
+                break;
+            case 'a':
+                state->mode = GZ_APPEND;
+                break;
+#endif
+            case '+':       /* can't read and write at the same time */
+                free(state);
+                return NULL;
+            case 'b':       /* ignore -- will request binary anyway */
+                break;
+#ifdef O_CLOEXEC
+            case 'e':
+                cloexec = 1;
+                break;
+#endif
+#ifdef O_EXCL
+            case 'x':
+                exclusive = 1;
+                break;
+#endif
+            case 'f':
+                state->strategy = Z_FILTERED;
+                break;
+            case 'h':
+                state->strategy = Z_HUFFMAN_ONLY;
+                break;
+            case 'R':
+                state->strategy = Z_RLE;
+                break;
+            case 'F':
+                state->strategy = Z_FIXED;
+            case 'T':
+                state->direct = 1;
+            default:        /* could consider as an error, but just ignore */
+                ;
+            }
+        mode++;
+    }
+
+    /* must provide an "r", "w", or "a" */
+    if (state->mode == GZ_NONE) {
+        free(state);
+        return NULL;
+    }
+
+    /* can't force transparent read */
+    if (state->mode == GZ_READ) {
+        if (state->direct) {
+            free(state);
+            return NULL;
+        }
+        state->direct = 1;      /* for empty file */
+    }
+
+    /* save the path name for error messages */
+#ifdef _WIN32
+    if (fd == -2) {
+        len = wcstombs(NULL, path, 0);
+        if (len == (size_t)-1)
+            len = 0;
+    }
+    else
+#endif
+        len = strlen(path);
+    state->path = malloc(len + 1);
+    if (state->path == NULL) {
+        free(state);
+        return NULL;
+    }
+#ifdef _WIN32
+    if (fd == -2)
+        if (len)
+            wcstombs(state->path, path, len + 1);
+        else
+            *(state->path) = 0;
+    else
+#endif
+        strcpy(state->path, path);
+
+    /* compute the flags for open() */
+    oflag =
+#ifdef O_LARGEFILE
+        O_LARGEFILE |
+#endif
+#ifdef O_BINARY
+        O_BINARY |
+#endif
+#ifdef O_CLOEXEC
+        (cloexec ? O_CLOEXEC : 0) |
+#endif
+        (state->mode == GZ_READ ?
+         O_RDONLY :
+         (O_WRONLY | O_CREAT |
+#ifdef O_EXCL
+          (exclusive ? O_EXCL : 0) |
+#endif
+          (state->mode == GZ_WRITE ?
+           O_TRUNC :
+           O_APPEND)));
+
+    /* open the file with the appropriate flags (or just use fd) */
+    state->fd = fd > -1 ? fd : (
+#ifdef _WIN32
+        fd == -2 ? _wopen(path, oflag, 0666) :
+#endif
+        open(path, oflag, 0666));
+    if (state->fd == -1) {
+        free(state->path);
+        free(state);
+        return NULL;
+    }
+    if (state->mode == GZ_APPEND)
+        state->mode = GZ_WRITE;         /* simplify later checks */
+
+    /* save the current position for rewinding (only if reading) */
+    if (state->mode == GZ_READ) {
+        state->start = LSEEK(state->fd, 0, SEEK_CUR);
+        if (state->start == -1) state->start = 0;
+    }
+
+    /* initialize stream */
+    gz_reset(state);
+
+    /* return stream */
+    return (gzFile)state;
+}
+
+/* -- see zlib.h -- */
+gzFile ZEXPORT gzopen(path, mode)
+    const char *path;
+    const char *mode;
+{
+    return gz_open(path, -1, mode);
+}
+
+/* -- see zlib.h -- */
+gzFile ZEXPORT gzopen64(path, mode)
+    const char *path;
+    const char *mode;
+{
+    return gz_open(path, -1, mode);
+}
+
+/* -- see zlib.h -- */
+gzFile ZEXPORT gzdopen(fd, mode)
+    int fd;
+    const char *mode;
+{
+    char *path;         /* identifier for error messages */
+    gzFile gz;
+
+    if (fd == -1 || (path = malloc(7 + 3 * sizeof(int))) == NULL)
+        return NULL;
+    sprintf(path, "<fd:%d>", fd);   /* for debugging */
+    gz = gz_open(path, fd, mode);
+    free(path);
+    return gz;
+}
+
+/* -- see zlib.h -- */
+#ifdef _WIN32
+gzFile ZEXPORT gzopen_w(path, mode)
+    const wchar_t *path;
+    const char *mode;
+{
+    return gz_open(path, -2, mode);
+}
+#endif
+
+/* -- see zlib.h -- */
+int ZEXPORT gzbuffer(file, size)
+    gzFile file;
+    unsigned size;
+{
+    gz_statep state;
+
+    /* get internal structure and check integrity */
+    if (file == NULL)
+        return -1;
+    state = (gz_statep)file;
+    if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+        return -1;
+
+    /* make sure we haven't already allocated memory */
+    if (state->size != 0)
+        return -1;
+
+    /* check and set requested size */
+    if (size < 2)
+        size = 2;               /* need two bytes to check magic header */
+    state->want = size;
+    return 0;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzrewind(file)
+    gzFile file;
+{
+    gz_statep state;
+
+    /* get internal structure */
+    if (file == NULL)
+        return -1;
+    state = (gz_statep)file;
+
+    /* check that we're reading and that there's no error */
+    if (state->mode != GZ_READ ||
+            (state->err != Z_OK && state->err != Z_BUF_ERROR))
+        return -1;
+
+    /* back up and start over */
+    if (LSEEK(state->fd, state->start, SEEK_SET) == -1)
+        return -1;
+    gz_reset(state);
+    return 0;
+}
+
+/* -- see zlib.h -- */
+z_off64_t ZEXPORT gzseek64(file, offset, whence)
+    gzFile file;
+    z_off64_t offset;
+    int whence;
+{
+    unsigned n;
+    z_off64_t ret;
+    gz_statep state;
+
+    /* get internal structure and check integrity */
+    if (file == NULL)
+        return -1;
+    state = (gz_statep)file;
+    if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+        return -1;
+
+    /* check that there's no error */
+    if (state->err != Z_OK && state->err != Z_BUF_ERROR)
+        return -1;
+
+    /* can only seek from start or relative to current position */
+    if (whence != SEEK_SET && whence != SEEK_CUR)
+        return -1;
+
+    /* normalize offset to a SEEK_CUR specification */
+    if (whence == SEEK_SET)
+        offset -= state->x.pos;
+    else if (state->seek)
+        offset += state->skip;
+    state->seek = 0;
+
+    /* if within raw area while reading, just go there */
+    if (state->mode == GZ_READ && state->how == COPY &&
+            state->x.pos + offset >= 0) {
+        ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR);
+        if (ret == -1)
+            return -1;
+        state->x.have = 0;
+        state->eof = 0;
+        state->past = 0;
+        state->seek = 0;
+        gz_error(state, Z_OK, NULL);
+        state->strm.avail_in = 0;
+        state->x.pos += offset;
+        return state->x.pos;
+    }
+
+    /* calculate skip amount, rewinding if needed for back seek when reading */
+    if (offset < 0) {
+        if (state->mode != GZ_READ)         /* writing -- can't go backwards */
+            return -1;
+        offset += state->x.pos;
+        if (offset < 0)                     /* before start of file! */
+            return -1;
+        if (gzrewind(file) == -1)           /* rewind, then skip to offset */
+            return -1;
+    }
+
+    /* if reading, skip what's in output buffer (one less gzgetc() check) */
+    if (state->mode == GZ_READ) {
+        n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > offset ?
+            (unsigned)offset : state->x.have;
+        state->x.have -= n;
+        state->x.next += n;
+        state->x.pos += n;
+        offset -= n;
+    }
+
+    /* request skip (if not zero) */
+    if (offset) {
+        state->seek = 1;
+        state->skip = offset;
+    }
+    return state->x.pos + offset;
+}
+
+/* -- see zlib.h -- */
+z_off_t ZEXPORT gzseek(file, offset, whence)
+    gzFile file;
+    z_off_t offset;
+    int whence;
+{
+    z_off64_t ret;
+
+    ret = gzseek64(file, (z_off64_t)offset, whence);
+    return ret == (z_off_t)ret ? (z_off_t)ret : -1;
+}
+
+/* -- see zlib.h -- */
+z_off64_t ZEXPORT gztell64(file)
+    gzFile file;
+{
+    gz_statep state;
+
+    /* get internal structure and check integrity */
+    if (file == NULL)
+        return -1;
+    state = (gz_statep)file;
+    if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+        return -1;
+
+    /* return position */
+    return state->x.pos + (state->seek ? state->skip : 0);
+}
+
+/* -- see zlib.h -- */
+z_off_t ZEXPORT gztell(file)
+    gzFile file;
+{
+    z_off64_t ret;
+
+    ret = gztell64(file);
+    return ret == (z_off_t)ret ? (z_off_t)ret : -1;
+}
+
+/* -- see zlib.h -- */
+z_off64_t ZEXPORT gzoffset64(file)
+    gzFile file;
+{
+    z_off64_t offset;
+    gz_statep state;
+
+    /* get internal structure and check integrity */
+    if (file == NULL)
+        return -1;
+    state = (gz_statep)file;
+    if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+        return -1;
+
+    /* compute and return effective offset in file */
+    offset = LSEEK(state->fd, 0, SEEK_CUR);
+    if (offset == -1)
+        return -1;
+    if (state->mode == GZ_READ)             /* reading */
+        offset -= state->strm.avail_in;     /* don't count buffered input */
+    return offset;
+}
+
+/* -- see zlib.h -- */
+z_off_t ZEXPORT gzoffset(file)
+    gzFile file;
+{
+    z_off64_t ret;
+
+    ret = gzoffset64(file);
+    return ret == (z_off_t)ret ? (z_off_t)ret : -1;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzeof(file)
+    gzFile file;
+{
+    gz_statep state;
+
+    /* get internal structure and check integrity */
+    if (file == NULL)
+        return 0;
+    state = (gz_statep)file;
+    if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+        return 0;
+
+    /* return end-of-file state */
+    return state->mode == GZ_READ ? state->past : 0;
+}
+
+/* -- see zlib.h -- */
+const char * ZEXPORT gzerror(file, errnum)
+    gzFile file;
+    int *errnum;
+{
+    gz_statep state;
+
+    /* get internal structure and check integrity */
+    if (file == NULL)
+        return NULL;
+    state = (gz_statep)file;
+    if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+        return NULL;
+
+    /* return error information */
+    if (errnum != NULL)
+        *errnum = state->err;
+    return state->msg == NULL ? "" : state->msg;
+}
+
+/* -- see zlib.h -- */
+void ZEXPORT gzclearerr(file)
+    gzFile file;
+{
+    gz_statep state;
+
+    /* get internal structure and check integrity */
+    if (file == NULL)
+        return;
+    state = (gz_statep)file;
+    if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+        return;
+
+    /* clear error and end-of-file */
+    if (state->mode == GZ_READ) {
+        state->eof = 0;
+        state->past = 0;
+    }
+    gz_error(state, Z_OK, NULL);
+}
+
+/* Create an error message in allocated memory and set state->err and
+   state->msg accordingly.  Free any previous error message already there.  Do
+   not try to free or allocate space if the error is Z_MEM_ERROR (out of
+   memory).  Simply save the error message as a static string.  If there is an
+   allocation failure constructing the error message, then convert the error to
+   out of memory. */
+void ZLIB_INTERNAL gz_error(state, err, msg)
+    gz_statep state;
+    int err;
+    const char *msg;
+{
+    /* free previously allocated message and clear */
+    if (state->msg != NULL) {
+        if (state->err != Z_MEM_ERROR)
+            free(state->msg);
+        state->msg = NULL;
+    }
+
+    /* if fatal, set state->x.have to 0 so that the gzgetc() macro fails */
+    if (err != Z_OK && err != Z_BUF_ERROR)
+        state->x.have = 0;
+
+    /* set error code, and if no message, then done */
+    state->err = err;
+    if (msg == NULL)
+        return;
+
+    /* for an out of memory error, save as static string */
+    if (err == Z_MEM_ERROR) {
+        state->msg = (char *)msg;
+        return;
+    }
+
+    /* construct error message with path */
+    if ((state->msg = malloc(strlen(state->path) + strlen(msg) + 3)) == NULL) {
+        state->err = Z_MEM_ERROR;
+        state->msg = (char *)"out of memory";
+        return;
+    }
+    strcpy(state->msg, state->path);
+    strcat(state->msg, ": ");
+    strcat(state->msg, msg);
+    return;
+}
+
+#ifndef INT_MAX
+/* portably return maximum value for an int (when limits.h presumed not
+   available) -- we need to do this to cover cases where 2's complement not
+   used, since C standard permits 1's complement and sign-bit representations,
+   otherwise we could just use ((unsigned)-1) >> 1 */
+unsigned ZLIB_INTERNAL gz_intmax()
+{
+    unsigned p, q;
+
+    p = 1;
+    do {
+        q = p;
+        p <<= 1;
+        p++;
+    } while (p > q);
+    return q >> 1;
+}
+#endif
diff --git a/libs/ext/zlib/gzread.c b/libs/ext/zlib/gzread.c
new file mode 100644
index 0000000..3493d34
--- /dev/null
+++ b/libs/ext/zlib/gzread.c
@@ -0,0 +1,589 @@
+/* gzread.c -- zlib functions for reading gzip files
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "gzguts.h"
+
+/* Local functions */
+local int gz_load OF((gz_statep, unsigned char *, unsigned, unsigned *));
+local int gz_avail OF((gz_statep));
+local int gz_look OF((gz_statep));
+local int gz_decomp OF((gz_statep));
+local int gz_fetch OF((gz_statep));
+local int gz_skip OF((gz_statep, z_off64_t));
+
+/* Use read() to load a buffer -- return -1 on error, otherwise 0.  Read from
+   state->fd, and update state->eof, state->err, and state->msg as appropriate.
+   This function needs to loop on read(), since read() is not guaranteed to
+   read the number of bytes requested, depending on the type of descriptor. */
+local int gz_load(state, buf, len, have)
+    gz_statep state;
+    unsigned char *buf;
+    unsigned len;
+    unsigned *have;
+{
+    int ret;
+
+    *have = 0;
+    do {
+        ret = read(state->fd, buf + *have, len - *have);
+        if (ret <= 0)
+            break;
+        *have += ret;
+    } while (*have < len);
+    if (ret < 0) {
+        gz_error(state, Z_ERRNO, zstrerror());
+        return -1;
+    }
+    if (ret == 0)
+        state->eof = 1;
+    return 0;
+}
+
+/* Load up input buffer and set eof flag if last data loaded -- return -1 on
+   error, 0 otherwise.  Note that the eof flag is set when the end of the input
+   file is reached, even though there may be unused data in the buffer.  Once
+   that data has been used, no more attempts will be made to read the file.
+   If strm->avail_in != 0, then the current data is moved to the beginning of
+   the input buffer, and then the remainder of the buffer is loaded with the
+   available data from the input file. */
+local int gz_avail(state)
+    gz_statep state;
+{
+    unsigned got;
+    z_streamp strm = &(state->strm);
+
+    if (state->err != Z_OK && state->err != Z_BUF_ERROR)
+        return -1;
+    if (state->eof == 0) {
+        if (strm->avail_in) {       /* copy what's there to the start */
+            unsigned char *p = state->in, *q = strm->next_in;
+            unsigned n = strm->avail_in;
+            do {
+                *p++ = *q++;
+            } while (--n);
+        }
+        if (gz_load(state, state->in + strm->avail_in,
+                    state->size - strm->avail_in, &got) == -1)
+            return -1;
+        strm->avail_in += got;
+        strm->next_in = state->in;
+    }
+    return 0;
+}
+
+/* Look for gzip header, set up for inflate or copy.  state->x.have must be 0.
+   If this is the first time in, allocate required memory.  state->how will be
+   left unchanged if there is no more input data available, will be set to COPY
+   if there is no gzip header and direct copying will be performed, or it will
+   be set to GZIP for decompression.  If direct copying, then leftover input
+   data from the input buffer will be copied to the output buffer.  In that
+   case, all further file reads will be directly to either the output buffer or
+   a user buffer.  If decompressing, the inflate state will be initialized.
+   gz_look() will return 0 on success or -1 on failure. */
+local int gz_look(state)
+    gz_statep state;
+{
+    z_streamp strm = &(state->strm);
+
+    /* allocate read buffers and inflate memory */
+    if (state->size == 0) {
+        /* allocate buffers */
+        state->in = malloc(state->want);
+        state->out = malloc(state->want << 1);
+        if (state->in == NULL || state->out == NULL) {
+            if (state->out != NULL)
+                free(state->out);
+            if (state->in != NULL)
+                free(state->in);
+            gz_error(state, Z_MEM_ERROR, "out of memory");
+            return -1;
+        }
+        state->size = state->want;
+
+        /* allocate inflate memory */
+        state->strm.zalloc = Z_NULL;
+        state->strm.zfree = Z_NULL;
+        state->strm.opaque = Z_NULL;
+        state->strm.avail_in = 0;
+        state->strm.next_in = Z_NULL;
+        if (inflateInit2(&(state->strm), 15 + 16) != Z_OK) {    /* gunzip */
+            free(state->out);
+            free(state->in);
+            state->size = 0;
+            gz_error(state, Z_MEM_ERROR, "out of memory");
+            return -1;
+        }
+    }
+
+    /* get at least the magic bytes in the input buffer */
+    if (strm->avail_in < 2) {
+        if (gz_avail(state) == -1)
+            return -1;
+        if (strm->avail_in == 0)
+            return 0;
+    }
+
+    /* look for gzip magic bytes -- if there, do gzip decoding (note: there is
+       a logical dilemma here when considering the case of a partially written
+       gzip file, to wit, if a single 31 byte is written, then we cannot tell
+       whether this is a single-byte file, or just a partially written gzip
+       file -- for here we assume that if a gzip file is being written, then
+       the header will be written in a single operation, so that reading a
+       single byte is sufficient indication that it is not a gzip file) */
+    if (strm->avail_in > 1 &&
+            strm->next_in[0] == 31 && strm->next_in[1] == 139) {
+        inflateReset(strm);
+        state->how = GZIP;
+        state->direct = 0;
+        return 0;
+    }
+
+    /* no gzip header -- if we were decoding gzip before, then this is trailing
+       garbage.  Ignore the trailing garbage and finish. */
+    if (state->direct == 0) {
+        strm->avail_in = 0;
+        state->eof = 1;
+        state->x.have = 0;
+        return 0;
+    }
+
+    /* doing raw i/o, copy any leftover input to output -- this assumes that
+       the output buffer is larger than the input buffer, which also assures
+       space for gzungetc() */
+    state->x.next = state->out;
+    if (strm->avail_in) {
+        memcpy(state->x.next, strm->next_in, strm->avail_in);
+        state->x.have = strm->avail_in;
+        strm->avail_in = 0;
+    }
+    state->how = COPY;
+    state->direct = 1;
+    return 0;
+}
+
+/* Decompress from input to the provided next_out and avail_out in the state.
+   On return, state->x.have and state->x.next point to the just decompressed
+   data.  If the gzip stream completes, state->how is reset to LOOK to look for
+   the next gzip stream or raw data, once state->x.have is depleted.  Returns 0
+   on success, -1 on failure. */
+local int gz_decomp(state)
+    gz_statep state;
+{
+    int ret = Z_OK;
+    unsigned had;
+    z_streamp strm = &(state->strm);
+
+    /* fill output buffer up to end of deflate stream */
+    had = strm->avail_out;
+    do {
+        /* get more input for inflate() */
+        if (strm->avail_in == 0 && gz_avail(state) == -1)
+            return -1;
+        if (strm->avail_in == 0) {
+            gz_error(state, Z_BUF_ERROR, "unexpected end of file");
+            break;
+        }
+
+        /* decompress and handle errors */
+        ret = inflate(strm, Z_NO_FLUSH);
+        if (ret == Z_STREAM_ERROR || ret == Z_NEED_DICT) {
+            gz_error(state, Z_STREAM_ERROR,
+                     "internal error: inflate stream corrupt");
+            return -1;
+        }
+        if (ret == Z_MEM_ERROR) {
+            gz_error(state, Z_MEM_ERROR, "out of memory");
+            return -1;
+        }
+        if (ret == Z_DATA_ERROR) {              /* deflate stream invalid */
+            gz_error(state, Z_DATA_ERROR,
+                     strm->msg == NULL ? "compressed data error" : strm->msg);
+            return -1;
+        }
+    } while (strm->avail_out && ret != Z_STREAM_END);
+
+    /* update available output */
+    state->x.have = had - strm->avail_out;
+    state->x.next = strm->next_out - state->x.have;
+
+    /* if the gzip stream completed successfully, look for another */
+    if (ret == Z_STREAM_END)
+        state->how = LOOK;
+
+    /* good decompression */
+    return 0;
+}
+
+/* Fetch data and put it in the output buffer.  Assumes state->x.have is 0.
+   Data is either copied from the input file or decompressed from the input
+   file depending on state->how.  If state->how is LOOK, then a gzip header is
+   looked for to determine whether to copy or decompress.  Returns -1 on error,
+   otherwise 0.  gz_fetch() will leave state->how as COPY or GZIP unless the
+   end of the input file has been reached and all data has been processed.  */
+local int gz_fetch(state)
+    gz_statep state;
+{
+    z_streamp strm = &(state->strm);
+
+    do {
+        switch(state->how) {
+        case LOOK:      /* -> LOOK, COPY (only if never GZIP), or GZIP */
+            if (gz_look(state) == -1)
+                return -1;
+            if (state->how == LOOK)
+                return 0;
+            break;
+        case COPY:      /* -> COPY */
+            if (gz_load(state, state->out, state->size << 1, &(state->x.have))
+                    == -1)
+                return -1;
+            state->x.next = state->out;
+            return 0;
+        case GZIP:      /* -> GZIP or LOOK (if end of gzip stream) */
+            strm->avail_out = state->size << 1;
+            strm->next_out = state->out;
+            if (gz_decomp(state) == -1)
+                return -1;
+        }
+    } while (state->x.have == 0 && (!state->eof || strm->avail_in));
+    return 0;
+}
+
+/* Skip len uncompressed bytes of output.  Return -1 on error, 0 on success. */
+local int gz_skip(state, len)
+    gz_statep state;
+    z_off64_t len;
+{
+    unsigned n;
+
+    /* skip over len bytes or reach end-of-file, whichever comes first */
+    while (len)
+        /* skip over whatever is in output buffer */
+        if (state->x.have) {
+            n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > len ?
+                (unsigned)len : state->x.have;
+            state->x.have -= n;
+            state->x.next += n;
+            state->x.pos += n;
+            len -= n;
+        }
+
+        /* output buffer empty -- return if we're at the end of the input */
+        else if (state->eof && state->strm.avail_in == 0)
+            break;
+
+        /* need more data to skip -- load up output buffer */
+        else {
+            /* get more output, looking for header if required */
+            if (gz_fetch(state) == -1)
+                return -1;
+        }
+    return 0;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzread(file, buf, len)
+    gzFile file;
+    voidp buf;
+    unsigned len;
+{
+    unsigned got, n;
+    gz_statep state;
+    z_streamp strm;
+
+    /* get internal structure */
+    if (file == NULL)
+        return -1;
+    state = (gz_statep)file;
+    strm = &(state->strm);
+
+    /* check that we're reading and that there's no (serious) error */
+    if (state->mode != GZ_READ ||
+            (state->err != Z_OK && state->err != Z_BUF_ERROR))
+        return -1;
+
+    /* since an int is returned, make sure len fits in one, otherwise return
+       with an error (this avoids the flaw in the interface) */
+    if ((int)len < 0) {
+        gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
+        return -1;
+    }
+
+    /* if len is zero, avoid unnecessary operations */
+    if (len == 0)
+        return 0;
+
+    /* process a skip request */
+    if (state->seek) {
+        state->seek = 0;
+        if (gz_skip(state, state->skip) == -1)
+            return -1;
+    }
+
+    /* get len bytes to buf, or less than len if at the end */
+    got = 0;
+    do {
+        /* first just try copying data from the output buffer */
+        if (state->x.have) {
+            n = state->x.have > len ? len : state->x.have;
+            memcpy(buf, state->x.next, n);
+            state->x.next += n;
+            state->x.have -= n;
+        }
+
+        /* output buffer empty -- return if we're at the end of the input */
+        else if (state->eof && strm->avail_in == 0) {
+            state->past = 1;        /* tried to read past end */
+            break;
+        }
+
+        /* need output data -- for small len or new stream load up our output
+           buffer */
+        else if (state->how == LOOK || len < (state->size << 1)) {
+            /* get more output, looking for header if required */
+            if (gz_fetch(state) == -1)
+                return -1;
+            continue;       /* no progress yet -- go back to copy above */
+            /* the copy above assures that we will leave with space in the
+               output buffer, allowing at least one gzungetc() to succeed */
+        }
+
+        /* large len -- read directly into user buffer */
+        else if (state->how == COPY) {      /* read directly */
+            if (gz_load(state, buf, len, &n) == -1)
+                return -1;
+        }
+
+        /* large len -- decompress directly into user buffer */
+        else {  /* state->how == GZIP */
+            strm->avail_out = len;
+            strm->next_out = buf;
+            if (gz_decomp(state) == -1)
+                return -1;
+            n = state->x.have;
+            state->x.have = 0;
+        }
+
+        /* update progress */
+        len -= n;
+        buf = (char *)buf + n;
+        got += n;
+        state->x.pos += n;
+    } while (len);
+
+    /* return number of bytes read into user buffer (will fit in int) */
+    return (int)got;
+}
+
+/* -- see zlib.h -- */
+#undef gzgetc
+int ZEXPORT gzgetc(file)
+    gzFile file;
+{
+    int ret;
+    unsigned char buf[1];
+    gz_statep state;
+
+    /* get internal structure */
+    if (file == NULL)
+        return -1;
+    state = (gz_statep)file;
+
+    /* check that we're reading and that there's no (serious) error */
+    if (state->mode != GZ_READ ||
+        (state->err != Z_OK && state->err != Z_BUF_ERROR))
+        return -1;
+
+    /* try output buffer (no need to check for skip request) */
+    if (state->x.have) {
+        state->x.have--;
+        state->x.pos++;
+        return *(state->x.next)++;
+    }
+
+    /* nothing there -- try gzread() */
+    ret = gzread(file, buf, 1);
+    return ret < 1 ? -1 : buf[0];
+}
+
+int ZEXPORT gzgetc_(file)
+gzFile file;
+{
+    return gzgetc(file);
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzungetc(c, file)
+    int c;
+    gzFile file;
+{
+    gz_statep state;
+
+    /* get internal structure */
+    if (file == NULL)
+        return -1;
+    state = (gz_statep)file;
+
+    /* check that we're reading and that there's no (serious) error */
+    if (state->mode != GZ_READ ||
+        (state->err != Z_OK && state->err != Z_BUF_ERROR))
+        return -1;
+
+    /* process a skip request */
+    if (state->seek) {
+        state->seek = 0;
+        if (gz_skip(state, state->skip) == -1)
+            return -1;
+    }
+
+    /* can't push EOF */
+    if (c < 0)
+        return -1;
+
+    /* if output buffer empty, put byte at end (allows more pushing) */
+    if (state->x.have == 0) {
+        state->x.have = 1;
+        state->x.next = state->out + (state->size << 1) - 1;
+        state->x.next[0] = c;
+        state->x.pos--;
+        state->past = 0;
+        return c;
+    }
+
+    /* if no room, give up (must have already done a gzungetc()) */
+    if (state->x.have == (state->size << 1)) {
+        gz_error(state, Z_DATA_ERROR, "out of room to push characters");
+        return -1;
+    }
+
+    /* slide output data if needed and insert byte before existing data */
+    if (state->x.next == state->out) {
+        unsigned char *src = state->out + state->x.have;
+        unsigned char *dest = state->out + (state->size << 1);
+        while (src > state->out)
+            *--dest = *--src;
+        state->x.next = dest;
+    }
+    state->x.have++;
+    state->x.next--;
+    state->x.next[0] = c;
+    state->x.pos--;
+    state->past = 0;
+    return c;
+}
+
+/* -- see zlib.h -- */
+char * ZEXPORT gzgets(file, buf, len)
+    gzFile file;
+    char *buf;
+    int len;
+{
+    unsigned left, n;
+    char *str;
+    unsigned char *eol;
+    gz_statep state;
+
+    /* check parameters and get internal structure */
+    if (file == NULL || buf == NULL || len < 1)
+        return NULL;
+    state = (gz_statep)file;
+
+    /* check that we're reading and that there's no (serious) error */
+    if (state->mode != GZ_READ ||
+        (state->err != Z_OK && state->err != Z_BUF_ERROR))
+        return NULL;
+
+    /* process a skip request */
+    if (state->seek) {
+        state->seek = 0;
+        if (gz_skip(state, state->skip) == -1)
+            return NULL;
+    }
+
+    /* copy output bytes up to new line or len - 1, whichever comes first --
+       append a terminating zero to the string (we don't check for a zero in
+       the contents, let the user worry about that) */
+    str = buf;
+    left = (unsigned)len - 1;
+    if (left) do {
+        /* assure that something is in the output buffer */
+        if (state->x.have == 0 && gz_fetch(state) == -1)
+            return NULL;                /* error */
+        if (state->x.have == 0) {       /* end of file */
+            state->past = 1;            /* read past end */
+            break;                      /* return what we have */
+        }
+
+        /* look for end-of-line in current output buffer */
+        n = state->x.have > left ? left : state->x.have;
+        eol = memchr(state->x.next, '\n', n);
+        if (eol != NULL)
+            n = (unsigned)(eol - state->x.next) + 1;
+
+        /* copy through end-of-line, or remainder if not found */
+        memcpy(buf, state->x.next, n);
+        state->x.have -= n;
+        state->x.next += n;
+        state->x.pos += n;
+        left -= n;
+        buf += n;
+    } while (left && eol == NULL);
+
+    /* return terminated string, or if nothing, end of file */
+    if (buf == str)
+        return NULL;
+    buf[0] = 0;
+    return str;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzdirect(file)
+    gzFile file;
+{
+    gz_statep state;
+
+    /* get internal structure */
+    if (file == NULL)
+        return 0;
+    state = (gz_statep)file;
+
+    /* if the state is not known, but we can find out, then do so (this is
+       mainly for right after a gzopen() or gzdopen()) */
+    if (state->mode == GZ_READ && state->how == LOOK && state->x.have == 0)
+        (void)gz_look(state);
+
+    /* return 1 if transparent, 0 if processing a gzip stream */
+    return state->direct;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzclose_r(file)
+    gzFile file;
+{
+    int ret, err;
+    gz_statep state;
+
+    /* get internal structure */
+    if (file == NULL)
+        return Z_STREAM_ERROR;
+    state = (gz_statep)file;
+
+    /* check that we're reading */
+    if (state->mode != GZ_READ)
+        return Z_STREAM_ERROR;
+
+    /* free memory and close file */
+    if (state->size) {
+        inflateEnd(&(state->strm));
+        free(state->out);
+        free(state->in);
+    }
+    err = state->err == Z_BUF_ERROR ? Z_BUF_ERROR : Z_OK;
+    gz_error(state, Z_OK, NULL);
+    free(state->path);
+    ret = close(state->fd);
+    free(state);
+    return ret ? Z_ERRNO : err;
+}
diff --git a/libs/ext/zlib/gzwrite.c b/libs/ext/zlib/gzwrite.c
new file mode 100644
index 0000000..27cb342
--- /dev/null
+++ b/libs/ext/zlib/gzwrite.c
@@ -0,0 +1,565 @@
+/* gzwrite.c -- zlib functions for writing gzip files
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "gzguts.h"
+
+/* Local functions */
+local int gz_init OF((gz_statep));
+local int gz_comp OF((gz_statep, int));
+local int gz_zero OF((gz_statep, z_off64_t));
+
+/* Initialize state for writing a gzip file.  Mark initialization by setting
+   state->size to non-zero.  Return -1 on failure or 0 on success. */
+local int gz_init(state)
+    gz_statep state;
+{
+    int ret;
+    z_streamp strm = &(state->strm);
+
+    /* allocate input buffer */
+    state->in = malloc(state->want);
+    if (state->in == NULL) {
+        gz_error(state, Z_MEM_ERROR, "out of memory");
+        return -1;
+    }
+
+    /* only need output buffer and deflate state if compressing */
+    if (!state->direct) {
+        /* allocate output buffer */
+        state->out = malloc(state->want);
+        if (state->out == NULL) {
+            free(state->in);
+            gz_error(state, Z_MEM_ERROR, "out of memory");
+            return -1;
+        }
+
+        /* allocate deflate memory, set up for gzip compression */
+        strm->zalloc = Z_NULL;
+        strm->zfree = Z_NULL;
+        strm->opaque = Z_NULL;
+        ret = deflateInit2(strm, state->level, Z_DEFLATED,
+                           MAX_WBITS + 16, DEF_MEM_LEVEL, state->strategy);
+        if (ret != Z_OK) {
+            free(state->out);
+            free(state->in);
+            gz_error(state, Z_MEM_ERROR, "out of memory");
+            return -1;
+        }
+    }
+
+    /* mark state as initialized */
+    state->size = state->want;
+
+    /* initialize write buffer if compressing */
+    if (!state->direct) {
+        strm->avail_out = state->size;
+        strm->next_out = state->out;
+        state->x.next = strm->next_out;
+    }
+    return 0;
+}
+
+/* Compress whatever is at avail_in and next_in and write to the output file.
+   Return -1 if there is an error writing to the output file, otherwise 0.
+   flush is assumed to be a valid deflate() flush value.  If flush is Z_FINISH,
+   then the deflate() state is reset to start a new gzip stream.  If gz->direct
+   is true, then simply write to the output file without compressing, and
+   ignore flush. */
+local int gz_comp(state, flush)
+    gz_statep state;
+    int flush;
+{
+    int ret, got;
+    unsigned have;
+    z_streamp strm = &(state->strm);
+
+    /* allocate memory if this is the first time through */
+    if (state->size == 0 && gz_init(state) == -1)
+        return -1;
+
+    /* write directly if requested */
+    if (state->direct) {
+        got = write(state->fd, strm->next_in, strm->avail_in);
+        if (got < 0 || (unsigned)got != strm->avail_in) {
+            gz_error(state, Z_ERRNO, zstrerror());
+            return -1;
+        }
+        strm->avail_in = 0;
+        return 0;
+    }
+
+    /* run deflate() on provided input until it produces no more output */
+    ret = Z_OK;
+    do {
+        /* write out current buffer contents if full, or if flushing, but if
+           doing Z_FINISH then don't write until we get to Z_STREAM_END */
+        if (strm->avail_out == 0 || (flush != Z_NO_FLUSH &&
+            (flush != Z_FINISH || ret == Z_STREAM_END))) {
+            have = (unsigned)(strm->next_out - state->x.next);
+            if (have && ((got = write(state->fd, state->x.next, have)) < 0 ||
+                         (unsigned)got != have)) {
+                gz_error(state, Z_ERRNO, zstrerror());
+                return -1;
+            }
+            if (strm->avail_out == 0) {
+                strm->avail_out = state->size;
+                strm->next_out = state->out;
+            }
+            state->x.next = strm->next_out;
+        }
+
+        /* compress */
+        have = strm->avail_out;
+        ret = deflate(strm, flush);
+        if (ret == Z_STREAM_ERROR) {
+            gz_error(state, Z_STREAM_ERROR,
+                      "internal error: deflate stream corrupt");
+            return -1;
+        }
+        have -= strm->avail_out;
+    } while (have);
+
+    /* if that completed a deflate stream, allow another to start */
+    if (flush == Z_FINISH)
+        deflateReset(strm);
+
+    /* all done, no errors */
+    return 0;
+}
+
+/* Compress len zeros to output.  Return -1 on error, 0 on success. */
+local int gz_zero(state, len)
+    gz_statep state;
+    z_off64_t len;
+{
+    int first;
+    unsigned n;
+    z_streamp strm = &(state->strm);
+
+    /* consume whatever's left in the input buffer */
+    if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+        return -1;
+
+    /* compress len zeros (len guaranteed > 0) */
+    first = 1;
+    while (len) {
+        n = GT_OFF(state->size) || (z_off64_t)state->size > len ?
+            (unsigned)len : state->size;
+        if (first) {
+            memset(state->in, 0, n);
+            first = 0;
+        }
+        strm->avail_in = n;
+        strm->next_in = state->in;
+        state->x.pos += n;
+        if (gz_comp(state, Z_NO_FLUSH) == -1)
+            return -1;
+        len -= n;
+    }
+    return 0;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzwrite(file, buf, len)
+    gzFile file;
+    voidpc buf;
+    unsigned len;
+{
+    unsigned put = len;
+    unsigned n;
+    gz_statep state;
+    z_streamp strm;
+
+    /* get internal structure */
+    if (file == NULL)
+        return 0;
+    state = (gz_statep)file;
+    strm = &(state->strm);
+
+    /* check that we're writing and that there's no error */
+    if (state->mode != GZ_WRITE || state->err != Z_OK)
+        return 0;
+
+    /* since an int is returned, make sure len fits in one, otherwise return
+       with an error (this avoids the flaw in the interface) */
+    if ((int)len < 0) {
+        gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
+        return 0;
+    }
+
+    /* if len is zero, avoid unnecessary operations */
+    if (len == 0)
+        return 0;
+
+    /* allocate memory if this is the first time through */
+    if (state->size == 0 && gz_init(state) == -1)
+        return 0;
+
+    /* check for seek request */
+    if (state->seek) {
+        state->seek = 0;
+        if (gz_zero(state, state->skip) == -1)
+            return 0;
+    }
+
+    /* for small len, copy to input buffer, otherwise compress directly */
+    if (len < state->size) {
+        /* copy to input buffer, compress when full */
+        do {
+            if (strm->avail_in == 0)
+                strm->next_in = state->in;
+            n = state->size - strm->avail_in;
+            if (n > len)
+                n = len;
+            memcpy(strm->next_in + strm->avail_in, buf, n);
+            strm->avail_in += n;
+            state->x.pos += n;
+            buf = (char *)buf + n;
+            len -= n;
+            if (len && gz_comp(state, Z_NO_FLUSH) == -1)
+                return 0;
+        } while (len);
+    }
+    else {
+        /* consume whatever's left in the input buffer */
+        if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+            return 0;
+
+        /* directly compress user buffer to file */
+        strm->avail_in = len;
+        strm->next_in = (voidp)buf;
+        state->x.pos += len;
+        if (gz_comp(state, Z_NO_FLUSH) == -1)
+            return 0;
+    }
+
+    /* input was all buffered or compressed (put will fit in int) */
+    return (int)put;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzputc(file, c)
+    gzFile file;
+    int c;
+{
+    unsigned char buf[1];
+    gz_statep state;
+    z_streamp strm;
+
+    /* get internal structure */
+    if (file == NULL)
+        return -1;
+    state = (gz_statep)file;
+    strm = &(state->strm);
+
+    /* check that we're writing and that there's no error */
+    if (state->mode != GZ_WRITE || state->err != Z_OK)
+        return -1;
+
+    /* check for seek request */
+    if (state->seek) {
+        state->seek = 0;
+        if (gz_zero(state, state->skip) == -1)
+            return -1;
+    }
+
+    /* try writing to input buffer for speed (state->size == 0 if buffer not
+       initialized) */
+    if (strm->avail_in < state->size) {
+        if (strm->avail_in == 0)
+            strm->next_in = state->in;
+        strm->next_in[strm->avail_in++] = c;
+        state->x.pos++;
+        return c & 0xff;
+    }
+
+    /* no room in buffer or not initialized, use gz_write() */
+    buf[0] = c;
+    if (gzwrite(file, buf, 1) != 1)
+        return -1;
+    return c & 0xff;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzputs(file, str)
+    gzFile file;
+    const char *str;
+{
+    int ret;
+    unsigned len;
+
+    /* write string */
+    len = (unsigned)strlen(str);
+    ret = gzwrite(file, str, len);
+    return ret == 0 && len != 0 ? -1 : ret;
+}
+
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#include <stdarg.h>
+
+/* -- see zlib.h -- */
+int ZEXPORTVA gzprintf (gzFile file, const char *format, ...)
+{
+    int size, len;
+    gz_statep state;
+    z_streamp strm;
+    va_list va;
+
+    /* get internal structure */
+    if (file == NULL)
+        return -1;
+    state = (gz_statep)file;
+    strm = &(state->strm);
+
+    /* check that we're writing and that there's no error */
+    if (state->mode != GZ_WRITE || state->err != Z_OK)
+        return 0;
+
+    /* make sure we have some buffer space */
+    if (state->size == 0 && gz_init(state) == -1)
+        return 0;
+
+    /* check for seek request */
+    if (state->seek) {
+        state->seek = 0;
+        if (gz_zero(state, state->skip) == -1)
+            return 0;
+    }
+
+    /* consume whatever's left in the input buffer */
+    if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+        return 0;
+
+    /* do the printf() into the input buffer, put length in len */
+    size = (int)(state->size);
+    state->in[size - 1] = 0;
+    va_start(va, format);
+#ifdef NO_vsnprintf
+#  ifdef HAS_vsprintf_void
+    (void)vsprintf((char *)(state->in), format, va);
+    va_end(va);
+    for (len = 0; len < size; len++)
+        if (state->in[len] == 0) break;
+#  else
+    len = vsprintf((char *)(state->in), format, va);
+    va_end(va);
+#  endif
+#else
+#  ifdef HAS_vsnprintf_void
+    (void)vsnprintf((char *)(state->in), size, format, va);
+    va_end(va);
+    len = strlen((char *)(state->in));
+#  else
+    len = vsnprintf((char *)(state->in), size, format, va);
+    va_end(va);
+#  endif
+#endif
+
+    /* check that printf() results fit in buffer */
+    if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
+        return 0;
+
+    /* update buffer and position, defer compression until needed */
+    strm->avail_in = (unsigned)len;
+    strm->next_in = state->in;
+    state->x.pos += len;
+    return len;
+}
+
+#else /* !STDC && !Z_HAVE_STDARG_H */
+
+/* -- see zlib.h -- */
+int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
+                       a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
+    gzFile file;
+    const char *format;
+    int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
+        a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
+{
+    int size, len;
+    gz_statep state;
+    z_streamp strm;
+
+    /* get internal structure */
+    if (file == NULL)
+        return -1;
+    state = (gz_statep)file;
+    strm = &(state->strm);
+
+    /* check that can really pass pointer in ints */
+    if (sizeof(int) != sizeof(void *))
+        return 0;
+
+    /* check that we're writing and that there's no error */
+    if (state->mode != GZ_WRITE || state->err != Z_OK)
+        return 0;
+
+    /* make sure we have some buffer space */
+    if (state->size == 0 && gz_init(state) == -1)
+        return 0;
+
+    /* check for seek request */
+    if (state->seek) {
+        state->seek = 0;
+        if (gz_zero(state, state->skip) == -1)
+            return 0;
+    }
+
+    /* consume whatever's left in the input buffer */
+    if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+        return 0;
+
+    /* do the printf() into the input buffer, put length in len */
+    size = (int)(state->size);
+    state->in[size - 1] = 0;
+#ifdef NO_snprintf
+#  ifdef HAS_sprintf_void
+    sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
+            a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+    for (len = 0; len < size; len++)
+        if (state->in[len] == 0) break;
+#  else
+    len = sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
+                  a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+#  endif
+#else
+#  ifdef HAS_snprintf_void
+    snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6, a7, a8,
+             a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+    len = strlen((char *)(state->in));
+#  else
+    len = snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6,
+                   a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18,
+                   a19, a20);
+#  endif
+#endif
+
+    /* check that printf() results fit in buffer */
+    if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
+        return 0;
+
+    /* update buffer and position, defer compression until needed */
+    strm->avail_in = (unsigned)len;
+    strm->next_in = state->in;
+    state->x.pos += len;
+    return len;
+}
+
+#endif
+
+/* -- see zlib.h -- */
+int ZEXPORT gzflush(file, flush)
+    gzFile file;
+    int flush;
+{
+    gz_statep state;
+
+    /* get internal structure */
+    if (file == NULL)
+        return -1;
+    state = (gz_statep)file;
+
+    /* check that we're writing and that there's no error */
+    if (state->mode != GZ_WRITE || state->err != Z_OK)
+        return Z_STREAM_ERROR;
+
+    /* check flush parameter */
+    if (flush < 0 || flush > Z_FINISH)
+        return Z_STREAM_ERROR;
+
+    /* check for seek request */
+    if (state->seek) {
+        state->seek = 0;
+        if (gz_zero(state, state->skip) == -1)
+            return -1;
+    }
+
+    /* compress remaining data with requested flush */
+    gz_comp(state, flush);
+    return state->err;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzsetparams(file, level, strategy)
+    gzFile file;
+    int level;
+    int strategy;
+{
+    gz_statep state;
+    z_streamp strm;
+
+    /* get internal structure */
+    if (file == NULL)
+        return Z_STREAM_ERROR;
+    state = (gz_statep)file;
+    strm = &(state->strm);
+
+    /* check that we're writing and that there's no error */
+    if (state->mode != GZ_WRITE || state->err != Z_OK)
+        return Z_STREAM_ERROR;
+
+    /* if no change is requested, then do nothing */
+    if (level == state->level && strategy == state->strategy)
+        return Z_OK;
+
+    /* check for seek request */
+    if (state->seek) {
+        state->seek = 0;
+        if (gz_zero(state, state->skip) == -1)
+            return -1;
+    }
+
+    /* change compression parameters for subsequent input */
+    if (state->size) {
+        /* flush previous input with previous parameters before changing */
+        if (strm->avail_in && gz_comp(state, Z_PARTIAL_FLUSH) == -1)
+            return state->err;
+        deflateParams(strm, level, strategy);
+    }
+    state->level = level;
+    state->strategy = strategy;
+    return Z_OK;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzclose_w(file)
+    gzFile file;
+{
+    int ret = Z_OK;
+    gz_statep state;
+
+    /* get internal structure */
+    if (file == NULL)
+        return Z_STREAM_ERROR;
+    state = (gz_statep)file;
+
+    /* check that we're writing */
+    if (state->mode != GZ_WRITE)
+        return Z_STREAM_ERROR;
+
+    /* check for seek request */
+    if (state->seek) {
+        state->seek = 0;
+        if (gz_zero(state, state->skip) == -1)
+            ret = state->err;
+    }
+
+    /* flush, free memory, and close file */
+    if (state->size) {
+        if (gz_comp(state, Z_FINISH) == -1)
+            ret = state->err;
+        if (!state->direct) {
+            (void)deflateEnd(&(state->strm));
+            free(state->out);
+        }
+        free(state->in);
+    }
+    gz_error(state, Z_OK, NULL);
+    free(state->path);
+    if (close(state->fd) == -1)
+        ret = Z_ERRNO;
+    free(state);
+    return ret;
+}
diff --git a/libs/ext/zlib/infback.c b/libs/ext/zlib/infback.c
new file mode 100644
index 0000000..981aff1
--- /dev/null
+++ b/libs/ext/zlib/infback.c
@@ -0,0 +1,640 @@
+/* infback.c -- inflate using a call-back interface
+ * Copyright (C) 1995-2011 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/*
+   This code is largely copied from inflate.c.  Normally either infback.o or
+   inflate.o would be linked into an application--not both.  The interface
+   with inffast.c is retained so that optimized assembler-coded versions of
+   inflate_fast() can be used with either inflate.c or infback.c.
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+/* function prototypes */
+local void fixedtables OF((struct inflate_state FAR *state));
+
+/*
+   strm provides memory allocation functions in zalloc and zfree, or
+   Z_NULL to use the library memory allocation functions.
+
+   windowBits is in the range 8..15, and window is a user-supplied
+   window and output buffer that is 2**windowBits bytes.
+ */
+int ZEXPORT inflateBackInit_(strm, windowBits, window, version, stream_size)
+z_streamp strm;
+int windowBits;
+unsigned char FAR *window;
+const char *version;
+int stream_size;
+{
+    struct inflate_state FAR *state;
+
+    if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
+        stream_size != (int)(sizeof(z_stream)))
+        return Z_VERSION_ERROR;
+    if (strm == Z_NULL || window == Z_NULL ||
+        windowBits < 8 || windowBits > 15)
+        return Z_STREAM_ERROR;
+    strm->msg = Z_NULL;                 /* in case we return an error */
+    if (strm->zalloc == (alloc_func)0) {
+#ifdef Z_SOLO
+        return Z_STREAM_ERROR;
+#else
+        strm->zalloc = zcalloc;
+        strm->opaque = (voidpf)0;
+#endif
+    }
+    if (strm->zfree == (free_func)0)
+#ifdef Z_SOLO
+        return Z_STREAM_ERROR;
+#else
+    strm->zfree = zcfree;
+#endif
+    state = (struct inflate_state FAR *)ZALLOC(strm, 1,
+                                               sizeof(struct inflate_state));
+    if (state == Z_NULL) return Z_MEM_ERROR;
+    Tracev((stderr, "inflate: allocated\n"));
+    strm->state = (struct internal_state FAR *)state;
+    state->dmax = 32768U;
+    state->wbits = windowBits;
+    state->wsize = 1U << windowBits;
+    state->window = window;
+    state->wnext = 0;
+    state->whave = 0;
+    return Z_OK;
+}
+
+/*
+   Return state with length and distance decoding tables and index sizes set to
+   fixed code decoding.  Normally this returns fixed tables from inffixed.h.
+   If BUILDFIXED is defined, then instead this routine builds the tables the
+   first time it's called, and returns those tables the first time and
+   thereafter.  This reduces the size of the code by about 2K bytes, in
+   exchange for a little execution time.  However, BUILDFIXED should not be
+   used for threaded applications, since the rewriting of the tables and virgin
+   may not be thread-safe.
+ */
+local void fixedtables(state)
+struct inflate_state FAR *state;
+{
+#ifdef BUILDFIXED
+    static int virgin = 1;
+    static code *lenfix, *distfix;
+    static code fixed[544];
+
+    /* build fixed huffman tables if first call (may not be thread safe) */
+    if (virgin) {
+        unsigned sym, bits;
+        static code *next;
+
+        /* literal/length table */
+        sym = 0;
+        while (sym < 144) state->lens[sym++] = 8;
+        while (sym < 256) state->lens[sym++] = 9;
+        while (sym < 280) state->lens[sym++] = 7;
+        while (sym < 288) state->lens[sym++] = 8;
+        next = fixed;
+        lenfix = next;
+        bits = 9;
+        inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
+
+        /* distance table */
+        sym = 0;
+        while (sym < 32) state->lens[sym++] = 5;
+        distfix = next;
+        bits = 5;
+        inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
+
+        /* do this just once */
+        virgin = 0;
+    }
+#else /* !BUILDFIXED */
+#   include "inffixed.h"
+#endif /* BUILDFIXED */
+    state->lencode = lenfix;
+    state->lenbits = 9;
+    state->distcode = distfix;
+    state->distbits = 5;
+}
+
+/* Macros for inflateBack(): */
+
+/* Load returned state from inflate_fast() */
+#define LOAD() \
+    do { \
+        put = strm->next_out; \
+        left = strm->avail_out; \
+        next = strm->next_in; \
+        have = strm->avail_in; \
+        hold = state->hold; \
+        bits = state->bits; \
+    } while (0)
+
+/* Set state from registers for inflate_fast() */
+#define RESTORE() \
+    do { \
+        strm->next_out = put; \
+        strm->avail_out = left; \
+        strm->next_in = next; \
+        strm->avail_in = have; \
+        state->hold = hold; \
+        state->bits = bits; \
+    } while (0)
+
+/* Clear the input bit accumulator */
+#define INITBITS() \
+    do { \
+        hold = 0; \
+        bits = 0; \
+    } while (0)
+
+/* Assure that some input is available.  If input is requested, but denied,
+   then return a Z_BUF_ERROR from inflateBack(). */
+#define PULL() \
+    do { \
+        if (have == 0) { \
+            have = in(in_desc, &next); \
+            if (have == 0) { \
+                next = Z_NULL; \
+                ret = Z_BUF_ERROR; \
+                goto inf_leave; \
+            } \
+        } \
+    } while (0)
+
+/* Get a byte of input into the bit accumulator, or return from inflateBack()
+   with an error if there is no input available. */
+#define PULLBYTE() \
+    do { \
+        PULL(); \
+        have--; \
+        hold += (unsigned long)(*next++) << bits; \
+        bits += 8; \
+    } while (0)
+
+/* Assure that there are at least n bits in the bit accumulator.  If there is
+   not enough available input to do that, then return from inflateBack() with
+   an error. */
+#define NEEDBITS(n) \
+    do { \
+        while (bits < (unsigned)(n)) \
+            PULLBYTE(); \
+    } while (0)
+
+/* Return the low n bits of the bit accumulator (n < 16) */
+#define BITS(n) \
+    ((unsigned)hold & ((1U << (n)) - 1))
+
+/* Remove n bits from the bit accumulator */
+#define DROPBITS(n) \
+    do { \
+        hold >>= (n); \
+        bits -= (unsigned)(n); \
+    } while (0)
+
+/* Remove zero to seven bits as needed to go to a byte boundary */
+#define BYTEBITS() \
+    do { \
+        hold >>= bits & 7; \
+        bits -= bits & 7; \
+    } while (0)
+
+/* Assure that some output space is available, by writing out the window
+   if it's full.  If the write fails, return from inflateBack() with a
+   Z_BUF_ERROR. */
+#define ROOM() \
+    do { \
+        if (left == 0) { \
+            put = state->window; \
+            left = state->wsize; \
+            state->whave = left; \
+            if (out(out_desc, put, left)) { \
+                ret = Z_BUF_ERROR; \
+                goto inf_leave; \
+            } \
+        } \
+    } while (0)
+
+/*
+   strm provides the memory allocation functions and window buffer on input,
+   and provides information on the unused input on return.  For Z_DATA_ERROR
+   returns, strm will also provide an error message.
+
+   in() and out() are the call-back input and output functions.  When
+   inflateBack() needs more input, it calls in().  When inflateBack() has
+   filled the window with output, or when it completes with data in the
+   window, it calls out() to write out the data.  The application must not
+   change the provided input until in() is called again or inflateBack()
+   returns.  The application must not change the window/output buffer until
+   inflateBack() returns.
+
+   in() and out() are called with a descriptor parameter provided in the
+   inflateBack() call.  This parameter can be a structure that provides the
+   information required to do the read or write, as well as accumulated
+   information on the input and output such as totals and check values.
+
+   in() should return zero on failure.  out() should return non-zero on
+   failure.  If either in() or out() fails, than inflateBack() returns a
+   Z_BUF_ERROR.  strm->next_in can be checked for Z_NULL to see whether it
+   was in() or out() that caused in the error.  Otherwise,  inflateBack()
+   returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format
+   error, or Z_MEM_ERROR if it could not allocate memory for the state.
+   inflateBack() can also return Z_STREAM_ERROR if the input parameters
+   are not correct, i.e. strm is Z_NULL or the state was not initialized.
+ */
+int ZEXPORT inflateBack(strm, in, in_desc, out, out_desc)
+z_streamp strm;
+in_func in;
+void FAR *in_desc;
+out_func out;
+void FAR *out_desc;
+{
+    struct inflate_state FAR *state;
+    unsigned char FAR *next;    /* next input */
+    unsigned char FAR *put;     /* next output */
+    unsigned have, left;        /* available input and output */
+    unsigned long hold;         /* bit buffer */
+    unsigned bits;              /* bits in bit buffer */
+    unsigned copy;              /* number of stored or match bytes to copy */
+    unsigned char FAR *from;    /* where to copy match bytes from */
+    code here;                  /* current decoding table entry */
+    code last;                  /* parent table entry */
+    unsigned len;               /* length to copy for repeats, bits to drop */
+    int ret;                    /* return code */
+    static const unsigned short order[19] = /* permutation of code lengths */
+        {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+
+    /* Check that the strm exists and that the state was initialized */
+    if (strm == Z_NULL || strm->state == Z_NULL)
+        return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+
+    /* Reset the state */
+    strm->msg = Z_NULL;
+    state->mode = TYPE;
+    state->last = 0;
+    state->whave = 0;
+    next = strm->next_in;
+    have = next != Z_NULL ? strm->avail_in : 0;
+    hold = 0;
+    bits = 0;
+    put = state->window;
+    left = state->wsize;
+
+    /* Inflate until end of block marked as last */
+    for (;;)
+        switch (state->mode) {
+        case TYPE:
+            /* determine and dispatch block type */
+            if (state->last) {
+                BYTEBITS();
+                state->mode = DONE;
+                break;
+            }
+            NEEDBITS(3);
+            state->last = BITS(1);
+            DROPBITS(1);
+            switch (BITS(2)) {
+            case 0:                             /* stored block */
+                Tracev((stderr, "inflate:     stored block%s\n",
+                        state->last ? " (last)" : ""));
+                state->mode = STORED;
+                break;
+            case 1:                             /* fixed block */
+                fixedtables(state);
+                Tracev((stderr, "inflate:     fixed codes block%s\n",
+                        state->last ? " (last)" : ""));
+                state->mode = LEN;              /* decode codes */
+                break;
+            case 2:                             /* dynamic block */
+                Tracev((stderr, "inflate:     dynamic codes block%s\n",
+                        state->last ? " (last)" : ""));
+                state->mode = TABLE;
+                break;
+            case 3:
+                strm->msg = (char *)"invalid block type";
+                state->mode = BAD;
+            }
+            DROPBITS(2);
+            break;
+
+        case STORED:
+            /* get and verify stored block length */
+            BYTEBITS();                         /* go to byte boundary */
+            NEEDBITS(32);
+            if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
+                strm->msg = (char *)"invalid stored block lengths";
+                state->mode = BAD;
+                break;
+            }
+            state->length = (unsigned)hold & 0xffff;
+            Tracev((stderr, "inflate:       stored length %u\n",
+                    state->length));
+            INITBITS();
+
+            /* copy stored block from input to output */
+            while (state->length != 0) {
+                copy = state->length;
+                PULL();
+                ROOM();
+                if (copy > have) copy = have;
+                if (copy > left) copy = left;
+                zmemcpy(put, next, copy);
+                have -= copy;
+                next += copy;
+                left -= copy;
+                put += copy;
+                state->length -= copy;
+            }
+            Tracev((stderr, "inflate:       stored end\n"));
+            state->mode = TYPE;
+            break;
+
+        case TABLE:
+            /* get dynamic table entries descriptor */
+            NEEDBITS(14);
+            state->nlen = BITS(5) + 257;
+            DROPBITS(5);
+            state->ndist = BITS(5) + 1;
+            DROPBITS(5);
+            state->ncode = BITS(4) + 4;
+            DROPBITS(4);
+#ifndef PKZIP_BUG_WORKAROUND
+            if (state->nlen > 286 || state->ndist > 30) {
+                strm->msg = (char *)"too many length or distance symbols";
+                state->mode = BAD;
+                break;
+            }
+#endif
+            Tracev((stderr, "inflate:       table sizes ok\n"));
+
+            /* get code length code lengths (not a typo) */
+            state->have = 0;
+            while (state->have < state->ncode) {
+                NEEDBITS(3);
+                state->lens[order[state->have++]] = (unsigned short)BITS(3);
+                DROPBITS(3);
+            }
+            while (state->have < 19)
+                state->lens[order[state->have++]] = 0;
+            state->next = state->codes;
+            state->lencode = (code const FAR *)(state->next);
+            state->lenbits = 7;
+            ret = inflate_table(CODES, state->lens, 19, &(state->next),
+                                &(state->lenbits), state->work);
+            if (ret) {
+                strm->msg = (char *)"invalid code lengths set";
+                state->mode = BAD;
+                break;
+            }
+            Tracev((stderr, "inflate:       code lengths ok\n"));
+
+            /* get length and distance code code lengths */
+            state->have = 0;
+            while (state->have < state->nlen + state->ndist) {
+                for (;;) {
+                    here = state->lencode[BITS(state->lenbits)];
+                    if ((unsigned)(here.bits) <= bits) break;
+                    PULLBYTE();
+                }
+                if (here.val < 16) {
+                    DROPBITS(here.bits);
+                    state->lens[state->have++] = here.val;
+                }
+                else {
+                    if (here.val == 16) {
+                        NEEDBITS(here.bits + 2);
+                        DROPBITS(here.bits);
+                        if (state->have == 0) {
+                            strm->msg = (char *)"invalid bit length repeat";
+                            state->mode = BAD;
+                            break;
+                        }
+                        len = (unsigned)(state->lens[state->have - 1]);
+                        copy = 3 + BITS(2);
+                        DROPBITS(2);
+                    }
+                    else if (here.val == 17) {
+                        NEEDBITS(here.bits + 3);
+                        DROPBITS(here.bits);
+                        len = 0;
+                        copy = 3 + BITS(3);
+                        DROPBITS(3);
+                    }
+                    else {
+                        NEEDBITS(here.bits + 7);
+                        DROPBITS(here.bits);
+                        len = 0;
+                        copy = 11 + BITS(7);
+                        DROPBITS(7);
+                    }
+                    if (state->have + copy > state->nlen + state->ndist) {
+                        strm->msg = (char *)"invalid bit length repeat";
+                        state->mode = BAD;
+                        break;
+                    }
+                    while (copy--)
+                        state->lens[state->have++] = (unsigned short)len;
+                }
+            }
+
+            /* handle error breaks in while */
+            if (state->mode == BAD) break;
+
+            /* check for end-of-block code (better have one) */
+            if (state->lens[256] == 0) {
+                strm->msg = (char *)"invalid code -- missing end-of-block";
+                state->mode = BAD;
+                break;
+            }
+
+            /* build code tables -- note: do not change the lenbits or distbits
+               values here (9 and 6) without reading the comments in inftrees.h
+               concerning the ENOUGH constants, which depend on those values */
+            state->next = state->codes;
+            state->lencode = (code const FAR *)(state->next);
+            state->lenbits = 9;
+            ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
+                                &(state->lenbits), state->work);
+            if (ret) {
+                strm->msg = (char *)"invalid literal/lengths set";
+                state->mode = BAD;
+                break;
+            }
+            state->distcode = (code const FAR *)(state->next);
+            state->distbits = 6;
+            ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
+                            &(state->next), &(state->distbits), state->work);
+            if (ret) {
+                strm->msg = (char *)"invalid distances set";
+                state->mode = BAD;
+                break;
+            }
+            Tracev((stderr, "inflate:       codes ok\n"));
+            state->mode = LEN;
+
+        case LEN:
+            /* use inflate_fast() if we have enough input and output */
+            if (have >= 6 && left >= 258) {
+                RESTORE();
+                if (state->whave < state->wsize)
+                    state->whave = state->wsize - left;
+                inflate_fast(strm, state->wsize);
+                LOAD();
+                break;
+            }
+
+            /* get a literal, length, or end-of-block code */
+            for (;;) {
+                here = state->lencode[BITS(state->lenbits)];
+                if ((unsigned)(here.bits) <= bits) break;
+                PULLBYTE();
+            }
+            if (here.op && (here.op & 0xf0) == 0) {
+                last = here;
+                for (;;) {
+                    here = state->lencode[last.val +
+                            (BITS(last.bits + last.op) >> last.bits)];
+                    if ((unsigned)(last.bits + here.bits) <= bits) break;
+                    PULLBYTE();
+                }
+                DROPBITS(last.bits);
+            }
+            DROPBITS(here.bits);
+            state->length = (unsigned)here.val;
+
+            /* process literal */
+            if (here.op == 0) {
+                Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+                        "inflate:         literal '%c'\n" :
+                        "inflate:         literal 0x%02x\n", here.val));
+                ROOM();
+                *put++ = (unsigned char)(state->length);
+                left--;
+                state->mode = LEN;
+                break;
+            }
+
+            /* process end of block */
+            if (here.op & 32) {
+                Tracevv((stderr, "inflate:         end of block\n"));
+                state->mode = TYPE;
+                break;
+            }
+
+            /* invalid code */
+            if (here.op & 64) {
+                strm->msg = (char *)"invalid literal/length code";
+                state->mode = BAD;
+                break;
+            }
+
+            /* length code -- get extra bits, if any */
+            state->extra = (unsigned)(here.op) & 15;
+            if (state->extra != 0) {
+                NEEDBITS(state->extra);
+                state->length += BITS(state->extra);
+                DROPBITS(state->extra);
+            }
+            Tracevv((stderr, "inflate:         length %u\n", state->length));
+
+            /* get distance code */
+            for (;;) {
+                here = state->distcode[BITS(state->distbits)];
+                if ((unsigned)(here.bits) <= bits) break;
+                PULLBYTE();
+            }
+            if ((here.op & 0xf0) == 0) {
+                last = here;
+                for (;;) {
+                    here = state->distcode[last.val +
+                            (BITS(last.bits + last.op) >> last.bits)];
+                    if ((unsigned)(last.bits + here.bits) <= bits) break;
+                    PULLBYTE();
+                }
+                DROPBITS(last.bits);
+            }
+            DROPBITS(here.bits);
+            if (here.op & 64) {
+                strm->msg = (char *)"invalid distance code";
+                state->mode = BAD;
+                break;
+            }
+            state->offset = (unsigned)here.val;
+
+            /* get distance extra bits, if any */
+            state->extra = (unsigned)(here.op) & 15;
+            if (state->extra != 0) {
+                NEEDBITS(state->extra);
+                state->offset += BITS(state->extra);
+                DROPBITS(state->extra);
+            }
+            if (state->offset > state->wsize - (state->whave < state->wsize ?
+                                                left : 0)) {
+                strm->msg = (char *)"invalid distance too far back";
+                state->mode = BAD;
+                break;
+            }
+            Tracevv((stderr, "inflate:         distance %u\n", state->offset));
+
+            /* copy match from window to output */
+            do {
+                ROOM();
+                copy = state->wsize - state->offset;
+                if (copy < left) {
+                    from = put + copy;
+                    copy = left - copy;
+                }
+                else {
+                    from = put - state->offset;
+                    copy = left;
+                }
+                if (copy > state->length) copy = state->length;
+                state->length -= copy;
+                left -= copy;
+                do {
+                    *put++ = *from++;
+                } while (--copy);
+            } while (state->length != 0);
+            break;
+
+        case DONE:
+            /* inflate stream terminated properly -- write leftover output */
+            ret = Z_STREAM_END;
+            if (left < state->wsize) {
+                if (out(out_desc, state->window, state->wsize - left))
+                    ret = Z_BUF_ERROR;
+            }
+            goto inf_leave;
+
+        case BAD:
+            ret = Z_DATA_ERROR;
+            goto inf_leave;
+
+        default:                /* can't happen, but makes compilers happy */
+            ret = Z_STREAM_ERROR;
+            goto inf_leave;
+        }
+
+    /* Return unused input */
+  inf_leave:
+    strm->next_in = next;
+    strm->avail_in = have;
+    return ret;
+}
+
+int ZEXPORT inflateBackEnd(strm)
+z_streamp strm;
+{
+    if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
+        return Z_STREAM_ERROR;
+    ZFREE(strm, strm->state);
+    strm->state = Z_NULL;
+    Tracev((stderr, "inflate: end\n"));
+    return Z_OK;
+}
diff --git a/libs/ext/zlib/inffast.c b/libs/ext/zlib/inffast.c
new file mode 100644
index 0000000..2f1d60b
--- /dev/null
+++ b/libs/ext/zlib/inffast.c
@@ -0,0 +1,340 @@
+/* inffast.c -- fast decoding
+ * Copyright (C) 1995-2008, 2010 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+#ifndef ASMINF
+
+/* Allow machine dependent optimization for post-increment or pre-increment.
+   Based on testing to date,
+   Pre-increment preferred for:
+   - PowerPC G3 (Adler)
+   - MIPS R5000 (Randers-Pehrson)
+   Post-increment preferred for:
+   - none
+   No measurable difference:
+   - Pentium III (Anderson)
+   - M68060 (Nikl)
+ */
+#ifdef POSTINC
+#  define OFF 0
+#  define PUP(a) *(a)++
+#else
+#  define OFF 1
+#  define PUP(a) *++(a)
+#endif
+
+/*
+   Decode literal, length, and distance codes and write out the resulting
+   literal and match bytes until either not enough input or output is
+   available, an end-of-block is encountered, or a data error is encountered.
+   When large enough input and output buffers are supplied to inflate(), for
+   example, a 16K input buffer and a 64K output buffer, more than 95% of the
+   inflate execution time is spent in this routine.
+
+   Entry assumptions:
+
+        state->mode == LEN
+        strm->avail_in >= 6
+        strm->avail_out >= 258
+        start >= strm->avail_out
+        state->bits < 8
+
+   On return, state->mode is one of:
+
+        LEN -- ran out of enough output space or enough available input
+        TYPE -- reached end of block code, inflate() to interpret next block
+        BAD -- error in block data
+
+   Notes:
+
+    - The maximum input bits used by a length/distance pair is 15 bits for the
+      length code, 5 bits for the length extra, 15 bits for the distance code,
+      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.
+      Therefore if strm->avail_in >= 6, then there is enough input to avoid
+      checking for available input while decoding.
+
+    - The maximum bytes that a single length/distance pair can output is 258
+      bytes, which is the maximum length that can be coded.  inflate_fast()
+      requires strm->avail_out >= 258 for each loop to avoid checking for
+      output space.
+ */
+void ZLIB_INTERNAL inflate_fast(strm, start)
+z_streamp strm;
+unsigned start;         /* inflate()'s starting value for strm->avail_out */
+{
+    struct inflate_state FAR *state;
+    unsigned char FAR *in;      /* local strm->next_in */
+    unsigned char FAR *last;    /* while in < last, enough input available */
+    unsigned char FAR *out;     /* local strm->next_out */
+    unsigned char FAR *beg;     /* inflate()'s initial strm->next_out */
+    unsigned char FAR *end;     /* while out < end, enough space available */
+#ifdef INFLATE_STRICT
+    unsigned dmax;              /* maximum distance from zlib header */
+#endif
+    unsigned wsize;             /* window size or zero if not using window */
+    unsigned whave;             /* valid bytes in the window */
+    unsigned wnext;             /* window write index */
+    unsigned char FAR *window;  /* allocated sliding window, if wsize != 0 */
+    unsigned long hold;         /* local strm->hold */
+    unsigned bits;              /* local strm->bits */
+    code const FAR *lcode;      /* local strm->lencode */
+    code const FAR *dcode;      /* local strm->distcode */
+    unsigned lmask;             /* mask for first level of length codes */
+    unsigned dmask;             /* mask for first level of distance codes */
+    code here;                  /* retrieved table entry */
+    unsigned op;                /* code bits, operation, extra bits, or */
+                                /*  window position, window bytes to copy */
+    unsigned len;               /* match length, unused bytes */
+    unsigned dist;              /* match distance */
+    unsigned char FAR *from;    /* where to copy match from */
+
+    /* copy state to local variables */
+    state = (struct inflate_state FAR *)strm->state;
+    in = strm->next_in - OFF;
+    last = in + (strm->avail_in - 5);
+    out = strm->next_out - OFF;
+    beg = out - (start - strm->avail_out);
+    end = out + (strm->avail_out - 257);
+#ifdef INFLATE_STRICT
+    dmax = state->dmax;
+#endif
+    wsize = state->wsize;
+    whave = state->whave;
+    wnext = state->wnext;
+    window = state->window;
+    hold = state->hold;
+    bits = state->bits;
+    lcode = state->lencode;
+    dcode = state->distcode;
+    lmask = (1U << state->lenbits) - 1;
+    dmask = (1U << state->distbits) - 1;
+
+    /* decode literals and length/distances until end-of-block or not enough
+       input data or output space */
+    do {
+        if (bits < 15) {
+            hold += (unsigned long)(PUP(in)) << bits;
+            bits += 8;
+            hold += (unsigned long)(PUP(in)) << bits;
+            bits += 8;
+        }
+        here = lcode[hold & lmask];
+      dolen:
+        op = (unsigned)(here.bits);
+        hold >>= op;
+        bits -= op;
+        op = (unsigned)(here.op);
+        if (op == 0) {                          /* literal */
+            Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+                    "inflate:         literal '%c'\n" :
+                    "inflate:         literal 0x%02x\n", here.val));
+            PUP(out) = (unsigned char)(here.val);
+        }
+        else if (op & 16) {                     /* length base */
+            len = (unsigned)(here.val);
+            op &= 15;                           /* number of extra bits */
+            if (op) {
+                if (bits < op) {
+                    hold += (unsigned long)(PUP(in)) << bits;
+                    bits += 8;
+                }
+                len += (unsigned)hold & ((1U << op) - 1);
+                hold >>= op;
+                bits -= op;
+            }
+            Tracevv((stderr, "inflate:         length %u\n", len));
+            if (bits < 15) {
+                hold += (unsigned long)(PUP(in)) << bits;
+                bits += 8;
+                hold += (unsigned long)(PUP(in)) << bits;
+                bits += 8;
+            }
+            here = dcode[hold & dmask];
+          dodist:
+            op = (unsigned)(here.bits);
+            hold >>= op;
+            bits -= op;
+            op = (unsigned)(here.op);
+            if (op & 16) {                      /* distance base */
+                dist = (unsigned)(here.val);
+                op &= 15;                       /* number of extra bits */
+                if (bits < op) {
+                    hold += (unsigned long)(PUP(in)) << bits;
+                    bits += 8;
+                    if (bits < op) {
+                        hold += (unsigned long)(PUP(in)) << bits;
+                        bits += 8;
+                    }
+                }
+                dist += (unsigned)hold & ((1U << op) - 1);
+#ifdef INFLATE_STRICT
+                if (dist > dmax) {
+                    strm->msg = (char *)"invalid distance too far back";
+                    state->mode = BAD;
+                    break;
+                }
+#endif
+                hold >>= op;
+                bits -= op;
+                Tracevv((stderr, "inflate:         distance %u\n", dist));
+                op = (unsigned)(out - beg);     /* max distance in output */
+                if (dist > op) {                /* see if copy from window */
+                    op = dist - op;             /* distance back in window */
+                    if (op > whave) {
+                        if (state->sane) {
+                            strm->msg =
+                                (char *)"invalid distance too far back";
+                            state->mode = BAD;
+                            break;
+                        }
+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+                        if (len <= op - whave) {
+                            do {
+                                PUP(out) = 0;
+                            } while (--len);
+                            continue;
+                        }
+                        len -= op - whave;
+                        do {
+                            PUP(out) = 0;
+                        } while (--op > whave);
+                        if (op == 0) {
+                            from = out - dist;
+                            do {
+                                PUP(out) = PUP(from);
+                            } while (--len);
+                            continue;
+                        }
+#endif
+                    }
+                    from = window - OFF;
+                    if (wnext == 0) {           /* very common case */
+                        from += wsize - op;
+                        if (op < len) {         /* some from window */
+                            len -= op;
+                            do {
+                                PUP(out) = PUP(from);
+                            } while (--op);
+                            from = out - dist;  /* rest from output */
+                        }
+                    }
+                    else if (wnext < op) {      /* wrap around window */
+                        from += wsize + wnext - op;
+                        op -= wnext;
+                        if (op < len) {         /* some from end of window */
+                            len -= op;
+                            do {
+                                PUP(out) = PUP(from);
+                            } while (--op);
+                            from = window - OFF;
+                            if (wnext < len) {  /* some from start of window */
+                                op = wnext;
+                                len -= op;
+                                do {
+                                    PUP(out) = PUP(from);
+                                } while (--op);
+                                from = out - dist;      /* rest from output */
+                            }
+                        }
+                    }
+                    else {                      /* contiguous in window */
+                        from += wnext - op;
+                        if (op < len) {         /* some from window */
+                            len -= op;
+                            do {
+                                PUP(out) = PUP(from);
+                            } while (--op);
+                            from = out - dist;  /* rest from output */
+                        }
+                    }
+                    while (len > 2) {
+                        PUP(out) = PUP(from);
+                        PUP(out) = PUP(from);
+                        PUP(out) = PUP(from);
+                        len -= 3;
+                    }
+                    if (len) {
+                        PUP(out) = PUP(from);
+                        if (len > 1)
+                            PUP(out) = PUP(from);
+                    }
+                }
+                else {
+                    from = out - dist;          /* copy direct from output */
+                    do {                        /* minimum length is three */
+                        PUP(out) = PUP(from);
+                        PUP(out) = PUP(from);
+                        PUP(out) = PUP(from);
+                        len -= 3;
+                    } while (len > 2);
+                    if (len) {
+                        PUP(out) = PUP(from);
+                        if (len > 1)
+                            PUP(out) = PUP(from);
+                    }
+                }
+            }
+            else if ((op & 64) == 0) {          /* 2nd level distance code */
+                here = dcode[here.val + (hold & ((1U << op) - 1))];
+                goto dodist;
+            }
+            else {
+                strm->msg = (char *)"invalid distance code";
+                state->mode = BAD;
+                break;
+            }
+        }
+        else if ((op & 64) == 0) {              /* 2nd level length code */
+            here = lcode[here.val + (hold & ((1U << op) - 1))];
+            goto dolen;
+        }
+        else if (op & 32) {                     /* end-of-block */
+            Tracevv((stderr, "inflate:         end of block\n"));
+            state->mode = TYPE;
+            break;
+        }
+        else {
+            strm->msg = (char *)"invalid literal/length code";
+            state->mode = BAD;
+            break;
+        }
+    } while (in < last && out < end);
+
+    /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
+    len = bits >> 3;
+    in -= len;
+    bits -= len << 3;
+    hold &= (1U << bits) - 1;
+
+    /* update state and return */
+    strm->next_in = in + OFF;
+    strm->next_out = out + OFF;
+    strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));
+    strm->avail_out = (unsigned)(out < end ?
+                                 257 + (end - out) : 257 - (out - end));
+    state->hold = hold;
+    state->bits = bits;
+    return;
+}
+
+/*
+   inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe):
+   - Using bit fields for code structure
+   - Different op definition to avoid & for extra bits (do & for table bits)
+   - Three separate decoding do-loops for direct, window, and wnext == 0
+   - Special case for distance > 1 copies to do overlapped load and store copy
+   - Explicit branch predictions (based on measured branch probabilities)
+   - Deferring match copy and interspersed it with decoding subsequent codes
+   - Swapping literal/length else
+   - Swapping window/direct else
+   - Larger unrolled copy loops (three is about right)
+   - Moving len -= 3 statement into middle of loop
+ */
+
+#endif /* !ASMINF */
diff --git a/libs/ext/zlib/inffast.h b/libs/ext/zlib/inffast.h
new file mode 100644
index 0000000..e5c1aa4
--- /dev/null
+++ b/libs/ext/zlib/inffast.h
@@ -0,0 +1,11 @@
+/* inffast.h -- header to use inffast.c
+ * Copyright (C) 1995-2003, 2010 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+   part of the implementation of the compression library and is
+   subject to change. Applications should only use zlib.h.
+ */
+
+void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start));
diff --git a/libs/ext/zlib/inffixed.h b/libs/ext/zlib/inffixed.h
new file mode 100644
index 0000000..d628327
--- /dev/null
+++ b/libs/ext/zlib/inffixed.h
@@ -0,0 +1,94 @@
+    /* inffixed.h -- table for decoding fixed codes
+     * Generated automatically by makefixed().
+     */
+
+    /* WARNING: this file should *not* be used by applications.
+       It is part of the implementation of this library and is
+       subject to change. Applications should only use zlib.h.
+     */
+
+    static const code lenfix[512] = {
+        {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48},
+        {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128},
+        {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59},
+        {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176},
+        {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20},
+        {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100},
+        {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8},
+        {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216},
+        {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76},
+        {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114},
+        {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},
+        {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148},
+        {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42},
+        {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86},
+        {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15},
+        {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236},
+        {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62},
+        {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142},
+        {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31},
+        {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162},
+        {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25},
+        {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105},
+        {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4},
+        {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202},
+        {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69},
+        {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125},
+        {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13},
+        {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195},
+        {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35},
+        {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91},
+        {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19},
+        {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246},
+        {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55},
+        {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135},
+        {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99},
+        {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190},
+        {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16},
+        {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96},
+        {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6},
+        {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209},
+        {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},
+        {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116},
+        {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4},
+        {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153},
+        {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44},
+        {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82},
+        {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11},
+        {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229},
+        {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58},
+        {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138},
+        {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51},
+        {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173},
+        {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30},
+        {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110},
+        {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0},
+        {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195},
+        {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65},
+        {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121},
+        {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},
+        {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258},
+        {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37},
+        {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93},
+        {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23},
+        {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251},
+        {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51},
+        {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131},
+        {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67},
+        {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183},
+        {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23},
+        {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103},
+        {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9},
+        {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223},
+        {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79},
+        {0,9,255}
+    };
+
+    static const code distfix[32] = {
+        {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025},
+        {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193},
+        {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385},
+        {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577},
+        {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073},
+        {22,5,193},{64,5,0}
+    };
diff --git a/libs/ext/zlib/inflate.c b/libs/ext/zlib/inflate.c
new file mode 100644
index 0000000..47418a1
--- /dev/null
+++ b/libs/ext/zlib/inflate.c
@@ -0,0 +1,1496 @@
+/* inflate.c -- zlib decompression
+ * Copyright (C) 1995-2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/*
+ * Change history:
+ *
+ * 1.2.beta0    24 Nov 2002
+ * - First version -- complete rewrite of inflate to simplify code, avoid
+ *   creation of window when not needed, minimize use of window when it is
+ *   needed, make inffast.c even faster, implement gzip decoding, and to
+ *   improve code readability and style over the previous zlib inflate code
+ *
+ * 1.2.beta1    25 Nov 2002
+ * - Use pointers for available input and output checking in inffast.c
+ * - Remove input and output counters in inffast.c
+ * - Change inffast.c entry and loop from avail_in >= 7 to >= 6
+ * - Remove unnecessary second byte pull from length extra in inffast.c
+ * - Unroll direct copy to three copies per loop in inffast.c
+ *
+ * 1.2.beta2    4 Dec 2002
+ * - Change external routine names to reduce potential conflicts
+ * - Correct filename to inffixed.h for fixed tables in inflate.c
+ * - Make hbuf[] unsigned char to match parameter type in inflate.c
+ * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset)
+ *   to avoid negation problem on Alphas (64 bit) in inflate.c
+ *
+ * 1.2.beta3    22 Dec 2002
+ * - Add comments on state->bits assertion in inffast.c
+ * - Add comments on op field in inftrees.h
+ * - Fix bug in reuse of allocated window after inflateReset()
+ * - Remove bit fields--back to byte structure for speed
+ * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths
+ * - Change post-increments to pre-increments in inflate_fast(), PPC biased?
+ * - Add compile time option, POSTINC, to use post-increments instead (Intel?)
+ * - Make MATCH copy in inflate() much faster for when inflate_fast() not used
+ * - Use local copies of stream next and avail values, as well as local bit
+ *   buffer and bit count in inflate()--for speed when inflate_fast() not used
+ *
+ * 1.2.beta4    1 Jan 2003
+ * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings
+ * - Move a comment on output buffer sizes from inffast.c to inflate.c
+ * - Add comments in inffast.c to introduce the inflate_fast() routine
+ * - Rearrange window copies in inflate_fast() for speed and simplification
+ * - Unroll last copy for window match in inflate_fast()
+ * - Use local copies of window variables in inflate_fast() for speed
+ * - Pull out common wnext == 0 case for speed in inflate_fast()
+ * - Make op and len in inflate_fast() unsigned for consistency
+ * - Add FAR to lcode and dcode declarations in inflate_fast()
+ * - Simplified bad distance check in inflate_fast()
+ * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new
+ *   source file infback.c to provide a call-back interface to inflate for
+ *   programs like gzip and unzip -- uses window as output buffer to avoid
+ *   window copying
+ *
+ * 1.2.beta5    1 Jan 2003
+ * - Improved inflateBack() interface to allow the caller to provide initial
+ *   input in strm.
+ * - Fixed stored blocks bug in inflateBack()
+ *
+ * 1.2.beta6    4 Jan 2003
+ * - Added comments in inffast.c on effectiveness of POSTINC
+ * - Typecasting all around to reduce compiler warnings
+ * - Changed loops from while (1) or do {} while (1) to for (;;), again to
+ *   make compilers happy
+ * - Changed type of window in inflateBackInit() to unsigned char *
+ *
+ * 1.2.beta7    27 Jan 2003
+ * - Changed many types to unsigned or unsigned short to avoid warnings
+ * - Added inflateCopy() function
+ *
+ * 1.2.0        9 Mar 2003
+ * - Changed inflateBack() interface to provide separate opaque descriptors
+ *   for the in() and out() functions
+ * - Changed inflateBack() argument and in_func typedef to swap the length
+ *   and buffer address return values for the input function
+ * - Check next_in and next_out for Z_NULL on entry to inflate()
+ *
+ * The history for versions after 1.2.0 are in ChangeLog in zlib distribution.
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+#ifdef MAKEFIXED
+#  ifndef BUILDFIXED
+#    define BUILDFIXED
+#  endif
+#endif
+
+/* function prototypes */
+local void fixedtables OF((struct inflate_state FAR *state));
+local int updatewindow OF((z_streamp strm, unsigned out));
+#ifdef BUILDFIXED
+   void makefixed OF((void));
+#endif
+local unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf,
+                              unsigned len));
+
+int ZEXPORT inflateResetKeep(strm)
+z_streamp strm;
+{
+    struct inflate_state FAR *state;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    strm->total_in = strm->total_out = state->total = 0;
+    strm->msg = Z_NULL;
+    if (state->wrap)        /* to support ill-conceived Java test suite */
+        strm->adler = state->wrap & 1;
+    state->mode = HEAD;
+    state->last = 0;
+    state->havedict = 0;
+    state->dmax = 32768U;
+    state->head = Z_NULL;
+    state->hold = 0;
+    state->bits = 0;
+    state->lencode = state->distcode = state->next = state->codes;
+    state->sane = 1;
+    state->back = -1;
+    Tracev((stderr, "inflate: reset\n"));
+    return Z_OK;
+}
+
+int ZEXPORT inflateReset(strm)
+z_streamp strm;
+{
+    struct inflate_state FAR *state;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    state->wsize = 0;
+    state->whave = 0;
+    state->wnext = 0;
+    return inflateResetKeep(strm);
+}
+
+int ZEXPORT inflateReset2(strm, windowBits)
+z_streamp strm;
+int windowBits;
+{
+    int wrap;
+    struct inflate_state FAR *state;
+
+    /* get the state */
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+
+    /* extract wrap request from windowBits parameter */
+    if (windowBits < 0) {
+        wrap = 0;
+        windowBits = -windowBits;
+    }
+    else {
+        wrap = (windowBits >> 4) + 1;
+#ifdef GUNZIP
+        if (windowBits < 48)
+            windowBits &= 15;
+#endif
+    }
+
+    /* set number of window bits, free window if different */
+    if (windowBits && (windowBits < 8 || windowBits > 15))
+        return Z_STREAM_ERROR;
+    if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) {
+        ZFREE(strm, state->window);
+        state->window = Z_NULL;
+    }
+
+    /* update state and reset the rest of it */
+    state->wrap = wrap;
+    state->wbits = (unsigned)windowBits;
+    return inflateReset(strm);
+}
+
+int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size)
+z_streamp strm;
+int windowBits;
+const char *version;
+int stream_size;
+{
+    int ret;
+    struct inflate_state FAR *state;
+
+    if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
+        stream_size != (int)(sizeof(z_stream)))
+        return Z_VERSION_ERROR;
+    if (strm == Z_NULL) return Z_STREAM_ERROR;
+    strm->msg = Z_NULL;                 /* in case we return an error */
+    if (strm->zalloc == (alloc_func)0) {
+#ifdef Z_SOLO
+        return Z_STREAM_ERROR;
+#else
+        strm->zalloc = zcalloc;
+        strm->opaque = (voidpf)0;
+#endif
+    }
+    if (strm->zfree == (free_func)0)
+#ifdef Z_SOLO
+        return Z_STREAM_ERROR;
+#else
+        strm->zfree = zcfree;
+#endif
+    state = (struct inflate_state FAR *)
+            ZALLOC(strm, 1, sizeof(struct inflate_state));
+    if (state == Z_NULL) return Z_MEM_ERROR;
+    Tracev((stderr, "inflate: allocated\n"));
+    strm->state = (struct internal_state FAR *)state;
+    state->window = Z_NULL;
+    ret = inflateReset2(strm, windowBits);
+    if (ret != Z_OK) {
+        ZFREE(strm, state);
+        strm->state = Z_NULL;
+    }
+    return ret;
+}
+
+int ZEXPORT inflateInit_(strm, version, stream_size)
+z_streamp strm;
+const char *version;
+int stream_size;
+{
+    return inflateInit2_(strm, DEF_WBITS, version, stream_size);
+}
+
+int ZEXPORT inflatePrime(strm, bits, value)
+z_streamp strm;
+int bits;
+int value;
+{
+    struct inflate_state FAR *state;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    if (bits < 0) {
+        state->hold = 0;
+        state->bits = 0;
+        return Z_OK;
+    }
+    if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR;
+    value &= (1L << bits) - 1;
+    state->hold += value << state->bits;
+    state->bits += bits;
+    return Z_OK;
+}
+
+/*
+   Return state with length and distance decoding tables and index sizes set to
+   fixed code decoding.  Normally this returns fixed tables from inffixed.h.
+   If BUILDFIXED is defined, then instead this routine builds the tables the
+   first time it's called, and returns those tables the first time and
+   thereafter.  This reduces the size of the code by about 2K bytes, in
+   exchange for a little execution time.  However, BUILDFIXED should not be
+   used for threaded applications, since the rewriting of the tables and virgin
+   may not be thread-safe.
+ */
+local void fixedtables(state)
+struct inflate_state FAR *state;
+{
+#ifdef BUILDFIXED
+    static int virgin = 1;
+    static code *lenfix, *distfix;
+    static code fixed[544];
+
+    /* build fixed huffman tables if first call (may not be thread safe) */
+    if (virgin) {
+        unsigned sym, bits;
+        static code *next;
+
+        /* literal/length table */
+        sym = 0;
+        while (sym < 144) state->lens[sym++] = 8;
+        while (sym < 256) state->lens[sym++] = 9;
+        while (sym < 280) state->lens[sym++] = 7;
+        while (sym < 288) state->lens[sym++] = 8;
+        next = fixed;
+        lenfix = next;
+        bits = 9;
+        inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
+
+        /* distance table */
+        sym = 0;
+        while (sym < 32) state->lens[sym++] = 5;
+        distfix = next;
+        bits = 5;
+        inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
+
+        /* do this just once */
+        virgin = 0;
+    }
+#else /* !BUILDFIXED */
+#   include "inffixed.h"
+#endif /* BUILDFIXED */
+    state->lencode = lenfix;
+    state->lenbits = 9;
+    state->distcode = distfix;
+    state->distbits = 5;
+}
+
+#ifdef MAKEFIXED
+#include <stdio.h>
+
+/*
+   Write out the inffixed.h that is #include'd above.  Defining MAKEFIXED also
+   defines BUILDFIXED, so the tables are built on the fly.  makefixed() writes
+   those tables to stdout, which would be piped to inffixed.h.  A small program
+   can simply call makefixed to do this:
+
+    void makefixed(void);
+
+    int main(void)
+    {
+        makefixed();
+        return 0;
+    }
+
+   Then that can be linked with zlib built with MAKEFIXED defined and run:
+
+    a.out > inffixed.h
+ */
+void makefixed()
+{
+    unsigned low, size;
+    struct inflate_state state;
+
+    fixedtables(&state);
+    puts("    /* inffixed.h -- table for decoding fixed codes");
+    puts("     * Generated automatically by makefixed().");
+    puts("     */");
+    puts("");
+    puts("    /* WARNING: this file should *not* be used by applications.");
+    puts("       It is part of the implementation of this library and is");
+    puts("       subject to change. Applications should only use zlib.h.");
+    puts("     */");
+    puts("");
+    size = 1U << 9;
+    printf("    static const code lenfix[%u] = {", size);
+    low = 0;
+    for (;;) {
+        if ((low % 7) == 0) printf("\n        ");
+        printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op,
+               state.lencode[low].bits, state.lencode[low].val);
+        if (++low == size) break;
+        putchar(',');
+    }
+    puts("\n    };");
+    size = 1U << 5;
+    printf("\n    static const code distfix[%u] = {", size);
+    low = 0;
+    for (;;) {
+        if ((low % 6) == 0) printf("\n        ");
+        printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits,
+               state.distcode[low].val);
+        if (++low == size) break;
+        putchar(',');
+    }
+    puts("\n    };");
+}
+#endif /* MAKEFIXED */
+
+/*
+   Update the window with the last wsize (normally 32K) bytes written before
+   returning.  If window does not exist yet, create it.  This is only called
+   when a window is already in use, or when output has been written during this
+   inflate call, but the end of the deflate stream has not been reached yet.
+   It is also called to create a window for dictionary data when a dictionary
+   is loaded.
+
+   Providing output buffers larger than 32K to inflate() should provide a speed
+   advantage, since only the last 32K of output is copied to the sliding window
+   upon return from inflate(), and since all distances after the first 32K of
+   output will fall in the output data, making match copies simpler and faster.
+   The advantage may be dependent on the size of the processor's data caches.
+ */
+local int updatewindow(strm, out)
+z_streamp strm;
+unsigned out;
+{
+    struct inflate_state FAR *state;
+    unsigned copy, dist;
+
+    state = (struct inflate_state FAR *)strm->state;
+
+    /* if it hasn't been done already, allocate space for the window */
+    if (state->window == Z_NULL) {
+        state->window = (unsigned char FAR *)
+                        ZALLOC(strm, 1U << state->wbits,
+                               sizeof(unsigned char));
+        if (state->window == Z_NULL) return 1;
+    }
+
+    /* if window not in use yet, initialize */
+    if (state->wsize == 0) {
+        state->wsize = 1U << state->wbits;
+        state->wnext = 0;
+        state->whave = 0;
+    }
+
+    /* copy state->wsize or less output bytes into the circular window */
+    copy = out - strm->avail_out;
+    if (copy >= state->wsize) {
+        zmemcpy(state->window, strm->next_out - state->wsize, state->wsize);
+        state->wnext = 0;
+        state->whave = state->wsize;
+    }
+    else {
+        dist = state->wsize - state->wnext;
+        if (dist > copy) dist = copy;
+        zmemcpy(state->window + state->wnext, strm->next_out - copy, dist);
+        copy -= dist;
+        if (copy) {
+            zmemcpy(state->window, strm->next_out - copy, copy);
+            state->wnext = copy;
+            state->whave = state->wsize;
+        }
+        else {
+            state->wnext += dist;
+            if (state->wnext == state->wsize) state->wnext = 0;
+            if (state->whave < state->wsize) state->whave += dist;
+        }
+    }
+    return 0;
+}
+
+/* Macros for inflate(): */
+
+/* check function to use adler32() for zlib or crc32() for gzip */
+#ifdef GUNZIP
+#  define UPDATE(check, buf, len) \
+    (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
+#else
+#  define UPDATE(check, buf, len) adler32(check, buf, len)
+#endif
+
+/* check macros for header crc */
+#ifdef GUNZIP
+#  define CRC2(check, word) \
+    do { \
+        hbuf[0] = (unsigned char)(word); \
+        hbuf[1] = (unsigned char)((word) >> 8); \
+        check = crc32(check, hbuf, 2); \
+    } while (0)
+
+#  define CRC4(check, word) \
+    do { \
+        hbuf[0] = (unsigned char)(word); \
+        hbuf[1] = (unsigned char)((word) >> 8); \
+        hbuf[2] = (unsigned char)((word) >> 16); \
+        hbuf[3] = (unsigned char)((word) >> 24); \
+        check = crc32(check, hbuf, 4); \
+    } while (0)
+#endif
+
+/* Load registers with state in inflate() for speed */
+#define LOAD() \
+    do { \
+        put = strm->next_out; \
+        left = strm->avail_out; \
+        next = strm->next_in; \
+        have = strm->avail_in; \
+        hold = state->hold; \
+        bits = state->bits; \
+    } while (0)
+
+/* Restore state from registers in inflate() */
+#define RESTORE() \
+    do { \
+        strm->next_out = put; \
+        strm->avail_out = left; \
+        strm->next_in = next; \
+        strm->avail_in = have; \
+        state->hold = hold; \
+        state->bits = bits; \
+    } while (0)
+
+/* Clear the input bit accumulator */
+#define INITBITS() \
+    do { \
+        hold = 0; \
+        bits = 0; \
+    } while (0)
+
+/* Get a byte of input into the bit accumulator, or return from inflate()
+   if there is no input available. */
+#define PULLBYTE() \
+    do { \
+        if (have == 0) goto inf_leave; \
+        have--; \
+        hold += (unsigned long)(*next++) << bits; \
+        bits += 8; \
+    } while (0)
+
+/* Assure that there are at least n bits in the bit accumulator.  If there is
+   not enough available input to do that, then return from inflate(). */
+#define NEEDBITS(n) \
+    do { \
+        while (bits < (unsigned)(n)) \
+            PULLBYTE(); \
+    } while (0)
+
+/* Return the low n bits of the bit accumulator (n < 16) */
+#define BITS(n) \
+    ((unsigned)hold & ((1U << (n)) - 1))
+
+/* Remove n bits from the bit accumulator */
+#define DROPBITS(n) \
+    do { \
+        hold >>= (n); \
+        bits -= (unsigned)(n); \
+    } while (0)
+
+/* Remove zero to seven bits as needed to go to a byte boundary */
+#define BYTEBITS() \
+    do { \
+        hold >>= bits & 7; \
+        bits -= bits & 7; \
+    } while (0)
+
+/*
+   inflate() uses a state machine to process as much input data and generate as
+   much output data as possible before returning.  The state machine is
+   structured roughly as follows:
+
+    for (;;) switch (state) {
+    ...
+    case STATEn:
+        if (not enough input data or output space to make progress)
+            return;
+        ... make progress ...
+        state = STATEm;
+        break;
+    ...
+    }
+
+   so when inflate() is called again, the same case is attempted again, and
+   if the appropriate resources are provided, the machine proceeds to the
+   next state.  The NEEDBITS() macro is usually the way the state evaluates
+   whether it can proceed or should return.  NEEDBITS() does the return if
+   the requested bits are not available.  The typical use of the BITS macros
+   is:
+
+        NEEDBITS(n);
+        ... do something with BITS(n) ...
+        DROPBITS(n);
+
+   where NEEDBITS(n) either returns from inflate() if there isn't enough
+   input left to load n bits into the accumulator, or it continues.  BITS(n)
+   gives the low n bits in the accumulator.  When done, DROPBITS(n) drops
+   the low n bits off the accumulator.  INITBITS() clears the accumulator
+   and sets the number of available bits to zero.  BYTEBITS() discards just
+   enough bits to put the accumulator on a byte boundary.  After BYTEBITS()
+   and a NEEDBITS(8), then BITS(8) would return the next byte in the stream.
+
+   NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return
+   if there is no input available.  The decoding of variable length codes uses
+   PULLBYTE() directly in order to pull just enough bytes to decode the next
+   code, and no more.
+
+   Some states loop until they get enough input, making sure that enough
+   state information is maintained to continue the loop where it left off
+   if NEEDBITS() returns in the loop.  For example, want, need, and keep
+   would all have to actually be part of the saved state in case NEEDBITS()
+   returns:
+
+    case STATEw:
+        while (want < need) {
+            NEEDBITS(n);
+            keep[want++] = BITS(n);
+            DROPBITS(n);
+        }
+        state = STATEx;
+    case STATEx:
+
+   As shown above, if the next state is also the next case, then the break
+   is omitted.
+
+   A state may also return if there is not enough output space available to
+   complete that state.  Those states are copying stored data, writing a
+   literal byte, and copying a matching string.
+
+   When returning, a "goto inf_leave" is used to update the total counters,
+   update the check value, and determine whether any progress has been made
+   during that inflate() call in order to return the proper return code.
+   Progress is defined as a change in either strm->avail_in or strm->avail_out.
+   When there is a window, goto inf_leave will update the window with the last
+   output written.  If a goto inf_leave occurs in the middle of decompression
+   and there is no window currently, goto inf_leave will create one and copy
+   output to the window for the next call of inflate().
+
+   In this implementation, the flush parameter of inflate() only affects the
+   return code (per zlib.h).  inflate() always writes as much as possible to
+   strm->next_out, given the space available and the provided input--the effect
+   documented in zlib.h of Z_SYNC_FLUSH.  Furthermore, inflate() always defers
+   the allocation of and copying into a sliding window until necessary, which
+   provides the effect documented in zlib.h for Z_FINISH when the entire input
+   stream available.  So the only thing the flush parameter actually does is:
+   when flush is set to Z_FINISH, inflate() cannot return Z_OK.  Instead it
+   will return Z_BUF_ERROR if it has not reached the end of the stream.
+ */
+
+int ZEXPORT inflate(strm, flush)
+z_streamp strm;
+int flush;
+{
+    struct inflate_state FAR *state;
+    unsigned char FAR *next;    /* next input */
+    unsigned char FAR *put;     /* next output */
+    unsigned have, left;        /* available input and output */
+    unsigned long hold;         /* bit buffer */
+    unsigned bits;              /* bits in bit buffer */
+    unsigned in, out;           /* save starting available input and output */
+    unsigned copy;              /* number of stored or match bytes to copy */
+    unsigned char FAR *from;    /* where to copy match bytes from */
+    code here;                  /* current decoding table entry */
+    code last;                  /* parent table entry */
+    unsigned len;               /* length to copy for repeats, bits to drop */
+    int ret;                    /* return code */
+#ifdef GUNZIP
+    unsigned char hbuf[4];      /* buffer for gzip header crc calculation */
+#endif
+    static const unsigned short order[19] = /* permutation of code lengths */
+        {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+
+    if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||
+        (strm->next_in == Z_NULL && strm->avail_in != 0))
+        return Z_STREAM_ERROR;
+
+    state = (struct inflate_state FAR *)strm->state;
+    if (state->mode == TYPE) state->mode = TYPEDO;      /* skip check */
+    LOAD();
+    in = have;
+    out = left;
+    ret = Z_OK;
+    for (;;)
+        switch (state->mode) {
+        case HEAD:
+            if (state->wrap == 0) {
+                state->mode = TYPEDO;
+                break;
+            }
+            NEEDBITS(16);
+#ifdef GUNZIP
+            if ((state->wrap & 2) && hold == 0x8b1f) {  /* gzip header */
+                state->check = crc32(0L, Z_NULL, 0);
+                CRC2(state->check, hold);
+                INITBITS();
+                state->mode = FLAGS;
+                break;
+            }
+            state->flags = 0;           /* expect zlib header */
+            if (state->head != Z_NULL)
+                state->head->done = -1;
+            if (!(state->wrap & 1) ||   /* check if zlib header allowed */
+#else
+            if (
+#endif
+                ((BITS(8) << 8) + (hold >> 8)) % 31) {
+                strm->msg = (char *)"incorrect header check";
+                state->mode = BAD;
+                break;
+            }
+            if (BITS(4) != Z_DEFLATED) {
+                strm->msg = (char *)"unknown compression method";
+                state->mode = BAD;
+                break;
+            }
+            DROPBITS(4);
+            len = BITS(4) + 8;
+            if (state->wbits == 0)
+                state->wbits = len;
+            else if (len > state->wbits) {
+                strm->msg = (char *)"invalid window size";
+                state->mode = BAD;
+                break;
+            }
+            state->dmax = 1U << len;
+            Tracev((stderr, "inflate:   zlib header ok\n"));
+            strm->adler = state->check = adler32(0L, Z_NULL, 0);
+            state->mode = hold & 0x200 ? DICTID : TYPE;
+            INITBITS();
+            break;
+#ifdef GUNZIP
+        case FLAGS:
+            NEEDBITS(16);
+            state->flags = (int)(hold);
+            if ((state->flags & 0xff) != Z_DEFLATED) {
+                strm->msg = (char *)"unknown compression method";
+                state->mode = BAD;
+                break;
+            }
+            if (state->flags & 0xe000) {
+                strm->msg = (char *)"unknown header flags set";
+                state->mode = BAD;
+                break;
+            }
+            if (state->head != Z_NULL)
+                state->head->text = (int)((hold >> 8) & 1);
+            if (state->flags & 0x0200) CRC2(state->check, hold);
+            INITBITS();
+            state->mode = TIME;
+        case TIME:
+            NEEDBITS(32);
+            if (state->head != Z_NULL)
+                state->head->time = hold;
+            if (state->flags & 0x0200) CRC4(state->check, hold);
+            INITBITS();
+            state->mode = OS;
+        case OS:
+            NEEDBITS(16);
+            if (state->head != Z_NULL) {
+                state->head->xflags = (int)(hold & 0xff);
+                state->head->os = (int)(hold >> 8);
+            }
+            if (state->flags & 0x0200) CRC2(state->check, hold);
+            INITBITS();
+            state->mode = EXLEN;
+        case EXLEN:
+            if (state->flags & 0x0400) {
+                NEEDBITS(16);
+                state->length = (unsigned)(hold);
+                if (state->head != Z_NULL)
+                    state->head->extra_len = (unsigned)hold;
+                if (state->flags & 0x0200) CRC2(state->check, hold);
+                INITBITS();
+            }
+            else if (state->head != Z_NULL)
+                state->head->extra = Z_NULL;
+            state->mode = EXTRA;
+        case EXTRA:
+            if (state->flags & 0x0400) {
+                copy = state->length;
+                if (copy > have) copy = have;
+                if (copy) {
+                    if (state->head != Z_NULL &&
+                        state->head->extra != Z_NULL) {
+                        len = state->head->extra_len - state->length;
+                        zmemcpy(state->head->extra + len, next,
+                                len + copy > state->head->extra_max ?
+                                state->head->extra_max - len : copy);
+                    }
+                    if (state->flags & 0x0200)
+                        state->check = crc32(state->check, next, copy);
+                    have -= copy;
+                    next += copy;
+                    state->length -= copy;
+                }
+                if (state->length) goto inf_leave;
+            }
+            state->length = 0;
+            state->mode = NAME;
+        case NAME:
+            if (state->flags & 0x0800) {
+                if (have == 0) goto inf_leave;
+                copy = 0;
+                do {
+                    len = (unsigned)(next[copy++]);
+                    if (state->head != Z_NULL &&
+                            state->head->name != Z_NULL &&
+                            state->length < state->head->name_max)
+                        state->head->name[state->length++] = len;
+                } while (len && copy < have);
+                if (state->flags & 0x0200)
+                    state->check = crc32(state->check, next, copy);
+                have -= copy;
+                next += copy;
+                if (len) goto inf_leave;
+            }
+            else if (state->head != Z_NULL)
+                state->head->name = Z_NULL;
+            state->length = 0;
+            state->mode = COMMENT;
+        case COMMENT:
+            if (state->flags & 0x1000) {
+                if (have == 0) goto inf_leave;
+                copy = 0;
+                do {
+                    len = (unsigned)(next[copy++]);
+                    if (state->head != Z_NULL &&
+                            state->head->comment != Z_NULL &&
+                            state->length < state->head->comm_max)
+                        state->head->comment[state->length++] = len;
+                } while (len && copy < have);
+                if (state->flags & 0x0200)
+                    state->check = crc32(state->check, next, copy);
+                have -= copy;
+                next += copy;
+                if (len) goto inf_leave;
+            }
+            else if (state->head != Z_NULL)
+                state->head->comment = Z_NULL;
+            state->mode = HCRC;
+        case HCRC:
+            if (state->flags & 0x0200) {
+                NEEDBITS(16);
+                if (hold != (state->check & 0xffff)) {
+                    strm->msg = (char *)"header crc mismatch";
+                    state->mode = BAD;
+                    break;
+                }
+                INITBITS();
+            }
+            if (state->head != Z_NULL) {
+                state->head->hcrc = (int)((state->flags >> 9) & 1);
+                state->head->done = 1;
+            }
+            strm->adler = state->check = crc32(0L, Z_NULL, 0);
+            state->mode = TYPE;
+            break;
+#endif
+        case DICTID:
+            NEEDBITS(32);
+            strm->adler = state->check = ZSWAP32(hold);
+            INITBITS();
+            state->mode = DICT;
+        case DICT:
+            if (state->havedict == 0) {
+                RESTORE();
+                return Z_NEED_DICT;
+            }
+            strm->adler = state->check = adler32(0L, Z_NULL, 0);
+            state->mode = TYPE;
+        case TYPE:
+            if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
+        case TYPEDO:
+            if (state->last) {
+                BYTEBITS();
+                state->mode = CHECK;
+                break;
+            }
+            NEEDBITS(3);
+            state->last = BITS(1);
+            DROPBITS(1);
+            switch (BITS(2)) {
+            case 0:                             /* stored block */
+                Tracev((stderr, "inflate:     stored block%s\n",
+                        state->last ? " (last)" : ""));
+                state->mode = STORED;
+                break;
+            case 1:                             /* fixed block */
+                fixedtables(state);
+                Tracev((stderr, "inflate:     fixed codes block%s\n",
+                        state->last ? " (last)" : ""));
+                state->mode = LEN_;             /* decode codes */
+                if (flush == Z_TREES) {
+                    DROPBITS(2);
+                    goto inf_leave;
+                }
+                break;
+            case 2:                             /* dynamic block */
+                Tracev((stderr, "inflate:     dynamic codes block%s\n",
+                        state->last ? " (last)" : ""));
+                state->mode = TABLE;
+                break;
+            case 3:
+                strm->msg = (char *)"invalid block type";
+                state->mode = BAD;
+            }
+            DROPBITS(2);
+            break;
+        case STORED:
+            BYTEBITS();                         /* go to byte boundary */
+            NEEDBITS(32);
+            if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
+                strm->msg = (char *)"invalid stored block lengths";
+                state->mode = BAD;
+                break;
+            }
+            state->length = (unsigned)hold & 0xffff;
+            Tracev((stderr, "inflate:       stored length %u\n",
+                    state->length));
+            INITBITS();
+            state->mode = COPY_;
+            if (flush == Z_TREES) goto inf_leave;
+        case COPY_:
+            state->mode = COPY;
+        case COPY:
+            copy = state->length;
+            if (copy) {
+                if (copy > have) copy = have;
+                if (copy > left) copy = left;
+                if (copy == 0) goto inf_leave;
+                zmemcpy(put, next, copy);
+                have -= copy;
+                next += copy;
+                left -= copy;
+                put += copy;
+                state->length -= copy;
+                break;
+            }
+            Tracev((stderr, "inflate:       stored end\n"));
+            state->mode = TYPE;
+            break;
+        case TABLE:
+            NEEDBITS(14);
+            state->nlen = BITS(5) + 257;
+            DROPBITS(5);
+            state->ndist = BITS(5) + 1;
+            DROPBITS(5);
+            state->ncode = BITS(4) + 4;
+            DROPBITS(4);
+#ifndef PKZIP_BUG_WORKAROUND
+            if (state->nlen > 286 || state->ndist > 30) {
+                strm->msg = (char *)"too many length or distance symbols";
+                state->mode = BAD;
+                break;
+            }
+#endif
+            Tracev((stderr, "inflate:       table sizes ok\n"));
+            state->have = 0;
+            state->mode = LENLENS;
+        case LENLENS:
+            while (state->have < state->ncode) {
+                NEEDBITS(3);
+                state->lens[order[state->have++]] = (unsigned short)BITS(3);
+                DROPBITS(3);
+            }
+            while (state->have < 19)
+                state->lens[order[state->have++]] = 0;
+            state->next = state->codes;
+            state->lencode = (code const FAR *)(state->next);
+            state->lenbits = 7;
+            ret = inflate_table(CODES, state->lens, 19, &(state->next),
+                                &(state->lenbits), state->work);
+            if (ret) {
+                strm->msg = (char *)"invalid code lengths set";
+                state->mode = BAD;
+                break;
+            }
+            Tracev((stderr, "inflate:       code lengths ok\n"));
+            state->have = 0;
+            state->mode = CODELENS;
+        case CODELENS:
+            while (state->have < state->nlen + state->ndist) {
+                for (;;) {
+                    here = state->lencode[BITS(state->lenbits)];
+                    if ((unsigned)(here.bits) <= bits) break;
+                    PULLBYTE();
+                }
+                if (here.val < 16) {
+                    DROPBITS(here.bits);
+                    state->lens[state->have++] = here.val;
+                }
+                else {
+                    if (here.val == 16) {
+                        NEEDBITS(here.bits + 2);
+                        DROPBITS(here.bits);
+                        if (state->have == 0) {
+                            strm->msg = (char *)"invalid bit length repeat";
+                            state->mode = BAD;
+                            break;
+                        }
+                        len = state->lens[state->have - 1];
+                        copy = 3 + BITS(2);
+                        DROPBITS(2);
+                    }
+                    else if (here.val == 17) {
+                        NEEDBITS(here.bits + 3);
+                        DROPBITS(here.bits);
+                        len = 0;
+                        copy = 3 + BITS(3);
+                        DROPBITS(3);
+                    }
+                    else {
+                        NEEDBITS(here.bits + 7);
+                        DROPBITS(here.bits);
+                        len = 0;
+                        copy = 11 + BITS(7);
+                        DROPBITS(7);
+                    }
+                    if (state->have + copy > state->nlen + state->ndist) {
+                        strm->msg = (char *)"invalid bit length repeat";
+                        state->mode = BAD;
+                        break;
+                    }
+                    while (copy--)
+                        state->lens[state->have++] = (unsigned short)len;
+                }
+            }
+
+            /* handle error breaks in while */
+            if (state->mode == BAD) break;
+
+            /* check for end-of-block code (better have one) */
+            if (state->lens[256] == 0) {
+                strm->msg = (char *)"invalid code -- missing end-of-block";
+                state->mode = BAD;
+                break;
+            }
+
+            /* build code tables -- note: do not change the lenbits or distbits
+               values here (9 and 6) without reading the comments in inftrees.h
+               concerning the ENOUGH constants, which depend on those values */
+            state->next = state->codes;
+            state->lencode = (code const FAR *)(state->next);
+            state->lenbits = 9;
+            ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
+                                &(state->lenbits), state->work);
+            if (ret) {
+                strm->msg = (char *)"invalid literal/lengths set";
+                state->mode = BAD;
+                break;
+            }
+            state->distcode = (code const FAR *)(state->next);
+            state->distbits = 6;
+            ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
+                            &(state->next), &(state->distbits), state->work);
+            if (ret) {
+                strm->msg = (char *)"invalid distances set";
+                state->mode = BAD;
+                break;
+            }
+            Tracev((stderr, "inflate:       codes ok\n"));
+            state->mode = LEN_;
+            if (flush == Z_TREES) goto inf_leave;
+        case LEN_:
+            state->mode = LEN;
+        case LEN:
+            if (have >= 6 && left >= 258) {
+                RESTORE();
+                inflate_fast(strm, out);
+                LOAD();
+                if (state->mode == TYPE)
+                    state->back = -1;
+                break;
+            }
+            state->back = 0;
+            for (;;) {
+                here = state->lencode[BITS(state->lenbits)];
+                if ((unsigned)(here.bits) <= bits) break;
+                PULLBYTE();
+            }
+            if (here.op && (here.op & 0xf0) == 0) {
+                last = here;
+                for (;;) {
+                    here = state->lencode[last.val +
+                            (BITS(last.bits + last.op) >> last.bits)];
+                    if ((unsigned)(last.bits + here.bits) <= bits) break;
+                    PULLBYTE();
+                }
+                DROPBITS(last.bits);
+                state->back += last.bits;
+            }
+            DROPBITS(here.bits);
+            state->back += here.bits;
+            state->length = (unsigned)here.val;
+            if ((int)(here.op) == 0) {
+                Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+                        "inflate:         literal '%c'\n" :
+                        "inflate:         literal 0x%02x\n", here.val));
+                state->mode = LIT;
+                break;
+            }
+            if (here.op & 32) {
+                Tracevv((stderr, "inflate:         end of block\n"));
+                state->back = -1;
+                state->mode = TYPE;
+                break;
+            }
+            if (here.op & 64) {
+                strm->msg = (char *)"invalid literal/length code";
+                state->mode = BAD;
+                break;
+            }
+            state->extra = (unsigned)(here.op) & 15;
+            state->mode = LENEXT;
+        case LENEXT:
+            if (state->extra) {
+                NEEDBITS(state->extra);
+                state->length += BITS(state->extra);
+                DROPBITS(state->extra);
+                state->back += state->extra;
+            }
+            Tracevv((stderr, "inflate:         length %u\n", state->length));
+            state->was = state->length;
+            state->mode = DIST;
+        case DIST:
+            for (;;) {
+                here = state->distcode[BITS(state->distbits)];
+                if ((unsigned)(here.bits) <= bits) break;
+                PULLBYTE();
+            }
+            if ((here.op & 0xf0) == 0) {
+                last = here;
+                for (;;) {
+                    here = state->distcode[last.val +
+                            (BITS(last.bits + last.op) >> last.bits)];
+                    if ((unsigned)(last.bits + here.bits) <= bits) break;
+                    PULLBYTE();
+                }
+                DROPBITS(last.bits);
+                state->back += last.bits;
+            }
+            DROPBITS(here.bits);
+            state->back += here.bits;
+            if (here.op & 64) {
+                strm->msg = (char *)"invalid distance code";
+                state->mode = BAD;
+                break;
+            }
+            state->offset = (unsigned)here.val;
+            state->extra = (unsigned)(here.op) & 15;
+            state->mode = DISTEXT;
+        case DISTEXT:
+            if (state->extra) {
+                NEEDBITS(state->extra);
+                state->offset += BITS(state->extra);
+                DROPBITS(state->extra);
+                state->back += state->extra;
+            }
+#ifdef INFLATE_STRICT
+            if (state->offset > state->dmax) {
+                strm->msg = (char *)"invalid distance too far back";
+                state->mode = BAD;
+                break;
+            }
+#endif
+            Tracevv((stderr, "inflate:         distance %u\n", state->offset));
+            state->mode = MATCH;
+        case MATCH:
+            if (left == 0) goto inf_leave;
+            copy = out - left;
+            if (state->offset > copy) {         /* copy from window */
+                copy = state->offset - copy;
+                if (copy > state->whave) {
+                    if (state->sane) {
+                        strm->msg = (char *)"invalid distance too far back";
+                        state->mode = BAD;
+                        break;
+                    }
+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+                    Trace((stderr, "inflate.c too far\n"));
+                    copy -= state->whave;
+                    if (copy > state->length) copy = state->length;
+                    if (copy > left) copy = left;
+                    left -= copy;
+                    state->length -= copy;
+                    do {
+                        *put++ = 0;
+                    } while (--copy);
+                    if (state->length == 0) state->mode = LEN;
+                    break;
+#endif
+                }
+                if (copy > state->wnext) {
+                    copy -= state->wnext;
+                    from = state->window + (state->wsize - copy);
+                }
+                else
+                    from = state->window + (state->wnext - copy);
+                if (copy > state->length) copy = state->length;
+            }
+            else {                              /* copy from output */
+                from = put - state->offset;
+                copy = state->length;
+            }
+            if (copy > left) copy = left;
+            left -= copy;
+            state->length -= copy;
+            do {
+                *put++ = *from++;
+            } while (--copy);
+            if (state->length == 0) state->mode = LEN;
+            break;
+        case LIT:
+            if (left == 0) goto inf_leave;
+            *put++ = (unsigned char)(state->length);
+            left--;
+            state->mode = LEN;
+            break;
+        case CHECK:
+            if (state->wrap) {
+                NEEDBITS(32);
+                out -= left;
+                strm->total_out += out;
+                state->total += out;
+                if (out)
+                    strm->adler = state->check =
+                        UPDATE(state->check, put - out, out);
+                out = left;
+                if ((
+#ifdef GUNZIP
+                     state->flags ? hold :
+#endif
+                     ZSWAP32(hold)) != state->check) {
+                    strm->msg = (char *)"incorrect data check";
+                    state->mode = BAD;
+                    break;
+                }
+                INITBITS();
+                Tracev((stderr, "inflate:   check matches trailer\n"));
+            }
+#ifdef GUNZIP
+            state->mode = LENGTH;
+        case LENGTH:
+            if (state->wrap && state->flags) {
+                NEEDBITS(32);
+                if (hold != (state->total & 0xffffffffUL)) {
+                    strm->msg = (char *)"incorrect length check";
+                    state->mode = BAD;
+                    break;
+                }
+                INITBITS();
+                Tracev((stderr, "inflate:   length matches trailer\n"));
+            }
+#endif
+            state->mode = DONE;
+        case DONE:
+            ret = Z_STREAM_END;
+            goto inf_leave;
+        case BAD:
+            ret = Z_DATA_ERROR;
+            goto inf_leave;
+        case MEM:
+            return Z_MEM_ERROR;
+        case SYNC:
+        default:
+            return Z_STREAM_ERROR;
+        }
+
+    /*
+       Return from inflate(), updating the total counts and the check value.
+       If there was no progress during the inflate() call, return a buffer
+       error.  Call updatewindow() to create and/or update the window state.
+       Note: a memory error from inflate() is non-recoverable.
+     */
+  inf_leave:
+    RESTORE();
+    if (state->wsize || (out != strm->avail_out && state->mode < BAD &&
+            (state->mode < CHECK || flush != Z_FINISH)))
+        if (updatewindow(strm, out)) {
+            state->mode = MEM;
+            return Z_MEM_ERROR;
+        }
+    in -= strm->avail_in;
+    out -= strm->avail_out;
+    strm->total_in += in;
+    strm->total_out += out;
+    state->total += out;
+    if (state->wrap && out)
+        strm->adler = state->check =
+            UPDATE(state->check, strm->next_out - out, out);
+    strm->data_type = state->bits + (state->last ? 64 : 0) +
+                      (state->mode == TYPE ? 128 : 0) +
+                      (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
+    if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
+        ret = Z_BUF_ERROR;
+    return ret;
+}
+
+int ZEXPORT inflateEnd(strm)
+z_streamp strm;
+{
+    struct inflate_state FAR *state;
+    if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
+        return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    if (state->window != Z_NULL) ZFREE(strm, state->window);
+    ZFREE(strm, strm->state);
+    strm->state = Z_NULL;
+    Tracev((stderr, "inflate: end\n"));
+    return Z_OK;
+}
+
+int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength)
+z_streamp strm;
+const Bytef *dictionary;
+uInt dictLength;
+{
+    struct inflate_state FAR *state;
+    unsigned long dictid;
+    unsigned char *next;
+    unsigned avail;
+    int ret;
+
+    /* check state */
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    if (state->wrap != 0 && state->mode != DICT)
+        return Z_STREAM_ERROR;
+
+    /* check for correct dictionary identifier */
+    if (state->mode == DICT) {
+        dictid = adler32(0L, Z_NULL, 0);
+        dictid = adler32(dictid, dictionary, dictLength);
+        if (dictid != state->check)
+            return Z_DATA_ERROR;
+    }
+
+    /* copy dictionary to window using updatewindow(), which will amend the
+       existing dictionary if appropriate */
+    next = strm->next_out;
+    avail = strm->avail_out;
+    strm->next_out = (Bytef *)dictionary + dictLength;
+    strm->avail_out = 0;
+    ret = updatewindow(strm, dictLength);
+    strm->avail_out = avail;
+    strm->next_out = next;
+    if (ret) {
+        state->mode = MEM;
+        return Z_MEM_ERROR;
+    }
+    state->havedict = 1;
+    Tracev((stderr, "inflate:   dictionary set\n"));
+    return Z_OK;
+}
+
+int ZEXPORT inflateGetHeader(strm, head)
+z_streamp strm;
+gz_headerp head;
+{
+    struct inflate_state FAR *state;
+
+    /* check state */
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    if ((state->wrap & 2) == 0) return Z_STREAM_ERROR;
+
+    /* save header structure */
+    state->head = head;
+    head->done = 0;
+    return Z_OK;
+}
+
+/*
+   Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff.  Return when found
+   or when out of input.  When called, *have is the number of pattern bytes
+   found in order so far, in 0..3.  On return *have is updated to the new
+   state.  If on return *have equals four, then the pattern was found and the
+   return value is how many bytes were read including the last byte of the
+   pattern.  If *have is less than four, then the pattern has not been found
+   yet and the return value is len.  In the latter case, syncsearch() can be
+   called again with more data and the *have state.  *have is initialized to
+   zero for the first call.
+ */
+local unsigned syncsearch(have, buf, len)
+unsigned FAR *have;
+unsigned char FAR *buf;
+unsigned len;
+{
+    unsigned got;
+    unsigned next;
+
+    got = *have;
+    next = 0;
+    while (next < len && got < 4) {
+        if ((int)(buf[next]) == (got < 2 ? 0 : 0xff))
+            got++;
+        else if (buf[next])
+            got = 0;
+        else
+            got = 4 - got;
+        next++;
+    }
+    *have = got;
+    return next;
+}
+
+int ZEXPORT inflateSync(strm)
+z_streamp strm;
+{
+    unsigned len;               /* number of bytes to look at or looked at */
+    unsigned long in, out;      /* temporary to save total_in and total_out */
+    unsigned char buf[4];       /* to restore bit buffer to byte string */
+    struct inflate_state FAR *state;
+
+    /* check parameters */
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;
+
+    /* if first time, start search in bit buffer */
+    if (state->mode != SYNC) {
+        state->mode = SYNC;
+        state->hold <<= state->bits & 7;
+        state->bits -= state->bits & 7;
+        len = 0;
+        while (state->bits >= 8) {
+            buf[len++] = (unsigned char)(state->hold);
+            state->hold >>= 8;
+            state->bits -= 8;
+        }
+        state->have = 0;
+        syncsearch(&(state->have), buf, len);
+    }
+
+    /* search available input */
+    len = syncsearch(&(state->have), strm->next_in, strm->avail_in);
+    strm->avail_in -= len;
+    strm->next_in += len;
+    strm->total_in += len;
+
+    /* return no joy or set up to restart inflate() on a new block */
+    if (state->have != 4) return Z_DATA_ERROR;
+    in = strm->total_in;  out = strm->total_out;
+    inflateReset(strm);
+    strm->total_in = in;  strm->total_out = out;
+    state->mode = TYPE;
+    return Z_OK;
+}
+
+/*
+   Returns true if inflate is currently at the end of a block generated by
+   Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
+   implementation to provide an additional safety check. PPP uses
+   Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored
+   block. When decompressing, PPP checks that at the end of input packet,
+   inflate is waiting for these length bytes.
+ */
+int ZEXPORT inflateSyncPoint(strm)
+z_streamp strm;
+{
+    struct inflate_state FAR *state;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    return state->mode == STORED && state->bits == 0;
+}
+
+int ZEXPORT inflateCopy(dest, source)
+z_streamp dest;
+z_streamp source;
+{
+    struct inflate_state FAR *state;
+    struct inflate_state FAR *copy;
+    unsigned char FAR *window;
+    unsigned wsize;
+
+    /* check input */
+    if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL ||
+        source->zalloc == (alloc_func)0 || source->zfree == (free_func)0)
+        return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)source->state;
+
+    /* allocate space */
+    copy = (struct inflate_state FAR *)
+           ZALLOC(source, 1, sizeof(struct inflate_state));
+    if (copy == Z_NULL) return Z_MEM_ERROR;
+    window = Z_NULL;
+    if (state->window != Z_NULL) {
+        window = (unsigned char FAR *)
+                 ZALLOC(source, 1U << state->wbits, sizeof(unsigned char));
+        if (window == Z_NULL) {
+            ZFREE(source, copy);
+            return Z_MEM_ERROR;
+        }
+    }
+
+    /* copy state */
+    zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
+    zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
+    if (state->lencode >= state->codes &&
+        state->lencode <= state->codes + ENOUGH - 1) {
+        copy->lencode = copy->codes + (state->lencode - state->codes);
+        copy->distcode = copy->codes + (state->distcode - state->codes);
+    }
+    copy->next = copy->codes + (state->next - state->codes);
+    if (window != Z_NULL) {
+        wsize = 1U << state->wbits;
+        zmemcpy(window, state->window, wsize);
+    }
+    copy->window = window;
+    dest->state = (struct internal_state FAR *)copy;
+    return Z_OK;
+}
+
+int ZEXPORT inflateUndermine(strm, subvert)
+z_streamp strm;
+int subvert;
+{
+    struct inflate_state FAR *state;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+    state->sane = !subvert;
+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+    return Z_OK;
+#else
+    state->sane = 1;
+    return Z_DATA_ERROR;
+#endif
+}
+
+long ZEXPORT inflateMark(strm)
+z_streamp strm;
+{
+    struct inflate_state FAR *state;
+
+    if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16;
+    state = (struct inflate_state FAR *)strm->state;
+    return ((long)(state->back) << 16) +
+        (state->mode == COPY ? state->length :
+            (state->mode == MATCH ? state->was - state->length : 0));
+}
diff --git a/libs/ext/zlib/inflate.h b/libs/ext/zlib/inflate.h
new file mode 100644
index 0000000..95f4986
--- /dev/null
+++ b/libs/ext/zlib/inflate.h
@@ -0,0 +1,122 @@
+/* inflate.h -- internal inflate state definition
+ * Copyright (C) 1995-2009 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+   part of the implementation of the compression library and is
+   subject to change. Applications should only use zlib.h.
+ */
+
+/* define NO_GZIP when compiling if you want to disable gzip header and
+   trailer decoding by inflate().  NO_GZIP would be used to avoid linking in
+   the crc code when it is not needed.  For shared libraries, gzip decoding
+   should be left enabled. */
+#ifndef NO_GZIP
+#  define GUNZIP
+#endif
+
+/* Possible inflate modes between inflate() calls */
+typedef enum {
+    HEAD,       /* i: waiting for magic header */
+    FLAGS,      /* i: waiting for method and flags (gzip) */
+    TIME,       /* i: waiting for modification time (gzip) */
+    OS,         /* i: waiting for extra flags and operating system (gzip) */
+    EXLEN,      /* i: waiting for extra length (gzip) */
+    EXTRA,      /* i: waiting for extra bytes (gzip) */
+    NAME,       /* i: waiting for end of file name (gzip) */
+    COMMENT,    /* i: waiting for end of comment (gzip) */
+    HCRC,       /* i: waiting for header crc (gzip) */
+    DICTID,     /* i: waiting for dictionary check value */
+    DICT,       /* waiting for inflateSetDictionary() call */
+        TYPE,       /* i: waiting for type bits, including last-flag bit */
+        TYPEDO,     /* i: same, but skip check to exit inflate on new block */
+        STORED,     /* i: waiting for stored size (length and complement) */
+        COPY_,      /* i/o: same as COPY below, but only first time in */
+        COPY,       /* i/o: waiting for input or output to copy stored block */
+        TABLE,      /* i: waiting for dynamic block table lengths */
+        LENLENS,    /* i: waiting for code length code lengths */
+        CODELENS,   /* i: waiting for length/lit and distance code lengths */
+            LEN_,       /* i: same as LEN below, but only first time in */
+            LEN,        /* i: waiting for length/lit/eob code */
+            LENEXT,     /* i: waiting for length extra bits */
+            DIST,       /* i: waiting for distance code */
+            DISTEXT,    /* i: waiting for distance extra bits */
+            MATCH,      /* o: waiting for output space to copy string */
+            LIT,        /* o: waiting for output space to write literal */
+    CHECK,      /* i: waiting for 32-bit check value */
+    LENGTH,     /* i: waiting for 32-bit length (gzip) */
+    DONE,       /* finished check, done -- remain here until reset */
+    BAD,        /* got a data error -- remain here until reset */
+    MEM,        /* got an inflate() memory error -- remain here until reset */
+    SYNC        /* looking for synchronization bytes to restart inflate() */
+} inflate_mode;
+
+/*
+    State transitions between above modes -
+
+    (most modes can go to BAD or MEM on error -- not shown for clarity)
+
+    Process header:
+        HEAD -> (gzip) or (zlib) or (raw)
+        (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME -> COMMENT ->
+                  HCRC -> TYPE
+        (zlib) -> DICTID or TYPE
+        DICTID -> DICT -> TYPE
+        (raw) -> TYPEDO
+    Read deflate blocks:
+            TYPE -> TYPEDO -> STORED or TABLE or LEN_ or CHECK
+            STORED -> COPY_ -> COPY -> TYPE
+            TABLE -> LENLENS -> CODELENS -> LEN_
+            LEN_ -> LEN
+    Read deflate codes in fixed or dynamic block:
+                LEN -> LENEXT or LIT or TYPE
+                LENEXT -> DIST -> DISTEXT -> MATCH -> LEN
+                LIT -> LEN
+    Process trailer:
+        CHECK -> LENGTH -> DONE
+ */
+
+/* state maintained between inflate() calls.  Approximately 10K bytes. */
+struct inflate_state {
+    inflate_mode mode;          /* current inflate mode */
+    int last;                   /* true if processing last block */
+    int wrap;                   /* bit 0 true for zlib, bit 1 true for gzip */
+    int havedict;               /* true if dictionary provided */
+    int flags;                  /* gzip header method and flags (0 if zlib) */
+    unsigned dmax;              /* zlib header max distance (INFLATE_STRICT) */
+    unsigned long check;        /* protected copy of check value */
+    unsigned long total;        /* protected copy of output count */
+    gz_headerp head;            /* where to save gzip header information */
+        /* sliding window */
+    unsigned wbits;             /* log base 2 of requested window size */
+    unsigned wsize;             /* window size or zero if not using window */
+    unsigned whave;             /* valid bytes in the window */
+    unsigned wnext;             /* window write index */
+    unsigned char FAR *window;  /* allocated sliding window, if needed */
+        /* bit accumulator */
+    unsigned long hold;         /* input bit accumulator */
+    unsigned bits;              /* number of bits in "in" */
+        /* for string and stored block copying */
+    unsigned length;            /* literal or length of data to copy */
+    unsigned offset;            /* distance back to copy string from */
+        /* for table and code decoding */
+    unsigned extra;             /* extra bits needed */
+        /* fixed and dynamic code tables */
+    code const FAR *lencode;    /* starting table for length/literal codes */
+    code const FAR *distcode;   /* starting table for distance codes */
+    unsigned lenbits;           /* index bits for lencode */
+    unsigned distbits;          /* index bits for distcode */
+        /* dynamic table building */
+    unsigned ncode;             /* number of code length code lengths */
+    unsigned nlen;              /* number of length code lengths */
+    unsigned ndist;             /* number of distance code lengths */
+    unsigned have;              /* number of code lengths in lens[] */
+    code FAR *next;             /* next available space in codes[] */
+    unsigned short lens[320];   /* temporary storage for code lengths */
+    unsigned short work[288];   /* work area for code table building */
+    code codes[ENOUGH];         /* space for code tables */
+    int sane;                   /* if false, allow invalid distance too far */
+    int back;                   /* bits back of last unprocessed length/lit */
+    unsigned was;               /* initial length of match */
+};
diff --git a/libs/ext/zlib/inftrees.c b/libs/ext/zlib/inftrees.c
new file mode 100644
index 0000000..abcd7c4
--- /dev/null
+++ b/libs/ext/zlib/inftrees.c
@@ -0,0 +1,306 @@
+/* inftrees.c -- generate Huffman trees for efficient decoding
+ * Copyright (C) 1995-2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+
+#define MAXBITS 15
+
+const char inflate_copyright[] =
+   " inflate 1.2.7 Copyright 1995-2012 Mark Adler ";
+/*
+  If you use the zlib library in a product, an acknowledgment is welcome
+  in the documentation of your product. If for some reason you cannot
+  include such an acknowledgment, I would appreciate that you keep this
+  copyright string in the executable of your product.
+ */
+
+/*
+   Build a set of tables to decode the provided canonical Huffman code.
+   The code lengths are lens[0..codes-1].  The result starts at *table,
+   whose indices are 0..2^bits-1.  work is a writable array of at least
+   lens shorts, which is used as a work area.  type is the type of code
+   to be generated, CODES, LENS, or DISTS.  On return, zero is success,
+   -1 is an invalid code, and +1 means that ENOUGH isn't enough.  table
+   on return points to the next available entry's address.  bits is the
+   requested root table index bits, and on return it is the actual root
+   table index bits.  It will differ if the request is greater than the
+   longest code or if it is less than the shortest code.
+ */
+int ZLIB_INTERNAL inflate_table(type, lens, codes, table, bits, work)
+codetype type;
+unsigned short FAR *lens;
+unsigned codes;
+code FAR * FAR *table;
+unsigned FAR *bits;
+unsigned short FAR *work;
+{
+    unsigned len;               /* a code's length in bits */
+    unsigned sym;               /* index of code symbols */
+    unsigned min, max;          /* minimum and maximum code lengths */
+    unsigned root;              /* number of index bits for root table */
+    unsigned curr;              /* number of index bits for current table */
+    unsigned drop;              /* code bits to drop for sub-table */
+    int left;                   /* number of prefix codes available */
+    unsigned used;              /* code entries in table used */
+    unsigned huff;              /* Huffman code */
+    unsigned incr;              /* for incrementing code, index */
+    unsigned fill;              /* index for replicating entries */
+    unsigned low;               /* low bits for current root entry */
+    unsigned mask;              /* mask for low root bits */
+    code here;                  /* table entry for duplication */
+    code FAR *next;             /* next available space in table */
+    const unsigned short FAR *base;     /* base value table to use */
+    const unsigned short FAR *extra;    /* extra bits table to use */
+    int end;                    /* use base and extra for symbol > end */
+    unsigned short count[MAXBITS+1];    /* number of codes of each length */
+    unsigned short offs[MAXBITS+1];     /* offsets in table for each length */
+    static const unsigned short lbase[31] = { /* Length codes 257..285 base */
+        3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
+        35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
+    static const unsigned short lext[31] = { /* Length codes 257..285 extra */
+        16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
+        19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 78, 68};
+    static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
+        1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
+        257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
+        8193, 12289, 16385, 24577, 0, 0};
+    static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
+        16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
+        23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
+        28, 28, 29, 29, 64, 64};
+
+    /*
+       Process a set of code lengths to create a canonical Huffman code.  The
+       code lengths are lens[0..codes-1].  Each length corresponds to the
+       symbols 0..codes-1.  The Huffman code is generated by first sorting the
+       symbols by length from short to long, and retaining the symbol order
+       for codes with equal lengths.  Then the code starts with all zero bits
+       for the first code of the shortest length, and the codes are integer
+       increments for the same length, and zeros are appended as the length
+       increases.  For the deflate format, these bits are stored backwards
+       from their more natural integer increment ordering, and so when the
+       decoding tables are built in the large loop below, the integer codes
+       are incremented backwards.
+
+       This routine assumes, but does not check, that all of the entries in
+       lens[] are in the range 0..MAXBITS.  The caller must assure this.
+       1..MAXBITS is interpreted as that code length.  zero means that that
+       symbol does not occur in this code.
+
+       The codes are sorted by computing a count of codes for each length,
+       creating from that a table of starting indices for each length in the
+       sorted table, and then entering the symbols in order in the sorted
+       table.  The sorted table is work[], with that space being provided by
+       the caller.
+
+       The length counts are used for other purposes as well, i.e. finding
+       the minimum and maximum length codes, determining if there are any
+       codes at all, checking for a valid set of lengths, and looking ahead
+       at length counts to determine sub-table sizes when building the
+       decoding tables.
+     */
+
+    /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
+    for (len = 0; len <= MAXBITS; len++)
+        count[len] = 0;
+    for (sym = 0; sym < codes; sym++)
+        count[lens[sym]]++;
+
+    /* bound code lengths, force root to be within code lengths */
+    root = *bits;
+    for (max = MAXBITS; max >= 1; max--)
+        if (count[max] != 0) break;
+    if (root > max) root = max;
+    if (max == 0) {                     /* no symbols to code at all */
+        here.op = (unsigned char)64;    /* invalid code marker */
+        here.bits = (unsigned char)1;
+        here.val = (unsigned short)0;
+        *(*table)++ = here;             /* make a table to force an error */
+        *(*table)++ = here;
+        *bits = 1;
+        return 0;     /* no symbols, but wait for decoding to report error */
+    }
+    for (min = 1; min < max; min++)
+        if (count[min] != 0) break;
+    if (root < min) root = min;
+
+    /* check for an over-subscribed or incomplete set of lengths */
+    left = 1;
+    for (len = 1; len <= MAXBITS; len++) {
+        left <<= 1;
+        left -= count[len];
+        if (left < 0) return -1;        /* over-subscribed */
+    }
+    if (left > 0 && (type == CODES || max != 1))
+        return -1;                      /* incomplete set */
+
+    /* generate offsets into symbol table for each length for sorting */
+    offs[1] = 0;
+    for (len = 1; len < MAXBITS; len++)
+        offs[len + 1] = offs[len] + count[len];
+
+    /* sort symbols by length, by symbol order within each length */
+    for (sym = 0; sym < codes; sym++)
+        if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
+
+    /*
+       Create and fill in decoding tables.  In this loop, the table being
+       filled is at next and has curr index bits.  The code being used is huff
+       with length len.  That code is converted to an index by dropping drop
+       bits off of the bottom.  For codes where len is less than drop + curr,
+       those top drop + curr - len bits are incremented through all values to
+       fill the table with replicated entries.
+
+       root is the number of index bits for the root table.  When len exceeds
+       root, sub-tables are created pointed to by the root entry with an index
+       of the low root bits of huff.  This is saved in low to check for when a
+       new sub-table should be started.  drop is zero when the root table is
+       being filled, and drop is root when sub-tables are being filled.
+
+       When a new sub-table is needed, it is necessary to look ahead in the
+       code lengths to determine what size sub-table is needed.  The length
+       counts are used for this, and so count[] is decremented as codes are
+       entered in the tables.
+
+       used keeps track of how many table entries have been allocated from the
+       provided *table space.  It is checked for LENS and DIST tables against
+       the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
+       the initial root table size constants.  See the comments in inftrees.h
+       for more information.
+
+       sym increments through all symbols, and the loop terminates when
+       all codes of length max, i.e. all codes, have been processed.  This
+       routine permits incomplete codes, so another loop after this one fills
+       in the rest of the decoding tables with invalid code markers.
+     */
+
+    /* set up for code type */
+    switch (type) {
+    case CODES:
+        base = extra = work;    /* dummy value--not used */
+        end = 19;
+        break;
+    case LENS:
+        base = lbase;
+        base -= 257;
+        extra = lext;
+        extra -= 257;
+        end = 256;
+        break;
+    default:            /* DISTS */
+        base = dbase;
+        extra = dext;
+        end = -1;
+    }
+
+    /* initialize state for loop */
+    huff = 0;                   /* starting code */
+    sym = 0;                    /* starting code symbol */
+    len = min;                  /* starting code length */
+    next = *table;              /* current table to fill in */
+    curr = root;                /* current table index bits */
+    drop = 0;                   /* current bits to drop from code for index */
+    low = (unsigned)(-1);       /* trigger new sub-table when len > root */
+    used = 1U << root;          /* use root table entries */
+    mask = used - 1;            /* mask for comparing low */
+
+    /* check available table space */
+    if ((type == LENS && used >= ENOUGH_LENS) ||
+        (type == DISTS && used >= ENOUGH_DISTS))
+        return 1;
+
+    /* process all codes and make table entries */
+    for (;;) {
+        /* create table entry */
+        here.bits = (unsigned char)(len - drop);
+        if ((int)(work[sym]) < end) {
+            here.op = (unsigned char)0;
+            here.val = work[sym];
+        }
+        else if ((int)(work[sym]) > end) {
+            here.op = (unsigned char)(extra[work[sym]]);
+            here.val = base[work[sym]];
+        }
+        else {
+            here.op = (unsigned char)(32 + 64);         /* end of block */
+            here.val = 0;
+        }
+
+        /* replicate for those indices with low len bits equal to huff */
+        incr = 1U << (len - drop);
+        fill = 1U << curr;
+        min = fill;                 /* save offset to next table */
+        do {
+            fill -= incr;
+            next[(huff >> drop) + fill] = here;
+        } while (fill != 0);
+
+        /* backwards increment the len-bit code huff */
+        incr = 1U << (len - 1);
+        while (huff & incr)
+            incr >>= 1;
+        if (incr != 0) {
+            huff &= incr - 1;
+            huff += incr;
+        }
+        else
+            huff = 0;
+
+        /* go to next symbol, update count, len */
+        sym++;
+        if (--(count[len]) == 0) {
+            if (len == max) break;
+            len = lens[work[sym]];
+        }
+
+        /* create new sub-table if needed */
+        if (len > root && (huff & mask) != low) {
+            /* if first time, transition to sub-tables */
+            if (drop == 0)
+                drop = root;
+
+            /* increment past last table */
+            next += min;            /* here min is 1 << curr */
+
+            /* determine length of next table */
+            curr = len - drop;
+            left = (int)(1 << curr);
+            while (curr + drop < max) {
+                left -= count[curr + drop];
+                if (left <= 0) break;
+                curr++;
+                left <<= 1;
+            }
+
+            /* check for enough space */
+            used += 1U << curr;
+            if ((type == LENS && used >= ENOUGH_LENS) ||
+                (type == DISTS && used >= ENOUGH_DISTS))
+                return 1;
+
+            /* point entry in root table to sub-table */
+            low = huff & mask;
+            (*table)[low].op = (unsigned char)curr;
+            (*table)[low].bits = (unsigned char)root;
+            (*table)[low].val = (unsigned short)(next - *table);
+        }
+    }
+
+    /* fill in remaining table entry if code is incomplete (guaranteed to have
+       at most one remaining entry, since if the code is incomplete, the
+       maximum code length that was allowed to get this far is one bit) */
+    if (huff != 0) {
+        here.op = (unsigned char)64;            /* invalid code marker */
+        here.bits = (unsigned char)(len - drop);
+        here.val = (unsigned short)0;
+        next[huff] = here;
+    }
+
+    /* set return parameters */
+    *table += used;
+    *bits = root;
+    return 0;
+}
diff --git a/libs/ext/zlib/inftrees.h b/libs/ext/zlib/inftrees.h
new file mode 100644
index 0000000..baa53a0
--- /dev/null
+++ b/libs/ext/zlib/inftrees.h
@@ -0,0 +1,62 @@
+/* inftrees.h -- header to use inftrees.c
+ * Copyright (C) 1995-2005, 2010 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+   part of the implementation of the compression library and is
+   subject to change. Applications should only use zlib.h.
+ */
+
+/* Structure for decoding tables.  Each entry provides either the
+   information needed to do the operation requested by the code that
+   indexed that table entry, or it provides a pointer to another
+   table that indexes more bits of the code.  op indicates whether
+   the entry is a pointer to another table, a literal, a length or
+   distance, an end-of-block, or an invalid code.  For a table
+   pointer, the low four bits of op is the number of index bits of
+   that table.  For a length or distance, the low four bits of op
+   is the number of extra bits to get after the code.  bits is
+   the number of bits in this code or part of the code to drop off
+   of the bit buffer.  val is the actual byte to output in the case
+   of a literal, the base length or distance, or the offset from
+   the current table to the next table.  Each entry is four bytes. */
+typedef struct {
+    unsigned char op;           /* operation, extra bits, table bits */
+    unsigned char bits;         /* bits in this part of the code */
+    unsigned short val;         /* offset in table or code value */
+} code;
+
+/* op values as set by inflate_table():
+    00000000 - literal
+    0000tttt - table link, tttt != 0 is the number of table index bits
+    0001eeee - length or distance, eeee is the number of extra bits
+    01100000 - end of block
+    01000000 - invalid code
+ */
+
+/* Maximum size of the dynamic table.  The maximum number of code structures is
+   1444, which is the sum of 852 for literal/length codes and 592 for distance
+   codes.  These values were found by exhaustive searches using the program
+   examples/enough.c found in the zlib distribtution.  The arguments to that
+   program are the number of symbols, the initial root table size, and the
+   maximum bit length of a code.  "enough 286 9 15" for literal/length codes
+   returns returns 852, and "enough 30 6 15" for distance codes returns 592.
+   The initial root table size (9 or 6) is found in the fifth argument of the
+   inflate_table() calls in inflate.c and infback.c.  If the root table size is
+   changed, then these maximum sizes would be need to be recalculated and
+   updated. */
+#define ENOUGH_LENS 852
+#define ENOUGH_DISTS 592
+#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS)
+
+/* Type of code to build for inflate_table() */
+typedef enum {
+    CODES,
+    LENS,
+    DISTS
+} codetype;
+
+int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens,
+                             unsigned codes, code FAR * FAR *table,
+                             unsigned FAR *bits, unsigned short FAR *work));
diff --git a/libs/ext/zlib/libz.def b/libs/ext/zlib/libz.def
new file mode 100644
index 0000000..0489615
--- /dev/null
+++ b/libs/ext/zlib/libz.def
@@ -0,0 +1,84 @@
+; zlib data compression library
+EXPORTS
+; basic functions
+    zlibVersion
+    deflate
+    deflateEnd
+    inflate
+    inflateEnd
+; advanced functions
+    deflateSetDictionary
+    deflateCopy
+    deflateReset
+    deflateParams
+    deflateTune
+    deflateBound
+    deflatePending
+    deflatePrime
+    deflateSetHeader
+    inflateSetDictionary
+    inflateSync
+    inflateCopy
+    inflateReset
+    inflateReset2
+    inflatePrime
+    inflateMark
+    inflateGetHeader
+    inflateBack
+    inflateBackEnd
+    zlibCompileFlags
+; utility functions
+    compress
+    compress2
+    compressBound
+    uncompress
+    gzopen
+    gzdopen
+    gzbuffer
+    gzsetparams
+    gzread
+    gzwrite
+    gzprintf
+    gzputs
+    gzgets
+    gzputc
+    gzgetc
+    gzungetc
+    gzflush
+    gzseek
+    gzrewind
+    gztell
+    gzoffset
+    gzeof
+    gzdirect
+    gzclose
+    gzclose_r
+    gzclose_w
+    gzerror
+    gzclearerr
+; large file functions
+    gzopen64
+    gzseek64
+    gztell64
+    gzoffset64
+    adler32_combine64
+    crc32_combine64
+; checksum functions
+    adler32
+    crc32
+    adler32_combine
+    crc32_combine
+; various hacks, don't look :)
+    deflateInit_
+    deflateInit2_
+    inflateInit_
+    inflateInit2_
+    inflateBackInit_
+    gzgetc_
+    zError
+    inflateSyncPoint
+    get_crc_table
+    inflateUndermine
+    inflateResetKeep
+    deflateResetKeep
+    gzopen_w
diff --git a/libs/ext/zlib/libz.vers b/libs/ext/zlib/libz.vers
new file mode 100644
index 0000000..c04c650
--- /dev/null
+++ b/libs/ext/zlib/libz.vers
@@ -0,0 +1 @@
+1.2.7
diff --git a/libs/ext/zlib/trees.c b/libs/ext/zlib/trees.c
new file mode 100644
index 0000000..8c32b21
--- /dev/null
+++ b/libs/ext/zlib/trees.c
@@ -0,0 +1,1224 @@
+/* trees.c -- output deflated data using Huffman coding
+ * Copyright (C) 1995-2012 Jean-loup Gailly
+ * detect_data_type() function provided freely by Cosmin Truta, 2006
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/*
+ *  ALGORITHM
+ *
+ *      The "deflation" process uses several Huffman trees. The more
+ *      common source values are represented by shorter bit sequences.
+ *
+ *      Each code tree is stored in a compressed form which is itself
+ * a Huffman encoding of the lengths of all the code strings (in
+ * ascending order by source values).  The actual code strings are
+ * reconstructed from the lengths in the inflate process, as described
+ * in the deflate specification.
+ *
+ *  REFERENCES
+ *
+ *      Deutsch, L.P.,"'Deflate' Compressed Data Format Specification".
+ *      Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc
+ *
+ *      Storer, James A.
+ *          Data Compression:  Methods and Theory, pp. 49-50.
+ *          Computer Science Press, 1988.  ISBN 0-7167-8156-5.
+ *
+ *      Sedgewick, R.
+ *          Algorithms, p290.
+ *          Addison-Wesley, 1983. ISBN 0-201-06672-6.
+ */
+
+/* @(#) $Id$ */
+
+/* #define GEN_TREES_H */
+
+#include "deflate.h"
+
+#ifdef DEBUG
+#  include <ctype.h>
+#endif
+
+/* ===========================================================================
+ * Constants
+ */
+
+#define MAX_BL_BITS 7
+/* Bit length codes must not exceed MAX_BL_BITS bits */
+
+#define END_BLOCK 256
+/* end of block literal code */
+
+#define REP_3_6      16
+/* repeat previous bit length 3-6 times (2 bits of repeat count) */
+
+#define REPZ_3_10    17
+/* repeat a zero length 3-10 times  (3 bits of repeat count) */
+
+#define REPZ_11_138  18
+/* repeat a zero length 11-138 times  (7 bits of repeat count) */
+
+local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */
+   = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
+
+local const int extra_dbits[D_CODES] /* extra bits for each distance code */
+   = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
+
+local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */
+   = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};
+
+local const uch bl_order[BL_CODES]
+   = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
+/* The lengths of the bit length codes are sent in order of decreasing
+ * probability, to avoid transmitting the lengths for unused bit length codes.
+ */
+
+/* ===========================================================================
+ * Local data. These are initialized only once.
+ */
+
+#define DIST_CODE_LEN  512 /* see definition of array dist_code below */
+
+#if defined(GEN_TREES_H) || !defined(STDC)
+/* non ANSI compilers may not accept trees.h */
+
+local ct_data static_ltree[L_CODES+2];
+/* The static literal tree. Since the bit lengths are imposed, there is no
+ * need for the L_CODES extra codes used during heap construction. However
+ * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
+ * below).
+ */
+
+local ct_data static_dtree[D_CODES];
+/* The static distance tree. (Actually a trivial tree since all codes use
+ * 5 bits.)
+ */
+
+uch _dist_code[DIST_CODE_LEN];
+/* Distance codes. The first 256 values correspond to the distances
+ * 3 .. 258, the last 256 values correspond to the top 8 bits of
+ * the 15 bit distances.
+ */
+
+uch _length_code[MAX_MATCH-MIN_MATCH+1];
+/* length code for each normalized match length (0 == MIN_MATCH) */
+
+local int base_length[LENGTH_CODES];
+/* First normalized length for each code (0 = MIN_MATCH) */
+
+local int base_dist[D_CODES];
+/* First normalized distance for each code (0 = distance of 1) */
+
+#else
+#  include "trees.h"
+#endif /* GEN_TREES_H */
+
+struct static_tree_desc_s {
+    const ct_data *static_tree;  /* static tree or NULL */
+    const intf *extra_bits;      /* extra bits for each code or NULL */
+    int     extra_base;          /* base index for extra_bits */
+    int     elems;               /* max number of elements in the tree */
+    int     max_length;          /* max bit length for the codes */
+};
+
+local static_tree_desc  static_l_desc =
+{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};
+
+local static_tree_desc  static_d_desc =
+{static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS};
+
+local static_tree_desc  static_bl_desc =
+{(const ct_data *)0, extra_blbits, 0,   BL_CODES, MAX_BL_BITS};
+
+/* ===========================================================================
+ * Local (static) routines in this file.
+ */
+
+local void tr_static_init OF((void));
+local void init_block     OF((deflate_state *s));
+local void pqdownheap     OF((deflate_state *s, ct_data *tree, int k));
+local void gen_bitlen     OF((deflate_state *s, tree_desc *desc));
+local void gen_codes      OF((ct_data *tree, int max_code, ushf *bl_count));
+local void build_tree     OF((deflate_state *s, tree_desc *desc));
+local void scan_tree      OF((deflate_state *s, ct_data *tree, int max_code));
+local void send_tree      OF((deflate_state *s, ct_data *tree, int max_code));
+local int  build_bl_tree  OF((deflate_state *s));
+local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
+                              int blcodes));
+local void compress_block OF((deflate_state *s, ct_data *ltree,
+                              ct_data *dtree));
+local int  detect_data_type OF((deflate_state *s));
+local unsigned bi_reverse OF((unsigned value, int length));
+local void bi_windup      OF((deflate_state *s));
+local void bi_flush       OF((deflate_state *s));
+local void copy_block     OF((deflate_state *s, charf *buf, unsigned len,
+                              int header));
+
+#ifdef GEN_TREES_H
+local void gen_trees_header OF((void));
+#endif
+
+#ifndef DEBUG
+#  define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
+   /* Send a code of the given tree. c and tree must not have side effects */
+
+#else /* DEBUG */
+#  define send_code(s, c, tree) \
+     { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
+       send_bits(s, tree[c].Code, tree[c].Len); }
+#endif
+
+/* ===========================================================================
+ * Output a short LSB first on the stream.
+ * IN assertion: there is enough room in pendingBuf.
+ */
+#define put_short(s, w) { \
+    put_byte(s, (uch)((w) & 0xff)); \
+    put_byte(s, (uch)((ush)(w) >> 8)); \
+}
+
+/* ===========================================================================
+ * Send a value on a given number of bits.
+ * IN assertion: length <= 16 and value fits in length bits.
+ */
+#ifdef DEBUG
+local void send_bits      OF((deflate_state *s, int value, int length));
+
+local void send_bits(s, value, length)
+    deflate_state *s;
+    int value;  /* value to send */
+    int length; /* number of bits */
+{
+    Tracevv((stderr," l %2d v %4x ", length, value));
+    Assert(length > 0 && length <= 15, "invalid length");
+    s->bits_sent += (ulg)length;
+
+    /* If not enough room in bi_buf, use (valid) bits from bi_buf and
+     * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid))
+     * unused bits in value.
+     */
+    if (s->bi_valid > (int)Buf_size - length) {
+        s->bi_buf |= (ush)value << s->bi_valid;
+        put_short(s, s->bi_buf);
+        s->bi_buf = (ush)value >> (Buf_size - s->bi_valid);
+        s->bi_valid += length - Buf_size;
+    } else {
+        s->bi_buf |= (ush)value << s->bi_valid;
+        s->bi_valid += length;
+    }
+}
+#else /* !DEBUG */
+
+#define send_bits(s, value, length) \
+{ int len = length;\
+  if (s->bi_valid > (int)Buf_size - len) {\
+    int val = value;\
+    s->bi_buf |= (ush)val << s->bi_valid;\
+    put_short(s, s->bi_buf);\
+    s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\
+    s->bi_valid += len - Buf_size;\
+  } else {\
+    s->bi_buf |= (ush)(value) << s->bi_valid;\
+    s->bi_valid += len;\
+  }\
+}
+#endif /* DEBUG */
+
+
+/* the arguments must not have side effects */
+
+/* ===========================================================================
+ * Initialize the various 'constant' tables.
+ */
+local void tr_static_init()
+{
+#if defined(GEN_TREES_H) || !defined(STDC)
+    static int static_init_done = 0;
+    int n;        /* iterates over tree elements */
+    int bits;     /* bit counter */
+    int length;   /* length value */
+    int code;     /* code value */
+    int dist;     /* distance index */
+    ush bl_count[MAX_BITS+1];
+    /* number of codes at each bit length for an optimal tree */
+
+    if (static_init_done) return;
+
+    /* For some embedded targets, global variables are not initialized: */
+#ifdef NO_INIT_GLOBAL_POINTERS
+    static_l_desc.static_tree = static_ltree;
+    static_l_desc.extra_bits = extra_lbits;
+    static_d_desc.static_tree = static_dtree;
+    static_d_desc.extra_bits = extra_dbits;
+    static_bl_desc.extra_bits = extra_blbits;
+#endif
+
+    /* Initialize the mapping length (0..255) -> length code (0..28) */
+    length = 0;
+    for (code = 0; code < LENGTH_CODES-1; code++) {
+        base_length[code] = length;
+        for (n = 0; n < (1<<extra_lbits[code]); n++) {
+            _length_code[length++] = (uch)code;
+        }
+    }
+    Assert (length == 256, "tr_static_init: length != 256");
+    /* Note that the length 255 (match length 258) can be represented
+     * in two different ways: code 284 + 5 bits or code 285, so we
+     * overwrite length_code[255] to use the best encoding:
+     */
+    _length_code[length-1] = (uch)code;
+
+    /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
+    dist = 0;
+    for (code = 0 ; code < 16; code++) {
+        base_dist[code] = dist;
+        for (n = 0; n < (1<<extra_dbits[code]); n++) {
+            _dist_code[dist++] = (uch)code;
+        }
+    }
+    Assert (dist == 256, "tr_static_init: dist != 256");
+    dist >>= 7; /* from now on, all distances are divided by 128 */
+    for ( ; code < D_CODES; code++) {
+        base_dist[code] = dist << 7;
+        for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
+            _dist_code[256 + dist++] = (uch)code;
+        }
+    }
+    Assert (dist == 256, "tr_static_init: 256+dist != 512");
+
+    /* Construct the codes of the static literal tree */
+    for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0;
+    n = 0;
+    while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++;
+    while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++;
+    while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++;
+    while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++;
+    /* Codes 286 and 287 do not exist, but we must include them in the
+     * tree construction to get a canonical Huffman tree (longest code
+     * all ones)
+     */
+    gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count);
+
+    /* The static distance tree is trivial: */
+    for (n = 0; n < D_CODES; n++) {
+        static_dtree[n].Len = 5;
+        static_dtree[n].Code = bi_reverse((unsigned)n, 5);
+    }
+    static_init_done = 1;
+
+#  ifdef GEN_TREES_H
+    gen_trees_header();
+#  endif
+#endif /* defined(GEN_TREES_H) || !defined(STDC) */
+}
+
+/* ===========================================================================
+ * Genererate the file trees.h describing the static trees.
+ */
+#ifdef GEN_TREES_H
+#  ifndef DEBUG
+#    include <stdio.h>
+#  endif
+
+#  define SEPARATOR(i, last, width) \
+      ((i) == (last)? "\n};\n\n" :    \
+       ((i) % (width) == (width)-1 ? ",\n" : ", "))
+
+void gen_trees_header()
+{
+    FILE *header = fopen("trees.h", "w");
+    int i;
+
+    Assert (header != NULL, "Can't open trees.h");
+    fprintf(header,
+            "/* header created automatically with -DGEN_TREES_H */\n\n");
+
+    fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n");
+    for (i = 0; i < L_CODES+2; i++) {
+        fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code,
+                static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5));
+    }
+
+    fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n");
+    for (i = 0; i < D_CODES; i++) {
+        fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code,
+                static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5));
+    }
+
+    fprintf(header, "const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = {\n");
+    for (i = 0; i < DIST_CODE_LEN; i++) {
+        fprintf(header, "%2u%s", _dist_code[i],
+                SEPARATOR(i, DIST_CODE_LEN-1, 20));
+    }
+
+    fprintf(header,
+        "const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= {\n");
+    for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) {
+        fprintf(header, "%2u%s", _length_code[i],
+                SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20));
+    }
+
+    fprintf(header, "local const int base_length[LENGTH_CODES] = {\n");
+    for (i = 0; i < LENGTH_CODES; i++) {
+        fprintf(header, "%1u%s", base_length[i],
+                SEPARATOR(i, LENGTH_CODES-1, 20));
+    }
+
+    fprintf(header, "local const int base_dist[D_CODES] = {\n");
+    for (i = 0; i < D_CODES; i++) {
+        fprintf(header, "%5u%s", base_dist[i],
+                SEPARATOR(i, D_CODES-1, 10));
+    }
+
+    fclose(header);
+}
+#endif /* GEN_TREES_H */
+
+/* ===========================================================================
+ * Initialize the tree data structures for a new zlib stream.
+ */
+void ZLIB_INTERNAL _tr_init(s)
+    deflate_state *s;
+{
+    tr_static_init();
+
+    s->l_desc.dyn_tree = s->dyn_ltree;
+    s->l_desc.stat_desc = &static_l_desc;
+
+    s->d_desc.dyn_tree = s->dyn_dtree;
+    s->d_desc.stat_desc = &static_d_desc;
+
+    s->bl_desc.dyn_tree = s->bl_tree;
+    s->bl_desc.stat_desc = &static_bl_desc;
+
+    s->bi_buf = 0;
+    s->bi_valid = 0;
+#ifdef DEBUG
+    s->compressed_len = 0L;
+    s->bits_sent = 0L;
+#endif
+
+    /* Initialize the first block of the first file: */
+    init_block(s);
+}
+
+/* ===========================================================================
+ * Initialize a new block.
+ */
+local void init_block(s)
+    deflate_state *s;
+{
+    int n; /* iterates over tree elements */
+
+    /* Initialize the trees. */
+    for (n = 0; n < L_CODES;  n++) s->dyn_ltree[n].Freq = 0;
+    for (n = 0; n < D_CODES;  n++) s->dyn_dtree[n].Freq = 0;
+    for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;
+
+    s->dyn_ltree[END_BLOCK].Freq = 1;
+    s->opt_len = s->static_len = 0L;
+    s->last_lit = s->matches = 0;
+}
+
+#define SMALLEST 1
+/* Index within the heap array of least frequent node in the Huffman tree */
+
+
+/* ===========================================================================
+ * Remove the smallest element from the heap and recreate the heap with
+ * one less element. Updates heap and heap_len.
+ */
+#define pqremove(s, tree, top) \
+{\
+    top = s->heap[SMALLEST]; \
+    s->heap[SMALLEST] = s->heap[s->heap_len--]; \
+    pqdownheap(s, tree, SMALLEST); \
+}
+
+/* ===========================================================================
+ * Compares to subtrees, using the tree depth as tie breaker when
+ * the subtrees have equal frequency. This minimizes the worst case length.
+ */
+#define smaller(tree, n, m, depth) \
+   (tree[n].Freq < tree[m].Freq || \
+   (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m]))
+
+/* ===========================================================================
+ * Restore the heap property by moving down the tree starting at node k,
+ * exchanging a node with the smallest of its two sons if necessary, stopping
+ * when the heap property is re-established (each father smaller than its
+ * two sons).
+ */
+local void pqdownheap(s, tree, k)
+    deflate_state *s;
+    ct_data *tree;  /* the tree to restore */
+    int k;               /* node to move down */
+{
+    int v = s->heap[k];
+    int j = k << 1;  /* left son of k */
+    while (j <= s->heap_len) {
+        /* Set j to the smallest of the two sons: */
+        if (j < s->heap_len &&
+            smaller(tree, s->heap[j+1], s->heap[j], s->depth)) {
+            j++;
+        }
+        /* Exit if v is smaller than both sons */
+        if (smaller(tree, v, s->heap[j], s->depth)) break;
+
+        /* Exchange v with the smallest son */
+        s->heap[k] = s->heap[j];  k = j;
+
+        /* And continue down the tree, setting j to the left son of k */
+        j <<= 1;
+    }
+    s->heap[k] = v;
+}
+
+/* ===========================================================================
+ * Compute the optimal bit lengths for a tree and update the total bit length
+ * for the current block.
+ * IN assertion: the fields freq and dad are set, heap[heap_max] and
+ *    above are the tree nodes sorted by increasing frequency.
+ * OUT assertions: the field len is set to the optimal bit length, the
+ *     array bl_count contains the frequencies for each bit length.
+ *     The length opt_len is updated; static_len is also updated if stree is
+ *     not null.
+ */
+local void gen_bitlen(s, desc)
+    deflate_state *s;
+    tree_desc *desc;    /* the tree descriptor */
+{
+    ct_data *tree        = desc->dyn_tree;
+    int max_code         = desc->max_code;
+    const ct_data *stree = desc->stat_desc->static_tree;
+    const intf *extra    = desc->stat_desc->extra_bits;
+    int base             = desc->stat_desc->extra_base;
+    int max_length       = desc->stat_desc->max_length;
+    int h;              /* heap index */
+    int n, m;           /* iterate over the tree elements */
+    int bits;           /* bit length */
+    int xbits;          /* extra bits */
+    ush f;              /* frequency */
+    int overflow = 0;   /* number of elements with bit length too large */
+
+    for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0;
+
+    /* In a first pass, compute the optimal bit lengths (which may
+     * overflow in the case of the bit length tree).
+     */
+    tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */
+
+    for (h = s->heap_max+1; h < HEAP_SIZE; h++) {
+        n = s->heap[h];
+        bits = tree[tree[n].Dad].Len + 1;
+        if (bits > max_length) bits = max_length, overflow++;
+        tree[n].Len = (ush)bits;
+        /* We overwrite tree[n].Dad which is no longer needed */
+
+        if (n > max_code) continue; /* not a leaf node */
+
+        s->bl_count[bits]++;
+        xbits = 0;
+        if (n >= base) xbits = extra[n-base];
+        f = tree[n].Freq;
+        s->opt_len += (ulg)f * (bits + xbits);
+        if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);
+    }
+    if (overflow == 0) return;
+
+    Trace((stderr,"\nbit length overflow\n"));
+    /* This happens for example on obj2 and pic of the Calgary corpus */
+
+    /* Find the first bit length which could increase: */
+    do {
+        bits = max_length-1;
+        while (s->bl_count[bits] == 0) bits--;
+        s->bl_count[bits]--;      /* move one leaf down the tree */
+        s->bl_count[bits+1] += 2; /* move one overflow item as its brother */
+        s->bl_count[max_length]--;
+        /* The brother of the overflow item also moves one step up,
+         * but this does not affect bl_count[max_length]
+         */
+        overflow -= 2;
+    } while (overflow > 0);
+
+    /* Now recompute all bit lengths, scanning in increasing frequency.
+     * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
+     * lengths instead of fixing only the wrong ones. This idea is taken
+     * from 'ar' written by Haruhiko Okumura.)
+     */
+    for (bits = max_length; bits != 0; bits--) {
+        n = s->bl_count[bits];
+        while (n != 0) {
+            m = s->heap[--h];
+            if (m > max_code) continue;
+            if ((unsigned) tree[m].Len != (unsigned) bits) {
+                Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
+                s->opt_len += ((long)bits - (long)tree[m].Len)
+                              *(long)tree[m].Freq;
+                tree[m].Len = (ush)bits;
+            }
+            n--;
+        }
+    }
+}
+
+/* ===========================================================================
+ * Generate the codes for a given tree and bit counts (which need not be
+ * optimal).
+ * IN assertion: the array bl_count contains the bit length statistics for
+ * the given tree and the field len is set for all tree elements.
+ * OUT assertion: the field code is set for all tree elements of non
+ *     zero code length.
+ */
+local void gen_codes (tree, max_code, bl_count)
+    ct_data *tree;             /* the tree to decorate */
+    int max_code;              /* largest code with non zero frequency */
+    ushf *bl_count;            /* number of codes at each bit length */
+{
+    ush next_code[MAX_BITS+1]; /* next code value for each bit length */
+    ush code = 0;              /* running code value */
+    int bits;                  /* bit index */
+    int n;                     /* code index */
+
+    /* The distribution counts are first used to generate the code values
+     * without bit reversal.
+     */
+    for (bits = 1; bits <= MAX_BITS; bits++) {
+        next_code[bits] = code = (code + bl_count[bits-1]) << 1;
+    }
+    /* Check that the bit counts in bl_count are consistent. The last code
+     * must be all ones.
+     */
+    Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
+            "inconsistent bit counts");
+    Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
+
+    for (n = 0;  n <= max_code; n++) {
+        int len = tree[n].Len;
+        if (len == 0) continue;
+        /* Now reverse the bits */
+        tree[n].Code = bi_reverse(next_code[len]++, len);
+
+        Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
+             n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
+    }
+}
+
+/* ===========================================================================
+ * Construct one Huffman tree and assigns the code bit strings and lengths.
+ * Update the total bit length for the current block.
+ * IN assertion: the field freq is set for all tree elements.
+ * OUT assertions: the fields len and code are set to the optimal bit length
+ *     and corresponding code. The length opt_len is updated; static_len is
+ *     also updated if stree is not null. The field max_code is set.
+ */
+local void build_tree(s, desc)
+    deflate_state *s;
+    tree_desc *desc; /* the tree descriptor */
+{
+    ct_data *tree         = desc->dyn_tree;
+    const ct_data *stree  = desc->stat_desc->static_tree;
+    int elems             = desc->stat_desc->elems;
+    int n, m;          /* iterate over heap elements */
+    int max_code = -1; /* largest code with non zero frequency */
+    int node;          /* new node being created */
+
+    /* Construct the initial heap, with least frequent element in
+     * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
+     * heap[0] is not used.
+     */
+    s->heap_len = 0, s->heap_max = HEAP_SIZE;
+
+    for (n = 0; n < elems; n++) {
+        if (tree[n].Freq != 0) {
+            s->heap[++(s->heap_len)] = max_code = n;
+            s->depth[n] = 0;
+        } else {
+            tree[n].Len = 0;
+        }
+    }
+
+    /* The pkzip format requires that at least one distance code exists,
+     * and that at least one bit should be sent even if there is only one
+     * possible code. So to avoid special checks later on we force at least
+     * two codes of non zero frequency.
+     */
+    while (s->heap_len < 2) {
+        node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0);
+        tree[node].Freq = 1;
+        s->depth[node] = 0;
+        s->opt_len--; if (stree) s->static_len -= stree[node].Len;
+        /* node is 0 or 1 so it does not have extra bits */
+    }
+    desc->max_code = max_code;
+
+    /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
+     * establish sub-heaps of increasing lengths:
+     */
+    for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n);
+
+    /* Construct the Huffman tree by repeatedly combining the least two
+     * frequent nodes.
+     */
+    node = elems;              /* next internal node of the tree */
+    do {
+        pqremove(s, tree, n);  /* n = node of least frequency */
+        m = s->heap[SMALLEST]; /* m = node of next least frequency */
+
+        s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */
+        s->heap[--(s->heap_max)] = m;
+
+        /* Create a new node father of n and m */
+        tree[node].Freq = tree[n].Freq + tree[m].Freq;
+        s->depth[node] = (uch)((s->depth[n] >= s->depth[m] ?
+                                s->depth[n] : s->depth[m]) + 1);
+        tree[n].Dad = tree[m].Dad = (ush)node;
+#ifdef DUMP_BL_TREE
+        if (tree == s->bl_tree) {
+            fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)",
+                    node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq);
+        }
+#endif
+        /* and insert the new node in the heap */
+        s->heap[SMALLEST] = node++;
+        pqdownheap(s, tree, SMALLEST);
+
+    } while (s->heap_len >= 2);
+
+    s->heap[--(s->heap_max)] = s->heap[SMALLEST];
+
+    /* At this point, the fields freq and dad are set. We can now
+     * generate the bit lengths.
+     */
+    gen_bitlen(s, (tree_desc *)desc);
+
+    /* The field len is now set, we can generate the bit codes */
+    gen_codes ((ct_data *)tree, max_code, s->bl_count);
+}
+
+/* ===========================================================================
+ * Scan a literal or distance tree to determine the frequencies of the codes
+ * in the bit length tree.
+ */
+local void scan_tree (s, tree, max_code)
+    deflate_state *s;
+    ct_data *tree;   /* the tree to be scanned */
+    int max_code;    /* and its largest code of non zero frequency */
+{
+    int n;                     /* iterates over all tree elements */
+    int prevlen = -1;          /* last emitted length */
+    int curlen;                /* length of current code */
+    int nextlen = tree[0].Len; /* length of next code */
+    int count = 0;             /* repeat count of the current code */
+    int max_count = 7;         /* max repeat count */
+    int min_count = 4;         /* min repeat count */
+
+    if (nextlen == 0) max_count = 138, min_count = 3;
+    tree[max_code+1].Len = (ush)0xffff; /* guard */
+
+    for (n = 0; n <= max_code; n++) {
+        curlen = nextlen; nextlen = tree[n+1].Len;
+        if (++count < max_count && curlen == nextlen) {
+            continue;
+        } else if (count < min_count) {
+            s->bl_tree[curlen].Freq += count;
+        } else if (curlen != 0) {
+            if (curlen != prevlen) s->bl_tree[curlen].Freq++;
+            s->bl_tree[REP_3_6].Freq++;
+        } else if (count <= 10) {
+            s->bl_tree[REPZ_3_10].Freq++;
+        } else {
+            s->bl_tree[REPZ_11_138].Freq++;
+        }
+        count = 0; prevlen = curlen;
+        if (nextlen == 0) {
+            max_count = 138, min_count = 3;
+        } else if (curlen == nextlen) {
+            max_count = 6, min_count = 3;
+        } else {
+            max_count = 7, min_count = 4;
+        }
+    }
+}
+
+/* ===========================================================================
+ * Send a literal or distance tree in compressed form, using the codes in
+ * bl_tree.
+ */
+local void send_tree (s, tree, max_code)
+    deflate_state *s;
+    ct_data *tree; /* the tree to be scanned */
+    int max_code;       /* and its largest code of non zero frequency */
+{
+    int n;                     /* iterates over all tree elements */
+    int prevlen = -1;          /* last emitted length */
+    int curlen;                /* length of current code */
+    int nextlen = tree[0].Len; /* length of next code */
+    int count = 0;             /* repeat count of the current code */
+    int max_count = 7;         /* max repeat count */
+    int min_count = 4;         /* min repeat count */
+
+    /* tree[max_code+1].Len = -1; */  /* guard already set */
+    if (nextlen == 0) max_count = 138, min_count = 3;
+
+    for (n = 0; n <= max_code; n++) {
+        curlen = nextlen; nextlen = tree[n+1].Len;
+        if (++count < max_count && curlen == nextlen) {
+            continue;
+        } else if (count < min_count) {
+            do { send_code(s, curlen, s->bl_tree); } while (--count != 0);
+
+        } else if (curlen != 0) {
+            if (curlen != prevlen) {
+                send_code(s, curlen, s->bl_tree); count--;
+            }
+            Assert(count >= 3 && count <= 6, " 3_6?");
+            send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2);
+
+        } else if (count <= 10) {
+            send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3);
+
+        } else {
+            send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7);
+        }
+        count = 0; prevlen = curlen;
+        if (nextlen == 0) {
+            max_count = 138, min_count = 3;
+        } else if (curlen == nextlen) {
+            max_count = 6, min_count = 3;
+        } else {
+            max_count = 7, min_count = 4;
+        }
+    }
+}
+
+/* ===========================================================================
+ * Construct the Huffman tree for the bit lengths and return the index in
+ * bl_order of the last bit length code to send.
+ */
+local int build_bl_tree(s)
+    deflate_state *s;
+{
+    int max_blindex;  /* index of last bit length code of non zero freq */
+
+    /* Determine the bit length frequencies for literal and distance trees */
+    scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code);
+    scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code);
+
+    /* Build the bit length tree: */
+    build_tree(s, (tree_desc *)(&(s->bl_desc)));
+    /* opt_len now includes the length of the tree representations, except
+     * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
+     */
+
+    /* Determine the number of bit length codes to send. The pkzip format
+     * requires that at least 4 bit length codes be sent. (appnote.txt says
+     * 3 but the actual value used is 4.)
+     */
+    for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
+        if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
+    }
+    /* Update opt_len to include the bit length tree and counts */
+    s->opt_len += 3*(max_blindex+1) + 5+5+4;
+    Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
+            s->opt_len, s->static_len));
+
+    return max_blindex;
+}
+
+/* ===========================================================================
+ * Send the header for a block using dynamic Huffman trees: the counts, the
+ * lengths of the bit length codes, the literal tree and the distance tree.
+ * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
+ */
+local void send_all_trees(s, lcodes, dcodes, blcodes)
+    deflate_state *s;
+    int lcodes, dcodes, blcodes; /* number of codes for each tree */
+{
+    int rank;                    /* index in bl_order */
+
+    Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
+    Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
+            "too many codes");
+    Tracev((stderr, "\nbl counts: "));
+    send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */
+    send_bits(s, dcodes-1,   5);
+    send_bits(s, blcodes-4,  4); /* not -3 as stated in appnote.txt */
+    for (rank = 0; rank < blcodes; rank++) {
+        Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
+        send_bits(s, s->bl_tree[bl_order[rank]].Len, 3);
+    }
+    Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
+
+    send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */
+    Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
+
+    send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */
+    Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
+}
+
+/* ===========================================================================
+ * Send a stored block
+ */
+void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last)
+    deflate_state *s;
+    charf *buf;       /* input block */
+    ulg stored_len;   /* length of input block */
+    int last;         /* one if this is the last block for a file */
+{
+    send_bits(s, (STORED_BLOCK<<1)+last, 3);    /* send block type */
+#ifdef DEBUG
+    s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
+    s->compressed_len += (stored_len + 4) << 3;
+#endif
+    copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
+}
+
+/* ===========================================================================
+ * Flush the bits in the bit buffer to pending output (leaves at most 7 bits)
+ */
+void ZLIB_INTERNAL _tr_flush_bits(s)
+    deflate_state *s;
+{
+    bi_flush(s);
+}
+
+/* ===========================================================================
+ * Send one empty static block to give enough lookahead for inflate.
+ * This takes 10 bits, of which 7 may remain in the bit buffer.
+ */
+void ZLIB_INTERNAL _tr_align(s)
+    deflate_state *s;
+{
+    send_bits(s, STATIC_TREES<<1, 3);
+    send_code(s, END_BLOCK, static_ltree);
+#ifdef DEBUG
+    s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
+#endif
+    bi_flush(s);
+}
+
+/* ===========================================================================
+ * Determine the best encoding for the current block: dynamic trees, static
+ * trees or store, and output the encoded block to the zip file.
+ */
+void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
+    deflate_state *s;
+    charf *buf;       /* input block, or NULL if too old */
+    ulg stored_len;   /* length of input block */
+    int last;         /* one if this is the last block for a file */
+{
+    ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */
+    int max_blindex = 0;  /* index of last bit length code of non zero freq */
+
+    /* Build the Huffman trees unless a stored block is forced */
+    if (s->level > 0) {
+
+        /* Check if the file is binary or text */
+        if (s->strm->data_type == Z_UNKNOWN)
+            s->strm->data_type = detect_data_type(s);
+
+        /* Construct the literal and distance trees */
+        build_tree(s, (tree_desc *)(&(s->l_desc)));
+        Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
+                s->static_len));
+
+        build_tree(s, (tree_desc *)(&(s->d_desc)));
+        Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
+                s->static_len));
+        /* At this point, opt_len and static_len are the total bit lengths of
+         * the compressed block data, excluding the tree representations.
+         */
+
+        /* Build the bit length tree for the above two trees, and get the index
+         * in bl_order of the last bit length code to send.
+         */
+        max_blindex = build_bl_tree(s);
+
+        /* Determine the best encoding. Compute the block lengths in bytes. */
+        opt_lenb = (s->opt_len+3+7)>>3;
+        static_lenb = (s->static_len+3+7)>>3;
+
+        Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
+                opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
+                s->last_lit));
+
+        if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
+
+    } else {
+        Assert(buf != (char*)0, "lost buf");
+        opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
+    }
+
+#ifdef FORCE_STORED
+    if (buf != (char*)0) { /* force stored block */
+#else
+    if (stored_len+4 <= opt_lenb && buf != (char*)0) {
+                       /* 4: two words for the lengths */
+#endif
+        /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
+         * Otherwise we can't have processed more than WSIZE input bytes since
+         * the last block flush, because compression would have been
+         * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
+         * transform a block into a stored block.
+         */
+        _tr_stored_block(s, buf, stored_len, last);
+
+#ifdef FORCE_STATIC
+    } else if (static_lenb >= 0) { /* force static trees */
+#else
+    } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) {
+#endif
+        send_bits(s, (STATIC_TREES<<1)+last, 3);
+        compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree);
+#ifdef DEBUG
+        s->compressed_len += 3 + s->static_len;
+#endif
+    } else {
+        send_bits(s, (DYN_TREES<<1)+last, 3);
+        send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1,
+                       max_blindex+1);
+        compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree);
+#ifdef DEBUG
+        s->compressed_len += 3 + s->opt_len;
+#endif
+    }
+    Assert (s->compressed_len == s->bits_sent, "bad compressed size");
+    /* The above check is made mod 2^32, for files larger than 512 MB
+     * and uLong implemented on 32 bits.
+     */
+    init_block(s);
+
+    if (last) {
+        bi_windup(s);
+#ifdef DEBUG
+        s->compressed_len += 7;  /* align on byte boundary */
+#endif
+    }
+    Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
+           s->compressed_len-7*last));
+}
+
+/* ===========================================================================
+ * Save the match info and tally the frequency counts. Return true if
+ * the current block must be flushed.
+ */
+int ZLIB_INTERNAL _tr_tally (s, dist, lc)
+    deflate_state *s;
+    unsigned dist;  /* distance of matched string */
+    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */
+{
+    s->d_buf[s->last_lit] = (ush)dist;
+    s->l_buf[s->last_lit++] = (uch)lc;
+    if (dist == 0) {
+        /* lc is the unmatched char */
+        s->dyn_ltree[lc].Freq++;
+    } else {
+        s->matches++;
+        /* Here, lc is the match length - MIN_MATCH */
+        dist--;             /* dist = match distance - 1 */
+        Assert((ush)dist < (ush)MAX_DIST(s) &&
+               (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
+               (ush)d_code(dist) < (ush)D_CODES,  "_tr_tally: bad match");
+
+        s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++;
+        s->dyn_dtree[d_code(dist)].Freq++;
+    }
+
+#ifdef TRUNCATE_BLOCK
+    /* Try to guess if it is profitable to stop the current block here */
+    if ((s->last_lit & 0x1fff) == 0 && s->level > 2) {
+        /* Compute an upper bound for the compressed length */
+        ulg out_length = (ulg)s->last_lit*8L;
+        ulg in_length = (ulg)((long)s->strstart - s->block_start);
+        int dcode;
+        for (dcode = 0; dcode < D_CODES; dcode++) {
+            out_length += (ulg)s->dyn_dtree[dcode].Freq *
+                (5L+extra_dbits[dcode]);
+        }
+        out_length >>= 3;
+        Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
+               s->last_lit, in_length, out_length,
+               100L - out_length*100L/in_length));
+        if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;
+    }
+#endif
+    return (s->last_lit == s->lit_bufsize-1);
+    /* We avoid equality with lit_bufsize because of wraparound at 64K
+     * on 16 bit machines and because stored blocks are restricted to
+     * 64K-1 bytes.
+     */
+}
+
+/* ===========================================================================
+ * Send the block data compressed using the given Huffman trees
+ */
+local void compress_block(s, ltree, dtree)
+    deflate_state *s;
+    ct_data *ltree; /* literal tree */
+    ct_data *dtree; /* distance tree */
+{
+    unsigned dist;      /* distance of matched string */
+    int lc;             /* match length or unmatched char (if dist == 0) */
+    unsigned lx = 0;    /* running index in l_buf */
+    unsigned code;      /* the code to send */
+    int extra;          /* number of extra bits to send */
+
+    if (s->last_lit != 0) do {
+        dist = s->d_buf[lx];
+        lc = s->l_buf[lx++];
+        if (dist == 0) {
+            send_code(s, lc, ltree); /* send a literal byte */
+            Tracecv(isgraph(lc), (stderr," '%c' ", lc));
+        } else {
+            /* Here, lc is the match length - MIN_MATCH */
+            code = _length_code[lc];
+            send_code(s, code+LITERALS+1, ltree); /* send the length code */
+            extra = extra_lbits[code];
+            if (extra != 0) {
+                lc -= base_length[code];
+                send_bits(s, lc, extra);       /* send the extra length bits */
+            }
+            dist--; /* dist is now the match distance - 1 */
+            code = d_code(dist);
+            Assert (code < D_CODES, "bad d_code");
+
+            send_code(s, code, dtree);       /* send the distance code */
+            extra = extra_dbits[code];
+            if (extra != 0) {
+                dist -= base_dist[code];
+                send_bits(s, dist, extra);   /* send the extra distance bits */
+            }
+        } /* literal or match pair ? */
+
+        /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
+        Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
+               "pendingBuf overflow");
+
+    } while (lx < s->last_lit);
+
+    send_code(s, END_BLOCK, ltree);
+}
+
+/* ===========================================================================
+ * Check if the data type is TEXT or BINARY, using the following algorithm:
+ * - TEXT if the two conditions below are satisfied:
+ *    a) There are no non-portable control characters belonging to the
+ *       "black list" (0..6, 14..25, 28..31).
+ *    b) There is at least one printable character belonging to the
+ *       "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
+ * - BINARY otherwise.
+ * - The following partially-portable control characters form a
+ *   "gray list" that is ignored in this detection algorithm:
+ *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
+ * IN assertion: the fields Freq of dyn_ltree are set.
+ */
+local int detect_data_type(s)
+    deflate_state *s;
+{
+    /* black_mask is the bit mask of black-listed bytes
+     * set bits 0..6, 14..25, and 28..31
+     * 0xf3ffc07f = binary 11110011111111111100000001111111
+     */
+    unsigned long black_mask = 0xf3ffc07fUL;
+    int n;
+
+    /* Check for non-textual ("black-listed") bytes. */
+    for (n = 0; n <= 31; n++, black_mask >>= 1)
+        if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0))
+            return Z_BINARY;
+
+    /* Check for textual ("white-listed") bytes. */
+    if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0
+            || s->dyn_ltree[13].Freq != 0)
+        return Z_TEXT;
+    for (n = 32; n < LITERALS; n++)
+        if (s->dyn_ltree[n].Freq != 0)
+            return Z_TEXT;
+
+    /* There are no "black-listed" or "white-listed" bytes:
+     * this stream either is empty or has tolerated ("gray-listed") bytes only.
+     */
+    return Z_BINARY;
+}
+
+/* ===========================================================================
+ * Reverse the first len bits of a code, using straightforward code (a faster
+ * method would use a table)
+ * IN assertion: 1 <= len <= 15
+ */
+local unsigned bi_reverse(code, len)
+    unsigned code; /* the value to invert */
+    int len;       /* its bit length */
+{
+    register unsigned res = 0;
+    do {
+        res |= code & 1;
+        code >>= 1, res <<= 1;
+    } while (--len > 0);
+    return res >> 1;
+}
+
+/* ===========================================================================
+ * Flush the bit buffer, keeping at most 7 bits in it.
+ */
+local void bi_flush(s)
+    deflate_state *s;
+{
+    if (s->bi_valid == 16) {
+        put_short(s, s->bi_buf);
+        s->bi_buf = 0;
+        s->bi_valid = 0;
+    } else if (s->bi_valid >= 8) {
+        put_byte(s, (Byte)s->bi_buf);
+        s->bi_buf >>= 8;
+        s->bi_valid -= 8;
+    }
+}
+
+/* ===========================================================================
+ * Flush the bit buffer and align the output on a byte boundary
+ */
+local void bi_windup(s)
+    deflate_state *s;
+{
+    if (s->bi_valid > 8) {
+        put_short(s, s->bi_buf);
+    } else if (s->bi_valid > 0) {
+        put_byte(s, (Byte)s->bi_buf);
+    }
+    s->bi_buf = 0;
+    s->bi_valid = 0;
+#ifdef DEBUG
+    s->bits_sent = (s->bits_sent+7) & ~7;
+#endif
+}
+
+/* ===========================================================================
+ * Copy a stored block, storing first the length and its
+ * one's complement if requested.
+ */
+local void copy_block(s, buf, len, header)
+    deflate_state *s;
+    charf    *buf;    /* the input data */
+    unsigned len;     /* its length */
+    int      header;  /* true if block header must be written */
+{
+    bi_windup(s);        /* align on byte boundary */
+
+    if (header) {
+        put_short(s, (ush)len);
+        put_short(s, (ush)~len);
+#ifdef DEBUG
+        s->bits_sent += 2*16;
+#endif
+    }
+#ifdef DEBUG
+    s->bits_sent += (ulg)len<<3;
+#endif
+    while (len--) {
+        put_byte(s, *buf++);
+    }
+}
diff --git a/libs/ext/zlib/trees.h b/libs/ext/zlib/trees.h
new file mode 100644
index 0000000..d35639d
--- /dev/null
+++ b/libs/ext/zlib/trees.h
@@ -0,0 +1,128 @@
+/* header created automatically with -DGEN_TREES_H */
+
+local const ct_data static_ltree[L_CODES+2] = {
+{{ 12},{  8}}, {{140},{  8}}, {{ 76},{  8}}, {{204},{  8}}, {{ 44},{  8}},
+{{172},{  8}}, {{108},{  8}}, {{236},{  8}}, {{ 28},{  8}}, {{156},{  8}},
+{{ 92},{  8}}, {{220},{  8}}, {{ 60},{  8}}, {{188},{  8}}, {{124},{  8}},
+{{252},{  8}}, {{  2},{  8}}, {{130},{  8}}, {{ 66},{  8}}, {{194},{  8}},
+{{ 34},{  8}}, {{162},{  8}}, {{ 98},{  8}}, {{226},{  8}}, {{ 18},{  8}},
+{{146},{  8}}, {{ 82},{  8}}, {{210},{  8}}, {{ 50},{  8}}, {{178},{  8}},
+{{114},{  8}}, {{242},{  8}}, {{ 10},{  8}}, {{138},{  8}}, {{ 74},{  8}},
+{{202},{  8}}, {{ 42},{  8}}, {{170},{  8}}, {{106},{  8}}, {{234},{  8}},
+{{ 26},{  8}}, {{154},{  8}}, {{ 90},{  8}}, {{218},{  8}}, {{ 58},{  8}},
+{{186},{  8}}, {{122},{  8}}, {{250},{  8}}, {{  6},{  8}}, {{134},{  8}},
+{{ 70},{  8}}, {{198},{  8}}, {{ 38},{  8}}, {{166},{  8}}, {{102},{  8}},
+{{230},{  8}}, {{ 22},{  8}}, {{150},{  8}}, {{ 86},{  8}}, {{214},{  8}},
+{{ 54},{  8}}, {{182},{  8}}, {{118},{  8}}, {{246},{  8}}, {{ 14},{  8}},
+{{142},{  8}}, {{ 78},{  8}}, {{206},{  8}}, {{ 46},{  8}}, {{174},{  8}},
+{{110},{  8}}, {{238},{  8}}, {{ 30},{  8}}, {{158},{  8}}, {{ 94},{  8}},
+{{222},{  8}}, {{ 62},{  8}}, {{190},{  8}}, {{126},{  8}}, {{254},{  8}},
+{{  1},{  8}}, {{129},{  8}}, {{ 65},{  8}}, {{193},{  8}}, {{ 33},{  8}},
+{{161},{  8}}, {{ 97},{  8}}, {{225},{  8}}, {{ 17},{  8}}, {{145},{  8}},
+{{ 81},{  8}}, {{209},{  8}}, {{ 49},{  8}}, {{177},{  8}}, {{113},{  8}},
+{{241},{  8}}, {{  9},{  8}}, {{137},{  8}}, {{ 73},{  8}}, {{201},{  8}},
+{{ 41},{  8}}, {{169},{  8}}, {{105},{  8}}, {{233},{  8}}, {{ 25},{  8}},
+{{153},{  8}}, {{ 89},{  8}}, {{217},{  8}}, {{ 57},{  8}}, {{185},{  8}},
+{{121},{  8}}, {{249},{  8}}, {{  5},{  8}}, {{133},{  8}}, {{ 69},{  8}},
+{{197},{  8}}, {{ 37},{  8}}, {{165},{  8}}, {{101},{  8}}, {{229},{  8}},
+{{ 21},{  8}}, {{149},{  8}}, {{ 85},{  8}}, {{213},{  8}}, {{ 53},{  8}},
+{{181},{  8}}, {{117},{  8}}, {{245},{  8}}, {{ 13},{  8}}, {{141},{  8}},
+{{ 77},{  8}}, {{205},{  8}}, {{ 45},{  8}}, {{173},{  8}}, {{109},{  8}},
+{{237},{  8}}, {{ 29},{  8}}, {{157},{  8}}, {{ 93},{  8}}, {{221},{  8}},
+{{ 61},{  8}}, {{189},{  8}}, {{125},{  8}}, {{253},{  8}}, {{ 19},{  9}},
+{{275},{  9}}, {{147},{  9}}, {{403},{  9}}, {{ 83},{  9}}, {{339},{  9}},
+{{211},{  9}}, {{467},{  9}}, {{ 51},{  9}}, {{307},{  9}}, {{179},{  9}},
+{{435},{  9}}, {{115},{  9}}, {{371},{  9}}, {{243},{  9}}, {{499},{  9}},
+{{ 11},{  9}}, {{267},{  9}}, {{139},{  9}}, {{395},{  9}}, {{ 75},{  9}},
+{{331},{  9}}, {{203},{  9}}, {{459},{  9}}, {{ 43},{  9}}, {{299},{  9}},
+{{171},{  9}}, {{427},{  9}}, {{107},{  9}}, {{363},{  9}}, {{235},{  9}},
+{{491},{  9}}, {{ 27},{  9}}, {{283},{  9}}, {{155},{  9}}, {{411},{  9}},
+{{ 91},{  9}}, {{347},{  9}}, {{219},{  9}}, {{475},{  9}}, {{ 59},{  9}},
+{{315},{  9}}, {{187},{  9}}, {{443},{  9}}, {{123},{  9}}, {{379},{  9}},
+{{251},{  9}}, {{507},{  9}}, {{  7},{  9}}, {{263},{  9}}, {{135},{  9}},
+{{391},{  9}}, {{ 71},{  9}}, {{327},{  9}}, {{199},{  9}}, {{455},{  9}},
+{{ 39},{  9}}, {{295},{  9}}, {{167},{  9}}, {{423},{  9}}, {{103},{  9}},
+{{359},{  9}}, {{231},{  9}}, {{487},{  9}}, {{ 23},{  9}}, {{279},{  9}},
+{{151},{  9}}, {{407},{  9}}, {{ 87},{  9}}, {{343},{  9}}, {{215},{  9}},
+{{471},{  9}}, {{ 55},{  9}}, {{311},{  9}}, {{183},{  9}}, {{439},{  9}},
+{{119},{  9}}, {{375},{  9}}, {{247},{  9}}, {{503},{  9}}, {{ 15},{  9}},
+{{271},{  9}}, {{143},{  9}}, {{399},{  9}}, {{ 79},{  9}}, {{335},{  9}},
+{{207},{  9}}, {{463},{  9}}, {{ 47},{  9}}, {{303},{  9}}, {{175},{  9}},
+{{431},{  9}}, {{111},{  9}}, {{367},{  9}}, {{239},{  9}}, {{495},{  9}},
+{{ 31},{  9}}, {{287},{  9}}, {{159},{  9}}, {{415},{  9}}, {{ 95},{  9}},
+{{351},{  9}}, {{223},{  9}}, {{479},{  9}}, {{ 63},{  9}}, {{319},{  9}},
+{{191},{  9}}, {{447},{  9}}, {{127},{  9}}, {{383},{  9}}, {{255},{  9}},
+{{511},{  9}}, {{  0},{  7}}, {{ 64},{  7}}, {{ 32},{  7}}, {{ 96},{  7}},
+{{ 16},{  7}}, {{ 80},{  7}}, {{ 48},{  7}}, {{112},{  7}}, {{  8},{  7}},
+{{ 72},{  7}}, {{ 40},{  7}}, {{104},{  7}}, {{ 24},{  7}}, {{ 88},{  7}},
+{{ 56},{  7}}, {{120},{  7}}, {{  4},{  7}}, {{ 68},{  7}}, {{ 36},{  7}},
+{{100},{  7}}, {{ 20},{  7}}, {{ 84},{  7}}, {{ 52},{  7}}, {{116},{  7}},
+{{  3},{  8}}, {{131},{  8}}, {{ 67},{  8}}, {{195},{  8}}, {{ 35},{  8}},
+{{163},{  8}}, {{ 99},{  8}}, {{227},{  8}}
+};
+
+local const ct_data static_dtree[D_CODES] = {
+{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}},
+{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}},
+{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}},
+{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}},
+{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}},
+{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}}
+};
+
+const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = {
+ 0,  1,  2,  3,  4,  4,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,  8,  8,  8,  8,
+ 8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 10, 10,
+10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13,
+13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15,
+15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,  0,  0, 16, 17,
+18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22,
+23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27,
+27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29
+};
+
+const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= {
+ 0,  1,  2,  3,  4,  5,  6,  7,  8,  8,  9,  9, 10, 10, 11, 11, 12, 12, 12, 12,
+13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
+17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19,
+19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22,
+22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23,
+23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26,
+26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28
+};
+
+local const int base_length[LENGTH_CODES] = {
+0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56,
+64, 80, 96, 112, 128, 160, 192, 224, 0
+};
+
+local const int base_dist[D_CODES] = {
+    0,     1,     2,     3,     4,     6,     8,    12,    16,    24,
+   32,    48,    64,    96,   128,   192,   256,   384,   512,   768,
+ 1024,  1536,  2048,  3072,  4096,  6144,  8192, 12288, 16384, 24576
+};
+
diff --git a/libs/ext/zlib/uncompr.c b/libs/ext/zlib/uncompr.c
new file mode 100644
index 0000000..ad98be3
--- /dev/null
+++ b/libs/ext/zlib/uncompr.c
@@ -0,0 +1,59 @@
+/* uncompr.c -- decompress a memory buffer
+ * Copyright (C) 1995-2003, 2010 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#define ZLIB_INTERNAL
+#include "zlib.h"
+
+/* ===========================================================================
+     Decompresses the source buffer into the destination buffer.  sourceLen is
+   the byte length of the source buffer. Upon entry, destLen is the total
+   size of the destination buffer, which must be large enough to hold the
+   entire uncompressed data. (The size of the uncompressed data must have
+   been saved previously by the compressor and transmitted to the decompressor
+   by some mechanism outside the scope of this compression library.)
+   Upon exit, destLen is the actual size of the compressed buffer.
+
+     uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_BUF_ERROR if there was not enough room in the output
+   buffer, or Z_DATA_ERROR if the input data was corrupted.
+*/
+int ZEXPORT uncompress (dest, destLen, source, sourceLen)
+    Bytef *dest;
+    uLongf *destLen;
+    const Bytef *source;
+    uLong sourceLen;
+{
+    z_stream stream;
+    int err;
+
+    stream.next_in = (Bytef*)source;
+    stream.avail_in = (uInt)sourceLen;
+    /* Check for source > 64K on 16-bit machine: */
+    if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
+
+    stream.next_out = dest;
+    stream.avail_out = (uInt)*destLen;
+    if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
+
+    stream.zalloc = (alloc_func)0;
+    stream.zfree = (free_func)0;
+
+    err = inflateInit(&stream);
+    if (err != Z_OK) return err;
+
+    err = inflate(&stream, Z_FINISH);
+    if (err != Z_STREAM_END) {
+        inflateEnd(&stream);
+        if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))
+            return Z_DATA_ERROR;
+        return err;
+    }
+    *destLen = stream.total_out;
+
+    err = inflateEnd(&stream);
+    return err;
+}
diff --git a/libs/ext/zlib/zconf.h b/libs/ext/zlib/zconf.h
new file mode 100644
index 0000000..8a46a58
--- /dev/null
+++ b/libs/ext/zlib/zconf.h
@@ -0,0 +1,506 @@
+/* zconf.h -- configuration of the zlib compression library
+ * Copyright (C) 1995-2012 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#ifndef ZCONF_H
+#define ZCONF_H
+
+/*
+ * If you *really* need a unique prefix for all types and library functions,
+ * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
+ * Even better than compiling with -DZ_PREFIX would be to use configure to set
+ * this permanently in zconf.h using "./configure --zprefix".
+ */
+#ifdef Z_PREFIX     /* may be set to #if 1 by ./configure */
+#  define Z_PREFIX_SET
+
+/* all linked symbols */
+#  define _dist_code            z__dist_code
+#  define _length_code          z__length_code
+#  define _tr_align             z__tr_align
+#  define _tr_flush_block       z__tr_flush_block
+#  define _tr_init              z__tr_init
+#  define _tr_stored_block      z__tr_stored_block
+#  define _tr_tally             z__tr_tally
+#  define adler32               z_adler32
+#  define adler32_combine       z_adler32_combine
+#  define adler32_combine64     z_adler32_combine64
+#  ifndef Z_SOLO
+#    define compress              z_compress
+#    define compress2             z_compress2
+#    define compressBound         z_compressBound
+#  endif
+#  define crc32                 z_crc32
+#  define crc32_combine         z_crc32_combine
+#  define crc32_combine64       z_crc32_combine64
+#  define deflate               z_deflate
+#  define deflateBound          z_deflateBound
+#  define deflateCopy           z_deflateCopy
+#  define deflateEnd            z_deflateEnd
+#  define deflateInit2_         z_deflateInit2_
+#  define deflateInit_          z_deflateInit_
+#  define deflateParams         z_deflateParams
+#  define deflatePending        z_deflatePending
+#  define deflatePrime          z_deflatePrime
+#  define deflateReset          z_deflateReset
+#  define deflateResetKeep      z_deflateResetKeep
+#  define deflateSetDictionary  z_deflateSetDictionary
+#  define deflateSetHeader      z_deflateSetHeader
+#  define deflateTune           z_deflateTune
+#  define deflate_copyright     z_deflate_copyright
+#  define get_crc_table         z_get_crc_table
+#  ifndef Z_SOLO
+#    define gz_error              z_gz_error
+#    define gz_intmax             z_gz_intmax
+#    define gz_strwinerror        z_gz_strwinerror
+#    define gzbuffer              z_gzbuffer
+#    define gzclearerr            z_gzclearerr
+#    define gzclose               z_gzclose
+#    define gzclose_r             z_gzclose_r
+#    define gzclose_w             z_gzclose_w
+#    define gzdirect              z_gzdirect
+#    define gzdopen               z_gzdopen
+#    define gzeof                 z_gzeof
+#    define gzerror               z_gzerror
+#    define gzflush               z_gzflush
+#    define gzgetc                z_gzgetc
+#    define gzgetc_               z_gzgetc_
+#    define gzgets                z_gzgets
+#    define gzoffset              z_gzoffset
+#    define gzoffset64            z_gzoffset64
+#    define gzopen                z_gzopen
+#    define gzopen64              z_gzopen64
+#    ifdef _WIN32
+#      define gzopen_w              z_gzopen_w
+#    endif
+#    define gzprintf              z_gzprintf
+#    define gzputc                z_gzputc
+#    define gzputs                z_gzputs
+#    define gzread                z_gzread
+#    define gzrewind              z_gzrewind
+#    define gzseek                z_gzseek
+#    define gzseek64              z_gzseek64
+#    define gzsetparams           z_gzsetparams
+#    define gztell                z_gztell
+#    define gztell64              z_gztell64
+#    define gzungetc              z_gzungetc
+#    define gzwrite               z_gzwrite
+#  endif
+#  define inflate               z_inflate
+#  define inflateBack           z_inflateBack
+#  define inflateBackEnd        z_inflateBackEnd
+#  define inflateBackInit_      z_inflateBackInit_
+#  define inflateCopy           z_inflateCopy
+#  define inflateEnd            z_inflateEnd
+#  define inflateGetHeader      z_inflateGetHeader
+#  define inflateInit2_         z_inflateInit2_
+#  define inflateInit_          z_inflateInit_
+#  define inflateMark           z_inflateMark
+#  define inflatePrime          z_inflatePrime
+#  define inflateReset          z_inflateReset
+#  define inflateReset2         z_inflateReset2
+#  define inflateSetDictionary  z_inflateSetDictionary
+#  define inflateSync           z_inflateSync
+#  define inflateSyncPoint      z_inflateSyncPoint
+#  define inflateUndermine      z_inflateUndermine
+#  define inflateResetKeep      z_inflateResetKeep
+#  define inflate_copyright     z_inflate_copyright
+#  define inflate_fast          z_inflate_fast
+#  define inflate_table         z_inflate_table
+#  ifndef Z_SOLO
+#    define uncompress            z_uncompress
+#  endif
+#  define zError                z_zError
+#  ifndef Z_SOLO
+#    define zcalloc               z_zcalloc
+#    define zcfree                z_zcfree
+#  endif
+#  define zlibCompileFlags      z_zlibCompileFlags
+#  define zlibVersion           z_zlibVersion
+
+/* all zlib typedefs in zlib.h and zconf.h */
+#  define Byte                  z_Byte
+#  define Bytef                 z_Bytef
+#  define alloc_func            z_alloc_func
+#  define charf                 z_charf
+#  define free_func             z_free_func
+#  ifndef Z_SOLO
+#    define gzFile                z_gzFile
+#  endif
+#  define gz_header             z_gz_header
+#  define gz_headerp            z_gz_headerp
+#  define in_func               z_in_func
+#  define intf                  z_intf
+#  define out_func              z_out_func
+#  define uInt                  z_uInt
+#  define uIntf                 z_uIntf
+#  define uLong                 z_uLong
+#  define uLongf                z_uLongf
+#  define voidp                 z_voidp
+#  define voidpc                z_voidpc
+#  define voidpf                z_voidpf
+
+/* all zlib structs in zlib.h and zconf.h */
+#  define gz_header_s           z_gz_header_s
+#  define internal_state        z_internal_state
+
+#endif
+
+#if defined(__MSDOS__) && !defined(MSDOS)
+#  define MSDOS
+#endif
+#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
+#  define OS2
+#endif
+#if defined(_WINDOWS) && !defined(WINDOWS)
+#  define WINDOWS
+#endif
+#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
+#  ifndef WIN32
+#    define WIN32
+#  endif
+#endif
+#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
+#  if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
+#    ifndef SYS16BIT
+#      define SYS16BIT
+#    endif
+#  endif
+#endif
+
+/*
+ * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
+ * than 64k bytes at a time (needed on systems with 16-bit int).
+ */
+#ifdef SYS16BIT
+#  define MAXSEG_64K
+#endif
+#ifdef MSDOS
+#  define UNALIGNED_OK
+#endif
+
+#ifdef __STDC_VERSION__
+#  ifndef STDC
+#    define STDC
+#  endif
+#  if __STDC_VERSION__ >= 199901L
+#    ifndef STDC99
+#      define STDC99
+#    endif
+#  endif
+#endif
+#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
+#  define STDC
+#endif
+#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
+#  define STDC
+#endif
+
+#if defined(__OS400__) && !defined(STDC)    /* iSeries (formerly AS/400). */
+#  define STDC
+#endif
+
+#ifndef STDC
+#  ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
+#    define const       /* note: need a more gentle solution here */
+#  endif
+#endif
+
+#if defined(ZLIB_CONST) && !defined(z_const)
+#  define z_const const
+#else
+#  define z_const
+#endif
+
+/* Some Mac compilers merge all .h files incorrectly: */
+#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
+#  define NO_DUMMY_DECL
+#endif
+
+/* Maximum value for memLevel in deflateInit2 */
+#ifndef MAX_MEM_LEVEL
+#  ifdef MAXSEG_64K
+#    define MAX_MEM_LEVEL 8
+#  else
+#    define MAX_MEM_LEVEL 9
+#  endif
+#endif
+
+/* Maximum value for windowBits in deflateInit2 and inflateInit2.
+ * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
+ * created by gzip. (Files created by minigzip can still be extracted by
+ * gzip.)
+ */
+#ifndef MAX_WBITS
+#  define MAX_WBITS   15 /* 32K LZ77 window */
+#endif
+
+/* The memory requirements for deflate are (in bytes):
+            (1 << (windowBits+2)) +  (1 << (memLevel+9))
+ that is: 128K for windowBits=15  +  128K for memLevel = 8  (default values)
+ plus a few kilobytes for small objects. For example, if you want to reduce
+ the default memory requirements from 256K to 128K, compile with
+     make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
+ Of course this will generally degrade compression (there's no free lunch).
+
+   The memory requirements for inflate are (in bytes) 1 << windowBits
+ that is, 32K for windowBits=15 (default value) plus a few kilobytes
+ for small objects.
+*/
+
+                        /* Type declarations */
+
+#ifndef OF /* function prototypes */
+#  ifdef STDC
+#    define OF(args)  args
+#  else
+#    define OF(args)  ()
+#  endif
+#endif
+
+#ifndef Z_ARG /* function prototypes for stdarg */
+#  if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#    define Z_ARG(args)  args
+#  else
+#    define Z_ARG(args)  ()
+#  endif
+#endif
+
+/* The following definitions for FAR are needed only for MSDOS mixed
+ * model programming (small or medium model with some far allocations).
+ * This was tested only with MSC; for other MSDOS compilers you may have
+ * to define NO_MEMCPY in zutil.h.  If you don't need the mixed model,
+ * just define FAR to be empty.
+ */
+#ifdef SYS16BIT
+#  if defined(M_I86SM) || defined(M_I86MM)
+     /* MSC small or medium model */
+#    define SMALL_MEDIUM
+#    ifdef _MSC_VER
+#      define FAR _far
+#    else
+#      define FAR far
+#    endif
+#  endif
+#  if (defined(__SMALL__) || defined(__MEDIUM__))
+     /* Turbo C small or medium model */
+#    define SMALL_MEDIUM
+#    ifdef __BORLANDC__
+#      define FAR _far
+#    else
+#      define FAR far
+#    endif
+#  endif
+#endif
+
+#if defined(WINDOWS) || defined(WIN32)
+   /* If building or using zlib as a DLL, define ZLIB_DLL.
+    * This is not mandatory, but it offers a little performance increase.
+    */
+#  ifdef ZLIB_DLL
+#    if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
+#      ifdef ZLIB_INTERNAL
+#        define ZEXTERN extern __declspec(dllexport)
+#      else
+#        define ZEXTERN extern __declspec(dllimport)
+#      endif
+#    endif
+#  endif  /* ZLIB_DLL */
+   /* If building or using zlib with the WINAPI/WINAPIV calling convention,
+    * define ZLIB_WINAPI.
+    * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
+    */
+#  ifdef ZLIB_WINAPI
+#    ifdef FAR
+#      undef FAR
+#    endif
+#    include <windows.h>
+     /* No need for _export, use ZLIB.DEF instead. */
+     /* For complete Windows compatibility, use WINAPI, not __stdcall. */
+#    define ZEXPORT WINAPI
+#    ifdef WIN32
+#      define ZEXPORTVA WINAPIV
+#    else
+#      define ZEXPORTVA FAR CDECL
+#    endif
+#  endif
+#endif
+
+#if defined (__BEOS__)
+#  ifdef ZLIB_DLL
+#    ifdef ZLIB_INTERNAL
+#      define ZEXPORT   __declspec(dllexport)
+#      define ZEXPORTVA __declspec(dllexport)
+#    else
+#      define ZEXPORT   __declspec(dllimport)
+#      define ZEXPORTVA __declspec(dllimport)
+#    endif
+#  endif
+#endif
+
+#ifndef ZEXTERN
+#  define ZEXTERN extern
+#endif
+#ifndef ZEXPORT
+#  define ZEXPORT
+#endif
+#ifndef ZEXPORTVA
+#  define ZEXPORTVA
+#endif
+
+#ifndef FAR
+#  define FAR
+#endif
+
+#if !defined(__MACTYPES__)
+typedef unsigned char  Byte;  /* 8 bits */
+#endif
+typedef unsigned int   uInt;  /* 16 bits or more */
+typedef unsigned long  uLong; /* 32 bits or more */
+
+#ifdef SMALL_MEDIUM
+   /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
+#  define Bytef Byte FAR
+#else
+   typedef Byte  FAR Bytef;
+#endif
+typedef char  FAR charf;
+typedef int   FAR intf;
+typedef uInt  FAR uIntf;
+typedef uLong FAR uLongf;
+
+#ifdef STDC
+   typedef void const *voidpc;
+   typedef void FAR   *voidpf;
+   typedef void       *voidp;
+#else
+   typedef Byte const *voidpc;
+   typedef Byte FAR   *voidpf;
+   typedef Byte       *voidp;
+#endif
+
+/* ./configure may #define Z_U4 here */
+
+#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC)
+#  include <limits.h>
+#  if (UINT_MAX == 0xffffffffUL)
+#    define Z_U4 unsigned
+#  else
+#    if (ULONG_MAX == 0xffffffffUL)
+#      define Z_U4 unsigned long
+#    else
+#      if (USHRT_MAX == 0xffffffffUL)
+#        define Z_U4 unsigned short
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef Z_U4
+   typedef Z_U4 z_crc_t;
+#else
+   typedef unsigned long z_crc_t;
+#endif
+
+#ifdef HAVE_UNISTD_H    /* may be set to #if 1 by ./configure */
+#  define Z_HAVE_UNISTD_H
+#endif
+
+#ifdef HAVE_STDARG_H    /* may be set to #if 1 by ./configure */
+#  define Z_HAVE_STDARG_H
+#endif
+
+#ifdef STDC
+#  ifndef Z_SOLO
+#    include <sys/types.h>      /* for off_t */
+#  endif
+#endif
+
+#ifdef _WIN32
+#  include <stddef.h>           /* for wchar_t */
+#endif
+
+/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
+ * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even
+ * though the former does not conform to the LFS document), but considering
+ * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
+ * equivalently requesting no 64-bit operations
+ */
+#if defined(LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
+#  undef _LARGEFILE64_SOURCE
+#endif
+
+#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
+#  define Z_HAVE_UNISTD_H
+#endif
+#ifndef Z_SOLO
+#  if defined(Z_HAVE_UNISTD_H) || defined(LARGEFILE64_SOURCE)
+#    include <unistd.h>         /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
+#    ifdef VMS
+#      include <unixio.h>       /* for off_t */
+#    endif
+#    ifndef z_off_t
+#      define z_off_t off_t
+#    endif
+#  endif
+#endif
+
+#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0
+#  define Z_LFS64
+#endif
+
+#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64)
+#  define Z_LARGE64
+#endif
+
+#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64)
+#  define Z_WANT64
+#endif
+
+#if !defined(SEEK_SET) && !defined(Z_SOLO)
+#  define SEEK_SET        0       /* Seek from beginning of file.  */
+#  define SEEK_CUR        1       /* Seek from current position.  */
+#  define SEEK_END        2       /* Set file pointer to EOF plus "offset" */
+#endif
+
+#ifndef z_off_t
+#  define z_off_t long
+#endif
+
+#if !defined(_WIN32) && defined(Z_LARGE64)
+#  define z_off64_t off64_t
+#else
+#  if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)
+#    define z_off64_t __int64
+#  else
+#    define z_off64_t z_off_t
+#  endif
+#endif
+
+/* MVS linker does not support external names larger than 8 bytes */
+#if defined(__MVS__)
+  #pragma map(deflateInit_,"DEIN")
+  #pragma map(deflateInit2_,"DEIN2")
+  #pragma map(deflateEnd,"DEEND")
+  #pragma map(deflateBound,"DEBND")
+  #pragma map(inflateInit_,"ININ")
+  #pragma map(inflateInit2_,"ININ2")
+  #pragma map(inflateEnd,"INEND")
+  #pragma map(inflateSync,"INSY")
+  #pragma map(inflateSetDictionary,"INSEDI")
+  #pragma map(compressBound,"CMBND")
+  #pragma map(inflate_table,"INTABL")
+  #pragma map(inflate_fast,"INFA")
+  #pragma map(inflate_copyright,"INCOPY")
+#endif
+
+#endif /* ZCONF_H */
diff --git a/libs/ext/zlib/zlib-1.2.7.tar.gz b/libs/ext/zlib/zlib-1.2.7.tar.gz
new file mode 100644
index 0000000..833e888
Binary files /dev/null and b/libs/ext/zlib/zlib-1.2.7.tar.gz differ
diff --git a/libs/ext/zlib/zlib.h b/libs/ext/zlib/zlib.h
new file mode 100644
index 0000000..3edf3ac
--- /dev/null
+++ b/libs/ext/zlib/zlib.h
@@ -0,0 +1,1744 @@
+/* zlib.h -- interface of the 'zlib' general purpose compression library
+  version 1.2.7, May 2nd, 2012
+
+  Copyright (C) 1995-2012 Jean-loup Gailly and Mark Adler
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  Jean-loup Gailly        Mark Adler
+  jloup at gzip.org          madler at alumni.caltech.edu
+
+
+  The data format used by the zlib library is described by RFCs (Request for
+  Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950
+  (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format).
+*/
+
+#ifndef ZLIB_H
+#define ZLIB_H
+
+#include "zconf.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ZLIB_VERSION "1.2.7"
+#define ZLIB_VERNUM 0x1270
+#define ZLIB_VER_MAJOR 1
+#define ZLIB_VER_MINOR 2
+#define ZLIB_VER_REVISION 7
+#define ZLIB_VER_SUBREVISION 0
+
+/*
+    The 'zlib' compression library provides in-memory compression and
+  decompression functions, including integrity checks of the uncompressed data.
+  This version of the library supports only one compression method (deflation)
+  but other algorithms will be added later and will have the same stream
+  interface.
+
+    Compression can be done in a single step if the buffers are large enough,
+  or can be done by repeated calls of the compression function.  In the latter
+  case, the application must provide more input and/or consume the output
+  (providing more output space) before each call.
+
+    The compressed data format used by default by the in-memory functions is
+  the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped
+  around a deflate stream, which is itself documented in RFC 1951.
+
+    The library also supports reading and writing files in gzip (.gz) format
+  with an interface similar to that of stdio using the functions that start
+  with "gz".  The gzip format is different from the zlib format.  gzip is a
+  gzip wrapper, documented in RFC 1952, wrapped around a deflate stream.
+
+    This library can optionally read and write gzip streams in memory as well.
+
+    The zlib format was designed to be compact and fast for use in memory
+  and on communications channels.  The gzip format was designed for single-
+  file compression on file systems, has a larger header than zlib to maintain
+  directory information, and uses a different, slower check method than zlib.
+
+    The library does not install any signal handler.  The decoder checks
+  the consistency of the compressed data, so the library should never crash
+  even in case of corrupted input.
+*/
+
+typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
+typedef void   (*free_func)  OF((voidpf opaque, voidpf address));
+
+struct internal_state;
+
+typedef struct z_stream_s {
+    z_const Bytef *next_in;     /* next input byte */
+    uInt     avail_in;  /* number of bytes available at next_in */
+    uLong    total_in;  /* total number of input bytes read so far */
+
+    Bytef    *next_out; /* next output byte should be put there */
+    uInt     avail_out; /* remaining free space at next_out */
+    uLong    total_out; /* total number of bytes output so far */
+
+    z_const char *msg;  /* last error message, NULL if no error */
+    struct internal_state FAR *state; /* not visible by applications */
+
+    alloc_func zalloc;  /* used to allocate the internal state */
+    free_func  zfree;   /* used to free the internal state */
+    voidpf     opaque;  /* private data object passed to zalloc and zfree */
+
+    int     data_type;  /* best guess about the data type: binary or text */
+    uLong   adler;      /* adler32 value of the uncompressed data */
+    uLong   reserved;   /* reserved for future use */
+} z_stream;
+
+typedef z_stream FAR *z_streamp;
+
+/*
+     gzip header information passed to and from zlib routines.  See RFC 1952
+  for more details on the meanings of these fields.
+*/
+typedef struct gz_header_s {
+    int     text;       /* true if compressed data believed to be text */
+    uLong   time;       /* modification time */
+    int     xflags;     /* extra flags (not used when writing a gzip file) */
+    int     os;         /* operating system */
+    Bytef   *extra;     /* pointer to extra field or Z_NULL if none */
+    uInt    extra_len;  /* extra field length (valid if extra != Z_NULL) */
+    uInt    extra_max;  /* space at extra (only when reading header) */
+    Bytef   *name;      /* pointer to zero-terminated file name or Z_NULL */
+    uInt    name_max;   /* space at name (only when reading header) */
+    Bytef   *comment;   /* pointer to zero-terminated comment or Z_NULL */
+    uInt    comm_max;   /* space at comment (only when reading header) */
+    int     hcrc;       /* true if there was or will be a header crc */
+    int     done;       /* true when done reading gzip header (not used
+                           when writing a gzip file) */
+} gz_header;
+
+typedef gz_header FAR *gz_headerp;
+
+/*
+     The application must update next_in and avail_in when avail_in has dropped
+   to zero.  It must update next_out and avail_out when avail_out has dropped
+   to zero.  The application must initialize zalloc, zfree and opaque before
+   calling the init function.  All other fields are set by the compression
+   library and must not be updated by the application.
+
+     The opaque value provided by the application will be passed as the first
+   parameter for calls of zalloc and zfree.  This can be useful for custom
+   memory management.  The compression library attaches no meaning to the
+   opaque value.
+
+     zalloc must return Z_NULL if there is not enough memory for the object.
+   If zlib is used in a multi-threaded application, zalloc and zfree must be
+   thread safe.
+
+     On 16-bit systems, the functions zalloc and zfree must be able to allocate
+   exactly 65536 bytes, but will not be required to allocate more than this if
+   the symbol MAXSEG_64K is defined (see zconf.h).  WARNING: On MSDOS, pointers
+   returned by zalloc for objects of exactly 65536 bytes *must* have their
+   offset normalized to zero.  The default allocation function provided by this
+   library ensures this (see zutil.c).  To reduce memory requirements and avoid
+   any allocation of 64K objects, at the expense of compression ratio, compile
+   the library with -DMAX_WBITS=14 (see zconf.h).
+
+     The fields total_in and total_out can be used for statistics or progress
+   reports.  After compression, total_in holds the total size of the
+   uncompressed data and may be saved for use in the decompressor (particularly
+   if the decompressor wants to decompress everything in a single step).
+*/
+
+                        /* constants */
+
+#define Z_NO_FLUSH      0
+#define Z_PARTIAL_FLUSH 1
+#define Z_SYNC_FLUSH    2
+#define Z_FULL_FLUSH    3
+#define Z_FINISH        4
+#define Z_BLOCK         5
+#define Z_TREES         6
+/* Allowed flush values; see deflate() and inflate() below for details */
+
+#define Z_OK            0
+#define Z_STREAM_END    1
+#define Z_NEED_DICT     2
+#define Z_ERRNO        (-1)
+#define Z_STREAM_ERROR (-2)
+#define Z_DATA_ERROR   (-3)
+#define Z_MEM_ERROR    (-4)
+#define Z_BUF_ERROR    (-5)
+#define Z_VERSION_ERROR (-6)
+/* Return codes for the compression/decompression functions. Negative values
+ * are errors, positive values are used for special but normal events.
+ */
+
+#define Z_NO_COMPRESSION         0
+#define Z_BEST_SPEED             1
+#define Z_BEST_COMPRESSION       9
+#define Z_DEFAULT_COMPRESSION  (-1)
+/* compression levels */
+
+#define Z_FILTERED            1
+#define Z_HUFFMAN_ONLY        2
+#define Z_RLE                 3
+#define Z_FIXED               4
+#define Z_DEFAULT_STRATEGY    0
+/* compression strategy; see deflateInit2() below for details */
+
+#define Z_BINARY   0
+#define Z_TEXT     1
+#define Z_ASCII    Z_TEXT   /* for compatibility with 1.2.2 and earlier */
+#define Z_UNKNOWN  2
+/* Possible values of the data_type field (though see inflate()) */
+
+#define Z_DEFLATED   8
+/* The deflate compression method (the only one supported in this version) */
+
+#define Z_NULL  0  /* for initializing zalloc, zfree, opaque */
+
+#define zlib_version zlibVersion()
+/* for compatibility with versions < 1.0.2 */
+
+
+                        /* basic functions */
+
+ZEXTERN const char * ZEXPORT zlibVersion OF((void));
+/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
+   If the first character differs, the library code actually used is not
+   compatible with the zlib.h header file used by the application.  This check
+   is automatically made by deflateInit and inflateInit.
+ */
+
+/*
+ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
+
+     Initializes the internal stream state for compression.  The fields
+   zalloc, zfree and opaque must be initialized before by the caller.  If
+   zalloc and zfree are set to Z_NULL, deflateInit updates them to use default
+   allocation functions.
+
+     The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
+   1 gives best speed, 9 gives best compression, 0 gives no compression at all
+   (the input data is simply copied a block at a time).  Z_DEFAULT_COMPRESSION
+   requests a default compromise between speed and compression (currently
+   equivalent to level 6).
+
+     deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_STREAM_ERROR if level is not a valid compression level, or
+   Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
+   with the version assumed by the caller (ZLIB_VERSION).  msg is set to null
+   if there is no error message.  deflateInit does not perform any compression:
+   this will be done by deflate().
+*/
+
+
+ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
+/*
+    deflate compresses as much data as possible, and stops when the input
+  buffer becomes empty or the output buffer becomes full.  It may introduce
+  some output latency (reading input without producing any output) except when
+  forced to flush.
+
+    The detailed semantics are as follows.  deflate performs one or both of the
+  following actions:
+
+  - Compress more input starting at next_in and update next_in and avail_in
+    accordingly.  If not all input can be processed (because there is not
+    enough room in the output buffer), next_in and avail_in are updated and
+    processing will resume at this point for the next call of deflate().
+
+  - Provide more output starting at next_out and update next_out and avail_out
+    accordingly.  This action is forced if the parameter flush is non zero.
+    Forcing flush frequently degrades the compression ratio, so this parameter
+    should be set only when necessary (in interactive applications).  Some
+    output may be provided even if flush is not set.
+
+    Before the call of deflate(), the application should ensure that at least
+  one of the actions is possible, by providing more input and/or consuming more
+  output, and updating avail_in or avail_out accordingly; avail_out should
+  never be zero before the call.  The application can consume the compressed
+  output when it wants, for example when the output buffer is full (avail_out
+  == 0), or after each call of deflate().  If deflate returns Z_OK and with
+  zero avail_out, it must be called again after making room in the output
+  buffer because there might be more output pending.
+
+    Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to
+  decide how much data to accumulate before producing output, in order to
+  maximize compression.
+
+    If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
+  flushed to the output buffer and the output is aligned on a byte boundary, so
+  that the decompressor can get all input data available so far.  (In
+  particular avail_in is zero after the call if enough output space has been
+  provided before the call.) Flushing may degrade compression for some
+  compression algorithms and so it should be used only when necessary.  This
+  completes the current deflate block and follows it with an empty stored block
+  that is three bits plus filler bits to the next byte, followed by four bytes
+  (00 00 ff ff).
+
+    If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the
+  output buffer, but the output is not aligned to a byte boundary.  All of the
+  input data so far will be available to the decompressor, as for Z_SYNC_FLUSH.
+  This completes the current deflate block and follows it with an empty fixed
+  codes block that is 10 bits long.  This assures that enough bytes are output
+  in order for the decompressor to finish the block before the empty fixed code
+  block.
+
+    If flush is set to Z_BLOCK, a deflate block is completed and emitted, as
+  for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to
+  seven bits of the current block are held to be written as the next byte after
+  the next deflate block is completed.  In this case, the decompressor may not
+  be provided enough bits at this point in order to complete decompression of
+  the data provided so far to the compressor.  It may need to wait for the next
+  block to be emitted.  This is for advanced applications that need to control
+  the emission of deflate blocks.
+
+    If flush is set to Z_FULL_FLUSH, all output is flushed as with
+  Z_SYNC_FLUSH, and the compression state is reset so that decompression can
+  restart from this point if previous compressed data has been damaged or if
+  random access is desired.  Using Z_FULL_FLUSH too often can seriously degrade
+  compression.
+
+    If deflate returns with avail_out == 0, this function must be called again
+  with the same value of the flush parameter and more output space (updated
+  avail_out), until the flush is complete (deflate returns with non-zero
+  avail_out).  In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that
+  avail_out is greater than six to avoid repeated flush markers due to
+  avail_out == 0 on return.
+
+    If the parameter flush is set to Z_FINISH, pending input is processed,
+  pending output is flushed and deflate returns with Z_STREAM_END if there was
+  enough output space; if deflate returns with Z_OK, this function must be
+  called again with Z_FINISH and more output space (updated avail_out) but no
+  more input data, until it returns with Z_STREAM_END or an error.  After
+  deflate has returned Z_STREAM_END, the only possible operations on the stream
+  are deflateReset or deflateEnd.
+
+    Z_FINISH can be used immediately after deflateInit if all the compression
+  is to be done in a single step.  In this case, avail_out must be at least the
+  value returned by deflateBound (see below).  Then deflate is guaranteed to
+  return Z_STREAM_END.  If not enough output space is provided, deflate will
+  not return Z_STREAM_END, and it must be called again as described above.
+
+    deflate() sets strm->adler to the adler32 checksum of all input read
+  so far (that is, total_in bytes).
+
+    deflate() may update strm->data_type if it can make a good guess about
+  the input data type (Z_BINARY or Z_TEXT).  In doubt, the data is considered
+  binary.  This field is only for information purposes and does not affect the
+  compression algorithm in any manner.
+
+    deflate() returns Z_OK if some progress has been made (more input
+  processed or more output produced), Z_STREAM_END if all input has been
+  consumed and all output has been produced (only when flush is set to
+  Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
+  if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible
+  (for example avail_in or avail_out was zero).  Note that Z_BUF_ERROR is not
+  fatal, and deflate() can be called again with more input and more output
+  space to continue compressing.
+*/
+
+
+ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));
+/*
+     All dynamically allocated data structures for this stream are freed.
+   This function discards any unprocessed input and does not flush any pending
+   output.
+
+     deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
+   stream state was inconsistent, Z_DATA_ERROR if the stream was freed
+   prematurely (some input or output was discarded).  In the error case, msg
+   may be set but then points to a static string (which must not be
+   deallocated).
+*/
+
+
+/*
+ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
+
+     Initializes the internal stream state for decompression.  The fields
+   next_in, avail_in, zalloc, zfree and opaque must be initialized before by
+   the caller.  If next_in is not Z_NULL and avail_in is large enough (the
+   exact value depends on the compression method), inflateInit determines the
+   compression method from the zlib header and allocates all data structures
+   accordingly; otherwise the allocation will be deferred to the first call of
+   inflate.  If zalloc and zfree are set to Z_NULL, inflateInit updates them to
+   use default allocation functions.
+
+     inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
+   version assumed by the caller, or Z_STREAM_ERROR if the parameters are
+   invalid, such as a null pointer to the structure.  msg is set to null if
+   there is no error message.  inflateInit does not perform any decompression
+   apart from possibly reading the zlib header if present: actual decompression
+   will be done by inflate().  (So next_in and avail_in may be modified, but
+   next_out and avail_out are unused and unchanged.) The current implementation
+   of inflateInit() does not process any header information -- that is deferred
+   until inflate() is called.
+*/
+
+
+ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
+/*
+    inflate decompresses as much data as possible, and stops when the input
+  buffer becomes empty or the output buffer becomes full.  It may introduce
+  some output latency (reading input without producing any output) except when
+  forced to flush.
+
+  The detailed semantics are as follows.  inflate performs one or both of the
+  following actions:
+
+  - Decompress more input starting at next_in and update next_in and avail_in
+    accordingly.  If not all input can be processed (because there is not
+    enough room in the output buffer), next_in is updated and processing will
+    resume at this point for the next call of inflate().
+
+  - Provide more output starting at next_out and update next_out and avail_out
+    accordingly.  inflate() provides as much output as possible, until there is
+    no more input data or no more space in the output buffer (see below about
+    the flush parameter).
+
+    Before the call of inflate(), the application should ensure that at least
+  one of the actions is possible, by providing more input and/or consuming more
+  output, and updating the next_* and avail_* values accordingly.  The
+  application can consume the uncompressed output when it wants, for example
+  when the output buffer is full (avail_out == 0), or after each call of
+  inflate().  If inflate returns Z_OK and with zero avail_out, it must be
+  called again after making room in the output buffer because there might be
+  more output pending.
+
+    The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH,
+  Z_BLOCK, or Z_TREES.  Z_SYNC_FLUSH requests that inflate() flush as much
+  output as possible to the output buffer.  Z_BLOCK requests that inflate()
+  stop if and when it gets to the next deflate block boundary.  When decoding
+  the zlib or gzip format, this will cause inflate() to return immediately
+  after the header and before the first block.  When doing a raw inflate,
+  inflate() will go ahead and process the first block, and will return when it
+  gets to the end of that block, or when it runs out of data.
+
+    The Z_BLOCK option assists in appending to or combining deflate streams.
+  Also to assist in this, on return inflate() will set strm->data_type to the
+  number of unused bits in the last byte taken from strm->next_in, plus 64 if
+  inflate() is currently decoding the last block in the deflate stream, plus
+  128 if inflate() returned immediately after decoding an end-of-block code or
+  decoding the complete header up to just before the first byte of the deflate
+  stream.  The end-of-block will not be indicated until all of the uncompressed
+  data from that block has been written to strm->next_out.  The number of
+  unused bits may in general be greater than seven, except when bit 7 of
+  data_type is set, in which case the number of unused bits will be less than
+  eight.  data_type is set as noted here every time inflate() returns for all
+  flush options, and so can be used to determine the amount of currently
+  consumed input in bits.
+
+    The Z_TREES option behaves as Z_BLOCK does, but it also returns when the
+  end of each deflate block header is reached, before any actual data in that
+  block is decoded.  This allows the caller to determine the length of the
+  deflate block header for later use in random access within a deflate block.
+  256 is added to the value of strm->data_type when inflate() returns
+  immediately after reaching the end of the deflate block header.
+
+    inflate() should normally be called until it returns Z_STREAM_END or an
+  error.  However if all decompression is to be performed in a single step (a
+  single call of inflate), the parameter flush should be set to Z_FINISH.  In
+  this case all pending input is processed and all pending output is flushed;
+  avail_out must be large enough to hold all of the uncompressed data for the
+  operation to complete.  (The size of the uncompressed data may have been
+  saved by the compressor for this purpose.) The use of Z_FINISH is not
+  required to perform an inflation in one step.  However it may be used to
+  inform inflate that a faster approach can be used for the single inflate()
+  call.  Z_FINISH also informs inflate to not maintain a sliding window if the
+  stream completes, which reduces inflate's memory footprint.  If the stream
+  does not complete, either because not all of the stream is provided or not
+  enough output space is provided, then a sliding window will be allocated and
+  inflate() can be called again to continue the operation as if Z_NO_FLUSH had
+  been used.
+
+     In this implementation, inflate() always flushes as much output as
+  possible to the output buffer, and always uses the faster approach on the
+  first call.  So the effects of the flush parameter in this implementation are
+  on the return value of inflate() as noted below, when inflate() returns early
+  when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of
+  memory for a sliding window when Z_FINISH is used.
+
+     If a preset dictionary is needed after this call (see inflateSetDictionary
+  below), inflate sets strm->adler to the Adler-32 checksum of the dictionary
+  chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
+  strm->adler to the Adler-32 checksum of all output produced so far (that is,
+  total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
+  below.  At the end of the stream, inflate() checks that its computed adler32
+  checksum is equal to that saved by the compressor and returns Z_STREAM_END
+  only if the checksum is correct.
+
+    inflate() can decompress and check either zlib-wrapped or gzip-wrapped
+  deflate data.  The header type is detected automatically, if requested when
+  initializing with inflateInit2().  Any information contained in the gzip
+  header is not retained, so applications that need that information should
+  instead use raw inflate, see inflateInit2() below, or inflateBack() and
+  perform their own processing of the gzip header and trailer.  When processing
+  gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output
+  producted so far.  The CRC-32 is checked against the gzip trailer.
+
+    inflate() returns Z_OK if some progress has been made (more input processed
+  or more output produced), Z_STREAM_END if the end of the compressed data has
+  been reached and all uncompressed output has been produced, Z_NEED_DICT if a
+  preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
+  corrupted (input stream not conforming to the zlib format or incorrect check
+  value), Z_STREAM_ERROR if the stream structure was inconsistent (for example
+  next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory,
+  Z_BUF_ERROR if no progress is possible or if there was not enough room in the
+  output buffer when Z_FINISH is used.  Note that Z_BUF_ERROR is not fatal, and
+  inflate() can be called again with more input and more output space to
+  continue decompressing.  If Z_DATA_ERROR is returned, the application may
+  then call inflateSync() to look for a good compression block if a partial
+  recovery of the data is desired.
+*/
+
+
+ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
+/*
+     All dynamically allocated data structures for this stream are freed.
+   This function discards any unprocessed input and does not flush any pending
+   output.
+
+     inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
+   was inconsistent.  In the error case, msg may be set but then points to a
+   static string (which must not be deallocated).
+*/
+
+
+                        /* Advanced functions */
+
+/*
+    The following functions are needed only in some special applications.
+*/
+
+/*
+ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
+                                     int  level,
+                                     int  method,
+                                     int  windowBits,
+                                     int  memLevel,
+                                     int  strategy));
+
+     This is another version of deflateInit with more compression options.  The
+   fields next_in, zalloc, zfree and opaque must be initialized before by the
+   caller.
+
+     The method parameter is the compression method.  It must be Z_DEFLATED in
+   this version of the library.
+
+     The windowBits parameter is the base two logarithm of the window size
+   (the size of the history buffer).  It should be in the range 8..15 for this
+   version of the library.  Larger values of this parameter result in better
+   compression at the expense of memory usage.  The default value is 15 if
+   deflateInit is used instead.
+
+     windowBits can also be -8..-15 for raw deflate.  In this case, -windowBits
+   determines the window size.  deflate() will then generate raw deflate data
+   with no zlib header or trailer, and will not compute an adler32 check value.
+
+     windowBits can also be greater than 15 for optional gzip encoding.  Add
+   16 to windowBits to write a simple gzip header and trailer around the
+   compressed data instead of a zlib wrapper.  The gzip header will have no
+   file name, no extra data, no comment, no modification time (set to zero), no
+   header crc, and the operating system will be set to 255 (unknown).  If a
+   gzip stream is being written, strm->adler is a crc32 instead of an adler32.
+
+     The memLevel parameter specifies how much memory should be allocated
+   for the internal compression state.  memLevel=1 uses minimum memory but is
+   slow and reduces compression ratio; memLevel=9 uses maximum memory for
+   optimal speed.  The default value is 8.  See zconf.h for total memory usage
+   as a function of windowBits and memLevel.
+
+     The strategy parameter is used to tune the compression algorithm.  Use the
+   value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
+   filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no
+   string match), or Z_RLE to limit match distances to one (run-length
+   encoding).  Filtered data consists mostly of small values with a somewhat
+   random distribution.  In this case, the compression algorithm is tuned to
+   compress them better.  The effect of Z_FILTERED is to force more Huffman
+   coding and less string matching; it is somewhat intermediate between
+   Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY.  Z_RLE is designed to be almost as
+   fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data.  The
+   strategy parameter only affects the compression ratio but not the
+   correctness of the compressed output even if it is not set appropriately.
+   Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler
+   decoder for special applications.
+
+     deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid
+   method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is
+   incompatible with the version assumed by the caller (ZLIB_VERSION).  msg is
+   set to null if there is no error message.  deflateInit2 does not perform any
+   compression: this will be done by deflate().
+*/
+
+ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
+                                             const Bytef *dictionary,
+                                             uInt  dictLength));
+/*
+     Initializes the compression dictionary from the given byte sequence
+   without producing any compressed output.  When using the zlib format, this
+   function must be called immediately after deflateInit, deflateInit2 or
+   deflateReset, and before any call of deflate.  When doing raw deflate, this
+   function must be called either before any call of deflate, or immediately
+   after the completion of a deflate block, i.e. after all input has been
+   consumed and all output has been delivered when using any of the flush
+   options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH.  The
+   compressor and decompressor must use exactly the same dictionary (see
+   inflateSetDictionary).
+
+     The dictionary should consist of strings (byte sequences) that are likely
+   to be encountered later in the data to be compressed, with the most commonly
+   used strings preferably put towards the end of the dictionary.  Using a
+   dictionary is most useful when the data to be compressed is short and can be
+   predicted with good accuracy; the data can then be compressed better than
+   with the default empty dictionary.
+
+     Depending on the size of the compression data structures selected by
+   deflateInit or deflateInit2, a part of the dictionary may in effect be
+   discarded, for example if the dictionary is larger than the window size
+   provided in deflateInit or deflateInit2.  Thus the strings most likely to be
+   useful should be put at the end of the dictionary, not at the front.  In
+   addition, the current implementation of deflate will use at most the window
+   size minus 262 bytes of the provided dictionary.
+
+     Upon return of this function, strm->adler is set to the adler32 value
+   of the dictionary; the decompressor may later use this value to determine
+   which dictionary has been used by the compressor.  (The adler32 value
+   applies to the whole dictionary even if only a subset of the dictionary is
+   actually used by the compressor.) If a raw deflate was requested, then the
+   adler32 value is not computed and strm->adler is not set.
+
+     deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
+   parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is
+   inconsistent (for example if deflate has already been called for this stream
+   or if not at a block boundary for raw deflate).  deflateSetDictionary does
+   not perform any compression: this will be done by deflate().
+*/
+
+ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
+                                    z_streamp source));
+/*
+     Sets the destination stream as a complete copy of the source stream.
+
+     This function can be useful when several compression strategies will be
+   tried, for example when there are several ways of pre-processing the input
+   data with a filter.  The streams that will be discarded should then be freed
+   by calling deflateEnd.  Note that deflateCopy duplicates the internal
+   compression state which can be quite large, so this strategy is slow and can
+   consume lots of memory.
+
+     deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
+   (such as zalloc being Z_NULL).  msg is left unchanged in both source and
+   destination.
+*/
+
+ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
+/*
+     This function is equivalent to deflateEnd followed by deflateInit,
+   but does not free and reallocate all the internal compression state.  The
+   stream will keep the same compression level and any other attributes that
+   may have been set by deflateInit2.
+
+     deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being Z_NULL).
+*/
+
+ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
+                                      int level,
+                                      int strategy));
+/*
+     Dynamically update the compression level and compression strategy.  The
+   interpretation of level and strategy is as in deflateInit2.  This can be
+   used to switch between compression and straight copy of the input data, or
+   to switch to a different kind of input data requiring a different strategy.
+   If the compression level is changed, the input available so far is
+   compressed with the old level (and may be flushed); the new level will take
+   effect only at the next call of deflate().
+
+     Before the call of deflateParams, the stream state must be set as for
+   a call of deflate(), since the currently available input may have to be
+   compressed and flushed.  In particular, strm->avail_out must be non-zero.
+
+     deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
+   stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if
+   strm->avail_out was zero.
+*/
+
+ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm,
+                                    int good_length,
+                                    int max_lazy,
+                                    int nice_length,
+                                    int max_chain));
+/*
+     Fine tune deflate's internal compression parameters.  This should only be
+   used by someone who understands the algorithm used by zlib's deflate for
+   searching for the best matching string, and even then only by the most
+   fanatic optimizer trying to squeeze out the last compressed bit for their
+   specific input data.  Read the deflate.c source code for the meaning of the
+   max_lazy, good_length, nice_length, and max_chain parameters.
+
+     deflateTune() can be called after deflateInit() or deflateInit2(), and
+   returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream.
+ */
+
+ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm,
+                                       uLong sourceLen));
+/*
+     deflateBound() returns an upper bound on the compressed size after
+   deflation of sourceLen bytes.  It must be called after deflateInit() or
+   deflateInit2(), and after deflateSetHeader(), if used.  This would be used
+   to allocate an output buffer for deflation in a single pass, and so would be
+   called before deflate().  If that first deflate() call is provided the
+   sourceLen input bytes, an output buffer allocated to the size returned by
+   deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed
+   to return Z_STREAM_END.  Note that it is possible for the compressed size to
+   be larger than the value returned by deflateBound() if flush options other
+   than Z_FINISH or Z_NO_FLUSH are used.
+*/
+
+ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm,
+                                       unsigned *pending,
+                                       int *bits));
+/*
+     deflatePending() returns the number of bytes and bits of output that have
+   been generated, but not yet provided in the available output.  The bytes not
+   provided would be due to the available output space having being consumed.
+   The number of bits of output not provided are between 0 and 7, where they
+   await more bits to join them in order to fill out a full byte.  If pending
+   or bits are Z_NULL, then those values are not set.
+
+     deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+ */
+
+ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,
+                                     int bits,
+                                     int value));
+/*
+     deflatePrime() inserts bits in the deflate output stream.  The intent
+   is that this function is used to start off the deflate output with the bits
+   leftover from a previous deflate stream when appending to it.  As such, this
+   function can only be used for raw deflate, and must be used before the first
+   deflate() call after a deflateInit2() or deflateReset().  bits must be less
+   than or equal to 16, and that many of the least significant bits of value
+   will be inserted in the output.
+
+     deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough
+   room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the
+   source stream state was inconsistent.
+*/
+
+ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm,
+                                         gz_headerp head));
+/*
+     deflateSetHeader() provides gzip header information for when a gzip
+   stream is requested by deflateInit2().  deflateSetHeader() may be called
+   after deflateInit2() or deflateReset() and before the first call of
+   deflate().  The text, time, os, extra field, name, and comment information
+   in the provided gz_header structure are written to the gzip header (xflag is
+   ignored -- the extra flags are set according to the compression level).  The
+   caller must assure that, if not Z_NULL, name and comment are terminated with
+   a zero byte, and that if extra is not Z_NULL, that extra_len bytes are
+   available there.  If hcrc is true, a gzip header crc is included.  Note that
+   the current versions of the command-line version of gzip (up through version
+   1.3.x) do not support header crc's, and will report that it is a "multi-part
+   gzip file" and give up.
+
+     If deflateSetHeader is not used, the default gzip header has text false,
+   the time set to zero, and os set to 255, with no extra, name, or comment
+   fields.  The gzip header is returned to the default state by deflateReset().
+
+     deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+*/
+
+/*
+ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
+                                     int  windowBits));
+
+     This is another version of inflateInit with an extra parameter.  The
+   fields next_in, avail_in, zalloc, zfree and opaque must be initialized
+   before by the caller.
+
+     The windowBits parameter is the base two logarithm of the maximum window
+   size (the size of the history buffer).  It should be in the range 8..15 for
+   this version of the library.  The default value is 15 if inflateInit is used
+   instead.  windowBits must be greater than or equal to the windowBits value
+   provided to deflateInit2() while compressing, or it must be equal to 15 if
+   deflateInit2() was not used.  If a compressed stream with a larger window
+   size is given as input, inflate() will return with the error code
+   Z_DATA_ERROR instead of trying to allocate a larger window.
+
+     windowBits can also be zero to request that inflate use the window size in
+   the zlib header of the compressed stream.
+
+     windowBits can also be -8..-15 for raw inflate.  In this case, -windowBits
+   determines the window size.  inflate() will then process raw deflate data,
+   not looking for a zlib or gzip header, not generating a check value, and not
+   looking for any check values for comparison at the end of the stream.  This
+   is for use with other formats that use the deflate compressed data format
+   such as zip.  Those formats provide their own check values.  If a custom
+   format is developed using the raw deflate format for compressed data, it is
+   recommended that a check value such as an adler32 or a crc32 be applied to
+   the uncompressed data as is done in the zlib, gzip, and zip formats.  For
+   most applications, the zlib format should be used as is.  Note that comments
+   above on the use in deflateInit2() applies to the magnitude of windowBits.
+
+     windowBits can also be greater than 15 for optional gzip decoding.  Add
+   32 to windowBits to enable zlib and gzip decoding with automatic header
+   detection, or add 16 to decode only the gzip format (the zlib format will
+   return a Z_DATA_ERROR).  If a gzip stream is being decoded, strm->adler is a
+   crc32 instead of an adler32.
+
+     inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
+   version assumed by the caller, or Z_STREAM_ERROR if the parameters are
+   invalid, such as a null pointer to the structure.  msg is set to null if
+   there is no error message.  inflateInit2 does not perform any decompression
+   apart from possibly reading the zlib header if present: actual decompression
+   will be done by inflate().  (So next_in and avail_in may be modified, but
+   next_out and avail_out are unused and unchanged.) The current implementation
+   of inflateInit2() does not process any header information -- that is
+   deferred until inflate() is called.
+*/
+
+ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
+                                             const Bytef *dictionary,
+                                             uInt  dictLength));
+/*
+     Initializes the decompression dictionary from the given uncompressed byte
+   sequence.  This function must be called immediately after a call of inflate,
+   if that call returned Z_NEED_DICT.  The dictionary chosen by the compressor
+   can be determined from the adler32 value returned by that call of inflate.
+   The compressor and decompressor must use exactly the same dictionary (see
+   deflateSetDictionary).  For raw inflate, this function can be called at any
+   time to set the dictionary.  If the provided dictionary is smaller than the
+   window and there is already data in the window, then the provided dictionary
+   will amend what's there.  The application must insure that the dictionary
+   that was used for compression is provided.
+
+     inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
+   parameter is invalid (e.g.  dictionary being Z_NULL) or the stream state is
+   inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
+   expected one (incorrect adler32 value).  inflateSetDictionary does not
+   perform any decompression: this will be done by subsequent calls of
+   inflate().
+*/
+
+ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
+/*
+     Skips invalid compressed data until a possible full flush point (see above
+   for the description of deflate with Z_FULL_FLUSH) can be found, or until all
+   available input is skipped.  No output is provided.
+
+     inflateSync searches for a 00 00 FF FF pattern in the compressed data.
+   All full flush points have this pattern, but not all occurences of this
+   pattern are full flush points.
+
+     inflateSync returns Z_OK if a possible full flush point has been found,
+   Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point
+   has been found, or Z_STREAM_ERROR if the stream structure was inconsistent.
+   In the success case, the application may save the current current value of
+   total_in which indicates where valid compressed data was found.  In the
+   error case, the application may repeatedly call inflateSync, providing more
+   input each time, until success or end of the input data.
+*/
+
+ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
+                                    z_streamp source));
+/*
+     Sets the destination stream as a complete copy of the source stream.
+
+     This function can be useful when randomly accessing a large stream.  The
+   first pass through the stream can periodically record the inflate state,
+   allowing restarting inflate at those points when randomly accessing the
+   stream.
+
+     inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
+   (such as zalloc being Z_NULL).  msg is left unchanged in both source and
+   destination.
+*/
+
+ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
+/*
+     This function is equivalent to inflateEnd followed by inflateInit,
+   but does not free and reallocate all the internal decompression state.  The
+   stream will keep attributes that may have been set by inflateInit2.
+
+     inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being Z_NULL).
+*/
+
+ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm,
+                                      int windowBits));
+/*
+     This function is the same as inflateReset, but it also permits changing
+   the wrap and window size requests.  The windowBits parameter is interpreted
+   the same as it is for inflateInit2.
+
+     inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being Z_NULL), or if
+   the windowBits parameter is invalid.
+*/
+
+ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm,
+                                     int bits,
+                                     int value));
+/*
+     This function inserts bits in the inflate input stream.  The intent is
+   that this function is used to start inflating at a bit position in the
+   middle of a byte.  The provided bits will be used before any bytes are used
+   from next_in.  This function should only be used with raw inflate, and
+   should be used before the first inflate() call after inflateInit2() or
+   inflateReset().  bits must be less than or equal to 16, and that many of the
+   least significant bits of value will be inserted in the input.
+
+     If bits is negative, then the input stream bit buffer is emptied.  Then
+   inflatePrime() can be called again to put bits in the buffer.  This is used
+   to clear out bits leftover after feeding inflate a block description prior
+   to feeding inflate codes.
+
+     inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+*/
+
+ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm));
+/*
+     This function returns two values, one in the lower 16 bits of the return
+   value, and the other in the remaining upper bits, obtained by shifting the
+   return value down 16 bits.  If the upper value is -1 and the lower value is
+   zero, then inflate() is currently decoding information outside of a block.
+   If the upper value is -1 and the lower value is non-zero, then inflate is in
+   the middle of a stored block, with the lower value equaling the number of
+   bytes from the input remaining to copy.  If the upper value is not -1, then
+   it is the number of bits back from the current bit position in the input of
+   the code (literal or length/distance pair) currently being processed.  In
+   that case the lower value is the number of bytes already emitted for that
+   code.
+
+     A code is being processed if inflate is waiting for more input to complete
+   decoding of the code, or if it has completed decoding but is waiting for
+   more output space to write the literal or match data.
+
+     inflateMark() is used to mark locations in the input data for random
+   access, which may be at bit positions, and to note those cases where the
+   output of a code may span boundaries of random access blocks.  The current
+   location in the input stream can be determined from avail_in and data_type
+   as noted in the description for the Z_BLOCK flush parameter for inflate.
+
+     inflateMark returns the value noted above or -1 << 16 if the provided
+   source stream state was inconsistent.
+*/
+
+ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm,
+                                         gz_headerp head));
+/*
+     inflateGetHeader() requests that gzip header information be stored in the
+   provided gz_header structure.  inflateGetHeader() may be called after
+   inflateInit2() or inflateReset(), and before the first call of inflate().
+   As inflate() processes the gzip stream, head->done is zero until the header
+   is completed, at which time head->done is set to one.  If a zlib stream is
+   being decoded, then head->done is set to -1 to indicate that there will be
+   no gzip header information forthcoming.  Note that Z_BLOCK or Z_TREES can be
+   used to force inflate() to return immediately after header processing is
+   complete and before any actual data is decompressed.
+
+     The text, time, xflags, and os fields are filled in with the gzip header
+   contents.  hcrc is set to true if there is a header CRC.  (The header CRC
+   was valid if done is set to one.) If extra is not Z_NULL, then extra_max
+   contains the maximum number of bytes to write to extra.  Once done is true,
+   extra_len contains the actual extra field length, and extra contains the
+   extra field, or that field truncated if extra_max is less than extra_len.
+   If name is not Z_NULL, then up to name_max characters are written there,
+   terminated with a zero unless the length is greater than name_max.  If
+   comment is not Z_NULL, then up to comm_max characters are written there,
+   terminated with a zero unless the length is greater than comm_max.  When any
+   of extra, name, or comment are not Z_NULL and the respective field is not
+   present in the header, then that field is set to Z_NULL to signal its
+   absence.  This allows the use of deflateSetHeader() with the returned
+   structure to duplicate the header.  However if those fields are set to
+   allocated memory, then the application will need to save those pointers
+   elsewhere so that they can be eventually freed.
+
+     If inflateGetHeader is not used, then the header information is simply
+   discarded.  The header is always checked for validity, including the header
+   CRC if present.  inflateReset() will reset the process to discard the header
+   information.  The application would need to call inflateGetHeader() again to
+   retrieve the header from the next gzip stream.
+
+     inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.
+*/
+
+/*
+ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits,
+                                        unsigned char FAR *window));
+
+     Initialize the internal stream state for decompression using inflateBack()
+   calls.  The fields zalloc, zfree and opaque in strm must be initialized
+   before the call.  If zalloc and zfree are Z_NULL, then the default library-
+   derived memory allocation routines are used.  windowBits is the base two
+   logarithm of the window size, in the range 8..15.  window is a caller
+   supplied buffer of that size.  Except for special applications where it is
+   assured that deflate was used with small window sizes, windowBits must be 15
+   and a 32K byte window must be supplied to be able to decompress general
+   deflate streams.
+
+     See inflateBack() for the usage of these routines.
+
+     inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of
+   the parameters are invalid, Z_MEM_ERROR if the internal state could not be
+   allocated, or Z_VERSION_ERROR if the version of the library does not match
+   the version of the header file.
+*/
+
+typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *));
+typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned));
+
+ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
+                                    in_func in, void FAR *in_desc,
+                                    out_func out, void FAR *out_desc));
+/*
+     inflateBack() does a raw inflate with a single call using a call-back
+   interface for input and output.  This is more efficient than inflate() for
+   file i/o applications in that it avoids copying between the output and the
+   sliding window by simply making the window itself the output buffer.  This
+   function trusts the application to not change the output buffer passed by
+   the output function, at least until inflateBack() returns.
+
+     inflateBackInit() must be called first to allocate the internal state
+   and to initialize the state with the user-provided window buffer.
+   inflateBack() may then be used multiple times to inflate a complete, raw
+   deflate stream with each call.  inflateBackEnd() is then called to free the
+   allocated state.
+
+     A raw deflate stream is one with no zlib or gzip header or trailer.
+   This routine would normally be used in a utility that reads zip or gzip
+   files and writes out uncompressed files.  The utility would decode the
+   header and process the trailer on its own, hence this routine expects only
+   the raw deflate stream to decompress.  This is different from the normal
+   behavior of inflate(), which expects either a zlib or gzip header and
+   trailer around the deflate stream.
+
+     inflateBack() uses two subroutines supplied by the caller that are then
+   called by inflateBack() for input and output.  inflateBack() calls those
+   routines until it reads a complete deflate stream and writes out all of the
+   uncompressed data, or until it encounters an error.  The function's
+   parameters and return types are defined above in the in_func and out_func
+   typedefs.  inflateBack() will call in(in_desc, &buf) which should return the
+   number of bytes of provided input, and a pointer to that input in buf.  If
+   there is no input available, in() must return zero--buf is ignored in that
+   case--and inflateBack() will return a buffer error.  inflateBack() will call
+   out(out_desc, buf, len) to write the uncompressed data buf[0..len-1].  out()
+   should return zero on success, or non-zero on failure.  If out() returns
+   non-zero, inflateBack() will return with an error.  Neither in() nor out()
+   are permitted to change the contents of the window provided to
+   inflateBackInit(), which is also the buffer that out() uses to write from.
+   The length written by out() will be at most the window size.  Any non-zero
+   amount of input may be provided by in().
+
+     For convenience, inflateBack() can be provided input on the first call by
+   setting strm->next_in and strm->avail_in.  If that input is exhausted, then
+   in() will be called.  Therefore strm->next_in must be initialized before
+   calling inflateBack().  If strm->next_in is Z_NULL, then in() will be called
+   immediately for input.  If strm->next_in is not Z_NULL, then strm->avail_in
+   must also be initialized, and then if strm->avail_in is not zero, input will
+   initially be taken from strm->next_in[0 ..  strm->avail_in - 1].
+
+     The in_desc and out_desc parameters of inflateBack() is passed as the
+   first parameter of in() and out() respectively when they are called.  These
+   descriptors can be optionally used to pass any information that the caller-
+   supplied in() and out() functions need to do their job.
+
+     On return, inflateBack() will set strm->next_in and strm->avail_in to
+   pass back any unused input that was provided by the last in() call.  The
+   return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR
+   if in() or out() returned an error, Z_DATA_ERROR if there was a format error
+   in the deflate stream (in which case strm->msg is set to indicate the nature
+   of the error), or Z_STREAM_ERROR if the stream was not properly initialized.
+   In the case of Z_BUF_ERROR, an input or output error can be distinguished
+   using strm->next_in which will be Z_NULL only if in() returned an error.  If
+   strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning
+   non-zero.  (in() will always be called before out(), so strm->next_in is
+   assured to be defined if out() returns non-zero.) Note that inflateBack()
+   cannot return Z_OK.
+*/
+
+ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm));
+/*
+     All memory allocated by inflateBackInit() is freed.
+
+     inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream
+   state was inconsistent.
+*/
+
+ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
+/* Return flags indicating compile-time options.
+
+    Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other:
+     1.0: size of uInt
+     3.2: size of uLong
+     5.4: size of voidpf (pointer)
+     7.6: size of z_off_t
+
+    Compiler, assembler, and debug options:
+     8: DEBUG
+     9: ASMV or ASMINF -- use ASM code
+     10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention
+     11: 0 (reserved)
+
+    One-time table building (smaller code, but not thread-safe if true):
+     12: BUILDFIXED -- build static block decoding tables when needed
+     13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed
+     14,15: 0 (reserved)
+
+    Library content (indicates missing functionality):
+     16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking
+                          deflate code when not needed)
+     17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect
+                    and decode gzip streams (to avoid linking crc code)
+     18-19: 0 (reserved)
+
+    Operation variations (changes in library functionality):
+     20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate
+     21: FASTEST -- deflate algorithm with only one, lowest compression level
+     22,23: 0 (reserved)
+
+    The sprintf variant used by gzprintf (zero is best):
+     24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format
+     25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure!
+     26: 0 = returns value, 1 = void -- 1 means inferred string length returned
+
+    Remainder:
+     27-31: 0 (reserved)
+ */
+
+#ifndef Z_SOLO
+
+                        /* utility functions */
+
+/*
+     The following utility functions are implemented on top of the basic
+   stream-oriented functions.  To simplify the interface, some default options
+   are assumed (compression level and memory usage, standard memory allocation
+   functions).  The source code of these utility functions can be modified if
+   you need special options.
+*/
+
+ZEXTERN int ZEXPORT compress OF((Bytef *dest,   uLongf *destLen,
+                                 const Bytef *source, uLong sourceLen));
+/*
+     Compresses the source buffer into the destination buffer.  sourceLen is
+   the byte length of the source buffer.  Upon entry, destLen is the total size
+   of the destination buffer, which must be at least the value returned by
+   compressBound(sourceLen).  Upon exit, destLen is the actual size of the
+   compressed buffer.
+
+     compress returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_BUF_ERROR if there was not enough room in the output
+   buffer.
+*/
+
+ZEXTERN int ZEXPORT compress2 OF((Bytef *dest,   uLongf *destLen,
+                                  const Bytef *source, uLong sourceLen,
+                                  int level));
+/*
+     Compresses the source buffer into the destination buffer.  The level
+   parameter has the same meaning as in deflateInit.  sourceLen is the byte
+   length of the source buffer.  Upon entry, destLen is the total size of the
+   destination buffer, which must be at least the value returned by
+   compressBound(sourceLen).  Upon exit, destLen is the actual size of the
+   compressed buffer.
+
+     compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_BUF_ERROR if there was not enough room in the output buffer,
+   Z_STREAM_ERROR if the level parameter is invalid.
+*/
+
+ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen));
+/*
+     compressBound() returns an upper bound on the compressed size after
+   compress() or compress2() on sourceLen bytes.  It would be used before a
+   compress() or compress2() call to allocate the destination buffer.
+*/
+
+ZEXTERN int ZEXPORT uncompress OF((Bytef *dest,   uLongf *destLen,
+                                   const Bytef *source, uLong sourceLen));
+/*
+     Decompresses the source buffer into the destination buffer.  sourceLen is
+   the byte length of the source buffer.  Upon entry, destLen is the total size
+   of the destination buffer, which must be large enough to hold the entire
+   uncompressed data.  (The size of the uncompressed data must have been saved
+   previously by the compressor and transmitted to the decompressor by some
+   mechanism outside the scope of this compression library.) Upon exit, destLen
+   is the actual size of the uncompressed buffer.
+
+     uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_BUF_ERROR if there was not enough room in the output
+   buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete.  In
+   the case where there is not enough room, uncompress() will fill the output
+   buffer with the uncompressed data up to that point.
+*/
+
+                        /* gzip file access functions */
+
+/*
+     This library supports reading and writing files in gzip (.gz) format with
+   an interface similar to that of stdio, using the functions that start with
+   "gz".  The gzip format is different from the zlib format.  gzip is a gzip
+   wrapper, documented in RFC 1952, wrapped around a deflate stream.
+*/
+
+typedef struct gzFile_s *gzFile;    /* semi-opaque gzip file descriptor */
+
+/*
+ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
+
+     Opens a gzip (.gz) file for reading or writing.  The mode parameter is as
+   in fopen ("rb" or "wb") but can also include a compression level ("wb9") or
+   a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only
+   compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F'
+   for fixed code compression as in "wb9F".  (See the description of
+   deflateInit2 for more information about the strategy parameter.)  'T' will
+   request transparent writing or appending with no compression and not using
+   the gzip format.
+
+     "a" can be used instead of "w" to request that the gzip stream that will
+   be written be appended to the file.  "+" will result in an error, since
+   reading and writing to the same gzip file is not supported.  The addition of
+   "x" when writing will create the file exclusively, which fails if the file
+   already exists.  On systems that support it, the addition of "e" when
+   reading or writing will set the flag to close the file on an execve() call.
+
+     These functions, as well as gzip, will read and decode a sequence of gzip
+   streams in a file.  The append function of gzopen() can be used to create
+   such a file.  (Also see gzflush() for another way to do this.)  When
+   appending, gzopen does not test whether the file begins with a gzip stream,
+   nor does it look for the end of the gzip streams to begin appending.  gzopen
+   will simply append a gzip stream to the existing file.
+
+     gzopen can be used to read a file which is not in gzip format; in this
+   case gzread will directly read from the file without decompression.  When
+   reading, this will be detected automatically by looking for the magic two-
+   byte gzip header.
+
+     gzopen returns NULL if the file could not be opened, if there was
+   insufficient memory to allocate the gzFile state, or if an invalid mode was
+   specified (an 'r', 'w', or 'a' was not provided, or '+' was provided).
+   errno can be checked to determine if the reason gzopen failed was that the
+   file could not be opened.
+*/
+
+ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
+/*
+     gzdopen associates a gzFile with the file descriptor fd.  File descriptors
+   are obtained from calls like open, dup, creat, pipe or fileno (if the file
+   has been previously opened with fopen).  The mode parameter is as in gzopen.
+
+     The next call of gzclose on the returned gzFile will also close the file
+   descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
+   fd.  If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd,
+   mode);.  The duplicated descriptor should be saved to avoid a leak, since
+   gzdopen does not close fd if it fails.  If you are using fileno() to get the
+   file descriptor from a FILE *, then you will have to use dup() to avoid
+   double-close()ing the file descriptor.  Both gzclose() and fclose() will
+   close the associated file descriptor, so they need to have different file
+   descriptors.
+
+     gzdopen returns NULL if there was insufficient memory to allocate the
+   gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not
+   provided, or '+' was provided), or if fd is -1.  The file descriptor is not
+   used until the next gz* read, write, seek, or close operation, so gzdopen
+   will not detect if fd is invalid (unless fd is -1).
+*/
+
+ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
+/*
+     Set the internal buffer size used by this library's functions.  The
+   default buffer size is 8192 bytes.  This function must be called after
+   gzopen() or gzdopen(), and before any other calls that read or write the
+   file.  The buffer memory allocation is always deferred to the first read or
+   write.  Two buffers are allocated, either both of the specified size when
+   writing, or one of the specified size and the other twice that size when
+   reading.  A larger buffer size of, for example, 64K or 128K bytes will
+   noticeably increase the speed of decompression (reading).
+
+     The new buffer size also affects the maximum length for gzprintf().
+
+     gzbuffer() returns 0 on success, or -1 on failure, such as being called
+   too late.
+*/
+
+ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
+/*
+     Dynamically update the compression level or strategy.  See the description
+   of deflateInit2 for the meaning of these parameters.
+
+     gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
+   opened for writing.
+*/
+
+ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
+/*
+     Reads the given number of uncompressed bytes from the compressed file.  If
+   the input file is not in gzip format, gzread copies the given number of
+   bytes into the buffer directly from the file.
+
+     After reaching the end of a gzip stream in the input, gzread will continue
+   to read, looking for another gzip stream.  Any number of gzip streams may be
+   concatenated in the input file, and will all be decompressed by gzread().
+   If something other than a gzip stream is encountered after a gzip stream,
+   that remaining trailing garbage is ignored (and no error is returned).
+
+     gzread can be used to read a gzip file that is being concurrently written.
+   Upon reaching the end of the input, gzread will return with the available
+   data.  If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then
+   gzclearerr can be used to clear the end of file indicator in order to permit
+   gzread to be tried again.  Z_OK indicates that a gzip stream was completed
+   on the last gzread.  Z_BUF_ERROR indicates that the input file ended in the
+   middle of a gzip stream.  Note that gzread does not return -1 in the event
+   of an incomplete gzip stream.  This error is deferred until gzclose(), which
+   will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip
+   stream.  Alternatively, gzerror can be used before gzclose to detect this
+   case.
+
+     gzread returns the number of uncompressed bytes actually read, less than
+   len for end of file, or -1 for error.
+*/
+
+ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
+                                voidpc buf, unsigned len));
+/*
+     Writes the given number of uncompressed bytes into the compressed file.
+   gzwrite returns the number of uncompressed bytes written or 0 in case of
+   error.
+*/
+
+ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
+/*
+     Converts, formats, and writes the arguments to the compressed file under
+   control of the format string, as in fprintf.  gzprintf returns the number of
+   uncompressed bytes actually written, or 0 in case of error.  The number of
+   uncompressed bytes written is limited to 8191, or one less than the buffer
+   size given to gzbuffer().  The caller should assure that this limit is not
+   exceeded.  If it is exceeded, then gzprintf() will return an error (0) with
+   nothing written.  In this case, there may also be a buffer overflow with
+   unpredictable consequences, which is possible only if zlib was compiled with
+   the insecure functions sprintf() or vsprintf() because the secure snprintf()
+   or vsnprintf() functions were not available.  This can be determined using
+   zlibCompileFlags().
+*/
+
+ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
+/*
+     Writes the given null-terminated string to the compressed file, excluding
+   the terminating null character.
+
+     gzputs returns the number of characters written, or -1 in case of error.
+*/
+
+ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
+/*
+     Reads bytes from the compressed file until len-1 characters are read, or a
+   newline character is read and transferred to buf, or an end-of-file
+   condition is encountered.  If any characters are read or if len == 1, the
+   string is terminated with a null character.  If no characters are read due
+   to an end-of-file or len < 1, then the buffer is left untouched.
+
+     gzgets returns buf which is a null-terminated string, or it returns NULL
+   for end-of-file or in case of error.  If there was an error, the contents at
+   buf are indeterminate.
+*/
+
+ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
+/*
+     Writes c, converted to an unsigned char, into the compressed file.  gzputc
+   returns the value that was written, or -1 in case of error.
+*/
+
+ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
+/*
+     Reads one byte from the compressed file.  gzgetc returns this byte or -1
+   in case of end of file or error.  This is implemented as a macro for speed.
+   As such, it does not do all of the checking the other functions do.  I.e.
+   it does not check to see if file is NULL, nor whether the structure file
+   points to has been clobbered or not.
+*/
+
+ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
+/*
+     Push one character back onto the stream to be read as the first character
+   on the next read.  At least one character of push-back is allowed.
+   gzungetc() returns the character pushed, or -1 on failure.  gzungetc() will
+   fail if c is -1, and may fail if a character has been pushed but not read
+   yet.  If gzungetc is used immediately after gzopen or gzdopen, at least the
+   output buffer size of pushed characters is allowed.  (See gzbuffer above.)
+   The pushed character will be discarded if the stream is repositioned with
+   gzseek() or gzrewind().
+*/
+
+ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
+/*
+     Flushes all pending output into the compressed file.  The parameter flush
+   is as in the deflate() function.  The return value is the zlib error number
+   (see function gzerror below).  gzflush is only permitted when writing.
+
+     If the flush parameter is Z_FINISH, the remaining data is written and the
+   gzip stream is completed in the output.  If gzwrite() is called again, a new
+   gzip stream will be started in the output.  gzread() is able to read such
+   concatented gzip streams.
+
+     gzflush should be called only when strictly necessary because it will
+   degrade compression if called too often.
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
+                                   z_off_t offset, int whence));
+
+     Sets the starting position for the next gzread or gzwrite on the given
+   compressed file.  The offset represents a number of bytes in the
+   uncompressed data stream.  The whence parameter is defined as in lseek(2);
+   the value SEEK_END is not supported.
+
+     If the file is opened for reading, this function is emulated but can be
+   extremely slow.  If the file is opened for writing, only forward seeks are
+   supported; gzseek then compresses a sequence of zeroes up to the new
+   starting position.
+
+     gzseek returns the resulting offset location as measured in bytes from
+   the beginning of the uncompressed stream, or -1 in case of error, in
+   particular if the file is opened for writing and the new starting position
+   would be before the current position.
+*/
+
+ZEXTERN int ZEXPORT    gzrewind OF((gzFile file));
+/*
+     Rewinds the given file. This function is supported only for reading.
+
+     gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT    gztell OF((gzFile file));
+
+     Returns the starting position for the next gzread or gzwrite on the given
+   compressed file.  This position represents a number of bytes in the
+   uncompressed data stream, and is zero when starting, even if appending or
+   reading a gzip stream from the middle of a file using gzdopen().
+
+     gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file));
+
+     Returns the current offset in the file being read or written.  This offset
+   includes the count of bytes that precede the gzip stream, for example when
+   appending or when using gzdopen() for reading.  When reading, the offset
+   does not include as yet unused buffered input.  This information can be used
+   for a progress indicator.  On error, gzoffset() returns -1.
+*/
+
+ZEXTERN int ZEXPORT gzeof OF((gzFile file));
+/*
+     Returns true (1) if the end-of-file indicator has been set while reading,
+   false (0) otherwise.  Note that the end-of-file indicator is set only if the
+   read tried to go past the end of the input, but came up short.  Therefore,
+   just like feof(), gzeof() may return false even if there is no more data to
+   read, in the event that the last read request was for the exact number of
+   bytes remaining in the input file.  This will happen if the input file size
+   is an exact multiple of the buffer size.
+
+     If gzeof() returns true, then the read functions will return no more data,
+   unless the end-of-file indicator is reset by gzclearerr() and the input file
+   has grown since the previous end of file was detected.
+*/
+
+ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
+/*
+     Returns true (1) if file is being copied directly while reading, or false
+   (0) if file is a gzip stream being decompressed.
+
+     If the input file is empty, gzdirect() will return true, since the input
+   does not contain a gzip stream.
+
+     If gzdirect() is used immediately after gzopen() or gzdopen() it will
+   cause buffers to be allocated to allow reading the file to determine if it
+   is a gzip file.  Therefore if gzbuffer() is used, it should be called before
+   gzdirect().
+
+     When writing, gzdirect() returns true (1) if transparent writing was
+   requested ("wT" for the gzopen() mode), or false (0) otherwise.  (Note:
+   gzdirect() is not needed when writing.  Transparent writing must be
+   explicitly requested, so the application already knows the answer.  When
+   linking statically, using gzdirect() will include all of the zlib code for
+   gzip file reading and decompression, which may not be desired.)
+*/
+
+ZEXTERN int ZEXPORT    gzclose OF((gzFile file));
+/*
+     Flushes all pending output if necessary, closes the compressed file and
+   deallocates the (de)compression state.  Note that once file is closed, you
+   cannot call gzerror with file, since its structures have been deallocated.
+   gzclose must not be called more than once on the same file, just as free
+   must not be called more than once on the same allocation.
+
+     gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a
+   file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the
+   last read ended in the middle of a gzip stream, or Z_OK on success.
+*/
+
+ZEXTERN int ZEXPORT gzclose_r OF((gzFile file));
+ZEXTERN int ZEXPORT gzclose_w OF((gzFile file));
+/*
+     Same as gzclose(), but gzclose_r() is only for use when reading, and
+   gzclose_w() is only for use when writing or appending.  The advantage to
+   using these instead of gzclose() is that they avoid linking in zlib
+   compression or decompression code that is not used when only reading or only
+   writing respectively.  If gzclose() is used, then both compression and
+   decompression code will be included the application when linking to a static
+   zlib library.
+*/
+
+ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
+/*
+     Returns the error message for the last error which occurred on the given
+   compressed file.  errnum is set to zlib error number.  If an error occurred
+   in the file system and not in the compression library, errnum is set to
+   Z_ERRNO and the application may consult errno to get the exact error code.
+
+     The application must not modify the returned string.  Future calls to
+   this function may invalidate the previously returned string.  If file is
+   closed, then the string previously returned by gzerror will no longer be
+   available.
+
+     gzerror() should be used to distinguish errors from end-of-file for those
+   functions above that do not distinguish those cases in their return values.
+*/
+
+ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
+/*
+     Clears the error and end-of-file flags for file.  This is analogous to the
+   clearerr() function in stdio.  This is useful for continuing to read a gzip
+   file that is being written concurrently.
+*/
+
+#endif /* !Z_SOLO */
+
+                        /* checksum functions */
+
+/*
+     These functions are not related to compression but are exported
+   anyway because they might be useful in applications using the compression
+   library.
+*/
+
+ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
+/*
+     Update a running Adler-32 checksum with the bytes buf[0..len-1] and
+   return the updated checksum.  If buf is Z_NULL, this function returns the
+   required initial value for the checksum.
+
+     An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
+   much faster.
+
+   Usage example:
+
+     uLong adler = adler32(0L, Z_NULL, 0);
+
+     while (read_buffer(buffer, length) != EOF) {
+       adler = adler32(adler, buffer, length);
+     }
+     if (adler != original_adler) error();
+*/
+
+/*
+ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
+                                          z_off_t len2));
+
+     Combine two Adler-32 checksums into one.  For two sequences of bytes, seq1
+   and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for
+   each, adler1 and adler2.  adler32_combine() returns the Adler-32 checksum of
+   seq1 and seq2 concatenated, requiring only adler1, adler2, and len2.  Note
+   that the z_off_t type (like off_t) is a signed integer.  If len2 is
+   negative, the result has no meaning or utility.
+*/
+
+ZEXTERN uLong ZEXPORT crc32   OF((uLong crc, const Bytef *buf, uInt len));
+/*
+     Update a running CRC-32 with the bytes buf[0..len-1] and return the
+   updated CRC-32.  If buf is Z_NULL, this function returns the required
+   initial value for the crc.  Pre- and post-conditioning (one's complement) is
+   performed within this function so it shouldn't be done by the application.
+
+   Usage example:
+
+     uLong crc = crc32(0L, Z_NULL, 0);
+
+     while (read_buffer(buffer, length) != EOF) {
+       crc = crc32(crc, buffer, length);
+     }
+     if (crc != original_crc) error();
+*/
+
+/*
+ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2));
+
+     Combine two CRC-32 check values into one.  For two sequences of bytes,
+   seq1 and seq2 with lengths len1 and len2, CRC-32 check values were
+   calculated for each, crc1 and crc2.  crc32_combine() returns the CRC-32
+   check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and
+   len2.
+*/
+
+
+                        /* various hacks, don't look :) */
+
+/* deflateInit and inflateInit are macros to allow checking the zlib version
+ * and the compiler's view of z_stream:
+ */
+ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level,
+                                     const char *version, int stream_size));
+ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm,
+                                     const char *version, int stream_size));
+ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int  level, int  method,
+                                      int windowBits, int memLevel,
+                                      int strategy, const char *version,
+                                      int stream_size));
+ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int  windowBits,
+                                      const char *version, int stream_size));
+ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
+                                         unsigned char FAR *window,
+                                         const char *version,
+                                         int stream_size));
+#define deflateInit(strm, level) \
+        deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
+#define inflateInit(strm) \
+        inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
+#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+        deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+                      (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
+#define inflateInit2(strm, windowBits) \
+        inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
+                      (int)sizeof(z_stream))
+#define inflateBackInit(strm, windowBits, window) \
+        inflateBackInit_((strm), (windowBits), (window), \
+                      ZLIB_VERSION, (int)sizeof(z_stream))
+
+#ifndef Z_SOLO
+
+/* gzgetc() macro and its supporting function and exposed data structure.  Note
+ * that the real internal state is much larger than the exposed structure.
+ * This abbreviated structure exposes just enough for the gzgetc() macro.  The
+ * user should not mess with these exposed elements, since their names or
+ * behavior could change in the future, perhaps even capriciously.  They can
+ * only be used by the gzgetc() macro.  You have been warned.
+ */
+struct gzFile_s {
+    unsigned have;
+    unsigned char *next;
+    z_off64_t pos;
+};
+ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file));  /* backward compatibility */
+#ifdef Z_PREFIX_SET
+#  undef z_gzgetc
+#  define z_gzgetc(g) \
+          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+#else
+#  define gzgetc(g) \
+          ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+#endif
+
+/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or
+ * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if
+ * both are true, the application gets the *64 functions, and the regular
+ * functions are changed to 64 bits) -- in case these are set on systems
+ * without large file support, _LFS64_LARGEFILE must also be true
+ */
+#ifdef Z_LARGE64
+   ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
+   ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
+   ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
+   ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
+   ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t));
+   ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t));
+#endif
+
+#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64)
+#  ifdef Z_PREFIX_SET
+#    define z_gzopen z_gzopen64
+#    define z_gzseek z_gzseek64
+#    define z_gztell z_gztell64
+#    define z_gzoffset z_gzoffset64
+#    define z_adler32_combine z_adler32_combine64
+#    define z_crc32_combine z_crc32_combine64
+#  else
+#    define gzopen gzopen64
+#    define gzseek gzseek64
+#    define gztell gztell64
+#    define gzoffset gzoffset64
+#    define adler32_combine adler32_combine64
+#    define crc32_combine crc32_combine64
+#  endif
+#  ifndef Z_LARGE64
+     ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
+     ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int));
+     ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile));
+     ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile));
+     ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
+     ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
+#  endif
+#else
+   ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *));
+   ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int));
+   ZEXTERN z_off_t ZEXPORT gztell OF((gzFile));
+   ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile));
+   ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
+   ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+#endif
+
+#else /* Z_SOLO */
+
+   ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
+   ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+
+#endif /* !Z_SOLO */
+
+/* hack for buggy compilers */
+#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
+    struct internal_state {int dummy;};
+#endif
+
+/* undocumented functions */
+ZEXTERN const char   * ZEXPORT zError           OF((int));
+ZEXTERN int            ZEXPORT inflateSyncPoint OF((z_streamp));
+ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table    OF((void));
+ZEXTERN int            ZEXPORT inflateUndermine OF((z_streamp, int));
+ZEXTERN int            ZEXPORT inflateResetKeep OF((z_streamp));
+ZEXTERN int            ZEXPORT deflateResetKeep OF((z_streamp));
+#if defined(_WIN32) && !defined(Z_SOLO)
+ZEXTERN gzFile         ZEXPORT gzopen_w OF((const wchar_t *path,
+                                            const char *mode));
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ZLIB_H */
diff --git a/libs/ext/zlib/zutil.c b/libs/ext/zlib/zutil.c
new file mode 100644
index 0000000..65e0d3b
--- /dev/null
+++ b/libs/ext/zlib/zutil.c
@@ -0,0 +1,324 @@
+/* zutil.c -- target dependent utility functions for the compression library
+ * Copyright (C) 1995-2005, 2010, 2011, 2012 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#include "zutil.h"
+#ifndef Z_SOLO
+#  include "gzguts.h"
+#endif
+
+#ifndef NO_DUMMY_DECL
+struct internal_state      {int dummy;}; /* for buggy compilers */
+#endif
+
+const char * const z_errmsg[10] = {
+"need dictionary",     /* Z_NEED_DICT       2  */
+"stream end",          /* Z_STREAM_END      1  */
+"",                    /* Z_OK              0  */
+"file error",          /* Z_ERRNO         (-1) */
+"stream error",        /* Z_STREAM_ERROR  (-2) */
+"data error",          /* Z_DATA_ERROR    (-3) */
+"insufficient memory", /* Z_MEM_ERROR     (-4) */
+"buffer error",        /* Z_BUF_ERROR     (-5) */
+"incompatible version",/* Z_VERSION_ERROR (-6) */
+""};
+
+
+const char * ZEXPORT zlibVersion()
+{
+    return ZLIB_VERSION;
+}
+
+uLong ZEXPORT zlibCompileFlags()
+{
+    uLong flags;
+
+    flags = 0;
+    switch ((int)(sizeof(uInt))) {
+    case 2:     break;
+    case 4:     flags += 1;     break;
+    case 8:     flags += 2;     break;
+    default:    flags += 3;
+    }
+    switch ((int)(sizeof(uLong))) {
+    case 2:     break;
+    case 4:     flags += 1 << 2;        break;
+    case 8:     flags += 2 << 2;        break;
+    default:    flags += 3 << 2;
+    }
+    switch ((int)(sizeof(voidpf))) {
+    case 2:     break;
+    case 4:     flags += 1 << 4;        break;
+    case 8:     flags += 2 << 4;        break;
+    default:    flags += 3 << 4;
+    }
+    switch ((int)(sizeof(z_off_t))) {
+    case 2:     break;
+    case 4:     flags += 1 << 6;        break;
+    case 8:     flags += 2 << 6;        break;
+    default:    flags += 3 << 6;
+    }
+#ifdef DEBUG
+    flags += 1 << 8;
+#endif
+#if defined(ASMV) || defined(ASMINF)
+    flags += 1 << 9;
+#endif
+#ifdef ZLIB_WINAPI
+    flags += 1 << 10;
+#endif
+#ifdef BUILDFIXED
+    flags += 1 << 12;
+#endif
+#ifdef DYNAMIC_CRC_TABLE
+    flags += 1 << 13;
+#endif
+#ifdef NO_GZCOMPRESS
+    flags += 1L << 16;
+#endif
+#ifdef NO_GZIP
+    flags += 1L << 17;
+#endif
+#ifdef PKZIP_BUG_WORKAROUND
+    flags += 1L << 20;
+#endif
+#ifdef FASTEST
+    flags += 1L << 21;
+#endif
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#  ifdef NO_vsnprintf
+    flags += 1L << 25;
+#    ifdef HAS_vsprintf_void
+    flags += 1L << 26;
+#    endif
+#  else
+#    ifdef HAS_vsnprintf_void
+    flags += 1L << 26;
+#    endif
+#  endif
+#else
+    flags += 1L << 24;
+#  ifdef NO_snprintf
+    flags += 1L << 25;
+#    ifdef HAS_sprintf_void
+    flags += 1L << 26;
+#    endif
+#  else
+#    ifdef HAS_snprintf_void
+    flags += 1L << 26;
+#    endif
+#  endif
+#endif
+    return flags;
+}
+
+#ifdef DEBUG
+
+#  ifndef verbose
+#    define verbose 0
+#  endif
+int ZLIB_INTERNAL z_verbose = verbose;
+
+void ZLIB_INTERNAL z_error (m)
+    char *m;
+{
+    fprintf(stderr, "%s\n", m);
+    exit(1);
+}
+#endif
+
+/* exported to allow conversion of error code to string for compress() and
+ * uncompress()
+ */
+const char * ZEXPORT zError(err)
+    int err;
+{
+    return ERR_MSG(err);
+}
+
+#if defined(_WIN32_WCE)
+    /* The Microsoft C Run-Time Library for Windows CE doesn't have
+     * errno.  We define it as a global variable to simplify porting.
+     * Its value is always 0 and should not be used.
+     */
+    int errno = 0;
+#endif
+
+#ifndef HAVE_MEMCPY
+
+void ZLIB_INTERNAL zmemcpy(dest, source, len)
+    Bytef* dest;
+    const Bytef* source;
+    uInt  len;
+{
+    if (len == 0) return;
+    do {
+        *dest++ = *source++; /* ??? to be unrolled */
+    } while (--len != 0);
+}
+
+int ZLIB_INTERNAL zmemcmp(s1, s2, len)
+    const Bytef* s1;
+    const Bytef* s2;
+    uInt  len;
+{
+    uInt j;
+
+    for (j = 0; j < len; j++) {
+        if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1;
+    }
+    return 0;
+}
+
+void ZLIB_INTERNAL zmemzero(dest, len)
+    Bytef* dest;
+    uInt  len;
+{
+    if (len == 0) return;
+    do {
+        *dest++ = 0;  /* ??? to be unrolled */
+    } while (--len != 0);
+}
+#endif
+
+#ifndef Z_SOLO
+
+#ifdef SYS16BIT
+
+#ifdef __TURBOC__
+/* Turbo C in 16-bit mode */
+
+#  define MY_ZCALLOC
+
+/* Turbo C malloc() does not allow dynamic allocation of 64K bytes
+ * and farmalloc(64K) returns a pointer with an offset of 8, so we
+ * must fix the pointer. Warning: the pointer must be put back to its
+ * original form in order to free it, use zcfree().
+ */
+
+#define MAX_PTR 10
+/* 10*64K = 640K */
+
+local int next_ptr = 0;
+
+typedef struct ptr_table_s {
+    voidpf org_ptr;
+    voidpf new_ptr;
+} ptr_table;
+
+local ptr_table table[MAX_PTR];
+/* This table is used to remember the original form of pointers
+ * to large buffers (64K). Such pointers are normalized with a zero offset.
+ * Since MSDOS is not a preemptive multitasking OS, this table is not
+ * protected from concurrent access. This hack doesn't work anyway on
+ * a protected system like OS/2. Use Microsoft C instead.
+ */
+
+voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
+{
+    voidpf buf = opaque; /* just to make some compilers happy */
+    ulg bsize = (ulg)items*size;
+
+    /* If we allocate less than 65520 bytes, we assume that farmalloc
+     * will return a usable pointer which doesn't have to be normalized.
+     */
+    if (bsize < 65520L) {
+        buf = farmalloc(bsize);
+        if (*(ush*)&buf != 0) return buf;
+    } else {
+        buf = farmalloc(bsize + 16L);
+    }
+    if (buf == NULL || next_ptr >= MAX_PTR) return NULL;
+    table[next_ptr].org_ptr = buf;
+
+    /* Normalize the pointer to seg:0 */
+    *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4;
+    *(ush*)&buf = 0;
+    table[next_ptr++].new_ptr = buf;
+    return buf;
+}
+
+void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
+{
+    int n;
+    if (*(ush*)&ptr != 0) { /* object < 64K */
+        farfree(ptr);
+        return;
+    }
+    /* Find the original pointer */
+    for (n = 0; n < next_ptr; n++) {
+        if (ptr != table[n].new_ptr) continue;
+
+        farfree(table[n].org_ptr);
+        while (++n < next_ptr) {
+            table[n-1] = table[n];
+        }
+        next_ptr--;
+        return;
+    }
+    ptr = opaque; /* just to make some compilers happy */
+    Assert(0, "zcfree: ptr not found");
+}
+
+#endif /* __TURBOC__ */
+
+
+#ifdef M_I86
+/* Microsoft C in 16-bit mode */
+
+#  define MY_ZCALLOC
+
+#if (!defined(_MSC_VER) || (_MSC_VER <= 600))
+#  define _halloc  halloc
+#  define _hfree   hfree
+#endif
+
+voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size)
+{
+    if (opaque) opaque = 0; /* to make compiler happy */
+    return _halloc((long)items, size);
+}
+
+void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
+{
+    if (opaque) opaque = 0; /* to make compiler happy */
+    _hfree(ptr);
+}
+
+#endif /* M_I86 */
+
+#endif /* SYS16BIT */
+
+
+#ifndef MY_ZCALLOC /* Any system without a special alloc function */
+
+#ifndef STDC
+extern voidp  malloc OF((uInt size));
+extern voidp  calloc OF((uInt items, uInt size));
+extern void   free   OF((voidpf ptr));
+#endif
+
+voidpf ZLIB_INTERNAL zcalloc (opaque, items, size)
+    voidpf opaque;
+    unsigned items;
+    unsigned size;
+{
+    if (opaque) items += size - size; /* make compiler happy */
+    return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
+                              (voidpf)calloc(items, size);
+}
+
+void ZLIB_INTERNAL zcfree (opaque, ptr)
+    voidpf opaque;
+    voidpf ptr;
+{
+    free(ptr);
+    if (opaque) return; /* make compiler happy */
+}
+
+#endif /* MY_ZCALLOC */
+
+#endif /* !Z_SOLO */
diff --git a/libs/ext/zlib/zutil.h b/libs/ext/zlib/zutil.h
new file mode 100644
index 0000000..4e3dcc6
--- /dev/null
+++ b/libs/ext/zlib/zutil.h
@@ -0,0 +1,252 @@
+/* zutil.h -- internal interface and configuration of the compression library
+ * Copyright (C) 1995-2012 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+   part of the implementation of the compression library and is
+   subject to change. Applications should only use zlib.h.
+ */
+
+/* @(#) $Id$ */
+
+#ifndef ZUTIL_H
+#define ZUTIL_H
+
+#ifdef HAVE_HIDDEN
+#  define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
+#else
+#  define ZLIB_INTERNAL
+#endif
+
+#include "zlib.h"
+
+#if defined(STDC) && !defined(Z_SOLO)
+#  if !(defined(_WIN32_WCE) && defined(_MSC_VER))
+#    include <stddef.h>
+#  endif
+#  include <string.h>
+#  include <stdlib.h>
+#endif
+
+#ifdef Z_SOLO
+   typedef long ptrdiff_t;  /* guess -- will be caught if guess is wrong */
+#endif
+
+#ifndef local
+#  define local static
+#endif
+/* compile with -Dlocal if your debugger can't find static symbols */
+
+typedef unsigned char  uch;
+typedef uch FAR uchf;
+typedef unsigned short ush;
+typedef ush FAR ushf;
+typedef unsigned long  ulg;
+
+extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
+/* (size given to avoid silly warnings with Visual C++) */
+
+#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
+
+#define ERR_RETURN(strm,err) \
+  return (strm->msg = (char*)ERR_MSG(err), (err))
+/* To be used only when the state is known to be valid */
+
+        /* common constants */
+
+#ifndef DEF_WBITS
+#  define DEF_WBITS MAX_WBITS
+#endif
+/* default windowBits for decompression. MAX_WBITS is for compression only */
+
+#if MAX_MEM_LEVEL >= 8
+#  define DEF_MEM_LEVEL 8
+#else
+#  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
+#endif
+/* default memLevel */
+
+#define STORED_BLOCK 0
+#define STATIC_TREES 1
+#define DYN_TREES    2
+/* The three kinds of block type */
+
+#define MIN_MATCH  3
+#define MAX_MATCH  258
+/* The minimum and maximum match lengths */
+
+#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
+
+        /* target dependencies */
+
+#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32))
+#  define OS_CODE  0x00
+#  ifndef Z_SOLO
+#    if defined(__TURBOC__) || defined(__BORLANDC__)
+#      if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
+         /* Allow compilation with ANSI keywords only enabled */
+         void _Cdecl farfree( void *block );
+         void *_Cdecl farmalloc( unsigned long nbytes );
+#      else
+#        include <alloc.h>
+#      endif
+#    else /* MSC or DJGPP */
+#      include <malloc.h>
+#    endif
+#  endif
+#endif
+
+#ifdef AMIGA
+#  define OS_CODE  0x01
+#endif
+
+#if defined(VAXC) || defined(VMS)
+#  define OS_CODE  0x02
+#  define F_OPEN(name, mode) \
+     fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
+#endif
+
+#if defined(ATARI) || defined(atarist)
+#  define OS_CODE  0x05
+#endif
+
+#ifdef OS2
+#  define OS_CODE  0x06
+#  if defined(M_I86) && !defined(Z_SOLO)
+#    include <malloc.h>
+#  endif
+#endif
+
+#if defined(MACOS) || defined(TARGET_OS_MAC)
+#  define OS_CODE  0x07
+#  ifndef Z_SOLO
+#    if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
+#      include <unix.h> /* for fdopen */
+#    else
+#      ifndef fdopen
+#        define fdopen(fd,mode) NULL /* No fdopen() */
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef TOPS20
+#  define OS_CODE  0x0a
+#endif
+
+#ifdef WIN32
+#  ifndef __CYGWIN__  /* Cygwin is Unix, not Win32 */
+#    define OS_CODE  0x0b
+#  endif
+#endif
+
+#ifdef __50SERIES /* Prime/PRIMOS */
+#  define OS_CODE  0x0f
+#endif
+
+#if defined(_BEOS_) || defined(RISCOS)
+#  define fdopen(fd,mode) NULL /* No fdopen() */
+#endif
+
+#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX
+#  if defined(_WIN32_WCE)
+#    define fdopen(fd,mode) NULL /* No fdopen() */
+#    ifndef _PTRDIFF_T_DEFINED
+       typedef int ptrdiff_t;
+#      define _PTRDIFF_T_DEFINED
+#    endif
+#  else
+#    define fdopen(fd,type)  _fdopen(fd,type)
+#  endif
+#endif
+
+#if defined(__BORLANDC__) && !defined(MSDOS)
+  #pragma warn -8004
+  #pragma warn -8008
+  #pragma warn -8066
+#endif
+
+/* provide prototypes for these when building zlib without LFS */
+#if !defined(_WIN32) && (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0)
+    ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
+    ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
+#endif
+
+        /* common defaults */
+
+#ifndef OS_CODE
+#  define OS_CODE  0x03  /* assume Unix */
+#endif
+
+#ifndef F_OPEN
+#  define F_OPEN(name, mode) fopen((name), (mode))
+#endif
+
+         /* functions */
+
+#if defined(pyr) || defined(Z_SOLO)
+#  define NO_MEMCPY
+#endif
+#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
+ /* Use our own functions for small and medium model with MSC <= 5.0.
+  * You may have to use the same strategy for Borland C (untested).
+  * The __SC__ check is for Symantec.
+  */
+#  define NO_MEMCPY
+#endif
+#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY)
+#  define HAVE_MEMCPY
+#endif
+#ifdef HAVE_MEMCPY
+#  ifdef SMALL_MEDIUM /* MSDOS small or medium model */
+#    define zmemcpy _fmemcpy
+#    define zmemcmp _fmemcmp
+#    define zmemzero(dest, len) _fmemset(dest, 0, len)
+#  else
+#    define zmemcpy memcpy
+#    define zmemcmp memcmp
+#    define zmemzero(dest, len) memset(dest, 0, len)
+#  endif
+#else
+   void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len));
+   int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len));
+   void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len));
+#endif
+
+/* Diagnostic functions */
+#ifdef DEBUG
+#  include <stdio.h>
+   extern int ZLIB_INTERNAL z_verbose;
+   extern void ZLIB_INTERNAL z_error OF((char *m));
+#  define Assert(cond,msg) {if(!(cond)) z_error(msg);}
+#  define Trace(x) {if (z_verbose>=0) fprintf x ;}
+#  define Tracev(x) {if (z_verbose>0) fprintf x ;}
+#  define Tracevv(x) {if (z_verbose>1) fprintf x ;}
+#  define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}
+#  define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}
+#else
+#  define Assert(cond,msg)
+#  define Trace(x)
+#  define Tracev(x)
+#  define Tracevv(x)
+#  define Tracec(c,x)
+#  define Tracecv(c,x)
+#endif
+
+#ifndef Z_SOLO
+   voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items,
+                                    unsigned size));
+   void ZLIB_INTERNAL zcfree  OF((voidpf opaque, voidpf ptr));
+#endif
+
+#define ZALLOC(strm, items, size) \
+           (*((strm)->zalloc))((strm)->opaque, (items), (size))
+#define ZFREE(strm, addr)  (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
+#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
+
+/* Reverse the bytes in a 32-bit value */
+#define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
+                    (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
+
+#endif /* ZUTIL_H */
diff --git a/libs/kapp/Makefile b/libs/kapp/Makefile
index 7fdc289..e71434e 100644
--- a/libs/kapp/Makefile
+++ b/libs/kapp/Makefile
@@ -87,12 +87,14 @@ $(ILIBDIR)/libkapp: $(addprefix $(ILIBDIR)/libkapp.,$(LIBX))
 KAPP_SRC = \
 	main \
 	args \
+	tokenizer \
 	sysmain
 
 KAPP_OBJ = \
 	$(addsuffix .$(OBJX),$(KAPP_SRC))
 
 KAPP_LIB = \
+	-dvfs \
 	-dklib
 
 $(ILIBDIR)/libkapp.$(LIBX): $(KAPP_OBJ)
@@ -113,6 +115,10 @@ LOADLIB_SRC = \
 	loader-meta \
 	log-xml
 
+ifneq (win,$(OS))
+	LOADLIB_SRC += queue-file
+endif
+
 LOADLIB_OBJ = \
 	$(addsuffix .$(LOBX),$(LOADLIB_SRC))
 
@@ -120,6 +126,10 @@ LOADLIB_LIB = \
 	-dkfs \
 	-dklib
 
+ifneq (win,$(OS))
+	LOADLIB_LIB += -dkq
+endif
+
 $(LIBDIR)/libload.$(LIBX): $(LOADLIB_OBJ)
 	$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(LOADLIB_LIB)
 
diff --git a/libs/kapp/args.c b/libs/kapp/args.c
index f4a9279..06ef91c 100644
--- a/libs/kapp/args.c
+++ b/libs/kapp/args.c
@@ -27,6 +27,7 @@
 #include <kapp/extern.h>
 #include <sysalloc.h>
 
+#include <klib/report.h>
 #include <klib/rc.h>
 #include <klib/container.h>
 #include <klib/text.h>
@@ -36,9 +37,12 @@
 #include <klib/out.h>
 #include <klib/status.h>
 #include <klib/debug.h>
+#include <kfg/config.h>
 #include <kapp/main.h>
 #include <kapp/args.h>
 
+#include "args_debug.h"
+
 #include <assert.h>
 #include <ctype.h>
 #include <stdio.h>
@@ -46,9 +50,24 @@
 #include <string.h>
 #include <stdarg.h>
 
-#define USE_INLINING 0
+#define USE_INLINING   0
+#ifndef USE_OPTFILE
+#define USE_OPTFILE    0
+#endif
+#define USE_EARLY_HELP 1
+#define USE_EARLY_VERSION 1
+
+/* many tools acquired some usage for '-q'
+   other than the standard meaning of "be quiet".
+   while we phase this out, allow these tools
+   to replace the default usage. */
+#define HONOR_LEGACY_Q_ALIAS 1
+#if HONOR_LEGACY_Q_ALIAS
+#define LEGACY_Q_ALIAS_DEPRECATED 1
+#define LEGACY_Q_ALIAS_ERROR      0
+#endif
 
-KAPP_EXTERN bool CC is_valid_name (const char * string)
+bool CC is_valid_name (const char * string)
 {
     /* we do not allow leading - or empty names */
     if ((*string == '\0') || (*string == '-'))
@@ -127,12 +146,14 @@ typedef struct Option
 {
     BSTNode     n;              /* BSTree node storage */
 
+    size_t      size;           /* name length (size if UTF-8) */
     Vector      values;         /* Vector of set values */
     uint32_t    count;          /* count of times option seen on the command line */
     uint32_t    max_count;      /* if non-zero, how many times is it legal to be seen */
     bool        needs_value;    /* does this option take/require a value? */
     bool        required;       
-    size_t      size;           /* name length (size if UTF-8) */
+    bool        deprecated;     /* a warning if used */
+    bool        error;          /* an error if used */
     char        name [1];       /* key value The 1 will be the NUL */
 } Option;
 
@@ -140,6 +161,7 @@ static
 rc_t CC OptionMake (Option ** pself, const char * name, size_t size, uint32_t max_count, bool needs_value, bool required)
 {
     Option *   self;
+    rc_t rc;
 
     assert (pself);
     assert (name);
@@ -149,20 +171,23 @@ rc_t CC OptionMake (Option ** pself, const char * name, size_t size, uint32_t ma
     self = malloc (sizeof (*self) + size);
     if (self == NULL)
     {
-        *pself = NULL;
-        return RC (rcRuntime, rcArgv, rcConstructing, rcMemory, rcExhausted);
+        rc = RC (rcRuntime, rcArgv, rcConstructing, rcMemory, rcExhausted);
+        PLOGERR (klogErr, (klogErr, rc, "Error adding option '$(O)'","O=--%s",name));
+    }
+    else 
+    {
+        if ((self->needs_value = needs_value) != false)
+            VectorInit (&self->values,0,4);
+        else
+            memset (&self->values, sizeof(self->values), 0);
+
+        self->required = required;
+        self->deprecated = self->error = false;
+        self->count = 0;
+        self->max_count = max_count;
+        self->size = size;
+        string_copy (self->name, size+1, name, size);
     }
-
-    if ((self->needs_value = needs_value) != false)
-        VectorInit (&self->values,0,4);
-    else
-        memset (&self->values, sizeof(self->values), 0);
-    self->required = required;
-
-    self->count = 0;
-    self->max_count = max_count;
-    self->size = size;
-    string_copy (self->name, size+1, name, size);
     *pself = self;
     return 0;
 }
@@ -247,19 +272,23 @@ rc_t CC OptionGetValue (const Option * self, uint32_t number, const char ** valu
 static
 rc_t CC OptionAddValue (Option * self, const char * value, size_t size)
 {
-    rc_t rc = 0;
     ParamValue * pvalue;
+    rc_t rc = 0;
 
     assert (self);
 
     ++self->count;
+
+/*     KOutMsg ("%s: name %s count %u max_count %u value %s\n", __func__, self->name, self->count, self->max_count, value); */
     if (self->max_count && (self->count > self->max_count))
     {
         --self->count;
-        fprintf (stderr, "Too many occurances of %s option\n", self->name);
-        return RC (rcRuntime, rcArgv, rcInserting, rcData, rcExcessive);
+        rc = RC (rcRuntime, rcArgv, rcInserting, rcData, rcExcessive);
+        PLOGERR (klogErr,
+                 (klogErr, rc, "Too many occurrences of option '$(O)'",
+                  "O=--%s", self->name));
     }
-    if (self->needs_value)
+    else if (self->needs_value)
     {
         assert (value);     /* gotta have a value */
         assert (size);      /* value can't be a NUL string */
@@ -272,9 +301,15 @@ rc_t CC OptionAddValue (Option * self, const char * value, size_t size)
             rc = VectorAppend (&self->values, NULL, pvalue);
             if (rc)
             {
-                fprintf (stderr, "error capturing parameter %s\n", self->name);
+                PLOGERR (klogErr,
+                         (klogErr, rc, "error capturing parameter '$(O)'",
+                          "O=--%s", self->name));
                 ParamValueWhack (pvalue);
             }
+            else
+            {
+                ARGS_DBG( "added option-value %s", self->name );
+            }
         }
     }
     return rc;
@@ -309,8 +344,11 @@ int CC OptionSort (const BSTNode * item, const BSTNode * n)
 typedef struct OptAlias
 {
     BSTNode     n;              /* BSTree Node storage */
-    Option *   option;         /* full name node for which this is an alias */
+
+    Option *   option;          /* full name node for which this is an alias */
     size_t      size;
+    bool        deprecated;     /* warning if used */
+    bool        error;          /* error if used */
     char        name[1];        /* utf8 name */
 } OptAlias;
 
@@ -327,11 +365,16 @@ rc_t CC OptAliasMake (OptAlias ** pself, const char * name, size_t size,
     self = malloc (sizeof (*self) + size);
     if (self == NULL)
     {
+        rc_t rc = RC (rcRuntime, rcArgv, rcConstructing, rcMemory, rcExhausted);
+        PLOGERR (klogErr,
+                 (klogErr, rc, "Error creating structure for alias '$(A)' for parameter '$(B)", 
+                  "A=%s,B=%s", name, option->name));
         *pself = NULL;
-        return RC (rcRuntime, rcArgv, rcConstructing, rcMemory, rcExhausted);
+        return rc;
     }
     self->option = option;
     self->size = size;
+    self->deprecated = self->error = false;
     string_copy (self->name, size + 1, name, size);
     *pself = self;
     return 0;
@@ -526,9 +569,12 @@ struct Args
 #if NOT_USED_YET
     HelpGroup * def_help;
 #endif
+#if HONOR_LEGACY_Q_ALIAS
+    bool   qalias_replaced;
+#endif
 };
 
-KAPP_EXTERN rc_t CC ArgsMake (Args ** pself)
+rc_t CC ArgsMake (Args ** pself)
 {
     rc_t rc;
     Args * self;
@@ -549,8 +595,11 @@ KAPP_EXTERN rc_t CC ArgsMake (Args ** pself)
         BSTreeInit (&self->aliases);
         VectorInit (&self->argv,0,8);
         VectorInit (&self->params,0,8);
-#if NOT_USED_YET
         VectorInit (&self->help,0,16);
+#if HONOR_LEGACY_Q_ALIAS
+        self -> qalias_replaced = false;
+#endif
+#if NOT_USED_YET
         rc = HelpGroupMake (&help, "NCBI Options");
         if (rc)
         {
@@ -569,7 +618,7 @@ KAPP_EXTERN rc_t CC ArgsMake (Args ** pself)
     return rc;
 }
 
-KAPP_EXTERN rc_t CC ArgsWhack (Args * self)
+rc_t CC ArgsWhack (Args * self)
 {
     if (self)
     {
@@ -596,27 +645,27 @@ rc_t CC ArgsAddOption (Args * self, const OptDef * option)
 
     if (self == NULL)
     {
-        fprintf (stderr, "Error calling %s with NULL first parameter\n", __func__);
-        return RC (rcRuntime, rcArgv, rcConstructing, rcSelf, rcNull);
+        rc = RC (rcRuntime, rcArgv, rcConstructing, rcSelf, rcNull);
+        LOGERR (klogInt, rc, "Error adding an opion with no object");
+        return rc;
     }
     if (option == NULL)
     {
-        fprintf (stderr, "Error calling %s with NULL second parameter\n", __func__);
-        return RC (rcRuntime, rcArgv, rcConstructing, rcParam, rcNull);
+        rc = RC (rcRuntime, rcArgv, rcConstructing, rcParam, rcNull);
+        LOGERR (klogInt, rc, "Error adding an option with no option name");
+        return rc;
     }
     name = option->name;
     if (! is_valid_name (name))
     {
-        fprintf (stderr, "Error using illegal option name %s\n", name);
-        return RC (rcRuntime, rcArgv, rcConstructing, rcName, rcInvalid);
+        rc = RC (rcRuntime, rcArgv, rcConstructing, rcName, rcInvalid);
+        PLOGERR (klogInt, (klogInt, rc, "Error using illegal option name '$(O)'", "O=--%s", name));
+        return rc;
     }
     size = string_size (name);
     rc = OptionMake (&node, name, size, option->max_count, option->needs_value, option->required);
     if (rc)
-    {
-        fprintf (stderr, "Error initializing structures to parase parameters\n");
         return rc;
-    }
     size ++;
 
     prev = NULL;
@@ -626,20 +675,21 @@ rc_t CC ArgsAddOption (Args * self, const OptDef * option)
         if (GetRCState(rc) == rcBusy)
         {
             rc = RC (rcRuntime, rcArgv, rcConstructing, rcName, rcBusy);
-            fprintf (stderr, "duplicate option name %s\n", name);
+            PLOGERR (klogInt,
+                     (klogInt, rc, "duplicate option name '$(O)'", "O=--%s", name));
         }
         else
-            fprintf (stderr, "unknown error inserting %s\n", name);
+            PLOGERR (klogInt,
+                     (klogInt, rc, "unknown error inserting option name '$(O)'", "O=--%s", name));
 
         OptionWhack (node);
         return rc;
-
     }
     if (option->aliases)     /* any single character aliases? */
     {
         const char * startc;
         const char * endc;
-        size_t incr;
+        int incr;
 
         for ((startc = option->aliases),(endc = startc + string_size (startc));
              startc < endc; startc += incr)
@@ -653,54 +703,80 @@ rc_t CC ArgsAddOption (Args * self, const OptDef * option)
             if (incr < 0)
             {
                 rc = RC (rcRuntime, rcArgv, rcConstructing, rcName, rcCorrupt);
-                fprintf (stderr, "Error parsing alias string %s from %s for %s\n",
-                         startc, option->aliases, name);
+                PLOGERR (klogInt,
+                         (klogInt, rc, "Error parsing alias string '$(A)' from '$(B)' for '$(C)'",
+                          "A=%s,B=%s,C=%s", startc, option->aliases, name));
                 break;
             }
             if (incr > 4)
             {
                 rc = RC (rcRuntime, rcArgv, rcConstructing, rcName, rcCorrupt);
-                fprintf (stderr, "Error parsing UTF-8 string %s\n", startc);
+                PLOGERR (klogInt,
+                         (klogInt, rc,"Error parsing UTF-8 string '$(S)'",
+                          "S=%s", startc));
                 break;
             }
-            string_copy (alias_name, sizeof (alias_name), startc, incr);
+            size = string_copy (alias_name, sizeof (alias_name), startc, incr);
             if (! is_valid_name (alias_name))
             {
                 rc = RC (rcRuntime, rcArgv, rcConstructing, rcName, rcInvalid);
-                fprintf (stderr, "Error using invalid alias name %s", alias_name);
+                PLOGERR (klogInt,
+                         (klogInt, rc, "Error using invalid alias name '$(S)'",
+                          "S=%s", alias_name));
                 break;
             }
+#if 0
             size += incr + 1;
+#endif
             rc = OptAliasMake (&snode, alias_name, incr, node);
             if (rc)
-            {
-                fprintf (stderr, "Error creating structure for alias %s for parameter %s\n", 
-                         alias_name, node->name);
                 break;
-            }
             rc = BSTreeInsertUnique (&self->aliases, &snode->n, (BSTNode**)&sprev, OptAliasSort);
             if (rc)
             {
                 if (GetRCState(rc) == rcExists)
                 {
+#if HONOR_LEGACY_Q_ALIAS
+                    if ( ! self -> qalias_replaced && size == 1 && alias_name [ 0 ] == 'q' )
+                    {
+                        BSTreeUnlink ( & self -> aliases, & sprev -> n );
+                        rc = BSTreeInsertUnique ( & self -> aliases, & snode -> n, NULL, OptAliasSort );
+                        if ( rc != 0 )
+                            BSTreeInsert ( & self -> aliases, & sprev -> n, OptAliasSort );
+                        else
+                        {
+                            OptAliasWhack ( sprev );
+                            self -> qalias_replaced = true;
+#if LEGACY_Q_ALIAS_DEPRECATED
+                            snode -> deprecated = true;
+#elif LEGACY_Q_ALIAS_ERROR
+                            snode -> error = true;
+#endif
+                            continue;
+                        }
+                    }
+#endif
                     rc = RC (rcRuntime, rcArgv, rcConstructing, rcName, rcExists);
-                    fprintf (stderr, "duplicate alias name %s\n", alias_name);
+                    PLOGERR (klogInt,
+                             (klogInt, rc, "duplicate alias name '$(S)'",
+                              "S=%s", alias_name));
                 }
                 else
-                    fprintf (stderr, "%d unknown error inserting alias %s\n", rc, alias_name);
+                {
+                    PLOGERR (klogErr,
+                             (klogErr, rc, "unknown error inserting alias '$(S)'",
+                              "S=%s", alias_name));
+                }
 
                 OptAliasWhack (snode);
                 break;
             }
         }
     }
-    if (rc == 0)
-    {
-    }
     return rc;
 }
 
-KAPP_EXTERN rc_t CC ArgsAddOptionArray (Args * self, const OptDef * option, uint32_t count /*, 
+rc_t CC ArgsAddOptionArray (Args * self, const OptDef * option, uint32_t count /*, 
                                                                                              rc_t (*header_fmt)(Args * args, const char * header),
                                                                                              const char * header */)
 {
@@ -740,7 +816,7 @@ KAPP_EXTERN rc_t CC ArgsAddOptionArray (Args * self, const OptDef * option, uint
 
 /*
  */
-KAPP_EXTERN rc_t CC next_arg (const Args * self, int * pix, int max, const char ** pvalue)
+rc_t CC next_arg (const Args * self, int * pix, int max, const char ** pvalue)
 {
     int ix;
 
@@ -757,32 +833,50 @@ KAPP_EXTERN rc_t CC next_arg (const Args * self, int * pix, int max, const char
 typedef struct ArgsReqCheckData
 {
     Option * missing_option;
+    rc_t rc;
 } ArgsReqCheckData;
 
 static
-bool CC ArgsCheckRequired (BSTNode * n, void * _data)
+void CC ArgsCheckRequiredInt (BSTNode * n, void * _data)
 {
-#if 0
-/* Need to rethink this. If help is asked for this shouldn't fail */
+#if 1
     ArgsReqCheckData * data;
     Option * opt;
+    rc_t rc;
 
     data = _data;
     opt = (Option*)n;
-
     if (opt->required && ! opt->count)
     {
-        data->missing_option = opt;
-        return true;
+        rc = RC( rcRuntime, rcArgv, rcParsing, rcParam, rcNotFound );
+        PLOGERR (klogWarn, (klogWarn, rc, "Error missing required parameter '$(P)'",
+                            "P=%s", opt->name));
+        if (data->missing_option == NULL)
+        {
+            data->missing_option = opt;
+            data->rc = rc;
+        }
     }
 #endif
-    return false;
 }
 
-KAPP_EXTERN rc_t CC ArgsParse (Args * self, int argc, char *argv[])
+/* check for required parameters */
+rc_t CC ArgsCheckRequired (Args * self)
 {
-    rc_t rc = 0;
-    int ix;
+    ArgsReqCheckData r = { NULL, false };
+
+    BSTreeForEach ( &self->names, false, ArgsCheckRequiredInt, &r );
+
+    return r.rc;
+}
+
+static
+rc_t ArgsParseInt (Args * self, int argc, char *argv[])
+{
+    rc_t rc = 0;        /* hard fail - quit processing */
+    rc_t orc = 0;       /* soft fail - keep processing but we'll fail in the end */
+    rc_t qrc = 0;       /* transient - if set will move to a previously unset orc */
+    int ix, ix_from, ix_to;
     size_t jx;
     Option * node;
     const char * parg;
@@ -792,83 +886,131 @@ KAPP_EXTERN rc_t CC ArgsParse (Args * self, int argc, char *argv[])
     const char * value = NULL;
     size_t value_len;
     bool needs_value;
+    uint32_t n_in_argv_before;
+
+    n_in_argv_before = VectorLength( &self->argv );
 
     /* first capture original argument list and store in our format */
-    for (ix = 0; ix < argc; ++ix)
+    for ( ix = 0; ix < argc; ++ix )
     {
         size_t len;
 
         parg = argv[ix];
-        len = strlen (parg);
+        len = strlen ( parg );
 
-        rc = ParamValueMake (&arg, parg, len);
-        if (rc == 0)
-            rc = VectorAppend (&self->argv, NULL, arg);
-        if (rc)
+        rc = ParamValueMake ( &arg, parg, len );
+        if ( rc == 0 )
+            rc = VectorAppend ( &self->argv, NULL, arg );
+        if ( rc )
             break;
+        else
+            ARGS_DBG( "ArgsParse: inserted '%s' into self->argv", parg );
     }
     
-    if (rc)
+    if ( rc )
         return rc;
 
-    for (ix = 1; ix < argc; ++ix)
+    if ( n_in_argv_before == 0 )
     {
-        parg = (const char *)VectorGet (&self->argv, ix);
-        if (parg[0] != '-')
+        ix_from = 1;
+        ix_to = argc;
+    }
+    else
+    {
+        ix_from = n_in_argv_before;
+        ix_to = n_in_argv_before + argc;
+    }
+
+    for ( ix = ix_from; ix < ix_to; ++ix )
+    {
+        parg = ( const char * )VectorGet( &self->argv, ix );
+
+        ARGS_DBG( "ArgsParse: parsing '%s' from self->argv", parg );
+
+        if ( parg[ 0 ] != '-' )
         {
             /* we can do this because it is already a (const char *)
              * and (ParamValue *) after the first loop */
-            rc = VectorAppend (&self->params, NULL, parg);
-            if (rc)
+            rc = VectorAppend ( &self->params, NULL, parg );
+            if ( rc )
                 break;
+            ARGS_DBG( "ArgsParse: appending to params '%s'", parg );
         }
         else
         {
             node = NULL;
-            if (parg[1] == '-')
+            if ( parg[ 1 ] == '-' )
             {
-                size_t nlen=string_copy (name, sizeof (name), parg+2, string_size (parg+2));
-                equal_sign = string_chr (name, nlen, '=');
-                if (equal_sign)
+                size_t nlen = string_copy( name, sizeof( name ), parg + 2, string_size( parg + 2 ) );
+                ARGS_DBG( "ArgsParse: '%s' is a '--' parameter!", parg );
+                equal_sign = string_chr( name, nlen, '=' );
+                if ( equal_sign )
                     *equal_sign = '\0';
 
-                node = (Option*)BSTreeFind (&self->names, name, OptionCmp);
-                if (node == NULL)
+                node = ( Option* )BSTreeFind( &self->names, name, OptionCmp );
+                if ( node == NULL )
                 {
-                    rc = RC (rcApp, rcArgv, rcParsing, rcParam, rcUnknown);
-                    fprintf (stderr, "Unknown argument %s\n", name);
-                    break;
+                    qrc = RC( rcApp, rcArgv, rcParsing, rcParam, rcUnknown );
+                    PLOGERR (klogErr,
+                             (klogErr, qrc,
+                              "Unknown argument '$(O)'", "O=--%s", name ));
+/*                     break; */
+                    if (orc == 0) /* non-fatal */
+                        orc = qrc;
                 }
                 else
                 {
-                    needs_value = OptionNeedsValue (node);
-                    if (needs_value)
+                    needs_value = OptionNeedsValue( node );
+                    ARGS_DBG( "ArgsParse: found node for parameter '%s'", parg );
+                    if ( needs_value )
                     {
-                        if (equal_sign != NULL)
-                            value = parg + 2 + ((equal_sign+1) - name);
-                        else
-                            rc = next_arg (self, &ix, argc, &value);
+                        ARGS_DBG( "ArgsParse: parameter '%s' needs value", parg );
+                        if ( equal_sign != NULL )
+                            value = parg + 2 + ( ( equal_sign + 1 ) - name );
 
-                        if (rc)
-                            break;
+                        else if ( ix + 1 >= ix_to )
+                        {
+                            rc = RC( rcRuntime, rcArgv, rcParsing, rcParam, rcExhausted );
+                            PLOGERR (klogErr,
+                                     (klogErr, qrc,"Option '$(O)' is missing a value", "O=--%s", node->name ));
+                        }
+                        else
+                        {
+                            ARGS_DBG( "ArgsParse: calling next_arg()", 0 );
+                            rc = next_arg( self, &ix, ix_to, &value );
+                        }
 
-                        assert (value != NULL);
+                        if ( rc == 0 )
+                        {
+                            assert ( value != NULL );
 
-                        value_len = string_size (value);
+                            value_len = string_size( value );
 
-                        rc = OptionAddValue (node, value, value_len);
-                        if (rc)
-                        {
-                            break;
+                            rc = OptionAddValue( node, value, value_len );
                         }
                     }
                     else
                     {
-                        rc = OptionAddValue (node, NULL, 0);
-                        if (rc)
-                        {
-                            break;
-                        }
+                        rc = OptionAddValue( node, NULL, 0 );
+                    }
+
+                    if ( rc != 0 )
+                        break;
+
+                    if ( node -> error )
+                    {
+                        rc = RC ( rcApp, rcArgv, rcParsing, rcParam, rcUnsupported );
+                        PLOGERR (klogErr,
+                                 (klogErr, rc,
+                                  "Deprecated argument '$(O)' is no longer supported.", "O=--%s", name ));
+                        break;
+                    }
+
+                    if ( node -> deprecated )
+                    {
+                        PLOGMSG (klogWarn,
+                                 (klogWarn,
+                                  "Deprecated argument '$(O)' may not be supported in future releases.", "O=--%s", name ));
                     }
                 }
             }
@@ -877,86 +1019,184 @@ KAPP_EXTERN rc_t CC ArgsParse (Args * self, int argc, char *argv[])
                 const char * end;
                 uint32_t name_len;
 
-                end = parg + string_size (parg);
-                for (jx = 1; parg[jx]; jx += name_len)
+                end = parg + string_size( parg );
+                ARGS_DBG( "ArgsParse: '%s' is a '-' parameter!", parg );
+                for ( jx = 1; parg[ jx ]; jx += name_len )
                 {
                     OptAlias *alias;
                     uint32_t c;
 
-                    name_len = utf8_utf32 ( &c, parg+jx, end); 
-                    string_copy (name, sizeof (name), parg+jx, name_len);
+                    name_len = utf8_utf32( &c, parg + jx, end ); 
+                    string_copy( name, sizeof( name ), parg + jx, name_len );
 
-                    alias = (OptAlias*)BSTreeFind (&self->aliases, name, OptAliasCmp);
-                    if (alias == NULL)
+                    alias = ( OptAlias* )BSTreeFind( &self->aliases, name, OptAliasCmp );
+                    if ( alias == NULL )
                     {
-                        rc = RC (rcApp, rcArgv, rcParsing, rcParam, rcUnknown);
-                        fprintf (stderr, "Unknown argument %s\n", name);
+                        qrc = RC( rcApp, rcArgv, rcParsing, rcParam, rcUnknown );
+                        PLOGERR (klogErr,
+                                 (klogErr, qrc,
+                                  "Unknown argument '$(O)'", "O=-%s", name ));
+
+                        if (orc == 0)
+                            orc = qrc;
                     }
                     else
                     {
-                        node = OptAliasOption (alias);
-                        if (OptionNeedsValue(node))
+                        bool break_loop = false;
+                        node = OptAliasOption( alias );
+                        if ( OptionNeedsValue( node ) )
                         {
-                            if (parg[jx+name_len] == '=')
+                            if ( parg[ jx + name_len ] == '=' )
                             {
                                 ++jx;
-                                if (parg[jx+name_len])
+                                if ( parg[ jx + name_len ] )
                                     value = parg + jx + name_len;
                                 else
                                 {
-                                    rc = RC (rcRuntime, rcArgv, rcParsing, rcParam, rcExhausted);
-                                    fprintf (stderr, "Value missing with alias followed by =\n");
+                                    qrc = RC( rcRuntime, rcArgv, rcParsing, rcParam, rcExhausted );
+                                    LOGERR (klogErr, qrc,
+                                            "Value missing with alias followed by =" );
+                                    if (orc == 0)
+                                        orc = qrc;
+                                    break_loop = true;
                                 }
                             }
-                            else if(parg[jx+name_len])
+                            else if ( parg[ jx + name_len ] )
                             {
                                 value = parg + jx + name_len;
                             }
-                            else if( ix + 1 >= argc ) {
-                                rc = RC (rcRuntime, rcArgv, rcParsing, rcParam, rcExhausted);
-                                fprintf (stderr, "Option '%s' is missing a value\n", node->name);
+                            else if ( ix + 1 >= ix_to )
+                            {
+                                rc = RC( rcRuntime, rcArgv, rcParsing, rcParam, rcExhausted );
+                                PLOGERR (klogErr,
+                                         (klogErr, rc,
+                                          "Option '$(O)' ( alias for '$(N)' ) is missing a value",
+                                          "O=-%s,N=--%s", name, node->name ));
+                                break;
                             }
                             else
-                                value = argv [++ix];
-                            if (rc == 0)
-                                rc = OptionAddValue (node, value, string_size (value));
-                            break;
+                            {
+                                value = ( const char * )VectorGet( &self->argv, ++ix );
+                            }
+                            ARGS_DBG( "ArgsParse: the value of '%s' is '%s'", name, value );
+
+                            if ( rc == 0 )
+                                rc = OptionAddValue( node, value, string_size( value ) );
+                            break_loop = true;
                         }
                         else
                         {
-                            rc = OptionAddValue (node, NULL, 0);
-                            if (rc)
-                                break;
+                            rc = OptionAddValue( node, NULL, 0 );
                         }
+
+                        if ( rc != 0 )
+                            break;
+
+                        if ( node -> error )
+                        {
+                            rc = RC ( rcApp, rcArgv, rcParsing, rcParam, rcUnsupported );
+                            PLOGERR (klogErr,
+                                     (klogErr, rc,
+                                      "Deprecated argument '$(O)' ( alias for '$(N)' ) is no longer supported.",
+                                      "O=-%s,N=--%s"
+                                      , name
+                                      , node->name
+                                         ));
+                            break;
+                        }
+
+                        if ( alias -> error )
+                        {
+                            rc = RC ( rcApp, rcArgv, rcParsing, rcParam, rcUnsupported );
+                            PLOGERR (klogErr,
+                                     (klogErr, rc,
+                                      "Deprecated argument '$(O)' is no longer supported. "
+                                      "Please use '$(N)' instead.",
+                                      "O=-%s,N=--%s"
+                                      , name
+                                      , node->name
+                                         ));
+                            break;
+                        }
+
+                        if ( node -> error )
+                        {
+                            PLOGMSG (klogWarn,
+                                     (klogWarn,
+                                      "Deprecated argument '$(O)' ( alias for '$(N)' ) may not be supported in future releases.",
+                                      "O=-%s,N=--%s"
+                                      , name
+                                      , node->name
+                                         ));
+                        }
+
+                        else if ( alias -> deprecated )
+                        {
+                            PLOGMSG (klogWarn,
+                                     (klogWarn,
+                                      "Deprecated argument '$(O)' may not be supported in future releases. "
+                                      "Please use '$(N)' instead.",
+                                      "O=-%s,N=--%s"
+                                      , name
+                                      , node->name
+                                         ));
+                        }
+
+                        if ( break_loop )
+                            break;
                     }
                 }
             }
         }
-        if (rc)
+        if ( rc )
             break;
     }
 
-    /* check for required parameters */
+#if _DEBUGGING
+    (void)ArgsHandleDebug (self);
+#endif
+#if USE_EARLY_HELP
     if (rc == 0)
     {
-        bool b;
-        ArgsReqCheckData r;
-
+        rc = ArgsHandleHelp (self);
+        /* if "help" wasn't found we aren't using standard arguments so don't
+         * call it an error: if OptionGout changes this might have to as well */
+        if (rc == SILENT_RC (rcRuntime, rcArgv, rcAccessing, rcName, rcNotFound))
+            rc = 0;
+    }
+#endif
+#if USE_EARLY_VERSION
+    if (rc == 0)
+    {
+        rc = ArgsHandleVersion (self);
+        if (rc == SILENT_RC (rcRuntime, rcArgv, rcAccessing, rcName, rcNotFound))
+            rc = 0;
+    }
+#endif
+    /* now recovery non-fatal errors into final rc */
+    if (rc == 0)
+        rc = orc;
 
-        b = BSTreeDoUntil (&self->names, false, ArgsCheckRequired, &r);
-        if (b)
-        {
-            fprintf (stderr, "Error missing required parameter %.*s\n",
-                     (int)r.missing_option->size, r.missing_option->name);
-            rc = RC (rcRuntime, rcArgv, rcParsing, rcParam, rcNotFound);
-        }
+    if ( rc )
+    {
+        ReportSilence();
     }
+    return rc;
+}
 
+rc_t CC ArgsParse (Args * self, int argc, char *argv[])
+{
+    KLogLevel lvl = KLogLevelGet ();
+    rc_t rc = KLogLevelSet ( klogWarn );
+    rc = ArgsParseInt ( self, argc, argv );
+    KLogLevelSet ( lvl );
     return rc;
 }
 
-KAPP_EXTERN rc_t CC ArgsOptionCount (const Args * self, const char * option_name, uint32_t * count)
+rc_t CC ArgsOptionCount (const Args * self, const char * option_name, uint32_t * count)
 {
+    rc_t rc;
+
     if (self == NULL)
         return RC (rcRuntime, rcArgv, rcAccessing, rcSelf, rcNull);
     else if (count == NULL)
@@ -967,14 +1207,20 @@ KAPP_EXTERN rc_t CC ArgsOptionCount (const Args * self, const char * option_name
 
         node = (const Option*)BSTreeFind (&self->names, option_name, OptionCmp);
         if (node == NULL)
-            return RC (rcRuntime, rcArgv, rcAccessing, rcName, rcNotFound);
+        {
+            rc = RC (rcRuntime, rcArgv, rcAccessing, rcName, rcNotFound);
+/* this was removed to shut up about "help" not being found during tests
+            PLOGERR (klogWarn, (klogWarn, rc, "Option name not found '$(S)'", "S=%s", option_name));
+ */
+            return rc;
+        }
 
         *count = OptionGetCount (node);
         return 0;
     }
 }
 
-KAPP_EXTERN rc_t CC ArgsOptionValue (const Args * self, const char * option_name, uint32_t iteration,
+rc_t CC ArgsOptionValue (const Args * self, const char * option_name, uint32_t iteration,
                                      const char ** value_string)
 {
     const Option * node;
@@ -994,7 +1240,7 @@ KAPP_EXTERN rc_t CC ArgsOptionValue (const Args * self, const char * option_name
         return  OptionGetValue (node, iteration, value_string);
 }
 
-KAPP_EXTERN rc_t CC ArgsParamCount (const Args * self, uint32_t * count)
+rc_t CC ArgsParamCount (const Args * self, uint32_t * count)
 {
     if (self == NULL)
         return RC (rcRuntime, rcArgv, rcAccessing, rcSelf, rcNull);
@@ -1005,7 +1251,7 @@ KAPP_EXTERN rc_t CC ArgsParamCount (const Args * self, uint32_t * count)
     return 0;
 }
 
-KAPP_EXTERN rc_t CC ArgsParamValue (const Args * self, uint32_t iteration, const char ** value_string)
+rc_t CC ArgsParamValue (const Args * self, uint32_t iteration, const char ** value_string)
 {
     if (self == NULL)
         return RC (rcRuntime, rcArgv, rcAccessing, rcSelf, rcNull);
@@ -1023,7 +1269,7 @@ KAPP_EXTERN rc_t CC ArgsParamValue (const Args * self, uint32_t iteration, const
     return 0;
 }
 
-KAPP_EXTERN rc_t CC ArgsArgvCount (const Args * self, uint32_t * count)
+rc_t CC ArgsArgvCount (const Args * self, uint32_t * count)
 {
     if (self == NULL)
         return RC (rcRuntime, rcArgv, rcAccessing, rcSelf, rcNull);
@@ -1037,12 +1283,12 @@ KAPP_EXTERN rc_t CC ArgsArgvCount (const Args * self, uint32_t * count)
 #undef ArgsArgc
 #endif
 
-KAPP_EXTERN rc_t CC ArgsArgc (const Args * self, uint32_t * count)
+rc_t CC ArgsArgc (const Args * self, uint32_t * count)
 {
     return ArgsArgvCount (self, count);
 }
 
-KAPP_EXTERN rc_t CC ArgsArgvValue (const Args * self, uint32_t iteration, const char ** value_string)
+rc_t CC ArgsArgvValue (const Args * self, uint32_t iteration, const char ** value_string)
 {
     if (self == NULL)
         return RC (rcRuntime, rcArgv, rcAccessing, rcSelf, rcNull);
@@ -1063,18 +1309,29 @@ KAPP_EXTERN rc_t CC ArgsArgvValue (const Args * self, uint32_t iteration, const
 #define USAGE_MAX_SIZE 81
 static
 const char * verbose_usage[] = 
-{ "Increase the verbosity level of the program.",
-  "Use multiple times for more verbosity.", NULL };
+{ "Increase the verbosity of the program status messages.",
+  "Use multiple times for more verbosity.","Negates quiet.", NULL };
+static
+const char * quiet_usage[] = 
+{ "Turn off all status messages for the program.",
+  "Negated by verbose.", NULL };
 static
 const char * debug_usage[] = 
 { "Turn on debug output for module.",
   "All flags if not specified.", NULL };
 static
 const char * help_usage[] = 
-{ "Output a brief explantion for the program.", NULL };
+{ "Output a brief explanation for the program.", NULL };
+static
+const char * report_usage[] = 
+{ "Control program execution environment report generation (if implemented).",
+    "One of (never|error|always). Default is error", NULL };
 static
 const char * version_usage[] = 
 { "Display the version of the program then quit.", NULL };
+static
+const char * optfile_usage[] = 
+{ "Read more options and parameters from the file.", NULL};
 static 
 char log0 [USAGE_MAX_SIZE];
 static 
@@ -1082,6 +1339,9 @@ char log1 [USAGE_MAX_SIZE];
 static
 const char * log_usage[] = 
 { "Logging level as number or enum string.", log0, log1, NULL };
+static
+const char * no_user_settings_usage[] = 
+{ "Turn off user-specific configuration.", NULL };
 
 static
 void CC gen_log_usage (const char ** _buffers)
@@ -1160,17 +1420,17 @@ void CC gen_log_usage (const char ** _buffers)
 OptDef StandardOptions[]  =
 {
     {
-	OPTION_HELP,    ALIAS_HELP,    NULL, 
+        OPTION_HELP,    ALIAS_HELP,    NULL, 
         help_usage,
-	OPT_UNLIM, false, false
+        OPT_UNLIM, false, false
     },
     {
-	OPTION_VERSION, ALIAS_VERSION, NULL,
+        OPTION_VERSION, ALIAS_VERSION, NULL,
         version_usage,
-	OPT_UNLIM, false, false
+        OPT_UNLIM, false, false
     },
     {
-	OPTION_LOG_LEVEL, ALIAS_LOG_LEVEL, gen_log_usage,
+        OPTION_LOG_LEVEL, ALIAS_LOG_LEVEL, gen_log_usage,
         log_usage,
         OPT_UNLIM, true, false
     },
@@ -1180,20 +1440,42 @@ OptDef StandardOptions[]  =
         OPT_UNLIM, false, false
     },
     {
+        OPTION_QUIET, ALIAS_QUIET, NULL,
+        quiet_usage,
+        OPT_UNLIM, false, false
+    },
+#if USE_OPTFILE
+    {
+        OPTION_OPTFILE, ALIAS_OPTFILE, NULL,
+        optfile_usage,
+        OPT_UNLIM, true, false
+    },
+#endif
+    {
         OPTION_DEBUG, ALIAS_DEBUG, NULL,
         debug_usage, 
         OPT_UNLIM, true, false
+    },
+    {
+        OPTION_NO_USER_SETTINGS, NULL, NULL,
+        no_user_settings_usage,
+        OPT_UNLIM, false, false
+    },
+    {   /* OPTION_REPORT is used in klib/report.c */
+        OPTION_REPORT, NULL, NULL,
+        report_usage, 
+        OPT_UNLIM, true, false
     }
 };
 
-KAPP_EXTERN rc_t CC ArgsAddStandardOptions(Args * self)
+rc_t CC ArgsAddStandardOptions(Args * self)
 {
     return ArgsAddOptionArray (self, StandardOptions,
                                sizeof (StandardOptions) / sizeof (OptDef)
                                /*, NULL, NULL */ );
 }
 
-KAPP_EXTERN rc_t CC ArgsMakeStandardOptions (Args** pself)
+rc_t CC ArgsMakeStandardOptions (Args** pself)
 {
     Args * self;
     rc_t rc;
@@ -1209,7 +1491,7 @@ KAPP_EXTERN rc_t CC ArgsMakeStandardOptions (Args** pself)
     return rc;
 }
 
-KAPP_EXTERN rc_t CC ArgsHandleHelp (Args * self)
+rc_t CC ArgsHandleHelp (Args * self)
 {
     uint32_t count;
     rc_t rc;
@@ -1229,7 +1511,7 @@ KAPP_EXTERN rc_t CC ArgsHandleHelp (Args * self)
 }
 
 
-KAPP_EXTERN rc_t CC ArgsHandleVersion (Args * self)
+rc_t CC ArgsHandleVersion (Args * self)
 {
     uint32_t count;
     rc_t rc;
@@ -1255,7 +1537,7 @@ KAPP_EXTERN rc_t CC ArgsHandleVersion (Args * self)
 }
 
 
-KAPP_EXTERN rc_t CC ArgsHandleLogLevel (const Args * self)
+rc_t CC ArgsHandleLogLevel (const Args * self)
 {
     uint32_t count;
     rc_t rc;
@@ -1285,17 +1567,62 @@ KAPP_EXTERN rc_t CC ArgsHandleLogLevel (const Args * self)
     return rc;
 }
 
-KAPP_EXTERN rc_t CC ArgsHandleStatusLevel (const Args * self)
+rc_t CC ArgsHandleStatusLevel (const Args * self)
 {
-    uint32_t count;
+    uint32_t vcount, qcount;
     rc_t rc;
 
-    rc = ArgsOptionCount (self, OPTION_VERBOSE, &count);
-    if (rc == 0) {
-        KStsLevelSet (count);
+    rc = ArgsOptionCount (self, OPTION_VERBOSE, &vcount);
+    if (rc == 0)
+    {
+        rc = ArgsOptionCount (self, OPTION_QUIET, &qcount);
+        if (rc == 0)
+        {
+            KStsLevel current;
+
+            current = KStsLevelGet();
+
+            if (vcount)
+            {
+                rc_t irc;
+
+                irc = SILENT_RC (rcRuntime, rcArgv, rcParsing, rcParam, rcIncorrect);
+                if (qcount)
+                {
+                    PLOGERR (klogErr,
+                             (klogErr, irc,
+                              "$(V)($(v)) and $(Q)($(q)) should not be used together",
+                              "V=%s,v=%s,Q=$s,q=%s",
+                              OPTION_VERBOSE,ALIAS_VERBOSE,
+                              OPTION_QUIET,ALIAS_QUIET));
+                }
+                KStsLevelSet (current + vcount);
+            }
+            else if (qcount)
+                KStsLevelSet (0);
+        }
     }
     return rc;
 }
+
+rc_t CC ArgsHandleNoUserSettings (const Args * self)
+{
+    uint32_t count = 0;
+    rc_t rc = ArgsOptionCount (self, OPTION_NO_USER_SETTINGS, &count);
+    if (rc == 0 && count != 0)
+        KConfigDisableUserSettings ();
+    return rc;
+}
+
+
+#if USE_OPTFILE
+rc_t CC ArgsHandleOptfile (Args * self)
+{
+    return Args_parse_inf_file (self, OPTION_OPTFILE);
+}
+#endif
+
+
 #if _DEBUGGING
 rc_t CC ArgsHandleDebug (const Args * self)
 {
@@ -1328,7 +1655,7 @@ rc_t CC ArgsHandleDebug (const Args * self)
 }
 #endif
 
-KAPP_EXTERN rc_t CC ArgsHandleStandardOptions (Args * self)
+rc_t CC ArgsHandleStandardOptions (Args * self)
 {
     rc_t rc;
 
@@ -1337,11 +1664,9 @@ KAPP_EXTERN rc_t CC ArgsHandleStandardOptions (Args * self)
         rc = ArgsHandleHelp (self);
         if (rc)
             break;
-
         rc = ArgsHandleVersion (self);
         if (rc)
             break;
-
         rc = ArgsHandleLogLevel (self);
         if (rc)
             break;
@@ -1350,14 +1675,19 @@ KAPP_EXTERN rc_t CC ArgsHandleStandardOptions (Args * self)
         if (rc)
             break;
 
-#if _DEBUGGING
+        rc = ArgsHandleNoUserSettings (self);
+        if (rc)
+            break;
+
+#if _DEBUGGING 
+	/* called a second time in case more symbols in in files */
         rc = ArgsHandleDebug (self);
 #endif
     } while (0); /* not a real loop */
     return rc;
 }
 
-KAPP_EXTERN rc_t CC ArgsMakeAndHandle (Args ** pself, int argc, char ** argv, uint32_t table_count, ...)
+rc_t CC ArgsMakeAndHandle (Args ** pself, int argc, char ** argv, uint32_t table_count, ...)
 {
     rc_t rc;
     Args * self;
@@ -1366,15 +1696,16 @@ KAPP_EXTERN rc_t CC ArgsMakeAndHandle (Args ** pself, int argc, char ** argv, ui
     rc = ArgsMakeStandardOptions (&self);
     if (rc == 0)
     {
-        do
+        for (;;)
         {
+            /* load added OptDef tables */
             if (table_count)
             {
                 va_list ap;
 
                 va_start (ap, table_count);
 
-                while (table_count-- && (rc == 0))
+                while (table_count--)
                 {
                     OptDef * options;
                     uint32_t opt_count;
@@ -1383,8 +1714,12 @@ KAPP_EXTERN rc_t CC ArgsMakeAndHandle (Args ** pself, int argc, char ** argv, ui
                     opt_count = va_arg (ap, uint32_t);
 
                     rc = ArgsAddOptionArray (self, options, opt_count /* , NULL, NULL */);
+                    if (rc)
+                        break;
                 }
+
                 va_end (ap);
+
                 if (rc)
                     break;
             }
@@ -1393,15 +1728,35 @@ KAPP_EXTERN rc_t CC ArgsMakeAndHandle (Args ** pself, int argc, char ** argv, ui
             if (rc)
                 break;
 
+#if USE_OPTFILE
+            /*
+             * recursively check for files full of options
+             * we want this done before flagging missing arguments
+             */
+            rc = ArgsHandleOptfile (self);
+            if (rc)
+                break;
+#endif
+            /*
+             * now handle (maybe even rehandle except the optfile
+             * the standard arguments all applications/tools support
+             */
             rc = ArgsHandleStandardOptions (self);
             if (rc)
                 break;
 
-            *pself = self;
+            rc = ArgsCheckRequired (self);
+            if (rc)
+            {
+                MiniUsage(self);
+                break;
+            }
 
+            *pself = self;
             return 0;
 
-        } while (0);
+            break;
+        }
     
         ArgsWhack (self);
     }
@@ -1416,7 +1771,7 @@ KAPP_EXTERN rc_t CC ArgsMakeAndHandle (Args ** pself, int argc, char ** argv, ui
  * and quite probably outside of args.
  */
 
-KAPP_EXTERN const char * CC trim_path (const char * full_name)
+const char * CC trim_path (const char * full_name)
 {
     const char * name;
 
@@ -1429,7 +1784,7 @@ KAPP_EXTERN const char * CC trim_path (const char * full_name)
 }
 
 
-KAPP_EXTERN rc_t CC ArgsProgram (const Args * args, const char ** fullpath, const char ** progname)
+rc_t CC ArgsProgram (const Args * args, const char ** fullpath, const char ** progname)
 {
     const char * defaultname = UsageDefaultName;
     const char * f;
@@ -1536,7 +1891,6 @@ static void print_indented( const size_t first_indent, const size_t indent,
 
 void CC HelpOptionLine(const char * alias, const char * option, const char * param, const char ** msgs)
 {
-    int n, msgc;
 /*    const char * msg; */
 #define INDENT 2
 #define MSG_INDENT 35
@@ -1545,25 +1899,36 @@ void CC HelpOptionLine(const char * alias, const char * option, const char * par
     bool has_alias = (alias != NULL && alias[0] != '\0');
     bool has_opt = (option != NULL && option[0] != '\0');
 
-    if( has_alias || has_opt ) {
-        OUTMSG(("%*s%n", INDENT, " ", &n));
-        msgc = n;
-        if( has_alias ) {
+    if( has_alias || has_opt )
+    {
+        int n, msgc;
+
+        OUTMSG(("%*s%n", INDENT, " ", & msgc ));
+
+        if( has_alias )
+        {
             OUTMSG(("-%s%n", alias, &n));
             msgc += n;
         }
-        if( has_alias && has_opt ) {
+
+        if( has_alias && has_opt )
+        {
             OUTMSG(("|"));
             msgc++;
         }
-        if( has_opt ) {
+
+        if( has_opt )
+        {
             OUTMSG(("--%s%n", option, &n));
             msgc += n;
         }
-        if( param != NULL) {
+
+        if( param != NULL)
+        {
             OUTMSG((" <%s>%n", param, &n));
             msgc += n;
         }
+
         print_indented( msgc, MSG_INDENT, MSG_MAXLEN, msgs );
     }
 }
@@ -1600,12 +1965,22 @@ void CC HelpOptionsStandard (void)
     HelpOptionLine (ALIAS_LOG_LEVEL, OPTION_LOG_LEVEL, "level", log_usage);
 
     HelpOptionLine (ALIAS_VERBOSE, OPTION_VERBOSE, NULL, verbose_usage);
+    HelpOptionLine (ALIAS_QUIET, OPTION_QUIET, NULL, quiet_usage);
+#if USE_OPTFILE
+    HelpOptionLine (ALIAS_OPTFILE, OPTION_OPTFILE, "file", optfile_usage);
+#endif
 #if _DEBUGGING
     HelpOptionLine (ALIAS_DEBUG, OPTION_DEBUG, "Module[-Flag]", debug_usage); 
 #endif
 }
 
 
+void CC HelpOptionsReport (void)
+{
+    HelpOptionLine (ALIAS_REPORT, OPTION_REPORT, "type", report_usage);
+}
+
+
 rc_t CC MiniUsage (const Args * args)
 {
     KWrtWriter w;
diff --git a/libs/kapp/args_debug.h b/libs/kapp/args_debug.h
new file mode 100644
index 0000000..3221434
--- /dev/null
+++ b/libs/kapp/args_debug.h
@@ -0,0 +1,47 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#ifndef _h_args_priv_libs_
+#define _h_args_priv_libs_
+
+#include <klib/debug.h>
+
+#if _DEBUGGING
+
+#define ARGS_DBGF(msg) DBGMSG(DBG_ARGS, DBG_FLAG(DBG_ARGS_WRITER), msg)
+#define ARGS_DBG(fmt, ...) ARGS_DBGF(("%s:%u: " fmt "\n", __func__, __LINE__, __VA_ARGS__))
+#define ARGS_DBGERR(rc) if(rc != 0) {ARGS_DBGF(("%s:%u: %R\n", __func__, __LINE__, rc));}
+#define ARGS_DBGERRP(fmt, rc, ...) if(rc != 0) {ARGS_DBGF(("%s:%u: %R " fmt "\n", __func__, __LINE__, rc, __VA_ARGS__));}
+
+#else
+
+#define ARGS_DBGF(msg) ((void)0)
+#define ARGS_DBG(fmt, ...) ((void)0)
+#define ARGS_DBGERR(rc) ((void)0)
+#define ARGS_DBGERRP(fmt, rc, ...) ((void)0)
+
+#endif
+
+#endif
\ No newline at end of file
diff --git a/libs/kapp/libload.vers b/libs/kapp/libload.vers
index 21e8796..66c4c22 100644
--- a/libs/kapp/libload.vers
+++ b/libs/kapp/libload.vers
@@ -1 +1 @@
-1.0.3
+1.0.9
diff --git a/libs/kapp/loader-file.c b/libs/kapp/loader-file.c
index 87a0cf8..26fc1b6 100644
--- a/libs/kapp/loader-file.c
+++ b/libs/kapp/loader-file.c
@@ -34,13 +34,16 @@
 #include <kfs/bzip.h>
 #include <kfs/gzip.h>
 #include <kapp/progressbar.h>
+#include <kapp/queue-file.h>
 
 #include <kapp/loader-file.h>
 #define KFILE_IMPL KLoaderFile
 #include <kfs/impl.h>
 
+#include <sysalloc.h>
 #include <stdlib.h>
 #include <string.h>
+#include <os-native.h> /* for strdup on Windows */
 
 #define DBG(msg) DBGMSG(DBG_LOADLIB,DBG_FLAG(DBG_LOADLIB_FILE), msg)
 
@@ -66,6 +69,7 @@ struct KLoaderFile
     char* filename;
     char* realname;
     bool has_md5;
+    bool ahead;
     uint8_t md5_digest[16];
 
     /* current file */
@@ -210,6 +214,16 @@ rc_t KLoaderFile_Open(KLoaderFile* self)
                     rc = RC(rcApp, rcFile, rcOpening, rcType, rcUnexpected);
                     break;
             }
+#if ! WINDOWS
+            if( rc == 0 && self->ahead ) {
+                const KFile *z = NULL;
+                if( (rc = KQueueFileMakeRead(&z, self->pos, self->file,
+                                             self->buffer_size * 10,  self->buffer_size, 0)) == 0 ) {
+                    KFileRelease(self->file);
+                    self->file = z;
+                }
+            }
+#endif
         }
     }
     if( rc != 0 ) {
@@ -271,7 +285,7 @@ LIB_EXPORT rc_t CC KLoaderFile_IsEof(const KLoaderFile* cself, bool* eof)
         return RC(rcApp, rcFile, rcConstructing, rcParam, rcNull);
     }
     /* end of file is when file is at eof and nothing in buffer or last readline returned the buffer */
-    *eof = cself->eof && cself->avail == 0;
+    *eof = cself->eof && ((cself->avail - cself->eol) == 0);
     return 0;
 }
 
@@ -299,19 +313,16 @@ LIB_EXPORT rc_t CC KLoaderFile_Reset(const KLoaderFile* cself)
         rc = RC(rcApp, rcFile, rcConstructing, rcParam, rcNull);
     } else {
         KLoaderFile* self = (KLoaderFile*)cself;
-        if( cself->compress_type != compress_none ) {
-            if( cself->pos != 0 ) {
-                /* data in buffer is not first portion of the file */
-                rc = KLoaderFile_Close(cself);
-                self->avail = 0;
-                self->buffer[0] = 0;
-            }
-        } else {
+        if( cself->pos != 0 && (cself->ahead || cself->compress_type != compress_none) ) {
+            /* threaded buffering || data in buffer is not first portion of the file */
+            rc = KLoaderFile_Close(cself);
             self->avail = 0;
             self->buffer[0] = 0;
+            self->eof = false;
+        } else {
+            self->avail += self->buffer_pos - self->buffer;
         }
         self->pos = 0;
-        self->eof = false;
         self->eol = 0;
         self->line_no = 0;
         self->buffer_pos = self->buffer;
@@ -319,6 +330,17 @@ LIB_EXPORT rc_t CC KLoaderFile_Reset(const KLoaderFile* cself)
     return rc;
 }
 
+LIB_EXPORT rc_t CC KLoaderFile_SetReadAhead(const KLoaderFile* cself, bool read_ahead)
+{
+    if( cself == NULL ) {
+        return RC(rcApp, rcFile, rcConstructing, rcParam, rcNull);
+    }
+#if ! WINDOWS
+    ((KLoaderFile*)cself)->ahead = read_ahead;
+#endif
+    return 0;
+}
+
 LIB_EXPORT rc_t CC KLoaderFile_LOG(const KLoaderFile* cself, KLogLevel lvl, rc_t rc, const char *msg, const char *fmt, ...)
 {
     va_list args;
@@ -330,39 +352,35 @@ LIB_EXPORT rc_t CC KLoaderFile_LOG(const KLoaderFile* cself, KLogLevel lvl, rc_t
 
 LIB_EXPORT rc_t CC KLoaderFile_VLOG(const KLoaderFile* cself, KLogLevel lvl, rc_t rc, const char *msg, const char *fmt, va_list args)
 {
-    if( cself == NULL || (msg == NULL && rc == 0) )
-    {
+    if( cself == NULL || (msg == NULL && rc == 0) ) {
         rc = RC(rcApp, rcFile, rcAccessing, rcParam, rcInvalid);
         LOGERR(klogErr, rc, __func__);
-    }
-    else if( msg == NULL && rc != 0 )
-    {
-        if( cself->line_no == 0 )
-            PLOGERR(lvl, (lvl, rc, NULL, PLOG_2(PLOG_S(file),PLOG_U64(line)), cself->filename, cself->pos));
-        else
-            PLOGERR(lvl, (lvl, rc, NULL, PLOG_2(PLOG_S(file),PLOG_U64(line)), cself->filename, cself->line_no));
-    }
-    else
-    {
+    }  else if( msg == NULL && rc != 0 ) {
+        if( cself->line_no == 0 ) {
+            PLOGERR(lvl, (lvl, rc, "$(file):$(offset)", "file=%s,offset=%lu", cself->filename, cself->pos));
+        } else {
+            PLOGERR(lvl, (lvl, rc, "$(file):$(line)", "file=%s,line=%lu", cself->filename, cself->line_no));
+        }
+    } else {
         rc_t fmt_rc;
         char xfmt[4096];
         const char* f = fmt ? fmt : "";
         const char* c = fmt ? "," : "";
 
-        if( cself->line_no == 0 )
+        if( cself->line_no == 0 ) {
             fmt_rc = string_printf(xfmt, sizeof xfmt, NULL, "file=%s,offset=%lu%s%s", cself->filename, cself->pos, c, f);
-        else
+        } else {
             fmt_rc = string_printf(xfmt, sizeof xfmt, NULL, "file=%s,line=%lu%s%s", cself->filename, cself->line_no, c, f);
-
-        if ( fmt_rc == 0 )
+        }
+        if ( fmt_rc == 0 ) {
             fmt = xfmt;
-
-        if( rc == 0 )
+        }
+        if( rc == 0 ) {
             VLOGMSG(lvl, (lvl, msg, fmt, args));
-        else
+        } else {
             VLOGERR(lvl, (lvl, rc, msg, fmt, args));
+        }
     }
-
     return rc;
 }
 
@@ -406,7 +424,15 @@ LIB_EXPORT rc_t CC KLoaderFile_Readline(const KLoaderFile* cself, const void** b
     } else {
         KLoaderFile *self = (KLoaderFile*)cself;
         uint8_t* nl;
-        bool refill = true;
+        bool refilled = false;
+        bool eof;
+        
+        rc = KLoaderFile_IsEof(cself, &eof);
+        if( rc == 0 && eof ) {
+            *buffer = NULL;
+            return 0;
+        }
+        
         while( rc == 0 ) {
             bool CR_last = false;
             int i, cnt = self->avail - self->eol;
@@ -418,10 +444,10 @@ LIB_EXPORT rc_t CC KLoaderFile_Readline(const KLoaderFile* cself, const void** b
                     nl = &buf[i];
                 }
             }
-            if( !(nl == NULL && refill) ) {
+            if( nl != NULL || refilled ) {
                 break;
             }
-            refill = false;
+            refilled = true;
             /* none found we need to push out processed portion and load full buffer */
             if( self->eol > 0 ) {
                 /* mark that line ended on buffer end and last char in buffer is \r */
@@ -445,10 +471,7 @@ LIB_EXPORT rc_t CC KLoaderFile_Readline(const KLoaderFile* cself, const void** b
                 if( self->buffer_size == self->avail ) {
                     /* buffer could be copied and next call will provide tail of line */
                     rc = RC( rcApp, rcFile, rcReading, rcString, rcTooLong);
-                } else if( (rc = KLoaderFile_IsEof(cself, &refill)) == 0 && refill ) {
-                    /* EOF */
-                    *buffer = NULL;
-                }
+                } 
             } else {
                 *length = nl - (uint8_t*)*buffer;
                 self->eol = nl - self->buffer_pos + 1;
@@ -515,11 +538,19 @@ LIB_EXPORT rc_t CC KLoaderFile_FullName(const KLoaderFile *self, const char **na
 {
     if( self == NULL || name == NULL ) {
         return RC(rcApp, rcFile, rcAccessing, rcParam, rcNull);
+    } else {
+        *name = self->realname;
     }
-    *name = self->realname;
     return 0;
 }
 
+LIB_EXPORT rc_t CC KLoaderFile_ResolveName(const KLoaderFile *self, char *resolved, size_t rsize)
+{
+    if( self == NULL || resolved == NULL ) {
+        return RC(rcApp, rcFile, rcAccessing, rcParam, rcNull);
+    }
+    return KDirectoryResolvePath(self->dir, true, resolved, rsize, self->realname);
+}
 
 LIB_EXPORT rc_t CC KLoaderFile_Release(const KLoaderFile* cself, bool exclude_from_progress)
 {
@@ -544,7 +575,8 @@ LIB_EXPORT rc_t CC KLoaderFile_Release(const KLoaderFile* cself, bool exclude_fr
     return rc;
 }
 
-LIB_EXPORT rc_t CC KLoaderFile_Make(const KLoaderFile **file, const KDirectory* dir, const char* filename, const uint8_t* md5_digest)
+LIB_EXPORT rc_t CC KLoaderFile_Make(const KLoaderFile **file, const KDirectory* dir, const char* filename,
+                                    const uint8_t* md5_digest, bool read_ahead)
 {
     rc_t rc = 0;
     KLoaderFile* obj = NULL;
@@ -585,8 +617,13 @@ LIB_EXPORT rc_t CC KLoaderFile_Make(const KLoaderFile **file, const KDirectory*
                         }
                     }
                     if( rc == 0 &&
-                        (rc = KFileInit(&obj->dad, (const KFile_vt*)&KLoaderFile_vtbl, true, false)) == 0 ) {
+                        (rc = KFileInit(&obj->dad, (const KFile_vt*)&KLoaderFile_vtbl, "KLoaderFile", filename, true, false)) == 0 ) {
                         obj->file = &obj->dad;
+#if WINDOWS
+                        obj->ahead = false;
+#else
+                        obj->ahead = read_ahead;
+#endif
                         obj->realname = strdup(resolved);
                         if( obj->realname == NULL ) {
                             rc = RC(rcApp, rcFile, rcConstructing, rcMemory, rcExhausted);
diff --git a/libs/kapp/log-xml.c b/libs/kapp/log-xml.c
index 450a4c6..891dbfc 100644
--- a/libs/kapp/log-xml.c
+++ b/libs/kapp/log-xml.c
@@ -31,7 +31,7 @@
 #include <klib/status.h>
 #include <klib/text.h>
 #include <klib/printf.h>
-#include <klib/xml.h>
+#include <kxml/xml.h>
 #include <kfs/file.h>
 #include <kfs/kfs-priv.h>
 #include <kfs/directory.h>
@@ -86,20 +86,18 @@ struct XMLLogger {
     XMLFormatterData stslib;
 };
 
-static
+LIB_EXPORT
 rc_t CC XMLLogger_Encode(const char* src, char *dst, size_t dst_sz, size_t *num_writ)
 {
     rc_t rc = 0;
-    size_t bytes;
-    const char* p;
-
-    assert(src != NULL && num_writ != NULL);
 
-    *num_writ = 0;
-    if( *src == '\0' ) {
-        *dst = *src;
+    if( src == NULL || dst == NULL || num_writ == NULL ) {
+        rc = RC(rcApp, rcArgv, rcParsing, rcParam, rcNull);
     } else {
+        *num_writ = 0;
         do {
+            size_t bytes;
+            const char* p;
             switch(*src) {
                 case '\'':
                     bytes = 6;
@@ -128,12 +126,14 @@ rc_t CC XMLLogger_Encode(const char* src, char *dst, size_t dst_sz, size_t *num_
             }
             if( (*num_writ + bytes) > dst_sz ) {
                 rc = RC(rcApp, rcLog, rcEncoding, rcBuffer, rcInsufficient);
+                break;
             } else {
                 memcpy(dst, p, bytes);
                 *num_writ = *num_writ + bytes;
                 dst += bytes;
             }
-        } while(rc == 0 && *++src != '\0');
+        } while(*src++ != '\0');
+        *num_writ = *num_writ - 1;
     }
     return rc;
 }
@@ -310,6 +310,7 @@ LIB_EXPORT rc_t CC XMLLogger_Make2(const XMLLogger** self, KDirectory* dir, cons
 {
     rc_t rc = 0;
     XMLLogger* obj;
+    KDirectory* my_dir = NULL;
 
     const uint32_t lopt = klogFmtTimestamp | klogFmtSeverity |
                           klogFmtMessage | klogFmtAppName | klogFmtAppVersion | klogFmtReasonShort;
@@ -324,9 +325,9 @@ LIB_EXPORT rc_t CC XMLLogger_Make2(const XMLLogger** self, KDirectory* dir, cons
     obj = calloc(1, sizeof(*obj));
     if( obj == NULL ) {
         rc = RC(rcApp, rcLog, rcAllocating, rcMemory, rcExhausted);
-    } else if( fd < 0 && dir == NULL && (rc = KDirectoryNativeDir(&dir)) != 0 ) {
+    } else if( fd < 0 && dir == NULL && (rc = KDirectoryNativeDir(&my_dir)) != 0 ) {
     } else if( fd >= 0 && (rc = KFileMakeFDFileWrite(&obj->file.file, false, fd)) != 0 ) {
-    } else if( logpath != NULL && fd < 0 && (rc = KDirectoryCreateFile(dir, &obj->file.file, false, 0644, kcmInit, logpath)) != 0 ) {
+    } else if( logpath != NULL && fd < 0 && (rc = KDirectoryCreateFile(dir ? dir : my_dir, &obj->file.file, false, 0644, kcmInit, logpath)) != 0 ) {
     } else {
     
         obj->file.pos = 0;
@@ -366,6 +367,7 @@ LIB_EXPORT rc_t CC XMLLogger_Make2(const XMLLogger** self, KDirectory* dir, cons
             }
         }
     }
+    KDirectoryRelease(my_dir);
     if( rc == 0 ) {
         *self = obj;
         if( fd >= 0 ) {
diff --git a/libs/kapp/main.c b/libs/kapp/main.c
index 9906fdb..125a64d 100644
--- a/libs/kapp/main.c
+++ b/libs/kapp/main.c
@@ -29,6 +29,8 @@
 #include <sysalloc.h>
 #include <kapp/main.h>
 #include <kfg/config.h>
+#include <kproc/procmgr.h>
+#include <klib/report.h>
 #include <klib/writer.h>
 #include <klib/log.h>
 #include <klib/status.h>
@@ -354,12 +356,34 @@ void CC NextLogLevelh (int *ip,
  *  to be in the shell-native character set: ASCII or UTF-8
  *  element 0 is expected to be executable identity or path.
  */
+static
+void CC atexit_task ( void )
+{
+    KProcMgrWhack ();
+}
+
 rc_t KMane ( int argc, char *argv [] )
 {
+    rc_t rc;
+
     /* get application version */
-    uint32_t vers = KAppVersion ();
+    ver_t vers = KAppVersion ();
+
+    /* initialize cleanup tasks */
+    int status = atexit ( atexit_task );
+    if ( status != 0 )
+        return SILENT_RC ( rcApp, rcNoTarg, rcInitializing, rcFunction, rcNotAvailable );
 
-    rc_t rc = KWrtInit(argv[0], vers);
+    /* initialize error reporting */
+    ReportInit ( argc, argv, vers );
+
+    /* initialize proc mgr */
+    rc = KProcMgrInit ();
+    if ( rc != 0 )
+        return rc;
+
+    /* initialize logging */
+    rc = KWrtInit(argv[0], vers);
     if ( rc == 0 )
         rc = KLogLibHandlerSetStdErr ();
     if ( rc == 0 )
@@ -376,6 +400,8 @@ rc_t KMane ( int argc, char *argv [] )
             rc = KMain ( argc, argv );
             if ( rc != 0 )
             {
+
+#if _DEBUGGING
                 rc_t rc2;
                 uint32_t lineno;
                 const char *filename, *function;
@@ -388,6 +414,8 @@ rc_t KMane ( int argc, char *argv [] )
                               , function
                         );
                 }
+#endif
+
             }
 #if KFG_COMMON_CREATION
             KConfigRelease ( kfg );
@@ -395,5 +423,9 @@ rc_t KMane ( int argc, char *argv [] )
 #endif
     }
 
+    /* finalize error reporting */
+    ReportSilence ();
+    ReportFinalize ( rc );
+
     return rc;
 }
diff --git a/libs/kapp/queue-file.c b/libs/kapp/queue-file.c
new file mode 100644
index 0000000..e8dfd14
--- /dev/null
+++ b/libs/kapp/queue-file.c
@@ -0,0 +1,925 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+typedef struct KQueueFile KQueueFile;
+#define KFILE_IMPL KQueueFile
+
+#include <kapp/extern.h>
+#include <kapp/queue-file.h>
+#include <kfs/file.h>
+#include <kfs/impl.h>
+#include <kproc/timeout.h>
+#include <kproc/thread.h>
+#include <kproc/queue.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <os-native.h>
+#include <klib/out.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#if _DEBUGGING && 0
+#define DEFAULT_BLOCK_SIZE 4 * 1024
+#define QFMSG( msg, ... ) \
+    KOutMsg ( msg, __VA_ARGS__ )
+#else
+#define DEFAULT_BLOCK_SIZE 64 * 1024
+#define QFMSG( msg, ... ) \
+    ( void ) 0
+#endif
+
+#define DEFAULT_TIMEOUT_MS 150
+
+/*--------------------------------------------------------------------------
+ * KQueueFileBuffer
+ *  a block that describes its valid bytes and position
+ */
+typedef struct KQueueFileBuffer KQueueFileBuffer;
+struct KQueueFileBuffer
+{
+    uint64_t pos;
+    size_t bytes;
+    rc_t rc;
+    uint32_t align;
+    uint8_t data [ 1 ];
+};
+
+static
+bool KQueueFileBufferContains ( const KQueueFileBuffer *self, uint64_t pos )
+{
+    if ( self != NULL )
+    {
+        if ( self -> pos <= pos && ( self -> pos + self -> bytes ) > pos )
+            return true;
+    }
+    return false;
+}
+
+
+/*--------------------------------------------------------------------------
+ * KQueueFile
+ *  an extension to KFile that runs on a background thread
+ */
+struct KQueueFile
+{
+    KFile dad;
+
+    /* the source file's size on open */
+    uint64_t apparent_size;
+
+    /* starting position for read-ahead */
+    uint64_t start_pos;
+
+    /* the file really being accessed */
+    KFile *f;
+
+    /* buffer info */
+    KQueueFileBuffer *b;
+    size_t bsize;
+
+    /* thread and buffer queue */
+    KThread *t;
+    KQueue *q;
+
+    /* captured upon open */
+    rc_t rc_from_size_on_open;
+
+    /* timeout when queue is not responding */
+    uint32_t timeout_ms;
+};
+
+/* Whack
+ */
+static
+rc_t KQueueFileWhackRead ( KQueueFile *self )
+{
+    void *b;
+
+    /* no more reading */
+    QFMSG ( "%s: sealing queue\n", __func__ );
+    KQueueSeal ( self -> q );
+
+    /* flush the queue */
+    QFMSG ( "%s: popping queue\n", __func__ );
+    while ( KQueuePop ( self -> q, & b, NULL ) == 0 )
+    {
+        QFMSG ( "%s: dousing a buffer\n", __func__ );
+        free ( b );
+    }
+
+    /* wait for thread to exit */
+    QFMSG ( "%s: waiting for bg thread to exit\n", __func__ );
+    KThreadWait ( self -> t, NULL );
+
+    /* tear it down */
+    QFMSG ( "%s: freeing object\n", __func__ );
+    free ( self -> b );
+    KThreadRelease ( self -> t );
+    KQueueRelease ( self -> q );
+    KFileRelease ( self -> f );
+    free ( self );
+
+    return 0;
+}
+
+static
+rc_t KQueueFileFlush ( KQueueFile *self, KQueueFileBuffer *b )
+{
+    rc_t rc;
+
+    /* timeout is in mS */
+    timeout_t tm;
+    QFMSG ( "%s: initializing timeout for %,umS\n", __func__, self->timeout_ms);
+    TimeoutInit ( & tm, self->timeout_ms );
+
+    /* push buffer */
+    QFMSG ( "%s: pushing buffer...\n", __func__ );
+    rc = KQueuePush ( self -> q, b, & tm );
+    QFMSG ( "%s: ...done: rc = %R\n", __func__, rc );
+    if ( rc != 0 )
+    {
+        /* see if the bg thread exited */
+        if ( GetRCState ( rc ) == rcReadonly )
+        {
+            rc = RC ( rcApp, rcFile, rcWriting, rcTransfer, rcIncomplete );
+            QFMSG ( "%s: resetting rc to %R\n", __func__, rc );
+        }
+        return rc;
+    }
+
+    QFMSG ( "%s: forgetting about buffer\n", __func__ );
+    self -> b = NULL;
+    return 0;
+}
+
+static
+rc_t KQueueFileWhackWrite ( KQueueFile *self )
+{
+    void *b;
+    rc_t rc = 0;
+
+    /* flush last buffer */
+    if ( self -> b != NULL )
+    {
+        QFMSG ( "%s: have non-null buffer\n", __func__ );
+        if ( self -> b -> bytes != 0 )
+        {
+            QFMSG ( "%s: buffer has %zu bytes\n", __func__, self -> b -> bytes );
+            rc = KQueueFileFlush ( self, self -> b );
+        }
+
+        free ( self -> b );
+        self -> b = NULL;
+    }
+
+    /* no more writing */
+    QFMSG ( "%s: sealing queue\n", __func__ );
+    KQueueSeal ( self -> q );
+
+    /* wait for thread to exit */
+    QFMSG ( "%s: waiting for bg thread to exit\n", __func__ );
+    KThreadWait ( self -> t, NULL );
+
+    /* the file should be written
+       but flush the queue if bg thread didn't */
+    QFMSG ( "%s: popping queue\n", __func__ );
+    while ( KQueuePop ( self -> q, & b, NULL ) == 0 )
+    {
+        QFMSG ( "%s: dousing a buffer\n", __func__ );
+        free ( b );
+    }
+
+    /* tear it down */
+    QFMSG ( "%s: freeing object\n", __func__ );
+    KThreadRelease ( self -> t );
+    KQueueRelease ( self -> q );
+    KFileRelease ( self -> f );
+    free ( self );
+
+    return rc;
+}
+
+/* GetSysFile
+ *  returns an underlying system file object
+ *  and starting offset to contiguous region
+ *  suitable for memory mapping, or NULL if
+ *  no such file is available.
+ */
+static
+struct KSysFile* CC KQueueFileGetSysFile ( const KQueueFile *self, uint64_t *offset )
+{
+    return NULL;
+}
+
+/* RandomAccess
+ *  ALMOST by definition, the file is random access
+ *
+ *  certain file types will refuse random access
+ *  these include FIFO and socket based files, but also
+ *  wrappers that require serial access ( e.g. compression )
+ *
+ *  returns 0 if random access, error code otherwise
+ */
+static
+rc_t CC KQueueFileRandomAccess ( const KQueueFile *self )
+{
+    return RC ( rcFS, rcFile, rcAccessing, rcFunction, rcUnsupported );
+}
+
+/* Type
+ *  returns a KQueueFileDesc
+ *  not intended to be a content type,
+ *  but rather an implementation class
+ */
+static
+uint32_t CC KQueueFileType ( const KQueueFile *self )
+{
+    return kptFIFO;
+}
+
+/* Size
+ *  returns size in bytes of file
+ *
+ *  "size" [ OUT ] - return parameter for file size
+ */
+static
+rc_t CC KQueueFileSize ( const KQueueFile *self, uint64_t *size )
+{
+    * size = self -> apparent_size;
+    return self -> rc_from_size_on_open;
+}
+
+/* SetSize
+ *  sets size in bytes of file
+ *
+ *  "size" [ IN ] - new file size
+ */
+static
+rc_t CC KQueueFileSetSize ( KQueueFile *self, uint64_t size )
+{
+    return RC ( rcFS, rcFile, rcAccessing, rcFunction, rcUnsupported );
+}
+
+
+/* RunRead
+ *  runs read loop on background thread
+ */
+static
+rc_t CC KQueueFileRunRead ( const KThread *t, void *data )
+{
+    KQueueFile *self = data;
+
+    rc_t rc;
+    bool loop;
+    uint64_t pos;
+    size_t num_read;
+
+    QFMSG ( "BG: %s: running read-ahead loop\n", __func__ );
+    for ( rc = 0, loop = true, pos = self -> start_pos; loop; pos += num_read )
+    {
+        timeout_t tm;
+
+        KQueueFileBuffer *b = malloc ( sizeof * b - sizeof b -> data + self -> bsize );
+        if ( b == NULL )
+        {
+            rc = RC ( rcApp, rcFile, rcReading, rcMemory, rcExhausted );
+            QFMSG ( "BG: %s: failed to allocate %zu byte buffer\n", __func__, self -> bsize );
+            b = malloc ( sizeof * b );
+            if ( b == NULL )
+                break;
+
+            num_read = 0;
+            b -> rc = rc;
+            QFMSG ( "BG: %s: created empty buffer with rc = %R.\n", __func__, b -> rc );
+            loop = false;
+        }
+        else
+        {
+            QFMSG ( "BG: %s: reading %zu byte buffer\n", __func__, self -> bsize );
+            b -> rc = KFileReadAll ( self -> f, pos, b -> data, self -> bsize, & num_read );
+            QFMSG ( "BG: %s: read %zu bytes, rc = %R\n", __func__, num_read, b -> rc );
+            if ( b -> rc != 0 || num_read == 0 )
+                loop = false;
+        }
+
+        /* update buffer data */
+        b -> pos = pos;
+        b -> bytes = num_read;
+#if _DEBUGGING
+        b -> align = 0;
+#endif
+
+PushAgain:
+        /* timeout is in mS */
+        QFMSG ( "BG: %s: initializing timeout for %,umS\n", __func__, self->timeout_ms );
+        TimeoutInit ( & tm, self->timeout_ms );
+
+        /* push buffer */
+        QFMSG ( "BG: %s: pushing buffer...\n", __func__ );
+        rc = KQueuePush ( self -> q, b, & tm );
+        QFMSG ( "BG: %s: ...done: rc = %R\n", __func__, rc );
+        if ( rc != 0 )
+        {
+            /* if queue has been sealed by fg */
+            if ( GetRCState ( rc ) == rcReadonly )
+            {
+                rc = 0;
+                QFMSG ( "BG: %s: clearing rc\n", __func__ );
+
+            } else if( GetRCObject(rc) == rcTimeout && GetRCState(rc) == rcExhausted ) {
+                goto PushAgain;
+            }
+            QFMSG ( "BG: %s: dousing buffer\n", __func__ );
+            free ( b );
+            break;
+        }
+    }
+    
+    /* going to exit thread */
+    QFMSG ( "BG: %s: sealing thread\n", __func__ );
+    KQueueSeal ( self -> q );
+
+    QFMSG ( "BG: %s: exit with rc = %R\n", __func__, rc );
+    return rc;
+}
+
+/* Read
+ *  read file from known position
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ *  "num_read" [ OUT ] - return parameter giving number of bytes
+ *  actually read. when returned value is zero and return code is
+ *  also zero, interpreted as end of file.
+ */
+static
+rc_t CC KQueueFileNoRead ( const KQueueFile *self, uint64_t pos,
+    void *buffer, size_t bsize, size_t *num_read )
+{
+    return RC ( rcFS, rcFile, rcReading, rcFile, rcWriteonly );
+}
+
+static
+rc_t CC KQueueFileRead ( const KQueueFile *cself, uint64_t pos,
+    void *buffer, size_t bsize, size_t *num_read )
+{
+    rc_t rc;
+    size_t to_read;
+    KQueueFile *self = ( KQueueFile* ) cself;
+    KQueueFileBuffer *b = self -> b;
+
+    assert ( num_read != NULL );
+    assert ( * num_read == 0 );
+    assert ( buffer != NULL && bsize != 0 );
+
+    /* detect attempt to back up */
+    if ( b != NULL && pos < b -> pos )
+    {
+        QFMSG ( "%s: detected attempt to back up from %lu to %lu\n", __func__, b -> pos, pos );
+        return RC ( rcApp, rcFile, rcReading, rcConstraint, rcViolated );
+    }
+    
+    QFMSG ( "%s: loop to read %zu bytes at offset %lu\n", __func__, bsize, pos );
+    while ( ! KQueueFileBufferContains ( b, pos ) )
+    {
+        /* fetch next buffer */
+        KQueueFileBuffer *tmp;
+
+        /* timeout is in mS */
+        timeout_t tm;
+        QFMSG ( "%s: initializing timeout for %,umS\n", __func__, self->timeout_ms );
+        TimeoutInit ( & tm, self->timeout_ms );
+
+        /* pop buffer */
+        QFMSG ( "%s: popping buffer...\n", __func__ );
+        rc = KQueuePop ( self -> q, ( void** ) & tmp, & tm );
+        QFMSG ( "%s: ...done: rc = %R\n", __func__, rc );
+        if ( rc != 0 )
+        {
+            /* see if the bg thread is done */
+            if ( GetRCState ( rc ) == rcDone && GetRCObject ( rc ) == rcData )
+            {
+                QFMSG ( "%s: BG thread has exited with end-of-input\n", __func__ );
+                return 0;
+            } else if( GetRCObject(rc) == rcTimeout && GetRCState(rc) == rcExhausted ) {
+                continue; /* timeout is not a problem, try again */
+            }
+
+            QFMSG ( "%s: read failed with rc = %R\n", __func__, rc );
+            return rc;
+        }
+
+        /* queue is not supposed to be able to contain NULL */
+        assert ( tmp != NULL );
+
+        /* buffer may indicate read error or end of input */
+        if ( tmp -> rc != 0 || tmp -> bytes == 0 )
+        {
+            rc = tmp -> rc;
+            QFMSG ( "%s: BG thread has delivered %zu size buffer with rc = %R\n", __func__, tmp -> bytes, rc );
+            free ( tmp );
+            return rc;
+        }
+
+        /* free existing buffer */
+        if ( b != NULL )
+        {
+            QFMSG ( "%s: freeing buffer of %zu bytes at position %lu\n", __func__, b -> bytes, b -> pos );
+            free ( b );
+        }
+
+        /* take new buffer */
+        self -> b = b = tmp;
+        QFMSG ( "%s: caching buffer of %zu bytes at position %lu\n", __func__, b -> bytes, b -> pos );
+    }
+
+    pos -= b -> pos;
+    to_read = b -> bytes - ( size_t ) pos;
+    if ( to_read > bsize )
+        to_read = bsize;
+
+    QFMSG ( "%s: copying %zu bytes from buffer at local offset %lu\n", __func__, to_read, pos );
+    memcpy ( buffer, & b -> data [ pos ], to_read );
+
+    QFMSG ( "%s: successful read\n", __func__ );
+    * num_read = to_read;
+    return 0;
+}
+
+
+/* RunWrite
+ *  runs write loop on background thread
+ */
+static
+rc_t CC KQueueFileRunWrite ( const KThread *t, void *data )
+{
+    KQueueFile *self = data;
+
+    rc_t rc;
+    do
+    {
+        size_t num_writ;
+        KQueueFileBuffer *b;
+
+        /* timeout is in mS */
+        timeout_t tm;
+        TimeoutInit ( & tm, self->timeout_ms );
+
+        /* pop buffer */
+        rc = KQueuePop ( self -> q, ( void** ) & b, & tm );
+        if ( rc != 0 )
+        {
+            /* see if the fg thread is done */
+            if ( GetRCState ( rc ) == rcDone && GetRCObject ( rc ) == rcData )
+            {
+                rc = 0;
+            }
+            else if ( GetRCObject(rc) == rcTimeout && GetRCState(rc) == rcExhausted )
+            {
+                rc = 0;
+                continue;
+            }
+
+            break;
+        }
+
+        /* queue won't accept NULL object references */
+        assert ( b != NULL );
+
+        /* look at buffer for end of input */
+        if ( b -> rc != 0 || b -> bytes == 0 )
+        {
+            free ( b );
+            break;
+        }
+
+        /* write to file */
+        rc = KFileWriteAll ( self -> f, b -> pos, b -> data, b -> bytes, & num_writ );
+        assert ( num_writ == b -> bytes || rc != 0 );
+
+        /* TBD - need a better way to deal with this */
+        if ( rc != 0 )
+        {
+            PLOGERR ( klogSys, ( klogSys, rc, "$(func): wrote $(num_writ) of $(bytes) bytes to file",
+                                 "func=%s,num_writ=%zu,bytes=%zu", __func__, num_writ, b -> bytes ) );
+        }
+
+        /* done with buffer */
+        free ( b );
+    }
+    while ( rc == 0 );
+
+    /* going to exit thread */
+    KQueueSeal ( self -> q );
+
+    return rc;
+}
+
+/* Write
+ *  write file at known position
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ *  "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually written
+ */
+static
+rc_t CC KQueueFileNoWrite ( KQueueFile *self, uint64_t pos,
+    const void *buffer, size_t size, size_t *num_writ )
+{
+    return RC ( rcApp, rcFile, rcWriting, rcFile, rcReadonly );
+}
+
+static
+rc_t CC KQueueFileWrite ( KQueueFile *self, uint64_t pos,
+    const void *buffer, size_t size, size_t *num_writ )
+{
+    rc_t rc;
+    size_t total, to_write;
+
+    for ( rc = 0, total = 0; total < size; pos += to_write, total += to_write )
+    {
+        /* current buffer */
+        KQueueFileBuffer *b = self -> b;
+
+        /* if we have a buffer, test for a write within bounds */
+        if ( self -> b != NULL )
+        {
+            /* an attempt to write first byte BEFORE
+               current buffer or BEYOND current contents
+               or AT current end while being full provokes
+               a flush of the current buffer */
+            if ( pos < b -> pos ||
+                 pos > b -> pos + b -> bytes ||
+                 pos == b -> pos + self -> bsize )
+            {
+                rc = KQueueFileFlush ( self, b );
+                if ( rc != 0 )
+                {   /* the background thread is probably gone */
+                    break;
+                }
+            }
+        }
+
+        /* if by now we don't have a buffer, allocate one */
+        if ( self -> b == NULL )
+        {
+            b = malloc ( sizeof * b - sizeof b -> data + self -> bsize );
+            if ( b == NULL )
+            {
+                rc = RC ( rcApp, rcFile, rcWriting, rcMemory, rcExhausted );
+                break;
+            }
+
+            self -> b = b;
+            b -> pos = pos/* + total*/;
+            b -> bytes = 0;
+            b -> rc = 0;
+#if _DEBUGGING
+            b -> align = 0;
+#endif
+        }
+
+        assert ( b != NULL );
+        assert ( b == self -> b );
+/*        assert ( pos >= b -> pos ); */
+        assert ( pos <= b -> pos + b -> bytes );
+        assert ( pos < b -> pos + self -> bsize );
+
+        /* write into the buffer */
+        to_write = size - total;
+        if ( b -> bytes + to_write > self -> bsize )
+            to_write = self -> bsize - b -> bytes;
+
+        memcpy ( & b -> data [ b -> bytes ], & ( ( const uint8_t* ) buffer ) [ total ], to_write );
+        b -> bytes += to_write;
+    }
+
+
+    * num_writ = total;
+    if ( total != 0 )
+        return 0;
+
+    return rc;
+}
+
+
+static KFile_vt_v1 KQueueFileRead_vt_v1 =
+{
+    /* version 1.1 */
+    1, 1,
+
+    /* v1.0 */
+    KQueueFileWhackRead,
+    KQueueFileGetSysFile,
+    KQueueFileRandomAccess,
+    KQueueFileSize,
+    KQueueFileSetSize,
+    KQueueFileRead,
+    KQueueFileNoWrite,
+
+    /* v1.1 */
+    KQueueFileType
+};
+
+
+static KFile_vt_v1 KQueueFileWrite_vt_v1 =
+{
+    /* version 1.1 */
+    1, 1,
+
+    /* v1.0 */
+    KQueueFileWhackWrite,
+    KQueueFileGetSysFile,
+    KQueueFileRandomAccess,
+    KQueueFileSize,
+    KQueueFileSetSize,
+    KQueueFileNoRead,
+    KQueueFileWrite,
+
+    /* v1.1 */
+    KQueueFileType
+};
+
+
+/* MakeRead
+ *  make a queue file for reading-ahead on background thread
+ *
+ *  when the file is created, a background thread is started
+ *  that begins reading from "src" at position "pos", into
+ *  buffers of size "buffer_size". each buffer is pushed into
+ *  a cross-thread queue where it is consumed by the reading
+ *  thread.
+ *
+ *  the background thread is throttled by queue capacity - determined
+ *  by "queue_bytes" and "block_size", such that if the queue is full,
+ *  the thread will sleep. the consumer thread is also throttled by the
+ *  queue in that it will sleep if the queue is empty with pending data.
+ *
+ *  the background thread will exit upon reaching end of file,
+ *  upon a permanent error, or if the queue is sealed by the consumer
+ *  thread.
+ *
+ *  when the file is collected in response to a release message,
+ *  the queue will be sealed against further inserts, pending buffers
+ *  will be discarded, the background thread will be joined, and
+ *  the source file will be released.
+ *
+ *  the intended usage is serial reading of the file. reads
+ *  may only progress forward, i.e. backing up is not permitted.
+ *
+ *  "qf" [ OUT ] - return parameter for queue file
+ *
+ *  "pos" [ IN ] - starting position for reads from "src".
+ *  NB - "src" must support being addressed at this position.
+ *
+ *  "src" [ IN ] - source file for read-ahead on background thread.
+ *  must have read permissions.
+ *
+ *  "queue_bytes" [ IN ] - the read-ahead limit of the background
+ *  thread, in bytes. this is the amount of data that will be queued
+ *  for the consumer thread before the bg thread sleeps.
+ *
+ *  "block_size" [ IN, DEFAULT ZERO ] - optional parameter giving
+ *  desired block size when reading from "src". this may be used
+ *  to tune reading for source data, e.g. 64K blocks for gzip.
+ */
+LIB_EXPORT rc_t CC KQueueFileMakeRead ( const KFile **qfp, uint64_t pos,
+    const KFile *src, size_t queue_bytes, size_t block_size, uint32_t timeout_ms )
+{
+    rc_t rc;
+
+    if ( qfp == NULL )
+        rc = RC ( rcApp, rcFile, rcConstructing, rcParam, rcNull );
+    else
+    {
+        if ( src == NULL )
+            rc = RC ( rcApp, rcFile, rcConstructing, rcFile, rcNull );
+        else if ( ! src -> read_enabled )
+        {
+            if ( src -> write_enabled )
+                rc = RC ( rcApp, rcFile, rcConstructing, rcFile, rcWriteonly );
+            else
+                rc = RC ( rcApp, rcFile, rcConstructing, rcFile, rcNoPerm );
+        }
+        else if ( pos == 0 || ( rc = KFileRandomAccess ( src ) ) == 0 )
+        {
+            KQueueFile *qf = malloc ( sizeof * qf );
+            if ( qf == NULL )
+                rc = RC ( rcApp, rcFile, rcConstructing, rcMemory, rcExhausted );
+            else
+            {
+                rc = KFileInit ( & qf -> dad, ( const KFile_vt* ) & KQueueFileRead_vt_v1, "KQueueFile", "no-name", true, false );
+                if ( rc == 0 )
+                {
+                    qf -> f = ( KFile* ) src;
+                    rc = KFileAddRef ( src );
+                    if ( rc == 0 )
+                    {
+                        uint32_t capacity;
+
+                        /* zero block size means default */
+                        if ( block_size == 0 )
+                            block_size = DEFAULT_BLOCK_SIZE;
+
+                        /* queue capacity is expressed in bytes originally
+                           translate to buffer count */
+                        capacity = ( queue_bytes + block_size - 1 ) / block_size;
+                        if ( capacity == 0 )
+                            capacity = 1;
+
+                        /* actual capacity will be a power of 2 */
+                        rc = KQueueMake ( & qf -> q, capacity );
+                        if ( rc == 0 )
+                        {
+                            /* capture current size if supported */
+                            qf -> rc_from_size_on_open = KFileSize ( src, & qf -> apparent_size );
+
+                            /* starting position for read */
+                            qf -> start_pos = pos;
+
+                            /* requested buffer size */
+                            qf -> b = NULL;
+                            qf -> bsize = block_size;
+
+                            /* timeout */
+                            qf -> timeout_ms = timeout_ms == 0 ? DEFAULT_TIMEOUT_MS : timeout_ms;
+
+                            /* finally, start the background thread */
+                            rc = KThreadMake ( & qf -> t, KQueueFileRunRead, qf );
+                            if ( rc == 0 )
+                            {
+                                * qfp = & qf -> dad;
+                                return 0;
+                            }
+
+                            KQueueRelease ( qf -> q );
+                        }
+
+                        KFileRelease ( qf -> f );
+                    }
+                }
+
+                free ( qf );
+            }
+        }
+
+        * qfp = NULL;
+    }
+
+    return rc;
+}
+
+
+/* MakeWrite
+ *  make a queue file for writing-behind on background thread
+ *
+ *  when the file is created, a background thread is started that
+ *  waits for buffers to appear in the cross-thread queue. as the producer
+ *  thread writes, data are accumulated into buffers which are pushed
+ *  into the queue as they fill, and written in turn on the bg thread.
+ *
+ *  the producer thread is throttled by queue capacity - determined by
+ *  "queue_bytes" and "block_size", such that if the queue is full,
+ *  the thread will sleep. the background thread is also throttled by
+ *  the queue in that it will sleep if the queue is empty with pending
+ *  data.
+ *
+ *  the background thread will exit upon a permanent error, or if the
+ *  queue is sealed by the producer thread.
+ *
+ *  when the file is collected in response to a release message,
+ *  the queue will be sealed against further inserts, pending buffers
+ *  will be written, the background thread will be joined, and
+ *  the source file will be released.
+ *
+ *  the intended usage is serial writing of the file. random writes
+ *  will be accepted, but may reduce the queue efficiency.
+ *
+ *  "qf" [ OUT ] - return parameter for queue file
+ *
+ *  "dst" [ IN ] - destination file for write-behind on background thread.
+ *  must have write permissions.
+ *
+ *  "queue_bytes" [ IN ] - the write-behind limit of the producer
+ *  thread, in bytes. this is the amount of data that will be queued
+ *  for the background thread before the producer thread sleeps.
+ *
+ *  "block_size" [ IN, DEFAULT ZERO ] - optional parameter giving
+ *  desired block size when writing to "dst". this may be used
+ *  to tune writing for source data, e.g. 64K blocks for gzip.
+ */
+LIB_EXPORT rc_t CC KQueueFileMakeWrite ( KFile **qfp,
+    KFile *dst, size_t queue_bytes, size_t block_size, uint32_t timeout_ms )
+{
+    rc_t rc;
+
+    if ( qfp == NULL )
+        rc = RC ( rcApp, rcFile, rcConstructing, rcParam, rcNull );
+    else
+    {
+        if ( dst == NULL )
+            rc = RC ( rcApp, rcFile, rcConstructing, rcFile, rcNull );
+        else if ( ! dst -> write_enabled )
+        {
+            if ( dst -> read_enabled )
+                rc = RC ( rcApp, rcFile, rcConstructing, rcFile, rcReadonly );
+            else
+                rc = RC ( rcApp, rcFile, rcConstructing, rcFile, rcNoPerm );
+        }
+        else
+        {
+            KQueueFile *qf = malloc ( sizeof * qf );
+            if ( qf == NULL )
+                rc = RC ( rcApp, rcFile, rcConstructing, rcMemory, rcExhausted );
+            else
+            {
+                rc = KFileInit ( & qf -> dad, ( const KFile_vt* ) & KQueueFileWrite_vt_v1, "KQueueFile", "no-name", false, true );
+                if ( rc == 0 )
+                {
+                    qf -> f = dst;
+                    rc = KFileAddRef ( dst );
+                    if ( rc == 0 )
+                    {
+                        uint32_t capacity;
+
+                        /* zero block size means default */
+                        if ( block_size == 0 )
+                            block_size = DEFAULT_BLOCK_SIZE;
+
+                        /* queue capacity is expressed in bytes originally
+                           translate to buffer count */
+                        capacity = ( queue_bytes + block_size - 1 ) / block_size;
+                        if ( capacity == 0 )
+                            capacity = 1;
+
+                        /* actual capacity will be a power of 2 */
+                        rc = KQueueMake ( & qf -> q, capacity );
+                        if ( rc == 0 )
+                        {
+                            /* capture current size if supported */
+                            qf -> rc_from_size_on_open = KFileSize ( dst, & qf -> apparent_size );
+
+                            /* starting position not used */
+                            qf -> start_pos = 0;
+
+                            /* requested buffer size */
+                            qf -> b = NULL;
+                            qf -> bsize = block_size;
+
+                            /* timeout */
+                            qf -> timeout_ms = timeout_ms == 0 ? DEFAULT_TIMEOUT_MS : timeout_ms;
+
+                            /* finally, start the background thread */
+                            rc = KThreadMake ( & qf -> t, KQueueFileRunWrite, qf );
+                            if ( rc == 0 )
+                            {
+                                * qfp = & qf -> dad;
+                                return 0;
+                            }
+
+                            KQueueRelease ( qf -> q );
+                        }
+
+                        KFileRelease ( qf -> f );
+                    }
+                }
+
+                free ( qf );
+            }
+        }
+
+        * qfp = NULL;
+    }
+
+    return rc;
+}
diff --git a/libs/kapp/tokenizer.c b/libs/kapp/tokenizer.c
new file mode 100644
index 0000000..6bee3ed
--- /dev/null
+++ b/libs/kapp/tokenizer.c
@@ -0,0 +1,525 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kapp/extern.h>
+#include <sysalloc.h>
+
+#include <kapp/args.h>
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/text.h>
+
+#include <vfs/path.h>
+#include <vfs/manager.h>
+#include <kfs/file.h>
+
+#include <os-native.h>
+
+#include <string.h>
+#include <stdlib.h>
+
+
+#define ARGV_INC 10
+#define TOKEN_INC 512
+
+/*
+   strtok() not used, because we tokenize the content of a file!
+   we do that in chunks of 4096 char's
+   a token can span multiple chunks!
+   we also support quoting and escaping ( a la bash )
+*/
+
+typedef struct tokenzr
+{
+    int * argc;
+    char *** argv;
+    char *token;
+    size_t allocated;
+    size_t used;
+    uint32_t state;
+    uint32_t nargs;
+    char escape[ 3 ];
+    char n_escape;
+    char m_escape;
+} tokenzr;
+
+
+static rc_t make_tokenzr( tokenzr **t, int * argc, char *** argv )
+{
+    rc_t rc = 0;
+    if ( t == NULL )
+    {
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcSelf, rcNull );
+    }
+    else
+    {
+        tokenzr *t1 = malloc( sizeof *t1 );
+        if ( t1 == NULL )
+        {
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        }
+        else
+        {
+            t1->token = malloc( TOKEN_INC );
+            if ( t1->token == NULL )
+            {
+                rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+            }
+            else
+            {
+                t1->allocated = TOKEN_INC;
+                t1->used = 0;
+                t1->state = 0;
+                t1->nargs = 0;
+                t1->argc = argc;
+                t1->argv = argv;
+                t1->n_escape = 0;
+                t1->m_escape = 0;
+            }
+        }
+        if ( rc == 0 )
+        {
+            *t = t1;
+        }
+    }
+    return rc;
+}
+
+
+static void free_tokenzr( tokenzr *t )
+{
+    if ( t != NULL )
+    {
+        if ( t->token != NULL )
+            free( t->token );
+        free( t );
+    }
+}
+
+
+static rc_t expand_argv( tokenzr *t )
+{
+    rc_t rc = 0;
+    char ** pargv = *(t->argv);
+
+    if ( pargv == NULL )
+    {
+        pargv = malloc( ARGV_INC * ( sizeof pargv[ 0 ] ) );
+        if ( pargv != NULL )
+        {
+            t->nargs = ARGV_INC;
+            ( *(t->argc) ) = 0;
+        }
+        else
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    }
+    else
+    {
+        if ( ( *(t->argc) ) >= t->nargs )
+        {
+            char ** pargv1 = realloc( pargv, ( ( t->nargs + ARGV_INC ) * ( sizeof pargv[ 0 ] ) ) );
+            if ( pargv1 != NULL )
+            {
+                t->nargs += ARGV_INC;
+                pargv = pargv1;
+            }
+            else
+            {
+                rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+                free( pargv );
+                pargv = NULL;
+            }
+        }
+    }
+    if ( rc == 0 )
+    {
+        *(t->argv) =  pargv;
+    }
+    return rc;
+}
+
+
+static rc_t add_string_to_argv( tokenzr *t, const char * str, size_t len )
+{
+    rc_t rc = expand_argv( t );
+    if ( rc == 0 )
+    {
+        int argc = *(t->argc);
+        char ** pargv = *(t->argv);
+
+        pargv[ argc ] = string_dup ( str, len );
+        if ( pargv[ argc ] == NULL )
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        else
+        {
+            ( *(t->argc) )++;
+            *(t->argv) =  pargv;
+            t->used = 0;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t add_token_to_argv( tokenzr *t )
+{
+    return add_string_to_argv( t, t->token, t->used );
+}
+
+
+static rc_t add_buffer_to_token( tokenzr *t, const char *buffer, size_t buflen )
+{
+    rc_t rc = 0;
+    if ( t->used + buflen > t->allocated )
+    {
+        size_t new_size = t->used + buflen + TOKEN_INC;
+        char * temp = realloc( t->token, new_size );
+        if ( temp == NULL )
+        {
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        }
+        else
+        {
+            t->token = temp;
+            t->allocated = new_size;
+        }
+    }
+    if ( rc == 0 )
+    {
+        memcpy( t->token + t->used, buffer, buflen );
+        t->used += buflen;
+    }
+    return rc;
+}
+
+
+/* this is the 'normal' state, that the buffer is divided into tokens by white-space */
+const static char delim0[] = " \r\n\f\t\v\\\"";
+static rc_t tokenize_state0( tokenzr *t, bool *done, char ** ptr, const char *buffer, size_t buflen )
+{
+    rc_t rc;
+    char * s = strpbrk ( *ptr, delim0 );
+    if ( s == NULL )
+    {
+        /* delimiting char not found!
+            ---> add everything to the tokenbuffer */
+        size_t to_add = buflen - ( *ptr - buffer );
+        rc = add_buffer_to_token( t, *ptr, to_add );
+        *done = true;
+    }
+    else
+    {
+        /* delimiting char found!
+            ---> add everything from ptr to s to the tokenbuffer
+            ---> then add token to argv
+            ---> then clear token */
+        rc = add_buffer_to_token( t, *ptr, s - *ptr );
+        if ( rc == 0 )
+        {
+            if ( t->used > 0 && *s != '\\' )
+                rc = add_token_to_argv( t );
+            *ptr = s + 1;
+            *done = ( *ptr >= buffer + buflen );
+            switch( *s )
+            {
+                case '"'  : t->state =  1; break;
+                case '\\' : t->state =  2; break;
+            }
+        }
+    }
+    return rc;
+}
+
+
+/* this state, provides 'quoting' ( prevents tokenizing by putting quotes "" around strings
+    which would be otherwise separated by whitespace ) */
+const static char delim1[] = "\"";
+static rc_t tokenize_state1( tokenzr *t, bool *done, char ** ptr, const char *buffer, size_t buflen )
+{
+    rc_t rc;
+    char * s = strpbrk ( *ptr, delim1 );
+    if ( s == NULL )
+    {
+        /* delimiting char not found!
+            ---> add everything to the tokenbuffer */
+        size_t to_add = buflen - ( *ptr - buffer );
+        rc = add_buffer_to_token( t, *ptr, to_add );
+        *done = true;
+    }
+    else
+    {
+        /* delimiting char found!
+            ---> add everything from ptr to s to the tokenbuffer
+            ---> then add token to argv
+            ---> then clear token */
+        rc = add_buffer_to_token( t, *ptr, s - *ptr );
+        if ( rc == 0 )
+        {
+            if ( t->used > 0 )
+                rc = add_token_to_argv( t );
+            *ptr = s + 1;
+            *done = ( *ptr >= buffer + buflen );
+            if ( *s == '"' )
+                t->state = 0;
+        }
+    }
+    return rc;
+}
+
+
+/* this state, provides 'escaping' ( \nnn or \xHH or \' or \" ) */
+static rc_t tokenize_state2( tokenzr *t, bool *done, char ** ptr, const char *buffer, size_t buflen )
+{
+    rc_t rc = 0;
+    char c = **ptr;
+    switch( c )
+    {
+        case '\\' : /* no break intended ! */
+        case '\'' :
+        case '\"' : rc = add_buffer_to_token( t, (*ptr)++, 1 );
+                    break;
+
+        case 't'  : rc = add_buffer_to_token( t, "\t", 1 );
+                    (*ptr)++;
+                    break;
+        case 'n'  : rc = add_buffer_to_token( t, "\n", 1 );
+                    (*ptr)++;
+                    break;
+        case 'r'  : rc = add_buffer_to_token( t, "\r", 1 );
+                    (*ptr)++;
+                    break;
+
+    }
+    t->state = 0;
+    *done = ( *ptr >= buffer + buflen );
+    return rc;
+}
+
+
+static rc_t tokenize_buffer( tokenzr *t, const char *buffer, size_t buflen )
+{
+    rc_t rc = 0;
+    char * ptr = ( char * ) buffer;
+    bool done = false;
+    while ( rc == 0 && !done )
+        switch( t->state )
+        {
+            case 0 : rc = tokenize_state0( t, &done, &ptr, buffer, buflen ); break;
+            case 1 : rc = tokenize_state1( t, &done, &ptr, buffer, buflen ); break;
+            case 2 : rc = tokenize_state2( t, &done, &ptr, buffer, buflen ); break;
+        }
+    return rc;
+}
+
+
+static rc_t tokenize_file_and_progname_into_argv( const char * filename, const char * progname,
+                                                  int * argc, char *** argv )
+{
+    rc_t rc2, rc = 0;
+    VFSManager *vfs_mgr;
+
+    ( *argv ) = NULL;
+    ( *argc ) = 0;
+    rc = VFSManagerMake ( &vfs_mgr );
+    if ( rc != 0 )
+        LOGERR( klogInt, rc, "VFSManagerMake() failed" );
+    else
+    {
+        VPath * vfs_path;
+        rc = VPathMake ( &vfs_path, filename );
+        if ( rc != 0 )
+            LOGERR( klogInt, rc, "VPathMake() failed" );
+        else
+        {
+            struct KFile const *my_file;
+            rc = VFSManagerOpenFileRead ( vfs_mgr, &my_file, vfs_path );
+            if ( rc != 0 )
+                LOGERR( klogInt, rc, "VFSManagerOpenFileRead() failed" );
+            else
+            {
+                tokenzr *t;
+                uint64_t pos = 0;
+                char buffer[ 4096 + 1 ];
+                size_t num_read;
+
+                rc = make_tokenzr( &t, argc, argv );
+                if ( rc != 0 )
+                    LOGERR( klogInt, rc, "make_tokenzr() failed" );
+                else
+                {
+                    if ( progname != NULL )
+                        rc = add_string_to_argv( t, progname, string_size( progname ) );
+
+                    if ( rc == 0 )
+                    {
+                        do
+                        {
+                            rc = KFileRead ( my_file, pos, buffer, ( sizeof buffer ) - 1, &num_read );
+                            if ( rc != 0 )
+                                LOGERR( klogInt, rc, "KFileRead() failed" );
+                            else if ( num_read > 0 )
+                            {
+                                buffer[ num_read ]  = 0;
+                                rc = tokenize_buffer( t, buffer, num_read );
+                                if ( rc != 0 )
+                                    LOGERR( klogInt, rc, "tokenize_buffer() failed" );
+                                pos += num_read;
+                            }
+                        } while ( rc == 0 && num_read > 0 );
+                    }
+
+                    if ( rc == 0 && t->used > 0 )
+                    {
+                        rc = add_token_to_argv( t );
+                        if ( rc != 0 )
+                            LOGERR( klogInt, rc, "add_token_to_argv() failed" );
+                    }
+                    free_tokenzr( t );
+                }
+                rc2 = KFileRelease ( my_file );
+                if ( rc2 != 0 )
+                    LOGERR( klogInt, rc2, "KFileRelease() failed" );
+            }
+            rc2 = VPathRelease ( vfs_path );
+            if ( rc2 != 0 )
+                LOGERR( klogInt, rc2, "VPathRelease() failed" );
+        }
+        rc2 = VFSManagerRelease ( vfs_mgr );
+        if ( rc2 != 0 )
+            LOGERR( klogInt, rc2, "VFSManagerRelease() failed" );
+    }
+    return rc;
+}
+
+
+rc_t CC Args_tokenize_file_into_argv( const char * filename, int * argc, char *** argv )
+{
+    return tokenize_file_and_progname_into_argv( filename, NULL, argc, argv );
+}
+
+
+rc_t CC Args_tokenize_file_and_progname_into_argv( const char * filename, const char * progname,
+                                                               int * argc, char *** argv )
+{
+    return tokenize_file_and_progname_into_argv( filename, progname, argc, argv );
+}
+
+
+void CC Args_free_token_argv( int argc, char * argv[] )
+{
+    if ( argv != NULL )
+    {
+        int i;
+        for ( i = 0; i < argc; ++i )
+            free( argv[ i ] );
+        free( argv );
+    }
+}
+
+
+static int sized_str_cmp( const char *a, const char *b )
+{
+    size_t asize = string_size ( a );
+    size_t bsize = string_size ( b );
+    return strcase_cmp ( a, asize, b, bsize, ( asize > bsize ) ? asize : bsize );
+}
+
+
+/* get's the filename following a file_option - parameter into the file-name-buffer */
+rc_t CC Args_find_option_in_argv( int argc, char * argv[],
+                                              const char * option_name,
+                                              char * option, size_t option_len )
+{
+    rc_t rc = 0;
+    int i, opt_idx;
+
+    if ( option == NULL )
+        return RC( rcRuntime, rcArgv, rcConstructing, rcParam, rcNull );
+
+    option[ 0 ] = 0;
+
+    if ( argv == NULL || argc < 1 )
+        return RC( rcRuntime, rcArgv, rcConstructing, rcSelf, rcNull );
+    if ( option_name == NULL || option_len == 0 )
+        return RC( rcRuntime, rcArgv, rcConstructing, rcParam, rcNull );
+
+    opt_idx = -1;
+    for ( i = 0; i < argc && ( option[ 0 ] == 0 ); ++i )
+    {
+        if ( sized_str_cmp( (const char *)argv[i], option_name ) == 0 )
+        {
+                opt_idx = ( i + 1 );
+        }
+        else if ( i == opt_idx )
+        {
+            string_copy( option, option_len, argv[i], string_size( argv[i] ) );
+        }
+    }
+    if ( option[ 0 ] == 0 )
+        rc = RC( rcRuntime, rcArgv, rcConstructing, rcParam, rcNotFound );
+    return rc;
+}
+
+
+rc_t CC Args_parse_inf_file( Args * args, const char * file_option )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, file_option, &count );
+    if ( rc != 0 )
+        LOGERR( klogInt, rc, "ArgsOptionCount() failed" );
+    else if ( count > 0 )
+    {
+        uint32_t count2 = 0;
+        do
+        {
+            uint32_t idx;
+            for ( idx = count2; idx < count && rc == 0; ++idx )
+            {
+                const char *filename;
+                rc = ArgsOptionValue( args, file_option, idx, &filename );
+                if ( rc != 0 )
+                    LOGERR( klogInt, rc, "ArgsOptionValue() failed" );
+                else if ( filename != NULL )
+                {
+                    int argc;
+                    char ** argv;
+                    rc = Args_tokenize_file_into_argv( filename, &argc, &argv );
+                    if ( rc == 0 && argv != NULL && argc > 0 )
+                    {
+                        rc = ArgsParse ( args, argc, argv );
+                        Args_free_token_argv( argc, argv );
+                    }
+                }
+            }
+            count2 = count;
+            rc = ArgsOptionCount( args, file_option, &count );
+            if ( rc != 0 )
+                LOGERR( klogInt, rc, "ArgsOptionCount() failed" );
+        } while ( rc == 0 && count > count2 );
+    }
+    return rc;
+}
diff --git a/libs/kapp/unix/sysmain.c b/libs/kapp/unix/sysmain.c
index fb247f1..cbeb87e 100644
--- a/libs/kapp/unix/sysmain.c
+++ b/libs/kapp/unix/sysmain.c
@@ -30,6 +30,7 @@
 #include <klib/log.h>
 #include <klib/debug.h>
 #include <klib/status.h>
+#include <klib/report.h>
 #include <klib/rc.h>
 #include <atomic32.h>
 
@@ -42,6 +43,10 @@
 #include <errno.h>
 #include <assert.h>
 
+#if ! _DEBUGGING && ! defined CATCH_SIGSEGV
+#define CATCH_SIGSEGV 1
+#endif
+
 /*--------------------------------------------------------------------------
  * Main
  */
@@ -66,6 +71,8 @@ rc_t Quitting ( void )
  */
 rc_t SignalQuit ( void )
 {
+    ReportSilence ();
+
     if ( kill ( 0, SIGTERM ) != 0 ) switch ( errno )
     {
     case EINVAL:
@@ -134,6 +141,8 @@ void SigQuitHandler ( int sig )
 {
     const char *msg;
 
+    ReportSilence ();
+
     atomic32_inc ( & quitting );
     switch ( sig )
     {
@@ -156,6 +165,7 @@ void SigQuitHandler ( int sig )
 
 /* SigSegvHandler
  */
+#if CATCH_SIGSEGV
 static
 void SigSegvHandler ( int sig )
 {
@@ -164,6 +174,7 @@ void SigSegvHandler ( int sig )
     abort ();
     exit ( 1 );
 }
+#endif
 
 /* main
  *  Unix specific main entrypoint
@@ -179,7 +190,9 @@ int main ( int argc, char *argv [] )
         { SigHupHandler, SIGHUP },
         { SigQuitHandler, SIGINT },
         { SigQuitHandler, SIGQUIT },
+#if CATCH_SIGSEGV
         { SigSegvHandler, SIGSEGV },
+#endif
         { SigQuitHandler, SIGTERM }
     };
 
diff --git a/libs/kapp/win/sysmain.c b/libs/kapp/win/sysmain.c
index 3d48b67..e8f3bcc 100644
--- a/libs/kapp/win/sysmain.c
+++ b/libs/kapp/win/sysmain.c
@@ -107,6 +107,21 @@ rc_t CC SignalNoHup ( void )
     return 0;
 }
 
+
+BOOL CC Our_HandlerRoutine( DWORD dwCtrlType )
+{
+    BOOL res = FALSE;
+    switch( dwCtrlType )
+    {
+    case CTRL_C_EVENT : ReportSilence ();
+                        atomic32_inc ( & quitting );
+                        res = TRUE;
+                        break;
+    }
+    return res;
+}
+
+
 /* main
  *  Windows specific main entrypoint
  */
@@ -115,6 +130,8 @@ int main2 ( int argc, char *argv [] )
 {
     rc_t rc;
 
+    SetConsoleCtrlHandler( ( PHANDLER_ROUTINE ) Our_HandlerRoutine, TRUE );
+
     /* run this guy */
     rc = KMane ( argc, argv );
 
@@ -212,6 +229,7 @@ char *rewrite_arg ( const wchar_t *arg )
     return utf8;
 }
 
+
 int __cdecl wmain ( int argc, wchar_t *wargv [], wchar_t *envp [] )
 {
     char **argv;
diff --git a/libs/kdb/Makefile b/libs/kdb/Makefile
index 03f51b2..2b941a9 100644
--- a/libs/kdb/Makefile
+++ b/libs/kdb/Makefile
@@ -43,19 +43,18 @@ include $(TOP)/build/Makefile.env
 #-------------------------------------------------------------------------------
 # outer targets
 #
-vers-includes: $(addsuffix .vers.h,$(ALL_LIBS))
-
-all std: makedirs vers-includes
+all std: vers-includes
 	@ $(MAKE_CMD) $(TARGDIR)/std
 
-$(INT_LIBS): makedirs vers-includes
+$(INT_LIBS): vers-includes
 	@ $(MAKE_CMD) $(ILIBDIR)/$@
 
-$(EXT_LIBS): makedirs vers-includes
+$(EXT_LIBS): vers-includes
 	@ $(MAKE_CMD) $(LIBDIR)/$@
 
 .PHONY: all std $(ALL_LIBS) $(ALL_DEFS)
 
+
 #-------------------------------------------------------------------------------
 # std
 #
@@ -66,6 +65,13 @@ $(TARGDIR)/std: \
 .PHONY: $(TARGDIR)/std
 
 #-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_LIBS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
 # clean
 #
 clean: stdclean
@@ -122,6 +128,8 @@ KDB_OBJ = \
 	$(addsuffix .$(LOBX),$(KDB_SRC))
 
 KDB_LIB = \
+	-dvfs \
+	-dkrypto \
 	-dkfs \
 	-dklib
 
@@ -164,6 +172,8 @@ WKDB_OBJ = \
 	$(addsuffix .$(LOBX),$(WKDB_SRC))
 
 WKDB_LIB = \
+	-dvfs \
+	-dkrypto \
 	-dkfs \
 	-dklib
 
diff --git a/libs/kdb/btree.c b/libs/kdb/btree.c
index bfaf1f0..f3a11f0 100644
--- a/libs/kdb/btree.c
+++ b/libs/kdb/btree.c
@@ -805,7 +805,9 @@ rc_t KBTreeReadHeader ( KBTreeHdr *hdr, const KFile *f )
         if ( eof < sizeof * hdr )
             return RC ( rcDB, rcTree, rcConstructing, rcData, rcCorrupt );
 
-        rc = KFileRead ( f, eof - sizeof * hdr, hdr, sizeof * hdr, & num_read );
+        rc = KFileReadAll ( f, eof - sizeof * hdr, hdr, sizeof * hdr, & num_read );
+        if ( rc == 0 && num_read != sizeof * hdr )
+            rc = RC ( rcDB, rcTree, rcConstructing, rcData, rcInsufficient );
         if ( rc == 0 )
         {
             if ( hdr -> endian != eByteOrderTag )
@@ -937,6 +939,8 @@ typedef struct KBTreeBranchNode_v2 KBTreeBranchNode;
 
 #if _DEBUGGING 
 #define VALIDATE_SEARCH_WINDOW 0
+#endif
+
 #if VALIDATE_SEARCH_WINDOW
 static
 bool validate_search_window(KBTreeSrchWindow *win)
@@ -951,7 +955,7 @@ bool validate_search_window(KBTreeSrchWindow *win)
 #else
 #define validate_search_window(A) true
 #endif
-#endif
+
 /* Whack
  */
 static
@@ -1092,7 +1096,7 @@ LIB_EXPORT rc_t CC KBTreeMakeRead ( const KBTree **btp,
 #if BTREE_KEY2ID
 LIB_EXPORT rc_t CC KBTreeMakeUpdate ( KBTree **btp, KFile *backing,
     size_t climit, bool write_through, KBTreeKeyType type,
-    size_t min_key_size, size_t max_key_size,
+    size_t min_key_size, size_t max_key_size, size_t id_size,
     KBTreeCompareFunc cmp )
 #else
 LIB_EXPORT rc_t CC KBTreeMakeUpdate ( KBTree **btp, KFile *backing,
@@ -1109,9 +1113,7 @@ LIB_EXPORT rc_t CC KBTreeMakeUpdate ( KBTree **btp, KFile *backing,
         rc = RC ( rcDB, rcTree, rcConstructing, rcParam, rcNull );
     else
     {
-        if ( backing == NULL )
-            rc = RC ( rcDB, rcTree, rcConstructing, rcFile, rcNull );
-        else if ( type >= kbtLastDefined )
+        if ( type >= kbtLastDefined )
             rc = RC ( rcDB, rcTree, rcConstructing, rcType, rcUnrecognized );
         else if ( min_key_size == 0 )
             rc = RC ( rcDB, rcTree, rcConstructing, rcParam, rcInvalid );
@@ -1119,15 +1121,18 @@ LIB_EXPORT rc_t CC KBTreeMakeUpdate ( KBTree **btp, KFile *backing,
             rc = RC ( rcDB, rcTree, rcConstructing, rcParam, rcExcessive );
         else if ( min_key_size > max_key_size )
             rc = RC ( rcDB, rcTree, rcConstructing, rcParam, rcInconsistent );
+#if BTREE_KEY2ID && ! BTREE_KEY2ID64
+        else if ( id_size != sizeof ( uint32_t ) )
+            rc = RC ( rcDB, rcTree, rcConstructing, rcParam, rcInvalid );
+#endif
         else
         {
-            KBTree *bt = malloc ( sizeof * bt );
+            KBTree *bt = calloc ( 1,sizeof * bt );
             if ( bt == NULL )
                 rc = RC ( rcDB, rcTree, rcConstructing, rcMemory, rcExhausted );
             else
             {
-                rc = KBTreeReadHeader ( & bt -> hdr, backing );
-                if ( rc == 0 || GetRCState ( rc ) == rcNotFound )
+                if ( backing == NULL || ( rc = KBTreeReadHeader ( & bt -> hdr, backing )) == 0 || GetRCState ( rc ) == rcNotFound )
                 {
                     /* detect empty file */
                     if ( bt -> hdr . version == 0 )
@@ -1170,7 +1175,7 @@ LIB_EXPORT rc_t CC KBTreeMakeUpdate ( KBTree **btp, KFile *backing,
 
                     if ( rc == 0 )
                     {
-                        rc = KFileAddRef ( backing );
+                        if(backing) rc = KFileAddRef ( backing );
                         if ( rc == 0 )
                         {
                             /* create page file */
@@ -1190,7 +1195,7 @@ LIB_EXPORT rc_t CC KBTreeMakeUpdate ( KBTree **btp, KFile *backing,
                                 return 0;
                             }
 
-                            KFileRelease ( backing );
+                            if(backing) KFileRelease ( backing );
                         }
                     }
                 }
@@ -1458,7 +1463,7 @@ rc_t branch_find ( const KBTree *self, const KPage *page,
 
 
 #if BTREE_KEY2ID
-LIB_EXPORT rc_t CC KBTreeFind ( const KBTree *self, uint32_t *id,
+LIB_EXPORT rc_t CC KBTreeFind ( const KBTree *self, uint64_t *id,
     const void *key, size_t key_size )
 #else
 LIB_EXPORT rc_t CC KBTreeFind ( const KBTree *self, KBTreeValue *val,
@@ -1490,12 +1495,20 @@ LIB_EXPORT rc_t CC KBTreeFind ( const KBTree *self, KBTreeValue *val,
             rc = KPageFileGet ( self -> pgfile, & page, self -> hdr . root >> 1 );
             if ( rc == 0 )
             {
+#if BTREE_KEY2ID && ! BTREE_KEY2ID64
+                uint32_t id32;
+#endif
                 rc = ( ( ( self -> hdr . root & 1 ) == 0 ) ? leaf_find : branch_find )
-#if BTREE_KEY2ID
+#if BTREE_KEY2ID64
                     ( self, page, id, key, key_size );
+#elif BTREE_KEY2ID
+                    ( self, page, & id32, key, key_size );
 #else
                     ( self, page, val, key, key_size );
 #endif
+#if BTREE_KEY2ID && ! BTREE_KEY2ID64
+                    * id = id32;
+#endif
                 
                 KPageRelease ( page );
             }
@@ -2704,7 +2717,7 @@ rc_t branch_entry ( KBTree *self, KBTreeEntryData *pb, KPage *page, KBTreeSplit
 
 
 #if BTREE_KEY2ID
-LIB_EXPORT rc_t CC KBTreeEntry ( KBTree *self, uint32_t *id,
+LIB_EXPORT rc_t CC KBTreeEntry ( KBTree *self, uint64_t *id,
     bool *was_inserted, const void *key, size_t key_size )
 #else
 LIB_EXPORT rc_t CC KBTreeEntry ( KBTree *self,
@@ -2741,11 +2754,20 @@ LIB_EXPORT rc_t CC KBTreeEntry ( KBTree *self,
             bool leaf;
             KPage *page;
 
+#if BTREE_KEY2ID && ! BTREE_KEY2ID64
+            /* TEMPORARY
+               until full 64-bit ids are supported
+            */
+            uint32_t id32 = ( uint32_t ) * id;
+#endif
+
             /* package the entry params into a block */
             KBTreeEntryData pb;
             pb . self = self;
-#if BTREE_KEY2ID
+#if BTREE_KEY2ID64
             pb . id = id;
+#elif BTREE_KEY2ID
+            pb . id = & id32;
 #else
             pb . val = val;
             pb . alloc_size = alloc_size;
@@ -2779,6 +2801,9 @@ LIB_EXPORT rc_t CC KBTreeEntry ( KBTree *self,
                     leaf_entry ( self, & pb, page, & split ):
                     branch_entry ( self, & pb, page, & split );
 
+#if BTREE_KEY2ID && ! BTREE_KEY2ID64
+                * id = id32;
+#endif
                 if ( rc != 0 )
                 {
                     /* detect split */
@@ -2806,7 +2831,7 @@ LIB_EXPORT rc_t CC KBTreeEntry ( KBTree *self,
                                 node -> ltrans = split . left;
                                 node -> ord [ 0 ] . trans = split . right;
                                 node -> count = 1;
-				assert ( split . left < 10000 && split . right < 10000);
+/* 				assert ( split . left < 10000 && split . right < 10000); */
                                 /*** init search windows ***/
                                 q=(split.ksize>0)? *(uint8_t*)split.key:0;
 				node -> win[q].lower = 0;
@@ -2867,7 +2892,7 @@ LIB_EXPORT rc_t CC KBTreeEntry ( KBTree *self,
 #if BTREE_KEY2ID
 static
 rc_t invoke_foreach_func ( const KBTree *self, const void *cnode, const void *ordp,
-    void ( CC * f ) ( const void *key, size_t key_size, uint32_t id, void *data ), void *data )
+    void ( CC * f ) ( const void *key, size_t key_size, uint64_t id, void *data ), void *data )
 #else
 static
 rc_t invoke_foreach_func ( const KBTree *self, const void *cnode, const void *ordp,
@@ -2903,8 +2928,8 @@ rc_t invoke_foreach_func ( const KBTree *self, const void *cnode, const void *or
 
 #if BTREE_KEY2ID
 static
-rc_t leaf_foreach ( const KBTree *self, bool reverse, uint32_t nid,
-    void ( CC * f ) ( const void *key, size_t key_size, uint32_t id, void *data ), void *data )
+rc_t leaf_foreach ( const KBTree *self, bool reverse, uint64_t nid,
+    void ( CC * f ) ( const void *key, size_t key_size, uint64_t id, void *data ), void *data )
 #else
 static
 rc_t leaf_foreach ( const KBTree *self, bool reverse, uint32_t nid,
@@ -2942,8 +2967,8 @@ rc_t leaf_foreach ( const KBTree *self, bool reverse, uint32_t nid,
 
 #if BTREE_KEY2ID
 static
-rc_t branch_foreach ( const KBTree *self, bool reverse, uint32_t nid,
-    void ( CC * f ) ( const void *key, size_t key_size, uint32_t id, void *data ), void *data )
+rc_t branch_foreach ( const KBTree *self, bool reverse, uint64_t nid,
+    void ( CC * f ) ( const void *key, size_t key_size, uint64_t id, void *data ), void *data )
 #else
 static
 rc_t branch_foreach ( const KBTree *self, bool reverse, uint32_t nid,
@@ -3007,7 +3032,7 @@ rc_t branch_foreach ( const KBTree *self, bool reverse, uint32_t nid,
 
 #if BTREE_KEY2ID
 LIB_EXPORT rc_t CC KBTreeForEach ( const KBTree *self, bool reverse,
-    void ( CC * f ) ( const void *key, size_t key_size, uint32_t id, void *data ), void *data )
+    void ( CC * f ) ( const void *key, size_t key_size, uint64_t id, void *data ), void *data )
 #else
 LIB_EXPORT rc_t CC KBTreeForEach ( const KBTree *self, bool reverse,
     void ( CC * f ) ( const void *key, size_t key_size, KBTreeValue *val, void *data ), void *data )
diff --git a/libs/kdb/coldata.c b/libs/kdb/coldata.c
index 427cfc3..8434b7f 100644
--- a/libs/kdb/coldata.c
+++ b/libs/kdb/coldata.c
@@ -39,7 +39,7 @@
 #include <errno.h>
 
 
-#define DATA_READ_FILE_BUFFER 32 * 1024
+#define DATA_READ_FILE_BUFFER 32* 1024
 
 
 /*--------------------------------------------------------------------------
diff --git a/libs/kdb/colidx0.c b/libs/kdb/colidx0.c
index b0caf74..b0f2653 100644
--- a/libs/kdb/colidx0.c
+++ b/libs/kdb/colidx0.c
@@ -171,7 +171,7 @@ rc_t KColumnIdx0Init_v1 ( KColumnIdx0 *self, const KFile *f, bool bswap )
         {
             uint32_t count;
 
-            rc = KFileRead ( f, pos,
+            rc = KFileReadAll ( f, pos,
                 buffer, 2048 * sizeof * buffer, & num_read );
             if ( rc != 0 )
                 break;
@@ -217,7 +217,7 @@ rc_t KColumnIdx0Init ( KColumnIdx0 *self, const KFile *f, uint32_t total, bool b
             if ( count > 2048 )
                 count = 2048;
 
-            rc = KFileRead ( f, i * sizeof * buffer,
+            rc = KFileReadAll ( f, i * sizeof * buffer,
                 buffer, count * sizeof * buffer, & num_read );
             if ( rc != 0 )
                 break;
diff --git a/libs/kdb/colidx1.c b/libs/kdb/colidx1.c
index 66edaef..83439de 100644
--- a/libs/kdb/colidx1.c
+++ b/libs/kdb/colidx1.c
@@ -145,13 +145,13 @@ rc_t KColumnIdx1Init ( KColumnIdx1 *self, uint32_t off, uint32_t count )
     {
         size_t num_read;
         uint32_t i, cnt;
-        for ( rc = 0, i = 0; i < count; off += (uint32_t)num_read, i += cnt )
+        for ( rc = 0, i = 0; i < count; off += ( uint32_t ) num_read, i += cnt )
         {
             cnt = count - i;
             if ( cnt > 2048 )
                 cnt = 2048;
 
-            rc = KFileRead ( self -> f, off,
+            rc = KFileReadAll ( self -> f, off,
                 buffer, cnt * sizeof * buffer, & num_read );
             if ( rc != 0 )
                 break;
@@ -195,7 +195,7 @@ rc_t KColumnIdx1OpenRead ( KColumnIdx1 *self, const KDirectory *dir,
     {
         KColumnHdr hdr;
         size_t num_bytes;
-        rc = KFileRead ( self -> f, 0, & hdr, sizeof hdr, & num_bytes );
+        rc = KFileReadAll ( self -> f, 0, & hdr, sizeof hdr, & num_bytes );
         if ( rc == 0 )
         {
             if ( num_bytes == 0 )
@@ -248,7 +248,7 @@ rc_t KColumnIdx1OpenRead ( KColumnIdx1 *self, const KDirectory *dir,
                         if ( rc == 0 )
                         {
                             off = sizeof hdr . dad;
-                            rc = KFileRead ( self -> fidx, 0, & hdr, sizeof hdr, & num_bytes );
+                            rc = KFileReadAll ( self -> fidx, 0, & hdr, sizeof hdr, & num_bytes );
                             if ( rc == 0 )
                             {
                                 if ( num_bytes < KColumnHdrOffset ( hdr, v2 ) )
diff --git a/libs/kdb/colidx2-priv.h b/libs/kdb/colidx2-priv.h
index 2319306..2e28a65 100644
--- a/libs/kdb/colidx2-priv.h
+++ b/libs/kdb/colidx2-priv.h
@@ -39,13 +39,8 @@
 #include <klib/container.h>
 #endif
 
-#ifndef IDX2_SINGLE_PAGE_CACHE
-#define IDX2_SINGLE_PAGE_CACHE 1
-#endif
-
-#if IDX2_SINGLE_PAGE_CACHE
+#include <klib/data-buffer.h>
 #include "idxblk-priv.h"
-#endif
 
 #ifdef __cplusplus
 extern "C" {
@@ -56,6 +51,16 @@ extern "C" {
  * KColumnIdx2
  *  level 2 index
  */
+
+typedef struct KColumnIdx2BlockCache
+{
+    /* single page cache */
+    void *block;
+    int64_t start_id;
+    size_t count;
+    KColIdxBlock iblk;
+} KColumnIdx2BlockCache;
+
 typedef struct KColumnIdx2 KColumnIdx2;
 struct KColumnIdx2
 {
@@ -65,15 +70,9 @@ struct KColumnIdx2
     /* idx2 itself */
     struct KFile const *f;
 
-#if ! IDX2_SINGLE_PAGE_CACHE
-    size_t align1;
-#else
-    /* single page cache */
-    void *block;
-    int64_t start_id;
-    size_t count;
-    KColIdxBlock iblk;
-#endif
+    /* full caching mechanism */
+    KDataBuffer cstorage;
+    uint32_t	last;
 };
 
 /* Open
diff --git a/libs/kdb/colidx2.c b/libs/kdb/colidx2.c
index e5cf946..59743c3 100644
--- a/libs/kdb/colidx2.c
+++ b/libs/kdb/colidx2.c
@@ -39,7 +39,7 @@
 #include <byteswap.h>
 
 
-#define IDX2_READ_FILE_BUFFER 32 * 1024
+#define IDX2_READ_FILE_BUFFER 64 * 1024
 
 
 /*--------------------------------------------------------------------------
@@ -54,10 +54,11 @@ rc_t KColumnIdx2Init ( KColumnIdx2 *self, uint64_t idx2_eof )
 {
     rc_t rc;
 
-#if IDX2_SINGLE_PAGE_CACHE
-    self -> block = NULL;
+#if 0
+    memset(&self->cstorage,0,sizeof(self->cstorage));
+    self->cstorage.elem_bits = sizeof(KColumnIdx2BlockCache)*8;
+    self->last = 0;
 #endif
-
     rc = KFileSize ( self -> f, & self -> eof );
     if ( rc == 0 )
     {
@@ -69,8 +70,9 @@ rc_t KColumnIdx2Init ( KColumnIdx2 *self, uint64_t idx2_eof )
             return 0;
         }
     }
-
+    
     KFileRelease ( self -> f );
+
     self -> f = NULL;
     return rc;
 }
@@ -82,10 +84,20 @@ rc_t KColumnIdx2OpenRead ( KColumnIdx2 *self,
 {
     rc_t rc;
 
+    rc = KDataBufferMake ( & self -> cstorage, sizeof ( KColumnIdx2BlockCache ) * 8, 0 );
+    if ( rc != 0 )
+    {
+        memset ( self, 0, sizeof * self );
+        return rc;
+    }
+
+    self -> last = 0;
+
     if ( eof == 0 )
     {
-#if IDX2_SINGLE_PAGE_CACHE
-        self -> block = NULL;
+#if 0
+        KDataBufferResize(&self->cstorage,0);
+        self -> last = 0;
 #endif
         self -> eof = 0;
         self -> f = NULL;
@@ -122,11 +134,13 @@ rc_t KColumnIdx2Whack ( KColumnIdx2 *self )
     rc_t rc = KFileRelease ( self -> f );
     if ( rc == 0 )
     {
+        int i;
+        KColumnIdx2BlockCache * cache=(KColumnIdx2BlockCache *)self -> cstorage.base;
         self -> f = NULL;
-#if IDX2_SINGLE_PAGE_CACHE
-        free ( self -> block );
-        self -> block = NULL;
-#endif
+        for(i=0;i<self->cstorage.elem_count;i++){
+            free(cache[i].block);
+        }
+        KDataBufferWhack(&self->cstorage);
     }
     return rc;
 }
@@ -162,25 +176,47 @@ rc_t KColumnIdx2LocateBlob ( const KColumnIdx2 *self,
     int64_t first, int64_t upper, bool bswap )
 {
     rc_t rc;
-
     uint32_t count;
     size_t block_size, orig;
+    uint32_t slot=0;
 
-#if ! IDX2_SINGLE_PAGE_CACHE
-    char buffer [ 1024 ];
-    void *block = buffer;
-#else
     void *block;
 
-    /* check within single page cache */
-    if ( self -> block != NULL && self -> start_id == bloc -> start_id )
-    {
-        rc = KColIdxBlockLocateBlob ( & self -> iblk,
-            loc, bloc, ( uint32_t ) self -> count, first, upper );
-        if ( rc == 0 )
-            return 0;
+    /* check within page cache */
+    if(self -> cstorage.elem_count > 0){
+        KColumnIdx2BlockCache * cache=(KColumnIdx2BlockCache *)self -> cstorage.base;
+        assert(self->last < self->cstorage.elem_count);
+        if(bloc -> start_id == cache[self->last].start_id){
+            rc = KColIdxBlockLocateBlob ( & cache[self->last].iblk, loc, bloc, ( uint32_t ) cache[self->last].count, first, upper );
+            if ( rc == 0) return 0;
+        } else {
+            uint32_t lower,upper,pivot;
+            if(bloc -> start_id > cache[self->last].start_id){
+                lower=self->last+1;
+                upper=self->cstorage.elem_count;
+            } else {
+                lower=0;
+                upper = self->last;
+            }
+            while(lower < upper){
+                pivot = (lower + upper) / 2;
+                if(bloc -> start_id == cache[pivot].start_id){
+                    KColumnIdx2 * nc_self=(KColumnIdx2 *)self;
+                    nc_self->last = pivot;
+                    rc = KColIdxBlockLocateBlob ( & cache[self->last].iblk, loc, bloc, ( uint32_t ) cache[self->last].count, first, upper );
+                    if ( rc == 0) return 0;
+                    goto BSEARCH_DONE;
+                } else if(bloc -> start_id < cache[pivot].start_id){
+                    upper=pivot;
+                } else {
+                    lower =pivot+1;
+                }
+            }
+            assert(lower == upper );
+            slot = upper;
+        }
     }
-#endif
+BSEARCH_DONE:
 
     /* file may be empty or non-existent */
     if ( self -> eof == 0 )
@@ -198,16 +234,13 @@ rc_t KColumnIdx2LocateBlob ( const KColumnIdx2 *self,
     block_size = KColBlockLocAllocSize ( bloc, orig, count );
 
     /* allocate a block */
-#if ! IDX2_SINGLE_PAGE_CACHE
-    if ( block_size > sizeof buffer )
-#endif
         block = malloc ( block_size );
     if ( block == NULL )
         rc = RC ( rcDB, rcColumn, rcSelecting, rcMemory, rcExhausted );
     else
     {
         size_t num_read;
-        rc = KFileRead ( self -> f, bloc -> pg, block, orig, & num_read );
+        rc = KFileReadAll ( self -> f, bloc -> pg, block, orig, & num_read );
         if ( rc == 0 )
         {
             if ( num_read != orig )
@@ -219,25 +252,26 @@ rc_t KColumnIdx2LocateBlob ( const KColumnIdx2 *self,
                 if ( rc == 0 )
                 {
                     rc = KColIdxBlockLocateBlob ( & iblk,
-                       loc, bloc, count, first, upper );
-#if IDX2_SINGLE_PAGE_CACHE
+                        loc, bloc, count, first, upper );
                     if ( rc == 0 )
                     {
-                        free ( self -> block );
-                        ( ( KColumnIdx2* ) self ) -> block = block;
-                        ( ( KColumnIdx2* ) self ) -> start_id = bloc -> start_id;
-                        ( ( KColumnIdx2* ) self ) -> count = count;
-                        ( ( KColumnIdx2* ) self ) -> iblk = iblk;
+                        KColumnIdx2BlockCache * cache;
+                        KDataBufferResize(&((KColumnIdx2 *)self)->cstorage,self->cstorage.elem_count+1);
+                        cache=(KColumnIdx2BlockCache *)self -> cstorage.base;
+                        if(slot < self->cstorage.elem_count -1){ /** not adding to the end **/
+                            memmove(cache+slot+1,cache+slot,sizeof(*cache)*(self->cstorage.elem_count - slot - 1));
+                        }
+                        cache += slot; 
+                        cache -> block = block;
+                        cache -> start_id = bloc -> start_id;
+                        cache -> count = count;
+                        cache -> iblk = iblk;
                         return 0;
                     }
-#endif
                 }
             }
         }
-
-#if ! IDX2_SINGLE_PAGE_CACHE
-        if ( block != buffer )
-#endif
+        
             free ( block );
     }
 
diff --git a/libs/kdb/column-cc.c b/libs/kdb/column-cc.c
index 5abc732..c283d4b 100644
--- a/libs/kdb/column-cc.c
+++ b/libs/kdb/column-cc.c
@@ -75,6 +75,24 @@ rc_t CC col_check_report(const CCReportInfoBlock *nfo, void *Ctx)
 }
 
 static
+rc_t CC CheckExists(const KDirectory *dir, uint32_t type, const char *name, void *Ctx)
+{
+    struct col_check_ctx *ctx = Ctx;
+    
+    if ((type & ~kptAlias) == kptFile) {
+        if (strcmp(name, "data") == 0)
+            ctx->found |= 1;
+        else if (strcmp(name, "idx0") == 0)
+            ctx->found |= 2;
+        else if (strcmp(name, "idx1") == 0)
+            ctx->found |= 4;
+        else if (strcmp(name, "idx2") == 0)
+            ctx->found |= 8;
+    }
+    return 0;
+}
+
+static
 rc_t KColumnCheckMD5(const KColumn *self,
                      CCReportInfoBlock *nfo,
                      CCReportFunc report, void *ctx)
@@ -90,11 +108,30 @@ rc_t KColumnCheckMD5(const KColumn *self,
     
     rc = DirectoryCheckMD5(self->dir, "md5", nfo, col_check_report, &local_ctx);
     if (rc == 0 && !local_ctx.failed && local_ctx.found != 0x0F) {
+        local_ctx.found = 0;
+        KDirectoryVisit(self->dir, false, CheckExists, &local_ctx, NULL);
         nfo->type = ccrpt_Done;
-        nfo->info.done.rc = RC(rcDB, rcColumn, rcValidating, rcFile, rcNotFound);
-        nfo->info.done.mesg = "Some files are missing";
+        if (local_ctx.found == 0x0F) {
+            nfo->info.done.rc = RC(rcDB, rcColumn, rcValidating, rcChecksum, rcNotFound);
+            nfo->info.done.mesg = "Some files are missing checksums";
+        }
+        else {
+            nfo->info.done.rc = RC(rcDB, rcColumn, rcValidating, rcFile, rcNotFound);
+            nfo->info.done.mesg = "Some files are missing";
+        }
         rc = report(nfo, ctx);
     }
+    else if (rc == 0) {
+        nfo->type = ccrpt_Done;
+        nfo->info.done.rc = 0;
+        nfo->info.done.mesg = "md5 ok";
+        rc = report(nfo, ctx);
+    }
+    else {
+        nfo->type = ccrpt_Done;
+        rc = report(nfo, ctx);
+    }
+
     return rc;
 }
 
@@ -151,8 +188,9 @@ rc_t KColumnCheckBlobs(const KColumn *self,
         row += count;
     }
     nfo->info.done.rc = 0;
-    nfo->info.done.mesg = NULL;
+    nfo->info.done.mesg = "checksums ok";
     nfo->type = ccrpt_Done;
+    rc = report(nfo, ctx);
     return rc;
 }
 
@@ -161,15 +199,26 @@ rc_t CC KColumnConsistencyCheck(const KColumn *self,
     uint32_t level, CCReportInfoBlock *nfo, CCReportFunc report, void *ctx )
 {
     rc_t rc = 0;
-    
+
+    bool indexOnly = level & CC_INDEX_ONLY;
+    if (indexOnly) {
+        level &= ~CC_INDEX_ONLY;
+    }
+
     if (KDirectoryPathType(self->dir, "md5") != kptNotFound)
-        rc = KColumnCheckMD5(self, nfo, report, ctx);
-    else if (level == 0)
-        level = 1;
+        rc = level == 0 ? KColumnCheckMD5(self, nfo, report, ctx) : 0;
+    else {
+        nfo->type = ccrpt_Done;
+        nfo->info.done.mesg = "missing md5 file";
+        nfo->info.done.rc = 0; /* RC(rcDB, rcColumn, rcValidating, rcFile, rcNotFound); */
+        
+        rc = report(nfo, ctx);
+        
+        if (level == 0)
+            level = 1;
+    }
     
     if (rc == 0 && level > 0)
         rc = KColumnCheckBlobs(self, nfo, report, ctx);
-    if (rc == 0 && nfo->info.done.rc != 0)
-        rc = report(nfo, ctx);
     return rc;
 }
diff --git a/libs/kdb/column.c b/libs/kdb/column.c
index f3dd247..c5c0192 100644
--- a/libs/kdb/column.c
+++ b/libs/kdb/column.c
@@ -33,6 +33,7 @@
 #include <kdb/kdb-priv.h>
 #include <klib/checksum.h>
 #include <klib/rc.h>
+#include <klib/printf.h>
 #include <atomic32.h>
 #include <sysalloc.h>
 #undef KONST
@@ -235,36 +236,41 @@ rc_t KColumnMakeRead ( KColumn **colp, const KDirectory *dir, const char *path )
  */
 static
 rc_t KDBManagerVOpenColumnReadInt ( const KDBManager *self,
-    const KColumn **colp, const KDirectory *wd,
+    const KColumn **colp, const KDirectory *wd, bool try_srapath,
     const char *path, va_list args )
 {
     char colpath [ 4096 ];
-    rc_t rc = KDirectoryVResolvePath ( wd, 1,
-        colpath, sizeof colpath, path, args );
+    rc_t rc;
+    size_t z;
+
+/*    rc = KDirectoryVResolvePath ( wd, 1,
+        colpath, sizeof colpath, path, args ); */
+    rc = string_vprintf( colpath, sizeof colpath, &z, path, args );
     if ( rc == 0 )
     {
         KColumn *col;
         const KDirectory *dir;
 
         /* open table directory */
-	rc = KDBOpenPathTypeRead ( wd, colpath, &dir, kptColumn, NULL );
+        rc = KDBOpenPathTypeRead ( self, wd, colpath, &dir, kptColumn, NULL, try_srapath );
         if ( rc == 0 )
         {
             rc = KColumnMakeRead ( & col, dir, colpath );
-            if ( rc != 0 )
-                KDirectoryRelease ( dir );
-            else
+            if ( rc == 0 )
             {
                 col -> mgr = KDBManagerAttach ( self );
                 * colp = col;
                 return 0;
             }
+
+            KDirectoryRelease ( dir );
         }
     }
     
     return rc;
 }
 
+
 LIB_EXPORT rc_t CC KDBManagerOpenColumnRead ( const KDBManager *self,
     const KColumn **col, const char *path, ... )
 {
@@ -278,6 +284,7 @@ LIB_EXPORT rc_t CC KDBManagerOpenColumnRead ( const KDBManager *self,
     return rc;
 }
 
+
 LIB_EXPORT rc_t CC KDBManagerVOpenColumnRead ( const KDBManager *self,
     const KColumn **col, const char *path, va_list args )
 {
@@ -290,9 +297,10 @@ LIB_EXPORT rc_t CC KDBManagerVOpenColumnRead ( const KDBManager *self,
         return RC ( rcDB, rcMgr, rcOpening, rcSelf, rcNull );
 
     return KDBManagerVOpenColumnReadInt
-        ( self, col, self -> wd, path, args );
+        ( self, col, self -> wd, true, path, args );
 }
 
+
 LIB_EXPORT rc_t CC KTableOpenColumnRead ( const KTable *self,
     const KColumn **col, const char *path, ... )
 {
@@ -325,7 +333,7 @@ LIB_EXPORT rc_t CC KTableVOpenColumnRead ( const KTable *self,
     if ( rc == 0 )
     {
         rc = KDBManagerVOpenColumnReadInt ( self -> mgr,
-            colp, self -> dir, path, NULL );
+            colp, self -> dir, false, path, NULL );
         if ( rc == 0 )
         {
             KColumn *col = ( KColumn* ) * colp;
diff --git a/libs/kdb/database-cc.c b/libs/kdb/database-cc.c
index 35cbd9e..a0e0b1c 100644
--- a/libs/kdb/database-cc.c
+++ b/libs/kdb/database-cc.c
@@ -57,119 +57,136 @@
 
 #undef index
 
-static
-rc_t KDatabaseCheckMD5 ( const KDatabase *self, CCReportFunc report, void *ctx )
+static void KDatabaseGetName(KDatabase const *self, char const **rslt)
 {
     char *sep;
+    
+    *rslt = self->path;
+    sep = strrchr(self->path, '/');
+    if (sep != NULL)
+        *rslt = sep + 1;
+}
 
+static
+rc_t KDatabaseCheckMD5 (const KDatabase *self, CCReportFunc report, void *ctx)
+{
     CCReportInfoBlock info;
-    memset ( & info, 0, sizeof info );
+    memset (& info, 0, sizeof info);
 
-    info . objType = kptDatabase;
-    info . objName = self -> path;
-    sep = strrchr ( self -> path, '/' );
-    if ( sep != NULL )
-        info.objName = sep + 1;
+    info.objType = kptDatabase;
+    KDatabaseGetName(self, &info.objName);
     
-    return DirectoryCheckMD5 ( self -> dir, "md5", & info, report, ctx );
+    return DirectoryCheckMD5 (self -> dir, "md5", & info, report, ctx);
 }
 
 static
-rc_t KDatabaseCheckTables ( const KDatabase *self, int level, CCReportFunc report, void *ctx )
+rc_t KDatabaseCheckTables (const KDatabase *self, uint32_t depth, int level, CCReportFunc report, void *ctx)
 {
     uint32_t n;
-
+    
     KNamelist *list;
-    rc_t rc = KDatabaseListTbl ( self, & list );
-    if ( rc != 0 )
+    rc_t rc = KDatabaseListTbl (self, & list);
+    if (rc != 0)
         return rc;
-
-    rc = KNamelistCount ( list, & n );
-    if ( rc == 0 )
+    
+    rc = KNamelistCount (list, & n);
+    if (rc == 0)
     {
-        uint32_t idx;
-        for ( idx = 0; idx < n && rc == 0; ++ idx )
+        CCReportInfoBlock nfo;
+        memset (& nfo, 0, sizeof nfo);
+        nfo.objType = kptTable;
+        
+        for (nfo.objId = 0; rc == 0 && nfo.objId != (int) n; ++ nfo.objId)
         {
-            const char *tblname;
-            rc = KNamelistGet ( list, idx, & tblname );
-            if ( rc == 0 )
+            rc = KNamelistGet (list, nfo.objId, &nfo.objName);
+            if (rc == 0)
             {
                 const KTable *tbl;
                 
-                rc = KDatabaseOpenTableRead ( self, & tbl, tblname );
-                if ( rc == 0 )
+                nfo.type = ccrpt_Visit;
+                nfo.info.visit.depth = depth + 1;
+                rc = report(&nfo, ctx); if (rc) break;
+                
+                rc = KDatabaseOpenTableRead (self, & tbl, nfo.objName);
+                if (rc == 0)
                 {
-                    rc = KTableConsistencyCheck ( tbl, level, report, ctx );
-                    KTableRelease ( tbl );
+                    rc = KTableConsistencyCheck (tbl, depth + 1, level, report,
+                        ctx, SRA_PLATFORM_UNDEFINED);
+                    KTableRelease (tbl);
                 }
             }
         }
     }
     
-    KNamelistRelease(list);
+    KNamelistRelease (list);
     return rc;
 }
 
 static
-rc_t KDatabaseCheckIndexMD5 ( const KDirectory *dir,
-    CCReportInfoBlock *nfo, CCReportFunc report, void *ctx )
+rc_t KDatabaseCheckIndexMD5 (const KDirectory *dir,
+    CCReportInfoBlock *nfo, CCReportFunc report, void *ctx)
 {
     char md5 [ 4100 ];
 
-    snprintf ( md5, sizeof md5, "%s.md5", nfo -> objName );
-    return DirectoryCheckMD5 ( dir, md5, nfo, report, ctx );
+    snprintf (md5, sizeof md5, "%s.md5", nfo -> objName);
+    return DirectoryCheckMD5 (dir, md5, nfo, report, ctx);
 }
 
 static
-const KDirectory *KDatabaseFindIndexDir ( const KDatabase *self )
+const KDirectory *KDatabaseFindIndexDir (const KDatabase *self)
 {
     const KDirectory *idxDir;
     
-    rc_t rc = KDirectoryOpenDirRead ( self -> dir, & idxDir, false, "idx" );
-    if ( rc == 0 )
+    rc_t rc = KDirectoryOpenDirRead (self -> dir, & idxDir, false, "idx");
+    if (rc == 0)
         return idxDir;
 
     return NULL;
 }
 
 static
-rc_t KDatabaseCheckIndices ( const KDatabase *self, uint32_t level, CCReportFunc report, void *ctx)
+rc_t KDatabaseCheckIndices (const KDatabase *self, uint32_t depth, uint32_t level, CCReportFunc report, void *ctx)
 {
     uint32_t n;
 
     KNamelist *list;
-    rc_t rc = KDatabaseListIdx ( self, & list );
-    if ( rc != 0 )
+    rc_t rc = KDatabaseListIdx (self, & list);
+    if (rc != 0)
     {
-        if ( GetRCState ( rc ) == rcNotFound )
+        if (GetRCState (rc) == rcNotFound)
             return 0;
         return rc;
     }
 
-    rc = KNamelistCount ( list, & n );
-    if ( rc == 0 )
+/* TEST    assert(0); */
+    rc = KNamelistCount (list, & n);
+    if (rc == 0)
     {
-        const KDirectory *idxDir = KDatabaseFindIndexDir ( self );
-        if ( idxDir == NULL )
-            rc = RC ( rcDB, rcDatabase, rcValidating, rcDirectory, rcNull );
+        const KDirectory *idxDir = KDatabaseFindIndexDir (self);
+        if (idxDir == NULL)
+            rc = RC (rcDB, rcDatabase, rcValidating, rcDirectory, rcNull);
         else
         {
             CCReportInfoBlock nfo;
-            memset ( & nfo, 0, sizeof nfo );
-            nfo . objType = kptIndex;
+            memset (& nfo, 0, sizeof nfo);
+            nfo.objType = kptIndex;
 
-            for ( nfo . objId = 0; rc == 0 && nfo . objId != (int) n; ++ nfo . objId )
+            for (nfo.objId = 0; rc == 0 && nfo.objId != (int) n; ++ nfo.objId)
             {
                 rc = KNamelistGet(list, nfo.objId, &nfo.objName);
-                if ( rc != 0 )
+                if (rc != 0)
                     break;
             
-                rc = KDatabaseCheckIndexMD5 ( idxDir, &nfo, report, ctx );
-                if ( rc == 0 && level > 0 )
+                nfo.type = ccrpt_Visit;
+                nfo.info.visit.depth = depth + 1;
+                rc = report(&nfo, ctx); if (rc) break;
+                
+                rc = KDatabaseCheckIndexMD5 (idxDir, &nfo, report, ctx);
+                if (rc == 0 && level > 0)
                 {
                     const KIndex *idx;
-                    rc = KDatabaseOpenIndexRead ( self, &idx, nfo . objName );
-                    if ( rc != 0 )
+                    rc = KDatabaseOpenIndexRead (self, &idx, nfo.objName);
+                    if (rc != 0)
                     {
                         nfo.type = ccrpt_Done;
                         nfo.info.done.rc = rc;
@@ -185,7 +202,7 @@ rc_t KDatabaseCheckIndices ( const KDatabase *self, uint32_t level, CCReportFunc
                                                     &nfo.info.index.num_rows,
                                                     &nfo.info.index.num_holes);
                         KIndexRelease(idx);
-                        if ( rc != 0 )
+                        if (rc != 0)
                         {
                             nfo.type = ccrpt_Done;
                             nfo.info.done.rc = rc;
@@ -193,78 +210,129 @@ rc_t KDatabaseCheckIndices ( const KDatabase *self, uint32_t level, CCReportFunc
                         }
                     }
 
-                    rc = report ( & nfo, ctx );
+                    rc = report (& nfo, ctx);
                 }
             }
 
-            KDirectoryRelease ( idxDir );
+            KDirectoryRelease (idxDir);
         }
     }
 
-    KNamelistRelease ( list );
+    KNamelistRelease (list);
     return rc;
 }
 
 static
-rc_t KDatabaseCheckDatabases ( const KDatabase *self, int level, CCReportFunc report, void *ctx )
+rc_t KDatabaseCheckDatabases (const KDatabase *self, uint32_t depth, int level, CCReportFunc report, void *ctx)
 {
     uint32_t n;
 
     KNamelist *list;
-    rc_t rc = KDatabaseListDB ( self, & list );
-    if ( rc != 0 )
+    rc_t rc = KDatabaseListDB (self, & list);
+    if (rc != 0)
     {
-        if ( GetRCState ( rc ) == rcNotFound )
+        if (GetRCState (rc) == rcNotFound)
             return 0;
         return rc;
     }
 
-    rc = KNamelistCount ( list, & n );
-    if ( rc == 0 )
+    rc = KNamelistCount (list, & n);
+    if (rc == 0)
     {
-        uint32_t idx;
+        CCReportInfoBlock nfo;
+        memset (& nfo, 0, sizeof nfo);
+        nfo.objType = kptDatabase;
         
-        for ( idx = 0; idx < n && rc == 0; ++ idx )
+        for (nfo.objId = 0; rc == 0 && nfo.objId != (int) n; ++ nfo.objId)
         {
-            const char *dbname;
-            rc = KNamelistGet ( list, idx, & dbname );
-            if ( rc == 0 )
+            rc = KNamelistGet (list, nfo.objId, &nfo.objName);
+            if (rc == 0)
             {
                 const KDatabase *db;
-                rc = KDatabaseOpenDBRead ( self, & db, dbname );
-                if ( rc == 0 )
+                
+                nfo.type = ccrpt_Visit;
+                nfo.info.visit.depth = depth + 1;
+                rc = report(&nfo, ctx); if (rc) break;
+                
+                rc = KDatabaseOpenDBRead (self, & db, nfo.objName);
+                if (rc == 0)
                 {
-                    rc = KDatabaseConsistencyCheck ( db, level, report, ctx );
-                    KDatabaseRelease ( db );
+                    rc = KDatabaseConsistencyCheck (db, depth + 1, level, report, ctx);
+                    KDatabaseRelease (db);
                 }
             }
         }
     }
     
-    KNamelistRelease ( list );
+    KNamelistRelease (list);
     return rc;
 }
 
 LIB_EXPORT
-rc_t CC KDatabaseConsistencyCheck ( const KDatabase *self,
-    uint32_t level, CCReportFunc report, void *ctx )
+rc_t CC KDatabaseConsistencyCheck (const KDatabase *self,
+    uint32_t depth, uint32_t level, CCReportFunc report, void *ctx)
 {
     rc_t rc = 0;
+    uint32_t type;
+
+    bool indexOnly = level & CC_INDEX_ONLY;
+    if (indexOnly) {
+        level &= ~CC_INDEX_ONLY;
+    }
+
+    if (self == NULL)
+        return RC (rcDB, rcDatabase, rcValidating, rcSelf, rcNull);
+    
+    if (depth == 0) {
+        CCReportInfoBlock info;
+        
+        KDatabaseGetName(self, &info.objName);
+        info.objId = 0;
+        info.objType = kptDatabase;
+        info.type = ccrpt_Visit;
+        info.info.visit.depth = 0;
+        
+        rc = report(&info, ctx);
+        if (rc) return rc;
+    }
     
-    if ( self == NULL )
-        return RC ( rcDB, rcDatabase, rcValidating, rcSelf, rcNull );
+    type = KDirectoryPathType(self->dir, "md5");
+    if (type == kptZombieFile) {
+        CCReportInfoBlock info;
+        
+        KDatabaseGetName(self, &info.objName);
+        info.objId = 0;
+        info.objType = kptTable;
+        info.type = ccrpt_Done;
+        info.info.done.mesg = "Database may be truncated";
+        info.info.done.rc = 0;
+        
+        rc = report(&info, ctx);
+    }
+    else if (type != kptNotFound)
+        rc = KDatabaseCheckMD5 (self, report, ctx);
+    else {
+        CCReportInfoBlock info;
+        
+        KDatabaseGetName(self, &info.objName);
+        info.objId = 0;
+        info.objType = kptDatabase;
+        info.type = ccrpt_Done;
+        info.info.done.mesg = "no md5 file";
+        info.info.done.rc = 0;
+        
+        rc = report(&info, ctx);
+    }
     
-    if (KDirectoryPathType(self->dir, "md5") != kptNotFound)
-        rc = KDatabaseCheckMD5 ( self, report, ctx );
 
-    if ( rc == 0 )
-        rc = KDatabaseCheckTables ( self, level, report, ctx );
+    if (rc == 0)
+        rc = KDatabaseCheckTables (self, depth, level, report, ctx);
 
-    if ( rc == 0 )    
-        rc = KDatabaseCheckIndices ( self, level, report, ctx );
+    if (rc == 0)
+        rc = KDatabaseCheckIndices (self, depth, level, report, ctx);
 
-    if ( rc == 0 )
-        rc = KDatabaseCheckDatabases ( self, level, report, ctx );
+    if (rc == 0)
+        rc = KDatabaseCheckDatabases (self, depth, level, report, ctx);
 
     return rc;
 }
diff --git a/libs/kdb/database-cmn.c b/libs/kdb/database-cmn.c
index 82d71ea..b99e497 100644
--- a/libs/kdb/database-cmn.c
+++ b/libs/kdb/database-cmn.c
@@ -214,7 +214,7 @@ rc_t KDBManagerVOpenDBReadInt ( const KDBManager *self,
         const KDirectory *dir;
 
         /* open the directory if its a database */
-	rc = KDBOpenPathTypeRead ( wd, dbpath, &dir, kptDatabase, NULL );
+        rc = KDBOpenPathTypeRead ( wd, dbpath, &dir, kptDatabase, NULL );
         if ( rc == 0 )
         {
             /* allocate a new guy */
diff --git a/libs/kdb/database.c b/libs/kdb/database.c
index 721e0e1..275baa1 100644
--- a/libs/kdb/database.c
+++ b/libs/kdb/database.c
@@ -32,11 +32,15 @@
 #undef KONST
 
 #include <klib/namelist.h>
+#include <klib/log.h>
 #include <klib/rc.h>
+#include <klib/printf.h>
+#include <os-native.h>
 #include <sysalloc.h>
 
 #include <limits.h>
 #include <stdlib.h>
+#include <stdio.h>
 #include <string.h>
 #include <assert.h>
 
@@ -46,6 +50,22 @@
  *  connection to a database within file system
  */
 
+/* GetPath
+ *  return the absolute path to DB
+ */
+LIB_EXPORT rc_t CC KDatabaseGetPath ( KDatabase const *self,
+    const char **path )
+{
+    if ( self == NULL )
+        return RC ( rcDB, rcDatabase, rcAccessing, rcSelf, rcNull );
+    if ( path == NULL )
+        return RC ( rcDB, rcDatabase, rcAccessing, rcParam, rcNull );
+
+    *path = self->path;
+
+    return 0;
+}
+
 /* Whack
  */
 static
@@ -186,23 +206,30 @@ rc_t KDatabaseMake ( KDatabase **dbp, const KDirectory *dir, const char *path )
  *  wd-native character set giving path to database
  */
 static
-rc_t KDBManagerVOpenDBReadInt ( const KDBManager *self,
-    const KDatabase **dbp, const KDirectory *wd,
-    const char *path, va_list args )
+rc_t KDBManagerVOpenDBReadInt ( const KDBManager *self, const KDatabase **dbp,
+                                const KDirectory *wd, bool try_srapath,
+                                const char *path, va_list args )
 {
-    /* generate absolute path to db */
+    rc_t rc;
+
+    /* MUST use vsnprintf because the documented behavior of "path"
+       is that of stdc library's printf, not vdb printf */
     char dbpath [ 4096 ];
-    rc_t rc = KDirectoryVResolvePath ( wd, true,
-        dbpath, sizeof dbpath, path, args );
-    if ( rc == 0 )
+    int z = ( args == NULL ) ?
+        snprintf ( dbpath, sizeof dbpath, path ):
+        vsnprintf ( dbpath, sizeof dbpath, path, args );
+    if ( z < 0 || ( size_t ) z >= sizeof dbpath )
+        rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcExcessive );
+    else
     {
-        KDatabase *db;
         const KDirectory *dir;
 
         /* open the directory if its a database */
-	rc = KDBOpenPathTypeRead ( wd, dbpath, &dir, kptDatabase, NULL );
+        rc = KDBOpenPathTypeRead ( self, wd, dbpath, &dir, kptDatabase, NULL, try_srapath );
         if ( rc == 0 )
         {
+            KDatabase *db;
+
             /* allocate a new guy */
             rc = KDatabaseMake ( & db, dir, dbpath );
             if ( rc == 0 )
@@ -215,7 +242,6 @@ rc_t KDBManagerVOpenDBReadInt ( const KDBManager *self,
             KDirectoryRelease ( dir );
         }
     }
-    
     return rc;
 }
 
@@ -256,7 +282,7 @@ LIB_EXPORT rc_t CC KDBManagerVOpenDBRead ( const KDBManager *self,
     if ( self == NULL )
         return RC ( rcDB, rcMgr, rcOpening, rcSelf, rcNull );
 
-    return KDBManagerVOpenDBReadInt ( self, db, self -> wd, path, args );
+    return KDBManagerVOpenDBReadInt ( self, db, self -> wd, true, path, args );
 }
 
 LIB_EXPORT rc_t CC KDatabaseVOpenDBRead ( const KDatabase *self,
@@ -278,7 +304,7 @@ LIB_EXPORT rc_t CC KDatabaseVOpenDBRead ( const KDatabase *self,
     if ( rc == 0 )
     {
         rc = KDBManagerVOpenDBReadInt ( self -> mgr, dbp,
-            self -> dir, path, NULL );
+            self -> dir, false, path, NULL );
         if ( rc == 0 )
         {
             KDatabase *db = ( KDatabase* ) * dbp;
@@ -314,7 +340,47 @@ LIB_EXPORT bool CC KDatabaseLocked ( const KDatabase *self )
  */
 LIB_EXPORT bool CC KDatabaseVExists ( const KDatabase *self, uint32_t type, const char *name, va_list args )
 {
-    /* TBD */
+    if ( self != NULL && name != NULL && name [ 0 ] != 0 )
+    {
+        rc_t rc;
+        size_t len;
+        const char *ns;
+        char path [ 256 ];
+
+        switch ( type )
+        {
+        case kptDatabase:
+            ns = "db";
+            len = 2;
+            break;
+
+        case kptTable:
+            ns = "tbl";
+            len = 3;
+            break;
+
+        case kptIndex:
+            ns = "idx";
+            len = 3;
+            break;
+
+        default:
+            return false;
+        }
+
+        rc = KDBVMakeSubPath ( self -> dir, path, sizeof path, ns, len, name, args );
+        if ( rc == 0 )
+        {
+            switch ( KDirectoryPathType ( self -> dir, path ) )
+            {
+            case kptFile:
+            case kptDir:
+            case kptFile | kptAlias:
+            case kptDir | kptAlias:
+                return true;
+            }
+        }
+    }
     return false;
 }
 
@@ -333,6 +399,83 @@ LIB_EXPORT bool CC KDatabaseExists ( const KDatabase *self, uint32_t type, const
 }
 
 
+/* IsAlias
+ *  returns true if object name is an alias
+ *  returns path to fundamental name if it was aliased
+ *
+ *  "type" [ IN ] - a KDBPathType
+ *  valid values are kptDatabase, kptTable and kptIndex
+ *
+ *  "resolved" [ OUT ] and "rsize" [ IN ] - optional output buffer
+ *  for fundamenta object name if "alias" is not a fundamental name, 
+ *
+ *  "name" [ IN ] - NUL terminated object name
+ */
+LIB_EXPORT bool CC KDatabaseIsAlias ( const KDatabase *self, uint32_t type,
+    char *resolved, size_t rsize, const char *name )
+{
+    if ( self != NULL && name != NULL && name [ 0 ] != 0 )
+    {
+        rc_t rc;
+        size_t len;
+        const char *ns;
+        char path [ 256 ];
+
+        switch ( type )
+        {
+        case kptDatabase:
+            ns = "db";
+            len = 2;
+            break;
+
+        case kptTable:
+            ns = "tbl";
+            len = 3;
+            break;
+
+        case kptIndex:
+            ns = "idx";
+            len = 3;
+            break;
+
+        default:
+            return false;
+        }
+
+        rc = KDBMakeSubPath ( self -> dir, path, sizeof path, ns, len, name );
+        if ( rc == 0 )
+        {
+            switch ( KDirectoryPathType ( self -> dir, path ) )
+            {
+            case kptFile | kptAlias:
+            case kptDir | kptAlias:
+                if ( resolved != NULL && rsize != 0 )
+                {
+                    const KDirectory *sub;
+                    rc = KDirectoryOpenDirRead ( self -> dir, & sub, false, ns );
+                    * resolved = 0;
+                    if ( rc != 0 )
+                        PLOGERR ( klogWarn, ( klogWarn, rc, "failed to open subdirectory '$(sub)'", "sub=%s", ns ) );
+                    else
+                    {
+                        rc = KDirectoryResolveAlias ( sub, false, resolved, rsize, name );
+                        KDirectoryRelease ( sub );
+                        if ( rc != 0 )
+                            PLOGERR ( klogWarn, ( klogWarn, rc, "failed to resolve alias '$(alias)'", "alias=%s", name ) );
+                    }
+                }
+                return true;
+            }
+        }
+    }
+
+    if ( resolved != NULL && rsize != 0 )
+        * resolved = 0;
+
+    return false;
+}
+
+
 /* Writable
  *  returns 0 if object is writable
  *  or a reason why if not
@@ -495,18 +638,29 @@ LIB_EXPORT rc_t CC KDatabaseModDate ( const KDatabase *self, KTime_t *mtime )
 /* List
  *  create database listings
  */
+struct FilterData
+{
+    const KDBManager * mgr;
+    int type;
+};
+
 static
-bool CC KDatabaseListFilter ( const KDirectory *dir, const char *name, void *data )
+bool CC KDatabaseListFilter ( const KDirectory *dir, const char *name, void *data_ )
 {
-    return ( KDBOpenPathTypeRead ( dir, name, NULL, (( long int ) data ), NULL ) == 0 );
+    struct FilterData * data = data_;
+    return ( KDBOpenPathTypeRead ( data->mgr, dir, name, NULL, data->type, NULL, false ) == 0 );
 }
 
 LIB_EXPORT rc_t CC KDatabaseListDB ( const KDatabase *self, KNamelist **names )
 {
     if ( self != NULL )
     {
+        struct FilterData data;
+        data.mgr = self->mgr;
+        data.type = kptDatabase;
+
         return KDirectoryVList ( self -> dir,
-            names, KDatabaseListFilter, ( void* ) kptDatabase, "db", NULL );
+            names, KDatabaseListFilter, &data, "db", NULL );
     }
 
     if ( names != NULL )
@@ -519,8 +673,12 @@ LIB_EXPORT rc_t CC KDatabaseListTbl ( struct KDatabase const *self, KNamelist **
 {
     if ( self != NULL )
     {
+        struct FilterData data;
+        data.mgr = self->mgr;
+        data.type = kptTable;
+
         return KDirectoryVList ( self -> dir,
-            names, KDatabaseListFilter, ( void* ) kptTable, "tbl", NULL );
+            names, KDatabaseListFilter, &data, "tbl", NULL );
     }
 
     if ( names != NULL )
@@ -533,8 +691,12 @@ LIB_EXPORT rc_t CC KDatabaseListIdx ( struct KDatabase const *self, KNamelist **
 {
     if ( self != NULL )
     {
+        struct FilterData data;
+        data.mgr = self->mgr;
+        data.type = kptIndex;
+
         return KDirectoryVList ( self -> dir,
-            names, KDatabaseListFilter, ( void* ) kptIndex, "idx", NULL );
+            names, KDatabaseListFilter, &data, "idx", NULL );
     }
 
     if ( names != NULL )
diff --git a/libs/kdb/dbcc-cmn.c b/libs/kdb/dbcc-cmn.c
index 90a94d2..09d287c 100644
--- a/libs/kdb/dbcc-cmn.c
+++ b/libs/kdb/dbcc-cmn.c
@@ -134,7 +134,7 @@ rc_t DirectoryCheckMD5(const KDirectory *dir, const char name[],
         nfo->info.done.rc = rc2;
     }
     else {
-        nfo->info.done.mesg = NULL;
+        nfo->info.done.mesg = "md5 ok";
         nfo->info.done.rc = 0;
     }
     return report(nfo, ctx);
diff --git a/libs/kdb/dbmgr-cmn.c b/libs/kdb/dbmgr-cmn.c
index ec56046..c21e008 100644
--- a/libs/kdb/dbmgr-cmn.c
+++ b/libs/kdb/dbmgr-cmn.c
@@ -34,6 +34,8 @@
 #include "kdb-priv.h"
 #undef KONST
 
+#include <vfs/manager.h>
+#include <kfs/directory.h>
 #include <klib/symbol.h>
 #include <klib/checksum.h>
 #include <klib/rc.h>
@@ -63,6 +65,8 @@ rc_t KDBManagerWhack ( KDBManager *self )
     /* everything should be closed */
     assert ( self -> open_objs . root == NULL );
 
+    rc = VFSManagerRelease ( self -> vfsmgr );
+
     rc = KDirectoryRelease ( self -> wd );
     if ( rc == 0 )
     {
@@ -167,14 +171,19 @@ rc_t KDBManagerMake ( KDBManager **mgrp, const KDirectory *wd, const char *op )
 
             if ( rc == 0 )
             {
-                CRC32Init ();
+                rc = VFSManagerMake ( & mgr -> vfsmgr );
+
+                if ( rc == 0 )
+                {
+                    CRC32Init ();
 
-                BSTreeInit ( & mgr -> open_objs );
+                    BSTreeInit ( & mgr -> open_objs );
 
-                KRefcountInit ( & mgr -> refcount, 1, "KDBManager", op, "kmgr" );
+                    KRefcountInit ( & mgr -> refcount, 1, "KDBManager", op, "kmgr" );
 
-                * mgrp = mgr;
-                return 0;
+                    * mgrp = mgr;
+                    return 0;
+                }
             }
 
             free ( mgr );
@@ -211,35 +220,24 @@ LIB_EXPORT rc_t CC KDBManagerVersion ( const KDBManager *self, uint32_t *version
  */
 LIB_EXPORT bool CC KDBManagerVExists ( const KDBManager *self, uint32_t requested, const char *name, va_list args )
 {
-    char full [ 4096 ];
-    rc_t rc = KDirectoryVResolvePath ( self -> wd, false, full, sizeof full, name, args );
-    if ( rc == 0 )
-    {
-        int type = KDBPathType ( self -> wd, full ) & ~ kptAlias;
-        switch ( type )
-        {
-        case kptDatabase:
-        case kptTable:
-        case kptIndex:
-        case kptColumn:
-        case kptMetadata:
-            break;
-        case kptPrereleaseTbl:
-            type = kptTable;
-            break;
-#if 0
-            /*TBD - eventually we need to check for an archive here */
-        case kptFile: 
-            /* check if this is an archive .tar or .sra and return rcReadonly if it is */
-#endif
-        default:
-            return false;
-        }
+    int type;
 
-        return requested == ( uint32_t ) type;
+    type = KDBManagerVPathType (self, name, args);
+    switch ( type )
+    {
+    case kptDatabase:
+    case kptTable:
+    case kptIndex:
+    case kptColumn:
+    case kptMetadata:
+        break;
+    case kptPrereleaseTbl:
+        type = kptTable;
+        break;
+    default:
+        return false;
     }
-
-    return false;
+    return requested == ( uint32_t ) type;
 }
 
 bool KDBManagerExists ( const KDBManager *self, uint32_t type, const char *name, ... )
diff --git a/libs/kdb/dbmgr-priv.h b/libs/kdb/dbmgr-priv.h
index 48f4b60..4ee0356 100644
--- a/libs/kdb/dbmgr-priv.h
+++ b/libs/kdb/dbmgr-priv.h
@@ -53,7 +53,7 @@ extern "C" {
  */
 struct KSymbol;
 struct KDirectory;
-
+struct VFSManager;
 
 /*--------------------------------------------------------------------------
  * KDBManager
@@ -69,6 +69,9 @@ struct KDBManager
 
     /* open references */
     KRefcount refcount;
+
+    /* other managers needed by the KDB manager */
+    struct VFSManager * vfsmgr;
 };
 
 
diff --git a/libs/kdb/dbmgr.c b/libs/kdb/dbmgr.c
index 00ff9a7..a0d2039 100644
--- a/libs/kdb/dbmgr.c
+++ b/libs/kdb/dbmgr.c
@@ -29,13 +29,22 @@
 #include <kdb/extern.h>
 #include "libkdb.vers.h"
 
+#include <vfs/manager.h>
+#include <vfs/resolver.h>
+#include <vfs/path.h>
+#include <vfs/path-priv.h>
+#include <kfs/directory.h>
+
 #define KONST const
 #include "dbmgr-priv.h"
 #include "kdb-priv.h"
+#include "kdbfmt-priv.h"
 #include <klib/checksum.h>
 #include <klib/rc.h>
 #undef KONST
 
+#include <klib/text.h>
+
 #include <sysalloc.h>
 
 #include <limits.h>
@@ -63,6 +72,161 @@ LIB_EXPORT rc_t CC KDBManagerMakeRead ( const KDBManager **mgrp, const KDirector
 }
 
 
+/*
+ * Resolve using manager, possibly against this directory, using or not uri
+ * accession resolution of those dangerous formatted path thingies
+ *
+
+
+
+ * 1. If naked accession or uri accession resolve to local, 
+
+
+ * self                         = a kdbmanager
+ * disable_accession_resolution = turn off VResolver usage for accessions
+ *                                read versus create/upate 
+ * resolved+path                = a vpath created based on text path
+ * fmt                          = our scary interface that is 'sprintf'ish
+ * args                         = goes with the fmt
+ *
+ * NOTE: as usual a path with a '%' becomes broken at unsuspected times
+ */
+rc_t KDBManagerResolveVPathInt (const KDBManager * self, 
+                                bool disable_accession_resolution,
+                                VPath ** resolved_path, 
+                                const VPath * path)
+{
+    uint32_t flags;
+
+    assert (self != NULL);
+    assert (resolved_path != NULL);
+    assert (path != NULL);
+
+    flags = disable_accession_resolution
+        ? vfsmgr_rflag_no_acc
+        : vfsmgr_rflag_kdb_acc;
+
+    return VFSManagerResolvePath (self->vfsmgr, 
+                                  flags,
+                                  path, resolved_path);
+}
+
+
+rc_t KDBManagerVResolveVPath (const KDBManager * self, 
+                                bool disable_accession_resolution,
+                                VPath ** resolved_path, 
+                                const VPath * path)
+{
+    return KDBManagerResolveVPathInt (self, disable_accession_resolution,
+                                      resolved_path, path);
+}
+
+
+rc_t KDBManagerVResolvePath (const KDBManager * self, 
+                             bool disable_accession_resolution,
+                             VPath ** resolved_path, 
+                             const char * fmt, va_list args)
+{
+    VPath * p;
+    rc_t rc;
+
+    if (resolved_path == NULL)
+        return RC (rcDB, rcMgr, rcResolving, rcParam, rcNull);
+
+    *resolved_path = NULL;
+
+    if (self == NULL)
+        return RC (rcDB, rcMgr, rcResolving, rcSelf, rcNull);
+
+    if ((fmt == NULL) || (fmt[0] == '\0'))
+        return RC (rcDB, rcMgr, rcResolving, rcParam, rcNull);
+
+    rc = VPathMakeFmt (&p, fmt, args);
+    if (rc == 0)
+    {
+        rc = KDBManagerVResolveVPath (self, disable_accession_resolution,
+                                      resolved_path, p);
+        VPathRelease (p);
+    }
+    return rc;
+}
+
+rc_t KDBManagerVResolvePathRelativeDir (const KDBManager * self, const KDirectory * dir,
+                                        bool disable_accession_resolution,
+                                        VPath ** resolved_path, 
+                                        const char * fmt, va_list args)
+{
+    VPath * p;
+    rc_t rc;
+
+    if (resolved_path == NULL)
+        return RC (rcDB, rcMgr, rcResolving, rcParam, rcNull);
+
+    *resolved_path = NULL;
+
+    if (self == NULL)
+        return RC (rcDB, rcMgr, rcResolving, rcSelf, rcNull);
+
+    if ((fmt == NULL) || (fmt[0] == '\0'))
+        return RC (rcDB, rcMgr, rcResolving, rcParam, rcNull);
+
+    rc = VPathMakeFmt (&p, fmt, args);
+    if (rc == 0)
+    {
+        rc = KDBManagerVResolveVPath (self, disable_accession_resolution,
+                                      resolved_path, p);
+        VPathRelease (p);
+    }
+    return rc;
+}
+
+
+rc_t KDBManagerResolvePathRelativeDir (const KDBManager * self,
+                                       const KDirectory * dir,
+                                       bool disable_accession_resolution,
+                                       VPath ** resolved_path, const char * fmt, ...)
+{
+    va_list args;
+    rc_t rc;
+
+    va_start (args, fmt);
+
+    rc = KDBManagerVResolvePathRelativeDir (self, dir, 
+                                            disable_accession_resolution,
+                                            resolved_path, fmt, args);
+    va_end (args);
+    return rc;
+}
+
+
+
+/* KDBHdrValidate
+ *  validates that a header sports a supported byte order
+ *  and that the version is within range
+ */
+rc_t KDBHdrValidate ( const KDBHdr *hdr, size_t size,
+    uint32_t min_vers, uint32_t max_vers )
+{
+    assert ( hdr != NULL );
+
+    if ( size < sizeof * hdr )
+        return RC ( rcDB, rcHeader, rcValidating, rcData, rcCorrupt );
+
+    if ( hdr -> endian != eByteOrderTag )
+    {
+        if ( hdr -> endian == eByteOrderReverse )
+            return RC ( rcDB, rcHeader, rcValidating, rcByteOrder, rcIncorrect );
+        return RC ( rcDB, rcHeader, rcValidating, rcData, rcCorrupt );
+    }
+
+    if ( hdr -> version < min_vers || hdr -> version > max_vers )
+        return RC ( rcDB, rcHeader, rcValidating, rcHeader, rcBadVersion );
+
+    return 0;
+}
+
+
+
 /* Writable
  *  returns 0 if object is writable
  *  or a reason why if not
@@ -83,7 +247,7 @@ LIB_EXPORT rc_t CC KDBManagerVWritable ( const KDBManager *self, const char * pa
         rc = KDirectoryVResolvePath ( self -> wd, true, dbpath, sizeof dbpath, path, args );
         if ( rc == 0 )
         {
-            int type = KDBPathType ( self -> wd, path ) & ~ kptAlias;
+            int type = KDBPathType ( self -> wd, NULL, path ) & ~ kptAlias;
             switch ( type )
             {
             case kptDatabase:
@@ -134,23 +298,92 @@ LIB_EXPORT rc_t CC KDBManagerRunPeriodicTasks ( const KDBManager *self )
 
 
 /* PathType
- * check the path type of an object/directory path.
- * this is an extension of the KDirectoryPathType and will return
- * the KDirectory values if a path type is not specifically a
- * kdb object
+ *  check the path type of an object/directory path.
+ *  this is an extension of the KDirectoryPathType and will return
+ *  the KDirectory values if a path type is not specifically a
+ *  kdb object
  */
+LIB_EXPORT int CC KDBManagerPathTypeVP ( const KDBManager * self, const VPath * path )
+{
+    VPath * rpath;
+    int path_type;
+    rc_t rc;
+
+    path_type = kptBadPath;
+    if ((self != NULL) && (path != NULL))
+    {
+        /*
+         * resolve the possible relative path or accession into
+         * a final path we can open directly
+         */
+        rc = KDBManagerResolveVPathInt (self, false, &rpath, path);
+        if (rc == 0)
+        {
+            const KDirectory * dir;
+
+            /*
+             * Most KDBPathType values are based on 'directories'
+             * so try to open the resolved path as a directory
+             */
+            rc = VFSManagerOpenDirectoryReadDecrypt (self->vfsmgr, &dir, rpath);
+            if (rc == 0)
+            {
+                path_type = KDBPathTypeDir (dir, kptDir, NULL, ".");
+                KDirectoryRelease (dir);
+            }
+            /*
+             * If we couldn't open the path as a directory we 'might'
+             * have a KDB idx but we will only try that for a limitted
+             * set of uri schemes.
+             */
+            else
+            {
+                VPUri_t t;
+
+                rc = VPathGetScheme_t (rpath, &t);
+                if (rc == 0)
+                {
+                    switch (t)
+                    {
+                    default:
+                        break;
+                    case vpuri_ncbi_vfs:
+                    case vpuri_file:
+                    case vpuri_none:
+                    {
+                        char b [4 * 1024];
+                        size_t z;
+                        rc = VPathReadPath (path, b, sizeof b, &z);
+                        if (rc == 0)
+                            path_type = KDBPathType (self->wd, false, b);
+                        break;
+                    }}
+                }
+            }
+            VPathRelease (rpath);
+        }
+    }
+    return path_type;
+}
+
 
 LIB_EXPORT int CC KDBManagerVPathType ( const KDBManager * self, const char *path, va_list args )
 {
-    rc_t rc;
-    char     full [ 8192 ];
+    int path_type = kptBadPath;
 
-    rc = KDirectoryVResolvePath ( self->wd, true, full, sizeof full, path, args );
-    if (rc == 0)
+    if ((self != NULL) && (path != NULL))
     {
-        return KDBPathType ( self->wd, full );
+        VPath * vp;
+        rc_t rc;
+
+        rc = VPathMakeVFmt (&vp, path, args);
+        if (rc == 0)
+        {
+            path_type = KDBManagerPathTypeVP (self, vp);
+            VPathRelease (vp);
+        }
     }
-    return kptBadPath;
+    return path_type;
 }
 
 
diff --git a/libs/kdb/idxblk.c b/libs/kdb/idxblk.c
index 6f7bb84..e5c14cf 100644
--- a/libs/kdb/idxblk.c
+++ b/libs/kdb/idxblk.c
@@ -54,8 +54,8 @@ void KColConstBlockMapSwap ( KColConstBlockMap *self, uint32_t count, int type )
         ( ( uint64_t* ) self -> h . first ) [ 0 ] = bswap_64 ( self -> h . first [ 0 ] );
         break;
     case btypePredictable:
-        * ( ( uint64_t* ) & ( self -> h . pred ) -> pg ) = bswap_64 ( self -> h . pred -> pg );
-        * ( ( uint32_t* ) & ( self -> h . pred ) -> sz ) = bswap_32 ( self -> h . pred -> sz );
+        * ( uint64_t* ) & ( self -> h . pred -> pg ) = bswap_64 ( self -> h . pred -> pg );
+        * ( uint32_t* ) & ( self -> h . pred -> sz ) = bswap_32 ( self -> h . pred -> sz );
         break;
     }
 
@@ -293,7 +293,7 @@ void KColIdxBlockGet3 ( const KColIdxBlock *self,
 {
     * sz = self -> pg . h . pred [ 0 ] . sz;
     * pg = self -> pg . h . pred [ 0 ] . pg +
-        ( self -> pg . h . pred [ 0 ] . sz * idx );
+        ( (uint64_t) self -> pg . h . pred [ 0 ] . sz * idx );
 }
 
 /* RewriteColumns
@@ -509,7 +509,8 @@ rc_t KColIdxBlockInit ( KColIdxBlock *self,
     if ( bswap )
     {
         KColConstBlockMapSwap ( & self -> id, count, bloc -> u . blk . id_type );
-        KColConstBlockMapSwap ( & self -> pg, count, bloc -> u . blk . pg_type );
+        if ( self -> pg . h . p != self -> id . h . p )
+            KColConstBlockMapSwap ( & self -> pg, count, bloc -> u . blk . pg_type );
     }
 
     /* check for need to rewrite columns */
diff --git a/libs/kdb/index-cmn.h b/libs/kdb/index-cmn.h
index b7b5357..ff2dc6f 100644
--- a/libs/kdb/index-cmn.h
+++ b/libs/kdb/index-cmn.h
@@ -223,7 +223,7 @@ uint32_t KPTrieIndexID2Ord_v2 ( const KPTrieIndex_v2 *self, int64_t id );
 rc_t KPTrieIndexCheckConsistency_v2 ( const KPTrieIndex_v2 *self,
     int64_t *start_id, uint64_t *id_range, uint64_t *num_keys,
     uint64_t *num_rows, uint64_t *num_holes,
-    struct KIndex const *outer, bool key2id, bool id2key, bool all_ids );
+    struct KIndex const *outer, bool key2id, bool id2key, bool all_ids, bool convertFromV1 );
 
 
 /*--------------------------------------------------------------------------
@@ -244,7 +244,8 @@ rc_t KTrieIndexFind_v2 ( const KTrieIndex_v2 *self,
     uint32_t *span,
 #endif
     int ( CC * custom_cmp ) ( const void *item, struct PBSTNode const *n, void *data ),
-    void * data );
+    void * data,
+    bool convertFromV1);
 
 /* projection index id to key-string */
 #if V2FIND_RETURNS_SPAN
@@ -260,7 +261,7 @@ rc_t KTrieIndexProject_v2 ( const KTrieIndex_v2 *self,
 rc_t KTrieIndexCheckConsistency_v2 ( const KTrieIndex_v2 *self,
     int64_t *start_id, uint64_t *id_range, uint64_t *num_keys,
     uint64_t *num_rows, uint64_t *num_holes,
-    struct KIndex const *outer, bool key2id, bool id2key, bool all_ids );
+    struct KIndex const *outer, bool key2id, bool id2key, bool all_ids, bool convertFromV1 );
 
 
 /*--------------------------------------------------------------------------
diff --git a/libs/kdb/index.c b/libs/kdb/index.c
index 24fc6bd..2dbb325 100644
--- a/libs/kdb/index.c
+++ b/libs/kdb/index.c
@@ -66,6 +66,7 @@ struct KIndex
         KTrieIndex_v2 txt234;
         KU64Index_v3  u64_3;
     } u;
+    bool converted_from_v1;
     uint8_t type;
     char path [ 1 ];
 };
@@ -102,7 +103,7 @@ rc_t KIndexWhack ( KIndex *self )
         self -> mgr = NULL;
 
         /* complete */
-        rc = RC ( rcDB, rcIndex, rcDestroying, rcIndex, rcBadVersion );
+        rc = SILENT_RC ( rcDB, rcIndex, rcDestroying, rcIndex, rcBadVersion );
 
         switch ( self -> type )
         {
@@ -270,6 +271,9 @@ rc_t KIndexAttach ( KIndex *self, const KMMap *mm, bool *byteswap )
                 switch ( hdr -> version )
                 {
                 case 1:
+#if KDBINDEXVERS != 1
+                    self -> converted_from_v1 = true;
+#endif
                 case 2:
                     self -> type = kitText;
                     break;
@@ -638,7 +642,7 @@ LIB_EXPORT rc_t CC KIndexConsistencyCheck ( const KIndex *self, uint32_t level,
             case 4:
                 rc = KTrieIndexCheckConsistency_v2 ( & self -> u . txt234,
                     start_id, id_range, num_keys, num_rows, num_holes,
-                    self, key2id, id2key, all_ids );
+                    self, key2id, id2key, all_ids, self -> converted_from_v1 );
                 break;
             default:
                 return RC ( rcDB, rcIndex, rcValidating, rcIndex, rcBadVersion );
@@ -697,9 +701,9 @@ LIB_EXPORT rc_t CC KIndexFindText ( const KIndex *self, const char *key, int64_t
         case 3:
         case 4:
 #if V2FIND_RETURNS_SPAN
-            rc = KTrieIndexFind_v2 ( & self -> u . txt234, key, start_id, & span, custom_cmp, data );
+            rc = KTrieIndexFind_v2 ( & self -> u . txt234, key, start_id, & span, custom_cmp, data, self -> converted_from_v1 );
 #else
-            rc = KTrieIndexFind_v2 ( & self -> u . txt234, key, start_id, custom_cmp, data );
+            rc = KTrieIndexFind_v2 ( & self -> u . txt234, key, start_id, custom_cmp, data, self -> converted_from_v1 );
 #endif
             break;
         default:
@@ -755,9 +759,9 @@ LIB_EXPORT rc_t CC KIndexFindAllText ( const KIndex *self, const char *key,
         case 3:
         case 4:
 #if V2FIND_RETURNS_SPAN
-            rc = KTrieIndexFind_v2 ( & self -> u . txt234, key, & id64, & span, NULL, NULL );
+            rc = KTrieIndexFind_v2 ( & self -> u . txt234, key, & id64, & span, NULL, NULL, self -> converted_from_v1 );
 #else
-            rc = KTrieIndexFind_v2 ( & self -> u . txt234, key, & id64, NULL, NULL );
+            rc = KTrieIndexFind_v2 ( & self -> u . txt234, key, & id64, NULL, NULL, self -> converted_from_v1 );
 #endif
             if ( rc == 0 )
                 rc = ( * f ) ( id64, span, data );
diff --git a/libs/kdb/kdb-priv.h b/libs/kdb/kdb-priv.h
index f23fa3e..f9440f1 100644
--- a/libs/kdb/kdb-priv.h
+++ b/libs/kdb/kdb-priv.h
@@ -39,15 +39,16 @@
 extern "C" {
 #endif
 
-/*--------------------------------------------------------------------------
- * KDBPathType
+struct KDirectory;
+struct KDBManager;
+
+/*
+ * This symbol is inserted where the KDB is being tweaked to allow
+ * VFS URI syntax in opening KDB database objects initially to support
+ * krypto passwords more fully.  By specifying the password source
+ * individually for opens two KDB objects with different passwords can be opened.
  */
-enum
-{
-    kptMetadata = kptColumn + 1,
-    kptPrereleaseTbl
-};
-
+#define SUPPORT_VFS_URI 1
 
 /*--------------------------------------------------------------------------
  * KDB utility
@@ -57,7 +58,8 @@ enum
 /* PathType
  *  checks type of path
  */
-int KDBPathType ( const KDirectory *dir, const char *path );
+int KDBPathTypeDir ( const struct KDirectory *dir, int type,bool *zombies, const char *path );
+int KDBPathType ( const struct KDirectory *dir, bool *zombies, const char *path );
 
 /* OpenPathType
  * Opens a path if it is of the specified type.  Even if it is an archive file
@@ -73,33 +75,46 @@ int KDBPathType ( const KDirectory *dir, const char *path );
  * archive that is of the requested type.  An archive will have been opened
  * but reshut if dpdir is NULL.
  */ 
-rc_t KDBOpenPathTypeRead ( const KDirectory * dir, const char * path, 
-    const KDirectory ** dpdir, int pathtype, int * realpathtype );
+rc_t KDBOpenPathTypeRead ( const struct KDBManager * mgr, const struct KDirectory * dir, const char * path, 
+    const struct KDirectory ** dpdir, int pathtype, int * realpathtype, bool try_srapath );
 
 /* Writable
  *  examines a directory structure for any "lock" files
  *  examines a file for ( any ) write permission
  */
-rc_t KDBWritable ( const KDirectory *dir, const char *path );
+rc_t KDBWritable ( const struct KDirectory *dir, const char *path );
 
 /* GetObjModDate
  *  extract mod date from a path
  */
-rc_t KDBGetObjModDate ( const KDirectory *dir, KTime_t *mtime );
+rc_t KDBGetObjModDate ( const struct KDirectory *dir, KTime_t *mtime );
 
 /* GetPathModDate
  *  extract mod date from a path
  */
-rc_t KDBVGetPathModDate ( const KDirectory *dir,
+rc_t KDBVGetPathModDate ( const struct KDirectory *dir,
     KTime_t *mtime, const char *path, va_list args );
 
+/* KDBMakeSubPath
+ *  adds a namespace to path spec
+ */
+rc_t KDBMakeSubPath ( struct KDirectory const *dir,
+    char *subpath, size_t subpath_max, const char *ns,
+    uint32_t ns_size, const char *path, ... );
 /* VMakeSubPath
  *  adds a namespace to path spec
  */
-rc_t KDBVMakeSubPath ( const KDirectory *dir,
+rc_t KDBVMakeSubPath ( const struct KDirectory *dir,
     char *subpath, size_t subpath_max, const char *ns,
     uint32_t ns_size, const char *path, va_list args );
 
+
+/* KDBIsPathUri
+ * A hack to get some of VFS into KDB that is too tightly bound to KFS
+ */
+bool KDBIsPathUri (const char * path);
+
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/libs/kdb/kdb.c b/libs/kdb/kdb.c
index 2efc91f..db307e3 100644
--- a/libs/kdb/kdb.c
+++ b/libs/kdb/kdb.c
@@ -25,29 +25,48 @@
 */
 
 #include <kdb/extern.h>
-#include <va_copy.h>
 
 #include "kdb-priv.h"
 #include "kdbfmt-priv.h"
+#include "dbmgr-priv.h"
+
+#include <krypto/key.h>
+#include <krypto/encfile.h>
+#include <krypto/wgaencrypt.h>
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <vfs/resolver.h>
+#include <vfs/manager-priv.h>
+#include <sra/srapath.h>
 
 #include <kfs/kfs-priv.h>
 #include <kfs/directory.h>
 #include <kfs/file.h>
-#include <kfs/tar.h>
 #include <kfs/arc.h>
+#include <kfs/tar.h>
+#include <kfs/sra.h>
 #include <kfs/kfs-priv.h>
 #include <klib/container.h>
 #include <klib/text.h>
 #include <klib/rc.h>
 #include <sysalloc.h>
 
+#include <va_copy.h>
+
 #include <limits.h>
 #include <stdlib.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdio.h>
 #include <string.h>
 #include <ctype.h>
 #include <assert.h>
 #include <errno.h>
 
+#ifndef SUPPORT_VFS_URI
+#define SUPPORT_VFS_URI 0
+#endif
 
 /*--------------------------------------------------------------------------
  * KDB utility
@@ -57,6 +76,8 @@
  *  validates that a header sports a supported byte order
  *  and that the version is within range
  */
+/* this is included to make kdb.c vs. wkdb.c file comparisons easier in [x]emacs.*/
+#if NOT_USED_IN_READ_ONLY_SIDE
 rc_t KDBHdrValidate ( const KDBHdr *hdr, size_t size,
     uint32_t min_vers, uint32_t max_vers )
 {
@@ -77,6 +98,7 @@ rc_t KDBHdrValidate ( const KDBHdr *hdr, size_t size,
 
     return 0;
 }
+#endif
 
 /* KDBPathType
  *  checks type of path
@@ -98,13 +120,14 @@ enum ScanBits
     scan_ofile  = ( 1 << 12 ),
     scan_meta   = ( 1 << 13 ),
     scan_skey   = ( 1 << 14 ),
-    scan_sealed = ( 1 << 15 )
+    scan_sealed = ( 1 << 15 ),
+    scan_zombie = ( 1 << 16 )
 };
 
 static
 rc_t CC scan_dbdir ( const KDirectory *dir, uint32_t type, const char *name, void *data )
 {
-    int *bits = data;
+    uint32_t *bits = data;
 
     type &= kptAlias - 1;
 
@@ -182,112 +205,139 @@ rc_t CC scan_dbdir ( const KDirectory *dir, uint32_t type, const char *name, voi
 
         * bits |= scan_ofile;
     }
-
+    else if (type == kptZombieFile )
+    {
+        * bits |= scan_zombie;
+    }
+    
     return 0;
 }
 
-int KDBPathType ( const KDirectory *dir, const char *path )
-{
-    const char *leaf, *parent;
 
+int KDBPathTypeDir (const KDirectory * dir, int type, bool * pHasZombies, const char * path)
+{
+    const char * leaf, * parent;
+    uint32_t bits;
     rc_t rc;
-    int bits;
-    int type = KDirectoryVPathType ( dir, path, NULL );
-    switch ( type )
+
+    bits = 0;
+
+    assert ((type == kptDir) || (type == (kptDir|kptAlias)));
+
+    rc = KDirectoryVVisit ( dir, false, scan_dbdir, & bits, path, NULL );
+    if ( rc == 0 ) do
     {
-    case kptDir:
-    case kptDir | kptAlias:
-        bits = 0;
-        rc = KDirectoryVVisit ( dir, false, scan_dbdir, & bits, path, NULL );
-        if ( rc == 0 )
+        if ( ( bits & scan_zombie ) != 0 ) {
+            bits &= ~scan_zombie;
+            if (pHasZombies)
+                *pHasZombies = true;
+        }
+        /* look for a column */
+        if ( ( bits & scan_idxN ) != 0 &&
+             ( bits & ( scan_data | scan_dataN ) ) != 0 )
         {
-            /* look for a column */
-            if ( ( bits & scan_idxN ) != 0 &&
-                 ( bits & ( scan_data | scan_dataN ) ) != 0 )
-            {
-                if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
-                    type += kptColumn - kptDir;
-                break;
-            }
+            if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
+                type += kptColumn - kptDir;
+            break;
+        }
 
-            /* look for a table */
-            if ( ( bits & scan_col ) != 0 )
+        /* look for a table */
+        if ( ( bits & scan_col ) != 0 )
+        {
+            /* can't have sub-tables or a db */
+            if ( ( bits & ( scan_db | scan_tbl ) ) == 0 )
             {
-                /* can't have sub-tables or a db */
-                if ( ( bits & ( scan_db | scan_tbl ) ) == 0 )
-                {
-                    /* look for an old-structure table */
-                    if ( ( bits & ( scan_meta | scan_md ) ) == scan_meta ||
-                         ( bits & ( scan_skey | scan_idx ) ) == scan_skey )
-                        type += kptPrereleaseTbl - kptDir;
-                    else
-                        type += kptTable - kptDir;
-                }
-                break;
+                /* look for an old-structure table */
+                if ( ( bits & ( scan_meta | scan_md ) ) == scan_meta ||
+                     ( bits & ( scan_skey | scan_idx ) ) == scan_skey )
+                    type += kptPrereleaseTbl - kptDir;
+                else
+                    type += kptTable - kptDir;
             }
+            break;
+        }
 
-            /* look for metadata */
-            if ( ( bits & ( scan_cur | scan_rNNN ) ) != 0 )
-            {
-                if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
-                    type += kptMetadata - kptDir;
-                break;
-            }
+        /* look for metadata */
+        if ( ( bits & ( scan_cur | scan_rNNN ) ) != 0 )
+        {
+            if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
+                type += kptMetadata - kptDir;
+            break;
+        }
 
-            /* look for a database */
-            if ( ( bits & scan_tbl ) != 0 )
-            {
-                if ( ( bits & scan_col ) == 0 )
-                    type += kptDatabase - kptDir;
-                break;
-            }
+        /* look for a database */
+        if ( ( bits & scan_tbl ) != 0 )
+        {
+            if ( ( bits & scan_col ) == 0 )
+                type += kptDatabase - kptDir;
+            break;
+        }
 
-            /* look for a structured column */
-            if ( ( bits & scan_odir ) != 0 )
+        /* look for a structured column */
+        if ( ( bits & scan_odir ) != 0 )
+        {
+            leaf = strrchr ( path, '/' );
+            if ( leaf != NULL )
             {
-                leaf = strrchr ( path, '/' );
-                if ( leaf != NULL )
-                {
-                    parent = string_rchr ( path, leaf - path, '/' );
-                    if ( parent ++ == NULL )
-                        parent = path;
-                    if ( memcmp ( parent, "col/", 4 ) != 0 )
-                        break;
+                parent = string_rchr ( path, leaf - path, '/' );
+                if ( parent ++ == NULL )
+                    parent = path;
+                if ( memcmp ( parent, "col/", 4 ) != 0 )
+                    break;
 
-                    bits = 0;
-                    if ( KDirectoryVVisit ( dir, 1, scan_dbdir, & bits, path, NULL ) == 0 )
+                bits = 0;
+                if ( KDirectoryVVisit ( dir, 1, scan_dbdir, & bits, path, NULL ) == 0 )
+                {
+                    if ( ( bits & scan_idxN ) != 0 &&
+                         ( bits & ( scan_data | scan_dataN ) ) != 0 )
                     {
-                        if ( ( bits & scan_idxN ) != 0 &&
-                             ( bits & ( scan_data | scan_dataN ) ) != 0 )
-                        {
-                            if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
-                                type += kptColumn - kptDir;
-                            break;
-                        }
+                        if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
+                            type += kptColumn - kptDir;
+                        break;
                     }
                 }
             }
         }
+    } while (0);
+
+    return type;
+}
+
+
+int KDBPathType ( const KDirectory *dir, bool *pHasZombies, const char *path )
+{
+    const char *leaf, *parent;
+
+
+    rc_t rc;
+    int type = KDirectoryVPathType ( dir, path, NULL );
+    
+    if (pHasZombies)
+        *pHasZombies = false;
+
+    switch ( type )
+    {
+    case kptDir:
+    case kptDir | kptAlias:
+        type = KDBPathTypeDir (dir, type, pHasZombies, path);
         break;
 
     case kptFile:
     case kptFile | kptAlias:
     {
         /* if we hit a file first try it as an archive */
-        rc_t rc;
         const KDirectory * ldir;
 
         rc = KDirectoryOpenSraArchiveRead_silent ( dir, &ldir, false, path );
         if ( rc != 0 )
             rc = KDirectoryOpenTarArchiveRead_silent ( dir, &ldir, false, path );
-
         /* it was an archive so recur */
-        if (rc == 0)
+        if ( rc == 0 )
         {
             /* recheck this newly opened directory for KDB/KFS type */
             int type2;
 
-            type2 = KDBPathType ( ldir, "." );
+            type2 = KDBPathType ( ldir, NULL, "." );
             if ((type2 != kptDir) || (type != (kptDir|kptAlias)))
                 type = type2;
 
@@ -313,106 +363,335 @@ int KDBPathType ( const KDirectory *dir, const char *path )
 }
 
 
-rc_t KDBOpenPathTypeRead ( const KDirectory * dir, const char * path, 
-    const KDirectory ** pdir, int pathtype, int * ppathtype )
+
+#if SUPPORT_VFS_URI
+#else
+/* return configured password as ASCIZ
+ * opertates on vfs/kfs/kfg objects, not kdb objects */
+static
+rc_t KDBOpenFileGetPassword (char * pw, size_t pwz)
 {
+    VFSManager * mgr;
     rc_t rc;
-    uint32_t dtype;
-    int type;
-    const KDirectory * ldir;
 
-    /* set local directory pointer to error state NULL */
-    ldir = NULL;
-    rc = 0;
+    assert (pw);
+    assert (pwz);
 
-    type = dtype = KDirectoryPathType (dir, path);
+    pw[0] = '\0';
 
-    switch (dtype)
+    rc = VFSManagerMake (&mgr);
+    if (rc)
+        ;                      /* failure to make VFS manager: pass along rc */
+    else
     {
-    case kptDir:
-    case kptDir | kptAlias:
-        type = KDBPathType ( dir, path );
+        size_t pwfz;
+        char pwf [4096 + 1];
 
-        if (( type == pathtype ) || (type == (pathtype|kptAlias)))
+        rc = VFSManagerGetConfigPWFile (mgr, pwf, sizeof (pwf) - 1, &pwfz);
+        if (rc)
+            /* failure to get password file path: tweak rc */
+            rc = RC (rcDB, rcMgr, rcOpening, rcEncryptionKey, rcNotFound);
+
+        else
         {
-            rc = KDirectoryVOpenDirUpdate ( ( KDirectory * ) dir, ( KDirectory ** ) & ldir, false, path, NULL );
-            if ( rc != 0)
+            VPath * pwp;
+
+            pwf [pwfz] = '\0'; /* force to ASCIZ */
+
+            rc = VPathMakeSysPath (&pwp, pwf);
+
+            if (rc)
+                ;       /* failure to construct a path from the string */
+            
+            else
             {
-                rc = KDirectoryVOpenDirRead ( dir, &ldir, false, path, NULL );
+                const KFile * pwf;
+          
+                rc = VFSManagerOpenFileRead (mgr, &pwf, pwp);
+                if (rc)
+                    /* failure to open password file */
+                    rc = RC (rcDB, rcMgr, rcOpening, rcEncryptionKey, rcNotOpen);
+
+                else
+                {
+                    size_t z;
+                    char pwb [4098]; /* arbitrarily using 4096 as maximum
+                                        allowed length */
+
+                    /* at this point we are only getting the password from a 
+                     * file but in the future if we can get it from a pipe of
+                     * some sort we can't count on the ReadAll to really know
+                     * if we hit end of file and not just a pause in the
+                     * streaming.  VFS/KFS 2 will have to fix this somehow
+                     */
+
+                    rc = KFileReadAll (pwf, 0, pwb, sizeof pwb, &z);
+                    if (rc)
+                        ;       /* failure to read password file: pass along rc */
+                    else
+                    {
+                        /* trim off EOL if present */
+                        char * pc;
+
+                        pwb[z] = '\0';   /* force ASCIZ */
+
+                        pc = string_chr (pwb, z, '\r');
+                        if (pc)
+                        {
+                            *pc = '\0';
+                            z = 1 + pc - pwb;
+                        }
+                        pc = string_chr (pwb, z, '\n');
+                        if (pc)
+                        {
+                            *pc = '\0';
+                            z = 1 + pc - pwb;
+                        }
+                        if (z == 0)
+                            rc = RC (rcDB, rcMgr, rcOpening, rcEncryptionKey, rcTooShort);
+
+                        else if (pwz < z) /* pwz came in as 4096 */
+                            rc = RC (rcDB, rcMgr, rcOpening, rcEncryptionKey, rcTooLong);
+
+                        else
+                        {
+                            memmove (pw, pwb, z+1);
+                        }
+                    }
+                    KFileRelease (pwf);
+                }
+                VPathRelease (pwp);
             }
         }
-        break;
+        VFSManagerRelease (mgr);
+    }
+    return rc;
+}
 
-    case kptFile:
-    case kptFile | kptAlias:
-        rc = KDirectoryOpenSraArchiveRead_silent ( dir, &ldir, false, path );
-        if ( rc != 0  )
-            rc = KDirectoryOpenTarArchiveRead_silent ( dir, &ldir, false, path );
-        if ( rc == 0 )
+
+/* not KDB specific - just uses vfs/krypto/kfs objects */
+static
+rc_t KDBOpenFileAsDirectory (const KDirectory * dir,
+                             const char * path, 
+                             const KDirectory ** pdir,
+                             uint32_t rcobj)
+{
+    const KFile * file;
+    const KFile * f;
+    const KDirectory * ldir;
+    bool encrypted = false;
+
+    rc_t rc;
+
+    *pdir = NULL;
+
+    rc = KDirectoryOpenFileRead (dir, &file, path);
+    if (rc == 0)
+    {
+        rc = KFileRandomAccess(file);
+        if (rc)
+            rc = RC (rcDB, rcMgr, rcOpening, rcobj, rcUnsupported);
+        else
         {
-            /* recheck this newly opened directory for KDB/KFS type */
-            type = KDBPathType ( ldir, "." );
+            size_t tz;
+            char tbuff [4096];
+            char pbuff [4096 + 1];
 
-            /* it its not the KDB type we wanted fail */
-            if (( type != pathtype ) && (type != (pathtype | kptAlias )))
+            rc = KFileReadAll (file, 0, tbuff, sizeof tbuff, &tz);
+            if (rc == 0)
             {
-                KDirectoryRelease (ldir);
-                ldir = NULL;
-                rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcIncorrect );
+                if (KFileIsEnc (tbuff, tz) == 0)
+                {
+                    encrypted = true;
+
+                    rc = KDBOpenFileGetPassword (pbuff, sizeof (pbuff) - 1);
+                    if (rc == 0)
+                    {
+                        KKey key;
+
+                        rc = KKeyInitRead (&key, kkeyAES128, pbuff, string_size (pbuff));
+                        if (rc == 0)
+                        {
+                            rc = KEncFileMakeRead (&f, file, &key);
+                            if (rc == 0)
+                            {
+                                /* KEncFileMakeRead adds a reference */
+                                KFileRelease (file);
+                                file = f;
+                                rc = KFileReadAll (file, 0, tbuff, sizeof tbuff, &tz);
+                            }
+                        }
+                    }
+                }
+                else if (KFileIsWGAEnc (tbuff, tz) == 0)
+                {
+                    encrypted = true;
+
+                    rc = KDBOpenFileGetPassword (pbuff, sizeof (pbuff) - 1);
+                    if (rc == 0)
+                    {
+                        rc = KFileMakeWGAEncRead (&f, file, pbuff, string_size (pbuff));
+                        if (rc == 0)
+                        {
+                            /* KFileMakeWGAEncRead adds a reference */
+                            KFileRelease (file);
+                            file = f;
+                            rc = KFileReadAll (file, 0, tbuff, sizeof tbuff, &tz);
+                        }
+                    }
+                }
+                /* else not a handled encryption or unencrypted: we can't distinguish too much */
+
+                if (rc == 0)
+                {
+                    if (KFileIsSRA (tbuff, tz) == 0)
+                    {
+                        rc = KDirectoryOpenSraArchiveReadUnbounded_silent_preopened (dir,
+                                                                                     &ldir,
+                                                                                     false,
+                                                                                     file,
+                                                                                     path);
+                    }
+                    else
+                    {
+                        rc = KDirectoryOpenTarArchiveRead_silent_preopened (dir, &ldir, false,
+                                                                            file, path);
+                    }
+
+                    /* not an archive type we handle or a bad archive */
+                    if (rc)
+                    {
+                        if (encrypted)
+                            rc = RC ( rcDB, rcMgr, rcOpening, rcEncryptionKey, rcIncorrect );
+                        else
+                            rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcIncorrect );
+                    }
+                    else
+                    {
+                        /*
+                         * release our ownership of the KFile that but archive will 
+                         * keep theirs
+                         */
+                        KFileRelease (file);
+                        *pdir = ldir;
+                        return 0;
+                    }
+                }
             }
         }
-        else if ( rc != 0 )
-        {
-            rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcIncorrect );
-        }
-        break;
+        KFileRelease (file);
     }
+    return rc;
+}
+#endif
+
 
-    if (( rc != 0 ) || (( type != pathtype ) && (type != (pathtype|kptAlias))))
+static rc_t KDBOpenPathTypeReadInt ( const KDBManager * mgr, const KDirectory * dir, const char * path,
+                                     const KDirectory ** pdir, int * type,
+                                     int pathtype, uint32_t rcobj, bool try_srapath )
+{
+    VFSManager * vmgr = mgr->vfsmgr;
+    const KDirectory * ldir = NULL;
+    rc_t rc = 0;
+
+    /* object relative opens can be done using KFS - we hacked in VFS after all */
+    if (! try_srapath)
     {
-        /* tune the error message based on path type */
-        uint32_t obj;
-        switch ( pathtype )
-        {
-        default:
-            obj = rcType;
-            break;
-        case kptTable:
-        case kptTable | kptAlias:
-        case kptPrereleaseTbl:
-        case kptPrereleaseTbl | kptAlias:
-            obj = rcTable;
-            break;
-        case kptColumn:
-        case kptColumn | kptAlias:
-            obj = rcColumn;
-            break;
-        case kptDatabase:
-        case kptDatabase | kptAlias:
-            obj = rcDatabase;
-            break;
-        }
-        switch ( type )
+        rc = KDirectoryOpenDirUpdate ((KDirectory*)dir, (KDirectory**)pdir, false, path);
+        if ((rc) && (GetRCState(rc) != rcNotFound))
+            rc = KDirectoryOpenDirRead (dir, pdir, false, path);
+    }
+    else
+    {
+        VPath * vpath;
+
+        /*
+         * We've got to decide if the path coming in is a full or relative
+         * path and if relative make it relative to dir or possibly its a srapath
+         * accession
+         *
+         */
+        rc = VPathMakeDirectoryRelative ( &vpath, dir, path, NULL );
+        if ( rc == 0 )
         {
-        case kptNotFound:
-            rc =  RC ( rcDB, rcMgr, rcOpening, obj, rcNotFound );
-            break;
-        case kptBadPath:
-            rc =  RC ( rcDB, rcMgr, rcOpening, rcPath, rcInvalid );
-            break;
-        default:
-            rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcIncorrect );
-            break;
+            rc = VFSManagerOpenDirectoryReadDirectoryRelativeDecrypt ( vmgr, dir, &ldir, vpath );
+
+            if ( rc == 0 )
+            {
+                *type = (~kptAlias) & KDBPathType ( ldir, NULL, "." );
+
+                /* just a directory, not a kdb type */
+                if ( *type == kptDir )
+                    rc = RC (rcDB, rcMgr, rcOpening, rcPath, rcIncorrect);
+
+                else if ( *type != pathtype )
+                {
+                    KDirectoryRelease( ldir );
+                    rc = RC ( rcDB, rcMgr, rcOpening, rcobj, rcIncorrect );
+                }
+                else
+                {
+                    if ( pdir != NULL )
+                        *pdir = ldir;
+                    else
+                        KDirectoryRelease( ldir );
+                }
+            }
+            VPathRelease ( vpath );
         }
     }
-    if ((rc != 0) || ((ldir != NULL) && (pdir == NULL)))
+    return rc;
+}
+
+rc_t KDBOpenPathTypeRead ( const KDBManager * mgr, const KDirectory * dir, const char * path, 
+    const KDirectory ** pdir, int pathtype, int * ppathtype, bool try_srapath )
+{
+    const KDirectory *ldir;
+    rc_t rc = 0;
+    uint32_t rcobj;
+    int type = kptNotFound; /* bogus? */
+
+/*     KOutMsg ("%s: %s\n", __func__, path); */
+
+    if ( pdir != NULL )
+        *pdir = NULL;
+    if ( ppathtype != NULL )
+        *ppathtype = type;
+
+    switch (pathtype & ~ kptAlias) /* tune the error message based on path type */
     {
-        KDirectoryRelease ( ldir );
-        ldir = NULL;
+        /* we'll hit this if we don't track defines in kdb/manager.h */
+    default:
+        rc = RC (rcDB, rcMgr, rcOpening, rcType, rcInvalid);
+        return rc;
+
+    case kptTable:
+    case kptPrereleaseTbl:
+        rcobj = rcTable;
+        break;
+
+    case kptColumn:
+        rcobj = rcColumn;
+        break;
+
+    case kptDatabase:
+    case kptDatabase | kptAlias:
+        rcobj = rcDatabase;
+        break;
     }
 
-    if (pdir != NULL)
-        *pdir = ldir;
+    rc = KDBOpenPathTypeReadInt( mgr, dir, path, &ldir, &type, pathtype, rcobj, try_srapath );
+
+    if (rc == 0)
+    {
+        if ( ppathtype != NULL )
+            *ppathtype = type;
+
+        if (pdir != NULL)
+            *pdir = ldir;
+        else
+            KDirectoryRelease (ldir);
+    }
 
     return rc;
 }
@@ -426,6 +705,12 @@ rc_t KDBWritable ( const KDirectory *dir, const char *path )
     uint32_t access;
     rc_t rc;
 
+    /* protect us from bad parameters */
+    if (dir == NULL)
+        return RC (rcDB, rcPath, rcAccessing, rcDirectory, rcNull);
+    if (path == NULL)
+        return RC (rcDB, rcPath, rcAccessing, rcPath, rcNull);
+
     /* we have to be able to check the access if it is to be writable */
     rc = KDirectoryVAccess ( dir, & access, path, NULL );
     if ( rc == 0 )
@@ -463,12 +748,11 @@ rc_t KDBWritable ( const KDirectory *dir, const char *path )
             rc = RC ( rcDB, rcPath, rcAccessing, rcPath, rcIncorrect );
         }
     }
-
     return rc;
 }
 
 
-LIB_EXPORT bool CC KDBIsLocked ( const KDirectory *dir, const char *path )
+bool KDBIsLocked ( const KDirectory *dir, const char *path )
 {
     return ( KDBWritable (dir, path) != 0 );
 }
@@ -555,10 +839,24 @@ rc_t KDBVMakeSubPath ( struct KDirectory const *dir,
         subpath_max -= ns_size + 1;
     }
 
+#if CRUFTY_USE_OF_RESOLVE_PATH
     /* because this call only builds a path instead of resolving anything
      * is is okay that we are using the wrong directory */
     rc = KDirectoryVResolvePath ( dir, false,
         subpath, subpath_max, path, args );
+#else
+    {
+        int sz = vsnprintf ( subpath, subpath_max, path, args );
+        if ( sz < 0 || ( size_t ) sz >= subpath_max )
+            rc = RC ( rcDB, rcDirectory, rcResolving, rcBuffer, rcInsufficient );
+        else if ( sz == 0 )
+            rc = RC ( rcDB, rcDirectory, rcResolving, rcPath, rcEmpty );
+        else
+        {
+            rc = 0;
+        }
+    }
+#endif
     switch ( GetRCState ( rc ) )
     {
     case 0:
@@ -580,3 +878,57 @@ rc_t KDBVMakeSubPath ( struct KDirectory const *dir,
     }
     return rc;
 }
+
+/* KDBMakeSubPath
+ *  adds a namespace to path spec
+ */
+rc_t KDBMakeSubPath ( struct KDirectory const *dir,
+    char *subpath, size_t subpath_max, const char *ns,
+    uint32_t ns_size, const char *path, ... )
+{
+    rc_t rc = 0;
+    va_list args;
+    va_start(args, path);
+    rc = KDBVMakeSubPath(dir, subpath, subpath_max, ns, ns_size, path, args);
+    va_end(args);
+    return rc;
+}
+
+/* this is included to make kdb.c vs. wkdb.c file comparisons easier in [x]emacs.*/
+#if NOT_USED_IN_READ_ONLY_SIDE
+/* VDrop
+ */
+static
+rc_t KDBDropInt ( KDirectory * dir, const KDBManager * mgr,
+                  const char * path )
+{
+}
+
+rc_t KDBMgrVDrop ( KDirectory * dir, const KDBManager * mgr, uint32_t obj_type,
+                   const char * path, va_list args )
+{
+}
+#endif
+
+/* KDBIsPathUri
+ * A hack to get some of VFS into KDB that is too tightly bound to KFS
+ */
+
+bool KDBIsPathUri (const char * path)
+{
+    const char * pc;
+    size_t z;
+
+    z = string_size (path);
+
+    if (NULL != (pc = string_chr (path, z, ':')))
+        return true;
+
+    if (NULL != (pc = string_chr (path, z, '?')))
+        return true;
+
+    if (NULL != (pc = string_chr (path, z, '#')))
+        return true;
+
+    return false;
+}
diff --git a/libs/kdb/libkdb.vers b/libs/kdb/libkdb.vers
index 0495c4a..0b1f1ed 100644
--- a/libs/kdb/libkdb.vers
+++ b/libs/kdb/libkdb.vers
@@ -1 +1 @@
-1.2.3
+1.2.13
diff --git a/libs/kdb/libkdb.vers.h b/libs/kdb/libkdb.vers.h
deleted file mode 100644
index 1a165ff..0000000
--- a/libs/kdb/libkdb.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBKDB_VERS 0x01020003
diff --git a/libs/kdb/libwkdb.vers b/libs/kdb/libwkdb.vers
index 0495c4a..0b1f1ed 100644
--- a/libs/kdb/libwkdb.vers
+++ b/libs/kdb/libwkdb.vers
@@ -1 +1 @@
-1.2.3
+1.2.13
diff --git a/libs/kdb/libwkdb.vers.h b/libs/kdb/libwkdb.vers.h
deleted file mode 100644
index 7e02097..0000000
--- a/libs/kdb/libwkdb.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBWKDB_VERS 0x01020003
diff --git a/libs/kdb/meta.c b/libs/kdb/meta.c
index 22fb7bf..dd39d85 100644
--- a/libs/kdb/meta.c
+++ b/libs/kdb/meta.c
@@ -41,6 +41,7 @@ struct KMDataNodeNamelist;
 #undef KONST
 
 #include <kdb/meta.h>
+#include <kdb/namelist.h>
 #include <klib/container.h>
 #include <klib/pbstree.h>
 #include <klib/namelist.h>
@@ -49,6 +50,7 @@ struct KMDataNodeNamelist;
 #include <kfs/mmap.h>
 #include <klib/refcount.h>
 #include <klib/debug.h>
+#include <klib/log.h>
 #include <klib/rc.h>
 #include <strtol.h>
 #include <os-native.h>
@@ -63,6 +65,8 @@ struct KMDataNodeNamelist;
 #include <assert.h>
 
 #define KMETADATAVERS 2
+#define NODE_SIZE_LIMIT ( 25 * 1024 * 1024 )
+#define NODE_CHILD_LIMIT ( 100 * 1024 )
 
 
 typedef struct KMDataNodeInflateData KMDataNodeInflateData;
@@ -71,6 +75,8 @@ struct KMDataNodeInflateData
     const KMetadata *meta;
     const KMDataNode *par;
     BSTree *bst;
+    size_t node_size_limit;
+    uint32_t node_child_limit;
     rc_t rc;
     bool byteswap;
 };
@@ -339,7 +345,7 @@ bool CC KMDataNodeInflate_v1 ( PBSTNode *n, void *data )
     }
 
     pb -> rc = RC ( rcDB, rcMetadata, rcConstructing, rcMemory, rcExhausted );
-    free ( n );
+    free ( b );
     return true;
 }
 
@@ -358,6 +364,8 @@ rc_t KMDataNodeInflateAttr ( KMDataNode *n, bool byteswap )
         pb . meta = n -> meta;
         pb . par = n;
         pb . bst = & n -> attr;
+        pb . node_size_limit = NODE_SIZE_LIMIT;
+        pb . node_child_limit = NODE_CHILD_LIMIT;
         pb . rc = 0;
         pb . byteswap = byteswap;
         PBSTreeDoUntil ( bst, 0, KMAttrNodeInflate, & pb );
@@ -375,7 +383,8 @@ static
 bool CC KMDataNodeInflate ( PBSTNode *n, void *data );
 
 static
-rc_t KMDataNodeInflateChild ( KMDataNode *n, bool byteswap )
+rc_t KMDataNodeInflateChild ( KMDataNode *n,
+    size_t node_size_limit, uint32_t node_child_limit, bool byteswap )
 {
     PBSTree *bst;
     rc_t rc = PBSTreeMake ( & bst, n -> value, n -> vsize, byteswap );
@@ -383,16 +392,45 @@ rc_t KMDataNodeInflateChild ( KMDataNode *n, bool byteswap )
         rc = RC ( rcDB, rcMetadata, rcConstructing, rcData, rcCorrupt );
     else
     {
-        KMDataNodeInflateData pb;
+        uint32_t bst_count = PBSTreeCount ( bst );
         size_t bst_size = PBSTreeSize ( bst );
-
-        pb . meta = n -> meta;
-        pb . par = n;        
-        pb . bst = & n -> child;
-        pb . rc = 0;
-        pb . byteswap = byteswap;
-        PBSTreeDoUntil ( bst, 0, KMDataNodeInflate, & pb );
-        rc = pb . rc;
+        if ( bst_count > node_child_limit )
+        {
+            PLOGMSG ( klogWarn, ( klogWarn,
+                                  "refusing to inflate metadata node '$(node)' within file '$(path)': "
+                                  "number of children ($(num_children)) exceeds limit ($(limit))."
+                                  , "node=%s,path=%s,num_children=%u,limit=%u"
+                                  , n -> name
+                                  , n -> meta -> path
+                                  , bst_count
+                                  , node_child_limit )
+                );
+        }
+        else if ( bst_size > node_size_limit )
+        {
+            PLOGMSG ( klogWarn, ( klogWarn,
+                                  "refusing to inflate metadata node '$(node)' within file '$(path)': "
+                                 "node size ($(node_size)) exceeds limit ($(limit))."
+                                 , "node=%s,path=%s,node_size=%zu,limit=%zu"
+                                 , n -> name
+                                 , n -> meta -> path
+                                 , bst_size
+                                 , node_size_limit )
+                );
+        }
+        else
+        {
+            KMDataNodeInflateData pb;
+            pb . meta = n -> meta;
+            pb . par = n;        
+            pb . bst = & n -> child;
+            pb . node_size_limit = node_size_limit;
+            pb . node_child_limit = node_child_limit;
+            pb . rc = 0;
+            pb . byteswap = byteswap;
+            PBSTreeDoUntil ( bst, 0, KMDataNodeInflate, & pb );
+            rc = pb . rc;
+        }
         
         PBSTreeWhack ( bst );
         
@@ -440,7 +478,8 @@ bool CC KMDataNodeInflate ( PBSTNode *n, void *data )
     pb -> rc = ( bits & 1 ) != 0 ? KMDataNodeInflateAttr ( b, pb -> byteswap ) : 0;
     if ( pb -> rc == 0 )
     {
-        pb -> rc = ( bits & 2 ) != 0 ? KMDataNodeInflateChild ( b, pb -> byteswap ) : 0;
+        pb -> rc = ( bits & 2 ) != 0 ?
+            KMDataNodeInflateChild ( b, pb -> node_size_limit, pb -> node_child_limit, pb -> byteswap ) : 0;
         if ( pb -> rc == 0 )
         {
             void *value;
@@ -468,7 +507,7 @@ bool CC KMDataNodeInflate ( PBSTNode *n, void *data )
         BSTreeWhack ( & b -> attr, KMAttrNodeWhack, NULL );
     }
 
-    free ( n );
+    free ( b );
     return true;
 }
 
@@ -1567,6 +1606,8 @@ rc_t KMetadataPopulate ( KMetadata *self, const KDirectory *dir, const char *pat
                         pb . meta = self;
                         pb . par = self -> root;
                         pb . bst = & self -> root -> child;
+                        pb . node_size_limit = NODE_SIZE_LIMIT;
+                        pb . node_child_limit = NODE_CHILD_LIMIT;
                         pb . rc = 0;
                         pb . byteswap = self -> byteswap;
 
@@ -2082,7 +2123,7 @@ void CC KMDataNodeGrabName ( BSTNode *n, void *data )
     list -> namelist [ list -> count ++ ] = ( ( const KMDataNode* ) n ) -> name;
 }
 
-LIB_EXPORT rc_t CC KMDataNodeListChild ( const KMDataNode *self, KNamelist **names )
+LIB_EXPORT rc_t CC KMDataNodeListChildren ( const KMDataNode *self, KNamelist **names )
 {
     if ( names == NULL )
         return RC ( rcDB, rcMetadata, rcListing, rcParam, rcNull );
diff --git a/libs/kdb/ptrieval-v2.c b/libs/kdb/ptrieval-v2.c
index c1ff270..7a8b939 100644
--- a/libs/kdb/ptrieval-v2.c
+++ b/libs/kdb/ptrieval-v2.c
@@ -61,6 +61,7 @@ struct KPTrieIndexCCParms_v2
     bool key2id;
     bool id2key;
     bool all_ids;
+    bool convertFromV1;
     bool failed;
 };
 
@@ -68,7 +69,7 @@ struct KPTrieIndexCCParms_v2
  */
 static
 void KPTrieIndexCCParmsInit_v2 ( KPTrieIndexCCParms_v2 *pb,
-    const KPTrieIndex_v2 *self, const KIndex *outer, bool key2id, bool id2key, bool all_ids )
+    const KPTrieIndex_v2 *self, const KIndex *outer, bool key2id, bool id2key, bool all_ids, bool convertFromV1 )
 {
     KIdStatsInit ( & pb -> stats );
     pb -> rc = 0;
@@ -77,6 +78,7 @@ void KPTrieIndexCCParmsInit_v2 ( KPTrieIndexCCParms_v2 *pb,
     pb -> key2id = key2id;
     pb -> id2key = self -> ord2node ? id2key : false;
     pb -> all_ids = all_ids;
+    pb -> convertFromV1 = convertFromV1;
     pb -> failed = false;
 }
 
@@ -111,7 +113,7 @@ void KPTrieIndexCCParmsWhack_v2 ( KPTrieIndexCCParms_v2 *pb )
 static
 bool CC KPTrieIndexCCVisit_v2 ( PTNode *n, void *data )
 {
-    KPTrieIndexCCParms_v2 *pb = data;
+    KPTrieIndexCCParms_v2 *pb = (KPTrieIndexCCParms_v2 *)data;
     const KPTrieIndex_v2 *self = pb -> self;
 
     rc_t rc;
@@ -121,48 +123,71 @@ bool CC KPTrieIndexCCVisit_v2 ( PTNode *n, void *data )
     uint32_t i, ord;
 
     /* detect conversion from v1 */
-    if ( self -> id_bits == 0 )
+    if ( pb -> convertFromV1 && self -> id_bits == 0 )
     {
-        /* payload of v1 PTNode is a 32-bit spot id */
         uint32_t id32;
+
+        /* payload of v1 PTNode is a 32-bit spot id */
         assert ( n -> data . size == sizeof id32 );
         memcpy ( & id32, n -> data . addr, sizeof id32 );
         id = self -> byteswap ? bswap_32 ( id32 ) : id32;
-        span = 1;
-        ord = ( uint32_t ) ( id - self -> first + 1 );
     }
     else
     {
         /* native v2 */
         /* TBD - should this pass n -> data . size * 8 ??? */
-        rc = Unpack ( self -> id_bits, sizeof id * 8,
-            n -> data . addr, 0, self -> id_bits, NULL,
-            & id, sizeof id, & usize );
-        if ( rc != 0 )
+        if ( self -> id_bits != 0 )
         {
-            PLOGMSG ( klogWarn, ( klogWarn, "could not determine row id of v2 node $(nid)",
+            rc = Unpack ( self -> id_bits, sizeof id * 8,
+                n -> data . addr, 0, self -> id_bits, NULL,
+                & id, sizeof id, & usize );
+            if ( rc != 0 )
+            {
+                PLOGMSG ( klogWarn, ( klogWarn, "could not determine row id of v2 node $(nid)",
                                  "nid=0x%08x", n -> id ));
-            pb -> failed = true;
-            return false;
+                pb -> failed = true;
+                return false;
+            }
         }
-        id += self -> first;
-
-        ord = KPTrieIndexID2Ord_v2 ( self, id );
-        if ( ord == 0 )
+        else
         {
-            PLOGMSG ( klogWarn, ( klogWarn, "v2 node $(nid): row id $(rid) not found in trie",
-                                  "nid=0x%08x,rid=%ld", n -> id, id ));
-            pb -> failed = true;
-            return false;
+            id = 0;
         }
 
-        if ( self -> ord2node != NULL )
+        id += self -> first;
+    }
+
+    /* convert from row-id to 1-based ordinal index */
+    ord = KPTrieIndexID2Ord_v2 ( self, id );
+    if ( ord == 0 )
+    {
+        /* 0 means not found */
+        PLOGMSG ( klogWarn, ( klogWarn, "v2 node $(nid): row id $(rid) not found in trie",
+                              "nid=0x%08x,rid=%ld", n -> id, id ));
+        pb -> failed = true;
+        return false;
+    }
+
+    if ( self -> ord2node != NULL )
+    {
+        /* to calculate span of last entry, where
+           1-based "ord" == the number of nodes,
+           just find the distance between the last row-id
+           in index ( self->maxid ) and the current row-id */
+        if ( ord == self -> count )
+            span = self -> maxid - id + 1;
+        else
         {
-            if ( ord == self -> count )
-                span = self -> maxid - id + 1;
-            else switch ( self -> variant )
+            /* from here on, we will use "ord" to be the
+               ZERO-BASED index of the slot FOLLOWING the
+               one corresponding to id. we want to find the
+               row-id AFTER the current one and calculate distance */
+            switch ( self -> variant )
             {
+            /* linear array */
             case 0:
+                /* starting with the FOLLOWING slot,
+                   count duplicate entries */
                 for ( i = ord; i < self -> count; ++ i )
                 {
                     if ( n -> id != self -> ord2node [ i ] )
@@ -170,6 +195,10 @@ bool CC KPTrieIndexCCVisit_v2 ( PTNode *n, void *data )
                 }
                 span = self -> first + i - id;
                 break;
+
+            /* packed ordered array of sparse row-ids from here on
+               we already have "id" for this node, so the span will
+               be the distance from NEXT id - 1-based ord is 0-based next */
             case 1:
                 span = self -> first + self -> id2ord . v8 [ ord ] - id;
                 break;
@@ -189,22 +218,22 @@ bool CC KPTrieIndexCCVisit_v2 ( PTNode *n, void *data )
                 return true;
             }
         }
-        else if ( self -> span_bits == 0 )
-            span = 1;
-        else
+    }
+    else if ( self -> span_bits == 0 )
+        span = 1;
+    else
+    {
+        /* TBD - this case is never used in practice.
+           it would be an skey without a projection index */
+        rc = Unpack ( self -> span_bits, sizeof span * 8,
+                      n -> data . addr, 0, self -> id_bits, NULL,
+                      & span, sizeof span, & usize );
+        if ( rc != 0 )
         {
-            /* TBD - this case is never used in practice.
-               it would be an skey without a projection index */
-            rc = Unpack ( self -> span_bits, sizeof span * 8,
-                n -> data . addr, 0, self -> id_bits, NULL,
-                & span, sizeof span, & usize );
-            if ( rc != 0 )
-            {
-                PLOGMSG ( klogWarn, ( klogWarn, "could not determine span of v2 node $(nid), row id $(rid)",
-                                      "nid=0x%08x,rid=%ld", n -> id, id ));
-                pb -> failed = true;
-                return false;
-            }
+            PLOGMSG ( klogWarn, ( klogWarn, "could not determine span of v2 node $(nid), row id $(rid)",
+                                  "nid=0x%08x,rid=%ld", n -> id, id ));
+            pb -> failed = true;
+            return false;
         }
     }
 
@@ -283,7 +312,7 @@ bool CC KPTrieIndexCCVisit_v2 ( PTNode *n, void *data )
             size_t key_size, bsize = sizeof buffer;
             if ( sizeof buffer <= orig -> size )
             {
-                key = malloc ( bsize = orig -> size + 1 );
+                key = (char *)malloc ( bsize = orig -> size + 1 );
                 if ( key == 0 )
                 {
                     pb -> rc = RC ( rcDB, rcIndex, rcValidating, rcMemory, rcExhausted );
@@ -334,7 +363,7 @@ bool CC KPTrieIndexCCVisit_v2 ( PTNode *n, void *data )
 rc_t KPTrieIndexCheckConsistency_v2 ( const KPTrieIndex_v2 *self,
     int64_t *start_id, uint64_t *id_range, uint64_t *num_keys,
     uint64_t *num_rows, uint64_t *num_holes,
-    const KIndex *outer, bool key2id, bool id2key, bool all_ids )
+    const KIndex *outer, bool key2id, bool id2key, bool all_ids, bool convertFromV1 )
 {
     rc_t rc = 0;
     KPTrieIndexCCParms_v2 pb;
@@ -345,7 +374,7 @@ rc_t KPTrieIndexCheckConsistency_v2 ( const KPTrieIndex_v2 *self,
     if ( ( key2id || id2key ) && outer == NULL )
         return RC ( rcDB, rcIndex, rcValidating, rcSelf, rcNull );
 
-    KPTrieIndexCCParmsInit_v2 ( & pb, self, outer, key2id, id2key, all_ids );
+    KPTrieIndexCCParmsInit_v2 ( & pb, self, outer, key2id, id2key, all_ids, convertFromV1 );
     if ( PTrieDoUntil ( self -> key2id, KPTrieIndexCCVisit_v2, & pb ) )
         rc = pb . rc;
     else if ( pb . failed )
diff --git a/libs/kdb/table-cc.c b/libs/kdb/table-cc.c
index 38dbf3c..17bcb4a 100644
--- a/libs/kdb/table-cc.c
+++ b/libs/kdb/table-cc.c
@@ -38,13 +38,17 @@
 #include "cc-priv.h"
 
 #include <kdb/index.h>
+#include <kdb/meta.h>
+#include <kdb/kdb-priv.h>
 
 #include <kfs/file.h>
 #include <kfs/md5.h>
 #include <klib/refcount.h>
+#include <klib/log.h> /* PLOGMSG */
 #include <klib/rc.h>
 #include <klib/namelist.h>
 #include <kdb/namelist.h>
+
 #include <os-native.h>
 #include <sysalloc.h>
 
@@ -57,59 +61,127 @@
 
 #undef index
 
-static
-rc_t KTableCheckMD5 ( const KTable *self, CCReportFunc report, void *ctx )
+static void KTableGetName(KTable const *self, char const **rslt)
 {
     char *sep;
+    
+    *rslt = self->path;
+    sep = strrchr(self->path, '/');
+    if (sep != NULL)
+        *rslt = sep + 1;
+}
 
+static
+rc_t KTableCheckMD5 ( const KTable *self, CCReportFunc report, void *ctx )
+{
     CCReportInfoBlock info;
     memset ( & info, 0, sizeof info );
 
     info.objType = kptTable;
-    info.objName = self->path;
-    sep = strrchr(self->path, '/');
-    if (sep != NULL )
-        info.objName = sep + 1;
+    KTableGetName(self, &info.objName);
     
     return DirectoryCheckMD5 ( self->dir, "md5", & info, report, ctx );
 }
 
-static
-rc_t KTableCheckColumns ( const KTable *self, int level, CCReportFunc report, void *ctx )
+#if 0
+static bool KTableCheckColumnsFilter(const KDirectory *dir, const char *name, void *data)
 {
-    uint32_t n;
-    KNamelist *list;
-    rc_t rc = KTableListCol(self, &list);
-    
-    if (rc)
-        return rc;
+    return (KDirectoryPathType(dir, name) & ~kptAlias) == kptDir;
+}
+#endif
 
-    rc = KNamelistCount(list, &n);
-    if (rc == 0) {
-        CCReportInfoBlock nfo;
+typedef struct KTableCheckColumn_pb_s {
+    KTable const *self;
+    CCReportFunc report;
+    void *rpt_ctx;
+    unsigned n;
+    int level;
+    uint32_t depth;
+    INSDC_SRA_platform_id platform;
+} KTableCheckColumn_pb_t;
+
+static rc_t CC KTableCheckColumn(const KDirectory *dir, uint32_t type, const char *name, void *data)
+{
+    KTableCheckColumn_pb_t *pb = (KTableCheckColumn_pb_t *)data;
+    CCReportInfoBlock info;
+    
+    memset(&info, 0, sizeof(info));
+    
+    if ((type & ~kptAlias) != kptDir) {
+        char mesg[4096];
         
-        memset(&nfo, 0, sizeof(nfo));
-        nfo.objType = kptColumn;
+        snprintf(mesg, sizeof(mesg), "unexpected object '%s'", name);
+        KTableGetName(pb->self, &info.objName);
+        info.objId = 0;
+        info.objType = kptTable;
+        info.type = ccrpt_Done;
+        info.info.done.mesg = mesg;
+        info.info.done.rc = 0;
+        return pb->report(&info, pb->rpt_ctx);
+    }
+    else {
+        bool hasZombies;
+        INSDC_SRA_platform_id platform = pb->platform;
+        uint32_t ktype = KDBPathType(dir, &hasZombies, name);
+        rc_t rc;
         
-        for ( nfo . objId = 0; nfo . objId != n && rc == 0; ++ nfo . objId )
-        {
-            rc = KNamelistGet ( list, nfo . objId, & nfo . objName );
-            if ( rc == 0 )
-            {
-                const KColumn *col;
-                
-                rc = KTableOpenColumnRead ( self, & col, nfo . objName );
-                if ( rc == 0 )
-                {
-                    rc = KColumnConsistencyCheck ( col, level, &nfo, report, ctx );
-                    KColumnRelease ( col );
-                }
+        info.objType = kptColumn;
+        info.objId = pb->n++;
+        info.objName = name;
+        info.type = ccrpt_Visit;
+        info.info.visit.depth = pb->depth + 1;
+        rc = pb->report(&info, pb->rpt_ctx);
+        if (rc) return rc;
+        
+        info.type = ccrpt_Done;
+        
+        if (hasZombies) {
+#if 0
+            info.info.done.rc = RC(rcDB, rcTable, rcValidating, rcFile, rcTooShort);
+#else
+            info.info.done.rc = 0;
+#endif
+            info.info.done.mesg = "Column may be truncated";
+            rc = pb->report(&info, pb->rpt_ctx);
+            if (rc) return rc;
+        }
+        info.info.done.rc = RC(rcDB, rcTable, rcValidating, rcType, rcIncorrect);
+        if ((ktype & ~kptAlias) == kptColumn) {
+            const KColumn *col;
+            
+            info.info.done.rc = KTableOpenColumnRead(pb->self, &col, name);
+            if (info.info.done.rc == 0) {
+                info.info.done.rc = KColumnConsistencyCheck(col, pb->level, &info, pb->report, pb->rpt_ctx);
+                KColumnRelease(col);
+                return info.info.done.rc;
             }
         }
+        if (platform != SRA_PLATFORM_UNDEFINED && platform != SRA_PLATFORM_454
+            && name != NULL && name[0] != '\0' && strcmp(name, "SIGNAL") == 0)
+        {
+            (void)PLOGMSG(klogWarn, (klogWarn, "COLUMN '$(name)' IS INCOMPLETE",
+                "name=%s", name));
+            return 0;
+        }
+        info.info.done.mesg = "Failed to open column";
+        return pb->report(&info, pb->rpt_ctx);
     }
+}
+
+static
+rc_t KTableCheckColumns ( const KTable *self, uint32_t depth, int level,
+    CCReportFunc report, void *ctx, INSDC_SRA_platform_id platform )
+{
+    KTableCheckColumn_pb_t pb;
     
-    KNamelistRelease(list);
-    return rc;
+    pb.self = self;
+    pb.report = report;
+    pb.rpt_ctx = ctx;
+    pb.n = 0;
+    pb.level = level;
+    pb.depth = depth;
+    pb.platform = platform;
+    return KDirectoryVVisit(self->dir, false, KTableCheckColumn, &pb, "col", NULL);
 }
 
 static
@@ -139,9 +211,11 @@ static const KDirectory *KTableFindIndexDir(const KTable *self)
 }
 
 static
-rc_t KTableCheckIndices(const KTable *self, int level, CCReportFunc report, void *ctx)
+rc_t KTableCheckIndices(const KTable *self, uint32_t depth, int level, CCReportFunc report, void *ctx)
 {
     uint32_t n;
+    const KMetadata *meta;
+    int64_t max_row_id = 0;
 
     KNamelist *list;
     rc_t rc = KTableListIdx(self, &list);
@@ -152,6 +226,22 @@ rc_t KTableCheckIndices(const KTable *self, int level, CCReportFunc report, void
         return rc;
     }
 
+    rc = KTableOpenMetadataRead ( self, & meta );
+    if ( rc == 0 )
+    {
+        const KMDataNode *seq;
+        rc = KMetadataOpenNodeRead ( meta, & seq, "/.seq/spot" );
+        if ( rc == 0 )
+        {
+            rc = KMDataNodeReadAsI64 ( seq, & max_row_id );
+            if ( rc != 0 )
+                max_row_id = 0;
+            KMDataNodeRelease ( seq );
+        }
+
+        KMetadataRelease ( meta );
+    }
+
     rc = KNamelistCount(list, &n);
     if ( rc == 0 )
     {
@@ -169,7 +259,11 @@ rc_t KTableCheckIndices(const KTable *self, int level, CCReportFunc report, void
                 rc = KNamelistGet(list, nfo.objId, &nfo.objName);
                 if ( rc != 0 )
                     break;
-            
+                
+                nfo.type = ccrpt_Visit;
+                nfo.info.visit.depth = depth + 1;
+                rc = report(&nfo, ctx); if (rc) break;
+                
                 rc = KTableCheckIndexMD5(idxDir, &nfo, report, ctx);
                 if (rc == 0 && level > 0)
                 {
@@ -184,6 +278,8 @@ rc_t KTableCheckIndices(const KTable *self, int level, CCReportFunc report, void
                     }
                     else
                     {
+                        KIndexSetMaxRowId ( idx, max_row_id );
+
                         nfo.type = ccrpt_Index;
                         rc = KIndexConsistencyCheck(idx, level < 3 ? 1 : 3,
                                                     &nfo.info.index.start_id,
@@ -214,22 +310,69 @@ rc_t KTableCheckIndices(const KTable *self, int level, CCReportFunc report, void
 }
 
 LIB_EXPORT
-rc_t CC KTableConsistencyCheck(const KTable *self, uint32_t level,
-                               CCReportFunc report, void *ctx)
+rc_t CC KTableConsistencyCheck(const KTable *self, uint32_t depth, uint32_t level,
+    CCReportFunc report, void *ctx, INSDC_SRA_platform_id platform)
 {
     rc_t rc = 0;
+    uint32_t type;
     
+    bool indexOnly = level & CC_INDEX_ONLY;
+    if (indexOnly) {
+        level &= ~CC_INDEX_ONLY;
+    }
+
     if (self == NULL)
         return RC(rcDB, rcTable, rcValidating, rcSelf, rcNull);
     
-    if (KDirectoryPathType(self->dir, "md5") != kptNotFound)
-        rc = KTableCheckMD5(self, report, ctx);
+    if (depth == 0) {
+        CCReportInfoBlock info;
+        
+        KTableGetName(self, &info.objName);
+        info.objId = 0;
+        info.objType = kptTable;
+        info.type = ccrpt_Visit;
+        info.info.visit.depth = 0;
+        
+        rc = report(&info, ctx);
+        if (rc) return rc;
+    }
+    
+    type = KDirectoryPathType(self->dir, "md5");
+    if (type == kptZombieFile) {
+        CCReportInfoBlock info;
+        
+        KTableGetName(self, &info.objName);
+        info.objId = 0;
+        info.objType = kptTable;
+        info.type = ccrpt_Done;
+        info.info.done.mesg = "Table may be truncated";
+        info.info.done.rc = 0;
+        
+        rc = report(&info, ctx);
+    }
+    else if (type != kptNotFound) {
+        if (!indexOnly) {
+            rc = KTableCheckMD5(self, report, ctx);
+        }
+    }
+    else {
+        CCReportInfoBlock info;
+        
+        KTableGetName(self, &info.objName);
+        info.objId = 0;
+        info.objType = kptTable;
+        info.type = ccrpt_Done;
+        info.info.done.mesg = "missing md5 file";
+        info.info.done.rc = 0;
+        
+        rc = report(&info, ctx);
+    }
 
-    if ( rc == 0 )
-        rc = KTableCheckColumns(self, level, report, ctx);
+    if ( rc == 0 && ! indexOnly )
+        rc = KTableCheckColumns(self, depth, level, report, ctx, platform);
 
     if ( rc == 0 )    
-        rc = KTableCheckIndices(self, level, report, ctx);
+        rc = KTableCheckIndices(self, depth, level, report, ctx);
         
     return rc;
 }
diff --git a/libs/kdb/table.c b/libs/kdb/table.c
index 6f6477c..7a0ea75 100644
--- a/libs/kdb/table.c
+++ b/libs/kdb/table.c
@@ -35,11 +35,15 @@
 
 #include <kdb/extern.h>
 #include <klib/namelist.h>
+#include <klib/log.h>
 #include <klib/rc.h>
+#include <klib/printf.h>
+#include <os-native.h>
 #include <sysalloc.h>
 
 #include <limits.h>
 #include <stdlib.h>
+#include <stdio.h>
 #include <string.h>
 #include <assert.h>
 
@@ -49,6 +53,22 @@
  *  a collection of columns indexed by row id, metadata, indices
  */
 
+/* GetPath
+ *  return the absolute path to table
+ */
+LIB_EXPORT rc_t CC KTableGetPath ( const KTable *self,
+    const char **path )
+{
+    if ( self == NULL )
+        return RC ( rcDB, rcTable, rcAccessing, rcSelf, rcNull );
+    if ( path == NULL )
+        return RC ( rcDB, rcTable, rcAccessing, rcParam, rcNull );
+
+    *path = self->path;
+
+    return 0;
+}
+
 /* Whack
  */
 static
@@ -191,24 +211,30 @@ rc_t KTableMake ( KTable **tblp, const KDirectory *dir, const char *path )
  */
 static
 rc_t KDBManagerVOpenTableReadInt ( const KDBManager *self,
-    const KTable **tblp, const KDirectory *wd,
+    const KTable **tblp, const KDirectory *wd, bool try_srapath,
     const char *path, va_list args )
 {
+    rc_t rc;
+
     char tblpath [ 4096 ];
-    rc_t rc = KDirectoryVResolvePath ( wd, 1,
-        tblpath, sizeof tblpath, path, args );
-    if ( rc == 0 )
+    int z = ( args == NULL ) ?
+        snprintf ( tblpath, sizeof tblpath, path ):
+        vsnprintf ( tblpath, sizeof tblpath, path, args );
+    if ( z < 0 || ( size_t ) z >= sizeof tblpath )
+        rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcExcessive );
+    else
     {
         KTable *tbl;
         const KDirectory *dir;
         bool prerelease = false;
 
-        rc = KDBOpenPathTypeRead ( wd, tblpath, &dir, kptTable, NULL );
+        rc = KDBOpenPathTypeRead ( self, wd, tblpath, &dir, kptTable, NULL, try_srapath );
         if ( rc != 0 )
         {
             prerelease = true;
-            rc = KDBOpenPathTypeRead ( wd, tblpath, &dir, kptPrereleaseTbl, NULL );
+            rc = KDBOpenPathTypeRead ( self, wd, tblpath, &dir, kptPrereleaseTbl, NULL, try_srapath );
         }
+
         if ( rc == 0 )
         {
             rc = KTableMake ( & tbl, dir, tblpath );
@@ -219,14 +245,13 @@ rc_t KDBManagerVOpenTableReadInt ( const KDBManager *self,
                 * tblp = tbl;
                 return 0;
             }
-
             KDirectoryRelease ( dir );
         }
     }
-    
     return rc;
 }
 
+
 LIB_EXPORT rc_t CC KDBManagerOpenTableRead ( const KDBManager *self,
     const KTable **tbl, const char *path, ... )
 {
@@ -240,6 +265,7 @@ LIB_EXPORT rc_t CC KDBManagerOpenTableRead ( const KDBManager *self,
     return rc;
 }
 
+
 LIB_EXPORT rc_t CC KDBManagerVOpenTableRead ( const KDBManager *self,
     const KTable **tbl, const char *path, va_list args )
 {
@@ -251,7 +277,7 @@ LIB_EXPORT rc_t CC KDBManagerVOpenTableRead ( const KDBManager *self,
     if ( self == NULL )
         return RC ( rcDB, rcMgr, rcOpening, rcSelf, rcNull );
 
-    return KDBManagerVOpenTableReadInt ( self, tbl, self -> wd, path, args );
+    return KDBManagerVOpenTableReadInt ( self, tbl, self -> wd, true, path, args);
 }
 
 LIB_EXPORT rc_t CC KDatabaseOpenTableRead ( const KDatabase *self,
@@ -286,7 +312,7 @@ LIB_EXPORT rc_t CC KDatabaseVOpenTableRead ( const KDatabase *self,
     if ( rc == 0 )
     {
         rc = KDBManagerVOpenTableReadInt ( self -> mgr, tblp,
-            self -> dir, path, NULL );
+            self -> dir, false, path, NULL );
         if ( rc == 0 )
         {
             KTable *tbl = ( KTable* ) * tblp;
@@ -373,6 +399,75 @@ LIB_EXPORT bool CC KTableExists ( const KTable *self, uint32_t type, const char
 }
 
 
+/* IsAlias
+ *  returns true if object name is an alias
+ *  returns path to fundamental name if it was aliased
+ *
+ *  "type" [ IN ] - a KDBPathType
+ *  valid values are kptIndex and kptColumn
+ *
+ *  "resolved" [ OUT ] and "rsize" [ IN ] - optional output buffer
+ *  for fundamenta object name if "alias" is not a fundamental name, 
+ *
+ *  "name" [ IN ] - NUL terminated object name
+ */
+LIB_EXPORT bool CC KTableIsAlias ( const KTable *self, uint32_t type,
+    char *resolved, size_t rsize, const char *name )
+{
+    if ( self != NULL && name != NULL && name [ 0 ] != 0 )
+    {
+        rc_t rc;
+        const char *ns;
+        char path [ 256 ];
+
+        switch ( type )
+        {
+        case kptIndex:
+            ns = "idx";
+            break;
+
+        case kptColumn:
+            ns = "col";
+            break;
+
+        default:
+            return false;
+        }
+
+        rc = KDBMakeSubPath ( self -> dir, path, sizeof path, ns, 3, name );
+        if ( rc == 0 )
+        {
+            switch ( KDirectoryPathType ( self -> dir, path ) )
+            {
+            case kptFile | kptAlias:
+            case kptDir | kptAlias:
+                if ( resolved != NULL && rsize != 0 )
+                {
+                    const KDirectory *sub;
+                    rc = KDirectoryOpenDirRead ( self -> dir, & sub, false, ns );
+                    * resolved = 0;
+                    if ( rc != 0 )
+                        PLOGERR ( klogWarn, ( klogWarn, rc, "failed to open subdirectory '$(sub)'", "sub=%s", ns ) );
+                    else
+                    {
+                        rc = KDirectoryResolveAlias ( sub, false, resolved, rsize, name );
+                        KDirectoryRelease ( sub );
+                        if ( rc != 0 )
+                            PLOGERR ( klogWarn, ( klogWarn, rc, "failed to resolve alias '$(alias)'", "alias=%s", name ) );
+                    }
+                }
+                return true;
+            }
+        }
+    }
+
+    if ( resolved != NULL && rsize != 0 )
+        * resolved = 0;
+
+    return false;
+}
+
+
 /* Writable
  *  returns 0 if object is writable
  *  or a reason why if not
@@ -542,18 +637,30 @@ LIB_EXPORT rc_t CC KTableModDate ( const KTable *self, KTime_t *mtime )
 /* List
  *  create table listings
  */
+struct FilterData
+{
+    const KDBManager * mgr;
+    int type;
+};
+
 static
-bool CC KDatabaseListFilter ( const KDirectory *dir, const char *name, void *data )
+bool CC KDatabaseListFilter ( const KDirectory *dir, const char *name, void *data_ )
 {
-    return KDBOpenPathTypeRead(dir, name, NULL, (intptr_t)data, NULL) == 0;
+    struct FilterData * data = data_;
+    return ( KDBOpenPathTypeRead ( data->mgr, dir, name, NULL, data->type, NULL, false ) == 0 );
 }
 
 LIB_EXPORT rc_t CC KTableListCol ( const KTable *self, KNamelist **names )
 {
     if ( self != NULL )
     {
+        struct FilterData data;
+
+        data.mgr = self->mgr;
+        data.type = kptColumn;
+
         return KDirectoryVList ( self -> dir,
-            names, KDatabaseListFilter, ( void* ) kptColumn, "col", NULL );
+            names, KDatabaseListFilter, &data, "col", NULL );
     }
 
     if ( names != NULL )
diff --git a/libs/kdb/trieidx-v2.c b/libs/kdb/trieidx-v2.c
index befe35d..c0eeaa4 100644
--- a/libs/kdb/trieidx-v2.c
+++ b/libs/kdb/trieidx-v2.c
@@ -808,7 +808,7 @@ rc_t KPTrieIndexFind_v2 ( const KPTrieIndex_v2 *self,
 #if V2FIND_RETURNS_SPAN
     uint32_t *span,
 #endif
-    int ( CC * custom_cmp ) ( const void *item, const PBSTNode *n, void *data ), void *data )
+    int ( CC * custom_cmp ) ( const void *item, const PBSTNode *n, void *data ), void *data, bool convertFromV1 )
 {
     rc_t rc;
 
@@ -831,7 +831,7 @@ rc_t KPTrieIndexFind_v2 ( const KPTrieIndex_v2 *self,
             size_t usize;
 
             /* detect conversion from v1 */
-            if ( self -> id_bits == 0 )
+            if ( convertFromV1 && self -> id_bits == 0 )
             {
                 /* v1 stored tree will have just a 32-bit spot id as data */
                 uint32_t id;
@@ -843,9 +843,16 @@ rc_t KPTrieIndexFind_v2 ( const KPTrieIndex_v2 *self,
             else
             {
                 /* should be native v2 */
-                rc = Unpack ( self -> id_bits, sizeof * start_id * 8,
-                    pnode . data . addr, 0, self -> id_bits, NULL,
-                    start_id, sizeof * start_id, & usize );
+                if ( self -> id_bits > 0 )
+                {
+                    rc = Unpack ( self -> id_bits, sizeof * start_id * 8,
+                        pnode . data . addr, 0, self -> id_bits, NULL,
+                        start_id, sizeof * start_id, & usize );
+                }
+                else
+                {
+                    rc = 0;
+                }
                 * start_id += self -> first;
             }
 
@@ -981,7 +988,7 @@ rc_t KTrieIndexFind_v2 ( const KTrieIndex_v2 *self,
 #if V2FIND_RETURNS_SPAN
     uint32_t *span,
 #endif
-    int ( CC * custom_cmp ) ( const void *item, const PBSTNode *n, void *data ), void *data )
+    int ( CC * custom_cmp ) ( const void *item, const PBSTNode *n, void *data ), void *data, bool convertFromV1  )
 {
     /* search within persisted index */
     if ( self -> pt . key2id != NULL )
@@ -990,7 +997,7 @@ rc_t KTrieIndexFind_v2 ( const KTrieIndex_v2 *self,
 #if V2FIND_RETURNS_SPAN
                                     span,
 #endif
-                                    custom_cmp, data );
+                                    custom_cmp, data, convertFromV1 );
     }
 
     return RC ( rcDB, rcIndex, rcSelecting, rcString, rcNotFound );
diff --git a/libs/kdb/trieval-v2.c b/libs/kdb/trieval-v2.c
index 6e07d23..e3e095b 100644
--- a/libs/kdb/trieval-v2.c
+++ b/libs/kdb/trieval-v2.c
@@ -38,12 +38,12 @@
 rc_t KTrieIndexCheckConsistency_v2 ( const KTrieIndex_v2 *self,
     int64_t *start_id, uint64_t *id_range, uint64_t *num_keys,
     uint64_t *num_rows, uint64_t *num_holes,
-    struct KIndex const *outer, bool key2id, bool id2key, bool all_ids )
+    struct KIndex const *outer, bool key2id, bool id2key, bool all_ids, bool convertFromV1  )
 {
     if ( self == NULL )
         return RC ( rcDB, rcIndex, rcValidating, rcParam, rcNull );
 
     return KPTrieIndexCheckConsistency_v2 ( & self -> pt,
         start_id, id_range, num_keys, num_rows, num_holes,
-        outer, key2id, id2key, all_ids );
+        outer, key2id, id2key, all_ids, convertFromV1 );
 }
diff --git a/libs/kdb/wcolidx0.c b/libs/kdb/wcolidx0.c
index 070efc4..b16973a 100644
--- a/libs/kdb/wcolidx0.c
+++ b/libs/kdb/wcolidx0.c
@@ -198,7 +198,7 @@ rc_t KColumnIdx0Init_v1 ( KColumnIdx0 *self, bool bswap )
         {
             uint32_t count;
 
-            rc = KFileRead ( self -> f, self -> eof,
+            rc = KFileReadAll ( self -> f, self -> eof,
                 buffer, 2048 * sizeof * buffer, & num_read );
             if ( rc != 0 )
                 break;
@@ -247,7 +247,7 @@ rc_t KColumnIdx0Init ( KColumnIdx0 *self, uint32_t total, bool bswap )
             if ( count > 2048 )
                 count = 2048;
 
-            rc = KFileRead ( self -> f, i * sizeof * buffer,
+            rc = KFileReadAll ( self -> f, i * sizeof * buffer,
                 buffer, count * sizeof * buffer, & num_read );
             if ( rc != 0 )
                 break;
diff --git a/libs/kdb/wcolidx1.c b/libs/kdb/wcolidx1.c
index 5fedfa7..a1f897e 100644
--- a/libs/kdb/wcolidx1.c
+++ b/libs/kdb/wcolidx1.c
@@ -155,7 +155,7 @@ rc_t KColumnIdx1Init ( KColumnIdx1 *self, uint32_t off, uint32_t count )
                 cnt = 2048;
 
             /* read into buffer an even number of blocks */
-            rc = KFileRead ( self -> f, off,
+            rc = KFileReadAll ( self -> f, off,
                 buffer, cnt * sizeof * buffer, & num_read );
             if ( rc != 0 )
                 break;
@@ -314,7 +314,7 @@ rc_t KColumnIdx1OpenRead ( KColumnIdx1 *self, const KDirectory *dir,
     {
         KColumnHdr hdr;
         size_t num_bytes;
-        rc = KFileRead ( self -> f, 0, & hdr, sizeof hdr, & num_bytes );
+        rc = KFileReadAll ( self -> f, 0, & hdr, sizeof hdr, & num_bytes );
         if ( rc == 0 )
         {
             if ( num_bytes == 0 )
@@ -367,7 +367,7 @@ rc_t KColumnIdx1OpenRead ( KColumnIdx1 *self, const KDirectory *dir,
                         if ( rc == 0 )
                         {
                             off = sizeof hdr . dad;
-                            rc = KFileRead ( self -> fidx, 0, & hdr, sizeof hdr, & num_bytes );
+                            rc = KFileReadAll ( self -> fidx, 0, & hdr, sizeof hdr, & num_bytes );
                             if ( rc == 0 )
                             {
                                 if ( num_bytes < KColumnHdrOffset ( hdr, v2 ) )
@@ -477,7 +477,7 @@ rc_t KColumnIdx1OpenUpdate ( KColumnIdx1 *self, KDirectory *dir,
     {
         KColumnHdr hdr;
         size_t num_bytes;
-        rc = KFileRead ( self -> f, 0, & hdr, sizeof hdr, & num_bytes );
+        rc = KFileReadAll ( self -> f, 0, & hdr, sizeof hdr, & num_bytes );
         if ( rc == 0 )
         {
             /* if file was there, open will pass but if empty should be
@@ -533,7 +533,7 @@ rc_t KColumnIdx1OpenUpdate ( KColumnIdx1 *self, KDirectory *dir,
                         {
                             self -> convert = CONVERT_ON_SAVE_NONE;
                             off = sizeof hdr . dad; /* where to read in idx1 */
-                            rc = KFileRead ( self -> fidx, 0, & hdr, sizeof hdr, & num_bytes );
+                            rc = KFileReadAll ( self -> fidx, 0, & hdr, sizeof hdr, & num_bytes );
                             if ( rc == 0 )
                             {
                                 if ( num_bytes < KColumnHdrOffset ( hdr, v2 ) )
diff --git a/libs/kdb/wcolidx2.c b/libs/kdb/wcolidx2.c
index 667cc6b..563aa44 100644
--- a/libs/kdb/wcolidx2.c
+++ b/libs/kdb/wcolidx2.c
@@ -39,7 +39,7 @@
 #include <string.h>
 #include <assert.h>
 
-#define IDX2_READ_FILE_BUFFER 32 * 1024
+#define IDX2_READ_FILE_BUFFER 1024 * 1024
 
 
 /*--------------------------------------------------------------------------
@@ -135,7 +135,7 @@ rc_t KColumnIdx2LocateBlob ( const KColumnIdx2 *self,
         rc = RC ( rcDB, rcIndex, rcSelecting, rcNoObj, rcUnsupported );
     else
     {
-        char buffer [ 1024 ];
+        uint64_t buffer [ 1024 / 8 ]; /* make sure is uint64_t aligned */
         void *block = buffer;
 
         /* determine the number of entries in block */
@@ -153,7 +153,7 @@ rc_t KColumnIdx2LocateBlob ( const KColumnIdx2 *self,
         else
         {
             size_t num_read;
-            rc = KFileRead ( self -> f, bloc -> pg, block, orig, & num_read );
+            rc = KFileReadAll ( self -> f, bloc -> pg, block, orig, & num_read );
             if ( rc == 0 )
             {
                 if ( num_read != orig )
diff --git a/libs/kdb/wcolumn.c b/libs/kdb/wcolumn.c
index eeaae12..d259b29 100644
--- a/libs/kdb/wcolumn.c
+++ b/libs/kdb/wcolumn.c
@@ -37,6 +37,7 @@
 #include <kfs/md5.h>
 #include <kfs/impl.h>
 #include <klib/checksum.h>
+#include <klib/printf.h>
 #include <klib/log.h>
 #include <sysalloc.h>
 
@@ -554,7 +555,7 @@ rc_t KDBManagerVCreateColumnInt ( KDBManager *self,
     {
         KDirectory *dir;
 
-        switch ( KDBPathType ( wd, colpath ) )
+        switch ( KDBPathType ( /*NULL,*/ wd, NULL, colpath ) )
         {
         case kptNotFound:
             /* first good path */
@@ -614,7 +615,7 @@ rc_t KDBManagerVCreateColumnInt ( KDBManager *self,
 	case kptFile | kptAlias:
 	    /* if we find a file, vary the failure if it is an archive that is a column
 	     * or a non related file */
-	    if ( KDBOpenPathTypeRead ( wd, colpath, NULL, kptColumn, NULL ) == 0 )
+	    if ( KDBOpenPathTypeRead ( self, wd, colpath, NULL, kptColumn, NULL, false ) == 0 )
 		return RC ( rcDB, rcMgr, rcCreating, rcDirectory, rcUnauthorized );
 	    /* fall through */
         default:
@@ -774,16 +775,14 @@ LIB_EXPORT rc_t CC KTableVCreateColumn ( KTable *self, KColumn **colp,
 static
 rc_t KDBManagerVOpenColumnReadInt ( const KDBManager *cself,
     const KColumn **colp, const KDirectory *wd,
-    const char *path, va_list args, bool *cached )
+    const char *path, va_list args, bool *cached, bool try_srapath )
 {
     char colpath [ 4096 ];
     rc_t rc = KDirectoryVResolvePath ( wd, true,
         colpath, sizeof colpath, path, args );
-    if(cached != NULL ) *cached = false;
     if ( rc == 0 )
     {
         KSymbol *sym;
-        const KDirectory *dir;
 
         /* if already open */
         sym = KDBManagerOpenObjectFind (cself, colpath);
@@ -792,7 +791,8 @@ rc_t KDBManagerVOpenColumnReadInt ( const KDBManager *cself,
             const KColumn *ccol;
             rc_t obj;
 
-	    if(cached != NULL ) *cached = true;
+            if(cached != NULL ) *cached = true;
+
             switch (sym->type)
             {
             case kptColumn:
@@ -824,32 +824,39 @@ rc_t KDBManagerVOpenColumnReadInt ( const KDBManager *cself,
                 obj = rcMetadata;
                 break;
             }
-            return  RC (rcDB, rcMgr, rcOpening, obj, rcBusy);
+            rc = RC (rcDB, rcMgr, rcOpening, obj, rcBusy);
         }
+        else
+        {
+            const KDirectory *dir;
 
-	rc = KDBOpenPathTypeRead ( wd, colpath, &dir, kptColumn, NULL );
-        if ( rc == 0 )
-        { 
-            KColumn *col;
+            if ( cached != NULL )
+                *cached = false;
 
-            rc = KColumnMakeRead ( & col, dir, colpath, NULL );
+            rc = KDBOpenPathTypeRead ( cself, wd, path, &dir, kptColumn, NULL, try_srapath );
 
             if ( rc == 0 )
-            {
-                rc = KDBManagerInsertColumn ( (KDBManager*)cself, col );
+            { 
+                KColumn *col;
+
+                rc = KColumnMakeRead ( & col, dir, colpath, NULL );
+
                 if ( rc == 0 )
                 {
-                    * colp = col;
-                    return 0;
+                    rc = KDBManagerInsertColumn ( (KDBManager*)cself, col );
+                    if ( rc == 0 )
+                    {
+                        * colp = col;
+                        return 0;
+                    }
+
+                    KColumnRelease ( col );
                 }
 
-                KColumnRelease ( col );
+                KDirectoryRelease ( dir );
             }
-
-            KDirectoryRelease ( dir );
         }
     }
-    
     return rc;
 }
 
@@ -877,7 +884,7 @@ LIB_EXPORT rc_t CC KDBManagerVOpenColumnRead ( const KDBManager *self,
     if ( self == NULL )
         return RC ( rcDB, rcMgr, rcOpening, rcSelf, rcNull );
 
-    return KDBManagerVOpenColumnReadInt ( self, col, self -> wd, path, args , NULL);
+    return KDBManagerVOpenColumnReadInt ( self, col, self -> wd, path, args , NULL, true);
 }
 
 LIB_EXPORT rc_t CC KTableOpenColumnRead ( const KTable *self,
@@ -913,7 +920,7 @@ LIB_EXPORT rc_t CC KTableVOpenColumnRead ( const KTable *self,
     {
 	bool col_is_cached;
         rc = KDBManagerVOpenColumnReadInt ( self -> mgr,
-            colp, self -> dir, path, NULL, &col_is_cached );
+            colp, self -> dir, path, NULL, &col_is_cached, false );
         if ( rc == 0 )
         {
             KColumn *col = ( KColumn* ) * colp;
@@ -935,11 +942,16 @@ LIB_EXPORT rc_t CC KTableVOpenColumnRead ( const KTable *self,
  */
 static
 rc_t KDBManagerVOpenColumnUpdateInt ( KDBManager *self,
-    KColumn **colp, KDirectory *wd, const char *path, va_list args )
+    KColumn **colp, KDirectory *wd, bool try_srapath,
+    const char *path, va_list args )
 {
     char colpath [ 4096 ];
-    rc_t rc = KDirectoryVResolvePath ( wd, true,
-        colpath, sizeof colpath, path, args );
+    rc_t rc;
+    size_t z;
+
+/*    rc = KDirectoryVResolvePath ( wd, 1,
+        colpath, sizeof colpath, path, args ); */
+    rc = string_vprintf( colpath, sizeof colpath, &z, path, args );
     if ( rc == 0 )
     {
         KSymbol * sym;
@@ -976,7 +988,7 @@ rc_t KDBManagerVOpenColumnUpdateInt ( KDBManager *self,
             return RC ( rcDB, rcMgr, rcOpening, obj, rcBusy );
         }
         /* only open existing dbs */
-        switch (KDBPathType ( wd, colpath ) )
+        switch (KDBPathType ( /*NULL,*/ wd, NULL, colpath ) )
         {
         case kptNotFound:
             return RC ( rcDB, rcMgr, rcOpening, rcColumn, rcNotFound );
@@ -989,7 +1001,7 @@ rc_t KDBManagerVOpenColumnUpdateInt ( KDBManager *self,
 	     * this should be changed to a readonly as it is not possible not 
 	     * disallowed.  rcReadonly not rcUnauthorized
 	     */
-	    if ( KDBOpenPathTypeRead ( wd, colpath, NULL, kptColumn, NULL ) == 0 )
+	    if ( KDBOpenPathTypeRead ( self, wd, colpath, NULL, kptColumn, NULL, try_srapath ) == 0 )
 		return RC ( rcDB, rcMgr, rcOpening, rcDirectory, rcUnauthorized );
 	    /* fall through */
         default:
@@ -1081,7 +1093,7 @@ LIB_EXPORT rc_t CC KDBManagerVOpenColumnUpdate ( KDBManager *self,
         return RC ( rcDB, rcMgr, rcOpening, rcSelf, rcNull );
 
     return KDBManagerVOpenColumnUpdateInt
-        ( self, col, self -> wd, path, args );
+        ( self, col, self -> wd, true, path, args );
 }
 
 LIB_EXPORT rc_t CC KTableOpenColumnUpdate ( KTable *self,
@@ -1119,7 +1131,7 @@ LIB_EXPORT rc_t CC KTableVOpenColumnUpdate ( KTable *self,
     if ( rc == 0 )
     {
         rc = KDBManagerVOpenColumnUpdateInt ( self -> mgr,
-            colp, self -> dir, path, NULL );
+            colp, self -> dir, false, path, NULL );
         if ( rc == 0 )
         {
             KColumn *col = * colp;
@@ -1134,8 +1146,8 @@ bool KTableColumnNeedsReindex ( KTable *self, const char *colname )
     if ( self != NULL )
     {
         char path [ 256 ];
-        rc_t rc = KDBVMakeSubPath ( self -> dir,
-            path, sizeof path, "col", 3, colname, NULL );
+        rc_t rc = KDBMakeSubPath ( self -> dir,
+            path, sizeof path, "col", 3, colname );
         if ( rc == 0 )
         {
             uint64_t idx0_size;
diff --git a/libs/kdb/wdatabase.c b/libs/kdb/wdatabase.c
index 8b90916..1aa18e8 100644
--- a/libs/kdb/wdatabase.c
+++ b/libs/kdb/wdatabase.c
@@ -32,6 +32,8 @@
 #include "wkdb-priv.h"
 #include <klib/namelist.h>
 #include <klib/symbol.h>
+#include <klib/log.h>
+#include <klib/printf.h>
 #include <klib/rc.h>
 #include <kfs/directory.h>
 #include <kfs/file.h>
@@ -50,6 +52,20 @@
  *  connection to a database within file system
  */
 
+/* GetPath
+ *  return the absolute path to DB
+ */
+LIB_EXPORT rc_t CC KDatabaseGetPath ( struct KDatabase const *self,
+    const char **path )
+{
+    if ( self == NULL )
+        return RC ( rcDB, rcDatabase, rcAccessing, rcSelf, rcNull );
+    if ( path == NULL )
+        return RC ( rcDB, rcDatabase, rcAccessing, rcParam, rcNull );
+    *path = self->path;
+    return 0;
+}
+
 /* Whack
  */
 static
@@ -286,7 +302,8 @@ rc_t KDBManagerVCreateDBInt ( KDBManager *self,
         dbpath, sizeof dbpath, path, args );
     if ( rc == 0 )
     {
-        int type = KDBPathType ( wd, dbpath );
+        /* we won't try accession resolution here */
+        int type = KDBPathType ( /*NULL,*/ wd, NULL, dbpath );
         switch ( type )
         {
         case kptNotFound:
@@ -348,7 +365,7 @@ rc_t KDBManagerVCreateDBInt ( KDBManager *self,
 	case kptFile | kptAlias:
 	    /* if we find a file, vary the failure if it is an archive that is a database
 	     * or a non related file */
-	    if ( KDBOpenPathTypeRead ( wd, dbpath, NULL, kptDatabase, NULL ) == 0 )
+	    if ( KDBOpenPathTypeRead ( self, wd, dbpath, NULL, kptDatabase, NULL, false ) == 0 )
 		return RC ( rcDB, rcMgr, rcCreating, rcDirectory, rcUnauthorized );
 	    /* fall through */
         default:
@@ -490,20 +507,16 @@ LIB_EXPORT rc_t CC KDatabaseVCreateDB ( KDatabase *self,
 static
 rc_t KDBManagerVOpenDBReadInt ( const KDBManager *cself,
     const KDatabase **dbp, KDirectory *wd,
-    const char *path, va_list args, bool *cached )
+    const char *path, va_list args, bool *cached, bool try_srapath )
 {
-    /* generate absolute path to db */
-    char dbpath [ 4096 ];
-    rc_t rc = KDirectoryVResolvePath ( wd, true,
-        dbpath, sizeof dbpath, path, args );
-
-    if ( cached != NULL )
-        * cached = false;
+    rc_t rc;
+    char dbpath [4096];
+    size_t z;
 
+    rc = string_vprintf (dbpath, sizeof dbpath, &z, path, args);
     if ( rc == 0 )
     {
         KSymbol *sym;
-        const KDirectory *dir;
 
         /* if already open */
         sym = KDBManagerOpenObjectFind (cself, dbpath);
@@ -547,39 +560,42 @@ rc_t KDBManagerVOpenDBReadInt ( const KDBManager *cself,
                 obj = rcMetadata;
                 break;
             }
-            return  RC (rcDB, rcMgr, rcOpening, obj, rcBusy);
+            rc = RC (rcDB, rcMgr, rcOpening, obj, rcBusy);
         }
-	rc = KDBOpenPathTypeRead ( wd, dbpath, &dir, kptDatabase, NULL );
-
-	if ( rc == 0 )
-	{
-            KDatabase *db;
+        else
+        {
+            const KDirectory *dir;
 
-	    rc = KDatabaseMake ( &db, dir, dbpath, NULL, true );
+            if ( cached != NULL )
+                * cached = false;
 
+            /* open the directory if its a database */
+            rc = KDBOpenPathTypeRead ( cself, wd, dbpath, &dir, kptDatabase, NULL, try_srapath );
             if ( rc == 0 )
             {
-                KDBManager *self = ( KDBManager* ) cself;
+                KDatabase *db;
 
-                rc = KDBManagerInsertDatabase ( self, db );
+                rc = KDatabaseMake ( &db, dir, dbpath, NULL, true );
                 if ( rc == 0 )
                 {
-                    * dbp = db;
-                    return 0;
-                }
+                    KDBManager *self = ( KDBManager* ) cself;
 
-/*                 rc = RC ( rcDB, rcMgr, rcOpening, rcDatabase, rcBusy ); */
-            
-                free ( db );
+                    rc = KDBManagerInsertDatabase ( self, db );
+                    if ( rc == 0 )
+                    {
+                        * dbp = db;
+                        return 0;
+                    }
+                    free (db);
+                }
+                KDirectoryRelease (dir);
             }
-
-            KDirectoryRelease ( dir );
         }
     }
-    
     return rc;
 }
 
+
 LIB_EXPORT rc_t CC KDBManagerOpenDBRead ( const KDBManager *self,
     const KDatabase **db, const char *path, ... )
 {
@@ -604,7 +620,7 @@ LIB_EXPORT rc_t CC KDBManagerVOpenDBRead ( const KDBManager *self,
     if ( self == NULL )
         return RC ( rcDB, rcMgr, rcOpening, rcSelf, rcNull );
 
-    return KDBManagerVOpenDBReadInt ( self, db, self -> wd, path, args, NULL );
+    return KDBManagerVOpenDBReadInt ( self, db, self -> wd, path, args, NULL, true );
 }
 
 LIB_EXPORT rc_t CC KDatabaseOpenDBRead ( const KDatabase *self,
@@ -640,7 +656,7 @@ LIB_EXPORT rc_t CC KDatabaseVOpenDBRead ( const KDatabase *self,
     {
         bool is_cached;
         rc = KDBManagerVOpenDBReadInt ( self -> mgr, dbp,
-            self -> dir, path, NULL, & is_cached );
+                                        self -> dir, path, NULL, & is_cached, false );
         if ( rc == 0 && ! is_cached )
         {
             KDatabase *db = ( KDatabase* ) * dbp;
@@ -703,7 +719,7 @@ rc_t KDBManagerVOpenDBUpdateInt ( KDBManager *self,
             return RC ( rcDB, rcMgr, rcOpening, obj, rcBusy );
         }
         /* only open existing dbs */
-        switch (KDBPathType ( wd, dbpath ) )
+        switch (KDBPathType ( /*self,*/ wd, NULL, dbpath ) )
         {
         case kptNotFound:
             return RC ( rcDB, rcMgr, rcOpening, rcDatabase, rcNotFound );
@@ -713,7 +729,7 @@ rc_t KDBManagerVOpenDBUpdateInt ( KDBManager *self,
 	case kptFile | kptAlias:
 	    /* if we find a file, vary the failure if it is an archive that is a database
 	     * or a non related file */
-	    if ( KDBOpenPathTypeRead ( wd, dbpath, NULL, kptDatabase, NULL ) == 0 )
+	    if ( KDBOpenPathTypeRead ( self, wd, dbpath, NULL, kptDatabase, NULL, false ) == 0 )
 		return RC ( rcDB, rcMgr, rcOpening, rcDirectory, rcUnauthorized );
 	    /* fall through */
         default:
@@ -856,13 +872,53 @@ LIB_EXPORT bool CC KDatabaseLocked ( const KDatabase *self )
  *  returns true if requested object exists
  *
  *  "type" [ IN ] - a KDBPathType
- *  valid values are kptIndex and kptColumn
+ *  valid values are kptTable
  *
  *  "path" [ IN ] - NUL terminated path
  */
 LIB_EXPORT bool CC KDatabaseVExists ( const KDatabase *self, uint32_t type, const char *name, va_list args )
 {
-    /* TBD */
+    if ( self != NULL && name != NULL && name [ 0 ] != 0 )
+    {
+        rc_t rc;
+        size_t len;
+        const char *ns;
+        char path [ 256 ];
+
+        switch ( type )
+        {
+        case kptDatabase:
+            ns = "db";
+            len = 2;
+            break;
+
+        case kptTable:
+            ns = "tbl";
+            len = 3;
+            break;
+
+        case kptIndex:
+            ns = "idx";
+            len = 3;
+            break;
+
+        default:
+            return false;
+        }
+
+        rc = KDBVMakeSubPath ( self -> dir, path, sizeof path, ns, len, name, args );
+        if ( rc == 0 )
+        {
+            switch ( KDirectoryPathType ( self -> dir, path ) )
+            {
+            case kptFile:
+            case kptDir:
+            case kptFile | kptAlias:
+            case kptDir | kptAlias:
+                return true;
+            }
+        }
+    }
     return false;
 }
 
@@ -881,6 +937,83 @@ LIB_EXPORT bool CC KDatabaseExists ( const KDatabase *self, uint32_t type, const
 }
 
 
+/* IsAlias
+ *  returns true if object name is an alias
+ *  returns path to fundamental name if it was aliased
+ *
+ *  "type" [ IN ] - a KDBPathType
+ *  valid values are kptDatabase, kptTable and kptIndex
+ *
+ *  "resolved" [ OUT ] and "rsize" [ IN ] - optional output buffer
+ *  for fundamenta object name if "alias" is not a fundamental name, 
+ *
+ *  "name" [ IN ] - NUL terminated object name
+ */
+LIB_EXPORT bool CC KDatabaseIsAlias ( const KDatabase *self, uint32_t type,
+    char *resolved, size_t rsize, const char *name )
+{
+    if ( self != NULL && name != NULL && name [ 0 ] != 0 )
+    {
+        rc_t rc;
+        size_t len;
+        const char *ns;
+        char path [ 256 ];
+
+        switch ( type )
+        {
+        case kptDatabase:
+            ns = "db";
+            len = 2;
+            break;
+
+        case kptTable:
+            ns = "tbl";
+            len = 3;
+            break;
+
+        case kptIndex:
+            ns = "idx";
+            len = 3;
+            break;
+
+        default:
+            return false;
+        }
+
+        rc = KDBMakeSubPath ( self -> dir, path, sizeof path, ns, len, name );
+        if ( rc == 0 )
+        {
+            switch ( KDirectoryPathType ( self -> dir, path ) )
+            {
+            case kptFile | kptAlias:
+            case kptDir | kptAlias:
+                if ( resolved != NULL && rsize != 0 )
+                {
+                    const KDirectory *sub;
+                    rc = KDirectoryOpenDirRead ( self -> dir, & sub, false, ns );
+                    * resolved = 0;
+                    if ( rc != 0 )
+                        PLOGERR ( klogWarn, ( klogWarn, rc, "failed to open subdirectory '$(sub)'", "sub=%s", ns ) );
+                    else
+                    {
+                        rc = KDirectoryResolveAlias ( sub, false, resolved, rsize, name );
+                        KDirectoryRelease ( sub );
+                        if ( rc != 0 )
+                            PLOGERR ( klogWarn, ( klogWarn, rc, "failed to resolve alias '$(alias)'", "alias=%s", name ) );
+                    }
+                }
+                return true;
+            }
+        }
+    }
+
+    if ( resolved != NULL && rsize != 0 )
+        * resolved = 0;
+
+    return false;
+}
+
+
 /* Writable
  *  returns 0 if object is writable
  *  or a reason why if not
@@ -1303,19 +1436,29 @@ LIB_EXPORT rc_t CC KDatabaseModDate ( const KDatabase *self, KTime_t *mtime )
 /* List
  *  create database listings
  */
+struct FilterData
+{
+    const KDBManager * mgr;
+    int type;
+};
+
 static
-bool CC KDatabaseListFilter ( const KDirectory *dir, const char *name, void *data )
+bool CC KDatabaseListFilter ( const KDirectory *dir, const char *name, void *data_ )
 {
-    /* contains a pointer truncation from void* to long !!! on 64-bit-systems */
-    return ( KDBOpenPathTypeRead ( dir, name, NULL, ( long int ) data, NULL ) == 0 );
+    struct FilterData * data = data_;
+    return ( KDBOpenPathTypeRead ( data->mgr, dir, name, NULL, data->type, NULL, false ) == 0 );
 }
 
 LIB_EXPORT rc_t CC KDatabaseListDB ( const KDatabase *self, KNamelist **names )
 {
     if ( self != NULL )
     {
+        struct FilterData data;
+        data.mgr = self->mgr;
+        data.type = kptDatabase;
+
         return KDirectoryVList ( self -> dir,
-            names, KDatabaseListFilter, ( void* ) kptDatabase, "db", NULL );
+            names, KDatabaseListFilter, &data, "db", NULL );
     }
 
     if ( names != NULL )
@@ -1328,8 +1471,12 @@ LIB_EXPORT rc_t CC KDatabaseListTbl ( struct KDatabase const *self, KNamelist **
 {
     if ( self != NULL )
     {
+        struct FilterData data;
+        data.mgr = self->mgr;
+        data.type = kptTable;
+
         return KDirectoryVList ( self -> dir,
-            names, KDatabaseListFilter, ( void* ) kptTable, "tbl", NULL );
+            names, KDatabaseListFilter, &data, "tbl", NULL );
     }
 
     if ( names != NULL )
@@ -1342,8 +1489,12 @@ LIB_EXPORT rc_t CC KDatabaseListIdx ( struct KDatabase const *self, KNamelist **
 {
     if ( self != NULL )
     {
+        struct FilterData data;
+        data.mgr = self->mgr;
+        data.type = kptIndex;
+
         return KDirectoryVList ( self -> dir,
-            names, KDatabaseListFilter, ( void* ) kptIndex, "idx", NULL );
+            names, KDatabaseListFilter, &data, "idx", NULL );
     }
 
     if ( names != NULL )
diff --git a/libs/kdb/wdbmgr.c b/libs/kdb/wdbmgr.c
index 0896b48..7a5e70b 100644
--- a/libs/kdb/wdbmgr.c
+++ b/libs/kdb/wdbmgr.c
@@ -69,13 +69,15 @@ LIB_EXPORT rc_t CC KDBManagerMakeUpdate ( KDBManager **mgrp, KDirectory *wd )
  *  or a reason why if not
  *
  *  "path" [ IN ] - NUL terminated path
+ *
+ * TBD: Better reasons for non local paths
  */
 static
 rc_t KDBManagerWritableInt ( const KDirectory * dir, const char * path )
 {
     rc_t rc;
 
-    int type = KDBPathType ( dir, path ) & ~ kptAlias;
+    int type = KDBPathType ( /*NULL,*/ dir, NULL, path ) & ~ kptAlias;
     switch ( type )
     {
     case kptDatabase:
@@ -321,13 +323,12 @@ LIB_EXPORT rc_t CC KDBManagerRunPeriodicTasks ( const KDBManager *self )
 
 LIB_EXPORT int CC KDBManagerVPathType ( const KDBManager * self, const char *path, va_list args )
 {
-    rc_t rc;
-    char     full [ 8192 ];
-
-    rc = KDirectoryVResolvePath ( self->wd, false, full, sizeof full, path, args );
-    if (rc == 0)
+    if ( self != NULL )
     {
-        return KDBPathType ( self->wd, full );
+        char full [ 4096 ];
+        rc_t rc = KDirectoryVResolvePath ( self -> wd, false, full, sizeof full, path, args );
+        if ( rc == 0 )
+            return KDBPathType ( /*self,*/ self -> wd, NULL, full );
     }
     return kptBadPath;
 }
diff --git a/libs/kdb/windex.c b/libs/kdb/windex.c
index ee75eee..7a3b317 100644
--- a/libs/kdb/windex.c
+++ b/libs/kdb/windex.c
@@ -71,6 +71,7 @@ struct KIndex
         KTrieIndex_v2 txt2;
         KU64Index_v3  u64_3;
     } u;
+    bool converted_from_v1;
     uint8_t type;
     uint8_t read_only;
     uint8_t dirty;
@@ -129,7 +130,7 @@ rc_t KIndexWhack ( KIndex *self )
             {
                 self -> mgr = NULL;
 
-                rc = RC ( rcDB, rcIndex, rcDestroying, rcIndex, rcBadVersion );
+                rc = SILENT_RC ( rcDB, rcIndex, rcDestroying, rcIndex, rcBadVersion );
 
                 /* complete */
                 switch ( self -> type )
@@ -270,6 +271,9 @@ rc_t KIndexAttach ( KIndex *self, const KMMap *mm, bool *byteswap )
                 switch ( hdr -> version )
                 {
                 case 1:
+#if KDBINDEXVERS != 1
+                    self -> converted_from_v1 = true;
+#endif
                 case 2:
                     self -> type = kitText;
                     break;
@@ -673,7 +677,7 @@ rc_t KDBManagerCreateIndexInt ( KDBManager *self, KIndex **idxp,
     if ( rc == 0 )
     {
         KIndex *idx;
-        switch ( ptype = KDBPathType ( wd, idxpath ) )
+        switch ( ptype = KDBPathType ( wd, NULL, idxpath ) )
         {
         case kptNotFound:
             /* first good path */
@@ -1504,10 +1508,10 @@ LIB_EXPORT rc_t CC KIndexFindText ( const KIndex *self, const char *key, int64_t
         case 3:
         case 4:
 #if V2FIND_RETURNS_SPAN
-            rc = KTrieIndexFind_v2 ( & self -> u . txt2, key, start_id, & span, custom_cmp, data );
+            rc = KTrieIndexFind_v2 ( & self -> u . txt2, key, start_id, & span, custom_cmp, data, self -> converted_from_v1 );
 #else
             ( void ) ( span = 0 );
-            rc = KTrieIndexFind_v2 ( & self -> u . txt2, key, start_id, custom_cmp, data );
+            rc = KTrieIndexFind_v2 ( & self -> u . txt2, key, start_id, custom_cmp, data, self -> converted_from_v1  );
 #endif
             break;
         default:
@@ -1561,9 +1565,9 @@ LIB_EXPORT rc_t CC KIndexFindAllText ( const KIndex *self, const char *key,
         case 3:
         case 4:
 #if V2FIND_RETURNS_SPAN
-            rc = KTrieIndexFind_v2 ( & self -> u . txt2, key, & id64, & span, NULL, NULL );
+            rc = KTrieIndexFind_v2 ( & self -> u . txt2, key, & id64, & span, NULL, NULL, self -> converted_from_v1 );
 #else
-            rc = KTrieIndexFind_v2 ( & self -> u . txt2, key, & id64, NULL, NULL );
+            rc = KTrieIndexFind_v2 ( & self -> u . txt2, key, & id64, NULL, NULL, self -> converted_from_v1 );
 #endif
             if ( rc == 0 )
                 rc = ( * f ) ( id64, span, data );
diff --git a/libs/kdb/wkdb-priv.h b/libs/kdb/wkdb-priv.h
index b30d696..5f18aba 100644
--- a/libs/kdb/wkdb-priv.h
+++ b/libs/kdb/wkdb-priv.h
@@ -39,23 +39,22 @@
 extern "C" {
 #endif
 
+/*
+ * This symbol is inserted where the KDB is being tweaked to allow
+ * VFS URI syntax in opening KDB database objects initially to support
+ * krypto passwords more fully.  By specifying the password source
+ * individually for opens two KDB objects with different passwords can be opened.
+ */
+#define SUPPORT_VFS_URI 1
+
 
 /*--------------------------------------------------------------------------
  * forwards
  */
 struct BSTree;
 struct BSTNode;
-
-
-/*--------------------------------------------------------------------------
- * KDBPathType
- */
-enum
-{
-    kptMetadata = kptColumn + 1,
-    kptPrereleaseTbl
-};
-
+struct KDirectory;
+struct KDBManager;
 
 /*--------------------------------------------------------------------------
  * KDB utility
@@ -64,8 +63,11 @@ enum
 
 /* PathType
  *  checks type of path
+ *
+ * if mgr != NULL we will try accession and uri resolution on path
  */
-int KDBPathType ( const KDirectory *dir, const char *path );
+int KDBPathTypeDir ( const struct KDirectory *dir, int type,bool *zombies, const char *path );
+int KDBPathType ( const struct KDirectory *dir, bool *zombies, const char *path );
 
 /* OpenPathType
  * Opens a path if it is of the specified type.  Even if it is an archive file
@@ -81,37 +83,37 @@ int KDBPathType ( const KDirectory *dir, const char *path );
  * archive that is of the requested type.  An archive will have been opened
  * but reshut if dpdir is NULL.
  */ 
-rc_t KDBOpenPathTypeRead ( const KDirectory * dir, const char * path, 
-    const KDirectory ** dpdir, int pathtype, int * realpathtype );
+rc_t KDBOpenPathTypeRead ( const struct KDBManager * mgr, const struct KDirectory * dir, const char * path, 
+    const struct KDirectory ** dpdir, int pathtype, int * realpathtype, bool try_srapath );
 
 /* Writable
  *  examines a directory structure for any "lock" files
  *  examines a file for ( any ) write permission
  */
-bool KDBIsLocked ( const KDirectory *dir, const char *path );
-rc_t KDBWritable ( const KDirectory *dir, const char *path );
+bool KDBIsLocked ( const struct KDirectory *dir, const char *path );
+rc_t KDBWritable ( const struct KDirectory *dir, const char *path );
 
 /* Lock
  *  performs directory locking
  */
-rc_t KDBLockDir ( KDirectory *dir, const char *path );
-rc_t KDBLockFile ( KDirectory *dir, const char *path );
+rc_t KDBLockDir ( struct KDirectory *dir, const char *path );
+rc_t KDBLockFile ( struct KDirectory *dir, const char *path );
 
 /* Unlock
  *  performs directory unlocking
  */
-rc_t KDBUnlockDir ( KDirectory *dir, const char *path );
-rc_t KDBUnlockFile ( KDirectory *dir, const char *path );
+rc_t KDBUnlockDir ( struct KDirectory *dir, const char *path );
+rc_t KDBUnlockFile ( struct KDirectory *dir, const char *path );
 
 /* GetObjModDate
  *  extract mod date from a path
  */
-rc_t KDBGetObjModDate ( const KDirectory *dir, KTime_t *mtime );
+rc_t KDBGetObjModDate ( const struct KDirectory *dir, KTime_t *mtime );
 
 /* GetPathModDate
  *  extract mod date from a path
  */
-rc_t KDBVGetPathModDate ( const KDirectory *dir,
+rc_t KDBVGetPathModDate ( const struct KDirectory *dir,
     KTime_t *mtime, const char *path, va_list args );
 
 /* GetNamespaceString
@@ -120,28 +122,34 @@ rc_t KDBVGetPathModDate ( const KDirectory *dir,
  */
 const char * KDBGetNamespaceString ( int namespace );
 
+/* KDBMakeSubPath
+ *  adds a namespace to path spec
+ */
+rc_t KDBMakeSubPath ( struct KDirectory const *dir,
+    char *subpath, size_t subpath_max, const char *ns,
+    uint32_t ns_size, const char *path, ... );
 /* VMakeSubPath
  *  adds a namespace to path spec
  */
-rc_t KDBVMakeSubPath ( const KDirectory *dir,
+rc_t KDBVMakeSubPath ( const struct KDirectory *dir,
     char *subpath, size_t subpath_max, const char *ns,
     uint32_t ns_size, const char *path, va_list args );
 
 /* VDrop
  */
-rc_t KDBMgrVDrop ( KDirectory * dir, const KDBManager * mgr, uint32_t obj_type,
+rc_t KDBMgrVDrop ( struct KDirectory * dir, const struct KDBManager * mgr, uint32_t obj_type,
                    const char * path, va_list args );
-rc_t KDBVDrop ( KDirectory *dir, const KDBManager * mgr,
+rc_t KDBVDrop ( struct KDirectory *dir, const struct KDBManager * mgr,
     uint32_t type, const char *name, va_list args );
 
 /* Rename
  */
-rc_t KDBRename ( KDirectory *dir, KDBManager *mgr,
+rc_t KDBRename ( struct KDirectory *dir, struct KDBManager *mgr,
                  uint32_t type, bool force, const char *from, const char *to );
 
 /* Alias
  */
-rc_t KDBAlias ( KDirectory *dir, uint32_t type,
+rc_t KDBAlias ( struct KDirectory *dir, uint32_t type,
     const char *targ, const char *alias );
 
 
diff --git a/libs/kdb/wkdb.c b/libs/kdb/wkdb.c
index 102658b..cafad55 100644
--- a/libs/kdb/wkdb.c
+++ b/libs/kdb/wkdb.c
@@ -30,6 +30,16 @@
 #include "kdbfmt-priv.h"
 #include "dbmgr-priv.h"
 
+#include <krypto/key.h>
+#include <krypto/encfile.h>
+#include <krypto/wgaencrypt.h>
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <vfs/resolver.h>
+#include <vfs/manager-priv.h>
+#include <sra/srapath.h>
+
 #include <kfs/kfs-priv.h>
 #include <kfs/directory.h>
 #include <kfs/file.h>
@@ -46,12 +56,16 @@
 
 #include <limits.h>
 #include <stdlib.h>
+#include <stdio.h>
 #include <stdarg.h>
 #include <string.h>
 #include <ctype.h>
 #include <assert.h>
 #include <errno.h>
 
+#ifndef SUPPORT_VFS_URI
+#define SUPPORT_VFS_URI 0
+#endif
 
 /*--------------------------------------------------------------------------
  * (W)KDB utility
@@ -102,13 +116,14 @@ enum ScanBits
     scan_ofile  = ( 1 << 12 ),
     scan_meta   = ( 1 << 13 ),
     scan_skey   = ( 1 << 14 ),
-    scan_sealed = ( 1 << 15 )
+    scan_sealed = ( 1 << 15 ),
+    scan_zombie = ( 1 << 16 )
 };
 
 static
 rc_t CC scan_dbdir ( const KDirectory *dir, uint32_t type, const char *name, void *data )
 {
-    int *bits = data;
+    uint32_t *bits = data;
 
     type &= kptAlias - 1;
 
@@ -186,7 +201,11 @@ rc_t CC scan_dbdir ( const KDirectory *dir, uint32_t type, const char *name, voi
 
         * bits |= scan_ofile;
     }
-
+    else if (type == kptZombieFile )
+    {
+        * bits |= scan_zombie;
+    }
+    
     return 0;
 }
 
@@ -211,95 +230,119 @@ const char *KDBGetNamespaceString ( int namespace )
     }
 }
 
-int KDBPathType ( const KDirectory *dir, const char *path )
-{
-    const char *leaf, *parent;
 
+int KDBPathTypeDir (const KDirectory * dir, int type, bool * pHasZombies, const char * path)
+{
+    const char * leaf, * parent;
+    uint32_t bits;
     rc_t rc;
-    int bits;
-    int type = KDirectoryVPathType ( dir, path, NULL );
-    switch ( type )
+
+    bits = 0;
+
+    assert ((type == kptDir) || (type == (kptDir|kptAlias)));
+
+    rc = KDirectoryVVisit ( dir, false, scan_dbdir, & bits, path, NULL );
+    if ( rc == 0 ) do
     {
-    case kptDir:
-    case kptDir | kptAlias:
-        bits = 0;
-        rc = KDirectoryVVisit ( dir, false, scan_dbdir, & bits, path, NULL );
-        if ( rc == 0 )
+        if ( ( bits & scan_zombie ) != 0 ) {
+            bits &= ~scan_zombie;
+            if (pHasZombies)
+                *pHasZombies = true;
+        }
+        /* look for a column */
+        if ( ( bits & scan_idxN ) != 0 &&
+             ( bits & ( scan_data | scan_dataN ) ) != 0 )
         {
-            /* look for a column */
-            if ( ( bits & scan_idxN ) != 0 &&
-                 ( bits & ( scan_data | scan_dataN ) ) != 0 )
-            {
-                if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
-                    type += kptColumn - kptDir;
-                break;
-            }
+            if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
+                type += kptColumn - kptDir;
+            break;
+        }
 
-            /* look for a table */
-            if ( ( bits & scan_col ) != 0 )
+        /* look for a table */
+        if ( ( bits & scan_col ) != 0 )
+        {
+            /* can't have sub-tables or a db */
+            if ( ( bits & ( scan_db | scan_tbl ) ) == 0 )
             {
-                /* can't have sub-tables or a db */
-                if ( ( bits & ( scan_db | scan_tbl ) ) == 0 )
-                {
-                    /* look for an old-structure table */
-                    if ( ( bits & ( scan_meta | scan_md ) ) == scan_meta ||
-                         ( bits & ( scan_skey | scan_idx ) ) == scan_skey )
-                        type += kptPrereleaseTbl - kptDir;
-                    else
-                        type += kptTable - kptDir;
-                }
-                break;
+                /* look for an old-structure table */
+                if ( ( bits & ( scan_meta | scan_md ) ) == scan_meta ||
+                     ( bits & ( scan_skey | scan_idx ) ) == scan_skey )
+                    type += kptPrereleaseTbl - kptDir;
+                else
+                    type += kptTable - kptDir;
             }
+            break;
+        }
 
-            /* look for metadata */
-            if ( ( bits & ( scan_cur | scan_rNNN ) ) != 0 )
-            {
-                if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
-                    type += kptMetadata - kptDir;
-                break;
-            }
+        /* look for metadata */
+        if ( ( bits & ( scan_cur | scan_rNNN ) ) != 0 )
+        {
+            if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
+                type += kptMetadata - kptDir;
+            break;
+        }
 
-            /* look for a database */
-            if ( ( bits & scan_tbl ) != 0 )
-            {
-                if ( ( bits & scan_col ) == 0 )
-                    type += kptDatabase - kptDir;
-                break;
-            }
+        /* look for a database */
+        if ( ( bits & scan_tbl ) != 0 )
+        {
+            if ( ( bits & scan_col ) == 0 )
+                type += kptDatabase - kptDir;
+            break;
+        }
 
-            /* look for a structured column */
-            if ( ( bits & scan_odir ) != 0 )
+        /* look for a structured column */
+        if ( ( bits & scan_odir ) != 0 )
+        {
+            leaf = strrchr ( path, '/' );
+            if ( leaf != NULL )
             {
-                leaf = strrchr ( path, '/' );
-                if ( leaf != NULL )
-                {
-                    parent = string_rchr ( path, leaf - path, '/' );
-                    if ( parent ++ == NULL )
-                        parent = path;
-                    if ( memcmp ( parent, "col/", 4 ) != 0 )
-                        break;
+                parent = string_rchr ( path, leaf - path, '/' );
+                if ( parent ++ == NULL )
+                    parent = path;
+                if ( memcmp ( parent, "col/", 4 ) != 0 )
+                    break;
 
-                    bits = 0;
-                    if ( KDirectoryVVisit ( dir, 1, scan_dbdir, & bits, path, NULL ) == 0 )
+                bits = 0;
+                if ( KDirectoryVVisit ( dir, 1, scan_dbdir, & bits, path, NULL ) == 0 )
+                {
+                    if ( ( bits & scan_idxN ) != 0 &&
+                         ( bits & ( scan_data | scan_dataN ) ) != 0 )
                     {
-                        if ( ( bits & scan_idxN ) != 0 &&
-                             ( bits & ( scan_data | scan_dataN ) ) != 0 )
-                        {
-                            if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
-                                type += kptColumn - kptDir;
-                            break;
-                        }
+                        if ( ( bits & ( scan_db | scan_tbl | scan_idx | scan_col ) ) == 0 )
+                            type += kptColumn - kptDir;
+                        break;
                     }
                 }
             }
         }
+    } while (0);
+
+    return type;
+}
+
+
+int KDBPathType ( const KDirectory *dir, bool *pHasZombies, const char *path )
+{
+    const char *leaf, *parent;
+
+
+    rc_t rc;
+    int type = KDirectoryVPathType ( dir, path, NULL );
+    
+    if (pHasZombies)
+        *pHasZombies = false;
+
+    switch ( type )
+    {
+    case kptDir:
+    case kptDir | kptAlias:
+        type = KDBPathTypeDir (dir, type, pHasZombies, path);
         break;
 
     case kptFile:
     case kptFile | kptAlias:
     {
         /* if we hit a file first try it as an archive */
-        rc_t rc;
         const KDirectory * ldir;
 
         rc = KDirectoryOpenSraArchiveRead_silent ( dir, &ldir, false, path );
@@ -311,7 +354,7 @@ int KDBPathType ( const KDirectory *dir, const char *path )
             /* recheck this newly opened directory for KDB/KFS type */
             int type2;
 
-            type2 = KDBPathType ( ldir, "." );
+            type2 = KDBPathType ( ldir, NULL, "." );
             if ((type2 != kptDir) || (type != (kptDir|kptAlias)))
                 type = type2;
 
@@ -333,111 +376,341 @@ int KDBPathType ( const KDirectory *dir, const char *path )
         break;
     }
     }
-
     return type;
 }
 
 
-rc_t KDBOpenPathTypeRead ( const KDirectory * dir, const char * path, 
-    const KDirectory ** pdir, int pathtype, int * ppathtype )
+
+#if SUPPORT_VFS_URI
+#else
+/* return configured password as ASCIZ
+ * opertates on vfs/kfs/kfg objects, not kdb objects */
+static
+rc_t KDBOpenFileGetPassword (char * pw, size_t pwz)
 {
-    rc_t rc = 0;
-    uint32_t dtype;
-    int type;
-    const KDirectory * ldir;
+    VFSManager * mgr;
+    rc_t rc;
 
-    /* set local directory pointer to error state NULL */
-    ldir = NULL;
-    rc = 0;
+    assert (pw);
+    assert (pwz);
 
-    type = dtype = KDirectoryPathType (dir, path);
+    pw[0] = '\0';
 
-    switch (dtype)
+    rc = VFSManagerMake (&mgr);
+    if (rc)
+        ;                      /* failure to make VFS manager: pass along rc */
+    else
     {
-    case kptDir:
-    case kptDir | kptAlias:
-        type = KDBPathType ( dir, path );
+        size_t pwfz;
+        char pwf [4096 + 1];
 
-        if (( type == pathtype ) || (type == (pathtype|kptAlias)))
+        rc = VFSManagerGetConfigPWFile (mgr, pwf, sizeof (pwf) - 1, &pwfz);
+        if (rc)
+            /* failure to get password file path: tweak rc */
+            rc = RC (rcDB, rcMgr, rcOpening, rcEncryptionKey, rcNotFound);
+
+        else
         {
-            rc = KDirectoryVOpenDirUpdate ( ( KDirectory * ) dir, ( KDirectory ** ) & ldir, false, path, NULL );
-            if ( rc != 0)
+            VPath * pwp;
+
+            pwf [pwfz] = '\0'; /* force to ASCIZ */
+
+            rc = VPathMakeSysPath (&pwp, pwf);
+
+            if (rc)
+                ;       /* failure to construct a path from the string */
+            
+            else
             {
-                rc = KDirectoryVOpenDirRead ( dir, &ldir, false, path, NULL );
+                const KFile * pwf;
+          
+                rc = VFSManagerOpenFileRead (mgr, &pwf, pwp);
+                if (rc)
+                    /* failure to open password file */
+                    rc = RC (rcDB, rcMgr, rcOpening, rcEncryptionKey, rcNotOpen);
+
+                else
+                {
+                    size_t z;
+                    char pwb [4098]; /* arbitrarily using 4096 as maximum
+                                        allowed length */
+
+                    /* at this point we are only getting the password from a 
+                     * file but in the future if we can get it from a pipe of
+                     * some sort we can't count on the ReadAll to really know
+                     * if we hit end of file and not just a pause in the
+                     * streaming.  VFS/KFS 2 will have to fix this somehow
+                     */
+
+                    rc = KFileReadAll (pwf, 0, pwb, sizeof pwb, &z);
+                    if (rc)
+                        ;       /* failure to read password file: pass along rc */
+                    else
+                    {
+                        /* trim off EOL if present */
+                        char * pc;
+
+                        pwb[z] = '\0';   /* force ASCIZ */
+
+                        pc = string_chr (pwb, z, '\r');
+                        if (pc)
+                        {
+                            *pc = '\0';
+                            z = 1 + pc - pwb;
+                        }
+                        pc = string_chr (pwb, z, '\n');
+                        if (pc)
+                        {
+                            *pc = '\0';
+                            z = 1 + pc - pwb;
+                        }
+                        if (z == 0)
+                            rc = RC (rcDB, rcMgr, rcOpening, rcEncryptionKey, rcTooShort);
+
+                        else if (pwz < z) /* pwz came in as 4096 */
+                            rc = RC (rcDB, rcMgr, rcOpening, rcEncryptionKey, rcTooLong);
+
+                        else
+                        {
+                            memmove (pw, pwb, z+1);
+                        }
+                    }
+                    KFileRelease (pwf);
+                }
+                VPathRelease (pwp);
             }
         }
-        break;
+        VFSManagerRelease (mgr);
+    }
+    return rc;
+}
 
-    case kptFile:
-    case kptFile | kptAlias:
-        rc = KDirectoryOpenSraArchiveRead_silent ( dir, &ldir, false, path );
-        if ( rc != 0 )
-            rc = KDirectoryOpenTarArchiveRead_silent ( dir, &ldir, false, path );
-        if ( rc == 0 )
+
+/* not KDB specific - just uses vfs/krypto/kfs objects */
+static
+rc_t KDBOpenFileAsDirectory (const KDirectory * dir,
+                             const char * path, 
+                             const KDirectory ** pdir,
+                             uint32_t rcobj)
+{
+    const KFile * file;
+    const KFile * f;
+    const KDirectory * ldir;
+    bool encrypted = false;
+
+    rc_t rc;
+
+    *pdir = NULL;
+
+    rc = KDirectoryOpenFileRead (dir, &file, path);
+    if (rc == 0)
+    {
+        rc = KFileRandomAccess(file);
+        if (rc)
+            rc = RC (rcDB, rcMgr, rcOpening, rcobj, rcUnsupported);
+        else
         {
-            /* recheck this newly opened directory for KDB/KFS type */
-            type = KDBPathType ( ldir, "." );
+            size_t tz;
+            char tbuff [4096];
+            char pbuff [4096 + 1];
 
-            /* it its not the KDB type we wanted fail */
-            if (( type != pathtype ) && (type != (pathtype | kptAlias )))
+            rc = KFileReadAll (file, 0, tbuff, sizeof tbuff, &tz);
+            if (rc == 0)
             {
-                KDirectoryRelease (ldir);
-                ldir = NULL;
-                rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcIncorrect );
+                if (KFileIsEnc (tbuff, tz) == 0)
+                {
+                    encrypted = true;
+
+                    rc = KDBOpenFileGetPassword (pbuff, sizeof (pbuff) - 1);
+                    if (rc == 0)
+                    {
+                        KKey key;
+
+                        rc = KKeyInitRead (&key, kkeyAES128, pbuff, string_size (pbuff));
+                        if (rc == 0)
+                        {
+                            rc = KEncFileMakeRead (&f, file, &key);
+                            if (rc == 0)
+                            {
+                                /* KEncFileMakeRead adds a reference */
+                                KFileRelease (file);
+                                file = f;
+                                rc = KFileReadAll (file, 0, tbuff, sizeof tbuff, &tz);
+                            }
+                        }
+                    }
+                }
+                else if (KFileIsWGAEnc (tbuff, tz) == 0)
+                {
+                    encrypted = true;
+
+                    rc = KDBOpenFileGetPassword (pbuff, sizeof (pbuff) - 1);
+                    if (rc == 0)
+                    {
+                        rc = KFileMakeWGAEncRead (&f, file, pbuff, string_size (pbuff));
+                        if (rc == 0)
+                        {
+                            /* KFileMakeWGAEncRead adds a reference */
+                            KFileRelease (file);
+                            file = f;
+                            rc = KFileReadAll (file, 0, tbuff, sizeof tbuff, &tz);
+                        }
+                    }
+                }
+                /* else not a handled encryption or unencrypted: we can't distinguish too much */
+
+                if (rc == 0)
+                {
+                    if (KFileIsSRA (tbuff, tz) == 0)
+                    {
+                        rc = KDirectoryOpenSraArchiveReadUnbounded_silent_preopened (dir,
+                                                                                     &ldir,
+                                                                                     false,
+                                                                                     file,
+                                                                                     path);
+                    }
+                    else
+                    {
+                        rc = KDirectoryOpenTarArchiveRead_silent_preopened (dir, &ldir, false,
+                                                                            file, path);
+                        if (rc == 0)
+                            KFileRelease (file);
+                    }
+
+                    /* not an archive type we handle or a bad archive */
+                    if (rc)
+                    {
+                        if (encrypted)
+                            rc = RC ( rcDB, rcMgr, rcOpening, rcEncryptionKey, rcIncorrect );
+                        else
+                            rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcIncorrect );
+                    }
+                    else
+                    {
+                        /*
+                         * release our ownership of the KFile that but archive will 
+                         * keep theirs
+                         */
+                        KFileRelease (file);
+                        *pdir = ldir;
+                        return 0;
+                    }
+                }
             }
         }
-        else if ( rc != 0 )
-        {
-            rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcIncorrect );
-        }
-        break;
+        KFileRelease (file);
     }
+    return rc;
+}
+#endif
+
 
-    if (( rc != 0 ) || (( type != pathtype ) && (type != (pathtype|kptAlias))))
+static rc_t KDBOpenPathTypeReadInt ( const KDBManager * mgr, const KDirectory * dir, const char * path,
+                                     const KDirectory ** pdir, int * type,
+                                     int pathtype, uint32_t rcobj, bool try_srapath )
+{
+    VFSManager * vmgr = mgr->vfsmgr;
+    const KDirectory * ldir = NULL;
+    rc_t rc = 0;
+
+    /* object relative opens can be done using KFS - we hacked in VFS after all */
+    if (! try_srapath)
     {
-        /* tune the error message based on path type */
-        uint32_t obj;
-        switch ( pathtype )
-        {
-        default:
-            obj = rcType;
-            break;
-        case kptTable:
-        case kptTable | kptAlias:
-        case kptPrereleaseTbl:
-        case kptPrereleaseTbl | kptAlias:
-            obj = rcTable;
-            break;
-        case kptColumn:
-        case kptColumn | kptAlias:
-            obj = rcColumn;
-            break;
-        case kptDatabase:
-        case kptDatabase | kptAlias:
-            obj = rcDatabase;
-            break;
-        }
-        switch ( type )
+        rc = KDirectoryOpenDirUpdate ((KDirectory*)dir, (KDirectory**)pdir, false, path);
+        if ((rc) && (GetRCState(rc) != rcNotFound))
+            rc = KDirectoryOpenDirRead (dir, pdir, false, path);
+    }
+    else
+    {
+        VPath * vpath;
+
+        /*
+         * We've got to decide if the path coming in is a full or relative
+         * path and if relative make it relative to dir or possibly its a srapath
+         * accession
+         *
+         */
+        rc = VPathMakeDirectoryRelative ( &vpath, dir, path, NULL );
+        if ( rc == 0 )
         {
-        case kptNotFound:
-            rc =  RC ( rcDB, rcMgr, rcOpening, obj, rcNotFound );
-            break;
-        case kptBadPath:
-            rc =  RC ( rcDB, rcMgr, rcOpening, rcPath, rcInvalid );
-            break;
-        default:
-            rc = RC ( rcDB, rcMgr, rcOpening, rcPath, rcIncorrect );
-            break;
+            rc = VFSManagerOpenDirectoryReadDirectoryRelativeDecrypt ( vmgr, dir, &ldir, vpath );
+
+            if ( rc == 0 )
+            {
+                *type = (~kptAlias) & KDBPathType ( ldir, NULL, "." );
+
+                /* just a directory, not a kdb type */
+                if ( *type == kptDir )
+                    rc = RC (rcDB, rcMgr, rcOpening, rcPath, rcIncorrect);
+
+                else if ( *type != pathtype )
+                {
+                    KDirectoryRelease( ldir );
+                    rc = RC ( rcDB, rcMgr, rcOpening, rcobj, rcIncorrect );
+                }
+                else
+                {
+                    if ( pdir != NULL )
+                        *pdir = ldir;
+                    else
+                        KDirectoryRelease( ldir );
+                }
+            }
+            VPathRelease ( vpath );
         }
     }
-    if ((rc != 0) || ((ldir != NULL) && (pdir == NULL)))
+    return rc;
+}
+
+rc_t KDBOpenPathTypeRead ( const KDBManager * mgr, const KDirectory * dir, const char * path, 
+    const KDirectory ** pdir, int pathtype, int * ppathtype, bool try_srapath )
+{
+    const KDirectory *ldir;
+    rc_t rc = 0;
+    uint32_t rcobj;
+    int type = kptNotFound; /* bogus? */
+
+/*     KOutMsg ("%s: %s\n", __func__, path); */
+
+    if ( pdir != NULL )
+        *pdir = NULL;
+    if ( ppathtype != NULL )
+        *ppathtype = type;
+
+    switch (pathtype & ~ kptAlias) /* tune the error message based on path type */
     {
-        KDirectoryRelease ( ldir );
-        ldir = NULL;
+        /* we'll hit this if we don't track defines in kdb/manager.h */
+    default:
+        rc = RC (rcDB, rcMgr, rcOpening, rcType, rcInvalid);
+        return rc;
+
+    case kptTable:
+    case kptPrereleaseTbl:
+        rcobj = rcTable;
+        break;
+
+    case kptColumn:
+        rcobj = rcColumn;
+        break;
+
+    case kptDatabase:
+    case kptDatabase | kptAlias:
+        rcobj = rcDatabase;
+        break;
     }
 
-    if (pdir != NULL)
-        *pdir = ldir;
+    rc = KDBOpenPathTypeReadInt( mgr, dir, path, &ldir, &type, pathtype, rcobj, try_srapath );
+
+    if (rc == 0)
+    {
+        if ( ppathtype != NULL )
+            *ppathtype = type;
+
+        if (pdir != NULL)
+            *pdir = ldir;
+        else
+            KDirectoryRelease (ldir);
+    }
 
     return rc;
 }
@@ -449,7 +722,6 @@ rc_t KDBOpenPathTypeRead ( const KDirectory * dir, const char * path,
  */
 rc_t KDBWritable ( const KDirectory *dir, const char *path )
 {
-    /* we have to be able to check the access if it is to be writable */
     uint32_t access;
     rc_t rc;
 
@@ -508,7 +780,7 @@ rc_t KDBWritable ( const KDirectory *dir, const char *path )
             {
             case kptFile:
             case kptFile | kptAlias:
-                rc = RC (rcDB, rcPath, rcAccessing, rcLock, rcLocked );
+                rc = RC ( rcDB, rcPath, rcAccessing, rcLock, rcLocked );
                 break;
             case kptNotFound:
                 break;
@@ -528,7 +800,8 @@ rc_t KDBWritable ( const KDirectory *dir, const char *path )
             rc = RC ( rcDB, rcPath, rcAccessing, rcPath, rcInvalid);
             break;
         default:
-            /* a bad "file" type with the name of our object
+            /* an illegal type of object named "lock" is in this directory
+             * which will block the ability to lock it
              */
             rc = RC (rcDB, rcPath, rcAccessing, rcPath, rcUnexpected);
         }
@@ -536,6 +809,7 @@ rc_t KDBWritable ( const KDirectory *dir, const char *path )
     return rc;
 }
 
+
 bool KDBIsLocked ( const KDirectory *dir, const char *path )
 {
 
@@ -753,10 +1027,24 @@ rc_t KDBVMakeSubPath ( struct KDirectory const *dir,
         subpath_max -= ns_size + 1;
     }
 
+#if CRUFTY_USE_OF_RESOLVE_PATH
     /* because this call only builds a path instead of resolving anything
      * is is okay that we are using the wrong directory */
     rc = KDirectoryVResolvePath ( dir, false,
         subpath, subpath_max, path, args );
+#else
+    {
+        int sz = vsnprintf ( subpath, subpath_max, path, args );
+        if ( sz < 0 || ( size_t ) sz >= subpath_max )
+            rc = RC ( rcDB, rcDirectory, rcResolving, rcBuffer, rcInsufficient );
+        else if ( sz == 0 )
+            rc = RC ( rcDB, rcDirectory, rcResolving, rcPath, rcEmpty );
+        else
+        {
+            rc = 0;
+        }
+    }
+#endif
     switch ( GetRCState ( rc ) )
     {
     case 0:
@@ -779,6 +1067,21 @@ rc_t KDBVMakeSubPath ( struct KDirectory const *dir,
     return 0;
 }
 
+/* KDBMakeSubPath
+ *  adds a namespace to path spec
+ */
+rc_t KDBMakeSubPath ( struct KDirectory const *dir,
+    char *subpath, size_t subpath_max, const char *ns,
+    uint32_t ns_size, const char *path, ... )
+{
+    rc_t rc = 0;
+    va_list args;
+    va_start(args, path);
+    rc = KDBVMakeSubPath(dir, subpath, subpath_max, ns, ns_size, path, args);
+    va_end(args);
+    return rc;
+}
+
 /* VDrop
  */
 static
@@ -801,7 +1104,7 @@ rc_t KDBMgrVDrop ( KDirectory * dir, const KDBManager * mgr, uint32_t obj_type,
                                   path, args );
     if (rc == 0)
     {
-        int pt = KDBPathType ( dir, full_path );
+        int pt = KDBPathType ( /*mgr,*/ dir, NULL, full_path );
         switch ( pt )
         {
         case kptNotFound:
@@ -868,7 +1171,7 @@ rc_t KDBVDrop ( KDirectory *dir, const KDBManager * mgr,
         path, sizeof path, ns, ns_size, name, args );
     if ( rc == 0 )
     {
-        int pt = KDBPathType ( dir, path );
+        int pt = KDBPathType ( /*mgr,*/ dir, NULL, path );
         switch ( pt )
         {
         case kptNotFound:
@@ -892,7 +1195,7 @@ rc_t KDBVDrop ( KDirectory *dir, const KDBManager * mgr,
         case kptFile | kptAlias:
         case kptFile:
 	    /* can we get here?  Will we have needed to open for update to get here? */
-	    rc = KDBOpenPathTypeRead ( dir, path, NULL, type, NULL );
+	    rc = KDBOpenPathTypeRead ( mgr, dir, path, NULL, type, NULL, false );
 	    if ( rc == 0 )
                 return RC ( rcDB, rcDirectory, rcRemoving, rcPath, rcReadonly );
             /* fall through */
@@ -950,12 +1253,12 @@ rc_t KDBRename ( KDirectory *dir, KDBManager *mgr, uint32_t type, bool force,
         return RC ( rcDB, rcDirectory, rcRenaming, rcType, rcIncorrect );
     }
 
-    rc = KDBVMakeSubPath ( dir,
-        src, sizeof src, ns, ns_size, from, NULL );
+    rc = KDBMakeSubPath ( dir,
+        src, sizeof src, ns, ns_size, from);
     if ( rc == 0 )
     {
         char dst [ 256 ];
-        int pt = KDBPathType ( dir, src );
+        int pt = KDBPathType ( /*mgr,*/ dir, NULL, src );
         switch ( pt )
         {
         case kptNotFound:
@@ -980,8 +1283,8 @@ rc_t KDBRename ( KDirectory *dir, KDBManager *mgr, uint32_t type, bool force,
             return RC ( rcDB, rcDirectory, rcRenaming, rcPath, rcIncorrect );
         }
 
-        rc = KDBVMakeSubPath ( dir,
-            dst, sizeof dst, ns, ns_size, to, NULL );
+        rc = KDBMakeSubPath ( dir,
+            dst, sizeof dst, ns, ns_size, to );
         if ( rc == 0 )
         {
             if ( KDirectoryVPathType ( dir, dst, NULL ) != kptNotFound )
@@ -1043,12 +1346,12 @@ rc_t KDBAlias ( KDirectory *dir, uint32_t type,
         return RC ( rcDB, rcDirectory, rcAliasing, rcType, rcIncorrect );
     }
 
-    rc = KDBVMakeSubPath ( dir,
-        src, sizeof src, ns, ns_size, targ, NULL );
+    rc = KDBMakeSubPath ( dir,
+        src, sizeof src, ns, ns_size, targ );
     if ( rc == 0 )
     {
         char dst [ 256 ];
-        int pt = KDBPathType ( dir, src );
+        int pt = KDBPathType ( /*NULL,*/ dir, NULL, src );
         switch ( pt )
         {
         case kptNotFound:
@@ -1060,7 +1363,7 @@ rc_t KDBAlias ( KDirectory *dir, uint32_t type,
         case kptTable | kptAlias:
         case kptIndex | kptAlias:
         case kptColumn | kptAlias:
-            pt -= kptAlias;
+            pt &= ~ kptAlias;
 
         case kptDatabase:
         case kptTable:
@@ -1073,8 +1376,8 @@ rc_t KDBAlias ( KDirectory *dir, uint32_t type,
             return RC ( rcDB, rcDirectory, rcAliasing, rcPath, rcIncorrect );
         }
 
-        rc = KDBVMakeSubPath ( dir,
-            dst, sizeof dst, ns, ns_size, alias, NULL );
+        rc = KDBMakeSubPath ( dir,
+            dst, sizeof dst, ns, ns_size, alias );
         if ( rc == 0 )
         {
             rc = KDirectoryCreateAlias ( dir,
@@ -1084,3 +1387,27 @@ rc_t KDBAlias ( KDirectory *dir, uint32_t type,
 
     return rc;
 }
+
+
+/* KDBIsPathUri
+ * A hack to get some of VFS into KDB that is too tightly bound to KFS
+ */
+
+bool KDBIsPathUri (const char * path)
+{
+    const char * pc;
+    size_t z;
+
+    z = string_size (path);
+
+    if (NULL != (pc = string_chr (path, z, ':')))
+        return true;
+
+    if (NULL != (pc = string_chr (path, z, '?')))
+        return true;
+
+    if (NULL != (pc = string_chr (path, z, '#')))
+        return true;
+
+    return false;
+}
diff --git a/libs/kdb/wmeta.c b/libs/kdb/wmeta.c
index 55ea58c..4a55b07 100644
--- a/libs/kdb/wmeta.c
+++ b/libs/kdb/wmeta.c
@@ -38,6 +38,7 @@ struct KMDataNodeNamelist;
 #include "kdbfmt-priv.h"
 
 #include <kdb/meta.h>
+#include <kdb/namelist.h>
 #include <klib/container.h>
 #include <klib/pbstree.h>
 #include <klib/namelist.h>
@@ -47,12 +48,13 @@ struct KMDataNodeNamelist;
 #include <kfs/md5.h>
 #include <klib/symbol.h>
 #include <klib/refcount.h>
-#include <klib/rc.h>
 #include <klib/debug.h>
+#include <klib/log.h>
+#include <klib/rc.h>
 #include <atomic.h>
-#include <strtol.h>
 #include <os-native.h>
 #include <sysalloc.h>
+#include <strtol.h>
 
 #ifndef TRACK_REFERENCES
 #define TRACK_REFERENCES 0
@@ -66,6 +68,8 @@ struct KMDataNodeNamelist;
 #include <assert.h>
 
 #define KMETADATAVERS 2
+#define NODE_SIZE_LIMIT ( 25 * 1024 * 1024 )
+#define NODE_CHILD_LIMIT ( 100 * 1024 )
 
 
 typedef struct KMDataNodeInflateData KMDataNodeInflateData;
@@ -74,6 +78,8 @@ struct KMDataNodeInflateData
     KMetadata *meta;
     KMDataNode *par;
     BSTree *bst;
+    size_t node_size_limit;
+    uint32_t node_child_limit;
     rc_t rc;
     bool byteswap;
 };
@@ -392,7 +398,7 @@ bool CC KMDataNodeInflate_v1 ( PBSTNode *n, void *data )
     }
 
     pb -> rc = RC ( rcDB, rcMetadata, rcConstructing, rcMemory, rcExhausted );
-    free ( n );
+    free ( b );
     return true;
 }
 
@@ -411,6 +417,8 @@ rc_t KMDataNodeInflateAttr ( KMDataNode *n, bool byteswap )
         pb . meta = n -> meta;
         pb . par = n;
         pb . bst = & n -> attr;
+        pb . node_size_limit = 0;
+        pb . node_child_limit = 0;
         pb . rc = 0;
         pb . byteswap = byteswap;
         PBSTreeDoUntil ( bst, 0, KMAttrNodeInflate, & pb );
@@ -428,7 +436,8 @@ static
 bool CC KMDataNodeInflate ( PBSTNode *n, void *data );
 
 static
-rc_t KMDataNodeInflateChild ( KMDataNode *n, bool byteswap )
+rc_t KMDataNodeInflateChild ( KMDataNode *n,
+    size_t node_size_limit, uint32_t node_child_limit, bool byteswap )
 {
     PBSTree *bst;
     rc_t rc = PBSTreeMake ( & bst, n -> value, n -> vsize, byteswap );
@@ -436,16 +445,55 @@ rc_t KMDataNodeInflateChild ( KMDataNode *n, bool byteswap )
         rc = RC ( rcDB, rcMetadata, rcConstructing, rcData, rcCorrupt );
     else
     {
-        KMDataNodeInflateData pb;
+        uint32_t bst_count = PBSTreeCount ( bst );
         size_t bst_size = PBSTreeSize ( bst );
+        bool inflate = node_child_limit == 0;
+        if ( ! inflate ) {
+            if ( bst_count > node_child_limit )
+            {
+                PLOGMSG ( klogWarn, ( klogWarn,
+                                      "refusing to inflate metadata node '$(node)' "
+                                      "within file '$(path)': "
+                                      "number of children ($(num_children)) "
+                                      "exceeds limit ($(limit))."
+                                      , "node=%s,path=%s,num_children=%u,limit=%u"
+                                      , n -> name
+                                      , n -> meta -> path
+                                      , bst_count
+                                      , node_child_limit )
+                    );
+            }
+            else if ( bst_size > node_size_limit )
+            {
+                PLOGMSG ( klogWarn, ( klogWarn,
+                                      "refusing to inflate metadata node '$(node)' "
+                                      "within file '$(path)': "
+                                      "node size ($(node_size)) exceeds limit ($(limit))."
+                                     , "node=%s,path=%s,node_size=%zu,limit=%zu"
+                                     , n -> name
+                                     , n -> meta -> path
+                                     , bst_size
+                                     , node_size_limit )
+                    );
+            }
+            else {
+                inflate = true;
+            }
+        }
 
-        pb . meta = n -> meta;
-        pb . par = n;        
-        pb . bst = & n -> child;
-        pb . rc = 0;
-        pb . byteswap = byteswap;
-        PBSTreeDoUntil ( bst, 0, KMDataNodeInflate, & pb );
-        rc = pb . rc;
+        if ( inflate ) {
+            KMDataNodeInflateData pb;
+
+            pb . meta = n -> meta;
+            pb . par = n;        
+            pb . bst = & n -> child;
+            pb . node_size_limit = node_size_limit;
+            pb . node_child_limit = node_child_limit;
+            pb . rc = 0;
+            pb . byteswap = byteswap;
+            PBSTreeDoUntil ( bst, 0, KMDataNodeInflate, & pb );
+            rc = pb . rc;
+        }
         
         PBSTreeWhack ( bst );
         
@@ -494,7 +542,8 @@ bool CC KMDataNodeInflate ( PBSTNode *n, void *data )
     pb -> rc = ( bits & 1 ) != 0 ? KMDataNodeInflateAttr ( b, pb -> byteswap ) : 0;
     if ( pb -> rc == 0 )
     {
-        pb -> rc = ( bits & 2 ) != 0 ? KMDataNodeInflateChild ( b, pb -> byteswap ) : 0;
+        pb -> rc = ( bits & 2 ) != 0 ?
+            KMDataNodeInflateChild ( b, pb -> node_size_limit, pb -> node_child_limit, pb -> byteswap ) : 0;
         if ( pb -> rc == 0 )
         {
             void *value;
@@ -522,7 +571,7 @@ bool CC KMDataNodeInflate ( PBSTNode *n, void *data )
         BSTreeWhack ( & b -> attr, KMAttrNodeWhack, NULL );
     }
 
-    free ( n );
+    free ( b );
     return true;
 }
 
@@ -2464,7 +2513,7 @@ rc_t KMetadataSever ( const KMetadata *self )
  */
 
 static
-rc_t KMetadataPopulate ( KMetadata *self, const KDirectory *dir, const char *path )
+rc_t KMetadataPopulate ( KMetadata *self, const KDirectory *dir, const char *path, bool read_only )
 {
     const KFile *f;
     rc_t rc = KDirectoryVOpenFileRead ( dir, & f, path, NULL );
@@ -2524,6 +2573,8 @@ rc_t KMetadataPopulate ( KMetadata *self, const KDirectory *dir, const char *pat
                         pb . meta = self;
                         pb . par = self -> root;
                         pb . bst = & self -> root -> child;
+                        pb . node_size_limit = read_only ? NODE_SIZE_LIMIT : 0;
+                        pb . node_child_limit = read_only ? NODE_CHILD_LIMIT : 0;
                         pb . rc = 0;
                         pb . byteswap = self -> byteswap;
 
@@ -2608,7 +2659,7 @@ rc_t KMetadataMake ( KMetadata **metap,
                 return 0;
             }
             
-            rc = KMetadataPopulate ( meta, dir, path );
+            rc = KMetadataPopulate ( meta, dir, path, read_only );
             if ( rc == 0 )
             {
                 KDirectoryAddRef ( dir );
@@ -2621,6 +2672,7 @@ rc_t KMetadataMake ( KMetadata **metap,
 
         free ( meta );
     }
+    * metap = NULL;
     return rc;
 }
 
@@ -2731,11 +2783,11 @@ rc_t KDBManagerOpenMetadataReadInt ( KDBManager *self,
                     * metap = meta;
                     return 0;
                 }
+
+                KMetadataRelease ( meta );
             }
 
 /*             rc = RC ( rcDB, rcMgr, rcOpening, rcMetadata, rcExists ); */
-
-            KMetadataRelease ( meta );
         }
     }
     
@@ -3462,7 +3514,7 @@ void CC KMDataNodeGrabName ( BSTNode *n, void *data )
     list -> namelist [ list -> count ++ ] = ( ( const KMDataNode* ) n ) -> name;
 }
 
-LIB_EXPORT rc_t CC KMDataNodeListChild ( const KMDataNode *self, KNamelist **names )
+LIB_EXPORT rc_t CC KMDataNodeListChildren ( const KMDataNode *self, KNamelist **names )
 {
     rc_t rc;
     unsigned int count;
diff --git a/libs/kdb/wtable.c b/libs/kdb/wtable.c
index 5a463e1..9fe225a 100644
--- a/libs/kdb/wtable.c
+++ b/libs/kdb/wtable.c
@@ -37,6 +37,8 @@
 #include <klib/namelist.h>
 #include <klib/symbol.h>
 #include <kdb/namelist.h>
+#include <klib/log.h>
+#include <klib/printf.h>
 #include <klib/rc.h>
 #include <kfs/directory.h>
 #include <kfs/file.h>
@@ -58,6 +60,22 @@
  *  a collection of columns indexed by row id, metadata, indices
  */
 
+/* GetPath
+ *  return the absolute path to table
+ */
+LIB_EXPORT rc_t CC KTableGetPath ( const KTable *self,
+    const char **path )
+{
+    if ( self == NULL )
+        return RC ( rcDB, rcTable, rcAccessing, rcSelf, rcNull );
+    if ( path == NULL )
+        return RC ( rcDB, rcTable, rcAccessing, rcParam, rcNull );
+
+    *path = self->path;
+
+    return 0;
+}
+
 /* Whack
  */
 static
@@ -365,7 +383,7 @@ rc_t KDBManagerVCreateTableInt ( KDBManager *self,
         bool convert = false;
         bool not_found = false;
 
-        switch ( KDBPathType ( wd, tblpath ) )
+        switch ( KDBPathType ( /*NULL,*/ wd, NULL, tblpath ) )
         {
         case kptNotFound:
             not_found = true;
@@ -404,8 +422,8 @@ rc_t KDBManagerVCreateTableInt ( KDBManager *self,
         case kptFile | kptAlias:
             /* if we find a file, vary the failure if it is an archive that is a table
              * or a non related file */
-            if (( KDBOpenPathTypeRead ( wd, tblpath, NULL, kptTable, NULL ) == 0 ) ||
-                ( KDBOpenPathTypeRead ( wd, tblpath, NULL, kptPrereleaseTbl, NULL ) == 0 ) )
+            if (( KDBOpenPathTypeRead ( self, wd, tblpath, NULL, kptTable, NULL, false ) == 0 ) ||
+                ( KDBOpenPathTypeRead ( self, wd, tblpath, NULL, kptPrereleaseTbl, NULL, false ) == 0 ) )
                 return RC ( rcDB, rcMgr, rcCreating, rcTable, rcReadonly );
             /* fall through */
         default:
@@ -561,24 +579,27 @@ LIB_EXPORT rc_t CC KDatabaseVCreateTable ( KDatabase *self,
  */
 static
 rc_t KDBManagerVOpenTableReadInt ( const KDBManager *cself,
-    const KTable **tblp, const KDirectory *wd,
+    const KTable **tblp, const KDirectory *wd, bool try_srapath,
     const char *path, va_list args )
 {
+    rc_t rc;
     char tblpath [ 4096 ];
-    rc_t rc = KDirectoryVResolvePath ( wd, true,
-        tblpath, sizeof tblpath, path, args );
+    size_t z;
+
+/*    rc = KDirectoryVResolvePath ( wd, 1,
+        tblpath, sizeof tblpath, path, args ); */
+    rc = string_vprintf( tblpath, sizeof tblpath, &z, path, args );
     if ( rc == 0 )
     {
         KSymbol *sym;
-        const KDirectory *dir;
-        bool prerelease = false;
-
+        
         /* if already open */
         sym = KDBManagerOpenObjectFind (cself, tblpath);
         if (sym != NULL)
         {
             const KTable * ctbl;
             rc_t obj;
+
             switch (sym->type)
             {
             case kptTable:
@@ -594,7 +615,7 @@ rc_t KDBManagerVOpenTableReadInt ( const KDBManager *cself,
                 }
                 obj = rcTable;
                 break;
-
+                
             default:
                 obj = rcPath;
                 break;
@@ -611,39 +632,41 @@ rc_t KDBManagerVOpenTableReadInt ( const KDBManager *cself,
                 obj = rcMetadata;
                 break;
             }
-            return  RC (rcDB, rcMgr, rcOpening, obj, rcBusy);
+            rc = RC (rcDB, rcMgr, rcOpening, obj, rcBusy);
         }
-	rc = KDBOpenPathTypeRead ( wd, tblpath, &dir, kptTable, NULL );
-	if ( rc != 0 )
-	{
-	    prerelease = true;
-	    rc = KDBOpenPathTypeRead ( wd, tblpath, &dir, kptPrereleaseTbl, NULL );
-	}
-
-	if ( rc == 0 )
+        else
         {
-            KTable *tbl;
+            KTable * tbl;
+            const KDirectory *dir;
+            bool prerelease = false;
 
-            rc = KTableMake ( & tbl, dir, tblpath, NULL, true );
+            rc = KDBOpenPathTypeRead ( cself, wd, tblpath, &dir, kptTable, NULL, try_srapath );
+            if ( rc != 0 )
+            {
+                prerelease = true;
+                rc = KDBOpenPathTypeRead ( cself, wd, tblpath, &dir, kptPrereleaseTbl, NULL, try_srapath );
+            }        
             if ( rc == 0 )
             {
-                KDBManager *self = ( KDBManager* ) cself;
-
-                rc = KDBManagerInsertTable ( self, tbl );
+                rc = KTableMake ( & tbl, dir, tblpath, NULL, true );
                 if ( rc == 0 )
                 {
-                    tbl -> prerelease = prerelease;
-                    * tblp = tbl;
-                    return 0;
-                }
+                    KDBManager * self = (KDBManager *)cself;
 
-                free ( tbl );
-            }
+                    rc = KDBManagerInsertTable (self, tbl );
 
-            KDirectoryRelease ( dir );
+                    if (rc == 0)
+                    {
+                        tbl -> prerelease = prerelease;
+                        * tblp = tbl;
+                        return 0;
+                    }
+                    free ( tbl );
+                }
+                KDirectoryRelease ( dir );
+            }
         }
     }
-    
     return rc;
 }
 
@@ -671,7 +694,7 @@ LIB_EXPORT rc_t CC KDBManagerVOpenTableRead ( const KDBManager *self,
     if ( self == NULL )
         return RC ( rcDB, rcMgr, rcOpening, rcSelf, rcNull );
 
-    return KDBManagerVOpenTableReadInt ( self, tbl, self -> wd, path, args );
+    return KDBManagerVOpenTableReadInt ( self, tbl, self -> wd, true, path, args );
 }
 
 LIB_EXPORT rc_t CC KDatabaseOpenTableRead ( const KDatabase *self,
@@ -706,7 +729,7 @@ LIB_EXPORT rc_t CC KDatabaseVOpenTableRead ( const KDatabase *self,
     if ( rc == 0 )
     {
         rc = KDBManagerVOpenTableReadInt ( self -> mgr, tblp,
-            self -> dir, path, NULL );
+                                           self -> dir, false, path, NULL );
         if ( rc == 0 )
         {
             KTable *tbl = ( KTable* ) * tblp;
@@ -769,7 +792,7 @@ rc_t KDBManagerVOpenTableUpdateInt ( KDBManager *self,
             return RC ( rcDB, rcMgr, rcOpening, obj, rcBusy );
         }
         /* only open existing tbls */
-        switch ( KDBPathType ( wd, tblpath ) )
+        switch ( KDBPathType ( /*NULL,*/ wd, NULL, tblpath ) )
         {
         case kptNotFound:
             return RC ( rcDB, rcMgr, rcOpening, rcTable, rcNotFound );
@@ -781,8 +804,8 @@ rc_t KDBManagerVOpenTableUpdateInt ( KDBManager *self,
         case kptFile | kptAlias:
             /* if we find a file, vary the failure if it is an archive that is a table
              * or a non related file */
-            if (( KDBOpenPathTypeRead ( wd, tblpath, NULL, kptTable, NULL ) == 0 ) ||
-                ( KDBOpenPathTypeRead ( wd, tblpath, NULL, kptPrereleaseTbl, NULL ) == 0 ) )
+            if (( KDBOpenPathTypeRead ( self, wd, tblpath, NULL, kptTable, NULL, false ) == 0 ) ||
+                ( KDBOpenPathTypeRead ( self, wd, tblpath, NULL, kptPrereleaseTbl, NULL, false ) == 0 ) )
                 return RC ( rcDB, rcMgr, rcCreating, rcTable, rcUnauthorized );
             /* fall through */
         default:
@@ -987,6 +1010,75 @@ LIB_EXPORT bool CC KTableExists ( const KTable *self, uint32_t type, const char
 }
 
 
+/* IsAlias
+ *  returns true if object name is an alias
+ *  returns path to fundamental name if it was aliased
+ *
+ *  "type" [ IN ] - a KDBPathType
+ *  valid values are kptIndex and kptColumn
+ *
+ *  "resolved" [ OUT ] and "rsize" [ IN ] - optional output buffer
+ *  for fundamenta object name if "alias" is not a fundamental name, 
+ *
+ *  "name" [ IN ] - NUL terminated object name
+ */
+LIB_EXPORT bool CC KTableIsAlias ( const KTable *self, uint32_t type,
+    char *resolved, size_t rsize, const char *name )
+{
+    if ( self != NULL && name != NULL && name [ 0 ] != 0 )
+    {
+        rc_t rc;
+        const char *ns;
+        char path [ 256 ];
+
+        switch ( type )
+        {
+        case kptIndex:
+            ns = "idx";
+            break;
+
+        case kptColumn:
+            ns = "col";
+            break;
+
+        default:
+            return false;
+        }
+
+        rc = KDBMakeSubPath ( self -> dir, path, sizeof path, ns, 3, name );
+        if ( rc == 0 )
+        {
+            switch ( KDirectoryPathType ( self -> dir, path ) )
+            {
+            case kptFile | kptAlias:
+            case kptDir | kptAlias:
+                if ( resolved != NULL && rsize != 0 )
+                {
+                    const KDirectory *sub;
+                    rc = KDirectoryOpenDirRead ( self -> dir, & sub, false, ns );
+                    * resolved = 0;
+                    if ( rc != 0 )
+                        PLOGERR ( klogWarn, ( klogWarn, rc, "failed to open subdirectory '$(sub)'", "sub=%s", ns ) );
+                    else
+                    {
+                        rc = KDirectoryResolveAlias ( sub, false, resolved, rsize, name );
+                        KDirectoryRelease ( sub );
+                        if ( rc != 0 )
+                            PLOGERR ( klogWarn, ( klogWarn, rc, "failed to resolve alias '$(alias)'", "alias=%s", name ) );
+                    }
+                }
+                return true;
+            }
+        }
+    }
+
+    if ( resolved != NULL && rsize != 0 )
+        * resolved = 0;
+
+    return false;
+}
+
+
 /* Writable
  *  returns 0 if object is writable
  *  or a reason why if not
@@ -1211,7 +1303,7 @@ LIB_EXPORT rc_t CC KTableReindex ( KTable *self )
                        idx0 is used for cursor sessions */
                     if ( KTableColumnNeedsReindex ( self, name ) )
                     {
-                        rc = KTableVOpenColumnUpdate ( self, & col, name, NULL );
+                        rc = KTableOpenColumnUpdate ( self, & col, name );
                         if ( rc != 0 )
                         {
                             if ( GetRCState ( rc ) == rcBusy )
@@ -1430,18 +1522,30 @@ LIB_EXPORT rc_t CC KTableModDate ( const KTable *self, KTime_t *mtime )
 /* List
  *  create table listings
  */
+struct FilterData
+{
+    const KDBManager * mgr;
+    int type;
+};
+
 static
-bool CC KDatabaseListFilter ( const KDirectory *dir, const char *name, void *data )
+bool CC KDatabaseListFilter ( const KDirectory *dir, const char *name, void *data_ )
 {
-    return KDBOpenPathTypeRead(dir, name, NULL, (intptr_t)data, NULL) == 0;
+    struct FilterData * data = data_;
+
+    return KDBOpenPathTypeRead(data->mgr, dir, name, NULL, data->type, NULL, false) == 0;
 }
 
 LIB_EXPORT rc_t CC KTableListCol ( const KTable *self, KNamelist **names )
 {
     if ( self != NULL )
     {
+        struct FilterData data;
+        data.mgr = self->mgr;
+        data.type = kptColumn;
+
         return KDirectoryVList ( self -> dir,
-                                names, KDatabaseListFilter, ( void* ) kptColumn, "col", NULL );
+            names, KDatabaseListFilter, &data, "col", NULL );
     }
     
     if ( names != NULL )
diff --git a/libs/kdb/wtrieidx-v1.c b/libs/kdb/wtrieidx-v1.c
index 095a71a..b5073c3 100644
--- a/libs/kdb/wtrieidx-v1.c
+++ b/libs/kdb/wtrieidx-v1.c
@@ -414,7 +414,7 @@ rc_t KTrieIndexPersistProj_v1 ( const KTrieIndex_v1 *self, PersistTrieData *pb )
         {
             size_t num_read;
             num_to_read = file_size - sizeof ( KDBHdr );
-            rc = KFileRead ( pb -> f, sizeof ( KDBHdr ),
+            rc = KFileReadAll ( pb -> f, sizeof ( KDBHdr ),
                 addr, num_to_read, & num_read );
             if ( rc != 0 )
                 free ( addr );
diff --git a/libs/kdb/wtrieidx-v2.c b/libs/kdb/wtrieidx-v2.c
index 1d70e28..b3dd8ab 100644
--- a/libs/kdb/wtrieidx-v2.c
+++ b/libs/kdb/wtrieidx-v2.c
@@ -799,7 +799,7 @@ rc_t KPTrieIndexFind_v2 ( const KPTrieIndex_v2 *self,
 #if V2FIND_RETURNS_SPAN
     uint32_t *span,
 #endif
-    int ( CC * custom_cmp ) ( const void *item, const PBSTNode *n, void *data ), void *data )
+    int ( CC * custom_cmp ) ( const void *item, const PBSTNode *n, void *data ), void *data, bool convertFromV1 )
 {
     rc_t rc;
 
@@ -823,7 +823,7 @@ rc_t KPTrieIndexFind_v2 ( const KPTrieIndex_v2 *self,
             size_t usize;
 
             /* detect conversion from v1 */
-            if ( self -> id_bits == 0 )
+            if ( convertFromV1 && self -> id_bits == 0 )
             {
                 /* v1 stored tree will have just a 32-bit spot id as data */
                 uint32_t id;
@@ -1514,7 +1514,7 @@ rc_t KTrieIndexPersistProj_v2 ( const KTrieIndex_v2 *self, PersistTrieData *pb )
         num_to_read = file_size - sizeof ( KPTrieIndexHdr_v2 );
         if ( rc == 0 )
         {
-            rc = KFileRead ( pb -> f, sizeof ( KPTrieIndexHdr_v2 ), addr,
+            rc = KFileReadAll ( pb -> f, sizeof ( KPTrieIndexHdr_v2 ), addr,
 			     num_to_read, & num_read );
             if ( rc == 0 )
             {
@@ -1641,7 +1641,7 @@ rc_t KTrieIndexPersistProj_v3 ( const KTrieIndex_v2 *self, PersistTrieData *pb )
         {
             size_t num_read;
             num_to_read = file_size - sizeof ( KPTrieIndexHdr_v3 );
-            rc = KFileRead ( pb -> f, sizeof ( KPTrieIndexHdr_v3 ),
+            rc = KFileReadAll ( pb -> f, sizeof ( KPTrieIndexHdr_v3 ),
                 addr, num_to_read, & num_read );
             if ( rc != 0 )
                 free ( addr );
@@ -2420,7 +2420,7 @@ rc_t KTrieIndexFind_v2 ( const KTrieIndex_v2 *self,
 #if V2FIND_RETURNS_SPAN
     uint32_t *span,
 #endif
-    int ( CC * custom_cmp ) ( const void *item, const PBSTNode *n, void *data ), void *data )
+    int ( CC * custom_cmp ) ( const void *item, const PBSTNode *n, void *data ), void *data, bool convertFromV1 )
 {
     /* search within in-core index */
     if ( self -> count != 0 )
@@ -2468,7 +2468,7 @@ rc_t KTrieIndexFind_v2 ( const KTrieIndex_v2 *self,
 #if V2FIND_RETURNS_SPAN
                                     span,
 #endif
-                                    custom_cmp, data );
+                                    custom_cmp, data, convertFromV1 );
     }
 
     return RC ( rcDB, rcIndex, rcSelecting, rcString, rcNotFound );
@@ -2485,7 +2485,7 @@ struct KTrieIndexProjectData_v2
 static
 bool CC KTrieIndexProjectScan_v2 ( TNode *n, void *data )
 {
-    KTrieIndexProjectData_v2 *pb = data;
+    KTrieIndexProjectData_v2 *pb = (KTrieIndexProjectData_v2 *)data;
     const KTrieIdxNode_v2_s2 *node = ( const KTrieIdxNode_v2_s2* ) n;
 
     if ( pb -> id >= node -> start_id &&
diff --git a/libs/kfg/Makefile b/libs/kfg/Makefile
index 85344d1..0d3fcb4 100644
--- a/libs/kfg/Makefile
+++ b/libs/kfg/Makefile
@@ -36,6 +36,9 @@ ALL_LIBS = \
 	$(INT_LIBS) \
 	$(EXT_LIBS)
 
+TEST_TOOLS = \
+	wb-test-kfg
+
 include $(TOP)/build/Makefile.env
 
 #-------------------------------------------------------------------------------
@@ -50,7 +53,10 @@ $(INT_LIBS): makedirs
 $(EXT_LIBS): makedirs
 	@ $(MAKE_CMD) $(LIBDIR)/$@
 
-.PHONY: all std $(ALL_LIBS)
+$(TEST_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: all std $(ALL_LIBS) $(TEST_TOOLS)
 
 #-------------------------------------------------------------------------------
 # std
@@ -65,6 +71,7 @@ $(TARGDIR)/std: \
 # clean
 #
 clean: stdclean
+	@ rm -f $(addsuffix *,$(addprefix $(TEST_BINDIR)/,$(TEST_TOOLS)))
 
 .PHONY: clean
 
@@ -79,10 +86,18 @@ tag: \
 #-------------------------------------------------------------------------------
 # kfg
 #
-$(LIBDIR)/libkfg: $(addprefix $(LIBDIR)/libkfg.,$(LIBEXT))
+$(LIBDIR)/libkfg: $(NCBIDIR)/default.kfg $(addprefix $(LIBDIR)/libkfg.,$(LIBEXT))
+
+$(NCBIDIR)/default.kfg: $(SRCDIR)/default.kfg
+	rm -f $(NCBIDIR)/config.kfg
+	cp $^ $@
 
 KFG_SRC = \
-	config
+	config-grammar \
+	config-lex \
+	config \
+	repository \
+	report-kfg
 
 KFG_OBJ = \
 	$(addsuffix .$(LOBX),$(KFG_SRC))
@@ -99,3 +114,25 @@ $(LIBDIR)/libkfg.$(LIBX): $(KFG_OBJ)
 
 libkfg_tag:
 	@ $(TOP)/build/tag-module.sh $(MODULE) libkfg $(KFG_OBJ)
+
+#-------------------------------------------------------------------------------
+# white-box test
+#
+TEST_SRC = \
+	wb-test-kfg
+
+TEST_OBJ = \
+	$(addsuffix .$(OBJX),$(TEST_SRC))
+
+TEST_LIB = \
+	-sktst \
+	-skapp \
+	-svfs \
+	-skurl \
+	-skrypto \
+	-skfg \
+	-skfs \
+	-sklib 
+
+$(TEST_BINDIR)/wb-test-kfg: $(TEST_OBJ)
+	$(LP) --exe -o $@ $^ $(TEST_LIB) 
diff --git a/libs/kfg/config-grammar.c b/libs/kfg/config-grammar.c
new file mode 100644
index 0000000..60c9a8a
--- /dev/null
+++ b/libs/kfg/config-grammar.c
@@ -0,0 +1,1725 @@
+/* A Bison parser, made by GNU Bison 2.5.  */
+
+/* Bison implementation for Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+   
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.5"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 1
+
+/* Push parsers.  */
+#define YYPUSH 0
+
+/* Pull parsers.  */
+#define YYPULL 1
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+/* Substitute the variable and function names.  */
+#define yyparse         KFG_parse
+#define yylex           KFG_lex
+#define yyerror         KFG_error
+#define yylval          KFG_lval
+#define yychar          KFG_char
+#define yydebug         KFG_debug
+#define yynerrs         KFG_nerrs
+
+
+/* Copy the first part of user declarations.  */
+
+  
+	#include <sysalloc.h>
+
+	#include "kfg-parse.h"
+	
+	#define YYSTYPE KFGSymbol
+	#include "config-tokens.h"
+		
+	#define KFG_lex KFGScan_yylex
+	
+	/* required parameter to VNamelistMake */
+	#define NAMELIST_ALLOC_BLKSIZE 10
+	
+	static void ReportRc(KFGParseBlock* pb, KFGScanBlock* sb, rc_t rc);
+	static void AppendName(KFGScanBlock* sb, VNamelist*, const KFGParseBlock*);
+
+
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     kfgEND_INPUT = 0,
+     kfgEND_LINE = 258,
+     kfgUNTERM_STRING = 259,
+     kfgUNTERM_ESCAPED_STRING = 260,
+     kfgUNRECOGNIZED = 261,
+     kfgVAR_REF = 262,
+     kfgUNTERM_VAR_REF = 263,
+     kfgASSIGN = 264,
+     kfgSTRING = 265,
+     kfgESCAPED_STRING = 266,
+     kfgABS_PATH = 267,
+     kfgREL_PATH = 268
+   };
+#endif
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+
+
+	KFGParseBlock		pb;
+	const VNamelist*	namelist;
+
+
+
+} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+/* Copy the second part of user declarations.  */
+
+
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+    int yyi;
+#endif
+{
+  return yyi;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef EXIT_SUCCESS
+#      define EXIT_SUCCESS 0
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
+       && ! ((defined YYMALLOC || defined malloc) \
+	     && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef EXIT_SUCCESS
+#    define EXIT_SUCCESS 0
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  yytype_int16 yyss_alloc;
+  YYSTYPE yyvs_alloc;
+};
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+# define YYCOPY_NEEDED 1
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
+    do									\
+      {									\
+	YYSIZE_T yynewbytes;						\
+	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
+	Stack = &yyptr->Stack_alloc;					\
+	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+	yyptr += yynewbytes / sizeof (*yyptr);				\
+      }									\
+    while (YYID (0))
+
+#endif
+
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)		\
+      do					\
+	{					\
+	  YYSIZE_T yyi;				\
+	  for (yyi = 0; yyi < (Count); yyi++)	\
+	    (To)[yyi] = (From)[yyi];		\
+	}					\
+      while (YYID (0))
+#  endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  13
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   21
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  14
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  8
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  17
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  23
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   268
+
+#define YYTRANSLATE(YYX)						\
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint8 yyprhs[] =
+{
+       0,     0,     3,     5,     7,     9,    12,    17,    19,    22,
+      24,    26,    28,    30,    32,    35,    38,    40
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int8 yyrhs[] =
+{
+      15,     0,    -1,    16,    -1,     0,    -1,    17,    -1,    16,
+      17,    -1,    18,    19,    20,    21,    -1,     3,    -1,     1,
+      21,    -1,    12,    -1,    13,    -1,     9,    -1,    10,    -1,
+      11,    -1,    20,    10,    -1,    20,    11,    -1,     3,    -1,
+       0,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint8 yyrline[] =
+{
+       0,    82,    82,    83,    87,    88,    92,   101,   102,   106,
+     107,   111,   115,   116,   117,   118,   122,   123
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
+{
+  "kfgEND_INPUT", "error", "$undefined", "kfgEND_LINE",
+  "kfgUNTERM_STRING", "kfgUNTERM_ESCAPED_STRING", "kfgUNRECOGNIZED",
+  "kfgVAR_REF", "kfgUNTERM_VAR_REF", "kfgASSIGN", "kfgSTRING",
+  "kfgESCAPED_STRING", "kfgABS_PATH", "kfgREL_PATH", "$accept", "config",
+  "name_value_pairs", "name_value_pair", "pathname", "assign_op", "value",
+  "line_end", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    14,    15,    15,    16,    16,    17,    17,    17,    18,
+      18,    19,    20,    20,    20,    20,    21,    21
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     1,     1,     1,     2,     4,     1,     2,     1,
+       1,     1,     1,     1,     2,     2,     1,     1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+   Performed when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint8 yydefact[] =
+{
+       0,     3,     0,     7,     9,    10,     0,     0,     4,     0,
+      17,    16,     8,     1,     5,    11,     0,    12,    13,     0,
+      14,    15,     6
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int8 yydefgoto[] =
+{
+      -1,     6,     7,     8,     9,    16,    19,    12
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -5
+static const yytype_int8 yypact[] =
+{
+       0,    -5,     6,    -5,    -5,    -5,     2,     4,    -5,     1,
+      -5,    -5,    -5,    -5,    -5,    -5,    10,    -5,    -5,     8,
+      -5,    -5,    -5
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int8 yypgoto[] =
+{
+      -5,    -5,    -5,     7,    -5,    -5,    -5,    -4
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -3
+static const yytype_int8 yytable[] =
+{
+       1,     2,    13,     3,    -2,     2,    10,     3,    10,    11,
+      15,    11,     4,     5,    14,    22,     4,     5,    20,    21,
+      17,    18
+};
+
+#define yypact_value_is_default(yystate) \
+  ((yystate) == (-5))
+
+#define yytable_value_is_error(yytable_value) \
+  YYID (0)
+
+static const yytype_uint8 yycheck[] =
+{
+       0,     1,     0,     3,     0,     1,     0,     3,     0,     3,
+       9,     3,    12,    13,     7,    19,    12,    13,    10,    11,
+      10,    11
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint8 yystos[] =
+{
+       0,     0,     1,     3,    12,    13,    15,    16,    17,    18,
+       0,     3,    21,     0,    17,     9,    19,    10,    11,    20,
+      10,    11,    21
+};
+
+#define yyerrok		(yyerrstatus = 0)
+#define yyclearin	(yychar = YYEMPTY)
+#define YYEMPTY		(-2)
+#define YYEOF		0
+
+#define YYACCEPT	goto yyacceptlab
+#define YYABORT		goto yyabortlab
+#define YYERROR		goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  However,
+   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
+   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+   discussed.  */
+
+#define YYFAIL		goto yyerrlab
+#if defined YYFAIL
+  /* This is here to suppress warnings from the GCC cpp's
+     -Wunused-macros.  Normally we don't worry about that warning, but
+     some users do, and we want to make it easy for users to remove
+     YYFAIL uses, which will produce warnings from Bison 2.5.  */
+#endif
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)					\
+do								\
+  if (yychar == YYEMPTY && yylen == 1)				\
+    {								\
+      yychar = (Token);						\
+      yylval = (Value);						\
+      YYPOPSTACK (1);						\
+      goto yybackup;						\
+    }								\
+  else								\
+    {								\
+      yyerror (pb, sb, YY_("syntax error: cannot back up")); \
+      YYERROR;							\
+    }								\
+while (YYID (0))
+
+
+#define YYTERROR	1
+#define YYERRCODE	256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)				\
+    do									\
+      if (YYID (N))                                                    \
+	{								\
+	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
+	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
+	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
+	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
+	}								\
+      else								\
+	{								\
+	  (Current).first_line   = (Current).last_line   =		\
+	    YYRHSLOC (Rhs, 0).last_line;				\
+	  (Current).first_column = (Current).last_column =		\
+	    YYRHSLOC (Rhs, 0).last_column;				\
+	}								\
+    while (YYID (0))
+#endif
+
+
+/* This macro is provided for backward compatibility. */
+
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, YYLEX_PARAM)
+#else
+# define YYLEX yylex (&yylval, sb)
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)			\
+do {						\
+  if (yydebug)					\
+    YYFPRINTF Args;				\
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
+do {									  \
+  if (yydebug)								  \
+    {									  \
+      YYFPRINTF (stderr, "%s ", Title);					  \
+      yy_symbol_print (stderr,						  \
+		  Type, Value, pb, sb); \
+      YYFPRINTF (stderr, "\n");						  \
+    }									  \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, KFGParseBlock* pb, KFGScanBlock* sb)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep, pb, sb)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+    KFGParseBlock* pb;
+    KFGScanBlock* sb;
+#endif
+{
+  if (!yyvaluep)
+    return;
+  YYUSE (pb);
+  YYUSE (sb);
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+	break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, KFGParseBlock* pb, KFGScanBlock* sb)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep, pb, sb)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+    KFGParseBlock* pb;
+    KFGScanBlock* sb;
+#endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep, pb, sb);
+  YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+#else
+static void
+yy_stack_print (yybottom, yytop)
+    yytype_int16 *yybottom;
+    yytype_int16 *yytop;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; yybottom <= yytop; yybottom++)
+    {
+      int yybot = *yybottom;
+      YYFPRINTF (stderr, " %d", yybot);
+    }
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)				\
+do {								\
+  if (yydebug)							\
+    yy_stack_print ((Bottom), (Top));				\
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule, KFGParseBlock* pb, KFGScanBlock* sb)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule, pb, sb)
+    YYSTYPE *yyvsp;
+    int yyrule;
+    KFGParseBlock* pb;
+    KFGScanBlock* sb;
+#endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+	     yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+		       &(yyvsp[(yyi + 1) - (yynrhs)])
+		       		       , pb, sb);
+      YYFPRINTF (stderr, "\n");
+    }
+}
+
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yydebug)				\
+    yy_reduce_print (yyvsp, Rule, pb, sb); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef	YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
+{
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+	switch (*++yyp)
+	  {
+	  case '\'':
+	  case ',':
+	    goto do_not_strip_quotes;
+
+	  case '\\':
+	    if (*++yyp != '\\')
+	      goto do_not_strip_quotes;
+	    /* Fall through.  */
+	  default:
+	    if (yyres)
+	      yyres[yyn] = *yyp;
+	    yyn++;
+	    break;
+
+	  case '"':
+	    if (yyres)
+	      yyres[yyn] = '\0';
+	    return yyn;
+	  }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+   about the unexpected token YYTOKEN for the state stack whose top is
+   YYSSP.
+
+   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
+   not large enough to hold the message.  In that case, also set
+   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
+   required number of bytes is too large to store.  */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+                yytype_int16 *yyssp, int yytoken)
+{
+  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
+  YYSIZE_T yysize = yysize0;
+  YYSIZE_T yysize1;
+  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+  /* Internationalized format string. */
+  const char *yyformat = 0;
+  /* Arguments of yyformat. */
+  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+  /* Number of reported tokens (one for the "unexpected", one per
+     "expected"). */
+  int yycount = 0;
+
+  /* There are many possibilities here to consider:
+     - Assume YYFAIL is not used.  It's too flawed to consider.  See
+       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+       for details.  YYERROR is fine as it does not invoke this
+       function.
+     - If this state is a consistent state with a default action, then
+       the only way this function was invoked is if the default action
+       is an error action.  In that case, don't check for expected
+       tokens because there are none.
+     - The only way there can be no lookahead present (in yychar) is if
+       this state is a consistent state with a default action.  Thus,
+       detecting the absence of a lookahead is sufficient to determine
+       that there is no unexpected or expected token to report.  In that
+       case, just report a simple "syntax error".
+     - Don't assume there isn't a lookahead just because this state is a
+       consistent state with a default action.  There might have been a
+       previous inconsistent state, consistent state with a non-default
+       action, or user semantic action that manipulated yychar.
+     - Of course, the expected token list depends on states to have
+       correct lookahead information, and it depends on the parser not
+       to perform extra reductions after fetching a lookahead from the
+       scanner and before detecting a syntax error.  Thus, state merging
+       (from LALR or IELR) and default reductions corrupt the expected
+       token list.  However, the list is correct for canonical LR with
+       one exception: it will still contain any token that will not be
+       accepted due to an error action in a later state.
+  */
+  if (yytoken != YYEMPTY)
+    {
+      int yyn = yypact[*yyssp];
+      yyarg[yycount++] = yytname[yytoken];
+      if (!yypact_value_is_default (yyn))
+        {
+          /* Start YYX at -YYN if negative to avoid negative indexes in
+             YYCHECK.  In other words, skip the first -YYN actions for
+             this state because they are default actions.  */
+          int yyxbegin = yyn < 0 ? -yyn : 0;
+          /* Stay within bounds of both yycheck and yytname.  */
+          int yychecklim = YYLAST - yyn + 1;
+          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+          int yyx;
+
+          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+                && !yytable_value_is_error (yytable[yyx + yyn]))
+              {
+                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+                  {
+                    yycount = 1;
+                    yysize = yysize0;
+                    break;
+                  }
+                yyarg[yycount++] = yytname[yyx];
+                yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+                if (! (yysize <= yysize1
+                       && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+                  return 2;
+                yysize = yysize1;
+              }
+        }
+    }
+
+  switch (yycount)
+    {
+# define YYCASE_(N, S)                      \
+      case N:                               \
+        yyformat = S;                       \
+      break
+      YYCASE_(0, YY_("syntax error"));
+      YYCASE_(1, YY_("syntax error, unexpected %s"));
+      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+    }
+
+  yysize1 = yysize + yystrlen (yyformat);
+  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+    return 2;
+  yysize = yysize1;
+
+  if (*yymsg_alloc < yysize)
+    {
+      *yymsg_alloc = 2 * yysize;
+      if (! (yysize <= *yymsg_alloc
+             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+      return 1;
+    }
+
+  /* Avoid sprintf, as that infringes on the user's name space.
+     Don't have undefined behavior even if the translation
+     produced a string with the wrong number of "%s"s.  */
+  {
+    char *yyp = *yymsg;
+    int yyi = 0;
+    while ((*yyp = *yyformat) != '\0')
+      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+        {
+          yyp += yytnamerr (yyp, yyarg[yyi++]);
+          yyformat += 2;
+        }
+      else
+        {
+          yyp++;
+          yyformat++;
+        }
+  }
+  return 0;
+}
+#endif /* YYERROR_VERBOSE */
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, KFGParseBlock* pb, KFGScanBlock* sb)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep, pb, sb)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+    KFGParseBlock* pb;
+    KFGScanBlock* sb;
+#endif
+{
+  YYUSE (yyvaluep);
+  YYUSE (pb);
+  YYUSE (sb);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+      case 20: /* "value" */
+
+	{
+	VNamelistRelease((yyvaluep->namelist));
+};
+
+	break;
+
+      default:
+	break;
+    }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (KFGParseBlock* pb, KFGScanBlock* sb);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+/*----------.
+| yyparse.  |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (KFGParseBlock* pb, KFGScanBlock* sb)
+#else
+int
+yyparse (pb, sb)
+    KFGParseBlock* pb;
+    KFGScanBlock* sb;
+#endif
+#endif
+{
+/* The lookahead symbol.  */
+int yychar;
+
+/* The semantic value of the lookahead symbol.  */
+YYSTYPE yylval;
+
+    /* Number of syntax errors so far.  */
+    int yynerrs;
+
+    int yystate;
+    /* Number of tokens to shift before error messages enabled.  */
+    int yyerrstatus;
+
+    /* The stacks and their tools:
+       `yyss': related to states.
+       `yyvs': related to semantic values.
+
+       Refer to the stacks thru separate pointers, to allow yyoverflow
+       to reallocate them elsewhere.  */
+
+    /* The state stack.  */
+    yytype_int16 yyssa[YYINITDEPTH];
+    yytype_int16 *yyss;
+    yytype_int16 *yyssp;
+
+    /* The semantic value stack.  */
+    YYSTYPE yyvsa[YYINITDEPTH];
+    YYSTYPE *yyvs;
+    YYSTYPE *yyvsp;
+
+    YYSIZE_T yystacksize;
+
+  int yyn;
+  int yyresult;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yytoken;
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  yytoken = 0;
+  yyss = yyssa;
+  yyvs = yyvsa;
+  yystacksize = YYINITDEPTH;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY; /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+	/* Give user a chance to reallocate the stack.  Use copies of
+	   these so that the &'s don't force the real ones into
+	   memory.  */
+	YYSTYPE *yyvs1 = yyvs;
+	yytype_int16 *yyss1 = yyss;
+
+	/* Each stack pointer address is followed by the size of the
+	   data in use in that stack, in bytes.  This used to be a
+	   conditional around just the two extra args, but that might
+	   be undefined if yyoverflow is a macro.  */
+	yyoverflow (YY_("memory exhausted"),
+		    &yyss1, yysize * sizeof (*yyssp),
+		    &yyvs1, yysize * sizeof (*yyvsp),
+		    &yystacksize);
+
+	yyss = yyss1;
+	yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+	goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+	yystacksize = YYMAXDEPTH;
+
+      {
+	yytype_int16 *yyss1 = yyss;
+	union yyalloc *yyptr =
+	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+	if (! yyptr)
+	  goto yyexhaustedlab;
+	YYSTACK_RELOCATE (yyss_alloc, yyss);
+	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+#  undef YYSTACK_RELOCATE
+	if (yyss1 != yyssa)
+	  YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+		  (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+	YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  if (yystate == YYFINAL)
+    YYACCEPT;
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     lookahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+  yyn = yypact[yystate];
+  if (yypact_value_is_default (yyn))
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yytable_value_is_error (yyn))
+        goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  /* Shift the lookahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 6:
+
+    { 
+			rc_t rc=sb->write_nvp(sb->self, (yyvsp[(1) - (4)].pb).tokenText, (yyvsp[(1) - (4)].pb).tokenLength, (yyvsp[(3) - (4)].namelist));
+			if (rc != 0)
+			{
+				ReportRc(pb, sb, rc);
+			}
+			VNamelistRelease((yyvsp[(3) - (4)].namelist));
+		}
+    break;
+
+  case 12:
+
+    { VNamelistMake(&(yyval.namelist), NAMELIST_ALLOC_BLKSIZE); AppendName(sb, (yyval.namelist), &(yyvsp[(1) - (1)].pb)); }
+    break;
+
+  case 13:
+
+    { VNamelistMake(&(yyval.namelist), NAMELIST_ALLOC_BLKSIZE); AppendName(sb, (yyval.namelist), &(yyvsp[(1) - (1)].pb)); }
+    break;
+
+  case 14:
+
+    { AppendName(sb, (yyvsp[(1) - (2)].namelist), &(yyvsp[(2) - (2)].pb)); (yyval.namelist)=(yyvsp[(1) - (2)].namelist); }
+    break;
+
+  case 15:
+
+    { AppendName(sb, (yyvsp[(1) - (2)].namelist), &(yyvsp[(2) - (2)].pb)); (yyval.namelist)=(yyvsp[(1) - (2)].namelist); }
+    break;
+
+
+
+      default: break;
+    }
+  /* User semantic actions sometimes alter yychar, and that requires
+     that yytoken be updated with the new translation.  We take the
+     approach of translating immediately before every use of yytoken.
+     One alternative is translating here after every semantic action,
+     but that translation would be missed if the semantic action invokes
+     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
+     incorrect destructor might then be invoked immediately.  In the
+     case of YYERROR or YYBACKUP, subsequent parser actions might lead
+     to an incorrect destructor call or verbose syntax error message
+     before the lookahead is translated.  */
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* Make sure we have latest lookahead translation.  See comments at
+     user semantic actions for why this is necessary.  */
+  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (pb, sb, YY_("syntax error"));
+#else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+                                        yyssp, yytoken)
+      {
+        char const *yymsgp = YY_("syntax error");
+        int yysyntax_error_status;
+        yysyntax_error_status = YYSYNTAX_ERROR;
+        if (yysyntax_error_status == 0)
+          yymsgp = yymsg;
+        else if (yysyntax_error_status == 1)
+          {
+            if (yymsg != yymsgbuf)
+              YYSTACK_FREE (yymsg);
+            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+            if (!yymsg)
+              {
+                yymsg = yymsgbuf;
+                yymsg_alloc = sizeof yymsgbuf;
+                yysyntax_error_status = 2;
+              }
+            else
+              {
+                yysyntax_error_status = YYSYNTAX_ERROR;
+                yymsgp = yymsg;
+              }
+          }
+        yyerror (pb, sb, yymsgp);
+        if (yysyntax_error_status == 2)
+          goto yyexhaustedlab;
+      }
+# undef YYSYNTAX_ERROR
+#endif
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse lookahead token after an
+	 error, discard it.  */
+
+      if (yychar <= YYEOF)
+	{
+	  /* Return failure if at end of input.  */
+	  if (yychar == YYEOF)
+	    YYABORT;
+	}
+      else
+	{
+	  yydestruct ("Error: discarding",
+		      yytoken, &yylval, pb, sb);
+	  yychar = YYEMPTY;
+	}
+    }
+
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (!yypact_value_is_default (yyn))
+	{
+	  yyn += YYTERROR;
+	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+	    {
+	      yyn = yytable[yyn];
+	      if (0 < yyn)
+		break;
+	    }
+	}
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+	YYABORT;
+
+
+      yydestruct ("Error: popping",
+		  yystos[yystate], yyvsp, pb, sb);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#if !defined(yyoverflow) || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (pb, sb, YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+  if (yychar != YYEMPTY)
+    {
+      /* Make sure we have latest lookahead translation.  See comments at
+         user semantic actions for why this is necessary.  */
+      yytoken = YYTRANSLATE (yychar);
+      yydestruct ("Cleanup: discarding lookahead",
+                  yytoken, &yylval, pb, sb);
+    }
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+		  yystos[*yyssp], yyvsp, pb, sb);
+      YYPOPSTACK (1);
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+
+
+
+
+
+#include <assert.h>
+#include <klib/token.h>
+#include <klib/log.h>
+#include <klib/writer.h>
+
+void KFG_error(KFGParseBlock* pb, KFGScanBlock* sb, const char* msg)
+{
+    sb->report_error(sb, msg);
+}
+
+void ReportRc(KFGParseBlock* pb, KFGScanBlock* sb, rc_t rc)
+{
+	char buf[1025];
+	size_t num_writ;
+	RCExplain(rc, buf, 1024, &num_writ);
+	buf[1024]=0;
+	yyerror(0, sb, buf);
+}
+
+void AppendName(KFGScanBlock* sb, VNamelist* nl, const KFGParseBlock* pb)
+{	/* pb represents either a kfgSTRING or a kfgESCAPED_STRING with opening and closed quotes clipped */
+    rc_t rc;
+    KToken t;
+    size_t value_size;
+    char* buf;
+
+	if (pb->tokenLength == 0)
+	{
+		return;
+	}
+		    
+    t.id= pb->tokenId == kfgESCAPED_STRING ? eEscapedString : eString;
+    StringInit(&t.str, pb->tokenText-1, pb->tokenLength+2, pb->tokenLength+2); /* compensate for clipped quotes in order to use KTokenToString */
+    buf=(char*)malloc(t.str.size);
+
+	/* KTokenToString removes opening and closing quotes and handles escapes if present */
+	rc = KTokenToString (&t, buf, t.str.size, &value_size);
+	if (rc != 0)
+	{
+		ReportRc(0, sb, rc);
+	}
+	else
+	{	
+		assert(value_size < t.str.size);
+        buf[value_size]=0;
+		rc = VNamelistAppend(nl, buf);
+		if (rc != 0)
+		{
+			ReportRc(0, sb, rc);
+		}
+	}		
+	free(buf);
+}
+
+
+	
+
diff --git a/libs/kfg/config-lex.c b/libs/kfg/config-lex.c
new file mode 100644
index 0000000..55543c2
--- /dev/null
+++ b/libs/kfg/config-lex.c
@@ -0,0 +1,2511 @@
+
+
+#define  YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with  platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types. 
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t; 
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN               (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN              (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN              (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX               (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX              (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX              (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX              (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX             (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX             (4294967295U)
+#endif
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else	/* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif	/* defined (__STDC__) */
+#endif	/* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* An opaque pointer. */
+#ifndef YY_TYPEDEF_YY_SCANNER_T
+#define YY_TYPEDEF_YY_SCANNER_T
+typedef void* yyscan_t;
+#endif
+
+/* For convenience, these vars (plus the bison vars far below)
+   are macros in the reentrant scanner. */
+#define yyin yyg->yyin_r
+#define yyout yyg->yyout_r
+#define yyextra yyg->yyextra_r
+#define yyleng yyg->yyleng_r
+#define yytext yyg->yytext_r
+#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
+#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
+#define yy_flex_debug yyg->yy_flex_debug_r
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN yyg->yy_start = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START ((yyg->yy_start - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart(yyin ,yyscanner )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+    /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
+     *       access to the local variable yy_act. Since yyless() is a macro, it would break
+     *       existing scanners that call yyless() from OUTSIDE yylex. 
+     *       One obvious solution it to make yy_act a global. I tried that, and saw
+     *       a 5% performance hit in a non-yylineno scanner, because yy_act is
+     *       normally declared as a register variable-- so it is not worth it.
+     */
+    #define  YY_LESS_LINENO(n) \
+            do { \
+                int yyl;\
+                for ( yyl = n; yyl < yyleng; ++yyl )\
+                    if ( yytext[yyl] == '\n' )\
+                        --yylineno;\
+            }while(0)
+    
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		*yy_cp = yyg->yy_hold_char; \
+		YY_RESTORE_YY_MORE_OFFSET \
+		yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+		} \
+	while ( 0 )
+
+#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+	{
+	FILE *yy_input_file;
+
+	char *yy_ch_buf;		/* input buffer */
+	char *yy_buf_pos;		/* current position in input buffer */
+
+	/* Size of input buffer in bytes, not including room for EOB
+	 * characters.
+	 */
+	yy_size_t yy_buf_size;
+
+	/* Number of characters read into yy_ch_buf, not including EOB
+	 * characters.
+	 */
+	int yy_n_chars;
+
+	/* Whether we "own" the buffer - i.e., we know we created it,
+	 * and can realloc() it to grow it, and should free() it to
+	 * delete it.
+	 */
+	int yy_is_our_buffer;
+
+	/* Whether this is an "interactive" input source; if so, and
+	 * if we're using stdio for input, then we want to use getc()
+	 * instead of fread(), to make sure we stop fetching input after
+	 * each newline.
+	 */
+	int yy_is_interactive;
+
+	/* Whether we're considered to be at the beginning of a line.
+	 * If so, '^' rules will be active on the next match, otherwise
+	 * not.
+	 */
+	int yy_at_bol;
+
+    int yy_bs_lineno; /**< The line count. */
+    int yy_bs_column; /**< The column count. */
+    
+	/* Whether to try to fill the input buffer when we reach the
+	 * end of it.
+	 */
+	int yy_fill_buffer;
+
+	int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+	/* When an EOF's been seen but there's still some text to process
+	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+	 * shouldn't try reading from the input source any more.  We might
+	 * still have a bunch of tokens to match, though, because of
+	 * possible backing-up.
+	 *
+	 * When we actually see the EOF, we change the status to "new"
+	 * (via yyrestart()), so that the user can continue scanning by
+	 * just pointing yyin at a new input file.
+	 */
+#define YY_BUFFER_EOF_PENDING 2
+
+	};
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \
+                          ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
+                          : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
+
+void yyrestart (FILE *input_file ,yyscan_t yyscanner );
+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner );
+void yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
+void yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
+void yypop_buffer_state (yyscan_t yyscanner );
+
+static void yyensure_buffer_stack (yyscan_t yyscanner );
+static void yy_load_buffer_state (yyscan_t yyscanner );
+static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner );
+
+#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
+
+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );
+
+void *yyalloc (yy_size_t ,yyscan_t yyscanner );
+void *yyrealloc (void *,yy_size_t ,yyscan_t yyscanner );
+void yyfree (void * ,yyscan_t yyscanner );
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){ \
+        yyensure_buffer_stack (yyscanner); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+	}
+
+#define yy_set_bol(at_bol) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){\
+        yyensure_buffer_stack (yyscanner); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+	}
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+#define yywrap(n) 1
+#define YY_SKIP_YYWRAP
+
+typedef unsigned char YY_CHAR;
+
+typedef int yy_state_type;
+
+#define yytext_ptr yytext_r
+
+static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  ,yyscan_t yyscanner);
+static int yy_get_next_buffer (yyscan_t yyscanner );
+static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+	yyg->yytext_ptr = yy_bp; \
+	yyleng = (size_t) (yy_cp - yy_bp); \
+	yyg->yy_hold_char = *yy_cp; \
+	*yy_cp = '\0'; \
+	yyg->yy_c_buf_p = yy_cp;
+
+#define YY_NUM_RULES 35
+#define YY_END_OF_BUFFER 36
+/* This struct is not used in this scanner,
+   but its presence is necessary. */
+struct yy_trans_info
+	{
+	flex_int32_t yy_verify;
+	flex_int32_t yy_nxt;
+	};
+static yyconst flex_int16_t yy_accept[135] =
+    {   0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       13,   13,   36,   34,    8,    9,   24,    7,   34,   15,
+       34,   11,   32,    2,    4,   35,   35,   35,   35,   31,
+       35,   35,   35,   22,   13,   13,   24,   23,    0,    0,
+        7,    0,   15,    0,   14,    0,    1,   10,   11,    0,
+        2,    3,    4,    0,    5,    0,    6,    0,   31,    0,
+       29,    0,    0,   22,   20,   13,   13,   23,    0,   27,
+       26,   26,    0,    0,   14,   18,   17,   17,   10,    0,
+       11,   30,   21,   13,   27,   26,   25,   26,    0,   26,
+        0,   33,    0,    0,   18,   17,   17,   16,    0,   17,
+
+        0,   10,   11,   12,   13,   13,    0,   26,   25,   26,
+       26,   26,   28,    0,    0,   17,   17,   16,   17,   17,
+       19,   10,   13,   26,   25,   26,   26,    0,   17,   17,
+       16,   17,   13,    0
+    } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        2,    4,    4,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    2,    1,    5,    6,    7,    1,    1,    8,    9,
+       10,   11,    1,    1,   12,   12,   13,   14,   14,   14,
+       14,   14,   14,   14,   14,   14,   14,    1,    1,    1,
+       15,    1,    1,    1,   14,   14,   14,   14,   14,   14,
+       14,   14,   14,   14,   14,   14,   14,   14,   14,   14,
+       14,   14,   14,   14,   14,   14,   14,   14,   14,   14,
+        1,   16,    1,    1,   14,    1,   14,   14,   14,   14,
+
+       14,   14,   14,   14,   14,   14,   14,   14,   14,   14,
+       14,   14,   14,   14,   14,   14,   14,   14,   14,   14,
+       14,   14,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst flex_int32_t yy_meta[17] =
+    {   0,
+        1,    1,    2,    3,    1,    1,    1,    1,    1,    4,
+        5,    6,    6,    6,    1,    7
+    } ;
+
+static yyconst flex_int16_t yy_base[163] =
+    {   0,
+        0,    0,   14,   15,   16,   17,   26,   40,   54,   68,
+       82,   90,   86,  670,  670,  670,   96,    0,   74,  106,
+       10,   69,  670,    0,  670,  120,  131,   27,  670,  670,
+      142,   15,  149,  670,    0,   72,  154,  670,  168,    0,
+        0,   66,  178,  192,  670,    0,  670,   66,   65,   63,
+        0,  206,  670,  217,  670,  228,  670,   30,  670,   65,
+      670,   31,   64,  670,  670,    0,   55,  670,   59,  670,
+      237,  249,  256,   58,  670,  670,  264,  274,   53,   51,
+       51,  670,  670,  281,  670,  291,  670,  305,    0,  317,
+      331,  670,    0,   49,  670,  341,  355,  670,    0,  365,
+
+      379,   47,   46,  670,    0,   41,  393,    0,    0,  407,
+      420,    0,  670,   34,  434,    0,  448,    0,  461,    0,
+      670,   41,   37,    0,    0,    0,  474,    0,    0,    0,
+        0,  487,   38,  670,  503,  510,  517,  524,  531,  538,
+      545,   47,  552,  559,  566,  572,  578,  585,  592,   35,
+      599,  606,  613,  620,   34,  627,  634,  641,  648,   30,
+      655,  662
+    } ;
+
+static yyconst flex_int16_t yy_def[163] =
+    {   0,
+      134,    1,  135,  135,  135,  135,  136,  136,  137,  137,
+      138,  138,  134,  134,  134,  134,  139,  140,  134,  141,
+      134,  142,  134,  143,  134,  144,  144,  145,  134,  134,
+      145,  146,  146,  134,  147,  147,  139,  134,  139,  148,
+      140,  134,  141,  141,  134,  149,  134,  150,  142,  134,
+      143,  144,  134,  144,  134,  144,  134,  145,  134,   31,
+      134,  146,   33,  134,  134,  147,  147,  134,   39,  134,
+      151,  152,  134,   44,  134,  134,  153,  154,  150,  134,
+      155,  134,  134,  147,  134,  151,  134,  156,  157,  152,
+      152,  134,   73,  134,  134,  153,  158,  134,  159,  154,
+
+      154,  160,  155,  134,   84,  147,  151,   86,   86,  156,
+      161,   86,  134,   73,  153,   96,  158,   96,  162,   96,
+      134,  160,   84,   86,   86,  110,  161,  114,   96,  117,
+       96,  162,   84,    0,  134,  134,  134,  134,  134,  134,
+      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,
+      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,
+      134,  134
+    } ;
+
+static yyconst flex_int16_t yy_nxt[687] =
+    {   0,
+       14,   15,   16,   15,   17,   18,   19,   20,   14,   14,
+       14,   14,   21,   22,   23,   14,   25,   25,   25,   25,
+       47,   63,   64,   48,   26,   26,   27,   27,   29,   29,
+       30,   59,   31,   60,   59,  122,   60,   63,   64,  103,
+       79,   29,   29,   29,   30,  128,   31,  128,  133,  133,
+      133,  133,   49,   80,  123,   29,   29,   29,   50,   80,
+       33,   34,  114,   50,  102,   80,   95,   85,   84,   29,
+       29,   29,   83,   82,   33,   34,   81,   50,   80,   73,
+       67,   50,   42,   29,   29,  134,  134,  134,   36,  134,
+      134,   29,   29,  134,  134,  134,   36,  134,  134,   29,
+
+       38,  134,   39,  134,  134,  134,  134,  134,  134,  134,
+      134,   40,   44,   45,  134,  134,  134,  134,  134,  134,
+      134,   46,   53,  134,  134,  134,  134,  134,  134,  134,
+       54,  134,   55,   53,  134,  134,  134,  134,  134,  134,
+      134,   56,  134,   57,   58,   58,  134,  134,  134,  134,
+       61,   62,   62,  134,  134,  134,  134,   65,   68,  134,
+       69,  134,  134,  134,  134,  134,  134,  134,  134,   40,
+       37,   37,  134,  134,  134,  134,   70,  134,  134,  134,
+      134,  134,  134,   71,   74,   75,  134,  134,  134,  134,
+      134,  134,  134,   46,   43,   43,  134,  134,  134,  134,
+
+       76,  134,  134,  134,  134,  134,  134,   77,  134,  134,
+      134,  134,  134,  134,  134,  134,  134,  134,  134,   53,
+      134,  134,  134,  134,  134,  134,  134,   54,  134,   55,
+       53,  134,  134,  134,  134,  134,  134,  134,   56,  134,
+       57,   87,  134,   88,  134,  134,  134,  134,  134,  134,
+      134,  134,   89,   87,  134,   91,  134,  134,  134,  134,
+      134,  134,  134,  134,   40,   92,  134,   93,   94,   93,
+       97,   98,  134,  134,  134,  134,  134,  134,  134,   99,
+      101,   98,  134,  134,  134,  134,  134,  134,  134,   46,
+      104,  134,  105,  106,  105,   87,  134,  107,  134,  134,
+
+      134,  134,  134,  134,  134,  134,   89,   86,   86,  109,
+      134,  110,  134,   86,  134,  134,  134,  134,  134,  134,
+      111,   87,  134,   91,  134,  134,  134,  134,  134,  134,
+      134,  134,   40,   90,   90,  134,  134,  134,  134,  113,
+      134,  134,  134,  134,  134,  134,   71,  115,   98,  134,
+      134,  134,  134,  134,  134,  134,   99,   96,   96,  134,
+      134,  117,  118,   96,  134,  134,  134,  134,  134,  134,
+      119,  101,   98,  134,  134,  134,  134,  134,  134,  134,
+       46,  100,  100,  134,  134,  134,  134,  121,  134,  134,
+      134,  134,  134,  134,   77,   86,   86,  134,  134,  134,
+
+      134,  134,  134,  134,  134,  134,  134,  134,   71,   86,
+       86,  109,  134,  110,  134,   86,  134,  134,  134,  134,
+      134,  134,  111,  112,  125,  134,  126,  134,  134,  134,
+      134,  134,  134,  134,  134,  127,   96,   96,  134,  134,
+      134,  134,  134,  134,  134,  134,  134,  134,  134,   77,
+       96,   96,  134,  134,  117,  118,   96,  134,  134,  134,
+      134,  134,  134,  119,  120,  134,  134,  130,  131,  134,
+      134,  134,  134,  134,  134,  134,  132,  112,  125,  134,
+       88,  134,  134,  134,  134,  134,  134,  134,  134,  127,
+      120,  134,  134,   97,  131,  134,  134,  134,  134,  134,
+
+      134,  134,  132,   24,   24,   24,   24,   24,   24,   24,
+       28,   28,   28,   28,   28,   28,   28,   32,   32,   32,
+       32,   32,   32,   32,   35,   35,   35,   35,   35,   35,
+       35,   37,  134,  134,   37,   37,   37,   37,   41,  134,
+       41,   41,   41,   41,   41,   43,  134,  134,   43,   43,
+       43,   43,   51,  134,   51,   51,  134,   51,   51,   52,
+       52,   52,   52,   52,   52,   52,   58,  134,  134,   58,
+       58,   58,   62,  134,  134,   62,   62,   62,   66,  134,
+       66,  134,   66,   66,   66,   72,  134,   72,   72,   72,
+       72,   72,   78,  134,   78,   78,   78,   78,   78,   86,
+
+      134,  134,   86,   86,   86,   86,   90,  134,  134,   90,
+       90,   90,   90,   96,  134,  134,   96,   96,   96,   96,
+      100,  134,  134,  100,  100,  100,  100,  108,  108,  108,
+      108,  108,  108,  108,  112,  134,  112,  112,  112,  112,
+      112,  116,  116,  116,  116,  116,  116,  116,  120,  134,
+      120,  120,  120,  120,  120,  124,  134,  124,  124,  124,
+      124,  124,  129,  134,  129,  129,  129,  129,  129,   13,
+      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,
+      134,  134,  134,  134,  134,  134
+    } ;
+
+static yyconst flex_int16_t yy_chk[687] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    3,    4,    5,    6,
+       21,   32,   32,   21,    3,    4,    5,    6,    7,    7,
+        7,   28,    7,   28,   58,  160,   58,   62,   62,  155,
+      150,    7,    8,    8,    8,  114,    8,  114,  123,  133,
+      123,  133,  142,  122,  106,    8,    9,    9,  103,  102,
+        9,    9,   94,   81,   80,   79,   74,   69,   67,    9,
+       10,   10,   63,   60,   10,   10,   50,   49,   48,   42,
+       36,   22,   19,   10,   11,   13,    0,    0,   11,    0,
+        0,   11,   12,    0,    0,    0,   12,    0,    0,   12,
+
+       17,    0,   17,    0,    0,    0,    0,    0,    0,    0,
+        0,   17,   20,   20,    0,    0,    0,    0,    0,    0,
+        0,   20,   26,    0,    0,    0,    0,    0,    0,    0,
+       26,    0,   26,   27,    0,    0,    0,    0,    0,    0,
+        0,   27,    0,   27,   31,   31,    0,    0,    0,    0,
+       31,   33,   33,    0,    0,    0,    0,   33,   37,    0,
+       37,    0,    0,    0,    0,    0,    0,    0,    0,   37,
+       39,   39,    0,    0,    0,    0,   39,    0,    0,    0,
+        0,    0,    0,   39,   43,   43,    0,    0,    0,    0,
+        0,    0,    0,   43,   44,   44,    0,    0,    0,    0,
+
+       44,    0,    0,    0,    0,    0,    0,   44,   52,    0,
+        0,    0,    0,    0,    0,    0,   52,    0,   52,   54,
+        0,    0,    0,    0,    0,    0,    0,   54,    0,   54,
+       56,    0,    0,    0,    0,    0,    0,    0,   56,    0,
+       56,   71,    0,   71,    0,    0,    0,    0,    0,    0,
+        0,    0,   71,   72,    0,   72,    0,    0,    0,    0,
+        0,    0,    0,    0,   72,   73,    0,   73,   73,   73,
+       77,   77,    0,    0,    0,    0,    0,    0,    0,   77,
+       78,   78,    0,    0,    0,    0,    0,    0,    0,   78,
+       84,    0,   84,   84,   84,   86,    0,   86,    0,    0,
+
+        0,    0,    0,    0,    0,    0,   86,   88,   88,   88,
+        0,   88,    0,   88,    0,    0,    0,    0,    0,    0,
+       88,   90,    0,   90,    0,    0,    0,    0,    0,    0,
+        0,    0,   90,   91,   91,    0,    0,    0,    0,   91,
+        0,    0,    0,    0,    0,    0,   91,   96,   96,    0,
+        0,    0,    0,    0,    0,    0,   96,   97,   97,    0,
+        0,   97,   97,   97,    0,    0,    0,    0,    0,    0,
+       97,  100,  100,    0,    0,    0,    0,    0,    0,    0,
+      100,  101,  101,    0,    0,    0,    0,  101,    0,    0,
+        0,    0,    0,    0,  101,  107,  107,    0,    0,    0,
+
+        0,  107,    0,    0,    0,    0,    0,    0,  107,  110,
+      110,  110,    0,  110,    0,  110,    0,    0,    0,    0,
+        0,    0,  110,  111,  111,    0,  111,    0,    0,    0,
+        0,    0,    0,    0,    0,  111,  115,  115,    0,    0,
+        0,    0,  115,    0,    0,    0,    0,    0,    0,  115,
+      117,  117,    0,    0,  117,  117,  117,    0,    0,    0,
+        0,    0,    0,  117,  119,    0,    0,  119,  119,    0,
+        0,    0,    0,    0,    0,    0,  119,  127,  127,    0,
+      127,    0,    0,    0,    0,    0,    0,    0,    0,  127,
+      132,    0,    0,  132,  132,    0,    0,    0,    0,    0,
+
+        0,    0,  132,  135,  135,  135,  135,  135,  135,  135,
+      136,  136,  136,  136,  136,  136,  136,  137,  137,  137,
+      137,  137,  137,  137,  138,  138,  138,  138,  138,  138,
+      138,  139,    0,    0,  139,  139,  139,  139,  140,    0,
+      140,  140,  140,  140,  140,  141,    0,    0,  141,  141,
+      141,  141,  143,    0,  143,  143,    0,  143,  143,  144,
+      144,  144,  144,  144,  144,  144,  145,    0,    0,  145,
+      145,  145,  146,    0,    0,  146,  146,  146,  147,    0,
+      147,    0,  147,  147,  147,  148,    0,  148,  148,  148,
+      148,  148,  149,    0,  149,  149,  149,  149,  149,  151,
+
+        0,    0,  151,  151,  151,  151,  152,    0,    0,  152,
+      152,  152,  152,  153,    0,    0,  153,  153,  153,  153,
+      154,    0,    0,  154,  154,  154,  154,  156,  156,  156,
+      156,  156,  156,  156,  157,    0,  157,  157,  157,  157,
+      157,  158,  158,  158,  158,  158,  158,  158,  159,    0,
+      159,  159,  159,  159,  159,  161,    0,  161,  161,  161,
+      161,  161,  162,    0,  162,  162,  162,  162,  162,  134,
+      134,  134,  134,  134,  134,  134,  134,  134,  134,  134,
+      134,  134,  134,  134,  134,  134
+    } ;
+
+/* Table of booleans, true if rule could match eol. */
+static yyconst flex_int32_t yy_rule_can_match_eol[36] =
+    {   0,
+0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 
+    0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,     };
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+	#include <sysalloc.h>
+    
+	#include "kfg-parse.h"
+	#include "config-tokens.h"    
+	
+    #define YYSTYPE KFGParseBlock
+    
+    /* code to populate token with internal values */
+    #define YY_USER_ACTION              \
+        yylval -> tokenText		= yytext;	\
+        yylval -> tokenLength	= yyleng;	\
+        yylval -> line_no		= yylineno;	\
+        yylval -> column_no		= yycolumn; \
+        yycolumn += yyleng; 
+        
+    #define REM_LQUOTE \
+		++ yylval -> tokenText;	\
+		-- yylval -> tokenLength; \
+		++ yylval -> column_no;
+		
+    #define REM_RQUOTE \
+		-- yylval -> tokenLength; 
+#define YY_NO_UNISTD_H 1
+/* re-entrant scanner */
+/* bison options */
+/* maintain state stack */
+/* let parser handle EOF */
+/* start-state for slash-star comments */
+
+/* states for strings */
+
+/* in-string variable reference */
+
+/* node/name in a path */
+
+#define INITIAL 0
+#define CMT_SLASH_STAR 1
+#define CMT_MULTI_LINE 2
+#define IN_DBL_STRING 3
+#define IN_SNG_STRING 4
+#define IN_VAR_REF 5
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+/* Holds the entire state of the reentrant scanner. */
+struct yyguts_t
+    {
+
+    /* User-defined. Not touched by flex. */
+    YY_EXTRA_TYPE yyextra_r;
+
+    /* The rest are the same as the globals declared in the non-reentrant scanner. */
+    FILE *yyin_r, *yyout_r;
+    size_t yy_buffer_stack_top; /**< index of top of stack. */
+    size_t yy_buffer_stack_max; /**< capacity of stack. */
+    YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
+    char yy_hold_char;
+    int yy_n_chars;
+    int yyleng_r;
+    char *yy_c_buf_p;
+    int yy_init;
+    int yy_start;
+    int yy_did_buffer_switch_on_eof;
+    int yy_start_stack_ptr;
+    int yy_start_stack_depth;
+    int *yy_start_stack;
+    yy_state_type yy_last_accepting_state;
+    char* yy_last_accepting_cpos;
+
+    int yylineno_r;
+    int yy_flex_debug_r;
+
+    char *yytext_r;
+    int yy_more_flag;
+    int yy_more_len;
+
+    YYSTYPE * yylval_r;
+
+    }; /* end struct yyguts_t */
+
+static int yy_init_globals (yyscan_t yyscanner );
+
+    /* This must go here because YYSTYPE and YYLTYPE are included
+     * from bison output in section 1.*/
+    #    define yylval yyg->yylval_r
+    
+int yylex_init (yyscan_t* scanner);
+
+int yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
+
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy (yyscan_t yyscanner );
+
+int yyget_debug (yyscan_t yyscanner );
+
+void yyset_debug (int debug_flag ,yyscan_t yyscanner );
+
+YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner );
+
+void yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
+
+FILE *yyget_in (yyscan_t yyscanner );
+
+void yyset_in  (FILE * in_str ,yyscan_t yyscanner );
+
+FILE *yyget_out (yyscan_t yyscanner );
+
+void yyset_out  (FILE * out_str ,yyscan_t yyscanner );
+
+int yyget_leng (yyscan_t yyscanner );
+
+char *yyget_text (yyscan_t yyscanner );
+
+int yyget_lineno (yyscan_t yyscanner );
+
+void yyset_lineno (int line_number ,yyscan_t yyscanner );
+
+YYSTYPE * yyget_lval (yyscan_t yyscanner );
+
+void yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap (yyscan_t yyscanner );
+#else
+extern int yywrap (yyscan_t yyscanner );
+#endif
+#endif
+
+    static void yyunput (int c,char *buf_ptr  ,yyscan_t yyscanner);
+    
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (yyscan_t yyscanner );
+#else
+static int input (yyscan_t yyscanner );
+#endif
+
+#endif
+
+    static void yy_push_state (int new_state ,yyscan_t yyscanner);
+    
+    static void yy_pop_state (yyscan_t yyscanner );
+    
+    static int yy_top_state (yyscan_t yyscanner );
+    
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+		{ \
+		int c = '*'; \
+		int n; \
+		for ( n = 0; n < max_size && \
+			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+			buf[n] = (char) c; \
+		if ( c == '\n' ) \
+			buf[n++] = (char) c; \
+		if ( c == EOF && ferror( yyin ) ) \
+			YY_FATAL_ERROR( "input in flex scanner failed" ); \
+		result = n; \
+		} \
+	else \
+		{ \
+		errno=0; \
+		while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+			{ \
+			if( errno != EINTR) \
+				{ \
+				YY_FATAL_ERROR( "input in flex scanner failed" ); \
+				break; \
+				} \
+			errno=0; \
+			clearerr(yyin); \
+			} \
+		}\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int yylex \
+               (YYSTYPE * yylval_param ,yyscan_t yyscanner);
+
+#define YY_DECL int yylex \
+               (YYSTYPE * yylval_param , yyscan_t yyscanner)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+	YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp, *yy_bp;
+	register int yy_act;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+ /* multi-line comments */
+
+    yylval = yylval_param;
+
+	if ( !yyg->yy_init )
+		{
+		yyg->yy_init = 1;
+
+#ifdef YY_USER_INIT
+		YY_USER_INIT;
+#endif
+
+		if ( ! yyg->yy_start )
+			yyg->yy_start = 1;	/* first start state */
+
+		if ( ! yyin )
+			yyin = stdin;
+
+		if ( ! yyout )
+			yyout = stdout;
+
+		if ( ! YY_CURRENT_BUFFER ) {
+			yyensure_buffer_stack (yyscanner);
+			YY_CURRENT_BUFFER_LVALUE =
+				yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+		}
+
+		yy_load_buffer_state(yyscanner );
+		}
+
+	while ( 1 )		/* loops until end-of-file is reached */
+		{
+		yy_cp = yyg->yy_c_buf_p;
+
+		/* Support of yytext. */
+		*yy_cp = yyg->yy_hold_char;
+
+		/* yy_bp points to the position in yy_ch_buf of the start of
+		 * the current run.
+		 */
+		yy_bp = yy_cp;
+
+		yy_current_state = yyg->yy_start;
+yy_match:
+		do
+			{
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			if ( yy_accept[yy_current_state] )
+				{
+				yyg->yy_last_accepting_state = yy_current_state;
+				yyg->yy_last_accepting_cpos = yy_cp;
+				}
+			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+				{
+				yy_current_state = (int) yy_def[yy_current_state];
+				if ( yy_current_state >= 135 )
+					yy_c = yy_meta[(unsigned int) yy_c];
+				}
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			++yy_cp;
+			}
+		while ( yy_current_state != 134 );
+		yy_cp = yyg->yy_last_accepting_cpos;
+		yy_current_state = yyg->yy_last_accepting_state;
+
+yy_find_action:
+		yy_act = yy_accept[yy_current_state];
+
+		YY_DO_BEFORE_ACTION;
+
+		if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
+			{
+			int yyl;
+			for ( yyl = 0; yyl < yyleng; ++yyl )
+				if ( yytext[yyl] == '\n' )
+					   
+    do{ yylineno++;
+        yycolumn=0;
+    }while(0)
+;
+			}
+
+do_action:	/* This label is used only to access EOF actions. */
+
+		switch ( yy_act )
+	{ /* beginning of action switch */
+			case 0: /* must back up */
+			/* undo the effects of YY_DO_BEFORE_ACTION */
+			*yy_cp = yyg->yy_hold_char;
+			yy_cp = yyg->yy_last_accepting_cpos;
+			yy_current_state = yyg->yy_last_accepting_state;
+			goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+{ yy_push_state ( CMT_SLASH_STAR, yyscanner ); }
+	YY_BREAK
+case 2:
+YY_RULE_SETUP
+/* ignore */
+	YY_BREAK
+case 3:
+YY_RULE_SETUP
+/* ignore */
+	YY_BREAK
+case 4:
+/* rule 4 can match eol */
+YY_RULE_SETUP
+{ BEGIN CMT_MULTI_LINE; }
+	YY_BREAK
+case 5:
+YY_RULE_SETUP
+{ yy_pop_state ( yyscanner ); }
+	YY_BREAK
+case 6:
+YY_RULE_SETUP
+{ yy_pop_state ( yyscanner ); return kfgEND_LINE; }
+	YY_BREAK
+/* line comments */
+case 7:
+YY_RULE_SETUP
+/* ignore */
+	YY_BREAK
+/* ignored tokens */
+case 8:
+YY_RULE_SETUP
+/* ignore */
+	YY_BREAK
+/* end of line is significant */
+case 9:
+/* rule 9 can match eol */
+YY_RULE_SETUP
+{ return kfgEND_LINE; }
+	YY_BREAK
+/* normal, POSIX-style paths */
+case 10:
+YY_RULE_SETUP
+{ return kfgABS_PATH; }
+	YY_BREAK
+case 11:
+YY_RULE_SETUP
+{ return kfgREL_PATH; }
+	YY_BREAK
+/* variable references inside strings */
+case 12:
+YY_RULE_SETUP
+{ yy_pop_state ( yyscanner ); return kfgVAR_REF; }
+	YY_BREAK
+case 13:
+YY_RULE_SETUP
+{ yy_pop_state ( yyscanner ); return kfgUNTERM_VAR_REF; }
+	YY_BREAK
+case YY_STATE_EOF(IN_VAR_REF):
+{ yy_pop_state ( yyscanner ); return kfgUNTERM_VAR_REF; } 
+	YY_BREAK
+/* single quoted strings */
+case 14:
+/* rule 14 can match eol */
+YY_RULE_SETUP
+{ REM_LQUOTE; REM_RQUOTE; return kfgSTRING; }
+	YY_BREAK
+case 15:
+/* rule 15 can match eol */
+YY_RULE_SETUP
+{ REM_LQUOTE; return kfgUNTERM_STRING; }
+	YY_BREAK
+case 16:
+/* rule 16 can match eol */
+YY_RULE_SETUP
+{ REM_LQUOTE; REM_RQUOTE; return kfgESCAPED_STRING; }
+	YY_BREAK
+case 17:
+/* rule 17 can match eol */
+YY_RULE_SETUP
+{ REM_LQUOTE; return kfgUNTERM_ESCAPED_STRING; }
+	YY_BREAK
+/* single quoted strings with variable references*/
+case 18:
+/* rule 18 can match eol */
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 2;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ REM_LQUOTE; yy_push_state ( IN_SNG_STRING, yyscanner ); yy_push_state ( IN_VAR_REF, yyscanner ); return kfgSTRING; }
+	YY_BREAK
+case 19:
+/* rule 19 can match eol */
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 2;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ REM_LQUOTE; yy_push_state ( IN_SNG_STRING, yyscanner ); yy_push_state ( IN_VAR_REF, yyscanner ); return kfgESCAPED_STRING; }
+	YY_BREAK
+case 20:
+YY_RULE_SETUP
+{ yy_push_state ( IN_VAR_REF, yyscanner ); yyless(0); }
+	YY_BREAK
+case 21:
+/* rule 21 can match eol */
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 2;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ yy_push_state ( IN_VAR_REF, yyscanner ); return kfgSTRING; }
+	YY_BREAK
+case 22:
+/* rule 22 can match eol */
+YY_RULE_SETUP
+{ REM_RQUOTE; yy_pop_state ( yyscanner ); return kfgSTRING; } 
+	YY_BREAK
+/* double quoted strings */
+case 23:
+/* rule 23 can match eol */
+YY_RULE_SETUP
+{ REM_LQUOTE; REM_RQUOTE; return kfgSTRING; }
+	YY_BREAK
+case 24:
+/* rule 24 can match eol */
+YY_RULE_SETUP
+{ REM_LQUOTE; return kfgUNTERM_STRING; }
+	YY_BREAK
+case 25:
+/* rule 25 can match eol */
+YY_RULE_SETUP
+{ REM_LQUOTE; REM_RQUOTE; return kfgESCAPED_STRING; }
+	YY_BREAK
+case 26:
+/* rule 26 can match eol */
+YY_RULE_SETUP
+{ REM_LQUOTE; return kfgUNTERM_ESCAPED_STRING; }
+	YY_BREAK
+/* double quoted strings with variable references*/
+case 27:
+/* rule 27 can match eol */
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 2;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ REM_LQUOTE; yy_push_state ( IN_DBL_STRING, yyscanner ); yy_push_state ( IN_VAR_REF, yyscanner ); return kfgSTRING; }
+	YY_BREAK
+case 28:
+/* rule 28 can match eol */
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 2;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ REM_LQUOTE; yy_push_state ( IN_DBL_STRING, yyscanner ); yy_push_state ( IN_VAR_REF, yyscanner ); return kfgESCAPED_STRING; }
+	YY_BREAK
+case 29:
+YY_RULE_SETUP
+{ yy_push_state ( IN_VAR_REF, yyscanner ); yyless(0); }
+	YY_BREAK
+case 30:
+/* rule 30 can match eol */
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 2;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ yy_push_state ( IN_VAR_REF, yyscanner ); return kfgSTRING; }
+	YY_BREAK
+case 31:
+/* rule 31 can match eol */
+YY_RULE_SETUP
+{ REM_RQUOTE; yy_pop_state ( yyscanner ); return kfgSTRING; } 
+	YY_BREAK
+/* literals */
+case 32:
+YY_RULE_SETUP
+{ return kfgASSIGN; }
+	YY_BREAK
+case 33:
+YY_RULE_SETUP
+{ return kfgVAR_REF; }
+	YY_BREAK
+/* unrecognized input */
+case 34:
+YY_RULE_SETUP
+{ return kfgUNRECOGNIZED; }
+	YY_BREAK
+case 35:
+YY_RULE_SETUP
+ECHO;
+	YY_BREAK
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(CMT_SLASH_STAR):
+case YY_STATE_EOF(CMT_MULTI_LINE):
+case YY_STATE_EOF(IN_DBL_STRING):
+case YY_STATE_EOF(IN_SNG_STRING):
+	yyterminate();
+
+	case YY_END_OF_BUFFER:
+		{
+		/* Amount of text matched not including the EOB char. */
+		int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1;
+
+		/* Undo the effects of YY_DO_BEFORE_ACTION. */
+		*yy_cp = yyg->yy_hold_char;
+		YY_RESTORE_YY_MORE_OFFSET
+
+		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+			{
+			/* We're scanning a new file or input source.  It's
+			 * possible that this happened because the user
+			 * just pointed yyin at a new source and called
+			 * yylex().  If so, then we have to assure
+			 * consistency between YY_CURRENT_BUFFER and our
+			 * globals.  Here is the right place to do so, because
+			 * this is the first action (other than possibly a
+			 * back-up) that will match for the new input source.
+			 */
+			yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+			}
+
+		/* Note that here we test for yy_c_buf_p "<=" to the position
+		 * of the first EOB in the buffer, since yy_c_buf_p will
+		 * already have been incremented past the NUL character
+		 * (since all states make transitions on EOB to the
+		 * end-of-buffer state).  Contrast this with the test
+		 * in input().
+		 */
+		if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
+			{ /* This was really a NUL. */
+			yy_state_type yy_next_state;
+
+			yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
+
+			yy_current_state = yy_get_previous_state( yyscanner );
+
+			/* Okay, we're now positioned to make the NUL
+			 * transition.  We couldn't have
+			 * yy_get_previous_state() go ahead and do it
+			 * for us because it doesn't know how to deal
+			 * with the possibility of jamming (and we don't
+			 * want to build jamming into it because then it
+			 * will run more slowly).
+			 */
+
+			yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner);
+
+			yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+
+			if ( yy_next_state )
+				{
+				/* Consume the NUL. */
+				yy_cp = ++yyg->yy_c_buf_p;
+				yy_current_state = yy_next_state;
+				goto yy_match;
+				}
+
+			else
+				{
+				yy_cp = yyg->yy_last_accepting_cpos;
+				yy_current_state = yyg->yy_last_accepting_state;
+				goto yy_find_action;
+				}
+			}
+
+		else switch ( yy_get_next_buffer( yyscanner ) )
+			{
+			case EOB_ACT_END_OF_FILE:
+				{
+				yyg->yy_did_buffer_switch_on_eof = 0;
+
+				if ( yywrap(yyscanner ) )
+					{
+					/* Note: because we've taken care in
+					 * yy_get_next_buffer() to have set up
+					 * yytext, we can now set up
+					 * yy_c_buf_p so that if some total
+					 * hoser (like flex itself) wants to
+					 * call the scanner after we return the
+					 * YY_NULL, it'll still work - another
+					 * YY_NULL will get returned.
+					 */
+					yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;
+
+					yy_act = YY_STATE_EOF(YY_START);
+					goto do_action;
+					}
+
+				else
+					{
+					if ( ! yyg->yy_did_buffer_switch_on_eof )
+						YY_NEW_FILE;
+					}
+				break;
+				}
+
+			case EOB_ACT_CONTINUE_SCAN:
+				yyg->yy_c_buf_p =
+					yyg->yytext_ptr + yy_amount_of_matched_text;
+
+				yy_current_state = yy_get_previous_state( yyscanner );
+
+				yy_cp = yyg->yy_c_buf_p;
+				yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+				goto yy_match;
+
+			case EOB_ACT_LAST_MATCH:
+				yyg->yy_c_buf_p =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];
+
+				yy_current_state = yy_get_previous_state( yyscanner );
+
+				yy_cp = yyg->yy_c_buf_p;
+				yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+				goto yy_find_action;
+			}
+		break;
+		}
+
+	default:
+		YY_FATAL_ERROR(
+			"fatal flex scanner internal error--no action found" );
+	} /* end of action switch */
+		} /* end of scanning one token */
+} /* end of yylex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *	EOB_ACT_LAST_MATCH -
+ *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *	EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	register char *source = yyg->yytext_ptr;
+	register int number_to_move, i;
+	int ret_val;
+
+	if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
+		YY_FATAL_ERROR(
+		"fatal flex scanner internal error--end of buffer missed" );
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+		{ /* Don't try to fill the buffer, so this is an EOF. */
+		if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 )
+			{
+			/* We matched a single character, the EOB, so
+			 * treat this as a final EOF.
+			 */
+			return EOB_ACT_END_OF_FILE;
+			}
+
+		else
+			{
+			/* We matched some text prior to the EOB, first
+			 * process it.
+			 */
+			return EOB_ACT_LAST_MATCH;
+			}
+		}
+
+	/* Try to read more data. */
+
+	/* First move last chars to start of buffer. */
+	number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
+
+	for ( i = 0; i < number_to_move; ++i )
+		*(dest++) = *(source++);
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+		/* don't do the read, it's not guaranteed to return an EOF,
+		 * just force an EOF
+		 */
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;
+
+	else
+		{
+			int num_to_read =
+			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+		while ( num_to_read <= 0 )
+			{ /* Not enough room in the buffer - grow it. */
+
+			/* just a shorter name for the current buffer */
+			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+
+			int yy_c_buf_p_offset =
+				(int) (yyg->yy_c_buf_p - b->yy_ch_buf);
+
+			if ( b->yy_is_our_buffer )
+				{
+				int new_size = b->yy_buf_size * 2;
+
+				if ( new_size <= 0 )
+					b->yy_buf_size += b->yy_buf_size / 8;
+				else
+					b->yy_buf_size *= 2;
+
+				b->yy_ch_buf = (char *)
+					/* Include room in for 2 EOB chars. */
+					yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner );
+				}
+			else
+				/* Can't grow it, we don't own it. */
+				b->yy_ch_buf = 0;
+
+			if ( ! b->yy_ch_buf )
+				YY_FATAL_ERROR(
+				"fatal error - scanner input buffer overflow" );
+
+			yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+						number_to_move - 1;
+
+			}
+
+		if ( num_to_read > YY_READ_BUF_SIZE )
+			num_to_read = YY_READ_BUF_SIZE;
+
+		/* Read in more data. */
+		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+			yyg->yy_n_chars, (size_t) num_to_read );
+
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+		}
+
+	if ( yyg->yy_n_chars == 0 )
+		{
+		if ( number_to_move == YY_MORE_ADJ )
+			{
+			ret_val = EOB_ACT_END_OF_FILE;
+			yyrestart(yyin  ,yyscanner);
+			}
+
+		else
+			{
+			ret_val = EOB_ACT_LAST_MATCH;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+				YY_BUFFER_EOF_PENDING;
+			}
+		}
+
+	else
+		ret_val = EOB_ACT_CONTINUE_SCAN;
+
+	if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+	}
+
+	yyg->yy_n_chars += number_to_move;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+
+	yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+	return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+    static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	yy_current_state = yyg->yy_start;
+
+	for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
+		{
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		if ( yy_accept[yy_current_state] )
+			{
+			yyg->yy_last_accepting_state = yy_current_state;
+			yyg->yy_last_accepting_cpos = yy_cp;
+			}
+		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+			{
+			yy_current_state = (int) yy_def[yy_current_state];
+			if ( yy_current_state >= 135 )
+				yy_c = yy_meta[(unsigned int) yy_c];
+			}
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		}
+
+	return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *	next_state = yy_try_NUL_trans( current_state );
+ */
+    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state , yyscan_t yyscanner)
+{
+	register int yy_is_jam;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
+	register char *yy_cp = yyg->yy_c_buf_p;
+
+	register YY_CHAR yy_c = 1;
+	if ( yy_accept[yy_current_state] )
+		{
+		yyg->yy_last_accepting_state = yy_current_state;
+		yyg->yy_last_accepting_cpos = yy_cp;
+		}
+	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+		{
+		yy_current_state = (int) yy_def[yy_current_state];
+		if ( yy_current_state >= 135 )
+			yy_c = yy_meta[(unsigned int) yy_c];
+		}
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+	yy_is_jam = (yy_current_state == 134);
+
+	return yy_is_jam ? 0 : yy_current_state;
+}
+
+    static void yyunput (int c, register char * yy_bp , yyscan_t yyscanner)
+{
+	register char *yy_cp;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+    yy_cp = yyg->yy_c_buf_p;
+
+	/* undo effects of setting up yytext */
+	*yy_cp = yyg->yy_hold_char;
+
+	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+		{ /* need to shift things up to make room */
+		/* +2 for EOB chars. */
+		register int number_to_move = yyg->yy_n_chars + 2;
+		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+		register char *source =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			*--dest = *--source;
+
+		yy_cp += (int) (dest - source);
+		yy_bp += (int) (dest - source);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+			yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+			YY_FATAL_ERROR( "flex scanner push-back overflow" );
+		}
+
+	*--yy_cp = (char) c;
+
+    if ( c == '\n' ){
+        --yylineno;
+    }
+
+	yyg->yytext_ptr = yy_bp;
+	yyg->yy_hold_char = *yy_cp;
+	yyg->yy_c_buf_p = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+    static int yyinput (yyscan_t yyscanner)
+#else
+    static int input  (yyscan_t yyscanner)
+#endif
+
+{
+	int c;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	*yyg->yy_c_buf_p = yyg->yy_hold_char;
+
+	if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+		{
+		/* yy_c_buf_p now points to the character we want to return.
+		 * If this occurs *before* the EOB characters, then it's a
+		 * valid NUL; if not, then we've hit the end of the buffer.
+		 */
+		if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
+			/* This was really a NUL. */
+			*yyg->yy_c_buf_p = '\0';
+
+		else
+			{ /* need more input */
+			int offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
+			++yyg->yy_c_buf_p;
+
+			switch ( yy_get_next_buffer( yyscanner ) )
+				{
+				case EOB_ACT_LAST_MATCH:
+					/* This happens because yy_g_n_b()
+					 * sees that we've accumulated a
+					 * token and flags that we need to
+					 * try matching the token before
+					 * proceeding.  But for input(),
+					 * there's no matching to consider.
+					 * So convert the EOB_ACT_LAST_MATCH
+					 * to EOB_ACT_END_OF_FILE.
+					 */
+
+					/* Reset buffer status. */
+					yyrestart(yyin ,yyscanner);
+
+					/*FALLTHROUGH*/
+
+				case EOB_ACT_END_OF_FILE:
+					{
+					if ( yywrap(yyscanner ) )
+						return EOF;
+
+					if ( ! yyg->yy_did_buffer_switch_on_eof )
+						YY_NEW_FILE;
+#ifdef __cplusplus
+					return yyinput(yyscanner);
+#else
+					return input(yyscanner);
+#endif
+					}
+
+				case EOB_ACT_CONTINUE_SCAN:
+					yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
+					break;
+				}
+			}
+		}
+
+	c = *(unsigned char *) yyg->yy_c_buf_p;	/* cast for 8-bit char's */
+	*yyg->yy_c_buf_p = '\0';	/* preserve yytext */
+	yyg->yy_hold_char = *++yyg->yy_c_buf_p;
+
+	if ( c == '\n' )
+		   
+    do{ yylineno++;
+        yycolumn=0;
+    }while(0)
+;
+
+	return c;
+}
+#endif	/* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ * @param yyscanner The scanner object.
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+    void yyrestart  (FILE * input_file , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	if ( ! YY_CURRENT_BUFFER ){
+        yyensure_buffer_stack (yyscanner);
+		YY_CURRENT_BUFFER_LVALUE =
+            yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+	}
+
+	yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
+	yy_load_buffer_state(yyscanner );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ * @param yyscanner The scanner object.
+ */
+    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	/* TODO. We should be able to replace this entire function body
+	 * with
+	 *		yypop_buffer_state();
+	 *		yypush_buffer_state(new_buffer);
+     */
+	yyensure_buffer_stack (yyscanner);
+	if ( YY_CURRENT_BUFFER == new_buffer )
+		return;
+
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*yyg->yy_c_buf_p = yyg->yy_hold_char;
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+		}
+
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+	yy_load_buffer_state(yyscanner );
+
+	/* We don't actually know whether we did this switch during
+	 * EOF (yywrap()) processing, but the only time this flag
+	 * is looked at is after yywrap() is called, so it's safe
+	 * to go ahead and always set it.
+	 */
+	yyg->yy_did_buffer_switch_on_eof = 1;
+}
+
+static void yy_load_buffer_state  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+	yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+	yyg->yy_hold_char = *yyg->yy_c_buf_p;
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ * @param yyscanner The scanner object.
+ * @return the allocated buffer state.
+ */
+    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size , yyscan_t yyscanner)
+{
+	YY_BUFFER_STATE b;
+    
+	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+	b->yy_buf_size = size;
+
+	/* yy_ch_buf has to be 2 characters longer than the size given because
+	 * we need to put in 2 end-of-buffer characters.
+	 */
+	b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ,yyscanner );
+	if ( ! b->yy_ch_buf )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+	b->yy_is_our_buffer = 1;
+
+	yy_init_buffer(b,file ,yyscanner);
+
+	return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ * @param yyscanner The scanner object.
+ */
+    void yy_delete_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	if ( ! b )
+		return;
+
+	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+	if ( b->yy_is_our_buffer )
+		yyfree((void *) b->yy_ch_buf ,yyscanner );
+
+	yyfree((void *) b ,yyscanner );
+}
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file , yyscan_t yyscanner)
+
+{
+	int oerrno = errno;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	yy_flush_buffer(b ,yyscanner);
+
+	b->yy_input_file = file;
+	b->yy_fill_buffer = 1;
+
+    /* If b is the current buffer, then yy_init_buffer was _probably_
+     * called from yyrestart() or through yy_get_next_buffer.
+     * In that case, we don't want to reset the lineno or column.
+     */
+    if (b != YY_CURRENT_BUFFER){
+        b->yy_bs_lineno = 1;
+        b->yy_bs_column = 0;
+    }
+
+        b->yy_is_interactive = 0;
+    
+	errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ * @param yyscanner The scanner object.
+ */
+    void yy_flush_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	if ( ! b )
+		return;
+
+	b->yy_n_chars = 0;
+
+	/* We always need two end-of-buffer characters.  The first causes
+	 * a transition to the end-of-buffer state.  The second causes
+	 * a jam in that state.
+	 */
+	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+	b->yy_buf_pos = &b->yy_ch_buf[0];
+
+	b->yy_at_bol = 1;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	if ( b == YY_CURRENT_BUFFER )
+		yy_load_buffer_state(yyscanner );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ *  the current state. This function will allocate the stack
+ *  if necessary.
+ *  @param new_buffer The new state.
+ *  @param yyscanner The scanner object.
+ */
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	if (new_buffer == NULL)
+		return;
+
+	yyensure_buffer_stack(yyscanner);
+
+	/* This block is copied from yy_switch_to_buffer. */
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*yyg->yy_c_buf_p = yyg->yy_hold_char;
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+		}
+
+	/* Only push if top exists. Otherwise, replace top. */
+	if (YY_CURRENT_BUFFER)
+		yyg->yy_buffer_stack_top++;
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+	/* copied from yy_switch_to_buffer. */
+	yy_load_buffer_state(yyscanner );
+	yyg->yy_did_buffer_switch_on_eof = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ *  The next element becomes the new top.
+ *  @param yyscanner The scanner object.
+ */
+void yypop_buffer_state (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	if (!YY_CURRENT_BUFFER)
+		return;
+
+	yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner);
+	YY_CURRENT_BUFFER_LVALUE = NULL;
+	if (yyg->yy_buffer_stack_top > 0)
+		--yyg->yy_buffer_stack_top;
+
+	if (YY_CURRENT_BUFFER) {
+		yy_load_buffer_state(yyscanner );
+		yyg->yy_did_buffer_switch_on_eof = 1;
+	}
+}
+
+/* Allocates the stack if it does not exist.
+ *  Guarantees space for at least one push.
+ */
+static void yyensure_buffer_stack (yyscan_t yyscanner)
+{
+	int num_to_alloc;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	if (!yyg->yy_buffer_stack) {
+
+		/* First allocation is just for 2 elements, since we don't know if this
+		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
+		 * immediate realloc on the next call.
+         */
+		num_to_alloc = 1;
+		yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc
+								(num_to_alloc * sizeof(struct yy_buffer_state*)
+								, yyscanner);
+		if ( ! yyg->yy_buffer_stack )
+			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+								  
+		memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+				
+		yyg->yy_buffer_stack_max = num_to_alloc;
+		yyg->yy_buffer_stack_top = 0;
+		return;
+	}
+
+	if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
+
+		/* Increase the buffer to prepare for a possible push. */
+		int grow_size = 8 /* arbitrary grow size */;
+
+		num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
+		yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc
+								(yyg->yy_buffer_stack,
+								num_to_alloc * sizeof(struct yy_buffer_state*)
+								, yyscanner);
+		if ( ! yyg->yy_buffer_stack )
+			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+		/* zero only the new slots.*/
+		memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
+		yyg->yy_buffer_stack_max = num_to_alloc;
+	}
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object. 
+ */
+YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size , yyscan_t yyscanner)
+{
+	YY_BUFFER_STATE b;
+    
+	if ( size < 2 ||
+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+		/* They forgot to leave room for the EOB's. */
+		return 0;
+
+	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_pos = b->yy_ch_buf = base;
+	b->yy_is_our_buffer = 0;
+	b->yy_input_file = 0;
+	b->yy_n_chars = b->yy_buf_size;
+	b->yy_is_interactive = 0;
+	b->yy_at_bol = 1;
+	b->yy_fill_buffer = 0;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	yy_switch_to_buffer(b ,yyscanner );
+
+	return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ *       yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string (yyconst char * yystr , yyscan_t yyscanner)
+{
+    
+	return yy_scan_bytes(yystr,strlen(yystr) ,yyscanner);
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len , yyscan_t yyscanner)
+{
+	YY_BUFFER_STATE b;
+	char *buf;
+	yy_size_t n;
+	int i;
+    
+	/* Get memory for full buffer, including space for trailing EOB's. */
+	n = _yybytes_len + 2;
+	buf = (char *) yyalloc(n ,yyscanner );
+	if ( ! buf )
+		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+	for ( i = 0; i < _yybytes_len; ++i )
+		buf[i] = yybytes[i];
+
+	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+	b = yy_scan_buffer(buf,n ,yyscanner);
+	if ( ! b )
+		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+	/* It's okay to grow etc. this buffer, and we should throw it
+	 * away when we're done.
+	 */
+	b->yy_is_our_buffer = 1;
+
+	return b;
+}
+
+    static void yy_push_state (int  new_state , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	if ( yyg->yy_start_stack_ptr >= yyg->yy_start_stack_depth )
+		{
+		yy_size_t new_size;
+
+		yyg->yy_start_stack_depth += YY_START_STACK_INCR;
+		new_size = yyg->yy_start_stack_depth * sizeof( int );
+
+		if ( ! yyg->yy_start_stack )
+			yyg->yy_start_stack = (int *) yyalloc(new_size ,yyscanner );
+
+		else
+			yyg->yy_start_stack = (int *) yyrealloc((void *) yyg->yy_start_stack,new_size ,yyscanner );
+
+		if ( ! yyg->yy_start_stack )
+			YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
+		}
+
+	yyg->yy_start_stack[yyg->yy_start_stack_ptr++] = YY_START;
+
+	BEGIN(new_state);
+}
+
+    static void yy_pop_state  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	if ( --yyg->yy_start_stack_ptr < 0 )
+		YY_FATAL_ERROR( "start-condition stack underflow" );
+
+	BEGIN(yyg->yy_start_stack[yyg->yy_start_stack_ptr]);
+}
+
+    static int yy_top_state  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	return yyg->yy_start_stack[yyg->yy_start_stack_ptr - 1];
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
+{
+    	(void) fprintf( stderr, "%s\n", msg );
+	exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		yytext[yyleng] = yyg->yy_hold_char; \
+		yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
+		yyg->yy_hold_char = *yyg->yy_c_buf_p; \
+		*yyg->yy_c_buf_p = '\0'; \
+		yyleng = yyless_macro_arg; \
+		} \
+	while ( 0 )
+
+/* Accessor  methods (get/set functions) to struct members. */
+
+/** Get the user-defined data for this scanner.
+ * @param yyscanner The scanner object.
+ */
+YY_EXTRA_TYPE yyget_extra  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yyextra;
+}
+
+/** Get the current line number.
+ * @param yyscanner The scanner object.
+ */
+int yyget_lineno  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    
+        if (! YY_CURRENT_BUFFER)
+            return 0;
+    
+    return yylineno;
+}
+
+/** Get the current column number.
+ * @param yyscanner The scanner object.
+ */
+int yyget_column  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    
+        if (! YY_CURRENT_BUFFER)
+            return 0;
+    
+    return yycolumn;
+}
+
+/** Get the input stream.
+ * @param yyscanner The scanner object.
+ */
+FILE *yyget_in  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yyin;
+}
+
+/** Get the output stream.
+ * @param yyscanner The scanner object.
+ */
+FILE *yyget_out  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yyout;
+}
+
+/** Get the length of the current token.
+ * @param yyscanner The scanner object.
+ */
+int yyget_leng  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yyleng;
+}
+
+/** Get the current token.
+ * @param yyscanner The scanner object.
+ */
+
+char *yyget_text  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yytext;
+}
+
+/** Set the user-defined data. This data is never touched by the scanner.
+ * @param user_defined The data to be associated with this scanner.
+ * @param yyscanner The scanner object.
+ */
+void yyset_extra (YY_EXTRA_TYPE  user_defined , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yyextra = user_defined ;
+}
+
+/** Set the current line number.
+ * @param line_number
+ * @param yyscanner The scanner object.
+ */
+void yyset_lineno (int  line_number , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+        /* lineno is only valid if an input buffer exists. */
+        if (! YY_CURRENT_BUFFER )
+           yy_fatal_error( "yyset_lineno called with no buffer" , yyscanner); 
+    
+    yylineno = line_number;
+}
+
+/** Set the current column.
+ * @param line_number
+ * @param yyscanner The scanner object.
+ */
+void yyset_column (int  column_no , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+        /* column is only valid if an input buffer exists. */
+        if (! YY_CURRENT_BUFFER )
+           yy_fatal_error( "yyset_column called with no buffer" , yyscanner); 
+    
+    yycolumn = column_no;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ * @param yyscanner The scanner object.
+ * @see yy_switch_to_buffer
+ */
+void yyset_in (FILE *  in_str , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yyin = in_str ;
+}
+
+void yyset_out (FILE *  out_str , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yyout = out_str ;
+}
+
+int yyget_debug  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yy_flex_debug;
+}
+
+void yyset_debug (int  bdebug , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yy_flex_debug = bdebug ;
+}
+
+/* Accessor methods for yylval and yylloc */
+
+YYSTYPE * yyget_lval  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yylval;
+}
+
+void yyset_lval (YYSTYPE *  yylval_param , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yylval = yylval_param;
+}
+
+/* User-visible API */
+
+/* yylex_init is special because it creates the scanner itself, so it is
+ * the ONLY reentrant function that doesn't take the scanner as the last argument.
+ * That's why we explicitly handle the declaration, instead of using our macros.
+ */
+
+int yylex_init(yyscan_t* ptr_yy_globals)
+
+{
+    if (ptr_yy_globals == NULL){
+        errno = EINVAL;
+        return 1;
+    }
+
+    *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL );
+
+    if (*ptr_yy_globals == NULL){
+        errno = ENOMEM;
+        return 1;
+    }
+
+    /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
+    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
+
+    return yy_init_globals ( *ptr_yy_globals );
+}
+
+/* yylex_init_extra has the same functionality as yylex_init, but follows the
+ * convention of taking the scanner as the last argument. Note however, that
+ * this is a *pointer* to a scanner, as it will be allocated by this call (and
+ * is the reason, too, why this function also must handle its own declaration).
+ * The user defined value in the first argument will be available to yyalloc in
+ * the yyextra field.
+ */
+
+int yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )
+
+{
+    struct yyguts_t dummy_yyguts;
+
+    yyset_extra (yy_user_defined, &dummy_yyguts);
+
+    if (ptr_yy_globals == NULL){
+        errno = EINVAL;
+        return 1;
+    }
+	
+    *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
+	
+    if (*ptr_yy_globals == NULL){
+        errno = ENOMEM;
+        return 1;
+    }
+    
+    /* By setting to 0xAA, we expose bugs in
+    yy_init_globals. Leave at 0x00 for releases. */
+    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
+    
+    yyset_extra (yy_user_defined, *ptr_yy_globals);
+    
+    return yy_init_globals ( *ptr_yy_globals );
+}
+
+static int yy_init_globals (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    /* Initialization is the same as for the non-reentrant scanner.
+     * This function is called from yylex_destroy(), so don't allocate here.
+     */
+
+    yyg->yy_buffer_stack = 0;
+    yyg->yy_buffer_stack_top = 0;
+    yyg->yy_buffer_stack_max = 0;
+    yyg->yy_c_buf_p = (char *) 0;
+    yyg->yy_init = 0;
+    yyg->yy_start = 0;
+
+    yyg->yy_start_stack_ptr = 0;
+    yyg->yy_start_stack_depth = 0;
+    yyg->yy_start_stack =  NULL;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+    yyin = stdin;
+    yyout = stdout;
+#else
+    yyin = (FILE *) 0;
+    yyout = (FILE *) 0;
+#endif
+
+    /* For future reference: Set errno on error, since we are called by
+     * yylex_init()
+     */
+    return 0;
+}
+
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+    /* Pop the buffer stack, destroying each element. */
+	while(YY_CURRENT_BUFFER){
+		yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner );
+		YY_CURRENT_BUFFER_LVALUE = NULL;
+		yypop_buffer_state(yyscanner);
+	}
+
+	/* Destroy the stack itself. */
+	yyfree(yyg->yy_buffer_stack ,yyscanner);
+	yyg->yy_buffer_stack = NULL;
+
+    /* Destroy the start condition stack. */
+        yyfree(yyg->yy_start_stack ,yyscanner );
+        yyg->yy_start_stack = NULL;
+
+    /* Reset the globals. This is important in a non-reentrant scanner so the next time
+     * yylex() is called, initialization will occur. */
+    yy_init_globals( yyscanner);
+
+    /* Destroy the main struct (reentrant only). */
+    yyfree ( yyscanner , yyscanner );
+    yyscanner = NULL;
+    return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
+{
+	register int i;
+	for ( i = 0; i < n; ++i )
+		s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
+{
+	register int n;
+	for ( n = 0; s[n]; ++n )
+		;
+
+	return n;
+}
+#endif
+
+void *yyalloc (yy_size_t  size , yyscan_t yyscanner)
+{
+	return (void *) malloc( size );
+}
+
+void *yyrealloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner)
+{
+	/* The cast to (char *) in the following accommodates both
+	 * implementations that use char* generic pointers, and those
+	 * that use void* generic pointers.  It works with the latter
+	 * because both ANSI C and C++ allow castless assignment from
+	 * any pointer type to void*, and deal with argument conversions
+	 * as though doing an assignment.
+	 */
+	return (void *) realloc( (char *) ptr, size );
+}
+
+void yyfree (void * ptr , yyscan_t yyscanner)
+{
+	free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+rc_t CC KFGScan_yylex_init(KFGScanBlock* sb, const char *str)
+{
+	if (yylex_init(&sb->scanner) != 0)
+	{
+		return RC ( rcKFG, rcMgr, rcParsing, rcMemory, rcExhausted );
+	}		
+	sb->buffer=yy_scan_string(str,sb->scanner); 
+	
+	{	/* initialize line/col counters */
+		/* yylineno and yycolumn are macros using variable yyg, so we have to prepare it for them */
+		struct yyguts_t * yyg = (struct yyguts_t*)sb->scanner;
+		yylineno=1;
+		yycolumn=1;
+	}
+	
+	return 0;
+}
+
+void CC KFGScan_yylex_destroy(KFGScanBlock* sb)
+{
+	yy_delete_buffer(sb->buffer,sb->scanner); 
+	if (sb->scanner)
+	{
+		yylex_destroy(sb->scanner);
+	}		
+	sb->scanner=0;
+	sb->buffer=0;
+}
+
+void CC KFGScan_set_debug(bool on, KFGScanBlock* sb)
+{
+	yyset_debug(on ? 1 : 0,sb->scanner);
+}
+
+int CC KFGScan_yylex(KFGSymbol* sym, KFGScanBlock* sb) 
+{ 
+	sym->pb.tokenId=yylex(&sym->pb,sb->scanner); 
+	sb->lastToken= &sym->pb;
+	
+	switch (sym->pb.tokenId)
+	{
+	case kfgVAR_REF:
+		if (!sb->look_up_var(sb->self, &sym->pb)) 
+		{
+			/* undefined variable reference is handled silently, to behave like a shell script */
+			/* KFG_error(&sym->pb, sb, "variable not found");*/
+			sym->pb.tokenLength = 0; 
+		}
+		sym->pb.tokenId = kfgSTRING;
+		break;
+	case kfgUNTERM_VAR_REF: /* convert bad var ref into a string */ 
+		KFG_error(&sym->pb, sb, "unterminated variable reference inside a string (use '\\$(' to avoid this message)");
+		sym->pb.tokenId = kfgSTRING; 
+		break;
+	case kfgUNTERM_STRING:
+	case kfgUNTERM_ESCAPED_STRING:
+		KFG_error(&sym->pb, sb, "unterminated string");
+		break;
+	default:
+		break;
+	}
+	
+	return sym->pb.tokenId;
+}
+
diff --git a/libs/kfg/config-tokens.h b/libs/kfg/config-tokens.h
new file mode 100644
index 0000000..2090822
--- /dev/null
+++ b/libs/kfg/config-tokens.h
@@ -0,0 +1,75 @@
+/* A Bison parser, made by GNU Bison 2.5.  */
+
+/* Bison interface for Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+   
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     kfgEND_INPUT = 0,
+     kfgEND_LINE = 258,
+     kfgUNTERM_STRING = 259,
+     kfgUNTERM_ESCAPED_STRING = 260,
+     kfgUNRECOGNIZED = 261,
+     kfgVAR_REF = 262,
+     kfgUNTERM_VAR_REF = 263,
+     kfgASSIGN = 264,
+     kfgSTRING = 265,
+     kfgESCAPED_STRING = 266,
+     kfgABS_PATH = 267,
+     kfgREL_PATH = 268
+   };
+#endif
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+
+
+	KFGParseBlock		pb;
+	const VNamelist*	namelist;
+
+
+
+} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+
+
diff --git a/libs/kfg/config.c b/libs/kfg/config.c
index f211290..faadfe2 100644
--- a/libs/kfg/config.c
+++ b/libs/kfg/config.c
@@ -33,26 +33,51 @@ struct KfgConfigNamelist;
 
 #include <klib/token.h>
 #include <klib/container.h>
+#include <klib/data-buffer.h> /* KDataBuffer */
 #include <klib/refcount.h>
 #include <klib/text.h>
 #include <klib/printf.h>
 #include <klib/rc.h>
 #include <klib/debug.h>
-#include <klib/log.h>
+#include <klib/log.h> 
+#include <klib/out.h> /* OUTMSG */
+#include <klib/klib-priv.h>
 #include <kfs/directory.h>
+#include <kfs/gzip.h> /* KFileMakeGzipForRead */
+#include <kfs/subfile.h> /* KFileMakeSubRead */
 #include <kfs/file.h>
 #include <kfs/dyload.h>
 #include <kfs/mmap.h>
+#include <os-native.h>
+#include <vfs/path.h>
+#include <strtol.h>
 #include <sysalloc.h>
+#include <os-native.h>
 
 #include <string.h>
+#include <ctype.h>
 #include <stdlib.h>
 #include <assert.h>
+#include <va_copy.h>
+
+#if !WINDOWS
+    #include <sys/utsname.h>
+#endif
+
+#include "kfg-parse.h"
+#include "config-tokens.h"
 
 #ifndef PATH_MAX
 #define PATH_MAX 4096
 #endif
 
+/* the leaf name of the user's modifiable settings,
+   must reside in the user's $HOME/.ncbi directory */
+#define MAGIC_LEAF_NAME "user-settings.mkfg"
+
+static bool s_disable_user_settings = false;
+
+
 /*--------------------------------------------------------------------------
  * KConfig
  */
@@ -61,6 +86,34 @@ rc_t KConfigSever ( const KConfig *self );
 
 
 /*--------------------------------------------------------------------------
+ * KConfigIncluded
+ *  node within configuration tree
+ */
+
+typedef struct KConfigIncluded KConfigIncluded;
+struct KConfigIncluded
+{
+    BSTNode n;
+    bool is_magic_file;
+    char path [ 1 ];
+};
+
+
+static
+void CC KConfigIncludedWhack ( BSTNode *n, void *ignore )
+{
+    free ( n );
+}
+
+static
+int CC KConfigIncludedSort ( const BSTNode *item, const BSTNode *n )
+{
+    const KConfigIncluded *a = ( const KConfigIncluded* ) item;
+    const KConfigIncluded *b = ( const KConfigIncluded* ) n;
+    return strcmp ( a -> path, b -> path );
+}
+
+/*--------------------------------------------------------------------------
  * KConfigNode
  *  node within configuration tree
  */
@@ -74,6 +127,9 @@ struct KConfigNode
     /* uncounted reference to parent node */
     KConfigNode *dad;
 
+    /* File node came from; null if created during runtime*/
+    KConfigIncluded *came_from;
+
     /* named children - always unique */
     BSTree children;
 
@@ -89,7 +145,9 @@ struct KConfigNode
 
     KRefcount refcount;
 
+    bool internal;
     bool read_only;
+    bool dirty;
 };
 
 /* replace this once we introduce attributes */
@@ -126,19 +184,14 @@ void CC KConfigNodeWhack ( BSTNode *n, void * data )
 static
 void KConfigNodeInit ( KConfigNode *self, const String *name )
 {
+    /* clear out here, ignoring the string space */
+    memset ( self, 0, sizeof * self );
+
     /* initialize name early for the sake of KRefcountInit */
     string_copy ( ( char* ) ( self + 1 ), name -> size + 1, name -> addr, name -> size );
     StringInit ( & self -> name, ( char* ) ( self + 1 ), name -> size, name -> len );
-
-    KRefcountInit ( & self -> refcount, 0, "KConfigNode", "init", self -> name . addr );
-
-    self -> mgr = NULL;
-    self -> dad = NULL;
-    BSTreeInit ( & self -> children );
-    BSTreeInit ( & self -> attr );
-    self -> val_buffer = NULL;
     StringInit ( & self -> value, "", 0, 0 );
-    self -> read_only = false;
+    KRefcountInit ( & self -> refcount, 0, "KConfigNode", "init", self -> name . addr );
 }
 
 /* Make
@@ -146,6 +199,7 @@ void KConfigNodeInit ( KConfigNode *self, const String *name )
 static
 rc_t KConfigNodeMake ( KConfigNode **n, const String *name )
 {
+    /* don't use calloc, because of string space */
     KConfigNode *cn = malloc ( sizeof * cn + name -> size + 1 );
     if ( cn == NULL )
     {
@@ -206,7 +260,7 @@ LIB_EXPORT rc_t CC KConfigNodeRelease ( const KConfigNode *self )
         {
         case krefWhack:
             KConfigNodeWhack ( & ( ( KConfigNode* ) self ) -> n, NULL );
-	    break;
+        break;
         case krefLimit:
             return RC ( rcKFG, rcNode, rcReleasing, rcRange, rcExcessive );
         }
@@ -224,95 +278,85 @@ struct KConfig
     BSTree tree;
     BSTree included;
     KDualRef refcount;
-};
-
-static KConfig *G_kfg = NULL;
-
-typedef struct KConfigIncluded KConfigIncluded;
-struct KConfigIncluded
-{
-    BSTNode n;
-    char path [ 1 ];
-};
+    KConfigIncluded *current_file;
 
+    char * load_path;
+    size_t load_path_sz_tmp;
 
-static
-void CC KConfigIncludedWhack ( BSTNode *n, void *ignore )
-{
-    free ( n );
-}
-
-static
-int CC KConfigIncludedSort ( const BSTNode *item, const BSTNode *n )
-{
-    const KConfigIncluded *a = ( const KConfigIncluded* ) item;
-    const KConfigIncluded *b = ( const KConfigIncluded* ) n;
-    return strcmp ( a -> path, b -> path );
-}
+    const char *magic_file_path;
+    size_t magic_file_path_size;
 
+    bool dirty;
+    bool initialized;
+};
 
-static char * G_load_path = NULL;
-static size_t G_load_path_sz_tmp = 0;
 
-static char* append_to_load_path(char* src, size_t* sz,
-    const char* chunk)
+rc_t KConfigAppendToLoadPath(KConfig *self, const char* chunk)
 {
+    rc_t rc = 0;
     size_t new_sz = 0;
 
-    if (sz == NULL) {
-        return NULL;
-    }
+    assert(self);
+
     if (chunk == NULL || chunk[0] == '\0') {
-        return src;
+        return rc;
     }
 
-    if (src == NULL) {
-        *sz = PATH_MAX;
-        src = malloc(*sz);
-        if (src == NULL) {
-            return NULL;
+    if (self->load_path == NULL) {
+        self->load_path_sz_tmp = PATH_MAX;
+        self->load_path = malloc(self->load_path_sz_tmp);
+        if (self->load_path == NULL) {
+            return RC ( rcKFG, rcMgr, rcCreating, rcMemory, rcExhausted );
         }
-        src[0] = '\0';
+        self->load_path[0] = '\0';
     }
 
-    new_sz = strlen(src) + 1 + strlen(chunk) + 1;
-    if (*sz < new_sz) {
-        *sz = 2 * new_sz;
-        src = realloc(src, *sz);
-        if (src == NULL) {
-            return NULL;
+    new_sz = string_size(self->load_path) + 1 + string_size(chunk) + 1;
+    if (self->load_path_sz_tmp < new_sz) {
+        self->load_path_sz_tmp = 2 * new_sz;
+        self->load_path = realloc(self->load_path, self->load_path_sz_tmp);
+        if (self->load_path == NULL) {
+            return RC ( rcKFG, rcMgr, rcCreating, rcMemory, rcExhausted );
         }
     }
 
-    if (src[0] != '\0') {
-        strcat(src, ":");
+    if (self->load_path[0] != '\0') {
+        strcat(self->load_path, ":");
     }
-    strcat(src, chunk);
+    strcat(self->load_path, chunk);
 
-    return src;
+    return rc;
 }
 
 
 /* Whack
  */
 static
+rc_t KConfigEmpty ( KConfig * self)
+{
+    if (self)
+    {
+        BSTreeWhack ( & self -> tree, KConfigNodeWhack, self );
+        BSTreeWhack ( & self -> included, KConfigIncludedWhack, NULL );
+
+        self -> magic_file_path_size = 0;
+        free ( ( void* ) self -> magic_file_path );
+        self -> magic_file_path = NULL;
+
+        self->load_path_sz_tmp = 0;
+        free ( self->load_path );
+        self->load_path = NULL;
+    }
+    return 0;
+}
+
+static
 rc_t KConfigWhack ( KConfig *self )
 {
-    if ( self == G_kfg )
-#if KFG_COMMON_CREATION
-        return 0;
-#else
-        G_kfg = NULL;
-#endif
+    KConfigEmpty (self);
 
-    BSTreeWhack ( & self -> tree, KConfigNodeWhack, self );
-    BSTreeWhack ( & self -> included, KConfigIncludedWhack, NULL );
     free ( self );
 
-    free ( G_load_path );
-    G_load_path = NULL;
-    G_load_path_sz_tmp = 0;
-
     return 0;
 }
 
@@ -323,8 +367,11 @@ void KConfigInit ( KConfig *self, KConfigNode * root )
 {
     KDualRefInit ( & self -> refcount, 1, 0, "KConfig", "init", "kfg" );
     BSTreeInit ( & self -> tree );
+    self -> dirty = false;
+    self -> initialized = false;
     BSTreeInit ( & self -> included );
     BSTreeInsert ( & self -> tree, & root -> n, KConfigNodeSort );
+    self -> magic_file_path = NULL;
 }
 
 
@@ -460,8 +507,10 @@ KToken *KConfigNodeFind ( const KConfigNode *self, const KConfigNode **n, KToken
 /* Create
  */
 static
-KToken *KConfigNodeCreate ( KConfigNode *self, KConfigNode **n, KTokenSource *src, KToken *t )
+KToken *KConfigNodeCreate ( KConfigNode *self, KConfigNode **n, KTokenSource *src, KToken *t, 
+                            KConfigIncluded *current_file )
 {
+    bool created = false;
     KConfigNode * nself;
     * n = NULL;
 
@@ -492,6 +541,7 @@ KToken *KConfigNodeCreate ( KConfigNode *self, KConfigNode **n, KTokenSource *sr
                 BSTreeInsert ( & self -> children, & child -> n, KConfigNodeSort );  
                 child -> dad = self;
                 self = child;
+                created = true;
             }
             else
             {
@@ -509,6 +559,9 @@ KToken *KConfigNodeCreate ( KConfigNode *self, KConfigNode **n, KTokenSource *sr
         KTokenizerNext ( kPOSIXPathTokenizer, src, t );
     }
 
+    if ( created )
+        self -> came_from = current_file;
+
     * n = self;
     return t;
 }
@@ -727,7 +780,8 @@ rc_t KConfigNodeVOpenNodeUpdateInt ( KConfigNode *self, KConfig *mgr,
                     while ( t.id == eFwdSlash);
 
                     /* follow path */
-                    if ( KConfigNodeCreate ( self, node, & src, & t ) == NULL )
+                    assert ( mgr != NULL );
+                    if ( KConfigNodeCreate ( self, node, & src, & t, mgr -> current_file ) == NULL )
                         return RC ( rcKFG, rcNode, rcOpening, rcPath, rcInvalid );
                     if ( ( self = * node ) == NULL )
                         rc = RC ( rcKFG, rcNode, rcOpening, rcMemory, rcExhausted );
@@ -738,15 +792,21 @@ rc_t KConfigNodeVOpenNodeUpdateInt ( KConfigNode *self, KConfig *mgr,
 
             if ( rc == 0 )
             {
-                /* check to see if open */
-                if ( atomic32_read ( & self -> refcount ) == 0 )
+                /* check to see if internal */
+                if ( self -> internal )
+                    rc = RC ( rcKFG, rcNode, rcOpening, rcNode, rcReadonly );
+                else
                 {
-                    self -> mgr = KConfigAttach ( mgr );
-                    assert ( ! self -> read_only );
-                    return KConfigNodeAddRef ( self );
-                }
+                    /* check to see if open */
+                    if ( atomic32_read ( & self -> refcount ) == 0 )
+                    {
+                        self -> mgr = KConfigAttach ( mgr );
+                        assert ( ! self -> read_only );
+                        return KConfigNodeAddRef ( self );
+                    }
 
-                rc = RC ( rcKFG, rcNode, rcOpening, rcNode, rcBusy );
+                    rc = RC ( rcKFG, rcNode, rcOpening, rcNode, rcBusy );
+                }
             }
         }
 
@@ -874,6 +934,16 @@ LIB_EXPORT rc_t CC KConfigNodeRead ( const KConfigNode *self,
     return rc;
 }
 
+static
+void KConfigNodeSetDirty ( KConfigNode *self )
+{
+    KConfig *mgr = self -> mgr;
+
+    if ( mgr == NULL )
+        self -> dirty = true;
+    else if ( mgr -> initialized )
+        self -> dirty = mgr -> dirty = true;
+}
 
 /* Write
  *  write a node value or attribute
@@ -887,7 +957,7 @@ LIB_EXPORT rc_t CC KConfigNodeWrite ( KConfigNode *self, const char *buffer, siz
 
     if ( self == NULL )
         rc = RC ( rcKFG, rcNode, rcWriting, rcSelf, rcNull );
-    else if ( self -> read_only )
+    else if ( self -> read_only || self -> internal )
         rc = RC ( rcKFG, rcNode, rcWriting, rcSelf, rcReadonly );
     else if ( size == 0 )
     {
@@ -912,6 +982,9 @@ LIB_EXPORT rc_t CC KConfigNodeWrite ( KConfigNode *self, const char *buffer, siz
         assert ( self -> val_buffer != NULL );
         string_copy ( self -> val_buffer, self -> value . size + 1, buffer, size );
         self -> value . len = string_len ( self -> val_buffer, size );
+        
+        KConfigNodeSetDirty ( self );
+        
         rc = 0;
     }
 
@@ -930,7 +1003,7 @@ LIB_EXPORT rc_t CC KConfigNodeAppend ( KConfigNode *self, const char *buffer, si
 
     if ( self == NULL )
         rc = RC ( rcKFG, rcNode, rcWriting, rcSelf, rcNull );
-    else if ( self -> read_only )
+    else if ( self -> read_only || self -> internal )
         rc = RC ( rcKFG, rcNode, rcWriting, rcSelf, rcReadonly );
     else if ( size == 0 )
         rc = 0;
@@ -945,6 +1018,9 @@ LIB_EXPORT rc_t CC KConfigNodeAppend ( KConfigNode *self, const char *buffer, si
         string_copy ( & self -> val_buffer [ self -> value . size ], self -> value . size + size + 1, buffer, size );
         self -> value . size += size;
         self -> value . len = string_len ( self -> val_buffer, self -> value . size );
+        
+        KConfigNodeSetDirty ( self );
+
         rc = 0;
     }
 
@@ -966,7 +1042,7 @@ LIB_EXPORT rc_t CC KConfigNodeAppend ( KConfigNode *self, const char *buffer, si
 LIB_EXPORT rc_t CC KConfigNodeReadAttr ( const KConfigNode *self, const char *name,
                                          char *buffer, size_t bsize, size_t *size )
 {
-    PLOGMSG (klogFatal, (klogFatal, "$(F) unimplmented", "F=%s", __func__));
+    PLOGMSG (klogFatal, (klogFatal, "$(F) unimplemented", "F=%s", __func__));
     return -1;
 }
 
@@ -981,7 +1057,7 @@ LIB_EXPORT rc_t CC KConfigNodeReadAttr ( const KConfigNode *self, const char *na
 LIB_EXPORT rc_t CC KConfigNodeWriteAttr ( KConfigNode *self,
                                           const char *name, const char *value )
 {
-    PLOGMSG (klogFatal, (klogFatal, "$(F) unimplmented", "F=%s", __func__));
+    PLOGMSG (klogFatal, (klogFatal, "$(F) unimplemented", "F=%s", __func__));
     return -1;
 }
 
@@ -992,25 +1068,25 @@ LIB_EXPORT rc_t CC KConfigNodeWriteAttr ( KConfigNode *self,
  */
 LIB_EXPORT rc_t CC KConfigNodeDropAll ( KConfigNode *self )
 {
-    PLOGMSG (klogFatal, (klogFatal, "$(F) unimplmented", "F=%s", __func__));
+    PLOGMSG (klogFatal, (klogFatal, "$(F) unimplemented", "F=%s", __func__));
     return -1;
 }
 
 LIB_EXPORT rc_t CC KConfigNodeDropAttr ( KConfigNode *self, const char *attr )
 {
-    PLOGMSG (klogFatal, (klogFatal, "$(F) unimplmented", "F=%s", __func__));
+    PLOGMSG (klogFatal, (klogFatal, "$(F) unimplemented", "F=%s", __func__));
     return -1;
 }
 
 LIB_EXPORT rc_t CC KConfigNodeVDropChild ( KConfigNode *self, const char *path, va_list args )
 {
-    PLOGMSG (klogFatal, (klogFatal, "$(F) unimplmented", "F=%s", __func__));
+    PLOGMSG (klogFatal, (klogFatal, "$(F) unimplemented", "F=%s", __func__));
     return -1;
 }
 
 LIB_EXPORT rc_t CC KConfigNodeDropChild ( KConfigNode *self, const char *path, ... )
 {
-    PLOGMSG (klogFatal, (klogFatal, "$(F) unimplmented", "F=%s", __func__));
+    PLOGMSG (klogFatal, (klogFatal, "$(F) unimplemented", "F=%s", __func__));
     return -1;
 }
 
@@ -1026,13 +1102,13 @@ LIB_EXPORT rc_t CC KConfigNodeDropChild ( KConfigNode *self, const char *path, .
  */
 LIB_EXPORT rc_t CC KConfigNodeRenameAttr ( KConfigNode *self, const char *from, const char *to )
 {
-    PLOGMSG (klogFatal, (klogFatal, "$(F) unimplmented", "F=%s", __func__));
+    PLOGMSG (klogFatal, (klogFatal, "$(F) unimplemented", "F=%s", __func__));
     return -1;
 }
 
 LIB_EXPORT rc_t CC KConfigNodeRenameChild ( KConfigNode *self, const char *from, const char *to )
 {
-    PLOGMSG (klogFatal, (klogFatal, "$(F) unimplmented", "F=%s", __func__));
+    PLOGMSG (klogFatal, (klogFatal, "$(F) unimplemented", "F=%s", __func__));
     return -1;
 }
 
@@ -1041,225 +1117,140 @@ LIB_EXPORT rc_t CC KConfigNodeRenameChild ( KConfigNode *self, const char *from,
  * KConfig
  */
 
-
-/*
-  Grammar:
-  EOL = "\n";
-  lower = [a-z]
-  alpha = [A-Za-z]
-  file = <line>*;
-  line = comment | path-value;
-  comment = script-comment | cpp-comment;
-  script-comment = "#", not_pound , EOL;
-  cpp-comment = "//", any, EOL;
-
-*/
-
-typedef struct parse_block
-{
-    KConfig * self;
-    const KTokenizer * tz;
-    KTokenSource * src;
-    KToken t;
-    const String * symbol;
-    const String * value;
-} parse_block;
-
 static
-rc_t write_nvp (parse_block * pb)
+rc_t
+update_node ( KConfig* self, const char* key, const char* value, bool internal )
 {
-    rc_t rc;
     KConfigNode * node;
-
-    rc = KConfigVOpenNodeUpdate ( pb->self, &node, pb->symbol->addr, NULL);
-
+    rc_t rc = KConfigVOpenNodeUpdate ( self, &node, key, NULL);
     if (rc == 0)
     {
-        /* +1 and -2 get rid of containing quote marks */
-        rc = KConfigNodeWrite (node, pb->value->addr + 1, StringSize (pb->value) - 2);
-
+/*        pLogMsg(klogInfo, "updating config key $(KEY) with '$(VALUE)'", 
+                          "KEY=%s,VALUE=%s", 
+                          key, value);*/
+        rc = KConfigNodeWrite (node, value, string_size(value));
+        node -> internal = internal;
         KConfigNodeRelease ( node );
     }
-
     return rc;
 }
 
 static
-rc_t parse_value (parse_block * pb)
-{
-    rc_t rc;
-    size_t value_size;
-    char value_buffer [4096];
-
-
-    switch ((KTokenizerNext (pb->tz, pb->src, &pb->t))->id)
+rc_t write_nvp(void * self, const char* name, size_t nameLen, VNamelist* values)
+{   /* concatenate all values from the namelist and put the result into config under the given name */
+    uint32_t count;
+    uint32_t size=0;
+    uint32_t concatTo=0;
+    uint32_t i;
+    const String* nameStr;
+
+    char* buf;
+    rc_t rc=VNameListCount(values, &count);
+    if (rc != 0)
     {
-    default:
-        rc = RC (rcKFG, rcMgr, rcParsing, rcString, rcUnexpected);
-        break;
-    case eString:
-    case eEscapedString:
-        rc = KTokenToString (&pb->t, value_buffer, sizeof value_buffer, &value_size);
-        if (rc == 0)
+        return rc;
+    }
+    for (i=0; i < count; ++i)
+    {
+        const char* val;
+        rc=VNameListGet(values, i, &val);
+        if (rc != 0)
         {
-            StringCopy (&pb->value, &pb->t.str);
-            rc = write_nvp (pb);
-            free ((void*)pb->value);
+            return rc;
         }
-        break;
+        size+=string_size(val);
     }
-    return rc;
-}
 
-static
-rc_t validate_symbol (parse_block * pb)
-{
-    /* yeah this should do something eventually */
-    return 0;
-}
-static
-rc_t parse_name (parse_block * pb)
-{
-    const String * concat;
-    rc_t rc;
+    buf=(char*)malloc(size+1);
+    if (buf == 0)
+    {
+        return RC ( rcKFG, rcMgr, rcLoading, rcMemory, rcExhausted );
+    }
 
-    switch ( KTokenizerNext ( pb -> tz, pb -> src, & pb -> t ) -> id )
+    concatTo=0;
+    for (i=0; i < count; ++i)
     {
-    default:
-        rc = RC (rcKFG, rcMgr, rcParsing, rcName, rcUnexpected);
-        break;
-        /* any of these can be part of a path -- but not yet */
-    case eDecimal:
-        /*     case eHex: */
-        /*     case eOctal: */
-        /*     case eFloat: */
-        /*     case eExpFloat: */
-        /*     case eMajMinRel: */
-    case eIdent:
-    case eName:
-        /*     case ePeriod: */
-        /*     case eTilde: */
-        /*     case eMinus: */
-    case eFwdSlash:     
-        /*     case eDblPeriod: */
-        /*     case eEllipses: */
-        rc = StringConcat (&concat, pb->symbol, &pb->t.str);
-        if (rc == 0)
-        {
-            pb->symbol = concat;
-            rc = parse_name (pb);
-            free ((void*)concat);
-        }
-        break;
-    case eAssign:
-        rc = validate_symbol (pb);
-        if (rc == 0)
+        const char* val;
+        rc=VNameListGet(values, i, &val);
+        if (rc != 0)
         {
-            rc = parse_value (pb);            
+            free(buf);
+            return rc;
         }
-        break;
+        string_copy(buf+concatTo, size+1-concatTo, val, string_size(val));
+        concatTo+=string_size(val);
+    }
+    buf[size]=0;
+
+    {
+        String tmp;
+        StringInit(&tmp, name, nameLen, nameLen);
+        StringCopy(&nameStr, &tmp);
     }
+    rc = update_node((KConfig *)self, nameStr->addr, buf, false);
+    StringWhack(nameStr);
+    free(buf);
     return rc;
 }
 
 static
-rc_t parse_nvp (parse_block * pb)
+bool look_up_var(void * self, struct KFGParseBlock* pb)
 {
-    const String * symbol;
-    rc_t rc;
-
-redo:
-    switch ((KTokenizerNext (pb->tz, pb->src, &pb->t))->id)
+    const KConfigNode* node;
+    rc_t rc = KConfigOpenNodeRead((KConfig*)self, &node, "%.*s", pb->tokenLength-3, pb->tokenText+2);
+    if (rc == 0)
     {
-    case eEndOfInput:
-        rc = 0;
-        break;
-
-    case eEndOfLine:
-        LOGMSG (klogInfo, "End Of Line");
-        goto redo;
-
-    default:
-        rc = RC (rcKFG, rcMgr, rcParsing, rcToken, rcUnexpected);
-        break;
-
-        /* a symbol must look like a legal posix path
-         * thetokenizer eats things awkwardly for us so we'll muddle through
-         *
-         * We aren't getting whitespace and we aren't getting all legal path
-         * characters as a path at this point so we'll just face it.
-         * Gather up all legal symbols and concatenate them.
-         *
-         * this currently allows the bad syntax of
-         *
-         *   path/name = "value"; 
-         *
-         * to be the same as
-         *
-         *   path 
-         *   /
-         *      # woo hoo
-         *          name
-         *   =
-         *     "value"
-         *
-         *       ;
-         */
-        /* any of these can be the first part of a path -- but not yet */
-        /*     case eDecimal: */
-        /*     case eHex: */
-        /*     case eOctal: */
-        /*     case eFloat: */
-        /*     case eExpFloat: */
-        /*     case eMajMinRel: */
-    case eIdent:
-    case eName:
-        /*     case ePeriod: */
-        /*     case eTilde: */
-        /*     case eMinus: */
-    case eFwdSlash:
-        /*     case eDblPeriod: */
-        /*     case eEllipses: */
-
-        rc = StringCopy (&symbol, &pb->t.str);
-        if (rc == 0)
-        {
-            pb->symbol = symbol;
-            rc = parse_name (pb);
-            free ((void*)symbol);
-        }
-        break;
+        pb->tokenText   = node->value.addr; 
+        pb->tokenLength = node->value.len;
+        pb->tokenId     = kfgVAR_REF;
     }
-    return rc;
+    KConfigNodeRelease(node);
+    return rc == 0;
 }
 
+static
+void CC report_error(KFGScanBlock* sb, const char* msg)
+{
+    pLogMsg(klogErr, "$(file):$(line):$(column): error: token='$(token)', msg='$(msg)'", 
+                     "file=%s,line=%d,column=%d,token=%.*s,msg=%s", 
+                     sb->file, 
+                     sb->lastToken->line_no, 
+                     sb->lastToken->column_no, 
+                     sb->lastToken->tokenLength, 
+                     sb->lastToken->tokenText, 
+                     msg);
+}
 
 /*
- * Set up the parameter block and start prasing lines
+ * Set up the parameter block and start parsing lines
  */
 static
-rc_t parse_file ( KConfig * self, KTokenSource * src )
+rc_t parse_file ( KConfig * self, const char* path, const char * src )
 {
-    parse_block pb;
+    KFGParseBlock pb;
+    KFGScanBlock sb;
     rc_t rc;
 
-    pb.self = self;
-    pb.tz = kPOSIXPathTokenizer;
-    pb.src = src;
-    memset (&pb.t, 0, sizeof pb.t);
-    pb.symbol = NULL;
-    pb.value = NULL;
-    do 
+    pb.tokenLength  = 0;
+    pb.line_no      = 0;
+    pb.column_no    = 0;
+
+    sb.self         = self;
+    sb.file         = path;
+    sb.write_nvp    = write_nvp;
+    sb.look_up_var  = look_up_var;
+    sb.report_error = report_error;
+
+    rc = KFGScan_yylex_init(&sb, src);
+    if (rc == 0)
     {
-        rc = parse_nvp (&pb);
-        if (rc)
-            break;
+        KFG_parse(&pb, &sb); /* may have reported parse errors into log, but we should have been able to extract enough data to proceed regardless */
+        KFGScan_yylex_destroy(&sb);
     }
-    while (pb.t.id != eEndOfInput);
+
     return rc;
 }
 
-
 /* LoadFile
  * loads a configuration file
  */
@@ -1274,9 +1265,52 @@ LIB_EXPORT rc_t CC KConfigLoadFile ( KConfig * self, const char * path, const KF
     else
     {
         const KMMap * mm;
+        bool entry_initialized = self -> initialized;
+        self -> initialized = false;
+
+        /* populate file-specific predefined nodes */
+#define UPDATE_NODES(dir, file)                             \
+        rc = update_node(self, "kfg/dir", dir, false );     \
+        if (rc == 0)                                        \
+            rc = update_node(self, "kfg/name", file, false )
 
-        if ( path == NULL || path [ 0 ] == 0 )
+        if ( path == NULL || path [ 0 ] == 0)
+        {
             path = "UNSPECIFIED";
+            UPDATE_NODES ( "", "" );
+        }
+        else
+        {
+            KDirectory* dir;
+            rc = KDirectoryNativeDir(&dir);
+            if (rc == 0 )
+            {
+                char buff [ 4096 ];
+                rc = KDirectoryResolvePath ( dir, true, buff, sizeof buff,
+                    "%.*s", string_size(path), path );
+                if ( rc == 0 )
+                {
+                    char* name = strrchr (buff, '/');
+                    if (name == NULL)
+                    {   /* no dir name */
+                        UPDATE_NODES("", buff);
+                    }
+                    else
+                    {
+                        *name=0; /* nul-terminate dir name; file name follows the 0 */
+                        UPDATE_NODES(buff, name+1);
+                    }
+                }
+                KDirectoryRelease ( dir );
+            }
+            else
+            {
+                update_node(self, "kfg/dir", "", false);
+                update_node(self, "kfg/name", "", false);
+            }
+        }
+#undef UPDATE_NODES
+
 
         rc = KMMapMakeRead ( & mm, file );
         if ( rc == 0 )
@@ -1288,96 +1322,414 @@ LIB_EXPORT rc_t CC KConfigLoadFile ( KConfig * self, const char * path, const KF
                 rc = KMMapSize ( mm, & size );
             if ( rc == 0 )
             {
-                String str;
-                String spath;
-                KTokenText tt;
-                KTokenSource src;
-
-                /* create a String from file path */
-                StringInitCString ( & spath, path );
-
-                /* create a String from file source */
-                StringInit ( & str, ptr, size, string_len ( ptr, size ) );
-
-                /* initialize token-text */
-                KTokenTextInit ( & tt, & str, & spath );
+                /* make a 0-terminated copy for parsing */
+                char* buf=malloc(size+1);
+                if (buf == 0)
+                {
+                    rc = RC ( rcKFG, rcMgr, rcLoading, rcMemory, rcExhausted );
+                }
+                else
+                {
+                    string_copy(buf, size+1, ptr, size);
+                    buf[size]=0;
 
-                /* initialize token source */
-                KTokenSourceInit ( & src, & tt );
+                    /* Parse the path to populate: */
+                    /* update_node(self, "kfg/dir", dir, false);*/
+                    /* update_node(self, "kfg/name", name, false);*/
 
-                /* parse config file */
-                parse_file ( self, & src );
+                    /* parse config file */
+                    rc = parse_file ( self, path, buf );
+                    free(buf);
+                }
             }
 
             KMMapRelease ( mm );
         }
+        self -> initialized = entry_initialized;
     }
 
     return rc;
 }
 
+
+typedef struct PrintBuff PrintBuff;
+struct PrintBuff
+{
+    KFile *f;
+    /* total bytes flushed to the file*/
+    size_t flushed;
+    /* total bytes in buffer */
+    size_t buffered;
+    
+    rc_t rc;
+    
+    /* buffer */
+    char buffer [ 32 * 1024 ];
+    
+};
+
+/* Init
+ *  initialize your structure    
+ */
 static
-rc_t make_include_path ( KConfigIncluded **p, const KDirectory *dir, const char *path, size_t sz )
+void PrintBuffInit ( PrintBuff *pb, KFile *f )
 {
-    char buff [ 4096 ];
-    rc_t rc = KDirectoryResolvePath ( dir, true, buff, sizeof buff, "%.*s", ( int ) sz, path );
-    if ( rc == 0 )
+    assert ( pb != NULL );
+    pb -> f = f;
+    pb -> flushed = 0;
+    pb -> buffered = 0;
+    pb -> rc = 0;
+}
+
+/* Flush
+ * Write buffer out to file
+ */
+static rc_t PrintBuffFlush ( PrintBuff *self )
+{
+    rc_t rc = 0;
+
+    assert ( self != NULL );
+    if ( self -> buffered != 0 )
     {
-        KConfigIncluded *include;
-        sz = strlen ( buff );
-        include = malloc ( sizeof * include + sz );
-        if ( include == NULL )
-            rc = RC ( rcKFG, rcMgr, rcLoading, rcMemory, rcExhausted );
-        else
+        size_t num_writ;
+        rc = KFileWriteAll ( self -> f, self -> flushed, self -> buffer, self -> buffered, & num_writ );
+        
+        if ( rc == 0 )
         {
-            string_copy ( include -> path, sz + sizeof include -> path, buff, sz );
-            * p = include;
-            return 0;
+            if ( num_writ != self -> buffered )
+                rc = RC ( rcKFG, rcBuffer, rcFlushing, rcTransfer, rcIncomplete );
+            else
+            {
+                self -> flushed += num_writ;
+                self -> buffered = 0;
+            }
         }
     }
-    * p = NULL;
-    return rc;
+    return self -> rc = rc;
 }
 
-
+/* Print
+ *  printf style writing to the buffer
+ */
 static
-bool load_from_file_path ( KConfig *self, const KDirectory *dir, const char *path, size_t sz )
+rc_t PrintBuffPrint ( PrintBuff *self, const char *fmt, ... )
 {
-    const KFile *cfg_file;
     rc_t rc;
-    
-    DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: try to load from file '%.*s'\n", (int)sz, path ) );
-    rc = KDirectoryOpenFileRead ( dir, & cfg_file, "%.*s", ( int ) sz, path );
+    size_t num_writ;
+    va_list args1, args2;
+
+    assert ( self != NULL );
+    assert ( fmt != NULL );
+    assert ( fmt [ 0 ] != 0 );
+
+    va_start ( args1, fmt );
+    va_copy ( args2, args1 );
+
+    rc = string_vprintf ( & self -> buffer [ self -> buffered ], 
+                          sizeof self -> buffer - self -> buffered, & num_writ, fmt, args1 );
     if ( rc == 0 )
+        self -> buffered += num_writ;
+    else if ( GetRCObject ( rc ) == rcBuffer && GetRCState ( rc ) == rcInsufficient )
     {
-        KConfigIncluded *include;
-        rc = make_include_path ( & include, dir, path, sz );
+        rc = PrintBuffFlush ( self );
         if ( rc == 0 )
         {
-            BSTNode *existing;
-            if ( BSTreeInsertUnique ( & self -> included, & include -> n, & existing, KConfigIncludedSort ) != 0 )
-                free ( include );
-            else
-            {
-                rc = KConfigLoadFile ( self, include -> path, cfg_file );
-                if ( rc != 0 )
-                {
-                    BSTreeUnlink ( & self -> included, & include -> n );
-                    free ( include );
-                }
-            }
+            rc = string_vprintf ( & self -> buffer [ self -> buffered ],
+                                  sizeof self -> buffer - self -> buffered, & num_writ, fmt, args2 );
+            if ( rc == 0 )
+                self -> buffered += num_writ;
         }
-
-        KFileRelease ( cfg_file );
     }
-    return ( rc == 0 ) ? true : false;
+
+    va_end ( args2 );
+    va_end ( args1 );
+
+    return self -> rc = rc;
+    
 }
 
-typedef struct scan_config_path_data scan_config_path_data;
-struct scan_config_path_data
+char ToHex(uint32_t i)
 {
-    KConfig *self;
-    bool loaded;
+    if (i <= 9)
+        return '0' + i;
+    return 'A' + (i - 10);
+}
+
+static
+rc_t CC PrintBuffPrintQuoted ( PrintBuff *self, const String* data )
+{
+    rc_t rc = PrintBuffPrint(self, "\"");
+    const char* str = (const char*)(data->addr);
+    uint32_t i;
+    for ( i = 0; i < StringLength(data); ++i )
+    {
+        if (rc != 0)
+            break;
+        if (str[i] < ' ')
+        {
+            rc = PrintBuffPrint(self, "\\x%c%c", ToHex(str[i]/16), ToHex(str[i]%16) );
+        }
+        else
+        {
+            switch (str[i])
+            {
+            case '"':
+                rc = PrintBuffPrint(self, "\\\"");
+                break;
+            default:
+                rc = PrintBuffPrint(self, "%c", str[i]);
+            }
+        }
+    }
+    if (rc == 0)
+        rc = PrintBuffPrint(self, "\"");
+    return rc;
+}
+
+static
+bool KConfigNodePrintPath ( KConfigNode *self, PrintBuff *pb )
+{
+    if ( self -> dad == NULL )
+        PrintBuffPrint ( pb, "%S", & self -> name );
+    else
+    {
+        if ( KConfigNodePrintPath ( self -> dad, pb ) )
+            return true;
+
+        PrintBuffPrint ( pb, "/%S", & self -> name );
+    }
+    return pb -> rc != 0;
+}
+
+static
+bool CC WriteDirtyNode ( BSTNode *n, void *data )
+{
+    KConfigNode *self = ( KConfigNode * ) n;
+    PrintBuff *pb = data;
+
+    if ( self -> dirty || ( self -> came_from != NULL && self -> came_from -> is_magic_file ) )
+    {
+        if ( KConfigNodePrintPath ( self, pb ) )
+            return true;
+
+        if ( PrintBuffPrint ( pb, " = " ) != 0 )
+            return true;
+            
+        if ( PrintBuffPrintQuoted ( pb, &self->value ) != 0 )
+            return true;
+            
+        if ( PrintBuffPrint ( pb, "\n" ) != 0 )
+            return true;
+    }
+
+    return BSTreeDoUntil ( & self -> children, false, WriteDirtyNode, pb );
+}
+
+static
+void CC UnsetDirtyNode ( BSTNode *n, void *data )
+{
+    KConfigNode *self = ( KConfigNode * ) n;
+
+    if ( self -> dirty )
+        self -> dirty = false;
+
+    BSTreeForEach ( & self -> children, false, UnsetDirtyNode, data );
+}
+
+static
+rc_t path_to_magic_file ( const KConfig *self, char *path, size_t buffer_size, size_t *path_size )
+{
+    const KConfigNode *node;
+    rc_t rc = KConfigOpenNodeRead ( self, & node, "NCBI_SETTINGS" );
+
+    if ( rc == 0 )
+    {
+        size_t num_read, remaining;
+        rc = KConfigNodeRead ( node, 0, path, buffer_size - 1, & num_read, & remaining );
+
+        if ( rc == 0 && remaining != 0 )
+           rc = RC ( rcKFG, rcNode, rcReading, rcBuffer, rcInsufficient );
+
+        path[num_read] = '\0';
+        
+        KConfigNodeRelease ( node );
+    }
+    return rc;
+}
+
+/* Commit
+ *  commits changes to user's private configuration file
+ */
+LIB_EXPORT rc_t CC KConfigCommit ( KConfig *self )
+{
+    rc_t rc;
+    size_t path_size;
+    char magic_file_path [ 4096 ];
+
+    if ( self == NULL )
+        return RC ( rcKFG, rcData, rcCommitting, rcSelf, rcNull );
+
+    /* Must only commit dirty nodes*/
+    if ( ! self -> dirty )
+        return 0;
+
+    rc = path_to_magic_file ( self, magic_file_path, sizeof magic_file_path, & path_size );
+    if ( rc == 0 )
+    {
+        char tmp_file_path [ 4096 ];
+        rc = string_printf ( tmp_file_path, sizeof tmp_file_path, NULL, "%s.tmp", magic_file_path );
+        if ( rc == 0 )
+        {
+            KDirectory *dir;        
+            
+            /* get current directory */
+            rc = KDirectoryNativeDir ( & dir );
+            if ( rc == 0 )
+            {
+                KFile *tmp;
+
+                /* create temp magic file */
+                rc = KDirectoryCreateFile ( dir, & tmp, false, 0600, kcmInit | kcmParents, tmp_file_path );
+
+                if ( rc == 0 )
+                {
+                    PrintBuff pb;
+                    PrintBuffInit ( & pb, tmp );
+
+                    /* issue warning */
+                    rc = PrintBuffPrint ( & pb, "## auto-generated configuration file - DO NOT EDIT ##\n\n" );
+                    if ( rc == 0 )
+                    {
+                        /* flush nodes to file */
+                        if ( BSTreeDoUntil ( & self -> tree, false, WriteDirtyNode, & pb ) )
+                            /* failure */
+                            rc = pb . rc;
+                        else 
+                            rc = PrintBuffFlush ( & pb );
+                    }
+                        
+                    KFileRelease ( tmp );
+                        
+                    if ( rc == 0 )
+                    {
+                        /* Rename file */
+                        rc = KDirectoryRename ( dir, true, tmp_file_path, magic_file_path  );
+                        if ( rc == 0 )
+                        {
+                            /* clear dirty flags */
+                            BSTreeForEach (  & self -> tree, false, UnsetDirtyNode, & pb);
+                                
+                            self -> dirty = false;
+                        }
+                    }
+                        
+                    if ( rc != 0 )
+                        KDirectoryRemove ( dir, true, tmp_file_path );
+                }
+            
+                /* release dir */
+                KDirectoryRelease ( dir );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static
+rc_t record_magic_path ( KConfig *self, const KDirectory *dir, const char *path, size_t sz )
+{
+    char buff [ 4096 ];
+    rc_t rc = KDirectoryResolvePath ( dir, true, buff, sizeof buff, "%.*s", ( int ) sz, path );
+    if ( rc == 0 )
+    {
+        char *magic_file_path;
+        sz = string_size ( buff );
+        magic_file_path = malloc ( sz + 1 );
+        if ( magic_file_path == NULL )
+            rc = RC ( rcKFG, rcMgr, rcLoading, rcMemory, rcExhausted );
+        else
+        {
+            free ( (void*) self -> magic_file_path );
+            self -> magic_file_path = magic_file_path;
+            self -> magic_file_path_size = sz;
+            memcpy ( magic_file_path, buff, sz + 1 );
+        }
+    }
+
+    return rc;
+}
+
+
+static
+rc_t make_include_path ( KConfigIncluded **p, const KDirectory *dir, const char *path, size_t sz, bool is_magic )
+{
+    char buff [ 4096 ];
+    rc_t rc = KDirectoryResolvePath ( dir, true, buff, sizeof buff, "%.*s", ( int ) sz, path );
+    if ( rc == 0 )
+    {
+        KConfigIncluded *include;
+        sz = string_size ( buff );
+        include = malloc ( sizeof * include + sz );
+        if ( include == NULL )
+            rc = RC ( rcKFG, rcMgr, rcLoading, rcMemory, rcExhausted );
+        else
+        {
+            include -> is_magic_file = is_magic;
+            string_copy ( include -> path, sz + sizeof include -> path, buff, sz );
+            * p = include;
+            return 0;
+        }
+    }
+    * p = NULL;
+    return rc;
+}
+
+
+static
+bool load_from_file_path ( KConfig *self, const KDirectory *dir, const char *path, size_t sz, bool is_magic )
+{
+    rc_t rc;
+    const KFile *cfg_file;
+
+    /* record magic file path, regardless of whether it exists as a file */
+    if ( is_magic )
+        record_magic_path ( self, dir, path, sz );
+    
+    DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: try to load from file '%.*s'\n", (int)sz, path ) );
+    rc = KDirectoryOpenFileRead ( dir, & cfg_file, "%.*s", ( int ) sz, path );
+    if ( rc == 0 )
+    {
+        KConfigIncluded *include;
+        rc = make_include_path ( & include, dir, path, sz, is_magic );
+        if ( rc == 0 )
+        {
+            BSTNode *existing;
+            if ( BSTreeInsertUnique ( & self -> included, & include -> n, & existing, KConfigIncludedSort ) != 0 )
+                free ( include );
+            else
+            {
+                self -> current_file = include;
+                rc = KConfigLoadFile ( self, include -> path, cfg_file );
+                self -> current_file = NULL;
+                if ( rc != 0 )
+                {
+                    BSTreeUnlink ( & self -> included, & include -> n );
+                    free ( include );
+                }
+            }
+        }
+
+        KFileRelease ( cfg_file );
+    }
+    return ( rc == 0 ) ? true : false;
+}
+
+typedef struct scan_config_path_data scan_config_path_data;
+struct scan_config_path_data
+{
+    KConfig *self;
+    bool loaded;
 };
 
 static
@@ -1389,9 +1741,10 @@ rc_t CC scan_config_path ( const KDirectory *dir, uint32_t type, const char *nam
     case kptFile:
     case kptFile | kptAlias:
     {
-        size_t sz = strlen ( name );
+        size_t sz = string_size ( name );
         if ( sz >= 5 && strcase_cmp ( & name [ sz - 4 ], 4, ".kfg", 4, 4 ) == 0 )
-            pb -> loaded |= load_from_file_path ( pb -> self, dir, name, sz );
+            pb -> loaded |= load_from_file_path ( pb -> self, dir, name, sz, false );
+
         break;
     }}
 
@@ -1416,7 +1769,7 @@ bool load_from_dir_path ( KConfig *self, const KDirectory *dir, const char *path
 {
     bool loaded = false;
     const KDirectory *cfg_dir;
-    rc_t rc = KDirectoryOpenDirRead ( dir, & cfg_dir, false, "%.*s", ( int ) sz, path );
+    rc_t rc = KDirectoryOpenDirRead ( dir, & cfg_dir, false, "%.*s", ( uint32_t ) sz, path );
     if ( rc == 0 )
     {
         DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: try to load from directory '%.*s'\n", (int)sz, path ) );
@@ -1437,7 +1790,7 @@ bool load_from_path ( KConfig *self, const KDirectory * dir, const char *path, s
         switch ( KDirectoryPathType ( dir, "%.*s", ( int ) sz, path ) & ~ kptAlias )
         {
         case kptFile:
-            loaded = load_from_file_path ( self, dir, path, sz );
+            loaded = load_from_file_path ( self, dir, path, sz, false );
             break;
         case kptDir:
             loaded = load_from_dir_path ( self, dir, path, sz );
@@ -1451,7 +1804,7 @@ static
 bool load_from_path_list ( KConfig *self, const KDirectory *dir, const char *path )
 {
     bool loaded = false;
-    const char *end = path + strlen ( path );
+    const char *end = path + string_size ( path );
     while ( path < end )
     {
         const char *sep = string_chr ( path, end - path, ':' );
@@ -1482,9 +1835,9 @@ bool load_from_env_variable ( KConfig *self, const KDirectory *dir )
         DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: try to load from env. var '%s'\n", env_list[ i ] ) );
         if ( eval != NULL && eval [ 0 ] != 0 )
         {
+            rc_t rc = 0;
             DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: try to load from env. var '%s'\n", eval ) );
-            G_load_path
-                = append_to_load_path(G_load_path, &G_load_path_sz_tmp, eval);
+            rc = KConfigAppendToLoadPath(self, eval);
             loaded = load_from_path_list ( self, dir, eval );
             if ( loaded )
                 DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: found from env. var '%s'\n", eval ) );
@@ -1499,17 +1852,23 @@ bool load_from_std_location ( KConfig *self, const KDirectory *dir )
 {
     const char * std_locs [] =
     {
-        "/etc/ncbi"
+#if ! WINDOWS
+        "/etc/ncbi",
+#else
+        "/c/ncbi",
+#endif
     };
-    
+
+    rc_t rc = 0;
+
     int i;
     bool loaded = false;
     for ( i = 0; ! loaded && i < sizeof std_locs / sizeof std_locs [ 0 ]; ++ i )
     {
         DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: try to load from std. location '%s'\n", std_locs[ i ] ) );
-        G_load_path = append_to_load_path
-            (G_load_path, &G_load_path_sz_tmp, std_locs [ i ]);
-        loaded = load_from_path ( self, dir, std_locs [ i ], strlen ( std_locs [ i ] ) );
+        rc = KConfigAppendToLoadPath(self, std_locs [ i ]);
+        loaded = load_from_path ( self, dir,
+            std_locs [ i ], string_size ( std_locs [ i ] ));
     }
     if ( loaded )
         DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: found from std. location\n" ) );
@@ -1517,7 +1876,7 @@ bool load_from_std_location ( KConfig *self, const KDirectory *dir )
 }
 
 static
-void load_from_fs_location ( KConfig *self )
+rc_t load_from_fs_location ( KConfig *self )
 {
     KDyld *dyld;
     rc_t rc = KDyldMake ( & dyld );
@@ -1534,8 +1893,7 @@ void load_from_fs_location ( KConfig *self )
             if (KDirectoryResolvePath
                     (dir, true, resolved, sizeof resolved, "ncbi") == 0)
             {
-                G_load_path = append_to_load_path
-                    (G_load_path, &G_load_path_sz_tmp, resolved);
+                rc = KConfigAppendToLoadPath(self, resolved);
             }
             if ( load_from_dir_path ( self, dir, "ncbi", 4 ) )
                 DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: found from dyn. loader\n" ) );
@@ -1543,6 +1901,7 @@ void load_from_fs_location ( KConfig *self )
         }
         KDyldRelease ( dyld );
     }
+    return rc;
 }
 
 LIB_EXPORT rc_t CC KConfigGetLoadPath ( const KConfig *self,
@@ -1556,10 +1915,56 @@ LIB_EXPORT rc_t CC KConfigGetLoadPath ( const KConfig *self,
         return RC ( rcKFG, rcPath, rcListing, rcParam, rcNull );
     }
 
-    *path = G_load_path;
+    *path = self->load_path;
     return 0;
 }
 
+
+static
+bool load_from_home(KConfig *self, const KDirectory *dir)
+{
+    const char *home = getenv("HOME");
+    DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: checking HOME\n" ) );
+
+    if (home == NULL) {
+        home = getenv("USERPROFILE");
+    }
+
+    if (home != NULL)
+    {
+        bool loaded;
+        size_t num_writ, path_size;
+        char path[PATH_MAX];
+        rc_t rc = string_printf(path, sizeof path, &num_writ, "%s/.ncbi", home);
+        if (rc != 0)
+            return false;
+
+        assert(num_writ < sizeof path);
+        
+        loaded = load_from_path ( self, dir, path, num_writ );
+        if ( loaded )
+        {
+            DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG),
+                ( "KFG: found from '%s'\n", path ) );
+        }
+
+        path_size = num_writ;
+        rc = string_printf ( & path [ path_size ], sizeof path - path_size, & num_writ, "/%s", MAGIC_LEAF_NAME );
+        if ( rc == 0 )
+        {
+            if ( load_from_file_path ( self, dir, path, path_size + num_writ, true ) )
+                loaded = true;
+        }
+        return loaded;
+    }
+    else {
+        DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG),
+            ( "KFG: none of env{HOME}, env{USERPROFILE} is defined\n" ) );
+    }
+
+    return false;
+}
+
 static
 void load_config_files ( KConfig *self, const KDirectory *dir )
 {
@@ -1571,11 +1976,16 @@ void load_config_files ( KConfig *self, const KDirectory *dir )
     if ( dir != NULL )
     {
         DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: try load from supplied directory\n" ) );
-        if ( scan_config_dir ( self, dir ) )
-        {
+
+        loaded = scan_config_dir ( self, dir );
+        if ( loaded )
             DBGMSG( DBG_KFG, DBG_FLAG(DBG_KFG), ( "KFG: found from supplied directory\n" ) );
+
+        if ( load_from_file_path ( self, dir, MAGIC_LEAF_NAME, sizeof MAGIC_LEAF_NAME - 1, true ) )
+            loaded = true;
+
+        if ( loaded )
             return;
-        }
     }
 
     /* open up the native directory */
@@ -1595,74 +2005,251 @@ void load_config_files ( KConfig *self, const KDirectory *dir )
     if ( ! loaded )
         load_from_fs_location ( self );
 
+    if ( ! s_disable_user_settings )
+        loaded |= load_from_home ( self, wd );
+
     KDirectoryRelease ( wd );
 
-    if (G_load_path) {
+    if (self->load_path) {
         char* tmp = NULL;
-        G_load_path_sz_tmp = strlen(G_load_path) + 1;
-        tmp = realloc(G_load_path, G_load_path_sz_tmp);
+        self->load_path_sz_tmp = string_size(self->load_path) + 1;
+        tmp = realloc(self->load_path, self->load_path_sz_tmp);
         if (tmp) {
-            G_load_path = tmp;
+            self->load_path = tmp;
         }
     }
 }
 
-
-/* Make
- *  create a process-global configuration manager
- *
- *  "cfg" [ OUT ] - return parameter for mgr
- */
-LIB_EXPORT rc_t CC KConfigMake ( KConfig **cfg, const KDirectory * cfgdir )
+static
+void add_predefined_nodes ( KConfig * self, const char *appname )
 {
-    rc_t rc;
-    if ( cfg == NULL )
-        rc = RC ( rcKFG, rcMgr, rcCreating, rcParam, rcNull );
-    else
+    size_t bytes;
+    char buf [ 4096 ];
+    const char *value;
+
+    KDirectory *cwd;
+    const KDirectory *dir;
+
+#if ! WINDOWS
+    struct utsname name;
+#endif
+
+    /* Path to libkfg.so */
+    KDyld *dyld;
+    rc_t rc = KDyldMake ( & dyld );
+    if ( rc == 0 )
     {
-        KConfig *mgr = G_kfg;
-        if ( mgr != NULL )      /* if already made, just attach */
+        rc = KDyldHomeDirectory ( dyld, & dir, ( fptr_t ) KConfigMake );
+        if ( rc == 0 )
         {
-            KConfigAddRef ( mgr );
-            * cfg = mgr;
-            return 0;
+            KDirectoryResolvePath ( dir, true, buf, sizeof buf, "." );
+            KDirectoryRelease ( dir );
         }
+        KDyldRelease ( dyld );
+    }
+    update_node ( self, "vdb/lib/paths/kfg", rc == 0 ? buf : "", true );
 
-        mgr = malloc ( sizeof * mgr );
-        if ( mgr == NULL )
-            rc = RC ( rcKFG, rcMgr, rcCreating, rcMemory, rcExhausted );
-        else
-        {
-            KConfigNode * root;
+    /* Architecture */ 
+#if ! WINDOWS
+    if (uname(&name) >= 0)
+        update_node(self, "kfg/arch/name", name.nodename, true);
+    else
+#endif
+        update_node ( self, "kfg/arch/name", "", true);
+
+    string_printf(buf, sizeof(buf), &bytes, "%u", _ARCH_BITS);
+    update_node ( self, "kfg/arch/bits", buf, true );
+
+    /* *OS */
+#if LINUX
+    #define OS "linux"
+#elif MAC 
+    #define OS "mac"
+#elif WINDOWS
+    #define OS "win"
+#elif SUN
+    #define OS "sun"
+#else
+    #error unrecognized OS
+#endif
+    update_node ( self, "OS", OS, true );
+#undef OS
 
-            String slash;
-            CONST_STRING ( & slash, "/" );
+    /* BUILD_LINKAGE */
+#if _STATIC
+    #define BUILD_LINKAGE "STATIC"
+#else
+    #define BUILD_LINKAGE "DYNAMIC"
+#endif
+    update_node ( self, "BUILD_LINKAGE", BUILD_LINKAGE, true );
+#undef BUILD_LINKAGE
+
+    /* BUILD */
+#if _PROFILING
+    #define BUILD "PROFILE"
+#elif _DEBUGGING
+    #define BUILD "DEBUG"
+#else 
+    #define BUILD "RELEASE"
+#endif
+    update_node(self, "BUILD", BUILD, true );
+#undef BUILD
 
-            rc = KConfigNodeMake ( & root, & slash );
-            if ( rc == 0 )
-            {
-                KConfigInit ( mgr, root );
+    cwd = NULL;
 
-                load_config_files ( mgr, cfgdir );
+    /* PWD */
+    rc = KDirectoryNativeDir ( & cwd );
+    if ( rc == 0 )
+        rc = KDirectoryResolvePath ( cwd, true, buf, sizeof buf, "." );
+    update_node(self, "PWD", rc == 0 ? buf : "", true );
 
-                G_kfg = mgr;
-                * cfg = mgr;
-                return 0;
-            }
+    /* APPPATH */
+    if ( appname != NULL && rc == 0 )
+    {
+        bytes = string_size ( appname );
+        value = string_rchr ( appname, bytes, '/' );
+        if ( value == NULL )
+            value = string_rchr ( appname, bytes, '\\' );
+        if ( value != NULL )
+            bytes = appname + bytes - value;
+        rc = KDirectoryResolvePath ( cwd, true, buf, sizeof buf, "%s", appname);
+        if ( rc == 0 && bytes != 0 )
+            buf [ string_size(buf) - bytes ] = 0;    
+        update_node(self, "APPPATH", rc == 0 ? buf : "", true );
+    }
 
-            KConfigWhack ( mgr );
+    /* APPNAME */
+    rc = LogAppName(buf, sizeof(buf), &bytes);
+    if ( rc == 0 )
+        buf [ bytes ] = 0;
+    update_node(self, "APPNAME", rc == 0 ? buf : "", true );
+
+    /* Environment variables */
+    /* some of the variables may be undefined, create nodes with empty values for them */
+#define DEFINE_ENV(name)                                         \
+    value=getenv(name);                                          \
+    update_node(self, name, value == NULL ? "" : value, true )
+
+    DEFINE_ENV("HOST");
+    DEFINE_ENV("USER");
+    value = getenv("HOME");
+    if (value == NULL) 
+    {   /* apparently on Windows, use USERPROFILE */
+        value = getenv("USERPROFILE");
+    }
+    if (value == NULL)
+    {
+        update_node(self, "HOME", "", true );
+        update_node(self, "NCBI_HOME", "", false );
+        update_node(self, "NCBI_SETTINGS", "", false );
+    }
+    else
+    {
+        rc = KDirectoryResolvePath(cwd, true, buf, sizeof(buf), value);
+        if (rc == 0)
+        {
+            size_t bytes2;
+            char buf2 [ 4096 ];
+        
+            update_node(self, "HOME", buf, true );
+            
+            string_printf(buf2, sizeof(buf2), &bytes2, "%s/.ncbi", buf);
+            update_node(self, "NCBI_HOME", buf2, false );    /* can be overridden by the user */ 
+            
+            string_printf(buf2, sizeof(buf2), &bytes2, "%s/.ncbi/%s", buf, MAGIC_LEAF_NAME);
+            update_node(self, "NCBI_SETTINGS", buf2, false );    /* can be overridden by the user */ 
         }
-
-        * cfg = NULL;
+        else
+            LOGERR (klogErr, rc, "Unable to create a config item for $HOME");
     }
 
-    return rc;
+    DEFINE_ENV("VDB_ROOT");
+    DEFINE_ENV("VDB_CONFIG");
+#undef DEFINE_ENV
+
+    KDirectoryRelease ( cwd );
 }
 
-/*--------------------------------------------------------------------------
- * KNamelist
- */
-typedef struct KfgConfigNamelist KfgConfigNamelist;
+static
+rc_t KConfigFill ( KConfig * self, const KDirectory * cfgdir, const char *appname, bool local)
+{
+    KConfigNode * root;
+    String empty;
+    rc_t rc;
+
+    CONST_STRING ( & empty, "" );
+
+    rc = KConfigNodeMake ( & root, & empty );
+    if (rc == 0)
+    {
+        KConfigInit ( self, root );
+        add_predefined_nodes ( self, appname );
+        load_config_files ( self, cfgdir );
+    }
+    return rc;
+}
+
+
+extern rc_t ReportKfg ( const ReportFuncs *f, uint32_t indent );
+
+/* "cfg" [ OUT ] - return parameter for mgr
+   if ("local" == true) do not initialize G_kfg */
+static
+rc_t KConfigMakeImpl ( KConfig **cfg, const KDirectory * cfgdir, bool local )
+{
+    rc_t rc;
+    const char *appname = NULL;
+
+    static bool latch;
+    if ( ! latch )
+    {
+        appname = ReportInitConfig ( ReportKfg );
+        latch = true;
+    }
+
+    if ( cfg == NULL )
+        rc = RC ( rcKFG, rcMgr, rcCreating, rcParam, rcNull );
+    else
+    {
+        KConfig *mgr = calloc ( 1, sizeof * mgr );
+        if ( mgr == NULL )
+            rc = RC ( rcKFG, rcMgr, rcCreating, rcMemory, rcExhausted );
+        else
+        {
+            rc = KConfigFill (mgr, cfgdir, appname, local);
+
+            mgr -> initialized = true;
+            if ( rc == 0 )
+            {
+                * cfg = mgr;
+                return 0;
+            }
+
+            KConfigWhack ( mgr );
+        }
+
+        * cfg = NULL;
+    }
+
+    return rc;
+}
+
+/* call KConfigMake; do not initialize G_kfg */
+LIB_EXPORT rc_t CC KConfigMakeLocal ( KConfig **cfg, const KDirectory * cfgdir )
+{   return KConfigMakeImpl(cfg, cfgdir, true); }
+
+/* Make
+ *  create a process-global configuration manager
+ *
+ *  "cfg" [ OUT ] - return parameter for mgr
+ */
+LIB_EXPORT rc_t CC KConfigMake ( KConfig **cfg, const KDirectory * cfgdir )
+{   return KConfigMakeImpl(cfg, cfgdir, false); }
+
+/*--------------------------------------------------------------------------
+ * KNamelist
+ */
+typedef struct KfgConfigNamelist KfgConfigNamelist;
 struct KfgConfigNamelist
 {
     KNamelist dad;
@@ -1758,10 +2345,10 @@ void CC KConfigNodeGrabName ( BSTNode *n, void *data )
         = ( ( const KConfigNode* ) n ) -> name . addr;
 }
 
-/* ListChild
+/* ListChildren
  *  list all named children
  */
-LIB_EXPORT rc_t CC KConfigNodeListChild ( const KConfigNode *self,
+LIB_EXPORT rc_t CC KConfigNodeListChildren ( const KConfigNode *self,
     KNamelist **names )
 {
     if ( names == NULL )
@@ -1823,3 +2410,941 @@ LIB_EXPORT rc_t CC KConfigListIncluded ( const KConfig *self,
 
     return RC ( rcKFG, rcMgr, rcListing, rcSelf, rcNull );
 }
+
+/************** Internal node-reading helpers *************/
+
+/* ReadNodeValueFixed
+ * copy the node's value into the caller's fixed size buffer and 0-terminate
+ */
+static rc_t ReadNodeValueFixed ( const KConfigNode* self, char *buf, size_t bsize )
+{
+    size_t num_read, remaining;
+    rc_t rc = KConfigNodeRead ( self, 0, buf, bsize - 1, &num_read, &remaining);
+    if (rc == 0)
+    {
+        if (remaining != 0)
+            rc = RC ( rcKFG, rcNode, rcReading, rcBuffer, rcInsufficient );
+        else
+            buf[num_read] = '\0';
+    }        
+    return rc;
+}
+
+/**********************************************************/
+ 
+/* ReadBool
+ *  read a boolean node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (true if "TRUE", false if "FALSE"; rc != 0 if neither)
+ *
+ */
+LIB_EXPORT rc_t CC KConfigNodeReadBool ( const KConfigNode *self, bool *result )
+{
+    rc_t rc;
+
+    if ( result == NULL )
+        rc = RC ( rcKFG, rcNode, rcReading, rcParam, rcNull );
+    else
+    {
+        * result = false;
+
+        if ( self == NULL )
+            rc = RC ( rcKFG, rcNode, rcReading, rcSelf, rcNull );
+        else
+        {
+            char buf [ 6 ];
+            rc = ReadNodeValueFixed ( self, buf, sizeof buf );
+            if ( rc == 0 )
+            {
+                switch ( tolower ( buf [ 0 ] ) )
+                {
+                case 'f':
+                    if ( buf [ 1 ] == 0 )
+                        return 0;
+                    if ( strncasecmp ( buf, "false", sizeof buf ) == 0 )
+                        return 0;
+                    break;
+
+                case 'n':
+                    if ( buf [ 1 ] == 0 )
+                        return 0;
+                    if ( strncasecmp ( buf, "no", sizeof buf ) == 0 )
+                        return 0;
+                    break;
+
+                case 't':
+                    * result = true;
+                    if ( buf [ 1 ] == 0 )
+                        return 0;
+                    if ( strncasecmp ( buf, "true", sizeof buf ) == 0 )
+                        return 0;
+                    break;
+
+                case 'y':
+                    * result = true;
+                    if ( buf [ 1 ] == 0 )
+                        return 0;
+                    if ( strncasecmp ( buf, "yes", sizeof buf ) == 0 )
+                        return 0;
+                    break;
+                }
+
+                * result = false;
+                rc = RC ( rcKFG, rcNode, rcReading, rcFormat, rcIncorrect );
+            }
+        }
+    }
+
+    return rc;
+}
+
+/* ReadI64
+ *  read an integer node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+LIB_EXPORT rc_t CC KConfigNodeReadI64 ( const KConfigNode *self, int64_t *result )
+{
+    rc_t rc;
+
+    if ( result == NULL )
+        rc = RC ( rcKFG, rcNode, rcReading, rcParam, rcNull );
+    else
+    {
+        * result = 0;
+
+        if ( self == NULL )
+            rc = RC ( rcKFG, rcNode, rcReading, rcSelf, rcNull );
+        else
+        {
+            /* allow for leading zeros */
+            char buf [ 256 ];
+    
+            rc = ReadNodeValueFixed(self, buf, sizeof(buf));
+            if (rc == 0)
+            {
+                char* endptr;
+                int64_t res = strtoi64(buf, &endptr, 0);
+                if ( *endptr == '\0' )
+                    *result = res;
+                else
+                    rc = RC(rcKFG, rcNode, rcReading, rcFormat, rcIncorrect);
+            }
+        }
+    }
+    return rc;
+}
+
+/* ReadU64
+ *  read an unsiged node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+LIB_EXPORT rc_t CC KConfigNodeReadU64 ( const KConfigNode *self, uint64_t* result )
+{
+    rc_t rc;
+
+    if ( result == NULL )
+        rc = RC ( rcKFG, rcNode, rcReading, rcParam, rcNull );
+    else
+    {
+        * result = 0;
+
+        if ( self == NULL )
+            rc = RC ( rcKFG, rcNode, rcReading, rcSelf, rcNull );
+        else
+        {
+            /* allow for leading zeros */
+            char buf [ 256 ];
+    
+            rc = ReadNodeValueFixed(self, buf, sizeof(buf));
+            if (rc == 0)
+            {
+                char* endptr;
+                int64_t res = strtou64(buf, &endptr, 0);
+                if ( *endptr == '\0' )
+                    *result = res;
+                else
+                    rc = RC(rcKFG, rcNode, rcReading, rcFormat, rcIncorrect);
+            }
+        }
+    }
+    return rc;
+}
+
+/* ReadF64
+ *  read a floating point node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+LIB_EXPORT rc_t CC KConfigNodeReadF64( const KConfigNode *self, double* result )
+{
+    rc_t rc;
+
+    if ( result == NULL )
+        rc = RC ( rcKFG, rcNode, rcReading, rcParam, rcNull );
+    else
+    {
+        * result = 0.0;
+
+        if ( self == NULL )
+            rc = RC ( rcKFG, rcNode, rcReading, rcSelf, rcNull );
+        else
+        {
+            /* allow for leading zeros, trailing digits */
+            char buf [ 256 ];
+
+            rc = ReadNodeValueFixed(self, buf, sizeof(buf));
+            if (rc == 0)
+            {
+                char* endptr;
+                double res = strtod(buf, &endptr);
+                if ( *endptr == '\0' )
+                    *result = res;
+                else
+                    rc = RC(rcKFG, rcNode, rcReading, rcFormat, rcIncorrect);
+            }
+        }
+    }
+    return rc;
+}
+
+#if 0
+/*** NB - code needs to be located in VFS ***/
+/* ReadNodeValueFixed
+ * Allocate a character buffer of sufficient size, copy the node's value into it, 0-terminate. Caller deallocates.
+ */
+static rc_t ReadNodeValueVariable( const KConfigNode* self, char** buf )
+{
+    size_t num_read, to_read;
+    /* first we ask about the size to be read */
+    rc_t rc = KConfigNodeRead ( self, 0, NULL, 0, &num_read, &to_read );
+    if ( rc == 0 )
+    {
+        char* value = malloc( to_read + 1 );
+        if ( value )
+        {
+            rc = ReadNodeValueFixed( self, value, to_read + 1 );
+            if ( rc == 0 )
+                *buf = value;
+            else
+                free (value);
+        }
+        else
+            rc = RC( rcKFG, rcNode, rcReading, rcMemory, rcExhausted );
+    }   
+    return rc;
+}
+
+/* ReadFloat
+ *  read a VPath node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+LIB_EXPORT rc_t CC KConfigNodeReadVPath ( const KConfigNode *self, struct VPath** result )
+{
+    rc_t rc;
+
+    if ( result == NULL )
+        rc = RC ( rcKFG, rcNode, rcReading, rcParam, rcNull );
+    else
+    {
+        * result = NULL;
+
+        if ( self == NULL )
+            rc = RC ( rcKFG, rcNode, rcReading, rcSelf, rcNull );
+        else
+        {
+            char* buf;
+            rc = ReadNodeValueVariable ( self, &buf );
+            if ( rc == 0)
+            {
+                rc = VPathMake(result, buf);
+                free(buf);
+            }
+        }
+    }
+    return rc;
+}
+#endif
+
+/* ReadString
+ *  read a String node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+LIB_EXPORT rc_t CC KConfigNodeReadString ( const KConfigNode *self, String** result )
+{
+    rc_t rc;
+
+    if ( result == NULL )
+        rc = RC ( rcKFG, rcNode, rcReading, rcParam, rcNull );
+    else
+    {
+        * result = NULL;
+
+        if ( self == NULL )
+            rc = RC ( rcKFG, rcNode, rcReading, rcSelf, rcNull );
+        else
+        {
+            size_t num_read, to_read;
+
+            /* first we ask about the size to be read */
+            rc = KConfigNodeRead ( self, 0, NULL, 0, &num_read, &to_read );
+            if ( rc == 0 )
+            {
+                String *value = malloc ( sizeof * value + to_read + 1 );
+                if ( value == NULL )
+                    rc = RC( rcKFG, rcNode, rcReading, rcMemory, rcExhausted );
+                else
+                {
+                    /* TBD - this is broken for non-ascii strings
+                       much better to be WITHIN the config.c implementation
+                       and reach into the node value directly! */
+                    StringInit ( value, (char*)( value + 1 ), to_read, to_read + 1 );
+                    rc = ReadNodeValueFixed(self, (char*)value->addr, to_read + 1);
+                    if ( rc == 0 )
+                        *result = value;
+                    else
+                    {
+                        rc = RC(rcKFG, rcNode, rcReading, rcFormat, rcIncorrect);
+                        free ( value );
+                    }
+                }
+            }
+        }
+    }    
+    return rc;
+}
+
+/* this macro wraps a call to KConfigNodeGetXXX in a node-accessing
+   code to implement the corresponding KConfigGetXXX function */
+#define NODE_TO_CONFIG_ACCESSOR(fn) \
+    const KConfigNode* node;                                \
+    rc_t rc = KConfigOpenNodeRead ( self, &node, path );    \
+    if ( rc == 0)                                           \
+    {                                                       \
+        rc_t rc2;                                           \
+        rc = fn(node, result);                              \
+        rc2 = KConfigNodeRelease(node);                     \
+        if (rc == 0)                                        \
+            rc = rc2;                                       \
+    }                                                       \
+    return rc;                                              
+    
+/* THESE FUNCTIONS ARE PROTECTED AGAINST BAD "self" AND "path"
+   BY KConfigOpenNodeRead, BUT THE CONVERSION FUNCTIONS ARE NOT */
+LIB_EXPORT rc_t CC KConfigReadBool ( const KConfig* self, const char* path, bool* result )
+{
+    NODE_TO_CONFIG_ACCESSOR(KConfigNodeReadBool);
+}    
+LIB_EXPORT rc_t CC KConfigReadI64 ( const KConfig* self, const char* path, int64_t* result )
+{
+    NODE_TO_CONFIG_ACCESSOR(KConfigNodeReadI64);
+}
+LIB_EXPORT rc_t CC KConfigReadU64 ( const KConfig* self, const char* path, uint64_t* result )
+{
+    NODE_TO_CONFIG_ACCESSOR(KConfigNodeReadU64);
+}
+LIB_EXPORT rc_t CC KConfigReadF64 ( const KConfig* self, const char* path, double* result )
+{
+    NODE_TO_CONFIG_ACCESSOR(KConfigNodeReadF64);
+}
+#if 0
+LIB_EXPORT rc_t CC KConfigReadVPath ( const KConfig* self, const char* path, struct VPath** result )
+{
+    NODE_TO_CONFIG_ACCESSOR(KConfigNodeReadVPath);
+}
+#endif
+LIB_EXPORT rc_t CC KConfigReadString ( const KConfig* self, const char* path, struct String** result )
+{
+    NODE_TO_CONFIG_ACCESSOR(KConfigNodeReadString);
+}
+
+#define DISP_RC(rc, msg) (void)((rc == 0) ? 0 : LOGERR(klogInt, rc, msg))
+#define DISP_RC2(rc, name, msg) (void)((rc == 0) ? 0 : \
+    PLOGERR(klogInt, (klogInt, rc, \
+        "$(name): $(msg)", "name=%s,msg=%s", name, msg)))
+
+static rc_t KConfigNodeReadData(const KConfigNode* self,
+    char* buf, size_t blen, size_t* num_read)
+{
+    rc_t rc = 0;
+    size_t remaining = 0;
+
+    assert(buf && blen && num_read);
+
+    rc = KConfigNodeRead(self, 0, buf, blen, num_read, &remaining);
+
+    assert(remaining == 0); /* TODO overflow check */
+    assert(*num_read <= blen);
+
+    return rc;
+}
+
+static rc_t printIndent(int indent) {
+    rc_t rc = 0;
+
+    int i = 0;
+    for (i = 0; i < indent * 2; ++i) {
+        rc_t rc2 = OUTMSG((" "));
+        if (rc == 0 && rc2 != 0) {
+            rc = rc2;
+        }
+    }
+
+    return rc;
+}
+
+static
+rc_t KConfigNodePrint(const KConfigNode* self,
+    int indent, const char* root)
+{
+    rc_t rc = 0;
+    KNamelist* names = NULL;
+    uint32_t count = 0;
+    uint32_t i = 0;
+    char data[512] = "";
+    size_t num_data = 0;
+    assert(self);
+
+    printIndent(indent);
+    OUTMSG(("<%s>", root));
+
+    if (rc == 0) {
+        rc_t rc = KConfigNodeReadData(self, data, sizeof data, &num_data);
+        DISP_RC2(rc, "KConfigNodeReadData()", root);
+        if (rc == 0 && num_data > 0) {
+            OUTMSG(("%.*s", (int)num_data, data));
+        }
+    }
+
+    if (rc == 0) {
+        rc = KConfigNodeListChild(self, &names);
+        DISP_RC2(rc, "KConfigNodeListChild()", root);
+    }
+    if (rc == 0) {
+        rc = KNamelistCount(names, &count);
+        DISP_RC2(rc, "KNamelistCount()", root);
+    }
+
+
+    if (rc == 0) {
+        if (count > 0) {
+            OUTMSG(("\n"));
+        }
+        for (i = 0; i < count; ++i) {
+            const char* name = NULL;
+            const KConfigNode* node = NULL;
+            if (rc == 0) {
+                rc = KNamelistGet(names, i, &name);
+                DISP_RC2(rc, "KNamelistGet()", root);
+            }
+            if (rc == 0) {
+                rc = KConfigNodeOpenNodeRead(self, &node, name);
+                DISP_RC2(rc, "KConfigNodeOpenNodeRead()", name);
+            }
+            if (rc == 0) {
+                KConfigNodePrint(node, indent + 1, name);
+            }
+            KConfigNodeRelease(node);
+        }
+    }
+
+    if (count > 0) {
+        printIndent(indent);
+    }
+    OUTMSG(("</%s>\n", root));
+
+    KNamelistRelease(names);
+
+    return rc;
+}
+
+LIB_EXPORT rc_t CC KConfigPrint(const KConfig* self, int indent) {
+    rc_t rc = 0;
+
+    const char root[] = "Config";
+
+    if (self == NULL) {
+        OUTMSG(("<%s>", root));
+        OUTMSG(("KConfigPrint(const KConfig* self = NULL)\n"));
+        OUTMSG(("</%s>\n", root));
+    }
+    else {
+        const KConfigNode* node = NULL;
+        if (rc == 0) {
+            rc = KConfigOpenNodeRead(self, &node, "/");
+            DISP_RC2(rc, "KConfigOpenNodeRead()", "/");
+        }
+        if (rc == 0) {
+            KConfigNodePrint(node, indent, "Config");
+        }
+        KConfigNodeRelease(node);
+    }
+
+    return rc;
+}
+
+LIB_EXPORT void CC KConfigDisableUserSettings ( void )
+{
+    s_disable_user_settings = true;
+}
+
+static
+rc_t open_file ( const KFile **f, const char *path )
+{
+    /* get current directory */
+    KDirectory *wd;
+    rc_t rc = KDirectoryNativeDir ( & wd );
+    if ( rc == 0 )
+    {
+        rc = KDirectoryOpenFileRead ( wd, f, path );
+        KDirectoryRelease ( wd );
+    }
+
+    return rc;
+}
+
+static
+rc_t decode_file ( KDataBuffer *mem, const KFile *orig )
+{
+    char hdr [ 8 ];
+    size_t num_read;
+    rc_t rc = KFileReadAll ( orig, 0, hdr, sizeof hdr, & num_read );
+    if ( rc == 0 && num_read == sizeof hdr )
+    {
+        if ( memcmp ( hdr, "ncbi_gap", sizeof hdr ) == 0 )
+        {
+            uint64_t eof;
+            rc = KFileSize ( orig, & eof );
+            if ( rc == 0 )
+            {
+                const KFile *sub;
+                rc = KFileMakeSubRead ( & sub, orig, sizeof hdr,
+                    eof - sizeof hdr );
+                if ( rc == 0 )
+                {
+                    const KFile *gzip;
+                    rc = KFileMakeGzipForRead ( & gzip, sub );
+                    if ( rc == 0 )
+                    {
+                        rc = KDataBufferMakeBytes ( mem, 0 );
+                        if ( rc == 0 )
+                        {
+                            size_t total, to_read;
+
+                            /* after all of that, we're ready to decompress */
+                            for ( total = 0; ; )
+                            {
+                                char *buff;
+
+                                rc = KDataBufferResize ( mem,
+                                    total + 32 * 1024 );
+                                if ( rc != 0 )
+                                    break;
+
+                                buff = mem -> base;
+                                to_read = ( size_t ) mem -> elem_count - total;
+
+                                rc = KFileReadAll ( gzip, total,
+                                    & buff [ total ], to_read, & num_read );
+                                if ( rc != 0 )
+                                    break;
+
+                                total += num_read;
+                                
+                                if ( num_read < to_read )
+                                {
+                                    buff [ total ] = 0;
+                                    mem -> elem_count = total;
+                                    break;
+                                }
+                            }
+                        }
+
+                        KFileRelease ( gzip );
+                    }
+
+                    KFileRelease ( sub );
+                }
+            }
+        }
+    }
+
+    return rc;
+}
+
+typedef struct {
+    const char *projectId;
+    const char *encryptionKey;
+    const char *downloadTicket;
+    const char *description;
+} KGapConfig;
+
+static
+rc_t _KConfigNncToKGapConfig(const KConfig *self, char *text, KGapConfig *kgc)
+{
+    size_t len = 0;
+    int i = 0;
+
+    assert(self && text && kgc);
+
+    memset(kgc, 0, sizeof *kgc);
+    len = string_size(text);
+
+    {
+        const char version[] = "version ";
+        size_t l = sizeof version - 1;
+        if (string_cmp(version, l, text, len, l) != 0) {
+            return RC(rcKFG, rcMgr, rcUpdating, rcFormat, rcUnrecognized);
+        }
+        text += l;
+        len -= l;
+    }
+
+    {
+        const char version[] = "1.0";
+        size_t l = sizeof version - 1;
+        if (string_cmp(version, l, text, l, l) != 0) {
+            return RC(rcKFG, rcMgr, rcUpdating, rcFormat, rcUnsupported);
+        }
+        text += l;
+        len -= l;
+    }
+
+    while (len > 0 && (text[0] == '\r' || text[0] == '\n')) {
+        ++text;
+        --len;
+    }
+
+    for (i = 0; ; ++i) {
+        const char *p = NULL;
+        if (i == 0) {
+            p = strtok(text, "|");
+        }
+        else {
+            p = strtok (NULL, "|");
+        }
+        if (p == NULL) {
+            break;
+        }
+        switch (i) {
+            case 0:
+                kgc->projectId = p;
+                break;
+            case 1:
+                kgc->encryptionKey = p;
+                break;
+            case 2:
+                kgc->downloadTicket = p;
+                break;
+            case 3:
+                kgc->description = p;
+                break;
+        }
+    }
+
+    if (!kgc->projectId || !kgc->encryptionKey || !kgc->downloadTicket ||
+        !kgc->description)
+    {
+        return RC(rcKFG, rcMgr, rcUpdating, rcFile, rcInvalid);
+    }
+
+    return 0;
+}
+
+static rc_t _KConfigFixResolverCgiNode(KConfig *self) {
+    rc_t rc = 0;
+
+    KConfigNode *node = NULL;
+    struct String *result = NULL;
+
+    assert(self);
+
+    if (rc == 0) {
+        rc = KConfigOpenNodeUpdate(self, &node,
+            "/repository/remote/protected/CGI/resolver-cgi");
+    }
+
+    if (rc == 0) {
+        rc = KConfigNodeReadString(node, &result);
+    }
+
+    if (rc == 0) {
+        assert(result);
+        if (result->size == 0) {
+            const char buffer[]
+                = "http://www.ncbi.nlm.nih.gov/Traces/names/names.cgi";
+            rc = KConfigNodeWrite(node, buffer, sizeof buffer);
+        }
+    }
+
+    free(result);
+
+    KConfigNodeRelease(node);
+
+    return rc;
+}
+
+static rc_t _KConfigNodeUpdateChild(KConfigNode *self,
+    const char *name, const char *val)
+{
+    rc_t rc = 0;
+
+    KConfigNode *node = NULL;
+
+    assert(self && name && val);
+
+    if (rc == 0) {
+        rc = KConfigNodeOpenNodeUpdate(self, &node, name);
+    }
+
+    if (rc == 0) {
+        rc = KConfigNodeWrite(node, val, string_size(val));
+    }
+
+    {
+        rc_t rc2 = KConfigNodeRelease(node);
+        if (rc2 != 0 && rc == 0) {
+            rc = rc2;
+        }
+    }
+
+    return rc;
+}
+
+static rc_t _KConfigMkPwdFileAndNode(KConfig *self,
+    KConfigNode *rep, const KGapConfig *kgc)
+{
+    rc_t rc = 0;
+    const KConfigNode *ncbiHome = NULL;
+    KConfigNode *node = NULL;
+    struct String *result = NULL;
+    char encryptionKeyPath[PATH_MAX];
+    KDirectory *dir = NULL;
+    KFile *encryptionKeyFile = NULL;
+    size_t num_writ = 0;
+
+    assert(self && kgc && rep);
+
+    if (rc == 0) {
+        rc = KConfigOpenNodeRead(self, &ncbiHome, "NCBI_HOME");
+    }
+    if (rc == 0) {
+        rc = KConfigNodeReadString(ncbiHome, &result);
+    }
+    KConfigNodeRelease(ncbiHome);
+    ncbiHome = NULL;
+
+    if (rc == 0) {
+        size_t num_writ = 0;
+        assert(result && result->addr);
+        rc = string_printf(encryptionKeyPath, sizeof encryptionKeyPath,
+            &num_writ, "%s/dbGap-%s.enc_key", result->addr, kgc->projectId);
+        if (rc == 0) {
+            assert(num_writ < sizeof encryptionKeyPath);
+        }
+    }
+    free(result);
+    result = NULL;
+
+    if (rc == 0) {
+        rc = KDirectoryNativeDir(&dir);
+    }
+
+    if (rc == 0) {
+        rc = KDirectoryCreateFile(dir, &encryptionKeyFile,
+            false, 0600, kcmInit | kcmParents, encryptionKeyPath);
+    }
+
+    KDirectoryRelease(dir);
+
+    if (rc == 0) {
+        assert(kgc->encryptionKey);
+        rc = KFileWrite(encryptionKeyFile, 0,
+            kgc->encryptionKey, string_size(kgc->encryptionKey), &num_writ);
+        if (rc == 0) {
+            assert(num_writ == string_size(kgc->encryptionKey));
+        }
+    }
+
+    if (rc == 0) {
+        rc = KFileWrite(encryptionKeyFile, string_size(kgc->encryptionKey),
+            "\n", 1, &num_writ);
+        if (rc == 0) {
+            assert(num_writ == 1);
+        }
+    }
+
+    {
+        rc_t rc2 = KFileRelease(encryptionKeyFile);
+        if (rc2 != 0 && rc == 0) {
+            rc = rc2;
+        }
+    }
+
+    if (rc == 0) {
+        rc = _KConfigNodeUpdateChild(rep,
+            "encryption-key-path", encryptionKeyPath);
+    }
+
+    KConfigNodeRelease(node);
+
+    return rc;
+}
+
+static rc_t _KConfigDBGapRepositoryNodes(KConfig *self,
+    KConfigNode *rep, const KGapConfig *kgc, const char *repoParentPath)
+{
+    rc_t rc = 0;
+
+    assert(self && rep && kgc);
+
+    if (rc == 0) {
+        rc = _KConfigMkPwdFileAndNode(self, rep, kgc);
+    }
+
+    if (rc == 0) {
+        assert(kgc->downloadTicket);
+        rc = _KConfigNodeUpdateChild(rep,
+            "download-ticket", kgc->downloadTicket);
+    }
+
+    if (rc == 0) {
+        rc = _KConfigNodeUpdateChild(rep, "description", kgc->description);
+    }
+
+    if (rc == 0) {
+        rc = _KConfigNodeUpdateChild(rep, "apps/sra/volumes/sraFlat", "sra");
+    }
+
+    if (rc == 0) {
+        rc = _KConfigNodeUpdateChild(rep, "cache-enabled", "true");
+    }
+
+    if (rc == 0) {
+        char rootPath[PATH_MAX] = "";
+        if (repoParentPath == NULL) {
+            size_t num_writ = 0;
+            const KConfigNode *home = NULL;
+            String *result = NULL;
+
+            if (rc == 0) {
+                rc = KConfigOpenNodeRead(self, &home, "HOME");
+            }
+
+            if (rc == 0) {
+                rc = KConfigNodeReadString(home, &result);
+            }
+
+            if (rc == 0) {
+                assert(result && result->addr);
+                rc = string_printf(rootPath, sizeof rootPath, &num_writ,
+                    "%s/ncbi/dbGap-%s", result->addr, kgc->projectId);
+            }
+
+            if (rc == 0) {
+                repoParentPath = rootPath;
+            }
+
+            free(result);
+            KConfigNodeRelease(home);
+        }
+
+        if (rc == 0) {
+            rc = _KConfigNodeUpdateChild(rep, "root", repoParentPath);
+        }
+    }
+
+    return rc;
+}
+
+static rc_t _KConfigAddDBGapRepository(KConfig *self,
+    const KGapConfig *kgc, const char *repoParentPath)
+{
+    rc_t rc = 0;
+
+    KConfigNode *rep = NULL;
+
+    char repNodeName[512] = "";
+
+    assert(self && kgc);
+
+    if (rc == 0) {
+        size_t num_writ = 0;
+        rc = string_printf(repNodeName, sizeof repNodeName, &num_writ,
+            "/repository/user/protected/dbGap-%s", kgc->projectId);
+        if (rc == 0) {
+            assert(num_writ < sizeof repNodeName);
+        }
+    }
+
+    if (rc == 0) {
+        rc = KConfigOpenNodeUpdate(self, &rep, repNodeName);
+    }
+
+    if (rc == 0) {
+        rc = _KConfigDBGapRepositoryNodes(self, rep, kgc, repoParentPath);
+    }
+
+    KConfigNodeRelease(rep);
+
+    return rc;
+}
+
+LIB_EXPORT rc_t CC KConfigImportNgc(KConfig *self,
+    const char *ngcPath, const char *repoParentPath)
+{
+    if (self == NULL) {
+        return RC(rcKFG, rcMgr, rcUpdating, rcSelf, rcNull);
+    }
+
+    if (ngcPath == NULL) {
+        return RC(rcKFG, rcMgr, rcUpdating, rcParam, rcNull);
+    }
+    else {
+        const KFile *orig = NULL;
+        rc_t rc = open_file ( & orig, ngcPath );
+        if (rc != 0) {
+            return rc;
+        }
+        else {
+            KGapConfig kgc;
+
+            KDataBuffer mem;
+            memset ( & mem, 0, sizeof mem );
+
+            rc = decode_file ( & mem, orig );
+            KFileRelease ( orig );
+            orig = NULL;
+
+            if (rc == 0) {
+                rc = _KConfigNncToKGapConfig(self, mem.base, &kgc);
+            }
+
+            KDataBufferWhack ( & mem );
+
+            if (rc == 0) {
+                rc = _KConfigFixResolverCgiNode(self);
+            }
+
+            if (rc == 0) {
+                rc = _KConfigAddDBGapRepository(self, &kgc, repoParentPath);
+            }
+        }
+
+        return rc;
+    }
+}
diff --git a/libs/kfg/config.linux.kfg b/libs/kfg/config.linux.kfg
deleted file mode 100644
index a5164c7..0000000
--- a/libs/kfg/config.linux.kfg
+++ /dev/null
@@ -1,29 +0,0 @@
-# ===========================================================================
-#
-#                            PUBLIC DOMAIN NOTICE
-#               National Center for Biotechnology Information
-#
-#  This software/database is a "United States Government Work" under the
-#  terms of the United States Copyright Act.  It was written as part of
-#  the author's official duties as a United States Government employee and
-#  thus cannot be copyrighted.  This software/database is freely available
-#  to the public for use. The National Library of Medicine and the U.S.
-#  Government have not placed any restriction on its use or reproduction.
-#
-#  Although all reasonable efforts have been taken to ensure the accuracy
-#  and reliability of the software and data, the NLM and the U.S.
-#  Government do not and cannot warrant the performance or results that
-#  may be obtained by using this software or data. The NLM and the U.S.
-#  Government disclaim all warranties, express or implied, including
-#  warranties of performance, merchantability or fitness for any particular
-#  purpose.
-#
-#  Please cite the author in any work or product based on this material.
-#
-# ===========================================================================
-
-# this is the most basic type of configuration
-
-# vdb/module/paths = "path-to-modules"
-# vdb/schema/paths = "path-to-schema"
-# refseq/paths     = "path-to-references"
diff --git a/libs/kfg/config.mac.kfg b/libs/kfg/config.mac.kfg
deleted file mode 100644
index a5164c7..0000000
--- a/libs/kfg/config.mac.kfg
+++ /dev/null
@@ -1,29 +0,0 @@
-# ===========================================================================
-#
-#                            PUBLIC DOMAIN NOTICE
-#               National Center for Biotechnology Information
-#
-#  This software/database is a "United States Government Work" under the
-#  terms of the United States Copyright Act.  It was written as part of
-#  the author's official duties as a United States Government employee and
-#  thus cannot be copyrighted.  This software/database is freely available
-#  to the public for use. The National Library of Medicine and the U.S.
-#  Government have not placed any restriction on its use or reproduction.
-#
-#  Although all reasonable efforts have been taken to ensure the accuracy
-#  and reliability of the software and data, the NLM and the U.S.
-#  Government do not and cannot warrant the performance or results that
-#  may be obtained by using this software or data. The NLM and the U.S.
-#  Government disclaim all warranties, express or implied, including
-#  warranties of performance, merchantability or fitness for any particular
-#  purpose.
-#
-#  Please cite the author in any work or product based on this material.
-#
-# ===========================================================================
-
-# this is the most basic type of configuration
-
-# vdb/module/paths = "path-to-modules"
-# vdb/schema/paths = "path-to-schema"
-# refseq/paths     = "path-to-references"
diff --git a/libs/kfg/config.win.kfg b/libs/kfg/config.win.kfg
deleted file mode 100644
index a5164c7..0000000
--- a/libs/kfg/config.win.kfg
+++ /dev/null
@@ -1,29 +0,0 @@
-# ===========================================================================
-#
-#                            PUBLIC DOMAIN NOTICE
-#               National Center for Biotechnology Information
-#
-#  This software/database is a "United States Government Work" under the
-#  terms of the United States Copyright Act.  It was written as part of
-#  the author's official duties as a United States Government employee and
-#  thus cannot be copyrighted.  This software/database is freely available
-#  to the public for use. The National Library of Medicine and the U.S.
-#  Government have not placed any restriction on its use or reproduction.
-#
-#  Although all reasonable efforts have been taken to ensure the accuracy
-#  and reliability of the software and data, the NLM and the U.S.
-#  Government do not and cannot warrant the performance or results that
-#  may be obtained by using this software or data. The NLM and the U.S.
-#  Government disclaim all warranties, express or implied, including
-#  warranties of performance, merchantability or fitness for any particular
-#  purpose.
-#
-#  Please cite the author in any work or product based on this material.
-#
-# ===========================================================================
-
-# this is the most basic type of configuration
-
-# vdb/module/paths = "path-to-modules"
-# vdb/schema/paths = "path-to-schema"
-# refseq/paths     = "path-to-references"
diff --git a/libs/kfg/default.kfg b/libs/kfg/default.kfg
new file mode 100644
index 0000000..14f8ac9
--- /dev/null
+++ b/libs/kfg/default.kfg
@@ -0,0 +1,45 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+## DEFAULT CONFIGURATION FOR SRA-TOOLKIT
+# 
+#  These settings are intended to allow the tools to work under conditions
+#  when the user has not yet performed any configuration.
+/config/default = "true"
+
+# The user's default public repository
+/repository/user/main/public/apps/refseq/volumes/refseq = "refseq"
+/repository/user/main/public/apps/sra/volumes/sraFlat = "sra"
+/repository/user/main/public/apps/wgs/volumes/wgsFlat = "wgs"
+/repository/user/main/public/cache-enabled = "true"
+/repository/user/main/public/root = "$(HOME)/ncbi/public"
+
+# Remote access to NCBI's public repository
+/repository/remote/main/NCBI/apps/refseq/volumes/refseq = "refseq"
+/repository/remote/main/NCBI/apps/sra/volumes/fuse1000 = "sra-instant/reads/ByRun/sra"
+/repository/remote/main/NCBI/apps/wgs/volumes/fuseWGS = "wgs"
+/repository/remote/main/NCBI/root = "http://ftp-trace.ncbi.nlm.nih.gov/sra"
+
+# Remote access to NCBI's protected repository
+/repository/remote/protected/CGI/resolver-cgi = "http://www.ncbi.nlm.nih.gov/Traces/names/names.cgi"
diff --git a/libs/kfg/kfg-parse.h b/libs/kfg/kfg-parse.h
new file mode 100644
index 0000000..c271b98
--- /dev/null
+++ b/libs/kfg/kfg-parse.h
@@ -0,0 +1,81 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_kfg_scan_
+#define _h_kfg_scan_
+
+#include <kfg/extern.h>
+#include <klib/rc.h>
+#include <klib/namelist.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct KFGParseBlock
+{
+    const char* tokenText;
+    size_t tokenLength;
+    int tokenId;
+    size_t line_no;
+    size_t column_no;
+} KFGParseBlock;
+
+typedef struct KFGScanBlock
+{
+    void* scanner;
+    void* buffer;
+    void* self; 
+    const char* file;
+    KFGParseBlock* lastToken; /* used for error reporting */
+    rc_t (*write_nvp)(void * self, const char* name, size_t nameLen, VNamelist*);
+    bool (*look_up_var)(void * self, struct KFGParseBlock*);
+    void (*report_error)(struct KFGScanBlock* sb, const char* msg);
+} KFGScanBlock;
+
+#define YYSTYPE_IS_DECLARED
+typedef union 
+{
+	KFGParseBlock   pb;
+	VNamelist*	    namelist;
+} KFGSymbol;
+
+/* Exposed for the sake of wb-test-kfg. */
+KFG_EXTERN rc_t CC KFGScan_yylex_init(KFGScanBlock* sb, const char *str);
+KFG_EXTERN void CC KFGScan_yylex_destroy(KFGScanBlock* sb);
+
+KFG_EXTERN void CC KFGScan_set_debug(bool on, KFGScanBlock* scannerContext);
+
+KFG_EXTERN int CC KFGScan_yylex(KFGSymbol* pb, KFGScanBlock* scannerContext);
+
+KFG_EXTERN int CC KFG_parse(KFGParseBlock* pb, KFGScanBlock* scannerContext);
+void CC KFG_error(KFGParseBlock* pb, KFGScanBlock* sb, const char* msg);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kfg_scan_ */
diff --git a/libs/kfg/libkfg.vers b/libs/kfg/libkfg.vers
index 90a27f9..a970716 100644
--- a/libs/kfg/libkfg.vers
+++ b/libs/kfg/libkfg.vers
@@ -1 +1 @@
-1.0.5
+1.0.15
diff --git a/libs/kfg/report-kfg.c b/libs/kfg/report-kfg.c
new file mode 100644
index 0000000..a0e45e0
--- /dev/null
+++ b/libs/kfg/report-kfg.c
@@ -0,0 +1,505 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kfg/extern.h>
+
+#include <kfg/config.h>
+#include <kfg/repository.h> /* KRepositoryMgr */
+#include <kfg/kfg-priv.h>
+
+#include <klib/namelist.h> /* KNamelistRelease */
+#include <klib/out.h> /* OUTMSG */
+#include <klib/klib-priv.h>
+#include <klib/rc.h>
+
+#include <kfs/directory.h>
+#include <kfs/dyload.h> /* KDyld */
+#include <kfs/file.h> /* KFileRead */
+#include <kfs/nullfile.h> /* KFileMakeNullUpdate */
+#include <kfs/md5.h> /* KMD5SumFmt */
+
+#include <sysalloc.h>
+
+#include <stdarg.h> /* va_start */
+#include <stdio.h> /* sprintf */
+#include <stdlib.h> /* malloc */
+#include <string.h> /* memset */
+#include <limits.h> /* PATH_MAX */
+#include <assert.h>
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+/*
+ * An unrecoverable error happened.
+ * We can help to solve it
+ * by reporting information about known application execution environment.
+ */
+
+#define report ( * f -> report )
+#define reportData ( * f -> reportData )
+#define reportData1 ( * f -> reportData1 )
+#define reportOpen ( * f -> reportOpen )
+#define reportOpen1 ( * f -> reportOpen1 )
+#define reportClose ( * f -> reportClose )
+#define reportClose1 ( * f -> reportClose1 )
+#define reportError ( * f -> reportError )
+#define reportErrorStr ( * f -> reportErrorStr )
+#define reportErrorStrImpl ( * f -> reportErrorStrImpl )
+#define reportErrorStrInt ( * f -> reportErrorStrInt )
+#define reportError3Str ( * f -> reportError3Str )
+
+static rc_t ReportKfgFiles(const ReportFuncs *f,
+    int indent, const KConfig* cfg)
+{
+    rc_t rc = 0;
+
+    uint32_t count = 0;
+    KNamelist* names = NULL;
+
+    rc = KConfigListIncluded(cfg, &names);
+
+    if (rc != 0) {
+        reportOpen(indent, "Files", 0);
+        reportError(indent + 1, rc, "KConfigListIncluded");
+    }
+    else {
+        rc = KNamelistCount(names, &count);
+        if (rc != 0) {
+            reportOpen(indent, "Files", 0);
+            reportErrorStr(indent + 1,
+                rc, "KNamelistCount", "origin", "KConfigListIncluded");
+        }
+        else {
+            int i = 0;
+            reportOpen(indent, "Files", 1, "count", 'd', count);
+            for (i = 0; i < count && rc == 0; ++i) {
+                const char* name = NULL;
+                rc = KNamelistGet(names, i, &name);
+                if (rc != 0) {
+                    reportErrorStrInt(indent + 1, rc, "KNamelistGet",
+                        "origin", "KConfigListIncluded", "idx", i);
+                }
+                else
+                {   report(indent + 1, "File", 1, "name", 's', name); }
+            }
+        }
+    }
+    reportClose(indent, "Files");
+
+    RELEASE(KNamelist, names);
+
+    return rc;
+}
+
+static
+rc_t sKConfigNode_Read(const KConfigNode* node, char* buffer, size_t buf_sz,
+    char** overflow_buf, bool* cant_allocate)
+{
+    rc_t rc = 0;
+    size_t num_read = 0;
+    size_t remaining = 0;
+    assert(overflow_buf && cant_allocate);
+    *cant_allocate = false;
+    *overflow_buf = NULL;
+    rc = KConfigNodeRead(node, 0, buffer, buf_sz, &num_read, &remaining);
+    if (rc != 0)
+    {   return rc; }
+    if (num_read < buf_sz)
+    {   buffer[num_read] = '\0'; }
+    else {
+        size_t new_buf_sz = num_read + remaining + 1;
+        char* overflow = malloc(new_buf_sz);
+        if (overflow == NULL) {
+            int i = 0;
+            for (i = 2; i < 5 && buf_sz - i > 0; ++i)
+            {   buffer[buf_sz - i] = '.'; }
+            buffer[buf_sz - 1] = '\0';
+            *cant_allocate = true;
+        }
+        else {
+            buffer = *overflow_buf = overflow;
+            buf_sz = 
+            rc = KConfigNodeRead
+                (node, 0, buffer, new_buf_sz, &num_read, &remaining);
+            if (rc != 0)
+            {   return rc; }
+            assert(num_read < new_buf_sz && remaining == 0);
+            buffer[num_read] = '\0';
+        }
+    }
+    return rc;
+}
+
+static rc_t ReportChildNode(const ReportFuncs *f, int indent,
+    const KNamelist* names, const KConfigNode* node, const char* root, uint32_t idx);
+
+static
+rc_t ReportConfigNodeChildren(const ReportFuncs *f, int indent,
+    const KConfigNode* node, const char* nodeName)
+{
+    KNamelist* names = NULL;
+    rc_t rc = KConfigNodeListChild(node, &names);
+    if (rc != 0) {
+        reportErrorStrImpl(indent,
+            rc, "KConfigNodeListChild", "node", nodeName, false);
+    }
+    else {
+        uint32_t count = 0;
+        rc = KNamelistCount(names, &count);
+        if (rc != 0) {
+            reportErrorStrImpl
+                (indent, rc, "KNamelistCount", "node", nodeName, false);
+        }
+        else {
+            if (count) {
+                int i = 0;
+                OUTMSG(("\n"));
+                for (i = 0; i < count && rc == 0; ++i) {
+                    rc = ReportChildNode
+                        (f, indent + 1, names, node, nodeName, i);
+                }
+                for (i = 0; i < indent; ++i)
+                {   OUTMSG((" ")); }
+            }
+        }
+    }
+    RELEASE(KNamelist, names);
+    return rc;
+}
+
+static rc_t ReportConfigNode(const ReportFuncs *f, int indent, const char* root,
+    const char* name, const KConfigNode* node, const char* node_name)
+{
+    rc_t rc = 0;
+
+    char local[PATH_MAX + 1] = "";
+    const char* nodeName = node_name ? node_name : name;
+    char* overflow = NULL;
+    bool cantallocate = false;
+
+    reportOpen1(indent, nodeName);
+    rc = sKConfigNode_Read(node, local, sizeof local, &overflow, &cantallocate);
+    if (rc == 0) {
+        char* buf = overflow ? overflow : local;
+        rc = reportData1(buf);
+        free(overflow);
+        overflow = NULL;
+        if (rc == 0)
+        {   rc = ReportConfigNodeChildren(f, indent, node, nodeName); }
+    }
+    else {
+        reportError3Str
+            (indent + 1, rc, "KConfigNodeRead", "node", root, "/", name, false);
+    }
+    reportClose1(nodeName);
+
+    return rc;
+}
+
+static rc_t ReportConfigNode_File(const ReportFuncs *f, int indent,
+    const char* root,
+    const char* name, const KConfigNode* node, const char* node_name)
+{
+    rc_t rc = 0;
+    char local[PATH_MAX + 1] = "";
+    const char* nodeName = node_name ? node_name : name;
+    char* overflow = NULL;
+    bool cantallocate = false;
+    rc = sKConfigNode_Read(node, local, sizeof local, &overflow, &cantallocate);
+    if (rc) {
+        reportError3Str
+            (indent, rc, "KConfigNodeRead", "node", root, "/", name, false);
+    }
+    else {
+        const char* buf = overflow ? overflow : local;
+        KPathType file_type = kptNotFound;
+        const char* type = NULL;
+        if (!cantallocate) {
+            KDirectory* dir = NULL;
+            rc = KDirectoryNativeDir(&dir);
+            if (rc == 0) {
+                file_type = KDirectoryPathType(dir, buf);
+                file_type &= ~kptAlias;
+                type = file_type == kptFile ? "exists" :
+                          file_type == kptNotFound ? "not found" : "unexpected";
+            }
+            RELEASE(KDirectory, dir);
+        }
+        else
+        {   type = "noo long"; }
+        if (rc == 0)
+        {   reportData(indent, nodeName, buf, 1, "file", 's', type); }
+    }
+    free(overflow);
+    overflow = NULL;
+    return rc;
+}
+
+static rc_t ReportChildNode(const ReportFuncs *f, int indent,
+    const KNamelist* names,
+    const KConfigNode* node, const char* root, uint32_t idx)
+{
+    rc_t rc = 0;
+
+    const char* name = NULL;
+    rc = KNamelistGet(names, idx, &name);
+    if (rc != 0) {
+        reportErrorStrInt
+            (indent + 1, rc, "KNamelistGet", "node", root, "idx", idx);
+    }
+    else {
+        const KConfigNode* child = NULL;
+        rc = KConfigNodeOpenNodeRead(node, &child, name);
+        if (rc != 0) {
+            reportOpen(indent, name, 0);
+            reportError3Str(indent + 1, rc, "KConfigNodeOpenNodeRead",
+                "node", root, "/", name, true);
+            reportClose(indent, name);
+        }
+        else
+        {   rc = ReportConfigNode(f, indent, root, name, child, NULL); }
+    }
+
+    return rc;
+}
+
+static
+rc_t ReportRefseq(const ReportFuncs *f, int indent, const KConfig* cfg)
+{
+    rc_t rc = 0;
+
+    const char root[] = "refseq";
+
+    const KConfigNode* node = NULL;
+    rc = KConfigOpenNodeRead(cfg, &node, root);
+    if (rc != 0) {
+        if (GetRCState(rc) == rcNotFound) {
+            report(indent, root, 1, "state", 's', "not found");
+            rc = 0;
+        }
+        else
+        {   reportErrorStr(indent, rc, "KConfigOpenNodeRead", "node", root); }
+    }
+    else {
+        KNamelist* names = NULL;
+        rc = KConfigNodeListChild(node, &names);
+        if (rc != 0)
+        {   reportErrorStr(indent, rc, "KConfigNodeListChild", "node", root); }
+        else {
+            uint32_t count = 0;
+            rc = KNamelistCount(names, &count);
+            if (rc != 0)
+            {   reportErrorStr(indent, rc, "KNamelistCount", "node", root); }
+            else {
+                uint32_t i = 0;
+                reportOpen(indent, root, 0);
+                for (i = 0; i < count && rc == 0; ++i)
+                {   rc = ReportChildNode(f, indent + 1, names, node, root, i); }
+                reportClose(indent, root);
+            }
+        }
+        RELEASE(KNamelist, names);
+    }
+
+    RELEASE(KConfigNode, node);
+
+    return rc;
+}
+
+static
+rc_t ReportSra(const ReportFuncs *f, int indent, const KConfig* cfg)
+{
+    rc_t rc = 0;
+    const char root[] = "sra";
+    const KConfigNode* node = NULL;
+    assert(cfg);
+    rc = KConfigOpenNodeRead(cfg, &node, root);
+    if (rc != 0) {
+        if (GetRCState(rc) == rcNotFound) {
+            report(indent, root, 1, "state", 's', "not found");
+            rc = 0;
+        }
+        else
+        {   reportErrorStr(indent, rc, "KConfigOpenNodeRead", "node", root); }
+    }
+    else {
+        KNamelist* names = NULL;
+        rc = KConfigNodeListChild(node, &names);
+        if (rc != 0)
+        {   reportErrorStr(indent, rc, "KConfigNodeListChild", "node", root); }
+        else {
+            uint32_t count = 0;
+            rc = KNamelistCount(names, &count);
+            if (rc != 0)
+            {   reportErrorStr(indent, rc, "KNamelistCount", "node", root); }
+            else {
+                uint32_t i = 0;
+                reportOpen(indent, root, 0);
+                for (i = 0; i < count && rc == 0; ++i)
+                {   rc = ReportChildNode(f, indent + 1, names, node, root, i); }
+                reportClose(indent, root);
+            }
+        }
+        RELEASE(KNamelist, names);
+    }
+    RELEASE(KConfigNode, node);
+    return rc;
+}
+
+static
+rc_t ReportKrypto(const ReportFuncs *f, int indent, const KConfig* cfg)
+{
+    rc_t rc = 0;
+
+    const char root[] = "krypto/pwfile";
+    const char name[] = "krypto";
+
+    const KConfigNode* node = NULL;
+    rc = KConfigOpenNodeRead(cfg, &node, root);
+    if (rc != 0) {
+        if (GetRCState(rc) == rcNotFound) {
+            report(indent, name, 1, "state", 's', "pwfile: not found");
+            rc = 0;
+        }
+        else
+        {   reportErrorStr(indent, rc, "KConfigOpenNodeRead", "node", root); }
+    }
+    else {
+        rc = ReportConfigNode_File(f, indent, "krypto", "pwfile", node, "krypto");
+    }
+
+    RELEASE(KConfigNode, node);
+
+    return rc;
+}
+
+static
+rc_t ReportCrntRepository(const ReportFuncs *f, int indent, const KConfig *cfg)
+{
+    rc_t rc = 0;
+    const KRepositoryMgr *mgr = NULL;
+    const KRepository *protectd = NULL;
+    const char root[] = "CurrentProtectedRepository";
+    bool open = false;
+    rc = KConfigMakeRepositoryMgrRead(cfg, &mgr);
+    if (rc != 0) {
+        reportError(indent, rc, "KConfigMakeRepositoryMgrRead");
+    }
+    if (rc == 0) {
+        rc = KRepositoryMgrCurrentProtectedRepository(mgr, &protectd);
+        if (rc != 0) {
+            if (rc == SILENT_RC(
+                rcKFG, rcMgr, rcAccessing, rcNode, rcNotFound))
+            {
+                report(indent, root, 1, "found", 's', "false");
+            }
+            else {
+                reportOpen(indent, root, 0);
+                open = true;
+                reportErrorStr(indent + 1, rc,
+                    "KRepositoryMgrCurrentProtectedRepository", NULL, NULL);
+            }
+        }
+    }
+    if (rc == 0) {
+        char buffer[256];
+        size_t name_size = 0;
+        reportOpen(indent, root, 1, "found", 's', "true");
+        open = true;
+        rc = KRepositoryName(protectd, buffer, sizeof buffer, &name_size);
+        if (rc != 0) {
+            reportErrorStr(indent + 1, rc, "KRepositoryName",
+                "origin", "KRepositoryMgrCurrentProtectedRepository");
+        }
+        else {
+            reportData(indent + 1, "name", buffer, 0);
+        }
+    }
+    RELEASE(KRepository, protectd);
+    RELEASE(KRepositoryMgr, mgr);
+    if (open) {
+        reportClose(indent, root);
+    }
+    return rc;
+}
+
+rc_t ReportKfg ( const ReportFuncs *f, uint32_t indent )
+{
+    rc_t rc = 0;
+
+    KConfig* cfg = NULL;
+
+    const char tag[] = "Configuration";
+    reportOpen(indent, tag, 0);
+
+    rc = KConfigMake(&cfg, NULL);
+    if (rc != 0) {
+        reportError(indent + 1, rc, "KConfigMake");
+    }
+    else {
+        {
+            rc_t rc2 = ReportKfgFiles(f, indent + 1, cfg);
+            if (rc == 0 && rc2 != 0)
+            {   rc = rc2; }
+        }
+        {
+            rc_t rc2 = ReportRefseq(f, indent + 1, cfg);
+            if (rc == 0 && rc2 != 0)
+            {   rc = rc2; }
+        }
+        {
+            rc_t rc2 = ReportKrypto(f, indent + 1, cfg);
+            if (rc == 0 && rc2 != 0)
+            {   rc = rc2; }
+        }
+        {
+            rc_t rc2 = ReportSra(f, indent + 1, cfg);
+            if (rc == 0 && rc2 != 0)
+            {   rc = rc2; }
+        }
+        {
+            rc_t rc2 = KConfigPrint(cfg, indent);
+            if (rc == 0 && rc2 != 0)
+            {   rc = rc2; }
+        }
+        {
+            rc_t rc2 = ReportCrntRepository(f, indent + 1, cfg);
+            if (rc == 0 && rc2 != 0)
+            {   rc = rc2; }
+        }
+    }
+
+    reportClose(indent, tag);
+
+    RELEASE(KConfig, cfg);
+
+    return rc;
+}
diff --git a/libs/kfg/report.c b/libs/kfg/report.c
new file mode 100644
index 0000000..01a7353
--- /dev/null
+++ b/libs/kfg/report.c
@@ -0,0 +1,433 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kfg/extern.h>
+
+#include <kfg/config.h>
+#include <kfg/kfg-priv.h>
+
+#include <klib/namelist.h> /* KNamelistRelease */
+#include <klib/out.h> /* OUTMSG */
+#include <klib/klib-priv.h>
+#include <klib/rc.h>
+
+#include <kfs/directory.h>
+#include <kfs/dyload.h> /* KDyld */
+#include <kfs/file.h> /* KFileRead */
+#include <kfs/nullfile.h> /* KFileMakeNullUpdate */
+#include <kfs/md5.h> /* KMD5SumFmt */
+
+#include <stdarg.h> /* va_start */
+#include <stdio.h> /* sprintf */
+#include <stdlib.h> /* malloc */
+#include <string.h> /* memset */
+#include <limits.h> /* PATH_MAX */
+#include <assert.h>
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+/*
+ * An unrecoverable error happened.
+ * We can help to solve it
+ * by reporting information about known application execution environment.
+ */
+
+#define report ( * f -> report )
+#define reportData ( * f -> reportData )
+#define reportData1 ( * f -> reportData1 )
+#define reportOpen ( * f -> reportOpen )
+#define reportOpen1 ( * f -> reportOpen1 )
+#define reportClose ( * f -> reportClose )
+#define reportClose1 ( * f -> reportClose1 )
+#define reportError ( * f -> reportError )
+#define reportErrorStr ( * f -> reportErrorStr )
+#define reportErrorStrImpl ( * f -> reportErrorStrImpl )
+#define reportErrorStrInt ( * f -> reportErrorStrInt )
+#define reportError3Str ( * f -> reportError3Str )
+
+static rc_t ReportKfgFiles(const ReportFuncs *f, int indent, const KConfig* cfg) {
+    rc_t rc = 0;
+
+    uint32_t count = 0;
+    KNamelist* names = NULL;
+
+    rc = KConfigListIncluded(cfg, &names);
+
+    if (rc != 0) {
+        reportOpen(indent, "Files", 0);
+        reportError(indent + 1, rc, "KConfigListIncluded");
+    }
+    else {
+        rc = KNamelistCount(names, &count);
+        if (rc != 0) {
+            reportOpen(indent, "Files", 0);
+            reportErrorStr(indent + 1,
+                rc, "KNamelistCount", "origin", "KConfigListIncluded");
+        }
+        else {
+            int i = 0;
+            reportOpen(indent, "Files", 1, "count", 'd', count);
+            for (i = 0; i < count && rc == 0; ++i) {
+                const char* name = NULL;
+                rc = KNamelistGet(names, i, &name);
+                if (rc != 0) {
+                    reportErrorStrInt(indent + 1, rc, "KNamelistGet",
+                        "origin", "KConfigListIncluded", "idx", i);
+                }
+                else
+                {   report(indent + 1, "File", 1, "name", 's', name); }
+            }
+        }
+    }
+    reportClose(indent, "Files");
+
+    RELEASE(KNamelist, names);
+
+    return rc;
+}
+
+static
+rc_t sKConfigNode_Read(const KConfigNode* node, char* buffer, size_t buf_sz,
+    char** overflow_buf, bool* cant_allocate)
+{
+    rc_t rc = 0;
+    size_t num_read = 0;
+    size_t remaining = 0;
+    assert(overflow_buf && cant_allocate);
+    *cant_allocate = false;
+    *overflow_buf = NULL;
+    rc = KConfigNodeRead(node, 0, buffer, buf_sz, &num_read, &remaining);
+    if (rc != 0)
+    {   return rc; }
+    if (num_read < buf_sz)
+    {   buffer[num_read] = '\0'; }
+    else {
+        size_t new_buf_sz = num_read + remaining + 1;
+        char* overflow = malloc(new_buf_sz);
+        if (overflow == NULL) {
+            int i = 0;
+            for (i = 2; i < 5 && buf_sz - i > 0; ++i)
+            {   buffer[buf_sz - i] = '.'; }
+            buffer[buf_sz - 1] = '\0';
+            *cant_allocate = true;
+        }
+        else {
+            buffer = *overflow_buf = overflow;
+            buf_sz = 
+            rc = KConfigNodeRead
+                (node, 0, buffer, new_buf_sz, &num_read, &remaining);
+            if (rc != 0)
+            {   return rc; }
+            assert(num_read < new_buf_sz && remaining == 0);
+            buffer[num_read] = '\0';
+        }
+    }
+    return rc;
+}
+
+static rc_t ReportChildNode(const ReportFuncs *f, int indent,
+    const KNamelist* names, const KConfigNode* node, const char* root, uint32_t idx);
+
+static
+rc_t ReportConfigNodeChildren(const ReportFuncs *f, int indent,
+    const KConfigNode* node, const char* nodeName)
+{
+    KNamelist* names = NULL;
+    rc_t rc = KConfigNodeListChild(node, &names);
+    if (rc != 0) {
+        reportErrorStrImpl(indent,
+            rc, "KConfigNodeListChild", "node", nodeName, false);
+    }
+    else {
+        uint32_t count = 0;
+        rc = KNamelistCount(names, &count);
+        if (rc != 0) {
+            reportErrorStrImpl
+                (indent, rc, "KNamelistCount", "node", nodeName, false);
+        }
+        else {
+            if (count) {
+                int i = 0;
+                OUTMSG(("\n"));
+                for (i = 0; i < count && rc == 0; ++i) {
+                    rc = ReportChildNode
+                        (f, indent + 1, names, node, nodeName, i);
+                }
+                for (i = 0; i < indent; ++i)
+                {   OUTMSG((" ")); }
+            }
+        }
+    }
+    RELEASE(KNamelist, names);
+    return rc;
+}
+
+static
+rc_t ReportConfigNode(const ReportFuncs *f, int indent, const char* root, const char* name,
+    const KConfigNode* node, const char* node_name)
+{
+    rc_t rc = 0;
+
+    char local[PATH_MAX + 1] = "";
+    const char* nodeName = node_name ? node_name : name;
+    char* overflow = NULL;
+    bool cantallocate = false;
+
+    reportOpen1(indent, nodeName);
+    rc = sKConfigNode_Read(node, local, sizeof local, &overflow, &cantallocate);
+    if (rc == 0) {
+        char* buf = overflow ? overflow : local;
+        rc = reportData1(buf);
+        free(overflow);
+        overflow = NULL;
+        if (rc == 0)
+        {   rc = ReportConfigNodeChildren(f, indent, node, nodeName); }
+    }
+    else {
+        reportError3Str
+            (indent + 1, rc, "KConfigNodeRead", "node", root, "/", name, false);
+    }
+    reportClose1(nodeName);
+
+    return rc;
+}
+
+static
+rc_t ReportConfigNode_File(const ReportFuncs *f, int indent, const char* root, const char* name,
+    const KConfigNode* node, const char* node_name)
+{
+    rc_t rc = 0;
+    char local[PATH_MAX + 1] = "";
+    const char* nodeName = node_name ? node_name : name;
+    char* overflow = NULL;
+    bool cantallocate = false;
+    rc = sKConfigNode_Read(node, local, sizeof local, &overflow, &cantallocate);
+    if (rc) {
+        reportError3Str
+            (indent, rc, "KConfigNodeRead", "node", root, "/", name, false);
+    }
+    else {
+        const char* buf = overflow ? overflow : local;
+        KPathType file_type = kptNotFound;
+        const char* type = NULL;
+        if (!cantallocate) {
+            KDirectory* dir = NULL;
+            rc = KDirectoryNativeDir(&dir);
+            if (rc == 0) {
+                file_type = KDirectoryPathType(dir, buf);
+                file_type &= ~kptAlias;
+                type = file_type == kptFile ? "exists" :
+                          file_type == kptNotFound ? "not found" : "unexpected";
+            }
+            RELEASE(KDirectory, dir);
+        }
+        else
+        {   type = "noo long"; }
+        if (rc == 0)
+        {   reportData(indent, nodeName, buf, 1, "file", 's', type); }
+    }
+    free(overflow);
+    overflow = NULL;
+    return rc;
+}
+
+static rc_t ReportChildNode(const ReportFuncs *f, int indent, const KNamelist* names,
+    const KConfigNode* node, const char* root, uint32_t idx)
+{
+    rc_t rc = 0;
+
+    const char* name = NULL;
+    rc = KNamelistGet(names, idx, &name);
+    if (rc != 0) {
+        reportErrorStrInt
+            (indent + 1, rc, "KNamelistGet", "node", root, "idx", idx);
+    }
+    else {
+        const KConfigNode* child = NULL;
+        rc = KConfigNodeOpenNodeRead(node, &child, name);
+        if (rc != 0) {
+            reportOpen(indent, name, 0);
+            reportError3Str(indent + 1, rc, "KConfigNodeOpenNodeRead",
+                "node", root, "/", name, true);
+            reportClose(indent, name);
+        }
+        else
+        {   rc = ReportConfigNode(f, indent, root, name, child, NULL); }
+    }
+
+    return rc;
+}
+
+static rc_t ReportRefseq(const ReportFuncs *f, int indent, const KConfig* cfg) {
+    rc_t rc = 0;
+
+    const char root[] = "refseq";
+
+    const KConfigNode* node = NULL;
+    rc = KConfigOpenNodeRead(cfg, &node, root);
+    if (rc != 0) {
+        if (GetRCState(rc) == rcNotFound) {
+            report(indent, root, 1, "state", 's', "not found");
+            rc = 0;
+        }
+        else
+        {   reportErrorStr(indent, rc, "KConfigOpenNodeRead", "node", root); }
+    }
+    else {
+        KNamelist* names = NULL;
+        rc = KConfigNodeListChild(node, &names);
+        if (rc != 0)
+        {   reportErrorStr(indent, rc, "KConfigNodeListChild", "node", root); }
+        else {
+            uint32_t count = 0;
+            rc = KNamelistCount(names, &count);
+            if (rc != 0)
+            {   reportErrorStr(indent, rc, "KNamelistCount", "node", root); }
+            else {
+                uint32_t i = 0;
+                reportOpen(indent, root, 0);
+                for (i = 0; i < count && rc == 0; ++i)
+                {   rc = ReportChildNode(f, indent + 1, names, node, root, i); }
+                reportClose(indent, root);
+            }
+        }
+        RELEASE(KNamelist, names);
+    }
+
+    RELEASE(KConfigNode, node);
+
+    return rc;
+}
+
+static rc_t ReportSra(const ReportFuncs *f, int indent, const KConfig* cfg) {
+    rc_t rc = 0;
+    const char root[] = "sra";
+    const KConfigNode* node = NULL;
+    assert(cfg);
+    rc = KConfigOpenNodeRead(cfg, &node, root);
+    if (rc != 0) {
+        if (GetRCState(rc) == rcNotFound) {
+            report(indent, root, 1, "state", 's', "not found");
+            rc = 0;
+        }
+        else
+        {   reportErrorStr(indent, rc, "KConfigOpenNodeRead", "node", root); }
+    }
+    else {
+        KNamelist* names = NULL;
+        rc = KConfigNodeListChild(node, &names);
+        if (rc != 0)
+        {   reportErrorStr(indent, rc, "KConfigNodeListChild", "node", root); }
+        else {
+            uint32_t count = 0;
+            rc = KNamelistCount(names, &count);
+            if (rc != 0)
+            {   reportErrorStr(indent, rc, "KNamelistCount", "node", root); }
+            else {
+                uint32_t i = 0;
+                reportOpen(indent, root, 0);
+                for (i = 0; i < count && rc == 0; ++i)
+                {   rc = ReportChildNode(f, indent + 1, names, node, root, i); }
+                reportClose(indent, root);
+            }
+        }
+        RELEASE(KNamelist, names);
+    }
+    RELEASE(KConfigNode, node);
+    return rc;
+}
+
+static rc_t ReportKrypto(const ReportFuncs *f, int indent, const KConfig* cfg) {
+    rc_t rc = 0;
+
+    const char root[] = "krypto/pwfile";
+    const char name[] = "krypto";
+
+    const KConfigNode* node = NULL;
+    rc = KConfigOpenNodeRead(cfg, &node, root);
+    if (rc != 0) {
+        if (GetRCState(rc) == rcNotFound) {
+            report(indent, name, 1, "state", 's', "pwfile: not found");
+            rc = 0;
+        }
+        else
+        {   reportErrorStr(indent, rc, "KConfigOpenNodeRead", "node", root); }
+    }
+    else {
+        rc = ReportConfigNode_File(f, indent, "krypto", "pwfile", node, "krypto");
+    }
+
+    RELEASE(KConfigNode, node);
+
+    return rc;
+}
+
+rc_t ReportKfg ( const ReportFuncs *f, uint32_t indent )
+{
+    rc_t rc = 0;
+
+    KConfig* cfg = NULL;
+
+    const char tag[] = "Configuration";
+    reportOpen(indent, tag, 0);
+
+    rc = KConfigMake(&cfg, NULL);
+    if (rc != 0)
+    {   reportError(indent + 1, rc, "KConfigMake"); }
+    else {
+        {
+            rc_t rc2 = ReportKfgFiles(f, indent + 1, cfg);
+            if (rc == 0 && rc2 != 0)
+            {   rc = rc2; }
+        }
+        {
+            rc_t rc2 = ReportRefseq(f, indent + 1, cfg);
+            if (rc == 0 && rc2 != 0)
+            {   rc = rc2; }
+        }
+        {
+            rc_t rc2 = ReportKrypto(f, indent + 1, cfg);
+            if (rc == 0 && rc2 != 0)
+            {   rc = rc2; }
+        }
+        {
+            rc_t rc2 = ReportSra(f, indent + 1, cfg);
+            if (rc == 0 && rc2 != 0)
+            {   rc = rc2; }
+        }
+    }
+
+    reportClose(indent, tag);
+
+    RELEASE(KConfig, cfg);
+
+    return rc;
+}
diff --git a/libs/kfg/repository.c b/libs/kfg/repository.c
new file mode 100644
index 0000000..d1b2af2
--- /dev/null
+++ b/libs/kfg/repository.c
@@ -0,0 +1,1087 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <kfg/extern.h>
+
+#include <kfg/repository.h>
+#include <kfg/config.h>
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <kfs/impl.h>
+#include <klib/refcount.h>
+#include <klib/text.h>
+#include <klib/vector.h>
+#include <klib/namelist.h>
+#include <klib/rc.h>
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+/*--------------------------------------------------------------------------
+ * KRepository
+ *  presents structured access to a storage repository
+ *  as modeled in KConfig.
+ *
+ *  all objects are obtained via KRepositoryMgr ( see below )
+ */
+struct KRepository
+{
+    const KConfigNode *node;
+    String name;
+    KRefcount refcount;
+    KRepCategory category;
+    KRepSubCategory subcategory;
+};
+
+
+/* Whack
+ */
+static
+rc_t KRepositoryWhack ( KRepository *self )
+{
+    KConfigNodeRelease ( self -> node );
+    free ( self );
+    return 0;
+}
+
+/* Sort
+ */
+static
+int CC KRepositorySort ( const void **a, const void **b, void *ignore )
+{
+    const KRepository *left = * a;
+    const KRepository *right = * b;
+
+    if ( left -> category < right -> category )
+        return -1;
+    if ( left -> category > right -> category )
+        return 1;
+    if ( left -> subcategory < right -> subcategory )
+        return -1;
+    if ( left -> subcategory > right -> subcategory )
+        return 1;
+    return StringCompare ( & left -> name, & right -> name );
+}
+
+/* Make
+ */
+static
+rc_t KRepositoryMake ( KRepository **rp, const KConfigNode *node,
+    const char *name, KRepCategory category, KRepSubCategory subcategory )
+{
+    rc_t rc;
+    KRepository *r;
+    String name_str;
+
+    /* measure string */
+    StringInitCString ( & name_str, name );
+
+    /* create object */
+    r = malloc ( sizeof * r + name_str . size + 1 );
+    if ( r == NULL )
+        return RC ( rcKFG, rcNode, rcConstructing, rcMemory, rcExhausted );
+
+    rc = KConfigNodeAddRef ( node );
+    if ( rc != 0 )
+    {
+        free ( r );
+        return rc;
+    }
+
+    r -> node = node;
+    r -> name = name_str;
+    r -> name . addr = ( char* ) ( r + 1 );
+    KRefcountInit ( & r -> refcount, 1, "KRepository", "make", name );
+    r -> category = category;
+    r -> subcategory = subcategory;
+    memcpy ( r + 1, name, name_str . size );
+    ( ( char* ) ( r + 1 ) ) [ name_str . size ] = 0;
+
+    * rp = r;
+
+    return 0;
+}
+
+
+/* AddRef
+ * Release
+ */
+LIB_EXPORT rc_t CC KRepositoryAddRef ( const KRepository *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "KRepository" ) )
+        {
+        case krefLimit:
+            return RC ( rcKFG, rcNode, rcAttaching, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+LIB_EXPORT rc_t CC KRepositoryRelease ( const KRepository *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "KRepository" ) )
+        {
+        case krefWhack:
+            return KRepositoryWhack ( ( KRepository* ) self );
+        case krefLimit:
+            return RC ( rcKFG, rcNode, rcReleasing, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+
+/* WhackEntry
+ *  for cleaning up these vectors
+ */
+static
+void CC KRepositoryWhackEntry ( void *item, void *ignore )
+{
+    KRepository *self = item;
+    KRepositoryRelease ( self );
+}
+
+
+/* Category
+ * SubCategory
+ *  tells what the repository category or sub-category are
+ *  or returns "bad" if the repository object is not usable.
+ */
+LIB_EXPORT KRepCategory CC KRepositoryCategory ( const KRepository *self )
+{
+    if ( self != NULL )
+        return self -> category;
+    return krepBadCategory;
+}
+
+LIB_EXPORT KRepSubCategory CC KRepositorySubCategory ( const KRepository *self )
+{
+    if ( self != NULL )
+        return self -> subcategory;
+    return krepBadSubCategory;
+}
+
+
+/* Name
+ *  get the repository name
+ *  attempts to copy NUL-terminated name into provided buffer
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - name output parameter
+ *
+ *  "name_size" [ OUT, NULL OKAY ] - returns the name size in
+ *  bytes, excluding any NUL termination.
+ */
+LIB_EXPORT rc_t CC KRepositoryName ( const KRepository *self,
+    char *buffer, size_t bsize, size_t *name_size )
+{
+    if ( self == NULL )
+        return RC ( rcKFG, rcNode, rcAccessing, rcSelf, rcNull );
+
+    if ( name_size != NULL )
+        * name_size = self -> name . size;
+
+    if ( bsize < self -> name . size )
+        return RC ( rcKFG, rcNode, rcAccessing, rcBuffer, rcInsufficient );
+
+    if ( buffer == NULL )
+        return RC ( rcKFG, rcNode, rcAccessing, rcBuffer, rcNull );
+
+    memcpy ( buffer, self -> name . addr, self -> name . size );
+
+    if ( bsize > self -> name . size )
+        buffer [ self -> name . size ] = 0;
+
+    return 0;
+}
+
+
+/* DisplayName
+ *  get the repository display name,
+ *  if different from its actual name
+ *
+ *  attempts to copy NUL-terminated name into provided buffer
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - name output parameter
+ *
+ *  "name_size" [ OUT, NULL OKAY ] - returns the name size in
+ *  bytes, excluding any NUL termination.
+ */
+LIB_EXPORT rc_t CC KRepositoryDisplayName ( const KRepository *self,
+    char *buffer, size_t bsize, size_t *name_size )
+{
+    rc_t rc;
+
+    if ( self == NULL )
+        rc = RC ( rcKFG, rcNode, rcAccessing, rcSelf, rcNull );
+    else
+    {
+        const KConfigNode *node;
+
+        if ( name_size != NULL )
+            * name_size = 0;
+
+        rc = KConfigNodeOpenNodeRead ( self -> node, & node, "display-name" );
+        if ( rc != 0 )
+            rc = KRepositoryName ( self, buffer, bsize, name_size );
+        else
+        {
+            size_t num_read, remaining;
+            rc = KConfigNodeRead ( node, 0, buffer, bsize, & num_read, & remaining );
+            KConfigNodeRelease ( node );
+
+            if ( rc == 0 )
+            {
+                if ( name_size != NULL )
+                    * name_size = num_read + remaining;
+
+                if ( remaining != 0 )
+                    rc = RC ( rcKFG, rcNode, rcAccessing, rcBuffer, rcInsufficient );
+                else if ( num_read < bsize )
+                    buffer [ num_read ] = 0;
+            }
+        }
+    }
+
+    return rc;
+}
+
+
+/* Root
+ *  read the root path as a POSIX path or URL
+ *
+ *  attempts to copy NUL-terminated path into provided buffer
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - path output parameter
+ *
+ *  "root_size" [ OUT, NULL OKAY ] - returns the path size in
+ *  bytes, excluding any NUL termination.
+ */
+LIB_EXPORT rc_t CC KRepositoryRoot ( const KRepository *self,
+    char *buffer, size_t bsize, size_t *root_size )
+{
+    rc_t rc;
+
+    if ( self == NULL )
+        rc = RC ( rcKFG, rcNode, rcAccessing, rcSelf, rcNull );
+    else
+    {
+        const KConfigNode *node;
+
+        if ( root_size != NULL )
+            * root_size = 0;
+
+        rc = KConfigNodeOpenNodeRead ( self -> node, & node, "root" );
+        if ( rc == 0 )
+        {
+            size_t num_read, remaining;
+            rc = KConfigNodeRead ( node, 0, buffer, bsize, & num_read, & remaining );
+            KConfigNodeRelease ( node );
+
+            if ( rc == 0 )
+            {
+                if ( root_size != NULL )
+                    * root_size = num_read + remaining;
+
+                if ( remaining != 0 )
+                    rc = RC ( rcKFG, rcNode, rcAccessing, rcBuffer, rcInsufficient );
+                else if ( num_read < bsize )
+                    buffer [ num_read ] = 0;
+            }
+        }
+    }
+
+    return rc;
+}
+
+
+/* Disabled
+ *  discover whether the repository is enabled
+ */
+LIB_EXPORT bool CC KRepositoryDisabled ( const KRepository *self )
+{
+    if ( self != NULL )
+    {
+        const KConfigNode *node;
+        rc_t rc = KConfigNodeOpenNodeRead ( self -> node, & node, "disabled" );
+        if ( rc == 0 )
+        {
+            bool disabled = false;
+            rc = KConfigNodeReadBool ( node, & disabled );
+            KConfigNodeRelease ( node );
+            if ( rc == 0 )
+                return disabled;
+        }
+    }
+
+    return false;
+}
+
+/* CacheEnabled
+ *  discover whether the repository supports caching
+ */
+LIB_EXPORT bool CC KRepositoryCacheEnabled ( const KRepository *self )
+{
+    if ( self != NULL )
+    {
+        const KConfigNode *node;
+        rc_t rc = KConfigNodeOpenNodeRead ( self -> node, & node, "cache-enabled" );
+        if ( rc == 0 )
+        {
+            bool enabled = false;
+            rc = KConfigNodeReadBool ( node, & enabled );
+            KConfigNodeRelease ( node );
+            if ( rc == 0 )
+                return enabled;
+        }
+    }
+
+    return false;
+}
+
+
+/* DownloadTicket
+ *  return any associated download ticket
+ *
+ *  attempts to copy NUL-terminated ticket into provided buffer
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - ticket output parameter
+ *
+ *  "ticket_size" [ OUT, NULL OKAY ] - returns the ticket size in
+ *  bytes, excluding any NUL termination.
+ */
+LIB_EXPORT rc_t CC KRepositoryDownloadTicket ( const KRepository *self,
+    char *buffer, size_t bsize, size_t *ticket_size )
+{
+    rc_t rc;
+
+    if ( self == NULL )
+        rc = RC ( rcKFG, rcNode, rcAccessing, rcSelf, rcNull );
+    else
+    {
+        const KConfigNode *node;
+
+        if ( ticket_size != NULL )
+            * ticket_size = 0;
+
+        rc = KConfigNodeOpenNodeRead ( self -> node, & node, "download-ticket" );
+        if ( rc == 0 )
+        {
+            size_t num_read, remaining;
+            rc = KConfigNodeRead ( node, 0, buffer, bsize, & num_read, & remaining );
+            KConfigNodeRelease ( node );
+
+            if ( rc == 0 )
+            {
+                if ( ticket_size != NULL )
+                    * ticket_size = num_read + remaining;
+
+                if ( remaining != 0 )
+                    rc = RC ( rcKFG, rcNode, rcAccessing, rcBuffer, rcInsufficient );
+                else if ( num_read < bsize )
+                    buffer [ num_read ] = 0;
+            }
+        }
+    }
+
+    return rc;
+}
+
+
+/* EncryptionKey
+ *  return any associated encryption key
+ *
+ *  attempts to copy NUL-terminated key into provided buffer
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - encryption key output parameter
+ *
+ *  "key_size" [ OUT, NULL OKAY ] - returns the key size in
+ *  bytes, excluding any NUL termination.
+ */
+LIB_EXPORT rc_t CC KRepositoryEncryptionKey ( const KRepository *self,
+    char *buffer, size_t bsize, size_t *key_size )
+{
+    rc_t rc;
+
+    if ( self == NULL )
+        rc = RC ( rcKFG, rcNode, rcAccessing, rcSelf, rcNull );
+    else
+    {
+        const KConfigNode *node;
+
+        if ( key_size != NULL )
+            * key_size = 0;
+
+        rc = KConfigNodeOpenNodeRead ( self -> node, & node, "encryption-key" );
+        if ( rc == 0 )
+        {
+            size_t num_read, remaining;
+            rc = KConfigNodeRead ( node, 0, buffer, bsize, & num_read, & remaining );
+            KConfigNodeRelease ( node );
+
+            if ( rc == 0 )
+            {
+                if ( key_size != NULL )
+                    * key_size = num_read + remaining;
+
+                if ( remaining != 0 )
+                    rc = RC ( rcKFG, rcNode, rcAccessing, rcBuffer, rcInsufficient );
+                else if ( num_read < bsize )
+                    memset ( & buffer [ num_read ], 0, bsize - num_read );
+            }
+        }
+        else if ( GetRCState ( rc ) == rcNotFound )
+        {
+            char path [ 4096 ];
+            rc_t rc2 = KRepositoryEncryptionKeyFile ( self, path, sizeof path, NULL );
+            if ( rc2 == 0 )
+            {
+                KDirectory *wd;
+                rc2 = KDirectoryNativeDir ( & wd );
+                if ( rc2 == 0 )
+                {
+                    const KFile *keyFile;
+                    rc2 = KDirectoryOpenFileRead ( wd, & keyFile, path );
+                    KDirectoryRelease ( wd );
+                    if ( rc2 == 0 )
+                    {
+                        size_t num_read;
+                        rc = KFileReadAll ( keyFile, 0, buffer, bsize, & num_read );
+                        if ( rc == 0 )
+                        {
+                            if ( num_read == bsize )
+                            {
+                                uint64_t eof;
+                                rc = KFileSize ( keyFile, & eof );
+                                if ( rc == 0 )
+                                    num_read = ( size_t ) eof;
+                                else
+                                    num_read = 0;
+
+                                rc = RC ( rcKFG, rcFile, rcReading, rcBuffer, rcInsufficient );
+                                memset ( buffer, 0, bsize );
+                            }
+                            else if ( num_read == 0 )
+                            {
+                                rc = RC ( rcKFG, rcFile, rcReading, rcFile, rcEmpty );
+                                memset ( buffer, 0, bsize );
+                            }
+                            else
+                            {
+                                char *eoln = string_chr ( buffer, num_read, '\n' );
+                                if ( eoln != NULL )
+                                {
+                                    if ( eoln == buffer )
+                                        num_read = 0;
+                                    else if ( eoln [ -1 ] == '\r' )
+                                        num_read = eoln - buffer - 1;
+                                    else
+                                        num_read = eoln - buffer;
+                                }
+
+                                if ( key_size != NULL )
+                                    * key_size = num_read;
+
+                                memset ( & buffer [ num_read ], 0, bsize - num_read );
+                            }
+                        }
+
+                        KFileRelease ( keyFile );
+                    }
+                }
+            }
+        }
+    }
+
+    return rc;
+}
+
+
+/* EncryptionKeyFile
+ *  return path to any associated encryption key file
+ *
+ *  attempts to copy NUL-terminated path into provided buffer
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - key file path output parameter
+ *
+ *  "path_size" [ OUT, NULL OKAY ] - returns the path size in
+ *  bytes, excluding any NUL termination.
+ */
+LIB_EXPORT rc_t CC KRepositoryEncryptionKeyFile ( const KRepository *self,
+    char *buffer, size_t bsize, size_t *path_size )
+{
+    rc_t rc;
+
+    if ( self == NULL )
+        rc = RC ( rcKFG, rcNode, rcAccessing, rcSelf, rcNull );
+    else
+    {
+        const KConfigNode *node;
+
+        if ( path_size != NULL )
+            * path_size = 0;
+
+        rc = KConfigNodeOpenNodeRead ( self -> node, & node, "encryption-key-path" );
+        if ( rc == 0 )
+        {
+            size_t num_read, remaining;
+            rc = KConfigNodeRead ( node, 0, buffer, bsize, & num_read, & remaining );
+            KConfigNodeRelease ( node );
+
+            if ( rc == 0 )
+            {
+                if ( path_size != NULL )
+                    * path_size = num_read + remaining;
+
+                if ( remaining != 0 )
+                    rc = RC ( rcKFG, rcNode, rcAccessing, rcBuffer, rcInsufficient );
+                else if ( num_read < bsize )
+                    buffer [ num_read ] = 0;
+            }
+        }
+    }
+
+    return rc;
+}
+
+
+/* Description
+ *  return any associated descriptive text
+ *
+ *  attempts to copy NUL-terminated description into provided buffer
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - description text output parameter
+ *
+ *  "desc_size" [ OUT, NULL OKAY ] - returns the text size in
+ *  bytes, excluding any NUL termination.
+ */
+LIB_EXPORT rc_t CC KRepositoryDescription ( const KRepository *self,
+    char *buffer, size_t bsize, size_t *desc_size )
+{
+    rc_t rc;
+
+    if ( self == NULL )
+        rc = RC ( rcKFG, rcNode, rcAccessing, rcSelf, rcNull );
+    else
+    {
+        const KConfigNode *node;
+
+        if ( desc_size != NULL )
+            * desc_size = 0;
+
+        rc = KConfigNodeOpenNodeRead ( self -> node, & node, "description" );
+        if ( rc == 0 )
+        {
+            size_t num_read, remaining;
+            rc = KConfigNodeRead ( node, 0, buffer, bsize, & num_read, & remaining );
+            KConfigNodeRelease ( node );
+
+            if ( rc == 0 )
+            {
+                if ( desc_size != NULL )
+                    * desc_size = num_read + remaining;
+
+                if ( remaining != 0 )
+                    rc = RC ( rcKFG, rcNode, rcAccessing, rcBuffer, rcInsufficient );
+                else if ( num_read < bsize )
+                    buffer [ num_read ] = 0;
+            }
+        }
+    }
+
+    return rc;
+}
+
+
+/*--------------------------------------------------------------------------
+ * KRepositoryVector
+ *  uses Vector API
+ *  holds zero or more KRepository objects
+ */
+
+
+/* Whack
+ *  destroy your vector
+ */
+LIB_EXPORT rc_t CC KRepositoryVectorWhack ( KRepositoryVector *self )
+{
+    if ( self == NULL )
+        return RC ( rcKFG, rcVector, rcDestroying, rcSelf, rcNull );
+
+    VectorWhack ( self, KRepositoryWhackEntry, NULL );
+    return 0;
+}
+
+
+/*--------------------------------------------------------------------------
+ * KRepositoryMgr
+ *  manages structured access to repositories
+ */
+struct KRepositoryMgr
+{
+    const KConfig *ro_cfg;
+    KConfig *rw_cfg;
+    KRefcount refcount;
+};
+
+
+/* Whack
+ */
+static
+rc_t KRepositoryMgrWhack ( KRepositoryMgr *self )
+{
+    if ( self -> ro_cfg )
+        KConfigRelease ( self -> ro_cfg );
+    if ( self -> rw_cfg )
+        KConfigRelease ( self -> rw_cfg );
+    free ( self );
+    return 0;
+}
+
+
+/* Make
+ *  create a repository manager
+ *  uses values from "self"
+ */
+LIB_EXPORT rc_t CC KConfigMakeRepositoryMgrRead ( const KConfig *self, const KRepositoryMgr **mgrp )
+{
+    rc_t rc;
+
+    if ( mgrp == NULL )
+        rc = RC ( rcKFG, rcMgr, rcConstructing, rcParam, rcNull );
+    else
+    {
+        if ( self == NULL )
+            rc = RC ( rcKFG, rcMgr, rcConstructing, rcSelf, rcNull );
+        else
+        {
+            KRepositoryMgr *mgr = calloc ( 1, sizeof * mgr );
+            if ( mgr == NULL )
+                rc = RC ( rcKFG, rcMgr, rcConstructing, rcMemory, rcExhausted );
+            else
+            {
+                rc = KConfigAddRef ( self );
+                if ( rc == 0 )
+                {
+                    mgr -> ro_cfg = self;
+                    KRefcountInit ( & mgr -> refcount, 1, "KRepositoryMgr", "make-read", "mgr" );
+                    * mgrp = mgr;
+                    return 0;
+                }
+
+                free ( mgr );
+            }
+        }
+
+        * mgrp = NULL;
+    }
+
+    return rc;
+}
+
+LIB_EXPORT rc_t CC KConfigMakeRepositoryMgrUpdate ( KConfig *self, KRepositoryMgr **mgrp )
+{
+    rc_t rc;
+
+    if ( mgrp == NULL )
+        rc = RC ( rcKFG, rcMgr, rcConstructing, rcParam, rcNull );
+    else
+    {
+        if ( self == NULL )
+            rc = RC ( rcKFG, rcMgr, rcConstructing, rcSelf, rcNull );
+        else
+        {
+            KRepositoryMgr *mgr = calloc ( 1, sizeof * mgr );
+            if ( mgr == NULL )
+                rc = RC ( rcKFG, rcMgr, rcConstructing, rcMemory, rcExhausted );
+            else
+            {
+                rc = KConfigAddRef ( self );
+                if ( rc == 0 )
+                {
+                    mgr -> rw_cfg = self;
+                    KRefcountInit ( & mgr -> refcount, 1, "KRepositoryMgr", "make-update", "mgr" );
+                    * mgrp = mgr;
+                    return 0;
+                }
+
+                free ( mgr );
+            }
+        }
+
+        * mgrp = NULL;
+    }
+
+    return rc;
+}
+
+
+/* AddRef
+ * Release
+ */
+LIB_EXPORT rc_t CC KRepositoryMgrAddRef ( const KRepositoryMgr *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "KRepositoryMgr" ) )
+        {
+        case krefLimit:
+            return RC ( rcKFG, rcMgr, rcAttaching, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+LIB_EXPORT rc_t CC KRepositoryMgrRelease ( const KRepositoryMgr *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "KRepositoryMgr" ) )
+        {
+        case krefWhack:
+            return KRepositoryMgrWhack ( ( KRepositoryMgr* ) self );
+        case krefLimit:
+            return RC ( rcKFG, rcMgr, rcReleasing, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+
+static
+const KConfig *KRepositoryMgrGetROKConfig ( const KRepositoryMgr *self )
+{
+    return self -> ro_cfg ? self -> ro_cfg : self -> rw_cfg;
+}
+
+static
+rc_t KRepositoryMgrSubCategoryRepositories ( const KConfigNode *sub,
+    KRepCategory category, KRepSubCategory subcategory, KRepositoryVector *repositories )
+{
+    KNamelist *repo_names;
+    rc_t rc = KConfigNodeListChildren ( sub, & repo_names );
+    if ( rc == 0 )
+    {
+        uint32_t i, count;
+        rc = KNamelistCount ( repo_names, & count );
+        for ( i = 0; i < count && rc == 0; ++ i )
+        {
+            const char *repo_name;
+            rc = KNamelistGet ( repo_names, i, & repo_name );
+            if ( rc == 0 )
+            {
+                const KConfigNode *node;
+                rc = KConfigNodeOpenNodeRead ( sub, & node, repo_name );
+                if ( rc == 0 )
+                {
+                    KRepository *repo;
+                    rc = KRepositoryMake ( & repo, node, repo_name, category, subcategory );
+                    if ( rc == 0 )
+                    {
+                        rc = VectorAppend ( repositories, NULL, repo );
+                        if ( rc != 0 )
+                            KRepositoryWhack ( repo );
+                    }
+
+                    KConfigNodeRelease ( node );
+                }
+            }
+        }
+
+        KNamelistRelease ( repo_names );
+    }
+
+    return rc;
+}
+
+static
+rc_t KRepositoryMgrCategoryRepositories ( const KConfigNode *cat,
+    KRepCategory category, KRepositoryVector *repositories )
+{
+    KNamelist *sub_names;
+    rc_t rc = KConfigNodeListChildren ( cat, & sub_names );
+    if ( rc == 0 )
+    {
+        uint32_t i, count;
+        rc = KNamelistCount ( sub_names, & count );
+        for ( i = 0; i < count && rc == 0; ++ i )
+        {
+            const char *sub_name;
+            rc = KNamelistGet ( sub_names, i, & sub_name );
+            if ( rc == 0 )
+            {
+                KRepSubCategory subcategory = krepBadSubCategory;
+                if ( strcmp ( "main", sub_name ) == 0 )
+                    subcategory = krepMainSubCategory;
+                else if ( strcmp ( "aux", sub_name ) == 0 )
+                    subcategory = krepAuxSubCategory;
+                else if ( strcmp ( "protected", sub_name ) == 0 )
+                    subcategory = krepProtectedSubCategory;
+
+                if ( subcategory != krepBadSubCategory )
+                {
+                    const KConfigNode *sub;
+                    rc = KConfigNodeOpenNodeRead ( cat, & sub, sub_name );
+                    if ( rc == 0 )
+                    {
+                        rc = KRepositoryMgrSubCategoryRepositories ( sub, category, subcategory, repositories );
+                        KConfigNodeRelease ( sub );
+                    }
+                }
+            }
+        }
+
+        KNamelistRelease ( sub_names );
+    }
+
+    return rc;
+}
+
+
+/* UserRepositories
+ *  retrieve all user repositories in a Vector
+ */
+LIB_EXPORT rc_t CC KRepositoryMgrUserRepositories ( const KRepositoryMgr *self,
+    KRepositoryVector *user_repositories )
+{
+    rc_t rc;
+
+    if ( user_repositories == NULL )
+        rc = RC ( rcKFG, rcMgr, rcAccessing, rcParam, rcNull );
+    else
+    {
+        VectorInit ( user_repositories, 0, 8 );
+
+        if ( self == NULL )
+            rc = RC ( rcKFG, rcMgr, rcAccessing, rcSelf, rcNull );
+        else
+        {
+            const KConfig *kfg = KRepositoryMgrGetROKConfig ( self );
+
+            const KConfigNode *user;
+            rc = KConfigOpenNodeRead ( kfg, & user, "/repository/user" );
+            if ( rc == 0 )
+            {
+                rc = KRepositoryMgrCategoryRepositories ( user, krepUserCategory, user_repositories );
+                KConfigNodeRelease ( user );
+                if ( rc == 0 )
+                    VectorReorder ( user_repositories, KRepositorySort, NULL );
+            }
+
+            if ( rc != 0 )
+                KRepositoryVectorWhack ( user_repositories );
+        }
+    }
+
+    return rc;
+}
+
+
+/* SiteRepositories
+ *  retrieve all site repositories in a Vector
+ */
+LIB_EXPORT rc_t CC KRepositoryMgrSiteRepositories ( const KRepositoryMgr *self,
+    KRepositoryVector *site_repositories )
+{
+    rc_t rc;
+
+    if ( site_repositories == NULL )
+        rc = RC ( rcKFG, rcMgr, rcAccessing, rcParam, rcNull );
+    else
+    {
+        VectorInit ( site_repositories, 0, 8 );
+
+        if ( self == NULL )
+            rc = RC ( rcKFG, rcMgr, rcAccessing, rcSelf, rcNull );
+        else
+        {
+            const KConfig *kfg = KRepositoryMgrGetROKConfig ( self );
+
+            const KConfigNode *site;
+            rc = KConfigOpenNodeRead ( kfg, & site, "/repository/site" );
+            if ( rc == 0 )
+            {
+                rc = KRepositoryMgrCategoryRepositories ( site, krepSiteCategory, site_repositories );
+                KConfigNodeRelease ( site );
+                if ( rc == 0 )
+                    VectorReorder ( site_repositories, KRepositorySort, NULL );
+            }
+
+            if ( rc != 0 )
+                KRepositoryVectorWhack ( site_repositories );
+        }
+    }
+
+    return rc;
+}
+
+
+/* RemoteRepositories
+ *  retrieve all remote repositories in a Vector
+ */
+LIB_EXPORT rc_t CC KRepositoryMgrRemoteRepositories ( const KRepositoryMgr *self,
+    KRepositoryVector *remote_repositories )
+{
+    rc_t rc;
+
+    if ( remote_repositories == NULL )
+        rc = RC ( rcKFG, rcMgr, rcAccessing, rcParam, rcNull );
+    else
+    {
+        VectorInit ( remote_repositories, 0, 8 );
+
+        if ( self == NULL )
+            rc = RC ( rcKFG, rcMgr, rcAccessing, rcSelf, rcNull );
+        else
+        {
+            const KConfig *kfg = KRepositoryMgrGetROKConfig ( self );
+
+            const KConfigNode *remote;
+            rc = KConfigOpenNodeRead ( kfg, & remote, "/repository/remote" );
+            if ( rc == 0 )
+            {
+                rc = KRepositoryMgrCategoryRepositories ( remote, krepRemoteCategory, remote_repositories );
+                KConfigNodeRelease ( remote );
+                if ( rc == 0 )
+                    VectorReorder ( remote_repositories, KRepositorySort, NULL );
+            }
+
+            if ( rc != 0 )
+                KRepositoryVectorWhack ( remote_repositories );
+        }
+    }
+
+    return rc;
+}
+
+
+/* CurrentProtectedRepository
+ *  returns the currently active user protected repository
+ */
+LIB_EXPORT rc_t CC KRepositoryMgrCurrentProtectedRepository ( const KRepositoryMgr *self, const KRepository **protected )
+{
+    rc_t rc;
+
+    if ( protected == NULL )
+        rc = RC ( rcKFG, rcMgr, rcAccessing, rcParam, rcNull );
+    else
+    {
+        * protected = NULL;
+
+        if ( self == NULL )
+            rc = RC ( rcKFG, rcMgr, rcAccessing, rcSelf, rcNull );
+        else
+        {
+            KRepositoryVector v;
+            rc = KRepositoryMgrUserRepositories ( self, & v );
+            if ( rc == 0 )
+            {
+                KDirectory *wd;
+                rc = KDirectoryNativeDir ( & wd );
+                if ( rc == 0 )
+                {
+                    /* we need services of system directory */
+                    struct KSysDir *sysDir = KDirectoryGetSysDir ( wd );
+
+                    /* allocate buffer space for 3 paths */
+                    const size_t path_size = 4096;
+                    char *wd_path = malloc ( path_size * 3 );
+                    if ( wd_path == NULL )
+                        rc = RC ( rcKFG, rcMgr, rcAccessing, rcMemory, rcExhausted );
+                    else
+                    {
+                        /* the working directory already has a canonical path */
+                        rc = KDirectoryResolvePath ( wd, true, wd_path, path_size, "." );
+                        if ( rc == 0 )
+                        {
+                            size_t wd_size = string_size ( wd_path );
+
+                            /* look for all protected user repositories */
+                            uint32_t i, count = VectorLength ( & v );
+                            for ( i = 0; i < count; ++ i )
+                            {
+                                const KRepository *r = ( const void* ) VectorGet ( & v, i );
+                                if ( r -> subcategory == krepProtectedSubCategory )
+                                {
+                                    size_t resolved_size;
+                                    char *resolved = wd_path + path_size;
+
+                                    /* get stated root path to repository */
+                                    char *root = resolved + path_size;
+                                    rc = KRepositoryRoot ( r, root, path_size, NULL );
+                                    if ( rc != 0 )
+                                        break;
+
+                                    /* get its canonical path */
+                                    rc = KSysDirRealPath ( sysDir, resolved, path_size, root );
+                                    if ( rc != 0 )
+                                        break;
+
+                                    /* we know the current directory's canonical path size
+                                       and we know the repository's canonical path size.
+                                       to be "within" the repository, the current directory's
+                                       size must be >= repository path size, and must match
+                                       exactly the repository path itself over those bytes. */
+                                    resolved_size = string_size ( resolved );
+                                    if ( resolved_size <= wd_size && memcmp ( wd_path, resolved, resolved_size ) == 0 )
+                                    {
+                                        /* still have a little more to check */
+                                        if ( resolved_size == wd_size ||
+                                             wd_path [ resolved_size ] == '/' )
+                                        {
+                                            /* we are in the repository */
+                                            rc = KRepositoryAddRef ( r );
+                                            if ( rc == 0 )
+                                                * protected = r;
+                                            break;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+
+                        free ( wd_path );
+                    }
+
+                    KDirectoryRelease ( wd );
+                }
+
+                KRepositoryVectorWhack ( & v );
+            }
+
+            if ( rc == 0 && * protected == NULL )
+                rc = RC ( rcKFG, rcMgr, rcAccessing, rcNode, rcNotFound );
+        }
+    }
+
+    return rc;
+}
diff --git a/libs/kfs/Makefile b/libs/kfs/Makefile
index 3d83284..87421b3 100644
--- a/libs/kfs/Makefile
+++ b/libs/kfs/Makefile
@@ -81,16 +81,14 @@ tag: \
 #
 $(LIBDIR)/libkfs: $(addprefix $(LIBDIR)/libkfs.,$(LIBEXT))
 
-KFS_SRC = \
-	path \
-	syspath \
+KFS_CMN = \
 	directory \
 	arrayfile \
 	file \
 	sysdir \
 	sysfile \
-	mmap \
 	sysmmap \
+	syslockfile \
 	sysdll \
 	gzip \
 	bzip \
@@ -105,19 +103,32 @@ KFS_SRC = \
 	tar \
 	teefile \
 	buffile \
+	buffile-read \
 	buffile-write \
 	subfile \
 	nullfile \
 	countfile \
 	dir_test \
 	pagefile \
-	pmem
+	pmem \
+	readheadfile \
+	ramfile \
+	quickmount \
+	report \
+	lockfile \
+	syslockfile \
+	cacheteefile
+
+KFS_SRC = \
+	mmap \
+	$(KFS_CMN)
 
 
 KFS_OBJ = \
 	$(addsuffix .$(LOBX),$(KFS_SRC))
 
 KFS_LIB = \
+	-dkproc \
 	-dklib \
 	-ddl \
 	-dz \
@@ -156,7 +167,8 @@ KFF_OBJ = \
 	$(addsuffix .$(LOBX),$(KFF_SRC))
 
 KFF_LIB = \
-	-dklib 
+	-dkfg \
+	-dklib
 
 ifneq (win,$(OS))
 	KFF_LIB += -lmagic
diff --git a/libs/kfs/arc.c b/libs/kfs/arc.c
index 1d7c993..1779673 100644
--- a/libs/kfs/arc.c
+++ b/libs/kfs/arc.c
@@ -28,6 +28,7 @@
 #include "toc-priv.h"
 
 #include <kfs/arc.h>
+
 #include <klib/debug.h>
 #include <klib/log.h>
 #include <klib/status.h>
@@ -38,6 +39,9 @@
 #include <klib/pbstree.h>
 #include <klib/text.h>
 #include <klib/sort.h>
+#include <klib/printf.h>
+#include <klib/klib-priv.h> /* ReportRecordZombieFile */
+
 #include <kfs/directory.h>
 #include <kfs/file.h>
 #include <kfs/toc.h>
@@ -1121,43 +1125,47 @@ uint32_t KArcDirFullPathType (const KArcDir *self, const char * path)
 
     for (loopcount = 0; loopcount < KARC_LINK_RESOLVE_LOOPMAX; ++loopcount)
     {
-	rc = KArcDirResolvePathNode (self, rcConstructing, local_path, false, &node, &type); 
-	if (rc != 0)
-	{
-	    /* TODO: filter rc into kptBadPath or kptNotFound... */
-	    return (tt | kptNotFound);
-	}
-	switch (type)
-	{
-	default:
-	    return kptBadPath;
+        rc = KArcDirResolvePathNode (self,
+            rcConstructing, local_path, false, &node, &type); 
+        if (rc != 0)
+        {
+            /* TODO: filter rc into kptBadPath or kptNotFound... */
+            return (tt | kptNotFound);
+        }
+        switch (type)
+        {
+        default:
+            return kptBadPath;
 
-	case ktocentrytype_unknown:
-	    return kptBadPath;
+        case ktocentrytype_unknown:
+            return kptBadPath;
 
-	case ktocentrytype_hardlink:
-	    return kptDir;
+        case ktocentrytype_hardlink:
+            return kptDir;
 
-	case ktocentrytype_dir:
-	    return tt | kptDir;
+        case ktocentrytype_dir:
+            return tt | kptDir;
 
-	case ktocentrytype_file:
-	case ktocentrytype_emptyfile:
-	    return tt | kptFile;
+        case ktocentrytype_file:
+        case ktocentrytype_emptyfile:
+            return tt | kptFile;
 
-	case ktocentrytype_chunked:
-	    return tt | kptFile;
+        case ktocentrytype_chunked:
+            return tt | kptFile;
 
-	case ktocentrytype_softlink:
-	    tt = kptAlias;
-	    if (KTocEntryGetSoftTarget(node,&local_path) != 0)
-		return kptAlias|kptNotFound;
-	    break;
+        case ktocentrytype_softlink:
+            tt = kptAlias;
+            if (KTocEntryGetSoftTarget(node,&local_path) != 0)
+                return kptAlias|kptNotFound;
+            break;
 
         case ktocentrytype_zombiefile:
+            PLOGMSG (klogWarn, (klogWarn,
+                "zombie file detected: '$(P)'", "P=%s", path));
+            ReportRecordZombieFile();
             return tt | kptZombieFile;
 
-	}
+        }
     }
     return kptBadPath;
 }
@@ -2172,6 +2180,12 @@ rc_t KArcFileMake (KArcFile ** self,
      * Proceed with non-NULL parameters
      */
     rc = KFileSize (archive, &size);
+    if (GetRCState(rc) == rcUnsupported)
+    {
+        size = ~(uint64_t)0;
+        rc = 0;
+    }
+
     if (rc == 0)
     {
         /* we need to check chunked files here as well */
@@ -2197,6 +2211,7 @@ rc_t KArcFileMake (KArcFile ** self,
             {
                 rc = KFileInit (&pF->dad,				/* initialize base class */
                                 (const KFile_vt*)&vtKArcFile,	/* VTable for KArcFile */
+                                "KArcFile", "no-name",
                                 true,				/* read allowed */
                                 false);				/* write disallowed */
                 if (rc == 0)
@@ -3432,12 +3447,18 @@ LIB_EXPORT rc_t CC KDirectoryToKArcDir (const KDirectory * self, const KArcDir *
 
 static
 rc_t KDirectoryOpenArcDirRead_intern( const KDirectory * self,
-    const KDirectory ** pdir, bool chroot, bool silent,
-    const char * path, KArcFSType baseType,
-    rc_t ( CC * parse )( KToc *, const void *,
-        bool( CC* )( const KDirectory*, const char *, void*), void * ),
-    bool( CC* filter )( const KDirectory*, const char *, void * ),
-    void * filterparam )
+                                      const KDirectory ** pdir,
+                                      bool chroot,
+                                      bool silent,
+                                      const char * path,
+                                      KArcFSType baseType,
+                                      void * _archive,
+                                      rc_t ( CC * parse )( KToc *, const void *,
+                                                           bool( CC* )( const KDirectory*,
+                                                                        const char *, void*),
+                                                           void * ),
+                                      bool( CC* filter )( const KDirectory*, const char *, void * ),
+                                      void * filterparam )
 {
     union
     {
@@ -3454,7 +3475,7 @@ rc_t KDirectoryOpenArcDirRead_intern( const KDirectory * self,
     char     cpath [ 4096 ];
     uint32_t type;
 
-    archive.v = NULL;
+    archive.v = _archive;
     /* -----
      * sanity check parameters  The first bunch is from the base class KDirectory.
      */
@@ -3499,77 +3520,110 @@ rc_t KDirectoryOpenArcDirRead_intern( const KDirectory * self,
         return RC ( rcFS, rcDirectory, rcAccessing, rcPath, rcInvalid );
     }
 
-    /* -----
-     * we got a local String type mixed in along with ASCIZ cstrings
-     */
-    rc = KDirectoryResolvePath ( self, true, cpath, sizeof (cpath), path );
-    if ( rc == 0 )
+    if (_archive == NULL)
+    {
+        /* -----
+         * we got a local String type mixed in along with ASCIZ cstrings
+         */
+        rc = KDirectoryResolvePath ( self, true, cpath, sizeof (cpath), path );
+        if ( rc == 0 )
+        {
+            size_t ln;
+            ln = strlen (cpath);
+            if ((cpath[ln-1] == '.')&&(cpath[ln-2] == '/'))
+                cpath[ln-2] = '\0';
+        }
+        else
+            return rc;
+    }
+    else
     {
         size_t ln;
-        ln = strlen (cpath);
-        if ((cpath[ln-1] == '.')&&(cpath[ln-2] == '/'))
-            cpath[ln-2] = '\0';
+
+        rc = string_printf (cpath, sizeof cpath, &ln, path);
+        if ((rc == 0) && (ln > sizeof cpath))
+            rc = RC (rcFS, rcArc, rcOpening, rcBuffer, rcInsufficient);
     }
-    if ( rc != 0 )
-        return rc;
+
     StringInitCString ( &spath, cpath );
     pathlen = strlen ( cpath );
 
-    type = KDirectoryVPathType ( self, cpath, NULL );
-    switch ( type & ~kptAlias )
-    {
-    default:
-        rc = RC ( rcFS, rcArc, rcOpening, rcFile, rcUnexpected );
-        if ( !silent )
-            LOGERR (klogErr, rc, "Unusable file type" );
-        break;
-    case kptNotFound:
-    case kptBadPath:
-        rc = RC ( rcFS, rcArc, rcOpening, rcFile, rcNotFound );
-        break;
-
-    case kptFile:
-    /* -----
-     * Open the archive file as a KFILE for internal use
-     *
-     * Fail / quit if we couldn't
-     */
-    if ( baseType != tocKFile )
+    if (_archive != NULL)
     {
-        rc = RC ( rcFS, rcArc, rcOpening, rcFile, rcIncorrect );
-        if ( !silent )
-            LOGERR ( klogErr, rc, "Mismatch of file type and expected type" );
-        return rc;
+        switch (baseType)
+        {
+        case tocKFile:
+            rc = KFileAddRef (_archive);
+            break;
+        case tocKDirectory:
+            rc = KDirectoryAddRef (_archive);
+            break;
+        default:
+            /* i dunno */
+            break;
+        }
+        if (rc)
+            return rc;
     }
-
-    rc = KDirectoryVOpenFileRead ( self, &archive.f, cpath, NULL );
-    if ( rc != 0 && !silent )
+    else
     {
-        PLOGERR ( klogErr, ( klogErr, rc,
-                             "Failed to open archive file $(file)",
-                             PLOG_S (file),
-                             path ) );
-    }
-    break;
-
-    case kptDir:
-        if ( baseType != tocKDirectory )
+        type = KDirectoryVPathType ( self, cpath, NULL );
+        switch ( type & ~kptAlias )
         {
-            rc = RC ( rcFS, rcArc, rcOpening, rcFile, rcInconsistent );
+        default:
+            rc = RC ( rcFS, rcArc, rcOpening, rcFile, rcUnexpected );
             if ( !silent )
-                LOGERR ( klogErr, rc, "Mismatch of file type and expected type" );
-            return rc;
-        }
-        rc = KDirectoryVOpenDirRead ( self, &archive.d, false, cpath, NULL );
-        if ( rc != 0 && !silent )
-        {
-            PLOGMSG ( klogErr,
-            ( klogErr, "Failed to open archive directory $(file)",
-              PLOG_S ( file ), path ) );
-        }
-        break;
-    } /* switch ( type & ~kptAlias ) */
+                LOGERR (klogErr, rc, "Unusable file type" );
+            break;
+        case kptNotFound:
+        case kptBadPath:
+            rc = RC ( rcFS, rcArc, rcOpening, rcFile, rcNotFound );
+            break;
+
+        case kptFile:
+            /* -----
+             * Open the archive file as a KFILE for internal use
+             *
+             * Fail / quit if we couldn't
+             */
+            if ( baseType != tocKFile )
+            {
+                rc = RC ( rcFS, rcArc, rcOpening, rcFile, rcIncorrect );
+                if ( !silent )
+                    LOGERR ( klogErr, rc, "Mismatch of file type and expected type" );
+                return rc;
+            }
+
+            rc = KDirectoryVOpenFileRead ( self, &archive.f, cpath, NULL );
+            if ( rc != 0 && !silent )
+            {
+                PLOGERR ( klogErr, ( klogErr, rc,
+                                     "Failed to open archive file $(file)",
+                                     PLOG_S (file),
+                                     path ) );
+            }
+        
+            break;
 
+        case kptDir:
+            if ( baseType != tocKDirectory )
+            {
+                rc = RC ( rcFS, rcArc, rcOpening, rcFile, rcInconsistent );
+                if ( !silent )
+                    LOGERR ( klogErr, rc, "Mismatch of file type and expected type" );
+                return rc;
+            }
+
+            rc = KDirectoryVOpenDirRead ( self, &archive.d, false, cpath, NULL );
+            if ( rc != 0 && !silent )
+            {
+                PLOGMSG ( klogErr,
+                          ( klogErr, "Failed to open archive directory $(file)",
+                            PLOG_S ( file ), path ) );
+            }
+            break;
+        } /* switch ( type & ~kptAlias ) */
+    }
     if ( rc == 0 )
     {
         /* -----
@@ -3635,7 +3689,6 @@ rc_t KDirectoryOpenArcDirRead_intern( const KDirectory * self,
      * if rc is non-zero we failed somewhere above.
      * Release allocated memory and exit with that error code.
      */
-
     if ( archive.v != NULL )
     {
         switch ( baseType )
@@ -3652,6 +3705,8 @@ rc_t KDirectoryOpenArcDirRead_intern( const KDirectory * self,
         }
     }
 
+    rc = rc | rcaux;
+
     if ( rc != 0 )
     {
         if ( arcdir != NULL )
@@ -3661,7 +3716,8 @@ rc_t KDirectoryOpenArcDirRead_intern( const KDirectory * self,
 
     if ( toc != NULL )
         KTocRelease ( toc );
-    return rc | rcaux;
+
+    return rc;
 }
 
 
@@ -3712,8 +3768,9 @@ LIB_EXPORT rc_t CC KDirectoryOpenArcDirRead( const KDirectory * self,
         pdir,
         chroot, 
         false,
-        path, 
+        path,
         baseType,
+        NULL,
         parse,
         filter,
         filterparam );
@@ -3736,10 +3793,34 @@ LIB_EXPORT rc_t CC KDirectoryOpenArcDirRead_silent( const KDirectory * self,
         true,
         path, 
         baseType,
+        NULL,
         parse,
         filter,
         filterparam );
 }
+LIB_EXPORT rc_t CC KDirectoryOpenArcDirRead_silent_preopened( const KDirectory * self,
+    const KDirectory ** pdir,
+    bool chroot,
+    const char * path,
+    KArcFSType baseType,
+    void * archive,
+    rc_t ( CC * parse )( KToc *, const void *,
+        bool( CC * )( const KDirectory *, const char *, void * ), void * ),
+    bool ( CC * filter )( const KDirectory*, const char *, void *),
+    void * filterparam )
+{
+    return KDirectoryOpenArcDirRead_intern( self,
+        pdir,
+        chroot, 
+        true,
+        path, 
+        baseType,
+        archive,
+        parse,
+        filter,
+        filterparam );
+}
+
 
 /* ======================================================================
  * 
diff --git a/libs/kfs/buffile-read.c b/libs/kfs/buffile-read.c
new file mode 100644
index 0000000..7635568
--- /dev/null
+++ b/libs/kfs/buffile-read.c
@@ -0,0 +1,265 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+typedef struct KBufReadFile KBufReadFile;
+#define KFILE_IMPL KBufReadFile
+
+#include <kfs/extern.h>
+
+#include <kfs/file.h>
+#include <kfs/impl.h>
+#include <klib/debug.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+
+/*-----------------------------------------------------------------------
+ * KBufReadFile
+ */
+struct KBufReadFile
+{
+    KFile dad;
+
+    uint64_t pos;       /* position of buff within the original file */
+
+    const KFile *f;           /* original file being buffered */
+
+    size_t bsize;       /* size of the buffer */
+    size_t num_valid;   /* how much of the buffer is actually valid */
+
+    uint8_t buff [ 1 ];
+};
+
+static
+rc_t CC KBufReadFileDestroy ( KBufReadFile *self )
+{
+    rc_t rc = KFileRelease ( self -> f );
+    if ( rc == 0 )
+        free ( self );
+    return rc;
+}
+
+static
+struct KSysFile* CC KBufReadFileSysFile ( const KBufReadFile *self, uint64_t *offset )
+{
+    /* does not support SysFile */
+    * offset = 0;
+    return NULL;
+}
+
+static
+rc_t CC KBufReadFileRandomAccess ( const KBufReadFile *self )
+{
+    return KFileRandomAccess ( self -> f );
+}
+
+static
+rc_t CC KBufReadFileSize ( const KBufReadFile *self, uint64_t *size )
+{
+    return KFileSize ( self -> f, size );
+}
+
+static
+rc_t CC KBufReadFileSetSize ( KBufReadFile *self, uint64_t size )
+{
+    return RC ( rcFS, rcFile, rcAccessing, rcFunction, rcUnsupported );
+}
+
+static
+rc_t CC KBufReadFileRead ( const KBufReadFile *cself, uint64_t pos,
+    void *buffer, size_t bsize, size_t *num_read )
+{
+    rc_t rc = 0;
+
+    assert (cself);
+    assert (buffer);
+    assert (num_read);
+
+    /* start assuming nothing will be read */
+    *num_read = 0;
+
+    if (bsize != 0)
+    {
+        KBufReadFile * self = (KBufReadFile *)cself;
+        uint64_t new_pos; 
+        size_t new_offset;
+
+        /* cast might be a no-op */
+        new_offset = (size_t)(pos % cself->bsize);
+        new_pos = pos - new_offset;
+
+        /* we need to read if we are on the wrong 'sector page'
+         * or the current 'sector page' isn't long enough.
+         *
+         * If on the wrong page just kill the contents
+         */
+        if (new_pos != cself->pos)
+        {
+            self->num_valid = 0;
+            self->pos = new_pos;
+        }
+
+        /* new we agree on the 'sector page' even if we have nothing
+         * valid in it */
+        if ((self->num_valid == 0) || (self->num_valid <= (size_t)new_offset))
+        {
+            size_t new_num_read;
+            rc = KFileReadAll (self->f, self->pos + self->num_valid,
+                               self->buff + self->num_valid, 
+                               self->bsize - self->num_valid,
+                               &new_num_read);
+            if (rc == 0)
+                self->num_valid += new_num_read;
+        }
+
+        /* now we have all we're gonna get this time */
+        if (new_offset < self->num_valid)
+        {
+            size_t to_copy;
+
+            to_copy = self->num_valid - new_offset;
+            if (to_copy > bsize)
+                to_copy = bsize;
+            
+            memmove (buffer, self->buff + new_offset, to_copy);
+            *num_read = to_copy;
+        }
+    }
+    return rc;
+}
+
+static
+rc_t CC KBufReadFileWrite ( KBufReadFile *self, uint64_t pos,
+    const void *buffer, size_t size, size_t *num_writ )
+{
+    return RC ( rcFS, rcFile, rcWriting, rcFunction, rcUnsupported );
+}
+
+static
+uint32_t CC KBufReadFileType ( const KBufReadFile * self )
+{
+    return KFileType ( self -> f );
+}
+
+static
+rc_t KBufReadFileMake ( KBufReadFile ** bp, const KFile *f, size_t bsize,
+    const KFile_vt *vt, bool read_enabled, bool write_enabled )
+{
+    rc_t rc;
+
+    KBufReadFile *buf = calloc ( sizeof * buf - 1 + bsize, 1 );
+    if ( buf == NULL )
+        rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        rc = KFileInit ( & buf -> dad, vt, "KBufReadFile", "no-name", read_enabled, write_enabled );
+        if ( rc == 0 )
+        {
+            rc = KFileAddRef ( f );
+            if ( rc == 0 )
+            {
+                buf -> f = ( KFile* ) f;
+                buf -> bsize = bsize;
+                * bp = buf;
+                return 0;
+            }
+        }
+
+        free ( buf );
+    }
+
+    return rc;
+}
+
+/* MakeBufferedWrite
+ *  make a writable file buffer
+ *
+ *  "buf" [ OUT ] - return parameter for new buffered file
+ *
+ *  "original" [ IN ] - source file to be buffered. must have read access
+ *
+ *  "bsize" [ IN ] - buffer size
+ */
+
+static
+const KFile_vt_v1 vtKBufReadFileRandWR_v1 =
+{
+    /* version */
+    1, 1,
+
+    /* 1.0 */
+    KBufReadFileDestroy,
+    KBufReadFileSysFile,
+    KBufReadFileRandomAccess,
+    KBufReadFileSize,
+    KBufReadFileSetSize,
+    KBufReadFileRead,
+    KBufReadFileWrite,
+
+    /* 1.1 */
+    KBufReadFileType
+};
+
+LIB_EXPORT 
+rc_t CC KBufReadFileMakeRead ( const KFile ** bp, const KFile * original, size_t bsize )
+{
+    rc_t rc;
+
+    if ( bp == NULL )
+        rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcNull );
+    else
+    {
+        if ( original == NULL )
+            rc = RC ( rcFS, rcFile, rcConstructing, rcFile, rcNull );
+        else if ( ! original -> read_enabled )
+        {
+            if ( original -> write_enabled )
+                rc = RC ( rcFS, rcFile, rcConstructing, rcFile, rcWriteonly );
+            else
+                rc = RC ( rcFS, rcFile, rcConstructing, rcFile, rcNoPerm );
+        }
+        else
+        {
+            KBufReadFile *buf;
+            rc = KBufReadFileMake ( & buf, original, bsize,
+                ( const KFile_vt* ) & vtKBufReadFileRandWR_v1, true, false );
+            if ( rc == 0 )
+            {
+                * bp = & buf -> dad;
+                return 0;
+            }
+        }
+
+        * bp = NULL;
+    }
+
+    return rc;
+}
diff --git a/libs/kfs/buffile-write.c b/libs/kfs/buffile-write.c
index a22dd5f..1d46ce9 100644
--- a/libs/kfs/buffile-write.c
+++ b/libs/kfs/buffile-write.c
@@ -284,7 +284,7 @@ rc_t KBufWriteFileMake ( KBufWriteFile ** bp, const KFile *f, size_t bsize,
     else
     {
         memset ( buf, 0, sizeof * buf );
-        rc = KFileInit ( & buf -> dad, vt, read_enabled, write_enabled );
+        rc = KFileInit ( & buf -> dad, vt, "KBufWriteFile", "no-name", read_enabled, write_enabled );
         if ( rc == 0 )
         {
             rc = KFileAddRef ( f );
@@ -332,7 +332,7 @@ const KFile_vt_v1 vtKBufWriteFileRandWR_v1 =
     KBufWriteFileType
 };
 
-rc_t KBufWriteFileMakeWrite ( KFile ** bp, KFile * original, size_t bsize )
+LIB_EXPORT rc_t KBufWriteFileMakeWrite ( KFile ** bp, KFile * original, size_t bsize )
 {
     rc_t rc;
 
diff --git a/libs/kfs/buffile.c b/libs/kfs/buffile.c
index 220ee04..ecff70c 100644
--- a/libs/kfs/buffile.c
+++ b/libs/kfs/buffile.c
@@ -396,7 +396,7 @@ rc_t KBufFileMake ( KBufFile ** bp, const KFile_vt *vt,
         rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
     else
     {
-        rc = KFileInit ( & buf -> dad, vt, read_enabled, write_enabled );
+        rc = KFileInit ( & buf -> dad, vt, "KBufFile", "no-name", read_enabled, write_enabled );
         if ( rc == 0 )
         {
             rc = KFileAddRef ( f );
diff --git a/libs/kfs/bzip.c b/libs/kfs/bzip.c
index 2adacf7..4fe4362 100644
--- a/libs/kfs/bzip.c
+++ b/libs/kfs/bzip.c
@@ -48,8 +48,8 @@ struct KBZipFile;
 #endif
 
 #define BZIP_DBGSTREAM(strm,msg)                                 \
-    BZIP_DEBUG(("%s: bz_stream (%p) %.35s\nnext_in %14zu "       \
-                "avail_in %6u total_in %10lu next_out %14zu "    \
+    BZIP_DEBUG(("%s: bz_stream (%p) %.35s\nnext_in %p "          \
+                "avail_in %6u total_in %10lu next_out %p "       \
                 "avail_out %6u total_out %10lu\n",               \
                 __func__, strm, msg,                             \
                 strm->next_in, strm->avail_in,                   \
@@ -213,7 +213,7 @@ rc_t KBZipFileReadInt (KBZipFile * self, void * buffer, size_t bsize, size_t * p
     size_t tot_read = 0;
     rc_t rc = 0;
 
-    BZIP_DEBUG (("%s: Enter requesting bsize %lu\n", __func__, bsize));
+    BZIP_DEBUG (("---------------\n%s: Enter requesting bsize %lu\n", __func__, bsize));
 
     strm = &self->strm;
 
@@ -222,6 +222,11 @@ rc_t KBZipFileReadInt (KBZipFile * self, void * buffer, size_t bsize, size_t * p
         char * this_out;
         size_t src_read;
         int zret;
+        bool bin;
+        bool bout;
+        bool end;
+
+        bin = (strm->avail_in != 0);
 
         BZIP_DEBUG (("%s: loop start tot_read %zu\n", __func__, tot_read));
 
@@ -283,7 +288,9 @@ rc_t KBZipFileReadInt (KBZipFile * self, void * buffer, size_t bsize, size_t * p
 
         case BZ_STREAM_END:
             BZIP_DEBUG (("%s: BZ_STREAM_END\n", __func__));
+            end = true;
             num_read = strm->next_out - this_out;
+            bout = (num_read != 0);
             BZIP_DEBUG (("%s: num_read %zu\n", __func__, num_read));
             self->completed = true;
             BZIP_DBGSTREAM (strm, "before BZ2_bzDecompressEnd");
@@ -316,7 +323,9 @@ rc_t KBZipFileReadInt (KBZipFile * self, void * buffer, size_t bsize, size_t * p
 
         case BZ_OK:
             BZIP_DEBUG (("%s: BZ_OK\n", __func__));
+            end = false;
             num_read = strm->next_out - this_out;
+            bout = (num_read != 0);
             BZIP_DEBUG (("%s: num_read %zu\n", __func__, num_read));
 
         read_more:
@@ -328,9 +337,17 @@ rc_t KBZipFileReadInt (KBZipFile * self, void * buffer, size_t bsize, size_t * p
                                 sizeof self->buff, &src_read);
                 if (rc)
                     return rc;
+
+                BZIP_DEBUG (("%s: KFileRead read %u\n", __func__, src_read));
+
                 if (src_read == 0)
+                {
+                    BZIP_DEBUG (("%s: end %u in %u out %u\n", __func__, end, bin, bout));
+                
+                    if (!end && bin && !bout)
+                        rc = RC (rcFS, rcFile, rcReading, rcData, rcInsufficient);
                     goto done;
-
+                }
                 strm->avail_in = src_read;
                 self->filePosition += src_read;
                 strm->next_in = self->buff;
@@ -348,7 +365,7 @@ rc_t KBZipFileReadInt (KBZipFile * self, void * buffer, size_t bsize, size_t * p
         BZIP_DEBUG (("%s: loop end tot_read %zu\n", __func__, tot_read));
     }
 done:
-    BZIP_DEBUG (("%s: returning tot_read %zu\n", __func__, tot_read));
+    BZIP_DEBUG (("%s: returning tot_read %zu\n\n\n", __func__, tot_read));
     *pnumread = tot_read;
     return rc;
 }
@@ -368,7 +385,7 @@ static rc_t KBZipFileReadSeek (KBZipFile *self, uint64_t pos)
 
         BZIP_DEBUG(("%s: call KBZipFileReadInt to_read %zu \n",__func__));
 
-	rc = KBZipFileReadInt ( self, buff, to_read, &num_read );
+	rc = KBZipFileReadInt ( self, buff, to_read, &num_read);
 
         BZIP_DEBUG(("%s: return KBZipFileReadInt num_read %zu \n",__func__));
 
@@ -377,7 +394,6 @@ static rc_t KBZipFileReadSeek (KBZipFile *self, uint64_t pos)
 
 	if (num_read == 0)
 	    break;
-
     }
     return rc;
 }
@@ -681,7 +697,7 @@ LIB_EXPORT rc_t CC KFileMakeBzip2ForRead (const struct KFile **pnew_obj,
         else
         {
             rc = KFileInit(&obj->dad, (const KFile_vt*) &KBZipFile_vt_v1,
-                           true, false);
+                           "KBZipFile", "no-name", true, false);
             if (rc == 0)
             {
                 bz_stream * strm;
@@ -762,7 +778,7 @@ LIB_EXPORT rc_t CC KFileMakeBzip2ForWrite (struct KFile **pnew_obj,
         else
         {
             rc = KFileInit(&obj->dad, (const KFile_vt*)&KBZipFile_vt_v1,
-                           false, true);
+                           "KBZipFile", "no-name", false, true);
             if (rc == 0)
             {
                 bz_stream* strm;
diff --git a/libs/kfs/cacheteefile.c b/libs/kfs/cacheteefile.c
new file mode 100644
index 0000000..791e7ca
--- /dev/null
+++ b/libs/kfs/cacheteefile.c
@@ -0,0 +1,1689 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <kfs/extern.h>
+
+struct KCacheTeeFile;
+#define KFILE_IMPL struct KCacheTeeFile
+#include <kfs/impl.h>
+#include <kfs/lockfile.h>
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/checksum.h>
+
+#include <kfs/cacheteefile.h>
+
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+/*--------------------------------------------------------------------------
+ layout of local file:
+ 
+ CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC MMMMMMMMMMMMMM SS BB
+
+ C ... file content in valid/invalid blocks
+ M ... bitmap of blocks bytes = ( ( ( content-size / block-size ) + 1 ) / 8 ) + 1 )
+ S ... size of content ( uint64_t ) 8 bytes
+ B ... used blocksize  ( uint32_t ) 4 bytes
+ */
+
+
+/*--------------------------------------------------------------------------
+ * KCacheTeeFile
+ */
+
+#define CACHE_TEE_DEFAULT_BLOCKSIZE ( 32 * 1024 )
+#define CACHE_TEE_REPORT 0
+
+typedef struct KCacheTeeFile
+{
+    KFile dad;
+    const KFile * remote;
+    KFile * local;
+    KFile * logger;
+    KDirectory * dir;
+    KLockFile * lock;
+
+    uint8_t * bitmap;
+    uint8_t * scratch_buffer;
+
+    uint64_t remote_size;
+    uint64_t local_size;
+    uint64_t block_count;
+    uint64_t log_file_pos;
+    uint64_t first_block_in_scratch;
+
+    /* size_t */ uint64_t bitmap_bytes;
+    /* size_t */ uint64_t scratch_size;
+    /* size_t */ uint64_t valid_scratch_bytes;
+    uint32_t block_size;
+    uint32_t cluster_factor;
+    bool fully_in_cache;
+    bool report;
+    bool local_read_only;
+    char local_path [ 1 ];
+} KCacheTeeFile;
+
+
+const uint8_t BitNr2Mask[ 8 ] =
+{
+         /* 0  1  2  3   4   5   6    7  */
+            1, 2, 4, 8, 16, 32, 64, 128
+};
+
+#define IS_CACHE_BIT( CacheFile, Block_Nr ) ( CacheFile->bitmap[ (Block_Nr) >> 3 ] & BitNr2Mask[ (Block_Nr) & 7 ] ) > 0
+
+#define IS_BITMAP_BIT( BitMap, Block_Nr ) ( BitMap[ (Block_Nr) >> 3 ] & BitNr2Mask[ (Block_Nr) & 7 ] ) > 0
+
+#define BITS_2_BYTES( BitCount ) ( ( ( BitCount ) + 7 ) >> 3 )
+
+#define SIZE_2_BLOCK_COUNT( Number_Of_Bytes, Block_Size ) ( ( ( Number_Of_Bytes ) + ( Block_Size ) - 1 ) / ( Block_Size ) )
+
+
+static rc_t calculate_local_size_from_remote_size( KCacheTeeFile *self )
+{
+    rc_t rc = 0;
+    if ( self->block_size > 0 )
+    {
+        self->block_count = SIZE_2_BLOCK_COUNT( self->remote_size, self->block_size );
+        self->bitmap_bytes = BITS_2_BYTES( self->block_count );
+        self->local_size = ( self->remote_size +
+                             self->bitmap_bytes + 
+                             sizeof self->remote_size + 
+                             sizeof self->block_size );
+    }
+    else
+    {
+        rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcInvalid );
+        LOGERR( klogErr, rc, "div by zero attempt in calculating local size" );
+    }
+    return rc;
+}
+
+
+static rc_t create_bitmap_buffer( uint8_t ** bitmap, /* size_t */ uint64_t bitmap_bytes )
+{
+    rc_t rc = 0;
+    *bitmap = calloc ( sizeof **bitmap, bitmap_bytes );
+    if ( *bitmap == NULL )
+    {
+        rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
+        LOGERR( klogErr, rc, "init local bitmap-area" );
+    }
+    return rc;
+}
+
+static rc_t create_bitmap( KCacheTeeFile *self )
+{
+    return create_bitmap_buffer( &self->bitmap, self->bitmap_bytes );
+}
+
+
+static bool is_bitmap_full( const uint8_t * bitmap, /* size_t */ uint64_t bitmap_bytes, uint64_t block_count )
+{
+    /* size_t */ uint64_t bitmap_byte = 0;
+    while( bitmap_byte < ( bitmap_bytes - 1 ) )
+    {
+        if ( bitmap[ bitmap_byte++ ] != 0xFF )
+            return false;
+    }
+    {
+        uint64_t block_id = ( bitmap_byte << 3 );
+        while ( block_id < block_count )
+        {
+            bool block_cached = IS_BITMAP_BIT( bitmap, block_id );
+            if ( !block_cached )
+                return false;
+            ++block_id;
+        }
+    }
+    return true;
+}
+
+
+static void report( const KCacheTeeFile * cf )
+{
+    OUTMSG(( "log  : %s\n", cf -> logger != NULL ? "YES" : "NO" ));
+    OUTMSG(( "size : local=%,lu remote=%,lu\n", cf -> local_size, cf -> remote_size ));
+    OUTMSG(( "block: size=%,u count=%,u\n", cf -> block_size, cf -> block_count ));
+    OUTMSG(( "bitmp: bytes=%,u\n", cf -> bitmap_bytes ));
+    OUTMSG(( "fully: %s\n", cf -> fully_in_cache ? "YES" : "NO" ));
+}
+
+
+static rc_t init_new_local_file( KCacheTeeFile * cf )
+{
+    rc_t rc = create_bitmap( cf );
+    cf->fully_in_cache = false;
+    if ( rc == 0 )
+    {
+        size_t written;
+        uint64_t pos = cf -> remote_size;
+        /* write the bitmap ( zero'd out ) into the local file */
+        rc = KFileWriteAll ( cf -> local, pos, 
+                             cf -> bitmap, cf -> bitmap_bytes, &written );
+        if ( rc == 0 && written != cf -> bitmap_bytes )
+        {
+            rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcInvalid );
+            LOGERR( klogErr, rc, "no full initialization of local file bitmap" );
+        }
+        if ( rc == 0 && cf->report )
+        {
+            OUTMSG(( "init new cachefile: %u bytes of bitmaps written at pos %lu\n", written, pos ));
+        }
+
+        /* write the remote-file-size into the local file ( uint64_t = 8 bytes )*/
+        if ( rc == 0 )
+        {
+            pos += cf -> bitmap_bytes;
+            rc = KFileWriteAll ( cf -> local, pos,
+                                 &cf -> remote_size, sizeof( cf -> remote_size ), &written );
+            if ( rc == 0 && written != sizeof( cf -> remote_size ) )
+            {
+                rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcInvalid );
+                LOGERR( klogErr, rc, "cannot write remote-filesize into local file" );
+            }
+        }
+        if ( rc == 0 && cf->report )
+        {
+            OUTMSG(( "init new cachefile: %u bytes of remote size written at pos %lu ( remote-size = %lu )\n", written, pos, cf->remote_size ));
+        }
+
+        /* write the block-size into the local file ( size_t = 4 bytes )*/
+        if ( rc == 0 )
+        {
+            pos += sizeof( cf -> remote_size );
+            rc = KFileWriteAll ( cf -> local, pos,
+                                 &cf -> block_size, sizeof( cf -> block_size ), &written );
+            if ( rc == 0 && written != sizeof( cf -> block_size ) )
+            {
+                rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcInvalid );
+                LOGERR( klogErr, rc, "cannot write block-size into local file" );
+            }
+        }
+        if ( rc == 0 && cf->report )
+        {
+            OUTMSG(( "init new cachefile: %u bytes of block_size written at pos %lu ( block-size = %lu )\n", written, pos, cf->block_size ));
+        }
+
+    }
+    if ( rc == 0 && cf -> report )
+        report( cf );
+    return rc;
+}
+
+
+static rc_t read_block_size( const struct KFile * self, uint64_t local_size, uint32_t *block_size, bool silent )
+{
+    size_t num_read;
+    uint64_t pos = local_size - ( sizeof *block_size );
+    /* read the block-size, compare to the requested block-size */
+    rc_t rc =  KFileRead( self, pos, block_size, sizeof *block_size, &num_read );
+    if ( rc != 0 )
+    {
+        if ( !silent )
+        {
+            LOGERR( klogErr, rc, "cannot read block-size from local file" );
+        }
+    }
+    else if ( num_read != sizeof *block_size )
+    {
+        rc = RC ( rcFS, rcFile, rcValidating, rcParam, rcInvalid );
+        if ( !silent )
+        {
+            LOGERR( klogErr, rc, "cannot read block-size from local file" );
+        }
+    }
+    if ( rc == 0 && *block_size == 0 )
+    {
+        rc = RC ( rcFS, rcFile, rcValidating, rcParam, rcInvalid );
+        if ( !silent )
+        {
+            LOGERR( klogErr, rc, "block-size read from local file is zero" );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t read_content_size( const struct KFile * self, uint64_t local_size, uint64_t *content_size, bool silent )
+{
+    size_t num_read;
+    uint64_t pos = ( local_size - 4 ) - sizeof( *content_size );
+    rc_t rc =  KFileRead ( self, pos, content_size, sizeof *content_size, &num_read );
+    if ( rc != 0 )
+    {
+        if ( !silent )
+        {
+            LOGERR( klogErr, rc, "cannot read content-size from local file" );
+        }
+    }
+    else if ( num_read != sizeof *content_size )
+    {
+        rc = RC ( rcFS, rcFile, rcValidating, rcParam, rcInvalid );
+        if ( !silent )
+        {
+            LOGERR( klogErr, rc, "cannot read content-size from local file" );
+        }
+    }
+    if ( rc == 0 && *content_size == 0 )
+    {
+        rc = RC ( rcFS, rcFile, rcValidating, rcParam, rcInvalid );
+        if ( !silent )
+        {
+            LOGERR( klogErr, rc, "content-size read from local file is zero" );
+        }
+    }
+    if ( rc == 0 && *content_size >= local_size )
+    {
+        rc = RC ( rcFS, rcFile, rcValidating, rcParam, rcInvalid );
+        if ( !silent )
+        {
+            LOGERR( klogErr, rc, "content-size read from local file is invalid" );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t verify_file_structure( const uint64_t local_size, const uint32_t block_size, const uint64_t content_size,
+                                   uint64_t * block_count, /* size_t */ uint64_t * bitmap_bytes, bool silent )
+{
+    rc_t rc = 0;
+    uint64_t expected_size;
+
+    *block_count = SIZE_2_BLOCK_COUNT( content_size, block_size );
+    *bitmap_bytes = BITS_2_BYTES( *block_count );
+
+    /* check if the values 'content-size' and 'block_size' result in the currect real file size */
+    expected_size = content_size + *bitmap_bytes + sizeof ( local_size ) + sizeof ( block_size );
+    if ( expected_size != local_size )
+    {
+        rc = RC ( rcFS, rcFile, rcValidating, rcParam, rcInvalid );
+        if ( !silent )
+        {
+            LOGERR( klogErr, rc, "content-size/blocksize do not make sense for this file" );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t verify_existing_local_file( KCacheTeeFile * cf, bool silent )
+{
+    /* size_t */ uint64_t bitmap_bytes;
+    uint32_t block_size;
+    uint64_t content_size, block_count;
+
+    rc_t rc = read_block_size ( cf -> local, cf -> local_size, &block_size, silent );
+    /* read content-size, compare to the content-size of the remote file */
+    if ( rc == 0 )
+        rc = read_content_size ( cf -> local, cf -> local_size, &content_size, silent );
+
+    if ( rc == 0 && content_size != cf -> remote_size )
+    {
+        rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcInvalid );
+        PLOGERR( klogErr, ( klogErr, rc, "content-size in local file $(ls) does not match size of remote file $(rs)", 
+                           "ls=%lu,rs=%lu", content_size, cf -> remote_size ) );
+    }
+
+    /* check if the local file has the right size ( content + bitmap + content_size + block_size )*/
+    if ( rc == 0 )
+        rc = verify_file_structure ( cf -> local_size, block_size, content_size, &block_count, &bitmap_bytes, silent );
+
+    /* check if the requested block-size equals the stored block-size */
+    if ( rc == 0 )
+    {
+        if ( cf -> block_size == 0 )
+            cf -> block_size = CACHE_TEE_DEFAULT_BLOCKSIZE;
+        if ( cf -> block_size != block_size )
+        {
+            PLOGMSG( klogWarn, ( klogWarn, "block-size in local file $(ls) does not match requested value $(rv)",
+                                "ls=%u,rv=%u", block_size, cf -> block_size ) );
+        }
+        /* use the block-size as stored in the file */
+        cf -> block_size = block_size;
+        cf -> block_count = block_count;
+        cf -> bitmap_bytes = bitmap_bytes;
+        rc = create_bitmap( cf );
+    }
+
+    /* read the bitmap into the memory ... */
+    if ( rc == 0 )
+    {
+        size_t num_read;
+        /* read the bitmap from the local file */
+        rc = KFileReadAll ( cf -> local, content_size,
+                            cf -> bitmap, cf -> bitmap_bytes, &num_read );
+        if ( rc != 0 )
+        {
+            LOGERR( klogErr, rc, "cannot read bitmap from local file" );
+        }
+        else if ( num_read != cf -> bitmap_bytes )
+        {
+            rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcInvalid );
+            PLOGERR( klogErr, ( klogErr, rc, "cannot read $(ls) bitmap-bytes from local file, read $(rs) instead", 
+                           "ls=%lu,rs=%lu", cf -> bitmap_bytes, num_read ));
+        }
+    }
+
+    /* check if we have the whole remote file in cache */
+    if ( rc == 0 )
+        cf -> fully_in_cache = is_bitmap_full( cf -> bitmap, cf -> bitmap_bytes, cf -> block_count ); 
+
+    if ( rc == 0 && cf -> report )
+        report( cf );
+
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC IsCacheFileComplete( const struct KFile * self, bool * is_complete, bool silent )
+{
+    rc_t rc;
+    if ( self == NULL )
+        rc = RC( rcFS, rcFile, rcValidating, rcSelf, rcNull );
+    else if ( is_complete == NULL )
+        rc = RC( rcFS, rcFile, rcValidating, rcParam, rcNull );
+    else
+    {
+        uint64_t local_size;
+        *is_complete = false;
+        rc = KFileSize( self, &local_size );
+        if ( rc != 0 )
+        {
+            if ( !silent )
+            {
+                LOGERR( klogErr, rc, "cannot detect filesize when checking if cached file is complete" );
+            }
+        }
+        /* TODO: need to do a better constant tha a magic number */
+        else if (local_size < 13)
+        {
+            rc = RC ( rcFS, rcFile, rcValidating, rcSize, rcInsufficient );
+            if ( !silent )
+            {
+                LOGERR( klogErr, rc, "cannot use filesize of zero when checking if cached file is complete" );
+            }
+        }
+        else
+        {
+            uint32_t block_size;
+            rc = read_block_size( self, local_size, &block_size, silent );
+            if ( rc == 0 )
+            {
+                uint64_t content_size;
+
+                rc = read_content_size( self, local_size, &content_size, silent );
+                /* create bitmap buffer */
+                if ( rc == 0 )
+                {
+                    uint64_t block_count;
+                    /* size_t */ uint64_t bitmap_bytes;
+                    rc = verify_file_structure( local_size, block_size, content_size, &block_count, &bitmap_bytes, silent );
+                    if ( rc == 0 )
+                    {
+                        uint8_t * bitmap = NULL;
+                        rc = create_bitmap_buffer( &bitmap, bitmap_bytes );
+                        if ( rc == 0 )
+                        {
+                            size_t num_read;
+                            /* read the bitmap into the memory ... */
+                            rc = KFileReadAll ( self, content_size, bitmap, bitmap_bytes, &num_read );
+                            if ( rc != 0 )
+                            {
+                                if ( !silent )
+                                    LOGERR( klogErr, rc, "cannot read bitmap from local file" );
+                            }
+                            else if ( num_read != bitmap_bytes )
+                            {
+                                rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcInvalid );
+                                if ( !silent )
+                                {
+                                    PLOGERR( klogErr, ( klogErr, rc, "cannot read $(ls) bitmap-bytes from local file, read $(rs) instead", 
+                                                        "ls=%lu,rs=%lu", bitmap_bytes, num_read ));
+                                }
+                            }
+                        }
+                        if ( rc == 0 )
+                            *is_complete = is_bitmap_full( bitmap, bitmap_bytes, block_count );
+
+                        if ( bitmap != NULL )
+                            free( bitmap );
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC TruncateCacheFile( struct KFile * self )
+{
+    rc_t rc;
+    if ( self == NULL )
+        rc = RC( rcFS, rcFile, rcResizing, rcSelf, rcNull );
+    else
+    {
+        uint64_t local_size;
+        rc = KFileSize( self, &local_size );
+        if ( rc != 0 )
+        {
+            LOGERR( klogErr, rc, "cannot detect filesize when truncating cached file" );
+        }
+        else
+        {
+            uint32_t block_size;
+            rc = read_block_size( self, local_size, &block_size, false );
+            if ( rc == 0 )
+            {
+                uint64_t content_size;
+                rc = read_content_size( self, local_size, &content_size, false );
+                if ( rc == 0 )
+                {
+                    uint64_t block_count;
+                    /* size_t */ uint64_t bitmap_bytes;
+                    rc = verify_file_structure( local_size, block_size, content_size, &block_count, &bitmap_bytes, false );
+
+                    /* truncate the file by setting the new (shorter) filesize */
+                    if ( rc == 0 )
+                        rc = KFileSetSize( self, content_size );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t promote_cache( KCacheTeeFile * cf )
+{
+    char cache_file_name [ 4096 ];
+    char temp_file_name [ 4096 ];
+    size_t num_writ;
+    rc_t rc = string_printf ( cache_file_name, sizeof cache_file_name, &num_writ, "%s.cache", cf -> local_path );
+    if ( rc == 0 )
+        rc = string_printf ( temp_file_name, sizeof temp_file_name, &num_writ, "%s.cache.temp", cf -> local_path );
+
+    /* (1) releaes open cache file ( windows cannot rename open files ) */
+    if ( rc == 0 )
+        rc = KFileRelease( cf -> local );
+
+    /* (2) rename to temporary name */
+    if ( rc == 0 )
+    {
+        cf -> local = NULL;
+        rc = KDirectoryRename ( cf -> dir, true, cache_file_name, temp_file_name );
+    }
+
+    /* (3) open from temporary name */
+    if ( rc == 0 )
+        rc = KDirectoryOpenFileWrite( cf -> dir, &cf -> local, true, "%s", temp_file_name );
+
+    /* (4) perform truncation */
+    if ( rc == 0 )
+        rc = TruncateCacheFile( cf -> local );
+    
+    /* (5) releaes open temp. cache file ( windows cannot rename open files ) */
+    if ( rc == 0 )
+        rc = KFileRelease( cf -> local );
+
+    /* (6) rename to final filename ( windows cannot rename open files ) */
+    if ( rc == 0 )
+    {
+        cf -> local = NULL;
+        rc = KDirectoryRename ( cf -> dir, true, temp_file_name, cf -> local_path );
+    }
+
+    /* (6) open from final filename */
+    if ( rc == 0 )
+        rc = KDirectoryOpenFileWrite( cf -> dir, &cf -> local, true, "%s", cf -> local_path );
+
+    return rc;
+}
+
+
+/* Destroy
+ */
+static rc_t CC KCacheTeeFileDestroy( KCacheTeeFile *self )
+{
+    if ( self->report )
+    {
+        OUTMSG(( "\nDESTROY cacheteefile '%s'\n\n", self -> local_path ));
+    }
+
+    if ( !self -> local_read_only && self -> lock != NULL )
+    {
+        rc_t rc = IsCacheFileComplete ( self -> local, &self -> fully_in_cache, false );
+        if ( rc == 0 && self -> fully_in_cache )
+        {
+            if ( self->report )
+            {
+                OUTMSG(( "\nPROMOTING cacheteefile '%s'\n\n", self -> local_path ));
+            }
+            promote_cache( self );
+        }
+    }
+
+    if ( self->bitmap != NULL )
+        free( self->bitmap );
+    if ( self->scratch_buffer != NULL )
+        free( self->scratch_buffer );
+
+    KDirectoryRelease ( self->dir );
+    KFileRelease ( self -> remote );
+    KFileRelease ( self -> local );
+    KLockFileRelease ( self -> lock );
+    KFileRelease ( self -> logger );
+
+    free ( self );
+    return 0;
+}
+
+
+
+static rc_t log_to_file( KFile *log, uint64_t *log_file_pos,
+                         uint64_t pos, size_t bsize, size_t num_read )
+{
+    char buffer[ 1024 ];
+    size_t printf_written;
+    rc_t rc = string_printf( buffer, sizeof buffer, &printf_written, 
+                             "READ at %lu.%u read = %u\n",
+                             pos, bsize, num_read );
+    if ( rc == 0 )
+    {
+        size_t log_written;
+        rc = KFileWriteAll ( log, *log_file_pos, buffer, printf_written, &log_written );
+        if ( rc == 0 )
+            *log_file_pos += log_written;
+    }
+    return rc;
+}
+
+
+static void set_bitmap( const KCacheTeeFile *cself, uint64_t start_block, uint64_t block_count )
+{
+    uint64_t block_idx, block_nr;
+    for ( block_idx = 0, block_nr = start_block; 
+          block_idx < block_count; 
+          ++block_idx, ++block_nr )
+    {
+        cself->bitmap[ block_nr >> 3 ] |= BitNr2Mask[ block_nr & 0x07 ];
+    }
+}
+
+
+static rc_t write_bitmap( const KCacheTeeFile *cself, uint64_t start_block, uint64_t block_count )
+{
+    size_t written;
+    uint32_t start_block_byte = ( start_block >> 3 );
+    uint32_t end_block_byte = ( ( start_block + block_count - 1 ) >> 3 );
+    uint64_t pos = cself->remote_size + start_block_byte;
+    size_t to_write = ( end_block_byte - start_block_byte ) + 1;
+    rc_t rc = KFileWriteAll( cself->local, pos, &cself->bitmap[ start_block_byte ], to_write, &written );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc, "cannot write local-file-bitmap block $(sb).$(cn)", 
+                           "sb=%lu,cn=%lu", start_block, block_count ) );
+    }
+    if ( rc == 0 && cself->report )
+    {
+        OUTMSG(( "writing bitmap: %u bytes written at pos %lu\n", written, pos ));
+    }
+
+    return rc;
+}
+
+
+static rc_t resize_scratch_buffer( const KCacheTeeFile *cself, /* size_t */ uint64_t new_size )
+{
+    rc_t rc = 0;
+    KCacheTeeFile *self = ( KCacheTeeFile * )cself;
+
+    /* create scratch-buffer or resize it if needed */
+    if ( self->scratch_size == 0 )
+    {
+        self->scratch_buffer = malloc( new_size );
+        if ( self->scratch_buffer == NULL )
+            rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
+        else
+            self->scratch_size = new_size;
+    }
+    else if ( self->scratch_size < new_size )
+    {
+        uint8_t * tmp = realloc( self->scratch_buffer, new_size );
+        if ( tmp == NULL )
+            rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
+        else
+        {
+            self->scratch_buffer = tmp;
+            self->scratch_size = new_size;
+        }
+    }
+    return rc;
+}
+
+
+size_t check_rd_len( const KCacheTeeFile *cself, uint64_t pos, size_t bsize )
+{
+    size_t res = bsize;
+    uint64_t last_pos = pos;
+    last_pos += bsize;
+    if ( last_pos >= cself->remote_size )
+    {
+        if ( pos >= cself->remote_size )
+            res = 0;
+        else
+            res = ( cself->remote_size - pos );
+    }
+    return res;
+}
+
+
+static rc_t rd_remote_wr_local( const KCacheTeeFile *cself, uint64_t pos,
+                                void *buffer, size_t bsize, size_t *num_read )
+{
+    rc_t rc = 0;
+    if ( bsize > 0 )
+    {
+        size_t bytes_read;
+        *num_read = 0;
+        rc = KFileReadAll( cself->remote, pos, buffer, bsize, &bytes_read );
+        if ( rc == 0 )
+        {
+            if ( cself->report )
+            {
+                OUTMSG(( "reading remote data: %u bytes read at pos %lu\n", bytes_read, pos ));
+            }
+
+            if ( cself->local_read_only )
+            {
+                *num_read = bytes_read;
+            }
+            else
+            {
+                rc = KFileWriteAll( cself->local, pos, buffer, bytes_read, num_read );
+                if ( rc == 0 && cself->report )
+                {
+                    OUTMSG(( "writing local data: %u bytes written at pos %lu\n", *num_read, pos ));
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+#if 0
+static rc_t KCacheTeeFileRead_Starting_with_Cache_Hit( const KCacheTeeFile *cself, uint64_t pos,
+                               void *buffer, size_t bsize, size_t *num_read, uint64_t first_requested_block )
+{
+    rc_t rc = 0;
+    uint64_t t_pos, end_block, last_block = first_requested_block;
+    size_t to_read = check_rd_len( cself, pos, bsize );
+
+    if ( to_read == 0 )
+        return rc;
+
+    t_pos = pos + to_read - 1;
+    end_block = ( t_pos / cself->block_size );
+
+    /* the requested range starts with a cache-hit : 
+        - detect the last block after this first hit, that is still in cache */
+    if ( end_block > first_requested_block )
+    {
+        while( ( last_block <= end_block ) && ( IS_CACHE_BIT( cself, last_block + 1 ) ) )
+            ++last_block;
+    }
+
+    /* if not the whole requested range is a cache-hit: reduce to_read */
+    if ( last_block < end_block )
+/*        to_read = ( ( ( ( last_block + 1 ) * cself->block_size ) - 1 ) - pos ); */
+        to_read = ( ( ( last_block + 1 ) * cself->block_size ) - pos );
+    assert( to_read <= bsize );
+
+    if ( cself->report )
+        OUTMSG(( "RD LOCAL: %,lu.%,lu\n", pos, to_read ));
+
+    /* now read it from the local file into the user-supplied buffer */
+    if ( to_read > 0 )
+        rc = KFileReadAll( cself->local, pos, buffer, to_read, num_read );
+
+    return rc;
+}
+#endif
+
+#if 0
+static rc_t KCacheTeeFileRead_Block_Aligned_Cache_Miss( const KCacheTeeFile *cself, uint64_t pos,
+                               void *buffer, size_t bsize, size_t *num_read, uint64_t first_requested_block )
+{
+    rc_t rc;
+    /* we are block-aligned ! */
+    uint64_t block_count = ( bsize / cself->block_size );
+    if ( cself->report )
+        OUTMSG(( "RD REMOTE (block aligned): %,lu.%,lu (%,lu blocks)\n", pos, bsize, block_count ));
+    rc = rd_remote_wr_local( cself, pos, buffer, bsize, num_read );
+    if ( rc == 0 && !cself->local_read_only )
+    {
+        set_bitmap( cself, first_requested_block, block_count );
+        rc = write_bitmap( cself, first_requested_block, block_count );
+    }
+    if ( rc == 0 && cself->cluster_factor > 1 )
+    {
+        size_t over_read_size = cself->cluster_factor * cself->block_size;
+        rc = resize_scratch_buffer( cself, over_read_size );
+        if ( rc == 0 )
+        {
+            size_t tmp_read;
+            uint64_t r_pos = pos + bsize;
+            rc = rd_remote_wr_local( cself, r_pos, cself->scratch_buffer, over_read_size, &tmp_read );
+            if ( rc == 0 && !cself->local_read_only )
+            {
+                set_bitmap( cself, first_requested_block + block_count, cself->cluster_factor );
+                rc = write_bitmap( cself, first_requested_block + block_count, cself->cluster_factor );
+            }
+        }
+    }
+    return rc;
+}
+#endif
+
+#if 0
+static rc_t KCacheTeeFileRead_Starting_with_Cache_Miss_small( const KCacheTeeFile *cself, uint64_t pos,
+                               void *buffer, size_t bsize, size_t to_read, size_t *num_read,
+                               uint64_t first_requested_block, uint64_t last_cache_miss_block )
+{
+    rc_t rc = 0;
+    uint64_t t_pos, block_count;
+    size_t t_len, processed;
+
+    /* we are not block-aligned, and the request is smaller than 1 block in size ! */
+    if ( cself->report )
+        OUTMSG(( "RD REMOTE (small) : %,lu.%,lu\n", pos, to_read ));
+
+    /* that means we request 1 or 2 blocks of memory from our scratch-buffer ... */
+    t_pos = ( first_requested_block * cself->block_size );
+    block_count = ( ( last_cache_miss_block - first_requested_block ) + 1 );
+    t_len = ( block_count * cself->block_size );
+    rc = resize_scratch_buffer( cself, t_len );
+
+    if ( cself->report )
+        OUTMSG(( "RD REMOTE (small) : from <%,lu> %,lu blocks\n", t_pos, block_count ));
+
+    assert( to_read <= t_len );
+
+    /* we read that from remote, write it local and set the bitmap */
+    if ( rc == 0 )
+    {
+        rc = rd_remote_wr_local( cself, t_pos, cself->scratch_buffer, t_len, &processed );
+        if ( rc == 0 && !cself->local_read_only )
+        {
+            set_bitmap( cself, first_requested_block, block_count );
+            rc = write_bitmap( cself, first_requested_block, block_count );
+        }
+    }
+
+    /* then we copy the requested amount out of the scratch-buffer */
+    if ( rc == 0 )
+    {
+        memcpy( buffer, &( cself->scratch_buffer[ pos - t_pos ] ), to_read );
+        *num_read = to_read;
+    }
+    return rc;
+}
+#endif
+
+#if 0
+static rc_t KCacheTeeFileRead_Starting_with_Cache_Miss_large( const KCacheTeeFile *cself, uint64_t pos,
+                               void *buffer, size_t bsize, size_t to_read, size_t *num_read,
+                               uint64_t first_requested_block, uint64_t last_cache_miss_block )
+{
+    rc_t rc = 0;
+    uint64_t t_pos;
+    int64_t t_len;
+    size_t processed;
+
+    /* we are not block-aligned ! */
+    if ( cself->report )
+        OUTMSG(( "RD REMOTE (large) : %,lu.%,lu\n", pos, to_read ));
+
+    /* THERE IS AN EVENTUAL PRE-READ if pos is not block-aligned, using the user-supplied buffer */
+    t_pos = ( first_requested_block * cself->block_size );
+    if ( t_pos < pos )
+    {
+        t_len = ( pos - t_pos );
+        if ( cself->report )
+            OUTMSG(( "PRE : %,lu.%,lu\n", t_pos, t_len ));
+
+        assert( t_len < bsize );
+        rc = rd_remote_wr_local( cself, t_pos, buffer, t_len, &processed );
+    }
+
+    if ( rc == 0 )
+    {
+        /* THERE IS AN EVENTUAL POST-READ if pos + to_read is not block-aligned */
+        uint64_t last_pos = ( last_cache_miss_block + 1 ) * cself->block_size;
+        t_pos = pos + processed;
+        if ( last_pos > t_pos )
+        {
+            t_len = ( last_pos - t_pos );
+            if ( cself->report )
+                OUTMSG(( "POST: %,lu.%,lu\n", t_pos, t_len ));
+            if ( t_len <= bsize )
+                rc = rd_remote_wr_local( cself, t_pos, buffer, t_len, &processed );
+        }
+
+        if ( rc == 0 )
+        {
+            /* finally we read what was requested, into the user-supplied buffer */
+            if ( cself->report )
+                OUTMSG(( "MAIN: %,lu.%,lu\n", pos, to_read ));
+
+            rc = rd_remote_wr_local( cself, pos, buffer, to_read, num_read );
+            if ( rc == 0 && !cself->local_read_only )
+            {
+                uint64_t block_count = ( last_cache_miss_block - first_requested_block ) + 1;
+                set_bitmap( cself, first_requested_block, block_count );
+                rc = write_bitmap( cself, first_requested_block, block_count );
+            }
+        }
+    }
+    return rc;
+}
+#endif
+
+#if 0
+static rc_t KCacheTeeFileRead_Starting_with_Cache_Miss( const KCacheTeeFile *cself, uint64_t pos,
+                               void *buffer, size_t bsize, size_t *num_read, uint64_t first_requested_block )
+{
+    rc_t rc = 0;
+    size_t to_read = check_rd_len( cself, pos, bsize );
+    uint64_t end_pos = pos + to_read;
+    uint64_t last_requested_block = ( end_pos / cself->block_size );
+    uint64_t last_cache_miss_block = first_requested_block;
+
+    if ( to_read == 0 )
+        return rc;
+
+    assert( to_read <= bsize );
+
+    /* detect the last block after this first miss, that is still not in cache */
+    while( last_cache_miss_block <= last_requested_block && 
+           !( IS_CACHE_BIT( cself, last_cache_miss_block ) ) )
+    {
+        ++last_cache_miss_block;
+    }
+
+    if ( cself->report )
+        OUTMSG(( "CACHE-MISS from block #%,lu to #%,lu (end-block #%,lu)\n",
+                  first_requested_block, last_cache_miss_block, last_requested_block ));
+
+    /* check if the request is aligned to our block */
+    if ( ( pos == ( first_requested_block * cself->block_size ) ) &&
+         ( ( to_read % cself->block_size ) == 0 ) )
+    {
+        /* we are block-aligned ! */
+        rc = KCacheTeeFileRead_Block_Aligned_Cache_Miss( cself, pos, buffer, to_read, num_read, first_requested_block );
+    }
+    else
+    {
+        if ( to_read < cself->block_size )
+        {
+            rc = KCacheTeeFileRead_Starting_with_Cache_Miss_small( cself, pos, buffer, bsize, to_read, num_read,
+                                                first_requested_block, last_cache_miss_block );
+        }
+        else
+        {
+            rc = KCacheTeeFileRead_Starting_with_Cache_Miss_large( cself, pos, buffer, bsize, to_read, num_read,
+                                                first_requested_block, last_cache_miss_block );
+        }
+    }
+    return rc;
+}
+#endif
+
+#if 0
+static rc_t KCacheTeeFileRead_clustered( const KCacheTeeFile *cself, uint64_t pos,
+                                         void *buffer, size_t bsize, size_t *num_read )
+{
+    rc_t rc;
+    size_t l_num_read = 0;
+    uint64_t first_requested_block = ( pos / cself->block_size );
+    
+    if ( num_read != NULL )
+        *num_read = 0;
+
+    if ( cself->report )
+        OUTMSG(( "\nREQUEST: %,lu .[ %,lu ] ( first_requested_block=%,lu )\n", pos, bsize, first_requested_block ));
+
+     if ( IS_CACHE_BIT( cself, first_requested_block ) )
+    {
+        rc = KCacheTeeFileRead_Starting_with_Cache_Hit( cself, pos, buffer, bsize, &l_num_read, first_requested_block );
+    }
+    else
+    {
+        rc = KCacheTeeFileRead_Starting_with_Cache_Miss( cself, pos, buffer, bsize, &l_num_read, first_requested_block );
+    }
+
+    if ( rc == 0 && num_read != NULL )
+        *num_read = l_num_read;
+
+    if ( cself->logger != NULL )
+    {
+        KCacheTeeFile * self = ( KCacheTeeFile * ) cself;
+        log_to_file( self->logger, &self->log_file_pos, pos, bsize, l_num_read );
+    }
+    return rc;
+}
+#endif
+
+static uint64_t calc_req_blocks( uint64_t pos, uint64_t first_req_block, size_t bsize, uint32_t block_size )
+{
+    uint64_t res, temp;
+
+    res = pos;
+    res += bsize;
+    temp = first_req_block;
+    temp *= block_size;
+    res -= temp;
+    res += block_size;
+    res--;
+    res /= block_size;
+
+/*    res = ( ( ( pos + bsize ) - ( first_req_block * block_size ) + ( block_size - 1 ) ) / block_size ); */
+/*    uint64_t req_blocks = ( ( ( pos + bsize - 1 ) / block_size ) - first_req_block ) + 1; */
+    return res;
+}
+
+static rc_t KCacheTeeFileRead_simple_cached( const KCacheTeeFile *cself, uint64_t pos,
+                                             void *buffer, size_t bsize, size_t *num_read, uint64_t first_req_block )
+{
+    rc_t rc = 0;
+    bool found_in_scratch = false;
+    size_t to_read;
+    size_t block_count = 1;
+    uint64_t req_blocks = calc_req_blocks( pos, first_req_block, bsize, cself->block_size );
+
+    /* we read as much as we have from the local cache, forcing the caller
+       to eventually make another request ( the non-cached part of it ) afterwards */
+    if ( req_blocks > 1 )
+    {
+        /* detect how many blocks are in cache after the first_req_block */
+        uint64_t block = first_req_block;
+        block_count = 0;
+        do
+        {
+            block++;
+            block_count++;
+        }
+        while ( ( block_count < req_blocks ) && ( IS_CACHE_BIT( cself, block ) ) );
+    }
+
+    /* check if we eventually have the requested bytes in the scratch-buffer */
+    if ( cself -> first_block_in_scratch == first_req_block )
+    {
+        uint64_t first_pos_in_scratch = first_req_block;
+        first_pos_in_scratch *= cself->block_size;
+        if ( pos >= first_pos_in_scratch )
+        {
+            uint64_t last_pos_in_scratch = first_pos_in_scratch;
+            last_pos_in_scratch += cself -> valid_scratch_bytes;
+            found_in_scratch = ( pos < last_pos_in_scratch );
+            if ( found_in_scratch )
+            {
+                uint64_t available_in_scratch = ( last_pos_in_scratch - pos );
+                if ( bsize > available_in_scratch )
+                    to_read = available_in_scratch;
+                else
+                    to_read = bsize;
+
+                memmove ( buffer, &( cself->scratch_buffer[ pos - first_pos_in_scratch ] ), to_read );
+                *num_read = to_read;
+            }
+        }
+    }
+
+    if ( !found_in_scratch )
+    {
+        /* now we have to check how much of the request can be satisfied from the local file */
+        uint64_t reachable = first_req_block;
+        reachable += block_count;
+        reachable *= cself->block_size;
+        reachable -= pos;
+
+        /* are we requesting beyond the end of file? */
+        if ( reachable >= bsize )
+            to_read = check_rd_len( cself, pos, bsize );
+        else
+            to_read = check_rd_len( cself, pos, reachable );
+
+        rc = KFileReadAll( cself->local, pos, buffer, to_read, num_read );
+    }
+
+    return rc;
+}
+
+
+static rc_t KCacheTeeFileRead_simple_not_cached( const KCacheTeeFile *cself, uint64_t pos,
+                                                 void *buffer, size_t bsize, size_t *num_read, uint64_t first_req_block )
+{
+    rc_t rc;
+    size_t to_read_remote;
+    size_t block_count = 1;
+    uint64_t req_blocks = calc_req_blocks( pos, first_req_block, bsize, cself->block_size );
+
+    if ( req_blocks >  1 )
+    {
+        uint64_t block = first_req_block;
+        block_count = 0;
+        do
+        {
+            block++;
+            block_count++;
+        }
+        while ( ( block_count < req_blocks ) && ( !( IS_CACHE_BIT( cself, block ) ) ) );
+    }
+
+    to_read_remote = ( block_count * cself->block_size );
+    rc = resize_scratch_buffer( cself, to_read_remote );
+    if ( rc == 0 )
+    {
+        size_t l_num_read;
+        uint64_t block_start = first_req_block;
+        block_start *= cself->block_size;
+        to_read_remote = check_rd_len( cself, block_start, to_read_remote );
+        rc = rd_remote_wr_local( cself, block_start, cself->scratch_buffer, to_read_remote, &l_num_read );
+        if ( rc == 0 )
+        {
+            ( ( KCacheTeeFile * )cself ) -> first_block_in_scratch = first_req_block;
+            ( ( KCacheTeeFile * )cself ) -> valid_scratch_bytes = l_num_read;
+            if ( !cself->local_read_only )
+            {
+                set_bitmap( cself, first_req_block, block_count );
+                rc = write_bitmap( cself, first_req_block, block_count );
+            }
+        }
+        if ( rc == 0 )
+        {
+            /* what we have to return to the caller is somewhere in the scratch_buffer */
+            uint64_t offset = pos;
+            offset -= block_start;
+
+            /* how much we can copy depends on how much was not in cache,
+               and how much was requested in the first place... */
+            if ( l_num_read >= offset )
+            {
+                l_num_read -= offset;
+                if ( l_num_read > bsize )
+                    l_num_read = bsize;
+                memmove ( buffer, &( cself->scratch_buffer[ offset ] ), l_num_read );
+            }
+            else
+            {
+                l_num_read = 0;
+            }
+            *num_read = l_num_read;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t KCacheTeeFileRead_simple( const KCacheTeeFile *cself, uint64_t pos,
+                                      void *buffer, size_t bsize, size_t *num_read )
+{
+    rc_t rc;
+    uint64_t first_req_block = pos;
+    first_req_block /= cself->block_size;
+
+    *num_read = 0;
+    if ( cself->report )
+        OUTMSG(( "\nREQUEST '%s': %,lu .[%,lu] ( first_req_block=%,lu )\n",
+                 cself->local_path, pos, bsize, first_req_block ));
+
+    /* "simple" strategy, read only that much as requested... */
+    if ( IS_CACHE_BIT( cself, first_req_block ) )
+    {
+        rc = KCacheTeeFileRead_simple_cached( cself, pos, buffer, bsize, num_read, first_req_block );
+    }
+    else
+    {
+        rc = KCacheTeeFileRead_simple_not_cached( cself, pos, buffer, bsize, num_read, first_req_block );
+    }
+
+    if ( cself->logger != NULL )
+    {
+        KCacheTeeFile * self = ( KCacheTeeFile * ) cself;
+        log_to_file( self->logger, &self->log_file_pos, pos, bsize, *num_read );
+    }
+
+    return rc;
+}
+
+
+/**********************************************************************************************
+    START vt-functions
+**********************************************************************************************/
+
+static struct KSysFile* KCacheTeeFileGetSysFile( const KCacheTeeFile *self, uint64_t *offset )
+{
+    * offset = 0;
+    return NULL;
+}
+
+
+static rc_t KCacheTeeFileRandomAccess( const KCacheTeeFile *self )
+{
+    return 0;
+}
+
+
+static rc_t KCacheTeeFileSize( const KCacheTeeFile *self, uint64_t *size )
+{
+    *size = self->remote_size;
+    return 0;
+}
+
+
+static rc_t KCacheTeeFileSetSize( KCacheTeeFile *self, uint64_t size )
+{
+    return RC ( rcFS, rcFile, rcUpdating, rcFile, rcReadonly );
+}
+
+static rc_t KCacheTeeFileRead( const KCacheTeeFile *cself, uint64_t pos,
+                               void *buffer, size_t bsize, size_t *num_read )
+{
+    /*
+    if ( cself -> cluster_factor != 0 )
+        return KCacheTeeFileRead_clustered( cself, pos, buffer, bsize, num_read );
+    else
+        return KCacheTeeFileRead_simple( cself, pos, buffer, bsize, num_read );
+    */
+
+    return KCacheTeeFileRead_simple( cself, pos, buffer, bsize, num_read );
+}
+
+
+static rc_t KCacheTeeFileWrite( KCacheTeeFile *self, uint64_t pos,
+                                const void *buffer, size_t size, size_t *num_writ )
+{
+    return RC ( rcFS, rcFile, rcUpdating, rcInterface, rcUnsupported );
+}
+
+/**********************************************************************************************
+    END vt-functions
+**********************************************************************************************/
+
+
+static KFile_vt_v1 vtKCacheTeeFile =
+{
+    /* version 1.0 */
+    1, 0,
+
+    /* start minor version 0 methods */
+    KCacheTeeFileDestroy,
+    KCacheTeeFileGetSysFile,
+    KCacheTeeFileRandomAccess,
+    KCacheTeeFileSize,
+    KCacheTeeFileSetSize,
+    KCacheTeeFileRead,
+    KCacheTeeFileWrite
+    /* end minor version 0 methods */
+};
+
+
+static rc_t make_cache_tee( struct KDirectory *self, struct KFile const **tee,
+    struct KFile const *remote, struct KFile *local, struct KFile *logger, KLockFile *lock,
+    uint32_t blocksize, uint32_t cluster, bool report, const char *path )
+{
+    rc_t rc;
+    size_t path_size = string_size ( path );
+    KCacheTeeFile * cf = malloc ( sizeof * cf + path_size + 1 );
+    if ( cf == NULL )
+        rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        cf -> dir = self;
+        string_copy( cf -> local_path, path_size + 1, path, path_size );
+        cf -> remote = remote;     /* store the file-objects but no AddRef()'s yet! */
+        cf -> local  = local;
+        cf -> logger = logger;
+        cf -> lock = lock;
+        cf -> report = report;
+        cf -> cluster_factor = cluster;
+        cf -> local_read_only = !( local -> write_enabled );
+        cf -> block_size = ( blocksize > 0 ) ? blocksize : CACHE_TEE_DEFAULT_BLOCKSIZE;
+        cf -> bitmap = NULL;
+        cf -> scratch_buffer = NULL;
+        cf -> scratch_size = 0;
+        cf -> first_block_in_scratch = 0;
+        cf -> valid_scratch_bytes = 0;
+
+        rc = KFileSize( local, &cf -> local_size );
+        if ( rc != 0 )
+        {
+            LOGERR( klogErr, rc, "cannot detect size of local file" );
+        }
+        else
+        {
+            rc = KFileSize( cf -> remote, &cf -> remote_size );
+            if ( rc != 0 )
+            {
+                LOGERR( klogErr, rc, "cannot detect size of remote file" );
+            }
+            else
+            {
+                if ( cf -> local_size == 0 )
+                {
+                    /* the local file was just created... */
+                    if ( cf -> remote_size == 0 )
+                    {
+                        rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcInvalid );
+                        LOGERR( klogErr, rc, "size of remote file is zero" );
+                    }
+                    else
+                    {
+                        rc = calculate_local_size_from_remote_size( cf );
+                        if ( rc == 0 )
+                        {
+                            rc = KFileSetSize ( cf -> local, cf -> local_size );
+                            if ( rc == 0 )
+                            {
+                                rc = init_new_local_file( cf );
+                            }
+                            else
+                            {
+                                PLOGERR( klogInt, ( klogInt, rc, "cannot size local file to $(l) bytes", "l=%lu", cf->local_size ) );
+                            }
+                        }
+                    }
+                }
+                else
+                    rc = verify_existing_local_file( cf, false );
+            }
+
+            if ( rc == 0 && cf -> fully_in_cache && ! cf -> local_read_only && cf -> lock != NULL )
+            {
+                /* here is the up-front-test: the cache is complete and we have write access! */
+                rc = promote_cache( cf );
+                /*
+                if ( rc == 0 )
+                    rc = KFileAddRef( cf -> local );
+                */
+                if ( rc == 0 )
+                {
+                    *tee = cf -> local;
+                    KLockFileRelease ( cf -> lock );
+                    free ( cf );
+                    return rc;  /* here we return the truncated, promoted cache as tee-file ! */
+                }
+            }
+
+            if ( rc == 0 )
+            {
+                if ( cf -> remote_size == 0 )
+                    cf -> remote_size = cf -> local_size;
+
+                /* now we have to AddRef() everything we hang on until the final release! */
+                rc = KDirectoryAddRef ( cf -> dir );
+                if ( rc == 0 )
+                {
+                    rc = KFileAddRef( cf -> remote );
+                    if ( rc == 0 )
+                    {
+                        /* rc = KFileAddRef( cf -> local ); */
+                        if ( rc == 0 )
+                        {
+                            if ( cf -> logger != NULL )
+                                rc = KFileAddRef( cf -> logger );
+                            if ( rc == 0 )
+                            {
+                                rc = KFileInit( &cf -> dad, (const union KFile_vt *)&vtKCacheTeeFile, "KCacheTeeFile", path, true, false );
+                                if ( rc == 0 )
+                                {
+                                    /* the wrapper is ready to use now! */
+                                    *tee = ( const KFile * ) &cf -> dad;
+                                    return 0;
+                                }
+                                else
+                                {
+                                    LOGERR( klogErr, rc, "cannot initialize KFile-structure" );
+                                    KFileRelease( cf -> logger );
+                                    KFileRelease( cf -> local );
+                                    KFileRelease( cf -> remote );
+                                    KDirectoryRelease ( cf -> dir );
+                                }
+                            }
+                            else
+                            {
+                                KFileRelease( cf -> local );
+                                KFileRelease( cf -> remote );
+                                KDirectoryRelease ( cf -> dir );
+                            }
+                        }
+                        else
+                        {
+                            KFileRelease( cf -> remote );
+                            KDirectoryRelease ( cf -> dir );
+                        }
+                    }
+                    else
+                        KDirectoryRelease ( cf -> dir );
+                }
+            }
+        }
+        free ( cf );
+    }
+    return rc;
+}
+
+
+static rc_t make_read_only_cache_tee( struct KDirectory *self,
+    struct KFile const **tee, struct KFile const *remote, struct KFile *logger,
+    uint32_t blocksize, uint32_t cluster, bool report, const char *path )
+{
+    const struct KFile * local;
+    rc_t rc = KDirectoryOpenFileRead( self, &local, "%s.cache", path );
+    if ( rc == 0 )
+    {
+        if ( report )
+            KOutMsg( "successfuly opened cache file '%s.cache' in read/only-mode\n",
+                      path );
+        rc = make_cache_tee( self, tee, remote, ( struct KFile * )local, logger, NULL,
+                             blocksize, cluster, report, path );
+    }
+    else
+    {
+        /* we cannot even open the local cache in read-only mode,
+           we give up - and return a reference to the remote file... */
+        rc = KFileAddRef( remote );
+        if ( rc == 0 )
+        {
+            if ( report )
+                KOutMsg( "cannot open cache file '%s.cache' in read/only-mode ( returning remote-file )\n",
+                          path );
+            *tee = remote;
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC KDirectoryVMakeCacheTee ( struct KDirectory *self,
+    struct KFile const **tee, struct KFile const *remote, struct KFile *logger,
+    uint32_t blocksize, uint32_t cluster, bool report, const char *path, va_list args )
+{
+    rc_t rc;
+    if ( tee == NULL || remote == NULL )
+        rc = RC ( rcFS, rcFile, rcAllocating, rcParam, rcNull );
+    else
+    {
+        if ( self == NULL )
+            rc = RC ( rcFS, rcFile, rcAllocating, rcSelf, rcNull );
+        else if ( path == NULL )
+            rc = RC ( rcFS, rcFile, rcAllocating, rcPath, rcNull );
+        else if ( path [ 0 ] == 0 )
+            rc = RC ( rcFS, rcFile, rcAllocating, rcPath, rcEmpty );
+        else
+        {
+            char full [ 4096 ];
+
+#if CACHE_TEE_REPORT == 1
+            report = true;
+#endif
+
+            rc = KDirectoryVResolvePath ( self, false, full, sizeof full, path, args );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogErr, ( klogErr, rc, "cannot resolve path of cache file '$(path)'", 
+                        "path=%s", full ) );
+            }
+            else
+            {
+                KLockFile *lock = NULL;
+
+                if ( report )
+                    KOutMsg( "CREATE CacheTeeFile for '%s'\n", full );
+
+                rc = KDirectoryCreateLockFile ( self, &lock, "%s.cache.lock", full );
+                if ( rc == 0 )
+                {
+                    /* it was possible to aquire the lock on the cache-file */
+                    struct KFile * local;
+
+                    if ( report )
+                        KOutMsg( "successfuly aquired lockfile '%s.cache.lock'\n", full );
+
+
+                    rc = KDirectoryOpenFileWrite( self, &local, true, "%s.cache", full );
+                    if ( rc == 0 )
+                    {
+                        if ( report )
+                            KOutMsg( "successfuly opened '%s.cache'\n", full );
+
+                        /* we have the exclusive rd/wr access to the cache file !*/
+                        rc = make_cache_tee( self, tee, remote, local, logger, lock,
+                                             blocksize, cluster, report, full );
+                    }
+                    else if ( GetRCState( rc ) == rcNotFound )
+                    {
+                        rc = KDirectoryCreateFile( self, &local, true, 0664, kcmOpen, "%s.cache", full );
+                        if ( rc == 0 )
+                        {
+                            if ( report )
+                                KOutMsg( "cache-file '%s.cache' created with rd/wr-access\n", full );
+                            /* we have the exclusive rd/wr access to the cache file !*/
+                            rc = make_cache_tee( self, tee, remote, local, logger, lock,
+                                                 blocksize, cluster, report, full );
+                        }
+                    }
+                    else
+                    {
+                        if ( report )
+                            KOutMsg( "no rd/wr access to cache-file '%s.cache' rc=%R\n", full, rc );
+
+                        /* we do not have the exclusive rd/wr access to the cache file !*/
+                        rc = KLockFileRelease ( lock );
+                        if ( rc == 0 )
+                            rc = make_read_only_cache_tee( self, tee, remote, logger,
+                                    blocksize, cluster, report, full );
+                    }
+                }
+                else if ( GetRCState ( rc ) == rcBusy )
+                {
+                    if ( report )
+                        KOutMsg( "failed to aquired lockfile '%s.cache.lock'\n", full );
+
+                    /* it was NOT possible to aquire the lock on the cache-file */
+                    rc = make_read_only_cache_tee( self, tee, remote, logger,
+                            blocksize, cluster, report, full );
+                }
+                else
+                {
+                    PLOGERR( klogErr, ( klogErr, rc, "cannot create lock-file '$(path).cache.lock'", 
+                            "path=%s", full ) );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC KDirectoryMakeCacheTee ( struct KDirectory *self,
+    struct KFile const **tee, struct KFile const *remote, struct KFile *logger,
+    uint32_t blocksize, uint32_t cluster, bool report, const char *path, ... )
+{
+    rc_t rc;
+    va_list args;
+    va_start ( args, path );
+
+    rc = KDirectoryVMakeCacheTee ( self, tee, remote, logger, blocksize, cluster, report, path, args );
+
+    va_end ( args );
+
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC GetCacheCompleteness( const struct KFile * self, float * percent )
+{
+    rc_t rc;
+    if ( self == NULL )
+        rc = RC( rcFS, rcFile, rcValidating, rcSelf, rcNull );
+    else if ( percent == NULL )
+        rc = RC( rcFS, rcFile, rcValidating, rcParam, rcNull );
+    else
+    {
+        uint64_t local_size;
+        *percent = 0;
+        rc = KFileSize( self, &local_size );
+        if ( rc != 0 )
+        {
+            LOGERR( klogErr, rc, "cannot detect filesize when checking if cached file is complete" );
+        }
+        else
+        {
+            uint32_t block_size;
+            rc = read_block_size( self, local_size, &block_size, false );
+            if ( rc == 0 )
+            {
+                uint64_t content_size;
+                rc = read_content_size( self, local_size, &content_size, false );
+                /* create bitmap buffer */
+                if ( rc == 0 )
+                {
+                    uint64_t block_count;
+                    /* size_t */ uint64_t bitmap_bytes;
+                    rc = verify_file_structure( local_size, block_size, content_size, &block_count, &bitmap_bytes, false );
+                    if ( rc == 0 )
+                    {
+                        uint8_t * bitmap = NULL;
+                        rc = create_bitmap_buffer( &bitmap, bitmap_bytes );
+                        if ( rc == 0 )
+                        {
+                            size_t num_read;
+                            /* read the bitmap into the memory ... */
+                            rc = KFileReadAll ( self, content_size, bitmap, bitmap_bytes, &num_read );
+                            if ( rc != 0 )
+                            {
+                                LOGERR( klogErr, rc, "cannot read bitmap from local file" );
+                            }
+                            else if ( num_read != bitmap_bytes )
+                            {
+                                rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcInvalid );
+                                PLOGERR( klogErr, ( klogErr, rc, "cannot read $(ls) bitmap-bytes from local file, read $(rs) instead", 
+                                               "ls=%lu,rs=%lu", bitmap_bytes, num_read ));
+                            }
+                        }
+                        if ( rc == 0 )
+                        {
+                            uint64_t idx, in_cache = 0;
+                            for ( idx = 0; idx < block_count; ++idx )
+                            {
+                                if ( IS_BITMAP_BIT( bitmap, idx ) )
+                                    in_cache++;
+                            }
+                            if ( in_cache > 0 && block_count > 0 )
+                            {
+                                float res = in_cache;
+                                res *= 100;
+                                res /= block_count;
+                                * percent = res;
+                            }
+                        }
+                        if ( bitmap != NULL )
+                            free( bitmap );
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+/* -----
+ * examens the file, and reports the size of the original file ( without the cachefile-footer )
+ *
+ */
+LIB_EXPORT rc_t CC GetCacheTruncatedSize( const struct KFile * self, uint64_t * truncated_size, bool silent )
+{
+    rc_t rc;
+    if ( self == NULL )
+        rc = RC( rcFS, rcFile, rcValidating, rcSelf, rcNull );
+    else if ( truncated_size == NULL )
+        rc = RC( rcFS, rcFile, rcValidating, rcParam, rcNull );
+    else
+    {
+        uint64_t local_size;
+        *truncated_size = 0;
+        rc = KFileSize( self, &local_size );
+        if ( rc != 0 )
+        {
+            if ( !silent )
+            {
+                LOGERR( klogErr, rc, "cannot detect filesize when checking if cached file is complete" );
+            }
+        }
+        /* TODO: need to do a better constant tha a magic number */
+        else if (local_size < 13)
+        {
+            rc = RC ( rcFS, rcFile, rcValidating, rcSize, rcInsufficient );
+            if ( !silent )
+            {
+                LOGERR( klogErr, rc, "cannot use filesize of zero when checking if cached file is complete" );
+            }
+        }
+        else
+        {
+            uint32_t block_size;
+            rc = read_block_size( self, local_size, &block_size, true );
+            if ( rc == 0 )
+            {
+                uint64_t content_size;
+                rc = read_content_size( self, local_size, &content_size, true );
+                if ( rc == 0 )
+                {
+                    uint64_t block_count;
+                    /* size_t */ uint64_t bitmap_bytes;
+                    rc = verify_file_structure( local_size, block_size, content_size, &block_count, &bitmap_bytes, true );
+                    if ( rc == 0 )
+                    {
+                        *truncated_size = content_size;
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
diff --git a/libs/kfs/countfile.c b/libs/kfs/countfile.c
index 565855a..d34c5e9 100644
--- a/libs/kfs/countfile.c
+++ b/libs/kfs/countfile.c
@@ -45,6 +45,16 @@
 #define KFILE_IMPL struct KCounterFile
 #include <kfs/impl.h>
 
+/* clear out possible macro definitions of FS and GS,
+ * which show up on Solaris/x86 when building with GCC (per sys/ucontext.h)
+ */
+#ifdef FS
+#  undef FS
+#endif
+#ifdef GS
+#  undef GS
+#endif
+
 static rc_t CC KCounterFileDestroy (KCounterFile *self);
 static struct KSysFile *CC KCounterFileGetSysFile (const KCounterFile *self,
 					    uint64_t *offset);
@@ -138,6 +148,7 @@ rc_t KCounterFileMake (KCounterFile ** pself,
     {
 	rc = KFileInit (&self->dad,			/* initialize base class */
 			(const KFile_vt*)&vtKCounterFile,/* VTable for KCounterFile */
+            "KCounterFile", "no-name",
 			original->read_enabled,
 			original->write_enabled);
 	if (rc == 0)
diff --git a/libs/kfs/crc32.c b/libs/kfs/crc32.c
index 944b819..a2a38a0 100644
--- a/libs/kfs/crc32.c
+++ b/libs/kfs/crc32.c
@@ -706,11 +706,14 @@ LIB_EXPORT rc_t CC KCRC32SumFmtUpdate ( KCRC32SumFmt *self, const char *path, ui
             }
 
             /* if existing, perform update */
-            else if ( exist -> crc32 != entry -> crc32 || exist -> bin != entry -> bin )
+            else
             {
-                exist -> crc32 = entry -> crc32;
-                exist -> bin = entry -> bin;
-                self -> dirty = true;
+                if ( exist -> crc32 != entry -> crc32 || exist -> bin != entry -> bin )
+                {
+                    exist -> crc32 = entry -> crc32;
+                    exist -> bin = entry -> bin;
+                    self -> dirty = true;
+                }
                 KCRC32SumEntryWhack ( & entry -> n, NULL );
             }
         }
@@ -1383,7 +1386,7 @@ LIB_EXPORT rc_t CC KFileMakeCRC32Read ( const KFile **fp,
             else
             {
                 rc = KFileInit ( & f -> dad,
-				     ( const KFile_vt* ) & KCRC32FileRead_vt, true, false );
+				     ( const KFile_vt* ) & KCRC32FileRead_vt, "KCRC32File", "no-name", true, false );
                 if ( rc == 0 )
                 {
                     f -> position = 0;
@@ -1477,7 +1480,7 @@ LIB_EXPORT rc_t CC KCRC32FileMakeWrite ( KCRC32File **fp,
             else
             {
                 rc = KFileInit ( & f -> dad,
-                    ( const KFile_vt* ) & sKCRC32FileWrite_vt, out -> read_enabled, true );
+                    ( const KFile_vt* ) & sKCRC32FileWrite_vt, "KCRC32File", path, out -> read_enabled, true );
                 if ( rc == 0 )
                 {
                     f -> position = 0;
@@ -1587,7 +1590,7 @@ LIB_EXPORT rc_t CC KCRC32FileMakeAppend ( KCRC32File **fp, KFile *out, KCRC32Sum
             else
             {
                 rc = KFileInit ( & f -> dad,
-                    ( const KFile_vt* ) & sKCRC32FileAppend_vt, out -> read_enabled, true );
+                    ( const KFile_vt* ) & sKCRC32FileAppend_vt, "KCRC32File", path, out -> read_enabled, true );
                 if ( rc == 0 )
                 {
                     f -> crc32 = 0;
@@ -1734,7 +1737,7 @@ LIB_EXPORT rc_t CC KFileMakeNewCRC32Read ( const KFile **fp,
             else
             {
                 rc = KFileInit ( & f -> dad,
-                    ( const KFile_vt* ) & sKCRC32FileReadCreate_vt, in -> read_enabled, false );
+                    ( const KFile_vt* ) & sKCRC32FileReadCreate_vt, "KCRC32File", path, in -> read_enabled, false );
                 if ( rc == 0 )
                 {
                     f -> position = 0;
diff --git a/libs/kfs/directory.c b/libs/kfs/directory.c
index 4786669..f3ba147 100644
--- a/libs/kfs/directory.c
+++ b/libs/kfs/directory.c
@@ -30,8 +30,11 @@
 #include <kfs/impl.h>
 #include <klib/refcount.h>
 #include <klib/rc.h>
+#include <klib/text.h>
+#include <klib/printf.h>
 #include <sysalloc.h>
 
+#include <stdlib.h>
 
 /*--------------------------------------------------------------------------
  * KDirectory
@@ -1151,10 +1154,8 @@ LIB_EXPORT rc_t CC KDirectoryVOpenDirRead ( const KDirectory *self,
     if ( self == NULL )
         return RC ( rcFS, rcDirectory, rcOpening, rcSelf, rcNull );
 
-    if ( path == NULL )
-        return RC ( rcFS, rcDirectory, rcOpening, rcPath, rcNull );
-    if ( path [ 0 ] == 0 )
-        return RC ( rcFS, rcDirectory, rcOpening, rcPath, rcInvalid );
+    if ( path == NULL || path [ 0 ] == 0 )
+        path = ".";
 
     switch ( self -> vt -> v1 . maj )
     {
@@ -1190,14 +1191,12 @@ LIB_EXPORT rc_t CC KDirectoryVOpenDirUpdate ( KDirectory *self,
     if ( self == NULL )
         return RC ( rcFS, rcDirectory, rcOpening, rcSelf, rcNull );
 
-    if ( path == NULL )
-        return RC ( rcFS, rcDirectory, rcOpening, rcPath, rcNull );
-    if ( path [ 0 ] == 0 )
-        return RC ( rcFS, rcDirectory, rcOpening, rcPath, rcInvalid );
-
     if ( self -> read_only )
         return RC ( rcFS, rcDirectory, rcOpening, rcDirectory, rcReadonly );
 
+    if ( path == NULL || path [ 0 ] == 0 )
+        path = ".";
+
     switch ( self -> vt -> v1 . maj )
     {
     case 1:
@@ -1371,3 +1370,169 @@ LIB_EXPORT struct KSysDir* CC KDirectoryGetSysDir ( const KDirectory *self )
     return NULL;
 }
 
+
+static rc_t copy_loop( const KFile *src, KFile *dst, size_t bsize )
+{
+    rc_t rc = 0;
+    uint64_t pos = 0;
+    size_t num_read = 1;
+
+    char * buffer = malloc( bsize );
+    if ( buffer == NULL )
+        return RC( rcFS, rcDirectory, rcCopying, rcMemory, rcExhausted );
+
+    while ( rc == 0 && num_read > 0 )
+    {
+        rc = KFileRead ( src, pos, buffer, bsize, &num_read );
+        if ( rc == 0 && num_read > 0 )
+        {
+            size_t num_writ;
+            rc = KFileWrite ( dst, pos, buffer, num_read, &num_writ );
+            pos += num_read;
+        }
+    }
+    free( buffer );
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC KDirectoryCopyPath ( const KDirectory *src_dir,
+    KDirectory *dst_dir, const char *src_path, const char * dst_path )
+{
+    rc_t rc;
+    struct KFile const *f_src;
+
+    if ( src_dir == NULL || dst_dir == NULL )
+        return RC ( rcFS, rcDirectory, rcCopying, rcSelf, rcNull );
+    if ( src_path == NULL || dst_path == NULL )
+        return RC ( rcFS, rcDirectory, rcCopying, rcParam, rcNull );
+
+    rc = KDirectoryOpenFileRead ( src_dir, &f_src, "%s", src_path );
+    if ( rc == 0 )
+    {
+        uint32_t pt = KDirectoryPathType ( dst_dir, "%s", dst_path );
+        switch( pt )
+        {
+            case kptFile : ; /* intentional fall through! */
+            case kptDir  : rc = KDirectoryRemove ( dst_dir, true, "%s", dst_path ); break;
+        }
+        if ( rc == 0 )
+        {
+            struct KFile *f_dst;
+            uint32_t access = 0664;
+            rc = KDirectoryCreateFile ( dst_dir, &f_dst, false, access, kcmCreate, "%s", dst_path );
+            if ( rc == 0 )
+            {
+                rc = copy_loop( f_src, f_dst, 1024 * 16 );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t build_obj_path( char **s, const char *path, const char * objname )
+{
+    rc_t rc;
+    size_t lp = string_size( path );
+    size_t l = lp + string_size( objname ) + 2;
+    *s = malloc( l );
+    if ( *s == NULL )
+        rc = RC( rcFS, rcDirectory, rcCopying, rcMemory, rcExhausted );
+    else
+    {
+        size_t written;
+        const char * concat = ( ( path[ lp - 1 ] == '/' ) ? "%s%s" : "%s/%s" );
+        rc = string_printf( *s, l, &written, concat, path, objname );
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC KDirectoryCopyPaths( const KDirectory * src_dir,
+    KDirectory * dst_dir, bool recursive, const char *src, const char *dst )
+{
+    rc_t rc;
+    struct KNamelist *list;
+
+    if ( src_dir == NULL || dst_dir == NULL )
+        return RC ( rcFS, rcDirectory, rcCopying, rcSelf, rcNull );
+    if ( src == NULL || dst == NULL )
+        return RC ( rcFS, rcDirectory, rcCopying, rcParam, rcNull );
+
+    rc = KDirectoryList ( src_dir, &list, NULL, NULL, "%s", src );
+    if ( rc == 0 )
+    {
+        uint32_t pt = KDirectoryPathType ( dst_dir, "%s", dst );
+        /* if the output-directory does not exist: create it! */
+        switch( pt )
+        {
+            case kptFile : rc = KDirectoryRemove ( dst_dir, true, "%s", dst );
+                            /* intentially no break ! */
+
+            case kptNotFound : if ( rc == 0 )
+                                    rc = KDirectoryCreateDir ( dst_dir, 0775, kcmCreate | kcmParents, "%s", dst );
+                               break;
+        }
+        if ( rc == 0 )
+        {
+            uint32_t i, n;
+            rc = KNamelistCount ( list, &n );
+            for ( i = 0; i < n && rc == 0; ++i )
+            {
+                const char *name;
+                rc = KNamelistGet ( list, i, &name );
+                if ( rc == 0 )
+                {
+                    char *src_obj;
+                    rc = build_obj_path( &src_obj, src, name );
+                    if ( rc == 0 )
+                    {
+                        char *dst_obj;
+                        rc = build_obj_path( &dst_obj, dst, name );
+                        if ( rc == 0 )
+                        {
+                            pt = KDirectoryPathType ( src_dir, "%s", src_obj );
+                            switch( pt )
+                            {
+                                case kptFile : rc = KDirectoryCopyPath ( src_dir, dst_dir, src_obj, dst_obj );
+                                               break;
+
+                                case kptDir  : if ( recursive )
+                                                    rc = KDirectoryCopyPaths( src_dir, dst_dir, true, src_obj, dst_obj );
+                                               break;
+                            }
+                            free( dst_obj );
+                        }
+                        free( src_obj );
+                    }
+                }
+            }
+        }
+        KNamelistRelease ( list );
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC KDirectoryCopy( const KDirectory * src_dir,
+    KDirectory * dst_dir, bool recursive, const char *src, const char *dst )
+{
+    rc_t rc = 0;
+    uint32_t pt;
+
+    if ( src_dir == NULL || dst_dir == NULL )
+        return RC ( rcFS, rcDirectory, rcCopying, rcSelf, rcNull );
+    if ( src == NULL || dst == NULL )
+        return RC ( rcFS, rcDirectory, rcCopying, rcParam, rcNull );
+
+    pt = KDirectoryPathType ( src_dir, "%s", src );
+    switch( pt )
+    {
+        case kptFile : rc = KDirectoryCopyPath ( src_dir, dst_dir, src, dst );
+                        break;
+        case kptDir  : rc = KDirectoryCopyPaths ( src_dir, dst_dir, recursive, src, dst );
+                        break;
+    }
+    return rc;
+}
diff --git a/libs/kfs/ffext.c b/libs/kfs/ffext.c
index 39dde22..390fa28 100644
--- a/libs/kfs/ffext.c
+++ b/libs/kfs/ffext.c
@@ -27,6 +27,7 @@
 #include <kfs/extern.h>
 #include <klib/rc.h>
 #include <kfs/file.h>
+#include <klib/text.h>
 #include <klib/log.h>
 #include <klib/container.h>
 #include <kfs/fileformat.h>
@@ -681,6 +682,7 @@ rc_t CC KExtFileFormatGetTypePath (const KExtFileFormat *self,
     rc_t rc = 0;
     const char * b;
     const char * s;
+    size_t size;
 
 
     FUNC_ENTRY();
@@ -698,7 +700,7 @@ rc_t CC KExtFileFormatGetTypePath (const KExtFileFormat *self,
 
     b = strrchr (s, '.');
     if (b == NULL)
-	b = path + strlen(path) - 1; /* will be an empty string when calls KExtTableFind */
+	b = path + string_measure(path, &size) - 1; /* will be an empty string when calls KExtTableFind */
     {
 	KExtNode * node;
 	size_t c;
@@ -720,7 +722,7 @@ rc_t CC KExtFileFormatGetTypePath (const KExtFileFormat *self,
 		if (c > descr_max)
 		    c = descr_max-1;
 		if (descr)
-		    strncpy (descr, node->kffdescr, c);
+		    string_copy (descr, descr_max, node->kffdescr, c);
 		descr[c] = '\0';
 		if (descr_len)
 		    *descr_len = c;
@@ -742,15 +744,15 @@ rc_t CC KExtFileFormatGetTypePath (const KExtFileFormat *self,
 
 
 #else
-	size_t l = strlen (b);
+	size_t l = string_measure (b, &size);
 	if (desc != NULL)
 	{
-	    strncpy (desc, b, desc_max);
+	    string_copy (desc, desc_max, b, l);
 	    if (desc_max < l)
 		desc[desc_max-1] = 0;
 	}
 	if (descr_len != NULL)
-	    *descr_len = strlen (b);
+	    *descr_len = l;
 	if (type != NULL)
 	    *type = kfftUnknown;
 	if (class != NULL)
diff --git a/libs/kfs/ffmagic.c b/libs/kfs/ffmagic.c
index b4e100d..f572a04 100644
--- a/libs/kfs/ffmagic.c
+++ b/libs/kfs/ffmagic.c
@@ -28,10 +28,13 @@
 #include <magic.h>
 #include <klib/rc.h>
 #include <kfs/file.h>
+#include <klib/text.h>
 #include <klib/log.h>
+#include <klib/debug.h>
 #include <klib/container.h>
 #include <kfs/directory.h>
 #include <kfs/fileformat.h>
+#include <kfg/config.h>
 #include <sysalloc.h>
 #include "fileformat-priv.h"
 struct KMagicFileFormat;
@@ -731,7 +734,7 @@ rc_t KMagicFileFormatGetTypeBuff (const KMagicFileFormat *self, const void * buf
 		if (c > descr_max)
 		    c = descr_max-1;
 		if (descr)
-		    strncpy (descr, node->kffdescr, c);
+		    string_copy(descr, descr_max, node->kffdescr, c);
 		descr[c] = '\0';
 		if (descr_len)
 		    *descr_len = c;
@@ -753,12 +756,13 @@ rc_t KMagicFileFormatGetTypeBuff (const KMagicFileFormat *self, const void * buf
 
 
 #else
-	size_t l = strlen (b);
-	if (desc != NULL)
+    size_t size;
+	size_t l = string_measure(b, &size);
+	if (descr != NULL)
 	{
-	    strncpy (desc, b, desc_max);
-	    if (desc_max < l)
-		desc[desc_max-1] = 0;
+	    string_copy (descr, descr_max, b, l);
+	    if (descr_max < l)
+		descr[descr_max-1] = 0;
 	}
 	if (descr_len != NULL)
 	    *descr_len = strlen (b);
@@ -781,6 +785,9 @@ LIB_EXPORT rc_t CC KMagicFileFormatMake (KFileFormat ** pft, const char * magic_
 
     FUNC_ENTRY();
 
+    DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF),
+            ("%s: load path as called %s\n", __func__, magic_path));
+
     self = malloc (sizeof * self);
     if (self == NULL)
     {
@@ -788,6 +795,8 @@ LIB_EXPORT rc_t CC KMagicFileFormatMake (KFileFormat ** pft, const char * magic_
 	LOGERR (klogFatal, rc, "Failed to allocate for KMagicFileFormat");
     }
     else
+
+
     {
 	rc = KFileFormatInit (&self->dad, (const KFileFormat_vt *)&vt_v1, typeAndClass, tclen);
 	if (rc == 0)
@@ -798,7 +807,8 @@ LIB_EXPORT rc_t CC KMagicFileFormatMake (KFileFormat ** pft, const char * magic_
 		rc = KMagicTableInit (self->table, self->dad.tables, magic, magiclen);
 		if (rc == 0)
 		{
-		    self->cookie = magic_open (MAGIC_PRESERVE_ATIME);
+ 		    self->cookie = magic_open (MAGIC_PRESERVE_ATIME);
+/* 		    self->cookie = magic_open (MAGIC_PRESERVE_ATIME|MAGIC_DEBUG|MAGIC_CHECK); */
 		    if (self->cookie == NULL)
 		    {
 			rc = RC (rcFF, rcFileFormat, rcConstructing, rcResources, rcNull);
@@ -806,17 +816,111 @@ LIB_EXPORT rc_t CC KMagicFileFormatMake (KFileFormat ** pft, const char * magic_
 		    }
 		    else
 		    {
+                        KDirectory * pwd;
+                        KConfig * kfg;
+                        static const char unix_magic_path[] = "/usr/share/file/magic";
+                        static const char kfg_magic_path[] = "kfs/kff/magic";
+                        char * magic_path_cursor;
+                        char kfg_magic_path_buff [1024];
+                        char magic_path_buff [4096];
+                        size_t z;
 			int load_code;
+
+
+                        magic_path_cursor = magic_path_buff;
+
+                        if (magic_path)
+                        {
+                            z = strlen (magic_path);
+                            if (magic_path_cursor != magic_path_buff)
+                                *magic_path_cursor++ = ':';
+                            memcpy (magic_path_cursor, magic_path, z);
+                            magic_path_cursor += z;
+                            *magic_path_cursor = '\0';
+                            DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF),
+                                    ("%s: 1 magic_path_buff %s\n", __func__, magic_path_buff));
+                        }
+
+                        /* see if we have a configured alternate magic path */
+                        rc = KConfigMake (&kfg, NULL);
+                        if (rc == 0)
+                        {
+                            const KConfigNode * node;
+                            rc = KConfigOpenNodeRead (kfg, &node, kfg_magic_path);
+                            if (rc == 0)
+                            {
+                                size_t remaining;
+                                rc = KConfigNodeRead (node, 0, kfg_magic_path_buff,
+                                                      sizeof kfg_magic_path_buff-1,
+                                                      &z, &remaining);
+                                if (rc == 0)
+                                {
+                                    if (remaining != 0)
+                                    {
+                                        rc = RC (rcFF, rcFileFormat, rcLoading, 
+                                                 rcString, rcExcessive);
+                                        DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF),
+                                                ("%s: failed KConfigOpenNodeRead remaining %zu %R\n",
+                                                 __func__, remaining, rc));
+                                    }
+                                    else if (z)
+                                    {
+                                        kfg_magic_path_buff[z] = '\0';
+                                        if (magic_path_cursor != magic_path_buff)
+                                            *magic_path_cursor++ = ':';
+                                        memcpy (magic_path_cursor,kfg_magic_path_buff, z);
+                                        magic_path_cursor += z;
+                                        *magic_path_cursor = '\0';
+                                        DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF),
+                                                ("%s: 3 magic_path_buff %s\n", __func__, magic_path_buff));
+                                    }
+                                }
+                                else
+                                    DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF),
+                                            ("%s: failed KConfigNodeRead %R\n", __func__, rc));
+                            }
+                            else
+                                DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF),
+                                        ("%s: failed KConfigOpenNodeRead %R\n", __func__, rc));
+                        }
+                        else
+                            DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF),
+                                    ("%s: failed KConfigMake %R\n", __func__, rc));
 			
-			load_code = magic_load (self->cookie, magic_path); /* figger out how to do an over-ride correctly ? */
+                        rc = KDirectoryNativeDir (&pwd);
+                        if (rc == 0)
+                        {
+                            KPathType kpt = KDirectoryPathType (pwd, unix_magic_path);
+                            DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF),
+                                    ("%s: %s %x\n", __func__, unix_magic_path, kpt));
+                            if ((kpt & ~ kptAlias) == kptFile)
+                            {
+                                z = strlen (unix_magic_path);
+                                if (magic_path_cursor != magic_path_buff)
+                                    *magic_path_cursor++ = ':';
+                                memcpy (magic_path_cursor, unix_magic_path, z);
+                                magic_path_cursor += z;
+                                *magic_path_cursor = '\0';
+                                DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF),
+                                        ("%s: 2 magic_path_buff %s\n", __func__, magic_path_buff));
+                            }
+                        }
+                        else
+                            LOGERR (klogErr, rc, "Failed to open NativeDir for Magic");
+
+                        DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF),
+                                ("%s: loading path %s\n", __func__, magic_path_buff));
+
+			load_code = magic_load (self->cookie, magic_path_buff);
 			if (load_code != 0) /* defined as 0 success and -1 as fail */
 			{
+                            KFF_DEBUG (("%s: magic_load() failed with load code %d\n", __func__, load_code));
 			    rc = RC (rcFF, rcFileFormat, rcLoading, rcLibrary, rcUnexpected);
 			}
 			else
 			{
 			    *pft = &self->dad;
-                            KFF_DEBUG (("%s Success", __func__));
+                            KFF_DEBUG (("%s Success\n", __func__));
 			    return 0;
 			}
 			magic_close (self->cookie);
diff --git a/libs/kfs/file.c b/libs/kfs/file.c
index 42063e4..65408c2 100644
--- a/libs/kfs/file.c
+++ b/libs/kfs/file.c
@@ -82,7 +82,17 @@ LIB_EXPORT struct KSysFile* CC KFileGetSysFile ( const KFile *self, uint64_t *of
 LIB_EXPORT rc_t CC KFileAddRef ( const KFile *self )
 {
     if ( self != NULL )
-        atomic32_inc ( & ( ( KFile* ) self ) -> refcount );
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "KFile" ) )
+        {
+        case krefLimit:
+            return RC ( rcFS, rcFile, rcAttaching, rcRange, rcExcessive );
+        case krefNegative:
+            return RC ( rcFS, rcFile, rcAttaching, rcSelf, rcInvalid );
+        default:
+            break;
+        }
+    }
     return 0;
 }
 
@@ -90,25 +100,23 @@ LIB_EXPORT rc_t CC KFileAddRef ( const KFile *self )
  *  discard reference to file
  *  ignores NULL references
  */
-LIB_EXPORT rc_t CC KFileRelease ( const KFile *cself )
+LIB_EXPORT rc_t CC KFileRelease ( const KFile *self )
 {
-    KFile *self = ( KFile* ) cself;
-    if ( cself != NULL )
+    if ( self != NULL )
     {
-        if ( atomic32_dec_and_test ( & self -> refcount ) )
+        switch ( KRefcountDrop ( & self -> refcount, "KFile" ) )
         {
-            rc_t rc;
-
+        case krefWhack:
             if ( self -> dir != NULL )
-                rc = KDirectoryDestroyFile ( self -> dir, self );
-            else
-                rc = KFileDestroy ( self );
-
-            if ( rc != 0 )
-                atomic32_set ( & self -> refcount, 1 );
-            return rc;
+                return KDirectoryDestroyFile ( self -> dir, ( KFile* ) self );
+            return KFileDestroy ( ( KFile* ) self );
+        case krefLimit:
+            return RC ( rcFS, rcFile, rcReleasing, rcRange, rcExcessive );
+        default:
+            break;
         }
     }
+
     return 0;
 }
 
@@ -236,6 +244,67 @@ LIB_EXPORT rc_t CC KFileRead ( const KFile *self, uint64_t pos,
     return RC ( rcFS, rcFile, rcReading, rcInterface, rcBadVersion );
 }
 
+/* ReadAll
+ *  read from file until "bsize" bytes have been retrieved
+ *  or until end-of-input
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ *  "num_read" [ OUT ] - return parameter giving number of bytes
+ *  actually read. when returned value is zero and return code is
+ *  also zero, interpreted as end of file.
+ */
+LIB_EXPORT rc_t CC KFileReadAll ( const KFile *self, uint64_t pos,
+    void *buffer, size_t bsize, size_t *num_read )
+{
+    rc_t rc;
+    uint8_t *b;
+    size_t total, count;
+
+    if ( num_read == NULL )
+        return RC ( rcFS, rcFile, rcReading, rcParam, rcNull );
+
+    * num_read = 0;
+
+    if ( self == NULL )
+        return RC ( rcFS, rcFile, rcReading, rcSelf, rcNull );
+
+    if ( ! self -> read_enabled )
+        return RC ( rcFS, rcFile, rcReading, rcFile, rcNoPerm );
+
+    if ( buffer == NULL )
+        return RC ( rcFS, rcFile, rcReading, rcBuffer, rcNull );
+    if ( bsize == 0 )
+        return RC ( rcFS, rcFile, rcReading, rcBuffer, rcInsufficient );
+
+    switch ( self -> vt -> v1 . maj )
+    {
+    case 1:
+        for ( rc = 0, b = buffer, total = 0; total < bsize; total += count )
+        {
+            count = 0;
+            rc = ( * self -> vt -> v1 . read ) ( self, pos + total, b + total, bsize - total, & count );
+            if ( rc != 0 )
+                break;
+            if ( count == 0 )
+                break;
+        }
+        break;
+    default:
+        return RC ( rcFS, rcFile, rcReading, rcInterface, rcBadVersion );
+    }
+
+    if ( total != 0 )
+    {
+        * num_read = total;
+        return 0;
+    }
+
+    return rc;
+}
+
 /* Write
  *  write file at known position
  *
@@ -274,10 +343,71 @@ LIB_EXPORT rc_t CC KFileWrite ( KFile *self, uint64_t pos,
     return RC ( rcFS, rcFile, rcWriting, rcInterface, rcBadVersion );
 }
 
+/* WriteAll
+ *  write from file until "size" bytes have been transferred
+ *  or until no further progress can be made
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ *  "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually written
+ */
+LIB_EXPORT rc_t CC KFileWriteAll ( KFile *self, uint64_t pos,
+    const void *buffer, size_t size, size_t *num_writ )
+{
+    rc_t rc;
+    const uint8_t *b;
+    size_t total, count;
+
+    size_t ignore;
+    if ( num_writ == NULL )
+        num_writ = & ignore;
+
+    * num_writ = 0;
+
+    if ( self == NULL )
+        return RC ( rcFS, rcFile, rcWriting, rcSelf, rcNull );
+
+    if ( ! self -> write_enabled )
+        return RC ( rcFS, rcFile, rcWriting, rcFile, rcNoPerm );
+
+    if ( size == 0 )
+        return 0;
+    if ( buffer == NULL )
+        return RC ( rcFS, rcFile, rcWriting, rcBuffer, rcNull );
+
+    switch ( self -> vt -> v1 . maj )
+    {
+    case 1:
+        for ( rc = 0, b = buffer, total = 0; total < size; total += count )
+        {
+            count = 0;
+            rc = ( * self -> vt -> v1 . write ) ( self, pos + total, b + total, size - total, & count );
+            if ( rc != 0 )
+                break;
+            if ( count == 0 )
+                break;
+        }
+        break;
+    default:
+        return RC ( rcFS, rcFile, rcWriting, rcInterface, rcBadVersion );
+    }
+
+    * num_writ = total;
+    if ( total == size )
+        return 0;
+    if ( rc == 0 )
+        return RC ( rcFS, rcFile, rcWriting, rcTransfer, rcIncomplete );
+    return rc;
+}
+
 /* Init
  *  initialize a newly allocated file object
  */
 LIB_EXPORT rc_t CC KFileInit ( KFile *self, const KFile_vt *vt,
+    const char *classname, const char *fname,
     bool read_enabled, bool write_enabled )
 {
     if ( self == NULL )
@@ -322,7 +452,7 @@ LIB_EXPORT rc_t CC KFileInit ( KFile *self, const KFile_vt *vt,
 
     self -> vt = vt;
     self -> dir = NULL;
-    atomic32_set ( & self -> refcount, 1 );
+    KRefcountInit ( & self -> refcount, 1, classname, "init", fname );
     self -> read_enabled = ( uint8_t ) ( read_enabled != 0 );
     self -> write_enabled = ( uint8_t ) ( write_enabled != 0 );
 
diff --git a/libs/kfs/fileformat-priv.h b/libs/kfs/fileformat-priv.h
index 5737a35..4f19e62 100644
--- a/libs/kfs/fileformat-priv.h
+++ b/libs/kfs/fileformat-priv.h
@@ -43,7 +43,7 @@ extern "C" {
 #endif
 
 #ifdef _DEBUGGING
-#define FUNC_ENTRY() DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFFENTRY), ("Enter: %s\n", __func__))
+#define FUNC_ENTRY() /* DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFFENTRY), ("Enter: %s\n", __func__)) */
 #define KFF_DEBUG(msg) DBGMSG (DBG_KFS, DBG_FLAG(DBG_KFS_KFF), msg)
 #else
 #define FUNC_ENTRY()
diff --git a/libs/kfs/gzip.c b/libs/kfs/gzip.c
index 333113a..ebf088f 100644
--- a/libs/kfs/gzip.c
+++ b/libs/kfs/gzip.c
@@ -134,7 +134,7 @@ LIB_EXPORT rc_t CC KFileMakeGzipForRead( const struct KFile **result,
     if (!obj)
         return RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
 
-    rc = KFileInit(&obj->dad, (const KFile_vt*) &s_vtKFile_InGz, true, false);
+    rc = KFileInit(&obj->dad, (const KFile_vt*) &s_vtKFile_InGz, "KGZipFile", "no-name", true, false);
     if (rc != 0) {
         free(obj);
         return rc;
@@ -289,7 +289,6 @@ static rc_t z_read ( KGZipFile * self, void * buffer, size_t bsize, size_t * _nu
             GZIP_DEBUG(("%s: data error %d\n",__func__, zret));
             return RC (rcFS, rcFile, rcReading, rcData, rcCorrupt);
 
-            /* don't handle these yet */
         case Z_STREAM_END:
             GZIP_DEBUG(("%s: stream end %d\n",__func__, zret));
             self->completed = true;
@@ -426,7 +425,7 @@ LIB_EXPORT rc_t CC KFileMakeGzipForWrite( struct KFile **result,
     if (!obj)
         return RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
 
-    rc = KFileInit(&obj->dad, (const KFile_vt*) &s_vtKFile_OutGz, false, true);
+    rc = KFileInit(&obj->dad, (const KFile_vt*) &s_vtKFile_OutGz, "KGZipFile", "no-name", false, true);
     if (rc != 0) {
         free(obj);
         return rc;
diff --git a/libs/kfs/libkfs.vers b/libs/kfs/libkfs.vers
index c813fe1..1892b92 100644
--- a/libs/kfs/libkfs.vers
+++ b/libs/kfs/libkfs.vers
@@ -1 +1 @@
-1.2.5
+1.3.2
diff --git a/libs/kfs/lockfile.c b/libs/kfs/lockfile.c
new file mode 100644
index 0000000..85b36e2
--- /dev/null
+++ b/libs/kfs/lockfile.c
@@ -0,0 +1,350 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+struct KRemoveLockFileTask;
+#define KTASK_IMPL struct KRemoveLockFileTask
+
+#include <kfs/extern.h>
+#include <kfs/lockfile.h>
+#include <kfs/impl.h>
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <kproc/task.h>
+#include <kproc/impl.h>
+#include <kproc/procmgr.h>
+#include <klib/text.h>
+#include <klib/refcount.h>
+#include <klib/rc.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#if _DEBUGGING
+#define CRIPPLE_CLEANUP 0
+#define DISABLE_CLEANUP 0
+#endif
+
+/*--------------------------------------------------------------------------
+ * KRemoveLockFileTask
+ */
+typedef struct KRemoveLockFileTask KRemoveLockFileTask;
+struct KRemoveLockFileTask
+{
+    KTask dad;
+    KDirectory *dir;
+    char path [ 1 ];
+};
+
+static
+rc_t CC KRemoveLockFileTaskWhack ( KRemoveLockFileTask *self )
+{
+    rc_t rc = KDirectoryRelease ( self -> dir );
+    KTaskDestroy ( & self -> dad, "KRemoveLockFileTask" );
+    free ( self );
+    return rc;
+}
+
+static
+rc_t CC KRemoveLockFileTaskExecute ( KRemoveLockFileTask *self )
+{
+    return KDirectoryRemove ( self -> dir, true, self -> path );
+}
+
+static
+KTask_vt_v1 KRemoveLockFileTask_vt =
+{
+    1, 0,
+    KRemoveLockFileTaskWhack,
+    KRemoveLockFileTaskExecute
+};
+
+static
+rc_t KRemoveLockFileTaskMake ( KTask **task, KDirectory *dir, const char *path )
+{
+    rc_t rc;
+    size_t path_size = string_size ( path );
+    KRemoveLockFileTask *t = malloc ( sizeof * t + path_size );
+    if ( t == NULL )
+        rc = RC ( rcFS, rcLock, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        rc = KTaskInit ( & t -> dad, ( const KTask_vt* ) & KRemoveLockFileTask_vt, "KRemoveLockFileTask", path );
+        if ( rc == 0 )
+        {
+            rc = KDirectoryAddRef ( t -> dir = dir );
+            if ( rc == 0 )
+            {
+                strcpy ( t -> path, path );
+                * task = & t -> dad;
+                return 0;
+            }
+        }
+
+        free ( t );
+    }
+
+    return rc;
+}
+
+
+/*--------------------------------------------------------------------------
+ * KLockFile
+ *  a mutual exclusion lock on a file
+ *  the lock is acquired upon creation
+ *  and released upon destruction
+ *
+ * NB - only guaranteed to work when used from a single host
+ */
+struct KLockFile
+{
+    KProcMgr *pmgr;
+    KTask *cleanup;
+    KTaskTicket ticket;
+    KRefcount refcount;
+};
+
+static
+rc_t KLockFileWhack ( KLockFile *self )
+{
+    rc_t rc;
+
+    /* remove task from cleanup queue */
+    if ( self -> pmgr != NULL )
+    {
+        rc = KProcMgrRemoveCleanupTask ( self -> pmgr, & self -> ticket );
+        KProcMgrRelease ( self -> pmgr );
+    }
+
+#if ! CRIPPLE_CLEANUP && ! DISABLE_CLEANUP
+    /* remove the lock file from file system */
+    rc = KTaskExecute ( self -> cleanup );
+#endif
+    KTaskRelease ( self -> cleanup );
+
+    free ( self );
+    return 0;
+}
+
+
+/* AddRef
+ */
+LIB_EXPORT rc_t CC KLockFileAddRef ( const KLockFile *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "KLockFile" ) )
+        {
+        case krefLimit:
+            return RC ( rcFS, rcLock, rcAttaching, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+/* Release
+ */
+LIB_EXPORT rc_t CC KLockFileRelease ( const KLockFile *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "KLockFile" ) )
+        {
+        case krefWhack:
+            return KLockFileWhack ( ( KLockFile* ) self );
+        case krefLimit:
+            return RC ( rcFS, rcLock, rcReleasing, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+/* Make
+ */
+static
+rc_t KLockFileMake ( KLockFile **lock, KDirectory *dir, const char *path )
+{
+    rc_t rc;
+    KLockFile *f = malloc ( sizeof * f );
+    if ( f == NULL )
+        rc = RC ( rcFS, rcLock, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        rc = KRemoveLockFileTaskMake ( & f -> cleanup, dir, path );
+        if ( rc == 0 )
+        {
+#if ! DISABLE_CLEANUP
+            /* register cleanup task with proc mgr */
+            rc = KProcMgrMakeSingleton ( & f -> pmgr );
+            if ( rc == 0 )
+                rc = KProcMgrAddCleanupTask ( f -> pmgr, & f -> ticket, f -> cleanup );
+            else
+#else
+            f -> pmgr = NULL;
+#endif
+            {
+                /* this is allowed to fail if mgr has not been initialized */
+                memset ( & f -> ticket, 0, sizeof f -> ticket );
+                rc = 0;
+            }
+
+            if ( rc == 0 )
+            {
+                KRefcountInit ( & f -> refcount, 1, "KLockFile", "make", path );
+                * lock = f;
+                return 0;
+            }
+
+            if ( f -> pmgr != NULL )
+                KProcMgrRelease ( f -> pmgr );
+        }
+
+        free ( f );
+    }
+
+    return rc;
+}
+
+
+/*--------------------------------------------------------------------------
+ * KDirectory
+ *  interface extensions
+ */
+
+
+/* CreateLockFile
+ *  attempts to create a KLockFile
+ *
+ *  "lock" [ OUT ] - return parameter for newly created lock file
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting lock file
+ */
+LIB_EXPORT rc_t CC KDirectoryVCreateLockFile ( KDirectory *self,
+    KLockFile **lock, const char *path, va_list args )
+{
+    rc_t rc;
+
+    if ( lock == NULL )
+        rc = RC ( rcFS, rcFile, rcLocking, rcParam, rcNull );
+    else
+    {
+        if ( self == NULL )
+            rc = RC ( rcFS, rcFile, rcLocking, rcSelf, rcNull );
+        else if ( path == NULL )
+            rc = RC ( rcFS, rcFile, rcLocking, rcPath, rcNull );
+        else if ( path [ 0 ] == 0 )
+            rc = RC ( rcFS, rcFile, rcLocking, rcPath, rcEmpty );
+        else
+        {
+            char full [ 4096 ];
+            rc = KDirectoryVResolvePath ( self, false, full, sizeof full, path, args );
+            if ( rc == 0 )
+            {
+                KFile *lock_file;
+                rc = KDirectoryCreateFile ( self, & lock_file, false, 0600, kcmCreate | kcmParents, full );
+                if ( rc == 0 )
+                {
+                    rc_t rc2;
+
+                    /* no longer need the file - not going to write to it anyway */
+                    KFileRelease ( lock_file );
+
+                    /* we have the lock */
+                    rc = KLockFileMake ( lock, self, full );
+                    if ( rc == 0 )
+                        return 0;
+
+                    /* must unlink lockfile */
+                    rc2 = KDirectoryRemove ( self, true, full );
+                    if ( rc2 != 0 )
+                        /* issue a report */;
+                }
+                else if ( GetRCState ( rc ) == rcExists )
+                {
+                    /* map the rc to kproc type values */
+                    rc = RC ( rcFS, rcFile, rcLocking, rcLocking, rcBusy );
+                }
+                else
+                {
+                    rc = ResetRCContext ( rc, rcFS, rcFile, rcLocking );
+                }
+            }
+        }
+
+        * lock = NULL;
+    }
+
+    return rc;
+}
+
+LIB_EXPORT rc_t CC KDirectoryCreateLockFile ( KDirectory *self,
+    KLockFile **lock, const char *path, ... )
+{
+    rc_t rc;
+
+    va_list args;
+    va_start ( args, path );
+
+    rc = KDirectoryVCreateLockFile ( self, lock, path, args );
+
+    va_end ( args );
+
+    return rc;
+}
+
+
+/* CreateExclusiveAccessFile
+ *  opens a file with exclusive write access
+ *
+ *  "f" [ OUT ] - return parameter for newly opened file
+ *
+ *  "update" [ IN ] - if true, open in read/write mode
+ *  otherwise, open in write-only mode
+ *
+ *  "access" [ IN ] - standard Unix access mode, e.g. 0664
+ *
+ *  "mode" [ IN ] - a creation mode ( see explanation above ).
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target file
+ */
+
+LIB_EXPORT rc_t CC KDirectoryCreateExclusiveAccessFile ( KDirectory *self, KFile **f,
+    bool update, uint32_t access, KCreateMode mode, const char *path, ... )
+{
+    rc_t rc;
+
+    va_list args;
+    va_start ( args, path );
+
+    rc = KDirectoryVCreateExclusiveAccessFile ( self, f, update, access, mode, path, args );
+
+    va_end ( args );
+
+    return rc;
+}
diff --git a/libs/kfs/md5.c b/libs/kfs/md5.c
index 57d74c5..e172b0c 100644
--- a/libs/kfs/md5.c
+++ b/libs/kfs/md5.c
@@ -399,6 +399,7 @@ rc_t KMD5SumFmtPopulate ( KMD5SumFmt *self, const KFile *in )
 
 /* Make
  *  creates a formatted accessor to textual checksum file
+ *  takes over ownership of "in"/"out" file reference
  */
 LIB_EXPORT rc_t CC KMD5SumFmtMakeRead ( const KMD5SumFmt **fp, const KFile *in )
 {
@@ -443,6 +444,10 @@ LIB_EXPORT rc_t CC KMD5SumFmtMakeRead ( const KMD5SumFmt **fp, const KFile *in )
     return rc;
 }
 
+/* Make
+ *  creates a formatted accessor to textual checksum file
+ *  takes over ownership of "in"/"out" file reference
+ */
 LIB_EXPORT rc_t CC KMD5SumFmtMakeUpdate ( KMD5SumFmt **fp, KFile *out )
 {
     rc_t rc;
@@ -762,14 +767,16 @@ LIB_EXPORT rc_t CC KMD5SumFmtUpdate ( KMD5SumFmt *self, const char *path,
                 self -> dirty = true;
                 ++ self -> count;
             }
-
-            /* if existing, perform update */
-            else if ( memcmp ( exist -> digest, entry -> digest, sizeof exist -> digest ) != 0 ||
-                      exist -> bin != entry -> bin )
+            else
             {
-                memcpy ( exist -> digest, entry -> digest, sizeof exist -> digest );
-                exist -> bin = entry -> bin;
-                self -> dirty = true;
+                /* if existing, perform update */
+                if ( memcmp ( exist -> digest, entry -> digest, sizeof exist -> digest ) != 0 ||
+                     exist -> bin != entry -> bin )
+                {
+                    memcpy ( exist -> digest, entry -> digest, sizeof exist -> digest );
+                    exist -> bin = entry -> bin;
+                    self -> dirty = true;
+                }
                 KMD5SumEntryWhack ( & entry -> n, NULL );
             }
         }
@@ -1491,7 +1498,7 @@ LIB_EXPORT rc_t CC KFileMakeMD5Read ( const KFile **fp,
             else
             {
                 rc = KFileInit ( & f -> dad,
-				     ( const KFile_vt* ) & KMD5FileRead_vt, true, false );
+				     ( const KFile_vt* ) & KMD5FileRead_vt, "KMD5File", "no-name", true, false );
                 if ( rc == 0 )
                 {
                     f -> position = 0;
@@ -1585,7 +1592,7 @@ LIB_EXPORT rc_t CC KMD5FileMakeWrite ( KMD5File **fp,
             else
             {
                 rc = KFileInit ( & f -> dad,
-                    ( const KFile_vt* ) & sKMD5FileWrite_vt, out -> read_enabled, true );
+                    ( const KFile_vt* ) & sKMD5FileWrite_vt, "KMD5File", path, out -> read_enabled, true );
                 if ( rc == 0 )
                 {
                     f -> position = 0;
@@ -1695,7 +1702,7 @@ LIB_EXPORT rc_t CC KMD5FileMakeAppend ( KMD5File **fp, KFile *out, KMD5SumFmt *m
             else
             {
                 rc = KFileInit ( & f -> dad,
-                    ( const KFile_vt* ) & sKMD5FileAppend_vt, out -> read_enabled, true );
+                    ( const KFile_vt* ) & sKMD5FileAppend_vt, "KMD5File", path, out -> read_enabled, true );
                 if ( rc == 0 )
                 {
                     MD5StateInit ( & f -> md5 );
@@ -1818,6 +1825,13 @@ static KFile_vt_v1 sKMD5FileReadCreate_vt =
     KMD5FileType
 };
 
+/* MakeReadNew
+ *  creates an adapter to create MD5 checksum for a file
+ *
+ *  "in" [ IN ] - input file 
+ *  since this file is being wrapped by "f", ownership of
+ *  the provided reference is transferred to "f"
+ */
 LIB_EXPORT rc_t CC KFileMakeNewMD5Read ( const KFile **fp,
     const struct KFile *in, KMD5SumFmt *md5, const char *path )
 {
@@ -1841,14 +1855,14 @@ LIB_EXPORT rc_t CC KFileMakeNewMD5Read ( const KFile **fp,
             rc = RC ( rcFS, rcFile, rcConstructing, rcPath, rcEmpty );
         else
         {
-            KMD5File *f = malloc ( sizeof * f - sizeof f -> u +
-                sizeof f -> u . wr + strlen ( path ) );
+            size_t path_size = string_size ( path );
+            KMD5File *f = malloc ( sizeof * f + path_size );
             if ( f == NULL )
                 rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
             else
             {
                 rc = KFileInit ( & f -> dad,
-                    ( const KFile_vt* ) & sKMD5FileReadCreate_vt, in -> read_enabled, false );
+                    ( const KFile_vt* ) & sKMD5FileReadCreate_vt, "KMD5File", path, in -> read_enabled, false );
                 if ( rc == 0 )
                 {
                     f -> position = 0;
@@ -1857,7 +1871,7 @@ LIB_EXPORT rc_t CC KFileMakeNewMD5Read ( const KFile **fp,
                     f -> fmt = md5;
 		    f -> type = KMD5FileTypeWrite;
                     memset ( & f -> u . wr, 0, sizeof f -> u . wr );
-                    strcpy ( f -> u . wr . path, path );
+                    string_copy ( f -> u . wr . path, path_size + 1, path, path_size );
 #if 0
 /* KFileSize can't always be used */
                     rc = KFileSize ( in, & f -> u . wr . max_position );
diff --git a/libs/kfs/mmap.c b/libs/kfs/mmap.c
index bde5286..32a7887 100644
--- a/libs/kfs/mmap.c
+++ b/libs/kfs/mmap.c
@@ -39,9 +39,13 @@
 #define USE_MALLOC_MMAP 1
 
 #if USE_MALLOC_MMAP
+
+#ifndef FORCE_MALLOC_MMAP
 #define FORCE_MALLOC_MMAP 0
 #endif
 
+#endif
+
 
 /*--------------------------------------------------------------------------
  * KMMap
@@ -273,7 +277,7 @@ rc_t KMMapMallocRgn ( KMMap *self, uint64_t pos, size_t size, bool read_only )
         }
 
         /* crop for readonly case */
-        if ( read_only && pos + size > eof )
+        if ( read_only && (( size == 0 ) || ( pos + size > eof )))
             size = ( size_t ) ( eof - pos );
     }
 
@@ -654,7 +658,7 @@ LIB_EXPORT rc_t CC KMMapMakeMaxRead ( const KMMap **mm, const KFile *f )
         return KMMapMakeRgnRead ( mm, f, 0, 1500 * 1024 * 1024 );
 
     /* 64-bit or beyond */
-    return KMMapMakeRgnRead ( mm, f, 0,  ( ( size_t ) 8 ) * 1024 * 1024 * 1024 );
+    return KMMapMakeRgnRead ( mm, f, 0,  ( ( size_t ) 48 ) * 1024 * 1024 * 1024 );
 }
 
 LIB_EXPORT rc_t CC KMMapMakeMaxUpdate ( KMMap **mm, KFile *f )
@@ -668,8 +672,8 @@ LIB_EXPORT rc_t CC KMMapMakeMaxUpdate ( KMMap **mm, KFile *f )
             eof = 1500 * 1024 * 1024;
 
         /* 64-bit or beyond */
-        if ( sizeof mm == 8 && eof > ( ( size_t ) 8 ) * 1024 * 1024 * 1024 )
-            eof = ( ( size_t ) 8 ) * 1024 * 1024 * 1024;
+        if ( sizeof mm == 8 && eof > ( ( size_t ) 48 ) * 1024 * 1024 * 1024 )
+            eof = ( ( size_t ) 48 ) * 1024 * 1024 * 1024;
 
         rc = KMMapMakeRgnUpdate ( mm, f, 0, ( size_t ) eof );
     }
diff --git a/libs/kfs/nullfile.c b/libs/kfs/nullfile.c
index 2694ded..22eab36 100644
--- a/libs/kfs/nullfile.c
+++ b/libs/kfs/nullfile.c
@@ -111,6 +111,7 @@ rc_t KNullFileMake (KNullFile ** self, bool write_allowed)
     {
 	rc = KFileInit (&pF->dad,			/* initialize base class */
 			(const KFile_vt*)&vtKNullFile, 	/* VTable for KNullFile */
+            "KNullFile", "no-name",
 			true,				/* read allowed */
 			write_allowed);
 	if (rc == 0)
diff --git a/libs/kfs/pagefile.c b/libs/kfs/pagefile.c
index 38c6c7f..bf0f05f 100644
--- a/libs/kfs/pagefile.c
+++ b/libs/kfs/pagefile.c
@@ -96,7 +96,7 @@ struct KPageBacking
 static
 void KPageBackingWhack ( KPageBacking *self )
 {
-    KFileRelease ( self -> backing );
+    if(self -> backing) KFileRelease ( self -> backing );
     free ( self );
 }
 
@@ -184,6 +184,7 @@ rc_t KPageBackingSetSize ( KPageBacking *self, uint32_t pg_count )
 /* Read
  *  read a page from backing
  */
+#if 0
 static
 rc_t KFileReadAll ( const KFile *self, uint64_t pos, uint8_t *buff, size_t bsize, size_t *num_read )
 {
@@ -208,6 +209,7 @@ rc_t KFileReadAll ( const KFile *self, uint64_t pos, uint8_t *buff, size_t bsize
     * num_read = 0;
     return rc;
 }
+#endif
 
 static
 rc_t KPageBackingRead ( const KPageBacking *self, void **ppage, uint32_t pg_id )
@@ -267,6 +269,7 @@ rc_t KPageBackingRead ( const KPageBacking *self, void **ppage, uint32_t pg_id )
 /* Write
  *  write a page to backing store
  */
+#if 0
 static
 rc_t KFileWriteAll ( KFile *self, uint64_t pos, const uint8_t *buff, size_t size, size_t *num_writ )
 {
@@ -294,6 +297,7 @@ rc_t KFileWriteAll ( KFile *self, uint64_t pos, const uint8_t *buff, size_t size
     * num_writ = 0;
     return rc;
 }
+#endif
 
 static
 rc_t KPageBackingWrite ( KPageBacking *self, const void *page, uint32_t pg_id )
@@ -363,10 +367,12 @@ struct KPage
 static
 rc_t KPageWhack ( KPage *self )
 {
-    if ( self -> dirty )
-        KPageBackingWrite ( self -> backing, self -> page, self -> page_id );
+    if ( self -> backing ) {
+	if ( self -> dirty )
+	    KPageBackingWrite ( self -> backing, self -> page, self -> page_id );
+	KPageBackingSever ( self -> backing );
+    }
     KPageMemWhack ( self -> page );
-    KPageBackingSever ( self -> backing );
     free ( self );
     return 0;
 }
@@ -387,7 +393,8 @@ rc_t KPageNew ( KPage **ppage, KPageBacking *backing, uint32_t page_id )
         rc = KPageMemNew ( & page -> page );
         if ( rc == 0 )
         {
-            page -> backing = KPageBackingAttach ( backing );
+            if(backing)page -> backing = KPageBackingAttach ( backing );
+	    else page -> backing=NULL;
             KRefcountInit ( & page -> refcount, 1, "KPage", "new", "page" );
             page -> page_id = page_id;
             page -> read_only = false;
@@ -460,7 +467,7 @@ LIB_EXPORT rc_t CC KPageRelease ( const KPage *self )
     if ( self != NULL ) switch ( KRefcountDrop ( & self -> refcount, "KPage" ) )
     {
     case krefOkay:
-        if ( self -> dirty && self -> backing -> write_through )
+        if ( self -> dirty && self -> backing && self -> backing -> write_through )
         {
             rc_t rc = KPageBackingWrite ( self -> backing, self -> page, self -> page_id );
             if ( rc != 0 )
@@ -696,7 +703,11 @@ rc_t KPageFileSetPageCount(KPageFile *self,uint32_t count)
 	}
 	self->count=count;
 	if( self -> read_only) return 0;
-        return KPageBackingSetSize ( self -> backing, count );
+	if( self -> backing ) return KPageBackingSetSize ( self -> backing, count );
+	else if ( self->count > self->climit ){
+                return RC ( rcFS, rcFile, rcProcessing, rcBuffer, rcExhausted );
+	}
+	return 0;
 }
 /* Whack
  */
@@ -707,7 +718,7 @@ rc_t KPageFileWhack ( KPageFile *self )
     /* first, visit each cached page in flush order */
     self->page_idx=KPageFile_whack_recursive(self->page_idx,self->page_idx_depth,0,&self->by_access,&self->ccount);
     /* release the backing file */
-    KPageBackingRelease ( self -> backing );
+    if(self -> backing) KPageBackingRelease ( self -> backing );
     /* delete the object */
     free ( self );
     return 0;
@@ -800,53 +811,54 @@ LIB_EXPORT rc_t CC KPageFileMakeRead ( const KPageFile **pf,
 LIB_EXPORT rc_t CC KPageFileMakeUpdate ( KPageFile **pf,
     KFile *backing, size_t climit, bool write_through )
 {
-    rc_t rc;
+    rc_t rc=0;
 
     if ( pf == NULL )
         rc = RC ( rcFS, rcFile, rcConstructing, rcParam, rcNull );
     else
     {
-        if ( backing == NULL )
-            rc = RC ( rcFS, rcFile, rcConstructing, rcFile, rcNull );
-        else if ( ! backing -> read_enabled )
-        {
-            if ( backing -> write_enabled )
-                rc = RC ( rcFS, rcFile, rcConstructing, rcFile, rcWriteonly );
-            else
-                rc = RC ( rcFS, rcFile, rcConstructing, rcFile, rcNoPerm );
-        }
-        else if ( ! backing -> write_enabled )
-            rc = RC ( rcFS, rcFile, rcConstructing, rcFile, rcReadonly );
-        else
+        if ( backing != NULL ){
+        	if ( ! backing -> read_enabled )
+		{
+		    if ( backing -> write_enabled )
+			rc = RC ( rcFS, rcFile, rcConstructing, rcFile, rcWriteonly );
+		    else
+			rc = RC ( rcFS, rcFile, rcConstructing, rcFile, rcNoPerm );
+		}
+		else if ( ! backing -> write_enabled )
+		    rc = RC ( rcFS, rcFile, rcConstructing, rcFile, rcReadonly );
+	}
+        if(rc == 0)
         {
-            KPageBacking *bf = calloc ( 1, sizeof * bf );
-            if ( bf == NULL )
-                rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
-            else
-            {
-                KPageFile *f = malloc ( sizeof * f );
-                if ( f == NULL )
+	    KPageFile *f = malloc ( sizeof * f );
+	    if ( f == NULL )
                     rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
+            else 
+	    {
+		f->page_idx=NULL;
+		f->page_idx_depth=0;
+		DLListInit ( & f -> by_access );
+		KRefcountInit ( & f -> refcount, 1, "KPageFile", "make", "pgfile" );
+		f -> count = 0;
+		f -> ccount = 0;
+		f -> climit = ( uint32_t ) ( climit >>  PGBITS );
+		if(f -> climit < MIN_CACHE_PAGE) f -> climit = MIN_CACHE_PAGE;
+		f -> read_only = false;
+		f -> backing = NULL; /** for now **/
+	    }
+	    if(rc == 0 && backing)
+            {
+		KPageBacking *bf = calloc ( 1, sizeof * bf );
+		if ( bf == NULL )
+			rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
                 else
                 {
                     rc = KFileAddRef ( backing );
-                    if ( rc == 0 )
-                    {
-			f->page_idx=NULL;
-			f->page_idx_depth=0;
-                        DLListInit ( & f -> by_access );
-                        KRefcountInit ( & f -> refcount, 1, "KPageFile", "make", "pgfile" );
-                        f -> count = 0;
-                        f -> ccount = 0;
-                        f -> climit = ( uint32_t ) ( climit >>  PGBITS );
-			if(f -> climit < MIN_CACHE_PAGE) f -> climit = MIN_CACHE_PAGE;
-                        f -> read_only = false;
-
+		    if(rc == 0)
+		     {
                         /* finish the backing file */
                         KRefcountInit ( & bf -> refcount, 1, "KPageBacking", "make", "backing" );
-                        f -> backing = bf;
                         bf -> write_through = write_through;
-                            
                         /* attached reference */
                         bf -> backing = backing;
 
@@ -855,23 +867,24 @@ LIB_EXPORT rc_t CC KPageFileMakeUpdate ( KPageFile **pf,
                         if ( rc == 0 )
                         {
                             bf -> have_eof = true;
-			    rc=KPageFileSetPageCount(f,( uint32_t ) ( ( bf -> eof + PGSIZE - 1 ) >> PGBITS ));
-			    if(rc!=0) return rc;
                         }
-                        * pf = f;
-                        return 0;
                     }
-
-                    free ( f );
                 }
-
-                free ( bf );
+		if (rc == 0){
+			f -> backing = bf;
+			rc=KPageFileSetPageCount(f,( uint32_t ) ( ( bf -> eof + PGSIZE - 1 ) >> PGBITS ));
+		} else if ( bf ){
+			free ( bf );
+		}
             }
+	    if(rc == 0){
+		* pf = f;
+	    } else if (f) {
+		free(f);
+	    }
         }
-
-        * pf = NULL;
+	if(rc != 0) *pf = NULL;
     }
-
     return rc;
 }
 
@@ -1266,5 +1279,5 @@ LIB_EXPORT rc_t CC KPageFileDropBacking ( KPageFile *self )
     if ( self == NULL )
         return RC ( rcFS, rcFile, rcDetaching, rcSelf, rcNull );
 
-    return KPageBackingDrop ( self -> backing );
+    return self -> backing?KPageBackingDrop ( self -> backing ):0;
 }
diff --git a/libs/kfs/path-priv.h b/libs/kfs/path-priv.h
deleted file mode 100644
index 6f7ef9b..0000000
--- a/libs/kfs/path-priv.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*===========================================================================
-*
-*                            Public Domain Notice
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#ifndef _h_kfs_path_priv_libs_
-#define _h_kfs_path_priv_libs_
-
-#ifndef _h_kfs_extern_
-#include <kfs/extern.h>
-#endif
-
-#ifndef _h_klib_defs_
-#include <klib/defs.h>
-#endif
-
-#include <kfs/path.h>
-#include <kfs/path-priv.h>
-
-#include <klib/text.h>
-#include <klib/refcount.h>
-#include <klib/container.h>
-
-#include <stdarg.h>
-
-#ifdef __cplusplus
-extern "C" {}
-#endif
-
-#ifndef SUPPORT_FILE_URL
-#define SUPPORT_FILE_URL 1
-#endif
-
-#ifndef USE_EXPERIMENTAL_CODE
-#define USE_EXPERIMENTAL_CODE 1
-#endif
-
-#ifdef _DEBUGGING
-#define PATH_DEBUG(msg) DBGMSG(DBG_KFS,DBG_FLAG(DBG_KFS_PATH), msg)
-#else
-#define PATH_DEBUG(msg)
-#endif
-#define OFF_PATH_DEBUG(msg)
-
-#define NCBI_FILE_SCHEME "ncbi-file"
-
-typedef int32_t KPUri_t;
-enum eKPUri_t
-{
-    kpuri_invalid = -1,
-    kpuri_not_supported,
-    kpuri_ncbi_kfs,
-#if SUPPORT_FILE_URL
-    kpuri_file,
-#endif
-    kpuri_count
-};
-
-typedef struct KPOption KPOption;
-struct KPOption
-{
-    BSTNode node;
-    KPOption_t name;
-    String value;
-/*     const char * value; */
-};
-
-struct KPath
-{
-    const KPath * root;
-    KRefcount refcount;
-    String path;
-    BSTree options;   /* query section of an uri; maybe set other ways as well. */
-    char * query;
-    char * fragment;
-    size_t alloc_size;  /* how much extra space allocated for a path too long for the built in buffer */
-    size_t asciz_size;  /* doubles as allocated size -1 if less than the size of the buffer below */
-    char * storage;
-};
-
-
-/* not externally callable */
-rc_t CC KPathTransformSysPath (KPath * self);
-rc_t KPathTransformPathHier (char ** uri_path);
-
-rc_t KPathInitAuthority (KPath * self, char ** next);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _h_kfs_path_priv_ */
diff --git a/libs/kfs/path.c b/libs/kfs/path.c
deleted file mode 100644
index a39be78..0000000
--- a/libs/kfs/path.c
+++ /dev/null
@@ -1,1669 +0,0 @@
-/*===========================================================================
- *
- *                            PUBLIC DOMAIN NOTICE
- *               National Center for Biotechnology Information
- *
- *  This software/database is a "United States Government Work" under the
- *  terms of the United States Copyright Act.  It was written as part of
- *  the author's official duties as a United States Government employee and
- *  thus cannot be copyrighted.  This software/database is freely available
- *  to the public for use. The National Library of Medicine and the U.S.
- *  Government have not placed any restriction on its use or reproduction.
- *
- *  Although all reasonable efforts have been taken to ensure the accuracy
- *  and reliability of the software and data, the NLM and the U.S.
- *  Government do not and cannot warrant the performance or results that
- *  may be obtained by using this software or data. The NLM and the U.S.
- *  Government disclaim all warranties, express or implied, including
- *  warranties of performance, merchantability or fitness for any particular
- *  purpose.
- *
- *  Please cite the author in any work or product based on this material.
- *
- * ===========================================================================
- *
- */
-
-#include <kfs/extern.h>
-#include <os-native.h>
-#include <kfs/path.h>
-#include "path-priv.h"
-#include <kfs/kfs-priv.h>
-
-#include <klib/refcount.h>
-#include <klib/text.h>
-#include <klib/printf.h>
-#include <klib/log.h>
-#include <klib/debug.h>
-#include <klib/rc.h>
-
-#include <stdlib.h>
-#include <string.h>
-/* #include <sysalloc.h> */
-#include <ctype.h>
-#include <assert.h>
-
-rc_t KPOptionMake (KPOption ** new_obj, KPOption_t name, const char * value, size_t size)
-{
-    KPOption * obj;
-
-    assert (new_obj);
-
-    obj = malloc (sizeof (*obj));
-    if (obj == NULL)
-        return RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
-
-    obj->name = name;
-    StringInit (&obj->value, value, size, string_len (value, size));
-    *new_obj = obj;
-    return 0;
-}
-
-void CC KPOptionWhack (BSTNode * self, void * ignored)
-{
-    free (self);
-}
-
-int CC KPOptionCmp ( const void * item, const BSTNode * n )
-{
-    KPOption_t o = (KPOption_t)(size_t)item;
-    const KPOption * b = (const KPOption *)n;
-
-    return o - b->name;
-}
-
-int CC KPOptionSort ( const BSTNode * item, const BSTNode * n )
-{
-    const KPOption * a = (const KPOption *)item;
-    const KPOption * b = (const KPOption *)n;
-
-    return a->name - b->name;
-}
-
-
-#if 0
-static
-rc_t KPathMakeCanon (KPath * self)
-{
-    char * low;  /* 'root' location in path */
-    char * dst;  /* target reference for removing . and .. nodes */
-    char * last; /* '/' at end of previous node */
-    char * lim;  /* '\0' at end of the path string coming in */
-
-
-    end = self->path.addr + self->path.size;
-    low = self->path.addr;
-    if (low[1] == '/') /* path starts with // which we allow in windows */
-        ++low;
-    dst = last = low;
-
-    for (;;)
-    {
-        char * src; /* '/' or '\0' at end of this path node */
-
-        src = strchr (prev + 1, '/');
-        if (src == NULL)
-            src = lim;
-
-        /* detect special sequences based on length of node */
-        switch (src-last)
-        {
-        case 1: /* an empty node name - only allowed in the beginning */
-            last = src;  /* skip over */
-            if (src != lim)
-                continue;
-            break;
-        case 2:
-            if (last[1] == '.')
-            {
-                last = src;  /* skip over */
-                if (src != lim)
-                    continue;
-            }
-            break;
-
-        case 3:
-            if ((last[1] == '.') && (last[2] == '.'))
-            {
-                /* remove previous node name */
-                dst[0] = '\0';
-                dst = strrchr (low, '/');
-                if ((dst == NULL) || (dst < low))
-                    return RC (rcFS, rcPath, rcAccessing, rcPath, rcInvalid);
-
-                last = src;
-                if (src != lim)
-                    continue;
-            }
-            break;
-        }
-
-        assert (src >= last);
-        if (dst != last)
-            memmove (dst, last, src-last);
-    }
-}
-#endif
-/* Destroy
- */
-rc_t KPathDestroy (const KPath * cself)
-{
-    if (cself)
-    {
-        KPath * self = (KPath*)cself;
-        PATH_DEBUG (("-----\n%s: %p %p\n\n", __func__, cself, cself->storage ));
-        BSTreeWhack (&self->options, KPOptionWhack, NULL);
-        free (self->storage);
-        free (self);
-    }
-    return 0;
-}
-
-
-static const char class_name[] = "KPath";
-
-/* AddRef
- *  creates a new reference
- *  ignores NULL references
- */
-LIB_EXPORT rc_t CC KPathAddRef ( const KPath *self )
-{
-    if ( self != NULL )
-    {
-        switch (KRefcountAdd (&self->refcount, class_name))
-        {
-        case krefLimit:
-        case krefNegative:
-            return RC (rcFS, rcPath, rcAttaching, rcRange, rcInvalid);
-        }
-    }
-    return 0;
-}
-
-
-/* Release
- *  discard reference to file
- *  ignores NULL references
- */
-LIB_EXPORT rc_t CC KPathRelease ( const KPath *self )
-{
-    if ( self != NULL )
-    {
-        switch (KRefcountDrop (&self->refcount, class_name))
-        {
-        case krefWhack:
-            KPathDestroy (self);
-            break;
-        case krefLimit:
-        case krefNegative:
-            return RC (rcFS, rcPath, rcReleasing, rcRange, rcInvalid);
-        }
-    }
-    return 0;
-}
-
-
-#if USE_EXPERIMENTAL_CODE
-/* not fully reselient to bad input */
-static
-char decode_nibble (char c)
-{
-    if ((c >= '0') && (c <= '9'))
-        return (c - '0');
-    if ((c >= 'a') && (c <= 'z'))
-        return (c - 'a');
-    if ((c >= 'A') && (c <= 'Z'))
-        return (c - 'A');
-    return (0);
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool string_decode (char * p)
-{
-    char * q;
-    size_t limit;
-    size_t ix;
-
-    q = p;
-    limit = string_size (p);
-
-    for (ix = 0; ix < limit; ++ix)
-    {
-        if (p[0] == '%')
-        {
-            if ((ix + 2 > limit) || ! isxdigit (p[1]) || ! isxdigit (p[2]))
-                return false;
-            *q = decode_nibble (p[1]) << 4;
-            *q += decode_nibble (p[2]);
-        }
-        else if (q != p)
-            *q = *p;
-        ++p;
-        ++q;
-    }
-    if (p != q)
-        *q = '\0';
-    return true;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-rc_t StringDecode (String * self)
-{
-    size_t limit;
-    size_t ix;
-    char * p;
-    char * q;
-
-    p = q = (char *)self->addr;
-    limit = self->size;
-    for (ix = 0; ix < limit; ++ix)
-    {
-        if (p[0] == '%')
-        {
-            if ((ix + 2 > limit) || ! isxdigit (p[1]) || ! isxdigit (p[2]))
-                return RC (rcFS, rcPath, rcDecoding, rcPath, rcInvalid);
-            *q = decode_nibble (p[1]) << 4;
-            *q += decode_nibble (p[2]);
-        }
-        else if (q != p)
-            *q = *p;
-        ++p;
-        ++q;
-    }
-    if (p != q)
-    {
-        *q = '\0';
-        self->size = q - self->addr;
-        self->len = string_len (self->addr, self->size);
-    }
-    return 0;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_sub_delim (int ch)
-{
-    switch (ch)
-    {
-    case '!': case '$': case '&': case '\'': case '(': case ')': case '*':
-    case '+': case ',': case ';': case '=':
-        return true;
-    default:
-        return false;
-    }
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-bool is_gen_delim (int ch)
-{
-    switch (ch)
-    {
-    case '"': case '/': case '?': case '#': case '[': case ']': case '@':
-        return true;
-    default:
-        return false;
-    }
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-bool is_reserved (int ch)
-{
-    return is_gen_delim (ch) || is_sub_delim (ch);
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_unreserved (int ch)
-{
-    return (isalnum (ch) ||
-            (ch == '-') ||
-            (ch == '.') ||
-            (ch == '_') ||
-            (ch == '~'));
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_scheme_char (int ch)
-{
-    return (isalnum (ch) ||
-            (ch == '+') ||
-            (ch == '-') ||
-            (ch == ','));
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_scheme (const char * str)
-{
-    if ( !isalpha (*str++))
-        return false;
-    while (*str)
-        if ( ! is_scheme_char (*str++))
-            return false;
-    return true;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_iprivate (int ch )
-{
-    return (((ch >= 0x00E000) && (ch <= 0x00F8FF)) ||
-            ((ch >= 0x0F0000) && (ch <= 0x0FFFFD)) ||
-            ((ch >= 0x100000) && (ch <= 0x10FFFD)));
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_ucschar (int ch)
-{
-    return (((ch >= 0xA0)   && (ch <= 0xD7FF)) ||
-            ((ch >= 0xF900) && (ch <= 0xFDCF)) ||
-            ((ch >= 0xFDF0) && (ch <= 0xFFEF)) ||
-            ((ch >= 0x10000) && (ch <= 0x1FFFD)) ||
-            ((ch >= 0x20000) && (ch <= 0x2FFFD)) ||
-            ((ch >= 0x30000) && (ch <= 0x3FFFD)) ||
-            ((ch >= 0x40000) && (ch <= 0x4FFFD)) ||
-            ((ch >= 0x50000) && (ch <= 0x5FFFD)) ||
-            ((ch >= 0x60000) && (ch <= 0x6FFFD)) ||
-            ((ch >= 0x70000) && (ch <= 0x7FFFD)) ||
-            ((ch >= 0x80000) && (ch <= 0x8FFFD)) ||
-            ((ch >= 0x90000) && (ch <= 0x9FFFD)) ||
-            ((ch >= 0xA0000) && (ch <= 0xAFFFD)) ||
-            ((ch >= 0xB0000) && (ch <= 0xBFFFD)) ||
-            ((ch >= 0xC0000) && (ch <= 0xCFFFD)) ||
-            ((ch >= 0xD0000) && (ch <= 0xDFFFD)) ||
-            ((ch >= 0xE0000) && (ch <= 0xEFFFD)));
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_iunreserved (int ch)
-{
-    return is_unreserved (ch) || is_ucschar (ch);
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_ipchar (int ch)
-{
-    return is_iunreserved (ch) || is_sub_delim (ch) || 
-        (ch == ':') || (ch == '@');
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_query (const char * str)
-{
-    for ( ; *str; ++str)
-    {
-        if (! is_ipchar (*str) &&
-            ! is_iprivate (*str) &&
-            (*str != '/') &&
-            (*str != '?'))
-        {
-            return false;
-        }
-    }
-    return true;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_fragment (const char * str)
-{
-    for ( ; *str; ++str)
-    {
-        if (! is_ipchar (*str) &&
-            ! is_sub_delim (*str) &&
-            (*str != '/') &&
-            (*str != '?'))
-        {
-            return false;
-        }
-    }
-    return true;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-bool is_isegment (const char * str, size_t sz)
-{
-    const char * end = str + sz;
-    size_t ix;
-    int cnt;
-
-    for (ix = 0; ix < sz; ix += cnt)
-    {
-        uint32_t ch;
-        cnt = utf8_utf32 (&ch, str + ix, end);
-        if (cnt <= 0)
-            return false;
-        if ( ! is_ipchar (ch))
-            return false;
-    }
-    return true;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-const char * eat_iuserinfo (const char * str)
-{
-    for (;;++str)
-    {
-        if (is_iunreserved (*str))
-            ;
-        else if (is_sub_delim (*str))
-            ;
-        else if (*str != ':')
-            break;
-    }
-    return str;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-const char * eat_ireg_name (const char * str)
-{
-    for (;;++str)
-    {
-        if (is_iunreserved (*str))
-            ;
-        else if (is_sub_delim (*str))
-            ;
-        else
-            break;
-    }
-    return str;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-const char * eat_port (const char * str)
-{
-    while (isdigit (*str))
-        ++str;
-    return str;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-const char * eat_ihost (const char * str)
-{
-    /* not doing ip addresses yet */
-
-    return eat_ireg_name (str);
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-const char * eat_iuserinfo_at (const char * str)
-{
-    const char * temp = eat_iuserinfo (str);
-    if (temp == NULL)
-        return temp;
-    if (*++temp != '@')
-        return NULL;
-    return temp;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-const char * eat_iauthority (const char * str)
-{
-    const char * temp;
-
-    temp = eat_iuserinfo_at (str);
-
-    if (temp != NULL)
-        str = temp;
-
-    temp = eat_ihost (str);
-    if (temp == NULL)
-        return false;
-    str = temp;
-
-    if (*str == ':')
-        return eat_port (str+1);
-
-    return str;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-const char * eat_file_iauthority (const char * str)
-{
-    const char * temp;
-
-    temp = eat_ihost (str);
-    if (temp == NULL)
-        return false;
-    return temp;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-const char * eat_isegment (const char * str)
-{
-    while (is_ipchar (*str))
-        ++str;
-    return str;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-const char * eat_isegment_nz (const char * str)
-{
-    const char * temp = eat_isegment (str);
-    if (temp == str)
-        return NULL;
-    return temp;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-const char * eat_isegment_nz_nc (const char * str)
-{
-    const char * temp = str;
-
-    while (is_iunreserved (*str) ||
-           is_sub_delim (*str) ||
-           (*str == '@'))
-        ++str;
-    if (temp == str)
-        return false;
-    return str;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-bool is_isegment_nz (const char * str, size_t sz)
-{
-    if (sz == 0)
-        return false;
-    return is_isegment (str, sz);
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-bool is_isegment_nz_nc (const char * str, size_t sz)
-{
-    if (sz == 0)
-        return false;
-    if (string_chr (str, sz, ':') != NULL)
-        return false;
-    return is_isegment (str, sz);
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-bool is_ireg_name (const char * str, size_t sz)
-{
-    const char * end = str + sz;
-    size_t ix;
-    int cnt;
-
-    for (ix = 0; ix < sz; ix += cnt)
-    {
-        uint32_t ch;
-        cnt = utf8_utf32 (&ch, str + ix, end);
-        if (cnt <= 0)
-            return false;
-        if ( ! is_iunreserved (ch) &&
-             ! is_sub_delim (ch))
-            return false;
-    }
-    return true;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_ipath_rootless (const char * str);
-static
-bool is_ipath_absolute (const char * str)
-{
-    if (*str++ != '/')
-        return false;
-    return is_ipath_rootless (str);
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_ipath_empty (const char * str)
-{
-    return (*str == '\0');
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_ipath_abempty (const char * str)
-{
-    for (;;)
-    {
-        if (is_ipath_empty (str))
-            return true;
-
-        else if (*str++ != '/')
-            return false;
-
-        else
-        {
-            const char * temp = eat_isegment (str);
-            if (temp == NULL)
-                return false;
-            str = temp;
-        }
-    }
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_ipath_rootless (const char * str)
-{
-    str = eat_isegment_nz (str);
-    if (str == NULL)
-        return false;
-
-    return is_ipath_abempty (str);
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-bool is_ipath_noscheme (const char * str)
-{
-    str = eat_isegment_nz_nc (str);
-
-    if (str == NULL)
-        return false;
-
-    return is_ipath_abempty (str);
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_hier (const char * str)
-{
-    if ((str[0] == '/') && (str[1] == '/'))
-    {
-        const char * temp = eat_iauthority (str);
-        if (temp != NULL)
-            if (is_ipath_abempty (temp))
-                return true;
-    }
-    if (is_ipath_absolute (str))
-        return true;
-
-    if (is_ipath_rootless (str))
-        return true;
-
-    if (is_ipath_empty (str))
-        return true;
-
-    return false;
-}
-#endif
-
-
-
-#if USE_EXPERIMENTAL_CODE && 0
-/*
- * confusion and ambiguity in the world of RFCs...
- *  We're gonna go with the RFC-3987 definition of ihost as ireg-name
- */
-static
-const char * eat_hostname (const char * str)
-{
-    /* -----
-     * hostname = ireg_name
-     * ireg_name = *(iunreserved / pct_encoded / sub_delim
-     *
-     * legal terminators are NUL or '/'
-     */
-    while (is_iunreserved (*str) &&
-           is_sub_delim (*str))
-        ++str;
-    switch (*str)
-    {
-    case '\0':
-    case '/':
-        return str;
-    default:
-        return NULL;
-    }
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-/* -----
- * number.number.number.numer 
- * does not range check number
- * sigh...
- */
-static
-const char * eat_ipv6 (const char * str)
-{
-#if 1
-    return NULL; /* not gonna do them yet */
-#else
-    const char * temp;
-    int digits;
-    int colons;
-    int doublecolons = 0;
-
-    /* non empty first part */
-    for (digits = 0; isxdigit (*str); ++str)
-        ;
-    if ((digits == 0) || (digits > 4))
-        return NULL;
-
-    if (*str++ != ':')
-        return NULL;
-
-    for (digits = 0; isxdigit (*str); ++str)
-        ;
-    if (digits == 0)
-        doublecolons = 1;
-    else if (digits > 4)
-        return NULL;
-
-    for (digits = 0; isxdigit (*str); ++str)
-        ;
-    if (digits == 0)
-    {
-        if (doublecolons > 0)
-            return NULL;
-        doublecolons = 1;
-    }
-    else if (digits > 4)
-        return NULL;
-
-    for (digits = 0; isxdigit (*str); ++str)
-        ;
-    if (digits == 0)
-    {
-        if (doublecolons > 0)
-            return NULL;
-        doublecolons = 1;
-    }
-    else if (digits > 4)
-        return NULL;
-
-/* ... eeek! */
-    return NULL;
-#endif
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-/* -----
- * number.number.number.numer 
- * does not range check number
- */
-static
-const char * eat_ipv4 (const char * str)
-{
-    do
-        if (! isdigit(*str++))
-            return NULL;
-    while (*str != '.');
-    ++str;
-    do
-        if (! isdigit(*str++))
-            return NULL;
-    while (*str != '.');
-    ++str;
-    do
-        if (! isdigit(*str++))
-            return NULL;
-    while (*str != '.');
-    ++str;
-    do
-        if (! isdigit(*str++))
-            return NULL;
-    while (isdigit (*str));
-    return str;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-const char * eat_hostnumber (const char * str)
-{
-    const char * temp;
-
-    temp = eat_ipv4 (str);
-    if (temp == NULL)
-        temp = eat_ipv6 (str);
-    return temp;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-const char * eat_host (const char * str)
-{
-    const char * temp;
-
-    temp = eat_hostnumber (str);
-    if (temp == NULL)
-        temp = eat_hostname (str);
-    return temp;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-static
-const char * eat_fsegment (const char * str)
-{
-    for (;;++str)
-    {
-        if ((*str == '/') ||
-            (*str == '\0'))
-        {
-            break;
-        }
-        else if ( ! is_ipchar (*str))
-            return NULL;
-    }
-    return str;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE && 0
-/* fpath = fsegment *[ "/" fsegment ] */
-static
-bool is_fpath (const char * str)
-{
-    for (;;)
-    {
-        str = eat_fsegment (str);
-        if (str == NULL)
-            return false;
-        if (*str == '\0')
-            return true;
-        if (*str != '/')
-            return false;
-        ++str;
-    }
-    return false; /* unreachable really */
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_file_hier (const char * str)
-{
-#if 0
-    const char * temp;
-    /* 
-     * we'll expect the "file://host/fpath"
-     * but also accept the inccorect "file:/fpath"
-     */
-    if (*str++ != '/')
-        return false;
-
-    if (*str == '/') /* must be correct version */
-    {
-        ++str;
-        temp = eat_host (str);
-        if (temp == NULL)
-            return false;
-        str = temp;
-        if (*str++ != '/')
-            return false;
-    }
-    return is_fpath (str);
-#else
-    if ((str[0] == '/') && (str[1] == '/'))
-    {
-        const char * temp = eat_file_iauthority (str);
-        if (temp != NULL)
-            if (is_ipath_abempty (temp))
-                return true;
-    }
-    if (is_ipath_absolute (str))
-        return true;
-
-    if (is_ipath_rootless (str))
-        return true;
-
-    if (is_ipath_empty (str))
-        return true;
-
-    return false;
-#endif
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_file_query (const char * str)
-{
-    return (*str == '\0');
-
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_file_fragment (const char * str)
-{
-    return (*str == '\0');
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_kfs_hier (const char * str)
-{
-    return is_file_hier (str);
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-const char * eat_kfs_query (const char * str, KPOption ** opt)
-{
-    /*
-     *    query_entry = "encrypt" / "enc" / ( "pwfile=" hier-part ) / ( "pwfd=" fd )
-     */
-    assert (str);
-    assert (opt);
-
-    switch (tolower (str[0]))
-    {
-    case 'e':
-        if (strncasecmp ("nc", str+1, 2) == 0)
-        {
-            const char * temp = NULL;
-
-            if ((str[3] == '\0') || (str[3] == '&'))
-                temp =  str + 3;
-
-            if ((strncasecmp ("rypt", str+3, 4) == 0) && 
-                ((str[7] == '\0') || (str[7] == '&')))
-                temp = str + 7;
-            if (temp)
-            {
-                KPOption * o;
-                rc_t rc;
-
-                rc = KPOptionMake (&o, kpopt_encrypted, temp, 0);
-                if (rc)
-                    return false;
-                *opt = o;
-                return temp;
-            }
-        }
-        break;
-
-    case 'p':
-        if (strncasecmp ("wfile=", str + 1, sizeof ("wfile=") - 1) == 0)
-        {
-            const char * temp1 = str + 1 + sizeof ("wfile=") - 1;
-            const char * temp2 = temp1;
-
-            while ((*temp1 != '\0') && (*temp1 != '&'))
-                ++temp1;
-            if (temp1 != temp2)
-            {
-                KPOption * o;
-                rc_t rc;
-
-                rc = KPOptionMake (&o, kpopt_pwpath, temp2, temp1-temp2);
-                if (rc)
-                    return false;
-                *opt = o;
-                return temp1;
-            }
-            break;
-        }
-        if (strncasecmp ("wfd=", str + 1, sizeof ("wfd=") - 1) == 0)
-        {
-            const char * temp1 = str + 1 + sizeof ("wfd=") - 1;
-            const char * temp2 = temp1;
-            while (isdigit(*temp1))
-                ++temp1;
-            if (temp1 == temp2)
-                break;
-            if ((*temp1 == '\0') || (*temp1 == '&'))
-            {
-                KPOption * o;
-                rc_t rc;
-
-                rc = KPOptionMake (&o, kpopt_pwfd, temp2, temp1-temp2);
-                if (rc)
-                    return false;
-                *opt = o;
-                return temp1;
-            }
-        }
-        break;
-
-    }
-    PATH_DEBUG (("%s: failed '%s'\n",__func__,str));
-    return NULL;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_kfs_query (const char * str, BSTree * tree)
-{
-    /* 
-     *    query       = query_entry [ * ( "&" query_entry ) ]
-     *
-     *    query_entry = "encrypt" / "enc" / ( "pwfile=" hier-part ) / ( "pwfd=" fd )
-     */
-    const char * temp;
-
-    if (*str == '\0')
-        return true;
-
-    for (;;)
-    {
-        KPOption * o = NULL;
-
-        temp = eat_kfs_query (str, &o);
-        if ((temp == NULL) || (o == NULL))
-            return false;
-
-        /* can only have one of these two */
-        if ((o->name == kpopt_pwpath) || (o->name == kpopt_pwfd))
-        {
-            BSTNode * n;
-
-            n = BSTreeFind ( tree, (void*)kpopt_pwpath, KPOptionCmp );
-            if (n)
-                return false;
-
-            n = BSTreeFind ( tree, (void*)kpopt_pwfd, KPOptionCmp );
-            if (n)
-                return false;
-
-            if ( BSTreeInsert ( tree, &o->node, KPOptionSort ) != 0)
-                return false;
-        }
-        else if ( o->name == kpopt_encrypted )
-        {
-            BSTNode * n;
-
-            n = BSTreeFind ( tree, (void*)kpopt_pwpath, KPOptionCmp );
-            if (n == NULL)
-                if ( BSTreeInsert ( tree, &o->node, KPOptionSort ) != 0)
-                    return false;
-        }
-        str = temp;
-        if (*str == '\0')
-            break;
-        if (*str == '&')
-            /**(char *)str = '\0'*/;
-        else
-            return false;
-        ++str;
-    }
-    return true;
-}
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-bool is_kfs_fragment (const char * str)
-{
-    return (*str == '\0');
-}
-#endif
-
-
-#if USE_EXPERIMENTAL_CODE
-#if SUPPORT_FILE_URL
-/*
- * file://host/path bue we allow file:/path
- *
- * RFC-1738
- *
- * fileurl = "file://" [host / "localhost" ] "/" fpath
- */
-static
-rc_t KPathMakeUriFile (KPath * self, char * new_allocation, 
-                       size_t sz, char * hier, char * query,
-                       char * fragment)
-{
-    rc_t rc;
-    assert (self);
-    assert (new_allocation);
-    assert (sz);
-    assert (hier);
-    assert (query);
-    assert (fragment);
-
-    if ((!is_file_hier (hier)) ||
-        (!is_file_query (query)) ||
-        (!is_file_fragment (fragment)))
-    {
-        return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
-    }
-
-    free (self->storage);
-    self->storage = new_allocation;
-    self->alloc_size = sz;
-
-    PATH_DEBUG (("%s: hier '%s' query '%s' fragment '%s'\n", __func__,
-                 hier, query, fragment));
-    rc = KPathTransformPathHier (&hier);
-    PATH_DEBUG (("%s: hier '%s' query '%s' fragment '%s'\n", __func__,
-                 hier, query, fragment));
-    if (rc)
-        return rc;
-    StringInitCString (&self->path, hier);
-    self->query = query;
-    self->fragment = fragment;
-    PATH_DEBUG (("%s: path '%S' fragment '%s'\n", __func__,
-                 &self->path, self->fragment));
-    return 0;
-}        
-#endif
-#endif
-#if USE_EXPERIMENTAL_CODE
-#if SUPPORT_FILE_URL
-static
-rc_t KPathMakeUriKfs (KPath * self, char * new_allocation, 
-                      size_t sz, char * hier,
-                      char * query, char * fragment)
-{
-    rc_t rc;
-    assert (self);
-    assert (new_allocation);
-    assert (sz);
-    assert (hier);
-    assert (query);
-    assert (fragment);
-
-    if (!is_kfs_hier (hier))
-    {
-        PATH_DEBUG (("%s: failed is_kfs_hier '%s'\n",__func__, hier));
-        return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
-    }
-
-    if (!is_kfs_query (query, &self->options))
-    {
-        PATH_DEBUG (("%s: failed is_kfs_query '%s'\n",__func__, query));
-        return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
-    }
-
-    if (!is_kfs_fragment (fragment))
-    {
-        PATH_DEBUG (("%s: failed is_kfs_fragment '%s'\n",__func__, fragment));
-        return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
-    }
-
-    free (self->storage);
-    self->storage = new_allocation;
-    self->alloc_size = sz;
-
-    PATH_DEBUG (("%s: hier '%s' query '%s' fragment '%s'\n", __func__,
-                 hier, query, fragment));
-    rc = KPathTransformPathHier (&hier);
-    PATH_DEBUG (("%s: hier '%s' query '%s' fragment '%s'\n", __func__,
-                 hier, query, fragment));
-    if (rc)
-        return rc;
-    StringInitCString (&self->path, hier);
-    self->fragment = fragment;
-    PATH_DEBUG (("%s: path '%S' fragment '%S'\n", __func__,
-                 &self->path, self->fragment));
-    return 0;
-}
-#endif
-#endif
-#if USE_EXPERIMENTAL_CODE
-static
-KPUri_t scheme_type (const char * scheme)
-{
-    /* We have a "legal" scheme name. We'll only look for specific schemes we
-     * support and mark all others as merely unsupported rather than 
-     * differentiate types we don't care about.
-     */
-#if SUPPORT_FILE_URL
-    if (strcasecmp ("file", scheme) == 0)
-    {
-        PATH_DEBUG (("%s: file scheme\n",__func__));
-        return kpuri_file;
-    }
-#endif
-
-    if (strcasecmp (NCBI_FILE_SCHEME, scheme) == 0)
-    {
-        PATH_DEBUG (("%s: " NCBI_FILE_SCHEME " scheme\n",__func__));
-        return kpuri_ncbi_kfs;
-    }
-
-    return kpuri_not_supported;
-}
-#endif
-
-
-/*
- * See RFC 3986 / RFC 3987
- * We will allow utf-8 in our URI with the extended Unicode characters not 
- * required to be %-encoded.  We would have to do this encoding if we wish
- * to pass this uri out of our environment.
- *
- * we demand a valid set of characters for the scheme but do no validation 
- * of the other parts waiting for a scheme specific parsing
- */
-
-#if USE_EXPERIMENTAL_CODE
-/* pcopy and scheme point to the same place - seems redundant */
-static
-rc_t KPathSplitUri (KPath * self, char ** pcopy, size_t * psiz, char ** scheme, char ** hier,
-                    char ** query, char ** fragment)
-{
-    char * copy;
-    size_t z;
-
-    assert (self && pcopy && psiz && scheme && hier && query && fragment);
-
-    *pcopy = *scheme = *hier = *query = *fragment = NULL;
-    *psiz = 0;
-
-    z = self->asciz_size + 1;
-    copy = malloc (z);
-    if (copy == NULL)
-        return RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
-    strcpy (copy, self->storage);
-    for (;;)
-    {
-        char * s; /* start/scheme */
-        char * h; /* hier-part */
-        char * q; /* query */
-        char * f; /* fragment */
-        char * e; /* EOS (terminating NUL */
-
-        s = copy;
-
-        /* point at NUL at end */
-        f = q = e = s + strlen (self->storage);
-
-        /* find the scheme - terminated by first ':' from the beginning (left) */
-        h = strchr (s, ':');
-
-        /* scheme must be present as must the ':' and not % encoded
-         * and must have some size
-         * the character set for scheme is very limited - ASCII Alphanumeric
-         * with "-", ",", "_", and "~"
-         */
-        if ((h == NULL) || (h == s))
-            break;
-
-        *h++ = '\0';
-        if (! is_scheme (s))
-            break;
-        
-        if (h != e)
-        {
-            f = strchr (h, '#');
-
-            if (f == NULL)
-                f = e;
-            else
-                *f++ = '\0';
-
-            q = strchr (h, '?');
-
-            if (q == NULL)
-                q = e;
-            else
-                *q++ = '\0';
-        }
-
-        if (! string_decode (h))
-            break;
-
-        if (! string_decode (q))
-            break;
-
-        if (! string_decode (f))
-            break;
-        
-        if (! is_hier (h))
-            break;
-
-        if (! is_query (q))
-            break;
-
-        if (! is_fragment (f))
-            break;
-
-        *scheme = s;
-        *hier = h;
-        *query = q;
-        *fragment = f;
-        *psiz = z;      /* WHAT???? */
-        *pcopy = copy;
-        return 0;
-    }
-
-    free (copy);
-    return RC (rcFS, rcPath, rcParsing, rcUri, rcInvalid);
-}
-#endif
-
-
-#if USE_EXPERIMENTAL_CODE
-static
-rc_t KPathParseURI (KPath * self)
-{
-    char * parsed_uri;
-    char * scheme;
-    char * hier;
-    char * query;
-    char * fragment;
-    size_t allocated;
-    rc_t rc;
-
-    rc = KPathSplitUri (self, &parsed_uri, &allocated, &scheme, &hier, &query, &fragment);
-    PATH_DEBUG (("%s: allocated %p '%zu'\n",__func__,parsed_uri,allocated));
-    if (rc == 0)
-    {
-        switch (scheme_type (scheme))
-        {
-        case kpuri_invalid:
-            rc = RC (rcFS, rcPath, rcParsing, rcUri, rcInvalid);
-            break;
-
-        case kpuri_not_supported:
-            rc = RC (rcFS, rcPath, rcParsing, rcUri, rcIncorrect);
-            break;
-
-#if SUPPORT_FILE_URL
-        case kpuri_file:
-            PATH_DEBUG (("%s: call KPathMakeUriFile\n",__func__));
-            rc = KPathMakeUriFile (self, parsed_uri, allocated, hier, query,
-                                   fragment);
-            break;
-#endif
-
-        case kpuri_ncbi_kfs:
-            PATH_DEBUG (("%s: call KPathMakeUriKfs\n",__func__));
-            rc = KPathMakeUriKfs (self, parsed_uri, allocated, hier, query,
-                                  fragment);
-            break;
-
-        default:
-            rc = RC (rcFS, rcPath, rcParsing, rcUri, rcCorrupt);
-            break;
-        }
-        if (rc)
-            free (parsed_uri);
-    }
-    return rc;
-}
-#endif
-
-static
-rc_t KPathAlloc (KPath ** pself, const char * path_string)
-{
-    rc_t rc;
-    size_t z, zz;
-    KPath * self;
-
-
-    zz = 1 + (z = string_size (path_string));
-
-    OFF_PATH_DEBUG(("%s: %s 'z' '%zu' zz '%zu'\n",__func__,path_string,z,zz));
-
-    self = calloc (sizeof (*self), 1);
-    if (self == NULL)
-        rc = RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
-    else
-    {
-        self->storage = malloc (zz);
-        if (self->storage == NULL)
-            rc = RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
-        else
-        {
-
-            PATH_DEBUG (("-----\n%s: %p %zu %p %zu\n\n", __func__, self, sizeof (*self),
-                         self->storage, zz));
-            self->alloc_size = zz;
-
-            memcpy (self->storage, path_string, zz);
-
-            KRefcountInit (&self->refcount, 1, class_name, "init", self->storage);
-
-            self->asciz_size = z;
-
-            StringInit (&self->path, self->storage, z, string_len(self->storage, z));
-
-            BSTreeInit (&self->options);
-
-            self->fragment = self->storage + z;
-
-            *pself = self;
-
-            OFF_PATH_DEBUG (("%s: path '%S'\n", __func__, &self->path));
-
-            return 0;
-        }
-
-        free (self);
-    }
-    return rc;
-}
-
-
-static
-rc_t KPathMakeValidateParams (KPath ** new_path, const char * path)
-{
-    if (new_path == NULL)
-        return RC (rcFS, rcPath, rcConstructing, rcSelf, rcNull);
-    *new_path = NULL;
-    if (path == NULL)
-        return RC (rcFS, rcPath, rcConstructing, rcParam, rcNull);
-    return 0;
-}
-
-
-LIB_EXPORT rc_t CC KPathMake ( KPath ** new_path, const char * posix_path)
-{
-    KPath * self;
-    rc_t rc;
-
-    rc = KPathMakeValidateParams (new_path, posix_path);
-    if (rc == 0)
-    {
-        rc = KPathAlloc (&self, posix_path);
-        if (rc == 0)
-        {
-#if USE_EXPERIMENTAL_CODE
-            rc = KPathParseURI (self);
-#endif
-
-            /* ignore return - if its bad just leave the path alone even if 
-             * it turns out to be bad later */
-            *new_path = self;
-            return 0;
-        }
-    }
-    return rc;
-}
-
-
-LIB_EXPORT rc_t CC KPathMakeSysPath ( KPath ** new_path, const char * sys_path)
-{
-    KPath * self;
-    rc_t rc;
-
-    rc = KPathMakeValidateParams (new_path, sys_path);
-    if (rc)
-    {
-        LOGERR (klogErr, rc, "error with KPathMakeValidateParams");
-        return rc;
-    }
-
-    rc = KPathAlloc (&self, sys_path);
-    if (rc)
-        return rc;
-#if USE_EXPERIMENTAL_CODE
-    /* first try as URI then as a system specific path */
-    rc = KPathParseURI (self);
-    if (rc)
-#endif
-        rc = KPathTransformSysPath(self);
-
-    if (rc)
-        KPathDestroy (self);
-    else
-        *new_path = self;
-    return rc;
-}
-
-
-LIB_EXPORT rc_t CC KPathMakeVFmt ( KPath ** new_path, const char * fmt, va_list args )
-{
-    size_t len;
-    rc_t rc;
-    char buffer [32*1024]; /* okay we really don't want any larger than this I suppose */
-
-    rc = KPathMakeValidateParams (new_path, fmt);
-    if (rc)
-        return rc;
-
-    rc = string_printf (buffer, sizeof (buffer), &len, fmt, args);
-    if (rc)
-        return rc;
-
-    if (len >= sizeof buffer)
-        return RC (rcFS, rcPath, rcConstructing, rcBuffer, rcInsufficient);
-
-    return KPathMake (new_path, buffer);
-}
-
-
-LIB_EXPORT rc_t CC KPathMakeFmt ( KPath ** new_path, const char * fmt, ... )
-{
-    rc_t rc;
-    va_list args;
-
-    va_start (args, fmt);
-    rc = KPathMakeVFmt (new_path, fmt, args);
-    va_end (args);
-
-    return rc;
-}
-
-LIB_EXPORT rc_t CC KPathMakeRelative ( KPath ** new_path, const KPath * base_path,
-                                       const char * relative_path )
-{
-    rc_t rc = RC (rcFS, rcPath, rcConstructing, rcFunction, rcUnsupported);
-
-
-
-    return rc;
-}
-
-
-LIB_EXPORT rc_t CC KPathMakeCurrentPath ( KPath ** new_path )
-{
-    char buff [4096];
-    char * a = NULL;
-    char * b = buff;
-    size_t z;
-    rc_t rc;
-
-    rc = KPathGetCWD (b, sizeof buff);
-    if (rc)
-    {
-        for (z = 2 * sizeof buff; rc; z += sizeof buff)
-        {
-            b = realloc (a, z);
-            if (b == NULL)
-            {
-                free (a);
-                return RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
-            }
-            rc = KPathGetCWD (b, z);
-        }
-    }
-    rc = KPathMakeSysPath (new_path, b);
-    if (b != buff)
-        free (b);
-    return rc;
-}
-
-/* ----------
- * KPathReadPath
- *
- * Copy the path as a ASCIZ string to the buffer.  The form will be the KFS
- * internal "posix-path" form.
- */
-LIB_EXPORT rc_t CC KPathReadPath (const KPath * self, char * buffer, size_t buffer_size,
-                                  size_t * num_read)
-{
-    size_t z = StringSize (&self->path);
-
-    if (buffer_size < z)
-        return RC (rcFS, rcPath, rcReading, rcBuffer, rcInsufficient);
-
-
-    PATH_DEBUG (("%s: path '%S' fragment '%s'\n", __func__,
-                 &self->path, self->fragment));
-
-    PATH_DEBUG (("%s: should copy '%*.*s' length '%zu'\n", __func__, z, z,
-                 self->path.addr, z));
-    memcpy (buffer, self->path.addr, z);
-    if (buffer_size > z)
-        buffer[z] = '\0';
-    *num_read = z;
-
-    PATH_DEBUG (("%s: copied '%*.*s' length '%zu'\n", __func__, z, z,
-                 buffer, z));
-    return 0;
-}
-
-LIB_EXPORT rc_t CC KPathReadQuery (const KPath * self, char * buffer, size_t buffer_size,
-                                   size_t * num_read)
-{
-    if (num_read == NULL)
-        return RC (rcFS, rcPath, rcAccessing, rcParam, rcNull);
-    *num_read = 0;
-
-    if (buffer == NULL)
-        return RC (rcFS, rcPath, rcAccessing, rcParam, rcNull);
-
-    if (self == NULL)
-        return RC (rcFS, rcPath, rcAccessing, rcSelf, rcNull);
-
-    *num_read = string_copy (buffer, buffer_size, self->query,
-                             self->alloc_size);
-    return 0;
-}
-
-LIB_EXPORT rc_t CC KPathReadFragment (const KPath * self, char * buffer, size_t buffer_size,
-                                      size_t * num_read)
-{
-    if (num_read == NULL)
-        return RC (rcFS, rcPath, rcAccessing, rcParam, rcNull);
-    *num_read = 0;
-
-    if (buffer == NULL)
-        return RC (rcFS, rcPath, rcAccessing, rcParam, rcNull);
-
-    if (self == NULL)
-        return RC (rcFS, rcPath, rcAccessing, rcSelf, rcNull);
-
-
-
-    *num_read = string_copy (buffer, buffer_size, self->fragment, 
-                             self->alloc_size);
-    return 0;
-}
-
-/* ----------
- */
-LIB_EXPORT rc_t CC KPathOption (const KPath * self, KPOption_t option,
-                                char * buffer, size_t buffer_size,
-                                size_t * num_read)
-{
-    size_t o = (size_t)option;
-    BSTNode * n = BSTreeFind (&self->options, (void*)o, KPOptionCmp);
-    KPOption * opt;
-
-    if (n == NULL)
-        return RC (rcFS, rcPath, rcAccessing, rcParam, rcNotFound);
-    opt = (KPOption*)n;
-    *num_read = string_copy (buffer, buffer_size, opt->value.addr, opt->value.size);
-    return 0;
-}
diff --git a/libs/kfs/quickmount.c b/libs/kfs/quickmount.c
new file mode 100644
index 0000000..83e2297
--- /dev/null
+++ b/libs/kfs/quickmount.c
@@ -0,0 +1,967 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <kfs/extern.h>
+#include <kfs/quickmount.h>
+#include <kfs/directory.h>
+
+#include <klib/rc.h>
+#include <klib/printf.h>
+
+#include <sysalloc.h>
+
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+/* ----------------------------------------------------------------------
+ * 
+ */
+
+/* -----
+ * define the specific types to be used in the templatish/inheritancish
+ * definition of vtables and their elements
+ */
+#define KDIR_IMPL struct KQuickMountDir
+#define KNAMELIST_IMPL   struct KQuickMountListing
+#include <kfs/impl.h>
+
+/* ======================================================================
+ */
+/*--------------------------------------------------------------------------
+ * KQuickMountDir
+ *  a directory inside an archive (tar or SRA for example)
+ *
+ * This type is being engineered to mimic KQuickMountDir.
+ */
+struct KQuickMountDir
+{
+    KDirectory   dad;
+    int          root;
+    const KFile* file;
+    char *       mount;
+    char         path[1];
+    /* actual allocation is based on actual string length */
+};
+
+
+
+/* KQuickMountDirCanonPath
+ */
+static
+rc_t KQuickMountDirCanonPath ( const KQuickMountDir *self, enum RCContext ctx, char *path, size_t psize )
+{
+    char *low, *dst, *last, *end = path + psize;
+    low = dst = last = path + self -> root;
+
+    while ( 1 )
+    {
+        char *src = strchr ( last + 1, '/' );
+        if ( src == NULL )
+            src = end;
+
+        /* detect special sequences */
+        switch ( src - last )
+        {
+        case 2:
+            if ( last [ 1 ] == '.' )
+            {
+                /* skip over */
+                last = src;
+                if ( src != end )
+                    continue;
+            }
+            break;
+
+        case 3:
+            if ( last [ 1 ] == '.' && last [ 2 ] == '.' )
+            {
+                /* remove previous leaf in path */
+                dst [ 0 ] = 0;
+                dst = strrchr ( path, '/' );
+                if ( dst == NULL || dst < low )
+                    return RC ( rcFS, rcDirectory, ctx, rcPath, rcInvalid );
+
+                last = src;
+                if ( src != end )
+                    continue;
+            }
+            break;
+        }
+
+        /* if rewriting, copy leaf */
+        assert ( src >= last );
+
+        if ( dst != last )
+            memmove ( dst, last, src - last );
+
+        /* move destination ahead */
+        dst += src - last;
+        
+        /* if we're done, go */
+        if ( src == end )
+                break;
+
+        /* find next separator */
+        last = src;
+    }
+
+    /* NUL terminate if modified */
+    if ( dst != end )
+        * dst = 0;
+
+    return 0;
+}
+
+/* KQuickMountDirRelativePath
+ *  makes "path" relative to "root"
+ *  both "root" and "path" MUST be absolute
+ *  both "root" and "path" MUST be canonical, i.e. have no "./" or "../" sequences
+ */
+static
+rc_t KQuickMountDirRelativePath (const KQuickMountDir *self, enum RCContext ctx,
+                                 const char *root, char *path, size_t path_max)
+{
+    int backup;
+    size_t bsize, psize;
+
+    const char *r = root + self -> root;
+    const char *p = path + self -> root;
+
+    assert ( r != NULL && r [ 0 ] == '/' );
+    assert ( p != NULL && p [ 0 ] == '/' );
+
+    for ( ; * r == * p; ++ r, ++ p )
+    {
+        /* disallow identical paths */
+        if ( * r == 0 )
+            return RC ( rcFS, rcDirectory, ctx, rcPath, rcInvalid );
+    }
+
+    /* paths are identical up to "r","p"
+       if "r" is within a leaf name, then no backup is needed
+       by counting every '/' from "r" to end, obtain backup count */
+    for ( backup = 0; * r != 0; ++ r )
+    {
+        if ( * r == '/' )
+            ++ backup;
+    }
+
+    /* the number of bytes to be inserted */
+    bsize = backup * 3;
+
+    /* align "p" to last directory separator */
+    while ( p [ -1 ] != '/' ) -- p;
+
+    /* the size of the remaining relative path */
+    psize = strlen ( p );
+
+    /* open up space if needed */
+    if ( p - path < bsize )
+    {
+        /* prevent overflow */
+        if ( bsize + psize >= path_max )
+            return RC ( rcFS, rcDirectory, ctx, rcPath, rcExcessive );
+        memmove ( path + bsize, p, psize + 1 /* 1 for '\0'*/ );
+    }
+
+    /* insert backup sequences */
+    for ( bsize = 0; backup > 0; bsize += 3, -- backup )
+        memcpy ( & path [ bsize ], "../", 3 );
+
+    /* close gap */
+    if ( p - path > bsize )
+        memmove ( & path [ bsize ], p, strlen ( p ) + 1 );
+
+    return 0;
+}
+
+
+
+static __inline__
+rc_t KQuickMountDirVMakePath (const KQuickMountDir * self, enum RCContext ctx, 
+                              bool canon, char * buffer, size_t path_max,
+                              const char * path, va_list args)
+{
+    size_t psize;
+    size_t bsize;
+    rc_t rc;
+
+    if ( path == NULL )
+        return RC ( rcFS, rcDirectory, ctx, rcPath, rcNull );
+    if ( path [ 0 ] == 0 )
+        return RC ( rcFS, rcDirectory, ctx, rcPath, rcInvalid );
+
+    if ( args != NULL && path [ 0 ] == '%' )
+    {
+        rc = string_vprintf (buffer, path_max, &psize, path, args);
+
+        if (psize > path_max)
+            return RC ( rcFS, rcDirectory, ctx, rcPath, rcExcessive );
+        if (rc)
+            return rc;
+        if ( buffer [ 0 ] != '/' )
+        {
+            bsize = (self->mount - self->path) - 1;
+            if ( bsize + psize >= path_max )
+                return RC ( rcFS, rcDirectory, ctx, rcPath, rcExcessive );
+            memmove ( buffer + bsize, buffer, psize + 1 );
+            assert ( self -> path [ bsize - 1 ] == '/' );
+            memcpy ( buffer, self -> path, bsize );
+        }
+        else if ( ( bsize = self -> root ) != 0 )
+        {
+            if ( bsize + psize >= path_max )
+                return RC ( rcFS, rcDirectory, ctx, rcPath, rcExcessive );
+            memmove ( buffer + bsize, buffer, psize + 1 );
+            assert ( self -> path [ bsize - 1 ] != '/' );
+            memcpy ( buffer, self -> path, bsize );
+        }
+    }
+    else
+    {
+        if ( path [ 0 ] != '/' )
+        {
+/*             assert ( self -> path [ self -> size - 1 ] == '/' ); */
+            memcpy ( buffer, self -> path, bsize = (self->mount - self->path) - 1 );
+        }
+        else if ( ( bsize = self -> root ) != 0 )
+        {
+            assert ( self -> path [ bsize - 1 ] != '/' );
+            memcpy ( buffer, self -> path, bsize );
+        }
+
+
+        rc = string_vprintf ( buffer + bsize, path_max - bsize, &psize, path, args );
+        if (bsize + psize >= path_max)
+            return RC ( rcFS, rcDirectory, ctx, rcPath, rcExcessive );
+        if (rc)
+            return rc;
+    }
+
+    if ( buffer [ bsize + psize ] == '/' )
+        buffer [ bsize + -- psize ] = 0;
+
+    if ( psize > 0 && ( canon || self -> root != 0 ) )
+        return KQuickMountDirCanonPath ( self, ctx, buffer, bsize + psize );
+
+    return 0;
+}
+
+
+static __inline__
+rc_t KQuickMountDirMakePath (const KQuickMountDir * self, enum RCContext ctx, 
+                             bool canon, char * buffer, size_t path_max,
+                             const char * path, ...)
+{
+    va_list args;
+    rc_t rc;
+
+    va_start (args, path);
+    rc = KQuickMountDirVMakePath (self, ctx, canon, buffer,
+                                  path_max, path, args);
+    va_end (args);
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirDestroy
+ */
+static rc_t CC KQuickMountDirDestroy (KQuickMountDir *self)
+{
+    rc_t rc;
+
+    rc = KFileRelease (self->file);
+
+    free (self);
+
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirList
+ *  create a directory listing
+ *
+ *  "list" [ OUT ] - return parameter for list object
+ *
+ *  "path" [ IN, NULL OKAY ] - optional parameter for target
+ *  directory. if NULL, interpreted to mean "."
+ *
+ * [RET] rc_t					0 for success; anything else for a failure
+ *						see itf/klib/rc.h for general details
+ * [IN]	 const KQuickMountDir *	self		Object oriented C; KQuickMountDir object for this method
+ * [OUT] KNamelist **		listp,
+ * [IN]  bool (* 		f	)(const KDirectory*,const char *, void *)
+ * [IN]  void *			data
+ * [IN]  const char *		path
+ * [IN]  va_list		args
+ */
+static
+rc_t CC KQuickMountDirList (const KQuickMountDir *self,
+                       KNamelist **listp,
+                       bool (CC* f) (const KDirectory *dir, const char *name, void *data),
+                       void *data,
+                       const char *path,
+                       va_list args)
+{
+    return RC (rcFS, rcDirectory, rcAccessing, rcFunction, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirVisit
+ *  visit each path under designated directory,
+ *  recursively if so indicated
+ *
+ *  "recurse" [ IN ] - if non-zero, recursively visit sub-directories
+ *
+ *  "f" [ IN ] and "data" [ IN, OPAQUE ] - function to execute
+ *  on each path. receives a base directory and relative path
+ *  for each entry, where each path is also given the leaf name
+ *  for convenience. if "f" returns non-zero, the iteration will
+ *  terminate and that value will be returned. NB - "dir" will not
+ *  be the same as "self".
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native character set
+ */
+static 
+rc_t CC KQuickMountDirVisit (const KQuickMountDir *self, 
+                      bool recurse,
+                      rc_t (CC* f) (const KDirectory *, uint32_t, const char *, void *), 
+                      void *data,
+                      const char *path,
+                      va_list args)
+{
+    return RC (rcFS, rcDirectory, rcAccessing, rcFunction, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirVisitUpdate
+ */
+static rc_t CC KQuickMountDirVisitUpdate (KQuickMountDir *self,
+                                   bool recurse,
+                                   rc_t (CC*f) (KDirectory *,uint32_t,const char *,void *),
+                                   void *data,
+                                   const char *path,
+                                   va_list args)
+{
+    return RC (rcFS, rcDirectory, rcUpdating, rcFunction, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirPathType
+ *  returns a KPathType
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native character set
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ *
+ * [RET] uint32_t
+ * [IN]  const KQuickMountDir *	self		Object oriented C; KQuickMountDir object for this method
+ * [IN]  const char *		path
+ * [IN]  va_list		args
+ */
+static uint32_t CC KQuickMountDirPathType (const KQuickMountDir *self, const char *path, va_list args)
+{
+    char buff [8192];
+    rc_t rc;
+
+    rc = KQuickMountDirVMakePath (self, rcAccessing, true, buff, sizeof buff, path, args);
+    if (rc)
+        return kptBadPath;
+
+    if (strcmp (buff, self->path) == 0)
+        return kptFile;
+
+    return kptNotFound;
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirResolvePath
+ *
+ *  resolves path to an absolute or directory-relative path
+ *
+ * [IN]  const KQuickMountDir *self		Objected oriented self
+ * [IN]	 bool 		absolute	if non-zero, always give a path starting
+ *  					with '/'. NB - if the directory is 
+ *					chroot'd, the absolute path
+ *					will still be relative to directory root.
+ * [OUT] char *		resolved	buffer for NUL terminated result path in 
+ *					directory-native character set
+ * [IN]	 size_t		rsize		limiting size of resolved buffer
+ * [IN]  const char *	path		NUL terminated string in directory-native
+ *					character set denoting target path. 
+ *					NB - need not exist.
+ *
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ */
+static rc_t CC KQuickMountDirResolvePath (const KQuickMountDir *self,
+                                          bool absolute,
+                                          char *resolved,
+                                          size_t rsize,
+                                          const char *path,
+                                          va_list args)
+{
+    char full [ 8192 ];
+    rc_t rc = KQuickMountDirVMakePath ( self, rcResolving, true, full, sizeof full, path, args );
+    if ( rc == 0 )
+    {
+        uint32_t path_size = strlen ( full );
+
+        if ( absolute )
+        {
+            /* test buffer capacity */
+            if ( path_size - self -> root >= rsize )
+                return RC ( rcFS, rcDirectory, rcResolving, rcBuffer, rcInsufficient );
+
+            /* ready to go */
+            strcpy ( resolved, & full [ self -> root ] );
+/*             assert ( resolved [ 0 ] == '/' ); */
+        }
+        else
+        {
+            rc = KQuickMountDirRelativePath ( self, rcResolving, self -> path, full, sizeof full /*path_size*/ );
+            if ( rc == 0 )
+            {
+                path_size = strlen ( full );
+                if ( path_size >= rsize )
+                    return RC ( rcFS, rcDirectory, rcResolving, rcBuffer, rcInsufficient );
+                strcpy ( resolved, full );
+            }
+        }
+    }
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirResolveAlias
+ *  resolves an alias path to its immediate target
+ *  NB - the resolved path may be yet another alias
+ *
+ *  "alias" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting an object presumed to be an alias.
+ *
+ *  "resolved" [ OUT ] and "rsize" [ IN ] - buffer for
+ *  NUL terminated result path in directory-native character set
+ *
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ */
+static rc_t CC KQuickMountDirResolveAlias (const KQuickMountDir * self, 
+				 bool absolute,
+				 char * resolved,
+				 size_t rsize,
+				 const char *alias,
+				 va_list args)
+{
+    return RC (rcFS, rcDirectory, rcAccessing, rcFunction, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirRename
+ *  rename an object accessible from directory, replacing
+ *  any existing target object of the same type
+ *
+ *  "from" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting existing object
+ *
+ *  "to" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting existing object
+ */
+static
+rc_t CC KQuickMountDirRename (KQuickMountDir *self, bool force, const char *from, const char *to)
+{
+    assert (self != NULL);
+    assert (from != NULL);
+    assert (to != NULL);
+
+    return RC (rcFS, rcDirectory, rcUpdating, rcSelf, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirRemove
+ *  remove an accessible object from its directory
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target object
+ *
+ *  "force" [ IN ] - if non-zero and target is a directory,
+ *  remove recursively
+ */
+static
+rc_t CC KQuickMountDirRemove (KQuickMountDir *self, bool force, const char *path, va_list args)
+{
+    assert (self != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcDirectory, rcUpdating, rcSelf, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirClearDir
+ *  remove all directory contents
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target directory
+ *
+ *  "force" [ IN ] - if non-zero and directory entry is a
+ *  sub-directory, remove recursively
+ */
+static
+rc_t CC KQuickMountDirClearDir (KQuickMountDir *self, bool force, const char *path, va_list args)
+{
+    assert (self != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcDirectory, rcUpdating, rcSelf, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirAccess
+ *  get access to object
+ *
+ *  "access" [ OUT ] - return parameter for Unix access mode
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target object
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ */
+static rc_t CC KQuickMountDirVAccess (const KQuickMountDir *self,
+			    uint32_t *access,
+			    const char *path,
+			    va_list args)
+{
+    return RC (rcFS, rcDirectory, rcAccessing, rcFunction, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirSetAccess
+ *  set access to object a la Unix "chmod"
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target object
+ *
+ *  "access" [ IN ] and "mask" [ IN ] - definition of change
+ *  where "access" contains new bit values and "mask defines
+ *  which bits should be changed.
+ *
+ *  "recurse" [ IN ] - if non zero and "path" is a directory,
+ *  apply changes recursively.
+ */
+static rc_t CC KQuickMountDirSetAccess (KQuickMountDir *self,
+			      bool recurse,
+			      uint32_t access,
+			      uint32_t mask,
+			      const char *path,
+			      va_list args)
+{
+    assert (self != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcDirectory, rcUpdating, rcSelf, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirCreateAlias
+ *  creates a path alias according to create mode
+ *
+ *  "targ" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target object
+ *
+ *  "alias" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target alias
+ *
+ *  "access" [ IN ] - standard Unix directory access mode
+ *  used when "mode" has kcmParents set and alias path does
+ *  not exist.
+ *
+ *  "mode" [ IN ] - a creation mode (see explanation above).
+ */
+static
+rc_t CC KQuickMountDirCreateAlias (KQuickMountDir *self,
+			 uint32_t access,
+			 KCreateMode mode,
+			 const char *targ,
+			 const char *alias)
+{
+    assert (self != NULL);
+    assert (targ != NULL);
+    assert (alias != NULL);
+
+    return RC (rcFS, rcDirectory, rcCreating, rcSelf, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirOpenFileRead
+ *  opens an existing file with read-only access
+ *
+ *  "f" [ OUT ] - return parameter for newly opened file
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target file
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ */
+static
+rc_t CC KQuickMountDirOpenFileRead	(const KQuickMountDir *self,
+					 const KFile **f,
+					 const char *path,
+					 va_list args)
+{
+    return RC (rcFS, rcDirectory, rcOpening, rcSelf, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirOpenFileWrite
+ *  opens an existing file with write access
+ *
+ *  "f" [ OUT ] - return parameter for newly opened file
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target file
+ *
+ *  "update" [ IN ] - if non-zero, open in read/write mode
+ *  otherwise, open in write-only mode
+ */
+static
+rc_t CC KQuickMountDirOpenFileWrite	(KQuickMountDir *self,
+					 KFile **f,
+					 bool update,
+					 const char *path,
+					 va_list args)
+{
+    assert (self != NULL);
+    assert (f != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcDirectory, rcCreating, rcSelf, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirCreateFile
+ *  opens a file with write access
+ *
+ *  "f" [ OUT ] - return parameter for newly opened file
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target file
+ *
+ *  "access" [ IN ] - standard Unix access mode, e.g. 0664
+ *
+ *  "update" [ IN ] - if non-zero, open in read/write mode
+ *  otherwise, open in write-only mode
+ *
+ *  "mode" [ IN ] - a creation mode (see explanation above).
+ */
+static
+rc_t CC KQuickMountDirCreateFile	(KQuickMountDir *self,
+					 KFile **f,
+					 bool update,
+					 uint32_t access,
+					 KCreateMode cmode,
+					 const char *path,
+					 va_list args)
+{
+    assert (self != NULL);
+    assert (f != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcDirectory, rcCreating, rcSelf, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirFileSize
+ *  returns size in bytes of target file
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target file
+ *
+ *  "size" [ OUT ] - return parameter for file size
+ * NOTE: Does not meet a design target of on stack (localized variable) allocation of single 4kb path
+ */
+static
+rc_t CC KQuickMountDirFileSize		(const KQuickMountDir *self,
+					 uint64_t *size,
+					 const char *path,
+					 va_list args)
+{
+    return RC (rcFS, rcDirectory, rcCreating, rcSelf, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirSetFileSize
+ *  sets size in bytes of target file
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target file
+ *
+ *  "size" [ IN ] - new file size
+ */
+static
+rc_t CC KQuickMountDirSetFileSize	(KQuickMountDir *self,
+					 uint64_t size,
+					 const char *path,
+					 va_list args)
+{
+    assert (self != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcDirectory, rcWriting, rcSelf, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirOpenDirRead
+ *
+ *  opens a sub-directory
+ *
+ * [IN]  const KQuickMountDir *	self	Object Oriented C KQuickMountDir self
+ * [OUT] const KDirectory **	subp	Where to put the new KDirectory/KQuickMountDir
+ * [IN]  bool			chroot	Create a chroot cage for this new subdirectory
+ * [IN]  const char *		path	Path to the directory to open
+ * [IN]  va_list		args	So far the only use of args is possible additions to path
+ */
+static 
+rc_t CC KQuickMountDirOpenDirRead	(const KQuickMountDir *self,
+					 const KDirectory **subp,
+					 bool chroot,
+					 const char *path,
+					 va_list args)
+{
+    return RC (rcFS, rcDirectory, rcOpening, rcSelf, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirOpenDirUpdate
+ *  opens a sub-directory
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target directory
+ *
+ *  "chroot" [ IN ] - if non-zero, the new directory becomes
+ *  chroot'd and will interpret paths beginning with '/'
+ *  relative to itself.
+ */
+static
+rc_t CC KQuickMountDirOpenDirUpdate	(KQuickMountDir *self,
+					 KDirectory ** subp, 
+					 bool chroot, 
+					 const char *path, 
+					 va_list args)
+{
+    assert (self != NULL);
+    assert (subp != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcDirectory, rcUpdating, rcSelf, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirCreateDir
+ *  create a sub-directory
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target directory
+ *
+ *  "access" [ IN ] - standard Unix directory permissions
+ *
+ *  "mode" [ IN ] - a creation mode (see explanation above).
+ */
+static
+rc_t CC KQuickMountDirCreateDir	(KQuickMountDir *self,
+					 uint32_t access,
+					 KCreateMode mode,
+					 const char *path,
+					 va_list args)
+{
+    assert (self != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcDirectory, rcCreating, rcSelf, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KQuickMountDirDestroyFile
+ */
+#if 0
+static
+rc_t CC KQuickMountDirDestroyFile	(KQuickMountDir *self,
+					 KFile * f)
+{
+    assert (self != NULL);
+    assert (f != NULL);
+
+    return RC (rcFS, rcDirectory, rcDestroying, rcSelf, rcUnsupported);
+}
+
+
+static	rc_t CC KQuickMountDirDate (const KQuickMountDir *self,
+					 KTime_t *date,
+					 const char *path,
+					 va_list args)
+{
+    return RC (rcFS, rcDirectory, rcAccessing, rcSelf, rcUnsupported);
+
+}
+
+
+static	rc_t CC KQuickMountDirSetDate		(KQuickMountDir *self,
+					 bool recurse,
+					 KTime_t date,
+					 const char *path,
+					 va_list args)
+{
+    assert (self != NULL);
+    assert (path != NULL);
+
+    return RC (rcFS, rcDirectory, rcUpdating, rcSelf, rcUnsupported);
+}
+#endif
+
+/* ----------------------------------------------------------------------
+ *
+ */
+static KDirectory_vt_v1 vtKQuickMountDir =
+{
+    /* version 1.0 */
+    1, 0,
+
+    /* start minor version 0 methods*/
+    KQuickMountDirDestroy,
+    KQuickMountDirList,
+    KQuickMountDirVisit,
+    KQuickMountDirVisitUpdate,
+    KQuickMountDirPathType,
+    KQuickMountDirResolvePath,
+    KQuickMountDirResolveAlias,
+    KQuickMountDirRename,
+    KQuickMountDirRemove,
+    KQuickMountDirClearDir,
+    KQuickMountDirVAccess,
+    KQuickMountDirSetAccess,
+    KQuickMountDirCreateAlias,
+    KQuickMountDirOpenFileRead,
+    KQuickMountDirOpenFileWrite,
+    KQuickMountDirCreateFile,
+    KQuickMountDirFileSize,
+    KQuickMountDirSetFileSize,
+    KQuickMountDirOpenDirRead,
+    KQuickMountDirOpenDirUpdate,
+    KQuickMountDirCreateDir,
+    NULL,
+    /* end minor version 0 methods*/
+    /* start minor version 1 methods*/
+    NULL,
+    NULL,
+    NULL,
+    /* end minor version 2 methods*/
+    NULL,
+    /* end minor version 2 methods*/
+    /* end minor version 3 methods*/
+    NULL,
+    NULL
+    /* end minor version 3 methods*/
+};
+
+
+static KQuickMountDir * KQuickMountDirAlloc (size_t path_size, size_t mount_size)
+{
+    return calloc (sizeof (KQuickMountDir) + path_size + mount_size + 1, 1);
+}
+
+
+KFS_EXTERN rc_t KQuickMountDirMake (const KDirectory * self, 
+                                    const KDirectory ** pnewdir,
+                                    const KFile * file,
+                                    const char * path, size_t path_size,
+                                    const char * mount, size_t mount_size)
+{
+    KQuickMountDir * newdir;
+    char * pc;
+    rc_t rc;
+    bool endslash;
+    char tbuff [8193];
+
+    endslash = path[path_size-1] == '/';
+
+    if (sizeof tbuff - 1 < mount_size)
+        return RC (rcFS, rcDirectory, rcCreating, rcBuffer, rcInsufficient);
+
+    memcpy (tbuff, mount, mount_size);
+    tbuff[mount_size] = '\0';
+
+    while ((pc = strpbrk (tbuff, "\"\\/")) != NULL)
+        *pc = '_';
+
+    rc = KFileAddRef (file);
+    if (rc == 0)
+    {
+        newdir = KQuickMountDirAlloc (path_size, mount_size);
+        if (newdir == NULL)
+            rc = RC (rcFS, rcDirectory, rcAllocating, rcMemory, rcExhausted);
+        else
+        {
+            newdir->file = file;
+            newdir->mount = newdir->path + path_size;
+            rc = KQuickMountDirMakePath (newdir, rcCreating, true, newdir->path,
+                                         path_size + 1 + mount_size + 1,
+                                         endslash?"%s%s":"%s/%s", path, tbuff);
+            if (rc == 0)
+            {
+                rc = KDirectoryInit (&newdir->dad, (const KDirectory_vt*) &vtKQuickMountDir,
+                                     "KQuickMountDir", path?path:"(null)", false);
+                if (rc == 0)
+                {
+                    newdir->mount = newdir->path + path_size + 1;
+                    newdir->root = 0;
+                    *pnewdir = &newdir->dad;
+                    return 0;
+                }
+/*             rc = RC (rcFS, rcDirectory, rcInitializing, rcObject, rcInvalid); */
+            }
+            KQuickMountDirDestroy (newdir);
+        }
+        KFileRelease (file);
+    }
+    return rc;
+}
+                         
+
+
+/* end of file quickmount.c */
+
diff --git a/libs/kfs/ramfile.c b/libs/kfs/ramfile.c
new file mode 100644
index 0000000..588ec2e
--- /dev/null
+++ b/libs/kfs/ramfile.c
@@ -0,0 +1,415 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <kfs/extern.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <kfs/file.h>
+#include <sysalloc.h>
+#include <kfs/ramfile.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* ======================================================================
+ * KRamFile
+ */
+
+/* -----
+ * define the specific types to be used in the templatish/inheritancish
+ * definition of vtables and their elements
+ */
+#define KFILE_IMPL struct KRamFile
+#include <kfs/impl.h>
+
+/*-----------------------------------------------------------------------
+ * KRamFile
+ *  A KFile that puts reads and writes into a buffer. The buffer is passed
+ *  in so the creator will know where the buffer is.
+ */
+struct KRamFile
+{
+    KFile	dad;
+
+    uint64_t pos;
+    uint64_t max_pos;
+    size_t   bsize;
+    size_t   max;
+    char *   buffer;
+};
+
+/* ----------------------------------------------------------------------
+ * Destroy
+ *
+ */
+static
+rc_t CC KRamFileDestroy (KRamFile *self)
+{
+    free (self);
+    return 0;
+}
+
+/* ----------------------------------------------------------------------
+ * GetSysFile
+ *  returns an underlying system file object
+ *  and starting offset to contiguous region
+ *  suitable for memory mapping, or RAM if
+ *  no such file is available.
+ *
+ * We cant allow memory mapping a tee file as the read?writes ar needed
+ * to trigger the writes to the copy KFile
+ */
+
+static
+struct KSysFile *CC KRamFileGetSysFile (const KRamFile *self, uint64_t *offset)
+{
+    /* parameters must be non-RAM */
+    assert (self != NULL);
+    assert (offset != NULL);
+
+    return NULL;
+}
+
+/* ----------------------------------------------------------------------
+ * RandomAccess
+ *
+ *  returns 0 if random access, error code otherwise
+ *
+ * Update needs to be able to seek both original and copy while read
+ * only needs to be able to seek the original.
+ */
+static
+rc_t CC KRamFileRandomAccess (const KRamFile *self)
+{
+    assert (self != NULL);
+    return 0;
+}
+
+/* ----------------------------------------------------------------------
+ * Type
+ *  returns a KFileDesc
+ *  not intended to be a content type,
+ *  but rather an implementation class
+ */
+static
+uint32_t CC KRamFileType (const KRamFile *self)
+{
+    return kfdNull;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Size
+ *  returns size in bytes of file
+ *
+ *  "size" [ OUT ] - return parameter for file size
+ */
+static
+rc_t CC KRamFileSize (const KRamFile *self, uint64_t *size)
+{
+    assert (self != NULL);
+    assert (size != NULL);
+
+/*     return RC ( rcFS, rcFile, rcAccessing, rcFunction, rcUnsupported ); */
+    *size = self->max_pos;
+    return 0;
+}
+
+/* ----------------------------------------------------------------------
+ * SetSize
+ *  sets size in bytes of file
+ *
+ *  "size" [ IN ] - new file size
+ */
+static
+rc_t CC KRamFileSetSize (KRamFile *self, uint64_t size)
+{
+/*     return RC (rcFS, rcFile, rcUpdating, rcSelf, rcUnsupported); */
+    self->max_pos = size;
+    return 0;
+}
+
+/* ----------------------------------------------------------------------
+ * Read
+ *  read file from known position
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ *  "num_read" [ OUT, RAM OKAY ] - optional return parameter
+ *  giving number of bytes actually read
+ *
+ * NOTE: Can not seek;
+ *
+ */
+static
+rc_t CC KRamFileRead	(const KRamFile *self,
+			 uint64_t pos,
+			 void *buffer,
+			 size_t bsize,
+			 size_t *num_read)
+{
+    assert (self);
+    assert (buffer);
+    assert (num_read);
+    /* no restrictions on pos or bsize */
+
+    if (pos >= self->max_pos)
+    {
+        *num_read = 0;
+        return 0;
+    }
+    else if (pos + bsize > self->max_pos)
+        bsize = self->max_pos - pos;
+
+    /* if we are trying to read outside the current window */
+    else if (self->pos > pos)
+    {
+        /* get some zeros */
+        size_t left_zeroes;
+
+        left_zeroes = self->pos - pos;
+
+        if (left_zeroes >= bsize)
+            left_zeroes = bsize;
+
+        memset (buffer, 0, bsize);
+    }
+    else if (self->pos + self->bsize < pos)
+        memset (buffer, 0, bsize);
+
+    /* so we are inside the current window */
+    else
+    {
+        /* are we trying to go past the window? */
+        if (pos + bsize > self->pos + self->bsize)
+            bsize = (self->pos + self->bsize) - pos;
+
+        memcpy (buffer, self->buffer + (pos - self->pos), bsize);
+    }
+    *num_read = bsize;
+    return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Write
+ *  write file at known position
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ *  "num_writ" [ OUT, RAM OKAY ] - optional return parameter
+ *  giving number of bytes actually written
+ *
+ * Always accepts writes and can seek.
+ */
+static
+rc_t CC KRamFileWrite (KRamFile *self, uint64_t pos,
+		       const void *buffer, size_t bsize,
+		       size_t *num_writ)
+{
+    char * to;
+
+    /* can't really fail */
+
+    assert (self);
+    assert (buffer);
+    assert (num_writ);
+
+    /* does the write fill the buffer? */
+    if (bsize >= self->max)
+    {
+        /* we can never allow a write larger than the internal buffer */
+        self->pos = pos;
+        self->bsize = bsize = self->max;
+        to = self->buffer;
+        if (self->max_pos < pos + bsize)
+            self->max_pos = pos + bsize;
+    }
+
+    /* else are we seeking forward or backward to completely new or completely
+     * over writing what is there */
+    else if ((self->bsize == 0) ||                     /* currently no buffer */
+             (pos >= (self->pos + self->max)) || /* past current */
+             (pos + self->max <= self->pos) ||   /* behind current */
+             ((pos <= self->pos) && (pos + bsize >= self->pos + self->bsize)))
+    {
+        /* reset the buffer parameters */
+        self->pos = pos;
+        self->bsize = bsize;
+        if (self->max_pos < pos + bsize)
+            self->max_pos = pos + bsize;
+
+        to = self->buffer;
+        /* clear any unused portion of the buffer */
+        if (self->max > bsize)
+            memset (self->buffer + bsize, 0, self->max - bsize);
+    }
+    else if (pos >= self->pos) 
+    {
+        /* if we are reading something at or after what we have now
+         * where the right edge was doesn't matter since we zero fill
+         * in the previous condition and at construction */
+        /* how far into the buffer will we start */
+        size_t poff = pos - self->pos;
+
+        /* do we have to slide the window? This is not optimized */
+        if ((poff != 0) && (poff + bsize > self->max))
+        {
+            size_t m = poff + bsize - self->max;
+            if (self->bsize < self->max)
+                memset (self->buffer + bsize, 0, self->max = self->bsize);
+            /* must use memmove not memcpy */
+            memmove (self->buffer, self->buffer + poff, self->max - pos);
+
+            poff -= m;
+            self->pos -= m;
+        }
+
+        /* check for a new self->bsize */
+        if (poff + bsize > self->bsize)
+            self->bsize = poff + bsize;
+
+        /* check for a new max position */
+        if (self->max_pos < self->pos + self->bsize)
+            self->max_pos = self->pos + self->bsize;
+
+        to = self->buffer + poff;
+    }
+    else
+    {
+        size_t poff = self->pos - pos;
+
+        /* non optimized slide */
+        memmove (self->buffer + poff, self->buffer, self->max - poff);
+        self->pos = pos;
+        self->bsize += poff;
+        if (self->bsize > self->max)
+            self->bsize = self->max;
+        to = self->buffer;
+    }
+    memcpy (to, buffer, bsize);
+    *num_writ = bsize;
+
+    return 0;
+}
+
+
+static const KFile_vt_v1 vtKRamFile =
+{
+    /* version */
+    1, 1,
+
+    /* 1.0 */
+    KRamFileDestroy,
+    KRamFileGetSysFile,
+    KRamFileRandomAccess,
+    KRamFileSize,
+    KRamFileSetSize,
+    KRamFileRead,
+    KRamFileWrite,
+
+    /* 1.1 */
+    KRamFileType
+};
+
+/* ----------------------------------------------------------------------
+ * KRamFileMake
+ *  create a new file object
+ */
+static
+rc_t KRamFileMake (KRamFile ** pself, char * buffer, size_t buffer_size, bool r, bool w)
+{
+    rc_t	rc;
+    KRamFile *	self;
+
+    /* -----
+     */
+    if (pself == NULL)
+        return RC (rcFS, rcFile, rcConstructing, rcSelf, rcNull);
+
+    if (buffer == NULL)
+        return RC (rcFS, rcFile, rcConstructing, rcParam, rcNull);
+
+    /* we only deny size 0 buffer just to avoid the too weird corner cases */
+    if (buffer_size == 0)
+        return RC (rcFS, rcFile, rcConstructing, rcParam, rcTooShort);
+
+    if (((r != true) && (r != false)) || ((w != true) && (w != false)))
+        return RC (rcFS, rcFile, rcConstructing, rcParam, rcInvalid);
+
+    /* -----
+     * get space for the object
+     */
+    self = malloc (sizeof (*self));
+    if (self == NULL)	/* allocation failed */
+    {
+	/* fail */
+	rc = RC (rcFS, rcFile, rcConstructing, rcMemory, rcExhausted);
+    }
+    else
+    {
+	rc = KFileInit (&self->dad,			/* initialize base class */
+			(const KFile_vt*)&vtKRamFile, 	/* VTable for KRamFile */
+            "KRamFile", "ram",
+                        r,w);
+	if (rc == 0)
+	{
+            self->pos = self->max_pos = 0;
+            self->max = buffer_size;
+            self->bsize = 0;
+            self->buffer = buffer;
+	    *pself = self;
+	    return 0;
+	}
+	/* fail */
+	free (self);
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC KRamFileMakeRead (const KFile ** self,char * buffer, size_t buffer_size)
+{
+    return KRamFileMake ((KRamFile **)self, buffer, buffer_size, true, false);
+}
+
+LIB_EXPORT rc_t CC KRamFileMakeWrite (KFile ** self, char * buffer, size_t buffer_size)
+{
+    return KRamFileMake ((KRamFile **)self, buffer, buffer_size, false, true);
+}
+
+LIB_EXPORT rc_t CC KRamFileMakeUpdate (KFile ** self, char * buffer, size_t buffer_size)
+{
+    return KRamFileMake ((KRamFile **)self, buffer, buffer_size, true, true);
+}
+
+
+/* end of file ramfile.c */
+
diff --git a/libs/kfs/readheadfile.c b/libs/kfs/readheadfile.c
new file mode 100644
index 0000000..59ab0a5
--- /dev/null
+++ b/libs/kfs/readheadfile.c
@@ -0,0 +1,294 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <kfs/extern.h>
+#include <klib/log.h>
+#include <klib/debug.h>
+#include <klib/rc.h>
+#include <kfs/file.h>
+#include <kfs/readheadfile.h>
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+/* ======================================================================
+ * KReadHeadFile
+ */
+
+/* -----
+ * define the specific types to be used in the templatish/inheritancish
+ * definition of vtables and their elements
+ */
+struct KReadHeadFile;
+#define KFILE_IMPL struct KReadHeadFile
+#include <kfs/impl.h>
+
+
+/*-----------------------------------------------------------------------
+ * KReadHeadFile
+ */
+typedef struct KReadHeadFile
+{
+    KFile	  dad;
+    uint64_t	  max_position;
+    const KFile * original;
+    size_t        buffer_size;
+    uint8_t       buffer [1];
+} KReadHeadFile;
+
+/* ----------------------------------------------------------------------
+ * Destroy
+ *
+ */
+static
+rc_t CC KReadHeadFileDestroy (KReadHeadFile *self)
+{
+    rc_t rc;
+
+    rc = KFileRelease (self->original);
+
+    free (self);
+    return rc;
+}
+
+/* ----------------------------------------------------------------------
+ * GetSysFile
+ *  returns an underlying system file object
+ *  and starting offset to contiguous region
+ *  suitable for memory mapping, or NULL if
+ *  no such file is available.
+ *
+ * bytes could not be counted if memory mapped so this is disallowed
+ */
+
+static
+struct KSysFile *CC KReadHeadFileGetSysFile (const KReadHeadFile *self, uint64_t *offset)
+{
+    /* parameters must be non-NULL */
+    assert (self != NULL);
+    assert (offset != NULL);
+
+    return KFileGetSysFile (self->original, offset);
+}
+
+/* ----------------------------------------------------------------------
+ * RandomAccess
+ *
+ *  returns 0 if random access, error code otherwise
+ */
+static
+rc_t CC KReadHeadFileRandomAccess (const KReadHeadFile *self)
+{
+    return KFileRandomAccess (self->original);
+}
+
+/* ----------------------------------------------------------------------
+ * Type
+ *  returns a KFileDesc
+ *  not intended to be a content type,
+ *  but rather an implementation class
+ */
+static
+uint32_t CC KReadHeadFileType (const KReadHeadFile *self)
+{
+    return KFileType (self->original);
+}
+
+/* ----------------------------------------------------------------------
+ * Size
+ *  returns size in bytes of file
+ *
+ *  "size" [ OUT ] - return parameter for file size
+ */
+static
+rc_t CC KReadHeadFileSize (const KReadHeadFile *self, uint64_t *size)
+{
+    return KFileSize (self->original, size);
+}
+
+/* ----------------------------------------------------------------------
+ * SetSize
+ *  sets size in bytes of file
+ *
+ *  "size" [ IN ] - new file size
+ */
+static
+rc_t CC KReadHeadFileSetSize (KReadHeadFile *self, uint64_t size)
+{
+    return RC (rcFS, rcFile, rcUpdating, rcFunction, rcUnsupported);
+}
+
+/* ----------------------------------------------------------------------
+ * Read
+ *  read file from known position
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ *  "num_read" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually read
+ */
+static
+rc_t CC KReadHeadFileRead	(const KReadHeadFile *cself,
+				 uint64_t pos,
+				 void *buffer,
+				 size_t bsize,
+				 size_t *num_read)
+{
+    rc_t rc;
+    size_t valid = 0;
+    size_t this_read;
+    KReadHeadFile *self = (KReadHeadFile *)cself;
+    *num_read = 0;
+
+    /* are we re-reading? */
+    if (pos < self->max_position)
+    {
+        size_t valid = self->max_position - pos;
+
+        if (bsize <= valid)
+        {
+            memmove (buffer, self->buffer + pos, bsize);
+            return 0;
+        }
+
+        memmove (buffer, self->buffer + pos, valid);
+    }
+    rc = KFileRead (self->original, pos + valid, (char *)buffer + valid,
+                    bsize - valid, &this_read);
+
+    *num_read = (rc) ? 0 : valid + this_read;
+    return rc;
+}
+
+/* ----------------------------------------------------------------------
+ * Write
+ *  write file at known position
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ *  "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually written
+ *
+ * Unsupported as we now treat archives as READ ONLY
+ */
+static
+rc_t CC KReadHeadFileWrite (KReadHeadFile *self, uint64_t pos,
+			   const void *buffer, size_t bsize,
+			   size_t *num_writ)
+{
+    assert ( self != NULL );
+    return RC (rcFS, rcFile, rcWriting, rcFunction, rcUnsupported);
+}
+
+static const KFile_vt_v1 vtKReadHeadFile =
+{
+    /* version */
+    1, 1,
+
+    /* 1.0 */
+    KReadHeadFileDestroy,
+    KReadHeadFileGetSysFile,
+    KReadHeadFileRandomAccess,
+    KReadHeadFileSize,
+    KReadHeadFileSetSize,
+    KReadHeadFileRead,
+    KReadHeadFileWrite,
+
+    /* 1.1 */
+    KReadHeadFileType
+};
+
+
+
+/* ----------------------------------------------------------------------
+ * KReadHeadFileMake
+ *  create a new file object
+ */
+
+LIB_EXPORT rc_t CC KFileMakeReadHead (const KFile ** pself,
+                                      const KFile * original,
+                                      size_t buffer_size)
+{
+    rc_t rc;
+
+    if (pself == NULL)
+        return RC (rcFS, rcFile, rcConstructing, rcSelf, rcNull);
+
+    *pself = NULL;
+
+    if (original == NULL)
+        return RC (rcFS, rcFile, rcConstructing, rcParam, rcNull);
+
+    rc = KFileAddRef (original);
+    if (rc)
+        return rc;
+
+    rc = KFileRandomAccess (original);
+
+    /* buffering not needed as existing file is random access */
+    if (rc == 0)
+    {
+        *pself = original;
+        return 0;
+    }
+
+    /* some other failure we'll have to bail on */
+    else if (GetRCState(rc) != rcUnsupported)
+        return rc;
+
+    else
+    {
+        KReadHeadFile * self;
+
+        self = malloc (sizeof (*self) + buffer_size); /* really too much but too hard to tune down accurately */
+        if (self == NULL)
+            return RC (rcFS, rcFile, rcConstructing, rcMemory, rcExhausted);
+
+	rc = KFileInit (&self->dad,			/* initialize base class */
+			(const KFile_vt*)&vtKReadHeadFile,/* VTable for KReadHeadFile */
+            "KReadHeadFile", "no-name",
+			original->read_enabled,
+			false);
+	if (rc == 0)
+	{
+            self->max_position = 0;
+            self->original = original;
+            self->buffer_size = buffer_size;
+            *pself = &self->dad;
+            return 0;
+	}
+	/* fail */
+	free (self);
+    }
+    return rc;
+}
+
+/* end of file countfile.c */
+
diff --git a/libs/kfs/report.c b/libs/kfs/report.c
new file mode 100644
index 0000000..94c6600
--- /dev/null
+++ b/libs/kfs/report.c
@@ -0,0 +1,169 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kfs/extern.h>
+
+#include <klib/klib-priv.h>
+#include <klib/out.h> /* KOutHandlerSet */
+#include <klib/rc.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h> /* KFileWrite */
+
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h> /* calloc */
+#include <string.h> /* memset */
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+/*
+ * An unrecoverable error happened.
+ * We can help to solve it
+ * by reporting information about known application execution environment.
+ */
+
+#define report ( * f -> report )
+#define reportData ( * f -> reportData )
+#define reportData1 ( * f -> reportData1 )
+#define reportOpen ( * f -> reportOpen )
+#define reportOpen1 ( * f -> reportOpen1 )
+#define reportClose ( * f -> reportClose )
+#define reportClose1 ( * f -> reportClose1 )
+#define reportError ( * f -> reportError )
+#define reportErrorStr ( * f -> reportErrorStr )
+#define reportErrorStrImpl ( * f -> reportErrorStrImpl )
+#define reportErrorStrInt ( * f -> reportErrorStrInt )
+#define reportError3Str ( * f -> reportError3Str )
+
+#define MAGIC 0x6521
+
+typedef struct SFile {
+    uint64_t magic;
+    KFile* f;
+    uint64_t pos;
+} SFile;
+
+static rc_t CC fileWriter
+(void* data, const char* buffer, size_t bytes, size_t* num_writ)
+{
+    rc_t rc = 0;
+
+    SFile* self = (SFile*)data;
+    size_t dummy;
+    if (num_writ == NULL)
+    {   num_writ = &dummy; }
+    *num_writ = 0;
+
+    assert(self);
+    if (self->magic != MAGIC) {
+        return rc;
+    }
+
+    rc = KFileWrite(self->f, self->pos, buffer, bytes, num_writ);
+    self->pos += *num_writ;
+
+    return rc;
+}
+
+rc_t CC ReportRedirect
+( KWrtHandler* handler, const char* filename, bool* to_file, bool finalize )
+{
+    rc_t rc = 0;
+    if (!finalize) {
+        if (handler) {
+            handler->writer = KOutWriterGet();
+            handler->data = KOutDataGet();
+        }
+        if (filename) {
+            KDirectory* dir = NULL;
+            SFile* data = calloc(1, sizeof *data);
+            if (data == NULL) {
+                return RC(rcFS, rcMemory, rcAllocating, rcMemory, rcExhausted);
+            }
+            data->magic = MAGIC;
+            rc = KDirectoryNativeDir(&dir);
+            if (rc == 0) {
+                rc = KDirectoryCreateFile
+                    (dir, &data->f, false, 0664, kcmInit, filename);
+            }
+            if (rc == 0) {
+                rc = KOutHandlerSet(fileWriter, data);
+            }
+            RELEASE(KDirectory, dir);
+        }
+        if (rc != 0 || filename == NULL) {
+            KOutHandlerSetStdErr();
+            if (to_file)
+            {   *to_file = false; }
+        }
+        else if (to_file)
+        {   *to_file = true; }
+
+    }
+    else {
+        void* data = KOutDataGet();
+        SFile* self = (SFile*)data;
+        if (self) {
+            if (self->magic == MAGIC) {
+                RELEASE(KFile, self->f);;
+            }
+            memset(self, 0, sizeof *self);
+            free(self);
+        }
+        if (handler) {
+            KOutHandlerSet(handler->writer, handler->data);
+        }
+    }
+    return rc;
+}
+
+rc_t CC ReportCWD ( const ReportFuncs *f, uint32_t indent )
+{
+    KDirectory *wd;
+    rc_t rc = KDirectoryNativeDir ( & wd );
+    if ( rc != 0 )
+        reportError(indent, rc, "KDirectoryNativeDir");
+    else
+    {
+        char cwd [ PATH_MAX + 1 ];
+        rc = KDirectoryResolvePath ( wd, true, cwd, sizeof cwd, "." );
+        KDirectoryRelease ( wd );
+
+        if ( rc != 0 )
+            reportError(indent, rc, "KDirectoryResolvePath");
+        else
+            reportData(indent, "Cwd", cwd, 0);
+    }
+
+    return rc;
+}
diff --git a/libs/kfs/sra.c b/libs/kfs/sra.c
index 793111c..bb7fb09 100644
--- a/libs/kfs/sra.c
+++ b/libs/kfs/sra.c
@@ -78,7 +78,7 @@ static void	SraHeaderInit (KSraHeader * self, size_t treesize, KSRAFileAlignment
     self->u.v1.file_offset = add_filler (sizeof * self + treesize, alignment);
 }
 
-LIB_EXPORT rc_t CC SraHeaderMake (KSraHeader ** pself, size_t treesize, KSRAFileAlignment alignment)
+rc_t SraHeaderMake (KSraHeader ** pself, size_t treesize, KSRAFileAlignment alignment)
 {
     KSraHeader * self = malloc (sizeof (KSraHeader));
     if (self == NULL)
@@ -89,7 +89,7 @@ LIB_EXPORT rc_t CC SraHeaderMake (KSraHeader ** pself, size_t treesize, KSRAFile
 }
 
 
-LIB_EXPORT rc_t CC SraHeaderValidate ( const KSraHeader * self, bool * reverse, uint32_t * _version )
+static rc_t  SraHeaderValidate ( const KSraHeader * self, bool * reverse, uint32_t * _version, size_t bytes_available )
 {
     uint64_t offset;
     rc_t rc;
@@ -100,11 +100,17 @@ LIB_EXPORT rc_t CC SraHeaderValidate ( const KSraHeader * self, bool * reverse,
 	*reverse = false;
     if (_version != NULL)
 	*_version = 0;
+
+    if (bytes_available < 8)
+        return RC (rcFS, rcArc, rcParsing, rcHeader, rcInsufficient);
+
     if (memcmp ((void*)self, &ksraheader_v1,
 		sizeof (ksraheader_v1.ncbi) + sizeof (ksraheader_v1.sra)) != 0)
-    {
 	return RC (rcFS, rcArc, rcParsing, rcHeader, rcInvalid);
-    }
+
+    if (bytes_available < 12)
+        return 0;
+
     switch (self->byte_order)
     {
     default:
@@ -118,6 +124,9 @@ LIB_EXPORT rc_t CC SraHeaderValidate ( const KSraHeader * self, bool * reverse,
     }
     rc = 0;
 
+    if (bytes_available < 16)
+        return 0;
+
     version = rev ? bswap_32 (self->version) : self->version;
     offset = rev ? bswap_64 (self->u.v1.file_offset) : self->u.v1.file_offset;
 
@@ -138,6 +147,8 @@ LIB_EXPORT rc_t CC SraHeaderValidate ( const KSraHeader * self, bool * reverse,
 
 LIB_EXPORT uint64_t CC SraHeaderGetFileOffset ( const KSraHeader * self )
 {
+    if ( self -> byte_order == eSraByteOrderReverse )
+        return bswap_64 ( self->u.v1.file_offset );
     return self->u.v1.file_offset;
 }
 
@@ -262,7 +273,7 @@ rc_t CC KArcParseSRAInt ( struct KToc * self,
     }
 
     /* version is ignored at this point as there is only one version */
-    rc = SraHeaderValidate ( &header, &reverse, &version );
+    rc = SraHeaderValidate ( &header, &reverse, &version, sizeof header );
     if ( rc != 0 )
     {
         if ( !silent )
@@ -336,6 +347,14 @@ LIB_EXPORT rc_t CC KArcParseSRAUnbounded ( struct KToc * self,
     return KArcParseSRAInt ( self, kvoid, ignored, ignored_data, true, false );
 }
 
+LIB_EXPORT rc_t CC KArcParseSRAUnbounded_silent ( struct KToc * self,
+                                  const void * kvoid,
+                                  bool (CC*ignored) (const struct KDirectory*,  const char*, void*),
+                                  void *ignored_data )
+{
+    return KArcParseSRAInt ( self, kvoid, ignored, ignored_data, true, false );
+}
+
 
 LIB_EXPORT rc_t CC KDirectoryVOpenSraArchiveRead ( struct KDirectory const *self,
     struct KDirectory const **sra_dir, int chroot, const char *path, va_list args )
@@ -366,17 +385,6 @@ LIB_EXPORT rc_t CC KDirectoryOpenSraArchiveRead ( struct KDirectory const *self,
 }
 
 
-/* instead of including... source is in arc.c */
-LIB_EXPORT rc_t CC KDirectoryOpenArcDirRead_silent( const KDirectory * self,
-    const KDirectory ** pdir,
-    bool chroot,
-    const char * path,
-    KArcFSType baseType,
-    rc_t ( CC * parse )( KToc *, const void *,
-        bool( CC * )( const KDirectory *, const char *, void * ), void * ),
-    bool ( CC * filter )( const KDirectory*, const char *, void *),
-    void * filterparam );
-
 LIB_EXPORT rc_t CC KDirectoryVOpenSraArchiveRead_silent ( struct KDirectory const *self,
     struct KDirectory const **sra_dir, int chroot, const char *path, va_list args )
 {
@@ -406,6 +414,35 @@ LIB_EXPORT rc_t CC KDirectoryOpenSraArchiveRead_silent ( struct KDirectory const
 }
 
 
+LIB_EXPORT rc_t CC KDirectoryVOpenSraArchiveReadUnbounded_silent_preopened ( struct KDirectory const *self,
+    struct KDirectory const **sra_dir, int chroot, const struct KFile * f, const char *path, va_list args )
+{
+    /* respond properly to va_list */
+    char full [ 4096 ];
+    int len = vsnprintf ( full, sizeof full, path, args );
+    if ( len < 0 || len >= sizeof full )
+        return RC ( rcFS, rcDirectory, rcOpening, rcPath, rcExcessive );
+
+    /* putting off parameter validation into this call */
+    return KDirectoryOpenArcDirRead_silent_preopened ( self, sra_dir, false, full, tocKFile,
+        ( void* ) f, KArcParseSRAUnbounded_silent, NULL, NULL );
+}
+
+
+LIB_EXPORT rc_t CC KDirectoryOpenSraArchiveReadUnbounded_silent_preopened ( struct KDirectory const *self,
+    struct KDirectory const **sra_dir, int chroot, const struct KFile * f, const char *path, ... )
+{
+    rc_t rc;
+    va_list args;
+
+    va_start ( args, path );
+    rc = KDirectoryVOpenSraArchiveReadUnbounded_silent_preopened ( self, sra_dir, chroot, f, path, args );
+    va_end ( args );
+
+    return rc;
+}
+
+
 LIB_EXPORT rc_t CC KDirectoryVOpenSraArchiveReadUnbounded ( struct KDirectory const *self,
     struct KDirectory const **sra_dir, int chroot, const char *path, va_list args )
 {
@@ -435,4 +472,14 @@ LIB_EXPORT rc_t CC KDirectoryOpenSraArchiveReadUnbounded ( struct KDirectory con
 }
 
 
+LIB_EXPORT rc_t CC KFileIsSRA (const char * b, size_t z)
+{
+    const KSraHeader * h = (const KSraHeader *)b;
+
+    if (SraHeaderValidate (h, NULL, NULL, z) == 0)
+        return 0;
+    
+    return RC (rcFS, rcFile, rcIdentifying, rcBuffer, rcWrongType);
+}
+
 /* end of file */
diff --git a/libs/kfs/subfile.c b/libs/kfs/subfile.c
index 969e430..4a3525d 100644
--- a/libs/kfs/subfile.c
+++ b/libs/kfs/subfile.c
@@ -129,6 +129,7 @@ rc_t KSubFileMake (KSubFile ** self,
     {
         rc = KFileInit (&pF->dad,			/* initialize base class */
             (const KFile_vt*)&vtKSubFile, 	/* VTable for KSubFile */
+            "KSubFile", "no-name",
                         read_enabled,		/* read allowed */
                         write_enabled);		/* write disallowed */
 	if (rc == 0)
@@ -315,22 +316,21 @@ rc_t CC KSubFileWrite (KSubFile *self, uint64_t pos,
 		       const void *buffer, size_t bsize,
 		       size_t *num_writ)
 {
-    rc_t	rc;
+    size_t to_write;
 
     assert (self != NULL);
     assert (buffer != NULL);
     assert (num_writ != NULL);
 
     *num_writ = 0;
-    if (pos > self->size)
-    {
-	return 0;
-    }
+    if (pos >= ( uint64_t ) self->size)
+        return 0;
+
+    to_write = bsize;
     if ((pos + bsize) > self->size)
-	rc = RC (rcFS, rcFile, rcWriting, rcOffset, rcTooBig);
-    else
-	rc = KFileWrite (self->original, self->start + pos, buffer, bsize, num_writ);
-    return rc;
+        to_write = ( uint64_t ) self -> size - pos;
+
+    return KFileWrite (self->original, self->start + pos, buffer, to_write, num_writ);
 }
 
 /* end of file subfile.c */
diff --git a/libs/kfs/tar.c b/libs/kfs/tar.c
index e1307f9..a13da1e 100644
--- a/libs/kfs/tar.c
+++ b/libs/kfs/tar.c
@@ -67,9 +67,8 @@
  * Hide any definition of sun that might have come from sun compilers
  * or the like
  */
-#ifdef sun
 #undef sun
-#endif
+#undef SUN
 
 
 #define PASTE_2(a,b)   a##b
@@ -1024,7 +1023,7 @@ static tar_header_type	what_header_type(const tar_header* header)
 	 */
 	char temp_str	[9];
 	memset(temp_str,0,sizeof(temp_str));
-	strncpy(temp_str,header->posix.magic,8);
+	string_copy(temp_str, sizeof(temp_str), header->posix.magic, 8);
         TAR_DEBUG(("%s: unknown header type magic [%s]\n",
                    __func__, temp_str));
 	type = TAR_UNDEFINED;
@@ -1397,13 +1396,14 @@ static rc_t  pax_xhdr_set_general_string (char ** str, const char * val)
     }
     else
     {
-	len = strlen (val) + 1;
+        size_t size;
+        len = string_measure(val, &size) + 1;
     }
     *str = malloc (len);
     if (*str)
     {
-	strncpy (*str, val, len-1);
-	(*str)[len-1] = '\0'; /* if it was a '\n' terminated value this is needed not worth the check if needed */
+        string_copy(*str, len, val, len-1);
+        (*str)[len-1] = '\0'; /* if it was a '\n' terminated value this is needed not worth the check if needed */
     }
     else
     {
@@ -1446,11 +1446,12 @@ LIB_EXPORT rc_t CC pax_xhdr_set_gname(pax_xheader * self, char * new_name)
 
 LIB_EXPORT bool CC pax_xhdr_get_general_string (char**src, char**dst, size_t max)
 {
-    if (strlen(*src) > max-1)	/* fail if too big for target */
+    size_t size;
+    if (string_measure(*src, &size) > max-1)	/* fail if too big for target */
     {
-	return false;
+        return false;
     }
-    strcpy(*dst,*src);
+    string_copy(*dst, max, *src, size);
     return true;
 }
 
@@ -1629,7 +1630,7 @@ rc_t release_map (KTarState * self)
  * have to be made to support all manner of extensions.
  */
 static
-uint64_t process_one_entry (KTarState * self, uint64_t offset, uint64_t hard_limit)
+uint64_t process_one_entry (KTarState * self, uint64_t offset, uint64_t hard_limit, bool silent)
 {
     /* -----
      * full_path will store the full path of an element which can be longer than 
@@ -1836,10 +1837,11 @@ uint64_t process_one_entry (KTarState * self, uint64_t offset, uint64_t hard_lim
 /* 	    break; */
 
 	default:
-	    PLOGMSG (klogErr,(klogErr,
-		      "unsupported header type $(type) $(string)",
-		      "type=%d,string=%s",
-		      type, get_type_string(type)));
+            if ( ! silent )
+                PLOGMSG (klogErr,(klogErr,
+                                  "unsupported header type $(type) $(string)",
+                                  "type=%d,string=%s",
+                                  type, get_type_string(type)));
 	    done = true;
 	    break;
 
@@ -1885,7 +1887,7 @@ uint64_t process_one_entry (KTarState * self, uint64_t offset, uint64_t hard_lim
 	 */
 	if (full_path[0] == 0) /* if full_path wasn't filled in by an 'L' long name */
 	{
-            size_t len;
+            size_t len, size;
 	    /* -----
 	     * if there is a prefix (POSIX style) use it
 	     * copy the prefix and then concatenate the name field
@@ -1899,12 +1901,12 @@ uint64_t process_one_entry (KTarState * self, uint64_t offset, uint64_t hard_lim
 		/* -----
 		 * copy in the prefix, force a NUL just in case. then add a directory divider 
 		 */
-		strncpy(full_path,current_header.h->posix.prefix,TAR_PREFIX_LEN);
+            string_copy(full_path, sizeof(full_path), current_header.h->posix.prefix, TAR_PREFIX_LEN);
 		full_path[TAR_PREFIX_LEN] = 0x00;
 		strcat(full_path,"/");
 	    }
 	    strncat(full_path,current_header.h->tar.name,TAR_NAME_LEN);
-            len = strlen (full_path);
+            len = string_measure(full_path, &size);
             while (len > 1)
             {
                 if (full_path[len-1] == '/')
@@ -1977,10 +1979,13 @@ uint64_t process_one_entry (KTarState * self, uint64_t offset, uint64_t hard_lim
 	     * If the type is file but the last character in the path is "/"
 	     * treat it as a directory instead
 	     */
-	    if (full_path[strlen(full_path)-1] == '/')
-	    {
-		link = LINK_DIRECTORY;
-	    }
+        {
+            size_t size;
+            if (full_path[string_measure(full_path, &size)-1] == '/')
+            {
+                link = LINK_DIRECTORY;
+            }
+        }
 	    /* fall through */
 	case LINK_NORMAL_FILE:
 	case LINK_CONTIGUOUS_FILE:
@@ -1995,7 +2000,7 @@ uint64_t process_one_entry (KTarState * self, uint64_t offset, uint64_t hard_lim
 	case LINK_SYMBOLIC_LINK:
 	    if (full_link[0] == 0)
 	    {
-		strncpy(full_link,current_header.h->tar.linkname,TAR_NAME_LEN);
+            string_copy(full_link, sizeof(full_link), current_header.h->tar.linkname, TAR_NAME_LEN);
 	    }
 	    done = true;
 	    break;
@@ -2072,7 +2077,7 @@ uint64_t process_one_entry (KTarState * self, uint64_t offset, uint64_t hard_lim
 	    if ( (uint64_t)( offset + sizeof( tar_header ) + data_size ) > hard_limit )
 		return 0;
 
-	    strncpy(full_link, (char*)(current_header.b + sizeof(tar_header)), data_size);
+	    string_copy(full_link, sizeof(full_link), (char*)(current_header.b + sizeof(tar_header)), data_size);
 	    break;
 	case LINK_NEXT_LONG_NAME:	/* long path name */
 	    /* -----
@@ -2084,7 +2089,7 @@ uint64_t process_one_entry (KTarState * self, uint64_t offset, uint64_t hard_lim
 		return 0;
 	    }
 
-	    strncpy(full_path, (char*)(current_header.b + sizeof(tar_header)), data_size);
+	    string_copy(full_path, sizeof(full_path), (char*)(current_header.b + sizeof(tar_header)), data_size);
 	    break;
 	}
 	
@@ -2119,7 +2124,10 @@ uint64_t process_one_entry (KTarState * self, uint64_t offset, uint64_t hard_lim
     switch (type)
     {
     default:
-	PLOGMSG (klogErr,(klogErr,"Unhandled Header Block Type $(type):$(typeint)","type=%c,typeint=%d",type ? type : '0',type));
+        if ( ! silent )
+        {
+            PLOGMSG (klogErr,(klogErr,"Unhandled Header Block Type $(type):$(typeint)","type=%c,typeint=%d",type ? type : '0',type));
+        }
 	return RC (rcFS, rcArc, rcParsing, rcData, rcUnsupported);
     case TAR_ZERO_BLOCK:
 /* 	LOGMSG (klogDebug1, "Zero Block"); */
@@ -2314,7 +2322,7 @@ rc_t KArcParseTAR_intern ( KToc * self,
              * OR a negative on a file parse error
              * OR zero for a file that would exceed the current window
              */
-            used = process_one_entry ( &state, offset, state.buffer_limit );
+            used = process_one_entry ( &state, offset, state.buffer_limit, silent );
 
             if ( used == 0 )
                 stalled ++;
@@ -2398,17 +2406,6 @@ LIB_EXPORT int CC KDirectoryVOpenTarArchiveRead ( struct KDirectory const *self,
                                       KArcParseTAR, NULL, NULL );
 }
 
-/* instead of including... source is in arc.c */
-LIB_EXPORT rc_t CC KDirectoryOpenArcDirRead_silent( const KDirectory * self,
-                                                   const KDirectory ** pdir,
-                                                   bool chroot,
-                                                   const char * path,
-                                                   KArcFSType baseType,
-                                                   rc_t ( CC * parse )( KToc *, const void *,
-                                                                       bool( CC * )( const KDirectory *, const char *, void * ), void * ),
-                                                   bool ( CC * filter )( const KDirectory*, const char *, void *),
-                                                   void * filterparam );
-
 LIB_EXPORT int CC KDirectoryVOpenTarArchiveRead_silent ( struct KDirectory const *self,
     struct KDirectory const **tar_dir, int chroot, const char *path, va_list args )
 {
@@ -2418,6 +2415,15 @@ LIB_EXPORT int CC KDirectoryVOpenTarArchiveRead_silent ( struct KDirectory const
 }
 
 
+LIB_EXPORT int CC KDirectoryVOpenTarArchiveRead_silent_preopened ( struct KDirectory const *self,
+    struct KDirectory const **tar_dir, int chroot, const struct KFile * f, const char *path, va_list args )
+{
+    /* putting off parameter validation into this call */
+    return KDirectoryOpenArcDirRead_silent_preopened ( self, tar_dir, false, path, tocKFile, 
+                                      (void*)f, KArcParseTAR_silent, NULL, NULL );
+}
+
+
 LIB_EXPORT int CC KDirectoryOpenTarArchiveRead ( struct KDirectory const *self,
     struct KDirectory const **tar_dir, int chroot, const char *path, ... )
 {
@@ -2446,6 +2452,20 @@ LIB_EXPORT int CC KDirectoryOpenTarArchiveRead_silent ( struct KDirectory const
 }
 
 
+LIB_EXPORT int CC KDirectoryOpenTarArchiveRead_silent_preopened ( struct KDirectory const *self,
+    struct KDirectory const **tar_dir, int chroot, const KFile * f, const char *path, ... )
+{
+    rc_t rc;
+    va_list args;
+
+    va_start ( args, path );
+    rc = KDirectoryVOpenTarArchiveRead_silent_preopened ( self, tar_dir, chroot, f, path, args );
+    va_end ( args );
+
+    return rc;
+}
+
+
 /* ----------
  * Validate that the compiler packed all the character arrays into the correct sizes
  * to use the header.
diff --git a/libs/kfs/teefile.c b/libs/kfs/teefile.c
index 3552b1e..17f9d2a 100644
--- a/libs/kfs/teefile.c
+++ b/libs/kfs/teefile.c
@@ -203,6 +203,7 @@ rc_t KTeeFileMake (KTeeFile ** self,
     {
 	rc = KFileInit (&pF->dad,			/* initialize base class */
 			vt,			 	/* VTable for KTeeFile */
+            "KTeeFile", "no-name",
 			read_enabled,			/* read allowed */
 			write_enabled);			/* write disallowed */
 	if (rc == 0)
diff --git a/libs/kfs/tocentry.c b/libs/kfs/tocentry.c
index 1359501..b2de16b 100644
--- a/libs/kfs/tocentry.c
+++ b/libs/kfs/tocentry.c
@@ -371,7 +371,7 @@ rc_t KTocEntryNewChunked ( KTocEntry ** new_entry,
      *
      * Then add to that the size in bytes of the chunked data (all 64 bit numbers).
      */
-    nsize = ~(sizeof(uint64_t)-1) & 
+    nsize = ~( ( size_t ) sizeof(uint64_t)-1) & 
 	(sizeof(KTocEntry)
 	 - sizeof(union KTocEntryUnion)
 	 + sizeof(struct KTocEntryChunkFile)
@@ -1378,10 +1378,14 @@ bool check_limit (const void * ptr, const void * limit, size_t size)
 	ptr = *_ptr;							\
 									\
 	if (rev)							\
-	    *pout = S (*ptr++);						\
+	{								\
+	    T t;							\
+	    memcpy (&t, ptr, sizeof (T));				\
+	    *pout = S (t);						\
+	}								\
 	else								\
-	    *pout = *ptr++;						\
-	*_ptr = ptr;							\
+	    memcpy (pout, ptr, sizeof (T));                             \
+	*_ptr = ++ptr;							\
 	return 0;							\
     }
 
@@ -1445,6 +1449,7 @@ rc_t KTocEntryInflateNodeCommon (const void ** ptr,
 	memcpy (common->name+plen+1, *ptr, nlen);
 	common->name[plen + nlen + 1] = '\0';
     }
+
     *ptr = ((uint8_t*)*ptr) + nlen;
 
     rc = read_i64 (ptr, limit, rev, &common->mtime);
@@ -1717,27 +1722,23 @@ rc_t KTocInflatePBSTree ( KToc * self, uint64_t arcsize, const void * treestart,
     rc_t rc;
     PBSTree * pbst;
 
-    /* TBD - need to make this know about byte-swapping */
-    bool byteswap = false;
-
-    rc = PBSTreeMake (&pbst, treestart, maxsize, byteswap);
+    rc = PBSTreeMake (&pbst, treestart, maxsize, rev);
     if (rc == 0)
     {
-	KTocEntryInflateData data;
+        KTocEntryInflateData data;
 
-	data.toc = self;
-	data.path = path;
+        data.toc = self;
+        data.path = path;
         data.arcsize = arcsize;
-	data.rc = 0;
-	data.rev = rev;
-	data.offset = offset;
-
-	PBSTreeForEach (pbst, false, KTocEntryInflate, &data);
-
-	rc = data.rc;
+        data.rc = 0;
+        data.rev = rev;
+        data.offset = offset;
+        
+        PBSTreeForEach (pbst, false, KTocEntryInflate, &data);
 
+        rc = data.rc;
 
-        free (pbst);
+        PBSTreeWhack (pbst);
     }
     return rc;
 }
diff --git a/libs/kfs/tocfile.c b/libs/kfs/tocfile.c
index c1bc0ee..66cbcda 100644
--- a/libs/kfs/tocfile.c
+++ b/libs/kfs/tocfile.c
@@ -531,7 +531,7 @@ LIB_EXPORT rc_t CC KTocFileMake ( const KFile ** pself,
     }
     else
     {
-	rc = KFileInit (&self->dad, (const KFile_vt*)&vtKTocFile, true, false);
+	rc = KFileInit (&self->dad, (const KFile_vt*)&vtKTocFile, "KTocFile", "no-name", true, false);
 	if (rc != 0)
 	{
 	    LOGERR (klogErr, rc, "Init failure in KTocFileMake");
diff --git a/libs/kfs/unix/sysdir-priv.h b/libs/kfs/unix/sysdir-priv.h
index ae0cac0..ceebc8e 100644
--- a/libs/kfs/unix/sysdir-priv.h
+++ b/libs/kfs/unix/sysdir-priv.h
@@ -61,15 +61,6 @@ typedef struct KSysDir KSysDir;
 rc_t KSysDirMakePath ( struct KSysDir const *self, enum RCContext ctx, bool canon,
     char *buffer, size_t path_max, const char *path, va_list args );
 
-
-/* RealPath
- *  returns a real OS path
- */
-rc_t KSysDirRealPath ( const KSysDir *self,
-    char *real, size_t bsize, const char *path, ... );
-rc_t KSysDirVRealPath ( const KSysDir *self,
-    char *real, size_t bsize, const char *path, va_list args );
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/libs/kfs/unix/sysdir.c b/libs/kfs/unix/sysdir.c
index 9442e6f..fb450fa 100644
--- a/libs/kfs/unix/sysdir.c
+++ b/libs/kfs/unix/sysdir.c
@@ -43,8 +43,11 @@ struct KSysDirListing;
 #include <klib/log.h>
 #include <klib/out.h>
 #include <klib/rc.h>
+#include <klib/klib-priv.h>
 #include <sysalloc.h>
 
+#include "os-native.h"
+
 #ifndef __USE_UNIX98
 #define __USE_UNIX98 1
 #endif
@@ -474,7 +477,8 @@ rc_t KSysDirMakePath ( const KSysDir *self, enum RCContext ctx, bool canon,
             return RC ( rcFS, rcDirectory, ctx, rcPath, rcExcessive );
     }
 
-    if ( buffer [ bsize + psize ] == '/' )
+    /* remove trailing slashes; keep the leading slash */
+    while ( bsize + psize > 1 && buffer [ bsize + psize - 1] == '/' )
         buffer [ bsize + -- psize ] = 0;
 
     if ( psize > 0 && ( canon || self -> root != 0 ) )
@@ -848,7 +852,7 @@ rc_t KSysDirResolvePath ( const KSysDir *self, bool absolute,
 
             /* ready to go */
             strcpy ( resolved, & full [ self -> root ] );
-            assert ( resolved [ 0 ] == '/' );
+/*             assert ( resolved [ 0 ] == '/' ); */
         }
         else
         {
@@ -1011,6 +1015,9 @@ rc_t KSysDirRename ( KSysDir *self, bool force, const char *from, const char *to
             case ENOMEM:
                 rc = RC ( rcFS, rcDirectory, rcRenaming, rcMemory, rcExhausted );
                 break;
+            case ENOENT:
+                rc = RC ( rcFS, rcDirectory, rcRenaming, rcPath, rcNotFound );
+                break;
             default:
                 rc = RC ( rcFS, rcDirectory, rcRenaming, rcNoObj, rcUnknown );
                 break;
@@ -1175,6 +1182,7 @@ rc_t KSysDirRemoveEntry ( char *path, size_t path_max, bool force )
 
         while ( rmdir ( path ) != 0 ) switch ( errno )
         {
+        case EEXIST:
         case ENOTEMPTY:
             if ( force )
             {
@@ -1695,39 +1703,47 @@ rc_t KSysDirCreateParents ( const KSysDir *self,
     return rc;
 }
 
-/* KSysDirCreateAlias
+/* CreateAlias
  *  creates a path alias according to create mode
- *
- *  "targ" [ IN ] - NUL terminated string in directory-native
- *  character set denoting target object
- *
- *  "alias" [ IN ] - NUL terminated string in directory-native
- *  character set denoting target alias
+ *  such that "alias" => "targ"
  *
  *  "access" [ IN ] - standard Unix directory access mode
  *  used when "mode" has kcmParents set and alias path does
  *  not exist.
  *
  *  "mode" [ IN ] - a creation mode ( see explanation above ).
+ *
+ *  "targ" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target object, i.e. the object which
+ *  is designated by symlink "alias".
+ *
+ *  "alias" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target alias, i.e. the symlink that
+ *  designates a target "targ".
  */
 static
 rc_t KSysDirCreateAlias ( KSysDir *self,
     uint32_t access, KCreateMode mode,
     const char *targ, const char *alias )
 {
-    char ftarg [ PATH_MAX ];
-    rc_t rc = KSysDirMakePath ( self, rcCreating, true, ftarg, sizeof ftarg, targ, NULL );
+    /* create full path to symlink */
+    char falias [ PATH_MAX ];
+    rc_t rc = KSysDirMakePath ( self, rcCreating, true, falias, sizeof falias, alias, NULL );
     if ( rc == 0 )
     {
-        char falias [ PATH_MAX ];
-        rc = KSysDirMakePath ( self, rcCreating, true, falias, sizeof falias, alias, NULL );
+        /* the full path to target RELATIVE TO self */
+        char ftarg [ PATH_MAX ];
+        rc = KSysDirMakePath ( self, rcCreating, true, ftarg, sizeof ftarg, targ, NULL );
         if ( rc == 0 )
         {
-            /* if "alias" is relative or "self" is chroot'd,
-               "falias" must be made relative */
-            if ( alias [ 0 ] != '/' || self -> root != 0 )
+            /* if "targ" is relative or "self" is chroot'd,
+               "ftarg" must be made relative */
+            if ( targ [ 0 ] != '/' || self -> root != 0 )
             {
-                rc = KSysDirRelativePath ( self, rcCreating, falias, ftarg, sizeof ftarg /*strlen ( ftarg )*/ );
+                /* take path to alias as root.
+                   generate a path RELATIVE TO alias */
+                rc = KSysDirRelativePath ( self, rcCreating, falias,
+                    ftarg, sizeof ftarg /*strlen ( ftarg )*/ );
                 if ( rc != 0 )
                     return rc;
             }
@@ -1742,9 +1758,12 @@ rc_t KSysDirCreateAlias ( KSysDir *self,
                    create-only, force creation by removing old */
                 if ( ( mode & kcmValueMask ) != kcmCreate )
                 {
+                    /* refuse to drop if not an alias */
                     if ( ( KSysDirFullPathType ( falias ) & kptAlias ) == 0 )
                         return RC ( rcFS, rcDirectory, rcCreating, rcPath, rcIncorrect );
-                    rc = KSysDirRemoveEntry ( falias, sizeof falias, 0 );
+
+                    /* drop existing alias */
+                    rc = KSysDirRemoveEntry ( falias, sizeof falias, false );
                     if ( rc == 0 )
                         break;
                 }
@@ -1835,7 +1854,7 @@ rc_t KSysDirOpenFileRead ( const KSysDir *self,
             return RC ( rcFS, rcDirectory, rcOpening, rcNoObj, rcUnknown );
         }
 
-        rc = KSysFileMake ( ( KSysFile** ) f, fd, true, false );
+        rc = KSysFileMake ( ( KSysFile** ) f, fd, full, true, false );
         if ( rc != 0 )
             close ( fd );
     }
@@ -1885,7 +1904,7 @@ rc_t KSysDirOpenFileWrite ( KSysDir *self,
             return RC ( rcFS, rcDirectory, rcOpening, rcNoObj, rcUnknown );
         }
 
-        rc = KSysFileMake ( ( KSysFile** ) f, fd, update, 1 );
+        rc = KSysFileMake ( ( KSysFile** ) f, fd, full, update, 1 );
         if ( rc != 0 )
             close ( fd );
     }
@@ -1938,6 +1957,8 @@ rc_t KSysDirCreateFile ( KSysDir *self, KFile **f, bool update,
                    wherever there is read or write on file */
                 uint32_t dir_access = access |
                     ( ( access & 0444 ) >> 2 ) | ( ( access & 0222 ) >> 1 );
+                /* NEW 2/15/2013 - also force read */
+                dir_access |= ( dir_access & 0111 ) << 2;
                 KSysDirCreateParents ( self, full, dir_access, true );
 
                 /* try again */
@@ -1994,11 +2015,16 @@ rc_t KSysDirCreateFile ( KSysDir *self, KFile **f, bool update,
                 rc = RC ( rcFS, rcDirectory, rcCreating, rcNoObj, rcUnknown );
                 break;
             }
-            PLOGERR (klogErr, (klogErr, rc, "failed to create '$(F)'", "F=%s", full));
+            
+            /* disabled 12/12/2012 : it prints an error message, if vdb tries to open
+               the same reference-object twice via http. The lock-file for the 2nd try
+               does already exist. This is not an error, just a condition. */
+
+            /* PLOGERR (klogErr, (klogErr, rc, "failed to create '$(F)'", "F=%s", full)); */
             return rc;
         }
 
-        rc = KSysFileMake ( ( KSysFile** ) f, fd, update, true );
+        rc = KSysFileMake ( ( KSysFile** ) f, fd, full, update, true );
         if ( rc != 0 )
             close ( fd );
     }
@@ -2117,10 +2143,15 @@ rc_t KSysDirOpenDirRead ( const KSysDir *self,
         size_t path_size = strlen ( full );
         while ( path_size > 1 && full [ path_size - 1 ] == '/' )
             full [ -- path_size ] = 0;
-
-        if ( ( KSysDirFullPathType ( full ) & ( kptAlias - 1 ) ) != kptDir )
-            return RC ( rcFS, rcDirectory, rcOpening, rcPath, rcIncorrect );
-
+            
+        {
+            int t = KSysDirFullPathType ( full ) & ( kptAlias - 1 );
+            if ( t == kptNotFound )
+                return RC ( rcFS, rcDirectory, rcOpening, rcPath, rcNotFound );
+            if ( t != kptDir )
+                return RC ( rcFS, rcDirectory, rcOpening, rcPath, rcIncorrect );
+        }
+        
         sub = KSysDirMake ( path_size );
         if ( sub == NULL )
             rc = RC ( rcFS, rcDirectory, rcOpening, rcMemory, rcExhausted );
@@ -2317,6 +2348,10 @@ rc_t KSysDirInit ( KSysDir *self, enum RCContext ctx, uint32_t dad_root,
     return 0;
 }
 
+extern rc_t CC ReportCWD ( const ReportFuncs *f, uint32_t indent );
+extern rc_t CC ReportRedirect ( KWrtHandler* handler,
+    const char* filename, bool* to_file, bool finalize );
+
 LIB_EXPORT rc_t CC KDirectoryNativeDir ( KDirectory **dirp )
 {
     rc_t rc;
@@ -2324,6 +2359,13 @@ LIB_EXPORT rc_t CC KDirectoryNativeDir ( KDirectory **dirp )
     uint32_t size;
     char wd [ PATH_MAX ];
 
+    static bool latch;
+    if ( ! latch )
+    {
+        ReportInitKFS ( ReportCWD, ReportRedirect );
+        latch = true;
+    }
+
     if ( dirp == NULL )
         return RC ( rcFS, rcDirectory, rcAccessing, rcParam, rcNull );
 
diff --git a/libs/kfs/unix/sysdll.c b/libs/kfs/unix/sysdll.c
index 3aa13cc..802a324 100644
--- a/libs/kfs/unix/sysdll.c
+++ b/libs/kfs/unix/sysdll.c
@@ -43,6 +43,8 @@
 #include <klib/rc.h>
 #include <sysalloc.h>
 
+#include "os-native.h"
+
 /* old Sun includes won't define PATH_MAX */
 
 #ifndef __XOPEN_OR_POSIX
@@ -59,11 +61,6 @@
 #include <errno.h>
 #include <assert.h>
 
-/* turn on dladdr for GNU and Darwin */
-#if ! defined _GNU_SOURCE && ! defined _DARWIN_C_SOURCE
-#define _GNU_SOURCE
-#define _DARWIN_C_SOURCE
-#endif
 #include <dlfcn.h>
 
 
@@ -293,7 +290,7 @@ LIB_EXPORT rc_t CC KDyldHomeDirectory ( const KDyld *self, const KDirectory **di
         {
             Dl_info info;
             memset ( & info, 0, sizeof info );
-            if ( dladdr ( ( const void* ) func, & info ) == 0 )
+            if ( dladdr ( ( void* ) func, & info ) == 0 )
                 rc = RC ( rcFS, rcDylib, rcSearching, rcFunction, rcNotFound );
             else
             {
@@ -355,11 +352,21 @@ LIB_EXPORT rc_t CC KDyldHomeDirectory ( const KDyld *self, const KDirectory **di
                                         path_type = KDirectoryPathType ( wd, thanks_for_brilliant_APIs );
                                         if ( ( path_type & ~ kptAlias ) == kptFile )
                                         {
-                                            /* this is a file, which can be assumed to be an executable */
-                                            dli_fname = thanks_for_brilliant_APIs;
-                                            last_slash = & thanks_for_brilliant_APIs [ last_slash - path_start ];
-                                            rc = 0;
-                                            break;
+                                            uint32_t access = 0;
+                                            rc = KDirectoryAccess ( wd, & access, thanks_for_brilliant_APIs );
+                                            if ( rc != 0 )
+                                                break;
+
+                                            /* try to do a quick check that the file can be executed.
+                                               but it could fail to do the right guess. */
+                                            if ( access & 0100 || access & 0010 || access & 0001 ) {
+                                                /* this is a file, which can be assumed to be an executable */
+                                                dli_fname = thanks_for_brilliant_APIs;
+                                                last_slash
+                                                    = & thanks_for_brilliant_APIs [ last_slash - path_start ];
+                                                rc = 0;
+                                                break;
+                                            }
                                         }
                                     }
 
@@ -414,7 +421,7 @@ rc_t KDylibWhack ( KDylib *self )
 
 
 /* Darwin, especially before 10.5 doesn't/didn't do this well */
-#if MAC
+#if ! MAC
     /* try to close library */
     if ( dlclose ( self -> handle ) )
     {
@@ -458,9 +465,10 @@ rc_t KDylibSetLogging ( const KDylib *self )
 {
     rc_t ( CC * set_formatter ) ( KFmtWriter writer, KLogFmtFlags flags, void *data );
     rc_t ( CC * set_writer ) ( KWrtWriter writer, void *data );
+    rc_t ( CC * set_level ) ( KLogLevel lvl );
 
     /* set the current logging level */
-    rc_t ( CC * set_level ) ( KLogLevel lvl ) = dlsym ( self -> handle, "KLogLevelSet" );
+    set_level = ( rc_t ( * ) ( KLogLevel ) ) dlsym ( self -> handle, "KLogLevelSet" );
     if ( set_level != NULL )
     {
         KLogLevel lvl = KLogLevelGet ();
@@ -468,37 +476,37 @@ rc_t KDylibSetLogging ( const KDylib *self )
     }
 
     /* determine current library logging */
-    set_writer = dlsym ( self -> handle, "KOutHandlerSet" );
+    set_writer = ( rc_t ( * ) ( KWrtWriter, void* ) ) dlsym ( self -> handle, "KOutHandlerSet" );
     if ( set_writer != NULL ) {
         const KWrtHandler* handler = KOutHandlerGet ();
         ( * set_writer ) ( handler -> writer, handler -> data );
     }
 
-    set_formatter = dlsym ( self -> handle, "KLogLibFmtHandlerSet" );
+    set_formatter = ( rc_t ( * ) ( KFmtWriter, KLogFmtFlags, void* ) ) dlsym ( self -> handle, "KLogLibFmtHandlerSet" );
     if ( set_formatter != NULL ) {
         KLogFmtFlags flags = KLogLibFmtFlagsGet ();
         const KFmtHandler* fmt_handler = KLogFmtHandlerGet ();
         ( * set_formatter ) ( fmt_handler -> formatter, flags, fmt_handler -> data );
     }
-    set_writer = dlsym ( self -> handle, "KLogLibHandlerSet" );
+    set_writer = ( rc_t ( * ) ( KWrtWriter, void* ) ) dlsym ( self -> handle, "KLogLibHandlerSet" );
     if ( set_writer != NULL ) {
         const KWrtHandler* handler = KLogLibHandlerGet ();
         ( * set_writer ) ( handler -> writer, handler -> data );
     }
 
-    set_formatter = dlsym ( self -> handle, "KStsLibFmtHandlerSet" );
+    set_formatter = ( rc_t ( * ) ( KFmtWriter, KLogFmtFlags, void* ) ) dlsym ( self -> handle, "KStsLibFmtHandlerSet" );
     if ( set_formatter != NULL ) {
         KStsFmtFlags flags = KStsLibFmtFlagsGet ();
         const KFmtHandler* fmt_handler = KStsFmtHandlerGet ();
         ( * set_formatter ) ( fmt_handler -> formatter, flags, fmt_handler -> data );
     }
-    set_writer = dlsym ( self -> handle, "KStsLibHandlerSet" );
+    set_writer = ( rc_t ( * ) ( KWrtWriter, void* ) ) dlsym ( self -> handle, "KStsLibHandlerSet" );
     if ( set_writer != NULL ) {
         const KWrtHandler* handler = KStsLibHandlerGet ();
         ( * set_writer ) ( handler -> writer, handler -> data );
     }
 #if _DEBUGGING
-    set_writer = dlsym ( self -> handle, "KDbgHandlerSet" );
+    set_writer = ( rc_t ( * ) ( KWrtWriter, void* ) ) dlsym ( self -> handle, "KDbgHandlerSet" );
     if ( set_writer != NULL ) {
         const KWrtHandler* handler = KDbgHandlerGet ();
         ( * set_writer ) ( handler -> writer, handler -> data );
@@ -839,7 +847,8 @@ rc_t KDlsetWhack ( KDlset *self )
     return 0;
 }
 
-
+#define STRINGIZE(s) #s
+#define LIBNAME(pref, name, suff) STRINGIZE(pref) name STRINGIZE(suff)
 /* MakeSet
  *  load a dynamic library
  *
@@ -847,7 +856,7 @@ rc_t KDlsetWhack ( KDlset *self )
  */
 LIB_EXPORT rc_t CC KDyldMakeSet ( const KDyld *self, KDlset **setp )
 {
-    rc_t rc;
+    rc_t rc = 0;
 
     if ( setp == NULL )
         rc = RC ( rcFS, rcDylib, rcConstructing, rcParam, rcNull );
@@ -867,8 +876,20 @@ LIB_EXPORT rc_t CC KDyldMakeSet ( const KDyld *self, KDlset **setp )
                 VectorInit ( & set -> ord, 0, 16 );
                 KRefcountInit ( & set -> refcount, 1, "KDlset", "make", "dlset" );
 #if ! ALWAYS_ADD_EXE
-                * setp = set;
-                return 0;
+                {   
+                    KDylib *jni;
+                    const char* libname = LIBNAME(LIBPREFIX, "vdb_jni.", SHLIBEXT);
+                    if ( KDyldLoadLib ( ( KDyld* ) self, & jni, libname ) == 0 )
+                    {
+                        rc = KDlsetAddLib ( set, jni );
+                        KDylibRelease ( jni );
+                    }
+                    if (rc == 0)
+                    {
+                        * setp = set;
+                        return 0;
+                    }
+                }
 #else
                 {
                     KDylib *exe;
@@ -884,9 +905,8 @@ LIB_EXPORT rc_t CC KDyldMakeSet ( const KDyld *self, KDlset **setp )
                         }
                     }
                 }
-
-                KDlsetRelease ( set );
 #endif
+                KDlsetRelease ( set );
             }
         }
 
@@ -1332,6 +1352,56 @@ LIB_EXPORT rc_t CC KDlsetLastSymbol ( const KDlset *self, KSymAddr **sym, const
 }
 
 
+/* List - PRIVATE
+ *  list the paths to the libraries in the set
+ */
+typedef struct list_dylib_param list_dylib_param;
+struct list_dylib_param
+{
+    VNamelist *list;
+    rc_t rc;
+};
+
+static
+bool CC list_dylib ( void *item, void *data )
+{
+    list_dylib_param *pb = data;
+    const KDylib *lib = ( const void* ) item;
+
+    /* "lib" was created with KDylibMake
+       which creates a NUL terminated path.
+       of course, this could seg-fault if bad... */
+    assert ( lib -> path . addr [ lib -> path . size ] == 0 );
+
+    pb -> rc = VNamelistAppend ( pb -> list, lib -> path . addr );
+    return pb -> rc != 0;
+}
+
+LIB_EXPORT rc_t CC KDlsetList ( const KDlset *self, KNamelist **listp )
+{
+    list_dylib_param pb;
+
+    assert ( listp != NULL );
+
+    if ( self == NULL )
+        pb . rc = RC ( rcFS, rcDylib, rcListing, rcSelf, rcNull );
+    else
+    {
+        pb . rc = VNamelistMake ( & pb . list, VectorLength ( & self -> name ) );
+        if ( pb . rc == 0 )
+        {
+            bool fail = VectorDoUntil ( & self -> name, false, list_dylib, & pb );
+            if ( ! fail )
+                pb . rc = VNamelistToNamelist ( pb . list, listp );
+
+            VNamelistRelease ( pb . list );
+        }
+    }
+
+    return pb . rc;
+}
+
+
 /* AsObj
  * AsFunc
  *  retrieve symbol address as pointer to object
diff --git a/libs/kfs/unix/sysfile-priv.h b/libs/kfs/unix/sysfile-priv.h
index f6db460..34d2a40 100644
--- a/libs/kfs/unix/sysfile-priv.h
+++ b/libs/kfs/unix/sysfile-priv.h
@@ -65,7 +65,7 @@ struct KSysFile
  *  create a new file object
  *  from file descriptor
  */
-rc_t KSysFileMake ( KSysFile **fp, int fd, bool read_enabled, bool write_enabled );
+rc_t KSysFileMake ( KSysFile **fp, int fd, const char *path, bool read_enabled, bool write_enabled );
 
 
 #ifdef __cplusplus
diff --git a/libs/kfs/unix/sysfile.c b/libs/kfs/unix/sysfile.c
index 9a3383a..5b98275 100644
--- a/libs/kfs/unix/sysfile.c
+++ b/libs/kfs/unix/sysfile.c
@@ -466,29 +466,29 @@ rc_t KSysFileWrite ( KSysFile *self, uint64_t pos,
             return rc;
 
         case EIO:
-            rc = RC ( rcFS, rcFile, rcReading, rcTransfer, rcUnknown );
+            rc = RC ( rcFS, rcFile, rcWriting, rcTransfer, rcUnknown );
             LOGERR (klogErr, rc, "system I/O error");
             return rc;
 
         case EBADF:
-            rc = RC ( rcFS, rcFile, rcReading, rcFileDesc, rcInvalid );
+            rc = RC ( rcFS, rcFile, rcWriting, rcFileDesc, rcInvalid );
             PLOGERR (klogErr,
                      (klogErr, rc, "system bad file descriptor error fd='$(E)'",
                       "E=%d", self->fd));
             return rc;
 
         case EISDIR:
-            rc = RC ( rcFS, rcFile, rcReading, rcFileDesc, rcIncorrect );
+            rc = RC ( rcFS, rcFile, rcWriting, rcFileDesc, rcIncorrect );
             LOGERR (klogErr, rc, "system misuse of a directory error");
             return rc;
 
         case EINVAL:
-            rc = RC ( rcFS, rcFile, rcReading, rcParam, rcInvalid );
+            rc = RC ( rcFS, rcFile, rcWriting, rcParam, rcInvalid );
             LOGERR (klogErr, rc, "system invalid argument error");
             return rc;
 
         default:
-            rc = RC ( rcFS, rcFile, rcReading, rcNoObj, rcUnknown );
+            rc = RC ( rcFS, rcFile, rcWriting, rcNoObj, rcUnknown );
             PLOGERR (klogErr,
                      (klogErr, rc, "unknown system error errno='$(S)($(E))'",
                       "S=%!,E=%d", lerrno, lerrno));
@@ -530,7 +530,7 @@ static KFile_vt_v1 vtKSysFile =
 
 static
 rc_t KSysFileMakeVT ( KSysFile **fp, int fd, const KFile_vt *vt,
-    bool read_enabled, bool write_enabled )
+    const char *path, bool read_enabled, bool write_enabled )
 {
     rc_t rc;
     KSysFile *f;
@@ -564,7 +564,7 @@ rc_t KSysFileMakeVT ( KSysFile **fp, int fd, const KFile_vt *vt,
         }
 #endif
 
-        rc = KFileInit ( & f -> dad, vt, read_enabled, write_enabled );
+        rc = KFileInit ( & f -> dad, vt, "KSysFile", path, read_enabled, write_enabled );
         if ( rc == 0 )
         {
             f -> fd = fd;
@@ -577,10 +577,10 @@ rc_t KSysFileMakeVT ( KSysFile **fp, int fd, const KFile_vt *vt,
     return rc;
 }
 
-LIB_EXPORT rc_t CC KSysFileMake ( KSysFile **fp, int fd, bool read_enabled, bool write_enabled )
+LIB_EXPORT rc_t CC KSysFileMake ( KSysFile **fp, int fd, const char *path, bool read_enabled, bool write_enabled )
 {
     return KSysFileMakeVT ( fp, fd, ( const KFile_vt* ) & vtKSysFile,
-        read_enabled, write_enabled );
+        path, read_enabled, write_enabled );
 }
 
 /*--------------------------------------------------------------------------
@@ -804,7 +804,7 @@ rc_t KStdIOFileWrite ( KSysFile *dad, uint64_t pos,
         case EBADF:
             rc = RC ( rcFS, rcFile, rcWriting, rcFileDesc, rcInvalid );
             PLOGERR (klogInt,
-                     (klogInt, rc, "systembad file descriptor error fd=$(F)",
+                     (klogInt, rc, "system bad file descriptor error fd=$(F)",
                       "F=%d", lerrno, self->dad.fd));
             return rc;
 
@@ -917,7 +917,7 @@ rc_t KStdIOFileMake ( KFile **fp, int fd,
     if ( seekable )
     {
         return KSysFileMakeVT ( ( KSysFile** ) fp, fd,
-            ( const KFile_vt* ) & vtKStdIOFile, read_enabled, write_enabled );
+            ( const KFile_vt* ) & vtKStdIOFile, "stdio-file", read_enabled, write_enabled );
     }
 
     if ( fd < 0 )
@@ -955,7 +955,7 @@ rc_t KStdIOFileMake ( KFile **fp, int fd,
             }
 #endif
             rc = KFileInit ( &f->dad.dad, (const KFile_vt*) &vtKStdIOStream,
-                             read_enabled, write_enabled );
+                             "KStdIOFile", "fd", read_enabled, write_enabled );
             if ( rc == 0 )
             {
                 f -> dad . fd = fd;
diff --git a/libs/kfs/unix/syslockfile.c b/libs/kfs/unix/syslockfile.c
new file mode 100644
index 0000000..57aaa4c
--- /dev/null
+++ b/libs/kfs/unix/syslockfile.c
@@ -0,0 +1,215 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+typedef struct KExclAccessFile KExclAccessFile;
+#define KFILE_IMPL KExclAccessFile
+
+#include <kfs/extern.h>
+#include <kfs/lockfile.h>
+#include <kfs/impl.h>
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <klib/rc.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <assert.h>
+
+/*--------------------------------------------------------------------------
+ * KExclAccessFile
+ */
+struct KExclAccessFile
+{
+    KFile dad;
+    KLockFile *lock;
+    KFile *f;
+};
+
+static
+rc_t KExclAccessFileDestroy ( KExclAccessFile *self )
+{
+    rc_t rc = KFileRelease ( self -> f );
+    if ( rc == 0 )
+    {
+        KLockFileRelease ( self -> lock );
+        free ( self );
+    }
+    return rc;
+}
+
+static
+struct KSysFile *KExclAccessFileGetSysFile ( const KExclAccessFile *self, uint64_t *offset )
+{
+    return KFileGetSysFile ( self -> f, offset );
+}
+
+static
+rc_t KExclAccessFileRandomAccess ( const KExclAccessFile *self )
+{
+    return KFileRandomAccess ( self -> f );
+}
+
+static
+rc_t KExclAccessFileSize ( const KExclAccessFile *self, uint64_t *size )
+{
+    return KFileSize ( self -> f, size );
+}
+
+static
+rc_t KExclAccessFileSetSize ( KExclAccessFile *self, uint64_t size )
+{
+    return KFileSetSize ( self -> f, size );
+}
+
+static
+rc_t KExclAccessFileRead ( const KExclAccessFile *self, uint64_t pos,
+    void *buffer, size_t bsize, size_t *num_read )
+{
+    return KFileRead ( self -> f, pos, buffer, bsize, num_read );
+}
+
+static
+rc_t KExclAccessFileWrite ( KExclAccessFile *self, uint64_t pos,
+    const void *buffer, size_t size, size_t *num_writ )
+{
+    return KFileWrite ( self -> f, pos, buffer, size, num_writ );
+}
+
+static
+uint32_t KExclAccessFileType ( const KExclAccessFile * self )
+{
+    return KFileType ( self -> f );
+}
+
+static KFile_vt_v1 KExclAccessFile_vt =
+{
+    1, 1,
+
+    KExclAccessFileDestroy,
+    KExclAccessFileGetSysFile,
+    KExclAccessFileRandomAccess,
+    KExclAccessFileSize,
+    KExclAccessFileSetSize,
+    KExclAccessFileRead,
+    KExclAccessFileWrite,
+    KExclAccessFileType
+};
+
+static
+rc_t KExclAccessFileMake ( KExclAccessFile **fp, KLockFile *lock, KFile *f )
+{
+    rc_t rc;
+    KExclAccessFile *xf = malloc ( sizeof * xf );
+    if ( xf == NULL )
+        rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        rc = KFileInit ( & xf -> dad, ( const KFile_vt* ) & KExclAccessFile_vt,
+            "KExclAccessFile", "no-name", f -> read_enabled, f -> write_enabled );
+        if ( rc == 0 )
+        {
+            xf -> lock = lock;
+            xf -> f = f;
+            * fp = xf;
+            return 0;
+        }
+
+        free ( xf );
+    }
+
+    return rc;
+}
+
+
+/*--------------------------------------------------------------------------
+ * KDirectory
+ *  interface extensions
+ */
+
+
+/* CreateExclusiveAccessFile
+ *  opens a file with exclusive write access
+ *
+ *  "fp" [ OUT ] - return parameter for newly opened file
+ *
+ *  "update" [ IN ] - if true, open in read/write mode
+ *  otherwise, open in write-only mode
+ *
+ *  "access" [ IN ] - standard Unix access mode, e.g. 0664
+ *
+ *  "mode" [ IN ] - a creation mode ( see explanation above ).
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target file
+ */
+LIB_EXPORT rc_t CC KDirectoryVCreateExclusiveAccessFile ( KDirectory *self, KFile **fp,
+    bool update, uint32_t access, KCreateMode mode, const char *path, va_list args )
+{
+    rc_t rc;
+
+    if ( fp == NULL )
+        rc = RC ( rcFS, rcFile, rcLocking, rcParam, rcNull );
+    else
+    {
+        /* create the path */
+        char full [ 4096 ];
+        rc = KDirectoryVResolvePath ( self, true, full, sizeof full, path, args );
+        if ( rc == 0 )
+        {
+            KLockFile *lock;
+
+            /* acquire the lock */
+            rc = KDirectoryCreateLockFile ( self, & lock, "%s.lock", full );
+            if ( rc == 0 )
+            {
+                KFile *f;
+
+                /* create the file */
+                rc = KDirectoryCreateFile ( self, & f, update, access, mode, full );
+                if ( rc == 0 )
+                {
+                    KExclAccessFile *xf;
+
+                    /* wrap the file */
+                    rc = KExclAccessFileMake ( & xf, lock, f );
+                    if ( rc == 0 )
+                    {
+                        * fp = & xf -> dad;
+                        return 0;
+                    }
+
+                    KFileRelease ( f );
+                }
+
+                KLockFileRelease ( lock );
+            }
+        }
+
+        * fp = NULL;
+    }
+
+    return rc;
+}
diff --git a/libs/kfs/unix/syspath.c b/libs/kfs/unix/syspath.c
deleted file mode 100644
index 625f22d..0000000
--- a/libs/kfs/unix/syspath.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#include <kfs/extern.h>
-
-#include <kfs/path.h>
-#include "path-priv.h"
-
-#include <klib/rc.h>
-#include <klib/log.h>
-#include <klib/debug.h>
-
-#include <stdlib.h>
-
-#include <string.h>
-#include <unistd.h>
-
-rc_t KPathTransformSysPath (KPath * self)
-{
-#if 1
-    return 0;
-#else
-    size_t path_size = strlen (sys_path) + 1; /* includes NUL */
-    rc_t rc = 0;
-    void * temp = self->storage;
-
-    if (self->storage == self->buffer)
-    {
-        if (path_size > sizeof (self->buffer))
-            temp = self->storage = NULL;
-    }
-    else if (self->alloc_size < path_size)
-    {
-        temp = NULL;
-    }
-
-    if (temp == NULL)
-    {
-        temp = realloc (self->storage, path_size);
-        if (temp == NULL)
-        {
-            rc = RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
-            if (self->alloc_size == 0)
-                self->storage = self->buffer;
-        }
-        else
-        {
-            self->alloc_size = path_size;
-            self->storage = temp;
-        }
-    }
-    if (rc == 0)
-    {
-        /* replace this with a minimal path validator */
-        strcpy (self->storage, sys_path);
-        self->asciz_size = path_size-1;
-    }
-    return rc;
-#endif
-}
-
-
-rc_t KPathGetCWD (char * buffer, size_t buffer_size)
-{
-    char * temp = getcwd (buffer, buffer_size);
-    if (temp == NULL)
-        return RC (rcFS, rcPath, rcAccessing, rcBuffer, rcInsufficient);
-    return 0;
-}
-
-
-#if USE_EXPERIMENTAL_CODE
-rc_t KPathTransformPathHier (char ** ppath)
-{
-    char * pc;
-
-    pc = *ppath;
-    PATH_DEBUG (("%s: incoming path '%s'\n",__func__, *ppath));
-
-    if ((pc[0] == '/') && (pc[1] == '/'))
-    {
-        pc += 2;
-
-        if (pc[0] != '/')
-        {
-            static const char localhost[] = "localhost";
-            size_t z = strlen (localhost);
-
-            if (strncmp (localhost, pc, z ) == 0)
-                pc += z;
-            else
-            {
-                rc_t rc =  RC (rcFS, rcPath, rcConstructing, rcUri, rcIncorrect);
-                LOGERR (klogErr, rc, "illegal host in kfs/path url");
-                return rc;
-            }
-        }
-        *ppath = pc;
-    }
-    PATH_DEBUG (("%s: outgoing path '%s'\n",__func__, *ppath));
-    return 0;
-}
-#endif
diff --git a/libs/kfs/win/lnk_tools.c b/libs/kfs/win/lnk_tools.c
index a85f31c..853d441 100644
--- a/libs/kfs/win/lnk_tools.c
+++ b/libs/kfs/win/lnk_tools.c
@@ -23,6 +23,9 @@
 * ===========================================================================
 *
 */
+
+#include <sysalloc.h>
+
 #include <Shlobj.h>
 
 #define LNK_RES_ERROR 0
@@ -375,7 +378,8 @@ static wchar_t * win_assemble_lnk( const wchar_t *path, const size_t exists, siz
 
         *remaining = 0;
         path_len = wcslen( path );
-        buff_len = ( path_len + 5 ) * sizeof( * path );
+        #define ExtraChars 5
+        buff_len = ( path_len + ExtraChars ) * sizeof( * path );
         res = (wchar_t *)malloc( buff_len );
         if ( res != NULL )
         {
@@ -392,13 +396,14 @@ static wchar_t * win_assemble_lnk( const wchar_t *path, const size_t exists, siz
             /* if the string to be copied does not fit into the buffer 
                wcsncpy_s will terminate the application instead of returning
                an error !!! */
-            wcsncpy_s( res, buff_len, path, term );
+            wcsncpy_s( res, path_len + ExtraChars, path, term ); /* 2nd argument is in elements, not bytes */
             res[ term + 0 ] = L'.';
             res[ term + 1 ] = L'l';
             res[ term + 2 ] = L'n';
             res[ term + 3 ] = L'k';
             res[ term + 4 ] = 0;
         }
+        #undef ExtraChars
     }
     return res;
 }
diff --git a/libs/kfs/win/sysdir-priv.h b/libs/kfs/win/sysdir-priv.h
index 4568d15..1ae8cc7 100644
--- a/libs/kfs/win/sysdir-priv.h
+++ b/libs/kfs/win/sysdir-priv.h
@@ -78,10 +78,10 @@ rc_t KSysDirMakePath ( const KSysDir* self, enum RCContext ctx, bool canon,
 #endif
 
 
-/* RealPath
+/* OSPath
  *  returns a real OS path
  */
-rc_t KSysDirRealPath ( const KSysDir *self,
+rc_t KSysDirOSPath ( const KSysDir *self,
     wchar_t *real, size_t bsize, const char *path, va_list args );
 
 
diff --git a/libs/kfs/win/sysdir.c b/libs/kfs/win/sysdir.c
index a97177f..fc9a333 100644
--- a/libs/kfs/win/sysdir.c
+++ b/libs/kfs/win/sysdir.c
@@ -43,10 +43,12 @@ struct KSysDir;
 #include <klib/log.h>
 #include <klib/out.h>
 #include <klib/debug.h>
+#include <klib/klib-priv.h>
 
 #include <sysalloc.h>
 
 #include <stdio.h>
+#include <wchar.h>
 #include <stdarg.h>
 #include <assert.h>
 #include <WINDOWS.H>
@@ -107,8 +109,8 @@ rc_t KSysDirEnumInit ( KSysDirEnum *self, const wchar_t *path )
         rc = RC ( rcFS, rcDirectory, rcListing, rcNoObj, rcUnknown );
     }
 
-    PLOGERR ( klogErr,
-             ( klogErr, rc, "error FindWirstFileW - $(E) - $(C)",
+    PLOGERR ( klogInfo,
+             ( klogInfo, rc, "error FindFirstFileW - $(E) - $(C)",
               "E=%!,C=%u", err, err ) ); 
 
     return rc;
@@ -279,6 +281,35 @@ rc_t translate_file_error( DWORD error, enum RCContext ctx )
 }
 
 
+/* helper */
+
+static rc_t print_error_for( const wchar_t * path, const char * function, enum RCContext ctx, KLogLevel level )
+{
+    DWORD error = GetLastError();
+    rc_t rc = translate_file_error( error, ctx );
+#if _DEBUGGING
+    char buffer[ 4096 ];
+    size_t src_size, dst_size, len;
+    wchar_cvt_string_measure ( path, &src_size, &dst_size );
+    len = wchar_cvt_string_copy ( buffer, sizeof buffer, path, src_size );
+    buffer[ len ] = 0;
+    PLOGERR ( level,
+              ( level, rc, "error $(F) - $(E) - $(C) for $(D)",
+                "F=%s,E=%!,C=%u,D=%s", function, error, error, buffer ) ); 
+#endif
+    return rc;
+}
+
+
+static void wchar_2_char( const wchar_t * path, char * buffer, size_t buflen )
+{
+    size_t src_size, dst_size, len;
+    wchar_cvt_string_measure ( path, &src_size, &dst_size );
+    len = wchar_cvt_string_copy ( buffer, buflen, path, src_size );
+    buffer[ len ] = 0;
+}
+
+
 static
 uint32_t KSysDirPathTypeFromFindData ( WIN32_FIND_DATA *find_data, 
                                        const wchar_t * path,
@@ -381,9 +412,7 @@ uint32_t KSysDirFullPathType ( const wchar_t *path )
             return KSysDirResolvePathAndDetectPathType ( path );
         default:
             DBGMSG ( DBG_KFS, DBG_FLAG_ANY, ( "FindFirstFileW: WARNING - unrecognized return code - %u.\n", status ) );
-            PLOGERR ( klogErr,
-                     ( klogErr, 0, "error FindWirstFileW - $(E) - $(C)",
-                      "E=%!,C=%u", status, status ) ); 
+            print_error_for( path, "FindFirstFileW", rcResolving, klogErr );
             return kptBadPath;
         }
     }
@@ -559,7 +588,7 @@ rc_t KSysDirMakePath ( const KSysDir* self, enum RCContext ctx, bool canon,
                 return RC ( rcFS, rcDirectory, ctx, rcPath, rcInvalid );
 
             /* rewrite drive letter */
-            temp_utf8_buffer [ 0 ] = toupper ( temp_utf8_buffer [ 1 ] );
+            temp_utf8_buffer [ 0 ] = tolower ( temp_utf8_buffer [ 1 ] );
             temp_utf8_buffer [ 1 ] = ':';
         }
     }
@@ -616,7 +645,7 @@ rc_t KSysDirMakePath ( const KSysDir* self, enum RCContext ctx, bool canon,
     return 0;
 }
 
-rc_t KSysDirRealPath ( const KSysDir *self,
+rc_t KSysDirOSPath ( const KSysDir *self,
     wchar_t *real, size_t real_size, const char *path, va_list args )
 {
     return KSysDirMakePath ( self, rcLoading, true, real, real_size, path, args );
@@ -871,27 +900,18 @@ rc_t KSysDirRelativePath ( const KSysDir *self, enum RCContext ctx,
     const wchar_t *root, wchar_t *path, size_t path_max )
 {
     size_t psize;
-    uint32_t backup, blength_in_chars;
+    uint32_t backup, blength_in_chars, dst, diff_from_here;
 
     const wchar_t *r = root + self->root;
     const wchar_t *p = path + self->root;
 
-    for ( ; * r == * p; ++ r, ++ p )
+    for ( ; towlower ( * r ) == towlower ( * p ); ++ r, ++ p )
     {
         /* disallow identical paths */
         if ( * r == 0 )
             return RC( rcFS, rcDirectory, ctx, rcPath, rcInvalid );
     }
 
-    /* special case for windows: a network path like "\\panfs\traces01\" 
-       cannot be made relative to a working directory ! */
-
-    /* NB - THE BUG HERE IS THAT THE TWO PATHS MUST BE ON DIFFERENT FILE SYSTEMS */
-    if ( ( path[0] == '\\' ) && ( path[1] == '\\' ) )
-    {
-/*        return 0; */
-    }
-
     /* paths are identical up to "r","p"
        if "r" is within a leaf name, then no backup is needed
        by counting every '\\' from "r" to end, obtain backup count */
@@ -905,31 +925,35 @@ rc_t KSysDirRelativePath ( const KSysDir *self, enum RCContext ctx,
     blength_in_chars = backup * 3;
 
     /* align "p" to last directory separator */
-    while ( p [ -1 ] != '\\' ) -- p;
+    if ( p > path ) {
+        while ( p [ -1 ] != '\\' ) -- p;
+    }
 
     /* the size of the remaining relative path */
     psize = wcslen ( p );
+    diff_from_here = ( uint32_t )( p - path );
 
     /* open up space if needed */
-    if ( (uint32_t)( p - path ) < blength_in_chars )
+    if ( diff_from_here < blength_in_chars )
     {
         /* prevent overflow */
         if ( ( blength_in_chars + psize ) * sizeof( *path ) >= path_max )
             return RC( rcFS, rcDirectory, ctx, rcPath, rcExcessive );
-        memmove ( path + blength_in_chars, p, psize * sizeof *p );
+        memmove ( & path[ blength_in_chars ], p, psize * ( sizeof *p ) );
     }
 
     /* insert backup sequences */
-    for ( blength_in_chars = 0; backup > 0; blength_in_chars += 3, -- backup )
+    for ( dst = 0; backup > 0; -- backup )
     {
-        path [ blength_in_chars + 0 ] = '.';
-        path [ blength_in_chars + 1 ] = '.';
-        path [ blength_in_chars + 2 ] = '\\';
+        path [ dst++ ] = '.';
+        path [ dst++ ] = '.';
+        path [ dst++ ] = '\\';
     }
 
     /* close gap */
-    if ( ( uint32_t) ( p - path ) > blength_in_chars )
+    if ( diff_from_here > blength_in_chars )
         wcscpy ( & path [ blength_in_chars ], p );
+    path[ blength_in_chars + psize ] = 0;
 
     return 0;
 }
@@ -957,10 +981,15 @@ rc_t CC KSysDirResolvePath ( const KSysDir *self, bool absolute,
     uint32_t temp_length;
 
     /* convert the utf8-input-parameter path into wchar_t */
-    rc_t rc = KSysDirMakePath( self, rcResolving, true, temp, sizeof temp, path, args);
+    rc_t rc = KSysDirMakePath ( self, rcResolving, true, temp, sizeof temp, path, args );
     if ( rc != 0 )
         return rc;
 
+    temp[ 0 ] = tolower( temp[ 0 ] ); /* this is important:
+                                         otherwise the comparison for is_on_same_drive_letter fails
+                                         AND
+                                         KSysDirRelativePath() fails too! */
+
     temp_length = wchar_string_measure ( temp, &temp_size );
     if ( absolute )
     {
@@ -970,11 +999,26 @@ rc_t CC KSysDirResolvePath ( const KSysDir *self, bool absolute,
     }
     else
     {
-        rc = KSysDirRelativePath( self, rcResolving, self->path, temp, sizeof temp /* temp_size */ );
-        if ( rc == 0 )
+        /* we are on windows, only if the path has a drive letter and it is the same
+           one as in KSysDir itself, we should try to create a relative path */
+        wchar_t colon = ':';
+        bool is_on_same_drive_letter = ( iswascii ( temp[ 0 ] ) && iswascii ( self->path[ 0 ] ) &&
+                                         ( temp[ 1 ] == colon ) && ( self->path[ 1 ] == colon ) &&
+                                         ( towlower ( temp[ 0 ] ) == towlower ( self->path[ 0 ] ) ) );
+        if ( is_on_same_drive_letter )
         {
-            uint32_t temp_length = wchar_string_measure ( temp, &temp_size );
-            if ( temp_length >= rsize )
+            rc = KSysDirRelativePath( self, rcResolving, self->path, temp, sizeof temp );
+            if ( rc == 0 )
+            {
+                uint32_t temp_length = wchar_string_measure ( temp, &temp_size );
+                if ( temp_length >= rsize )
+                    return RC ( rcFS, rcDirectory, rcResolving, rcBuffer, rcInsufficient );
+            }
+        }
+        else
+        {
+            /* treat it as if absolute were requested ( see above ) */
+            if ( temp_length - self->root >= rsize )
                 return RC ( rcFS, rcDirectory, rcResolving, rcBuffer, rcInsufficient );
         }
     }
@@ -1222,15 +1266,25 @@ rc_t CC KSysDirRename ( KSysDir *self, bool force, const char *from, const char
     rc_t rc = KSysDirMakePath ( self, rcRenaming, false, current_name, sizeof current_name, from, NULL );
     if ( rc == 0 )
     {
+
         wchar_t new_name[ MAX_PATH ];
         rc = KSysDirMakePath ( self, rcRenaming, false, new_name, sizeof new_name, to, NULL );
         if ( rc == 0 )
         {
             DWORD err = 0;
             uint32_t try = 0;
+
             do
             {
-                if ( MoveFileW( current_name, new_name ) )
+                BOOL success = false;
+                if ( force ) {
+                    DWORD dwFlags = MOVEFILE_REPLACE_EXISTING;
+                    success = MoveFileEx ( current_name, new_name, dwFlags );
+                }
+                else {
+                    success = MoveFileW ( current_name, new_name );
+                }
+                if ( success )
                 {
                     rc = 0;
                 }
@@ -1248,6 +1302,8 @@ rc_t CC KSysDirRename ( KSysDir *self, bool force, const char *from, const char
                             Sleep( 500 ); /* sleep for a half a second */
                             rc = RC ( rcFS, rcDirectory, rcRenaming, rcFile, rcUnauthorized );
                             break;
+                       case ERROR_SHARING_VIOLATION:
+                           return RC ( rcFS, rcDirectory, rcRenaming, rcFile, rcBusy );
                         default:
                             return RC ( rcFS, rcDirectory, rcRenaming, rcNoObj, rcUnknown );
                     }
@@ -1432,9 +1488,7 @@ rc_t KSysDirRemoveEntry ( wchar_t *path, size_t path_max, bool force )
                         if ( !RemoveDirectoryW( path ) )
                         {
                             rc = RC ( rcFS, rcDirectory, rcRemoving, rcDirectory, rcUnauthorized );
-                            PLOGERR ( klogErr,
-                                      ( klogErr, rc, "error RemoveDirectoryW - $(E) - $(C)",
-                                       "E=%!,C=%u", error, error ) ); 
+                            print_error_for( path, "RemoveDirectoryW", rcRemoving, klogErr );
                         }
                     }
                     return rc;
@@ -1448,9 +1502,8 @@ rc_t KSysDirRemoveEntry ( wchar_t *path, size_t path_max, bool force )
             default :
                 rc = RC ( rcFS, rcDirectory, rcCreating, rcNoObj, rcUnknown );
             }
-            PLOGERR ( klogErr,
-                      ( klogErr, rc, "error RemoveDirectoryW - $(E) - $(C)",
-                       "E=%!,C=%u", error, error ) ); 
+
+            print_error_for( path, "RemoveDirectoryW", rcRemoving, klogInfo);
             return rc;
         }
     }
@@ -1534,11 +1587,8 @@ rc_t get_attributes ( const wchar_t * wpath, uint32_t * access, KTime_t * date )
         *access = 0;
     if ( date != NULL )
         *date = 0;
-    error = GetLastError();
-    rc = translate_file_error( error, rcAccessing );
-    PLOGERR ( klogErr,
-              ( klogErr, rc, "error FindFirstFile - $(E) - $(C)",
-               "E=%!,C=%u", error, error ) ); 
+
+    rc = print_error_for( wpath, "FindFirstFile", rcAccessing, klogErr );
     return rc;
 }
 
@@ -1751,12 +1801,10 @@ rc_t make_dir ( const wchar_t *path, uint32_t access )
     {
         DWORD error = GetLastError();
         rc = translate_file_error( error, rcCreating );
-        if ( error != ERROR_ALREADY_EXISTS )
-        {
-            PLOGERR ( klogErr,
-                      ( klogErr, rc, "error CreateDirectoryW - $(E) - $(C)",
-                        "E=%!,C=%u", error, error ) );
-        }
+/*
+        Do not print an error code here, it is valid that this can happen!
+        rc = print_error_for( path, "CreateDirectoryW", rcCreating, klogErr );
+*/
     }
     return rc;
 }
@@ -1960,19 +2008,17 @@ rc_t CC KSysDirOpenFileRead ( const KSysDir *self,
     rc_t rc = KSysDirMakePath( self, rcOpening, false, file_name, sizeof file_name, path, args );
     if ( rc == 0 )
     {
-        HANDLE file_handle = CreateFileW( file_name, GENERIC_READ, FILE_SHARE_READ, NULL, 
+        HANDLE file_handle = CreateFileW( file_name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, 
                                 OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
         if ( file_handle == INVALID_HANDLE_VALUE )
         {
-            DWORD error = GetLastError();
-            rc = translate_file_error( error, rcOpening );
-            PLOGERR ( klogErr,
-                      ( klogErr, rc, "error CreateFileW - $(E) - $(C)",
-                        "E=%!,C=%u", error, error ) ); 
+            rc = print_error_for( file_name, "CreateFileW", rcOpening, klogInfo );
         }
         else
         {
-            rc = KSysFileMake ( ( KSysFile** ) f, file_handle, true, false );
+            char buffer[ MAX_PATH ];
+            wchar_2_char( file_name, buffer, sizeof buffer );
+            rc = KSysFileMake ( ( KSysFile** ) f, file_handle, buffer, true, false );
             if ( rc != 0 )
                 CloseHandle ( file_handle );
         }
@@ -2000,20 +2046,19 @@ rc_t CC KSysDirOpenFileWrite ( KSysDir *self,
     if ( rc == 0 )
     {
         DWORD dwDesiredAccess = update ? GENERIC_READ | GENERIC_WRITE : GENERIC_WRITE;
-        HANDLE file_handle = CreateFileW( file_name, dwDesiredAccess, 0, NULL, 
-                                OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
+        HANDLE file_handle = CreateFileW( file_name, dwDesiredAccess, FILE_SHARE_READ, NULL, 
+                                OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
 
         if ( file_handle == INVALID_HANDLE_VALUE )
         {
-            DWORD error = GetLastError();
-            rc = translate_file_error( error, rcAccessing );
-            PLOGERR ( klogErr,
-                      ( klogErr, rc, "error CreateFileW - $(E) - $(C)",
-                        "E=%!,C=%u", error, error ) ); 
+            rc = print_error_for( file_name, "CreateFileW", rcAccessing, klogErr );
+
         }
         else
         {
-            rc = KSysFileMake ( ( KSysFile** ) f, file_handle, update, true );
+            char buffer[ MAX_PATH ];
+            wchar_2_char( file_name, buffer, sizeof buffer );
+            rc = KSysFileMake ( ( KSysFile** ) f, file_handle, buffer, update, true );
             if ( rc != 0 )
                 CloseHandle ( file_handle );
         }
@@ -2085,17 +2130,29 @@ rc_t CC KSysDirCreateFile ( KSysDir *self, KFile **f, bool update,
 
             error = GetLastError();
             rc = translate_file_error( error, rcCreating );
+
+            /* disabled 12/12/2012 : it prints an error message, if vdb tries to open
+               the same reference-object twice via http. The lock-file for the 2nd try
+               does already exist. This is not an error, just a condition. */
+
+            /*
             PLOGERR ( klogErr,
                       ( klogErr, rc, "error CreateFileW - $(E) - $(C)",
                         "E=%!,C=%u", error, error ) ); 
+            */
+
             /* Unix code has a special case when creating an empty file, which is
                to say, creating a directory entry without needing to write to file */
             return rc;
         }
 
-        rc = KSysFileMake ( ( KSysFile** ) f, file_handle, update, true );
-        if ( rc != 0 )
-            CloseHandle ( file_handle );
+        {
+            char buffer[ MAX_PATH ];
+            wchar_2_char( file_name, buffer, sizeof buffer );
+            rc = KSysFileMake ( ( KSysFile** ) f, file_handle, path, update, true );
+            if ( rc != 0 )
+                CloseHandle ( file_handle );
+        }
     }
     return rc;
 }
@@ -2125,11 +2182,7 @@ rc_t CC KSysDirFileSize ( const KSysDir *self,
         }
         else
         {
-            DWORD error = GetLastError();
-            rc = translate_file_error( error, rcAccessing );
-            PLOGERR ( klogErr,
-                      ( klogErr, rc, "error GetFileAttributesEx - $(E) - $(C)",
-                        "E=%!,C=%u", error, error ) ); 
+            rc = print_error_for( file_name, "GetFileAttributesEx", rcAccessing, klogErr );
         }
     }
     return rc;
@@ -2172,11 +2225,7 @@ rc_t CC KSysDirSetFileSize ( KSysDir *self,
         }
         else
         {
-            DWORD error = GetLastError();
-            rc = translate_file_error( error, rcUpdating );
-            PLOGERR ( klogErr,
-                      ( klogErr, rc, "error CreateFileW - $(E) - $(C)",
-                        "E=%!,C=%u", error, error ) ); 
+            rc = print_error_for( file_name, "CreateFileW", rcUpdating, klogErr );
         }
     }
     return rc;
@@ -2371,11 +2420,7 @@ rc_t change_item_date( wchar_t *path, LPFILETIME win_time, bool dir_flag )
                                    OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
     if ( file_handle == INVALID_HANDLE_VALUE )
     {
-        DWORD error = GetLastError();
-        rc = translate_file_error( error, rcUpdating );
-        PLOGERR ( klogErr,
-                  ( klogErr, rc, "error CreateFileW - $(E) - $(C)",
-                    "E=%!,C=%u", error, error ) ); 
+        rc = print_error_for( path, "CreateFileW", rcUpdating, klogErr );
     }
     else
     {
@@ -2385,11 +2430,7 @@ rc_t change_item_date( wchar_t *path, LPFILETIME win_time, bool dir_flag )
         }
         else
         {
-            DWORD error = GetLastError();
-            rc = translate_file_error( error, rcUpdating );
-            PLOGERR ( klogErr,
-                      ( klogErr, rc, "error SetFileTime - $(E) - $(C)",
-                        "E=%!,C=%u", error, error ) ); 
+            rc = print_error_for( path, "SetFileTime", rcUpdating, klogErr );
         }
         CloseHandle ( file_handle );
     }
@@ -2678,10 +2719,21 @@ rc_t KDirectoryMakeFromRealPath ( KDirectory **dirp, const wchar_t *real, bool u
  *
  *  "dir" [ OUT ] - return parameter for native directory
  */
+extern rc_t CC ReportCWD ( const ReportFuncs *f, uint32_t indent );
+extern rc_t CC ReportRedirect ( KWrtHandler* handler,
+    const char* filename, bool* to_file, bool finalize );
+
 LIB_EXPORT rc_t CC KDirectoryNativeDir ( KDirectory **dirp )
 {
     rc_t rc;
 
+    static bool latch;
+    if ( ! latch )
+    {
+        ReportInitKFS ( ReportCWD, ReportRedirect );
+        latch = true;
+    }
+
     if ( dirp == NULL )
         rc = RC ( rcFS, rcDirectory, rcAccessing, rcParam, rcNull );
     else
@@ -2710,3 +2762,31 @@ LIB_EXPORT rc_t CC KDirectoryNativeDir ( KDirectory **dirp )
 
     return rc;
 }
+
+
+/* RealPath
+ *  exposes functionality of system directory
+ */
+LIB_EXPORT rc_t CC KSysDirRealPath ( struct KSysDir const *self,
+    char *real, size_t bsize, const char *path, ... )
+{
+    rc_t rc;
+    va_list args;
+
+    va_start ( args, path );
+    rc = KSysDirVRealPath ( self, real, bsize, path, args );
+    va_end ( args );
+
+    return rc;
+}
+
+LIB_EXPORT rc_t CC KSysDirVRealPath ( struct KSysDir const *self,
+    char *real, size_t bsize, const char *path, va_list args )
+{
+    /* Windows is ... challenged when it comes to answering
+       this question. What is needed is to 1) convert the path
+       to a Windows-style wchar path, then 2) resolve each of
+       its components, etc. to come up with a real path, then
+       3) rewrite the path as a UTF-8 POSIX path */
+    return KSysDirResolvePath ( self, true, real, bsize, path, args );
+}
diff --git a/libs/kfs/win/sysdll.c b/libs/kfs/win/sysdll.c
index 0a6a849..4dd3439 100644
--- a/libs/kfs/win/sysdll.c
+++ b/libs/kfs/win/sysdll.c
@@ -24,6 +24,10 @@
 *
 */
 
+#ifndef _WIN32_WINNT /* This file requires OS newer than Windows 2000 */
+# define _WIN32_WINNT 0x0501
+#endif
+
 #include <kfs/extern.h>
 
 #define TRACK_REFERENCES 0
@@ -33,6 +37,7 @@
 
 #include <kfs/dyload.h>
 #include <kfs/directory.h>
+#include <kfs/kfs-priv.h>
 #include <klib/refcount.h>
 #include <klib/vector.h>
 #include <klib/text.h>
@@ -311,7 +316,7 @@ LIB_EXPORT rc_t CC KDyldHomeDirectory ( const KDyld *self, const KDirectory **di
              * a type safe way to do this */
             BOOL success = GetModuleHandleEx ( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
                                                | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
-                                               (LPCSTR)func, & h );
+                                               ( const TCHAR * )func, & h );
             if ( success )
             {
                 wchar_t fname [ MAX_PATH ];
@@ -474,6 +479,9 @@ static
 rc_t KDyldLoad ( KDyld *self, KDylib *lib, const wchar_t *path )
 {
     DWORD err;
+#if WE_WERE_BUILDING_FOR_WINDOWS_7_ALONE
+    UINT errMode = GetErrorMode();
+#endif
 
 	if ( path == NULL )
 	{
@@ -483,15 +491,21 @@ rc_t KDyldLoad ( KDyld *self, KDylib *lib, const wchar_t *path )
         return RC ( rcFS, rcDylib, rcLoading, rcNoObj, rcUnknown );
 	}
 
+    SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX); /* suppress the message box in case of an error */
     lib -> handle = LoadLibraryW ( path );
+#if WE_WERE_BUILDING_FOR_WINDOWS_7_ALONE
+    SetErrorMode(errMode);
+#endif
     if ( lib -> handle != NULL )
         return KDylibSetLogging ( lib );
 
     err = GetLastError ();
     switch ( err )
     {
-    case ERROR_MOD_NOT_FOUND:
+    case ERROR_MOD_NOT_FOUND :
         return RC ( rcFS, rcDylib, rcLoading, rcPath, rcNotFound );
+    case ERROR_BAD_EXE_FORMAT :
+        return RC ( rcFS, rcDylib, rcLoading, rcFormat, rcInvalid );
     }
 
     return RC ( rcFS, rcDylib, rcLoading, rcNoObj, rcUnknown );
@@ -510,7 +524,7 @@ rc_t KDyldVTryLoadLib ( KDyld *self, KDylib **lib,
     {
         wchar_t real [ MAX_PATH ];
 
-		rc = KSysDirRealPath ( sdir, real, sizeof real, path, args );
+		rc = KSysDirOSPath ( sdir, real, sizeof real, path, args );
 		if ( rc == 0 )
 		{
 			WString pstr;
@@ -797,7 +811,8 @@ rc_t KDlsetWhack ( KDlset *self )
     return 0;
 }
 
-
+#define STRINGIZE(s) #s
+#define LIBNAME(pref, name, suff) STRINGIZE(pref) name STRINGIZE(suff)
 /* MakeSet
  *  load a dynamic library
  *
@@ -805,7 +820,7 @@ rc_t KDlsetWhack ( KDlset *self )
  */
 LIB_EXPORT rc_t CC KDyldMakeSet ( const KDyld *self, KDlset **setp )
 {
-    rc_t rc;
+    rc_t rc = 0;
 
     if ( setp == NULL )
         rc = RC ( rcFS, rcDylib, rcConstructing, rcParam, rcNull );
@@ -825,8 +840,20 @@ LIB_EXPORT rc_t CC KDyldMakeSet ( const KDyld *self, KDlset **setp )
                 VectorInit ( & set -> ord, 0, 16 );
                 KRefcountInit ( & set -> refcount, 1, "KDlset", "make", "dlset" );
 #if ! ALWAYS_ADD_EXE
-                * setp = set;
-                return 0;
+                {   
+                    KDylib *jni;
+                    const char* libname = LIBNAME(LIBPREFIX, "vdb_jni.", SHLIBEXT);
+                    if ( KDyldLoadLib ( ( KDyld* ) self, & jni, libname ) == 0 )
+                    {
+                        rc = KDlsetAddLib ( set, jni );
+                        KDylibRelease ( jni );
+                    }
+                    if (rc == 0)
+                    {
+                        * setp = set;
+                        return 0;
+                    }
+                }
 #else
                 {
                     KDylib *exe;
@@ -1288,6 +1315,80 @@ LIB_EXPORT rc_t CC KDlsetLastSymbol ( const KDlset *self, KSymAddr **sym, const
 }
 
 
+/* List - PRIVATE
+ *  list the paths to the libraries in the set
+ */
+typedef struct list_dylib_param list_dylib_param;
+struct list_dylib_param
+{
+    VNamelist *list;
+    rc_t rc;
+};
+
+static
+bool CC list_dylib ( void *item, void *data )
+{
+    size_t bytes;
+    char utf8 [ 4096 ], *p;
+
+    list_dylib_param *pb = data;
+    const KDylib *lib = ( const void* ) item;
+
+    /* "lib" was created with KDylibMake
+       which creates a NUL terminated path.
+       of course, this could seg-fault if bad... */
+    assert ( lib -> path . addr [ lib -> path . len ] == 0 );
+
+    /* convert wide-character to UTF-8 */
+    bytes = wchar_cvt_string_copy ( utf8, sizeof utf8, lib -> path . addr, lib -> path . size );
+    if ( bytes < sizeof utf8 )
+    {
+        pb -> rc = VNamelistAppend ( pb -> list, utf8 );
+        return pb -> rc != 0;
+    }
+
+    p = malloc ( 16 * 1024 );
+    if ( p == NULL )
+    {
+        pb -> rc = RC ( rcFS, rcDylib, rcListing, rcMemory, rcExhausted );
+        return true;
+    }
+
+    bytes = wchar_cvt_string_copy ( p, 16 * 1024, lib -> path . addr, lib -> path . size );
+    if ( bytes >= 16 * 1024 )
+        pb -> rc = RC ( rcFS, rcDylib, rcListing, rcPath, rcTooLong );
+    else
+        pb -> rc = VNamelistAppend ( pb -> list, p );
+
+    free ( p );
+    return pb -> rc != 0;
+}
+
+LIB_EXPORT rc_t CC KDlsetList ( const KDlset *self, KNamelist **listp )
+{
+    list_dylib_param pb;
+
+    assert ( listp != NULL );
+
+    if ( self == NULL )
+        pb . rc = RC ( rcFS, rcDylib, rcListing, rcSelf, rcNull );
+    else
+    {
+        pb . rc = VNamelistMake ( & pb . list, VectorLength ( & self -> name ) );
+        if ( pb . rc == 0 )
+        {
+            bool fail = VectorDoUntil ( & self -> name, false, list_dylib, & pb );
+            if ( ! fail )
+                pb . rc = VNamelistToNamelist ( pb . list, listp );
+
+            VNamelistRelease ( pb . list );
+        }
+    }
+
+    return pb . rc;
+}
+
+
 /* AsObj
  * AsFunc
  *  retrieve symbol address as pointer to object
diff --git a/libs/kfs/win/sysfile-priv.h b/libs/kfs/win/sysfile-priv.h
index 3306be8..f0d4ebe 100644
--- a/libs/kfs/win/sysfile-priv.h
+++ b/libs/kfs/win/sysfile-priv.h
@@ -49,13 +49,16 @@ struct KSysFile
     KFile dad;
     HANDLE handle;
     uint64_t pos;
+    bool failed_set_sparse;
+    bool is_sparse; /* throws off size dang it */
+    
 };
 
 /* KSysFileMake
  *  create a new file object
  *  from file descriptor
  */
-rc_t KSysFileMake ( KSysFile **fp, HANDLE fd, bool read_enabled, bool write_enabled );
+rc_t KSysFileMake ( KSysFile **fp, HANDLE fd, const char *path, bool read_enabled, bool write_enabled );
 
 
 #ifdef __cplusplus
diff --git a/libs/kfs/win/sysfile.c b/libs/kfs/win/sysfile.c
index e8a34be..681b0cc 100644
--- a/libs/kfs/win/sysfile.c
+++ b/libs/kfs/win/sysfile.c
@@ -26,6 +26,7 @@
 
 #include <kfs/extern.h>
 
+
 /*--------------------------------------------------------------------------
  * forwards
  */
@@ -38,13 +39,223 @@ struct KSysFile;
 #include <klib/text.h>
 #include <sysalloc.h>
 
+/* temporary */
+/* #include <klib/out.h> */
+
+
+
 #include <Windows.h>
+/* #include <WinIoCtl.h> nested include in Windows.h? */
 
 /*--------------------------------------------------------------------------
  * KSysFile
  *  a Windows file
  */
 
+/* minimum set size or write beyond size difference to trigger setting sparse */
+/* tune this if too many or too few sparse files */
+#define MIN_SET_SPARSE_DIFF   (16*1024)
+#define MIN_SPARSE_BLOCK_DIFF  (4*1024)
+
+
+/* ----------
+ * Some functions to isolate the calls to Windows functions as I feel dirty
+ * just using them.
+ * really its to isolate some calls the very different style of parmaters
+ * for the calls from the usualy project approach.
+ *
+ * if the compiler inlines them it's all good.
+ */
+
+/*
+ * Get file size 
+ */
+static rc_t get_file_size (const KSysFile * self, uint64_t * size)
+{
+    LARGE_INTEGER sz;
+
+    if ( GetFileSizeEx ( self -> handle, & sz ) == 0 )
+    {
+        rc_t rc;
+        DWORD last_error;
+
+        last_error = GetLastError ();
+        switch ( last_error )
+        {
+        case ERROR_INVALID_HANDLE:
+            rc = RC ( rcFS, rcFile, rcAccessing, rcFileDesc, rcInvalid );
+            break;
+        default:
+            rc = RC ( rcFS, rcFile, rcAccessing, rcNoObj, rcUnknown );
+            break;
+        }
+        PLOGERR (klogErr,
+                 (klogErr, rc, "error accessing file system status - $(E)($(C))",
+                  "E=%!,C=%u", last_error, last_error)); 
+        return rc;
+    }
+    *size = sz.QuadPart;
+
+    return 0;
+}
+
+
+/* returns (and side effect sets in structure)
+ * if the file is already a sparse file
+ */
+static bool check_if_sparse (KSysFile * self)
+{
+    BY_HANDLE_FILE_INFORMATION info;
+    BOOL worked;
+
+    if (self->is_sparse)
+        return true;
+
+    /*
+     * we don't use the GetFileInformationBy HandleEx as we don't want to 
+     * exclude Win XP yet.
+     */
+    worked = GetFileInformationByHandle (self->handle, &info);
+
+    self->is_sparse = 
+        ((info.dwFileAttributes & FILE_ATTRIBUTE_SPARSE_FILE)
+         == FILE_ATTRIBUTE_SPARSE_FILE);
+
+    return self->is_sparse;
+}
+
+/*
+ * make a file sparse set_it == true
+ * return is like Windows funcs with true being good
+ *
+ * we can't set if the Windows Volume doesn't allow it
+ * but we'll let the function fail rather than try to get the value at 
+ * CREATE (open) time because we'd be then checking at all file CREATE
+ * whether we'd ever make it sparse or not
+ */
+static
+bool set_sparse (KSysFile * self)
+{
+    FILE_SET_SPARSE_BUFFER b = { true };
+    DWORD ret;
+    BOOL worked;
+    bool rreett = false;
+
+    /* don't duplicate effort */
+    if (self->is_sparse)
+        rreett =  true;
+
+    else if (self->failed_set_sparse)
+        rreett = false;
+
+    else
+    {
+        worked = DeviceIoControl (self->handle, FSCTL_SET_SPARSE, &b, sizeof b,
+                              NULL, 0, &ret, NULL);
+/*         KOutMsg ("%s: %u\n",__func__,worked); */
+
+        /* not trusting bool is BOOL cause I don't trust Microsoft */
+        self->failed_set_sparse = (worked == 0);
+        self->is_sparse = !self->failed_set_sparse;
+        rreett =  self->is_sparse;
+    }
+/*     KOutMsg ("%s: %d\n",__func__,rreett); */
+    return rreett;
+}
+
+
+static bool set_not_sparse (KSysFile * self)
+{
+    FILE_SET_SPARSE_BUFFER b = { false };
+    DWORD ret;
+    BOOL worked;
+
+    /* don't duplicate effort */
+    if (!check_if_sparse (self))
+        return true;
+
+    if (self->failed_set_sparse)
+        return false;
+
+    worked = DeviceIoControl (self->handle, FSCTL_SET_SPARSE, &b, sizeof b,
+                              NULL, 0, &ret, NULL);
+
+    /* not trusting bool is BOOL cause I don't trust Microsoft */
+    self->failed_set_sparse = (worked == 0);
+    self->is_sparse = self->failed_set_sparse;
+    return ! self->is_sparse;
+}
+
+/*
+ * this one works for non-sparse files too but what evs.
+ */
+static rc_t set_zero_region (KSysFile * self, uint64_t start, uint64_t size)
+{
+    FILE_ZERO_DATA_INFORMATION b = { start, start + size };
+    DWORD ret;
+    BOOL worked;
+
+    worked = DeviceIoControl (self->handle, FSCTL_SET_ZERO_DATA,
+                            &b, sizeof b,
+                            NULL, 0,
+                            &ret, NULL);
+
+    /* TODO: check error codes with GetLastError and better rc values */
+    return (worked != 0) ? 0 : RC (rcFS, rcFile, rcWriting, rcBuffer, rcUnexpected);
+}
+
+
+/*
+ * returns true if we can convert this file into a non-sparse file
+ *
+ * We went simple and fast.  We ask about zero regions.
+ * if we specifically get back that there are none we say true
+ * otherwise we say false.
+ *
+ * self can be modified so it can not be const
+ */
+static bool can_be_made_not_sparse (KSysFile * self     )
+{
+#if 1
+    return false;
+#else
+    /* this is backwards - the list of os non-zero regions not zero regions */
+    LARGE_INTEGER fo;
+    LARGE_INTEGER l;
+    uint64_t size;
+    FILE_ALLOCATED_RANGE_BUFFER i;
+    FILE_ALLOCATED_RANGE_BUFFER o [16]; /* some none 0 number */
+    uint64_t count;
+    DWORD ret;
+    BOOL worked;
+    rc_t rc;
+
+    /* if is isn't sparse we can't make it not sparse */
+    /* first might be not yet set */
+    if (!check_if_sparse (self))
+        return true;
+
+    /* we can't scan for zero regions if we can't get a size */
+    rc = get_file_size (self, &size);
+    if (rc)
+        return false;
+
+    /* Microsoft APIs can be fairly odd */
+    fo.QuadPart = 0;
+    l.QuadPart = size;
+    i.FileOffset = fo;
+    i.Length = l;
+
+    worked = DeviceIoControl (self->handle, FSCTL_QUERY_ALLOCATED_RANGES,
+                              &i, sizeof i, o, sizeof o, & ret, NULL);
+    /* we can't change to non-sparse if we can't scan for zero regions */
+    if (worked == 0)
+        return false;
+
+    return (ret == 0);
+#endif
+}
+
 
 /* Destroy
  */
@@ -142,6 +353,11 @@ uint32_t CC KSysFileType ( const KSysFile *self )
 static
 rc_t CC KSysDiskFileSize ( const KSysFile *self, uint64_t *size )
 {
+#if 1
+/*     KOutMsg ("%s:\n",__func__); */
+    return get_file_size (self, size);
+#else
+
     LARGE_INTEGER sz;
 
     if ( GetFileSizeEx ( self -> handle, & sz ) == 0 )
@@ -167,6 +383,7 @@ rc_t CC KSysDiskFileSize ( const KSysFile *self, uint64_t *size )
 
     *size = sz . QuadPart;
     return 0;
+#endif
 }
 
 
@@ -189,17 +406,27 @@ rc_t CC KSysDiskFileSetSize ( KSysFile *self, uint64_t size )
 {
     rc_t rc = 1;
     LARGE_INTEGER p;
+    uint64_t prev_size;
+
+/*     KOutMsg ("%s:\n",__func__); */
+    /* get previous size for setting or clearing sparse */
+    rc = get_file_size ( self, &prev_size);
+    if (rc)
+        return rc;
+/*     KOutMsg ("%s: %lu\n",__func__, prev_size); */
 
     p . QuadPart = size;
 
     if ( SetFilePointerEx ( self -> handle, p, & p, FILE_BEGIN ) )
     {
+        self -> pos = size;
         if ( SetEndOfFile( self -> handle ) )
         {
             rc = 0;
         }
     }
 
+    /* failure to set size*/
     if ( rc != 0 )
     {
         DWORD last_error;
@@ -212,10 +439,44 @@ rc_t CC KSysDiskFileSetSize ( KSysFile *self, uint64_t size )
         default:
             rc = RC ( rcFS, rcFile, rcUpdating, rcNoObj, rcUnknown );
         }
-        PLOGERR (klogErr,
-                 (klogErr, rc, "error accessing file system status - $(E)($(C))",
-                  "E=%!,C=%u", last_error, last_error)); 
+        PLOGERR ( klogErr,
+                 ( klogErr, rc, "error setting filesize - $(E) - $(C) to $(D)",
+                   "E=%!,C=%u,D=%lu", last_error, last_error, size ) ); 
+    }
+
+    /* check for wanting to be sparse file */
+    if (size > prev_size)
+    {
+        uint64_t diff;
+
+/*         KOutMsg ("%s: size(%lu) larger than prev_size(%lu)\n",__func__, size, prev_size); */
+
+        diff = size - prev_size;
+
+        /* if block size if big enough we'll try to make it a sparse block */
+        if (diff >= MIN_SPARSE_BLOCK_DIFF)
+        {
+/*             KOutMsg ("%s: diff(%lu) larger than block constant(%lu)\n",__func__, diff, MIN_SPARSE_BLOCK_DIFF); */
+            /* set sparse? */
+            if (!check_if_sparse(self)) /* isn't sparse now */
+            {
+                if (diff >= MIN_SET_SPARSE_DIFF)
+                {
+/*                     KOutMsg ("%s: diff(%lu) larger than sparse constant(%lu)\n",__func__, diff, MIN_SET_SPARSE_DIFF); */
+                    (void)set_sparse (self);
+                }
+            }
+            /* ordered to try to set before looking to set the zero region */
+            if (self->is_sparse)
+            {
+                /* set sparse region at end */
+                set_zero_region (self, prev_size, diff);
+            }
+        }
     }
+    else if (can_be_made_not_sparse (self))
+        (void)set_not_sparse (self);
+
     return rc;
 }
 
@@ -300,16 +561,17 @@ rc_t CC KSysDiskFileRead ( const KSysFile *cself, uint64_t pos,
                 rc = RC ( rcFS, rcFile, rcPositioning, rcNoObj, rcUnknown );
                 break;
             }
-            PLOGERR (klogErr,
-                     (klogErr, rc, "error positioning system file - $(E)($(C))",
-                      "E=%!,C=%u", last_error, last_error)); 
+            PLOGERR ( klogErr,
+                     ( klogErr, rc, "error positioning system file - $(E)($(C)) to $(D)",
+                       "E=%!,C=%u,D=%u", last_error, last_error, pos ) ); 
             return rc;
         }
 
-        /* if we try to read behind the end of the file... */
-        if ( pos > p . QuadPart )
-        {
-            return RC ( rcFS, rcFile, rcPositioning, rcFileDesc, rcInvalid );
+        /* if we try to read beyond the end of the file... */
+        if ( pos >= p . QuadPart )
+        {   /* We've defined reading beyond EOF as return RC of 0 but bytes read as 0 */
+            /*return RC ( rcFS, rcFile, rcPositioning, rcFileDesc, rcInvalid );*/
+            return 0;
         }
 
         p . QuadPart = pos;
@@ -329,9 +591,9 @@ rc_t CC KSysDiskFileRead ( const KSysFile *cself, uint64_t pos,
                 return rc;
             default:
                 rc = RC ( rcFS, rcFile, rcPositioning, rcNoObj, rcUnknown );
-                PLOGERR (klogErr,
-                         (klogErr, rc, "error positioning system file - $(E)($(C))",
-                          "E=%!,C=%u", last_error, last_error)); 
+                PLOGERR ( klogErr,
+                          ( klogErr, rc, "error positioning system file - $(E)($(C)) to $(D)",
+                            "E=%!,C=%u,D=%lu", last_error, last_error, pos ) ); 
                 return rc;
             }
         }
@@ -431,7 +693,7 @@ rc_t KSysFileWriteCommon ( KSysFile *self,
 
             case ERROR_NOT_ENOUGH_MEMORY:
                 rc = RC (rcFS, rcFile, rcWriting, rcMemory, rcExhausted);
-                fmt = "error out of memory for WindoowsWriteFile - $(E)($(C))";
+                fmt = "error out of memory for WindowsWriteFile - $(E)($(C))";
                 break;
 
             default:
@@ -460,15 +722,28 @@ static
 rc_t CC KSysDiskFileWrite ( KSysFile *self, uint64_t pos,
     const void *buffer, size_t size, size_t *num_writ)
 {
+    rc_t rc;
     if ( self -> pos != pos )
     {
         LARGE_INTEGER p;
+        uint64_t curr_size;
+
+        rc = get_file_size ( self, &curr_size );
+        if ( rc != 0 )
+            return rc;
+
+        if ( curr_size < pos )
+        {
+            rc = KSysDiskFileSetSize (self, pos);
+            if (rc)
+                return rc;
+        }
+
 
         p . QuadPart = pos;
 
         if ( SetFilePointerEx ( self -> handle, p, & p, FILE_BEGIN ) == 0 )
         {
-            rc_t rc;
             DWORD last_error;
 
             last_error = GetLastError ();
@@ -596,7 +871,7 @@ static const KFile_vt_v1 vtKSysStdIOOtherFile =
 
 
 static
-rc_t KSysFileMakeVT ( KSysFile **fp, HANDLE fd, const KFile_vt *vt,
+rc_t KSysFileMakeVT ( KSysFile **fp, HANDLE fd, const KFile_vt *vt, const char *path,
     uint64_t initial_pos, bool read_enabled, bool write_enabled )
 {
     rc_t rc;
@@ -610,11 +885,13 @@ rc_t KSysFileMakeVT ( KSysFile **fp, HANDLE fd, const KFile_vt *vt,
         rc = RC(rcFS, rcFile, rcConstructing, rcMemory, rcExhausted);
     else
     {
-        rc = KFileInit ( & f -> dad, vt, read_enabled, write_enabled );
+        rc = KFileInit ( & f -> dad, vt, "KSysFile", path, read_enabled, write_enabled );
         if ( rc == 0 )
         {
             f -> handle = fd;
-	    f -> pos = initial_pos;
+            f -> pos = initial_pos;
+            f -> failed_set_sparse = f->is_sparse = false;
+            check_if_sparse (f);
             *fp = f;
             return 0;
         }
@@ -629,7 +906,7 @@ rc_t KSysFileMakeVT ( KSysFile **fp, HANDLE fd, const KFile_vt *vt,
 #define ISSTDIO 2
 
 static
-rc_t KSysFileMakeInt ( KSysFile **fp, HANDLE fd, bool read_enabled, bool write_enabled, unsigned flags )
+rc_t KSysFileMakeInt ( KSysFile **fp, HANDLE fd, const char *path, bool read_enabled, bool write_enabled, unsigned flags )
 {
     DWORD ret;
     const KFile_vt * vt;
@@ -646,7 +923,7 @@ rc_t KSysFileMakeInt ( KSysFile **fp, HANDLE fd, bool read_enabled, bool write_e
     {
     case FILE_TYPE_DISK:
         flags |= ISDISK;
-	initial_pos = -1;
+        initial_pos = -1;
         break;
 
     case FILE_TYPE_UNKNOWN:
@@ -662,12 +939,12 @@ rc_t KSysFileMakeInt ( KSysFile **fp, HANDLE fd, bool read_enabled, bool write_e
             break;
         }
 
-	initial_pos = 0;
+        initial_pos = 0;
         flags &= ~ISDISK;
         break;
 
     default:
-	initial_pos = 0;
+        initial_pos = 0;
         flags &= ~ISDISK;
         break;
     }
@@ -691,13 +968,13 @@ rc_t KSysFileMakeInt ( KSysFile **fp, HANDLE fd, bool read_enabled, bool write_e
         break;
     }
 
-    return KSysFileMakeVT ( fp, fd, vt, initial_pos, read_enabled, write_enabled );
+    return KSysFileMakeVT ( fp, fd, vt, path, initial_pos, read_enabled, write_enabled );
 }
 
 /* extern, but internal to libkfs */
-rc_t KSysFileMake ( KSysFile **fp, HANDLE fd, bool read_enabled, bool write_enabled )
+rc_t KSysFileMake ( KSysFile **fp, HANDLE fd, const char *path, bool read_enabled, bool write_enabled )
 {
-    return KSysFileMakeInt ( fp, fd, read_enabled, write_enabled, 0 );
+    return KSysFileMakeInt ( fp, fd, path, read_enabled, write_enabled, 0 );
 }
 
 
@@ -707,7 +984,7 @@ rc_t KSysFileMake ( KSysFile **fp, HANDLE fd, bool read_enabled, bool write_enab
 LIB_EXPORT rc_t CC KFileMakeStdIn ( const KFile **fp )
 {
     HANDLE fd = GetStdHandle ( STD_INPUT_HANDLE );
-    return KSysFileMakeInt ( (KSysFile**)fp, fd, true, false, ISSTDIO );
+    return KSysFileMakeInt ( (KSysFile**)fp, fd, "stdin", true, false, ISSTDIO );
 }
 
 /* MakeStdOut
@@ -717,11 +994,25 @@ LIB_EXPORT rc_t CC KFileMakeStdIn ( const KFile **fp )
 LIB_EXPORT rc_t CC KFileMakeStdOut ( KFile **fp )
 {
     HANDLE fd = GetStdHandle ( STD_OUTPUT_HANDLE );
-    return KSysFileMakeInt ( (KSysFile**)fp, fd, false, true, ISSTDIO );
+    return KSysFileMakeInt ( (KSysFile**)fp, fd, "stdout", false, true, ISSTDIO );
 }
 
 LIB_EXPORT rc_t CC KFileMakeStdErr ( KFile **fp )
 {
     HANDLE fd = GetStdHandle ( STD_ERROR_HANDLE );
-    return KSysFileMakeInt ( (KSysFile**)fp, fd, false, true, ISSTDIO );
+    return KSysFileMakeInt ( (KSysFile**)fp, fd, "stderr", false, true, ISSTDIO );
+}
+
+/* MakeFDFile
+ *  creates a file from a file-descriptor
+ *  not supported under Windows
+ */
+LIB_EXPORT rc_t CC KFileMakeFDFileRead ( const KFile **f, int fd )
+{
+    return RC (rcFS, rcFile, rcConstructing, rcFunction, rcUnsupported);
+}
+
+LIB_EXPORT rc_t CC KFileMakeFDFileWrite ( KFile **f, bool update, int fd )
+{
+    return RC (rcFS, rcFile, rcConstructing, rcFunction, rcUnsupported);
 }
diff --git a/libs/kfs/win/syslockfile.c b/libs/kfs/win/syslockfile.c
new file mode 100644
index 0000000..9b09f8d
--- /dev/null
+++ b/libs/kfs/win/syslockfile.c
@@ -0,0 +1,67 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kfs/extern.h>
+#include <kfs/lockfile.h>
+#include <kfs/directory.h>
+#include <klib/rc.h>
+
+
+/*--------------------------------------------------------------------------
+ * KDirectory
+ *  interface extensions
+ */
+
+
+/* CreateExclusiveAccessFile
+ *  opens a file with exclusive write access
+ *
+ *  "f" [ OUT ] - return parameter for newly opened file
+ *
+ *  "update" [ IN ] - if true, open in read/write mode
+ *  otherwise, open in write-only mode
+ *
+ *  "access" [ IN ] - standard Unix access mode, e.g. 0664
+ *
+ *  "mode" [ IN ] - a creation mode ( see explanation above ).
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target file
+ */
+LIB_EXPORT rc_t CC KDirectoryVCreateExclusiveAccessFile ( KDirectory *self, struct KFile **f,
+    bool update, uint32_t access, KCreateMode mode, const char *path, va_list args )
+{
+    /* Windows should naturally behave as we want here... */
+    rc_t rc = KDirectoryVCreateFile ( self, f, update, access, mode, path, args );
+    if ( rc != 0 )
+    {
+        if ( GetRCState ( rc ) == rcExists )
+            rc = RC ( rcFS, rcFile, rcLocking, rcLocking, rcBusy );
+        else
+            rc = ResetRCContext ( rc, rcFS, rcFile, rcLocking );
+    }
+    return rc;
+}
diff --git a/libs/kfs/win/sysmmap.c b/libs/kfs/win/sysmmap.c
index ebfa70b..28c9873 100644
--- a/libs/kfs/win/sysmmap.c
+++ b/libs/kfs/win/sysmmap.c
@@ -126,6 +126,8 @@ rc_t KMMapUnmap ( KMMap *self )
     {
         if ( ! CloseHandle ( self -> handle ) )
             return RC ( rcFS, rcMemMap, rcDestroying, rcNoObj, rcUnknown );
+        if ( ! UnmapViewOfFile( self -> addr ) )
+            return RC ( rcFS, rcMemMap, rcDestroying, rcNoObj, rcUnknown );
 
         self -> addr = NULL;
         self -> size = 0;
diff --git a/libs/kfs/win/syspath.c b/libs/kfs/win/syspath.c
deleted file mode 100644
index d74ffaa..0000000
--- a/libs/kfs/win/syspath.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-#define CHECK_WINDOWS_PATH_LENGTH 0
-#include <kfs/extern.h>
-
-#include <kfs/path.h>
-#include "path-priv.h"
-#include <klib/defs.h>
-#include <klib/rc.h>
-#include <klib/log.h>
-#include <klib/out.h>
-#include <windows.h>
-#include <direct.h>
-
-static const
-char * reserved_device_names [] =
-{ 
-    "CON:",
-    "PRN:",
-    "AUX:",
-    "NUL:",
-    "COM1:",
-    "COM2:",
-    "COM3:",
-    "COM4:",
-    "COM5:",
-    "COM6:",
-    "COM7:",
-    "COM8:",
-    "COM9:",
-    "LPT1:",
-    "LPT2:",
-    "LPT3:",
-    "LPT4:",
-    "LPT5;",
-    "LPT6:",
-    "LPT7:",
-    "LPT8:",
-    "LPT9:",
-    NULL
-};
-
-rc_t CC KPathTransformSysPath (KPath * self)
-{
-    char * pc;
-    size_t lim;
-    size_t ix;
-    rc_t rc = 0;
-
-    pc = (char *)(self->path.addr);
-    lim = StringSize (&self->path);
-
-    if (lim == 0)
-        return 0;
-
-    /* -----
-     * toss out windows/dos device names
-     */
-    for (ix = 0; reserved_device_names[ix] != NULL; ++ix)
-        if (strcmp (reserved_device_names[ix], pc) == 0)
-            return RC (rcFS, rcPath, rcConstructing, rcPath, rcIncorrect);
-
-    /* -----
-     * look for for mingw and cygwin full paths and make them windowish
-     * NOTE we could screw things up here with bad strings like
-     * /cygdrive/haha/fooled-you
-     */
-
-    if (pc[0] == '/')
-    {
-        static const char cygdrive [] = "/cygdrive/";
-
-        if (strncmp (pc, cygdrive, sizeof cygdrive - 1) == 0)
-        {
-            pc += sizeof cygdrive - 2;
-            lim -= sizeof cygdrive - 2;
-            /* NOTE: if the macro changes this could fail! */
-            StringInit (&self->path, pc,
-                        StringSize(&self->path) - sizeof cygdrive - 2,
-                        StringLength(&self->path) - sizeof cygdrive - 2);
-        }
-
-        /* if here we had a mingw or cygwin specification */
-        if (isalpha (pc[1]) && (pc[2] == '/'))
-        {
-            /* change it back to a windows specification */
-            pc[0] = pc[1];
-            pc[1] = ':';
-        }
-    }
-
-    /* change from  Windows '/' to posix '/' segment dividers */
-    for (ix = 0; ix < lim; ++ix)
-        if (pc [ix] == '\\')
-            pc [ix] = '/';
-
-    /* look for stray ':' characters */
-    for (ix = 0; ix < lim; ++ix)
-    {
-        if (pc[ix] == ':')
-        {
-            rc = RC (rcFS, rcPath, rcConstructing, rcPath, rcInvalid);
-            PLOGERR (klogErr,
-                     (klogErr, rc, "incorrect use of ':' in path '$(path)'",
-                      "path=%s", pc));
-            return rc;
-        }
-        if (ix == 0)
-            ++ix;
-    }
-
-    if ((lim > 1) && (pc[1] == ':'))
-    {
-        if (!isalpha (pc[0]))
-        {
-            rc = RC (rcFS, rcPath, rcConstructing, rcPath, rcInvalid);
-            PLOGERR (klogErr,
-                     (klogErr, rc, "invalid character as drive letter '$(c)' ($(d)) in path '$(S)'",
-                      "c=%c,d=%d,s=%s",pc[0],pc[0],pc));
-            return rc;
-        }
-        /* we don't support drive relative addressing at this point
-         * we should correct this in the future */
-        if (pc[2] != '/')
-        {
-            rc = RC (rcFS, rcPath, rcConstructing, rcPath, rcIncorrect);
-            PLOGERR (klogErr,
-                     (klogErr, rc, "drive relative addressing not currently supported '$(path)'",
-                      "path=%s", pc));
-            return rc;
-        }
-    }
-
-    if ((pc[0] == '/') && (pc[1] == '/')) /* UNC form */
-    {
-        if (pc[2] == '.') /* device space name - we don't handle these */
-            return RC (rcFS, rcPath, rcConstructing, rcPath, rcIncorrect);
-
-        if (pc[2] == '?') /* special space name - we don't handle these */
-            return RC (rcFS, rcPath, rcConstructing, rcPath, rcIncorrect);
-    }
-
-/* possible future stuff? */
-#if DO_MORE_STUFF_TO_VALIDATE_PATH
-    /* -----
-     * this size thing is turned off to allow paths into archives
-     */
-    ix = string_size (ipc = inpath);
-    if (ix > MAX_PATH)
-        return RC (rcFS, rcPath, rcConstructing, rcPath, rcTooLong);
-    {
-        DWORD insize = ilen;
-        DWORD outlen;
-
-        outlen = GetFullPathNameA (ipc, (DWORD)sizeof (temp), temp, NULL);
-
-        if (outlen == 0)
-            return RC (rcFS, rcPath, rcConstructing, rcPath, rcInvalid);
-        if (outlen > sizeof temp)
-            return RC (rcFS, rcPath, rcConstructing, rcPath, rcTooShort);
-
-        ipc = temp;
-
-        opc[0] = '/';
-        opc[1] = ipc [0];
-
-        ix = jx = 2;
-    }
-
-    do
-    {
-        switch (ipc[ix])
-        {
-        case '\0':
-            normalize_done = true;
-            /* fall through */
-        default:
-            opc[jx++] = ipc[ix++];
-            break;
-
-        case '\\':
-            opc[jx++] = '/';
-            ++ix;
-            break;
-
-        case '\x1': /* never allowed */
-        case '\x2':
-        case '\x3':
-        case '\x4':
-        case '\x5':
-        case '\x6':
-        case '\x7':
-        case '\x8':
-        case '\x9':
-        case '\xA':
-        case '\xB':
-        case '\xC':
-        case '\xD':
-        case '\xE':
-        case '\xF':
-        case '\x10':
-        case '\x11':
-        case '\x12':
-        case '\x13':
-        case '\x14':
-        case '\x15':
-        case '\x16':
-        case '\x17':
-        case '\x18':
-        case '\x19':
-        case '\x1A':
-        case '\x1B':
-        case '\x1C':
-        case '\x1D':
-        case '\x1E':
-        case '\x1F':
-        case ':':
-        case '<':
-        case '>':
-        case '"':
-        case '|':
-        case '*':
-        case '?':
-            rc = RC (rcFS, rcPath, rcConstructing, rcPath, rcInvalid);
-            PLOGERR (klogErr,
-                     (klogErr, rc, "invalid character '$(c)' ($(d)) in path '$(s)'",
-                      "c=%c,d=%d,s=%s",ipc[ix],ipc[ix],ipc));
-            return rc;
-        }
-    } while (!normalize_done);
-
-    self->asciz_size = ix - 1;
-
-#endif
-    /* put drive based paths (back?) into our form */
-    if ((lim > 1) && (pc[1] == ':'))
-    {
-        pc[1] = pc[0];
-        pc[0] = '/';
-    }
-    return 0;
-}
-
-rc_t KPathTransformPathHier (char ** uri_path)
-{
-    return 0;
-}
-
-LIB_EXPORT rc_t CC KPathGetCWD (char * buffer, size_t buffer_size)
-{
-    char * temp = _getcwd (buffer, (int)buffer_size);
-    if (temp == NULL)
-        return RC (rcFS, rcPath, rcAccessing, rcBuffer, rcInsufficient);
-    return 0;
-}
-
-#if USE_EXPERIMENTAL_CODE
-rc_t KPathInitAuthority (struct KPath * self, char ** next)
-{
-/*     static const char null_string[] = ""; */
-/*     CONST_STRING (&self->authority, null_string); */
-    return 0;
-}
-#endif
diff --git a/libs/klib/Judy.h b/libs/klib/Judy.h
new file mode 100644
index 0000000..0b2c518
--- /dev/null
+++ b/libs/klib/Judy.h
@@ -0,0 +1,629 @@
+#ifndef _JUDY_INCLUDED
+#define _JUDY_INCLUDED
+/*
+// _________________
+//
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+//
+// HEADER FILE FOR EXPORTED FEATURES IN JUDY LIBRARY, libJudy.*
+//
+// See the manual entries for details.
+//
+// Note:  This header file uses old-style comments on #-directive lines and
+// avoids "()" on macro names in comments for compatibility with older cc -Aa
+// and some tools on some platforms.
+
+
+// PLATFORM-SPECIFIC
+*/
+
+#if ! JUST_DEFINE_YOUR_STUFF
+
+#ifdef JU_WIN /* =============================================== */
+
+typedef __int8           int8_t;
+typedef __int16          int16_t;
+typedef __int32          int32_t;
+typedef __int64          int64_t;
+
+typedef unsigned __int8  uint8_t;
+typedef unsigned __int16 uint16_t;
+typedef unsigned __int32 uint32_t;
+typedef unsigned __int64 uint64_t;
+
+#else /* ================ ! JU_WIN ============================= */
+
+/* ISO C99: 7.8 Format conversion of integer types <inttypes.h> */
+/*#include <inttypes.h>   if this FAILS, try #include <stdint.h> */ 
+
+/* ISO C99: 7.18 Integer types uint*_t */
+#include <stdint.h> 
+
+#endif /* ================ ! JU_WIN ============================= */
+
+/* ISO C99 Standard: 7.20 General utilities */
+#include <stdlib.h>  
+
+/* ISO C99 Standard: 7.10/5.2.4.2.1 Sizes of integer types */
+#include <limits.h>
+
+#endif /* JUST_DEFINE_YOUR_STUFF */
+
+#ifdef __cplusplus      /* support use by C++ code */
+extern "C" {
+#endif
+
+
+/* ****************************************************************************
+// DECLARE SOME BASE TYPES IN CASE THEY ARE MISSING:
+//
+// These base types include "const" where appropriate, but only where of
+// interest to the caller.  For example, a caller cares that a variable passed
+// by reference will not be modified, such as, "const void * Pindex", but not
+// that the called function internally does not modify the pointer itself, such
+// as, "void * const Pindex".
+//
+// Note that its OK to pass a Pvoid_t to a Pcvoid_t; the latter is the same,
+// only constant.  Callers need to do this so they can also pass & Pvoid_t to
+// PPvoid_t (non-constant).
+*/
+
+#ifndef _PCVOID_T
+#define _PCVOID_T
+typedef const void * Pcvoid_t;
+#endif
+
+#ifndef _PVOID_T
+#define _PVOID_T
+typedef void *   Pvoid_t;
+typedef void ** PPvoid_t;
+#endif
+
+#ifndef _WORD_T
+#define _WORD_T
+    typedef  size_t  Word_t, * PWord_t;  /* expect 32-bit or 64-bit words. */
+#endif
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+
+/* ****************************************************************************
+// SUPPORT FOR ERROR HANDLING:
+//
+// Judy error numbers:
+//
+// Note:  These are an enum so theres a related typedef, but the numbers are
+// spelled out so you can map a number back to its name.
+*/
+typedef enum            /* uint8_t -- but C does not support this type of enum.
+                                   -- nor does it support // comments!!         */
+{
+
+/* Note:  JU_ERRNO_NONE and JU_ERRNO_FULL are not real errors.  They specify
+// conditions which are otherwise impossible return values from 32-bit
+// Judy1Count, which has 2^32 + 1 valid returns (0..2^32) plus one error
+// return.  These pseudo-errors support the return values that cannot otherwise
+// be unambiguously represented in a 32-bit word, and will never occur on a
+// 64-bit system. */
+
+        JU_ERRNO_NONE           = 0,
+        JU_ERRNO_FULL           = 1,
+        JU_ERRNO_NFMAX          = JU_ERRNO_FULL,
+
+/* JU_ERRNO_NOMEM comes from malloc(3C) when Judy cannot obtain needed memory.
+// The system errno value is also set to ENOMEM.  This error can be recoverable
+// if the calling application frees other memory.
+//
+// TBD:  Currently there is no guarantee the Judy array has no memory leaks
+// upon JU_ERRNO_NOMEM. */
+
+        JU_ERRNO_NOMEM          = 2,
+
+/* Problems with parameters from the calling program:
+//
+// JU_ERRNO_NULLPPARRAY means PPArray was null; perhaps PArray was passed where
+// &PArray was intended.  Similarly, JU_ERRNO_NULLPINDEX means PIndex was null;
+// perhaps &Index was intended.  Also, JU_ERRNO_NONNULLPARRAY,
+// JU_ERRNO_NULLPVALUE, and JU_ERRNO_UNSORTED, all added later (hence with
+// higher numbers), mean:  A non-null array was passed in where a null pointer
+// was required; PValue was null; and unsorted indexes were detected. */
+
+        JU_ERRNO_NULLPPARRAY    = 3,    /* see above.                       */
+        JU_ERRNO_NONNULLPARRAY  = 10,   /* see above.                       */
+        JU_ERRNO_NULLPINDEX     = 4,    /* see above.                       */
+        JU_ERRNO_NULLPVALUE     = 11,   /* see above.                       */
+        JU_ERRNO_NOTJUDY1       = 5,    /* PArray is not to a Judy1 array.  */
+        JU_ERRNO_NOTJUDYL       = 6,    /* PArray is not to a JudyL array.  */
+        JU_ERRNO_NOTJUDYSL      = 7,    /* PArray is not to a JudySL array. */
+        JU_ERRNO_UNSORTED       = 12,   /* see above.                       */
+
+/* Errors below this point are not recoverable; further tries to access the
+// Judy array might result in EFAULT and a core dump:
+//
+// JU_ERRNO_OVERRUN occurs when Judy detects, upon reallocation, that a block
+// of memory in its own freelist was modified since being freed. */
+
+        JU_ERRNO_OVERRUN        = 8,
+
+/* JU_ERRNO_CORRUPT occurs when Judy detects an impossible value in a Judy data
+// structure:
+//
+// Note:  The Judy data structure contains some redundant elements that support
+// this type of checking. */
+
+        JU_ERRNO_CORRUPT        = 9
+
+/* Warning:  At least some C or C++ compilers do not tolerate a trailing comma
+// above here.  At least we know of one case, in aCC; see JAGad58928. */
+
+} JU_Errno_t;
+
+
+/* Judy errno structure:
+//
+// WARNING:  For compatibility with possible future changes, the fields of this
+// struct should not be referenced directly.  Instead use the macros supplied
+// below.
+
+// This structure should be declared on the stack in a threaded process. */
+
+typedef struct J_UDY_ERROR_STRUCT
+{
+    JU_Errno_t je_Errno;            /* one of the enums above.               */
+    int        je_ErrID;            /* often an internal source line number. */
+    Word_t     je_reserved[4];      /* for future backward compatibility.    */
+
+} JError_t, * PJError_t;
+
+
+/* Related macros:
+//
+// Fields from error struct: */
+
+#define JU_ERRNO(PJError)  ((PJError)->je_Errno)
+#define JU_ERRID(PJError)  ((PJError)->je_ErrID)
+
+/* For checking return values from various Judy functions:
+//
+// Note:  Define JERR as -1, not as the seemingly more portable (Word_t)
+// (~0UL), to avoid a compiler "overflow in implicit constant conversion"
+// warning. */
+
+#define   JERR (-1)                     /* functions returning int or Word_t */
+#define  PJERR ((Pvoid_t)  (~0UL))      /* mainly for use here, see below    */
+#define PPJERR ((PPvoid_t) (~0UL))      /* functions that return PPvoid_t    */
+
+/* Convenience macro for when detailed error information (PJError_t) is not
+// desired by the caller; a purposely short name: */
+
+#define PJE0  ((PJError_t) NULL)
+
+
+/* ****************************************************************************
+// JUDY FUNCTIONS:
+//
+// P_JE is a shorthand for use below:
+*/
+#define P_JE  PJError_t PJError
+
+/* ****************************************************************************
+// JUDY1 FUNCTIONS:
+*/
+extern int      Judy1Test(       Pcvoid_t  PArray, Word_t   Index,   P_JE);
+extern int      Judy1Set(        PPvoid_t PPArray, Word_t   Index,   P_JE);
+extern int      Judy1SetArray(   PPvoid_t PPArray, Word_t   Count,
+                                             const Word_t * const PIndex,
+                                                                     P_JE);
+extern int      Judy1Unset(      PPvoid_t PPArray, Word_t   Index,   P_JE);
+extern Word_t   Judy1Count(      Pcvoid_t  PArray, Word_t   Index1,
+                                                   Word_t   Index2,  P_JE);
+extern int      Judy1ByCount(    Pcvoid_t  PArray, Word_t   Count,
+                                                   Word_t * PIndex,  P_JE);
+extern Word_t   Judy1FreeArray(  PPvoid_t PPArray,                   P_JE);
+extern Word_t   Judy1MemUsed(    Pcvoid_t  PArray);
+extern Word_t   Judy1MemActive(  Pcvoid_t  PArray);
+extern int      Judy1First(      Pcvoid_t  PArray, Word_t * PIndex,  P_JE);
+extern int      Judy1Next(       Pcvoid_t  PArray, Word_t * PIndex,  P_JE);
+extern int      Judy1Last(       Pcvoid_t  PArray, Word_t * PIndex,  P_JE);
+extern int      Judy1Prev(       Pcvoid_t  PArray, Word_t * PIndex,  P_JE);
+extern int      Judy1FirstEmpty( Pcvoid_t  PArray, Word_t * PIndex,  P_JE);
+extern int      Judy1NextEmpty(  Pcvoid_t  PArray, Word_t * PIndex,  P_JE);
+extern int      Judy1LastEmpty(  Pcvoid_t  PArray, Word_t * PIndex,  P_JE);
+extern int      Judy1PrevEmpty(  Pcvoid_t  PArray, Word_t * PIndex,  P_JE);
+
+/* ****************************************************************************
+// JUDYL FUNCTIONS:
+*/
+extern PPvoid_t JudyLGet(        Pcvoid_t  PArray, Word_t    Index,  P_JE);
+extern PPvoid_t JudyLIns(        PPvoid_t PPArray, Word_t    Index,  P_JE);
+extern int      JudyLInsArray(   PPvoid_t PPArray, Word_t    Count,
+                                             const Word_t * const PIndex,
+                                             const Word_t * const PValue,
+                                                                     P_JE);
+
+extern int      JudyLDel(        PPvoid_t PPArray, Word_t    Index,  P_JE);
+extern Word_t   JudyLCount(      Pcvoid_t  PArray, Word_t    Index1,
+                                                   Word_t    Index2, P_JE);
+extern PPvoid_t JudyLByCount(    Pcvoid_t  PArray, Word_t    Count,
+                                                   Word_t *  PIndex, P_JE);
+extern Word_t   JudyLFreeArray(  PPvoid_t PPArray,                   P_JE);
+extern Word_t   JudyLMemUsed(    Pcvoid_t  PArray);
+extern Word_t   JudyLMemActive(  Pcvoid_t  PArray);
+extern PPvoid_t JudyLFirst(      Pcvoid_t  PArray, Word_t * PIndex,  P_JE);
+extern PPvoid_t JudyLNext(       Pcvoid_t  PArray, Word_t * PIndex,  P_JE);
+extern PPvoid_t JudyLLast(       Pcvoid_t  PArray, Word_t * PIndex,  P_JE);
+extern PPvoid_t JudyLPrev(       Pcvoid_t  PArray, Word_t * PIndex,  P_JE);
+extern int      JudyLFirstEmpty( Pcvoid_t  PArray, Word_t * PIndex,  P_JE);
+extern int      JudyLNextEmpty(  Pcvoid_t  PArray, Word_t * PIndex,  P_JE);
+extern int      JudyLLastEmpty(  Pcvoid_t  PArray, Word_t * PIndex,  P_JE);
+extern int      JudyLPrevEmpty(  Pcvoid_t  PArray, Word_t * PIndex,  P_JE);
+
+/* ****************************************************************************
+// JUDYSL FUNCTIONS:
+*/
+extern PPvoid_t JudySLGet(       Pcvoid_t, const uint8_t * Index, P_JE);
+extern PPvoid_t JudySLIns(       PPvoid_t, const uint8_t * Index, P_JE);
+extern int      JudySLDel(       PPvoid_t, const uint8_t * Index, P_JE);
+extern Word_t   JudySLFreeArray( PPvoid_t,                        P_JE);
+extern PPvoid_t JudySLFirst(     Pcvoid_t,       uint8_t * Index, P_JE);
+extern PPvoid_t JudySLNext(      Pcvoid_t,       uint8_t * Index, P_JE);
+extern PPvoid_t JudySLLast(      Pcvoid_t,       uint8_t * Index, P_JE);
+extern PPvoid_t JudySLPrev(      Pcvoid_t,       uint8_t * Index, P_JE);
+
+/* ****************************************************************************
+// JUDYHSL FUNCTIONS:
+*/
+extern PPvoid_t JudyHSGet(       Pcvoid_t,  void *, Word_t);
+extern PPvoid_t JudyHSIns(       PPvoid_t,  void *, Word_t, P_JE);
+extern int      JudyHSDel(       PPvoid_t,  void *, Word_t, P_JE);
+extern Word_t   JudyHSFreeArray( PPvoid_t,                  P_JE);
+
+extern const char *Judy1MallocSizes;
+extern const char *JudyLMallocSizes;
+
+/* ****************************************************************************
+// JUDY memory interface to malloc() FUNCTIONS:
+*/
+extern Word_t JudyMalloc(Word_t);               /* words reqd => words allocd. */
+extern Word_t JudyMallocVirtual(Word_t);        /* words reqd => words allocd. */
+extern void   JudyFree(Pvoid_t, Word_t);        /* free, size in words.        */
+extern void   JudyFreeVirtual(Pvoid_t, Word_t); /* free, size in words.        */
+
+#define JLAP_INVALID    0x1     /* flag to mark pointer "not a Judy array" */
+
+/* ****************************************************************************
+// MACRO EQUIVALENTS FOR JUDY FUNCTIONS:
+//
+// The following macros, such as J1T, are shorthands for calling Judy functions
+// with parameter address-of and detailed error checking included.  Since they
+// are macros, the error checking code is replicated each time the macro is
+// used, but it runs fast in the normal case of no error.
+//
+// If the caller does not like the way the default JUDYERROR macro handles
+// errors (such as an exit(1) call when out of memory), they may define their
+// own before the "#include <Judy.h>".  A routine such as HandleJudyError
+// could do checking on specific error numbers and print a different message
+// dependent on the error.  The following is one example:
+//
+// Note: the back-slashes are removed because some compilers will not accept
+// them in comments.
+//
+// void HandleJudyError(uint8_t *, int, uint8_t *, int, int);
+// #define JUDYERROR(CallerFile, CallerLine, JudyFunc, JudyErrno, JudyErrID)
+// {
+//    HandleJudyError(CallerFile, CallerLine, JudyFunc, JudyErrno, JudyErrID);
+// }
+//
+// The routine HandleJudyError could do checking on specific error numbers and
+// print a different message dependent on the error.
+//
+// The macro receives five parameters that are:
+//
+// 1.  CallerFile:  Source filename where a Judy call returned a serious error.
+// 2.  CallerLine:  Line number in that source file.
+// 3.  JudyFunc:    Name of Judy function reporting the error.
+// 4.  JudyErrno:   One of the JU_ERRNO* values enumerated above.
+// 5.  JudyErrID:   The je_ErrID field described above.
+*/
+#ifndef JUDYERROR_NOTEST
+#ifndef JUDYERROR       /* supply a default error macro */
+#include <stdio.h>
+
+#define JUDYERROR(CallerFile, CallerLine, JudyFunc, JudyErrno, JudyErrID) \
+    {                                                                     \
+        (void) fprintf(stderr, "File '%s', line %d: %s(), "               \
+           "JU_ERRNO_* == %d, ID == %d\n",                                \
+           CallerFile, CallerLine,                                        \
+           JudyFunc, JudyErrno, JudyErrID);                               \
+        exit(1);                                                          \
+    }
+
+#endif /* JUDYERROR */
+#endif /* JUDYERROR_NOTEST */
+
+/* If the JUDYERROR macro is not desired at all, then the following eliminates
+// it.  However, the return code from each Judy function (that is, the first
+// parameter of each macro) must be checked by the caller to assure that an
+// error did not occur.
+//
+// Example:
+//
+//   #define JUDYERROR_NOTEST 1
+//   #include <Judy.h>
+//
+// or use this cc option at compile time:
+//
+//   cc -DJUDYERROR_NOTEST ...
+//
+// Example code:
+//
+//   J1S(Rc, PArray, Index);
+//   if (Rc == JERR) goto ...error
+//
+// or:
+//
+//   JLI(PValue, PArray, Index);
+//   if (PValue == PJERR) goto ...error
+
+
+// Internal shorthand macros for writing the J1S, etc. macros:
+*/
+#ifdef JUDYERROR_NOTEST /* ============================================ */
+
+/* "Judy Set Error": */
+
+#define J_SE(FuncName,Errno)  ((void) 0)
+
+/* Note:  In each J_*() case below, the digit is the number of key parameters
+// to the Judy*() call.  Just assign the Func result to the callers Rc value
+// without a cast because none is required, and this keeps the API simpler.
+// However, a family of different J_*() macros is needed to support the
+// different numbers of key parameters (0,1,2) and the Func return type.
+//
+// In the names below, "I" = integer result; "P" = pointer result.  Note, the
+// Funcs for J_*P() return PPvoid_t, but cast this to a Pvoid_t for flexible,
+// error-free assignment, and then compare to PJERR.
+*/
+#define J_0I(Rc,PArray,Func,FuncName) \
+        { (Rc) = Func(PArray, PJE0); }
+
+#define J_1I(Rc,PArray,Index,Func,FuncName) \
+        { (Rc) = Func(PArray, Index, PJE0); }
+
+#define J_1P(PV,PArray,Index,Func,FuncName) \
+        { (PV) = (Pvoid_t) Func(PArray, Index, PJE0); }
+
+#define J_2I(Rc,PArray,Index,Arg2,Func,FuncName) \
+        { (Rc) = Func(PArray, Index, Arg2, PJE0); }
+
+#define J_2C(Rc,PArray,Index1,Index2,Func,FuncName) \
+        { (Rc) = Func(PArray, Index1, Index2, PJE0); }
+
+#define J_2P(PV,PArray,Index,Arg2,Func,FuncName) \
+        { (PV) = (Pvoid_t) Func(PArray, Index, Arg2, PJE0); }
+
+/* Variations for Judy*Set/InsArray functions: */
+
+#define J_2AI(Rc,PArray,Count,PIndex,Func,FuncName) \
+        { (Rc) = Func(PArray, Count, PIndex, PJE0); }
+#define J_3AI(Rc,PArray,Count,PIndex,PValue,Func,FuncName) \
+        { (Rc) = Func(PArray, Count, PIndex, PValue, PJE0); }
+
+#else /* ================ ! JUDYERROR_NOTEST ============================= */
+
+#define J_E(FuncName,PJE) \
+        JUDYERROR(__FILE__, __LINE__, FuncName, JU_ERRNO(PJE), JU_ERRID(PJE))
+
+#define J_SE(FuncName,Errno)                                            \
+        {                                                               \
+            JError_t J_Error;                                           \
+            JU_ERRNO(&J_Error) = (Errno);                               \
+            JU_ERRID(&J_Error) = __LINE__;                              \
+            J_E(FuncName, &J_Error);                                    \
+        }
+
+/* Note:  In each J_*() case below, the digit is the number of key parameters
+// to the Judy*() call.  Just assign the Func result to the callers Rc value
+// without a cast because none is required, and this keeps the API simpler.
+// However, a family of different J_*() macros is needed to support the
+// different numbers of key parameters (0,1,2) and the Func return type.
+//
+// In the names below, "I" = integer result; "P" = pointer result.  Note, the
+// Funcs for J_*P() return PPvoid_t, but cast this to a Pvoid_t for flexible,
+// error-free assignment, and then compare to PJERR.
+*/
+#define J_0I(Rc,PArray,Func,FuncName)                                   \
+        {                                                               \
+            JError_t J_Error;                                           \
+            if (((Rc) = Func(PArray, &J_Error)) == JERR)                \
+                J_E(FuncName, &J_Error);                                \
+        }
+
+#define J_1I(Rc,PArray,Index,Func,FuncName)                             \
+        {                                                               \
+            JError_t J_Error;                                           \
+            if (((Rc) = Func(PArray, Index, &J_Error)) == JERR)         \
+                J_E(FuncName, &J_Error);                                \
+        }
+
+#define J_1P(Rc,PArray,Index,Func,FuncName)                             \
+        {                                                               \
+            JError_t J_Error;                                           \
+            if (((Rc) = (Pvoid_t) Func(PArray, Index, &J_Error)) == PJERR) \
+                J_E(FuncName, &J_Error);                                \
+        }
+
+#define J_2I(Rc,PArray,Index,Arg2,Func,FuncName)                        \
+        {                                                               \
+            JError_t J_Error;                                           \
+            if (((Rc) = Func(PArray, Index, Arg2, &J_Error)) == JERR)   \
+                J_E(FuncName, &J_Error);                                \
+        }
+
+/* Variation for Judy*Count functions, which return 0, not JERR, for error (and
+// also for other non-error cases):
+//
+// Note:  JU_ERRNO_NFMAX should only apply to 32-bit Judy1, but this header
+// file lacks the necessary ifdefs to make it go away otherwise, so always
+// check against it.
+*/
+#define J_2C(Rc,PArray,Index1,Index2,Func,FuncName)                     \
+        {                                                               \
+            JError_t J_Error;                                           \
+            if ((((Rc) = Func(PArray, Index1, Index2, &J_Error)) == 0)  \
+             && (JU_ERRNO(&J_Error) > JU_ERRNO_NFMAX))                  \
+            {                                                           \
+                J_E(FuncName, &J_Error);                                \
+            }                                                           \
+        }
+
+#define J_2P(PV,PArray,Index,Arg2,Func,FuncName)                        \
+        {                                                               \
+            JError_t J_Error;                                           \
+            if (((PV) = (Pvoid_t) Func(PArray, Index, Arg2, &J_Error))  \
+                == PJERR) J_E(FuncName, &J_Error);                      \
+        }
+
+/* Variations for Judy*Set/InsArray functions: */
+
+#define J_2AI(Rc,PArray,Count,PIndex,Func,FuncName)                     \
+        {                                                               \
+            JError_t J_Error;                                           \
+            if (((Rc) = Func(PArray, Count, PIndex, &J_Error)) == JERR) \
+                J_E(FuncName, &J_Error);                                \
+        }
+
+#define J_3AI(Rc,PArray,Count,PIndex,PValue,Func,FuncName)              \
+        {                                                               \
+            JError_t J_Error;                                           \
+            if (((Rc) = Func(PArray, Count, PIndex, PValue, &J_Error))  \
+                == JERR) J_E(FuncName, &J_Error);                       \
+        }
+
+#endif /* ================ ! JUDYERROR_NOTEST ============================= */
+
+/* Some of the macros are special cases that use inlined shortcuts for speed
+// with root-level leaves:
+
+// This is a slower version with current processors, but in the future...
+*/
+#define J1T(Rc,PArray,Index)                                            \
+    (Rc) = Judy1Test((Pvoid_t)(PArray), Index, PJE0)
+
+#define J1S( Rc,    PArray,   Index) \
+        J_1I(Rc, (&(PArray)), Index,  Judy1Set,   "Judy1Set")
+#define J1SA(Rc,    PArray,   Count, PIndex) \
+        J_2AI(Rc,(&(PArray)), Count, PIndex, Judy1SetArray, "Judy1SetArray")
+#define J1U( Rc,    PArray,   Index) \
+        J_1I(Rc, (&(PArray)), Index,  Judy1Unset, "Judy1Unset")
+#define J1F( Rc,    PArray,   Index) \
+        J_1I(Rc,    PArray, &(Index), Judy1First, "Judy1First")
+#define J1N( Rc,    PArray,   Index) \
+        J_1I(Rc,    PArray, &(Index), Judy1Next,  "Judy1Next")
+#define J1L( Rc,    PArray,   Index) \
+        J_1I(Rc,    PArray, &(Index), Judy1Last,  "Judy1Last")
+#define J1P( Rc,    PArray,   Index) \
+        J_1I(Rc,    PArray, &(Index), Judy1Prev,  "Judy1Prev")
+#define J1FE(Rc,    PArray,   Index) \
+        J_1I(Rc,    PArray, &(Index), Judy1FirstEmpty, "Judy1FirstEmpty")
+#define J1NE(Rc,    PArray,   Index) \
+        J_1I(Rc,    PArray, &(Index), Judy1NextEmpty,  "Judy1NextEmpty")
+#define J1LE(Rc,    PArray,   Index) \
+        J_1I(Rc,    PArray, &(Index), Judy1LastEmpty,  "Judy1LastEmpty")
+#define J1PE(Rc,    PArray,   Index) \
+        J_1I(Rc,    PArray, &(Index), Judy1PrevEmpty,  "Judy1PrevEmpty")
+#define J1C( Rc,    PArray,   Index1,  Index2) \
+        J_2C(Rc,    PArray,   Index1,  Index2, Judy1Count,   "Judy1Count")
+#define J1BC(Rc,    PArray,   Count,   Index) \
+        J_2I(Rc,    PArray,   Count, &(Index), Judy1ByCount, "Judy1ByCount")
+#define J1FA(Rc,    PArray) \
+        J_0I(Rc, (&(PArray)), Judy1FreeArray, "Judy1FreeArray")
+#define J1MU(Rc,    PArray) \
+        (Rc) = Judy1MemUsed(PArray)
+
+#define JLG(PV,PArray,Index)                                            \
+    (PV) = (Pvoid_t)JudyLGet((Pvoid_t)PArray, Index, PJE0)
+
+#define JLI( PV,    PArray,   Index)                                    \
+        J_1P(PV, (&(PArray)), Index,  JudyLIns,   "JudyLIns")
+
+#define JLIA(Rc,    PArray,   Count, PIndex, PValue)                    \
+        J_3AI(Rc,(&(PArray)), Count, PIndex, PValue, JudyLInsArray,     \
+                                                  "JudyLInsArray")
+#define JLD( Rc,    PArray,   Index)                                    \
+        J_1I(Rc, (&(PArray)), Index,  JudyLDel,   "JudyLDel")
+
+#define JLF( PV,    PArray,   Index)                                    \
+        J_1P(PV,    PArray, &(Index), JudyLFirst, "JudyLFirst")
+
+#define JLN( PV,    PArray,   Index)                                    \
+        J_1P(PV,    PArray, &(Index), JudyLNext, "JudyLNext")
+
+#define JLL( PV,    PArray,   Index)                                    \
+        J_1P(PV,    PArray, &(Index), JudyLLast,  "JudyLLast")
+#define JLP( PV,    PArray,   Index)                                    \
+        J_1P(PV,    PArray, &(Index), JudyLPrev,  "JudyLPrev")
+#define JLFE(Rc,    PArray,   Index)                                    \
+        J_1I(Rc,    PArray, &(Index), JudyLFirstEmpty, "JudyLFirstEmpty")
+#define JLNE(Rc,    PArray,   Index)                                    \
+        J_1I(Rc,    PArray, &(Index), JudyLNextEmpty,  "JudyLNextEmpty")
+#define JLLE(Rc,    PArray,   Index)                                    \
+        J_1I(Rc,    PArray, &(Index), JudyLLastEmpty,  "JudyLLastEmpty")
+#define JLPE(Rc,    PArray,   Index)                                    \
+        J_1I(Rc,    PArray, &(Index), JudyLPrevEmpty,  "JudyLPrevEmpty")
+#define JLC( Rc,    PArray,   Index1,  Index2)                          \
+        J_2C(Rc,    PArray,   Index1,  Index2, JudyLCount,   "JudyLCount")
+#define JLBC(PV,    PArray,   Count,   Index)                           \
+        J_2P(PV,    PArray,   Count, &(Index), JudyLByCount, "JudyLByCount")
+#define JLFA(Rc,    PArray)                                             \
+        J_0I(Rc, (&(PArray)), JudyLFreeArray, "JudyLFreeArray")
+#define JLMU(Rc,    PArray)                                             \
+        (Rc) = JudyLMemUsed(PArray)
+
+#define JHSI(PV,    PArray,   PIndex,   Count)                          \
+        J_2P(PV, (&(PArray)), PIndex,   Count, JudyHSIns, "JudyHSIns")
+#define JHSG(PV,    PArray,   PIndex,   Count)                          \
+        (PV) = (Pvoid_t) JudyHSGet(PArray, PIndex, Count)
+#define JHSD(Rc,    PArray,   PIndex,   Count)                          \
+        J_2I(Rc, (&(PArray)), PIndex, Count, JudyHSDel, "JudyHSDel")
+#define JHSFA(Rc,    PArray)                                            \
+        J_0I(Rc, (&(PArray)), JudyHSFreeArray, "JudyHSFreeArray")
+
+#define JSLG( PV,    PArray,   Index)                                   \
+        J_1P( PV,    PArray,   Index, JudySLGet,   "JudySLGet")
+#define JSLI( PV,    PArray,   Index)                                   \
+        J_1P( PV, (&(PArray)), Index, JudySLIns,   "JudySLIns")
+#define JSLD( Rc,    PArray,   Index)                                   \
+        J_1I( Rc, (&(PArray)), Index, JudySLDel,   "JudySLDel")
+#define JSLF( PV,    PArray,   Index)                                   \
+        J_1P( PV,    PArray,   Index, JudySLFirst, "JudySLFirst")
+#define JSLN( PV,    PArray,   Index)                                   \
+        J_1P( PV,    PArray,   Index, JudySLNext,  "JudySLNext")
+#define JSLL( PV,    PArray,   Index)                                   \
+        J_1P( PV,    PArray,   Index, JudySLLast,  "JudySLLast")
+#define JSLP( PV,    PArray,   Index)                                   \
+        J_1P( PV,    PArray,   Index, JudySLPrev,  "JudySLPrev")
+#define JSLFA(Rc,    PArray)                                            \
+        J_0I( Rc, (&(PArray)), JudySLFreeArray, "JudySLFreeArray")
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* ! _JUDY_INCLUDED */
diff --git a/libs/klib/Makefile b/libs/klib/Makefile
index 7e1aca4..199c362 100644
--- a/libs/klib/Makefile
+++ b/libs/klib/Makefile
@@ -42,44 +42,42 @@ include $(TOP)/build/Makefile.env
 #-------------------------------------------------------------------------------
 # outer targets
 #
-vers-includes: $(addsuffix .vers.h,$(EXT_LIBS))
+all: makedirs
+	@ $(MAKE) -C $(SRCDIR)/judy all
+	@ $(MAKE_CMD) $(TARGDIR)/all
 
-all std: makedirs vers-includes
+std: makedirs
+	@ $(MAKE) -C $(SRCDIR)/judy std
 	@ $(MAKE_CMD) $(TARGDIR)/std
 
-$(INT_LIBS): makedirs vers-includes
+$(INT_LIBS): makedirs
+	@ $(MAKE) -C $(SRCDIR)/judy std
 	@ $(MAKE_CMD) $(ILIBDIR)/$@
 
-$(EXT_LIBS): makedirs vers-includes
+$(EXT_LIBS): makedirs
+	@ $(MAKE) -C $(SRCDIR)/judy std
 	@ $(MAKE_CMD) $(LIBDIR)/$@
 
-.PHONY: vers-includes all std $(ALL_LIBS)
+.PHONY: all std $(ALL_LIBS)
 
 #-------------------------------------------------------------------------------
-# std
+# all, std
 #
-$(TARGDIR)/std: \
+$(TARGDIR)/all $(TARGDIR)/std: \
 	$(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
 	$(addprefix $(LIBDIR)/,$(EXT_LIBS))
 
-.PHONY: $(TARGDIR)/std
+.PHONY: $(TARGDIR)/all $(TARGDIR)/std
 
 #-------------------------------------------------------------------------------
 # clean
 #
 clean: stdclean
+	@ $(MAKE) -C $(SRCDIR)/judy clean
 
 .PHONY: clean
 
 #-------------------------------------------------------------------------------
-# tag
-#
-tag: \
-	$(addsuffix _tag,$(ALL_LIBS))
-
-.PHONY: tag $(addsuffix _tag,$(ALL_LIBS))
-
-#-------------------------------------------------------------------------------
 # klib
 #
 $(LIBDIR)/libklib: $(addprefix $(LIBDIR)/libklib.,$(LIBEXT))
@@ -108,6 +106,7 @@ KLIB_SRC = \
 	SHA-32bit \
 	SHA-64bit \
 	qsort \
+	ksort \
 	bsearch \
 	pack \
 	unpack \
@@ -126,7 +125,9 @@ KLIB_SRC = \
 	syslog \
 	systime \
 	rc-tbl \
-	rc-idx-tbl
+	rc-idx-tbl \
+	judy-vector \
+	report
 
 ifeq (win,$(OS))
 	KLIB_SRC += sysalloc
@@ -140,6 +141,7 @@ KLIB_OBJ = \
 	$(addsuffix .$(LOBX),$(KLIB_SRC))
 
 KLIB_LIB = \
+	-sjudy \
 	-lm
 
 $(LIBDIR)/libklib.$(SHLX): $(KLIB_OBJ)
diff --git a/libs/klib/SHA-32bit.c b/libs/klib/SHA-32bit.c
old mode 100755
new mode 100644
index 4747430..3b4bbfc
--- a/libs/klib/SHA-32bit.c
+++ b/libs/klib/SHA-32bit.c
@@ -200,7 +200,7 @@ static __inline__ void SHA_32b_Append(struct SHA32bitState *ctx, int which, cons
         memcpy(&ctx->W[ctx->cur], &data[i], n);
         ctx->cur += n;
         if (ctx->cur == 64) {
-#if BYTE_ORDER == LITTLE_ENDIAN
+#if __BYTE_ORDER == __LITTLE_ENDIAN
             uint32_t W[16];
             
             for (j = 0; j != 16; ++j)
@@ -223,7 +223,7 @@ static __inline__ void SHA_32b_Finish(const struct SHA32bitState *ctx, int which
     
     memset(W, 0, sizeof(W));
     for (j = 0; j != n; ++j) {
-#if BYTE_ORDER == LITTLE_ENDIAN
+#if __BYTE_ORDER == __LITTLE_ENDIAN
         W[j] = bswap_32(((const uint32_t *)ctx->W)[j]);
 #else
         W[j] = ((const uint32_t *)ctx->W)[j];
@@ -264,7 +264,7 @@ void CC SHA1StateFinish(SHA1State *ctx, uint8_t hash[20])
     uint32_t H[8];
 
     SHA_32b_Finish(ctx, 0, H);
-#if BYTE_ORDER == LITTLE_ENDIAN
+#if __BYTE_ORDER == __LITTLE_ENDIAN
     {
         H[0] = bswap_32(H[0]);
         H[1] = bswap_32(H[1]);
@@ -291,7 +291,7 @@ void CC SHA256StateFinish(SHA256State *ctx, uint8_t hash[32])
     uint32_t H[8];
 
     SHA_32b_Finish(ctx, 1, H);
-#if BYTE_ORDER == LITTLE_ENDIAN
+#if __BYTE_ORDER == __LITTLE_ENDIAN
     {
         H[0] = bswap_32(H[0]);
         H[1] = bswap_32(H[1]);
diff --git a/libs/klib/SHA-64bit.c b/libs/klib/SHA-64bit.c
old mode 100755
new mode 100644
index 2e9a69a..1fc1914
--- a/libs/klib/SHA-64bit.c
+++ b/libs/klib/SHA-64bit.c
@@ -162,7 +162,7 @@ static __inline__ void SHA_64b_Append(struct SHA64bitState *ctx, const uint8_t d
         memcpy(&ctx->W[ctx->cur], &data[i], n);
         ctx->cur += n;
         if (ctx->cur == 128) {
-#if BYTE_ORDER == LITTLE_ENDIAN
+#if __BYTE_ORDER == __LITTLE_ENDIAN
             uint64_t W[16];
             
             for (j = 0; j != 16; ++j)
@@ -185,7 +185,7 @@ static __inline__ void SHA_64b_Finish(const struct SHA64bitState *ctx, uint64_t
     
     memset(W, 0, sizeof(W));
     for (j = 0; j != n; ++j) {
-#if BYTE_ORDER == LITTLE_ENDIAN
+#if __BYTE_ORDER == __LITTLE_ENDIAN
         W[j] = bswap_64(((const uint64_t *)ctx->W)[j]);
 #else
         W[j] = ((const uint64_t *)ctx->W)[j];
@@ -226,7 +226,7 @@ void CC SHA384StateFinish(SHA384State *ctx, uint8_t hash[48])
     uint64_t H[8];
 
     SHA_64b_Finish(ctx, H);
-#if BYTE_ORDER == LITTLE_ENDIAN
+#if __BYTE_ORDER == __LITTLE_ENDIAN
     {
         H[0] = bswap_64(H[0]);
         H[1] = bswap_64(H[1]);
@@ -254,7 +254,7 @@ void CC SHA512StateFinish(SHA512State *ctx, uint8_t hash[64])
     uint64_t H[8];
 
     SHA_64b_Finish(ctx, H);
-#if BYTE_ORDER == LITTLE_ENDIAN
+#if __BYTE_ORDER == __LITTLE_ENDIAN
     {
         H[0] = bswap_64(H[0]);
         H[1] = bswap_64(H[1]);
diff --git a/libs/klib/data-buffer.c b/libs/klib/data-buffer.c
index 0761b0c..dcf0ee7 100644
--- a/libs/klib/data-buffer.c
+++ b/libs/klib/data-buffer.c
@@ -50,24 +50,22 @@ struct buffer_impl_t {
 #if DEBUG_MALLOC_FREE
     uint32_t foo;
 #endif
-    uint8_t data [ 8 ];
 };
 
-
-static
-size_t alloc_size(size_t capacity) {
-    const size_t mask = ( 1U << 12 ) - 1;
-    return ( capacity + mask + sizeof(buffer_impl_t) - 8 ) & ~ mask;
+static size_t roundup(size_t value, unsigned bits)
+{
+    size_t const mask = (((size_t)1u) << bits) - 1;
+    return (value + mask) & (~mask);
 }
 
 static
 rc_t allocate(buffer_impl_t **target, size_t capacity) {
-    buffer_impl_t *y = malloc(capacity = alloc_size(capacity));
+    buffer_impl_t *y = malloc(capacity + sizeof(*y));
 
     if (y == NULL)
         return RC(rcRuntime, rcBuffer, rcAllocating, rcMemory, rcExhausted);
 
-    y -> allocated = capacity;
+    y->allocated = capacity;
     atomic32_set(&y->refcount, 1);
     
 #if DEBUG_MALLOC_FREE
@@ -84,8 +82,7 @@ static buffer_impl_t *add_ref(buffer_impl_t *self) {
 }
 
 static buffer_impl_t *test_add_ref(buffer_impl_t *self) {
-    if ( self != NULL )
-        atomic32_inc ( & self -> refcount );
+    if (self) add_ref(self);
     return self;
 }
 
@@ -112,34 +109,49 @@ static void release(buffer_impl_t *self) {
 static rc_t reallocate(buffer_impl_t **target, size_t capacity) {
     buffer_impl_t *temp;
     buffer_impl_t *self = *target;
-    size_t new_capacity = alloc_size(capacity);
 
-    if (new_capacity <= self->allocated)
+    if (capacity <= self->allocated)
         return 0;
 
     /* check reference count for copies */
-    if ( atomic32_read ( & self -> refcount ) <= 1 )
+    if (atomic32_read(&self->refcount) <= 1)
     {
-        temp = realloc ( self, new_capacity );
-        if ( temp == NULL )
-            return RC ( rcRuntime, rcBuffer, rcResizing, rcMemory, rcExhausted );
+        temp = realloc(self, capacity + sizeof(*temp));
+        if (temp == NULL)
+            return RC(rcRuntime, rcBuffer, rcResizing, rcMemory, rcExhausted);
     }
     else
     {
-        temp = malloc ( new_capacity );
-        if ( temp == NULL )
-            return RC ( rcRuntime, rcBuffer, rcResizing, rcMemory, rcExhausted );
-        memcpy(temp, self, self->allocated);
+        temp = malloc(capacity + sizeof(*temp));
+        if (temp == NULL)
+            return RC(rcRuntime, rcBuffer, rcResizing, rcMemory, rcExhausted);
+        memcpy(temp, self, self->allocated + sizeof(*temp));
         release(self);
     }
     self = temp;
-    self->allocated = new_capacity;
+    self->allocated = capacity;
     atomic32_set(&self->refcount, 1);
     *target = self;
 
     return 0;
 }
 
+static rc_t shrink(buffer_impl_t **target, size_t capacity)
+{
+    buffer_impl_t *self = *target;
+    
+    if (capacity < self->allocated && atomic32_read(&self->refcount) == 1) {
+        buffer_impl_t *temp = realloc(self, capacity + sizeof(*temp));
+        
+        if (temp == NULL)
+            return RC(rcRuntime, rcBuffer, rcResizing, rcMemory, rcExhausted);
+
+        temp->allocated = capacity;
+        *target = temp;
+    }
+    return 0;
+}
+
 /*
  either returns original with refcount == 2
  or returns new copy with refcount == 1
@@ -148,32 +160,44 @@ static buffer_impl_t* make_copy(buffer_impl_t *self) {
     if (atomic32_read_and_add_eq(&self->refcount, 1, 1)==1)
         return self;
     else {
-        buffer_impl_t *copy = malloc(self->allocated);
+        buffer_impl_t *copy = malloc(self->allocated + sizeof(*self));
         if (copy) {
-            memcpy(copy, self, self->allocated);
+            memcpy(copy, self, self->allocated + sizeof(*copy));
             atomic32_set(&copy->refcount, 1);
         }
         return copy;
     }
 }
 
+static void const *get_data(buffer_impl_t const *self)
+{
+    return &self[1];
+}
+
+static void const *get_data_endp(buffer_impl_t const *self)
+{
+    return (uint8_t const *)get_data(self) + self->allocated;
+}
+
 static
-rc_t buffer_impl_check_integrity ( const buffer_impl_t *self, const uint8_t *base, size_t offset, size_t size )
+rc_t buffer_impl_check_integrity (buffer_impl_t const *self, uint8_t const *base, size_t offset, size_t size)
 {
-    if ( self == NULL )
+    void const *const endp = &base[size+offset];
+
+    if (self == NULL)
         return 0;
 
     /* refcount is of major importance */
-    if ( atomic32_read ( & self -> refcount ) <= 0 )
-        return RC ( rcRuntime, rcBuffer, rcValidating, rcBuffer, rcDestroyed );
+    if (atomic32_read (& self->refcount) <= 0)
+        return RC (rcRuntime, rcBuffer, rcValidating, rcBuffer, rcDestroyed);
 
 #if DEBUG_MALLOC_FREE
-    if ( self -> foo != 0 )
-        return RC ( rcRuntime, rcBuffer, rcValidating, rcBuffer, rcDestroyed );
+    if (self->foo != 0)
+        return RC (rcRuntime, rcBuffer, rcValidating, rcBuffer, rcDestroyed);
 #endif
 
-    if ( base < self -> data || & base [ offset + size ] > & self -> data [ self -> allocated ] )
-        return RC ( rcRuntime, rcBuffer, rcValidating, rcData, rcCorrupt );
+    if ((void const *)base < get_data(self) || get_data_endp(self) < endp)
+        return RC (rcRuntime, rcBuffer, rcValidating, rcData, rcCorrupt);
 
     return 0;
 }
@@ -185,30 +209,30 @@ rc_t buffer_impl_check_integrity ( const buffer_impl_t *self, const uint8_t *bas
  *
  *  "capacity" [ IN ] - the number of bytes to be allocated
  */
-LIB_EXPORT rc_t CC KDataBufferMake( KDataBuffer *target, uint64_t elem_bits, uint64_t elem_count ) {
+LIB_EXPORT rc_t CC KDataBufferMake(KDataBuffer *target, uint64_t elem_bits, uint64_t elem_count) {
     rc_t rc;
-    uint64_t bytes;
+    size_t bytes;
     buffer_impl_t **impp = (buffer_impl_t **)&target->ignore;
     
     if (target == NULL)
     	return RC(rcRuntime, rcBuffer, rcConstructing, rcParam, rcNull);
     
-    bytes = ( elem_bits * elem_count + 7 ) >> 3;
-    if ( ( bytes >> 32 ) != 0 )
+    bytes = roundup((elem_bits * elem_count + 7) / 8, 12);
+    if (8 * (uint64_t)bytes < elem_bits * elem_count)
     	return RC(rcRuntime, rcBuffer, rcConstructing, rcParam, rcTooBig);
     
-    memset ( target, 0, sizeof * target );
+    memset (target, 0, sizeof(*target));
 
-    rc = allocate ( impp, ( size_t ) bytes );
-    if ( rc == 0 ) {
-        target->base = (**impp).data;
+    rc = allocate(impp, bytes);
+    if (rc == 0) {
+        target->base = (void *)get_data(*impp);
         target->elem_bits = elem_bits;
         target->elem_count = elem_count;
     }
     return rc;
 }
 
-LIB_EXPORT rc_t CC KDataBufferResize( KDataBuffer *self, uint64_t new_count) {
+LIB_EXPORT rc_t CC KDataBufferResize(KDataBuffer *self, uint64_t new_count) {
     rc_t rc;
     buffer_impl_t *imp;
     buffer_impl_t *new_imp;
@@ -226,22 +250,22 @@ LIB_EXPORT rc_t CC KDataBufferResize( KDataBuffer *self, uint64_t new_count) {
     }
 
     bits = self->elem_bits * new_count;
-    if ( ( ( bits + 7 ) >> 35 ) != 0 )
+    if (((bits + 7) >> 35) != 0)
     	return RC(rcRuntime, rcBuffer, rcConstructing, rcParam, rcTooBig);
     
     imp = (buffer_impl_t *)self->ignore;
     if (imp == NULL) {
         /* new buffer */
-        rc = allocate(&imp, ( size_t ) ( ( bits + 7 ) >> 3 ) );
+        rc = allocate(&imp, roundup((bits + 7) / 8, 12));
         if (rc == 0) {
             self->ignore = imp;
-            self->base = imp->data;
+            self->base = (void *)get_data(imp);
             self->elem_count = new_count;
         }
         return rc;
     }
 
-    cur_end = &((const uint8_t *)imp)[imp->allocated];
+    cur_end = &((const uint8_t *)imp)[imp->allocated + sizeof *imp];
     new_end = &((const uint8_t *)self->base)[(bits + self->bit_offset + 7) >> 3];
     if (cur_end >= new_end) {
         /* requested end-of-buffer is within current allocation; realloc not required */
@@ -252,31 +276,31 @@ LIB_EXPORT rc_t CC KDataBufferResize( KDataBuffer *self, uint64_t new_count) {
     if (!KDataBufferWritable(self))
         return RC(rcRuntime, rcBuffer, rcResizing, rcSelf, rcReadonly);
     
-    new_size = (bits + 7) >> 3;
-    if (self->base == imp->data && self->bit_offset == 0) {
+    new_size = roundup((bits + 7) / 8, 12);
+    if (self->base == get_data(imp) && self->bit_offset == 0) {
         rc = reallocate(&imp, new_size);
         if (rc == 0) {
             self->ignore = imp;
-            self->base = imp->data;
+            self->base = (void *)get_data(imp);
             self->elem_count = new_count;
         }
         return rc;
     }
 
     /* is sub-buffer but is sole reference */
-    rc = allocate(&new_imp, new_size);
+    rc = allocate(&new_imp, roundup(new_size, 12));
     if (rc == 0) {
-        memcpy(new_imp->data, self->base, new_size);
+        memcpy((void *)get_data(new_imp), self->base, new_size);
         release(imp);
+        self->base = (void *)get_data(new_imp);
         self->ignore = new_imp;
-        self->base = new_imp->data;
         self->elem_count = new_count;
     }
     return rc;
 }
 
-LIB_EXPORT rc_t CC KDataBufferSub ( const KDataBuffer *self,
-    KDataBuffer *target, uint64_t start, uint64_t count )
+LIB_EXPORT rc_t CC KDataBufferSub (const KDataBuffer *self,
+    KDataBuffer *target, uint64_t start, uint64_t count)
 {
     if (self == NULL || target == NULL)
     	return RC(rcRuntime, rcBuffer, rcConstructing, rcParam, rcNull);
@@ -293,36 +317,37 @@ LIB_EXPORT rc_t CC KDataBufferSub ( const KDataBuffer *self,
     }
     {
         buffer_impl_t *imp = (buffer_impl_t *)self->ignore;
-        bitsz_t offset = self->bit_offset + (((bitsz_t)((const uint8_t *)self->base - (const uint8_t *)imp->data)) << 3);
+        bitsz_t offset = self->bit_offset + (((bitsz_t)((uint8_t const *)self->base - (uint8_t const *)get_data(imp))) << 3);
         
         if (start > self->elem_count){
             start = self->elem_count;
-	    count = 0;
-	} else if (count > self->elem_count) {
-	    count = self->elem_count;
-	}
-	if ( start + count > self->elem_count) {
-	    count = self->elem_count - start;
-	}
+            count = 0;
+        }
+        else if (count > self->elem_count) {
+            count = self->elem_count;
+        }
+        if (start + count > self->elem_count) {
+            count = self->elem_count - start;
+        }
         target->elem_count = count;
         offset += (bitsz_t)start * self->elem_bits;
-        target->base = &imp->data[offset >> 3];
+        target->base = &((uint8_t *)get_data(imp))[offset >> 3];
         target->bit_offset = (uint8_t)offset & 0x07;
     }
     return 0;
 }
 
-LIB_EXPORT rc_t CC KDataBufferCast( const KDataBuffer *self, KDataBuffer *target, uint64_t new_elem_bits, bool can_shrink) {
+LIB_EXPORT rc_t CC KDataBufferCast(const KDataBuffer *self, KDataBuffer *target, uint64_t new_elem_bits, bool can_shrink) {
     bitsz_t bits;
     size_t new_elem_count;
     bitsz_t new_bits;
 
-    if ( self == NULL )
-        return RC ( rcRuntime, rcBuffer, rcCasting, rcSelf, rcNull );
-    if ( target == NULL )
-    	return RC ( rcRuntime, rcBuffer, rcCasting, rcParam, rcNull );
-    if ( new_elem_bits == 0 )
-    	return RC ( rcRuntime, rcBuffer, rcCasting, rcParam, rcInvalid );
+    if (self == NULL)
+        return RC (rcRuntime, rcBuffer, rcCasting, rcSelf, rcNull);
+    if (target == NULL)
+    	return RC (rcRuntime, rcBuffer, rcCasting, rcParam, rcNull);
+    if (new_elem_bits == 0)
+    	return RC (rcRuntime, rcBuffer, rcCasting, rcParam, rcInvalid);
     
     bits = KDataBufferBits(self);
     new_elem_count = bits / new_elem_bits;
@@ -340,7 +365,7 @@ LIB_EXPORT rc_t CC KDataBufferCast( const KDataBuffer *self, KDataBuffer *target
     return RC(rcRuntime, rcBuffer, rcCasting, rcParam, rcInvalid);
 }
 
-LIB_EXPORT rc_t CC KDataBufferMakeWritable ( const KDataBuffer *cself, KDataBuffer *target )
+LIB_EXPORT rc_t CC KDataBufferMakeWritable (const KDataBuffer *cself, KDataBuffer *target)
 {
     
     if (cself == NULL || target == NULL)
@@ -352,16 +377,16 @@ LIB_EXPORT rc_t CC KDataBufferMakeWritable ( const KDataBuffer *cself, KDataBuff
         buffer_impl_t *self = (buffer_impl_t *)cself->ignore;
         buffer_impl_t *copy;
         
-        if (cself->base == self->data && cself->bit_offset == 0) {
+        if (cself->base == get_data(self) && cself->bit_offset == 0) {
             /* not a sub-buffer */
             copy = make_copy(self);
             if (copy) {
-                if ((const KDataBuffer *)target == cself)
+                if ((KDataBuffer const *)target == cself)
                     release(self);
                 else 
                     *target = *cself;
                 target->ignore = copy;
-                target->base = copy->data;
+                target->base = (uint8_t *)get_data(copy);
                 
                 return 0;
             }
@@ -375,15 +400,15 @@ LIB_EXPORT rc_t CC KDataBufferMakeWritable ( const KDataBuffer *cself, KDataBuff
             /* sub-buffer so make new and copy */
             rc_t rc;
             
-            rc = allocate(&copy, KDataBufferBytes(cself));
+            rc = allocate(&copy, roundup(KDataBufferBytes(cself), 12));
             if (rc == 0) {
-                bitcpy(copy->data, 0, cself->base, cself->bit_offset, KDataBufferBits(cself));
+                bitcpy((void *)get_data(copy), 0, cself->base, cself->bit_offset, KDataBufferBits(cself));
                 if ((const KDataBuffer *)target == cself)
                     release(self);
                 else 
                     *target = *cself;
                 target->ignore = copy;
-                target->base = copy->data;
+                target->base = (uint8_t *)get_data(copy);
                 target->bit_offset = 0;
                 return 0;
             }
@@ -392,54 +417,70 @@ LIB_EXPORT rc_t CC KDataBufferMakeWritable ( const KDataBuffer *cself, KDataBuff
     }
 }
 
-LIB_EXPORT rc_t CC KDataBufferWhack ( KDataBuffer *self )
+LIB_EXPORT rc_t CC KDataBufferWhack (KDataBuffer *self)
 {
-    if ( self )
+    if (self)
     {
-        if ( self->ignore )
-            release( (buffer_impl_t *)self->ignore );
+        if (self->ignore)
+            release((buffer_impl_t *)self->ignore);
 
         memset(self, 0, sizeof(*self));
     }
     return 0;
 }
 
-LIB_EXPORT bool CC KDataBufferWritable( const KDataBuffer *cself )
+LIB_EXPORT bool CC KDataBufferWritable(const KDataBuffer *cself)
 {
     return (cself != NULL && cself->ignore != NULL &&
             atomic32_read(&((buffer_impl_t *)cself->ignore)->refcount) == 1) ? true : false;
 }
 
+LIB_EXPORT rc_t CC KDataBufferShrink(KDataBuffer *self)
+{
+    if (self && self->ignore) {
+        return shrink((buffer_impl_t **)&self->ignore,
+            (self->elem_bits * self->elem_count + self->bit_offset + 7) / 8);
+    }
+    return 0;
+}
+
+LIB_EXPORT size_t CC KDataBufferMemorySize(KDataBuffer const *self)
+{
+    if (self && self->ignore) {
+        return ((buffer_impl_t const *)self->ignore)->allocated + sizeof(buffer_impl_t);
+    }
+    return 0;
+}
 
 /* CheckIntegrity
  *  performs some level of integrity checking on buffer structure
  */
-LIB_EXPORT rc_t CC KDataBufferCheckIntegrity ( const KDataBuffer *self )
+LIB_EXPORT rc_t CC KDataBufferCheckIntegrity (const KDataBuffer *self)
 {
     /* whether NULL is allowed is determined by caller */
-    if ( self == NULL )
-        return RC ( rcRuntime, rcBuffer, rcValidating, rcSelf, rcNull );
+    if (self == NULL)
+        return RC (rcRuntime, rcBuffer, rcValidating, rcSelf, rcNull);
 
     /* elem-bits must not be 0, unless there is no allocation */
-    if ( self -> elem_bits == 0 )
+    if (self->elem_bits == 0)
     {
-        if ( self -> elem_count == 0 && self -> bit_offset == 0 && self -> ignore == NULL ) {
+        if (self->elem_count == 0 && self->bit_offset == 0 && self->ignore == NULL) {
             /* no allocation */
             return 0;
         }
-	    return RC ( rcRuntime, rcBuffer, rcValidating, rcSelf, rcCorrupt );
+	    return RC (rcRuntime, rcBuffer, rcValidating, rcSelf, rcCorrupt);
     }
 
     /* if there is no allocation, check self */
-    if ( self -> ignore == NULL )
+    if (self->ignore == NULL)
     {
-        if ( self -> elem_count != 0 || self -> bit_offset != 0 )
-	    return RC ( rcRuntime, rcBuffer, rcValidating, rcSelf, rcCorrupt );
+        if (self->elem_count != 0 || self->bit_offset != 0)
+	    return RC (rcRuntime, rcBuffer, rcValidating, rcSelf, rcCorrupt);
     }
 
     /* test self against allocated buffer */
-    return buffer_impl_check_integrity ( self -> ignore, ( const void* ) self -> base,
-        self -> bit_offset / self -> elem_bits, KDataBufferBytes ( self ) );
+    return buffer_impl_check_integrity (self->ignore, (const void*) self->base,
+        self->bit_offset / self->elem_bits, KDataBufferBytes (self));
 }
 
 /* 0x101e9b000 */
diff --git a/libs/klib/judy-vector.c b/libs/klib/judy-vector.c
new file mode 100644
index 0000000..3030d8e
--- /dev/null
+++ b/libs/klib/judy-vector.c
@@ -0,0 +1,892 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/extern.h>
+#include <klib/vector.h>
+#include <klib/refcount.h>
+#include <klib/rc.h>
+#include <sysalloc.h>
+
+#define JUST_DEFINE_YOUR_STUFF 1
+#include "Judy.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+/*--------------------------------------------------------------------------
+ * KVector
+ *  encapsulated vector interface
+ *
+ *  a vector obeys a particular set of messages
+ *  it may be implemented as an array, but not necessarily.
+ *
+ *  the principal property of a vector is that it acts as a map
+ *  between an integer key and a value of some type. in this case,
+ *  we only accept unsigned integers as keys.
+ */
+struct KVector
+{
+    void *nancy;
+    KRefcount refcount;
+    uint32_t fixed_size;
+    bool nancy_bool;
+};
+
+
+/* Make
+ *  create an empty vector
+ */
+LIB_EXPORT rc_t CC KVectorMake ( KVector **vp )
+{
+    rc_t rc;
+
+    if ( vp == NULL )
+        rc = RC ( rcCont, rcVector, rcConstructing, rcParam, rcNull );
+    else
+    {
+        KVector *v = calloc ( 1, sizeof * v );
+        if ( v == NULL )
+            rc = RC ( rcCont, rcVector, rcConstructing, rcMemory, rcExhausted );
+        else
+        {
+            KRefcountInit ( & v -> refcount, 1, "KVector", "make", "v" );
+            * vp = v;
+            return 0;
+        }
+
+        * vp = NULL;
+    }
+
+    return rc;
+}
+
+
+/* Whack
+ */
+static
+rc_t KVectorWhack ( KVector *self )
+{
+    if ( self -> nancy != NULL )
+    {
+        JError_t err;
+        Word_t whee =
+            ( self -> nancy_bool ? Judy1FreeArray : JudyLFreeArray )
+            ( & self -> nancy, & err );
+        ( void ) whee;
+    }
+
+    free ( self );
+    return 0;
+}
+
+
+/* AddRef
+ * Release
+ */
+LIB_EXPORT rc_t CC KVectorAddRef ( const KVector *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "KVector" ) )
+        {
+        case krefOkay:
+            break;
+        case krefLimit:
+            return RC ( rcCont, rcVector, rcAttaching, rcRange, rcExcessive );
+        default:
+            return RC ( rcCont, rcVector, rcAttaching, rcRefcount, rcDestroyed );
+        }
+    }
+    return 0;
+}
+
+LIB_EXPORT rc_t CC KVectorRelease ( const KVector *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "KVector" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+        case krefZero:
+            return KVectorWhack ( ( KVector* ) self );
+        default:
+            return RC ( rcCont, rcVector, rcReleasing, rcRefcount, rcDestroyed );
+        }
+    }
+    return 0;
+}
+
+
+/* NancyError
+ *  translate a JError_t to an rc_t
+ */
+static
+rc_t NancyError ( const JError_t *err, enum RCContext ctx )
+{
+    switch ( JU_ERRNO ( err ) )
+    {
+    case JU_ERRNO_NONE:
+        break;
+    case JU_ERRNO_FULL:
+        return RC ( rcCont, rcVector, ctx, rcRange, rcExcessive );
+    case JU_ERRNO_NOMEM:
+        return RC ( rcCont, rcVector, ctx, rcMemory, rcExhausted );
+    case JU_ERRNO_NULLPPARRAY:
+    case JU_ERRNO_NULLPINDEX:
+        return RC ( rcCont, rcVector, ctx, rcParam, rcNull );
+    case JU_ERRNO_NOTJUDY1:
+    case JU_ERRNO_NOTJUDYL:
+    case JU_ERRNO_NOTJUDYSL:
+        return RC ( rcCont, rcVector, ctx, rcType, rcIncorrect );
+    case JU_ERRNO_OVERRUN:
+    case JU_ERRNO_CORRUPT:
+        return RC ( rcCont, rcVector, ctx, rcVector, rcCorrupt );
+    case JU_ERRNO_NONNULLPARRAY:
+    case JU_ERRNO_NULLPVALUE:
+    case JU_ERRNO_UNSORTED:
+        return RC ( rcCont, rcVector, ctx, rcParam, rcInvalid );
+    }
+
+    return 0;
+}
+
+
+/* Get
+ *  get an untyped value
+ *  returns rc_t state of rcNull if index is not set
+ *
+ *  "key" [ IN ] - vector index
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for value
+ *
+ *  "bytes" [ OUT ] - return parameter for bytes in value
+ *
+ * NB - if rc_t state is rcInsufficient, "bytes" will contain
+ *  the number of bytes required to access the indexed value
+ */
+static
+rc_t Nancy1Test ( const void *nancy, uint64_t idx, bool *value )
+{
+    JError_t err;
+    int data = Judy1Test ( nancy, ( Word_t ) idx, & err );
+    if ( data == JERR )
+        return NancyError ( & err, rcAccessing );
+    * value = data != 0;
+    return 0;
+}
+
+static
+rc_t NancyLGet ( const void *nancy, uint64_t idx, Word_t *value )
+{
+    JError_t err;
+    PPvoid_t datap = JudyLGet ( nancy, ( Word_t ) idx, & err );
+    if ( datap == NULL )
+        return RC ( rcCont, rcVector, rcAccessing, rcItem, rcNotFound );
+    if ( datap == PPJERR )
+        return NancyError ( & err, rcAccessing );
+
+    * value = * ( const Word_t* ) datap;
+    return 0;
+}
+
+LIB_EXPORT rc_t CC KVectorGet ( const KVector *self, uint64_t key,
+    void *buffer, size_t bsize, size_t *bytes )
+{
+    rc_t rc;
+
+    if ( bytes == NULL )
+        rc = RC ( rcCont, rcVector, rcAccessing, rcParam, rcNull );
+    else
+    {
+        if ( self == NULL )
+            rc = RC ( rcCont, rcVector, rcAccessing, rcSelf, rcNull );
+        else if ( buffer == NULL && bsize != 0 )
+            rc = RC ( rcCont, rcVector, rcAccessing, rcParam, rcNull );
+        else if ( sizeof key > sizeof ( Word_t ) && ( key >> 32 ) != 0 )
+            rc = RC ( rcCont, rcVector, rcAccessing, rcRange, rcExcessive );
+        else
+        {
+            if ( self -> nancy_bool )
+            {
+                bool data;
+                rc = Nancy1Test ( self -> nancy, key, & data );
+                if ( rc == 0 )
+                {
+                    * bytes = sizeof data;
+                    if ( bsize < sizeof data )
+                        rc = RC ( rcCont, rcVector, rcAccessing, rcBuffer, rcInsufficient );
+                    else
+                        * ( bool* ) buffer = data;
+                    return rc;
+                }
+            }
+            else
+            {
+                Word_t data;
+                rc = NancyLGet ( self -> nancy, key, & data );
+                if ( rc == 0 )
+                {
+                    if ( self -> fixed_size == 0 )
+                        rc = RC ( rcCont, rcVector, rcAccessing, rcFunction, rcUnsupported );
+                    else
+                    {
+                        * bytes = self -> fixed_size;
+                        if ( bsize < self -> fixed_size )
+                            rc = RC ( rcCont, rcVector, rcAccessing, rcBuffer, rcInsufficient );
+                        else switch ( self -> fixed_size )
+                        {
+                        case 1:
+                            if ( data >= 0x100 )
+                                rc = RC ( rcCont, rcVector, rcAccessing, rcData, rcCorrupt );
+                            * ( uint8_t* ) buffer = ( uint8_t ) data;
+                            break;
+                        case 2:
+                            if ( data >= 0x10000 )
+                                rc = RC ( rcCont, rcVector, rcAccessing, rcData, rcCorrupt );
+                            * ( uint16_t* ) buffer = ( uint16_t ) data;
+                            break;
+                        case 4:
+                            if ( sizeof data > 4 && ( data >> 32 ) != 0 )
+                                rc = RC ( rcCont, rcVector, rcAccessing, rcData, rcCorrupt );
+                            * ( uint32_t* ) buffer = ( uint32_t ) data;
+                            break;
+                        case 8:
+                            * ( uint64_t* ) buffer = ( uint64_t ) data;
+                            break;
+                        default:
+                            rc = RC ( rcCont, rcVector, rcAccessing, rcType, rcUnsupported );
+                        }
+                        return rc;
+                    }
+                }
+            }
+        }
+
+        * bytes = 0;
+    }
+
+    return rc;
+}
+
+/* Get
+ *  get typed values
+ *  returns rc_t state of rcNull if index is not set
+ *
+ *  "key" [ IN ] - vector index
+ *
+ *  "data" [ OUT ] - return parameter for value
+ */
+LIB_EXPORT rc_t CC KVectorGetBool ( const KVector *self, uint64_t key, bool *data )
+{
+    size_t bytes;
+    return KVectorGet ( self, key, data, sizeof * data, & bytes );
+}
+
+LIB_EXPORT rc_t CC KVectorGetI8 ( const KVector *self, uint64_t key, int8_t *data )
+{
+    size_t bytes;
+    return KVectorGet ( self, key, data, sizeof * data, & bytes );
+}
+
+LIB_EXPORT rc_t CC KVectorGetI16 ( const KVector *self, uint64_t key, int16_t *data )
+{
+    size_t bytes;
+    return KVectorGet ( self, key, data, sizeof * data, & bytes );
+}
+
+LIB_EXPORT rc_t CC KVectorGetI32 ( const KVector *self, uint64_t key, int32_t *data )
+{
+    size_t bytes;
+    return KVectorGet ( self, key, data, sizeof * data, & bytes );
+}
+
+LIB_EXPORT rc_t CC KVectorGetI64 ( const KVector *self, uint64_t key, int64_t *data )
+{
+    size_t bytes;
+    return KVectorGet ( self, key, data, sizeof * data, & bytes );
+}
+
+LIB_EXPORT rc_t CC KVectorGetU8 ( const KVector *self, uint64_t key, uint8_t *data )
+{
+    size_t bytes;
+    return KVectorGet ( self, key, data, sizeof * data, & bytes );
+}
+
+LIB_EXPORT rc_t CC KVectorGetU16 ( const KVector *self, uint64_t key, uint16_t *data )
+{
+    size_t bytes;
+    return KVectorGet ( self, key, data, sizeof * data, & bytes );
+}
+
+LIB_EXPORT rc_t CC KVectorGetU32 ( const KVector *self, uint64_t key, uint32_t *data )
+{
+    size_t bytes;
+    return KVectorGet ( self, key, data, sizeof * data, & bytes );
+}
+
+LIB_EXPORT rc_t CC KVectorGetU64 ( const KVector *self, uint64_t key, uint64_t *data )
+{
+    size_t bytes;
+    return KVectorGet ( self, key, data, sizeof * data, & bytes );
+}
+
+LIB_EXPORT rc_t CC KVectorGetF32 ( const KVector *self, uint64_t key, float *data )
+{
+    size_t bytes;
+    rc_t rc = KVectorGet ( self, key, data, sizeof * data, & bytes );
+    if ( rc == 0 && bytes != sizeof * data )
+        rc = RC ( rcCont, rcVector, rcAccessing, rcType, rcUnsupported );
+    return rc;
+}
+
+LIB_EXPORT rc_t CC KVectorGetF64 ( const KVector *self, uint64_t key, double *data )
+{
+    size_t bytes;
+    rc_t rc = KVectorGet ( self, key, data, sizeof * data, & bytes );
+    if ( rc == 0 && bytes != sizeof * data )
+        rc = RC ( rcCont, rcVector, rcAccessing, rcType, rcUnsupported );
+    return rc;
+}
+
+LIB_EXPORT rc_t CC KVectorGetPtr ( const KVector *self, uint64_t key, void **data )
+{
+    size_t bytes;
+    rc_t rc = KVectorGet ( self, key, data, sizeof * data, & bytes );
+    if ( rc == 0 && bytes != sizeof * data )
+        rc = RC ( rcCont, rcVector, rcAccessing, rcType, rcUnsupported );
+    return rc;
+}
+
+
+/* Set
+ *  set an untyped value
+ *
+ *  "key" [ IN ] - vector index
+ *
+ *  "data" [ IN ] and "bytes" [ IN ] - value buffer
+ */
+static
+rc_t Nancy1Set ( void **nancy, uint64_t idx, bool value )
+{
+    JError_t err;
+    int status = ( value ? Judy1Set : Judy1Unset ) ( nancy, ( Word_t ) idx, & err );
+    if ( status == JERR )
+        return NancyError ( & err, rcWriting );
+    return 0;
+}
+
+static
+rc_t NancyLSet ( void **nancy, uint64_t idx, Word_t value )
+{
+    JError_t err;
+    PPvoid_t datap = JudyLIns ( nancy, ( Word_t ) idx, & err );
+    if ( datap == NULL )
+        return RC ( rcCont, rcVector, rcWriting, rcMemory, rcExhausted );
+    if ( datap == PPJERR )
+        return NancyError ( & err, rcWriting );
+    * ( Word_t* ) datap = value;
+    return 0;
+}
+
+LIB_EXPORT rc_t CC KVectorSet ( KVector *self, uint64_t key,
+    const void *data, size_t bytes )
+{
+    rc_t rc;
+
+    if ( self == NULL )
+        rc = RC ( rcCont, rcVector, rcWriting, rcSelf, rcNull );
+    else if ( data == NULL )
+        rc = RC ( rcCont, rcVector, rcWriting, rcParam, rcNull );
+    else if ( bytes == 0 )
+        rc = RC ( rcCont, rcVector, rcWriting, rcParam, rcEmpty );
+    else
+    {
+        Word_t value;
+
+        /* detect first set */
+        if ( self -> nancy == NULL )
+        {
+            switch ( bytes )
+            {
+            case 1:
+            case 2:
+            case 4:
+                break;
+            case 8:
+                if ( sizeof value < 8 )
+                    return RC ( rcCont, rcVector, rcWriting, rcParam, rcExcessive );
+            }
+
+            self -> fixed_size = ( uint32_t ) bytes;
+        }
+        else if ( bytes != ( size_t ) self -> fixed_size )
+        {
+            return RC ( rcCont, rcVector, rcWriting, rcParam, rcInconsistent );
+        }
+        else if ( self -> nancy_bool )
+        {
+            switch ( * ( const bool* ) data )
+            {
+            case 0:
+            case 1:
+                break;
+            default:
+                return RC ( rcCont, rcVector, rcWriting, rcParam, rcInvalid );
+            }
+            return Nancy1Set ( & self -> nancy, key, * ( const bool* ) data );
+        }
+
+        switch ( bytes )
+        {
+        case 1:
+            value = * ( const uint8_t* ) data;
+            break;
+        case 2:
+            value = * ( const uint16_t* ) data;
+            break;
+        case 4:
+            value = * ( const uint32_t* ) data;
+            break;
+        case 8:
+            value = * ( const uint64_t* ) data;
+            break;
+        }
+
+        rc = NancyLSet ( & self -> nancy, key, value );
+    }
+
+    return rc;
+}
+
+/* Set
+ *  set typed values
+ *
+ *  "key" [ IN ] - vector index
+ *
+ *  "data" [ IN ] - value
+ */
+LIB_EXPORT rc_t CC KVectorSetBool ( KVector *self, uint64_t key, bool data )
+{
+    rc_t rc;
+
+    if ( self == NULL )
+        rc = RC ( rcCont, rcVector, rcWriting, rcSelf, rcNull );
+    else
+    {
+        /* detect first set */
+        if ( self -> nancy == NULL )
+        {
+            self -> fixed_size = sizeof data;
+            self -> nancy_bool = true;
+        }
+        else if ( ! self -> nancy_bool )
+        {
+            return RC ( rcCont, rcVector, rcWriting, rcParam, rcInvalid );
+        }
+
+        rc = Nancy1Set ( & self -> nancy, key, data );
+    }
+
+    return rc;
+}
+
+LIB_EXPORT rc_t CC KVectorSetI8 ( KVector *self, uint64_t key, int8_t value )
+{
+    return KVectorSet ( self, key, & value, sizeof value );
+}
+
+LIB_EXPORT rc_t CC KVectorSetI16 ( KVector *self, uint64_t key, int16_t value )
+{
+    return KVectorSet ( self, key, & value, sizeof value );
+}
+
+LIB_EXPORT rc_t CC KVectorSetI32 ( KVector *self, uint64_t key, int32_t value )
+{
+    return KVectorSet ( self, key, & value, sizeof value );
+}
+
+LIB_EXPORT rc_t CC KVectorSetI64 ( KVector *self, uint64_t key, int64_t value )
+{
+    return KVectorSet ( self, key, & value, sizeof value );
+}
+
+LIB_EXPORT rc_t CC KVectorSetU8 ( KVector *self, uint64_t key, uint8_t value )
+{
+    return KVectorSet ( self, key, & value, sizeof value );
+}
+
+LIB_EXPORT rc_t CC KVectorSetU16 ( KVector *self, uint64_t key, uint16_t value )
+{
+    return KVectorSet ( self, key, & value, sizeof value );
+}
+
+LIB_EXPORT rc_t CC KVectorSetU32 ( KVector *self, uint64_t key, uint32_t value )
+{
+    return KVectorSet ( self, key, & value, sizeof value );
+}
+
+LIB_EXPORT rc_t CC KVectorSetU64 ( KVector *self, uint64_t key, uint64_t value )
+{
+    return KVectorSet ( self, key, & value, sizeof value );
+}
+
+LIB_EXPORT rc_t CC KVectorSetF32 ( KVector *self, uint64_t key, float value )
+{
+    return KVectorSet ( self, key, & value, sizeof value );
+}
+
+LIB_EXPORT rc_t CC KVectorSetF64 ( KVector *self, uint64_t key, double value )
+{
+    return KVectorSet ( self, key, & value, sizeof value );
+}
+
+LIB_EXPORT rc_t CC KVectorSetPtr ( KVector *self, uint64_t key, const void *value )
+{
+    return KVectorSet ( self, key, & value, sizeof value );
+}
+
+
+/* Unset
+ *  unset an entry
+ *  returns rc_t state rcNull if index is not set
+ *
+ *  "key" [ IN ] - vector index
+ */
+LIB_EXPORT rc_t CC KVectorUnset ( KVector *self, uint64_t key )
+{
+    rc_t rc;
+
+    if ( self == NULL )
+        rc = RC ( rcCont, rcVector, rcRemoving, rcSelf, rcNull );
+    else
+    {
+        int status;
+        JError_t err;
+
+        if ( self -> nancy_bool )
+            return Nancy1Set ( & self -> nancy, key, false );
+
+        status = JudyLDel ( & self -> nancy, key, & err );
+        if ( status == JERR )
+            return NancyError ( & err, rcRemoving );
+
+        rc = 0;
+    }
+
+    return rc;
+}
+
+
+/* Visit
+ *  executes a function on each key/value pair
+ *  returns early if "f" returns non-zero rc_t
+ *
+ *  "reverse" [ IN ] - if true, execute in reverse order
+ *
+ *  "f" [ IN ] and "user_data" [ IN, OPAQUE ] - function to be
+ *  executed on each vector element or until the function
+ *  returns true.
+ */
+LIB_EXPORT rc_t CC KVectorVisit ( const KVector *self, bool reverse,
+    rc_t ( CC * f ) ( uint64_t key, const void *value, size_t bytes, void *user_data ),
+    void *user_data )
+{
+    rc_t rc;
+
+    if ( self == NULL )
+        rc = RC ( rcCont, rcVector, rcVisiting, rcSelf, rcNull );
+    else if ( f == NULL )
+        rc = RC ( rcCont, rcVector, rcVisiting, rcFunction, rcNull );
+    else
+    {
+        rc = 0;
+
+        if ( self -> nancy != NULL )
+        {
+            JError_t err;
+            Word_t first, last, idx;
+
+	    /** Judy1First searches for first value higher then first**/ 
+            first = 0;
+	    /** Judy1Last searches for first value lower then last **/
+            last = (Word_t)-1;
+
+            if ( self -> nancy_bool )
+            {
+                bool value = true;
+                int status = Judy1First ( self -> nancy, & first, & err );
+                if ( status != JERR )
+                    status = Judy1Last ( self -> nancy, & last, & err );
+                if ( status == JERR )
+                    rc = NancyError ( & err, rcVisiting );
+                else if ( reverse )
+                {
+                    for ( idx = last; ; )
+                    {
+                        rc = ( * f ) ( idx, & value, sizeof value, user_data );
+                        if ( rc != 0 )
+                            break;
+                        if ( idx == first )
+                            break;
+                        status = Judy1Prev ( self -> nancy, & idx, & err );
+                        if ( status == JERR )
+                        {
+                            rc = NancyError ( & err, rcVisiting );
+                            break;
+                        }
+                    }
+                }
+                else
+                {
+                    for ( idx = first; ; )
+                    {
+                        rc = ( * f ) ( idx, & value, sizeof value, user_data );
+                        if ( rc != 0 )
+                            break;
+                        if ( idx == last )
+                            break;
+                        status = Judy1Next ( self -> nancy, & idx, & err );
+                        if ( status == JERR )
+                        {
+                            rc = NancyError ( & err, rcVisiting );
+                            break;
+                        }
+                    }
+                }
+            }
+            else
+            {
+                Word_t value;
+                PPvoid_t lastp, datap = JudyLFirst ( self -> nancy, & first, & err );
+                if ( datap != PPJERR )
+                    lastp = JudyLLast ( self -> nancy, & last, & err );
+                if ( datap == PPJERR || lastp == PPJERR )
+                    rc = NancyError ( & err, rcVisiting );
+                else if ( reverse )
+                {
+                    for ( rc = 0, idx = last, datap = lastp; ; )
+                    {
+                        if ( datap == NULL )
+                            break;
+                        value = * ( const Word_t* ) datap;
+                        rc = ( * f ) ( idx, & value, sizeof value, user_data );
+                        if ( rc != 0 )
+                            break;
+                        if ( idx == first )
+                            break;
+                        datap = JudyLPrev ( self -> nancy, & idx, & err );
+                        if ( datap == PPJERR )
+                        {
+                            rc = NancyError ( & err, rcVisiting );
+                            break;
+                        }
+                    }
+                }
+                else
+                {
+                    for ( rc = 0, idx = first; ; )
+                    {
+                        if ( datap == NULL )
+                            break;
+                        value = * ( const Word_t* ) datap;
+                        rc = ( * f ) ( idx, & value, sizeof value, user_data );
+                        if ( rc != 0 )
+                            break;
+                        if ( idx == last )
+                            break;
+                        datap = JudyLNext ( self -> nancy, & idx, & err );
+                        if ( datap == PPJERR )
+                        {
+                            rc = NancyError ( & err, rcVisiting );
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    return rc;
+}
+
+/* Visit
+ *  visit typed values
+ *  returns early if "f" returns non-zero rc_t
+ *
+ *  "reverse" [ IN ] - if true, execute in reverse order
+ *
+ *  "f" [ IN ] and "user_data" [ IN, OPAQUE ] - function to be
+ *  executed on each vector element or until the function
+ *  returns true.
+ */
+typedef struct KVectorVisitTypedData KVectorVisitTypedData;
+struct KVectorVisitTypedData
+{
+    union
+    {
+        rc_t ( CC * b ) ( uint64_t key, bool value, void *user_data );
+        rc_t ( CC * i ) ( uint64_t key, int64_t value, void *user_data );
+        rc_t ( CC * u ) ( uint64_t key, uint64_t value, void *user_data );
+        rc_t ( CC * f ) ( uint64_t key, double value, void *user_data );
+        rc_t ( CC * p ) ( uint64_t key, const void *value, void *user_data );
+    } f;
+    void *user_data;
+};
+
+static
+rc_t CC KVectorVisitBoolFunc ( uint64_t key, const void *ptr, size_t bytes, void *user_data )
+{
+    rc_t rc;
+    bool value;
+    if ( bytes != sizeof value )
+        rc = RC ( rcCont, rcVector, rcVisiting, rcType, rcInvalid );
+    else if ( * ( const uint8_t* ) ptr > 1 )
+        rc = RC ( rcCont, rcVector, rcVisiting, rcData, rcInvalid );
+    else
+    {
+        KVectorVisitTypedData *pb = user_data;
+        rc = ( * pb -> f . b ) ( key,  * ( const bool* ) ptr, pb -> user_data );
+    }
+
+    return rc;
+}
+
+LIB_EXPORT rc_t CC KVectorVisitBool ( const KVector *self, bool reverse,
+    rc_t ( CC * f ) ( uint64_t key, bool value, void *user_data ),
+    void *user_data )
+{
+    KVectorVisitTypedData pb;
+    pb . f . b = f;
+    pb . user_data = user_data;
+
+    return KVectorVisit ( self, reverse, KVectorVisitBoolFunc, & pb );
+}
+
+static
+rc_t CC KVectorVisitI64Func ( uint64_t key, const void *ptr, size_t bytes, void *user_data )
+{
+    int64_t value;
+    KVectorVisitTypedData *pb = user_data;
+
+    switch ( bytes )
+    {
+    case 1:
+        value = ( int8_t ) * ( const Word_t* ) ptr;
+        break;
+    case 2:
+        value = ( int16_t ) * ( const Word_t* ) ptr;
+        break;
+    case 4:
+        value = ( int32_t ) * ( const Word_t* ) ptr;
+        break;
+    default:
+        value = ( int64_t ) * ( const Word_t* ) ptr;
+    }
+
+    return ( * pb -> f . i ) ( key, value, pb -> user_data );
+}
+
+LIB_EXPORT rc_t CC KVectorVisitI64 ( const KVector *self, bool reverse,
+    rc_t ( CC * f ) ( uint64_t key, int64_t value, void *user_data ),
+    void *user_data )
+{
+    KVectorVisitTypedData pb;
+    pb . f . i = f;
+    pb . user_data = user_data;
+
+    return KVectorVisit ( self, reverse, KVectorVisitI64Func, & pb );
+}
+
+static
+rc_t CC KVectorVisitU64Func ( uint64_t key, const void *ptr, size_t bytes, void *user_data )
+{
+    KVectorVisitTypedData *pb = user_data;
+    return ( * pb -> f . u ) ( key, * ( const Word_t* ) ptr, pb -> user_data );
+}
+
+LIB_EXPORT rc_t CC KVectorVisitU64 ( const KVector *self, bool reverse,
+    rc_t ( CC * f ) ( uint64_t key, uint64_t value, void *user_data ),
+    void *user_data )
+{
+    KVectorVisitTypedData pb;
+    pb . f . u = f;
+    pb . user_data = user_data;
+
+    return KVectorVisit ( self, reverse, KVectorVisitU64Func, & pb );
+}
+
+static
+rc_t CC KVectorVisitF64Func ( uint64_t key, const void *ptr, size_t bytes, void *user_data )
+{
+    uint32_t u32;
+    double value;
+    KVectorVisitTypedData *pb = user_data;
+
+    switch ( bytes )
+    {
+    case 4:
+        u32 = ( uint32_t ) * ( const Word_t* ) ptr;
+        value = * ( const float* ) & u32;
+        break;
+    default:
+        value = * ( const double* ) ptr;
+    }
+
+    return ( * pb -> f . f ) ( key, value, pb -> user_data );
+}
+
+LIB_EXPORT rc_t CC KVectorVisitF64 ( const KVector *self, bool reverse,
+    rc_t ( CC * f ) ( uint64_t key, double value, void *user_data ),
+    void *user_data )
+{
+    KVectorVisitTypedData pb;
+    pb . f . f = f;
+    pb . user_data = user_data;
+
+    return KVectorVisit ( self, reverse, KVectorVisitF64Func, & pb );
+}
+
+static
+rc_t CC KVectorVisitPtrFunc ( uint64_t key, const void *ptr, size_t bytes, void *user_data )
+{
+    KVectorVisitTypedData *pb = user_data;
+    return ( * pb -> f . p ) ( key, * ( const void** ) ptr, pb -> user_data );
+}
+
+LIB_EXPORT rc_t CC KVectorVisitPtr ( const KVector *self, bool reverse,
+    rc_t ( CC * f ) ( uint64_t key, const void *value, void *user_data ),
+    void *user_data )
+{
+    KVectorVisitTypedData pb;
+    pb . f . p = f;
+    pb . user_data = user_data;
+
+    return KVectorVisit ( self, reverse, KVectorVisitPtrFunc, & pb );
+}
diff --git a/libs/klib/judy/Judy1.h b/libs/klib/judy/Judy1.h
new file mode 100644
index 0000000..5eeb6fd
--- /dev/null
+++ b/libs/klib/judy/Judy1.h
@@ -0,0 +1,549 @@
+#ifndef _JUDY1_INCLUDED
+#define _JUDY1_INCLUDED
+// _________________
+//
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// ****************************************************************************
+//          JUDY1 -- SMALL/LARGE AND/OR CLUSTERED/SPARSE BIT ARRAYS
+//
+//                                    -by-
+//
+//                             Douglas L. Baskins
+//                             doug at sourcejudy.com
+//
+// Judy arrays are designed to be used instead of arrays.  The performance
+// suggests the reason why Judy arrays are thought of as arrays, instead of
+// trees.  They are remarkably memory efficient at all populations.
+// Implemented as a hybrid digital tree (but really a state machine, see
+// below), Judy arrays feature fast insert/retrievals, fast near neighbor
+// searching, and contain a population tree for extremely fast ordinal related
+// retrievals.
+//
+// CONVENTIONS:
+//
+// - The comments here refer to 32-bit [64-bit] systems.
+//
+// - BranchL, LeafL refer to linear branches and leaves (small populations),
+//   except LeafL does not actually appear as such; rather, Leaf1..3 [Leaf1..7]
+//   is used to represent leaf Index sizes, and LeafW refers to a Leaf with
+//   full (long) word Indexes, which is also a type of linear leaf.  Note that
+//   root-level LeafW (Leaf4 [Leaf8]) leaves are also called LEAFW.
+//
+// - BranchB, LeafB1 refer to bitmap branches and leaves (intermediate
+//   populations).
+//
+// - BranchU refers to uncompressed branches.  An uncompressed branch has 256
+//   JPs, some of which could be null.  Note:  All leaves are compressed (and
+//   sorted), or else an expanse is full (FullPopu), so there is no LeafU
+//   equivalent to BranchU.
+//
+// - "Popu" is short for "Population".
+// - "Pop1" refers to actual population (base 1).
+// - "Pop0" refers to Pop1 - 1 (base 0), the way populations are stored in data
+//   structures.
+//
+// - Branches and Leaves are both named by the number of bytes in their Pop0
+//   field.  In the case of Leaves, the same number applies to the Index sizes.
+//
+// - The representation of many numbers as hex is a relatively safe and
+//   portable way to get desired bitpatterns as unsigned longs.
+//
+// - Some preprocessors cant handle single apostrophe characters within
+//   #ifndef code, so here, use delete all instead.
+
+#include "JudyPrivate.h"        // includes Judy.h in turn.
+#include "JudyPrivateBranch.h"
+
+
+// ****************************************************************************
+// JUDY1 ROOT POINTER (JRP) AND JUDY1 POINTER (JP) TYPE FIELDS
+// ****************************************************************************
+//
+// The following enum lists all possible JP Type fields. 
+
+typedef enum            // uint8_t -- but C does not support this type of enum.
+{
+
+// JP NULL TYPES:
+//
+// There is a series of cJ1_JPNULL* Types because each one pre-records a
+// different Index Size for when the first Index is inserted in the previously
+// null JP.  They must start >= 8 (three bits).
+//
+// Note:  These Types must be in sequential order for doing relative
+// calculations between them.
+
+        cJ1_JPNULL1 = 1,
+                                // Index Size 1[1] byte  when 1 Index inserted.
+        cJ1_JPNULL2,            // Index Size 2[2] bytes when 1 Index inserted.
+        cJ1_JPNULL3,            // Index Size 3[3] bytes when 1 Index inserted.
+
+#ifndef JU_64BIT
+#define cJ1_JPNULLMAX cJ1_JPNULL3
+#else
+        cJ1_JPNULL4,            // Index Size 4[4] bytes when 1 Index inserted.
+        cJ1_JPNULL5,            // Index Size 5[5] bytes when 1 Index inserted.
+        cJ1_JPNULL6,            // Index Size 6[6] bytes when 1 Index inserted.
+        cJ1_JPNULL7,            // Index Size 7[7] bytes when 1 Index inserted.
+#define cJ1_JPNULLMAX cJ1_JPNULL7
+#endif
+
+
+// JP BRANCH TYPES:
+//
+// Note:  There are no state-1 branches; only leaves reside at state 1.
+
+// Linear branches:
+//
+// Note:  These Types must be in sequential order for doing relative
+// calculations between them.
+
+        cJ1_JPBRANCH_L2,        // 2[2] bytes Pop0, 1[5] bytes Dcd.
+        cJ1_JPBRANCH_L3,        // 3[3] bytes Pop0, 0[4] bytes Dcd.
+
+#ifdef JU_64BIT
+        cJ1_JPBRANCH_L4,        //  [4] bytes Pop0,  [3] bytes Dcd.
+        cJ1_JPBRANCH_L5,        //  [5] bytes Pop0,  [2] bytes Dcd.
+        cJ1_JPBRANCH_L6,        //  [6] bytes Pop0,  [1] byte  Dcd.
+        cJ1_JPBRANCH_L7,        //  [7] bytes Pop0,  [0] bytes Dcd.
+#endif
+
+        cJ1_JPBRANCH_L,         // note:  DcdPopO field not used.
+
+// Bitmap branches:
+//
+// Note:  These Types must be in sequential order for doing relative
+// calculations between them.
+
+        cJ1_JPBRANCH_B2,        // 2[2] bytes Pop0, 1[5] bytes Dcd.
+        cJ1_JPBRANCH_B3,        // 3[3] bytes Pop0, 0[4] bytes Dcd.
+
+#ifdef JU_64BIT
+        cJ1_JPBRANCH_B4,        //  [4] bytes Pop0,  [3] bytes Dcd.
+        cJ1_JPBRANCH_B5,        //  [5] bytes Pop0,  [2] bytes Dcd.
+        cJ1_JPBRANCH_B6,        //  [6] bytes Pop0,  [1] byte  Dcd.
+        cJ1_JPBRANCH_B7,        //  [7] bytes Pop0,  [0] bytes Dcd.
+#endif
+
+        cJ1_JPBRANCH_B,         // note:  DcdPopO field not used.
+
+// Uncompressed branches:
+//
+// Note:  These Types must be in sequential order for doing relative
+// calculations between them.
+
+        cJ1_JPBRANCH_U2,        // 2[2] bytes Pop0, 1[5] bytes Dcd.
+        cJ1_JPBRANCH_U3,        // 3[3] bytes Pop0, 0[4] bytes Dcd.
+
+#ifdef JU_64BIT
+        cJ1_JPBRANCH_U4,        //  [4] bytes Pop0,  [3] bytes Dcd.
+        cJ1_JPBRANCH_U5,        //  [5] bytes Pop0,  [2] bytes Dcd.
+        cJ1_JPBRANCH_U6,        //  [6] bytes Pop0,  [1] byte  Dcd.
+        cJ1_JPBRANCH_U7,        //  [7] bytes Pop0,  [0] bytes Dcd.
+#endif
+
+        cJ1_JPBRANCH_U,         // note:  DcdPopO field not used.
+
+
+// JP LEAF TYPES:
+
+// Linear leaves:
+//
+// Note:  These Types must be in sequential order for doing relative
+// calculations between them.
+//
+// Note:  There is no cJ1_JPLEAF1 for 64-bit for a subtle reason.  An immediate
+// JP can hold 15 1-byte Indexes, and a bitmap leaf would be used for 17
+// Indexes, so rather than support a linear leaf for only the case of exactly
+// 16 Indexes, a bitmap leaf is used in that case.  See also below regarding
+// cJ1_LEAF1_MAXPOP1 on 64-bit systems.
+//
+// Note:  There is no full-word (4-byte [8-byte]) Index leaf under a JP because
+// non-root-state leaves only occur under branches that decode at least one
+// byte.  Full-word, root-state leaves are under a JRP, not a JP.  However, in
+// the code a "fake" JP can be created temporarily above a root-state leaf.
+
+#ifndef JU_64BIT // 32-bit only; see above.
+        cJ1_JPLEAF1,            // 1    byte  Pop0, 2    bytes Dcd.
+#endif
+
+        cJ1_JPLEAF2,            // 2[2] bytes Pop0, 1[5] bytes Dcd.
+        cJ1_JPLEAF3,            // 3[3] bytes Pop0, 0[4] bytes Dcd.
+
+#ifdef JU_64BIT
+        cJ1_JPLEAF4,            //  [4] bytes Pop0,  [3] bytes Dcd.
+        cJ1_JPLEAF5,            //  [5] bytes Pop0,  [2] bytes Dcd.
+        cJ1_JPLEAF6,            //  [6] bytes Pop0,  [1] byte  Dcd.
+        cJ1_JPLEAF7,            //  [7] bytes Pop0,  [0] bytes Dcd.
+#endif
+
+// Bitmap leaf; Index Size == 1:
+//
+// Note:  These are currently only supported at state 1.  At other states the
+// bitmap would grow from 256 to 256^2, 256^3, ... bits, which would not be
+// efficient..
+
+        cJ1_JPLEAF_B1,          // 1[1] byte Pop0, 2[6] bytes Dcd.
+
+
+// Full population; Index Size == 1 virtual leaf:
+//
+// Note:  These are currently only supported at state 1.  At other states they
+// could be used, but they would be rare and the savings are dubious.
+
+        cJ1_JPFULLPOPU1,        // 1[1] byte Pop0, 2[6] bytes Dcd.
+
+#ifdef notdef  // for future enhancements
+        cJ1_JPFULLPOPU1m1,      // Full Population - 1 
+        cJ1_JPFULLPOPU1m2,      // Full Population - 2 
+        cJ1_JPFULLPOPU1m3,      // Full Population - 3 
+        cJ1_JPFULLPOPU1m4,      // Full Population - 4 
+        cJ1_JPFULLPOPU1m5,      // Full Population - 5 
+        cJ1_JPFULLPOPU1m6,      // Full Population - 6 
+        cJ1_JPFULLPOPU1m7,      // Full Population - 7 
+
+#ifdef JU_64BIT
+        cJ1_JPFULLPOPU1m8,      // Full Population - 8 
+        cJ1_JPFULLPOPU1m9,      // Full Population - 9 
+        cJ1_JPFULLPOPU1m10,     // Full Population - 10 
+        cJ1_JPFULLPOPU1m11,     // Full Population - 11
+        cJ1_JPFULLPOPU1m12,     // Full Population - 12
+        cJ1_JPFULLPOPU1m13,     // Full Population - 13
+        cJ1_JPFULLPOPU1m14,     // Full Population - 14
+        cJ1_JPFULLPOPU1m15,     // Full Population - 15
+#endif
+#endif // notdef -- for future enhancements
+
+
+// JP IMMEDIATES; leaves (Indexes) stored inside a JP:
+//
+// The second numeric suffix is the Pop1 for each type.  As the Index Size
+// increases, the maximum possible population decreases.
+//
+// Note:  These Types must be in sequential order in each group (Index Size),
+// and the groups in correct order too, for doing relative calculations between
+// them.  For example, since these Types enumerate the Pop1 values (unlike
+// other JP Types where there is a Pop0 value in the JP), the maximum Pop1 for
+// each Index Size is computable.
+
+        cJ1_JPIMMED_1_01,       // Index Size = 1, Pop1 = 1.
+        cJ1_JPIMMED_2_01,       // Index Size = 2, Pop1 = 1.
+        cJ1_JPIMMED_3_01,       // Index Size = 3, Pop1 = 1.
+#ifdef JU_64BIT
+        cJ1_JPIMMED_4_01,       // Index Size = 4, Pop1 = 1.
+        cJ1_JPIMMED_5_01,       // Index Size = 5, Pop1 = 1.
+        cJ1_JPIMMED_6_01,       // Index Size = 6, Pop1 = 1.
+        cJ1_JPIMMED_7_01,       // Index Size = 7, Pop1 = 1.
+#endif
+
+        cJ1_JPIMMED_1_02,       // Index Size = 1, Pop1 = 2.
+        cJ1_JPIMMED_1_03,       // Index Size = 1, Pop1 = 3.
+        cJ1_JPIMMED_1_04,       // Index Size = 1, Pop1 = 4.
+        cJ1_JPIMMED_1_05,       // Index Size = 1, Pop1 = 5.
+        cJ1_JPIMMED_1_06,       // Index Size = 1, Pop1 = 6.
+        cJ1_JPIMMED_1_07,       // Index Size = 1, Pop1 = 7.
+
+#ifdef JU_64BIT
+        cJ1_JPIMMED_1_08,       // Index Size = 1, Pop1 = 8.
+        cJ1_JPIMMED_1_09,       // Index Size = 1, Pop1 = 9.
+        cJ1_JPIMMED_1_10,       // Index Size = 1, Pop1 = 10.
+        cJ1_JPIMMED_1_11,       // Index Size = 1, Pop1 = 11.
+        cJ1_JPIMMED_1_12,       // Index Size = 1, Pop1 = 12.
+        cJ1_JPIMMED_1_13,       // Index Size = 1, Pop1 = 13.
+        cJ1_JPIMMED_1_14,       // Index Size = 1, Pop1 = 14.
+        cJ1_JPIMMED_1_15,       // Index Size = 1, Pop1 = 15.
+#endif
+
+        cJ1_JPIMMED_2_02,       // Index Size = 2, Pop1 = 2.
+        cJ1_JPIMMED_2_03,       // Index Size = 2, Pop1 = 3.
+
+#ifdef JU_64BIT
+        cJ1_JPIMMED_2_04,       // Index Size = 2, Pop1 = 4.
+        cJ1_JPIMMED_2_05,       // Index Size = 2, Pop1 = 5.
+        cJ1_JPIMMED_2_06,       // Index Size = 2, Pop1 = 6.
+        cJ1_JPIMMED_2_07,       // Index Size = 2, Pop1 = 7.
+#endif
+
+        cJ1_JPIMMED_3_02,       // Index Size = 3, Pop1 = 2.
+
+#ifdef JU_64BIT
+        cJ1_JPIMMED_3_03,       // Index Size = 3, Pop1 = 3.
+        cJ1_JPIMMED_3_04,       // Index Size = 3, Pop1 = 4.
+        cJ1_JPIMMED_3_05,       // Index Size = 3, Pop1 = 5.
+
+        cJ1_JPIMMED_4_02,       // Index Size = 4, Pop1 = 2.
+        cJ1_JPIMMED_4_03,       // Index Size = 4, Pop1 = 3.
+
+        cJ1_JPIMMED_5_02,       // Index Size = 5, Pop1 = 2.
+        cJ1_JPIMMED_5_03,       // Index Size = 3, Pop1 = 3.
+
+        cJ1_JPIMMED_6_02,       // Index Size = 6, Pop1 = 2.
+
+        cJ1_JPIMMED_7_02,       // Index Size = 7, Pop1 = 2.
+#endif
+
+// This special Type is merely a sentinel for doing relative calculations.
+// This value should not be used in switch statements (to avoid allocating code
+// for it), which is also why it appears at the end of the enum list.
+
+        cJ1_JPIMMED_CAP
+
+} jp1_Type_t;
+
+
+// RELATED VALUES:
+//
+// Index Size (state) for leaf JP, and JP type based on Index Size (state):
+
+#ifndef JU_64BIT // 32-bit
+#define J1_LEAFINDEXSIZE(jpType) ((jpType)    - cJ1_JPLEAF1 + 1)
+#define J1_LEAFTYPE(IndexSize)   ((IndexSize) + cJ1_JPLEAF1 - 1)
+#else
+#define J1_LEAFINDEXSIZE(jpType) ((jpType)    - cJ1_JPLEAF2 + 2)
+#define J1_LEAFTYPE(IndexSize)   ((IndexSize) + cJ1_JPLEAF2 - 2)
+#endif
+
+
+// ****************************************************************************
+// JUDY1 POINTER (JP) -- RELATED MACROS AND CONSTANTS
+// ****************************************************************************
+
+// MAXIMUM POPULATIONS OF LINEAR LEAVES:
+//
+// Allow up to 2 cache lines per leaf, with N bytes per index.
+//
+// J_1_MAXB is the maximum number of bytes (sort of) to allocate per leaf.
+// ALLOCSIZES is defined here, not there, for single-point control of these key
+// definitions.  See JudyTables.c for "TERMINATOR".
+
+#define J_1_MAXB   (sizeof(Word_t) * 32)
+#define ALLOCSIZES { 3, 5, 7, 11, 15, 23, 32, 47, 64, TERMINATOR } // in words.
+#define cJ1_LEAF1_MAXWORDS  5           // Leaf1 max alloc size in words.
+
+// Under JRP (root-state leaves):
+//
+// Includes a count (Population) word.
+//
+// Under JP (non-root-state leaves), which have no count (Population) words:
+//
+// When a 1-byte index leaf grows above cJ1_LEAF1_MAXPOP1 Indexes (bytes),
+// the memory chunk required grows to a size where a bitmap is just as
+// efficient, so use a bitmap instead for all greater Populations, on both
+// 32-bit and 64-bit systems.  However, on a 32-bit system this occurs upon
+// going from 6 to 8 words (24 to 32 bytes) in the memory chunk, but on a
+// 64-bit system this occurs upon going from 2 to 4 words (16 to 32 bytes).  It
+// would be silly to go from a 15-Index Immediate JP to a 16-Index linear leaf
+// to a 17-Index bitmap leaf, so just use a bitmap leaf for 16+ Indexes, which
+// means set cJ1_LEAF1_MAXPOP1 to cJ1_IMMED1_MAXPOP1 (15) to cause the
+// transition at that point.
+//
+// Note:  cJ1_LEAF1_MAXPOP1 is not used on 64-bit systems.
+
+#ifndef JU_64BIT // 32-bit
+
+#define cJ1_LEAF1_MAXPOP1    (cJ1_LEAF1_MAXWORDS * cJU_BYTESPERWORD)
+#define cJ1_LEAF2_MAXPOP1    (J_1_MAXB / 2)
+#define cJ1_LEAF3_MAXPOP1    (J_1_MAXB / 3)
+#define cJ1_LEAFW_MAXPOP1    ((J_1_MAXB - cJU_BYTESPERWORD) / cJU_BYTESPERWORD)
+
+#else // 64-bit
+
+// #define cJ1_LEAF1_MAXPOP1                    // no LEAF1 in 64-bit.
+#define cJ1_LEAF2_MAXPOP1    (J_1_MAXB / 2)
+#define cJ1_LEAF3_MAXPOP1    (J_1_MAXB / 3)
+#define cJ1_LEAF4_MAXPOP1    (J_1_MAXB / 4)
+#define cJ1_LEAF5_MAXPOP1    (J_1_MAXB / 5)
+#define cJ1_LEAF6_MAXPOP1    (J_1_MAXB / 6)
+#define cJ1_LEAF7_MAXPOP1    (J_1_MAXB / 7)
+#define cJ1_LEAFW_MAXPOP1    ((J_1_MAXB - cJU_BYTESPERWORD) / cJU_BYTESPERWORD)
+
+#endif
+
+
+// MAXIMUM POPULATIONS OF IMMEDIATE JPs:
+//
+// These specify the maximum Population of immediate JPs with various Index
+// Sizes (== sizes of remaining undecoded Index bits).
+
+#define cJ1_IMMED1_MAXPOP1  ((sizeof(jp_t) - 1) / 1)    // 7 [15].
+#define cJ1_IMMED2_MAXPOP1  ((sizeof(jp_t) - 1) / 2)    // 3  [7].
+#define cJ1_IMMED3_MAXPOP1  ((sizeof(jp_t) - 1) / 3)    // 2  [5].
+
+#ifdef JU_64BIT
+#define cJ1_IMMED4_MAXPOP1  ((sizeof(jp_t) - 1) / 4)    //    [3].
+#define cJ1_IMMED5_MAXPOP1  ((sizeof(jp_t) - 1) / 5)    //    [3].
+#define cJ1_IMMED6_MAXPOP1  ((sizeof(jp_t) - 1) / 6)    //    [2].
+#define cJ1_IMMED7_MAXPOP1  ((sizeof(jp_t) - 1) / 7)    //    [2].
+#endif
+
+
+// ****************************************************************************
+// JUDY1 BITMAP LEAF (J1LB) SUPPORT
+// ****************************************************************************
+
+#define J1_JLB_BITMAP(Pjlb,Subexp)  ((Pjlb)->j1lb_Bitmap[Subexp])
+
+typedef struct J__UDY1_BITMAP_LEAF
+{
+        BITMAPL_t j1lb_Bitmap[cJU_NUMSUBEXPL];
+
+} j1lb_t, * Pj1lb_t;
+
+
+// ****************************************************************************
+// MEMORY ALLOCATION SUPPORT
+// ****************************************************************************
+
+// ARRAY-GLOBAL INFORMATION:
+//
+// At the cost of an occasional additional cache fill, this object, which is
+// pointed at by a JRP and in turn points to a JP_BRANCH*, carries array-global
+// information about a Judy1 array that has sufficient population to amortize
+// the cost.  The jpm_Pop0 field prevents having to add up the total population
+// for the array in insert, delete, and count code.  The jpm_JP field prevents
+// having to build a fake JP for entry to a state machine; however, the
+// jp_DcdPopO field in jpm_JP, being one byte too small, is not used.
+//
+// Note:  Struct fields are ordered to keep "hot" data in the first 8 words
+// (see left-margin comments) for machines with 8-word cache lines, and to keep
+// sub-word fields together for efficient packing.
+
+typedef struct J_UDY1_POPULATION_AND_MEMORY
+{
+/* 1 */ Word_t     jpm_Pop0;            // total population-1 in array.
+/* 2 */ jp_t       jpm_JP;              // JP to first branch; see above.
+/* 4 */ Word_t     jpm_LastUPop0;       // last jpm_Pop0 when convert to BranchU
+// Note:  Field names match PJError_t for convenience in macros:
+/* 7 */ char       je_Errno;            // one of the enums in Judy.h.
+/* 7/8 */ int      je_ErrID;            // often an internal source line number.
+/* 8/9 */ Word_t   jpm_TotalMemWords;   // words allocated in array.
+} j1pm_t, *Pj1pm_t;
+
+
+// TABLES FOR DETERMINING IF LEAVES HAVE ROOM TO GROW:
+//
+// These tables indicate if a given memory chunk can support growth of a given
+// object into wasted (rounded-up) memory in the chunk.  This violates the
+// hiddenness of the JudyMalloc code.
+//
+// Also define macros to hide the details in the code using these tables.
+
+#ifndef JU_64BIT
+extern const uint8_t j__1_Leaf1PopToWords[cJ1_LEAF1_MAXPOP1 + 1];
+#endif
+extern const uint8_t j__1_Leaf2PopToWords[cJ1_LEAF2_MAXPOP1 + 1];
+extern const uint8_t j__1_Leaf3PopToWords[cJ1_LEAF3_MAXPOP1 + 1];
+#ifdef JU_64BIT
+extern const uint8_t j__1_Leaf4PopToWords[cJ1_LEAF4_MAXPOP1 + 1];
+extern const uint8_t j__1_Leaf5PopToWords[cJ1_LEAF5_MAXPOP1 + 1];
+extern const uint8_t j__1_Leaf6PopToWords[cJ1_LEAF6_MAXPOP1 + 1];
+extern const uint8_t j__1_Leaf7PopToWords[cJ1_LEAF7_MAXPOP1 + 1];
+#endif
+extern const uint8_t j__1_LeafWPopToWords[cJ1_LEAFW_MAXPOP1 + 1];
+
+// Check if increase of population will fit in same leaf:
+
+#ifndef JU_64BIT
+#define J1_LEAF1GROWINPLACE(Pop1) \
+        J__U_GROWCK(Pop1, cJ1_LEAF1_MAXPOP1, j__1_Leaf1PopToWords)
+#endif
+#define J1_LEAF2GROWINPLACE(Pop1) \
+        J__U_GROWCK(Pop1, cJ1_LEAF2_MAXPOP1, j__1_Leaf2PopToWords)
+#define J1_LEAF3GROWINPLACE(Pop1) \
+        J__U_GROWCK(Pop1, cJ1_LEAF3_MAXPOP1, j__1_Leaf3PopToWords)
+#ifdef JU_64BIT
+#define J1_LEAF4GROWINPLACE(Pop1) \
+        J__U_GROWCK(Pop1, cJ1_LEAF4_MAXPOP1, j__1_Leaf4PopToWords)
+#define J1_LEAF5GROWINPLACE(Pop1) \
+        J__U_GROWCK(Pop1, cJ1_LEAF5_MAXPOP1, j__1_Leaf5PopToWords)
+#define J1_LEAF6GROWINPLACE(Pop1) \
+        J__U_GROWCK(Pop1, cJ1_LEAF6_MAXPOP1, j__1_Leaf6PopToWords)
+#define J1_LEAF7GROWINPLACE(Pop1) \
+        J__U_GROWCK(Pop1, cJ1_LEAF7_MAXPOP1, j__1_Leaf7PopToWords)
+#endif
+#define J1_LEAFWGROWINPLACE(Pop1) \
+        J__U_GROWCK(Pop1, cJ1_LEAFW_MAXPOP1, j__1_LeafWPopToWords)
+
+#ifndef JU_64BIT
+#define J1_LEAF1POPTOWORDS(Pop1)  (j__1_Leaf1PopToWords[Pop1])
+#endif
+#define J1_LEAF2POPTOWORDS(Pop1)  (j__1_Leaf2PopToWords[Pop1])
+#define J1_LEAF3POPTOWORDS(Pop1)  (j__1_Leaf3PopToWords[Pop1])
+#ifdef JU_64BIT
+#define J1_LEAF4POPTOWORDS(Pop1)  (j__1_Leaf4PopToWords[Pop1])
+#define J1_LEAF5POPTOWORDS(Pop1)  (j__1_Leaf5PopToWords[Pop1])
+#define J1_LEAF6POPTOWORDS(Pop1)  (j__1_Leaf6PopToWords[Pop1])
+#define J1_LEAF7POPTOWORDS(Pop1)  (j__1_Leaf7PopToWords[Pop1])
+#endif
+#define J1_LEAFWPOPTOWORDS(Pop1)  (j__1_LeafWPopToWords[Pop1])
+
+
+// FUNCTIONS TO ALLOCATE OBJECTS:
+
+Pj1pm_t j__udy1AllocJ1PM(void);                         // constant size.
+
+Pjbl_t  j__udy1AllocJBL(          Pj1pm_t);             // constant size.
+Pjbb_t  j__udy1AllocJBB(          Pj1pm_t);             // constant size.
+Pjp_t   j__udy1AllocJBBJP(Word_t, Pj1pm_t);
+Pjbu_t  j__udy1AllocJBU(          Pj1pm_t);             // constant size.
+
+#ifndef JU_64BIT
+Pjll_t  j__udy1AllocJLL1( Word_t, Pj1pm_t);
+#endif
+Pjll_t  j__udy1AllocJLL2( Word_t, Pj1pm_t);
+Pjll_t  j__udy1AllocJLL3( Word_t, Pj1pm_t);
+
+#ifdef JU_64BIT
+Pjll_t  j__udy1AllocJLL4( Word_t, Pj1pm_t);
+Pjll_t  j__udy1AllocJLL5( Word_t, Pj1pm_t);
+Pjll_t  j__udy1AllocJLL6( Word_t, Pj1pm_t);
+Pjll_t  j__udy1AllocJLL7( Word_t, Pj1pm_t);
+#endif
+
+Pjlw_t  j__udy1AllocJLW(  Word_t         );             // no Pj1pm needed.
+Pj1lb_t j__udy1AllocJLB1(         Pj1pm_t);             // constant size.
+
+
+// FUNCTIONS TO FREE OBJECTS:
+
+void    j__udy1FreeJ1PM( Pj1pm_t,        Pj1pm_t);      // constant size.
+
+void    j__udy1FreeJBL(  Pjbl_t,         Pj1pm_t);      // constant size.
+void    j__udy1FreeJBB(  Pjbb_t,         Pj1pm_t);      // constant size.
+void    j__udy1FreeJBBJP(Pjp_t,  Word_t, Pj1pm_t);
+void    j__udy1FreeJBU(  Pjbu_t,         Pj1pm_t);      // constant size.
+
+#ifndef JU_64BIT
+void    j__udy1FreeJLL1( Pjll_t, Word_t, Pj1pm_t);
+#endif
+void    j__udy1FreeJLL2( Pjll_t, Word_t, Pj1pm_t);
+void    j__udy1FreeJLL3( Pjll_t, Word_t, Pj1pm_t);
+
+#ifdef JU_64BIT
+void    j__udy1FreeJLL4( Pjll_t, Word_t, Pj1pm_t);
+void    j__udy1FreeJLL5( Pjll_t, Word_t, Pj1pm_t);
+void    j__udy1FreeJLL6( Pjll_t, Word_t, Pj1pm_t);
+void    j__udy1FreeJLL7( Pjll_t, Word_t, Pj1pm_t);
+#endif
+
+void    j__udy1FreeJLW(  Pjlw_t, Word_t, Pj1pm_t);
+void    j__udy1FreeJLB1( Pj1lb_t,        Pj1pm_t);      // constant size.
+void    j__udy1FreeSM(   Pjp_t,          Pj1pm_t);      // everything below Pjp.
+
+#endif // ! _JUDY1_INCLUDED
diff --git a/libs/klib/judy/JudyByCount.c b/libs/klib/judy/JudyByCount.c
new file mode 100644
index 0000000..f6efea0
--- /dev/null
+++ b/libs/klib/judy/JudyByCount.c
@@ -0,0 +1,952 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// Judy*ByCount() function for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+//
+// Compile with -DNOSMARTJBB, -DNOSMARTJBU, and/or -DNOSMARTJLB to build a
+// version with cache line optimizations deleted, for testing.
+//
+// Judy*ByCount() is a conceptual although not literal inverse of Judy*Count().
+// Judy*Count() takes a pair of Indexes, and allows finding the ordinal of a
+// given Index (that is, its position in the list of valid indexes from the
+// beginning) as a degenerate case, because in general the count between two
+// Indexes, inclusive, is not always just the difference in their ordinals.
+// However, it suffices for Judy*ByCount() to simply be an ordinal-to-Index
+// mapper.
+//
+// Note:  Like Judy*Count(), this code must "count sideways" in branches, which
+// can result in a lot of cache line fills.  However, unlike Judy*Count(), this
+// code does not receive a specific Index, hence digit, where to start in each
+// branch, so it cant accurately calculate cache line fills required in each
+// direction.  The best it can do is an approximation based on the total
+// population of the expanse (pop1 from Pjp) and the ordinal of the target
+// Index (see SETOFFSET()) within the expanse.
+//
+// Compile with -DSMARTMETRICS to obtain global variables containing smart
+// cache line metrics.  Note:  Dont turn this on simultaneously for this file
+// and JudyCount.c because they export the same globals.
+// ****************************************************************************
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error:  One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+// These are imported from JudyCount.c:
+//
+// TBD:  Should this be in common code?  Exported from a header file?
+
+#ifdef JUDY1
+extern	Word_t j__udy1JPPop1(const Pjp_t Pjp);
+#define	j__udyJPPop1 j__udy1JPPop1
+#else
+extern	Word_t j__udyLJPPop1(const Pjp_t Pjp);
+#define	j__udyJPPop1 j__udyLJPPop1
+#endif
+
+// Avoid duplicate symbols since this file is multi-compiled:
+
+#ifdef SMARTMETRICS
+#ifdef JUDY1
+Word_t	jbb_upward   = 0;	// counts of directions taken:
+Word_t	jbb_downward = 0;
+Word_t	jbu_upward   = 0;
+Word_t	jbu_downward = 0;
+Word_t	jlb_upward   = 0;
+Word_t	jlb_downward = 0;
+#else
+extern Word_t jbb_upward;
+extern Word_t jbb_downward;
+extern Word_t jbu_upward;
+extern Word_t jbu_downward;
+extern Word_t jlb_upward;
+extern Word_t jlb_downward;
+#endif
+#endif
+
+
+// ****************************************************************************
+// J U D Y   1   B Y   C O U N T
+// J U D Y   L   B Y   C O U N T
+//
+// See the manual entry.
+
+#ifdef JUDY1
+FUNCTION int Judy1ByCount
+#else
+FUNCTION PPvoid_t JudyLByCount
+#endif
+        (
+	Pcvoid_t  PArray,	// root pointer to first branch/leaf in SM.
+	Word_t	  Count,	// ordinal of Index to find, 1..MAX.
+	Word_t *  PIndex,	// to return found Index.
+	PJError_t PJError	// optional, for returning error info.
+        )
+{
+	Word_t	  Count0;	// Count, base-0, to match pop0.
+	Word_t	  state;	// current state in SM.
+	Word_t	  pop1;		// of current branch or leaf, or of expanse.
+	Word_t	  pop1lower;	// pop1 of expanses (JPs) below that for Count.
+	Word_t	  digit;	// current word in branch.
+	Word_t	  jpcount;	// JPs in a BranchB subexpanse.
+	long	  jpnum;	// JP number in a branch (base 0).
+	long	  subexp;	// for stepping through layer 1 (subexpanses).
+	int	  offset;	// index ordinal within a leaf, base 0.
+
+	Pjp_t	  Pjp;		// current JP in branch.
+	Pjll_t	  Pjll;		// current Judy linear leaf.
+
+
+// CHECK FOR EMPTY ARRAY OR NULL PINDEX:
+
+	if (PArray == (Pvoid_t) NULL) JU_RET_NOTFOUND;
+
+	if (PIndex == (PWord_t) NULL)
+	{
+	    JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+	    JUDY1CODE(return(JERRI );)
+	    JUDYLCODE(return(PPJERR);)
+	}
+
+// Convert Count to Count0; assume special case of Count = 0 maps to ~0, as
+// desired, to represent the last index in a full array:
+//
+// Note:  Think of Count0 as a reliable "number of Indexes below the target."
+
+	Count0 = Count - 1;
+	assert((Count || Count0 == ~0));  // ensure CPU is sane about 0 - 1.
+	pop1lower = 0;
+
+	if (JU_LEAFW_POP0(PArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+	{
+	    Pjlw_t Pjlw = P_JLW(PArray);		// first word of leaf.
+
+	    if (Count0 > Pjlw[0]) JU_RET_NOTFOUND;	// too high.
+
+	    *PIndex = Pjlw[Count];			// Index, base 1.
+
+	    JU_RET_FOUND_LEAFW(Pjlw, Pjlw[0] + 1, Count0);
+	}
+	else
+	{
+	    Pjpm_t Pjpm = P_JPM(PArray);
+
+	    if (Count0 > (Pjpm->jpm_Pop0)) JU_RET_NOTFOUND;	// too high.
+
+	    Pjp  = &(Pjpm->jpm_JP);
+	    pop1 =  (Pjpm->jpm_Pop0) + 1;
+
+//	    goto SMByCount;
+	}
+
+// COMMON CODE:
+//
+// Prepare to handle a root-level or lower-level branch:  Save the current
+// state, obtain the total population for the branch in a state-dependent way,
+// and then branch to common code for multiple cases.
+//
+// For root-level branches, the state is always cJU_ROOTSTATE, and the array
+// population must already be set in pop1; it is not available in jp_DcdPopO.
+//
+// Note:  The total population is only needed in cases where the common code
+// "counts down" instead of up to minimize cache line fills.  However, its
+// available cheaply, and its better to do it with a constant shift (constant
+// state value) instead of a variable shift later "when needed".
+
+#define	PREPB_ROOT(Next)	\
+	state = cJU_ROOTSTATE;	\
+	goto Next
+
+// Use PREPB_DCD() to first copy the Dcd bytes to *PIndex if there are any
+// (only if state < cJU_ROOTSTATE - 1):
+
+#define	PREPB_DCD(Pjp,cState,Next)			\
+	JU_SETDCD(*PIndex, Pjp, cState);	        \
+	PREPB((Pjp), cState, Next)
+
+#define	PREPB(Pjp,cState,Next)	\
+	state = (cState);	\
+	pop1  = JU_JPBRANCH_POP0(Pjp, (cState)) + 1; \
+	goto Next
+
+// Calculate whether the ordinal of an Index within a given expanse falls in
+// the lower or upper half of the expanses population, taking care with
+// unsigned math and boundary conditions:
+//
+// Note:  Assume the ordinal falls within the expanses population, that is,
+// 0 < (Count - Pop1lower) <= Pop1exp (assuming infinite math).
+//
+// Note:  If the ordinal is the middle element, it doesnt matter whether
+// LOWERHALF() is TRUE or FALSE.
+
+#define	LOWERHALF(Count0,Pop1lower,Pop1exp) \
+	(((Count0) - (Pop1lower)) < ((Pop1exp) / 2))
+
+// Calculate the (signed) offset within a leaf to the desired ordinal (Count -
+// Pop1lower; offset is one less), and optionally ensure its in range:
+
+#define	SETOFFSET(Offset,Count0,Pop1lower,Pjp)	\
+	(Offset) = (Count0) - (Pop1lower);	\
+	assert((Offset) >= 0);			\
+	assert((Offset) <= JU_JPLEAF_POP0(Pjp))
+
+// Variations for immediate indexes, with and without pop1-specific assertions:
+
+#define	SETOFFSET_IMM_CK(Offset,Count0,Pop1lower,cPop1)	\
+	(Offset) = (Count0) - (Pop1lower);		\
+	assert((Offset) >= 0);				\
+	assert((Offset) <  (cPop1))
+
+#define	SETOFFSET_IMM(Offset,Count0,Pop1lower) \
+	(Offset) = (Count0) - (Pop1lower)
+
+
+// STATE MACHINE -- TRAVERSE TREE:
+//
+// In branches, look for the expanse (digit), if any, where the total pop1
+// below or at that expanse would meet or exceed Count, meaning the Index must
+// be in this expanse.
+
+SMByCount:			// return here for next branch/leaf.
+
+	switch (JU_JPTYPE(Pjp))
+	{
+
+
+// ----------------------------------------------------------------------------
+// LINEAR BRANCH; count populations in JPs in the JBL upwards until finding the
+// expanse (digit) containing Count, and "recurse".
+//
+// Note:  There are no null JPs in a JBL; watch out for pop1 == 0.
+//
+// Note:  A JBL should always fit in one cache line => no need to count up
+// versus down to save cache line fills.
+//
+// TBD:  The previous is no longer true.  Consider enhancing this code to count
+// up/down, but it can wait for a later tuning phase.  In the meantime, PREPB()
+// sets pop1 for the whole array, but that value is not used here.  001215:
+// Maybe its true again?
+
+	case cJU_JPBRANCH_L2:  PREPB_DCD(Pjp, 2, BranchL);
+#ifndef JU_64BIT
+	case cJU_JPBRANCH_L3:  PREPB(	 Pjp, 3, BranchL);
+#else
+	case cJU_JPBRANCH_L3:  PREPB_DCD(Pjp, 3, BranchL);
+	case cJU_JPBRANCH_L4:  PREPB_DCD(Pjp, 4, BranchL);
+	case cJU_JPBRANCH_L5:  PREPB_DCD(Pjp, 5, BranchL);
+	case cJU_JPBRANCH_L6:  PREPB_DCD(Pjp, 6, BranchL);
+	case cJU_JPBRANCH_L7:  PREPB(	 Pjp, 7, BranchL);
+#endif
+	case cJU_JPBRANCH_L:   PREPB_ROOT(	 BranchL);
+	{
+	    Pjbl_t Pjbl;
+
+// Common code (state-independent) for all cases of linear branches:
+
+BranchL:
+	    Pjbl = P_JBL(Pjp->jp_Addr);
+
+	    for (jpnum = 0; jpnum < (Pjbl->jbl_NumJPs); ++jpnum)
+	    {
+	        if ((pop1 = j__udyJPPop1((Pjbl->jbl_jp) + jpnum))
+		 == cJU_ALLONES)
+	        {
+		    JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+		    JUDY1CODE(return(JERRI );)
+		    JUDYLCODE(return(PPJERR);)
+	        }
+	        assert(pop1 != 0);
+
+// Warning:  pop1lower and pop1 are unsigned, so do not subtract 1 and compare
+// >=, but instead use the following expression:
+
+	        if (pop1lower + pop1 > Count0)	 // Index is in this expanse.
+	        {
+		    JU_SETDIGIT(*PIndex, Pjbl->jbl_Expanse[jpnum], state);
+		    Pjp = (Pjbl->jbl_jp) + jpnum;
+		    goto SMByCount;			// look under this expanse.
+	        }
+
+	        pop1lower += pop1;			// add this JPs pop1.
+	    }
+
+	    JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);  // should never get here.
+	    JUDY1CODE(return(JERRI );)
+	    JUDYLCODE(return(PPJERR);)
+
+	} // case cJU_JPBRANCH_L
+
+
+// ----------------------------------------------------------------------------
+// BITMAP BRANCH; count populations in JPs in the JBB upwards or downwards
+// until finding the expanse (digit) containing Count, and "recurse".
+//
+// Note:  There are no null JPs in a JBB; watch out for pop1 == 0.
+
+	case cJU_JPBRANCH_B2:  PREPB_DCD(Pjp, 2, BranchB);
+#ifndef JU_64BIT
+	case cJU_JPBRANCH_B3:  PREPB(	 Pjp, 3, BranchB);
+#else
+	case cJU_JPBRANCH_B3:  PREPB_DCD(Pjp, 3, BranchB);
+	case cJU_JPBRANCH_B4:  PREPB_DCD(Pjp, 4, BranchB);
+	case cJU_JPBRANCH_B5:  PREPB_DCD(Pjp, 5, BranchB);
+	case cJU_JPBRANCH_B6:  PREPB_DCD(Pjp, 6, BranchB);
+	case cJU_JPBRANCH_B7:  PREPB(	 Pjp, 7, BranchB);
+#endif
+	case cJU_JPBRANCH_B:   PREPB_ROOT(	 BranchB);
+	{
+	    Pjbb_t Pjbb;
+
+// Common code (state-independent) for all cases of bitmap branches:
+
+BranchB:
+	    Pjbb = P_JBB(Pjp->jp_Addr);
+
+// Shorthand for one subexpanse in a bitmap and for one JP in a bitmap branch:
+//
+// Note: BMPJP0 exists separately to support assertions.
+
+#define	BMPJP0(Subexp)	     (P_JP(JU_JBB_PJP(Pjbb, Subexp)))
+#define	BMPJP(Subexp,JPnum)  (BMPJP0(Subexp) + (JPnum))
+
+
+// Common code for descending through a JP:
+//
+// Determine the digit for the expanse and save it in *PIndex; then "recurse".
+
+#define	JBB_FOUNDEXPANSE			\
+	{					\
+	    JU_BITMAPDIGITB(digit, subexp, JU_JBB_BITMAP(Pjbb,subexp), jpnum); \
+	    JU_SETDIGIT(*PIndex, digit, state);	\
+	    Pjp = BMPJP(subexp, jpnum);		\
+	    goto SMByCount;			\
+	}
+
+
+#ifndef NOSMARTJBB  // enable to turn off smart code for comparison purposes.
+
+// FIGURE OUT WHICH DIRECTION CAUSES FEWER CACHE LINE FILLS; adding the pop1s
+// in JPs upwards, or subtracting the pop1s in JPs downwards:
+//
+// See header comments about limitations of this for Judy*ByCount().
+
+#endif
+
+// COUNT UPWARD, adding each "below" JPs pop1:
+
+#ifndef NOSMARTJBB  // enable to turn off smart code for comparison purposes.
+
+	    if (LOWERHALF(Count0, pop1lower, pop1))
+	    {
+#endif
+#ifdef SMARTMETRICS
+		++jbb_upward;
+#endif
+		for (subexp = 0; subexp < cJU_NUMSUBEXPB; ++subexp)
+		{
+		    if ((jpcount = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb,subexp)))
+		     && (BMPJP0(subexp) == (Pjp_t) NULL))
+		    {
+			JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);  // null ptr.
+			JUDY1CODE(return(JERRI );)
+			JUDYLCODE(return(PPJERR);)
+		    }
+
+// Note:  An empty subexpanse (jpcount == 0) is handled "for free":
+
+		    for (jpnum = 0; jpnum < jpcount; ++jpnum)
+		    {
+			if ((pop1 = j__udyJPPop1(BMPJP(subexp, jpnum)))
+			  == cJU_ALLONES)
+			{
+			    JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+			    JUDY1CODE(return(JERRI );)
+			    JUDYLCODE(return(PPJERR);)
+			}
+			assert(pop1 != 0);
+
+// Warning:  pop1lower and pop1 are unsigned, see earlier comment:
+
+			if (pop1lower + pop1 > Count0)
+			    JBB_FOUNDEXPANSE;	// Index is in this expanse.
+
+			pop1lower += pop1;	// add this JPs pop1.
+		    }
+		}
+#ifndef NOSMARTJBB  // enable to turn off smart code for comparison purposes.
+	    }
+
+
+// COUNT DOWNWARD, subtracting each "above" JPs pop1 from the whole expanses
+// pop1:
+
+	    else
+	    {
+#ifdef SMARTMETRICS
+		++jbb_downward;
+#endif
+		pop1lower += pop1;		// add whole branch to start.
+
+		for (subexp = cJU_NUMSUBEXPB - 1; subexp >= 0; --subexp)
+		{
+		    if ((jpcount = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, subexp)))
+		     && (BMPJP0(subexp) == (Pjp_t) NULL))
+		    {
+			JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);  // null ptr.
+			JUDY1CODE(return(JERRI );)
+			JUDYLCODE(return(PPJERR);)
+		    }
+
+// Note:  An empty subexpanse (jpcount == 0) is handled "for free":
+
+		    for (jpnum = jpcount - 1; jpnum >= 0; --jpnum)
+		    {
+			if ((pop1 = j__udyJPPop1(BMPJP(subexp, jpnum)))
+			  == cJU_ALLONES)
+			{
+			    JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+			    JUDY1CODE(return(JERRI );)
+			    JUDYLCODE(return(PPJERR);)
+			}
+			assert(pop1 != 0);
+
+// Warning:  pop1lower and pop1 are unsigned, see earlier comment:
+
+			pop1lower -= pop1;
+
+// Beware unsigned math problems:
+
+			if ((pop1lower == 0) || (pop1lower - 1 < Count0))
+			    JBB_FOUNDEXPANSE;	// Index is in this expanse.
+		    }
+		}
+	    }
+#endif // NOSMARTJBB
+
+	    JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);  // should never get here.
+	    JUDY1CODE(return(JERRI );)
+	    JUDYLCODE(return(PPJERR);)
+
+	} // case cJU_JPBRANCH_B
+
+
+// ----------------------------------------------------------------------------
+// UNCOMPRESSED BRANCH; count populations in JPs in the JBU upwards or
+// downwards until finding the expanse (digit) containing Count, and "recurse".
+
+	case cJU_JPBRANCH_U2:  PREPB_DCD(Pjp, 2, BranchU);
+#ifndef JU_64BIT
+	case cJU_JPBRANCH_U3:  PREPB(	 Pjp, 3, BranchU);
+#else
+	case cJU_JPBRANCH_U3:  PREPB_DCD(Pjp, 3, BranchU);
+	case cJU_JPBRANCH_U4:  PREPB_DCD(Pjp, 4, BranchU);
+	case cJU_JPBRANCH_U5:  PREPB_DCD(Pjp, 5, BranchU);
+	case cJU_JPBRANCH_U6:  PREPB_DCD(Pjp, 6, BranchU);
+	case cJU_JPBRANCH_U7:  PREPB(	 Pjp, 7, BranchU);
+#endif
+	case cJU_JPBRANCH_U:   PREPB_ROOT(	 BranchU);
+	{
+	    Pjbu_t Pjbu;
+
+// Common code (state-independent) for all cases of uncompressed branches:
+
+BranchU:
+	    Pjbu = P_JBU(Pjp->jp_Addr);
+
+// Common code for descending through a JP:
+//
+// Save the digit for the expanse in *PIndex, then "recurse".
+
+#define	JBU_FOUNDEXPANSE			\
+	{					\
+	    JU_SETDIGIT(*PIndex, jpnum, state);	\
+	    Pjp = (Pjbu->jbu_jp) + jpnum;	\
+	    goto SMByCount;			\
+	}
+
+
+#ifndef NOSMARTJBU  // enable to turn off smart code for comparison purposes.
+
+// FIGURE OUT WHICH DIRECTION CAUSES FEWER CACHE LINE FILLS; adding the pop1s
+// in JPs upwards, or subtracting the pop1s in JPs downwards:
+//
+// See header comments about limitations of this for Judy*ByCount().
+
+#endif
+
+// COUNT UPWARD, simply adding the pop1 of each JP:
+
+#ifndef NOSMARTJBU  // enable to turn off smart code for comparison purposes.
+
+	    if (LOWERHALF(Count0, pop1lower, pop1))
+	    {
+#endif
+#ifdef SMARTMETRICS
+		++jbu_upward;
+#endif
+
+		for (jpnum = 0; jpnum < cJU_BRANCHUNUMJPS; ++jpnum)
+		{
+		    // shortcut, save a function call:
+
+		    if ((Pjbu->jbu_jp[jpnum].jp_Type) <= cJU_JPNULLMAX)
+			continue;
+
+		    if ((pop1 = j__udyJPPop1((Pjbu->jbu_jp) + jpnum))
+		     == cJU_ALLONES)
+		    {
+			JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+			JUDY1CODE(return(JERRI );)
+			JUDYLCODE(return(PPJERR);)
+		    }
+		    assert(pop1 != 0);
+
+// Warning:  pop1lower and pop1 are unsigned, see earlier comment:
+
+		    if (pop1lower + pop1 > Count0)
+			JBU_FOUNDEXPANSE;	// Index is in this expanse.
+
+		    pop1lower += pop1;		// add this JPs pop1.
+		}
+#ifndef NOSMARTJBU  // enable to turn off smart code for comparison purposes.
+	    }
+
+
+// COUNT DOWNWARD, subtracting the pop1 of each JP above from the whole
+// expanses pop1:
+
+	    else
+	    {
+#ifdef SMARTMETRICS
+		++jbu_downward;
+#endif
+		pop1lower += pop1;		// add whole branch to start.
+
+		for (jpnum = cJU_BRANCHUNUMJPS - 1; jpnum >= 0; --jpnum)
+		{
+		    // shortcut, save a function call:
+
+		    if ((Pjbu->jbu_jp[jpnum].jp_Type) <= cJU_JPNULLMAX)
+			continue;
+
+		    if ((pop1 = j__udyJPPop1(Pjbu->jbu_jp + jpnum))
+		     == cJU_ALLONES)
+		    {
+			JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+			JUDY1CODE(return(JERRI );)
+			JUDYLCODE(return(PPJERR);)
+		    }
+		    assert(pop1 != 0);
+
+// Warning:  pop1lower and pop1 are unsigned, see earlier comment:
+
+		    pop1lower -= pop1;
+
+// Beware unsigned math problems:
+
+		    if ((pop1lower == 0) || (pop1lower - 1 < Count0))
+			JBU_FOUNDEXPANSE;	// Index is in this expanse.
+		}
+	    }
+#endif // NOSMARTJBU
+
+	    JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);  // should never get here.
+	    JUDY1CODE(return(JERRI );)
+	    JUDYLCODE(return(PPJERR);)
+
+	} // case cJU_JPBRANCH_U
+
+// ----------------------------------------------------------------------------
+// LINEAR LEAF:
+//
+// Return the Index at the proper ordinal (see SETOFFSET()) in the leaf.  First
+// copy Dcd bytes, if there are any (only if state < cJU_ROOTSTATE - 1), to
+// *PIndex.
+//
+// Note:  The preceding branch traversal code MIGHT set pop1 for this expanse
+// (linear leaf) as a side-effect, but dont depend on that (for JUDYL, which
+// is the only cases that need it anyway).
+
+#define	PREPL_DCD(cState)				\
+	JU_SETDCD(*PIndex, Pjp, cState);	        \
+	PREPL
+
+#ifdef JUDY1
+#define	PREPL_SETPOP1			// not needed in any cases.
+#else
+#define	PREPL_SETPOP1  pop1 = JU_JPLEAF_POP0(Pjp) + 1
+#endif
+
+#define	PREPL				\
+	Pjll = P_JLL(Pjp->jp_Addr);	\
+	PREPL_SETPOP1;			\
+	SETOFFSET(offset, Count0, pop1lower, Pjp)
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+	case cJU_JPLEAF1:
+
+	    PREPL_DCD(1);
+	    JU_SETDIGIT1(*PIndex, ((uint8_t *) Pjll)[offset]);
+	    JU_RET_FOUND_LEAF1(Pjll, pop1, offset);
+#endif
+
+	case cJU_JPLEAF2:
+
+	    PREPL_DCD(2);
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(2)))
+		    | ((uint16_t *) Pjll)[offset];
+	    JU_RET_FOUND_LEAF2(Pjll, pop1, offset);
+
+#ifndef JU_64BIT
+	case cJU_JPLEAF3:
+	{
+	    Word_t lsb;
+	    PREPL;
+	    JU_COPY3_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (3 * offset));
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(3))) | lsb;
+	    JU_RET_FOUND_LEAF3(Pjll, pop1, offset);
+	}
+
+#else
+	case cJU_JPLEAF3:
+	{
+	    Word_t lsb;
+	    PREPL_DCD(3);
+	    JU_COPY3_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (3 * offset));
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(3))) | lsb;
+	    JU_RET_FOUND_LEAF3(Pjll, pop1, offset);
+	}
+
+	case cJU_JPLEAF4:
+
+	    PREPL_DCD(4);
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(4)))
+		    | ((uint32_t *) Pjll)[offset];
+	    JU_RET_FOUND_LEAF4(Pjll, pop1, offset);
+
+	case cJU_JPLEAF5:
+	{
+	    Word_t lsb;
+	    PREPL_DCD(5);
+	    JU_COPY5_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (5 * offset));
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(5))) | lsb;
+	    JU_RET_FOUND_LEAF5(Pjll, pop1, offset);
+	}
+
+	case cJU_JPLEAF6:
+	{
+	    Word_t lsb;
+	    PREPL_DCD(6);
+	    JU_COPY6_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (6 * offset));
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(6))) | lsb;
+	    JU_RET_FOUND_LEAF6(Pjll, pop1, offset);
+	}
+
+	case cJU_JPLEAF7:
+	{
+	    Word_t lsb;
+	    PREPL;
+	    JU_COPY7_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (7 * offset));
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(7))) | lsb;
+	    JU_RET_FOUND_LEAF7(Pjll, pop1, offset);
+	}
+#endif
+
+
+// ----------------------------------------------------------------------------
+// BITMAP LEAF:
+//
+// Return the Index at the proper ordinal (see SETOFFSET()) in the leaf by
+// counting bits.  First copy Dcd bytes (always present since state 1 <
+// cJU_ROOTSTATE) to *PIndex.
+//
+// Note:  The preceding branch traversal code MIGHT set pop1 for this expanse
+// (bitmap leaf) as a side-effect, but dont depend on that.
+
+	case cJU_JPLEAF_B1:
+	{
+	    Pjlb_t Pjlb;
+
+	    JU_SETDCD(*PIndex, Pjp, 1);
+	    Pjlb = P_JLB(Pjp->jp_Addr);
+	    pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+
+// COUNT UPWARD, adding the pop1 of each subexpanse:
+//
+// The entire bitmap should fit in one cache line, but still try to save some
+// CPU time by counting the fewest possible number of subexpanses from the
+// bitmap.
+//
+// See header comments about limitations of this for Judy*ByCount().
+
+#ifndef NOSMARTJLB  // enable to turn off smart code for comparison purposes.
+
+	    if (LOWERHALF(Count0, pop1lower, pop1))
+	    {
+#endif
+#ifdef SMARTMETRICS
+		++jlb_upward;
+#endif
+		for (subexp = 0; subexp < cJU_NUMSUBEXPL; ++subexp)
+		{
+		    pop1 = j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, subexp));
+
+// Warning:  pop1lower and pop1 are unsigned, see earlier comment:
+
+		    if (pop1lower + pop1 > Count0)
+			goto LeafB1;		// Index is in this subexpanse.
+
+		    pop1lower += pop1;		// add this subexpanses pop1.
+		}
+#ifndef NOSMARTJLB  // enable to turn off smart code for comparison purposes.
+	    }
+
+
+// COUNT DOWNWARD, subtracting each "above" subexpanses pop1 from the whole
+// expanses pop1:
+
+	    else
+	    {
+#ifdef SMARTMETRICS
+		++jlb_downward;
+#endif
+		pop1lower += pop1;		// add whole leaf to start.
+
+		for (subexp = cJU_NUMSUBEXPL - 1; subexp >= 0; --subexp)
+		{
+		    pop1lower -= j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, subexp));
+
+// Beware unsigned math problems:
+
+		    if ((pop1lower == 0) || (pop1lower - 1 < Count0))
+			goto LeafB1;		// Index is in this subexpanse.
+		}
+	    }
+#endif // NOSMARTJLB
+
+	    JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);  // should never get here.
+	    JUDY1CODE(return(JERRI );)
+	    JUDYLCODE(return(PPJERR);)
+
+
+// RETURN INDEX FOUND:
+//
+// Come here with subexp set to the correct subexpanse, and pop1lower set to
+// the sum for all lower expanses and subexpanses in the Judy tree.  Calculate
+// and save in *PIndex the digit corresponding to the ordinal in this
+// subexpanse.
+
+LeafB1:
+	    SETOFFSET(offset, Count0, pop1lower, Pjp);
+	    JU_BITMAPDIGITL(digit, subexp, JU_JLB_BITMAP(Pjlb, subexp), offset);
+	    JU_SETDIGIT1(*PIndex, digit);
+	    JU_RET_FOUND_LEAF_B1(Pjlb, subexp, offset);
+//	    == return((PPvoid_t) (P_JV(JL_JLB_PVALUE(Pjlb, subexp)) + offset))
+
+	} // case cJU_JPLEAF_B1
+
+
+#ifdef JUDY1
+// ----------------------------------------------------------------------------
+// FULL POPULATION:
+//
+// Copy Dcd bytes (always present since state 1 < cJU_ROOTSTATE) to *PIndex,
+// then set the appropriate digit for the ordinal (see SETOFFSET()) in the leaf
+// as the LSB in *PIndex.
+
+	case cJ1_JPFULLPOPU1:
+
+	    JU_SETDCD(*PIndex, Pjp, 1);
+	    SETOFFSET(offset, Count0, pop1lower, Pjp);
+	    assert(offset >= 0);
+	    assert(offset <= cJU_JPFULLPOPU1_POP0);
+	    JU_SETDIGIT1(*PIndex, offset);
+	    JU_RET_FOUND_FULLPOPU1;
+#endif
+
+
+// ----------------------------------------------------------------------------
+// IMMEDIATE:
+//
+// Locate the Index with the proper ordinal (see SETOFFSET()) in the Immediate,
+// depending on leaf Index Size and pop1.  Note:  There are no Dcd bytes in an
+// Immediate JP, but in a cJU_JPIMMED_*_01 JP, the field holds the least bytes
+// of the immediate Index.
+
+#define	SET_01(cState)  JU_SETDIGITS(*PIndex, JU_JPDCDPOP0(Pjp), cState)
+
+	case cJU_JPIMMED_1_01: SET_01(1); goto Imm_01;
+	case cJU_JPIMMED_2_01: SET_01(2); goto Imm_01;
+	case cJU_JPIMMED_3_01: SET_01(3); goto Imm_01;
+#ifdef JU_64BIT
+	case cJU_JPIMMED_4_01: SET_01(4); goto Imm_01;
+	case cJU_JPIMMED_5_01: SET_01(5); goto Imm_01;
+	case cJU_JPIMMED_6_01: SET_01(6); goto Imm_01;
+	case cJU_JPIMMED_7_01: SET_01(7); goto Imm_01;
+#endif
+
+Imm_01:
+
+	    DBGCODE(SETOFFSET_IMM_CK(offset, Count0, pop1lower, 1);)
+	    JU_RET_FOUND_IMM_01(Pjp);
+
+// Shorthand for where to find start of Index bytes array:
+
+#ifdef JUDY1
+#define	PJI (Pjp->jp_1Index)
+#else
+#define	PJI (Pjp->jp_LIndex)
+#endif
+
+// Optional code to check the remaining ordinal (see SETOFFSET_IMM()) against
+// the Index Size of the Immediate:
+
+#ifndef DEBUG				// simple placeholder:
+#define	IMM(cPop1,Next) \
+	goto Next
+#else					// extra pop1-specific checking:
+#define	IMM(cPop1,Next)						\
+	SETOFFSET_IMM_CK(offset, Count0, pop1lower, cPop1);	\
+	goto Next
+#endif
+
+	case cJU_JPIMMED_1_02: IMM( 2, Imm1);
+	case cJU_JPIMMED_1_03: IMM( 3, Imm1);
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_1_04: IMM( 4, Imm1);
+	case cJU_JPIMMED_1_05: IMM( 5, Imm1);
+	case cJU_JPIMMED_1_06: IMM( 6, Imm1);
+	case cJU_JPIMMED_1_07: IMM( 7, Imm1);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_1_08: IMM( 8, Imm1);
+	case cJ1_JPIMMED_1_09: IMM( 9, Imm1);
+	case cJ1_JPIMMED_1_10: IMM(10, Imm1);
+	case cJ1_JPIMMED_1_11: IMM(11, Imm1);
+	case cJ1_JPIMMED_1_12: IMM(12, Imm1);
+	case cJ1_JPIMMED_1_13: IMM(13, Imm1);
+	case cJ1_JPIMMED_1_14: IMM(14, Imm1);
+	case cJ1_JPIMMED_1_15: IMM(15, Imm1);
+#endif
+
+Imm1:	    SETOFFSET_IMM(offset, Count0, pop1lower);
+	    JU_SETDIGIT1(*PIndex, ((uint8_t *) PJI)[offset]);
+	    JU_RET_FOUND_IMM(Pjp, offset);
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_2_02: IMM(2, Imm2);
+	case cJU_JPIMMED_2_03: IMM(3, Imm2);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_2_04: IMM(4, Imm2);
+	case cJ1_JPIMMED_2_05: IMM(5, Imm2);
+	case cJ1_JPIMMED_2_06: IMM(6, Imm2);
+	case cJ1_JPIMMED_2_07: IMM(7, Imm2);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+Imm2:	    SETOFFSET_IMM(offset, Count0, pop1lower);
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(2)))
+		    | ((uint16_t *) PJI)[offset];
+	    JU_RET_FOUND_IMM(Pjp, offset);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_3_02: IMM(2, Imm3);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_3_03: IMM(3, Imm3);
+	case cJ1_JPIMMED_3_04: IMM(4, Imm3);
+	case cJ1_JPIMMED_3_05: IMM(5, Imm3);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+Imm3:
+	{
+	    Word_t lsb;
+	    SETOFFSET_IMM(offset, Count0, pop1lower);
+	    JU_COPY3_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (3 * offset));
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(3))) | lsb;
+	    JU_RET_FOUND_IMM(Pjp, offset);
+	}
+#endif
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_4_02: IMM(2, Imm4);
+	case cJ1_JPIMMED_4_03: IMM(3, Imm4);
+
+Imm4:	    SETOFFSET_IMM(offset, Count0, pop1lower);
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(4)))
+		    | ((uint32_t *) PJI)[offset];
+	    JU_RET_FOUND_IMM(Pjp, offset);
+
+	case cJ1_JPIMMED_5_02: IMM(2, Imm5);
+	case cJ1_JPIMMED_5_03: IMM(3, Imm5);
+
+Imm5:
+	{
+	    Word_t lsb;
+	    SETOFFSET_IMM(offset, Count0, pop1lower);
+	    JU_COPY5_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (5 * offset));
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(5))) | lsb;
+	    JU_RET_FOUND_IMM(Pjp, offset);
+	}
+
+	case cJ1_JPIMMED_6_02: IMM(2, Imm6);
+
+Imm6:
+	{
+	    Word_t lsb;
+	    SETOFFSET_IMM(offset, Count0, pop1lower);
+	    JU_COPY6_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (6 * offset));
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(6))) | lsb;
+	    JU_RET_FOUND_IMM(Pjp, offset);
+	}
+
+	case cJ1_JPIMMED_7_02: IMM(2, Imm7);
+
+Imm7:
+	{
+	    Word_t lsb;
+	    SETOFFSET_IMM(offset, Count0, pop1lower);
+	    JU_COPY7_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (7 * offset));
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(7))) | lsb;
+	    JU_RET_FOUND_IMM(Pjp, offset);
+	}
+#endif // (JUDY1 && JU_64BIT)
+
+
+// ----------------------------------------------------------------------------
+// UNEXPECTED JP TYPES:
+
+	default: JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+		 JUDY1CODE(return(JERRI );)
+		 JUDYLCODE(return(PPJERR);)
+
+	} // SMByCount switch.
+
+	/*NOTREACHED*/
+
+} // Judy1ByCount() / JudyLByCount()
diff --git a/libs/klib/judy/JudyByCountWithDefs.c b/libs/klib/judy/JudyByCountWithDefs.c
new file mode 100644
index 0000000..b4ad243
--- /dev/null
+++ b/libs/klib/judy/JudyByCountWithDefs.c
@@ -0,0 +1,4 @@
+#define NOSMARTJBB 1
+#define NOSMARTJBU 1
+#define NOSMARTJLB 1
+#include "JudyByCount.c"
diff --git a/libs/klib/judy/JudyCascade.c b/libs/klib/judy/JudyCascade.c
new file mode 100644
index 0000000..fccb747
--- /dev/null
+++ b/libs/klib/judy/JudyCascade.c
@@ -0,0 +1,1940 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+extern int j__udyCreateBranchL(Pjp_t, Pjp_t, uint8_t *, Word_t, Pvoid_t);
+extern int j__udyCreateBranchB(Pjp_t, Pjp_t, uint8_t *, Word_t, Pvoid_t);
+
+DBGCODE(extern void JudyCheckSorted(Pjll_t Pjll, Word_t Pop1, long IndexSize);)
+
+static const jbb_t StageJBBZero;	// zeroed versions of namesake struct.
+
+// TBD:  There are multiple copies of (some of) these CopyWto3, Copy3toW,
+// CopyWto7 and Copy7toW functions in Judy1Cascade.c, JudyLCascade.c, and
+// JudyDecascade.c.  These static functions should probably be moved to a
+// common place, made macros, or something to avoid having four copies.
+
+
+// ****************************************************************************
+// __ J U D Y   C O P Y   X   T O   W
+
+
+FUNCTION static void j__udyCopy3toW(
+	PWord_t	  PDest,
+	uint8_t * PSrc,
+	Word_t	  LeafIndexes)
+{
+	do
+	{
+		JU_COPY3_PINDEX_TO_LONG(*PDest, PSrc);
+		PSrc	+= 3;
+		PDest	+= 1;
+
+	} while(--LeafIndexes);
+
+} //j__udyCopy3toW()
+
+
+#ifdef JU_64BIT
+
+FUNCTION static void j__udyCopy4toW(
+	PWord_t	   PDest,
+	uint32_t * PSrc,
+	Word_t	   LeafIndexes)
+{
+	do { *PDest++ = *PSrc++;
+	} while(--LeafIndexes);
+
+} // j__udyCopy4toW()
+
+
+FUNCTION static void j__udyCopy5toW(
+	PWord_t	  PDest,
+	uint8_t	* PSrc,
+	Word_t	  LeafIndexes)
+{
+	do
+	{
+		JU_COPY5_PINDEX_TO_LONG(*PDest, PSrc);
+		PSrc	+= 5;
+		PDest	+= 1;
+
+	} while(--LeafIndexes);
+
+} // j__udyCopy5toW()
+
+
+FUNCTION static void j__udyCopy6toW(
+	PWord_t	  PDest,
+	uint8_t	* PSrc,
+	Word_t	  LeafIndexes)
+{
+	do
+	{
+		JU_COPY6_PINDEX_TO_LONG(*PDest, PSrc);
+		PSrc	+= 6;
+		PDest	+= 1;
+
+	} while(--LeafIndexes);
+
+} // j__udyCopy6toW()
+
+
+FUNCTION static void j__udyCopy7toW(
+	PWord_t	  PDest,
+	uint8_t	* PSrc,
+	Word_t	  LeafIndexes)
+{
+	do
+	{
+		JU_COPY7_PINDEX_TO_LONG(*PDest, PSrc);
+		PSrc	+= 7;
+		PDest	+= 1;
+
+	} while(--LeafIndexes);
+
+} // j__udyCopy7toW()
+
+#endif // JU_64BIT
+
+
+// ****************************************************************************
+// __ J U D Y   C O P Y   W   T O   X
+
+
+FUNCTION static void j__udyCopyWto3(
+	uint8_t	* PDest,
+	PWord_t	  PSrc,
+	Word_t	  LeafIndexes)
+{
+	do
+	{
+		JU_COPY3_LONG_TO_PINDEX(PDest, *PSrc);
+		PSrc	+= 1;
+		PDest	+= 3;
+
+	} while(--LeafIndexes);
+
+} // j__udyCopyWto3()
+
+
+#ifdef JU_64BIT
+
+FUNCTION static void j__udyCopyWto4(
+	uint8_t	* PDest,
+	PWord_t	  PSrc,
+	Word_t	  LeafIndexes)
+{
+	uint32_t *PDest32 = (uint32_t *)PDest;
+
+	do
+	{
+		*PDest32 = *PSrc;
+		PSrc	+= 1;
+		PDest32	+= 1;
+	} while(--LeafIndexes);
+
+} // j__udyCopyWto4()
+
+
+FUNCTION static void j__udyCopyWto5(
+	uint8_t	* PDest,
+	PWord_t	  PSrc,
+	Word_t	  LeafIndexes)
+{
+	do
+	{
+		JU_COPY5_LONG_TO_PINDEX(PDest, *PSrc);
+		PSrc	+= 1;
+		PDest	+= 5;
+
+	} while(--LeafIndexes);
+
+} // j__udyCopyWto5()
+
+
+FUNCTION static void j__udyCopyWto6(
+	uint8_t	* PDest,
+	PWord_t	  PSrc,
+	Word_t	  LeafIndexes)
+{
+	do
+	{
+		JU_COPY6_LONG_TO_PINDEX(PDest, *PSrc);
+		PSrc	+= 1;
+		PDest	+= 6;
+
+	} while(--LeafIndexes);
+
+} // j__udyCopyWto6()
+
+
+FUNCTION static void j__udyCopyWto7(
+	uint8_t	* PDest,
+	PWord_t	  PSrc,
+	Word_t	  LeafIndexes)
+{
+	do
+	{
+		JU_COPY7_LONG_TO_PINDEX(PDest, *PSrc);
+		PSrc	+= 1;
+		PDest	+= 7;
+
+	} while(--LeafIndexes);
+
+} // j__udyCopyWto7()
+
+#endif // JU_64BIT
+
+
+// ****************************************************************************
+// COMMON CODE (MACROS):
+//
+// Free objects in an array of valid JPs, StageJP[ExpCnt] == last one may
+// include Immeds, which are ignored.
+
+#define FREEALLEXIT(ExpCnt,StageJP,Pjpm)				\
+	{								\
+	    Word_t _expct = (ExpCnt);					\
+	    while (_expct--) j__udyFreeSM(&((StageJP)[_expct]), Pjpm);  \
+	    return(-1);                                                 \
+	}
+
+// Clear the array that keeps track of the number of JPs in a subexpanse:
+
+#define ZEROJP(SubJPCount)                                              \
+	{								\
+		int ii;							\
+		for (ii = 0; ii < cJU_NUMSUBEXPB; ii++) (SubJPCount[ii]) = 0; \
+	}
+
+// ****************************************************************************
+// __ J U D Y   S T A G E   J B B   T O   J B B
+//
+// Create a mallocd BranchB (jbb_t) from a staged BranchB while "splaying" a
+// single old leaf.  Return -1 if out of memory, otherwise 1.
+
+static int j__udyStageJBBtoJBB(
+	Pjp_t     PjpLeaf,	// JP of leaf being splayed.
+	Pjbb_t    PStageJBB,	// temp jbb_t on stack.
+	Pjp_t     PjpArray,	// array of JPs to splayed new leaves.
+	uint8_t * PSubCount,	// count of JPs for each subexpanse.
+	Pjpm_t    Pjpm)		// the jpm_t for JudyAlloc*().
+{
+	Pjbb_t    PjbbRaw;	// pointer to new bitmap branch.
+	Pjbb_t    Pjbb;
+	Word_t    subexp;
+
+// Get memory for new BranchB:
+
+	if ((PjbbRaw = j__udyAllocJBB(Pjpm)) == (Pjbb_t) NULL) return(-1);
+	Pjbb = P_JBB(PjbbRaw);
+
+// Copy staged BranchB into just-allocated BranchB:
+
+	*Pjbb = *PStageJBB;
+
+// Allocate the JP subarrays (BJP) for the new BranchB:
+
+	for (subexp = 0; subexp < cJU_NUMSUBEXPB; subexp++)
+	{
+	    Pjp_t  PjpRaw;
+	    Pjp_t  Pjp;
+	    Word_t NumJP;       // number of JPs in each subexpanse.
+
+	    if ((NumJP = PSubCount[subexp]) == 0) continue;	// empty.
+
+// Out of memory, back out previous allocations:
+
+	    if ((PjpRaw = j__udyAllocJBBJP(NumJP, Pjpm)) == (Pjp_t) NULL)
+	    {
+		while(subexp--)
+		{
+		    if ((NumJP = PSubCount[subexp]) == 0) continue;
+
+		    PjpRaw = JU_JBB_PJP(Pjbb, subexp);
+		    j__udyFreeJBBJP(PjpRaw, NumJP, Pjpm);
+		}
+		j__udyFreeJBB(PjbbRaw, Pjpm);
+		return(-1);	// out of memory.
+	    }
+	    Pjp = P_JP(PjpRaw);
+
+// Place the JP subarray pointer in the new BranchB, copy subarray JPs, and
+// advance to the next subexpanse:
+
+	    JU_JBB_PJP(Pjbb, subexp) = PjpRaw;
+	    JU_COPYMEM(Pjp, PjpArray, NumJP);
+	    PjpArray += NumJP;
+
+	} // for each subexpanse.
+
+// Change the PjpLeaf from Leaf to BranchB:
+
+	PjpLeaf->jp_Addr  = (Word_t) PjbbRaw;
+	PjpLeaf->jp_Type += cJU_JPBRANCH_B2 - cJU_JPLEAF2;  // Leaf to BranchB.
+
+	return(1);
+
+} // j__udyStageJBBtoJBB()
+
+
+// ****************************************************************************
+// __ J U D Y   J L L 2   T O   J L B 1
+//
+// Create a LeafB1 (jlb_t = JLB1) from a Leaf2 (2-byte Indexes and for JudyL,
+// Word_t Values).  Return NULL if out of memory, else a pointer to the new
+// LeafB1.
+//
+// NOTE:  Caller must release the Leaf2 that was passed in.
+
+FUNCTION static Pjlb_t j__udyJLL2toJLB1(
+	uint16_t * Pjll,	// array of 16-bit indexes.
+#ifdef JUDYL
+	Pjv_t      Pjv,		// array of associated values.
+#endif
+	Word_t     LeafPop1,	// number of indexes/values.
+	Pvoid_t    Pjpm)	// jpm_t for JudyAlloc*()/JudyFree*().
+{
+	Pjlb_t     PjlbRaw;
+	Pjlb_t     Pjlb;
+	int	   offset;
+JUDYLCODE(int	   subexp;)
+
+// Allocate the LeafB1:
+
+	if ((PjlbRaw = j__udyAllocJLB1(Pjpm)) == (Pjlb_t) NULL)
+	    return((Pjlb_t) NULL);
+	Pjlb = P_JLB(PjlbRaw);
+
+// Copy Leaf2 indexes to LeafB1:
+
+	for (offset = 0; offset < LeafPop1; ++offset)
+	    JU_BITMAPSETL(Pjlb, Pjll[offset]);
+
+#ifdef JUDYL
+
+// Build LeafVs from bitmap:
+
+	for (subexp = 0; subexp < cJU_NUMSUBEXPL; ++subexp)
+	{
+	    struct _POINTER_VALUES
+	    {
+		Word_t pv_Pop1;		// size of value area.
+		Pjv_t  pv_Pjv;		// raw pointer to value area.
+	    } pv[cJU_NUMSUBEXPL];
+
+// Get the population of the subexpanse, and if any, allocate a LeafV:
+
+	    pv[subexp].pv_Pop1 = j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, subexp));
+
+	    if (pv[subexp].pv_Pop1)
+	    {
+		Pjv_t Pjvnew;
+
+// TBD:  There is an opportunity to put pop == 1 value in pointer:
+
+		pv[subexp].pv_Pjv = j__udyLAllocJV(pv[subexp].pv_Pop1, Pjpm);
+
+// Upon out of memory, free all previously allocated:
+
+		if (pv[subexp].pv_Pjv == (Pjv_t) NULL)
+		{
+		    while(subexp--)
+		    {
+			if (pv[subexp].pv_Pop1)
+			{
+			    j__udyLFreeJV(pv[subexp].pv_Pjv, pv[subexp].pv_Pop1,
+					  Pjpm);
+			}
+		    }
+		    j__udyFreeJLB1(PjlbRaw, Pjpm);
+		    return((Pjlb_t) NULL);
+		}
+
+		Pjvnew = P_JV(pv[subexp].pv_Pjv);
+		JU_COPYMEM(Pjvnew, Pjv, pv[subexp].pv_Pop1);
+		Pjv += pv[subexp].pv_Pop1;	// advance value pointer.
+
+// Place raw pointer to value array in bitmap subexpanse:
+
+		JL_JLB_PVALUE(Pjlb, subexp) = pv[subexp].pv_Pjv;
+
+	    } // populated subexpanse.
+	} // each subexpanse.
+
+#endif // JUDYL
+
+	return(PjlbRaw);	// pointer to LeafB1.
+
+} // j__udyJLL2toJLB1()
+
+
+// ****************************************************************************
+// __ J U D Y   C A S C A D E 1
+//
+// Create bitmap leaf from 1-byte Indexes and Word_t Values.
+//
+// TBD:  There must be a better way.
+//
+// Only for JudyL 32 bit:  (note, unifdef disallows comment on next line)
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+
+FUNCTION int j__udyCascade1(
+	Pjp_t	   Pjp,
+	Pvoid_t    Pjpm)
+{
+        Word_t     DcdP0;
+	uint8_t	 * PLeaf;
+	Pjlb_t	   PjlbRaw;
+	Pjlb_t	   Pjlb;
+	Word_t     Pop1;
+	Word_t     ii;		// temp for loop counter
+JUDYLCODE(Pjv_t	   Pjv;)
+
+	assert(JU_JPTYPE(Pjp) == cJU_JPLEAF1);
+	assert((JU_JPDCDPOP0(Pjp) & 0xFF) == (cJU_LEAF1_MAXPOP1-1));
+
+	PjlbRaw = j__udyAllocJLB1(Pjpm);
+	if (PjlbRaw == (Pjlb_t) NULL) return(-1);
+
+	Pjlb  = P_JLB(PjlbRaw);
+	PLeaf = (uint8_t *) P_JLL(Pjp->jp_Addr);
+	Pop1  = JU_JPLEAF_POP0(Pjp) + 1;
+
+	JUDYLCODE(Pjv = JL_LEAF1VALUEAREA(PLeaf, Pop1);)
+
+//	Copy 1 byte index Leaf to bitmap Leaf
+	for (ii = 0; ii < Pop1; ii++) JU_BITMAPSETL(Pjlb, PLeaf[ii]);
+
+#ifdef JUDYL
+//	Build 8 subexpanse Value leaves from bitmap
+	for (ii = 0; ii < cJU_NUMSUBEXPL; ii++)
+	{
+//	    Get number of Indexes in subexpanse
+	    if ((Pop1 = j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, ii))))
+	    {
+		Pjv_t PjvnewRaw;	// value area of new leaf.
+		Pjv_t Pjvnew;
+
+		PjvnewRaw = j__udyLAllocJV(Pop1, Pjpm);
+		if (PjvnewRaw == (Pjv_t) NULL)	// out of memory.
+		{
+//                  Free prevously allocated LeafVs:
+		    while(ii--)
+		    {
+			if ((Pop1 = j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, ii))))
+			{
+			    PjvnewRaw = JL_JLB_PVALUE(Pjlb, ii);
+			    j__udyLFreeJV(PjvnewRaw, Pop1, Pjpm);
+			}
+		    }
+//                  Free the bitmap leaf
+		    j__udyLFreeJLB1(PjlbRaw,Pjpm);
+		    return(-1);
+		}
+		Pjvnew    = P_JV(PjvnewRaw);
+		JU_COPYMEM(Pjvnew, Pjv, Pop1);
+
+		Pjv += Pop1;
+		JL_JLB_PVALUE(Pjlb, ii) = PjvnewRaw;
+	    }
+	}
+#endif // JUDYL
+
+	DcdP0 = JU_JPDCDPOP0(Pjp) | (PLeaf[0] & cJU_DCDMASK(1));
+        JU_JPSETADT(Pjp, (Word_t)PjlbRaw, DcdP0, cJU_JPLEAF_B1);
+
+	return(1);	// return success
+
+} // j__udyCascade1()
+
+#endif // (!(JUDY1 && JU_64BIT))
+
+
+// ****************************************************************************
+// __ J U D Y   C A S C A D E 2
+//
+// Entry PLeaf of size LeafPop1 is either compressed or splayed with pointer
+// returned in Pjp.  Entry Levels sizeof(Word_t) down to level 2.
+//
+// Splay or compress the 2-byte Index Leaf that Pjp point to.  Return *Pjp as a
+// (compressed) cJU_LEAFB1 or a cJU_BRANCH_*2
+
+FUNCTION int j__udyCascade2(
+	Pjp_t	   Pjp,
+	Pvoid_t	   Pjpm)
+{
+	uint16_t * PLeaf;	// pointer to leaf, explicit type.
+	Word_t	   End, Start;	// temporaries.
+	Word_t	   ExpCnt;	// count of expanses of splay.
+	Word_t     CIndex;	// current Index word.
+JUDYLCODE(Pjv_t	   Pjv;)	// value area of leaf.
+
+//	Temp staging for parts(Leaves) of newly splayed leaf
+	jp_t	   StageJP   [cJU_LEAF2_MAXPOP1];  // JPs of new leaves
+	uint8_t	   StageExp  [cJU_LEAF2_MAXPOP1];  // Expanses of new leaves
+	uint8_t	   SubJPCount[cJU_NUMSUBEXPB];     // JPs in each subexpanse
+	jbb_t      StageJBB;                       // staged bitmap branch
+
+	assert(JU_JPTYPE(Pjp) == cJU_JPLEAF2);
+	assert((JU_JPDCDPOP0(Pjp) & 0xFFFF) == (cJU_LEAF2_MAXPOP1-1));
+
+//	Get the address of the Leaf
+	PLeaf = (uint16_t *) P_JLL(Pjp->jp_Addr);
+
+//	And its Value area
+	JUDYLCODE(Pjv = JL_LEAF2VALUEAREA(PLeaf, cJU_LEAF2_MAXPOP1);)
+
+//  If Leaf is in 1 expanse -- just compress it to a Bitmap Leaf
+
+	CIndex = PLeaf[0];
+	if (!JU_DIGITATSTATE(CIndex ^ PLeaf[cJU_LEAF2_MAXPOP1-1], 2))
+	{
+//	cJU_JPLEAF_B1
+                Word_t DcdP0;
+		Pjlb_t PjlbRaw;
+		PjlbRaw = j__udyJLL2toJLB1(PLeaf,
+#ifdef JUDYL
+				     Pjv,
+#endif
+				     cJU_LEAF2_MAXPOP1, Pjpm);
+		if (PjlbRaw == (Pjlb_t)NULL) return(-1);  // out of memory
+
+//		Merge in another Dcd byte because compressing
+		DcdP0 = (CIndex & cJU_DCDMASK(1)) | JU_JPDCDPOP0(Pjp);
+                JU_JPSETADT(Pjp, (Word_t)PjlbRaw, DcdP0, cJU_JPLEAF_B1);
+
+		return(1);
+	}
+
+//  Else in 2+ expanses, splay Leaf into smaller leaves at higher compression
+
+	StageJBB = StageJBBZero;       // zero staged bitmap branch
+	ZEROJP(SubJPCount);
+
+//	Splay the 2 byte index Leaf to 1 byte Index Leaves
+	for (ExpCnt = Start = 0, End = 1; ; End++)
+	{
+//		Check if new expanse or last one
+		if (	(End == cJU_LEAF2_MAXPOP1)
+				||
+			(JU_DIGITATSTATE(CIndex ^ PLeaf[End], 2))
+		   )
+		{
+//			Build a leaf below the previous expanse
+//
+			Pjp_t  PjpJP	= StageJP + ExpCnt;
+			Word_t Pop1	= End - Start;
+			Word_t expanse = JU_DIGITATSTATE(CIndex, 2);
+			Word_t subexp  = expanse / cJU_BITSPERSUBEXPB;
+//
+//                      set the bit that is the current expanse
+			JU_JBB_BITMAP(&StageJBB, subexp) |= JU_BITPOSMASKB(expanse);
+#ifdef SUBEXPCOUNTS
+			StageJBB.jbb_subPop1[subexp] += Pop1; // pop of subexpanse
+#endif
+//                      count number of expanses in each subexpanse
+			SubJPCount[subexp]++;
+
+//			Save byte expanse of leaf
+			StageExp[ExpCnt] = JU_DIGITATSTATE(CIndex, 2);
+
+			if (Pop1 == 1)	// cJU_JPIMMED_1_01
+			{
+	                    Word_t DcdP0;
+	                    DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(1)) |
+                                CIndex;
+#ifdef JUDY1
+                            JU_JPSETADT(PjpJP, 0, DcdP0, cJ1_JPIMMED_1_01);
+#else   // JUDYL
+                            JU_JPSETADT(PjpJP, Pjv[Start], DcdP0, 
+                                cJL_JPIMMED_1_01);
+#endif  // JUDYL
+			}
+			else if (Pop1 <= cJU_IMMED1_MAXPOP1) // bigger
+			{
+//		cJL_JPIMMED_1_02..3:  JudyL 32
+//		cJ1_JPIMMED_1_02..7:  Judy1 32
+//		cJL_JPIMMED_1_02..7:  JudyL 64
+//		cJ1_JPIMMED_1_02..15: Judy1 64
+#ifdef JUDYL
+				Pjv_t  PjvnewRaw;	// value area of leaf.
+				Pjv_t  Pjvnew;
+
+//				Allocate Value area for Immediate Leaf
+				PjvnewRaw = j__udyLAllocJV(Pop1, Pjpm);
+				if (PjvnewRaw == (Pjv_t) NULL)
+					FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+				Pjvnew = P_JV(PjvnewRaw);
+
+//				Copy to Values to Value Leaf
+				JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+				PjpJP->jp_Addr = (Word_t) PjvnewRaw;
+
+//				Copy to JP as an immediate Leaf
+				JU_COPYMEM(PjpJP->jp_LIndex, PLeaf + Start,
+					   Pop1);
+#else
+				JU_COPYMEM(PjpJP->jp_1Index, PLeaf + Start,
+					   Pop1);
+#endif
+//				Set Type, Population and Index size
+				PjpJP->jp_Type = cJU_JPIMMED_1_02 + Pop1 - 2;
+			}
+
+// 64Bit Judy1 does not have Leaf1:  (note, unifdef disallows comment on next
+// line)
+
+#if (! (defined(JUDY1) && defined(JU_64BIT)))
+			else if (Pop1 <= cJU_LEAF1_MAXPOP1) // still bigger
+			{
+//		cJU_JPLEAF1
+                                Word_t  DcdP0;
+				Pjll_t PjllRaw;	 // pointer to new leaf.
+				Pjll_t Pjll;
+		      JUDYLCODE(Pjv_t  Pjvnew;)	 // value area of new leaf.
+
+//				Get a new Leaf
+				PjllRaw = j__udyAllocJLL1(Pop1, Pjpm);
+				if (PjllRaw == (Pjll_t)NULL)
+					FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+				Pjll = P_JLL(PjllRaw);
+#ifdef JUDYL
+//				Copy to Values to new Leaf
+				Pjvnew = JL_LEAF1VALUEAREA(Pjll, Pop1);
+				JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+#endif
+//				Copy Indexes to new Leaf
+				JU_COPYMEM((uint8_t *)Pjll, PLeaf+Start, Pop1);
+
+				DBGCODE(JudyCheckSorted(Pjll, Pop1, 1);)
+
+                                DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(2)) 
+                                                |
+                                        (CIndex & cJU_DCDMASK(2-1))
+                                                |
+                                        (Pop1 - 1);
+
+                                JU_JPSETADT(PjpJP, (Word_t)PjllRaw, DcdP0,
+                                        cJU_JPLEAF1);
+			}
+#endif //  (!(JUDY1 && JU_64BIT)) // Not 64Bit Judy1
+
+			else				// biggest
+			{
+//		cJU_JPLEAF_B1
+                                Word_t  DcdP0;
+				Pjlb_t PjlbRaw;
+				PjlbRaw = j__udyJLL2toJLB1(
+						PLeaf + Start,
+#ifdef JUDYL
+						Pjv + Start,
+#endif
+						Pop1, Pjpm);
+				if (PjlbRaw == (Pjlb_t)NULL)
+					FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+                                DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(2)) 
+                                                |
+                                        (CIndex & cJU_DCDMASK(2-1)) 
+                                                |
+                                        (Pop1 - 1);
+
+                                JU_JPSETADT(PjpJP, (Word_t)PjlbRaw, DcdP0,
+                                        cJU_JPLEAF_B1);
+			}
+			ExpCnt++;
+//                      Done?
+			if (End == cJU_LEAF2_MAXPOP1) break;
+
+//			New Expanse, Start and Count
+			CIndex = PLeaf[End];
+			Start  = End;
+		}
+	}
+
+//      Now put all the Leaves below a BranchL or BranchB:
+	if (ExpCnt <= cJU_BRANCHLMAXJPS) // put the Leaves below a BranchL
+	{
+	    if (j__udyCreateBranchL(Pjp, StageJP, StageExp, ExpCnt,
+			Pjpm) == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+	    Pjp->jp_Type = cJU_JPBRANCH_L2;
+	}
+	else
+	{
+	    if (j__udyStageJBBtoJBB(Pjp, &StageJBB, StageJP, SubJPCount, Pjpm)
+		== -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+	}
+	return(1);
+
+} // j__udyCascade2()
+
+
+// ****************************************************************************
+// __ J U D Y   C A S C A D E 3
+//
+// Return *Pjp as a (compressed) cJU_LEAF2, cJU_BRANCH_L3, cJU_BRANCH_B3.
+
+FUNCTION int j__udyCascade3(
+	Pjp_t	   Pjp,
+	Pvoid_t	   Pjpm)
+{
+	uint8_t  * PLeaf;	// pointer to leaf, explicit type.
+	Word_t	   End, Start;	// temporaries.
+	Word_t	   ExpCnt;	// count of expanses of splay.
+	Word_t     CIndex;	// current Index word.
+JUDYLCODE(Pjv_t	   Pjv;)	// value area of leaf.
+
+//	Temp staging for parts(Leaves) of newly splayed leaf
+	jp_t	   StageJP   [cJU_LEAF3_MAXPOP1];  // JPs of new leaves
+	Word_t	   StageA    [cJU_LEAF3_MAXPOP1];
+	uint8_t	   StageExp  [cJU_LEAF3_MAXPOP1];  // Expanses of new leaves
+	uint8_t	   SubJPCount[cJU_NUMSUBEXPB];     // JPs in each subexpanse
+	jbb_t      StageJBB;                       // staged bitmap branch
+
+	assert(JU_JPTYPE(Pjp) == cJU_JPLEAF3);
+	assert((JU_JPDCDPOP0(Pjp) & 0xFFFFFF) == (cJU_LEAF3_MAXPOP1-1));
+
+//	Get the address of the Leaf
+	PLeaf = (uint8_t *) P_JLL(Pjp->jp_Addr);
+
+//	Extract leaf to Word_t and insert-sort Index into it
+	j__udyCopy3toW(StageA, PLeaf, cJU_LEAF3_MAXPOP1);
+
+//	Get the address of the Leaf and Value area
+	JUDYLCODE(Pjv = JL_LEAF3VALUEAREA(PLeaf, cJU_LEAF3_MAXPOP1);)
+
+//  If Leaf is in 1 expanse -- just compress it (compare 1st, last & Index)
+
+	CIndex = StageA[0];
+	if (!JU_DIGITATSTATE(CIndex ^ StageA[cJU_LEAF3_MAXPOP1-1], 3))
+	{
+                Word_t DcdP0;
+		Pjll_t PjllRaw;	 // pointer to new leaf.
+		Pjll_t Pjll;
+      JUDYLCODE(Pjv_t  Pjvnew;)	 // value area of new leaf.
+
+//		Alloc a 2 byte Index Leaf
+		PjllRaw	= j__udyAllocJLL2(cJU_LEAF3_MAXPOP1, Pjpm);
+		if (PjllRaw == (Pjlb_t)NULL) return(-1);  // out of memory
+
+		Pjll = P_JLL(PjllRaw);
+
+//		Copy just 2 bytes Indexes to new Leaf
+//		j__udyCopyWto2((uint16_t *) Pjll, StageA, cJU_LEAF3_MAXPOP1);
+		JU_COPYMEM    ((uint16_t *) Pjll, StageA, cJU_LEAF3_MAXPOP1);
+#ifdef JUDYL
+//		Copy Value area into new Leaf
+		Pjvnew = JL_LEAF2VALUEAREA(Pjll, cJU_LEAF3_MAXPOP1);
+		JU_COPYMEM(Pjvnew, Pjv, cJU_LEAF3_MAXPOP1);
+#endif
+		DBGCODE(JudyCheckSorted(Pjll, cJU_LEAF3_MAXPOP1, 2);)
+
+//		Form new JP, Pop0 field is unchanged
+//		Add in another Dcd byte because compressing
+                DcdP0 = (CIndex & cJU_DCDMASK(2)) | JU_JPDCDPOP0(Pjp);
+
+                JU_JPSETADT(Pjp, (Word_t) PjllRaw, DcdP0, cJU_JPLEAF2);
+
+		return(1); // Success
+	}
+
+//  Else in 2+ expanses, splay Leaf into smaller leaves at higher compression
+
+	StageJBB = StageJBBZero;       // zero staged bitmap branch
+	ZEROJP(SubJPCount);
+
+//	Splay the 3 byte index Leaf to 2 byte Index Leaves
+	for (ExpCnt = Start = 0, End = 1; ; End++)
+	{
+//		Check if new expanse or last one
+		if (	(End == cJU_LEAF3_MAXPOP1)
+				||
+			(JU_DIGITATSTATE(CIndex ^ StageA[End], 3))
+		   )
+		{
+//			Build a leaf below the previous expanse
+
+			Pjp_t  PjpJP	= StageJP + ExpCnt;
+			Word_t Pop1	= End - Start;
+			Word_t expanse = JU_DIGITATSTATE(CIndex, 3);
+			Word_t subexp  = expanse / cJU_BITSPERSUBEXPB;
+//
+//                      set the bit that is the current expanse
+			JU_JBB_BITMAP(&StageJBB, subexp) |= JU_BITPOSMASKB(expanse);
+#ifdef SUBEXPCOUNTS
+			StageJBB.jbb_subPop1[subexp] += Pop1; // pop of subexpanse
+#endif
+//                      count number of expanses in each subexpanse
+			SubJPCount[subexp]++;
+
+//			Save byte expanse of leaf
+			StageExp[ExpCnt] = JU_DIGITATSTATE(CIndex, 3);
+
+			if (Pop1 == 1)	// cJU_JPIMMED_2_01
+			{
+	                    Word_t DcdP0;
+	                    DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(2)) |
+                                CIndex;
+#ifdef JUDY1
+                            JU_JPSETADT(PjpJP, 0, DcdP0, cJ1_JPIMMED_2_01);
+#else   // JUDYL
+                            JU_JPSETADT(PjpJP, Pjv[Start], DcdP0, 
+                                cJL_JPIMMED_2_01);
+#endif  // JUDYL
+			}
+#if (defined(JUDY1) || defined(JU_64BIT))
+			else if (Pop1 <= cJU_IMMED2_MAXPOP1)
+			{
+//		cJ1_JPIMMED_2_02..3:  Judy1 32
+//		cJL_JPIMMED_2_02..3:  JudyL 64
+//		cJ1_JPIMMED_2_02..7:  Judy1 64
+#ifdef JUDYL
+//				Alloc is 1st in case of malloc fail
+				Pjv_t PjvnewRaw;  // value area of new leaf.
+				Pjv_t Pjvnew;
+
+//				Allocate Value area for Immediate Leaf
+				PjvnewRaw = j__udyLAllocJV(Pop1, Pjpm);
+				if (PjvnewRaw == (Pjv_t) NULL)
+					FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+				Pjvnew = P_JV(PjvnewRaw);
+
+//				Copy to Values to Value Leaf
+				JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+
+				PjpJP->jp_Addr = (Word_t) PjvnewRaw;
+
+//				Copy to Index to JP as an immediate Leaf
+				JU_COPYMEM((uint16_t *) (PjpJP->jp_LIndex),
+					   StageA + Start, Pop1);
+#else // JUDY1
+				JU_COPYMEM((uint16_t *) (PjpJP->jp_1Index),
+					   StageA + Start, Pop1);
+#endif // JUDY1
+//				Set Type, Population and Index size
+				PjpJP->jp_Type = cJU_JPIMMED_2_02 + Pop1 - 2;
+			}
+#endif // (JUDY1 || JU_64BIT)
+
+			else	// Make a linear leaf2
+			{
+//		cJU_JPLEAF2
+                                Word_t  DcdP0;
+				Pjll_t PjllRaw;	 // pointer to new leaf.
+				Pjll_t Pjll;
+		      JUDYLCODE(Pjv_t  Pjvnew;)	 // value area of new leaf.
+
+				PjllRaw = j__udyAllocJLL2(Pop1, Pjpm);
+				if (PjllRaw == (Pjll_t) NULL)
+					FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+				Pjll = P_JLL(PjllRaw);
+#ifdef JUDYL
+//				Copy to Values to new Leaf
+				Pjvnew = JL_LEAF2VALUEAREA(Pjll, Pop1);
+				JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+#endif
+//				Copy least 2 bytes per Index of Leaf to new Leaf
+				JU_COPYMEM((uint16_t *) Pjll, StageA+Start,
+					   Pop1);
+
+				DBGCODE(JudyCheckSorted(Pjll, Pop1, 2);)
+
+                                DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(3)) 
+                                                |
+                                        (CIndex & cJU_DCDMASK(3-1)) 
+                                                |
+                                        (Pop1 - 1);
+
+                                JU_JPSETADT(PjpJP, (Word_t)PjllRaw, DcdP0,
+                                        cJU_JPLEAF2);
+			}
+			ExpCnt++;
+//                      Done?
+			if (End == cJU_LEAF3_MAXPOP1) break;
+
+//			New Expanse, Start and Count
+			CIndex = StageA[End];
+			Start  = End;
+		}
+	}
+
+//      Now put all the Leaves below a BranchL or BranchB:
+	if (ExpCnt <= cJU_BRANCHLMAXJPS) // put the Leaves below a BranchL
+	{
+	    if (j__udyCreateBranchL(Pjp, StageJP, StageExp, ExpCnt,
+			Pjpm) == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+	    Pjp->jp_Type = cJU_JPBRANCH_L3;
+	}
+	else
+	{
+	    if (j__udyStageJBBtoJBB(Pjp, &StageJBB, StageJP, SubJPCount, Pjpm)
+		== -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+	}
+	return(1);
+
+} // j__udyCascade3()
+
+
+#ifdef JU_64BIT   // JudyCascade[4567]
+
+// ****************************************************************************
+// __ J U D Y   C A S C A D E 4
+//
+// Cascade from a cJU_JPLEAF4 to one of the following:
+//  1. if leaf is in 1 expanse:
+//        compress it into a JPLEAF3
+//  2. if leaf contains multiple expanses:
+//        create linear or bitmap branch containing
+//        each new expanse is either a:
+//               JPIMMED_3_01  branch
+//               JPIMMED_3_02  branch
+//               JPLEAF3
+
+FUNCTION int j__udyCascade4(
+	Pjp_t	   Pjp,
+	Pvoid_t	   Pjpm)
+{
+	uint32_t * PLeaf;	// pointer to leaf, explicit type.
+	Word_t	   End, Start;	// temporaries.
+	Word_t	   ExpCnt;	// count of expanses of splay.
+	Word_t     CIndex;	// current Index word.
+JUDYLCODE(Pjv_t	   Pjv;)	// value area of leaf.
+
+//	Temp staging for parts(Leaves) of newly splayed leaf
+	jp_t	   StageJP   [cJU_LEAF4_MAXPOP1];  // JPs of new leaves
+	Word_t	   StageA    [cJU_LEAF4_MAXPOP1];
+	uint8_t	   StageExp  [cJU_LEAF4_MAXPOP1];  // Expanses of new leaves
+	uint8_t	   SubJPCount[cJU_NUMSUBEXPB];     // JPs in each subexpanse
+	jbb_t      StageJBB;                       // staged bitmap branch
+
+	assert(JU_JPTYPE(Pjp) == cJU_JPLEAF4);
+	assert((JU_JPDCDPOP0(Pjp) & 0xFFFFFFFF) == (cJU_LEAF4_MAXPOP1-1));
+
+//	Get the address of the Leaf
+	PLeaf = (uint32_t *) P_JLL(Pjp->jp_Addr);
+
+//	Extract 4 byte index Leaf to Word_t
+	j__udyCopy4toW(StageA, PLeaf, cJU_LEAF4_MAXPOP1);
+
+//	Get the address of the Leaf and Value area
+	JUDYLCODE(Pjv = JL_LEAF4VALUEAREA(PLeaf, cJU_LEAF4_MAXPOP1);)
+
+//  If Leaf is in 1 expanse -- just compress it (compare 1st, last & Index)
+
+	CIndex = StageA[0];
+	if (!JU_DIGITATSTATE(CIndex ^ StageA[cJU_LEAF4_MAXPOP1-1], 4))
+	{
+                Word_t DcdP0;
+		Pjll_t PjllRaw;	 // pointer to new leaf.
+		Pjll_t Pjll;
+      JUDYLCODE(Pjv_t  Pjvnew;)	 // value area of new Leaf.
+
+//		Alloc a 3 byte Index Leaf
+		PjllRaw = j__udyAllocJLL3(cJU_LEAF4_MAXPOP1, Pjpm);
+		if (PjllRaw == (Pjlb_t)NULL) return(-1);  // out of memory
+
+		Pjll = P_JLL(PjllRaw);
+
+//		Copy Index area into new Leaf
+		j__udyCopyWto3((uint8_t *) Pjll, StageA, cJU_LEAF4_MAXPOP1);
+#ifdef JUDYL
+//		Copy Value area into new Leaf
+		Pjvnew = JL_LEAF3VALUEAREA(Pjll, cJU_LEAF4_MAXPOP1);
+		JU_COPYMEM(Pjvnew, Pjv, cJU_LEAF4_MAXPOP1);
+#endif
+		DBGCODE(JudyCheckSorted(Pjll, cJU_LEAF4_MAXPOP1, 3);)
+
+	        DcdP0 = JU_JPDCDPOP0(Pjp) | (CIndex & cJU_DCDMASK(3));
+                JU_JPSETADT(Pjp, (Word_t)PjllRaw, DcdP0, cJU_JPLEAF3);
+
+		return(1);
+	}
+
+//  Else in 2+ expanses, splay Leaf into smaller leaves at higher compression
+
+	StageJBB = StageJBBZero;       // zero staged bitmap branch
+	ZEROJP(SubJPCount);
+
+//	Splay the 4 byte index Leaf to 3 byte Index Leaves
+	for (ExpCnt = Start = 0, End = 1; ; End++)
+	{
+//		Check if new expanse or last one
+		if (	(End == cJU_LEAF4_MAXPOP1)
+				||
+			(JU_DIGITATSTATE(CIndex ^ StageA[End], 4))
+		   )
+		{
+//			Build a leaf below the previous expanse
+
+			Pjp_t  PjpJP	= StageJP + ExpCnt;
+			Word_t Pop1	= End - Start;
+			Word_t expanse = JU_DIGITATSTATE(CIndex, 4);
+			Word_t subexp  = expanse / cJU_BITSPERSUBEXPB;
+//
+//                      set the bit that is the current expanse
+			JU_JBB_BITMAP(&StageJBB, subexp) |= JU_BITPOSMASKB(expanse);
+#ifdef SUBEXPCOUNTS
+			StageJBB.jbb_subPop1[subexp] += Pop1; // pop of subexpanse
+#endif
+//                      count number of expanses in each subexpanse
+			SubJPCount[subexp]++;
+
+//			Save byte expanse of leaf
+			StageExp[ExpCnt] = JU_DIGITATSTATE(CIndex, 4);
+
+			if (Pop1 == 1)	// cJU_JPIMMED_3_01
+			{
+	                    Word_t DcdP0;
+	                    DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(3)) |
+                                CIndex;
+#ifdef JUDY1
+                            JU_JPSETADT(PjpJP, 0, DcdP0, cJ1_JPIMMED_3_01);
+#else   // JUDYL
+                            JU_JPSETADT(PjpJP, Pjv[Start], DcdP0,
+                                cJL_JPIMMED_3_01);
+#endif  // JUDYL
+			}
+			else if (Pop1 <= cJU_IMMED3_MAXPOP1)
+			{
+//		cJ1_JPIMMED_3_02   :  Judy1 32
+//		cJL_JPIMMED_3_02   :  JudyL 64
+//		cJ1_JPIMMED_3_02..5:  Judy1 64
+
+#ifdef JUDYL
+//				Alloc is 1st in case of malloc fail
+				Pjv_t PjvnewRaw;  // value area of new leaf.
+				Pjv_t Pjvnew;
+
+//				Allocate Value area for Immediate Leaf
+				PjvnewRaw = j__udyLAllocJV(Pop1, Pjpm);
+				if (PjvnewRaw == (Pjv_t) NULL)
+					FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+				Pjvnew = P_JV(PjvnewRaw);
+
+//				Copy to Values to Value Leaf
+				JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+				PjpJP->jp_Addr = (Word_t) PjvnewRaw;
+
+//				Copy to Index to JP as an immediate Leaf
+				j__udyCopyWto3(PjpJP->jp_LIndex,
+					       StageA + Start, Pop1);
+#else
+				j__udyCopyWto3(PjpJP->jp_1Index,
+					       StageA + Start, Pop1);
+#endif
+//				Set type, population and Index size
+				PjpJP->jp_Type = cJU_JPIMMED_3_02 + Pop1 - 2;
+			}
+			else
+			{
+//		cJU_JPLEAF3
+                                Word_t  DcdP0;
+				Pjll_t PjllRaw;	 // pointer to new leaf.
+				Pjll_t Pjll;
+		      JUDYLCODE(Pjv_t  Pjvnew;)	 // value area of new leaf.
+
+				PjllRaw = j__udyAllocJLL3(Pop1, Pjpm);
+				if (PjllRaw == (Pjll_t)NULL)
+					FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+				Pjll = P_JLL(PjllRaw);
+
+//				Copy Indexes to new Leaf
+				j__udyCopyWto3((uint8_t *) Pjll, StageA + Start,
+					       Pop1);
+#ifdef JUDYL
+//				Copy to Values to new Leaf
+				Pjvnew = JL_LEAF3VALUEAREA(Pjll, Pop1);
+				JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+#endif
+				DBGCODE(JudyCheckSorted(Pjll, Pop1, 3);)
+
+                                DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(4)) 
+                                                |
+                                        (CIndex & cJU_DCDMASK(4-1)) 
+                                                |
+                                        (Pop1 - 1);
+
+                                JU_JPSETADT(PjpJP, (Word_t)PjllRaw, DcdP0,
+                                        cJU_JPLEAF3);
+			}
+			ExpCnt++;
+//                      Done?
+			if (End == cJU_LEAF4_MAXPOP1) break;
+
+//			New Expanse, Start and Count
+			CIndex = StageA[End];
+			Start  = End;
+		}
+	}
+
+//      Now put all the Leaves below a BranchL or BranchB:
+	if (ExpCnt <= cJU_BRANCHLMAXJPS) // put the Leaves below a BranchL
+	{
+	    if (j__udyCreateBranchL(Pjp, StageJP, StageExp, ExpCnt,
+			Pjpm) == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+	    Pjp->jp_Type = cJU_JPBRANCH_L4;
+	}
+	else
+	{
+	    if (j__udyStageJBBtoJBB(Pjp, &StageJBB, StageJP, SubJPCount, Pjpm)
+		== -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+	}
+	return(1);
+
+}  // j__udyCascade4()
+
+
+// ****************************************************************************
+// __ J U D Y   C A S C A D E 5
+//
+// Cascade from a cJU_JPLEAF5 to one of the following:
+//  1. if leaf is in 1 expanse:
+//        compress it into a JPLEAF4
+//  2. if leaf contains multiple expanses:
+//        create linear or bitmap branch containing
+//        each new expanse is either a:
+//               JPIMMED_4_01  branch
+//               JPLEAF4
+
+FUNCTION int j__udyCascade5(
+	Pjp_t	   Pjp,
+	Pvoid_t	   Pjpm)
+{
+	uint8_t  * PLeaf;	// pointer to leaf, explicit type.
+	Word_t	   End, Start;	// temporaries.
+	Word_t	   ExpCnt;	// count of expanses of splay.
+	Word_t     CIndex;	// current Index word.
+JUDYLCODE(Pjv_t	   Pjv;)	// value area of leaf.
+
+//	Temp staging for parts(Leaves) of newly splayed leaf
+	jp_t	   StageJP   [cJU_LEAF5_MAXPOP1];  // JPs of new leaves
+	Word_t	   StageA    [cJU_LEAF5_MAXPOP1];
+	uint8_t	   StageExp  [cJU_LEAF5_MAXPOP1];  // Expanses of new leaves
+	uint8_t	   SubJPCount[cJU_NUMSUBEXPB];     // JPs in each subexpanse
+	jbb_t      StageJBB;                       // staged bitmap branch
+
+	assert(JU_JPTYPE(Pjp) == cJU_JPLEAF5);
+	assert((JU_JPDCDPOP0(Pjp) & 0xFFFFFFFFFF) == (cJU_LEAF5_MAXPOP1-1));
+
+//	Get the address of the Leaf
+	PLeaf = (uint8_t *) P_JLL(Pjp->jp_Addr);
+
+//	Extract 5 byte index Leaf to Word_t
+	j__udyCopy5toW(StageA, PLeaf, cJU_LEAF5_MAXPOP1);
+
+//	Get the address of the Leaf and Value area
+	JUDYLCODE(Pjv = JL_LEAF5VALUEAREA(PLeaf, cJU_LEAF5_MAXPOP1);)
+
+//  If Leaf is in 1 expanse -- just compress it (compare 1st, last & Index)
+
+	CIndex = StageA[0];
+	if (!JU_DIGITATSTATE(CIndex ^ StageA[cJU_LEAF5_MAXPOP1-1], 5))
+	{
+                Word_t DcdP0;
+		Pjll_t PjllRaw;	 // pointer to new leaf.
+		Pjll_t Pjll;
+      JUDYLCODE(Pjv_t  Pjvnew;)	 // value area of new leaf.
+
+//		Alloc a 4 byte Index Leaf
+		PjllRaw = j__udyAllocJLL4(cJU_LEAF5_MAXPOP1, Pjpm);
+		if (PjllRaw == (Pjlb_t)NULL) return(-1);  // out of memory
+
+		Pjll = P_JLL(PjllRaw);
+
+//		Copy Index area into new Leaf
+		j__udyCopyWto4((uint8_t *) Pjll, StageA, cJU_LEAF5_MAXPOP1);
+#ifdef JUDYL
+//		Copy Value area into new Leaf
+		Pjvnew = JL_LEAF4VALUEAREA(Pjll, cJU_LEAF5_MAXPOP1);
+		JU_COPYMEM(Pjvnew, Pjv, cJU_LEAF5_MAXPOP1);
+#endif
+		DBGCODE(JudyCheckSorted(Pjll, cJU_LEAF5_MAXPOP1, 4);)
+
+	        DcdP0 = JU_JPDCDPOP0(Pjp) | (CIndex & cJU_DCDMASK(4));
+                JU_JPSETADT(Pjp, (Word_t)PjllRaw, DcdP0, cJU_JPLEAF4);
+
+		return(1);
+	}
+
+//  Else in 2+ expanses, splay Leaf into smaller leaves at higher compression
+
+	StageJBB = StageJBBZero;       // zero staged bitmap branch
+	ZEROJP(SubJPCount);
+
+//	Splay the 5 byte index Leaf to 4 byte Index Leaves
+	for (ExpCnt = Start = 0, End = 1; ; End++)
+	{
+//		Check if new expanse or last one
+		if (	(End == cJU_LEAF5_MAXPOP1)
+				||
+			(JU_DIGITATSTATE(CIndex ^ StageA[End], 5))
+		   )
+		{
+//			Build a leaf below the previous expanse
+
+			Pjp_t  PjpJP	= StageJP + ExpCnt;
+			Word_t Pop1	= End - Start;
+			Word_t expanse = JU_DIGITATSTATE(CIndex, 5);
+			Word_t subexp  = expanse / cJU_BITSPERSUBEXPB;
+//
+//                      set the bit that is the current expanse
+			JU_JBB_BITMAP(&StageJBB, subexp) |= JU_BITPOSMASKB(expanse);
+#ifdef SUBEXPCOUNTS
+			StageJBB.jbb_subPop1[subexp] += Pop1; // pop of subexpanse
+#endif
+//                      count number of expanses in each subexpanse
+			SubJPCount[subexp]++;
+
+//			Save byte expanse of leaf
+			StageExp[ExpCnt] = JU_DIGITATSTATE(CIndex, 5);
+
+			if (Pop1 == 1)	// cJU_JPIMMED_4_01
+			{
+	                    Word_t DcdP0;
+	                    DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(4)) |
+                                CIndex;
+#ifdef JUDY1
+                            JU_JPSETADT(PjpJP, 0, DcdP0, cJ1_JPIMMED_4_01);
+#else   // JUDYL
+                            JU_JPSETADT(PjpJP, Pjv[Start], DcdP0,
+                                cJL_JPIMMED_4_01);
+#endif  // JUDYL
+			}
+#ifdef JUDY1
+			else if (Pop1 <= cJ1_IMMED4_MAXPOP1)
+			{
+//		cJ1_JPIMMED_4_02..3: Judy1 64
+
+//                              Copy to Index to JP as an immediate Leaf
+				j__udyCopyWto4(PjpJP->jp_1Index,
+					       StageA + Start, Pop1);
+
+//                              Set pointer, type, population and Index size
+				PjpJP->jp_Type = cJ1_JPIMMED_4_02 + Pop1 - 2;
+			}
+#endif
+			else
+			{
+//		cJU_JPLEAF4
+                                Word_t  DcdP0;
+				Pjll_t PjllRaw;	 // pointer to new leaf.
+				Pjll_t Pjll;
+		      JUDYLCODE(Pjv_t  Pjvnew;)	 // value area of new leaf.
+
+//				Get a new Leaf
+				PjllRaw = j__udyAllocJLL4(Pop1, Pjpm);
+				if (PjllRaw == (Pjll_t)NULL)
+					FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+				Pjll = P_JLL(PjllRaw);
+
+//				Copy Indexes to new Leaf
+				j__udyCopyWto4((uint8_t *) Pjll, StageA + Start,
+					       Pop1);
+#ifdef JUDYL
+//				Copy to Values to new Leaf
+				Pjvnew = JL_LEAF4VALUEAREA(Pjll, Pop1);
+				JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+#endif
+				DBGCODE(JudyCheckSorted(Pjll, Pop1, 4);)
+
+                                DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(5)) 
+                                                |
+                                        (CIndex & cJU_DCDMASK(5-1)) 
+                                                |
+                                        (Pop1 - 1);
+
+                                JU_JPSETADT(PjpJP, (Word_t)PjllRaw, DcdP0,
+                                        cJU_JPLEAF4);
+			}
+			ExpCnt++;
+//                      Done?
+			if (End == cJU_LEAF5_MAXPOP1) break;
+
+//			New Expanse, Start and Count
+			CIndex = StageA[End];
+			Start  = End;
+		}
+	}
+
+//      Now put all the Leaves below a BranchL or BranchB:
+	if (ExpCnt <= cJU_BRANCHLMAXJPS) // put the Leaves below a BranchL
+	{
+	    if (j__udyCreateBranchL(Pjp, StageJP, StageExp, ExpCnt,
+			Pjpm) == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+	    Pjp->jp_Type = cJU_JPBRANCH_L5;
+	}
+	else
+	{
+	    if (j__udyStageJBBtoJBB(Pjp, &StageJBB, StageJP, SubJPCount, Pjpm)
+		== -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+	}
+	return(1);
+
+}  // j__udyCascade5()
+
+
+// ****************************************************************************
+// __ J U D Y   C A S C A D E 6
+//
+// Cascade from a cJU_JPLEAF6 to one of the following:
+//  1. if leaf is in 1 expanse:
+//        compress it into a JPLEAF5
+//  2. if leaf contains multiple expanses:
+//        create linear or bitmap branch containing
+//        each new expanse is either a:
+//               JPIMMED_5_01 ... JPIMMED_5_03  branch
+//               JPIMMED_5_01  branch
+//               JPLEAF5
+
+FUNCTION int j__udyCascade6(
+	Pjp_t	   Pjp,
+	Pvoid_t	   Pjpm)
+{
+	uint8_t  * PLeaf;	// pointer to leaf, explicit type.
+	Word_t	   End, Start;	// temporaries.
+	Word_t	   ExpCnt;	// count of expanses of splay.
+	Word_t     CIndex;	// current Index word.
+JUDYLCODE(Pjv_t	   Pjv;)	// value area of leaf.
+
+//	Temp staging for parts(Leaves) of newly splayed leaf
+	jp_t	   StageJP   [cJU_LEAF6_MAXPOP1];  // JPs of new leaves
+	Word_t	   StageA    [cJU_LEAF6_MAXPOP1];
+	uint8_t	   StageExp  [cJU_LEAF6_MAXPOP1];  // Expanses of new leaves
+	uint8_t	   SubJPCount[cJU_NUMSUBEXPB];     // JPs in each subexpanse
+	jbb_t      StageJBB;                       // staged bitmap branch
+
+	assert(JU_JPTYPE(Pjp) == cJU_JPLEAF6);
+	assert((JU_JPDCDPOP0(Pjp) & 0xFFFFFFFFFFFF) == (cJU_LEAF6_MAXPOP1-1));
+
+//	Get the address of the Leaf
+	PLeaf = (uint8_t *) P_JLL(Pjp->jp_Addr);
+
+//	Extract 6 byte index Leaf to Word_t
+	j__udyCopy6toW(StageA, PLeaf, cJU_LEAF6_MAXPOP1);
+
+//	Get the address of the Leaf and Value area
+	JUDYLCODE(Pjv = JL_LEAF6VALUEAREA(PLeaf, cJU_LEAF6_MAXPOP1);)
+
+//  If Leaf is in 1 expanse -- just compress it (compare 1st, last & Index)
+
+	CIndex = StageA[0];
+	if (!JU_DIGITATSTATE(CIndex ^ StageA[cJU_LEAF6_MAXPOP1-1], 6))
+	{
+                Word_t DcdP0;
+		Pjll_t PjllRaw;	 // pointer to new leaf.
+		Pjll_t Pjll;
+      JUDYLCODE(Pjv_t  Pjvnew;)	 // value area of new leaf.
+
+//		Alloc a 5 byte Index Leaf
+		PjllRaw = j__udyAllocJLL5(cJU_LEAF6_MAXPOP1, Pjpm);
+		if (PjllRaw == (Pjlb_t)NULL) return(-1);  // out of memory
+
+		Pjll = P_JLL(PjllRaw);
+
+//		Copy Index area into new Leaf
+		j__udyCopyWto5((uint8_t *) Pjll, StageA, cJU_LEAF6_MAXPOP1);
+#ifdef JUDYL
+//		Copy Value area into new Leaf
+		Pjvnew = JL_LEAF5VALUEAREA(Pjll, cJU_LEAF6_MAXPOP1);
+		JU_COPYMEM(Pjvnew, Pjv, cJU_LEAF6_MAXPOP1);
+#endif
+		DBGCODE(JudyCheckSorted(Pjll, cJU_LEAF6_MAXPOP1, 5);)
+
+	        DcdP0 = JU_JPDCDPOP0(Pjp) | (CIndex & cJU_DCDMASK(5));
+                JU_JPSETADT(Pjp, (Word_t)PjllRaw, DcdP0, cJU_JPLEAF5);
+
+		return(1);
+	}
+
+//  Else in 2+ expanses, splay Leaf into smaller leaves at higher compression
+
+	StageJBB = StageJBBZero;       // zero staged bitmap branch
+	ZEROJP(SubJPCount);
+
+//	Splay the 6 byte index Leaf to 5 byte Index Leaves
+	for (ExpCnt = Start = 0, End = 1; ; End++)
+	{
+//		Check if new expanse or last one
+		if (	(End == cJU_LEAF6_MAXPOP1)
+				||
+			(JU_DIGITATSTATE(CIndex ^ StageA[End], 6))
+		   )
+		{
+//			Build a leaf below the previous expanse
+
+			Pjp_t  PjpJP	= StageJP + ExpCnt;
+			Word_t Pop1	= End - Start;
+			Word_t expanse = JU_DIGITATSTATE(CIndex, 6);
+			Word_t subexp  = expanse / cJU_BITSPERSUBEXPB;
+//
+//                      set the bit that is the current expanse
+			JU_JBB_BITMAP(&StageJBB, subexp) |= JU_BITPOSMASKB(expanse);
+#ifdef SUBEXPCOUNTS
+			StageJBB.jbb_subPop1[subexp] += Pop1; // pop of subexpanse
+#endif
+//                      count number of expanses in each subexpanse
+			SubJPCount[subexp]++;
+
+//			Save byte expanse of leaf
+			StageExp[ExpCnt] = JU_DIGITATSTATE(CIndex, 6);
+
+			if (Pop1 == 1)	// cJU_JPIMMED_5_01
+			{
+	                    Word_t DcdP0;
+	                    DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(5)) |
+                                CIndex;
+#ifdef JUDY1
+                            JU_JPSETADT(PjpJP, 0, DcdP0, cJ1_JPIMMED_5_01);
+#else   // JUDYL
+                            JU_JPSETADT(PjpJP, Pjv[Start], DcdP0,
+                                cJL_JPIMMED_5_01);
+#endif  // JUDYL
+			}
+#ifdef JUDY1
+			else if (Pop1 <= cJ1_IMMED5_MAXPOP1)
+			{
+//		cJ1_JPIMMED_5_02..3: Judy1 64
+
+//                              Copy to Index to JP as an immediate Leaf
+				j__udyCopyWto5(PjpJP->jp_1Index,
+					       StageA + Start, Pop1);
+
+//                              Set pointer, type, population and Index size
+				PjpJP->jp_Type = cJ1_JPIMMED_5_02 + Pop1 - 2;
+			}
+#endif
+			else
+			{
+//		cJU_JPLEAF5
+                                Word_t  DcdP0;
+				Pjll_t PjllRaw;	 // pointer to new leaf.
+				Pjll_t Pjll;
+		      JUDYLCODE(Pjv_t  Pjvnew;)	 // value area of new leaf.
+
+//				Get a new Leaf
+				PjllRaw = j__udyAllocJLL5(Pop1, Pjpm);
+				if (PjllRaw == (Pjll_t)NULL)
+					FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+				Pjll = P_JLL(PjllRaw);
+
+//				Copy Indexes to new Leaf
+				j__udyCopyWto5((uint8_t *) Pjll, StageA + Start,
+					       Pop1);
+
+//				Copy to Values to new Leaf
+#ifdef JUDYL
+				Pjvnew = JL_LEAF5VALUEAREA(Pjll, Pop1);
+				JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+#endif
+				DBGCODE(JudyCheckSorted(Pjll, Pop1, 5);)
+
+                                DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(6)) 
+                                                |
+                                        (CIndex & cJU_DCDMASK(6-1)) 
+                                                |
+                                        (Pop1 - 1);
+
+                                JU_JPSETADT(PjpJP, (Word_t)PjllRaw, DcdP0,
+                                        cJU_JPLEAF5);
+			}
+			ExpCnt++;
+//                      Done?
+			if (End == cJU_LEAF6_MAXPOP1) break;
+
+//			New Expanse, Start and Count
+			CIndex = StageA[End];
+			Start  = End;
+		}
+	}
+
+//      Now put all the Leaves below a BranchL or BranchB:
+	if (ExpCnt <= cJU_BRANCHLMAXJPS) // put the Leaves below a BranchL
+	{
+	    if (j__udyCreateBranchL(Pjp, StageJP, StageExp, ExpCnt,
+			Pjpm) == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+	    Pjp->jp_Type = cJU_JPBRANCH_L6;
+	}
+	else
+	{
+	    if (j__udyStageJBBtoJBB(Pjp, &StageJBB, StageJP, SubJPCount, Pjpm)
+		== -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+	}
+	return(1);
+
+}  // j__udyCascade6()
+
+
+// ****************************************************************************
+// __ J U D Y   C A S C A D E 7
+//
+// Cascade from a cJU_JPLEAF7 to one of the following:
+//  1. if leaf is in 1 expanse:
+//        compress it into a JPLEAF6
+//  2. if leaf contains multiple expanses:
+//        create linear or bitmap branch containing
+//        each new expanse is either a:
+//               JPIMMED_6_01 ... JPIMMED_6_02  branch
+//               JPIMMED_6_01  branch
+//               JPLEAF6
+
+FUNCTION int j__udyCascade7(
+	Pjp_t	   Pjp,
+	Pvoid_t	   Pjpm)
+{
+	uint8_t  * PLeaf;	// pointer to leaf, explicit type.
+	Word_t	   End, Start;	// temporaries.
+	Word_t	   ExpCnt;	// count of expanses of splay.
+	Word_t     CIndex;	// current Index word.
+JUDYLCODE(Pjv_t	   Pjv;)	// value area of leaf.
+
+//	Temp staging for parts(Leaves) of newly splayed leaf
+	jp_t	   StageJP   [cJU_LEAF7_MAXPOP1];  // JPs of new leaves
+	Word_t	   StageA    [cJU_LEAF7_MAXPOP1];
+	uint8_t	   StageExp  [cJU_LEAF7_MAXPOP1];  // Expanses of new leaves
+	uint8_t	   SubJPCount[cJU_NUMSUBEXPB];     // JPs in each subexpanse
+	jbb_t      StageJBB;                       // staged bitmap branch
+
+	assert(JU_JPTYPE(Pjp) == cJU_JPLEAF7);
+	assert(JU_JPDCDPOP0(Pjp) == (cJU_LEAF7_MAXPOP1-1));
+
+//	Get the address of the Leaf
+	PLeaf = (uint8_t *) P_JLL(Pjp->jp_Addr);
+
+//	Extract 7 byte index Leaf to Word_t
+	j__udyCopy7toW(StageA, PLeaf, cJU_LEAF7_MAXPOP1);
+
+//	Get the address of the Leaf and Value area
+	JUDYLCODE(Pjv = JL_LEAF7VALUEAREA(PLeaf, cJU_LEAF7_MAXPOP1);)
+
+//  If Leaf is in 1 expanse -- just compress it (compare 1st, last & Index)
+
+	CIndex = StageA[0];
+	if (!JU_DIGITATSTATE(CIndex ^ StageA[cJU_LEAF7_MAXPOP1-1], 7))
+	{
+                Word_t DcdP0;
+		Pjll_t PjllRaw;	 // pointer to new leaf.
+		Pjll_t Pjll;
+      JUDYLCODE(Pjv_t  Pjvnew;)	 // value area of new leaf.
+
+//		Alloc a 6 byte Index Leaf
+		PjllRaw = j__udyAllocJLL6(cJU_LEAF7_MAXPOP1, Pjpm);
+		if (PjllRaw == (Pjlb_t)NULL) return(-1);  // out of memory
+
+		Pjll = P_JLL(PjllRaw);
+
+//		Copy Index area into new Leaf
+		j__udyCopyWto6((uint8_t *) Pjll, StageA, cJU_LEAF7_MAXPOP1);
+#ifdef JUDYL
+//		Copy Value area into new Leaf
+		Pjvnew = JL_LEAF6VALUEAREA(Pjll, cJU_LEAF7_MAXPOP1);
+		JU_COPYMEM(Pjvnew, Pjv, cJU_LEAF7_MAXPOP1);
+#endif
+		DBGCODE(JudyCheckSorted(Pjll, cJU_LEAF7_MAXPOP1, 6);)
+
+	        DcdP0 = JU_JPDCDPOP0(Pjp) | (CIndex & cJU_DCDMASK(6));
+                JU_JPSETADT(Pjp, (Word_t)PjllRaw, DcdP0, cJU_JPLEAF6);
+
+		return(1);
+	}
+
+//  Else in 2+ expanses, splay Leaf into smaller leaves at higher compression
+
+	StageJBB = StageJBBZero;       // zero staged bitmap branch
+	ZEROJP(SubJPCount);
+
+//	Splay the 7 byte index Leaf to 6 byte Index Leaves
+	for (ExpCnt = Start = 0, End = 1; ; End++)
+	{
+//		Check if new expanse or last one
+		if (	(End == cJU_LEAF7_MAXPOP1)
+				||
+			(JU_DIGITATSTATE(CIndex ^ StageA[End], 7))
+		   )
+		{
+//			Build a leaf below the previous expanse
+
+			Pjp_t  PjpJP	= StageJP + ExpCnt;
+			Word_t Pop1	= End - Start;
+			Word_t expanse = JU_DIGITATSTATE(CIndex, 7);
+			Word_t subexp  = expanse / cJU_BITSPERSUBEXPB;
+//
+//                      set the bit that is the current expanse
+			JU_JBB_BITMAP(&StageJBB, subexp) |= JU_BITPOSMASKB(expanse);
+#ifdef SUBEXPCOUNTS
+			StageJBB.jbb_subPop1[subexp] += Pop1; // pop of subexpanse
+#endif
+//                      count number of expanses in each subexpanse
+			SubJPCount[subexp]++;
+
+//			Save byte expanse of leaf
+			StageExp[ExpCnt] = JU_DIGITATSTATE(CIndex, 7);
+
+			if (Pop1 == 1)	// cJU_JPIMMED_6_01
+			{
+	                    Word_t DcdP0;
+	                    DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(6)) |
+                                CIndex;
+#ifdef JUDY1
+                            JU_JPSETADT(PjpJP, 0, DcdP0, cJ1_JPIMMED_6_01);
+#else   // JUDYL
+                            JU_JPSETADT(PjpJP, Pjv[Start], DcdP0,
+                                cJL_JPIMMED_6_01);
+#endif  // JUDYL
+			}
+#ifdef JUDY1
+			else if (Pop1 == cJ1_IMMED6_MAXPOP1)
+			{
+//		cJ1_JPIMMED_6_02:    Judy1 64
+
+//                              Copy to Index to JP as an immediate Leaf
+				j__udyCopyWto6(PjpJP->jp_1Index,
+					       StageA + Start, 2);
+
+//                              Set pointer, type, population and Index size
+				PjpJP->jp_Type = cJ1_JPIMMED_6_02;
+			}
+#endif
+			else
+			{
+//		cJU_JPLEAF6
+                                Word_t  DcdP0;
+				Pjll_t PjllRaw;	 // pointer to new leaf.
+				Pjll_t Pjll;
+		      JUDYLCODE(Pjv_t  Pjvnew;)	 // value area of new leaf.
+
+//				Get a new Leaf
+				PjllRaw = j__udyAllocJLL6(Pop1, Pjpm);
+				if (PjllRaw == (Pjll_t)NULL)
+					FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+				Pjll = P_JLL(PjllRaw);
+
+//				Copy Indexes to new Leaf
+				j__udyCopyWto6((uint8_t *) Pjll, StageA + Start,
+					       Pop1);
+#ifdef JUDYL
+//				Copy to Values to new Leaf
+				Pjvnew = JL_LEAF6VALUEAREA(Pjll, Pop1);
+				JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+#endif
+				DBGCODE(JudyCheckSorted(Pjll, Pop1, 6);)
+
+                                DcdP0 = (JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(7)) 
+                                                |
+                                        (CIndex & cJU_DCDMASK(7-1)) 
+                                                |
+                                        (Pop1 - 1);
+
+                                JU_JPSETADT(PjpJP, (Word_t)PjllRaw, DcdP0,
+                                        cJU_JPLEAF6);
+			}
+			ExpCnt++;
+//                      Done?
+			if (End == cJU_LEAF7_MAXPOP1) break;
+
+//			New Expanse, Start and Count
+			CIndex = StageA[End];
+			Start  = End;
+		}
+	}
+
+//      Now put all the Leaves below a BranchL or BranchB:
+	if (ExpCnt <= cJU_BRANCHLMAXJPS) // put the Leaves below a BranchL
+	{
+	    if (j__udyCreateBranchL(Pjp, StageJP, StageExp, ExpCnt,
+			Pjpm) == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+	    Pjp->jp_Type = cJU_JPBRANCH_L7;
+	}
+	else
+	{
+	    if (j__udyStageJBBtoJBB(Pjp, &StageJBB, StageJP, SubJPCount, Pjpm)
+		== -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+	}
+	return(1);
+
+}  // j__udyCascade7()
+
+#endif // JU_64BIT
+
+
+// ****************************************************************************
+// __ J U D Y   C A S C A D E   L
+//
+// (Compressed) cJU_LEAF3[7], cJ1_JPBRANCH_L.
+//
+// Cascade from a LEAFW (under Pjp) to one of the following:
+//  1. if LEAFW is in 1 expanse:
+//        create linear branch with a JPLEAF3[7] under it
+//  2. LEAFW contains multiple expanses:
+//        create linear or bitmap branch containing new expanses
+//        each new expanse is either a: 32   64
+//               JPIMMED_3_01  branch    Y    N
+//               JPIMMED_7_01  branch    N    Y
+//               JPLEAF3                 Y    N
+//               JPLEAF7                 N    Y
+
+FUNCTION int j__udyCascadeL(
+	Pjp_t	   Pjp,
+	Pvoid_t	   Pjpm)
+{
+	Pjlw_t	   Pjlw;	// leaf to work on.
+	Word_t	   End, Start;	// temporaries.
+	Word_t	   ExpCnt;	// count of expanses of splay.
+	Word_t	   CIndex;	// current Index word.
+JUDYLCODE(Pjv_t	   Pjv;)	// value area of leaf.
+
+//	Temp staging for parts(Leaves) of newly splayed leaf
+	jp_t	StageJP [cJU_LEAFW_MAXPOP1];
+	uint8_t	StageExp[cJU_LEAFW_MAXPOP1];
+	uint8_t	   SubJPCount[cJU_NUMSUBEXPB];     // JPs in each subexpanse
+	jbb_t      StageJBB;                       // staged bitmap branch
+
+//	Get the address of the Leaf
+	Pjlw = P_JLW(Pjp->jp_Addr);
+
+	assert(Pjlw[0] == (cJU_LEAFW_MAXPOP1 - 1));
+
+//	Get pointer to Value area of old Leaf
+	JUDYLCODE(Pjv = JL_LEAFWVALUEAREA(Pjlw, cJU_LEAFW_MAXPOP1);)
+
+	Pjlw++;		// Now point to Index area
+
+// If Leaf is in 1 expanse -- first compress it (compare 1st, last & Index):
+
+	CIndex = Pjlw[0];	// also used far below
+	if (!JU_DIGITATSTATE(CIndex ^ Pjlw[cJU_LEAFW_MAXPOP1 - 1],
+			     cJU_ROOTSTATE))
+	{
+		Pjll_t PjllRaw;		// pointer to new leaf.
+		Pjll_t Pjll;
+      JUDYLCODE(Pjv_t  Pjvnew;)		// value area of new leaf.
+
+//		Get the common expanse to all elements in Leaf
+		StageExp[0] = JU_DIGITATSTATE(CIndex, cJU_ROOTSTATE);
+
+//		Alloc a 3[7] byte Index Leaf
+#ifdef JU_64BIT
+		PjllRaw	= j__udyAllocJLL7(cJU_LEAFW_MAXPOP1, Pjpm);
+		if (PjllRaw == (Pjlb_t)NULL) return(-1);  // out of memory
+
+		Pjll = P_JLL(PjllRaw);
+
+//		Copy LEAFW to a cJU_JPLEAF7
+		j__udyCopyWto7((uint8_t *) Pjll, Pjlw, cJU_LEAFW_MAXPOP1);
+#ifdef JUDYL
+//		Get the Value area of new Leaf
+		Pjvnew = JL_LEAF7VALUEAREA(Pjll, cJU_LEAFW_MAXPOP1);
+		JU_COPYMEM(Pjvnew, Pjv, cJU_LEAFW_MAXPOP1);
+#endif
+		DBGCODE(JudyCheckSorted(Pjll, cJU_LEAFW_MAXPOP1, 7);)
+#else // 32 Bit
+		PjllRaw	= j__udyAllocJLL3(cJU_LEAFW_MAXPOP1, Pjpm);
+		if (PjllRaw == (Pjll_t) NULL) return(-1);
+
+		Pjll = P_JLL(PjllRaw);
+
+//		Copy LEAFW to a cJU_JPLEAF3
+		j__udyCopyWto3((uint8_t *) Pjll, Pjlw, cJU_LEAFW_MAXPOP1);
+#ifdef JUDYL
+//		Get the Value area of new Leaf
+		Pjvnew = JL_LEAF3VALUEAREA(Pjll, cJU_LEAFW_MAXPOP1);
+		JU_COPYMEM(Pjvnew, Pjv, cJU_LEAFW_MAXPOP1);
+#endif
+		DBGCODE(JudyCheckSorted(Pjll, cJU_LEAFW_MAXPOP1, 3);)
+#endif  // 32 Bit
+
+//		Following not needed because cJU_DCDMASK(3[7]) is == 0
+//////		StageJP[0].jp_DcdPopO	|= (CIndex & cJU_DCDMASK(3[7]));
+#ifdef JU_64BIT
+                JU_JPSETADT(&(StageJP[0]), (Word_t)PjllRaw, cJU_LEAFW_MAXPOP1-1,
+                                cJU_JPLEAF7);
+#else   // 32BIT
+                JU_JPSETADT(&(StageJP[0]), (Word_t)PjllRaw, cJU_LEAFW_MAXPOP1-1,
+                                cJU_JPLEAF3);
+#endif  // 32BIT
+//		Create a 1 element Linear branch
+		if (j__udyCreateBranchL(Pjp, StageJP, StageExp, 1, Pjpm) == -1)
+		    return(-1);
+
+//		Change the type of callers JP
+		Pjp->jp_Type = cJU_JPBRANCH_L;
+
+		return(1);
+	}
+
+//  Else in 2+ expanses, splay Leaf into smaller leaves at higher compression
+
+	StageJBB = StageJBBZero;       // zero staged bitmap branch
+	ZEROJP(SubJPCount);
+
+//	Splay the 4[8] byte Index Leaf to 3[7] byte Index Leaves
+	for (ExpCnt = Start = 0, End = 1; ; End++)
+	{
+//		Check if new expanse or last one
+		if (	(End == cJU_LEAFW_MAXPOP1)
+				||
+			(JU_DIGITATSTATE(CIndex ^ Pjlw[End], cJU_ROOTSTATE))
+		   )
+		{
+//			Build a leaf below the previous expanse
+
+			Pjp_t  PjpJP	= StageJP + ExpCnt;
+			Word_t Pop1	= End - Start;
+			Word_t expanse = JU_DIGITATSTATE(CIndex, cJU_ROOTSTATE);
+			Word_t subexp  = expanse / cJU_BITSPERSUBEXPB;
+//
+//                      set the bit that is the current expanse
+			JU_JBB_BITMAP(&StageJBB, subexp) |= JU_BITPOSMASKB(expanse);
+#ifdef SUBEXPCOUNTS
+			StageJBB.jbb_subPop1[subexp] += Pop1; // pop of subexpanse
+#endif
+//                      count number of expanses in each subexpanse
+			SubJPCount[subexp]++;
+
+//			Save byte expanse of leaf
+			StageExp[ExpCnt] = JU_DIGITATSTATE(CIndex,
+							   cJU_ROOTSTATE);
+
+			if (Pop1 == 1)	// cJU_JPIMMED_3[7]_01
+			{
+#ifdef  JU_64BIT
+#ifdef JUDY1
+                            JU_JPSETADT(PjpJP, 0, CIndex, cJ1_JPIMMED_7_01);
+#else   // JUDYL
+                            JU_JPSETADT(PjpJP, Pjv[Start], CIndex,
+                                cJL_JPIMMED_7_01);
+#endif  // JUDYL
+
+#else   // JU_32BIT
+#ifdef JUDY1
+                            JU_JPSETADT(PjpJP, 0, CIndex, cJ1_JPIMMED_3_01);
+#else   // JUDYL
+                            JU_JPSETADT(PjpJP, Pjv[Start], CIndex,
+                                cJL_JPIMMED_3_01);
+#endif  // JUDYL
+#endif  // JU_32BIT
+			}
+#ifdef JUDY1
+#ifdef  JU_64BIT
+			else if (Pop1 <= cJ1_IMMED7_MAXPOP1)
+#else
+			else if (Pop1 <= cJ1_IMMED3_MAXPOP1)
+#endif
+			{
+//		cJ1_JPIMMED_3_02   :  Judy1 32
+//		cJ1_JPIMMED_7_02   :  Judy1 64
+//                              Copy to JP as an immediate Leaf
+#ifdef  JU_64BIT
+				j__udyCopyWto7(PjpJP->jp_1Index, Pjlw+Start, 2);
+				PjpJP->jp_Type = cJ1_JPIMMED_7_02;
+#else
+				j__udyCopyWto3(PjpJP->jp_1Index, Pjlw+Start, 2);
+				PjpJP->jp_Type = cJ1_JPIMMED_3_02;
+#endif // 32 Bit
+			}
+#endif // JUDY1
+			else // Linear Leaf JPLEAF3[7]
+			{
+//		cJU_JPLEAF3[7]
+				Pjll_t PjllRaw;	 // pointer to new leaf.
+				Pjll_t Pjll;
+		      JUDYLCODE(Pjv_t  Pjvnew;)	 // value area of new leaf.
+#ifdef JU_64BIT
+				PjllRaw = j__udyAllocJLL7(Pop1, Pjpm);
+				if (PjllRaw == (Pjll_t) NULL) return(-1);
+				Pjll = P_JLL(PjllRaw);
+
+				j__udyCopyWto7((uint8_t *) Pjll, Pjlw + Start,
+					       Pop1);
+#ifdef JUDYL
+				Pjvnew = JL_LEAF7VALUEAREA(Pjll, Pop1);
+				JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+#endif // JUDYL
+				DBGCODE(JudyCheckSorted(Pjll, Pop1, 7);)
+#else // JU_64BIT - 32 Bit
+				PjllRaw = j__udyAllocJLL3(Pop1, Pjpm);
+				if (PjllRaw == (Pjll_t) NULL) return(-1);
+				Pjll = P_JLL(PjllRaw);
+
+				j__udyCopyWto3((uint8_t *) Pjll, Pjlw + Start,
+					       Pop1);
+#ifdef JUDYL
+				Pjvnew = JL_LEAF3VALUEAREA(Pjll, Pop1);
+				JU_COPYMEM(Pjvnew, Pjv + Start, Pop1);
+#endif // JUDYL
+				DBGCODE(JudyCheckSorted(Pjll, Pop1, 3);)
+#endif // 32 Bit
+
+#ifdef JU_64BIT
+                                JU_JPSETADT(PjpJP, (Word_t)PjllRaw, Pop1 - 1,
+                                        cJU_JPLEAF7);
+#else // JU_64BIT - 32 Bit
+                                JU_JPSETADT(PjpJP, (Word_t)PjllRaw, Pop1 - 1,
+                                        cJU_JPLEAF3);
+#endif // 32 Bit
+			}
+			ExpCnt++;
+//                      Done?
+			if (End == cJU_LEAFW_MAXPOP1) break;
+
+//			New Expanse, Start and Count
+			CIndex = Pjlw[End];
+			Start  = End;
+		}
+	}
+
+// Now put all the Leaves below a BranchL or BranchB:
+	if (ExpCnt <= cJU_BRANCHLMAXJPS) // put the Leaves below a BranchL
+	{
+	    if (j__udyCreateBranchL(Pjp, StageJP, StageExp, ExpCnt,
+			Pjpm) == -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+	    Pjp->jp_Type = cJU_JPBRANCH_L;
+	}
+	else
+	{
+	    if (j__udyStageJBBtoJBB(Pjp, &StageJBB, StageJP, SubJPCount, Pjpm)
+		== -1) FREEALLEXIT(ExpCnt, StageJP, Pjpm);
+
+	    Pjp->jp_Type = cJU_JPBRANCH_B;  // cJU_LEAFW is out of sequence
+	}
+	return(1);
+
+} // j__udyCascadeL()
diff --git a/libs/klib/judy/JudyCount.c b/libs/klib/judy/JudyCount.c
new file mode 100644
index 0000000..a8a6eb1
--- /dev/null
+++ b/libs/klib/judy/JudyCount.c
@@ -0,0 +1,1193 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// Judy*Count() function for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+//
+// Compile with -DNOSMARTJBB, -DNOSMARTJBU, and/or -DNOSMARTJLB to build a
+// version with cache line optimizations deleted, for testing.
+//
+// Compile with -DSMARTMETRICS to obtain global variables containing smart
+// cache line metrics.  Note:  Dont turn this on simultaneously for this file
+// and JudyByCount.c because they export the same globals.
+//
+// Judy*Count() returns the "count of Indexes" (inclusive) between the two
+// specified limits (Indexes).  This code is remarkably fast.  It traverses the
+// "Judy array" data structure.
+//
+// This count code is the GENERIC untuned version (minimum code size).  It
+// might be possible to tuned to a specific architecture to be faster.
+// However, in real applications, with a modern machine, it is expected that
+// the instruction times will be swamped by cache line fills.
+// ****************************************************************************
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error:  One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+
+// define a phoney that is for sure
+
+#define cJU_LEAFW       cJU_JPIMMED_CAP
+
+// Avoid duplicate symbols since this file is multi-compiled:
+
+#ifdef SMARTMETRICS
+#ifdef JUDY1
+Word_t jbb_upward   = 0;	// counts of directions taken:
+Word_t jbb_downward = 0;
+Word_t jbu_upward   = 0;
+Word_t jbu_downward = 0;
+Word_t jlb_upward   = 0;
+Word_t jlb_downward = 0;
+#else
+extern Word_t jbb_upward;
+extern Word_t jbb_downward;
+extern Word_t jbu_upward;
+extern Word_t jbu_downward;
+extern Word_t jlb_upward;
+extern Word_t jlb_downward;
+#endif
+#endif
+
+
+// FORWARD DECLARATIONS (prototypes):
+
+static	Word_t j__udy1LCountSM(const Pjp_t Pjp, const Word_t Index,
+			       const Pjpm_t Pjpm);
+
+// Each of Judy1 and JudyL get their own private (static) version of this
+// function:
+
+static	int j__udyCountLeafB1(const Pjll_t Pjll, const Word_t Pop1,
+			      const Word_t Index);
+
+// These functions are not static because they are exported to Judy*ByCount():
+//
+// TBD:  Should be made static for performance reasons?  And thus duplicated?
+//
+// Note:  There really are two different functions, but for convenience they
+// are referred to here with a generic name.
+
+#ifdef JUDY1
+#define	j__udyJPPop1 j__udy1JPPop1
+#else
+#define	j__udyJPPop1 j__udyLJPPop1
+#endif
+
+Word_t j__udyJPPop1(const Pjp_t Pjp);
+
+
+// LOCAL ERROR HANDLING:
+//
+// The Judy*Count() functions are unusual because they return 0 instead of JERR
+// for an error.  In this source file, define C_JERR for clarity.
+
+#define	C_JERR 0
+
+
+// ****************************************************************************
+// J U D Y   1   C O U N T
+// J U D Y   L   C O U N T
+//
+// See the manual entry for details.
+//
+// This code is written recursively, at least at first, because thats much
+// simpler; hope its fast enough.
+
+#ifdef JUDY1
+FUNCTION Word_t Judy1Count
+#else
+FUNCTION Word_t JudyLCount
+#endif
+        (
+	Pcvoid_t  PArray,	// JRP to first branch/leaf in SM.
+	Word_t	  Index1,	// starting Index.
+	Word_t	  Index2,	// ending Index.
+	PJError_t PJError	// optional, for returning error info.
+        )
+{
+	jpm_t	  fakejpm;	// local temporary for small arrays.
+	Pjpm_t	  Pjpm;		// top JPM or local temporary for error info.
+	jp_t	  fakejp;	// constructed for calling j__udy1LCountSM().
+	Pjp_t	  Pjp;		// JP to pass to j__udy1LCountSM().
+	Word_t	  pop1;		// total for the array.
+	Word_t	  pop1above1;	// indexes at or above Index1, inclusive.
+	Word_t	  pop1above2;	// indexes at or above Index2, exclusive.
+	int	  retcode;	// from Judy*First() calls.
+JUDYLCODE(PPvoid_t PPvalue);	// from JudyLFirst() calls.
+
+
+// CHECK FOR SHORTCUTS:
+//
+// As documented, return C_JERR if the Judy array is empty or Index1 > Index2.
+
+	if ((PArray == (Pvoid_t) NULL) || (Index1 > Index2))
+	{
+	    JU_SET_ERRNO(PJError, JU_ERRNO_NONE);
+	    return(C_JERR);
+	}
+
+// If Index1 == Index2, simply check if the specified Index is set; pass
+// through the return value from Judy1Test() or JudyLGet() with appropriate
+// translations.
+
+	if (Index1 == Index2)
+	{
+#ifdef JUDY1
+	    retcode = Judy1Test(PArray, Index1, PJError);
+
+	    if (retcode == JERRI) return(C_JERR);	// pass through error.
+
+	    if (retcode == 0)
+	    {
+		JU_SET_ERRNO(PJError, JU_ERRNO_NONE);
+		return(C_JERR);
+	    }
+#else
+	    PPvalue = JudyLGet(PArray, Index1, PJError);
+
+	    if (PPvalue == PPJERR) return(C_JERR);	// pass through error.
+
+	    if (PPvalue == (PPvoid_t) NULL)		// Index is not set.
+	    {
+		JU_SET_ERRNO(PJError, JU_ERRNO_NONE);
+		return(C_JERR);
+	    }
+#endif
+	    return(1);					// single index is set.
+	}
+
+
+// CHECK JRP TYPE:
+//
+// Use an if/then for speed rather than a switch, and put the most common cases
+// first.
+//
+// Note:  Since even cJU_LEAFW types require counting between two Indexes,
+// prepare them here for common code below that calls j__udy1LCountSM(), rather
+// than handling them even more specially here.
+
+	if (JU_LEAFW_POP0(PArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+	{
+	    Pjlw_t Pjlw	   = P_JLW(PArray);	// first word of leaf.
+	    Pjpm	   = & fakejpm;
+	    Pjp		   = & fakejp;
+	    Pjp->jp_Addr   = (Word_t) Pjlw;
+	    Pjp->jp_Type   = cJU_LEAFW;
+	    Pjpm->jpm_Pop0 = Pjlw[0];		// from first word of leaf.
+	    pop1	   = Pjpm->jpm_Pop0 + 1;
+	}
+	else
+	{
+	    Pjpm = P_JPM(PArray);
+	    Pjp	 = &(Pjpm->jpm_JP);
+	    pop1 = (Pjpm->jpm_Pop0) + 1;	// note: can roll over to 0.
+
+#if (defined(JUDY1) && (! defined(JU_64BIT)))
+	    if (pop1 == 0)		// rare special case of full array:
+	    {
+		Word_t count = Index2 - Index1 + 1;	// can roll over again.
+
+		if (count == 0)
+		{
+		    JU_SET_ERRNO(PJError, JU_ERRNO_FULL);
+		    return(C_JERR);
+		}
+		return(count);
+	    }
+#else
+	    assert(pop1);	// JudyL or 64-bit cannot create a full array!
+#endif
+	}
+
+
+// COUNT POP1 ABOVE INDEX1, INCLUSIVE:
+
+	assert(pop1);		// just to be safe.
+
+	if (Index1 == 0)	// shortcut, pop1above1 is entire population:
+	{
+	    pop1above1 = pop1;
+	}
+	else			// find first valid Index above Index1, if any:
+	{
+#ifdef JUDY1
+	    if ((retcode = Judy1First(PArray, & Index1, PJError)) == JERRI)
+		return(C_JERR);			// pass through error.
+#else
+	    if ((PPvalue = JudyLFirst(PArray, & Index1, PJError)) == PPJERR)
+		return(C_JERR);			// pass through error.
+
+	    retcode = (PPvalue != (PPvoid_t) NULL);	// found a next Index.
+#endif
+
+// If theres no Index at or above Index1, just return C_JERR (early exit):
+
+	    if (retcode == 0)
+	    {
+		JU_SET_ERRNO(PJError, JU_ERRNO_NONE);
+		return(C_JERR);
+	    }
+
+// If a first/next Index was found, call the counting motor starting with that
+// known valid Index, meaning the return should be positive, not C_JERR except
+// in case of a real error:
+
+	    if ((pop1above1 = j__udy1LCountSM(Pjp, Index1, Pjpm)) == C_JERR)
+	    {
+		JU_COPY_ERRNO(PJError, Pjpm);	// pass through error.
+		return(C_JERR);
+	    }
+	}
+
+
+// COUNT POP1 ABOVE INDEX2, EXCLUSIVE, AND RETURN THE DIFFERENCE:
+//
+// In principle, calculate the ordinal of each Index and take the difference,
+// with caution about off-by-one errors due to the specified Indexes being set
+// or unset.  In practice:
+//
+// - The ordinals computed here are inverse ordinals, that is, the populations
+//   ABOVE the specified Indexes (Index1 inclusive, Index2 exclusive), so
+//   subtract pop1above2 from pop1above1, rather than vice-versa.
+//
+// - Index1s result already includes a count for Index1 and/or Index2 if
+//   either is set, so calculate pop1above2 exclusive of Index2.
+//
+// TBD:  If Index1 and Index2 fall in the same expanse in the top-state
+// branch(es), would it be faster to walk the SM only once, to their divergence
+// point, before calling j__udy1LCountSM() or equivalent?  Possibly a non-issue
+// if a top-state pop1 becomes stored with each Judy1 array.  Also, consider
+// whether the first call of j__udy1LCountSM() fills the cache, for common tree
+// branches, for the second call.
+//
+// As for pop1above1, look for shortcuts for special cases when pop1above2 is
+// zero.  Otherwise call the counting "motor".
+
+	    assert(pop1above1);		// just to be safe.
+
+	    if (Index2++ == cJU_ALLONES) return(pop1above1); // Index2 at limit.
+
+#ifdef JUDY1
+	    if ((retcode = Judy1First(PArray, & Index2, PJError)) == JERRI)
+		return(C_JERR);
+#else
+	    if ((PPvalue = JudyLFirst(PArray, & Index2, PJError)) == PPJERR)
+		return(C_JERR);
+
+	    retcode = (PPvalue != (PPvoid_t) NULL);	// found a next Index.
+#endif
+	    if (retcode == 0) return(pop1above1);  // no Index above Index2.
+
+// Just as for Index1, j__udy1LCountSM() cannot return 0 (locally == C_JERR)
+// except in case of a real error:
+
+	    if ((pop1above2 = j__udy1LCountSM(Pjp, Index2, Pjpm)) == C_JERR)
+	    {
+		JU_COPY_ERRNO(PJError, Pjpm);		// pass through error.
+		return(C_JERR);
+	    }
+
+	    if (pop1above1 == pop1above2)
+	    {
+		JU_SET_ERRNO(PJError, JU_ERRNO_NONE);
+		return(C_JERR);
+	    }
+
+	    return(pop1above1 - pop1above2);
+
+} // Judy1Count() / JudyLCount()
+
+
+// ****************************************************************************
+// __ J U D Y 1 L   C O U N T   S M
+//
+// Given a pointer to a JP (with invalid jp_DcdPopO at cJU_ROOTSTATE), a known
+// valid Index, and a Pjpm for returning error info, recursively visit a Judy
+// array state machine (SM) and return the count of Indexes, including Index,
+// through the end of the Judy array at this state or below.  In case of error
+// or a count of 0 (should never happen), return C_JERR with appropriate
+// JU_ERRNO in the Pjpm.
+//
+// Note:  This function is not told the current state because its encoded in
+// the JP Type.
+//
+// Method:  To minimize cache line fills, while studying each branch, if Index
+// resides above the midpoint of the branch (which often consists of multiple
+// cache lines), ADD the populations at or above Index; otherwise, SUBTRACT
+// from the population of the WHOLE branch (available from the JP) the
+// populations at or above Index.  This is especially tricky for bitmap
+// branches.
+//
+// Note:  Unlike, say, the Ins and Del walk routines, this function returns the
+// same type of returns as Judy*Count(), so it can use *_SET_ERRNO*() macros
+// the same way.
+
+FUNCTION static Word_t j__udy1LCountSM(
+const	Pjp_t	Pjp,		// top of Judy (sub)SM.
+const	Word_t	Index,		// count at or above this Index.
+const	Pjpm_t	Pjpm)		// for returning error info.
+{
+	Pjbl_t	Pjbl;		// Pjp->jp_Addr masked and cast to types:
+	Pjbb_t	Pjbb;
+	Pjbu_t	Pjbu;
+	Pjll_t	Pjll;		// a Judy lower-level linear leaf.
+
+	Word_t	digit;		// next digit to decode from Index.
+	long	jpnum;		// JP number in a branch (base 0).
+	int	offset;		// index ordinal within a leaf, base 0.
+	Word_t	pop1;		// total population of an expanse.
+	Word_t	pop1above;	// to return.
+
+// Common code to check Decode bits in a JP against the equivalent portion of
+// Index; XOR together, then mask bits of interest; must be all 0:
+//
+// Note:  Why does this code only assert() compliance rather than actively
+// checking for outliers?  Its because Index is supposed to be valid, hence
+// always match any Dcd bits traversed.
+//
+// Note:  This assertion turns out to be always true for cState = 3 on 32-bit
+// and 7 on 64-bit, but its harmless, probably removed by the compiler.
+
+#define	CHECKDCD(Pjp,cState) \
+	assert(! JU_DCDNOTMATCHINDEX(Index, Pjp, cState))
+
+// Common code to prepare to handle a root-level or lower-level branch:
+// Extract a state-dependent digit from Index in a "constant" way, obtain the
+// total population for the branch in a state-dependent way, and then branch to
+// common code for multiple cases:
+//
+// For root-level branches, the state is always cJU_ROOTSTATE, and the
+// population is received in Pjpm->jpm_Pop0.
+//
+// Note:  The total population is only needed in cases where the common code
+// "counts up" instead of down to minimize cache line fills.  However, its
+// available cheaply, and its better to do it with a constant shift (constant
+// state value) instead of a variable shift later "when needed".
+
+#define	PREPB_ROOT(Pjp,Next)				\
+	digit = JU_DIGITATSTATE(Index, cJU_ROOTSTATE);	\
+	pop1  = (Pjpm->jpm_Pop0) + 1;			\
+	goto Next
+
+#define	PREPB(Pjp,cState,Next)				\
+	digit = JU_DIGITATSTATE(Index, cState);		\
+	pop1  = JU_JPBRANCH_POP0(Pjp, (cState)) + 1;    \
+	goto Next
+
+
+// SWITCH ON JP TYPE:
+//
+// WARNING:  For run-time efficiency the following cases replicate code with
+// varying constants, rather than using common code with variable values!
+
+	switch (JU_JPTYPE(Pjp))
+	{
+
+
+// ----------------------------------------------------------------------------
+// ROOT-STATE LEAF that starts with a Pop0 word; just count within the leaf:
+
+	case cJU_LEAFW:
+	{
+	    Pjlw_t Pjlw = P_JLW(Pjp->jp_Addr);		// first word of leaf.
+
+	    assert((Pjpm->jpm_Pop0) + 1 == Pjlw[0] + 1);  // sent correctly.
+	    offset = j__udySearchLeafW(Pjlw + 1, Pjpm->jpm_Pop0 + 1, Index);
+	    assert(offset >= 0);			// Index must exist.
+	    assert(offset < (Pjpm->jpm_Pop0) + 1);	// Index be in range.
+	    return((Pjpm->jpm_Pop0) + 1 - offset);	// INCLUSIVE of Index.
+	}
+
+// ----------------------------------------------------------------------------
+// LINEAR BRANCH; count populations in JPs in the JBL ABOVE the next digit in
+// Index, and recurse for the next digit in Index:
+//
+// Note:  There are no null JPs in a JBL; watch out for pop1 == 0.
+//
+// Note:  A JBL should always fit in one cache line => no need to count up
+// versus down to save cache line fills.  (PREPB() sets pop1 for no reason.)
+
+	case cJU_JPBRANCH_L2:  CHECKDCD(Pjp, 2); PREPB(Pjp, 2, BranchL);
+	case cJU_JPBRANCH_L3:  CHECKDCD(Pjp, 3); PREPB(Pjp, 3, BranchL);
+
+#ifdef JU_64BIT
+	case cJU_JPBRANCH_L4:  CHECKDCD(Pjp, 4); PREPB(Pjp, 4, BranchL);
+	case cJU_JPBRANCH_L5:  CHECKDCD(Pjp, 5); PREPB(Pjp, 5, BranchL);
+	case cJU_JPBRANCH_L6:  CHECKDCD(Pjp, 6); PREPB(Pjp, 6, BranchL);
+	case cJU_JPBRANCH_L7:  CHECKDCD(Pjp, 7); PREPB(Pjp, 7, BranchL);
+#endif
+	case cJU_JPBRANCH_L:   PREPB_ROOT(Pjp, BranchL);
+
+// Common code (state-independent) for all cases of linear branches:
+
+BranchL:
+
+	Pjbl      = P_JBL(Pjp->jp_Addr);
+	jpnum     = Pjbl->jbl_NumJPs;			// above last JP.
+	pop1above = 0;
+
+	while (digit < (Pjbl->jbl_Expanse[--jpnum]))	 // still ABOVE digit.
+	{
+	    if ((pop1 = j__udyJPPop1((Pjbl->jbl_jp) + jpnum)) == cJU_ALLONES)
+	    {
+		JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT);
+		return(C_JERR);
+	    }
+
+	    pop1above += pop1;
+	    assert(jpnum > 0);				// should find digit.
+	}
+
+	assert(digit == (Pjbl->jbl_Expanse[jpnum]));	// should find digit.
+
+	pop1 = j__udy1LCountSM((Pjbl->jbl_jp) + jpnum, Index, Pjpm);
+	if (pop1 == C_JERR) return(C_JERR);		// pass error up.
+
+	assert(pop1above + pop1);
+	return(pop1above + pop1);
+
+
+// ----------------------------------------------------------------------------
+// BITMAP BRANCH; count populations in JPs in the JBB ABOVE the next digit in
+// Index, and recurse for the next digit in Index:
+//
+// Note:  There are no null JPs in a JBB; watch out for pop1 == 0.
+
+	case cJU_JPBRANCH_B2:  CHECKDCD(Pjp, 2); PREPB(Pjp, 2, BranchB);
+	case cJU_JPBRANCH_B3:  CHECKDCD(Pjp, 3); PREPB(Pjp, 3, BranchB);
+#ifdef JU_64BIT
+	case cJU_JPBRANCH_B4:  CHECKDCD(Pjp, 4); PREPB(Pjp, 4, BranchB);
+	case cJU_JPBRANCH_B5:  CHECKDCD(Pjp, 5); PREPB(Pjp, 5, BranchB);
+	case cJU_JPBRANCH_B6:  CHECKDCD(Pjp, 6); PREPB(Pjp, 6, BranchB);
+	case cJU_JPBRANCH_B7:  CHECKDCD(Pjp, 7); PREPB(Pjp, 7, BranchB);
+#endif
+	case cJU_JPBRANCH_B:   PREPB_ROOT(Pjp, BranchB);
+
+// Common code (state-independent) for all cases of bitmap branches:
+
+BranchB:
+	{
+	    long   subexp;	// for stepping through layer 1 (subexpanses).
+	    long   findsub;	// subexpanse containing   Index (digit).
+	    Word_t findbit;	// bit	      representing Index (digit).
+	    Word_t lowermask;	// bits for indexes at or below Index.
+	    Word_t jpcount;	// JPs in a subexpanse.
+	    Word_t clbelow;	// cache lines below digits cache line.
+	    Word_t clabove;	// cache lines above digits cache line.
+
+	    Pjbb      = P_JBB(Pjp->jp_Addr);
+	    findsub   = digit / cJU_BITSPERSUBEXPB;
+	    findbit   = digit % cJU_BITSPERSUBEXPB;
+	    lowermask = JU_MASKLOWERINC(JU_BITPOSMASKB(findbit));
+	    clbelow   = clabove = 0;	// initial/default => always downward.
+
+	    assert(JU_BITMAPTESTB(Pjbb, digit)); // digit must have a JP.
+	    assert(findsub < cJU_NUMSUBEXPB);	 // falls in expected range.
+
+// Shorthand for one subexpanse in a bitmap and for one JP in a bitmap branch:
+//
+// Note: BMPJP0 exists separately to support assertions.
+
+#define	BMPJP0(Subexp)       (P_JP(JU_JBB_PJP(Pjbb, Subexp)))
+#define	BMPJP(Subexp,JPnum)  (BMPJP0(Subexp) + (JPnum))
+
+#ifndef NOSMARTJBB  // enable to turn off smart code for comparison purposes.
+
+// FIGURE OUT WHICH DIRECTION CAUSES FEWER CACHE LINE FILLS; adding the pop1s
+// in JPs above Indexs JP, or subtracting the pop1s in JPs below Indexs JP.
+//
+// This is tricky because, while each set bit in the bitmap represents a JP,
+// the JPs are scattered over cJU_NUMSUBEXPB subexpanses, each of which can
+// contain JPs packed into multiple cache lines, and this code must visit every
+// JP either BELOW or ABOVE the JP for Index.
+//
+// Number of cache lines required to hold a linear list of the given number of
+// JPs, assuming the first JP is at the start of a cache line or the JPs in
+// jpcount fit wholly within a single cache line, which is ensured by
+// JudyMalloc():
+
+#define	CLPERJPS(jpcount) \
+	((((jpcount) * cJU_WORDSPERJP) + cJU_WORDSPERCL - 1) / cJU_WORDSPERCL)
+
+// Count cache lines below/above for each subexpanse:
+
+	    for (subexp = 0; subexp < cJU_NUMSUBEXPB; ++subexp)
+	    {
+		jpcount = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, subexp));
+
+// When at the subexpanse containing Index (digit), add cache lines
+// below/above appropriately, excluding the cache line containing the JP for
+// Index itself:
+
+		if	(subexp <  findsub)  clbelow += CLPERJPS(jpcount);
+		else if (subexp >  findsub)  clabove += CLPERJPS(jpcount);
+		else // (subexp == findsub)
+		{
+		    Word_t clfind;	// cache line containing Index (digit).
+
+		    clfind = CLPERJPS(j__udyCountBitsB(
+				    JU_JBB_BITMAP(Pjbb, subexp) & lowermask));
+
+		    assert(clfind > 0);	 // digit itself should have 1 CL.
+		    clbelow += clfind - 1;
+		    clabove += CLPERJPS(jpcount) - clfind;
+		}
+	    }
+#endif // ! NOSMARTJBB
+
+// Note:  Its impossible to get through the following "if" without setting
+// jpnum -- see some of the assertions below -- but gcc -Wall doesnt know
+// this, so preset jpnum to make it happy:
+
+	    jpnum = 0;
+
+
+// COUNT POPULATION FOR A BITMAP BRANCH, in whichever direction should result
+// in fewer cache line fills:
+//
+// Note:  If the remainder of Index is zero, pop1above is the pop1 of the
+// entire expanse and theres no point in recursing to lower levels; but this
+// should be so rare that its not worth checking for;
+// Judy1Count()/JudyLCount() never even calls the motor for Index == 0 (all
+// bytes).
+
+
+// COUNT UPWARD, subtracting each "below or at" JPs pop1 from the whole
+// expanses pop1:
+//
+// Note:  If this causes clbelow + 1 cache line fills including JPs cache
+// line, thats OK; at worst this is the same as clabove.
+
+	    if (clbelow < clabove)
+	    {
+#ifdef SMARTMETRICS
+		++jbb_upward;
+#endif
+		pop1above = pop1;		// subtract JPs at/below Index.
+
+// Count JPs for which to accrue pop1s in this subexpanse:
+//
+// TBD:  If JU_JBB_BITMAP is cJU_FULLBITMAPB, dont bother counting.
+
+		for (subexp = 0; subexp <= findsub; ++subexp)
+		{
+		    jpcount = j__udyCountBitsB((subexp < findsub) ?
+				      JU_JBB_BITMAP(Pjbb, subexp) :
+				      JU_JBB_BITMAP(Pjbb, subexp) & lowermask);
+
+		    // should always find findbit:
+		    assert((subexp < findsub) || jpcount);
+
+// Subtract pop1s from JPs BELOW OR AT Index (digit):
+//
+// Note:  The pop1 for Indexs JP itself is partially added back later at a
+// lower state.
+//
+// Note:  An empty subexpanse (jpcount == 0) is handled "for free".
+//
+// Note:  Must be null JP subexp pointer in empty subexpanse and non-empty in
+// non-empty subexpanse:
+
+		    assert(   jpcount  || (BMPJP0(subexp) == (Pjp_t) NULL));
+		    assert((! jpcount) || (BMPJP0(subexp) != (Pjp_t) NULL));
+
+		    for (jpnum = 0; jpnum < jpcount; ++jpnum)
+		    {
+			if ((pop1 = j__udyJPPop1(BMPJP(subexp, jpnum)))
+			    == cJU_ALLONES)
+			{
+			    JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT);
+			    return(C_JERR);
+			}
+
+			pop1above -= pop1;
+		    }
+
+		    jpnum = jpcount - 1;	// make correct for digit.
+		}
+	    }
+
+// COUNT DOWNWARD, adding each "above" JPs pop1:
+
+	    else
+	    {
+		long jpcountbf;			// below findbit, inclusive.
+#ifdef SMARTMETRICS
+		++jbb_downward;
+#endif
+		pop1above = 0;			// add JPs above Index.
+		jpcountbf = 0;			// until subexp == findsub.
+
+// Count JPs for which to accrue pop1s in this subexpanse:
+//
+// This is more complicated than counting upward because the scan of digits
+// subexpanse must count ALL JPs, to know where to START counting down, and
+// ALSO note the offset of digits JP to know where to STOP counting down.
+
+		for (subexp = cJU_NUMSUBEXPB - 1; subexp >= findsub; --subexp)
+		{
+		    jpcount = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, subexp));
+
+		    // should always find findbit:
+		    assert((subexp > findsub) || jpcount);
+
+		    if (! jpcount) continue;	// empty subexpanse, save time.
+
+// Count JPs below digit, inclusive:
+
+		    if (subexp == findsub)
+		    {
+			jpcountbf = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, subexp)
+						  & lowermask);
+		    }
+
+		    // should always find findbit:
+		    assert((subexp > findsub) || jpcountbf);
+		    assert(jpcount >= jpcountbf);	// proper relationship.
+
+// Add pop1s from JPs ABOVE Index (digit):
+
+		    // no null JP subexp pointers:
+		    assert(BMPJP0(subexp) != (Pjp_t) NULL);
+
+		    for (jpnum = jpcount - 1; jpnum >= jpcountbf; --jpnum)
+		    {
+			if ((pop1 = j__udyJPPop1(BMPJP(subexp, jpnum)))
+			    == cJU_ALLONES)
+			{
+			    JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT);
+			    return(C_JERR);
+			}
+
+			pop1above += pop1;
+		    }
+		    // jpnum is now correct for digit.
+		}
+	    } // else.
+
+// Return the net population ABOVE the digits JP at this state (in this JBB)
+// plus the population AT OR ABOVE Index in the SM under the digits JP:
+
+	    pop1 = j__udy1LCountSM(BMPJP(findsub, jpnum), Index, Pjpm);
+	    if (pop1 == C_JERR) return(C_JERR);		// pass error up.
+
+	    assert(pop1above + pop1);
+	    return(pop1above + pop1);
+
+	} // case.
+
+
+// ----------------------------------------------------------------------------
+// UNCOMPRESSED BRANCH; count populations in JPs in the JBU ABOVE the next
+// digit in Index, and recurse for the next digit in Index:
+//
+// Note:  If the remainder of Index is zero, pop1above is the pop1 of the
+// entire expanse and theres no point in recursing to lower levels; but this
+// should be so rare that its not worth checking for;
+// Judy1Count()/JudyLCount() never even calls the motor for Index == 0 (all
+// bytes).
+
+	case cJU_JPBRANCH_U2:  CHECKDCD(Pjp, 2); PREPB(Pjp, 2, BranchU);
+	case cJU_JPBRANCH_U3:  CHECKDCD(Pjp, 3); PREPB(Pjp, 3, BranchU);
+#ifdef JU_64BIT
+	case cJU_JPBRANCH_U4:  CHECKDCD(Pjp, 4); PREPB(Pjp, 4, BranchU);
+	case cJU_JPBRANCH_U5:  CHECKDCD(Pjp, 5); PREPB(Pjp, 5, BranchU);
+	case cJU_JPBRANCH_U6:  CHECKDCD(Pjp, 6); PREPB(Pjp, 6, BranchU);
+	case cJU_JPBRANCH_U7:  CHECKDCD(Pjp, 7); PREPB(Pjp, 7, BranchU);
+#endif
+	case cJU_JPBRANCH_U:   PREPB_ROOT(Pjp, BranchU);
+
+// Common code (state-independent) for all cases of uncompressed branches:
+
+BranchU:
+	    Pjbu = P_JBU(Pjp->jp_Addr);
+
+#ifndef NOSMARTJBU  // enable to turn off smart code for comparison purposes.
+
+// FIGURE OUT WHICH WAY CAUSES FEWER CACHE LINE FILLS; adding the JPs above
+// Indexs JP, or subtracting the JPs below Indexs JP.
+//
+// COUNT UPWARD, subtracting the pop1 of each JP BELOW OR AT Index, from the
+// whole expanses pop1:
+
+	    if (digit < (cJU_BRANCHUNUMJPS / 2))
+	    {
+		pop1above = pop1;		// subtract JPs below Index.
+#ifdef SMARTMETRICS
+		++jbu_upward;
+#endif
+		for (jpnum = 0; jpnum <= digit; ++jpnum)
+		{
+		    if ((Pjbu->jbu_jp[jpnum].jp_Type) <= cJU_JPNULLMAX)
+			continue;	// shortcut, save a function call.
+
+		    if ((pop1 = j__udyJPPop1(Pjbu->jbu_jp + jpnum))
+		     == cJU_ALLONES)
+		    {
+			JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT);
+			return(C_JERR);
+		    }
+
+		    pop1above -= pop1;
+		}
+	    }
+
+// COUNT DOWNWARD, simply adding the pop1 of each JP ABOVE Index:
+
+	    else
+#endif // NOSMARTJBU
+	    {
+		assert(digit < cJU_BRANCHUNUMJPS);
+#ifdef SMARTMETRICS
+		++jbu_downward;
+#endif
+		pop1above = 0;			// add JPs above Index.
+
+		for (jpnum = cJU_BRANCHUNUMJPS - 1; jpnum > digit; --jpnum)
+		{
+		    if ((Pjbu->jbu_jp[jpnum].jp_Type) <= cJU_JPNULLMAX)
+			continue;	// shortcut, save a function call.
+
+		    if ((pop1 = j__udyJPPop1(Pjbu->jbu_jp + jpnum))
+		     == cJU_ALLONES)
+		    {
+			JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT);
+			return(C_JERR);
+		    }
+
+		    pop1above += pop1;
+		}
+	    }
+
+	    if ((pop1 = j__udy1LCountSM(Pjbu->jbu_jp + digit, Index, Pjpm))
+	     == C_JERR) return(C_JERR);		// pass error up.
+
+	    assert(pop1above + pop1);
+	    return(pop1above + pop1);
+
+
+// ----------------------------------------------------------------------------
+// LEAF COUNT MACROS:
+//
+// LEAF*ABOVE() are common code for different JP types (linear leaves, bitmap
+// leaves, and immediates) and different leaf Index Sizes, which result in
+// calling different leaf search functions.  Linear leaves get the leaf address
+// from jp_Addr and the Population from jp_DcdPopO, while immediates use Pjp
+// itself as the leaf address and get Population from jp_Type.
+
+#define	LEAFLABOVE(Func)				\
+	Pjll = P_JLL(Pjp->jp_Addr);			\
+	pop1 = JU_JPLEAF_POP0(Pjp) + 1;	                \
+	LEAFABOVE(Func, Pjll, pop1)
+
+#define	LEAFB1ABOVE(Func) LEAFLABOVE(Func)  // different Func, otherwise same.
+
+#ifdef JUDY1
+#define	IMMABOVE(Func,Pop1)	\
+	Pjll = (Pjll_t) Pjp;	\
+	LEAFABOVE(Func, Pjll, Pop1)
+#else
+// Note:  For JudyL immediates with >= 2 Indexes, the index bytes are in a
+// different place than for Judy1:
+
+#define	IMMABOVE(Func,Pop1) \
+	LEAFABOVE(Func, (Pjll_t) (Pjp->jp_LIndex), Pop1)
+#endif
+
+// For all leaf types, the population AT OR ABOVE is the total pop1 less the
+// offset of Index; and Index should always be found:
+
+#define	LEAFABOVE(Func,Pjll,Pop1)		\
+	offset = Func(Pjll, Pop1, Index);	\
+	assert(offset >= 0);			\
+	assert(offset < (Pop1));		\
+	return((Pop1) - offset)
+
+// IMMABOVE_01 handles the special case of an immediate JP with 1 index, which
+// the search functions arent used for anyway:
+//
+// The target Index should be the one in this Immediate, in which case the
+// count above (inclusive) is always 1.
+
+#define	IMMABOVE_01						\
+	assert((JU_JPDCDPOP0(Pjp)) == JU_TRIMTODCDSIZE(Index));	\
+	return(1)
+
+
+// ----------------------------------------------------------------------------
+// LINEAR LEAF; search the leaf for Index; size is computed from jp_Type:
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+	case cJU_JPLEAF1:  LEAFLABOVE(j__udySearchLeaf1);
+#endif
+	case cJU_JPLEAF2:  LEAFLABOVE(j__udySearchLeaf2);
+	case cJU_JPLEAF3:  LEAFLABOVE(j__udySearchLeaf3);
+
+#ifdef JU_64BIT
+	case cJU_JPLEAF4:  LEAFLABOVE(j__udySearchLeaf4);
+	case cJU_JPLEAF5:  LEAFLABOVE(j__udySearchLeaf5);
+	case cJU_JPLEAF6:  LEAFLABOVE(j__udySearchLeaf6);
+	case cJU_JPLEAF7:  LEAFLABOVE(j__udySearchLeaf7);
+#endif
+
+
+// ----------------------------------------------------------------------------
+// BITMAP LEAF; search the leaf for Index:
+//
+// Since the bitmap describes Indexes digitally rather than linearly, this is
+// not really a search, but just a count.
+
+	case cJU_JPLEAF_B1:  LEAFB1ABOVE(j__udyCountLeafB1);
+
+
+#ifdef JUDY1
+// ----------------------------------------------------------------------------
+// FULL POPULATION:
+//
+// Return the count of Indexes AT OR ABOVE Index, which is the total population
+// of the expanse (a constant) less the value of the undecoded digit remaining
+// in Index (its base-0 offset in the expanse), which yields an inclusive count
+// above.
+//
+// TBD:  This only supports a 1-byte full expanse.  Should this extract a
+// stored value for pop0 and possibly more LSBs of Index, to handle larger full
+// expanses?
+
+	case cJ1_JPFULLPOPU1:
+	    return(cJU_JPFULLPOPU1_POP0 + 1 - JU_DIGITATSTATE(Index, 1));
+#endif
+
+
+// ----------------------------------------------------------------------------
+// IMMEDIATE:
+
+	case cJU_JPIMMED_1_01:  IMMABOVE_01;
+	case cJU_JPIMMED_2_01:  IMMABOVE_01;
+	case cJU_JPIMMED_3_01:  IMMABOVE_01;
+#ifdef JU_64BIT
+	case cJU_JPIMMED_4_01:  IMMABOVE_01;
+	case cJU_JPIMMED_5_01:  IMMABOVE_01;
+	case cJU_JPIMMED_6_01:  IMMABOVE_01;
+	case cJU_JPIMMED_7_01:  IMMABOVE_01;
+#endif
+
+	case cJU_JPIMMED_1_02:  IMMABOVE(j__udySearchLeaf1,  2);
+	case cJU_JPIMMED_1_03:  IMMABOVE(j__udySearchLeaf1,  3);
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_1_04:  IMMABOVE(j__udySearchLeaf1,  4);
+	case cJU_JPIMMED_1_05:  IMMABOVE(j__udySearchLeaf1,  5);
+	case cJU_JPIMMED_1_06:  IMMABOVE(j__udySearchLeaf1,  6);
+	case cJU_JPIMMED_1_07:  IMMABOVE(j__udySearchLeaf1,  7);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_1_08:  IMMABOVE(j__udySearchLeaf1,  8);
+	case cJ1_JPIMMED_1_09:  IMMABOVE(j__udySearchLeaf1,  9);
+	case cJ1_JPIMMED_1_10:  IMMABOVE(j__udySearchLeaf1, 10);
+	case cJ1_JPIMMED_1_11:  IMMABOVE(j__udySearchLeaf1, 11);
+	case cJ1_JPIMMED_1_12:  IMMABOVE(j__udySearchLeaf1, 12);
+	case cJ1_JPIMMED_1_13:  IMMABOVE(j__udySearchLeaf1, 13);
+	case cJ1_JPIMMED_1_14:  IMMABOVE(j__udySearchLeaf1, 14);
+	case cJ1_JPIMMED_1_15:  IMMABOVE(j__udySearchLeaf1, 15);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_2_02:  IMMABOVE(j__udySearchLeaf2,  2);
+	case cJU_JPIMMED_2_03:  IMMABOVE(j__udySearchLeaf2,  3);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_2_04:  IMMABOVE(j__udySearchLeaf2,  4);
+	case cJ1_JPIMMED_2_05:  IMMABOVE(j__udySearchLeaf2,  5);
+	case cJ1_JPIMMED_2_06:  IMMABOVE(j__udySearchLeaf2,  6);
+	case cJ1_JPIMMED_2_07:  IMMABOVE(j__udySearchLeaf2,  7);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_3_02:  IMMABOVE(j__udySearchLeaf3,  2);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_3_03:  IMMABOVE(j__udySearchLeaf3,  3);
+	case cJ1_JPIMMED_3_04:  IMMABOVE(j__udySearchLeaf3,  4);
+	case cJ1_JPIMMED_3_05:  IMMABOVE(j__udySearchLeaf3,  5);
+
+	case cJ1_JPIMMED_4_02:  IMMABOVE(j__udySearchLeaf4,  2);
+	case cJ1_JPIMMED_4_03:  IMMABOVE(j__udySearchLeaf4,  3);
+
+	case cJ1_JPIMMED_5_02:  IMMABOVE(j__udySearchLeaf5,  2);
+	case cJ1_JPIMMED_5_03:  IMMABOVE(j__udySearchLeaf5,  3);
+
+	case cJ1_JPIMMED_6_02:  IMMABOVE(j__udySearchLeaf6,  2);
+
+	case cJ1_JPIMMED_7_02:  IMMABOVE(j__udySearchLeaf7,  2);
+#endif
+
+
+// ----------------------------------------------------------------------------
+// OTHER CASES:
+
+	default: JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT); return(C_JERR);
+
+	} // switch on JP type
+
+	/*NOTREACHED*/
+
+} // j__udy1LCountSM()
+
+
+// ****************************************************************************
+// J U D Y   C O U N T   L E A F   B 1
+//
+// This is a private analog of the j__udySearchLeaf*() functions for counting
+// in bitmap 1-byte leaves.  Since a bitmap leaf describes Indexes digitally
+// rather than linearly, this is not really a search, but just a count of the
+// valid Indexes == set bits below or including Index, which should be valid.
+// Return the "offset" (really the ordinal), 0 .. Pop1 - 1, of Index in Pjll;
+// if Indexs bit is not set (which should never happen, so this is DEBUG-mode
+// only), return the 1s-complement equivalent (== negative offset minus 1).
+//
+// Note:  The source code for this function looks identical for both Judy1 and
+// JudyL, but the JU_JLB_BITMAP macro varies.
+//
+// Note:  For simpler calling, the first arg is of type Pjll_t but then cast to
+// Pjlb_t.
+
+FUNCTION static int j__udyCountLeafB1(
+const	Pjll_t	Pjll,		// bitmap leaf, as Pjll_t for consistency.
+const	Word_t	Pop1,		// Population of whole leaf.
+const	Word_t	Index)		// to which to count.
+{
+	Pjlb_t	Pjlb	= (Pjlb_t) Pjll;	// to proper type.
+	Word_t	digit   = Index & cJU_MASKATSTATE(1);
+	Word_t	findsub = digit / cJU_BITSPERSUBEXPL;
+	Word_t	findbit = digit % cJU_BITSPERSUBEXPL;
+	int	count;		// in leaf through Index.
+	long	subexp;		// for stepping through subexpanses.
+
+
+// COUNT UPWARD:
+//
+// The entire bitmap should fit in one cache line, but still try to save some
+// CPU time by counting the fewest possible number of subexpanses from the
+// bitmap.
+
+#ifndef NOSMARTJLB  // enable to turn off smart code for comparison purposes.
+
+	if (findsub < (cJU_NUMSUBEXPL / 2))
+	{
+#ifdef SMARTMETRICS
+	    ++jlb_upward;
+#endif
+	    count = 0;
+
+	    for (subexp = 0; subexp < findsub; ++subexp)
+	    {
+		count += ((JU_JLB_BITMAP(Pjlb, subexp) == cJU_FULLBITMAPL) ?
+			  cJU_BITSPERSUBEXPL :
+			  j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, subexp)));
+	    }
+
+// This count includes findbit, which should be set, resulting in a base-1
+// offset:
+
+	    count += j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, findsub)
+				& JU_MASKLOWERINC(JU_BITPOSMASKL(findbit)));
+
+	    DBGCODE(if (! JU_BITMAPTESTL(Pjlb, digit)) return(~count);)
+	    assert(count >= 1);
+	    return(count - 1);		// convert to base-0 offset.
+	}
+#endif // NOSMARTJLB
+
+
+// COUNT DOWNWARD:
+//
+// Count the valid Indexes above or at Index, and subtract from Pop1.
+
+#ifdef SMARTMETRICS
+	++jlb_downward;
+#endif
+	count = Pop1;			// base-1 for now.
+
+	for (subexp = cJU_NUMSUBEXPL - 1; subexp > findsub; --subexp)
+	{
+	    count -= ((JU_JLB_BITMAP(Pjlb, subexp) == cJU_FULLBITMAPL) ?
+		      cJU_BITSPERSUBEXPL :
+		      j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, subexp)));
+	}
+
+// This count includes findbit, which should be set, resulting in a base-0
+// offset:
+
+	count -= j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, findsub)
+				& JU_MASKHIGHERINC(JU_BITPOSMASKL(findbit)));
+
+	DBGCODE(if (! JU_BITMAPTESTL(Pjlb, digit)) return(~count);)
+	assert(count >= 0);		// should find Index itself.
+	return(count);			// is already a base-0 offset.
+
+} // j__udyCountLeafB1()
+
+
+// ****************************************************************************
+// J U D Y   J P   P O P 1
+//
+// This function takes any type of JP other than a root-level JP (cJU_LEAFW* or
+// cJU_JPBRANCH* with no number suffix) and extracts the Pop1 from it.  In some
+// sense this is a wrapper around the JU_JP*_POP0 macros.  Why write it as a
+// function instead of a complex macro containing a trinary?  (See version
+// Judy1.h version 4.17.)  We think its cheaper to call a function containing
+// a switch statement with "constant" cases than to do the variable
+// calculations in a trinary.
+//
+// For invalid JP Types return cJU_ALLONES.  Note that this is an impossibly
+// high Pop1 for any JP below a top level branch.
+
+FUNCTION Word_t j__udyJPPop1(
+const	Pjp_t Pjp)		// JP to count.
+{
+	switch (JU_JPTYPE(Pjp))
+	{
+#ifdef notdef // caller should shortcut and not even call with these:
+
+	case cJU_JPNULL1:
+	case cJU_JPNULL2:
+	case cJU_JPNULL3:  return(0);
+#ifdef JU_64BIT
+	case cJU_JPNULL4:
+	case cJU_JPNULL5:
+	case cJU_JPNULL6:
+	case cJU_JPNULL7:  return(0);
+#endif
+#endif // notdef
+
+	case cJU_JPBRANCH_L2:
+	case cJU_JPBRANCH_B2:
+	case cJU_JPBRANCH_U2: return(JU_JPBRANCH_POP0(Pjp,2) + 1);
+
+	case cJU_JPBRANCH_L3:
+	case cJU_JPBRANCH_B3:
+	case cJU_JPBRANCH_U3: return(JU_JPBRANCH_POP0(Pjp,3) + 1);
+
+#ifdef JU_64BIT
+	case cJU_JPBRANCH_L4:
+	case cJU_JPBRANCH_B4:
+	case cJU_JPBRANCH_U4: return(JU_JPBRANCH_POP0(Pjp,4) + 1);
+
+	case cJU_JPBRANCH_L5:
+	case cJU_JPBRANCH_B5:
+	case cJU_JPBRANCH_U5: return(JU_JPBRANCH_POP0(Pjp,5) + 1);
+
+	case cJU_JPBRANCH_L6:
+	case cJU_JPBRANCH_B6:
+	case cJU_JPBRANCH_U6: return(JU_JPBRANCH_POP0(Pjp,6) + 1);
+
+	case cJU_JPBRANCH_L7:
+	case cJU_JPBRANCH_B7:
+	case cJU_JPBRANCH_U7: return(JU_JPBRANCH_POP0(Pjp,7) + 1);
+#endif
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+	case cJU_JPLEAF1:
+#endif
+	case cJU_JPLEAF2:
+	case cJU_JPLEAF3:
+#ifdef JU_64BIT
+	case cJU_JPLEAF4:
+	case cJU_JPLEAF5:
+	case cJU_JPLEAF6:
+	case cJU_JPLEAF7:
+#endif
+	case cJU_JPLEAF_B1:	return(JU_JPLEAF_POP0(Pjp) + 1);
+
+#ifdef JUDY1
+	case cJ1_JPFULLPOPU1:	return(cJU_JPFULLPOPU1_POP0 + 1);
+#endif
+
+	case cJU_JPIMMED_1_01:
+	case cJU_JPIMMED_2_01:
+	case cJU_JPIMMED_3_01:	return(1);
+#ifdef JU_64BIT
+	case cJU_JPIMMED_4_01:
+	case cJU_JPIMMED_5_01:
+	case cJU_JPIMMED_6_01:
+	case cJU_JPIMMED_7_01:	return(1);
+#endif
+
+	case cJU_JPIMMED_1_02:	return(2);
+	case cJU_JPIMMED_1_03:	return(3);
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_1_04:	return(4);
+	case cJU_JPIMMED_1_05:	return(5);
+	case cJU_JPIMMED_1_06:	return(6);
+	case cJU_JPIMMED_1_07:	return(7);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_1_08:	return(8);
+	case cJ1_JPIMMED_1_09:	return(9);
+	case cJ1_JPIMMED_1_10:	return(10);
+	case cJ1_JPIMMED_1_11:	return(11);
+	case cJ1_JPIMMED_1_12:	return(12);
+	case cJ1_JPIMMED_1_13:	return(13);
+	case cJ1_JPIMMED_1_14:	return(14);
+	case cJ1_JPIMMED_1_15:	return(15);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_2_02:	return(2);
+	case cJU_JPIMMED_2_03:	return(3);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_2_04:	return(4);
+	case cJ1_JPIMMED_2_05:	return(5);
+	case cJ1_JPIMMED_2_06:	return(6);
+	case cJ1_JPIMMED_2_07:	return(7);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_3_02:	return(2);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_3_03:	return(3);
+	case cJ1_JPIMMED_3_04:	return(4);
+	case cJ1_JPIMMED_3_05:	return(5);
+
+	case cJ1_JPIMMED_4_02:	return(2);
+	case cJ1_JPIMMED_4_03:	return(3);
+
+	case cJ1_JPIMMED_5_02:	return(2);
+	case cJ1_JPIMMED_5_03:	return(3);
+
+	case cJ1_JPIMMED_6_02:	return(2);
+
+	case cJ1_JPIMMED_7_02:	return(2);
+#endif
+
+	default:		return(cJU_ALLONES);
+	}
+
+	/*NOTREACHED*/
+
+} // j__udyJPPop1()
diff --git a/libs/klib/judy/JudyCreateBranch.c b/libs/klib/judy/JudyCreateBranch.c
new file mode 100644
index 0000000..1234c31
--- /dev/null
+++ b/libs/klib/judy/JudyCreateBranch.c
@@ -0,0 +1,312 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// Branch creation functions for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error:  One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+
+// ****************************************************************************
+// J U D Y   C R E A T E   B R A N C H   L
+//
+// Build a BranchL from an array of JPs and associated 1 byte digits
+// (expanses).  Return with Pjp pointing to the BranchL.  Caller must
+// deallocate passed arrays, if necessary.
+//
+// We have no idea what kind of BranchL it is, so caller must set the jp_Type.
+//
+// Return -1 if error (details in Pjpm), otherwise return 1.
+
+FUNCTION int j__udyCreateBranchL(
+	Pjp_t	Pjp,		// Build JPs from this place
+	Pjp_t	PJPs,		// Array of JPs to put into Bitmap branch
+	uint8_t Exp[],		// Array of expanses to put into bitmap
+	Word_t  ExpCnt,		// Number of above JPs and Expanses
+	Pvoid_t	Pjpm)
+{
+	Pjbl_t	PjblRaw;	// pointer to linear branch.
+	Pjbl_t	Pjbl;
+
+	assert(ExpCnt <= cJU_BRANCHLMAXJPS);
+
+	PjblRaw	= j__udyAllocJBL(Pjpm);
+	if (PjblRaw == (Pjbl_t) NULL) return(-1);
+        Pjbl    = P_JBL(PjblRaw);
+
+//	Build a Linear Branch
+	Pjbl->jbl_NumJPs = ExpCnt;
+
+//	Copy from the Linear branch from splayed leaves
+	JU_COPYMEM(Pjbl->jbl_Expanse, Exp,  ExpCnt);
+	JU_COPYMEM(Pjbl->jbl_jp,      PJPs, ExpCnt);
+
+//	Pass back new pointer to the Linear branch in JP
+	Pjp->jp_Addr = (Word_t) PjblRaw;
+
+	return(1);
+
+} // j__udyCreateBranchL()
+
+
+// ****************************************************************************
+// J U D Y   C R E A T E   B R A N C H   B
+//
+// Build a BranchB from an array of JPs and associated 1 byte digits
+// (expanses).  Return with Pjp pointing to the BranchB.  Caller must
+// deallocate passed arrays, if necessary.
+//
+// We have no idea what kind of BranchB it is, so caller must set the jp_Type.
+//
+// Return -1 if error (details in Pjpm), otherwise return 1.
+
+FUNCTION int j__udyCreateBranchB(
+	Pjp_t	Pjp,		// Build JPs from this place
+	Pjp_t	PJPs,		// Array of JPs to put into Bitmap branch
+	uint8_t Exp[],		// Array of expanses to put into bitmap
+	Word_t  ExpCnt,		// Number of above JPs and Expanses
+	Pvoid_t	Pjpm)
+{
+	Pjbb_t	PjbbRaw;	// pointer to bitmap branch.
+	Pjbb_t	Pjbb;
+	Word_t  ii, jj;		// Temps
+	uint8_t CurrSubExp;	// Current sub expanse for BM
+
+// This assertion says the number of populated subexpanses is not too large.
+// This function is only called when a BranchL overflows to a BranchB or when a
+// cascade occurs, meaning a leaf overflows.  Either way ExpCnt cant be very
+// large, in fact a lot smaller than cJU_BRANCHBMAXJPS.  (Otherwise a BranchU
+// would be used.)  Popping this assertion means something (unspecified) has
+// gone very wrong, or else Judys design criteria have changed, although in
+// fact there should be no HARM in creating a BranchB with higher actual
+// fanout.
+
+	assert(ExpCnt <= cJU_BRANCHBMAXJPS);
+
+//	Get memory for a Bitmap branch
+	PjbbRaw	= j__udyAllocJBB(Pjpm);
+	if (PjbbRaw == (Pjbb_t) NULL) return(-1);
+	Pjbb = P_JBB(PjbbRaw);
+
+//	Get 1st "sub" expanse (0..7) of bitmap branch
+	CurrSubExp = Exp[0] / cJU_BITSPERSUBEXPB;
+
+// Index thru all 1 byte sized expanses:
+
+	for (jj = ii = 0; ii <= ExpCnt; ii++)
+	{
+		Word_t SubExp;	// Cannot be a uint8_t
+
+//		Make sure we cover the last one
+		if (ii == ExpCnt)
+		{
+			SubExp = cJU_ALLONES;	// Force last one
+		}
+		else
+		{
+//			Calculate the "sub" expanse of the byte expanse
+			SubExp = Exp[ii] / cJU_BITSPERSUBEXPB;  // Bits 5..7.
+
+//			Set the bit that represents the expanse in Exp[]
+			JU_JBB_BITMAP(Pjbb, SubExp) |= JU_BITPOSMASKB(Exp[ii]);
+		}
+//		Check if a new "sub" expanse range needed
+		if (SubExp != CurrSubExp)
+		{
+//			Get number of JPs in this sub expanse
+			Word_t NumJP = ii - jj;
+			Pjp_t  PjpRaw;
+			Pjp_t  Pjp;
+
+			PjpRaw = j__udyAllocJBBJP(NumJP, Pjpm);
+                        Pjp    = P_JP(PjpRaw);
+
+			if (PjpRaw == (Pjp_t) NULL)	// out of memory.
+			{
+
+// Free any previous allocations:
+
+			    while(CurrSubExp--)
+			    {
+				NumJP = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb,
+								  CurrSubExp));
+				if (NumJP)
+				{
+				    j__udyFreeJBBJP(JU_JBB_PJP(Pjbb,
+						    CurrSubExp), NumJP, Pjpm);
+				}
+			    }
+			    j__udyFreeJBB(PjbbRaw, Pjpm);
+			    return(-1);
+			}
+
+// Place the array of JPs in bitmap branch:
+
+			JU_JBB_PJP(Pjbb, CurrSubExp) = PjpRaw;
+
+// Copy the JPs to new leaf:
+
+			JU_COPYMEM(Pjp, PJPs + jj, NumJP);
+
+// On to the next bitmap branch "sub" expanse:
+
+			jj	   = ii;
+			CurrSubExp = SubExp;
+		}
+	} // for each 1-byte expanse
+
+// Pass back some of the JP to the new Bitmap branch:
+
+	Pjp->jp_Addr = (Word_t) PjbbRaw;
+
+	return(1);
+
+} // j__udyCreateBranchB()
+
+
+// ****************************************************************************
+// J U D Y   C R E A T E   B R A N C H   U
+//
+// Build a BranchU from a BranchB.  Return with Pjp pointing to the BranchU.
+// Free the BranchB and its JP subarrays.
+//
+// Return -1 if error (details in Pjpm), otherwise return 1.
+
+FUNCTION int j__udyCreateBranchU(
+	Pjp_t	  Pjp,
+	Pvoid_t	  Pjpm)
+{
+	jp_t	  JPNull;
+        Pjbu_t    PjbuRaw;
+        Pjbu_t    Pjbu;
+	Pjbb_t	  PjbbRaw;
+	Pjbb_t	  Pjbb;
+	Word_t	  ii, jj;
+	BITMAPB_t BitMap;
+	Pjp_t	  PDstJP;
+#ifdef JU_STAGED_EXP
+	jbu_t	  BranchU;	// Staged uncompressed branch
+#else
+
+// Allocate memory for a BranchU:
+
+	PjbuRaw = j__udyAllocJBU(Pjpm);
+	if (PjbuRaw == (Pjbu_t) NULL) return(-1);
+        Pjbu = P_JBU(PjbuRaw);
+#endif
+        JU_JPSETADT(&JPNull, 0, 0, JU_JPTYPE(Pjp) - cJU_JPBRANCH_B2 + cJU_JPNULL1);
+
+// Get the pointer to the BranchB:
+
+	PjbbRaw	= (Pjbb_t) (Pjp->jp_Addr);
+	Pjbb	= P_JBB(PjbbRaw);
+
+//	Set the pointer to the Uncompressed branch
+#ifdef JU_STAGED_EXP
+	PDstJP = BranchU.jbu_jp;
+#else
+        PDstJP = Pjbu->jbu_jp;
+#endif
+	for (ii = 0; ii < cJU_NUMSUBEXPB; ii++)
+	{
+		Pjp_t	PjpA;
+		Pjp_t	PjpB;
+
+		PjpB = PjpA = P_JP(JU_JBB_PJP(Pjbb, ii));
+
+//		Get the bitmap for this subexpanse
+		BitMap	= JU_JBB_BITMAP(Pjbb, ii);
+
+//		NULL empty subexpanses
+		if (BitMap == 0)
+		{
+//			But, fill with NULLs
+			for (jj = 0; jj < cJU_BITSPERSUBEXPB; jj++)
+			{
+				PDstJP[jj] = JPNull;
+			}
+			PDstJP += cJU_BITSPERSUBEXPB;
+			continue;
+		}
+//		Check if Uncompressed subexpanse
+		if (BitMap == cJU_FULLBITMAPB)
+		{
+//			Copy subexpanse to the Uncompressed branch intact
+			JU_COPYMEM(PDstJP, PjpA, cJU_BITSPERSUBEXPB);
+
+//			Bump to next subexpanse
+			PDstJP += cJU_BITSPERSUBEXPB;
+
+//			Set length of subexpanse
+			jj = cJU_BITSPERSUBEXPB;
+		}
+		else
+		{
+			for (jj = 0; jj < cJU_BITSPERSUBEXPB; jj++)
+			{
+//				Copy JP or NULLJP depending on bit
+				if (BitMap & 1) { *PDstJP = *PjpA++; }
+				else		{ *PDstJP = JPNull; }
+
+				PDstJP++;	// advance to next JP
+				BitMap >>= 1;
+			}
+			jj = PjpA - PjpB;
+		}
+
+// Free the subexpanse:
+
+		j__udyFreeJBBJP(JU_JBB_PJP(Pjbb, ii), jj, Pjpm);
+
+	} // for each JP in BranchU
+
+#ifdef JU_STAGED_EXP
+
+// Allocate memory for a BranchU:
+
+	PjbuRaw = j__udyAllocJBU(Pjpm);
+	if (PjbuRaw == (Pjbu_t) NULL) return(-1);
+        Pjbu = P_JBU(PjbuRaw);
+
+// Copy staged branch to newly allocated branch:
+//
+// TBD:  I think this code is broken.
+
+	*Pjbu = BranchU;
+
+#endif // JU_STAGED_EXP
+
+// Finally free the BranchB and put the BranchU in its place:
+
+	j__udyFreeJBB(PjbbRaw, Pjpm);
+
+	Pjp->jp_Addr  = (Word_t) PjbuRaw;
+	Pjp->jp_Type += cJU_JPBRANCH_U - cJU_JPBRANCH_B;
+
+	return(1);
+
+} // j__udyCreateBranchU()
diff --git a/libs/klib/judy/JudyDecascade.c b/libs/klib/judy/JudyDecascade.c
new file mode 100644
index 0000000..da625bc
--- /dev/null
+++ b/libs/klib/judy/JudyDecascade.c
@@ -0,0 +1,1204 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// "Decascade" support functions for JudyDel.c:  These functions convert
+// smaller-index-size leaves to larger-index-size leaves, and also, bitmap
+// leaves (LeafB1s) to Leaf1s, and some types of branches to smaller branches
+// at the same index size.  Some "decascading" occurs explicitly in JudyDel.c,
+// but rare or large subroutines appear as functions here, and the overhead to
+// call them is negligible.
+//
+// Compile with one of -DJUDY1 or -DJUDYL.  Note:  Function names are converted
+// to Judy1 or JudyL specific values by external #defines.
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error:  One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#endif
+#ifdef JUDYL
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+DBGCODE(extern void JudyCheckSorted(Pjll_t Pjll, Word_t Pop1, long IndexSize);)
+
+
+// ****************************************************************************
+// __ J U D Y   C O P Y   2   T O   3
+//
+// Copy one or more 2-byte Indexes to a series of 3-byte Indexes.
+
+FUNCTION static void j__udyCopy2to3(
+	uint8_t *  PDest,	// to where to copy 3-byte Indexes.
+	uint16_t * PSrc,	// from where to copy 2-byte indexes.
+	Word_t     Pop1,	// number of Indexes to copy.
+	Word_t     MSByte)	// most-significant byte, prefix to each Index.
+{
+	Word_t	   Temp;	// for building 3-byte Index.
+
+	assert(Pop1);
+
+        do {
+	    Temp = MSByte | *PSrc++;
+	    JU_COPY3_LONG_TO_PINDEX(PDest, Temp);
+	    PDest += 3;
+        } while (--Pop1);
+
+} // j__udyCopy2to3()
+
+
+#ifdef JU_64BIT
+
+// ****************************************************************************
+// __ J U D Y   C O P Y   3   T O   4
+//
+// Copy one or more 3-byte Indexes to a series of 4-byte Indexes.
+
+FUNCTION static void j__udyCopy3to4(
+	uint32_t * PDest,	// to where to copy 4-byte Indexes.
+	uint8_t *  PSrc,	// from where to copy 3-byte indexes.
+	Word_t     Pop1,	// number of Indexes to copy.
+	Word_t     MSByte)	// most-significant byte, prefix to each Index.
+{
+	Word_t	   Temp;	// for building 4-byte Index.
+
+	assert(Pop1);
+
+        do {
+	    JU_COPY3_PINDEX_TO_LONG(Temp, PSrc);
+	    Temp |= MSByte;
+	    PSrc += 3;
+	    *PDest++ = Temp;		// truncates to uint32_t.
+        } while (--Pop1);
+
+} // j__udyCopy3to4()
+
+
+// ****************************************************************************
+// __ J U D Y   C O P Y   4   T O   5
+//
+// Copy one or more 4-byte Indexes to a series of 5-byte Indexes.
+
+FUNCTION static void j__udyCopy4to5(
+	uint8_t *  PDest,	// to where to copy 4-byte Indexes.
+	uint32_t * PSrc,	// from where to copy 4-byte indexes.
+	Word_t     Pop1,	// number of Indexes to copy.
+	Word_t     MSByte)	// most-significant byte, prefix to each Index.
+{
+	Word_t	   Temp;	// for building 5-byte Index.
+
+	assert(Pop1);
+
+        do {
+	    Temp = MSByte | *PSrc++;
+	    JU_COPY5_LONG_TO_PINDEX(PDest, Temp);
+	    PDest += 5;
+        } while (--Pop1);
+
+} // j__udyCopy4to5()
+
+
+// ****************************************************************************
+// __ J U D Y   C O P Y   5   T O   6
+//
+// Copy one or more 5-byte Indexes to a series of 6-byte Indexes.
+
+FUNCTION static void j__udyCopy5to6(
+	uint8_t * PDest,	// to where to copy 6-byte Indexes.
+	uint8_t * PSrc,		// from where to copy 5-byte indexes.
+	Word_t    Pop1,		// number of Indexes to copy.
+	Word_t    MSByte)	// most-significant byte, prefix to each Index.
+{
+	Word_t	  Temp;		// for building 6-byte Index.
+
+	assert(Pop1);
+
+        do {
+	    JU_COPY5_PINDEX_TO_LONG(Temp, PSrc);
+	    Temp |= MSByte;
+	    JU_COPY6_LONG_TO_PINDEX(PDest, Temp);
+	    PSrc  += 5;
+	    PDest += 6;
+        } while (--Pop1);
+
+} // j__udyCopy5to6()
+
+
+// ****************************************************************************
+// __ J U D Y   C O P Y   6   T O   7
+//
+// Copy one or more 6-byte Indexes to a series of 7-byte Indexes.
+
+FUNCTION static void j__udyCopy6to7(
+	uint8_t * PDest,	// to where to copy 6-byte Indexes.
+	uint8_t * PSrc,		// from where to copy 5-byte indexes.
+	Word_t    Pop1,		// number of Indexes to copy.
+	Word_t    MSByte)	// most-significant byte, prefix to each Index.
+{
+	Word_t	  Temp;		// for building 6-byte Index.
+
+	assert(Pop1);
+
+        do {
+	    JU_COPY6_PINDEX_TO_LONG(Temp, PSrc);
+	    Temp |= MSByte;
+	    JU_COPY7_LONG_TO_PINDEX(PDest, Temp);
+	    PSrc  += 6;
+	    PDest += 7;
+        } while (--Pop1);
+
+} // j__udyCopy6to7()
+
+#endif // JU_64BIT
+
+
+#ifndef JU_64BIT // 32-bit
+
+// ****************************************************************************
+// __ J U D Y   C O P Y   3   T O   W
+//
+// Copy one or more 3-byte Indexes to a series of longs (words, always 4-byte).
+
+FUNCTION static void j__udyCopy3toW(
+	PWord_t   PDest,	// to where to copy full-word Indexes.
+	uint8_t * PSrc,		// from where to copy 3-byte indexes.
+	Word_t    Pop1,		// number of Indexes to copy.
+	Word_t    MSByte)	// most-significant byte, prefix to each Index.
+{
+	assert(Pop1);
+
+        do {
+	    JU_COPY3_PINDEX_TO_LONG(*PDest, PSrc);
+	    *PDest++ |= MSByte;
+	    PSrc     += 3;
+        } while (--Pop1);
+
+} // j__udyCopy3toW()
+
+
+#else // JU_64BIT
+
+// ****************************************************************************
+// __ J U D Y   C O P Y   7   T O   W
+//
+// Copy one or more 7-byte Indexes to a series of longs (words, always 8-byte).
+
+FUNCTION static void j__udyCopy7toW(
+	PWord_t   PDest,	// to where to copy full-word Indexes.
+	uint8_t * PSrc,		// from where to copy 7-byte indexes.
+	Word_t    Pop1,		// number of Indexes to copy.
+	Word_t    MSByte)	// most-significant byte, prefix to each Index.
+{
+	assert(Pop1);
+
+        do {
+	    JU_COPY7_PINDEX_TO_LONG(*PDest, PSrc);
+	    *PDest++ |= MSByte;
+	    PSrc     += 7;
+        } while (--Pop1);
+
+} // j__udyCopy7toW()
+
+#endif // JU_64BIT
+
+
+// ****************************************************************************
+// __ J U D Y   B R A N C H   B   T O   B R A N C H   L
+//
+// When a BranchB shrinks to have few enough JPs, call this function to convert
+// it to a BranchL.  Return 1 for success, or -1 for failure (with details in
+// Pjpm).
+
+FUNCTION int j__udyBranchBToBranchL(
+	Pjp_t	Pjp,		// points to BranchB to shrink.
+	Pvoid_t	Pjpm)		// for global accounting.
+{
+	Pjbb_t	PjbbRaw;	// old BranchB to shrink.
+	Pjbb_t	Pjbb;
+	Pjbl_t	PjblRaw;	// new BranchL to create.
+	Pjbl_t	Pjbl;
+	Word_t	Digit;		// in BranchB.
+	Word_t  NumJPs;		// non-null JPs in BranchB.
+	uint8_t Expanse[cJU_BRANCHLMAXJPS];	// for building jbl_Expanse[].
+	Pjp_t	Pjpjbl;		// current JP in BranchL.
+	Word_t  SubExp;		// in BranchB.
+
+	assert(JU_JPTYPE(Pjp) >= cJU_JPBRANCH_B2);
+	assert(JU_JPTYPE(Pjp) <= cJU_JPBRANCH_B);
+
+	PjbbRaw	= (Pjbb_t) (Pjp->jp_Addr);
+	Pjbb	= P_JBB(PjbbRaw);
+
+// Copy 1-byte subexpanse digits from BranchB to temporary buffer for BranchL,
+// for each bit set in the BranchB:
+//
+// TBD:  The following supports variable-sized linear branches, but they are no
+// longer variable; this could be simplified to save the copying.
+//
+// TBD:  Since cJU_BRANCHLMAXJP == 7 now, and cJU_BRANCHUNUMJPS == 256, the
+// following might be inefficient; is there a faster way to do it?  At least
+// skip wholly empty subexpanses?
+
+	for (NumJPs = Digit = 0; Digit < cJU_BRANCHUNUMJPS; ++Digit)
+	{
+	    if (JU_BITMAPTESTB(Pjbb, Digit))
+	    {
+		Expanse[NumJPs++] = Digit;
+		assert(NumJPs <= cJU_BRANCHLMAXJPS);	// required of caller.
+	    }
+	}
+
+// Allocate and populate the BranchL:
+
+	if ((PjblRaw = j__udyAllocJBL(Pjpm)) == (Pjbl_t) NULL) return(-1);
+	Pjbl = P_JBL(PjblRaw);
+
+	JU_COPYMEM(Pjbl->jbl_Expanse, Expanse, NumJPs);
+
+	Pjbl->jbl_NumJPs = NumJPs;
+	DBGCODE(JudyCheckSorted((Pjll_t) (Pjbl->jbl_Expanse), NumJPs, 1);)
+
+// Copy JPs from each BranchB subexpanse subarray:
+
+	Pjpjbl = P_JP(Pjbl->jbl_jp);	// start at first JP in array.
+
+	for (SubExp = 0; SubExp < cJU_NUMSUBEXPB; ++SubExp)
+	{
+	    Pjp_t PjpRaw = JU_JBB_PJP(Pjbb, SubExp);	// current Pjp.
+	    Pjp_t Pjp;
+
+	    if (PjpRaw == (Pjp_t) NULL) continue;  // skip empty subexpanse.
+	    Pjp = P_JP(PjpRaw);
+
+	    NumJPs = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, SubExp));
+	    assert(NumJPs);
+	    JU_COPYMEM(Pjpjbl, Pjp, NumJPs);	 // one subarray at a time.
+
+	    Pjpjbl += NumJPs;
+	    j__udyFreeJBBJP(PjpRaw, NumJPs, Pjpm);	// subarray.
+	}
+	j__udyFreeJBB(PjbbRaw, Pjpm);		// BranchB itself.
+
+// Finish up:  Calculate new JP type (same index size = level in new class),
+// and tie new BranchB into parent JP:
+
+	Pjp->jp_Type += cJU_JPBRANCH_L - cJU_JPBRANCH_B;
+	Pjp->jp_Addr  = (Word_t) PjblRaw;
+
+	return(1);
+
+} // j__udyBranchBToBranchL()
+
+
+#ifdef notdef
+
+// ****************************************************************************
+// __ J U D Y   B R A N C H   U   T O   B R A N C H   B
+//
+// When a BranchU shrinks to need little enough memory, call this function to
+// convert it to a BranchB to save memory (at the cost of some speed).  Return
+// 1 for success, or -1 for failure (with details in Pjpm).
+//
+// TBD:  Fill out if/when needed.  Not currently used in JudyDel.c for reasons
+// explained there.
+
+FUNCTION int j__udyBranchUToBranchB(
+	Pjp_t	Pjp,		// points to BranchU to shrink.
+	Pvoid_t	Pjpm)		// for global accounting.
+{
+	assert(FALSE);
+	return(1);
+}
+#endif // notdef
+
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+
+// ****************************************************************************
+// __ J U D Y   L E A F   B 1   T O   L E A F   1
+//
+// Shrink a bitmap leaf (cJU_LEAFB1) to linear leaf (cJU_JPLEAF1).
+// Return 1 for success, or -1 for failure (with details in Pjpm).
+//
+// Note:  This function is different than the other JudyLeaf*ToLeaf*()
+// functions because it receives a Pjp, not just a leaf, and handles its own
+// allocation and free, in order to allow the caller to continue with a LeafB1
+// if allocation fails.
+
+FUNCTION int j__udyLeafB1ToLeaf1(
+	Pjp_t	  Pjp,		// points to LeafB1 to shrink.
+	Pvoid_t	  Pjpm)		// for global accounting.
+{
+	Pjlb_t    PjlbRaw;	// bitmap in old leaf.
+	Pjlb_t    Pjlb;
+	Pjll_t	  PjllRaw;	// new Leaf1.
+	uint8_t	* Pleaf1;	// Leaf1 pointer type.
+	Word_t    Digit;	// in LeafB1 bitmap.
+#ifdef JUDYL
+	Pjv_t	  PjvNew;	// value area in new Leaf1.
+	Word_t    Pop1;
+	Word_t    SubExp;
+#endif
+
+	assert(JU_JPTYPE(Pjp) == cJU_JPLEAF_B1);
+	assert(((JU_JPDCDPOP0(Pjp) & 0xFF) + 1) == cJU_LEAF1_MAXPOP1);
+
+// Allocate JPLEAF1 and prepare pointers:
+
+	if ((PjllRaw = j__udyAllocJLL1(cJU_LEAF1_MAXPOP1, Pjpm)) == 0)
+	    return(-1);
+
+	Pleaf1	= (uint8_t *) P_JLL(PjllRaw);
+	PjlbRaw	= (Pjlb_t) (Pjp->jp_Addr);
+	Pjlb	= P_JLB(PjlbRaw);
+	JUDYLCODE(PjvNew = JL_LEAF1VALUEAREA(Pleaf1, cJL_LEAF1_MAXPOP1);)
+
+// Copy 1-byte indexes from old LeafB1 to new Leaf1:
+
+	for (Digit = 0; Digit < cJU_BRANCHUNUMJPS; ++Digit)
+	    if (JU_BITMAPTESTL(Pjlb, Digit))
+		*Pleaf1++ = Digit;
+
+#ifdef JUDYL
+
+// Copy all old-LeafB1 value areas from value subarrays to new Leaf1:
+
+	for (SubExp = 0; SubExp < cJU_NUMSUBEXPL; ++SubExp)
+	{
+	    Pjv_t PjvRaw = JL_JLB_PVALUE(Pjlb, SubExp);
+	    Pjv_t Pjv    = P_JV(PjvRaw);
+
+	    if (Pjv == (Pjv_t) NULL) continue;	// skip empty subarray.
+
+	    Pop1 = j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, SubExp));  // subarray.
+	    assert(Pop1);
+
+	    JU_COPYMEM(PjvNew, Pjv, Pop1);		// copy value areas.
+	    j__udyLFreeJV(PjvRaw, Pop1, Pjpm);
+	    PjvNew += Pop1;				// advance through new.
+	}
+
+	assert((((Word_t) Pleaf1) - (Word_t) P_JLL(PjllRaw))
+	    == (PjvNew - JL_LEAF1VALUEAREA(P_JLL(PjllRaw), cJL_LEAF1_MAXPOP1)));
+#endif // JUDYL
+
+	DBGCODE(JudyCheckSorted((Pjll_t) P_JLL(PjllRaw),
+			    (((Word_t) Pleaf1) - (Word_t) P_JLL(PjllRaw)), 1);)
+
+// Finish up:  Free the old LeafB1 and plug the new Leaf1 into the JP:
+//
+// Note:  jp_DcdPopO does not change here.
+
+	j__udyFreeJLB1(PjlbRaw, Pjpm);
+
+	Pjp->jp_Addr = (Word_t) PjllRaw;
+	Pjp->jp_Type = cJU_JPLEAF1;
+
+	return(1);
+
+} // j__udyLeafB1ToLeaf1()
+
+#endif // (JUDYL || (! JU_64BIT))
+
+
+// ****************************************************************************
+// __ J U D Y   L E A F   1   T O   L E A F   2
+//
+// Copy 1-byte Indexes from a LeafB1 or Leaf1 to 2-byte Indexes in a Leaf2.
+// Pjp MUST be one of:  cJU_JPLEAF_B1, cJU_JPLEAF1, or cJU_JPIMMED_1_*.
+// Return number of Indexes copied.
+//
+// TBD:  In this and all following functions, the caller should already be able
+// to compute the Pop1 return value, so why return it?
+
+FUNCTION Word_t  j__udyLeaf1ToLeaf2(
+	uint16_t * PLeaf2,	// destination uint16_t * Index portion of leaf.
+#ifdef JUDYL
+	Pjv_t	   Pjv2,	// destination value part of leaf.
+#endif
+	Pjp_t	   Pjp,		// 1-byte-index object from which to copy.
+	Word_t     MSByte,	// most-significant byte, prefix to each Index.
+	Pvoid_t	   Pjpm)	// for global accounting.
+{
+	Word_t	   Pop1;	// Indexes in leaf.
+	Word_t	   Offset;	// in linear leaf list.
+JUDYLCODE(Pjv_t	   Pjv1Raw;)	// source object value area.
+JUDYLCODE(Pjv_t	   Pjv1;)
+
+	switch (JU_JPTYPE(Pjp))
+	{
+
+
+// JPLEAF_B1:
+
+	case cJU_JPLEAF_B1:
+	{
+	    Pjlb_t Pjlb = P_JLB(Pjp->jp_Addr);
+	    Word_t Digit;	// in LeafB1 bitmap.
+  JUDYLCODE(Word_t SubExp;)	// in LeafB1.
+
+	    Pop1 = JU_JPBRANCH_POP0(Pjp, 1) + 1; assert(Pop1);
+
+// Copy 1-byte indexes from old LeafB1 to new Leaf2, including splicing in
+// the missing MSByte needed in the Leaf2:
+
+	    for (Digit = 0; Digit < cJU_BRANCHUNUMJPS; ++Digit)
+		if (JU_BITMAPTESTL(Pjlb, Digit))
+		    *PLeaf2++ = MSByte | Digit;
+
+#ifdef JUDYL
+
+// Copy all old-LeafB1 value areas from value subarrays to new Leaf2:
+
+	    for (SubExp = 0; SubExp < cJU_NUMSUBEXPL; ++SubExp)
+	    {
+		Word_t SubExpPop1;
+
+		Pjv1Raw = JL_JLB_PVALUE(Pjlb, SubExp);
+		if (Pjv1Raw == (Pjv_t) NULL) continue;	// skip empty.
+		Pjv1 = P_JV(Pjv1Raw);
+
+		SubExpPop1 = j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, SubExp));
+		assert(SubExpPop1);
+
+		JU_COPYMEM(Pjv2, Pjv1, SubExpPop1);	// copy value areas.
+		j__udyLFreeJV(Pjv1Raw, SubExpPop1, Pjpm);
+		Pjv2 += SubExpPop1;			// advance through new.
+	    }
+#endif // JUDYL
+
+	    j__udyFreeJLB1((Pjlb_t) (Pjp->jp_Addr), Pjpm);  // LeafB1 itself.
+	    return(Pop1);
+
+	} // case cJU_JPLEAF_B1
+
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+
+// JPLEAF1:
+
+	case cJU_JPLEAF1:
+	{
+	    uint8_t * PLeaf1 = (uint8_t *) P_JLL(Pjp->jp_Addr);
+
+	    Pop1 = JU_JPBRANCH_POP0(Pjp, 1) + 1; assert(Pop1);
+	    JUDYLCODE(Pjv1 = JL_LEAF1VALUEAREA(PLeaf1, Pop1);)
+
+// Copy all Index bytes including splicing in missing MSByte needed in Leaf2
+// (plus, for JudyL, value areas):
+
+	    for (Offset = 0; Offset < Pop1; ++Offset)
+	    {
+		PLeaf2[Offset] = MSByte | PLeaf1[Offset];
+		JUDYLCODE(Pjv2[Offset] = Pjv1[Offset];)
+	    }
+	    j__udyFreeJLL1((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+	    return(Pop1);
+	}
+#endif // (JUDYL || (! JU_64BIT))
+
+
+// JPIMMED_1_01:
+//
+// Note:  jp_DcdPopO has 3 [7] bytes of Index (all but most significant byte),
+// so the assignment to PLeaf2[] truncates and MSByte is not needed.
+
+	case cJU_JPIMMED_1_01:
+	{
+	    PLeaf2[0] = JU_JPDCDPOP0(Pjp);	// see above.
+	    JUDYLCODE(Pjv2[0] = Pjp->jp_Addr;)
+	    return(1);
+	}
+
+
+// JPIMMED_1_0[2+]:
+
+	case cJU_JPIMMED_1_02:
+	case cJU_JPIMMED_1_03:
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_1_04:
+	case cJU_JPIMMED_1_05:
+	case cJU_JPIMMED_1_06:
+	case cJU_JPIMMED_1_07:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_1_08:
+	case cJ1_JPIMMED_1_09:
+	case cJ1_JPIMMED_1_10:
+	case cJ1_JPIMMED_1_11:
+	case cJ1_JPIMMED_1_12:
+	case cJ1_JPIMMED_1_13:
+	case cJ1_JPIMMED_1_14:
+	case cJ1_JPIMMED_1_15:
+#endif
+	{
+	    Pop1 = JU_JPTYPE(Pjp) - cJU_JPIMMED_1_02 + 2; assert(Pop1);
+	    JUDYLCODE(Pjv1Raw = (Pjv_t) (Pjp->jp_Addr);)
+	    JUDYLCODE(Pjv1    = P_JV(Pjv1Raw);)
+
+	    for (Offset = 0; Offset < Pop1; ++Offset)
+	    {
+#ifdef JUDY1
+		PLeaf2[Offset] = MSByte | Pjp->jp_1Index[Offset];
+#else
+		PLeaf2[Offset] = MSByte | Pjp->jp_LIndex[Offset];
+		Pjv2  [Offset] = Pjv1[Offset];
+#endif
+	    }
+	    JUDYLCODE(j__udyLFreeJV(Pjv1Raw, Pop1, Pjpm);)
+	    return(Pop1);
+	}
+
+
+// UNEXPECTED CASES, including JPNULL1, should be handled by caller:
+
+	default: assert(FALSE); break;
+
+	} // switch
+
+	return(0);
+
+} // j__udyLeaf1ToLeaf2()
+
+
+// *****************************************************************************
+// __ J U D Y   L E A F   2   T O   L E A F   3
+//
+// Copy 2-byte Indexes from a Leaf2 to 3-byte Indexes in a Leaf3.
+// Pjp MUST be one of:  cJU_JPLEAF2 or cJU_JPIMMED_2_*.
+// Return number of Indexes copied.
+//
+// Note:  By the time this function is called to compress a level-3 branch to a
+// Leaf3, the branch has no narrow pointers under it, meaning only level-2
+// objects are below it and must be handled here.
+
+FUNCTION Word_t  j__udyLeaf2ToLeaf3(
+	uint8_t * PLeaf3,	// destination "uint24_t *" Index part of leaf.
+#ifdef JUDYL
+	Pjv_t	  Pjv3,		// destination value part of leaf.
+#endif
+	Pjp_t	  Pjp,		// 2-byte-index object from which to copy.
+	Word_t    MSByte,	// most-significant byte, prefix to each Index.
+	Pvoid_t	  Pjpm)		// for global accounting.
+{
+	Word_t	  Pop1;		// Indexes in leaf.
+#if (defined(JUDYL) && defined(JU_64BIT))
+	Pjv_t	  Pjv2Raw;	// source object value area.
+#endif
+JUDYLCODE(Pjv_t	  Pjv2;)
+
+	switch (JU_JPTYPE(Pjp))
+	{
+
+
+// JPLEAF2:
+
+	case cJU_JPLEAF2:
+	{
+	    uint16_t * PLeaf2 = (uint16_t *) P_JLL(Pjp->jp_Addr);
+
+	    Pop1 = JU_JPLEAF_POP0(Pjp) + 1; assert(Pop1);
+	    j__udyCopy2to3(PLeaf3, PLeaf2, Pop1, MSByte);
+#ifdef JUDYL
+	    Pjv2 = JL_LEAF2VALUEAREA(PLeaf2, Pop1);
+	    JU_COPYMEM(Pjv3, Pjv2, Pop1);
+#endif
+	    j__udyFreeJLL2((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+	    return(Pop1);
+	}
+
+
+// JPIMMED_2_01:
+//
+// Note:  jp_DcdPopO has 3 [7] bytes of Index (all but most significant byte),
+// so the "assignment" to PLeaf3[] is exact [truncates] and MSByte is not
+// needed.
+
+	case cJU_JPIMMED_2_01:
+	{
+	    JU_COPY3_LONG_TO_PINDEX(PLeaf3, JU_JPDCDPOP0(Pjp));	// see above.
+	    JUDYLCODE(Pjv3[0] = Pjp->jp_Addr;)
+	    return(1);
+	}
+
+
+// JPIMMED_2_0[2+]:
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_2_02:
+	case cJU_JPIMMED_2_03:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_2_04:
+	case cJ1_JPIMMED_2_05:
+	case cJ1_JPIMMED_2_06:
+	case cJ1_JPIMMED_2_07:
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+	{
+	    JUDY1CODE(uint16_t * PLeaf2 = (uint16_t *) (Pjp->jp_1Index);)
+	    JUDYLCODE(uint16_t * PLeaf2 = (uint16_t *) (Pjp->jp_LIndex);)
+
+	    Pop1 = JU_JPTYPE(Pjp) - cJU_JPIMMED_2_02 + 2; assert(Pop1);
+	    j__udyCopy2to3(PLeaf3, PLeaf2, Pop1, MSByte);
+#ifdef JUDYL
+	    Pjv2Raw = (Pjv_t) (Pjp->jp_Addr);
+	    Pjv2    = P_JV(Pjv2Raw);
+	    JU_COPYMEM(Pjv3, Pjv2, Pop1);
+	    j__udyLFreeJV(Pjv2Raw, Pop1, Pjpm);
+#endif
+	    return(Pop1);
+	}
+#endif // (JUDY1 || JU_64BIT)
+
+
+// UNEXPECTED CASES, including JPNULL2, should be handled by caller:
+
+	default: assert(FALSE); break;
+
+	} // switch
+
+	return(0);
+
+} // j__udyLeaf2ToLeaf3()
+
+
+#ifdef JU_64BIT
+
+// ****************************************************************************
+// __ J U D Y   L E A F   3   T O   L E A F   4
+//
+// Copy 3-byte Indexes from a Leaf3 to 4-byte Indexes in a Leaf4.
+// Pjp MUST be one of:  cJU_JPLEAF3 or cJU_JPIMMED_3_*.
+// Return number of Indexes copied.
+//
+// Note:  By the time this function is called to compress a level-4 branch to a
+// Leaf4, the branch has no narrow pointers under it, meaning only level-3
+// objects are below it and must be handled here.
+
+FUNCTION Word_t  j__udyLeaf3ToLeaf4(
+	uint32_t * PLeaf4,	// destination uint32_t * Index part of leaf.
+#ifdef JUDYL
+	Pjv_t	   Pjv4,	// destination value part of leaf.
+#endif
+	Pjp_t	   Pjp,		// 3-byte-index object from which to copy.
+	Word_t     MSByte,	// most-significant byte, prefix to each Index.
+	Pvoid_t	   Pjpm)	// for global accounting.
+{
+	Word_t	   Pop1;	// Indexes in leaf.
+JUDYLCODE(Pjv_t	   Pjv3Raw;)	// source object value area.
+JUDYLCODE(Pjv_t	   Pjv3;)
+
+	switch (JU_JPTYPE(Pjp))
+	{
+
+
+// JPLEAF3:
+
+	case cJU_JPLEAF3:
+	{
+	    uint8_t * PLeaf3 = (uint8_t *) P_JLL(Pjp->jp_Addr);
+
+	    Pop1 = JU_JPLEAF_POP0(Pjp) + 1; assert(Pop1);
+	    j__udyCopy3to4(PLeaf4, (uint8_t *) PLeaf3, Pop1, MSByte);
+#ifdef JUDYL
+	    Pjv3 = JL_LEAF3VALUEAREA(PLeaf3, Pop1);
+	    JU_COPYMEM(Pjv4, Pjv3, Pop1);
+#endif
+	    j__udyFreeJLL3((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+	    return(Pop1);
+	}
+
+
+// JPIMMED_3_01:
+//
+// Note:  jp_DcdPopO has 7 bytes of Index (all but most significant byte), so
+// the assignment to PLeaf4[] truncates and MSByte is not needed.
+
+	case cJU_JPIMMED_3_01:
+	{
+	    PLeaf4[0] = JU_JPDCDPOP0(Pjp);	// see above.
+	    JUDYLCODE(Pjv4[0] = Pjp->jp_Addr;)
+	    return(1);
+	}
+
+
+// JPIMMED_3_0[2+]:
+
+	case cJU_JPIMMED_3_02:
+#ifdef JUDY1
+	case cJ1_JPIMMED_3_03:
+	case cJ1_JPIMMED_3_04:
+	case cJ1_JPIMMED_3_05:
+#endif
+	{
+	    JUDY1CODE(uint8_t * PLeaf3 = (uint8_t *) (Pjp->jp_1Index);)
+	    JUDYLCODE(uint8_t * PLeaf3 = (uint8_t *) (Pjp->jp_LIndex);)
+
+	    JUDY1CODE(Pop1 = JU_JPTYPE(Pjp) - cJU_JPIMMED_3_02 + 2;)
+	    JUDYLCODE(Pop1 = 2;)
+
+	    j__udyCopy3to4(PLeaf4, PLeaf3, Pop1, MSByte);
+#ifdef JUDYL
+	    Pjv3Raw = (Pjv_t) (Pjp->jp_Addr);
+	    Pjv3    = P_JV(Pjv3Raw);
+	    JU_COPYMEM(Pjv4, Pjv3, Pop1);
+	    j__udyLFreeJV(Pjv3Raw, Pop1, Pjpm);
+#endif
+	    return(Pop1);
+	}
+
+
+// UNEXPECTED CASES, including JPNULL3, should be handled by caller:
+
+	default: assert(FALSE); break;
+
+	} // switch
+
+	return(0);
+
+} // j__udyLeaf3ToLeaf4()
+
+
+// Note:  In all following j__udyLeaf*ToLeaf*() functions, JPIMMED_*_0[2+]
+// cases exist for Judy1 (&& 64-bit) only.  JudyL has no equivalent Immeds.
+
+
+// *****************************************************************************
+// __ J U D Y   L E A F   4   T O   L E A F   5
+//
+// Copy 4-byte Indexes from a Leaf4 to 5-byte Indexes in a Leaf5.
+// Pjp MUST be one of:  cJU_JPLEAF4 or cJU_JPIMMED_4_*.
+// Return number of Indexes copied.
+//
+// Note:  By the time this function is called to compress a level-5 branch to a
+// Leaf5, the branch has no narrow pointers under it, meaning only level-4
+// objects are below it and must be handled here.
+
+FUNCTION Word_t  j__udyLeaf4ToLeaf5(
+	uint8_t * PLeaf5,	// destination "uint40_t *" Index part of leaf.
+#ifdef JUDYL
+	Pjv_t	  Pjv5,		// destination value part of leaf.
+#endif
+	Pjp_t	  Pjp,		// 4-byte-index object from which to copy.
+	Word_t    MSByte,	// most-significant byte, prefix to each Index.
+	Pvoid_t	  Pjpm)		// for global accounting.
+{
+	Word_t	  Pop1;		// Indexes in leaf.
+JUDYLCODE(Pjv_t	  Pjv4;)	// source object value area.
+
+	switch (JU_JPTYPE(Pjp))
+	{
+
+
+// JPLEAF4:
+
+	case cJU_JPLEAF4:
+	{
+	    uint32_t * PLeaf4 = (uint32_t *) P_JLL(Pjp->jp_Addr);
+
+	    Pop1 = JU_JPLEAF_POP0(Pjp) + 1; assert(Pop1);
+	    j__udyCopy4to5(PLeaf5, PLeaf4, Pop1, MSByte);
+#ifdef JUDYL
+	    Pjv4 = JL_LEAF4VALUEAREA(PLeaf4, Pop1);
+	    JU_COPYMEM(Pjv5, Pjv4, Pop1);
+#endif
+	    j__udyFreeJLL4((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+	    return(Pop1);
+	}
+
+
+// JPIMMED_4_01:
+//
+// Note:  jp_DcdPopO has 7 bytes of Index (all but most significant byte), so
+// the assignment to PLeaf5[] truncates and MSByte is not needed.
+
+	case cJU_JPIMMED_4_01:
+	{
+	    JU_COPY5_LONG_TO_PINDEX(PLeaf5, JU_JPDCDPOP0(Pjp));	// see above.
+	    JUDYLCODE(Pjv5[0] = Pjp->jp_Addr;)
+	    return(1);
+	}
+
+
+#ifdef JUDY1
+
+// JPIMMED_4_0[4+]:
+
+	case cJ1_JPIMMED_4_02:
+	case cJ1_JPIMMED_4_03:
+	{
+	    uint32_t * PLeaf4 = (uint32_t *) (Pjp->jp_1Index);
+
+	    Pop1 = JU_JPTYPE(Pjp) - cJ1_JPIMMED_4_02 + 2;
+	    j__udyCopy4to5(PLeaf5, PLeaf4, Pop1, MSByte);
+	    return(Pop1);
+	}
+#endif // JUDY1
+
+
+// UNEXPECTED CASES, including JPNULL4, should be handled by caller:
+
+	default: assert(FALSE); break;
+
+	} // switch
+
+	return(0);
+
+} // j__udyLeaf4ToLeaf5()
+
+
+// ****************************************************************************
+// __ J U D Y   L E A F   5   T O   L E A F   6
+//
+// Copy 5-byte Indexes from a Leaf5 to 6-byte Indexes in a Leaf6.
+// Pjp MUST be one of:  cJU_JPLEAF5 or cJU_JPIMMED_5_*.
+// Return number of Indexes copied.
+//
+// Note:  By the time this function is called to compress a level-6 branch to a
+// Leaf6, the branch has no narrow pointers under it, meaning only level-5
+// objects are below it and must be handled here.
+
+FUNCTION Word_t  j__udyLeaf5ToLeaf6(
+	uint8_t * PLeaf6,	// destination uint8_t * Index part of leaf.
+#ifdef JUDYL
+	Pjv_t	  Pjv6,		// destination value part of leaf.
+#endif
+	Pjp_t	  Pjp,		// 5-byte-index object from which to copy.
+	Word_t    MSByte,	// most-significant byte, prefix to each Index.
+	Pvoid_t	  Pjpm)		// for global accounting.
+{
+	Word_t	  Pop1;		// Indexes in leaf.
+JUDYLCODE(Pjv_t	  Pjv5;)	// source object value area.
+
+	switch (JU_JPTYPE(Pjp))
+	{
+
+
+// JPLEAF5:
+
+	case cJU_JPLEAF5:
+	{
+	    uint8_t * PLeaf5 = (uint8_t *) P_JLL(Pjp->jp_Addr);
+
+	    Pop1 = JU_JPLEAF_POP0(Pjp) + 1; assert(Pop1);
+	    j__udyCopy5to6(PLeaf6, PLeaf5, Pop1, MSByte);
+#ifdef JUDYL
+	    Pjv5 = JL_LEAF5VALUEAREA(PLeaf5, Pop1);
+	    JU_COPYMEM(Pjv6, Pjv5, Pop1);
+#endif
+	    j__udyFreeJLL5((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+	    return(Pop1);
+	}
+
+
+// JPIMMED_5_01:
+//
+// Note:  jp_DcdPopO has 7 bytes of Index (all but most significant byte), so
+// the assignment to PLeaf6[] truncates and MSByte is not needed.
+
+	case cJU_JPIMMED_5_01:
+	{
+	    JU_COPY6_LONG_TO_PINDEX(PLeaf6, JU_JPDCDPOP0(Pjp));	// see above.
+	    JUDYLCODE(Pjv6[0] = Pjp->jp_Addr;)
+	    return(1);
+	}
+
+
+#ifdef JUDY1
+
+// JPIMMED_5_0[2+]:
+
+	case cJ1_JPIMMED_5_02:
+	case cJ1_JPIMMED_5_03:
+	{
+	    uint8_t * PLeaf5 = (uint8_t *) (Pjp->jp_1Index);
+
+	    Pop1 = JU_JPTYPE(Pjp) - cJ1_JPIMMED_5_02 + 2;
+	    j__udyCopy5to6(PLeaf6, PLeaf5, Pop1, MSByte);
+	    return(Pop1);
+	}
+#endif // JUDY1
+
+
+// UNEXPECTED CASES, including JPNULL5, should be handled by caller:
+
+	default: assert(FALSE); break;
+
+	} // switch
+
+	return(0);
+
+} // j__udyLeaf5ToLeaf6()
+
+
+// *****************************************************************************
+// __ J U D Y   L E A F   6   T O   L E A F   7
+//
+// Copy 6-byte Indexes from a Leaf2 to 7-byte Indexes in a Leaf7.
+// Pjp MUST be one of:  cJU_JPLEAF6 or cJU_JPIMMED_6_*.
+// Return number of Indexes copied.
+//
+// Note:  By the time this function is called to compress a level-7 branch to a
+// Leaf7, the branch has no narrow pointers under it, meaning only level-6
+// objects are below it and must be handled here.
+
+FUNCTION Word_t  j__udyLeaf6ToLeaf7(
+	uint8_t * PLeaf7,	// destination "uint24_t *" Index part of leaf.
+#ifdef JUDYL
+	Pjv_t	  Pjv7,		// destination value part of leaf.
+#endif
+	Pjp_t	  Pjp,		// 6-byte-index object from which to copy.
+	Word_t    MSByte,	// most-significant byte, prefix to each Index.
+	Pvoid_t	  Pjpm)		// for global accounting.
+{
+	Word_t	  Pop1;		// Indexes in leaf.
+JUDYLCODE(Pjv_t	  Pjv6;)	// source object value area.
+
+	switch (JU_JPTYPE(Pjp))
+	{
+
+
+// JPLEAF6:
+
+	case cJU_JPLEAF6:
+	{
+	    uint8_t * PLeaf6 = (uint8_t *) P_JLL(Pjp->jp_Addr);
+
+	    Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+	    j__udyCopy6to7(PLeaf7, PLeaf6, Pop1, MSByte);
+#ifdef JUDYL
+	    Pjv6 = JL_LEAF6VALUEAREA(PLeaf6, Pop1);
+	    JU_COPYMEM(Pjv7, Pjv6, Pop1);
+#endif
+	    j__udyFreeJLL6((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+	    return(Pop1);
+	}
+
+
+// JPIMMED_6_01:
+//
+// Note:  jp_DcdPopO has 7 bytes of Index (all but most significant byte), so
+// the "assignment" to PLeaf7[] is exact and MSByte is not needed.
+
+	case cJU_JPIMMED_6_01:
+	{
+	    JU_COPY7_LONG_TO_PINDEX(PLeaf7, JU_JPDCDPOP0(Pjp));	// see above.
+	    JUDYLCODE(Pjv7[0] = Pjp->jp_Addr;)
+	    return(1);
+	}
+
+
+#ifdef JUDY1
+
+// JPIMMED_6_02:
+
+	case cJ1_JPIMMED_6_02:
+	{
+	    uint8_t * PLeaf6 = (uint8_t *) (Pjp->jp_1Index);
+
+	    j__udyCopy6to7(PLeaf7, PLeaf6, /* Pop1 = */ 2, MSByte);
+	    return(2);
+	}
+#endif // JUDY1
+
+
+// UNEXPECTED CASES, including JPNULL6, should be handled by caller:
+
+	default: assert(FALSE); break;
+
+	} // switch
+
+	return(0);
+
+} // j__udyLeaf6ToLeaf7()
+
+#endif // JU_64BIT
+
+
+#ifndef JU_64BIT // 32-bit version first
+
+// ****************************************************************************
+// __ J U D Y   L E A F   3   T O   L E A F   W
+//
+// Copy 3-byte Indexes from a Leaf3 to 4-byte Indexes in a LeafW.  Pjp MUST be
+// one of:  cJU_JPLEAF3 or cJU_JPIMMED_3_*.  Return number of Indexes copied.
+//
+// Note:  By the time this function is called to compress a level-L branch to a
+// LeafW, the branch has no narrow pointers under it, meaning only level-3
+// objects are below it and must be handled here.
+
+FUNCTION Word_t  j__udyLeaf3ToLeafW(
+	Pjlw_t	Pjlw,		// destination Index part of leaf.
+#ifdef JUDYL
+	Pjv_t	PjvW,		// destination value part of leaf.
+#endif
+	Pjp_t	Pjp,		// 3-byte-index object from which to copy.
+	Word_t	MSByte,		// most-significant byte, prefix to each Index.
+	Pvoid_t	Pjpm)		// for global accounting.
+{
+	Word_t	Pop1;		// Indexes in leaf.
+JUDYLCODE(Pjv_t Pjv3;)		// source object value area.
+
+	switch (JU_JPTYPE(Pjp))
+	{
+
+
+// JPLEAF3:
+
+	case cJU_JPLEAF3:
+	{
+	    uint8_t * PLeaf3 = (uint8_t *) P_JLL(Pjp->jp_Addr);
+
+	    Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+	    j__udyCopy3toW((PWord_t) Pjlw, PLeaf3, Pop1, MSByte);
+#ifdef JUDYL
+	    Pjv3 = JL_LEAF3VALUEAREA(PLeaf3, Pop1);
+	    JU_COPYMEM(PjvW, Pjv3, Pop1);
+#endif
+	    j__udyFreeJLL3((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+	    return(Pop1);
+	}
+
+
+// JPIMMED_3_01:
+//
+// Note:  jp_DcdPopO has 3 bytes of Index (all but most significant byte), and
+// MSByte must be ord in.
+
+	case cJU_JPIMMED_3_01:
+	{
+	    Pjlw[0] = MSByte | JU_JPDCDPOP0(Pjp);		// see above.
+	    JUDYLCODE(PjvW[0] = Pjp->jp_Addr;)
+	    return(1);
+	}
+
+
+#ifdef JUDY1
+
+// JPIMMED_3_02:
+
+	case cJU_JPIMMED_3_02:
+	{
+	    uint8_t * PLeaf3 = (uint8_t *) (Pjp->jp_1Index);
+
+	    j__udyCopy3toW((PWord_t) Pjlw, PLeaf3, /* Pop1 = */ 2, MSByte);
+	    return(2);
+	}
+#endif // JUDY1
+
+
+// UNEXPECTED CASES, including JPNULL3, should be handled by caller:
+
+	default: assert(FALSE); break;
+
+	} // switch
+
+	return(0);
+
+} // j__udyLeaf3ToLeafW()
+
+
+#else // JU_64BIT
+
+
+// ****************************************************************************
+// __ J U D Y   L E A F   7   T O   L E A F   W
+//
+// Copy 7-byte Indexes from a Leaf7 to 8-byte Indexes in a LeafW.
+// Pjp MUST be one of:  cJU_JPLEAF7 or cJU_JPIMMED_7_*.
+// Return number of Indexes copied.
+//
+// Note:  By the time this function is called to compress a level-L branch to a
+// LeafW, the branch has no narrow pointers under it, meaning only level-7
+// objects are below it and must be handled here.
+
+FUNCTION Word_t  j__udyLeaf7ToLeafW(
+	Pjlw_t	Pjlw,		// destination Index part of leaf.
+#ifdef JUDYL
+	Pjv_t	PjvW,		// destination value part of leaf.
+#endif
+	Pjp_t	Pjp,		// 7-byte-index object from which to copy.
+	Word_t	MSByte,		// most-significant byte, prefix to each Index.
+	Pvoid_t	Pjpm)		// for global accounting.
+{
+	Word_t	Pop1;		// Indexes in leaf.
+JUDYLCODE(Pjv_t	Pjv7;)		// source object value area.
+
+	switch (JU_JPTYPE(Pjp))
+	{
+
+
+// JPLEAF7:
+
+	case cJU_JPLEAF7:
+	{
+	    uint8_t * PLeaf7 = (uint8_t *) P_JLL(Pjp->jp_Addr);
+
+	    Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+	    j__udyCopy7toW((PWord_t) Pjlw, PLeaf7, Pop1, MSByte);
+#ifdef JUDYL
+	    Pjv7 = JL_LEAF7VALUEAREA(PLeaf7, Pop1);
+	    JU_COPYMEM(PjvW, Pjv7, Pop1);
+#endif
+	    j__udyFreeJLL7((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+	    return(Pop1);
+	}
+
+
+// JPIMMED_7_01:
+//
+// Note:  jp_DcdPopO has 7 bytes of Index (all but most significant byte), and
+// MSByte must be ord in.
+
+	case cJU_JPIMMED_7_01:
+	{
+	    Pjlw[0] = MSByte | JU_JPDCDPOP0(Pjp);		// see above.
+	    JUDYLCODE(PjvW[0] = Pjp->jp_Addr;)
+	    return(1);
+	}
+
+
+#ifdef JUDY1
+
+// JPIMMED_7_02:
+
+	case cJ1_JPIMMED_7_02:
+	{
+	    uint8_t * PLeaf7 = (uint8_t *) (Pjp->jp_1Index);
+
+	    j__udyCopy7toW((PWord_t) Pjlw, PLeaf7, /* Pop1 = */ 2, MSByte);
+	    return(2);
+	}
+#endif
+
+
+// UNEXPECTED CASES, including JPNULL7, should be handled by caller:
+
+	default: assert(FALSE); break;
+
+	} // switch
+
+	return(0);
+
+} // j__udyLeaf7ToLeafW()
+
+#endif // JU_64BIT
diff --git a/libs/klib/judy/JudyDel.c b/libs/klib/judy/JudyDel.c
new file mode 100644
index 0000000..4291da6
--- /dev/null
+++ b/libs/klib/judy/JudyDel.c
@@ -0,0 +1,2144 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// Judy1Unset() and JudyLDel() functions for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+//
+// About HYSTERESIS:  In the Judy code, hysteresis means leaving around a
+// nominally suboptimal (not maximally compressed) data structure after a
+// deletion.  As a result, the shape of the tree for two identical index sets
+// can differ depending on the insert/delete path taken to arrive at the index
+// sets.  The purpose is to minimize worst-case behavior (thrashing) that could
+// result from a series of intermixed insertions and deletions.  It also makes
+// for MUCH simpler code, because instead of performing, "delete and then
+// compress," it can say, "compress and then delete," where due to hysteresis,
+// compression is not even attempted until the object IS compressible.
+//
+// In some cases the code has no choice and it must "ungrow" a data structure
+// across a "phase transition" boundary without hysteresis.  In other cases the
+// amount (such as "hysteresis = 1") is indicated by the number of JP deletions
+// (in branches) or index deletions (in leaves) that can occur in succession
+// before compressing the data structure.  (It appears that hysteresis <= 1 in
+// all cases.)
+//
+// In general no hysteresis occurs when the data structure type remains the
+// same but the allocated memory chunk for the node must shrink, because the
+// relationship is hardwired and theres no way to know how much memory is
+// allocated to a given data structure.  Hysteresis = 0 in all these cases.
+//
+// TBD:  Could this code be faster if memory chunk hysteresis were supported
+// somehow along with data structure type hysteresis?
+//
+// TBD:  Should some of the assertions here be converted to product code that
+// returns JU_ERRNO_CORRUPT?
+//
+// TBD:  Dougs code had an odd mix of function-wide and limited-scope
+// variables.  Should some of the function-wide variables appear only in
+// limited scopes, or more likely, vice-versa?
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error:  One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+DBGCODE(extern void JudyCheckPop(Pvoid_t PArray);)
+DBGCODE(extern void JudyCheckSorted(Pjll_t Pjll, Word_t Pop1, long IndexSize);)
+
+#ifdef TRACEJP
+#include "JudyPrintJP.c"
+#endif
+
+// These are defined to generic values in JudyCommon/JudyPrivateTypes.h:
+//
+// TBD:  These should be exported from a header file, but perhaps not, as they
+// are only used here, and exported from JudyDecascade.c, which is a separate
+// file for profiling reasons (to prevent inlining), but which potentially
+// could be merged with this file, either in SoftCM or at compile-time:
+
+#ifdef JUDY1
+
+extern int      j__udy1BranchBToBranchL(Pjp_t Pjp, Pvoid_t Pjpm);
+#ifndef JU_64BIT
+extern int      j__udy1LeafB1ToLeaf1(Pjp_t, Pvoid_t);
+#endif
+extern Word_t   j__udy1Leaf1ToLeaf2(uint16_t *, Pjp_t, Word_t, Pvoid_t);
+extern Word_t   j__udy1Leaf2ToLeaf3(uint8_t  *, Pjp_t, Word_t, Pvoid_t);
+#ifndef JU_64BIT
+extern Word_t   j__udy1Leaf3ToLeafW(Pjlw_t,     Pjp_t, Word_t, Pvoid_t);
+#else
+extern Word_t   j__udy1Leaf3ToLeaf4(uint32_t *, Pjp_t, Word_t, Pvoid_t);
+extern Word_t   j__udy1Leaf4ToLeaf5(uint8_t  *, Pjp_t, Word_t, Pvoid_t);
+extern Word_t   j__udy1Leaf5ToLeaf6(uint8_t  *, Pjp_t, Word_t, Pvoid_t);
+extern Word_t   j__udy1Leaf6ToLeaf7(uint8_t  *, Pjp_t, Word_t, Pvoid_t);
+extern Word_t   j__udy1Leaf7ToLeafW(Pjlw_t,     Pjp_t, Word_t, Pvoid_t);
+#endif
+
+#else // JUDYL
+
+extern int      j__udyLBranchBToBranchL(Pjp_t Pjp, Pvoid_t Pjpm);
+extern int      j__udyLLeafB1ToLeaf1(Pjp_t, Pvoid_t);
+extern Word_t   j__udyLLeaf1ToLeaf2(uint16_t *, Pjv_t, Pjp_t, Word_t, Pvoid_t);
+extern Word_t   j__udyLLeaf2ToLeaf3(uint8_t  *, Pjv_t, Pjp_t, Word_t, Pvoid_t);
+#ifndef JU_64BIT
+extern Word_t   j__udyLLeaf3ToLeafW(Pjlw_t,     Pjv_t, Pjp_t, Word_t, Pvoid_t);
+#else
+extern Word_t   j__udyLLeaf3ToLeaf4(uint32_t *, Pjv_t, Pjp_t, Word_t, Pvoid_t);
+extern Word_t   j__udyLLeaf4ToLeaf5(uint8_t  *, Pjv_t, Pjp_t, Word_t, Pvoid_t);
+extern Word_t   j__udyLLeaf5ToLeaf6(uint8_t  *, Pjv_t, Pjp_t, Word_t, Pvoid_t);
+extern Word_t   j__udyLLeaf6ToLeaf7(uint8_t  *, Pjv_t, Pjp_t, Word_t, Pvoid_t);
+extern Word_t   j__udyLLeaf7ToLeafW(Pjlw_t,     Pjv_t, Pjp_t, Word_t, Pvoid_t);
+#endif
+
+#endif // JUDYL
+
+// For convenience in the calling code; "M1" means "minus one":
+
+#ifndef JU_64BIT
+#define j__udyLeafM1ToLeafW j__udyLeaf3ToLeafW
+#else
+#define j__udyLeafM1ToLeafW j__udyLeaf7ToLeafW
+#endif
+
+
+// ****************************************************************************
+// __ J U D Y   D E L   W A L K
+//
+// Given a pointer to a JP, an Index known to be valid, the number of bytes
+// left to decode (== level in the tree), and a pointer to a global JPM, walk a
+// Judy (sub)tree to do an unset/delete of that index, and possibly modify the
+// JPM.  This function is only called internally, and recursively.  Unlike
+// Judy1Test() and JudyLGet(), the extra time required for recursion should be
+// negligible compared with the total.
+//
+// Return values:
+//
+// -1 error; details in JPM
+//
+//  0 Index already deleted (should never happen, Index is known to be valid)
+//
+//  1 previously valid Index deleted
+//
+//  2 same as 1, but in addition the JP now points to a BranchL containing a
+//    single JP, which should be compressed into the parent branch (if there
+//    is one, which is not the case for a top-level branch under a JPM)
+
+DBGCODE(uint8_t parentJPtype;)          // parent branch JP type.
+
+FUNCTION static int j__udyDelWalk(
+        Pjp_t   Pjp,            // current JP under which to delete.
+        Word_t  Index,          // to delete.
+        Word_t  ParentLevel,    // of parent branch.
+        Pjpm_t  Pjpm)           // for returning info to top level.
+{
+        Word_t  pop1;           // of a leaf.
+        Word_t  level;          // of a leaf.
+        uint8_t digit;          // from Index, in current branch.
+        Pjll_t  PjllnewRaw;     // address of newly allocated leaf.
+        Pjll_t  Pjllnew;
+        int     offset;         // within a branch.
+        int     retcode;        // return code: -1, 0, 1, 2.
+JUDYLCODE(Pjv_t PjvRaw;)        // value area.
+JUDYLCODE(Pjv_t Pjv;)
+
+        DBGCODE(level = 0;)
+
+ContinueDelWalk:                // for modifying state without recursing.
+
+#ifdef TRACEJP
+        JudyPrintJP(Pjp, "d", __LINE__);
+#endif
+
+        switch (JU_JPTYPE(Pjp)) // entry:  Pjp, Index.
+        {
+
+
+// ****************************************************************************
+// LINEAR BRANCH:
+//
+// MACROS FOR COMMON CODE:
+//
+// Check for population too high to compress a branch to a leaf, meaning just
+// descend through the branch, with a purposeful off-by-one error that
+// constitutes hysteresis = 1.  In other words, do not compress until the
+// branchs CURRENT population fits in the leaf, even BEFORE deleting one
+// index.
+//
+// Next is a label for branch-type-specific common code.  Variables pop1,
+// level, digit, and Index are in the context.
+
+#define JU_BRANCH_KEEP(cLevel,MaxPop1,Next)             \
+        if (pop1 > (MaxPop1))   /* hysteresis = 1 */    \
+        {                                               \
+            assert((cLevel) >= 2);                      \
+            level = (cLevel);                           \
+            digit = JU_DIGITATSTATE(Index, cLevel);     \
+            goto Next;                                  \
+        }
+
+// Support for generic calling of JudyLeaf*ToLeaf*() functions:
+//
+// Note:  Cannot use JUDYLCODE() because this contains a comma.
+
+#ifdef JUDY1
+#define JU_PVALUEPASS  // null.
+#else
+#define JU_PVALUEPASS  Pjv,
+#endif
+
+// During compression to a leaf, check if a JP contains nothing but a
+// cJU_JPIMMED_*_01, in which case shortcut calling j__udyLeaf*ToLeaf*():
+//
+// Copy the index bytes from the jp_DcdPopO field (with possible truncation),
+// and continue the branch-JP-walk loop.  Variables Pjp and Pleaf are in the
+// context.
+
+#define JU_BRANCH_COPY_IMMED_EVEN(cLevel,Pjp,ignore)            \
+        if (JU_JPTYPE(Pjp) == cJU_JPIMMED_1_01 + (cLevel) - 2)  \
+        {                                                       \
+            *Pleaf++ = JU_JPDCDPOP0(Pjp);                       \
+  JUDYLCODE(*Pjv++   = (Pjp)->jp_Addr;)                         \
+            continue;   /* for-loop */                          \
+        }
+
+#define JU_BRANCH_COPY_IMMED_ODD(cLevel,Pjp,CopyIndex)          \
+        if (JU_JPTYPE(Pjp) == cJU_JPIMMED_1_01 + (cLevel) - 2)  \
+        {                                                       \
+            CopyIndex(Pleaf, (Word_t) (JU_JPDCDPOP0(Pjp)));     \
+            Pleaf += (cLevel);  /* index size = level */        \
+  JUDYLCODE(*Pjv++ = (Pjp)->jp_Addr;)                           \
+            continue;   /* for-loop */                          \
+        }
+
+// Compress a BranchL into a leaf one index size larger:
+//
+// Allocate a new leaf, walk the JPs in the old BranchL and pack their contents
+// into the new leaf (of type NewJPType), free the old BranchL, and finally
+// restart the switch to delete Index from the new leaf.  (Note that all
+// BranchLs are the same size.)  Variables Pjp, Pjpm, Pleaf, digit, and pop1
+// are in the context.
+
+#define JU_BRANCHL_COMPRESS(cLevel,LeafType,MaxPop1,NewJPType,          \
+                            LeafToLeaf,Alloc,ValueArea,                 \
+                            CopyImmed,CopyIndex)                        \
+        {                                                               \
+            LeafType Pleaf;                                             \
+            Pjbl_t   PjblRaw;                                           \
+            Pjbl_t   Pjbl;                                              \
+            Word_t   numJPs;                                            \
+                                                                        \
+            if ((PjllnewRaw = Alloc(MaxPop1, Pjpm)) == 0) return(-1);   \
+            Pjllnew = P_JLL(PjllnewRaw);                                \
+            Pleaf   = (LeafType) Pjllnew;                               \
+  JUDYLCODE(Pjv     = ValueArea(Pleaf, MaxPop1);)                       \
+                                                                        \
+            PjblRaw = (Pjbl_t) (Pjp->jp_Addr);                          \
+            Pjbl    = P_JBL(PjblRaw);                                   \
+            numJPs  = Pjbl->jbl_NumJPs;                                 \
+                                                                        \
+            for (offset = 0; offset < numJPs; ++offset)                 \
+            {                                                           \
+                CopyImmed(cLevel, (Pjbl->jbl_jp) + offset, CopyIndex);  \
+                                                                        \
+                pop1 = LeafToLeaf(Pleaf, JU_PVALUEPASS                  \
+                          (Pjbl->jbl_jp) + offset,                      \
+                          JU_DIGITTOSTATE(Pjbl->jbl_Expanse[offset],    \
+                          cLevel), (Pvoid_t) Pjpm);                     \
+                Pleaf = (LeafType) (((Word_t) Pleaf) + ((cLevel) * pop1)); \
+      JUDYLCODE(Pjv  += pop1;)                                          \
+            }                                                           \
+            assert(((((Word_t) Pleaf) - ((Word_t) Pjllnew)) / (cLevel)) == (MaxPop1)); \
+  JUDYLCODE(assert((Pjv - ValueArea(Pjllnew, MaxPop1)) == (MaxPop1));)  \
+            DBGCODE(JudyCheckSorted(Pjllnew, MaxPop1, cLevel);)         \
+                                                                        \
+            j__udyFreeJBL(PjblRaw, Pjpm);                               \
+                                                                        \
+            Pjp->jp_Type = (NewJPType);                                 \
+            Pjp->jp_Addr = (Word_t) PjllnewRaw;                         \
+            goto ContinueDelWalk;       /* delete from new leaf */      \
+        }
+
+// Overall common code for initial BranchL deletion handling:
+//
+// Assert that Index is in the branch, then see if the BranchL should be kept
+// or else compressed to a leaf.  Variables Index, Pjp, and pop1 are in the
+// context.
+
+#define JU_BRANCHL(cLevel,MaxPop1,LeafType,NewJPType,                   \
+                   LeafToLeaf,Alloc,ValueArea,CopyImmed,CopyIndex)      \
+                                                                        \
+        assert(! JU_DCDNOTMATCHINDEX(Index, Pjp, cLevel));              \
+        assert(ParentLevel > (cLevel));                                 \
+                                                                        \
+        pop1 = JU_JPBRANCH_POP0(Pjp, cLevel) + 1;                       \
+        JU_BRANCH_KEEP(cLevel, MaxPop1, BranchLKeep);                   \
+        assert(pop1 == (MaxPop1));                                      \
+                                                                        \
+        JU_BRANCHL_COMPRESS(cLevel, LeafType, MaxPop1, NewJPType,       \
+                            LeafToLeaf, Alloc, ValueArea, CopyImmed, CopyIndex)
+
+
+// END OF MACROS, START OF CASES:
+
+        case cJU_JPBRANCH_L2:
+
+            JU_BRANCHL(2, cJU_LEAF2_MAXPOP1, uint16_t *, cJU_JPLEAF2,
+                       j__udyLeaf1ToLeaf2, j__udyAllocJLL2, JL_LEAF2VALUEAREA,
+                       JU_BRANCH_COPY_IMMED_EVEN, ignore);
+
+        case cJU_JPBRANCH_L3:
+
+            JU_BRANCHL(3, cJU_LEAF3_MAXPOP1, uint8_t *, cJU_JPLEAF3,
+                       j__udyLeaf2ToLeaf3, j__udyAllocJLL3, JL_LEAF3VALUEAREA,
+                       JU_BRANCH_COPY_IMMED_ODD, JU_COPY3_LONG_TO_PINDEX);
+
+#ifdef JU_64BIT
+        case cJU_JPBRANCH_L4:
+
+            JU_BRANCHL(4, cJU_LEAF4_MAXPOP1, uint32_t *, cJU_JPLEAF4,
+                       j__udyLeaf3ToLeaf4, j__udyAllocJLL4, JL_LEAF4VALUEAREA,
+                       JU_BRANCH_COPY_IMMED_EVEN, ignore);
+
+        case cJU_JPBRANCH_L5:
+
+            JU_BRANCHL(5, cJU_LEAF5_MAXPOP1, uint8_t *, cJU_JPLEAF5,
+                       j__udyLeaf4ToLeaf5, j__udyAllocJLL5, JL_LEAF5VALUEAREA,
+                       JU_BRANCH_COPY_IMMED_ODD, JU_COPY5_LONG_TO_PINDEX);
+
+        case cJU_JPBRANCH_L6:
+
+            JU_BRANCHL(6, cJU_LEAF6_MAXPOP1, uint8_t *, cJU_JPLEAF6,
+                       j__udyLeaf5ToLeaf6, j__udyAllocJLL6, JL_LEAF6VALUEAREA,
+                       JU_BRANCH_COPY_IMMED_ODD, JU_COPY6_LONG_TO_PINDEX);
+
+        case cJU_JPBRANCH_L7:
+
+            JU_BRANCHL(7, cJU_LEAF7_MAXPOP1, uint8_t *, cJU_JPLEAF7,
+                       j__udyLeaf6ToLeaf7, j__udyAllocJLL7, JL_LEAF7VALUEAREA,
+                       JU_BRANCH_COPY_IMMED_ODD, JU_COPY7_LONG_TO_PINDEX);
+#endif // JU_64BIT
+
+// A top-level BranchL is different and cannot use JU_BRANCHL():  Dont try to
+// compress to a (LEAFW) leaf yet, but leave this for a later deletion
+// (hysteresis > 0); and the next JP type depends on the system word size; so
+// dont use JU_BRANCH_KEEP():
+
+        case cJU_JPBRANCH_L:
+        {
+            Pjbl_t Pjbl;
+            Word_t numJPs;
+
+            level = cJU_ROOTSTATE;
+            digit = JU_DIGITATSTATE(Index, cJU_ROOTSTATE);
+
+            // fall through:
+
+
+// COMMON CODE FOR KEEPING AND DESCENDING THROUGH A BRANCHL:
+//
+// Come here with level and digit set.
+
+BranchLKeep:
+            Pjbl   = P_JBL(Pjp->jp_Addr);
+            numJPs = Pjbl->jbl_NumJPs;
+            assert(numJPs > 0);
+            DBGCODE(parentJPtype = JU_JPTYPE(Pjp);)
+
+// Search for a match to the digit (valid Index => must find digit):
+
+            for (offset = 0; (Pjbl->jbl_Expanse[offset]) != digit; ++offset)
+                assert(offset < numJPs - 1);
+
+            Pjp = (Pjbl->jbl_jp) + offset;
+
+// If not at a (deletable) JPIMMED_*_01, continue the walk (to descend through
+// the BranchL):
+
+            assert(level >= 2);
+            if ((JU_JPTYPE(Pjp)) != cJU_JPIMMED_1_01 + level - 2) break;
+
+// At JPIMMED_*_01:  Ensure the index is in the right expanse, then delete the
+// Immed from the BranchL:
+//
+// Note:  A BranchL has a fixed size and format regardless of numJPs.
+
+            assert(JU_JPDCDPOP0(Pjp) == JU_TRIMTODCDSIZE(Index));
+
+            JU_DELETEINPLACE(Pjbl->jbl_Expanse, numJPs, offset, ignore);
+            JU_DELETEINPLACE(Pjbl->jbl_jp,      numJPs, offset, ignore);
+
+            DBGCODE(JudyCheckSorted((Pjll_t) (Pjbl->jbl_Expanse),
+                                    numJPs - 1, 1);)
+
+// If only one index left in the BranchL, indicate this to the caller:
+
+            return ((--(Pjbl->jbl_NumJPs) <= 1) ? 2 : 1);
+
+        } // case cJU_JPBRANCH_L.
+
+
+// ****************************************************************************
+// BITMAP BRANCH:
+//
+// MACROS FOR COMMON CODE:
+//
+// Note the reuse of common macros here, defined earlier:  JU_BRANCH_KEEP(),
+// JU_PVALUE*.
+//
+// Compress a BranchB into a leaf one index size larger:
+//
+// Allocate a new leaf, walk the JPs in the old BranchB (one bitmap subexpanse
+// at a time) and pack their contents into the new leaf (of type NewJPType),
+// free the old BranchB, and finally restart the switch to delete Index from
+// the new leaf.  Variables Pjp, Pjpm, Pleaf, digit, and pop1 are in the
+// context.
+//
+// Note:  Its no accident that the interface to JU_BRANCHB_COMPRESS() is
+// identical to JU_BRANCHL_COMPRESS().  Only the details differ in how to
+// traverse the branchs JPs.
+
+#define JU_BRANCHB_COMPRESS(cLevel,LeafType,MaxPop1,NewJPType,          \
+                            LeafToLeaf,Alloc,ValueArea,                 \
+                            CopyImmed,CopyIndex)                        \
+        {                                                               \
+            LeafType  Pleaf;                                            \
+            Pjbb_t    PjbbRaw;  /* BranchB to compress */               \
+            Pjbb_t    Pjbb;                                             \
+            Word_t    subexp;   /* current subexpanse number    */      \
+            BITMAPB_t bitmap;   /* portion for this subexpanse  */      \
+            Pjp_t     Pjp2Raw;  /* one subexpanses subarray     */      \
+            Pjp_t     Pjp2;                                             \
+                                                                        \
+            if ((PjllnewRaw = Alloc(MaxPop1, Pjpm)) == 0) return(-1);   \
+            Pjllnew = P_JLL(PjllnewRaw);                                \
+            Pleaf   = (LeafType) Pjllnew;                               \
+  JUDYLCODE(Pjv     = ValueArea(Pleaf, MaxPop1);)                       \
+                                                                        \
+            PjbbRaw = (Pjbb_t) (Pjp->jp_Addr);                          \
+            Pjbb    = P_JBB(PjbbRaw);                                   \
+                                                                        \
+            for (subexp = 0; subexp < cJU_NUMSUBEXPB; ++subexp)         \
+            {                                                           \
+                if ((bitmap = JU_JBB_BITMAP(Pjbb, subexp)) == 0)        \
+                    continue;           /* empty subexpanse */          \
+                                                                        \
+                digit   = subexp * cJU_BITSPERSUBEXPB;                  \
+                Pjp2Raw = JU_JBB_PJP(Pjbb, subexp);                     \
+                Pjp2    = P_JP(Pjp2Raw);                                \
+                assert(Pjp2 != (Pjp_t) NULL);                           \
+                                                                        \
+                for (offset = 0; bitmap != 0; bitmap >>= 1, ++digit)    \
+                {                                                       \
+                    if (! (bitmap & 1))                                 \
+                        continue;       /* empty sub-subexpanse */      \
+                                                                        \
+                    ++offset;           /* before any continue */       \
+                                                                        \
+                    CopyImmed(cLevel, Pjp2 + offset - 1, CopyIndex);    \
+                                                                        \
+                    pop1 = LeafToLeaf(Pleaf, JU_PVALUEPASS              \
+                                      Pjp2 + offset - 1,                \
+                                      JU_DIGITTOSTATE(digit, cLevel),   \
+                                      (Pvoid_t) Pjpm);                  \
+                    Pleaf = (LeafType) (((Word_t) Pleaf) + ((cLevel) * pop1)); \
+          JUDYLCODE(Pjv  += pop1;)                                      \
+                }                                                       \
+                j__udyFreeJBBJP(Pjp2Raw, /* pop1 = */ offset, Pjpm);    \
+            }                                                           \
+            assert(((((Word_t) Pleaf) - ((Word_t) Pjllnew)) / (cLevel)) == (MaxPop1)); \
+  JUDYLCODE(assert((Pjv - ValueArea(Pjllnew, MaxPop1)) == (MaxPop1));)  \
+            DBGCODE(JudyCheckSorted(Pjllnew, MaxPop1, cLevel);)         \
+                                                                        \
+            j__udyFreeJBB(PjbbRaw, Pjpm);                               \
+                                                                        \
+            Pjp->jp_Type = (NewJPType);                                 \
+            Pjp->jp_Addr = (Word_t) PjllnewRaw;                         \
+            goto ContinueDelWalk;       /* delete from new leaf */      \
+        }
+
+// Overall common code for initial BranchB deletion handling:
+//
+// Assert that Index is in the branch, then see if the BranchB should be kept
+// or else compressed to a leaf.  Variables Index, Pjp, and pop1 are in the
+// context.
+
+#define JU_BRANCHB(cLevel,MaxPop1,LeafType,NewJPType,                   \
+                   LeafToLeaf,Alloc,ValueArea,CopyImmed,CopyIndex)      \
+                                                                        \
+        assert(! JU_DCDNOTMATCHINDEX(Index, Pjp, cLevel));              \
+        assert(ParentLevel > (cLevel));                                 \
+                                                                        \
+        pop1 = JU_JPBRANCH_POP0(Pjp, cLevel) + 1;                       \
+        JU_BRANCH_KEEP(cLevel, MaxPop1, BranchBKeep);                   \
+        assert(pop1 == (MaxPop1));                                      \
+                                                                        \
+        JU_BRANCHB_COMPRESS(cLevel, LeafType, MaxPop1, NewJPType,       \
+                            LeafToLeaf, Alloc, ValueArea, CopyImmed, CopyIndex)
+
+
+// END OF MACROS, START OF CASES:
+//
+// Note:  Its no accident that the macro calls for these cases is nearly
+// identical to the code for BranchLs.
+
+        case cJU_JPBRANCH_B2:
+
+            JU_BRANCHB(2, cJU_LEAF2_MAXPOP1, uint16_t *, cJU_JPLEAF2,
+                       j__udyLeaf1ToLeaf2, j__udyAllocJLL2, JL_LEAF2VALUEAREA,
+                       JU_BRANCH_COPY_IMMED_EVEN, ignore);
+
+        case cJU_JPBRANCH_B3:
+
+            JU_BRANCHB(3, cJU_LEAF3_MAXPOP1, uint8_t *, cJU_JPLEAF3,
+                       j__udyLeaf2ToLeaf3, j__udyAllocJLL3, JL_LEAF3VALUEAREA,
+                       JU_BRANCH_COPY_IMMED_ODD, JU_COPY3_LONG_TO_PINDEX);
+
+#ifdef JU_64BIT
+        case cJU_JPBRANCH_B4:
+
+            JU_BRANCHB(4, cJU_LEAF4_MAXPOP1, uint32_t *, cJU_JPLEAF4,
+                       j__udyLeaf3ToLeaf4, j__udyAllocJLL4, JL_LEAF4VALUEAREA,
+                       JU_BRANCH_COPY_IMMED_EVEN, ignore);
+
+        case cJU_JPBRANCH_B5:
+
+            JU_BRANCHB(5, cJU_LEAF5_MAXPOP1, uint8_t *, cJU_JPLEAF5,
+                       j__udyLeaf4ToLeaf5, j__udyAllocJLL5, JL_LEAF5VALUEAREA,
+                       JU_BRANCH_COPY_IMMED_ODD, JU_COPY5_LONG_TO_PINDEX);
+
+        case cJU_JPBRANCH_B6:
+
+            JU_BRANCHB(6, cJU_LEAF6_MAXPOP1, uint8_t *, cJU_JPLEAF6,
+                       j__udyLeaf5ToLeaf6, j__udyAllocJLL6, JL_LEAF6VALUEAREA,
+                       JU_BRANCH_COPY_IMMED_ODD, JU_COPY6_LONG_TO_PINDEX);
+
+        case cJU_JPBRANCH_B7:
+
+            JU_BRANCHB(7, cJU_LEAF7_MAXPOP1, uint8_t *, cJU_JPLEAF7,
+                       j__udyLeaf6ToLeaf7, j__udyAllocJLL7, JL_LEAF7VALUEAREA,
+                       JU_BRANCH_COPY_IMMED_ODD, JU_COPY7_LONG_TO_PINDEX);
+#endif // JU_64BIT
+
+// A top-level BranchB is different and cannot use JU_BRANCHB():  Dont try to
+// compress to a (LEAFW) leaf yet, but leave this for a later deletion
+// (hysteresis > 0); and the next JP type depends on the system word size; so
+// dont use JU_BRANCH_KEEP():
+
+        case cJU_JPBRANCH_B:
+        {
+            Pjbb_t    Pjbb;             // BranchB to modify.
+            Word_t    subexp;           // current subexpanse number.
+            Word_t    subexp2;          // in second-level loop.
+            BITMAPB_t bitmap;           // portion for this subexpanse.
+            BITMAPB_t bitmask;          // with digits bit set.
+            Pjp_t     Pjp2Raw;          // one subexpanses subarray.
+            Pjp_t     Pjp2;
+            Word_t    numJPs;           // in one subexpanse.
+
+            level = cJU_ROOTSTATE;
+            digit = JU_DIGITATSTATE(Index, cJU_ROOTSTATE);
+
+            // fall through:
+
+
+// COMMON CODE FOR KEEPING AND DESCENDING THROUGH A BRANCHB:
+//
+// Come here with level and digit set.
+
+BranchBKeep:
+            Pjbb    = P_JBB(Pjp->jp_Addr);
+            subexp  = digit / cJU_BITSPERSUBEXPB;
+            bitmap  = JU_JBB_BITMAP(Pjbb, subexp);
+            bitmask = JU_BITPOSMASKB(digit);
+            assert(bitmap & bitmask);   // Index valid => digits bit is set.
+            DBGCODE(parentJPtype = JU_JPTYPE(Pjp);)
+
+// Compute digits offset into the bitmap, with a fast method if all bits are
+// set:
+
+            offset = ((bitmap == (cJU_FULLBITMAPB)) ?
+                      digit % cJU_BITSPERSUBEXPB :
+                      j__udyCountBitsB(bitmap & JU_MASKLOWEREXC(bitmask)));
+
+            Pjp2Raw = JU_JBB_PJP(Pjbb, subexp);
+            Pjp2    = P_JP(Pjp2Raw);
+            assert(Pjp2 != (Pjp_t) NULL);       // valid subexpanse pointer.
+
+// If not at a (deletable) JPIMMED_*_01, continue the walk (to descend through
+// the BranchB):
+
+            if (JU_JPTYPE(Pjp2 + offset) != cJU_JPIMMED_1_01 + level - 2)
+            {
+                Pjp = Pjp2 + offset;
+                break;
+            }
+
+// At JPIMMED_*_01:  Ensure the index is in the right expanse, then delete the
+// Immed from the BranchB:
+
+            assert(JU_JPDCDPOP0(Pjp2 + offset)
+                   == JU_TRIMTODCDSIZE(Index));
+
+// If only one index is left in the subexpanse, free the JP array:
+
+            if ((numJPs = j__udyCountBitsB(bitmap)) == 1)
+            {
+                j__udyFreeJBBJP(Pjp2Raw, /* pop1 = */ 1, Pjpm);
+                JU_JBB_PJP(Pjbb, subexp) = (Pjp_t) NULL;
+            }
+
+// Shrink JP array in-place:
+
+            else if (JU_BRANCHBJPGROWINPLACE(numJPs - 1))
+            {
+                assert(numJPs > 0);
+                JU_DELETEINPLACE(Pjp2, numJPs, offset, ignore);
+            }
+
+// JP array would end up too large; compress it to a smaller one:
+
+            else
+            {
+                Pjp_t PjpnewRaw;
+                Pjp_t Pjpnew;
+
+                if ((PjpnewRaw = j__udyAllocJBBJP(numJPs - 1, Pjpm))
+                 == (Pjp_t) NULL) return(-1);
+                Pjpnew = P_JP(PjpnewRaw);
+
+                JU_DELETECOPY(Pjpnew, Pjp2, numJPs, offset, ignore);
+                j__udyFreeJBBJP(Pjp2Raw, numJPs, Pjpm);         // old.
+
+                JU_JBB_PJP(Pjbb, subexp) = PjpnewRaw;
+            }
+
+// Clear digits bit in the bitmap:
+
+            JU_JBB_BITMAP(Pjbb, subexp) ^= bitmask;
+
+// If the current subexpanse alone is still too large for a BranchL (with
+// hysteresis = 1), the delete is all done:
+
+            if (numJPs > cJU_BRANCHLMAXJPS) return(1);
+
+// Consider shrinking the current BranchB to a BranchL:
+//
+// Check the numbers of JPs in other subexpanses in the BranchL.  Upon reaching
+// the critical number of numJPs (which could be right at the start; again,
+// with hysteresis = 1), its faster to just watch for any non-empty subexpanse
+// than to count bits in each subexpanse.  Upon finding too many JPs, give up
+// on shrinking the BranchB.
+
+            for (subexp2 = 0; subexp2 < cJU_NUMSUBEXPB; ++subexp2)
+            {
+                if (subexp2 == subexp) continue;  // skip current subexpanse.
+
+                if ((numJPs == cJU_BRANCHLMAXJPS) ?
+                    JU_JBB_BITMAP(Pjbb, subexp2) :
+                    ((numJPs += j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, subexp2)))
+                     > cJU_BRANCHLMAXJPS))
+                {
+                    return(1);          // too many JPs, cannot shrink.
+                }
+            }
+
+// Shrink current BranchB to a BranchL:
+//
+// Note:  In this rare case, ignore the return value, do not pass it to the
+// caller, because the deletion is already successfully completed and the
+// caller(s) must decrement population counts.  The only errors expected from
+// this call are JU_ERRNO_NOMEM and JU_ERRNO_OVERRUN, neither of which is worth
+// forwarding from this point.  See also 4.1, 4.8, and 4.15 of this file.
+
+            (void) j__udyBranchBToBranchL(Pjp, Pjpm);
+            return(1);
+
+        } // case.
+
+
+// ****************************************************************************
+// UNCOMPRESSED BRANCH:
+//
+// MACROS FOR COMMON CODE:
+//
+// Note the reuse of common macros here, defined earlier:  JU_PVALUE*.
+//
+// Compress a BranchU into a leaf one index size larger:
+//
+// Allocate a new leaf, walk the JPs in the old BranchU and pack their contents
+// into the new leaf (of type NewJPType), free the old BranchU, and finally
+// restart the switch to delete Index from the new leaf.  Variables Pjp, Pjpm,
+// digit, and pop1 are in the context.
+//
+// Note:  Its no accident that the interface to JU_BRANCHU_COMPRESS() is
+// nearly identical to JU_BRANCHL_COMPRESS(); just NullJPType is added.  The
+// details differ in how to traverse the branchs JPs --
+//
+// -- and also, what to do upon encountering a cJU_JPIMMED_*_01 JP.  In
+// BranchLs and BranchBs the JP must be deleted, but in a BranchU its merely
+// converted to a null JP, and this is done by other switch cases, so the "keep
+// branch" situation is simpler here and JU_BRANCH_KEEP() is not used.  Also,
+// theres no code to convert a BranchU to a BranchB since counting the JPs in
+// a BranchU is (at least presently) expensive, and besides, keeping around a
+// BranchU is form of hysteresis.
+
+#define JU_BRANCHU_COMPRESS(cLevel,LeafType,MaxPop1,NullJPType,NewJPType,   \
+                            LeafToLeaf,Alloc,ValueArea,CopyImmed,CopyIndex) \
+        {                                                               \
+            LeafType Pleaf;                                             \
+            Pjbu_t PjbuRaw = (Pjbu_t) (Pjp->jp_Addr);                   \
+            Pjp_t  Pjp2    = JU_JBU_PJP0(Pjp);                          \
+            Word_t ldigit;      /* larger than uint8_t */               \
+                                                                        \
+            if ((PjllnewRaw = Alloc(MaxPop1, Pjpm)) == 0) return(-1);   \
+            Pjllnew = P_JLL(PjllnewRaw);                                \
+            Pleaf   = (LeafType) Pjllnew;                               \
+  JUDYLCODE(Pjv     = ValueArea(Pleaf, MaxPop1);)                       \
+                                                                        \
+            for (ldigit = 0; ldigit < cJU_BRANCHUNUMJPS; ++ldigit, ++Pjp2) \
+            {                                                           \
+                /* fast-process common types: */                        \
+                if (JU_JPTYPE(Pjp2) == (NullJPType)) continue;          \
+                CopyImmed(cLevel, Pjp2, CopyIndex);                     \
+                                                                        \
+                pop1 = LeafToLeaf(Pleaf, JU_PVALUEPASS Pjp2,            \
+                                  JU_DIGITTOSTATE(ldigit, cLevel),      \
+                                  (Pvoid_t) Pjpm);                      \
+                Pleaf = (LeafType) (((Word_t) Pleaf) + ((cLevel) * pop1)); \
+      JUDYLCODE(Pjv  += pop1;)                                          \
+            }                                                           \
+            assert(((((Word_t) Pleaf) - ((Word_t) Pjllnew)) / (cLevel)) == (MaxPop1)); \
+  JUDYLCODE(assert((Pjv - ValueArea(Pjllnew, MaxPop1)) == (MaxPop1));)  \
+            DBGCODE(JudyCheckSorted(Pjllnew, MaxPop1, cLevel);)         \
+                                                                        \
+            j__udyFreeJBU(PjbuRaw, Pjpm);                               \
+                                                                        \
+            Pjp->jp_Type = (NewJPType);                                 \
+            Pjp->jp_Addr = (Word_t) PjllnewRaw;                         \
+            goto ContinueDelWalk;       /* delete from new leaf */      \
+        }
+
+// Overall common code for initial BranchU deletion handling:
+//
+// Assert that Index is in the branch, then see if a BranchU should be kept or
+// else compressed to a leaf.  Variables level, Index, Pjp, and pop1 are in the
+// context.
+//
+// Note:  BranchU handling differs from BranchL and BranchB as described above.
+
+#define JU_BRANCHU(cLevel,MaxPop1,LeafType,NullJPType,NewJPType,        \
+                   LeafToLeaf,Alloc,ValueArea,CopyImmed,CopyIndex)      \
+                                                                        \
+        assert(! JU_DCDNOTMATCHINDEX(Index, Pjp, cLevel));              \
+        assert(ParentLevel > (cLevel));                                 \
+        DBGCODE(parentJPtype = JU_JPTYPE(Pjp);)                         \
+                                                                        \
+        pop1 = JU_JPBRANCH_POP0(Pjp, cLevel) + 1;                       \
+                                                                        \
+        if (pop1 > (MaxPop1))   /* hysteresis = 1 */                    \
+        {                                                               \
+            level = (cLevel);                                           \
+            Pjp   = P_JP(Pjp->jp_Addr) + JU_DIGITATSTATE(Index, cLevel);\
+            break;              /* descend to next level */             \
+        }                                                               \
+        assert(pop1 == (MaxPop1));                                      \
+                                                                        \
+        JU_BRANCHU_COMPRESS(cLevel, LeafType, MaxPop1, NullJPType, NewJPType, \
+                            LeafToLeaf, Alloc, ValueArea, CopyImmed, CopyIndex)
+
+
+// END OF MACROS, START OF CASES:
+//
+// Note:  Its no accident that the macro calls for these cases is nearly
+// identical to the code for BranchLs, with the addition of cJU_JPNULL*
+// parameters only needed for BranchUs.
+
+        case cJU_JPBRANCH_U2:
+
+            JU_BRANCHU(2, cJU_LEAF2_MAXPOP1, uint16_t *,
+                       cJU_JPNULL1, cJU_JPLEAF2,
+                       j__udyLeaf1ToLeaf2, j__udyAllocJLL2, JL_LEAF2VALUEAREA,
+                       JU_BRANCH_COPY_IMMED_EVEN, ignore);
+
+        case cJU_JPBRANCH_U3:
+
+            JU_BRANCHU(3, cJU_LEAF3_MAXPOP1, uint8_t *,
+                       cJU_JPNULL2, cJU_JPLEAF3,
+                       j__udyLeaf2ToLeaf3, j__udyAllocJLL3, JL_LEAF3VALUEAREA,
+                       JU_BRANCH_COPY_IMMED_ODD, JU_COPY3_LONG_TO_PINDEX);
+
+#ifdef JU_64BIT
+        case cJU_JPBRANCH_U4:
+
+            JU_BRANCHU(4, cJU_LEAF4_MAXPOP1, uint32_t *,
+                       cJU_JPNULL3, cJU_JPLEAF4,
+                       j__udyLeaf3ToLeaf4, j__udyAllocJLL4, JL_LEAF4VALUEAREA,
+                       JU_BRANCH_COPY_IMMED_EVEN, ignore);
+
+        case cJU_JPBRANCH_U5:
+
+            JU_BRANCHU(5, cJU_LEAF5_MAXPOP1, uint8_t *,
+                       cJU_JPNULL4, cJU_JPLEAF5,
+                       j__udyLeaf4ToLeaf5, j__udyAllocJLL5, JL_LEAF5VALUEAREA,
+                       JU_BRANCH_COPY_IMMED_ODD, JU_COPY5_LONG_TO_PINDEX);
+
+        case cJU_JPBRANCH_U6:
+
+            JU_BRANCHU(6, cJU_LEAF6_MAXPOP1, uint8_t *,
+                       cJU_JPNULL5, cJU_JPLEAF6,
+                       j__udyLeaf5ToLeaf6, j__udyAllocJLL6, JL_LEAF6VALUEAREA,
+                       JU_BRANCH_COPY_IMMED_ODD, JU_COPY6_LONG_TO_PINDEX);
+
+        case cJU_JPBRANCH_U7:
+
+            JU_BRANCHU(7, cJU_LEAF7_MAXPOP1, uint8_t *,
+                       cJU_JPNULL6, cJU_JPLEAF7,
+                       j__udyLeaf6ToLeaf7, j__udyAllocJLL7, JL_LEAF7VALUEAREA,
+                       JU_BRANCH_COPY_IMMED_ODD, JU_COPY7_LONG_TO_PINDEX);
+#endif // JU_64BIT
+
+// A top-level BranchU is different and cannot use JU_BRANCHU():  Dont try to
+// compress to a (LEAFW) leaf yet, but leave this for a later deletion
+// (hysteresis > 0); just descend through the BranchU:
+
+        case cJU_JPBRANCH_U:
+
+            DBGCODE(parentJPtype = JU_JPTYPE(Pjp);)
+
+            level = cJU_ROOTSTATE;
+            Pjp   = P_JP(Pjp->jp_Addr) + JU_DIGITATSTATE(Index, cJU_ROOTSTATE);
+            break;
+
+
+// ****************************************************************************
+// LINEAR LEAF:
+//
+// State transitions while deleting an Index, the inverse of the similar table
+// that appears in JudyIns.c:
+//
+// Note:  In JudyIns.c this table is not needed and does not appear until the
+// Immed handling code; because once a Leaf is reached upon growing the tree,
+// the situation remains simpler, but for deleting indexes, the complexity
+// arises when leaves must compress to Immeds.
+//
+// Note:  There are other transitions possible too, not shown here, such as to
+// a leaf one level higher.
+//
+// (Yes, this is very terse...  Study it and it will make sense.)
+// (Note, parts of this diagram are repeated below for quick reference.)
+//
+//                      reformat JP here for Judy1 only, from word-1 to word-2
+//                                                                     |
+//           JUDY1 && JU_64BIT   JUDY1 || JU_64BIT                     |
+//                                                                     V
+// (*) Leaf1 [[ => 1_15..08 ] => 1_07 => ... => 1_04 ] => 1_03 => 1_02 => 1_01
+//     Leaf2 [[ => 2_07..04 ] => 2_03 => 2_02        ]                 => 2_01
+//     Leaf3 [[ => 3_05..03 ] => 3_02                ]                 => 3_01
+// JU_64BIT only:
+//     Leaf4 [[ => 4_03..02 ]]                                         => 4_01
+//     Leaf5 [[ => 5_03..02 ]]                                         => 5_01
+//     Leaf6 [[ => 6_02     ]]                                         => 6_01
+//     Leaf7 [[ => 7_02     ]]                                         => 7_01
+//
+// (*) For Judy1 & 64-bit, go directly from a LeafB1 to cJU_JPIMMED_1_15; skip
+//     Leaf1, as described in Judy1.h regarding cJ1_JPLEAF1.
+//
+// MACROS FOR COMMON CODE:
+//
+// (De)compress a LeafX into a LeafY one index size (cIS) larger (X+1 = Y):
+//
+// This is only possible when the current leaf is under a narrow pointer
+// ((ParentLevel - 1) > cIS) and its population fits in a higher-level leaf.
+// Variables ParentLevel, pop1, PjllnewRaw, Pjllnew, Pjpm, and Index are in the
+// context.
+//
+// Note:  Doing an "uplevel" doesnt occur until the old leaf can be compressed
+// up one level BEFORE deleting an index; that is, hysteresis = 1.
+//
+// Note:  LeafType, MaxPop1, NewJPType, and Alloc refer to the up-level leaf,
+// not the current leaf.
+//
+// Note:  010327:  Fixed bug where the jp_DcdPopO next-uplevel digit (byte)
+// above the current Pop0 value was not being cleared.  When upleveling, one
+// digit in jp_DcdPopO "moves" from being part of the Dcd subfield to the Pop0
+// subfield, but since a leaf maxpop1 is known to be <= 1 byte in size, the new
+// Pop0 byte should always be zero.  This is easy to overlook because
+// JU_JPLEAF_POP0() "knows" to only use the LSB of Pop0 (for efficiency) and
+// ignore the other bytes...  Until someone uses cJU_POP0MASK() instead of
+// JU_JPLEAF_POP0(), such as in JudyInsertBranch.c.
+//
+// TBD:  Should JudyInsertBranch.c use JU_JPLEAF_POP0() rather than
+// cJU_POP0MASK(), for efficiency?  Does it know for sure its a narrow pointer
+// under the leaf?  Not necessarily.
+
+#define JU_LEAF_UPLEVEL(cIS,LeafType,MaxPop1,NewJPType,LeafToLeaf,      \
+                        Alloc,ValueArea)                                \
+                                                                        \
+        assert(((ParentLevel - 1) == (cIS)) || (pop1 >= (MaxPop1)));    \
+                                                                        \
+        if (((ParentLevel - 1) > (cIS))  /* under narrow pointer */     \
+         && (pop1 == (MaxPop1)))         /* hysteresis = 1       */     \
+        {                                                               \
+            Word_t D_cdP0;                                              \
+            if ((PjllnewRaw = Alloc(MaxPop1, Pjpm)) == 0) return(-1);   \
+            Pjllnew = P_JLL(PjllnewRaw);                                \
+  JUDYLCODE(Pjv     = ValueArea((LeafType) Pjllnew, MaxPop1);)          \
+                                                                        \
+            (void) LeafToLeaf((LeafType) Pjllnew, JU_PVALUEPASS Pjp,    \
+                              Index & cJU_DCDMASK(cIS), /* TBD, Doug says */ \
+                              (Pvoid_t) Pjpm);                          \
+            DBGCODE(JudyCheckSorted(Pjllnew, MaxPop1, cIS + 1);)        \
+                                                                        \
+            D_cdP0 = (~cJU_MASKATSTATE((cIS) + 1)) & JU_JPDCDPOP0(Pjp); \
+            JU_JPSETADT(Pjp, (Word_t)PjllnewRaw, D_cdP0, NewJPType);    \
+            goto ContinueDelWalk;       /* delete from new leaf */      \
+        }
+
+
+// For Leaf3, only support JU_LEAF_UPLEVEL on a 64-bit system, and for Leaf7,
+// there is no JU_LEAF_UPLEVEL:
+//
+// Note:  Theres no way here to go from Leaf3 [Leaf7] to LEAFW on a 32-bit
+// [64-bit] system.  Thats handled in the main code, because its different in
+// that a JPM is involved.
+
+#ifndef JU_64BIT // 32-bit.
+#define JU_LEAF_UPLEVEL64(cIS,LeafType,MaxPop1,NewJPType,LeafToLeaf,    \
+                          Alloc,ValueArea)              // null.
+#else
+#define JU_LEAF_UPLEVEL64(cIS,LeafType,MaxPop1,NewJPType,LeafToLeaf,    \
+                          Alloc,ValueArea)                              \
+        JU_LEAF_UPLEVEL  (cIS,LeafType,MaxPop1,NewJPType,LeafToLeaf,    \
+                          Alloc,ValueArea)
+#define JU_LEAF_UPLEVEL_NONE(cIS,LeafType,MaxPop1,NewJPType,LeafToLeaf, \
+                          Alloc,ValueArea)              // null.
+#endif
+
+// Compress a Leaf* with pop1 = 2, or a JPIMMED_*_02, into a JPIMMED_*_01:
+//
+// Copy whichever Index is NOT being deleted (and assert that the other one is
+// found; Index must be valid).  This requires special handling of the Index
+// bytes (and value area).  Variables Pjp, Index, offset, and Pleaf are in the
+// context, offset is modified to the undeleted Index, and Pjp is modified
+// including jp_Addr.
+
+
+#define JU_TOIMMED_01_EVEN(cIS,ignore1,ignore2)                         \
+{                                                                       \
+        Word_t  D_cdP0;                                                 \
+        Word_t  A_ddr = 0;                                              \
+        uint8_t T_ype = JU_JPTYPE(Pjp);                                 \
+        offset = (Pleaf[0] == JU_LEASTBYTES(Index, cIS)); /* undeleted Ind */ \
+        assert(Pleaf[offset ? 0 : 1] == JU_LEASTBYTES(Index, cIS));     \
+        D_cdP0 = (Index & cJU_DCDMASK(cIS)) | Pleaf[offset];            \
+JUDYLCODE(A_ddr = Pjv[offset];)                                         \
+        JU_JPSETADT(Pjp, A_ddr, D_cdP0, T_ype);                         \
+}
+
+#define JU_TOIMMED_01_ODD(cIS,SearchLeaf,CopyPIndex)                    \
+        {                                                               \
+            Word_t  D_cdP0;                                             \
+            Word_t  A_ddr = 0;                                          \
+            uint8_t T_ype = JU_JPTYPE(Pjp);                             \
+                                                                        \
+            offset = SearchLeaf(Pleaf, 2, Index);                       \
+            assert(offset >= 0);        /* Index must be valid */       \
+            CopyPIndex(D_cdP0, & (Pleaf[offset ? 0 : cIS]));            \
+            D_cdP0 |= Index & cJU_DCDMASK(cIS);                         \
+  JUDYLCODE(A_ddr = Pjv[offset ? 0 : 1];)                               \
+            JU_JPSETADT(Pjp, A_ddr, D_cdP0, T_ype);                     \
+        }
+
+
+// Compress a Leaf* into a JPIMMED_*_0[2+]:
+//
+// This occurs as soon as its possible, with hysteresis = 0.  Variables pop1,
+// Pleaf, offset, and Pjpm are in the context.
+//
+// TBD:  Explain why hysteresis = 0 here, rather than > 0.  Probably because
+// the insert code assumes if the population is small enough, an Immed is used,
+// not a leaf.
+//
+// The differences between Judy1 and JudyL with respect to value area handling
+// are just too large for completely common code between them...  Oh well, some
+// big ifdefs follow.
+
+#ifdef JUDY1
+
+#define JU_LEAF_TOIMMED(cIS,LeafType,MaxPop1,BaseJPType,ignore1,\
+                        ignore2,ignore3,ignore4,                \
+                        DeleteCopy,FreeLeaf)                    \
+                                                                \
+        assert(pop1 > (MaxPop1));                               \
+                                                                \
+        if ((pop1 - 1) == (MaxPop1))    /* hysteresis = 0 */    \
+        {                                                       \
+            Pjll_t PjllRaw = (Pjll_t) (Pjp->jp_Addr);           \
+            DeleteCopy((LeafType) (Pjp->jp_1Index), Pleaf, pop1, offset, cIS); \
+            DBGCODE(JudyCheckSorted((Pjll_t) (Pjp->jp_1Index),  pop1-1, cIS);) \
+            Pjp->jp_Type = (BaseJPType) - 1 + (MaxPop1) - 1;    \
+            FreeLeaf(PjllRaw, pop1, Pjpm);                      \
+            return(1);                                          \
+        }
+
+#else // JUDYL
+
+// Pjv is also in the context.
+
+#define JU_LEAF_TOIMMED(cIS,LeafType,MaxPop1,BaseJPType,ignore1,\
+                        ignore2,ignore3,ignore4,                \
+                        DeleteCopy,FreeLeaf)                    \
+                                                                \
+        assert(pop1 > (MaxPop1));                               \
+                                                                \
+        if ((pop1 - 1) == (MaxPop1))    /* hysteresis = 0 */    \
+        {                                                       \
+            Pjll_t PjllRaw = (Pjll_t) (Pjp->jp_Addr);           \
+            Pjv_t  PjvnewRaw;                                   \
+            Pjv_t  Pjvnew;                                      \
+                                                                \
+            if ((PjvnewRaw = j__udyLAllocJV(pop1 - 1, Pjpm))    \
+                == (Pjv_t) NULL) return(-1);                    \
+   JUDYLCODE(Pjvnew = P_JV(PjvnewRaw);)                         \
+                                                                \
+            DeleteCopy((LeafType) (Pjp->jp_LIndex), Pleaf, pop1, offset, cIS); \
+            JU_DELETECOPY(Pjvnew, Pjv, pop1, offset, cIS);      \
+            DBGCODE(JudyCheckSorted((Pjll_t) (Pjp->jp_LIndex),  pop1-1, cIS);) \
+            FreeLeaf(PjllRaw, pop1, Pjpm);                      \
+            Pjp->jp_Addr = (Word_t) PjvnewRaw;                  \
+            Pjp->jp_Type = (BaseJPType) - 2 + (MaxPop1);        \
+            return(1);                                          \
+        }
+
+// A complicating factor for JudyL & 32-bit is that Leaf2..3, and for JudyL &
+// 64-bit Leaf 4..7, go directly to an Immed*_01, where the value is stored in
+// jp_Addr and not in a separate LeafV.  For efficiency, use the following
+// macro in cases where it can apply; it is rigged to do the right thing.
+// Unfortunately, this requires the calling code to "know" the transition table
+// and call the right macro.
+//
+// This variant compresses a Leaf* with pop1 = 2 into a JPIMMED_*_01:
+
+#define JU_LEAF_TOIMMED_01(cIS,LeafType,MaxPop1,ignore,Immed01JPType,   \
+                           ToImmed,SearchLeaf,CopyPIndex,               \
+                           DeleteCopy,FreeLeaf)                         \
+                                                                        \
+        assert(pop1 > (MaxPop1));                                       \
+                                                                        \
+        if ((pop1 - 1) == (MaxPop1))    /* hysteresis = 0 */            \
+        {                                                               \
+            Pjll_t PjllRaw = (Pjll_t) (Pjp->jp_Addr);                   \
+            ToImmed(cIS, SearchLeaf, CopyPIndex);                       \
+            FreeLeaf(PjllRaw, pop1, Pjpm);                              \
+            Pjp->jp_Type = (Immed01JPType);                             \
+            return(1);                                                  \
+        }
+#endif // JUDYL
+
+// See comments above about these:
+//
+// Note:  Here "23" means index size 2 or 3, and "47" means 4..7.
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+#define JU_LEAF_TOIMMED_23(cIS,LeafType,MaxPop1,BaseJPType,Immed01JPType, \
+                           ToImmed,SearchLeaf,CopyPIndex,               \
+                           DeleteCopy,FreeLeaf)                         \
+        JU_LEAF_TOIMMED(   cIS,LeafType,MaxPop1,BaseJPType,ignore1,     \
+                           ignore2,ignore3,ignore4,                     \
+                           DeleteCopy,FreeLeaf)
+#else // JUDYL && 32-bit
+#define JU_LEAF_TOIMMED_23(cIS,LeafType,MaxPop1,BaseJPType,Immed01JPType, \
+                           ToImmed,SearchLeaf,CopyPIndex,               \
+                           DeleteCopy,FreeLeaf)                         \
+        JU_LEAF_TOIMMED_01(cIS,LeafType,MaxPop1,ignore,Immed01JPType,   \
+                           ToImmed,SearchLeaf,CopyPIndex,               \
+                           DeleteCopy,FreeLeaf)
+#endif
+
+#ifdef JU_64BIT
+#ifdef JUDY1
+#define JU_LEAF_TOIMMED_47(cIS,LeafType,MaxPop1,BaseJPType,Immed01JPType, \
+                           ToImmed,SearchLeaf,CopyPIndex,               \
+                           DeleteCopy,FreeLeaf)                         \
+        JU_LEAF_TOIMMED(   cIS,LeafType,MaxPop1,BaseJPType,ignore1,     \
+                           ignore2,ignore3,ignore4,                     \
+                           DeleteCopy,FreeLeaf)
+#else // JUDYL && 64-bit
+#define JU_LEAF_TOIMMED_47(cIS,LeafType,MaxPop1,BaseJPType,Immed01JPType, \
+                           ToImmed,SearchLeaf,CopyPIndex,               \
+                           DeleteCopy,FreeLeaf)                         \
+        JU_LEAF_TOIMMED_01(cIS,LeafType,MaxPop1,ignore,Immed01JPType,   \
+                           ToImmed,SearchLeaf,CopyPIndex,               \
+                           DeleteCopy,FreeLeaf)
+#endif // JUDYL
+#endif // JU_64BIT
+
+// Compress a Leaf* in place:
+//
+// Here hysteresis = 0 (no memory is wasted).  Variables pop1, Pleaf, and
+// offset, and for JudyL, Pjv, are in the context.
+
+#ifdef JUDY1
+#define JU_LEAF_INPLACE(cIS,GrowInPlace,DeleteInPlace)          \
+        if (GrowInPlace(pop1 - 1))      /* hysteresis = 0 */    \
+        {                                                       \
+            DeleteInPlace(Pleaf, pop1, offset, cIS);            \
+            DBGCODE(JudyCheckSorted(Pleaf, pop1 - 1, cIS);)     \
+            return(1);                                          \
+        }
+#else
+#define JU_LEAF_INPLACE(cIS,GrowInPlace,DeleteInPlace)          \
+        if (GrowInPlace(pop1 - 1))      /* hysteresis = 0 */    \
+        {                                                       \
+            DeleteInPlace(Pleaf, pop1, offset, cIS);            \
+/**/        JU_DELETEINPLACE(Pjv, pop1, offset, ignore);        \
+            DBGCODE(JudyCheckSorted(Pleaf, pop1 - 1, cIS);)     \
+            return(1);                                          \
+        }
+#endif
+
+// Compress a Leaf* into a smaller memory object of the same JP type:
+//
+// Variables PjllnewRaw, Pjllnew, Pleafpop1, Pjpm, PleafRaw, Pleaf, and offset
+// are in the context.
+
+#ifdef JUDY1
+
+#define JU_LEAF_SHRINK(cIS,LeafType,DeleteCopy,Alloc,FreeLeaf,ValueArea) \
+        if ((PjllnewRaw = Alloc(pop1 - 1, Pjpm)) == 0) return(-1);       \
+        Pjllnew = P_JLL(PjllnewRaw);                                     \
+        DeleteCopy((LeafType) Pjllnew, Pleaf, pop1, offset, cIS);        \
+        DBGCODE(JudyCheckSorted(Pjllnew, pop1 - 1, cIS);)                \
+        FreeLeaf(PleafRaw, pop1, Pjpm);                                  \
+        Pjp->jp_Addr = (Word_t) PjllnewRaw;                              \
+        return(1)
+
+#else // JUDYL
+
+#define JU_LEAF_SHRINK(cIS,LeafType,DeleteCopy,Alloc,FreeLeaf,ValueArea) \
+        {                                                               \
+/**/        Pjv_t Pjvnew;                                               \
+                                                                        \
+            if ((PjllnewRaw = Alloc(pop1 - 1, Pjpm)) == 0) return(-1);  \
+            Pjllnew = P_JLL(PjllnewRaw);                                \
+/**/        Pjvnew  = ValueArea(Pjllnew, pop1 - 1);                     \
+            DeleteCopy((LeafType) Pjllnew, Pleaf, pop1, offset, cIS);   \
+/**/        JU_DELETECOPY(Pjvnew, Pjv, pop1, offset, cIS);              \
+            DBGCODE(JudyCheckSorted(Pjllnew, pop1 - 1, cIS);)           \
+            FreeLeaf(PleafRaw, pop1, Pjpm);                             \
+            Pjp->jp_Addr = (Word_t) PjllnewRaw;                         \
+            return(1);                                                  \
+        }
+#endif // JUDYL
+
+// Overall common code for Leaf* deletion handling:
+//
+// See if the leaf can be:
+// - (de)compressed to one a level higher (JU_LEAF_UPLEVEL()), or if not,
+// - compressed to an Immediate JP (JU_LEAF_TOIMMED()), or if not,
+// - shrunk in place (JU_LEAF_INPLACE()), or if none of those, then
+// - shrink the leaf to a smaller chunk of memory (JU_LEAF_SHRINK()).
+//
+// Variables Pjp, pop1, Index, and offset are in the context.
+// The *Up parameters refer to a leaf one level up, if there is any.
+
+#define JU_LEAF(cIS,                                                    \
+                UpLevel,                                                \
+                  LeafTypeUp,MaxPop1Up,LeafJPTypeUp,LeafToLeaf,         \
+                  AllocUp,ValueAreaUp,                                  \
+                LeafToImmed,ToImmed,CopyPIndex,                         \
+                  LeafType,ImmedMaxPop1,ImmedBaseJPType,Immed01JPType,  \
+                  SearchLeaf,GrowInPlace,DeleteInPlace,DeleteCopy,      \
+                  Alloc,FreeLeaf,ValueArea)                             \
+        {                                                               \
+            Pjll_t   PleafRaw;                                          \
+            LeafType Pleaf;                                             \
+                                                                        \
+            assert(! JU_DCDNOTMATCHINDEX(Index, Pjp, cIS));             \
+            assert(ParentLevel > (cIS));                                \
+                                                                        \
+            PleafRaw = (Pjll_t) (Pjp->jp_Addr);                         \
+            Pleaf    = (LeafType) P_JLL(PleafRaw);                      \
+            pop1     = JU_JPLEAF_POP0(Pjp) + 1;                         \
+                                                                        \
+            UpLevel(cIS, LeafTypeUp, MaxPop1Up, LeafJPTypeUp,           \
+                    LeafToLeaf, AllocUp, ValueAreaUp);                  \
+                                                                        \
+            offset = SearchLeaf(Pleaf, pop1, Index);                    \
+            assert(offset >= 0);        /* Index must be valid */       \
+  JUDYLCODE(Pjv = ValueArea(Pleaf, pop1);)                              \
+                                                                        \
+            LeafToImmed(cIS, LeafType, ImmedMaxPop1,                    \
+                        ImmedBaseJPType, Immed01JPType,                 \
+                        ToImmed, SearchLeaf, CopyPIndex,                \
+                        DeleteCopy, FreeLeaf);                          \
+                                                                        \
+            JU_LEAF_INPLACE(cIS, GrowInPlace, DeleteInPlace);           \
+                                                                        \
+            JU_LEAF_SHRINK(cIS, LeafType, DeleteCopy, Alloc, FreeLeaf,  \
+                           ValueArea);                                  \
+        }
+
+// END OF MACROS, START OF CASES:
+//
+// (*) Leaf1 [[ => 1_15..08 ] => 1_07 => ... => 1_04 ] => 1_03 => 1_02 => 1_01
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+        case cJU_JPLEAF1:
+
+            JU_LEAF(1,
+                    JU_LEAF_UPLEVEL, uint16_t *, cJU_LEAF2_MAXPOP1, cJU_JPLEAF2,
+                      j__udyLeaf1ToLeaf2, j__udyAllocJLL2, JL_LEAF2VALUEAREA,
+                    JU_LEAF_TOIMMED, ignore, ignore,
+                      uint8_t *, cJU_IMMED1_MAXPOP1,
+                      cJU_JPIMMED_1_02, cJU_JPIMMED_1_01, j__udySearchLeaf1,
+                      JU_LEAF1GROWINPLACE, JU_DELETEINPLACE, JU_DELETECOPY,
+                      j__udyAllocJLL1, j__udyFreeJLL1, JL_LEAF1VALUEAREA);
+#endif
+
+// A complicating factor is that for JudyL & 32-bit, a Leaf2 must go directly
+// to an Immed 2_01 and a Leaf3 must go directly to an Immed 3_01:
+//
+// Leaf2 [[ => 2_07..04 ] => 2_03 => 2_02 ] => 2_01
+// Leaf3 [[ => 3_05..03 ] => 3_02         ] => 3_01
+//
+// Hence use JU_LEAF_TOIMMED_23 instead of JU_LEAF_TOIMMED in the cases below,
+// and also the parameters ToImmed and, for odd index sizes, CopyPIndex, are
+// required.
+
+        case cJU_JPLEAF2:
+
+            JU_LEAF(2,
+                    JU_LEAF_UPLEVEL, uint8_t *, cJU_LEAF3_MAXPOP1, cJU_JPLEAF3,
+                      j__udyLeaf2ToLeaf3, j__udyAllocJLL3, JL_LEAF3VALUEAREA,
+                    JU_LEAF_TOIMMED_23, JU_TOIMMED_01_EVEN, ignore,
+                      uint16_t *, cJU_IMMED2_MAXPOP1,
+                      cJU_JPIMMED_2_02, cJU_JPIMMED_2_01, j__udySearchLeaf2,
+                      JU_LEAF2GROWINPLACE, JU_DELETEINPLACE, JU_DELETECOPY,
+                      j__udyAllocJLL2, j__udyFreeJLL2, JL_LEAF2VALUEAREA);
+
+// On 32-bit there is no transition to "uplevel" for a Leaf3, so use
+// JU_LEAF_UPLEVEL64 instead of JU_LEAF_UPLEVEL:
+
+        case cJU_JPLEAF3:
+
+            JU_LEAF(3,
+                    JU_LEAF_UPLEVEL64, uint32_t *, cJU_LEAF4_MAXPOP1,
+                      cJU_JPLEAF4,
+                      j__udyLeaf3ToLeaf4, j__udyAllocJLL4, JL_LEAF4VALUEAREA,
+                    JU_LEAF_TOIMMED_23,
+                      JU_TOIMMED_01_ODD, JU_COPY3_PINDEX_TO_LONG,
+                      uint8_t *, cJU_IMMED3_MAXPOP1,
+                      cJU_JPIMMED_3_02, cJU_JPIMMED_3_01, j__udySearchLeaf3,
+                      JU_LEAF3GROWINPLACE, JU_DELETEINPLACE_ODD,
+                                           JU_DELETECOPY_ODD,
+                      j__udyAllocJLL3, j__udyFreeJLL3, JL_LEAF3VALUEAREA);
+
+#ifdef JU_64BIT
+
+// A complicating factor is that for JudyL & 64-bit, a Leaf[4-7] must go
+// directly to an Immed [4-7]_01:
+//
+// Leaf4 [[ => 4_03..02 ]] => 4_01
+// Leaf5 [[ => 5_03..02 ]] => 5_01
+// Leaf6 [[ => 6_02     ]] => 6_01
+// Leaf7 [[ => 7_02     ]] => 7_01
+//
+// Hence use JU_LEAF_TOIMMED_47 instead of JU_LEAF_TOIMMED in the cases below.
+
+        case cJU_JPLEAF4:
+
+            JU_LEAF(4,
+                    JU_LEAF_UPLEVEL, uint8_t *, cJU_LEAF5_MAXPOP1, cJU_JPLEAF5,
+                      j__udyLeaf4ToLeaf5, j__udyAllocJLL5, JL_LEAF5VALUEAREA,
+                    JU_LEAF_TOIMMED_47, JU_TOIMMED_01_EVEN, ignore,
+                      uint32_t *, cJU_IMMED4_MAXPOP1,
+                      cJ1_JPIMMED_4_02, cJU_JPIMMED_4_01, j__udySearchLeaf4,
+                      JU_LEAF4GROWINPLACE, JU_DELETEINPLACE, JU_DELETECOPY,
+                      j__udyAllocJLL4, j__udyFreeJLL4, JL_LEAF4VALUEAREA);
+
+        case cJU_JPLEAF5:
+
+            JU_LEAF(5,
+                    JU_LEAF_UPLEVEL, uint8_t *, cJU_LEAF6_MAXPOP1, cJU_JPLEAF6,
+                      j__udyLeaf5ToLeaf6, j__udyAllocJLL6, JL_LEAF6VALUEAREA,
+                    JU_LEAF_TOIMMED_47,
+                      JU_TOIMMED_01_ODD, JU_COPY5_PINDEX_TO_LONG,
+                      uint8_t *, cJU_IMMED5_MAXPOP1,
+                      cJ1_JPIMMED_5_02, cJU_JPIMMED_5_01, j__udySearchLeaf5,
+                      JU_LEAF5GROWINPLACE, JU_DELETEINPLACE_ODD,
+                                           JU_DELETECOPY_ODD,
+                      j__udyAllocJLL5, j__udyFreeJLL5, JL_LEAF5VALUEAREA);
+
+        case cJU_JPLEAF6:
+
+            JU_LEAF(6,
+                    JU_LEAF_UPLEVEL, uint8_t *, cJU_LEAF7_MAXPOP1, cJU_JPLEAF7,
+                      j__udyLeaf6ToLeaf7, j__udyAllocJLL7, JL_LEAF7VALUEAREA,
+                    JU_LEAF_TOIMMED_47,
+                      JU_TOIMMED_01_ODD, JU_COPY6_PINDEX_TO_LONG,
+                      uint8_t *, cJU_IMMED6_MAXPOP1,
+                      cJ1_JPIMMED_6_02, cJU_JPIMMED_6_01, j__udySearchLeaf6,
+                      JU_LEAF6GROWINPLACE, JU_DELETEINPLACE_ODD,
+                                           JU_DELETECOPY_ODD,
+                      j__udyAllocJLL6, j__udyFreeJLL6, JL_LEAF6VALUEAREA);
+
+// There is no transition to "uplevel" for a Leaf7, so use JU_LEAF_UPLEVEL_NONE
+// instead of JU_LEAF_UPLEVEL, and ignore all of the parameters to that macro:
+
+        case cJU_JPLEAF7:
+
+            JU_LEAF(7,
+                    JU_LEAF_UPLEVEL_NONE, ignore1, ignore2, ignore3, ignore4,
+                      ignore5, ignore6,
+                    JU_LEAF_TOIMMED_47,
+                      JU_TOIMMED_01_ODD, JU_COPY7_PINDEX_TO_LONG,
+                      uint8_t *, cJU_IMMED7_MAXPOP1,
+                      cJ1_JPIMMED_7_02, cJU_JPIMMED_7_01, j__udySearchLeaf7,
+                      JU_LEAF7GROWINPLACE, JU_DELETEINPLACE_ODD,
+                                           JU_DELETECOPY_ODD,
+                      j__udyAllocJLL7, j__udyFreeJLL7, JL_LEAF7VALUEAREA);
+#endif // JU_64BIT
+
+
+// ****************************************************************************
+// BITMAP LEAF:
+
+        case cJU_JPLEAF_B1:
+        {
+#ifdef JUDYL
+            Pjv_t     PjvnewRaw;        // new value area.
+            Pjv_t     Pjvnew;
+            Word_t    subexp;           // 1 of 8 subexpanses in bitmap.
+            Pjlb_t    Pjlb;             // pointer to bitmap part of the leaf.
+            BITMAPL_t bitmap;           // for one subexpanse.
+            BITMAPL_t bitmask;          // bit set for Indexs digit.
+#endif
+            assert(! JU_DCDNOTMATCHINDEX(Index, Pjp, 1));
+            assert(ParentLevel > 1);
+            // valid Index:
+            assert(JU_BITMAPTESTL(P_JLB(Pjp->jp_Addr), Index));
+
+            pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+
+// Like a Leaf1, see if its under a narrow pointer and can become a Leaf2
+// (hysteresis = 1):
+
+            JU_LEAF_UPLEVEL(1, uint16_t *, cJU_LEAF2_MAXPOP1, cJU_JPLEAF2,
+                            j__udyLeaf1ToLeaf2, j__udyAllocJLL2,
+                            JL_LEAF2VALUEAREA);
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+
+// Handle the unusual special case, on Judy1 64-bit only, where a LeafB1 goes
+// directly to a JPIMMED_1_15; as described in comments in Judy1.h and
+// JudyIns.c.  Copy 1-byte indexes from old LeafB1 to the Immed:
+
+            if ((pop1 - 1) == cJU_IMMED1_MAXPOP1)       // hysteresis = 0.
+            {
+                Pjlb_t    PjlbRaw;      // bitmap in old leaf.
+                Pjlb_t    Pjlb;
+                uint8_t * Pleafnew;     // JPIMMED as a pointer.
+                Word_t    ldigit;       // larger than uint8_t.
+
+                PjlbRaw  = (Pjlb_t) (Pjp->jp_Addr);
+                Pjlb     = P_JLB(PjlbRaw);
+                Pleafnew = Pjp->jp_1Index;
+
+                JU_BITMAPCLEARL(Pjlb, Index);   // unset Indexs bit.
+
+// TBD:  This is very slow, there must be a better way:
+
+                for (ldigit = 0; ldigit < cJU_BRANCHUNUMJPS; ++ldigit)
+                {
+                    if (JU_BITMAPTESTL(Pjlb, ldigit))
+                    {
+                        *Pleafnew++ = ldigit;
+                        assert(Pleafnew - (Pjp->jp_1Index)
+                            <= cJU_IMMED1_MAXPOP1);
+                    }
+                }
+
+                DBGCODE(JudyCheckSorted((Pjll_t) (Pjp->jp_1Index),
+                                        cJU_IMMED1_MAXPOP1, 1);)
+                j__udyFreeJLB1(PjlbRaw, Pjpm);
+
+                Pjp->jp_Type = cJ1_JPIMMED_1_15;
+                return(1);
+            }
+
+#else // (JUDYL || (! JU_64BIT))
+
+// Compress LeafB1 to a Leaf1:
+//
+// Note:  4.37 of this file contained alternate code for Judy1 only that simply
+// cleared the bit and allowed the LeafB1 to go below cJU_LEAF1_MAXPOP1.  This
+// was the ONLY case where a malloc failure was not fatal; however, it violated
+// the critical assumption that the tree is always kept in least-compressed
+// form.
+
+            if (pop1 == cJU_LEAF1_MAXPOP1)      // hysteresis = 1.
+            {
+                if (j__udyLeafB1ToLeaf1(Pjp, Pjpm) == -1) return(-1);
+                goto ContinueDelWalk;   // delete Index in new Leaf1.
+            }
+#endif // (JUDYL || (! JU_64BIT))
+
+#ifdef JUDY1
+            // unset Indexs bit:
+
+            JU_BITMAPCLEARL(P_JLB(Pjp->jp_Addr), Index);
+#else // JUDYL
+
+// This is very different from Judy1 because of the need to manage the value
+// area:
+//
+// Get last byte to decode from Index, and pointer to bitmap leaf:
+
+            digit = JU_DIGITATSTATE(Index, 1);
+            Pjlb = P_JLB(Pjp->jp_Addr);
+
+// Prepare additional values:
+
+            subexp  = digit / cJU_BITSPERSUBEXPL;       // which subexpanse.
+            bitmap  = JU_JLB_BITMAP(Pjlb, subexp);      // subexps 32-bit map.
+            PjvRaw  = JL_JLB_PVALUE(Pjlb, subexp);      // corresponding values.
+            Pjv     = P_JV(PjvRaw);
+            bitmask = JU_BITPOSMASKL(digit);            // mask for Index.
+
+            assert(bitmap & bitmask);                   // Index must be valid.
+
+            if (bitmap == cJU_FULLBITMAPL)      // full bitmap, take shortcut:
+            {
+                pop1   = cJU_BITSPERSUBEXPL;
+                offset = digit % cJU_BITSPERSUBEXPL;
+            }
+            else        // compute subexpanse pop1 and value area offset:
+            {
+                pop1   = j__udyCountBitsL(bitmap);
+                offset = j__udyCountBitsL(bitmap & (bitmask - 1));
+            }
+
+// Handle solitary Index remaining in subexpanse:
+
+            if (pop1 == 1)
+            {
+                j__udyLFreeJV(PjvRaw, 1, Pjpm);
+
+                JL_JLB_PVALUE(Pjlb, subexp) = (Pjv_t) NULL;
+                JU_JLB_BITMAP(Pjlb, subexp) = 0;
+
+                return(1);
+            }
+
+// Shrink value area in place or move to a smaller value area:
+
+            if (JL_LEAFVGROWINPLACE(pop1 - 1))          // hysteresis = 0.
+            {
+                JU_DELETEINPLACE(Pjv, pop1, offset, ignore);
+            }
+            else
+            {
+                if ((PjvnewRaw = j__udyLAllocJV(pop1 - 1, Pjpm))
+                    == (Pjv_t) NULL) return(-1);
+                Pjvnew = P_JV(PjvnewRaw);
+
+                JU_DELETECOPY(Pjvnew, Pjv, pop1, offset, ignore);
+                j__udyLFreeJV(PjvRaw, pop1, Pjpm);
+                JL_JLB_PVALUE(Pjlb, subexp) = (Pjv_t) PjvnewRaw;
+            }
+
+            JU_JLB_BITMAP(Pjlb, subexp) ^= bitmask;     // clear Indexs bit.
+
+#endif // JUDYL
+
+            return(1);
+
+        } // case.
+
+
+#ifdef JUDY1
+
+// ****************************************************************************
+// FULL POPULATION LEAF:
+//
+// Convert to a LeafB1 and delete the index.  Hysteresis = 0; none is possible.
+//
+// Note:  Earlier the second assertion below said, "== 2", but in fact the
+// parent could be at a higher level if a fullpop is under a narrow pointer.
+
+        case cJ1_JPFULLPOPU1:
+        {
+            Pjlb_t PjlbRaw;
+            Pjlb_t Pjlb;
+            Word_t subexp;
+
+            assert(! JU_DCDNOTMATCHINDEX(Index, Pjp, 2));
+            assert(ParentLevel > 1);    // see above.
+
+            if ((PjlbRaw = j__udyAllocJLB1(Pjpm)) == (Pjlb_t) NULL)
+                return(-1);
+            Pjlb = P_JLB(PjlbRaw);
+
+// Fully populate the leaf, then unset Indexs bit:
+
+            for (subexp = 0; subexp < cJU_NUMSUBEXPL; ++subexp)
+                JU_JLB_BITMAP(Pjlb, subexp) = cJU_FULLBITMAPL;
+
+            JU_BITMAPCLEARL(Pjlb, Index);
+
+            Pjp->jp_Addr = (Word_t) PjlbRaw;
+            Pjp->jp_Type = cJU_JPLEAF_B1;
+
+            return(1);
+        }
+#endif // JUDY1
+
+
+// ****************************************************************************
+// IMMEDIATE JP:
+//
+// If theres just the one Index in the Immed, convert the JP to a JPNULL*
+// (should only happen in a BranchU); otherwise delete the Index from the
+// Immed.  See the state transitions table elsewhere in this file for a summary
+// of which Immed types must be handled.  Hysteresis = 0; none is possible with
+// Immeds.
+//
+// MACROS FOR COMMON CODE:
+//
+// Single Index remains in cJU_JPIMMED_*_01; convert JP to null:
+//
+// Variables Pjp and parentJPtype are in the context.
+//
+// Note:  cJU_JPIMMED_*_01 should only be encountered in BranchUs, not in
+// BranchLs or BranchBs (where its improper to merely modify the JP to be a
+// null JP); that is, BranchL and BranchB code should have already handled
+// any cJU_JPIMMED_*_01 by different means.
+
+#define JU_IMMED_01(NewJPType,ParentJPType)                             \
+                                                                        \
+            assert(parentJPtype == (ParentJPType));                     \
+            assert(JU_JPDCDPOP0(Pjp) == JU_TRIMTODCDSIZE(Index));       \
+            JU_JPSETADT(Pjp, 0, 0, NewJPType);                          \
+            return(1)
+
+// Convert cJ*_JPIMMED_*_02 to cJU_JPIMMED_*_01:
+//
+// Move the undeleted Index, whichever does not match the least bytes of Index,
+// from undecoded-bytes-only (in jp_1Index or jp_LIndex as appropriate) to
+// jp_DcdPopO (full-field).  Pjp, Index, and offset are in the context.
+
+#define JU_IMMED_02(cIS,LeafType,NewJPType)             \
+        {                                               \
+            LeafType Pleaf;                             \
+                                                        \
+            assert((ParentLevel - 1) == (cIS));         \
+  JUDY1CODE(Pleaf  = (LeafType) (Pjp->jp_1Index);)      \
+  JUDYLCODE(Pleaf  = (LeafType) (Pjp->jp_LIndex);)      \
+  JUDYLCODE(PjvRaw = (Pjv_t) (Pjp->jp_Addr);)           \
+  JUDYLCODE(Pjv    = P_JV(PjvRaw);)                     \
+            JU_TOIMMED_01_EVEN(cIS, ignore, ignore);    \
+  JUDYLCODE(j__udyLFreeJV(PjvRaw, 2, Pjpm);)            \
+            Pjp->jp_Type = (NewJPType);                 \
+            return(1);                                  \
+        }
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+
+// Variation for "odd" cJ*_JPIMMED_*_02 JP types, which are very different from
+// "even" types because they use leaf search code and odd-copy macros:
+//
+// Note:  JudyL 32-bit has no "odd" JPIMMED_*_02 types.
+
+#define JU_IMMED_02_ODD(cIS,NewJPType,SearchLeaf,CopyPIndex)    \
+        {                                                       \
+            uint8_t * Pleaf;                                    \
+                                                                \
+            assert((ParentLevel - 1) == (cIS));                 \
+  JUDY1CODE(Pleaf  = (uint8_t *) (Pjp->jp_1Index);)             \
+  JUDYLCODE(Pleaf  = (uint8_t *) (Pjp->jp_LIndex);)             \
+  JUDYLCODE(PjvRaw = (Pjv_t) (Pjp->jp_Addr);)                   \
+  JUDYLCODE(Pjv    = P_JV(PjvRaw);)                             \
+            JU_TOIMMED_01_ODD(cIS, SearchLeaf, CopyPIndex);     \
+  JUDYLCODE(j__udyLFreeJV(PjvRaw, 2, Pjpm);)                    \
+            Pjp->jp_Type = (NewJPType);                         \
+            return(1);                                          \
+        }
+#endif // (JUDY1 || JU_64BIT)
+
+// Core code for deleting one Index (and for JudyL, its value area) from a
+// larger Immed:
+//
+// Variables Pleaf, pop1, and offset are in the context.
+
+#ifdef JUDY1
+#define JU_IMMED_DEL(cIS,DeleteInPlace)                 \
+        DeleteInPlace(Pleaf, pop1, offset, cIS);        \
+        DBGCODE(JudyCheckSorted(Pleaf, pop1 - 1, cIS);)
+
+#else // JUDYL
+
+// For JudyL the value area might need to be shrunk:
+
+#define JU_IMMED_DEL(cIS,DeleteInPlace)                         \
+                                                                \
+        if (JL_LEAFVGROWINPLACE(pop1 - 1)) /* hysteresis = 0 */ \
+        {                                                       \
+            DeleteInPlace(   Pleaf,  pop1, offset, cIS);        \
+            JU_DELETEINPLACE(Pjv, pop1, offset, ignore);        \
+            DBGCODE(JudyCheckSorted(Pleaf, pop1 - 1, cIS);)     \
+        }                                                       \
+        else                                                    \
+        {                                                       \
+            Pjv_t PjvnewRaw;                                    \
+            Pjv_t Pjvnew;                                       \
+                                                                \
+            if ((PjvnewRaw = j__udyLAllocJV(pop1 - 1, Pjpm))    \
+                == (Pjv_t) NULL) return(-1);                    \
+            Pjvnew = P_JV(PjvnewRaw);                           \
+                                                                \
+            DeleteInPlace(Pleaf, pop1, offset, cIS);            \
+            JU_DELETECOPY(Pjvnew, Pjv, pop1, offset, ignore);   \
+            DBGCODE(JudyCheckSorted(Pleaf, pop1 - 1, cIS);)     \
+            j__udyLFreeJV(PjvRaw, pop1, Pjpm);                  \
+                                                                \
+            (Pjp->jp_Addr) = (Word_t) PjvnewRaw;                \
+        }
+#endif // JUDYL
+
+// Delete one Index from a larger Immed where no restructuring is required:
+//
+// Variables pop1, Pjp, offset, and Index are in the context.
+
+#define JU_IMMED(cIS,LeafType,BaseJPType,SearchLeaf,DeleteInPlace)      \
+        {                                                               \
+            LeafType Pleaf;                                             \
+                                                                        \
+            assert((ParentLevel - 1) == (cIS));                         \
+  JUDY1CODE(Pleaf  = (LeafType) (Pjp->jp_1Index);)                      \
+  JUDYLCODE(Pleaf  = (LeafType) (Pjp->jp_LIndex);)                      \
+  JUDYLCODE(PjvRaw = (Pjv_t) (Pjp->jp_Addr);)                           \
+  JUDYLCODE(Pjv    = P_JV(PjvRaw);)                                     \
+            pop1   = (JU_JPTYPE(Pjp)) - (BaseJPType) + 2;               \
+            offset = SearchLeaf(Pleaf, pop1, Index);                    \
+            assert(offset >= 0);        /* Index must be valid */       \
+                                                                        \
+            JU_IMMED_DEL(cIS, DeleteInPlace);                           \
+            --(Pjp->jp_Type);                                           \
+            return(1);                                                  \
+        }
+
+
+// END OF MACROS, START OF CASES:
+
+// Single Index remains in Immed; convert JP to null:
+
+        case cJU_JPIMMED_1_01: JU_IMMED_01(cJU_JPNULL1, cJU_JPBRANCH_U2);
+        case cJU_JPIMMED_2_01: JU_IMMED_01(cJU_JPNULL2, cJU_JPBRANCH_U3);
+#ifndef JU_64BIT
+        case cJU_JPIMMED_3_01: JU_IMMED_01(cJU_JPNULL3, cJU_JPBRANCH_U);
+#else
+        case cJU_JPIMMED_3_01: JU_IMMED_01(cJU_JPNULL3, cJU_JPBRANCH_U4);
+        case cJU_JPIMMED_4_01: JU_IMMED_01(cJU_JPNULL4, cJU_JPBRANCH_U5);
+        case cJU_JPIMMED_5_01: JU_IMMED_01(cJU_JPNULL5, cJU_JPBRANCH_U6);
+        case cJU_JPIMMED_6_01: JU_IMMED_01(cJU_JPNULL6, cJU_JPBRANCH_U7);
+        case cJU_JPIMMED_7_01: JU_IMMED_01(cJU_JPNULL7, cJU_JPBRANCH_U);
+#endif
+
+// Multiple Indexes remain in the Immed JP; delete the specified Index:
+
+        case cJU_JPIMMED_1_02:
+
+            JU_IMMED_02(1, uint8_t *, cJU_JPIMMED_1_01);
+
+        case cJU_JPIMMED_1_03:
+#if (defined(JUDY1) || defined(JU_64BIT))
+        case cJU_JPIMMED_1_04:
+        case cJU_JPIMMED_1_05:
+        case cJU_JPIMMED_1_06:
+        case cJU_JPIMMED_1_07:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+        case cJ1_JPIMMED_1_08:
+        case cJ1_JPIMMED_1_09:
+        case cJ1_JPIMMED_1_10:
+        case cJ1_JPIMMED_1_11:
+        case cJ1_JPIMMED_1_12:
+        case cJ1_JPIMMED_1_13:
+        case cJ1_JPIMMED_1_14:
+        case cJ1_JPIMMED_1_15:
+#endif
+            JU_IMMED(1, uint8_t *, cJU_JPIMMED_1_02,
+                     j__udySearchLeaf1, JU_DELETEINPLACE);
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+        case cJU_JPIMMED_2_02:
+
+            JU_IMMED_02(2, uint16_t *, cJU_JPIMMED_2_01);
+
+        case cJU_JPIMMED_2_03:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+        case cJ1_JPIMMED_2_04:
+        case cJ1_JPIMMED_2_05:
+        case cJ1_JPIMMED_2_06:
+        case cJ1_JPIMMED_2_07:
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+            JU_IMMED(2, uint16_t *, cJU_JPIMMED_2_02,
+                     j__udySearchLeaf2, JU_DELETEINPLACE);
+
+        case cJU_JPIMMED_3_02:
+
+            JU_IMMED_02_ODD(3, cJU_JPIMMED_3_01,
+                            j__udySearchLeaf3, JU_COPY3_PINDEX_TO_LONG);
+
+#endif
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+        case cJ1_JPIMMED_3_03:
+        case cJ1_JPIMMED_3_04:
+        case cJ1_JPIMMED_3_05:
+
+            JU_IMMED(3, uint8_t *, cJU_JPIMMED_3_02,
+                     j__udySearchLeaf3, JU_DELETEINPLACE_ODD);
+
+        case cJ1_JPIMMED_4_02:
+
+            JU_IMMED_02(4, uint32_t *, cJU_JPIMMED_4_01);
+
+        case cJ1_JPIMMED_4_03:
+
+            JU_IMMED(4, uint32_t *, cJ1_JPIMMED_4_02,
+                     j__udySearchLeaf4, JU_DELETEINPLACE);
+
+        case cJ1_JPIMMED_5_02:
+
+            JU_IMMED_02_ODD(5, cJU_JPIMMED_5_01,
+                            j__udySearchLeaf5, JU_COPY5_PINDEX_TO_LONG);
+
+        case cJ1_JPIMMED_5_03:
+
+            JU_IMMED(5, uint8_t *, cJ1_JPIMMED_5_02,
+                     j__udySearchLeaf5, JU_DELETEINPLACE_ODD);
+
+        case cJ1_JPIMMED_6_02:
+
+            JU_IMMED_02_ODD(6, cJU_JPIMMED_6_01,
+                            j__udySearchLeaf6, JU_COPY6_PINDEX_TO_LONG);
+
+        case cJ1_JPIMMED_7_02:
+
+            JU_IMMED_02_ODD(7, cJU_JPIMMED_7_01,
+                            j__udySearchLeaf7, JU_COPY7_PINDEX_TO_LONG);
+
+#endif // (JUDY1 && JU_64BIT)
+
+
+// ****************************************************************************
+// INVALID JP TYPE:
+
+        default: JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT); return(-1);
+
+        } // switch
+
+
+// PROCESS JP -- RECURSIVELY:
+//
+// For non-Immed JP types, if successful, post-decrement the population count
+// at this level, or collapse a BranchL if necessary by copying the remaining
+// JP in the BranchL to the parent (hysteresis = 0), which implicitly creates a
+// narrow pointer if there was not already one in the hierarchy.
+
+        assert(level);
+        retcode =  j__udyDelWalk(Pjp, Index, level, Pjpm);
+        assert(retcode != 0);           // should never happen.
+
+        if ((JU_JPTYPE(Pjp)) < cJU_JPIMMED_1_01)                // not an Immed.
+        {
+            switch (retcode)
+            {
+            case 1: 
+            {
+                jp_t JP = *Pjp;
+                Word_t DcdP0;
+
+                DcdP0 = JU_JPDCDPOP0(Pjp) - 1;          // decrement count.
+                JU_JPSETADT(Pjp, JP.jp_Addr, DcdP0, JU_JPTYPE(&JP)); 
+                break;
+            }
+            case 2:     // collapse BranchL to single JP; see above:
+                {
+                    Pjbl_t PjblRaw = (Pjbl_t) (Pjp->jp_Addr);
+                    Pjbl_t Pjbl    = P_JBL(PjblRaw);
+
+                    *Pjp = Pjbl->jbl_jp[0];
+                    j__udyFreeJBL(PjblRaw, Pjpm);
+                    retcode = 1;
+                }
+            }
+        }
+
+        return(retcode);
+
+} // j__udyDelWalk()
+
+
+// ****************************************************************************
+// J U D Y   1   U N S E T
+// J U D Y   L   D E L
+//
+// Main entry point.  See the manual entry for details.
+
+#ifdef JUDY1
+FUNCTION int Judy1Unset 
+#else
+FUNCTION int JudyLDel
+#endif
+        (
+        PPvoid_t  PPArray,      // in which to delete.
+        Word_t    Index,        // to delete.
+        PJError_t PJError       // optional, for returning error info.
+        )
+{
+        Word_t    pop1;         // population of leaf.
+        int       offset;       // at which to delete Index.
+    JUDY1CODE(int retcode;)     // return code from Judy1Test().
+JUDYLCODE(PPvoid_t PPvalue;)  // pointer from JudyLGet().
+
+
+// CHECK FOR NULL ARRAY POINTER (error by caller):
+
+        if (PPArray == (PPvoid_t) NULL)
+        {
+            JU_SET_ERRNO(PJError, JU_ERRNO_NULLPPARRAY);
+            return(JERRI);
+        }
+
+
+// CHECK IF INDEX IS INVALID:
+//
+// If so, theres nothing to do.  This saves a lot of time.  Pass through
+// PJError, if any, from the "get" function.
+
+#ifdef JUDY1
+        if ((retcode = Judy1Test(*PPArray, Index, PJError)) == JERRI)
+            return (JERRI);
+
+        if (retcode == 0) return(0);
+#else
+        if ((PPvalue = JudyLGet(*PPArray, Index, PJError)) == PPJERR)
+            return (JERRI);
+
+        if (PPvalue == (PPvoid_t) NULL) return(0);
+#endif
+
+
+// ****************************************************************************
+// PROCESS TOP LEVEL (LEAFW) BRANCHES AND LEAVES:
+
+// ****************************************************************************
+// LEAFW LEAF, OTHER SIZE:
+//
+// Shrink or convert the leaf as necessary.  Hysteresis = 0; none is possible.
+
+        if (JU_LEAFW_POP0(*PPArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+        {
+  JUDYLCODE(Pjv_t  Pjv;)                        // current value area.
+  JUDYLCODE(Pjv_t  Pjvnew;)                     // value area in new leaf.
+            Pjlw_t Pjlw = P_JLW(*PPArray);      // first word of leaf.
+            Pjlw_t Pjlwnew;                     // replacement leaf.
+            pop1 = Pjlw[0] + 1;                 // first word of leaf is pop0.
+
+// Delete single (last) Index from array:
+
+            if (pop1 == 1)
+            {
+                j__udyFreeJLW(Pjlw, /* pop1 = */ 1, (Pjpm_t) NULL);
+                *PPArray = (Pvoid_t) NULL;
+                return(1);
+            }
+
+// Locate Index in compressible leaf:
+
+            offset = j__udySearchLeafW(Pjlw + 1, pop1, Index);
+            assert(offset >= 0);                // Index must be valid.
+
+  JUDYLCODE(Pjv = JL_LEAFWVALUEAREA(Pjlw, pop1);)
+
+// Delete Index in-place:
+//
+// Note:  "Grow in place from pop1 - 1" is the logical inverse of, "shrink in
+// place from pop1."  Also, Pjlw points to the count word, so skip that for
+// doing the deletion.
+
+            if (JU_LEAFWGROWINPLACE(pop1 - 1))
+            {
+                JU_DELETEINPLACE(Pjlw + 1, pop1, offset, ignore);
+#ifdef JUDYL // also delete from value area:
+                JU_DELETEINPLACE(Pjv,      pop1, offset, ignore);
+#endif
+                DBGCODE(JudyCheckSorted((Pjll_t) (Pjlw + 1), pop1 - 1,
+                                        cJU_ROOTSTATE);)
+                --(Pjlw[0]);                    // decrement population.
+                DBGCODE(JudyCheckPop(*PPArray);)
+                return(1);
+            }
+
+// Allocate new leaf for use in either case below:
+
+            Pjlwnew = j__udyAllocJLW(pop1 - 1);
+            JU_CHECKALLOC(Pjlw_t, Pjlwnew, JERRI);
+
+// Shrink to smaller LEAFW:
+//
+// Note:  Skip the first word = pop0 in each leaf.
+
+            Pjlwnew[0] = (pop1 - 1) - 1;
+            JU_DELETECOPY(Pjlwnew + 1, Pjlw + 1, pop1, offset, ignore);
+
+#ifdef JUDYL // also delete from value area:
+            Pjvnew = JL_LEAFWVALUEAREA(Pjlwnew, pop1 - 1);
+            JU_DELETECOPY(Pjvnew, Pjv, pop1, offset, ignore);
+#endif
+            DBGCODE(JudyCheckSorted(Pjlwnew + 1, pop1 - 1, cJU_ROOTSTATE);)
+
+            j__udyFreeJLW(Pjlw, pop1, (Pjpm_t) NULL);
+
+////        *PPArray = (Pvoid_t)  Pjlwnew | cJU_LEAFW);
+            *PPArray = (Pvoid_t)  Pjlwnew; 
+            DBGCODE(JudyCheckPop(*PPArray);)
+            return(1);
+
+        }
+        else
+
+
+// ****************************************************************************
+// JRP BRANCH:
+//
+// Traverse through the JPM to do the deletion unless the population is small
+// enough to convert immediately to a LEAFW.
+
+        {
+            Pjpm_t Pjpm;
+            Pjp_t  Pjp;         // top-level JP to process.
+            Word_t digit;       // in a branch.
+  JUDYLCODE(Pjv_t  Pjv;)        // to value area.
+            Pjlw_t Pjlwnew;                     // replacement leaf.
+    DBGCODE(Pjlw_t Pjlwnew_orig;)
+
+            Pjpm = P_JPM(*PPArray);     // top object in array (tree).
+            Pjp  = &(Pjpm->jpm_JP);     // next object (first branch or leaf).
+
+            assert(((Pjpm->jpm_JP.jp_Type) == cJU_JPBRANCH_L)
+                || ((Pjpm->jpm_JP.jp_Type) == cJU_JPBRANCH_B)
+                || ((Pjpm->jpm_JP.jp_Type) == cJU_JPBRANCH_U));
+
+// WALK THE TREE 
+//
+// Note:  Recursive code in j__udyDelWalk() knows how to collapse a lower-level
+// BranchL containing a single JP into the parent JP as a narrow pointer, but
+// the code here cant do that for a top-level BranchL.  The result can be
+// PArray -> JPM -> BranchL containing a single JP.  This situation is
+// unavoidable because a JPM cannot contain a narrow pointer; the BranchL is
+// required in order to hold the top digit decoded, and it does not collapse to
+// a LEAFW until the population is low enough.
+//
+// TBD:  Should we add a topdigit field to JPMs so they can hold narrow
+// pointers?
+
+            if (j__udyDelWalk(Pjp, Index, cJU_ROOTSTATE, Pjpm) == -1)
+            {
+                JU_COPY_ERRNO(PJError, Pjpm);
+                return(JERRI);
+            }
+
+            --(Pjpm->jpm_Pop0); // success; decrement total population.
+
+            if ((Pjpm->jpm_Pop0 + 1) != cJU_LEAFW_MAXPOP1)
+            {
+                DBGCODE(JudyCheckPop(*PPArray);)
+                return(1);
+            }
+
+// COMPRESS A BRANCH[LBU] TO A LEAFW:
+//
+            Pjlwnew = j__udyAllocJLW(cJU_LEAFW_MAXPOP1);
+            JU_CHECKALLOC(Pjlw_t, Pjlwnew, JERRI);
+
+// Plug leaf into root pointer and set population count:
+
+////        *PPArray  = (Pvoid_t) ((Word_t) Pjlwnew | cJU_LEAFW);
+            *PPArray  = (Pvoid_t) Pjlwnew;
+#ifdef JUDYL // prepare value area:
+            Pjv = JL_LEAFWVALUEAREA(Pjlwnew, cJU_LEAFW_MAXPOP1);
+#endif
+            *Pjlwnew++ = cJU_LEAFW_MAXPOP1 - 1; // set pop0.
+            DBGCODE(Pjlwnew_orig = Pjlwnew;)
+
+            switch (JU_JPTYPE(Pjp))
+            {
+
+// JPBRANCH_L:  Copy each JPs indexes to the new LEAFW and free the old
+// branch:
+
+            case cJU_JPBRANCH_L:
+            {
+                Pjbl_t PjblRaw = (Pjbl_t) (Pjp->jp_Addr);
+                Pjbl_t Pjbl    = P_JBL(PjblRaw);
+
+                for (offset = 0; offset < Pjbl->jbl_NumJPs; ++offset)
+                {
+                    pop1 = j__udyLeafM1ToLeafW(Pjlwnew, JU_PVALUEPASS
+                             (Pjbl->jbl_jp) + offset,
+                             JU_DIGITTOSTATE(Pjbl->jbl_Expanse[offset],
+                                             cJU_BYTESPERWORD),
+                             (Pvoid_t) Pjpm);
+                    Pjlwnew += pop1;            // advance through indexes.
+          JUDYLCODE(Pjv     += pop1;)           // advance through values.
+                }
+                j__udyFreeJBL(PjblRaw, Pjpm);
+
+                assert(Pjlwnew == Pjlwnew_orig + cJU_LEAFW_MAXPOP1);
+                break;                  // delete Index from new LEAFW.
+            }
+
+// JPBRANCH_B:  Copy each JPs indexes to the new LEAFW and free the old
+// branch, including each JP subarray:
+
+            case cJU_JPBRANCH_B:
+            {
+                Pjbb_t    PjbbRaw = (Pjbb_t) (Pjp->jp_Addr);
+                Pjbb_t    Pjbb    = P_JBB(PjbbRaw);
+                Word_t    subexp;       // current subexpanse number.
+                BITMAPB_t bitmap;       // portion for this subexpanse.
+                Pjp_t     Pjp2Raw;      // one subexpanses subarray.
+                Pjp_t     Pjp2;
+
+                for (subexp = 0; subexp < cJU_NUMSUBEXPB; ++subexp)
+                {
+                    if ((bitmap = JU_JBB_BITMAP(Pjbb, subexp)) == 0)
+                        continue;               // skip empty subexpanse.
+
+                    digit   = subexp * cJU_BITSPERSUBEXPB;
+                    Pjp2Raw = JU_JBB_PJP(Pjbb, subexp);
+                    Pjp2    = P_JP(Pjp2Raw);
+                    assert(Pjp2 != (Pjp_t) NULL);
+
+// Walk through bits for all possible sub-subexpanses (digits); increment
+// offset for each populated subexpanse; until no more set bits:
+
+                    for (offset = 0; bitmap != 0; bitmap >>= 1, ++digit)
+                    {
+                        if (! (bitmap & 1))     // skip empty sub-subexpanse.
+                            continue;
+
+                        pop1 = j__udyLeafM1ToLeafW(Pjlwnew, JU_PVALUEPASS
+                                 Pjp2 + offset,
+                                 JU_DIGITTOSTATE(digit, cJU_BYTESPERWORD),
+                                 (Pvoid_t) Pjpm);
+                        Pjlwnew += pop1;         // advance through indexes.
+              JUDYLCODE(Pjv     += pop1;)        // advance through values.
+                        ++offset;
+                    }
+                    j__udyFreeJBBJP(Pjp2Raw, /* pop1 = */ offset, Pjpm);
+                }
+                j__udyFreeJBB(PjbbRaw, Pjpm);
+
+                assert(Pjlwnew == Pjlwnew_orig + cJU_LEAFW_MAXPOP1);
+                break;                  // delete Index from new LEAFW.
+
+            } // case cJU_JPBRANCH_B.
+
+
+// JPBRANCH_U:  Copy each JPs indexes to the new LEAFW and free the old
+// branch:
+
+            case cJU_JPBRANCH_U:
+            {
+                Pjbu_t  PjbuRaw = (Pjbu_t) (Pjp->jp_Addr);
+                Pjbu_t  Pjbu    = P_JBU(PjbuRaw);
+                Word_t  ldigit;         // larger than uint8_t.
+
+                for (Pjp = Pjbu->jbu_jp, ldigit = 0;
+                     ldigit < cJU_BRANCHUNUMJPS;
+                     ++Pjp, ++ldigit)
+                {
+
+// Shortcuts, to save a little time for possibly big branches:
+
+                    if ((JU_JPTYPE(Pjp)) == cJU_JPNULLMAX)  // skip null JP.
+                        continue;
+
+// TBD:  Should the following shortcut also be used in BranchL and BranchB
+// code?
+
+#ifndef JU_64BIT
+                    if ((JU_JPTYPE(Pjp)) == cJU_JPIMMED_3_01)
+#else
+                    if ((JU_JPTYPE(Pjp)) == cJU_JPIMMED_7_01)
+#endif
+                    {                                   // single Immed:
+                        *Pjlwnew++ = JU_DIGITTOSTATE(ldigit, cJU_BYTESPERWORD)
+                                   | JU_JPDCDPOP0(Pjp); // rebuild Index.
+#ifdef JUDYL
+                        *Pjv++ = Pjp->jp_Addr;  // copy value area.
+#endif
+                        continue;
+                    }
+
+                    pop1 = j__udyLeafM1ToLeafW(Pjlwnew, JU_PVALUEPASS
+                             Pjp, JU_DIGITTOSTATE(ldigit, cJU_BYTESPERWORD),
+                             (Pvoid_t) Pjpm);
+                    Pjlwnew += pop1;            // advance through indexes.
+          JUDYLCODE(Pjv     += pop1;)           // advance through values.
+                }
+                j__udyFreeJBU(PjbuRaw, Pjpm);
+
+                assert(Pjlwnew == Pjlwnew_orig + cJU_LEAFW_MAXPOP1);
+                break;                  // delete Index from new LEAFW.
+
+            } // case cJU_JPBRANCH_U.
+
+
+// INVALID JP TYPE in jpm_t struct
+
+            default: JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT);
+                     return(JERRI);
+
+            } // end switch on sub-JP type.
+
+            DBGCODE(JudyCheckSorted((Pjll_t) Pjlwnew_orig, cJU_LEAFW_MAXPOP1,
+                                    cJU_ROOTSTATE);)
+
+// FREE JPM (no longer needed):
+
+            j__udyFreeJPM(Pjpm, (Pjpm_t) NULL);
+            DBGCODE(JudyCheckPop(*PPArray);)
+            return(1);
+
+        } 
+        /*NOTREACHED*/
+
+} // Judy1Unset() / JudyLDel()
diff --git a/libs/klib/judy/JudyFirst.c b/libs/klib/judy/JudyFirst.c
new file mode 100644
index 0000000..91533a9
--- /dev/null
+++ b/libs/klib/judy/JudyFirst.c
@@ -0,0 +1,211 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// Judy*First[Empty]() and Judy*Last[Empty]() routines for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+//
+// These are inclusive versions of Judy*Next[Empty]() and Judy*Prev[Empty]().
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error:  One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+
+// ****************************************************************************
+// J U D Y   1   F I R S T
+// J U D Y   L   F I R S T
+//
+// See the manual entry for details.
+
+#ifdef JUDY1
+FUNCTION int	  Judy1First
+#else
+FUNCTION PPvoid_t JudyLFirst
+#endif
+        (
+	Pcvoid_t  PArray,	// Judy array to search.
+	Word_t *  PIndex,	// starting point and result.
+	PJError_t PJError	// optional, for returning error info.
+        )
+{
+        if (PIndex == (PWord_t) NULL)		// caller error:
+	{
+	    JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+	    JUDY1CODE(return(JERRI );)
+	    JUDYLCODE(return(PPJERR);)
+	}
+
+#ifdef JUDY1
+	switch (Judy1Test(PArray, *PIndex, PJError))
+	{
+	case 1:	 return(1);			// found *PIndex itself.
+	case 0:  return(Judy1Next(PArray, PIndex, PJError));
+	default: return(JERRI);
+	}
+#else
+	{
+	    PPvoid_t PValue;
+
+	    if ((PValue = JudyLGet(PArray, *PIndex, PJError)) == PPJERR)
+		return(PPJERR);
+
+	    if (PValue != (PPvoid_t) NULL) return(PValue);  // found *PIndex.
+
+	    return(JudyLNext(PArray, PIndex, PJError));
+	}
+#endif
+
+} // Judy1First() / JudyLFirst()
+
+
+// ****************************************************************************
+// J U D Y   1   L A S T
+// J U D Y   L   L A S T
+//
+// See the manual entry for details.
+
+#ifdef JUDY1
+FUNCTION int	  Judy1Last(
+#else
+FUNCTION PPvoid_t JudyLLast(
+#endif
+	Pcvoid_t  PArray,	// Judy array to search.
+	Word_t *  PIndex,	// starting point and result.
+	PJError_t PJError)	// optional, for returning error info.
+{
+        if (PIndex == (PWord_t) NULL)
+	{
+	    JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);	 // caller error.
+	    JUDY1CODE(return(JERRI );)
+	    JUDYLCODE(return(PPJERR);)
+	}
+
+#ifdef JUDY1
+	switch (Judy1Test(PArray, *PIndex, PJError))
+	{
+	case 1:	 return(1);			// found *PIndex itself.
+	case 0:  return(Judy1Prev(PArray, PIndex, PJError));
+	default: return(JERRI);
+	}
+#else
+	{
+	    PPvoid_t PValue;
+
+	    if ((PValue = JudyLGet(PArray, *PIndex, PJError)) == PPJERR)
+		return(PPJERR);
+
+	    if (PValue != (PPvoid_t) NULL) return(PValue);  // found *PIndex.
+
+	    return(JudyLPrev(PArray, PIndex, PJError));
+	}
+#endif
+
+} // Judy1Last() / JudyLLast()
+
+
+// ****************************************************************************
+// J U D Y   1   F I R S T   E M P T Y
+// J U D Y   L   F I R S T   E M P T Y
+//
+// See the manual entry for details.
+
+#ifdef JUDY1
+FUNCTION int Judy1FirstEmpty(
+#else
+FUNCTION int JudyLFirstEmpty(
+#endif
+	Pcvoid_t  PArray,	// Judy array to search.
+	Word_t *  PIndex,	// starting point and result.
+	PJError_t PJError)	// optional, for returning error info.
+{
+        if (PIndex == (PWord_t) NULL)		// caller error:
+	{
+	    JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+	    return(JERRI);
+	}
+
+#ifdef JUDY1
+	switch (Judy1Test(PArray, *PIndex, PJError))
+	{
+	case 0:	 return(1);			// found *PIndex itself.
+	case 1:  return(Judy1NextEmpty(PArray, PIndex, PJError));
+	default: return(JERRI);
+	}
+#else
+	{
+	    PPvoid_t PValue;
+
+	    if ((PValue = JudyLGet(PArray, *PIndex, PJError)) == PPJERR)
+		return(JERRI);
+
+	    if (PValue == (PPvoid_t) NULL) return(1);	// found *PIndex.
+
+	    return(JudyLNextEmpty(PArray, PIndex, PJError));
+	}
+#endif
+
+} // Judy1FirstEmpty() / JudyLFirstEmpty()
+
+
+// ****************************************************************************
+// J U D Y   1   L A S T   E M P T Y
+// J U D Y   L   L A S T   E M P T Y
+//
+// See the manual entry for details.
+
+#ifdef JUDY1
+FUNCTION int Judy1LastEmpty(
+#else
+FUNCTION int JudyLLastEmpty(
+#endif
+	Pcvoid_t  PArray,	// Judy array to search.
+	Word_t *  PIndex,	// starting point and result.
+	PJError_t PJError)	// optional, for returning error info.
+{
+        if (PIndex == (PWord_t) NULL)
+	{
+	    JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);	 // caller error.
+	    return(JERRI);
+	}
+
+#ifdef JUDY1
+	switch (Judy1Test(PArray, *PIndex, PJError))
+	{
+	case 0:	 return(1);			// found *PIndex itself.
+	case 1:  return(Judy1PrevEmpty(PArray, PIndex, PJError));
+	default: return(JERRI);
+	}
+#else
+	{
+	    PPvoid_t PValue;
+
+	    if ((PValue = JudyLGet(PArray, *PIndex, PJError)) == PPJERR)
+		return(JERRI);
+
+	    if (PValue == (PPvoid_t) NULL) return(1);	// found *PIndex.
+
+	    return(JudyLPrevEmpty(PArray, PIndex, PJError));
+	}
+#endif
+
+} // Judy1LastEmpty() / JudyLLastEmpty()
diff --git a/libs/klib/judy/JudyFreeArray.c b/libs/klib/judy/JudyFreeArray.c
new file mode 100644
index 0000000..0145479
--- /dev/null
+++ b/libs/klib/judy/JudyFreeArray.c
@@ -0,0 +1,361 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// Judy1FreeArray() and JudyLFreeArray() functions for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+// Return the number of bytes freed from the array.
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error:  One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+DBGCODE(extern void JudyCheckPop(Pvoid_t PArray);)
+
+
+// ****************************************************************************
+// J U D Y   1   F R E E   A R R A Y
+// J U D Y   L   F R E E   A R R A Y
+//
+// See the Judy*(3C) manual entry for details.
+//
+// This code is written recursively, at least at first, because thats much
+// simpler.  Hope its fast enough.
+
+#ifdef JUDY1
+FUNCTION Word_t Judy1FreeArray
+#else
+FUNCTION Word_t JudyLFreeArray
+#endif
+        (
+	PPvoid_t  PPArray,	// array to free.
+	PJError_t PJError	// optional, for returning error info.
+        )
+{
+	jpm_t	  jpm;		// local to accumulate free statistics.
+
+// CHECK FOR NULL POINTER (error by caller):
+
+	if (PPArray == (PPvoid_t) NULL)
+	{
+	    JU_SET_ERRNO(PJError, JU_ERRNO_NULLPPARRAY);
+	    return(JERR);
+	}
+
+	DBGCODE(JudyCheckPop(*PPArray);)
+
+// Zero jpm.jpm_Pop0 (meaning the array will be empty in a moment) for accurate
+// logging in TRACEMI2.
+
+	jpm.jpm_Pop0	      = 0;		// see above.
+	jpm.jpm_TotalMemWords = 0;		// initialize memory freed.
+
+// 	Empty array:
+
+	if (P_JLW(*PPArray) == (Pjlw_t) NULL) return(0);
+
+// PROCESS TOP LEVEL "JRP" BRANCHES AND LEAF:
+
+	if (JU_LEAFW_POP0(*PPArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+	{
+	    Pjlw_t Pjlw = P_JLW(*PPArray);	// first word of leaf.
+
+	    j__udyFreeJLW(Pjlw, Pjlw[0] + 1, &jpm);
+	    *PPArray = (Pvoid_t) NULL;		// make an empty array.
+	    return (-(jpm.jpm_TotalMemWords * cJU_BYTESPERWORD));  // see above.
+	}
+	else
+
+// Rootstate leaves:  just free the leaf:
+
+// Common code for returning the amount of memory freed.
+//
+// Note:  In a an ordinary LEAFW, pop0 = *PPArray[0].
+//
+// Accumulate (negative) words freed, while freeing objects.
+// Return the positive bytes freed.
+
+	{
+	    Pjpm_t Pjpm	    = P_JPM(*PPArray);
+	    Word_t TotalMem = Pjpm->jpm_TotalMemWords;
+
+	    j__udyFreeSM(&(Pjpm->jpm_JP), &jpm);  // recurse through tree.
+	    j__udyFreeJPM(Pjpm, &jpm);
+
+// Verify the array was not corrupt.  This means that amount of memory freed
+// (which is negative) is equal to the initial amount:
+
+	    if (TotalMem + jpm.jpm_TotalMemWords)
+	    {
+		JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+		return(JERR);
+	    }
+
+	    *PPArray = (Pvoid_t) NULL;		// make an empty array.
+	    return (TotalMem * cJU_BYTESPERWORD);
+	}
+
+} // Judy1FreeArray() / JudyLFreeArray()
+
+
+// ****************************************************************************
+// __ J U D Y   F R E E   S M
+//
+// Given a pointer to a JP, recursively visit and free (depth first) all nodes
+// in a Judy array BELOW the JP, but not the JP itself.  Accumulate in *Pjpm
+// the total words freed (as a negative value).  "SM" = State Machine.
+//
+// Note:  Corruption is not detected at this level because during a FreeArray,
+// if the code hasnt already core dumped, its better to remain silent, even
+// if some memory has not been freed, than to bother the caller about the
+// corruption.  TBD:  Is this true?  If not, must list all legitimate JPNULL
+// and JPIMMED above first, and revert to returning bool_t (see 4.34).
+
+FUNCTION void j__udyFreeSM(
+	Pjp_t	Pjp,		// top of Judy (top-state).
+	Pjpm_t	Pjpm)		// to return words freed.
+{
+	Word_t	Pop1;
+
+	switch (JU_JPTYPE(Pjp))
+	{
+
+#ifdef JUDY1
+
+// FULL EXPANSE -- nothing to free  for this jp_Type.
+
+	case cJ1_JPFULLPOPU1:
+	    break;
+#endif
+
+// JUDY BRANCH -- free the sub-tree depth first:
+
+// LINEAR BRANCH -- visit each JP in the JBLs list, then free the JBL:
+//
+// Note:  There are no null JPs in a JBL.
+
+	case cJU_JPBRANCH_L:
+	case cJU_JPBRANCH_L2:
+	case cJU_JPBRANCH_L3:
+#ifdef JU_64BIT
+	case cJU_JPBRANCH_L4:
+	case cJU_JPBRANCH_L5:
+	case cJU_JPBRANCH_L6:
+	case cJU_JPBRANCH_L7:
+#endif // JU_64BIT
+	{
+	    Pjbl_t Pjbl = P_JBL(Pjp->jp_Addr);
+	    Word_t offset;
+
+	    for (offset = 0; offset < Pjbl->jbl_NumJPs; ++offset)
+	        j__udyFreeSM((Pjbl->jbl_jp) + offset, Pjpm);
+
+	    j__udyFreeJBL((Pjbl_t) (Pjp->jp_Addr), Pjpm);
+	    break;
+	}
+
+
+// BITMAP BRANCH -- visit each JP in the JBBs list based on the bitmap, also
+//
+// Note:  There are no null JPs in a JBB.
+
+	case cJU_JPBRANCH_B:
+	case cJU_JPBRANCH_B2:
+	case cJU_JPBRANCH_B3:
+#ifdef JU_64BIT
+	case cJU_JPBRANCH_B4:
+	case cJU_JPBRANCH_B5:
+	case cJU_JPBRANCH_B6:
+	case cJU_JPBRANCH_B7:
+#endif // JU_64BIT
+	{
+	    Word_t subexp;
+	    Word_t offset;
+	    Word_t jpcount;
+
+	    Pjbb_t Pjbb = P_JBB(Pjp->jp_Addr);
+
+	    for (subexp = 0; subexp < cJU_NUMSUBEXPB; ++subexp)
+	    {
+	        jpcount = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, subexp));
+
+	        if (jpcount)
+	        {
+		    for (offset = 0; offset < jpcount; ++offset)
+		    {
+		       j__udyFreeSM(P_JP(JU_JBB_PJP(Pjbb, subexp)) + offset,
+				    Pjpm);
+		    }
+		    j__udyFreeJBBJP(JU_JBB_PJP(Pjbb, subexp), jpcount, Pjpm);
+	        }
+	    }
+	    j__udyFreeJBB((Pjbb_t) (Pjp->jp_Addr), Pjpm);
+
+	    break;
+	}
+
+
+// UNCOMPRESSED BRANCH -- visit each JP in the JBU array, then free the JBU
+// itself:
+//
+// Note:  Null JPs are handled during recursion at a lower state.
+
+	case cJU_JPBRANCH_U:
+	case cJU_JPBRANCH_U2:
+	case cJU_JPBRANCH_U3:
+#ifdef JU_64BIT
+	case cJU_JPBRANCH_U4:
+	case cJU_JPBRANCH_U5:
+	case cJU_JPBRANCH_U6:
+	case cJU_JPBRANCH_U7:
+#endif // JU_64BIT
+	{
+	    Word_t offset;
+	    Pjbu_t Pjbu = P_JBU(Pjp->jp_Addr);
+
+	    for (offset = 0; offset < cJU_BRANCHUNUMJPS; ++offset)
+	        j__udyFreeSM((Pjbu->jbu_jp) + offset, Pjpm);
+
+	    j__udyFreeJBU((Pjbu_t) (Pjp->jp_Addr), Pjpm);
+	    break;
+	}
+
+
+// -- Cases below here terminate and do not recurse. --
+
+
+// LINEAR LEAF -- just free the leaf; size is computed from jp_Type:
+//
+// Note:  cJU_JPLEAF1 is a special case, see discussion in ../Judy1/Judy1.h
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+	case cJU_JPLEAF1:
+	    Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+	    j__udyFreeJLL1((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+	    break;
+#endif
+
+	case cJU_JPLEAF2:
+	    Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+	    j__udyFreeJLL2((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+	    break;
+
+	case cJU_JPLEAF3:
+	    Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+	    j__udyFreeJLL3((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+	    break;
+
+#ifdef JU_64BIT
+	case cJU_JPLEAF4:
+	    Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+	    j__udyFreeJLL4((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+	    break;
+
+	case cJU_JPLEAF5:
+	    Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+	    j__udyFreeJLL5((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+	    break;
+
+	case cJU_JPLEAF6:
+	    Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+	    j__udyFreeJLL6((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+	    break;
+
+	case cJU_JPLEAF7:
+	    Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+	    j__udyFreeJLL7((Pjll_t) (Pjp->jp_Addr), Pop1, Pjpm);
+	    break;
+#endif // JU_64BIT
+
+
+// BITMAP LEAF -- free sub-expanse arrays of JPs, then free the JBB.
+
+	case cJU_JPLEAF_B1:
+	{
+#ifdef JUDYL
+	    Word_t subexp;
+	    Word_t jpcount;
+	    Pjlb_t Pjlb = P_JLB(Pjp->jp_Addr);
+
+// Free the value areas in the bitmap leaf:
+
+	    for (subexp = 0; subexp < cJU_NUMSUBEXPL; ++subexp)
+	    {
+	        jpcount = j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, subexp));
+
+	        if (jpcount)
+		    j__udyLFreeJV(JL_JLB_PVALUE(Pjlb, subexp), jpcount, Pjpm);
+	    }
+#endif // JUDYL
+
+	    j__udyFreeJLB1((Pjlb_t) (Pjp->jp_Addr), Pjpm);
+	    break;
+
+	} // case cJU_JPLEAF_B1
+
+#ifdef JUDYL
+
+
+// IMMED*:
+//
+// For JUDYL, all non JPIMMED_*_01s have a LeafV which must be freed:
+
+	case cJU_JPIMMED_1_02:
+	case cJU_JPIMMED_1_03:
+#ifdef JU_64BIT
+	case cJU_JPIMMED_1_04:
+	case cJU_JPIMMED_1_05:
+	case cJU_JPIMMED_1_06:
+	case cJU_JPIMMED_1_07:
+#endif
+	    Pop1 = JU_JPTYPE(Pjp) - cJU_JPIMMED_1_02 + 2;
+	    j__udyLFreeJV((Pjv_t) (Pjp->jp_Addr), Pop1, Pjpm);
+	    break;
+
+#ifdef JU_64BIT
+	case cJU_JPIMMED_2_02:
+	case cJU_JPIMMED_2_03:
+
+	    Pop1 = JU_JPTYPE(Pjp) - cJU_JPIMMED_2_02 + 2;
+	    j__udyLFreeJV((Pjv_t) (Pjp->jp_Addr), Pop1, Pjpm);
+	    break;
+
+	case cJU_JPIMMED_3_02:
+	    j__udyLFreeJV((Pjv_t) (Pjp->jp_Addr), 2, Pjpm);
+	    break;
+
+#endif // JU_64BIT
+#endif // JUDYL
+
+
+// OTHER JPNULL, JPIMMED, OR UNEXPECTED TYPE -- nothing to free for this type:
+//
+// Note:  Lump together no-op and invalid JP types; see function header
+// comments.
+
+	default: break;
+
+	} // switch (JU_JPTYPE(Pjp))
+
+} // j__udyFreeSM()
diff --git a/libs/klib/judy/JudyGet.c b/libs/klib/judy/JudyGet.c
new file mode 100644
index 0000000..5071a3f
--- /dev/null
+++ b/libs/klib/judy/JudyGet.c
@@ -0,0 +1,1092 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// Judy1Test() and JudyLGet() functions for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error:  One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+#ifdef TRACEJPR                 // different macro name, for "retrieval" only.
+#include "JudyPrintJP.c"
+#endif
+
+
+// ****************************************************************************
+// J U D Y   1   T E S T
+// J U D Y   L   G E T
+//
+// See the manual entry for details.  Note support for "shortcut" entries to
+// trees known to start with a JPM.
+
+#ifdef JUDY1
+
+#ifdef JUDYGETINLINE
+FUNCTION int j__udy1Test
+#else
+FUNCTION int Judy1Test
+#endif
+
+#else  // JUDYL
+
+#ifdef JUDYGETINLINE
+FUNCTION PPvoid_t j__udyLGet
+#else
+FUNCTION PPvoid_t JudyLGet
+#endif
+
+#endif // JUDYL
+        (
+#ifdef JUDYGETINLINE
+        Pvoid_t   PArray,       // from which to retrieve.
+        Word_t    Index         // to retrieve.
+#else
+        Pcvoid_t  PArray,       // from which to retrieve.
+        Word_t    Index,        // to retrieve.
+        PJError_t PJError       // optional, for returning error info.
+#endif
+        )
+{
+        Pjp_t     Pjp;          // current JP while walking the tree.
+        Pjpm_t    Pjpm;         // for global accounting.
+        uint8_t   Digit;        // byte just decoded from Index.
+        Word_t    Pop1;         // leaf population (number of indexes).
+        Pjll_t    Pjll;         // pointer to LeafL.
+        DBGCODE(uint8_t ParentJPType;)
+
+#ifndef JUDYGETINLINE
+
+        if (PArray == (Pcvoid_t) NULL)  // empty array.
+        {
+  JUDY1CODE(return(0);)
+  JUDYLCODE(return((PPvoid_t) NULL);)
+        }
+
+// ****************************************************************************
+// PROCESS TOP LEVEL BRANCHES AND LEAF:
+
+        if (JU_LEAFW_POP0(PArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+        {
+            Pjlw_t Pjlw = P_JLW(PArray);        // first word of leaf.
+            int    posidx;                      // signed offset in leaf.
+
+            Pop1   = Pjlw[0] + 1;
+            posidx = j__udySearchLeafW(Pjlw + 1, Pop1, Index);
+
+            if (posidx >= 0)
+            {
+      JUDY1CODE(return(1);)
+      JUDYLCODE(return((PPvoid_t) (JL_LEAFWVALUEAREA(Pjlw, Pop1) + posidx));)
+            }
+  JUDY1CODE(return(0);)
+  JUDYLCODE(return((PPvoid_t) NULL);)
+        }
+
+#endif // ! JUDYGETINLINE
+
+        Pjpm = P_JPM(PArray);
+        Pjp = &(Pjpm->jpm_JP);  // top branch is below JPM.
+
+// ****************************************************************************
+// WALK THE JUDY TREE USING A STATE MACHINE:
+
+ContinueWalk:           // for going down one level; come here with Pjp set.
+
+#ifdef TRACEJPR
+        JudyPrintJP(Pjp, "g", __LINE__);
+#endif
+        switch (JU_JPTYPE(Pjp))
+        {
+
+// Ensure the switch table starts at 0 for speed; otherwise more code is
+// executed:
+
+        case 0: goto ReturnCorrupt;     // save a little code.
+
+
+// ****************************************************************************
+// JPNULL*:
+//
+// Note:  These are legitimate in a BranchU (only) and do not constitute a
+// fault.
+
+        case cJU_JPNULL1:
+        case cJU_JPNULL2:
+        case cJU_JPNULL3:
+#ifdef JU_64BIT
+        case cJU_JPNULL4:
+        case cJU_JPNULL5:
+        case cJU_JPNULL6:
+        case cJU_JPNULL7:
+#endif
+            assert(ParentJPType >= cJU_JPBRANCH_U2);
+            assert(ParentJPType <= cJU_JPBRANCH_U);
+      JUDY1CODE(return(0);)
+      JUDYLCODE(return((PPvoid_t) NULL);)
+
+
+// ****************************************************************************
+// JPBRANCH_L*:
+//
+// Note:  The use of JU_DCDNOTMATCHINDEX() in branches is not strictly
+// required,since this can be done at leaf level, but it costs nothing to do it
+// sooner, and it aborts an unnecessary traversal sooner.
+
+        case cJU_JPBRANCH_L2:
+
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 2)) break;
+            Digit = JU_DIGITATSTATE(Index, 2);
+            goto JudyBranchL;
+
+        case cJU_JPBRANCH_L3:
+
+#ifdef JU_64BIT // otherwise its a no-op:
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 3)) break;
+#endif
+            Digit = JU_DIGITATSTATE(Index, 3);
+            goto JudyBranchL;
+
+#ifdef JU_64BIT
+        case cJU_JPBRANCH_L4:
+
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 4)) break;
+            Digit = JU_DIGITATSTATE(Index, 4);
+            goto JudyBranchL;
+
+        case cJU_JPBRANCH_L5:
+
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 5)) break;
+            Digit = JU_DIGITATSTATE(Index, 5);
+            goto JudyBranchL;
+
+        case cJU_JPBRANCH_L6:
+
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 6)) break;
+            Digit = JU_DIGITATSTATE(Index, 6);
+            goto JudyBranchL;
+
+        case cJU_JPBRANCH_L7:
+
+            // JU_DCDNOTMATCHINDEX() would be a no-op.
+            Digit = JU_DIGITATSTATE(Index, 7);
+            goto JudyBranchL;
+
+#endif // JU_64BIT
+
+        case cJU_JPBRANCH_L:
+        {
+            Pjbl_t Pjbl;
+            int    posidx;
+
+            Digit = JU_DIGITATSTATE(Index, cJU_ROOTSTATE);
+
+// Common code for all BranchLs; come here with Digit set:
+
+JudyBranchL:
+            Pjbl = P_JBL(Pjp->jp_Addr);
+
+            posidx = 0;
+
+            do {
+                if (Pjbl->jbl_Expanse[posidx] == Digit)
+                {                       // found Digit; continue traversal:
+                    DBGCODE(ParentJPType = JU_JPTYPE(Pjp);)
+                    Pjp = Pjbl->jbl_jp + posidx;
+                    goto ContinueWalk;
+                }
+            } while (++posidx != Pjbl->jbl_NumJPs);
+
+            break;
+        }
+
+
+// ****************************************************************************
+// JPBRANCH_B*:
+
+        case cJU_JPBRANCH_B2:
+
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 2)) break;
+            Digit = JU_DIGITATSTATE(Index, 2);
+            goto JudyBranchB;
+
+        case cJU_JPBRANCH_B3:
+
+#ifdef JU_64BIT // otherwise its a no-op:
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 3)) break;
+#endif
+            Digit = JU_DIGITATSTATE(Index, 3);
+            goto JudyBranchB;
+
+
+#ifdef JU_64BIT
+        case cJU_JPBRANCH_B4:
+
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 4)) break;
+            Digit = JU_DIGITATSTATE(Index, 4);
+            goto JudyBranchB;
+
+        case cJU_JPBRANCH_B5:
+
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 5)) break;
+            Digit = JU_DIGITATSTATE(Index, 5);
+            goto JudyBranchB;
+
+        case cJU_JPBRANCH_B6:
+
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 6)) break;
+            Digit = JU_DIGITATSTATE(Index, 6);
+            goto JudyBranchB;
+
+        case cJU_JPBRANCH_B7:
+
+            // JU_DCDNOTMATCHINDEX() would be a no-op.
+            Digit = JU_DIGITATSTATE(Index, 7);
+            goto JudyBranchB;
+
+#endif // JU_64BIT
+
+        case cJU_JPBRANCH_B:
+        {
+            Pjbb_t    Pjbb;
+            Word_t    subexp;   // in bitmap, 0..7.
+            BITMAPB_t BitMap;   // for one subexpanse.
+            BITMAPB_t BitMask;  // bit in BitMap for Indexs Digit.
+
+            Digit = JU_DIGITATSTATE(Index, cJU_ROOTSTATE);
+
+// Common code for all BranchBs; come here with Digit set:
+
+JudyBranchB:
+            DBGCODE(ParentJPType = JU_JPTYPE(Pjp);)
+            Pjbb   = P_JBB(Pjp->jp_Addr);
+            subexp = Digit / cJU_BITSPERSUBEXPB;
+
+            BitMap = JU_JBB_BITMAP(Pjbb, subexp);
+            Pjp    = P_JP(JU_JBB_PJP(Pjbb, subexp));
+
+            BitMask = JU_BITPOSMASKB(Digit);
+
+// No JP in subexpanse for Index => Index not found:
+
+            if (! (BitMap & BitMask)) break;
+
+// Count JPs in the subexpanse below the one for Index:
+
+            Pjp += j__udyCountBitsB(BitMap & (BitMask - 1));
+
+            goto ContinueWalk;
+
+        } // case cJU_JPBRANCH_B*
+
+
+// ****************************************************************************
+// JPBRANCH_U*:
+//
+// Notice the reverse order of the cases, and falling through to the next case,
+// for performance.
+
+        case cJU_JPBRANCH_U:
+
+            DBGCODE(ParentJPType = JU_JPTYPE(Pjp);)
+            Pjp = JU_JBU_PJP(Pjp, Index, cJU_ROOTSTATE);
+
+// If not a BranchU, traverse; otherwise fall into the next case, which makes
+// this very fast code for a large Judy array (mainly BranchUs), especially
+// when branches are already in the cache, such as for prev/next:
+
+#ifndef JU_64BIT
+            if (JU_JPTYPE(Pjp) != cJU_JPBRANCH_U3) goto ContinueWalk;
+#else
+            if (JU_JPTYPE(Pjp) != cJU_JPBRANCH_U7) goto ContinueWalk;
+#endif
+
+#ifdef JU_64BIT
+        case cJU_JPBRANCH_U7:
+
+            // JU_DCDNOTMATCHINDEX() would be a no-op.
+            DBGCODE(ParentJPType = JU_JPTYPE(Pjp);)
+            Pjp = JU_JBU_PJP(Pjp, Index, 7);
+
+            if (JU_JPTYPE(Pjp) != cJU_JPBRANCH_U6) goto ContinueWalk;
+            // and fall through.
+
+        case cJU_JPBRANCH_U6:
+
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 6)) break;
+            DBGCODE(ParentJPType = JU_JPTYPE(Pjp);)
+            Pjp = JU_JBU_PJP(Pjp, Index, 6);
+
+            if (JU_JPTYPE(Pjp) != cJU_JPBRANCH_U5) goto ContinueWalk;
+            // and fall through.
+
+        case cJU_JPBRANCH_U5:
+
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 5)) break;
+            DBGCODE(ParentJPType = JU_JPTYPE(Pjp);)
+            Pjp = JU_JBU_PJP(Pjp, Index, 5);
+
+            if (JU_JPTYPE(Pjp) != cJU_JPBRANCH_U4) goto ContinueWalk;
+            // and fall through.
+
+        case cJU_JPBRANCH_U4:
+
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 4)) break;
+            DBGCODE(ParentJPType = JU_JPTYPE(Pjp);)
+            Pjp = JU_JBU_PJP(Pjp, Index, 4);
+
+            if (JU_JPTYPE(Pjp) != cJU_JPBRANCH_U3) goto ContinueWalk;
+            // and fall through.
+
+#endif // JU_64BIT
+
+        case cJU_JPBRANCH_U3:
+
+#ifdef JU_64BIT // otherwise its a no-op:
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 3)) break;
+#endif
+            DBGCODE(ParentJPType = JU_JPTYPE(Pjp);)
+            Pjp = JU_JBU_PJP(Pjp, Index, 3);
+
+            if (JU_JPTYPE(Pjp) != cJU_JPBRANCH_U2) goto ContinueWalk;
+            // and fall through.
+
+        case cJU_JPBRANCH_U2:
+
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 2)) break;
+            DBGCODE(ParentJPType = JU_JPTYPE(Pjp);)
+            Pjp = JU_JBU_PJP(Pjp, Index, 2);
+
+// Note:  BranchU2 is a special case that must continue traversal to a leaf,
+// immed, full, or null type:
+
+            goto ContinueWalk;
+
+
+// ****************************************************************************
+// JPLEAF*:
+//
+// Note:  Here the calls of JU_DCDNOTMATCHINDEX() are necessary and check
+// whether Index is out of the expanse of a narrow pointer.
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+
+        case cJU_JPLEAF1:
+        {
+            int posidx;         // signed offset in leaf.
+
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 1)) break;
+
+            Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+            Pjll = P_JLL(Pjp->jp_Addr);
+
+            if ((posidx = j__udySearchLeaf1(Pjll, Pop1, Index)) < 0) break;
+
+  JUDY1CODE(return(1);)
+  JUDYLCODE(return((PPvoid_t) (JL_LEAF1VALUEAREA(Pjll, Pop1) + posidx));)
+        }
+
+#endif // (JUDYL || (! JU_64BIT))
+
+        case cJU_JPLEAF2:
+        {
+            int posidx;         // signed offset in leaf.
+
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 2)) break;
+
+            Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+            Pjll = P_JLL(Pjp->jp_Addr);
+
+            if ((posidx = j__udySearchLeaf2(Pjll, Pop1, Index)) < 0) break;
+
+  JUDY1CODE(return(1);)
+  JUDYLCODE(return((PPvoid_t) (JL_LEAF2VALUEAREA(Pjll, Pop1) + posidx));)
+        }
+        case cJU_JPLEAF3:
+        {
+            int posidx;         // signed offset in leaf.
+
+#ifdef JU_64BIT // otherwise its a no-op:
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 3)) break;
+#endif
+
+            Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+            Pjll = P_JLL(Pjp->jp_Addr);
+
+            if ((posidx = j__udySearchLeaf3(Pjll, Pop1, Index)) < 0) break;
+
+  JUDY1CODE(return(1);)
+  JUDYLCODE(return((PPvoid_t) (JL_LEAF3VALUEAREA(Pjll, Pop1) + posidx));)
+        }
+#ifdef JU_64BIT
+        case cJU_JPLEAF4:
+        {
+            int posidx;         // signed offset in leaf.
+
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 4)) break;
+
+            Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+            Pjll = P_JLL(Pjp->jp_Addr);
+
+            if ((posidx = j__udySearchLeaf4(Pjll, Pop1, Index)) < 0) break;
+
+  JUDY1CODE(return(1);)
+  JUDYLCODE(return((PPvoid_t) (JL_LEAF4VALUEAREA(Pjll, Pop1) + posidx));)
+        }
+        case cJU_JPLEAF5:
+        {
+            int posidx;         // signed offset in leaf.
+
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 5)) break;
+
+            Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+            Pjll = P_JLL(Pjp->jp_Addr);
+
+            if ((posidx = j__udySearchLeaf5(Pjll, Pop1, Index)) < 0) break;
+
+  JUDY1CODE(return(1);)
+  JUDYLCODE(return((PPvoid_t) (JL_LEAF5VALUEAREA(Pjll, Pop1) + posidx));)
+        }
+
+        case cJU_JPLEAF6:
+        {
+            int posidx;         // signed offset in leaf.
+
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 6)) break;
+
+            Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+            Pjll = P_JLL(Pjp->jp_Addr);
+
+            if ((posidx = j__udySearchLeaf6(Pjll, Pop1, Index)) < 0) break;
+
+  JUDY1CODE(return(1);)
+  JUDYLCODE(return((PPvoid_t) (JL_LEAF6VALUEAREA(Pjll, Pop1) + posidx));)
+        }
+        case cJU_JPLEAF7:
+        {
+            int posidx;         // signed offset in leaf.
+
+            // JU_DCDNOTMATCHINDEX() would be a no-op.
+            Pop1 = JU_JPLEAF_POP0(Pjp) + 1;
+            Pjll = P_JLL(Pjp->jp_Addr);
+
+            if ((posidx = j__udySearchLeaf7(Pjll, Pop1, Index)) < 0) break;
+
+  JUDY1CODE(return(1);)
+  JUDYLCODE(return((PPvoid_t) (JL_LEAF7VALUEAREA(Pjll, Pop1) + posidx));)
+        }
+#endif // JU_64BIT
+
+
+// ****************************************************************************
+// JPLEAF_B1:
+
+        case cJU_JPLEAF_B1:
+        {
+            Pjlb_t    Pjlb;
+#ifdef JUDYL
+            int       posidx;
+            Word_t    subexp;   // in bitmap, 0..7.
+            BITMAPL_t BitMap;   // for one subexpanse.
+            BITMAPL_t BitMask;  // bit in BitMap for Indexs Digit.
+            Pjv_t     Pjv;
+#endif
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 1)) break;
+
+            Pjlb = P_JLB(Pjp->jp_Addr);
+
+#ifdef JUDY1
+
+// Simply check if Indexs bit is set in the bitmap:
+
+            if (JU_BITMAPTESTL(Pjlb, Index)) return(1);
+            break;
+
+#else // JUDYL
+
+// JudyL is much more complicated because of value area subarrays:
+
+            Digit   = JU_DIGITATSTATE(Index, 1);
+            subexp  = Digit / cJU_BITSPERSUBEXPL;
+            BitMap  = JU_JLB_BITMAP(Pjlb, subexp);
+            BitMask = JU_BITPOSMASKL(Digit);
+
+// No value in subexpanse for Index => Index not found:
+
+            if (! (BitMap & BitMask)) break;
+
+// Count value areas in the subexpanse below the one for Index:
+
+            Pjv = P_JV(JL_JLB_PVALUE(Pjlb, subexp));
+            assert(Pjv != (Pjv_t) NULL);
+            posidx = j__udyCountBitsL(BitMap & (BitMask - 1));
+
+            return((PPvoid_t) (Pjv + posidx));
+
+#endif // JUDYL
+
+        } // case cJU_JPLEAF_B1
+
+#ifdef JUDY1
+
+// ****************************************************************************
+// JPFULLPOPU1:
+//
+// If the Index is in the expanse, it is necessarily valid (found).
+
+        case cJ1_JPFULLPOPU1:
+
+            if (JU_DCDNOTMATCHINDEX(Index, Pjp, 1)) break;
+            return(1);
+
+#ifdef notdef // for future enhancements
+#ifdef JU_64BIT
+
+// Note: Need ? if (JU_DCDNOTMATCHINDEX(Index, Pjp, 1)) break;
+
+        case cJ1_JPFULLPOPU1m15:
+            if (Pjp->jp_1Index[14] == (uint8_t)Index) break;
+        case cJ1_JPFULLPOPU1m14:
+            if (Pjp->jp_1Index[13] == (uint8_t)Index) break;
+        case cJ1_JPFULLPOPU1m13:
+            if (Pjp->jp_1Index[12] == (uint8_t)Index) break;
+        case cJ1_JPFULLPOPU1m12:
+            if (Pjp->jp_1Index[11] == (uint8_t)Index) break;
+        case cJ1_JPFULLPOPU1m11:
+            if (Pjp->jp_1Index[10] == (uint8_t)Index) break;
+        case cJ1_JPFULLPOPU1m10:
+            if (Pjp->jp_1Index[9] == (uint8_t)Index) break;
+        case cJ1_JPFULLPOPU1m9:
+            if (Pjp->jp_1Index[8] == (uint8_t)Index) break;
+        case cJ1_JPFULLPOPU1m8:
+            if (Pjp->jp_1Index[7] == (uint8_t)Index) break;
+#endif
+        case cJ1_JPFULLPOPU1m7:
+            if (Pjp->jp_1Index[6] == (uint8_t)Index) break;
+        case cJ1_JPFULLPOPU1m6:
+            if (Pjp->jp_1Index[5] == (uint8_t)Index) break;
+        case cJ1_JPFULLPOPU1m5:
+            if (Pjp->jp_1Index[4] == (uint8_t)Index) break;
+        case cJ1_JPFULLPOPU1m4:
+            if (Pjp->jp_1Index[3] == (uint8_t)Index) break;
+        case cJ1_JPFULLPOPU1m3:
+            if (Pjp->jp_1Index[2] == (uint8_t)Index) break;
+        case cJ1_JPFULLPOPU1m2:
+            if (Pjp->jp_1Index[1] == (uint8_t)Index) break;
+        case cJ1_JPFULLPOPU1m1:
+            if (Pjp->jp_1Index[0] == (uint8_t)Index) break;
+
+            return(1);  // found, not in exclusion list
+
+#endif // JUDY1
+#endif //  notdef
+
+// ****************************************************************************
+// JPIMMED*:
+//
+// Note that the contents of jp_DcdPopO are different for cJU_JPIMMED_*_01:
+
+        case cJU_JPIMMED_1_01:
+        case cJU_JPIMMED_2_01:
+        case cJU_JPIMMED_3_01:
+#ifdef JU_64BIT
+        case cJU_JPIMMED_4_01:
+        case cJU_JPIMMED_5_01:
+        case cJU_JPIMMED_6_01:
+        case cJU_JPIMMED_7_01:
+#endif
+            if (JU_JPDCDPOP0(Pjp) != JU_TRIMTODCDSIZE(Index)) break;
+
+  JUDY1CODE(return(1);)
+  JUDYLCODE(return((PPvoid_t) &(Pjp->jp_Addr));)  // immediate value area.
+
+
+//   Macros to make code more readable and avoid dup errors
+
+#ifdef JUDY1
+
+#define CHECKINDEXNATIVE(LEAF_T, PJP, IDX, INDEX)                       \
+if (((LEAF_T *)((PJP)->jp_1Index))[(IDX) - 1] == (LEAF_T)(INDEX))       \
+    return(1)
+
+#define CHECKLEAFNONNAT(LFBTS, PJP, INDEX, IDX, COPY)                   \
+{                                                                       \
+    Word_t   i_ndex;                                                    \
+    uint8_t *a_ddr;                                                     \
+    a_ddr  = (PJP)->jp_1Index + (((IDX) - 1) * (LFBTS));                \
+    COPY(i_ndex, a_ddr);                                                \
+    if (i_ndex == JU_LEASTBYTES((INDEX), (LFBTS)))                      \
+        return(1);                                                      \
+}
+#endif
+
+#ifdef JUDYL
+
+#define CHECKINDEXNATIVE(LEAF_T, PJP, IDX, INDEX)                       \
+if (((LEAF_T *)((PJP)->jp_LIndex))[(IDX) - 1] == (LEAF_T)(INDEX))       \
+        return((PPvoid_t)(P_JV((PJP)->jp_Addr) + (IDX) - 1))
+
+#define CHECKLEAFNONNAT(LFBTS, PJP, INDEX, IDX, COPY)                   \
+{                                                                       \
+    Word_t   i_ndex;                                                    \
+    uint8_t *a_ddr;                                                     \
+    a_ddr  = (PJP)->jp_LIndex + (((IDX) - 1) * (LFBTS));                \
+    COPY(i_ndex, a_ddr);                                                \
+    if (i_ndex == JU_LEASTBYTES((INDEX), (LFBTS)))                      \
+        return((PPvoid_t)(P_JV((PJP)->jp_Addr) + (IDX) - 1));           \
+}
+#endif
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+        case cJ1_JPIMMED_1_15: CHECKINDEXNATIVE(uint8_t, Pjp, 15, Index);
+        case cJ1_JPIMMED_1_14: CHECKINDEXNATIVE(uint8_t, Pjp, 14, Index);
+        case cJ1_JPIMMED_1_13: CHECKINDEXNATIVE(uint8_t, Pjp, 13, Index);
+        case cJ1_JPIMMED_1_12: CHECKINDEXNATIVE(uint8_t, Pjp, 12, Index);
+        case cJ1_JPIMMED_1_11: CHECKINDEXNATIVE(uint8_t, Pjp, 11, Index);
+        case cJ1_JPIMMED_1_10: CHECKINDEXNATIVE(uint8_t, Pjp, 10, Index);
+        case cJ1_JPIMMED_1_09: CHECKINDEXNATIVE(uint8_t, Pjp,  9, Index);
+        case cJ1_JPIMMED_1_08: CHECKINDEXNATIVE(uint8_t, Pjp,  8, Index);
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+        case cJU_JPIMMED_1_07: CHECKINDEXNATIVE(uint8_t, Pjp,  7, Index);
+        case cJU_JPIMMED_1_06: CHECKINDEXNATIVE(uint8_t, Pjp,  6, Index);
+        case cJU_JPIMMED_1_05: CHECKINDEXNATIVE(uint8_t, Pjp,  5, Index);
+        case cJU_JPIMMED_1_04: CHECKINDEXNATIVE(uint8_t, Pjp,  4, Index);
+#endif
+        case cJU_JPIMMED_1_03: CHECKINDEXNATIVE(uint8_t, Pjp,  3, Index);
+        case cJU_JPIMMED_1_02: CHECKINDEXNATIVE(uint8_t, Pjp,  2, Index);
+                               CHECKINDEXNATIVE(uint8_t, Pjp,  1, Index);
+        break;
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+        case cJ1_JPIMMED_2_07: CHECKINDEXNATIVE(uint16_t, Pjp, 7, Index);
+        case cJ1_JPIMMED_2_06: CHECKINDEXNATIVE(uint16_t, Pjp, 6, Index);
+        case cJ1_JPIMMED_2_05: CHECKINDEXNATIVE(uint16_t, Pjp, 5, Index);
+        case cJ1_JPIMMED_2_04: CHECKINDEXNATIVE(uint16_t, Pjp, 4, Index);
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+        case cJU_JPIMMED_2_03: CHECKINDEXNATIVE(uint16_t, Pjp, 3, Index);
+        case cJU_JPIMMED_2_02: CHECKINDEXNATIVE(uint16_t, Pjp, 2, Index);
+                               CHECKINDEXNATIVE(uint16_t, Pjp, 1, Index);
+        break;
+#endif
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+        case cJ1_JPIMMED_3_05: 
+            CHECKLEAFNONNAT(3, Pjp, Index, 5, JU_COPY3_PINDEX_TO_LONG);
+        case cJ1_JPIMMED_3_04:
+            CHECKLEAFNONNAT(3, Pjp, Index, 4, JU_COPY3_PINDEX_TO_LONG);
+        case cJ1_JPIMMED_3_03:
+            CHECKLEAFNONNAT(3, Pjp, Index, 3, JU_COPY3_PINDEX_TO_LONG);
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+        case cJU_JPIMMED_3_02:
+            CHECKLEAFNONNAT(3, Pjp, Index, 2, JU_COPY3_PINDEX_TO_LONG);
+            CHECKLEAFNONNAT(3, Pjp, Index, 1, JU_COPY3_PINDEX_TO_LONG);
+            break;
+#endif
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+
+        case cJ1_JPIMMED_4_03: CHECKINDEXNATIVE(uint32_t, Pjp, 3, Index);
+        case cJ1_JPIMMED_4_02: CHECKINDEXNATIVE(uint32_t, Pjp, 2, Index);
+                               CHECKINDEXNATIVE(uint32_t, Pjp, 1, Index);
+            break;
+
+        case cJ1_JPIMMED_5_03:
+            CHECKLEAFNONNAT(5, Pjp, Index, 3, JU_COPY5_PINDEX_TO_LONG);
+        case cJ1_JPIMMED_5_02:
+            CHECKLEAFNONNAT(5, Pjp, Index, 2, JU_COPY5_PINDEX_TO_LONG);
+            CHECKLEAFNONNAT(5, Pjp, Index, 1, JU_COPY5_PINDEX_TO_LONG);
+            break;
+
+        case cJ1_JPIMMED_6_02:
+            CHECKLEAFNONNAT(6, Pjp, Index, 2, JU_COPY6_PINDEX_TO_LONG);
+            CHECKLEAFNONNAT(6, Pjp, Index, 1, JU_COPY6_PINDEX_TO_LONG);
+            break;
+
+        case cJ1_JPIMMED_7_02:
+            CHECKLEAFNONNAT(7, Pjp, Index, 2, JU_COPY7_PINDEX_TO_LONG);
+            CHECKLEAFNONNAT(7, Pjp, Index, 1, JU_COPY7_PINDEX_TO_LONG);
+            break;
+
+#endif // (JUDY1 && JU_64BIT)
+
+
+// ****************************************************************************
+// INVALID JP TYPE:
+
+        default:
+
+ReturnCorrupt:
+
+#ifdef JUDYGETINLINE    // Pjpm is known to be non-null:
+            JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT);
+#else
+            JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+#endif
+            JUDY1CODE(return(JERRI );)
+            JUDYLCODE(return(PPJERR);)
+
+        } // switch on JP type
+
+JUDY1CODE(return(0);)
+JUDYLCODE(return((PPvoid_t) NULL);)
+
+} // Judy1Test() / JudyLGet()
+
+
+#ifndef JUDYGETINLINE   // only compile the following function once:
+#ifdef DEBUG
+
+// ****************************************************************************
+// J U D Y   C H E C K   P O P
+//
+// Given a pointer to a Judy array, traverse the entire array to ensure
+// population counts add up correctly.  This can catch various coding errors.
+//
+// Since walking the entire tree is probably time-consuming, enable this
+// function by setting env parameter $CHECKPOP to first call at which to start
+// checking.  Note:  This function is called both from insert and delete code.
+//
+// Note:  Even though this function does nothing useful for LEAFW leaves, its
+// good practice to call it anyway, and cheap too.
+//
+// TBD:  This is a debug-only check function similar to JudyCheckSorted(), but
+// since it walks the tree it is Judy1/JudyL-specific and must live in a source
+// file that is built both ways.
+//
+// TBD:  As feared, enabling this code for every insert/delete makes Judy
+// deathly slow, even for a small tree (10K indexes).  Its not so bad if
+// present but disabled (<1% slowdown measured).  Still, should it be ifdefd
+// other than DEBUG and/or called less often?
+//
+// TBD:  Should this "population checker" be expanded to a comprehensive tree
+// checker?  It currently detects invalid LEAFW/JP types as well as inconsistent
+// pop1s.  Other possible checks, all based on essentially redundant data in
+// the Judy tree, include:
+//
+// - Zero LS bits in jp_Addr field.
+//
+// - Correct Dcd bits.
+//
+// - Consistent JP types (always descending down the tree).
+//
+// - Sorted linear lists in BranchLs and leaves (using JudyCheckSorted(), but
+//   ideally that function is already called wherever appropriate after any
+//   linear list is modified).
+//
+// - Any others possible?
+
+#include <stdlib.h>             // for getenv() and atol().
+
+static Word_t JudyCheckPopSM(Pjp_t Pjp, Word_t RootPop1);
+
+FUNCTION void JudyCheckPop(
+        Pvoid_t PArray)
+{
+static  bool_t  checked = FALSE;        // already checked env parameter.
+static  bool_t  enabled = FALSE;        // env parameter set.
+static  bool_t  active  = FALSE;        // calls >= callsmin.
+static  Word_t  callsmin;               // start point from $CHECKPOP.
+static  Word_t  calls = 0;              // times called so far.
+
+
+// CHECK FOR EXTERNAL ENABLING:
+
+        if (! checked)                  // only check once.
+        {
+            char * value;               // for getenv().
+
+            checked = TRUE;
+
+            if ((value = getenv("CHECKPOP")) == (char *) NULL)
+            {
+#ifdef notdef
+// Take this out because nightly tests want to be flavor-independent; its not
+// OK to emit special non-error output from the debug flavor:
+
+                (void) puts("JudyCheckPop() present but not enabled by "
+                            "$CHECKPOP env parameter; set it to the number of "
+                            "calls at which to begin checking");
+#endif
+                return;
+            }
+
+            callsmin = atol(value);     // note: non-number evaluates to 0.
+            enabled  = TRUE;
+
+            (void) printf("JudyCheckPop() present and enabled; callsmin = "
+                          "%lu\n", callsmin);
+        }
+        else if (! enabled) return;
+
+// Previously or just now enabled; check if non-active or newly active:
+
+        if (! active)
+        {
+            if (++calls < callsmin) return;
+
+            (void) printf("JudyCheckPop() activated at call %lu\n", calls);
+            active = TRUE;
+        }
+
+// IGNORE LEAFW AT TOP OF TREE:
+
+        if (JU_LEAFW_POP0(PArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+                return;
+
+// Check JPM pop0 against tree, recursively:
+//
+// Note:  The traversal code in JudyCheckPopSM() is simplest when the case
+// statement for each JP type compares the pop1 for that JP to its subtree (if
+// any) after traversing the subtree (thats the hard part) and adding up
+// actual pop1s.  A top branchs JP in the JPM does not have room for a
+// full-word pop1, so pass it in as a special case.
+
+        {
+            Pjpm_t Pjpm = P_JPM(PArray);
+            (void) JudyCheckPopSM(&(Pjpm->jpm_JP), Pjpm->jpm_Pop0 + 1);
+            return;
+        }
+
+} // JudyCheckPop()
+
+
+// ****************************************************************************
+// J U D Y   C H E C K   P O P   S M
+//
+// Recursive state machine (subroutine) for JudyCheckPop():  Given a Pjp (other
+// than JPNULL*; caller should shortcut) and the root population for top-level
+// branches, check the subtrees actual pop1 against its nominal value, and
+// return the total pop1 for the subtree.
+//
+// Note:  Expect RootPop1 to be ignored at lower levels, so pass down 0, which
+// should pop an assertion if this expectation is violated.
+
+FUNCTION static Word_t JudyCheckPopSM(
+        Pjp_t  Pjp,             // top of subtree.
+        Word_t RootPop1)        // whole array, for top-level branches only.
+{
+        Word_t pop1_jp;         // nominal population from the JP.
+        Word_t pop1 = 0;        // actual population at this level.
+        Word_t offset;          // in a branch.
+
+#define PREPBRANCH(cPopBytes,Next) \
+        pop1_jp = JU_JPBRANCH_POP0(Pjp, cPopBytes) + 1; goto Next
+
+assert((((Word_t) (Pjp->jp_Addr)) & 7) == 3);
+        switch (JU_JPTYPE(Pjp))
+        {
+
+        case cJU_JPBRANCH_L2: PREPBRANCH(2, BranchL);
+        case cJU_JPBRANCH_L3: PREPBRANCH(3, BranchL);
+#ifdef JU_64BIT
+        case cJU_JPBRANCH_L4: PREPBRANCH(4, BranchL);
+        case cJU_JPBRANCH_L5: PREPBRANCH(5, BranchL);
+        case cJU_JPBRANCH_L6: PREPBRANCH(6, BranchL);
+        case cJU_JPBRANCH_L7: PREPBRANCH(7, BranchL);
+#endif
+        case cJU_JPBRANCH_L:  pop1_jp = RootPop1;
+        {
+            Pjbl_t Pjbl;
+BranchL:
+            Pjbl = P_JBL(Pjp->jp_Addr);
+
+            for (offset = 0; offset < (Pjbl->jbl_NumJPs); ++offset)
+                pop1 += JudyCheckPopSM((Pjbl->jbl_jp) + offset, 0);
+
+            assert(pop1_jp == pop1);
+            return(pop1);
+        }
+
+        case cJU_JPBRANCH_B2: PREPBRANCH(2, BranchB);
+        case cJU_JPBRANCH_B3: PREPBRANCH(3, BranchB);
+#ifdef JU_64BIT
+        case cJU_JPBRANCH_B4: PREPBRANCH(4, BranchB);
+        case cJU_JPBRANCH_B5: PREPBRANCH(5, BranchB);
+        case cJU_JPBRANCH_B6: PREPBRANCH(6, BranchB);
+        case cJU_JPBRANCH_B7: PREPBRANCH(7, BranchB);
+#endif
+        case cJU_JPBRANCH_B:  pop1_jp = RootPop1;
+        {
+            Word_t subexp;
+            Word_t jpcount;
+            Pjbb_t Pjbb;
+BranchB:
+            Pjbb = P_JBB(Pjp->jp_Addr);
+
+            for (subexp = 0; subexp < cJU_NUMSUBEXPB; ++subexp)
+            {
+                jpcount = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, subexp));
+
+                for (offset = 0; offset < jpcount; ++offset)
+                {
+                    pop1 += JudyCheckPopSM(P_JP(JU_JBB_PJP(Pjbb, subexp))
+                                         + offset, 0);
+                }
+            }
+
+            assert(pop1_jp == pop1);
+            return(pop1);
+        }
+
+        case cJU_JPBRANCH_U2: PREPBRANCH(2, BranchU);
+        case cJU_JPBRANCH_U3: PREPBRANCH(3, BranchU);
+#ifdef JU_64BIT
+        case cJU_JPBRANCH_U4: PREPBRANCH(4, BranchU);
+        case cJU_JPBRANCH_U5: PREPBRANCH(5, BranchU);
+        case cJU_JPBRANCH_U6: PREPBRANCH(6, BranchU);
+        case cJU_JPBRANCH_U7: PREPBRANCH(7, BranchU);
+#endif
+        case cJU_JPBRANCH_U:  pop1_jp = RootPop1;
+        {
+            Pjbu_t Pjbu;
+BranchU:
+            Pjbu = P_JBU(Pjp->jp_Addr);
+
+            for (offset = 0; offset < cJU_BRANCHUNUMJPS; ++offset)
+            {
+                if (((Pjbu->jbu_jp[offset].jp_Type) >= cJU_JPNULL1)
+                 && ((Pjbu->jbu_jp[offset].jp_Type) <= cJU_JPNULLMAX))
+                {
+                    continue;           // skip null JP to save time.
+                }
+
+                pop1 += JudyCheckPopSM((Pjbu->jbu_jp) + offset, 0);
+            }
+
+            assert(pop1_jp == pop1);
+            return(pop1);
+        }
+
+
+// -- Cases below here terminate and do not recurse. --
+//
+// For all of these cases except JPLEAF_B1, there is no way to check the JPs
+// pop1 against the object itself; just return the pop1; but for linear leaves,
+// a bounds check is possible.
+
+#define CHECKLEAF(MaxPop1)                              \
+        pop1 = JU_JPLEAF_POP0(Pjp) + 1;                 \
+        assert(pop1 >= 1);                              \
+        assert(pop1 <= (MaxPop1));                      \
+        return(pop1)
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+        case cJU_JPLEAF1:  CHECKLEAF(cJU_LEAF1_MAXPOP1);
+#endif
+        case cJU_JPLEAF2:  CHECKLEAF(cJU_LEAF2_MAXPOP1);
+        case cJU_JPLEAF3:  CHECKLEAF(cJU_LEAF3_MAXPOP1);
+#ifdef JU_64BIT
+        case cJU_JPLEAF4:  CHECKLEAF(cJU_LEAF4_MAXPOP1);
+        case cJU_JPLEAF5:  CHECKLEAF(cJU_LEAF5_MAXPOP1);
+        case cJU_JPLEAF6:  CHECKLEAF(cJU_LEAF6_MAXPOP1);
+        case cJU_JPLEAF7:  CHECKLEAF(cJU_LEAF7_MAXPOP1);
+#endif
+
+        case cJU_JPLEAF_B1:
+        {
+            Word_t subexp;
+            Pjlb_t Pjlb;
+
+            pop1_jp = JU_JPLEAF_POP0(Pjp) + 1;
+
+            Pjlb = P_JLB(Pjp->jp_Addr);
+
+            for (subexp = 0; subexp < cJU_NUMSUBEXPL; ++subexp)
+                pop1 += j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, subexp));
+
+            assert(pop1_jp == pop1);
+            return(pop1);
+        }
+
+        JUDY1CODE(case cJ1_JPFULLPOPU1: return(cJU_JPFULLPOPU1_POP0);)
+
+        case cJU_JPIMMED_1_01:  return(1);
+        case cJU_JPIMMED_2_01:  return(1);
+        case cJU_JPIMMED_3_01:  return(1);
+#ifdef JU_64BIT
+        case cJU_JPIMMED_4_01:  return(1);
+        case cJU_JPIMMED_5_01:  return(1);
+        case cJU_JPIMMED_6_01:  return(1);
+        case cJU_JPIMMED_7_01:  return(1);
+#endif
+
+        case cJU_JPIMMED_1_02:  return(2);
+        case cJU_JPIMMED_1_03:  return(3);
+#if (defined(JUDY1) || defined(JU_64BIT))
+        case cJU_JPIMMED_1_04:  return(4);
+        case cJU_JPIMMED_1_05:  return(5);
+        case cJU_JPIMMED_1_06:  return(6);
+        case cJU_JPIMMED_1_07:  return(7);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+        case cJ1_JPIMMED_1_08:  return(8);
+        case cJ1_JPIMMED_1_09:  return(9);
+        case cJ1_JPIMMED_1_10:  return(10);
+        case cJ1_JPIMMED_1_11:  return(11);
+        case cJ1_JPIMMED_1_12:  return(12);
+        case cJ1_JPIMMED_1_13:  return(13);
+        case cJ1_JPIMMED_1_14:  return(14);
+        case cJ1_JPIMMED_1_15:  return(15);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+        case cJU_JPIMMED_2_02:  return(2);
+        case cJU_JPIMMED_2_03:  return(3);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+        case cJ1_JPIMMED_2_04:  return(4);
+        case cJ1_JPIMMED_2_05:  return(5);
+        case cJ1_JPIMMED_2_06:  return(6);
+        case cJ1_JPIMMED_2_07:  return(7);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+        case cJU_JPIMMED_3_02:  return(2);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+        case cJ1_JPIMMED_3_03:  return(3);
+        case cJ1_JPIMMED_3_04:  return(4);
+        case cJ1_JPIMMED_3_05:  return(5);
+
+        case cJ1_JPIMMED_4_02:  return(2);
+        case cJ1_JPIMMED_4_03:  return(3);
+        case cJ1_JPIMMED_5_02:  return(2);
+        case cJ1_JPIMMED_5_03:  return(3);
+        case cJ1_JPIMMED_6_02:  return(2);
+        case cJ1_JPIMMED_7_02:  return(2);
+#endif
+
+        } // switch (JU_JPTYPE(Pjp))
+
+        assert(FALSE);          // unrecognized JP type => corruption.
+        return(0);              // to make some compilers happy.
+
+} // JudyCheckPopSM()
+
+#endif // DEBUG
+#endif // ! JUDYGETINLINE
diff --git a/libs/klib/judy/JudyHS.c b/libs/klib/judy/JudyHS.c
new file mode 100644
index 0000000..aa9fbfa
--- /dev/null
+++ b/libs/klib/judy/JudyHS.c
@@ -0,0 +1,770 @@
+//=======================================================================
+//   Author Douglas L. Baskins, Dec 2003.
+//   Permission to use this code is freely granted, provided that this
+//   statement is retained.
+//   email - doug at sourcejudy.com -or- dougbaskins at yahoo.com
+//=======================================================================
+
+#include <string.h>                     // for memcmp(), memcpy()
+
+#include <Judy.h>                       // for JudyL* routines/macros
+
+/*
+   This routine is a very fast "string" version of an ADT that stores
+   (JudyHSIns()), retrieves (JudyHSGet()), deletes (JudyHSDel()) and
+   frees the entire ADT (JudyHSFreeArray()) strings.  It uses the "Judy
+   arrays" JudyL() API as the main workhorse.  The length of the string
+   is included in the calling parameters so that strings with embedded
+   \0s can be used.  The string lengths can be from 0 bytes to whatever
+   malloc() can handle (~2GB).
+
+   Compile:
+  
+      cc -O JudyHS.c -c         needs to link with -lJudy (libJudy.a)
+  
+      Note: in gcc version 3.3.1, -O2 generates faster code than -O
+      Note: in gcc version 3.3.2, -O3 generates faster code than -O2
+
+   NOTES:
+
+1) There may be some performance issues with 64 bit machines, because I
+   have not characterized that it yet.
+
+2) It appears that a modern CPU (>2Ghz) that the instruction times are
+   much faster that a RAM access, so building up a word from bytes takes
+   no longer that a whole word access.  I am taking advantage of this to
+   make this code endian neutral.  A side effect of this is strings do
+   not need to be aligned, nor tested to be on to a word boundry.  In
+   older and in slow (RISC) machines, this may be a performance issue.
+   I have given up trying to optimize for machines that have very slow
+   mpy, mod, variable shifts and call returns.
+
+3) JudyHS is very scalable from 1 string to billions (with enough RAM).
+   The memory usage is also scales with population.  I have attempted to
+   combine the best characteristics of JudyL arrays with Hashing methods
+   and well designed modern processors (such as the 1.3Ghz Intel
+   Centrino this is being written on).
+
+   HOW JudyHS WORKS: ( 4[8] means 4 bytes in 32 bit machine and 8 in 64)
+
+   A) A JudyL array is used to separate strings of equal lengths into
+   their own structures (a different hash table is used for each length
+   of string).  The additional time overhead is very near zero because
+   of the CPU cache.  The space efficiency is improved because the
+   length need not be stored with the string (ls_t).  The "JLHash" ADT
+   in the test program "StringCompare" is verification of both these
+   assumptions.
+
+   B) A 32 bit hash value is produced from the string.  Many thanks to
+   the Internet and the author (Bob Jenkins) for coming up with a very
+   good and fast universal string hash.  Next the 32 bit hash number is
+   used as an Index to another JudyL array.  Notice that one (1) JudyL
+   array is used as a hash table per each string length.  If there are
+   no hash collisions (normally) then the string is copied to a
+   structure (ls_t) along with room for storing a Value.  A flag is
+   added to the pointer to note it is pointing to a ls_t structure.
+   Since the lengths of the strings are the same, there is no need to
+   stored length of string in the ls_t structure.  This saves about a
+   word per string of memory.
+
+   C) When there is a hashing collision (very rare), a JudyL array is
+   used to decode the next 4[8] bytes of the string.  That is, the next
+   4[8] bytes of the string are used as the Index.  This process is
+   repeated until the remaining string is unique.  The remaining string
+   (if any) is stored in a (now smaller) ls_t structure.  If the
+   remaining string is less or equal to 4[8] bytes, then the ls_t
+   structure is not needed and the Value area in the JudyL array is
+   used.  A compile option -DDONOTUSEHASH is available to test this
+   structure without using hashing (only the JudyL tree is used).  This
+   is equivalent to having all strings hashed to the same bucket.  The
+   speed is still better than all other tree based ADTs I have tested.
+   An added benefit of this is a very fast "hash collision" resolving.
+   It could foil hackers that exploit the slow synonym (linked-list)
+   collision handling property used with most hashing algorithms.  If
+   this is not a necessary property, then a simpler ADT "JLHash" that is
+   documented the the test program "StringCompare.c" may be used with a
+   little loss of memory efficiency (because it includes the string
+   length with the ls_t structure).  JudyHS was written to be the
+   fastest, very scalable, memory efficient, general purpose string ADT
+   possible.  (However, I would like to eat those words someday). (dlb)
+
+*/
+
+#ifdef EXAMPLE_CODE
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+
+#include <Judy.h>
+
+//#include "JudyHS.h"                   // for Judy.h without JudyHS*()
+
+// By Doug Baskins Apr 2004 - for JudyHS man page
+
+#define MAXLINE 1000000                 /* max length of line */
+char      Index[MAXLINE];               // string to check
+
+int     // Usage:  CheckDupLines < file
+main()
+{
+    Pvoid_t   PJArray = (PWord_t)NULL;  // Judy array.
+    PWord_t   PValue;                   // ^ Judy array element.
+    Word_t    Bytes;                    // size of JudyHS array.
+    Word_t    LineNumb = 0;             // current line number
+    Word_t    Dups = 0;                 // number of duplicate lines
+
+    while (fgets(Index, MAXLINE, stdin) != (char *)NULL)
+    {
+        LineNumb++;                     // line number
+
+//      store string into array
+        JHSI(PValue, PJArray, Index, strlen(Index)); 
+        if (*PValue)                    // check if duplicate
+        {
+            Dups++;                     // count duplicates
+            printf("Duplicate lines %lu:%lu:%s", *PValue, LineNumb, Index);
+        }
+        else
+        {
+            *PValue = LineNumb;         // store Line number
+        }
+    }
+    printf("%lu Duplicates, free JudyHS array of %lu Lines\n", 
+                    Dups, LineNumb - Dups);
+    JHSFA(Bytes, PJArray);              // free array
+    printf("The JudyHS array allocated %lu bytes of memory\n", Bytes);
+    return (0);
+}
+#endif // EXAMPLE_CODE
+
+// Note:  Use JLAP_INVALID, which is non-zero, to mark pointers to a ls_t
+// This makes it compatable with previous versions of JudyL()
+
+#define IS_PLS(PLS)     (((Word_t) (PLS)) & JLAP_INVALID)
+#define CLEAR_PLS(PLS)  (((Word_t) (PLS)) & (~JLAP_INVALID))
+#define SET_PLS(PLS)    (((Word_t) (PLS)) | JLAP_INVALID)
+
+#define WORDSIZE     (sizeof(Word_t))
+
+// this is the struct used for "leaf" strings.  Note that
+// the Value is followed by a "variable" length ls_String array.
+//
+typedef struct L_EAFSTRING
+{
+    Word_t    ls_Value;                 // Value area (cannot change size)
+    uint8_t   ls_String[WORDSIZE];      // to fill out to a Word_t size
+} ls_t     , *Pls_t;
+
+#define LS_STRUCTOVD     (sizeof(ls_t) - WORDSIZE)
+
+// Calculate size of ls_t including the string of length of LEN.
+//
+#define LS_WORDLEN(LEN)  (((LEN) + LS_STRUCTOVD + WORDSIZE - 1) / WORDSIZE)
+
+// Copy from 0..4[8] bytes from string to a Word_t
+// NOTE: the copy in in little-endian order to take advantage of improved 
+// memory efficiency of JudyLIns() with smaller numbers
+//
+#define        COPYSTRING4toWORD(WORD,STR,LEN)          \
+{                                                       \
+    WORD = 0;                                           \
+    switch(LEN)                                         \
+    {                                                   \
+    default:    /* four and greater */                  \
+    case 4:                                             \
+        WORD += (Word_t)(((uint8_t *)(STR))[3] << 24);  \
+    case 3:                                             \
+        WORD += (Word_t)(((uint8_t *)(STR))[2] << 16);  \
+    case 2:                                             \
+        WORD += (Word_t)(((uint8_t *)(STR))[1] <<  8);  \
+    case 1:                                             \
+        WORD += (Word_t)(((uint8_t *)(STR))[0]);        \
+    case 0: break;                                      \
+    }                                                   \
+}
+
+#ifdef JU_64BIT
+
+// copy from 0..8 bytes from string to Word_t
+//
+#define        COPYSTRING8toWORD(WORD,STR,LEN)          \
+{                                                       \
+    WORD = 0UL;                                         \
+    switch(LEN)                                         \
+    {                                                   \
+    default:    /* eight and greater */                 \
+    case 8:                                             \
+        WORD += ((Word_t)((uint8_t *)(STR))[7] << 56);  \
+    case 7:                                             \
+        WORD += ((Word_t)((uint8_t *)(STR))[6] << 48);  \
+    case 6:                                             \
+        WORD += ((Word_t)((uint8_t *)(STR))[5] << 40);  \
+    case 5:                                             \
+        WORD += ((Word_t)((uint8_t *)(STR))[4] << 32);  \
+    case 4:                                             \
+        WORD += ((Word_t)((uint8_t *)(STR))[3] << 24);  \
+    case 3:                                             \
+        WORD += ((Word_t)((uint8_t *)(STR))[2] << 16);  \
+    case 2:                                             \
+        WORD += ((Word_t)((uint8_t *)(STR))[1] <<  8);  \
+    case 1:                                             \
+        WORD += ((Word_t)((uint8_t *)(STR))[0]);        \
+    case 0: break;                                      \
+    }                                                   \
+}
+
+#define COPYSTRINGtoWORD COPYSTRING8toWORD
+
+#else  // JU_32BIT
+
+#define COPYSTRINGtoWORD COPYSTRING4toWORD
+
+#endif // JU_32BIT
+
+// set JError_t locally
+
+#define JU_SET_ERRNO(PJERROR, JERRNO)           \
+{                                               \
+    if (PJERROR != (PJError_t) NULL)            \
+    {                                           \
+        if (JERRNO)                             \
+            JU_ERRNO(PJError) = (JERRNO);       \
+        JU_ERRID(PJERROR) = __LINE__;           \
+    }                                           \
+}
+
+//=======================================================================
+// This routine must hash string to 24..32 bits.  The "goodness" of
+// the hash is not as important as its speed.
+//=======================================================================
+
+// hash to no more than 32 bits
+
+// extern Word_t gHmask; for hash bits experiments
+
+#define JUDYHASHSTR(HVALUE,STRING,LENGTH)       \
+{                                               \
+    uint8_t *p_ = (uint8_t *)(STRING);          \
+    uint8_t *q_ = p_ + (LENGTH);                \
+    uint32_t c_ = 0;                            \
+    for (; p_ != q_; ++p_)                      \
+    {                                           \
+        c_ = (c_ * 31) + *p_;                   \
+    }                                           \
+/*  c_ &= gHmask;   see above   */              \
+    (HVALUE) = c_;                              \
+}
+
+// Find String of Len in JudyHS structure, return pointer to associated Value
+
+PPvoid_t
+JudyHSGet(Pcvoid_t PArray,              // pointer (^) to structure
+           void * Str,                  // pointer to string
+           Word_t Len                   // length of string
+    )
+{
+    uint8_t  *String = (uint8_t *)Str;
+    PPvoid_t  PPValue;                  // pointer to Value
+    Word_t    Index;                    // 4[8] bytes of String
+
+    JLG(PPValue, PArray, Len);          // find hash table for strings of Len
+    if (PPValue == (PPvoid_t) NULL)
+        return ((PPvoid_t) NULL);       // no strings of this Len
+
+//  check for caller error (null pointer)
+//
+    if ((String == (void *) NULL) && (Len != 0))
+        return ((PPvoid_t) NULL);       // avoid null-pointer dereference
+
+#ifndef DONOTUSEHASH
+    if (Len > WORDSIZE)                 // Hash table not necessary with short
+    {
+        uint32_t  HValue;               // hash of input string
+        JUDYHASHSTR(HValue, String, Len);       // hash to no more than 32 bits
+        JLG(PPValue, *PPValue, (Word_t)HValue); // get ^ to hash bucket
+        if (PPValue == (PPvoid_t) NULL)
+            return ((PPvoid_t) NULL);   // no entry in Hash table
+    }
+#endif // DONOTUSEHASH
+
+/*
+  Each JudyL array decodes 4[8] bytes of the string.  Since the hash
+  collisions occur very infrequently, the performance is not important.
+  However, even if the Hash code is not used this method still is
+  significantly faster than common tree methods (AVL, Red-Black, Splay,
+  b-tree, etc..).  You can compare it yourself with #define DONOTUSEHASH
+  1 or putting -DDONOTUSEHASH in the cc line.  Use the "StringCompare.c"
+  code to compare (9Dec2003 dlb).
+*/
+    while (Len > WORDSIZE)              // traverse tree of JudyL arrays
+    {
+        if (IS_PLS(*PPValue))           // ^ to JudyL array or ls_t struct?
+        {
+            Pls_t     Pls;              // ls_t struct, termination of tree
+            Pls = (Pls_t) CLEAR_PLS(*PPValue);  // remove flag from ^
+
+//          if remaining string matches, return ^ to Value, else NULL
+
+            if (memcmp(String, Pls->ls_String, Len) == 0)
+                return ((PPvoid_t) (&(Pls->ls_Value)));
+            else
+                return ((PPvoid_t) NULL);       // string does not match
+        }
+        else
+        {
+            COPYSTRINGtoWORD(Index, String, WORDSIZE);
+
+            JLG(PPValue, *PPValue, Index);      // decode next 4[8] bytes
+            if (PPValue == (PPvoid_t) NULL)     // if NULL array, bail out
+                return ((PPvoid_t) NULL);       // string does not match
+
+            String += WORDSIZE;                 // advance
+            Len -= WORDSIZE;
+        }
+    }
+
+//  Get remaining 1..4[8] bytes left in string
+
+    COPYSTRINGtoWORD(Index, String, Len);
+    JLG(PPValue, *PPValue, Index);      // decode last 1-4[8] bytes
+    return (PPValue);
+}
+
+// Add string to a tree of JudyL arrays (all lengths must be same)
+
+static PPvoid_t
+insStrJudyLTree(uint8_t * String,      // string to add to tree of JudyL arrays
+                 Word_t Len,            // length of string
+                 PPvoid_t PPValue,      // pointer to root pointer
+                 PJError_t PJError      // for returning error info
+    )
+{
+    Word_t    Index;                    // next 4[8] bytes of String
+
+    while (Len > WORDSIZE)              // add to JudyL tree
+    {
+//      CASE 1, pointer is to a NULL, make a new ls_t leaf
+
+        if (*PPValue == (Pvoid_t)NULL)
+        {
+            Pls_t     Pls;              // memory for a ls_t
+            Pls = (Pls_t) JudyMalloc(LS_WORDLEN(Len));
+            if (Pls == NULL)
+            {
+                JU_SET_ERRNO(PJError, JU_ERRNO_NOMEM);
+                return (PPJERR);
+            }
+            Pls->ls_Value = 0;                          // clear Value word
+            memcpy(Pls->ls_String, String, Len);        // copy to new struct
+            *PPValue = (Pvoid_t)SET_PLS(Pls);           // mark pointer
+            return ((PPvoid_t) (&Pls->ls_Value));       // return ^ to Value
+        }                                               // no exit here
+//      CASE 2: is a ls_t, free (and shorten), then decode into JudyL tree
+
+        if (IS_PLS(*PPValue))                   // pointer to a ls_t? (leaf)
+        {
+            Pls_t     Pls;                      // ^ to ls_t
+            uint8_t  *String0;                  // ^ to string in ls_t
+            Word_t    Index0;                   // 4[8] bytes in string
+            Word_t    FreeLen;                  // length of ls_t
+            PPvoid_t  PPsplit;
+
+            FreeLen = LS_WORDLEN(Len);          // length of ls_t
+
+            Pls = (Pls_t) CLEAR_PLS(*PPValue);  // demangle ^ to ls_t
+            String0 = Pls->ls_String;
+            if (memcmp(String, String0, Len) == 0)      // check if match?
+            {
+                return ((PPvoid_t) (&Pls->ls_Value));   // yes, duplicate
+            }
+
+            *PPValue = NULL;            // clear ^ to ls_t and make JudyL
+
+//          This do loop is technically not required, saves multiple JudyFree()
+//          when storing already sorted strings into structure
+
+            do                          // decode next 4[8] bytes of string
+            {                           // with a JudyL array
+//              Note: string0 is always aligned
+
+                COPYSTRINGtoWORD(Index0, String0, WORDSIZE);
+                String0 += WORDSIZE;
+                COPYSTRINGtoWORD(Index, String, WORDSIZE);
+                String += WORDSIZE;
+                Len -= WORDSIZE;
+                PPsplit = PPValue;      // save for split below
+                PPValue = JudyLIns(PPValue, Index0, PJError);
+                if (PPValue == PPJERR)
+                {
+                    JU_SET_ERRNO(PJError, 0);
+                    return (PPJERR);
+                }
+
+            } while ((Index0 == Index) && (Len > WORDSIZE));
+
+//          finish storing remainder of string that was in the ls_t
+
+            PPValue = insStrJudyLTree(String0, Len, PPValue, PJError);
+            if (PPValue == PPJERR)
+            {
+                return (PPJERR);
+            }
+//          copy old Value to Value in new struct
+
+            *(PWord_t)PPValue = Pls->ls_Value;
+
+//          free the string buffer (ls_t)
+
+            JudyFree((Pvoid_t)Pls, FreeLen);
+            PPValue = JudyLIns(PPsplit, Index, PJError);
+            if (PPValue == PPJERR)
+            {
+                JU_SET_ERRNO(PJError, 0);
+                return (PPValue);
+            }
+
+//          finish remainder of newly inserted string
+
+            PPValue = insStrJudyLTree(String, Len, PPValue, PJError);
+            return (PPValue);
+        }                               // no exit here
+//      CASE 3, more JudyL arrays, decode to next tree
+
+        COPYSTRINGtoWORD(Index, String, WORDSIZE);
+        Len -= WORDSIZE;
+        String += WORDSIZE;
+
+        PPValue = JudyLIns(PPValue, Index, PJError);    // next 4[8] bytes
+        if (PPValue == PPJERR)
+        {
+            JU_SET_ERRNO(PJError, 0);
+            return (PPValue);
+        }
+    }
+//  this is done outside of loop so "Len" can be an unsigned number
+
+    COPYSTRINGtoWORD(Index, String, Len);
+    PPValue = JudyLIns(PPValue, Index, PJError);    // remaining 4[8] bytes
+
+    return (PPValue);
+}
+
+
+// Insert string to JudyHS structure, return pointer to associated Value
+
+PPvoid_t
+JudyHSIns(PPvoid_t PPArray,             // ^ to JudyHashArray name
+           void * Str,                  // pointer to string
+           Word_t Len,                  // length of string
+           PJError_t PJError            // optional, for returning error info
+    )
+{
+    uint8_t * String = (uint8_t *)Str;
+    PPvoid_t  PPValue;
+
+//  string can only be NULL if Len is 0.
+
+    if ((String == (uint8_t *) NULL) && (Len != 0UL))
+    {
+        JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+        return (PPJERR);
+    }
+    JLG(PPValue, *PPArray, Len);        // JudyL hash table for strings of Len
+    if (PPValue == (PPvoid_t) NULL)     // make new if missing, (very rare)
+    {
+        PPValue = JudyLIns(PPArray, Len, PJError);
+        if (PPValue == PPJERR)
+        {
+            JU_SET_ERRNO(PJError, 0);
+            return (PPJERR);
+        }
+    }
+#ifndef DONOTUSEHASH
+    if (Len > WORDSIZE)
+    {
+        uint32_t  HValue;                       // hash of input string
+        JUDYHASHSTR(HValue, String, Len);       // hash to no more than 32 bits
+        PPValue = JudyLIns(PPValue, (Word_t)HValue, PJError);
+        if (PPValue == PPJERR)
+        {
+            JU_SET_ERRNO(PJError, 0);
+            return (PPJERR);
+        }
+    }
+#endif // DONOTUSEHASH
+
+    PPValue = insStrJudyLTree(String, Len, PPValue, PJError); // add string 
+    return (PPValue);                   //  ^  to Value
+}
+
+// Delete string from tree of JudyL arrays (all Lens must be same)
+
+static int
+delStrJudyLTree(uint8_t * String,      // delete from tree of JudyL arrays
+                 Word_t Len,            // length of string
+                 PPvoid_t PPValue,      // ^ to hash bucket
+                 PJError_t PJError      // for returning error info
+    )
+{
+    PPvoid_t  PPValueN;                 // next pointer
+    Word_t    Index;
+    int       Ret;                      // -1=failed, 1=success, 2=quit del
+
+    if (IS_PLS(*PPValue))               // is pointer to ls_t?
+    {
+        Pls_t     Pls;
+        Pls = (Pls_t) CLEAR_PLS(*PPValue);      // demangle pointer
+        JudyFree((Pvoid_t)Pls, LS_WORDLEN(Len));        // free the ls_t
+
+        *PPValue = (Pvoid_t)NULL;       // clean pointer
+        return (1);                     // successfully deleted
+    }
+
+    if (Len > WORDSIZE)                 // delete from JudyL tree, not leaf
+    {
+        COPYSTRINGtoWORD(Index, String, WORDSIZE);      // get Index
+        JLG(PPValueN, *PPValue, Index); // get pointer to next JudyL array
+
+        String += WORDSIZE;             // advance to next 4[8] bytes
+        Len -= WORDSIZE;
+
+        Ret = delStrJudyLTree(String, Len, PPValueN, PJError);
+        if (Ret != 1) return(Ret);
+
+        if (*PPValueN == (PPvoid_t) NULL)
+        {
+//          delete JudyL element from tree
+
+            Ret = JudyLDel(PPValue, Index, PJError);
+        }
+    }
+    else
+    {
+        COPYSTRINGtoWORD(Index, String, Len);   // get leaf element
+
+//      delete last 1-4[8] bytes from leaf element
+
+        Ret = JudyLDel(PPValue, Index, PJError); 
+    }
+    return (Ret);
+}
+
+// Delete string from JHS structure
+
+int
+JudyHSDel(PPvoid_t PPArray,             // ^ to JudyHashArray struct
+           void * Str,                  // pointer to string
+           Word_t Len,                  // length of string
+           PJError_t PJError            // optional, for returning error info
+    )
+{
+    uint8_t * String = (uint8_t *)Str;
+    PPvoid_t  PPBucket, PPHtble;
+    int       Ret;                      // return bool from Delete routine
+#ifndef DONOTUSEHASH
+    uint32_t  HValue = 0;               // hash value of input string
+#endif // DONOTUSEHASH
+
+    if (PPArray == NULL)
+        return (0);                     // no pointer, return not found
+
+//  This is a little slower than optimum method, but not much in new CPU
+//  Verify that string is in the structure -- simplifies future assumptions
+
+    if (JudyHSGet(*PPArray, String, Len) == (PPvoid_t) NULL)
+        return (0);                     // string not found, return
+
+//  string is in structure, so testing for absence is not necessary
+
+    JLG(PPHtble, *PPArray, Len);        // JudyL hash table for strings of Len
+
+#ifdef DONOTUSEHASH
+    PPBucket = PPHtble;                 // simulate below code
+#else  // USEHASH
+    if (Len > WORDSIZE)
+    {
+        JUDYHASHSTR(HValue, String, Len);       // hash to no more than 32 bits
+
+//  get pointer to hash bucket
+
+        JLG(PPBucket, *PPHtble, (Word_t)HValue);
+    }
+    else
+    {
+        PPBucket = PPHtble;             // no bucket to JLGet
+    }
+#endif // USEHASH
+
+// delete from JudyL tree
+//
+    Ret = delStrJudyLTree(String, Len, PPBucket, PJError);
+    if (Ret != 1)
+    {
+        JU_SET_ERRNO(PJError, 0);
+        return(-1);
+    }
+//  handle case of missing JudyL array from hash table and length table
+
+    if (*PPBucket == (Pvoid_t)NULL)     // if JudyL tree gone
+    {
+#ifndef DONOTUSEHASH
+        if (Len > WORDSIZE)
+        {
+//          delete entry in Hash table
+
+            Ret = JudyLDel(PPHtble, (Word_t)HValue, PJError); 
+            if (Ret != 1)
+            {
+                JU_SET_ERRNO(PJError, 0);
+                return(-1);
+            }
+        }
+#endif // USEHASH
+        if (*PPHtble == (PPvoid_t) NULL)        // if Hash table gone
+        {
+//          delete entry from the String length table
+
+            Ret = JudyLDel(PPArray, Len, PJError); 
+            if (Ret != 1)
+            {
+                JU_SET_ERRNO(PJError, 0);
+                return(-1);
+            }
+        }
+    }
+    return (1);                         // success
+}
+
+static Word_t
+delJudyLTree(PPvoid_t PPValue,                 // ^ to JudyL root pointer
+              Word_t Len,                       // length of string
+              PJError_t PJError)                // for returning error info
+{
+    Word_t    bytes_freed = 0;                  // bytes freed at point
+    Word_t    bytes_total = 0;                  // accumulated bytes freed
+    PPvoid_t  PPValueN;
+
+//  Pointer is to another tree of JudyL arrays or ls_t struct
+
+    if (Len > WORDSIZE)                         // more depth to tree
+    {
+        Word_t NEntry;
+
+//      Pointer is to a ls_t struct
+
+        if (IS_PLS(*PPValue)) 
+        {
+            Pls_t   Pls;
+            Word_t  freewords;
+
+            freewords = LS_WORDLEN(Len);        // calculate length
+            Pls = (Pls_t)CLEAR_PLS(*PPValue);   // demangle pointer
+
+//        *PPValue = (Pvoid_t)NULL;               // clean pointer
+           JudyFree((Pvoid_t)Pls, freewords);   // free the ls_t
+
+            return(freewords * WORDSIZE);
+        }
+//      else
+//      Walk all the entrys in the JudyL array
+
+        NEntry = 0;                             // start at beginning
+        for (PPValueN = JudyLFirst(*PPValue, &NEntry, PJError);
+            (PPValueN != (PPvoid_t) NULL) && (PPValueN != PPJERR);
+             PPValueN = JudyLNext(*PPValue, &NEntry, PJError))
+        {
+//          recurse to the next level in the tree of arrays
+
+            bytes_freed = delJudyLTree(PPValueN, Len - WORDSIZE, PJError);
+            if (bytes_freed == JERR) return(JERR);
+            bytes_total += bytes_freed;
+        }
+        if (PPValueN == PPJERR) return(JERR);
+
+//      now free this JudyL array
+
+        bytes_freed = JudyLFreeArray(PPValue, PJError);
+        if (bytes_freed == JERR) return(JERR);
+        bytes_total += bytes_freed;
+
+        return(bytes_total);  // return amount freed
+    }
+//  else
+
+//  Pointer to simple JudyL array
+
+    bytes_freed = JudyLFreeArray(PPValue, PJError);
+
+    return(bytes_freed);
+}
+
+
+Word_t                                  // bytes freed
+JudyHSFreeArray(PPvoid_t PPArray,       // ^ to JudyHashArray struct
+           PJError_t PJError            // optional, for returning error info
+    )
+{
+    Word_t    Len;                      // start at beginning
+    Word_t    bytes_freed;              // bytes freed at this level.
+    Word_t    bytes_total;              // bytes total at all levels.
+    PPvoid_t  PPHtble;
+
+    if (PPArray == NULL) 
+        return (0);                     // no pointer, return none
+
+//  Walk the string length table for subsidary hash structs
+//  NOTE: This is necessary to determine the depth of the tree
+
+    bytes_freed = 0; 
+    bytes_total = 0;
+    Len = 0;                            // walk to length table
+
+    for (PPHtble  = JudyLFirst(*PPArray, &Len, PJError);
+        (PPHtble != (PPvoid_t) NULL) && (PPHtble != PPJERR);
+         PPHtble  = JudyLNext(*PPArray, &Len, PJError))
+    {
+        PPvoid_t PPValueH;
+
+#ifndef DONOTUSEHASH
+        if (Len > WORDSIZE)
+        {
+            Word_t HEntry = 0;              // walk the hash tables
+
+            for (PPValueH  = JudyLFirst(*PPHtble, &HEntry, PJError);
+                (PPValueH != (PPvoid_t) NULL) && (PPValueH != PPJERR);
+                 PPValueH  = JudyLNext(*PPHtble, &HEntry, PJError))
+            {
+                bytes_freed = delJudyLTree(PPValueH, Len, PJError);
+                if (bytes_freed == JERR) return(JERR);
+                bytes_total += bytes_freed;
+            }
+
+            if (PPValueH == PPJERR) return(JERR);
+
+//          free the Hash table for this length of string
+
+            bytes_freed = JudyLFreeArray(PPHtble, PJError);
+            if (bytes_freed == JERR) return(JERR);
+            bytes_total += bytes_freed;
+        }
+        else
+#endif // DONOTUSEHASH
+        {
+                PPValueH = PPHtble;     // simulate hash table
+
+                bytes_freed = delJudyLTree(PPValueH, Len, PJError);
+                if (bytes_freed == JERR) return(JERR);
+                bytes_total += bytes_freed;
+        }
+    }
+    if (PPHtble == PPJERR) return(JERR);
+
+//  free the length table
+
+    bytes_freed = JudyLFreeArray(PPArray, PJError);
+    if (bytes_freed == JERR) return(JERR);
+
+    bytes_total += bytes_freed;
+
+    return(bytes_total);                // return bytes freed
+}
diff --git a/libs/klib/judy/JudyHS.h b/libs/klib/judy/JudyHS.h
new file mode 100644
index 0000000..b403501
--- /dev/null
+++ b/libs/klib/judy/JudyHS.h
@@ -0,0 +1,35 @@
+// ****************************************************************************
+// Quick and dirty header file for use with old Judy.h without JudyHS defs
+// May 2004 (dlb) - No copyright or license -- it is free period.
+
+#include <stdint.h>
+
+// ****************************************************************************
+// JUDYHSL MACROS:
+
+#define JHSI(PV,    PArray,   PIndex,   Count)                          \
+        J_2P(PV, (&(PArray)), PIndex,   Count, JudyHSIns, "JudyHSIns")
+#define JHSG(PV,    PArray,   PIndex,   Count)                          \
+        (PV) = (Pvoid_t) JudyHSGet(PArray, PIndex, Count)
+#define JHSD(Rc,    PArray,   PIndex,   Count)                          \
+        J_2I(Rc, (&(PArray)), PIndex, Count, JudyHSDel, "JudyHSDel")
+#define JHSFA(Rc,    PArray)                                            \
+        J_0I(Rc, (&(PArray)), JudyHSFreeArray, "JudyHSFreeArray")
+
+// ****************************************************************************
+// JUDY memory interface to malloc() FUNCTIONS:
+
+extern Word_t JudyMalloc(Word_t);               // words reqd => words allocd.
+extern Word_t JudyMallocVirtual(Word_t);        // words reqd => words allocd.
+extern void   JudyFree(Pvoid_t, Word_t);        // block to free and its size in words.
+extern void   JudyFreeVirtual(Pvoid_t, Word_t); // block to free and its size in words.
+
+// ****************************************************************************
+// JUDYHS FUNCTIONS:
+
+extern PPvoid_t JudyHSGet(       Pcvoid_t,  void *, Word_t);
+extern PPvoid_t JudyHSIns(       PPvoid_t,  void *, Word_t, P_JE);
+extern int      JudyHSDel(       PPvoid_t,  void *, Word_t, P_JE);
+extern Word_t   JudyHSFreeArray( PPvoid_t,                  P_JE);
+
+extern uint32_t JudyHashStr(                void *, Word_t);
diff --git a/libs/klib/judy/JudyIns.c b/libs/klib/judy/JudyIns.c
new file mode 100644
index 0000000..d90820b
--- /dev/null
+++ b/libs/klib/judy/JudyIns.c
@@ -0,0 +1,1871 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// Judy1Set() and JudyLIns() functions for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+//
+// TBD:  Should some of the assertions here be converted to product code that
+// returns JU_ERRNO_CORRUPT?
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error:  One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+// Note:  Call JudyCheckPop() even before "already inserted" returns, to catch
+// population errors; see fix in 4.84:
+
+DBGCODE(extern void JudyCheckPop(Pvoid_t PArray);)
+DBGCODE(extern void JudyCheckSorted(Pjll_t Pjll, Word_t Pop1, long IndexSize);)
+
+#ifdef TRACEJP
+#include "JudyPrintJP.c"
+#endif
+
+
+// These are defined to generic values in JudyCommon/JudyPrivateTypes.h:
+//
+// TBD:  These should be exported from a header file, but perhaps not, as they
+// are only used here, and exported from Judy*Decascade, which is a separate
+// file for profiling reasons (to prevent inlining), but which potentially
+// could be merged with this file, either in SoftCM or at compile-time.
+
+#ifdef JUDY1
+extern int j__udy1CreateBranchB(Pjp_t, Pjp_t, uint8_t *, Word_t, Pvoid_t);
+extern int j__udy1CreateBranchU(Pjp_t, Pvoid_t);
+
+#ifndef JU_64BIT
+extern int j__udy1Cascade1(Pjp_t, Pvoid_t);
+#endif
+extern int j__udy1Cascade2(Pjp_t, Pvoid_t);
+extern int j__udy1Cascade3(Pjp_t, Pvoid_t);
+#ifdef JU_64BIT
+extern int j__udy1Cascade4(Pjp_t, Pvoid_t);
+extern int j__udy1Cascade5(Pjp_t, Pvoid_t);
+extern int j__udy1Cascade6(Pjp_t, Pvoid_t);
+extern int j__udy1Cascade7(Pjp_t, Pvoid_t);
+#endif
+extern int j__udy1CascadeL(Pjp_t, Pvoid_t);
+
+extern int j__udy1InsertBranch(Pjp_t Pjp, Word_t Index, Word_t Btype, Pjpm_t);
+
+#else // JUDYL
+
+extern int j__udyLCreateBranchB(Pjp_t, Pjp_t, uint8_t *, Word_t, Pvoid_t);
+extern int j__udyLCreateBranchU(Pjp_t, Pvoid_t);
+
+extern int j__udyLCascade1(Pjp_t, Pvoid_t);
+extern int j__udyLCascade2(Pjp_t, Pvoid_t);
+extern int j__udyLCascade3(Pjp_t, Pvoid_t);
+#ifdef JU_64BIT
+extern int j__udyLCascade4(Pjp_t, Pvoid_t);
+extern int j__udyLCascade5(Pjp_t, Pvoid_t);
+extern int j__udyLCascade6(Pjp_t, Pvoid_t);
+extern int j__udyLCascade7(Pjp_t, Pvoid_t);
+#endif
+extern int j__udyLCascadeL(Pjp_t, Pvoid_t);
+
+extern int j__udyLInsertBranch(Pjp_t Pjp, Word_t Index, Word_t Btype, Pjpm_t);
+#endif
+
+
+// ****************************************************************************
+// MACROS FOR COMMON CODE:
+//
+// Check if Index is an outlier to (that is, not a member of) this expanse:
+//
+// An outlier is an Index in-the-expanse of the slot containing the pointer,
+// but not-in-the-expanse of the "narrow" pointer in that slot.  (This means
+// the Dcd part of the Index differs from the equivalent part of jp_DcdPopO.)
+// Therefore, the remedy is to put a cJU_JPBRANCH_L* between the narrow pointer
+// and the object to which it points, and add the outlier Index as an Immediate
+// in the cJU_JPBRANCH_L*.  The "trick" is placing the cJU_JPBRANCH_L* at a
+// Level that is as low as possible.  This is determined by counting the digits
+// in the existing narrow pointer that are the same as the digits in the new
+// Index (see j__udyInsertBranch()).
+//
+// Note:  At some high Levels, cJU_DCDMASK() is all zeros => dead code; assume
+// the compiler optimizes this out.
+
+#define JU_CHECK_IF_OUTLIER(Pjp, Index, cLevel, Pjpm)                   \
+        if (JU_DCDNOTMATCHINDEX(Index, Pjp, cLevel))                    \
+            return(j__udyInsertBranch(Pjp, Index, cLevel, Pjpm))
+
+// Check if an Index is already in a leaf or immediate, after calling
+// j__udySearchLeaf*() to set Offset:
+//
+// A non-negative Offset means the Index already exists, so return 0; otherwise
+// complement Offset to proceed.
+
+#ifdef JUDY1
+#define Pjv ignore                                      // placeholder.
+#define JU_CHECK_IF_EXISTS(Offset,ignore,Pjpm)  \
+        {                                       \
+            if ((Offset) >= 0) return(0);       \
+            (Offset) = ~(Offset);               \
+        }
+#else
+// For JudyL, also set the value area pointer in the Pjpm:
+
+#define JU_CHECK_IF_EXISTS(Offset,Pjv,Pjpm)             \
+        {                                               \
+            if ((Offset) >= 0)                          \
+            {                                           \
+                (Pjpm)->jpm_PValue = (Pjv) + (Offset);  \
+                return(0);                              \
+            }                                           \
+            (Offset) = ~(Offset);                       \
+        }
+#endif
+
+
+// ****************************************************************************
+// __ J U D Y   I N S   W A L K
+//
+// Walk the Judy tree to do a set/insert.  This is only called internally, and
+// recursively.  Unlike Judy1Test() and JudyLGet(), the extra time required for
+// recursion should be negligible compared with the total.
+//
+// Return -1 for error (details in JPM), 0 for Index already inserted, 1 for
+// new Index inserted.
+
+FUNCTION static int j__udyInsWalk(
+        Pjp_t   Pjp,            // current JP to descend.
+        Word_t  Index,          // to insert.
+        Pjpm_t  Pjpm)           // for returning info to top Level.
+{
+        uint8_t digit;          // from Index, current offset into a branch.
+        jp_t    newJP;          // for creating a new Immed JP.
+        Word_t  exppop1;        // expanse (leaf) population.
+        int     retcode;        // return codes:  -1, 0, 1.
+
+#ifdef SUBEXPCOUNTS
+// Pointer to BranchB/U subexpanse counter:
+//
+// Note:  Very important for performance reasons (avoids cache fills).
+
+        PWord_t PSubExp = (PWord_t) NULL;
+#endif
+
+ContinueInsWalk:                // for modifying state without recursing.
+
+#ifdef TRACEJP
+        JudyPrintJP(Pjp, "i", __LINE__);
+#endif
+
+        switch (JU_JPTYPE(Pjp)) // entry:  Pjp, Index.
+        {
+
+
+// ****************************************************************************
+// JPNULL*:
+//
+// Convert JP in place from current null type to cJU_JPIMMED_*_01 by
+// calculating new JP type.
+
+        case cJU_JPNULL1:
+        case cJU_JPNULL2:
+        case cJU_JPNULL3:
+#ifdef JU_64BIT
+        case cJU_JPNULL4:
+        case cJU_JPNULL5:
+        case cJU_JPNULL6:
+        case cJU_JPNULL7:
+#endif
+            assert((Pjp->jp_Addr) == 0);
+            JU_JPSETADT(Pjp, 0, Index, JU_JPTYPE(Pjp) + cJU_JPIMMED_1_01 - cJU_JPNULL1);
+#ifdef JUDYL
+            // value area is first word of new Immed_01 JP:
+            Pjpm->jpm_PValue = (Pjv_t) (&(Pjp->jp_Addr));
+#endif
+            return(1);
+
+
+// ****************************************************************************
+// JPBRANCH_L*:
+//
+// If the new Index is not an outlier to the branchs expanse, and the branch
+// should not be converted to uncompressed, extract the digit and record the
+// Immediate type to create for a new Immed JP, before going to common code.
+//
+// Note:  JU_CHECK_IF_OUTLIER() is a no-op for BranchB3[7] on 32[64]-bit.
+
+#define JU_BRANCH_OUTLIER(DIGIT,POP1,cLEVEL,PJP,INDEX,PJPM)  \
+        JU_CHECK_IF_OUTLIER(PJP, INDEX, cLEVEL, PJPM);       \
+        (DIGIT) = JU_DIGITATSTATE(INDEX, cLEVEL);            \
+        (POP1)  = JU_JPBRANCH_POP0(PJP, cLEVEL)
+
+        case cJU_JPBRANCH_L2:
+            JU_BRANCH_OUTLIER(digit, exppop1, 2, Pjp, Index, Pjpm);
+            goto JudyBranchL;
+
+        case cJU_JPBRANCH_L3:
+            JU_BRANCH_OUTLIER(digit, exppop1, 3, Pjp, Index, Pjpm);
+            goto JudyBranchL;
+
+#ifdef JU_64BIT
+        case cJU_JPBRANCH_L4:
+            JU_BRANCH_OUTLIER(digit, exppop1, 4, Pjp, Index, Pjpm);
+            goto JudyBranchL;
+
+        case cJU_JPBRANCH_L5:
+            JU_BRANCH_OUTLIER(digit, exppop1, 5, Pjp, Index, Pjpm);
+            goto JudyBranchL;
+
+        case cJU_JPBRANCH_L6:
+            JU_BRANCH_OUTLIER(digit, exppop1, 6, Pjp, Index, Pjpm);
+            goto JudyBranchL;
+
+        case cJU_JPBRANCH_L7:
+            JU_BRANCH_OUTLIER(digit, exppop1, 7, Pjp, Index, Pjpm);
+            goto JudyBranchL;
+#endif
+
+// Similar to common code above, but no outlier check is needed, and the Immed
+// type depends on the word size:
+
+        case cJU_JPBRANCH_L:
+        {
+            Pjbl_t PjblRaw;     // pointer to old linear branch.
+            Pjbl_t Pjbl;
+            Pjbu_t PjbuRaw;     // pointer to new uncompressed branch.
+            Pjbu_t Pjbu;
+            Word_t numJPs;      // number of JPs = populated expanses.
+            int    offset;      // in branch.
+
+            digit = JU_DIGITATSTATE(Index, cJU_ROOTSTATE);
+            exppop1 = Pjpm->jpm_Pop0;
+
+            // fall through:
+
+// COMMON CODE FOR LINEAR BRANCHES:
+//
+// Come here with digit and exppop1 already set.
+
+JudyBranchL:
+            PjblRaw = (Pjbl_t) (Pjp->jp_Addr);
+            Pjbl    = P_JBL(PjblRaw);
+
+// If population under this branch greater than:
+
+            if (exppop1 > JU_BRANCHL_MAX_POP)
+                goto ConvertBranchLtoU;
+
+            numJPs = Pjbl->jbl_NumJPs;
+
+            if ((numJPs == 0) || (numJPs > cJU_BRANCHLMAXJPS))
+            {
+                JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT);
+                return(-1);
+            }
+
+// Search for a match to the digit:
+
+            offset = j__udySearchLeaf1((Pjll_t) (Pjbl->jbl_Expanse), numJPs,
+                                       digit);
+
+// If Index is found, offset is into an array of 1..cJU_BRANCHLMAXJPS JPs:
+
+            if (offset >= 0)
+            {
+                Pjp = (Pjbl->jbl_jp) + offset;  // address of next JP.
+                break;                          // continue walk.
+            }
+
+// Expanse is missing (not populated) for the passed Index, so insert an Immed
+// -- if theres room:
+
+            if (numJPs < cJU_BRANCHLMAXJPS)
+            {
+                offset = ~offset;       // insertion offset.
+
+                JU_JPSETADT(&newJP, 0, Index,
+                        JU_JPTYPE(Pjp) + cJU_JPIMMED_1_01-cJU_JPBRANCH_L2);
+
+                JU_INSERTINPLACE(Pjbl->jbl_Expanse, numJPs, offset, digit);
+                JU_INSERTINPLACE(Pjbl->jbl_jp,      numJPs, offset, newJP);
+
+                DBGCODE(JudyCheckSorted((Pjll_t) (Pjbl->jbl_Expanse),
+                                        numJPs + 1, /* IndexSize = */ 1);)
+                ++(Pjbl->jbl_NumJPs);
+#ifdef JUDYL
+                // value area is first word of new Immed 01 JP:
+                Pjpm->jpm_PValue = (Pjv_t) ((Pjbl->jbl_jp) + offset);
+#endif
+                return(1);
+            }
+
+
+// MAXED OUT LINEAR BRANCH, CONVERT TO A BITMAP BRANCH, THEN INSERT:
+//
+// Copy the linear branch to a bitmap branch.
+//
+// TBD:  Consider renaming j__udyCreateBranchB() to j__udyConvertBranchLtoB().
+
+            assert((numJPs) <= cJU_BRANCHLMAXJPS);
+
+            if (j__udyCreateBranchB(Pjp, Pjbl->jbl_jp, Pjbl->jbl_Expanse,
+                                    numJPs, Pjpm) == -1)
+            {
+                return(-1);
+            }
+
+// Convert jp_Type from linear branch to equivalent bitmap branch:
+
+            Pjp->jp_Type += cJU_JPBRANCH_B - cJU_JPBRANCH_L;
+
+            j__udyFreeJBL(PjblRaw, Pjpm);       // free old BranchL.
+
+// Having changed branch types, now do the insert in the new branch type:
+
+            goto ContinueInsWalk;
+
+
+// OPPORTUNISTICALLY CONVERT FROM BRANCHL TO BRANCHU:
+//
+// Memory efficiency is no object because the branchs pop1 is large enough, so
+// speed up array access.  Come here with PjblRaw set.  Note:  This is goto
+// code because the previous block used to fall through into it as well, but no
+// longer.
+
+ConvertBranchLtoU:
+
+// Allocate memory for an uncompressed branch:
+
+            if ((PjbuRaw = j__udyAllocJBU(Pjpm)) == (Pjbu_t) NULL)
+                return(-1);
+            Pjbu = P_JBU(PjbuRaw);
+
+// Set the proper NULL type for most of the uncompressed branchs JPs:
+
+            JU_JPSETADT(&newJP, 0, 0, 
+                    JU_JPTYPE(Pjp) - cJU_JPBRANCH_L2 + cJU_JPNULL1);
+
+// Initialize:  Pre-set uncompressed branch to mostly JPNULL*s:
+
+            for (numJPs = 0; numJPs < cJU_BRANCHUNUMJPS; ++numJPs)
+                Pjbu->jbu_jp[numJPs] = newJP;
+
+// Copy JPs from linear branch to uncompressed branch:
+
+            {
+#ifdef SUBEXPCOUNTS
+                Word_t popmask = cJU_POP0MASK(JU_JPTYPE(Pjp))
+                                             - cJU_JPBRANCH_L2 - 2;
+
+                for (numJPs = 0; numJPs < cJU_NUMSUBEXPU; ++numJPs)
+                    Pjbu->jbu_subPop1[numJPs] = 0;
+#endif
+                for (numJPs = 0; numJPs < Pjbl->jbl_NumJPs; ++numJPs)
+                {
+                    Pjp_t Pjp1           = &(Pjbl->jbl_jp[numJPs]);
+                    offset               = Pjbl->jbl_Expanse[numJPs];
+                    Pjbu->jbu_jp[offset] = *Pjp1;
+#ifdef SUBEXPCOUNTS
+                    Pjbu->jbu_subPop1[offset/cJU_NUMSUBEXPU] +=
+                        JU_JPDCDPOP0(Pjp1) & popmask + 1;
+#endif
+                }
+            }
+            j__udyFreeJBL(PjblRaw, Pjpm);               // free old BranchL.
+
+// Plug new values into parent JP:
+
+            Pjp->jp_Addr  = (Word_t) PjbuRaw;
+            Pjp->jp_Type += cJU_JPBRANCH_U - cJU_JPBRANCH_L;    // to BranchU.
+
+// Save global population of last BranchU conversion:
+
+            Pjpm->jpm_LastUPop0 = Pjpm->jpm_Pop0;
+            goto ContinueInsWalk;
+
+        } // case cJU_JPBRANCH_L.
+
+
+// ****************************************************************************
+// JPBRANCH_B*:
+//
+// If the new Index is not an outlier to the branchs expanse, extract the
+// digit and record the Immediate type to create for a new Immed JP, before
+// going to common code.
+//
+// Note:  JU_CHECK_IF_OUTLIER() is a no-op for BranchB3[7] on 32[64]-bit.
+
+        case cJU_JPBRANCH_B2:
+            JU_BRANCH_OUTLIER(digit, exppop1, 2, Pjp, Index, Pjpm);
+            goto JudyBranchB;
+
+        case cJU_JPBRANCH_B3:
+            JU_BRANCH_OUTLIER(digit, exppop1, 3, Pjp, Index, Pjpm);
+            goto JudyBranchB;
+
+#ifdef JU_64BIT
+        case cJU_JPBRANCH_B4:
+            JU_BRANCH_OUTLIER(digit, exppop1, 4, Pjp, Index, Pjpm);
+            goto JudyBranchB;
+
+        case cJU_JPBRANCH_B5:
+            JU_BRANCH_OUTLIER(digit, exppop1, 5, Pjp, Index, Pjpm);
+            goto JudyBranchB;
+
+        case cJU_JPBRANCH_B6:
+            JU_BRANCH_OUTLIER(digit, exppop1, 6, Pjp, Index, Pjpm);
+            goto JudyBranchB;
+
+        case cJU_JPBRANCH_B7:
+            JU_BRANCH_OUTLIER(digit, exppop1, 7, Pjp, Index, Pjpm);
+            goto JudyBranchB;
+#endif
+
+        case cJU_JPBRANCH_B:
+        {
+            Pjbb_t    Pjbb;             // pointer to bitmap branch.
+            Pjbb_t    PjbbRaw;          // pointer to bitmap branch.
+            Pjp_t     Pjp2Raw;          // 1 of N arrays of JPs.
+            Pjp_t     Pjp2;             // 1 of N arrays of JPs.
+            Word_t    subexp;           // 1 of N subexpanses in bitmap.
+            BITMAPB_t bitmap;           // for one subexpanse.
+            BITMAPB_t bitmask;          // bit set for Indexs digit.
+            Word_t    numJPs;           // number of JPs = populated expanses.
+            int       offset;           // in bitmap branch.
+
+// Similar to common code above, but no outlier check is needed, and the Immed
+// type depends on the word size:
+
+            digit   = JU_DIGITATSTATE(Index, cJU_ROOTSTATE);
+            exppop1 = Pjpm->jpm_Pop0;
+
+            // fall through:
+
+
+// COMMON CODE FOR BITMAP BRANCHES:
+//
+// Come here with digit and exppop1 already set.
+
+JudyBranchB:
+
+// If population increment is greater than..  (300):
+
+            if ((Pjpm->jpm_Pop0 - Pjpm->jpm_LastUPop0) > JU_BTOU_POP_INCREMENT)
+            {
+
+// If total population of array is greater than..  (750):
+
+                if (Pjpm->jpm_Pop0 > JU_BRANCHB_MAX_POP)
+                {
+
+// If population under the branch is greater than..  (135):
+
+                    if (exppop1 > JU_BRANCHB_MIN_POP)
+                    {
+                        if (j__udyCreateBranchU(Pjp, Pjpm) == -1) return(-1);
+
+// Save global population of last BranchU conversion:
+
+                        Pjpm->jpm_LastUPop0 = Pjpm->jpm_Pop0;
+
+                        goto ContinueInsWalk;
+                    }
+                }
+            }
+
+// CONTINUE TO USE BRANCHB:
+//
+// Get pointer to bitmap branch (JBB):
+
+            PjbbRaw = (Pjbb_t) (Pjp->jp_Addr);
+            Pjbb    = P_JBB(PjbbRaw);
+
+// Form the Int32 offset, and Bit offset values:
+//
+// 8 bit Decode | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+//              |SubExpanse |    Bit offset     |
+//
+// Get the 1 of 8 expanses from digit, Bits 5..7 = 1 of 8, and get the 32-bit
+// word that may have a bit set:
+
+            subexp = digit / cJU_BITSPERSUBEXPB;
+            bitmap = JU_JBB_BITMAP(Pjbb, subexp);
+
+            Pjp2Raw = JU_JBB_PJP(Pjbb, subexp);
+            Pjp2    = P_JP(Pjp2Raw);
+
+// Get the bit position that represents the desired expanse, and get the offset
+// into the array of JPs for the JP that matches the bit.
+
+            bitmask = JU_BITPOSMASKB(digit);
+            offset  = j__udyCountBitsB(bitmap & (bitmask - 1));
+
+// If JP is already in this expanse, get Pjp and continue the walk:
+
+            if (bitmap & bitmask)
+            {
+#ifdef SUBEXPCOUNTS
+                PSubExp = &(Pjbb->jbb_Counts[subexp]);  // ptr to subexp counts.
+#endif
+                Pjp =  Pjp2 + offset;
+                break;                                  // continue walk.
+            }
+
+
+// ADD NEW EXPANSE FOR NEW INDEX:
+//
+// The new expanse always an cJU_JPIMMED_*_01 containing just the new Index, so
+// finish setting up an Immed JP.
+
+            JU_JPSETADT(&newJP, 0, Index, 
+                JU_JPTYPE(Pjp) + cJU_JPIMMED_1_01-cJU_JPBRANCH_B2);
+
+// Get 1 of the 8 JP arrays and calculate number of JPs in subexpanse array:
+
+            Pjp2Raw = JU_JBB_PJP(Pjbb, subexp);
+            Pjp2    = P_JP(Pjp2Raw);
+            numJPs  = j__udyCountBitsB(bitmap);
+
+// Expand branch JP subarray in-place:
+
+            if (JU_BRANCHBJPGROWINPLACE(numJPs))
+            {
+                assert(numJPs > 0);
+                JU_INSERTINPLACE(Pjp2, numJPs, offset, newJP);
+#ifdef JUDYL
+                // value area is first word of new Immed 01 JP:
+                Pjpm->jpm_PValue = (Pjv_t) (Pjp2 + offset);
+#endif
+            }
+
+// No room, allocate a bigger bitmap branch JP subarray:
+
+            else
+            {
+                Pjp_t PjpnewRaw;
+                Pjp_t Pjpnew;
+
+                if ((PjpnewRaw = j__udyAllocJBBJP(numJPs + 1, Pjpm)) == 0)
+                    return(-1);
+                Pjpnew = P_JP(PjpnewRaw);
+
+// If there was an old JP array, then copy it, insert the new Immed JP, and
+// free the old array:
+
+                if (numJPs)
+                {
+                    JU_INSERTCOPY(Pjpnew, Pjp2, numJPs, offset, newJP);
+                    j__udyFreeJBBJP(Pjp2Raw, numJPs, Pjpm);
+#ifdef JUDYL
+                    // value area is first word of new Immed 01 JP:
+                    Pjpm->jpm_PValue = (Pjv_t) (Pjpnew + offset);
+#endif
+                }
+
+// New JP subarray; point to cJU_JPIMMED_*_01 and place it:
+
+                else
+                {
+                    assert(JU_JBB_PJP(Pjbb, subexp) == (Pjp_t) NULL);
+                     Pjp = Pjpnew;
+                    *Pjp = newJP;               // copy to new memory.
+#ifdef JUDYL
+                    // value area is first word of new Immed 01 JP:
+                    Pjpm->jpm_PValue = (Pjv_t) (&(Pjp->jp_Addr));
+#endif
+                }
+
+// Place new JP subarray in BranchB:
+
+                JU_JBB_PJP(Pjbb, subexp) = PjpnewRaw;
+
+            } // else
+
+// Set the new Indexs bit:
+
+            JU_JBB_BITMAP(Pjbb, subexp) |= bitmask;
+
+            return(1);
+
+        } // case
+
+
+// ****************************************************************************
+// JPBRANCH_U*:
+//
+// Just drop through the JP for the correct digit.  If the JP turns out to be a
+// JPNULL*, thats OK, the memory is already allocated, and the next walk
+// simply places an Immed in it.
+//
+#ifdef SUBEXPCOUNTS
+#define JU_GETSUBEXP(PSubExp,Pjbu,Digit) \
+        (PSubExp) = &((Pjbu)->jbu_subPop1[(Digit) / cJU_NUMSUBEXPU])
+#else
+#define JU_GETSUBEXP(PSubExp,Pjbu,Digit)  // null.
+#endif
+
+#define JU_JBU_PJP_SUBEXP(Pjp,PSubExp,Index,Level)              \
+        {                                                       \
+            uint8_t digit = JU_DIGITATSTATE(Index, Level);      \
+            Pjbu_t  P_jbu  = P_JBU((Pjp)->jp_Addr);             \
+            (Pjp) = &(P_jbu->jbu_jp[digit]);                    \
+            JU_GETSUBEXP(PSubExp, P_jbu, digit);                \
+        }
+
+        case cJU_JPBRANCH_U2:
+            JU_CHECK_IF_OUTLIER(Pjp, Index, 2, Pjpm);
+            JU_JBU_PJP_SUBEXP(Pjp, PSubExp, Index, 2);
+            break;
+
+#ifdef JU_64BIT
+        case cJU_JPBRANCH_U3:
+            JU_CHECK_IF_OUTLIER(Pjp, Index, 3, Pjpm);
+            JU_JBU_PJP_SUBEXP(Pjp, PSubExp, Index, 3);
+            break;
+
+        case cJU_JPBRANCH_U4:
+            JU_CHECK_IF_OUTLIER(Pjp, Index, 4, Pjpm);
+            JU_JBU_PJP_SUBEXP(Pjp, PSubExp, Index, 4);
+            break;
+
+        case cJU_JPBRANCH_U5:
+            JU_CHECK_IF_OUTLIER(Pjp, Index, 5, Pjpm);
+            JU_JBU_PJP_SUBEXP(Pjp, PSubExp, Index, 5);
+            break;
+
+        case cJU_JPBRANCH_U6:
+            JU_CHECK_IF_OUTLIER(Pjp, Index, 6, Pjpm);
+            JU_JBU_PJP_SUBEXP(Pjp, PSubExp, Index, 6);
+            break;
+
+        case cJU_JPBRANCH_U7:
+            JU_JBU_PJP_SUBEXP(Pjp, PSubExp, Index, 7);
+#else
+        case cJU_JPBRANCH_U3:
+            JU_JBU_PJP_SUBEXP(Pjp, PSubExp, Index, 3);
+#endif
+            break;
+
+        case cJU_JPBRANCH_U:
+            JU_JBU_PJP_SUBEXP(Pjp, PSubExp, Index, cJU_ROOTSTATE);
+            break;
+
+
+// ****************************************************************************
+// JPLEAF*:
+//
+// COMMON CODE FRAGMENTS TO MINIMIZE REDUNDANCY BELOW:
+//
+// These are necessary to support performance by function and loop unrolling
+// while avoiding huge amounts of nearly identical code.
+//
+// Prepare to handle a linear leaf:  Check for an outlier; set pop1 and pointer
+// to leaf:
+
+#ifdef JUDY1
+#define JU_LEAFVALUE(Pjv)                       // null.
+#define JU_LEAFPREPVALUE(Pjv, ValueArea)        // null.
+#else
+#define JU_LEAFVALUE(Pjv)                Pjv_t Pjv
+#define JU_LEAFPREPVALUE(Pjv, ValueArea) (Pjv) = ValueArea(Pleaf, exppop1)
+#endif
+
+#define JU_LEAFPREP(cIS,Type,MaxPop1,ValueArea)         \
+        Pjll_t  PjllRaw;                                \
+        Type    Pleaf;  /* specific type */             \
+        int     offset;                                 \
+        JU_LEAFVALUE(Pjv);                              \
+                                                        \
+        JU_CHECK_IF_OUTLIER(Pjp, Index, cIS, Pjpm);     \
+                                                        \
+        exppop1 = JU_JPLEAF_POP0(Pjp) + 1;              \
+        assert(exppop1 <= (MaxPop1));                   \
+        PjllRaw = (Pjll_t) (Pjp->jp_Addr);              \
+        Pleaf   = (Type) P_JLL(PjllRaw);                \
+        JU_LEAFPREPVALUE(Pjv, ValueArea)
+
+// Add to, or grow, a linear leaf:  Find Index position; if the Index is
+// absent, if theres room in the leaf, insert the Index [and value of 0] in
+// place, otherwise grow the leaf:
+//
+// Note:  These insertions always take place with whole words, using
+// JU_INSERTINPLACE() or JU_INSERTCOPY().
+
+#ifdef JUDY1
+#define JU_LEAFGROWVALUEADD(Pjv,ExpPop1,Offset)  // null.
+#else
+#define JU_LEAFGROWVALUEADD(Pjv,ExpPop1,Offset)         \
+        JU_INSERTINPLACE(Pjv, ExpPop1, Offset, 0);      \
+        Pjpm->jpm_PValue = (Pjv) + (Offset)
+#endif
+
+#ifdef JUDY1
+#define JU_LEAFGROWVALUENEW(ValueArea,Pjv,ExpPop1,Offset)  // null.
+#else
+#define JU_LEAFGROWVALUENEW(ValueArea,Pjv,ExpPop1,Offset)               \
+        {                                                               \
+            Pjv_t Pjvnew = ValueArea(Pleafnew, (ExpPop1) + 1);          \
+            JU_INSERTCOPY(Pjvnew, Pjv, ExpPop1, Offset, 0);             \
+            Pjpm->jpm_PValue = (Pjvnew) + (Offset);                     \
+        }
+#endif
+
+#define JU_LEAFGROW(cIS,Type,MaxPop1,Search,ValueArea,GrowInPlace,      \
+                    InsertInPlace,InsertCopy,Alloc,Free)                \
+                                                                        \
+        offset = Search(Pleaf, exppop1, Index);                         \
+        JU_CHECK_IF_EXISTS(offset, Pjv, Pjpm);                          \
+                                                                        \
+        if (GrowInPlace(exppop1))       /* add to current leaf */       \
+        {                                                               \
+            InsertInPlace(Pleaf, exppop1, offset, Index);               \
+            JU_LEAFGROWVALUEADD(Pjv, exppop1, offset);                  \
+            DBGCODE(JudyCheckSorted((Pjll_t) Pleaf, exppop1 + 1, cIS);) \
+            return(1);                                                  \
+        }                                                               \
+                                                                        \
+        if (exppop1 < (MaxPop1))        /* grow to new leaf */          \
+        {                                                               \
+            Pjll_t PjllnewRaw;                                          \
+            Type   Pleafnew;                                            \
+            if ((PjllnewRaw = Alloc(exppop1 + 1, Pjpm)) == 0) return(-1); \
+            Pleafnew = (Type) P_JLL(PjllnewRaw);                        \
+            InsertCopy(Pleafnew, Pleaf, exppop1, offset, Index);        \
+            JU_LEAFGROWVALUENEW(ValueArea, Pjv, exppop1, offset);       \
+            DBGCODE(JudyCheckSorted((Pjll_t) Pleafnew, exppop1 + 1, cIS);) \
+            Free(PjllRaw, exppop1, Pjpm);                               \
+            (Pjp->jp_Addr) = (Word_t) PjllnewRaw;                       \
+            return(1);                                                  \
+        }                                                               \
+        assert(exppop1 == (MaxPop1))
+
+// Handle linear leaf overflow (cascade):  Splay or compress into smaller
+// leaves:
+
+#define JU_LEAFCASCADE(MaxPop1,Cascade,Free)            \
+        if (Cascade(Pjp, Pjpm) == -1) return(-1);       \
+        Free(PjllRaw, MaxPop1, Pjpm);                   \
+        goto ContinueInsWalk
+
+// Wrapper around all of the above:
+
+#define JU_LEAFSET(cIS,Type,MaxPop1,Search,GrowInPlace,InsertInPlace,   \
+                   InsertCopy,Cascade,Alloc,Free,ValueArea)             \
+        {                                                               \
+            JU_LEAFPREP(cIS,Type,MaxPop1,ValueArea);                    \
+            JU_LEAFGROW(cIS,Type,MaxPop1,Search,ValueArea,GrowInPlace,  \
+                        InsertInPlace,InsertCopy,Alloc,Free);           \
+            JU_LEAFCASCADE(MaxPop1,Cascade,Free);                       \
+        }
+
+// END OF MACROS; LEAFL CASES START HERE:
+//
+// 64-bit Judy1 does not have 1-byte leaves:
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+
+        case cJU_JPLEAF1:
+
+            JU_LEAFSET(1, uint8_t *, cJU_LEAF1_MAXPOP1, j__udySearchLeaf1,
+                       JU_LEAF1GROWINPLACE, JU_INSERTINPLACE, JU_INSERTCOPY,
+                       j__udyCascade1, j__udyAllocJLL1, j__udyFreeJLL1,
+                       JL_LEAF1VALUEAREA);
+
+#endif // (JUDYL || ! JU_64BIT)
+
+        case cJU_JPLEAF2:
+
+            JU_LEAFSET(2, uint16_t *, cJU_LEAF2_MAXPOP1, j__udySearchLeaf2,
+                       JU_LEAF2GROWINPLACE, JU_INSERTINPLACE, JU_INSERTCOPY,
+                       j__udyCascade2, j__udyAllocJLL2, j__udyFreeJLL2,
+                       JL_LEAF2VALUEAREA);
+
+        case cJU_JPLEAF3:
+
+            JU_LEAFSET(3, uint8_t *, cJU_LEAF3_MAXPOP1, j__udySearchLeaf3,
+                       JU_LEAF3GROWINPLACE, JU_INSERTINPLACE3, JU_INSERTCOPY3,
+                       j__udyCascade3, j__udyAllocJLL3, j__udyFreeJLL3,
+                       JL_LEAF3VALUEAREA);
+
+#ifdef JU_64BIT
+        case cJU_JPLEAF4:
+
+            JU_LEAFSET(4, uint32_t *, cJU_LEAF4_MAXPOP1, j__udySearchLeaf4,
+                       JU_LEAF4GROWINPLACE, JU_INSERTINPLACE, JU_INSERTCOPY,
+                       j__udyCascade4, j__udyAllocJLL4, j__udyFreeJLL4,
+                       JL_LEAF4VALUEAREA);
+
+        case cJU_JPLEAF5:
+
+            JU_LEAFSET(5, uint8_t *, cJU_LEAF5_MAXPOP1, j__udySearchLeaf5,
+                       JU_LEAF5GROWINPLACE, JU_INSERTINPLACE5, JU_INSERTCOPY5,
+                       j__udyCascade5, j__udyAllocJLL5, j__udyFreeJLL5,
+                       JL_LEAF5VALUEAREA);
+
+        case cJU_JPLEAF6:
+
+            JU_LEAFSET(6, uint8_t *, cJU_LEAF6_MAXPOP1, j__udySearchLeaf6,
+                       JU_LEAF6GROWINPLACE, JU_INSERTINPLACE6, JU_INSERTCOPY6,
+                       j__udyCascade6, j__udyAllocJLL6, j__udyFreeJLL6,
+                       JL_LEAF6VALUEAREA);
+
+        case cJU_JPLEAF7:
+
+            JU_LEAFSET(7, uint8_t *, cJU_LEAF7_MAXPOP1, j__udySearchLeaf7,
+                       JU_LEAF7GROWINPLACE, JU_INSERTINPLACE7, JU_INSERTCOPY7,
+                       j__udyCascade7, j__udyAllocJLL7, j__udyFreeJLL7,
+                       JL_LEAF7VALUEAREA);
+#endif // JU_64BIT
+
+
+// ****************************************************************************
+// JPLEAF_B1:
+//
+// 8 bit Decode | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+//              |SubExpanse |    Bit offset     |
+//
+// Note:  For JudyL, values are stored in 8 subexpanses, each a linear word
+// array of up to 32 values each.
+
+        case cJU_JPLEAF_B1:
+        {
+#ifdef JUDYL
+            Pjv_t     PjvRaw;           // pointer to value part of the leaf.
+            Pjv_t     Pjv;              // pointer to value part of the leaf.
+            Pjv_t     PjvnewRaw;        // new value area.
+            Pjv_t     Pjvnew;           // new value area.
+            Word_t    subexp;           // 1 of 8 subexpanses in bitmap.
+            Pjlb_t    Pjlb;             // pointer to bitmap part of the leaf.
+            BITMAPL_t bitmap;           // for one subexpanse.
+            BITMAPL_t bitmask;          // bit set for Indexs digit.
+            int       offset;           // of index in value area.
+#endif
+
+            JU_CHECK_IF_OUTLIER(Pjp, Index, 1, Pjpm);
+
+#ifdef JUDY1
+
+// If Index (bit) is already set, return now:
+
+            if (JU_BITMAPTESTL(P_JLB(Pjp->jp_Addr), Index)) return(0);
+
+// If bitmap is not full, set the new Indexs bit; otherwise convert to a Full:
+
+            if ((exppop1 = JU_JPLEAF_POP0(Pjp) + 1)
+              < cJU_JPFULLPOPU1_POP0)
+            {
+                JU_BITMAPSETL(P_JLB(Pjp->jp_Addr), Index);
+            }
+            else
+            {
+                j__udyFreeJLB1((Pjlb_t) (Pjp->jp_Addr), Pjpm);  // free LeafB1.
+                Pjp->jp_Type = cJ1_JPFULLPOPU1;
+                Pjp->jp_Addr = 0;
+            }
+
+#else // JUDYL
+
+// This is very different from Judy1 because of the need to return a value area
+// even for an existing Index, or manage the value area for a new Index, and
+// because JudyL has no Full type:
+
+// Get last byte to decode from Index, and pointer to bitmap leaf:
+
+            digit = JU_DIGITATSTATE(Index, 1);
+            Pjlb  = P_JLB(Pjp->jp_Addr);
+
+// Prepare additional values:
+
+            subexp  = digit / cJU_BITSPERSUBEXPL;       // which subexpanse.
+            bitmap  = JU_JLB_BITMAP(Pjlb, subexp);      // subexps 32-bit map.
+            PjvRaw  = JL_JLB_PVALUE(Pjlb, subexp);      // corresponding values.
+            Pjv     = P_JV(PjvRaw);                     // corresponding values.
+            bitmask = JU_BITPOSMASKL(digit);            // mask for Index.
+            offset  = j__udyCountBitsL(bitmap & (bitmask - 1)); // of Index.
+
+// If Index already exists, get value pointer and exit:
+
+            if (bitmap & bitmask)
+            {
+                assert(Pjv);
+                Pjpm->jpm_PValue = Pjv + offset;        // existing value.
+                return(0);
+            }
+
+// Get the total bits set = expanse population of Value area:
+
+            exppop1 = j__udyCountBitsL(bitmap);
+
+// If the value area can grow in place, do it:
+
+            if (JL_LEAFVGROWINPLACE(exppop1))
+            {
+                JU_INSERTINPLACE(Pjv, exppop1, offset, 0);
+                JU_JLB_BITMAP(Pjlb, subexp) |= bitmask;  // set Indexs bit.
+                Pjpm->jpm_PValue = Pjv + offset;          // new value area.
+                return(1);
+            }
+
+// Increase size of value area:
+
+            if ((PjvnewRaw = j__udyLAllocJV(exppop1 + 1, Pjpm))
+             == (Pjv_t) NULL) return(-1);
+            Pjvnew = P_JV(PjvnewRaw);
+
+            if (exppop1)                // have existing value area.
+            {
+                assert(Pjv);
+                JU_INSERTCOPY(Pjvnew, Pjv, exppop1, offset, 0);
+                Pjpm->jpm_PValue = Pjvnew + offset;
+                j__udyLFreeJV(PjvRaw, exppop1, Pjpm);   // free old values.
+            }
+            else                        // first index, new value area:
+            {
+                 Pjpm->jpm_PValue   = Pjvnew;
+                *(Pjpm->jpm_PValue) = 0;
+            }
+
+// Set bit for new Index and place new leaf value area in bitmap:
+
+            JU_JLB_BITMAP(Pjlb, subexp) |= bitmask;
+            JL_JLB_PVALUE(Pjlb, subexp)  = PjvnewRaw;
+
+#endif // JUDYL
+
+            return(1);
+
+        } // case
+
+
+#ifdef JUDY1
+// ****************************************************************************
+// JPFULLPOPU1:
+//
+// If Index is not an outlier, then by definition its already set.
+
+        case cJ1_JPFULLPOPU1:
+
+            JU_CHECK_IF_OUTLIER(Pjp, Index, 1, Pjpm);
+            return(0);
+#endif
+
+
+// ****************************************************************************
+// JPIMMED*:
+//
+// This is some of the most complex code in Judy considering Judy1 versus JudyL
+// and 32-bit versus 64-bit variations.  The following comments attempt to make
+// this clearer.
+//
+// Of the 2 words in a JP, for immediate indexes Judy1 can use 2 words - 1 byte
+// = 7 [15] bytes, but JudyL can only use 1 word - 1 byte = 3 [7] bytes because
+// the other word is needed for a value area or a pointer to a value area.
+//
+// For both Judy1 and JudyL, cJU_JPIMMED_*_01 indexes are in word 2; otherwise
+// for Judy1 only, a list of 2 or more indexes starts in word 1.  JudyL keeps
+// the list in word 2 because word 1 is a pointer (to a LeafV, that is, a leaf
+// containing only values).  Furthermore, cJU_JPIMMED_*_01 indexes are stored
+// all-but-first-byte in jp_DcdPopO, not just the Index Sizes bytes.
+//
+// TBD:  This can be confusing because Doug didnt use data structures for it.
+// Instead he often directly accesses Pjp for the first word and jp_DcdPopO for
+// the second word.  It would be nice to use data structs, starting with
+// jp_1Index and jp_LIndex where possible.
+//
+// Maximum Immed JP types for Judy1/JudyL, depending on Index Size (cIS):
+//
+//          32-bit  64-bit
+//
+//    bytes:  7/ 3   15/ 7   (Judy1/JudyL)
+//
+//    cIS
+//    1_     07/03   15/07   (as in: cJ1_JPIMMED_1_07)
+//    2_     03/01   07/03
+//    3_     02/01   05/02
+//    4_             03/01
+//    5_             03/01
+//    6_             02/01
+//    7_             02/01
+//
+// State transitions while inserting an Index, matching the above table:
+// (Yes, this is very terse...  Study it and it will make sense.)
+// (Note, parts of this diagram are repeated below for quick reference.)
+//
+//      +-- reformat JP here for Judy1 only, from word-2 to word-1
+//      |
+//      |                  JUDY1 || JU_64BIT        JUDY1 && JU_64BIT
+//      V
+// 1_01 => 1_02 => 1_03 => [ 1_04 => ... => 1_07 => [ 1_08..15 => ]] Leaf1 (*)
+// 2_01 =>                 [ 2_02 => 2_03 =>        [ 2_04..07 => ]] Leaf2
+// 3_01 =>                 [ 3_02 =>                [ 3_03..05 => ]] Leaf3
+// JU_64BIT only:
+// 4_01 =>                                         [[ 4_02..03 => ]] Leaf4
+// 5_01 =>                                         [[ 5_02..03 => ]] Leaf5
+// 6_01 =>                                         [[ 6_02     => ]] Leaf6
+// 7_01 =>                                         [[ 7_02     => ]] Leaf7
+//
+// (*) For Judy1 & 64-bit, go directly from cJU_JPIMMED_1_15 to a LeafB1; skip
+//     Leaf1, as described in Judy1.h regarding cJ1_JPLEAF1.
+
+
+// COMMON CODE FRAGMENTS TO MINIMIZE REDUNDANCY BELOW:
+//
+// These are necessary to support performance by function and loop unrolling
+// while avoiding huge amounts of nearly identical code.
+//
+// The differences between Judy1 and JudyL with respect to value area handling
+// are just too large for completely common code between them...  Oh well, some
+// big ifdefs follow.  However, even in the following ifdefd code, use cJU_*,
+// JU_*, and Judy*() instead of cJ1_* / cJL_*, J1_* / JL_*, and
+// Judy1*()/JudyL*(), for minimum diffs.
+//
+// Handle growth of cJU_JPIMMED_*_01 to cJU_JPIMMED_*_02, for an even or odd
+// Index Size (cIS), given oldIndex, Index, and Pjll in the context:
+//
+// Put oldIndex and Index in their proper order.  For odd indexes, must copy
+// bytes.
+
+#ifdef JUDY1
+
+#define JU_IMMSET_01_COPY_EVEN(ignore1,ignore2) \
+        if (oldIndex < Index) { Pjll[0] = oldIndex; Pjll[1] = Index;    } \
+        else                  { Pjll[0] = Index;    Pjll[1] = oldIndex; }
+
+#define JU_IMMSET_01_COPY_ODD(cIS,CopyWord)     \
+        if (oldIndex < Index)                   \
+        {                                       \
+            CopyWord(Pjll + 0,     oldIndex);   \
+            CopyWord(Pjll + (cIS), Index);      \
+        }                                       \
+        else                                    \
+        {                                       \
+            CopyWord(Pjll + 0,    Index);       \
+            CopyWord(Pjll + (cIS), oldIndex);   \
+        }
+
+// The "real" *_01 Copy macro:
+//
+// Trim the high byte off Index, look for a match with the old Index, and if
+// none, insert the new Index in the leaf in the correct place, given Pjp and
+// Index in the context.
+//
+// Note:  A single immediate index lives in the jp_DcdPopO field, but two or
+// more reside starting at Pjp->jp_1Index.
+
+#define JU_IMMSET_01_COPY(cIS,LeafType,NewJPType,Copy,CopyWord) \
+        {                                                       \
+            LeafType Pjll;                                      \
+            Word_t   oldIndex = JU_JPDCDPOP0(Pjp);              \
+                                                                \
+            Index = JU_TRIMTODCDSIZE(Index);                    \
+            if (oldIndex == Index) return(0);                   \
+                                                                \
+            Pjll = (LeafType) (Pjp->jp_1Index);                 \
+            Copy(cIS,CopyWord);                                 \
+            DBGCODE(JudyCheckSorted(Pjll, 2, cIS);)             \
+                                                                \
+            Pjp->jp_Type = (NewJPType);                         \
+            return(1);                                          \
+        }
+
+#else // JUDYL
+
+// Variations to also handle value areas; see comments above:
+//
+// For JudyL, Pjv (start of value area) and oldValue are also in the context;
+// leave Pjv set to the value area for Index.
+
+#define JU_IMMSET_01_COPY_EVEN(cIS,CopyWord)    \
+        if (oldIndex < Index)                   \
+        {                                       \
+            Pjll[0] = oldIndex;                 \
+            Pjv [0] = oldValue;                 \
+            Pjll[1] = Index;                    \
+            ++Pjv;                              \
+        }                                       \
+        else                                    \
+        {                                       \
+            Pjll[0] = Index;                    \
+            Pjll[1] = oldIndex;                 \
+            Pjv [1] = oldValue;                 \
+        }
+
+#define JU_IMMSET_01_COPY_ODD(cIS,CopyWord)     \
+        if (oldIndex < Index)                   \
+        {                                       \
+            CopyWord(Pjll + 0,     oldIndex);   \
+            CopyWord(Pjll + (cIS), Index);      \
+            Pjv[0] = oldValue;                  \
+            ++Pjv;                              \
+        }                                       \
+        else                                    \
+        {                                       \
+            CopyWord(Pjll + 0,    Index);       \
+            CopyWord(Pjll + (cIS), oldIndex);   \
+            Pjv[1] = oldValue;                  \
+        }
+
+// The old value area is in the first word (*Pjp), and Pjv and Pjpm are also in
+// the context.  Also, unlike Judy1, indexes remain in word 2 (jp_LIndex),
+// meaning insert-in-place rather than copy.
+//
+// Return jpm_PValue pointing to Indexs value area.  If Index is new, allocate
+// a 2-value-leaf and attach it to the JP.
+
+#define JU_IMMSET_01_COPY(cIS,LeafType,NewJPType,Copy,CopyWord) \
+        {                                                       \
+            LeafType Pjll;                                      \
+            Word_t   oldIndex = JU_JPDCDPOP0(Pjp);              \
+            Word_t   oldValue;                                  \
+            Pjv_t    PjvRaw;                                    \
+            Pjv_t    Pjv;                                       \
+                                                                \
+            Index = JU_TRIMTODCDSIZE(Index);                    \
+                                                                \
+            if (oldIndex == Index)                              \
+            {                                                   \
+                Pjpm->jpm_PValue = (Pjv_t) Pjp;                 \
+                return(0);                                      \
+            }                                                   \
+                                                                \
+            if ((PjvRaw = j__udyLAllocJV(2, Pjpm)) == (Pjv_t) NULL) \
+                return(-1);                                     \
+            Pjv = P_JV(PjvRaw);                                 \
+                                                                \
+            oldValue       = Pjp->jp_Addr;                      \
+            (Pjp->jp_Addr) = (Word_t) PjvRaw;                   \
+            Pjll           = (LeafType) (Pjp->jp_LIndex);       \
+                                                                \
+            Copy(cIS,CopyWord);                                 \
+            DBGCODE(JudyCheckSorted(Pjll, 2, cIS);)             \
+                                                                \
+            Pjp->jp_Type   = (NewJPType);                       \
+            *Pjv             = 0;                               \
+            Pjpm->jpm_PValue = Pjv;                             \
+            return(1);                                          \
+        }
+
+// The following is a unique mix of JU_IMMSET_01() and JU_IMMSETCASCADE() for
+// going from cJU_JPIMMED_*_01 directly to a cJU_JPLEAF* for JudyL:
+//
+// If Index is not already set, allocate a leaf, copy the old and new indexes
+// into it, clear and return the new value area, and modify the current JP.
+// Note that jp_DcdPop is set to a pop0 of 0 for now, and incremented later.
+
+
+#define JU_IMMSET_01_CASCADE(cIS,LeafType,NewJPType,ValueArea,  \
+                             Copy,CopyWord,Alloc)               \
+        {                                                       \
+            Word_t   D_P0;                                      \
+            LeafType PjllRaw;                                   \
+            LeafType Pjll;                                      \
+            Word_t   oldIndex = JU_JPDCDPOP0(Pjp);              \
+            Word_t   oldValue;                                  \
+            Pjv_t    Pjv;                                       \
+                                                                \
+            Index = JU_TRIMTODCDSIZE(Index);                    \
+                                                                \
+            if (oldIndex == Index)                              \
+            {                                                   \
+                Pjpm->jpm_PValue = (Pjv_t) (&(Pjp->jp_Addr));   \
+                return(0);                                      \
+            }                                                   \
+                                                                \
+            if ((PjllRaw = (LeafType) Alloc(2, Pjpm)) == (LeafType) NULL) \
+                return(-1);                                     \
+            Pjll = (LeafType) P_JLL(PjllRaw);                   \
+            Pjv  = ValueArea(Pjll, 2);                          \
+                                                                \
+            oldValue = Pjp->jp_Addr;                            \
+                                                                \
+            Copy(cIS,CopyWord);                                 \
+            DBGCODE(JudyCheckSorted(Pjll, 2, cIS);)             \
+                                                                \
+            *Pjv = 0;                                           \
+            Pjpm->jpm_PValue  = Pjv;                            \
+            D_P0 = Index & cJU_DCDMASK(cIS); /* pop0 = 0 */     \
+            JU_JPSETADT(Pjp, (Word_t)PjllRaw, D_P0, NewJPType); \
+                                                                \
+            return(1);                                          \
+        }
+
+#endif // JUDYL
+
+// Handle growth of cJU_JPIMMED_*_[02..15]:
+
+#ifdef JUDY1
+
+// Insert an Index into an immediate JP that has room for more, if the Index is
+// not already present; given Pjp, Index, exppop1, Pjv, and Pjpm in the
+// context:
+//
+// Note:  Use this only when the JP format doesnt change, that is, going from
+// cJU_JPIMMED_X_0Y to cJU_JPIMMED_X_0Z, where X >= 2 and Y+1 = Z.
+//
+// Note:  Incrementing jp_Type is how to increase the Index population.
+
+#define JU_IMMSETINPLACE(cIS,LeafType,BaseJPType_02,Search,InsertInPlace) \
+        {                                                               \
+            LeafType Pjll;                                              \
+            int      offset;                                            \
+                                                                        \
+            exppop1 = JU_JPTYPE(Pjp) - (BaseJPType_02) + 2;             \
+            offset  = Search((Pjll_t) (Pjp->jp_1Index), exppop1, Index); \
+                                                                        \
+            JU_CHECK_IF_EXISTS(offset, ignore, Pjpm);                   \
+                                                                        \
+            Pjll = (LeafType) (Pjp->jp_1Index);                         \
+            InsertInPlace(Pjll, exppop1, offset, Index);                \
+            DBGCODE(JudyCheckSorted(Pjll, exppop1 + 1, cIS);)           \
+            ++(Pjp->jp_Type);                                           \
+            return(1);                                                  \
+        }
+
+// Insert an Index into an immediate JP that has no room for more:
+//
+// If the Index is not already present, do a cascade (to a leaf); given Pjp,
+// Index, Pjv, and Pjpm in the context.
+
+
+#define JU_IMMSETCASCADE(cIS,OldPop1,LeafType,NewJPType,                \
+                         ignore,Search,InsertCopy,Alloc)                \
+        {                                                               \
+            Word_t   D_P0;                                              \
+            Pjll_t PjllRaw;                                             \
+            Pjll_t Pjll;                                                \
+            int    offset;                                              \
+                                                                        \
+            offset = Search((Pjll_t) (Pjp->jp_1Index), (OldPop1), Index); \
+            JU_CHECK_IF_EXISTS(offset, ignore, Pjpm);                   \
+                                                                        \
+            if ((PjllRaw = Alloc((OldPop1) + 1, Pjpm)) == 0) return(-1); \
+            Pjll = P_JLL(PjllRaw);                                      \
+                                                                        \
+            InsertCopy((LeafType) Pjll, (LeafType) (Pjp->jp_1Index),    \
+                       OldPop1, offset, Index);                         \
+            DBGCODE(JudyCheckSorted(Pjll, (OldPop1) + 1, cIS);)         \
+                                                                        \
+            D_P0 = (Index & cJU_DCDMASK(cIS)) + (OldPop1) - 1;          \
+            JU_JPSETADT(Pjp, (Word_t)PjllRaw, D_P0, NewJPType);         \
+            return(1);                                                  \
+        }
+
+#else // JUDYL
+
+// Variations to also handle value areas; see comments above:
+//
+// For JudyL, Pjv (start of value area) is also in the context.
+//
+// TBD:  This code makes a true but weak assumption that a JudyL 32-bit 2-index
+// value area must be copied to a new 3-index value area.  AND it doesnt know
+// anything about JudyL 64-bit cases (cJU_JPIMMED_1_0[3-7] only) where the
+// value area can grow in place!  However, this should not break it, just slow
+// it down.
+
+#define JU_IMMSETINPLACE(cIS,LeafType,BaseJPType_02,Search,InsertInPlace) \
+        {                                                                 \
+            LeafType Pleaf;                                               \
+            int      offset;                                              \
+            Pjv_t    PjvRaw;                                              \
+            Pjv_t    Pjv;                                                 \
+            Pjv_t    PjvnewRaw;                                           \
+            Pjv_t    Pjvnew;                                              \
+                                                                          \
+            exppop1 = JU_JPTYPE(Pjp) - (BaseJPType_02) + 2;               \
+            offset  = Search((Pjll_t) (Pjp->jp_LIndex), exppop1, Index);  \
+            PjvRaw  = (Pjv_t) (Pjp->jp_Addr);                             \
+            Pjv     = P_JV(PjvRaw);                                       \
+                                                                          \
+            JU_CHECK_IF_EXISTS(offset, Pjv, Pjpm);                        \
+                                                                          \
+            if ((PjvnewRaw = j__udyLAllocJV(exppop1 + 1, Pjpm))           \
+             == (Pjv_t) NULL) return(-1);                                 \
+            Pjvnew = P_JV(PjvnewRaw);                                     \
+                                                                          \
+            Pleaf = (LeafType) (Pjp->jp_LIndex);                          \
+                                                                          \
+            InsertInPlace(Pleaf, exppop1, offset, Index);                 \
+            /* see TBD above about this: */                               \
+            JU_INSERTCOPY(Pjvnew, Pjv, exppop1, offset, 0);               \
+            DBGCODE(JudyCheckSorted(Pleaf, exppop1 + 1, cIS);)            \
+            j__udyLFreeJV(PjvRaw, exppop1, Pjpm);                         \
+            Pjp->jp_Addr     = (Word_t) PjvnewRaw;                        \
+            Pjpm->jpm_PValue = Pjvnew + offset;                           \
+                                                                          \
+            ++(Pjp->jp_Type);                                             \
+            return(1);                                                    \
+        }
+
+#define JU_IMMSETCASCADE(cIS,OldPop1,LeafType,NewJPType,                \
+                         ValueArea,Search,InsertCopy,Alloc)             \
+        {                                                               \
+            Word_t   D_P0;                                      \
+            Pjll_t PjllRaw;                                             \
+            Pjll_t Pjll;                                                \
+            int    offset;                                              \
+            Pjv_t  PjvRaw;                                              \
+            Pjv_t  Pjv;                                                 \
+            Pjv_t  Pjvnew;                                              \
+                                                                        \
+            PjvRaw = (Pjv_t) (Pjp->jp_Addr);                            \
+            Pjv    = P_JV(PjvRaw);                                      \
+            offset = Search((Pjll_t) (Pjp->jp_LIndex), (OldPop1), Index); \
+            JU_CHECK_IF_EXISTS(offset, Pjv, Pjpm);                      \
+                                                                        \
+            if ((PjllRaw = Alloc((OldPop1) + 1, Pjpm)) == 0)            \
+                return(-1);                                             \
+            Pjll = P_JLL(PjllRaw);                                      \
+            InsertCopy((LeafType) Pjll, (LeafType) (Pjp->jp_LIndex),    \
+                       OldPop1, offset, Index);                         \
+            DBGCODE(JudyCheckSorted(Pjll, (OldPop1) + 1, cIS);)         \
+                                                                        \
+            Pjvnew = ValueArea(Pjll, (OldPop1) + 1);                    \
+            JU_INSERTCOPY(Pjvnew, Pjv, OldPop1, offset, 0);             \
+            j__udyLFreeJV(PjvRaw, (OldPop1), Pjpm);                     \
+            Pjpm->jpm_PValue = Pjvnew + offset;                         \
+                                                                        \
+            D_P0 = (Index & cJU_DCDMASK(cIS)) + (OldPop1) - 1;          \
+            JU_JPSETADT(Pjp, (Word_t)PjllRaw, D_P0, NewJPType);         \
+            return(1);                                                  \
+        }
+
+#endif // JUDYL
+
+// Common convenience/shorthand wrappers around JU_IMMSET_01_COPY() for
+// even/odd index sizes:
+
+#define JU_IMMSET_01(     cIS, LeafType, NewJPType) \
+        JU_IMMSET_01_COPY(cIS, LeafType, NewJPType, JU_IMMSET_01_COPY_EVEN, \
+                          ignore)
+
+#define JU_IMMSET_01_ODD( cIS,            NewJPType, CopyWord) \
+        JU_IMMSET_01_COPY(cIS, uint8_t *, NewJPType, JU_IMMSET_01_COPY_ODD, \
+                          CopyWord)
+
+
+// END OF MACROS; IMMED CASES START HERE:
+
+// cJU_JPIMMED_*_01 cases:
+//
+// 1_01 always leads to 1_02:
+//
+// (1_01 => 1_02 => 1_03 => [ 1_04 => ... => 1_07 => [ 1_08..15 => ]] LeafL)
+
+        case cJU_JPIMMED_1_01: JU_IMMSET_01(1, uint8_t *, cJU_JPIMMED_1_02);
+
+// 2_01 leads to 2_02, and 3_01 leads to 3_02, except for JudyL 32-bit, where
+// they lead to a leaf:
+//
+// (2_01 => [ 2_02 => 2_03 => [ 2_04..07 => ]] LeafL)
+// (3_01 => [ 3_02 =>         [ 3_03..05 => ]] LeafL)
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+        case cJU_JPIMMED_2_01: JU_IMMSET_01(2, uint16_t *, cJU_JPIMMED_2_02);
+        case cJU_JPIMMED_3_01: JU_IMMSET_01_ODD (3, cJU_JPIMMED_3_02,
+                                                 JU_COPY3_LONG_TO_PINDEX);
+#else
+        case cJU_JPIMMED_2_01:
+            JU_IMMSET_01_CASCADE(2, uint16_t *, cJU_JPLEAF2, JL_LEAF2VALUEAREA,
+                                 JU_IMMSET_01_COPY_EVEN, ignore,
+                                 j__udyAllocJLL2);
+        case cJU_JPIMMED_3_01:
+            JU_IMMSET_01_CASCADE(3, uint8_t *,  cJU_JPLEAF3, JL_LEAF3VALUEAREA,
+                                 JU_IMMSET_01_COPY_ODD,
+                                 JU_COPY3_LONG_TO_PINDEX, j__udyAllocJLL3);
+#endif
+
+#ifdef JU_64BIT
+
+// [4-7]_01 lead to [4-7]_02 for Judy1, and to leaves for JudyL:
+//
+// (4_01 => [[ 4_02..03 => ]] LeafL)
+// (5_01 => [[ 5_02..03 => ]] LeafL)
+// (6_01 => [[ 6_02 =>     ]] LeafL)
+// (7_01 => [[ 7_02 =>     ]] LeafL)
+
+#ifdef JUDY1
+        case cJU_JPIMMED_4_01: JU_IMMSET_01(4, uint32_t *, cJ1_JPIMMED_4_02);
+        case cJU_JPIMMED_5_01: JU_IMMSET_01_ODD(5, cJ1_JPIMMED_5_02,
+                                                JU_COPY5_LONG_TO_PINDEX);
+        case cJU_JPIMMED_6_01: JU_IMMSET_01_ODD(6, cJ1_JPIMMED_6_02,
+                                                JU_COPY6_LONG_TO_PINDEX);
+        case cJU_JPIMMED_7_01: JU_IMMSET_01_ODD(7, cJ1_JPIMMED_7_02,
+                                                JU_COPY7_LONG_TO_PINDEX);
+#else // JUDYL
+        case cJU_JPIMMED_4_01:
+            JU_IMMSET_01_CASCADE(4, uint32_t *, cJU_JPLEAF4, JL_LEAF4VALUEAREA,
+                                 JU_IMMSET_01_COPY_EVEN, ignore,
+                                 j__udyAllocJLL4);
+        case cJU_JPIMMED_5_01:
+            JU_IMMSET_01_CASCADE(5, uint8_t *, cJU_JPLEAF5, JL_LEAF5VALUEAREA,
+                                 JU_IMMSET_01_COPY_ODD,
+                                 JU_COPY5_LONG_TO_PINDEX, j__udyAllocJLL5);
+        case cJU_JPIMMED_6_01:
+            JU_IMMSET_01_CASCADE(6, uint8_t *, cJU_JPLEAF6, JL_LEAF6VALUEAREA,
+                                 JU_IMMSET_01_COPY_ODD,
+                                 JU_COPY6_LONG_TO_PINDEX, j__udyAllocJLL6);
+        case cJU_JPIMMED_7_01:
+            JU_IMMSET_01_CASCADE(7, uint8_t *, cJU_JPLEAF7, JL_LEAF7VALUEAREA,
+                                 JU_IMMSET_01_COPY_ODD,
+                                 JU_COPY7_LONG_TO_PINDEX, j__udyAllocJLL7);
+#endif // JUDYL
+#endif // JU_64BIT
+
+// cJU_JPIMMED_1_* cases that can grow in place:
+//
+// (1_01 => 1_02 => 1_03 => [ 1_04 => ... => 1_07 => [ 1_08..15 => ]] LeafL)
+
+        case cJU_JPIMMED_1_02:
+#if (defined(JUDY1) || defined(JU_64BIT))
+        case cJU_JPIMMED_1_03:
+        case cJU_JPIMMED_1_04:
+        case cJU_JPIMMED_1_05:
+        case cJU_JPIMMED_1_06:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+        case cJU_JPIMMED_1_07:
+        case cJ1_JPIMMED_1_08:
+        case cJ1_JPIMMED_1_09:
+        case cJ1_JPIMMED_1_10:
+        case cJ1_JPIMMED_1_11:
+        case cJ1_JPIMMED_1_12:
+        case cJ1_JPIMMED_1_13:
+        case cJ1_JPIMMED_1_14:
+#endif
+            JU_IMMSETINPLACE(1, uint8_t *, cJU_JPIMMED_1_02, j__udySearchLeaf1,
+                             JU_INSERTINPLACE);
+
+// cJU_JPIMMED_1_* cases that must cascade:
+//
+// (1_01 => 1_02 => 1_03 => [ 1_04 => ... => 1_07 => [ 1_08..15 => ]] LeafL)
+
+#if (defined(JUDYL) && (! defined(JU_64BIT)))
+        case cJU_JPIMMED_1_03:
+            JU_IMMSETCASCADE(1, 3, uint8_t *, cJU_JPLEAF1, JL_LEAF1VALUEAREA,
+                             j__udySearchLeaf1, JU_INSERTCOPY,
+                             j__udyAllocJLL1);
+#endif
+#if (defined(JUDY1) && (! defined(JU_64BIT)))
+        case cJU_JPIMMED_1_07:
+            JU_IMMSETCASCADE(1, 7, uint8_t *, cJU_JPLEAF1, ignore,
+                             j__udySearchLeaf1, JU_INSERTCOPY,
+                             j__udyAllocJLL1);
+
+#endif
+#if (defined(JUDYL) && defined(JU_64BIT))
+        case cJU_JPIMMED_1_07:
+            JU_IMMSETCASCADE(1, 7, uint8_t *, cJU_JPLEAF1, JL_LEAF1VALUEAREA,
+                             j__udySearchLeaf1, JU_INSERTCOPY,
+                             j__udyAllocJLL1);
+
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+// Special case, as described above, go directly from Immed to LeafB1:
+
+        case cJ1_JPIMMED_1_15:
+        {
+            Word_t DcdP0;
+            int    offset;
+            Pjlb_t PjlbRaw;
+            Pjlb_t Pjlb;
+
+            offset = j__udySearchLeaf1((Pjll_t) Pjp->jp_1Index, 15, Index);
+
+            JU_CHECK_IF_EXISTS(offset, ignore, Pjpm);
+
+// Create a bitmap leaf (special case for Judy1 64-bit only, see usage):  Set
+// new Index in bitmap, copy an Immed1_15 to the bitmap, and set the parent JP
+// EXCEPT jp_DcdPopO, leaving any followup to the caller:
+
+            if ((PjlbRaw = j__udyAllocJLB1(Pjpm)) == (Pjlb_t) NULL)
+                return(-1);
+            Pjlb = P_JLB(PjlbRaw);
+
+            JU_BITMAPSETL(Pjlb, Index);
+
+            for (offset = 0; offset < 15; ++offset)
+                JU_BITMAPSETL(Pjlb, Pjp->jp_1Index[offset]);
+
+//          Set jp_DcdPopO including the current pop0; incremented later:
+            DcdP0 = (Index & cJU_DCDMASK(1)) + 15 - 1;
+            JU_JPSETADT(Pjp, (Word_t)PjlbRaw, DcdP0, cJU_JPLEAF_B1);
+
+            return(1);
+        }
+#endif
+
+// cJU_JPIMMED_[2..7]_[02..15] cases that grow in place or cascade:
+//
+// (2_01 => [ 2_02 => 2_03 => [ 2_04..07 => ]] LeafL)
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+        case cJU_JPIMMED_2_02:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+        case cJU_JPIMMED_2_03:
+        case cJ1_JPIMMED_2_04:
+        case cJ1_JPIMMED_2_05:
+        case cJ1_JPIMMED_2_06:
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+            JU_IMMSETINPLACE(2, uint16_t *, cJU_JPIMMED_2_02, j__udySearchLeaf2,
+                             JU_INSERTINPLACE);
+#endif
+
+#undef OLDPOP1
+#if ((defined(JUDY1) && (! defined(JU_64BIT))) || (defined(JUDYL) && defined(JU_64BIT)))
+        case cJU_JPIMMED_2_03:
+#define OLDPOP1 3
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+        case cJ1_JPIMMED_2_07:
+#define OLDPOP1 7
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+            JU_IMMSETCASCADE(2, OLDPOP1, uint16_t *, cJU_JPLEAF2,
+                             JL_LEAF2VALUEAREA, j__udySearchLeaf2,
+                             JU_INSERTCOPY, j__udyAllocJLL2);
+#endif
+
+// (3_01 => [ 3_02 => [ 3_03..05 => ]] LeafL)
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+        case cJU_JPIMMED_3_02:
+        case cJ1_JPIMMED_3_03:
+        case cJ1_JPIMMED_3_04:
+
+            JU_IMMSETINPLACE(3, uint8_t *, cJU_JPIMMED_3_02, j__udySearchLeaf3,
+                             JU_INSERTINPLACE3);
+#endif
+
+#undef OLDPOP1
+#if ((defined(JUDY1) && (! defined(JU_64BIT))) || (defined(JUDYL) && defined(JU_64BIT)))
+        case cJU_JPIMMED_3_02:
+#define OLDPOP1 2
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+        case cJ1_JPIMMED_3_05:
+#define OLDPOP1 5
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+            JU_IMMSETCASCADE(3, OLDPOP1, uint8_t *, cJU_JPLEAF3,
+                             JL_LEAF3VALUEAREA, j__udySearchLeaf3,
+                             JU_INSERTCOPY3, j__udyAllocJLL3);
+#endif
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+
+// (4_01 => [[ 4_02..03 => ]] LeafL)
+
+        case cJ1_JPIMMED_4_02:
+
+            JU_IMMSETINPLACE(4, uint32_t *, cJ1_JPIMMED_4_02, j__udySearchLeaf4,
+                             JU_INSERTINPLACE);
+
+        case cJ1_JPIMMED_4_03:
+
+            JU_IMMSETCASCADE(4, 3, uint32_t *, cJU_JPLEAF4, ignore,
+                             j__udySearchLeaf4, JU_INSERTCOPY,
+                             j__udyAllocJLL4);
+
+// (5_01 => [[ 5_02..03 => ]] LeafL)
+
+        case cJ1_JPIMMED_5_02:
+
+            JU_IMMSETINPLACE(5, uint8_t *, cJ1_JPIMMED_5_02, j__udySearchLeaf5,
+                             JU_INSERTINPLACE5);
+
+        case cJ1_JPIMMED_5_03:
+
+            JU_IMMSETCASCADE(5, 3, uint8_t *, cJU_JPLEAF5, ignore,
+                             j__udySearchLeaf5, JU_INSERTCOPY5,
+                             j__udyAllocJLL5);
+
+// (6_01 => [[ 6_02 => ]] LeafL)
+
+        case cJ1_JPIMMED_6_02:
+
+            JU_IMMSETCASCADE(6, 2, uint8_t *, cJU_JPLEAF6, ignore,
+                             j__udySearchLeaf6, JU_INSERTCOPY6,
+                             j__udyAllocJLL6);
+
+// (7_01 => [[ 7_02 => ]] LeafL)
+
+        case cJ1_JPIMMED_7_02:
+
+            JU_IMMSETCASCADE(7, 2, uint8_t *, cJU_JPLEAF7, ignore,
+                             j__udySearchLeaf7, JU_INSERTCOPY7,
+                             j__udyAllocJLL7);
+
+#endif // (JUDY1 && JU_64BIT)
+
+
+// ****************************************************************************
+// INVALID JP TYPE:
+
+        default: JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_CORRUPT); return(-1);
+
+        } // switch on JP type
+
+        {
+
+#ifdef SUBEXPCOUNTS
+
+// This code might seem strange here.  However it saves some memory read time
+// during insert (~70nS) because a pipelined processor does not need to "stall"
+// waiting for the memory read to complete.  Hope the compiler is not too smart
+// or dumb and moves the code down to where it looks like it belongs (below a
+// few lines).
+
+            Word_t SubExpCount = 0;     // current subexpanse counter.
+
+            if (PSubExp != (PWord_t) NULL)      // only if BranchB/U.
+                SubExpCount = PSubExp[0];
+#endif
+
+// PROCESS JP -- RECURSIVELY:
+//
+// For non-Immed JP types, if successful, post-increment the population count
+// at this Level.
+
+            retcode = j__udyInsWalk(Pjp, Index, Pjpm);
+
+// Successful insert, increment JP and subexpanse count:
+
+            if ((JU_JPTYPE(Pjp) < cJU_JPIMMED_1_01) && (retcode == 1))
+            {
+                jp_t   JP;
+                Word_t DcdP0;
+#ifdef SUBEXPCOUNTS
+
+// Note:  Pjp must be a pointer to a BranchB/U:
+
+                if (PSubExp != (PWord_t) NULL) PSubExp[0] = SubExpCount + 1;
+#endif
+
+                JP = *Pjp;
+                DcdP0 = JU_JPDCDPOP0(Pjp) + 1;
+                JU_JPSETADT(Pjp, JP.jp_Addr, DcdP0, JU_JPTYPE(&JP));
+            }
+        }
+        return(retcode);
+
+} // j__udyInsWalk()
+
+
+// ****************************************************************************
+// J U D Y   1   S E T
+// J U D Y   L   I N S
+//
+// Main entry point.  See the manual entry for details.
+
+#ifdef JUDY1
+FUNCTION int Judy1Set
+#else
+FUNCTION PPvoid_t JudyLIns
+#endif
+        (
+        PPvoid_t  PPArray,      // in which to insert.
+        Word_t    Index,        // to insert.
+        PJError_t PJError       // optional, for returning error info.
+        )
+{
+#ifdef JUDY1
+#define Pjv       ignore        // placeholders for macros.
+#define Pjvnew    ignore
+#else
+        Pjv_t     Pjv;          // value area in old leaf.
+        Pjv_t     Pjvnew;       // value area in new leaf.
+#endif
+        Pjpm_t    Pjpm;         // array-global info.
+        int       offset;       // position in which to store new Index.
+        Pjlw_t    Pjlw;
+
+
+// CHECK FOR NULL POINTER (error by caller):
+
+        if (PPArray == (PPvoid_t) NULL)
+        {
+            JU_SET_ERRNO(PJError, JU_ERRNO_NULLPPARRAY);
+            JUDY1CODE(return(JERRI );)
+            JUDYLCODE(return(PPJERR);)
+        }
+
+        Pjlw = P_JLW(*PPArray); // first word of leaf.
+
+// ****************************************************************************
+// PROCESS TOP LEVEL "JRP" BRANCHES AND LEAVES:
+
+// ****************************************************************************
+// JRPNULL (EMPTY ARRAY):  BUILD A LEAFW WITH ONE INDEX:
+
+// if a valid empty array (null pointer), so create an array of population == 1:
+
+        if (Pjlw == (Pjlw_t)NULL)
+        {
+            Pjlw_t Pjlwnew;
+
+            Pjlwnew = j__udyAllocJLW(1);
+            JUDY1CODE(JU_CHECKALLOC(Pjlw_t, Pjlwnew, JERRI );)
+            JUDYLCODE(JU_CHECKALLOC(Pjlw_t, Pjlwnew, PPJERR);)
+
+            Pjlwnew[0] = 1 - 1;         // pop0 = 0.
+            Pjlwnew[1] = Index;
+
+            *PPArray = (Pvoid_t) Pjlwnew;
+            DBGCODE(JudyCheckPop(*PPArray);)
+
+  JUDY1CODE(return(1); )
+  JUDYLCODE(Pjlwnew[2] = 0; )           // value area.
+  JUDYLCODE(return((PPvoid_t) (Pjlwnew + 2)); )
+
+        }  // NULL JRP
+
+// ****************************************************************************
+// LEAFW, OTHER SIZE:
+
+        if (JU_LEAFW_POP0(*PPArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+        {
+            Pjlw_t Pjlwnew;
+            Word_t pop1;
+
+            Pjlw = P_JLW(*PPArray);             // first word of leaf.
+            pop1 = Pjlw[0] + 1;
+
+#ifdef JUDYL
+            Pjv = JL_LEAFWVALUEAREA(Pjlw, pop1);
+#endif
+            offset = j__udySearchLeafW(Pjlw + 1, pop1, Index);
+
+            if (offset >= 0)            // index is already valid:
+            {
+                DBGCODE(JudyCheckPop(*PPArray);)
+                JUDY1CODE(return(0); )
+                JUDYLCODE(return((PPvoid_t) (Pjv + offset)); )
+            }
+
+            offset = ~offset;
+
+// Insert index in cases where no new memory is needed:
+
+            if (JU_LEAFWGROWINPLACE(pop1))
+            {
+                ++Pjlw[0];                      // increase population.
+
+                JU_INSERTINPLACE(Pjlw + 1, pop1, offset, Index);
+#ifdef JUDYL
+                JU_INSERTINPLACE(Pjv, pop1, offset, 0);
+#endif
+                DBGCODE(JudyCheckPop(*PPArray);)
+                DBGCODE(JudyCheckSorted(Pjlw + 1, pop1 + 1, cJU_ROOTSTATE);)
+
+      JUDY1CODE(return(1); )
+      JUDYLCODE(return((PPvoid_t) (Pjv + offset)); )
+            }
+
+// Insert index into a new, larger leaf:
+
+            if (pop1 < cJU_LEAFW_MAXPOP1)       // can grow to a larger leaf.
+            {
+                Pjlwnew = j__udyAllocJLW(pop1 + 1);
+                JUDY1CODE(JU_CHECKALLOC(Pjlw_t, Pjlwnew, JERRI );)
+                JUDYLCODE(JU_CHECKALLOC(Pjlw_t, Pjlwnew, PPJERR);)
+
+                Pjlwnew[0] = pop1;              // set pop0 in new leaf.
+
+                JU_INSERTCOPY(Pjlwnew + 1, Pjlw + 1, pop1, offset, Index);
+#ifdef JUDYL
+                Pjvnew = JL_LEAFWVALUEAREA(Pjlwnew, pop1 + 1);
+                JU_INSERTCOPY(Pjvnew, Pjv, pop1, offset, 0);
+#endif
+                DBGCODE(JudyCheckSorted(Pjlwnew + 1, pop1 + 1, cJU_ROOTSTATE);)
+
+                j__udyFreeJLW(Pjlw, pop1, NULL);
+
+                *PPArray = (Pvoid_t) Pjlwnew;
+                DBGCODE(JudyCheckPop(*PPArray);)
+
+      JUDY1CODE(return(1); )
+      JUDYLCODE(return((PPvoid_t) (Pjvnew + offset)); )
+            }
+
+            assert(pop1 == cJU_LEAFW_MAXPOP1);
+
+// Leaf at max size => cannot insert new index, so cascade instead:
+//
+// Upon cascading from a LEAFW leaf to the first branch, must allocate and
+// initialize a JPM.
+
+            Pjpm = j__udyAllocJPM();
+            JUDY1CODE(JU_CHECKALLOC(Pjpm_t, Pjpm, JERRI );)
+            JUDYLCODE(JU_CHECKALLOC(Pjpm_t, Pjpm, PPJERR);)
+
+            (Pjpm->jpm_Pop0)       = cJU_LEAFW_MAXPOP1 - 1;
+            (Pjpm->jpm_JP.jp_Addr) = (Word_t) Pjlw;
+
+            if (j__udyCascadeL(&(Pjpm->jpm_JP), Pjpm) == -1)
+            {
+                JU_COPY_ERRNO(PJError, Pjpm);
+                JUDY1CODE(return(JERRI );)
+                JUDYLCODE(return(PPJERR);)
+            }
+
+// Note:  No need to pass Pjpm for memory decrement; LEAFW memory is never
+// counted in a JPM at all:
+
+            j__udyFreeJLW(Pjlw, cJU_LEAFW_MAXPOP1, NULL);
+            *PPArray = (Pvoid_t) Pjpm;
+
+        } // JU_LEAFW
+
+// ****************************************************************************
+// BRANCH:
+
+        {
+            int retcode;  // really only needed for Judy1, but free for JudyL.
+
+            Pjpm = P_JPM(*PPArray);
+            retcode = j__udyInsWalk(&(Pjpm->jpm_JP), Index, Pjpm);
+
+            if (retcode == -1)
+            {
+                JU_COPY_ERRNO(PJError, Pjpm);
+                JUDY1CODE(return(JERRI );)
+                JUDYLCODE(return(PPJERR);)
+            }
+
+            if (retcode ==  1) ++(Pjpm->jpm_Pop0);  // incr total array popu.
+
+            assert(((Pjpm->jpm_JP.jp_Type) == cJU_JPBRANCH_L)
+                || ((Pjpm->jpm_JP.jp_Type) == cJU_JPBRANCH_B)
+                || ((Pjpm->jpm_JP.jp_Type) == cJU_JPBRANCH_U));
+            DBGCODE(JudyCheckPop(*PPArray);)
+
+#ifdef JUDY1
+            assert((retcode == 0) || (retcode == 1));
+            return(retcode);            // == JU_RET_*_JPM().
+#else
+            assert(Pjpm->jpm_PValue != (Pjv_t) NULL);
+            return((PPvoid_t) Pjpm->jpm_PValue);
+#endif
+        }
+        /*NOTREACHED*/
+
+} // Judy1Set() / JudyLIns()
diff --git a/libs/klib/judy/JudyInsArray.c b/libs/klib/judy/JudyInsArray.c
new file mode 100644
index 0000000..c647ea5
--- /dev/null
+++ b/libs/klib/judy/JudyInsArray.c
@@ -0,0 +1,1176 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// TBD:  It would probably be faster for the caller if the JudyL version took
+// PIndex as an interleaved array of indexes and values rather than just
+// indexes with a separate values array (PValue), especially considering
+// indexes and values are copied here with for-loops anyway and not the
+// equivalent of memcpy().  All code could be revised to simply count by two
+// words for JudyL?  Supports "streaming" the data to/from disk better later?
+// In which case get rid of JU_ERRNO_NULLPVALUE, no longer needed, and simplify
+// the API to this code.
+// _________________
+
+// Judy1SetArray() and JudyLInsArray() functions for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error:  One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+DBGCODE(extern void JudyCheckPop(Pvoid_t PArray);)
+
+
+// IMMED AND LEAF SIZE AND BRANCH TYPE ARRAYS:
+//
+// These support fast and easy lookup by level.
+
+static uint8_t immed_maxpop1[] = {
+    0,
+    cJU_IMMED1_MAXPOP1,
+    cJU_IMMED2_MAXPOP1,
+    cJU_IMMED3_MAXPOP1,
+#ifdef JU_64BIT
+    cJU_IMMED4_MAXPOP1,
+    cJU_IMMED5_MAXPOP1,
+    cJU_IMMED6_MAXPOP1,
+    cJU_IMMED7_MAXPOP1,
+#endif
+    // note:  There are no IMMEDs for whole words.
+};
+
+static uint8_t leaf_maxpop1[] = {
+    0,
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+    cJU_LEAF1_MAXPOP1,
+#else
+    0,                                  // 64-bit Judy1 has no Leaf1.
+#endif
+    cJU_LEAF2_MAXPOP1,
+    cJU_LEAF3_MAXPOP1,
+#ifdef JU_64BIT
+    cJU_LEAF4_MAXPOP1,
+    cJU_LEAF5_MAXPOP1,
+    cJU_LEAF6_MAXPOP1,
+    cJU_LEAF7_MAXPOP1,
+#endif
+    // note:  Root-level leaves are handled differently.
+};
+
+static uint8_t branchL_JPtype[] = {
+    0,
+    0,
+    cJU_JPBRANCH_L2,
+    cJU_JPBRANCH_L3,
+#ifdef JU_64BIT
+    cJU_JPBRANCH_L4,
+    cJU_JPBRANCH_L5,
+    cJU_JPBRANCH_L6,
+    cJU_JPBRANCH_L7,
+#endif
+    cJU_JPBRANCH_L,
+};
+
+static uint8_t branchB_JPtype[] = {
+    0,
+    0,
+    cJU_JPBRANCH_B2,
+    cJU_JPBRANCH_B3,
+#ifdef JU_64BIT
+    cJU_JPBRANCH_B4,
+    cJU_JPBRANCH_B5,
+    cJU_JPBRANCH_B6,
+    cJU_JPBRANCH_B7,
+#endif
+    cJU_JPBRANCH_B,
+};
+
+static uint8_t branchU_JPtype[] = {
+    0,
+    0,
+    cJU_JPBRANCH_U2,
+    cJU_JPBRANCH_U3,
+#ifdef JU_64BIT
+    cJU_JPBRANCH_U4,
+    cJU_JPBRANCH_U5,
+    cJU_JPBRANCH_U6,
+    cJU_JPBRANCH_U7,
+#endif
+    cJU_JPBRANCH_U,
+};
+
+// Subexpanse masks are similer to JU_DCDMASK() but without the need to clear
+// the first digits bits.  Avoid doing variable shifts by precomputing a
+// lookup array.
+
+static Word_t subexp_mask[] = {
+    0,
+    ~cJU_POP0MASK(1),
+    ~cJU_POP0MASK(2),
+    ~cJU_POP0MASK(3),
+#ifdef JU_64BIT
+    ~cJU_POP0MASK(4),
+    ~cJU_POP0MASK(5),
+    ~cJU_POP0MASK(6),
+    ~cJU_POP0MASK(7),
+#endif
+};
+
+
+// FUNCTION PROTOTYPES:
+
+static bool_t j__udyInsArray(Pjp_t PjpParent, int Level, PWord_t PPop1,
+                             PWord_t PIndex,
+#ifdef JUDYL
+                             Pjv_t   PValue,
+#endif
+                             Pjpm_t  Pjpm);
+
+
+// ****************************************************************************
+// J U D Y   1   S E T   A R R A Y
+// J U D Y   L   I N S   A R R A Y
+//
+// Main entry point.  See the manual entry for external overview.
+//
+// TBD:  Until thats written, note that the function returns 1 for success or
+// JERRI for serious error, including insufficient memory to build whole array;
+// use Judy*Count() to see how many were stored, the first N of the total
+// Count.  Also, since it takes Count == Pop1, it cannot handle a full array.
+// Also, "sorted" means ascending without duplicates, otherwise you get the
+// "unsorted" error.
+//
+// The purpose of these functions is to allow rapid construction of a large
+// Judy array given a sorted list of indexes (and for JudyL, corresponding
+// values).  At least one customer saw this as useful, and probably it would
+// also be useful as a sufficient workaround for fast(er) unload/reload to/from
+// disk.
+//
+// This code is written recursively for simplicity, until/unless someone
+// decides to make it faster and more complex.  Hopefully recursion is fast
+// enough simply because the function is so much faster than a series of
+// Set/Ins calls.
+
+#ifdef JUDY1
+FUNCTION int Judy1SetArray
+#else
+FUNCTION int JudyLInsArray
+#endif
+        (
+        PPvoid_t  PPArray,      // in which to insert, initially empty.
+        Word_t    Count,        // number of indexes (and values) to insert.
+const   Word_t *  const PIndex, // list of indexes to insert.
+#ifdef JUDYL
+const   Word_t *  const PValue, // list of corresponding values.
+#endif
+        PJError_t PJError       // optional, for returning error info.
+        )
+{
+        Pjlw_t    Pjlw;         // new root-level leaf.
+        Pjlw_t    Pjlwindex;    // first index in root-level leaf.
+        int       offset;       // in PIndex.
+
+
+// CHECK FOR NULL OR NON-NULL POINTER (error by caller):
+
+        if (PPArray == (PPvoid_t) NULL)
+        { JU_SET_ERRNO(PJError, JU_ERRNO_NULLPPARRAY);   return(JERRI); }
+
+        if (*PPArray != (Pvoid_t) NULL)
+        { JU_SET_ERRNO(PJError, JU_ERRNO_NONNULLPARRAY); return(JERRI); }
+
+        if (PIndex == (PWord_t) NULL)
+        { JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);    return(JERRI); }
+
+#ifdef JUDYL
+        if (PValue == (PWord_t) NULL)
+        { JU_SET_ERRNO(PJError, JU_ERRNO_NULLPVALUE);    return(JERRI); }
+#endif
+
+
+// HANDLE LARGE COUNT (= POP1) (typical case):
+//
+// Allocate and initialize a JPM, set the root pointer to point to it, and then
+// build the tree underneath it.
+
+// Common code for unusual error handling when no JPM available:
+
+        if (Count > cJU_LEAFW_MAXPOP1)  // too big for root-level leaf.
+        {
+            Pjpm_t Pjpm;                        // new, to allocate.
+
+// Allocate JPM:
+
+            Pjpm = j__udyAllocJPM();
+            JU_CHECKALLOC(Pjpm_t, Pjpm, JERRI);
+            *PPArray = (Pvoid_t) Pjpm;
+
+// Set some JPM fields:
+
+            (Pjpm->jpm_Pop0) = Count - 1;
+            // note: (Pjpm->jpm_TotalMemWords) is now initialized.
+
+// Build Judy tree:
+//
+// In case of error save the final Count, possibly modified, unless modified to
+// 0, in which case free the JPM itself:
+
+            if (! j__udyInsArray(&(Pjpm->jpm_JP), cJU_ROOTSTATE, &Count,
+                                 (PWord_t) PIndex,
+#ifdef JUDYL
+                                 (Pjv_t) PValue,
+#endif
+                                 Pjpm))
+            {
+                JU_COPY_ERRNO(PJError, Pjpm);
+
+                if (Count)              // partial success, adjust pop0:
+                {
+                    (Pjpm->jpm_Pop0) = Count - 1;
+                }
+                else                    // total failure, free JPM:
+                {
+                    j__udyFreeJPM(Pjpm, (Pjpm_t) NULL);
+                    *PPArray = (Pvoid_t) NULL;
+                }
+
+                DBGCODE(JudyCheckPop(*PPArray);)
+                return(JERRI);
+            }
+
+            DBGCODE(JudyCheckPop(*PPArray);)
+            return(1);
+
+        } // large count
+
+
+// HANDLE SMALL COUNT (= POP1):
+//
+// First ensure indexes are in sorted order:
+
+        for (offset = 1; offset < Count; ++offset)
+        {
+            if (PIndex[offset - 1] >= PIndex[offset])
+            { JU_SET_ERRNO(PJError, JU_ERRNO_UNSORTED); return(JERRI); }
+        }
+
+        if (Count == 0) return(1);              // *PPArray remains null.
+
+        {
+            Pjlw      = j__udyAllocJLW(Count + 1);
+                        JU_CHECKALLOC(Pjlw_t, Pjlw, JERRI);
+            *PPArray  = (Pvoid_t) Pjlw;
+            Pjlw[0]   = Count - 1;              // set pop0.
+            Pjlwindex = Pjlw + 1;
+        }
+
+// Copy whole-word indexes (and values) to the root-level leaf:
+
+          JU_COPYMEM(Pjlwindex,                      PIndex, Count);
+JUDYLCODE(JU_COPYMEM(JL_LEAFWVALUEAREA(Pjlw, Count), PValue, Count));
+
+        DBGCODE(JudyCheckPop(*PPArray);)
+        return(1);
+
+} // Judy1SetArray() / JudyLInsArray()
+
+
+// ****************************************************************************
+// __ J U D Y   I N S   A R R A Y
+//
+// Given:
+//
+// - a pointer to a JP
+//
+// - the JPs level in the tree, that is, the number of digits left to decode
+//   in the indexes under the JP (one less than the level of the JPM or branch
+//   in which the JP resides); cJU_ROOTSTATE on first entry (when JP is the one
+//   in the JPM), down to 1 for a Leaf1, LeafB1, or FullPop
+//
+// - a pointer to the number of indexes (and corresponding values) to store in
+//   this subtree, to modify in case of partial success
+//
+// - a list of indexes (and for JudyL, corresponding values) to store in this
+//   subtree
+//
+// - a JPM for tracking memory usage and returning errors
+//
+// Recursively build a subtree (immediate indexes, leaf, or branch with
+// subtrees) and modify the JP accordingly.  On the way down, build a BranchU
+// (only) for any expanse with *PPop1 too high for a leaf; on the way out,
+// convert the BranchU to a BranchL or BranchB if appropriate.  Keep memory
+// statistics in the JPM.
+//
+// Return TRUE for success, or FALSE with error information set in the JPM in
+// case of error, in which case leave a partially constructed but healthy tree,
+// and modify parent population counts on the way out.
+//
+// Note:  Each call of this function makes all modifications to the PjpParent
+// it receives; neither the parent nor child calls do this.
+
+FUNCTION static bool_t j__udyInsArray(
+        Pjp_t   PjpParent,              // parent JP in/under which to store.
+        int     Level,                  // initial digits remaining to decode.
+        PWord_t PPop1,                  // number of indexes to store.
+        PWord_t PIndex,                 // list of indexes to store.
+#ifdef JUDYL
+        Pjv_t   PValue,                 // list of corresponding values.
+#endif
+        Pjpm_t  Pjpm)                   // for memory and errors.
+{
+        Pjp_t   Pjp;                    // lower-level JP.
+        Word_t  Pjbany;                 // any type of branch.
+        int     levelsub;               // actual, of Pjps node, <= Level.
+        Word_t  pop1 = *PPop1;          // fast local value.
+        Word_t  pop1sub;                // population of one subexpanse.
+        uint8_t JPtype;                 // current JP type.
+        uint8_t JPtype_null;            // precomputed value for new branch.
+        jp_t    JPnull;                 // precomputed for speed.
+        Pjbu_t  PjbuRaw;                // constructed BranchU.
+        Pjbu_t  Pjbu;
+        int     digit;                  // in BranchU.
+        Word_t  digitmask;              // for a digit in a BranchU.
+        Word_t  digitshifted;           // shifted to correct offset.
+        Word_t  digitshincr;            // increment for digitshifted.
+        int     offset;                 // in PIndex, or a bitmap subexpanse.
+        int     numJPs;                 // number non-null in a BranchU.
+        bool_t  retval;                 // to return from this func.
+JUDYLCODE(Pjv_t PjvRaw);                // destination value area.
+JUDYLCODE(Pjv_t Pjv);
+
+
+// MACROS FOR COMMON CODE:
+//
+// Note:  These use function and local parameters from the context.
+// Note:  Assume newly allocated memory is zeroed.
+
+// Indicate whether a sorted list of indexes in PIndex, based on the first and
+// last indexes in the list using pop1, are in the same subexpanse between
+// Level and L_evel:
+//
+// This can be confusing!  Note that SAMESUBEXP(L) == TRUE means the indexes
+// are the same through level L + 1, and it says nothing about level L and
+// lower; they might be the same or they might differ.
+//
+// Note:  In principle SAMESUBEXP needs a mask for the digits from Level,
+// inclusive, to L_evel, exclusive.  But in practice, since the indexes are all
+// known to be identical above Level, it just uses a mask for the digits
+// through L_evel + 1; see subexp_mask[].
+
+#define SAMESUBEXP(L_evel) \
+        (! ((PIndex[0] ^ PIndex[pop1 - 1]) & subexp_mask[L_evel]))
+
+// Set PjpParent to a null JP appropriate for the level of the node to which it
+// points, which is 1 less than the level of the node in which the JP resides,
+// which is by definition Level:
+//
+// Note:  This can set the JPMs JP to an invalid jp_Type, but it doesnt
+// matter because the JPM is deleted by the caller.
+
+#define SETJPNULL_PARENT \
+            JU_JPSETADT(PjpParent, 0, 0, cJU_JPNULL1 + Level - 1);
+
+// Variation to set a specified JP (in a branch being built) to a precomputed
+// null JP:
+
+#define SETJPNULL(Pjp) *(Pjp) = JPnull
+
+// Handle complete (as opposed to partial) memory allocation failure:  Set the
+// parent JP to an appropriate null type (to leave a consistent tree), zero the
+// callers population count, and return FALSE:
+//
+// Note:  At Level == cJU_ROOTSTATE this sets the JPMs JPs jp_Type to a bogus
+// value, but it doesnt matter because the JPM should be deleted by the
+// caller.
+
+#define NOMEM { SETJPNULL_PARENT; *PPop1 = 0; return(FALSE); }
+
+// Allocate a Leaf1-N and save the address in Pjll; in case of failure, NOMEM:
+
+#define ALLOCLEAF(AllocLeaf) \
+        if ((PjllRaw = AllocLeaf(pop1, Pjpm)) == (Pjll_t) NULL) NOMEM; \
+        Pjll = P_JLL(PjllRaw);
+
+// Copy indexes smaller than words (and values which are whole words) from
+// given arrays to immediate indexes or a leaf:
+//
+// TBD:  These macros overlap with some of the code in JudyCascade.c; do some
+// merging?  That file has functions while these are macros.
+
+#define COPYTOLEAF_EVEN_SUB(Pjll,LeafType)              \
+        {                                               \
+            LeafType * P_leaf  = (LeafType *) (Pjll);   \
+            Word_t     p_op1   = pop1;                  \
+            PWord_t    P_Index = PIndex;                \
+                                                        \
+            assert(pop1 > 0);                           \
+                                                        \
+            do { *P_leaf++ = *P_Index++; /* truncates */\
+            } while (--(p_op1));                        \
+        }
+
+#define COPYTOLEAF_ODD_SUB(cLevel,Pjll,Copy)            \
+        {                                               \
+            uint8_t * P_leaf  = (uint8_t *) (Pjll);     \
+            Word_t    p_op1   = pop1;                   \
+            PWord_t   P_Index = PIndex;                 \
+                                                        \
+            assert(pop1 > 0);                           \
+                                                        \
+            do {                                        \
+                Copy(P_leaf, *P_Index);                 \
+                P_leaf += (cLevel); ++P_Index;          \
+            } while (--(p_op1));                        \
+        }
+
+#ifdef JUDY1
+
+#define COPYTOLEAF_EVEN(Pjll,LeafType)   COPYTOLEAF_EVEN_SUB(Pjll,LeafType)
+#define COPYTOLEAF_ODD(cLevel,Pjll,Copy) COPYTOLEAF_ODD_SUB(cLevel,Pjll,Copy)
+
+#else // JUDYL adds copying of values:
+
+#define COPYTOLEAF_EVEN(Pjll,LeafType)                  \
+        {                                               \
+            COPYTOLEAF_EVEN_SUB(Pjll,LeafType)          \
+            JU_COPYMEM(Pjv, PValue, pop1);              \
+        }
+
+#define COPYTOLEAF_ODD(cLevel,Pjll,Copy)                \
+        {                                               \
+            COPYTOLEAF_ODD_SUB( cLevel,Pjll,Copy)       \
+            JU_COPYMEM(Pjv, PValue, pop1);              \
+        }
+
+#endif
+
+// Set the JP type for an immediate index, where BaseJPType is JPIMMED_*_02:
+
+#define SETIMMTYPE(BaseJPType)  (PjpParent->jp_Type) = (BaseJPType) + pop1 - 2
+
+// Allocate and populate a Leaf1-N:
+//
+// Build MAKELEAF_EVEN() and MAKELEAF_ODD() using macros for common code.
+
+#define MAKELEAF_SUB1(AllocLeaf,ValueArea,LeafType)                     \
+        ALLOCLEAF(AllocLeaf);                                           \
+        JUDYLCODE(Pjv = ValueArea(Pjll, pop1))
+
+
+#define MAKELEAF_SUB2(cLevel,JPType)                                    \
+{                                                                       \
+        Word_t D_cdP0;                                                  \
+        assert(pop1 - 1 <= cJU_POP0MASK(cLevel));                       \
+        D_cdP0 = (*PIndex & cJU_DCDMASK(cLevel)) | (pop1 - 1);          \
+        JU_JPSETADT(PjpParent, (Word_t)PjllRaw, D_cdP0, JPType);        \
+}
+
+
+#define MAKELEAF_EVEN(cLevel,JPType,AllocLeaf,ValueArea,LeafType)       \
+        MAKELEAF_SUB1(AllocLeaf,ValueArea,LeafType);                    \
+        COPYTOLEAF_EVEN(Pjll, LeafType);                                \
+        MAKELEAF_SUB2(cLevel, JPType)
+
+#define MAKELEAF_ODD(cLevel,JPType,AllocLeaf,ValueArea,Copy)            \
+        MAKELEAF_SUB1(AllocLeaf,ValueArea,LeafType);                    \
+        COPYTOLEAF_ODD(cLevel, Pjll, Copy);                             \
+        MAKELEAF_SUB2(cLevel, JPType)
+
+// Ensure that the indexes to be stored in immediate indexes or a leaf are
+// sorted:
+//
+// This check is pure overhead, but required in order to protect the Judy array
+// against caller error, to avoid a later corruption or core dump from a
+// seemingly valid Judy array.  Do this check piecemeal at the leaf level while
+// the indexes are already in the cache.  Higher-level order-checking occurs
+// while building branches.
+//
+// Note:  Any sorting error in the expanse of a single immediate indexes JP or
+// a leaf => save no indexes in that expanse.
+
+#define CHECKLEAFORDER                                                  \
+        {                                                               \
+            for (offset = 1; offset < pop1; ++offset)                   \
+            {                                                           \
+                if (PIndex[offset - 1] >= PIndex[offset])               \
+                {                                                       \
+                    SETJPNULL_PARENT;                                   \
+                    *PPop1 = 0;                                         \
+                    JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_UNSORTED);      \
+                    return(FALSE);                                      \
+                }                                                       \
+            }                                                           \
+        }
+
+
+// ------ START OF CODE ------
+
+        assert( Level >= 1);
+        assert( Level <= cJU_ROOTSTATE);
+        assert((Level <  cJU_ROOTSTATE) || (pop1 > cJU_LEAFW_MAXPOP1));
+
+
+// CHECK FOR TOP LEVEL:
+//
+// Special case:  If at the top level (PjpParent is in the JPM), a top-level
+// branch must be created, even if its a BranchL with just one JP.  (The JPM
+// cannot point to a leaf because the leaf would have to be a lower-level,
+// higher-capacity leaf under a narrow pointer (otherwise a root-level leaf
+// would suffice), and the JPMs JP cant handle a narrow pointer because the
+// jp_DcdPopO field isnt big enough.)  Otherwise continue to check for a pop1
+// small enough to support immediate indexes or a leaf before giving up and
+// making a lower-level branch.
+
+        if (Level == cJU_ROOTSTATE)
+        {
+            levelsub = cJU_ROOTSTATE;
+            goto BuildBranch2;
+        }
+        assert(Level < cJU_ROOTSTATE);
+
+
+// SKIP JPIMMED_*_01:
+//
+// Immeds with pop1 == 1 should be handled in-line during branch construction.
+
+        assert(pop1 > 1);
+
+
+// BUILD JPIMMED_*_02+:
+//
+// The starting address of the indexes depends on Judy1 or JudyL; also, JudyL
+// includes a pointer to a values-only leaf.
+
+        if (pop1 <= immed_maxpop1[Level])      // note: always < root level.
+        {
+            JUDY1CODE(uint8_t * Pjll = (uint8_t *) (PjpParent->jp_1Index);)
+            JUDYLCODE(uint8_t * Pjll = (uint8_t *) (PjpParent->jp_LIndex);)
+
+            CHECKLEAFORDER;             // indexes to be stored are sorted.
+
+#ifdef JUDYL
+            if ((PjvRaw = j__udyLAllocJV(pop1, Pjpm)) == (Pjv_t) NULL)
+                NOMEM;
+            (PjpParent->jp_Addr) = (Word_t) PjvRaw;
+            Pjv = P_JV(PjvRaw);
+#endif
+
+            switch (Level)
+            {
+            case 1: COPYTOLEAF_EVEN(Pjll, uint8_t);
+                    SETIMMTYPE(cJU_JPIMMED_1_02);
+                    break;
+#if (defined(JUDY1) || defined(JU_64BIT))
+            case 2: COPYTOLEAF_EVEN(Pjll, uint16_t);
+                    SETIMMTYPE(cJU_JPIMMED_2_02);
+                    break;
+            case 3: COPYTOLEAF_ODD(3, Pjll, JU_COPY3_LONG_TO_PINDEX);
+                    SETIMMTYPE(cJU_JPIMMED_3_02);
+                    break;
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+            case 4: COPYTOLEAF_EVEN(Pjll, uint32_t);
+                    SETIMMTYPE(cJ1_JPIMMED_4_02);
+                    break;
+            case 5: COPYTOLEAF_ODD(5, Pjll, JU_COPY5_LONG_TO_PINDEX);
+                    SETIMMTYPE(cJ1_JPIMMED_5_02);
+                    break;
+            case 6: COPYTOLEAF_ODD(6, Pjll, JU_COPY6_LONG_TO_PINDEX);
+                    SETIMMTYPE(cJ1_JPIMMED_6_02);
+                    break;
+            case 7: COPYTOLEAF_ODD(7, Pjll, JU_COPY7_LONG_TO_PINDEX);
+                    SETIMMTYPE(cJ1_JPIMMED_7_02);
+                    break;
+#endif
+            default: assert(FALSE);     // should be impossible.
+            }
+
+            return(TRUE);               // note: no children => no *PPop1 mods.
+
+        } // JPIMMED_*_02+
+
+
+// BUILD JPLEAF*:
+//
+// This code is a little tricky.  The method is:  For each level starting at
+// the present Level down through levelsub = 1, and then as a special case for
+// LeafB1 and FullPop (which are also at levelsub = 1 but have different
+// capacity, see later), check if pop1 fits in a leaf (using leaf_maxpop1[])
+// at that level.  If so, except for Level == levelsub, check if all of the
+// current indexes to be stored are in the same (narrow) subexpanse, that is,
+// the digits from Level to levelsub + 1, inclusive, are identical between the
+// first and last index in the (sorted) list (in PIndex).  If this condition is
+// satisfied at any level, build a leaf at that level (under a narrow pointer
+// if Level > levelsub).
+//
+// Note:  Doing the search in this order results in storing the indexes in
+// "least compressed form."
+
+        for (levelsub = Level; levelsub >= 1; --levelsub)
+        {
+            Pjll_t PjllRaw;
+            Pjll_t Pjll;
+
+// Check if pop1 is too large to fit in a leaf at levelsub; if so, try the next
+// lower level:
+
+            if (pop1 > leaf_maxpop1[levelsub]) continue;
+
+// If pop1 fits in a leaf at levelsub, but levelsub is lower than Level, must
+// also check whether all the indexes in the expanse to store can in fact be
+// placed under a narrow pointer; if not, a leaf cannot be used, at this or any
+// lower level (levelsub):
+
+            if ((levelsub < Level) && (! SAMESUBEXP(levelsub)))
+                goto BuildBranch;       // cant use a narrow, need a branch.
+
+// Ensure valid pop1 and all indexes are in fact common through Level:
+
+            assert(pop1 <= cJU_POP0MASK(Level) + 1);
+            assert(! ((PIndex[0] ^ PIndex[pop1 - 1]) & cJU_DCDMASK(Level)));
+
+            CHECKLEAFORDER;             // indexes to be stored are sorted.
+
+// Build correct type of leaf:
+//
+// Note:  The jp_DcdPopO and jp_Type assignments in MAKELEAF_* happen correctly
+// for the levelsub (not Level) of the new leaf, even if its under a narrow
+// pointer.
+
+            switch (levelsub)
+            {
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+            case 1: MAKELEAF_EVEN(1, cJU_JPLEAF1, j__udyAllocJLL1,
+                                  JL_LEAF1VALUEAREA, uint8_t);
+                    break;
+#endif
+            case 2: MAKELEAF_EVEN(2, cJU_JPLEAF2, j__udyAllocJLL2,
+                                  JL_LEAF2VALUEAREA, uint16_t);
+                    break;
+            case 3: MAKELEAF_ODD( 3, cJU_JPLEAF3, j__udyAllocJLL3,
+                                  JL_LEAF3VALUEAREA, JU_COPY3_LONG_TO_PINDEX);
+                    break;
+#ifdef JU_64BIT
+            case 4: MAKELEAF_EVEN(4, cJU_JPLEAF4, j__udyAllocJLL4,
+                                  JL_LEAF4VALUEAREA, uint32_t);
+                    break;
+            case 5: MAKELEAF_ODD( 5, cJU_JPLEAF5, j__udyAllocJLL5,
+                                  JL_LEAF5VALUEAREA, JU_COPY5_LONG_TO_PINDEX);
+                    break;
+            case 6: MAKELEAF_ODD( 6, cJU_JPLEAF6, j__udyAllocJLL6,
+                                  JL_LEAF6VALUEAREA, JU_COPY6_LONG_TO_PINDEX);
+                    break;
+            case 7: MAKELEAF_ODD( 7, cJU_JPLEAF7, j__udyAllocJLL7,
+                                  JL_LEAF7VALUEAREA, JU_COPY7_LONG_TO_PINDEX);
+                    break;
+#endif
+            default: assert(FALSE);     // should be impossible.
+            }
+
+            return(TRUE);               // note: no children => no *PPop1 mods.
+
+        } // JPLEAF*
+
+
+// BUILD JPLEAF_B1 OR JPFULLPOPU1:
+//
+// See above about JPLEAF*.  If pop1 doesnt fit in any level of linear leaf,
+// it might still fit in a LeafB1 or FullPop, perhaps under a narrow pointer.
+
+        if ((Level == 1) || SAMESUBEXP(1))      // same until last digit.
+        {
+            Pjlb_t PjlbRaw;                     // for bitmap leaf.
+            Pjlb_t Pjlb;
+
+            assert(pop1 <= cJU_JPFULLPOPU1_POP0 + 1);
+            CHECKLEAFORDER;             // indexes to be stored are sorted.
+
+#ifdef JUDY1
+
+// JPFULLPOPU1:
+
+            if (pop1 == cJU_JPFULLPOPU1_POP0 + 1)
+            {
+                Word_t  Addr  = PjpParent->jp_Addr;
+                Word_t  DcdP0 = (*PIndex & cJU_DCDMASK(1))
+                                        | cJU_JPFULLPOPU1_POP0;
+                JU_JPSETADT(PjpParent, Addr, DcdP0, cJ1_JPFULLPOPU1);
+
+                return(TRUE);
+            }
+#endif
+
+// JPLEAF_B1:
+
+            if ((PjlbRaw = j__udyAllocJLB1(Pjpm)) == (Pjlb_t) NULL)
+                NOMEM;
+            Pjlb = P_JLB(PjlbRaw);
+
+            for (offset = 0; offset < pop1; ++offset)
+                JU_BITMAPSETL(Pjlb, PIndex[offset]);
+
+            retval = TRUE;              // default.
+
+#ifdef JUDYL
+
+// Build subexpanse values-only leaves (LeafVs) under LeafB1:
+
+            for (offset = 0; offset < cJU_NUMSUBEXPL; ++offset)
+            {
+                if (! (pop1sub = j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, offset))))
+                    continue;           // skip empty subexpanse.
+
+// Allocate one LeafV = JP subarray; if out of memory, clear bitmaps for higher
+// subexpanses and adjust *PPop1:
+
+                if ((PjvRaw = j__udyLAllocJV(pop1sub, Pjpm))
+                 == (Pjv_t) NULL)
+                {
+                    for (/* null */; offset < cJU_NUMSUBEXPL; ++offset)
+                    {
+                        *PPop1 -= j__udyCountBitsL(JU_JLB_BITMAP(Pjlb, offset));
+                        JU_JLB_BITMAP(Pjlb, offset) = 0;
+                    }
+
+                    retval = FALSE;
+                    break;
+                }
+
+// Populate values-only leaf and save the pointer to it:
+
+                Pjv = P_JV(PjvRaw);
+                JU_COPYMEM(Pjv, PValue, pop1sub);
+                JL_JLB_PVALUE(Pjlb, offset) = PjvRaw;   // first-tier pointer.
+                PValue += pop1sub;
+
+            } // for each subexpanse
+
+#endif // JUDYL
+
+// Attach new LeafB1 to parent JP; note use of *PPop1 possibly < pop1:
+
+            JU_JPSETADT(PjpParent, (Word_t) PjlbRaw, 
+                    (*PIndex & cJU_DCDMASK(1)) | (*PPop1 - 1), cJU_JPLEAF_B1);
+
+            return(retval);
+
+        } // JPLEAF_B1 or JPFULLPOPU1
+
+
+// BUILD JPBRANCH_U*:
+//
+// Arriving at BuildBranch means Level < top level but the pop1 is too large
+// for immediate indexes or a leaf, even under a narrow pointer, including a
+// LeafB1 or FullPop at level 1.  This implies SAMESUBEXP(1) == FALSE, that is,
+// the indexes to be stored "branch" at level 2 or higher.
+
+BuildBranch:    // come here directly if a leaf wont work.
+
+        assert(Level >= 2);
+        assert(Level < cJU_ROOTSTATE);
+        assert(! SAMESUBEXP(1));                // sanity check, see above.
+
+// Determine the appropriate level for a new branch node; see if a narrow
+// pointer can be used:
+//
+// This can be confusing.  The branch is required at the lowest level L where
+// the indexes to store are not in the same subexpanse at level L-1.  Work down
+// from Level to tree level 3, which is 1 above the lowest tree level = 2 at
+// which a branch can be used.  Theres no need to check SAMESUBEXP at level 2
+// because its known to be false at level 2-1 = 1.
+//
+// Note:  Unlike for a leaf node, a narrow pointer is always used for a branch
+// if possible, that is, maximum compression is always used, except at the top
+// level of the tree, where a JPM cannot support a narrow pointer, meaning a
+// top BranchL can have a single JP (fanout = 1); but that case jumps directly
+// to BuildBranch2.
+//
+// Note:  For 32-bit systems the only usable values for a narrow pointer are
+// Level = 3 and levelsub = 2; 64-bit systems have many more choices; but
+// hopefully this for-loop is fast enough even on a 32-bit system.
+//
+// TBD:  If not fast enough, #ifdef JU_64BIT and handle the 32-bit case faster.
+
+        for (levelsub = Level; levelsub >= 3; --levelsub)  // see above.
+            if (! SAMESUBEXP(levelsub - 1))     // at limit of narrow pointer.
+                break;                          // put branch at levelsub.
+
+BuildBranch2:   // come here directly for Level = levelsub = cJU_ROOTSTATE.
+
+        assert(levelsub >= 2);
+        assert(levelsub <= Level);
+
+// Initially build a BranchU:
+//
+// Always start with a BranchU because the number of populated subexpanses is
+// not yet known.  Use digitmask, digitshifted, and digitshincr to avoid
+// expensive variable shifts within JU_DIGITATSTATE within the loop.
+//
+// TBD:  The use of digitmask, etc. results in more increment operations per
+// loop, is there an even faster way?
+//
+// TBD:  Would it pay to pre-count the populated JPs (subexpanses) and
+// pre-compress the branch, that is, build a BranchL or BranchB immediately,
+// also taking account of opportunistic uncompression rules?  Probably not
+// because at high levels of the tree there might be huge numbers of indexes
+// (hence cache lines) to scan in the PIndex array to determine the fanout
+// (number of JPs) needed.
+
+        if ((PjbuRaw = j__udyAllocJBU(Pjpm)) == (Pjbu_t) NULL) NOMEM;
+        Pjbu = P_JBU(PjbuRaw);
+
+        JPtype_null       = cJU_JPNULL1 + levelsub - 2;  // in new BranchU.
+        JU_JPSETADT(&JPnull, 0, 0, JPtype_null);
+
+        Pjp               = Pjbu->jbu_jp;           // for convenience in loop.
+        numJPs            = 0;                      // non-null in the BranchU.
+        digitmask         = cJU_MASKATSTATE(levelsub);   // see above.
+        digitshincr       = 1UL << (cJU_BITSPERBYTE * (levelsub - 1));
+        retval            = TRUE;
+
+// Scan and populate JPs (subexpanses):
+//
+// Look for all indexes matching each digit in the BranchU (at the correct
+// levelsub), and meanwhile notice any sorting error.  Increment PIndex (and
+// PValue) and reduce pop1 for each subexpanse handled successfully.
+
+        for (digit = digitshifted = 0;
+             digit < cJU_BRANCHUNUMJPS;
+             ++digit, digitshifted += digitshincr, ++Pjp)
+        {
+            DBGCODE(Word_t pop1subprev;)
+            assert(pop1 != 0);          // end of indexes is handled elsewhere.
+
+// Count indexes in digits subexpanse:
+
+            for (pop1sub = 0; pop1sub < pop1; ++pop1sub)
+                if (digitshifted != (PIndex[pop1sub] & digitmask)) break;
+
+// Empty subexpanse (typical, performance path) or sorting error (rare):
+
+            if (pop1sub == 0)
+            {
+                if (digitshifted < (PIndex[0] & digitmask))
+                { SETJPNULL(Pjp); continue; }           // empty subexpanse.
+
+                assert(pop1 < *PPop1);  // did save >= 1 index and decr pop1.
+                JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_UNSORTED);
+                goto AbandonBranch;
+            }
+
+// Non-empty subexpanse:
+//
+// First shortcut by handling pop1sub == 1 (JPIMMED_*_01) inline locally.
+
+            if (pop1sub == 1)                   // note: can be at root level.
+            {
+                Word_t Addr = 0;
+      JUDYLCODE(Addr    = (Word_t) (*PValue++);)
+                JU_JPSETADT(Pjp, Addr, *PIndex, cJU_JPIMMED_1_01 + levelsub -2);
+
+                ++numJPs;
+
+                if (--pop1) { ++PIndex; continue; }  // more indexes to store.
+
+                ++digit; ++Pjp;                 // skip JP just saved.
+                goto ClearBranch;               // save time.
+            }
+
+// Recurse to populate one digits (subexpanses) JP; if successful, skip
+// indexes (and values) just stored (performance path), except when expanse is
+// completely stored:
+
+            DBGCODE(pop1subprev = pop1sub;)
+
+            if (j__udyInsArray(Pjp, levelsub - 1, &pop1sub, (PWord_t) PIndex,
+#ifdef JUDYL
+                               (Pjv_t) PValue,
+#endif
+                               Pjpm))
+            {                                   // complete success.
+                ++numJPs;
+                assert(pop1subprev == pop1sub);
+                assert(pop1 >= pop1sub);
+
+                if ((pop1 -= pop1sub) != 0)     // more indexes to store:
+                {
+                    PIndex += pop1sub;          // skip indexes just stored.
+          JUDYLCODE(PValue += pop1sub;)
+                    continue;
+                }
+                // else leave PIndex in BranchUs expanse.
+
+// No more indexes to store in BranchUs expanse:
+
+                ++digit; ++Pjp;                 // skip JP just saved.
+                goto ClearBranch;               // save time.
+            }
+
+// Handle any error at a lower level of recursion:
+//
+// In case of partial success, pop1sub != 0, but it was reduced from the value
+// passed to j__udyInsArray(); skip this JP later during ClearBranch.
+
+            assert(pop1subprev > pop1sub);      // check j__udyInsArray().
+            assert(pop1        > pop1sub);      // check j__udyInsArray().
+
+            if (pop1sub)                        // partial success.
+            { ++digit; ++Pjp; ++numJPs; }       // skip JP just saved.
+
+            pop1 -= pop1sub;                    // deduct saved indexes if any.
+
+// Same-level sorting error, or any lower-level error; abandon the rest of the
+// branch:
+//
+// Arrive here with pop1 = remaining unsaved indexes (always non-zero).  Adjust
+// the *PPop1 value to record and return, modify retval, and use ClearBranch to
+// finish up.
+
+AbandonBranch:
+            assert(pop1 != 0);                  // more to store, see above.
+            assert(pop1 <= *PPop1);             // sanity check.
+
+            *PPop1 -= pop1;                     // deduct unsaved indexes.
+            pop1    = 0;                        // to avoid error later.
+            retval  = FALSE;
+
+// Error (rare), or end of indexes while traversing new BranchU (performance
+// path); either way, mark the remaining JPs, if any, in the BranchU as nulls
+// and exit the loop:
+//
+// Arrive here with digit and Pjp set to the first JP to set to null.
+
+ClearBranch:
+            for (/* null */; digit < cJU_BRANCHUNUMJPS; ++digit, ++Pjp)
+                SETJPNULL(Pjp);
+            break;                              // saves one more compare.
+
+        } // for each digit
+
+
+// FINISH JPBRANCH_U*:
+//
+// Arrive here with a BranchU built under Pjbu, numJPs set, and either:  retval
+// == TRUE and *PPop1 unmodified, or else retval == FALSE, *PPop1 set to the
+// actual number of indexes saved (possibly 0 for complete failure at a lower
+// level upon the first call of j__udyInsArray()), and the Judy error set in
+// Pjpm.  Either way, PIndex points to an index within the expanse just
+// handled.
+
+        Pjbany = (Word_t) PjbuRaw;              // default = use this BranchU.
+        JPtype = branchU_JPtype[levelsub];
+
+// Check for complete failure above:
+
+        assert((! retval) || *PPop1);           // sanity check.
+
+        if ((! retval) && (*PPop1 == 0))        // nothing stored, full failure.
+        {
+            j__udyFreeJBU(PjbuRaw, Pjpm);
+            SETJPNULL_PARENT;
+            return(FALSE);
+        }
+
+// Complete or partial success so far; watch for sorting error after the
+// maximum digit (255) in the BranchU, which is indicated by having more
+// indexes to store in the BranchUs expanse:
+//
+// For example, if an index to store has a digit of 255 at levelsub, followed
+// by an index with a digit of 254, the for-loop above runs out of digits
+// without reducing pop1 to 0.
+
+        if (pop1 != 0)
+        {
+            JU_SET_ERRNO_NONNULL(Pjpm, JU_ERRNO_UNSORTED);
+            *PPop1 -= pop1;             // deduct unsaved indexes.
+            retval  = FALSE;
+        }
+        assert(*PPop1 != 0);            // branch (still) cannot be empty.
+
+
+// OPTIONALLY COMPRESS JPBRANCH_U*:
+//
+// See if the BranchU should be compressed to a BranchL or BranchB; if so, do
+// that and free the BranchU; otherwise just use the existing BranchU.  Follow
+// the same rules as in JudyIns.c (version 4.95):  Only check local population
+// (cJU_OPP_UNCOMP_POP0) for BranchL, and only check global memory efficiency
+// (JU_OPP_UNCOMPRESS) for BranchB.  TBD:  Have the rules changed?
+//
+// Note:  Because of differing order of operations, the latter compression
+// might not result in the same set of branch nodes as a series of sequential
+// insertions.
+//
+// Note:  Allocating a BranchU only to sometimes convert it to a BranchL or
+// BranchB is unfortunate, but attempting to work with a temporary BranchU on
+// the stack and then allocate and keep it as a BranchU in many cases is worse
+// in terms of error handling.
+
+
+// COMPRESS JPBRANCH_U* TO JPBRANCH_L*:
+
+        if (numJPs <= cJU_BRANCHLMAXJPS)        // JPs fit in a BranchL.
+        {
+            Pjbl_t PjblRaw = (Pjbl_t) NULL;     // new BranchL; init for cc.
+            Pjbl_t Pjbl;
+
+            if ((*PPop1 > JU_BRANCHL_MAX_POP)   // pop too high.
+             || ((PjblRaw = j__udyAllocJBL(Pjpm)) == (Pjbl_t) NULL))
+            {                                   // cant alloc BranchL.
+                goto SetParent;                 // just keep BranchU.
+            }
+
+            Pjbl = P_JBL(PjblRaw);
+
+// Copy BranchU JPs to BranchL:
+
+            (Pjbl->jbl_NumJPs) = numJPs;
+            offset = 0;
+
+            for (digit = 0; digit < cJU_BRANCHUNUMJPS; ++digit)
+            {
+                if ((((Pjbu->jbu_jp) + digit)->jp_Type) == JPtype_null)
+                    continue;
+
+                (Pjbl->jbl_Expanse[offset  ]) = digit;
+                (Pjbl->jbl_jp     [offset++]) = Pjbu->jbu_jp[digit];
+            }
+            assert(offset == numJPs);           // found same number.
+
+// Free the BranchU and prepare to use the new BranchL instead:
+
+            j__udyFreeJBU(PjbuRaw, Pjpm);
+
+            Pjbany = (Word_t) PjblRaw;
+            JPtype = branchL_JPtype[levelsub];
+
+        } // compress to BranchL
+
+
+// COMPRESS JPBRANCH_U* TO JPBRANCH_B*:
+//
+// If unable to allocate the BranchB or any JP subarray, free all related
+// memory and just keep the BranchU.
+//
+// Note:  This use of JU_OPP_UNCOMPRESS is a bit conservative because the
+// BranchU is already allocated while the (presumably smaller) BranchB is not,
+// the opposite of how its used in single-insert code.
+
+        else
+        {
+            Pjbb_t PjbbRaw = (Pjbb_t) NULL;     // new BranchB; init for cc.
+            Pjbb_t Pjbb;
+            Pjp_t  Pjp2;                        // in BranchU.
+
+            if ((*PPop1 > JU_BRANCHB_MAX_POP)   // pop too high.
+             || ((PjbbRaw = j__udyAllocJBB(Pjpm)) == (Pjbb_t) NULL))
+            {                                   // cant alloc BranchB.
+                goto SetParent;                 // just keep BranchU.
+            }
+
+            Pjbb = P_JBB(PjbbRaw);
+
+// Set bits in bitmap for populated subexpanses:
+
+            Pjp2 = Pjbu->jbu_jp;
+
+            for (digit = 0; digit < cJU_BRANCHUNUMJPS; ++digit)
+                if ((((Pjbu->jbu_jp) + digit)->jp_Type) != JPtype_null)
+                    JU_BITMAPSETB(Pjbb, digit);
+
+// Copy non-null JPs to BranchB JP subarrays:
+
+            for (offset = 0; offset < cJU_NUMSUBEXPB; ++offset)
+            {
+                Pjp_t PjparrayRaw;
+                Pjp_t Pjparray;
+
+                if (! (numJPs = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, offset))))
+                    continue;                   // skip empty subexpanse.
+
+// If unable to allocate a JP subarray, free all BranchB memory so far and
+// continue to use the BranchU:
+
+                if ((PjparrayRaw = j__udyAllocJBBJP(numJPs, Pjpm))
+                    == (Pjp_t) NULL)
+                {
+                    while (offset-- > 0)
+                    {
+                        if (JU_JBB_PJP(Pjbb, offset) == (Pjp_t) NULL) continue;
+
+                        j__udyFreeJBBJP(JU_JBB_PJP(Pjbb, offset),
+                                 j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, offset)),
+                                        Pjpm);
+                    }
+                    j__udyFreeJBB(PjbbRaw, Pjpm);
+                    goto SetParent;             // keep BranchU.
+                }
+
+// Set one JP subarray pointer and copy the subexpanses JPs to the subarray:
+//
+// Scan the BranchU for non-null JPs until numJPs JPs are copied.
+
+                JU_JBB_PJP(Pjbb, offset) = PjparrayRaw;
+                Pjparray = P_JP(PjparrayRaw);
+
+                while (numJPs-- > 0)
+                {
+                    while ((Pjp2->jp_Type) == JPtype_null)
+                    {
+                        ++Pjp2;
+                        assert(Pjp2 < (Pjbu->jbu_jp) + cJU_BRANCHUNUMJPS);
+                    }
+                    *Pjparray++ = *Pjp2++;
+                }
+            } // for each subexpanse
+
+// Free the BranchU and prepare to use the new BranchB instead:
+
+            j__udyFreeJBU(PjbuRaw, Pjpm);
+
+            Pjbany = (Word_t) PjbbRaw;
+            JPtype = branchB_JPtype[levelsub];
+
+        } // compress to BranchB
+
+
+// COMPLETE OR PARTIAL SUCCESS:
+//
+// Attach new branch (under Pjp, with JPtype) to parent JP; note use of *PPop1,
+// possibly reduced due to partial failure.
+
+SetParent:
+        (PjpParent->jp_Addr) = Pjbany;
+        (PjpParent->jp_Type) = JPtype;
+
+        if (Level < cJU_ROOTSTATE)              // PjpParent not in JPM:
+        {
+            Word_t DcdP0 = (*PIndex & cJU_DCDMASK(levelsub)) | (*PPop1 - 1);
+
+            JU_JPSETADT(PjpParent ,Pjbany, DcdP0, JPtype);
+        }
+
+        return(retval);
+
+} // j__udyInsArray()
diff --git a/libs/klib/judy/JudyInsertBranch.c b/libs/klib/judy/JudyInsertBranch.c
new file mode 100644
index 0000000..307285c
--- /dev/null
+++ b/libs/klib/judy/JudyInsertBranch.c
@@ -0,0 +1,133 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// BranchL insertion functions for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error:  One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+extern int j__udyCreateBranchL(Pjp_t, Pjp_t, uint8_t *, Word_t, Pvoid_t);
+
+
+// ****************************************************************************
+// __ J U D Y   I N S E R T   B R A N C H
+//
+// Insert 2-element BranchL in between Pjp and Pjp->jp_Addr.
+//
+// Return -1 if out of memory, otherwise return 1.
+
+FUNCTION int j__udyInsertBranch(
+	Pjp_t	Pjp,		// JP containing narrow pointer.
+	Word_t	Index,		// outlier to Pjp.
+	Word_t	BranchLevel,	// of what JP points to, mapped from JP type.
+	Pjpm_t	Pjpm)		// for global accounting.
+{
+	jp_t	JP2 [2];
+	jp_t	JP;
+	Pjp_t	PjpNull;
+	Word_t	XorExp;
+	Word_t	Inew, Iold;
+	Word_t  DCDMask;	// initially for original BranchLevel.
+	int	Ret;
+	uint8_t	Exp2[2];
+	uint8_t	DecodeByteN, DecodeByteO;
+
+//	Get the current mask for the DCD digits:
+
+	DCDMask = cJU_DCDMASK(BranchLevel);
+
+//	Obtain Dcd bits that differ between Index and JP, shifted so the
+//	digit for BranchLevel is the LSB:
+
+	XorExp = ((Index ^ JU_JPDCDPOP0(Pjp)) & (cJU_ALLONES >> cJU_BITSPERBYTE))
+	       >> (BranchLevel * cJU_BITSPERBYTE);
+	assert(XorExp);		// Index must be an outlier.
+
+//	Count levels between object under narrow pointer and the level at which
+//	the outlier diverges from it, which is always at least initial
+//	BranchLevel + 1, to end up with the level (JP type) at which to insert
+//	the new intervening BranchL:
+
+	do { ++BranchLevel; } while ((XorExp >>= cJU_BITSPERBYTE));
+	assert((BranchLevel > 1) && (BranchLevel < cJU_ROOTSTATE));
+
+//	Get the MSB (highest digit) that differs between the old expanse and
+//	the new Index to insert:
+
+	DecodeByteO = JU_DIGITATSTATE(JU_JPDCDPOP0(Pjp), BranchLevel);
+	DecodeByteN = JU_DIGITATSTATE(Index,	         BranchLevel);
+
+	assert(DecodeByteO != DecodeByteN);
+
+//	Determine sorted order for old expanse and new Index digits:
+
+	if (DecodeByteN > DecodeByteO)	{ Iold = 0; Inew = 1; }
+	else				{ Iold = 1; Inew = 0; }
+
+//	Copy old JP into staging area for new Branch
+	JP2 [Iold] = *Pjp;
+	Exp2[Iold] = DecodeByteO;
+	Exp2[Inew] = DecodeByteN;
+
+//	Create a 2 Expanse Linear branch
+//
+//	Note: Pjp->jp_Addr is set by j__udyCreateBranchL()
+
+	Ret = j__udyCreateBranchL(Pjp, JP2, Exp2, 2, Pjpm);
+	if (Ret == -1) return(-1);
+
+//	Get Pjp to the NULL of where to do insert
+	PjpNull	= ((P_JBL(Pjp->jp_Addr))->jbl_jp) + Inew;
+
+//	Convert to a cJU_JPIMMED_*_01 at the correct level:
+//	Build JP and set type below to: cJU_JPIMMED_X_01
+        JU_JPSETADT(PjpNull, 0, Index, cJU_JPIMMED_1_01 - 2 + BranchLevel);
+
+//	Return pointer to Value area in cJU_JPIMMED_X_01
+	JUDYLCODE(Pjpm->jpm_PValue = (Pjv_t) PjpNull;)
+
+//	The old JP now points to a BranchL that is at higher level.  Therefore
+//	it contains excess DCD bits (in the least significant position) that
+//	must be removed (zeroed); that is, they become part of the Pop0
+//	subfield.  Note that the remaining (lower) bytes in the Pop0 field do
+//	not change.
+//
+//	Take from the old DCDMask, which went "down" to a lower BranchLevel,
+//	and zero any high bits that are still in the mask at the new, higher
+//	BranchLevel; then use this mask to zero the bits in jp_DcdPopO:
+
+//	Set old JP to a BranchL at correct level
+
+	Pjp->jp_Type = cJU_JPBRANCH_L2 - 2 + BranchLevel;
+	DCDMask		^= cJU_DCDMASK(BranchLevel);
+	DCDMask		 = ~DCDMask & JU_JPDCDPOP0(Pjp);
+        JP = *Pjp;
+        JU_JPSETADT(Pjp, JP.jp_Addr, DCDMask, JP.jp_Type);
+
+	return(1);
+
+} // j__udyInsertBranch()
diff --git a/libs/klib/judy/JudyL.h b/libs/klib/judy/JudyL.h
new file mode 100644
index 0000000..13c7d66
--- /dev/null
+++ b/libs/klib/judy/JudyL.h
@@ -0,0 +1,503 @@
+#ifndef _JUDYL_INCLUDED
+#define _JUDYL_INCLUDED
+// _________________
+//
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// ****************************************************************************
+//          JUDYL -- SMALL/LARGE AND/OR CLUSTERED/SPARSE ARRAYS
+//
+//                                    -by-
+//
+//                             Douglas L. Baskins
+//                             doug at sourcejudy.com
+//
+// Judy arrays are designed to be used instead of arrays.  The performance
+// suggests the reason why Judy arrays are thought of as arrays, instead of
+// trees.  They are remarkably memory efficient at all populations.
+// Implemented as a hybrid digital tree (but really a state machine, see
+// below), Judy arrays feature fast insert/retrievals, fast near neighbor
+// searching, and contain a population tree for extremely fast ordinal related
+// retrievals.
+//
+// CONVENTIONS:
+//
+// - The comments here refer to 32-bit [64-bit] systems.
+//
+// - BranchL, LeafL refer to linear branches and leaves (small populations),
+//   except LeafL does not actually appear as such; rather, Leaf1..3 [Leaf1..7]
+//   is used to represent leaf Index sizes, and LeafW refers to a Leaf with
+//   full (Long) word Indexes, which is also a type of linear leaf.  Note that
+//   root-level LeafW (Leaf4 [Leaf8]) leaves are called LEAFW.
+//
+// - BranchB, LeafB1 refer to bitmap branches and leaves (intermediate
+//   populations).
+//
+// - BranchU refers to uncompressed branches.  An uncompressed branch has 256
+//   JPs, some of which could be null.  Note:  All leaves are compressed (and
+//   sorted), or else an expanse is full (FullPopu), so there is no LeafU
+//   equivalent to BranchU.
+//
+// - "Popu" is short for "Population".
+// - "Pop1" refers to actual population (base 1).
+// - "Pop0" refers to Pop1 - 1 (base 0), the way populations are stored in data
+//   structures.
+//
+// - Branches and Leaves are both named by the number of bytes in their Pop0
+//   field.  In the case of Leaves, the same number applies to the Index sizes.
+//
+// - The representation of many numbers as hex is a relatively safe and
+//   portable way to get desired bitpatterns as unsigned longs.
+//
+// - Some preprocessors cant handle single apostrophe characters within
+//   #ifndef code, so here, delete all instead.
+
+
+#include "JudyPrivate.h"        // includes Judy.h in turn.
+#include "JudyPrivateBranch.h"  // support for branches.
+
+
+// ****************************************************************************
+// JUDYL ROOT POINTER (JRP) AND JUDYL POINTER (JP) TYPE FIELDS
+// ****************************************************************************
+
+typedef enum            // uint8_t -- but C does not support this type of enum.
+{
+
+// JP NULL TYPES:
+//
+// There is a series of cJL_JPNULL* Types because each one pre-records a
+// different Index Size for when the first Index is inserted in the previously
+// null JP.  They must start >= 8 (three bits).
+//
+// Note:  These Types must be in sequential order for doing relative
+// calculations between them.
+
+        cJL_JPNULL1 = 1,
+                                // Index Size 1[1] byte  when 1 Index inserted.
+        cJL_JPNULL2,            // Index Size 2[2] bytes when 1 Index inserted.
+        cJL_JPNULL3,            // Index Size 3[3] bytes when 1 Index inserted.
+
+#ifndef JU_64BIT
+#define cJL_JPNULLMAX cJL_JPNULL3
+#else
+        cJL_JPNULL4,            // Index Size 4[4] bytes when 1 Index inserted.
+        cJL_JPNULL5,            // Index Size 5[5] bytes when 1 Index inserted.
+        cJL_JPNULL6,            // Index Size 6[6] bytes when 1 Index inserted.
+        cJL_JPNULL7,            // Index Size 7[7] bytes when 1 Index inserted.
+#define cJL_JPNULLMAX cJL_JPNULL7
+#endif
+
+
+// JP BRANCH TYPES:
+//
+// Note:  There are no state-1 branches; only leaves reside at state 1.
+
+// Linear branches:
+//
+// Note:  These Types must be in sequential order for doing relative
+// calculations between them.
+
+        cJL_JPBRANCH_L2,        // 2[2] bytes Pop0, 1[5] bytes Dcd.
+        cJL_JPBRANCH_L3,        // 3[3] bytes Pop0, 0[4] bytes Dcd.
+
+#ifdef JU_64BIT
+        cJL_JPBRANCH_L4,        //  [4] bytes Pop0,  [3] bytes Dcd.
+        cJL_JPBRANCH_L5,        //  [5] bytes Pop0,  [2] bytes Dcd.
+        cJL_JPBRANCH_L6,        //  [6] bytes Pop0,  [1] byte  Dcd.
+        cJL_JPBRANCH_L7,        //  [7] bytes Pop0,  [0] bytes Dcd.
+#endif
+
+        cJL_JPBRANCH_L,         // note:  DcdPopO field not used.
+
+// Bitmap branches:
+//
+// Note:  These Types must be in sequential order for doing relative
+// calculations between them.
+
+        cJL_JPBRANCH_B2,        // 2[2] bytes Pop0, 1[5] bytes Dcd.
+        cJL_JPBRANCH_B3,        // 3[3] bytes Pop0, 0[4] bytes Dcd.
+
+#ifdef JU_64BIT
+        cJL_JPBRANCH_B4,        //  [4] bytes Pop0,  [3] bytes Dcd.
+        cJL_JPBRANCH_B5,        //  [5] bytes Pop0,  [2] bytes Dcd.
+        cJL_JPBRANCH_B6,        //  [6] bytes Pop0,  [1] byte  Dcd.
+        cJL_JPBRANCH_B7,        //  [7] bytes Pop0,  [0] bytes Dcd.
+#endif
+
+        cJL_JPBRANCH_B,         // note:  DcdPopO field not used.
+
+// Uncompressed branches:
+//
+// Note:  These Types must be in sequential order for doing relative
+// calculations between them.
+
+        cJL_JPBRANCH_U2,        // 2[2] bytes Pop0, 1[5] bytes Dcd.
+        cJL_JPBRANCH_U3,        // 3[3] bytes Pop0, 0[4] bytes Dcd.
+
+#ifdef JU_64BIT
+        cJL_JPBRANCH_U4,        //  [4] bytes Pop0,  [3] bytes Dcd.
+        cJL_JPBRANCH_U5,        //  [5] bytes Pop0,  [2] bytes Dcd.
+        cJL_JPBRANCH_U6,        //  [6] bytes Pop0,  [1] byte  Dcd.
+        cJL_JPBRANCH_U7,        //  [7] bytes Pop0,  [0] bytes Dcd.
+#endif
+
+        cJL_JPBRANCH_U,         // note:  DcdPopO field not used.
+
+
+// JP LEAF TYPES:
+
+// Linear leaves:
+//
+// Note:  These Types must be in sequential order for doing relative
+// calculations between them.
+//
+// Note:  There is no full-word (4-byte [8-byte]) Index leaf under a JP because
+// non-root-state leaves only occur under branches that decode at least one
+// byte.  Full-word, root-state leaves are under a JRP, not a JP.  However, in
+// the code a "fake" JP can be created temporarily above a root-state leaf.
+
+        cJL_JPLEAF1,            // 1[1] byte  Pop0, 2    bytes Dcd.
+        cJL_JPLEAF2,            // 2[2] bytes Pop0, 1[5] bytes Dcd.
+        cJL_JPLEAF3,            // 3[3] bytes Pop0, 0[4] bytes Dcd.
+
+#ifdef JU_64BIT
+        cJL_JPLEAF4,            //  [4] bytes Pop0,  [3] bytes Dcd.
+        cJL_JPLEAF5,            //  [5] bytes Pop0,  [2] bytes Dcd.
+        cJL_JPLEAF6,            //  [6] bytes Pop0,  [1] byte  Dcd.
+        cJL_JPLEAF7,            //  [7] bytes Pop0,  [0] bytes Dcd.
+#endif
+
+// Bitmap leaf; Index Size == 1:
+//
+// Note:  These are currently only supported at state 1.  At other states the
+// bitmap would grow from 256 to 256^2, 256^3, ... bits, which would not be
+// efficient..
+
+        cJL_JPLEAF_B1,          // 1[1] byte Pop0, 2[6] bytes Dcd.
+
+// Full population; Index Size == 1 virtual leaf:
+//
+// Note:  JudyL has no cJL_JPFULLPOPU1 equivalent to cJ1_JPFULLPOPU1, because
+// in the JudyL case this could result in a values-only leaf of up to 256 words
+// (value areas) that would be slow to insert/delete.
+
+
+// JP IMMEDIATES; leaves (Indexes) stored inside a JP:
+//
+// The second numeric suffix is the Pop1 for each type.  As the Index Size
+// increases, the maximum possible population decreases.
+//
+// Note:  These Types must be in sequential order in each group (Index Size),
+// and the groups in correct order too, for doing relative calculations between
+// them.  For example, since these Types enumerate the Pop1 values (unlike
+// other JP Types where there is a Pop0 value in the JP), the maximum Pop1 for
+// each Index Size is computable.
+//
+// All enums equal or above this point are cJL_JPIMMEDs.
+
+        cJL_JPIMMED_1_01,       // Index Size = 1, Pop1 = 1.
+        cJL_JPIMMED_2_01,       // Index Size = 2, Pop1 = 1.
+        cJL_JPIMMED_3_01,       // Index Size = 3, Pop1 = 1.
+
+#ifdef JU_64BIT
+        cJL_JPIMMED_4_01,       // Index Size = 4, Pop1 = 1.
+        cJL_JPIMMED_5_01,       // Index Size = 5, Pop1 = 1.
+        cJL_JPIMMED_6_01,       // Index Size = 6, Pop1 = 1.
+        cJL_JPIMMED_7_01,       // Index Size = 7, Pop1 = 1.
+#endif
+
+        cJL_JPIMMED_1_02,       // Index Size = 1, Pop1 = 2.
+        cJL_JPIMMED_1_03,       // Index Size = 1, Pop1 = 3.
+
+#ifdef JU_64BIT
+        cJL_JPIMMED_1_04,       // Index Size = 1, Pop1 = 4.
+        cJL_JPIMMED_1_05,       // Index Size = 1, Pop1 = 5.
+        cJL_JPIMMED_1_06,       // Index Size = 1, Pop1 = 6.
+        cJL_JPIMMED_1_07,       // Index Size = 1, Pop1 = 7.
+
+        cJL_JPIMMED_2_02,       // Index Size = 2, Pop1 = 2.
+        cJL_JPIMMED_2_03,       // Index Size = 2, Pop1 = 3.
+
+        cJL_JPIMMED_3_02,       // Index Size = 3, Pop1 = 2.
+#endif
+
+// This special Type is merely a sentinel for doing relative calculations.
+// This value should not be used in switch statements (to avoid allocating code
+// for it), which is also why it appears at the end of the enum list.
+
+        cJL_JPIMMED_CAP
+
+} jpL_Type_t;
+
+
+// RELATED VALUES:
+
+// Index Size (state) for leaf JP, and JP type based on Index Size (state):
+
+#define JL_LEAFINDEXSIZE(jpType) ((jpType)    - cJL_JPLEAF1 + 1)
+#define JL_LEAFTYPE(IndexSize)   ((IndexSize) + cJL_JPLEAF1 - 1)
+
+
+// MAXIMUM POPULATIONS OF LINEAR LEAVES:
+
+#ifndef JU_64BIT // 32-bit
+
+#define J_L_MAXB                (sizeof(Word_t) * 64)
+#define ALLOCSIZES { 3, 5, 7, 11, 15, 23, 32, 47, 64, TERMINATOR } // in words.
+#define cJL_LEAF1_MAXWORDS               (32)   // max Leaf1 size in words.
+
+// Note:  cJL_LEAF1_MAXPOP1 is chosen such that the index portion is less than
+// 32 bytes -- the number of bytes the index takes in a bitmap leaf.
+
+#define cJL_LEAF1_MAXPOP1 \
+   ((cJL_LEAF1_MAXWORDS * cJU_BYTESPERWORD)/(1 + cJU_BYTESPERWORD))
+#define cJL_LEAF2_MAXPOP1       (J_L_MAXB / (2 + cJU_BYTESPERWORD))
+#define cJL_LEAF3_MAXPOP1       (J_L_MAXB / (3 + cJU_BYTESPERWORD))
+#define cJL_LEAFW_MAXPOP1 \
+           ((J_L_MAXB - cJU_BYTESPERWORD) / (2 * cJU_BYTESPERWORD))
+
+#else // 64-bit
+
+#define J_L_MAXB                (sizeof(Word_t) * 64)
+#define ALLOCSIZES { 3, 5, 7, 11, 15, 23, 32, 47, 64, TERMINATOR } // in words.
+#define cJL_LEAF1_MAXWORDS       (15)   // max Leaf1 size in words.
+
+#define cJL_LEAF1_MAXPOP1 \
+   ((cJL_LEAF1_MAXWORDS * cJU_BYTESPERWORD)/(1 + cJU_BYTESPERWORD))
+#define cJL_LEAF2_MAXPOP1       (J_L_MAXB / (2 + cJU_BYTESPERWORD))
+#define cJL_LEAF3_MAXPOP1       (J_L_MAXB / (3 + cJU_BYTESPERWORD))
+#define cJL_LEAF4_MAXPOP1       (J_L_MAXB / (4 + cJU_BYTESPERWORD))
+#define cJL_LEAF5_MAXPOP1       (J_L_MAXB / (5 + cJU_BYTESPERWORD))
+#define cJL_LEAF6_MAXPOP1       (J_L_MAXB / (6 + cJU_BYTESPERWORD))
+#define cJL_LEAF7_MAXPOP1       (J_L_MAXB / (7 + cJU_BYTESPERWORD))
+#define cJL_LEAFW_MAXPOP1 \
+           ((J_L_MAXB - cJU_BYTESPERWORD) / (2 * cJU_BYTESPERWORD))
+
+#endif // 64-bit
+
+
+// MAXIMUM POPULATIONS OF IMMEDIATE JPs:
+//
+// These specify the maximum Population of immediate JPs with various Index
+// Sizes (== sizes of remaining undecoded Index bits).  Since the JP Types enum
+// already lists all the immediates in order by state and size, calculate these
+// values from it to avoid redundancy.
+
+#define cJL_IMMED1_MAXPOP1  ((cJU_BYTESPERWORD - 1) / 1)        // 3 [7].
+#define cJL_IMMED2_MAXPOP1  ((cJU_BYTESPERWORD - 1) / 2)        // 1 [3].
+#define cJL_IMMED3_MAXPOP1  ((cJU_BYTESPERWORD - 1) / 3)        // 1 [2].
+
+#ifdef JU_64BIT
+#define cJL_IMMED4_MAXPOP1  ((cJU_BYTESPERWORD - 1) / 4)        //   [1].
+#define cJL_IMMED5_MAXPOP1  ((cJU_BYTESPERWORD - 1) / 5)        //   [1].
+#define cJL_IMMED6_MAXPOP1  ((cJU_BYTESPERWORD - 1) / 6)        //   [1].
+#define cJL_IMMED7_MAXPOP1  ((cJU_BYTESPERWORD - 1) / 7)        //   [1].
+#endif
+
+
+// ****************************************************************************
+// JUDYL LEAF BITMAP (JLLB) SUPPORT
+// ****************************************************************************
+//
+// Assemble bitmap leaves out of smaller units that put bitmap subexpanses
+// close to their associated pointers.  Why not just use a bitmap followed by a
+// series of pointers?  (See 4.27.)  Turns out this wastes a cache fill on
+// systems with smaller cache lines than the assumed value cJU_WORDSPERCL.
+
+#define JL_JLB_BITMAP(Pjlb, Subexp)  ((Pjlb)->jLlb_jLlbs[Subexp].jLlbs_Bitmap)
+#define JL_JLB_PVALUE(Pjlb, Subexp)  ((Pjlb)->jLlb_jLlbs[Subexp].jLlbs_PValue)
+
+typedef struct J__UDYL_LEAF_BITMAP_SUBEXPANSE
+{
+        BITMAPL_t jLlbs_Bitmap;
+        Pjv_t     jLlbs_PValue;
+
+} jLlbs_t;
+
+typedef struct J__UDYL_LEAF_BITMAP
+{
+        jLlbs_t jLlb_jLlbs[cJU_NUMSUBEXPL];
+
+} jLlb_t, * PjLlb_t;
+
+// Words per bitmap leaf:
+
+#define cJL_WORDSPERLEAFB1  (sizeof(jLlb_t) / cJU_BYTESPERWORD)
+
+
+// ****************************************************************************
+// MEMORY ALLOCATION SUPPORT
+// ****************************************************************************
+
+// ARRAY-GLOBAL INFORMATION:
+//
+// At the cost of an occasional additional cache fill, this object, which is
+// pointed at by a JRP and in turn points to a JP_BRANCH*, carries array-global
+// information about a JudyL array that has sufficient population to amortize
+// the cost.  The jpm_Pop0 field prevents having to add up the total population
+// for the array in insert, delete, and count code.  The jpm_JP field prevents
+// having to build a fake JP for entry to a state machine; however, the
+// jp_DcdPopO field in jpm_JP, being one byte too small, is not used.
+//
+// Note:  Struct fields are ordered to keep "hot" data in the first 8 words
+// (see left-margin comments) for machines with 8-word cache lines, and to keep
+// sub-word fields together for efficient packing.
+
+typedef struct J_UDYL_POPULATION_AND_MEMORY
+{
+/* 1 */ Word_t     jpm_Pop0;            // total population-1 in array.
+/* 2 */ jp_t       jpm_JP;              // JP to first branch; see above.
+/* 4 */ Word_t     jpm_LastUPop0;       // last jpm_Pop0 when convert to BranchU
+/* 7 */ Pjv_t      jpm_PValue;          // pointer to value to return.
+// Note:  Field names match PJError_t for convenience in macros:
+/* 8 */ char       je_Errno;            // one of the enums in Judy.h.
+/* 8/9  */ int     je_ErrID;            // often an internal source line number.
+/* 9/10 */ Word_t  jpm_TotalMemWords;   // words allocated in array.
+} jLpm_t, *PjLpm_t;
+
+
+// TABLES FOR DETERMINING IF LEAVES HAVE ROOM TO GROW:
+//
+// These tables indicate if a given memory chunk can support growth of a given
+// object into wasted (rounded-up) memory in the chunk.  Note:  This violates
+// the hiddenness of the JudyMalloc code.
+
+extern const uint8_t j__L_Leaf1PopToWords[cJL_LEAF1_MAXPOP1 + 1];
+extern const uint8_t j__L_Leaf2PopToWords[cJL_LEAF2_MAXPOP1 + 1];
+extern const uint8_t j__L_Leaf3PopToWords[cJL_LEAF3_MAXPOP1 + 1];
+#ifdef JU_64BIT
+extern const uint8_t j__L_Leaf4PopToWords[cJL_LEAF4_MAXPOP1 + 1];
+extern const uint8_t j__L_Leaf5PopToWords[cJL_LEAF5_MAXPOP1 + 1];
+extern const uint8_t j__L_Leaf6PopToWords[cJL_LEAF6_MAXPOP1 + 1];
+extern const uint8_t j__L_Leaf7PopToWords[cJL_LEAF7_MAXPOP1 + 1];
+#endif
+extern const uint8_t j__L_LeafWPopToWords[cJL_LEAFW_MAXPOP1 + 1];
+extern const uint8_t j__L_LeafVPopToWords[];
+
+// These tables indicate where value areas start:
+
+extern const uint8_t j__L_Leaf1Offset    [cJL_LEAF1_MAXPOP1 + 1];
+extern const uint8_t j__L_Leaf2Offset    [cJL_LEAF2_MAXPOP1 + 1];
+extern const uint8_t j__L_Leaf3Offset    [cJL_LEAF3_MAXPOP1 + 1];
+#ifdef JU_64BIT
+extern const uint8_t j__L_Leaf4Offset    [cJL_LEAF4_MAXPOP1 + 1];
+extern const uint8_t j__L_Leaf5Offset    [cJL_LEAF5_MAXPOP1 + 1];
+extern const uint8_t j__L_Leaf6Offset    [cJL_LEAF6_MAXPOP1 + 1];
+extern const uint8_t j__L_Leaf7Offset    [cJL_LEAF7_MAXPOP1 + 1];
+#endif
+extern const uint8_t j__L_LeafWOffset    [cJL_LEAFW_MAXPOP1 + 1];
+
+// Also define macros to hide the details in the code using these tables.
+
+#define JL_LEAF1GROWINPLACE(Pop1) \
+        J__U_GROWCK(Pop1, cJL_LEAF1_MAXPOP1, j__L_Leaf1PopToWords)
+#define JL_LEAF2GROWINPLACE(Pop1) \
+        J__U_GROWCK(Pop1, cJL_LEAF2_MAXPOP1, j__L_Leaf2PopToWords)
+#define JL_LEAF3GROWINPLACE(Pop1) \
+        J__U_GROWCK(Pop1, cJL_LEAF3_MAXPOP1, j__L_Leaf3PopToWords)
+#ifdef JU_64BIT
+#define JL_LEAF4GROWINPLACE(Pop1) \
+        J__U_GROWCK(Pop1, cJL_LEAF4_MAXPOP1, j__L_Leaf4PopToWords)
+#define JL_LEAF5GROWINPLACE(Pop1) \
+        J__U_GROWCK(Pop1, cJL_LEAF5_MAXPOP1, j__L_Leaf5PopToWords)
+#define JL_LEAF6GROWINPLACE(Pop1) \
+        J__U_GROWCK(Pop1, cJL_LEAF6_MAXPOP1, j__L_Leaf6PopToWords)
+#define JL_LEAF7GROWINPLACE(Pop1) \
+        J__U_GROWCK(Pop1, cJL_LEAF7_MAXPOP1, j__L_Leaf7PopToWords)
+#endif
+#define JL_LEAFWGROWINPLACE(Pop1) \
+        J__U_GROWCK(Pop1, cJL_LEAFW_MAXPOP1, j__L_LeafWPopToWords)
+#define JL_LEAFVGROWINPLACE(Pop1)  \
+        J__U_GROWCK(Pop1, cJU_BITSPERSUBEXPL,  j__L_LeafVPopToWords)
+
+#define JL_LEAF1VALUEAREA(Pjv,Pop1)  (((PWord_t)(Pjv)) + j__L_Leaf1Offset[Pop1])
+#define JL_LEAF2VALUEAREA(Pjv,Pop1)  (((PWord_t)(Pjv)) + j__L_Leaf2Offset[Pop1])
+#define JL_LEAF3VALUEAREA(Pjv,Pop1)  (((PWord_t)(Pjv)) + j__L_Leaf3Offset[Pop1])
+#ifdef JU_64BIT
+#define JL_LEAF4VALUEAREA(Pjv,Pop1)  (((PWord_t)(Pjv)) + j__L_Leaf4Offset[Pop1])
+#define JL_LEAF5VALUEAREA(Pjv,Pop1)  (((PWord_t)(Pjv)) + j__L_Leaf5Offset[Pop1])
+#define JL_LEAF6VALUEAREA(Pjv,Pop1)  (((PWord_t)(Pjv)) + j__L_Leaf6Offset[Pop1])
+#define JL_LEAF7VALUEAREA(Pjv,Pop1)  (((PWord_t)(Pjv)) + j__L_Leaf7Offset[Pop1])
+#endif
+#define JL_LEAFWVALUEAREA(Pjv,Pop1)  (((PWord_t)(Pjv)) + j__L_LeafWOffset[Pop1])
+
+#define JL_LEAF1POPTOWORDS(Pop1)        (j__L_Leaf1PopToWords[Pop1])
+#define JL_LEAF2POPTOWORDS(Pop1)        (j__L_Leaf2PopToWords[Pop1])
+#define JL_LEAF3POPTOWORDS(Pop1)        (j__L_Leaf3PopToWords[Pop1])
+#ifdef JU_64BIT
+#define JL_LEAF4POPTOWORDS(Pop1)        (j__L_Leaf4PopToWords[Pop1])
+#define JL_LEAF5POPTOWORDS(Pop1)        (j__L_Leaf5PopToWords[Pop1])
+#define JL_LEAF6POPTOWORDS(Pop1)        (j__L_Leaf6PopToWords[Pop1])
+#define JL_LEAF7POPTOWORDS(Pop1)        (j__L_Leaf7PopToWords[Pop1])
+#endif
+#define JL_LEAFWPOPTOWORDS(Pop1)        (j__L_LeafWPopToWords[Pop1])
+#define JL_LEAFVPOPTOWORDS(Pop1)        (j__L_LeafVPopToWords[Pop1])
+
+
+// FUNCTIONS TO ALLOCATE OBJECTS:
+
+PjLpm_t j__udyLAllocJLPM(void);                         // constant size.
+
+Pjbl_t  j__udyLAllocJBL(          PjLpm_t);             // constant size.
+Pjbb_t  j__udyLAllocJBB(          PjLpm_t);             // constant size.
+Pjp_t   j__udyLAllocJBBJP(Word_t, PjLpm_t);
+Pjbu_t  j__udyLAllocJBU(          PjLpm_t);             // constant size.
+
+Pjll_t  j__udyLAllocJLL1( Word_t, PjLpm_t);
+Pjll_t  j__udyLAllocJLL2( Word_t, PjLpm_t);
+Pjll_t  j__udyLAllocJLL3( Word_t, PjLpm_t);
+
+#ifdef JU_64BIT
+Pjll_t  j__udyLAllocJLL4( Word_t, PjLpm_t);
+Pjll_t  j__udyLAllocJLL5( Word_t, PjLpm_t);
+Pjll_t  j__udyLAllocJLL6( Word_t, PjLpm_t);
+Pjll_t  j__udyLAllocJLL7( Word_t, PjLpm_t);
+#endif
+
+Pjlw_t  j__udyLAllocJLW(  Word_t         );             // no PjLpm_t needed.
+PjLlb_t j__udyLAllocJLB1(         PjLpm_t);             // constant size.
+Pjv_t   j__udyLAllocJV(   Word_t, PjLpm_t);
+
+
+// FUNCTIONS TO FREE OBJECTS:
+
+void    j__udyLFreeJLPM( PjLpm_t,        PjLpm_t);      // constant size.
+
+void    j__udyLFreeJBL(  Pjbl_t,         PjLpm_t);      // constant size.
+void    j__udyLFreeJBB(  Pjbb_t,         PjLpm_t);      // constant size.
+void    j__udyLFreeJBBJP(Pjp_t,  Word_t, PjLpm_t);
+void    j__udyLFreeJBU(  Pjbu_t,         PjLpm_t);      // constant size.
+
+void    j__udyLFreeJLL1( Pjll_t, Word_t, PjLpm_t);
+void    j__udyLFreeJLL2( Pjll_t, Word_t, PjLpm_t);
+void    j__udyLFreeJLL3( Pjll_t, Word_t, PjLpm_t);
+
+#ifdef JU_64BIT
+void    j__udyLFreeJLL4( Pjll_t, Word_t, PjLpm_t);
+void    j__udyLFreeJLL5( Pjll_t, Word_t, PjLpm_t);
+void    j__udyLFreeJLL6( Pjll_t, Word_t, PjLpm_t);
+void    j__udyLFreeJLL7( Pjll_t, Word_t, PjLpm_t);
+#endif
+
+void    j__udyLFreeJLW(  Pjlw_t, Word_t, PjLpm_t);
+void    j__udyLFreeJLB1( PjLlb_t,        PjLpm_t);      // constant size.
+void    j__udyLFreeJV(   Pjv_t,  Word_t, PjLpm_t);
+void    j__udyLFreeSM(   Pjp_t,          PjLpm_t);      // everything below Pjp.
+
+#endif // ! _JUDYL_INCLUDED
diff --git a/libs/klib/judy/JudyMalloc.c b/libs/klib/judy/JudyMalloc.c
new file mode 100644
index 0000000..165521f
--- /dev/null
+++ b/libs/klib/judy/JudyMalloc.c
@@ -0,0 +1,86 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// ************************************************************************ //
+//                    JUDY - Memory Allocater                             //
+//                              -by-					  //
+//		         Douglas L. Baskins				  //
+//			  Hewlett Packard				  //
+//                        Fort Collins, Co				  //
+//                         (970) 229-2027				  //
+//									  //
+// ************************************************************************ //
+
+// JUDY INCLUDE FILES
+#include "Judy.h"
+
+// ****************************************************************************
+// J U D Y   M A L L O C
+//
+// Allocate RAM.  This is the single location in Judy code that calls
+// malloc(3C).  Note:  JPM accounting occurs at a higher level.
+
+Word_t JudyMalloc(
+	Word_t Words)
+{
+	Word_t Addr;
+
+	Addr = (Word_t) malloc(Words * sizeof(Word_t));
+	return(Addr);
+
+} // JudyMalloc()
+
+
+// ****************************************************************************
+// J U D Y   F R E E
+
+void JudyFree(
+	void * PWord,
+	Word_t Words)
+{
+	(void) Words;
+	free(PWord);
+
+} // JudyFree()
+
+
+// ****************************************************************************
+// J U D Y   M A L L O C
+//
+// Higher-level "wrapper" for allocating objects that need not be in RAM,
+// although at this time they are in fact only in RAM.  Later we hope that some
+// entire subtrees (at a JPM or branch) can be "virtual", so their allocations
+// and frees should go through this level.
+
+Word_t JudyMallocVirtual(
+	Word_t Words)
+{
+	return(JudyMalloc(Words));
+
+} // JudyMallocVirtual()
+
+
+// ****************************************************************************
+// J U D Y   F R E E
+
+void JudyFreeVirtual(
+	void * PWord,
+	Word_t Words)
+{
+        JudyFree(PWord, Words);
+
+} // JudyFreeVirtual()
diff --git a/libs/klib/judy/JudyMallocIF.c b/libs/klib/judy/JudyMallocIF.c
new file mode 100644
index 0000000..fa91d80
--- /dev/null
+++ b/libs/klib/judy/JudyMallocIF.c
@@ -0,0 +1,780 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// Judy malloc/free interface functions for Judy1 and JudyL.
+//
+// Compile with one of -DJUDY1 or -DJUDYL.
+//
+// Compile with -DTRACEMI (Malloc Interface) to turn on tracing of malloc/free
+// calls at the interface level.  (See also TRACEMF in lower-level code.)
+// Use -DTRACEMI2 for a terser format suitable for trace analysis.
+//
+// There can be malloc namespace bits in the LSBs of "raw" addresses from most,
+// but not all, of the j__udy*Alloc*() functions; see also JudyPrivate.h.  To
+// test the Judy code, compile this file with -DMALLOCBITS and use debug flavor
+// only (for assertions).  This test ensures that (a) all callers properly mask
+// the namespace bits out before dereferencing a pointer (or else a core dump
+// occurs), and (b) all callers send "raw" (unmasked) addresses to
+// j__udy*Free*() calls.
+//
+// Note:  Currently -DDEBUG turns on MALLOCBITS automatically.
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error:  One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+// Set "hidden" global j__uMaxWords to the maximum number of words to allocate
+// to any one array (large enough to have a JPM, otherwise j__uMaxWords is
+// ignored), to trigger a fake malloc error when the number is exceeded.  Note,
+// this code is always executed, not #ifdefd, because its virtually free.
+//
+// Note:  To keep the MALLOC macro faster and simpler, set j__uMaxWords to
+// MAXINT, not zero, by default.
+
+Word_t j__uMaxWords = ~0UL;
+
+// This macro hides the faking of a malloc failure:
+//
+// Note:  To keep this fast, just compare WordsPrev to j__uMaxWords without the
+// complexity of first adding WordsNow, meaning the trigger point is not
+// exactly where you might assume, but it shouldnt matter.
+
+#define MALLOC(MallocFunc,WordsPrev,WordsNow) \
+        (((WordsPrev) > j__uMaxWords) ? 0UL : MallocFunc(WordsNow))
+
+// Clear words starting at address:
+//
+// Note:  Only use this for objects that care; in other cases, it doesnt
+// matter if the objects memory is pre-zeroed.
+
+#define ZEROWORDS(Addr,Words)                   \
+        {                                       \
+            Word_t  Words__ = (Words);          \
+            PWord_t Addr__  = (PWord_t) (Addr); \
+            while (Words__--) *Addr__++ = 0UL;  \
+        }
+
+#ifdef TRACEMI
+
+// TRACING SUPPORT:
+//
+// Note:  For TRACEMI, use a format for address printing compatible with other
+// tracing facilities; in particular, %x not %lx, to truncate the "noisy" high
+// part on 64-bit systems.
+//
+// TBD: The trace macros need fixing for alternate address types.
+//
+// Note:  TRACEMI2 supports trace analysis no matter the underlying malloc/free
+// engine used.
+
+#include <stdio.h>
+
+static Word_t j__udyMemSequence = 0L;   // event sequence number.
+
+#define TRACE_ALLOC5(a,b,c,d,e)   (void) printf(a, (b), c, d)
+#define TRACE_FREE5( a,b,c,d,e)   (void) printf(a, (b), c, d)
+#define TRACE_ALLOC6(a,b,c,d,e,f) (void) printf(a, (b), c, d, e)
+#define TRACE_FREE6( a,b,c,d,e,f) (void) printf(a, (b), c, d, e)
+
+#else
+
+#ifdef TRACEMI2
+
+#include <stdio.h>
+
+#define b_pw cJU_BYTESPERWORD
+
+#define TRACE_ALLOC5(a,b,c,d,e)   \
+            (void) printf("a %lx %lx %lx\n", (b), (d) * b_pw, e)
+#define TRACE_FREE5( a,b,c,d,e)   \
+            (void) printf("f %lx %lx %lx\n", (b), (d) * b_pw, e)
+#define TRACE_ALLOC6(a,b,c,d,e,f)         \
+            (void) printf("a %lx %lx %lx\n", (b), (e) * b_pw, f)
+#define TRACE_FREE6( a,b,c,d,e,f)         \
+            (void) printf("f %lx %lx %lx\n", (b), (e) * b_pw, f)
+
+static Word_t j__udyMemSequence = 0L;   // event sequence number.
+
+#else
+
+#define TRACE_ALLOC5(a,b,c,d,e)   // null.
+#define TRACE_FREE5( a,b,c,d,e)   // null.
+#define TRACE_ALLOC6(a,b,c,d,e,f) // null.
+#define TRACE_FREE6( a,b,c,d,e,f) // null.
+
+#endif // ! TRACEMI2
+#endif // ! TRACEMI
+
+
+// MALLOC NAMESPACE SUPPORT:
+
+#if (defined(DEBUG) && (! defined(MALLOCBITS))) // for now, DEBUG => MALLOCBITS:
+#define MALLOCBITS 1
+#endif
+
+#ifdef MALLOCBITS
+#define MALLOCBITS_VALUE 0x3    // bit pattern to use.
+#define MALLOCBITS_MASK  0x7    // note: matches mask__ in JudyPrivate.h.
+
+#define MALLOCBITS_SET( Type,Addr) \
+        ((Addr) = (Type) ((Word_t) (Addr) |  MALLOCBITS_VALUE))
+#define MALLOCBITS_TEST(Type,Addr) \
+        assert((((Word_t) (Addr)) & MALLOCBITS_MASK) == MALLOCBITS_VALUE); \
+        ((Addr) = (Type) ((Word_t) (Addr) & ~MALLOCBITS_VALUE))
+#else
+#define MALLOCBITS_SET( Type,Addr)  // null.
+#define MALLOCBITS_TEST(Type,Addr)  // null.
+#endif
+
+
+// SAVE ERROR INFORMATION IN A Pjpm:
+//
+// "Small" (invalid) Addr values are used to distinguish overrun and no-mem
+// errors.  (TBD, non-zero invalid values are no longer returned from
+// lower-level functions, that is, JU_ERRNO_OVERRUN is no longer detected.)
+
+#define J__UDYSETALLOCERROR(Addr)                                       \
+        {                                                               \
+            JU_ERRID(Pjpm) = __LINE__;                                  \
+            if ((Word_t) (Addr) > 0) JU_ERRNO(Pjpm) = JU_ERRNO_OVERRUN; \
+            else                     JU_ERRNO(Pjpm) = JU_ERRNO_NOMEM;   \
+            return(0);                                                  \
+        }
+
+
+// ****************************************************************************
+// ALLOCATION FUNCTIONS:
+//
+// To help the compiler catch coding errors, each function returns a specific
+// object type.
+//
+// Note:  Only j__udyAllocJPM() and j__udyAllocJLW() return multiple values <=
+// sizeof(Word_t) to indicate the type of memory allocation failure.  Other
+// allocation functions convert this failure to a JU_ERRNO.
+
+
+// Note:  Unlike other j__udyAlloc*() functions, Pjpms are returned non-raw,
+// that is, without malloc namespace or root pointer type bits:
+
+FUNCTION Pjpm_t j__udyAllocJPM(void)
+{
+        Word_t Words = (sizeof(jpm_t) + cJU_BYTESPERWORD - 1) / cJU_BYTESPERWORD;
+        Pjpm_t Pjpm  = (Pjpm_t) MALLOC(JudyMalloc, Words, Words);
+
+        assert((Words * cJU_BYTESPERWORD) == sizeof(jpm_t));
+
+        if ((Word_t) Pjpm > sizeof(Word_t))
+        {
+            ZEROWORDS(Pjpm, Words);
+            Pjpm->jpm_TotalMemWords = Words;
+        }
+
+        TRACE_ALLOC5("0x%x %8lu = j__udyAllocJPM(), Words = %lu\n",
+                     Pjpm, j__udyMemSequence++, Words, cJU_LEAFW_MAXPOP1 + 1);
+        // MALLOCBITS_SET(Pjpm_t, Pjpm);  // see above.
+        return(Pjpm);
+
+} // j__udyAllocJPM()
+
+
+FUNCTION Pjbl_t j__udyAllocJBL(Pjpm_t Pjpm)
+{
+        Word_t Words   = sizeof(jbl_t) / cJU_BYTESPERWORD;
+        Pjbl_t PjblRaw = (Pjbl_t) MALLOC(JudyMallocVirtual,
+                                         Pjpm->jpm_TotalMemWords, Words);
+
+        assert((Words * cJU_BYTESPERWORD) == sizeof(jbl_t));
+
+        if ((Word_t) PjblRaw > sizeof(Word_t))
+        {
+            ZEROWORDS(P_JBL(PjblRaw), Words);
+            Pjpm->jpm_TotalMemWords += Words;
+        }
+        else { J__UDYSETALLOCERROR(PjblRaw); }
+
+        TRACE_ALLOC5("0x%x %8lu = j__udyAllocJBL(), Words = %lu\n", PjblRaw,
+                     j__udyMemSequence++, Words, (Pjpm->jpm_Pop0) + 2);
+        MALLOCBITS_SET(Pjbl_t, PjblRaw);
+        return(PjblRaw);
+
+} // j__udyAllocJBL()
+
+
+FUNCTION Pjbb_t j__udyAllocJBB(Pjpm_t Pjpm)
+{
+        Word_t Words   = sizeof(jbb_t) / cJU_BYTESPERWORD;
+        Pjbb_t PjbbRaw = (Pjbb_t) MALLOC(JudyMallocVirtual,
+                                         Pjpm->jpm_TotalMemWords, Words);
+
+        assert((Words * cJU_BYTESPERWORD) == sizeof(jbb_t));
+
+        if ((Word_t) PjbbRaw > sizeof(Word_t))
+        {
+            ZEROWORDS(P_JBB(PjbbRaw), Words);
+            Pjpm->jpm_TotalMemWords += Words;
+        }
+        else { J__UDYSETALLOCERROR(PjbbRaw); }
+
+        TRACE_ALLOC5("0x%x %8lu = j__udyAllocJBB(), Words = %lu\n", PjbbRaw,
+                     j__udyMemSequence++, Words, (Pjpm->jpm_Pop0) + 2);
+        MALLOCBITS_SET(Pjbb_t, PjbbRaw);
+        return(PjbbRaw);
+
+} // j__udyAllocJBB()
+
+
+FUNCTION Pjp_t j__udyAllocJBBJP(Word_t NumJPs, Pjpm_t Pjpm)
+{
+        Word_t Words = JU_BRANCHJP_NUMJPSTOWORDS(NumJPs);
+        Pjp_t  PjpRaw;
+
+        PjpRaw = (Pjp_t) MALLOC(JudyMalloc, Pjpm->jpm_TotalMemWords, Words);
+
+        if ((Word_t) PjpRaw > sizeof(Word_t))
+        {
+            Pjpm->jpm_TotalMemWords += Words;
+        }
+        else { J__UDYSETALLOCERROR(PjpRaw); }
+
+        TRACE_ALLOC6("0x%x %8lu = j__udyAllocJBBJP(%lu), Words = %lu\n", PjpRaw,
+                     j__udyMemSequence++, NumJPs, Words, (Pjpm->jpm_Pop0) + 2);
+        MALLOCBITS_SET(Pjp_t, PjpRaw);
+        return(PjpRaw);
+
+} // j__udyAllocJBBJP()
+
+
+FUNCTION Pjbu_t j__udyAllocJBU(Pjpm_t Pjpm)
+{
+        Word_t Words   = sizeof(jbu_t) / cJU_BYTESPERWORD;
+        Pjbu_t PjbuRaw = (Pjbu_t) MALLOC(JudyMallocVirtual,
+                                         Pjpm->jpm_TotalMemWords, Words);
+
+        assert((Words * cJU_BYTESPERWORD) == sizeof(jbu_t));
+
+        if ((Word_t) PjbuRaw > sizeof(Word_t))
+        {
+            Pjpm->jpm_TotalMemWords += Words;
+        }
+        else { J__UDYSETALLOCERROR(PjbuRaw); }
+
+        TRACE_ALLOC5("0x%x %8lu = j__udyAllocJBU(), Words = %lu\n", PjbuRaw,
+                     j__udyMemSequence++, Words, (Pjpm->jpm_Pop0) + 2);
+        MALLOCBITS_SET(Pjbu_t, PjbuRaw);
+        return(PjbuRaw);
+
+} // j__udyAllocJBU()
+
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+
+FUNCTION Pjll_t j__udyAllocJLL1(Word_t Pop1, Pjpm_t Pjpm)
+{
+        Word_t Words = JU_LEAF1POPTOWORDS(Pop1);
+        Pjll_t PjllRaw;
+
+        PjllRaw = (Pjll_t) MALLOC(JudyMalloc, Pjpm->jpm_TotalMemWords, Words);
+
+        if ((Word_t) PjllRaw > sizeof(Word_t))
+        {
+            Pjpm->jpm_TotalMemWords += Words;
+        }
+        else { J__UDYSETALLOCERROR(PjllRaw); }
+
+        TRACE_ALLOC6("0x%x %8lu = j__udyAllocJLL1(%lu), Words = %lu\n", PjllRaw,
+                     j__udyMemSequence++, Pop1, Words, (Pjpm->jpm_Pop0) + 2);
+        MALLOCBITS_SET(Pjll_t, PjllRaw);
+        return(PjllRaw);
+
+} // j__udyAllocJLL1()
+
+#endif // (JUDYL || (! JU_64BIT))
+
+
+FUNCTION Pjll_t j__udyAllocJLL2(Word_t Pop1, Pjpm_t Pjpm)
+{
+        Word_t Words = JU_LEAF2POPTOWORDS(Pop1);
+        Pjll_t PjllRaw;
+
+        PjllRaw = (Pjll_t) MALLOC(JudyMalloc, Pjpm->jpm_TotalMemWords, Words);
+
+        if ((Word_t) PjllRaw > sizeof(Word_t))
+        {
+            Pjpm->jpm_TotalMemWords += Words;
+        }
+        else { J__UDYSETALLOCERROR(PjllRaw); }
+
+        TRACE_ALLOC6("0x%x %8lu = j__udyAllocJLL2(%lu), Words = %lu\n", PjllRaw,
+                     j__udyMemSequence++, Pop1, Words, (Pjpm->jpm_Pop0) + 2);
+        MALLOCBITS_SET(Pjll_t, PjllRaw);
+        return(PjllRaw);
+
+} // j__udyAllocJLL2()
+
+
+FUNCTION Pjll_t j__udyAllocJLL3(Word_t Pop1, Pjpm_t Pjpm)
+{
+        Word_t Words = JU_LEAF3POPTOWORDS(Pop1);
+        Pjll_t PjllRaw;
+
+        PjllRaw = (Pjll_t) MALLOC(JudyMalloc, Pjpm->jpm_TotalMemWords, Words);
+
+        if ((Word_t) PjllRaw > sizeof(Word_t))
+        {
+            Pjpm->jpm_TotalMemWords += Words;
+        }
+        else { J__UDYSETALLOCERROR(PjllRaw); }
+
+        TRACE_ALLOC6("0x%x %8lu = j__udyAllocJLL3(%lu), Words = %lu\n", PjllRaw,
+                     j__udyMemSequence++, Pop1, Words, (Pjpm->jpm_Pop0) + 2);
+        MALLOCBITS_SET(Pjll_t, PjllRaw);
+        return(PjllRaw);
+
+} // j__udyAllocJLL3()
+
+
+#ifdef JU_64BIT
+
+FUNCTION Pjll_t j__udyAllocJLL4(Word_t Pop1, Pjpm_t Pjpm)
+{
+        Word_t Words = JU_LEAF4POPTOWORDS(Pop1);
+        Pjll_t PjllRaw;
+
+        PjllRaw = (Pjll_t) MALLOC(JudyMalloc, Pjpm->jpm_TotalMemWords, Words);
+
+        if ((Word_t) PjllRaw > sizeof(Word_t))
+        {
+            Pjpm->jpm_TotalMemWords += Words;
+        }
+        else { J__UDYSETALLOCERROR(PjllRaw); }
+
+        TRACE_ALLOC6("0x%x %8lu = j__udyAllocJLL4(%lu), Words = %lu\n", PjllRaw,
+                     j__udyMemSequence++, Pop1, Words, (Pjpm->jpm_Pop0) + 2);
+        MALLOCBITS_SET(Pjll_t, PjllRaw);
+        return(PjllRaw);
+
+} // j__udyAllocJLL4()
+
+
+FUNCTION Pjll_t j__udyAllocJLL5(Word_t Pop1, Pjpm_t Pjpm)
+{
+        Word_t Words = JU_LEAF5POPTOWORDS(Pop1);
+        Pjll_t PjllRaw;
+
+        PjllRaw = (Pjll_t) MALLOC(JudyMalloc, Pjpm->jpm_TotalMemWords, Words);
+
+        if ((Word_t) PjllRaw > sizeof(Word_t))
+        {
+            Pjpm->jpm_TotalMemWords += Words;
+        }
+        else { J__UDYSETALLOCERROR(PjllRaw); }
+
+        TRACE_ALLOC6("0x%x %8lu = j__udyAllocJLL5(%lu), Words = %lu\n", PjllRaw,
+                     j__udyMemSequence++, Pop1, Words, (Pjpm->jpm_Pop0) + 2);
+        MALLOCBITS_SET(Pjll_t, PjllRaw);
+        return(PjllRaw);
+
+} // j__udyAllocJLL5()
+
+
+FUNCTION Pjll_t j__udyAllocJLL6(Word_t Pop1, Pjpm_t Pjpm)
+{
+        Word_t Words = JU_LEAF6POPTOWORDS(Pop1);
+        Pjll_t PjllRaw;
+
+        PjllRaw = (Pjll_t) MALLOC(JudyMalloc, Pjpm->jpm_TotalMemWords, Words);
+
+        if ((Word_t) PjllRaw > sizeof(Word_t))
+        {
+            Pjpm->jpm_TotalMemWords += Words;
+        }
+        else { J__UDYSETALLOCERROR(PjllRaw); }
+
+        TRACE_ALLOC6("0x%x %8lu = j__udyAllocJLL6(%lu), Words = %lu\n", PjllRaw,
+                     j__udyMemSequence++, Pop1, Words, (Pjpm->jpm_Pop0) + 2);
+        MALLOCBITS_SET(Pjll_t, PjllRaw);
+        return(PjllRaw);
+
+} // j__udyAllocJLL6()
+
+
+FUNCTION Pjll_t j__udyAllocJLL7(Word_t Pop1, Pjpm_t Pjpm)
+{
+        Word_t Words = JU_LEAF7POPTOWORDS(Pop1);
+        Pjll_t PjllRaw;
+
+        PjllRaw = (Pjll_t) MALLOC(JudyMalloc, Pjpm->jpm_TotalMemWords, Words);
+
+        if ((Word_t) PjllRaw > sizeof(Word_t))
+        {
+            Pjpm->jpm_TotalMemWords += Words;
+        }
+        else { J__UDYSETALLOCERROR(PjllRaw); }
+
+        TRACE_ALLOC6("0x%x %8lu = j__udyAllocJLL7(%lu), Words = %lu\n", PjllRaw,
+                     j__udyMemSequence++, Pop1, Words, (Pjpm->jpm_Pop0) + 2);
+        MALLOCBITS_SET(Pjll_t, PjllRaw);
+        return(PjllRaw);
+
+} // j__udyAllocJLL7()
+
+#endif // JU_64BIT
+
+
+// Note:  Root-level leaf addresses are always whole words (Pjlw_t), and unlike
+// other j__udyAlloc*() functions, they are returned non-raw, that is, without
+// malloc namespace or root pointer type bits (the latter are added later by
+// the caller):
+
+FUNCTION Pjlw_t j__udyAllocJLW(Word_t Pop1)
+{
+        Word_t Words = JU_LEAFWPOPTOWORDS(Pop1);
+        Pjlw_t Pjlw  = (Pjlw_t) MALLOC(JudyMalloc, Words, Words);
+
+        TRACE_ALLOC6("0x%x %8lu = j__udyAllocJLW(%lu), Words = %lu\n", Pjlw,
+                     j__udyMemSequence++, Pop1, Words, Pop1);
+        // MALLOCBITS_SET(Pjlw_t, Pjlw);  // see above.
+        return(Pjlw);
+
+} // j__udyAllocJLW()
+
+
+FUNCTION Pjlb_t j__udyAllocJLB1(Pjpm_t Pjpm)
+{
+        Word_t Words = sizeof(jlb_t) / cJU_BYTESPERWORD;
+        Pjlb_t PjlbRaw;
+
+        PjlbRaw = (Pjlb_t) MALLOC(JudyMalloc, Pjpm->jpm_TotalMemWords, Words);
+
+        assert((Words * cJU_BYTESPERWORD) == sizeof(jlb_t));
+
+        if ((Word_t) PjlbRaw > sizeof(Word_t))
+        {
+            ZEROWORDS(P_JLB(PjlbRaw), Words);
+            Pjpm->jpm_TotalMemWords += Words;
+        }
+        else { J__UDYSETALLOCERROR(PjlbRaw); }
+
+        TRACE_ALLOC5("0x%x %8lu = j__udyAllocJLB1(), Words = %lu\n", PjlbRaw,
+                     j__udyMemSequence++, Words, (Pjpm->jpm_Pop0) + 2);
+        MALLOCBITS_SET(Pjlb_t, PjlbRaw);
+        return(PjlbRaw);
+
+} // j__udyAllocJLB1()
+
+
+#ifdef JUDYL
+
+FUNCTION Pjv_t j__udyLAllocJV(Word_t Pop1, Pjpm_t Pjpm)
+{
+        Word_t Words = JL_LEAFVPOPTOWORDS(Pop1);
+        Pjv_t  PjvRaw;
+
+        PjvRaw = (Pjv_t) MALLOC(JudyMalloc, Pjpm->jpm_TotalMemWords, Words);
+
+        if ((Word_t) PjvRaw > sizeof(Word_t))
+        {
+            Pjpm->jpm_TotalMemWords += Words;
+        }
+        else { J__UDYSETALLOCERROR(PjvRaw); }
+
+        TRACE_ALLOC6("0x%x %8lu = j__udyLAllocJV(%lu), Words = %lu\n", PjvRaw,
+                     j__udyMemSequence++, Pop1, Words, (Pjpm->jpm_Pop0) + 2);
+        MALLOCBITS_SET(Pjv_t, PjvRaw);
+        return(PjvRaw);
+
+} // j__udyLAllocJV()
+
+#endif // JUDYL
+
+
+// ****************************************************************************
+// FREE FUNCTIONS:
+//
+// To help the compiler catch coding errors, each function takes a specific
+// object type to free.
+
+
+// Note:  j__udyFreeJPM() receives a root pointer with NO root pointer type
+// bits present, that is, they must be stripped by the caller using P_JPM():
+
+FUNCTION void j__udyFreeJPM(Pjpm_t PjpmFree, Pjpm_t PjpmStats)
+{
+        Word_t Words = (sizeof(jpm_t) + cJU_BYTESPERWORD - 1) / cJU_BYTESPERWORD;
+
+        // MALLOCBITS_TEST(Pjpm_t, PjpmFree);   // see above.
+        JudyFree((Pvoid_t) PjpmFree, Words);
+
+        if (PjpmStats != (Pjpm_t) NULL) PjpmStats->jpm_TotalMemWords -= Words;
+
+// Note:  Log PjpmFree->jpm_Pop0, similar to other j__udyFree*() functions, not
+// an assumed value of cJU_LEAFW_MAXPOP1, for when the caller is
+// Judy*FreeArray(), jpm_Pop0 is set to 0, and the population after the free
+// really will be 0, not cJU_LEAFW_MAXPOP1.
+
+        TRACE_FREE6("0x%x %8lu =  j__udyFreeJPM(%lu), Words = %lu\n", PjpmFree,
+                    j__udyMemSequence++, Words, Words, PjpmFree->jpm_Pop0);
+
+
+} // j__udyFreeJPM()
+
+
+FUNCTION void j__udyFreeJBL(Pjbl_t Pjbl, Pjpm_t Pjpm)
+{
+        Word_t Words = sizeof(jbl_t) / cJU_BYTESPERWORD;
+
+        MALLOCBITS_TEST(Pjbl_t, Pjbl);
+        JudyFreeVirtual((Pvoid_t) Pjbl, Words);
+
+        Pjpm->jpm_TotalMemWords -= Words;
+
+        TRACE_FREE5("0x%x %8lu =  j__udyFreeJBL(), Words = %lu\n", Pjbl,
+                    j__udyMemSequence++, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJBL()
+
+
+FUNCTION void j__udyFreeJBB(Pjbb_t Pjbb, Pjpm_t Pjpm)
+{
+        Word_t Words = sizeof(jbb_t) / cJU_BYTESPERWORD;
+
+        MALLOCBITS_TEST(Pjbb_t, Pjbb);
+        JudyFreeVirtual((Pvoid_t) Pjbb, Words);
+
+        Pjpm->jpm_TotalMemWords -= Words;
+
+        TRACE_FREE5("0x%x %8lu =  j__udyFreeJBB(), Words = %lu\n", Pjbb,
+                    j__udyMemSequence++, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJBB()
+
+
+FUNCTION void j__udyFreeJBBJP(Pjp_t Pjp, Word_t NumJPs, Pjpm_t Pjpm)
+{
+        Word_t Words = JU_BRANCHJP_NUMJPSTOWORDS(NumJPs);
+
+        MALLOCBITS_TEST(Pjp_t, Pjp);
+        JudyFree((Pvoid_t) Pjp, Words);
+
+        Pjpm->jpm_TotalMemWords -= Words;
+
+        TRACE_FREE6("0x%x %8lu =  j__udyFreeJBBJP(%lu), Words = %lu\n", Pjp,
+                    j__udyMemSequence++, NumJPs, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJBBJP()
+
+
+FUNCTION void j__udyFreeJBU(Pjbu_t Pjbu, Pjpm_t Pjpm)
+{
+        Word_t Words = sizeof(jbu_t) / cJU_BYTESPERWORD;
+
+        MALLOCBITS_TEST(Pjbu_t, Pjbu);
+        JudyFreeVirtual((Pvoid_t) Pjbu, Words);
+
+        Pjpm->jpm_TotalMemWords -= Words;
+
+        TRACE_FREE5("0x%x %8lu =  j__udyFreeJBU(), Words = %lu\n", Pjbu,
+                    j__udyMemSequence++, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJBU()
+
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+
+FUNCTION void j__udyFreeJLL1(Pjll_t Pjll, Word_t Pop1, Pjpm_t Pjpm)
+{
+        Word_t Words = JU_LEAF1POPTOWORDS(Pop1);
+
+        MALLOCBITS_TEST(Pjll_t, Pjll);
+        JudyFree((Pvoid_t) Pjll, Words);
+
+        Pjpm->jpm_TotalMemWords -= Words;
+
+        TRACE_FREE6("0x%x %8lu =  j__udyFreeJLL1(%lu), Words = %lu\n", Pjll,
+                    j__udyMemSequence++, Pop1, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJLL1()
+
+#endif // (JUDYL || (! JU_64BIT))
+
+
+FUNCTION void j__udyFreeJLL2(Pjll_t Pjll, Word_t Pop1, Pjpm_t Pjpm)
+{
+        Word_t Words = JU_LEAF2POPTOWORDS(Pop1);
+
+        MALLOCBITS_TEST(Pjll_t, Pjll);
+        JudyFree((Pvoid_t) Pjll, Words);
+
+        Pjpm->jpm_TotalMemWords -= Words;
+
+        TRACE_FREE6("0x%x %8lu =  j__udyFreeJLL2(%lu), Words = %lu\n", Pjll,
+                    j__udyMemSequence++, Pop1, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJLL2()
+
+
+FUNCTION void j__udyFreeJLL3(Pjll_t Pjll, Word_t Pop1, Pjpm_t Pjpm)
+{
+        Word_t Words = JU_LEAF3POPTOWORDS(Pop1);
+
+        MALLOCBITS_TEST(Pjll_t, Pjll);
+        JudyFree((Pvoid_t) Pjll, Words);
+
+        Pjpm->jpm_TotalMemWords -= Words;
+
+        TRACE_FREE6("0x%x %8lu =  j__udyFreeJLL3(%lu), Words = %lu\n", Pjll,
+                    j__udyMemSequence++, Pop1, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJLL3()
+
+
+#ifdef JU_64BIT
+
+FUNCTION void j__udyFreeJLL4(Pjll_t Pjll, Word_t Pop1, Pjpm_t Pjpm)
+{
+        Word_t Words = JU_LEAF4POPTOWORDS(Pop1);
+
+        MALLOCBITS_TEST(Pjll_t, Pjll);
+        JudyFree((Pvoid_t) Pjll, Words);
+
+        Pjpm->jpm_TotalMemWords -= Words;
+
+        TRACE_FREE6("0x%x %8lu =  j__udyFreeJLL4(%lu), Words = %lu\n", Pjll,
+                    j__udyMemSequence++, Pop1, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJLL4()
+
+
+FUNCTION void j__udyFreeJLL5(Pjll_t Pjll, Word_t Pop1, Pjpm_t Pjpm)
+{
+        Word_t Words = JU_LEAF5POPTOWORDS(Pop1);
+
+        MALLOCBITS_TEST(Pjll_t, Pjll);
+        JudyFree((Pvoid_t) Pjll, Words);
+
+        Pjpm->jpm_TotalMemWords -= Words;
+
+        TRACE_FREE6("0x%x %8lu =  j__udyFreeJLL5(%lu), Words = %lu\n", Pjll,
+                    j__udyMemSequence++, Pop1, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJLL5()
+
+
+FUNCTION void j__udyFreeJLL6(Pjll_t Pjll, Word_t Pop1, Pjpm_t Pjpm)
+{
+        Word_t Words = JU_LEAF6POPTOWORDS(Pop1);
+
+        MALLOCBITS_TEST(Pjll_t, Pjll);
+        JudyFree((Pvoid_t) Pjll, Words);
+
+        Pjpm->jpm_TotalMemWords -= Words;
+
+        TRACE_FREE6("0x%x %8lu =  j__udyFreeJLL6(%lu), Words = %lu\n", Pjll,
+                    j__udyMemSequence++, Pop1, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJLL6()
+
+
+FUNCTION void j__udyFreeJLL7(Pjll_t Pjll, Word_t Pop1, Pjpm_t Pjpm)
+{
+        Word_t Words = JU_LEAF7POPTOWORDS(Pop1);
+
+        MALLOCBITS_TEST(Pjll_t, Pjll);
+        JudyFree((Pvoid_t) Pjll, Words);
+
+        Pjpm->jpm_TotalMemWords -= Words;
+
+        TRACE_FREE6("0x%x %8lu =  j__udyFreeJLL7(%lu), Words = %lu\n", Pjll,
+                    j__udyMemSequence++, Pop1, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJLL7()
+
+#endif // JU_64BIT
+
+
+// Note:  j__udyFreeJLW() receives a root pointer with NO root pointer type
+// bits present, that is, they are stripped by P_JLW():
+
+FUNCTION void j__udyFreeJLW(Pjlw_t Pjlw, Word_t Pop1, Pjpm_t Pjpm)
+{
+        Word_t Words = JU_LEAFWPOPTOWORDS(Pop1);
+
+        // MALLOCBITS_TEST(Pjlw_t, Pjlw);       // see above.
+        JudyFree((Pvoid_t) Pjlw, Words);
+
+        if (Pjpm) Pjpm->jpm_TotalMemWords -= Words;
+
+        TRACE_FREE6("0x%x %8lu =  j__udyFreeJLW(%lu), Words = %lu\n", Pjlw,
+                    j__udyMemSequence++, Pop1, Words, Pop1 - 1);
+
+
+} // j__udyFreeJLW()
+
+
+FUNCTION void j__udyFreeJLB1(Pjlb_t Pjlb, Pjpm_t Pjpm)
+{
+        Word_t Words = sizeof(jlb_t) / cJU_BYTESPERWORD;
+
+        MALLOCBITS_TEST(Pjlb_t, Pjlb);
+        JudyFree((Pvoid_t) Pjlb, Words);
+
+        Pjpm->jpm_TotalMemWords -= Words;
+
+        TRACE_FREE5("0x%x %8lu =  j__udyFreeJLB1(), Words = %lu\n", Pjlb,
+                    j__udyMemSequence++, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyFreeJLB1()
+
+
+#ifdef JUDYL
+
+FUNCTION void j__udyLFreeJV(Pjv_t Pjv, Word_t Pop1, Pjpm_t Pjpm)
+{
+        Word_t Words = JL_LEAFVPOPTOWORDS(Pop1);
+
+        MALLOCBITS_TEST(Pjv_t, Pjv);
+        JudyFree((Pvoid_t) Pjv, Words);
+
+        Pjpm->jpm_TotalMemWords -= Words;
+
+        TRACE_FREE6("0x%x %8lu = j__udyLFreeJV(%lu), Words = %lu\n", Pjv,
+                    j__udyMemSequence++, Pop1, Words, Pjpm->jpm_Pop0);
+
+
+} // j__udyLFreeJV()
+
+#endif // JUDYL
diff --git a/libs/klib/judy/JudyMemActive.c b/libs/klib/judy/JudyMemActive.c
new file mode 100644
index 0000000..d95a134
--- /dev/null
+++ b/libs/klib/judy/JudyMemActive.c
@@ -0,0 +1,257 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// Return number of bytes of memory used to support a Judy1/L array.
+// Compile with one of -DJUDY1 or -DJUDYL.
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error:  One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+FUNCTION static Word_t j__udyGetMemActive(Pjp_t);
+
+
+// ****************************************************************************
+// J U D Y   1   M E M   A C T I V E
+// J U D Y   L   M E M   A C T I V E
+
+#ifdef JUDY1
+FUNCTION Word_t Judy1MemActive
+#else
+FUNCTION Word_t JudyLMemActive
+#endif
+        (
+	Pcvoid_t PArray	        // from which to retrieve.
+        )
+{
+	if (PArray == (Pcvoid_t)NULL) return(0);
+
+	if (JU_LEAFW_POP0(PArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+        {
+	    Pjlw_t Pjlw = P_JLW(PArray);	// first word of leaf.
+            Word_t Words = Pjlw[0] + 1;		// population.
+#ifdef JUDY1
+            return((Words + 1) * sizeof(Word_t));
+#else
+            return(((Words * 2) + 1) * sizeof(Word_t));
+#endif
+        }
+	else
+	{
+	    Pjpm_t Pjpm = P_JPM(PArray);
+	    return(j__udyGetMemActive(&Pjpm->jpm_JP) + sizeof(jpm_t));
+	}
+
+} // JudyMemActive()
+
+
+// ****************************************************************************
+// __ J U D Y   G E T   M E M   A C T I V E
+
+FUNCTION static Word_t j__udyGetMemActive(
+	Pjp_t  Pjp)		// top of subtree.
+{
+	Word_t offset;		// in a branch.
+	Word_t Bytes = 0;	// actual bytes used at this level.
+	Word_t IdxSz;		// bytes per index in leaves
+
+	switch (JU_JPTYPE(Pjp))
+	{
+
+	case cJU_JPBRANCH_L2:
+	case cJU_JPBRANCH_L3:
+#ifdef JU_64BIT
+	case cJU_JPBRANCH_L4:
+	case cJU_JPBRANCH_L5:
+	case cJU_JPBRANCH_L6:
+	case cJU_JPBRANCH_L7:
+#endif
+	case cJU_JPBRANCH_L:
+	{
+	    Pjbl_t Pjbl = P_JBL(Pjp->jp_Addr);
+
+	    for (offset = 0; offset < (Pjbl->jbl_NumJPs); ++offset)
+	        Bytes += j__udyGetMemActive((Pjbl->jbl_jp) + offset);
+
+	    return(Bytes + sizeof(jbl_t));
+	}
+
+	case cJU_JPBRANCH_B2:
+	case cJU_JPBRANCH_B3:
+#ifdef JU_64BIT
+	case cJU_JPBRANCH_B4:
+	case cJU_JPBRANCH_B5:
+	case cJU_JPBRANCH_B6:
+	case cJU_JPBRANCH_B7:
+#endif
+	case cJU_JPBRANCH_B:
+	{
+	    Word_t subexp;
+	    Word_t jpcount;
+	    Pjbb_t Pjbb = P_JBB(Pjp->jp_Addr);
+
+	    for (subexp = 0; subexp < cJU_NUMSUBEXPB; ++subexp)
+	    {
+	        jpcount = j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, subexp));
+                Bytes  += jpcount * sizeof(jp_t);
+
+		for (offset = 0; offset < jpcount; ++offset)
+		{
+		    Bytes += j__udyGetMemActive(P_JP(JU_JBB_PJP(Pjbb, subexp))
+			   + offset);
+		}
+	    }
+
+	    return(Bytes + sizeof(jbb_t));
+	}
+
+	case cJU_JPBRANCH_U2:
+	case cJU_JPBRANCH_U3:
+#ifdef JU_64BIT
+	case cJU_JPBRANCH_U4:
+	case cJU_JPBRANCH_U5:
+	case cJU_JPBRANCH_U6:
+	case cJU_JPBRANCH_U7:
+#endif
+	case cJU_JPBRANCH_U:
+        {
+	    Pjbu_t Pjbu = P_JBU(Pjp->jp_Addr);
+
+            for (offset = 0; offset < cJU_BRANCHUNUMJPS; ++offset)
+	    {
+		if (((Pjbu->jbu_jp[offset].jp_Type) >= cJU_JPNULL1)
+		 && ((Pjbu->jbu_jp[offset].jp_Type) <= cJU_JPNULLMAX))
+		{
+		    continue;		// skip null JP to save time.
+		}
+
+	        Bytes += j__udyGetMemActive(Pjbu->jbu_jp + offset);
+	    }
+
+	    return(Bytes + sizeof(jbu_t));
+        }
+
+
+// -- Cases below here terminate and do not recurse. --
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+        case cJU_JPLEAF1: IdxSz = 1; goto LeafWords;
+#endif
+	case cJU_JPLEAF2: IdxSz = 2; goto LeafWords;
+	case cJU_JPLEAF3: IdxSz = 3; goto LeafWords;
+#ifdef JU_64BIT
+	case cJU_JPLEAF4: IdxSz = 4; goto LeafWords;
+	case cJU_JPLEAF5: IdxSz = 5; goto LeafWords;
+	case cJU_JPLEAF6: IdxSz = 6; goto LeafWords;
+	case cJU_JPLEAF7: IdxSz = 7; goto LeafWords;
+#endif
+LeafWords:
+
+#ifdef JUDY1
+            return(IdxSz * (JU_JPLEAF_POP0(Pjp) + 1));
+#else
+            return((IdxSz + sizeof(Word_t))
+		 * (JU_JPLEAF_POP0(Pjp) + 1));
+#endif
+	case cJU_JPLEAF_B1:
+	{
+#ifdef JUDY1
+            return(sizeof(jlb_t));
+#else
+            Bytes = (JU_JPLEAF_POP0(Pjp) + 1) * sizeof(Word_t);
+
+	    return(Bytes + sizeof(jlb_t));
+#endif
+	}
+
+	JUDY1CODE(case cJ1_JPFULLPOPU1: return(0);)
+
+#ifdef JUDY1
+#define J__Mpy 0
+#else
+#define J__Mpy sizeof(Word_t)
+#endif
+
+	case cJU_JPIMMED_1_01:	return(0);
+	case cJU_JPIMMED_2_01:	return(0);
+	case cJU_JPIMMED_3_01:	return(0);
+#ifdef JU_64BIT
+	case cJU_JPIMMED_4_01:	return(0);
+	case cJU_JPIMMED_5_01:	return(0);
+	case cJU_JPIMMED_6_01:	return(0);
+	case cJU_JPIMMED_7_01:	return(0);
+#endif
+
+	case cJU_JPIMMED_1_02:	return(J__Mpy * 2);
+	case cJU_JPIMMED_1_03:	return(J__Mpy * 3);
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_1_04:	return(J__Mpy * 4);
+	case cJU_JPIMMED_1_05:	return(J__Mpy * 5);
+	case cJU_JPIMMED_1_06:	return(J__Mpy * 6);
+	case cJU_JPIMMED_1_07:	return(J__Mpy * 7);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_1_08:	return(0);
+	case cJ1_JPIMMED_1_09:	return(0);
+	case cJ1_JPIMMED_1_10:	return(0);
+	case cJ1_JPIMMED_1_11:	return(0);
+	case cJ1_JPIMMED_1_12:	return(0);
+	case cJ1_JPIMMED_1_13:	return(0);
+	case cJ1_JPIMMED_1_14:	return(0);
+	case cJ1_JPIMMED_1_15:	return(0);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_2_02:	return(J__Mpy * 2);
+	case cJU_JPIMMED_2_03:	return(J__Mpy * 3);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_2_04:	return(0);
+	case cJ1_JPIMMED_2_05:	return(0);
+	case cJ1_JPIMMED_2_06:	return(0);
+	case cJ1_JPIMMED_2_07:	return(0);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_3_02:	return(J__Mpy * 2);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_3_03:	return(0);
+	case cJ1_JPIMMED_3_04:	return(0);
+	case cJ1_JPIMMED_3_05:	return(0);
+
+	case cJ1_JPIMMED_4_02:	return(0);
+	case cJ1_JPIMMED_4_03:	return(0);
+	case cJ1_JPIMMED_5_02:	return(0);
+	case cJ1_JPIMMED_5_03:	return(0);
+	case cJ1_JPIMMED_6_02:	return(0);
+	case cJ1_JPIMMED_7_02:	return(0);
+#endif
+
+	} // switch (JU_JPTYPE(Pjp))
+
+	return(0);			// to make some compilers happy.
+
+} // j__udyGetMemActive()
diff --git a/libs/klib/judy/JudyMemUsed.c b/libs/klib/judy/JudyMemUsed.c
new file mode 100644
index 0000000..e25f65b
--- /dev/null
+++ b/libs/klib/judy/JudyMemUsed.c
@@ -0,0 +1,59 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// Return number of bytes of memory used to support a Judy1/L array.
+// Compile with one of -DJUDY1 or -DJUDYL.
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error:  One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+#ifdef JUDY1
+FUNCTION Word_t Judy1MemUsed
+#else  // JUDYL
+FUNCTION Word_t JudyLMemUsed
+#endif
+        (
+	Pcvoid_t PArray 	// from which to retrieve.
+        )
+{
+	Word_t	 Words = 0;
+
+        if (PArray == (Pcvoid_t) NULL) return(0);
+
+	if (JU_LEAFW_POP0(PArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+	{
+	    Pjlw_t Pjlw = P_JLW(PArray);		// first word of leaf.
+	    Words = JU_LEAFWPOPTOWORDS(Pjlw[0] + 1);	// based on pop1.
+	}
+	else
+	{
+	    Pjpm_t Pjpm = P_JPM(PArray);
+	    Words = Pjpm->jpm_TotalMemWords;
+	}
+
+	return(Words * sizeof(Word_t));		// convert to bytes.
+
+} // Judy1MemUsed() / JudyLMemUsed()
diff --git a/libs/klib/judy/JudyNext.c b/libs/klib/judy/JudyNext.c
new file mode 100644
index 0000000..4af06e2
--- /dev/null
+++ b/libs/klib/judy/JudyNext.c
@@ -0,0 +1,2 @@
+#define JUDYNEXT 1
+#include "JudyPrevNext.c"
diff --git a/libs/klib/judy/JudyNextEmpty.c b/libs/klib/judy/JudyNextEmpty.c
new file mode 100644
index 0000000..73b0926
--- /dev/null
+++ b/libs/klib/judy/JudyNextEmpty.c
@@ -0,0 +1,2 @@
+#define JUDYNEXT 1
+#include "JudyPrevNextEmpty.c"
diff --git a/libs/klib/judy/JudyPrev.c b/libs/klib/judy/JudyPrev.c
new file mode 100644
index 0000000..3d9f484
--- /dev/null
+++ b/libs/klib/judy/JudyPrev.c
@@ -0,0 +1,2 @@
+#define JUDYPREV 1
+#include "JudyPrevNext.c"
diff --git a/libs/klib/judy/JudyPrevEmpty.c b/libs/klib/judy/JudyPrevEmpty.c
new file mode 100644
index 0000000..f9a182b
--- /dev/null
+++ b/libs/klib/judy/JudyPrevEmpty.c
@@ -0,0 +1,2 @@
+#define JUDYPREV 1
+#include "JudyPrevNextEmpty.c"
diff --git a/libs/klib/judy/JudyPrevNext.c b/libs/klib/judy/JudyPrevNext.c
new file mode 100644
index 0000000..1131eef
--- /dev/null
+++ b/libs/klib/judy/JudyPrevNext.c
@@ -0,0 +1,1888 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// Judy*Prev() and Judy*Next() functions for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+//
+// Compile with -DJUDYNEXT for the Judy*Next() function; otherwise defaults to
+// Judy*Prev().
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error:  One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifndef JUDYNEXT
+#ifndef JUDYPREV
+#define	JUDYPREV 1		// neither set => use default.
+#endif
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+
+// ****************************************************************************
+// J U D Y   1   P R E V
+// J U D Y   1   N E X T
+// J U D Y   L   P R E V
+// J U D Y   L   N E X T
+//
+// See the manual entry for the API.
+//
+// OVERVIEW OF Judy*Prev():
+//
+// Use a reentrant switch statement (state machine, SM1 = "get") to decode the
+// callers *PIndex-1, starting with the (PArray), through branches, if
+// any, down to an immediate or a leaf.  Look for *PIndex-1 in that leaf, and
+// if found, return it.
+//
+// A dead end is either a branch that does not contain a JP for the appropriate
+// digit in *PIndex-1, or a leaf that does not contain the undecoded digits of
+// *PIndex-1.  Upon reaching a dead end, backtrack through the leaf/branches
+// that were just traversed, using a list (history) of parent JPs that is built
+// while going forward in SM1Get.  Start with the current leaf or branch.  In a
+// backtracked leaf, look for an Index less than *PIndex-1.  In each
+// backtracked branch, look "sideways" for the next JP, if any, lower than the
+// one for the digit (from *PIndex-1) that was previously decoded.  While
+// backtracking, if a leaf has no previous Index or a branch has no lower JP,
+// go to its parent branch in turn.  Upon reaching the JRP, return failure, "no
+// previous Index".  The backtrack process is sufficiently different from
+// SM1Get to merit its own separate reentrant switch statement (SM2 =
+// "backtrack").
+//
+// While backtracking, upon finding a lower JP in a branch, there is certain to
+// be a "prev" Index under that JP (unless the Judy array is corrupt).
+// Traverse forward again, this time taking the last (highest, right-most) JP
+// in each branch, and the last (highest) Index upon reaching an immediate or a
+// leaf.  This traversal is sufficiently different from SM1Get and SM2Backtrack
+// to merit its own separate reentrant switch statement (SM3 = "findlimit").
+//
+// "Decode" bytes in JPs complicate this process a little.  In SM1Get, when a
+// JP is a narrow pointer, that is, when states are skipped (so the skipped
+// digits are stored in jp_DcdPopO), compare the relevant digits to the same
+// digits in *PIndex-1.  If they are EQUAL, proceed in SM1Get as before.  If
+// jp_DcdPopOs digits are GREATER, treat the JP as a dead end and proceed in
+// SM2Backtrack.  If jp_DcdPopOs digits are LESS, treat the JP as if it had
+// just been found during a backtrack and proceed directly in SM3Findlimit.
+//
+// Note that Decode bytes can be ignored in SM3Findlimit; they dont matter.
+// Also note that in practice the Decode bytes are routinely compared with
+// *PIndex-1 because thats simpler and no slower than first testing for
+// narrowness.
+//
+// Decode bytes also make it unnecessary to construct the Index to return (the
+// revised *PIndex) during the search.  This step is deferred until finding an
+// Index during backtrack or findlimit, before returning it.  The first digit
+// of *PIndex is derived (saved) based on which JP is used in a JRP branch.
+// The remaining digits are obtained from the jp_DcdPopO field in the JP (if
+// any) above the immediate or leaf containing the found (prev) Index, plus the
+// remaining digit(s) in the immediate or leaf itself.  In the case of a LEAFW,
+// the Index to return is found directly in the leaf.
+//
+// Note:  Theoretically, as described above, upon reaching a dead end, SM1Get
+// passes control to SM2Backtrack to look sideways, even in a leaf.  Actually
+// its a little more efficient for the SM1Get leaf cases to shortcut this and
+// take care of the sideways searches themselves.  Hence the history list only
+// contains branch JPs, and SM2Backtrack only handles branches.  In fact, even
+// the branch handling cases in SM1Get do some shortcutting (sideways
+// searching) to avoid pushing history and calling SM2Backtrack unnecessarily.
+//
+// Upon reaching an Index to return after backtracking, *PIndex must be
+// modified to the found Index.  In principle this could be done by building
+// the Index from a saved rootdigit (in the top branch) plus the Dcd bytes from
+// the parent JP plus the appropriate Index bytes from the leaf.  However,
+// Immediates are difficult because their parent JPs lack one (last) digit.  So
+// instead just build the *PIndex to return "top down" while backtracking and
+// findlimiting.
+//
+// This function is written iteratively for speed, rather than recursively.
+//
+// CAVEATS:
+//
+// Why use a backtrack list (history stack), since it has finite size?  The
+// size is small for Judy on both 32-bit and 64-bit systems, and a list (really
+// just an array) is fast to maintain and use.  Other alternatives include
+// doing a lookahead (lookaside) in each branch while traversing forward
+// (decoding), and restarting from the top upon a dead end.
+//
+// A lookahead means noting the last branch traversed which contained a
+// non-null JP lower than the one specified by a digit in *PIndex-1, and
+// returning to that point for SM3Findlimit.  This seems like a good idea, and
+// should be pretty cheap for linear and bitmap branches, but it could result
+// in up to 31 unnecessary additional cache line fills (in extreme cases) for
+// every uncompressed branch traversed.  We have considered means of attaching
+// to or hiding within an uncompressed branch (in null JPs) a "cache line map"
+// or other structure, such as an offset to the next non-null JP, that would
+// speed this up, but it seems unnecessary merely to avoid having a
+// finite-length list (array).  (If JudySL is ever made "native", the finite
+// list length will be an issue.)
+//
+// Restarting at the top of the Judy array after a dead end requires a careful
+// modification of *PIndex-1 to decrement the digit for the parent branch and
+// set the remaining lower digits to all 1s.  This must be repeated each time a
+// parent branch contains another dead end, so even though it should all happen
+// in cache, the CPU time can be excessive.  (For JudySL or an equivalent
+// "infinitely deep" Judy array, consider a hybrid of a large, finite,
+// "circular" list and a restart-at-top when the list is backtracked to
+// exhaustion.)
+//
+// Why search for *PIndex-1 instead of *PIndex during SM1Get?  In rare
+// instances this prevents an unnecessary decode down the wrong path followed
+// by a backtrack; its pretty cheap to set up initially; and it means the
+// SM1Get machine can simply return if/when it finds that Index.
+//
+// TBD:  Wed like to enhance this function to make successive searches faster.
+// This would require saving some previous state, including the previous Index
+// returned, and in which leaf it was found.  If the next call is for the same
+// Index and the array has not been modified, start at the same leaf.  This
+// should be much easier to implement since this is iterative rather than
+// recursive code.
+//
+// VARIATIONS FOR Judy*Next():
+//
+// The Judy*Next() code is nearly a perfect mirror of the Judy*Prev() code.
+// See the Judy*Prev() overview comments, and mentally switch the following:
+//
+// - "*PIndex-1"  => "*PIndex+1"
+// - "less than"  => "greater than"
+// - "lower"      => "higher"
+// - "lowest"     => "highest"
+// - "next-left"  => "next-right"
+// - "right-most" => "left-most"
+//
+// Note:  SM3Findlimit could be called SM3Findmax/SM3Findmin, but a common name
+// for both Prev and Next means many fewer ifdefs in this code.
+//
+// TBD:  Currently this code traverses a JP whether its expanse is partially or
+// completely full (populated).  For Judy1 (only), since there is no value area
+// needed, consider shortcutting to a "success" return upon encountering a full
+// JP in SM1Get (or even SM3Findlimit?)  A full JP looks like this:
+//
+//	(((JU_JPDCDPOP0(Pjp) ^ cJU_ALLONES) & cJU_POP0MASK(cLevel)) == 0)
+
+#ifdef JUDY1
+#ifdef JUDYPREV
+FUNCTION int Judy1Prev
+#else
+FUNCTION int Judy1Next
+#endif
+#else
+#ifdef JUDYPREV
+FUNCTION PPvoid_t JudyLPrev
+#else
+FUNCTION PPvoid_t JudyLNext
+#endif
+#endif
+        (
+	Pcvoid_t  PArray,	// Judy array to search.
+	Word_t *  PIndex,	// starting point and result.
+	PJError_t PJError	// optional, for returning error info.
+        )
+{
+	Pjp_t	  Pjp, Pjp2;	// current JPs.
+	Pjbl_t	  Pjbl;		// Pjp->jp_Addr masked and cast to types:
+	Pjbb_t	  Pjbb;
+	Pjbu_t	  Pjbu;
+
+// Note:  The following initialization is not strictly required but it makes
+// gcc -Wall happy because there is an "impossible" path from Immed handling to
+// SM1LeafLImm code that looks like Pjll might be used before set:
+
+	Pjll_t	  Pjll = (Pjll_t) NULL;
+	Word_t	  state;	// current state in SM.
+	Word_t	  digit;	// next digit to decode from Index.
+
+// Note:  The following initialization is not strictly required but it makes
+// gcc -Wall happy because there is an "impossible" path from Immed handling to
+// SM1LeafLImm code (for JudyL & JudyPrev only) that looks like pop1 might be
+// used before set:
+
+#if (defined(JUDYL) && defined(JUDYPREV))
+	Word_t	  pop1 = 0;	// in a leaf.
+#else
+	Word_t	  pop1;		// in a leaf.
+#endif
+	int	  offset;	// linear branch/leaf, from j__udySearchLeaf*().
+	int	  subexp;	// subexpanse in a bitmap branch.
+	Word_t	  bitposmask;	// bit in bitmap for Index.
+
+// History for SM2Backtrack:
+//
+// For a given histnum, APjphist[histnum] is a parent JP that points to a
+// branch, and Aoffhist[histnum] is the offset of the NEXT JP in the branch to
+// which the parent JP points.  The meaning of Aoffhist[histnum] depends on the
+// type of branch to which the parent JP points:
+//
+// Linear:  Offset of the next JP in the JP list.
+//
+// Bitmap:  Which subexpanse, plus the offset of the next JP in the
+// subexpanses JP list (to avoid bit-counting again), plus for Judy*Next(),
+// hidden one byte to the left, which digit, because Judy*Next() also needs
+// this.
+//
+// Uncompressed:  Digit, which is actually the offset of the JP in the branch.
+//
+// Note:  Only branch JPs are stored in APjphist[] because, as explained
+// earlier, SM1Get shortcuts sideways searches in leaves (and even in branches
+// in some cases), so SM2Backtrack only handles branches.
+
+#define	HISTNUMMAX cJU_ROOTSTATE	// maximum branches traversable.
+	Pjp_t	APjphist[HISTNUMMAX];	// list of branch JPs traversed.
+	int	Aoffhist[HISTNUMMAX];	// list of next JP offsets; see above.
+	int	histnum = 0;		// number of JPs now in list.
+
+
+// ----------------------------------------------------------------------------
+// M A C R O S
+//
+// These are intended to make the code a bit more readable and less redundant.
+
+
+// "PUSH" AND "POP" Pjp AND offset ON HISTORY STACKS:
+//
+// Note:  Ensure a corrupt Judy array does not overflow *hist[].  Meanwhile,
+// underflowing *hist[] simply means theres no more room to backtrack =>
+// "no previous/next Index".
+
+#define	HISTPUSH(Pjp,Offset)			\
+	APjphist[histnum] = (Pjp);		\
+	Aoffhist[histnum] = (Offset);		\
+						\
+	if (++histnum >= HISTNUMMAX)		\
+	{					\
+	    JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT) \
+	    JUDY1CODE(return(JERRI );)		\
+	    JUDYLCODE(return(PPJERR);)		\
+	}
+
+#define	HISTPOP(Pjp,Offset)			\
+	if ((histnum--) < 1) JU_RET_NOTFOUND;	\
+	(Pjp)	 = APjphist[histnum];		\
+	(Offset) = Aoffhist[histnum]
+
+// How to pack/unpack Aoffhist[] values for bitmap branches:
+
+#ifdef JUDYPREV
+
+#define	HISTPUSHBOFF(Subexp,Offset,Digit)	  \
+	(((Subexp) * cJU_BITSPERSUBEXPB) | (Offset))
+
+#define	HISTPOPBOFF(Subexp,Offset,Digit)	  \
+	(Subexp)  = (Offset) / cJU_BITSPERSUBEXPB; \
+	(Offset) %= cJU_BITSPERSUBEXPB
+#else
+
+#define	HISTPUSHBOFF(Subexp,Offset,Digit)	 \
+	 (((Digit) << cJU_BITSPERBYTE)		 \
+	| ((Subexp) * cJU_BITSPERSUBEXPB) | (Offset))
+
+#define	HISTPOPBOFF(Subexp,Offset,Digit)	 \
+	(Digit)   = (Offset) >> cJU_BITSPERBYTE; \
+	(Subexp)  = ((Offset) & JU_LEASTBYTESMASK(1)) / cJU_BITSPERSUBEXPB; \
+	(Offset) %= cJU_BITSPERSUBEXPB
+#endif
+
+
+// CHECK FOR NULL JP:
+
+#define	JPNULL(Type)  (((Type) >= cJU_JPNULL1) && ((Type) <= cJU_JPNULLMAX))
+
+
+// SEARCH A BITMAP:
+//
+// This is a weak analog of j__udySearchLeaf*() for bitmaps.  Return the actual
+// or next-left position, base 0, of Digit in the single uint32_t bitmap, also
+// given a Bitposmask for Digit.
+//
+// Unlike j__udySearchLeaf*(), the offset is not returned bit-complemented if
+// Digits bit is unset, because the caller can check the bitmap themselves to
+// determine that.  Also, if Digits bit is unset, the returned offset is to
+// the next-left JP (including -1), not to the "ideal" position for the Index =
+// next-right JP.
+//
+// Shortcut and skip calling j__udyCountBits*() if the bitmap is full, in which
+// case (Digit % cJU_BITSPERSUBEXP*) itself is the base-0 offset.
+//
+// TBD for Judy*Next():  Should this return next-right instead of next-left?
+// That is, +1 from current value?  Maybe not, if Digits bit IS set, +1 would
+// be wrong.
+
+#define	SEARCHBITMAPB(Bitmap,Digit,Bitposmask)				\
+	(((Bitmap) == cJU_FULLBITMAPB) ? (Digit % cJU_BITSPERSUBEXPB) :	\
+	 j__udyCountBitsB((Bitmap) & JU_MASKLOWERINC(Bitposmask)) - 1)
+
+#define	SEARCHBITMAPL(Bitmap,Digit,Bitposmask)				\
+	(((Bitmap) == cJU_FULLBITMAPL) ? (Digit % cJU_BITSPERSUBEXPL) :	\
+	 j__udyCountBitsL((Bitmap) & JU_MASKLOWERINC(Bitposmask)) - 1)
+
+#ifdef JUDYPREV
+// Equivalent to search for the highest offset in Bitmap:
+
+#define	SEARCHBITMAPMAXB(Bitmap)				  \
+	(((Bitmap) == cJU_FULLBITMAPB) ? cJU_BITSPERSUBEXPB - 1 : \
+	 j__udyCountBitsB(Bitmap) - 1)
+
+#define	SEARCHBITMAPMAXL(Bitmap)				  \
+	(((Bitmap) == cJU_FULLBITMAPL) ? cJU_BITSPERSUBEXPL - 1 : \
+	 j__udyCountBitsL(Bitmap) - 1)
+#endif
+
+
+// CHECK DECODE BYTES:
+//
+// Check Decode bytes in a JP against the equivalent portion of *PIndex.  If
+// *PIndex is lower (for Judy*Prev()) or higher (for Judy*Next()), this JP is a
+// dead end (the same as if it had been absent in a linear or bitmap branch or
+// null in an uncompressed branch), enter SM2Backtrack; otherwise enter
+// SM3Findlimit to find the highest/lowest Index under this JP, as if the code
+// had already backtracked to this JP.
+
+#ifdef JUDYPREV
+#define	CDcmp__ <
+#else
+#define	CDcmp__ >
+#endif
+
+#define	CHECKDCD(cState)						\
+	if (JU_DCDNOTMATCHINDEX(*PIndex, Pjp, cState))	                \
+	{								\
+	    if ((*PIndex		& cJU_DCDMASK(cState))		\
+	      CDcmp__(JU_JPDCDPOP0(Pjp) & cJU_DCDMASK(cState)))		\
+	    {								\
+		goto SM2Backtrack;					\
+	    }								\
+	    goto SM3Findlimit;						\
+	}
+
+
+// PREPARE TO HANDLE A LEAFW OR JRP BRANCH IN SM1:
+//
+// Extract a state-dependent digit from Index in a "constant" way, then jump to
+// common code for multiple cases.
+
+#define	SM1PREPB(cState,Next)				\
+	state = (cState);				\
+	digit = JU_DIGITATSTATE(*PIndex, cState);	\
+	goto Next
+
+
+// PREPARE TO HANDLE A LEAFW OR JRP BRANCH IN SM3:
+//
+// Optionally save Dcd bytes into *PIndex, then save state and jump to common
+// code for multiple cases.
+
+#define	SM3PREPB_DCD(cState,Next)			\
+	JU_SETDCD(*PIndex, Pjp, cState);	        \
+	SM3PREPB(cState,Next)
+
+#define	SM3PREPB(cState,Next)  state = (cState); goto Next
+
+
+// ----------------------------------------------------------------------------
+// CHECK FOR SHORTCUTS:
+//
+// Error out if PIndex is null.  Execute JU_RET_NOTFOUND if the Judy array is
+// empty or *PIndex is already the minimum/maximum Index possible.
+//
+// Note:  As documented, in case of failure *PIndex may be modified.
+
+	if (PIndex == (PWord_t) NULL)
+	{
+	    JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+	    JUDY1CODE(return(JERRI );)
+	    JUDYLCODE(return(PPJERR);)
+	}
+
+#ifdef JUDYPREV
+	if ((PArray == (Pvoid_t) NULL) || ((*PIndex)-- == 0))
+#else
+	if ((PArray == (Pvoid_t) NULL) || ((*PIndex)++ == cJU_ALLONES))
+#endif
+	    JU_RET_NOTFOUND;
+
+
+// HANDLE JRP:
+//
+// Before even entering SM1Get, check the JRP type.  For JRP branches, traverse
+// the JPM; handle LEAFW leaves directly; but look for the most common cases
+// first.
+
+// ROOT-STATE LEAF that starts with a Pop0 word; just look within the leaf:
+//
+// If *PIndex is in the leaf, return it; otherwise return the Index, if any,
+// below where it would belong.
+
+	if (JU_LEAFW_POP0(PArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+	{
+	    Pjlw_t Pjlw = P_JLW(PArray);	// first word of leaf.
+	    pop1 = Pjlw[0] + 1;
+
+	    if ((offset = j__udySearchLeafW(Pjlw + 1, pop1, *PIndex))
+		>= 0)				// Index is present.
+	    {
+		assert(offset < pop1);			  // in expected range.
+		JU_RET_FOUND_LEAFW(Pjlw, pop1, offset); // *PIndex is set.
+	    }
+
+#ifdef JUDYPREV
+	    if ((offset = ~offset) == 0)	// no next-left Index.
+#else
+	    if ((offset = ~offset) >= pop1)	// no next-right Index.
+#endif
+		JU_RET_NOTFOUND;
+
+	    assert(offset <= pop1);		// valid result.
+
+#ifdef JUDYPREV
+	    *PIndex = Pjlw[offset--];		// next-left Index, base 1.
+#else
+	    *PIndex = Pjlw[offset + 1];		// next-right Index, base 1.
+#endif
+	    JU_RET_FOUND_LEAFW(Pjlw, pop1, offset);	// base 0.
+
+	}
+	else	// JRP BRANCH
+	{
+	    Pjpm_t Pjpm = P_JPM(PArray);
+	    Pjp = &(Pjpm->jpm_JP);
+
+//	    goto SM1Get;
+	}
+
+// ============================================================================
+// STATE MACHINE 1 -- GET INDEX:
+//
+// Search for *PIndex (already decremented/incremented so as to be inclusive).
+// If found, return it.  Otherwise in theory hand off to SM2Backtrack or
+// SM3Findlimit, but in practice "shortcut" by first sideways searching the
+// current branch or leaf upon hitting a dead end.  During sideways search,
+// modify *PIndex to a new path taken.
+//
+// ENTRY:  Pjp points to next JP to interpret, whose Decode bytes have not yet
+// been checked.  This JP is not yet listed in history.
+//
+// Note:  Check Decode bytes at the start of each loop, not after looking up a
+// new JP, so its easy to do constant shifts/masks, although this requires
+// cautious handling of Pjp, offset, and *hist[] for correct entry to
+// SM2Backtrack.
+//
+// EXIT:  Return, or branch to SM2Backtrack or SM3Findlimit with correct
+// interface, as described elsewhere.
+//
+// WARNING:  For run-time efficiency the following cases replicate code with
+// varying constants, rather than using common code with variable values!
+
+SM1Get:				// return here for next branch/leaf.
+
+	switch (JU_JPTYPE(Pjp))
+	{
+
+
+// ----------------------------------------------------------------------------
+// LINEAR BRANCH:
+//
+// Check Decode bytes, if any, in the current JP, then search for a JP for the
+// next digit in *PIndex.
+
+	case cJU_JPBRANCH_L2: CHECKDCD(2); SM1PREPB(2, SM1BranchL);
+	case cJU_JPBRANCH_L3: CHECKDCD(3); SM1PREPB(3, SM1BranchL);
+#ifdef JU_64BIT
+	case cJU_JPBRANCH_L4: CHECKDCD(4); SM1PREPB(4, SM1BranchL);
+	case cJU_JPBRANCH_L5: CHECKDCD(5); SM1PREPB(5, SM1BranchL);
+	case cJU_JPBRANCH_L6: CHECKDCD(6); SM1PREPB(6, SM1BranchL);
+	case cJU_JPBRANCH_L7: CHECKDCD(7); SM1PREPB(7, SM1BranchL);
+#endif
+	case cJU_JPBRANCH_L:		   SM1PREPB(cJU_ROOTSTATE, SM1BranchL);
+
+// Common code (state-independent) for all cases of linear branches:
+
+SM1BranchL:
+	    Pjbl = P_JBL(Pjp->jp_Addr);
+
+// Found JP matching current digit in *PIndex; record parent JP and the next
+// JPs offset, and iterate to the next JP:
+
+	    if ((offset = j__udySearchLeaf1((Pjll_t) (Pjbl->jbl_Expanse),
+					     Pjbl->jbl_NumJPs, digit)) >= 0)
+	    {
+		HISTPUSH(Pjp, offset);
+		Pjp = (Pjbl->jbl_jp) + offset;
+		goto SM1Get;
+	    }
+
+// Dead end, no JP in BranchL for next digit in *PIndex:
+//
+// Get the ideal location of digits JP, and if theres no next-left/right JP
+// in the BranchL, shortcut and start backtracking one level up; ignore the
+// current Pjp because it points to a BranchL with no next-left/right JP.
+
+#ifdef JUDYPREV
+	    if ((offset = (~offset) - 1) < 0)	// no next-left JP in BranchL.
+#else
+	    if ((offset = (~offset)) >= Pjbl->jbl_NumJPs)  // no next-right.
+#endif
+		goto SM2Backtrack;
+
+// Theres a next-left/right JP in the current BranchL; save its digit in
+// *PIndex and shortcut to SM3Findlimit:
+
+	    JU_SETDIGIT(*PIndex, Pjbl->jbl_Expanse[offset], state);
+	    Pjp = (Pjbl->jbl_jp) + offset;
+	    goto SM3Findlimit;
+
+
+// ----------------------------------------------------------------------------
+// BITMAP BRANCH:
+//
+// Check Decode bytes, if any, in the current JP, then look for a JP for the
+// next digit in *PIndex.
+
+	case cJU_JPBRANCH_B2: CHECKDCD(2); SM1PREPB(2, SM1BranchB);
+	case cJU_JPBRANCH_B3: CHECKDCD(3); SM1PREPB(3, SM1BranchB);
+#ifdef JU_64BIT
+	case cJU_JPBRANCH_B4: CHECKDCD(4); SM1PREPB(4, SM1BranchB);
+	case cJU_JPBRANCH_B5: CHECKDCD(5); SM1PREPB(5, SM1BranchB);
+	case cJU_JPBRANCH_B6: CHECKDCD(6); SM1PREPB(6, SM1BranchB);
+	case cJU_JPBRANCH_B7: CHECKDCD(7); SM1PREPB(7, SM1BranchB);
+#endif
+	case cJU_JPBRANCH_B:		   SM1PREPB(cJU_ROOTSTATE, SM1BranchB);
+
+// Common code (state-independent) for all cases of bitmap branches:
+
+SM1BranchB:
+	    Pjbb = P_JBB(Pjp->jp_Addr);
+
+// Locate the digits JP in the subexpanse list, if present, otherwise the
+// offset of the next-left JP, if any:
+
+	    subexp     = digit / cJU_BITSPERSUBEXPB;
+	    assert(subexp < cJU_NUMSUBEXPB);	// falls in expected range.
+	    bitposmask = JU_BITPOSMASKB(digit);
+	    offset     = SEARCHBITMAPB(JU_JBB_BITMAP(Pjbb, subexp), digit,
+				       bitposmask);
+	    // right range:
+	    assert((offset >= -1) && (offset < (int) cJU_BITSPERSUBEXPB));
+
+// Found JP matching current digit in *PIndex:
+//
+// Record the parent JP and the next JPs offset; and iterate to the next JP.
+
+//	    if (JU_BITMAPTESTB(Pjbb, digit))			// slower.
+	    if (JU_JBB_BITMAP(Pjbb, subexp) & bitposmask)	// faster.
+	    {
+		// not negative since at least one bit is set:
+		assert(offset >= 0);
+
+		HISTPUSH(Pjp, HISTPUSHBOFF(subexp, offset, digit));
+
+		if ((Pjp = P_JP(JU_JBB_PJP(Pjbb, subexp))) == (Pjp_t) NULL)
+		{
+		    JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+		    JUDY1CODE(return(JERRI );)
+		    JUDYLCODE(return(PPJERR);)
+		}
+
+		Pjp += offset;
+		goto SM1Get;		// iterate to next JP.
+	    }
+
+// Dead end, no JP in BranchB for next digit in *PIndex:
+//
+// If theres a next-left/right JP in the current BranchB, shortcut to
+// SM3Findlimit.  Note:  offset is already set to the correct value for the
+// next-left/right JP.
+
+#ifdef JUDYPREV
+	    if (offset >= 0)		// next-left JP is in this subexpanse.
+		goto SM1BranchBFindlimit;
+
+	    while (--subexp >= 0)		// search next-left subexpanses.
+#else
+	    if (JU_JBB_BITMAP(Pjbb, subexp) & JU_MASKHIGHEREXC(bitposmask))
+	    {
+		++offset;			// next-left => next-right.
+		goto SM1BranchBFindlimit;
+	    }
+
+	    while (++subexp < cJU_NUMSUBEXPB)	// search next-right subexps.
+#endif
+	    {
+		if (! JU_JBB_PJP(Pjbb, subexp)) continue;  // empty subexpanse.
+
+#ifdef JUDYPREV
+		offset = SEARCHBITMAPMAXB(JU_JBB_BITMAP(Pjbb, subexp));
+		// expected range:
+		assert((offset >= 0) && (offset < cJU_BITSPERSUBEXPB));
+#else
+		offset = 0;
+#endif
+
+// Save the next-left/right JPs digit in *PIndex:
+
+SM1BranchBFindlimit:
+		JU_BITMAPDIGITB(digit, subexp, JU_JBB_BITMAP(Pjbb, subexp),
+				offset);
+		JU_SETDIGIT(*PIndex, digit, state);
+
+		if ((Pjp = P_JP(JU_JBB_PJP(Pjbb, subexp))) == (Pjp_t) NULL)
+		{
+		    JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+		    JUDY1CODE(return(JERRI );)
+		    JUDYLCODE(return(PPJERR);)
+		}
+
+		Pjp += offset;
+		goto SM3Findlimit;
+	    }
+
+// Theres no next-left/right JP in the BranchB:
+//
+// Shortcut and start backtracking one level up; ignore the current Pjp because
+// it points to a BranchB with no next-left/right JP.
+
+	    goto SM2Backtrack;
+
+
+// ----------------------------------------------------------------------------
+// UNCOMPRESSED BRANCH:
+//
+// Check Decode bytes, if any, in the current JP, then look for a JP for the
+// next digit in *PIndex.
+
+	case cJU_JPBRANCH_U2: CHECKDCD(2); SM1PREPB(2, SM1BranchU);
+	case cJU_JPBRANCH_U3: CHECKDCD(3); SM1PREPB(3, SM1BranchU);
+#ifdef JU_64BIT
+	case cJU_JPBRANCH_U4: CHECKDCD(4); SM1PREPB(4, SM1BranchU);
+	case cJU_JPBRANCH_U5: CHECKDCD(5); SM1PREPB(5, SM1BranchU);
+	case cJU_JPBRANCH_U6: CHECKDCD(6); SM1PREPB(6, SM1BranchU);
+	case cJU_JPBRANCH_U7: CHECKDCD(7); SM1PREPB(7, SM1BranchU);
+#endif
+	case cJU_JPBRANCH_U:		   SM1PREPB(cJU_ROOTSTATE, SM1BranchU);
+
+// Common code (state-independent) for all cases of uncompressed branches:
+
+SM1BranchU:
+	    Pjbu = P_JBU(Pjp->jp_Addr);
+	    Pjp2 = (Pjbu->jbu_jp) + digit;
+
+// Found JP matching current digit in *PIndex:
+//
+// Record the parent JP and the next JPs digit, and iterate to the next JP.
+//
+// TBD:  Instead of this, just goto SM1Get, and add cJU_JPNULL* cases to the
+// SM1Get state machine?  Then backtrack?  However, it means you cant detect
+// an inappropriate cJU_JPNULL*, when it occurs in other than a BranchU, and
+// return JU_RET_CORRUPT.
+
+	    if (! JPNULL(JU_JPTYPE(Pjp2)))	// digit has a JP.
+	    {
+		HISTPUSH(Pjp, digit);
+		Pjp = Pjp2;
+		goto SM1Get;
+	    }
+
+// Dead end, no JP in BranchU for next digit in *PIndex:
+//
+// Search for a next-left/right JP in the current BranchU, and if one is found,
+// save its digit in *PIndex and shortcut to SM3Findlimit:
+
+#ifdef JUDYPREV
+	    while (digit >= 1)
+	    {
+		Pjp = (Pjbu->jbu_jp) + (--digit);
+#else
+	    while (digit < cJU_BRANCHUNUMJPS - 1)
+	    {
+		Pjp = (Pjbu->jbu_jp) + (++digit);
+#endif
+		if (JPNULL(JU_JPTYPE(Pjp))) continue;
+
+		JU_SETDIGIT(*PIndex, digit, state);
+		goto SM3Findlimit;
+	    }
+
+// Theres no next-left/right JP in the BranchU:
+//
+// Shortcut and start backtracking one level up; ignore the current Pjp because
+// it points to a BranchU with no next-left/right JP.
+
+	    goto SM2Backtrack;
+
+
+// ----------------------------------------------------------------------------
+// LINEAR LEAF:
+//
+// Check Decode bytes, if any, in the current JP, then search the leaf for
+// *PIndex.
+
+#define	SM1LEAFL(Func)					\
+	Pjll   = P_JLL(Pjp->jp_Addr);			\
+	pop1   = JU_JPLEAF_POP0(Pjp) + 1;	        \
+	offset = Func(Pjll, pop1, *PIndex);		\
+	goto SM1LeafLImm
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+	case cJU_JPLEAF1:  CHECKDCD(1); SM1LEAFL(j__udySearchLeaf1);
+#endif
+	case cJU_JPLEAF2:  CHECKDCD(2); SM1LEAFL(j__udySearchLeaf2);
+	case cJU_JPLEAF3:  CHECKDCD(3); SM1LEAFL(j__udySearchLeaf3);
+
+#ifdef JU_64BIT
+	case cJU_JPLEAF4:  CHECKDCD(4); SM1LEAFL(j__udySearchLeaf4);
+	case cJU_JPLEAF5:  CHECKDCD(5); SM1LEAFL(j__udySearchLeaf5);
+	case cJU_JPLEAF6:  CHECKDCD(6); SM1LEAFL(j__udySearchLeaf6);
+	case cJU_JPLEAF7:  CHECKDCD(7); SM1LEAFL(j__udySearchLeaf7);
+#endif
+
+// Common code (state-independent) for all cases of linear leaves and
+// immediates:
+
+SM1LeafLImm:
+	    if (offset >= 0)		// *PIndex is in LeafL / Immed.
+#ifdef JUDY1
+		JU_RET_FOUND;
+#else
+	    {				// JudyL is trickier...
+		switch (JU_JPTYPE(Pjp))
+		{
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+		case cJU_JPLEAF1: JU_RET_FOUND_LEAF1(Pjll, pop1, offset);
+#endif
+		case cJU_JPLEAF2: JU_RET_FOUND_LEAF2(Pjll, pop1, offset);
+		case cJU_JPLEAF3: JU_RET_FOUND_LEAF3(Pjll, pop1, offset);
+#ifdef JU_64BIT
+		case cJU_JPLEAF4: JU_RET_FOUND_LEAF4(Pjll, pop1, offset);
+		case cJU_JPLEAF5: JU_RET_FOUND_LEAF5(Pjll, pop1, offset);
+		case cJU_JPLEAF6: JU_RET_FOUND_LEAF6(Pjll, pop1, offset);
+		case cJU_JPLEAF7: JU_RET_FOUND_LEAF7(Pjll, pop1, offset);
+#endif
+
+		case cJU_JPIMMED_1_01:
+		case cJU_JPIMMED_2_01:
+		case cJU_JPIMMED_3_01:
+#ifdef JU_64BIT
+		case cJU_JPIMMED_4_01:
+		case cJU_JPIMMED_5_01:
+		case cJU_JPIMMED_6_01:
+		case cJU_JPIMMED_7_01:
+#endif
+		    JU_RET_FOUND_IMM_01(Pjp);
+
+		case cJU_JPIMMED_1_02:
+		case cJU_JPIMMED_1_03:
+#ifdef JU_64BIT
+		case cJU_JPIMMED_1_04:
+		case cJU_JPIMMED_1_05:
+		case cJU_JPIMMED_1_06:
+		case cJU_JPIMMED_1_07:
+		case cJU_JPIMMED_2_02:
+		case cJU_JPIMMED_2_03:
+		case cJU_JPIMMED_3_02:
+#endif
+		    JU_RET_FOUND_IMM(Pjp, offset);
+		}
+
+		JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);  // impossible?
+		JUDY1CODE(return(JERRI );)
+		JUDYLCODE(return(PPJERR);)
+
+	    } // found *PIndex
+
+#endif // JUDYL
+
+// Dead end, no Index in LeafL / Immed for remaining digit(s) in *PIndex:
+//
+// Get the ideal location of Index, and if theres no next-left/right Index in
+// the LeafL / Immed, shortcut and start backtracking one level up; ignore the
+// current Pjp because it points to a LeafL / Immed with no next-left/right
+// Index.
+
+#ifdef JUDYPREV
+	    if ((offset = (~offset) - 1) < 0)	// no next-left Index.
+#else
+	    if ((offset = (~offset)) >= pop1)	// no next-right Index.
+#endif
+		goto SM2Backtrack;
+
+// Theres a next-left/right Index in the current LeafL / Immed; shortcut by
+// copying its digit(s) to *PIndex and returning it.
+//
+// Unfortunately this is pretty hairy, especially avoiding endian issues.
+//
+// The cJU_JPLEAF* cases are very similar to same-index-size cJU_JPIMMED* cases
+// for *_02 and above, but must return differently, at least for JudyL, so
+// spell them out separately here at the cost of a little redundant code for
+// Judy1.
+
+	    switch (JU_JPTYPE(Pjp))
+	    {
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+	    case cJU_JPLEAF1:
+
+		JU_SETDIGIT1(*PIndex, ((uint8_t *) Pjll)[offset]);
+		JU_RET_FOUND_LEAF1(Pjll, pop1, offset);
+#endif
+
+	    case cJU_JPLEAF2:
+
+		*PIndex = (*PIndex & (~JU_LEASTBYTESMASK(2)))
+			| ((uint16_t *) Pjll)[offset];
+		JU_RET_FOUND_LEAF2(Pjll, pop1, offset);
+
+	    case cJU_JPLEAF3:
+	    {
+		Word_t lsb;
+		JU_COPY3_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (3 * offset));
+		*PIndex = (*PIndex & (~JU_LEASTBYTESMASK(3))) | lsb;
+		JU_RET_FOUND_LEAF3(Pjll, pop1, offset);
+	    }
+
+#ifdef JU_64BIT
+	    case cJU_JPLEAF4:
+
+		*PIndex = (*PIndex & (~JU_LEASTBYTESMASK(4)))
+			| ((uint32_t *) Pjll)[offset];
+		JU_RET_FOUND_LEAF4(Pjll, pop1, offset);
+
+	    case cJU_JPLEAF5:
+	    {
+		Word_t lsb;
+		JU_COPY5_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (5 * offset));
+		*PIndex = (*PIndex & (~JU_LEASTBYTESMASK(5))) | lsb;
+		JU_RET_FOUND_LEAF5(Pjll, pop1, offset);
+	    }
+
+	    case cJU_JPLEAF6:
+	    {
+		Word_t lsb;
+		JU_COPY6_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (6 * offset));
+		*PIndex = (*PIndex & (~JU_LEASTBYTESMASK(6))) | lsb;
+		JU_RET_FOUND_LEAF6(Pjll, pop1, offset);
+	    }
+
+	    case cJU_JPLEAF7:
+	    {
+		Word_t lsb;
+		JU_COPY7_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (7 * offset));
+		*PIndex = (*PIndex & (~JU_LEASTBYTESMASK(7))) | lsb;
+		JU_RET_FOUND_LEAF7(Pjll, pop1, offset);
+	    }
+
+#endif // JU_64BIT
+
+#define	SET_01(cState)  JU_SETDIGITS(*PIndex, JU_JPDCDPOP0(Pjp), cState)
+
+	    case cJU_JPIMMED_1_01: SET_01(1); goto SM1Imm_01;
+	    case cJU_JPIMMED_2_01: SET_01(2); goto SM1Imm_01;
+	    case cJU_JPIMMED_3_01: SET_01(3); goto SM1Imm_01;
+#ifdef JU_64BIT
+	    case cJU_JPIMMED_4_01: SET_01(4); goto SM1Imm_01;
+	    case cJU_JPIMMED_5_01: SET_01(5); goto SM1Imm_01;
+	    case cJU_JPIMMED_6_01: SET_01(6); goto SM1Imm_01;
+	    case cJU_JPIMMED_7_01: SET_01(7); goto SM1Imm_01;
+#endif
+SM1Imm_01:	JU_RET_FOUND_IMM_01(Pjp);
+
+// Shorthand for where to find start of Index bytes array:
+
+#ifdef JUDY1
+#define	PJI (Pjp->jp_1Index)
+#else
+#define	PJI (Pjp->jp_LIndex)
+#endif
+
+	    case cJU_JPIMMED_1_02:
+	    case cJU_JPIMMED_1_03:
+#if (defined(JUDY1) || defined(JU_64BIT))
+	    case cJU_JPIMMED_1_04:
+	    case cJU_JPIMMED_1_05:
+	    case cJU_JPIMMED_1_06:
+	    case cJU_JPIMMED_1_07:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	    case cJ1_JPIMMED_1_08:
+	    case cJ1_JPIMMED_1_09:
+	    case cJ1_JPIMMED_1_10:
+	    case cJ1_JPIMMED_1_11:
+	    case cJ1_JPIMMED_1_12:
+	    case cJ1_JPIMMED_1_13:
+	    case cJ1_JPIMMED_1_14:
+	    case cJ1_JPIMMED_1_15:
+#endif
+		JU_SETDIGIT1(*PIndex, ((uint8_t *) PJI)[offset]);
+		JU_RET_FOUND_IMM(Pjp, offset);
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+	    case cJU_JPIMMED_2_02:
+	    case cJU_JPIMMED_2_03:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	    case cJ1_JPIMMED_2_04:
+	    case cJ1_JPIMMED_2_05:
+	    case cJ1_JPIMMED_2_06:
+	    case cJ1_JPIMMED_2_07:
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+		*PIndex = (*PIndex & (~JU_LEASTBYTESMASK(2)))
+			| ((uint16_t *) PJI)[offset];
+		JU_RET_FOUND_IMM(Pjp, offset);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+	    case cJU_JPIMMED_3_02:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	    case cJ1_JPIMMED_3_03:
+	    case cJ1_JPIMMED_3_04:
+	    case cJ1_JPIMMED_3_05:
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+	    {
+		Word_t lsb;
+		JU_COPY3_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (3 * offset));
+		*PIndex = (*PIndex & (~JU_LEASTBYTESMASK(3))) | lsb;
+		JU_RET_FOUND_IMM(Pjp, offset);
+	    }
+#endif
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+	    case cJ1_JPIMMED_4_02:
+	    case cJ1_JPIMMED_4_03:
+
+		*PIndex = (*PIndex & (~JU_LEASTBYTESMASK(4)))
+			| ((uint32_t *) PJI)[offset];
+		JU_RET_FOUND_IMM(Pjp, offset);
+
+	    case cJ1_JPIMMED_5_02:
+	    case cJ1_JPIMMED_5_03:
+	    {
+		Word_t lsb;
+		JU_COPY5_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (5 * offset));
+		*PIndex = (*PIndex & (~JU_LEASTBYTESMASK(5))) | lsb;
+		JU_RET_FOUND_IMM(Pjp, offset);
+	    }
+
+	    case cJ1_JPIMMED_6_02:
+	    {
+		Word_t lsb;
+		JU_COPY6_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (6 * offset));
+		*PIndex = (*PIndex & (~JU_LEASTBYTESMASK(6))) | lsb;
+		JU_RET_FOUND_IMM(Pjp, offset);
+	    }
+
+	    case cJ1_JPIMMED_7_02:
+	    {
+		Word_t lsb;
+		JU_COPY7_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (7 * offset));
+		*PIndex = (*PIndex & (~JU_LEASTBYTESMASK(7))) | lsb;
+		JU_RET_FOUND_IMM(Pjp, offset);
+	    }
+
+#endif // (JUDY1 && JU_64BIT)
+
+	    } // switch for not-found *PIndex
+
+	    JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);	// impossible?
+	    JUDY1CODE(return(JERRI );)
+	    JUDYLCODE(return(PPJERR);)
+
+
+// ----------------------------------------------------------------------------
+// BITMAP LEAF:
+//
+// Check Decode bytes, if any, in the current JP, then look in the leaf for
+// *PIndex.
+
+	case cJU_JPLEAF_B1:
+	{
+	    Pjlb_t Pjlb;
+	    CHECKDCD(1);
+
+	    Pjlb	= P_JLB(Pjp->jp_Addr);
+	    digit       = JU_DIGITATSTATE(*PIndex, 1);
+	    subexp      = JU_SUBEXPL(digit);
+	    bitposmask  = JU_BITPOSMASKL(digit);
+	    assert(subexp < cJU_NUMSUBEXPL);	// falls in expected range.
+
+// *PIndex exists in LeafB1:
+
+//	    if (JU_BITMAPTESTL(Pjlb, digit))			// slower.
+	    if (JU_JLB_BITMAP(Pjlb, subexp) & bitposmask)	// faster.
+	    {
+#ifdef JUDYL				// needs offset at this point:
+		offset = SEARCHBITMAPL(JU_JLB_BITMAP(Pjlb, subexp), digit, bitposmask);
+#endif
+		JU_RET_FOUND_LEAF_B1(Pjlb, subexp, offset);
+//	== return((PPvoid_t) (P_JV(JL_JLB_PVALUE(Pjlb, subexp)) + (offset)));
+	    }
+
+// Dead end, no Index in LeafB1 for remaining digit in *PIndex:
+//
+// If theres a next-left/right Index in the current LeafB1, which for
+// Judy*Next() is true if any bits are set for higher Indexes, shortcut by
+// returning it.  Note:  For Judy*Prev(), offset is set here to the correct
+// value for the next-left JP.
+
+	    offset = SEARCHBITMAPL(JU_JLB_BITMAP(Pjlb, subexp), digit,
+				   bitposmask);
+	    // right range:
+	    assert((offset >= -1) && (offset < (int) cJU_BITSPERSUBEXPL));
+
+#ifdef JUDYPREV
+	    if (offset >= 0)		// next-left JP is in this subexpanse.
+		goto SM1LeafB1Findlimit;
+
+	    while (--subexp >= 0)		// search next-left subexpanses.
+#else
+	    if (JU_JLB_BITMAP(Pjlb, subexp) & JU_MASKHIGHEREXC(bitposmask))
+	    {
+		++offset;			// next-left => next-right.
+		goto SM1LeafB1Findlimit;
+	    }
+
+	    while (++subexp < cJU_NUMSUBEXPL)	// search next-right subexps.
+#endif
+	    {
+		if (! JU_JLB_BITMAP(Pjlb, subexp)) continue;  // empty subexp.
+
+#ifdef JUDYPREV
+		offset = SEARCHBITMAPMAXL(JU_JLB_BITMAP(Pjlb, subexp));
+		// expected range:
+		assert((offset >= 0) && (offset < (int) cJU_BITSPERSUBEXPL));
+#else
+		offset = 0;
+#endif
+
+// Save the next-left/right Indexess digit in *PIndex:
+
+SM1LeafB1Findlimit:
+		JU_BITMAPDIGITL(digit, subexp, JU_JLB_BITMAP(Pjlb, subexp), offset);
+		JU_SETDIGIT1(*PIndex, digit);
+		JU_RET_FOUND_LEAF_B1(Pjlb, subexp, offset);
+//	== return((PPvoid_t) (P_JV(JL_JLB_PVALUE(Pjlb, subexp)) + (offset)));
+	    }
+
+// Theres no next-left/right Index in the LeafB1:
+//
+// Shortcut and start backtracking one level up; ignore the current Pjp because
+// it points to a LeafB1 with no next-left/right Index.
+
+	    goto SM2Backtrack;
+
+	} // case cJU_JPLEAF_B1
+
+#ifdef JUDY1
+// ----------------------------------------------------------------------------
+// FULL POPULATION:
+//
+// If the Decode bytes match, *PIndex is found (without modification).
+
+	case cJ1_JPFULLPOPU1:
+
+	    CHECKDCD(1);
+	    JU_RET_FOUND_FULLPOPU1;
+#endif
+
+
+// ----------------------------------------------------------------------------
+// IMMEDIATE:
+
+#ifdef JUDYPREV
+#define	SM1IMM_SETPOP1(cPop1)
+#else
+#define SM1IMM_SETPOP1(cPop1)  pop1 = (cPop1)
+#endif
+
+#define	SM1IMM(Func,cPop1)				\
+	SM1IMM_SETPOP1(cPop1);				\
+	offset = Func((Pjll_t) (PJI), cPop1, *PIndex);	\
+	goto SM1LeafLImm
+
+// Special case for Pop1 = 1 Immediate JPs:
+//
+// If *PIndex is in the immediate, offset is 0, otherwise the binary NOT of the
+// offset where it belongs, 0 or 1, same as from the search functions.
+
+#ifdef JUDYPREV
+#define	SM1IMM_01_SETPOP1
+#else
+#define SM1IMM_01_SETPOP1  pop1 = 1
+#endif
+
+#define	SM1IMM_01							  \
+	SM1IMM_01_SETPOP1;						  \
+	offset = ((JU_JPDCDPOP0(Pjp) <  JU_TRIMTODCDSIZE(*PIndex)) ? ~1 : \
+		  (JU_JPDCDPOP0(Pjp) == JU_TRIMTODCDSIZE(*PIndex)) ?  0 : \
+								     ~0); \
+	goto SM1LeafLImm
+
+	case cJU_JPIMMED_1_01:
+	case cJU_JPIMMED_2_01:
+	case cJU_JPIMMED_3_01:
+#ifdef JU_64BIT
+	case cJU_JPIMMED_4_01:
+	case cJU_JPIMMED_5_01:
+	case cJU_JPIMMED_6_01:
+	case cJU_JPIMMED_7_01:
+#endif
+	    SM1IMM_01;
+
+// TBD:  Doug says it would be OK to have fewer calls and calculate arg 2, here
+// and in Judy*Count() also.
+
+	case cJU_JPIMMED_1_02:  SM1IMM(j__udySearchLeaf1,  2);
+	case cJU_JPIMMED_1_03:  SM1IMM(j__udySearchLeaf1,  3);
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_1_04:  SM1IMM(j__udySearchLeaf1,  4);
+	case cJU_JPIMMED_1_05:  SM1IMM(j__udySearchLeaf1,  5);
+	case cJU_JPIMMED_1_06:  SM1IMM(j__udySearchLeaf1,  6);
+	case cJU_JPIMMED_1_07:  SM1IMM(j__udySearchLeaf1,  7);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_1_08:  SM1IMM(j__udySearchLeaf1,  8);
+	case cJ1_JPIMMED_1_09:  SM1IMM(j__udySearchLeaf1,  9);
+	case cJ1_JPIMMED_1_10:  SM1IMM(j__udySearchLeaf1, 10);
+	case cJ1_JPIMMED_1_11:  SM1IMM(j__udySearchLeaf1, 11);
+	case cJ1_JPIMMED_1_12:  SM1IMM(j__udySearchLeaf1, 12);
+	case cJ1_JPIMMED_1_13:  SM1IMM(j__udySearchLeaf1, 13);
+	case cJ1_JPIMMED_1_14:  SM1IMM(j__udySearchLeaf1, 14);
+	case cJ1_JPIMMED_1_15:  SM1IMM(j__udySearchLeaf1, 15);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_2_02:  SM1IMM(j__udySearchLeaf2,  2);
+	case cJU_JPIMMED_2_03:  SM1IMM(j__udySearchLeaf2,  3);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_2_04:  SM1IMM(j__udySearchLeaf2,  4);
+	case cJ1_JPIMMED_2_05:  SM1IMM(j__udySearchLeaf2,  5);
+	case cJ1_JPIMMED_2_06:  SM1IMM(j__udySearchLeaf2,  6);
+	case cJ1_JPIMMED_2_07:  SM1IMM(j__udySearchLeaf2,  7);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_3_02:  SM1IMM(j__udySearchLeaf3,  2);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_3_03:  SM1IMM(j__udySearchLeaf3,  3);
+	case cJ1_JPIMMED_3_04:  SM1IMM(j__udySearchLeaf3,  4);
+	case cJ1_JPIMMED_3_05:  SM1IMM(j__udySearchLeaf3,  5);
+
+	case cJ1_JPIMMED_4_02:  SM1IMM(j__udySearchLeaf4,  2);
+	case cJ1_JPIMMED_4_03:  SM1IMM(j__udySearchLeaf4,  3);
+
+	case cJ1_JPIMMED_5_02:  SM1IMM(j__udySearchLeaf5,  2);
+	case cJ1_JPIMMED_5_03:  SM1IMM(j__udySearchLeaf5,  3);
+
+	case cJ1_JPIMMED_6_02:  SM1IMM(j__udySearchLeaf6,  2);
+
+	case cJ1_JPIMMED_7_02:  SM1IMM(j__udySearchLeaf7,  2);
+#endif
+
+
+// ----------------------------------------------------------------------------
+// INVALID JP TYPE:
+
+	default: JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+		 JUDY1CODE(return(JERRI );)
+		 JUDYLCODE(return(PPJERR);)
+
+	} // SM1Get switch.
+
+	/*NOTREACHED*/
+
+
+// ============================================================================
+// STATE MACHINE 2 -- BACKTRACK BRANCH TO PREVIOUS JP:
+//
+// Look for the next-left/right JP in a branch, backing up the history list as
+// necessary.  Upon finding a next-left/right JP, modify the corresponding
+// digit in *PIndex before passing control to SM3Findlimit.
+//
+// Note:  As described earlier, only branch JPs are expected here; other types
+// fall into the default case.
+//
+// Note:  If a found JP contains needed Dcd bytes, thats OK, theyre copied to
+// *PIndex in SM3Findlimit.
+//
+// TBD:  This code has a lot in common with similar code in the shortcut cases
+// in SM1Get.  Can combine this code somehow?
+//
+// ENTRY:  List, possibly empty, of JPs and offsets in APjphist[] and
+// Aoffhist[]; see earlier comments.
+//
+// EXIT:  Execute JU_RET_NOTFOUND if no previous/next JP; otherwise jump to
+// SM3Findlimit to resume a new but different downward search.
+
+SM2Backtrack:		// come or return here for first/next sideways search.
+
+	HISTPOP(Pjp, offset);
+
+	switch (JU_JPTYPE(Pjp))
+	{
+
+
+// ----------------------------------------------------------------------------
+// LINEAR BRANCH:
+
+	case cJU_JPBRANCH_L2: state = 2;	     goto SM2BranchL;
+	case cJU_JPBRANCH_L3: state = 3;	     goto SM2BranchL;
+#ifdef JU_64BIT
+	case cJU_JPBRANCH_L4: state = 4;	     goto SM2BranchL;
+	case cJU_JPBRANCH_L5: state = 5;	     goto SM2BranchL;
+	case cJU_JPBRANCH_L6: state = 6;	     goto SM2BranchL;
+	case cJU_JPBRANCH_L7: state = 7;	     goto SM2BranchL;
+#endif
+	case cJU_JPBRANCH_L:  state = cJU_ROOTSTATE; goto SM2BranchL;
+
+SM2BranchL:
+#ifdef JUDYPREV
+	    if (--offset < 0) goto SM2Backtrack;  // no next-left JP in BranchL.
+#endif
+	    Pjbl = P_JBL(Pjp->jp_Addr);
+#ifdef JUDYNEXT
+	    if (++offset >= (Pjbl->jbl_NumJPs)) goto SM2Backtrack;
+						// no next-right JP in BranchL.
+#endif
+
+// Theres a next-left/right JP in the current BranchL; save its digit in
+// *PIndex and continue with SM3Findlimit:
+
+	    JU_SETDIGIT(*PIndex, Pjbl->jbl_Expanse[offset], state);
+	    Pjp = (Pjbl->jbl_jp) + offset;
+	    goto SM3Findlimit;
+
+
+// ----------------------------------------------------------------------------
+// BITMAP BRANCH:
+
+	case cJU_JPBRANCH_B2: state = 2;	     goto SM2BranchB;
+	case cJU_JPBRANCH_B3: state = 3;	     goto SM2BranchB;
+#ifdef JU_64BIT
+	case cJU_JPBRANCH_B4: state = 4;	     goto SM2BranchB;
+	case cJU_JPBRANCH_B5: state = 5;	     goto SM2BranchB;
+	case cJU_JPBRANCH_B6: state = 6;	     goto SM2BranchB;
+	case cJU_JPBRANCH_B7: state = 7;	     goto SM2BranchB;
+#endif
+	case cJU_JPBRANCH_B:  state = cJU_ROOTSTATE; goto SM2BranchB;
+
+SM2BranchB:
+	    Pjbb = P_JBB(Pjp->jp_Addr);
+	    HISTPOPBOFF(subexp, offset, digit);		// unpack values.
+
+// If theres a next-left/right JP in the current BranchB, which for
+// Judy*Next() is true if any bits are set for higher Indexes, continue to
+// SM3Findlimit:
+//
+// Note:  offset is set to the JP previously traversed; go one to the
+// left/right.
+
+#ifdef JUDYPREV
+	    if (offset > 0)		// next-left JP is in this subexpanse.
+	    {
+		--offset;
+		goto SM2BranchBFindlimit;
+	    }
+
+	    while (--subexp >= 0)		// search next-left subexpanses.
+#else
+	    if (JU_JBB_BITMAP(Pjbb, subexp)
+	      & JU_MASKHIGHEREXC(JU_BITPOSMASKB(digit)))
+	    {
+		++offset;			// next-left => next-right.
+		goto SM2BranchBFindlimit;
+	    }
+
+	    while (++subexp < cJU_NUMSUBEXPB)	// search next-right subexps.
+#endif
+	    {
+		if (! JU_JBB_PJP(Pjbb, subexp)) continue;  // empty subexpanse.
+
+#ifdef JUDYPREV
+		offset = SEARCHBITMAPMAXB(JU_JBB_BITMAP(Pjbb, subexp));
+		// expected range:
+		assert((offset >= 0) && (offset < cJU_BITSPERSUBEXPB));
+#else
+		offset = 0;
+#endif
+
+// Save the next-left/right JPs digit in *PIndex:
+
+SM2BranchBFindlimit:
+		JU_BITMAPDIGITB(digit, subexp, JU_JBB_BITMAP(Pjbb, subexp),
+				offset);
+		JU_SETDIGIT(*PIndex, digit, state);
+
+		if ((Pjp = P_JP(JU_JBB_PJP(Pjbb, subexp))) == (Pjp_t) NULL)
+		{
+		    JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+		    JUDY1CODE(return(JERRI );)
+		    JUDYLCODE(return(PPJERR);)
+		}
+
+		Pjp += offset;
+		goto SM3Findlimit;
+	    }
+
+// Theres no next-left/right JP in the BranchB:
+
+	    goto SM2Backtrack;
+
+
+// ----------------------------------------------------------------------------
+// UNCOMPRESSED BRANCH:
+
+	case cJU_JPBRANCH_U2: state = 2;	     goto SM2BranchU;
+	case cJU_JPBRANCH_U3: state = 3;	     goto SM2BranchU;
+#ifdef JU_64BIT
+	case cJU_JPBRANCH_U4: state = 4;	     goto SM2BranchU;
+	case cJU_JPBRANCH_U5: state = 5;	     goto SM2BranchU;
+	case cJU_JPBRANCH_U6: state = 6;	     goto SM2BranchU;
+	case cJU_JPBRANCH_U7: state = 7;	     goto SM2BranchU;
+#endif
+	case cJU_JPBRANCH_U:  state = cJU_ROOTSTATE; goto SM2BranchU;
+
+SM2BranchU:
+
+// Search for a next-left/right JP in the current BranchU, and if one is found,
+// save its digit in *PIndex and continue to SM3Findlimit:
+
+	    Pjbu  = P_JBU(Pjp->jp_Addr);
+	    digit = offset;
+
+#ifdef JUDYPREV
+	    while (digit >= 1)
+	    {
+		Pjp = (Pjbu->jbu_jp) + (--digit);
+#else
+	    while (digit < cJU_BRANCHUNUMJPS - 1)
+	    {
+		Pjp = (Pjbu->jbu_jp) + (++digit);
+#endif
+		if (JPNULL(JU_JPTYPE(Pjp))) continue;
+
+		JU_SETDIGIT(*PIndex, digit, state);
+		goto SM3Findlimit;
+	    }
+
+// Theres no next-left/right JP in the BranchU:
+
+	    goto SM2Backtrack;
+
+
+// ----------------------------------------------------------------------------
+// INVALID JP TYPE:
+
+	default: JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+		 JUDY1CODE(return(JERRI );)
+		 JUDYLCODE(return(PPJERR);)
+
+	} // SM2Backtrack switch.
+
+	/*NOTREACHED*/
+
+
+// ============================================================================
+// STATE MACHINE 3 -- FIND LIMIT JP/INDEX:
+//
+// Look for the highest/lowest (right/left-most) JP in each branch and the
+// highest/lowest Index in a leaf or immediate, and return it.  While
+// traversing, modify appropriate digit(s) in *PIndex to reflect the path
+// taken, including Dcd bytes in each JP (which could hold critical missing
+// digits for skipped branches).
+//
+// ENTRY:  Pjp set to a JP under which to find max/min JPs (if a branch JP) or
+// a max/min Index and return (if a leaf or immediate JP).
+//
+// EXIT:  Execute JU_RET_FOUND* upon reaching a leaf or immediate.  Should be
+// impossible to fail, unless the Judy array is corrupt.
+
+SM3Findlimit:		// come or return here for first/next branch/leaf.
+
+	switch (JU_JPTYPE(Pjp))
+	{
+// ----------------------------------------------------------------------------
+// LINEAR BRANCH:
+//
+// Simply use the highest/lowest (right/left-most) JP in the BranchL, but first
+// copy the Dcd bytes to *PIndex if there are any (only if state <
+// cJU_ROOTSTATE - 1).
+
+	case cJU_JPBRANCH_L2:  SM3PREPB_DCD(2, SM3BranchL);
+#ifndef JU_64BIT
+	case cJU_JPBRANCH_L3:  SM3PREPB(    3, SM3BranchL);
+#else
+	case cJU_JPBRANCH_L3:  SM3PREPB_DCD(3, SM3BranchL);
+	case cJU_JPBRANCH_L4:  SM3PREPB_DCD(4, SM3BranchL);
+	case cJU_JPBRANCH_L5:  SM3PREPB_DCD(5, SM3BranchL);
+	case cJU_JPBRANCH_L6:  SM3PREPB_DCD(6, SM3BranchL);
+	case cJU_JPBRANCH_L7:  SM3PREPB(    7, SM3BranchL);
+#endif
+	case cJU_JPBRANCH_L:   SM3PREPB(    cJU_ROOTSTATE, SM3BranchL);
+
+SM3BranchL:
+	    Pjbl = P_JBL(Pjp->jp_Addr);
+
+#ifdef JUDYPREV
+	    if ((offset = (Pjbl->jbl_NumJPs) - 1) < 0)
+#else
+	    offset = 0; if ((Pjbl->jbl_NumJPs) == 0)
+#endif
+	    {
+		JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+		JUDY1CODE(return(JERRI );)
+		JUDYLCODE(return(PPJERR);)
+	    }
+
+	    JU_SETDIGIT(*PIndex, Pjbl->jbl_Expanse[offset], state);
+	    Pjp = (Pjbl->jbl_jp) + offset;
+	    goto SM3Findlimit;
+
+
+// ----------------------------------------------------------------------------
+// BITMAP BRANCH:
+//
+// Look for the highest/lowest (right/left-most) non-null subexpanse, then use
+// the highest/lowest JP in that subexpanse, but first copy Dcd bytes, if there
+// are any (only if state < cJU_ROOTSTATE - 1), to *PIndex.
+
+	case cJU_JPBRANCH_B2:  SM3PREPB_DCD(2, SM3BranchB);
+#ifndef JU_64BIT
+	case cJU_JPBRANCH_B3:  SM3PREPB(    3, SM3BranchB);
+#else
+	case cJU_JPBRANCH_B3:  SM3PREPB_DCD(3, SM3BranchB);
+	case cJU_JPBRANCH_B4:  SM3PREPB_DCD(4, SM3BranchB);
+	case cJU_JPBRANCH_B5:  SM3PREPB_DCD(5, SM3BranchB);
+	case cJU_JPBRANCH_B6:  SM3PREPB_DCD(6, SM3BranchB);
+	case cJU_JPBRANCH_B7:  SM3PREPB(    7, SM3BranchB);
+#endif
+	case cJU_JPBRANCH_B:   SM3PREPB(    cJU_ROOTSTATE, SM3BranchB);
+
+SM3BranchB:
+	    Pjbb   = P_JBB(Pjp->jp_Addr);
+#ifdef JUDYPREV
+	    subexp = cJU_NUMSUBEXPB;
+
+	    while (! (JU_JBB_BITMAP(Pjbb, --subexp)))  // find non-empty subexp.
+	    {
+		if (subexp <= 0)		    // wholly empty bitmap.
+		{
+		    JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+		    JUDY1CODE(return(JERRI );)
+		    JUDYLCODE(return(PPJERR);)
+		}
+	    }
+
+	    offset = SEARCHBITMAPMAXB(JU_JBB_BITMAP(Pjbb, subexp));
+	    // expected range:
+	    assert((offset >= 0) && (offset < cJU_BITSPERSUBEXPB));
+#else
+	    subexp = -1;
+
+	    while (! (JU_JBB_BITMAP(Pjbb, ++subexp)))  // find non-empty subexp.
+	    {
+		if (subexp >= cJU_NUMSUBEXPB - 1)      // didnt find one.
+		{
+		    JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+		    JUDY1CODE(return(JERRI );)
+		    JUDYLCODE(return(PPJERR);)
+		}
+	    }
+
+	    offset = 0;
+#endif
+
+	    JU_BITMAPDIGITB(digit, subexp, JU_JBB_BITMAP(Pjbb, subexp), offset);
+	    JU_SETDIGIT(*PIndex, digit, state);
+
+	    if ((Pjp = P_JP(JU_JBB_PJP(Pjbb, subexp))) == (Pjp_t) NULL)
+	    {
+		JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+		JUDY1CODE(return(JERRI );)
+		JUDYLCODE(return(PPJERR);)
+	    }
+
+	    Pjp += offset;
+	    goto SM3Findlimit;
+
+
+// ----------------------------------------------------------------------------
+// UNCOMPRESSED BRANCH:
+//
+// Look for the highest/lowest (right/left-most) non-null JP, and use it, but
+// first copy Dcd bytes to *PIndex if there are any (only if state <
+// cJU_ROOTSTATE - 1).
+
+	case cJU_JPBRANCH_U2:  SM3PREPB_DCD(2, SM3BranchU);
+#ifndef JU_64BIT
+	case cJU_JPBRANCH_U3:  SM3PREPB(    3, SM3BranchU);
+#else
+	case cJU_JPBRANCH_U3:  SM3PREPB_DCD(3, SM3BranchU);
+	case cJU_JPBRANCH_U4:  SM3PREPB_DCD(4, SM3BranchU);
+	case cJU_JPBRANCH_U5:  SM3PREPB_DCD(5, SM3BranchU);
+	case cJU_JPBRANCH_U6:  SM3PREPB_DCD(6, SM3BranchU);
+	case cJU_JPBRANCH_U7:  SM3PREPB(    7, SM3BranchU);
+#endif
+	case cJU_JPBRANCH_U:   SM3PREPB(    cJU_ROOTSTATE, SM3BranchU);
+
+SM3BranchU:
+	    Pjbu  = P_JBU(Pjp->jp_Addr);
+#ifdef JUDYPREV
+	    digit = cJU_BRANCHUNUMJPS;
+
+	    while (digit >= 1)
+	    {
+		Pjp = (Pjbu->jbu_jp) + (--digit);
+#else
+
+	    for (digit = 0; digit < cJU_BRANCHUNUMJPS; ++digit)
+	    {
+		Pjp = (Pjbu->jbu_jp) + digit;
+#endif
+		if (JPNULL(JU_JPTYPE(Pjp))) continue;
+
+		JU_SETDIGIT(*PIndex, digit, state);
+		goto SM3Findlimit;
+	    }
+
+// No non-null JPs in BranchU:
+
+	    JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+	    JUDY1CODE(return(JERRI );)
+	    JUDYLCODE(return(PPJERR);)
+
+
+// ----------------------------------------------------------------------------
+// LINEAR LEAF:
+//
+// Simply use the highest/lowest (right/left-most) Index in the LeafL, but the
+// details vary depending on leaf Index Size.  First copy Dcd bytes, if there
+// are any (only if state < cJU_ROOTSTATE - 1), to *PIndex.
+
+#define	SM3LEAFLDCD(cState)				\
+	JU_SETDCD(*PIndex, Pjp, cState);	        \
+	SM3LEAFLNODCD
+
+#ifdef JUDY1
+#define	SM3LEAFL_SETPOP1		// not needed in any cases.
+#else
+#define	SM3LEAFL_SETPOP1  pop1 = JU_JPLEAF_POP0(Pjp) + 1
+#endif
+
+#ifdef JUDYPREV
+#define	SM3LEAFLNODCD			\
+	Pjll = P_JLL(Pjp->jp_Addr);	\
+	SM3LEAFL_SETPOP1;		\
+	offset = JU_JPLEAF_POP0(Pjp); assert(offset >= 0)
+#else
+#define	SM3LEAFLNODCD			\
+	Pjll = P_JLL(Pjp->jp_Addr);	\
+	SM3LEAFL_SETPOP1;		\
+	offset = 0; assert(JU_JPLEAF_POP0(Pjp) >= 0);
+#endif
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+	case cJU_JPLEAF1:
+
+	    SM3LEAFLDCD(1);
+	    JU_SETDIGIT1(*PIndex, ((uint8_t *) Pjll)[offset]);
+	    JU_RET_FOUND_LEAF1(Pjll, pop1, offset);
+#endif
+
+	case cJU_JPLEAF2:
+
+	    SM3LEAFLDCD(2);
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(2)))
+		    | ((uint16_t *) Pjll)[offset];
+	    JU_RET_FOUND_LEAF2(Pjll, pop1, offset);
+
+#ifndef JU_64BIT
+	case cJU_JPLEAF3:
+	{
+	    Word_t lsb;
+	    SM3LEAFLNODCD;
+	    JU_COPY3_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (3 * offset));
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(3))) | lsb;
+	    JU_RET_FOUND_LEAF3(Pjll, pop1, offset);
+	}
+
+#else
+	case cJU_JPLEAF3:
+	{
+	    Word_t lsb;
+	    SM3LEAFLDCD(3);
+	    JU_COPY3_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (3 * offset));
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(3))) | lsb;
+	    JU_RET_FOUND_LEAF3(Pjll, pop1, offset);
+	}
+
+	case cJU_JPLEAF4:
+
+	    SM3LEAFLDCD(4);
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(4)))
+		    | ((uint32_t *) Pjll)[offset];
+	    JU_RET_FOUND_LEAF4(Pjll, pop1, offset);
+
+	case cJU_JPLEAF5:
+	{
+	    Word_t lsb;
+	    SM3LEAFLDCD(5);
+	    JU_COPY5_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (5 * offset));
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(5))) | lsb;
+	    JU_RET_FOUND_LEAF5(Pjll, pop1, offset);
+	}
+
+	case cJU_JPLEAF6:
+	{
+	    Word_t lsb;
+	    SM3LEAFLDCD(6);
+	    JU_COPY6_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (6 * offset));
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(6))) | lsb;
+	    JU_RET_FOUND_LEAF6(Pjll, pop1, offset);
+	}
+
+	case cJU_JPLEAF7:
+	{
+	    Word_t lsb;
+	    SM3LEAFLNODCD;
+	    JU_COPY7_PINDEX_TO_LONG(lsb, ((uint8_t *) Pjll) + (7 * offset));
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(7))) | lsb;
+	    JU_RET_FOUND_LEAF7(Pjll, pop1, offset);
+	}
+#endif
+
+
+// ----------------------------------------------------------------------------
+// BITMAP LEAF:
+//
+// Look for the highest/lowest (right/left-most) non-null subexpanse, then use
+// the highest/lowest Index in that subexpanse, but first copy Dcd bytes
+// (always present since state 1 < cJU_ROOTSTATE) to *PIndex.
+
+	case cJU_JPLEAF_B1:
+	{
+	    Pjlb_t Pjlb;
+
+	    JU_SETDCD(*PIndex, Pjp, 1);
+
+	    Pjlb   = P_JLB(Pjp->jp_Addr);
+#ifdef JUDYPREV
+	    subexp = cJU_NUMSUBEXPL;
+
+	    while (! JU_JLB_BITMAP(Pjlb, --subexp))  // find non-empty subexp.
+	    {
+		if (subexp <= 0)		// wholly empty bitmap.
+		{
+		    JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+		    JUDY1CODE(return(JERRI );)
+		    JUDYLCODE(return(PPJERR);)
+		}
+	    }
+
+// TBD:  Might it be faster to just use a variant of BITMAPDIGIT*() that yields
+// the digit for the right-most Index with a bit set?
+
+	    offset = SEARCHBITMAPMAXL(JU_JLB_BITMAP(Pjlb, subexp));
+	    // expected range:
+	    assert((offset >= 0) && (offset < cJU_BITSPERSUBEXPL));
+#else
+	    subexp = -1;
+
+	    while (! JU_JLB_BITMAP(Pjlb, ++subexp))  // find non-empty subexp.
+	    {
+		if (subexp >= cJU_NUMSUBEXPL - 1)    // didnt find one.
+		{
+		    JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+		    JUDY1CODE(return(JERRI );)
+		    JUDYLCODE(return(PPJERR);)
+		}
+	    }
+
+	    offset = 0;
+#endif
+
+	    JU_BITMAPDIGITL(digit, subexp, JU_JLB_BITMAP(Pjlb, subexp), offset);
+	    JU_SETDIGIT1(*PIndex, digit);
+	    JU_RET_FOUND_LEAF_B1(Pjlb, subexp, offset);
+//	== return((PPvoid_t) (P_JV(JL_JLB_PVALUE(Pjlb, subexp)) + (offset)));
+
+	} // case cJU_JPLEAF_B1
+
+#ifdef JUDY1
+// ----------------------------------------------------------------------------
+// FULL POPULATION:
+//
+// Copy Dcd bytes to *PIndex (always present since state 1 < cJU_ROOTSTATE),
+// then set the highest/lowest possible digit as the LSB in *PIndex.
+
+	case cJ1_JPFULLPOPU1:
+
+	    JU_SETDCD(   *PIndex, Pjp, 1);
+#ifdef JUDYPREV
+	    JU_SETDIGIT1(*PIndex, cJU_BITSPERBITMAP - 1);
+#else
+	    JU_SETDIGIT1(*PIndex, 0);
+#endif
+	    JU_RET_FOUND_FULLPOPU1;
+#endif // JUDY1
+
+
+// ----------------------------------------------------------------------------
+// IMMEDIATE:
+//
+// Simply use the highest/lowest (right/left-most) Index in the Imm, but the
+// details vary depending on leaf Index Size and pop1.  Note:  There are no Dcd
+// bytes in an Immediate JP, but in a cJU_JPIMMED_*_01 JP, the field holds the
+// least bytes of the immediate Index.
+
+	case cJU_JPIMMED_1_01: SET_01(1); goto SM3Imm_01;
+	case cJU_JPIMMED_2_01: SET_01(2); goto SM3Imm_01;
+	case cJU_JPIMMED_3_01: SET_01(3); goto SM3Imm_01;
+#ifdef JU_64BIT
+	case cJU_JPIMMED_4_01: SET_01(4); goto SM3Imm_01;
+	case cJU_JPIMMED_5_01: SET_01(5); goto SM3Imm_01;
+	case cJU_JPIMMED_6_01: SET_01(6); goto SM3Imm_01;
+	case cJU_JPIMMED_7_01: SET_01(7); goto SM3Imm_01;
+#endif
+SM3Imm_01:	JU_RET_FOUND_IMM_01(Pjp);
+
+#ifdef JUDYPREV
+#define	SM3IMM_OFFSET(cPop1)  (cPop1) - 1	// highest.
+#else
+#define	SM3IMM_OFFSET(cPop1)  0			// lowest.
+#endif
+
+#define	SM3IMM(cPop1,Next)		\
+	offset = SM3IMM_OFFSET(cPop1);	\
+	goto Next
+
+	case cJU_JPIMMED_1_02: SM3IMM( 2, SM3Imm1);
+	case cJU_JPIMMED_1_03: SM3IMM( 3, SM3Imm1);
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_1_04: SM3IMM( 4, SM3Imm1);
+	case cJU_JPIMMED_1_05: SM3IMM( 5, SM3Imm1);
+	case cJU_JPIMMED_1_06: SM3IMM( 6, SM3Imm1);
+	case cJU_JPIMMED_1_07: SM3IMM( 7, SM3Imm1);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_1_08: SM3IMM( 8, SM3Imm1);
+	case cJ1_JPIMMED_1_09: SM3IMM( 9, SM3Imm1);
+	case cJ1_JPIMMED_1_10: SM3IMM(10, SM3Imm1);
+	case cJ1_JPIMMED_1_11: SM3IMM(11, SM3Imm1);
+	case cJ1_JPIMMED_1_12: SM3IMM(12, SM3Imm1);
+	case cJ1_JPIMMED_1_13: SM3IMM(13, SM3Imm1);
+	case cJ1_JPIMMED_1_14: SM3IMM(14, SM3Imm1);
+	case cJ1_JPIMMED_1_15: SM3IMM(15, SM3Imm1);
+#endif
+
+SM3Imm1:    JU_SETDIGIT1(*PIndex, ((uint8_t *) PJI)[offset]);
+	    JU_RET_FOUND_IMM(Pjp, offset);
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_2_02: SM3IMM(2, SM3Imm2);
+	case cJU_JPIMMED_2_03: SM3IMM(3, SM3Imm2);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_2_04: SM3IMM(4, SM3Imm2);
+	case cJ1_JPIMMED_2_05: SM3IMM(5, SM3Imm2);
+	case cJ1_JPIMMED_2_06: SM3IMM(6, SM3Imm2);
+	case cJ1_JPIMMED_2_07: SM3IMM(7, SM3Imm2);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+SM3Imm2:    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(2)))
+		    | ((uint16_t *) PJI)[offset];
+	    JU_RET_FOUND_IMM(Pjp, offset);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_3_02: SM3IMM(2, SM3Imm3);
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_3_03: SM3IMM(3, SM3Imm3);
+	case cJ1_JPIMMED_3_04: SM3IMM(4, SM3Imm3);
+	case cJ1_JPIMMED_3_05: SM3IMM(5, SM3Imm3);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+SM3Imm3:
+	{
+	    Word_t lsb;
+	    JU_COPY3_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (3 * offset));
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(3))) | lsb;
+	    JU_RET_FOUND_IMM(Pjp, offset);
+	}
+#endif
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_4_02: SM3IMM(2, SM3Imm4);
+	case cJ1_JPIMMED_4_03: SM3IMM(3, SM3Imm4);
+
+SM3Imm4:    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(4)))
+		    | ((uint32_t *) PJI)[offset];
+	    JU_RET_FOUND_IMM(Pjp, offset);
+
+	case cJ1_JPIMMED_5_02: SM3IMM(2, SM3Imm5);
+	case cJ1_JPIMMED_5_03: SM3IMM(3, SM3Imm5);
+
+SM3Imm5:
+	{
+	    Word_t lsb;
+	    JU_COPY5_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (5 * offset));
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(5))) | lsb;
+	    JU_RET_FOUND_IMM(Pjp, offset);
+	}
+
+	case cJ1_JPIMMED_6_02: SM3IMM(2, SM3Imm6);
+
+SM3Imm6:
+	{
+	    Word_t lsb;
+	    JU_COPY6_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (6 * offset));
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(6))) | lsb;
+	    JU_RET_FOUND_IMM(Pjp, offset);
+	}
+
+	case cJ1_JPIMMED_7_02: SM3IMM(2, SM3Imm7);
+
+SM3Imm7:
+	{
+	    Word_t lsb;
+	    JU_COPY7_PINDEX_TO_LONG(lsb, ((uint8_t *) PJI) + (7 * offset));
+	    *PIndex = (*PIndex & (~JU_LEASTBYTESMASK(7))) | lsb;
+	    JU_RET_FOUND_IMM(Pjp, offset);
+	}
+#endif // (JUDY1 && JU_64BIT)
+
+
+// ----------------------------------------------------------------------------
+// OTHER CASES:
+
+	default: JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT);
+		 JUDY1CODE(return(JERRI );)
+		 JUDYLCODE(return(PPJERR);)
+
+	} // SM3Findlimit switch.
+
+	/*NOTREACHED*/
+
+} // Judy1Prev() / Judy1Next() / JudyLPrev() / JudyLNext()
diff --git a/libs/klib/judy/JudyPrevNextEmpty.c b/libs/klib/judy/JudyPrevNextEmpty.c
new file mode 100644
index 0000000..7eef40d
--- /dev/null
+++ b/libs/klib/judy/JudyPrevNextEmpty.c
@@ -0,0 +1,1388 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// Judy*PrevEmpty() and Judy*NextEmpty() functions for Judy1 and JudyL.
+// Compile with one of -DJUDY1 or -DJUDYL.
+//
+// Compile with -DJUDYNEXT for the Judy*NextEmpty() function; otherwise
+// defaults to Judy*PrevEmpty().
+//
+// Compile with -DTRACEJPSE to trace JP traversals.
+//
+// This file is separate from JudyPrevNext.c because it differs too greatly for
+// ifdefs.  This might be a bit surprising, but there are two reasons:
+//
+// - First, down in the details, searching for an empty index (SearchEmpty) is
+//   remarkably asymmetric with searching for a valid index (SearchValid),
+//   mainly with respect to:  No return of a value area for JudyL; partially-
+//   full versus totally-full JPs; and handling of narrow pointers.
+//
+// - Second, we chose to implement SearchEmpty without a backtrack stack or
+//   backtrack engine, partly as an experiment, and partly because we think
+//   restarting from the top of the tree is less likely for SearchEmpty than
+//   for SearchValid, because empty indexes are more likely than valid indexes.
+//
+// A word about naming:  A prior version of this feature (see 4.13) was named
+// Judy*Free(), but there were concerns about that being read as a verb rather
+// than an adjective.  After prolonged debate and based on user input, we
+// changed "Free" to "Empty".
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error:  One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#ifndef JUDYNEXT
+#ifndef JUDYPREV
+#define	JUDYPREV 1		// neither set => use default.
+#endif
+#endif
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+
+#include "JudyPrivate1L.h"
+
+#ifdef TRACEJPSE
+#include "JudyPrintJP.c"
+#endif
+
+
+// ****************************************************************************
+// J U D Y   1   P R E V   E M P T Y
+// J U D Y   1   N E X T   E M P T Y
+// J U D Y   L   P R E V   E M P T Y
+// J U D Y   L   N E X T   E M P T Y
+//
+// See the manual entry for the API.
+//
+// OVERVIEW OF Judy*PrevEmpty() / Judy*NextEmpty():
+//
+// See also for comparison the equivalent comments in JudyPrevNext.c.
+//
+// Take the callers *PIndex and subtract/add 1, but watch out for
+// underflow/overflow, which means "no previous/next empty index found."  Use a
+// reentrant switch statement (state machine, see SMGetRestart and
+// SMGetContinue) to decode Index, starting with the JRP (PArray), through a
+// JPM and branches, if any, down to an immediate or a leaf.  Look for Index in
+// that immediate or leaf, and if not found (invalid index), return success
+// (Index is empty).
+//
+// This search can result in a dead end where taking a different path is
+// required.  There are four kinds of dead ends:
+//
+// BRANCH PRIMARY dead end:  Encountering a fully-populated JP for the
+// appropriate digit in Index.  Search sideways in the branch for the
+// previous/next absent/null/non-full JP, and if one is found, set Index to the
+// highest/lowest index possible in that JPs expanse.  Then if the JP is an
+// absent or null JP, return success; otherwise for a non-full JP, traverse
+// through the partially populated JP.
+//
+// BRANCH SECONDARY dead end:  Reaching the end of a branch during a sideways
+// search after a branch primary dead end.  Set Index to the lowest/highest
+// index possible in the whole branchs expanse (one higher/lower than the
+// previous/next branchs expanse), then restart at the top of the tree, which
+// includes pre-decrementing/incrementing Index (again) and watching for
+// underflow/overflow (again).
+//
+// LEAF PRIMARY dead end:  Finding a valid (non-empty) index in an immediate or
+// leaf matching Index.  Search sideways in the immediate/leaf for the
+// previous/next empty index; if found, set *PIndex to match and return success.
+//
+// LEAF SECONDARY dead end:  Reaching the end of an immediate or leaf during a
+// sideways search after a leaf primary dead end.  Just as for a branch
+// secondary dead end, restart at the top of the tree with Index set to the
+// lowest/highest index possible in the whole immediate/leafs expanse.
+// TBD:  If leaf secondary dead end occurs, could shortcut and treat it as a
+// branch primary dead end; but this would require remembering the parent
+// branchs type and offset (a "one-deep stack"), and also wrestling with
+// narrow pointers, at least for leaves (but not for immediates).
+//
+// Note some ASYMMETRIES between SearchValid and SearchEmpty:
+//
+// - The SearchValid code, upon descending through a narrow pointer, if Index
+//   is outside the expanse of the subsidiary node (effectively a secondary
+//   dead end), must decide whether to backtrack or findlimit.  But the
+//   SearchEmpty code simply returns success (Index is empty).
+//
+// - Similarly, the SearchValid code, upon finding no previous/next index in
+//   the expanse of a narrow pointer (again, a secondary dead end), can simply
+//   start to backtrack at the parent JP.  But the SearchEmpty code would have
+//   to first determine whether or not the parent JPs narrow expanse contains
+//   a previous/next empty index outside the subexpanse.  Rather than keeping a
+//   parent state stack and backtracking this way, upon a secondary dead end,
+//   the SearchEmpty code simply restarts at the top of the tree, whether or
+//   not a narrow pointer is involved.  Again, see the equivalent comments in
+//   JudyPrevNext.c for comparison.
+//
+// This function is written iteratively for speed, rather than recursively.
+//
+// TBD:  Wed like to enhance this function to make successive searches faster.
+// This would require saving some previous state, including the previous Index
+// returned, and in which leaf it was found.  If the next call is for the same
+// Index and the array has not been modified, start at the same leaf.  This
+// should be much easier to implement since this is iterative rather than
+// recursive code.
+
+#ifdef JUDY1
+#ifdef JUDYPREV
+FUNCTION int Judy1PrevEmpty
+#else
+FUNCTION int Judy1NextEmpty
+#endif
+#else
+#ifdef JUDYPREV
+FUNCTION int JudyLPrevEmpty
+#else
+FUNCTION int JudyLNextEmpty
+#endif
+#endif
+        (
+	Pcvoid_t  PArray,	// Judy array to search.
+	Word_t *  PIndex,	// starting point and result.
+	PJError_t PJError	// optional, for returning error info.
+        )
+{
+	Word_t	  Index;	// fast copy, in a register.
+	Pjp_t	  Pjp;		// current JP.
+	Pjbl_t	  Pjbl;		// Pjp->jp_Addr masked and cast to types:
+	Pjbb_t	  Pjbb;
+	Pjbu_t	  Pjbu;
+	Pjlb_t	  Pjlb;
+	PWord_t	  Pword;	// alternate name for use by GET* macros.
+
+	Word_t	  digit;	// next digit to decode from Index.
+	Word_t	  digits;	// current state in SM = digits left to decode.
+	Word_t	  pop0;		// in a leaf.
+	Word_t	  pop0mask;	// precalculated to avoid variable shifts.
+	long	  offset;	// within a branch or leaf (can be large).
+	int	  subexp;	// subexpanse in a bitmap branch.
+	BITMAPB_t bitposmaskB;	// bit in bitmap for bitmap branch.
+	BITMAPL_t bitposmaskL;	// bit in bitmap for bitmap leaf.
+	Word_t	  possfullJP1;	// JP types for possibly full subexpanses:
+	Word_t	  possfullJP2;
+	Word_t	  possfullJP3;
+
+
+// ----------------------------------------------------------------------------
+// M A C R O S
+//
+// These are intended to make the code a bit more readable and less redundant.
+
+
+// CHECK FOR NULL JP:
+//
+// TBD:  In principle this can be reduced (here and in other *.c files) to just
+// the latter clause since no Type should ever be below cJU_JPNULL1, but in
+// fact some root pointer types can be lower, so for safety do both checks.
+
+#define	JPNULL(Type)  (((Type) >= cJU_JPNULL1) && ((Type) <= cJU_JPNULLMAX))
+
+
+// CHECK FOR A FULL JP:
+//
+// Given a JP, indicate if it is fully populated.  Use digits, pop0mask, and
+// possfullJP1..3 in the context.
+//
+// This is a difficult problem because it requires checking the Pop0 bits for
+// all-ones, but the number of bytes depends on the JP type, which is not
+// directly related to the parent branchs type or level -- the JPs child
+// could be under a narrow pointer (hence not full).  The simple answer
+// requires switching on or otherwise calculating the JP type, which could be
+// slow.  Instead, in SMPREPB* precalculate pop0mask and also record in
+// possfullJP1..3 the child JP (branch) types that could possibly be full (one
+// level down), and use them here.  For level-2 branches (with digits == 2),
+// the test for a full child depends on Judy1/JudyL.
+//
+// Note:  This cannot be applied to the JP in a JPM because it doesnt have
+// enough pop0 digits.
+//
+// TBD:  JPFULL_BRANCH diligently checks for BranchL or BranchB, where neither
+// of those can ever be full as it turns out.  Could just check for a BranchU
+// at the right level.  Also, pop0mask might be overkill, its not used much,
+// so perhaps just call cJU_POP0MASK(digits - 1) here?
+//
+// First, JPFULL_BRANCH checks for a full expanse for a JP whose child can be a
+// branch, that is, a JP in a branch at level 3 or higher:
+
+#define	JPFULL_BRANCH(Pjp)						\
+	  ((((JU_JPDCDPOP0(Pjp) ^ cJU_ALLONES) & pop0mask) == 0)	\
+	&& ((JU_JPTYPE(Pjp) == possfullJP1)				\
+	 || (JU_JPTYPE(Pjp) == possfullJP2)				\
+	 || (JU_JPTYPE(Pjp) == possfullJP3)))
+
+#ifdef JUDY1
+#define	JPFULL(Pjp)							\
+	((digits == 2) ?						\
+	 (JU_JPTYPE(Pjp) == cJ1_JPFULLPOPU1) : JPFULL_BRANCH(Pjp))
+#else
+#define	JPFULL(Pjp)							\
+	((digits == 2) ?						\
+	   (JU_JPTYPE(Pjp) == cJU_JPLEAF_B1)				\
+	 && (((JU_JPDCDPOP0(Pjp) & cJU_POP0MASK(1)) == cJU_POP0MASK(1))) : \
+	 JPFULL_BRANCH(Pjp))
+#endif
+
+
+// RETURN SUCCESS:
+//
+// This hides the need to set *PIndex back to the local value of Index -- use a
+// local value for faster operation.  Note that the callers *PIndex is ALWAYS
+// modified upon success, at least decremented/incremented.
+
+#define	RET_SUCCESS { *PIndex = Index; return(1); }
+
+
+// RETURN A CORRUPTION:
+
+#define	RET_CORRUPT { JU_SET_ERRNO(PJError, JU_ERRNO_CORRUPT); return(JERRI); }
+
+
+// SEARCH A BITMAP BRANCH:
+//
+// This is a weak analog of j__udySearchLeaf*() for bitmap branches.  Return
+// the actual or next-left position, base 0, of Digit in a BITMAPB_t bitmap
+// (subexpanse of a full bitmap), also given a Bitposmask for Digit.  The
+// position is the offset within the set bits.
+//
+// Unlike j__udySearchLeaf*(), the offset is not returned bit-complemented if
+// Digits bit is unset, because the caller can check the bitmap themselves to
+// determine that.  Also, if Digits bit is unset, the returned offset is to
+// the next-left JP or index (including -1), not to the "ideal" position for
+// the index = next-right JP or index.
+//
+// Shortcut and skip calling j__udyCountBitsB() if the bitmap is full, in which
+// case (Digit % cJU_BITSPERSUBEXPB) itself is the base-0 offset.
+
+#define	SEARCHBITMAPB(Bitmap,Digit,Bitposmask)				\
+	(((Bitmap) == cJU_FULLBITMAPB) ? (Digit % cJU_BITSPERSUBEXPB) :	\
+	 j__udyCountBitsB((Bitmap) & JU_MASKLOWERINC(Bitposmask)) - 1)
+
+#ifdef JUDYPREV
+// Equivalent to search for the highest offset in Bitmap, that is, one less
+// than the number of bits set:
+
+#define	SEARCHBITMAPMAXB(Bitmap)					\
+	(((Bitmap) == cJU_FULLBITMAPB) ? cJU_BITSPERSUBEXPB - 1 :	\
+	 j__udyCountBitsB(Bitmap) - 1)
+#endif
+
+
+// CHECK DECODE BYTES:
+//
+// Check Decode bytes in a JP against the equivalent portion of Index.  If they
+// dont match, Index is outside the subexpanse of a narrow pointer, hence is
+// empty.
+
+#define	CHECKDCD(cDigits) \
+	if (JU_DCDNOTMATCHINDEX(Index, Pjp, cDigits)) RET_SUCCESS
+
+
+// REVISE REMAINDER OF INDEX:
+//
+// Put one digit in place in Index and clear/set the lower digits, if any, so
+// the resulting Index is at the start/end of an expanse, or just clear/set the
+// least digits.
+//
+// Actually, to make simple use of JU_LEASTBYTESMASK, first clear/set all least
+// digits of Index including the digit to be overridden, then set the value of
+// that one digit.  If Digits == 1 the first operation is redundant, but either
+// very fast or even removed by the optimizer.
+
+#define	CLEARLEASTDIGITS(Digits) Index &= ~JU_LEASTBYTESMASK(Digits)
+#define	SETLEASTDIGITS(  Digits) Index |=  JU_LEASTBYTESMASK(Digits)
+
+#define	CLEARLEASTDIGITS_D(Digit,Digits)	\
+	{					\
+	    CLEARLEASTDIGITS(Digits);		\
+	    JU_SETDIGIT(Index, Digit, Digits);	\
+	}
+
+#define	SETLEASTDIGITS_D(Digit,Digits)		\
+	{					\
+	    SETLEASTDIGITS(Digits);		\
+	    JU_SETDIGIT(Index, Digit, Digits);	\
+	}
+
+
+// SET REMAINDER OF INDEX AND THEN RETURN OR CONTINUE:
+
+#define	SET_AND_RETURN(OpLeastDigits,Digit,Digits)	\
+	{						\
+	    OpLeastDigits(Digit, Digits);		\
+	    RET_SUCCESS;				\
+	}
+
+#define	SET_AND_CONTINUE(OpLeastDigits,Digit,Digits)	\
+	{						\
+	    OpLeastDigits(Digit, Digits);		\
+	    goto SMGetContinue;				\
+	}
+
+
+// PREPARE TO HANDLE A LEAFW OR JP BRANCH IN THE STATE MACHINE:
+//
+// Extract a state-dependent digit from Index in a "constant" way, then jump to
+// common code for multiple cases.
+//
+// TBD:  Should this macro do more, such as preparing variable-shift masks for
+// use in CLEARLEASTDIGITS and SETLEASTDIGITS?
+
+#define	SMPREPB(cDigits,Next,PossFullJP1,PossFullJP2,PossFullJP3)	\
+	digits	 = (cDigits);						\
+	digit	 = JU_DIGITATSTATE(Index, cDigits);			\
+	pop0mask = cJU_POP0MASK((cDigits) - 1);	 /* for branchs JPs */	\
+	possfullJP1 = (PossFullJP1);					\
+	possfullJP2 = (PossFullJP2);					\
+	possfullJP3 = (PossFullJP3);					\
+	goto Next
+
+// Variations for specific-level branches and for shorthands:
+//
+// Note:  SMPREPB2 need not initialize possfullJP* because JPFULL does not use
+// them for digits == 2, but gcc -Wall isnt quite smart enough to see this, so
+// waste a bit of time and space to get rid of the warning:
+
+#define	SMPREPB2(Next)				\
+	digits	 = 2;				\
+	digit	 = JU_DIGITATSTATE(Index, 2);	\
+	pop0mask = cJU_POP0MASK(1);  /* for branchs JPs */ \
+	possfullJP1 = possfullJP2 = possfullJP3 = 0;	    \
+	goto Next
+
+#define	SMPREPB3(Next) SMPREPB(3,	      Next, cJU_JPBRANCH_L2, \
+						    cJU_JPBRANCH_B2, \
+						    cJU_JPBRANCH_U2)
+#ifndef JU_64BIT
+#define	SMPREPBL(Next) SMPREPB(cJU_ROOTSTATE, Next, cJU_JPBRANCH_L3, \
+						    cJU_JPBRANCH_B3, \
+						    cJU_JPBRANCH_U3)
+#else
+#define	SMPREPB4(Next) SMPREPB(4,	      Next, cJU_JPBRANCH_L3, \
+						    cJU_JPBRANCH_B3, \
+						    cJU_JPBRANCH_U3)
+#define	SMPREPB5(Next) SMPREPB(5,	      Next, cJU_JPBRANCH_L4, \
+						    cJU_JPBRANCH_B4, \
+						    cJU_JPBRANCH_U4)
+#define	SMPREPB6(Next) SMPREPB(6,	      Next, cJU_JPBRANCH_L5, \
+						    cJU_JPBRANCH_B5, \
+						    cJU_JPBRANCH_U5)
+#define	SMPREPB7(Next) SMPREPB(7,	      Next, cJU_JPBRANCH_L6, \
+						    cJU_JPBRANCH_B6, \
+						    cJU_JPBRANCH_U6)
+#define	SMPREPBL(Next) SMPREPB(cJU_ROOTSTATE, Next, cJU_JPBRANCH_L7, \
+						    cJU_JPBRANCH_B7, \
+						    cJU_JPBRANCH_U7)
+#endif
+
+
+// RESTART AFTER SECONDARY DEAD END:
+//
+// Set Index to the first/last index in the branch or leaf subexpanse and start
+// over at the top of the tree.
+
+#ifdef JUDYPREV
+#define	SMRESTART(Digits) { CLEARLEASTDIGITS(Digits); goto SMGetRestart; }
+#else
+#define	SMRESTART(Digits) { SETLEASTDIGITS(  Digits); goto SMGetRestart; }
+#endif
+
+
+// CHECK EDGE OF LEAFS EXPANSE:
+//
+// Given the LSBs of the lowest/highest valid index in a leaf (or equivalently
+// in an immediate JP), the level (index size) of the leaf, and the full index
+// to return (as Index in the context) already set to the full index matching
+// the lowest/highest one, determine if there is an empty index in the leafs
+// expanse below/above the lowest/highest index, which is true if the
+// lowest/highest index is not at the "edge" of the leafs expanse based on its
+// LSBs.  If so, return Index decremented/incremented; otherwise restart at the
+// top of the tree.
+//
+// Note:  In many cases Index is already at the right spot and calling
+// SMRESTART instead of just going directly to SMGetRestart is a bit of
+// overkill.
+//
+// Note:  Variable shift occurs if Digits is not a constant.
+
+#ifdef JUDYPREV
+#define	LEAF_EDGE(MinIndex,Digits)			\
+	{						\
+	    if (MinIndex) { --Index; RET_SUCCESS; }	\
+	    SMRESTART(Digits);				\
+	}
+#else
+#define	LEAF_EDGE(MaxIndex,Digits)			\
+	{						\
+	    if ((MaxIndex) != JU_LEASTBYTES(cJU_ALLONES, Digits)) \
+	    { ++Index; RET_SUCCESS; }			\
+	    SMRESTART(Digits);				\
+	}
+#endif
+
+// Same as above except Index is not already set to match the lowest/highest
+// index, so do that before decrementing/incrementing it:
+
+#ifdef JUDYPREV
+#define	LEAF_EDGE_SET(MinIndex,Digits)	\
+	{				\
+	    if (MinIndex)		\
+	    { JU_SETDIGITS(Index, MinIndex, Digits); --Index; RET_SUCCESS; } \
+	    SMRESTART(Digits);		\
+	}
+#else
+#define	LEAF_EDGE_SET(MaxIndex,Digits)	\
+	{				\
+	    if ((MaxIndex) != JU_LEASTBYTES(cJU_ALLONES, Digits))	    \
+	    { JU_SETDIGITS(Index, MaxIndex, Digits); ++Index; RET_SUCCESS; } \
+	    SMRESTART(Digits);		\
+	}
+#endif
+
+
+// FIND A HOLE (EMPTY INDEX) IN AN IMMEDIATE OR LEAF:
+//
+// Given an index location in a leaf (or equivalently an immediate JP) known to
+// contain a usable hole (an empty index less/greater than Index), and the LSBs
+// of a minimum/maximum index to locate, find the previous/next empty index and
+// return it.
+//
+// Note:  "Even" index sizes (1,2,4[,8] bytes) have corresponding native C
+// types; "odd" index sizes dont, but they are not represented here because
+// they are handled completely differently; see elsewhere.
+
+#ifdef JUDYPREV
+
+#define	LEAF_HOLE_EVEN(cDigits,Pjll,IndexLSB)				\
+	{								\
+	    while (*(Pjll) > (IndexLSB)) --(Pjll); /* too high */	\
+	    if (*(Pjll) < (IndexLSB)) RET_SUCCESS  /* Index is empty */	\
+	    while (*(--(Pjll)) == --(IndexLSB)) /* null, find a hole */;\
+	    JU_SETDIGITS(Index, IndexLSB, cDigits);			\
+	    RET_SUCCESS;						\
+	}
+#else
+#define	LEAF_HOLE_EVEN(cDigits,Pjll,IndexLSB)				\
+	{								\
+	    while (*(Pjll) < (IndexLSB)) ++(Pjll); /* too low */	\
+	    if (*(Pjll) > (IndexLSB)) RET_SUCCESS  /* Index is empty */	\
+	    while (*(++(Pjll)) == ++(IndexLSB)) /* null, find a hole */;\
+	    JU_SETDIGITS(Index, IndexLSB, cDigits);			\
+	    RET_SUCCESS;						\
+	}
+#endif
+
+
+// SEARCH FOR AN EMPTY INDEX IN AN IMMEDIATE OR LEAF:
+//
+// Given a pointer to the first index in a leaf (or equivalently an immediate
+// JP), the population of the leaf, and a first empty Index to find (inclusive,
+// as Index in the context), where Index is known to fall within the expanse of
+// the leaf to search, efficiently find the previous/next empty index in the
+// leaf, if any.  For simplicity the following overview is stated in terms of
+// Judy*NextEmpty() only, but the same concepts apply symmetrically for
+// Judy*PrevEmpty().  Also, in each case the comparisons are for the LSBs of
+// Index and leaf indexes, according to the leafs level.
+//
+// 1.  If Index is GREATER than the last (highest) index in the leaf
+//     (maxindex), return success, Index is empty.  (Remember, Index is known
+//     to be in the leafs expanse.)
+//
+// 2.  If Index is EQUAL to maxindex:  If maxindex is not at the edge of the
+//     leafs expanse, increment Index and return success, there is an empty
+//     Index one higher than any in the leaf; otherwise restart with Index
+//     reset to the upper edge of the leafs expanse.  Note:  This might cause
+//     an extra cache line fill, but this is OK for repeatedly-called search
+//     code, and it saves CPU time.
+//
+// 3.  If Index is LESS than maxindex, check for "dense to end of leaf":
+//     Subtract Index from maxindex, and back up that many slots in the leaf.
+//     If the resulting offset is not before the start of the leaf then compare
+//     the index at this offset (baseindex) with Index:
+//
+// 3a.  If GREATER, the leaf must be corrupt, since indexes are sorted and
+//      there are no duplicates.
+//
+// 3b.  If EQUAL, the leaf is "dense" from Index to maxindex, meaning there is
+//      no reason to search it.  "Slide right" to the high end of the leaf
+//      (modify Index to maxindex) and continue with step 2 above.
+//
+// 3c.  If LESS, continue with step 4.
+//
+// 4.  If the offset based on maxindex minus Index falls BEFORE the start of
+//     the leaf, or if, per 3c above, baseindex is LESS than Index, the leaf is
+//     guaranteed "not dense to the end" and a usable empty Index must exist.
+//     This supports a more efficient search loop.  Start at the FIRST index in
+//     the leaf, or one BEYOND baseindex, respectively, and search the leaf as
+//     follows, comparing each current index (currindex) with Index:
+//
+// 4a.  If LESS, keep going to next index.  Note:  This is certain to terminate
+//      because maxindex is known to be greater than Index, hence the loop can
+//      be small and fast.
+//
+// 4b.  If EQUAL, loop and increment Index until finding currindex greater than
+//      Index, and return success with the modified Index.
+//
+// 4c.  If GREATER, return success, Index (unmodified) is empty.
+//
+// Note:  These are macros rather than functions for speed.
+
+#ifdef JUDYPREV
+
+#define	JSLE_EVEN(Addr,Pop0,cDigits,LeafType)				\
+	{								\
+	    LeafType * PjllLSB  = (LeafType *) (Addr);			\
+	    LeafType   IndexLSB = Index;	/* auto-masking */	\
+									\
+	/* Index before or at start of leaf: */				\
+									\
+	    if (*PjllLSB >= IndexLSB)		/* no need to search */	\
+	    {								\
+		if (*PjllLSB > IndexLSB) RET_SUCCESS; /* Index empty */	\
+		LEAF_EDGE(*PjllLSB, cDigits);				\
+	    }								\
+									\
+	/* Index in or after leaf: */					\
+									\
+	    offset = IndexLSB - *PjllLSB;	/* tentative offset  */	\
+	    if (offset <= (Pop0))		/* can check density */	\
+	    {								\
+		PjllLSB += offset;		/* move to slot */	\
+									\
+		if (*PjllLSB <= IndexLSB)	/* dense or corrupt */	\
+		{							\
+		    if (*PjllLSB == IndexLSB)	/* dense, check edge */	\
+			LEAF_EDGE_SET(PjllLSB[-offset], cDigits);	\
+		    RET_CORRUPT;					\
+		}							\
+		--PjllLSB;	/* not dense, start at previous */	\
+	    }								\
+	    else PjllLSB = ((LeafType *) (Addr)) + (Pop0); /* start at max */ \
+									\
+	    LEAF_HOLE_EVEN(cDigits, PjllLSB, IndexLSB);			\
+	}
+
+// JSLE_ODD is completely different from JSLE_EVEN because its important to
+// minimize copying odd indexes to compare them (see 4.14).  Furthermore, a
+// very complex version (4.17, but abandoned before fully debugged) that
+// avoided calling j__udySearchLeaf*() ran twice as fast as 4.14, but still
+// half as fast as SearchValid.  Doug suggested that to minimize complexity and
+// share common code we should use j__udySearchLeaf*() for the initial search
+// to establish if Index is empty, which should be common.  If Index is valid
+// in a leaf or immediate indexes, odds are good that an empty Index is nearby,
+// so for simplicity just use a *COPY* function to linearly search the
+// remainder.
+//
+// TBD:  Pathological case?  Average performance should be good, but worst-case
+// might suffer.  When Search says the initial Index is valid, so a linear
+// copy-and-compare is begun, if the caller builds fairly large leaves with
+// dense clusters AND frequently does a SearchEmpty at one end of such a
+// cluster, performance wont be very good.  Might a dense-check help?  This
+// means checking offset against the index at offset, and then against the
+// first/last index in the leaf.  We doubt the pathological case will appear
+// much in real applications because they will probably alternate SearchValid
+// and SearchEmpty calls.
+
+#define	JSLE_ODD(cDigits,Pjll,Pop0,Search,Copy)				\
+	{								\
+	    Word_t IndexLSB;		/* least bytes only */		\
+	    Word_t IndexFound;		/* in leaf	    */		\
+									\
+	    if ((offset = Search(Pjll, (Pop0) + 1, Index)) < 0)		\
+		RET_SUCCESS;		/* Index is empty */		\
+									\
+	    IndexLSB = JU_LEASTBYTES(Index, cDigits);			\
+	    offset  *= (cDigits);					\
+									\
+	    while ((offset -= (cDigits)) >= 0)				\
+	    {				/* skip until empty or start */	\
+		Copy(IndexFound, ((uint8_t *) (Pjll)) + offset);	\
+		if (IndexFound != (--IndexLSB))	/* found an empty */	\
+		{ JU_SETDIGITS(Index, IndexLSB, cDigits); RET_SUCCESS; }\
+	    }								\
+	    LEAF_EDGE_SET(IndexLSB, cDigits);				\
+	}
+
+#else // JUDYNEXT
+
+#define	JSLE_EVEN(Addr,Pop0,cDigits,LeafType)				\
+	{								\
+	    LeafType * PjllLSB   = ((LeafType *) (Addr)) + (Pop0);	\
+	    LeafType   IndexLSB = Index;	/* auto-masking */	\
+									\
+	/* Index at or after end of leaf: */				\
+									\
+	    if (*PjllLSB <= IndexLSB)		/* no need to search */	\
+	    {								\
+		if (*PjllLSB < IndexLSB) RET_SUCCESS;  /* Index empty */\
+		LEAF_EDGE(*PjllLSB, cDigits);				\
+	    }								\
+									\
+	/* Index before or in leaf: */					\
+									\
+	    offset = *PjllLSB - IndexLSB;	/* tentative offset  */	\
+	    if (offset <= (Pop0))		/* can check density */	\
+	    {								\
+		PjllLSB -= offset;		/* move to slot */	\
+									\
+		if (*PjllLSB >= IndexLSB)	/* dense or corrupt */	\
+		{							\
+		    if (*PjllLSB == IndexLSB)	/* dense, check edge */	\
+			LEAF_EDGE_SET(PjllLSB[offset], cDigits);	\
+		    RET_CORRUPT;					\
+		}							\
+		++PjllLSB;		/* not dense, start at next */	\
+	    }								\
+	    else PjllLSB = (LeafType *) (Addr);	/* start at minimum */	\
+									\
+	    LEAF_HOLE_EVEN(cDigits, PjllLSB, IndexLSB);			\
+	}
+
+#define	JSLE_ODD(cDigits,Pjll,Pop0,Search,Copy)				\
+	{								\
+	    Word_t IndexLSB;		/* least bytes only */		\
+	    Word_t IndexFound;		/* in leaf	    */		\
+	    int	   offsetmax;		/* in bytes	    */		\
+									\
+	    if ((offset = Search(Pjll, (Pop0) + 1, Index)) < 0)		\
+		RET_SUCCESS;			/* Index is empty */	\
+									\
+	    IndexLSB  = JU_LEASTBYTES(Index, cDigits);			\
+	    offset   *= (cDigits);					\
+	    offsetmax = (Pop0) * (cDigits);	/* single multiply */	\
+									\
+	    while ((offset += (cDigits)) <= offsetmax)			\
+	    {				/* skip until empty or end */	\
+		Copy(IndexFound, ((uint8_t *) (Pjll)) + offset);	\
+		if (IndexFound != (++IndexLSB))	/* found an empty */	\
+		{ JU_SETDIGITS(Index, IndexLSB, cDigits); RET_SUCCESS; } \
+	    }								\
+	    LEAF_EDGE_SET(IndexLSB, cDigits);				\
+	}
+
+#endif // JUDYNEXT
+
+// Note:  Immediate indexes never fill a single index group, so for odd index
+// sizes, save time by calling JSLE_ODD_IMM instead of JSLE_ODD.
+
+#define	j__udySearchLeafEmpty1(Addr,Pop0) \
+	JSLE_EVEN(Addr, Pop0, 1, uint8_t)
+
+#define	j__udySearchLeafEmpty2(Addr,Pop0) \
+	JSLE_EVEN(Addr, Pop0, 2, uint16_t)
+
+#define	j__udySearchLeafEmpty3(Addr,Pop0) \
+	JSLE_ODD(3, Addr, Pop0, j__udySearchLeaf3, JU_COPY3_PINDEX_TO_LONG)
+
+#ifndef JU_64BIT
+
+#define	j__udySearchLeafEmptyL(Addr,Pop0) \
+	JSLE_EVEN(Addr, Pop0, 4, Word_t)
+
+#else
+
+#define	j__udySearchLeafEmpty4(Addr,Pop0) \
+	JSLE_EVEN(Addr, Pop0, 4, uint32_t)
+
+#define	j__udySearchLeafEmpty5(Addr,Pop0) \
+	JSLE_ODD(5, Addr, Pop0, j__udySearchLeaf5, JU_COPY5_PINDEX_TO_LONG)
+
+#define	j__udySearchLeafEmpty6(Addr,Pop0) \
+	JSLE_ODD(6, Addr, Pop0, j__udySearchLeaf6, JU_COPY6_PINDEX_TO_LONG)
+
+#define	j__udySearchLeafEmpty7(Addr,Pop0) \
+	JSLE_ODD(7, Addr, Pop0, j__udySearchLeaf7, JU_COPY7_PINDEX_TO_LONG)
+
+#define	j__udySearchLeafEmptyL(Addr,Pop0) \
+	JSLE_EVEN(Addr, Pop0, 8, Word_t)
+
+#endif // JU_64BIT
+
+
+// ----------------------------------------------------------------------------
+// START OF CODE:
+//
+// CHECK FOR SHORTCUTS:
+//
+// Error out if PIndex is null.
+
+	if (PIndex == (PWord_t) NULL)
+	{
+	    JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+	    return(JERRI);
+	}
+
+	Index = *PIndex;			// fast local copy.
+
+// Set and pre-decrement/increment Index, watching for underflow/overflow:
+//
+// An out-of-bounds Index means failure:  No previous/next empty index.
+
+SMGetRestart:		// return here with revised Index.
+
+#ifdef JUDYPREV
+	if (Index-- == 0) return(0);
+#else
+	if (++Index == 0) return(0);
+#endif
+
+// An empty array with an in-bounds (not underflowed/overflowed) Index means
+// success:
+//
+// Note:  This check is redundant after restarting at SMGetRestart, but should
+// take insignificant time.
+
+	if (PArray == (Pvoid_t) NULL) RET_SUCCESS;
+
+// ----------------------------------------------------------------------------
+// ROOT-LEVEL LEAF that starts with a Pop0 word; just look within the leaf:
+//
+// If Index is not in the leaf, return success; otherwise return the first
+// empty Index, if any, below/above where it would belong.
+
+	if (JU_LEAFW_POP0(PArray) < cJU_LEAFW_MAXPOP1) // must be a LEAFW
+	{
+	    Pjlw_t Pjlw = P_JLW(PArray);	// first word of leaf.
+	    pop0 = Pjlw[0];
+
+#ifdef	JUDY1
+	    if (pop0 == 0)			// special case.
+	    {
+#ifdef JUDYPREV
+		if ((Index != Pjlw[1]) || (Index-- != 0)) RET_SUCCESS;
+#else
+		if ((Index != Pjlw[1]) || (++Index != 0)) RET_SUCCESS;
+#endif
+		return(0);		// no previous/next empty index.
+	    }
+#endif // JUDY1
+
+	    j__udySearchLeafEmptyL(Pjlw + 1, pop0);
+
+//  No return -- thanks ALAN
+
+	}
+	else
+
+// ----------------------------------------------------------------------------
+// HANDLE JRP Branch:
+//
+// For JRP branches, traverse the JPM; handle LEAFW
+// directly; but look for the most common cases first.
+
+	{
+	    Pjpm_t Pjpm = P_JPM(PArray);
+	    Pjp = &(Pjpm->jpm_JP);
+
+//	    goto SMGetContinue;
+	}
+
+
+// ============================================================================
+// STATE MACHINE -- GET INDEX:
+//
+// Search for Index (already decremented/incremented so as to be an inclusive
+// search).  If not found (empty index), return success.  Otherwise do a
+// previous/next search, and if successful modify Index to the empty index
+// found.  See function header comments.
+//
+// ENTRY:  Pjp points to next JP to interpret, whose Decode bytes have not yet
+// been checked.
+//
+// Note:  Check Decode bytes at the start of each loop, not after looking up a
+// new JP, so its easy to do constant shifts/masks.
+//
+// EXIT:  Return, or branch to SMGetRestart with modified Index, or branch to
+// SMGetContinue with a modified Pjp, as described elsewhere.
+//
+// WARNING:  For run-time efficiency the following cases replicate code with
+// varying constants, rather than using common code with variable values!
+
+SMGetContinue:			// return here for next branch/leaf.
+
+#ifdef TRACEJPSE
+	JudyPrintJP(Pjp, "sf", __LINE__);
+#endif
+
+	switch (JU_JPTYPE(Pjp))
+	{
+
+
+// ----------------------------------------------------------------------------
+// LINEAR BRANCH:
+//
+// Check Decode bytes, if any, in the current JP, then search for a JP for the
+// next digit in Index.
+
+	case cJU_JPBRANCH_L2: CHECKDCD(2); SMPREPB2(SMBranchL);
+	case cJU_JPBRANCH_L3: CHECKDCD(3); SMPREPB3(SMBranchL);
+#ifdef JU_64BIT
+	case cJU_JPBRANCH_L4: CHECKDCD(4); SMPREPB4(SMBranchL);
+	case cJU_JPBRANCH_L5: CHECKDCD(5); SMPREPB5(SMBranchL);
+	case cJU_JPBRANCH_L6: CHECKDCD(6); SMPREPB6(SMBranchL);
+	case cJU_JPBRANCH_L7: CHECKDCD(7); SMPREPB7(SMBranchL);
+#endif
+	case cJU_JPBRANCH_L:		   SMPREPBL(SMBranchL);
+
+// Common code (state-independent) for all cases of linear branches:
+
+SMBranchL:
+	    Pjbl = P_JBL(Pjp->jp_Addr);
+
+// First, check if Indexs expanse (digit) is below/above the first/last
+// populated expanse in the BranchL, in which case Index is empty; otherwise
+// find the offset of the lowest/highest populated expanse at or above/below
+// digit, if any:
+//
+// Note:  The for-loop is guaranteed to exit eventually because the first/last
+// expanse is known to be a terminator.
+//
+// Note:  Cannot use j__udySearchLeaf*Empty1() here because it only applies to
+// leaves and does not know about partial versus full JPs, unlike the use of
+// j__udySearchLeaf1() for BranchLs in SearchValid code.  Also, since linear
+// leaf expanse lists are small, dont waste time calling j__udySearchLeaf1(),
+// just scan the expanse list.
+
+#ifdef JUDYPREV
+	    if ((Pjbl->jbl_Expanse[0]) > digit) RET_SUCCESS;
+
+	    for (offset = (Pjbl->jbl_NumJPs) - 1; /* null */; --offset)
+#else
+	    if ((Pjbl->jbl_Expanse[(Pjbl->jbl_NumJPs) - 1]) < digit)
+		RET_SUCCESS;
+
+	    for (offset = 0; /* null */; ++offset)
+#endif
+	    {
+
+// Too low/high, keep going; or too high/low, meaning the loop passed a hole
+// and the initial Index is empty:
+
+#ifdef JUDYPREV
+		if ((Pjbl->jbl_Expanse[offset]) > digit) continue;
+		if ((Pjbl->jbl_Expanse[offset]) < digit) RET_SUCCESS;
+#else
+		if ((Pjbl->jbl_Expanse[offset]) < digit) continue;
+		if ((Pjbl->jbl_Expanse[offset]) > digit) RET_SUCCESS;
+#endif
+
+// Found expanse matching digit; if its not full, traverse through it:
+
+		if (! JPFULL((Pjbl->jbl_jp) + offset))
+		{
+		    Pjp = (Pjbl->jbl_jp) + offset;
+		    goto SMGetContinue;
+		}
+
+// Common code:  While searching for a lower/higher hole or a non-full JP, upon
+// finding a lower/higher hole, adjust Index using the revised digit and
+// return; or upon finding a consecutive lower/higher expanse, if the expanses
+// JP is non-full, modify Index and traverse through the JP:
+
+#define	BRANCHL_CHECK(OpIncDec,OpLeastDigits,Digit,Digits)	\
+	{							\
+	    if ((Pjbl->jbl_Expanse[offset]) != OpIncDec digit)	\
+		SET_AND_RETURN(OpLeastDigits, Digit, Digits);	\
+								\
+	    if (! JPFULL((Pjbl->jbl_jp) + offset))		\
+	    {							\
+		Pjp = (Pjbl->jbl_jp) + offset;			\
+		SET_AND_CONTINUE(OpLeastDigits, Digit, Digits);	\
+	    }							\
+	}
+
+// BranchL primary dead end:  Expanse matching Index/digit is full (rare except
+// for dense/sequential indexes):
+//
+// Search for a lower/higher hole, a non-full JP, or the end of the expanse
+// list, while decrementing/incrementing digit.
+
+#ifdef JUDYPREV
+		while (--offset >= 0)
+		    BRANCHL_CHECK(--, SETLEASTDIGITS_D, digit, digits)
+#else
+		while (++offset < Pjbl->jbl_NumJPs)
+		    BRANCHL_CHECK(++, CLEARLEASTDIGITS_D, digit, digits)
+#endif
+
+// Passed end of BranchL expanse list after finding a matching but full
+// expanse:
+//
+// Digit now matches the lowest/highest expanse, which is a full expanse; if
+// digit is at the end of BranchLs expanse (no hole before/after), break out
+// of the loop; otherwise modify Index to the next lower/higher digit and
+// return success:
+
+#ifdef JUDYPREV
+		if (digit == 0) break;
+		--digit; SET_AND_RETURN(SETLEASTDIGITS_D, digit, digits);
+#else
+		if (digit == JU_LEASTBYTES(cJU_ALLONES, 1)) break;
+		++digit; SET_AND_RETURN(CLEARLEASTDIGITS_D, digit, digits);
+#endif
+	    } // for-loop
+
+// BranchL secondary dead end, no non-full previous/next JP:
+
+	    SMRESTART(digits);
+
+
+// ----------------------------------------------------------------------------
+// BITMAP BRANCH:
+//
+// Check Decode bytes, if any, in the current JP, then search for a JP for the
+// next digit in Index.
+
+	case cJU_JPBRANCH_B2: CHECKDCD(2); SMPREPB2(SMBranchB);
+	case cJU_JPBRANCH_B3: CHECKDCD(3); SMPREPB3(SMBranchB);
+#ifdef JU_64BIT
+	case cJU_JPBRANCH_B4: CHECKDCD(4); SMPREPB4(SMBranchB);
+	case cJU_JPBRANCH_B5: CHECKDCD(5); SMPREPB5(SMBranchB);
+	case cJU_JPBRANCH_B6: CHECKDCD(6); SMPREPB6(SMBranchB);
+	case cJU_JPBRANCH_B7: CHECKDCD(7); SMPREPB7(SMBranchB);
+#endif
+	case cJU_JPBRANCH_B:		   SMPREPBL(SMBranchB);
+
+// Common code (state-independent) for all cases of bitmap branches:
+
+SMBranchB:
+	    Pjbb = P_JBB(Pjp->jp_Addr);
+
+// Locate the digits JP in the subexpanse list, if present:
+
+	    subexp     = digit / cJU_BITSPERSUBEXPB;
+	    assert(subexp < cJU_NUMSUBEXPB);	// falls in expected range.
+	    bitposmaskB = JU_BITPOSMASKB(digit);
+
+// Absent JP = no JP matches current digit in Index:
+
+//	    if (! JU_BITMAPTESTB(Pjbb, digit))			// slower.
+	    if (! (JU_JBB_BITMAP(Pjbb, subexp) & bitposmaskB))	// faster.
+		RET_SUCCESS;
+
+// Non-full JP matches current digit in Index:
+//
+// Iterate to the subsidiary non-full JP.
+
+	    offset = SEARCHBITMAPB(JU_JBB_BITMAP(Pjbb, subexp), digit,
+				   bitposmaskB);
+	    // not negative since at least one bit is set:
+	    assert(offset >= 0);
+	    assert(offset < (int) cJU_BITSPERSUBEXPB);
+
+// Watch for null JP subarray pointer with non-null bitmap (a corruption):
+
+	    if ((Pjp = P_JP(JU_JBB_PJP(Pjbb, subexp)))
+	     == (Pjp_t) NULL) RET_CORRUPT;
+
+	    Pjp += offset;
+	    if (! JPFULL(Pjp)) goto SMGetContinue;
+
+// BranchB primary dead end:
+//
+// Upon hitting a full JP in a BranchB for the next digit in Index, search
+// sideways for a previous/next absent JP (unset bit) or non-full JP (set bit
+// with non-full JP); first in the current bitmap subexpanse, then in
+// lower/higher subexpanses.  Upon entry, Pjp points to a known-unusable JP,
+// ready to decrement/increment.
+//
+// Note:  The preceding code is separate from this loop because Index does not
+// need revising (see SET_AND_*()) if the initial index is an empty index.
+//
+// TBD:  For speed, shift bitposmaskB instead of using JU_BITMAPTESTB or
+// JU_BITPOSMASKB, but this shift has knowledge of bit order that really should
+// be encapsulated in a header file.
+
+#define	BRANCHB_CHECKBIT(OpLeastDigits)					\
+    if (! (JU_JBB_BITMAP(Pjbb, subexp) & bitposmaskB))  /* absent JP */	\
+	SET_AND_RETURN(OpLeastDigits, digit, digits)
+
+#define	BRANCHB_CHECKJPFULL(OpLeastDigits)				\
+    if (! JPFULL(Pjp))							\
+	SET_AND_CONTINUE(OpLeastDigits, digit, digits)
+
+#define	BRANCHB_STARTSUBEXP(OpLeastDigits)				\
+    if (! JU_JBB_BITMAP(Pjbb, subexp)) /* empty subexpanse, shortcut */ \
+	SET_AND_RETURN(OpLeastDigits, digit, digits)			\
+    if ((Pjp = P_JP(JU_JBB_PJP(Pjbb, subexp))) == (Pjp_t) NULL) RET_CORRUPT
+
+#ifdef JUDYPREV
+
+	    --digit;				// skip initial digit.
+	    bitposmaskB >>= 1;			// see TBD above.
+
+BranchBNextSubexp:	// return here to check next bitmap subexpanse.
+
+	    while (bitposmaskB)			// more bits to check in subexp.
+	    {
+		BRANCHB_CHECKBIT(SETLEASTDIGITS_D);
+		--Pjp;				// previous in subarray.
+		BRANCHB_CHECKJPFULL(SETLEASTDIGITS_D);
+		assert(digit >= 0);
+		--digit;
+		bitposmaskB >>= 1;
+	    }
+
+	    if (subexp-- > 0)			// more subexpanses.
+	    {
+		BRANCHB_STARTSUBEXP(SETLEASTDIGITS_D);
+		Pjp += SEARCHBITMAPMAXB(JU_JBB_BITMAP(Pjbb, subexp)) + 1;
+		bitposmaskB = (1U << (cJU_BITSPERSUBEXPB - 1));
+		goto BranchBNextSubexp;
+	    }
+
+#else // JUDYNEXT
+
+	    ++digit;				// skip initial digit.
+	    bitposmaskB <<= 1;			// note:  BITMAPB_t.
+
+BranchBNextSubexp:	// return here to check next bitmap subexpanse.
+
+	    while (bitposmaskB)			// more bits to check in subexp.
+	    {
+		BRANCHB_CHECKBIT(CLEARLEASTDIGITS_D);
+		++Pjp;				// previous in subarray.
+		BRANCHB_CHECKJPFULL(CLEARLEASTDIGITS_D);
+		assert(digit < cJU_SUBEXPPERSTATE);
+		++digit;
+		bitposmaskB <<= 1;		// note:  BITMAPB_t.
+	    }
+
+	    if (++subexp < cJU_NUMSUBEXPB)	// more subexpanses.
+	    {
+		BRANCHB_STARTSUBEXP(CLEARLEASTDIGITS_D);
+		--Pjp;				// pre-decrement.
+		bitposmaskB = 1;
+		goto BranchBNextSubexp;
+	    }
+
+#endif // JUDYNEXT
+
+// BranchB secondary dead end, no non-full previous/next JP:
+
+	    SMRESTART(digits);
+
+
+// ----------------------------------------------------------------------------
+// UNCOMPRESSED BRANCH:
+//
+// Check Decode bytes, if any, in the current JP, then search for a JP for the
+// next digit in Index.
+
+	case cJU_JPBRANCH_U2: CHECKDCD(2); SMPREPB2(SMBranchU);
+	case cJU_JPBRANCH_U3: CHECKDCD(3); SMPREPB3(SMBranchU);
+#ifdef JU_64BIT
+	case cJU_JPBRANCH_U4: CHECKDCD(4); SMPREPB4(SMBranchU);
+	case cJU_JPBRANCH_U5: CHECKDCD(5); SMPREPB5(SMBranchU);
+	case cJU_JPBRANCH_U6: CHECKDCD(6); SMPREPB6(SMBranchU);
+	case cJU_JPBRANCH_U7: CHECKDCD(7); SMPREPB7(SMBranchU);
+#endif
+	case cJU_JPBRANCH_U:		   SMPREPBL(SMBranchU);
+
+// Common code (state-independent) for all cases of uncompressed branches:
+
+SMBranchU:
+	    Pjbu = P_JBU(Pjp->jp_Addr);
+	    Pjp	 = (Pjbu->jbu_jp) + digit;
+
+// Absent JP = null JP for current digit in Index:
+
+	    if (JPNULL(JU_JPTYPE(Pjp))) RET_SUCCESS;
+
+// Non-full JP matches current digit in Index:
+//
+// Iterate to the subsidiary JP.
+
+	    if (! JPFULL(Pjp)) goto SMGetContinue;
+
+// BranchU primary dead end:
+//
+// Upon hitting a full JP in a BranchU for the next digit in Index, search
+// sideways for a previous/next null or non-full JP.  BRANCHU_CHECKJP() is
+// shorthand for common code.
+//
+// Note:  The preceding code is separate from this loop because Index does not
+// need revising (see SET_AND_*()) if the initial index is an empty index.
+
+#define	BRANCHU_CHECKJP(OpIncDec,OpLeastDigits)			\
+	{							\
+	    OpIncDec Pjp;					\
+								\
+	    if (JPNULL(JU_JPTYPE(Pjp)))				\
+		SET_AND_RETURN(OpLeastDigits, digit, digits)	\
+								\
+	    if (! JPFULL(Pjp))					\
+		SET_AND_CONTINUE(OpLeastDigits, digit, digits)	\
+	}
+
+#ifdef JUDYPREV
+	    while (digit-- > 0)
+		BRANCHU_CHECKJP(--, SETLEASTDIGITS_D);
+#else
+	    while (++digit < cJU_BRANCHUNUMJPS)
+		BRANCHU_CHECKJP(++, CLEARLEASTDIGITS_D);
+#endif
+
+// BranchU secondary dead end, no non-full previous/next JP:
+
+	    SMRESTART(digits);
+
+
+// ----------------------------------------------------------------------------
+// LINEAR LEAF:
+//
+// Check Decode bytes, if any, in the current JP, then search the leaf for the
+// previous/next empty index starting at Index.  Primary leaf dead end is
+// hidden within j__udySearchLeaf*Empty*().  In case of secondary leaf dead
+// end, restart at the top of the tree.
+//
+// Note:  Pword is the name known to GET*; think of it as Pjlw.
+
+#define	SMLEAFL(cDigits,Func)                   \
+	Pword = (PWord_t) P_JLW(Pjp->jp_Addr);  \
+	pop0  = JU_JPLEAF_POP0(Pjp);            \
+	Func(Pword, pop0)
+
+#if (defined(JUDYL) || (! defined(JU_64BIT)))
+	case cJU_JPLEAF1:  CHECKDCD(1); SMLEAFL(1, j__udySearchLeafEmpty1);
+#endif
+	case cJU_JPLEAF2:  CHECKDCD(2); SMLEAFL(2, j__udySearchLeafEmpty2);
+	case cJU_JPLEAF3:  CHECKDCD(3); SMLEAFL(3, j__udySearchLeafEmpty3);
+
+#ifdef JU_64BIT
+	case cJU_JPLEAF4:  CHECKDCD(4); SMLEAFL(4, j__udySearchLeafEmpty4);
+	case cJU_JPLEAF5:  CHECKDCD(5); SMLEAFL(5, j__udySearchLeafEmpty5);
+	case cJU_JPLEAF6:  CHECKDCD(6); SMLEAFL(6, j__udySearchLeafEmpty6);
+	case cJU_JPLEAF7:  CHECKDCD(7); SMLEAFL(7, j__udySearchLeafEmpty7);
+#endif
+
+
+// ----------------------------------------------------------------------------
+// BITMAP LEAF:
+//
+// Check Decode bytes, if any, in the current JP, then search the leaf for the
+// previous/next empty index starting at Index.
+
+	case cJU_JPLEAF_B1:
+
+	    CHECKDCD(1);
+
+	    Pjlb	= P_JLB(Pjp->jp_Addr);
+	    digit	= JU_DIGITATSTATE(Index, 1);
+	    subexp	= digit / cJU_BITSPERSUBEXPL;
+	    bitposmaskL	= JU_BITPOSMASKL(digit);
+	    assert(subexp < cJU_NUMSUBEXPL);	// falls in expected range.
+
+// Absent index = no index matches current digit in Index:
+
+//	    if (! JU_BITMAPTESTL(Pjlb, digit))			// slower.
+	    if (! (JU_JLB_BITMAP(Pjlb, subexp) & bitposmaskL))	// faster.
+		RET_SUCCESS;
+
+// LeafB1 primary dead end:
+//
+// Upon hitting a valid (non-empty) index in a LeafB1 for the last digit in
+// Index, search sideways for a previous/next absent index, first in the
+// current bitmap subexpanse, then in lower/higher subexpanses.
+// LEAFB1_CHECKBIT() is shorthand for common code to handle one bit in one
+// bitmap subexpanse.
+//
+// Note:  The preceding code is separate from this loop because Index does not
+// need revising (see SET_AND_*()) if the initial index is an empty index.
+//
+// TBD:  For speed, shift bitposmaskL instead of using JU_BITMAPTESTL or
+// JU_BITPOSMASKL, but this shift has knowledge of bit order that really should
+// be encapsulated in a header file.
+
+#define	LEAFB1_CHECKBIT(OpLeastDigits)				\
+	if (! (JU_JLB_BITMAP(Pjlb, subexp) & bitposmaskL))	\
+	    SET_AND_RETURN(OpLeastDigits, digit, 1)
+
+#define	LEAFB1_STARTSUBEXP(OpLeastDigits)			\
+	if (! JU_JLB_BITMAP(Pjlb, subexp)) /* empty subexp */	\
+	    SET_AND_RETURN(OpLeastDigits, digit, 1)
+
+#ifdef JUDYPREV
+
+	    --digit;				// skip initial digit.
+	    bitposmaskL >>= 1;			// see TBD above.
+
+LeafB1NextSubexp:	// return here to check next bitmap subexpanse.
+
+	    while (bitposmaskL)			// more bits to check in subexp.
+	    {
+		LEAFB1_CHECKBIT(SETLEASTDIGITS_D);
+		assert(digit >= 0);
+		--digit;
+		bitposmaskL >>= 1;
+	    }
+
+	    if (subexp-- > 0)		// more subexpanses.
+	    {
+		LEAFB1_STARTSUBEXP(SETLEASTDIGITS_D);
+		bitposmaskL = ((Word_t)1U << (cJU_BITSPERSUBEXPL - 1));
+		goto LeafB1NextSubexp;
+	    }
+
+#else // JUDYNEXT
+
+	    ++digit;				// skip initial digit.
+	    bitposmaskL <<= 1;			// note:  BITMAPL_t.
+
+LeafB1NextSubexp:	// return here to check next bitmap subexpanse.
+
+	    while (bitposmaskL)			// more bits to check in subexp.
+	    {
+		LEAFB1_CHECKBIT(CLEARLEASTDIGITS_D);
+		assert(digit < cJU_SUBEXPPERSTATE);
+		++digit;
+		bitposmaskL <<= 1;		// note:  BITMAPL_t.
+	    }
+
+	    if (++subexp < cJU_NUMSUBEXPL)	// more subexpanses.
+	    {
+		LEAFB1_STARTSUBEXP(CLEARLEASTDIGITS_D);
+		bitposmaskL = 1;
+		goto LeafB1NextSubexp;
+	    }
+
+#endif // JUDYNEXT
+
+// LeafB1 secondary dead end, no empty index:
+
+	    SMRESTART(1);
+
+
+#ifdef JUDY1
+// ----------------------------------------------------------------------------
+// FULL POPULATION:
+//
+// If the Decode bytes do not match, Index is empty (without modification);
+// otherwise restart.
+
+	case cJ1_JPFULLPOPU1:
+
+	    CHECKDCD(1);
+	    SMRESTART(1);
+#endif
+
+
+// ----------------------------------------------------------------------------
+// IMMEDIATE:
+//
+// Pop1 = 1 Immediate JPs:
+//
+// If Index is not in the immediate JP, return success; otherwise check if
+// there is an empty index below/above the immediate JPs index, and if so,
+// return success with modified Index, else restart.
+//
+// Note:  Doug says its fast enough to calculate the index size (digits) in
+// the following; no need to set it separately for each case.
+
+	case cJU_JPIMMED_1_01:
+	case cJU_JPIMMED_2_01:
+	case cJU_JPIMMED_3_01:
+#ifdef JU_64BIT
+	case cJU_JPIMMED_4_01:
+	case cJU_JPIMMED_5_01:
+	case cJU_JPIMMED_6_01:
+	case cJU_JPIMMED_7_01:
+#endif
+	    if (JU_JPDCDPOP0(Pjp) != JU_TRIMTODCDSIZE(Index)) RET_SUCCESS;
+	    digits = JU_JPTYPE(Pjp) - cJU_JPIMMED_1_01 + 1;
+	    LEAF_EDGE(JU_LEASTBYTES(JU_JPDCDPOP0(Pjp), digits), digits);
+
+// Immediate JPs with Pop1 > 1:
+
+#define	IMM_MULTI(Func,BaseJPType)			\
+	JUDY1CODE(Pword = (PWord_t) (Pjp->jp_1Index);)	\
+	JUDYLCODE(Pword = (PWord_t) (Pjp->jp_LIndex);)	\
+	Func(Pword, JU_JPTYPE(Pjp) - (BaseJPType) + 1)
+
+	case cJU_JPIMMED_1_02:
+	case cJU_JPIMMED_1_03:
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_1_04:
+	case cJU_JPIMMED_1_05:
+	case cJU_JPIMMED_1_06:
+	case cJU_JPIMMED_1_07:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_1_08:
+	case cJ1_JPIMMED_1_09:
+	case cJ1_JPIMMED_1_10:
+	case cJ1_JPIMMED_1_11:
+	case cJ1_JPIMMED_1_12:
+	case cJ1_JPIMMED_1_13:
+	case cJ1_JPIMMED_1_14:
+	case cJ1_JPIMMED_1_15:
+#endif
+	    IMM_MULTI(j__udySearchLeafEmpty1, cJU_JPIMMED_1_02);
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_2_02:
+	case cJU_JPIMMED_2_03:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_2_04:
+	case cJ1_JPIMMED_2_05:
+	case cJ1_JPIMMED_2_06:
+	case cJ1_JPIMMED_2_07:
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+	    IMM_MULTI(j__udySearchLeafEmpty2, cJU_JPIMMED_2_02);
+#endif
+
+#if (defined(JUDY1) || defined(JU_64BIT))
+	case cJU_JPIMMED_3_02:
+#endif
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_3_03:
+	case cJ1_JPIMMED_3_04:
+	case cJ1_JPIMMED_3_05:
+#endif
+#if (defined(JUDY1) || defined(JU_64BIT))
+	    IMM_MULTI(j__udySearchLeafEmpty3, cJU_JPIMMED_3_02);
+#endif
+
+#if (defined(JUDY1) && defined(JU_64BIT))
+	case cJ1_JPIMMED_4_02:
+	case cJ1_JPIMMED_4_03:
+	    IMM_MULTI(j__udySearchLeafEmpty4, cJ1_JPIMMED_4_02);
+
+	case cJ1_JPIMMED_5_02:
+	case cJ1_JPIMMED_5_03:
+	    IMM_MULTI(j__udySearchLeafEmpty5, cJ1_JPIMMED_5_02);
+
+	case cJ1_JPIMMED_6_02:
+	    IMM_MULTI(j__udySearchLeafEmpty6, cJ1_JPIMMED_6_02);
+
+	case cJ1_JPIMMED_7_02:
+	    IMM_MULTI(j__udySearchLeafEmpty7, cJ1_JPIMMED_7_02);
+#endif
+
+
+// ----------------------------------------------------------------------------
+// INVALID JP TYPE:
+
+	default: RET_CORRUPT;
+
+	} // SMGet switch.
+
+} // Judy1PrevEmpty() / Judy1NextEmpty() / JudyLPrevEmpty() / JudyLNextEmpty()
diff --git a/libs/klib/judy/JudyPrintJP.c b/libs/klib/judy/JudyPrintJP.c
new file mode 100644
index 0000000..3764da1
--- /dev/null
+++ b/libs/klib/judy/JudyPrintJP.c
@@ -0,0 +1,399 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// JudyPrintJP() debugging/tracing function for Judy1 or JudyL code.
+// The caller should #include this file, with its static function (replicated
+// in each compilation unit), in another *.c file, and compile with one of
+// -DJUDY1 or -DJUDYL.
+//
+// The caller can set j__udyIndex and/or j__udyPopulation non-zero to have
+// those values reported, and also to control trace-enabling (see below).
+//
+// Tracing is disabled by default unless one or both of two env parameters is
+// set (regardless of value).  If either value is set but null or evaluates to
+// zero, tracing is immediately enabled.  To disable tracing until a particular
+// j__udy*Index value is seen, set STARTINDEX=<hex-index> in the env.  To
+// disable it until a particular j__udy*Population value is seen, set
+// STARTPOP=<decimal-population> in the env.  Once either condition is met,
+// tracing "latches on".
+//
+// Example:
+//
+//      STARTPOP=0              // immediate tracing.
+//      STARTINDEX=f35430a8     // not until one of these is met.
+//      STARTPOP=1000000
+//
+// Note:  Trace-enabling does nothing unless the caller sets the appropriate
+// global variable non-zero.
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error:  One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#include <stdlib.h>             // for getenv() and strtoul().
+
+
+// GLOBALS FROM CALLER:
+//
+// Note:  This storage is declared once in each compilation unit that includes
+// this file, but the linker should merge all cases into single locations, but
+// ONLY if these are uninitialized, so ASSUME they are 0 to start.
+
+Word_t j__udyIndex;             // current Index itself, optional from caller.
+Word_t j__udyPopulation;        // Indexes in array, optional from caller.
+
+// Other globals:
+
+static Word_t startindex = 0;           // see usage below.
+static Word_t startpop   = 0;
+static bool_t enabled    = FALSE;       // by default, unless env params set.
+
+// Shorthand for announcing JP addresses, Desc (in context), and JP types:
+//
+// Note:  Width is at least one blank wider than any JP type name, and the line
+// is left unfinished.
+//
+// Note:  Use a format for address printing compatible with other tracing
+// facilities; in particular, %x not %lx, to truncate the "noisy" high part on
+// 64-bit systems.
+
+#define JPTYPE(Type)  printf("0x%lx %s %-17s", (Word_t) Pjp, Desc, Type)
+
+// Shorthands for announcing expanse populations from DcdPopO fields:
+
+#define POP0 printf("Pop1 = 0 ")
+#define POP1 printf("Pop1 = %ld ", (Word_t) ((JU_JPDCDPOP0(Pjp) &            0xff) + 1))
+#define POP2 printf("Pop1 = %ld ", (Word_t) ((JU_JPDCDPOP0(Pjp) &          0xffff) + 1))
+#define POP3 printf("Pop1 = %ld ", (Word_t) ((JU_JPDCDPOP0(Pjp) &        0xffffff) + 1))
+#ifdef JU_64BIT
+#define POP4 printf("Pop1 = %ld ", (Word_t) ((JU_JPDCDPOP0(Pjp) &       0xffffffff) + 1))
+#define POP5 printf("Pop1 = %ld ", (Word_t) ((JU_JPDCDPOP0(Pjp) &     0xffffffffff) + 1))
+#define POP6 printf("Pop1 = %ld ", (Word_t) ((JU_JPDCDPOP0(Pjp) &   0xffffffffffff) + 1))
+#define POP7 printf("Pop1 = %ld ", (Word_t) ((JU_JPDCDPOP0(Pjp) & 0xffffffffffffff) + 1))
+#endif
+
+// Shorthands for announcing populations of Immeds:
+//
+// Note:  Line up the small populations that often occur together, but beyond
+// that, dont worry about it because populations can get arbitrarily large.
+
+#define POP_1   printf("Pop1 =  1 ")
+#define POP_2   printf("Pop1 =  2 ")
+#define POP_3   printf("Pop1 =  3 ")
+#define POP_4   printf("Pop1 =  4 ")
+#define POP_5   printf("Pop1 =  5 ")
+#define POP_6   printf("Pop1 =  6 ")
+#define POP_7   printf("Pop1 =  7 ")
+#define POP_8   printf("Pop1 =  8 ")
+#define POP_9   printf("Pop1 =  8 ")
+#define POP_10  printf("Pop1 = 10 ")
+#define POP_11  printf("Pop1 = 11 ")
+#define POP_12  printf("Pop1 = 12 ")
+#define POP_13  printf("Pop1 = 13 ")
+#define POP_14  printf("Pop1 = 14 ")
+#define POP_15  printf("Pop1 = 15 ")
+
+// Shorthands for other announcements:
+
+#define NUMJPSL printf("NumJPs = %d ", P_JBL(Pjp->jp_Addr)->jbl_NumJPs)
+#define OOPS    printf("-- OOPS, invalid Type\n"); exit(1)
+
+// This is harder to compute:
+
+#define NUMJPSB                                                         \
+        {                                                               \
+            Pjbb_t Pjbb = P_JBB(Pjp->jp_Addr);                          \
+            Word_t subexp;                                              \
+            int    numJPs = 0;                                          \
+                                                                        \
+            for (subexp = 0; subexp < cJU_NUMSUBEXPB; ++subexp)         \
+                numJPs += j__udyCountBitsB(JU_JBB_BITMAP(Pjbb, subexp));\
+                                                                        \
+            printf("NumJPs = %d ", numJPs);                             \
+        }
+
+
+// ****************************************************************************
+// J U D Y   P R I N T   J P
+//
+// Dump information about a JP, at least its address, type, population, and
+// number of JPs, as appropriate.  Error out upon any unexpected JP type.
+//
+// TBD:  Dump more detailed information about the JP?
+
+FUNCTION static void JudyPrintJP(
+        Pjp_t  Pjp,             // JP to describe.
+        char * Desc,            // brief description of caller, such as "i".
+        int    Line)            // callers source line number.
+{
+static  bool_t checked = FALSE; // set upon first entry and check for params.
+        char * value;           // for getenv().
+
+
+// CHECK FOR EXTERNAL ENABLING:
+//
+// If a parameter is set, report the value, even if it is null or otherwise
+// evaluates to zero, in which case enable tracing immediately; otherwise wait
+// for the value to be hit.
+
+#define GETENV(Name,Value,Base)                                 \
+        if ((value = getenv (Name)) != (char *) NULL)           \
+        {                                                       \
+            (Value) = strtoul (value, (char **) NULL, Base);    \
+            enabled |= ((Value) == 0);  /* see above */         \
+                                                                \
+            (void) printf ("JudyPrintJP(\"%s\"): $%s = %lu\n",  \
+                           Desc, Name, Value);                  \
+        }
+
+        if (! checked)  // only check once.
+        {
+            checked = TRUE;
+
+            GETENV ("STARTINDEX", startindex, 16);
+            GETENV ("STARTPOP",   startpop,   10);
+
+            (void) printf ("JudyPrintJP(\"%s\"): Tracing present %s\n", Desc,
+                           enabled ? "and immediately enabled" :
+                           (startindex || startpop) ?
+                           "but disabled until start condition met" :
+                           "but not enabled by env parameter");
+        }
+
+        if (! enabled)  // check repeatedly until latched enabled:
+        {
+            if (startindex && (startindex == j__udyIndex))
+            {
+                 (void) printf ("=== TRACING ENABLED (\"%s\"), "
+                                "startindex = 0x%lx\n", Desc, startindex);
+                 enabled = TRUE;
+            }
+            else if (startpop && (startpop == j__udyPopulation))
+            {
+                 (void) printf ("=== TRACING ENABLED (\"%s\"), "
+                                "startpop = %lu\n", Desc, startpop);
+                 enabled = TRUE;
+            }
+            else
+            {
+                return;         // print nothing this time.
+            }
+        }
+
+
+// SWITCH ON JP TYPE:
+
+        switch (JU_JPTYPE(Pjp))
+        {
+
+// Note:  The following COULD be merged more tightly between Judy1 and JudyL,
+// but we decided that the output should say cJ1*/cJL*, not cJU*, to be more
+// specific.
+
+#ifdef JUDY1
+        case cJ1_JPNULL1:       JPTYPE("cJ1_JPNULL1"); POP0;            break;
+        case cJ1_JPNULL2:       JPTYPE("cJ1_JPNULL2"); POP0;            break;
+        case cJ1_JPNULL3:       JPTYPE("cJ1_JPNULL3"); POP0;            break;
+#ifdef JU_64BIT
+        case cJ1_JPNULL4:       JPTYPE("cJ1_JPNULL4"); POP0;            break;
+        case cJ1_JPNULL5:       JPTYPE("cJ1_JPNULL5"); POP0;            break;
+        case cJ1_JPNULL6:       JPTYPE("cJ1_JPNULL6"); POP0;            break;
+        case cJ1_JPNULL7:       JPTYPE("cJ1_JPNULL7"); POP0;            break;
+#endif
+
+        case cJ1_JPBRANCH_L2:   JPTYPE("cJ1_JPBRANCH_L2"); POP2;NUMJPSL;break;
+        case cJ1_JPBRANCH_L3:   JPTYPE("cJ1_JPBRANCH_L3"); POP3;NUMJPSL;break;
+#ifdef JU_64BIT
+        case cJ1_JPBRANCH_L4:   JPTYPE("cJ1_JPBRANCH_L4"); POP4;NUMJPSL;break;
+        case cJ1_JPBRANCH_L5:   JPTYPE("cJ1_JPBRANCH_L5"); POP5;NUMJPSL;break;
+        case cJ1_JPBRANCH_L6:   JPTYPE("cJ1_JPBRANCH_L6"); POP6;NUMJPSL;break;
+        case cJ1_JPBRANCH_L7:   JPTYPE("cJ1_JPBRANCH_L7"); POP7;NUMJPSL;break;
+#endif
+        case cJ1_JPBRANCH_L:    JPTYPE("cJ1_JPBRANCH_L");       NUMJPSL;break;
+
+        case cJ1_JPBRANCH_B2:   JPTYPE("cJ1_JPBRANCH_B2"); POP2;NUMJPSB;break;
+        case cJ1_JPBRANCH_B3:   JPTYPE("cJ1_JPBRANCH_B3"); POP3;NUMJPSB;break;
+#ifdef JU_64BIT
+        case cJ1_JPBRANCH_B4:   JPTYPE("cJ1_JPBRANCH_B4"); POP4;NUMJPSB;break;
+        case cJ1_JPBRANCH_B5:   JPTYPE("cJ1_JPBRANCH_B5"); POP5;NUMJPSB;break;
+        case cJ1_JPBRANCH_B6:   JPTYPE("cJ1_JPBRANCH_B6"); POP6;NUMJPSB;break;
+        case cJ1_JPBRANCH_B7:   JPTYPE("cJ1_JPBRANCH_B7"); POP7;NUMJPSB;break;
+#endif
+        case cJ1_JPBRANCH_B:    JPTYPE("cJ1_JPBRANCH_B");       NUMJPSB;break;
+
+        case cJ1_JPBRANCH_U2:   JPTYPE("cJ1_JPBRANCH_U2"); POP2;        break;
+        case cJ1_JPBRANCH_U3:   JPTYPE("cJ1_JPBRANCH_U3"); POP3;        break;
+#ifdef JU_64BIT
+        case cJ1_JPBRANCH_U4:   JPTYPE("cJ1_JPBRANCH_U4"); POP4;        break;
+        case cJ1_JPBRANCH_U5:   JPTYPE("cJ1_JPBRANCH_U5"); POP5;        break;
+        case cJ1_JPBRANCH_U6:   JPTYPE("cJ1_JPBRANCH_U6"); POP6;        break;
+        case cJ1_JPBRANCH_U7:   JPTYPE("cJ1_JPBRANCH_U7"); POP7;        break;
+#endif
+        case cJ1_JPBRANCH_U:    JPTYPE("cJ1_JPBRANCH_U");               break;
+
+#ifndef JU_64BIT
+        case cJ1_JPLEAF1:       JPTYPE("cJ1_JPLEAF1"); POP1;            break;
+#endif
+        case cJ1_JPLEAF2:       JPTYPE("cJ1_JPLEAF2"); POP2;            break;
+        case cJ1_JPLEAF3:       JPTYPE("cJ1_JPLEAF3"); POP3;            break;
+#ifdef JU_64BIT
+        case cJ1_JPLEAF4:       JPTYPE("cJ1_JPLEAF4"); POP4;            break;
+        case cJ1_JPLEAF5:       JPTYPE("cJ1_JPLEAF5"); POP5;            break;
+        case cJ1_JPLEAF6:       JPTYPE("cJ1_JPLEAF6"); POP6;            break;
+        case cJ1_JPLEAF7:       JPTYPE("cJ1_JPLEAF7"); POP7;            break;
+#endif
+
+        case cJ1_JPLEAF_B1:     JPTYPE("cJ1_JPLEAF_B1");    POP1;       break;
+        case cJ1_JPFULLPOPU1:   JPTYPE("cJ1_JPFULLPOPU1");  POP1;       break;
+
+        case cJ1_JPIMMED_1_01:  JPTYPE("cJ1_JPIMMED_1_01"); POP_1;      break;
+        case cJ1_JPIMMED_2_01:  JPTYPE("cJ1_JPIMMED_2_01"); POP_1;      break;
+        case cJ1_JPIMMED_3_01:  JPTYPE("cJ1_JPIMMED_3_01"); POP_1;      break;
+#ifdef JU_64BIT
+        case cJ1_JPIMMED_4_01:  JPTYPE("cJ1_JPIMMED_4_01"); POP_1;      break;
+        case cJ1_JPIMMED_5_01:  JPTYPE("cJ1_JPIMMED_5_01"); POP_1;      break;
+        case cJ1_JPIMMED_6_01:  JPTYPE("cJ1_JPIMMED_6_01"); POP_1;      break;
+        case cJ1_JPIMMED_7_01:  JPTYPE("cJ1_JPIMMED_7_01"); POP_1;      break;
+#endif
+
+        case cJ1_JPIMMED_1_02:  JPTYPE("cJ1_JPIMMED_1_02"); POP_2;      break;
+        case cJ1_JPIMMED_1_03:  JPTYPE("cJ1_JPIMMED_1_03"); POP_3;      break;
+        case cJ1_JPIMMED_1_04:  JPTYPE("cJ1_JPIMMED_1_04"); POP_4;      break;
+        case cJ1_JPIMMED_1_05:  JPTYPE("cJ1_JPIMMED_1_05"); POP_5;      break;
+        case cJ1_JPIMMED_1_06:  JPTYPE("cJ1_JPIMMED_1_06"); POP_6;      break;
+        case cJ1_JPIMMED_1_07:  JPTYPE("cJ1_JPIMMED_1_07"); POP_7;      break;
+#ifdef JU_64BIT
+        case cJ1_JPIMMED_1_08:  JPTYPE("cJ1_JPIMMED_1_08"); POP_8;      break;
+        case cJ1_JPIMMED_1_09:  JPTYPE("cJ1_JPIMMED_1_09"); POP_9;      break;
+        case cJ1_JPIMMED_1_10:  JPTYPE("cJ1_JPIMMED_1_10"); POP_10;     break;
+        case cJ1_JPIMMED_1_11:  JPTYPE("cJ1_JPIMMED_1_11"); POP_11;     break;
+        case cJ1_JPIMMED_1_12:  JPTYPE("cJ1_JPIMMED_1_12"); POP_12;     break;
+        case cJ1_JPIMMED_1_13:  JPTYPE("cJ1_JPIMMED_1_13"); POP_13;     break;
+        case cJ1_JPIMMED_1_14:  JPTYPE("cJ1_JPIMMED_1_14"); POP_14;     break;
+        case cJ1_JPIMMED_1_15:  JPTYPE("cJ1_JPIMMED_1_15"); POP_15;     break;
+#endif
+        case cJ1_JPIMMED_2_02:  JPTYPE("cJ1_JPIMMED_2_02"); POP_2;      break;
+        case cJ1_JPIMMED_2_03:  JPTYPE("cJ1_JPIMMED_2_03"); POP_3;      break;
+#ifdef JU_64BIT
+        case cJ1_JPIMMED_2_04:  JPTYPE("cJ1_JPIMMED_2_04"); POP_4;      break;
+        case cJ1_JPIMMED_2_05:  JPTYPE("cJ1_JPIMMED_2_05"); POP_5;      break;
+        case cJ1_JPIMMED_2_06:  JPTYPE("cJ1_JPIMMED_2_06"); POP_6;      break;
+        case cJ1_JPIMMED_2_07:  JPTYPE("cJ1_JPIMMED_2_07"); POP_7;      break;
+#endif
+
+        case cJ1_JPIMMED_3_02:  JPTYPE("cJ1_JPIMMED_3_02"); POP_2;      break;
+#ifdef JU_64BIT
+        case cJ1_JPIMMED_3_03:  JPTYPE("cJ1_JPIMMED_3_03"); POP_3;      break;
+        case cJ1_JPIMMED_3_04:  JPTYPE("cJ1_JPIMMED_3_04"); POP_4;      break;
+        case cJ1_JPIMMED_3_05:  JPTYPE("cJ1_JPIMMED_3_05"); POP_5;      break;
+        case cJ1_JPIMMED_4_02:  JPTYPE("cJ1_JPIMMED_4_02"); POP_2;      break;
+        case cJ1_JPIMMED_4_03:  JPTYPE("cJ1_JPIMMED_4_03"); POP_3;      break;
+        case cJ1_JPIMMED_5_02:  JPTYPE("cJ1_JPIMMED_5_02"); POP_2;      break;
+        case cJ1_JPIMMED_5_03:  JPTYPE("cJ1_JPIMMED_5_03"); POP_3;      break;
+        case cJ1_JPIMMED_6_02:  JPTYPE("cJ1_JPIMMED_6_02"); POP_2;      break;
+        case cJ1_JPIMMED_7_02:  JPTYPE("cJ1_JPIMMED_7_02"); POP_2;      break;
+#endif
+        case cJ1_JPIMMED_CAP:   JPTYPE("cJ1_JPIMMED_CAP");              OOPS;
+
+#else // JUDYL ===============================================================
+
+        case cJL_JPNULL1:       JPTYPE("cJL_JPNULL1"); POP0;            break;
+        case cJL_JPNULL2:       JPTYPE("cJL_JPNULL2"); POP0;            break;
+        case cJL_JPNULL3:       JPTYPE("cJL_JPNULL3"); POP0;            break;
+#ifdef JU_64BIT
+        case cJL_JPNULL4:       JPTYPE("cJL_JPNULL4"); POP0;            break;
+        case cJL_JPNULL5:       JPTYPE("cJL_JPNULL5"); POP0;            break;
+        case cJL_JPNULL6:       JPTYPE("cJL_JPNULL6"); POP0;            break;
+        case cJL_JPNULL7:       JPTYPE("cJL_JPNULL7"); POP0;            break;
+#endif
+
+        case cJL_JPBRANCH_L2:   JPTYPE("cJL_JPBRANCH_L2"); POP2;NUMJPSL;break;
+        case cJL_JPBRANCH_L3:   JPTYPE("cJL_JPBRANCH_L3"); POP3;NUMJPSL;break;
+#ifdef JU_64BIT
+        case cJL_JPBRANCH_L4:   JPTYPE("cJL_JPBRANCH_L4"); POP4;NUMJPSL;break;
+        case cJL_JPBRANCH_L5:   JPTYPE("cJL_JPBRANCH_L5"); POP5;NUMJPSL;break;
+        case cJL_JPBRANCH_L6:   JPTYPE("cJL_JPBRANCH_L6"); POP6;NUMJPSL;break;
+        case cJL_JPBRANCH_L7:   JPTYPE("cJL_JPBRANCH_L7"); POP7;NUMJPSL;break;
+#endif
+        case cJL_JPBRANCH_L:    JPTYPE("cJL_JPBRANCH_L");       NUMJPSL;break;
+
+        case cJL_JPBRANCH_B2:   JPTYPE("cJL_JPBRANCH_B2"); POP2;NUMJPSB;break;
+        case cJL_JPBRANCH_B3:   JPTYPE("cJL_JPBRANCH_B3"); POP3;NUMJPSB;break;
+#ifdef JU_64BIT
+        case cJL_JPBRANCH_B4:   JPTYPE("cJL_JPBRANCH_B4"); POP4;NUMJPSB;break;
+        case cJL_JPBRANCH_B5:   JPTYPE("cJL_JPBRANCH_B5"); POP5;NUMJPSB;break;
+        case cJL_JPBRANCH_B6:   JPTYPE("cJL_JPBRANCH_B6"); POP6;NUMJPSB;break;
+        case cJL_JPBRANCH_B7:   JPTYPE("cJL_JPBRANCH_B7"); POP7;NUMJPSB;break;
+#endif
+        case cJL_JPBRANCH_B:    JPTYPE("cJL_JPBRANCH_B");       NUMJPSB;break;
+
+        case cJL_JPBRANCH_U2:   JPTYPE("cJL_JPBRANCH_U2"); POP2;        break;
+        case cJL_JPBRANCH_U3:   JPTYPE("cJL_JPBRANCH_U3"); POP3;        break;
+#ifdef JU_64BIT
+        case cJL_JPBRANCH_U4:   JPTYPE("cJL_JPBRANCH_U4"); POP4;        break;
+        case cJL_JPBRANCH_U5:   JPTYPE("cJL_JPBRANCH_U5"); POP5;        break;
+        case cJL_JPBRANCH_U6:   JPTYPE("cJL_JPBRANCH_U6"); POP6;        break;
+        case cJL_JPBRANCH_U7:   JPTYPE("cJL_JPBRANCH_U7"); POP7;        break;
+#endif
+        case cJL_JPBRANCH_U:    JPTYPE("cJL_JPBRANCH_U");               break;
+
+        case cJL_JPLEAF1:       JPTYPE("cJL_JPLEAF1"); POP1;            break;
+        case cJL_JPLEAF2:       JPTYPE("cJL_JPLEAF2"); POP2;            break;
+        case cJL_JPLEAF3:       JPTYPE("cJL_JPLEAF3"); POP3;            break;
+#ifdef JU_64BIT
+        case cJL_JPLEAF4:       JPTYPE("cJL_JPLEAF4"); POP4;            break;
+        case cJL_JPLEAF5:       JPTYPE("cJL_JPLEAF5"); POP5;            break;
+        case cJL_JPLEAF6:       JPTYPE("cJL_JPLEAF6"); POP6;            break;
+        case cJL_JPLEAF7:       JPTYPE("cJL_JPLEAF7"); POP7;            break;
+#endif
+
+        case cJL_JPLEAF_B1:     JPTYPE("cJL_JPLEAF_B1"); POP1;  break;
+
+        case cJL_JPIMMED_1_01:  JPTYPE("cJL_JPIMMED_1_01"); POP_1;      break;
+        case cJL_JPIMMED_2_01:  JPTYPE("cJL_JPIMMED_2_01"); POP_1;      break;
+        case cJL_JPIMMED_3_01:  JPTYPE("cJL_JPIMMED_3_01"); POP_1;      break;
+#ifdef JU_64BIT
+        case cJL_JPIMMED_4_01:  JPTYPE("cJL_JPIMMED_4_01"); POP_1;      break;
+        case cJL_JPIMMED_5_01:  JPTYPE("cJL_JPIMMED_5_01"); POP_1;      break;
+        case cJL_JPIMMED_6_01:  JPTYPE("cJL_JPIMMED_6_01"); POP_1;      break;
+        case cJL_JPIMMED_7_01:  JPTYPE("cJL_JPIMMED_7_01"); POP_1;      break;
+#endif
+
+        case cJL_JPIMMED_1_02:  JPTYPE("cJL_JPIMMED_1_02"); POP_2;      break;
+        case cJL_JPIMMED_1_03:  JPTYPE("cJL_JPIMMED_1_03"); POP_3;      break;
+#ifdef JU_64BIT
+        case cJL_JPIMMED_1_04:  JPTYPE("cJL_JPIMMED_1_04"); POP_4;      break;
+        case cJL_JPIMMED_1_05:  JPTYPE("cJL_JPIMMED_1_05"); POP_5;      break;
+        case cJL_JPIMMED_1_06:  JPTYPE("cJL_JPIMMED_1_06"); POP_6;      break;
+        case cJL_JPIMMED_1_07:  JPTYPE("cJL_JPIMMED_1_07"); POP_7;      break;
+        case cJL_JPIMMED_2_02:  JPTYPE("cJL_JPIMMED_2_02"); POP_2;      break;
+        case cJL_JPIMMED_2_03:  JPTYPE("cJL_JPIMMED_2_03"); POP_3;      break;
+        case cJL_JPIMMED_3_02:  JPTYPE("cJL_JPIMMED_3_02"); POP_2;      break;
+#endif
+        case cJL_JPIMMED_CAP:   JPTYPE("cJL_JPIMMED_CAP");      OOPS;
+
+#endif // JUDYL
+
+        default:  printf("Unknown Type = %d", JU_JPTYPE(Pjp));          OOPS;
+        }
+
+        if (j__udyIndex)        printf("Index = 0x%lx", j__udyIndex);
+        if (j__udyPopulation)   printf("Pop = %lu",     j__udyPopulation);
+
+        printf("line = %d\n", Line);
+
+} // JudyPrintJP()
diff --git a/libs/klib/judy/JudyPrivate.h b/libs/klib/judy/JudyPrivate.h
new file mode 100644
index 0000000..0d0c5f3
--- /dev/null
+++ b/libs/klib/judy/JudyPrivate.h
@@ -0,0 +1,1610 @@
+#ifndef _JUDYPRIVATE_INCLUDED
+#define _JUDYPRIVATE_INCLUDED
+// _________________
+//
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// Header file for all Judy sources, for global but private (non-exported)
+// declarations.
+
+#include "Judy.h"
+
+// ****************************************************************************
+// A VERY BRIEF EXPLANATION OF A JUDY ARRAY
+//
+// A Judy array is, effectively, a digital tree (or Trie) with 256 element
+// branches (nodes), and with "compression tricks" applied to low-population
+// branches or leaves to save a lot of memory at the cost of relatively little
+// CPU time or cache fills.
+//
+// In the actual implementation, a Judy array is level-less, and traversing the
+// "tree" actually means following the states in a state machine (SM) as
+// directed by the Index.  A Judy array is referred to here as an "SM", rather
+// than as a "tree"; having "states", rather than "levels".
+//
+// Each branch or leaf in the SM decodes a portion ("digit") of the original
+// Index; with 256-way branches there are 8 bits per digit.  There are 3 kinds
+// of branches, called:  Linear, Bitmap and Uncompressed, of which the first 2
+// are compressed to contain no NULL entries.
+//
+// An Uncompressed branch has a 1.0 cache line fill cost to decode 8 bits of
+// (digit, part of an Index), but it might contain many NULL entries, and is
+// therefore inefficient with memory if lightly populated.
+//
+// A Linear branch has a ~1.75 cache line fill cost when at maximum population.
+// A Bitmap branch has ~2.0 cache line fills.  Linear and Bitmap branches are
+// converted to Uncompressed branches when the additional memory can be
+// amortized with larger populations.  Higher-state branches have higher
+// priority to be converted.
+//
+// Linear branches can hold 28 elements (based on detailed analysis) -- thus 28
+// expanses.  A Linear branch is converted to a Bitmap branch when the 29th
+// expanse is required.
+//
+// A Bitmap branch could hold 256 expanses, but is forced to convert to an
+// Uncompressed branch when 185 expanses are required.  Hopefully, it is
+// converted before that because of population growth (again, based on detailed
+// analysis and heuristics in the code).
+//
+// A path through the SM terminates to a leaf when the Index (or key)
+// population in the expanse below a pointer will fit into 1 or 2 cache lines
+// (~31..255 Indexes).  A maximum-population Leaf has ~1.5 cache line fill
+// cost.
+//
+// Leaves are sorted arrays of Indexes, where the Index Sizes (IS) are:  0, 1,
+// 8, 16, 24, 32, [40, 48, 56, 64] bits.  The IS depends on the "density"
+// (population/expanse) of the values in the Leaf.  Zero bits are possible if
+// population == expanse in the SM (that is, a full small expanse).
+//
+// Elements of a branches are called Judy Pointers (JPs).  Each JP object
+// points to the next object in the SM, plus, a JP can decode an additional
+// 2[6] bytes of an Index, but at the cost of "narrowing" the expanse
+// represented by the next object in the SM.  A "narrow" JP (one which has
+// decode bytes/digits) is a way of skipping states in the SM.
+//
+// Although counterintuitive, we think a Judy SM is optimal when the Leaves are
+// stored at MINIMUM compression (narrowing, or use of Decode bytes).  If more
+// aggressive compression was used, decompression of a leaf be required to
+// insert an index.  Additional compression would save a little memory but not
+// help performance significantly.
+
+
+#ifdef A_PICTURE_IS_WORTH_1000_WORDS
+*******************************************************************************
+
+JUDY 32-BIT STATE MACHINE (SM) EXAMPLE, FOR INDEX = 0x02040103
+
+The Index used in this example is purposely chosen to allow small, simple
+examples below; each 1-byte "digit" from the Index has a small numeric value
+that fits in one column.  In the drawing below:
+
+   JRP  == Judy Root Pointer;
+
+    C   == 1 byte of a 1..3 byte Population (count of Indexes) below this
+           pointer.  Since this is shared with the Decode field, the combined
+           sizes must be 3[7], that is, 1 word less 1 byte for the JP Type.
+
+   The 1-byte field jp_Type is represented as:
+
+   1..3 == Number of bytes in the population (Pop0) word of the Branch or Leaf
+           below the pointer (note:  1..7 on 64-bit); indicates:
+           - number of bytes in Decode field == 3 - this number;
+           - number of bytes remaining to decode.
+           Note:  The maximum is 3, not 4, because the 1st byte of the Index is
+           always decoded digitally in the top branch.
+   -B-  == JP points to a Branch (there are many kinds of Branches).
+   -L-  == JP points to a Leaf (there are many kinds of Leaves).
+
+   (2)  == Digit of Index decoded by position offset in branch (really
+           0..0xff).
+
+    4*  == Digit of Index necessary for decoding a "narrow" pointer, in a
+           Decode field; replaces 1 missing branch (really 0..0xff).
+
+    4+  == Digit of Index NOT necessary for decoding a "narrow" pointer, but
+           used for fast traversal of the SM by Judy1Test() and JudyLGet()
+           (see the code) (really 0..0xff).
+
+    0   == Byte in a JPs Pop0 field that is always ignored, because a leaf
+           can never contain more than 256 Indexes (Pop0 <= 255).
+
+    +-----  == A Branch or Leaf; drawn open-ended to remind you that it could
+    |          have up to 256 columns.
+    +-----
+
+    |
+    |   == Pointer to next Branch or Leaf.
+    V
+
+    |
+    O   == A state is skipped by using a "narrow" pointer.
+    |
+
+    < 1 > == Digit (Index) shown as an example is not necessarily in the
+             position shown; is sorted in order with neighbor Indexes.
+             (Really 0..0xff.)
+
+Note that this example shows every possibly topology to reach a leaf in a
+32-bit Judy SM, although this is a very subtle point!
+
+                                                                          STATE or`
+                                                                          LEVEL
+     +---+    +---+    +---+    +---+    +---+    +---+    +---+    +---+
+     |RJP|    |RJP|    |RJP|    |RJP|    |RJP|    |RJP|    |RJP|    |RJP|
+     L---+    B---+    B---+    B---+    B---+    B---+    B---+    B---+
+     |        |        |        |        |        |        |        |
+     |        |        |        |        |        |        |        |
+     V        V (2)    V (2)    V (2)    V (2)    V (2)    V (2)    V (2)
+     +------  +------  +------  +------  +------  +------  +------  +------
+Four |< 2 >   |  0     |  4*    |  C     |  4*    |  4*    |  C     |  C
+byte |< 4 >   |  0     |  0     |  C     |  1*    |  C     |  C     |  C     4
+Index|< 1 >   |  C     |  C     |  C     |  C     |  C     |  C     |  C
+Leaf |< 3 >   |  3     |  2     |  3     |  1     |  2     |  3     |  3
+     +------  +--L---  +--L---  +--B---  +--L---  +--B---  +--B---  +--B---
+                 |        |        |        |        |        |        |
+                /         |       /         |        |       /        /
+               /          |      /          |        |      /        /
+              |           |     |           |        |     |        |
+              V           |     V   (4)     |        |     V   (4)  V   (4)
+              +------     |     +------     |        |     +------  +------
+    Three     |< 4 >      |     |    4+     |        |     |    4+  |    4+
+    byte Index|< 1 >      O     |    0      O        O     |    1*  |    C   3
+    Leaf      |< 3 >      |     |    C      |        |     |    C   |    C
+              +------     |     |    2      |        |     |    1   |    2
+                         /      +----L-     |        |     +----L-  +----B-
+                        /            |      |        |          |        |
+                       |            /       |       /          /        /
+                       |           /        |      /          /        /
+                       |          /         |     |          /        /
+                       |         /          |     |         /        /
+                       |        |           |     |        |        |
+                       V        V           |     V(1)     |        V(1)
+                       +------  +------     |     +------  |        +------
+          Two byte     |< 1 >   |< 1 >      |     | 4+     |        | 4+
+          Index Leaf   |< 3 >   |< 3 >      O     | 1+     O        | 1+     2
+                       +------  +------    /      | C      |        | C
+                                          /       | 1      |        | 1
+                                         |        +-L----  |        +-L----
+                                         |          |      |          |
+                                         |         /       |         /
+                                         |        |        |        |
+                                         V        V        V        V
+                                         +------  +------  +------  +------
+                    One byte Index Leaf  |< 3 >   |< 3 >   |< 3 >   |< 3 >   1
+                                         +------  +------  +------  +------
+
+
+#endif // A_PICTURE_IS_WORTH_1000_WORDS
+
+
+// ****************************************************************************
+// MISCELLANEOUS GLOBALS:
+//
+// PLATFORM-SPECIFIC CONVENIENCE MACROS:
+//
+// These are derived from context (set by cc or in system header files) or
+// based on JU_<PLATFORM> macros from make_includes/platform.*.mk.  We decided
+// on 011018 that any macro reliably derivable from context (cc or headers) for
+// ALL platforms supported by Judy is based on that derivation, but ANY
+// exception means to stop using the external macro completely and derive from
+// JU_<PLATFORM> instead.
+
+// Other miscellaneous stuff:
+
+#ifndef _BOOL_T
+#define _BOOL_T
+typedef int bool_t;
+#endif
+
+#define FUNCTION                // null; easy to find functions.
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#ifdef TRACE            // turn on all other tracing in the code:
+#define TRACEJP  1      // JP traversals in JudyIns.c and JudyDel.c.
+#define TRACEJPR 1      // JP traversals in retrieval code, JudyGet.c.
+#define TRACECF  1      // cache fills in JudyGet.c.
+#define TRACEMI  1      // malloc calls in JudyMallocIF.c.
+#define TRACEMF  1      // malloc calls at a lower level in JudyMalloc.c.
+#endif
+
+#ifndef inline
+    #define inline __inline__
+#endif
+
+// SUPPORT FOR DEBUG-ONLY CODE:
+//
+// By convention, use -DDEBUG to enable both debug-only code AND assertions in
+// the Judy sources.
+//
+// Invert the sense of assertions, so they are off unless explicitly requested,
+// in a uniform way.
+//
+// Note:  It is NOT appropriate to put this in Judy.h; it would mess up
+// application code.
+
+#ifndef DEBUG
+#define NDEBUG 1                // must be 1 for "#if".
+#endif
+
+// Shorthand notations to avoid #ifdefs for single-line conditional statements:
+//
+// Warning:  These cannot be used around compiler directives, such as
+// "#include", nor in the case where Code contains a comma other than nested
+// within parentheses or quotes.
+
+#define DBGCODE(Code)  /* nothing */
+
+#ifdef JUDY1
+#define JUDY1CODE(Code) Code
+#define JUDYLCODE(Code) // null.
+#endif
+
+#ifdef JUDYL
+#define JUDYLCODE(Code) Code
+#define JUDY1CODE(Code) // null.
+#endif
+
+#include <assert.h>
+
+// ****************************************************************************
+// FUNDAMENTAL CONSTANTS FOR MACHINE
+// ****************************************************************************
+
+// Machine (CPU) cache line size:
+//
+// NOTE:  A leaf size of 2 cache lines maximum is the target (optimal) for
+// Judy.  Its hard to obtain a machines cache line size at compile time, but
+// if the machine has an unexpected cache line size, its not devastating if
+// the following constants end up causing leaves that are 1 cache line in size,
+// or even 4 cache lines in size.  The assumed 32-bit system has 16-word =
+// 64-byte cache lines, and the assumed 64-bit system has 16-word = 128-byte
+// cache lines.
+
+#ifdef JU_64BIT
+#define cJU_BYTESPERCL 128              // cache line size in bytes.
+#else
+#define cJU_BYTESPERCL  64              // cache line size in bytes.
+#endif
+
+// Bits Per Byte:
+
+#define cJU_BITSPERBYTE 0x8
+
+// Bytes Per Word and Bits Per Word, latter assuming sizeof(byte) is 8 bits:
+//
+// Expect 32 [64] bits per word.
+
+#define cJU_BYTESPERWORD (sizeof(Word_t))
+#define cJU_BITSPERWORD  (sizeof(Word_t) * cJU_BITSPERBYTE)
+
+#define JU_BYTESTOWORDS(BYTES) \
+        (((BYTES) + cJU_BYTESPERWORD - 1) / cJU_BYTESPERWORD)
+
+// A word that is all-ones, normally equal to -1UL, but safer with ~0:
+
+#define cJU_ALLONES  (~ ( Word_t ) 0UL)
+
+// Note, these are forward references, but thats OK:
+
+#define cJU_FULLBITMAPB ((BITMAPB_t) cJU_ALLONES)
+#define cJU_FULLBITMAPL ((BITMAPL_t) cJU_ALLONES)
+
+
+// ****************************************************************************
+// MISCELLANEOUS JUDY-SPECIFIC DECLARATIONS
+// ****************************************************************************
+
+// ROOT STATE:
+//
+// State at the start of the Judy SM, based on 1 byte decoded per state; equal
+// to the number of bytes per Index to decode.
+
+#define cJU_ROOTSTATE (sizeof(Word_t))
+
+
+// SUBEXPANSES PER STATE:
+//
+// Number of subexpanses per state traversed, which is the number of JPs in a
+// branch (actual or theoretical) and the number of bits in a bitmap.
+
+#define cJU_SUBEXPPERSTATE  256
+
+
+// LEAF AND VALUE POINTERS:
+//
+// Some other basic object types are in declared in JudyPrivateBranch.h
+// (Pjbl_t, Pjbb_t, Pjbu_t, Pjp_t) or are Judy1/L-specific (Pjlb_t).  The
+// few remaining types are declared below.
+//
+// Note:  Leaf pointers are cast to different-sized objects depending on the
+// leafs level, but are at least addresses (not just numbers), so use void *
+// (Pvoid_t), not PWord_t or Word_t for them, except use Pjlw_t for whole-word
+// (top-level, root-level) leaves.  Value areas, however, are always whole
+// words.
+//
+// Furthermore, use Pjll_t only for generic leaf pointers (for various size
+// LeafLs).  Use Pjlw_t for LeafWs.  Use Pleaf (with type uint8_t *, uint16_t
+// *, etc) when the leaf index size is known.
+
+typedef PWord_t Pjlw_t;  // pointer to root-level leaf (whole-word indexes).
+typedef Pvoid_t Pjll_t;  // pointer to lower-level linear leaf.
+
+#ifdef JUDYL
+typedef PWord_t Pjv_t;   // pointer to JudyL value area.
+#endif
+
+
+// POINTER PREPARATION MACROS:
+//
+// These macros are used to strip malloc-namespace-type bits from a pointer +
+// malloc-type word (which references any Judy mallocd object that might be
+// obtained from other than a direct call of malloc()), prior to dereferencing
+// the pointer as an address.  The malloc-type bits allow Judy mallocd objects
+// to come from different "malloc() namespaces".
+//
+//    (root pointer)    (JRP, see above)
+//    jp.jp_Addr        generic pointer to next-level node, except when used
+//                      as a JudyL Immed01 value area
+//    JU_JBB_PJP        macro hides jbbs_Pjp (pointer to JP subarray)
+//    JL_JLB_PVALUE     macro hides jLlbs_PValue (pointer to value subarray)
+//
+// When setting one of these fields or passing an address to j__udyFree*(), the
+// "raw" memory address is used; otherwise the memory address must be passed
+// through one of the macros below before its dereferenced.
+//
+// Note:  After much study, the typecasts below appear in the macros rather
+// than at the point of use, which is both simpler and allows the compiler to
+// do type-checking.
+
+
+#define P_JLW(  ADDR) ((Pjlw_t) (ADDR))  // root leaf.
+#define P_JPM(  ADDR) ((Pjpm_t) (ADDR))  // root JPM.
+#define P_JBL(  ADDR) ((Pjbl_t) (ADDR))  // BranchL.
+#define P_JBB(  ADDR) ((Pjbb_t) (ADDR))  // BranchB.
+#define P_JBU(  ADDR) ((Pjbu_t) (ADDR))  // BranchU.
+#define P_JLL(  ADDR) ((Pjll_t) (ADDR))  // LeafL.
+#define P_JLB(  ADDR) ((Pjlb_t) (ADDR))  // LeafB1.
+#define P_JP(   ADDR) ((Pjp_t)  (ADDR))  // JP.
+
+#ifdef JUDYL
+#define P_JV(   ADDR) ((Pjv_t)  (ADDR))  // &value.
+#endif
+
+
+// LEAST BYTES:
+//
+// Mask for least bytes of a word, and a macro to perform this mask on an
+// Index.
+//
+// Note:  This macro has been problematic in the past to get right and to make
+// portable.  Its not OK on all systems to shift by the full word size.  This
+// macro should allow shifting by 1..N bytes, where N is the word size, but
+// should produce a compiler warning if the macro is called with Bytes == 0.
+//
+// Warning:  JU_LEASTBYTESMASK() is not a constant macro unless Bytes is a
+// constant; otherwise it is a variable shift, which is expensive on some
+// processors.
+
+#define JU_LEASTBYTESMASK(BYTES) \
+        (((Word_t)0x100 << (cJU_BITSPERBYTE * ((BYTES) - 1))) - 1)
+
+#define JU_LEASTBYTES(INDEX,BYTES)  ((INDEX) & JU_LEASTBYTESMASK(BYTES))
+
+
+// BITS IN EACH BITMAP SUBEXPANSE FOR BITMAP BRANCH AND LEAF:
+//
+// The bits per bitmap subexpanse times the number of subexpanses equals a
+// constant (cJU_SUBEXPPERSTATE).  You can also think of this as a compile-time
+// choice of "aspect ratio" for bitmap branches and leaves (which can be set
+// independently for each).
+//
+// A default aspect ratio is hardwired here if not overridden at compile time,
+// such as by "EXTCCOPTS=-DBITMAP_BRANCH16x16 make".
+
+#if (! (defined(BITMAP_BRANCH8x32) || defined(BITMAP_BRANCH16x16) || defined(BITMAP_BRANCH32x8)))
+#define BITMAP_BRANCH32x8 1     // 32 bits per subexpanse, 8 subexpanses.
+#endif
+
+#ifdef BITMAP_BRANCH8x32
+#define BITMAPB_t uint8_t
+#endif
+
+#ifdef BITMAP_BRANCH16x16
+#define BITMAPB_t uint16_t
+#endif
+
+#ifdef BITMAP_BRANCH32x8
+#define BITMAPB_t uint32_t
+#endif
+
+// Note:  For bitmap leaves, BITMAP_LEAF64x4 is only valid for 64 bit:
+//
+// Note:  Choice of aspect ratio mostly matters for JudyL bitmap leaves.  For
+// Judy1 the choice doesnt matter much -- the code generated for different
+// BITMAP_LEAF* values choices varies, but correctness and performance are the
+// same.
+
+#ifndef JU_64BIT
+
+#if (! (defined(BITMAP_LEAF8x32) || defined(BITMAP_LEAF16x16) || defined(BITMAP_LEAF32x8)))
+#define BITMAP_LEAF32x8         // 32 bits per subexpanse, 8 subexpanses.
+#endif
+
+#else // 32BIT
+
+#if (! (defined(BITMAP_LEAF8x32) || defined(BITMAP_LEAF16x16) || defined(BITMAP_LEAF32x8) || defined(BITMAP_LEAF64x4)))
+#define BITMAP_LEAF64x4         // 64 bits per subexpanse, 4 subexpanses.
+
+#endif
+#endif // JU_64BIT
+
+#ifdef BITMAP_LEAF8x32
+#define BITMAPL_t uint8_t
+#endif
+
+#ifdef BITMAP_LEAF16x16
+#define BITMAPL_t uint16_t
+#endif
+
+#ifdef BITMAP_LEAF32x8
+#define BITMAPL_t uint32_t
+#endif
+
+#ifdef BITMAP_LEAF64x4
+#define BITMAPL_t uint64_t
+#endif
+
+
+// EXPORTED DATA AND FUNCTIONS:
+
+#ifdef JUDY1
+extern const uint8_t j__1_BranchBJPPopToWords[];
+#endif
+
+#ifdef JUDYL
+extern const uint8_t j__L_BranchBJPPopToWords[];
+#endif
+
+// Fast LeafL search routine used for inlined code:
+
+#if (! defined(SEARCH_BINARY)) || (! defined(SEARCH_LINEAR))
+// default a binary search leaf method
+#define SEARCH_BINARY 1
+//#define SEARCH_LINEAR 1
+#endif
+
+#ifdef SEARCH_LINEAR
+
+#define SEARCHLEAFNATIVE(LEAFTYPE,ADDR,POP1,INDEX)              \
+    LEAFTYPE *P_leaf = (LEAFTYPE *)(ADDR);                      \
+    LEAFTYPE  I_ndex = (INDEX); /* with masking */              \
+    if (I_ndex > P_leaf[(POP1) - 1]) return(~(POP1));           \
+    while(I_ndex > *P_leaf) P_leaf++;                           \
+    if (I_ndex == *P_leaf) return(P_leaf - (LEAFTYPE *)(ADDR)); \
+    return(~(P_leaf - (LEAFTYPE *)(ADDR)));
+
+
+#define SEARCHLEAFNONNAT(ADDR,POP1,INDEX,LFBTS,COPYINDEX)       \
+{                                                               \
+    uint8_t *P_leaf, *P_leafEnd;                                \
+    Word_t   i_ndex;                                            \
+    Word_t   I_ndex = JU_LEASTBYTES((INDEX), (LFBTS));          \
+    Word_t   p_op1;                                             \
+                                                                \
+    P_leaf    = (uint8_t *)(ADDR);                              \
+    P_leafEnd = P_leaf + ((POP1) * (LFBTS));                    \
+                                                                \
+    do {                                                        \
+        JU_COPY3_PINDEX_TO_LONG(i_ndex, P_leaf);                \
+        if (I_ndex <= i_ndex) break;                            \
+        P_leaf += (LFBTS);                                      \
+    } while (P_leaf < P_leafEnd);                               \
+                                                                \
+    p_op1 = (P_leaf - (uint8_t *) (ADDR)) / (LFBTS);            \
+    if (I_ndex == i_ndex) return(p_op1);                        \
+    return(~p_op1);                                             \
+}
+#endif // SEARCH_LINEAR
+
+#ifdef SEARCH_BINARY
+
+#define SEARCHLEAFNATIVE(LEAFTYPE,ADDR,POP1,INDEX)              \
+    LEAFTYPE *P_leaf = (LEAFTYPE *)(ADDR);                      \
+    LEAFTYPE I_ndex = (LEAFTYPE)INDEX; /* truncate hi bits */   \
+    Word_t   l_ow   = cJU_ALLONES;                              \
+    Word_t   m_id;                                              \
+    Word_t   h_igh  = POP1;                                     \
+                                                                \
+    while ((h_igh - l_ow) > 1UL)                                \
+    {                                                           \
+        m_id = (h_igh + l_ow) / 2;                              \
+        if (P_leaf[m_id] > I_ndex)                              \
+            h_igh = m_id;                                       \
+        else                                                    \
+            l_ow = m_id;                                        \
+    }                                                           \
+    if (l_ow == cJU_ALLONES || P_leaf[l_ow] != I_ndex)          \
+        return(~h_igh);                                         \
+    return(l_ow)
+
+
+#define SEARCHLEAFNONNAT(ADDR,POP1,INDEX,LFBTS,COPYINDEX)       \
+    uint8_t *P_leaf = (uint8_t *)(ADDR);                        \
+    Word_t   l_ow   = cJU_ALLONES;                              \
+    Word_t   m_id;                                              \
+    Word_t   h_igh  = POP1;                                     \
+    Word_t   I_ndex = JU_LEASTBYTES((INDEX), (LFBTS));          \
+    Word_t   i_ndex;                                            \
+                                                                \
+    I_ndex = JU_LEASTBYTES((INDEX), (LFBTS));                   \
+                                                                \
+    while ((h_igh - l_ow) > 1UL)                                \
+    {                                                           \
+        m_id = (h_igh + l_ow) / 2;                              \
+        COPYINDEX(i_ndex, &P_leaf[m_id * (LFBTS)]);             \
+        if (i_ndex > I_ndex)                                    \
+            h_igh = m_id;                                       \
+        else                                                    \
+            l_ow = m_id;                                        \
+    }                                                           \
+    if (l_ow == cJU_ALLONES) return(~h_igh);                    \
+                                                                \
+    COPYINDEX(i_ndex, &P_leaf[l_ow * (LFBTS)]);                 \
+    if (i_ndex != I_ndex) return(~h_igh);                       \
+    return(l_ow)
+
+#endif // SEARCH_BINARY
+
+// Fast way to count bits set in 8..32[64]-bit int:
+//
+// For performance, j__udyCountBits*() are written to take advantage of
+// platform-specific features where available.
+//
+
+#ifdef JU_NOINLINE
+
+extern BITMAPB_t j__udyCountBitsB(BITMAPB_t word);
+extern BITMAPL_t j__udyCountBitsL(BITMAPL_t word);
+
+// Compiler supports inline
+
+#elif  defined(JU_HPUX_IPF)
+
+#define j__udyCountBitsB(WORD)  _Asm_popcnt(WORD)
+#define j__udyCountBitsL(WORD)  _Asm_popcnt(WORD)
+
+#elif defined(JU_LINUX_IPF)
+
+static inline BITMAPB_t j__udyCountBitsB(BITMAPB_t word)
+{
+        BITMAPB_t result;
+        __asm__ ("popcnt %0=%1" : "=r" (result) : "r" (word));
+        return(result);
+}
+
+static inline BITMAPL_t j__udyCountBitsL(BITMAPL_t word)
+{
+        BITMAPL_t result;
+        __asm__ ("popcnt %0=%1" : "=r" (result) : "r" (word));
+        return(result);
+}
+
+
+#else // No instructions available, use inline code
+
+// ****************************************************************************
+// __ J U D Y   C O U N T   B I T S   B
+//
+// Return the number of bits set in "Word", for a bitmap branch.
+//
+// Note:  Bitmap branches have maximum bitmap size = 32 bits.
+
+#ifdef JU_WIN
+static __inline BITMAPB_t j__udyCountBitsB(BITMAPB_t word)
+#else
+static inline BITMAPB_t j__udyCountBitsB(BITMAPB_t word)
+#endif 
+{
+        word = (word & 0x55555555) + ((word & 0xAAAAAAAA) >>  1);
+        word = (word & 0x33333333) + ((word & 0xCCCCCCCC) >>  2);
+        word = (word & 0x0F0F0F0F) + ((word & 0xF0F0F0F0) >>  4); // >= 8 bits.
+#if defined(BITMAP_BRANCH16x16) || defined(BITMAP_BRANCH32x8)
+        word = (word & 0x00FF00FF) + ((word & 0xFF00FF00) >>  8); // >= 16 bits.
+#endif
+
+#ifdef BITMAP_BRANCH32x8
+        word = (word & 0x0000FFFF) + ((word & 0xFFFF0000) >> 16); // >= 32 bits.
+#endif
+        return(word);
+
+} // j__udyCountBitsB()
+
+
+// ****************************************************************************
+// __ J U D Y   C O U N T   B I T S   L
+//
+// Return the number of bits set in "Word", for a bitmap leaf.
+//
+// Note:  Bitmap branches have maximum bitmap size = 32 bits.
+
+// Note:  Need both 32-bit and 64-bit versions of j__udyCountBitsL() because
+// bitmap leaves can have 64-bit bitmaps.
+
+#ifdef JU_WIN
+static __inline BITMAPL_t j__udyCountBitsL(BITMAPL_t word)
+#else
+static inline BITMAPL_t j__udyCountBitsL(BITMAPL_t word)
+#endif
+{
+#ifndef JU_64BIT
+
+        word = (word & 0x55555555) + ((word & 0xAAAAAAAA) >>  1);
+        word = (word & 0x33333333) + ((word & 0xCCCCCCCC) >>  2);
+        word = (word & 0x0F0F0F0F) + ((word & 0xF0F0F0F0) >>  4); // >= 8 bits.
+#if defined(BITMAP_LEAF16x16) || defined(BITMAP_LEAF32x8)
+        word = (word & 0x00FF00FF) + ((word & 0xFF00FF00) >>  8); // >= 16 bits.
+#endif
+#ifdef BITMAP_LEAF32x8
+        word = (word & 0x0000FFFF) + ((word & 0xFFFF0000) >> 16); // >= 32 bits.
+#endif
+
+#else // JU_64BIT
+
+        word = (word & 0x5555555555555555) + ((word & 0xAAAAAAAAAAAAAAAA) >> 1);
+        word = (word & 0x3333333333333333) + ((word & 0xCCCCCCCCCCCCCCCC) >> 2);
+        word = (word & 0x0F0F0F0F0F0F0F0F) + ((word & 0xF0F0F0F0F0F0F0F0) >> 4);
+#if defined(BITMAP_LEAF16x16) || defined(BITMAP_LEAF32x8) || defined(BITMAP_LEAF64x4)
+        word = (word & 0x00FF00FF00FF00FF) + ((word & 0xFF00FF00FF00FF00) >> 8);
+#endif
+#if defined(BITMAP_LEAF32x8) || defined(BITMAP_LEAF64x4)
+        word = (word & 0x0000FFFF0000FFFF) + ((word & 0xFFFF0000FFFF0000) >>16);
+#endif
+#ifdef BITMAP_LEAF64x4
+        word = (word & 0x00000000FFFFFFFF) + ((word & 0xFFFFFFFF00000000) >>32);
+#endif
+#endif // JU_64BIT
+
+        return(word);
+
+} // j__udyCountBitsL()
+
+#endif // Compiler supports inline
+
+// GET POP0:
+//
+// Get from jp_DcdPopO the Pop0 for various JP Types.
+//
+// Notes:
+//
+// - Different macros require different parameters...
+//
+// - There are no simple macros for cJU_BRANCH* Types because their
+//   populations must be added up and dont reside in an already-calculated
+//   place.  (TBD:  This is no longer true, now its in the JPM.)
+//
+// - cJU_JPIMM_POP0() is not defined because it would be redundant because the
+//   Pop1 is already encoded in each enum name.
+//
+// - A linear or bitmap leaf Pop0 cannot exceed cJU_SUBEXPPERSTATE - 1 (Pop0 =
+//   0..255), so use a simpler, faster macro for it than for other JP Types.
+//
+// - Avoid any complex calculations that would slow down the compiled code.
+//   Assume these macros are only called for the appropriate JP Types.
+//   Unfortunately theres no way to trigger an assertion here if the JP type
+//   is incorrect for the macro, because these are merely expressions, not
+//   statements.
+
+#define  JU_LEAFW_POP0(JRP)                  (*P_JLW(JRP))
+#define cJU_JPFULLPOPU1_POP0                 (cJU_SUBEXPPERSTATE - 1)
+
+// GET JP Type:
+// Since bit fields greater than 32 bits are not supported in some compilers
+// the jp_DcdPopO field is expanded to include the jp_Type in the high 8 bits
+// of the Word_t.
+// First the read macro:
+
+#define JU_JPTYPE(PJP)          ((PJP)->jp_Type)
+
+#define JU_JPLEAF_POP0(PJP)     ((PJP)->jp_DcdP0[sizeof(Word_t) - 2])
+
+#ifdef JU_64BIT
+
+#define JU_JPDCDPOP0(PJP)               \
+    ((Word_t)(PJP)->jp_DcdP0[0] << 48 | \
+     (Word_t)(PJP)->jp_DcdP0[1] << 40 | \
+     (Word_t)(PJP)->jp_DcdP0[2] << 32 | \
+     (Word_t)(PJP)->jp_DcdP0[3] << 24 | \
+     (Word_t)(PJP)->jp_DcdP0[4] << 16 | \
+     (Word_t)(PJP)->jp_DcdP0[5] <<  8 | \
+     (Word_t)(PJP)->jp_DcdP0[6])
+
+
+#define JU_JPSETADT(PJP,ADDR,DCDPOP0,TYPE)                      \
+{                                                               \
+    (PJP)->jp_Addr     = (ADDR);                                \
+    (PJP)->jp_DcdP0[0] = (uint8_t)((Word_t)(DCDPOP0) >> 48);    \
+    (PJP)->jp_DcdP0[1] = (uint8_t)((Word_t)(DCDPOP0) >> 40);    \
+    (PJP)->jp_DcdP0[2] = (uint8_t)((Word_t)(DCDPOP0) >> 32);    \
+    (PJP)->jp_DcdP0[3] = (uint8_t)((Word_t)(DCDPOP0) >> 24);    \
+    (PJP)->jp_DcdP0[4] = (uint8_t)((Word_t)(DCDPOP0) >> 16);    \
+    (PJP)->jp_DcdP0[5] = (uint8_t)((Word_t)(DCDPOP0) >>  8);    \
+    (PJP)->jp_DcdP0[6] = (uint8_t)((Word_t)(DCDPOP0));          \
+    (PJP)->jp_Type     = (TYPE);                                \
+}
+
+#else   // 32 Bit
+
+#define JU_JPDCDPOP0(PJP)               \
+    ((Word_t)(PJP)->jp_DcdP0[0] << 16 | \
+     (Word_t)(PJP)->jp_DcdP0[1] <<  8 | \
+     (Word_t)(PJP)->jp_DcdP0[2])
+
+
+#define JU_JPSETADT(PJP,ADDR,DCDPOP0,TYPE)                      \
+{                                                               \
+    (PJP)->jp_Addr     = (ADDR);                                \
+    (PJP)->jp_DcdP0[0] = (uint8_t)((Word_t)(DCDPOP0) >> 16);    \
+    (PJP)->jp_DcdP0[1] = (uint8_t)((Word_t)(DCDPOP0) >>  8);    \
+    (PJP)->jp_DcdP0[2] = (uint8_t)((Word_t)(DCDPOP0));          \
+    (PJP)->jp_Type     = (TYPE);                                \
+}
+
+#endif  // 32 Bit
+
+// NUMBER OF BITS IN A BRANCH OR LEAF BITMAP AND SUBEXPANSE:
+//
+// Note:  cJU_BITSPERBITMAP must be the same as the number of JPs in a branch.
+
+#define cJU_BITSPERBITMAP cJU_SUBEXPPERSTATE
+
+// Bitmaps are accessed in units of "subexpanses":
+
+#define cJU_BITSPERSUBEXPB  (sizeof(BITMAPB_t) * cJU_BITSPERBYTE)
+#define cJU_NUMSUBEXPB      (cJU_BITSPERBITMAP / cJU_BITSPERSUBEXPB)
+
+#define cJU_BITSPERSUBEXPL  (sizeof(BITMAPL_t) * cJU_BITSPERBYTE)
+#define cJU_NUMSUBEXPL      (cJU_BITSPERBITMAP / cJU_BITSPERSUBEXPL)
+
+
+// MASK FOR A SPECIFIED BIT IN A BITMAP:
+//
+// Warning:  If BitNum is a variable, this results in a variable shift that is
+// expensive, at least on some processors.  Use with caution.
+//
+// Warning:  BitNum must be less than cJU_BITSPERWORD, that is, 0 ..
+// cJU_BITSPERWORD - 1, to avoid a truncated shift on some machines.
+//
+// TBD:  Perhaps use an array[32] of masks instead of calculating them.
+
+#define JU_BITPOSMASKB(BITNUM) ((Word_t)1 << ((BITNUM) % cJU_BITSPERSUBEXPB))
+#define JU_BITPOSMASKL(BITNUM) ((Word_t)1 << ((BITNUM) % cJU_BITSPERSUBEXPL))
+
+
+// TEST/SET/CLEAR A BIT IN A BITMAP LEAF:
+//
+// Test if a byte-sized Digit (portion of Index) has a corresponding bit set in
+// a bitmap, or set a byte-sized Digits bit into a bitmap, by looking up the
+// correct subexpanse and then checking/setting the correct bit.
+//
+// Note:  Mask higher bits, if any, for the convenience of the user of this
+// macro, in case they pass a full Index, not just a digit.  If the caller has
+// a true 8-bit digit, make it of type uint8_t and the compiler should skip the
+// unnecessary mask step.
+
+#define JU_SUBEXPL(DIGIT) (((DIGIT) / cJU_BITSPERSUBEXPL) & (cJU_NUMSUBEXPL-1))
+
+#define JU_BITMAPTESTL(PJLB, INDEX)  \
+    (JU_JLB_BITMAP(PJLB, JU_SUBEXPL(INDEX)) &  JU_BITPOSMASKL(INDEX))
+
+#define JU_BITMAPSETL(PJLB, INDEX)   \
+    (JU_JLB_BITMAP(PJLB, JU_SUBEXPL(INDEX)) |= JU_BITPOSMASKL(INDEX))
+
+#define JU_BITMAPCLEARL(PJLB, INDEX) \
+    (JU_JLB_BITMAP(PJLB, JU_SUBEXPL(INDEX)) ^= JU_BITPOSMASKL(INDEX))
+
+
+// MAP BITMAP BIT OFFSET TO DIGIT:
+//
+// Given a digit variable to set, a bitmap branch or leaf subexpanse (base 0),
+// the bitmap (BITMAP*_t) for that subexpanse, and an offset (Nth set bit in
+// the bitmap, base 0), compute the digit (also base 0) corresponding to the
+// subexpanse and offset by counting all bits in the bitmap until offset+1 set
+// bits are seen.  Avoid expensive variable shifts.  Offset should be less than
+// the number of set bits in the bitmap; assert this.
+//
+// If theres a better way to do this, I dont know what it is.
+
+#define JU_BITMAPDIGITB(DIGIT,SUBEXP,BITMAP,OFFSET)             \
+        {                                                       \
+            BITMAPB_t bitmap = (BITMAP); int remain = (OFFSET); \
+            (DIGIT) = (SUBEXP) * cJU_BITSPERSUBEXPB;            \
+                                                                \
+            while ((remain -= (bitmap & 1)) >= 0)               \
+            {                                                   \
+                bitmap >>= 1; ++(DIGIT);                        \
+                assert((DIGIT) < ((SUBEXP) + 1) * cJU_BITSPERSUBEXPB); \
+            }                                                   \
+        }
+
+#define JU_BITMAPDIGITL(DIGIT,SUBEXP,BITMAP,OFFSET)             \
+        {                                                       \
+            BITMAPL_t bitmap = (BITMAP); int remain = (OFFSET); \
+            (DIGIT) = (SUBEXP) * cJU_BITSPERSUBEXPL;            \
+                                                                \
+            while ((remain -= (bitmap & 1)) >= 0)               \
+            {                                                   \
+                bitmap >>= 1; ++(DIGIT);                        \
+                assert((DIGIT) < ((SUBEXP) + 1) * cJU_BITSPERSUBEXPL); \
+            }                                                   \
+        }
+
+
+// MASKS FOR PORTIONS OF 32-BIT WORDS:
+//
+// These are useful for bitmap subexpanses.
+//
+// "LOWER"/"HIGHER" means bits representing lower/higher-valued Indexes.  The
+// exact order of bits in the word is explicit here but is hidden from the
+// caller.
+//
+// "EXC" means exclusive of the specified bit; "INC" means inclusive.
+//
+// In each case, BitPos is either "JU_BITPOSMASK*(BitNum)", or a variable saved
+// from an earlier call of that macro; either way, it must be a 32-bit word
+// with a single bit set.  In the first case, assume the compiler is smart
+// enough to optimize out common subexpressions.
+//
+// The expressions depend on unsigned decimal math that should be universal.
+
+#define JU_MASKLOWEREXC( BITPOS)  ((BITPOS) - 1)
+#define JU_MASKLOWERINC( BITPOS)  (JU_MASKLOWEREXC(BITPOS) | (BITPOS))
+#define JU_MASKHIGHERINC(BITPOS)  (-(BITPOS))
+#define JU_MASKHIGHEREXC(BITPOS)  (JU_MASKHIGHERINC(BITPOS) ^ (BITPOS))
+
+
+// ****************************************************************************
+// SUPPORT FOR NATIVE INDEX SIZES
+// ****************************************************************************
+//
+// Copy a series of generic objects (uint8_t, uint16_t, uint32_t, Word_t) from
+// one place to another.
+
+#define JU_COPYMEM(PDST,PSRC,POP1)                      \
+    {                                                   \
+        Word_t i_ndex = 0;                              \
+        assert((POP1) > 0);                             \
+        do { (PDST)[i_ndex] = (PSRC)[i_ndex]; } \
+        while (++i_ndex < (POP1));                      \
+    }
+
+
+// ****************************************************************************
+// SUPPORT FOR NON-NATIVE INDEX SIZES
+// ****************************************************************************
+//
+// Copy a 3-byte Index pointed by a uint8_t * to a Word_t:
+//
+#define JU_COPY3_PINDEX_TO_LONG(DESTLONG,PINDEX)        \
+    DESTLONG  = (Word_t)(PINDEX)[0] << 16;              \
+    DESTLONG += (Word_t)(PINDEX)[1] <<  8;              \
+    DESTLONG += (Word_t)(PINDEX)[2]
+
+// Copy a Word_t to a 3-byte Index pointed at by a uint8_t *:
+
+#define JU_COPY3_LONG_TO_PINDEX(PINDEX,SOURCELONG)      \
+    (PINDEX)[0] = (uint8_t)((SOURCELONG) >> 16);        \
+    (PINDEX)[1] = (uint8_t)((SOURCELONG) >>  8);        \
+    (PINDEX)[2] = (uint8_t)((SOURCELONG))
+
+#ifdef JU_64BIT
+
+// Copy a 5-byte Index pointed by a uint8_t * to a Word_t:
+//
+#define JU_COPY5_PINDEX_TO_LONG(DESTLONG,PINDEX)        \
+    DESTLONG  = (Word_t)(PINDEX)[0] << 32;              \
+    DESTLONG += (Word_t)(PINDEX)[1] << 24;              \
+    DESTLONG += (Word_t)(PINDEX)[2] << 16;              \
+    DESTLONG += (Word_t)(PINDEX)[3] <<  8;              \
+    DESTLONG += (Word_t)(PINDEX)[4]
+
+// Copy a Word_t to a 5-byte Index pointed at by a uint8_t *:
+
+#define JU_COPY5_LONG_TO_PINDEX(PINDEX,SOURCELONG)      \
+    (PINDEX)[0] = (uint8_t)((SOURCELONG) >> 32);        \
+    (PINDEX)[1] = (uint8_t)((SOURCELONG) >> 24);        \
+    (PINDEX)[2] = (uint8_t)((SOURCELONG) >> 16);        \
+    (PINDEX)[3] = (uint8_t)((SOURCELONG) >>  8);        \
+    (PINDEX)[4] = (uint8_t)((SOURCELONG))
+
+// Copy a 6-byte Index pointed by a uint8_t * to a Word_t:
+//
+#define JU_COPY6_PINDEX_TO_LONG(DESTLONG,PINDEX)        \
+    DESTLONG  = (Word_t)(PINDEX)[0] << 40;              \
+    DESTLONG += (Word_t)(PINDEX)[1] << 32;              \
+    DESTLONG += (Word_t)(PINDEX)[2] << 24;              \
+    DESTLONG += (Word_t)(PINDEX)[3] << 16;              \
+    DESTLONG += (Word_t)(PINDEX)[4] <<  8;              \
+    DESTLONG += (Word_t)(PINDEX)[5]
+
+// Copy a Word_t to a 6-byte Index pointed at by a uint8_t *:
+
+#define JU_COPY6_LONG_TO_PINDEX(PINDEX,SOURCELONG)      \
+    (PINDEX)[0] = (uint8_t)((SOURCELONG) >> 40);        \
+    (PINDEX)[1] = (uint8_t)((SOURCELONG) >> 32);        \
+    (PINDEX)[2] = (uint8_t)((SOURCELONG) >> 24);        \
+    (PINDEX)[3] = (uint8_t)((SOURCELONG) >> 16);        \
+    (PINDEX)[4] = (uint8_t)((SOURCELONG) >>  8);        \
+    (PINDEX)[5] = (uint8_t)((SOURCELONG))
+
+// Copy a 7-byte Index pointed by a uint8_t * to a Word_t:
+//
+#define JU_COPY7_PINDEX_TO_LONG(DESTLONG,PINDEX)        \
+    DESTLONG  = (Word_t)(PINDEX)[0] << 48;              \
+    DESTLONG += (Word_t)(PINDEX)[1] << 40;              \
+    DESTLONG += (Word_t)(PINDEX)[2] << 32;              \
+    DESTLONG += (Word_t)(PINDEX)[3] << 24;              \
+    DESTLONG += (Word_t)(PINDEX)[4] << 16;              \
+    DESTLONG += (Word_t)(PINDEX)[5] <<  8;              \
+    DESTLONG += (Word_t)(PINDEX)[6]
+
+// Copy a Word_t to a 7-byte Index pointed at by a uint8_t *:
+
+#define JU_COPY7_LONG_TO_PINDEX(PINDEX,SOURCELONG)      \
+    (PINDEX)[0] = (uint8_t)((SOURCELONG) >> 48);        \
+    (PINDEX)[1] = (uint8_t)((SOURCELONG) >> 40);        \
+    (PINDEX)[2] = (uint8_t)((SOURCELONG) >> 32);        \
+    (PINDEX)[3] = (uint8_t)((SOURCELONG) >> 24);        \
+    (PINDEX)[4] = (uint8_t)((SOURCELONG) >> 16);        \
+    (PINDEX)[5] = (uint8_t)((SOURCELONG) >>  8);        \
+    (PINDEX)[6] = (uint8_t)((SOURCELONG))
+
+#endif // JU_64BIT
+
+// ****************************************************************************
+// COMMON CODE FRAGMENTS (MACROS)
+// ****************************************************************************
+//
+// These code chunks are shared between various source files.
+
+
+// SET (REPLACE) ONE DIGIT IN AN INDEX:
+//
+// To avoid endian issues, use masking and ORing, which operates in a
+// big-endian register, rather than treating the Index as an array of bytes,
+// though that would be simpler, but would operate in endian-specific memory.
+//
+// TBD:  This contains two variable shifts, is that bad?
+
+#define JU_SETDIGIT(INDEX,DIGIT,STATE)                  \
+        (INDEX) = ((INDEX) & (~cJU_MASKATSTATE(STATE))) \
+                           | (((Word_t) (DIGIT))        \
+                              << (((STATE) - 1) * cJU_BITSPERBYTE))
+
+// Fast version for single LSB:
+
+#define JU_SETDIGIT1(INDEX,DIGIT) (INDEX) = ((INDEX) & ~0xff) | (DIGIT)
+
+
+// SET (REPLACE) "N" LEAST DIGITS IN AN INDEX:
+
+#define JU_SETDIGITS(INDEX,INDEX2,cSTATE) \
+        (INDEX) = ((INDEX ) & (~JU_LEASTBYTESMASK(cSTATE))) \
+                | ((INDEX2) & ( JU_LEASTBYTESMASK(cSTATE)))
+
+// COPY DECODE BYTES FROM JP TO INDEX:
+//
+// Modify Index digit(s) to match the bytes in jp_DcdPopO in case one or more
+// branches are skipped and the digits are significant.  Its probably faster
+// to just do this unconditionally than to check if its necessary.
+//
+// To avoid endian issues, use masking and ORing, which operates in a
+// big-endian register, rather than treating the Index as an array of bytes,
+// though that would be simpler, but would operate in endian-specific memory.
+//
+// WARNING:  Must not call JU_LEASTBYTESMASK (via cJU_DCDMASK) with Bytes =
+// cJU_ROOTSTATE or a bad mask is generated, but there are no Dcd bytes to copy
+// in this case anyway.  In fact there are no Dcd bytes unless State <
+// cJU_ROOTSTATE - 1, so dont call this macro except in those cases.
+//
+// TBD:  It would be nice to validate jp_DcdPopO against known digits to ensure
+// no corruption, but this is non-trivial.
+
+#define JU_SETDCD(INDEX,PJP,cSTATE)                             \
+    (INDEX) = ((INDEX) & ~cJU_DCDMASK(cSTATE))                  \
+                | (JU_JPDCDPOP0(PJP) & cJU_DCDMASK(cSTATE))
+
+// INSERT/DELETE AN INDEX IN-PLACE IN MEMORY:
+//
+// Given a pointer to an array of "even" (native), same-sized objects
+// (indexes), the current population of the array, an offset in the array, and
+// a new Index to insert, "shift up" the array elements (Indexes) above the
+// insertion point and insert the new Index.  Assume there is sufficient memory
+// to do this.
+//
+// In these macros, "i_offset" is an index offset, and "b_off" is a byte
+// offset for odd Index sizes.
+//
+// Note:  Endian issues only arise fro insertion, not deletion, and even for
+// insertion, they are transparent when native (even) objects are used, and
+// handled explicitly for odd (non-native) Index sizes.
+//
+// Note:  The following macros are tricky enough that there is some test code
+// for them appended to this file.
+
+#define JU_INSERTINPLACE(PARRAY,POP1,OFFSET,INDEX)              \
+        assert((long) (POP1) > 0);                              \
+        assert((Word_t) (OFFSET) <= (Word_t) (POP1));           \
+        {                                                       \
+            Word_t i_offset = (POP1);                           \
+                                                                \
+            while (i_offset-- > (OFFSET))                       \
+                (PARRAY)[i_offset + 1] = (PARRAY)[i_offset];    \
+                                                                \
+            (PARRAY)[OFFSET] = (INDEX);                         \
+        }
+
+
+// Variation for non-native Indexes, where cIS = Index Size
+// and PByte must point to a uint8_t (byte); shift byte-by-byte:
+//
+
+#define JU_INSERTINPLACE3(PBYTE,POP1,OFFSET,INDEX)              \
+{                                                               \
+    Word_t i_off = POP1;                                        \
+                                                                \
+    while (i_off-- > (OFFSET))                                  \
+    {                                                           \
+        Word_t  i_dx = i_off * 3;                               \
+        (PBYTE)[i_dx + 0 + 3] = (PBYTE)[i_dx + 0];              \
+        (PBYTE)[i_dx + 1 + 3] = (PBYTE)[i_dx + 1];              \
+        (PBYTE)[i_dx + 2 + 3] = (PBYTE)[i_dx + 2];              \
+    }                                                           \
+    JU_COPY3_LONG_TO_PINDEX(&((PBYTE)[(OFFSET) * 3]), INDEX);   \
+}
+
+#ifdef JU_64BIT
+
+#define JU_INSERTINPLACE5(PBYTE,POP1,OFFSET,INDEX)              \
+{                                                               \
+    Word_t i_off = POP1;                                        \
+                                                                \
+    while (i_off-- > (OFFSET))                                  \
+    {                                                           \
+        Word_t  i_dx = i_off * 5;                               \
+        (PBYTE)[i_dx + 0 + 5] = (PBYTE)[i_dx + 0];              \
+        (PBYTE)[i_dx + 1 + 5] = (PBYTE)[i_dx + 1];              \
+        (PBYTE)[i_dx + 2 + 5] = (PBYTE)[i_dx + 2];              \
+        (PBYTE)[i_dx + 3 + 5] = (PBYTE)[i_dx + 3];              \
+        (PBYTE)[i_dx + 4 + 5] = (PBYTE)[i_dx + 4];              \
+    }                                                           \
+    JU_COPY5_LONG_TO_PINDEX(&((PBYTE)[(OFFSET) * 5]), INDEX);   \
+}
+
+#define JU_INSERTINPLACE6(PBYTE,POP1,OFFSET,INDEX)              \
+{                                                               \
+    Word_t i_off = POP1;                                        \
+                                                                \
+    while (i_off-- > (OFFSET))                                  \
+    {                                                           \
+        Word_t  i_dx = i_off * 6;                               \
+        (PBYTE)[i_dx + 0 + 6] = (PBYTE)[i_dx + 0];              \
+        (PBYTE)[i_dx + 1 + 6] = (PBYTE)[i_dx + 1];              \
+        (PBYTE)[i_dx + 2 + 6] = (PBYTE)[i_dx + 2];              \
+        (PBYTE)[i_dx + 3 + 6] = (PBYTE)[i_dx + 3];              \
+        (PBYTE)[i_dx + 4 + 6] = (PBYTE)[i_dx + 4];              \
+        (PBYTE)[i_dx + 5 + 6] = (PBYTE)[i_dx + 5];              \
+    }                                                           \
+    JU_COPY6_LONG_TO_PINDEX(&((PBYTE)[(OFFSET) * 6]), INDEX);   \
+}
+
+#define JU_INSERTINPLACE7(PBYTE,POP1,OFFSET,INDEX)              \
+{                                                               \
+    Word_t i_off = POP1;                                        \
+                                                                \
+    while (i_off-- > (OFFSET))                                  \
+    {                                                           \
+        Word_t  i_dx = i_off * 7;                               \
+        (PBYTE)[i_dx + 0 + 7] = (PBYTE)[i_dx + 0];              \
+        (PBYTE)[i_dx + 1 + 7] = (PBYTE)[i_dx + 1];              \
+        (PBYTE)[i_dx + 2 + 7] = (PBYTE)[i_dx + 2];              \
+        (PBYTE)[i_dx + 3 + 7] = (PBYTE)[i_dx + 3];              \
+        (PBYTE)[i_dx + 4 + 7] = (PBYTE)[i_dx + 4];              \
+        (PBYTE)[i_dx + 5 + 7] = (PBYTE)[i_dx + 5];              \
+        (PBYTE)[i_dx + 6 + 7] = (PBYTE)[i_dx + 6];              \
+    }                                                           \
+    JU_COPY7_LONG_TO_PINDEX(&((PBYTE)[(OFFSET) * 7]), INDEX);   \
+}
+#endif // JU_64BIT
+
+// Counterparts to the above for deleting an Index:
+//
+// "Shift down" the array elements starting at the Index to be deleted.
+
+#define JU_DELETEINPLACE(PARRAY,POP1,OFFSET,IGNORE)             \
+        assert((long) (POP1) > 0);                              \
+        assert((Word_t) (OFFSET) < (Word_t) (POP1));            \
+        {                                                       \
+            Word_t i_offset = (OFFSET);                         \
+                                                                \
+            while (++i_offset < (POP1))                         \
+                (PARRAY)[i_offset - 1] = (PARRAY)[i_offset];    \
+        }
+
+// Variation for odd-byte-sized (non-native) Indexes, where cIS = Index Size
+// and PByte must point to a uint8_t (byte); copy byte-by-byte:
+//
+// Note:  If cIS == 1, JU_DELETEINPLACE_ODD == JU_DELETEINPLACE.
+//
+// Note:  There are no endian issues here because bytes are just shifted as-is,
+// not converted to/from an Index.
+
+#define JU_DELETEINPLACE_ODD(PBYTE,POP1,OFFSET,cIS)             \
+        assert((long) (POP1) > 0);                              \
+        assert((Word_t) (OFFSET) < (Word_t) (POP1));            \
+        {                                                       \
+            Word_t b_off = (((OFFSET) + 1) * (cIS)) - 1;        \
+                                                                \
+            while (++b_off < ((POP1) * (cIS)))                  \
+                (PBYTE)[b_off - (cIS)] = (PBYTE)[b_off];        \
+        }
+
+
+// INSERT/DELETE AN INDEX WHILE COPYING OTHERS:
+//
+// Copy PSource[] to PDest[], where PSource[] has Pop1 elements (Indexes),
+// inserting Index at PDest[Offset].  Unlike JU_*INPLACE*() above, these macros
+// are used when moving Indexes from one memory object to another.
+
+#define JU_INSERTCOPY(PDEST,PSOURCE,POP1,OFFSET,INDEX)          \
+        assert((long) (POP1) > 0);                              \
+        assert((Word_t) (OFFSET) <= (Word_t) (POP1));           \
+        {                                                       \
+            Word_t i_offset;                                    \
+                                                                \
+            for (i_offset = 0; i_offset < (OFFSET); ++i_offset) \
+                (PDEST)[i_offset] = (PSOURCE)[i_offset];        \
+                                                                \
+            (PDEST)[i_offset] = (INDEX);                        \
+                                                                \
+            for (/* null */; i_offset < (POP1); ++i_offset)     \
+                (PDEST)[i_offset + 1] = (PSOURCE)[i_offset];    \
+        }
+
+#define JU_INSERTCOPY3(PDEST,PSOURCE,POP1,OFFSET,INDEX)         \
+assert((long) (POP1) > 0);                                      \
+assert((Word_t) (OFFSET) <= (Word_t) (POP1));                   \
+{                                                               \
+    Word_t o_ff;                                                \
+                                                                \
+    for (o_ff = 0; o_ff < (OFFSET); o_ff++)                     \
+    {                                                           \
+        Word_t  i_dx = o_ff * 3;                                \
+        (PDEST)[i_dx + 0] = (PSOURCE)[i_dx + 0];                \
+        (PDEST)[i_dx + 1] = (PSOURCE)[i_dx + 1];                \
+        (PDEST)[i_dx + 2] = (PSOURCE)[i_dx + 2];                \
+    }                                                           \
+    JU_COPY3_LONG_TO_PINDEX(&((PDEST)[(OFFSET) * 3]), INDEX);   \
+                                                                \
+    for (/* null */; o_ff < (POP1); o_ff++)                     \
+    {                                                           \
+        Word_t  i_dx = o_ff * 3;                                \
+        (PDEST)[i_dx + 0 + 3] = (PSOURCE)[i_dx + 0];            \
+        (PDEST)[i_dx + 1 + 3] = (PSOURCE)[i_dx + 1];            \
+        (PDEST)[i_dx + 2 + 3] = (PSOURCE)[i_dx + 2];            \
+    }                                                           \
+}
+
+#ifdef JU_64BIT
+
+#define JU_INSERTCOPY5(PDEST,PSOURCE,POP1,OFFSET,INDEX)         \
+assert((long) (POP1) > 0);                                      \
+assert((Word_t) (OFFSET) <= (Word_t) (POP1));                   \
+{                                                               \
+    Word_t o_ff;                                                \
+                                                                \
+    for (o_ff = 0; o_ff < (OFFSET); o_ff++)                     \
+    {                                                           \
+        Word_t  i_dx = o_ff * 5;                                \
+        (PDEST)[i_dx + 0] = (PSOURCE)[i_dx + 0];                \
+        (PDEST)[i_dx + 1] = (PSOURCE)[i_dx + 1];                \
+        (PDEST)[i_dx + 2] = (PSOURCE)[i_dx + 2];                \
+        (PDEST)[i_dx + 3] = (PSOURCE)[i_dx + 3];                \
+        (PDEST)[i_dx + 4] = (PSOURCE)[i_dx + 4];                \
+    }                                                           \
+    JU_COPY5_LONG_TO_PINDEX(&((PDEST)[(OFFSET) * 5]), INDEX);   \
+                                                                \
+    for (/* null */; o_ff < (POP1); o_ff++)                     \
+    {                                                           \
+        Word_t  i_dx = o_ff * 5;                                \
+        (PDEST)[i_dx + 0 + 5] = (PSOURCE)[i_dx + 0];            \
+        (PDEST)[i_dx + 1 + 5] = (PSOURCE)[i_dx + 1];            \
+        (PDEST)[i_dx + 2 + 5] = (PSOURCE)[i_dx + 2];            \
+        (PDEST)[i_dx + 3 + 5] = (PSOURCE)[i_dx + 3];            \
+        (PDEST)[i_dx + 4 + 5] = (PSOURCE)[i_dx + 4];            \
+    }                                                           \
+}
+
+#define JU_INSERTCOPY6(PDEST,PSOURCE,POP1,OFFSET,INDEX)         \
+assert((long) (POP1) > 0);                                      \
+assert((Word_t) (OFFSET) <= (Word_t) (POP1));                   \
+{                                                               \
+    Word_t o_ff;                                                \
+                                                                \
+    for (o_ff = 0; o_ff < (OFFSET); o_ff++)                     \
+    {                                                           \
+        Word_t  i_dx = o_ff * 6;                                \
+        (PDEST)[i_dx + 0] = (PSOURCE)[i_dx + 0];                \
+        (PDEST)[i_dx + 1] = (PSOURCE)[i_dx + 1];                \
+        (PDEST)[i_dx + 2] = (PSOURCE)[i_dx + 2];                \
+        (PDEST)[i_dx + 3] = (PSOURCE)[i_dx + 3];                \
+        (PDEST)[i_dx + 4] = (PSOURCE)[i_dx + 4];                \
+        (PDEST)[i_dx + 5] = (PSOURCE)[i_dx + 5];                \
+    }                                                           \
+    JU_COPY6_LONG_TO_PINDEX(&((PDEST)[(OFFSET) * 6]), INDEX);   \
+                                                                \
+    for (/* null */; o_ff < (POP1); o_ff++)                     \
+    {                                                           \
+        Word_t  i_dx = o_ff * 6;                                \
+        (PDEST)[i_dx + 0 + 6] = (PSOURCE)[i_dx + 0];            \
+        (PDEST)[i_dx + 1 + 6] = (PSOURCE)[i_dx + 1];            \
+        (PDEST)[i_dx + 2 + 6] = (PSOURCE)[i_dx + 2];            \
+        (PDEST)[i_dx + 3 + 6] = (PSOURCE)[i_dx + 3];            \
+        (PDEST)[i_dx + 4 + 6] = (PSOURCE)[i_dx + 4];            \
+        (PDEST)[i_dx + 5 + 6] = (PSOURCE)[i_dx + 5];            \
+    }                                                           \
+}
+
+#define JU_INSERTCOPY7(PDEST,PSOURCE,POP1,OFFSET,INDEX)         \
+assert((long) (POP1) > 0);                                      \
+assert((Word_t) (OFFSET) <= (Word_t) (POP1));                   \
+{                                                               \
+    Word_t o_ff;                                                \
+                                                                \
+    for (o_ff = 0; o_ff < (OFFSET); o_ff++)                     \
+    {                                                           \
+        Word_t  i_dx = o_ff * 7;                                \
+        (PDEST)[i_dx + 0] = (PSOURCE)[i_dx + 0];                \
+        (PDEST)[i_dx + 1] = (PSOURCE)[i_dx + 1];                \
+        (PDEST)[i_dx + 2] = (PSOURCE)[i_dx + 2];                \
+        (PDEST)[i_dx + 3] = (PSOURCE)[i_dx + 3];                \
+        (PDEST)[i_dx + 4] = (PSOURCE)[i_dx + 4];                \
+        (PDEST)[i_dx + 5] = (PSOURCE)[i_dx + 5];                \
+        (PDEST)[i_dx + 6] = (PSOURCE)[i_dx + 6];                \
+    }                                                           \
+    JU_COPY7_LONG_TO_PINDEX(&((PDEST)[(OFFSET) * 7]), INDEX);   \
+                                                                \
+    for (/* null */; o_ff < (POP1); o_ff++)                     \
+    {                                                           \
+        Word_t  i_dx = o_ff * 7;                                \
+        (PDEST)[i_dx + 0 + 7] = (PSOURCE)[i_dx + 0];            \
+        (PDEST)[i_dx + 1 + 7] = (PSOURCE)[i_dx + 1];            \
+        (PDEST)[i_dx + 2 + 7] = (PSOURCE)[i_dx + 2];            \
+        (PDEST)[i_dx + 3 + 7] = (PSOURCE)[i_dx + 3];            \
+        (PDEST)[i_dx + 4 + 7] = (PSOURCE)[i_dx + 4];            \
+        (PDEST)[i_dx + 5 + 7] = (PSOURCE)[i_dx + 5];            \
+        (PDEST)[i_dx + 6 + 7] = (PSOURCE)[i_dx + 6];            \
+    }                                                           \
+}
+
+#endif // JU_64BIT
+
+// Counterparts to the above for deleting an Index:
+
+#define JU_DELETECOPY(PDEST,PSOURCE,POP1,OFFSET,IGNORE)         \
+        assert((long) (POP1) > 0);                              \
+        assert((Word_t) (OFFSET) < (Word_t) (POP1));            \
+        {                                                       \
+            Word_t i_offset;                                    \
+                                                                \
+            for (i_offset = 0; i_offset < (OFFSET); ++i_offset) \
+                (PDEST)[i_offset] = (PSOURCE)[i_offset];        \
+                                                                \
+            for (++i_offset; i_offset < (POP1); ++i_offset)     \
+                (PDEST)[i_offset - 1] = (PSOURCE)[i_offset];    \
+        }
+
+// Variation for odd-byte-sized (non-native) Indexes, where cIS = Index Size;
+// copy byte-by-byte:
+//
+// Note:  There are no endian issues here because bytes are just shifted as-is,
+// not converted to/from an Index.
+//
+// Note:  If cIS == 1, JU_DELETECOPY_ODD == JU_DELETECOPY, at least in concept.
+
+#define JU_DELETECOPY_ODD(PDEST,PSOURCE,POP1,OFFSET,cIS)                \
+        assert((long) (POP1) > 0);                                      \
+        assert((Word_t) (OFFSET) < (Word_t) (POP1));                    \
+        {                                                               \
+            uint8_t *_Pdest   = (uint8_t *) (PDEST);                    \
+            uint8_t *_Psource = (uint8_t *) (PSOURCE);                  \
+            Word_t   b_off;                                             \
+                                                                        \
+            for (b_off = 0; b_off < ((OFFSET) * (cIS)); ++b_off)        \
+                *_Pdest++ = *_Psource++;                                \
+                                                                        \
+            _Psource += (cIS);                                          \
+                                                                        \
+            for (b_off += (cIS); b_off < ((POP1) * (cIS)); ++b_off)     \
+                *_Pdest++ = *_Psource++;                                \
+        }
+
+
+// GENERIC RETURN CODE HANDLING FOR JUDY1 (NO VALUE AREAS) AND JUDYL (VALUE
+// AREAS):
+//
+// This common code hides Judy1 versus JudyL details of how to return various
+// conditions, including a pointer to a value area for JudyL.
+//
+// First, define an internal variation of JERR called JERRI (I = int) to make
+// lint happy.  We accidentally shipped to 11.11 OEUR with all functions that
+// return int or Word_t using JERR, which is type Word_t, for errors.  Lint
+// complains about this for functions that return int.  So, internally use
+// JERRI for error returns from the int functions.  Experiments show that
+// callers which compare int Foo() to (Word_t) JERR (~0UL) are OK, since JERRI
+// sign-extends to match JERR.
+
+#define JERRI ((int) ~0)                // see above.
+
+#ifdef JUDY1
+
+#define JU_RET_FOUND    return(1)
+#define JU_RET_NOTFOUND return(0)
+
+// For Judy1, these all "fall through" to simply JU_RET_FOUND, since there is no
+// value area pointer to return:
+
+#define JU_RET_FOUND_LEAFW(PJLW,POP1,OFFSET)    JU_RET_FOUND
+
+#define JU_RET_FOUND_JPM(Pjpm)                  JU_RET_FOUND
+#define JU_RET_FOUND_PVALUE(Pjv,OFFSET)         JU_RET_FOUND
+#ifndef JU_64BIT
+#define JU_RET_FOUND_LEAF1(Pjll,POP1,OFFSET)    JU_RET_FOUND
+#endif
+#define JU_RET_FOUND_LEAF2(Pjll,POP1,OFFSET)    JU_RET_FOUND
+#define JU_RET_FOUND_LEAF3(Pjll,POP1,OFFSET)    JU_RET_FOUND
+#ifdef JU_64BIT
+#define JU_RET_FOUND_LEAF4(Pjll,POP1,OFFSET)    JU_RET_FOUND
+#define JU_RET_FOUND_LEAF5(Pjll,POP1,OFFSET)    JU_RET_FOUND
+#define JU_RET_FOUND_LEAF6(Pjll,POP1,OFFSET)    JU_RET_FOUND
+#define JU_RET_FOUND_LEAF7(Pjll,POP1,OFFSET)    JU_RET_FOUND
+#endif
+#define JU_RET_FOUND_IMM_01(Pjp)                JU_RET_FOUND
+#define JU_RET_FOUND_IMM(Pjp,OFFSET)            JU_RET_FOUND
+
+// Note:  No JudyL equivalent:
+
+#define JU_RET_FOUND_FULLPOPU1                   JU_RET_FOUND
+#define JU_RET_FOUND_LEAF_B1(PJLB,SUBEXP,OFFSET) JU_RET_FOUND
+
+#else // JUDYL
+
+//      JU_RET_FOUND            // see below; must NOT be defined for JudyL.
+#define JU_RET_NOTFOUND return((PPvoid_t) NULL)
+
+// For JudyL, the location of the value area depends on the JP type and other
+// factors:
+//
+// TBD:  The value areas should be accessed via data structures, here and in
+// Dougs code, not by hard-coded address calculations.
+//
+// This is useful in insert/delete code when the value area is returned from
+// lower levels in the JPM:
+
+#define JU_RET_FOUND_JPM(Pjpm)  return((PPvoid_t) ((Pjpm)->jpm_PValue))
+
+// This is useful in insert/delete code when the value area location is already
+// computed:
+
+#define JU_RET_FOUND_PVALUE(Pjv,OFFSET) return((PPvoid_t) ((Pjv) + OFFSET))
+
+#define JU_RET_FOUND_LEAFW(PJLW,POP1,OFFSET) \
+                return((PPvoid_t) (JL_LEAFWVALUEAREA(PJLW, POP1) + (OFFSET)))
+
+#define JU_RET_FOUND_LEAF1(Pjll,POP1,OFFSET) \
+                return((PPvoid_t) (JL_LEAF1VALUEAREA(Pjll, POP1) + (OFFSET)))
+#define JU_RET_FOUND_LEAF2(Pjll,POP1,OFFSET) \
+                return((PPvoid_t) (JL_LEAF2VALUEAREA(Pjll, POP1) + (OFFSET)))
+#define JU_RET_FOUND_LEAF3(Pjll,POP1,OFFSET) \
+                return((PPvoid_t) (JL_LEAF3VALUEAREA(Pjll, POP1) + (OFFSET)))
+#ifdef JU_64BIT
+#define JU_RET_FOUND_LEAF4(Pjll,POP1,OFFSET) \
+                return((PPvoid_t) (JL_LEAF4VALUEAREA(Pjll, POP1) + (OFFSET)))
+#define JU_RET_FOUND_LEAF5(Pjll,POP1,OFFSET) \
+                return((PPvoid_t) (JL_LEAF5VALUEAREA(Pjll, POP1) + (OFFSET)))
+#define JU_RET_FOUND_LEAF6(Pjll,POP1,OFFSET) \
+                return((PPvoid_t) (JL_LEAF6VALUEAREA(Pjll, POP1) + (OFFSET)))
+#define JU_RET_FOUND_LEAF7(Pjll,POP1,OFFSET) \
+                return((PPvoid_t) (JL_LEAF7VALUEAREA(Pjll, POP1) + (OFFSET)))
+#endif
+
+// Note:  Here jp_Addr is a value area itself and not an address, so P_JV() is
+// not needed:
+
+#define JU_RET_FOUND_IMM_01(PJP)  return((PPvoid_t) (&((PJP)->jp_Addr)))
+
+// Note:  Here jp_Addr is a pointer to a separately-mallocd value area, so
+// P_JV() is required; likewise for JL_JLB_PVALUE:
+
+#define JU_RET_FOUND_IMM(PJP,OFFSET) \
+            return((PPvoid_t) (P_JV((PJP)->jp_Addr) + (OFFSET)))
+
+#define JU_RET_FOUND_LEAF_B1(PJLB,SUBEXP,OFFSET) \
+            return((PPvoid_t) (P_JV(JL_JLB_PVALUE(PJLB, SUBEXP)) + (OFFSET)))
+
+#endif // JUDYL
+
+
+// GENERIC ERROR HANDLING:
+//
+// This is complicated by variations in the needs of the callers of these
+// macros.  Only use JU_SET_ERRNO() for PJError, because it can be null; use
+// JU_SET_ERRNO_NONNULL() for Pjpm, which is never null, and also in other
+// cases where the pointer is known not to be null (to save dead branches).
+//
+// Note:  Most cases of JU_ERRNO_OVERRUN or JU_ERRNO_CORRUPT should result in
+// an assertion failure in debug code, so they are more likely to be caught, so
+// do that here in each macro.
+
+#define JU_SET_ERRNO(PJError, JErrno)                   \
+        {                                               \
+            assert((JErrno) != JU_ERRNO_OVERRUN);       \
+            assert((JErrno) != JU_ERRNO_CORRUPT);       \
+                                                        \
+            if (PJError != (PJError_t) NULL)            \
+            {                                           \
+                JU_ERRNO(PJError) = (JErrno);           \
+                JU_ERRID(PJError) = __LINE__;           \
+            }                                           \
+        }
+
+// Variation for callers who know already that PJError is non-null; and, it can
+// also be Pjpm (both PJError_t and Pjpm_t have je_* fields), so only assert it
+// for null, not cast to any specific pointer type:
+
+#define JU_SET_ERRNO_NONNULL(PJError, JErrno)           \
+        {                                               \
+            assert((JErrno) != JU_ERRNO_OVERRUN);       \
+            assert((JErrno) != JU_ERRNO_CORRUPT);       \
+            assert(PJError);                            \
+                                                        \
+            JU_ERRNO(PJError) = (JErrno);               \
+            JU_ERRID(PJError) = __LINE__;               \
+        }
+
+// Variation to copy error info from a (required) JPM to an (optional)
+// PJError_t:
+//
+// Note:  The assertions above about JU_ERRNO_OVERRUN and JU_ERRNO_CORRUPT
+// should have already popped, so they are not needed here.
+
+#define JU_COPY_ERRNO(PJError, Pjpm)                            \
+        {                                                       \
+            if (PJError)                                        \
+            {                                                   \
+                JU_ERRNO(PJError) = (uint8_t)JU_ERRNO(Pjpm);    \
+                JU_ERRID(PJError) = JU_ERRID(Pjpm);             \
+            }                                                   \
+        }
+
+// For JErrno parameter to previous macros upon return from Judy*Alloc*():
+//
+// The memory allocator returns an address of 0 for out of memory,
+// 1..sizeof(Word_t)-1 for corruption (an invalid pointer), otherwise a valid
+// pointer.
+
+#define JU_ALLOC_ERRNO(ADDR) \
+        (((void *) (ADDR) != (void *) NULL) ? JU_ERRNO_OVERRUN : JU_ERRNO_NOMEM)
+
+#define JU_CHECKALLOC(Type,Ptr,Retval)                  \
+        if ((Ptr) < (Type) sizeof(Word_t))              \
+        {                                               \
+            JU_SET_ERRNO(PJError, JU_ALLOC_ERRNO(Ptr)); \
+            return(Retval);                             \
+        }
+
+// Leaf search routines
+
+#ifdef JU_NOINLINE
+
+int j__udySearchLeaf1(Pjll_t Pjll, Word_t LeafPop1, Word_t Index);
+int j__udySearchLeaf2(Pjll_t Pjll, Word_t LeafPop1, Word_t Index);
+int j__udySearchLeaf3(Pjll_t Pjll, Word_t LeafPop1, Word_t Index);
+
+#ifdef JU_64BIT
+
+int j__udySearchLeaf4(Pjll_t Pjll, Word_t LeafPop1, Word_t Index);
+int j__udySearchLeaf5(Pjll_t Pjll, Word_t LeafPop1, Word_t Index);
+int j__udySearchLeaf6(Pjll_t Pjll, Word_t LeafPop1, Word_t Index);
+int j__udySearchLeaf7(Pjll_t Pjll, Word_t LeafPop1, Word_t Index);
+
+#endif // JU_64BIT
+
+int j__udySearchLeafW(Pjlw_t Pjlw, Word_t LeafPop1, Word_t Index);
+
+#else  // complier support for inline
+
+#ifdef JU_WIN
+static __inline int j__udySearchLeaf1(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#else
+static inline int j__udySearchLeaf1(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#endif
+{ SEARCHLEAFNATIVE(uint8_t,  Pjll, LeafPop1, Index); }
+
+#ifdef JU_WIN
+static __inline int j__udySearchLeaf2(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#else
+static inline int j__udySearchLeaf2(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#endif
+{ SEARCHLEAFNATIVE(uint16_t, Pjll, LeafPop1, Index); }
+
+#ifdef JU_WIN
+static __inline int j__udySearchLeaf3(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#else
+static inline int j__udySearchLeaf3(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#endif
+{ SEARCHLEAFNONNAT(Pjll, LeafPop1, Index, 3, JU_COPY3_PINDEX_TO_LONG); }
+
+#ifdef JU_64BIT
+
+#ifdef JU_WIN
+static __inline int j__udySearchLeaf4(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#else
+static inline int j__udySearchLeaf4(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#endif
+{ SEARCHLEAFNATIVE(uint32_t, Pjll, LeafPop1, Index); }
+
+#ifdef JU_WIN
+static __inline int j__udySearchLeaf5(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#else
+static inline int j__udySearchLeaf5(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#endif
+{ SEARCHLEAFNONNAT(Pjll, LeafPop1, Index, 5, JU_COPY5_PINDEX_TO_LONG); }
+
+#ifdef JU_WIN
+static __inline int j__udySearchLeaf6(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#else
+static inline int j__udySearchLeaf6(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#endif
+{ SEARCHLEAFNONNAT(Pjll, LeafPop1, Index, 6, JU_COPY6_PINDEX_TO_LONG); }
+
+#ifdef JU_WIN
+static __inline int j__udySearchLeaf7(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#else
+static inline int j__udySearchLeaf7(Pjll_t Pjll, Word_t LeafPop1, Word_t Index)
+#endif
+{ SEARCHLEAFNONNAT(Pjll, LeafPop1, Index, 7, JU_COPY7_PINDEX_TO_LONG); }
+
+#endif // JU_64BIT
+
+#ifdef JU_WIN
+static __inline int j__udySearchLeafW(Pjlw_t Pjlw, Word_t LeafPop1, Word_t Index)
+#else
+static inline int j__udySearchLeafW(Pjlw_t Pjlw, Word_t LeafPop1, Word_t Index)
+#endif
+{ SEARCHLEAFNATIVE(Word_t, Pjlw, LeafPop1, Index); }
+
+#endif // compiler support for inline
+
+#endif // ! _JUDYPRIVATE_INCLUDED
diff --git a/libs/klib/judy/JudyPrivate1L.h b/libs/klib/judy/JudyPrivate1L.h
new file mode 100644
index 0000000..5b9591f
--- /dev/null
+++ b/libs/klib/judy/JudyPrivate1L.h
@@ -0,0 +1,483 @@
+#ifndef _JUDYPRIVATE1L_INCLUDED
+#define	_JUDYPRIVATE1L_INCLUDED
+// _________________
+//
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// ****************************************************************************
+// Declare common cJU_* names for JP Types that occur in both Judy1 and JudyL,
+// for use by code that ifdefs JUDY1 and JUDYL.  Only JP Types common to both
+// Judy1 and JudyL are #defined here with equivalent cJU_* names.  JP Types
+// unique to only Judy1 or JudyL are listed in comments, so the type lists
+// match the Judy1.h and JudyL.h files.
+//
+// This file also defines cJU_* for other JP-related constants and functions
+// that some shared JUDY1/JUDYL code finds handy.
+//
+// At least in principle this file should be included AFTER Judy1.h or JudyL.h.
+//
+// WARNING:  This file must be kept consistent with the enums in Judy1.h and
+// JudyL.h.
+//
+// TBD:  You might think, why not define common cJU_* enums in, say,
+// JudyPrivate.h, and then inherit them into superset enums in Judy1.h and
+// JudyL.h?  The problem is that the enum lists for each class (cJ1_* and
+// cJL_*) must be numerically "packed" into the correct order, for two reasons:
+// (1) allow the compiler to generate "tight" switch statements with no wasted
+// slots (although this is not very big), and (2) allow calculations using the
+// enum values, although this is also not an issue if the calculations are only
+// within each cJ*_JPIMMED_*_* class and the members are packed within the
+// class.
+
+#ifdef JUDY1
+
+#define	cJU_JRPNULL		cJ1_JRPNULL
+#define	cJU_JPNULL1		cJ1_JPNULL1
+#define	cJU_JPNULL2		cJ1_JPNULL2
+#define	cJU_JPNULL3		cJ1_JPNULL3
+#ifdef JU_64BIT
+#define	cJU_JPNULL4		cJ1_JPNULL4
+#define	cJU_JPNULL5		cJ1_JPNULL5
+#define	cJU_JPNULL6		cJ1_JPNULL6
+#define	cJU_JPNULL7		cJ1_JPNULL7
+#endif
+#define	cJU_JPNULLMAX		cJ1_JPNULLMAX
+#define	cJU_JPBRANCH_L2		cJ1_JPBRANCH_L2
+#define	cJU_JPBRANCH_L3		cJ1_JPBRANCH_L3
+#ifdef JU_64BIT
+#define	cJU_JPBRANCH_L4		cJ1_JPBRANCH_L4
+#define	cJU_JPBRANCH_L5		cJ1_JPBRANCH_L5
+#define	cJU_JPBRANCH_L6		cJ1_JPBRANCH_L6
+#define	cJU_JPBRANCH_L7		cJ1_JPBRANCH_L7
+#endif
+#define	cJU_JPBRANCH_L		cJ1_JPBRANCH_L
+#define	j__U_BranchBJPPopToWords j__1_BranchBJPPopToWords
+#define	cJU_JPBRANCH_B2		cJ1_JPBRANCH_B2
+#define	cJU_JPBRANCH_B3		cJ1_JPBRANCH_B3
+#ifdef JU_64BIT
+#define	cJU_JPBRANCH_B4		cJ1_JPBRANCH_B4
+#define	cJU_JPBRANCH_B5		cJ1_JPBRANCH_B5
+#define	cJU_JPBRANCH_B6		cJ1_JPBRANCH_B6
+#define	cJU_JPBRANCH_B7		cJ1_JPBRANCH_B7
+#endif
+#define	cJU_JPBRANCH_B		cJ1_JPBRANCH_B
+#define	cJU_JPBRANCH_U2		cJ1_JPBRANCH_U2
+#define	cJU_JPBRANCH_U3		cJ1_JPBRANCH_U3
+#ifdef JU_64BIT
+#define	cJU_JPBRANCH_U4		cJ1_JPBRANCH_U4
+#define	cJU_JPBRANCH_U5		cJ1_JPBRANCH_U5
+#define	cJU_JPBRANCH_U6		cJ1_JPBRANCH_U6
+#define	cJU_JPBRANCH_U7		cJ1_JPBRANCH_U7
+#endif
+#define	cJU_JPBRANCH_U		cJ1_JPBRANCH_U
+#ifndef JU_64BIT
+#define	cJU_JPLEAF1		cJ1_JPLEAF1
+#endif
+#define	cJU_JPLEAF2		cJ1_JPLEAF2
+#define	cJU_JPLEAF3		cJ1_JPLEAF3
+#ifdef JU_64BIT
+#define	cJU_JPLEAF4		cJ1_JPLEAF4
+#define	cJU_JPLEAF5		cJ1_JPLEAF5
+#define	cJU_JPLEAF6		cJ1_JPLEAF6
+#define	cJU_JPLEAF7		cJ1_JPLEAF7
+#endif
+#define	cJU_JPLEAF_B1		cJ1_JPLEAF_B1
+//				cJ1_JPFULLPOPU1
+#define	cJU_JPIMMED_1_01	cJ1_JPIMMED_1_01
+#define	cJU_JPIMMED_2_01	cJ1_JPIMMED_2_01
+#define	cJU_JPIMMED_3_01	cJ1_JPIMMED_3_01
+#ifdef JU_64BIT
+#define	cJU_JPIMMED_4_01	cJ1_JPIMMED_4_01
+#define	cJU_JPIMMED_5_01	cJ1_JPIMMED_5_01
+#define	cJU_JPIMMED_6_01	cJ1_JPIMMED_6_01
+#define	cJU_JPIMMED_7_01	cJ1_JPIMMED_7_01
+#endif
+#define	cJU_JPIMMED_1_02	cJ1_JPIMMED_1_02
+#define	cJU_JPIMMED_1_03	cJ1_JPIMMED_1_03
+#define	cJU_JPIMMED_1_04	cJ1_JPIMMED_1_04
+#define	cJU_JPIMMED_1_05	cJ1_JPIMMED_1_05
+#define	cJU_JPIMMED_1_06	cJ1_JPIMMED_1_06
+#define	cJU_JPIMMED_1_07	cJ1_JPIMMED_1_07
+#ifdef JU_64BIT
+//				cJ1_JPIMMED_1_08
+//				cJ1_JPIMMED_1_09
+//				cJ1_JPIMMED_1_10
+//				cJ1_JPIMMED_1_11
+//				cJ1_JPIMMED_1_12
+//				cJ1_JPIMMED_1_13
+//				cJ1_JPIMMED_1_14
+//				cJ1_JPIMMED_1_15
+#endif
+#define	cJU_JPIMMED_2_02	cJ1_JPIMMED_2_02
+#define	cJU_JPIMMED_2_03	cJ1_JPIMMED_2_03
+#ifdef JU_64BIT
+//				cJ1_JPIMMED_2_04
+//				cJ1_JPIMMED_2_05
+//				cJ1_JPIMMED_2_06
+//				cJ1_JPIMMED_2_07
+#endif
+#define	cJU_JPIMMED_3_02	cJ1_JPIMMED_3_02
+#ifdef JU_64BIT
+//				cJ1_JPIMMED_3_03
+//				cJ1_JPIMMED_3_04
+//				cJ1_JPIMMED_3_05
+//				cJ1_JPIMMED_4_02
+//				cJ1_JPIMMED_4_03
+//				cJ1_JPIMMED_5_02
+//				cJ1_JPIMMED_5_03
+//				cJ1_JPIMMED_6_02
+//				cJ1_JPIMMED_7_02
+#endif
+#define	cJU_JPIMMED_CAP		cJ1_JPIMMED_CAP
+
+#else // JUDYL ****************************************************************
+
+#define	cJU_JRPNULL		cJL_JRPNULL
+#define	cJU_JPNULL1		cJL_JPNULL1
+#define	cJU_JPNULL2		cJL_JPNULL2
+#define	cJU_JPNULL3		cJL_JPNULL3
+#ifdef JU_64BIT
+#define	cJU_JPNULL4		cJL_JPNULL4
+#define	cJU_JPNULL5		cJL_JPNULL5
+#define	cJU_JPNULL6		cJL_JPNULL6
+#define	cJU_JPNULL7		cJL_JPNULL7
+#endif
+#define	cJU_JPNULLMAX		cJL_JPNULLMAX
+#define	cJU_JPBRANCH_L2		cJL_JPBRANCH_L2
+#define	cJU_JPBRANCH_L3		cJL_JPBRANCH_L3
+#ifdef JU_64BIT
+#define	cJU_JPBRANCH_L4		cJL_JPBRANCH_L4
+#define	cJU_JPBRANCH_L5		cJL_JPBRANCH_L5
+#define	cJU_JPBRANCH_L6		cJL_JPBRANCH_L6
+#define	cJU_JPBRANCH_L7		cJL_JPBRANCH_L7
+#endif
+#define	cJU_JPBRANCH_L		cJL_JPBRANCH_L
+#define	j__U_BranchBJPPopToWords j__L_BranchBJPPopToWords
+#define	cJU_JPBRANCH_B2		cJL_JPBRANCH_B2
+#define	cJU_JPBRANCH_B3		cJL_JPBRANCH_B3
+#ifdef JU_64BIT
+#define	cJU_JPBRANCH_B4		cJL_JPBRANCH_B4
+#define	cJU_JPBRANCH_B5		cJL_JPBRANCH_B5
+#define	cJU_JPBRANCH_B6		cJL_JPBRANCH_B6
+#define	cJU_JPBRANCH_B7		cJL_JPBRANCH_B7
+#endif
+#define	cJU_JPBRANCH_B		cJL_JPBRANCH_B
+#define	cJU_JPBRANCH_U2		cJL_JPBRANCH_U2
+#define	cJU_JPBRANCH_U3		cJL_JPBRANCH_U3
+#ifdef JU_64BIT
+#define	cJU_JPBRANCH_U4		cJL_JPBRANCH_U4
+#define	cJU_JPBRANCH_U5		cJL_JPBRANCH_U5
+#define	cJU_JPBRANCH_U6		cJL_JPBRANCH_U6
+#define	cJU_JPBRANCH_U7		cJL_JPBRANCH_U7
+#endif
+#define	cJU_JPBRANCH_U		cJL_JPBRANCH_U
+#define	cJU_JPLEAF1		cJL_JPLEAF1
+#define	cJU_JPLEAF2		cJL_JPLEAF2
+#define	cJU_JPLEAF3		cJL_JPLEAF3
+#ifdef JU_64BIT
+#define	cJU_JPLEAF4		cJL_JPLEAF4
+#define	cJU_JPLEAF5		cJL_JPLEAF5
+#define	cJU_JPLEAF6		cJL_JPLEAF6
+#define	cJU_JPLEAF7		cJL_JPLEAF7
+#endif
+#define	cJU_JPLEAF_B1		cJL_JPLEAF_B1
+#define	cJU_JPIMMED_1_01	cJL_JPIMMED_1_01
+#define	cJU_JPIMMED_2_01	cJL_JPIMMED_2_01
+#define	cJU_JPIMMED_3_01	cJL_JPIMMED_3_01
+#ifdef JU_64BIT
+#define	cJU_JPIMMED_4_01	cJL_JPIMMED_4_01
+#define	cJU_JPIMMED_5_01	cJL_JPIMMED_5_01
+#define	cJU_JPIMMED_6_01	cJL_JPIMMED_6_01
+#define	cJU_JPIMMED_7_01	cJL_JPIMMED_7_01
+#endif
+#define	cJU_JPIMMED_1_02	cJL_JPIMMED_1_02
+#define	cJU_JPIMMED_1_03	cJL_JPIMMED_1_03
+#ifdef JU_64BIT
+#define	cJU_JPIMMED_1_04	cJL_JPIMMED_1_04
+#define	cJU_JPIMMED_1_05	cJL_JPIMMED_1_05
+#define	cJU_JPIMMED_1_06	cJL_JPIMMED_1_06
+#define	cJU_JPIMMED_1_07	cJL_JPIMMED_1_07
+#define	cJU_JPIMMED_2_02	cJL_JPIMMED_2_02
+#define	cJU_JPIMMED_2_03	cJL_JPIMMED_2_03
+#define	cJU_JPIMMED_3_02	cJL_JPIMMED_3_02
+#endif
+#define	cJU_JPIMMED_CAP		cJL_JPIMMED_CAP
+
+#endif // JUDYL
+
+
+// ****************************************************************************
+// cJU*_ other than JP types:
+
+#ifdef JUDY1
+
+#define	cJU_LEAFW_MAXPOP1	cJ1_LEAFW_MAXPOP1
+#ifndef JU_64BIT
+#define	cJU_LEAF1_MAXPOP1	cJ1_LEAF1_MAXPOP1
+#endif
+#define	cJU_LEAF2_MAXPOP1	cJ1_LEAF2_MAXPOP1
+#define	cJU_LEAF3_MAXPOP1	cJ1_LEAF3_MAXPOP1
+#ifdef JU_64BIT
+#define	cJU_LEAF4_MAXPOP1	cJ1_LEAF4_MAXPOP1
+#define	cJU_LEAF5_MAXPOP1	cJ1_LEAF5_MAXPOP1
+#define	cJU_LEAF6_MAXPOP1	cJ1_LEAF6_MAXPOP1
+#define	cJU_LEAF7_MAXPOP1	cJ1_LEAF7_MAXPOP1
+#endif
+#define	cJU_IMMED1_MAXPOP1	cJ1_IMMED1_MAXPOP1
+#define	cJU_IMMED2_MAXPOP1	cJ1_IMMED2_MAXPOP1
+#define	cJU_IMMED3_MAXPOP1	cJ1_IMMED3_MAXPOP1
+#ifdef JU_64BIT
+#define	cJU_IMMED4_MAXPOP1	cJ1_IMMED4_MAXPOP1
+#define	cJU_IMMED5_MAXPOP1	cJ1_IMMED5_MAXPOP1
+#define	cJU_IMMED6_MAXPOP1	cJ1_IMMED6_MAXPOP1
+#define	cJU_IMMED7_MAXPOP1	cJ1_IMMED7_MAXPOP1
+#endif
+
+#define	JU_LEAF1POPTOWORDS(Pop1)	J1_LEAF1POPTOWORDS(Pop1)
+#define	JU_LEAF2POPTOWORDS(Pop1)	J1_LEAF2POPTOWORDS(Pop1)
+#define	JU_LEAF3POPTOWORDS(Pop1)	J1_LEAF3POPTOWORDS(Pop1)
+#ifdef JU_64BIT
+#define	JU_LEAF4POPTOWORDS(Pop1)	J1_LEAF4POPTOWORDS(Pop1)
+#define	JU_LEAF5POPTOWORDS(Pop1)	J1_LEAF5POPTOWORDS(Pop1)
+#define	JU_LEAF6POPTOWORDS(Pop1)	J1_LEAF6POPTOWORDS(Pop1)
+#define	JU_LEAF7POPTOWORDS(Pop1)	J1_LEAF7POPTOWORDS(Pop1)
+#endif
+#define	JU_LEAFWPOPTOWORDS(Pop1)	J1_LEAFWPOPTOWORDS(Pop1)
+
+#ifndef JU_64BIT
+#define	JU_LEAF1GROWINPLACE(Pop1)	J1_LEAF1GROWINPLACE(Pop1)
+#endif
+#define	JU_LEAF2GROWINPLACE(Pop1)	J1_LEAF2GROWINPLACE(Pop1)
+#define	JU_LEAF3GROWINPLACE(Pop1)	J1_LEAF3GROWINPLACE(Pop1)
+#ifdef JU_64BIT
+#define	JU_LEAF4GROWINPLACE(Pop1)	J1_LEAF4GROWINPLACE(Pop1)
+#define	JU_LEAF5GROWINPLACE(Pop1)	J1_LEAF5GROWINPLACE(Pop1)
+#define	JU_LEAF6GROWINPLACE(Pop1)	J1_LEAF6GROWINPLACE(Pop1)
+#define	JU_LEAF7GROWINPLACE(Pop1)	J1_LEAF7GROWINPLACE(Pop1)
+#endif
+#define	JU_LEAFWGROWINPLACE(Pop1)	J1_LEAFWGROWINPLACE(Pop1)
+
+#define	j__udyCreateBranchL	j__udy1CreateBranchL
+#define	j__udyCreateBranchB	j__udy1CreateBranchB
+#define	j__udyCreateBranchU	j__udy1CreateBranchU
+#define	j__udyCascade1		j__udy1Cascade1
+#define	j__udyCascade2		j__udy1Cascade2
+#define	j__udyCascade3		j__udy1Cascade3
+#ifdef JU_64BIT
+#define	j__udyCascade4		j__udy1Cascade4
+#define	j__udyCascade5		j__udy1Cascade5
+#define	j__udyCascade6		j__udy1Cascade6
+#define	j__udyCascade7		j__udy1Cascade7
+#endif
+#define	j__udyCascadeL		j__udy1CascadeL
+#define	j__udyInsertBranch	j__udy1InsertBranch
+
+#define	j__udyBranchBToBranchL	j__udy1BranchBToBranchL
+#ifndef JU_64BIT
+#define	j__udyLeafB1ToLeaf1	j__udy1LeafB1ToLeaf1
+#endif
+#define	j__udyLeaf1ToLeaf2	j__udy1Leaf1ToLeaf2
+#define	j__udyLeaf2ToLeaf3	j__udy1Leaf2ToLeaf3
+#ifndef JU_64BIT
+#define	j__udyLeaf3ToLeafW	j__udy1Leaf3ToLeafW
+#else
+#define	j__udyLeaf3ToLeaf4	j__udy1Leaf3ToLeaf4
+#define	j__udyLeaf4ToLeaf5	j__udy1Leaf4ToLeaf5
+#define	j__udyLeaf5ToLeaf6	j__udy1Leaf5ToLeaf6
+#define	j__udyLeaf6ToLeaf7	j__udy1Leaf6ToLeaf7
+#define	j__udyLeaf7ToLeafW	j__udy1Leaf7ToLeafW
+#endif
+
+#define	jpm_t			j1pm_t
+#define	Pjpm_t			Pj1pm_t
+
+#define	jlb_t			j1lb_t
+#define	Pjlb_t			Pj1lb_t
+
+#define	JU_JLB_BITMAP		J1_JLB_BITMAP
+
+#define	j__udyAllocJPM		j__udy1AllocJ1PM
+#define	j__udyAllocJBL		j__udy1AllocJBL
+#define	j__udyAllocJBB		j__udy1AllocJBB
+#define	j__udyAllocJBBJP	j__udy1AllocJBBJP
+#define	j__udyAllocJBU		j__udy1AllocJBU
+#ifndef JU_64BIT
+#define	j__udyAllocJLL1		j__udy1AllocJLL1
+#endif
+#define	j__udyAllocJLL2		j__udy1AllocJLL2
+#define	j__udyAllocJLL3		j__udy1AllocJLL3
+#ifdef JU_64BIT
+#define	j__udyAllocJLL4		j__udy1AllocJLL4
+#define	j__udyAllocJLL5		j__udy1AllocJLL5
+#define	j__udyAllocJLL6		j__udy1AllocJLL6
+#define	j__udyAllocJLL7		j__udy1AllocJLL7
+#endif
+#define	j__udyAllocJLW		j__udy1AllocJLW
+#define	j__udyAllocJLB1		j__udy1AllocJLB1
+#define	j__udyFreeJPM		j__udy1FreeJ1PM
+#define	j__udyFreeJBL		j__udy1FreeJBL
+#define	j__udyFreeJBB		j__udy1FreeJBB
+#define	j__udyFreeJBBJP		j__udy1FreeJBBJP
+#define	j__udyFreeJBU		j__udy1FreeJBU
+#ifndef JU_64BIT
+#define	j__udyFreeJLL1		j__udy1FreeJLL1
+#endif
+#define	j__udyFreeJLL2		j__udy1FreeJLL2
+#define	j__udyFreeJLL3		j__udy1FreeJLL3
+#ifdef JU_64BIT
+#define	j__udyFreeJLL4		j__udy1FreeJLL4
+#define	j__udyFreeJLL5		j__udy1FreeJLL5
+#define	j__udyFreeJLL6		j__udy1FreeJLL6
+#define	j__udyFreeJLL7		j__udy1FreeJLL7
+#endif
+#define	j__udyFreeJLW		j__udy1FreeJLW
+#define	j__udyFreeJLB1		j__udy1FreeJLB1
+#define	j__udyFreeSM		j__udy1FreeSM
+
+#define	j__uMaxWords		j__u1MaxWords
+
+#ifdef DEBUG
+#define	JudyCheckPop		Judy1CheckPop
+#endif
+
+#else // JUDYL ****************************************************************
+
+#define	cJU_LEAFW_MAXPOP1	cJL_LEAFW_MAXPOP1
+#define	cJU_LEAF1_MAXPOP1	cJL_LEAF1_MAXPOP1
+#define	cJU_LEAF2_MAXPOP1	cJL_LEAF2_MAXPOP1
+#define	cJU_LEAF3_MAXPOP1	cJL_LEAF3_MAXPOP1
+#ifdef JU_64BIT
+#define	cJU_LEAF4_MAXPOP1	cJL_LEAF4_MAXPOP1
+#define	cJU_LEAF5_MAXPOP1	cJL_LEAF5_MAXPOP1
+#define	cJU_LEAF6_MAXPOP1	cJL_LEAF6_MAXPOP1
+#define	cJU_LEAF7_MAXPOP1	cJL_LEAF7_MAXPOP1
+#endif
+#define	cJU_IMMED1_MAXPOP1	cJL_IMMED1_MAXPOP1
+#define	cJU_IMMED2_MAXPOP1	cJL_IMMED2_MAXPOP1
+#define	cJU_IMMED3_MAXPOP1	cJL_IMMED3_MAXPOP1
+#ifdef JU_64BIT
+#define	cJU_IMMED4_MAXPOP1	cJL_IMMED4_MAXPOP1
+#define	cJU_IMMED5_MAXPOP1	cJL_IMMED5_MAXPOP1
+#define	cJU_IMMED6_MAXPOP1	cJL_IMMED6_MAXPOP1
+#define	cJU_IMMED7_MAXPOP1	cJL_IMMED7_MAXPOP1
+#endif
+
+#define	JU_LEAF1POPTOWORDS(Pop1)	JL_LEAF1POPTOWORDS(Pop1)
+#define	JU_LEAF2POPTOWORDS(Pop1)	JL_LEAF2POPTOWORDS(Pop1)
+#define	JU_LEAF3POPTOWORDS(Pop1)	JL_LEAF3POPTOWORDS(Pop1)
+#ifdef JU_64BIT
+#define	JU_LEAF4POPTOWORDS(Pop1)	JL_LEAF4POPTOWORDS(Pop1)
+#define	JU_LEAF5POPTOWORDS(Pop1)	JL_LEAF5POPTOWORDS(Pop1)
+#define	JU_LEAF6POPTOWORDS(Pop1)	JL_LEAF6POPTOWORDS(Pop1)
+#define	JU_LEAF7POPTOWORDS(Pop1)	JL_LEAF7POPTOWORDS(Pop1)
+#endif
+#define	JU_LEAFWPOPTOWORDS(Pop1)	JL_LEAFWPOPTOWORDS(Pop1)
+
+#define	JU_LEAF1GROWINPLACE(Pop1)	JL_LEAF1GROWINPLACE(Pop1)
+#define	JU_LEAF2GROWINPLACE(Pop1)	JL_LEAF2GROWINPLACE(Pop1)
+#define	JU_LEAF3GROWINPLACE(Pop1)	JL_LEAF3GROWINPLACE(Pop1)
+#ifdef JU_64BIT
+#define	JU_LEAF4GROWINPLACE(Pop1)	JL_LEAF4GROWINPLACE(Pop1)
+#define	JU_LEAF5GROWINPLACE(Pop1)	JL_LEAF5GROWINPLACE(Pop1)
+#define	JU_LEAF6GROWINPLACE(Pop1)	JL_LEAF6GROWINPLACE(Pop1)
+#define	JU_LEAF7GROWINPLACE(Pop1)	JL_LEAF7GROWINPLACE(Pop1)
+#endif
+#define	JU_LEAFWGROWINPLACE(Pop1)	JL_LEAFWGROWINPLACE(Pop1)
+
+#define	j__udyCreateBranchL	j__udyLCreateBranchL
+#define	j__udyCreateBranchB	j__udyLCreateBranchB
+#define	j__udyCreateBranchU	j__udyLCreateBranchU
+#define	j__udyCascade1		j__udyLCascade1
+#define	j__udyCascade2		j__udyLCascade2
+#define	j__udyCascade3		j__udyLCascade3
+#ifdef JU_64BIT
+#define	j__udyCascade4		j__udyLCascade4
+#define	j__udyCascade5		j__udyLCascade5
+#define	j__udyCascade6		j__udyLCascade6
+#define	j__udyCascade7		j__udyLCascade7
+#endif
+#define	j__udyCascadeL		j__udyLCascadeL
+#define	j__udyInsertBranch	j__udyLInsertBranch
+
+#define	j__udyBranchBToBranchL	j__udyLBranchBToBranchL
+#define	j__udyLeafB1ToLeaf1	j__udyLLeafB1ToLeaf1
+#define	j__udyLeaf1ToLeaf2	j__udyLLeaf1ToLeaf2
+#define	j__udyLeaf2ToLeaf3	j__udyLLeaf2ToLeaf3
+#ifndef JU_64BIT
+#define	j__udyLeaf3ToLeafW	j__udyLLeaf3ToLeafW
+#else
+#define	j__udyLeaf3ToLeaf4	j__udyLLeaf3ToLeaf4
+#define	j__udyLeaf4ToLeaf5	j__udyLLeaf4ToLeaf5
+#define	j__udyLeaf5ToLeaf6	j__udyLLeaf5ToLeaf6
+#define	j__udyLeaf6ToLeaf7	j__udyLLeaf6ToLeaf7
+#define	j__udyLeaf7ToLeafW	j__udyLLeaf7ToLeafW
+#endif
+
+#define	jpm_t			jLpm_t
+#define	Pjpm_t			PjLpm_t
+
+#define	jlb_t			jLlb_t
+#define	Pjlb_t			PjLlb_t
+
+#define	JU_JLB_BITMAP		JL_JLB_BITMAP
+
+#define	j__udyAllocJPM		j__udyLAllocJLPM
+#define	j__udyAllocJBL		j__udyLAllocJBL
+#define	j__udyAllocJBB		j__udyLAllocJBB
+#define	j__udyAllocJBBJP	j__udyLAllocJBBJP
+#define	j__udyAllocJBU		j__udyLAllocJBU
+#define	j__udyAllocJLL1		j__udyLAllocJLL1
+#define	j__udyAllocJLL2		j__udyLAllocJLL2
+#define	j__udyAllocJLL3		j__udyLAllocJLL3
+#ifdef JU_64BIT
+#define	j__udyAllocJLL4		j__udyLAllocJLL4
+#define	j__udyAllocJLL5		j__udyLAllocJLL5
+#define	j__udyAllocJLL6		j__udyLAllocJLL6
+#define	j__udyAllocJLL7		j__udyLAllocJLL7
+#endif
+#define	j__udyAllocJLW		j__udyLAllocJLW
+#define	j__udyAllocJLB1		j__udyLAllocJLB1
+//				j__udyLAllocJV
+#define	j__udyFreeJPM		j__udyLFreeJLPM
+#define	j__udyFreeJBL		j__udyLFreeJBL
+#define	j__udyFreeJBB		j__udyLFreeJBB
+#define	j__udyFreeJBBJP		j__udyLFreeJBBJP
+#define	j__udyFreeJBU		j__udyLFreeJBU
+#define	j__udyFreeJLL1		j__udyLFreeJLL1
+#define	j__udyFreeJLL2		j__udyLFreeJLL2
+#define	j__udyFreeJLL3		j__udyLFreeJLL3
+#ifdef JU_64BIT
+#define	j__udyFreeJLL4		j__udyLFreeJLL4
+#define	j__udyFreeJLL5		j__udyLFreeJLL5
+#define	j__udyFreeJLL6		j__udyLFreeJLL6
+#define	j__udyFreeJLL7		j__udyLFreeJLL7
+#endif
+#define	j__udyFreeJLW		j__udyLFreeJLW
+#define	j__udyFreeJLB1		j__udyLFreeJLB1
+#define	j__udyFreeSM		j__udyLFreeSM
+//				j__udyLFreeJV
+
+#define	j__uMaxWords		j__uLMaxWords
+
+#ifdef DEBUG
+#define	JudyCheckPop		JudyLCheckPop
+#endif
+
+#endif // JUDYL
+
+#endif // _JUDYPRIVATE1L_INCLUDED
diff --git a/libs/klib/judy/JudyPrivateBranch.h b/libs/klib/judy/JudyPrivateBranch.h
new file mode 100644
index 0000000..4e0dda4
--- /dev/null
+++ b/libs/klib/judy/JudyPrivateBranch.h
@@ -0,0 +1,777 @@
+#ifndef _JUDY_PRIVATE_BRANCH_INCLUDED
+#define _JUDY_PRIVATE_BRANCH_INCLUDED
+// _________________
+//
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// Header file for all Judy sources, for global but private (non-exported)
+// declarations specific to branch support.
+//
+// See also the "Judy Shop Manual" (try judy/doc/int/JudyShopManual.*).
+
+
+// ****************************************************************************
+// JUDY POINTER (JP) SUPPORT
+// ****************************************************************************
+//
+// This "rich pointer" object is pivotal to Judy execution.
+//
+// JP CONTAINING OTHER THAN IMMEDIATE INDEXES:
+//
+// If the JP points to a linear or bitmap leaf, jp_DcdPopO contains the
+// Population-1 in LSbs and Decode (Dcd) bytes in the MSBs.  (In practice the
+// Decode bits are masked off while accessing the Pop0 bits.)
+//
+// The Decode Size, the number of Dcd bytes available, is encoded in jpo_Type.
+// It can also be thought of as the number of states "skipped" in the SM, where
+// each state decodes 8 bits = 1 byte.
+//
+// TBD:  Dont need two structures, except possibly to force jp_Type to highest
+// address!
+//
+// Note:  The jpo_u union is not required by HP-UX or Linux but Win32 because
+// the cl.exe compiler otherwise refuses to pack a bitfield (DcdPopO) with
+// anything else, even with the -Zp option.  This is pretty ugly, but
+// fortunately portable, and its all hide-able by macros (see below).
+
+typedef struct J_UDY_POINTER_OTHERS      // JPO.
+        {
+            Word_t      j_po_Addr;       // first word:  Pjp_t, Word_t, etc.
+            union {
+//              Word_t  j_po_DcdPop0:cJU_BITSPERWORD-cJU_BITSPERBYTE;
+                uint8_t j_po_DcdP0[sizeof(Word_t) - 1];
+                uint8_t j_po_Bytes[sizeof(Word_t)];     // last byte = jp_Type.
+            } jpo_u;
+        } jpo_t;
+
+
+// JP CONTAINING IMMEDIATE INDEXES:
+//
+// j_pi_1Index[] plus j_pi_LIndex[] together hold as many N-byte (1..3-byte
+// [1..7-byte]) Indexes as will fit in sizeof(jpi_t) less 1 byte for j_pi_Type
+// (that is, 7..1 [15..1] Indexes).
+//
+// For Judy1, j_pi_1Index[] is used and j_pi_LIndex[] is not used.
+// For JudyL, j_pi_LIndex[] is used and j_pi_1Index[] is not used.
+//
+// Note:  Actually when Pop1 = 1, jpi_t is not used, and the least bytes of the
+// single Index are stored in j_po_DcdPopO, for both Judy1 and JudyL, so for
+// JudyL the j_po_Addr field can hold the target value.
+//
+// TBD:  Revise this structure to not overload j_po_DcdPopO this way?  The
+// current arrangement works, its just confusing.
+
+typedef struct _JUDY_POINTER_IMMED      // JPI.
+        {
+            uint8_t j_pi_1Index[sizeof(Word_t)];        // see above.
+            uint8_t j_pi_LIndex[sizeof(Word_t) - 1];    // see above.
+            uint8_t j_pi_Type;                  // JP type, 1 of cJ*_JPIMMED*.
+        } jpi_t;
+
+
+// UNION OF JP TYPES:
+//
+// A branch is an array of cJU_BRANCHUNUMJPS (256) of this object, or an
+// alternate data type such as:  A linear branch which is a list of 2..7 JPs,
+// or a bitmap branch which contains 8 lists of 0..32 JPs.  JPs reside only in
+// branches of a Judy SM.
+
+typedef union J_UDY_POINTER             // JP.
+        {
+            jpo_t j_po;                 // other than immediate indexes.
+            jpi_t j_pi;                 // immediate indexes.
+        } jp_t, *Pjp_t;
+
+// For coding convenience:
+//
+// Note, jp_Type has the same bits in jpo_t and jpi_t.
+
+#define jp_1Index  j_pi.j_pi_1Index     // for storing Indexes in first  word.
+#define jp_LIndex  j_pi.j_pi_LIndex     // for storing Indexes in second word.
+#define jp_Addr    j_po.j_po_Addr
+//#define       jp_DcdPop0 j_po.jpo_u.j_po_DcdPop0
+#define jp_Type    j_po.jpo_u.j_po_Bytes[sizeof(Word_t) - 1]
+#define jp_DcdP0   j_po.jpo_u.j_po_DcdP0
+
+
+// ****************************************************************************
+// JUDY POINTER (JP) -- RELATED MACROS AND CONSTANTS
+// ****************************************************************************
+
+// EXTRACT VALUES FROM JP:
+//
+// Masks for the bytes in the Dcd and Pop0 parts of jp_DcdPopO:
+//
+// cJU_DCDMASK() consists of a mask that excludes the (LSb) Pop0 bytes and
+// also, just to be safe, the top byte of the word, since jp_DcdPopO is 1 byte
+// less than a full word.
+//
+// Note:  These are constant macros (cJU) because cPopBytes should be a
+// constant.  Also note cPopBytes == state in the SM.
+
+#define cJU_POP0MASK(cPopBytes) JU_LEASTBYTESMASK(cPopBytes)
+
+#define cJU_DCDMASK(cPopBytes) \
+        ((cJU_ALLONES >> cJU_BITSPERBYTE) & (~cJU_POP0MASK(cPopBytes)))
+
+// Mask off the high byte from INDEX to it can be compared to DcdPopO:
+
+#define JU_TRIMTODCDSIZE(INDEX) ((cJU_ALLONES >> cJU_BITSPERBYTE) & (INDEX))
+
+// Get from jp_DcdPopO the Pop0 for various branch JP Types:
+//
+// Note:  There are no simple macros for cJU_BRANCH* Types because their
+// populations must be added up and dont reside in an already-calculated
+// place.
+
+#define JU_JPBRANCH_POP0(PJP,cPopBytes) \
+        (JU_JPDCDPOP0(PJP) & cJU_POP0MASK(cPopBytes))
+
+// METHOD FOR DETERMINING IF OBJECTS HAVE ROOM TO GROW:
+//
+// J__U_GROWCK() is a generic method to determine if an object can grow in
+// place, based on whether the next population size (one more) would use the
+// same space.
+
+#define J__U_GROWCK(POP1,MAXPOP1,POPTOWORDS) \
+        (((POP1) != (MAXPOP1)) && (POPTOWORDS[POP1] == POPTOWORDS[(POP1) + 1]))
+
+#define JU_BRANCHBJPGROWINPLACE(NumJPs) \
+        J__U_GROWCK(NumJPs, cJU_BITSPERSUBEXPB, j__U_BranchBJPPopToWords)
+
+
+// DETERMINE IF AN INDEX IS (NOT) IN A JPS EXPANSE:
+
+#define JU_DCDNOTMATCHINDEX(INDEX,PJP,POP0BYTES) \
+        (((INDEX) ^ JU_JPDCDPOP0(PJP)) & cJU_DCDMASK(POP0BYTES))
+
+
+// NUMBER OF JPs IN AN UNCOMPRESSED BRANCH:
+//
+// An uncompressed branch is simply an array of 256 Judy Pointers (JPs).  It is
+// a minimum cacheline fill object.  Define it here before its first needed.
+
+#define cJU_BRANCHUNUMJPS  cJU_SUBEXPPERSTATE
+
+
+// ****************************************************************************
+// JUDY BRANCH LINEAR (JBL) SUPPORT
+// ****************************************************************************
+//
+// A linear branch is a way of compressing empty expanses (null JPs) out of an
+// uncompressed 256-way branch, when the number of populated expanses is so
+// small that even a bitmap branch is excessive.
+//
+// The maximum number of JPs in a Judy linear branch:
+//
+// Note:  This number results in a 1-cacheline sized structure.  Previous
+// versions had a larger struct so a linear branch didnt become a bitmap
+// branch until the memory consumed was even, but for speed, its better to
+// switch "sooner" and keep a linear branch fast.
+
+#define cJU_BRANCHLMAXJPS 7
+
+
+// LINEAR BRANCH STRUCT:
+//
+// 1-byte count, followed by array of byte-sized expanses, followed by JPs.
+
+typedef struct J__UDY_BRANCH_LINEAR
+        {
+            uint8_t jbl_NumJPs;                     // num of JPs (Pjp_t), 1..N.
+            uint8_t jbl_Expanse[cJU_BRANCHLMAXJPS]; // 1..7 MSbs of pop exps.
+            jp_t    jbl_jp     [cJU_BRANCHLMAXJPS]; // JPs for populated exps.
+        } jbl_t, * Pjbl_t;
+
+
+// ****************************************************************************
+// JUDY BRANCH BITMAP (JBB) SUPPORT
+// ****************************************************************************
+//
+// A bitmap branch is a way of compressing empty expanses (null JPs) out of
+// uncompressed 256-way branch.  This costs 1 additional cache line fill, but
+// can save a lot of memory when it matters most, near the leaves, and
+// typically there will be only one at most in the path to any Index (leaf).
+//
+// The bitmap indicates which of the cJU_BRANCHUNUMJPS (256) JPs in the branch
+// are NOT null, that is, their expanses are populated.  The jbb_t also
+// contains N pointers to "mini" Judy branches ("subexpanses") of up to M JPs
+// each (see BITMAP_BRANCHMxN, for example, BITMAP_BRANCH32x8), where M x N =
+// cJU_BRANCHUNUMJPS.  These are dynamically allocated and never contain
+// cJ*_JPNULL* jp_Types.  An empty subexpanse is represented by no bit sets in
+// the corresponding subexpanse bitmap, in which case the corresponding
+// jbbs_Pjp pointers value is unused.
+//
+// Note that the number of valid JPs in each 1-of-N subexpanses is determined
+// by POPULATION rather than by EXPANSE -- the desired outcome to save memory
+// when near the leaves.  Note that the memory required for 185 JPs is about as
+// much as an uncompressed 256-way branch, therefore 184 is set as the maximum.
+// However, it is expected that a conversion to an uncompressed 256-way branch
+// will normally take place before this limit is reached for other reasons,
+// such as improving performance when the "wasted" memory is well amortized by
+// the population under the branch, preserving an acceptable overall
+// bytes/Index in the Judy array.
+//
+// The number of pointers to arrays of JPs in the Judy bitmap branch:
+//
+// Note:  The numbers below are the same in both 32 and 64 bit systems.
+
+#define cJU_BRANCHBMAXJPS  184          // maximum JPs for bitmap branches.
+
+// Convenience wrappers for referencing BranchB bitmaps or JP subarray
+// pointers:
+//
+// Note:  JU_JBB_PJP produces a "raw" memory address that must pass through
+// P_JP before use, except when freeing memory:
+
+#define JU_JBB_BITMAP(Pjbb, SubExp)  ((Pjbb)->jbb_jbbs[SubExp].jbbs_Bitmap)
+#define JU_JBB_PJP(   Pjbb, SubExp)  ((Pjbb)->jbb_jbbs[SubExp].jbbs_Pjp)
+
+#define JU_SUBEXPB(Digit) (((Digit) / cJU_BITSPERSUBEXPB) & (cJU_NUMSUBEXPB-1))
+
+#define JU_BITMAPTESTB(Pjbb, Index) \
+        (JU_JBB_BITMAP(Pjbb, JU_SUBEXPB(Index)) &  JU_BITPOSMASKB(Index))
+
+#define JU_BITMAPSETB(Pjbb, Index)  \
+        (JU_JBB_BITMAP(Pjbb, JU_SUBEXPB(Index)) |= JU_BITPOSMASKB(Index))
+
+// Note:  JU_BITMAPCLEARB is not defined because the code does it a faster way.
+
+typedef struct J__UDY_BRANCH_BITMAP_SUBEXPANSE
+        {
+            BITMAPB_t jbbs_Bitmap;
+            Pjp_t     jbbs_Pjp;
+
+        } jbbs_t;
+
+typedef struct J__UDY_BRANCH_BITMAP
+        {
+            jbbs_t jbb_jbbs   [cJU_NUMSUBEXPB];
+#ifdef SUBEXPCOUNTS
+            Word_t jbb_subPop1[cJU_NUMSUBEXPB];
+#endif
+        } jbb_t, * Pjbb_t;
+
+#define JU_BRANCHJP_NUMJPSTOWORDS(NumJPs) (j__U_BranchBJPPopToWords[NumJPs])
+
+#ifdef SUBEXPCOUNTS
+#define cJU_NUMSUBEXPU  16      // number of subexpanse counts.
+#endif
+
+
+// ****************************************************************************
+// JUDY BRANCH UNCOMPRESSED (JBU) SUPPORT
+// ****************************************************************************
+
+// Convenience wrapper for referencing BranchU JPs:
+//
+// Note:  This produces a non-"raw" address already passed through P_JBU().
+
+#define JU_JBU_PJP(Pjp,Index,Level) \
+        (&((P_JBU((Pjp)->jp_Addr))->jbu_jp[JU_DIGITATSTATE(Index, Level)]))
+#define JU_JBU_PJP0(Pjp) \
+        (&((P_JBU((Pjp)->jp_Addr))->jbu_jp[0]))
+
+typedef struct J__UDY_BRANCH_UNCOMPRESSED
+        {
+            jp_t   jbu_jp     [cJU_BRANCHUNUMJPS];  // JPs for populated exp.
+#ifdef SUBEXPCOUNTS
+            Word_t jbu_subPop1[cJU_NUMSUBEXPU];
+#endif
+        } jbu_t, * Pjbu_t;
+
+
+// ****************************************************************************
+// OTHER SUPPORT FOR JUDY STATE MACHINES (SMs)
+// ****************************************************************************
+
+// OBJECT SIZES IN WORDS:
+//
+// Word_ts per various JudyL structures that have constant sizes.
+// cJU_WORDSPERJP should always be 2; this is fundamental to the Judy
+// structures.
+
+#define cJU_WORDSPERJP (sizeof(jp_t)   / cJU_BYTESPERWORD)
+#define cJU_WORDSPERCL (cJU_BYTESPERCL / cJU_BYTESPERWORD)
+
+
+// OPPORTUNISTIC UNCOMPRESSION:
+//
+// Define populations at which a BranchL or BranchB must convert to BranchU.
+// Earlier conversion is possible with good memory efficiency -- see below.
+
+#ifndef NO_BRANCHU
+
+// Max population below BranchL, then convert to BranchU:
+
+#define JU_BRANCHL_MAX_POP      1000
+
+// Minimum global population increment before next conversion of a BranchB to a
+// BranchU:
+//
+// This is was done to allow malloc() to coalesce memory before the next big
+// (~512 words) allocation.
+
+#define JU_BTOU_POP_INCREMENT    300
+
+// Min/max population below BranchB, then convert to BranchU:
+
+#define JU_BRANCHB_MIN_POP       135
+#define JU_BRANCHB_MAX_POP       750
+
+#else // NO_BRANCHU
+
+// These are set up to have conservative conversion schedules to BranchU:
+
+#define JU_BRANCHL_MAX_POP      (-1UL)
+#define JU_BTOU_POP_INCREMENT      300
+#define JU_BRANCHB_MIN_POP        1000
+#define JU_BRANCHB_MAX_POP      (-1UL)
+
+#endif // NO_BRANCHU
+
+
+// MISCELLANEOUS MACROS:
+
+// Get N most significant bits from the shifted Index word:
+//
+// As Index words are decoded, they are shifted left so only relevant,
+// undecoded Index bits remain.
+
+#define JU_BITSFROMSFTIDX(SFTIDX, N)  ((SFTIDX) >> (cJU_BITSPERWORD - (N)))
+
+// TBD:  I have my doubts about the necessity of these macros (dlb):
+
+// Produce 1-digit mask at specified state:
+
+#define cJU_MASKATSTATE(State)  ((Word_t)0xff << (((State) - 1) * cJU_BITSPERBYTE))
+
+// Get byte (digit) from Index at the specified state, right justified:
+//
+// Note:  State must be 1..cJU_ROOTSTATE, and Digits must be 1..(cJU_ROOTSTATE
+// - 1), but theres no way to assert these within an expression.
+
+#define JU_DIGITATSTATE(Index,cState) \
+         ((uint8_t)((Index) >> (((cState) - 1) * cJU_BITSPERBYTE)))
+
+// Similarly, place byte (digit) at correct position for the specified state:
+//
+// Note:  Cast digit to a Word_t first so there are no complaints or problems
+// about shifting it more than 32 bits on a 64-bit system, say, when it is a
+// uint8_t from jbl_Expanse[].  (Believe it or not, the C standard says to
+// promote an unsigned char to a signed int; -Ac does not do this, but -Ae
+// does.)
+//
+// Also, to make lint happy, cast the whole result again because apparently
+// shifting a Word_t does not result in a Word_t!
+
+#define JU_DIGITTOSTATE(Digit,cState) \
+        ((Word_t) (((Word_t) (Digit)) << (((cState) - 1) * cJU_BITSPERBYTE)))
+
+#endif // ! _JUDY_PRIVATE_BRANCH_INCLUDED
+
+
+#ifdef TEST_INSDEL
+
+// ****************************************************************************
+// TEST CODE FOR INSERT/DELETE MACROS
+// ****************************************************************************
+//
+// To use this, compile a temporary *.c file containing:
+//
+//      #define DEBUG
+//      #define JUDY_ASSERT
+//      #define TEST_INSDEL
+//      #include "JudyPrivate.h"
+//      #include "JudyPrivateBranch.h"
+//
+// Use a command like this:  cc -Ae +DD64 -I. -I JudyCommon -o t t.c
+// For best results, include +DD64 on a 64-bit system.
+//
+// This test code exercises some tricky macros, but the output must be studied
+// manually to verify it.  Assume that for even-index testing, whole words
+// (Word_t) suffices.
+
+#include <stdio.h>
+
+#define INDEXES 3               // in each array.
+
+
+// ****************************************************************************
+// I N I T
+//
+// Set up variables for next test.  See usage.
+
+FUNCTION void Init (
+        int       base,
+        PWord_t   PeIndex,
+        PWord_t   PoIndex,
+        PWord_t   Peleaf,       // always whole words.
+#ifndef JU_64BIT
+        uint8_t * Poleaf3)
+#else
+        uint8_t * Poleaf3,
+        uint8_t * Poleaf5,
+        uint8_t * Poleaf6,
+        uint8_t * Poleaf7)
+#endif
+{
+        int offset;
+
+        *PeIndex = 99;
+
+        for (offset = 0; offset <= INDEXES; ++offset)
+            Peleaf[offset] = base + offset;
+
+        for (offset = 0; offset < (INDEXES + 1) * 3; ++offset)
+            Poleaf3[offset] = base + offset;
+
+#ifndef JU_64BIT
+        *PoIndex = (91 << 24) | (92 << 16) | (93 << 8) | 94;
+#else
+
+        *PoIndex = (91L << 56) | (92L << 48) | (93L << 40) | (94L << 32)
+                 | (95L << 24) | (96L << 16) | (97L <<  8) |  98L;
+
+        for (offset = 0; offset < (INDEXES + 1) * 5; ++offset)
+            Poleaf5[offset] = base + offset;
+
+        for (offset = 0; offset < (INDEXES + 1) * 6; ++offset)
+            Poleaf6[offset] = base + offset;
+
+        for (offset = 0; offset < (INDEXES + 1) * 7; ++offset)
+            Poleaf7[offset] = base + offset;
+#endif
+
+} // Init()
+
+
+// ****************************************************************************
+// P R I N T   L E A F
+//
+// Print the byte values in a leaf.
+
+FUNCTION void PrintLeaf (
+        char *    Label,        // for output.
+        int       IOffset,      // insertion offset in array.
+        int       Indsize,      // index size in bytes.
+        uint8_t * PLeaf)        // array of Index bytes.
+{
+        int       offset;       // in PLeaf.
+        int       byte;         // in one word.
+
+        (void) printf("%s %u: ", Label, IOffset);
+
+        for (offset = 0; offset <= INDEXES; ++offset)
+        {
+            for (byte = 0; byte < Indsize; ++byte)
+                (void) printf("%2d", PLeaf[(offset * Indsize) + byte]);
+
+            (void) printf(" ");
+        }
+
+        (void) printf("\n");
+
+} // PrintLeaf()
+
+
+// ****************************************************************************
+// M A I N
+//
+// Test program.
+
+FUNCTION main()
+{
+        Word_t  eIndex;                         // even, to insert.
+        Word_t  oIndex;                         // odd,  to insert.
+        Word_t  eleaf [ INDEXES + 1];           // even leaf, index size 4.
+        uint8_t oleaf3[(INDEXES + 1) * 3];      // odd leaf,  index size 3.
+#ifdef JU_64BIT
+        uint8_t oleaf5[(INDEXES + 1) * 5];      // odd leaf,  index size 5.
+        uint8_t oleaf6[(INDEXES + 1) * 6];      // odd leaf,  index size 6.
+        uint8_t oleaf7[(INDEXES + 1) * 7];      // odd leaf,  index size 7.
+#endif
+        Word_t  eleaf_2 [ INDEXES + 1];         // same, but second arrays:
+        uint8_t oleaf3_2[(INDEXES + 1) * 3];
+#ifdef JU_64BIT
+        uint8_t oleaf5_2[(INDEXES + 1) * 5];
+        uint8_t oleaf6_2[(INDEXES + 1) * 6];
+        uint8_t oleaf7_2[(INDEXES + 1) * 7];
+#endif
+        int     ioffset;                // index insertion offset.
+
+#ifndef JU_64BIT
+#define INIT        Init( 0, & eIndex, & oIndex, eleaf,   oleaf3)
+#define INIT2 INIT; Init(50, & eIndex, & oIndex, eleaf_2, oleaf3_2)
+#else
+#define INIT        Init( 0, & eIndex, & oIndex, eleaf,   oleaf3, \
+                         oleaf5,   oleaf6,   oleaf7)
+#define INIT2 INIT; Init(50, & eIndex, & oIndex, eleaf_2, oleaf3_2, \
+                         oleaf5_2, oleaf6_2, oleaf7_2)
+#endif
+
+#define WSIZE sizeof (Word_t)           // shorthand.
+
+#ifdef PRINTALL                 // to turn on "noisy" printouts.
+#define PRINTLEAF(Label,IOffset,Indsize,PLeaf) \
+        PrintLeaf(Label,IOffset,Indsize,PLeaf)
+#else
+#define PRINTLEAF(Label,IOffset,Indsize,PLeaf)  \
+        if (ioffset == 0)                       \
+        PrintLeaf(Label,IOffset,Indsize,PLeaf)
+#endif
+
+        (void) printf(
+"In each case, tests operate on an initial array of %d indexes.  Even-index\n"
+"tests set index values to 0,1,2...; odd-index tests set byte values to\n"
+"0,1,2...  Inserted indexes have a value of 99 or else byte values 91,92,...\n",
+                        INDEXES);
+
+        (void) puts("\nJU_INSERTINPLACE():");
+
+        for (ioffset = 0; ioffset <= INDEXES; ++ioffset)
+        {
+            INIT;
+            PRINTLEAF("Before", ioffset, WSIZE, (uint8_t *) eleaf);
+            JU_INSERTINPLACE(eleaf, INDEXES, ioffset, eIndex);
+            PrintLeaf("After ", ioffset, WSIZE, (uint8_t *) eleaf);
+        }
+
+        (void) puts("\nJU_INSERTINPLACE3():");
+
+        for (ioffset = 0; ioffset <= INDEXES; ++ioffset)
+        {
+            INIT;
+            PRINTLEAF("Before", ioffset, 3, oleaf3);
+            JU_INSERTINPLACE3(oleaf3, INDEXES, ioffset, oIndex);
+            PrintLeaf("After ", ioffset, 3, oleaf3);
+        }
+
+#ifdef JU_64BIT
+        (void) puts("\nJU_INSERTINPLACE5():");
+
+        for (ioffset = 0; ioffset <= INDEXES; ++ioffset)
+        {
+            INIT;
+            PRINTLEAF("Before", ioffset, 5, oleaf5);
+            JU_INSERTINPLACE5(oleaf5, INDEXES, ioffset, oIndex);
+            PrintLeaf("After ", ioffset, 5, oleaf5);
+        }
+
+        (void) puts("\nJU_INSERTINPLACE6():");
+
+        for (ioffset = 0; ioffset <= INDEXES; ++ioffset)
+        {
+            INIT;
+            PRINTLEAF("Before", ioffset, 6, oleaf6);
+            JU_INSERTINPLACE6(oleaf6, INDEXES, ioffset, oIndex);
+            PrintLeaf("After ", ioffset, 6, oleaf6);
+        }
+
+        (void) puts("\nJU_INSERTINPLACE7():");
+
+        for (ioffset = 0; ioffset <= INDEXES; ++ioffset)
+        {
+            INIT;
+            PRINTLEAF("Before", ioffset, 7, oleaf7);
+            JU_INSERTINPLACE7(oleaf7, INDEXES, ioffset, oIndex);
+            PrintLeaf("After ", ioffset, 7, oleaf7);
+        }
+#endif // JU_64BIT
+
+        (void) puts("\nJU_DELETEINPLACE():");
+
+        for (ioffset = 0; ioffset < INDEXES; ++ioffset)
+        {
+            INIT;
+            PRINTLEAF("Before", ioffset, WSIZE, (uint8_t *) eleaf);
+            JU_DELETEINPLACE(eleaf, INDEXES, ioffset);
+            PrintLeaf("After ", ioffset, WSIZE, (uint8_t *) eleaf);
+        }
+
+        (void) puts("\nJU_DELETEINPLACE_ODD(3):");
+
+        for (ioffset = 0; ioffset < INDEXES; ++ioffset)
+        {
+            INIT;
+            PRINTLEAF("Before", ioffset, 3, oleaf3);
+            JU_DELETEINPLACE_ODD(oleaf3, INDEXES, ioffset, 3);
+            PrintLeaf("After ", ioffset, 3, oleaf3);
+        }
+
+#ifdef JU_64BIT
+        (void) puts("\nJU_DELETEINPLACE_ODD(5):");
+
+        for (ioffset = 0; ioffset < INDEXES; ++ioffset)
+        {
+            INIT;
+            PRINTLEAF("Before", ioffset, 5, oleaf5);
+            JU_DELETEINPLACE_ODD(oleaf5, INDEXES, ioffset, 5);
+            PrintLeaf("After ", ioffset, 5, oleaf5);
+        }
+
+        (void) puts("\nJU_DELETEINPLACE_ODD(6):");
+
+        for (ioffset = 0; ioffset < INDEXES; ++ioffset)
+        {
+            INIT;
+            PRINTLEAF("Before", ioffset, 6, oleaf6);
+            JU_DELETEINPLACE_ODD(oleaf6, INDEXES, ioffset, 6);
+            PrintLeaf("After ", ioffset, 6, oleaf6);
+        }
+
+        (void) puts("\nJU_DELETEINPLACE_ODD(7):");
+
+        for (ioffset = 0; ioffset < INDEXES; ++ioffset)
+        {
+            INIT;
+            PRINTLEAF("Before", ioffset, 7, oleaf7);
+            JU_DELETEINPLACE_ODD(oleaf7, INDEXES, ioffset, 7);
+            PrintLeaf("After ", ioffset, 7, oleaf7);
+        }
+#endif // JU_64BIT
+
+        (void) puts("\nJU_INSERTCOPY():");
+
+        for (ioffset = 0; ioffset <= INDEXES; ++ioffset)
+        {
+            INIT2;
+            PRINTLEAF("Before, src ", ioffset, WSIZE, (uint8_t *) eleaf);
+            PRINTLEAF("Before, dest", ioffset, WSIZE, (uint8_t *) eleaf_2);
+            JU_INSERTCOPY(eleaf_2, eleaf, INDEXES, ioffset, eIndex);
+            PRINTLEAF("After,  src ", ioffset, WSIZE, (uint8_t *) eleaf);
+            PrintLeaf("After,  dest", ioffset, WSIZE, (uint8_t *) eleaf_2);
+        }
+
+        (void) puts("\nJU_INSERTCOPY3():");
+
+        for (ioffset = 0; ioffset <= INDEXES; ++ioffset)
+        {
+            INIT2;
+            PRINTLEAF("Before, src ", ioffset, 3, oleaf3);
+            PRINTLEAF("Before, dest", ioffset, 3, oleaf3_2);
+            JU_INSERTCOPY3(oleaf3_2, oleaf3, INDEXES, ioffset, oIndex);
+            PRINTLEAF("After,  src ", ioffset, 3, oleaf3);
+            PrintLeaf("After,  dest", ioffset, 3, oleaf3_2);
+        }
+
+#ifdef JU_64BIT
+        (void) puts("\nJU_INSERTCOPY5():");
+
+        for (ioffset = 0; ioffset <= INDEXES; ++ioffset)
+        {
+            INIT2;
+            PRINTLEAF("Before, src ", ioffset, 5, oleaf5);
+            PRINTLEAF("Before, dest", ioffset, 5, oleaf5_2);
+            JU_INSERTCOPY5(oleaf5_2, oleaf5, INDEXES, ioffset, oIndex);
+            PRINTLEAF("After,  src ", ioffset, 5, oleaf5);
+            PrintLeaf("After,  dest", ioffset, 5, oleaf5_2);
+        }
+
+        (void) puts("\nJU_INSERTCOPY6():");
+
+        for (ioffset = 0; ioffset <= INDEXES; ++ioffset)
+        {
+            INIT2;
+            PRINTLEAF("Before, src ", ioffset, 6, oleaf6);
+            PRINTLEAF("Before, dest", ioffset, 6, oleaf6_2);
+            JU_INSERTCOPY6(oleaf6_2, oleaf6, INDEXES, ioffset, oIndex);
+            PRINTLEAF("After,  src ", ioffset, 6, oleaf6);
+            PrintLeaf("After,  dest", ioffset, 6, oleaf6_2);
+        }
+
+        (void) puts("\nJU_INSERTCOPY7():");
+
+        for (ioffset = 0; ioffset <= INDEXES; ++ioffset)
+        {
+            INIT2;
+            PRINTLEAF("Before, src ", ioffset, 7, oleaf7);
+            PRINTLEAF("Before, dest", ioffset, 7, oleaf7_2);
+            JU_INSERTCOPY7(oleaf7_2, oleaf7, INDEXES, ioffset, oIndex);
+            PRINTLEAF("After,  src ", ioffset, 7, oleaf7);
+            PrintLeaf("After,  dest", ioffset, 7, oleaf7_2);
+        }
+#endif // JU_64BIT
+
+        (void) puts("\nJU_DELETECOPY():");
+
+        for (ioffset = 0; ioffset < INDEXES; ++ioffset)
+        {
+            INIT2;
+            PRINTLEAF("Before, src ", ioffset, WSIZE, (uint8_t *) eleaf);
+            PRINTLEAF("Before, dest", ioffset, WSIZE, (uint8_t *) eleaf_2);
+            JU_DELETECOPY(eleaf_2, eleaf, INDEXES, ioffset, ignore);
+            PRINTLEAF("After,  src ", ioffset, WSIZE, (uint8_t *) eleaf);
+            PrintLeaf("After,  dest", ioffset, WSIZE, (uint8_t *) eleaf_2);
+        }
+
+        (void) puts("\nJU_DELETECOPY_ODD(3):");
+
+        for (ioffset = 0; ioffset < INDEXES; ++ioffset)
+        {
+            INIT2;
+            PRINTLEAF("Before, src ", ioffset, 3, oleaf3);
+            PRINTLEAF("Before, dest", ioffset, 3, oleaf3_2);
+            JU_DELETECOPY_ODD(oleaf3_2, oleaf3, INDEXES, ioffset, 3);
+            PRINTLEAF("After,  src ", ioffset, 3, oleaf3);
+            PrintLeaf("After,  dest", ioffset, 3, oleaf3_2);
+        }
+
+#ifdef JU_64BIT
+        (void) puts("\nJU_DELETECOPY_ODD(5):");
+
+        for (ioffset = 0; ioffset < INDEXES; ++ioffset)
+        {
+            INIT2;
+            PRINTLEAF("Before, src ", ioffset, 5, oleaf5);
+            PRINTLEAF("Before, dest", ioffset, 5, oleaf5_2);
+            JU_DELETECOPY_ODD(oleaf5_2, oleaf5, INDEXES, ioffset, 5);
+            PRINTLEAF("After,  src ", ioffset, 5, oleaf5);
+            PrintLeaf("After,  dest", ioffset, 5, oleaf5_2);
+        }
+
+        (void) puts("\nJU_DELETECOPY_ODD(6):");
+
+        for (ioffset = 0; ioffset < INDEXES; ++ioffset)
+        {
+            INIT2;
+            PRINTLEAF("Before, src ", ioffset, 6, oleaf6);
+            PRINTLEAF("Before, dest", ioffset, 6, oleaf6_2);
+            JU_DELETECOPY_ODD(oleaf6_2, oleaf6, INDEXES, ioffset, 6);
+            PRINTLEAF("After,  src ", ioffset, 6, oleaf6);
+            PrintLeaf("After,  dest", ioffset, 6, oleaf6_2);
+        }
+
+        (void) puts("\nJU_DELETECOPY_ODD(7):");
+
+        for (ioffset = 0; ioffset < INDEXES; ++ioffset)
+        {
+            INIT2;
+            PRINTLEAF("Before, src ", ioffset, 7, oleaf7);
+            PRINTLEAF("Before, dest", ioffset, 7, oleaf7_2);
+            JU_DELETECOPY_ODD(oleaf7_2, oleaf7, INDEXES, ioffset, 7);
+            PRINTLEAF("After,  src ", ioffset, 7, oleaf7);
+            PrintLeaf("After,  dest", ioffset, 7, oleaf7_2);
+        }
+#endif // JU_64BIT
+
+        return(0);
+
+} // main()
+
+#endif // TEST_INSDEL
diff --git a/libs/klib/judy/JudySL.c b/libs/klib/judy/JudySL.c
new file mode 100644
index 0000000..637782d
--- /dev/null
+++ b/libs/klib/judy/JudySL.c
@@ -0,0 +1,1125 @@
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+// JUDY FUNCTIONS FOR STRING INDEXES, where associated values are longs.  One
+// JudySL*() corresponds to each JudyL*() function (with exceptions).
+//
+// See the manual entry for details.
+//
+// METHOD:  Break up each null-terminated Index (string) into chunks of W
+// bytes, where W is the machines word size, with null-padding in the last
+// word if necessary.  Store strings as a tree of JudyL arrays, that is, array
+// of array of array...  where each level consumes W bytes (one word) as an
+// index to the JudyL array at that level.  Since strings can begin on
+// arbitrary byte boundaries, copy each chunk of W bytes from Index into a
+// word-aligned object before using it as a Judy index.
+//
+// The JudySL tree also supports "single-index shortcut leaves".  A simple
+// JudySL array (tree of JudyL arrays) would go as many levels deep as the
+// Index (string) is long, which wastes time and memory when an Index is unique
+// beyond a certain point.  When theres just one Index under a pointer, given
+// a reliable way to tell that the pointer is not a root pointer to another
+// JudyL array, it should save a lot of time to instead point to a "leaf"
+// object, similar to leaves in JudyL arrays.
+//
+// TBD:  Multi-index leaves, like those in JudyL, are also worth considering,
+// but their payback for JudySL is less certain.  Likewise, shortcut branches
+// are worth considering too.
+//
+// This code uses the Judy.h definitions and Doug Baskins convention of a "P"
+// prefix for pointers, except no "P" for the first level of char * (strings).
+
+// IMPORTS:
+
+#include <string.h>                     // for strcmp(), strlen(), strcpy()
+#include <Judy.h>
+
+#ifndef NDEDUG
+#define NDEBUG 1
+#endif
+#include <assert.h>
+
+//=======================================================================
+// Compile:
+//
+//    cc -O JudyHS.c -c
+//
+//    Notes:
+//    1) use -DJU_64BIT for 64 bit compiles (HP, Sun, IPF, Motorola/IBM? etc..)
+//    2) In gcc version 3.3.1 for a Centrino, -O2 is faster than -O
+//    3) In gcc version 3.3.2 for a Centrino, -O3 is faster than -O2
+//=======================================================================
+
+#define JU_SET_ERRNO(PJERROR, JERRNO)           \
+{                                               \
+    if (PJERROR != (PJError_t)NULL)             \
+    {                                           \
+        JU_ERRNO(PJERROR) = (JERRNO);           \
+        JU_ERRID(PJERROR) = __LINE__;           \
+    }                                           \
+}
+
+#define JU_SET_ERRNO_NONNULL(PJERROR, JERRNO)   \
+{                                               \
+    JU_ERRNO(PJERROR) = (JERRNO);               \
+    JU_ERRID(PJERROR) = __LINE__;               \
+}
+
+// SUPPORT FOR HANDLING WORDS:
+
+#define WORDSIZE     (sizeof (Word_t))  // bytes in word = JudyL index.
+#define WORDS(BYTES) (((BYTES) + WORDSIZE - 1) / WORDSIZE)      // round up.
+
+// To mark a pointer is to a "short cut leaf", set least bit
+
+#define IS_PSCL(PSCL)     (((Word_t) (PSCL)) & JLAP_INVALID)
+#define CLEAR_PSCL(PSCL)  ((Pscl_t)(((Word_t) (PSCL)) & (~JLAP_INVALID)))
+#define SET_PSCL(PSCL)    (((Word_t) (PSCL)) | JLAP_INVALID)
+
+// MISCELLANEOUS GLOBALS:
+
+// Get the Index (string) length in bytes, including the trailing \0, which
+// is an integral part of the string:
+
+// A string is "in the last word" if a previously-set byte count is at or below
+// the system word size, or in some cases if the last byte in the (null-padded)
+// word is null (assume big-endian, including in a register on a little-endian
+// machine):
+
+#define LASTWORD_BY_VALUE(WORD) (! ((WORD) & 0xffL))
+
+#ifdef JU_64BIT
+
+// copy from 1..7 bytes from string to Word_t and test if \0 bytes
+//
+#define        COPYSTRINGtoWORD(WORD,STR)               \
+{                                                       \
+    do                                                  \
+    {                                                   \
+        uint8_t chr;                                    \
+        WORD =      (Word_t)(STR)[0] << 56;             \
+        if (!(WORD)) break;                             \
+        if (!(chr  = (STR)[1])) break;                  \
+        WORD += ((Word_t)(chr) << 48);                  \
+        if (!(chr  = (STR)[2])) break;                  \
+        WORD += ((Word_t)(chr) << 40);                  \
+        if (!(chr  = (STR)[3])) break;                  \
+        WORD += ((Word_t)(chr) << 32);                  \
+        if (!(chr  = (STR)[4])) break;                  \
+        WORD += ((Word_t)(chr) << 24);                  \
+        if (!(chr  = (STR)[5])) break;                  \
+        WORD += ((Word_t)(chr) << 16);                  \
+        if (!(chr  = (STR)[6])) break;                  \
+        WORD += ((Word_t)(chr) << 8) + (STR)[7];        \
+    } while(0);                                         \
+}
+
+// copy Word_t from 1..8 bytes to string and test of \0 bytes
+//
+#define         COPYWORDtoSTRING(STR,WORD)                      \
+{                                                               \
+    do                                                          \
+    {                                                           \
+        if (!((STR)[0] = (uint8_t)((WORD) >> 56))) break;       \
+        if (!((STR)[1] = (uint8_t)((WORD) >> 48))) break;       \
+        if (!((STR)[2] = (uint8_t)((WORD) >> 40))) break;       \
+        if (!((STR)[3] = (uint8_t)((WORD) >> 32))) break;       \
+        if (!((STR)[4] = (uint8_t)((WORD) >> 24))) break;       \
+        if (!((STR)[5] = (uint8_t)((WORD) >> 16))) break;       \
+        if (!((STR)[6] = (uint8_t)((WORD) >>  8))) break;       \
+        (STR)[7]       = (uint8_t)(WORD);                       \
+    } while(0);                                                 \
+}
+
+#else  // JU_32BIT
+
+// copy from 1..4 bytes from string to Word_t and test if \0 bytes
+
+#define        COPYSTRINGtoWORD(WORD,STR)               \
+{                                                       \
+    do                                                  \
+    {                                                   \
+        uint8_t chr;                                    \
+        WORD =       (STR)[0] << 24;                    \
+        if (WORD == 0) break;                           \
+        if (!(chr  = (STR)[1])) break;                  \
+        WORD += (Word_t)(chr << 16);                    \
+        if (!(chr  = (STR)[2])) break;                  \
+        WORD += (Word_t)(chr << 8) + (STR)[3];          \
+    } while(0);                                         \
+}
+
+// copy Word_t from 1..4 bytes to string and test of \0 bytes
+
+#define        COPYWORDtoSTRING(STR,WORD)                       \
+{                                                               \
+    do                                                          \
+    {                                                           \
+        if (!((STR)[0] = (uint8_t)((WORD) >> 24))) break;       \
+        if (!((STR)[1] = (uint8_t)((WORD) >> 16))) break;       \
+        if (!((STR)[2] = (uint8_t)((WORD) >>  8))) break;       \
+        (STR)[3]       = (uint8_t)(WORD);                       \
+    } while(0);                                                 \
+}
+#endif // JU_32BIT
+
+
+// SUPPORT FOR SINGLE-INDEX SHORTCUT LEAVES:
+
+typedef struct SHORCUTLEAF
+{
+    Pvoid_t   scl_Pvalue;               // callers value area.
+    uint8_t   scl_Index[WORDSIZE];      // base Index string.
+} scl_t  , *Pscl_t;
+
+// overhead of the scl_Pvalue only, the scl_Index is calculate elsewhere
+
+#define STRUCTOVD       (sizeof(scl_t) - WORDSIZE)
+
+// How big to malloc a shortcut leaf; stringlen should already include the
+// trailing null char:
+
+#define SCLSIZE(LEN)  (((LEN) + STRUCTOVD + WORDSIZE - 1) / WORDSIZE)
+
+// string routines, may replace with your own
+//
+#define STRCMP(S1,S2)   strcmp((void *)(S1), (void *)(S2))
+#define STRCPY(S1,S2)   strcpy((void *)(S1), (void *)(S2))
+#define STRLEN(S1)      (strlen((void *)(S1)) + 1)
+
+
+// Index and value area for a shortcut leaf, depending on how it matches the
+// undecoded remainder of the Index, given a Pscl_t that includes type bits
+// that must be cleared:
+//
+// PSCLINDEX() and PSCLVALUE() are also useful when Pscl contains uncleared
+// TYPE bits.
+//
+// Note:  SCLCMP() cannot take advantage of knowing the Index length because
+// the scl_Index length is not pre-known when these macros are used.
+
+#define PSCLINDEX(PSCL)  ((CLEAR_PSCL(PSCL))->scl_Index)
+#define PSCLVALUE(PSCL)  ((CLEAR_PSCL(PSCL))->scl_Pvalue)
+
+#define SCLCMP(INDEX,PSCL) STRCMP(INDEX, PSCLINDEX(PSCL))
+
+#define PPSCLVALUE_EQ(INDEX,PSCL)                                       \
+    ((SCLCMP(INDEX, PSCL) == 0) ? &PSCLVALUE(PSCL) : (PPvoid_t)NULL)
+
+#define PPSCLVALUE_LT(INDEX,PSCL)                                       \
+    ((SCLCMP(INDEX, PSCL) < 0) ? &PSCLVALUE(PSCL) : (PPvoid_t)NULL)
+
+#define PPSCLVALUE_GT(INDEX,PSCL)                                       \
+    ((SCLCMP(INDEX, PSCL) > 0) ? &PSCLVALUE(PSCL) : (PPvoid_t)NULL)
+
+// Common in-lined code to append or free a shortcut leaf:
+//
+// See header comments about premature return().  Note that malloc() does not
+// pre-zero the memory, so ensure scl_Pvalue is zeroed, just like a value area
+// in a JudyL array.  Hope strcpy() is fast enough in this context.
+
+#define APPEND_SCL(PSCL,PPARRAY,INDEX,LEN,PJERROR)                      \
+{                                                                       \
+    if (((PSCL) = (Pscl_t) JudyMalloc(SCLSIZE(LEN))) == (Pscl_t)NULL)   \
+    {                                                                   \
+        JU_SET_ERRNO(PJERROR, JU_ERRNO_NOMEM);                          \
+        return (PPJERR);                                                \
+    }                                                                   \
+    *(PPARRAY) = (Pvoid_t)SET_PSCL(PSCL);                               \
+    ((PSCL)->scl_Pvalue) = (Pvoid_t)NULL;                               \
+    (void)STRCPY((PSCL)->scl_Index, INDEX);                             \
+}
+
+// "FORWARD" DECLARATIONS:
+
+static void JudySLModifyErrno(PJError_t PJError,
+                              Pcvoid_t PArray, Pcvoid_t PArrayOrig);
+static int JudySLDelSub(PPvoid_t PPArray, PPvoid_t PPArrayOrig,
+                        const uint8_t * Index, Word_t len, PJError_t PJError);
+static PPvoid_t JudySLPrevSub(Pcvoid_t PArray, uint8_t * Index, int orig,
+                              Word_t len, PJError_t PJError);
+static PPvoid_t JudySLNextSub(Pcvoid_t PArray, uint8_t * Index, int orig,
+                              Word_t len, PJError_t PJError);
+
+// ****************************************************************************
+// J U D Y   S L   M O D I F Y   E R R N O
+//
+// Common code for error translation:  When a caller passes an invalid JAP
+// ("not a JudyL pointer"), OR if the JudySL array is corrupted at a lower
+// level, various JudyL*() calls return JU_ERRNO_NOTJUDYL.  If the caller wants
+// detailed error info, convert this particular error to JU_ERRNO_NOTJUDYSL if
+// at the top of the tree, otherwise convert it to JU_ERRNO_CORRUPT, meaning
+// there was a corruption (the only one even detectable outside JudyL) in the
+// JudySL tree; but pass through any other errors unaltered.
+
+static void
+JudySLModifyErrno(PJError_t PJError,    // to modify if non-null.
+                  Pcvoid_t PArray,      // current JudyL array.
+                  Pcvoid_t PArrayOrig   // top-of-tree JudyL array.
+    )
+{                                       //  map this Judy errno.
+    if ((PJError != PJE0) && (JU_ERRNO(PJError) == JU_ERRNO_NOTJUDYL))
+    {
+        if (PArray == PArrayOrig)       // callers fault.
+        {
+            JU_SET_ERRNO_NONNULL(PJError, JU_ERRNO_NOTJUDYSL);
+        }
+        else                            // lower level.
+        {
+            JU_SET_ERRNO_NONNULL(PJError, JU_ERRNO_CORRUPT);
+        }
+    }
+}                                       // JudySLModifyErrno()
+
+// ****************************************************************************
+// J U D Y   S L   G E T
+//
+// See comments in file header and below.
+
+PPvoid_t
+JudySLGet(Pcvoid_t PArray, const uint8_t * Index, PJError_t PJError)
+{
+    const uint8_t *pos = Index;         // place in Index.
+    Word_t    indexword;                // buffer for aligned copy.
+    PPvoid_t  PPValue;                  // from JudyL array.
+
+// CHECK FOR CALLER ERROR (NULL POINTER):
+
+    if (Index == (uint8_t *) NULL)
+    {
+        JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+        return (PPJERR);
+    }
+
+// SEARCH NEXT LEVEL JUDYL ARRAY IN TREE:
+//
+// Use or copy each word from the Index string and check for it in the next
+// level JudyL array in the array tree, but first watch for shortcut leaves.
+// Upon invalid Index or end of Index (string) in current word, return.
+
+    do                                  // until return.
+    {
+        if (IS_PSCL(PArray))            // a shortcut leaf.
+            return (PPSCLVALUE_EQ(pos, PArray));
+
+        COPYSTRINGtoWORD(indexword, pos);       // copy next 4[8] bytes.
+
+        JLG(PPValue, PArray, indexword);
+
+        if ((PPValue == (PPvoid_t) NULL) || LASTWORD_BY_VALUE(indexword))
+            return (PPValue);
+
+// CONTINUE TO NEXT LEVEL DOWN JUDYL ARRAY TREE:
+//
+// If a previous JudySLIns() ran out of memory partway down the tree, it left a
+// null *PPValue; this is automatically treated here as a dead-end (not a core
+// dump or assertion; see version 1.25).
+
+        pos += WORDSIZE;
+        PArray = *PPValue;              // each value -> next array.
+    } while(1);                         // forever
+//  NOTREACHED JudySLGet()
+}
+
+// ****************************************************************************
+// J U D Y   S L   I N S
+//
+// See also the comments in JudySLGet(), which is somewhat similar, though
+// simpler.
+//
+// Theory of operation:
+//
+// Upon encountering a null pointer in the tree of JudyL arrays, insert a
+// shortcut leaf -- including directly under a null root pointer for the first
+// Index in the JudySL array.
+//
+// Upon encountering a pre-existing shortcut leaf, if the old Index is equal to
+// the new one, return the old value area.  Otherwise, "carry down" the old
+// Index until the old and new Indexes diverge, at which point each Index
+// either terminates in the last JudyL array or a new shortcut leaf is inserted
+// under it for the Indexs remainder.
+//
+// TBD:  Running out of memory below the starting point causes a premature
+// return below (in several places) and leaves a dead-end in the JudySL tree.
+// Ideally the code here would back this out rather than wasting a little
+// memory, but in lieu of that, the get, delete, and search functions
+// understand dead-ends and handle them appropriately.
+
+PPvoid_t
+JudySLIns(PPvoid_t PPArray, const uint8_t * Index, PJError_t PJError)
+{
+    PPvoid_t  PPArrayOrig = PPArray;    // for error reporting.
+    const uint8_t *pos = Index;         // place in Index.
+    const uint8_t *pos2 = (uint8_t *) NULL;     // old Index (SCL being moved).
+    Word_t    len;                      // bytes remaining.
+
+// Note:  len2 is set when needed and only used when valid, but this is not
+// clear to gcc -Wall, so initialize it here to avoid a warning:
+
+    Word_t    len2 = 0;                 // for old Index (SCL being moved).
+    Word_t    scl2 = 0;                 // size in words of SCL
+    Word_t    indexword;                // buffer for aligned copy.
+    Word_t    indexword2;               // for old Index (SCL being moved).
+    PPvoid_t  PPValue;                  // from JudyL array.
+    PPvoid_t  PPValue2;                 // for old Index (SCL being moved).
+    Pscl_t    Pscl = (Pscl_t) NULL;     // shortcut leaf.
+    Pscl_t    Pscl2;                    // for old Index (SCL being moved).
+
+// CHECK FOR CALLER ERROR (NULL POINTERS):
+
+    if (PPArray == (PPvoid_t) NULL)
+    {
+        JU_SET_ERRNO(PJError, JU_ERRNO_NULLPPARRAY);
+        return (PPJERR);
+    }
+    if (Index == (uint8_t *) NULL)
+    {
+        JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+        return (PPJERR);
+    }
+
+    len = STRLEN(Index);        // bytes remaining.
+
+// APPEND SHORTCUT LEAF:
+//
+// If PPArray, which is the root pointer to the first or next JudyL array in
+// the tree, points to null (no next JudyL array), AND there is no shortcut
+// leaf being carried down, append a shortcut leaf here for the new Index, no
+// matter how much of the Index string remains (one or more bytes, including
+// the trailing \0).
+
+    while (1)                           // until return.
+    {
+        if (*PPArray == (Pvoid_t)NULL)  // no next JudyL array.
+        {
+            if (Pscl == (Pscl_t) NULL)  // no SCL being carried down.
+            {
+                APPEND_SCL(Pscl, PPArray, pos, len, PJError);   // returns if error.
+                return (&(Pscl->scl_Pvalue));
+            }
+            // else do nothing here; see below.
+        }
+
+// CARRY DOWN PRE-EXISTING SHORTCUT LEAF:
+//
+// When PPArray points to a pre-existing shortcut leaf, if its Index is equal
+// to the Index to be inserted, meaning no insertion is required, return its
+// value area; otherwise, "move it aside" and "carry it down" -- replace it
+// (see below) with one or more levels of JudyL arrays.  Moving it aside
+// initially just means setting Pscl non-null, both as a flag and for later
+// use, and clearing the pointer to the SCL in the JudyL array.
+
+        else if (IS_PSCL(*PPArray))
+        {
+            assert(Pscl == (Pscl_t) NULL);      // no nested SCLs.
+
+            Pscl = CLEAR_PSCL(*PPArray);
+
+            pos2 = Pscl->scl_Index;     // note: pos2 is always word-aligned.
+            len2 = STRLEN(pos2);        // bytes remaining.
+
+//          first check if string is already inserted
+
+            if ((len == len2) && (STRCMP(pos, pos2) == 0))
+                return (&(Pscl->scl_Pvalue));
+
+            *PPArray = (Pvoid_t)NULL;   // disconnect SCL.
+
+            scl2 = SCLSIZE(len2);       // save for JudyFree
+
+            // continue with *PPArray now clear, and Pscl, pos2, len2 set.
+        }
+
+// CHECK IF OLD AND NEW INDEXES DIVERGE IN THE CURRENT INDEX WORD:
+//
+// If a shortcut leaf is being carried down and its remaining Index chars now
+// diverge from the remaining chars of the Index being inserted, that is, if
+// the next words of each Index differ, "plug in" the old Index here, in a new
+// JudyL array, before proceeding.
+//
+// Note:  Call JudyLIns() for the SCL Index word before calling it for the new
+// Index word, so PPValue remains correct for the latter.  (JudyLIns() return
+// values are not stable across multiple calls.)
+//
+// Note:  Although pos2 is word-aligned, and a Pscl_t is a whole number of
+// words in size, pos2 is not certain to be null-padded through a whole word,
+// so copy it first to an index word for later use.
+//
+// See header comments about premature return().
+
+        COPYSTRINGtoWORD(indexword, pos);       // copy next 4[8] bytes.
+
+        if (Pscl != (Pscl_t) NULL)
+        {
+            COPYSTRINGtoWORD(indexword2, pos2); // copy next 4[8] bytes.
+
+            if (indexword != indexword2)        // SCL and new Indexes diverge.
+            {
+                assert(*PPArray == (Pvoid_t)NULL);      // should be new JudyL array.
+
+// Note:  If JudyLIns() returns JU_ERRNO_NOTJUDYL here, *PPArray should not be
+// modified, so JudySLModifyErrno() can do the right thing.
+
+                if ((PPValue2 = JudyLIns(PPArray, indexword2, PJError))
+                    == PPJERR)
+                {
+                    JudySLModifyErrno(PJError, *PPArray, *PPArrayOrig);
+                    return (PPJERR);
+                }
+
+                assert(PPValue2 != (PPvoid_t) NULL);
+
+// If the old (SCL) Index terminates here, copy its value directly into the
+// JudyL value area; otherwise create a new shortcut leaf for it, under
+// *PPValue2 (skipping the word just inserted), and copy its value to the new
+// SCL:
+
+                if (len2 <= WORDSIZE)
+                {
+                    *((PWord_t)PPValue2) = (Word_t)(Pscl->scl_Pvalue);
+                }
+                else
+                {
+                    APPEND_SCL(Pscl2, PPValue2, pos2 + WORDSIZE,
+                               len2 - WORDSIZE, PJError);
+                    (Pscl2->scl_Pvalue) = Pscl->scl_Pvalue;
+                }
+//              old SCL no longer needed.
+
+                JudyFree((void *)Pscl, scl2);
+
+                Pscl = (Pscl_t) NULL;
+            }
+        }
+
+// APPEND NEXT LEVEL JUDYL ARRAY TO TREE:
+//
+// If a shortcut leaf was carried down and diverged at this level, the code
+// above already appended the new JudyL array, but the next word of the new
+// Index still must be inserted in it.
+//
+// See header comments about premature return().
+//
+// Note:  If JudyLIns() returns JU_ERRNO_NOTJUDYL here, *PPArray should not be
+// modified, so JudySLModifyErrno() can do the right thing.
+
+        if ((PPValue = JudyLIns(PPArray, indexword, PJError)) == PPJERR)
+        {
+            JudySLModifyErrno(PJError, *PPArray, *PPArrayOrig);
+            return (PPJERR);
+        }
+
+        assert(PPValue != (PPvoid_t) NULL);
+
+// CHECK IF NEW INDEX TERMINATES:
+//
+// Note that if it does, and an old SCL was being carried down, it must have
+// diverged by this point, and is already handled.
+
+        if (len <= WORDSIZE)
+        {
+            assert(Pscl == (Pscl_t) NULL);
+            return (PPValue);           // is value for whole Index string.
+        }
+
+        pos += WORDSIZE;
+        len -= WORDSIZE;
+        pos2 += WORDSIZE;               // useless unless Pscl is set.
+        len2 -= WORDSIZE;
+
+        PPArray = PPValue;              // each value -> next array.
+    }                                   // while.
+}                                       // NOTREACHED, JudySLIns()
+
+// ****************************************************************************
+// J U D Y   S L   D E L
+//
+// See the comments in JudySLGet(), which is somewhat similar.
+//
+// Unlike JudySLGet() and JudySLIns(), recurse downward through the tree of
+// JudyL arrays to find and delete the given Index, if present, and then on the
+// way back up, any of its parent arrays which ends up empty.
+//
+// TECHNICAL NOTES:
+//
+// Recursion seems bad, but this allows for an arbitrary-length Index.  Also, a
+// more clever iterative solution that used JudyLCount() (see below) would
+// still require a function call per tree level, so why not just recurse?
+//
+// An earlier version (1.20) used a fixed-size stack, which limited the Index
+// size.  We were going to replace this with using JudyLCount(), in order to
+// note and return to (read this carefully) the highest level JudyL array with
+// a count of 1, all of whose descendant JudyL arrays also have a count of 1,
+// and delete from that point downwards.  This solution would traverse the
+// array tree downward looking to see if the given Index is in the tree, then
+// if so, delete layers downwards starting below the last one that contains
+// other Indexes than the one being deleted.
+//
+// TBD:  To save time coding, and to very likely save time overall during
+// execution, this function does "lazy deletions", or putting it more nicely,
+// it allows "hysteresis" in the JudySL tree, when shortcut leafs are present.
+// It only removes the specified Index, and recursively any empty JudyL arrays
+// above it, without fully reversing the effects of JudySLIns().  This is
+// probably OK because any application that calls JudySLDel() is likely to call
+// JudySLIns() again with the same or a neighbor Index.
+
+int
+JudySLDel(PPvoid_t PPArray, const uint8_t * Index, PJError_t PJError)   // optional, for returning error info.
+{
+
+// Check for caller error (null pointer):
+
+    if (PPArray == (PPvoid_t) NULL)
+    {
+        JU_SET_ERRNO(PJError, JU_ERRNO_NULLPPARRAY);
+        return (JERR);
+    }
+    if (Index == (uint8_t *) NULL)
+    {
+        JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+        return (JERR);
+    }
+
+// Do the deletion:
+
+    return (JudySLDelSub(PPArray, PPArray, Index, STRLEN(Index), PJError));
+
+}                                       // JudySLDel()
+
+// ****************************************************************************
+// J U D Y   S L   D E L   S U B
+//
+// This is the "engine" for JudySLDel() that expects aligned and len to already
+// be computed (only once).  See the header comments for JudySLDel().
+
+static int
+JudySLDelSub(PPvoid_t PPArray,          // in which to delete.
+             PPvoid_t PPArrayOrig,      // for error reporting.
+             const uint8_t * Index,     // to delete.
+             Word_t len,                // bytes remaining.
+             PJError_t PJError)         // optional, for returning error info.
+{
+    Word_t    indexword;                // next word to find.
+    PPvoid_t  PPValue;                  // from JudyL array.
+    int       retcode;                  // from lower-level call.
+
+    assert(PPArray != (PPvoid_t) NULL);
+    assert(Index != (uint8_t *) NULL);
+
+// DELETE SHORTCUT LEAF:
+//
+// As described above, this can leave an empty JudyL array, or one containing
+// only a single other Index word -- which could be, but is not, condensed into
+// a higher-level shortcut leaf.  More precisely, at this level it leaves a
+// temporary "dead end" in the JudySL tree, similar to when running out of
+// memory during JudySLIns(), and this is somewhat cleaned up by higher
+// recursions of the same function (see below); but remaining shortcut leaves
+// for other Indexes are not coalesced.
+
+    if (IS_PSCL(*PPArray))
+    {
+        Pscl_t    Pscll = CLEAR_PSCL(*PPArray);
+        Word_t    words;
+
+        if (STRCMP(Index, Pscll->scl_Index))
+            return (0);                 // incorrect index.
+
+        words = SCLSIZE(STRLEN(Pscll->scl_Index));
+        JudyFree((void *)Pscll, words);
+
+        *PPArray = (Pvoid_t)NULL;
+        return (1);                     // correct index deleted.
+    }
+
+// DELETE LAST INDEX WORD, FROM CURRENT JUDYL ARRAY:
+//
+// When at the end of the full Index, delete the last word, if present, from
+// the current JudyL array, and return the result all the way up.
+
+    COPYSTRINGtoWORD(indexword, Index); // copy next 4[8] bytes.
+
+    if (len <= WORDSIZE)
+    {
+        if ((retcode = JudyLDel(PPArray, indexword, PJError)) == JERR)
+        {
+            JudySLModifyErrno(PJError, *PPArray, *PPArrayOrig);
+            return (JERR);
+        }
+        return (retcode);
+    }
+
+// DELETE BELOW NON-LAST INDEX WORD IN CURRENT JUDYL ARRAY:
+//
+// If a word before the end of the full Index is present in the current JudyL
+// array, recurse through its value, which must be a pointer to another JudyL
+// array, to continue the deletion at the next level.  Return the JudyLGet()
+// return if the Indexs current word is not in the JudyL array, or if no
+// delete occurs below this level, both of which mean the whole Index is not
+// currently valid.
+//
+
+    JLG(PPValue, *PPArray, indexword);
+    if (PPValue == (PPvoid_t) NULL)
+        return (0);                     // Index not in JudySL array.
+// If a previous JudySLIns() ran out of memory partway down the tree, it left a
+// null *PPValue; this is automatically treated as a dead-end (not a core dump
+// or assertion; see version 1.25).
+    if ((retcode =
+         JudySLDelSub(PPValue, PPArrayOrig, Index + WORDSIZE,
+                      len - WORDSIZE, PJError)) != 1)
+    {
+        return (retcode);               // no lower-level delete, or error.
+    }
+
+// DELETE EMPTY JUDYL ARRAY:
+//
+// A delete occurred below in the tree.  If the child JudyL array became empty,
+// delete the current Index word from the current JudyL array, which could
+// empty the current array and null out *PPArray in turn (or pass through an
+// error).  Otherwise simply indicate that a deletion did occur.
+
+    if (*PPValue == (Pvoid_t)NULL)
+    {
+        if ((retcode = JudyLDel(PPArray, indexword, PJError)) == JERR)
+        {
+            JudySLModifyErrno(PJError, *PPArray, *PPArrayOrig);
+            return (JERR);
+        }
+
+        return (retcode);
+    }
+
+    return (1);
+}                                       // JudySLDelSub()
+
+// ****************************************************************************
+// J U D Y   S L   P R E V
+//
+// Recursively traverse the JudySL tree downward using JudyLGet() to look for
+// each successive index word from Index in the JudyL array at each level.  At
+// the last level for the Index (LASTWORD_BY_LEN()), use JudyLPrev() instead of
+// JudyLGet(), to exclude the initial Index.  If this doesnt result in finding
+// a previous Index, work back up the tree using JudyLPrev() at each higher
+// level to search for a previous index word.  Upon finding a previous index
+// word, descend again if/as necessary, this time inclusively, to find and
+// return the full previous Index.
+//
+// Also support shortcut leaves.
+//
+// Since this function is recursive and it also needs to know if its still
+// looking for the original Index (to exclude it at the LASTWORD_BY_LEN()
+// level) or for the remaining words of the previous Index (inclusive),
+// actually call a subroutine that takes an additional parameter.
+//
+// See also the technical notes in JudySLDel() regarding the use of recursion
+// rather than iteration.
+
+PPvoid_t
+JudySLPrev(Pcvoid_t PArray, uint8_t * Index, PJError_t PJError) // optional, for returning error info.
+{
+// Check for caller error (null pointer), or empty JudySL array:
+
+    if (Index == (uint8_t *) NULL)
+    {
+        JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+        return (PPJERR);
+    }
+
+    if (PArray == (Pvoid_t)NULL)
+        return ((PPvoid_t) NULL);
+// Do the search:
+    return (JudySLPrevSub(PArray, Index, /* original = */ 1,
+                          STRLEN(Index), PJError));
+}                                       // JudySLPrev()
+
+// ****************************************************************************
+// J U D Y   S L   P R E V   S U B
+//
+// This is the "engine" for JudySLPrev() that knows whether its still looking
+// for the original Index (exclusive) or a neighbor index (inclusive), and that
+// expects aligned and len to already be computed (only once).  See the header
+// comments for JudySLPrev().
+
+static    PPvoid_t
+JudySLPrevSub(Pcvoid_t PArray, uint8_t * Index, int orig,
+              Word_t len,               // bytes remaining.
+              PJError_t PJError)        // optional, for returning error info.
+{
+    Word_t    indexword;                // next word to find.
+    PPvoid_t  PPValue;                  // from JudyL array.
+// ORIGINAL SEARCH:
+//
+// When at a shortcut leaf, copy its remaining Index (string) chars into Index
+// and return its value area if the current Index is after (greater than) the
+// SCLs index; otherwise return null.
+    if (orig)
+    {
+        if (IS_PSCL(PArray))
+        {
+            if ((PPValue = PPSCLVALUE_GT(Index, PArray)) != (PPvoid_t) NULL)
+                (void)STRCPY(Index, PSCLINDEX(PArray));
+            return (PPValue);
+        }
+
+// If the current Index word:
+// - is not the last word in Index (end of string),
+// - exists in the current JudyL array, and,
+// - a previous Index is found below it, return that Indexs value area.
+
+        COPYSTRINGtoWORD(indexword, Index);     // copy next 4[8] bytes.
+        if (len > WORDSIZE)             // not at end of Index.
+        {
+            JLG(PPValue, PArray, indexword);
+            if (PPValue != (PPvoid_t) NULL)
+            {
+
+// If a previous JudySLIns() ran out of memory partway down the tree, it left a
+// null *PPValue; this is automatically treated as a dead-end (not a core dump
+// or assertion; see version 1.25):
+
+                PPValue = JudySLPrevSub(*PPValue, Index + WORDSIZE,
+                                        /* original = */ 1,
+                                        len - WORDSIZE, PJError);
+                if (PPValue == PPJERR)
+                    return (PPJERR);    // propagate error.
+                if (PPValue != (PPvoid_t) NULL)
+                    return (PPValue);   // see above.
+            }
+        }
+
+// Search for previous index word:
+//
+// One of the above conditions is false.  Search the current JudyL array for
+// the Index word, if any, prior to the current index word.  If none is found,
+// return null; otherwise fall through to common later code.
+
+        if ((PPValue = JudyLPrev(PArray, &indexword, PJError)) == PPJERR)
+        {
+            JudySLModifyErrno(PJError, PArray, orig ? PArray : (Pvoid_t)NULL);
+            return (PPJERR);
+        }
+
+        if (PPValue == (PPvoid_t) NULL)
+            return ((PPvoid_t) NULL);   // no previous index word.
+    }                                   // if.
+
+// SUBSEQUENT SEARCH:
+//
+// A higher level search already excluded the initial Index, then found a
+// previous index word, and is now traversing down to determine the rest of the
+// Index and to obtain its value area.  If at a shortcut leaf, return its value
+// area.  Otherwise search the current JudyL array backward from the upper
+// limit for its last index word.  If no index word is found, return null --
+// should never happen unless the JudySL tree is corrupt; otherwise fall
+// through to common later code.
+
+    else
+    {
+        if (IS_PSCL(PArray))            // at shortcut leaf.
+        {
+            (void)STRCPY(Index, PSCLINDEX(PArray));
+            return (&PSCLVALUE(PArray));
+        }
+
+        indexword = ~0UL;
+        if ((PPValue = JudyLLast(PArray, &indexword, PJError)) == PPJERR)
+        {
+            JudySLModifyErrno(PJError, PArray, orig ? PArray : (Pvoid_t)NULL);
+            return (PPJERR);
+        }
+
+// If a previous JudySLIns() ran out of memory partway down the tree, it left a
+// null *PPValue; this is automatically treated as a dead-end (not a core dump
+// or assertion; see version 1.25):
+
+        if (PPValue == (PPvoid_t) NULL)
+            return ((PPvoid_t) NULL);   // no previous index word.
+    }
+
+// FOUND PREVIOUS INDEX WORD:
+//
+// A previous (if original) or last (if subsequent) index word was located in
+// the current JudyL array.  Store it into the callers Index (string).  Then
+// if the found (previous) Index ends here, return its value area; otherwise do
+// a subsequent search below this point, which should never fail unless the
+// JudySL tree is corrupt, but this is detected at a lower level by the above
+// assertion.
+//
+// Note:  Treat Index as unaligned, even if it is aligned, to avoid writing
+// past the end of allocated memory (in case its less than a whole number of
+// words).
+
+    COPYWORDtoSTRING(Index, indexword); // copy next 4[8] bytes.
+    if (LASTWORD_BY_VALUE(indexword))
+        return (PPValue);
+// If a previous JudySLIns() ran out of memory partway down the tree, it left a
+// null *PPValue; this is automatically treated as a dead-end (not a core dump
+// or assertion; see version 1.25):
+    return (JudySLPrevSub(*PPValue, Index + WORDSIZE, /* original = */ 0,
+                          len - WORDSIZE, PJError));
+}                                       // JudySLPrevSub()
+
+// ****************************************************************************
+// J U D Y   S L   N E X T
+//
+// See the comments in JudySLPrev(), which is very similar.
+//
+// TBD:  Could the two functions call a common engine function with various
+// subfunctions and other constants specified?
+
+PPvoid_t
+JudySLNext(Pcvoid_t PArray, uint8_t * Index, PJError_t PJError) // optional, for returning error info.
+{
+// Check for caller error (null pointer), or empty JudySL array:
+
+    if (Index == (uint8_t *) NULL)
+    {
+        JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+        return (PPJERR);
+    }
+
+    if (PArray == (Pvoid_t)NULL)
+        return ((PPvoid_t) NULL);
+// Do the search:
+    return (JudySLNextSub(PArray, Index, /* original = */ 1,
+                          STRLEN(Index), PJError));
+}                                       // JudySLNext()
+
+// ****************************************************************************
+// J U D Y   S L   N E X T   S U B
+//
+// See the comments in JudySLPrevSub(), which is very similar.
+
+static    PPvoid_t
+JudySLNextSub(Pcvoid_t PArray, uint8_t * Index, int orig,
+              Word_t len,               // bytes remaining.
+              PJError_t PJError)        // optional, for returning error info.
+{
+    Word_t    indexword;                // next word to find.
+    PPvoid_t  PPValue;                  // from JudyL array.
+    if (orig)
+    {
+        if (IS_PSCL(PArray))
+        {
+            if ((PPValue = PPSCLVALUE_LT(Index, PArray)) != (PPvoid_t) NULL)
+                (void)STRCPY(Index, PSCLINDEX(PArray));
+            return (PPValue);
+        }
+
+        COPYSTRINGtoWORD(indexword, Index);     // copy next 4[8] bytes.
+
+        if (len > WORDSIZE)             // not at end of Index.
+        {
+            JLG(PPValue, PArray, indexword);
+            if (PPValue != (PPvoid_t) NULL)
+            {
+// If a previous JudySLIns() ran out of memory partway down the tree, it left a
+// null *PPValue; this is automatically treated as a dead-end (not a core dump
+// or assertion; see version 1.25):
+
+                PPValue = JudySLNextSub(*PPValue, Index + WORDSIZE,
+                                        /* original = */ 1,
+                                        len - WORDSIZE, PJError);
+                if (PPValue == PPJERR)
+                    return (PPJERR);    // propagate error.
+                if (PPValue != (PPvoid_t) NULL)
+                    return (PPValue);   // see above.
+            }
+        }
+
+        if ((PPValue = JudyLNext(PArray, &indexword, PJError)) == PPJERR)
+        {
+            JudySLModifyErrno(PJError, PArray, orig ? PArray : (Pvoid_t)NULL);
+            return (PPJERR);
+        }
+
+        if (PPValue == (PPvoid_t) NULL)
+            return ((PPvoid_t) NULL);   // no next index word.
+    }
+    else
+    {
+        if (IS_PSCL(PArray))            // at shortcut leaf.
+        {
+            (void)STRCPY(Index, PSCLINDEX(PArray));
+            return (&PSCLVALUE(PArray));
+        }
+
+        indexword = 0;
+        if ((PPValue = JudyLFirst(PArray, &indexword, PJError)) == PPJERR)
+        {
+            JudySLModifyErrno(PJError, PArray, orig ? PArray : (Pvoid_t)NULL);
+            return (PPJERR);
+        }
+
+// If a previous JudySLIns() ran out of memory partway down the tree, it left a
+// null *PPValue; this is automatically treated as a dead-end (not a core dump
+// or assertion; see version 1.25):
+
+        if (PPValue == (PPvoid_t) NULL)
+            return ((PPvoid_t) NULL);   // no next index word.
+    }
+
+    COPYWORDtoSTRING(Index, indexword); // copy next 4[8] bytes
+    if (LASTWORD_BY_VALUE(indexword))
+        return (PPValue);
+// If a previous JudySLIns() ran out of memory partway down the tree, it left a
+// null *PPValue; this is automatically treated as a dead-end (not a core dump
+// or assertion; see version 1.25):
+    return (JudySLNextSub(*PPValue, Index + WORDSIZE, /* original = */ 0,
+                          len - WORDSIZE, PJError));
+}                                       // JudySLNextSub()
+
+// ****************************************************************************
+// J U D Y   S L   F I R S T
+//
+// Like JudyLFirst(), do a JudySLGet(), then if necessary a JudySLNext().
+
+PPvoid_t
+JudySLFirst(Pcvoid_t PArray, uint8_t * Index, PJError_t PJError)        // optional, for returning error info.
+{
+    PPvoid_t  PPValue;                  // from JudyL array.
+    if (Index == (uint8_t *) NULL)
+    {
+        JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+        return (PPJERR);
+    }
+
+    if ((PPValue = JudySLGet(PArray, Index, PJError)) == PPJERR)
+        return (PPJERR);                // propagate serious error.
+    if ((PPValue == (PPvoid_t) NULL)    // first try failed.
+        && ((PPValue = JudySLNext(PArray, Index, PJError)) == PPJERR))
+    {
+        return (PPJERR);                // propagate serious error.
+    }
+
+    return (PPValue);
+}                                       // JudySLFirst()
+
+// ****************************************************************************
+// J U D Y   S L   L A S T
+//
+// Like JudyLLast(), do a JudySLGet(), then if necessary a JudySLPrev().
+
+PPvoid_t
+JudySLLast(Pcvoid_t PArray, uint8_t * Index, PJError_t PJError) // optional, for returning error info.
+{
+    PPvoid_t  PPValue;                  // from JudyL array.
+    if (Index == (uint8_t *) NULL)
+    {
+        JU_SET_ERRNO(PJError, JU_ERRNO_NULLPINDEX);
+        return (PPJERR);
+    }
+
+    if ((PPValue = JudySLGet(PArray, Index, PJError)) == PPJERR)
+        return (PPJERR);                // propagate serious error.
+    if ((PPValue == (PPvoid_t) NULL)    // first try failed.
+        && ((PPValue = JudySLPrev(PArray, Index, PJError)) == PPJERR))
+    {
+        return (PPJERR);                // propagate serious error.
+    }
+
+    return (PPValue);
+}                                       // JudySLLast()
+
+// ****************************************************************************
+// J U D Y   S L   F R E E   A R R A Y
+//
+// Walk the JudySL tree of JudyL arrays to free each JudyL array, depth-first.
+// During the walk, ignore indexes (strings) that end in the current JudyL
+// array to be freed.  Just recurse through those indexes which do not end,
+// that is, those whose associated value areas point to subsidiary JudyL
+// arrays, except for those which point to shortcut leaves.  Return the total
+// bytes freed in all of the JudyL arrays at or below the current level.
+//
+// Like the JudyLFreeArray() and Judy1FreeArray() code, this is written
+// recursively, which is probably fast enough, to allow indexes (strings) of
+// arbitrary size.  If recursion turns out to be a problem, consider instead
+// doing some large, fixed number of iterative descents (like 100) using a
+// fixed-size "stack" (array), then recursing upon overflow (relatively
+// rarely).
+
+Word_t
+JudySLFreeArray(PPvoid_t PPArray, PJError_t PJError)    // optional, for returning error info.
+{
+    PPvoid_t  PPArrayOrig = PPArray;    // for error reporting.
+    Word_t    indexword = 0;            // word just found.
+    PPvoid_t  PPValue;                  // from Judy array.
+    Word_t    bytes_freed = 0;          // bytes freed at this level.
+    Word_t    bytes_total = 0;          // bytes freed at all levels.
+    if (PPArray == (PPvoid_t) NULL)
+    {
+        JU_SET_ERRNO(PJError, JU_ERRNO_NULLPPARRAY);
+        return (JERR);
+    }
+
+// FREE SHORTCUT LEAF:
+
+    if (IS_PSCL(*PPArray))
+    {
+        Word_t    freewords;
+        Pscl_t    Pscl;
+
+        Pscl = CLEAR_PSCL(*PPArray);
+
+        freewords = SCLSIZE(STRLEN(Pscl->scl_Index));
+
+        JudyFree((void *)Pscl, freewords);
+
+        *PPArray = (Pvoid_t)NULL;
+
+        return (freewords * WORDSIZE);
+    }
+
+// FREE EACH SUB-ARRAY (DEPTH-FIRST):
+//
+// If a previous JudySLIns() ran out of memory partway down the tree, it left a
+// null *PPValue.  This is automatically treated correctly here as a dead-end.
+//
+// An Index (string) ends in the current word iff the last byte of the
+// (null-padded) word is null.
+
+    for (PPValue = JudyLFirst(*PPArray, &indexword, PJError);
+         (PPValue != (PPvoid_t) NULL) && (PPValue != PPJERR);
+         PPValue = JudyLNext(*PPArray, &indexword, PJError))
+    {
+        if (!LASTWORD_BY_VALUE(indexword))
+        {
+            if ((bytes_freed = JudySLFreeArray(PPValue, PJError)) == JERR)
+                return (JERR);          // propagate serious error.
+            bytes_total += bytes_freed;
+        }
+    }
+
+// Check for a serious error in a JudyL*() call:
+
+    if (PPValue == PPJERR)
+    {
+        JudySLModifyErrno(PJError, *PPArray, *PPArrayOrig);
+        return (JERR);
+    }
+
+// Now free the current array, which also nulls the pointer:
+//
+// Note:  *PPArray can be null here for a totally null JudySL array =>
+// JudyLFreeArray() returns zero.
+
+    if ((bytes_freed = JudyLFreeArray(PPArray, PJError)) == JERR)
+    {
+        JudySLModifyErrno(PJError, *PPArray, *PPArrayOrig);
+        return (JERR);
+    }
+    return (bytes_total + bytes_freed);
+}                                       // JudySLFreeArray()
diff --git a/libs/klib/judy/JudyTablesGen.c b/libs/klib/judy/JudyTablesGen.c
new file mode 100644
index 0000000..a5fcb85
--- /dev/null
+++ b/libs/klib/judy/JudyTablesGen.c
@@ -0,0 +1,294 @@
+// Copyright (C) 2000 - 2002 Hewlett-Packard Company
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the term of the GNU Lesser General Public License as published by the
+// Free Software Foundation; either version 2 of the License, or (at your
+// option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+// for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program; if not, write to the Free Software Foundation,
+// Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// _________________
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#if (! (defined(JUDY1) || defined(JUDYL)))
+#error:  One of -DJUDY1 or -DJUDYL must be specified.
+#endif
+
+#define	TERMINATOR 999		// terminator for Alloc tables
+
+#define BPW sizeof(Word_t)	// define bytes per word
+
+#ifdef JUDY1
+#include "Judy1.h"
+#else
+#include "JudyL.h"
+#endif
+    
+FILE *fd;
+
+// Definitions come from header files Judy1.h and JudyL.h:
+
+int AllocSizes[] = ALLOCSIZES;
+
+#define	ROUNDUP(BYTES,BPW,OFFSETW) \
+	((((BYTES) + (BPW) - 1) / (BPW)) + (OFFSETW))
+
+
+// ****************************************************************************
+// G E N   T A B L E
+//
+// Note:  "const" is required for newer compilers.
+
+FUNCTION void GenTable(
+    const char * TableName,	// name of table string
+    const char * TableSize,	// dimentioned size string
+    int		 IndexBytes,	// bytes per Index
+    int		 LeafSize,	// number elements in object
+    int		 ValueBytes,	// bytes per Value
+    int		 OffsetWords)	// 1 for LEAFW
+{
+    int *	 PAllocSizes = AllocSizes;
+    int		 OWord;
+    int		 CurWord;
+    int		 IWord;
+    int		 ii;
+    int		 BytesOfIndex;
+    int		 BytesOfObject;
+    int		 Index;
+    int		 LastWords;
+    int		 Words [1000] = { 0 };
+    int		 Offset[1000] = { 0 };
+    int		 MaxWords;
+
+    MaxWords  =	ROUNDUP((IndexBytes + ValueBytes) * LeafSize, BPW, OffsetWords);
+    Words[0]  = 0;
+    Offset[0] = 0;
+    CurWord   = TERMINATOR;
+
+// Walk through all number of Indexes in table:
+
+    for (Index = 1; /* null */; ++Index)
+    {
+
+// Calculate byte required for next size:
+
+	BytesOfIndex  = IndexBytes * Index;
+	BytesOfObject = (IndexBytes + ValueBytes) * Index;
+
+// Round up and calculate words required for next size:
+
+        OWord =	ROUNDUP(BytesOfObject, BPW, OffsetWords);
+        IWord =	ROUNDUP(BytesOfIndex,  BPW, OffsetWords);
+
+// Root-level leaves of population of 1 and 2 do not have the 1 word offset:
+
+// Save minimum value of offset:
+
+        Offset[Index] = IWord;
+
+// Round up to next available size of words:
+
+	while (OWord > *PAllocSizes) PAllocSizes++;
+
+        if (Index == LeafSize)
+        {
+	    CurWord = Words[Index] = OWord;
+            break;
+        }
+//      end of available sizes ?
+
+	if (*PAllocSizes == TERMINATOR)
+        {
+            fprintf(stderr, "BUG, in %sPopToWords, sizes not big enough for object\n", TableName);
+	    exit(1);
+        }
+
+// Save words required and last word:
+
+        if (*PAllocSizes < MaxWords) { CurWord = Words[Index] = *PAllocSizes; }
+        else                         { CurWord = Words[Index] = MaxWords; }
+
+    } // for each index
+
+    LastWords = TERMINATOR;
+
+// Round up to largest size in each group of malloc sizes:
+
+    for (ii = LeafSize; ii > 0; ii--)
+    {
+        if (LastWords > (Words[ii] - ii)) LastWords = Offset[ii];
+        else                              Offset[ii] = LastWords;
+    }
+
+// Print the PopToWords[] table:
+
+    fprintf(fd,"\n//\tobject uses %d words\n", CurWord);
+    fprintf(fd,"//\t%s = %d\n", TableSize, LeafSize);
+
+    fprintf(fd,"const uint8_t\n");
+    fprintf(fd,"%sPopToWords[%s + 1] =\n", TableName, TableSize);
+    fprintf(fd,"{\n\t 0,");
+
+    for (ii = 1; ii <= LeafSize; ii++)
+    {
+
+// 8 columns per line, starting with 1:
+
+	if ((ii % 8) == 1) fprintf(fd,"\n\t");
+
+	fprintf(fd,"%2d", Words[ii]);
+
+// If not last number place comma:
+
+	if (ii != LeafSize) fprintf(fd,", ");
+    }
+    fprintf(fd,"\n};\n");
+
+// Print the Offset table if needed:
+
+    if (! ValueBytes) return;
+
+    fprintf(fd,"const uint8_t\n");
+    fprintf(fd,"%sOffset[%s + 1] =\n", TableName, TableSize);
+    fprintf(fd,"{\n");
+    fprintf(fd,"\t 0,");
+
+    for (ii = 1; ii <= LeafSize; ii++)
+    {
+        if ((ii % 8) == 1) fprintf(fd,"\n\t");
+
+	fprintf(fd,"%2d", Offset[ii]);
+
+	if (ii != LeafSize) fprintf(fd,", ");
+    }
+    fprintf(fd,"\n};\n");
+
+} // GenTable()
+
+
+// ****************************************************************************
+// M A I N
+
+#ifdef JU_WMAIN
+FUNCTION int wmain()
+#else
+FUNCTION int main()
+#endif
+{
+    int ii;
+
+#ifdef JUDY1
+    char *fname = "Judy1Tables.c";
+#else
+    char *fname = "JudyLTables.c";
+#endif
+
+    if ((fd = fopen(fname, "w")) == NULL){
+	perror("FATAL ERROR: could not write to Judy[1L]Tables.c file\n");
+	return (-1);
+    }
+
+
+    fprintf(fd,"// @(#) From generation tool: JudyTablesGen.c\n");
+    fprintf(fd,"//\n\n");
+
+
+// ================================ Judy1 =================================
+#ifdef JUDY1
+
+    fprintf(fd,"#include \"Judy1.h\"\n");
+
+    fprintf(fd,"// Leave the malloc() sizes readable in the binary (via "
+	   "strings(1)):\n");
+    fprintf(fd,"const char * Judy1MallocSizes = \"Judy1MallocSizes =");
+
+    for (ii = 0; AllocSizes[ii] != TERMINATOR; ii++)
+	fprintf(fd," %d,", AllocSizes[ii]);
+
+#ifndef JU_64BIT
+    fprintf(fd," Leaf1 = %d\";\n\n", cJ1_LEAF1_MAXPOP1);
+#else
+    fprintf(fd,"\";\n\n");			// no Leaf1 in this case.
+#endif
+
+// ================================ 32 bit ================================
+#ifndef JU_64BIT
+
+    GenTable("j__1_BranchBJP","cJU_BITSPERSUBEXPB", 8, cJU_BITSPERSUBEXPB,0,0);
+
+    GenTable("j__1_Leaf1", "cJ1_LEAF1_MAXPOP1", 1, cJ1_LEAF1_MAXPOP1, 0, 0);
+    GenTable("j__1_Leaf2", "cJ1_LEAF2_MAXPOP1", 2, cJ1_LEAF2_MAXPOP1, 0, 0);
+    GenTable("j__1_Leaf3", "cJ1_LEAF3_MAXPOP1", 3, cJ1_LEAF3_MAXPOP1, 0, 0);
+    GenTable("j__1_LeafW", "cJ1_LEAFW_MAXPOP1", 4, cJ1_LEAFW_MAXPOP1, 0, 1);
+
+#endif
+
+// ================================ 64 bit ================================
+#ifdef JU_64BIT
+    GenTable("j__1_BranchBJP","cJU_BITSPERSUBEXPB",16, cJU_BITSPERSUBEXPB,0,0);
+
+    GenTable("j__1_Leaf2", "cJ1_LEAF2_MAXPOP1", 2, cJ1_LEAF2_MAXPOP1, 0, 0);
+    GenTable("j__1_Leaf3", "cJ1_LEAF3_MAXPOP1", 3, cJ1_LEAF3_MAXPOP1, 0, 0);
+    GenTable("j__1_Leaf4", "cJ1_LEAF4_MAXPOP1", 4, cJ1_LEAF4_MAXPOP1, 0, 0);
+    GenTable("j__1_Leaf5", "cJ1_LEAF5_MAXPOP1", 5, cJ1_LEAF5_MAXPOP1, 0, 0);
+    GenTable("j__1_Leaf6", "cJ1_LEAF6_MAXPOP1", 6, cJ1_LEAF6_MAXPOP1, 0, 0);
+    GenTable("j__1_Leaf7", "cJ1_LEAF7_MAXPOP1", 7, cJ1_LEAF7_MAXPOP1, 0, 0);
+    GenTable("j__1_LeafW", "cJ1_LEAFW_MAXPOP1", 8, cJ1_LEAFW_MAXPOP1, 0, 1);
+#endif
+#endif // JUDY1
+
+
+// ================================ JudyL =================================
+#ifdef JUDYL
+
+    fprintf(fd,"#include \"JudyL.h\"\n");
+
+    fprintf(fd,"// Leave the malloc() sizes readable in the binary (via "
+	   "strings(1)):\n");
+    fprintf(fd,"const char * JudyLMallocSizes = \"JudyLMallocSizes =");
+
+    for (ii = 0; AllocSizes[ii] != TERMINATOR; ii++)
+	fprintf(fd," %d,", AllocSizes[ii]);
+
+    fprintf(fd," Leaf1 = %ld\";\n\n", (Word_t)cJL_LEAF1_MAXPOP1);
+
+#ifndef JU_64BIT
+// ================================ 32 bit ================================
+    GenTable("j__L_BranchBJP","cJU_BITSPERSUBEXPB", 8, cJU_BITSPERSUBEXPB, 0,0);
+
+    GenTable("j__L_Leaf1", "cJL_LEAF1_MAXPOP1",  1, cJL_LEAF1_MAXPOP1, BPW,0);
+    GenTable("j__L_Leaf2", "cJL_LEAF2_MAXPOP1",  2, cJL_LEAF2_MAXPOP1, BPW,0);
+    GenTable("j__L_Leaf3", "cJL_LEAF3_MAXPOP1",  3, cJL_LEAF3_MAXPOP1, BPW,0);
+    GenTable("j__L_LeafW", "cJL_LEAFW_MAXPOP1",  4, cJL_LEAFW_MAXPOP1, BPW,1);
+    GenTable("j__L_LeafV", "cJU_BITSPERSUBEXPL", 4, cJU_BITSPERSUBEXPL,  0,0);
+#endif // 32 BIT
+
+#ifdef JU_64BIT
+// ================================ 64 bit ================================
+    GenTable("j__L_BranchBJP","cJU_BITSPERSUBEXPB",16, cJU_BITSPERSUBEXPB, 0,0);
+
+    GenTable("j__L_Leaf1", "cJL_LEAF1_MAXPOP1",  1, cJL_LEAF1_MAXPOP1,  BPW,0);
+    GenTable("j__L_Leaf2", "cJL_LEAF2_MAXPOP1",  2, cJL_LEAF2_MAXPOP1,  BPW,0);
+    GenTable("j__L_Leaf3", "cJL_LEAF3_MAXPOP1",  3, cJL_LEAF3_MAXPOP1,  BPW,0);
+    GenTable("j__L_Leaf4", "cJL_LEAF4_MAXPOP1",  4, cJL_LEAF4_MAXPOP1,  BPW,0);
+    GenTable("j__L_Leaf5", "cJL_LEAF5_MAXPOP1",  5, cJL_LEAF5_MAXPOP1,  BPW,0);
+    GenTable("j__L_Leaf6", "cJL_LEAF6_MAXPOP1",  6, cJL_LEAF6_MAXPOP1,  BPW,0);
+    GenTable("j__L_Leaf7", "cJL_LEAF7_MAXPOP1",  7, cJL_LEAF7_MAXPOP1,  BPW,0);
+    GenTable("j__L_LeafW", "cJL_LEAFW_MAXPOP1",  8, cJL_LEAFW_MAXPOP1,  BPW,1);
+    GenTable("j__L_LeafV", "cJU_BITSPERSUBEXPL", 8, cJU_BITSPERSUBEXPL, 0,0);
+#endif // 64 BIT
+
+#endif // JUDYL
+    fclose(fd);
+
+    return(0);
+
+} // main()
diff --git a/libs/klib/judy/Makefile b/libs/klib/judy/Makefile
new file mode 100644
index 0000000..2d4d13a
--- /dev/null
+++ b/libs/klib/judy/Makefile
@@ -0,0 +1,207 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: all
+
+TOP ?= $(shell ../../../build/abspath.sh ../../..)
+MODULE = libs/klib/judy
+
+INT_LIBS = \
+	libjudy
+
+EXT_LIBS = \
+
+ALL_LIBS = \
+	$(INT_LIBS) \
+	$(EXT_LIBS)
+
+include $(TOP)/build/Makefile.env
+
+
+#-------------------------------------------------------------------------------
+# special rules
+#  for some reason these guys use the same source and load it up with
+#  ifdefs, so we have general rules to produce two sets of object files
+#  from a single set of sources
+#
+%.n.32.$(OBJX): %.c
+	$(CC) -o $@ $(OPT) $(CFLAGS) -DJU_32BIT $<
+%.n.64.$(OBJX): %.c
+	$(CC) -o $@ $(OPT) $(CFLAGS) -DJU_64BIT $<
+%.n.32.$(LOBX): %.c
+	$(CC) -o $@ -fPIC $(OPT) $(CFLAGS) -DJU_32BIT $<
+%.n.64.$(LOBX): %.c
+	$(CC) -o $@ -fPIC $(OPT) $(CFLAGS) -DJU_64BIT $<
+
+%.b.32.$(OBJX): %.c
+	$(CC) -o $@ $(OPT) $(CFLAGS) -DJUDY1 -DJU_32BIT $<
+%.b.64.$(OBJX): %.c
+	$(CC) -o $@ $(OPT) $(CFLAGS) -DJUDY1 -DJU_64BIT $<
+%.b.32.$(LOBX): %.c
+	$(CC) -o $@ -fPIC $(OPT) $(CFLAGS) -DJUDY1 -DJU_32BIT $<
+%.b.64.$(LOBX): %.c
+	$(CC) -o $@ -fPIC $(OPT) $(CFLAGS) -DJUDY1 -DJU_64BIT $<
+
+%.w.32.$(OBJX): %.c
+	$(CC) -o $@ $(OPT) $(CFLAGS) -DJUDYL -DJU_32BIT $<
+%.w.64.$(OBJX): %.c
+	$(CC) -o $@ $(OPT) $(CFLAGS) -DJUDYL -DJU_64BIT $<
+%.w.32.$(LOBX): %.c
+	$(CC) -o $@ -fPIC $(OPT) $(CFLAGS) -DJUDYL -DJU_32BIT $<
+%.w.64.$(LOBX): %.c
+	$(CC) -o $@ -fPIC $(OPT) $(CFLAGS) -DJUDYL -DJU_64BIT $<
+
+ifeq (win,$(OS))
+#JUDY_WIN = -DJU_WIN
+JUDY_WIN = -DJU_WMAIN -I$(TOP)/interfaces/cc/vc++
+endif
+
+#ifeq (dbg, $(BUILD))
+#DEBUG := -DDEBUG
+#endif
+
+CFLAGS = $(DEBUG) $(NO_ARRAY_BOUNDS_WARNING) $(DBG) $(CARCH) $(PROF) $(JUDY_WIN) -I$(SRCDIR) -I$(SRCDIR)/..
+
+VPATH += $(OBJDIR)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/std
+
+$(INT_LIBS): makedirs
+	@ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_LIBS): makedirs
+	@ $(MAKE_CMD) $(LIBDIR)/$@
+
+.PHONY: all std $(ALL_LIBS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
+	$(addprefix $(LIBDIR)/,$(EXT_LIBS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: \
+	$(addsuffix _tag,$(ALL_LIBS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_LIBS))
+
+
+#-------------------------------------------------------------------------------
+# judy tables - whee!
+#
+JUDY_TABLES_SRC = \
+	JudyTablesGen
+
+JUDY_TABLES_BOBJ = \
+	$(addsuffix .b.$(BITS).$(OBJX),$(JUDY_TABLES_SRC))
+
+JUDY_TABLES_WOBJ = \
+	$(addsuffix .w.$(BITS).$(OBJX),$(JUDY_TABLES_SRC))
+
+$(OBJDIR)/Judy1TablesGen: $(JUDY_TABLES_BOBJ)
+	$(LD) --exe -o $@ $^
+
+$(OBJDIR)/JudyLTablesGen: $(JUDY_TABLES_WOBJ)
+	$(LD) --exe -o $@ $^
+
+$(OBJDIR)/Judy1Tables.c: $(OBJDIR)/Judy1TablesGen
+	$(RUN_REMOTELY) $^
+
+$(OBJDIR)/JudyLTables.c: $(OBJDIR)/JudyLTablesGen
+	$(RUN_REMOTELY) $^
+
+$(ILIBDIR)/judy-tables: \
+	$(OBJDIR)/JudyLTables.c \
+	$(OBJDIR)/Judy1Tables.c
+
+#-------------------------------------------------------------------------------
+# judy whee!
+#
+
+$(ILIBDIR)/libjudy: $(addprefix $(ILIBDIR)/libjudy.,$(LIBX))
+
+JUDY_NEUTRAL = \
+	JudyMalloc \
+	JudySL \
+	JudyHS
+
+JUDY_CMN = \
+	JudyGet \
+	JudyIns \
+	JudyInsArray \
+	JudyDel \
+	JudyCascade \
+	JudyCount \
+	JudyCreateBranch \
+	JudyDecascade \
+	JudyFirst \
+	JudyFreeArray \
+	JudyInsertBranch \
+	JudyMallocIF \
+	JudyMemActive \
+	JudyMemUsed \
+	JudyNext \
+	JudyNextEmpty \
+	JudyPrev \
+	JudyPrevEmpty \
+	JudyByCountWithDefs \
+	j__udyGet
+
+JUDY_WORD = \
+	JudyLTables
+
+JUDY_BIT = \
+	Judy1Tables
+
+JUDY_SRC = \
+	$(addsuffix .n,$(JUDY_NEUTRAL)) \
+	$(addsuffix .w,$(JUDY_CMN) $(JUDY_WORD)) \
+	$(addsuffix .b,$(JUDY_CMN) $(JUDY_BIT))
+
+JUDY_OBJ = \
+	$(addsuffix .$(BITS).$(LOBX),$(JUDY_SRC))
+
+$(ILIBDIR)/libjudy.$(LIBX): $(JUDY_OBJ)
+	$(LD) --slib -o $@ $^
+
+libjudy_tag:
+	@ true
diff --git a/libs/klib/judy/j__udyGet.c b/libs/klib/judy/j__udyGet.c
new file mode 100644
index 0000000..478c0f1
--- /dev/null
+++ b/libs/klib/judy/j__udyGet.c
@@ -0,0 +1,2 @@
+#define JUDYGETINLINE 1
+#include "JudyGet.c"
diff --git a/libs/klib/ksort.c b/libs/klib/ksort.c
new file mode 100644
index 0000000..88ff088
--- /dev/null
+++ b/libs/klib/ksort.c
@@ -0,0 +1,97 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/extern.h>
+#include <klib/sort.h>
+
+
+/*--------------------------------------------------------------------------
+ * ksort
+ *  qsort with a function data pointer
+ */
+
+#define TSWAP( T, a, b )                                      \
+    do                                                        \
+    {                                                         \
+        T tmp = * ( const T* ) ( a );                         \
+        * ( T* ) ( a ) = * ( const T* ) ( b );                \
+        * ( T* ) ( b ) = tmp;                                 \
+    }                                                         \
+    while ( 0 )
+
+#define TCMP( T, a, b )                                       \
+    ( ( * ( const T* ) ( a ) < * ( const T* ) ( b ) ) ? -1 :  \
+      ( * ( const T* ) ( a ) > * ( const T* ) ( b ) ) )
+
+
+/* various custom ksort operations
+ *  structures will generally want their own functions
+ *  these fundamental types can be standardized
+ */
+LIB_EXPORT void CC ksort_int32_t ( int32_t *pbase, size_t total_elems )
+{
+#define SWAP( a, b, off, size )  TSWAP ( int32_t, a, b )
+#define CMP( a, b )                                             \
+    ( * ( const int32_t* ) ( a ) - * ( const int32_t* ) ( b ) )
+
+    KSORT ( pbase, total_elems, sizeof * pbase, 0, sizeof * pbase );
+
+#undef SWAP
+#undef CMP
+}
+
+LIB_EXPORT void CC ksort_uint32_t ( uint32_t *pbase, size_t total_elems )
+{
+#define SWAP( a, b, off, size )  TSWAP ( uint32_t, a, b )
+#define CMP( a, b ) TCMP ( uint32_t, a, b )
+
+    KSORT ( pbase, total_elems, sizeof * pbase, 0, sizeof * pbase );
+
+#undef SWAP
+#undef CMP
+}
+
+LIB_EXPORT void CC ksort_int64_t ( int64_t *pbase, size_t total_elems )
+{
+#define SWAP( a, b, off, size )  TSWAP ( int64_t, a, b )
+#define CMP( a, b ) TCMP ( int64_t, a, b )
+
+    KSORT ( pbase, total_elems, sizeof * pbase, 0, sizeof * pbase );
+
+#undef SWAP
+#undef CMP
+}
+
+LIB_EXPORT void CC ksort_uint64_t ( uint64_t *pbase, size_t total_elems )
+{
+#define SWAP( a, b, off, size )  TSWAP ( uint64_t, a, b )
+#define CMP( a, b ) TCMP ( uint64_t, a, b )
+
+    KSORT ( pbase, total_elems, sizeof * pbase, 0, sizeof * pbase );
+
+#undef SWAP
+#undef CMP
+}
diff --git a/libs/klib/libklib.vers b/libs/klib/libklib.vers
index 23aa839..0b1f1ed 100644
--- a/libs/klib/libklib.vers
+++ b/libs/klib/libklib.vers
@@ -1 +1 @@
-1.2.2
+1.2.13
diff --git a/libs/klib/libklib.vers.h b/libs/klib/libklib.vers.h
deleted file mode 100644
index 2689092..0000000
--- a/libs/klib/libklib.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBKLIB_VERS 0x01020002
diff --git a/libs/klib/log.c b/libs/klib/log.c
index eb8571d..28aa7ea 100644
--- a/libs/klib/log.c
+++ b/libs/klib/log.c
@@ -117,7 +117,8 @@ LIB_EXPORT const char ** CC KLogGetParamStrings ( void )
 LIB_EXPORT rc_t CC KLogLevelExplain ( KLogLevel lvl, char *buffer, size_t bsize, size_t *num_writ )
 {
     static const char undefined[] = "undefined";
-    size_t len;
+    size_t size;
+    uint32_t len;
     const char *t;
 
     /* catch unaccounted for or bad changes in log.h
@@ -138,7 +139,7 @@ LIB_EXPORT rc_t CC KLogLevelExplain ( KLogLevel lvl, char *buffer, size_t bsize,
         t = logLevelParamStrings[lvl];
     }
 
-    len = strlen (t);
+    len = string_measure (t, &size);
     if(len > bsize) {
         if (num_writ) {
             *num_writ = 0;
@@ -146,9 +147,9 @@ LIB_EXPORT rc_t CC KLogLevelExplain ( KLogLevel lvl, char *buffer, size_t bsize,
         return RC ( rcRuntime, rcLog, rcLogging, rcBuffer, rcInsufficient );
     }
     if(num_writ) {
-        *num_writ = strlen (t);
+        *num_writ = len;
     }
-    strncpy (buffer, t, bsize);
+    string_copy (buffer, bsize, t, len);
     return 0;
 }
 
@@ -157,7 +158,7 @@ rc_t CC KLogDefaultFormatter( void* self, KWrtHandler* writer,
                               size_t envc, const wrt_nvp_t envs[] )
 {
     rc_t rc = 0;
-    size_t num_writ, nsize;
+    size_t num_writ, nsize, msize;
     uint32_t mlen;
     char buffer[8192], *nbuffer;
     const char* msg, *rc_msg;
@@ -169,7 +170,7 @@ rc_t CC KLogDefaultFormatter( void* self, KWrtHandler* writer,
     msg = wrt_nvp_find_value(envc, envs, "message");
     rc_msg = wrt_nvp_find_value(envc, envs, "reason");
     if( msg != NULL ) {
-        const char* mend = msg + strlen(msg);
+        const char* mend = msg + string_measure(msg, &msize);
         /* strip trailing newlines */
         while( mend != msg && (*mend == '\n' || *mend == '\r') ) {
             --mend;
@@ -338,6 +339,7 @@ rc_t logsubstituteparams ( const char* msg, uint32_t argc, const wrt_nvp_t argv[
         if ( msg [ i ] == '$' && msg [ i + 1 ] == '(' )
         {
             const char *value;
+            size_t size;
 
             /* find param by name */
             const wrt_nvp_t *arg = wrt_nvp_find(argc, argv, &msg[ i + 2 ]);
@@ -357,7 +359,7 @@ rc_t logsubstituteparams ( const char* msg, uint32_t argc, const wrt_nvp_t argv[
             /* compensate for outer loop's increment */
             --sz;
             /* advance past param token */
-            i += strlen(arg->name) + 2;
+            i += string_measure(arg->name, &size) + 2;
             assert( msg[i] == ')' );
         }
     }
@@ -485,11 +487,11 @@ rc_t log_print( KFmtHandler* formatter, const KLogFmtFlags flags, KWrtHandler* w
 
     uint32_t envc = 0;
     wrt_nvp_t envs[20];
-    const char ebuffer[2048];
+    char ebuffer[2048];
     uint32_t argc = 0;
     wrt_nvp_t argv[32];
     char pbuffer[4096];
-    const char abuffer[4096];
+    char abuffer[4096];
     KFmtWriter fmtwrt;
     
     assert(formatter != NULL);
@@ -650,19 +652,23 @@ rc_t log_print( KFmtHandler* formatter, const KLogFmtFlags flags, KWrtHandler* w
     }
     if( rc != 0 ) {
         /* print reason for failure */
-        rc = string_printf((char*)abuffer, sizeof(abuffer), &num_writ, "log failure: %R in '%s'", rc, msg);
+        string_printf((char*)abuffer, sizeof(abuffer), &num_writ, "log failure: %R in '%s'", rc, msg);
         envs[envc].name = "message";
         envs[envc++].value = abuffer;
     }
+
     wrt_nvp_sort(envc, envs);
-    rc = fmtwrt(formatter->data, writer, argc, argv, envc, envs);
-    if( (rc == 0) && use_rc ) {
-        KLogLastErrorCodeSet(lvl, status);
-    }
-    if(nbuffer != abuffer) {
-        free(nbuffer);
+
+    {
+        rc_t rc2 = fmtwrt(formatter->data, writer, argc, argv, envc, envs);
+        if( (rc2 == 0) && use_rc ) {
+            KLogLastErrorCodeSet(lvl, status);
+        }
+        if(nbuffer != abuffer) {
+            free(nbuffer);
+        }
+        return rc != 0 ? rc : rc2;
     }
-    return rc;
 }
 
 /* LogMsg
diff --git a/libs/klib/pbstree-impl.c b/libs/klib/pbstree-impl.c
index 27d307d..c6ebf19 100644
--- a/libs/klib/pbstree-impl.c
+++ b/libs/klib/pbstree-impl.c
@@ -503,46 +503,46 @@ bool CC PBSTreeImplDoUntil8 ( const PBSTree *self, bool reverse,
 
         end = GET32( pt -> data_size );
 
-	data_start = & pt -> data_idx . v8 [ num_nodes ];
+        data_start = & pt -> data_idx . v8 [ num_nodes ];
 	
-	if ( ! reverse )
-	  {
-	    for ( off = pt -> data_idx . v8 [ 0 ],
-		    id = 1; id < num_nodes; off = end, ++ id )
-	      {
-		end = pt -> data_idx . v8 [ id ];
-		n . internal = pt;
-		n . id = id;
-		n . data . addr = & data_start [ off ];
-		n . data . size = end - off;
-		if ( ( * f ) ( & n, data ) )
-		  return 1;
-	      }
+        if ( ! reverse )
+        {
+            for ( off = pt -> data_idx . v8 [ 0 ],
+                  id = 1; id < num_nodes; off = end, ++ id )
+            {
+                end = pt -> data_idx . v8 [ id ];
+                n . internal = pt;
+                n . id = id;
+                n . data . addr = & data_start [ off ];
+                n . data . size = end - off;
+                if ( ( * f ) ( & n, data ) )
+                    return true;
+            }
 	    
-	    end = GET32( pt -> data_size );
-	  }
+            end = GET32( pt -> data_size );
+        }
 
-	off = pt -> data_idx . v8 [ num_nodes - 1 ];
-	n . internal = pt;
-	n . id = num_nodes;
-	n . data . addr = & data_start [ off ];
-	n . data . size = end - off;
-	if ( ( * f ) ( & n, data ) )
-	  return 1;
+        off = pt -> data_idx . v8 [ num_nodes - 1 ];
+        n . internal = pt;
+        n . id = num_nodes;
+        n . data . addr = & data_start [ off ];
+        n . data . size = end - off;
+        if ( ( * f ) ( & n, data ) )
+            return true;
 
-	if ( reverse )
-	  {
-	    for ( end = off, id = num_nodes - 1; id > 0; end = off, -- id )
-	      {
-		off = pt -> data_idx . v8 [ id - 1 ];
-		n . internal = pt;
-		n . id = id;
-		n . data . addr = & data_start [ off ];
-		n . data . size = end - off;
-		if ( ( * f ) ( & n, data ) )
-		  return 1;
-	      }
-	  }
+        if ( reverse )
+        {
+            for ( end = off, id = num_nodes - 1; id > 0; end = off, -- id )
+            {
+                off = pt -> data_idx . v8 [ id - 1 ];
+                n . internal = pt;
+                n . id = id;
+                n . data . addr = & data_start [ off ];
+                n . data . size = end - off;
+                if ( ( * f ) ( & n, data ) )
+                    return true;
+            }
+        }
     }
 
     return 0;
@@ -563,47 +563,47 @@ bool CC PBSTreeImplDoUntil16 ( const PBSTree *self, bool reverse,
 
         end = GET32( pt -> data_size );
 
-	data_start = ( const uint8_t* )
-	  & pt -> data_idx . v16 [ num_nodes ];
+        data_start = ( const uint8_t* )
+            & pt -> data_idx . v16 [ num_nodes ];
             
-	if ( ! reverse )
-	  {
-	    for ( off = GET16( pt -> data_idx . v16 [ 0 ] ),
-		    id = 1; id < num_nodes; off = end, ++ id )
-	      {
-		end = GET16( pt -> data_idx . v16 [ id ] );
-		n . internal = pt;
-		n . id = id;
-		n . data . addr = & data_start [ off ];
-		n . data . size = end - off;
-		if ( ( * f ) ( & n, data ) )
-		  return 1;
-	      }
+        if ( ! reverse )
+        {
+            for ( off = GET16( pt -> data_idx . v16 [ 0 ] ),
+                  id = 1; id < num_nodes; off = end, ++ id )
+            {
+                end = GET16( pt -> data_idx . v16 [ id ] );
+                n . internal = pt;
+                n . id = id;
+                n . data . addr = & data_start [ off ];
+                n . data . size = end - off;
+                if ( ( * f ) ( & n, data ) )
+                    return true;
+            }
                 
-	    end = GET32( pt -> data_size );
-	  }
+            end = GET32( pt -> data_size );
+        }
 
-	off = GET16( pt -> data_idx . v16 [ num_nodes - 1 ] );
-	n . internal = pt;
-	n . id = num_nodes;
-	n . data . addr = & data_start [ off ];
-	n . data . size = end - off;
-	if ( ( * f ) ( & n, data ) )
-	  return 1;
+        off = GET16( pt -> data_idx . v16 [ num_nodes - 1 ] );
+        n . internal = pt;
+        n . id = num_nodes;
+        n . data . addr = & data_start [ off ];
+        n . data . size = end - off;
+        if ( ( * f ) ( & n, data ) )
+            return true;
             
-	if ( reverse )
-	  {
-	    for ( end = off, id = num_nodes - 1; id > 0; end = off, -- id )
-	      {
-		off = GET16( pt -> data_idx . v16 [ id - 1 ] );
-		n . internal = pt;
-		n . id = id;
-		n . data . addr = & data_start [ off ];
-		n . data . size = end - off;
-		if ( ( * f ) ( & n, data ) )
-		  return 1;
-	      }
-	  }
+        if ( reverse )
+        {
+            for ( end = off, id = num_nodes - 1; id > 0; end = off, -- id )
+            {
+                off = GET16( pt -> data_idx . v16 [ id - 1 ] );
+                n . internal = pt;
+                n . id = id;
+                n . data . addr = & data_start [ off ];
+                n . data . size = end - off;
+                if ( ( * f ) ( & n, data ) )
+                    return true;
+            }
+        }
     }
     return 0;
 }
@@ -623,47 +623,47 @@ bool CC PBSTreeImplDoUntil32 ( const PBSTree *self, bool reverse,
 
         end = GET32( pt -> data_size );
 
-	data_start = ( const uint8_t* )
-	  & pt -> data_idx . v32 [ num_nodes ];
+        data_start = ( const uint8_t* )
+            & pt -> data_idx . v32 [ num_nodes ];
             
-	if ( ! reverse )
-	  {
-	    for ( off = GET32( pt -> data_idx . v32 [ 0 ] ),
-		    id = 1; id < num_nodes; off = end, ++ id )
-	      {
-		end = GET32( pt -> data_idx . v32 [ id ] );
-		n . internal = pt;
-		n . id = id;
-		n . data . addr = & data_start [ off ];
-		n . data . size = end - off;
-		if ( ( * f ) ( & n, data ) )
-		  return 1;
-	      }
+        if ( ! reverse )
+        {
+            for ( off = GET32( pt -> data_idx . v32 [ 0 ] ),
+                  id = 1; id < num_nodes; off = end, ++ id )
+            {
+                end = GET32( pt -> data_idx . v32 [ id ] );
+                n . internal = pt;
+                n . id = id;
+                n . data . addr = & data_start [ off ];
+                n . data . size = end - off;
+                if ( ( * f ) ( & n, data ) )
+                    return true;
+            }
                 
-	    end = GET32( pt -> data_size );
-	  }
+            end = GET32( pt -> data_size );
+        }
             
-	off = GET32( pt -> data_idx . v32 [ num_nodes - 1 ] );
-	n . internal = pt;
-	n . id = num_nodes;
-	n . data . addr = & data_start [ off ];
-	n . data . size = end - off;
-	if ( ( * f ) ( & n, data ) )
-	  return 1;
+        off = GET32( pt -> data_idx . v32 [ num_nodes - 1 ] );
+        n . internal = pt;
+        n . id = num_nodes;
+        n . data . addr = & data_start [ off ];
+        n . data . size = end - off;
+        if ( ( * f ) ( & n, data ) )
+            return true;
             
-	if ( reverse )
-	  {
-	    for ( end = off, id = num_nodes - 1; id > 0; end = off, -- id )
-	      {
-		off = GET32( pt -> data_idx . v32 [ id - 1 ] );
-		n . internal = pt;
-		n . id = id;
-		n . data . addr = & data_start [ off ];
-		n . data . size = end - off;
-		if ( ( * f ) ( & n, data ) )
-		  return 1;
-	      }
-	  }
+        if ( reverse )
+        {
+            for ( end = off, id = num_nodes - 1; id > 0; end = off, -- id )
+            {
+                off = GET32( pt -> data_idx . v32 [ id - 1 ] );
+                n . internal = pt;
+                n . id = id;
+                n . data . addr = & data_start [ off ];
+                n . data . size = end - off;
+                if ( ( * f ) ( & n, data ) )
+                    return true;
+            }
+        }
     }
 
     return 0;
diff --git a/libs/klib/printf.c b/libs/klib/printf.c
index f1f92d5..017ab92 100644
--- a/libs/klib/printf.c
+++ b/libs/klib/printf.c
@@ -41,6 +41,58 @@
 #include <stdio.h>
 #include <assert.h>
 
+/* the number of PrintFmt, PrintArg and String
+   elements to allocate in function-local storage */
+#define LOCAL_FMT_COUNT 64
+
+
+/* for testing purposes - temporarily define this guy */
+#define STDC_COMPATIBILITY 1
+
+/***********************************
+ * OLD PRINTF CODE IS NOW INACTIVE *
+ ***********************************/
+#define USE_OLD_PRINTF 0
+
+/***********************************
+ * OUR OLD BUDDY                   *
+ ***********************************/
+#if WINDOWS
+#undef snprintf
+#define snprintf _snprintf
+#endif
+
+/**************************************
+ * NAMING TRICKS TO HAVE BOTH ON HAND *
+ **************************************/
+#if USE_OLD_PRINTF
+#define old_string_vprintf string_vprintf
+#define old_string_printf string_printf
+#define old_vkfprintf vkfprintf
+#define old_kfprintf kfprintf
+#else
+#define new_string_vprintf string_vprintf
+#define new_string_printf string_printf
+#define new_vkfprintf vkfprintf
+#define new_kfprintf kfprintf
+#endif
+
+/************************************
+ * BEHAVIORS SENSITIVE TO STDC MODE *
+ ************************************/
+#if STDC_COMPATIBILITY
+#define NULL_STRING_TEXT "(null)"
+#else
+#define NULL_STRING_TEXT "NULL"
+#endif
+#define DOUSE_NUM_PREFIX_IF_ZERO              STDC_COMPATIBILITY
+#define KEEP_OCT_PREFIX_IF_ZERO               STDC_COMPATIBILITY
+#define OCTAL_PREFIX_COUNTS_TOWARD_PRECISION  STDC_COMPATIBILITY
+#define HEX_PREFIX_FOLLOWS_CASE               STDC_COMPATIBILITY
+/* Present in 2.3.3 (from SLES 9.3), absent in 2.5 (from CentOS 5.6) */
+#define EMULATE_SMALLINT_EXTENSION_BUG      ( STDC_COMPATIBILITY && defined(__GLIBC__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 5) ) )
+#define ZERO_PAD_ONLY_NUMBERS               ( !STDC_COMPATIBILITY || defined(__GLIBC__) )
+
 #define USE_LIB_FLOAT 1
 
 static
@@ -95,7 +147,7 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
     char buff [ 256 ];
     char use_sign, padding;
     const char *hex_digits;
-    uint32_t i, j, len, min_field_width, max_field_width, precision;
+    uint32_t i, j, len, digits, min_field_width, max_field_width, precision;
     bool left_align, comma_separate, have_precision, byte_size, half_size, long_size;
     bool alternate, trim_trailing_zeros, date_time_zone;
 
@@ -149,6 +201,8 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
             continue;
         }
 
+        digits = 0;
+
         /* process flags */
         use_sign = 0;
         left_align = comma_separate = alternate = false;
@@ -225,6 +279,10 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
         byte_size = half_size = long_size = date_time_zone = false;
         switch ( fmt [ sidx ] )
         {
+        case 't':
+            byte_size = true;
+            ++ sidx;
+            break;
         case 'h':
             /* this should not be necessary */
             if ( fmt [  ++ sidx ] != 'h' )
@@ -264,12 +322,14 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
             else
                 i64 = va_arg ( args, int32_t );
 
+#if ! STDC_COMPATIBILITY
             /* detect zero */
             if ( i64 == 0 )
                 use_sign = 0;
-
+            else
+#endif
             /* detect negative */
-            else if ( i64 < 0 )
+            if ( i64 < 0 )
             {
                 use_sign = '-';
                 i64 = - i64;
@@ -281,20 +341,22 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
         make_signed_integer:
 #endif
             /* convert to numeral */
-            if ( comma_separate ) for ( -- i, j = 0; ; -- i )
+            if ( comma_separate ) for ( -- i, j = 0; ; -- i, ++ j )
             {
-                buff [ i ] =  ( i64 % 10 ) + '0';
-                if ( ( i64 /= 10 ) == 0 )
-                    break;
-                if ( ++ j == 3 )
+                if ( j == 3 )
                 {
                     buff [ -- i ] = ',';
                     j = 0;
                 }
+                buff [ i ] =  ( i64 % 10 ) + '0';
+                ++ digits;
+                if ( ( i64 /= 10 ) == 0 )
+                    break;
             }
-            else for ( -- i; ; -- i )
+            else for ( -- i, digits = 0; ; -- i )
             {
                 buff [ i ] =  ( i64 % 10 ) + '0';
+                ++ digits;
                 if ( ( i64 /= 10 ) == 0 )
                     break;
             }
@@ -330,10 +392,11 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
                     if ( didx < bsize )
                         dst [ didx ] = use_sign;
                     ++ didx;
+                    ++ len;
                 }
 
                 /* precision */
-                for ( ; len < precision; ++ didx, ++ len )
+                for ( ; digits < precision; ++ didx, ++ len, ++ digits )
                 {
                     if ( didx < bsize )
                         dst [ didx ] = '0';
@@ -347,7 +410,7 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
                 }
 
                 /* padding */
-                for ( len += ( use_sign != 0 ); len < min_field_width; ++ didx, ++ len )
+                for ( ; len < min_field_width; ++ didx, ++ len )
                 {
                     if ( didx < bsize )
                         dst [ didx ] = ' ';
@@ -356,28 +419,32 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
             /* insert right-aligned */
             else
             {
+                /* remove sign from field width */
+                if ( use_sign != 0 && min_field_width != 0 )
+                    -- min_field_width;
+
                 /* zero padding means issue sign first */
                 if ( use_sign != 0 && padding == '0' )
                 {
                     if ( didx < bsize )
                         dst [ didx ] = use_sign;
                     ++ didx;
-                    ++ len;
+                    use_sign = 0;
                 }
 
-                /* precision from length */
-                if ( precision < len )
-                    precision = len;
+                /* adjust length for precision */
+                if ( precision > digits )
+                    len += precision - digits;
 
                 /* apply padding */
-                for ( ; precision < min_field_width; ++ didx, -- min_field_width )
+                for ( ; len < min_field_width; ++ didx, -- min_field_width )
                 {
                     if ( didx < bsize )
                         dst [ didx ] = padding;
                 }
 
                 /* sign */
-                if ( use_sign != 0 && padding != '0' )
+                if ( use_sign != 0 )
                 {
                     if ( didx < bsize )
                         dst [ didx ] = use_sign;
@@ -385,7 +452,7 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
                 }
 
                 /* precision */
-                for ( ; len < precision; ++ didx, ++ len )
+                for ( ; digits < precision; ++ didx, ++ digits )
                 {
                     if ( didx < bsize )
                         dst [ didx ] = '0';
@@ -416,10 +483,25 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
             /* no sign */
             use_sign = 0;
 
+            i = sizeof buff - 1;
+
             /* convert to numeral */
-            for ( i = sizeof buff - 1; ; -- i )
+            if ( comma_separate ) for ( j = digits = 0; ; -- i, ++ j )
+            {
+                if ( j == 3 )
+                {
+                    buff [ -- i ] = ',';
+                    j = 0;
+                }
+                buff [ i ] =  ( u64 % 10 ) + '0';
+                ++ digits;
+                if ( ( u64 /= 10 ) == 0 )
+                    break;
+            }
+            else for ( digits = 0; ; -- i )
             {
                 buff [ i ] =  ( u64 % 10 ) + '0';
+                ++ digits;
                 if ( ( u64 /= 10 ) == 0 )
                     break;
             }
@@ -458,10 +540,25 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
             /* no sign */
             use_sign = 0;
 
+            i = sizeof buff - 1;
+
             /* convert to numeral */
-            for ( i = sizeof buff - 1; ; -- i )
+            if ( comma_separate ) for ( j = digits = 0; ; -- i, ++ j )
+            {
+                if ( j == 3 )
+                {
+                    buff [ -- i ] = ',';
+                    j = 0;
+                }
+                buff [ i ] =  hex_digits [ u64 & 15 ];
+                ++ digits;
+                if ( ( u64 >>= 4 ) == 0 )
+                    break;
+            }
+            else for ( digits = 0; ; -- i )
             {
                 buff [ i ] =  hex_digits [ u64 & 15 ];
+                ++ digits;
                 if ( ( u64 >>= 4 ) == 0 )
                     break;
             }
@@ -489,16 +586,36 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
             /* no sign */
             use_sign = 0;
 
+            i = sizeof buff - 1;
+
             /* convert to numeral */
-            for ( i = sizeof buff - 1; ; -- i )
+            if ( comma_separate ) for ( j = digits = 0; ; -- i, ++ j )
+            {
+                if ( j == 3 )
+                {
+                    buff [ -- i ] = ',';
+                    j = 0;
+                }
+                buff [ i ] =  ( u64 & 7 ) + '0';
+                ++ digits;
+                if ( ( u64 >>= 3 ) == 0 )
+                    break;
+            }
+            else for ( digits = 0; ; -- i )
             {
                 buff [ i ] =  ( u64 & 7 ) + '0';
+                ++ digits;
                 if ( ( u64 >>= 3 ) == 0 )
                     break;
             }
 
             if ( alternate )
+            {
                 buff [ -- i ] = '0';
+#if STDC_COMPATIBILITY
+                ++ digits;
+#endif
+            }
 
             goto insert_integer;
 
@@ -517,10 +634,25 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
             /* no sign */
             use_sign = 0;
 
+            i = sizeof buff - 1;
+
             /* convert to numeral */
-            for ( i = sizeof buff - 1; ; -- i )
+            if ( comma_separate ) for ( j = digits = 0; ; -- i, ++ j )
+            {
+                if ( j == 3 )
+                {
+                    buff [ -- i ] = ',';
+                    j = 0;
+                }
+                buff [ i ] =  ( u64 & 1 ) + '0';
+                ++ digits;
+                if ( ( u64 >>= 1 ) == 0 )
+                    break;
+            }
+            else for ( i = sizeof buff - 1; ; -- i )
             {
                 buff [ i ] =  ( u64 & 1 ) + '0';
+                ++ digits;
                 if ( ( u64 >>= 1 ) == 0 )
                     break;
             }
@@ -743,8 +875,10 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
             /* sign makes no sense */
             use_sign = 0;
 
+#if ZERO_PAD_ONLY_NUMBERS
             /* padding is always with spaces */
             padding = ' ';
+#endif
 
             /* other than that, we can treat it as an integer */
             goto insert_integer;
@@ -762,6 +896,10 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
             if ( ! have_precision )
                 precision = -1;
 
+#if ZERO_PAD_ONLY_NUMBERS
+            /* padding is always with spaces */
+            padding = ' ';
+#endif
             /* test for buffer flush */
             if ( flush != NULL && didx < bsize )
             {
@@ -787,7 +925,7 @@ rc_t string_flush_vprintf ( char *dst, size_t bsize, const KWrtHandler *flush,
                 for ( ; len < min_field_width; ++ didx, ++ len )
                 {
                     if ( didx < bsize )
-                        dst [ didx ] = ' ';
+                        dst [ didx ] = padding;
                 }
             }
 
@@ -1123,13 +1261,13 @@ rc_t CC string_flush_printf ( char *dst, size_t bsize,
     return rc;
 }
 
-LIB_EXPORT rc_t CC string_vprintf ( char *dst, size_t bsize,
+LIB_EXPORT rc_t CC old_string_vprintf ( char *dst, size_t bsize,
     size_t *num_writ, const char *fmt, va_list args )
 {
     return string_flush_vprintf ( dst, bsize, NULL, num_writ, fmt, args );
 }
 
-LIB_EXPORT rc_t CC string_printf ( char *dst, size_t bsize, size_t *num_writ, const char *fmt, ... )
+LIB_EXPORT rc_t CC old_string_printf ( char *dst, size_t bsize, size_t *num_writ, const char *fmt, ... )
 {
     rc_t rc;
 
@@ -1143,7 +1281,7 @@ LIB_EXPORT rc_t CC string_printf ( char *dst, size_t bsize, size_t *num_writ, co
     return rc;
 }
 
-LIB_EXPORT size_t CC vkfprintf ( const KWrtHandler *out,
+LIB_EXPORT size_t CC old_vkfprintf ( const KWrtHandler *out,
     size_t *num_writ, const char * fmt, va_list args )
 {
     rc_t rc;
@@ -1165,7 +1303,7 @@ LIB_EXPORT size_t CC vkfprintf ( const KWrtHandler *out,
     return rc;
 }
 
-LIB_EXPORT size_t CC kfprintf ( const KWrtHandler *out,
+LIB_EXPORT size_t CC old_kfprintf ( const KWrtHandler *out,
     size_t *num_writ, const char * fmt, ... )
 {
     rc_t rc;
@@ -1173,7 +1311,2142 @@ LIB_EXPORT size_t CC kfprintf ( const KWrtHandler *out,
     va_list args;
     va_start ( args, fmt );
 
-    rc = vkfprintf ( out, num_writ, fmt, args );
+    rc = old_vkfprintf ( out, num_writ, fmt, args );
+        
+    va_end ( args );
+
+    return rc;
+}
+
+/****************************
+ * NEW PRINTF IS NOW ACTIVE *
+ ****************************/
+
+/* create_overflow
+ *  create a buffer so large that it cannot overflow again
+ *  copy in existing structures
+ *  map self-referential pointers
+ */
+static
+rc_t create_overflow ( KDataBuffer *overflow, const char *fmt_str,
+    String **strp, PrintFmt **fmtp, PrintArg **argp,
+    uint32_t str_idx, uint32_t fmt_idx, uint32_t arg_idx )
+{
+    /* measure the format string and infer that
+       we can never have more format items than
+       characters in the string... */
+    size_t fmt_str_size = strlen ( fmt_str );
+
+    /* our size will create a format and argument
+       for every byte. this should be a total overkill. */
+    size_t buff_size = ( sizeof ** strp + sizeof ** fmtp + sizeof **argp ) * fmt_str_size;
+
+    /* make the buffer */
+    rc_t rc = KDataBufferMakeBytes ( overflow, buff_size );
+    if ( rc == 0 )
+    {
+        /* capture pointers to stack structures */
+        const String *str = * strp;
+        const PrintFmt *fmt = * fmtp;
+        const PrintArg *args = * argp;
+
+        /* destination pointers */
+        String *dstr = overflow -> base;
+        PrintFmt *dfmt = ( void* ) ( dstr + fmt_str_size );
+        PrintArg *dargs = ( void* ) ( dfmt + fmt_str_size );
+
+        /* copy existing data */
+        memcpy ( dstr, str, str_idx * sizeof * dstr );
+        memcpy ( dfmt, fmt, fmt_idx * sizeof * dfmt );
+        memcpy ( dargs, args, arg_idx * sizeof * dargs );
+
+        /* if there are any pointers into "str", relocate them */
+        if ( str_idx != 0 )
+        {
+            uint32_t i, j;
+            for ( i = j = 0; i < fmt_idx && j < str_idx; ++ i )
+            {
+                switch ( dfmt [ i ] . type )
+                {
+                case sptString:
+                case sptUCS2String:
+                case sptUTF32String:
+                    if ( dargs [ i ] . S == & str [ j ] )
+                        dargs [ i ] . S = & dstr [ j ++ ];
+                    break;
+                }
+            }
+        }
+
+        /* replace pointers */
+        * strp = dstr;
+        * fmtp = dfmt;
+        * argp = dargs;
+   }
+
+    return rc;
+}
+
+
+/* parse_format_string
+ *  parse format string and args into structured format
+ */
+static
+rc_t parse_format_string ( const char *fmt_str, va_list vargs,
+    String **strp, PrintFmt **fmtp, PrintArg **argp, KDataBuffer *overflow )
+{
+    rc_t rc;
+    uint32_t i, str_idx, fmt_idx, arg_idx;
+
+    String *str = * strp;
+    PrintFmt *fmt = * fmtp;
+    PrintArg *args = * argp;
+
+    /* loop over format string */
+    for ( rc = 0, i = str_idx = fmt_idx = arg_idx = 0; fmt_str [ i ] != 0; ++ i )
+    {
+        bool alternate, numeric;
+        char size_modifier, time_modifier;
+        bool has_width, has_precision;
+        bool has_index, infinite_first;
+
+        /* loop to gather literal portions */
+        uint32_t start;
+        for ( start = i; ; ++ i )
+        {
+            /* run until we hit start of substitution token
+               or until we hit end of format string */
+            if ( fmt_str [ i ] != 0 && fmt_str [ i ] != '%' )
+                continue;
+
+            /* detect a literal string */
+            if ( i != start )
+            {
+                /* expand into overflow */
+                if ( fmt_idx == LOCAL_FMT_COUNT )
+                {
+                    rc = create_overflow ( overflow, fmt_str,
+                        strp, fmtp, argp, str_idx, fmt_idx, arg_idx );
+                    if ( rc != 0 )
+                        return rc;
+
+                    str = * strp;
+                    fmt = * fmtp;
+                    args = * argp;
+                }
+
+                /* create a text-literal format */
+                memset ( & fmt [ fmt_idx ], 0, sizeof fmt [ 0 ] );
+                fmt [ fmt_idx ] . u . l . text = & fmt_str [ start ];
+                fmt [ fmt_idx ] . u . l . size = i - start;
+                fmt [ fmt_idx ] . fmt = spfText;
+                fmt [ fmt_idx ] . type = sptLiteral;
+
+                /* increment counter */
+                ++ fmt_idx;
+            }
+
+            /* detect escape sequence */
+            if ( fmt_str [ i ] == 0 || fmt_str [ i + 1 ] != '%' )
+                break;
+
+            /* skip over escape */
+            start = ++ i;
+        }
+
+        /* done when NUL byte is seen */
+        if ( fmt_str [ i ] == 0 )
+            break;
+
+        /* detect overflow */
+        if ( fmt_idx == LOCAL_FMT_COUNT )
+        {
+            rc = create_overflow ( overflow, fmt_str,
+                strp, fmtp, argp, str_idx, fmt_idx, arg_idx );
+            if ( rc != 0 )
+                return rc;
+
+            str = * strp;
+            fmt = * fmtp;
+            args = * argp;
+        }
+
+        /* initial format
+         *  thousands_separate    = false
+         *  add_prefix            = false
+         *  force_decimal_point   = false
+         *  leave_trailing_zeros  = false
+         *  print_time            = false
+         *  print_date            = false
+         *  print_weekday         = false
+         *  print_timezone        = false
+         *  hour_24               = false
+         *  sign                  = 0
+         *  left_fill             = space
+         */
+        memset ( & fmt [ fmt_idx ], 0, sizeof fmt [ 0 ] );
+        fmt [ fmt_idx ] . left_fill = ' ';
+
+        /* scan flags */
+        alternate = false;
+        while ( 1 )
+        {
+            switch ( fmt_str [ ++ i ] )
+            {
+                /* plus and space modify application of sign
+                   to signed integer and floating point conversions.
+                   plus overrides space. */
+            case ' ':
+                if ( fmt [ fmt_idx ] . sign == 0 )
+            case '+':
+                    fmt [ fmt_idx ] . sign = fmt_str [ i ];
+                continue;
+
+                /* dash indicates left-alignment. indicate this
+                   by setting "left_fill" to NUL. */
+            case '-':
+                fmt [ fmt_idx ] . left_fill = 0;
+                continue;
+
+                /* zero indicates an alternate left-fill for
+                   numeric conversions. the zero is inserted before
+                   any sign character in { '+', '-' or ' ' }.
+                   since "left_fill" is also used to indicate
+                   alignment, only store when right aligning. */
+            case '0':
+                if ( fmt [ fmt_idx ] . left_fill != 0 )
+                    fmt [ fmt_idx ] . left_fill = '0';
+                continue;
+
+                /* hash indicates that the formatter should use an
+                   "alternate" approach. that approach is specific
+                   to the format. */
+            case '#':
+                alternate = true;
+                continue;
+
+                /* comma ( or apostrophe outside of US ) indicates
+                   that the integer portion of a numeral should use
+                   a comma as a thousands separator for legibility. */
+            case ',':
+            case '\'':
+                fmt [ fmt_idx ] . thousands_separate = 1;
+                continue;
+            }
+
+            /* we've hit a non-flag character */
+            break;
+        }
+
+        /* minimum field width */
+        has_width = false;
+        if ( isdigit ( fmt_str [ i ] ) )
+        {
+            /* literal */
+            has_width = true;
+            fmt [ fmt_idx ] . u . f . min_field_width = fmt_str [ i ] - '0';
+            while ( isdigit ( fmt_str [ ++ i ] ) )
+            {
+                fmt [ fmt_idx ] . u . f . min_field_width *= 10;
+                fmt [ fmt_idx ] . u . f . min_field_width += fmt_str [ i ] - '0';
+            }
+        }
+        else if ( fmt_str [ i ] == '*' )
+        {
+            /* external - we populate the structure directly
+               rather than marking the value as external */
+            has_width = true;
+            fmt [ fmt_idx ] . u . f . min_field_width = va_arg ( vargs, uint32_t );
+            ++ i;
+        }
+
+        /* precision */
+        has_precision = false;
+        if ( fmt_str [ i ] == '.' )
+        {
+            /* a single dot implies a precision value of 0 */
+            has_precision = true;
+
+            if ( isdigit ( fmt_str [ ++ i ] ) )
+            {
+                /* a literal precision */
+                fmt [ fmt_idx ] . u . f . precision = fmt_str [ i ] - '0';
+                while ( isdigit ( fmt_str [ ++ i ] ) )
+                {
+                    fmt [ fmt_idx ] . u . f . precision *= 10;
+                    fmt [ fmt_idx ] . u . f . precision += fmt_str [ i ] - '0';
+                }
+            }
+            else if ( fmt_str [ i ] == '*' )
+            {
+                /* external - again populate directly */
+                fmt [ fmt_idx ] . u . f . precision = va_arg ( vargs, uint32_t );
+                ++ i;
+            }
+            else if ( fmt_str [ i ] == '-' )
+            {
+                /* eat a negative precision - treat as 0 */
+                while ( isdigit ( fmt_str [ ++ i ] ) )
+                    ( void ) 0;
+            }
+        }
+
+        /* index - given when parameter is a vector */
+        has_index = infinite_first = false;
+        if ( fmt_str [ i ] == ':' )
+        {
+            bool has_start, has_len, has_end, end_is_stop;
+            has_start = has_len = has_end = end_is_stop = false;
+
+            /* parameter is taken as a vector,
+               with a default index starting at 0 */
+            has_index = true;
+
+            if ( isdigit ( fmt_str [ ++ i ] ) )
+            {
+                /* literal index */
+                fmt [ fmt_idx ] . u . f . start_idx = fmt_str [ i ] - '0';
+                while ( isdigit ( fmt_str [ ++ i ] ) )
+                {
+                    fmt [ fmt_idx ] . u . f . start_idx *= 10;
+                    fmt [ fmt_idx ] . u . f . start_idx += fmt_str [ i ] - '0';
+                }
+                has_start = true;
+            }
+            else switch ( fmt_str [ i ] )
+            {
+            case '*':
+                /* external index, captured directly */
+                fmt [ fmt_idx ] . u . f . start_idx = va_arg ( vargs, uint32_t );
+                ++ i;
+                has_start = true;
+                break;
+            case '$':
+                ++ i;
+                has_start = infinite_first = true;
+                break;
+            }
+
+            /* detect range */
+            switch ( fmt_str [ i ] )
+            {
+                /* given as start-stop */
+            case '-':
+                end_is_stop = true;
+
+                /* given as start/len */
+            case '/':
+
+                has_len = true;
+
+                if ( isdigit ( fmt_str [ ++ i ] ) )
+                {
+                    /* literal selection length or end */
+                    fmt [ fmt_idx ] . u . f . select_len = fmt_str [ i ] - '0';
+                    while ( isdigit ( fmt_str [ ++ i ] ) )
+                    {
+                        fmt [ fmt_idx ] . u . f . select_len *= 10;
+                        fmt [ fmt_idx ] . u . f . select_len += fmt_str [ i ] - '0';
+                    }
+                    has_end = true;
+                }
+                else switch ( fmt_str [ i ] )
+                {
+                case '*':
+                    /* external selection length or end */
+                    fmt [ fmt_idx ] . u . f . select_len = va_arg ( vargs, uint32_t );
+                    ++ i;
+                    has_end = true;
+                    break;
+                case '$':
+                    ++ i;
+                    end_is_stop = false;
+                    break;
+                case '-':
+                    /* negatives are garbage */
+                    while ( isdigit ( fmt_str [ ++ i ] ) )
+                        ( void ) 0;
+                    break;
+                default:
+                    end_is_stop = false;
+                }
+                break;
+            }
+
+            /* massage values */
+            if ( infinite_first )
+            {
+                /* having an infinite first forces length of 1 */
+                fmt [ fmt_idx ] . u . f . select_len = 1;
+            }
+            else if ( has_len )
+            {
+                /* if either a number or an external value was given */
+                if ( has_end && end_is_stop )
+                {
+                    /* end <= start is translated to length 1 */
+                    if ( fmt [ fmt_idx ] . u . f . select_len <= fmt [ fmt_idx ] . u . f . start_idx )
+                        fmt [ fmt_idx ] . u . f . select_len = 1;
+
+                    /* end > start is translated to stated length */
+                    else
+                        fmt [ fmt_idx ] . u . f . select_len -= fmt [ fmt_idx ] . u . f . start_idx - 1;
+                }
+            }
+            else if ( has_start )
+            {
+                /* with no end specified, selection length is 1 */
+                fmt [ fmt_idx ] . u . f . select_len = 1;
+            }
+        }
+
+        /* size - one of the greatest leg-irons in the C legacy,
+           guess at the parameter size so that va_arg can extract
+           it properly. rather than using predictable parameter sizes,
+           they are fuzzy. we have ( mostly ) kept them for tradition...
+           if no modifier is given, 32-bit is assumed for integer and
+           64-bit for floating point. */
+        size_modifier = time_modifier = 0;
+        switch ( fmt_str [ i ] )
+        {
+            /* "Tiny" modifier - like "hh" in C format */
+        case 't':
+            /* "Half" modifier - same as C format */
+        case 'h':
+            /* "Long" modifier - means 64-bit for integers, otherwise like C */
+        case 'l':
+            size_modifier = time_modifier = fmt_str [ i ++ ];
+            break;
+            /* "siZe" modifier - whatever the size of size_t is */
+        case 'z':
+            ++ i;
+            time_modifier = 'z';
+            if ( sizeof ( size_t ) == sizeof ( uint64_t ) )
+                size_modifier = 'l';
+            break;
+        }
+
+        /* output format
+           describes the formatting to apply on output
+           if precision has not been set, give it a default value */
+        numeric = false;
+        fmt [ fmt_idx ] . pointer_arg = has_index;
+        switch ( fmt_str [ i ] )
+        {
+            /* decimal signed integer */
+        case 'd':
+        case 'i':
+            fmt [ fmt_idx ] . radix = 10;
+            fmt [ fmt_idx ] . fmt = spfSignedInt;
+            numeric = true;
+            if ( ! has_precision )
+                fmt [ fmt_idx ] . u . f . precision = 1;
+            else if ( fmt [ fmt_idx ] . left_fill == '0' )
+                fmt [ fmt_idx ] . left_fill = ' ';
+            break;
+
+            /* decimal unsigned integer */
+        case 'u':
+            fmt [ fmt_idx ] . radix = 10;
+        unsigned_int:
+            fmt [ fmt_idx ] . fmt = spfUnsigned;
+            fmt [ fmt_idx ] . sign = 0;
+            numeric = true;
+            if ( ! has_precision )
+                fmt [ fmt_idx ] . u . f . precision = 1;
+            else if ( fmt [ fmt_idx ] . left_fill == '0' )
+                fmt [ fmt_idx ] . left_fill = ' ';
+            break;
+
+            /* hex unsigned integer */
+        case 'x':
+            fmt [ fmt_idx ] . add_prefix = alternate;
+            fmt [ fmt_idx ] . radix = 16;
+            goto unsigned_int;
+
+            /* upper-case hex unsigned integer or pointer value */
+        case 'X':
+        case 'p':
+            fmt [ fmt_idx ] . upper_case_num = 1;
+            fmt [ fmt_idx ] . add_prefix = alternate;
+            fmt [ fmt_idx ] . radix = 16;
+            goto unsigned_int;
+
+            /* octal unsigned integer */
+        case 'o':
+            fmt [ fmt_idx ] . add_prefix = alternate;
+            fmt [ fmt_idx ] . radix = 8;
+            goto unsigned_int;
+
+            /* binary unsigned integer */
+        case 'b':
+            fmt [ fmt_idx ] . add_prefix = alternate;
+            fmt [ fmt_idx ] . radix = 2;
+            goto unsigned_int;
+
+            /* decimal signed floating point */
+        case 'f':
+            fmt [ fmt_idx ] . fmt = spfStdFloat;
+        fmt_float:
+            fmt [ fmt_idx ] . radix = 10;
+            fmt [ fmt_idx ] . force_decimal_point = alternate;
+            numeric = true;
+            if ( ! has_precision )
+                fmt [ fmt_idx ] . u . f . precision = 6;
+            break;
+
+            /* scientific notation floating point */
+        case 'e':
+            fmt [ fmt_idx ] . fmt = spfSciFloat;
+            goto fmt_float;
+
+            /* "general" floating point */
+        case 'g':
+            fmt [ fmt_idx ] . leave_trailing_zeros = alternate;
+            fmt [ fmt_idx ] . fmt = spfGenFloat;
+            goto fmt_float;
+
+            /* character data */
+        case 's':
+        case 'S':
+            fmt [ fmt_idx ] . pointer_arg = 1;
+            if ( ! has_precision )
+            /* no break */
+        case 'c':
+                fmt [ fmt_idx ] . u . f . precision = -1;
+            fmt [ fmt_idx ] . fmt = spfText;
+            break;
+            
+            /* KSymbol* */
+        case 'N':
+            fmt [ fmt_idx ] . pointer_arg = 1;
+            fmt [ fmt_idx ] . fmt = spfSymbol;
+            break;
+
+            /* ver_t */
+        case 'V':
+            size_modifier = ( sizeof ( ver_t ) == sizeof ( uint32_t ) ) ? 0 : 'l';
+            fmt [ fmt_idx ] . min_vers_components = ! has_precision;
+            fmt [ fmt_idx ] . fmt = spfVersion;
+            break;
+
+            /* rc_t */
+        case 'R':
+            size_modifier = ( sizeof ( rc_t ) == sizeof ( uint32_t ) ) ? 0 : 'l';
+            fmt [ fmt_idx ] . explain_rc = alternate;
+            fmt [ fmt_idx ] . fmt = spfRC;
+            break;
+
+            /* KTime* */
+        case 'T':
+            fmt [ fmt_idx ] . pointer_arg = 1;
+            fmt [ fmt_idx ] . fmt = spfTime;
+            numeric = true;
+
+            /* here, the "size" modifier is interpreted
+               as a selector for the output format. perhaps
+               it could have been a precision thing, but... */
+            switch ( time_modifier )
+            {
+                /* by itself, 'T' implies print the time */
+            case 0:
+                fmt [ fmt_idx ] . print_time = 1;
+                break;
+
+                /* "half" 'T' means the date */
+            case 'h':
+                fmt [ fmt_idx ] . print_date = 1;
+                break;
+
+                /* "zone" 'T' means long date with time zone */
+            case 'z':
+                fmt [ fmt_idx ] . print_timezone = 1;
+                /* no break */
+
+                /* "long" 'T' means date and time */
+            case 'l':
+                fmt [ fmt_idx ] . print_time = 1;
+                fmt [ fmt_idx ] . print_date = 1;
+                fmt [ fmt_idx ] . print_weekday = 1;
+                break;
+            }
+            break;
+
+            /* OS-specific error code:
+               int on Unix-like systems
+               DWORD on Windows */
+        case '!':
+            size_modifier = 0;
+            fmt [ fmt_idx ] . fmt = spfOSErr;
+            break;
+
+#if SUPPORT_PERCENT_N
+            /* awful out parameter giving characters printed so far */
+        case 'n':
+            fmt [ fmt_idx ] . fmt = spfNone;
+            break;
+#endif
+        default:
+            return RC ( rcText, rcString, rcFormatting, rcFormat, rcUnrecognized );
+        }
+
+#if ZERO_PAD_ONLY_NUMBERS
+        /* handle zero padding for non-numeric cases */
+        if ( ! numeric && fmt [ fmt_idx ] . left_fill == '0' )
+            fmt [ fmt_idx ] . left_fill = ' ';
+#endif
+
+        /* argument format */
+        if ( has_index )
+        {
+            /* all arguments MUST be vectors. */
+            args [ arg_idx ] . p = va_arg ( vargs, const void* );
+
+            /* discriminate on vector type */
+            switch ( fmt_str [ i ] )
+            {
+                /* signed integer */
+            case 'd':
+            case 'i':
+            case '!':
+
+                if ( infinite_first )
+                    return RC ( rcText, rcString, rcFormatting, rcIndex, rcIncorrect );
+
+                /* select from 4 possibilities */
+                switch ( size_modifier )
+                {
+                case 0:
+                    fmt [ fmt_idx ] . type = sptSignedInt32Vect;
+                    break;
+                case 'l':
+                    fmt [ fmt_idx ] . type = sptSignedInt64Vect;
+                    break;
+                case 'h':
+                    fmt [ fmt_idx ] . type = sptSignedInt16Vect;
+                    break;
+                case 't':
+                    fmt [ fmt_idx ] . type = sptSignedInt8Vect;
+                    break;
+                }
+                break;
+
+                /* pointer value - cast to 32 or 64-bit unsigned integer */
+            case 'p':
+                size_modifier = ( sizeof ( void* ) == sizeof ( uint64_t ) ) ? 'l' : 0;
+                /* no break */
+
+                /* unsigned integer */
+            case 'u':
+            case 'x':
+            case 'X':
+            case 'o':
+            case 'b':
+            case 'V':
+            case 'R':
+
+                if ( infinite_first )
+                    return RC ( rcText, rcString, rcFormatting, rcIndex, rcIncorrect );
+
+                switch ( size_modifier )
+                {
+                case 0:
+                    fmt [ fmt_idx ] . type = sptUnsignedInt32Vect;
+                    break;
+                case 'l':
+                    fmt [ fmt_idx ] . type = sptUnsignedInt64Vect;
+                    break;
+                case 'h':
+                    fmt [ fmt_idx ] . type = sptUnsignedInt16Vect;
+                    break;
+                case 't':
+                    fmt [ fmt_idx ] . type = sptUnsignedInt8Vect;
+                    break;
+                }
+                break;
+
+                /* floating point */
+            case 'e':
+            case 'f':
+            case 'g':
+
+                if ( infinite_first )
+                    return RC ( rcText, rcString, rcFormatting, rcIndex, rcIncorrect );
+
+                switch ( size_modifier )
+                {
+                case 0:
+                    fmt [ fmt_idx ] . type = sptFloat64Vect;
+                    break;
+                case 'h':
+                    fmt [ fmt_idx ] . type = sptFloat32Vect;
+                    break;
+                case 'l':
+                    fmt [ fmt_idx ] . type = sptFloatLongVect;
+                    break;
+                }
+                break;
+
+                /* character array */
+            case 'c':
+
+                /* can't determine last */
+                if ( infinite_first )
+                    return RC ( rcText, rcString, rcFormatting, rcIndex, rcIncorrect );
+
+                /* length must be bounded */
+                if ( fmt [ fmt_idx ] . u . f . select_len == 0 )
+                    fmt [ fmt_idx ] . u . f . select_len = 1;
+
+                fmt [ fmt_idx ] . type = sptNulTermString;
+                break;
+
+            case 's':
+#if STDC_COMPATIBILITY
+                if ( args [ arg_idx ] . p == NULL ) {
+                    args [ arg_idx ] . p = NULL_STRING_TEXT;
+                }
+#endif
+                /* NUL-terminated string issues */
+                if ( args [ arg_idx ] . p != NULL && infinite_first )
+                {
+                    const char *cp = args [ arg_idx ] . p;
+
+                    /* handle selection of last element */
+                    size_t len = strlen ( cp );
+                    if ( len != 0 )
+                    {
+                        fmt [ fmt_idx ] . u . f . start_idx = len - 1;
+                        fmt [ fmt_idx ] . u . f . select_len = 1;
+                    }
+                }
+
+                fmt [ fmt_idx ] . type = sptNulTermString;
+                break;
+
+                /* character string */
+            case 'S':
+
+                /* if the index starts with last element */
+                if ( args [ arg_idx ] . p != NULL && infinite_first )
+                {
+                    const String *s = args [ arg_idx ] . p;
+                    if ( s -> size != 0 )
+                    {
+                        fmt [ fmt_idx ] . u . f . start_idx = s -> size - 1;
+                        fmt [ fmt_idx ] . u . f . select_len = 1;
+                    }
+                }
+
+                fmt [ fmt_idx ] . type = sptString;
+                break;
+
+                /* no other type supports vectors */
+            default:
+                return RC ( rcText, rcString, rcFormatting, rcFormat, rcIncorrect );
+            }
+        }
+        else
+        {
+            /* scalar or string arguments */
+            switch ( fmt_str [ i ] )
+            {
+                /* signed integer */
+            case 'd':
+            case 'i':
+            case '!':
+                fmt [ fmt_idx ] . type = sptSignedInt;
+                switch ( size_modifier )
+                {
+                case 0:
+                    args [ arg_idx ] . d = va_arg ( vargs, int32_t );
+                    break;
+                case 'l':
+                    args [ arg_idx ] . d = va_arg ( vargs, int64_t );
+                    break;
+#if EMULATE_SMALLINT_EXTENSION_BUG
+                case 'h':
+                case 't':
+                    args [ arg_idx ] . d = va_arg ( vargs, int );
+                    break;
+#else
+                case 'h':
+                    args [ arg_idx ] . d = ( int16_t ) va_arg ( vargs, int );
+                    break;
+                case 't':
+                    args [ arg_idx ] . d = ( int8_t ) va_arg ( vargs, int );
+                    break;
+#endif
+                }
+                break;
+
+                /* pointer cast to uint64_t */
+            case 'p':
+                size_modifier = ( sizeof ( void* ) == sizeof ( uint64_t ) ) ? 'l' : 0;
+                /* no break */
+
+                /* unsigned integer */
+            case 'u':
+            case 'x':
+            case 'X':
+            case 'o':
+            case 'b':
+            case 'V':
+            case 'R':
+                fmt [ fmt_idx ] . type = sptUnsignedInt;
+                switch ( size_modifier )
+                {
+                case 0:
+                    args [ arg_idx ] . u = va_arg ( vargs, uint32_t );
+                    break;
+                case 'l':
+                    args [ arg_idx ] . u = va_arg ( vargs, uint64_t );
+                    break;
+                case 'h':
+                    args [ arg_idx ] . u = ( uint16_t ) va_arg ( vargs, unsigned int );
+                    break;
+                case 't':
+                    args [ arg_idx ] . u = ( uint8_t ) va_arg ( vargs, unsigned int );
+                    break;
+                }
+                break;
+
+                /* floating point */
+            case 'e':
+            case 'f':
+            case 'g':
+                fmt [ fmt_idx ] . type = sptFloat;
+                switch ( size_modifier )
+                {
+                case 0:
+                case 'h':
+                    args [ arg_idx ] . f = va_arg ( vargs, double );
+                    break;
+                case 'l':
+                    args [ arg_idx ] . f = ( double ) va_arg ( vargs, long double );
+                    break;
+                default:
+                    return RC ( rcText, rcString, rcFormatting, rcFormat, rcIncorrect );
+                }
+                break;
+
+                /* single character */
+            case 'c':
+                fmt [ fmt_idx ] . type = sptChar;
+                args [ arg_idx ] . c = va_arg ( vargs, uint32_t );
+                break;
+
+                /* NUL-terminated string */
+            case 's':
+                fmt [ fmt_idx ] . type = sptNulTermString;
+                args [ arg_idx ] . s = va_arg ( vargs, const char* );
+                break;
+
+                /* String object */
+            case 'S':
+                fmt [ fmt_idx ] . type = sptString;
+                args [ arg_idx ] . S = va_arg ( vargs, const String* );
+                break;
+
+                /* KSymbol or KTime object */
+            case 'N':
+            case 'T':
+                fmt [ fmt_idx ] . type = sptPointer;
+                args [ arg_idx ] . p = va_arg ( vargs, const void* );
+                break;
+
+#if SUPPORT_PERCENT_N
+            case 'n':
+                fmt [ fmt_idx ] . type = sptBytesPrinted;
+                args [ arg_idx ] . n = va_arg ( vargs, uint32_t* );
+                break;
+#endif
+            }
+        }
+
+        /* account for format and argument */
+        ++ fmt_idx;
+        ++ arg_idx;
+    }
+
+    /* record final fmt */
+    if ( rc == 0 )
+    {
+        if ( fmt_idx == LOCAL_FMT_COUNT )
+        {
+            rc = create_overflow ( overflow, fmt_str,
+                strp, fmtp, argp, str_idx, fmt_idx, arg_idx );
+            if ( rc != 0 )
+                return rc;
+
+            fmt = * fmtp;
+        }
+
+        memset ( & fmt [ fmt_idx ], 0, sizeof fmt [ 0 ] );
+    }
+
+    return rc;
+}
+
+
+/* KBufferedWrtHandler
+ *  combines buffer and possibly NULL handler
+ *  handles flushing, counting, etc.
+ */
+typedef struct KBufferedWrtHandler KBufferedWrtHandler;
+struct KBufferedWrtHandler
+{
+    const KWrtHandler *handler;
+    char *buff;
+    size_t bsize;
+    size_t cur;
+    size_t flushed;
+    bool overflow;
+};
+
+
+/* flush_buffer
+ *  writes data to handler
+ *  or NUL-terminates buffer
+ */
+static
+rc_t flush_buffer ( KBufferedWrtHandler *out )
+{
+    const KWrtHandler *flush = out -> handler;
+    if ( out -> handler != NULL )
+    {
+        rc_t rc = 0;
+        size_t num_writ, flushed;
+
+/*        assert ( out -> cur != 0 ); */
+
+        for ( flushed = 0; flushed < out -> cur; flushed += num_writ )
+        {
+            rc = ( * flush -> writer ) ( flush -> data,
+                & out -> buff [ flushed ], out -> cur - flushed, & num_writ );
+            if ( rc != 0 )
+                break;
+            if ( num_writ == 0 )
+                break;
+        }
+
+        if ( flushed == 0 )
+            return rc;
+
+        out -> flushed += flushed;
+        if ( flushed < out -> cur )
+            memmove ( out -> buff, & out -> buff [ flushed ], out -> cur - flushed );
+        out -> cur -= flushed;
+
+        return 0;
+    }
+
+    /* NB - header file states that space for NUL byte
+       is REQUIRED, so this test will declare overflow
+       whenever there is not space for the NUL termination */
+    if ( out -> cur >= out -> bsize )
+        out -> overflow = true;
+    else
+        out -> buff [ out -> cur ] = 0;
+
+    return 0;
+}
+
+static
+rc_t write_buffer ( KBufferedWrtHandler *out, const char *data, size_t bytes )
+{
+    size_t total, num_writ;
+    for ( total = 0; total < bytes; out -> cur += num_writ, total += num_writ )
+    {
+        if ( ! out -> overflow && out -> cur == out -> bsize )
+        {
+            rc_t rc = flush_buffer ( out );
+            if ( rc != 0 )
+                return rc;
+        }
+        if ( out -> overflow )
+            num_writ = bytes - total;
+        else
+        {
+            num_writ = out -> bsize - out -> cur;
+            if ( total + num_writ > bytes )
+                num_writ = bytes - total;
+            memcpy ( & out -> buff [ out -> cur ], & data [ total ], num_writ );
+        }
+    }
+    return 0;
+}
+
+
+/* print_padding
+ *  issue padding characters
+ */
+static
+rc_t print_padding ( KBufferedWrtHandler *out, size_t count, char pad_char )
+{
+    size_t total, num_writ;
+    for ( total = 0; total < count; out -> cur += num_writ, total += num_writ )
+    {
+        if ( ! out -> overflow && out -> cur == out -> bsize )
+        {
+            rc_t rc = flush_buffer ( out );
+            if ( rc != 0 )
+                return rc;
+        }
+        if ( out -> overflow )
+            num_writ = count - total;
+        else
+        {
+            uint32_t i = out -> cur;
+            uint32_t lim = out -> cur + count - total;
+            if ( lim > out -> bsize )
+                lim = out -> bsize;
+            for ( num_writ = lim - i; i < lim; ++ i )
+                out -> buff [ i ] = pad_char;
+        }
+    }
+    return 0;
+}
+
+/* print_nul_term_string
+ */
+static
+rc_t print_nul_term_string ( KBufferedWrtHandler *out, String *S, size_t precision )
+{
+    size_t total, num_writ;
+    const char *s = S -> addr;
+
+    for ( S -> len = 0, total = 0; total < precision && s [ 0 ] != 0;
+          s += num_writ, out -> cur += num_writ, total += num_writ )
+    {
+        char *buff;
+        size_t lim;
+
+        if ( ! out -> overflow && out -> cur == out -> bsize )
+        {
+            rc_t rc = flush_buffer ( out );
+            if ( rc != 0 )
+                return rc;
+        }
+
+        if ( out -> overflow )
+        {
+            lim = precision - total;
+
+            for ( num_writ = 0; num_writ < lim; ++ num_writ )
+            {
+                if ( s [ num_writ ] == 0 )
+                    break;
+
+                /* count characters as well as bytes */
+                if ( ( s [ num_writ ] & 0xC0 ) != 0x80 )
+                    ++ S -> len;
+            }
+        }
+        else
+        {
+            buff = out -> buff + out -> cur;
+            lim = out -> bsize - out -> cur;
+
+            if ( total + lim > precision )
+                lim = precision - total;
+
+            for ( num_writ = 0; num_writ < lim; ++ num_writ )
+            {
+                if ( s [ num_writ ] == 0 )
+                    break;
+
+                /* count characters as well as bytes */
+                if ( ( ( buff [ num_writ ] = s [ num_writ ] ) & 0xC0 ) != 0x80 )
+                    ++ S -> len;
+            }
+        }
+    }
+
+    S -> size = total;
+
+    return 0;
+}
+
+/* print_string
+ */
+static
+rc_t print_string ( KBufferedWrtHandler *out, const String *s, size_t precision )
+{
+    /* TBD - this is only correct for ASCII */
+    if ( s -> size < precision )
+        precision = s -> size;
+
+    return write_buffer ( out, s -> addr, precision );
+}
+
+static
+rc_t print_symbol ( KBufferedWrtHandler *out, const KSymbol *sym )
+{
+    if ( sym -> dad != NULL )
+    {
+        rc_t rc = print_symbol ( out, sym -> dad );
+        if ( rc == 0 )
+            rc = print_padding ( out, 1, ':' );
+        if ( rc != 0 )
+            return rc;
+    }
+    return print_string ( out, & sym -> name, sym -> name . size );
+}
+
+static
+rc_t print_literal ( KBufferedWrtHandler *out, const char *text, size_t size )
+{
+    return write_buffer ( out, text, size );
+}
+
+
+/* structured_print_engine
+ *  prints into a buffer
+ *  if an output handler is provided, the buffer will be flushed to it as needed
+ *  returns the number of BYTES written, but not the number of characters.
+ */
+static const char* alnum_set [ 2 ] [ 2 ] =
+{
+    /* "normal" alpha-numeric ordering for rendering numerals */
+    {
+        "0123456789abcdefghijklmnopqrstuvwxyz",
+        "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+    },
+    /* "abnormal" alpha-numeric ordering used by SFF format */
+    {
+        "abcdefghijklmnopqrstuvwxyz0123456789",
+        "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+    }
+};
+
+static
+rc_t structured_print_engine ( KBufferedWrtHandler *out,
+    const PrintFmt *fmt, const PrintArg *args )
+{
+    rc_t rc;
+    uint32_t fmt_idx, arg_idx;
+
+    /* declare these here to stifle the compiler
+       they should most naturally be declared within the loop,
+       but since they are conditionally initialized by the switch,
+       the compiler warns they may be used before initialization.
+       rather than quiet the complaint within the loop, they have
+       been manually hoisted outside and initialized once. */
+    uint32_t i = 0;
+    int64_t i64 = 0;
+    uint64_t u64 = 0;
+    double f64 = 0;
+    const void *p = NULL;
+
+    /* most of the arguments are going to be pulled into "S" */
+    String S;
+    StringInit ( & S, NULL, 0, 0 );
+
+    /* mark no overflow */
+    out -> overflow = false;
+
+    /* loop across all format structures */
+    for ( rc = 0, out -> cur = out -> flushed = 0, fmt_idx = arg_idx = 0;
+          fmt [ fmt_idx ] . type != sptTerm; ++ fmt_idx )
+    {
+        /* copy entry - we're going to modify it */
+        PrintFmt f = fmt [ fmt_idx ];
+
+        /* ENGINE PARAMETERS */
+
+        /* padding to left side of field */
+        uint32_t left_pad;
+
+        /* sign character if not NUL */
+        char sign_char;
+
+        /* prefix for unsigned int */
+        char prefix [ 4 ];
+        uint32_t prefix_len;
+
+        /* true if performing comma separation */
+        bool comma_sep;
+
+        /* zero-fill, from either integer precision or min-field-width */
+        uint32_t zero_fill;
+
+        /* length of integer portion of numeral, prefix contribution */
+        uint32_t int_len, prefix_contribution;
+
+        /* string index, from index and text precision */
+        bool text_index;
+        uint64_t text_start, text_lim;
+
+        /* END ENGINE PARAMETERS */
+
+        int cvt_len;
+        uint32_t c, *n;
+
+        const KTime *tm;
+        const KSymbol *N;
+
+        char text [ 1024 ];
+        uint32_t dst_len;
+
+        char ffmt [ 16 ];
+        const char *to_numeral, *cfmt;
+
+        /* detect literal */
+        if ( f . type == sptLiteral )
+        {
+            rc = print_literal ( out, f . u . l . text, f . u . l . size );
+            if ( rc != 0 )
+                break;
+
+            continue;
+        }
+
+        /* gather external parameters */
+        if ( f . ext_field_width )
+             f . u . f . min_field_width = args [ arg_idx ++ ] . u;
+        if ( f . ext_precision )
+            f . u . f . precision = args [ arg_idx ++ ] . u;
+        if ( f . ext_start_index )
+            f . u . f . start_idx = args [ arg_idx ++ ] . u;
+        if ( f . ext_select_len )
+            f . u . f . select_len = args [ arg_idx ++ ] . u;
+        else if ( f . ext_stop_index )
+        {
+            f . u . f . select_len = args [ arg_idx ++ ] . u;
+            if ( f . u . f . select_len <= f . u . f . start_idx )
+                f . u . f . select_len = 1;
+            else
+                f . u . f . select_len -= f . u . f . start_idx - 1;
+        }
+
+        /* early initialization */
+        text_index = false;
+        text_start = 0;
+        text_lim = -1;
+
+        /* vector parameters may have NULL pointers under certain
+           circumstances, e.g. pre-calculated format with out-of-bounds
+           index coordinates, when this is detectable. */
+        if ( f . pointer_arg && args [ arg_idx ] . p == NULL )
+        {
+            if ( f . fmt == spfText )
+            {
+                CONST_STRING ( & S, NULL_STRING_TEXT );
+                f . type_cast = 0;
+                f . type = sptString;
+                if ( f . u . f . precision < S . len )
+#if STDC_COMPATIBILITY  &&  !defined(__GLIBC__)
+                    S . size = S . len = f . u . f . precision;
+#else
+                    StringInit ( & S, "", 0, 0 );
+#endif                    
+            }
+            else
+            {
+                memset ( & f, 0, sizeof f );
+                f . u . f . precision = 1;
+                f . radix = 10;
+                f . fmt = spfUnsigned;
+                f . type = sptUnsignedInt;
+                u64 = 0;
+            }
+        }
+
+        /* get source */
+        else switch ( f . type )
+        {
+            /* scalar or vector signed integer */
+        case sptSignedInt:
+            i64 = args [ arg_idx ] . d;
+            break;
+        case sptSignedInt8Vect:
+            i64 = args [ arg_idx ] . d8 [ f . u . f . start_idx ];
+            break;
+        case sptSignedInt16Vect:
+            i64 = args [ arg_idx ] . d16 [ f . u . f . start_idx ];
+            break;
+        case sptSignedInt32Vect:
+            i64 = args [ arg_idx ] . d32 [ f . u . f . start_idx ];
+            break;
+        case sptSignedInt64Vect:
+            i64 = args [ arg_idx ] . d64 [ f . u . f . start_idx ];
+            break;
+
+            /* scalar or vector unsigned integer */
+        case sptUnsignedInt:
+            u64 = args [ arg_idx ] . u;
+            break;
+        case sptUnsignedInt8Vect:
+            u64 = args [ arg_idx ] . u8 [ f . u . f . start_idx ];
+            break;
+        case sptUnsignedInt16Vect:
+            u64 = args [ arg_idx ] . u16 [ f . u . f . start_idx ];
+            break;
+        case sptUnsignedInt32Vect:
+            u64 = args [ arg_idx ] . u32 [ f . u . f . start_idx ];
+            break;
+        case sptUnsignedInt64Vect:
+            u64 = args [ arg_idx ] . u64 [ f . u . f . start_idx ];
+            break;
+
+            /* scalar or vector float */
+        case sptFloat:
+            f64 = args [ arg_idx ] . f;
+            break;
+        case sptFloat32Vect:
+            f64 = args [ arg_idx ] . f32 [ f . u . f . start_idx ];
+            break;
+        case sptFloat64Vect:
+            f64 = args [ arg_idx ] . f64 [ f . u . f . start_idx ];
+            break;
+        case sptFloatLongVect:
+            f64 = ( double ) args [ arg_idx ] . flong [ f . u . f . start_idx ];
+            break;
+
+            /* utf-8 character */
+        case sptChar:
+            c = args [ arg_idx ] . c;
+            cvt_len = utf32_utf8 ( text, & text [ sizeof text ], c );
+            if ( cvt_len < 0 )
+            {
+                text [ 0 ] = '?';
+                cvt_len = 1;
+            }
+            StringInit ( & S, text, cvt_len, 1 );
+            break;
+
+            /* NUL-terminated string */
+        case sptNulTermString:
+
+            /* special initialization to flag size/length unknown */
+            StringInit ( & S, args [ arg_idx ] . s, 0, -1 );
+
+            /* IF THE STRING IS INDEXED OR MAY NEED LEFT ALIGNMENT */
+            if ( f . u . f . start_idx != 0 || f . u . f . select_len != 0 ||
+                 ( f . u . f . min_field_width != 0 && f . left_fill ) )
+            {
+                /* precision limits upper bounds
+                   if the index range is more restrictive than precision,
+                   take this as precision for text case */
+                if ( f . u . f . select_len != 0 && f . u . f . select_len < f . u . f . precision )
+                    f . u . f . precision = f . u . f . select_len;
+
+                /* scan to start location */
+                for ( S . len = 0; S . len < f . u . f . start_idx; ++ S . size )
+                {
+                    /* if end of NUL-terminated string is reached before start,
+                       then create EMPTY string */
+                    if ( S . addr [ S . size ] == 0 )
+                    {
+                        f . u . f . start_idx = 0;
+                        f . u . f . select_len = 0;
+                        f . u . f . precision = 0;
+                        break;
+                    }
+                    /* walk across utf-8 multi-byte character */
+                    if ( ( S . addr [ S . size ] & 0xC0 ) != 0x80 )
+                        ++ S . len;
+                }
+
+                /* create sub-string
+                   limit scan to required precision for efficiency */
+                for ( S . addr += S . size, S . size = 0, S . len = 0;
+                      S . len < f . u . f . precision; ++ S . size )
+                {
+                    if ( S . addr [ S . size ] == 0 )
+                        break;
+                    if ( ( S . addr [ S . size ] & 0xC0 ) != 0x80 )
+                        ++ S . len;
+                }
+            }
+
+            /* precision limits text length */
+            if ( text_lim > f . u . f . precision )
+                text_lim = f . u . f . precision;
+
+            break;
+
+            /* String object */
+        case sptString:
+
+            /* the String may be indexed */
+            if ( f . u . f . start_idx != 0 || f . u . f . select_len != 0 )
+            {
+                text_index = true;
+                text_start = f . u . f . start_idx;
+                if ( f . u . f . select_len != 0 )
+                    text_lim = f . u . f . select_len;
+            }
+
+            /* precision limits text length */
+            if ( text_lim > f . u . f . precision )
+                text_lim = f . u . f . precision;
+
+            S = * args [ arg_idx ] . S;
+            break;
+
+            /* UCS-2 or UTF-32 String object */
+        case sptUCS2String:
+        case sptUTF32String:
+            return RC ( rcText, rcString, rcConverting, rcType, rcUnsupported );
+
+            /* an object pointer */
+        case sptPointer:
+            p = args [ arg_idx ] . p;
+            break;
+
+        case sptRowId:
+            i64 = args [ arg_idx ] . d;
+            break;
+        case sptRowLen:
+            u64 = args [ arg_idx ] . u;
+            break;
+
+#if SUPPORT_PERCENT_N
+        case sptBytesPrinted:
+            n = args [ arg_idx ] . n;
+            if ( n != NULL )
+                * n = out -> cur + out -> flushed;
+            ++ arg_idx;
+            continue;
+#endif
+        default:
+            return RC ( rcText, rcString, rcConverting, rcType, rcUnrecognized );
+        }
+
+        if ( f . type_cast ) switch ( f . type )
+        {
+        case sptSignedInt:
+        case sptSignedInt8Vect:
+        case sptSignedInt16Vect:
+        case sptSignedInt32Vect:
+        case sptSignedInt64Vect:
+            f64 = i64;
+            break;
+
+        case sptUnsignedInt:
+        case sptUnsignedInt8Vect:
+        case sptUnsignedInt16Vect:
+        case sptUnsignedInt32Vect:
+        case sptUnsignedInt64Vect:
+            f64 = u64;
+            break;
+
+        case sptFloat:
+        case sptFloat32Vect:
+        case sptFloat64Vect:
+        case sptFloatLongVect:
+            i64 = f64;
+            break;
+
+        case sptChar:
+        case sptNulTermString:
+        case sptString:
+            break;
+
+            /* UCS-2 or UTF-32 String object */
+        case sptUCS2String:
+        case sptUTF32String:
+        case sptPointer:
+            return RC ( rcText, rcString, rcConverting, rcType, rcUnsupported );
+
+        case sptRowId:
+            f64 = i64;
+            break;
+        case sptRowLen:
+            f64 = u64;
+            break;
+
+#if SUPPORT_PERCENT_N
+        case sptBytesPrinted:
+            break;
+#endif
+        default:
+            return RC ( rcText, rcString, rcConverting, rcType, rcUnrecognized );
+        }
+
+        /* advance arg count */
+        ++ arg_idx;
+
+        /* initialize engine params */
+        sign_char = 0;
+        comma_sep = false;
+        left_pad = prefix_len = prefix_contribution = zero_fill = 0;
+
+        /* format */
+        switch ( f . fmt )
+        {
+        case spfNone:
+        case spfText:
+            break;
+
+        case spfSignedInt:
+            if ( i64 < 0 )
+            {
+                sign_char = '-';
+                u64 = - i64;
+            }
+            else
+            {
+                sign_char = f . sign;
+                u64 = i64;
+            }
+            f . add_prefix = 0;
+            /* no break */
+        case spfUnsigned:
+            to_numeral = alnum_set [ f . reverse_alnum ] [ f . upper_case_num ];
+
+            if ( f . radix > 36 )
+                f . radix = 10;
+
+            i = sizeof text;
+#if _DEBUGGING
+            text [ -- i ] = 0;
+#endif
+            /* record if we are comma separating below */
+            comma_sep = f . thousands_separate;
+
+#if DOUSE_NUM_PREFIX_IF_ZERO
+            if ( u64 == 0 && f . add_prefix )
+            {
+#if KEEP_OCT_PREFIX_IF_ZERO
+                if ( f . u . f . precision == 0 && f . radix == 8 )
+                    f . u . f . precision = 1;
+#endif
+                f . add_prefix = 0;
+            }
+#endif
+            /* special case for value 0 and precision 0 */
+            if ( u64 != 0 || f . u . f . precision != 0 )
+            {
+                /* convert numeral */
+                do
+                    text [ -- i ] = to_numeral [ u64 % f . radix ];
+                while ( ( u64 /= f . radix ) != 0 );
+
+                /* add prefix to unsigned numeral */
+                if ( f . add_prefix )
+                {
+                    switch ( f . radix )
+                    {
+                    case 2:
+                        memcpy ( prefix, "0b", prefix_len = 2 );
+                        break;
+                    case 8:
+                        memcpy ( prefix, "0", prefix_len = prefix_contribution = 1 );
+#if OCTAL_PREFIX_COUNTS_TOWARD_PRECISION
+                        if ( f . add_prefix && f . u . f . precision != 0 )
+                            -- f . u . f . precision;
+#endif
+                        break;
+                    case 16:
+#if HEX_PREFIX_FOLLOWS_CASE
+                        if ( to_numeral [ 10 ] == 'A' )
+                            memcpy ( prefix, "0X", prefix_len = 2 );
+                        else
+#endif
+                            memcpy ( prefix, "0x", prefix_len = 2 );
+                        break;
+                    }
+                }
+            }
+
+            /* determine length in characters, also size in bytes */
+#if _DEBUGGING
+            int_len = sizeof text - i - 1;
+#else
+            int_len = sizeof text - i;
+#endif
+            /* create text string */
+            StringInit ( & S, & text [ i ], int_len, int_len );
+
+            /* zero-fill amount */
+            if ( f . u . f . precision > ( uint64_t ) int_len )
+                zero_fill = ( uint32_t ) ( f . u . f . precision - ( uint64_t ) int_len );
+            else if ( f . left_fill == '0' )
+            {
+                /* the known characters associated with integer */
+                dst_len = int_len + prefix_len + ( sign_char != 0 );
+                if ( comma_sep && int_len != 0 )
+                    dst_len += ( int_len + prefix_contribution - 1 ) / 3;
+                if ( ( uint64_t ) dst_len < f . u . f . min_field_width )
+                {
+                    /* determine the numeric width, including zero padding */
+                    dst_len = ( uint32_t ) f . u . f . min_field_width -
+                        prefix_len + prefix_contribution - ( sign_char != 0 );
+                    if ( comma_sep && int_len != 0 )
+                    {
+                        /* desired numeric-only portion of field is "dst_len"
+                           it will be extended not only by some number of '0's,
+                           but will be sprinkled with commas.
+
+                           if "x" were our number of numerals, then:
+                             x + ( x - 1 ) / 3 = dst_len
+                           with allowances for integer math. solving for x:
+                             x = ( 3 * dst_len + 3 ) / 4
+
+                           for example: given int_len = 1, value = 0:
+                             dst_len =  1 : x =  1
+                             dst_len =  2 : x =  2
+                             dst_len =  3 : x =  3
+                             dst_len =  4 : x =  3 [ requires special compensation ]
+                             dst_len =  5 : x =  4
+                             dst_len =  6 : x =  5
+                             dst_len =  7 : x =  6
+                             dst_len =  8 : x =  6 [ requires special compensation ]
+                                . . .
+                             dst_len = 19 : x = 15
+                             dst_len = 20 : x = 15
+                             dst_len = 21 : x = 16
+                             dst_len = 22 : x = 17
+                        */
+
+                        /* apply compensation for impossible width */
+                        if ( ( dst_len & 3 ) == 0 )
+                            ++ left_pad;
+
+                        /* dst_len now becomes the number of numerals */
+                        dst_len = ( dst_len * 3 + 3 ) >> 2;
+                    }
+
+                    /* number of zeros to add */
+                    zero_fill = dst_len - int_len;
+                    prefix_len -= prefix_contribution;
+                }
+            }
+
+            break;
+
+            /* TEMPORARY - cheat by calling through to runtime sprintf
+               this needs to be implemented to handle thousands separation */
+        case spfStdFloat:
+            c = 'f';
+        fmt_float:
+            sign_char = f . sign;
+            if ( f64 < 0 )
+            {
+                sign_char = '-';
+                f64 = - f64;
+            }
+
+            ffmt [ i = 0 ] = '%';
+            if ( f . force_decimal_point )
+                ffmt [ ++ i ] = '#';
+            if ( f . u . f . precision > 20 )
+                f . u . f . precision = 20;
+            sprintf ( & ffmt [ ++ i ], ".%u%c"
+                      , ( uint32_t ) f . u . f . precision
+                      , ( char ) c );
+            cvt_len = snprintf ( text, sizeof text, ffmt, f64 );
+            assert ( cvt_len >= 0 && ( size_t ) cvt_len < sizeof text );
+            StringInit ( & S, text, cvt_len, cvt_len );
+
+            /* record if we are comma separating below and capture length of integer portion */
+            int_len = 0;
+            comma_sep = f . thousands_separate;
+            /* if ( comma_sep ) */
+            {
+                for ( ; isdigit ( text [ int_len ] ); ++ int_len )
+                    ( void ) 0;
+            }
+
+            /* zero-fill amount */
+            if ( f . left_fill == '0' )
+            {
+                /* the known characters associated with numeral */
+                dst_len = cvt_len + ( sign_char != 0 );
+                if ( comma_sep && int_len != 0 )
+                    dst_len += ( int_len - 1 ) / 3;
+                if ( ( uint64_t ) dst_len < f . u . f . min_field_width )
+                {
+                    /* determine the integer width, including zero padding */
+                    dst_len = ( uint32_t ) f . u . f . min_field_width -
+                        cvt_len + int_len - ( sign_char != 0 );
+                    if ( comma_sep && int_len != 0 )
+                    {
+                        /* SEE COMMENTS IN INTEGER SECTION */
+
+                        /* apply compensation for impossible width */
+                        if ( ( dst_len & 3 ) == 0 )
+                            ++ left_pad;
+
+                        /* dst_len now becomes the number of numerals */
+                        dst_len = ( dst_len * 3 + 3 ) >> 2;
+                    }
+
+                    /* number of zeros to add */
+                    zero_fill = dst_len - int_len;
+                }
+            }
+            break;
+
+        case spfGenFloat:
+            c = 'g';
+            goto fmt_float;
+
+        case spfSciFloat:
+            c = 'e';
+            goto fmt_float;
+
+            /* version */
+        case spfVersion:
+
+            if ( f . min_vers_components )
+            {
+                if ( ( u64 & 0xFFFF ) != 0 )
+                    f . u . f . precision = 3;
+                else if ( ( u64 & 0xFF0000 ) != 0 )
+                    f . u . f . precision = 2;
+                else
+                    f . u . f . precision = 1;
+            }
+
+            switch ( f . u . f . precision )
+            {
+            case 0:
+                cfmt = "";
+                break;
+            case 1:
+                cfmt = "%u";
+                break;
+            case 2:
+                cfmt = "%u.%u";
+                break;
+            default:
+                cfmt = "%u.%u.%u";
+            }
+
+            dst_len = sprintf ( text, cfmt
+                                , VersionGetMajor ( ( uint32_t ) u64 )
+                                , VersionGetMinor ( ( uint32_t ) u64 )
+                                , VersionGetRelease ( ( uint32_t ) u64 )
+                );
+            StringInit ( & S, & text [ i ], dst_len, dst_len );
+            f . u . f . precision = dst_len;
+            break;
+
+        case spfSymbol:
+
+            /* calculate total size of symbol */
+            for ( N = p, S = N -> name, N = N -> dad; N != NULL; N = N -> dad )
+            {
+                S . len += N -> name . len + 1;
+                S . size += N -> name . size + 1;
+            }
+
+            /* mark need to recheck format */
+            S . addr = NULL;
+            break;
+
+
+        case spfTime:
+
+            tm = p;
+
+            dst_len = 0;
+            if ( f . print_date )
+            {
+                static char const *months [ 12 ] =
+                    { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
+                if ( f . print_weekday )
+                {
+                    static char const *weekdays [ 7 ] =
+                        { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
+                    dst_len = sprintf ( text, "%s %s %u %u"
+                                        , weekdays [ tm -> weekday ]
+                                        , months [ tm -> month ]
+                                        , tm -> day + 1
+                                        , tm -> year
+                        );
+                }
+                else
+                {
+                    dst_len = sprintf ( text, "%s %u %u"
+                                        , months [ tm -> month ]
+                                        , tm -> day + 1
+                                        , tm -> year
+                        );
+                }
+            }
+
+            if ( f . print_time )
+            {
+                if ( dst_len != 0 )
+                    text [ dst_len ++ ] = ' ';
+
+                if ( f . hour_24 )
+                {
+                    dst_len += sprintf ( & text [ dst_len ]
+                                         , f . left_fill == '0' ? "%02u:%02u:%02u" : "%u:%02u:%02u"
+                                         , tm -> hour
+                                         , tm -> minute
+                                         , tm -> second
+                        );
+                }
+                else
+                {
+                    dst_len += sprintf ( & text [ dst_len ]
+                                         , f . left_fill == '0' ? "%02u:%02u:%02u %cM" : "%u:%02u:%02u %cM"
+                                         , ( tm -> hour + 11 ) % 12 + 1
+                                         , tm -> minute
+                                         , tm -> second
+                                         , ( tm -> hour < 12 ) ? 'A' : 'P'
+                        );
+                }
+
+                if ( f . print_timezone )
+                {
+                    dst_len += sprintf ( & text [ dst_len ]
+                                         , " %+02d"
+                                         , tm -> tzoff / 60
+                        );
+                }
+            }
+
+            StringInit ( & S, text, dst_len, dst_len );
+            break;
+
+        case spfRC:
+            dst_len = KWrtFmt_rc_t ( text, sizeof text, f . explain_rc ? "#" : "", ( rc_t ) u64 );
+            StringInit ( & S, text, dst_len, dst_len );
+            break;
+
+        case spfOSErr:
+            dst_len = KWrtFmt_error_code ( text, sizeof text, ( int ) i64 );
+            StringInit ( & S, text, dst_len, dst_len );
+            break;
+
+        default:
+            return RC ( rcText, rcString, rcConverting, rcFormat, rcUnrecognized );
+        }
+
+        /* at this point, we have text in "S".
+           if the text pointer is NULL, it will need to be further processed.
+           if the text size is 0 but the length is not, then we may need to measure string.
+        */
+
+        /* apply index limitation */
+        if ( text_index )
+        {
+            assert ( S . addr != NULL );
+            assert ( S . size != 0 || S . len == 0 );
+            if ( StringSubstr ( & S, & S, text_start, text_lim ) == NULL )
+                StringInit ( & S, "", 0, 0 );
+        }
+
+        /* determine overall width of substitution so far */
+        dst_len = left_pad + ( sign_char != 0 ) + prefix_len + zero_fill + S . len;
+
+        /* if there are comma insertions, get those, too */
+        if ( comma_sep && ( int_len != 0 || zero_fill != 0 ) )
+            dst_len += ( int_len + zero_fill - 1 ) / 3;
+
+        /* calculate remaining left padding */
+        if ( f . left_fill != 0 && f . u . f . min_field_width > dst_len )
+        {
+            assert ( S . size != 0 || S . len == 0 );
+            left_pad += f . u . f . min_field_width - dst_len;
+            dst_len = ( uint32_t ) f . u . f . min_field_width;
+        }
+
+        /* left padding */
+        if ( left_pad != 0 )
+        {
+            rc = print_padding ( out, left_pad, f . left_fill );
+            if ( rc != 0 )
+                return rc;
+        }
+
+        /* output sign or prefix */
+        if ( sign_char != 0 )
+        {
+            rc = print_padding ( out, 1, sign_char );
+            if ( rc != 0 )
+                return rc;
+        }
+        else if ( prefix_len != 0 )
+        {
+            rc = write_buffer ( out, prefix, prefix_len );
+            if ( rc != 0 )
+                return rc;
+        }
+
+        /* output comma-separated numeral */
+        if ( comma_sep && ( zero_fill != 0 || int_len != 0 ) )
+        {
+            uint32_t pos = zero_fill + int_len;
+            uint32_t chunk = ( pos - 1 ) % 3 + 1;
+
+            for ( i = 0, pos -= chunk; chunk > 0; -- chunk )
+            {
+                if ( zero_fill != 0 )
+                {
+                    rc = print_padding ( out, 1, '0' );
+                    -- zero_fill;
+                }
+                else
+                {
+                    rc = print_padding ( out, 1, S . addr [ i ] );
+                    ++ i;
+                }
+                if ( rc != 0 )
+                    return rc;
+            }
+
+            assert ( pos % 3 == 0 );
+            for ( pos /= 3; pos != 0; -- pos )
+            {
+                rc = print_padding ( out, 1, ',' );
+                if ( rc != 0 )
+                    return rc;
+
+                if ( zero_fill != 0 )
+                {
+                    if ( zero_fill >= 3 )
+                    {
+                        rc = print_padding ( out, 3, '0' );
+                        zero_fill -= 3;
+                    }
+                    else
+                    {
+                        rc = print_padding ( out, zero_fill, '0' );
+                        if ( rc == 0 )
+                            rc = write_buffer ( out, S . addr, 3 - zero_fill );
+                        i += 3 - zero_fill;
+                        zero_fill = 0;
+                    }
+                }
+                else
+                {
+                    rc = write_buffer ( out, & S . addr [ i ], 3 );
+                    i += 3;
+                }
+
+                if ( rc != 0 )
+                    return rc;
+            }
+
+            rc = write_buffer ( out, & S . addr [ i ], S . len - i );
+            if ( rc != 0 )
+                return rc;
+        }
+
+        /* output numeral with zero fill */
+        else if ( zero_fill != 0 )
+        {
+            rc = print_padding ( out, zero_fill, '0' );
+            if ( rc == 0 )
+                rc = print_string ( out, & S, text_lim );
+        }
+
+        /* output NUL-terminated string */
+        else if ( S . size == 0 && S . len != 0 )
+        {
+            assert ( f . left_fill == 0 || f . u . f . min_field_width == 0 );
+            rc = print_nul_term_string ( out, & S, text_lim );
+            dst_len = S . len;
+        }
+
+        /* output KSymbol */
+        else if ( S . addr == NULL )
+        {
+            rc = print_symbol ( out, p );
+        }
+
+        /* output anything else in a String */
+        else
+        {
+            rc = print_string ( out, & S, text_lim );
+        }
+
+        /* recover from error */
+        if ( rc != 0 )
+            return rc;
+
+        /* apply right padding */
+        if ( f . u . f . min_field_width > dst_len )
+        {
+            rc = print_padding ( out, f . u . f . min_field_width - dst_len, ' ' );
+            if ( rc != 0 )
+                return rc;
+        }
+    }
+
+    rc = flush_buffer ( out );
+
+    if ( rc == 0 && out -> overflow )
+        rc = RC ( rcText, rcString, rcConverting, rcBuffer, rcInsufficient );
+
+    return rc;
+}
+
+
+/* structured_printf
+ *  uses constant format descriptors and argument block
+ *  prints to "out" handler
+ */
+LIB_EXPORT rc_t CC structured_printf ( const KWrtHandler *handler,
+    size_t *num_writ, const PrintFmt *fmt, const PrintArg *args )
+{
+    if ( handler != NULL )
+    {
+        rc_t rc;
+        char buff [ 4096 ];
+
+        KBufferedWrtHandler out;
+        out . handler = handler;
+        out . buff = buff;
+        out . bsize = sizeof buff;
+
+        rc = structured_print_engine ( & out, fmt, args );
+
+        if ( num_writ != NULL )
+            * num_writ = out . cur + out . flushed;
+
+        return rc;
+    }
+
+    if ( num_writ != NULL )
+        * num_writ = 0;
+
+    return RC ( rcRuntime, rcString, rcConverting, rcFile, rcNull );
+}
+
+
+/* structured_sprintf
+ *  uses constant format descriptors and argument block
+ *  prints to UTF-8 character buffer "dst"
+ */
+LIB_EXPORT rc_t CC structured_sprintf ( char *dst, size_t bsize,
+    size_t *num_writ, const PrintFmt *fmt, const PrintArg *args )
+{
+    if ( dst != NULL || bsize == 0 )
+    {
+        rc_t rc;
+
+        KBufferedWrtHandler out;
+        out . handler = NULL;
+        out . buff = dst;
+        out . bsize = bsize;
+
+        rc = structured_print_engine ( & out, fmt, args );
+
+        if ( num_writ != NULL )
+            * num_writ = out . cur + out . flushed;
+
+        return rc;
+    }
+
+    if ( num_writ != NULL )
+        * num_writ = 0;
+
+    return RC ( rcRuntime, rcString, rcConverting, rcBuffer, rcNull );
+}
+
+
+/* string_printf
+ *  provides a facility similar to snprintf
+ *
+ *  "dst" [ OUT ] and "bsize" [ IN ] - output buffer for string
+ *  will be NUL-terminated if possible
+ *
+ *  "num_writ" [ OUT, NULL OKAY ] - returns the number of non-NUL bytes
+ *  written to "dst" or the required "bsize" to complete successfully,
+ *  not including the NUL termination.
+ *
+ *  "fmt" [ IN ] and "args" [ IN, OPTIONAL ] - data to write
+ *
+ *  returns 0 if all bytes were successfully written and a NUL-byte was
+ *  written into the buffer.
+ *
+ *  returns rcBuffer, rcInsufficient if the buffer was too small. in this
+ *  case, it is possible that the only missing byte would be the NUL
+ *  termination, and the output string may still be usable since "num_writ"
+ *  indicates the actual number of text bytes.
+ */
+LIB_EXPORT rc_t CC new_string_vprintf ( char *dst, size_t bsize,
+    size_t *num_writ, const char *fmt_str, va_list vargs )
+{
+    rc_t rc;
+
+    String str [ 64 ], * strp = str;
+    PrintFmt fmt [ 64 ], * fmtp = fmt;
+    PrintArg args [ 64 ], * argp = args;
+
+    KDataBuffer overflow;
+
+    size_t dummy;
+    if ( num_writ == NULL )
+        num_writ = & dummy;
+
+    * num_writ = 0;
+
+    rc = parse_format_string ( fmt_str, vargs,
+        & strp, & fmtp, & argp, & overflow );
+
+    if ( rc == 0 )
+        rc = structured_sprintf ( dst, bsize, num_writ, fmtp, argp );
+
+    if ( strp != str )
+        KDataBufferWhack ( & overflow );
+
+    return rc;
+}
+
+LIB_EXPORT rc_t CC new_string_printf ( char *dst, size_t bsize,
+    size_t *num_writ, const char *fmt, ... )
+{
+    rc_t rc;
+
+    va_list args;
+    va_start ( args, fmt );
+
+    rc = new_string_vprintf ( dst, bsize, num_writ, fmt, args );
+
+    va_end ( args );
+
+    return rc;
+}
+
+LIB_EXPORT size_t CC new_vkfprintf ( const KWrtHandler *out,
+    size_t *num_writ, const char *fmt_str, va_list vargs )
+{
+    rc_t rc;
+
+    String str [ 64 ], * strp = str;
+    PrintFmt fmt [ 64 ], * fmtp = fmt;
+    PrintArg args [ 64 ], * argp = args;
+
+    KDataBuffer overflow;
+
+    size_t dummy;
+    if ( num_writ == NULL )
+        num_writ = & dummy;
+
+    * num_writ = 0;
+
+    rc = parse_format_string ( fmt_str, vargs,
+        & strp, & fmtp, & argp, & overflow );
+
+    if ( rc == 0 )
+        rc = structured_printf ( out, num_writ, fmtp, argp );
+
+    if ( strp != str )
+        KDataBufferWhack ( & overflow );
+
+    return rc;
+}
+
+LIB_EXPORT size_t CC new_kfprintf ( const KWrtHandler *out,
+    size_t *num_writ, const char *fmt, ... )
+{
+    rc_t rc;
+
+    va_list args;
+    va_start ( args, fmt );
+
+    rc = new_vkfprintf ( out, num_writ, fmt, args );
         
     va_end ( args );
 
diff --git a/libs/klib/qsort.c b/libs/klib/qsort.c
index d00d0b6..2945818 100644
--- a/libs/klib/qsort.c
+++ b/libs/klib/qsort.c
@@ -122,7 +122,8 @@ LIB_EXPORT void CC ksort ( void *pbase, size_t total_elems, size_t size,
 
     const size_t max_thresh = MAX_THRESH * size;
 
-    if (total_elems == 0)
+    /* NEW - NCBI ... avoid sorting a single element */
+    if (total_elems < 2)
         /* Avoid lossage with unsigned arithmetic below.  */
         return;
 
@@ -251,6 +252,36 @@ LIB_EXPORT void CC ksort ( void *pbase, size_t total_elems, size_t size,
 
         /* Insertion sort, running from left-hand-side up to right-hand-side.  */
 
+#if 1
+        /* NEW - NCBI */
+        tmp_ptr = base_ptr + size;
+        for ( run_ptr = base_ptr + size + size; run_ptr <= end_ptr; tmp_ptr = run_ptr, run_ptr += size )
+        {
+            for ( ; tmp_ptr >= base_ptr; tmp_ptr -= size )
+            {
+                if ( ( * cmp ) ( run_ptr, tmp_ptr, data ) >= 0 )
+                    break;
+            }
+
+            tmp_ptr += size;
+            if ( tmp_ptr != run_ptr )
+            {
+                char *trav;
+
+                trav = run_ptr + size;
+                while (--trav >= run_ptr)
+                {
+                    char c = *trav;
+                    char *hi, *lo;
+
+                    for (hi = lo = trav; (lo -= size) >= tmp_ptr; hi = lo)
+                        *hi = *lo;
+                    *hi = c;
+                }
+            }
+        }
+
+#else
         run_ptr = base_ptr + size;
         while ((run_ptr += size) <= end_ptr)
         {
@@ -275,5 +306,6 @@ LIB_EXPORT void CC ksort ( void *pbase, size_t total_elems, size_t size,
                 }
             }
         }
+#endif
     }
 }
diff --git a/libs/klib/refcount.c b/libs/klib/refcount.c
index e6632f6..55590d9 100644
--- a/libs/klib/refcount.c
+++ b/libs/klib/refcount.c
@@ -37,7 +37,6 @@
 #include <klib/refcount.h>
 #include <klib/log.h>
 #include <atomic32.h>
-#include <fmtdef.h>
 
 #include <limits.h>
 #include <stdlib.h>
diff --git a/libs/klib/report.c b/libs/klib/report.c
new file mode 100644
index 0000000..94d6078
--- /dev/null
+++ b/libs/klib/report.c
@@ -0,0 +1,816 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/extern.h> /* MUST BE FIRST */
+
+#include <kapp/args.h> /* OPTION_REPORT */
+
+#include <kfs/directory.h> /* KDirectoryNativeDir */
+
+#include <klib/report.h> /* ReportInit */
+#include <klib/namelist.h> /* KNamelistRelease */
+#include <klib/time.h> /* KTime */
+#include <klib/text.h> /* string_printf */
+#include <klib/printf.h> /* string_printf */
+#include <klib/log.h> /* LOGERR */
+#include <klib/out.h> /* OUTMSG */
+#include <klib/rc.h>
+#include <klib/klib-priv.h>
+#include <atomic.h> /* atomic_test_and_set_ptr */
+
+#include <stdarg.h> /* va_start */
+#include <stdio.h> /* sprintf */
+#include <stdlib.h> /* malloc */
+#include <string.h> /* memset */
+#include <limits.h> /* PATH_MAX */
+#include <assert.h>
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+/*
+ * An unrecoverable error happened.
+ * We can help to solve it
+ * by reporting information about known application execution environment.
+ */
+
+static
+rc_t XMLLogger_Encode(const char* src, char *dst,
+    size_t dst_sz, size_t *num_writ)
+{
+    rc_t rc = 0;
+    if( src == NULL || dst == NULL || num_writ == NULL ) {
+        rc = RC(rcApp, rcArgv, rcParsing, rcParam, rcNull);
+    } else {
+        *num_writ = 0;
+        do {
+            size_t bytes;
+            const char* p;
+            switch(*src) {
+                case '\'':
+                    bytes = 6;
+                    p = "'";
+                    break;
+                case '"':
+                    bytes = 6;
+                    p = """;
+                    break;
+                case '&':
+                    bytes = 5;
+                    p = "&";
+                    break;
+                case '<':
+                    bytes = 4;
+                    p = "<";
+                    break;
+                case '>':
+                    bytes = 4;
+                    p = ">";
+                    break;
+                default:
+                    bytes = 1;
+                    p = src;
+                    break;
+            }
+            if( (*num_writ + bytes) > dst_sz ) {
+                rc = RC(rcApp, rcLog, rcEncoding, rcBuffer, rcInsufficient);
+                break;
+            } else {
+                memcpy(dst, p, bytes);
+                *num_writ = *num_writ + bytes;
+                dst += bytes;
+            }
+        } while(*src++ != '\0');
+        *num_writ = *num_writ - 1;
+    }
+    return rc;
+}
+
+typedef rc_t (CC ReportObj)(const ReportFuncs *f, uint32_t indent,
+                              const char *path, bool *wasDbOrTableSet);
+typedef rc_t (CC ReportSoftware)(const ReportFuncs *f, uint32_t indent,
+                          const char *argv_0, const char *date, ver_t tool_ver);
+typedef rc_t (CC Whack )(void);
+typedef struct Report {
+    rc_t ( CC * report_redirect ) ( KWrtHandler* handler,
+        const char* filename, bool* to_file, bool finalize );
+    rc_t ( CC * report_cwd ) ( const ReportFuncs *f, uint32_t indent );
+    rc_t ( CC * report_config ) ( const ReportFuncs *f, uint32_t indent );
+    ReportObj *report_vdb;
+    ReportSoftware *report_software;
+    Whack *whack_vdb;
+    char* volatile object; /* path: to free */
+    const char* date;
+    char** argv;
+    int argc;
+    KTime_t start;
+    ver_t tool_ver;
+    bool hasZombies;
+    bool silence;
+} Report;
+
+static rc_t ReportReplaceObjectPtr(Report* self, const char* path) {
+    char *copy, *prev_ptr, *cur_ptr;
+
+    assert(self);
+
+    copy = string_dup_measure(path, NULL);
+    if (copy == NULL)
+        return RC(rcExe, rcMemory, rcAllocating, rcMemory, rcExhausted);
+
+    cur_ptr = self -> object;
+    do
+    {
+        prev_ptr = cur_ptr;
+        cur_ptr = atomic_test_and_set_ptr ( ( void* volatile* ) & self -> object, copy, prev_ptr );
+    }
+    while ( cur_ptr != prev_ptr );
+
+    if ( cur_ptr != NULL )
+        free ( cur_ptr );
+
+    return 0;
+}
+
+static rc_t ReportFreeObject(Report* self) {
+    rc_t rc = 0;
+    char *prev_ptr, *cur_ptr;
+
+    assert(self);
+
+    cur_ptr = self -> object;
+    do
+    {
+        prev_ptr = cur_ptr;
+        cur_ptr = atomic_test_and_set_ptr ( ( void* volatile* ) & self -> object, NULL, prev_ptr );
+    }
+    while ( cur_ptr != prev_ptr );
+
+    if ( cur_ptr != NULL )
+        free(cur_ptr);
+
+    return rc;
+}
+
+static Report * volatile report_singleton;
+
+static rc_t ReportGet(Report** self)
+{
+    if ( report_singleton == NULL )
+        return RC ( rcRuntime, rcStorage, rcAccessing, rcSelf, rcNull );
+
+    * self = ( Report* ) report_singleton;
+    return 0;
+}
+static rc_t ReportRelease(void)
+{
+    rc_t rc = 0;
+    Report *prev_report, *cur_report;
+
+    cur_report = report_singleton;
+    do
+    {
+        prev_report = cur_report;
+        cur_report = atomic_test_and_set_ptr ( ( void* volatile* ) & report_singleton, NULL, prev_report );
+    }
+    while ( cur_report != prev_report );
+
+    if ( cur_report != NULL )
+    {
+
+        /* cleanup */
+        ReportFreeObject( cur_report );
+        if ( cur_report -> whack_vdb != NULL )
+            rc = ( * cur_report -> whack_vdb ) ();
+
+        if ( cur_report -> argv != NULL )
+        {
+            int i;
+            for ( i = 0; i < cur_report -> argc; ++ i )
+                free ( cur_report -> argv [ i ] );
+            free ( cur_report -> argv );
+            cur_report -> argv = NULL;
+        }
+
+        memset ( cur_report, 0, sizeof * cur_report );
+    }
+
+    return rc;
+}
+
+static void reportOpen1(uint32_t indent, const char* name) {
+    OUTMSG(("%*c%s>", indent + 1, '<', name));
+}
+
+static rc_t reportData1(const char* data) {
+    rc_t rc = 0;
+
+    char dummy[PATH_MAX * 2 + 1] = "";
+    const char* p = data;
+
+    assert(data);
+
+    if (data[0] == 0) {
+        return rc;
+    }
+
+    if (strpbrk(data, "'\"&<>")) {
+        size_t num_writ = 0;
+        rc = XMLLogger_Encode(data, dummy, sizeof dummy, &num_writ);
+        if (rc == 0)
+        {   p = dummy; }
+    }
+
+    OUTMSG(("%s", p));
+
+    return rc;
+}
+
+static void reportClose1(const char* name) { OUTMSG(("</%s>\n", name)); }
+
+static rc_t reportImpl(int indent, bool open, bool close, bool eol,
+    const char* name, const char* data, int count, va_list args)
+{
+    rc_t rc = 0;
+    int i = 0;
+
+    if (count < 0) {
+        eol = false;
+        count = -count;
+    }
+
+    OUTMSG(("%*c", eol ? ( indent + 1 ) : 1, '<'));
+    OUTMSG(("%s%s", ( ! open && close ) ? "/" : "", name));
+
+    for (i = 0; i < count; ++i) {
+        const char* name = va_arg(args, const char*);
+        int format = va_arg(args, int);
+        union {
+            const char* s;
+            int i;
+            int64_t i64;
+            KTime* t;
+            rc_t rc;
+            const uint8_t* digest;
+            uint64_t u64;
+            ver_t vers;
+        } u;
+        OUTMSG((" %s=\"", name));
+        u.i64 = 0;
+        switch(format) {
+            case 'M':
+                u.digest = va_arg(args, const uint8_t*);
+                {
+                    int i = 0;
+                    for (i = 0; i < 16; ++i)
+                    {  OUTMSG(("%02x", *(u.digest + i))); }
+                }
+                break;
+            case 'l':
+                u.i64 = va_arg(args, int64_t);
+                OUTMSG(("%ld", u.i64));
+                break;
+            case 'u':
+                u.u64 = va_arg(args, uint64_t);
+                OUTMSG(("%lu", u.u64));
+                break;
+            case 'R':
+                u.rc = va_arg(args, rc_t);
+                OUTMSG(("%R", u.rc));
+                break;
+            case 'T':
+                u.t = va_arg(args, KTime*);
+                OUTMSG(("%lT", u.t));
+                break;
+            case 's':
+                u.s = va_arg(args, const char*);
+                OUTMSG(("%s", u.s));
+                break;
+            case 'V':
+                u.vers = va_arg(args, ver_t);
+                OUTMSG(("%V", u.vers));
+                break;
+            case 'd':
+            default:
+                u.i = va_arg(args, int);
+                OUTMSG(("%d", u.i));
+                break;
+        }
+        OUTMSG(("\""));
+    }
+
+    if (data) {
+        OUTMSG((">"));
+        rc = reportData1(data);
+        if (close)
+        {   OUTMSG(("</%s", name)); }
+    }
+    else if (open && close)
+    {   OUTMSG(("/")); }
+
+    OUTMSG((">"));
+    if (eol)
+    {   OUTMSG(("\n")); }
+
+    return rc;
+}
+
+static void CC report(uint32_t indent, const char* name, uint32_t count, ...) {
+     va_list args;
+     va_start(args, count);
+     reportImpl(indent, true, true, true, name, NULL, count, args);
+     va_end(args);
+}
+
+static
+void CC reportData(uint32_t indent, const char* name, const char* data, uint32_t count, ...)
+{
+    va_list args;
+    va_start(args, count);
+    reportImpl(indent, true, true, true, name, data, count, args);
+    va_end(args);
+}
+
+static void CC reportOpen(uint32_t indent, const char* name, uint32_t count, ...) {
+    va_list args;
+    va_start(args, count);
+    reportImpl(indent, true, false, true, name, NULL, count, args);
+    va_end(args);
+}
+
+static void CC reportClose(uint32_t indent, const char* name)
+{   reportImpl(indent, false, true, true, name, NULL, 0, NULL); }
+
+static void CC reportError(uint32_t indent, rc_t rc, const char* function) {
+    report(indent, "Error", 2,
+         "rc"      , 'R', rc,
+         "function", 's', function);
+}
+
+static void CC reportErrorStrImpl(uint32_t indent, rc_t rc,
+    const char* function, const char* name, const char* val, bool eol)
+{
+    int sign = eol ? 1 : -1;
+    if (rc || function) {
+        report(indent, "Error", sign * 3,
+            "rc", 'R', rc,
+            "function", 's', function,
+            name, 's', val);
+    }
+    else {
+        report(indent, "Error", sign,
+            name, 's', val);
+    }
+}
+
+static void CC reportErrorStr(uint32_t indent, rc_t rc, const char* function,
+    const char* name, const char* val)
+{   reportErrorStrImpl(indent, rc, function, name, val, true); }
+
+static void CC reportErrorStrInt(uint32_t indent, rc_t rc, const char* function,
+    const char* names, const char* vals, const char* namei, uint32_t vali)
+{
+    report(indent, "Error", 4,
+        "rc"      , 'd', rc,
+        "function", 's', function,
+        names     , 's', vals,
+        namei     , 'd', vali);
+}
+
+static void CC reportError3Str(uint32_t indent, rc_t rc, const char* function,
+    const char* name, const char* v1, const char* v2, const char* v3,
+    bool eol)
+{
+    char* buffer = malloc(strlen(v1) + strlen(v2) + strlen(v3) + 1);
+    if (buffer) {
+        sprintf(buffer, "%s%s%s", v1, v2, v3);
+        reportErrorStrImpl(indent, rc, function, name, buffer, eol);
+        free(buffer);
+    }
+}
+
+static ReportFuncs report_funcs =
+{
+    report,
+    reportData,
+    reportData1,
+    reportOpen,
+    reportOpen1,
+    reportClose,
+    reportClose1,
+    reportError,
+    reportErrorStr,
+    reportErrorStrImpl,
+    reportErrorStrInt,
+    reportError3Str
+};
+
+static rc_t ReportRun(int indent, rc_t rc_in) {
+    rc_t rc = 0;
+
+    const char tag[] = "Run";
+
+    Report* self = NULL;
+    ReportGet(&self);
+    if (self == NULL) {
+        return rc;
+    }
+
+    reportOpen(indent, tag, 0);
+
+    {
+        KTime kt;
+        const char tag[] = "Date";
+        reportOpen(indent + 1, tag, 0);
+        KTimeLocal(&kt, self->start);
+        report(indent + 2, "Start", 1, "value", 'T', &kt);
+        KTimeLocal(&kt, KTimeStamp());
+        report(indent + 2, "End"  , 1, "value", 'T', &kt);
+        reportClose(indent + 1, tag);
+    }
+
+    {
+        const char* name = "HOME";
+        const char* val = getenv(name);
+        if (val == NULL) {
+            name = "USERPROFILE";
+            val = getenv(name);
+        }
+        if (val == NULL)
+        {   name = val = "not found"; }
+        report(indent + 1, "Home", 2, "name", 's', name, "value", 's', val);
+    }
+
+    if ( self -> report_cwd != NULL )
+        rc = ( * self -> report_cwd ) ( & report_funcs, indent + 1 );
+
+    {
+        const char tag[] = "CommandLine";
+        int i = 0;
+        reportOpen(indent + 1, tag, 1, "argc", 'd', self->argc);
+        for (i = 0; i < self->argc; ++i) {
+            if (self->argv && self->argv[i]) {
+                report(indent + 2, "Arg", 2, "index", 'd', i,
+                    "value", 's', self->argv[i]);
+            }
+        }
+        reportClose(indent + 1, tag);
+    }
+
+    report(indent + 1, "Result", 1, "rc", 'R', rc_in);
+
+    reportClose(indent, tag);
+
+    return rc;
+}
+
+
+/* Silence
+ *  tell report to be silent at exit
+ *  useful especially in response to ^C
+ */
+LIB_EXPORT void CC ReportSilence ( void )
+{
+    Report* self = NULL;
+    ReportGet(&self);
+    if ( self != NULL )
+        self -> silence = true;
+}
+
+static rc_t reportToFileSet(const Report* self,
+    KWrtHandler* old_handler, const char* name, bool* to_file)
+{
+    rc_t rc = 0;
+    assert(self && to_file);
+    if (self->report_redirect) {
+        rc = (*self->report_redirect)(old_handler, name, to_file, false);
+    }
+    return rc;
+}
+
+static rc_t reportToStdErrSet(const Report* self, KWrtHandler* old_handler) {
+    rc_t rc = 0;
+    assert(self);
+    if (self->report_redirect) {
+        rc = (*self->report_redirect)(old_handler, NULL, NULL, false);
+    }
+    return rc;
+}
+
+/* Finalize:
+ * If (rc_in != 0) then report environment information.
+ * Then clean itself.
+ */
+LIB_EXPORT rc_t CC ReportFinalize(rc_t rc_in) {
+    rc_t rc = 0;
+
+    const char* report_arg = NULL;
+
+    bool force =  rc_in != 0;
+
+    Report* self = NULL;
+    ReportGet(&self);
+
+    if (self == NULL) {
+        return rc;
+    }
+
+    if (GetRCTarget(rc_in) == rcArgv) {
+        force = false;
+    }
+    else {
+        bool wasDbOrTableSet = true;
+        if (self->report_vdb != NULL) {
+            (*self->report_vdb)(&report_funcs, 0, NULL, &wasDbOrTableSet);
+            if (!wasDbOrTableSet) {
+                force = false;
+            }
+        }
+    }
+
+    if (self->argv) {
+        int i = 0;
+        for (i = 1; i < self->argc; ++i) {
+            if (strcmp("--" OPTION_REPORT, self->argv[i]) == 0) {
+                if (i + 1 < self->argc) {
+                    report_arg = self->argv[i + 1];
+                }
+                break;
+            }
+        }
+    }
+
+    if (report_arg && strcmp("always", report_arg) == 0) {
+        force = true;
+        self -> silence = false;
+    }
+
+    if (!self -> silence) {
+        if (force) { 
+            if (report_arg && strcmp("never", report_arg) == 0) {
+                force = false;
+            }
+        }
+/*                              PLOGERR(klogErr, (klogErr,
+                               RC(rcApp, rcArgv, rcParsing, rcRange, rcInvalid),
+                               "report type '$(type)' is unrecognized",
+                               "type=%s", self->argv[i + 1]));*/
+
+        if (force) {
+            if (self->hasZombies) {
+                KOutHandlerSetStdErr();
+                if (self->object != NULL) {
+                    OUTMSG(("\nThe archive '%s' may be truncated: "
+                        "Please download it again.\n", self->object));
+                }
+                else {
+                    OUTMSG(("\nThe archive may be truncated: "
+                        "Please download it again.\n"));
+                }
+            }
+            else {
+                int indent = 0;
+                const char tag[] = "Report";
+
+                char path[PATH_MAX + 1] = "";
+                bool to_file = false;
+                KWrtHandler old_handler;
+                if (rc_in == 0) {
+                    reportToStdErrSet(self, &old_handler);
+                }
+                else {
+                    rc_t rc2 = 0;
+                    const char name[] = "ncbi_error_report.xml";
+                    const char* home = getenv("HOME");
+                    if (home == NULL) {
+                        home = getenv("USERPROFILE");
+                    }
+                    if (home) {
+                        size_t num_writ = 0;
+                        rc2 = string_printf
+                            (path, sizeof path, &num_writ, "%s/%s", home, name);
+                        assert(num_writ < sizeof path);
+                    }
+                    if (rc2 != 0 || home == NULL) {
+                        size_t num_writ = 0;
+                        rc2 = string_printf
+                            (path, sizeof path, &num_writ, "%s", name);
+                        assert(num_writ < sizeof path);
+                        assert(rc2 == 0);
+                    }
+                    reportToFileSet(self, &old_handler, path, &to_file);
+                }
+                if (!to_file && rc_in) {
+                    OUTMSG((
+"\n"
+"=============================================================\n"
+"An error occurred during processing.\n"
+"If the problem persists, you may consider sending the following XML document\n"
+"to 'sra at ncbi.nlm.nih.gov' for assistance.\n"
+"=============================================================\n\n"));
+                }
+
+                reportOpen(indent, tag, 0);
+
+                {
+                    rc_t rc2 = ReportRun(indent + 1, rc_in);
+                    if (rc == 0 && rc2 != 0)
+                    {   rc = rc2; }
+                }
+
+                if ( self -> report_config != NULL )
+                {
+                    rc_t rc2 = ( * self -> report_config ) ( & report_funcs, indent + 1);
+                    if (rc == 0 && rc2 != 0)
+                    {   rc = rc2; }
+                }
+
+                if (self -> report_vdb != NULL) {
+                    rc_t rc2 = (*self->report_vdb)
+                        (&report_funcs, indent + 1, self -> object, NULL);
+                    if (rc == 0 && rc2 != 0) {
+                        rc = rc2;
+                    }
+                }
+
+                if ( self -> report_software != NULL )
+                {
+                    const char *argv_0 = self -> argv ? self -> argv [ 0 ] : "";
+                    rc_t rc2 = ( * self -> report_software ) ( & report_funcs, indent + 1, argv_0, self -> date, self -> tool_ver );
+                    if (rc == 0 && rc2 != 0)
+                    {   rc = rc2; }
+                }
+
+                reportClose(indent, tag);
+                reportData1("\n");
+
+                if (to_file) {
+                    KOutHandlerSetStdErr();
+                    OUTMSG((
+"\n"
+"=============================================================\n"
+"An error occurred during processing.\n"
+"A report was generated into the file '%s'.\n"
+"If the problem persists, you may consider sending the file\n"
+"to 'sra at ncbi.nlm.nih.gov' for assistance.\n"
+"=============================================================\n\n", path));
+                }
+            }
+        }
+    }
+
+    ReportRelease();
+
+    return rc;
+}
+
+static
+char **copy_argv ( int argc, char **argv )
+{
+    char **argv2 = calloc ( argc, sizeof * argv2 );
+    if (argv2 != NULL) {
+        int i = 0;
+        for (i = 0; i < argc; ++i) {
+            argv2[i] = string_dup_measure(argv[i], NULL);
+        }
+    }
+    return argv2;
+}
+
+/* Init: initialize with common information */
+LIB_EXPORT void CC ReportInit(int argc, char* argv[], ver_t tool_version)
+{
+    static bool latch;
+    if ( ! latch )
+    {
+        /* comes pre-zeroed by runtime */
+        static Report self;
+
+        /* initialize with non-zero parameters */
+        self.start = KTimeStamp();
+        self.argc = argc;
+        self.argv = copy_argv ( argc, argv );
+        self.date = __DATE__;
+        self.tool_ver = tool_version;
+        self.silence = false;
+
+        /* export to the remainder of the source */
+        report_singleton = & self;
+
+        latch = true;
+    }
+}
+
+
+/* BuildDate
+ *  set the build date of the tool
+ *
+ *  "date" [ IN ] - pre-processor __DATE__
+ */
+LIB_EXPORT void CC ReportBuildDate ( const char *date )
+{
+    Report* self = NULL;
+    ReportGet(&self);
+    if ( self != NULL )
+        self -> date = date;
+}
+
+
+/* InitCWD
+ */
+LIB_EXPORT void CC ReportInitKFS (
+    rc_t ( CC * report_cwd ) ( const ReportFuncs *f, uint32_t indent ),
+    rc_t ( CC * report_redirect ) ( KWrtHandler* handler,
+        const char* filename, bool* to_file, bool finalize ) )
+{
+    Report* self = NULL;
+    ReportGet(&self);
+    if ( self != NULL ) {
+        self -> report_redirect = report_redirect;
+        self -> report_cwd = report_cwd;
+    }
+}
+
+
+/* InitConfig
+ */
+LIB_EXPORT const char* CC ReportInitConfig ( rc_t ( CC * report ) ( const ReportFuncs *f, uint32_t indent ) )
+{
+    Report* self = NULL;
+    ReportGet(&self);
+    if ( self != NULL )
+    {
+        self -> report_config = report;
+        return self -> argv [ 0 ];
+    }
+    return NULL;
+}
+
+/* InitVDB
+ */
+LIB_EXPORT rc_t CC ReportInitVDB(
+    ReportObj *report_obj, ReportSoftware *report_software, Whack *whack)
+{
+    Report* self = NULL;
+    rc_t rc = ReportGet(&self);
+    if ( rc == 0 && self)
+    {
+        self -> report_vdb = report_obj;
+        self -> report_software = report_software;
+        self -> whack_vdb = whack;
+    }
+    return rc;
+}
+
+LIB_EXPORT rc_t CC ReportResetObject(const char* path)
+{
+    Report* self = NULL;
+
+    if ( path == NULL )
+        path = "NULL";
+    else if ( path [ 0 ] == 0 )
+        path = "EMPTY";
+
+    ReportGet(&self);
+    if (self == NULL) {
+        return 0;
+    }
+
+    return ReportReplaceObjectPtr(self, path);
+}
+
+LIB_EXPORT void CC ReportRecordZombieFile(void)
+{
+    Report* self = NULL;
+    ReportGet(&self);
+    if (self == NULL)
+    {   return; }
+    self->hasZombies = true;
+}
diff --git a/libs/klib/status.c b/libs/klib/status.c
index d8d0d6f..be03c98 100644
--- a/libs/klib/status.c
+++ b/libs/klib/status.c
@@ -135,8 +135,8 @@ rc_t CC sts_print(KFmtHandler* formatter, const KStsFmtFlags flags, KWrtHandler*
 
     uint32_t envc = 0;
     wrt_nvp_t envs[5];
-    const char ebuffer[2048];
-    const char mbuffer[2048];
+    char ebuffer[2048];
+    char mbuffer[2048];
     KFmtWriter fmtwrt;
 
     assert(formatter != NULL);
diff --git a/libs/klib/symtab.c b/libs/klib/symtab.c
index 7dc8897..d30df64 100644
--- a/libs/klib/symtab.c
+++ b/libs/klib/symtab.c
@@ -103,7 +103,7 @@ LIB_EXPORT rc_t CC KSymbolMake ( KSymbol **symp,
             rc = KSymbolInit (sym, name, type, obj);
             if (rc == 0)
             {
-                * symp = NULL;
+                * symp = sym;
                 return 0;
             }
             free (sym);
diff --git a/libs/klib/token.c b/libs/klib/token.c
index d8ec211..9e4f0f5 100644
--- a/libs/klib/token.c
+++ b/libs/klib/token.c
@@ -1236,7 +1236,6 @@ comment_restart:
 
 #if CHECK_TOKENIZER
 #include <stdio.h>
-#include <fmtdef.h>
 static
 void CC examine_src ( const KTokenSource *src, bool before )
 {
@@ -1259,12 +1258,12 @@ void CC examine_src ( const KTokenSource *src, bool before )
         }
         else
         {
-            fprintf ( stderr, "KTokenizerNext: bad src size ( %" LUSZ " ) %s scan "
-                      "at file \"%.*s\" offset %" LUSZ "\n"
-                      , src -> str . size
+            fprintf ( stderr, "KTokenizerNext: bad src size ( %lu ) %s scan "
+                      "at file \"%.*s\" offset %lu\n"
+                      , ( long unsigned ) src -> str . size
                       , stage
                       , ( int ) tt -> path . size, tt -> path . addr
-                      , src -> str . addr - tt -> str . addr );
+                      , ( long unsigned ) ( src -> str . addr - tt -> str . addr ) );
         }
     }
 
diff --git a/libs/klib/unix/systime.c b/libs/klib/unix/systime.c
index 1774fcf..09b9b90 100644
--- a/libs/klib/unix/systime.c
+++ b/libs/klib/unix/systime.c
@@ -64,9 +64,11 @@ void KTimeMake ( KTime *kt, struct tm const *t )
 {
     kt -> year = t -> tm_year + 1900;
     kt -> month = t -> tm_mon;
-    kt -> day = t -> tm_mday;
+    kt -> day = t -> tm_mday - 1;
     kt -> weekday = t -> tm_wday;
+#if !defined(__SunOS)  &&  !defined(__sun__)
     kt -> tzoff = ( int16_t ) ( t -> tm_gmtoff / 60 );
+#endif
     kt -> hour = ( uint8_t ) t -> tm_hour;
     kt -> minute = ( uint8_t ) t -> tm_min;
     kt -> second = ( uint8_t ) t -> tm_sec;
diff --git a/libs/klib/unpack.c b/libs/klib/unpack.c
index a49902b..73b343b 100644
--- a/libs/klib/unpack.c
+++ b/libs/klib/unpack.c
@@ -75,6 +75,167 @@
 #define WRITE_UNPACKED8( out, dst, idx ) \
     ( ( uint64_t* ) ( dst ) ) [ idx ] = bswap_64 ( out )
 #endif
+uint8_t unpack_8_from_2_arr[256][4]={
+{0,0,0,0},{0,0,0,1},{0,0,0,2},{0,0,0,3},
+{0,0,1,0},{0,0,1,1},{0,0,1,2},{0,0,1,3},
+{0,0,2,0},{0,0,2,1},{0,0,2,2},{0,0,2,3},
+{0,0,3,0},{0,0,3,1},{0,0,3,2},{0,0,3,3},
+{0,1,0,0},{0,1,0,1},{0,1,0,2},{0,1,0,3},
+{0,1,1,0},{0,1,1,1},{0,1,1,2},{0,1,1,3},
+{0,1,2,0},{0,1,2,1},{0,1,2,2},{0,1,2,3},
+{0,1,3,0},{0,1,3,1},{0,1,3,2},{0,1,3,3},
+{0,2,0,0},{0,2,0,1},{0,2,0,2},{0,2,0,3},
+{0,2,1,0},{0,2,1,1},{0,2,1,2},{0,2,1,3},
+{0,2,2,0},{0,2,2,1},{0,2,2,2},{0,2,2,3},
+{0,2,3,0},{0,2,3,1},{0,2,3,2},{0,2,3,3},
+{0,3,0,0},{0,3,0,1},{0,3,0,2},{0,3,0,3},
+{0,3,1,0},{0,3,1,1},{0,3,1,2},{0,3,1,3},
+{0,3,2,0},{0,3,2,1},{0,3,2,2},{0,3,2,3},
+{0,3,3,0},{0,3,3,1},{0,3,3,2},{0,3,3,3},
+{1,0,0,0},{1,0,0,1},{1,0,0,2},{1,0,0,3},
+{1,0,1,0},{1,0,1,1},{1,0,1,2},{1,0,1,3},
+{1,0,2,0},{1,0,2,1},{1,0,2,2},{1,0,2,3},
+{1,0,3,0},{1,0,3,1},{1,0,3,2},{1,0,3,3},
+{1,1,0,0},{1,1,0,1},{1,1,0,2},{1,1,0,3},
+{1,1,1,0},{1,1,1,1},{1,1,1,2},{1,1,1,3},
+{1,1,2,0},{1,1,2,1},{1,1,2,2},{1,1,2,3},
+{1,1,3,0},{1,1,3,1},{1,1,3,2},{1,1,3,3},
+{1,2,0,0},{1,2,0,1},{1,2,0,2},{1,2,0,3},
+{1,2,1,0},{1,2,1,1},{1,2,1,2},{1,2,1,3},
+{1,2,2,0},{1,2,2,1},{1,2,2,2},{1,2,2,3},
+{1,2,3,0},{1,2,3,1},{1,2,3,2},{1,2,3,3},
+{1,3,0,0},{1,3,0,1},{1,3,0,2},{1,3,0,3},
+{1,3,1,0},{1,3,1,1},{1,3,1,2},{1,3,1,3},
+{1,3,2,0},{1,3,2,1},{1,3,2,2},{1,3,2,3},
+{1,3,3,0},{1,3,3,1},{1,3,3,2},{1,3,3,3},
+{2,0,0,0},{2,0,0,1},{2,0,0,2},{2,0,0,3},
+{2,0,1,0},{2,0,1,1},{2,0,1,2},{2,0,1,3},
+{2,0,2,0},{2,0,2,1},{2,0,2,2},{2,0,2,3},
+{2,0,3,0},{2,0,3,1},{2,0,3,2},{2,0,3,3},
+{2,1,0,0},{2,1,0,1},{2,1,0,2},{2,1,0,3},
+{2,1,1,0},{2,1,1,1},{2,1,1,2},{2,1,1,3},
+{2,1,2,0},{2,1,2,1},{2,1,2,2},{2,1,2,3},
+{2,1,3,0},{2,1,3,1},{2,1,3,2},{2,1,3,3},
+{2,2,0,0},{2,2,0,1},{2,2,0,2},{2,2,0,3},
+{2,2,1,0},{2,2,1,1},{2,2,1,2},{2,2,1,3},
+{2,2,2,0},{2,2,2,1},{2,2,2,2},{2,2,2,3},
+{2,2,3,0},{2,2,3,1},{2,2,3,2},{2,2,3,3},
+{2,3,0,0},{2,3,0,1},{2,3,0,2},{2,3,0,3},
+{2,3,1,0},{2,3,1,1},{2,3,1,2},{2,3,1,3},
+{2,3,2,0},{2,3,2,1},{2,3,2,2},{2,3,2,3},
+{2,3,3,0},{2,3,3,1},{2,3,3,2},{2,3,3,3},
+{3,0,0,0},{3,0,0,1},{3,0,0,2},{3,0,0,3},
+{3,0,1,0},{3,0,1,1},{3,0,1,2},{3,0,1,3},
+{3,0,2,0},{3,0,2,1},{3,0,2,2},{3,0,2,3},
+{3,0,3,0},{3,0,3,1},{3,0,3,2},{3,0,3,3},
+{3,1,0,0},{3,1,0,1},{3,1,0,2},{3,1,0,3},
+{3,1,1,0},{3,1,1,1},{3,1,1,2},{3,1,1,3},
+{3,1,2,0},{3,1,2,1},{3,1,2,2},{3,1,2,3},
+{3,1,3,0},{3,1,3,1},{3,1,3,2},{3,1,3,3},
+{3,2,0,0},{3,2,0,1},{3,2,0,2},{3,2,0,3},
+{3,2,1,0},{3,2,1,1},{3,2,1,2},{3,2,1,3},
+{3,2,2,0},{3,2,2,1},{3,2,2,2},{3,2,2,3},
+{3,2,3,0},{3,2,3,1},{3,2,3,2},{3,2,3,3},
+{3,3,0,0},{3,3,0,1},{3,3,0,2},{3,3,0,3},
+{3,3,1,0},{3,3,1,1},{3,3,1,2},{3,3,1,3},
+{3,3,2,0},{3,3,2,1},{3,3,2,2},{3,3,2,3},
+{3,3,3,0},{3,3,3,1},{3,3,3,2},{3,3,3,3},
+};
+uint8_t unpack_8_from_1_arr[256][8]={
+{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,1},{0,0,0,0,0,0,1,0},{0,0,0,0,0,0,1,1},
+{0,0,0,0,0,1,0,0},{0,0,0,0,0,1,0,1},{0,0,0,0,0,1,1,0},{0,0,0,0,0,1,1,1},
+{0,0,0,0,1,0,0,0},{0,0,0,0,1,0,0,1},{0,0,0,0,1,0,1,0},{0,0,0,0,1,0,1,1},
+{0,0,0,0,1,1,0,0},{0,0,0,0,1,1,0,1},{0,0,0,0,1,1,1,0},{0,0,0,0,1,1,1,1},
+{0,0,0,1,0,0,0,0},{0,0,0,1,0,0,0,1},{0,0,0,1,0,0,1,0},{0,0,0,1,0,0,1,1},
+{0,0,0,1,0,1,0,0},{0,0,0,1,0,1,0,1},{0,0,0,1,0,1,1,0},{0,0,0,1,0,1,1,1},
+{0,0,0,1,1,0,0,0},{0,0,0,1,1,0,0,1},{0,0,0,1,1,0,1,0},{0,0,0,1,1,0,1,1},
+{0,0,0,1,1,1,0,0},{0,0,0,1,1,1,0,1},{0,0,0,1,1,1,1,0},{0,0,0,1,1,1,1,1},
+{0,0,1,0,0,0,0,0},{0,0,1,0,0,0,0,1},{0,0,1,0,0,0,1,0},{0,0,1,0,0,0,1,1},
+{0,0,1,0,0,1,0,0},{0,0,1,0,0,1,0,1},{0,0,1,0,0,1,1,0},{0,0,1,0,0,1,1,1},
+{0,0,1,0,1,0,0,0},{0,0,1,0,1,0,0,1},{0,0,1,0,1,0,1,0},{0,0,1,0,1,0,1,1},
+{0,0,1,0,1,1,0,0},{0,0,1,0,1,1,0,1},{0,0,1,0,1,1,1,0},{0,0,1,0,1,1,1,1},
+{0,0,1,1,0,0,0,0},{0,0,1,1,0,0,0,1},{0,0,1,1,0,0,1,0},{0,0,1,1,0,0,1,1},
+{0,0,1,1,0,1,0,0},{0,0,1,1,0,1,0,1},{0,0,1,1,0,1,1,0},{0,0,1,1,0,1,1,1},
+{0,0,1,1,1,0,0,0},{0,0,1,1,1,0,0,1},{0,0,1,1,1,0,1,0},{0,0,1,1,1,0,1,1},
+{0,0,1,1,1,1,0,0},{0,0,1,1,1,1,0,1},{0,0,1,1,1,1,1,0},{0,0,1,1,1,1,1,1},
+{0,1,0,0,0,0,0,0},{0,1,0,0,0,0,0,1},{0,1,0,0,0,0,1,0},{0,1,0,0,0,0,1,1},
+{0,1,0,0,0,1,0,0},{0,1,0,0,0,1,0,1},{0,1,0,0,0,1,1,0},{0,1,0,0,0,1,1,1},
+{0,1,0,0,1,0,0,0},{0,1,0,0,1,0,0,1},{0,1,0,0,1,0,1,0},{0,1,0,0,1,0,1,1},
+{0,1,0,0,1,1,0,0},{0,1,0,0,1,1,0,1},{0,1,0,0,1,1,1,0},{0,1,0,0,1,1,1,1},
+{0,1,0,1,0,0,0,0},{0,1,0,1,0,0,0,1},{0,1,0,1,0,0,1,0},{0,1,0,1,0,0,1,1},
+{0,1,0,1,0,1,0,0},{0,1,0,1,0,1,0,1},{0,1,0,1,0,1,1,0},{0,1,0,1,0,1,1,1},
+{0,1,0,1,1,0,0,0},{0,1,0,1,1,0,0,1},{0,1,0,1,1,0,1,0},{0,1,0,1,1,0,1,1},
+{0,1,0,1,1,1,0,0},{0,1,0,1,1,1,0,1},{0,1,0,1,1,1,1,0},{0,1,0,1,1,1,1,1},
+{0,1,1,0,0,0,0,0},{0,1,1,0,0,0,0,1},{0,1,1,0,0,0,1,0},{0,1,1,0,0,0,1,1},
+{0,1,1,0,0,1,0,0},{0,1,1,0,0,1,0,1},{0,1,1,0,0,1,1,0},{0,1,1,0,0,1,1,1},
+{0,1,1,0,1,0,0,0},{0,1,1,0,1,0,0,1},{0,1,1,0,1,0,1,0},{0,1,1,0,1,0,1,1},
+{0,1,1,0,1,1,0,0},{0,1,1,0,1,1,0,1},{0,1,1,0,1,1,1,0},{0,1,1,0,1,1,1,1},
+{0,1,1,1,0,0,0,0},{0,1,1,1,0,0,0,1},{0,1,1,1,0,0,1,0},{0,1,1,1,0,0,1,1},
+{0,1,1,1,0,1,0,0},{0,1,1,1,0,1,0,1},{0,1,1,1,0,1,1,0},{0,1,1,1,0,1,1,1},
+{0,1,1,1,1,0,0,0},{0,1,1,1,1,0,0,1},{0,1,1,1,1,0,1,0},{0,1,1,1,1,0,1,1},
+{0,1,1,1,1,1,0,0},{0,1,1,1,1,1,0,1},{0,1,1,1,1,1,1,0},{0,1,1,1,1,1,1,1},
+{1,0,0,0,0,0,0,0},{1,0,0,0,0,0,0,1},{1,0,0,0,0,0,1,0},{1,0,0,0,0,0,1,1},
+{1,0,0,0,0,1,0,0},{1,0,0,0,0,1,0,1},{1,0,0,0,0,1,1,0},{1,0,0,0,0,1,1,1},
+{1,0,0,0,1,0,0,0},{1,0,0,0,1,0,0,1},{1,0,0,0,1,0,1,0},{1,0,0,0,1,0,1,1},
+{1,0,0,0,1,1,0,0},{1,0,0,0,1,1,0,1},{1,0,0,0,1,1,1,0},{1,0,0,0,1,1,1,1},
+{1,0,0,1,0,0,0,0},{1,0,0,1,0,0,0,1},{1,0,0,1,0,0,1,0},{1,0,0,1,0,0,1,1},
+{1,0,0,1,0,1,0,0},{1,0,0,1,0,1,0,1},{1,0,0,1,0,1,1,0},{1,0,0,1,0,1,1,1},
+{1,0,0,1,1,0,0,0},{1,0,0,1,1,0,0,1},{1,0,0,1,1,0,1,0},{1,0,0,1,1,0,1,1},
+{1,0,0,1,1,1,0,0},{1,0,0,1,1,1,0,1},{1,0,0,1,1,1,1,0},{1,0,0,1,1,1,1,1},
+{1,0,1,0,0,0,0,0},{1,0,1,0,0,0,0,1},{1,0,1,0,0,0,1,0},{1,0,1,0,0,0,1,1},
+{1,0,1,0,0,1,0,0},{1,0,1,0,0,1,0,1},{1,0,1,0,0,1,1,0},{1,0,1,0,0,1,1,1},
+{1,0,1,0,1,0,0,0},{1,0,1,0,1,0,0,1},{1,0,1,0,1,0,1,0},{1,0,1,0,1,0,1,1},
+{1,0,1,0,1,1,0,0},{1,0,1,0,1,1,0,1},{1,0,1,0,1,1,1,0},{1,0,1,0,1,1,1,1},
+{1,0,1,1,0,0,0,0},{1,0,1,1,0,0,0,1},{1,0,1,1,0,0,1,0},{1,0,1,1,0,0,1,1},
+{1,0,1,1,0,1,0,0},{1,0,1,1,0,1,0,1},{1,0,1,1,0,1,1,0},{1,0,1,1,0,1,1,1},
+{1,0,1,1,1,0,0,0},{1,0,1,1,1,0,0,1},{1,0,1,1,1,0,1,0},{1,0,1,1,1,0,1,1},
+{1,0,1,1,1,1,0,0},{1,0,1,1,1,1,0,1},{1,0,1,1,1,1,1,0},{1,0,1,1,1,1,1,1},
+{1,1,0,0,0,0,0,0},{1,1,0,0,0,0,0,1},{1,1,0,0,0,0,1,0},{1,1,0,0,0,0,1,1},
+{1,1,0,0,0,1,0,0},{1,1,0,0,0,1,0,1},{1,1,0,0,0,1,1,0},{1,1,0,0,0,1,1,1},
+{1,1,0,0,1,0,0,0},{1,1,0,0,1,0,0,1},{1,1,0,0,1,0,1,0},{1,1,0,0,1,0,1,1},
+{1,1,0,0,1,1,0,0},{1,1,0,0,1,1,0,1},{1,1,0,0,1,1,1,0},{1,1,0,0,1,1,1,1},
+{1,1,0,1,0,0,0,0},{1,1,0,1,0,0,0,1},{1,1,0,1,0,0,1,0},{1,1,0,1,0,0,1,1},
+{1,1,0,1,0,1,0,0},{1,1,0,1,0,1,0,1},{1,1,0,1,0,1,1,0},{1,1,0,1,0,1,1,1},
+{1,1,0,1,1,0,0,0},{1,1,0,1,1,0,0,1},{1,1,0,1,1,0,1,0},{1,1,0,1,1,0,1,1},
+{1,1,0,1,1,1,0,0},{1,1,0,1,1,1,0,1},{1,1,0,1,1,1,1,0},{1,1,0,1,1,1,1,1},
+{1,1,1,0,0,0,0,0},{1,1,1,0,0,0,0,1},{1,1,1,0,0,0,1,0},{1,1,1,0,0,0,1,1},
+{1,1,1,0,0,1,0,0},{1,1,1,0,0,1,0,1},{1,1,1,0,0,1,1,0},{1,1,1,0,0,1,1,1},
+{1,1,1,0,1,0,0,0},{1,1,1,0,1,0,0,1},{1,1,1,0,1,0,1,0},{1,1,1,0,1,0,1,1},
+{1,1,1,0,1,1,0,0},{1,1,1,0,1,1,0,1},{1,1,1,0,1,1,1,0},{1,1,1,0,1,1,1,1},
+{1,1,1,1,0,0,0,0},{1,1,1,1,0,0,0,1},{1,1,1,1,0,0,1,0},{1,1,1,1,0,0,1,1},
+{1,1,1,1,0,1,0,0},{1,1,1,1,0,1,0,1},{1,1,1,1,0,1,1,0},{1,1,1,1,0,1,1,1},
+{1,1,1,1,1,0,0,0},{1,1,1,1,1,0,0,1},{1,1,1,1,1,0,1,0},{1,1,1,1,1,0,1,1},
+{1,1,1,1,1,1,0,0},{1,1,1,1,1,1,0,1},{1,1,1,1,1,1,1,0},{1,1,1,1,1,1,1,1},
+};
+
+static
+void CC Unpack8From2(uint8_t *dst,const uint8_t *src,int32_t count)
+{
+	if(count > 0){
+		int i;
+		for(i=0;i<count/4;i++,dst+=4,src++){
+			memcpy(dst,unpack_8_from_2_arr[*src],4);
+		}
+		for(i=0;i< (count&3);i++){
+			dst[i] = unpack_8_from_2_arr[*src][i];
+		}
+	}
+}
+static
+void CC Unpack8From1(uint8_t *dst,const uint8_t *src,int32_t count)
+{
+	if(count > 0){
+		int i;
+		for(i=0;i<count/8;i++,dst+=8,src++){
+			memcpy(dst,unpack_8_from_1_arr[*src],8);
+		}
+		for(i=0;i< (count&7);i++){
+			dst[i] = unpack_8_from_1_arr[*src][i];
+		}
+	}
+}
+
+
 
 
 /* Unpack8
@@ -87,10 +248,23 @@ void CC Unpack8 ( uint32_t packed, uint32_t count, void *dst,
     uint64_t out;
     uint32_t abits;
     uint64_t src_mask;
-
     /* keep track of trailing bits */
     uint32_t discard = (uint32_t)( ( 0 - ( ssize += src_off ) ) & 7 );
 
+
+    if(src_off == 0){
+	switch(packed){
+	 case 1:
+		Unpack8From1(dst,src,count);
+		return;
+	 case 2:
+		Unpack8From2(dst,src,count);
+		return;
+	}
+    }
+	
+
+
     /* convert to bytes */
     ssize = ( ssize + 7 ) >> 3;
 
diff --git a/libs/klib/vector_namelist.c b/libs/klib/vector_namelist.c
index 75e6373..95dfdb8 100644
--- a/libs/klib/vector_namelist.c
+++ b/libs/klib/vector_namelist.c
@@ -38,6 +38,7 @@
 
 #include <stdlib.h>
 #include <string.h>
+#include <ctype.h>
 #include <assert.h>
 
 /*--------------------------------------------------------------------------
@@ -242,3 +243,59 @@ LIB_EXPORT rc_t CC VNamelistRemove( VNamelist *self, const char* s )
     }
     return rc;
 }
+
+
+
+/* Reorder
+ *  sort the names according to case sensitivity
+ *  and UNICODE character code ordering
+ *
+ *  "case_insensitive" [ IN ] - when true, perform "tolower" on
+ *   each character before compare
+ */
+static
+int CC vect_string_cmp ( const void **a, const void **b, void *ignore )
+{
+    return strcmp ( * a, * b );
+}
+
+static
+int CC vect_string_cmp_case ( const void **a, const void **b, void *ignore )
+{
+    uint32_t i;
+
+    const char *ap = * a;
+    const char *bp = * b;
+
+    if ( ap == NULL )
+        return bp != NULL;
+    if ( bp == NULL )
+        return -1;
+
+    for ( i = 0; ; ++ i )
+    {
+        if ( ap [ i ] != bp [ i ] )
+        {
+            /* TBD - this should perform UTF-8 to UNICODE conversion
+               but for that, create a function in text module */
+            int diff = tolower ( ap [ i ] ) - tolower ( bp [ i ] );
+            if ( diff == 0 )
+                continue;
+
+            return diff;
+        }
+
+        if ( ap [ i ] == 0 )
+            break;
+    }
+
+    return 0;
+}
+
+LIB_EXPORT void CC VNamelistReorder ( VNamelist *self, bool case_insensitive )
+{
+    if ( self != NULL )
+    {
+        VectorReorder ( & self -> name_vector, case_insensitive ? vect_string_cmp_case : vect_string_cmp, NULL );
+    }
+}
diff --git a/libs/klib/vlen-encode.c b/libs/klib/vlen-encode.c
index 9f5961b..f8e4349 100644
--- a/libs/klib/vlen-encode.c
+++ b/libs/klib/vlen-encode.c
@@ -31,6 +31,7 @@
 
 #include <byteswap.h>
 #include <endian.h>
+#include <string.h>
 
 LIB_EXPORT rc_t CC vlen_encode1(void *Dst, uint64_t dsize, uint64_t *psize, int64_t X) {
     int sgn = 0;
@@ -324,7 +325,7 @@ LIB_EXPORT rc_t CC vlen_decode ( int64_t *Y, uint64_t ycount,
 #endif
         XTYPE x;
         
-        x = *(const XTYPE *)(src + i);
+        memcpy (& x, src + i, sizeof x); /* may be misaligned */        
 #if __BYTE_ORDER == __BIG_ENDIAN
 #if XTYPE_SIZE == 32
         x = bswap_32(x);
diff --git a/libs/klib/win/syserrcode.c b/libs/klib/win/syserrcode.c
index fe85768..9176d92 100644
--- a/libs/klib/win/syserrcode.c
+++ b/libs/klib/win/syserrcode.c
@@ -73,7 +73,7 @@ size_t KWrtFmt_error_code ( char * buffer, size_t buffer_size, uint32_t error_co
         {
             if (*pc == '\r')
             {
-                *pc = '\0';
+                tbuffer_size = pc - tbuffer;
                 break;
             }
         }
diff --git a/libs/klib/win/systime.c b/libs/klib/win/systime.c
old mode 100755
new mode 100644
diff --git a/libs/klib/win/syswriter.c b/libs/klib/win/syswriter.c
index 6440fbc..b204afc 100644
--- a/libs/klib/win/syswriter.c
+++ b/libs/klib/win/syswriter.c
@@ -29,6 +29,7 @@
 #include <windows.h>
 #include <klib/writer.h>
 #include <klib/text.h>
+#include <klib/printf.h>
 #include "writer-priv.h"
 #include <stdio.h>
 #include <errno.h>
@@ -54,10 +55,24 @@ rc_t KWrtSysInit(void** h_stdout, void** h_stderr)
 LIB_EXPORT int CC snprintf ( char * buffer, size_t bufsize, const char * format, ... )
 {
     int ret;
+    size_t size;
+    rc_t rc;
     va_list args;
 
     va_start (args, format);
-    ret = _vsnprintf (buffer, bufsize, format, args);
+    rc = string_vprintf ( buffer, bufsize, &size, format, args );
+    if ( rc == 0 )
+    {
+        ret = size;
+    }
+    else
+    {
+        if ( ( GetRCState( rc ) == rcInsufficient )&&( GetRCObject( rc ) == rcBuffer ) )
+            ret = size;
+        else
+            ret = -1;
+    }
+/*    ret = _vsnprintf (buffer, bufsize, format, args); */
     va_end (args);
     return ret;
 }
diff --git a/libs/klib/writer.c b/libs/klib/writer.c
index 2e510fe..8bc592b 100644
--- a/libs/klib/writer.c
+++ b/libs/klib/writer.c
@@ -110,7 +110,7 @@ LIB_EXPORT rc_t CC KWrtInit( const char* appname, uint32_t vers )
 
         ext = string_chr(appname, progname_z, '.');
 
-        if( appname != NULL ) {
+        if( ext != NULL ) {
             wrt_app_length = ext - appname;
         } else {
             wrt_app_length = progname_z;
@@ -207,8 +207,8 @@ rc_t RCLiteral ( rc_t self, char *buffer, size_t bsize, size_t *num_writ )
 #endif
     return string_printf ( buffer, bsize, num_writ
 #if _DEBUGGING
-        , "rc = %s:$s:%u:%u.%u.%u.%u.%u"
-        , GetRCFilename(), GetRCFunction (), GetRCLineno ()
+        , "rc = %s:%u:$s:%u.%u.%u.%u.%u"
+        , GetRCFilename(), GetRCLineno (), GetRCFunction ()
 #else
         , "rc = %u.%u.%u.%u.%u"
 #endif
@@ -255,7 +255,7 @@ LIB_EXPORT rc_t CC RCExplain2 ( rc_t rc, char *buffer, size_t bsize, size_t *num
         const char *function = GetRCFunction ();
         if ( function != NULL )
         {
-            len = snprintf(buffer + total, bsize - total, "%s:%s:%u: ", GetRCFilename(), function, GetRCLineno () );
+            len = snprintf(buffer + total, bsize - total, "%s:%u:%s: ", GetRCFilename(), GetRCLineno (), function );
             if( len < 0 || ( total + len ) >= bsize ) {
                 return RCLiteral ( rc, buffer, bsize, num_writ );
             }
diff --git a/libs/kns/KCurlFile.c b/libs/kns/KCurlFile.c
new file mode 100644
index 0000000..18ff995
--- /dev/null
+++ b/libs/kns/KCurlFile.c
@@ -0,0 +1,716 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/* NOTE: uses VFS not KNS extern.h */
+#include <vfs/extern.h>
+
+struct KCurlFile;
+#define KFILE_IMPL struct KCurlFile
+#include <kfs/impl.h>
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <kns/manager.h>
+
+#include "kns_mgr_priv.h"
+
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define HTTP_RESPONSE_CODE_0_VALID false
+
+/*--------------------------------------------------------------------------
+ * KCurFile
+ */
+
+typedef struct KCurlFile
+{
+    KFile dad;
+    uint64_t file_size;
+    struct KNSManager *kns_mgr;
+    CURL *curl_handle;
+    bool file_size_valid;
+    bool verbose;
+    bool is_ftp;
+    char url[ 1 ];
+} KCurlFile;
+
+
+typedef struct ReadContext
+{
+    CURL *curl_handle;
+    uint8_t * buffer;
+    size_t buffer_size;
+    size_t num_read;
+    bool curl_handle_prepared;
+} ReadContext;
+
+static
+const char *curly_errstr ( CURLcode code )
+{
+    switch ( ( int ) code )
+    {
+#define CURL_CASE( c ) \
+        case c: return # c
+#define CURL_CASE2( c, old ) \
+        case old: return # c "(" #old ")"
+
+        CURL_CASE ( CURLE_OK );
+        CURL_CASE ( CURLE_UNSUPPORTED_PROTOCOL );
+        CURL_CASE ( CURLE_FAILED_INIT );
+        CURL_CASE ( CURLE_URL_MALFORMAT );
+        CURL_CASE2 ( CURLE_OBSOLETE4, CURLE_URL_MALFORMAT_USER );
+        CURL_CASE ( CURLE_COULDNT_RESOLVE_PROXY );
+        CURL_CASE ( CURLE_COULDNT_RESOLVE_HOST );
+        CURL_CASE ( CURLE_COULDNT_CONNECT );
+        CURL_CASE ( CURLE_FTP_WEIRD_SERVER_REPLY );
+        CURL_CASE2 ( CURLE_REMOTE_ACCESS_DENIED, CURLE_FTP_ACCESS_DENIED );
+        CURL_CASE2 ( CURLE_OBSOLETE10, CURLE_FTP_USER_PASSWORD_INCORRECT );
+        CURL_CASE ( CURLE_FTP_WEIRD_PASS_REPLY );
+        CURL_CASE2 ( CURLE_OBSOLETE12, CURLE_FTP_WEIRD_USER_REPLY );
+        CURL_CASE ( CURLE_FTP_WEIRD_PASV_REPLY );
+        CURL_CASE ( CURLE_FTP_WEIRD_227_FORMAT );
+        CURL_CASE ( CURLE_FTP_CANT_GET_HOST );
+        CURL_CASE2 ( CURLE_OBSOLETE16, CURLE_FTP_CANT_RECONNECT );
+        CURL_CASE2 ( CURLE_FTP_COULDNT_SET_TYPE, CURLE_FTP_COULDNT_SET_BINARY );
+        CURL_CASE ( CURLE_PARTIAL_FILE );
+        CURL_CASE ( CURLE_FTP_COULDNT_RETR_FILE );
+        CURL_CASE2 ( CURLE_OBSOLETE20, CURLE_FTP_WRITE_ERROR );
+        CURL_CASE2 ( CURLE_QUOTE_ERROR, CURLE_FTP_QUOTE_ERROR );
+        CURL_CASE ( CURLE_HTTP_RETURNED_ERROR );
+        CURL_CASE ( CURLE_WRITE_ERROR );
+        CURL_CASE2 ( CURLE_OBSOLETE24, CURLE_MALFORMAT_USER );
+        CURL_CASE2 ( CURLE_UPLOAD_FAILED, CURLE_FTP_COULDNT_STOR_FILE );
+        CURL_CASE ( CURLE_READ_ERROR );
+        CURL_CASE ( CURLE_OUT_OF_MEMORY );
+        CURL_CASE ( CURLE_OPERATION_TIMEDOUT );
+        CURL_CASE2 ( CURLE_OBSOLETE29, CURLE_FTP_COULDNT_SET_ASCII );
+        CURL_CASE ( CURLE_FTP_PORT_FAILED );
+        CURL_CASE ( CURLE_FTP_COULDNT_USE_REST );
+        CURL_CASE2 ( CURLE_OBSOLETE32, CURLE_FTP_COULDNT_GET_SIZE );
+        CURL_CASE2 ( CURLE_RANGE_ERROR, CURLE_HTTP_RANGE_ERROR );
+        CURL_CASE ( CURLE_HTTP_POST_ERROR );
+        CURL_CASE ( CURLE_SSL_CONNECT_ERROR );
+        CURL_CASE ( CURLE_BAD_DOWNLOAD_RESUME );
+        CURL_CASE ( CURLE_FILE_COULDNT_READ_FILE );
+        CURL_CASE ( CURLE_LDAP_CANNOT_BIND );
+        CURL_CASE ( CURLE_LDAP_SEARCH_FAILED );
+        CURL_CASE2 ( CURLE_OBSOLETE40, CURLE_LIBRARY_NOT_FOUND );
+        CURL_CASE ( CURLE_FUNCTION_NOT_FOUND );
+        CURL_CASE ( CURLE_ABORTED_BY_CALLBACK );
+        CURL_CASE ( CURLE_BAD_FUNCTION_ARGUMENT );
+        CURL_CASE2 ( CURLE_OBSOLETE44, CURLE_BAD_CALLING_ORDER );
+        CURL_CASE ( CURLE_INTERFACE_FAILED );
+        CURL_CASE2 ( CURLE_OBSOLETE46, CURLE_BAD_PASSWORD_ENTERED );
+        CURL_CASE ( CURLE_TOO_MANY_REDIRECTS );
+        CURL_CASE ( CURLE_UNKNOWN_TELNET_OPTION );
+        CURL_CASE ( CURLE_TELNET_OPTION_SYNTAX );
+        CURL_CASE2 ( CURLE_OBSOLETE50, CURLE_OBSOLETE );
+        CURL_CASE2 ( CURLE_PEER_FAILED_VERIFICATION, CURLE_SSL_PEER_CERTIFICATE );
+        CURL_CASE ( CURLE_GOT_NOTHING );
+        CURL_CASE ( CURLE_SSL_ENGINE_NOTFOUND );
+        CURL_CASE ( CURLE_SSL_ENGINE_SETFAILED );
+        CURL_CASE ( CURLE_SEND_ERROR );
+        CURL_CASE ( CURLE_RECV_ERROR );
+        CURL_CASE2 ( CURLE_OBSOLETE57, CURLE_SHARE_IN_USE );
+        CURL_CASE ( CURLE_SSL_CERTPROBLEM );
+        CURL_CASE ( CURLE_SSL_CIPHER );
+        CURL_CASE ( CURLE_SSL_CACERT );
+        CURL_CASE ( CURLE_BAD_CONTENT_ENCODING );
+        CURL_CASE ( CURLE_LDAP_INVALID_URL );
+        CURL_CASE ( CURLE_FILESIZE_EXCEEDED );
+        CURL_CASE2 ( CURLE_USE_SSL_FAILED, CURLE_FTP_SSL_FAILED );
+        CURL_CASE ( CURLE_SEND_FAIL_REWIND );
+        CURL_CASE ( CURLE_SSL_ENGINE_INITFAILED );
+        CURL_CASE ( CURLE_LOGIN_DENIED );
+        CURL_CASE ( CURLE_TFTP_NOTFOUND );
+        CURL_CASE ( CURLE_TFTP_PERM );
+        CURL_CASE2 ( CURLE_REMOTE_DISK_FULL, CURLE_TFTP_DISKFULL );
+        CURL_CASE ( CURLE_TFTP_ILLEGAL );
+        CURL_CASE ( CURLE_TFTP_UNKNOWNID );
+        CURL_CASE2 ( CURLE_REMOTE_FILE_EXISTS, CURLE_TFTP_EXISTS );
+        CURL_CASE ( CURLE_TFTP_NOSUCHUSER );
+        CURL_CASE ( CURLE_CONV_FAILED );
+        CURL_CASE ( CURLE_CONV_REQD );
+        CURL_CASE2 ( CURLE_SSL_CACERT_BADFILE, 77 );
+        CURL_CASE2 ( CURLE_REMOTE_FILE_NOT_FOUND, 78 );
+        CURL_CASE2 ( CURLE_SSH, 79 );        
+        CURL_CASE2 ( CURLE_SSL_SHUTDOWN_FAILED, 80 );
+        CURL_CASE2 ( CURLE_AGAIN, 81 );
+        CURL_CASE ( CURLE_SSL_CRL_BADFILE );
+        CURL_CASE2 ( CURLE_SSL_ISSUER_ERROR, 83 );
+    }
+
+    return "<UNKNOWN>";
+}
+
+
+/* Destroy
+ */
+static rc_t CC KCurlFileDestroy( KCurlFile *self )
+{
+    self->kns_mgr->curl_easy_cleanup_fkt( self->curl_handle );
+    KNSManagerRelease( self->kns_mgr );
+    free ( self );
+    return 0;
+}
+
+
+static struct KSysFile* KCurlFileGetSysFile( const KCurlFile *self, uint64_t *offset )
+{
+    * offset = 0;
+    return NULL;
+}
+
+
+static rc_t KCurlFileRandomAccess( const KCurlFile *self )
+{
+    return 0;
+}
+
+
+static size_t CC dummy_callback( void *ptr, size_t size, size_t nmemb, void *data )
+{
+    ( void )ptr;
+    ( void )data;
+    return (size_t)( size * nmemb );
+}
+
+
+static size_t CC KCurlFileCallback( void *ptr, size_t size, size_t nmemb, void *data )
+{
+    size_t given_bytes = size * nmemb; /* calculate the size given in ptr */
+    ReadContext *ctx = ( ReadContext * )data;
+    if ( ctx != NULL && ctx->buffer != NULL && ctx->buffer_size > 0 )
+    {
+        if ( ( ctx->num_read + given_bytes ) > ctx->buffer_size )
+        {
+            /* the caller-provided buffer IS NOT enough... */
+            size_t to_copy = ( ctx->buffer_size - ctx->num_read );
+            if ( to_copy > 0 )
+            {
+                /* the caller-provided buffer can hold a part of it... */
+                if ( ctx->buffer )
+                {
+                    memcpy( &( ctx->buffer[ ctx->num_read ] ), ptr, to_copy );
+                    ctx->num_read += to_copy;
+                }
+            }
+        }
+        else
+        {
+            /* the caller-provided buffer IS enough... */
+            if ( ctx->buffer )
+            {
+                memcpy( &( ctx->buffer[ ctx->num_read ] ), ptr, given_bytes );
+                ctx->num_read += given_bytes;
+            }
+        }
+    }
+    return given_bytes;
+}
+
+
+/* helper to set a curl-option which is a long int */
+static rc_t set_curl_long_option( struct KNSManager *kns_mgr, CURL *curl,
+                                  CURLoption option, long int value, const char *err_txt )
+{
+    rc_t rc = 0;
+    CURLcode rcc = kns_mgr->curl_easy_setopt_fkt( curl, option, value );
+    if ( rcc != CURLE_OK )
+    {
+        rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+        (void)PLOGERR( klogErr, ( klogErr, rc, "curl_easy_setopt( $(t), $(v) ) failed with curl-error $(e)", 
+                                  "t=%s,v=%d,e=%d", err_txt, value, rcc ) );
+    }
+    return rc;
+}
+
+
+/* helper to set a curl-option which is a void pointert */
+static rc_t set_curl_void_ptr( struct KNSManager *kns_mgr, CURL *curl,
+                               CURLoption option, void * value, const char *err_txt )
+{
+    rc_t rc = 0;
+    CURLcode rcc = kns_mgr->curl_easy_setopt_fkt( curl, option, value );
+    if ( rcc != CURLE_OK )
+    {
+        rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+        (void)PLOGERR( klogErr, ( klogErr, rc, "curl_easy_setopt( $(t) ... void * ptr ) failed with curl-error $(e)",
+                                  "t=%s,e=%d", err_txt, rcc ) );
+    }
+    return rc;
+}
+
+
+static rc_t perform( struct KNSManager *kns_mgr, CURL *curl, const char * action, uint64_t pos, size_t len )
+{
+    rc_t rc = 0;
+    CURLcode rcc = kns_mgr->curl_easy_perform_fkt( curl );
+    if ( rcc != CURLE_OK && rcc != CURLE_PARTIAL_FILE )
+    {
+        rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+        (void)PLOGERR( klogErr, ( klogErr, rc, 
+        "curl_easy_perform( $(a), $(b).$(c) ) failed with curl-error '$(d)' ($(e))",
+        "a=%s,b=%lu,c=%zu,d=%s,e=%d", action, pos, len, curly_errstr ( rcc ), rcc ) );
+    }
+    return rc;
+}
+
+
+static rc_t check_response_code( struct KNSManager *kns_mgr, CURL *curl,  const char * action )
+{
+    rc_t rc = 0;
+    long response_code;
+
+    CURLcode rcc = kns_mgr->curl_easy_getinfo_fkt( curl, CURLINFO_RESPONSE_CODE, &response_code );
+    if ( rcc != CURLE_OK )
+    {
+        rc = RC( rcFS, rcFile, rcAccessing, rcFileDesc, rcInvalid );
+        (void)PLOGERR( klogErr, ( klogErr, rc, 
+        "curl_easy_getinfo( $(a) ) failed with curl-error $(c)",
+        "a=%s,c=%d", action, rcc ) );
+    }
+    else
+    {
+        switch ( response_code )
+        {
+
+            case 0    : if ( !HTTP_RESPONSE_CODE_0_VALID )  /* no response code available */
+                        {
+                            rc = RC( rcFS, rcFile, rcAccessing, rcFileDesc, rcInvalid );
+                            (void)PLOGERR( klogErr, ( klogErr, rc, "invalid response-code $(c)", "c=%d", response_code ) );
+                        }
+                        break;
+
+            case 200  :          /* OK */
+            case 206  :          /* Partial Content */
+            case 416  : break;   /* Requested Range Not Satisfiable */
+
+            case 404  : rc = RC( rcFS, rcFile, rcAccessing, rcFileDesc, rcNotFound );
+                        break;
+
+            default   : rc = RC( rcFS, rcFile, rcAccessing, rcFileDesc, rcInvalid );
+                        (void)PLOGERR( klogErr, ( klogErr, rc, "invalid response-code $(c)", "c=%d", response_code ) );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t prepare_curl( const KCurlFile *cself, ReadContext *ctx )
+{
+    rc_t rc = 0;
+
+    if ( !ctx->curl_handle_prepared )
+    {
+        ctx->curl_handle = cself->kns_mgr->curl_easy_init_fkt();
+        if ( ctx->curl_handle == NULL )
+        {
+            rc = RC( rcFS, rcFile, rcConstructing, rcParam, rcNull );
+            LOGERR( klogErr, rc, "cannot init curl" );
+        }
+        else
+            ctx->curl_handle_prepared = true;
+    }
+
+    if ( rc == 0 && cself->verbose )
+        rc = set_curl_long_option( cself->kns_mgr, ctx->curl_handle, CURLOPT_VERBOSE, 1, "CURLOPT_VERBOSE" );
+
+    if ( rc == 0 )
+    {
+        CURLcode rcc = cself->kns_mgr->curl_easy_setopt_fkt( ctx->curl_handle, CURLOPT_WRITEFUNCTION, KCurlFileCallback );
+        if ( rcc != CURLE_OK )
+        {
+            rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+            (void)PLOGERR( klogErr, ( klogErr, rc, "curl_easy_setopt( $(t) ... ptr ) failed", "t=%s", "CURLOPT_WRITEFUNCTION" ) );
+        }
+    }
+
+    if ( rc == 0 )
+        rc = set_curl_void_ptr( cself->kns_mgr, ctx->curl_handle, CURLOPT_URL, ( void * )cself->url, "CURLOPT_URL" );
+
+    if ( rc == 0 )
+    {
+        ctx->buffer = NULL;
+        ctx->buffer_size = 0;
+        ctx->num_read = 0;
+    }
+    return rc;
+}
+
+
+static rc_t get_content_length( struct KNSManager *kns_mgr, CURL *curl, uint64_t *size )
+{
+    rc_t rc = 0;
+    double double_size;
+    CURLcode rcc = kns_mgr->curl_easy_getinfo_fkt( curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &double_size );
+    if ( rcc != CURLE_OK )
+    {
+        rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+        LOGERR( klogErr, rc, "curl_easy_getinfo( CURLINFO_CONTENT_LENGTH_DOWNLOAD ) failed" );
+    }
+    else
+    {
+        *size = double_size;
+    }
+    return rc;
+}
+
+
+static rc_t DiscoverFileSize_HTTP( const KCurlFile *cself, ReadContext *ctx, uint64_t *size )
+{
+    rc_t rc = set_curl_long_option( cself->kns_mgr, ctx->curl_handle, CURLOPT_HEADER, 1, "CURLOPT_HEADER" );
+
+    if ( rc == 0 )
+        rc = set_curl_long_option( cself->kns_mgr, ctx->curl_handle, CURLOPT_NOBODY, 1, "CURLOPT_NOBODY" );
+
+    if ( rc == 0 )
+        rc = set_curl_void_ptr( cself->kns_mgr, ctx->curl_handle, CURLOPT_WRITEDATA, ctx, "CURLOPT_WRITEDATA" );
+
+    if ( rc == 0 )
+        rc = set_curl_long_option( cself->kns_mgr, ctx->curl_handle, CURLOPT_FOLLOWLOCATION, 1, "CURLOPT_FOLLOWLOCATION" );
+
+    if ( rc == 0 )
+        rc = perform( cself->kns_mgr, ctx->curl_handle, "filesize http", 0, 0 );
+
+    if ( rc == 0 )
+        rc = check_response_code( cself->kns_mgr, ctx->curl_handle, "filesize http" );
+
+    if ( rc == 0 )
+        rc = get_content_length( cself->kns_mgr, ctx->curl_handle, size );
+
+    return rc;
+}
+
+static rc_t DiscoverFileSize_FTP( const KCurlFile *cself, ReadContext *ctx, uint64_t *size )
+{
+    rc_t rc = set_curl_long_option( cself->kns_mgr, ctx->curl_handle, CURLOPT_NOBODY, 1, "CURLOPT_NOBODY" );
+
+    if ( rc == 0 )
+        rc = set_curl_long_option( cself->kns_mgr, ctx->curl_handle, CURLOPT_FILETIME, 1, "CURLOPT_FILETIME" );
+
+    if ( rc == 0 )
+        rc = set_curl_long_option( cself->kns_mgr, ctx->curl_handle, CURLOPT_FOLLOWLOCATION, 1, "CURLOPT_FOLLOWLOCATION" );
+
+    if ( rc == 0 )
+    {
+        CURLcode rcc = cself->kns_mgr->curl_easy_setopt_fkt( ctx->curl_handle, CURLOPT_HEADERFUNCTION, dummy_callback );
+        if ( rcc != CURLE_OK )
+        {
+            rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+            (void)PLOGERR( klogErr, ( klogErr, rc, "curl_easy_setopt( $(t) ... ptr ) failed", "t=%s", "CURLOPT_HEADERFUNCTION" ) );
+        }
+    }
+
+    if ( rc == 0 )
+        rc = set_curl_long_option( cself->kns_mgr, ctx->curl_handle, CURLOPT_HEADER, 0, "CURLOPT_HEADER" );
+
+    if ( rc == 0 )
+        rc = perform( cself->kns_mgr, ctx->curl_handle, "filesize ftp", 0, 0 );
+
+    if ( rc == 0 )
+        rc = get_content_length( cself->kns_mgr, ctx->curl_handle, size );
+
+    return rc;
+}
+
+
+static rc_t KCurlFileDiscoverSize( const KCurlFile *cself, uint64_t *size )
+{
+    ReadContext ctx;
+    rc_t rc;
+
+    memset( &ctx, 0, sizeof ctx );
+    rc = prepare_curl( cself, &ctx );
+    if ( rc == 0 )
+    {
+        if ( cself->is_ftp )
+            rc = DiscoverFileSize_FTP( cself, &ctx, size );
+        else
+            rc = DiscoverFileSize_HTTP( cself, &ctx, size );
+
+        if ( rc == 0 )
+        {
+            KCurlFile *self = ( KCurlFile * )cself;
+
+            self->file_size = *size;
+            self->file_size_valid = true;
+    /*        OUTMSG(( ">>>>>>>>>>>>>> and the file size is: %lu\n", self->file_size )); */
+        }
+
+        if ( ctx.curl_handle_prepared )
+            cself->kns_mgr->curl_easy_cleanup_fkt( ctx.curl_handle );
+    }
+    return rc;
+}
+
+
+static rc_t KCurlFileSize( const KCurlFile *self, uint64_t *size )
+{
+    rc_t rc = 0;
+    if ( self->file_size_valid )
+        *size = self->file_size;
+    else
+        rc = KCurlFileDiscoverSize( self, size );
+    return rc;
+}
+
+
+static rc_t KCurlFileSetSize( KCurlFile *self, uint64_t size )
+{
+    return RC ( rcFS, rcFile, rcUpdating, rcFile, rcReadonly );
+}
+
+
+static rc_t KCurlFileRead( const KCurlFile *cself, uint64_t pos,
+                           void *buffer, size_t bsize, size_t *num_read )
+{
+    ReadContext ctx;
+    rc_t rc;
+
+    if ( cself->file_size_valid && cself->file_size > 0 )
+    {
+        /* we know the size of the remote file */
+        if ( pos >= cself->file_size )
+        {
+            /* the caller requested to read beyond the end of the file */
+            *num_read = 0;
+            return 0;
+        }
+        else if ( pos + bsize > cself->file_size )
+        {
+            /* the caller requested to start reading inside the file, but bsize reaches beyond the end of the file */
+            bsize = ( cself->file_size - pos );
+        }
+    }
+
+    ctx.curl_handle = cself->curl_handle;
+    ctx.curl_handle_prepared = true;
+    rc = prepare_curl( cself, &ctx );
+    if ( rc == 0 )
+    {
+        char s_range[ 64 ];
+        size_t s_range_writ;
+        uint64_t to = pos;
+        to += bsize;
+        to --;
+
+        /* perform range-read... */
+        rc = string_printf( s_range, sizeof s_range, &s_range_writ, "%lu-%lu", pos, to );
+        if ( rc == 0 )
+        {
+            ReadContext ctx;
+            CURLcode rcc;
+
+            ctx.buffer = buffer;
+            ctx.buffer_size = bsize;
+            ctx.num_read = 0;
+
+            rcc = cself->kns_mgr->curl_easy_setopt_fkt( cself->curl_handle, CURLOPT_WRITEDATA, (void *)&ctx );
+            if ( rcc != CURLE_OK )
+            {
+                rc = RC( rcFS, rcFile, rcReading, rcFileDesc, rcInvalid );
+                LOGERR( klogErr, rc, "curl_easy_setopt( CURLOPT_WRITEDATA ) failed" );
+            }
+
+            if ( rc == 0 )
+                rc = set_curl_long_option( cself->kns_mgr, cself->curl_handle, CURLOPT_CONNECTTIMEOUT, 10, "CURLOPT_CONNECTTIMEOUT" );
+            if ( rc == 0 )
+                rc = set_curl_long_option( cself->kns_mgr, cself->curl_handle, CURLOPT_TIMEOUT, 10, "CURLOPT_TIMEOUT" );
+            if ( rc == 0 )
+                rc = set_curl_long_option( cself->kns_mgr, cself->curl_handle, CURLOPT_FOLLOWLOCATION, 1, "CURLOPT_FOLLOWLOCATION" );
+
+            if ( rc == 0 )
+            {
+                rcc = cself->kns_mgr->curl_easy_setopt_fkt( cself->curl_handle, CURLOPT_RANGE, (void*)s_range );
+                if ( rcc != CURLE_OK )
+                {
+                    rc = RC( rcFS, rcFile, rcReading, rcFileDesc, rcInvalid );
+                    LOGERR( klogErr, rc, "curl_easy_setopt( CURLOPT_RANGE ) failed" );
+                }
+            }
+
+            if ( rc == 0 )
+                rc = perform( cself->kns_mgr, cself->curl_handle, "FileRead", pos, bsize );
+
+            if ( rc == 0 )
+            {
+                long response_code;
+                rcc = cself->kns_mgr->curl_easy_getinfo_fkt( cself->curl_handle, CURLINFO_RESPONSE_CODE, &response_code );
+                if ( rcc != CURLE_OK )
+                {
+                    rc = RC( rcFS, rcFile, rcReading, rcFileDesc, rcInvalid );
+                    LOGERR( klogErr, rc, "curl_easy_getinfo( RESPONSE_CODE ) failed" );
+                }
+                else
+                {
+                    if ( cself->is_ftp )
+                    {
+                        switch ( response_code )
+                        {
+                            case 0    : if ( !HTTP_RESPONSE_CODE_0_VALID )  /* no response code available */
+                                        {
+                                            rc = RC( rcFS, rcFile, rcReading, rcFileDesc, rcInvalid );
+                                            (void)PLOGERR( klogErr, ( klogErr, rc, "invalid response-code $(c)", "c=%d", response_code ) );
+                                        }
+                                        break;
+
+                            case 226  :
+                            case 213  :
+                            case 450  :          /* Transfer aborted */
+                            case 451  : break;
+
+                            default : rc = RC( rcFS, rcFile, rcReading, rcFileDesc, rcInvalid );
+                                      (void)PLOGERR( klogErr, ( klogErr, rc, "invalid response-code $(c)", "c=%d", response_code ) );
+                        }
+                    }
+                    else
+                    {
+                        switch ( response_code )
+                        {
+                            case 0    : if ( !HTTP_RESPONSE_CODE_0_VALID )  /* no response code available */
+                                        {
+                                            rc = RC( rcFS, rcFile, rcReading, rcFileDesc, rcInvalid );
+                                            (void)PLOGERR( klogErr, ( klogErr, rc, "invalid response-code $(c)", "c=%d", response_code ) );
+                                        }
+                                        break;
+
+                            case 416 :          /* Requested Range Not Satisfiable */
+                                       ctx.num_read = 0;
+                            case 200 :          /* OK */
+                            case 206 :          /* Partial Content */
+                                       break;
+
+                            case 404 : rc = RC( rcFS, rcFile, rcReading, rcFileDesc, rcNotFound );
+                                       break;
+
+                            default : rc = RC( rcFS, rcFile, rcReading, rcFileDesc, rcInvalid );
+                                      (void)PLOGERR( klogErr, ( klogErr, rc, "invalid response-code $(c)", "c=%d", response_code ) );
+                        }
+                    }
+                }
+            }
+            if ( rc == 0 )
+                *num_read = ctx.num_read;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t KCurlFileWrite( KCurlFile *self, uint64_t pos,
+                            const void *buffer, size_t size, size_t *num_writ )
+{
+    return RC ( rcFS, rcFile, rcUpdating, rcInterface, rcUnsupported );
+}
+
+
+static KFile_vt_v1 vtKCurlFile =
+{
+    /* version 1.0 */
+    1, 0,
+
+    /* start minor version 0 methods */
+    KCurlFileDestroy,
+    KCurlFileGetSysFile,
+    KCurlFileRandomAccess,
+    KCurlFileSize,
+    KCurlFileSetSize,
+    KCurlFileRead,
+    KCurlFileWrite
+    /* end minor version 0 methods */
+};
+
+
+LIB_EXPORT rc_t CC KCurlFileMake( const KFile **fp, const char * url, bool verbose )
+{
+    rc_t rc = 0;
+    KCurlFile *f;
+
+    if ( url == NULL || url[ 0 ] == 0 )
+    {
+        rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+        PLOGERR( klogInt, ( klogInt, rc, "invalid url >$(URL)<", "URL=%s", url ) );
+    }
+    else
+    {
+        size_t url_len = string_size( url ) + 1;
+        f = calloc ( ( sizeof *f ) + url_len, 1 );
+        if ( f == NULL )
+        {
+            rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
+            LOGERR( klogErr, rc, "out of memory" );
+        }
+        else
+        {
+            rc = KNSManagerMake( &f->kns_mgr );
+            if ( rc == 0 )
+            {
+                rc = KNSManagerAvail( f->kns_mgr );
+                if ( rc == 0 )
+                {
+                    rc = KFileInit( &f ->dad, (const union KFile_vt *)&vtKCurlFile, "KCurlFile", url, true, false );
+                    if ( rc == 0 )
+                    {
+                        ReadContext ctx;
+                        uint64_t file_size;
+
+                        memset( &ctx, 0, sizeof( ctx ) ); /* zero-out the content */
+
+                        string_copy( f->url, url_len, url, url_len );
+                        f->verbose = verbose;
+                        f->is_ftp = ( url_len >= 4 ) ? ( strcase_cmp ( f->url, url_len, "ftp:", 4, 4 ) == 0 ) : false;
+
+                        rc = KCurlFileDiscoverSize( f, &file_size );
+
+                        if ( rc == 0 )
+                        {
+                            rc = prepare_curl( f, &ctx );
+                            if ( rc == 0 )
+                            {
+                                f->curl_handle = ctx.curl_handle;
+                                *fp = & f -> dad;
+                                return rc;
+                            }
+                            else
+                            {
+                                KCurlFileDestroy( f );
+                                f = NULL;
+                            }
+                        }
+                    }
+                }
+            }
+            free( f );
+        }
+    }
+    return rc;
+}
diff --git a/libs/kns/KCurlRequest.c b/libs/kns/KCurlRequest.c
new file mode 100644
index 0000000..58b6a3c
--- /dev/null
+++ b/libs/kns/KCurlRequest.c
@@ -0,0 +1,438 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kns/extern.h>
+
+#include <klib/refcount.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/data-buffer.h>
+#include <kns/manager.h>
+#include <kns/KCurlRequest.h>
+
+#include "kns_mgr_priv.h"
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+
+static const char kcurlrequest_classname [] = "KCurlRequest";
+
+
+typedef struct KCurlRequest
+{
+    KRefcount refcount;
+    const struct KNSManager * kns_mgr;
+    CURL * curl_handle;
+    KDataBuffer fields;
+    uint64_t fields_chars;
+} KCurlRequest;
+
+
+static rc_t KCurlRequestSetUrl( struct KCurlRequest *self, const char * url )
+{
+    rc_t rc = 0;
+    CURLcode rcc = self->kns_mgr->curl_easy_setopt_fkt( self->curl_handle, CURLOPT_URL, (void *)url );
+    if ( rcc != CURLE_OK )
+    {
+        rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+        LOGERR( klogErr, rc, "curl_easy_setopt( CURLOPT_URL ) failed" );
+    }
+    return rc;
+}
+
+
+static rc_t set_curl_long_option( struct KCurlRequest *self, CURLoption option, long int value, const char *err_txt )
+{
+    rc_t rc = 0;
+    CURLcode rcc = self->kns_mgr->curl_easy_setopt_fkt( self->curl_handle, option, value );
+    if ( rcc != CURLE_OK )
+    {
+        rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+        (void)PLOGERR( klogErr, ( klogErr, rc, "curl_easy_setopt( $(t), $(v) ) failed with curl-error $(e)", 
+                                  "t=%s,v=%d,e=%d", err_txt, value, rcc ) );
+    }
+    return rc;
+}
+
+
+static rc_t set_verbose( struct KCurlRequest *self )
+{
+    return set_curl_long_option( self, CURLOPT_VERBOSE, 1, "CURLOPT_VERBOSE" );
+}
+
+
+LIB_EXPORT rc_t CC KNSManagerMakeRequest( const struct KNSManager *kns_mgr, struct KCurlRequest **self, const char * url, bool verbose )
+{
+    rc_t rc = 0;
+    struct KCurlRequest *tmp = calloc ( sizeof *tmp, 1 );
+    if ( tmp == NULL )
+    {
+        rc = RC ( rcFS, rcFile, rcConstructing, rcMemory, rcExhausted );
+        LOGERR( klogErr, rc, "out of memory" );
+    }
+    else
+    {
+        rc = KNSManagerAvail( kns_mgr );
+        if ( rc == 0 )
+        {
+            tmp->kns_mgr = kns_mgr;
+            rc = KNSManagerAddRef ( kns_mgr );
+            if ( rc == 0 )
+            {
+                tmp->curl_handle = tmp->kns_mgr->curl_easy_init_fkt();
+                if ( tmp->curl_handle == NULL )
+                {
+                    rc = RC( rcFS, rcFile, rcConstructing, rcParam, rcNull );
+                    LOGERR( klogErr, rc, "cannot init curl" );
+                }
+                else
+                {
+                    rc = KCurlRequestSetUrl( tmp, url );
+                    if ( rc == 0 )
+                    {
+                        if ( verbose )
+                            rc = set_verbose( tmp );
+                        memset( &tmp->fields, 0, sizeof tmp->fields );
+                        tmp->fields.elem_bits = 8;
+                        if ( rc == 0 )
+                        {
+                            KRefcountInit( &tmp->refcount, 1, "KNS", "make", kcurlrequest_classname );
+                            *self = tmp;
+                            return rc;      /* !!!! */
+                        }
+                    }
+                }
+                KNSManagerRelease( kns_mgr );
+            }
+        }
+        free( tmp );
+    }
+    return rc;
+}
+
+
+static rc_t KCurlRequestDestroy( struct KCurlRequest *self )
+{
+    rc_t rc;
+    self->kns_mgr->curl_easy_cleanup_fkt( self->curl_handle );
+    rc = KNSManagerRelease( self->kns_mgr );
+    KDataBufferWhack( &self->fields );
+    free ( self );
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC KCurlRequestAddRef ( const struct KCurlRequest *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd( &self->refcount, kcurlrequest_classname ) )
+        {
+        case krefOkay:
+            break;
+        case krefZero:
+            return RC( rcNS, rcFile, rcAttaching, rcRefcount, rcIncorrect);
+        case krefLimit:
+            return RC( rcNS, rcFile, rcAttaching, rcRefcount, rcExhausted);
+        case krefNegative:
+            return RC( rcNS, rcFile, rcAttaching, rcRefcount, rcInvalid);
+        default:
+            return RC( rcNS, rcFile, rcAttaching, rcRefcount, rcUnknown);
+        }
+    }
+    return 0;
+}
+
+
+LIB_EXPORT rc_t CC KCurlRequestRelease( const struct KCurlRequest *self )
+{
+    rc_t rc = 0;
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop( &self->refcount, kcurlrequest_classname ) )
+        {
+        case krefOkay:
+        case krefZero:
+            break;
+        case krefWhack:
+            rc = KCurlRequestDestroy( ( struct KCurlRequest * )self );
+            break;
+        case krefNegative:
+            return RC( rcNS, rcFile, rcAttaching, rcRefcount, rcInvalid );
+        default:
+            rc = RC( rcNS, rcFile, rcAttaching, rcRefcount, rcUnknown );
+            break;            
+        }
+    }
+    return rc;
+}
+
+
+static rc_t perform( const struct KNSManager *kns_mgr, CURL *curl, const char * action )
+{
+    rc_t rc = 0;
+    CURLcode rcc = kns_mgr->curl_easy_perform_fkt( curl );
+    if ( rcc != CURLE_OK && rcc != CURLE_PARTIAL_FILE )
+    {
+        rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+        (void)PLOGERR( klogErr, ( klogErr, rc, 
+        "curl_easy_perform( $(a) ) failed with curl-error $(c)",
+        "a=%s,b=%d", action, rcc ) );
+    }
+    return rc;
+}
+
+
+static rc_t check_response_code( const struct KNSManager *kns_mgr, CURL *curl,  const char * action )
+{
+    rc_t rc = 0;
+    long response_code;
+
+    CURLcode rcc = kns_mgr->curl_easy_getinfo_fkt( curl, CURLINFO_RESPONSE_CODE, &response_code );
+    if ( rcc != CURLE_OK )
+    {
+        rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+        (void)PLOGERR( klogErr, ( klogErr, rc, 
+        "curl_easy_getinfo( $(a) ) failed with curl-error $(c)",
+        "a=%s,c=%d", action, rcc ) );
+    }
+    else
+    {
+        switch ( response_code )
+        {
+            case 0   :          /* no response code available */
+            case 200 : break;   /* OK */
+
+            case 404 : rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcNotFound );
+                       break;
+
+            default : rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+                      (void)PLOGERR( klogErr, ( klogErr, rc, "invalid response-code $(c)", "c=%d", response_code ) );
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC KCurlRequestAddSFields( struct KCurlRequest *self, const String * fields )
+{
+    rc_t rc = 0;
+
+    if ( self == NULL )
+        return RC( rcNS, rcFile, rcReading, rcSelf, rcNull );
+    if ( fields == NULL || fields->size == 0 )
+        return RC( rcNS, rcFile, rcReading, rcParam, rcNull );
+
+    if ( self->fields_chars == 0 )
+    {
+        rc = KDataBufferResize ( &self->fields, fields->size + 1 );
+        if ( rc == 0 )
+        {
+            memcpy( self->fields.base, fields->addr, fields->size );
+            ( (uint8_t *)self->fields.base)[ fields->size ] = 0;
+            self->fields_chars = fields->size;
+        }
+    }
+    else
+    {
+        rc = KDataBufferResize ( &self->fields, self->fields_chars + fields->size + 1 );
+        if ( rc == 0 )
+        {
+            ( (uint8_t *)self->fields.base)[ self->fields_chars ] = '&';
+            memcpy( &( ( (uint8_t *)self->fields.base)[ self->fields_chars + 1 ] ), fields->addr, fields->size );
+            self->fields_chars += ( fields->size + 1 );
+            ( (uint8_t *)self->fields.base)[ self->fields_chars ] = 0;
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC KCurlRequestAddFields( struct KCurlRequest *self, const char * fields )
+{
+    String s;
+
+    if ( self == NULL )
+        return RC( rcNS, rcFile, rcReading, rcSelf, rcNull );
+    if ( fields == NULL || fields[ 0 ] == 0 )
+        return RC( rcNS, rcFile, rcReading, rcParam, rcNull );
+
+    StringInitCString( &s, fields );
+    return KCurlRequestAddSFields( self, &s );
+}
+
+
+LIB_EXPORT rc_t CC KCurlRequestAddSField( struct KCurlRequest *self, const String * name, const String * value )
+{
+    rc_t rc = 0;
+    size_t needed;
+
+    if ( self == NULL )
+        return RC( rcNS, rcFile, rcReading, rcSelf, rcNull );
+    if ( name == NULL || name->size == 0 || value == NULL || value->size == 0 )
+        return RC( rcNS, rcFile, rcReading, rcParam, rcNull );
+
+    needed = ( self->fields_chars + name->size + value->size + 3 );
+    rc = KDataBufferResize ( &self->fields, needed );
+    if ( rc == 0 )
+    {
+        size_t num_writ;
+        if ( self->fields_chars == 0 )
+        {
+            rc = string_printf ( ( char * )self->fields.base, needed, &num_writ, 
+                                 "%S=%S", name, value );
+        }
+        else
+        {
+            uint8_t * dst = ( uint8_t * )self->fields.base;
+            rc = string_printf ( ( char * )( &dst[ self->fields_chars ] ), needed - self->fields_chars, &num_writ, 
+                                 "&%S=%S", name, value );
+        }
+        if ( rc == 0 )
+            self->fields_chars += num_writ;
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC KCurlRequestAddField( struct KCurlRequest *self, const char * name, const char * value )
+{
+    String s_name, s_value;
+
+    if ( self == NULL )
+        return RC( rcNS, rcFile, rcReading, rcSelf, rcNull );
+    if ( name == NULL || name[ 0 ] == 0 || value == NULL || value[ 0 ] == 0 )
+        return RC( rcNS, rcFile, rcReading, rcParam, rcNull );
+
+    StringInitCString( &s_name, name );
+    StringInitCString( &s_value, value );
+    return KCurlRequestAddSField( self, &s_name, &s_value );
+}
+
+
+static rc_t KCurlRequestSetFields( struct KCurlRequest *self )
+{
+    rc_t rc = 0;
+    CURLcode rcc = self->kns_mgr->curl_easy_setopt_fkt( self->curl_handle, CURLOPT_POSTFIELDS, (void *)(self->fields.base) );
+    if ( rcc != CURLE_OK )
+    {
+        rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+        LOGERR( klogErr, rc, "curl_easy_setopt( CURLOPT_POSTFIELDS ) failed" );
+    }
+    return rc;
+}
+
+
+typedef struct ReadContext
+{
+    KDataBuffer * buffer;
+    size_t num_read;
+} ReadContext;
+
+
+static size_t CC KCurlFileCallback( void *ptr, size_t size, size_t nmemb, void *data )
+{
+    rc_t rc = 0;
+    size_t given_bytes = size * nmemb; /* calculate the size given in ptr */
+    ReadContext *ctx = ( ReadContext * )data;
+    if ( ctx != NULL && ctx->buffer != NULL )
+    {
+        rc = KDataBufferResize ( ctx->buffer, ctx->num_read + given_bytes + 2 );
+        if ( rc == 0 )
+        {
+            memcpy( &( ( (uint8_t *)ctx->buffer->base )[ ctx->num_read ] ), ptr, given_bytes );
+            ctx->num_read += given_bytes;
+        }
+    }
+    return given_bytes;
+}
+
+
+LIB_EXPORT rc_t CC KCurlRequestPerform( struct KCurlRequest *self, KDataBuffer * buffer )
+{
+    CURLcode rcc;
+    ReadContext ctx;
+    rc_t rc = 0;
+
+    if ( buffer == NULL )
+        return RC( rcNS, rcFile, rcReading, rcParam, rcNull );
+
+    memset ( buffer, 0, sizeof * buffer );
+
+    if ( self == NULL )
+        return RC( rcNS, rcFile, rcReading, rcSelf, rcNull );
+
+    rc = KDataBufferMakeBytes ( buffer, 0 );
+    if ( rc != 0 )
+        return rc;
+
+    ctx.buffer = buffer;
+    ctx.num_read = 0;
+
+    rcc = self->kns_mgr->curl_easy_setopt_fkt( self->curl_handle, CURLOPT_WRITEDATA, (void *)&ctx );
+    if ( rcc != CURLE_OK )
+    {
+        rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+        LOGERR( klogErr, rc, "curl_easy_setopt( CURLOPT_WRITEDATA ) failed" );
+    }
+
+    if ( rc == 0 )
+    {
+        CURLcode rcc = self->kns_mgr->curl_easy_setopt_fkt( self->curl_handle, CURLOPT_WRITEFUNCTION, KCurlFileCallback );
+        if ( rcc != CURLE_OK )
+        {
+            rc = RC( rcFS, rcFile, rcConstructing, rcFileDesc, rcInvalid );
+            LOGERR( klogErr, rc, "curl_easy_setopt( CURLOPT_WRITEFUNCTION ) failed" );
+        }
+    }
+
+    if ( rc == 0 )
+        rc = set_curl_long_option( self, CURLOPT_FOLLOWLOCATION, 1, "CURLOPT_FOLLOWLOCATION" );
+
+    if ( rc == 0 )
+        rc = KCurlRequestSetFields( self );
+
+    if ( rc == 0 )
+        rc = perform( self->kns_mgr, self->curl_handle, "POST request" );
+
+    if ( rc == 0 )
+        rc = check_response_code( self->kns_mgr, self->curl_handle, "POST request" );
+
+    if ( rc == 0 )
+    {
+        buffer->elem_count = ctx.num_read;
+        ( ( uint8_t * )buffer->base )[ ctx.num_read ] = 0;
+    }
+
+    return rc;
+}
diff --git a/libs/kns/Makefile b/libs/kns/Makefile
new file mode 100644
index 0000000..5000851
--- /dev/null
+++ b/libs/kns/Makefile
@@ -0,0 +1,125 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: all
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = libs/kns
+
+INT_LIBS = \
+
+EXT_LIBS = \
+	libkns \
+	libkurl
+
+ALL_LIBS = \
+	$(INT_LIBS) \
+	$(EXT_LIBS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+
+# we are building it on all platforms now, because dependency on libcurl is removed
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/std
+
+$(INT_LIBS): makedirs
+	@ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_LIBS): makedirs
+	@ $(MAKE_CMD) $(LIBDIR)/$@
+
+.PHONY: all std $(ALL_LIBS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
+	$(addprefix $(LIBDIR)/,$(EXT_LIBS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# kns
+#
+$(LIBDIR)/libkns: $(addprefix $(LIBDIR)/libkns.,$(LIBEXT))
+
+KNS_SRC = \
+	kns_manager \
+	stream \
+	stream-from-files \
+	stream-from-streams \
+#	sysstream \
+
+KNS_OBJ = \
+	$(addsuffix .$(LOBX),$(KNS_SRC))
+
+KNS_LIB = \
+    -lkfs \
+	-dklib
+
+$(LIBDIR)/libkns.$(SHLX): $(KNS_OBJ)
+	$(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(KNS_LIB)
+
+$(LIBDIR)/libkns.$(LIBX): $(KNS_OBJ)
+	$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(KNS_LIB)
+
+
+#-------------------------------------------------------------------------------
+# kurl
+#
+$(LIBDIR)/libkurl: $(addprefix $(LIBDIR)/libkurl.,$(LIBEXT))
+
+KURL_SRC = \
+	KCurlFile \
+	KCurlRequest \
+	url-fetcher \
+	url-fetcher-curl \
+	entrez-fetcher
+
+KURL_OBJ = \
+	$(addsuffix .$(LOBX),$(KURL_SRC))
+
+KURL_LIB = \
+	-skns \
+	-dkfs \
+	-dklib \
+	-dz
+
+$(LIBDIR)/libkurl.$(SHLX): $(KURL_OBJ)
+	$(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(KURL_LIB)
+
+$(LIBDIR)/libkurl.$(LIBX): $(KURL_OBJ)
+	$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(KURL_LIB)
diff --git a/libs/kns/curlhdr/curl.h b/libs/kns/curlhdr/curl.h
new file mode 100644
index 0000000..1cfc7fa
--- /dev/null
+++ b/libs/kns/curlhdr/curl.h
@@ -0,0 +1,1600 @@
+#ifndef __CURL_CURL_H
+#define __CURL_CURL_H
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel at haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * $Id: curl.h,v 1.1 2012/11/09 17:54:52 rodarmer Exp $
+ ***************************************************************************/
+
+/* If you have problems, all libcurl docs and details are found here:
+   http://curl.haxx.se/libcurl/
+*/
+
+#include "curlver.h" /* the libcurl version defines */
+
+#include <stdio.h>
+#include <limits.h>
+
+/* The include stuff here below is mainly for time_t! */
+#ifdef vms
+# include <types.h>
+# include <time.h>
+#else
+# include <sys/types.h>
+# include <time.h>
+#endif /* defined (vms) */
+
+typedef void CURL;
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Decorate exportable functions for Win32 DLL linking.
+ * This avoids using a .def file for building libcurl.dll.
+ */
+#if (defined(WIN32) || defined(_WIN32)) && !defined(CURL_STATICLIB)
+#if defined(BUILDING_LIBCURL)
+#define CURL_EXTERN  __declspec(dllexport)
+#else
+#define CURL_EXTERN  __declspec(dllimport)
+#endif
+#else
+
+#ifdef CURL_HIDDEN_SYMBOLS
+/*
+ * This definition is used to make external definitions visibile in the
+ * shared library when symbols are hidden by default.  It makes no
+ * difference when compiling applications whether this is set or not,
+ * only when compiling the library.
+ */
+#define CURL_EXTERN CURL_EXTERN_SYMBOL
+#else
+#define CURL_EXTERN
+#endif
+#endif
+
+/*
+ * We want the typedef curl_off_t setup for large file support on all
+ * platforms. We also provide a CURL_FORMAT_OFF_T define to use in *printf
+ * format strings when outputting a variable of type curl_off_t.
+ *
+ * Note: "pocc -Ze" is MSVC compatibily mode and this sets _MSC_VER!
+ */
+
+#if (defined(_MSC_VER) && !defined(__POCC__)) || (defined(__LCC__) && defined(WIN32))
+/* MSVC */
+#ifdef _WIN32_WCE
+  typedef long curl_off_t;
+#define CURL_FORMAT_OFF_T "%ld"
+#else
+  typedef signed __int64 curl_off_t;
+#define CURL_FORMAT_OFF_T "%I64d"
+#endif
+#else /* (_MSC_VER && !__POCC__) || (__LCC__ && WIN32) */
+#if (defined(__GNUC__) && defined(WIN32)) || defined(__WATCOMC__)
+/* gcc on windows or Watcom */
+  typedef long long curl_off_t;
+#define CURL_FORMAT_OFF_T "%I64d"
+#else /* GCC or Watcom on Windows  */
+
+/* "normal" POSIX approach, do note that this does not necessarily mean that
+   the type is >32 bits, see the SIZEOF_CURL_OFF_T define for that! */
+  typedef off_t curl_off_t;
+
+/* Check a range of defines to detect large file support. On Linux it seems
+   none of these are set by default, so if you don't explicitly switches on
+   large file support, this define will be made for "small file" support. */
+#ifndef _FILE_OFFSET_BITS
+#define _FILE_OFFSET_BITS 0 /* to prevent warnings in the check below */
+#define UNDEF_FILE_OFFSET_BITS
+#endif
+#ifndef FILESIZEBITS
+#define FILESIZEBITS 0 /* to prevent warnings in the check below */
+#define UNDEF_FILESIZEBITS
+#endif
+
+#if defined(_LARGE_FILES) || (_FILE_OFFSET_BITS > 32) || (FILESIZEBITS > 32) \
+   || defined(_LARGEFILE_SOURCE) || defined(_LARGEFILE64_SOURCE)
+  /* For now, we assume at least one of these to be set for large files to
+     work! */
+#define CURL_FORMAT_OFF_T "%lld"
+#else /* LARGE_FILE support */
+#define CURL_FORMAT_OFF_T "%ld"
+#endif
+#endif /* GCC or Watcom on Windows */
+#endif /* (_MSC_VER && !__POCC__) || (__LCC__ && WIN32) */
+
+#ifdef UNDEF_FILE_OFFSET_BITS
+/* this was defined above for our checks, undefine it again */
+#undef _FILE_OFFSET_BITS
+#endif
+
+#ifdef UNDEF_FILESIZEBITS
+/* this was defined above for our checks, undefine it again */
+#undef FILESIZEBITS
+#endif
+
+struct curl_httppost {
+  struct curl_httppost *next;       /* next entry in the list */
+  char *name;                       /* pointer to allocated name */
+  long namelength;                  /* length of name length */
+  char *contents;                   /* pointer to allocated data contents */
+  long contentslength;              /* length of contents field */
+  char *buffer;                     /* pointer to allocated buffer contents */
+  long bufferlength;                /* length of buffer field */
+  char *contenttype;                /* Content-Type */
+  struct curl_slist* contentheader; /* list of extra headers for this form */
+  struct curl_httppost *more;       /* if one field name has more than one
+                                       file, this link should link to following
+                                       files */
+  long flags;                       /* as defined below */
+#define HTTPPOST_FILENAME (1<<0)    /* specified content is a file name */
+#define HTTPPOST_READFILE (1<<1)    /* specified content is a file name */
+#define HTTPPOST_PTRNAME (1<<2)     /* name is only stored pointer
+                                       do not free in formfree */
+#define HTTPPOST_PTRCONTENTS (1<<3) /* contents is only stored pointer
+                                       do not free in formfree */
+#define HTTPPOST_BUFFER (1<<4)      /* upload file from buffer */
+#define HTTPPOST_PTRBUFFER (1<<5)   /* upload file from pointer contents */
+
+  char *showfilename;               /* The file name to show. If not set, the
+                                       actual file name will be used (if this
+                                       is a file part) */
+};
+
+typedef int (*curl_progress_callback)(void *clientp,
+                                      double dltotal,
+                                      double dlnow,
+                                      double ultotal,
+                                      double ulnow);
+
+  /* Tests have proven that 20K is a very bad buffer size for uploads on
+     Windows, while 16K for some odd reason performed a lot better. */
+#define CURL_MAX_WRITE_SIZE 16384
+
+typedef size_t (*curl_write_callback)(char *buffer,
+                                      size_t size,
+                                      size_t nitems,
+                                      void *outstream);
+
+/* This is a return code for the read callback that, when returned, will
+   signal libcurl to immediately abort the current transfer. */
+#define CURL_READFUNC_ABORT 0x10000000
+typedef size_t (*curl_read_callback)(char *buffer,
+                                      size_t size,
+                                      size_t nitems,
+                                      void *instream);
+
+
+#ifndef CURL_NO_OLDIES
+  /* not used since 7.10.8, will be removed in a future release */
+typedef int (*curl_passwd_callback)(void *clientp,
+                                    const char *prompt,
+                                    char *buffer,
+                                    int buflen);
+#endif
+
+typedef enum {
+  CURLIOE_OK,            /* I/O operation successful */
+  CURLIOE_UNKNOWNCMD,    /* command was unknown to callback */
+  CURLIOE_FAILRESTART,   /* failed to restart the read */
+  CURLIOE_LAST           /* never use */
+} curlioerr;
+
+typedef enum  {
+  CURLIOCMD_NOP,         /* no operation */
+  CURLIOCMD_RESTARTREAD, /* restart the read stream from start */
+  CURLIOCMD_LAST         /* never use */
+} curliocmd;
+
+typedef curlioerr (*curl_ioctl_callback)(CURL *handle,
+                                         int cmd,
+                                         void *clientp);
+
+/*
+ * The following typedef's are signatures of malloc, free, realloc, strdup and
+ * calloc respectively.  Function pointers of these types can be passed to the
+ * curl_global_init_mem() function to set user defined memory management
+ * callback routines.
+ */
+typedef void *(*curl_malloc_callback)(size_t size);
+typedef void (*curl_free_callback)(void *ptr);
+typedef void *(*curl_realloc_callback)(void *ptr, size_t size);
+typedef char *(*curl_strdup_callback)(const char *str);
+typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size);
+
+/* the kind of data that is passed to information_callback*/
+typedef enum {
+  CURLINFO_TEXT = 0,
+  CURLINFO_HEADER_IN,    /* 1 */
+  CURLINFO_HEADER_OUT,   /* 2 */
+  CURLINFO_DATA_IN,      /* 3 */
+  CURLINFO_DATA_OUT,     /* 4 */
+  CURLINFO_SSL_DATA_IN,  /* 5 */
+  CURLINFO_SSL_DATA_OUT, /* 6 */
+  CURLINFO_END
+} curl_infotype;
+
+typedef int (*curl_debug_callback)
+       (CURL *handle,      /* the handle/transfer this concerns */
+        curl_infotype type, /* what kind of data */
+        char *data,        /* points to the data */
+        size_t size,       /* size of the data pointed to */
+        void *userptr);    /* whatever the user please */
+
+/* All possible error codes from all sorts of curl functions. Future versions
+   may return other values, stay prepared.
+
+   Always add new return codes last. Never *EVER* remove any. The return
+   codes must remain the same!
+ */
+
+typedef enum {
+  CURLE_OK = 0,
+  CURLE_UNSUPPORTED_PROTOCOL,    /* 1 */
+  CURLE_FAILED_INIT,             /* 2 */
+  CURLE_URL_MALFORMAT,           /* 3 */
+  CURLE_URL_MALFORMAT_USER,      /* 4 - NOT USED */
+  CURLE_COULDNT_RESOLVE_PROXY,   /* 5 */
+  CURLE_COULDNT_RESOLVE_HOST,    /* 6 */
+  CURLE_COULDNT_CONNECT,         /* 7 */
+  CURLE_FTP_WEIRD_SERVER_REPLY,  /* 8 */
+  CURLE_FTP_ACCESS_DENIED,       /* 9 a service was denied by the FTP server
+                                    due to lack of access - when login fails
+                                    this is not returned. */
+  CURLE_FTP_USER_PASSWORD_INCORRECT, /* 10 - NOT USED */
+  CURLE_FTP_WEIRD_PASS_REPLY,    /* 11 */
+  CURLE_FTP_WEIRD_USER_REPLY,    /* 12 */
+  CURLE_FTP_WEIRD_PASV_REPLY,    /* 13 */
+  CURLE_FTP_WEIRD_227_FORMAT,    /* 14 */
+  CURLE_FTP_CANT_GET_HOST,       /* 15 */
+  CURLE_FTP_CANT_RECONNECT,      /* 16 */
+  CURLE_FTP_COULDNT_SET_BINARY,  /* 17 */
+  CURLE_PARTIAL_FILE,            /* 18 */
+  CURLE_FTP_COULDNT_RETR_FILE,   /* 19 */
+  CURLE_FTP_WRITE_ERROR,         /* 20 */
+  CURLE_FTP_QUOTE_ERROR,         /* 21 */
+  CURLE_HTTP_RETURNED_ERROR,     /* 22 */
+  CURLE_WRITE_ERROR,             /* 23 */
+  CURLE_MALFORMAT_USER,          /* 24 - NOT USED */
+  CURLE_FTP_COULDNT_STOR_FILE,   /* 25 - failed FTP upload */
+  CURLE_READ_ERROR,              /* 26 - could open/read from file */
+  CURLE_OUT_OF_MEMORY,           /* 27 */
+  /* Note: CURLE_OUT_OF_MEMORY may sometimes indicate a conversion error
+           instead of a memory allocation error if CURL_DOES_CONVERSIONS
+           is defined
+  */
+  CURLE_OPERATION_TIMEOUTED,     /* 28 - the timeout time was reached */
+  CURLE_FTP_COULDNT_SET_ASCII,   /* 29 - TYPE A failed */
+  CURLE_FTP_PORT_FAILED,         /* 30 - FTP PORT operation failed */
+  CURLE_FTP_COULDNT_USE_REST,    /* 31 - the REST command failed */
+  CURLE_FTP_COULDNT_GET_SIZE,    /* 32 - the SIZE command failed */
+  CURLE_HTTP_RANGE_ERROR,        /* 33 - RANGE "command" didn't work */
+  CURLE_HTTP_POST_ERROR,         /* 34 */
+  CURLE_SSL_CONNECT_ERROR,       /* 35 - wrong when connecting with SSL */
+  CURLE_BAD_DOWNLOAD_RESUME,     /* 36 - couldn't resume download */
+  CURLE_FILE_COULDNT_READ_FILE,  /* 37 */
+  CURLE_LDAP_CANNOT_BIND,        /* 38 */
+  CURLE_LDAP_SEARCH_FAILED,      /* 39 */
+  CURLE_LIBRARY_NOT_FOUND,       /* 40 */
+  CURLE_FUNCTION_NOT_FOUND,      /* 41 */
+  CURLE_ABORTED_BY_CALLBACK,     /* 42 */
+  CURLE_BAD_FUNCTION_ARGUMENT,   /* 43 */
+  CURLE_BAD_CALLING_ORDER,       /* 44 - NOT USED */
+  CURLE_INTERFACE_FAILED,        /* 45 - CURLOPT_INTERFACE failed */
+  CURLE_BAD_PASSWORD_ENTERED,    /* 46 - NOT USED */
+  CURLE_TOO_MANY_REDIRECTS ,     /* 47 - catch endless re-direct loops */
+  CURLE_UNKNOWN_TELNET_OPTION,   /* 48 - User specified an unknown option */
+  CURLE_TELNET_OPTION_SYNTAX ,   /* 49 - Malformed telnet option */
+  CURLE_OBSOLETE,                /* 50 - NOT USED */
+  CURLE_SSL_PEER_CERTIFICATE,    /* 51 - peer's certificate wasn't ok */
+  CURLE_GOT_NOTHING,             /* 52 - when this is a specific error */
+  CURLE_SSL_ENGINE_NOTFOUND,     /* 53 - SSL crypto engine not found */
+  CURLE_SSL_ENGINE_SETFAILED,    /* 54 - can not set SSL crypto engine as
+                                    default */
+  CURLE_SEND_ERROR,              /* 55 - failed sending network data */
+  CURLE_RECV_ERROR,              /* 56 - failure in receiving network data */
+  CURLE_SHARE_IN_USE,            /* 57 - share is in use */
+  CURLE_SSL_CERTPROBLEM,         /* 58 - problem with the local certificate */
+  CURLE_SSL_CIPHER,              /* 59 - couldn't use specified cipher */
+  CURLE_SSL_CACERT,              /* 60 - problem with the CA cert (path?) */
+  CURLE_BAD_CONTENT_ENCODING,    /* 61 - Unrecognized transfer encoding */
+  CURLE_LDAP_INVALID_URL,        /* 62 - Invalid LDAP URL */
+  CURLE_FILESIZE_EXCEEDED,       /* 63 - Maximum file size exceeded */
+  CURLE_FTP_SSL_FAILED,          /* 64 - Requested FTP SSL level failed */
+  CURLE_SEND_FAIL_REWIND,        /* 65 - Sending the data requires a rewind
+                                    that failed */
+  CURLE_SSL_ENGINE_INITFAILED,   /* 66 - failed to initialise ENGINE */
+  CURLE_LOGIN_DENIED,            /* 67 - user, password or similar was not
+                                    accepted and we failed to login */
+  CURLE_TFTP_NOTFOUND,           /* 68 - file not found on server */
+  CURLE_TFTP_PERM,               /* 69 - permission problem on server */
+  CURLE_TFTP_DISKFULL,           /* 70 - out of disk space on server */
+  CURLE_TFTP_ILLEGAL,            /* 71 - Illegal TFTP operation */
+  CURLE_TFTP_UNKNOWNID,          /* 72 - Unknown transfer ID */
+  CURLE_TFTP_EXISTS,             /* 73 - File already exists */
+  CURLE_TFTP_NOSUCHUSER,         /* 74 - No such user */
+  CURLE_CONV_FAILED,             /* 75 - conversion failed */
+  CURLE_CONV_REQD,               /* 76 - caller must register conversion
+                                    callbacks using curl_easy_setopt options
+                                    CURLOPT_CONV_FROM_NETWORK_FUNCTION,
+                                    CURLOPT_CONV_TO_NETWORK_FUNCTION, and
+                                    CURLOPT_CONV_FROM_UTF8_FUNCTION */
+  CURLE_SSL_CRL_BADFILE = 82,    /* 82 - could not load CRL file, missing or
+                                    wrong format (Added in 7.19.0) */
+  CURL_LAST /* never use! */
+} CURLcode;
+
+/* This prototype applies to all conversion callbacks */
+typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length);
+
+typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl,    /* easy handle */
+                                          void *ssl_ctx, /* actually an
+                                                            OpenSSL SSL_CTX */
+                                          void *userptr);
+
+/* Make a spelling correction for the operation timed-out define */
+#define CURLE_OPERATION_TIMEDOUT CURLE_OPERATION_TIMEOUTED
+
+#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
+                          the obsolete stuff removed! */
+/* backwards compatibility with older names */
+#define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR
+#define CURLE_HTTP_PORT_FAILED CURLE_INTERFACE_FAILED
+#endif
+
+typedef enum {
+  CURLPROXY_HTTP = 0,
+  CURLPROXY_SOCKS4 = 4,
+  CURLPROXY_SOCKS5 = 5
+} curl_proxytype;
+
+#define CURLAUTH_NONE         0       /* nothing */
+#define CURLAUTH_BASIC        (1<<0)  /* Basic (default) */
+#define CURLAUTH_DIGEST       (1<<1)  /* Digest */
+#define CURLAUTH_GSSNEGOTIATE (1<<2)  /* GSS-Negotiate */
+#define CURLAUTH_NTLM         (1<<3)  /* NTLM */
+#define CURLAUTH_ANY ~0               /* all types set */
+#define CURLAUTH_ANYSAFE (~CURLAUTH_BASIC)
+
+#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
+                          the obsolete stuff removed! */
+/* this was the error code 50 in 7.7.3 and a few earlier versions, this
+   is no longer used by libcurl but is instead #defined here only to not
+   make programs break */
+#define CURLE_ALREADY_COMPLETE 99999
+
+/* These are just to make older programs not break: */
+#define CURLE_FTP_PARTIAL_FILE CURLE_PARTIAL_FILE
+#define CURLE_FTP_BAD_DOWNLOAD_RESUME CURLE_BAD_DOWNLOAD_RESUME
+#endif
+
+#define CURLGSSAPI_DELEGATION_NONE        0      /* no delegation (default) */
+#define CURLGSSAPI_DELEGATION_POLICY_FLAG (1<<0) /* if permitted by policy */
+#define CURLGSSAPI_DELEGATION_FLAG        (1<<1) /* delegate always */
+
+#define CURL_ERROR_SIZE 256
+
+/* parameter for the CURLOPT_FTP_SSL option */
+typedef enum {
+  CURLFTPSSL_NONE,    /* do not attempt to use SSL */
+  CURLFTPSSL_TRY,     /* try using SSL, proceed anyway otherwise */
+  CURLFTPSSL_CONTROL, /* SSL for the control connection or fail */
+  CURLFTPSSL_ALL,     /* SSL for all communication or fail */
+  CURLFTPSSL_LAST     /* not an option, never use */
+} curl_ftpssl;
+
+/* parameter for the CURLOPT_FTPSSLAUTH option */
+typedef enum {
+  CURLFTPAUTH_DEFAULT, /* let libcurl decide */
+  CURLFTPAUTH_SSL,     /* use "AUTH SSL" */
+  CURLFTPAUTH_TLS,     /* use "AUTH TLS" */
+  CURLFTPAUTH_LAST /* not an option, never use */
+} curl_ftpauth;
+
+/* parameter for the CURLOPT_FTP_FILEMETHOD option */
+typedef enum {
+  CURLFTPMETHOD_DEFAULT,   /* let libcurl pick */
+  CURLFTPMETHOD_MULTICWD,  /* single CWD operation for each path part */
+  CURLFTPMETHOD_NOCWD,     /* no CWD at all */
+  CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */
+  CURLFTPMETHOD_LAST       /* not an option, never use */
+} curl_ftpmethod;
+
+/* CURLPROTO_ defines are for the CURLOPT_*PROTOCOLS options */
+#define CURLPROTO_HTTP   (1<<0)
+#define CURLPROTO_HTTPS  (1<<1)
+#define CURLPROTO_FTP    (1<<2)
+#define CURLPROTO_FTPS   (1<<3)
+#define CURLPROTO_TELNET (1<<6)
+#define CURLPROTO_LDAP   (1<<7)
+#define CURLPROTO_LDAPS  (1<<8)
+#define CURLPROTO_DICT   (1<<9)
+#define CURLPROTO_FILE   (1<<10)
+#define CURLPROTO_TFTP   (1<<11)
+#define CURLPROTO_ALL    (~0) /* enable everything */
+
+/* long may be 32 or 64 bits, but we should never depend on anything else
+   but 32 */
+#define CURLOPTTYPE_LONG          0
+#define CURLOPTTYPE_OBJECTPOINT   10000
+#define CURLOPTTYPE_FUNCTIONPOINT 20000
+#define CURLOPTTYPE_OFF_T         30000
+
+/* name is uppercase CURLOPT_<name>,
+   type is one of the defined CURLOPTTYPE_<type>
+   number is unique identifier */
+#ifdef CINIT
+#undef CINIT
+#endif
+/*
+ * Figure out if we can use the ## operator, which is supported by ISO/ANSI C
+ * and C++. Some compilers support it without setting __STDC__ or __cplusplus
+ * so we need to carefully check for them too. We don't use configure-checks
+ * for these since we want these headers to remain generic and working for all
+ * platforms.
+ */
+#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \
+  defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \
+  defined(__POCC__) || defined(__SALFORDC__)
+  /* This compiler is believed to have an ISO compatible preprocessor */
+#define CURL_ISOCPP
+#else
+  /* This compiler is believed NOT to have an ISO compatible preprocessor */
+#undef CURL_ISOCPP
+#endif
+
+#ifdef CURL_ISOCPP
+#define CINIT(name,type,number) CURLOPT_ ## name = CURLOPTTYPE_ ## type + number
+#else
+/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
+#define LONG          CURLOPTTYPE_LONG
+#define OBJECTPOINT   CURLOPTTYPE_OBJECTPOINT
+#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT
+#define OFF_T         CURLOPTTYPE_OFF_T
+#define CINIT(name,type,number) CURLOPT_/**/name = type + number
+#endif
+
+/*
+ * This macro-mania below setups the CURLOPT_[what] enum, to be used with
+ * curl_easy_setopt(). The first argument in the CINIT() macro is the [what]
+ * word.
+ */
+
+typedef enum {
+  /* This is the FILE * or void * the regular output should be written to. */
+  CINIT(FILE, OBJECTPOINT, 1),
+
+  /* The full URL to get/put */
+  CINIT(URL,  OBJECTPOINT, 2),
+
+  /* Port number to connect to, if other than default. */
+  CINIT(PORT, LONG, 3),
+
+  /* Name of proxy to use. */
+  CINIT(PROXY, OBJECTPOINT, 4),
+
+  /* "name:password" to use when fetching. */
+  CINIT(USERPWD, OBJECTPOINT, 5),
+
+  /* "name:password" to use with proxy. */
+  CINIT(PROXYUSERPWD, OBJECTPOINT, 6),
+
+  /* Range to get, specified as an ASCII string. */
+  CINIT(RANGE, OBJECTPOINT, 7),
+
+  /* not used */
+
+  /* Specified file stream to upload from (use as input): */
+  CINIT(INFILE, OBJECTPOINT, 9),
+
+  /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE
+   * bytes big. If this is not used, error messages go to stderr instead: */
+  CINIT(ERRORBUFFER, OBJECTPOINT, 10),
+
+  /* Function that will be called to store the output (instead of fwrite). The
+   * parameters will use fwrite() syntax, make sure to follow them. */
+  CINIT(WRITEFUNCTION, FUNCTIONPOINT, 11),
+
+  /* Function that will be called to read the input (instead of fread). The
+   * parameters will use fread() syntax, make sure to follow them. */
+  CINIT(READFUNCTION, FUNCTIONPOINT, 12),
+
+  /* Time-out the read operation after this amount of seconds */
+  CINIT(TIMEOUT, LONG, 13),
+
+  /* If the CURLOPT_INFILE is used, this can be used to inform libcurl about
+   * how large the file being sent really is. That allows better error
+   * checking and better verifies that the upload was succcessful. -1 means
+   * unknown size.
+   *
+   * For large file support, there is also a _LARGE version of the key
+   * which takes an off_t type, allowing platforms with larger off_t
+   * sizes to handle larger files.  See below for INFILESIZE_LARGE.
+   */
+  CINIT(INFILESIZE, LONG, 14),
+
+  /* POST input fields. */
+  CINIT(POSTFIELDS, OBJECTPOINT, 15),
+
+  /* Set the referer page (needed by some CGIs) */
+  CINIT(REFERER, OBJECTPOINT, 16),
+
+  /* Set the FTP PORT string (interface name, named or numerical IP address)
+     Use i.e '-' to use default address. */
+  CINIT(FTPPORT, OBJECTPOINT, 17),
+
+  /* Set the User-Agent string (examined by some CGIs) */
+  CINIT(USERAGENT, OBJECTPOINT, 18),
+
+  /* If the download receives less than "low speed limit" bytes/second
+   * during "low speed time" seconds, the operations is aborted.
+   * You could i.e if you have a pretty high speed connection, abort if
+   * it is less than 2000 bytes/sec during 20 seconds.
+   */
+
+  /* Set the "low speed limit" */
+  CINIT(LOW_SPEED_LIMIT, LONG , 19),
+
+  /* Set the "low speed time" */
+  CINIT(LOW_SPEED_TIME, LONG, 20),
+
+  /* Set the continuation offset.
+   *
+   * Note there is also a _LARGE version of this key which uses
+   * off_t types, allowing for large file offsets on platforms which
+   * use larger-than-32-bit off_t's.  Look below for RESUME_FROM_LARGE.
+   */
+  CINIT(RESUME_FROM, LONG, 21),
+
+  /* Set cookie in request: */
+  CINIT(COOKIE, OBJECTPOINT, 22),
+
+  /* This points to a linked list of headers, struct curl_slist kind */
+  CINIT(HTTPHEADER, OBJECTPOINT, 23),
+
+  /* This points to a linked list of post entries, struct HttpPost */
+  CINIT(HTTPPOST, OBJECTPOINT, 24),
+
+  /* name of the file keeping your private SSL-certificate */
+  CINIT(SSLCERT, OBJECTPOINT, 25),
+
+  /* password for the SSL-private key, keep this for compatibility */
+  CINIT(SSLCERTPASSWD, OBJECTPOINT, 26),
+  /* password for the SSL private key */
+  CINIT(SSLKEYPASSWD, OBJECTPOINT, 26),
+
+  /* send TYPE parameter? */
+  CINIT(CRLF, LONG, 27),
+
+  /* send linked-list of QUOTE commands */
+  CINIT(QUOTE, OBJECTPOINT, 28),
+
+  /* send FILE * or void * to store headers to, if you use a callback it
+     is simply passed to the callback unmodified */
+  CINIT(WRITEHEADER, OBJECTPOINT, 29),
+
+  /* point to a file to read the initial cookies from, also enables
+     "cookie awareness" */
+  CINIT(COOKIEFILE, OBJECTPOINT, 31),
+
+  /* What version to specifly try to use.
+     See CURL_SSLVERSION defines below. */
+  CINIT(SSLVERSION, LONG, 32),
+
+  /* What kind of HTTP time condition to use, see defines */
+  CINIT(TIMECONDITION, LONG, 33),
+
+  /* Time to use with the above condition. Specified in number of seconds
+     since 1 Jan 1970 */
+  CINIT(TIMEVALUE, LONG, 34),
+
+  /* 35 = OBSOLETE */
+
+  /* Custom request, for customizing the get command like
+     HTTP: DELETE, TRACE and others
+     FTP: to use a different list command
+     */
+  CINIT(CUSTOMREQUEST, OBJECTPOINT, 36),
+
+  /* HTTP request, for odd commands like DELETE, TRACE and others */
+  CINIT(STDERR, OBJECTPOINT, 37),
+
+  /* 38 is not used */
+
+  /* send linked-list of post-transfer QUOTE commands */
+  CINIT(POSTQUOTE, OBJECTPOINT, 39),
+
+  /* Pass a pointer to string of the output using full variable-replacement
+     as described elsewhere. */
+  CINIT(WRITEINFO, OBJECTPOINT, 40),
+
+  CINIT(VERBOSE, LONG, 41),      /* talk a lot */
+  CINIT(HEADER, LONG, 42),       /* throw the header out too */
+  CINIT(NOPROGRESS, LONG, 43),   /* shut off the progress meter */
+  CINIT(NOBODY, LONG, 44),       /* use HEAD to get http document */
+  CINIT(FAILONERROR, LONG, 45),  /* no output on http error codes >= 300 */
+  CINIT(UPLOAD, LONG, 46),       /* this is an upload */
+  CINIT(POST, LONG, 47),         /* HTTP POST method */
+  CINIT(FTPLISTONLY, LONG, 48),  /* Use NLST when listing ftp dir */
+
+  CINIT(FTPAPPEND, LONG, 50),    /* Append instead of overwrite on upload! */
+
+  /* Specify whether to read the user+password from the .netrc or the URL.
+   * This must be one of the CURL_NETRC_* enums below. */
+  CINIT(NETRC, LONG, 51),
+
+  CINIT(FOLLOWLOCATION, LONG, 52),  /* use Location: Luke! */
+
+  CINIT(TRANSFERTEXT, LONG, 53), /* transfer data in text/ASCII format */
+  CINIT(PUT, LONG, 54),          /* HTTP PUT */
+
+  /* 55 = OBSOLETE */
+
+  /* Function that will be called instead of the internal progress display
+   * function. This function should be defined as the curl_progress_callback
+   * prototype defines. */
+  CINIT(PROGRESSFUNCTION, FUNCTIONPOINT, 56),
+
+  /* Data passed to the progress callback */
+  CINIT(PROGRESSDATA, OBJECTPOINT, 57),
+
+  /* We want the referer field set automatically when following locations */
+  CINIT(AUTOREFERER, LONG, 58),
+
+  /* Port of the proxy, can be set in the proxy string as well with:
+     "[host]:[port]" */
+  CINIT(PROXYPORT, LONG, 59),
+
+  /* size of the POST input data, if strlen() is not good to use */
+  CINIT(POSTFIELDSIZE, LONG, 60),
+
+  /* tunnel non-http operations through a HTTP proxy */
+  CINIT(HTTPPROXYTUNNEL, LONG, 61),
+
+  /* Set the interface string to use as outgoing network interface */
+  CINIT(INTERFACE, OBJECTPOINT, 62),
+
+  /* Set the krb4 security level, this also enables krb4 awareness.  This is a
+   * string, 'clear', 'safe', 'confidential' or 'private'.  If the string is
+   * set but doesn't match one of these, 'private' will be used.  */
+  CINIT(KRB4LEVEL, OBJECTPOINT, 63),
+
+  /* Set if we should verify the peer in ssl handshake, set 1 to verify. */
+  CINIT(SSL_VERIFYPEER, LONG, 64),
+
+  /* The CApath or CAfile used to validate the peer certificate
+     this option is used only if SSL_VERIFYPEER is true */
+  CINIT(CAINFO, OBJECTPOINT, 65),
+
+  /* 66 = OBSOLETE */
+  /* 67 = OBSOLETE */
+
+  /* Maximum number of http redirects to follow */
+  CINIT(MAXREDIRS, LONG, 68),
+
+  /* Pass a long set to 1 to get the date of the requested document (if
+     possible)! Pass a zero to shut it off. */
+  CINIT(FILETIME, LONG, 69),
+
+  /* This points to a linked list of telnet options */
+  CINIT(TELNETOPTIONS, OBJECTPOINT, 70),
+
+  /* Max amount of cached alive connections */
+  CINIT(MAXCONNECTS, LONG, 71),
+
+  /* What policy to use when closing connections when the cache is filled
+     up */
+  CINIT(CLOSEPOLICY, LONG, 72),
+
+  /* 73 = OBSOLETE */
+
+  /* Set to explicitly use a new connection for the upcoming transfer.
+     Do not use this unless you're absolutely sure of this, as it makes the
+     operation slower and is less friendly for the network. */
+  CINIT(FRESH_CONNECT, LONG, 74),
+
+  /* Set to explicitly forbid the upcoming transfer's connection to be re-used
+     when done. Do not use this unless you're absolutely sure of this, as it
+     makes the operation slower and is less friendly for the network. */
+  CINIT(FORBID_REUSE, LONG, 75),
+
+  /* Set to a file name that contains random data for libcurl to use to
+     seed the random engine when doing SSL connects. */
+  CINIT(RANDOM_FILE, OBJECTPOINT, 76),
+
+  /* Set to the Entropy Gathering Daemon socket pathname */
+  CINIT(EGDSOCKET, OBJECTPOINT, 77),
+
+  /* Time-out connect operations after this amount of seconds, if connects
+     are OK within this time, then fine... This only aborts the connect
+     phase. [Only works on unix-style/SIGALRM operating systems] */
+  CINIT(CONNECTTIMEOUT, LONG, 78),
+
+  /* Function that will be called to store headers (instead of fwrite). The
+   * parameters will use fwrite() syntax, make sure to follow them. */
+  CINIT(HEADERFUNCTION, FUNCTIONPOINT, 79),
+
+  /* Set this to force the HTTP request to get back to GET. Only really usable
+     if POST, PUT or a custom request have been used first.
+   */
+  CINIT(HTTPGET, LONG, 80),
+
+  /* Set if we should verify the Common name from the peer certificate in ssl
+   * handshake, set 1 to check existence, 2 to ensure that it matches the
+   * provided hostname. */
+  CINIT(SSL_VERIFYHOST, LONG, 81),
+
+  /* Specify which file name to write all known cookies in after completed
+     operation. Set file name to "-" (dash) to make it go to stdout. */
+  CINIT(COOKIEJAR, OBJECTPOINT, 82),
+
+  /* Specify which SSL ciphers to use */
+  CINIT(SSL_CIPHER_LIST, OBJECTPOINT, 83),
+
+  /* Specify which HTTP version to use! This must be set to one of the
+     CURL_HTTP_VERSION* enums set below. */
+  CINIT(HTTP_VERSION, LONG, 84),
+
+  /* Specificly switch on or off the FTP engine's use of the EPSV command. By
+     default, that one will always be attempted before the more traditional
+     PASV command. */
+  CINIT(FTP_USE_EPSV, LONG, 85),
+
+  /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */
+  CINIT(SSLCERTTYPE, OBJECTPOINT, 86),
+
+  /* name of the file keeping your private SSL-key */
+  CINIT(SSLKEY, OBJECTPOINT, 87),
+
+  /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */
+  CINIT(SSLKEYTYPE, OBJECTPOINT, 88),
+
+  /* crypto engine for the SSL-sub system */
+  CINIT(SSLENGINE, OBJECTPOINT, 89),
+
+  /* set the crypto engine for the SSL-sub system as default
+     the param has no meaning...
+   */
+  CINIT(SSLENGINE_DEFAULT, LONG, 90),
+
+  /* Non-zero value means to use the global dns cache */
+  CINIT(DNS_USE_GLOBAL_CACHE, LONG, 91), /* To becomeO BSOLETE soon */
+
+  /* DNS cache timeout */
+  CINIT(DNS_CACHE_TIMEOUT, LONG, 92),
+
+  /* send linked-list of pre-transfer QUOTE commands (Wesley Laxton)*/
+  CINIT(PREQUOTE, OBJECTPOINT, 93),
+
+  /* set the debug function */
+  CINIT(DEBUGFUNCTION, FUNCTIONPOINT, 94),
+
+  /* set the data for the debug function */
+  CINIT(DEBUGDATA, OBJECTPOINT, 95),
+
+  /* mark this as start of a cookie session */
+  CINIT(COOKIESESSION, LONG, 96),
+
+  /* The CApath directory used to validate the peer certificate
+     this option is used only if SSL_VERIFYPEER is true */
+  CINIT(CAPATH, OBJECTPOINT, 97),
+
+  /* Instruct libcurl to use a smaller receive buffer */
+  CINIT(BUFFERSIZE, LONG, 98),
+
+  /* Instruct libcurl to not use any signal/alarm handlers, even when using
+     timeouts. This option is useful for multi-threaded applications.
+     See libcurl-the-guide for more background information. */
+  CINIT(NOSIGNAL, LONG, 99),
+
+  /* Provide a CURLShare for mutexing non-ts data */
+  CINIT(SHARE, OBJECTPOINT, 100),
+
+  /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default),
+     CURLPROXY_SOCKS4 and CURLPROXY_SOCKS5. */
+  CINIT(PROXYTYPE, LONG, 101),
+
+  /* Set the Accept-Encoding string. Use this to tell a server you would like
+     the response to be compressed. */
+  CINIT(ENCODING, OBJECTPOINT, 102),
+
+  /* Set pointer to private data */
+  CINIT(PRIVATE, OBJECTPOINT, 103),
+
+  /* Set aliases for HTTP 200 in the HTTP Response header */
+  CINIT(HTTP200ALIASES, OBJECTPOINT, 104),
+
+  /* Continue to send authentication (user+password) when following locations,
+     even when hostname changed. This can potentionally send off the name
+     and password to whatever host the server decides. */
+  CINIT(UNRESTRICTED_AUTH, LONG, 105),
+
+  /* Specificly switch on or off the FTP engine's use of the EPRT command ( it
+     also disables the LPRT attempt). By default, those ones will always be
+     attempted before the good old traditional PORT command. */
+  CINIT(FTP_USE_EPRT, LONG, 106),
+
+  /* Set this to a bitmask value to enable the particular authentications
+     methods you like. Use this in combination with CURLOPT_USERPWD.
+     Note that setting multiple bits may cause extra network round-trips. */
+  CINIT(HTTPAUTH, LONG, 107),
+
+  /* Set the ssl context callback function, currently only for OpenSSL ssl_ctx
+     in second argument. The function must be matching the
+     curl_ssl_ctx_callback proto. */
+  CINIT(SSL_CTX_FUNCTION, FUNCTIONPOINT, 108),
+
+  /* Set the userdata for the ssl context callback function's third
+     argument */
+  CINIT(SSL_CTX_DATA, OBJECTPOINT, 109),
+
+  /* FTP Option that causes missing dirs to be created on the remote server */
+  CINIT(FTP_CREATE_MISSING_DIRS, LONG, 110),
+
+  /* Set this to a bitmask value to enable the particular authentications
+     methods you like. Use this in combination with CURLOPT_PROXYUSERPWD.
+     Note that setting multiple bits may cause extra network round-trips. */
+  CINIT(PROXYAUTH, LONG, 111),
+
+  /* FTP option that changes the timeout, in seconds, associated with
+     getting a response.  This is different from transfer timeout time and
+     essentially places a demand on the FTP server to acknowledge commands
+     in a timely manner. */
+  CINIT(FTP_RESPONSE_TIMEOUT, LONG , 112),
+
+  /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to
+     tell libcurl to resolve names to those IP versions only. This only has
+     affect on systems with support for more than one, i.e IPv4 _and_ IPv6. */
+  CINIT(IPRESOLVE, LONG, 113),
+
+  /* Set this option to limit the size of a file that will be downloaded from
+     an HTTP or FTP server.
+
+     Note there is also _LARGE version which adds large file support for
+     platforms which have larger off_t sizes.  See MAXFILESIZE_LARGE below. */
+  CINIT(MAXFILESIZE, LONG, 114),
+
+  /* See the comment for INFILESIZE above, but in short, specifies
+   * the size of the file being uploaded.  -1 means unknown.
+   */
+  CINIT(INFILESIZE_LARGE, OFF_T, 115),
+
+  /* Sets the continuation offset.  There is also a LONG version of this;
+   * look above for RESUME_FROM.
+   */
+  CINIT(RESUME_FROM_LARGE, OFF_T, 116),
+
+  /* Sets the maximum size of data that will be downloaded from
+   * an HTTP or FTP server.  See MAXFILESIZE above for the LONG version.
+   */
+  CINIT(MAXFILESIZE_LARGE, OFF_T, 117),
+
+  /* Set this option to the file name of your .netrc file you want libcurl
+     to parse (using the CURLOPT_NETRC option). If not set, libcurl will do
+     a poor attempt to find the user's home directory and check for a .netrc
+     file in there. */
+  CINIT(NETRC_FILE, OBJECTPOINT, 118),
+
+  /* Enable SSL/TLS for FTP, pick one of:
+     CURLFTPSSL_TRY     - try using SSL, proceed anyway otherwise
+     CURLFTPSSL_CONTROL - SSL for the control connection or fail
+     CURLFTPSSL_ALL     - SSL for all communication or fail
+  */
+  CINIT(FTP_SSL, LONG, 119),
+
+  /* The _LARGE version of the standard POSTFIELDSIZE option */
+  CINIT(POSTFIELDSIZE_LARGE, OFF_T, 120),
+
+  /* Enable/disable the TCP Nagle algorithm */
+  CINIT(TCP_NODELAY, LONG, 121),
+
+  /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
+
+  /* When doing 3rd party transfer, set the source user and password with
+     this */
+  CINIT(SOURCE_USERPWD, OBJECTPOINT, 123),
+
+  /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
+  /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
+  /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
+
+  /* When doing 3rd party transfer, set the source pre-quote linked list
+     of commands with this */
+  CINIT(SOURCE_PREQUOTE, OBJECTPOINT, 127),
+
+  /* When doing 3rd party transfer, set the source post-quote linked list
+     of commands with this */
+  CINIT(SOURCE_POSTQUOTE, OBJECTPOINT, 128),
+
+  /* When FTP over SSL/TLS is selected (with CURLOPT_FTP_SSL), this option
+     can be used to change libcurl's default action which is to first try
+     "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK
+     response has been received.
+
+     Available parameters are:
+     CURLFTPAUTH_DEFAULT - let libcurl decide
+     CURLFTPAUTH_SSL     - try "AUTH SSL" first, then TLS
+     CURLFTPAUTH_TLS     - try "AUTH TLS" first, then SSL
+  */
+  CINIT(FTPSSLAUTH, LONG, 129),
+
+  CINIT(IOCTLFUNCTION, FUNCTIONPOINT, 130),
+  CINIT(IOCTLDATA, OBJECTPOINT, 131),
+
+  /* To make a 3rd party transfer, set the source URL with this */
+  CINIT(SOURCE_URL, OBJECTPOINT, 132),
+
+  /* When doing 3rd party transfer, set the source quote linked list of
+     commands with this */
+  CINIT(SOURCE_QUOTE, OBJECTPOINT, 133),
+
+  /* zero terminated string for pass on to the FTP server when asked for
+     "account" info */
+  CINIT(FTP_ACCOUNT, OBJECTPOINT, 134),
+
+  /* feed cookies into cookie engine */
+  CINIT(COOKIELIST, OBJECTPOINT, 135),
+
+  /* ignore Content-Length */
+  CINIT(IGNORE_CONTENT_LENGTH, LONG, 136),
+
+  /* Set to non-zero to skip the IP address received in a 227 PASV FTP server
+     response. Typically used for FTP-SSL purposes but is not restricted to
+     that. libcurl will then instead use the same IP address it used for the
+     control connection. */
+  CINIT(FTP_SKIP_PASV_IP, LONG, 137),
+
+  /* Select "file method" to use when doing FTP, see the curl_ftpmethod
+     above. */
+  CINIT(FTP_FILEMETHOD, LONG, 138),
+
+  /* Local port number to bind the socket to */
+  CINIT(LOCALPORT, LONG, 139),
+
+  /* Number of ports to try, including the first one set with LOCALPORT.
+     Thus, setting it to 1 will make no additional attempts but the first.
+  */
+  CINIT(LOCALPORTRANGE, LONG, 140),
+
+  /* no transfer, set up connection and let application use the socket by
+     extracting it with CURLINFO_LASTSOCKET */
+  CINIT(CONNECT_ONLY, LONG, 141),
+
+  /* Function that will be called to convert from the
+     network encoding (instead of using the iconv calls in libcurl) */
+  CINIT(CONV_FROM_NETWORK_FUNCTION, FUNCTIONPOINT, 142),
+
+  /* Function that will be called to convert to the
+     network encoding (instead of using the iconv calls in libcurl) */
+  CINIT(CONV_TO_NETWORK_FUNCTION, FUNCTIONPOINT, 143),
+
+  /* Function that will be called to convert from UTF8
+     (instead of using the iconv calls in libcurl)
+     Note that this is used only for SSL certificate processing */
+  CINIT(CONV_FROM_UTF8_FUNCTION, FUNCTIONPOINT, 144),
+
+  /* if the connection proceeds too quickly then need to slow it down */
+  /* limit-rate: maximum number of bytes per second to send or receive */
+  CINIT(MAX_SEND_SPEED_LARGE, OFF_T, 145),
+  CINIT(MAX_RECV_SPEED_LARGE, OFF_T, 146),
+
+  /* Pointer to command string to send if USER/PASS fails. */
+  CINIT(FTP_ALTERNATIVE_TO_USER, OBJECTPOINT, 147),
+
+  /* CRL file */
+  CINIT(CRLFILE, OBJECTPOINT, 169),
+
+  /* set the bitmask for the protocols that are allowed to be used for the
+     transfer, which thus helps the app which takes URLs from users or other
+     external inputs and want to restrict what protocol(s) to deal
+     with. Defaults to CURLPROTO_ALL. */
+  CINIT(PROTOCOLS, LONG, 181),
+
+  /* set the bitmask for the protocols that libcurl is allowed to follow to,
+     as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs
+     to be set in both bitmasks to be allowed to get redirected to. Defaults
+     to CURLPROTO_ALL & ~CURLPROTO_FILE. */
+  CINIT(REDIR_PROTOCOLS, LONG, 182),
+
+  /* allow GSSAPI credential delegation */
+  CINIT(GSSAPI_DELEGATION, LONG, 210),
+
+  CURLOPT_LASTENTRY /* the last unused */
+} CURLoption;
+
+  /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host
+     name resolves addresses using more than one IP protocol version, this
+     option might be handy to force libcurl to use a specific IP version. */
+#define CURL_IPRESOLVE_WHATEVER 0 /* default, resolves addresses to all IP
+                                     versions that your system allows */
+#define CURL_IPRESOLVE_V4       1 /* resolve to ipv4 addresses */
+#define CURL_IPRESOLVE_V6       2 /* resolve to ipv6 addresses */
+
+  /* three convenient "aliases" that follow the name scheme better */
+#define CURLOPT_WRITEDATA CURLOPT_FILE
+#define CURLOPT_READDATA  CURLOPT_INFILE
+#define CURLOPT_HEADERDATA CURLOPT_WRITEHEADER
+
+#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
+                          the obsolete stuff removed! */
+#define CURLOPT_HTTPREQUEST    -1
+#define CURLOPT_FTPASCII       CURLOPT_TRANSFERTEXT
+#define CURLOPT_MUTE           -2
+#define CURLOPT_PASSWDFUNCTION -3
+#define CURLOPT_PASSWDDATA     -4
+#define CURLOPT_CLOSEFUNCTION  -5
+
+#define CURLOPT_SOURCE_HOST    -6
+#define CURLOPT_SOURCE_PATH    -7
+#define CURLOPT_SOURCE_PORT    -8
+#define CURLOPT_PASV_HOST      -9
+
+#else
+/* This is set if CURL_NO_OLDIES is defined at compile-time */
+#undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */
+#endif
+
+
+  /* These enums are for use with the CURLOPT_HTTP_VERSION option. */
+enum {
+  CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd
+                             like the library to choose the best possible
+                             for us! */
+  CURL_HTTP_VERSION_1_0,  /* please use HTTP 1.0 in the request */
+  CURL_HTTP_VERSION_1_1,  /* please use HTTP 1.1 in the request */
+
+  CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */
+};
+
+  /* These enums are for use with the CURLOPT_NETRC option. */
+enum CURL_NETRC_OPTION {
+  CURL_NETRC_IGNORED,     /* The .netrc will never be read.
+                           * This is the default. */
+  CURL_NETRC_OPTIONAL,    /* A user:password in the URL will be preferred
+                           * to one in the .netrc. */
+  CURL_NETRC_REQUIRED,    /* A user:password in the URL will be ignored.
+                           * Unless one is set programmatically, the .netrc
+                           * will be queried. */
+  CURL_NETRC_LAST
+};
+
+enum {
+  CURL_SSLVERSION_DEFAULT,
+  CURL_SSLVERSION_TLSv1,
+  CURL_SSLVERSION_SSLv2,
+  CURL_SSLVERSION_SSLv3,
+
+  CURL_SSLVERSION_LAST /* never use, keep last */
+};
+
+
+typedef enum {
+  CURL_TIMECOND_NONE,
+
+  CURL_TIMECOND_IFMODSINCE,
+  CURL_TIMECOND_IFUNMODSINCE,
+  CURL_TIMECOND_LASTMOD,
+
+  CURL_TIMECOND_LAST
+} curl_TimeCond;
+
+#ifdef __BEOS__
+#include <support/SupportDefs.h>
+#endif
+
+
+/* curl_strequal() and curl_strnequal() are subject for removal in a future
+   libcurl, see lib/README.curlx for details */
+CURL_EXTERN int (curl_strequal)(const char *s1, const char *s2);
+CURL_EXTERN int (curl_strnequal)(const char *s1, const char *s2, size_t n);
+
+/* name is uppercase CURLFORM_<name> */
+#ifdef CFINIT
+#undef CFINIT
+#endif
+
+#ifdef CURL_ISOCPP
+#define CFINIT(name) CURLFORM_ ## name
+#else
+/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
+#define CFINIT(name) CURLFORM_/**/name
+#endif
+
+typedef enum {
+  CFINIT(NOTHING),        /********* the first one is unused ************/
+
+  /*  */
+  CFINIT(COPYNAME),
+  CFINIT(PTRNAME),
+  CFINIT(NAMELENGTH),
+  CFINIT(COPYCONTENTS),
+  CFINIT(PTRCONTENTS),
+  CFINIT(CONTENTSLENGTH),
+  CFINIT(FILECONTENT),
+  CFINIT(ARRAY),
+  CFINIT(OBSOLETE),
+  CFINIT(FILE),
+
+  CFINIT(BUFFER),
+  CFINIT(BUFFERPTR),
+  CFINIT(BUFFERLENGTH),
+
+  CFINIT(CONTENTTYPE),
+  CFINIT(CONTENTHEADER),
+  CFINIT(FILENAME),
+  CFINIT(END),
+  CFINIT(OBSOLETE2),
+
+  CURLFORM_LASTENTRY /* the last unusued */
+} CURLformoption;
+
+#undef CFINIT /* done */
+
+/* structure to be used as parameter for CURLFORM_ARRAY */
+struct curl_forms {
+  CURLformoption option;
+  const char     *value;
+};
+
+/* use this for multipart formpost building */
+/* Returns code for curl_formadd()
+ *
+ * Returns:
+ * CURL_FORMADD_OK             on success
+ * CURL_FORMADD_MEMORY         if the FormInfo allocation fails
+ * CURL_FORMADD_OPTION_TWICE   if one option is given twice for one Form
+ * CURL_FORMADD_NULL           if a null pointer was given for a char
+ * CURL_FORMADD_MEMORY         if the allocation of a FormInfo struct failed
+ * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used
+ * CURL_FORMADD_INCOMPLETE     if the some FormInfo is not complete (or error)
+ * CURL_FORMADD_MEMORY         if a HttpPost struct cannot be allocated
+ * CURL_FORMADD_MEMORY         if some allocation for string copying failed.
+ * CURL_FORMADD_ILLEGAL_ARRAY  if an illegal option is used in an array
+ *
+ ***************************************************************************/
+typedef enum {
+  CURL_FORMADD_OK, /* first, no error */
+
+  CURL_FORMADD_MEMORY,
+  CURL_FORMADD_OPTION_TWICE,
+  CURL_FORMADD_NULL,
+  CURL_FORMADD_UNKNOWN_OPTION,
+  CURL_FORMADD_INCOMPLETE,
+  CURL_FORMADD_ILLEGAL_ARRAY,
+  CURL_FORMADD_DISABLED, /* libcurl was built with this disabled */
+
+  CURL_FORMADD_LAST /* last */
+} CURLFORMcode;
+
+/*
+ * NAME curl_formadd()
+ *
+ * DESCRIPTION
+ *
+ * Pretty advanved function for building multi-part formposts. Each invoke
+ * adds one part that together construct a full post. Then use
+ * CURLOPT_HTTPPOST to send it off to libcurl.
+ */
+CURL_EXTERN CURLFORMcode curl_formadd(struct curl_httppost **httppost,
+                                      struct curl_httppost **last_post,
+                                      ...);
+
+/*
+ * callback function for curl_formget()
+ * The void *arg pointer will be the one passed as second argument to curl_formget().
+ * The character buffer passed to it must not be freed.
+ * Should return the buffer length passed to it as the argument "len" on success.
+ */
+typedef size_t (*curl_formget_callback)(void *arg, const char *buf, size_t len);
+
+/*
+ * NAME curl_formget()
+ *
+ * DESCRIPTION
+ *
+ * Serialize a curl_httppost struct built with curl_formadd().
+ * Accepts a void pointer as second argument which will be passed to
+ * the curl_formget_callback function.
+ * Returns 0 on success.
+ */
+CURL_EXTERN int curl_formget(struct curl_httppost *form, void *arg,
+                             curl_formget_callback append);
+/*
+ * NAME curl_formfree()
+ *
+ * DESCRIPTION
+ *
+ * Free a multipart formpost previously built with curl_formadd().
+ */
+CURL_EXTERN void curl_formfree(struct curl_httppost *form);
+
+/*
+ * NAME curl_getenv()
+ *
+ * DESCRIPTION
+ *
+ * Returns a malloc()'ed string that MUST be curl_free()ed after usage is
+ * complete. DEPRECATED - see lib/README.curlx
+ */
+CURL_EXTERN char *curl_getenv(const char *variable);
+
+/*
+ * NAME curl_version()
+ *
+ * DESCRIPTION
+ *
+ * Returns a static ascii string of the libcurl version.
+ */
+CURL_EXTERN char *curl_version(void);
+
+/*
+ * NAME curl_easy_escape()
+ *
+ * DESCRIPTION
+ *
+ * Escapes URL strings (converts all letters consider illegal in URLs to their
+ * %XX versions). This function returns a new allocated string or NULL if an
+ * error occurred.
+ */
+CURL_EXTERN char *curl_easy_escape(CURL *handle,
+                                   const char *string,
+                                   int length);
+
+/* the previous version: */
+CURL_EXTERN char *curl_escape(const char *string,
+                              int length);
+
+
+/*
+ * NAME curl_easy_unescape()
+ *
+ * DESCRIPTION
+ *
+ * Unescapes URL encoding in strings (converts all %XX codes to their 8bit
+ * versions). This function returns a new allocated string or NULL if an error
+ * occurred.
+ * Conversion Note: On non-ASCII platforms the ASCII %XX codes are
+ * converted into the host encoding.
+ */
+CURL_EXTERN char *curl_easy_unescape(CURL *handle,
+                                     const char *string,
+                                     int length,
+                                     int *outlength);
+
+/* the previous version */
+CURL_EXTERN char *curl_unescape(const char *string,
+                                int length);
+
+/*
+ * NAME curl_free()
+ *
+ * DESCRIPTION
+ *
+ * Provided for de-allocation in the same translation unit that did the
+ * allocation. Added in libcurl 7.10
+ */
+CURL_EXTERN void curl_free(void *p);
+
+/*
+ * NAME curl_global_init()
+ *
+ * DESCRIPTION
+ *
+ * curl_global_init() should be invoked exactly once for each application that
+ * uses libcurl
+ */
+CURL_EXTERN CURLcode curl_global_init(long flags);
+
+/*
+ * NAME curl_global_init_mem()
+ *
+ * DESCRIPTION
+ *
+ * curl_global_init() or curl_global_init_mem() should be invoked exactly once
+ * for each application that uses libcurl.  This function can be used to
+ * initialize libcurl and set user defined memory management callback
+ * functions.  Users can implement memory management routines to check for
+ * memory leaks, check for mis-use of the curl library etc.  User registered
+ * callback routines with be invoked by this library instead of the system
+ * memory management routines like malloc, free etc.
+ */
+CURL_EXTERN CURLcode curl_global_init_mem(long flags,
+                                          curl_malloc_callback m,
+                                          curl_free_callback f,
+                                          curl_realloc_callback r,
+                                          curl_strdup_callback s,
+                                          curl_calloc_callback c);
+
+/*
+ * NAME curl_global_cleanup()
+ *
+ * DESCRIPTION
+ *
+ * curl_global_cleanup() should be invoked exactly once for each application
+ * that uses libcurl
+ */
+CURL_EXTERN void curl_global_cleanup(void);
+
+/* linked-list structure for the CURLOPT_QUOTE option (and other) */
+struct curl_slist {
+  char *data;
+  struct curl_slist *next;
+};
+
+/*
+ * NAME curl_slist_append()
+ *
+ * DESCRIPTION
+ *
+ * Appends a string to a linked list. If no list exists, it will be created
+ * first. Returns the new list, after appending.
+ */
+CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *,
+                                                 const char *);
+
+/*
+ * NAME curl_slist_free_all()
+ *
+ * DESCRIPTION
+ *
+ * free a previously built curl_slist.
+ */
+CURL_EXTERN void curl_slist_free_all(struct curl_slist *);
+
+/*
+ * NAME curl_getdate()
+ *
+ * DESCRIPTION
+ *
+ * Returns the time, in seconds since 1 Jan 1970 of the time string given in
+ * the first argument. The time argument in the second parameter is unused
+ * and should be set to NULL.
+ */
+CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused);
+
+#define CURLINFO_STRING   0x100000
+#define CURLINFO_LONG     0x200000
+#define CURLINFO_DOUBLE   0x300000
+#define CURLINFO_SLIST    0x400000
+#define CURLINFO_MASK     0x0fffff
+#define CURLINFO_TYPEMASK 0xf00000
+
+typedef enum {
+  CURLINFO_NONE, /* first, never use this */
+  CURLINFO_EFFECTIVE_URL    = CURLINFO_STRING + 1,
+  CURLINFO_RESPONSE_CODE    = CURLINFO_LONG   + 2,
+  CURLINFO_TOTAL_TIME       = CURLINFO_DOUBLE + 3,
+  CURLINFO_NAMELOOKUP_TIME  = CURLINFO_DOUBLE + 4,
+  CURLINFO_CONNECT_TIME     = CURLINFO_DOUBLE + 5,
+  CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6,
+  CURLINFO_SIZE_UPLOAD      = CURLINFO_DOUBLE + 7,
+  CURLINFO_SIZE_DOWNLOAD    = CURLINFO_DOUBLE + 8,
+  CURLINFO_SPEED_DOWNLOAD   = CURLINFO_DOUBLE + 9,
+  CURLINFO_SPEED_UPLOAD     = CURLINFO_DOUBLE + 10,
+  CURLINFO_HEADER_SIZE      = CURLINFO_LONG   + 11,
+  CURLINFO_REQUEST_SIZE     = CURLINFO_LONG   + 12,
+  CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG   + 13,
+  CURLINFO_FILETIME         = CURLINFO_LONG   + 14,
+  CURLINFO_CONTENT_LENGTH_DOWNLOAD   = CURLINFO_DOUBLE + 15,
+  CURLINFO_CONTENT_LENGTH_UPLOAD     = CURLINFO_DOUBLE + 16,
+  CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17,
+  CURLINFO_CONTENT_TYPE     = CURLINFO_STRING + 18,
+  CURLINFO_REDIRECT_TIME    = CURLINFO_DOUBLE + 19,
+  CURLINFO_REDIRECT_COUNT   = CURLINFO_LONG   + 20,
+  CURLINFO_PRIVATE          = CURLINFO_STRING + 21,
+  CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG   + 22,
+  CURLINFO_HTTPAUTH_AVAIL   = CURLINFO_LONG   + 23,
+  CURLINFO_PROXYAUTH_AVAIL  = CURLINFO_LONG   + 24,
+  CURLINFO_OS_ERRNO         = CURLINFO_LONG   + 25,
+  CURLINFO_NUM_CONNECTS     = CURLINFO_LONG   + 26,
+  CURLINFO_SSL_ENGINES      = CURLINFO_SLIST  + 27,
+  CURLINFO_COOKIELIST       = CURLINFO_SLIST  + 28,
+  CURLINFO_LASTSOCKET       = CURLINFO_LONG   + 29,
+  CURLINFO_FTP_ENTRY_PATH   = CURLINFO_STRING + 30,
+  /* Fill in new entries below here! */
+
+  CURLINFO_LASTONE          = 30
+} CURLINFO;
+
+/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as
+   CURLINFO_HTTP_CODE */
+#define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE
+
+typedef enum {
+  CURLCLOSEPOLICY_NONE, /* first, never use this */
+
+  CURLCLOSEPOLICY_OLDEST,
+  CURLCLOSEPOLICY_LEAST_RECENTLY_USED,
+  CURLCLOSEPOLICY_LEAST_TRAFFIC,
+  CURLCLOSEPOLICY_SLOWEST,
+  CURLCLOSEPOLICY_CALLBACK,
+
+  CURLCLOSEPOLICY_LAST /* last, never use this */
+} curl_closepolicy;
+
+#define CURL_GLOBAL_SSL (1<<0)
+#define CURL_GLOBAL_WIN32 (1<<1)
+#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32)
+#define CURL_GLOBAL_NOTHING 0
+#define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL
+
+
+/*****************************************************************************
+ * Setup defines, protos etc for the sharing stuff.
+ */
+
+/* Different data locks for a single share */
+typedef enum {
+  CURL_LOCK_DATA_NONE = 0,
+  /*  CURL_LOCK_DATA_SHARE is used internaly to say that
+   *  the locking is just made to change the internal state of the share
+   *  itself.
+   */
+  CURL_LOCK_DATA_SHARE,
+  CURL_LOCK_DATA_COOKIE,
+  CURL_LOCK_DATA_DNS,
+  CURL_LOCK_DATA_SSL_SESSION,
+  CURL_LOCK_DATA_CONNECT,
+  CURL_LOCK_DATA_LAST
+} curl_lock_data;
+
+/* Different lock access types */
+typedef enum {
+  CURL_LOCK_ACCESS_NONE = 0,   /* unspecified action */
+  CURL_LOCK_ACCESS_SHARED = 1, /* for read perhaps */
+  CURL_LOCK_ACCESS_SINGLE = 2, /* for write perhaps */
+  CURL_LOCK_ACCESS_LAST        /* never use */
+} curl_lock_access;
+
+typedef void (*curl_lock_function)(CURL *handle,
+                                   curl_lock_data data,
+                                   curl_lock_access locktype,
+                                   void *userptr);
+typedef void (*curl_unlock_function)(CURL *handle,
+                                     curl_lock_data data,
+                                     void *userptr);
+
+typedef void CURLSH;
+
+typedef enum {
+  CURLSHE_OK,  /* all is fine */
+  CURLSHE_BAD_OPTION, /* 1 */
+  CURLSHE_IN_USE,     /* 2 */
+  CURLSHE_INVALID,    /* 3 */
+  CURLSHE_NOMEM,      /* out of memory */
+  CURLSHE_LAST /* never use */
+} CURLSHcode;
+
+typedef enum {
+  CURLSHOPT_NONE,  /* don't use */
+  CURLSHOPT_SHARE,   /* specify a data type to share */
+  CURLSHOPT_UNSHARE, /* specify shich data type to stop sharing */
+  CURLSHOPT_LOCKFUNC,   /* pass in a 'curl_lock_function' pointer */
+  CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */
+  CURLSHOPT_USERDATA,   /* pass in a user data pointer used in the lock/unlock
+                           callback functions */
+  CURLSHOPT_LAST  /* never use */
+} CURLSHoption;
+
+CURL_EXTERN CURLSH *curl_share_init(void);
+CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *, CURLSHoption option, ...);
+CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *);
+
+/****************************************************************************
+ * Structures for querying information about the curl library at runtime.
+ */
+
+typedef enum {
+  CURLVERSION_FIRST,
+  CURLVERSION_SECOND,
+  CURLVERSION_THIRD,
+  CURLVERSION_LAST /* never actually use this */
+} CURLversion;
+
+/* The 'CURLVERSION_NOW' is the symbolic name meant to be used by
+   basicly all programs ever, that want to get version information. It is
+   meant to be a built-in version number for what kind of struct the caller
+   expects. If the struct ever changes, we redefine the NOW to another enum
+   from above. */
+#define CURLVERSION_NOW CURLVERSION_THIRD
+
+typedef struct {
+  CURLversion age;          /* age of the returned struct */
+  const char *version;      /* LIBCURL_VERSION */
+  unsigned int version_num; /* LIBCURL_VERSION_NUM */
+  const char *host;         /* OS/host/cpu/machine when configured */
+  int features;             /* bitmask, see defines below */
+  const char *ssl_version;  /* human readable string */
+  long ssl_version_num;     /* not used anymore, always 0 */
+  const char *libz_version; /* human readable string */
+  /* protocols is terminated by an entry with a NULL protoname */
+  const char * const *protocols;
+
+  /* The fields below this were added in CURLVERSION_SECOND */
+  const char *ares;
+  int ares_num;
+
+  /* This field was added in CURLVERSION_THIRD */
+  const char *libidn;
+
+  /* Same as '_libiconv_version' if built with HAVE_ICONV */
+  int iconv_ver_num;
+} curl_version_info_data;
+
+#define CURL_VERSION_IPV6      (1<<0)  /* IPv6-enabled */
+#define CURL_VERSION_KERBEROS4 (1<<1)  /* kerberos auth is supported */
+#define CURL_VERSION_SSL       (1<<2)  /* SSL options are present */
+#define CURL_VERSION_LIBZ      (1<<3)  /* libz features are present */
+#define CURL_VERSION_NTLM      (1<<4)  /* NTLM auth is supported */
+#define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth support */
+#define CURL_VERSION_DEBUG     (1<<6)  /* built with debug capabilities */
+#define CURL_VERSION_ASYNCHDNS (1<<7)  /* asynchronous dns resolves */
+#define CURL_VERSION_SPNEGO    (1<<8)  /* SPNEGO auth */
+#define CURL_VERSION_LARGEFILE (1<<9)  /* supports files bigger than 2GB */
+#define CURL_VERSION_IDN       (1<<10) /* International Domain Names support */
+#define CURL_VERSION_SSPI      (1<<11) /* SSPI is supported */
+#define CURL_VERSION_CONV      (1<<12) /* character conversions are
+                                          supported */
+
+/*
+ * NAME curl_version_info()
+ *
+ * DESCRIPTION
+ *
+ * This function returns a pointer to a static copy of the version info
+ * struct. See above.
+ */
+CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion);
+
+/*
+ * NAME curl_easy_strerror()
+ *
+ * DESCRIPTION
+ *
+ * The curl_easy_strerror function may be used to turn a CURLcode value
+ * into the equivalent human readable error string.  This is useful
+ * for printing meaningful error messages.
+ */
+CURL_EXTERN const char *curl_easy_strerror(CURLcode);
+
+/*
+ * NAME curl_share_strerror()
+ *
+ * DESCRIPTION
+ *
+ * The curl_share_strerror function may be used to turn a CURLSHcode value
+ * into the equivalent human readable error string.  This is useful
+ * for printing meaningful error messages.
+ */
+CURL_EXTERN const char *curl_share_strerror(CURLSHcode);
+
+#ifdef  __cplusplus
+}
+#endif
+
+/* unfortunately, the easy.h and multi.h include files need options and info
+  stuff before they can be included! */
+#include "easy.h" /* nothing in curl is fun without the easy stuff */
+#include "multi.h"
+
+#endif /* __CURL_CURL_H */
diff --git a/libs/kns/curlhdr/curlver.h b/libs/kns/curlhdr/curlver.h
new file mode 100644
index 0000000..46fc5d8
--- /dev/null
+++ b/libs/kns/curlhdr/curlver.h
@@ -0,0 +1,56 @@
+#ifndef __CURL_CURLVER_H
+#define __CURL_CURLVER_H
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel at haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * $Id: curlver.h,v 1.1 2012/11/09 17:54:52 rodarmer Exp $
+ ***************************************************************************/
+
+/* This header file contains nothing but libcurl version info, generated by
+   a script at release-time. This was made its own header file in 7.11.2 */
+
+/* This is the version number of the libcurl package from which this header
+   file origins: */
+#define LIBCURL_VERSION "7.15.5"
+
+/* The numeric version number is also available "in parts" by using these
+   defines: */
+#define LIBCURL_VERSION_MAJOR 7
+#define LIBCURL_VERSION_MINOR 15
+#define LIBCURL_VERSION_PATCH 5
+
+/* This is the numeric version of the libcurl version number, meant for easier
+   parsing and comparions by programs. The LIBCURL_VERSION_NUM define will
+   always follow this syntax:
+
+         0xXXYYZZ
+
+   Where XX, YY and ZZ are the main version, release and patch numbers in
+   hexadecimal (using 8 bits each). All three numbers are always represented
+   using two digits.  1.2 would appear as "0x010200" while version 9.11.7
+   appears as "0x090b07".
+
+   This 6-digit (24 bits) hexadecimal number does not show pre-release number,
+   and it is always a greater number in a more recent release. It makes
+   comparisons with greater than and less than work.
+*/
+#define LIBCURL_VERSION_NUM 0x070f05
+
+#endif /* __CURL_CURLVER_H */
diff --git a/libs/kns/curlhdr/easy.h b/libs/kns/curlhdr/easy.h
new file mode 100644
index 0000000..2f96c9a
--- /dev/null
+++ b/libs/kns/curlhdr/easy.h
@@ -0,0 +1,81 @@
+#ifndef __CURL_EASY_H
+#define __CURL_EASY_H
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2004, Daniel Stenberg, <daniel at haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * $Id: easy.h,v 1.1 2012/11/09 17:54:52 rodarmer Exp $
+ ***************************************************************************/
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+CURL_EXTERN CURL *curl_easy_init(void);
+CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);
+CURL_EXTERN CURLcode curl_easy_perform(CURL *curl);
+CURL_EXTERN void curl_easy_cleanup(CURL *curl);
+
+/*
+ * NAME curl_easy_getinfo()
+ *
+ * DESCRIPTION
+ *
+ * Request internal information from the curl session with this function.  The
+ * third argument MUST be a pointer to a long, a pointer to a char * or a
+ * pointer to a double (as the documentation describes elsewhere).  The data
+ * pointed to will be filled in accordingly and can be relied upon only if the
+ * function returns CURLE_OK.  This function is intended to get used *AFTER* a
+ * performed transfer, all results from this function are undefined until the
+ * transfer is completed.
+ */
+CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...);
+
+
+/*
+ * NAME curl_easy_duphandle()
+ *
+ * DESCRIPTION
+ *
+ * Creates a new curl session handle with the same options set for the handle
+ * passed in. Duplicating a handle could only be a matter of cloning data and
+ * options, internal state info and things like persistant connections cannot
+ * be transfered. It is useful in multithreaded applications when you can run
+ * curl_easy_duphandle() for each new thread to avoid a series of identical
+ * curl_easy_setopt() invokes in every thread.
+ */
+CURL_EXTERN CURL* curl_easy_duphandle(CURL *curl);
+
+/*
+ * NAME curl_easy_reset()
+ *
+ * DESCRIPTION
+ *
+ * Re-initializes a CURL handle to the default values. This puts back the
+ * handle to the same state as it was in when it was just created.
+ *
+ * It does keep: live connections, the Session ID cache, the DNS cache and the
+ * cookies.
+ */
+CURL_EXTERN void curl_easy_reset(CURL *curl);
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif
diff --git a/libs/kns/curlhdr/multi.h b/libs/kns/curlhdr/multi.h
new file mode 100644
index 0000000..bbddc13
--- /dev/null
+++ b/libs/kns/curlhdr/multi.h
@@ -0,0 +1,344 @@
+#ifndef __CURL_MULTI_H
+#define __CURL_MULTI_H
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel at haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at http://curl.haxx.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * $Id: multi.h,v 1.1 2012/11/09 17:54:52 rodarmer Exp $
+ ***************************************************************************/
+/*
+  This is an "external" header file. Don't give away any internals here!
+
+  GOALS
+
+  o Enable a "pull" interface. The application that uses libcurl decides where
+    and when to ask libcurl to get/send data.
+
+  o Enable multiple simultaneous transfers in the same thread without making it
+    complicated for the application.
+
+  o Enable the application to select() on its own file descriptors and curl's
+    file descriptors simultaneous easily.
+
+*/
+#if defined(_WIN32) && !defined(WIN32)
+/* Chris Lewis mentioned that he doesn't get WIN32 defined, only _WIN32 so we
+   make this adjustment to catch this. */
+#define WIN32 1
+#endif
+
+#if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__GNUC__) && \
+  !defined(__CYGWIN__) || defined(__MINGW32__)
+#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H))
+/* The check above prevents the winsock2 inclusion if winsock.h already was
+   included, since they can't co-exist without problems */
+#include <winsock2.h>
+#endif
+#else
+
+/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish
+   libc5-based Linux systems. Only include it on system that are known to
+   require it! */
+#if defined(_AIX) || defined(NETWARE) || defined(__NetBSD__) || defined(_MINIX)
+#include <sys/select.h>
+#endif
+
+#ifndef _WIN32_WCE
+#include <sys/socket.h>
+#endif
+#include <sys/time.h>
+#include <sys/types.h>
+#endif
+
+/*
+ * This header file should not really need to include "curl.h" since curl.h
+ * itself includes this file and we expect user applications to do #include
+ * <curl/curl.h> without the need for especially including multi.h.
+ *
+ * For some reason we added this include here at one point, and rather than to
+ * break existing (wrongly written) libcurl applications, we leave it as-is
+ * but with this warning attached.
+ */
+#include "curl.h"
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+typedef void CURLM;
+
+#ifndef curl_socket_typedef
+/* Public socket typedef */
+#ifdef WIN32
+typedef SOCKET curl_socket_t;
+#define CURL_SOCKET_BAD INVALID_SOCKET
+#else
+typedef int curl_socket_t;
+#define CURL_SOCKET_BAD -1
+#endif
+#define curl_socket_typedef
+#endif /* curl_socket_typedef */
+
+typedef enum {
+  CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or
+                                    curl_multi_socket*() soon */
+  CURLM_OK,
+  CURLM_BAD_HANDLE,      /* the passed-in handle is not a valid CURLM handle */
+  CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */
+  CURLM_OUT_OF_MEMORY,   /* if you ever get this, you're in deep sh*t */
+  CURLM_INTERNAL_ERROR,  /* this is a libcurl bug */
+  CURLM_BAD_SOCKET,      /* the passed in socket argument did not match */
+  CURLM_UNKNOWN_OPTION,  /* curl_multi_setopt() with unsupported option */
+  CURLM_LAST
+} CURLMcode;
+
+/* just to make code nicer when using curl_multi_socket() you can now check
+   for CURLM_CALL_MULTI_SOCKET too in the same style it works for
+   curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */
+#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM
+
+typedef enum {
+  CURLMSG_NONE, /* first, not used */
+  CURLMSG_DONE, /* This easy handle has completed. 'result' contains
+                   the CURLcode of the transfer */
+  CURLMSG_LAST /* last, not used */
+} CURLMSG;
+
+struct CURLMsg {
+  CURLMSG msg;       /* what this message means */
+  CURL *easy_handle; /* the handle it concerns */
+  union {
+    void *whatever;    /* message-specific data */
+    CURLcode result;   /* return code for transfer */
+  } data;
+};
+typedef struct CURLMsg CURLMsg;
+
+/*
+ * Name:    curl_multi_init()
+ *
+ * Desc:    inititalize multi-style curl usage
+ *
+ * Returns: a new CURLM handle to use in all 'curl_multi' functions.
+ */
+CURL_EXTERN CURLM *curl_multi_init(void);
+
+/*
+ * Name:    curl_multi_add_handle()
+ *
+ * Desc:    add a standard curl handle to the multi stack
+ *
+ * Returns: CURLMcode type, general multi error code.
+ */
+CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle,
+                                            CURL *curl_handle);
+
+ /*
+  * Name:    curl_multi_remove_handle()
+  *
+  * Desc:    removes a curl handle from the multi stack again
+  *
+  * Returns: CURLMcode type, general multi error code.
+  */
+CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
+                                               CURL *curl_handle);
+
+ /*
+  * Name:    curl_multi_fdset()
+  *
+  * Desc:    Ask curl for its fd_set sets. The app can use these to select() or
+  *          poll() on. We want curl_multi_perform() called as soon as one of
+  *          them are ready.
+  *
+  * Returns: CURLMcode type, general multi error code.
+  */
+CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle,
+                                       fd_set *read_fd_set,
+                                       fd_set *write_fd_set,
+                                       fd_set *exc_fd_set,
+                                       int *max_fd);
+
+ /*
+  * Name:    curl_multi_perform()
+  *
+  * Desc:    When the app thinks there's data available for curl it calls this
+  *          function to read/write whatever there is right now. This returns
+  *          as soon as the reads and writes are done. This function does not
+  *          require that there actually is data available for reading or that
+  *          data can be written, it can be called just in case. It returns
+  *          the number of handles that still transfer data in the second
+  *          argument's integer-pointer.
+  *
+  * Returns: CURLMcode type, general multi error code. *NOTE* that this only
+  *          returns errors etc regarding the whole multi stack. There might
+  *          still have occurred problems on invidual transfers even when this
+  *          returns OK.
+  */
+CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle,
+                                         int *running_handles);
+
+ /*
+  * Name:    curl_multi_cleanup()
+  *
+  * Desc:    Cleans up and removes a whole multi stack. It does not free or
+  *          touch any individual easy handles in any way. We need to define
+  *          in what state those handles will be if this function is called
+  *          in the middle of a transfer.
+  *
+  * Returns: CURLMcode type, general multi error code.
+  */
+CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle);
+
+/*
+ * Name:    curl_multi_info_read()
+ *
+ * Desc:    Ask the multi handle if there's any messages/informationals from
+ *          the individual transfers. Messages include informationals such as
+ *          error code from the transfer or just the fact that a transfer is
+ *          completed. More details on these should be written down as well.
+ *
+ *          Repeated calls to this function will return a new struct each
+ *          time, until a special "end of msgs" struct is returned as a signal
+ *          that there is no more to get at this point.
+ *
+ *          The data the returned pointer points to will not survive calling
+ *          curl_multi_cleanup().
+ *
+ *          The 'CURLMsg' struct is meant to be very simple and only contain
+ *          very basic informations. If more involved information is wanted,
+ *          we will provide the particular "transfer handle" in that struct
+ *          and that should/could/would be used in subsequent
+ *          curl_easy_getinfo() calls (or similar). The point being that we
+ *          must never expose complex structs to applications, as then we'll
+ *          undoubtably get backwards compatibility problems in the future.
+ *
+ * Returns: A pointer to a filled-in struct, or NULL if it failed or ran out
+ *          of structs. It also writes the number of messages left in the
+ *          queue (after this read) in the integer the second argument points
+ *          to.
+ */
+CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle,
+                                          int *msgs_in_queue);
+
+/*
+ * Name:    curl_multi_strerror()
+ *
+ * Desc:    The curl_multi_strerror function may be used to turn a CURLMcode
+ *          value into the equivalent human readable error string.  This is
+ *          useful for printing meaningful error messages.
+ *
+ * Returns: A pointer to a zero-terminated error message.
+ */
+CURL_EXTERN const char *curl_multi_strerror(CURLMcode);
+
+/*
+ * Name:    curl_multi_socket() and
+ *          curl_multi_socket_all()
+ *
+ * Desc:    An alternative version of curl_multi_perform() that allows the
+ *          application to pass in one of the file descriptors that have been
+ *          detected to have "action" on them and let libcurl perform.
+ *          See man page for details.
+ */
+#define CURL_POLL_NONE   0
+#define CURL_POLL_IN     1
+#define CURL_POLL_OUT    2
+#define CURL_POLL_INOUT  3
+#define CURL_POLL_REMOVE 4
+
+#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD
+
+typedef int (*curl_socket_callback)(CURL *easy,      /* easy handle */
+                                    curl_socket_t s, /* socket */
+                                    int what,        /* see above */
+                                    void *userp,     /* private callback
+                                                        pointer */
+                                    void *socketp);  /* private socket
+                                                        pointer */
+
+CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s,
+                                        int *running_handles);
+
+CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle,
+                                            int *running_handles);
+
+/*
+ * Name:    curl_multi_timeout()
+ *
+ * Desc:    Returns the maximum number of milliseconds the app is allowed to
+ *          wait before curl_multi_socket() or curl_multi_perform() must be
+ *          called (to allow libcurl's timed events to take place).
+ *
+ * Returns: CURLM error code.
+ */
+CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle,
+                                         long *milliseconds);
+
+#undef CINIT /* re-using the same name as in curl.h */
+
+#ifdef CURL_ISOCPP
+#define CINIT(name,type,number) CURLMOPT_ ## name = CURLOPTTYPE_ ## type + number
+#else
+/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
+#define LONG          CURLOPTTYPE_LONG
+#define OBJECTPOINT   CURLOPTTYPE_OBJECTPOINT
+#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT
+#define OFF_T         CURLOPTTYPE_OFF_T
+#define CINIT(name,type,number) CURLMOPT_/**/name = type + number
+#endif
+
+typedef enum {
+  /* This is the socket callback function pointer */
+  CINIT(SOCKETFUNCTION, FUNCTIONPOINT, 1),
+
+  /* This is the argument passed to the socket callback */
+  CINIT(SOCKETDATA, OBJECTPOINT, 2),
+
+  CURLMOPT_LASTENTRY /* the last unused */
+} CURLMoption;
+
+
+/*
+ * Name:    curl_multi_setopt()
+ *
+ * Desc:    Sets options for the multi handle.
+ *
+ * Returns: CURLM error code.
+ */
+CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle,
+                                        CURLMoption option, ...);
+
+
+/*
+ * Name:    curl_multi_assign()
+ *
+ * Desc:    This function sets an association in the multi handle between the
+ *          given socket and a private pointer of the application. This is
+ *          (only) useful for curl_multi_socket uses.
+ *
+ * Returns: CURLM error code.
+ */
+CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle,
+                                        curl_socket_t sockfd, void *sockp);
+
+#ifdef __cplusplus
+} /* end of extern "C" */
+#endif
+
+#endif
diff --git a/libs/kns/curlhdr/types.h b/libs/kns/curlhdr/types.h
new file mode 100644
index 0000000..d37d6ae
--- /dev/null
+++ b/libs/kns/curlhdr/types.h
@@ -0,0 +1 @@
+/* not used */
diff --git a/libs/kns/entrez-fetcher.c b/libs/kns/entrez-fetcher.c
new file mode 100644
index 0000000..fb3f004
--- /dev/null
+++ b/libs/kns/entrez-fetcher.c
@@ -0,0 +1,221 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <klib/rc.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/refcount.h>
+#include <kns/entrez-fetcher.h>
+#include <kns/url-fetcher.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+#define URI_PARAM_LEN 70
+#define ENTREZ_FIRST_LINE_LEN 120
+#define ENTREZ_NEWLINE_DIV 80
+
+struct KEntrezFetcher
+{
+    KRefcount refcount;
+
+    KUrlFetcher * url_fetcher;
+    char * uri;
+};
+
+static const char classname[] = "KSraFetcher";
+
+rc_t KEntrezFetcherAddRef ( const KEntrezFetcher *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, classname ) )
+        {
+        case krefLimit:
+            return RC ( rcApp, rcFunction, rcAttaching, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+
+rc_t KEntrezFetcherRelease ( const KEntrezFetcher *cself )
+{
+    KEntrezFetcher *self = ( KEntrezFetcher* ) cself;
+    if ( cself != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, classname ) )
+        {
+        case krefWhack:
+            {
+                KUrlFetcherRelease ( self -> url_fetcher );
+                if ( self -> uri ) free( self -> uri );
+                free( self );
+                return 0;
+            }
+        case krefLimit:
+            return RC ( rcApp, rcFunction, rcReleasing, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+
+rc_t KEntrezFetcherSetupUri ( KEntrezFetcher *self, const char * uri )
+{
+    if ( uri == NULL || uri[0] == 0 )
+        return RC ( rcApp, rcFunction, rcAccessing, rcParam, rcNull );
+    if ( self == NULL )
+        return RC ( rcApp, rcFunction, rcAccessing, rcSelf, rcNull );
+
+    if ( self -> uri ) free( self -> uri );
+    self -> uri = string_dup_measure ( uri, NULL );
+    return 0;
+}
+
+
+/* composes the internal uri from the parameters and returns an estimated buffersize */
+rc_t KEntrezFetcherSetup ( KEntrezFetcher *self,
+    const char * server, const char * seq_id, 
+    const size_t max_seq_len, const uint64_t row_id, const size_t row_count,
+    size_t * buffsize )
+{
+    rc_t rc;
+    size_t uri_len;
+
+    if ( server == NULL || seq_id == NULL || buffsize == NULL )
+        return RC ( rcApp, rcFunction, rcAccessing, rcParam, rcNull );
+    if ( self == NULL )
+        return RC ( rcApp, rcFunction, rcAccessing, rcSelf, rcNull );
+
+    if ( self -> uri ) free( self -> uri );
+    uri_len = string_size( server ) + string_size( seq_id ) + URI_PARAM_LEN;
+    self -> uri = malloc( uri_len );
+    if ( self -> uri != NULL )
+    {
+        size_t num_written;
+        uint64_t seq_start, seq_stop;
+        
+        seq_start = max_seq_len * ( row_id - 1 ) + 1;
+        seq_stop = max_seq_len * ( row_id + row_count - 1 );
+        
+        if ( seq_stop <= seq_start )
+            return RC ( rcApp, rcFunction, rcAccessing, rcSelf, rcNull );
+            
+        *buffsize = ( seq_stop - seq_start );
+        *buffsize += ( *buffsize / ENTREZ_NEWLINE_DIV );
+        *buffsize += ENTREZ_FIRST_LINE_LEN;
+
+        rc = string_printf ( self->uri, uri_len, &num_written, 
+            "%s?db=nucleotide&id=%s&rettype=fasta&seq_start=%lu&seq_stop=%lu", 
+            server, seq_id, seq_start, seq_stop );
+    }
+    else
+        rc = RC( rcExe, rcString, rcAllocating, rcMemory, rcExhausted );
+    
+    return rc;
+}
+
+
+/* remove the first line, including it's line-feed */
+static void remove_first_line( char * s, size_t * len )
+{
+    char * p = string_chr ( s, *len, '\n' );
+    if ( p )
+    {
+        *len -= ( p - s ) + 1;
+        memmove( s, p + 1, *len );
+    }
+}
+
+
+/* filters out all char's c by using a filtered temp-buffer... */
+static void filter_char( char * s, size_t * len, const char c )
+{
+    size_t src, dst;
+
+    if ( s == NULL || len == NULL || *len == 0 )
+        return;
+
+    dst = 0;
+    for ( src = 0; src < *len; ++src )
+    {
+        char ch = s[ src ];
+        if ( ch != c )
+        {
+            if ( src != dst )
+                s[ dst ] = ch;
+            ++dst;
+        }
+    }
+    *len = dst;
+}
+
+
+rc_t KEntrezFetcherRead ( KEntrezFetcher *self,
+                          void *dst, size_t dst_size, size_t *num_read )
+{
+    rc_t rc;
+    
+    if ( dst == NULL || dst_size == 0 || num_read == NULL )
+        return RC ( rcApp, rcFunction, rcAccessing, rcParam, rcNull );
+    if ( self == NULL )
+        return RC ( rcApp, rcFunction, rcAccessing, rcSelf, rcNull );
+    if ( self -> url_fetcher == NULL || self -> uri == NULL )
+        return RC ( rcApp, rcFunction, rcAccessing, rcParam, rcNull );
+
+    rc = KUrlFetcherRead( self -> url_fetcher, self -> uri, dst, dst_size, num_read );
+    if ( rc == 0 )
+    {
+        remove_first_line( dst, num_read );
+        filter_char( dst, num_read, '\n' );
+    }
+    return rc;
+}
+
+
+rc_t KEntrezFetcherMake ( KEntrezFetcher **fetcher, KUrlFetcher * url_fetcher )
+{
+    rc_t rc;
+
+    if ( fetcher == NULL || url_fetcher == NULL )
+        rc = RC ( rcApp, rcFunction, rcConstructing, rcParam, rcNull );
+    else
+    {
+        *fetcher = malloc( sizeof( *fetcher ) );
+        if ( *fetcher != NULL )
+        {
+            (*fetcher) -> url_fetcher = url_fetcher;
+            KUrlFetcherAddRef ( url_fetcher );
+            (*fetcher) -> uri = NULL;
+            rc = 0;
+        }
+        else
+            rc = RC( rcApp, rcFunction, rcListing, rcParam, rcNull );
+    }
+    return rc;
+}
diff --git a/libs/kns/kns_manager.c b/libs/kns/kns_manager.c
new file mode 100644
index 0000000..c38fa47
--- /dev/null
+++ b/libs/kns/kns_manager.c
@@ -0,0 +1,263 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kns/extern.h>
+
+#include <klib/refcount.h>
+#include <klib/rc.h>
+#include <kfs/dyload.h>
+
+#include "kns_mgr_priv.h"
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+
+static const char knsmanager_classname [] = "KNSManager";
+static struct KNSManager * kns_mgr_singleton = NULL;
+static KDylib *lib_curl_handle = NULL;
+
+
+LIB_EXPORT rc_t CC KNSManagerAddRef ( const struct KNSManager *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd( &self->refcount, knsmanager_classname ) )
+        {
+        case krefOkay:
+            break;
+        case krefZero:
+            return RC( rcNS, rcMgr, rcAttaching, rcRefcount, rcIncorrect);
+        case krefLimit:
+            return RC( rcNS, rcMgr, rcAttaching, rcRefcount, rcExhausted);
+        case krefNegative:
+            return RC( rcNS, rcMgr, rcAttaching, rcRefcount, rcInvalid);
+        default:
+            return RC( rcNS, rcMgr, rcAttaching, rcRefcount, rcUnknown);
+        }
+    }
+    return 0;
+}
+
+
+static rc_t KNSManagerLoadLib( struct KNSManager *self )
+{
+    KDyld *dl;
+    /* make a dynamic-library loader */
+    rc_t rc = KDyldMake ( &dl );
+    if ( rc == 0 )
+    {
+        /* load the curl-library */
+        rc = KDyldLoadLib( dl, &lib_curl_handle, LPFX "curl" SHLX );
+        if ( rc == 0 )
+        {
+            KSymAddr *sym;
+
+            /* resolve symbols */
+
+            /* curl_easy_init() */
+            rc = KDylibSymbol( lib_curl_handle, &sym, "curl_easy_init" );
+            if ( rc == 0 )
+            {
+                KSymAddrAsFunc( sym, ( fptr_t* ) &(self->curl_easy_init_fkt) );
+                KSymAddrRelease( sym );
+            }
+
+            /* curl_easy_cleanup() */
+            if ( rc == 0 )
+            {
+                rc = KDylibSymbol( lib_curl_handle, &sym, "curl_easy_cleanup" );
+                KSymAddrAsFunc( sym, ( fptr_t* ) &(self->curl_easy_cleanup_fkt) );
+                KSymAddrRelease( sym );
+            }
+
+            /* curl_easy_setopt() */
+            if ( rc == 0 )
+            {
+                rc = KDylibSymbol( lib_curl_handle, &sym, "curl_easy_setopt" );
+                KSymAddrAsFunc( sym, ( fptr_t* ) &(self->curl_easy_setopt_fkt) );
+                KSymAddrRelease( sym );
+            }
+
+            /* curl_easy_perform() */
+            if ( rc == 0 )
+            {
+                rc = KDylibSymbol( lib_curl_handle, &sym, "curl_easy_perform" );
+                KSymAddrAsFunc( sym, ( fptr_t* ) &(self->curl_easy_perform_fkt) );
+                KSymAddrRelease( sym );
+            }
+
+            /* curl_easy_getinfo() */
+            if ( rc == 0 )
+            {
+                rc = KDylibSymbol( lib_curl_handle, &sym, "curl_easy_getinfo" );
+                KSymAddrAsFunc( sym, ( fptr_t* ) &(self->curl_easy_getinfo_fkt) );
+                KSymAddrRelease( sym );
+            }
+
+            /* curl_slist_append() */
+            if ( rc == 0 )
+            {
+                rc = KDylibSymbol( lib_curl_handle, &sym, "curl_slist_append" );
+                KSymAddrAsFunc( sym, ( fptr_t* ) &(self->curl_slist_append_fkt) );
+                KSymAddrRelease( sym );
+            }
+
+            /* curl_version() */
+            if ( rc == 0 )
+            {
+                rc = KDylibSymbol( lib_curl_handle, &sym, "curl_version" );
+                KSymAddrAsFunc( sym, ( fptr_t* ) &(self->curl_version_fkt) );
+                KSymAddrRelease( sym );
+            }
+
+            /* curl_slist_free_all() */
+            if ( rc == 0 )
+            {
+                rc = KDylibSymbol( lib_curl_handle, &sym, "curl_slist_free_all" );
+                KSymAddrAsFunc( sym, ( fptr_t* ) &(self->curl_slist_free_all_fkt) );
+                KSymAddrRelease( sym );
+            }
+
+            /* bail on error */
+            if ( rc != 0 )
+            {
+                KDylibRelease ( lib_curl_handle );
+                lib_curl_handle = NULL;
+                self->curl_easy_init_fkt = NULL;
+                self->curl_easy_cleanup_fkt = NULL;
+                self->curl_easy_setopt_fkt = NULL;
+                self->curl_easy_perform_fkt = NULL;
+                self->curl_slist_append_fkt = NULL;
+                self->curl_version_fkt = NULL;
+                self->curl_easy_getinfo_fkt = NULL;
+            }
+        }
+        KDyldRelease ( dl );
+    }
+
+    return rc;
+
+}
+
+
+LIB_EXPORT rc_t CC KNSManagerMake( struct KNSManager **self )
+{
+    rc_t rc = 0;
+
+    if ( self == NULL )
+        return RC( rcNS, rcMgr, rcConstructing, rcSelf, rcNull );
+
+    *self = kns_mgr_singleton;
+    if ( kns_mgr_singleton != NULL )
+    {
+        rc = KNSManagerAddRef( kns_mgr_singleton );
+        if ( rc != 0 )
+            *self = NULL;
+    }
+    else
+    {
+        struct KNSManager *tmp;
+        tmp = calloc( 1, sizeof * tmp );
+        if ( tmp == NULL )
+            rc = RC( rcNS, rcMgr, rcConstructing, rcMemory, rcExhausted );
+        else
+        {
+            tmp->create_rc = KNSManagerLoadLib( tmp );
+            KRefcountInit( &tmp->refcount, 1, "KNS", "make", knsmanager_classname );
+        }
+        *self = tmp;
+        kns_mgr_singleton = tmp;
+    }
+
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC KNSManagerAvail( const struct KNSManager *self )
+{
+    if ( self == NULL )
+        return RC( rcNS, rcMgr, rcReading, rcSelf, rcNull );
+    return self->create_rc;
+}
+
+
+LIB_EXPORT rc_t CC KNSManagerCurlVersion( const struct KNSManager *self, const char ** version_string )
+{
+    if ( self == NULL )
+        return RC( rcNS, rcMgr, rcReading, rcSelf, rcNull );
+    if ( version_string == NULL )
+        return RC( rcNS, rcMgr, rcReading, rcParam, rcNull );
+    if ( self->create_rc != 0 )
+        return self->create_rc;
+    *version_string = self->curl_version_fkt();
+    return 0;
+}
+
+
+static rc_t KNSManagerDestroy( struct KNSManager *self )
+{
+    if ( self == NULL )
+        return RC( rcNS, rcFile, rcDestroying, rcSelf, rcNull );
+
+    KRefcountWhack( &self->refcount, knsmanager_classname );
+
+    free( self );
+    kns_mgr_singleton = NULL;
+    
+    KDylibRelease ( lib_curl_handle );
+    lib_curl_handle = NULL;
+    
+    return 0;
+}
+
+
+LIB_EXPORT rc_t CC KNSManagerRelease( const struct KNSManager *self )
+{
+    rc_t rc = 0;
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop( &self->refcount, knsmanager_classname ) )
+        {
+        case krefOkay:
+        case krefZero:
+            break;
+        case krefWhack:
+            rc = KNSManagerDestroy( ( struct KNSManager * )self );
+            break;
+        case krefNegative:
+            return RC( rcNS, rcMgr, rcAttaching, rcRefcount, rcInvalid );
+        default:
+            rc = RC( rcNS, rcMgr, rcAttaching, rcRefcount, rcUnknown );
+            break;            
+        }
+    }
+    return rc;
+}
diff --git a/libs/kns/kns_mgr_priv.h b/libs/kns/kns_mgr_priv.h
new file mode 100644
index 0000000..eb52829
--- /dev/null
+++ b/libs/kns/kns_mgr_priv.h
@@ -0,0 +1,59 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_kns_mgr_priv_
+#define _h_kns_mgr_priv_
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "curlhdr/curl.h"
+#include "curlhdr/easy.h"
+
+/* this is the hidden manager-struct: a refcount with some function-pointer's */
+struct KNSManager
+{
+    KRefcount refcount;
+
+    rc_t create_rc;
+
+    /* curl-easy-function-pointers... */
+    CURL*    ( CC * curl_easy_init_fkt )    ( void );
+    void     ( CC * curl_easy_cleanup_fkt ) ( CURL * handle );
+    CURLcode ( CC * curl_easy_setopt_fkt )  ( CURL *handle, CURLoption option, ... );
+    CURLcode ( CC * curl_easy_perform_fkt ) ( CURL * handle );
+    CURLcode ( CC * curl_easy_getinfo_fkt ) ( CURL *curl, CURLINFO info, ... );
+    char *   ( CC * curl_version_fkt )      ( void );
+    struct curl_slist* ( CC * curl_slist_append_fkt ) ( struct curl_slist * list, const char * string );
+    void ( CC * curl_slist_free_all_fkt ) ( struct curl_slist * list );
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/libs/align/libalign-writer.vers b/libs/kns/libkns.vers
similarity index 100%
copy from libs/align/libalign-writer.vers
copy to libs/kns/libkns.vers
diff --git a/libs/kns/libkurl.vers b/libs/kns/libkurl.vers
new file mode 100644
index 0000000..7ee7020
--- /dev/null
+++ b/libs/kns/libkurl.vers
@@ -0,0 +1 @@
+1.0.10
diff --git a/libs/kns/stream-from-files.c b/libs/kns/stream-from-files.c
new file mode 100644
index 0000000..2ac4e0b
--- /dev/null
+++ b/libs/kns/stream-from-files.c
@@ -0,0 +1,168 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+typedef struct KStreamFromFiles KStreamFromFiles;
+#define KSTREAM_IMPL KStreamFromFiles
+
+#include <kns/extern.h>
+#include <kns/stream.h>
+#include <kns/impl.h>
+#include <kfs/file.h>
+#include <kfs/impl.h>
+#include <klib/rc.h>
+
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h>
+
+#include "stream-priv.h"
+
+
+/* the object structure for THIS implementation */
+struct  KStreamFromFiles
+{
+    /* THIS MUST COME FIRST */
+    KStream dad;
+
+    uint64_t in_pos;
+    uint64_t out_pos;
+
+    const KFile *in;
+    KFile *out;
+};
+
+
+/* the required methods */
+
+static
+rc_t CC KStreamFromFilesWhack ( KStreamFromFiles *self )
+{
+    KFileRelease ( self -> in );
+    KFileRelease ( self -> out );
+    free ( self );
+    return 0;
+}
+
+static
+rc_t CC KStreamFromFilesRead ( const KStreamFromFiles *cself,
+    void *buffer, size_t bsize, size_t *num_read )
+{
+    rc_t rc = KFileRead ( cself -> in, cself -> in_pos, buffer, bsize, num_read );
+    if ( rc == 0 )
+    {
+        KStreamFromFiles *self = ( KStreamFromFiles* ) cself;
+        self -> in_pos += * num_read;
+    }
+
+    return rc;
+}
+
+static
+rc_t CC KStreamFromFilesWrite ( KStreamFromFiles *self,
+    const void *buffer, size_t size, size_t *num_writ )
+{
+    rc_t rc = KFileWrite ( self -> out, self -> out_pos, buffer, size, num_writ );
+    if ( rc == 0 )
+        self -> out_pos += * num_writ;
+
+    return rc;
+}
+
+/* the vtable */
+static KStream_vt_v1 vtKStreamFromFiles =
+{
+    1, 0,
+    KStreamFromFilesWhack,
+    KStreamFromFilesRead,
+    KStreamFromFilesWrite
+};
+
+
+/* FromKFilePair
+ *  create a KStream from a pair of KFiles
+ *  maintains a "pos" marker for input and output files
+ *
+ *  "strm" [ OUT ] - resultant KStream
+ *
+ *  "read" [ IN, NULL OKAY ] - file to use for stream reading
+ *
+ *  "write" [ IN, NULL OKAY ] - file to use for stream writing
+ *
+ * NB - EITHER "read" or "write" may be NULL, but not both.
+ */
+LIB_EXPORT rc_t CC KStreamFromKFilePair ( KStream **strm,
+    const KFile *read, KFile *write )
+{
+    rc_t rc;
+
+    if ( strm == NULL )
+        rc = RC ( rcNS, rcStream, rcConstructing, rcParam, rcNull );
+    else
+    {
+        bool can_read = ( read == NULL ) ? false : read -> read_enabled;
+        bool can_write = ( write == NULL ) ? false : write -> write_enabled;
+
+        if ( ! can_read && ! can_write )
+            rc = RC ( rcNS, rcStream, rcConstructing, rcFile, rcNoPerm );
+        else
+        {
+            KStreamFromFiles *sff = calloc ( 1, sizeof *sff );
+            if ( sff == NULL )
+                rc = RC ( rcNS, rcStream, rcConstructing, rcMemory, rcExhausted );
+            else
+            {
+                rc = KStreamInit ( & sff -> dad, ( const KStream_vt* ) & vtKStreamFromFiles, 
+                                   "KStreamFromFilePair", "adapter", can_read, can_write );
+                if ( rc == 0 )
+                {
+                    rc = KFileAddRef ( read );
+                    if ( rc == 0 )
+                    {
+                        rc = KFileAddRef ( write );
+                        if ( rc ==  0 )
+                        {
+                            sff -> in = read;
+                            sff -> out = write;
+                            *strm = & sff -> dad;
+
+                            return 0;
+                        }
+
+                        KFileRelease ( read );
+                    }
+                }
+
+                free ( sff );
+            }
+        }
+
+        *strm = NULL;
+    }
+
+    return rc;
+}
diff --git a/libs/kns/stream-from-streams.c b/libs/kns/stream-from-streams.c
new file mode 100644
index 0000000..a788403
--- /dev/null
+++ b/libs/kns/stream-from-streams.c
@@ -0,0 +1,150 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+typedef struct KStreamFromStreams KStreamFromStreams;
+#define KSTREAM_IMPL KStreamFromStreams
+
+#include <kns/extern.h>
+#include <kns/stream.h>
+#include <kns/impl.h>
+#include <klib/rc.h>
+
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h>
+
+#include "stream-priv.h"
+
+/* the object structure for THIS implementation */
+struct  KStreamFromStreams
+{
+    /* THIS MUST COME FIRST */
+    KStream dad;
+
+    const KStream *in;
+    KStream *out;
+};
+
+
+/* the required methods */
+
+static
+rc_t CC KStreamFromStreamsWhack ( KStreamFromStreams *self )
+{
+    KStreamRelease ( self -> in );
+    KStreamRelease ( self -> out );
+    free ( self );
+    return 0;
+}
+
+static
+rc_t CC KStreamFromStreamsRead ( const KStreamFromStreams *self,
+    void *buffer, size_t bsize, size_t *num_read )
+{
+    return KStreamRead ( self -> in, buffer, bsize, num_read );
+}
+
+static
+rc_t CC KStreamFromStreamsWrite ( KStreamFromStreams *self,
+    const void *buffer, size_t size, size_t *num_writ )
+{
+    return KStreamWrite ( self -> out, buffer, size, num_writ );
+}
+
+/* the vtable */
+static KStream_vt_v1 vtKStreamFromStreams =
+{
+    1, 0,
+    KStreamFromStreamsWhack,
+    KStreamFromStreamsRead,
+    KStreamFromStreamsWrite
+};
+
+
+/* FromKStreamPair
+ *  create a KStream from a pair of KStreams
+ *
+ *  "strm" [ OUT ] - resultant KStream
+ *
+ *  "read" [ IN, NULL OKAY ] - stream to use for input
+ *
+ *  "write" [ IN, NULL OKAY ] - stream to use for output
+ *
+ * NB - EITHER "read" or "write" may be NULL, but not both.
+ */
+LIB_EXPORT rc_t CC KStreamFromKStreamPair ( KStream **strm,
+    const KStream *read, KStream *write )
+{
+    rc_t rc;
+
+    if ( strm == NULL )
+        rc = RC ( rcNS, rcStream, rcConstructing, rcParam, rcNull );
+    else
+    {
+        bool can_read = ( read == NULL ) ? false : read -> read_enabled;
+        bool can_write = ( write == NULL ) ? false : write -> write_enabled;
+
+        if ( ! can_read && ! can_write )
+            rc = RC ( rcNS, rcStream, rcConstructing, rcStream, rcNoPerm );
+        else
+        {
+            KStreamFromStreams *sfs = calloc ( 1, sizeof *sfs );
+            if ( sfs == NULL )
+                rc = RC ( rcNS, rcStream, rcConstructing, rcMemory, rcExhausted );
+            else
+            {
+                rc = KStreamInit ( & sfs -> dad, ( const KStream_vt* ) & vtKStreamFromStreams, 
+                                   "KStreamFromStreamPair", "adapter", can_read, can_write );
+                if ( rc == 0 )
+                {
+                    rc = KStreamAddRef ( read );
+                    if ( rc == 0 )
+                    {
+                        rc = KStreamAddRef ( write );
+                        if ( rc ==  0 )
+                        {
+                            sfs -> in = read;
+                            sfs -> out = write;
+                            *strm = & sfs -> dad;
+
+                            return 0;
+                        }
+
+                        KStreamRelease ( read );
+                    }
+                }
+
+                free ( sfs );
+            }
+        }
+
+        *strm = NULL;
+    }
+
+    return rc;
+}
diff --git a/libs/kns/stream-priv.h b/libs/kns/stream-priv.h
new file mode 100644
index 0000000..0b6a4b0
--- /dev/null
+++ b/libs/kns/stream-priv.h
@@ -0,0 +1,32 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+/* VDB.v2 is end of life, and introducing new object types is
+   dangerous. For our purposes, just call a stream a file */
+#ifndef rcStream
+#define rcStream rcFile
+#endif
diff --git a/libs/kns/stream.c b/libs/kns/stream.c
new file mode 100644
index 0000000..2b67caf
--- /dev/null
+++ b/libs/kns/stream.c
@@ -0,0 +1,336 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kns/extern.h>
+#include <kns/impl.h>
+#include <klib/rc.h>
+#include <sysalloc.h>
+
+#include "stream-priv.h"
+
+
+/*--------------------------------------------------------------------------
+ * KStream
+ *  a file
+ */
+
+/* Destroy
+ *  destroy stream
+ */
+static
+rc_t KStreamDestroy ( KStream *self )
+{
+    if ( self == NULL )
+        return RC ( rcNS, rcStream, rcDestroying, rcSelf, rcNull );
+
+    switch ( self -> vt -> v1 . maj )
+    {
+    case 1:
+        return ( * self -> vt -> v1 . destroy ) ( self );
+    }
+
+    return RC ( rcNS, rcStream, rcDestroying, rcInterface, rcBadVersion );
+}
+
+/* AddRef
+ *  creates a new reference
+ *  ignores NULL references
+ */
+LIB_EXPORT rc_t CC KStreamAddRef ( const KStream *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "KStream" ) )
+        {
+        case krefLimit:
+            return RC ( rcNS, rcStream, rcAttaching, rcRange, rcExcessive );
+        case krefNegative:
+            return RC ( rcNS, rcStream, rcAttaching, rcSelf, rcInvalid );
+        default:
+            break;
+        }
+    }
+    return 0;
+}
+
+/* Release
+ *  discard reference to file
+ *  ignores NULL references
+ */
+LIB_EXPORT rc_t CC KStreamRelease ( const KStream *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "KStream" ) )
+        {
+        case krefWhack:
+            return KStreamDestroy ( ( KStream* ) self );
+        case krefLimit:
+            return RC ( rcNS, rcStream, rcReleasing, rcRange, rcExcessive );
+        default:
+            break;
+        }
+    }
+
+    return 0;
+}
+
+/* Read
+ *  read data from stream
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ *  "num_read" [ OUT ] - return parameter giving number of bytes
+ *  actually read. when returned value is zero and return code is
+ *  also zero, interpreted as end of stream.
+ */
+LIB_EXPORT rc_t CC KStreamRead ( const KStream *self,
+    void *buffer, size_t bsize, size_t *num_read )
+{
+    if ( num_read == NULL )
+        return RC ( rcNS, rcStream, rcReading, rcParam, rcNull );
+
+    * num_read = 0;
+
+    if ( self == NULL )
+        return RC ( rcNS, rcStream, rcReading, rcSelf, rcNull );
+
+    if ( ! self -> read_enabled )
+        return RC ( rcNS, rcStream, rcReading, rcStream, rcNoPerm );
+
+    if ( buffer == NULL )
+        return RC ( rcNS, rcStream, rcReading, rcBuffer, rcNull );
+    if ( bsize == 0 )
+        return RC ( rcNS, rcStream, rcReading, rcBuffer, rcInsufficient );
+
+    switch ( self -> vt -> v1 . maj )
+    {
+    case 1:
+        return ( * self -> vt -> v1 . read ) ( self, buffer, bsize, num_read );
+    }
+
+    return RC ( rcNS, rcStream, rcReading, rcInterface, rcBadVersion );
+}
+
+/* ReadAll
+ *  read from stream until "bsize" bytes have been retrieved
+ *  or until end-of-input
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ *  "num_read" [ OUT ] - return parameter giving number of bytes
+ *  actually read. when returned value is zero and return code is
+ *  also zero, interpreted as end of stream.
+ */
+LIB_EXPORT rc_t CC KStreamReadAll ( const KStream *self,
+    void *buffer, size_t bsize, size_t *num_read )
+{
+    rc_t rc;
+    uint8_t *b;
+    size_t total, count;
+
+    if ( num_read == NULL )
+        return RC ( rcNS, rcStream, rcReading, rcParam, rcNull );
+
+    * num_read = 0;
+
+    if ( self == NULL )
+        return RC ( rcNS, rcStream, rcReading, rcSelf, rcNull );
+
+    if ( ! self -> read_enabled )
+        return RC ( rcNS, rcStream, rcReading, rcStream, rcNoPerm );
+
+    if ( buffer == NULL )
+        return RC ( rcNS, rcStream, rcReading, rcBuffer, rcNull );
+    if ( bsize == 0 )
+        return RC ( rcNS, rcStream, rcReading, rcBuffer, rcInsufficient );
+
+    switch ( self -> vt -> v1 . maj )
+    {
+    case 1:
+        for ( rc = 0, b = buffer, total = 0; total < bsize; total += count )
+        {
+            count = 0;
+            rc = ( * self -> vt -> v1 . read ) ( self, b + total, bsize - total, & count );
+            if ( rc != 0 )
+                break;
+            if ( count == 0 )
+                break;
+        }
+        break;
+    default:
+        return RC ( rcNS, rcStream, rcReading, rcInterface, rcBadVersion );
+    }
+
+    if ( total != 0 )
+    {
+        * num_read = total;
+        return 0;
+    }
+
+    return rc;
+}
+
+/* Write
+ *  send data to stream
+ *
+ *  "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ *  "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually written
+ */
+LIB_EXPORT rc_t CC KStreamWrite ( KStream *self,
+    const void *buffer, size_t size, size_t *num_writ)
+{
+    size_t ignore;
+    if ( num_writ == NULL )
+        num_writ = & ignore;
+
+    * num_writ = 0;
+
+    if ( self == NULL )
+        return RC ( rcNS, rcStream, rcWriting, rcSelf, rcNull );
+
+    if ( ! self -> write_enabled )
+        return RC ( rcNS, rcStream, rcWriting, rcStream, rcNoPerm );
+
+    if ( size == 0 )
+        return 0;
+    if ( buffer == NULL )
+        return RC ( rcNS, rcStream, rcWriting, rcBuffer, rcNull );
+
+    switch ( self -> vt -> v1 . maj )
+    {
+    case 1:
+        return ( * self -> vt -> v1 . write ) ( self, buffer, size, num_writ );
+    }
+
+    return RC ( rcNS, rcStream, rcWriting, rcInterface, rcBadVersion );
+}
+
+/* WriteAll
+ *  write to stream until "size" bytes have been transferred
+ *  or until no further progress can be made
+ *
+ *  "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ *  "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually written
+ */
+LIB_EXPORT rc_t CC KStreamWriteAll ( KStream *self,
+    const void *buffer, size_t size, size_t *num_writ )
+{
+    rc_t rc;
+    const uint8_t *b;
+    size_t total, count;
+
+    size_t ignore;
+    if ( num_writ == NULL )
+        num_writ = & ignore;
+
+    * num_writ = 0;
+
+    if ( self == NULL )
+        return RC ( rcNS, rcStream, rcWriting, rcSelf, rcNull );
+
+    if ( ! self -> write_enabled )
+        return RC ( rcNS, rcStream, rcWriting, rcStream, rcNoPerm );
+
+    if ( size == 0 )
+        return 0;
+    if ( buffer == NULL )
+        return RC ( rcNS, rcStream, rcWriting, rcBuffer, rcNull );
+
+    switch ( self -> vt -> v1 . maj )
+    {
+    case 1:
+        for ( rc = 0, b = buffer, total = 0; total < size; total += count )
+        {
+            count = 0;
+            rc = ( * self -> vt -> v1 . write ) ( self, b + total, size - total, & count );
+            if ( rc != 0 )
+                break;
+            if ( count == 0 )
+                break;
+        }
+        break;
+    default:
+        return RC ( rcNS, rcStream, rcWriting, rcInterface, rcBadVersion );
+    }
+
+    * num_writ = total;
+    if ( total == size )
+        return 0;
+    if ( rc == 0 )
+        return RC ( rcNS, rcStream, rcWriting, rcTransfer, rcIncomplete );
+    return rc;
+}
+
+
+/* Init
+ *  initialize a newly allocated stream object
+ */
+LIB_EXPORT rc_t CC KStreamInit ( KStream *self, const KStream_vt *vt,
+    const char *classname, const char *strname,
+    bool read_enabled, bool write_enabled )
+{
+    if ( self == NULL )
+        return RC ( rcNS, rcStream, rcConstructing, rcSelf, rcNull );
+    if ( vt == NULL )
+        return RC ( rcNS, rcStream, rcConstructing, rcInterface, rcNull );
+    switch ( vt -> v1 . maj )
+    {
+    case 0:
+        return RC ( rcNS, rcStream, rcConstructing, rcInterface, rcInvalid );
+
+    case 1:
+        switch ( vt -> v1 . min )
+        {
+            /* ADD NEW MINOR VERSION CASES HERE */
+        case 0:
+#if _DEBUGGING
+        if ( vt -> v1 . write == NULL         ||
+             vt -> v1 . read == NULL          ||
+             vt -> v1 . destroy == NULL )
+        return RC ( rcNS, rcStream, rcConstructing, rcInterface, rcNull );
+#endif
+            break;
+        default:
+            return RC ( rcNS, rcStream, rcConstructing, rcInterface, rcBadVersion );
+        }
+        break;
+
+    default:
+        return RC ( rcNS, rcStream, rcConstructing, rcInterface, rcBadVersion );
+    }
+
+    self -> vt = vt;
+    KRefcountInit ( & self -> refcount, 1, classname, "init", strname );
+    self -> read_enabled = ( uint8_t ) ( read_enabled != 0 );
+    self -> write_enabled = ( uint8_t ) ( write_enabled != 0 );
+
+    return 0;
+}
diff --git a/libs/kns/url-fetcher-curl.c b/libs/kns/url-fetcher-curl.c
new file mode 100644
index 0000000..12c7073
--- /dev/null
+++ b/libs/kns/url-fetcher-curl.c
@@ -0,0 +1,255 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kns/extern.h>
+#include <klib/rc.h>
+#include <kns/manager.h>
+#include <kns/url-fetcher.h>
+
+/* IMPORTANT define this before including the *-impl.h !!!! */
+#define KURL_FETCHER_IMPL KUrlFetcherCurl
+#include "url-fetcher-impl.h"
+
+#include "kns_mgr_priv.h"
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+/*
+#include <curl/curl.h>
+#include <curl/types.h>
+#include <curl/easy.h>
+*/
+
+/*--------------------------------------------------------------------------
+ * KVectorNamelist ... a generic Namelist based on a Vector
+ */
+struct KUrlFetcherCurl
+{
+    KUrlFetcher dad;
+
+    struct KNSManager *kns_mgr;
+    CURL *curl_handle;
+
+    /* this buffer is passed in from read() to the callback 
+       it is owned by the caller not this class */
+    char *buff;
+    size_t buffsize;
+    size_t in_buff;
+    
+    /* this is the spill-over buffer, used by the callback
+       if the caller-provided buffer is too small */
+    char *spill_over_buff;
+    size_t spill_over_buffsize;
+};
+
+/* implementation of the the virtual KUrlFetcher-Interface for curl */
+
+static
+rc_t CC KUrlFetcherCurlDestroy ( KUrlFetcherCurl *self )
+{
+    self->kns_mgr->curl_easy_cleanup_fkt( self -> curl_handle );
+    KNSManagerRelease( self->kns_mgr );
+
+    if ( self -> spill_over_buff != NULL )
+        free( self -> spill_over_buff );
+    free ( self );
+    return 0;
+}
+
+static
+size_t CC KUrlFetcherCurlCallback( void *ptr, size_t size, size_t nmemb, void *data )
+{
+    size_t given_bytes = size * nmemb; /* calculate the size given in ptr */
+    KUrlFetcherCurl *self = ( KUrlFetcherCurl * )data;
+    if ( self != NULL )
+    {
+        if ( ( self -> in_buff + given_bytes ) > self -> buffsize )
+        {
+            /* the caller-provided buffer IS NOT enough... */
+            size_t to_copy = ( self -> buffsize - self -> in_buff );
+            if ( to_copy > 0 )
+            {
+                /* the caller-provided buffer can hold a part of it... */
+                if ( self -> buff )
+                {
+                    memcpy( &( self -> buff [ self -> in_buff ] ), ptr, given_bytes );
+                    self -> in_buff += given_bytes;
+                }
+            }
+            else
+            {
+                /* the spill-over-buffer has to take care of the rest... */
+                size_t remaining = ( given_bytes - to_copy );
+                if ( self -> spill_over_buff == NULL )
+                    self -> spill_over_buff = malloc( remaining );
+                else
+                    self -> spill_over_buff = realloc( self -> spill_over_buff,
+                                                       self -> spill_over_buffsize + remaining );
+                if ( self -> spill_over_buff != NULL )
+                {
+                    memcpy( &( self -> spill_over_buff [ self -> spill_over_buffsize ] ), ptr, remaining );
+                    self -> spill_over_buffsize += remaining;
+                }
+            }
+        }
+        else
+        {
+            /* the caller-provided buffer IS enough... */
+            if ( self -> buff )
+            {
+                memcpy( &( self -> buff [ self -> in_buff ] ), ptr, given_bytes );
+                self -> in_buff += given_bytes;
+            }
+        }
+    }
+    return given_bytes;
+}
+
+
+static
+rc_t CC KUrlFetcherCurlRead( KUrlFetcherCurl *self, const char * uri,
+                          void *dst, size_t to_read, size_t *num_read )
+{
+    CURLcode rcc;
+
+    /* the virtual interface has already checked that self is not NULL */
+    if ( uri == NULL || dst == NULL || to_read == 0 )
+        return RC ( rcApp, rcFunction, rcConstructing, rcParam, rcNull );
+
+    self -> buff = dst;
+    self -> buffsize = to_read;
+    self -> in_buff = 0;
+
+    if ( self -> spill_over_buff != NULL )
+        free( self -> spill_over_buff );
+    self -> spill_over_buff = NULL;
+    self -> spill_over_buffsize = 0;
+
+    if ( self -> curl_handle == NULL )
+        return RC ( rcApp, rcFunction, rcConstructing, rcParam, rcNull );
+
+    rcc = self->kns_mgr->curl_easy_setopt_fkt( self -> curl_handle, CURLOPT_URL, uri );
+    if ( rcc != CURLE_OK )
+    {
+        if ( num_read ) *num_read = 0;
+        return RC ( rcApp, rcFunction, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rcc = self->kns_mgr->curl_easy_perform_fkt( self-> curl_handle );
+        if ( rcc != CURLE_OK )
+        {
+            if ( num_read ) *num_read = 0;
+            return RC ( rcApp, rcFunction, rcConstructing, rcParam, rcNull );
+        }
+    }
+    
+    if ( num_read )
+        *num_read = self -> in_buff;
+
+    return 0;
+}
+
+static KUrlFetcher_vt_v1 sKUrlFetcherCurl_vt =
+{
+    1, 0,
+    KUrlFetcherCurlDestroy,
+    KUrlFetcherCurlRead,
+};
+
+LIB_EXPORT rc_t CC KUrlFetcherCurlMake( KUrlFetcher **fetcher, const bool verbose )
+{
+    rc_t rc;
+
+    if ( fetcher == NULL )
+        rc = RC ( rcApp, rcFunction, rcConstructing, rcParam, rcNull );
+    else
+    {
+        KUrlFetcherCurl * tmp;
+        *fetcher = NULL;
+        tmp = malloc( sizeof( * tmp ) );
+        if ( tmp != NULL )
+        {
+            rc = KUrlFetcherInit ( &(tmp)->dad, (const KUrlFetcher_vt*)&sKUrlFetcherCurl_vt );
+            if ( rc != 0 )
+                free( tmp );
+            else
+            {
+                tmp -> buff = NULL;
+                tmp -> buffsize = 0;
+                tmp -> in_buff = 0;
+
+                tmp -> spill_over_buff = NULL;
+                tmp -> spill_over_buffsize = 0;
+
+                rc = KNSManagerMake( &tmp->kns_mgr );
+                if ( rc == 0 )
+                {
+                    tmp -> curl_handle = tmp -> kns_mgr -> curl_easy_init_fkt();
+                    if ( tmp -> curl_handle == NULL )
+                    {
+                        KNSManagerRelease( tmp->kns_mgr );
+                        free( tmp );
+                        rc = RC ( rcApp, rcFunction, rcConstructing, rcParam, rcNull );
+                    }
+                    else
+                    {
+                        CURLcode rcc;
+                        
+                        if ( verbose )
+                            tmp -> kns_mgr -> curl_easy_setopt_fkt( tmp -> curl_handle, CURLOPT_VERBOSE , 1 );
+                        
+                        rcc = tmp -> kns_mgr -> curl_easy_setopt_fkt( tmp -> curl_handle, CURLOPT_WRITEFUNCTION, KUrlFetcherCurlCallback );
+                        if ( rcc != CURLE_OK )
+                        {
+                            KNSManagerRelease( tmp -> kns_mgr );
+                            free( tmp );
+                            rc = RC ( rcApp, rcFunction, rcConstructing, rcParam, rcNull );
+                        }
+                        else
+                        {
+                            rcc = tmp -> kns_mgr -> curl_easy_setopt_fkt( tmp -> curl_handle, CURLOPT_WRITEDATA, (void *)tmp );
+                            if ( rcc != CURLE_OK )
+                            {
+                                KNSManagerRelease( tmp -> kns_mgr );
+                                free( tmp );
+                                rc = RC ( rcApp, rcFunction, rcConstructing, rcParam, rcNull );
+                            }
+                            else
+                                *fetcher = & tmp -> dad;
+                        }
+                    }
+                }
+            }
+        }
+        else
+            rc = RC( rcApp, rcFunction, rcListing, rcParam, rcNull );
+    }
+    return rc;
+}
diff --git a/libs/kns/url-fetcher-impl.h b/libs/kns/url-fetcher-impl.h
new file mode 100644
index 0000000..0965bfa
--- /dev/null
+++ b/libs/kns/url-fetcher-impl.h
@@ -0,0 +1,109 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/*--------------------------------------------------------------------------
+ * this file contains the private parts (v-table) of a generic url-fetcher
+    the user has to provide 3 things to the fetcher:
+        (1) the url to fetch via vt->set_url()
+        (2) eventually a context pointer via vt->set_context()
+        (3) a callback function via vt->set_callback()
+    before the user can "start" the fetcher:
+        via vt->fetch()
+ */
+
+#ifndef _h_url_fetcher_impl_
+#define _h_url_fetcher_impl_
+
+#ifndef _h_kns_extern_
+#include <kns/extern.h>
+#endif
+
+#ifndef _h_kfs_file_
+#include <kfs/file.h>
+#endif
+
+#ifndef _h_url_fetcher_
+#include <kns/url-fetcher.h>
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+typedef union KUrlFetcher_vt KUrlFetcher_vt;
+
+/*--------------------------------------------------------------------------
+ * KUrl_fetcher
+ *  a virtual url-fetcher
+ */
+struct KUrlFetcher
+{
+    const KUrlFetcher_vt *vt;
+    KRefcount refcount;
+};
+
+
+#ifndef KURL_FETCHER_IMPL
+#define KURL_FETCHER_IMPL KUrlFetcher
+#endif
+
+
+typedef struct KUrlFetcher_vt_v1 KUrlFetcher_vt_v1;
+struct KUrlFetcher_vt_v1
+{
+    /* version == 1.x */
+    uint32_t maj;
+    uint32_t min;
+
+    /* start minor version == 0 */
+    rc_t ( CC * destroy ) ( KURL_FETCHER_IMPL *self );
+    rc_t ( CC * read ) ( KURL_FETCHER_IMPL *self, const char * uri,
+                      void *dst, size_t to_read, size_t *num_read );
+    rc_t ( CC * get_size ) ( KURL_FETCHER_IMPL *self, size_t *num_size );
+    /* end minor version == 0 */
+};
+
+union KUrlFetcher_vt
+{
+    KUrlFetcher_vt_v1 v1;
+};
+
+/* Init
+ */
+KNS_EXTERN rc_t CC KUrlFetcherInit ( KUrlFetcher *self, const KUrlFetcher_vt *vt );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/libs/kns/url-fetcher.c b/libs/kns/url-fetcher.c
new file mode 100644
index 0000000..ff9e16b
--- /dev/null
+++ b/libs/kns/url-fetcher.c
@@ -0,0 +1,129 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kns/extern.h>
+#include <klib/rc.h>
+#include <klib/text.h>
+#include "url-fetcher-impl.h"
+#include <sysalloc.h>
+
+#include <stdlib.h>
+
+/* to define the latest version of the url-fetcher in the vt */
+#define KURLFETCHER_LATEST 1
+
+static const char classname[] = "KUrlFetcher";
+
+/* AddRef
+ *  creates a new reference
+ *  ignores NULL references
+ */
+LIB_EXPORT rc_t CC KUrlFetcherAddRef ( const KUrlFetcher *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, classname ) )
+        {
+        case krefLimit:
+            return RC ( rcApp, rcFunction, rcAttaching, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+/* Release
+ *  discard reference to list
+ *  ignores NULL references
+ */
+LIB_EXPORT rc_t CC KUrlFetcherRelease ( const KUrlFetcher *cself )
+{
+    KUrlFetcher *self = ( KUrlFetcher* ) cself;
+    if ( cself != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, classname ) )
+        {
+        case krefWhack:
+            {
+                rc_t rc;
+                switch ( self -> vt -> v1 . maj )
+                {
+                case 1:
+                    rc = ( * self -> vt -> v1 . destroy ) ( self );
+                    break;
+
+                default:
+                    rc = RC ( rcApp, rcFunction, rcReleasing, rcInterface, rcBadVersion );
+                }
+
+                if ( rc != 0 )
+                    KRefcountInit ( & self -> refcount, 1, classname, "failed-release", "orphan" );
+                return rc;
+            }
+        case krefLimit:
+            return RC ( rcApp, rcFunction, rcReleasing, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+
+/* Read
+ *  reads data from the internal buffer ...
+ */
+LIB_EXPORT rc_t CC KUrlFetcherRead( KUrlFetcher *self, const char * uri,
+                      void *dst, size_t to_read, size_t *num_read )
+{
+    if ( self == NULL )
+        return RC ( rcApp, rcFunction, rcAccessing, rcSelf, rcNull );
+
+    switch ( self -> vt -> v1 . maj )
+    {
+    case 1:
+        return ( * self -> vt -> v1 . read ) ( self, uri, dst, to_read, num_read );
+    }
+
+    return RC ( rcApp, rcFunction, rcAccessing, rcInterface, rcBadVersion );
+}
+
+
+/* Init
+ *  polymorphic parent constructor
+ */
+LIB_EXPORT rc_t CC KUrlFetcherInit ( KUrlFetcher *self, const KUrlFetcher_vt *vt )
+{
+    if ( self == NULL || vt == NULL )
+        return RC ( rcApp, rcFunction, rcConstructing, rcSelf, rcNull );
+
+    if ( vt -> v1 . maj == 0 )
+        return RC ( rcApp, rcFunction, rcConstructing, rcInterface, rcInvalid );
+
+    if ( vt -> v1 . maj > KURLFETCHER_LATEST )
+        return RC ( rcApp, rcFunction, rcConstructing, rcInterface, rcBadVersion );
+
+    self -> vt = vt;
+    KRefcountInit ( & self -> refcount, 1, classname, "initialized", "regular" );
+    return 0;
+}
diff --git a/libs/kproc/Makefile b/libs/kproc/Makefile
index 00d6281..5234c2e 100644
--- a/libs/kproc/Makefile
+++ b/libs/kproc/Makefile
@@ -28,27 +28,26 @@ default: std
 TOP ?= $(shell ../../build/abspath.sh ../..)
 MODULE = libs/kproc
 
-EXT_LIBS = \
-	libkproc \
-	libksproc \
-	libkq
-
 ALL_LIBS = \
 	$(INT_LIBS) \
 	$(EXT_LIBS)
 
 include $(TOP)/build/Makefile.env
 
+EXT_LIBS = \
+	libksproc \
+	libkproc
+
+ifneq (win,$(OS))
+EXT_LIBS += \
+	libkq
+endif
+
 #-------------------------------------------------------------------------------
 # outer targets
 #
-ifeq (win,$(OS))
-all std:
-	@ true
-else
 all std: makedirs
 	@ $(MAKE_CMD) $(TARGDIR)/std
-endif
 
 $(INT_LIBS): makedirs
 	@ $(MAKE_CMD) $(ILIBDIR)/$@
@@ -87,18 +86,38 @@ tag: \
 #
 $(LIBDIR)/libkproc: $(addprefix $(LIBDIR)/libkproc.,$(LIBEXT))
 
+PROC_CMN = \
+	task \
+	procmgr
+
 PROC_SRC = \
+	$(PROC_CMN)
+
+ifneq (win,$(OS))
+PROC_SRC += \
 	systimeout \
 	syslock \
+	systhread \
 	syscond \
-	sem \
-	systhread
+	sem
+else
+PROC_SRC += \
+	systimeout \
+	syslock \
+	systhread \
+	syscond
+endif
 
 PROC_OBJ = \
 	$(addsuffix .$(LOBX),$(PROC_SRC))
 
+ifneq (win,$(OS))
 PROC_LIB = \
 	-dpthread
+else
+PROC_LIB = \
+	-dklib
+endif
 
 $(LIBDIR)/libkproc.$(SHLX): $(PROC_OBJ)
 	$(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(PROC_LIB)
@@ -116,6 +135,7 @@ libkproc_tag:
 $(LIBDIR)/libksproc: $(addprefix $(LIBDIR)/libksproc.,$(LIBEXT))
 
 SPROC_SRC = \
+	$(PROC_CMN) \
 	sttimeout \
 	stlock \
 	stcond \
@@ -126,11 +146,14 @@ SPROC_SRC = \
 SPROC_OBJ = \
 	$(addsuffix .$(LOBX),$(SPROC_SRC))
 
+SPROC_LIB = \
+	-dklib
+
 $(LIBDIR)/libksproc.$(SHLX): $(SPROC_OBJ)
-	$(LD) --dlib --vers $(SRCDIR) -o $@ $^
+	$(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(SPROC_LIB)
 
 $(LIBDIR)/libksproc.$(LIBX): $(SPROC_OBJ)
-	$(LD) --slib --vers $(SRCDIR) -o $@ $^
+	$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(SPROC_LIB)
 
 libksproc_tag:
 	@ $(TOP)/build/tag-module.sh $(MODULE) libksproc $(SPROC_OBJ)
@@ -148,8 +171,8 @@ Q_OBJ = \
 	$(addsuffix .$(LOBX),$(Q_SRC))
 
 Q_LIB = \
-	-dklib \
-	-dkproc
+	-dkproc \
+	-dklib
 
 $(LIBDIR)/libkq.$(SHLX): $(Q_OBJ)
 	$(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(Q_LIB)
diff --git a/libs/kproc/bsd/syslock.c b/libs/kproc/bsd/syslock.c
index ebd71e1..5cfada0 100644
--- a/libs/kproc/bsd/syslock.c
+++ b/libs/kproc/bsd/syslock.c
@@ -27,6 +27,7 @@
 #include <kproc/extern.h>
 #include "syslock-priv.h"
 #include "syscond-priv.h"
+#include <kproc/timeout.h>
 #include <kproc/lock.h>
 #include <kproc/cond.h>
 #include <os-native.h>
diff --git a/libs/kproc/libkproc.vers b/libs/kproc/libkproc.vers
index ee90284..66c4c22 100644
--- a/libs/kproc/libkproc.vers
+++ b/libs/kproc/libkproc.vers
@@ -1 +1 @@
-1.0.4
+1.0.9
diff --git a/libs/kproc/libkq.vers b/libs/kproc/libkq.vers
index ee90284..238d6e8 100644
--- a/libs/kproc/libkq.vers
+++ b/libs/kproc/libkq.vers
@@ -1 +1 @@
-1.0.4
+1.0.7
diff --git a/libs/kproc/libksproc.vers b/libs/kproc/libksproc.vers
index ee90284..238d6e8 100644
--- a/libs/kproc/libksproc.vers
+++ b/libs/kproc/libksproc.vers
@@ -1 +1 @@
-1.0.4
+1.0.7
diff --git a/libs/kproc/linux/syslock.c b/libs/kproc/linux/syslock.c
index 27a841b..aa86628 100644
--- a/libs/kproc/linux/syslock.c
+++ b/libs/kproc/linux/syslock.c
@@ -27,6 +27,7 @@
 #include <kproc/extern.h>
 #include "syslock-priv.h"
 #include <os-native.h>
+#include <kproc/timeout.h>
 #include <kproc/lock.h>
 #include <klib/rc.h>
 #include <sysalloc.h>
diff --git a/libs/kproc/procmgr.c b/libs/kproc/procmgr.c
new file mode 100644
index 0000000..c9cd221
--- /dev/null
+++ b/libs/kproc/procmgr.c
@@ -0,0 +1,412 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kproc/extern.h>
+
+#include <kproc/procmgr.h>
+#include <kproc/task.h>
+#include <kproc/lock.h>
+#include <klib/refcount.h>
+#include <klib/rc.h>
+
+#define rcTask rcCmd
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+/*--------------------------------------------------------------------------
+ * KCleanupTaskQueue
+ */
+typedef struct KCleanupTaskQueue KCleanupTaskQueue;
+struct KCleanupTaskQueue
+{
+    uint64_t count;
+    uint64_t capacity;
+    uint64_t start;
+    KTask *q [ 1 ];
+};
+
+
+/*--------------------------------------------------------------------------
+ * KProcMgr
+ */
+struct KProcMgr
+{
+    KLock *cleanup_lock;
+    KCleanupTaskQueue *cleanup;
+    KRefcount refcount;
+};
+
+static KProcMgr * s_proc_mgr;
+
+
+/* Whack
+ *  tear down proc mgr
+ *  runs any outstanding cleanup tasks
+ *  deletes the singleton object
+ *  intended to be called from an "atexit()" or similar task
+ */
+LIB_EXPORT rc_t CC KProcMgrWhack ( void )
+{
+    rc_t rc = 0;
+
+    KProcMgr *self = s_proc_mgr;
+    if ( s_proc_mgr != NULL )
+    {
+        s_proc_mgr = NULL;
+
+        rc = KLockAcquire ( self -> cleanup_lock );
+        if ( rc == 0 )
+        {
+            uint64_t i;
+
+            KCleanupTaskQueue *cleanup = self -> cleanup;
+            self -> cleanup = NULL;
+            KLockUnlock ( self -> cleanup_lock );
+
+            if ( cleanup != NULL )
+            {
+                for ( i = 0; i < cleanup -> count; ++ i )
+                {
+                    KTask *task = cleanup -> q [ i ];
+                    if ( task != NULL )
+                    {
+                        rc_t task_rc = KTaskExecute ( task );
+                        if ( rc == 0 )
+                            rc = task_rc;
+
+                        cleanup -> q [ i ] = NULL;
+                        KTaskRelease ( task );
+                    }
+                }
+
+                free ( cleanup );
+            }
+        }
+
+        KLockRelease ( self -> cleanup_lock );
+        free ( self );
+    }
+
+    return rc;
+}
+
+
+/* Init
+ *  initialize the proc mgr
+ *  creates the singleton object
+ */
+LIB_EXPORT rc_t CC KProcMgrInit ( void )
+{
+    rc_t rc = 0;
+
+    if ( s_proc_mgr == NULL )
+    {
+        KProcMgr *mgr = malloc ( sizeof * s_proc_mgr );
+        if ( mgr == NULL )
+            rc = RC ( rcPS, rcMgr, rcInitializing, rcMemory, rcExhausted );
+        else
+        {
+            rc = KLockMake ( & mgr -> cleanup_lock );
+            if ( rc == 0 )
+            {
+                mgr -> cleanup = NULL;
+                KRefcountInit ( & mgr -> refcount, 0, "KProcMgr", "init", "process mgr" );
+
+                s_proc_mgr = mgr;
+                return 0;
+            }
+
+            free ( mgr );
+        }
+    }
+
+    return rc;
+}
+
+
+/* MakeSingleton
+ *  make or access singleton process manager
+ *  VDB-2 ONLY
+ */
+LIB_EXPORT rc_t CC KProcMgrMakeSingleton ( KProcMgr ** mgrp )
+{
+    rc_t rc;
+
+    if ( mgrp == NULL )
+        rc = RC ( rcPS, rcMgr, rcConstructing, rcParam, rcNull );
+    else
+    {
+        * mgrp = s_proc_mgr;
+
+        if ( s_proc_mgr == NULL )
+            rc = RC ( rcPS, rcMgr, rcConstructing, rcMgr, rcNull );
+        else
+            rc = KProcMgrAddRef ( s_proc_mgr );
+    }
+
+    return rc;
+}
+
+
+/* AddRef
+ * Release
+ */
+LIB_EXPORT rc_t CC KProcMgrAddRef ( const KProcMgr *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "KProcMgr" ) )
+        {
+        case krefLimit:
+            return RC ( rcPS, rcMgr, rcAttaching, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+LIB_EXPORT rc_t CC KProcMgrRelease ( const KProcMgr *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "KProcMgr" ) )
+        {
+        case krefWhack:
+            return 0;
+        case krefLimit:
+            return RC ( rcPS, rcMgr, rcReleasing, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+
+/* AddCleanupTask
+ *  add a task to be performed at process exit time
+ *
+ *  "ticket" [ OUT ] - an id that can be used later to remove task
+ *
+ *  "task" [ IN ] - task object that will be executed at process
+ *   exit, unless previously removed ( see RemoveCleanupTask ).
+ *   NB - a new reference to "task" will be created
+ */
+LIB_EXPORT rc_t CC KProcMgrAddCleanupTask ( KProcMgr *self, KTaskTicket *ticket, KTask *task )
+{
+    rc_t rc;
+
+    if ( ticket == NULL )
+        rc = RC ( rcPS, rcQueue, rcInserting, rcId, rcNull );
+    else
+    {
+        memset ( ticket, 0, sizeof * ticket );
+
+        if ( self == NULL )
+            rc = RC ( rcPS, rcQueue, rcInserting, rcSelf, rcNull );
+        else if ( self != s_proc_mgr )
+            rc = RC ( rcPS, rcQueue, rcInserting, rcSelf, rcIncorrect );
+        else if ( task == NULL )
+            rc = RC ( rcPS, rcQueue, rcInserting, rcTask, rcNull );
+        else
+        {
+            rc = KTaskAddRef ( task );
+            if ( rc == 0 )
+            {
+                rc = KLockAcquire ( self -> cleanup_lock );
+                if ( rc == 0 )
+                {
+                    const uint64_t extend = 1024;
+                    KCleanupTaskQueue *cleanup = self -> cleanup;
+
+                    /* on first insert, allocate queue */
+                    if ( self -> cleanup == NULL )
+                    {
+                        cleanup = malloc ( sizeof * cleanup - sizeof cleanup -> q
+                            + sizeof cleanup -> q [ 0 ] * extend );
+                        if ( cleanup == NULL )
+                            rc = RC ( rcPS, rcQueue, rcInserting, rcMemory, rcExhausted );
+                        else
+                        {
+                            cleanup -> count = 0;
+                            cleanup -> capacity = extend;
+                            cleanup -> start = 0;
+
+                            self -> cleanup = cleanup;
+                        }
+                    }
+
+                    /* if queue is full */
+                    else if ( cleanup -> count == cleanup -> capacity )
+                    {
+                        uint64_t empty;
+
+                        /* determine number of empty slots at start */
+                        for ( empty = 0; empty < cleanup -> count; ++ empty )
+                        {
+                            if ( cleanup -> q [ empty ] != NULL )
+                                break;
+                        }
+
+                        /* if none are empty, simply reallocate - probably bad... */
+                        if ( empty == 0 )
+                        {
+                            cleanup = realloc ( cleanup, sizeof * cleanup - sizeof cleanup -> q
+                                + sizeof cleanup -> q [ 0 ] * ( cleanup -> capacity + extend ) );
+                            if ( cleanup == NULL )
+                                rc = RC ( rcPS, rcQueue, rcInserting, rcMemory, rcExhausted );
+                            else
+                            {
+                                cleanup -> capacity += extend;
+                                self -> cleanup = cleanup;
+                            }
+                        }
+
+                        /* otherwise, rewrite to remove empty slots */
+                        else
+                        {
+                            uint64_t i;
+                            const KCleanupTaskQueue *orig = cleanup;
+
+                            /* only bother with resize if there are enough to recover */
+                            if ( empty >= 4096 )
+                            {
+                                cleanup = malloc ( sizeof * cleanup - sizeof cleanup -> q
+                                    + sizeof cleanup -> q [ 0 ] * ( orig -> capacity - empty + extend ) );
+                                if ( cleanup == NULL )
+                                    rc = RC ( rcPS, rcQueue, rcInserting, rcMemory, rcExhausted );
+                                else
+                                {
+                                    cleanup -> capacity = orig -> capacity - empty + extend;
+                                }
+                            }
+
+                            /* rewrite count to remove leading NULL entries */
+                            cleanup -> count = orig -> count - empty;
+
+                            /* accumulate NULL entries into the start offset */
+                            cleanup -> start = orig -> start + empty;
+
+                            /* copy the tasks */
+                            for ( i = 0; i < cleanup -> count; ++ i )
+                                cleanup -> q [ i ] = orig -> q [ empty + i ];
+
+                            if ( ( const KCleanupTaskQueue* ) cleanup != orig )
+                            {
+                                self -> cleanup = cleanup;
+                                free ( ( void* ) orig );
+                            }
+                        }
+                    }
+
+                    /* detect valid queue for insertion */
+                    if ( rc == 0 )
+                    {
+                        /* assert that there is space for a task */
+                        assert ( cleanup -> count < cleanup -> capacity );
+
+                        /* record reference to task */
+                        cleanup -> q [ cleanup -> count ] = task;
+
+                        /* fill out the ticket information */
+                        ticket -> info [ 0 ] =  cleanup -> start + cleanup -> count;
+                        ticket -> info [ 1 ] = ( size_t ) task;
+                        ticket -> info [ 0 ] ^= ( size_t ) self;
+                        ticket -> info [ 1 ] ^= ( size_t ) self;
+                        ticket -> info [ 0 ] ^= ( size_t ) task;
+
+                        /* account for insertion */
+                        ++ cleanup -> count;
+                    }
+
+                    KLockUnlock ( self -> cleanup_lock );
+                }
+
+                if ( rc != 0 )
+                    KTaskRelease ( task );
+            }
+        }
+    }
+
+    return rc;
+}
+
+
+/* RemoveCleanupTask
+ *  remove a task from exit queue
+ *  releases reference to task object
+ *  returns an rcNotFound code if task no longer exists
+ */
+LIB_EXPORT rc_t CC KProcMgrRemoveCleanupTask ( KProcMgr *self, const KTaskTicket *ticket )
+{
+    rc_t rc;
+
+    if ( self == NULL )
+        rc = RC ( rcPS, rcQueue, rcRemoving, rcSelf, rcNull );
+    else if ( self != s_proc_mgr )
+        rc = RC ( rcPS, rcQueue, rcRemoving, rcSelf, rcIncorrect );
+    else if ( ticket == NULL )
+        rc = RC ( rcPS, rcQueue, rcRemoving, rcId, rcNull );
+    else
+    {
+        /* recover task* and idx */
+        KTask *task = ( KTask* ) ( ( size_t ) ticket -> info [ 1 ] ^ ( size_t ) self );
+        uint64_t idx = ticket -> info [ 0 ] ^ ( size_t ) task;
+        idx ^= ( size_t ) self;
+
+        /* go into queue */
+        rc = KLockAcquire ( self -> cleanup_lock );
+        if ( rc == 0 )
+        {
+            KCleanupTaskQueue *cleanup = self -> cleanup;
+            if ( self -> cleanup == NULL )
+                rc = RC ( rcPS, rcQueue, rcRemoving, rcItem, rcNotFound );
+            else if ( idx < cleanup -> start )
+                rc = RC ( rcPS, rcQueue, rcRemoving, rcItem, rcNotFound );
+            else
+            {
+                idx -= cleanup -> start;
+                if ( idx >= cleanup -> count )
+                    rc = RC ( rcPS, rcQueue, rcRemoving, rcItem, rcNotFound );
+                else if ( cleanup -> q [ idx ] != task )
+                    rc = RC ( rcPS, rcQueue, rcRemoving, rcItem, rcNotFound );
+                else
+                {
+                    cleanup -> q [ idx ] = NULL;
+                }
+            }
+
+            KLockUnlock ( self -> cleanup_lock );
+        }
+
+        if ( rc == 0 )
+            KTaskRelease ( task );
+    }
+
+    return rc;
+}
diff --git a/libs/kproc/queue.c b/libs/kproc/queue.c
index bb2b0c7..5b30d2e 100644
--- a/libs/kproc/queue.c
+++ b/libs/kproc/queue.c
@@ -26,8 +26,10 @@
 
 #include <kproc/q-extern.h>
 #include <kproc/queue.h>
+#include <kproc/timeout.h>
 #include <kproc/lock.h>
 #include <kproc/sem.h>
+#include <klib/out.h>
 #include <klib/rc.h>
 #include <atomic32.h>
 #include <os-native.h>
@@ -36,6 +38,14 @@
 #include <stdlib.h>
 #include <assert.h>
 
+#if _DEBUGGING && 0
+#define QMSG( msg, ... ) \
+    KOutMsg ( msg, __VA_ARGS__ )
+#else
+#define QMSG( msg, ... ) \
+    ( void ) 0
+#endif
+
 /*--------------------------------------------------------------------------
  * KQueue
  *  a simple thread-safe queue structure supporting push/pop operation
@@ -64,13 +74,19 @@ struct KQueue
 static
 rc_t KQueueWhack ( KQueue *self )
 {
-    rc_t rc = KSemaphoreRelease ( self -> wc );
+    rc_t rc;
+    QMSG ( "%s: releasing write semaphore\n", __func__ );
+    rc = KSemaphoreRelease ( self -> wc );
     if ( rc == 0 )
     {
+        QMSG ( "%s: releasing read semaphore\n", __func__ );
         KSemaphoreRelease ( self -> rc );
+        QMSG ( "%s: releasing write lock\n", __func__ );
         KLockRelease ( self -> wl );
+        QMSG ( "%s: releasing read lock\n", __func__ );
         KLockRelease ( self -> rl );
         free ( self );
+        QMSG ( "%s: done\n", __func__ );
     }
     return rc;
 }
@@ -141,6 +157,11 @@ LIB_EXPORT rc_t CC KQueueMake ( KQueue **qp, uint32_t capacity )
                             atomic32_set ( & q -> refcount, 1 );
                             q -> sealed = false;
 
+                            QMSG ( "%s: created queue with capacity %u, "
+                                   "bmask %#032b, imask %#032b.\n"
+                                   , __func__, q -> capacity, q -> bmask, q -> imask
+                                );
+
                             * qp = q;
                             return 0;
                         }
@@ -178,14 +199,21 @@ LIB_EXPORT rc_t CC KQueuePush ( KQueue *self, const void *item, timeout_t *tm )
     if ( self == NULL )
         return RC ( rcCont, rcQueue, rcInserting, rcSelf, rcNull );
     if ( self -> sealed )
+    {
+        QMSG ( "%s: failed to insert into queue due to seal\n", __func__ );
         return RC ( rcCont, rcQueue, rcInserting, rcQueue, rcReadonly );
+    }
     if ( item == NULL )
         return RC ( rcCont, rcQueue, rcInserting, rcTimeout, rcNull );
 
+    QMSG ( "%s: acquiring write lock ( %p )...\n", __func__, self -> wl );
     rc = KLockAcquire ( self -> wl );
+    QMSG ( "%s: ...done, rc = %R\n", __func__, rc );
     if ( rc == 0 )
     {
+        QMSG ( "%s: waiting on write semaphore...\n", __func__ );
         rc = KSemaphoreTimedWait ( self -> wc, self -> wl, tm );
+        QMSG ( "%s: ...done, rc = %R. unlocking write lock ( %p ).\n", __func__, rc, self -> wl );
         KLockUnlock ( self -> wl );
 
         if ( rc == 0 )
@@ -195,24 +223,36 @@ LIB_EXPORT rc_t CC KQueuePush ( KQueue *self, const void *item, timeout_t *tm )
             /* re-check the seal */
             if ( self -> sealed )
             {
+                QMSG ( "%s: queue has been sealed\n", __func__ );
+
                 /* not a disaster if semaphore not signaled */
+                QMSG ( "%s: acquiring write lock\n", __func__ );
                 if ( ! KLockAcquire ( self -> wl ) )
                 {
+                    QMSG ( "%s: signaling write semaphore\n", __func__ );
                     KSemaphoreSignal ( self -> wc );
+                    QMSG ( "%s: unlocking write lock\n", __func__ );
                     KLockUnlock ( self -> wl );
                 }
+
+                QMSG ( "%s: failed to insert into queue due to seal\n", __func__ );
                 return RC ( rcCont, rcQueue, rcInserting, rcQueue, rcReadonly );
             }
 
             /* insert item */
             w = self -> write & self -> imask;
+            QMSG ( "%s: write index is %u, masked against 0x%x\n", __func__, w, self -> imask );
             self -> buffer [ w & self -> bmask ] = ( void* ) item;
+            QMSG ( "%s: inserted item into buffer [ %u ], using mask 0x%x\n", __func__, w & self -> bmask, self -> bmask );
             self -> write = w + 1;
 
             /* let listeners know about item */
+            QMSG ( "%s: acquiring read lock ( %p )\n", __func__, self -> rl );
             if ( KLockAcquire ( self -> rl ) == 0 )
             {
+                QMSG ( "%s: signaling read semaphore\n", __func__ );
                 KSemaphoreSignal ( self -> rc );
+                QMSG ( "%s: unlocking read lock ( %p )\n", __func__, self -> rl );
                 KLockUnlock ( self -> rl );
             }
         }
@@ -246,10 +286,13 @@ LIB_EXPORT rc_t CC KQueuePop ( KQueue *self, void **item, timeout_t *tm )
             rc = RC ( rcCont, rcQueue, rcRemoving, rcSelf, rcNull );
         else
         {
+            QMSG ( "%s: acquiring read lock ( %p )\n", __func__, self -> rl );
             rc = KLockAcquire ( self -> rl );
             if ( rc == 0 )
             {
+                QMSG ( "%s: waiting on read semaphore...\n", __func__ );
                 rc = KSemaphoreTimedWait ( self -> rc, self -> rl, self -> sealed ? NULL : tm );
+                QMSG ( "%s: ...done, rc = %R. unlocking read lock. ( %p )\n", __func__, rc, self -> rl );
                 KLockUnlock ( self -> rl );
 
                 if ( rc == 0 )
@@ -257,24 +300,35 @@ LIB_EXPORT rc_t CC KQueuePop ( KQueue *self, void **item, timeout_t *tm )
                     uint32_t r, idx;
 
                     /* got an element */
+                    QMSG ( "%s: asserting  self -> read ( %u ) != self -> write ( %u )\n",
+                           __func__, self -> read, self -> write
+                        );
                     assert ( self -> read != self -> write );
 
                     /* read element */
                     r = self -> read & self -> imask;
+                    QMSG ( "%s: read index is %u, masked against 0x%x\n", __func__, r, self -> imask );
                     idx = r & self -> bmask;
                     * item = self -> buffer [ idx ];
+                    QMSG ( "%s: read item from buffer [ %u ], using mask 0x%x\n", __func__, idx, self -> bmask );
                     self -> buffer [ idx ] = NULL;
                     self -> read = r + 1;
 
                     /* let write know there's a free slot available */
+                    QMSG ( "%s: acquiring write lock ( %p )\n", __func__, self -> wl );
                     if ( KLockAcquire ( self -> wl ) == 0 )
                     {
+                        QMSG ( "%s: signaling write semaphore\n", __func__ );
                         KSemaphoreSignal ( self -> wc );
+                        QMSG ( "%s: unlocking write lock ( %p )\n", __func__, self -> wl );
                         KLockUnlock ( self -> wl );
                     }
                 }
-                else if ( self -> sealed && GetRCState ( rc ) == rcTimeout )
+                else if ( self -> sealed && GetRCObject ( rc ) == rcTimeout )
+                {
                     rc = RC ( rcCont, rcQueue, rcRemoving, rcData, rcDone );
+                    QMSG ( "%s: resetting rc to %R\n", __func__, rc );
+                }
             }
         }
     }
@@ -291,6 +345,7 @@ LIB_EXPORT rc_t CC KQueuePop ( KQueue *self, void **item, timeout_t *tm )
  */
 LIB_EXPORT bool CC KQueueSealed ( const KQueue *self )
 {
+    QMSG ( "%s called\n", __func__ );
     if ( self != NULL )
         return self -> sealed;
     return false;
@@ -300,12 +355,44 @@ LIB_EXPORT bool CC KQueueSealed ( const KQueue *self )
 /* Seal
  *  indicate that the queue has been closed off
  *  meaning there will be no further push operations
+ *  if "writes" is true, and no further pop operations
+ *  otherwise.
  */
 LIB_EXPORT rc_t CC KQueueSeal ( KQueue *self )
 {
+    rc_t rc = 0;
+
+    QMSG ( "%s called\n", __func__ );
+
     if ( self == NULL )
         return RC ( rcCont, rcQueue, rcFreezing, rcSelf, rcNull );
 
     self -> sealed = true;
-    return 0;
+
+#if 0
+    QMSG ( "%s: acquiring write lock ( %p )\n", __func__, self -> wl );
+    rc = KLockAcquire ( self -> wl );
+    if ( rc == 0 )
+    {
+        QMSG ( "%s: canceling write semaphore...\n", __func__ );
+        rc = KSemaphoreCancel ( self -> wc );
+        QMSG ( "%s: ...done, rc = %R.\n", __func__, rc );
+        KLockUnlock ( self -> wl );
+
+        if ( rc == 0 )
+        {
+            QMSG ( "%s: acquiring read lock ( %p )\n", __func__, self -> rl );
+            rc = KLockAcquire ( self -> rl );
+            if ( rc == 0 )
+            {
+                QMSG ( "%s: canceling read semaphore...\n", __func__ );
+                rc = KSemaphoreCancel ( self -> rc );
+                QMSG ( "%s: ...done, rc = %R.\n", __func__, rc );
+                KLockUnlock ( self -> rl );
+            }
+        }
+    }
+#endif
+
+    return rc;
 }
diff --git a/libs/kproc/sem.c b/libs/kproc/sem.c
index 84d52c7..822f8cb 100644
--- a/libs/kproc/sem.c
+++ b/libs/kproc/sem.c
@@ -28,12 +28,21 @@
 #include <kproc/extern.h>
 #include <kproc/sem.h>
 #include <kproc/cond.h>
+#include <klib/out.h>
 #include <klib/rc.h>
 #include <sysalloc.h>
 #include <atomic32.h>
 
 #include <stdlib.h>
 
+#if _DEBUGGING && 0
+#define SMSG( msg, ... ) \
+    KOutMsg ( msg, __VA_ARGS__ )
+#else
+#define SMSG( msg, ... ) \
+    ( void ) 0
+#endif
+
 
 /*--------------------------------------------------------------------------
  * KSemaphore
@@ -41,12 +50,12 @@
  */
 struct KSemaphore
 {
-    uint64_t avail;
-    uint64_t requested;
-    uint64_t min_requested;
-    KCondition cond;
-    uint32_t waiting;
-    bool uniform;
+    volatile uint64_t avail;
+    volatile uint64_t requested;
+    volatile uint64_t min_requested;
+    KCondition* cond;
+    volatile uint32_t waiting;
+    volatile bool uniform;
 };
 
 
@@ -60,7 +69,7 @@ rc_t KSemaphoreWhack ( KSemaphore *self )
     if ( self -> waiting != 0 )
         return RC ( rcPS, rcSemaphore, rcDestroying, rcSemaphore, rcBusy );
 
-    rc = KConditionDestroy ( & self -> cond );
+    rc = KConditionRelease ( self -> cond );
     if ( rc != 0 )
         return ResetRCContext ( rc, rcPS, rcSemaphore, rcDestroying );
 
@@ -85,7 +94,7 @@ LIB_EXPORT rc_t CC KSemaphoreMake ( KSemaphore **semp, uint64_t count )
             rc = RC ( rcPS, rcSemaphore, rcConstructing, rcMemory, rcExhausted );
         else
         {
-            rc = KConditionInit ( & sem -> cond );
+            rc = KConditionMake( & sem -> cond );
             if ( rc == 0 )
             {
                 sem -> avail = count;
@@ -113,7 +122,7 @@ LIB_EXPORT rc_t CC KSemaphoreMake ( KSemaphore **semp, uint64_t count )
 LIB_EXPORT rc_t CC KSemaphoreAddRef ( const KSemaphore *cself )
 {
     if ( cself != NULL )
-        return KConditionAddRef ( & cself -> cond );
+        return KConditionAddRef ( cself -> cond );
     return 0;
 }
 
@@ -121,7 +130,7 @@ LIB_EXPORT rc_t CC KSemaphoreRelease ( const KSemaphore *cself )
 {
     if ( cself != NULL )
     {
-        if ( KConditionDropRef ( & cself -> cond ) )
+        if ( KConditionDropRef ( cself -> cond ) )
             return KSemaphoreWhack ( ( KSemaphore* ) cself );
     }
     return 0;
@@ -153,7 +162,7 @@ LIB_EXPORT rc_t CC KSemaphoreWait ( KSemaphore *self, struct KLock *lock )
 
         do
         {
-            rc_t rc = KConditionWait ( & self -> cond, lock );
+            rc_t rc = KConditionWait ( self -> cond, lock );
             if ( rc != 0 )
             {
                 -- self -> waiting;
@@ -185,39 +194,73 @@ LIB_EXPORT rc_t CC KSemaphoreTimedWait ( KSemaphore *self,
 
     if ( self -> avail == 0 )
     {
+        SMSG ( "%s[%p]: avail == 0\n", __func__, self );
         if ( tm == NULL )
+        {
+            SMSG ( "%s[%p]: non-blocking mode - return timeout exhausted\n", __func__, self );
             return RC ( rcPS, rcSemaphore, rcWaiting, rcTimeout, rcExhausted );
+        }
 
         if ( ++ self -> waiting == 1 )
         {
+            SMSG ( "%s[%p]: first waiter\n", __func__, self );
             self -> requested = self -> min_requested = 1;
             self -> uniform = true;
         }
         else if ( self -> requested != 1 )
         {
+            SMSG ( "%s[%p]: multiple waiters ( %u )\n", __func__, self, self -> waiting );
             self -> min_requested = 1;
             self -> uniform = false;
         }
 
         do
         {
-            rc_t rc = KConditionTimedWait ( & self -> cond, lock, tm );
+            rc_t rc;
+
+            SMSG ( "%s[%p]: wait on condition...\n", __func__, self );
+            rc = KConditionTimedWait ( self -> cond, lock, tm );
+            SMSG ( "%s[%p]:...done, rc = %R\n", __func__, self, rc );
             if ( rc != 0 )
             {
+                SMSG ( "%s[%p]: timed out - decrementing wait count\n", __func__, self );
                 -- self -> waiting;
                 return ResetRCContext ( rc, rcPS, rcSemaphore, rcWaiting );
             }
+
+            SMSG ( "%s[%p]: condition signaled - avail = %lu\n", __func__, self, self -> avail );
         }
         while ( self -> avail == 0 );
 
+        SMSG ( "%s[%p]: finished waiting\n", __func__, self );
         -- self -> waiting;
     }
 
+    SMSG ( "%s[%p]: decrementing count from %lu\n", __func__, self, self -> avail );
     -- self -> avail;
     return 0;
 }
 
 
+/* Cancel
+ *  signal that the count will never increase
+ */
+LIB_EXPORT rc_t CC KSemaphoreCancel ( KSemaphore *self )
+{
+    if ( self == NULL )
+        return RC ( rcPS, rcSemaphore, rcSignaling, rcSelf, rcNull );
+
+    if ( self -> waiting != 0 )
+    {
+        SMSG ( "%s[%p]: canceling %u waiters\n", __func__, self, self -> waiting );
+        return KConditionBroadcast ( self -> cond );
+    }
+
+    SMSG ( "%s[%p]: cancel request ( no waiters )\n", __func__, self );
+    return 0;
+}
+
+
 /* Signal
  *  signal that a count has become available
  */
@@ -234,8 +277,8 @@ LIB_EXPORT rc_t CC KSemaphoreSignal ( KSemaphore *self )
            - and only one request can be satisfied
            - then signal. otherwise, broadcast */
         if ( self -> uniform && self -> avail / self -> min_requested == 1 )
-            return KConditionSignal ( & self -> cond );
-        return KConditionBroadcast ( & self -> cond );
+            return KConditionSignal ( self -> cond );
+        return KConditionBroadcast ( self -> cond );
     }
 
     return 0;
@@ -272,7 +315,7 @@ LIB_EXPORT rc_t CC KSemaphoreAlloc ( KSemaphore *self,
 
         do
         {
-            rc_t rc = KConditionWait ( & self -> cond, lock );
+            rc_t rc = KConditionWait ( self -> cond, lock );
             if ( rc != 0 )
             {
                 -- self -> waiting;
@@ -324,7 +367,7 @@ LIB_EXPORT rc_t CC KSemaphoreTimedAlloc ( KSemaphore *self,
 
         do
         {
-            rc_t rc = KConditionTimedWait ( & self -> cond, lock, tm );
+            rc_t rc = KConditionTimedWait ( self -> cond, lock, tm );
             if ( rc != 0 )
             {
                 -- self -> waiting;
@@ -357,8 +400,8 @@ LIB_EXPORT rc_t CC KSemaphoreFree ( KSemaphore *self, uint64_t count )
            - and only one request can be satisfied
            - then signal. otherwise, broadcast */
         if ( self -> uniform && self -> avail / self -> min_requested == 1 )
-            return KConditionSignal ( & self -> cond );
-        return KConditionBroadcast ( & self -> cond );
+            return KConditionSignal ( self -> cond );
+        return KConditionBroadcast ( self -> cond );
     }
 
     return 0;
diff --git a/libs/kproc/sttimeout.c b/libs/kproc/sttimeout.c
index 6ac1b3c..47ba6cc 100644
--- a/libs/kproc/sttimeout.c
+++ b/libs/kproc/sttimeout.c
@@ -25,6 +25,7 @@
 */
 
 #include <kproc/extern.h>
+#include <kproc/timeout.h>
 #include <os-native.h>
 #include <klib/log.h>
 #include <klib/rc.h>
diff --git a/libs/kproc/task.c b/libs/kproc/task.c
new file mode 100644
index 0000000..61df4aa
--- /dev/null
+++ b/libs/kproc/task.c
@@ -0,0 +1,156 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kproc/extern.h>
+
+#include <kproc/task.h>
+#include <kproc/impl.h>
+#include <klib/rc.h>
+
+#define rcTask rcCmd
+
+
+/*--------------------------------------------------------------------------
+ * KTask
+ *  a deferred task abstraction
+ *  specific task objects are constructed with required parameters
+ *  and implement the Execute method to perform their operation
+ */
+
+
+/* Whack
+ */
+static
+rc_t KTaskWhack ( KTask * self )
+{
+    if ( self == NULL )
+        return RC ( rcPS, rcTask, rcDestroying, rcSelf, rcNull );
+
+    switch ( self -> vt -> v1 . maj )
+    {
+    case 1:
+        return ( * self -> vt -> v1 . destroy ) ( self );
+    }
+
+    return RC ( rcPS, rcTask, rcDestroying, rcInterface, rcBadVersion );
+}
+
+
+/* AddRef
+ * Release
+ */
+LIB_EXPORT rc_t CC KTaskAddRef ( const KTask *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "KTask" ) )
+        {
+        case krefLimit:
+            return RC ( rcPS, rcTask, rcAttaching, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+LIB_EXPORT rc_t CC KTaskRelease ( const KTask *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "KTask" ) )
+        {
+        case krefWhack:
+            return KTaskWhack ( ( KTask* ) self );
+        case krefLimit:
+            return RC ( rcPS, rcTask, rcReleasing, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+
+/* Execute
+ *  perform deferred operation
+ */
+LIB_EXPORT rc_t CC KTaskExecute ( KTask *self )
+{
+    if ( self == NULL )
+        return RC ( rcPS, rcTask, rcExecuting, rcSelf, rcNull );
+
+    switch ( self -> vt -> v1 . maj )
+    {
+    case 1:
+        return ( * self -> vt -> v1 . execute ) ( self );
+    }
+
+    return RC ( rcPS, rcTask, rcExecuting, rcInterface, rcBadVersion );
+}
+
+
+/* Init
+ *  initialize a newly allocated task object
+ */
+LIB_EXPORT rc_t CC KTaskInit ( KTask *self, const KTask_vt *vt, const char *clsname, const char *name )
+{
+    if ( self == NULL )
+        return RC ( rcFS, rcTask, rcConstructing, rcSelf, rcNull );
+    if ( vt == NULL )
+        return RC ( rcFS, rcTask, rcConstructing, rcInterface, rcNull );
+    switch ( vt -> v1 . maj )
+    {
+    case 1:
+        switch ( vt -> v1 . min )
+        {
+            /* insert new minor versions in reverse order */
+        case 0:
+#if _DEBUGGING
+            if ( vt -> v1 . destroy == NULL ||
+                 vt -> v1 . execute == NULL )
+            return RC ( rcFS, rcTask, rcConstructing, rcInterface, rcNull );
+#endif
+            break;
+        default:
+            return RC ( rcFS, rcTask, rcConstructing, rcInterface, rcInvalid );
+        }
+        break;
+    default:
+        return RC ( rcFS, rcTask, rcConstructing, rcInterface, rcInvalid );
+    }
+
+    self -> vt = vt;
+    KRefcountInit ( & self -> refcount, 1, clsname, "init", name );
+    return 0;
+}
+
+
+/* Destroy
+ *  destroy task
+ */
+LIB_EXPORT rc_t CC KTaskDestroy ( KTask *self, const char *clsname )
+{
+    if ( self != NULL )
+        KRefcountWhack ( & self -> refcount, clsname );
+    return 0;
+}
diff --git a/libs/kproc/unix/syscond.c b/libs/kproc/unix/syscond.c
index ad1dc26..cebf31a 100644
--- a/libs/kproc/unix/syscond.c
+++ b/libs/kproc/unix/syscond.c
@@ -29,7 +29,9 @@
 
 #include <kproc/extern.h>
 #include <os-native.h>
+#include <kproc/timeout.h>
 #include <kproc/cond.h>
+#include <klib/out.h>
 #include <klib/rc.h>
 #include <sysalloc.h>
 #include <atomic32.h>
@@ -38,6 +40,14 @@
 #include <errno.h>
 #include <assert.h>
 
+#if _DEBUGGING && 0
+#define CMSG( msg, ... ) \
+    KOutMsg ( msg, __VA_ARGS__ )
+#else
+#define CMSG( msg, ... ) \
+    ( void ) 0
+#endif
+
 
 /*--------------------------------------------------------------------------
  * KCondition
@@ -156,7 +166,7 @@ LIB_EXPORT rc_t CC KConditionRelease ( const KCondition *cself )
     KCondition *self = ( KCondition* ) cself;
     if ( cself != NULL )
     {
-        if ( atomic32_dec_and_test ( & self -> refcount ) )
+        if ( atomic32_read_and_add ( & self -> refcount, -1 ) <= 1 )
             return KConditionWhack ( self );
     }
     return 0;
@@ -208,16 +218,50 @@ LIB_EXPORT rc_t CC KConditionTimedWait ( KCondition *self, struct KLock *lock, t
     if ( tm == NULL )
         return RC ( rcPS, rcCondition, rcWaiting, rcTimeout, rcNull );
 
+    CMSG ( "%s[%p]: testing timeout structure\n", __func__, self );
     if ( ! tm -> prepared )
+    {
+        CMSG ( "%s[%p]: preparing timeout...\n", __func__, self );
         TimeoutPrepare ( tm );
+        CMSG ( "%s[%p]: ...done preparing timeout\n", __func__, self );
+    }
 
+#if 1
+    CMSG ( "%s[%p]: calling 'pthread_cond_timedwait ( cond = %p, mutex = %p, ts = %p )'...\n"
+           , __func__, self, & self -> cond, & lock -> mutex, & tm -> ts
+        );
     status = pthread_cond_timedwait ( & self -> cond, & lock -> mutex, & tm -> ts );
+#else
+    CMSG ( "%s[%p]: calling 'pthread_cond_wait ( cond = %p, mutex = %p )'...\n"
+           , __func__, self, & self -> cond, & lock -> mutex, & tm -> ts
+        );
+    status = pthread_cond_wait ( & self -> cond, & lock -> mutex );
+#endif
+    CMSG ( "%s[%p]: ...done, OS status = %!\n", __func__, self, status );
     switch ( status )
     {
     case 0:
         break;
     case ETIMEDOUT:
         return RC ( rcPS, rcCondition, rcWaiting, rcTimeout, rcExhausted );
+/*
+  The pthread_cond_timedwait() function shall fail if:
+
+  ETIMEDOUT
+  The time specified by abstime to pthread_cond_timedwait() has passed.
+
+  The pthread_cond_timedwait() and pthread_cond_wait() functions may fail if:
+
+  EINVAL The value specified by cond, mutex, or abstime is invalid.
+
+  EINVAL Different mutexes were supplied for concurrent pthread_cond_timedwait()
+  or pthread_cond_wait() operations on the same condition variable.
+
+  EPERM  The mutex was not owned by the current thread at the time of the call.
+
+  *** These functions shall not return an error code of [EINTR]. ***
+
+ */
     case EINTR:
         return RC ( rcPS, rcCondition, rcWaiting, rcThread, rcInterrupted );
     default:
diff --git a/libs/kproc/unix/systimeout.c b/libs/kproc/unix/systimeout.c
index 6be8361..9dbb97b 100644
--- a/libs/kproc/unix/systimeout.c
+++ b/libs/kproc/unix/systimeout.c
@@ -25,6 +25,7 @@
 */
 
 #include <sysalloc.h>
+#include <kproc/timeout.h>
 #include <os-native.h>
 #include <klib/log.h>
 #include <klib/rc.h>
diff --git a/libs/kproc/win/syscond-priv.h b/libs/kproc/win/syscond-priv.h
index 32f58e3..509a913 100644
--- a/libs/kproc/win/syscond-priv.h
+++ b/libs/kproc/win/syscond-priv.h
@@ -41,6 +41,7 @@
 extern "C" {
 #endif
 
+
 /*--------------------------------------------------------------------------
  * KCondition
  *  a POSIX-style condition object
@@ -51,13 +52,8 @@ extern "C" {
  *  the former involves the potential to wait for a signal and the latter
  *  to generate a signal using the external lock for blocking.
  */
-struct KCondition
-{
-#if 0
-    pthread_cond_t cond;
-#endif
-    atomic32_t refcount;
-};
+struct KCondition;
+
 
 /* Init
  *  initialize an inline KCondition
diff --git a/libs/kproc/win/syscond.c b/libs/kproc/win/syscond.c
index ad1dc26..8777f2f 100644
--- a/libs/kproc/win/syscond.c
+++ b/libs/kproc/win/syscond.c
@@ -24,11 +24,13 @@
 *
 */
 
+#include <kproc/extern.h>
+
 #include "syslock-priv.h"
 #include "syscond-priv.h"
 
-#include <kproc/extern.h>
 #include <os-native.h>
+#include <kproc/timeout.h>
 #include <kproc/cond.h>
 #include <klib/rc.h>
 #include <sysalloc.h>
@@ -38,6 +40,54 @@
 #include <errno.h>
 #include <assert.h>
 
+#include <time.h> /* struct timespec */
+
+/* #include <stdio.h> */
+
+
+/*
+
+This Windows condition implementation is taken from 
+"Strategies for Implementing POSIX Condition Variables on Win32"
+by Douglas C. Schmidt
+( http://www.cs.wustl.edu/~schmidt/win32-cv-1.html ) :
+
+3.4. The SignalObjectAndWait Solution
+The implementation relies on the Windows NT 4.0 SignalObjectAndWait function,
+thus it is not available in Windows CE, Windows '95, or Windows NT 3.51.
+
+The code was taken from the article.
+
+The C++ source code for POSIX condition variable on Win32
+described in the article is freely available with the ACE framework
+at //www.cs.wustl.edu/~schmidt/ACE.html.
+It is possible that the latter is better.
+
+*/
+
+
+typedef struct
+{
+  int waiters_count_;
+  // Number of waiting threads.
+
+  CRITICAL_SECTION waiters_count_lock_;
+  // Serialize access to <waiters_count_>.
+
+  HANDLE sema_;
+  // Semaphore used to queue up threads waiting for the condition to
+  // become signaled. 
+
+  HANDLE waiters_done_;
+  // An auto-reset event used by the broadcast/signal thread to wait
+  // for all the waiting thread(s) to wake up and be released from the
+  // semaphore. 
+
+  size_t was_broadcast_;
+  // Keeps track of whether we were broadcasting or signaling.  This
+  // allows us to optimize the code if we're just signaling.
+} pthread_cond_t;
+
 
 /*--------------------------------------------------------------------------
  * KCondition
@@ -49,11 +99,180 @@
  *  the former involves the potential to wait for a signal and the latter
  *  to generate a signal using the external lock for blocking.
  */
+struct KCondition
+{
+    pthread_cond_t cond;
+
+    atomic32_t refcount;
+};
+
 
+typedef HANDLE pthread_mutex_t;
+typedef struct pthread_condattr_t { char dummy; } pthread_condattr_t;
+
+int 
+pthread_cond_init (pthread_cond_t *cv,
+                   const pthread_condattr_t *dummy)
+{
+  cv->waiters_count_ = 0;
+  cv->was_broadcast_ = 0;
+  cv->sema_ = CreateSemaphore (NULL,       // no security
+                                0,          // initially 0
+                                0x7fffffff, // max count
+                                NULL);      // unnamed 
+  InitializeCriticalSection (&cv->waiters_count_lock_);
+  cv->waiters_done_ = CreateEvent (NULL,  // no security
+                                   FALSE, // auto-reset
+                                   FALSE, // non-signaled initially
+                                   NULL); // unnamed
+  return 0;
+}
+
+int pthread_cond_destroy (pthread_cond_t *cv) {
+    CloseHandle(cv->sema_);
+    DeleteCriticalSection(&cv->waiters_count_lock_);
+    CloseHandle(cv->waiters_done_);
+    memset(cv, 0, sizeof *cv);
+    return 0;
+}
+
+#ifndef timespec
+typedef struct timespec
+  {
+    time_t tv_sec;            /* Seconds.  */
+    long int tv_nsec;           /* Nanoseconds.  */
+  } timespec;
+#endif
+
+int pthread_cond_waitImpl (pthread_cond_t *cv, 
+                   pthread_mutex_t *external_mutex,
+                   const struct timespec *abstime,
+                   bool infinite)
+{
+    int last_waiter;
+    DWORD dwMilliseconds = INFINITE;
+
+  // Avoid race conditions.
+  EnterCriticalSection (&cv->waiters_count_lock_);
+  cv->waiters_count_++;
+  LeaveCriticalSection (&cv->waiters_count_lock_);
+
+  // This call atomically releases the mutex and waits on the
+  // semaphore until <pthread_cond_signal> or <pthread_cond_broadcast>
+  // are called by another thread.
+  if (!infinite && abstime != NULL)
+  { dwMilliseconds = abstime->tv_sec * 1000 + abstime->tv_nsec / 1000000; }
+  SignalObjectAndWait (*external_mutex, cv->sema_, dwMilliseconds, FALSE);
+
+  // Reacquire lock to avoid race conditions.
+  EnterCriticalSection (&cv->waiters_count_lock_);
+
+  // We're no longer waiting...
+  cv->waiters_count_--;
+
+  // Check to see if we're the last waiter after <pthread_cond_broadcast>.
+  last_waiter = cv->was_broadcast_ && cv->waiters_count_ == 0;
+
+  LeaveCriticalSection (&cv->waiters_count_lock_);
+
+  // If we're the last waiter thread during this particular broadcast
+  // then let all the other threads proceed.
+  if (last_waiter)
+    // This call atomically signals the <waiters_done_> event and waits until
+    // it can acquire the <external_mutex>.
+    // This is required to ensure fairness.
+    SignalObjectAndWait (cv->waiters_done_, *external_mutex, INFINITE, FALSE);
+  else {
+    // Always regain the external mutex since that's the guarantee we
+    // give to our callers. 
+/*      fprintf(stderr, "%s: WaitForSingleObject...\n", __func__); */
+    WaitForSingleObject (*external_mutex, INFINITE);
+/*      fprintf(stderr, "... %s: WaitForSingleObject\n", __func__); */
+  }
+
+  return 0;
+}
+
+int pthread_cond_timedwait(pthread_cond_t *cv,
+              pthread_mutex_t *external_mutex,
+              const struct timespec *abstime)
+{
+  return pthread_cond_waitImpl(cv, external_mutex, abstime, false);
+}
+
+int
+pthread_cond_wait (pthread_cond_t *cv, 
+                   pthread_mutex_t *external_mutex)
+{
+  return pthread_cond_waitImpl(cv, external_mutex, NULL, true);
+}
+
+int
+pthread_cond_signal (pthread_cond_t *cv)
+{
+    int have_waiters;
+
+  EnterCriticalSection (&cv->waiters_count_lock_);
+  have_waiters = cv->waiters_count_ > 0;
+  LeaveCriticalSection (&cv->waiters_count_lock_);
+
+  // If there aren't any waiters, then this is a no-op.  
+  if (have_waiters)
+    ReleaseSemaphore (cv->sema_, 1, 0);
+
+  return 0;
+}
+
+int
+pthread_cond_broadcast (pthread_cond_t *cv)
+{
+  int have_waiters = 0;
+
+  // This is needed to ensure that <waiters_count_> and <was_broadcast_> are
+  // consistent relative to each other.
+  EnterCriticalSection (&cv->waiters_count_lock_);
+
+  if (cv->waiters_count_ > 0) {
+    // We are broadcasting, even if there is just one waiter...
+    // Record that we are broadcasting, which helps optimize
+    // <pthread_cond_wait> for the non-broadcast case.
+    cv->was_broadcast_ = 1;
+    have_waiters = 1;
+  }
+
+  if (have_waiters) {
+    // Wake up all the waiters atomically.
+    ReleaseSemaphore (cv->sema_, cv->waiters_count_, 0);
+
+    LeaveCriticalSection (&cv->waiters_count_lock_);
+
+    // Wait for all the awakened threads to acquire the counting
+    // semaphore. 
+    WaitForSingleObject (cv->waiters_done_, INFINITE);
+    // This assignment is okay, even without the <waiters_count_lock_> held 
+    // because no other waiter threads can wake up to access it.
+    cv->was_broadcast_ = 0;
+  }
+  else
+    LeaveCriticalSection (&cv->waiters_count_lock_);
+
+  return 0;
+}
+
+/*--------------------------------------------------------------------------
+ * KCondition
+ *  a POSIX-style condition object
+ *  ( requires an external lock object )
+ *
+ *  usage: the user first acquires an external lock. then, depending upon
+ *  the operation, will either test for a condition or establish it, where
+ *  the former involves the potential to wait for a signal and the latter
+ *  to generate a signal using the external lock for blocking.
+ */
 
 /* Destroy
  */
-LIB_EXPORT rc_t CC KConditionDestroy ( KCondition *self )
+rc_t KConditionDestroy ( KCondition *self )
 {
     int status = pthread_cond_destroy ( & self -> cond );
     switch ( status )
@@ -83,7 +302,7 @@ rc_t KConditionWhack ( KCondition *self )
 
 /* Init
  */
-LIB_EXPORT rc_t CC KConditionInit ( KCondition *self )
+rc_t KConditionInit ( KCondition *self )
 {
     int status;
 
@@ -166,7 +385,7 @@ LIB_EXPORT rc_t CC KConditionRelease ( const KCondition *cself )
  *  manipulates reference counter
  *  returns true if last ref
  */
-LIB_EXPORT int CC KConditionDropRef ( const KCondition *cself )
+int KConditionDropRef ( const KCondition *cself )
 {
     assert ( cself != NULL );
     return atomic32_dec_and_test ( & ( ( KCondition* ) cself ) -> refcount );
@@ -200,6 +419,7 @@ LIB_EXPORT rc_t CC KConditionWait ( KCondition *self, struct KLock *lock )
 LIB_EXPORT rc_t CC KConditionTimedWait ( KCondition *self, struct KLock *lock, timeout_t *tm )
 {
     int status;
+    timespec ts;
 
     if ( self == NULL )
         return RC ( rcPS, rcCondition, rcWaiting, rcSelf, rcNull );
@@ -211,13 +431,17 @@ LIB_EXPORT rc_t CC KConditionTimedWait ( KCondition *self, struct KLock *lock, t
     if ( ! tm -> prepared )
         TimeoutPrepare ( tm );
 
-    status = pthread_cond_timedwait ( & self -> cond, & lock -> mutex, & tm -> ts );
+    memset(&ts, 0, sizeof ts);
+    ts.tv_sec = tm -> mS / 1000;
+    ts.tv_nsec = (tm -> mS - ts.tv_sec * 1000) * 1000000;
+
+    status = pthread_cond_timedwait ( & self -> cond, & lock -> mutex, & ts );
     switch ( status )
     {
     case 0:
         break;
-    case ETIMEDOUT:
-        return RC ( rcPS, rcCondition, rcWaiting, rcTimeout, rcExhausted );
+/*  case ETIMEDOUT:
+        return RC ( rcPS, rcCondition, rcWaiting, rcTimeout, rcExhausted ); */
     case EINTR:
         return RC ( rcPS, rcCondition, rcWaiting, rcThread, rcInterrupted );
     default:
diff --git a/libs/kproc/win/syslock.c b/libs/kproc/win/syslock.c
index c099270..5159eef 100644
--- a/libs/kproc/win/syslock.c
+++ b/libs/kproc/win/syslock.c
@@ -27,6 +27,7 @@
 #include <kproc/extern.h>
 
 #include "syslock-priv.h"
+#include <kproc/timeout.h>
 #include <kproc/lock.h>
 #include <klib/rc.h>
 #include <sysalloc.h>
@@ -110,6 +111,7 @@ LIB_EXPORT rc_t CC KLockAddRef ( const KLock *cself )
     return 0;
 }
 
+
 LIB_EXPORT rc_t CC KLockRelease ( const KLock *cself )
 {
     KLock *self = ( KLock* ) cself;
@@ -151,12 +153,13 @@ LIB_EXPORT rc_t CC KLockAcquire ( KLock *self )
     return RC ( rcPS, rcLock, rcLocking, rcNoObj, rcUnknown );
 }
 
+
 LIB_EXPORT rc_t CC KLockTimedAcquire ( KLock *self, timeout_t *tm )
 {
     if ( self == NULL )
         return RC ( rcPS, rcLock, rcLocking, rcSelf, rcNull );
 
-    switch ( WaitForSingleObject ( self -> mutex, tm != NULL ? tm -> mS : 0 ) )
+    switch ( WaitForSingleObject( self -> mutex, tm != NULL ? tm -> mS : 0 ) )
     {
     case WAIT_ABANDONED:
     case WAIT_OBJECT_0:
@@ -176,6 +179,7 @@ LIB_EXPORT rc_t CC KLockTimedAcquire ( KLock *self, timeout_t *tm )
     return RC ( rcPS, rcLock, rcLocking, rcNoObj, rcUnknown );
 }
 
+
 /* Unlock
  *  releases lock
  */
diff --git a/libs/krypto/Makefile b/libs/krypto/Makefile
new file mode 100644
index 0000000..27cb6c3
--- /dev/null
+++ b/libs/krypto/Makefile
@@ -0,0 +1,336 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: all
+
+USE_GCC_IF_ICC = 1
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = libs/krypto
+
+INT_LIBS = 
+
+EXT_LIBS = \
+	libkrypto
+
+ALL_LIBS = \
+	$(INT_LIBS) \
+	$(EXT_LIBS)
+
+include $(TOP)/build/Makefile.env
+
+ifeq ($(OS),linux)
+INT_LIBS += libkryptotest
+endif
+
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+# This differs from other sister Makefiles in needing three other symbols defined
+# VEC_SUPPORTED, VECREG_SUPPORTED and AESNI_SUPPORTED
+# The successive symbols are additive
+# In order they are the compiler supports  the vector 'container' type,
+# the preocessor has supported vector registers
+# the processor supports the Intel AES-NI instruction set
+#
+# The prerequisite call to make compiler-test will have tried to compile objects
+# that show such support if the objec can be made
+all std: makedirs compiler-test
+	@ $(MAKE_CMD) \
+		VEC_SUPPORTED=$(shell if test -f $(OBJDIR)/compile-test.vec.$(LOBX) ; then echo "true"; else echo "false" ; fi) \
+		VECREG_SUPPORTED=$(shell if test -f $(OBJDIR)/compile-test.vecreg.$(LOBX) ; then echo "true"; else echo "false" ; fi) \
+		AESNI_SUPPORTED=$(shell if test -f $(OBJDIR)/compile-test.aes-ni.$(LOBX) ; then echo "true"; else echo "false" ; fi) \
+		$(TARGDIR)/std || \
+	( echo "reattempting without AES-NI instructions"; \
+	  $(MAKE_CMD) \
+		VEC_SUPPORTED=$(shell if test -f $(OBJDIR)/compile-test.vec.$(LOBX) ; then echo "true"; else echo "false" ; fi) \
+		VECREG_SUPPORTED=$(shell if test -f $(OBJDIR)/compile-test.vecreg.$(LOBX) ; then echo "true"; else echo "false" ; fi) \
+		AESNI_SUPPORTED=false \
+		$(TARGDIR)/std ) || \
+	( echo "reattempting without vector register instructions"; \
+	  $(MAKE_CMD) \
+		VEC_SUPPORTED=$(shell if test -f $(OBJDIR)/compile-test.vec.$(LOBX) ; then echo "true"; else echo "false" ; fi) \
+		VECREG_SUPPORTED=false \
+		AESNI_SUPPORTED=false \
+		$(TARGDIR)/std ) || \
+	( echo "reattempting without vector instructions"; \
+	  $(MAKE_CMD) \
+		VEC_SUPPORTED=false \
+		VECREG_SUPPORTED=false \
+		AESNI_SUPPORTED=false \
+		$(TARGDIR)/std )
+
+$(INT_LIBS): makedirs
+	@ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_LIBS): makedirs
+	@ $(MAKE_CMD) $(LIBDIR)/$@
+
+.PHONY: all std $(ALL_LIBS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
+	$(addprefix $(LIBDIR)/,$(EXT_LIBS))
+#	@echo VEC_SUPPORTED $(VEC_SUPPORTED)
+#	@echo VECREG_SUPPORTED $(VECREG_SUPPORTED)
+#	@echo AESNI_SUPPORTED $(AESNI_SUPPORTED)
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: \
+	$(addsuffix _tag,$(ALL_LIBS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_LIBS))
+
+
+#-------------------------------------------------------------------------------
+# compiler-test
+#
+.PHONY: compiler-test $(TARGDIR)/compiler-test
+
+# Silently try to compile three objects
+compiler-test : makedirs
+	@ $(MAKE_CMD) -i $(TARGDIR)/compiler-test >/dev/null 2>/dev/null
+
+
+COMPILE_TEST_SRC = \
+	compile-test.vec \
+	compile-test.vecreg \
+	compile-test.aes-ni
+
+COMPILE_TEST_OBJ = \
+	$(addsuffix .$(LOBX),$(COMPILE_TEST_SRC))
+
+$(TARGDIR)/compiler-test : $(COMPILE_TEST_OBJ)
+	@echo VEC_SUPPORTED $(VEC_SUPPORTED)
+	@echo VECREG_SUPPORTED $(VECREG_SUPPORTED)
+	@echo AESNI_SUPPORTED $(AESNI_SUPPORTED)
+
+#-------------------------------------------------------------------------------
+# define some additional compiler flags for special object file types
+# currently only gcc is supported and it turns out only with 4.4.0 and up
+# though other compilers could also be supported
+ifeq ($(COMP),gcc)
+CC_LISTING = -Wa,-ahlms=$(<D)/$(@F).list
+_CC_AES_NI  = -funsafe-math-optimizations -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -maes -Wa,-march=generic64+aes $(CC_LISTING)
+_CC_VECREG  = -funsafe-math-optimizations -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -Wa,-march=generic64+sse4 $(CC_LISTING)
+_CC_VEC     = $(CC_LISTING)
+else
+_CC_LISTING =
+_CC_AES_NI  =
+_CC_VECREG  =
+_CC_VEC     =
+endif
+
+ifeq ($(VEC_SUPPORTED),true)
+CC_VEC = $(_CC_VEC)
+else
+CC_VEC =
+endif
+
+ifeq ($(VECREG_SUPPORTED),true)
+CC_VECREG = $(_CC_VECREG)
+else
+CC_VECREG = 
+endif
+
+ifeq ($(AESNI_SUPPORTED),true)
+CC_AES_NI = $(_CC_AES_NI)
+else
+CC_AES_NI = 
+endif
+
+# Rules for making objects using compiler vectors
+compile-test.vec.pic.o : compile-test.c
+	@ echo +++++ Making $@ using its own rule
+	@ echo $@ $(_CC_VEC)
+	$(CC) -o $@ -fPIC $(OPT) -D_LIBRARY -DUSEVEC $(_CC_VEC) $<
+
+
+%.vec.$(LOBX): %.c
+	$(CC) -o $@ -fPIC $(OPT) -D_LIBRARY -DUSEVEC $(CC_VEC) $<
+
+
+# Rules for making objects using vectors in registers
+compile-test.vecreg.pic.o : compile-test.c
+	@ echo +++++ Making $@ using its own rule
+	@ echo $@ $(_CC_VECREG)
+	$(CC) -o $@ -fPIC $(OPT) -D_LIBRARY -DUSEVEC -DUSEVECREG $(_CC_VECREG) $<
+
+%.vecreg.$(LOBX): %.c
+	$(CC) -o $@ -fPIC $(OPT) -D_LIBRARY -DUSEVEC -DUSEVECREG $(CC_VECREG) $<
+
+
+# Rules for making objects using AES-NI extensions vectors in registers
+compile-test.aes-ni.pic.o : compile-test.c
+	@ echo +++++ Making $@ using its own rule
+	@ echo $@ $(_CC_AES_NI)
+	$(CC) -o $@ -fPIC $(OPT) -D_LIBRARY -DUSEVEC -DUSEVECREG -DUSEAESNI $(_CC_AES_NI) $<
+
+%.aes-ni.$(LOBX): %.c
+	$(CC) -o $@ -fPIC $(OPT) -D_LIBRARY -DUSEVEC -DUSEVECREG -DUSEAESNI $(CC_AES_NI) $<
+
+
+
+#-------------------------------------------------------------------------------
+# krypto
+#
+$(LIBDIR)/libkrypto: $(addprefix $(LIBDIR)/libkrypto.,$(LIBEXT))
+
+ALL_LIB_SRC = \
+	ciphermgr \
+	wgaencrypt \
+	encfile \
+	encfilev2 \
+	cipher \
+	aes_core \
+	aes-byte \
+	cipher-byte \
+	key \
+	reencfile
+
+LIB_SRC = \
+	no-null-ncbi
+
+TEST_LIB_SRC =  \
+	null-ncbi \
+	testcipher
+
+ifeq ($(VEC_SUPPORTED),true)
+ALL_LIB_SRC += \
+	cipher-vec.vec \
+	aes-ncbi.vec
+LIB_SRC += \
+	no-null-ncbi.vec
+TEST_LIB_SRC += \
+	null-ncbi.vec
+else
+ALL_LIB_SRC += \
+	cipher-no-vec.vec
+LIB_SRC += \
+	no-null-ncbi.vec
+TEST_LIB_SRC += \
+	no-null-ncbi.vec
+endif
+
+ifeq ($(VECREG_SUPPORTED),true)
+ALL_LIB_SRC += \
+	cipher-vec.vecreg \
+	aes-ncbi.vecreg
+LIB_SRC += \
+	no-null-ncbi.vecreg
+TEST_LIB_SRC += \
+	null-ncbi.vecreg
+else
+ALL_LIB_SRC += \
+	cipher-no-vec.vecreg
+LIB_SRC += \
+	no-null-ncbi.vecreg
+TEST_LIB_SRC += \
+	no-null-ncbi.vecreg
+endif
+
+ifeq ($(AESNI_SUPPORTED),true)
+ALL_LIB_SRC += \
+	cipher-vec.aes-ni \
+	aes-ncbi.aes-ni
+LIB_SRC += \
+	no-null-ncbi.aes-ni
+TEST_LIB_SRC += \
+	no-null-ncbi.aes-ni
+else
+ALL_LIB_SRC += \
+	cipher-no-vec.aes-ni
+LIB_SRC += \
+	no-null-ncbi.aes-ni
+TEST_LIB_SRC += \
+	no-null-ncbi.aes-ni
+endif
+
+
+KRYPTO_SRC = $(ALL_LIB_SRC) $(LIB_SRC)
+
+KRYPTO_OBJ = \
+	$(addsuffix .$(LOBX),$(KRYPTO_SRC))
+
+KRYPTO_LIB = \
+	-dkfg \
+	-dkfs \
+	-dkproc \
+	-dklib
+
+$(LIBDIR)/libkrypto.$(SHLX): $(KRYPTO_OBJ)
+	$(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(KRYPTO_LIB)
+
+$(LIBDIR)/libkrypto.$(LIBX): $(KRYPTO_OBJ)
+	$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(KRYPTO_LIB)
+
+libkrypto_tag:
+	@ $(TOP)/build/tag-module.sh $(MODULE) libkrypto $(KRYPTO_OBJ)
+
+
+#-------------------------------------------------------------------------------
+# kryptotest
+#
+
+$(ILIBDIR)/libkryptotest: $(addprefix $(ILIBDIR)/libkryptotest.,$(ILIBEXT))
+
+
+KRYPTOTEST_SRC = $(ALL_LIB_SRC)	$(TEST_LIB_SRC)
+
+KRYPTOTEST_OBJ = \
+	$(addsuffix .$(LOBX),$(KRYPTOTEST_SRC))
+
+KRYPTOTEST_LIB = \
+	-dkfg \
+	-dkfs \
+	-dkproc \
+	-dklib
+
+
+$(ILIBDIR)/libkryptotest.$(SHLX): $(KRYPTOTEST_OBJ)
+	$(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(KRYPTOTEST_LIB)
+
+$(ILIBDIR)/libkryptotest.$(LIBX): $(KRYPTOTEST_OBJ)
+	$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(KRYPTOTEST_LIB)
+
+libkryptotest_tag:
+	@ $(TOP)/build/tag-module.sh $(MODULE) libkryptotest $(KRYPTOTEST_OBJ)
+
+
+
diff --git a/libs/krypto/aes-byte.c b/libs/krypto/aes-byte.c
new file mode 100644
index 0000000..29e104b
--- /dev/null
+++ b/libs/krypto/aes-byte.c
@@ -0,0 +1,236 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#include <krypto/extern.h>
+#include <klib/defs.h>
+
+#include "aes-priv.h"
+#include "cipher-priv.h"
+
+#include <klib/rc.h>
+
+#include <string.h>
+#include <assert.h>
+
+
+/* instantiate for class functions that use the VT */
+#define BLOCKCIPHER_BYTE_IMPL KAESBlockCipherByte
+#include "blockcipher-impl.h"
+
+static const char KAESByteBlockCipherClassName[] = "KAESCipherByte";
+
+static
+void KAESBlockCipherByteDestroy (const KAESBlockCipherByte * self)
+{
+    /* we use a constant object */
+}
+
+
+static
+uint32_t KAESBlockCipherByteBlockSize ()
+{
+    return AES_BLOCK_SIZE;
+}
+
+
+/* ----------------------------------------------------------------------
+ * KeySize
+ *   How large is the stored key for this cipher?  Not the user key used
+ *   to create this key (key schedule)
+ *
+ *   This is needed by KCipher to know how large the KCipher objecr is at
+ *   allocation and to know how much of a buffer each decryption/encryption is
+ */
+static
+uint32_t KAESBlockCipherByteKeySize ()
+{
+    return  (uint32_t)sizeof (AES_KEY);
+}
+
+
+/* ----------------------------------------------------------------------
+ * SetEncryptKey
+ *   The KCipher calls this to have the block cipher build an encryption
+ *   key in the KCipher object
+ *
+ */
+static
+rc_t KAESBlockCipherByteSetEncryptKey (void * encrypt_key,
+                                       const char * user_key,
+                                       uint32_t user_key_size)
+{
+    int iii;
+    rc_t rc;
+
+    assert (encrypt_key);
+    assert (user_key);
+    assert (user_key_size != 0);
+
+    iii = AES_set_encrypt_key((const unsigned char *)user_key,
+                              (int)user_key_size * 8,
+                              encrypt_key);
+    if (iii == 0)
+        rc = 0;
+    else
+    {
+        switch (iii)
+        {
+        default: /* not in the code when this was written */
+            rc = RC (rcKrypto, rcCipher, rcUpdating, rcEncryptionKey, rcUnknown);
+            break;
+
+        case -1: /* bad parameters */
+            rc = RC (rcKrypto, rcCipher, rcUpdating, rcParam, rcInvalid);
+            break;
+
+        case -2: /* bad bit count */
+            rc = RC (rcKrypto, rcCipher, rcUpdating, rcParam, rcIncorrect);
+            break;
+        }
+        memset (encrypt_key, 0, sizeof (AES_KEY));
+    }
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * SetDecryptKey
+ *   The KCipher calls this to have the block cipher build an decryption
+ *   key in the KCipher object
+ *
+ */
+static
+rc_t KAESBlockCipherByteSetDecryptKey (void * decrypt_key,
+                                       const char * user_key,
+                                       uint32_t user_key_size)
+{
+    int iii;
+    rc_t rc;
+
+    assert (decrypt_key);
+    assert (user_key);
+    assert (user_key_size != 0);
+
+    iii = AES_set_decrypt_key((const unsigned char *)user_key, (int)user_key_size * 8,
+                              decrypt_key);
+    if (iii == 0)
+        rc = 0;
+    else
+    {
+        switch (iii)
+        {
+        default: /* not in the code when this was written */
+            rc = RC (rcKrypto, rcCipher, rcUpdating, rcEncryptionKey, rcUnknown);
+            break;
+
+        case -1: /* bad parameters */
+            rc = RC (rcKrypto, rcCipher, rcUpdating, rcParam, rcInvalid);
+            break;
+
+        case -2: /* bad bit count */
+            rc = RC (rcKrypto, rcCipher, rcUpdating, rcParam, rcIncorrect);
+            break;
+        }
+        memset (decrypt_key, 0, sizeof (AES_KEY));
+    }
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Encrypt
+ *
+ *   Perform an encryption of a single block.  Chained modes and stream
+ *   cipher modes will call this multiple times.
+ *
+ */
+static
+void KAESBlockCipherByteEncrypt (const CipherBlock in,
+                                 CipherBlock out,
+                                 const void * key)
+{
+    assert (in);
+    assert (out);
+    assert (key);
+
+    AES_encrypt ((const uint8_t*)in, (uint8_t*)out, key);
+}
+
+
+/* ----------------------------------------------------------------------
+ * Decrypt
+ *
+ *   Perform a decryption of a single block.  Chained modes and stream
+ *   cipher modes will call this multiple times.
+ *
+ */
+static
+void KAESBlockCipherByteDecrypt (const CipherBlock in,
+                                 CipherBlock out,
+                                 const void * key)
+{
+    assert (in);
+    assert (out);
+    assert (key);
+
+    AES_decrypt ((const uint8_t*)in, (uint8_t*)out, key);
+}
+
+
+static const struct
+KBlockCipherByte_vt_v1 aes_vt = 
+{
+    /* .version */
+    { 1, 0 },
+
+    KAESBlockCipherByteDestroy,
+
+    KAESBlockCipherByteBlockSize,
+    KAESBlockCipherByteKeySize,
+
+    KAESBlockCipherByteSetEncryptKey,
+    KAESBlockCipherByteSetDecryptKey,
+
+    KAESBlockCipherByteEncrypt,
+    KAESBlockCipherByteDecrypt
+};
+
+
+rc_t KAESBlockCipherByteMake (KBlockCipherByte ** pobj)
+{
+    rc_t rc;
+
+    if (pobj == NULL)
+        rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+
+    else
+    {
+        rc = 0;
+        *pobj = (KBlockCipherByte*)&aes_vt;
+    }
+    return rc;
+}
+
+/* EOF */
+
diff --git a/libs/krypto/aes-ncbi-priv.h b/libs/krypto/aes-ncbi-priv.h
new file mode 100644
index 0000000..5738029
--- /dev/null
+++ b/libs/krypto/aes-ncbi-priv.h
@@ -0,0 +1,227 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#ifndef _h_krypto_aes_ncbi_priv_libs_
+#define _h_krypto_aes_ncbi_priv_libs_
+
+#include <klib/defs.h>
+#include <v128.h>
+
+#include "ncbi-priv.h"
+#include "cipher-impl.h"
+#include "blockcipher-impl.h"
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+
+/* ======================================================================
+ * FIPS-197 2.1
+ */
+#define AES_BLOCK_BITS (128)
+#define AES_BLOCK_BYTES (AES_BLOCK_BITS/8)
+
+
+/* ======================================================================
+ * FIPS-197 3,4 - 3.5
+ *
+ * FIPS-197 defines Nk as number of 32-bit words in the user key
+ */
+#define AES_Nk_128 (4)
+#define AES_Nk_192 (6)
+#define AES_Nk_256 (8)
+
+
+/*
+ * FIPS-197 defines Nb as number of 32-bit words in the cipher block
+ *
+ * There is much odd naming in the document from the perspective of a software
+ * engineer.
+ */
+#define AES_Nb (4)
+#define AES_Nb_128 (AES_Nb)
+#define AES_Nb_192 (AES_Nb)
+#define AES_Nb_256 (AES_Nb)
+
+
+/* 
+ * FIPS-197 defines Nr as the number of rounds for a cipher of a given original 
+ * user key length.
+ *
+ * Another odd naming as it is really the zero based highest round offset
+ * as 1 first round + Nr-1 middle rounds + 1 last round are performed for
+ * each encrypt or decrypt block.  There are thus Nr + 1 round keys needed
+ * in the encryption and decryption key schedules
+ */
+#define AES_Nr_128 (10)
+#define AES_Nr_192 (12)
+#define AES_Nr_256 (14)
+#define AES_Nr_MAX (15)
+
+/* Most useful for testingg against Appendix A-C of the FIPS-197 document */
+#define DEBUG_OBJECT(msg) DBGMSG(DBG_AES,DBG_FLAG(DBG_AES_OBJECT), msg)
+#define DEBUG_KEYEXP(msg) DBGMSG(DBG_AES,DBG_FLAG(DBG_AES_KEYEXP), msg)
+#define DEBUG_CIPHER(msg) DBGMSG(DBG_AES,DBG_FLAG(DBG_AES_CIPHER), msg)
+#define DEBUG_INVKEYEXP(msg) DBGMSG(DBG_AES,DBG_FLAG(DBG_AES_INVKEYEXP), msg)
+#define DEBUG_INVCIPHER(msg) DBGMSG(DBG_AES,DBG_FLAG(DBG_AES_INVCIPHER), msg)
+
+#define DEBUG_CIPHER_MVECTOR(M,v)                                   \
+    DBGMSG(DBG_AES,DBG_FLAG(DBG_AES_CIPHER),                        \
+           ("%s:\t%0.8x %0.8x %0.8x %0.8x\n",M,                     \
+            v.columns[0],v.columns[1],v.columns[2],v.columns[3]))
+#define DEBUG_INVCIPHER_MVECTOR(M,v)                                \
+    DBGMSG(DBG_AES,DBG_FLAG(DBG_AES_INVCIPHER),                     \
+           ("%s:\t%0.8x %0.8x %0.8x %0.8x\n",M,                     \
+            v.columns[0],v.columns[1],v.columns[2],v.columns[3]))
+
+#if _DEBUGGING
+#if 1
+#define DEBUG_CIPHER_VECTOR(M,V)                        \
+    {                                                   \
+        CipherVec_AES_u v; v.state = V;                 \
+        DBGMSG(DBG_AES,DBG_FLAG(DBG_AES_CIPHER),        \
+               ("%s:\t%0.8x %0.8x %0.8x %0.8x\n", M,    \
+                bswap_32(v.columns[0]),                 \
+                bswap_32(v.columns[1]),                 \
+                bswap_32(v.columns[2]),                 \
+                bswap_32(v.columns[3])));               \
+            }
+#define DEBUG_INVCIPHER_VECTOR(M,V)                     \
+    {                                                   \
+        CipherVec_AES_u v; v.state = V;                 \
+        DBGMSG(DBG_AES,DBG_FLAG(DBG_AES_INVCIPHER),     \
+               ("%s:\t%0.8x %0.8x %0.8x %0.8x\n", M,    \
+                bswap_32(v.columns[0]),                 \
+                bswap_32(v.columns[1]),                 \
+                bswap_32(v.columns[2]),                 \
+                bswap_32(v.columns[3])));               \
+            }
+#else
+#define DEBUG_CIPHER_VECTOR(M,v)                              \
+    KOutMsg ( "%s:\t%0.8x %0.8x %0.8x %0.8x\n", M,            \
+              bswap_32(((CipherVec_AES_u*)&(v))->columns[0]), \
+              bswap_32(((CipherVec_AES_u*)&(v))->columns[1]), \
+              bswap_32(((CipherVec_AES_u*)&(v))->columns[2]), \
+              bswap_32(((CipherVec_AES_u*)&(v))->columns[3]))
+#define DEBUG_INVCIPHER_VECTOR(M,v)                           \
+    KOutMsg ( "%s:\t%0.8x %0.8x %0.8x %0.8x\n", M,            \
+              bswap_32(((CipherVec_AES_u*)&(v))->columns[0]), \
+              bswap_32(((CipherVec_AES_u*)&(v))->columns[1]), \
+              bswap_32(((CipherVec_AES_u*)&(v))->columns[2]), \
+              bswap_32(((CipherVec_AES_u*)&(v))->columns[3]))
+#endif
+#define DDEBUG_CIPHER_VECTOR(M,v)                             \
+    KOutMsg ( "%s:\t%0.8x %0.8x %0.8x %0.8x\n", M,            \
+              bswap_32(((CipherVec_AES_u*)&(v))->columns[0]), \
+              bswap_32(((CipherVec_AES_u*)&(v))->columns[1]), \
+              bswap_32(((CipherVec_AES_u*)&(v))->columns[2]), \
+              bswap_32(((CipherVec_AES_u*)&(v))->columns[3]))
+#define DDEBUG_INVCIPHER_VECTOR(M,v)                          \
+    KOutMsg ( "%s:\t%0.8x %0.8x %0.8x %0.8x\n", M,            \
+              bswap_32(((CipherVec_AES_u*)&(v))->columns[0]), \
+              bswap_32(((CipherVec_AES_u*)&(v))->columns[1]), \
+              bswap_32(((CipherVec_AES_u*)&(v))->columns[2]), \
+              bswap_32(((CipherVec_AES_u*)&(v))->columns[3]))
+
+#else
+#define DEBUG_CIPHER_VECTOR(M,V)
+#define DEBUG_INVCIPHER_VECTOR(M,V)
+#endif
+
+/* -----
+ * 8 and 32 bit unsigned integers
+ */
+typedef uint8_t  AESByte;
+typedef uint32_t AESWord;
+typedef union AESColumn AESColumn;
+union AESColumn
+{
+    AESWord word;
+    AESByte bytes [sizeof(AESWord)];
+};
+
+
+/* -----
+ * 128 byte block in various forms
+ */
+typedef AESByte AESBlock [AES_Nb*sizeof(AESWord)];
+
+typedef v128_u8_t  CipherVecByte;
+typedef v128_u32_t CipherVecWord;
+
+
+typedef struct AESKeySchedule  AESKeySchedule;
+struct AESKeySchedule
+{
+    CipherVec round_keys [AES_Nr_MAX];
+    uint32_t number_of_rounds;
+};
+
+/* ======================================================================
+ * FIPS-197 3,4 - 3.5
+ *
+ * An AES State is the same size as the cipher block size.
+ * They are eaither 4 columns of 32 bits or 16 individual bytes.
+ * The columns can be accessed by their individual bytes s0
+ * there are 4X32, 4X4X8 or 16X8 bits in a state.
+ */
+typedef union
+{
+    CipherVec   state;
+    uint64_t    u64     [AES_Nb/2];
+    AESWord     columns [AES_Nb];
+    AESByte     bytes   [AES_Nb * sizeof (AESWord)];
+    AESByte     grid    [AES_Nb][sizeof (AESWord)];
+} CipherVec_AES_u;
+
+
+typedef union
+{
+    CipherVec   state;
+    v128_u32_t columns;
+} CipherVec_uu __attribute__ ((aligned(16)));
+
+/* 
+ * KCipher with 128 bit alignment.
+ */
+typedef struct CipherAes CipherAes;
+struct CipherAes
+{
+    KCipher dad;
+    AESKeySchedule e_key;
+    AESKeySchedule d_key;
+    CipherVec    e_ivec;
+    CipherVec    d_ivec;
+};
+
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif /* #ifndef _h_krypto_aes_ncbi_priv_libs_ */
+
+
diff --git a/libs/krypto/aes-ncbi.aes-ni.pic.o.list b/libs/krypto/aes-ncbi.aes-ni.pic.o.list
new file mode 100644
index 0000000..11d112b
--- /dev/null
+++ b/libs/krypto/aes-ncbi.aes-ni.pic.o.list
@@ -0,0 +1,38295 @@
+GAS LISTING /tmp/ccPaCTqg.s 			page 1
+
+
+   1              		.file	"aes-ncbi.c"
+   2              		.section	.debug_abbrev,"", at progbits
+   3              	.Ldebug_abbrev0:
+   4              		.section	.debug_info,"", at progbits
+   5              	.Ldebug_info0:
+   6              		.section	.debug_line,"", at progbits
+   7              	.Ldebug_line0:
+   8 0000 11140000 		.text
+   8      02007101 
+   8      00000101 
+   8      FB0E0D00 
+   8      01010101 
+   9              	.Ltext0:
+  10              		.type	op_AESENC, @function
+  11              	op_AESENC:
+  12              	.LFB580:
+  13              		.file 1 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+   1:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*===========================================================================
+   2:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+   3:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *                            PUBLIC DOMAIN NOTICE
+   4:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *               National Center for Biotechnology Information
+   5:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+   6:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  This software/database is a "United States Government Work" under the
+   7:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  terms of the United States Copyright Act.  It was written as part of
+   8:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  the author's official duties as a United States Government employee and
+   9:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  thus cannot be copyrighted.  This software/database is freely available
+  10:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  to the public for use. The National Library of Medicine and the U.S.
+  11:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  Government have not placed any restriction on its use or reproduction.
+  12:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+  13:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  Although all reasonable efforts have been taken to ensure the accuracy
+  14:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  and reliability of the software and data, the NLM and the U.S.
+  15:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  Government do not and cannot warrant the performance or results that
+  16:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  may be obtained by using this software or data. The NLM and the U.S.
+  17:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  Government disclaim all warranties, express or implied, including
+  18:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  warranties of performance, merchantability or fitness for any particular
+  19:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  purpose.
+  20:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+  21:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  Please cite the author in any work or product based on this material.
+  22:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+  23:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * ===========================================================================
+  24:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+  25:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+  26:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+  27:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifndef _h_v128_
+  28:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #define _h_v128_
+  29:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+  30:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #include <stdint.h>
+  31:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #include <x86intrin.h>
+  32:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+  33:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __cplusplus
+  34:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** extern "C" {
+  35:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+  36:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+  37:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef int8_t   v128_i8_t  __attribute__ ((vector_size (16),__may_alias__));
+  38:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef uint8_t  v128_u8_t  __attribute__ ((vector_size (16),__may_alias__));
+  39:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef int16_t  v128_i16_t __attribute__ ((vector_size (16),__may_alias__));
+  40:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef int32_t  v128_i32_t __attribute__ ((vector_size (16),__may_alias__));
+
GAS LISTING /tmp/ccPaCTqg.s 			page 2
+
+
+  41:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef int64_t  v128_i64_t __attribute__ ((vector_size (16),__may_alias__));
+  42:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef uint16_t v128_u16_t __attribute__ ((vector_size (16),__may_alias__));
+  43:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef uint32_t v128_u32_t __attribute__ ((vector_size (16),__may_alias__));
+  44:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef uint64_t v128_u64_t __attribute__ ((vector_size (16),__may_alias__));
+  45:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef float    v128_f_t   __attribute__ ((vector_size (16),__may_alias__));
+  46:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef double   v128_d_t   __attribute__ ((vector_size (16),__may_alias__));
+  47:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+  48:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* NOTE:
+  49:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  * these types are to hide perceived flaws in the Intel/GCC code
+  50:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  * don't use them outside of this file.  uint8_t, int8_t and int64_t all
+  51:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  * fail to compile so the above types can't be used within this file in some 
+  52:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  * places.
+  53:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  */
+  54:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef char          v128_c_t   __attribute__ ((vector_size (16),__may_alias__));
+  55:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef long long int v128_lli_t __attribute__ ((vector_size (16),__may_alias__));
+  56:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+  57:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+  58:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #if USE_VEC_REG
+  59:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+  60:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* SSE
+  61:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****   movss
+  62:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****   movaps
+  63:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****   movups
+  64:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****   movlps
+  65:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****   movhps
+  66:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****   movlhps
+  67:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****   movhlps
+  68:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+  69:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+  70:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __MMX__
+  71:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* MMX
+  72:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_paddb (v8qi, v8qi)
+  73:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_paddw (v4hi, v4hi)
+  74:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_paddd (v2si, v2si)
+  75:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_psubb (v8qi, v8qi)
+  76:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_psubw (v4hi, v4hi)
+  77:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_psubd (v2si, v2si)
+  78:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_paddsb (v8qi, v8qi)
+  79:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_paddsw (v4hi, v4hi)
+  80:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_psubsb (v8qi, v8qi)
+  81:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_psubsw (v4hi, v4hi)
+  82:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_paddusb (v8qi, v8qi)
+  83:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_paddusw (v4hi, v4hi)
+  84:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_psubusb (v8qi, v8qi)
+  85:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_psubusw (v4hi, v4hi)
+  86:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_pmullw (v4hi, v4hi)
+  87:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
+  88:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    di __builtin_ia32_pand (di, di)
+  89:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    di __builtin_ia32_pandn (di,di)
+  90:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    di __builtin_ia32_por (di, di)
+  91:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    di __builtin_ia32_pxor (di, di)
+  92:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
+  93:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
+  94:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_pcmpeqd (v2si, v2si)
+  95:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
+  96:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
+  97:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_pcmpgtd (v2si, v2si)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 3
+
+
+  98:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
+  99:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
+ 100:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_punpckhdq (v2si, v2si)
+ 101:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
+ 102:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
+ 103:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_punpckldq (v2si, v2si)
+ 104:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_packsswb (v4hi, v4hi)
+ 105:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_packssdw (v2si, v2si)
+ 106:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_packuswb (v4hi, v4hi)
+ 107:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      
+ 108:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_psllw (v4hi, v4hi)
+ 109:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_pslld (v2si, v2si)
+ 110:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v1di __builtin_ia32_psllq (v1di, v1di)
+ 111:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_psrlw (v4hi, v4hi)
+ 112:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_psrld (v2si, v2si)
+ 113:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v1di __builtin_ia32_psrlq (v1di, v1di)
+ 114:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_psraw (v4hi, v4hi)
+ 115:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_psrad (v2si, v2si)
+ 116:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_psllwi (v4hi, int)
+ 117:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_pslldi (v2si, int)
+ 118:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v1di __builtin_ia32_psllqi (v1di, int)
+ 119:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_psrlwi (v4hi, int)
+ 120:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_psrldi (v2si, int)
+ 121:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v1di __builtin_ia32_psrlqi (v1di, int)
+ 122:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_psrawi (v4hi, int)
+ 123:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_psradi (v2si, int)
+ 124:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 125:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 127:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSE__
+ 128:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* SSE
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
+ 130:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_pavgb (v8qi, v8qi)
+ 131:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_pavgw (v4hi, v4hi)
+ 132:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v1di __builtin_ia32_psadbw (v8qi, v8qi)
+ 133:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_pminub (v8qi, v8qi)
+ 136:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_pminsw (v4hi, v4hi)
+ 137:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_pextrw (v4hi, int)
+ 138:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_pinsrw (v4hi, int, int)
+ 139:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_pmovmskb (v8qi)
+ 140:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
+ 141:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    void __builtin_ia32_movntq (di *, di)
+ 142:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    void __builtin_ia32_sfence (void)
+ 143:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 144:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_comieq (v4sf, v4sf)
+ 145:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_comineq (v4sf, v4sf)
+ 146:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_comilt (v4sf, v4sf)
+ 147:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_comile (v4sf, v4sf)
+ 148:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_comigt (v4sf, v4sf)
+ 149:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_comige (v4sf, v4sf)
+ 150:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_ucomieq (v4sf, v4sf)
+ 151:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_ucomineq (v4sf, v4sf)
+ 152:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_ucomilt (v4sf, v4sf)
+ 153:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_ucomile (v4sf, v4sf)
+ 154:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_ucomigt (v4sf, v4sf)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 4
+
+
+ 155:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_ucomige (v4sf, v4sf)
+ 156:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_addps (v4sf, v4sf)
+ 157:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_subps (v4sf, v4sf)
+ 158:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_mulps (v4sf, v4sf)
+ 159:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_divps (v4sf, v4sf)
+ 160:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_addss (v4sf, v4sf)
+ 161:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_subss (v4sf, v4sf)
+ 162:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_mulss (v4sf, v4sf)
+ 163:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_divss (v4sf, v4sf)
+ 164:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
+ 165:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpltps (v4sf, v4sf)
+ 166:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpleps (v4sf, v4sf)
+ 167:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
+ 168:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
+ 169:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
+ 170:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
+ 171:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
+ 172:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
+ 173:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
+ 174:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
+ 175:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpordps (v4sf, v4sf)
+ 176:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
+ 177:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpltss (v4sf, v4sf)
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpless (v4sf, v4sf)
+ 179:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
+ 180:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
+ 181:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
+ 182:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpnless (v4sf, v4sf)
+ 183:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpordss (v4sf, v4sf)
+ 184:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_maxps (v4sf, v4sf)
+ 185:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_maxss (v4sf, v4sf)
+ 186:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_minps (v4sf, v4sf)
+ 187:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_minss (v4sf, v4sf)
+ 188:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_andps (v4sf, v4sf)
+ 189:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_andnps (v4sf, v4sf)
+ 190:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_orps (v4sf, v4sf)
+ 191:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_xorps (v4sf, v4sf)
+ 192:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_movss (v4sf, v4sf)
+ 193:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_movhlps (v4sf, v4sf)
+ 194:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_movlhps (v4sf, v4sf)
+ 195:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
+ 196:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
+ 197:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
+ 198:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
+ 199:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_cvtps2pi (v4sf)
+ 200:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_cvtss2si (v4sf)
+ 201:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_cvttps2pi (v4sf)
+ 202:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_cvttss2si (v4sf)
+ 203:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_rcpps (v4sf)
+ 204:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_rsqrtps (v4sf)
+ 205:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_sqrtps (v4sf)
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_rcpss (v4sf)
+ 207:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_rsqrtss (v4sf)
+ 208:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_sqrtss (v4sf)
+ 209:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
+ 210:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 211:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+
GAS LISTING /tmp/ccPaCTqg.s 			page 5
+
+
+ 212:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_SHUFPS ( v128_u8_t vin1, v128_u8_t vin2, const int mask )
+ 213:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     __attribute__ ((always_inline));
+ 214:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 215:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 216:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_SHUFPS (v128_u8_t vin1, v128_u8_t vin2, const int mask)
+ 217:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 218:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return ( v128_u8_t ) __builtin_ia32_shufps ((v128_f_t)vin1, (v128_f_t)vin2, mask);
+ 219:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 220:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 221:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  /*
+ 222:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    void __builtin_ia32_movntps (float *, v4sf)
+ 223:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_movmskps (v4sf)
+ 224:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 225:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_loadaps (float *)
+ 226:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movaps machine instruction as a load from memory. 
+ 227:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storeaps (float *, v4sf)
+ 228:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movaps machine instruction as a store to memory. 
+ 229:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_loadups (float *)
+ 230:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movups machine instruction as a load from memory. 
+ 231:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storeups (float *, v4sf)
+ 232:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movups machine instruction as a store to memory. 
+ 233:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_loadsss (float *)
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movss machine instruction as a load from memory. 
+ 235:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storess (float *, v4sf)
+ 236:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movss machine instruction as a store to memory. 
+ 237:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)
+ 238:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movhps machine instruction as a load from memory. 
+ 239:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)
+ 240:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movlps machine instruction as a load from memory 
+ 241:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storehps (v2sf *, v4sf)
+ 242:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movhps machine instruction as a store to memory. 
+ 243:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storelps (v2sf *, v4sf)
+ 244:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movlps machine instruction as a store to memory.
+ 245:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 246:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 247:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 248:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSE2__
+ 249:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* sse2
+ 250:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_comisdeq (v2df, v2df)
+ 251:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_comisdlt (v2df, v2df)
+ 252:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_comisdle (v2df, v2df)
+ 253:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_comisdgt (v2df, v2df)
+ 254:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_comisdge (v2df, v2df)
+ 255:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_comisdneq (v2df, v2df)
+ 256:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ucomisdeq (v2df, v2df)
+ 257:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ucomisdlt (v2df, v2df)
+ 258:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ucomisdle (v2df, v2df)
+ 259:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ucomisdgt (v2df, v2df)
+ 260:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ucomisdge (v2df, v2df)
+ 261:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ucomisdneq (v2df, v2df)
+ 262:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpeqpd (v2df, v2df)
+ 263:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpltpd (v2df, v2df)
+ 264:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmplepd (v2df, v2df)
+ 265:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpgtpd (v2df, v2df)
+ 266:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpgepd (v2df, v2df)
+ 267:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpunordpd (v2df, v2df)
+ 268:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpneqpd (v2df, v2df)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 6
+
+
+ 269:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpnltpd (v2df, v2df)
+ 270:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpnlepd (v2df, v2df)
+ 271:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpngtpd (v2df, v2df)
+ 272:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpngepd (v2df, v2df)
+ 273:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpordpd (v2df, v2df)
+ 274:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpeqsd (v2df, v2df)
+ 275:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpltsd (v2df, v2df)
+ 276:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmplesd (v2df, v2df)
+ 277:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpunordsd (v2df, v2df)
+ 278:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpneqsd (v2df, v2df)
+ 279:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpnltsd (v2df, v2df)
+ 280:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpnlesd (v2df, v2df)
+ 281:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpordsd (v2df, v2df)
+ 282:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_paddq (v2di, v2di)
+ 283:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_psubq (v2di, v2di)
+ 284:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_addpd (v2df, v2df)
+ 285:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_subpd (v2df, v2df)
+ 286:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_mulpd (v2df, v2df)
+ 287:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_divpd (v2df, v2df)
+ 288:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_addsd (v2df, v2df)
+ 289:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_subsd (v2df, v2df)
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_mulsd (v2df, v2df)
+ 291:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_divsd (v2df, v2df)
+ 292:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_minpd (v2df, v2df)
+ 293:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_maxpd (v2df, v2df)
+ 294:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_minsd (v2df, v2df)
+ 295:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_maxsd (v2df, v2df)
+ 296:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_andpd (v2df, v2df)
+ 297:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_andnpd (v2df, v2df)
+ 298:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_orpd (v2df, v2df)
+ 299:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_xorpd (v2df, v2df)
+ 300:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_movsd (v2df, v2df)
+ 301:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_unpckhpd (v2df, v2df)
+ 302:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_unpcklpd (v2df, v2df)
+ 303:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
+ 304:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
+ 305:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_paddd128 (v4si, v4si)
+ 306:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_paddq128 (v2di, v2di)
+ 307:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
+ 308:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
+ 309:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_psubd128 (v4si, v4si)
+ 310:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_psubq128 (v2di, v2di)
+ 311:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
+ 312:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
+ 313:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pand128 (v2di, v2di)
+ 314:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pandn128 (v2di, v2di)
+ 315:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_por128 (v2di, v2di)
+ 316:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pxor128 (v2di, v2di)
+ 317:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
+ 318:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
+ 319:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
+ 320:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
+ 321:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
+ 322:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
+ 323:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
+ 324:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
+ 325:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 7
+
+
+ 326:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
+ 327:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
+ 328:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
+ 329:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
+ 330:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
+ 331:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
+ 332:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
+ 333:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
+ 334:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
+ 335:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_punpckldq128 (v4si, v4si)
+ 336:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
+ 337:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
+ 338:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_packssdw128 (v4si, v4si)
+ 339:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
+ 340:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
+ 341:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_maskmovdqu (v16qi, v16qi)
+ 342:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_loadupd (double *)
+ 343:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_storeupd (double *, v2df)
+ 344:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_loadhpd (v2df, double const *)
+ 345:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_loadlpd (v2df, double const *)
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_movmskpd (v2df)
+ 347:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_pmovmskb128 (v16qi)
+ 348:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_movnti (int *, int)
+ 349:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_movntpd (double *, v2df)
+ 350:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_movntdq (v2df *, v2df)
+ 351:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pshufd (v4si, int)
+ 352:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pshuflw (v8hi, int)
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pshufhw (v8hi, int)
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_sqrtpd (v2df)
+ 356:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_sqrtsd (v2df)
+ 357:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_shufpd (v2df, v2df, int)
+ 358:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 359:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 360:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_SHUFPD (v128_u8_t vin1, v128_u8_t vin2, const int mask)
+ 361:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     __attribute__ ((always_inline));
+ 362:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 363:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 364:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_SHUFPD (v128_u8_t vin1, v128_u8_t vin2, const int mask)
+ 365:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 367:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 368:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cvtdq2pd (v4si)
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_cvtdq2ps (v4si)
+ 372:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_cvtpd2dq (v2df)
+ 373:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2si __builtin_ia32_cvtpd2pi (v2df)
+ 374:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_cvtpd2ps (v2df)
+ 375:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_cvttpd2dq (v2df)
+ 376:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2si __builtin_ia32_cvttpd2pi (v2df)
+ 377:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cvtpi2pd (v2si)
+ 378:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_cvtsd2si (v2df)
+ 379:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_cvttsd2si (v2df)
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      long long __builtin_ia32_cvtsd2si64 (v2df)
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      long long __builtin_ia32_cvttsd2si64 (v2df)
+ 382:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_cvtps2dq (v4sf)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 8
+
+
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cvtps2pd (v4sf)
+ 384:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_cvttps2dq (v4sf)
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cvtsi2sd (v2df, int)
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cvtsi642sd (v2df, long long)
+ 387:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
+ 389:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_clflush (const void *)
+ 390:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_lfence (void)
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_mfence (void)
+ 392:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_loaddqu (const char *)
+ 393:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_storedqu (char *, v16qi)
+ 394:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v1di __builtin_ia32_pmuludq (v2si, v2si)
+ 395:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pmuludq128 (v4si, v4si)
+ 396:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
+ 397:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pslld128 (v4si, v4si)
+ 398:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_psllq128 (v2di, v2di)
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_psrld128 (v4si, v4si)
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_psrlq128 (v2di, v2di)
+ 402:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
+ 403:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_psrad128 (v4si, v4si)
+ 404:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pslldqi128 (v2di, int)
+ 405:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_psllwi128 (v8hi, int)
+ 406:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pslldi128 (v4si, int)
+ 407:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 408:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 409:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 410:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSLLDI128 ( v128_u8_t vin, const int bit_count )
+ 411:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     __attribute__ ((always_inline));
+ 412:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 413:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 414:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSLLDI128 (v128_u8_t vin, const int bit_count)
+ 415:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pslldi128 ((v128_i32_t)vin, bit_count);
+ 417:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 418:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 419:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*
+ 420:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_psllqi128 (v2di, int)
+ 421:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_psrldqi128 (v2di, int)
+ 422:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_psrlwi128 (v8hi, int)
+ 423:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_psrldi128 (v4si, int)
+ 424:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 425:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 427:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSRLDI128 ( v128_u8_t vin, const int bit_count )
+ 428:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     __attribute__ ((always_inline));
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSRLDI128 (v128_u8_t vin, const int bit_count)
+ 432:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 434:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 436:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_psrlqi128 (v2di, int)
+ 438:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_psrawi128 (v8hi, int)
+ 439:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_psradi128 (v4si, int)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 9
+
+
+ 440:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
+ 441:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_movq128 (v2di)
+ 442:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 443:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 444:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSHUFD128 ( v128_u8_t vin, const int mask )
+ 445:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     __attribute__ ((always_inline));
+ 446:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      
+ 447:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 448:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSHUFD128 (v128_u8_t vin, const int mask)
+ 449:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 451:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 452:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 453:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 454:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSE3__
+ 455:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* sse3
+ 456:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_addsubpd (v2df, v2df)
+ 457:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_addsubps (v4sf, v4sf)
+ 458:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_haddpd (v2df, v2df)
+ 459:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_haddps (v4sf, v4sf)
+ 460:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_hsubpd (v2df, v2df)
+ 461:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_hsubps (v4sf, v4sf)
+ 462:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_lddqu (char const *)
+ 463:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
+ 464:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_movddup (v2df)
+ 465:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_movshdup (v4sf)
+ 466:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_movsldup (v4sf)
+ 467:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_mwait (unsigned int, unsigned int)
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_loadddup (double const *)
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 471:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 472:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 473:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 474:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 475:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSSE3__
+ 476:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 477:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* ssse3
+ 478:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  *
+ 479:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  * The following built-in functions are available when -mssse3 is used. All of
+ 480:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  * them generate the machine instruction that is part of the name with MMX
+ 481:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  * registers.
+ 482:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  *
+ 483:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  * 
+ 484:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2si __builtin_ia32_phaddd (v2si, v2si)
+ 485:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4hi __builtin_ia32_phaddw (v4hi, v4hi)
+ 486:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
+ 487:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2si __builtin_ia32_phsubd (v2si, v2si)
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4hi __builtin_ia32_phsubw (v4hi, v4hi)
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
+ 491:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
+ 492:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8qi __builtin_ia32_pshufb (v8qi, v8qi)
+ 493:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8qi __builtin_ia32_psignb (v8qi, v8qi)
+ 494:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2si __builtin_ia32_psignd (v2si, v2si)
+ 495:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4hi __builtin_ia32_psignw (v4hi, v4hi)
+ 496:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v1di __builtin_ia32_palignr (v1di, v1di, int)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 10
+
+
+ 497:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8qi __builtin_ia32_pabsb (v8qi)
+ 498:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2si __builtin_ia32_pabsd (v2si)
+ 499:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4hi __builtin_ia32_pabsw (v4hi)
+ 500:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are available when -mssse3 is used.
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** All of them generate the machine instruction that is part of the name
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** with SSE registers.
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 504:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_phaddd128 (v4si, v4si)
+ 505:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
+ 506:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
+ 507:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_phsubd128 (v4si, v4si)
+ 508:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
+ 509:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
+ 510:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
+ 511:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
+ 512:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** +    v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
+ 513:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
+ 514:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_psignd128 (v4si, v4si)
+ 515:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
+ 516:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_palignr128 (v2di, v2di, int)
+ 517:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_pabsb128 (v16qi)
+ 518:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pabsd128 (v4si)
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pabsw128 (v8hi)
+ 520:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  */
+ 521:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSHUFB128 (register v128_u8_t vin, register const v128_u8_t vtab)
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     __attribute__ ((always_inline));
+ 525:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 527:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSHUFB128 (register v128_u8_t vin, register const v128_u8_t vtab)
+ 528:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 530:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 531:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 532:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 533:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSE4_1__
+ 534:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* sse4.1
+ 535:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are available when -msse4.1 is used.
+ 536:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** All of them generate the machine instruction that is part of the name.
+ 537:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_blendpd (v2df, v2df, const int)
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
+ 541:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
+ 542:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_dppd (v2df, v2df, const int)
+ 543:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
+ 544:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
+ 545:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_movntdqa (v2di *);
+ 546:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
+ 547:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_packusdw128 (v4si, v4si)
+ 548:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
+ 549:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
+ 550:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pcmpeqq (v2di, v2di)
+ 551:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_phminposuw128 (v8hi)
+ 552:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
+ 553:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 11
+
+
+ 554:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pmaxud128 (v4si, v4si)
+ 555:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
+ 556:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
+ 557:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pminsd128 (v4si, v4si)
+ 558:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pminud128 (v4si, v4si)
+ 559:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
+ 560:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pmovsxbd128 (v16qi)
+ 561:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pmovsxbq128 (v16qi)
+ 562:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pmovsxbw128 (v16qi)
+ 563:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pmovsxdq128 (v4si)
+ 564:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pmovsxwd128 (v8hi)
+ 565:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pmovsxwq128 (v8hi)
+ 566:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pmovzxbd128 (v16qi)
+ 567:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pmovzxbq128 (v16qi)
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pmovzxbw128 (v16qi)
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pmovzxdq128 (v4si)
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pmovzxwd128 (v8hi)
+ 571:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pmovzxwq128 (v8hi)
+ 572:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pmuldq128 (v4si, v4si)
+ 573:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pmulld128 (v4si, v4si)
+ 574:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ptestc128 (v2di, v2di)
+ 575:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ptestnzc128 (v2di, v2di)
+ 576:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ptestz128 (v2di, v2di)
+ 577:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_roundpd (v2df, const int)
+ 578:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_roundps (v4sf, const int)
+ 579:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_roundsd (v2df, v2df, const int)
+ 580:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are available when -msse4.1 is used.
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 583:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)
+ 584:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the insertps machine instruction. 
+ 585:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_vec_ext_v16qi (v16qi, const int)
+ 586:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the pextrb machine instruction. 
+ 587:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)
+ 588:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the pinsrb machine instruction. 
+ 589:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)
+ 590:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the pinsrd machine instruction. 
+ 591:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 592:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 593:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PINSRUD (register v128_u8_t vin, uint32_t ii, const int off)
+ 594:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     __attribute__ ((always_inline));
+ 595:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 596:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PINSRUD (register v128_u8_t vin, uint32_t ii, const int off)
+ 597:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 598:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_vec_set_v4si ((v128_i32_t)vin, ii, off);
+ 599:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 600:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*
+ 601:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2di __builtin_ia32_vec_set_v2di (v2di, long long, const int)
+ 602:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the pinsrq machine instruction in 64bit mode.
+ 603:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are changed to generate new SSE4.1 instructions when -msse4.1 is u
+ 604:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 605:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** float __builtin_ia32_vec_ext_v4sf (v4sf, const int)
+ 606:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the extractps machine instruction. 
+ 607:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_vec_ext_v4si (v4si, const int)
+ 608:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the pextrd machine instruction. 
+ 609:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** long long __builtin_ia32_vec_ext_v2di (v2di, const int)
+ 610:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the pextrq machine instruction in 64bit mode.
+
GAS LISTING /tmp/ccPaCTqg.s 			page 12
+
+
+ 611:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  */
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 614:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 615:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSE4_2__
+ 616:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 617:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* sse4.2
+ 618:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are available when -msse4.2 is used.
+ 619:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** All of them generate the machine instruction that is part of the name.
+ 620:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 621:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_pcmpestrm128 (v16qi, int, v16qi, int, const int)
+ 622:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_pcmpestri128 (v16qi, int, v16qi, int, const int)
+ 623:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_pcmpestria128 (v16qi, int, v16qi, int, const int)
+ 624:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_pcmpestric128 (v16qi, int, v16qi, int, const int)
+ 625:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_pcmpestrio128 (v16qi, int, v16qi, int, const int)
+ 626:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_pcmpestris128 (v16qi, int, v16qi, int, const int)
+ 627:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_pcmpestriz128 (v16qi, int, v16qi, int, const int)
+ 628:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_pcmpistrm128 (v16qi, v16qi, const int)
+ 629:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_pcmpistri128 (v16qi, v16qi, const int)
+ 630:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_pcmpistria128 (v16qi, v16qi, const int)
+ 631:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_pcmpistric128 (v16qi, v16qi, const int)
+ 632:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_pcmpistrio128 (v16qi, v16qi, const int)
+ 633:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_pcmpistris128 (v16qi, v16qi, const int)
+ 634:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_pcmpistriz128 (v16qi, v16qi, const int)
+ 635:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pcmpgtq (v2di, v2di)
+ 636:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are available when -msse4.2 is used.
+ 637:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 638:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** unsigned int __builtin_ia32_crc32qi (unsigned int, unsigned char)
+ 639:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the crc32b machine instruction. 
+ 640:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** unsigned int __builtin_ia32_crc32hi (unsigned int, unsigned short)
+ 641:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the crc32w machine instruction. 
+ 642:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int)
+ 643:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the crc32l machine instruction. 
+ 644:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** unsigned long long __builtin_ia32_crc32di (unsigned long long, unsigned long long)
+ 645:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the crc32q machine instruction.
+ 646:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are changed to generate new SSE4.2 instructions when -msse4.2 is u
+ 647:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 648:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_popcount (unsigned int)
+ 649:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the popcntl machine instruction. 
+ 650:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_popcountl (unsigned long)
+ 651:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the popcntl or popcntq machine instruction, depending on the size of unsigned long. 
+ 652:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_popcountll (unsigned long long)
+ 653:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the popcntq machine instruction.
+ 654:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 655:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 656:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 657:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 658:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 659:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* avx
+ 660:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are available when -mavx is used.
+ 661:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** All of them generate the machine instruction that is part of the name.
+ 662:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 663:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_addpd256 (v4df,v4df)
+ 664:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_addps256 (v8sf,v8sf)
+ 665:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_addsubpd256 (v4df,v4df)
+ 666:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_addsubps256 (v8sf,v8sf)
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_andnpd256 (v4df,v4df)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 13
+
+
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_andnps256 (v8sf,v8sf)
+ 669:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_andpd256 (v4df,v4df)
+ 670:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_andps256 (v8sf,v8sf)
+ 671:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_blendpd256 (v4df,v4df,int)
+ 672:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_blendps256 (v8sf,v8sf,int)
+ 673:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_blendvpd256 (v4df,v4df,v4df)
+ 674:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_blendvps256 (v8sf,v8sf,v8sf)
+ 675:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmppd (v2df,v2df,int)
+ 676:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_cmppd256 (v4df,v4df,int)
+ 677:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_cmpps (v4sf,v4sf,int)
+ 678:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_cmpps256 (v8sf,v8sf,int)
+ 679:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpsd (v2df,v2df,int)
+ 680:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_cmpss (v4sf,v4sf,int)
+ 681:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_cvtdq2pd256 (v4si)
+ 682:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_cvtdq2ps256 (v8si)
+ 683:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_cvtpd2dq256 (v4df)
+ 684:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_cvtpd2ps256 (v4df)
+ 685:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8si __builtin_ia32_cvtps2dq256 (v8sf)
+ 686:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_cvtps2pd256 (v4sf)
+ 687:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_cvttpd2dq256 (v4df)
+ 688:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8si __builtin_ia32_cvttps2dq256 (v8sf)
+ 689:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_divpd256 (v4df,v4df)
+ 690:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_divps256 (v8sf,v8sf)
+ 691:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_dpps256 (v8sf,v8sf,int)
+ 692:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_haddpd256 (v4df,v4df)
+ 693:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_haddps256 (v8sf,v8sf)
+ 694:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_hsubpd256 (v4df,v4df)
+ 695:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_hsubps256 (v8sf,v8sf)
+ 696:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v32qi __builtin_ia32_lddqu256 (pcchar)
+ 697:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v32qi __builtin_ia32_loaddqu256 (pcchar)
+ 698:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_loadupd256 (pcdouble)
+ 699:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_loadups256 (pcfloat)
+ 700:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_maskloadpd (pcv2df,v2df)
+ 701:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_maskloadpd256 (pcv4df,v4df)
+ 702:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_maskloadps (pcv4sf,v4sf)
+ 703:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf)
+ 704:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_maskstorepd (pv2df,v2df,v2df)
+ 705:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df)
+ 706:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf)
+ 707:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf)
+ 708:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_maxpd256 (v4df,v4df)
+ 709:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_maxps256 (v8sf,v8sf)
+ 710:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_minpd256 (v4df,v4df)
+ 711:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_minps256 (v8sf,v8sf)
+ 712:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_movddup256 (v4df)
+ 713:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_movmskpd256 (v4df)
+ 714:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_movmskps256 (v8sf)
+ 715:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_movshdup256 (v8sf)
+ 716:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_movsldup256 (v8sf)
+ 717:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_mulpd256 (v4df,v4df)
+ 718:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_mulps256 (v8sf,v8sf)
+ 719:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_orpd256 (v4df,v4df)
+ 720:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_orps256 (v8sf,v8sf)
+ 721:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_pd_pd256 (v4df)
+ 722:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_pd256_pd (v2df)
+ 723:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_ps_ps256 (v8sf)
+ 724:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_ps256_ps (v4sf)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 14
+
+
+ 725:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ptestc256 (v4di,v4di,ptest)
+ 726:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ptestnzc256 (v4di,v4di,ptest)
+ 727:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ptestz256 (v4di,v4di,ptest)
+ 728:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_rcpps256 (v8sf)
+ 729:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_roundpd256 (v4df,int)
+ 730:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_roundps256 (v8sf,int)
+ 731:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_rsqrtps_nr256 (v8sf)
+ 732:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_rsqrtps256 (v8sf)
+ 733:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_shufpd256 (v4df,v4df,int)
+ 734:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_shufps256 (v8sf,v8sf,int)
+ 735:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_si_si256 (v8si)
+ 736:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8si __builtin_ia32_si256_si (v4si)
+ 737:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_sqrtpd256 (v4df)
+ 738:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_sqrtps_nr256 (v8sf)
+ 739:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_sqrtps256 (v8sf)
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_storedqu256 (pchar,v32qi)
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_storeupd256 (pdouble,v4df)
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_storeups256 (pfloat,v8sf)
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_subpd256 (v4df,v4df)
+ 744:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_subps256 (v8sf,v8sf)
+ 745:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_unpckhpd256 (v4df,v4df)
+ 746:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_unpckhps256 (v8sf,v8sf)
+ 747:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_unpcklpd256 (v4df,v4df)
+ 748:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_unpcklps256 (v8sf,v8sf)
+ 749:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_vbroadcastf128_pd256 (pcv2df)
+ 750:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_vbroadcastf128_ps256 (pcv4sf)
+ 751:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_vbroadcastsd256 (pcdouble)
+ 752:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_vbroadcastss (pcfloat)
+ 753:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_vbroadcastss256 (pcfloat)
+ 754:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_vextractf128_pd256 (v4df,int)
+ 755:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_vextractf128_ps256 (v8sf,int)
+ 756:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_vextractf128_si256 (v8si,int)
+ 757:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_vinsertf128_pd256 (v4df,v2df,int)
+ 758:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_vinsertf128_ps256 (v8sf,v4sf,int)
+ 759:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8si __builtin_ia32_vinsertf128_si256 (v8si,v4si,int)
+ 760:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_vperm2f128_pd256 (v4df,v4df,int)
+ 761:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_vperm2f128_ps256 (v8sf,v8sf,int)
+ 762:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8si __builtin_ia32_vperm2f128_si256 (v8si,v8si,int)
+ 763:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_vpermil2pd (v2df,v2df,v2di,int)
+ 764:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_vpermil2pd256 (v4df,v4df,v4di,int)
+ 765:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_vpermil2ps (v4sf,v4sf,v4si,int)
+ 766:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_vpermil2ps256 (v8sf,v8sf,v8si,int)
+ 767:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_vpermilpd (v2df,int)
+ 768:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_vpermilpd256 (v4df,int)
+ 769:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_vpermilps (v4sf,int)
+ 770:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_vpermilps256 (v8sf,int)
+ 771:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_vpermilvarpd (v2df,v2di)
+ 772:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_vpermilvarpd256 (v4df,v4di)
+ 773:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_vpermilvarps (v4sf,v4si)
+ 774:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_vpermilvarps256 (v8sf,v8si)
+ 775:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_vtestcpd (v2df,v2df,ptest)
+ 776:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_vtestcpd256 (v4df,v4df,ptest)
+ 777:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_vtestcps (v4sf,v4sf,ptest)
+ 778:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_vtestcps256 (v8sf,v8sf,ptest)
+ 779:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_vtestnzcpd (v2df,v2df,ptest)
+ 780:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_vtestnzcpd256 (v4df,v4df,ptest)
+ 781:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_vtestnzcps (v4sf,v4sf,ptest)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 15
+
+
+ 782:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_vtestnzcps256 (v8sf,v8sf,ptest)
+ 783:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_vtestzpd (v2df,v2df,ptest)
+ 784:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_vtestzpd256 (v4df,v4df,ptest)
+ 785:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_vtestzps (v4sf,v4sf,ptest)
+ 786:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_vtestzps256 (v8sf,v8sf,ptest)
+ 787:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_vzeroall (void)
+ 788:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_vzeroupper (void)
+ 789:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4df __builtin_ia32_xorpd256 (v4df,v4df)
+ 790:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8sf __builtin_ia32_xorps256 (v8sf,v8sf)
+ 791:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 792:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 793:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 794:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 795:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 796:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __AES__
+ 797:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*
+ 798:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  * AES-NI instruction set
+ 799:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  * includes PCMUL
+ 800:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  */
+ 801:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 802:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* AES-NI aes
+ 803:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  */
+ 804:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 805:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    
+ 806:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* v2di __builtin_ia32_aesenc128 (v2di, v2di) */
+ 807:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 808:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_AESENC (register v128_u8_t state, register const v128_u8_t round_key)
+ 809:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+  14              		.loc 1 809 0
+  15              		.cfi_startproc
+  16 0000 55       		pushq	%rbp
+  17              	.LCFI0:
+  18              		.cfi_def_cfa_offset 16
+  19 0001 4889E5   		movq	%rsp, %rbp
+  20              		.cfi_offset 6, -16
+  21              	.LCFI1:
+  22              		.cfi_def_cfa_register 6
+ 810:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aesenc128 ((v128_lli_t)state,
+  23              		.loc 1 810 0
+  24 0004 660F38DC 		aesenc	%xmm1, %xmm0
+  24      C1
+ 811:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****                                                (v128_lli_t)round_key);
+ 812:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+  25              		.loc 1 812 0
+  26 0009 C9       		leave
+  27 000a C3       		ret
+  28              		.cfi_endproc
+  29              	.LFE580:
+  30              		.size	op_AESENC, .-op_AESENC
+  31              		.type	op_AESENCLAST, @function
+  32              	op_AESENCLAST:
+  33              	.LFB581:
+ 813:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 814:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 815:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* v2di __builtin_ia32_aesenclast128 (v2di, v2di) */
+ 816:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 817:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_AESENCLAST (register v128_u8_t state,
+
GAS LISTING /tmp/ccPaCTqg.s 			page 16
+
+
+ 818:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****                         register const v128_u8_t round_key)
+ 819:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+  34              		.loc 1 819 0
+  35              		.cfi_startproc
+  36 000b 55       		pushq	%rbp
+  37              	.LCFI2:
+  38              		.cfi_def_cfa_offset 16
+  39 000c 4889E5   		movq	%rsp, %rbp
+  40              		.cfi_offset 6, -16
+  41              	.LCFI3:
+  42              		.cfi_def_cfa_register 6
+ 820:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aesenclast128 ((v128_lli_t)state,
+  43              		.loc 1 820 0
+  44 000f 660F38DD 		aesenclast	%xmm1, %xmm0
+  44      C1
+ 821:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****                                                    (v128_lli_t)round_key);
+ 822:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+  45              		.loc 1 822 0
+  46 0014 C9       		leave
+  47 0015 C3       		ret
+  48              		.cfi_endproc
+  49              	.LFE581:
+  50              		.size	op_AESENCLAST, .-op_AESENCLAST
+  51              		.type	op_AESDEC, @function
+  52              	op_AESDEC:
+  53              	.LFB582:
+ 823:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 824:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 825:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* v2di __builtin_ia32_aesdec128 (v2di, v2di) */
+ 826:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 827:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_AESDEC (register v128_u8_t state, register const v128_u8_t round_key)
+ 828:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+  54              		.loc 1 828 0
+  55              		.cfi_startproc
+  56 0016 55       		pushq	%rbp
+  57              	.LCFI4:
+  58              		.cfi_def_cfa_offset 16
+  59 0017 4889E5   		movq	%rsp, %rbp
+  60              		.cfi_offset 6, -16
+  61              	.LCFI5:
+  62              		.cfi_def_cfa_register 6
+ 829:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aesdec128 ((v128_lli_t)state,
+  63              		.loc 1 829 0
+  64 001a 660F38DE 		aesdec	%xmm1, %xmm0
+  64      C1
+ 830:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****                                                (v128_lli_t)round_key);
+ 831:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+  65              		.loc 1 831 0
+  66 001f C9       		leave
+  67 0020 C3       		ret
+  68              		.cfi_endproc
+  69              	.LFE582:
+  70              		.size	op_AESDEC, .-op_AESDEC
+  71              		.type	op_AESDECLAST, @function
+  72              	op_AESDECLAST:
+  73              	.LFB583:
+ 832:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 17
+
+
+ 833:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 834:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* v2di __builtin_ia32_aesdeclast128 (v2di, v2di) */
+ 835:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 836:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_AESDECLAST (register v128_u8_t state,
+ 837:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****                         register const v128_u8_t round_key)
+ 838:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+  74              		.loc 1 838 0
+  75              		.cfi_startproc
+  76 0021 55       		pushq	%rbp
+  77              	.LCFI6:
+  78              		.cfi_def_cfa_offset 16
+  79 0022 4889E5   		movq	%rsp, %rbp
+  80              		.cfi_offset 6, -16
+  81              	.LCFI7:
+  82              		.cfi_def_cfa_register 6
+ 839:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aesdeclast128 ((v128_lli_t)state,
+  83              		.loc 1 839 0
+  84 0025 660F38DF 		aesdeclast	%xmm1, %xmm0
+  84      C1
+ 840:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****                                                    (v128_lli_t)round_key);
+ 841:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+  85              		.loc 1 841 0
+  86 002a C9       		leave
+  87 002b C3       		ret
+  88              		.cfi_endproc
+  89              	.LFE583:
+  90              		.size	op_AESDECLAST, .-op_AESDECLAST
+  91              		.type	op_AESIMC, @function
+  92              	op_AESIMC:
+  93              	.LFB585:
+ 842:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 843:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 844:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* v2di __builtin_ia32_aeskeygenassist128 (v2di, const int) */
+ 845:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 846:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_AESKEYGENASSIST (register const v128_u8_t round_key,
+ 847:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****                              const int rcon ) __attribute__ ((always_inline));
+ 848:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 849:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_AESKEYGENASSIST (register const v128_u8_t round_key,
+ 850:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****                              const int rcon )
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 853:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****                                                          rcon);
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 855:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 856:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* v2di __builtin_ia32_aesimc128 (v2di) */
+ 858:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_AESIMC (register const v128_u8_t round_key)
+ 860:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+  94              		.loc 1 860 0
+  95              		.cfi_startproc
+  96 002c 55       		pushq	%rbp
+  97              	.LCFI8:
+  98              		.cfi_def_cfa_offset 16
+  99 002d 4889E5   		movq	%rsp, %rbp
+ 100              		.cfi_offset 6, -16
+ 101              	.LCFI9:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 18
+
+
+ 102              		.cfi_def_cfa_register 6
+ 861:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aesimc128 ((v128_lli_t)round_key);
+ 103              		.loc 1 861 0
+ 104 0030 660F38DB 		aesimc	%xmm0, %xmm0
+ 104      C0
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 105              		.loc 1 862 0
+ 106 0035 C9       		leave
+ 107 0036 C3       		ret
+ 108              		.cfi_endproc
+ 109              	.LFE585:
+ 110              		.size	op_AESIMC, .-op_AESIMC
+ 111              		.type	bswap_32, @function
+ 112              	bswap_32:
+ 113              	.LFB602:
+ 114              		.file 2 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h"
+   1:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** /*===========================================================================
+   2:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+   3:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *                            PUBLIC DOMAIN NOTICE
+   4:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *               National Center for Biotechnology Information
+   5:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+   6:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  This software/database is a "United States Government Work" under the
+   7:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  terms of the United States Copyright Act.  It was written as part of
+   8:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  the author's official duties as a United States Government employee and
+   9:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  thus cannot be copyrighted.  This software/database is freely available
+  10:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  to the public for use. The National Library of Medicine and the U.S.
+  11:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  Government have not placed any restriction on its use or reproduction.
+  12:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+  13:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  Although all reasonable efforts have been taken to ensure the accuracy
+  14:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  and reliability of the software and data, the NLM and the U.S.
+  15:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  Government do not and cannot warrant the performance or results that
+  16:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  may be obtained by using this software or data. The NLM and the U.S.
+  17:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  Government disclaim all warranties, express or implied, including
+  18:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  warranties of performance, merchantability or fitness for any particular
+  19:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  purpose.
+  20:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+  21:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  Please cite the author in any work or product based on this material.
+  22:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+  23:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * ===========================================================================
+  24:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+  25:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** */
+  26:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** 
+  27:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #ifndef _h_byteswap_
+  28:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #define _h_byteswap_
+  29:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** 
+  30:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #ifdef _BYTESWAP_H
+  31:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #warning "GNU byteswap.h being used"
+  32:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #else
+  33:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #define _BYTESWAP_H	1234
+  34:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** 
+  35:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #include <stdint.h>
+  36:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** 
+  37:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #ifdef __cplusplus
+  38:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** extern "C" {
+  39:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #endif
+  40:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** 
+  41:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** /* perform single instruction byte swap */
+
GAS LISTING /tmp/ccPaCTqg.s 			page 19
+
+
+  42:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** static __inline__ uint16_t bswap_16 ( uint16_t i )
+  43:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** {
+  44:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     register uint16_t rtn;
+  45:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     __asm__
+  46:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     (
+  47:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         "rorw $8, %w0"
+  48:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         : "=r" ( rtn )
+  49:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         : "0" ( i )
+  50:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         : "cc"
+  51:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     );
+  52:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     return rtn;
+  53:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** }
+  54:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** 
+  55:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** /* perform single instruction byte swap */
+  56:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** static __inline__ uint32_t bswap_32 ( uint32_t i )
+  57:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** {
+ 115              		.loc 2 57 0
+ 116              		.cfi_startproc
+ 117 0037 55       		pushq	%rbp
+ 118              	.LCFI10:
+ 119              		.cfi_def_cfa_offset 16
+ 120 0038 4889E5   		movq	%rsp, %rbp
+ 121              		.cfi_offset 6, -16
+ 122              	.LCFI11:
+ 123              		.cfi_def_cfa_register 6
+ 124 003b 53       		pushq	%rbx
+ 125 003c 897DF4   		movl	%edi, -12(%rbp)
+  58:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     register uint32_t rtn;
+  59:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     __asm__
+ 126              		.loc 2 59 0
+ 127 003f 8B45F4   		movl	-12(%rbp), %eax
+ 128 0042 89C3     		movl	%eax, %ebx
+ 129              		.cfi_offset 3, -24
+ 130              	#APP
+ 131              	# 59 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h" 1
+  60              	    (
+  61:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         "bswap %0"
+  62:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         : "=r" ( rtn )
+  63:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         : "0" ( i )
+  64:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         : "cc"
+  65:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     );
+  66:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     return rtn;
+ 132              		bswap %ebx
+ 133              	# 0 "" 2
+ 134              		.loc 2 66 0
+ 135              	#NO_APP
+ 136 0046 89D8     		movl	%ebx, %eax
+  67:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** }
+ 137              		.loc 2 67 0
+ 138 0048 5B       		popq	%rbx
+ 139 0049 C9       		leave
+ 140 004a C3       		ret
+ 141              		.cfi_endproc
+ 142              	.LFE602:
+ 143              		.size	bswap_32, .-bswap_32
+ 144              		.section	.rodata
+ 145              		.align 16
+
GAS LISTING /tmp/ccPaCTqg.s 			page 20
+
+
+ 146              		.type	vec_00, @object
+ 147              		.size	vec_00, 16
+ 148              	vec_00:
+ 149 0000 00000000 		.zero	16
+ 149      00000000 
+ 149      00000000 
+ 149      00000000 
+ 150              		.align 16
+ 151              		.type	vec_01, @object
+ 152              		.size	vec_01, 16
+ 153              	vec_01:
+ 154 0010 01       		.byte	1
+ 155 0011 01       		.byte	1
+ 156 0012 01       		.byte	1
+ 157 0013 01       		.byte	1
+ 158 0014 01       		.byte	1
+ 159 0015 01       		.byte	1
+ 160 0016 01       		.byte	1
+ 161 0017 01       		.byte	1
+ 162 0018 01       		.byte	1
+ 163 0019 01       		.byte	1
+ 164 001a 01       		.byte	1
+ 165 001b 01       		.byte	1
+ 166 001c 01       		.byte	1
+ 167 001d 01       		.byte	1
+ 168 001e 01       		.byte	1
+ 169 001f 01       		.byte	1
+ 170              		.align 16
+ 171              		.type	vec_0F, @object
+ 172              		.size	vec_0F, 16
+ 173              	vec_0F:
+ 174 0020 0F       		.byte	15
+ 175 0021 0F       		.byte	15
+ 176 0022 0F       		.byte	15
+ 177 0023 0F       		.byte	15
+ 178 0024 0F       		.byte	15
+ 179 0025 0F       		.byte	15
+ 180 0026 0F       		.byte	15
+ 181 0027 0F       		.byte	15
+ 182 0028 0F       		.byte	15
+ 183 0029 0F       		.byte	15
+ 184 002a 0F       		.byte	15
+ 185 002b 0F       		.byte	15
+ 186 002c 0F       		.byte	15
+ 187 002d 0F       		.byte	15
+ 188 002e 0F       		.byte	15
+ 189 002f 0F       		.byte	15
+ 190              		.align 16
+ 191              		.type	vec_10, @object
+ 192              		.size	vec_10, 16
+ 193              	vec_10:
+ 194 0030 10       		.byte	16
+ 195 0031 10       		.byte	16
+ 196 0032 10       		.byte	16
+ 197 0033 10       		.byte	16
+ 198 0034 10       		.byte	16
+ 199 0035 10       		.byte	16
+
GAS LISTING /tmp/ccPaCTqg.s 			page 21
+
+
+ 200 0036 10       		.byte	16
+ 201 0037 10       		.byte	16
+ 202 0038 10       		.byte	16
+ 203 0039 10       		.byte	16
+ 204 003a 10       		.byte	16
+ 205 003b 10       		.byte	16
+ 206 003c 10       		.byte	16
+ 207 003d 10       		.byte	16
+ 208 003e 10       		.byte	16
+ 209 003f 10       		.byte	16
+ 210              		.align 32
+ 211              		.type	KAESBlockCipherVecAesNiRijndaelSBox, @object
+ 212              		.size	KAESBlockCipherVecAesNiRijndaelSBox, 256
+ 213              	KAESBlockCipherVecAesNiRijndaelSBox:
+ 214 0040 63       		.byte	99
+ 215 0041 7C       		.byte	124
+ 216 0042 77       		.byte	119
+ 217 0043 7B       		.byte	123
+ 218 0044 F2       		.byte	-14
+ 219 0045 6B       		.byte	107
+ 220 0046 6F       		.byte	111
+ 221 0047 C5       		.byte	-59
+ 222 0048 30       		.byte	48
+ 223 0049 01       		.byte	1
+ 224 004a 67       		.byte	103
+ 225 004b 2B       		.byte	43
+ 226 004c FE       		.byte	-2
+ 227 004d D7       		.byte	-41
+ 228 004e AB       		.byte	-85
+ 229 004f 76       		.byte	118
+ 230 0050 CA       		.byte	-54
+ 231 0051 82       		.byte	-126
+ 232 0052 C9       		.byte	-55
+ 233 0053 7D       		.byte	125
+ 234 0054 FA       		.byte	-6
+ 235 0055 59       		.byte	89
+ 236 0056 47       		.byte	71
+ 237 0057 F0       		.byte	-16
+ 238 0058 AD       		.byte	-83
+ 239 0059 D4       		.byte	-44
+ 240 005a A2       		.byte	-94
+ 241 005b AF       		.byte	-81
+ 242 005c 9C       		.byte	-100
+ 243 005d A4       		.byte	-92
+ 244 005e 72       		.byte	114
+ 245 005f C0       		.byte	-64
+ 246 0060 B7       		.byte	-73
+ 247 0061 FD       		.byte	-3
+ 248 0062 93       		.byte	-109
+ 249 0063 26       		.byte	38
+ 250 0064 36       		.byte	54
+ 251 0065 3F       		.byte	63
+ 252 0066 F7       		.byte	-9
+ 253 0067 CC       		.byte	-52
+ 254 0068 34       		.byte	52
+ 255 0069 A5       		.byte	-91
+ 256 006a E5       		.byte	-27
+
GAS LISTING /tmp/ccPaCTqg.s 			page 22
+
+
+ 257 006b F1       		.byte	-15
+ 258 006c 71       		.byte	113
+ 259 006d D8       		.byte	-40
+ 260 006e 31       		.byte	49
+ 261 006f 15       		.byte	21
+ 262 0070 04       		.byte	4
+ 263 0071 C7       		.byte	-57
+ 264 0072 23       		.byte	35
+ 265 0073 C3       		.byte	-61
+ 266 0074 18       		.byte	24
+ 267 0075 96       		.byte	-106
+ 268 0076 05       		.byte	5
+ 269 0077 9A       		.byte	-102
+ 270 0078 07       		.byte	7
+ 271 0079 12       		.byte	18
+ 272 007a 80       		.byte	-128
+ 273 007b E2       		.byte	-30
+ 274 007c EB       		.byte	-21
+ 275 007d 27       		.byte	39
+ 276 007e B2       		.byte	-78
+ 277 007f 75       		.byte	117
+ 278 0080 09       		.byte	9
+ 279 0081 83       		.byte	-125
+ 280 0082 2C       		.byte	44
+ 281 0083 1A       		.byte	26
+ 282 0084 1B       		.byte	27
+ 283 0085 6E       		.byte	110
+ 284 0086 5A       		.byte	90
+ 285 0087 A0       		.byte	-96
+ 286 0088 52       		.byte	82
+ 287 0089 3B       		.byte	59
+ 288 008a D6       		.byte	-42
+ 289 008b B3       		.byte	-77
+ 290 008c 29       		.byte	41
+ 291 008d E3       		.byte	-29
+ 292 008e 2F       		.byte	47
+ 293 008f 84       		.byte	-124
+ 294 0090 53       		.byte	83
+ 295 0091 D1       		.byte	-47
+ 296 0092 00       		.byte	0
+ 297 0093 ED       		.byte	-19
+ 298 0094 20       		.byte	32
+ 299 0095 FC       		.byte	-4
+ 300 0096 B1       		.byte	-79
+ 301 0097 5B       		.byte	91
+ 302 0098 6A       		.byte	106
+ 303 0099 CB       		.byte	-53
+ 304 009a BE       		.byte	-66
+ 305 009b 39       		.byte	57
+ 306 009c 4A       		.byte	74
+ 307 009d 4C       		.byte	76
+ 308 009e 58       		.byte	88
+ 309 009f CF       		.byte	-49
+ 310 00a0 D0       		.byte	-48
+ 311 00a1 EF       		.byte	-17
+ 312 00a2 AA       		.byte	-86
+ 313 00a3 FB       		.byte	-5
+
GAS LISTING /tmp/ccPaCTqg.s 			page 23
+
+
+ 314 00a4 43       		.byte	67
+ 315 00a5 4D       		.byte	77
+ 316 00a6 33       		.byte	51
+ 317 00a7 85       		.byte	-123
+ 318 00a8 45       		.byte	69
+ 319 00a9 F9       		.byte	-7
+ 320 00aa 02       		.byte	2
+ 321 00ab 7F       		.byte	127
+ 322 00ac 50       		.byte	80
+ 323 00ad 3C       		.byte	60
+ 324 00ae 9F       		.byte	-97
+ 325 00af A8       		.byte	-88
+ 326 00b0 51       		.byte	81
+ 327 00b1 A3       		.byte	-93
+ 328 00b2 40       		.byte	64
+ 329 00b3 8F       		.byte	-113
+ 330 00b4 92       		.byte	-110
+ 331 00b5 9D       		.byte	-99
+ 332 00b6 38       		.byte	56
+ 333 00b7 F5       		.byte	-11
+ 334 00b8 BC       		.byte	-68
+ 335 00b9 B6       		.byte	-74
+ 336 00ba DA       		.byte	-38
+ 337 00bb 21       		.byte	33
+ 338 00bc 10       		.byte	16
+ 339 00bd FF       		.byte	-1
+ 340 00be F3       		.byte	-13
+ 341 00bf D2       		.byte	-46
+ 342 00c0 CD       		.byte	-51
+ 343 00c1 0C       		.byte	12
+ 344 00c2 13       		.byte	19
+ 345 00c3 EC       		.byte	-20
+ 346 00c4 5F       		.byte	95
+ 347 00c5 97       		.byte	-105
+ 348 00c6 44       		.byte	68
+ 349 00c7 17       		.byte	23
+ 350 00c8 C4       		.byte	-60
+ 351 00c9 A7       		.byte	-89
+ 352 00ca 7E       		.byte	126
+ 353 00cb 3D       		.byte	61
+ 354 00cc 64       		.byte	100
+ 355 00cd 5D       		.byte	93
+ 356 00ce 19       		.byte	25
+ 357 00cf 73       		.byte	115
+ 358 00d0 60       		.byte	96
+ 359 00d1 81       		.byte	-127
+ 360 00d2 4F       		.byte	79
+ 361 00d3 DC       		.byte	-36
+ 362 00d4 22       		.byte	34
+ 363 00d5 2A       		.byte	42
+ 364 00d6 90       		.byte	-112
+ 365 00d7 88       		.byte	-120
+ 366 00d8 46       		.byte	70
+ 367 00d9 EE       		.byte	-18
+ 368 00da B8       		.byte	-72
+ 369 00db 14       		.byte	20
+ 370 00dc DE       		.byte	-34
+
GAS LISTING /tmp/ccPaCTqg.s 			page 24
+
+
+ 371 00dd 5E       		.byte	94
+ 372 00de 0B       		.byte	11
+ 373 00df DB       		.byte	-37
+ 374 00e0 E0       		.byte	-32
+ 375 00e1 32       		.byte	50
+ 376 00e2 3A       		.byte	58
+ 377 00e3 0A       		.byte	10
+ 378 00e4 49       		.byte	73
+ 379 00e5 06       		.byte	6
+ 380 00e6 24       		.byte	36
+ 381 00e7 5C       		.byte	92
+ 382 00e8 C2       		.byte	-62
+ 383 00e9 D3       		.byte	-45
+ 384 00ea AC       		.byte	-84
+ 385 00eb 62       		.byte	98
+ 386 00ec 91       		.byte	-111
+ 387 00ed 95       		.byte	-107
+ 388 00ee E4       		.byte	-28
+ 389 00ef 79       		.byte	121
+ 390 00f0 E7       		.byte	-25
+ 391 00f1 C8       		.byte	-56
+ 392 00f2 37       		.byte	55
+ 393 00f3 6D       		.byte	109
+ 394 00f4 8D       		.byte	-115
+ 395 00f5 D5       		.byte	-43
+ 396 00f6 4E       		.byte	78
+ 397 00f7 A9       		.byte	-87
+ 398 00f8 6C       		.byte	108
+ 399 00f9 56       		.byte	86
+ 400 00fa F4       		.byte	-12
+ 401 00fb EA       		.byte	-22
+ 402 00fc 65       		.byte	101
+ 403 00fd 7A       		.byte	122
+ 404 00fe AE       		.byte	-82
+ 405 00ff 08       		.byte	8
+ 406 0100 BA       		.byte	-70
+ 407 0101 78       		.byte	120
+ 408 0102 25       		.byte	37
+ 409 0103 2E       		.byte	46
+ 410 0104 1C       		.byte	28
+ 411 0105 A6       		.byte	-90
+ 412 0106 B4       		.byte	-76
+ 413 0107 C6       		.byte	-58
+ 414 0108 E8       		.byte	-24
+ 415 0109 DD       		.byte	-35
+ 416 010a 74       		.byte	116
+ 417 010b 1F       		.byte	31
+ 418 010c 4B       		.byte	75
+ 419 010d BD       		.byte	-67
+ 420 010e 8B       		.byte	-117
+ 421 010f 8A       		.byte	-118
+ 422 0110 70       		.byte	112
+ 423 0111 3E       		.byte	62
+ 424 0112 B5       		.byte	-75
+ 425 0113 66       		.byte	102
+ 426 0114 48       		.byte	72
+ 427 0115 03       		.byte	3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 25
+
+
+ 428 0116 F6       		.byte	-10
+ 429 0117 0E       		.byte	14
+ 430 0118 61       		.byte	97
+ 431 0119 35       		.byte	53
+ 432 011a 57       		.byte	87
+ 433 011b B9       		.byte	-71
+ 434 011c 86       		.byte	-122
+ 435 011d C1       		.byte	-63
+ 436 011e 1D       		.byte	29
+ 437 011f 9E       		.byte	-98
+ 438 0120 E1       		.byte	-31
+ 439 0121 F8       		.byte	-8
+ 440 0122 98       		.byte	-104
+ 441 0123 11       		.byte	17
+ 442 0124 69       		.byte	105
+ 443 0125 D9       		.byte	-39
+ 444 0126 8E       		.byte	-114
+ 445 0127 94       		.byte	-108
+ 446 0128 9B       		.byte	-101
+ 447 0129 1E       		.byte	30
+ 448 012a 87       		.byte	-121
+ 449 012b E9       		.byte	-23
+ 450 012c CE       		.byte	-50
+ 451 012d 55       		.byte	85
+ 452 012e 28       		.byte	40
+ 453 012f DF       		.byte	-33
+ 454 0130 8C       		.byte	-116
+ 455 0131 A1       		.byte	-95
+ 456 0132 89       		.byte	-119
+ 457 0133 0D       		.byte	13
+ 458 0134 BF       		.byte	-65
+ 459 0135 E6       		.byte	-26
+ 460 0136 42       		.byte	66
+ 461 0137 68       		.byte	104
+ 462 0138 41       		.byte	65
+ 463 0139 99       		.byte	-103
+ 464 013a 2D       		.byte	45
+ 465 013b 0F       		.byte	15
+ 466 013c B0       		.byte	-80
+ 467 013d 54       		.byte	84
+ 468 013e BB       		.byte	-69
+ 469 013f 16       		.byte	22
+ 470              		.align 32
+ 471              		.type	KAESBlockCipherVecAesNiRijndaelSBoxV, @object
+ 472              		.size	KAESBlockCipherVecAesNiRijndaelSBoxV, 256
+ 473              	KAESBlockCipherVecAesNiRijndaelSBoxV:
+ 474 0140 63       		.byte	99
+ 475 0141 7C       		.byte	124
+ 476 0142 77       		.byte	119
+ 477 0143 7B       		.byte	123
+ 478 0144 F2       		.byte	-14
+ 479 0145 6B       		.byte	107
+ 480 0146 6F       		.byte	111
+ 481 0147 C5       		.byte	-59
+ 482 0148 30       		.byte	48
+ 483 0149 01       		.byte	1
+ 484 014a 67       		.byte	103
+
GAS LISTING /tmp/ccPaCTqg.s 			page 26
+
+
+ 485 014b 2B       		.byte	43
+ 486 014c FE       		.byte	-2
+ 487 014d D7       		.byte	-41
+ 488 014e AB       		.byte	-85
+ 489 014f 76       		.byte	118
+ 490 0150 CA       		.byte	-54
+ 491 0151 82       		.byte	-126
+ 492 0152 C9       		.byte	-55
+ 493 0153 7D       		.byte	125
+ 494 0154 FA       		.byte	-6
+ 495 0155 59       		.byte	89
+ 496 0156 47       		.byte	71
+ 497 0157 F0       		.byte	-16
+ 498 0158 AD       		.byte	-83
+ 499 0159 D4       		.byte	-44
+ 500 015a A2       		.byte	-94
+ 501 015b AF       		.byte	-81
+ 502 015c 9C       		.byte	-100
+ 503 015d A4       		.byte	-92
+ 504 015e 72       		.byte	114
+ 505 015f C0       		.byte	-64
+ 506 0160 B7       		.byte	-73
+ 507 0161 FD       		.byte	-3
+ 508 0162 93       		.byte	-109
+ 509 0163 26       		.byte	38
+ 510 0164 36       		.byte	54
+ 511 0165 3F       		.byte	63
+ 512 0166 F7       		.byte	-9
+ 513 0167 CC       		.byte	-52
+ 514 0168 34       		.byte	52
+ 515 0169 A5       		.byte	-91
+ 516 016a E5       		.byte	-27
+ 517 016b F1       		.byte	-15
+ 518 016c 71       		.byte	113
+ 519 016d D8       		.byte	-40
+ 520 016e 31       		.byte	49
+ 521 016f 15       		.byte	21
+ 522 0170 04       		.byte	4
+ 523 0171 C7       		.byte	-57
+ 524 0172 23       		.byte	35
+ 525 0173 C3       		.byte	-61
+ 526 0174 18       		.byte	24
+ 527 0175 96       		.byte	-106
+ 528 0176 05       		.byte	5
+ 529 0177 9A       		.byte	-102
+ 530 0178 07       		.byte	7
+ 531 0179 12       		.byte	18
+ 532 017a 80       		.byte	-128
+ 533 017b E2       		.byte	-30
+ 534 017c EB       		.byte	-21
+ 535 017d 27       		.byte	39
+ 536 017e B2       		.byte	-78
+ 537 017f 75       		.byte	117
+ 538 0180 09       		.byte	9
+ 539 0181 83       		.byte	-125
+ 540 0182 2C       		.byte	44
+ 541 0183 1A       		.byte	26
+
GAS LISTING /tmp/ccPaCTqg.s 			page 27
+
+
+ 542 0184 1B       		.byte	27
+ 543 0185 6E       		.byte	110
+ 544 0186 5A       		.byte	90
+ 545 0187 A0       		.byte	-96
+ 546 0188 52       		.byte	82
+ 547 0189 3B       		.byte	59
+ 548 018a D6       		.byte	-42
+ 549 018b B3       		.byte	-77
+ 550 018c 29       		.byte	41
+ 551 018d E3       		.byte	-29
+ 552 018e 2F       		.byte	47
+ 553 018f 84       		.byte	-124
+ 554 0190 53       		.byte	83
+ 555 0191 D1       		.byte	-47
+ 556 0192 00       		.byte	0
+ 557 0193 ED       		.byte	-19
+ 558 0194 20       		.byte	32
+ 559 0195 FC       		.byte	-4
+ 560 0196 B1       		.byte	-79
+ 561 0197 5B       		.byte	91
+ 562 0198 6A       		.byte	106
+ 563 0199 CB       		.byte	-53
+ 564 019a BE       		.byte	-66
+ 565 019b 39       		.byte	57
+ 566 019c 4A       		.byte	74
+ 567 019d 4C       		.byte	76
+ 568 019e 58       		.byte	88
+ 569 019f CF       		.byte	-49
+ 570 01a0 D0       		.byte	-48
+ 571 01a1 EF       		.byte	-17
+ 572 01a2 AA       		.byte	-86
+ 573 01a3 FB       		.byte	-5
+ 574 01a4 43       		.byte	67
+ 575 01a5 4D       		.byte	77
+ 576 01a6 33       		.byte	51
+ 577 01a7 85       		.byte	-123
+ 578 01a8 45       		.byte	69
+ 579 01a9 F9       		.byte	-7
+ 580 01aa 02       		.byte	2
+ 581 01ab 7F       		.byte	127
+ 582 01ac 50       		.byte	80
+ 583 01ad 3C       		.byte	60
+ 584 01ae 9F       		.byte	-97
+ 585 01af A8       		.byte	-88
+ 586 01b0 51       		.byte	81
+ 587 01b1 A3       		.byte	-93
+ 588 01b2 40       		.byte	64
+ 589 01b3 8F       		.byte	-113
+ 590 01b4 92       		.byte	-110
+ 591 01b5 9D       		.byte	-99
+ 592 01b6 38       		.byte	56
+ 593 01b7 F5       		.byte	-11
+ 594 01b8 BC       		.byte	-68
+ 595 01b9 B6       		.byte	-74
+ 596 01ba DA       		.byte	-38
+ 597 01bb 21       		.byte	33
+ 598 01bc 10       		.byte	16
+
GAS LISTING /tmp/ccPaCTqg.s 			page 28
+
+
+ 599 01bd FF       		.byte	-1
+ 600 01be F3       		.byte	-13
+ 601 01bf D2       		.byte	-46
+ 602 01c0 CD       		.byte	-51
+ 603 01c1 0C       		.byte	12
+ 604 01c2 13       		.byte	19
+ 605 01c3 EC       		.byte	-20
+ 606 01c4 5F       		.byte	95
+ 607 01c5 97       		.byte	-105
+ 608 01c6 44       		.byte	68
+ 609 01c7 17       		.byte	23
+ 610 01c8 C4       		.byte	-60
+ 611 01c9 A7       		.byte	-89
+ 612 01ca 7E       		.byte	126
+ 613 01cb 3D       		.byte	61
+ 614 01cc 64       		.byte	100
+ 615 01cd 5D       		.byte	93
+ 616 01ce 19       		.byte	25
+ 617 01cf 73       		.byte	115
+ 618 01d0 60       		.byte	96
+ 619 01d1 81       		.byte	-127
+ 620 01d2 4F       		.byte	79
+ 621 01d3 DC       		.byte	-36
+ 622 01d4 22       		.byte	34
+ 623 01d5 2A       		.byte	42
+ 624 01d6 90       		.byte	-112
+ 625 01d7 88       		.byte	-120
+ 626 01d8 46       		.byte	70
+ 627 01d9 EE       		.byte	-18
+ 628 01da B8       		.byte	-72
+ 629 01db 14       		.byte	20
+ 630 01dc DE       		.byte	-34
+ 631 01dd 5E       		.byte	94
+ 632 01de 0B       		.byte	11
+ 633 01df DB       		.byte	-37
+ 634 01e0 E0       		.byte	-32
+ 635 01e1 32       		.byte	50
+ 636 01e2 3A       		.byte	58
+ 637 01e3 0A       		.byte	10
+ 638 01e4 49       		.byte	73
+ 639 01e5 06       		.byte	6
+ 640 01e6 24       		.byte	36
+ 641 01e7 5C       		.byte	92
+ 642 01e8 C2       		.byte	-62
+ 643 01e9 D3       		.byte	-45
+ 644 01ea AC       		.byte	-84
+ 645 01eb 62       		.byte	98
+ 646 01ec 91       		.byte	-111
+ 647 01ed 95       		.byte	-107
+ 648 01ee E4       		.byte	-28
+ 649 01ef 79       		.byte	121
+ 650 01f0 E7       		.byte	-25
+ 651 01f1 C8       		.byte	-56
+ 652 01f2 37       		.byte	55
+ 653 01f3 6D       		.byte	109
+ 654 01f4 8D       		.byte	-115
+ 655 01f5 D5       		.byte	-43
+
GAS LISTING /tmp/ccPaCTqg.s 			page 29
+
+
+ 656 01f6 4E       		.byte	78
+ 657 01f7 A9       		.byte	-87
+ 658 01f8 6C       		.byte	108
+ 659 01f9 56       		.byte	86
+ 660 01fa F4       		.byte	-12
+ 661 01fb EA       		.byte	-22
+ 662 01fc 65       		.byte	101
+ 663 01fd 7A       		.byte	122
+ 664 01fe AE       		.byte	-82
+ 665 01ff 08       		.byte	8
+ 666 0200 BA       		.byte	-70
+ 667 0201 78       		.byte	120
+ 668 0202 25       		.byte	37
+ 669 0203 2E       		.byte	46
+ 670 0204 1C       		.byte	28
+ 671 0205 A6       		.byte	-90
+ 672 0206 B4       		.byte	-76
+ 673 0207 C6       		.byte	-58
+ 674 0208 E8       		.byte	-24
+ 675 0209 DD       		.byte	-35
+ 676 020a 74       		.byte	116
+ 677 020b 1F       		.byte	31
+ 678 020c 4B       		.byte	75
+ 679 020d BD       		.byte	-67
+ 680 020e 8B       		.byte	-117
+ 681 020f 8A       		.byte	-118
+ 682 0210 70       		.byte	112
+ 683 0211 3E       		.byte	62
+ 684 0212 B5       		.byte	-75
+ 685 0213 66       		.byte	102
+ 686 0214 48       		.byte	72
+ 687 0215 03       		.byte	3
+ 688 0216 F6       		.byte	-10
+ 689 0217 0E       		.byte	14
+ 690 0218 61       		.byte	97
+ 691 0219 35       		.byte	53
+ 692 021a 57       		.byte	87
+ 693 021b B9       		.byte	-71
+ 694 021c 86       		.byte	-122
+ 695 021d C1       		.byte	-63
+ 696 021e 1D       		.byte	29
+ 697 021f 9E       		.byte	-98
+ 698 0220 E1       		.byte	-31
+ 699 0221 F8       		.byte	-8
+ 700 0222 98       		.byte	-104
+ 701 0223 11       		.byte	17
+ 702 0224 69       		.byte	105
+ 703 0225 D9       		.byte	-39
+ 704 0226 8E       		.byte	-114
+ 705 0227 94       		.byte	-108
+ 706 0228 9B       		.byte	-101
+ 707 0229 1E       		.byte	30
+ 708 022a 87       		.byte	-121
+ 709 022b E9       		.byte	-23
+ 710 022c CE       		.byte	-50
+ 711 022d 55       		.byte	85
+ 712 022e 28       		.byte	40
+
GAS LISTING /tmp/ccPaCTqg.s 			page 30
+
+
+ 713 022f DF       		.byte	-33
+ 714 0230 8C       		.byte	-116
+ 715 0231 A1       		.byte	-95
+ 716 0232 89       		.byte	-119
+ 717 0233 0D       		.byte	13
+ 718 0234 BF       		.byte	-65
+ 719 0235 E6       		.byte	-26
+ 720 0236 42       		.byte	66
+ 721 0237 68       		.byte	104
+ 722 0238 41       		.byte	65
+ 723 0239 99       		.byte	-103
+ 724 023a 2D       		.byte	45
+ 725 023b 0F       		.byte	15
+ 726 023c B0       		.byte	-80
+ 727 023d 54       		.byte	84
+ 728 023e BB       		.byte	-69
+ 729 023f 16       		.byte	22
+ 730              		.align 32
+ 731              		.type	KAESBlockCipherVecAesNiRijndaelInvSBoxV, @object
+ 732              		.size	KAESBlockCipherVecAesNiRijndaelInvSBoxV, 256
+ 733              	KAESBlockCipherVecAesNiRijndaelInvSBoxV:
+ 734 0240 52       		.byte	82
+ 735 0241 09       		.byte	9
+ 736 0242 6A       		.byte	106
+ 737 0243 D5       		.byte	-43
+ 738 0244 30       		.byte	48
+ 739 0245 36       		.byte	54
+ 740 0246 A5       		.byte	-91
+ 741 0247 38       		.byte	56
+ 742 0248 BF       		.byte	-65
+ 743 0249 40       		.byte	64
+ 744 024a A3       		.byte	-93
+ 745 024b 9E       		.byte	-98
+ 746 024c 81       		.byte	-127
+ 747 024d F3       		.byte	-13
+ 748 024e D7       		.byte	-41
+ 749 024f FB       		.byte	-5
+ 750 0250 7C       		.byte	124
+ 751 0251 E3       		.byte	-29
+ 752 0252 39       		.byte	57
+ 753 0253 82       		.byte	-126
+ 754 0254 9B       		.byte	-101
+ 755 0255 2F       		.byte	47
+ 756 0256 FF       		.byte	-1
+ 757 0257 87       		.byte	-121
+ 758 0258 34       		.byte	52
+ 759 0259 8E       		.byte	-114
+ 760 025a 43       		.byte	67
+ 761 025b 44       		.byte	68
+ 762 025c C4       		.byte	-60
+ 763 025d DE       		.byte	-34
+ 764 025e E9       		.byte	-23
+ 765 025f CB       		.byte	-53
+ 766 0260 54       		.byte	84
+ 767 0261 7B       		.byte	123
+ 768 0262 94       		.byte	-108
+ 769 0263 32       		.byte	50
+
GAS LISTING /tmp/ccPaCTqg.s 			page 31
+
+
+ 770 0264 A6       		.byte	-90
+ 771 0265 C2       		.byte	-62
+ 772 0266 23       		.byte	35
+ 773 0267 3D       		.byte	61
+ 774 0268 EE       		.byte	-18
+ 775 0269 4C       		.byte	76
+ 776 026a 95       		.byte	-107
+ 777 026b 0B       		.byte	11
+ 778 026c 42       		.byte	66
+ 779 026d FA       		.byte	-6
+ 780 026e C3       		.byte	-61
+ 781 026f 4E       		.byte	78
+ 782 0270 08       		.byte	8
+ 783 0271 2E       		.byte	46
+ 784 0272 A1       		.byte	-95
+ 785 0273 66       		.byte	102
+ 786 0274 28       		.byte	40
+ 787 0275 D9       		.byte	-39
+ 788 0276 24       		.byte	36
+ 789 0277 B2       		.byte	-78
+ 790 0278 76       		.byte	118
+ 791 0279 5B       		.byte	91
+ 792 027a A2       		.byte	-94
+ 793 027b 49       		.byte	73
+ 794 027c 6D       		.byte	109
+ 795 027d 8B       		.byte	-117
+ 796 027e D1       		.byte	-47
+ 797 027f 25       		.byte	37
+ 798 0280 72       		.byte	114
+ 799 0281 F8       		.byte	-8
+ 800 0282 F6       		.byte	-10
+ 801 0283 64       		.byte	100
+ 802 0284 86       		.byte	-122
+ 803 0285 68       		.byte	104
+ 804 0286 98       		.byte	-104
+ 805 0287 16       		.byte	22
+ 806 0288 D4       		.byte	-44
+ 807 0289 A4       		.byte	-92
+ 808 028a 5C       		.byte	92
+ 809 028b CC       		.byte	-52
+ 810 028c 5D       		.byte	93
+ 811 028d 65       		.byte	101
+ 812 028e B6       		.byte	-74
+ 813 028f 92       		.byte	-110
+ 814 0290 6C       		.byte	108
+ 815 0291 70       		.byte	112
+ 816 0292 48       		.byte	72
+ 817 0293 50       		.byte	80
+ 818 0294 FD       		.byte	-3
+ 819 0295 ED       		.byte	-19
+ 820 0296 B9       		.byte	-71
+ 821 0297 DA       		.byte	-38
+ 822 0298 5E       		.byte	94
+ 823 0299 15       		.byte	21
+ 824 029a 46       		.byte	70
+ 825 029b 57       		.byte	87
+ 826 029c A7       		.byte	-89
+
GAS LISTING /tmp/ccPaCTqg.s 			page 32
+
+
+ 827 029d 8D       		.byte	-115
+ 828 029e 9D       		.byte	-99
+ 829 029f 84       		.byte	-124
+ 830 02a0 90       		.byte	-112
+ 831 02a1 D8       		.byte	-40
+ 832 02a2 AB       		.byte	-85
+ 833 02a3 00       		.byte	0
+ 834 02a4 8C       		.byte	-116
+ 835 02a5 BC       		.byte	-68
+ 836 02a6 D3       		.byte	-45
+ 837 02a7 0A       		.byte	10
+ 838 02a8 F7       		.byte	-9
+ 839 02a9 E4       		.byte	-28
+ 840 02aa 58       		.byte	88
+ 841 02ab 05       		.byte	5
+ 842 02ac B8       		.byte	-72
+ 843 02ad B3       		.byte	-77
+ 844 02ae 45       		.byte	69
+ 845 02af 06       		.byte	6
+ 846 02b0 D0       		.byte	-48
+ 847 02b1 2C       		.byte	44
+ 848 02b2 1E       		.byte	30
+ 849 02b3 8F       		.byte	-113
+ 850 02b4 CA       		.byte	-54
+ 851 02b5 3F       		.byte	63
+ 852 02b6 0F       		.byte	15
+ 853 02b7 02       		.byte	2
+ 854 02b8 C1       		.byte	-63
+ 855 02b9 AF       		.byte	-81
+ 856 02ba BD       		.byte	-67
+ 857 02bb 03       		.byte	3
+ 858 02bc 01       		.byte	1
+ 859 02bd 13       		.byte	19
+ 860 02be 8A       		.byte	-118
+ 861 02bf 6B       		.byte	107
+ 862 02c0 3A       		.byte	58
+ 863 02c1 91       		.byte	-111
+ 864 02c2 11       		.byte	17
+ 865 02c3 41       		.byte	65
+ 866 02c4 4F       		.byte	79
+ 867 02c5 67       		.byte	103
+ 868 02c6 DC       		.byte	-36
+ 869 02c7 EA       		.byte	-22
+ 870 02c8 97       		.byte	-105
+ 871 02c9 F2       		.byte	-14
+ 872 02ca CF       		.byte	-49
+ 873 02cb CE       		.byte	-50
+ 874 02cc F0       		.byte	-16
+ 875 02cd B4       		.byte	-76
+ 876 02ce E6       		.byte	-26
+ 877 02cf 73       		.byte	115
+ 878 02d0 96       		.byte	-106
+ 879 02d1 AC       		.byte	-84
+ 880 02d2 74       		.byte	116
+ 881 02d3 22       		.byte	34
+ 882 02d4 E7       		.byte	-25
+ 883 02d5 AD       		.byte	-83
+
GAS LISTING /tmp/ccPaCTqg.s 			page 33
+
+
+ 884 02d6 35       		.byte	53
+ 885 02d7 85       		.byte	-123
+ 886 02d8 E2       		.byte	-30
+ 887 02d9 F9       		.byte	-7
+ 888 02da 37       		.byte	55
+ 889 02db E8       		.byte	-24
+ 890 02dc 1C       		.byte	28
+ 891 02dd 75       		.byte	117
+ 892 02de DF       		.byte	-33
+ 893 02df 6E       		.byte	110
+ 894 02e0 47       		.byte	71
+ 895 02e1 F1       		.byte	-15
+ 896 02e2 1A       		.byte	26
+ 897 02e3 71       		.byte	113
+ 898 02e4 1D       		.byte	29
+ 899 02e5 29       		.byte	41
+ 900 02e6 C5       		.byte	-59
+ 901 02e7 89       		.byte	-119
+ 902 02e8 6F       		.byte	111
+ 903 02e9 B7       		.byte	-73
+ 904 02ea 62       		.byte	98
+ 905 02eb 0E       		.byte	14
+ 906 02ec AA       		.byte	-86
+ 907 02ed 18       		.byte	24
+ 908 02ee BE       		.byte	-66
+ 909 02ef 1B       		.byte	27
+ 910 02f0 FC       		.byte	-4
+ 911 02f1 56       		.byte	86
+ 912 02f2 3E       		.byte	62
+ 913 02f3 4B       		.byte	75
+ 914 02f4 C6       		.byte	-58
+ 915 02f5 D2       		.byte	-46
+ 916 02f6 79       		.byte	121
+ 917 02f7 20       		.byte	32
+ 918 02f8 9A       		.byte	-102
+ 919 02f9 DB       		.byte	-37
+ 920 02fa C0       		.byte	-64
+ 921 02fb FE       		.byte	-2
+ 922 02fc 78       		.byte	120
+ 923 02fd CD       		.byte	-51
+ 924 02fe 5A       		.byte	90
+ 925 02ff F4       		.byte	-12
+ 926 0300 1F       		.byte	31
+ 927 0301 DD       		.byte	-35
+ 928 0302 A8       		.byte	-88
+ 929 0303 33       		.byte	51
+ 930 0304 88       		.byte	-120
+ 931 0305 07       		.byte	7
+ 932 0306 C7       		.byte	-57
+ 933 0307 31       		.byte	49
+ 934 0308 B1       		.byte	-79
+ 935 0309 12       		.byte	18
+ 936 030a 10       		.byte	16
+ 937 030b 59       		.byte	89
+ 938 030c 27       		.byte	39
+ 939 030d 80       		.byte	-128
+ 940 030e EC       		.byte	-20
+
GAS LISTING /tmp/ccPaCTqg.s 			page 34
+
+
+ 941 030f 5F       		.byte	95
+ 942 0310 60       		.byte	96
+ 943 0311 51       		.byte	81
+ 944 0312 7F       		.byte	127
+ 945 0313 A9       		.byte	-87
+ 946 0314 19       		.byte	25
+ 947 0315 B5       		.byte	-75
+ 948 0316 4A       		.byte	74
+ 949 0317 0D       		.byte	13
+ 950 0318 2D       		.byte	45
+ 951 0319 E5       		.byte	-27
+ 952 031a 7A       		.byte	122
+ 953 031b 9F       		.byte	-97
+ 954 031c 93       		.byte	-109
+ 955 031d C9       		.byte	-55
+ 956 031e 9C       		.byte	-100
+ 957 031f EF       		.byte	-17
+ 958 0320 A0       		.byte	-96
+ 959 0321 E0       		.byte	-32
+ 960 0322 3B       		.byte	59
+ 961 0323 4D       		.byte	77
+ 962 0324 AE       		.byte	-82
+ 963 0325 2A       		.byte	42
+ 964 0326 F5       		.byte	-11
+ 965 0327 B0       		.byte	-80
+ 966 0328 C8       		.byte	-56
+ 967 0329 EB       		.byte	-21
+ 968 032a BB       		.byte	-69
+ 969 032b 3C       		.byte	60
+ 970 032c 83       		.byte	-125
+ 971 032d 53       		.byte	83
+ 972 032e 99       		.byte	-103
+ 973 032f 61       		.byte	97
+ 974 0330 17       		.byte	23
+ 975 0331 2B       		.byte	43
+ 976 0332 04       		.byte	4
+ 977 0333 7E       		.byte	126
+ 978 0334 BA       		.byte	-70
+ 979 0335 77       		.byte	119
+ 980 0336 D6       		.byte	-42
+ 981 0337 26       		.byte	38
+ 982 0338 E1       		.byte	-31
+ 983 0339 69       		.byte	105
+ 984 033a 14       		.byte	20
+ 985 033b 63       		.byte	99
+ 986 033c 55       		.byte	85
+ 987 033d 21       		.byte	33
+ 988 033e 0C       		.byte	12
+ 989 033f 7D       		.byte	125
+ 990              		.align 16
+ 991              		.type	lo_filter, @object
+ 992              		.size	lo_filter, 16
+ 993              	lo_filter:
+ 994 0340 00       		.byte	0
+ 995 0341 FF       		.byte	-1
+ 996 0342 FF       		.byte	-1
+ 997 0343 FF       		.byte	-1
+
GAS LISTING /tmp/ccPaCTqg.s 			page 35
+
+
+ 998 0344 FF       		.byte	-1
+ 999 0345 FF       		.byte	-1
+ 1000 0346 FF       		.byte	-1
+ 1001 0347 FF       		.byte	-1
+ 1002 0348 FF       		.byte	-1
+ 1003 0349 FF       		.byte	-1
+ 1004 034a FF       		.byte	-1
+ 1005 034b FF       		.byte	-1
+ 1006 034c FF       		.byte	-1
+ 1007 034d FF       		.byte	-1
+ 1008 034e FF       		.byte	-1
+ 1009 034f FF       		.byte	-1
+ 1010              		.align 16
+ 1011              		.type	FF_tab, @object
+ 1012              		.size	FF_tab, 16
+ 1013              	FF_tab:
+ 1014 0350 00       		.byte	0
+ 1015 0351 1B       		.byte	27
+ 1016 0352 36       		.byte	54
+ 1017 0353 2D       		.byte	45
+ 1018 0354 6C       		.byte	108
+ 1019 0355 77       		.byte	119
+ 1020 0356 5A       		.byte	90
+ 1021 0357 41       		.byte	65
+ 1022 0358 00       		.byte	0
+ 1023 0359 00       		.byte	0
+ 1024 035a 00       		.byte	0
+ 1025 035b 00       		.byte	0
+ 1026 035c 00       		.byte	0
+ 1027 035d 00       		.byte	0
+ 1028 035e 00       		.byte	0
+ 1029 035f 00       		.byte	0
+ 1030              		.data
+ 1031              		.type	KAESBlockCipherVecAesNiFFtable, @object
+ 1032              		.size	KAESBlockCipherVecAesNiFFtable, 8
+ 1033              	KAESBlockCipherVecAesNiFFtable:
+ 1034 0000 00       		.byte	0
+ 1035 0001 1B       		.byte	27
+ 1036 0002 36       		.byte	54
+ 1037 0003 2D       		.byte	45
+ 1038 0004 6C       		.byte	108
+ 1039 0005 77       		.byte	119
+ 1040 0006 5A       		.byte	90
+ 1041 0007 41       		.byte	65
+ 1042              		.section	.rodata
+ 1043              		.align 32
+ 1044              		.type	KAESBlockCipherVecAesNiRcon, @object
+ 1045              		.size	KAESBlockCipherVecAesNiRcon, 40
+ 1046              	KAESBlockCipherVecAesNiRcon:
+ 1047 0360 01000000 		.long	1
+ 1048 0364 02000000 		.long	2
+ 1049 0368 04000000 		.long	4
+ 1050 036c 08000000 		.long	8
+ 1051 0370 10000000 		.long	16
+ 1052 0374 20000000 		.long	32
+ 1053 0378 40000000 		.long	64
+ 1054 037c 80000000 		.long	128
+
GAS LISTING /tmp/ccPaCTqg.s 			page 36
+
+
+ 1055 0380 1B000000 		.long	27
+ 1056 0384 36000000 		.long	54
+ 1057              		.text
+ 1058              		.type	KAESBlockCipherVecAesNiKeyExpansion128, @function
+ 1059              	KAESBlockCipherVecAesNiKeyExpansion128:
+ 1060              	.LFB656:
+ 1061              		.file 3 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c"
+   1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*===========================================================================
+   2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+   3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *                            PUBLIC DOMAIN NOTICE
+   4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *               National Center for Biotechnology Information
+   5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+   6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  This software/database is a "United States Government Work" under the
+   7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  terms of the United States Copyright Act.  It was written as part of
+   8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  the author's official duties as a United States Government employee and
+   9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  thus cannot be copyrighted.  This software/database is freely available
+  10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  to the public for use. The National Library of Medicine and the U.S.
+  11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  Government have not placed any restriction on its use or reproduction.
+  12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  Although all reasonable efforts have been taken to ensure the accuracy
+  14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  and reliability of the software and data, the NLM and the U.S.
+  15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  Government do not and cannot warrant the performance or results that
+  16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  may be obtained by using this software or data. The NLM and the U.S.
+  17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  Government disclaim all warranties, express or implied, including
+  18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  warranties of performance, merchantability or fitness for any particular
+  19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  purpose.
+  20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  Please cite the author in any work or product based on this material.
+  22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * ===========================================================================
+  24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+  25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <krypto/extern.h>
+  28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "ncbi-priv.h"
+  30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "aes-ncbi-priv.h"
+  31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "cipher-priv.h"
+  32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "blockcipher-priv.h"
+  33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <klib/debug.h>
+  35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <klib/out.h>
+  36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <klib/rc.h>
+  37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <byteswap.h>
+  40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <string.h>
+  41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <stdint.h>
+  42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <stdlib.h>
+  43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <assert.h>
+  44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <sysalloc.h>
+  45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+  47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <cpuid.h>
+  48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+  49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VECREG
+
GAS LISTING /tmp/ccPaCTqg.s 			page 37
+
+
+  51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <v128.h>
+  52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+  53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+  55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * This implements the AES cipher as defined by FIPS-197 from NIST
+  56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  
+  57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Notes on implmentation:
+  58:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  59:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * NOTE:
+  60:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Byte ordering in AES is not critical but unllike the original implmentation
+  61:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * bytes are not re-ordered to a big endian order upon reading them in and this
+  62:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * code will expect to run on an Intel/AMD type processor and might have issues
+  63:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * on some big endian processors.
+  64:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  65:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * NOTE:
+  66:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Many functions are written as static inline functions to
+  67:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * facilitate GCC type assembly language optimization on various processors
+  68:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  69:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * NOTE:
+  70:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * This implements the Equivalent Inverse Cipher not the Inverse Cipher.  In
+  71:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * general functions will match those defined in the FIPS-197 document where they
+  72:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * do not get optimized away for Intel/AMD XMM registers and AES-NI instructions.
+  73:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  74:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * NOTE:
+  75:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * C-99 types are used for specific sized types.  An unaddornded unsigned type
+  76:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * is used for many index type variables to allow the compiler choice in
+  77:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * size where size does not matter very much.  As these index variables do
+  78:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * not go above 16 any size would do but the compiler can choose the size most
+  79:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * suited for array subscripting.
+  80:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+  81:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  82:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+  83:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_00 =  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  84:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+  85:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  86:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+  87:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_01 =  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+  88:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                       0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+  89:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  90:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+  91:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_0F =  { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
+  92:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                       0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F };
+  93:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  94:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+  95:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_10 =  { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+  96:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                       0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 };
+  97:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  98:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  99:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * These functions implment the Advanced Encryption Standard AES as defined
+ 102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * in the FIPS (Federal Information Processing Standars Publication 197
+ 103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Of Nevember 26, 2001.
+ 104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.1
+
GAS LISTING /tmp/ccPaCTqg.s 			page 38
+
+
+ 108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Read a blocks worth of bytes into an CipherVec
+ 112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * With vector registers it is a single instruction, without them it
+ 114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * is a memmove call
+ 115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateIn) (const void * ain)
+ 118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateIn) (const void * ain)
+ 122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec vec;
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __asm__ (
+ 127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         "movdqu (%[a]),%[s]" : [s] "=x" (vec) : [a] "D" (ain)
+ 128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         );
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vec;
+ 130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     memmove (&u.bytes, ain, sizeof (u));
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Write a block's worth of bytes out from an CipherVec
+ 143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * With vector registers it is a single instruction, without them it
+ 145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * is a memmove call
+ 146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(StateOut) (const CipherVec vec, void * rout)
+ 149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(StateOut) (const CipherVec vec, void * rout)
+ 153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec rvec = vec;
+ 157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __asm__ (
+ 158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         "movdqu %[s],(%[a])" : : [s] "x" (rvec), [a] "D" (rout)
+ 159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         );
+ 160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     memmove (rout, &vec, sizeof (vec));
+ 164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 39
+
+
+ 165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecXor) (CipherVec v1, CipherVec v2)
+ 171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecXor) (CipherVec v1, CipherVec v2)
+ 175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] ^= u2.columns[ix];
+ 190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAnd) (CipherVec v1, CipherVec v2)
+ 199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAnd) (CipherVec v1, CipherVec v2)
+ 203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] &= u2.columns[ix];
+ 218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+
GAS LISTING /tmp/ccPaCTqg.s 			page 40
+
+
+ 222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecOr) (CipherVec v1, CipherVec v2)
+ 227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecOr) (CipherVec v1, CipherVec v2)
+ 231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] |= u2.columns[ix];
+ 246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAdd) (CipherVec v1, CipherVec v2)
+ 255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAdd) (CipherVec v1, CipherVec v2)
+ 259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 + v2;
+ 263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] += u2.columns[ix];
+ 274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+
GAS LISTING /tmp/ccPaCTqg.s 			page 41
+
+
+ 279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSub) (CipherVec v1, CipherVec v2)
+ 283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSub) (CipherVec v1, CipherVec v2)
+ 287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] -= u2.columns[ix];
+ 302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecMul) (CipherVec v1, CipherVec v2)
+ 311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecMul) (CipherVec v1, CipherVec v2)
+ 315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 * v2;
+ 319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] *= u2.columns[ix];
+ 330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 42
+
+
+ 336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecDiv) (CipherVec v1, CipherVec v2)
+ 339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecDiv) (CipherVec v1, CipherVec v2)
+ 343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] /= u2.columns[ix];
+ 358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(PackShuffleBytes) (CipherVec dest, CipherVec mask)
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(PackShuffleBytes) (CipherVec dest, CipherVec mask)
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_PSHUFB128 (dest, mask);
+ 374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u out, in, gate;
+ 378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         else
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+ 390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 43
+
+
+ 393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSLLBI) (CipherVec v, const int k)
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSLLBI) (CipherVec v, const int k)
+ 403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVec sl_mask [9] = 
+ 406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+ 407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
+ 409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
+ 410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE },
+ 411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC },
+ 413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
+ 414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8 },
+ 415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0 },
+ 417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0 },
+ 419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
+ 420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0 },
+ 421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 },
+ 423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ 425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         };
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec vv = v;
+ 427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     assert (k <= 8);
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("mask", sl_mask[k]); */
+ 432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("v 1", vv); */
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = op_PSLLDI128 (vv, k);
+ 434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("v 2", vv); */
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("v 3", vv); */
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vv;
+ 438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u vv; /* state and key not countries :) */
+ 442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv.state = v;
+ 445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (v); ++ix)
+ 447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+ 448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         KOutMsg ("SLLBI %d %x ", k, vv.bytes[ix]);
+ 449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         vv.bytes[ix] <<= k;
+
GAS LISTING /tmp/ccPaCTqg.s 			page 44
+
+
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         KOutMsg ("%x\n", vv.bytes[ix]);
+ 451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+ 452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vv.state;
+ 453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSRLBI) (CipherVec v, const int k)
+ 460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSRLBI) (CipherVec v, const int k)
+ 464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVec sr_mask [9] = 
+ 467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
+ 471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F },
+ 472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F },
+ 474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
+ 475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F },
+ 476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
+ 477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F },
+ 478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07 },
+ 480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 },
+ 482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 },
+ 484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ 486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         };
+ 487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = op_PSRLDI128 (v, k);
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v;
+ 491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u vv; /* state and key not countries :) */
+ 495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv.state = v;
+ 498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (v); ++ix)
+ 500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         KOutMsg ("SRLBI %d %x ", k, vv.bytes[ix]);
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         vv.bytes[ix] >>= k;
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         KOutMsg ("%x\n", vv.bytes[ix]);
+ 504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+ 505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vv.state;
+ 506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 45
+
+
+ 507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SetColumn) (CipherVec state, AESWord column, const int which)
+ 513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 514:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SetColumn) (CipherVec state, AESWord column, const int which)
+ 517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.1.4
+ 532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * The AddRoundKey transformation is a sinple exclusive or of all 128 bits
+ 534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * in the current block against a round key.  This operation is used in all
+ 535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Cipher and EqInvCipher rounds
+ 536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * With vector types it is a single operation that with vector registers is
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * a single op-code.
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AddRoundKey) (CipherVec state, CipherVec round_key)
+ 542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AddRoundKey) (CipherVec state, CipherVec round_key)
+ 546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(VecXor) (state, round_key);
+ 548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.1.2
+ 553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS 197 describes the state in column major format
+ 555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * while C and assembly programmers tend to think in row major
+ 556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * The byte order is 0,1,2,3,,...F as shown in the first diagram.
+ 557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  ShiftRows() is defined as leaving this state
+ 559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 0 | 4 | 8 | C |     | 0 | 4 | 8 | C |
+ 561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 1 | 5 | 9 | D |     | 5 | 9 | D | 1 |
+ 563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+
GAS LISTING /tmp/ccPaCTqg.s 			page 46
+
+
+ 564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 2 | 6 | A | E |     | A | E | 2 | 6 |
+ 565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 3 | 7 | B | F |     | F | 3 | 7 | B |
+ 567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftRows) (CipherVec state)
+ 571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftRows) (CipherVec state)
+ 575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec ShiftRowTable
+ 578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /*   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
+ 579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     = {  0,  5, 10, 15,  4,  9, 14,  3,  8, 13,  2,  7, 12,  1,  6, 11 };
+ 580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.3.1
+ 588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * InvShiftRows() is defined as leaving this state
+ 590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 0 | 4 | 8 | C |     | 0 | 4 | 8 | C |
+ 592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 1 | 5 | 9 | D |     | D | 1 | 5 | 9 |
+ 594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 2 | 6 | A | E |     | A | E | 2 | 6 |
+ 596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 3 | 7 | B | F |     | 7 | B | F | 3 |
+ 598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvShiftRows) (CipherVec state)
+ 602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvShiftRows) (CipherVec state)
+ 607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVecByte InvShiftRowTable
+ 609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         /*   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
+ 610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         = {  0, 13, 10,  7,  4,  1, 14, 11,  8,  5,  2, 15, 12,  9,  6,  3 };
+ 611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 0 | 4 | 8 | C |     | 3 | 7 | B | F |
+ 620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+
GAS LISTING /tmp/ccPaCTqg.s 			page 47
+
+
+ 621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 1 | 5 | 9 | D |     | 0 | 4 | 8 | C |
+ 622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 2 | 6 | A | E |     | 1 | 5 | 9 | D |
+ 624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 3 | 7 | B | F |     | 2 | 6 | A | E |
+ 626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesRight) (CipherVec state)
+ 630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesRight) (CipherVec state)
+ 634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec ShiftRowTable
+ 637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /*   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
+ 638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     = {  3,  0,  1,  2,  7,  4,  5,  6, 11,  8,  9, 10, 15, 12, 13, 14 };
+ 639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 643:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 644:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 645:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 646:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 647:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 0 | 4 | 8 | C |     | 1 | 5 | B | D |
+ 648:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 1 | 5 | 9 | D |     | 2 | 6 | 8 | E |
+ 650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 651:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 2 | 6 | A | E |     | 3 | 7 | 9 | F |
+ 652:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 653:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 3 | 7 | B | F |     | 0 | 4 | 8 | C |
+ 654:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 655:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesLeft) (CipherVec state)
+ 658:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 661:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesLeft) (CipherVec state)
+ 662:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 663:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVec ShiftRowTable
+ 664:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         /*   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
+ 665:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         = {  1,  2,  3,  0,  5,  6,  7,  4,  9, 10, 11,  8, 13, 14, 15, 12 };
+ 666:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 669:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 670:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 671:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 672:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.1.1
+ 674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 675:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 676:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 677:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+
GAS LISTING /tmp/ccPaCTqg.s 			page 48
+
+
+ 678:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * SubBytes replaces each byte in a state with a specific byte value from
+ 679:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * A Rijndael Substitution box
+ 680:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const 
+ 682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(RijndaelSBox)[256] = 
+ 683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*        -0    -1    -2    -3    -4    -5    -6    -7    -8    -9    -A    -B    -C    -D    -E   
+ 685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0- */ 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 
+ 686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 1- */ 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 
+ 687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 2- */ 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 
+ 688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 3- */ 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 
+ 689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 4- */ 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 
+ 690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 5- */ 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 
+ 691:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 6- */ 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 
+ 692:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 7- */ 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 
+ 693:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 8- */ 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 
+ 694:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 9- */ 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 
+ 695:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* A- */ 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 
+ 696:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* B- */ 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 
+ 697:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* C- */ 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 
+ 698:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* D- */ 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 
+ 699:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* E- */ 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 
+ 700:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* F- */ 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 
+ 701:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 702:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 703:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 704:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if 0
+ 705:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 706:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ 707:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 708:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 709:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 710:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ 711:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 712:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+ 713:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 714:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 715:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 716:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 717:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (u.bytes); ++ix)
+ 718:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+ 719:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u.bytes[ix] = AESBCMEMBER(RijndaelSBox)[u.bytes[ix]];
+ 720:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+ 721:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 722:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 723:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 724:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 725:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 726:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 727:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * SubWord performs the same operation as SubBytes but on
+ 728:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * the four bytes of a column and not a whole state
+ 729:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 730:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 731:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(SubWord) (AESWord w)
+ 732:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 733:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 734:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+
GAS LISTING /tmp/ccPaCTqg.s 			page 49
+
+
+ 735:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(SubWord) (AESWord w)
+ 736:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 737:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESColumn col;
+ 738:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 739:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if 0
+ 747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * InvSubBytes replaces each byte in a state with a specific byte value from
+ 749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * an Inversze Rijndael Substitution box.  That is InvSubBytes undoes SubBytes
+ 750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const 
+ 752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint8_t AESBCMEMBER(RijndaelInvSBox)[256] = 
+ 753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 754:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*        -0    -1    -2    -3    -4    -5    -6    -7    -8    -9    -A    -B    -C    -D    -E   
+ 755:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0- */ 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 
+ 756:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 1- */ 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 
+ 757:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 2- */ 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 
+ 758:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 3- */ 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 
+ 759:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 4- */ 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 
+ 760:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 5- */ 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 
+ 761:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 6- */ 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 
+ 762:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 7- */ 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 
+ 763:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 8- */ 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 
+ 764:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 9- */ 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 
+ 765:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* A- */ 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 
+ 766:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* B- */ 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 
+ 767:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* C- */ 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 
+ 768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* D- */ 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 
+ 769:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* E- */ 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 
+ 770:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* F- */ 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 
+ 771:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 772:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 773:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 774:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 775:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 776:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 777:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 778:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 779:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 781:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+ 782:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 783:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 784:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 785:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (u.bytes); ++ix)
+ 786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u.bytes[ix] = AESBCMEMBER(RijndaelInvSBox)[u.bytes[ix]];
+ 787:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 789:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 790:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 791:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 50
+
+
+ 792:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RijndaelSBoxV)[16] = 
+ 794:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 795:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     -0    -1    -2    -3    -4    -5    -6    -7    -8    -9    -A    -B    -C    -D    -E    -F
+ 796:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x7
+ 797:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC
+ 798:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x1
+ 799:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x7
+ 800:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x8
+ 801:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xC
+ 802:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA
+ 803:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD
+ 804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x7
+ 805:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xD
+ 806:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x7
+ 807:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x0
+ 808:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8
+ 809:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9
+ 810:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xD
+ 811:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x1
+ 812:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 813:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 814:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 815:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RijndaelInvSBoxV)[16] = 
+ 816:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 817:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     -0    -1    -2    -3    -4    -5    -6    -7    -8    -9    -A    -B    -C    -D    -E    -F
+ 818:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xF
+ 819:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xC
+ 820:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4
+ 821:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x2
+ 822:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x9
+ 823:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x8
+ 824:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x0
+ 825:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6
+ 826:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x7
+ 827:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6
+ 828:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1
+ 829:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF
+ 830:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5
+ 831:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xE
+ 832:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x6
+ 833:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7
+ 834:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 835:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 836:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 837:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 838:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec lo_filter = { 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 839:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
+ 840:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 841:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 842:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytesInt) (CipherVec state, const CipherVec box [16])
+ 843:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 844:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 845:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 846:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytesInt) (CipherVec state, const CipherVec box [16])
+ 847:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 848:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec lo, hi, tmp, out;
+
GAS LISTING /tmp/ccPaCTqg.s 			page 51
+
+
+ 849:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 850:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 853:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("state", state); */
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 855:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("lo", lo); */
+ 856:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 858:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 860:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 861:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 863:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 864:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 865:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 867:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 869:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*         DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 871:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*         DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 873:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*         DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 875:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*         DEBUG_CIPHER_VECTOR ("out", out); */
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 877:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*         DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 879:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*         DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 880:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+ 881:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("out", out); */
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 883:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 884:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 885:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 886:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 887:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ 888:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 889:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 890:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 891:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ 892:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 893:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(SubBytesInt) (state, AESBCMEMBER(RijndaelSBoxV));
+ 894:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 895:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 896:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 897:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 898:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 899:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 900:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 901:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 902:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 903:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 904:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(SubBytesInt) (state, AESBCMEMBER(RijndaelInvSBoxV));
+ 905:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+
GAS LISTING /tmp/ccPaCTqg.s 			page 52
+
+
+ 906:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 907:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 908:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 909:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.1.3
+ 910:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 911:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 912:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 913:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * there are no psllb or psrlb instructions so shift words not bytes
+ 914:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * and then cut off bits that would have been zeroed if there were
+ 915:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * such instructions
+ 916:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 917:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * 
+ 918:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 919:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec FF_tab = 
+ 920:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x00, 0x1B, 0x36, 0x2D, 0x6C, 0x77, 0x5A, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ 921:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 922:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 923:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul) (register CipherVec state, const int bits)
+ 924:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 925:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 926:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 927:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul) (register CipherVec state, const int bits)
+ 928:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 929:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec sl, sr;
+ 930:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 931:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     assert (bits <= 8);
+ 932:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("sr", sr);
+ 936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ 937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("sl", sl);
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 939:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(VecXor)(sl, sr);
+ 940:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 941:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 942:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 943:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 944:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_02) (CipherVec state)
+ 945:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 946:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 947:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 948:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_02) (register CipherVec state)
+ 949:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 950:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 951:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 952:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state =  AESBCMEMBER(FF_mul) (state, 1);
+ 953:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 954:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 955:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 956:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 957:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 958:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 959:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 960:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_04) (CipherVec state)
+ 961:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 962:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 53
+
+
+ 963:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 964:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_04) (CipherVec state)
+ 965:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 966:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 967:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 968:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state =  AESBCMEMBER(FF_mul) (state, 2);
+ 969:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 970:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 971:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 972:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 973:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 974:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 975:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 976:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_08) (CipherVec state)
+ 977:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 978:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 979:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 980:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_08) (CipherVec state)
+ 981:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 982:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 983:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 984:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state =  AESBCMEMBER(FF_mul) (state, 3);
+ 985:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 986:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 987:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 988:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 989:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 990:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 991:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static AESByte AESBCMEMBER(FFtable)[] = { 0x00, 0x1b, 0x36, 0x2d, 0x6c, 0x77, 0x5a, 0x41 };
+ 992:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 993:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 994:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 995:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFtab) (uint8_t x)
+ 996:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 997:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 998:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 999:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFtab) (uint8_t x)
+1000:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(FFtable)[x];
+1002:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1003:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1004:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1005:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1006:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul02) (AESByte b)
+1007:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1008:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1009:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1010:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul02) (AESByte b)
+1011:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 1) ^ AESBCMEMBER(FFtab)(b >> 7);
+1013:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1014:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1015:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1016:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1017:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul04) (AESByte b)
+1018:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1019:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 54
+
+
+1020:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1021:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul04) (AESByte b)
+1022:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1023:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 2) ^ AESBCMEMBER(FFtab)(b >> 6);
+1024:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1025:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1026:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1027:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1028:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul08) (AESByte b)
+1029:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1030:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1031:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1032:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul08) (AESByte b)
+1033:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1034:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 3) ^ AESBCMEMBER(FFtab)(b >> 5);
+1035:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1036:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1037:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1038:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1039:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MixColumns) (CipherVec state)
+1040:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1041:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1042:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1043:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MixColumns) (CipherVec state)
+1044:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1045:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec c0, c1, c2, c3;
+1046:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     
+1047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c1 = AESBCMEMBER(RotBytesLeft) (state);
+1048:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c2 = AESBCMEMBER(RotBytesLeft) (c1);
+1049:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c3 = AESBCMEMBER(RotBytesLeft) (c2);
+1050:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c0 = AESBCMEMBER(VecXor) (state, c1);
+1051:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1052:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1053:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1054:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c0 = AESBCMEMBER(FF_mul_02) (c0);
+1055:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1056:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+1057:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         CipherVec_AES_u tmp;
+1058:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         unsigned ix;
+1059:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1060:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp.state = c0;
+1061:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     
+1062:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         for (ix = 0; ix < sizeof tmp; ++ix)
+1063:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             tmp.bytes[ix] = AESBCMEMBER(FFmul02)(tmp.bytes[ix]);
+1064:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         c0 = tmp.state;
+1065:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+1066:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1067:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c1 = AESBCMEMBER(VecXor) (c1, c2);
+1068:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c1 = AESBCMEMBER(VecXor) (c1, c3);
+1069:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c1 = AESBCMEMBER(VecXor) (c1, c0);
+1070:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1071:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return c1;
+1072:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* obsoleted 
+1073:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u in, out;
+1074:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+1075:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1076:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = state;
+
GAS LISTING /tmp/ccPaCTqg.s 			page 55
+
+
+1077:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1078:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (out.bytes); ix += 4)
+1079:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+1080:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         unsigned const s0 = in.bytes[ix + 0];
+1081:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         unsigned const s1 = in.bytes[ix + 1];
+1082:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         unsigned const s2 = in.bytes[ix + 2];
+1083:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         unsigned const s3 = in.bytes[ix + 3];
+1084:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1085:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 0] =      s1 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s0 ^ s1);
+1086:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 1] = s0      ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s1 ^ s2);
+1087:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 2] = s0 ^ s1      ^ s3 ^ AESBCMEMBER(FFmul02)(s2 ^ s3);
+1088:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 3] = s0 ^ s1 ^ s2      ^ AESBCMEMBER(FFmul02)(s3 ^ s0);
+1089:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+1090:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+1091:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1092:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1093:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1094:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1095:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvMixColumns) (CipherVec state)
+1096:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1097:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1098:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1099:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvMixColumns) (CipherVec state)
+1100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+1102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_AESIMC (state);
+1103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec r1, r2, r3, f2, f4, f8;
+1105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r1 = AESBCMEMBER(RotBytesLeft) (state);
+1107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r2 = AESBCMEMBER(RotBytesLeft) (r1);
+1108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r3 = AESBCMEMBER(RotBytesLeft) (r2);        
+1109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f4 = AESBCMEMBER(VecXor) (state, r2);
+1111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f2 = AESBCMEMBER(VecXor) (state, r1);
+1112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f8 = AESBCMEMBER(VecXor) (r2, r3);
+1113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (f8, r1);
+1114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f8 = AESBCMEMBER(VecXor) (f8, f2);
+1115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f2 = AESBCMEMBER(FF_mul) (f2,1);
+1119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f4 = AESBCMEMBER(FF_mul) (f4,2);
+1120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f8 = AESBCMEMBER(FF_mul) (f8,3);
+1121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+1123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         CipherVec_AES_u fu2, fu4, fu8;
+1124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         unsigned ix;
+1125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         fu2.state = f2;
+1127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         fu4.state = f4;
+1128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         fu8.state = f8;
+1129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         for (ix = 0; ix < sizeof fu2; ++ix)
+1131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+1132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu2.bytes[ix] = AESBCMEMBER(FFmul02)(fu2.bytes[ix]);
+1133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu4.bytes[ix] = AESBCMEMBER(FFmul04)(fu4.bytes[ix]);
+
GAS LISTING /tmp/ccPaCTqg.s 			page 56
+
+
+1134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu8.bytes[ix] = AESBCMEMBER(FFmul08)(fu8.bytes[ix]);
+1135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         }
+1136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         f2 = fu2.state;
+1137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         f4 = fu4.state;
+1138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         f8 = fu8.state;
+1139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+1140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f2);
+1143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f4);
+1144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f8);
+1145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+1149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u in, out;
+1151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+1152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = state;
+1154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (out.bytes); ix += AES_Nb)
+1156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+1157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESWord s0 = in.bytes[ix + 0];
+1158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESWord s1 = in.bytes[ix + 1];
+1159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESWord s2 = in.bytes[ix + 2];
+1160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESWord s3 = in.bytes[ix + 3];
+1161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESWord p, q;
+1162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         q =     AESBCMEMBER(FFmul08)(s0 ^ s1 ^ s2 ^ s3);
+1164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         p = q ^ AESBCMEMBER(FFmul04)(s0 ^ s2);
+1165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         q = q ^ AESBCMEMBER(FFmul04)(s1 ^ s3);
+1166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 0] =      s1 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s0 ^ s1) ^ p;
+1168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 1] = s0      ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s1 ^ s2) ^ q;
+1169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 2] = s0 ^ s1      ^ s3 ^ AESBCMEMBER(FFmul02)(s2 ^ s3) ^ p;
+1170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 3] = s0 ^ s1 ^ s2      ^ AESBCMEMBER(FFmul02)(s3 ^ s0) ^ q;
+1171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+1172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+1174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+1179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.2
+1180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+1182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(Rcon)[] = {
+1183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     0x00000001, 0x00000002, 0x00000004, 0x00000008,
+1184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     0x00000010, 0x00000020, 0x00000040, 0x00000080,
+1185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     0x0000001B, 0x00000036
+1186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+1187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(RotWord) (AESWord w)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 57
+
+
+1191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(RotWord) (AESWord w)
+1195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (w >> 8) | (w << 24);
+1197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(GetWord) (const AESByte * pointer)
+1202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(GetWord) (const AESByte * pointer)
+1206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /*
+1208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * not portable to architectures which require aligned multibyte reads
+1209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * but as this only runs on Intel at this point it is fine for now
+1210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      */
+1211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return *(AESWord*)pointer;
+1212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion) (CipherVec * r, const AESByte * key, unsigned Nr, unsigned Nk)
+1218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord * w = (AESWord*)r;
+1220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     const AESWord * pRcon;
+1221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix, limit;
+1222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord temp;
+1223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_KEYEXP(("%s (w (%p), key (%p), Nr (%u) Nk (%u))\n", __func__, w, key, Nr, Nk));
+1226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < Nk; ++ix)
+1228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+1229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_KEYEXP(("i (dec): %u\n", ix));
+1230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         temp = AESBCMEMBER(GetWord) (key+(ix*4));
+1231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         w[ix] = temp;
+1232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_KEYEXP(("kw[%i]: %0.8x\n", ix, temp));
+1233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+1234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     limit = AES_Nb * (Nr + 1);
+1236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     pRcon = AESBCMEMBER(Rcon);
+1237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_KEYEXP(("Nk (%u) Nr (%u) limit (%u)\n", Nk, Nr, limit));
+1238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         
+1239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (; ix < limit; ++ix)
+1240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+1241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_KEYEXP(("i (dec): %u %u\n", ix, limit));
+1243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         /* temp should already be set */
+1245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_KEYEXP(("temp: %0.8x\n", temp));
+1246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if ((ix % Nk) == 0)
+1247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+
GAS LISTING /tmp/ccPaCTqg.s 			page 58
+
+
+1248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             temp = AESBCMEMBER(RotWord)(temp);
+1249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             DEBUG_KEYEXP(("after RotWord: %0.8x \n", temp));
+1250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             temp = AESBCMEMBER(SubWord) (temp);
+1251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             DEBUG_KEYEXP(("after SubWord: %0.8x \n", temp));
+1252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             DEBUG_KEYEXP(("Rcon [i/Nk]: %0.8x\n", *pRcon));
+1253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             temp ^= *pRcon++;
+1254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             DEBUG_KEYEXP(("after XOR with Rcon: %0.8x \n", temp));
+1255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         }
+1256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         else if ((Nk > 6) && ((ix % Nk) == 4))
+1257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+1258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             temp = AESBCMEMBER(SubWord) (temp);
+1259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             DEBUG_KEYEXP(("after SubWord: %0.8x \n", temp));
+1260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         }
+1261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_KEYEXP(("w[i-Nk]: %0.8x\n", w[ix-Nk]));
+1262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         temp ^= w [ix - Nk];
+1263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_KEYEXP(("kw[ix]: %0.8x\n", temp));
+1264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         w [ix] = temp;
+1265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+1266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft32) (CipherVec state)
+1271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft32) (CipherVec state)
+1275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVec mask = { 0xFF, 0xFF, 0xFF, 0xFF, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+1279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftRight64) (CipherVec state)
+1294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftRight64) (CipherVec state)
+1298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVec mask = { 8, 9, 10, 11, 12, 13, 14, 15, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF
+1301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+1302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 59
+
+
+1305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[2];
+1307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+1308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = 0;
+1309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = 0;
+1310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft64) (CipherVec state)
+1317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft64) (CipherVec state)
+1321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVec mask = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0, 1, 2, 3, 4, 
+1324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+1325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+1330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+1331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+1332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+1333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W3:W3:W3:W3
+1344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn3) (CipherVec state)
+1347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn3) (CipherVec state)
+1351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_PSHUFD128 (state,0xFF);
+1354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+
GAS LISTING /tmp/ccPaCTqg.s 			page 60
+
+
+1362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W2:W2:W2:W2
+1372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn2) (CipherVec state)
+1375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn2) (CipherVec state)
+1379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_PSHUFD128 (state,0xAA);
+1382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+1387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[2];
+1388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[2];
+1389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W2:W2:W2:W2
+1400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn1) (CipherVec state)
+1403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn1) (CipherVec state)
+1407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_PSHUFD128 (state,0x55);
+1410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[1];
+1415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+1416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[1];
+1417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+
GAS LISTING /tmp/ccPaCTqg.s 			page 61
+
+
+1419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W0:W0:W0
+1428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn0) (CipherVec state)
+1431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn0) (CipherVec state)
+1435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_PSHUFD128 (state,0x00);
+1438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[0];
+1443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[0];
+1444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+1445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     X0:X1:X2:X3
+1454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:X0:X1
+1457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge1) (CipherVec w, CipherVec x)
+1460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge1) (CipherVec w, CipherVec x)
+1464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_SHUFPD (w, x, 0x00);
+1467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u ww;
+1469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u xx;
+1470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.state = w;
+1472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     xx.state = x;
+1473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[2] = xx.columns[0];
+1475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[3] = xx.columns[1];
+
GAS LISTING /tmp/ccPaCTqg.s 			page 62
+
+
+1476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return ww.state;
+1478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     X0:X1:X2:X3
+1486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     X2:X3:W0:W1
+1489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge2) (CipherVec w, CipherVec x)
+1492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge2) (CipherVec w, CipherVec x)
+1496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_SHUFPD (w, x, 0x01);
+1499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u ww;
+1501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u xx;
+1502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.state = w;
+1504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     xx.state = x;
+1505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[0] = ww.columns[2];
+1507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[1] = ww.columns[3];
+1508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[2] = xx.columns[0];
+1509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[3] = xx.columns[1];
+1510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return ww.state;
+1512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1514:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     X0:X1:X2:X3
+1520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     X2:X3:W0:W1
+1523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge3) (CipherVec v0, CipherVec v1)
+1526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge3) (CipherVec v0, CipherVec v1)
+1530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_SHUFPD (v0, v1, 0x02);
+
GAS LISTING /tmp/ccPaCTqg.s 			page 63
+
+
+1533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u t0;
+1535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u t1;
+1536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     t0.state = v0;
+1538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     t1.state = v1;
+1539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     t0.columns[2] = t0.columns[0];
+1541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     t0.columns[3] = t0.columns[1];
+1542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     t0.columns[0] = t1.columns[2];
+1543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     t0.columns[1] = t1.columns[3];
+1544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return t0.state;
+1546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W0^W1:W0^W1^W2:W0^W1^W2^W3
+1556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftXorColumns) (CipherVec state)
+1559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftXorColumns) (CipherVec state)
+1563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+1566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+1570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+1572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] ^= temp.columns[0];
+1578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] ^= temp.columns[1];
+1579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] ^= temp.columns[2];
+1580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssist) (register CipherVec state, const int rcon)
+1588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 64
+
+
+1590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssist) (register CipherVec state, const int rcon)
+1592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_AESKEYGENASSIST (state, rcon);
+1595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u in;
+1597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u out;
+1598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord rconw;
+1599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rconw = (AESWord)(AESByte)rcon;
+1601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = state;
+1602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out.columns[0] = AESBCMEMBER(SubWord)(in.columns[1]);
+1604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out.columns[1] = AESBCMEMBER(RotWord)(out.columns[0]) ^ rconw;
+1605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out.columns[2] = AESBCMEMBER(SubWord)(in.columns[3]);
+1606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out.columns[3] = AESBCMEMBER(RotWord)(out.columns[2]) ^ rconw;
+1607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+1609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn1) (register CipherVec state, const int rcon)
+1615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn1) (register CipherVec state, const int rcon)
+1619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+1622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+1623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return  AESBCMEMBER(StateDupColumn1) (tmp);
+1624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+1626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord rconw;
+1627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord temp;
+1628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rconw = (AESWord)(AESByte)rcon;
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[1]);
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(RotWord)(temp);
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp ^= rconw;
+1634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+1637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn2) (register CipherVec state)
+1643:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1644:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1645:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1646:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn2) (register CipherVec state)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 65
+
+
+1647:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1648:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+1650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, 0);
+1651:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return  AESBCMEMBER(StateDupColumn2) (tmp);
+1652:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1653:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+1654:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord temp;
+1655:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+1658:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+1661:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1662:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1663:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1664:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1665:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1666:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn3) (register CipherVec state, const int rcon)
+1667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1669:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1670:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn3) (register CipherVec state, const int rcon)
+1671:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1672:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+1675:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return  AESBCMEMBER(StateDupColumn3) (tmp);
+1676:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1677:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1678:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec vrcon;
+1679:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp;
+1680:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+1691:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1692:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1693:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1694:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #elif USE_VEC && 1
+1695:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp;
+1696:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+1697:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     
+1698:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [3] = rcon;
+1699:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1700:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+1701:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+1702:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+1703:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+
GAS LISTING /tmp/ccPaCTqg.s 			page 66
+
+
+1704:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, u.state);
+1705:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+1706:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+1707:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+1708:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+1709:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1710:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1711:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+1712:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord rconw;
+1713:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord temp;
+1714:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1715:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rconw = (AESWord)(AESByte)rcon;
+1716:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+1717:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+1718:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(RotWord)(temp);
+1719:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp ^= rconw;
+1720:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1721:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+1722:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+1723:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1724:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1725:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1726:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1727:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1728:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+1729:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1730:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion128) (CipherVec * round_keys, const AESByte * key)
+1731:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 1062              		.loc 3 1731 0
+ 1063              		.cfi_startproc
+ 1064 004b 55       		pushq	%rbp
+ 1065              	.LCFI12:
+ 1066              		.cfi_def_cfa_offset 16
+ 1067 004c 4889E5   		movq	%rsp, %rbp
+ 1068              		.cfi_offset 6, -16
+ 1069              	.LCFI13:
+ 1070              		.cfi_def_cfa_register 6
+ 1071 004f 4881EC68 		subq	$3944, %rsp
+ 1071      0F0000
+ 1072 0056 4889BD78 		movq	%rdi, -3720(%rbp)
+ 1072      F1FFFF
+ 1073 005d 4889B570 		movq	%rsi, -3728(%rbp)
+ 1073      F1FFFF
+ 1074              		.loc 3 1731 0
+ 1075 0064 488B8570 		movq	-3728(%rbp), %rax
+ 1075      F1FFFF
+ 1076 006b 488985A0 		movq	%rax, -3680(%rbp)
+ 1076      F1FFFF
+ 1077              	.LBB284:
+ 1078              	.LBB285:
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __asm__ (
+ 1079              		.loc 3 126 0
+ 1080 0072 488B85A0 		movq	-3680(%rbp), %rax
+ 1080      F1FFFF
+ 1081 0079 4889C7   		movq	%rax, %rdi
+ 1082              	#APP
+ 1083              	# 126 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+
GAS LISTING /tmp/ccPaCTqg.s 			page 67
+
+
+ 1084              		movdqu (%rdi),%xmm0
+ 1085              	# 0 "" 2
+ 1086              	#NO_APP
+ 1087 0080 660F7F85 		movdqa	%xmm0, -4064(%rbp)
+ 1087      20F0FFFF 
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vec;
+ 1088              		.loc 3 129 0
+ 1089 0088 660F6F85 		movdqa	-4064(%rbp), %xmm0
+ 1089      20F0FFFF 
+ 1090              	.LBE285:
+ 1091              	.LBE284:
+1732:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec state;
+1733:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec kgastate;
+1734:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1735:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(StateIn) (key);
+ 1092              		.loc 3 1735 0
+ 1093 0090 F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 1093      80F1FFFF 
+1736:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[0] = state;
+ 1094              		.loc 3 1736 0
+ 1095 0098 488B8578 		movq	-3720(%rbp), %rax
+ 1095      F1FFFF
+ 1096 009f F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 1096      80F1FFFF 
+ 1097 00a7 F30F7F00 		movdqu	%xmm0, (%rax)
+ 1098 00ab F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 1098      80F1FFFF 
+ 1099 00b3 F30F7F85 		movdqu	%xmm0, -3664(%rbp)
+ 1099      B0F1FFFF 
+ 1100              	.LBB286:
+ 1101              	.LBB287:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 1102              		.loc 3 1673 0
+ 1103 00bb F30F6F85 		movdqu	-3664(%rbp), %xmm0
+ 1103      B0F1FFFF 
+ 1104 00c3 660F7F85 		movdqa	%xmm0, -4048(%rbp)
+ 1104      30F0FFFF 
+ 1105 00cb 660F6F85 		movdqa	-4048(%rbp), %xmm0
+ 1105      30F0FFFF 
+ 1106 00d3 F30F7F85 		movdqu	%xmm0, -3632(%rbp)
+ 1106      D0F1FFFF 
+ 1107              	.LBB288:
+ 1108              	.LBB289:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 1109              		.loc 1 852 0
+ 1110 00db F30F6F85 		movdqu	-3632(%rbp), %xmm0
+ 1110      D0F1FFFF 
+ 1111 00e3 660F3ADF 		aeskeygenassist	$1, %xmm0, %xmm0
+ 1111      C001
+ 1112              	.LBE289:
+ 1113              	.LBE288:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 1114              		.loc 3 1674 0
+ 1115 00e9 660F7F85 		movdqa	%xmm0, -4048(%rbp)
+ 1115      30F0FFFF 
+ 1116 00f1 660F6F85 		movdqa	-4048(%rbp), %xmm0
+ 1116      30F0FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 68
+
+
+ 1117 00f9 F30F7F85 		movdqu	%xmm0, -3616(%rbp)
+ 1117      E0F1FFFF 
+ 1118 0101 F30F6F85 		movdqu	-3616(%rbp), %xmm0
+ 1118      E0F1FFFF 
+ 1119 0109 F30F7F85 		movdqu	%xmm0, -3584(%rbp)
+ 1119      00F2FFFF 
+ 1120              	.LBB290:
+ 1121              	.LBB291:
+ 1122              	.LBB292:
+ 1123              	.LBB293:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 1124              		.loc 1 450 0
+ 1125 0111 F30F6F85 		movdqu	-3584(%rbp), %xmm0
+ 1125      00F2FFFF 
+ 1126 0119 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 1126      FF
+ 1127              	.LBE293:
+ 1128              	.LBE292:
+ 1129              	.LBE291:
+ 1130              	.LBE290:
+ 1131              	.LBE287:
+ 1132              	.LBE286:
+1737:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1738:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #define KE128(rcon,offset) \
+1739:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     kgastate = AESBCMEMBER(AesKeyGenAssistColumn3) (state, rcon); \
+1740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(ShiftXorColumns) (state); \
+1741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= kgastate; \
+1742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[offset] = state
+1743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x01,1);
+ 1133              		.loc 3 1744 0
+ 1134 011e F30F7F85 		movdqu	%xmm0, -3696(%rbp)
+ 1134      90F1FFFF 
+ 1135 0126 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 1135      80F1FFFF 
+ 1136 012e F30F7F85 		movdqu	%xmm0, -3568(%rbp)
+ 1136      10F2FFFF 
+ 1137              	.LBB294:
+ 1138              	.LBB295:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 1139              		.loc 3 1565 0
+ 1140 0136 F30F6F85 		movdqu	-3568(%rbp), %xmm0
+ 1140      10F2FFFF 
+ 1141 013e 660F7F85 		movdqa	%xmm0, -4032(%rbp)
+ 1141      40F0FFFF 
+ 1142 0146 660F6F85 		movdqa	-4032(%rbp), %xmm0
+ 1142      40F0FFFF 
+ 1143 014e F30F7F85 		movdqu	%xmm0, -3552(%rbp)
+ 1143      20F2FFFF 
+ 1144              	.LBB296:
+ 1145              	.LBB297:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1146              		.loc 3 1278 0
+ 1147 0156 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 1147      00000000 
+ 1148 015e F30F6F8D 		movdqu	-3552(%rbp), %xmm1
+ 1148      20F2FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 69
+
+
+ 1149 0166 F30F7F8D 		movdqu	%xmm1, -3520(%rbp)
+ 1149      40F2FFFF 
+ 1150 016e F30F7F85 		movdqu	%xmm0, -3536(%rbp)
+ 1150      30F2FFFF 
+ 1151 0176 F30F6F85 		movdqu	-3520(%rbp), %xmm0
+ 1151      40F2FFFF 
+ 1152 017e F30F7F85 		movdqu	%xmm0, -3488(%rbp)
+ 1152      60F2FFFF 
+ 1153 0186 F30F6F85 		movdqu	-3536(%rbp), %xmm0
+ 1153      30F2FFFF 
+ 1154 018e F30F7F85 		movdqu	%xmm0, -3504(%rbp)
+ 1154      50F2FFFF 
+ 1155              	.LBB298:
+ 1156              	.LBB299:
+ 1157              	.LBB300:
+ 1158              	.LBB301:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1159              		.loc 1 529 0
+ 1160 0196 F30F6F8D 		movdqu	-3504(%rbp), %xmm1
+ 1160      50F2FFFF 
+ 1161 019e F30F6F85 		movdqu	-3488(%rbp), %xmm0
+ 1161      60F2FFFF 
+ 1162 01a6 660F3800 		pshufb	%xmm1, %xmm0
+ 1162      C1
+ 1163              	.LBE301:
+ 1164              	.LBE300:
+ 1165              	.LBE299:
+ 1166              	.LBE298:
+ 1167              	.LBE297:
+ 1168              	.LBE296:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1169              		.loc 3 1567 0
+ 1170 01ab 660F7F85 		movdqa	%xmm0, -4032(%rbp)
+ 1170      40F0FFFF 
+ 1171 01b3 660F6F85 		movdqa	-4032(%rbp), %xmm0
+ 1171      40F0FFFF 
+ 1172 01bb 660FEF85 		pxor	-3568(%rbp), %xmm0
+ 1172      10F2FFFF 
+ 1173 01c3 F30F7F85 		movdqu	%xmm0, -3568(%rbp)
+ 1173      10F2FFFF 
+ 1174 01cb 660F6F85 		movdqa	-4032(%rbp), %xmm0
+ 1174      40F0FFFF 
+ 1175 01d3 F30F7F85 		movdqu	%xmm0, -3472(%rbp)
+ 1175      70F2FFFF 
+ 1176              	.LBB302:
+ 1177              	.LBB303:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1178              		.loc 3 1278 0
+ 1179 01db 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 1179      00000000 
+ 1180 01e3 F30F6F8D 		movdqu	-3472(%rbp), %xmm1
+ 1180      70F2FFFF 
+ 1181 01eb F30F7F8D 		movdqu	%xmm1, -3440(%rbp)
+ 1181      90F2FFFF 
+ 1182 01f3 F30F7F85 		movdqu	%xmm0, -3456(%rbp)
+ 1182      80F2FFFF 
+ 1183 01fb F30F6F85 		movdqu	-3440(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 70
+
+
+ 1183      90F2FFFF 
+ 1184 0203 F30F7F85 		movdqu	%xmm0, -3408(%rbp)
+ 1184      B0F2FFFF 
+ 1185 020b F30F6F85 		movdqu	-3456(%rbp), %xmm0
+ 1185      80F2FFFF 
+ 1186 0213 F30F7F85 		movdqu	%xmm0, -3424(%rbp)
+ 1186      A0F2FFFF 
+ 1187              	.LBB304:
+ 1188              	.LBB305:
+ 1189              	.LBB306:
+ 1190              	.LBB307:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1191              		.loc 1 529 0
+ 1192 021b F30F6F8D 		movdqu	-3424(%rbp), %xmm1
+ 1192      A0F2FFFF 
+ 1193 0223 F30F6F85 		movdqu	-3408(%rbp), %xmm0
+ 1193      B0F2FFFF 
+ 1194 022b 660F3800 		pshufb	%xmm1, %xmm0
+ 1194      C1
+ 1195              	.LBE307:
+ 1196              	.LBE306:
+ 1197              	.LBE305:
+ 1198              	.LBE304:
+ 1199              	.LBE303:
+ 1200              	.LBE302:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1201              		.loc 3 1568 0
+ 1202 0230 660F7F85 		movdqa	%xmm0, -4032(%rbp)
+ 1202      40F0FFFF 
+ 1203 0238 660F6F85 		movdqa	-4032(%rbp), %xmm0
+ 1203      40F0FFFF 
+ 1204 0240 660FEF85 		pxor	-3568(%rbp), %xmm0
+ 1204      10F2FFFF 
+ 1205 0248 F30F7F85 		movdqu	%xmm0, -3568(%rbp)
+ 1205      10F2FFFF 
+ 1206 0250 660F6F85 		movdqa	-4032(%rbp), %xmm0
+ 1206      40F0FFFF 
+ 1207 0258 F30F7F85 		movdqu	%xmm0, -3392(%rbp)
+ 1207      C0F2FFFF 
+ 1208              	.LBB308:
+ 1209              	.LBB309:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1210              		.loc 3 1278 0
+ 1211 0260 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 1211      00000000 
+ 1212 0268 F30F6F8D 		movdqu	-3392(%rbp), %xmm1
+ 1212      C0F2FFFF 
+ 1213 0270 F30F7F8D 		movdqu	%xmm1, -3360(%rbp)
+ 1213      E0F2FFFF 
+ 1214 0278 F30F7F85 		movdqu	%xmm0, -3376(%rbp)
+ 1214      D0F2FFFF 
+ 1215 0280 F30F6F85 		movdqu	-3360(%rbp), %xmm0
+ 1215      E0F2FFFF 
+ 1216 0288 F30F7F85 		movdqu	%xmm0, -3328(%rbp)
+ 1216      00F3FFFF 
+ 1217 0290 F30F6F85 		movdqu	-3376(%rbp), %xmm0
+ 1217      D0F2FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 71
+
+
+ 1218 0298 F30F7F85 		movdqu	%xmm0, -3344(%rbp)
+ 1218      F0F2FFFF 
+ 1219              	.LBB310:
+ 1220              	.LBB311:
+ 1221              	.LBB312:
+ 1222              	.LBB313:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1223              		.loc 1 529 0
+ 1224 02a0 F30F6F8D 		movdqu	-3344(%rbp), %xmm1
+ 1224      F0F2FFFF 
+ 1225 02a8 F30F6F85 		movdqu	-3328(%rbp), %xmm0
+ 1225      00F3FFFF 
+ 1226 02b0 660F3800 		pshufb	%xmm1, %xmm0
+ 1226      C1
+ 1227              	.LBE313:
+ 1228              	.LBE312:
+ 1229              	.LBE311:
+ 1230              	.LBE310:
+ 1231              	.LBE309:
+ 1232              	.LBE308:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1233              		.loc 3 1569 0
+ 1234 02b5 660F7F85 		movdqa	%xmm0, -4032(%rbp)
+ 1234      40F0FFFF 
+ 1235 02bd 660F6F85 		movdqa	-4032(%rbp), %xmm0
+ 1235      40F0FFFF 
+ 1236 02c5 660FEF85 		pxor	-3568(%rbp), %xmm0
+ 1236      10F2FFFF 
+ 1237 02cd F30F7F85 		movdqu	%xmm0, -3568(%rbp)
+ 1237      10F2FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 1238              		.loc 3 1571 0
+ 1239 02d5 F30F6F85 		movdqu	-3568(%rbp), %xmm0
+ 1239      10F2FFFF 
+ 1240              	.LBE295:
+ 1241              	.LBE294:
+ 1242              		.loc 3 1744 0
+ 1243 02dd F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 1243      80F1FFFF 
+ 1244 02e5 F30F6F85 		movdqu	-3696(%rbp), %xmm0
+ 1244      90F1FFFF 
+ 1245 02ed F30F6F8D 		movdqu	-3712(%rbp), %xmm1
+ 1245      80F1FFFF 
+ 1246 02f5 660FEFC1 		pxor	%xmm1, %xmm0
+ 1247 02f9 F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 1247      80F1FFFF 
+ 1248 0301 488B8578 		movq	-3720(%rbp), %rax
+ 1248      F1FFFF
+ 1249 0308 4883C010 		addq	$16, %rax
+ 1250 030c F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 1250      80F1FFFF 
+ 1251 0314 F30F7F00 		movdqu	%xmm0, (%rax)
+ 1252 0318 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 1252      80F1FFFF 
+ 1253 0320 F30F7F85 		movdqu	%xmm0, -3296(%rbp)
+ 1253      20F3FFFF 
+ 1254              	.LBB314:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 72
+
+
+ 1255              	.LBB315:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 1256              		.loc 3 1673 0
+ 1257 0328 F30F6F85 		movdqu	-3296(%rbp), %xmm0
+ 1257      20F3FFFF 
+ 1258 0330 660F7F85 		movdqa	%xmm0, -4016(%rbp)
+ 1258      50F0FFFF 
+ 1259 0338 660F6F85 		movdqa	-4016(%rbp), %xmm0
+ 1259      50F0FFFF 
+ 1260 0340 F30F7F85 		movdqu	%xmm0, -3264(%rbp)
+ 1260      40F3FFFF 
+ 1261              	.LBB316:
+ 1262              	.LBB317:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 1263              		.loc 1 852 0
+ 1264 0348 F30F6F85 		movdqu	-3264(%rbp), %xmm0
+ 1264      40F3FFFF 
+ 1265 0350 660F3ADF 		aeskeygenassist	$2, %xmm0, %xmm0
+ 1265      C002
+ 1266              	.LBE317:
+ 1267              	.LBE316:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 1268              		.loc 3 1674 0
+ 1269 0356 660F7F85 		movdqa	%xmm0, -4016(%rbp)
+ 1269      50F0FFFF 
+ 1270 035e 660F6F85 		movdqa	-4016(%rbp), %xmm0
+ 1270      50F0FFFF 
+ 1271 0366 F30F7F85 		movdqu	%xmm0, -3248(%rbp)
+ 1271      50F3FFFF 
+ 1272 036e F30F6F85 		movdqu	-3248(%rbp), %xmm0
+ 1272      50F3FFFF 
+ 1273 0376 F30F7F85 		movdqu	%xmm0, -3216(%rbp)
+ 1273      70F3FFFF 
+ 1274              	.LBB318:
+ 1275              	.LBB319:
+ 1276              	.LBB320:
+ 1277              	.LBB321:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 1278              		.loc 1 450 0
+ 1279 037e F30F6F85 		movdqu	-3216(%rbp), %xmm0
+ 1279      70F3FFFF 
+ 1280 0386 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 1280      FF
+ 1281              	.LBE321:
+ 1282              	.LBE320:
+ 1283              	.LBE319:
+ 1284              	.LBE318:
+ 1285              	.LBE315:
+ 1286              	.LBE314:
+1745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x02,2);
+ 1287              		.loc 3 1745 0
+ 1288 038b F30F7F85 		movdqu	%xmm0, -3696(%rbp)
+ 1288      90F1FFFF 
+ 1289 0393 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 1289      80F1FFFF 
+ 1290 039b F30F7F85 		movdqu	%xmm0, -3200(%rbp)
+ 1290      80F3FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 73
+
+
+ 1291              	.LBB322:
+ 1292              	.LBB323:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 1293              		.loc 3 1565 0
+ 1294 03a3 F30F6F85 		movdqu	-3200(%rbp), %xmm0
+ 1294      80F3FFFF 
+ 1295 03ab 660F7F85 		movdqa	%xmm0, -4000(%rbp)
+ 1295      60F0FFFF 
+ 1296 03b3 660F6F85 		movdqa	-4000(%rbp), %xmm0
+ 1296      60F0FFFF 
+ 1297 03bb F30F7F85 		movdqu	%xmm0, -3184(%rbp)
+ 1297      90F3FFFF 
+ 1298              	.LBB324:
+ 1299              	.LBB325:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1300              		.loc 3 1278 0
+ 1301 03c3 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 1301      00000000 
+ 1302 03cb F30F6F8D 		movdqu	-3184(%rbp), %xmm1
+ 1302      90F3FFFF 
+ 1303 03d3 F30F7F8D 		movdqu	%xmm1, -3152(%rbp)
+ 1303      B0F3FFFF 
+ 1304 03db F30F7F85 		movdqu	%xmm0, -3168(%rbp)
+ 1304      A0F3FFFF 
+ 1305 03e3 F30F6F85 		movdqu	-3152(%rbp), %xmm0
+ 1305      B0F3FFFF 
+ 1306 03eb F30F7F85 		movdqu	%xmm0, -3120(%rbp)
+ 1306      D0F3FFFF 
+ 1307 03f3 F30F6F85 		movdqu	-3168(%rbp), %xmm0
+ 1307      A0F3FFFF 
+ 1308 03fb F30F7F85 		movdqu	%xmm0, -3136(%rbp)
+ 1308      C0F3FFFF 
+ 1309              	.LBB326:
+ 1310              	.LBB327:
+ 1311              	.LBB328:
+ 1312              	.LBB329:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1313              		.loc 1 529 0
+ 1314 0403 F30F6F8D 		movdqu	-3136(%rbp), %xmm1
+ 1314      C0F3FFFF 
+ 1315 040b F30F6F85 		movdqu	-3120(%rbp), %xmm0
+ 1315      D0F3FFFF 
+ 1316 0413 660F3800 		pshufb	%xmm1, %xmm0
+ 1316      C1
+ 1317              	.LBE329:
+ 1318              	.LBE328:
+ 1319              	.LBE327:
+ 1320              	.LBE326:
+ 1321              	.LBE325:
+ 1322              	.LBE324:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1323              		.loc 3 1567 0
+ 1324 0418 660F7F85 		movdqa	%xmm0, -4000(%rbp)
+ 1324      60F0FFFF 
+ 1325 0420 660F6F85 		movdqa	-4000(%rbp), %xmm0
+ 1325      60F0FFFF 
+ 1326 0428 660FEF85 		pxor	-3200(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 74
+
+
+ 1326      80F3FFFF 
+ 1327 0430 F30F7F85 		movdqu	%xmm0, -3200(%rbp)
+ 1327      80F3FFFF 
+ 1328 0438 660F6F85 		movdqa	-4000(%rbp), %xmm0
+ 1328      60F0FFFF 
+ 1329 0440 F30F7F85 		movdqu	%xmm0, -3104(%rbp)
+ 1329      E0F3FFFF 
+ 1330              	.LBB330:
+ 1331              	.LBB331:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1332              		.loc 3 1278 0
+ 1333 0448 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 1333      00000000 
+ 1334 0450 F30F6F8D 		movdqu	-3104(%rbp), %xmm1
+ 1334      E0F3FFFF 
+ 1335 0458 F30F7F8D 		movdqu	%xmm1, -3072(%rbp)
+ 1335      00F4FFFF 
+ 1336 0460 F30F7F85 		movdqu	%xmm0, -3088(%rbp)
+ 1336      F0F3FFFF 
+ 1337 0468 F30F6F85 		movdqu	-3072(%rbp), %xmm0
+ 1337      00F4FFFF 
+ 1338 0470 F30F7F85 		movdqu	%xmm0, -3040(%rbp)
+ 1338      20F4FFFF 
+ 1339 0478 F30F6F85 		movdqu	-3088(%rbp), %xmm0
+ 1339      F0F3FFFF 
+ 1340 0480 F30F7F85 		movdqu	%xmm0, -3056(%rbp)
+ 1340      10F4FFFF 
+ 1341              	.LBB332:
+ 1342              	.LBB333:
+ 1343              	.LBB334:
+ 1344              	.LBB335:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1345              		.loc 1 529 0
+ 1346 0488 F30F6F8D 		movdqu	-3056(%rbp), %xmm1
+ 1346      10F4FFFF 
+ 1347 0490 F30F6F85 		movdqu	-3040(%rbp), %xmm0
+ 1347      20F4FFFF 
+ 1348 0498 660F3800 		pshufb	%xmm1, %xmm0
+ 1348      C1
+ 1349              	.LBE335:
+ 1350              	.LBE334:
+ 1351              	.LBE333:
+ 1352              	.LBE332:
+ 1353              	.LBE331:
+ 1354              	.LBE330:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1355              		.loc 3 1568 0
+ 1356 049d 660F7F85 		movdqa	%xmm0, -4000(%rbp)
+ 1356      60F0FFFF 
+ 1357 04a5 660F6F85 		movdqa	-4000(%rbp), %xmm0
+ 1357      60F0FFFF 
+ 1358 04ad 660FEF85 		pxor	-3200(%rbp), %xmm0
+ 1358      80F3FFFF 
+ 1359 04b5 F30F7F85 		movdqu	%xmm0, -3200(%rbp)
+ 1359      80F3FFFF 
+ 1360 04bd 660F6F85 		movdqa	-4000(%rbp), %xmm0
+ 1360      60F0FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 75
+
+
+ 1361 04c5 F30F7F85 		movdqu	%xmm0, -3024(%rbp)
+ 1361      30F4FFFF 
+ 1362              	.LBB336:
+ 1363              	.LBB337:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1364              		.loc 3 1278 0
+ 1365 04cd 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 1365      00000000 
+ 1366 04d5 F30F6F8D 		movdqu	-3024(%rbp), %xmm1
+ 1366      30F4FFFF 
+ 1367 04dd F30F7F8D 		movdqu	%xmm1, -2992(%rbp)
+ 1367      50F4FFFF 
+ 1368 04e5 F30F7F85 		movdqu	%xmm0, -3008(%rbp)
+ 1368      40F4FFFF 
+ 1369 04ed F30F6F85 		movdqu	-2992(%rbp), %xmm0
+ 1369      50F4FFFF 
+ 1370 04f5 F30F7F85 		movdqu	%xmm0, -2960(%rbp)
+ 1370      70F4FFFF 
+ 1371 04fd F30F6F85 		movdqu	-3008(%rbp), %xmm0
+ 1371      40F4FFFF 
+ 1372 0505 F30F7F85 		movdqu	%xmm0, -2976(%rbp)
+ 1372      60F4FFFF 
+ 1373              	.LBB338:
+ 1374              	.LBB339:
+ 1375              	.LBB340:
+ 1376              	.LBB341:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1377              		.loc 1 529 0
+ 1378 050d F30F6F8D 		movdqu	-2976(%rbp), %xmm1
+ 1378      60F4FFFF 
+ 1379 0515 F30F6F85 		movdqu	-2960(%rbp), %xmm0
+ 1379      70F4FFFF 
+ 1380 051d 660F3800 		pshufb	%xmm1, %xmm0
+ 1380      C1
+ 1381              	.LBE341:
+ 1382              	.LBE340:
+ 1383              	.LBE339:
+ 1384              	.LBE338:
+ 1385              	.LBE337:
+ 1386              	.LBE336:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1387              		.loc 3 1569 0
+ 1388 0522 660F7F85 		movdqa	%xmm0, -4000(%rbp)
+ 1388      60F0FFFF 
+ 1389 052a 660F6F85 		movdqa	-4000(%rbp), %xmm0
+ 1389      60F0FFFF 
+ 1390 0532 660FEF85 		pxor	-3200(%rbp), %xmm0
+ 1390      80F3FFFF 
+ 1391 053a F30F7F85 		movdqu	%xmm0, -3200(%rbp)
+ 1391      80F3FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 1392              		.loc 3 1571 0
+ 1393 0542 F30F6F85 		movdqu	-3200(%rbp), %xmm0
+ 1393      80F3FFFF 
+ 1394              	.LBE323:
+ 1395              	.LBE322:
+ 1396              		.loc 3 1745 0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 76
+
+
+ 1397 054a F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 1397      80F1FFFF 
+ 1398 0552 F30F6F85 		movdqu	-3696(%rbp), %xmm0
+ 1398      90F1FFFF 
+ 1399 055a F30F6F8D 		movdqu	-3712(%rbp), %xmm1
+ 1399      80F1FFFF 
+ 1400 0562 660FEFC1 		pxor	%xmm1, %xmm0
+ 1401 0566 F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 1401      80F1FFFF 
+ 1402 056e 488B8578 		movq	-3720(%rbp), %rax
+ 1402      F1FFFF
+ 1403 0575 4883C020 		addq	$32, %rax
+ 1404 0579 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 1404      80F1FFFF 
+ 1405 0581 F30F7F00 		movdqu	%xmm0, (%rax)
+ 1406 0585 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 1406      80F1FFFF 
+ 1407 058d F30F7F85 		movdqu	%xmm0, -2928(%rbp)
+ 1407      90F4FFFF 
+ 1408              	.LBB342:
+ 1409              	.LBB343:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 1410              		.loc 3 1673 0
+ 1411 0595 F30F6F85 		movdqu	-2928(%rbp), %xmm0
+ 1411      90F4FFFF 
+ 1412 059d 660F7F85 		movdqa	%xmm0, -3984(%rbp)
+ 1412      70F0FFFF 
+ 1413 05a5 660F6F85 		movdqa	-3984(%rbp), %xmm0
+ 1413      70F0FFFF 
+ 1414 05ad F30F7F85 		movdqu	%xmm0, -2896(%rbp)
+ 1414      B0F4FFFF 
+ 1415              	.LBB344:
+ 1416              	.LBB345:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 1417              		.loc 1 852 0
+ 1418 05b5 F30F6F85 		movdqu	-2896(%rbp), %xmm0
+ 1418      B0F4FFFF 
+ 1419 05bd 660F3ADF 		aeskeygenassist	$4, %xmm0, %xmm0
+ 1419      C004
+ 1420              	.LBE345:
+ 1421              	.LBE344:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 1422              		.loc 3 1674 0
+ 1423 05c3 660F7F85 		movdqa	%xmm0, -3984(%rbp)
+ 1423      70F0FFFF 
+ 1424 05cb 660F6F85 		movdqa	-3984(%rbp), %xmm0
+ 1424      70F0FFFF 
+ 1425 05d3 F30F7F85 		movdqu	%xmm0, -2880(%rbp)
+ 1425      C0F4FFFF 
+ 1426 05db F30F6F85 		movdqu	-2880(%rbp), %xmm0
+ 1426      C0F4FFFF 
+ 1427 05e3 F30F7F85 		movdqu	%xmm0, -2848(%rbp)
+ 1427      E0F4FFFF 
+ 1428              	.LBB346:
+ 1429              	.LBB347:
+ 1430              	.LBB348:
+ 1431              	.LBB349:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 77
+
+
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 1432              		.loc 1 450 0
+ 1433 05eb F30F6F85 		movdqu	-2848(%rbp), %xmm0
+ 1433      E0F4FFFF 
+ 1434 05f3 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 1434      FF
+ 1435              	.LBE349:
+ 1436              	.LBE348:
+ 1437              	.LBE347:
+ 1438              	.LBE346:
+ 1439              	.LBE343:
+ 1440              	.LBE342:
+1746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x04,3);
+ 1441              		.loc 3 1746 0
+ 1442 05f8 F30F7F85 		movdqu	%xmm0, -3696(%rbp)
+ 1442      90F1FFFF 
+ 1443 0600 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 1443      80F1FFFF 
+ 1444 0608 F30F7F85 		movdqu	%xmm0, -2832(%rbp)
+ 1444      F0F4FFFF 
+ 1445              	.LBB350:
+ 1446              	.LBB351:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 1447              		.loc 3 1565 0
+ 1448 0610 F30F6F85 		movdqu	-2832(%rbp), %xmm0
+ 1448      F0F4FFFF 
+ 1449 0618 660F7F85 		movdqa	%xmm0, -3968(%rbp)
+ 1449      80F0FFFF 
+ 1450 0620 660F6F85 		movdqa	-3968(%rbp), %xmm0
+ 1450      80F0FFFF 
+ 1451 0628 F30F7F85 		movdqu	%xmm0, -2816(%rbp)
+ 1451      00F5FFFF 
+ 1452              	.LBB352:
+ 1453              	.LBB353:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1454              		.loc 3 1278 0
+ 1455 0630 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 1455      00000000 
+ 1456 0638 F30F6F8D 		movdqu	-2816(%rbp), %xmm1
+ 1456      00F5FFFF 
+ 1457 0640 F30F7F8D 		movdqu	%xmm1, -2784(%rbp)
+ 1457      20F5FFFF 
+ 1458 0648 F30F7F85 		movdqu	%xmm0, -2800(%rbp)
+ 1458      10F5FFFF 
+ 1459 0650 F30F6F85 		movdqu	-2784(%rbp), %xmm0
+ 1459      20F5FFFF 
+ 1460 0658 F30F7F85 		movdqu	%xmm0, -2752(%rbp)
+ 1460      40F5FFFF 
+ 1461 0660 F30F6F85 		movdqu	-2800(%rbp), %xmm0
+ 1461      10F5FFFF 
+ 1462 0668 F30F7F85 		movdqu	%xmm0, -2768(%rbp)
+ 1462      30F5FFFF 
+ 1463              	.LBB354:
+ 1464              	.LBB355:
+ 1465              	.LBB356:
+ 1466              	.LBB357:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+
GAS LISTING /tmp/ccPaCTqg.s 			page 78
+
+
+ 1467              		.loc 1 529 0
+ 1468 0670 F30F6F8D 		movdqu	-2768(%rbp), %xmm1
+ 1468      30F5FFFF 
+ 1469 0678 F30F6F85 		movdqu	-2752(%rbp), %xmm0
+ 1469      40F5FFFF 
+ 1470 0680 660F3800 		pshufb	%xmm1, %xmm0
+ 1470      C1
+ 1471              	.LBE357:
+ 1472              	.LBE356:
+ 1473              	.LBE355:
+ 1474              	.LBE354:
+ 1475              	.LBE353:
+ 1476              	.LBE352:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1477              		.loc 3 1567 0
+ 1478 0685 660F7F85 		movdqa	%xmm0, -3968(%rbp)
+ 1478      80F0FFFF 
+ 1479 068d 660F6F85 		movdqa	-3968(%rbp), %xmm0
+ 1479      80F0FFFF 
+ 1480 0695 660FEF85 		pxor	-2832(%rbp), %xmm0
+ 1480      F0F4FFFF 
+ 1481 069d F30F7F85 		movdqu	%xmm0, -2832(%rbp)
+ 1481      F0F4FFFF 
+ 1482 06a5 660F6F85 		movdqa	-3968(%rbp), %xmm0
+ 1482      80F0FFFF 
+ 1483 06ad F30F7F85 		movdqu	%xmm0, -2736(%rbp)
+ 1483      50F5FFFF 
+ 1484              	.LBB358:
+ 1485              	.LBB359:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1486              		.loc 3 1278 0
+ 1487 06b5 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 1487      00000000 
+ 1488 06bd F30F6F8D 		movdqu	-2736(%rbp), %xmm1
+ 1488      50F5FFFF 
+ 1489 06c5 F30F7F8D 		movdqu	%xmm1, -2704(%rbp)
+ 1489      70F5FFFF 
+ 1490 06cd F30F7F85 		movdqu	%xmm0, -2720(%rbp)
+ 1490      60F5FFFF 
+ 1491 06d5 F30F6F85 		movdqu	-2704(%rbp), %xmm0
+ 1491      70F5FFFF 
+ 1492 06dd F30F7F85 		movdqu	%xmm0, -2672(%rbp)
+ 1492      90F5FFFF 
+ 1493 06e5 F30F6F85 		movdqu	-2720(%rbp), %xmm0
+ 1493      60F5FFFF 
+ 1494 06ed F30F7F85 		movdqu	%xmm0, -2688(%rbp)
+ 1494      80F5FFFF 
+ 1495              	.LBB360:
+ 1496              	.LBB361:
+ 1497              	.LBB362:
+ 1498              	.LBB363:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1499              		.loc 1 529 0
+ 1500 06f5 F30F6F8D 		movdqu	-2688(%rbp), %xmm1
+ 1500      80F5FFFF 
+ 1501 06fd F30F6F85 		movdqu	-2672(%rbp), %xmm0
+ 1501      90F5FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 79
+
+
+ 1502 0705 660F3800 		pshufb	%xmm1, %xmm0
+ 1502      C1
+ 1503              	.LBE363:
+ 1504              	.LBE362:
+ 1505              	.LBE361:
+ 1506              	.LBE360:
+ 1507              	.LBE359:
+ 1508              	.LBE358:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1509              		.loc 3 1568 0
+ 1510 070a 660F7F85 		movdqa	%xmm0, -3968(%rbp)
+ 1510      80F0FFFF 
+ 1511 0712 660F6F85 		movdqa	-3968(%rbp), %xmm0
+ 1511      80F0FFFF 
+ 1512 071a 660FEF85 		pxor	-2832(%rbp), %xmm0
+ 1512      F0F4FFFF 
+ 1513 0722 F30F7F85 		movdqu	%xmm0, -2832(%rbp)
+ 1513      F0F4FFFF 
+ 1514 072a 660F6F85 		movdqa	-3968(%rbp), %xmm0
+ 1514      80F0FFFF 
+ 1515 0732 F30F7F85 		movdqu	%xmm0, -2656(%rbp)
+ 1515      A0F5FFFF 
+ 1516              	.LBB364:
+ 1517              	.LBB365:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1518              		.loc 3 1278 0
+ 1519 073a 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 1519      00000000 
+ 1520 0742 F30F6F8D 		movdqu	-2656(%rbp), %xmm1
+ 1520      A0F5FFFF 
+ 1521 074a F30F7F8D 		movdqu	%xmm1, -2624(%rbp)
+ 1521      C0F5FFFF 
+ 1522 0752 F30F7F85 		movdqu	%xmm0, -2640(%rbp)
+ 1522      B0F5FFFF 
+ 1523 075a F30F6F85 		movdqu	-2624(%rbp), %xmm0
+ 1523      C0F5FFFF 
+ 1524 0762 F30F7F85 		movdqu	%xmm0, -2592(%rbp)
+ 1524      E0F5FFFF 
+ 1525 076a F30F6F85 		movdqu	-2640(%rbp), %xmm0
+ 1525      B0F5FFFF 
+ 1526 0772 F30F7F85 		movdqu	%xmm0, -2608(%rbp)
+ 1526      D0F5FFFF 
+ 1527              	.LBB366:
+ 1528              	.LBB367:
+ 1529              	.LBB368:
+ 1530              	.LBB369:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1531              		.loc 1 529 0
+ 1532 077a F30F6F8D 		movdqu	-2608(%rbp), %xmm1
+ 1532      D0F5FFFF 
+ 1533 0782 F30F6F85 		movdqu	-2592(%rbp), %xmm0
+ 1533      E0F5FFFF 
+ 1534 078a 660F3800 		pshufb	%xmm1, %xmm0
+ 1534      C1
+ 1535              	.LBE369:
+ 1536              	.LBE368:
+ 1537              	.LBE367:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 80
+
+
+ 1538              	.LBE366:
+ 1539              	.LBE365:
+ 1540              	.LBE364:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1541              		.loc 3 1569 0
+ 1542 078f 660F7F85 		movdqa	%xmm0, -3968(%rbp)
+ 1542      80F0FFFF 
+ 1543 0797 660F6F85 		movdqa	-3968(%rbp), %xmm0
+ 1543      80F0FFFF 
+ 1544 079f 660FEF85 		pxor	-2832(%rbp), %xmm0
+ 1544      F0F4FFFF 
+ 1545 07a7 F30F7F85 		movdqu	%xmm0, -2832(%rbp)
+ 1545      F0F4FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 1546              		.loc 3 1571 0
+ 1547 07af F30F6F85 		movdqu	-2832(%rbp), %xmm0
+ 1547      F0F4FFFF 
+ 1548              	.LBE351:
+ 1549              	.LBE350:
+ 1550              		.loc 3 1746 0
+ 1551 07b7 F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 1551      80F1FFFF 
+ 1552 07bf F30F6F85 		movdqu	-3696(%rbp), %xmm0
+ 1552      90F1FFFF 
+ 1553 07c7 F30F6F8D 		movdqu	-3712(%rbp), %xmm1
+ 1553      80F1FFFF 
+ 1554 07cf 660FEFC1 		pxor	%xmm1, %xmm0
+ 1555 07d3 F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 1555      80F1FFFF 
+ 1556 07db 488B8578 		movq	-3720(%rbp), %rax
+ 1556      F1FFFF
+ 1557 07e2 4883C030 		addq	$48, %rax
+ 1558 07e6 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 1558      80F1FFFF 
+ 1559 07ee F30F7F00 		movdqu	%xmm0, (%rax)
+ 1560 07f2 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 1560      80F1FFFF 
+ 1561 07fa F30F7F85 		movdqu	%xmm0, -2560(%rbp)
+ 1561      00F6FFFF 
+ 1562              	.LBB370:
+ 1563              	.LBB371:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 1564              		.loc 3 1673 0
+ 1565 0802 F30F6F85 		movdqu	-2560(%rbp), %xmm0
+ 1565      00F6FFFF 
+ 1566 080a 660F7F85 		movdqa	%xmm0, -3952(%rbp)
+ 1566      90F0FFFF 
+ 1567 0812 660F6F85 		movdqa	-3952(%rbp), %xmm0
+ 1567      90F0FFFF 
+ 1568 081a F30F7F85 		movdqu	%xmm0, -2528(%rbp)
+ 1568      20F6FFFF 
+ 1569              	.LBB372:
+ 1570              	.LBB373:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 1571              		.loc 1 852 0
+ 1572 0822 F30F6F85 		movdqu	-2528(%rbp), %xmm0
+ 1572      20F6FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 81
+
+
+ 1573 082a 660F3ADF 		aeskeygenassist	$8, %xmm0, %xmm0
+ 1573      C008
+ 1574              	.LBE373:
+ 1575              	.LBE372:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 1576              		.loc 3 1674 0
+ 1577 0830 660F7F85 		movdqa	%xmm0, -3952(%rbp)
+ 1577      90F0FFFF 
+ 1578 0838 660F6F85 		movdqa	-3952(%rbp), %xmm0
+ 1578      90F0FFFF 
+ 1579 0840 F30F7F85 		movdqu	%xmm0, -2512(%rbp)
+ 1579      30F6FFFF 
+ 1580 0848 F30F6F85 		movdqu	-2512(%rbp), %xmm0
+ 1580      30F6FFFF 
+ 1581 0850 F30F7F85 		movdqu	%xmm0, -2480(%rbp)
+ 1581      50F6FFFF 
+ 1582              	.LBB374:
+ 1583              	.LBB375:
+ 1584              	.LBB376:
+ 1585              	.LBB377:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 1586              		.loc 1 450 0
+ 1587 0858 F30F6F85 		movdqu	-2480(%rbp), %xmm0
+ 1587      50F6FFFF 
+ 1588 0860 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 1588      FF
+ 1589              	.LBE377:
+ 1590              	.LBE376:
+ 1591              	.LBE375:
+ 1592              	.LBE374:
+ 1593              	.LBE371:
+ 1594              	.LBE370:
+1747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x08,4);
+ 1595              		.loc 3 1747 0
+ 1596 0865 F30F7F85 		movdqu	%xmm0, -3696(%rbp)
+ 1596      90F1FFFF 
+ 1597 086d F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 1597      80F1FFFF 
+ 1598 0875 F30F7F85 		movdqu	%xmm0, -2464(%rbp)
+ 1598      60F6FFFF 
+ 1599              	.LBB378:
+ 1600              	.LBB379:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 1601              		.loc 3 1565 0
+ 1602 087d F30F6F85 		movdqu	-2464(%rbp), %xmm0
+ 1602      60F6FFFF 
+ 1603 0885 660F7F85 		movdqa	%xmm0, -3936(%rbp)
+ 1603      A0F0FFFF 
+ 1604 088d 660F6F85 		movdqa	-3936(%rbp), %xmm0
+ 1604      A0F0FFFF 
+ 1605 0895 F30F7F85 		movdqu	%xmm0, -2448(%rbp)
+ 1605      70F6FFFF 
+ 1606              	.LBB380:
+ 1607              	.LBB381:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1608              		.loc 3 1278 0
+ 1609 089d 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 82
+
+
+ 1609      00000000 
+ 1610 08a5 F30F6F8D 		movdqu	-2448(%rbp), %xmm1
+ 1610      70F6FFFF 
+ 1611 08ad F30F7F8D 		movdqu	%xmm1, -2416(%rbp)
+ 1611      90F6FFFF 
+ 1612 08b5 F30F7F85 		movdqu	%xmm0, -2432(%rbp)
+ 1612      80F6FFFF 
+ 1613 08bd F30F6F85 		movdqu	-2416(%rbp), %xmm0
+ 1613      90F6FFFF 
+ 1614 08c5 F30F7F85 		movdqu	%xmm0, -2384(%rbp)
+ 1614      B0F6FFFF 
+ 1615 08cd F30F6F85 		movdqu	-2432(%rbp), %xmm0
+ 1615      80F6FFFF 
+ 1616 08d5 F30F7F85 		movdqu	%xmm0, -2400(%rbp)
+ 1616      A0F6FFFF 
+ 1617              	.LBB382:
+ 1618              	.LBB383:
+ 1619              	.LBB384:
+ 1620              	.LBB385:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1621              		.loc 1 529 0
+ 1622 08dd F30F6F8D 		movdqu	-2400(%rbp), %xmm1
+ 1622      A0F6FFFF 
+ 1623 08e5 F30F6F85 		movdqu	-2384(%rbp), %xmm0
+ 1623      B0F6FFFF 
+ 1624 08ed 660F3800 		pshufb	%xmm1, %xmm0
+ 1624      C1
+ 1625              	.LBE385:
+ 1626              	.LBE384:
+ 1627              	.LBE383:
+ 1628              	.LBE382:
+ 1629              	.LBE381:
+ 1630              	.LBE380:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1631              		.loc 3 1567 0
+ 1632 08f2 660F7F85 		movdqa	%xmm0, -3936(%rbp)
+ 1632      A0F0FFFF 
+ 1633 08fa 660F6F85 		movdqa	-3936(%rbp), %xmm0
+ 1633      A0F0FFFF 
+ 1634 0902 660FEF85 		pxor	-2464(%rbp), %xmm0
+ 1634      60F6FFFF 
+ 1635 090a F30F7F85 		movdqu	%xmm0, -2464(%rbp)
+ 1635      60F6FFFF 
+ 1636 0912 660F6F85 		movdqa	-3936(%rbp), %xmm0
+ 1636      A0F0FFFF 
+ 1637 091a F30F7F85 		movdqu	%xmm0, -2368(%rbp)
+ 1637      C0F6FFFF 
+ 1638              	.LBB386:
+ 1639              	.LBB387:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1640              		.loc 3 1278 0
+ 1641 0922 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 1641      00000000 
+ 1642 092a F30F6F8D 		movdqu	-2368(%rbp), %xmm1
+ 1642      C0F6FFFF 
+ 1643 0932 F30F7F8D 		movdqu	%xmm1, -2336(%rbp)
+ 1643      E0F6FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 83
+
+
+ 1644 093a F30F7F85 		movdqu	%xmm0, -2352(%rbp)
+ 1644      D0F6FFFF 
+ 1645 0942 F30F6F85 		movdqu	-2336(%rbp), %xmm0
+ 1645      E0F6FFFF 
+ 1646 094a F30F7F85 		movdqu	%xmm0, -2304(%rbp)
+ 1646      00F7FFFF 
+ 1647 0952 F30F6F85 		movdqu	-2352(%rbp), %xmm0
+ 1647      D0F6FFFF 
+ 1648 095a F30F7F85 		movdqu	%xmm0, -2320(%rbp)
+ 1648      F0F6FFFF 
+ 1649              	.LBB388:
+ 1650              	.LBB389:
+ 1651              	.LBB390:
+ 1652              	.LBB391:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1653              		.loc 1 529 0
+ 1654 0962 F30F6F8D 		movdqu	-2320(%rbp), %xmm1
+ 1654      F0F6FFFF 
+ 1655 096a F30F6F85 		movdqu	-2304(%rbp), %xmm0
+ 1655      00F7FFFF 
+ 1656 0972 660F3800 		pshufb	%xmm1, %xmm0
+ 1656      C1
+ 1657              	.LBE391:
+ 1658              	.LBE390:
+ 1659              	.LBE389:
+ 1660              	.LBE388:
+ 1661              	.LBE387:
+ 1662              	.LBE386:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1663              		.loc 3 1568 0
+ 1664 0977 660F7F85 		movdqa	%xmm0, -3936(%rbp)
+ 1664      A0F0FFFF 
+ 1665 097f 660F6F85 		movdqa	-3936(%rbp), %xmm0
+ 1665      A0F0FFFF 
+ 1666 0987 660FEF85 		pxor	-2464(%rbp), %xmm0
+ 1666      60F6FFFF 
+ 1667 098f F30F7F85 		movdqu	%xmm0, -2464(%rbp)
+ 1667      60F6FFFF 
+ 1668 0997 660F6F85 		movdqa	-3936(%rbp), %xmm0
+ 1668      A0F0FFFF 
+ 1669 099f F30F7F85 		movdqu	%xmm0, -2288(%rbp)
+ 1669      10F7FFFF 
+ 1670              	.LBB392:
+ 1671              	.LBB393:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1672              		.loc 3 1278 0
+ 1673 09a7 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 1673      00000000 
+ 1674 09af F30F6F8D 		movdqu	-2288(%rbp), %xmm1
+ 1674      10F7FFFF 
+ 1675 09b7 F30F7F8D 		movdqu	%xmm1, -2256(%rbp)
+ 1675      30F7FFFF 
+ 1676 09bf F30F7F85 		movdqu	%xmm0, -2272(%rbp)
+ 1676      20F7FFFF 
+ 1677 09c7 F30F6F85 		movdqu	-2256(%rbp), %xmm0
+ 1677      30F7FFFF 
+ 1678 09cf F30F7F85 		movdqu	%xmm0, -2224(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 84
+
+
+ 1678      50F7FFFF 
+ 1679 09d7 F30F6F85 		movdqu	-2272(%rbp), %xmm0
+ 1679      20F7FFFF 
+ 1680 09df F30F7F85 		movdqu	%xmm0, -2240(%rbp)
+ 1680      40F7FFFF 
+ 1681              	.LBB394:
+ 1682              	.LBB395:
+ 1683              	.LBB396:
+ 1684              	.LBB397:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1685              		.loc 1 529 0
+ 1686 09e7 F30F6F8D 		movdqu	-2240(%rbp), %xmm1
+ 1686      40F7FFFF 
+ 1687 09ef F30F6F85 		movdqu	-2224(%rbp), %xmm0
+ 1687      50F7FFFF 
+ 1688 09f7 660F3800 		pshufb	%xmm1, %xmm0
+ 1688      C1
+ 1689              	.LBE397:
+ 1690              	.LBE396:
+ 1691              	.LBE395:
+ 1692              	.LBE394:
+ 1693              	.LBE393:
+ 1694              	.LBE392:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1695              		.loc 3 1569 0
+ 1696 09fc 660F7F85 		movdqa	%xmm0, -3936(%rbp)
+ 1696      A0F0FFFF 
+ 1697 0a04 660F6F85 		movdqa	-3936(%rbp), %xmm0
+ 1697      A0F0FFFF 
+ 1698 0a0c 660FEF85 		pxor	-2464(%rbp), %xmm0
+ 1698      60F6FFFF 
+ 1699 0a14 F30F7F85 		movdqu	%xmm0, -2464(%rbp)
+ 1699      60F6FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 1700              		.loc 3 1571 0
+ 1701 0a1c F30F6F85 		movdqu	-2464(%rbp), %xmm0
+ 1701      60F6FFFF 
+ 1702              	.LBE379:
+ 1703              	.LBE378:
+ 1704              		.loc 3 1747 0
+ 1705 0a24 F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 1705      80F1FFFF 
+ 1706 0a2c F30F6F85 		movdqu	-3696(%rbp), %xmm0
+ 1706      90F1FFFF 
+ 1707 0a34 F30F6F8D 		movdqu	-3712(%rbp), %xmm1
+ 1707      80F1FFFF 
+ 1708 0a3c 660FEFC1 		pxor	%xmm1, %xmm0
+ 1709 0a40 F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 1709      80F1FFFF 
+ 1710 0a48 488B8578 		movq	-3720(%rbp), %rax
+ 1710      F1FFFF
+ 1711 0a4f 4883C040 		addq	$64, %rax
+ 1712 0a53 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 1712      80F1FFFF 
+ 1713 0a5b F30F7F00 		movdqu	%xmm0, (%rax)
+ 1714 0a5f F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 1714      80F1FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 85
+
+
+ 1715 0a67 F30F7F85 		movdqu	%xmm0, -2192(%rbp)
+ 1715      70F7FFFF 
+ 1716              	.LBB398:
+ 1717              	.LBB399:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 1718              		.loc 3 1673 0
+ 1719 0a6f F30F6F85 		movdqu	-2192(%rbp), %xmm0
+ 1719      70F7FFFF 
+ 1720 0a77 660F7F85 		movdqa	%xmm0, -3920(%rbp)
+ 1720      B0F0FFFF 
+ 1721 0a7f 660F6F85 		movdqa	-3920(%rbp), %xmm0
+ 1721      B0F0FFFF 
+ 1722 0a87 F30F7F85 		movdqu	%xmm0, -2160(%rbp)
+ 1722      90F7FFFF 
+ 1723              	.LBB400:
+ 1724              	.LBB401:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 1725              		.loc 1 852 0
+ 1726 0a8f F30F6F85 		movdqu	-2160(%rbp), %xmm0
+ 1726      90F7FFFF 
+ 1727 0a97 660F3ADF 		aeskeygenassist	$16, %xmm0, %xmm0
+ 1727      C010
+ 1728              	.LBE401:
+ 1729              	.LBE400:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 1730              		.loc 3 1674 0
+ 1731 0a9d 660F7F85 		movdqa	%xmm0, -3920(%rbp)
+ 1731      B0F0FFFF 
+ 1732 0aa5 660F6F85 		movdqa	-3920(%rbp), %xmm0
+ 1732      B0F0FFFF 
+ 1733 0aad F30F7F85 		movdqu	%xmm0, -2144(%rbp)
+ 1733      A0F7FFFF 
+ 1734 0ab5 F30F6F85 		movdqu	-2144(%rbp), %xmm0
+ 1734      A0F7FFFF 
+ 1735 0abd F30F7F85 		movdqu	%xmm0, -2112(%rbp)
+ 1735      C0F7FFFF 
+ 1736              	.LBB402:
+ 1737              	.LBB403:
+ 1738              	.LBB404:
+ 1739              	.LBB405:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 1740              		.loc 1 450 0
+ 1741 0ac5 F30F6F85 		movdqu	-2112(%rbp), %xmm0
+ 1741      C0F7FFFF 
+ 1742 0acd 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 1742      FF
+ 1743              	.LBE405:
+ 1744              	.LBE404:
+ 1745              	.LBE403:
+ 1746              	.LBE402:
+ 1747              	.LBE399:
+ 1748              	.LBE398:
+1748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x10,5);
+ 1749              		.loc 3 1748 0
+ 1750 0ad2 F30F7F85 		movdqu	%xmm0, -3696(%rbp)
+ 1750      90F1FFFF 
+ 1751 0ada F30F6F85 		movdqu	-3712(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 86
+
+
+ 1751      80F1FFFF 
+ 1752 0ae2 F30F7F85 		movdqu	%xmm0, -2096(%rbp)
+ 1752      D0F7FFFF 
+ 1753              	.LBB406:
+ 1754              	.LBB407:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 1755              		.loc 3 1565 0
+ 1756 0aea F30F6F85 		movdqu	-2096(%rbp), %xmm0
+ 1756      D0F7FFFF 
+ 1757 0af2 660F7F85 		movdqa	%xmm0, -3904(%rbp)
+ 1757      C0F0FFFF 
+ 1758 0afa 660F6F85 		movdqa	-3904(%rbp), %xmm0
+ 1758      C0F0FFFF 
+ 1759 0b02 F30F7F85 		movdqu	%xmm0, -2080(%rbp)
+ 1759      E0F7FFFF 
+ 1760              	.LBB408:
+ 1761              	.LBB409:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1762              		.loc 3 1278 0
+ 1763 0b0a 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 1763      00000000 
+ 1764 0b12 F30F6F8D 		movdqu	-2080(%rbp), %xmm1
+ 1764      E0F7FFFF 
+ 1765 0b1a F30F7F8D 		movdqu	%xmm1, -2048(%rbp)
+ 1765      00F8FFFF 
+ 1766 0b22 F30F7F85 		movdqu	%xmm0, -2064(%rbp)
+ 1766      F0F7FFFF 
+ 1767 0b2a F30F6F85 		movdqu	-2048(%rbp), %xmm0
+ 1767      00F8FFFF 
+ 1768 0b32 F30F7F85 		movdqu	%xmm0, -2016(%rbp)
+ 1768      20F8FFFF 
+ 1769 0b3a F30F6F85 		movdqu	-2064(%rbp), %xmm0
+ 1769      F0F7FFFF 
+ 1770 0b42 F30F7F85 		movdqu	%xmm0, -2032(%rbp)
+ 1770      10F8FFFF 
+ 1771              	.LBB410:
+ 1772              	.LBB411:
+ 1773              	.LBB412:
+ 1774              	.LBB413:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1775              		.loc 1 529 0
+ 1776 0b4a F30F6F8D 		movdqu	-2032(%rbp), %xmm1
+ 1776      10F8FFFF 
+ 1777 0b52 F30F6F85 		movdqu	-2016(%rbp), %xmm0
+ 1777      20F8FFFF 
+ 1778 0b5a 660F3800 		pshufb	%xmm1, %xmm0
+ 1778      C1
+ 1779              	.LBE413:
+ 1780              	.LBE412:
+ 1781              	.LBE411:
+ 1782              	.LBE410:
+ 1783              	.LBE409:
+ 1784              	.LBE408:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1785              		.loc 3 1567 0
+ 1786 0b5f 660F7F85 		movdqa	%xmm0, -3904(%rbp)
+ 1786      C0F0FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 87
+
+
+ 1787 0b67 660F6F85 		movdqa	-3904(%rbp), %xmm0
+ 1787      C0F0FFFF 
+ 1788 0b6f 660FEF85 		pxor	-2096(%rbp), %xmm0
+ 1788      D0F7FFFF 
+ 1789 0b77 F30F7F85 		movdqu	%xmm0, -2096(%rbp)
+ 1789      D0F7FFFF 
+ 1790 0b7f 660F6F85 		movdqa	-3904(%rbp), %xmm0
+ 1790      C0F0FFFF 
+ 1791 0b87 F30F7F85 		movdqu	%xmm0, -2000(%rbp)
+ 1791      30F8FFFF 
+ 1792              	.LBB414:
+ 1793              	.LBB415:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1794              		.loc 3 1278 0
+ 1795 0b8f 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 1795      00000000 
+ 1796 0b97 F30F6F8D 		movdqu	-2000(%rbp), %xmm1
+ 1796      30F8FFFF 
+ 1797 0b9f F30F7F8D 		movdqu	%xmm1, -1968(%rbp)
+ 1797      50F8FFFF 
+ 1798 0ba7 F30F7F85 		movdqu	%xmm0, -1984(%rbp)
+ 1798      40F8FFFF 
+ 1799 0baf F30F6F85 		movdqu	-1968(%rbp), %xmm0
+ 1799      50F8FFFF 
+ 1800 0bb7 F30F7F85 		movdqu	%xmm0, -1936(%rbp)
+ 1800      70F8FFFF 
+ 1801 0bbf F30F6F85 		movdqu	-1984(%rbp), %xmm0
+ 1801      40F8FFFF 
+ 1802 0bc7 F30F7F85 		movdqu	%xmm0, -1952(%rbp)
+ 1802      60F8FFFF 
+ 1803              	.LBB416:
+ 1804              	.LBB417:
+ 1805              	.LBB418:
+ 1806              	.LBB419:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1807              		.loc 1 529 0
+ 1808 0bcf F30F6F8D 		movdqu	-1952(%rbp), %xmm1
+ 1808      60F8FFFF 
+ 1809 0bd7 F30F6F85 		movdqu	-1936(%rbp), %xmm0
+ 1809      70F8FFFF 
+ 1810 0bdf 660F3800 		pshufb	%xmm1, %xmm0
+ 1810      C1
+ 1811              	.LBE419:
+ 1812              	.LBE418:
+ 1813              	.LBE417:
+ 1814              	.LBE416:
+ 1815              	.LBE415:
+ 1816              	.LBE414:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1817              		.loc 3 1568 0
+ 1818 0be4 660F7F85 		movdqa	%xmm0, -3904(%rbp)
+ 1818      C0F0FFFF 
+ 1819 0bec 660F6F85 		movdqa	-3904(%rbp), %xmm0
+ 1819      C0F0FFFF 
+ 1820 0bf4 660FEF85 		pxor	-2096(%rbp), %xmm0
+ 1820      D0F7FFFF 
+ 1821 0bfc F30F7F85 		movdqu	%xmm0, -2096(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 88
+
+
+ 1821      D0F7FFFF 
+ 1822 0c04 660F6F85 		movdqa	-3904(%rbp), %xmm0
+ 1822      C0F0FFFF 
+ 1823 0c0c F30F7F85 		movdqu	%xmm0, -1920(%rbp)
+ 1823      80F8FFFF 
+ 1824              	.LBB420:
+ 1825              	.LBB421:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1826              		.loc 3 1278 0
+ 1827 0c14 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 1827      00000000 
+ 1828 0c1c F30F6F8D 		movdqu	-1920(%rbp), %xmm1
+ 1828      80F8FFFF 
+ 1829 0c24 F30F7F8D 		movdqu	%xmm1, -1888(%rbp)
+ 1829      A0F8FFFF 
+ 1830 0c2c F30F7F85 		movdqu	%xmm0, -1904(%rbp)
+ 1830      90F8FFFF 
+ 1831 0c34 F30F6F85 		movdqu	-1888(%rbp), %xmm0
+ 1831      A0F8FFFF 
+ 1832 0c3c F30F7F85 		movdqu	%xmm0, -1856(%rbp)
+ 1832      C0F8FFFF 
+ 1833 0c44 F30F6F85 		movdqu	-1904(%rbp), %xmm0
+ 1833      90F8FFFF 
+ 1834 0c4c F30F7F85 		movdqu	%xmm0, -1872(%rbp)
+ 1834      B0F8FFFF 
+ 1835              	.LBB422:
+ 1836              	.LBB423:
+ 1837              	.LBB424:
+ 1838              	.LBB425:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1839              		.loc 1 529 0
+ 1840 0c54 F30F6F8D 		movdqu	-1872(%rbp), %xmm1
+ 1840      B0F8FFFF 
+ 1841 0c5c F30F6F85 		movdqu	-1856(%rbp), %xmm0
+ 1841      C0F8FFFF 
+ 1842 0c64 660F3800 		pshufb	%xmm1, %xmm0
+ 1842      C1
+ 1843              	.LBE425:
+ 1844              	.LBE424:
+ 1845              	.LBE423:
+ 1846              	.LBE422:
+ 1847              	.LBE421:
+ 1848              	.LBE420:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1849              		.loc 3 1569 0
+ 1850 0c69 660F7F85 		movdqa	%xmm0, -3904(%rbp)
+ 1850      C0F0FFFF 
+ 1851 0c71 660F6F85 		movdqa	-3904(%rbp), %xmm0
+ 1851      C0F0FFFF 
+ 1852 0c79 660FEF85 		pxor	-2096(%rbp), %xmm0
+ 1852      D0F7FFFF 
+ 1853 0c81 F30F7F85 		movdqu	%xmm0, -2096(%rbp)
+ 1853      D0F7FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 1854              		.loc 3 1571 0
+ 1855 0c89 F30F6F85 		movdqu	-2096(%rbp), %xmm0
+ 1855      D0F7FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 89
+
+
+ 1856              	.LBE407:
+ 1857              	.LBE406:
+ 1858              		.loc 3 1748 0
+ 1859 0c91 F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 1859      80F1FFFF 
+ 1860 0c99 F30F6F85 		movdqu	-3696(%rbp), %xmm0
+ 1860      90F1FFFF 
+ 1861 0ca1 F30F6F8D 		movdqu	-3712(%rbp), %xmm1
+ 1861      80F1FFFF 
+ 1862 0ca9 660FEFC1 		pxor	%xmm1, %xmm0
+ 1863 0cad F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 1863      80F1FFFF 
+ 1864 0cb5 488B8578 		movq	-3720(%rbp), %rax
+ 1864      F1FFFF
+ 1865 0cbc 4883C050 		addq	$80, %rax
+ 1866 0cc0 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 1866      80F1FFFF 
+ 1867 0cc8 F30F7F00 		movdqu	%xmm0, (%rax)
+ 1868 0ccc F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 1868      80F1FFFF 
+ 1869 0cd4 F30F7F85 		movdqu	%xmm0, -1824(%rbp)
+ 1869      E0F8FFFF 
+ 1870              	.LBB426:
+ 1871              	.LBB427:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 1872              		.loc 3 1673 0
+ 1873 0cdc F30F6F85 		movdqu	-1824(%rbp), %xmm0
+ 1873      E0F8FFFF 
+ 1874 0ce4 660F7F85 		movdqa	%xmm0, -3888(%rbp)
+ 1874      D0F0FFFF 
+ 1875 0cec 660F6F85 		movdqa	-3888(%rbp), %xmm0
+ 1875      D0F0FFFF 
+ 1876 0cf4 F30F7F85 		movdqu	%xmm0, -1792(%rbp)
+ 1876      00F9FFFF 
+ 1877              	.LBB428:
+ 1878              	.LBB429:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 1879              		.loc 1 852 0
+ 1880 0cfc F30F6F85 		movdqu	-1792(%rbp), %xmm0
+ 1880      00F9FFFF 
+ 1881 0d04 660F3ADF 		aeskeygenassist	$32, %xmm0, %xmm0
+ 1881      C020
+ 1882              	.LBE429:
+ 1883              	.LBE428:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 1884              		.loc 3 1674 0
+ 1885 0d0a 660F7F85 		movdqa	%xmm0, -3888(%rbp)
+ 1885      D0F0FFFF 
+ 1886 0d12 660F6F85 		movdqa	-3888(%rbp), %xmm0
+ 1886      D0F0FFFF 
+ 1887 0d1a F30F7F85 		movdqu	%xmm0, -1776(%rbp)
+ 1887      10F9FFFF 
+ 1888 0d22 F30F6F85 		movdqu	-1776(%rbp), %xmm0
+ 1888      10F9FFFF 
+ 1889 0d2a F30F7F85 		movdqu	%xmm0, -1744(%rbp)
+ 1889      30F9FFFF 
+ 1890              	.LBB430:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 90
+
+
+ 1891              	.LBB431:
+ 1892              	.LBB432:
+ 1893              	.LBB433:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 1894              		.loc 1 450 0
+ 1895 0d32 F30F6F85 		movdqu	-1744(%rbp), %xmm0
+ 1895      30F9FFFF 
+ 1896 0d3a 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 1896      FF
+ 1897              	.LBE433:
+ 1898              	.LBE432:
+ 1899              	.LBE431:
+ 1900              	.LBE430:
+ 1901              	.LBE427:
+ 1902              	.LBE426:
+1749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x20,6);
+ 1903              		.loc 3 1749 0
+ 1904 0d3f F30F7F85 		movdqu	%xmm0, -3696(%rbp)
+ 1904      90F1FFFF 
+ 1905 0d47 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 1905      80F1FFFF 
+ 1906 0d4f F30F7F85 		movdqu	%xmm0, -1728(%rbp)
+ 1906      40F9FFFF 
+ 1907              	.LBB434:
+ 1908              	.LBB435:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 1909              		.loc 3 1565 0
+ 1910 0d57 F30F6F85 		movdqu	-1728(%rbp), %xmm0
+ 1910      40F9FFFF 
+ 1911 0d5f 660F7F85 		movdqa	%xmm0, -3872(%rbp)
+ 1911      E0F0FFFF 
+ 1912 0d67 660F6F85 		movdqa	-3872(%rbp), %xmm0
+ 1912      E0F0FFFF 
+ 1913 0d6f F30F7F85 		movdqu	%xmm0, -1712(%rbp)
+ 1913      50F9FFFF 
+ 1914              	.LBB436:
+ 1915              	.LBB437:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1916              		.loc 3 1278 0
+ 1917 0d77 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 1917      00000000 
+ 1918 0d7f F30F6F8D 		movdqu	-1712(%rbp), %xmm1
+ 1918      50F9FFFF 
+ 1919 0d87 F30F7F8D 		movdqu	%xmm1, -1680(%rbp)
+ 1919      70F9FFFF 
+ 1920 0d8f F30F7F85 		movdqu	%xmm0, -1696(%rbp)
+ 1920      60F9FFFF 
+ 1921 0d97 F30F6F85 		movdqu	-1680(%rbp), %xmm0
+ 1921      70F9FFFF 
+ 1922 0d9f F30F7F85 		movdqu	%xmm0, -1648(%rbp)
+ 1922      90F9FFFF 
+ 1923 0da7 F30F6F85 		movdqu	-1696(%rbp), %xmm0
+ 1923      60F9FFFF 
+ 1924 0daf F30F7F85 		movdqu	%xmm0, -1664(%rbp)
+ 1924      80F9FFFF 
+ 1925              	.LBB438:
+ 1926              	.LBB439:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 91
+
+
+ 1927              	.LBB440:
+ 1928              	.LBB441:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1929              		.loc 1 529 0
+ 1930 0db7 F30F6F8D 		movdqu	-1664(%rbp), %xmm1
+ 1930      80F9FFFF 
+ 1931 0dbf F30F6F85 		movdqu	-1648(%rbp), %xmm0
+ 1931      90F9FFFF 
+ 1932 0dc7 660F3800 		pshufb	%xmm1, %xmm0
+ 1932      C1
+ 1933              	.LBE441:
+ 1934              	.LBE440:
+ 1935              	.LBE439:
+ 1936              	.LBE438:
+ 1937              	.LBE437:
+ 1938              	.LBE436:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1939              		.loc 3 1567 0
+ 1940 0dcc 660F7F85 		movdqa	%xmm0, -3872(%rbp)
+ 1940      E0F0FFFF 
+ 1941 0dd4 660F6F85 		movdqa	-3872(%rbp), %xmm0
+ 1941      E0F0FFFF 
+ 1942 0ddc 660FEF85 		pxor	-1728(%rbp), %xmm0
+ 1942      40F9FFFF 
+ 1943 0de4 F30F7F85 		movdqu	%xmm0, -1728(%rbp)
+ 1943      40F9FFFF 
+ 1944 0dec 660F6F85 		movdqa	-3872(%rbp), %xmm0
+ 1944      E0F0FFFF 
+ 1945 0df4 F30F7F85 		movdqu	%xmm0, -1632(%rbp)
+ 1945      A0F9FFFF 
+ 1946              	.LBB442:
+ 1947              	.LBB443:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1948              		.loc 3 1278 0
+ 1949 0dfc 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 1949      00000000 
+ 1950 0e04 F30F6F8D 		movdqu	-1632(%rbp), %xmm1
+ 1950      A0F9FFFF 
+ 1951 0e0c F30F7F8D 		movdqu	%xmm1, -1600(%rbp)
+ 1951      C0F9FFFF 
+ 1952 0e14 F30F7F85 		movdqu	%xmm0, -1616(%rbp)
+ 1952      B0F9FFFF 
+ 1953 0e1c F30F6F85 		movdqu	-1600(%rbp), %xmm0
+ 1953      C0F9FFFF 
+ 1954 0e24 F30F7F85 		movdqu	%xmm0, -1568(%rbp)
+ 1954      E0F9FFFF 
+ 1955 0e2c F30F6F85 		movdqu	-1616(%rbp), %xmm0
+ 1955      B0F9FFFF 
+ 1956 0e34 F30F7F85 		movdqu	%xmm0, -1584(%rbp)
+ 1956      D0F9FFFF 
+ 1957              	.LBB444:
+ 1958              	.LBB445:
+ 1959              	.LBB446:
+ 1960              	.LBB447:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1961              		.loc 1 529 0
+ 1962 0e3c F30F6F8D 		movdqu	-1584(%rbp), %xmm1
+
GAS LISTING /tmp/ccPaCTqg.s 			page 92
+
+
+ 1962      D0F9FFFF 
+ 1963 0e44 F30F6F85 		movdqu	-1568(%rbp), %xmm0
+ 1963      E0F9FFFF 
+ 1964 0e4c 660F3800 		pshufb	%xmm1, %xmm0
+ 1964      C1
+ 1965              	.LBE447:
+ 1966              	.LBE446:
+ 1967              	.LBE445:
+ 1968              	.LBE444:
+ 1969              	.LBE443:
+ 1970              	.LBE442:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1971              		.loc 3 1568 0
+ 1972 0e51 660F7F85 		movdqa	%xmm0, -3872(%rbp)
+ 1972      E0F0FFFF 
+ 1973 0e59 660F6F85 		movdqa	-3872(%rbp), %xmm0
+ 1973      E0F0FFFF 
+ 1974 0e61 660FEF85 		pxor	-1728(%rbp), %xmm0
+ 1974      40F9FFFF 
+ 1975 0e69 F30F7F85 		movdqu	%xmm0, -1728(%rbp)
+ 1975      40F9FFFF 
+ 1976 0e71 660F6F85 		movdqa	-3872(%rbp), %xmm0
+ 1976      E0F0FFFF 
+ 1977 0e79 F30F7F85 		movdqu	%xmm0, -1552(%rbp)
+ 1977      F0F9FFFF 
+ 1978              	.LBB448:
+ 1979              	.LBB449:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1980              		.loc 3 1278 0
+ 1981 0e81 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 1981      00000000 
+ 1982 0e89 F30F6F8D 		movdqu	-1552(%rbp), %xmm1
+ 1982      F0F9FFFF 
+ 1983 0e91 F30F7F8D 		movdqu	%xmm1, -1520(%rbp)
+ 1983      10FAFFFF 
+ 1984 0e99 F30F7F85 		movdqu	%xmm0, -1536(%rbp)
+ 1984      00FAFFFF 
+ 1985 0ea1 F30F6F85 		movdqu	-1520(%rbp), %xmm0
+ 1985      10FAFFFF 
+ 1986 0ea9 F30F7F85 		movdqu	%xmm0, -1488(%rbp)
+ 1986      30FAFFFF 
+ 1987 0eb1 F30F6F85 		movdqu	-1536(%rbp), %xmm0
+ 1987      00FAFFFF 
+ 1988 0eb9 F30F7F85 		movdqu	%xmm0, -1504(%rbp)
+ 1988      20FAFFFF 
+ 1989              	.LBB450:
+ 1990              	.LBB451:
+ 1991              	.LBB452:
+ 1992              	.LBB453:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1993              		.loc 1 529 0
+ 1994 0ec1 F30F6F8D 		movdqu	-1504(%rbp), %xmm1
+ 1994      20FAFFFF 
+ 1995 0ec9 F30F6F85 		movdqu	-1488(%rbp), %xmm0
+ 1995      30FAFFFF 
+ 1996 0ed1 660F3800 		pshufb	%xmm1, %xmm0
+ 1996      C1
+
GAS LISTING /tmp/ccPaCTqg.s 			page 93
+
+
+ 1997              	.LBE453:
+ 1998              	.LBE452:
+ 1999              	.LBE451:
+ 2000              	.LBE450:
+ 2001              	.LBE449:
+ 2002              	.LBE448:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2003              		.loc 3 1569 0
+ 2004 0ed6 660F7F85 		movdqa	%xmm0, -3872(%rbp)
+ 2004      E0F0FFFF 
+ 2005 0ede 660F6F85 		movdqa	-3872(%rbp), %xmm0
+ 2005      E0F0FFFF 
+ 2006 0ee6 660FEF85 		pxor	-1728(%rbp), %xmm0
+ 2006      40F9FFFF 
+ 2007 0eee F30F7F85 		movdqu	%xmm0, -1728(%rbp)
+ 2007      40F9FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 2008              		.loc 3 1571 0
+ 2009 0ef6 F30F6F85 		movdqu	-1728(%rbp), %xmm0
+ 2009      40F9FFFF 
+ 2010              	.LBE435:
+ 2011              	.LBE434:
+ 2012              		.loc 3 1749 0
+ 2013 0efe F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 2013      80F1FFFF 
+ 2014 0f06 F30F6F85 		movdqu	-3696(%rbp), %xmm0
+ 2014      90F1FFFF 
+ 2015 0f0e F30F6F8D 		movdqu	-3712(%rbp), %xmm1
+ 2015      80F1FFFF 
+ 2016 0f16 660FEFC1 		pxor	%xmm1, %xmm0
+ 2017 0f1a F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 2017      80F1FFFF 
+ 2018 0f22 488B8578 		movq	-3720(%rbp), %rax
+ 2018      F1FFFF
+ 2019 0f29 4883C060 		addq	$96, %rax
+ 2020 0f2d F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 2020      80F1FFFF 
+ 2021 0f35 F30F7F00 		movdqu	%xmm0, (%rax)
+ 2022 0f39 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 2022      80F1FFFF 
+ 2023 0f41 F30F7F85 		movdqu	%xmm0, -1456(%rbp)
+ 2023      50FAFFFF 
+ 2024              	.LBB454:
+ 2025              	.LBB455:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 2026              		.loc 3 1673 0
+ 2027 0f49 F30F6F85 		movdqu	-1456(%rbp), %xmm0
+ 2027      50FAFFFF 
+ 2028 0f51 660F7F85 		movdqa	%xmm0, -3856(%rbp)
+ 2028      F0F0FFFF 
+ 2029 0f59 660F6F85 		movdqa	-3856(%rbp), %xmm0
+ 2029      F0F0FFFF 
+ 2030 0f61 F30F7F85 		movdqu	%xmm0, -1424(%rbp)
+ 2030      70FAFFFF 
+ 2031              	.LBB456:
+ 2032              	.LBB457:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+
GAS LISTING /tmp/ccPaCTqg.s 			page 94
+
+
+ 2033              		.loc 1 852 0
+ 2034 0f69 F30F6F85 		movdqu	-1424(%rbp), %xmm0
+ 2034      70FAFFFF 
+ 2035 0f71 660F3ADF 		aeskeygenassist	$64, %xmm0, %xmm0
+ 2035      C040
+ 2036              	.LBE457:
+ 2037              	.LBE456:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 2038              		.loc 3 1674 0
+ 2039 0f77 660F7F85 		movdqa	%xmm0, -3856(%rbp)
+ 2039      F0F0FFFF 
+ 2040 0f7f 660F6F85 		movdqa	-3856(%rbp), %xmm0
+ 2040      F0F0FFFF 
+ 2041 0f87 F30F7F85 		movdqu	%xmm0, -1408(%rbp)
+ 2041      80FAFFFF 
+ 2042 0f8f F30F6F85 		movdqu	-1408(%rbp), %xmm0
+ 2042      80FAFFFF 
+ 2043 0f97 F30F7F85 		movdqu	%xmm0, -1376(%rbp)
+ 2043      A0FAFFFF 
+ 2044              	.LBB458:
+ 2045              	.LBB459:
+ 2046              	.LBB460:
+ 2047              	.LBB461:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 2048              		.loc 1 450 0
+ 2049 0f9f F30F6F85 		movdqu	-1376(%rbp), %xmm0
+ 2049      A0FAFFFF 
+ 2050 0fa7 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 2050      FF
+ 2051              	.LBE461:
+ 2052              	.LBE460:
+ 2053              	.LBE459:
+ 2054              	.LBE458:
+ 2055              	.LBE455:
+ 2056              	.LBE454:
+1750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x40,7);
+ 2057              		.loc 3 1750 0
+ 2058 0fac F30F7F85 		movdqu	%xmm0, -3696(%rbp)
+ 2058      90F1FFFF 
+ 2059 0fb4 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 2059      80F1FFFF 
+ 2060 0fbc F30F7F85 		movdqu	%xmm0, -1360(%rbp)
+ 2060      B0FAFFFF 
+ 2061              	.LBB462:
+ 2062              	.LBB463:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 2063              		.loc 3 1565 0
+ 2064 0fc4 F30F6F85 		movdqu	-1360(%rbp), %xmm0
+ 2064      B0FAFFFF 
+ 2065 0fcc 660F7F85 		movdqa	%xmm0, -3840(%rbp)
+ 2065      00F1FFFF 
+ 2066 0fd4 660F6F85 		movdqa	-3840(%rbp), %xmm0
+ 2066      00F1FFFF 
+ 2067 0fdc F30F7F85 		movdqu	%xmm0, -1344(%rbp)
+ 2067      C0FAFFFF 
+ 2068              	.LBB464:
+ 2069              	.LBB465:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 95
+
+
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2070              		.loc 3 1278 0
+ 2071 0fe4 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 2071      00000000 
+ 2072 0fec F30F6F8D 		movdqu	-1344(%rbp), %xmm1
+ 2072      C0FAFFFF 
+ 2073 0ff4 F30F7F8D 		movdqu	%xmm1, -1312(%rbp)
+ 2073      E0FAFFFF 
+ 2074 0ffc F30F7F85 		movdqu	%xmm0, -1328(%rbp)
+ 2074      D0FAFFFF 
+ 2075 1004 F30F6F85 		movdqu	-1312(%rbp), %xmm0
+ 2075      E0FAFFFF 
+ 2076 100c F30F7F85 		movdqu	%xmm0, -1280(%rbp)
+ 2076      00FBFFFF 
+ 2077 1014 F30F6F85 		movdqu	-1328(%rbp), %xmm0
+ 2077      D0FAFFFF 
+ 2078 101c F30F7F85 		movdqu	%xmm0, -1296(%rbp)
+ 2078      F0FAFFFF 
+ 2079              	.LBB466:
+ 2080              	.LBB467:
+ 2081              	.LBB468:
+ 2082              	.LBB469:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2083              		.loc 1 529 0
+ 2084 1024 F30F6F8D 		movdqu	-1296(%rbp), %xmm1
+ 2084      F0FAFFFF 
+ 2085 102c F30F6F85 		movdqu	-1280(%rbp), %xmm0
+ 2085      00FBFFFF 
+ 2086 1034 660F3800 		pshufb	%xmm1, %xmm0
+ 2086      C1
+ 2087              	.LBE469:
+ 2088              	.LBE468:
+ 2089              	.LBE467:
+ 2090              	.LBE466:
+ 2091              	.LBE465:
+ 2092              	.LBE464:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2093              		.loc 3 1567 0
+ 2094 1039 660F7F85 		movdqa	%xmm0, -3840(%rbp)
+ 2094      00F1FFFF 
+ 2095 1041 660F6F85 		movdqa	-3840(%rbp), %xmm0
+ 2095      00F1FFFF 
+ 2096 1049 660FEF85 		pxor	-1360(%rbp), %xmm0
+ 2096      B0FAFFFF 
+ 2097 1051 F30F7F85 		movdqu	%xmm0, -1360(%rbp)
+ 2097      B0FAFFFF 
+ 2098 1059 660F6F85 		movdqa	-3840(%rbp), %xmm0
+ 2098      00F1FFFF 
+ 2099 1061 F30F7F85 		movdqu	%xmm0, -1264(%rbp)
+ 2099      10FBFFFF 
+ 2100              	.LBB470:
+ 2101              	.LBB471:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2102              		.loc 3 1278 0
+ 2103 1069 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 2103      00000000 
+ 2104 1071 F30F6F8D 		movdqu	-1264(%rbp), %xmm1
+
GAS LISTING /tmp/ccPaCTqg.s 			page 96
+
+
+ 2104      10FBFFFF 
+ 2105 1079 F30F7F8D 		movdqu	%xmm1, -1232(%rbp)
+ 2105      30FBFFFF 
+ 2106 1081 F30F7F85 		movdqu	%xmm0, -1248(%rbp)
+ 2106      20FBFFFF 
+ 2107 1089 F30F6F85 		movdqu	-1232(%rbp), %xmm0
+ 2107      30FBFFFF 
+ 2108 1091 F30F7F85 		movdqu	%xmm0, -1200(%rbp)
+ 2108      50FBFFFF 
+ 2109 1099 F30F6F85 		movdqu	-1248(%rbp), %xmm0
+ 2109      20FBFFFF 
+ 2110 10a1 F30F7F85 		movdqu	%xmm0, -1216(%rbp)
+ 2110      40FBFFFF 
+ 2111              	.LBB472:
+ 2112              	.LBB473:
+ 2113              	.LBB474:
+ 2114              	.LBB475:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2115              		.loc 1 529 0
+ 2116 10a9 F30F6F8D 		movdqu	-1216(%rbp), %xmm1
+ 2116      40FBFFFF 
+ 2117 10b1 F30F6F85 		movdqu	-1200(%rbp), %xmm0
+ 2117      50FBFFFF 
+ 2118 10b9 660F3800 		pshufb	%xmm1, %xmm0
+ 2118      C1
+ 2119              	.LBE475:
+ 2120              	.LBE474:
+ 2121              	.LBE473:
+ 2122              	.LBE472:
+ 2123              	.LBE471:
+ 2124              	.LBE470:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2125              		.loc 3 1568 0
+ 2126 10be 660F7F85 		movdqa	%xmm0, -3840(%rbp)
+ 2126      00F1FFFF 
+ 2127 10c6 660F6F85 		movdqa	-3840(%rbp), %xmm0
+ 2127      00F1FFFF 
+ 2128 10ce 660FEF85 		pxor	-1360(%rbp), %xmm0
+ 2128      B0FAFFFF 
+ 2129 10d6 F30F7F85 		movdqu	%xmm0, -1360(%rbp)
+ 2129      B0FAFFFF 
+ 2130 10de 660F6F85 		movdqa	-3840(%rbp), %xmm0
+ 2130      00F1FFFF 
+ 2131 10e6 F30F7F85 		movdqu	%xmm0, -1184(%rbp)
+ 2131      60FBFFFF 
+ 2132              	.LBB476:
+ 2133              	.LBB477:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2134              		.loc 3 1278 0
+ 2135 10ee 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 2135      00000000 
+ 2136 10f6 F30F6F8D 		movdqu	-1184(%rbp), %xmm1
+ 2136      60FBFFFF 
+ 2137 10fe F30F7F8D 		movdqu	%xmm1, -1152(%rbp)
+ 2137      80FBFFFF 
+ 2138 1106 F30F7F85 		movdqu	%xmm0, -1168(%rbp)
+ 2138      70FBFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 97
+
+
+ 2139 110e F30F6F85 		movdqu	-1152(%rbp), %xmm0
+ 2139      80FBFFFF 
+ 2140 1116 F30F7F85 		movdqu	%xmm0, -1120(%rbp)
+ 2140      A0FBFFFF 
+ 2141 111e F30F6F85 		movdqu	-1168(%rbp), %xmm0
+ 2141      70FBFFFF 
+ 2142 1126 F30F7F85 		movdqu	%xmm0, -1136(%rbp)
+ 2142      90FBFFFF 
+ 2143              	.LBB478:
+ 2144              	.LBB479:
+ 2145              	.LBB480:
+ 2146              	.LBB481:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2147              		.loc 1 529 0
+ 2148 112e F30F6F8D 		movdqu	-1136(%rbp), %xmm1
+ 2148      90FBFFFF 
+ 2149 1136 F30F6F85 		movdqu	-1120(%rbp), %xmm0
+ 2149      A0FBFFFF 
+ 2150 113e 660F3800 		pshufb	%xmm1, %xmm0
+ 2150      C1
+ 2151              	.LBE481:
+ 2152              	.LBE480:
+ 2153              	.LBE479:
+ 2154              	.LBE478:
+ 2155              	.LBE477:
+ 2156              	.LBE476:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2157              		.loc 3 1569 0
+ 2158 1143 660F7F85 		movdqa	%xmm0, -3840(%rbp)
+ 2158      00F1FFFF 
+ 2159 114b 660F6F85 		movdqa	-3840(%rbp), %xmm0
+ 2159      00F1FFFF 
+ 2160 1153 660FEF85 		pxor	-1360(%rbp), %xmm0
+ 2160      B0FAFFFF 
+ 2161 115b F30F7F85 		movdqu	%xmm0, -1360(%rbp)
+ 2161      B0FAFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 2162              		.loc 3 1571 0
+ 2163 1163 F30F6F85 		movdqu	-1360(%rbp), %xmm0
+ 2163      B0FAFFFF 
+ 2164              	.LBE463:
+ 2165              	.LBE462:
+ 2166              		.loc 3 1750 0
+ 2167 116b F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 2167      80F1FFFF 
+ 2168 1173 F30F6F85 		movdqu	-3696(%rbp), %xmm0
+ 2168      90F1FFFF 
+ 2169 117b F30F6F8D 		movdqu	-3712(%rbp), %xmm1
+ 2169      80F1FFFF 
+ 2170 1183 660FEFC1 		pxor	%xmm1, %xmm0
+ 2171 1187 F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 2171      80F1FFFF 
+ 2172 118f 488B8578 		movq	-3720(%rbp), %rax
+ 2172      F1FFFF
+ 2173 1196 4883C070 		addq	$112, %rax
+ 2174 119a F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 2174      80F1FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 98
+
+
+ 2175 11a2 F30F7F00 		movdqu	%xmm0, (%rax)
+ 2176 11a6 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 2176      80F1FFFF 
+ 2177 11ae F30F7F85 		movdqu	%xmm0, -1088(%rbp)
+ 2177      C0FBFFFF 
+ 2178              	.LBB482:
+ 2179              	.LBB483:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 2180              		.loc 3 1673 0
+ 2181 11b6 F30F6F85 		movdqu	-1088(%rbp), %xmm0
+ 2181      C0FBFFFF 
+ 2182 11be 660F7F85 		movdqa	%xmm0, -3824(%rbp)
+ 2182      10F1FFFF 
+ 2183 11c6 660F6F85 		movdqa	-3824(%rbp), %xmm0
+ 2183      10F1FFFF 
+ 2184 11ce F30F7F85 		movdqu	%xmm0, -1056(%rbp)
+ 2184      E0FBFFFF 
+ 2185              	.LBB484:
+ 2186              	.LBB485:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 2187              		.loc 1 852 0
+ 2188 11d6 F30F6F85 		movdqu	-1056(%rbp), %xmm0
+ 2188      E0FBFFFF 
+ 2189 11de 660F3ADF 		aeskeygenassist	$128, %xmm0, %xmm0
+ 2189      C080
+ 2190              	.LBE485:
+ 2191              	.LBE484:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 2192              		.loc 3 1674 0
+ 2193 11e4 660F7F85 		movdqa	%xmm0, -3824(%rbp)
+ 2193      10F1FFFF 
+ 2194 11ec 660F6F85 		movdqa	-3824(%rbp), %xmm0
+ 2194      10F1FFFF 
+ 2195 11f4 F30F7F85 		movdqu	%xmm0, -1040(%rbp)
+ 2195      F0FBFFFF 
+ 2196 11fc F30F6F85 		movdqu	-1040(%rbp), %xmm0
+ 2196      F0FBFFFF 
+ 2197 1204 F30F7F85 		movdqu	%xmm0, -1008(%rbp)
+ 2197      10FCFFFF 
+ 2198              	.LBB486:
+ 2199              	.LBB487:
+ 2200              	.LBB488:
+ 2201              	.LBB489:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 2202              		.loc 1 450 0
+ 2203 120c F30F6F85 		movdqu	-1008(%rbp), %xmm0
+ 2203      10FCFFFF 
+ 2204 1214 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 2204      FF
+ 2205              	.LBE489:
+ 2206              	.LBE488:
+ 2207              	.LBE487:
+ 2208              	.LBE486:
+ 2209              	.LBE483:
+ 2210              	.LBE482:
+1751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x80,8);
+ 2211              		.loc 3 1751 0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 99
+
+
+ 2212 1219 F30F7F85 		movdqu	%xmm0, -3696(%rbp)
+ 2212      90F1FFFF 
+ 2213 1221 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 2213      80F1FFFF 
+ 2214 1229 F30F7F85 		movdqu	%xmm0, -992(%rbp)
+ 2214      20FCFFFF 
+ 2215              	.LBB490:
+ 2216              	.LBB491:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 2217              		.loc 3 1565 0
+ 2218 1231 F30F6F85 		movdqu	-992(%rbp), %xmm0
+ 2218      20FCFFFF 
+ 2219 1239 660F7F85 		movdqa	%xmm0, -3808(%rbp)
+ 2219      20F1FFFF 
+ 2220 1241 660F6F85 		movdqa	-3808(%rbp), %xmm0
+ 2220      20F1FFFF 
+ 2221 1249 F30F7F85 		movdqu	%xmm0, -976(%rbp)
+ 2221      30FCFFFF 
+ 2222              	.LBB492:
+ 2223              	.LBB493:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2224              		.loc 3 1278 0
+ 2225 1251 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 2225      00000000 
+ 2226 1259 F30F6F8D 		movdqu	-976(%rbp), %xmm1
+ 2226      30FCFFFF 
+ 2227 1261 F30F7F8D 		movdqu	%xmm1, -944(%rbp)
+ 2227      50FCFFFF 
+ 2228 1269 F30F7F85 		movdqu	%xmm0, -960(%rbp)
+ 2228      40FCFFFF 
+ 2229 1271 F30F6F85 		movdqu	-944(%rbp), %xmm0
+ 2229      50FCFFFF 
+ 2230 1279 F30F7F85 		movdqu	%xmm0, -912(%rbp)
+ 2230      70FCFFFF 
+ 2231 1281 F30F6F85 		movdqu	-960(%rbp), %xmm0
+ 2231      40FCFFFF 
+ 2232 1289 F30F7F85 		movdqu	%xmm0, -928(%rbp)
+ 2232      60FCFFFF 
+ 2233              	.LBB494:
+ 2234              	.LBB495:
+ 2235              	.LBB496:
+ 2236              	.LBB497:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2237              		.loc 1 529 0
+ 2238 1291 F30F6F8D 		movdqu	-928(%rbp), %xmm1
+ 2238      60FCFFFF 
+ 2239 1299 F30F6F85 		movdqu	-912(%rbp), %xmm0
+ 2239      70FCFFFF 
+ 2240 12a1 660F3800 		pshufb	%xmm1, %xmm0
+ 2240      C1
+ 2241              	.LBE497:
+ 2242              	.LBE496:
+ 2243              	.LBE495:
+ 2244              	.LBE494:
+ 2245              	.LBE493:
+ 2246              	.LBE492:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+
GAS LISTING /tmp/ccPaCTqg.s 			page 100
+
+
+ 2247              		.loc 3 1567 0
+ 2248 12a6 660F7F85 		movdqa	%xmm0, -3808(%rbp)
+ 2248      20F1FFFF 
+ 2249 12ae 660F6F85 		movdqa	-3808(%rbp), %xmm0
+ 2249      20F1FFFF 
+ 2250 12b6 660FEF85 		pxor	-992(%rbp), %xmm0
+ 2250      20FCFFFF 
+ 2251 12be F30F7F85 		movdqu	%xmm0, -992(%rbp)
+ 2251      20FCFFFF 
+ 2252 12c6 660F6F85 		movdqa	-3808(%rbp), %xmm0
+ 2252      20F1FFFF 
+ 2253 12ce F30F7F85 		movdqu	%xmm0, -896(%rbp)
+ 2253      80FCFFFF 
+ 2254              	.LBB498:
+ 2255              	.LBB499:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2256              		.loc 3 1278 0
+ 2257 12d6 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 2257      00000000 
+ 2258 12de F30F6F8D 		movdqu	-896(%rbp), %xmm1
+ 2258      80FCFFFF 
+ 2259 12e6 F30F7F8D 		movdqu	%xmm1, -864(%rbp)
+ 2259      A0FCFFFF 
+ 2260 12ee F30F7F85 		movdqu	%xmm0, -880(%rbp)
+ 2260      90FCFFFF 
+ 2261 12f6 F30F6F85 		movdqu	-864(%rbp), %xmm0
+ 2261      A0FCFFFF 
+ 2262 12fe F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 2262      C0FCFFFF 
+ 2263 1306 F30F6F85 		movdqu	-880(%rbp), %xmm0
+ 2263      90FCFFFF 
+ 2264 130e F30F7F85 		movdqu	%xmm0, -848(%rbp)
+ 2264      B0FCFFFF 
+ 2265              	.LBB500:
+ 2266              	.LBB501:
+ 2267              	.LBB502:
+ 2268              	.LBB503:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2269              		.loc 1 529 0
+ 2270 1316 F30F6F8D 		movdqu	-848(%rbp), %xmm1
+ 2270      B0FCFFFF 
+ 2271 131e F30F6F85 		movdqu	-832(%rbp), %xmm0
+ 2271      C0FCFFFF 
+ 2272 1326 660F3800 		pshufb	%xmm1, %xmm0
+ 2272      C1
+ 2273              	.LBE503:
+ 2274              	.LBE502:
+ 2275              	.LBE501:
+ 2276              	.LBE500:
+ 2277              	.LBE499:
+ 2278              	.LBE498:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2279              		.loc 3 1568 0
+ 2280 132b 660F7F85 		movdqa	%xmm0, -3808(%rbp)
+ 2280      20F1FFFF 
+ 2281 1333 660F6F85 		movdqa	-3808(%rbp), %xmm0
+ 2281      20F1FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 101
+
+
+ 2282 133b 660FEF85 		pxor	-992(%rbp), %xmm0
+ 2282      20FCFFFF 
+ 2283 1343 F30F7F85 		movdqu	%xmm0, -992(%rbp)
+ 2283      20FCFFFF 
+ 2284 134b 660F6F85 		movdqa	-3808(%rbp), %xmm0
+ 2284      20F1FFFF 
+ 2285 1353 F30F7F85 		movdqu	%xmm0, -816(%rbp)
+ 2285      D0FCFFFF 
+ 2286              	.LBB504:
+ 2287              	.LBB505:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2288              		.loc 3 1278 0
+ 2289 135b 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 2289      00000000 
+ 2290 1363 F30F6F8D 		movdqu	-816(%rbp), %xmm1
+ 2290      D0FCFFFF 
+ 2291 136b F30F7F8D 		movdqu	%xmm1, -784(%rbp)
+ 2291      F0FCFFFF 
+ 2292 1373 F30F7F85 		movdqu	%xmm0, -800(%rbp)
+ 2292      E0FCFFFF 
+ 2293 137b F30F6F85 		movdqu	-784(%rbp), %xmm0
+ 2293      F0FCFFFF 
+ 2294 1383 F30F7F85 		movdqu	%xmm0, -752(%rbp)
+ 2294      10FDFFFF 
+ 2295 138b F30F6F85 		movdqu	-800(%rbp), %xmm0
+ 2295      E0FCFFFF 
+ 2296 1393 F30F7F85 		movdqu	%xmm0, -768(%rbp)
+ 2296      00FDFFFF 
+ 2297              	.LBB506:
+ 2298              	.LBB507:
+ 2299              	.LBB508:
+ 2300              	.LBB509:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2301              		.loc 1 529 0
+ 2302 139b F30F6F8D 		movdqu	-768(%rbp), %xmm1
+ 2302      00FDFFFF 
+ 2303 13a3 F30F6F85 		movdqu	-752(%rbp), %xmm0
+ 2303      10FDFFFF 
+ 2304 13ab 660F3800 		pshufb	%xmm1, %xmm0
+ 2304      C1
+ 2305              	.LBE509:
+ 2306              	.LBE508:
+ 2307              	.LBE507:
+ 2308              	.LBE506:
+ 2309              	.LBE505:
+ 2310              	.LBE504:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2311              		.loc 3 1569 0
+ 2312 13b0 660F7F85 		movdqa	%xmm0, -3808(%rbp)
+ 2312      20F1FFFF 
+ 2313 13b8 660F6F85 		movdqa	-3808(%rbp), %xmm0
+ 2313      20F1FFFF 
+ 2314 13c0 660FEF85 		pxor	-992(%rbp), %xmm0
+ 2314      20FCFFFF 
+ 2315 13c8 F30F7F85 		movdqu	%xmm0, -992(%rbp)
+ 2315      20FCFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+
GAS LISTING /tmp/ccPaCTqg.s 			page 102
+
+
+ 2316              		.loc 3 1571 0
+ 2317 13d0 F30F6F85 		movdqu	-992(%rbp), %xmm0
+ 2317      20FCFFFF 
+ 2318              	.LBE491:
+ 2319              	.LBE490:
+ 2320              		.loc 3 1751 0
+ 2321 13d8 F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 2321      80F1FFFF 
+ 2322 13e0 F30F6F85 		movdqu	-3696(%rbp), %xmm0
+ 2322      90F1FFFF 
+ 2323 13e8 F30F6F8D 		movdqu	-3712(%rbp), %xmm1
+ 2323      80F1FFFF 
+ 2324 13f0 660FEFC1 		pxor	%xmm1, %xmm0
+ 2325 13f4 F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 2325      80F1FFFF 
+ 2326 13fc 488B8578 		movq	-3720(%rbp), %rax
+ 2326      F1FFFF
+ 2327 1403 4883E880 		subq	$-128, %rax
+ 2328 1407 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 2328      80F1FFFF 
+ 2329 140f F30F7F00 		movdqu	%xmm0, (%rax)
+ 2330 1413 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 2330      80F1FFFF 
+ 2331 141b F30F7F85 		movdqu	%xmm0, -720(%rbp)
+ 2331      30FDFFFF 
+ 2332              	.LBB510:
+ 2333              	.LBB511:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 2334              		.loc 3 1673 0
+ 2335 1423 F30F6F85 		movdqu	-720(%rbp), %xmm0
+ 2335      30FDFFFF 
+ 2336 142b 660F7F85 		movdqa	%xmm0, -3792(%rbp)
+ 2336      30F1FFFF 
+ 2337 1433 660F6F85 		movdqa	-3792(%rbp), %xmm0
+ 2337      30F1FFFF 
+ 2338 143b F30F7F85 		movdqu	%xmm0, -688(%rbp)
+ 2338      50FDFFFF 
+ 2339              	.LBB512:
+ 2340              	.LBB513:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 2341              		.loc 1 852 0
+ 2342 1443 F30F6F85 		movdqu	-688(%rbp), %xmm0
+ 2342      50FDFFFF 
+ 2343 144b 660F3ADF 		aeskeygenassist	$27, %xmm0, %xmm0
+ 2343      C01B
+ 2344              	.LBE513:
+ 2345              	.LBE512:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 2346              		.loc 3 1674 0
+ 2347 1451 660F7F85 		movdqa	%xmm0, -3792(%rbp)
+ 2347      30F1FFFF 
+ 2348 1459 660F6F85 		movdqa	-3792(%rbp), %xmm0
+ 2348      30F1FFFF 
+ 2349 1461 F30F7F85 		movdqu	%xmm0, -672(%rbp)
+ 2349      60FDFFFF 
+ 2350 1469 F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 2350      60FDFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 103
+
+
+ 2351 1471 F30F7F85 		movdqu	%xmm0, -640(%rbp)
+ 2351      80FDFFFF 
+ 2352              	.LBB514:
+ 2353              	.LBB515:
+ 2354              	.LBB516:
+ 2355              	.LBB517:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 2356              		.loc 1 450 0
+ 2357 1479 F30F6F85 		movdqu	-640(%rbp), %xmm0
+ 2357      80FDFFFF 
+ 2358 1481 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 2358      FF
+ 2359              	.LBE517:
+ 2360              	.LBE516:
+ 2361              	.LBE515:
+ 2362              	.LBE514:
+ 2363              	.LBE511:
+ 2364              	.LBE510:
+1752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x1B,9);
+ 2365              		.loc 3 1752 0
+ 2366 1486 F30F7F85 		movdqu	%xmm0, -3696(%rbp)
+ 2366      90F1FFFF 
+ 2367 148e F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 2367      80F1FFFF 
+ 2368 1496 F30F7F85 		movdqu	%xmm0, -624(%rbp)
+ 2368      90FDFFFF 
+ 2369              	.LBB518:
+ 2370              	.LBB519:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 2371              		.loc 3 1565 0
+ 2372 149e F30F6F85 		movdqu	-624(%rbp), %xmm0
+ 2372      90FDFFFF 
+ 2373 14a6 660F7F85 		movdqa	%xmm0, -3776(%rbp)
+ 2373      40F1FFFF 
+ 2374 14ae 660F6F85 		movdqa	-3776(%rbp), %xmm0
+ 2374      40F1FFFF 
+ 2375 14b6 F30F7F85 		movdqu	%xmm0, -608(%rbp)
+ 2375      A0FDFFFF 
+ 2376              	.LBB520:
+ 2377              	.LBB521:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2378              		.loc 3 1278 0
+ 2379 14be 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 2379      00000000 
+ 2380 14c6 F30F6F8D 		movdqu	-608(%rbp), %xmm1
+ 2380      A0FDFFFF 
+ 2381 14ce F30F7F8D 		movdqu	%xmm1, -576(%rbp)
+ 2381      C0FDFFFF 
+ 2382 14d6 F30F7F85 		movdqu	%xmm0, -592(%rbp)
+ 2382      B0FDFFFF 
+ 2383 14de F30F6F85 		movdqu	-576(%rbp), %xmm0
+ 2383      C0FDFFFF 
+ 2384 14e6 F30F7F85 		movdqu	%xmm0, -544(%rbp)
+ 2384      E0FDFFFF 
+ 2385 14ee F30F6F85 		movdqu	-592(%rbp), %xmm0
+ 2385      B0FDFFFF 
+ 2386 14f6 F30F7F85 		movdqu	%xmm0, -560(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 104
+
+
+ 2386      D0FDFFFF 
+ 2387              	.LBB522:
+ 2388              	.LBB523:
+ 2389              	.LBB524:
+ 2390              	.LBB525:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2391              		.loc 1 529 0
+ 2392 14fe F30F6F8D 		movdqu	-560(%rbp), %xmm1
+ 2392      D0FDFFFF 
+ 2393 1506 F30F6F85 		movdqu	-544(%rbp), %xmm0
+ 2393      E0FDFFFF 
+ 2394 150e 660F3800 		pshufb	%xmm1, %xmm0
+ 2394      C1
+ 2395              	.LBE525:
+ 2396              	.LBE524:
+ 2397              	.LBE523:
+ 2398              	.LBE522:
+ 2399              	.LBE521:
+ 2400              	.LBE520:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2401              		.loc 3 1567 0
+ 2402 1513 660F7F85 		movdqa	%xmm0, -3776(%rbp)
+ 2402      40F1FFFF 
+ 2403 151b 660F6F85 		movdqa	-3776(%rbp), %xmm0
+ 2403      40F1FFFF 
+ 2404 1523 660FEF85 		pxor	-624(%rbp), %xmm0
+ 2404      90FDFFFF 
+ 2405 152b F30F7F85 		movdqu	%xmm0, -624(%rbp)
+ 2405      90FDFFFF 
+ 2406 1533 660F6F85 		movdqa	-3776(%rbp), %xmm0
+ 2406      40F1FFFF 
+ 2407 153b F30F7F85 		movdqu	%xmm0, -528(%rbp)
+ 2407      F0FDFFFF 
+ 2408              	.LBB526:
+ 2409              	.LBB527:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2410              		.loc 3 1278 0
+ 2411 1543 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 2411      00000000 
+ 2412 154b F30F6F8D 		movdqu	-528(%rbp), %xmm1
+ 2412      F0FDFFFF 
+ 2413 1553 F30F7F8D 		movdqu	%xmm1, -496(%rbp)
+ 2413      10FEFFFF 
+ 2414 155b F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 2414      00FEFFFF 
+ 2415 1563 F30F6F85 		movdqu	-496(%rbp), %xmm0
+ 2415      10FEFFFF 
+ 2416 156b F30F7F85 		movdqu	%xmm0, -464(%rbp)
+ 2416      30FEFFFF 
+ 2417 1573 F30F6F85 		movdqu	-512(%rbp), %xmm0
+ 2417      00FEFFFF 
+ 2418 157b F30F7F85 		movdqu	%xmm0, -480(%rbp)
+ 2418      20FEFFFF 
+ 2419              	.LBB528:
+ 2420              	.LBB529:
+ 2421              	.LBB530:
+ 2422              	.LBB531:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 105
+
+
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2423              		.loc 1 529 0
+ 2424 1583 F30F6F8D 		movdqu	-480(%rbp), %xmm1
+ 2424      20FEFFFF 
+ 2425 158b F30F6F85 		movdqu	-464(%rbp), %xmm0
+ 2425      30FEFFFF 
+ 2426 1593 660F3800 		pshufb	%xmm1, %xmm0
+ 2426      C1
+ 2427              	.LBE531:
+ 2428              	.LBE530:
+ 2429              	.LBE529:
+ 2430              	.LBE528:
+ 2431              	.LBE527:
+ 2432              	.LBE526:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2433              		.loc 3 1568 0
+ 2434 1598 660F7F85 		movdqa	%xmm0, -3776(%rbp)
+ 2434      40F1FFFF 
+ 2435 15a0 660F6F85 		movdqa	-3776(%rbp), %xmm0
+ 2435      40F1FFFF 
+ 2436 15a8 660FEF85 		pxor	-624(%rbp), %xmm0
+ 2436      90FDFFFF 
+ 2437 15b0 F30F7F85 		movdqu	%xmm0, -624(%rbp)
+ 2437      90FDFFFF 
+ 2438 15b8 660F6F85 		movdqa	-3776(%rbp), %xmm0
+ 2438      40F1FFFF 
+ 2439 15c0 F30F7F85 		movdqu	%xmm0, -448(%rbp)
+ 2439      40FEFFFF 
+ 2440              	.LBB532:
+ 2441              	.LBB533:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2442              		.loc 3 1278 0
+ 2443 15c8 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 2443      00000000 
+ 2444 15d0 F30F6F8D 		movdqu	-448(%rbp), %xmm1
+ 2444      40FEFFFF 
+ 2445 15d8 F30F7F8D 		movdqu	%xmm1, -416(%rbp)
+ 2445      60FEFFFF 
+ 2446 15e0 F30F7F85 		movdqu	%xmm0, -432(%rbp)
+ 2446      50FEFFFF 
+ 2447 15e8 F30F6F85 		movdqu	-416(%rbp), %xmm0
+ 2447      60FEFFFF 
+ 2448 15f0 F30F7F85 		movdqu	%xmm0, -384(%rbp)
+ 2448      80FEFFFF 
+ 2449 15f8 F30F6F85 		movdqu	-432(%rbp), %xmm0
+ 2449      50FEFFFF 
+ 2450 1600 F30F7F85 		movdqu	%xmm0, -400(%rbp)
+ 2450      70FEFFFF 
+ 2451              	.LBB534:
+ 2452              	.LBB535:
+ 2453              	.LBB536:
+ 2454              	.LBB537:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2455              		.loc 1 529 0
+ 2456 1608 F30F6F8D 		movdqu	-400(%rbp), %xmm1
+ 2456      70FEFFFF 
+ 2457 1610 F30F6F85 		movdqu	-384(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 106
+
+
+ 2457      80FEFFFF 
+ 2458 1618 660F3800 		pshufb	%xmm1, %xmm0
+ 2458      C1
+ 2459              	.LBE537:
+ 2460              	.LBE536:
+ 2461              	.LBE535:
+ 2462              	.LBE534:
+ 2463              	.LBE533:
+ 2464              	.LBE532:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2465              		.loc 3 1569 0
+ 2466 161d 660F7F85 		movdqa	%xmm0, -3776(%rbp)
+ 2466      40F1FFFF 
+ 2467 1625 660F6F85 		movdqa	-3776(%rbp), %xmm0
+ 2467      40F1FFFF 
+ 2468 162d 660FEF85 		pxor	-624(%rbp), %xmm0
+ 2468      90FDFFFF 
+ 2469 1635 F30F7F85 		movdqu	%xmm0, -624(%rbp)
+ 2469      90FDFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 2470              		.loc 3 1571 0
+ 2471 163d F30F6F85 		movdqu	-624(%rbp), %xmm0
+ 2471      90FDFFFF 
+ 2472              	.LBE519:
+ 2473              	.LBE518:
+ 2474              		.loc 3 1752 0
+ 2475 1645 F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 2475      80F1FFFF 
+ 2476 164d F30F6F85 		movdqu	-3696(%rbp), %xmm0
+ 2476      90F1FFFF 
+ 2477 1655 F30F6F8D 		movdqu	-3712(%rbp), %xmm1
+ 2477      80F1FFFF 
+ 2478 165d 660FEFC1 		pxor	%xmm1, %xmm0
+ 2479 1661 F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 2479      80F1FFFF 
+ 2480 1669 488B8578 		movq	-3720(%rbp), %rax
+ 2480      F1FFFF
+ 2481 1670 48059000 		addq	$144, %rax
+ 2481      0000
+ 2482 1676 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 2482      80F1FFFF 
+ 2483 167e F30F7F00 		movdqu	%xmm0, (%rax)
+ 2484 1682 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 2484      80F1FFFF 
+ 2485 168a F30F7F85 		movdqu	%xmm0, -352(%rbp)
+ 2485      A0FEFFFF 
+ 2486              	.LBB538:
+ 2487              	.LBB539:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 2488              		.loc 3 1673 0
+ 2489 1692 F30F6F85 		movdqu	-352(%rbp), %xmm0
+ 2489      A0FEFFFF 
+ 2490 169a 660F7F85 		movdqa	%xmm0, -3760(%rbp)
+ 2490      50F1FFFF 
+ 2491 16a2 660F6F85 		movdqa	-3760(%rbp), %xmm0
+ 2491      50F1FFFF 
+ 2492 16aa F30F7F85 		movdqu	%xmm0, -320(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 107
+
+
+ 2492      C0FEFFFF 
+ 2493              	.LBB540:
+ 2494              	.LBB541:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 2495              		.loc 1 852 0
+ 2496 16b2 F30F6F85 		movdqu	-320(%rbp), %xmm0
+ 2496      C0FEFFFF 
+ 2497 16ba 660F3ADF 		aeskeygenassist	$54, %xmm0, %xmm0
+ 2497      C036
+ 2498              	.LBE541:
+ 2499              	.LBE540:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 2500              		.loc 3 1674 0
+ 2501 16c0 660F7F85 		movdqa	%xmm0, -3760(%rbp)
+ 2501      50F1FFFF 
+ 2502 16c8 660F6F85 		movdqa	-3760(%rbp), %xmm0
+ 2502      50F1FFFF 
+ 2503 16d0 F30F7F85 		movdqu	%xmm0, -304(%rbp)
+ 2503      D0FEFFFF 
+ 2504 16d8 F30F6F85 		movdqu	-304(%rbp), %xmm0
+ 2504      D0FEFFFF 
+ 2505 16e0 F30F7F85 		movdqu	%xmm0, -272(%rbp)
+ 2505      F0FEFFFF 
+ 2506              	.LBB542:
+ 2507              	.LBB543:
+ 2508              	.LBB544:
+ 2509              	.LBB545:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 2510              		.loc 1 450 0
+ 2511 16e8 F30F6F85 		movdqu	-272(%rbp), %xmm0
+ 2511      F0FEFFFF 
+ 2512 16f0 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 2512      FF
+ 2513              	.LBE545:
+ 2514              	.LBE544:
+ 2515              	.LBE543:
+ 2516              	.LBE542:
+ 2517              	.LBE539:
+ 2518              	.LBE538:
+1753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x36,10);
+ 2519              		.loc 3 1753 0
+ 2520 16f5 F30F7F85 		movdqu	%xmm0, -3696(%rbp)
+ 2520      90F1FFFF 
+ 2521 16fd F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 2521      80F1FFFF 
+ 2522 1705 F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 2522      00FFFFFF 
+ 2523              	.LBB546:
+ 2524              	.LBB547:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 2525              		.loc 3 1565 0
+ 2526 170d F30F6F85 		movdqu	-256(%rbp), %xmm0
+ 2526      00FFFFFF 
+ 2527 1715 660F7F85 		movdqa	%xmm0, -3744(%rbp)
+ 2527      60F1FFFF 
+ 2528 171d 660F6F85 		movdqa	-3744(%rbp), %xmm0
+ 2528      60F1FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 108
+
+
+ 2529 1725 F30F7F85 		movdqu	%xmm0, -240(%rbp)
+ 2529      10FFFFFF 
+ 2530              	.LBB548:
+ 2531              	.LBB549:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2532              		.loc 3 1278 0
+ 2533 172d 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 2533      00000000 
+ 2534 1735 F30F6F8D 		movdqu	-240(%rbp), %xmm1
+ 2534      10FFFFFF 
+ 2535 173d F30F7F8D 		movdqu	%xmm1, -208(%rbp)
+ 2535      30FFFFFF 
+ 2536 1745 F30F7F85 		movdqu	%xmm0, -224(%rbp)
+ 2536      20FFFFFF 
+ 2537 174d F30F6F85 		movdqu	-208(%rbp), %xmm0
+ 2537      30FFFFFF 
+ 2538 1755 F30F7F85 		movdqu	%xmm0, -176(%rbp)
+ 2538      50FFFFFF 
+ 2539 175d F30F6F85 		movdqu	-224(%rbp), %xmm0
+ 2539      20FFFFFF 
+ 2540 1765 F30F7F85 		movdqu	%xmm0, -192(%rbp)
+ 2540      40FFFFFF 
+ 2541              	.LBB550:
+ 2542              	.LBB551:
+ 2543              	.LBB552:
+ 2544              	.LBB553:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2545              		.loc 1 529 0
+ 2546 176d F30F6F8D 		movdqu	-192(%rbp), %xmm1
+ 2546      40FFFFFF 
+ 2547 1775 F30F6F85 		movdqu	-176(%rbp), %xmm0
+ 2547      50FFFFFF 
+ 2548 177d 660F3800 		pshufb	%xmm1, %xmm0
+ 2548      C1
+ 2549              	.LBE553:
+ 2550              	.LBE552:
+ 2551              	.LBE551:
+ 2552              	.LBE550:
+ 2553              	.LBE549:
+ 2554              	.LBE548:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2555              		.loc 3 1567 0
+ 2556 1782 660F7F85 		movdqa	%xmm0, -3744(%rbp)
+ 2556      60F1FFFF 
+ 2557 178a 660F6F85 		movdqa	-3744(%rbp), %xmm0
+ 2557      60F1FFFF 
+ 2558 1792 660FEF85 		pxor	-256(%rbp), %xmm0
+ 2558      00FFFFFF 
+ 2559 179a F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 2559      00FFFFFF 
+ 2560 17a2 660F6F85 		movdqa	-3744(%rbp), %xmm0
+ 2560      60F1FFFF 
+ 2561 17aa F30F7F85 		movdqu	%xmm0, -160(%rbp)
+ 2561      60FFFFFF 
+ 2562              	.LBB554:
+ 2563              	.LBB555:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+
GAS LISTING /tmp/ccPaCTqg.s 			page 109
+
+
+ 2564              		.loc 3 1278 0
+ 2565 17b2 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 2565      00000000 
+ 2566 17ba F30F6F8D 		movdqu	-160(%rbp), %xmm1
+ 2566      60FFFFFF 
+ 2567 17c2 F30F7F4D 		movdqu	%xmm1, -128(%rbp)
+ 2567      80
+ 2568 17c7 F30F7F85 		movdqu	%xmm0, -144(%rbp)
+ 2568      70FFFFFF 
+ 2569 17cf F30F6F45 		movdqu	-128(%rbp), %xmm0
+ 2569      80
+ 2570 17d4 F30F7F45 		movdqu	%xmm0, -96(%rbp)
+ 2570      A0
+ 2571 17d9 F30F6F85 		movdqu	-144(%rbp), %xmm0
+ 2571      70FFFFFF 
+ 2572 17e1 F30F7F45 		movdqu	%xmm0, -112(%rbp)
+ 2572      90
+ 2573              	.LBB556:
+ 2574              	.LBB557:
+ 2575              	.LBB558:
+ 2576              	.LBB559:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2577              		.loc 1 529 0
+ 2578 17e6 F30F6F4D 		movdqu	-112(%rbp), %xmm1
+ 2578      90
+ 2579 17eb F30F6F45 		movdqu	-96(%rbp), %xmm0
+ 2579      A0
+ 2580 17f0 660F3800 		pshufb	%xmm1, %xmm0
+ 2580      C1
+ 2581              	.LBE559:
+ 2582              	.LBE558:
+ 2583              	.LBE557:
+ 2584              	.LBE556:
+ 2585              	.LBE555:
+ 2586              	.LBE554:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2587              		.loc 3 1568 0
+ 2588 17f5 660F7F85 		movdqa	%xmm0, -3744(%rbp)
+ 2588      60F1FFFF 
+ 2589 17fd 660F6F85 		movdqa	-3744(%rbp), %xmm0
+ 2589      60F1FFFF 
+ 2590 1805 660FEF85 		pxor	-256(%rbp), %xmm0
+ 2590      00FFFFFF 
+ 2591 180d F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 2591      00FFFFFF 
+ 2592 1815 660F6F85 		movdqa	-3744(%rbp), %xmm0
+ 2592      60F1FFFF 
+ 2593 181d F30F7F45 		movdqu	%xmm0, -80(%rbp)
+ 2593      B0
+ 2594              	.LBB560:
+ 2595              	.LBB561:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2596              		.loc 3 1278 0
+ 2597 1822 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 2597      00000000 
+ 2598 182a F30F6F4D 		movdqu	-80(%rbp), %xmm1
+ 2598      B0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 110
+
+
+ 2599 182f F30F7F4D 		movdqu	%xmm1, -48(%rbp)
+ 2599      D0
+ 2600 1834 F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 2600      C0
+ 2601 1839 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 2601      D0
+ 2602 183e F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 2602      F0
+ 2603 1843 F30F6F45 		movdqu	-64(%rbp), %xmm0
+ 2603      C0
+ 2604 1848 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 2604      E0
+ 2605              	.LBB562:
+ 2606              	.LBB563:
+ 2607              	.LBB564:
+ 2608              	.LBB565:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2609              		.loc 1 529 0
+ 2610 184d F30F6F4D 		movdqu	-32(%rbp), %xmm1
+ 2610      E0
+ 2611 1852 F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 2611      F0
+ 2612 1857 660F3800 		pshufb	%xmm1, %xmm0
+ 2612      C1
+ 2613              	.LBE565:
+ 2614              	.LBE564:
+ 2615              	.LBE563:
+ 2616              	.LBE562:
+ 2617              	.LBE561:
+ 2618              	.LBE560:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2619              		.loc 3 1569 0
+ 2620 185c 660F7F85 		movdqa	%xmm0, -3744(%rbp)
+ 2620      60F1FFFF 
+ 2621 1864 660F6F85 		movdqa	-3744(%rbp), %xmm0
+ 2621      60F1FFFF 
+ 2622 186c 660FEF85 		pxor	-256(%rbp), %xmm0
+ 2622      00FFFFFF 
+ 2623 1874 F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 2623      00FFFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 2624              		.loc 3 1571 0
+ 2625 187c F30F6F85 		movdqu	-256(%rbp), %xmm0
+ 2625      00FFFFFF 
+ 2626              	.LBE547:
+ 2627              	.LBE546:
+ 2628              		.loc 3 1753 0
+ 2629 1884 F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 2629      80F1FFFF 
+ 2630 188c F30F6F85 		movdqu	-3696(%rbp), %xmm0
+ 2630      90F1FFFF 
+ 2631 1894 F30F6F8D 		movdqu	-3712(%rbp), %xmm1
+ 2631      80F1FFFF 
+ 2632 189c 660FEFC1 		pxor	%xmm1, %xmm0
+ 2633 18a0 F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 2633      80F1FFFF 
+ 2634 18a8 488B8578 		movq	-3720(%rbp), %rax
+
GAS LISTING /tmp/ccPaCTqg.s 			page 111
+
+
+ 2634      F1FFFF
+ 2635 18af 4805A000 		addq	$160, %rax
+ 2635      0000
+ 2636 18b5 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 2636      80F1FFFF 
+ 2637 18bd F30F7F00 		movdqu	%xmm0, (%rax)
+1754:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 2638              		.loc 3 1754 0
+ 2639 18c1 C9       		leave
+ 2640 18c2 C3       		ret
+ 2641              		.cfi_endproc
+ 2642              	.LFE656:
+ 2643              		.size	KAESBlockCipherVecAesNiKeyExpansion128, .-KAESBlockCipherVecAesNiKeyExpansion128
+ 2644              		.type	KAESBlockCipherVecAesNiKeyExpansion192, @function
+ 2645              	KAESBlockCipherVecAesNiKeyExpansion192:
+ 2646              	.LFB657:
+1755:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1756:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1757:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion128) (CipherVec * w, const AESByte * key)
+1758:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1759:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     OUTMSG(("\n\n\n%s: Not my code\n\n\n",__func__));
+1760:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_128, AES_Nk_128);
+1761:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1762:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1763:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1764:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1765:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+1766:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1767:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion192) (CipherVec * round_keys, const AESByte * key)
+1768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 2647              		.loc 3 1768 0
+ 2648              		.cfi_startproc
+ 2649 18c3 55       		pushq	%rbp
+ 2650              	.LCFI14:
+ 2651              		.cfi_def_cfa_offset 16
+ 2652 18c4 4889E5   		movq	%rsp, %rbp
+ 2653              		.cfi_offset 6, -16
+ 2654              	.LCFI15:
+ 2655              		.cfi_def_cfa_register 6
+ 2656 18c7 4881EC38 		subq	$6200, %rsp
+ 2656      180000
+ 2657 18ce 4889BD48 		movq	%rdi, -5816(%rbp)
+ 2657      E9FFFF
+ 2658 18d5 4889B540 		movq	%rsi, -5824(%rbp)
+ 2658      E9FFFF
+ 2659              		.loc 3 1768 0
+ 2660 18dc 488B8540 		movq	-5824(%rbp), %rax
+ 2660      E9FFFF
+ 2661 18e3 48898550 		movq	%rax, -5808(%rbp)
+ 2661      E9FFFF
+ 2662              	.LBB1000:
+ 2663              	.LBB1001:
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __asm__ (
+ 2664              		.loc 3 126 0
+ 2665 18ea 488B8550 		movq	-5808(%rbp), %rax
+ 2665      E9FFFF
+ 2666 18f1 4889C7   		movq	%rax, %rdi
+
GAS LISTING /tmp/ccPaCTqg.s 			page 112
+
+
+ 2667              	#APP
+ 2668              	# 126 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 2669              		movdqu (%rdi),%xmm0
+ 2670              	# 0 "" 2
+ 2671              	#NO_APP
+ 2672 18f8 660F7F85 		movdqa	%xmm0, -6224(%rbp)
+ 2672      B0E7FFFF 
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vec;
+ 2673              		.loc 3 129 0
+ 2674 1900 660F6F85 		movdqa	-6224(%rbp), %xmm0
+ 2674      B0E7FFFF 
+ 2675              	.LBE1001:
+ 2676              	.LBE1000:
+1769:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /* work on three blocks at a time which is two Nr worth
+1770:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * we'll build it with 6 words in v0:v1 and 6 words in w0:w1
+1771:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * but move them them into v0:v1:v2 before writing them to
+1772:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * the key schedule
+1773:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      */
+1774:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1775:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec v0, v1, v2, v3, v4;
+1776:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec k;          /* we'll only need one of the key gen assist blocks at a time */
+1777:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1778:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 0 */
+1779:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(StateIn) (key);              /* k0    : k1    : k2     : k3           */
+ 2677              		.loc 3 1779 0
+ 2678 1908 660F7F85 		movdqa	%xmm0, -6320(%rbp)
+ 2678      50E7FFFF 
+1780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateIn) (key+8);            /* k2    : k3    : k4     : k5           */
+ 2679              		.loc 3 1780 0
+ 2680 1910 488B8540 		movq	-5824(%rbp), %rax
+ 2680      E9FFFF
+ 2681 1917 4883C008 		addq	$8, %rax
+ 2682 191b 48898558 		movq	%rax, -5800(%rbp)
+ 2682      E9FFFF
+ 2683              	.LBB1002:
+ 2684              	.LBB1003:
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __asm__ (
+ 2685              		.loc 3 126 0
+ 2686 1922 488B8558 		movq	-5800(%rbp), %rax
+ 2686      E9FFFF
+ 2687 1929 4889C7   		movq	%rax, %rdi
+ 2688              	#APP
+ 2689              	# 126 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 2690              		movdqu (%rdi),%xmm0
+ 2691              	# 0 "" 2
+ 2692              	#NO_APP
+ 2693 1930 660F7F85 		movdqa	%xmm0, -6208(%rbp)
+ 2693      C0E7FFFF 
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vec;
+ 2694              		.loc 3 129 0
+ 2695 1938 660F6F85 		movdqa	-6208(%rbp), %xmm0
+ 2695      C0E7FFFF 
+ 2696              	.LBE1003:
+ 2697              	.LBE1002:
+ 2698              		.loc 3 1780 0
+ 2699 1940 660F7F85 		movdqa	%xmm0, -6304(%rbp)
+ 2699      60E7FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 113
+
+
+ 2700 1948 660F6F95 		movdqa	-6304(%rbp), %xmm2
+ 2700      60E7FFFF 
+ 2701 1950 F30F7F95 		movdqu	%xmm2, -5792(%rbp)
+ 2701      60E9FFFF 
+ 2702              	.LBB1004:
+ 2703              	.LBB1005:
+1301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2704              		.loc 3 1301 0
+ 2705 1958 660F6F05 		movdqa	mask.8011(%rip), %xmm0
+ 2705      00000000 
+ 2706 1960 F30F6F8D 		movdqu	-5792(%rbp), %xmm1
+ 2706      60E9FFFF 
+ 2707 1968 F30F7F8D 		movdqu	%xmm1, -5760(%rbp)
+ 2707      80E9FFFF 
+ 2708 1970 F30F7F85 		movdqu	%xmm0, -5776(%rbp)
+ 2708      70E9FFFF 
+ 2709 1978 F30F6F85 		movdqu	-5760(%rbp), %xmm0
+ 2709      80E9FFFF 
+ 2710 1980 F30F7F85 		movdqu	%xmm0, -5728(%rbp)
+ 2710      A0E9FFFF 
+ 2711 1988 F30F6F85 		movdqu	-5776(%rbp), %xmm0
+ 2711      70E9FFFF 
+ 2712 1990 F30F7F85 		movdqu	%xmm0, -5744(%rbp)
+ 2712      90E9FFFF 
+ 2713              	.LBB1006:
+ 2714              	.LBB1007:
+ 2715              	.LBB1008:
+ 2716              	.LBB1009:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2717              		.loc 1 529 0
+ 2718 1998 F30F6F8D 		movdqu	-5744(%rbp), %xmm1
+ 2718      90E9FFFF 
+ 2719 19a0 F30F6F85 		movdqu	-5728(%rbp), %xmm0
+ 2719      A0E9FFFF 
+ 2720 19a8 660F3800 		pshufb	%xmm1, %xmm0
+ 2720      C1
+ 2721              	.LBE1009:
+ 2722              	.LBE1008:
+ 2723              	.LBE1007:
+ 2724              	.LBE1006:
+ 2725              	.LBE1005:
+ 2726              	.LBE1004:
+1781:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateShiftRight64) (v1);     /* k4    : k5    : 0      : 0            */
+ 2727              		.loc 3 1781 0
+ 2728 19ad 660F7F85 		movdqa	%xmm0, -6304(%rbp)
+ 2728      60E7FFFF 
+1782:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1783:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[0] = v0; /* K0:K1:K2:K3 */
+ 2729              		.loc 3 1783 0
+ 2730 19b5 488B8548 		movq	-5816(%rbp), %rax
+ 2730      E9FFFF
+ 2731 19bc 660F6F85 		movdqa	-6320(%rbp), %xmm0
+ 2731      50E7FFFF 
+ 2732 19c4 660F7F00 		movdqa	%xmm0, (%rax)
+1784:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1785:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 */
+1786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+
GAS LISTING /tmp/ccPaCTqg.s 			page 114
+
+
+1787:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 2733              		.loc 3 1788 0
+ 2734 19c8 660F6F95 		movdqa	-6304(%rbp), %xmm2
+ 2734      60E7FFFF 
+ 2735 19d0 660F7F95 		movdqa	%xmm2, -6240(%rbp)
+ 2735      A0E7FFFF 
+ 2736 19d8 660F6F85 		movdqa	-6240(%rbp), %xmm0
+ 2736      A0E7FFFF 
+ 2737 19e0 F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 2737      C0E9FFFF 
+ 2738              	.LBB1010:
+ 2739              	.LBB1011:
+1621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 2740              		.loc 3 1621 0
+ 2741 19e8 F30F6F95 		movdqu	-5696(%rbp), %xmm2
+ 2741      C0E9FFFF 
+ 2742 19f0 660F7F95 		movdqa	%xmm2, -6192(%rbp)
+ 2742      D0E7FFFF 
+ 2743 19f8 660F6F85 		movdqa	-6192(%rbp), %xmm0
+ 2743      D0E7FFFF 
+ 2744 1a00 F30F7F85 		movdqu	%xmm0, -5664(%rbp)
+ 2744      E0E9FFFF 
+ 2745              	.LBB1012:
+ 2746              	.LBB1013:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 2747              		.loc 1 852 0
+ 2748 1a08 F30F6F85 		movdqu	-5664(%rbp), %xmm0
+ 2748      E0E9FFFF 
+ 2749 1a10 660F3ADF 		aeskeygenassist	$1, %xmm0, %xmm0
+ 2749      C001
+ 2750              	.LBE1013:
+ 2751              	.LBE1012:
+1622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 2752              		.loc 3 1622 0
+ 2753 1a16 660F7F85 		movdqa	%xmm0, -6192(%rbp)
+ 2753      D0E7FFFF 
+ 2754 1a1e 660F6F95 		movdqa	-6192(%rbp), %xmm2
+ 2754      D0E7FFFF 
+ 2755 1a26 F30F7F95 		movdqu	%xmm2, -5648(%rbp)
+ 2755      F0E9FFFF 
+ 2756 1a2e F30F6F85 		movdqu	-5648(%rbp), %xmm0
+ 2756      F0E9FFFF 
+ 2757 1a36 F30F7F85 		movdqu	%xmm0, -5616(%rbp)
+ 2757      10EAFFFF 
+ 2758              	.LBB1014:
+ 2759              	.LBB1015:
+ 2760              	.LBB1016:
+ 2761              	.LBB1017:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 2762              		.loc 1 450 0
+ 2763 1a3e F30F6F85 		movdqu	-5616(%rbp), %xmm0
+ 2763      10EAFFFF 
+ 2764 1a46 660F70C0 		pshufd	$85, %xmm0, %xmm0
+ 2764      55
+ 2765              	.LBE1017:
+ 2766              	.LBE1016:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 115
+
+
+ 2767              	.LBE1015:
+ 2768              	.LBE1014:
+ 2769              	.LBE1011:
+ 2770              	.LBE1010:
+ 2771              		.loc 3 1788 0
+ 2772 1a4b 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 2772      A0E7FFFF 
+ 2773 1a53 660F6F85 		movdqa	-6320(%rbp), %xmm0
+ 2773      50E7FFFF 
+ 2774 1a5b F30F7F85 		movdqu	%xmm0, -5600(%rbp)
+ 2774      20EAFFFF 
+ 2775              	.LBB1018:
+ 2776              	.LBB1019:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 2777              		.loc 3 1565 0
+ 2778 1a63 F30F6F95 		movdqu	-5600(%rbp), %xmm2
+ 2778      20EAFFFF 
+ 2779 1a6b 660F7F95 		movdqa	%xmm2, -6176(%rbp)
+ 2779      E0E7FFFF 
+ 2780 1a73 660F6F85 		movdqa	-6176(%rbp), %xmm0
+ 2780      E0E7FFFF 
+ 2781 1a7b F30F7F85 		movdqu	%xmm0, -5584(%rbp)
+ 2781      30EAFFFF 
+ 2782              	.LBB1020:
+ 2783              	.LBB1021:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2784              		.loc 3 1278 0
+ 2785 1a83 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 2785      00000000 
+ 2786 1a8b F30F6F8D 		movdqu	-5584(%rbp), %xmm1
+ 2786      30EAFFFF 
+ 2787 1a93 F30F7F8D 		movdqu	%xmm1, -5552(%rbp)
+ 2787      50EAFFFF 
+ 2788 1a9b F30F7F85 		movdqu	%xmm0, -5568(%rbp)
+ 2788      40EAFFFF 
+ 2789 1aa3 F30F6F85 		movdqu	-5552(%rbp), %xmm0
+ 2789      50EAFFFF 
+ 2790 1aab F30F7F85 		movdqu	%xmm0, -5520(%rbp)
+ 2790      70EAFFFF 
+ 2791 1ab3 F30F6F85 		movdqu	-5568(%rbp), %xmm0
+ 2791      40EAFFFF 
+ 2792 1abb F30F7F85 		movdqu	%xmm0, -5536(%rbp)
+ 2792      60EAFFFF 
+ 2793              	.LBB1022:
+ 2794              	.LBB1023:
+ 2795              	.LBB1024:
+ 2796              	.LBB1025:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2797              		.loc 1 529 0
+ 2798 1ac3 F30F6F8D 		movdqu	-5536(%rbp), %xmm1
+ 2798      60EAFFFF 
+ 2799 1acb F30F6F85 		movdqu	-5520(%rbp), %xmm0
+ 2799      70EAFFFF 
+ 2800 1ad3 660F3800 		pshufb	%xmm1, %xmm0
+ 2800      C1
+ 2801              	.LBE1025:
+ 2802              	.LBE1024:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 116
+
+
+ 2803              	.LBE1023:
+ 2804              	.LBE1022:
+ 2805              	.LBE1021:
+ 2806              	.LBE1020:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2807              		.loc 3 1567 0
+ 2808 1ad8 660F7F85 		movdqa	%xmm0, -6176(%rbp)
+ 2808      E0E7FFFF 
+ 2809 1ae0 660F6F85 		movdqa	-6176(%rbp), %xmm0
+ 2809      E0E7FFFF 
+ 2810 1ae8 660FEF85 		pxor	-5600(%rbp), %xmm0
+ 2810      20EAFFFF 
+ 2811 1af0 F30F7F85 		movdqu	%xmm0, -5600(%rbp)
+ 2811      20EAFFFF 
+ 2812 1af8 660F6F95 		movdqa	-6176(%rbp), %xmm2
+ 2812      E0E7FFFF 
+ 2813 1b00 F30F7F95 		movdqu	%xmm2, -5504(%rbp)
+ 2813      80EAFFFF 
+ 2814              	.LBB1026:
+ 2815              	.LBB1027:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2816              		.loc 3 1278 0
+ 2817 1b08 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 2817      00000000 
+ 2818 1b10 F30F6F8D 		movdqu	-5504(%rbp), %xmm1
+ 2818      80EAFFFF 
+ 2819 1b18 F30F7F8D 		movdqu	%xmm1, -5472(%rbp)
+ 2819      A0EAFFFF 
+ 2820 1b20 F30F7F85 		movdqu	%xmm0, -5488(%rbp)
+ 2820      90EAFFFF 
+ 2821 1b28 F30F6F85 		movdqu	-5472(%rbp), %xmm0
+ 2821      A0EAFFFF 
+ 2822 1b30 F30F7F85 		movdqu	%xmm0, -5440(%rbp)
+ 2822      C0EAFFFF 
+ 2823 1b38 F30F6F85 		movdqu	-5488(%rbp), %xmm0
+ 2823      90EAFFFF 
+ 2824 1b40 F30F7F85 		movdqu	%xmm0, -5456(%rbp)
+ 2824      B0EAFFFF 
+ 2825              	.LBB1028:
+ 2826              	.LBB1029:
+ 2827              	.LBB1030:
+ 2828              	.LBB1031:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2829              		.loc 1 529 0
+ 2830 1b48 F30F6F8D 		movdqu	-5456(%rbp), %xmm1
+ 2830      B0EAFFFF 
+ 2831 1b50 F30F6F85 		movdqu	-5440(%rbp), %xmm0
+ 2831      C0EAFFFF 
+ 2832 1b58 660F3800 		pshufb	%xmm1, %xmm0
+ 2832      C1
+ 2833              	.LBE1031:
+ 2834              	.LBE1030:
+ 2835              	.LBE1029:
+ 2836              	.LBE1028:
+ 2837              	.LBE1027:
+ 2838              	.LBE1026:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+
GAS LISTING /tmp/ccPaCTqg.s 			page 117
+
+
+ 2839              		.loc 3 1568 0
+ 2840 1b5d 660F7F85 		movdqa	%xmm0, -6176(%rbp)
+ 2840      E0E7FFFF 
+ 2841 1b65 660F6F85 		movdqa	-6176(%rbp), %xmm0
+ 2841      E0E7FFFF 
+ 2842 1b6d 660FEF85 		pxor	-5600(%rbp), %xmm0
+ 2842      20EAFFFF 
+ 2843 1b75 F30F7F85 		movdqu	%xmm0, -5600(%rbp)
+ 2843      20EAFFFF 
+ 2844 1b7d 660F6F85 		movdqa	-6176(%rbp), %xmm0
+ 2844      E0E7FFFF 
+ 2845 1b85 F30F7F85 		movdqu	%xmm0, -5424(%rbp)
+ 2845      D0EAFFFF 
+ 2846              	.LBB1032:
+ 2847              	.LBB1033:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2848              		.loc 3 1278 0
+ 2849 1b8d 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 2849      00000000 
+ 2850 1b95 F30F6F8D 		movdqu	-5424(%rbp), %xmm1
+ 2850      D0EAFFFF 
+ 2851 1b9d F30F7F8D 		movdqu	%xmm1, -5392(%rbp)
+ 2851      F0EAFFFF 
+ 2852 1ba5 F30F7F85 		movdqu	%xmm0, -5408(%rbp)
+ 2852      E0EAFFFF 
+ 2853 1bad F30F6F85 		movdqu	-5392(%rbp), %xmm0
+ 2853      F0EAFFFF 
+ 2854 1bb5 F30F7F85 		movdqu	%xmm0, -5360(%rbp)
+ 2854      10EBFFFF 
+ 2855 1bbd F30F6F85 		movdqu	-5408(%rbp), %xmm0
+ 2855      E0EAFFFF 
+ 2856 1bc5 F30F7F85 		movdqu	%xmm0, -5376(%rbp)
+ 2856      00EBFFFF 
+ 2857              	.LBB1034:
+ 2858              	.LBB1035:
+ 2859              	.LBB1036:
+ 2860              	.LBB1037:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2861              		.loc 1 529 0
+ 2862 1bcd F30F6F8D 		movdqu	-5376(%rbp), %xmm1
+ 2862      00EBFFFF 
+ 2863 1bd5 F30F6F85 		movdqu	-5360(%rbp), %xmm0
+ 2863      10EBFFFF 
+ 2864 1bdd 660F3800 		pshufb	%xmm1, %xmm0
+ 2864      C1
+ 2865              	.LBE1037:
+ 2866              	.LBE1036:
+ 2867              	.LBE1035:
+ 2868              	.LBE1034:
+ 2869              	.LBE1033:
+ 2870              	.LBE1032:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2871              		.loc 3 1569 0
+ 2872 1be2 660F7F85 		movdqa	%xmm0, -6176(%rbp)
+ 2872      E0E7FFFF 
+ 2873 1bea 660F6F85 		movdqa	-6176(%rbp), %xmm0
+ 2873      E0E7FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 118
+
+
+ 2874 1bf2 660FEF85 		pxor	-5600(%rbp), %xmm0
+ 2874      20EAFFFF 
+ 2875 1bfa F30F7F85 		movdqu	%xmm0, -5600(%rbp)
+ 2875      20EAFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 2876              		.loc 3 1571 0
+ 2877 1c02 F30F6F85 		movdqu	-5600(%rbp), %xmm0
+ 2877      20EAFFFF 
+ 2878              	.LBE1019:
+ 2879              	.LBE1018:
+1789:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v1, 0x01);                            /* F(k5) : F(k5) : F(k5)  : F(k5)        */
+1790:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3  = AESBCMEMBER(ShiftXorColumns) (v0);       /* k0    : k0^k1 :k0^k1^k2:k0^k1^k2^k3   */
+ 2880              		.loc 3 1790 0
+ 2881 1c0a 660F7F85 		movdqa	%xmm0, -6272(%rbp)
+ 2881      80E7FFFF 
+1791:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3 ^= k;                                       /* k6    : k7    : k8     : k9           */
+ 2882              		.loc 3 1791 0
+ 2883 1c12 660F6F95 		movdqa	-6272(%rbp), %xmm2
+ 2883      80E7FFFF 
+ 2884 1c1a 660FEF95 		pxor	-6240(%rbp), %xmm2
+ 2884      A0E7FFFF 
+ 2885 1c22 660F7F95 		movdqa	%xmm2, -6272(%rbp)
+ 2885      80E7FFFF 
+ 2886 1c2a 660F6F85 		movdqa	-6304(%rbp), %xmm0
+ 2886      60E7FFFF 
+ 2887 1c32 F30F7F85 		movdqu	%xmm0, -5344(%rbp)
+ 2887      20EBFFFF 
+ 2888              	.LBB1038:
+ 2889              	.LBB1039:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 2890              		.loc 3 1565 0
+ 2891 1c3a F30F6F95 		movdqu	-5344(%rbp), %xmm2
+ 2891      20EBFFFF 
+ 2892 1c42 660F7F95 		movdqa	%xmm2, -6160(%rbp)
+ 2892      F0E7FFFF 
+ 2893 1c4a 660F6F85 		movdqa	-6160(%rbp), %xmm0
+ 2893      F0E7FFFF 
+ 2894 1c52 F30F7F85 		movdqu	%xmm0, -5328(%rbp)
+ 2894      30EBFFFF 
+ 2895              	.LBB1040:
+ 2896              	.LBB1041:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2897              		.loc 3 1278 0
+ 2898 1c5a 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 2898      00000000 
+ 2899 1c62 F30F6F8D 		movdqu	-5328(%rbp), %xmm1
+ 2899      30EBFFFF 
+ 2900 1c6a F30F7F8D 		movdqu	%xmm1, -5296(%rbp)
+ 2900      50EBFFFF 
+ 2901 1c72 F30F7F85 		movdqu	%xmm0, -5312(%rbp)
+ 2901      40EBFFFF 
+ 2902 1c7a F30F6F85 		movdqu	-5296(%rbp), %xmm0
+ 2902      50EBFFFF 
+ 2903 1c82 F30F7F85 		movdqu	%xmm0, -5264(%rbp)
+ 2903      70EBFFFF 
+ 2904 1c8a F30F6F85 		movdqu	-5312(%rbp), %xmm0
+ 2904      40EBFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 119
+
+
+ 2905 1c92 F30F7F85 		movdqu	%xmm0, -5280(%rbp)
+ 2905      60EBFFFF 
+ 2906              	.LBB1042:
+ 2907              	.LBB1043:
+ 2908              	.LBB1044:
+ 2909              	.LBB1045:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2910              		.loc 1 529 0
+ 2911 1c9a F30F6F8D 		movdqu	-5280(%rbp), %xmm1
+ 2911      60EBFFFF 
+ 2912 1ca2 F30F6F85 		movdqu	-5264(%rbp), %xmm0
+ 2912      70EBFFFF 
+ 2913 1caa 660F3800 		pshufb	%xmm1, %xmm0
+ 2913      C1
+ 2914              	.LBE1045:
+ 2915              	.LBE1044:
+ 2916              	.LBE1043:
+ 2917              	.LBE1042:
+ 2918              	.LBE1041:
+ 2919              	.LBE1040:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2920              		.loc 3 1567 0
+ 2921 1caf 660F7F85 		movdqa	%xmm0, -6160(%rbp)
+ 2921      F0E7FFFF 
+ 2922 1cb7 660F6F85 		movdqa	-6160(%rbp), %xmm0
+ 2922      F0E7FFFF 
+ 2923 1cbf 660FEF85 		pxor	-5344(%rbp), %xmm0
+ 2923      20EBFFFF 
+ 2924 1cc7 F30F7F85 		movdqu	%xmm0, -5344(%rbp)
+ 2924      20EBFFFF 
+ 2925 1ccf 660F6F95 		movdqa	-6160(%rbp), %xmm2
+ 2925      F0E7FFFF 
+ 2926 1cd7 F30F7F95 		movdqu	%xmm2, -5248(%rbp)
+ 2926      80EBFFFF 
+ 2927              	.LBB1046:
+ 2928              	.LBB1047:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2929              		.loc 3 1278 0
+ 2930 1cdf 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 2930      00000000 
+ 2931 1ce7 F30F6F8D 		movdqu	-5248(%rbp), %xmm1
+ 2931      80EBFFFF 
+ 2932 1cef F30F7F8D 		movdqu	%xmm1, -5216(%rbp)
+ 2932      A0EBFFFF 
+ 2933 1cf7 F30F7F85 		movdqu	%xmm0, -5232(%rbp)
+ 2933      90EBFFFF 
+ 2934 1cff F30F6F85 		movdqu	-5216(%rbp), %xmm0
+ 2934      A0EBFFFF 
+ 2935 1d07 F30F7F85 		movdqu	%xmm0, -5184(%rbp)
+ 2935      C0EBFFFF 
+ 2936 1d0f F30F6F85 		movdqu	-5232(%rbp), %xmm0
+ 2936      90EBFFFF 
+ 2937 1d17 F30F7F85 		movdqu	%xmm0, -5200(%rbp)
+ 2937      B0EBFFFF 
+ 2938              	.LBB1048:
+ 2939              	.LBB1049:
+ 2940              	.LBB1050:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 120
+
+
+ 2941              	.LBB1051:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2942              		.loc 1 529 0
+ 2943 1d1f F30F6F8D 		movdqu	-5200(%rbp), %xmm1
+ 2943      B0EBFFFF 
+ 2944 1d27 F30F6F85 		movdqu	-5184(%rbp), %xmm0
+ 2944      C0EBFFFF 
+ 2945 1d2f 660F3800 		pshufb	%xmm1, %xmm0
+ 2945      C1
+ 2946              	.LBE1051:
+ 2947              	.LBE1050:
+ 2948              	.LBE1049:
+ 2949              	.LBE1048:
+ 2950              	.LBE1047:
+ 2951              	.LBE1046:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2952              		.loc 3 1568 0
+ 2953 1d34 660F7F85 		movdqa	%xmm0, -6160(%rbp)
+ 2953      F0E7FFFF 
+ 2954 1d3c 660F6F85 		movdqa	-6160(%rbp), %xmm0
+ 2954      F0E7FFFF 
+ 2955 1d44 660FEF85 		pxor	-5344(%rbp), %xmm0
+ 2955      20EBFFFF 
+ 2956 1d4c F30F7F85 		movdqu	%xmm0, -5344(%rbp)
+ 2956      20EBFFFF 
+ 2957 1d54 660F6F85 		movdqa	-6160(%rbp), %xmm0
+ 2957      F0E7FFFF 
+ 2958 1d5c F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 2958      D0EBFFFF 
+ 2959              	.LBB1052:
+ 2960              	.LBB1053:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2961              		.loc 3 1278 0
+ 2962 1d64 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 2962      00000000 
+ 2963 1d6c F30F6F8D 		movdqu	-5168(%rbp), %xmm1
+ 2963      D0EBFFFF 
+ 2964 1d74 F30F7F8D 		movdqu	%xmm1, -5136(%rbp)
+ 2964      F0EBFFFF 
+ 2965 1d7c F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 2965      E0EBFFFF 
+ 2966 1d84 F30F6F85 		movdqu	-5136(%rbp), %xmm0
+ 2966      F0EBFFFF 
+ 2967 1d8c F30F7F85 		movdqu	%xmm0, -5104(%rbp)
+ 2967      10ECFFFF 
+ 2968 1d94 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 2968      E0EBFFFF 
+ 2969 1d9c F30F7F85 		movdqu	%xmm0, -5120(%rbp)
+ 2969      00ECFFFF 
+ 2970              	.LBB1054:
+ 2971              	.LBB1055:
+ 2972              	.LBB1056:
+ 2973              	.LBB1057:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2974              		.loc 1 529 0
+ 2975 1da4 F30F6F8D 		movdqu	-5120(%rbp), %xmm1
+ 2975      00ECFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 121
+
+
+ 2976 1dac F30F6F85 		movdqu	-5104(%rbp), %xmm0
+ 2976      10ECFFFF 
+ 2977 1db4 660F3800 		pshufb	%xmm1, %xmm0
+ 2977      C1
+ 2978              	.LBE1057:
+ 2979              	.LBE1056:
+ 2980              	.LBE1055:
+ 2981              	.LBE1054:
+ 2982              	.LBE1053:
+ 2983              	.LBE1052:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2984              		.loc 3 1569 0
+ 2985 1db9 660F7F85 		movdqa	%xmm0, -6160(%rbp)
+ 2985      F0E7FFFF 
+ 2986 1dc1 660F6F85 		movdqa	-6160(%rbp), %xmm0
+ 2986      F0E7FFFF 
+ 2987 1dc9 660FEF85 		pxor	-5344(%rbp), %xmm0
+ 2987      20EBFFFF 
+ 2988 1dd1 F30F7F85 		movdqu	%xmm0, -5344(%rbp)
+ 2988      20EBFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 2989              		.loc 3 1571 0
+ 2990 1dd9 F30F6F85 		movdqu	-5344(%rbp), %xmm0
+ 2990      20EBFFFF 
+ 2991              	.LBE1039:
+ 2992              	.LBE1038:
+1792:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4  = AESBCMEMBER(ShiftXorColumns) (v1);       /* k4    : k4^k5 : k4^k5  : k4^k5        */
+ 2993              		.loc 3 1792 0
+ 2994 1de1 660F7F85 		movdqa	%xmm0, -6256(%rbp)
+ 2994      90E7FFFF 
+1793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k9    : k9    : k9     : k9           */
+ 2995              		.loc 3 1793 0
+ 2996 1de9 660F6F95 		movdqa	-6272(%rbp), %xmm2
+ 2996      80E7FFFF 
+ 2997 1df1 660F7F95 		movdqa	%xmm2, -6240(%rbp)
+ 2997      A0E7FFFF 
+ 2998 1df9 660F6F85 		movdqa	-6240(%rbp), %xmm0
+ 2998      A0E7FFFF 
+ 2999 1e01 F30F7F85 		movdqu	%xmm0, -5088(%rbp)
+ 2999      20ECFFFF 
+ 3000 1e09 F30F6F85 		movdqu	-5088(%rbp), %xmm0
+ 3000      20ECFFFF 
+ 3001 1e11 F30F7F85 		movdqu	%xmm0, -5056(%rbp)
+ 3001      40ECFFFF 
+ 3002              	.LBB1058:
+ 3003              	.LBB1059:
+ 3004              	.LBB1060:
+ 3005              	.LBB1061:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 3006              		.loc 1 450 0
+ 3007 1e19 F30F6F85 		movdqu	-5056(%rbp), %xmm0
+ 3007      40ECFFFF 
+ 3008 1e21 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 3008      FF
+ 3009              	.LBE1061:
+ 3010              	.LBE1060:
+ 3011              	.LBE1059:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 122
+
+
+ 3012              	.LBE1058:
+ 3013              		.loc 3 1793 0
+ 3014 1e26 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 3014      A0E7FFFF 
+1794:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4 ^= k;                                       /* k10   : k11   : k10    : k11          */
+ 3015              		.loc 3 1794 0
+ 3016 1e2e 660F6F95 		movdqa	-6256(%rbp), %xmm2
+ 3016      90E7FFFF 
+ 3017 1e36 660FEF95 		pxor	-6240(%rbp), %xmm2
+ 3017      A0E7FFFF 
+ 3018 1e3e 660F7F95 		movdqa	%xmm2, -6256(%rbp)
+ 3018      90E7FFFF 
+ 3019 1e46 660F6F85 		movdqa	-6304(%rbp), %xmm0
+ 3019      60E7FFFF 
+ 3020 1e4e F30F7F85 		movdqu	%xmm0, -5024(%rbp)
+ 3020      60ECFFFF 
+ 3021 1e56 660F6F95 		movdqa	-6272(%rbp), %xmm2
+ 3021      80E7FFFF 
+ 3022 1e5e F30F7F95 		movdqu	%xmm2, -5040(%rbp)
+ 3022      50ECFFFF 
+ 3023 1e66 F30F6F85 		movdqu	-5024(%rbp), %xmm0
+ 3023      60ECFFFF 
+ 3024 1e6e F30F7F85 		movdqu	%xmm0, -4976(%rbp)
+ 3024      90ECFFFF 
+ 3025 1e76 F30F6F85 		movdqu	-5040(%rbp), %xmm0
+ 3025      50ECFFFF 
+ 3026 1e7e F30F7F85 		movdqu	%xmm0, -4992(%rbp)
+ 3026      80ECFFFF 
+ 3027              	.LBB1062:
+ 3028              	.LBB1063:
+ 3029              	.LBB1064:
+ 3030              	.LBB1065:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 3031              		.loc 1 366 0
+ 3032 1e86 F20F1085 		movsd	-4992(%rbp), %xmm0
+ 3032      80ECFFFF 
+ 3033 1e8e 660F1685 		movhpd	-4984(%rbp), %xmm0
+ 3033      88ECFFFF 
+ 3034 1e96 F20F108D 		movsd	-4976(%rbp), %xmm1
+ 3034      90ECFFFF 
+ 3035 1e9e 660F168D 		movhpd	-4968(%rbp), %xmm1
+ 3035      98ECFFFF 
+ 3036 1ea6 660F28D1 		movapd	%xmm1, %xmm2
+ 3037 1eaa 660F14D0 		unpcklpd	%xmm0, %xmm2
+ 3038 1eae 660F28C2 		movapd	%xmm2, %xmm0
+ 3039              	.LBE1065:
+ 3040              	.LBE1064:
+ 3041              	.LBE1063:
+ 3042              	.LBE1062:
+1795:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateMerge1) (v1,v3);        /* k4    : k5    : k6     : k7           */
+ 3043              		.loc 3 1795 0
+ 3044 1eb2 660F7F85 		movdqa	%xmm0, -6304(%rbp)
+ 3044      60E7FFFF 
+1796:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[1] = v1; /* K4:K5:K6:K7 */
+ 3045              		.loc 3 1796 0
+ 3046 1eba 488B8548 		movq	-5816(%rbp), %rax
+ 3046      E9FFFF
+
GAS LISTING /tmp/ccPaCTqg.s 			page 123
+
+
+ 3047 1ec1 4883C010 		addq	$16, %rax
+ 3048 1ec5 660F6F85 		movdqa	-6304(%rbp), %xmm0
+ 3048      60E7FFFF 
+ 3049 1ecd 660F7F00 		movdqa	%xmm0, (%rax)
+ 3050 1ed1 660F6F95 		movdqa	-6272(%rbp), %xmm2
+ 3050      80E7FFFF 
+ 3051 1ed9 F30F7F95 		movdqu	%xmm2, -4944(%rbp)
+ 3051      B0ECFFFF 
+ 3052 1ee1 660F6F85 		movdqa	-6256(%rbp), %xmm0
+ 3052      90E7FFFF 
+ 3053 1ee9 F30F7F85 		movdqu	%xmm0, -4960(%rbp)
+ 3053      A0ECFFFF 
+ 3054 1ef1 F30F6F85 		movdqu	-4944(%rbp), %xmm0
+ 3054      B0ECFFFF 
+ 3055 1ef9 F30F7F85 		movdqu	%xmm0, -4896(%rbp)
+ 3055      E0ECFFFF 
+ 3056 1f01 F30F6F85 		movdqu	-4960(%rbp), %xmm0
+ 3056      A0ECFFFF 
+ 3057 1f09 F30F7F85 		movdqu	%xmm0, -4912(%rbp)
+ 3057      D0ECFFFF 
+ 3058              	.LBB1066:
+ 3059              	.LBB1067:
+ 3060              	.LBB1068:
+ 3061              	.LBB1069:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 3062              		.loc 1 366 0
+ 3063 1f11 F20F108D 		movsd	-4912(%rbp), %xmm1
+ 3063      D0ECFFFF 
+ 3064 1f19 660F168D 		movhpd	-4904(%rbp), %xmm1
+ 3064      D8ECFFFF 
+ 3065 1f21 F20F1085 		movsd	-4896(%rbp), %xmm0
+ 3065      E0ECFFFF 
+ 3066 1f29 660F1685 		movhpd	-4888(%rbp), %xmm0
+ 3066      E8ECFFFF 
+ 3067 1f31 660FC6C1 		shufpd	$1, %xmm1, %xmm0
+ 3067      01
+ 3068              	.LBE1069:
+ 3069              	.LBE1068:
+ 3070              	.LBE1067:
+ 3071              	.LBE1066:
+1797:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1798:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v2  = AESBCMEMBER(StateMerge2) (v3,v4);        /* k8    : k9    : k10    : k11          */
+ 3072              		.loc 3 1798 0
+ 3073 1f36 660F7F85 		movdqa	%xmm0, -6288(%rbp)
+ 3073      70E7FFFF 
+1799:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[2] = v2; /* K8:K9:K10:K11 */
+ 3074              		.loc 3 1799 0
+ 3075 1f3e 488B8548 		movq	-5816(%rbp), %rax
+ 3075      E9FFFF
+ 3076 1f45 4883C020 		addq	$32, %rax
+ 3077 1f49 660F6F95 		movdqa	-6288(%rbp), %xmm2
+ 3077      70E7FFFF 
+ 3078 1f51 660F7F10 		movdqa	%xmm2, (%rax)
+ 3079 1f55 660F6F85 		movdqa	-6272(%rbp), %xmm0
+ 3079      80E7FFFF 
+ 3080 1f5d F30F7F85 		movdqu	%xmm0, -4880(%rbp)
+ 3080      F0ECFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 124
+
+
+ 3081              	.LBB1070:
+ 3082              	.LBB1071:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 3083              		.loc 3 1565 0
+ 3084 1f65 F30F6F95 		movdqu	-4880(%rbp), %xmm2
+ 3084      F0ECFFFF 
+ 3085 1f6d 660F7F95 		movdqa	%xmm2, -6144(%rbp)
+ 3085      00E8FFFF 
+ 3086 1f75 660F6F85 		movdqa	-6144(%rbp), %xmm0
+ 3086      00E8FFFF 
+ 3087 1f7d F30F7F85 		movdqu	%xmm0, -4864(%rbp)
+ 3087      00EDFFFF 
+ 3088              	.LBB1072:
+ 3089              	.LBB1073:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3090              		.loc 3 1278 0
+ 3091 1f85 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 3091      00000000 
+ 3092 1f8d F30F6F8D 		movdqu	-4864(%rbp), %xmm1
+ 3092      00EDFFFF 
+ 3093 1f95 F30F7F8D 		movdqu	%xmm1, -4832(%rbp)
+ 3093      20EDFFFF 
+ 3094 1f9d F30F7F85 		movdqu	%xmm0, -4848(%rbp)
+ 3094      10EDFFFF 
+ 3095 1fa5 F30F6F85 		movdqu	-4832(%rbp), %xmm0
+ 3095      20EDFFFF 
+ 3096 1fad F30F7F85 		movdqu	%xmm0, -4800(%rbp)
+ 3096      40EDFFFF 
+ 3097 1fb5 F30F6F85 		movdqu	-4848(%rbp), %xmm0
+ 3097      10EDFFFF 
+ 3098 1fbd F30F7F85 		movdqu	%xmm0, -4816(%rbp)
+ 3098      30EDFFFF 
+ 3099              	.LBB1074:
+ 3100              	.LBB1075:
+ 3101              	.LBB1076:
+ 3102              	.LBB1077:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3103              		.loc 1 529 0
+ 3104 1fc5 F30F6F8D 		movdqu	-4816(%rbp), %xmm1
+ 3104      30EDFFFF 
+ 3105 1fcd F30F6F85 		movdqu	-4800(%rbp), %xmm0
+ 3105      40EDFFFF 
+ 3106 1fd5 660F3800 		pshufb	%xmm1, %xmm0
+ 3106      C1
+ 3107              	.LBE1077:
+ 3108              	.LBE1076:
+ 3109              	.LBE1075:
+ 3110              	.LBE1074:
+ 3111              	.LBE1073:
+ 3112              	.LBE1072:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3113              		.loc 3 1567 0
+ 3114 1fda 660F7F85 		movdqa	%xmm0, -6144(%rbp)
+ 3114      00E8FFFF 
+ 3115 1fe2 660F6F85 		movdqa	-6144(%rbp), %xmm0
+ 3115      00E8FFFF 
+ 3116 1fea 660FEF85 		pxor	-4880(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 125
+
+
+ 3116      F0ECFFFF 
+ 3117 1ff2 F30F7F85 		movdqu	%xmm0, -4880(%rbp)
+ 3117      F0ECFFFF 
+ 3118 1ffa 660F6F95 		movdqa	-6144(%rbp), %xmm2
+ 3118      00E8FFFF 
+ 3119 2002 F30F7F95 		movdqu	%xmm2, -4784(%rbp)
+ 3119      50EDFFFF 
+ 3120              	.LBB1078:
+ 3121              	.LBB1079:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3122              		.loc 3 1278 0
+ 3123 200a 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 3123      00000000 
+ 3124 2012 F30F6F8D 		movdqu	-4784(%rbp), %xmm1
+ 3124      50EDFFFF 
+ 3125 201a F30F7F8D 		movdqu	%xmm1, -4752(%rbp)
+ 3125      70EDFFFF 
+ 3126 2022 F30F7F85 		movdqu	%xmm0, -4768(%rbp)
+ 3126      60EDFFFF 
+ 3127 202a F30F6F85 		movdqu	-4752(%rbp), %xmm0
+ 3127      70EDFFFF 
+ 3128 2032 F30F7F85 		movdqu	%xmm0, -4720(%rbp)
+ 3128      90EDFFFF 
+ 3129 203a F30F6F85 		movdqu	-4768(%rbp), %xmm0
+ 3129      60EDFFFF 
+ 3130 2042 F30F7F85 		movdqu	%xmm0, -4736(%rbp)
+ 3130      80EDFFFF 
+ 3131              	.LBB1080:
+ 3132              	.LBB1081:
+ 3133              	.LBB1082:
+ 3134              	.LBB1083:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3135              		.loc 1 529 0
+ 3136 204a F30F6F8D 		movdqu	-4736(%rbp), %xmm1
+ 3136      80EDFFFF 
+ 3137 2052 F30F6F85 		movdqu	-4720(%rbp), %xmm0
+ 3137      90EDFFFF 
+ 3138 205a 660F3800 		pshufb	%xmm1, %xmm0
+ 3138      C1
+ 3139              	.LBE1083:
+ 3140              	.LBE1082:
+ 3141              	.LBE1081:
+ 3142              	.LBE1080:
+ 3143              	.LBE1079:
+ 3144              	.LBE1078:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3145              		.loc 3 1568 0
+ 3146 205f 660F7F85 		movdqa	%xmm0, -6144(%rbp)
+ 3146      00E8FFFF 
+ 3147 2067 660F6F85 		movdqa	-6144(%rbp), %xmm0
+ 3147      00E8FFFF 
+ 3148 206f 660FEF85 		pxor	-4880(%rbp), %xmm0
+ 3148      F0ECFFFF 
+ 3149 2077 F30F7F85 		movdqu	%xmm0, -4880(%rbp)
+ 3149      F0ECFFFF 
+ 3150 207f 660F6F85 		movdqa	-6144(%rbp), %xmm0
+ 3150      00E8FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 126
+
+
+ 3151 2087 F30F7F85 		movdqu	%xmm0, -4704(%rbp)
+ 3151      A0EDFFFF 
+ 3152              	.LBB1084:
+ 3153              	.LBB1085:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3154              		.loc 3 1278 0
+ 3155 208f 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 3155      00000000 
+ 3156 2097 F30F6F8D 		movdqu	-4704(%rbp), %xmm1
+ 3156      A0EDFFFF 
+ 3157 209f F30F7F8D 		movdqu	%xmm1, -4672(%rbp)
+ 3157      C0EDFFFF 
+ 3158 20a7 F30F7F85 		movdqu	%xmm0, -4688(%rbp)
+ 3158      B0EDFFFF 
+ 3159 20af F30F6F85 		movdqu	-4672(%rbp), %xmm0
+ 3159      C0EDFFFF 
+ 3160 20b7 F30F7F85 		movdqu	%xmm0, -4640(%rbp)
+ 3160      E0EDFFFF 
+ 3161 20bf F30F6F85 		movdqu	-4688(%rbp), %xmm0
+ 3161      B0EDFFFF 
+ 3162 20c7 F30F7F85 		movdqu	%xmm0, -4656(%rbp)
+ 3162      D0EDFFFF 
+ 3163              	.LBB1086:
+ 3164              	.LBB1087:
+ 3165              	.LBB1088:
+ 3166              	.LBB1089:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3167              		.loc 1 529 0
+ 3168 20cf F30F6F8D 		movdqu	-4656(%rbp), %xmm1
+ 3168      D0EDFFFF 
+ 3169 20d7 F30F6F85 		movdqu	-4640(%rbp), %xmm0
+ 3169      E0EDFFFF 
+ 3170 20df 660F3800 		pshufb	%xmm1, %xmm0
+ 3170      C1
+ 3171              	.LBE1089:
+ 3172              	.LBE1088:
+ 3173              	.LBE1087:
+ 3174              	.LBE1086:
+ 3175              	.LBE1085:
+ 3176              	.LBE1084:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3177              		.loc 3 1569 0
+ 3178 20e4 660F7F85 		movdqa	%xmm0, -6144(%rbp)
+ 3178      00E8FFFF 
+ 3179 20ec 660F6F85 		movdqa	-6144(%rbp), %xmm0
+ 3179      00E8FFFF 
+ 3180 20f4 660FEF85 		pxor	-4880(%rbp), %xmm0
+ 3180      F0ECFFFF 
+ 3181 20fc F30F7F85 		movdqu	%xmm0, -4880(%rbp)
+ 3181      F0ECFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 3182              		.loc 3 1571 0
+ 3183 2104 F30F6F85 		movdqu	-4880(%rbp), %xmm0
+ 3183      F0ECFFFF 
+ 3184              	.LBE1071:
+ 3185              	.LBE1070:
+1800:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 127
+
+
+1801:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 2 */
+1802:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(ShiftXorColumns) (v3);       /* k6    : k6^k7 :k6^k7^k8:k6^k7^k8^k9   */
+ 3186              		.loc 3 1802 0
+ 3187 210c 660F7F85 		movdqa	%xmm0, -6320(%rbp)
+ 3187      50E7FFFF 
+ 3188 2114 660F6F95 		movdqa	-6256(%rbp), %xmm2
+ 3188      90E7FFFF 
+ 3189 211c F30F7F95 		movdqu	%xmm2, -4624(%rbp)
+ 3189      F0EDFFFF 
+ 3190              	.LBB1090:
+ 3191              	.LBB1091:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 3192              		.loc 3 1565 0
+ 3193 2124 F30F6F85 		movdqu	-4624(%rbp), %xmm0
+ 3193      F0EDFFFF 
+ 3194 212c 660F7F85 		movdqa	%xmm0, -6128(%rbp)
+ 3194      10E8FFFF 
+ 3195 2134 660F6F95 		movdqa	-6128(%rbp), %xmm2
+ 3195      10E8FFFF 
+ 3196 213c F30F7F95 		movdqu	%xmm2, -4608(%rbp)
+ 3196      00EEFFFF 
+ 3197              	.LBB1092:
+ 3198              	.LBB1093:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3199              		.loc 3 1278 0
+ 3200 2144 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 3200      00000000 
+ 3201 214c F30F6F8D 		movdqu	-4608(%rbp), %xmm1
+ 3201      00EEFFFF 
+ 3202 2154 F30F7F8D 		movdqu	%xmm1, -4576(%rbp)
+ 3202      20EEFFFF 
+ 3203 215c F30F7F85 		movdqu	%xmm0, -4592(%rbp)
+ 3203      10EEFFFF 
+ 3204 2164 F30F6F85 		movdqu	-4576(%rbp), %xmm0
+ 3204      20EEFFFF 
+ 3205 216c F30F7F85 		movdqu	%xmm0, -4544(%rbp)
+ 3205      40EEFFFF 
+ 3206 2174 F30F6F85 		movdqu	-4592(%rbp), %xmm0
+ 3206      10EEFFFF 
+ 3207 217c F30F7F85 		movdqu	%xmm0, -4560(%rbp)
+ 3207      30EEFFFF 
+ 3208              	.LBB1094:
+ 3209              	.LBB1095:
+ 3210              	.LBB1096:
+ 3211              	.LBB1097:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3212              		.loc 1 529 0
+ 3213 2184 F30F6F8D 		movdqu	-4560(%rbp), %xmm1
+ 3213      30EEFFFF 
+ 3214 218c F30F6F85 		movdqu	-4544(%rbp), %xmm0
+ 3214      40EEFFFF 
+ 3215 2194 660F3800 		pshufb	%xmm1, %xmm0
+ 3215      C1
+ 3216              	.LBE1097:
+ 3217              	.LBE1096:
+ 3218              	.LBE1095:
+ 3219              	.LBE1094:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 128
+
+
+ 3220              	.LBE1093:
+ 3221              	.LBE1092:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3222              		.loc 3 1567 0
+ 3223 2199 660F7F85 		movdqa	%xmm0, -6128(%rbp)
+ 3223      10E8FFFF 
+ 3224 21a1 660F6F85 		movdqa	-6128(%rbp), %xmm0
+ 3224      10E8FFFF 
+ 3225 21a9 660FEF85 		pxor	-4624(%rbp), %xmm0
+ 3225      F0EDFFFF 
+ 3226 21b1 F30F7F85 		movdqu	%xmm0, -4624(%rbp)
+ 3226      F0EDFFFF 
+ 3227 21b9 660F6F85 		movdqa	-6128(%rbp), %xmm0
+ 3227      10E8FFFF 
+ 3228 21c1 F30F7F85 		movdqu	%xmm0, -4528(%rbp)
+ 3228      50EEFFFF 
+ 3229              	.LBB1098:
+ 3230              	.LBB1099:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3231              		.loc 3 1278 0
+ 3232 21c9 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 3232      00000000 
+ 3233 21d1 F30F6F8D 		movdqu	-4528(%rbp), %xmm1
+ 3233      50EEFFFF 
+ 3234 21d9 F30F7F8D 		movdqu	%xmm1, -4496(%rbp)
+ 3234      70EEFFFF 
+ 3235 21e1 F30F7F85 		movdqu	%xmm0, -4512(%rbp)
+ 3235      60EEFFFF 
+ 3236 21e9 F30F6F85 		movdqu	-4496(%rbp), %xmm0
+ 3236      70EEFFFF 
+ 3237 21f1 F30F7F85 		movdqu	%xmm0, -4464(%rbp)
+ 3237      90EEFFFF 
+ 3238 21f9 F30F6F85 		movdqu	-4512(%rbp), %xmm0
+ 3238      60EEFFFF 
+ 3239 2201 F30F7F85 		movdqu	%xmm0, -4480(%rbp)
+ 3239      80EEFFFF 
+ 3240              	.LBB1100:
+ 3241              	.LBB1101:
+ 3242              	.LBB1102:
+ 3243              	.LBB1103:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3244              		.loc 1 529 0
+ 3245 2209 F30F6F8D 		movdqu	-4480(%rbp), %xmm1
+ 3245      80EEFFFF 
+ 3246 2211 F30F6F85 		movdqu	-4464(%rbp), %xmm0
+ 3246      90EEFFFF 
+ 3247 2219 660F3800 		pshufb	%xmm1, %xmm0
+ 3247      C1
+ 3248              	.LBE1103:
+ 3249              	.LBE1102:
+ 3250              	.LBE1101:
+ 3251              	.LBE1100:
+ 3252              	.LBE1099:
+ 3253              	.LBE1098:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3254              		.loc 3 1568 0
+ 3255 221e 660F7F85 		movdqa	%xmm0, -6128(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 129
+
+
+ 3255      10E8FFFF 
+ 3256 2226 660F6F85 		movdqa	-6128(%rbp), %xmm0
+ 3256      10E8FFFF 
+ 3257 222e 660FEF85 		pxor	-4624(%rbp), %xmm0
+ 3257      F0EDFFFF 
+ 3258 2236 F30F7F85 		movdqu	%xmm0, -4624(%rbp)
+ 3258      F0EDFFFF 
+ 3259 223e 660F6F95 		movdqa	-6128(%rbp), %xmm2
+ 3259      10E8FFFF 
+ 3260 2246 F30F7F95 		movdqu	%xmm2, -4448(%rbp)
+ 3260      A0EEFFFF 
+ 3261              	.LBB1104:
+ 3262              	.LBB1105:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3263              		.loc 3 1278 0
+ 3264 224e 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 3264      00000000 
+ 3265 2256 F30F6F8D 		movdqu	-4448(%rbp), %xmm1
+ 3265      A0EEFFFF 
+ 3266 225e F30F7F8D 		movdqu	%xmm1, -4416(%rbp)
+ 3266      C0EEFFFF 
+ 3267 2266 F30F7F85 		movdqu	%xmm0, -4432(%rbp)
+ 3267      B0EEFFFF 
+ 3268 226e F30F6F85 		movdqu	-4416(%rbp), %xmm0
+ 3268      C0EEFFFF 
+ 3269 2276 F30F7F85 		movdqu	%xmm0, -4384(%rbp)
+ 3269      E0EEFFFF 
+ 3270 227e F30F6F85 		movdqu	-4432(%rbp), %xmm0
+ 3270      B0EEFFFF 
+ 3271 2286 F30F7F85 		movdqu	%xmm0, -4400(%rbp)
+ 3271      D0EEFFFF 
+ 3272              	.LBB1106:
+ 3273              	.LBB1107:
+ 3274              	.LBB1108:
+ 3275              	.LBB1109:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3276              		.loc 1 529 0
+ 3277 228e F30F6F8D 		movdqu	-4400(%rbp), %xmm1
+ 3277      D0EEFFFF 
+ 3278 2296 F30F6F85 		movdqu	-4384(%rbp), %xmm0
+ 3278      E0EEFFFF 
+ 3279 229e 660F3800 		pshufb	%xmm1, %xmm0
+ 3279      C1
+ 3280              	.LBE1109:
+ 3281              	.LBE1108:
+ 3282              	.LBE1107:
+ 3283              	.LBE1106:
+ 3284              	.LBE1105:
+ 3285              	.LBE1104:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3286              		.loc 3 1569 0
+ 3287 22a3 660F7F85 		movdqa	%xmm0, -6128(%rbp)
+ 3287      10E8FFFF 
+ 3288 22ab 660F6F85 		movdqa	-6128(%rbp), %xmm0
+ 3288      10E8FFFF 
+ 3289 22b3 660FEF85 		pxor	-4624(%rbp), %xmm0
+ 3289      F0EDFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 130
+
+
+ 3290 22bb F30F7F85 		movdqu	%xmm0, -4624(%rbp)
+ 3290      F0EDFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 3291              		.loc 3 1571 0
+ 3292 22c3 F30F6F85 		movdqu	-4624(%rbp), %xmm0
+ 3292      F0EDFFFF 
+ 3293              	.LBE1091:
+ 3294              	.LBE1090:
+1803:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(ShiftXorColumns) (v4);       /* k10   :k10^k11: k10^k11: k10^k11      */
+ 3295              		.loc 3 1803 0
+ 3296 22cb 660F7F85 		movdqa	%xmm0, -6304(%rbp)
+ 3296      60E7FFFF 
+1804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 3297              		.loc 3 1804 0
+ 3298 22d3 660F6F85 		movdqa	-6288(%rbp), %xmm0
+ 3298      70E7FFFF 
+ 3299 22db 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 3299      A0E7FFFF 
+ 3300 22e3 660F6F95 		movdqa	-6240(%rbp), %xmm2
+ 3300      A0E7FFFF 
+ 3301 22eb F30F7F95 		movdqu	%xmm2, -4352(%rbp)
+ 3301      00EFFFFF 
+ 3302              	.LBB1110:
+ 3303              	.LBB1111:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 3304              		.loc 3 1673 0
+ 3305 22f3 F30F6F85 		movdqu	-4352(%rbp), %xmm0
+ 3305      00EFFFFF 
+ 3306 22fb 660F7F85 		movdqa	%xmm0, -6112(%rbp)
+ 3306      20E8FFFF 
+ 3307 2303 660F6F95 		movdqa	-6112(%rbp), %xmm2
+ 3307      20E8FFFF 
+ 3308 230b F30F7F95 		movdqu	%xmm2, -4320(%rbp)
+ 3308      20EFFFFF 
+ 3309              	.LBB1112:
+ 3310              	.LBB1113:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 3311              		.loc 1 852 0
+ 3312 2313 F30F6F85 		movdqu	-4320(%rbp), %xmm0
+ 3312      20EFFFFF 
+ 3313 231b 660F3ADF 		aeskeygenassist	$2, %xmm0, %xmm0
+ 3313      C002
+ 3314              	.LBE1113:
+ 3315              	.LBE1112:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 3316              		.loc 3 1674 0
+ 3317 2321 660F7F85 		movdqa	%xmm0, -6112(%rbp)
+ 3317      20E8FFFF 
+ 3318 2329 660F6F85 		movdqa	-6112(%rbp), %xmm0
+ 3318      20E8FFFF 
+ 3319 2331 F30F7F85 		movdqu	%xmm0, -4304(%rbp)
+ 3319      30EFFFFF 
+ 3320 2339 F30F6F85 		movdqu	-4304(%rbp), %xmm0
+ 3320      30EFFFFF 
+ 3321 2341 F30F7F85 		movdqu	%xmm0, -4272(%rbp)
+ 3321      50EFFFFF 
+ 3322              	.LBB1114:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 131
+
+
+ 3323              	.LBB1115:
+ 3324              	.LBB1116:
+ 3325              	.LBB1117:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 3326              		.loc 1 450 0
+ 3327 2349 F30F6F85 		movdqu	-4272(%rbp), %xmm0
+ 3327      50EFFFFF 
+ 3328 2351 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 3328      FF
+ 3329              	.LBE1117:
+ 3330              	.LBE1116:
+ 3331              	.LBE1115:
+ 3332              	.LBE1114:
+ 3333              	.LBE1111:
+ 3334              	.LBE1110:
+ 3335              		.loc 3 1804 0
+ 3336 2356 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 3336      A0E7FFFF 
+1805:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v2,0x02);                             /* F(k11): F(k11): F(k11) : F(k11)       */
+1806:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0 ^= k;                                       /* k12   : k13   : k14    : k15          */
+ 3337              		.loc 3 1806 0
+ 3338 235e 660F6F95 		movdqa	-6320(%rbp), %xmm2
+ 3338      50E7FFFF 
+ 3339 2366 660FEF95 		pxor	-6240(%rbp), %xmm2
+ 3339      A0E7FFFF 
+ 3340 236e 660F7F95 		movdqa	%xmm2, -6320(%rbp)
+ 3340      50E7FFFF 
+1807:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[3] = v0; /* K12:K13:K14:K15 */
+ 3341              		.loc 3 1807 0
+ 3342 2376 488B8548 		movq	-5816(%rbp), %rax
+ 3342      E9FFFF
+ 3343 237d 4883C030 		addq	$48, %rax
+ 3344 2381 660F6F85 		movdqa	-6320(%rbp), %xmm0
+ 3344      50E7FFFF 
+ 3345 2389 660F7F00 		movdqa	%xmm0, (%rax)
+1808:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v0);   /* k15   : k15   : k15    : k15          */
+ 3346              		.loc 3 1808 0
+ 3347 238d 660F6F95 		movdqa	-6320(%rbp), %xmm2
+ 3347      50E7FFFF 
+ 3348 2395 660F7F95 		movdqa	%xmm2, -6240(%rbp)
+ 3348      A0E7FFFF 
+ 3349 239d 660F6F85 		movdqa	-6240(%rbp), %xmm0
+ 3349      A0E7FFFF 
+ 3350 23a5 F30F7F85 		movdqu	%xmm0, -4256(%rbp)
+ 3350      60EFFFFF 
+ 3351 23ad F30F6F85 		movdqu	-4256(%rbp), %xmm0
+ 3351      60EFFFFF 
+ 3352 23b5 F30F7F85 		movdqu	%xmm0, -4224(%rbp)
+ 3352      80EFFFFF 
+ 3353              	.LBB1118:
+ 3354              	.LBB1119:
+ 3355              	.LBB1120:
+ 3356              	.LBB1121:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 3357              		.loc 1 450 0
+ 3358 23bd F30F6F85 		movdqu	-4224(%rbp), %xmm0
+ 3358      80EFFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 132
+
+
+ 3359 23c5 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 3359      FF
+ 3360              	.LBE1121:
+ 3361              	.LBE1120:
+ 3362              	.LBE1119:
+ 3363              	.LBE1118:
+ 3364              		.loc 3 1808 0
+ 3365 23ca 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 3365      A0E7FFFF 
+1809:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1 ^= k;                                       /* k16   : k17   : k16    : k17          */
+ 3366              		.loc 3 1809 0
+ 3367 23d2 660F6F95 		movdqa	-6304(%rbp), %xmm2
+ 3367      60E7FFFF 
+ 3368 23da 660FEF95 		pxor	-6240(%rbp), %xmm2
+ 3368      A0E7FFFF 
+ 3369 23e2 660F7F95 		movdqa	%xmm2, -6304(%rbp)
+ 3369      60E7FFFF 
+1810:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1811:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1812:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 */
+1813:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1814:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1815:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 3370              		.loc 3 1815 0
+ 3371 23ea 660F6F85 		movdqa	-6304(%rbp), %xmm0
+ 3371      60E7FFFF 
+ 3372 23f2 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 3372      A0E7FFFF 
+ 3373 23fa 660F6F95 		movdqa	-6240(%rbp), %xmm2
+ 3373      A0E7FFFF 
+ 3374 2402 F30F7F95 		movdqu	%xmm2, -4192(%rbp)
+ 3374      A0EFFFFF 
+ 3375              	.LBB1122:
+ 3376              	.LBB1123:
+1621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 3377              		.loc 3 1621 0
+ 3378 240a F30F6F85 		movdqu	-4192(%rbp), %xmm0
+ 3378      A0EFFFFF 
+ 3379 2412 660F7F85 		movdqa	%xmm0, -6096(%rbp)
+ 3379      30E8FFFF 
+ 3380 241a 660F6F95 		movdqa	-6096(%rbp), %xmm2
+ 3380      30E8FFFF 
+ 3381 2422 F30F7F95 		movdqu	%xmm2, -4160(%rbp)
+ 3381      C0EFFFFF 
+ 3382              	.LBB1124:
+ 3383              	.LBB1125:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 3384              		.loc 1 852 0
+ 3385 242a F30F6F85 		movdqu	-4160(%rbp), %xmm0
+ 3385      C0EFFFFF 
+ 3386 2432 660F3ADF 		aeskeygenassist	$4, %xmm0, %xmm0
+ 3386      C004
+ 3387              	.LBE1125:
+ 3388              	.LBE1124:
+1622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 3389              		.loc 3 1622 0
+ 3390 2438 660F7F85 		movdqa	%xmm0, -6096(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 133
+
+
+ 3390      30E8FFFF 
+ 3391 2440 660F6F85 		movdqa	-6096(%rbp), %xmm0
+ 3391      30E8FFFF 
+ 3392 2448 F30F7F85 		movdqu	%xmm0, -4144(%rbp)
+ 3392      D0EFFFFF 
+ 3393 2450 F30F6F85 		movdqu	-4144(%rbp), %xmm0
+ 3393      D0EFFFFF 
+ 3394 2458 F30F7F85 		movdqu	%xmm0, -4112(%rbp)
+ 3394      F0EFFFFF 
+ 3395              	.LBB1126:
+ 3396              	.LBB1127:
+ 3397              	.LBB1128:
+ 3398              	.LBB1129:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 3399              		.loc 1 450 0
+ 3400 2460 F30F6F85 		movdqu	-4112(%rbp), %xmm0
+ 3400      F0EFFFFF 
+ 3401 2468 660F70C0 		pshufd	$85, %xmm0, %xmm0
+ 3401      55
+ 3402              	.LBE1129:
+ 3403              	.LBE1128:
+ 3404              	.LBE1127:
+ 3405              	.LBE1126:
+ 3406              	.LBE1123:
+ 3407              	.LBE1122:
+ 3408              		.loc 3 1815 0
+ 3409 246d 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 3409      A0E7FFFF 
+ 3410 2475 660F6F95 		movdqa	-6320(%rbp), %xmm2
+ 3410      50E7FFFF 
+ 3411 247d F30F7F95 		movdqu	%xmm2, -4096(%rbp)
+ 3411      00F0FFFF 
+ 3412              	.LBB1130:
+ 3413              	.LBB1131:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 3414              		.loc 3 1565 0
+ 3415 2485 F30F6F85 		movdqu	-4096(%rbp), %xmm0
+ 3415      00F0FFFF 
+ 3416 248d 660F7F85 		movdqa	%xmm0, -6080(%rbp)
+ 3416      40E8FFFF 
+ 3417 2495 660F6F95 		movdqa	-6080(%rbp), %xmm2
+ 3417      40E8FFFF 
+ 3418 249d F30F7F95 		movdqu	%xmm2, -4080(%rbp)
+ 3418      10F0FFFF 
+ 3419              	.LBB1132:
+ 3420              	.LBB1133:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3421              		.loc 3 1278 0
+ 3422 24a5 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 3422      00000000 
+ 3423 24ad F30F6F8D 		movdqu	-4080(%rbp), %xmm1
+ 3423      10F0FFFF 
+ 3424 24b5 F30F7F8D 		movdqu	%xmm1, -4048(%rbp)
+ 3424      30F0FFFF 
+ 3425 24bd F30F7F85 		movdqu	%xmm0, -4064(%rbp)
+ 3425      20F0FFFF 
+ 3426 24c5 F30F6F85 		movdqu	-4048(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 134
+
+
+ 3426      30F0FFFF 
+ 3427 24cd F30F7F85 		movdqu	%xmm0, -4016(%rbp)
+ 3427      50F0FFFF 
+ 3428 24d5 F30F6F85 		movdqu	-4064(%rbp), %xmm0
+ 3428      20F0FFFF 
+ 3429 24dd F30F7F85 		movdqu	%xmm0, -4032(%rbp)
+ 3429      40F0FFFF 
+ 3430              	.LBB1134:
+ 3431              	.LBB1135:
+ 3432              	.LBB1136:
+ 3433              	.LBB1137:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3434              		.loc 1 529 0
+ 3435 24e5 F30F6F8D 		movdqu	-4032(%rbp), %xmm1
+ 3435      40F0FFFF 
+ 3436 24ed F30F6F85 		movdqu	-4016(%rbp), %xmm0
+ 3436      50F0FFFF 
+ 3437 24f5 660F3800 		pshufb	%xmm1, %xmm0
+ 3437      C1
+ 3438              	.LBE1137:
+ 3439              	.LBE1136:
+ 3440              	.LBE1135:
+ 3441              	.LBE1134:
+ 3442              	.LBE1133:
+ 3443              	.LBE1132:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3444              		.loc 3 1567 0
+ 3445 24fa 660F7F85 		movdqa	%xmm0, -6080(%rbp)
+ 3445      40E8FFFF 
+ 3446 2502 660F6F85 		movdqa	-6080(%rbp), %xmm0
+ 3446      40E8FFFF 
+ 3447 250a 660FEF85 		pxor	-4096(%rbp), %xmm0
+ 3447      00F0FFFF 
+ 3448 2512 F30F7F85 		movdqu	%xmm0, -4096(%rbp)
+ 3448      00F0FFFF 
+ 3449 251a 660F6F85 		movdqa	-6080(%rbp), %xmm0
+ 3449      40E8FFFF 
+ 3450 2522 F30F7F85 		movdqu	%xmm0, -4000(%rbp)
+ 3450      60F0FFFF 
+ 3451              	.LBB1138:
+ 3452              	.LBB1139:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3453              		.loc 3 1278 0
+ 3454 252a 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 3454      00000000 
+ 3455 2532 F30F6F8D 		movdqu	-4000(%rbp), %xmm1
+ 3455      60F0FFFF 
+ 3456 253a F30F7F8D 		movdqu	%xmm1, -3968(%rbp)
+ 3456      80F0FFFF 
+ 3457 2542 F30F7F85 		movdqu	%xmm0, -3984(%rbp)
+ 3457      70F0FFFF 
+ 3458 254a F30F6F85 		movdqu	-3968(%rbp), %xmm0
+ 3458      80F0FFFF 
+ 3459 2552 F30F7F85 		movdqu	%xmm0, -3936(%rbp)
+ 3459      A0F0FFFF 
+ 3460 255a F30F6F85 		movdqu	-3984(%rbp), %xmm0
+ 3460      70F0FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 135
+
+
+ 3461 2562 F30F7F85 		movdqu	%xmm0, -3952(%rbp)
+ 3461      90F0FFFF 
+ 3462              	.LBB1140:
+ 3463              	.LBB1141:
+ 3464              	.LBB1142:
+ 3465              	.LBB1143:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3466              		.loc 1 529 0
+ 3467 256a F30F6F8D 		movdqu	-3952(%rbp), %xmm1
+ 3467      90F0FFFF 
+ 3468 2572 F30F6F85 		movdqu	-3936(%rbp), %xmm0
+ 3468      A0F0FFFF 
+ 3469 257a 660F3800 		pshufb	%xmm1, %xmm0
+ 3469      C1
+ 3470              	.LBE1143:
+ 3471              	.LBE1142:
+ 3472              	.LBE1141:
+ 3473              	.LBE1140:
+ 3474              	.LBE1139:
+ 3475              	.LBE1138:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3476              		.loc 3 1568 0
+ 3477 257f 660F7F85 		movdqa	%xmm0, -6080(%rbp)
+ 3477      40E8FFFF 
+ 3478 2587 660F6F85 		movdqa	-6080(%rbp), %xmm0
+ 3478      40E8FFFF 
+ 3479 258f 660FEF85 		pxor	-4096(%rbp), %xmm0
+ 3479      00F0FFFF 
+ 3480 2597 F30F7F85 		movdqu	%xmm0, -4096(%rbp)
+ 3480      00F0FFFF 
+ 3481 259f 660F6F95 		movdqa	-6080(%rbp), %xmm2
+ 3481      40E8FFFF 
+ 3482 25a7 F30F7F95 		movdqu	%xmm2, -3920(%rbp)
+ 3482      B0F0FFFF 
+ 3483              	.LBB1144:
+ 3484              	.LBB1145:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3485              		.loc 3 1278 0
+ 3486 25af 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 3486      00000000 
+ 3487 25b7 F30F6F8D 		movdqu	-3920(%rbp), %xmm1
+ 3487      B0F0FFFF 
+ 3488 25bf F30F7F8D 		movdqu	%xmm1, -3888(%rbp)
+ 3488      D0F0FFFF 
+ 3489 25c7 F30F7F85 		movdqu	%xmm0, -3904(%rbp)
+ 3489      C0F0FFFF 
+ 3490 25cf F30F6F85 		movdqu	-3888(%rbp), %xmm0
+ 3490      D0F0FFFF 
+ 3491 25d7 F30F7F85 		movdqu	%xmm0, -3856(%rbp)
+ 3491      F0F0FFFF 
+ 3492 25df F30F6F85 		movdqu	-3904(%rbp), %xmm0
+ 3492      C0F0FFFF 
+ 3493 25e7 F30F7F85 		movdqu	%xmm0, -3872(%rbp)
+ 3493      E0F0FFFF 
+ 3494              	.LBB1146:
+ 3495              	.LBB1147:
+ 3496              	.LBB1148:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 136
+
+
+ 3497              	.LBB1149:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3498              		.loc 1 529 0
+ 3499 25ef F30F6F8D 		movdqu	-3872(%rbp), %xmm1
+ 3499      E0F0FFFF 
+ 3500 25f7 F30F6F85 		movdqu	-3856(%rbp), %xmm0
+ 3500      F0F0FFFF 
+ 3501 25ff 660F3800 		pshufb	%xmm1, %xmm0
+ 3501      C1
+ 3502              	.LBE1149:
+ 3503              	.LBE1148:
+ 3504              	.LBE1147:
+ 3505              	.LBE1146:
+ 3506              	.LBE1145:
+ 3507              	.LBE1144:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3508              		.loc 3 1569 0
+ 3509 2604 660F7F85 		movdqa	%xmm0, -6080(%rbp)
+ 3509      40E8FFFF 
+ 3510 260c 660F6F85 		movdqa	-6080(%rbp), %xmm0
+ 3510      40E8FFFF 
+ 3511 2614 660FEF85 		pxor	-4096(%rbp), %xmm0
+ 3511      00F0FFFF 
+ 3512 261c F30F7F85 		movdqu	%xmm0, -4096(%rbp)
+ 3512      00F0FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 3513              		.loc 3 1571 0
+ 3514 2624 F30F6F85 		movdqu	-4096(%rbp), %xmm0
+ 3514      00F0FFFF 
+ 3515              	.LBE1131:
+ 3516              	.LBE1130:
+1816:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v1,0x04);                             /* F(k17): F(k17): F(k17) : F(k17)       */
+1817:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3  = AESBCMEMBER(ShiftXorColumns) (v0);       /* k12   :k12^k13:k12^k13^k14:k12^k13^k14^k15 */
+ 3517              		.loc 3 1817 0
+ 3518 262c 660F7F85 		movdqa	%xmm0, -6272(%rbp)
+ 3518      80E7FFFF 
+1818:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3 ^= k;                                       /* k18   : k19   : k20    : k21          */
+ 3519              		.loc 3 1818 0
+ 3520 2634 660F6F85 		movdqa	-6272(%rbp), %xmm0
+ 3520      80E7FFFF 
+ 3521 263c 660FEF85 		pxor	-6240(%rbp), %xmm0
+ 3521      A0E7FFFF 
+ 3522 2644 660F7F85 		movdqa	%xmm0, -6272(%rbp)
+ 3522      80E7FFFF 
+ 3523 264c 660F6F95 		movdqa	-6304(%rbp), %xmm2
+ 3523      60E7FFFF 
+ 3524 2654 F30F7F95 		movdqu	%xmm2, -3840(%rbp)
+ 3524      00F1FFFF 
+ 3525              	.LBB1150:
+ 3526              	.LBB1151:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 3527              		.loc 3 1565 0
+ 3528 265c F30F6F85 		movdqu	-3840(%rbp), %xmm0
+ 3528      00F1FFFF 
+ 3529 2664 660F7F85 		movdqa	%xmm0, -6064(%rbp)
+ 3529      50E8FFFF 
+ 3530 266c 660F6F95 		movdqa	-6064(%rbp), %xmm2
+
GAS LISTING /tmp/ccPaCTqg.s 			page 137
+
+
+ 3530      50E8FFFF 
+ 3531 2674 F30F7F95 		movdqu	%xmm2, -3824(%rbp)
+ 3531      10F1FFFF 
+ 3532              	.LBB1152:
+ 3533              	.LBB1153:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3534              		.loc 3 1278 0
+ 3535 267c 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 3535      00000000 
+ 3536 2684 F30F6F8D 		movdqu	-3824(%rbp), %xmm1
+ 3536      10F1FFFF 
+ 3537 268c F30F7F8D 		movdqu	%xmm1, -3792(%rbp)
+ 3537      30F1FFFF 
+ 3538 2694 F30F7F85 		movdqu	%xmm0, -3808(%rbp)
+ 3538      20F1FFFF 
+ 3539 269c F30F6F85 		movdqu	-3792(%rbp), %xmm0
+ 3539      30F1FFFF 
+ 3540 26a4 F30F7F85 		movdqu	%xmm0, -3760(%rbp)
+ 3540      50F1FFFF 
+ 3541 26ac F30F6F85 		movdqu	-3808(%rbp), %xmm0
+ 3541      20F1FFFF 
+ 3542 26b4 F30F7F85 		movdqu	%xmm0, -3776(%rbp)
+ 3542      40F1FFFF 
+ 3543              	.LBB1154:
+ 3544              	.LBB1155:
+ 3545              	.LBB1156:
+ 3546              	.LBB1157:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3547              		.loc 1 529 0
+ 3548 26bc F30F6F8D 		movdqu	-3776(%rbp), %xmm1
+ 3548      40F1FFFF 
+ 3549 26c4 F30F6F85 		movdqu	-3760(%rbp), %xmm0
+ 3549      50F1FFFF 
+ 3550 26cc 660F3800 		pshufb	%xmm1, %xmm0
+ 3550      C1
+ 3551              	.LBE1157:
+ 3552              	.LBE1156:
+ 3553              	.LBE1155:
+ 3554              	.LBE1154:
+ 3555              	.LBE1153:
+ 3556              	.LBE1152:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3557              		.loc 3 1567 0
+ 3558 26d1 660F7F85 		movdqa	%xmm0, -6064(%rbp)
+ 3558      50E8FFFF 
+ 3559 26d9 660F6F85 		movdqa	-6064(%rbp), %xmm0
+ 3559      50E8FFFF 
+ 3560 26e1 660FEF85 		pxor	-3840(%rbp), %xmm0
+ 3560      00F1FFFF 
+ 3561 26e9 F30F7F85 		movdqu	%xmm0, -3840(%rbp)
+ 3561      00F1FFFF 
+ 3562 26f1 660F6F85 		movdqa	-6064(%rbp), %xmm0
+ 3562      50E8FFFF 
+ 3563 26f9 F30F7F85 		movdqu	%xmm0, -3744(%rbp)
+ 3563      60F1FFFF 
+ 3564              	.LBB1158:
+ 3565              	.LBB1159:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 138
+
+
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3566              		.loc 3 1278 0
+ 3567 2701 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 3567      00000000 
+ 3568 2709 F30F6F8D 		movdqu	-3744(%rbp), %xmm1
+ 3568      60F1FFFF 
+ 3569 2711 F30F7F8D 		movdqu	%xmm1, -3712(%rbp)
+ 3569      80F1FFFF 
+ 3570 2719 F30F7F85 		movdqu	%xmm0, -3728(%rbp)
+ 3570      70F1FFFF 
+ 3571 2721 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 3571      80F1FFFF 
+ 3572 2729 F30F7F85 		movdqu	%xmm0, -3680(%rbp)
+ 3572      A0F1FFFF 
+ 3573 2731 F30F6F85 		movdqu	-3728(%rbp), %xmm0
+ 3573      70F1FFFF 
+ 3574 2739 F30F7F85 		movdqu	%xmm0, -3696(%rbp)
+ 3574      90F1FFFF 
+ 3575              	.LBB1160:
+ 3576              	.LBB1161:
+ 3577              	.LBB1162:
+ 3578              	.LBB1163:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3579              		.loc 1 529 0
+ 3580 2741 F30F6F8D 		movdqu	-3696(%rbp), %xmm1
+ 3580      90F1FFFF 
+ 3581 2749 F30F6F85 		movdqu	-3680(%rbp), %xmm0
+ 3581      A0F1FFFF 
+ 3582 2751 660F3800 		pshufb	%xmm1, %xmm0
+ 3582      C1
+ 3583              	.LBE1163:
+ 3584              	.LBE1162:
+ 3585              	.LBE1161:
+ 3586              	.LBE1160:
+ 3587              	.LBE1159:
+ 3588              	.LBE1158:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3589              		.loc 3 1568 0
+ 3590 2756 660F7F85 		movdqa	%xmm0, -6064(%rbp)
+ 3590      50E8FFFF 
+ 3591 275e 660F6F85 		movdqa	-6064(%rbp), %xmm0
+ 3591      50E8FFFF 
+ 3592 2766 660FEF85 		pxor	-3840(%rbp), %xmm0
+ 3592      00F1FFFF 
+ 3593 276e F30F7F85 		movdqu	%xmm0, -3840(%rbp)
+ 3593      00F1FFFF 
+ 3594 2776 660F6F95 		movdqa	-6064(%rbp), %xmm2
+ 3594      50E8FFFF 
+ 3595 277e F30F7F95 		movdqu	%xmm2, -3664(%rbp)
+ 3595      B0F1FFFF 
+ 3596              	.LBB1164:
+ 3597              	.LBB1165:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3598              		.loc 3 1278 0
+ 3599 2786 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 3599      00000000 
+ 3600 278e F30F6F8D 		movdqu	-3664(%rbp), %xmm1
+
GAS LISTING /tmp/ccPaCTqg.s 			page 139
+
+
+ 3600      B0F1FFFF 
+ 3601 2796 F30F7F8D 		movdqu	%xmm1, -3632(%rbp)
+ 3601      D0F1FFFF 
+ 3602 279e F30F7F85 		movdqu	%xmm0, -3648(%rbp)
+ 3602      C0F1FFFF 
+ 3603 27a6 F30F6F85 		movdqu	-3632(%rbp), %xmm0
+ 3603      D0F1FFFF 
+ 3604 27ae F30F7F85 		movdqu	%xmm0, -3600(%rbp)
+ 3604      F0F1FFFF 
+ 3605 27b6 F30F6F85 		movdqu	-3648(%rbp), %xmm0
+ 3605      C0F1FFFF 
+ 3606 27be F30F7F85 		movdqu	%xmm0, -3616(%rbp)
+ 3606      E0F1FFFF 
+ 3607              	.LBB1166:
+ 3608              	.LBB1167:
+ 3609              	.LBB1168:
+ 3610              	.LBB1169:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3611              		.loc 1 529 0
+ 3612 27c6 F30F6F8D 		movdqu	-3616(%rbp), %xmm1
+ 3612      E0F1FFFF 
+ 3613 27ce F30F6F85 		movdqu	-3600(%rbp), %xmm0
+ 3613      F0F1FFFF 
+ 3614 27d6 660F3800 		pshufb	%xmm1, %xmm0
+ 3614      C1
+ 3615              	.LBE1169:
+ 3616              	.LBE1168:
+ 3617              	.LBE1167:
+ 3618              	.LBE1166:
+ 3619              	.LBE1165:
+ 3620              	.LBE1164:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3621              		.loc 3 1569 0
+ 3622 27db 660F7F85 		movdqa	%xmm0, -6064(%rbp)
+ 3622      50E8FFFF 
+ 3623 27e3 660F6F85 		movdqa	-6064(%rbp), %xmm0
+ 3623      50E8FFFF 
+ 3624 27eb 660FEF85 		pxor	-3840(%rbp), %xmm0
+ 3624      00F1FFFF 
+ 3625 27f3 F30F7F85 		movdqu	%xmm0, -3840(%rbp)
+ 3625      00F1FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 3626              		.loc 3 1571 0
+ 3627 27fb F30F6F85 		movdqu	-3840(%rbp), %xmm0
+ 3627      00F1FFFF 
+ 3628              	.LBE1151:
+ 3629              	.LBE1150:
+1819:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4  = AESBCMEMBER(ShiftXorColumns) (v1);       /* k16   :k16^k17: k17    : 0            */
+ 3630              		.loc 3 1819 0
+ 3631 2803 660F7F85 		movdqa	%xmm0, -6256(%rbp)
+ 3631      90E7FFFF 
+1820:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k21   : k21   : k21    : k21          */
+ 3632              		.loc 3 1820 0
+ 3633 280b 660F6F85 		movdqa	-6272(%rbp), %xmm0
+ 3633      80E7FFFF 
+ 3634 2813 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 3634      A0E7FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 140
+
+
+ 3635 281b 660F6F95 		movdqa	-6240(%rbp), %xmm2
+ 3635      A0E7FFFF 
+ 3636 2823 F30F7F95 		movdqu	%xmm2, -3584(%rbp)
+ 3636      00F2FFFF 
+ 3637 282b F30F6F85 		movdqu	-3584(%rbp), %xmm0
+ 3637      00F2FFFF 
+ 3638 2833 F30F7F85 		movdqu	%xmm0, -3552(%rbp)
+ 3638      20F2FFFF 
+ 3639              	.LBB1170:
+ 3640              	.LBB1171:
+ 3641              	.LBB1172:
+ 3642              	.LBB1173:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 3643              		.loc 1 450 0
+ 3644 283b F30F6F85 		movdqu	-3552(%rbp), %xmm0
+ 3644      20F2FFFF 
+ 3645 2843 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 3645      FF
+ 3646              	.LBE1173:
+ 3647              	.LBE1172:
+ 3648              	.LBE1171:
+ 3649              	.LBE1170:
+ 3650              		.loc 3 1820 0
+ 3651 2848 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 3651      A0E7FFFF 
+1821:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4 ^= k;                                       /* k22   : k23   : x      : x            */
+ 3652              		.loc 3 1821 0
+ 3653 2850 660F6F85 		movdqa	-6256(%rbp), %xmm0
+ 3653      90E7FFFF 
+ 3654 2858 660FEF85 		pxor	-6240(%rbp), %xmm0
+ 3654      A0E7FFFF 
+ 3655 2860 660F7F85 		movdqa	%xmm0, -6256(%rbp)
+ 3655      90E7FFFF 
+ 3656 2868 660F6F95 		movdqa	-6304(%rbp), %xmm2
+ 3656      60E7FFFF 
+ 3657 2870 F30F7F95 		movdqu	%xmm2, -3520(%rbp)
+ 3657      40F2FFFF 
+ 3658 2878 660F6F85 		movdqa	-6272(%rbp), %xmm0
+ 3658      80E7FFFF 
+ 3659 2880 F30F7F85 		movdqu	%xmm0, -3536(%rbp)
+ 3659      30F2FFFF 
+ 3660 2888 F30F6F85 		movdqu	-3520(%rbp), %xmm0
+ 3660      40F2FFFF 
+ 3661 2890 F30F7F85 		movdqu	%xmm0, -3472(%rbp)
+ 3661      70F2FFFF 
+ 3662 2898 F30F6F85 		movdqu	-3536(%rbp), %xmm0
+ 3662      30F2FFFF 
+ 3663 28a0 F30F7F85 		movdqu	%xmm0, -3488(%rbp)
+ 3663      60F2FFFF 
+ 3664              	.LBB1174:
+ 3665              	.LBB1175:
+ 3666              	.LBB1176:
+ 3667              	.LBB1177:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 3668              		.loc 1 366 0
+ 3669 28a8 F20F1085 		movsd	-3488(%rbp), %xmm0
+ 3669      60F2FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 141
+
+
+ 3670 28b0 660F1685 		movhpd	-3480(%rbp), %xmm0
+ 3670      68F2FFFF 
+ 3671 28b8 F20F108D 		movsd	-3472(%rbp), %xmm1
+ 3671      70F2FFFF 
+ 3672 28c0 660F168D 		movhpd	-3464(%rbp), %xmm1
+ 3672      78F2FFFF 
+ 3673 28c8 660F28D1 		movapd	%xmm1, %xmm2
+ 3674 28cc 660F14D0 		unpcklpd	%xmm0, %xmm2
+ 3675 28d0 660F28C2 		movapd	%xmm2, %xmm0
+ 3676              	.LBE1177:
+ 3677              	.LBE1176:
+ 3678              	.LBE1175:
+ 3679              	.LBE1174:
+1822:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateMerge1) (v1,v3);        /* k16   : k17   : k18    : k19          */
+ 3680              		.loc 3 1822 0
+ 3681 28d4 660F7F85 		movdqa	%xmm0, -6304(%rbp)
+ 3681      60E7FFFF 
+1823:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[4] = v1; /* K16:K17:K18:K19 */
+ 3682              		.loc 3 1823 0
+ 3683 28dc 488B8548 		movq	-5816(%rbp), %rax
+ 3683      E9FFFF
+ 3684 28e3 4883C040 		addq	$64, %rax
+ 3685 28e7 660F6F85 		movdqa	-6304(%rbp), %xmm0
+ 3685      60E7FFFF 
+ 3686 28ef 660F7F00 		movdqa	%xmm0, (%rax)
+ 3687 28f3 660F6F95 		movdqa	-6272(%rbp), %xmm2
+ 3687      80E7FFFF 
+ 3688 28fb F30F7F95 		movdqu	%xmm2, -3440(%rbp)
+ 3688      90F2FFFF 
+ 3689 2903 660F6F85 		movdqa	-6256(%rbp), %xmm0
+ 3689      90E7FFFF 
+ 3690 290b F30F7F85 		movdqu	%xmm0, -3456(%rbp)
+ 3690      80F2FFFF 
+ 3691 2913 F30F6F85 		movdqu	-3440(%rbp), %xmm0
+ 3691      90F2FFFF 
+ 3692 291b F30F7F85 		movdqu	%xmm0, -3392(%rbp)
+ 3692      C0F2FFFF 
+ 3693 2923 F30F6F85 		movdqu	-3456(%rbp), %xmm0
+ 3693      80F2FFFF 
+ 3694 292b F30F7F85 		movdqu	%xmm0, -3408(%rbp)
+ 3694      B0F2FFFF 
+ 3695              	.LBB1178:
+ 3696              	.LBB1179:
+ 3697              	.LBB1180:
+ 3698              	.LBB1181:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 3699              		.loc 1 366 0
+ 3700 2933 F20F108D 		movsd	-3408(%rbp), %xmm1
+ 3700      B0F2FFFF 
+ 3701 293b 660F168D 		movhpd	-3400(%rbp), %xmm1
+ 3701      B8F2FFFF 
+ 3702 2943 F20F1085 		movsd	-3392(%rbp), %xmm0
+ 3702      C0F2FFFF 
+ 3703 294b 660F1685 		movhpd	-3384(%rbp), %xmm0
+ 3703      C8F2FFFF 
+ 3704 2953 660FC6C1 		shufpd	$1, %xmm1, %xmm0
+ 3704      01
+
GAS LISTING /tmp/ccPaCTqg.s 			page 142
+
+
+ 3705              	.LBE1181:
+ 3706              	.LBE1180:
+ 3707              	.LBE1179:
+ 3708              	.LBE1178:
+1824:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1825:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v2  = AESBCMEMBER(StateMerge2) (v3,v4);        /* k20   : k21   : k22    : k23          */
+ 3709              		.loc 3 1825 0
+ 3710 2958 660F7F85 		movdqa	%xmm0, -6288(%rbp)
+ 3710      70E7FFFF 
+1826:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[5] = v2; /* K20:K21:K22:K23 */
+ 3711              		.loc 3 1826 0
+ 3712 2960 488B8548 		movq	-5816(%rbp), %rax
+ 3712      E9FFFF
+ 3713 2967 4883C050 		addq	$80, %rax
+ 3714 296b 660F6F95 		movdqa	-6288(%rbp), %xmm2
+ 3714      70E7FFFF 
+ 3715 2973 660F7F10 		movdqa	%xmm2, (%rax)
+ 3716 2977 660F6F85 		movdqa	-6272(%rbp), %xmm0
+ 3716      80E7FFFF 
+ 3717 297f F30F7F85 		movdqu	%xmm0, -3376(%rbp)
+ 3717      D0F2FFFF 
+ 3718              	.LBB1182:
+ 3719              	.LBB1183:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 3720              		.loc 3 1565 0
+ 3721 2987 F30F6F95 		movdqu	-3376(%rbp), %xmm2
+ 3721      D0F2FFFF 
+ 3722 298f 660F7F95 		movdqa	%xmm2, -6048(%rbp)
+ 3722      60E8FFFF 
+ 3723 2997 660F6F85 		movdqa	-6048(%rbp), %xmm0
+ 3723      60E8FFFF 
+ 3724 299f F30F7F85 		movdqu	%xmm0, -3360(%rbp)
+ 3724      E0F2FFFF 
+ 3725              	.LBB1184:
+ 3726              	.LBB1185:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3727              		.loc 3 1278 0
+ 3728 29a7 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 3728      00000000 
+ 3729 29af F30F6F8D 		movdqu	-3360(%rbp), %xmm1
+ 3729      E0F2FFFF 
+ 3730 29b7 F30F7F8D 		movdqu	%xmm1, -3328(%rbp)
+ 3730      00F3FFFF 
+ 3731 29bf F30F7F85 		movdqu	%xmm0, -3344(%rbp)
+ 3731      F0F2FFFF 
+ 3732 29c7 F30F6F85 		movdqu	-3328(%rbp), %xmm0
+ 3732      00F3FFFF 
+ 3733 29cf F30F7F85 		movdqu	%xmm0, -3296(%rbp)
+ 3733      20F3FFFF 
+ 3734 29d7 F30F6F85 		movdqu	-3344(%rbp), %xmm0
+ 3734      F0F2FFFF 
+ 3735 29df F30F7F85 		movdqu	%xmm0, -3312(%rbp)
+ 3735      10F3FFFF 
+ 3736              	.LBB1186:
+ 3737              	.LBB1187:
+ 3738              	.LBB1188:
+ 3739              	.LBB1189:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 143
+
+
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3740              		.loc 1 529 0
+ 3741 29e7 F30F6F8D 		movdqu	-3312(%rbp), %xmm1
+ 3741      10F3FFFF 
+ 3742 29ef F30F6F85 		movdqu	-3296(%rbp), %xmm0
+ 3742      20F3FFFF 
+ 3743 29f7 660F3800 		pshufb	%xmm1, %xmm0
+ 3743      C1
+ 3744              	.LBE1189:
+ 3745              	.LBE1188:
+ 3746              	.LBE1187:
+ 3747              	.LBE1186:
+ 3748              	.LBE1185:
+ 3749              	.LBE1184:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3750              		.loc 3 1567 0
+ 3751 29fc 660F7F85 		movdqa	%xmm0, -6048(%rbp)
+ 3751      60E8FFFF 
+ 3752 2a04 660F6F85 		movdqa	-6048(%rbp), %xmm0
+ 3752      60E8FFFF 
+ 3753 2a0c 660FEF85 		pxor	-3376(%rbp), %xmm0
+ 3753      D0F2FFFF 
+ 3754 2a14 F30F7F85 		movdqu	%xmm0, -3376(%rbp)
+ 3754      D0F2FFFF 
+ 3755 2a1c 660F6F95 		movdqa	-6048(%rbp), %xmm2
+ 3755      60E8FFFF 
+ 3756 2a24 F30F7F95 		movdqu	%xmm2, -3280(%rbp)
+ 3756      30F3FFFF 
+ 3757              	.LBB1190:
+ 3758              	.LBB1191:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3759              		.loc 3 1278 0
+ 3760 2a2c 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 3760      00000000 
+ 3761 2a34 F30F6F8D 		movdqu	-3280(%rbp), %xmm1
+ 3761      30F3FFFF 
+ 3762 2a3c F30F7F8D 		movdqu	%xmm1, -3248(%rbp)
+ 3762      50F3FFFF 
+ 3763 2a44 F30F7F85 		movdqu	%xmm0, -3264(%rbp)
+ 3763      40F3FFFF 
+ 3764 2a4c F30F6F85 		movdqu	-3248(%rbp), %xmm0
+ 3764      50F3FFFF 
+ 3765 2a54 F30F7F85 		movdqu	%xmm0, -3216(%rbp)
+ 3765      70F3FFFF 
+ 3766 2a5c F30F6F85 		movdqu	-3264(%rbp), %xmm0
+ 3766      40F3FFFF 
+ 3767 2a64 F30F7F85 		movdqu	%xmm0, -3232(%rbp)
+ 3767      60F3FFFF 
+ 3768              	.LBB1192:
+ 3769              	.LBB1193:
+ 3770              	.LBB1194:
+ 3771              	.LBB1195:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3772              		.loc 1 529 0
+ 3773 2a6c F30F6F8D 		movdqu	-3232(%rbp), %xmm1
+ 3773      60F3FFFF 
+ 3774 2a74 F30F6F85 		movdqu	-3216(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 144
+
+
+ 3774      70F3FFFF 
+ 3775 2a7c 660F3800 		pshufb	%xmm1, %xmm0
+ 3775      C1
+ 3776              	.LBE1195:
+ 3777              	.LBE1194:
+ 3778              	.LBE1193:
+ 3779              	.LBE1192:
+ 3780              	.LBE1191:
+ 3781              	.LBE1190:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3782              		.loc 3 1568 0
+ 3783 2a81 660F7F85 		movdqa	%xmm0, -6048(%rbp)
+ 3783      60E8FFFF 
+ 3784 2a89 660F6F85 		movdqa	-6048(%rbp), %xmm0
+ 3784      60E8FFFF 
+ 3785 2a91 660FEF85 		pxor	-3376(%rbp), %xmm0
+ 3785      D0F2FFFF 
+ 3786 2a99 F30F7F85 		movdqu	%xmm0, -3376(%rbp)
+ 3786      D0F2FFFF 
+ 3787 2aa1 660F6F85 		movdqa	-6048(%rbp), %xmm0
+ 3787      60E8FFFF 
+ 3788 2aa9 F30F7F85 		movdqu	%xmm0, -3200(%rbp)
+ 3788      80F3FFFF 
+ 3789              	.LBB1196:
+ 3790              	.LBB1197:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3791              		.loc 3 1278 0
+ 3792 2ab1 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 3792      00000000 
+ 3793 2ab9 F30F6F8D 		movdqu	-3200(%rbp), %xmm1
+ 3793      80F3FFFF 
+ 3794 2ac1 F30F7F8D 		movdqu	%xmm1, -3168(%rbp)
+ 3794      A0F3FFFF 
+ 3795 2ac9 F30F7F85 		movdqu	%xmm0, -3184(%rbp)
+ 3795      90F3FFFF 
+ 3796 2ad1 F30F6F85 		movdqu	-3168(%rbp), %xmm0
+ 3796      A0F3FFFF 
+ 3797 2ad9 F30F7F85 		movdqu	%xmm0, -3136(%rbp)
+ 3797      C0F3FFFF 
+ 3798 2ae1 F30F6F85 		movdqu	-3184(%rbp), %xmm0
+ 3798      90F3FFFF 
+ 3799 2ae9 F30F7F85 		movdqu	%xmm0, -3152(%rbp)
+ 3799      B0F3FFFF 
+ 3800              	.LBB1198:
+ 3801              	.LBB1199:
+ 3802              	.LBB1200:
+ 3803              	.LBB1201:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3804              		.loc 1 529 0
+ 3805 2af1 F30F6F8D 		movdqu	-3152(%rbp), %xmm1
+ 3805      B0F3FFFF 
+ 3806 2af9 F30F6F85 		movdqu	-3136(%rbp), %xmm0
+ 3806      C0F3FFFF 
+ 3807 2b01 660F3800 		pshufb	%xmm1, %xmm0
+ 3807      C1
+ 3808              	.LBE1201:
+ 3809              	.LBE1200:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 145
+
+
+ 3810              	.LBE1199:
+ 3811              	.LBE1198:
+ 3812              	.LBE1197:
+ 3813              	.LBE1196:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3814              		.loc 3 1569 0
+ 3815 2b06 660F7F85 		movdqa	%xmm0, -6048(%rbp)
+ 3815      60E8FFFF 
+ 3816 2b0e 660F6F85 		movdqa	-6048(%rbp), %xmm0
+ 3816      60E8FFFF 
+ 3817 2b16 660FEF85 		pxor	-3376(%rbp), %xmm0
+ 3817      D0F2FFFF 
+ 3818 2b1e F30F7F85 		movdqu	%xmm0, -3376(%rbp)
+ 3818      D0F2FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 3819              		.loc 3 1571 0
+ 3820 2b26 F30F6F85 		movdqu	-3376(%rbp), %xmm0
+ 3820      D0F2FFFF 
+ 3821              	.LBE1183:
+ 3822              	.LBE1182:
+1827:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1828:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 2 */
+1829:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(ShiftXorColumns) (v3);       /* k18   :k18^k19:k18^k19^k20:k18^k19^k20^k21 */
+ 3823              		.loc 3 1829 0
+ 3824 2b2e 660F7F85 		movdqa	%xmm0, -6320(%rbp)
+ 3824      50E7FFFF 
+ 3825 2b36 660F6F95 		movdqa	-6256(%rbp), %xmm2
+ 3825      90E7FFFF 
+ 3826 2b3e F30F7F95 		movdqu	%xmm2, -3120(%rbp)
+ 3826      D0F3FFFF 
+ 3827              	.LBB1202:
+ 3828              	.LBB1203:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 3829              		.loc 3 1565 0
+ 3830 2b46 F30F6F85 		movdqu	-3120(%rbp), %xmm0
+ 3830      D0F3FFFF 
+ 3831 2b4e 660F7F85 		movdqa	%xmm0, -6032(%rbp)
+ 3831      70E8FFFF 
+ 3832 2b56 660F6F95 		movdqa	-6032(%rbp), %xmm2
+ 3832      70E8FFFF 
+ 3833 2b5e F30F7F95 		movdqu	%xmm2, -3104(%rbp)
+ 3833      E0F3FFFF 
+ 3834              	.LBB1204:
+ 3835              	.LBB1205:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3836              		.loc 3 1278 0
+ 3837 2b66 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 3837      00000000 
+ 3838 2b6e F30F6F8D 		movdqu	-3104(%rbp), %xmm1
+ 3838      E0F3FFFF 
+ 3839 2b76 F30F7F8D 		movdqu	%xmm1, -3072(%rbp)
+ 3839      00F4FFFF 
+ 3840 2b7e F30F7F85 		movdqu	%xmm0, -3088(%rbp)
+ 3840      F0F3FFFF 
+ 3841 2b86 F30F6F85 		movdqu	-3072(%rbp), %xmm0
+ 3841      00F4FFFF 
+ 3842 2b8e F30F7F85 		movdqu	%xmm0, -3040(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 146
+
+
+ 3842      20F4FFFF 
+ 3843 2b96 F30F6F85 		movdqu	-3088(%rbp), %xmm0
+ 3843      F0F3FFFF 
+ 3844 2b9e F30F7F85 		movdqu	%xmm0, -3056(%rbp)
+ 3844      10F4FFFF 
+ 3845              	.LBB1206:
+ 3846              	.LBB1207:
+ 3847              	.LBB1208:
+ 3848              	.LBB1209:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3849              		.loc 1 529 0
+ 3850 2ba6 F30F6F8D 		movdqu	-3056(%rbp), %xmm1
+ 3850      10F4FFFF 
+ 3851 2bae F30F6F85 		movdqu	-3040(%rbp), %xmm0
+ 3851      20F4FFFF 
+ 3852 2bb6 660F3800 		pshufb	%xmm1, %xmm0
+ 3852      C1
+ 3853              	.LBE1209:
+ 3854              	.LBE1208:
+ 3855              	.LBE1207:
+ 3856              	.LBE1206:
+ 3857              	.LBE1205:
+ 3858              	.LBE1204:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3859              		.loc 3 1567 0
+ 3860 2bbb 660F7F85 		movdqa	%xmm0, -6032(%rbp)
+ 3860      70E8FFFF 
+ 3861 2bc3 660F6F85 		movdqa	-6032(%rbp), %xmm0
+ 3861      70E8FFFF 
+ 3862 2bcb 660FEF85 		pxor	-3120(%rbp), %xmm0
+ 3862      D0F3FFFF 
+ 3863 2bd3 F30F7F85 		movdqu	%xmm0, -3120(%rbp)
+ 3863      D0F3FFFF 
+ 3864 2bdb 660F6F85 		movdqa	-6032(%rbp), %xmm0
+ 3864      70E8FFFF 
+ 3865 2be3 F30F7F85 		movdqu	%xmm0, -3024(%rbp)
+ 3865      30F4FFFF 
+ 3866              	.LBB1210:
+ 3867              	.LBB1211:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3868              		.loc 3 1278 0
+ 3869 2beb 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 3869      00000000 
+ 3870 2bf3 F30F6F8D 		movdqu	-3024(%rbp), %xmm1
+ 3870      30F4FFFF 
+ 3871 2bfb F30F7F8D 		movdqu	%xmm1, -2992(%rbp)
+ 3871      50F4FFFF 
+ 3872 2c03 F30F7F85 		movdqu	%xmm0, -3008(%rbp)
+ 3872      40F4FFFF 
+ 3873 2c0b F30F6F85 		movdqu	-2992(%rbp), %xmm0
+ 3873      50F4FFFF 
+ 3874 2c13 F30F7F85 		movdqu	%xmm0, -2960(%rbp)
+ 3874      70F4FFFF 
+ 3875 2c1b F30F6F85 		movdqu	-3008(%rbp), %xmm0
+ 3875      40F4FFFF 
+ 3876 2c23 F30F7F85 		movdqu	%xmm0, -2976(%rbp)
+ 3876      60F4FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 147
+
+
+ 3877              	.LBB1212:
+ 3878              	.LBB1213:
+ 3879              	.LBB1214:
+ 3880              	.LBB1215:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3881              		.loc 1 529 0
+ 3882 2c2b F30F6F8D 		movdqu	-2976(%rbp), %xmm1
+ 3882      60F4FFFF 
+ 3883 2c33 F30F6F85 		movdqu	-2960(%rbp), %xmm0
+ 3883      70F4FFFF 
+ 3884 2c3b 660F3800 		pshufb	%xmm1, %xmm0
+ 3884      C1
+ 3885              	.LBE1215:
+ 3886              	.LBE1214:
+ 3887              	.LBE1213:
+ 3888              	.LBE1212:
+ 3889              	.LBE1211:
+ 3890              	.LBE1210:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3891              		.loc 3 1568 0
+ 3892 2c40 660F7F85 		movdqa	%xmm0, -6032(%rbp)
+ 3892      70E8FFFF 
+ 3893 2c48 660F6F85 		movdqa	-6032(%rbp), %xmm0
+ 3893      70E8FFFF 
+ 3894 2c50 660FEF85 		pxor	-3120(%rbp), %xmm0
+ 3894      D0F3FFFF 
+ 3895 2c58 F30F7F85 		movdqu	%xmm0, -3120(%rbp)
+ 3895      D0F3FFFF 
+ 3896 2c60 660F6F95 		movdqa	-6032(%rbp), %xmm2
+ 3896      70E8FFFF 
+ 3897 2c68 F30F7F95 		movdqu	%xmm2, -2944(%rbp)
+ 3897      80F4FFFF 
+ 3898              	.LBB1216:
+ 3899              	.LBB1217:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3900              		.loc 3 1278 0
+ 3901 2c70 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 3901      00000000 
+ 3902 2c78 F30F6F8D 		movdqu	-2944(%rbp), %xmm1
+ 3902      80F4FFFF 
+ 3903 2c80 F30F7F8D 		movdqu	%xmm1, -2912(%rbp)
+ 3903      A0F4FFFF 
+ 3904 2c88 F30F7F85 		movdqu	%xmm0, -2928(%rbp)
+ 3904      90F4FFFF 
+ 3905 2c90 F30F6F85 		movdqu	-2912(%rbp), %xmm0
+ 3905      A0F4FFFF 
+ 3906 2c98 F30F7F85 		movdqu	%xmm0, -2880(%rbp)
+ 3906      C0F4FFFF 
+ 3907 2ca0 F30F6F85 		movdqu	-2928(%rbp), %xmm0
+ 3907      90F4FFFF 
+ 3908 2ca8 F30F7F85 		movdqu	%xmm0, -2896(%rbp)
+ 3908      B0F4FFFF 
+ 3909              	.LBB1218:
+ 3910              	.LBB1219:
+ 3911              	.LBB1220:
+ 3912              	.LBB1221:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+
GAS LISTING /tmp/ccPaCTqg.s 			page 148
+
+
+ 3913              		.loc 1 529 0
+ 3914 2cb0 F30F6F8D 		movdqu	-2896(%rbp), %xmm1
+ 3914      B0F4FFFF 
+ 3915 2cb8 F30F6F85 		movdqu	-2880(%rbp), %xmm0
+ 3915      C0F4FFFF 
+ 3916 2cc0 660F3800 		pshufb	%xmm1, %xmm0
+ 3916      C1
+ 3917              	.LBE1221:
+ 3918              	.LBE1220:
+ 3919              	.LBE1219:
+ 3920              	.LBE1218:
+ 3921              	.LBE1217:
+ 3922              	.LBE1216:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3923              		.loc 3 1569 0
+ 3924 2cc5 660F7F85 		movdqa	%xmm0, -6032(%rbp)
+ 3924      70E8FFFF 
+ 3925 2ccd 660F6F85 		movdqa	-6032(%rbp), %xmm0
+ 3925      70E8FFFF 
+ 3926 2cd5 660FEF85 		pxor	-3120(%rbp), %xmm0
+ 3926      D0F3FFFF 
+ 3927 2cdd F30F7F85 		movdqu	%xmm0, -3120(%rbp)
+ 3927      D0F3FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 3928              		.loc 3 1571 0
+ 3929 2ce5 F30F6F85 		movdqu	-3120(%rbp), %xmm0
+ 3929      D0F3FFFF 
+ 3930              	.LBE1203:
+ 3931              	.LBE1202:
+1830:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(ShiftXorColumns) (v4);       /* k22   :k22^k23: k23    : 0            */
+ 3932              		.loc 3 1830 0
+ 3933 2ced 660F7F85 		movdqa	%xmm0, -6304(%rbp)
+ 3933      60E7FFFF 
+1831:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 3934              		.loc 3 1831 0
+ 3935 2cf5 660F6F85 		movdqa	-6288(%rbp), %xmm0
+ 3935      70E7FFFF 
+ 3936 2cfd 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 3936      A0E7FFFF 
+ 3937 2d05 660F6F95 		movdqa	-6240(%rbp), %xmm2
+ 3937      A0E7FFFF 
+ 3938 2d0d F30F7F95 		movdqu	%xmm2, -2848(%rbp)
+ 3938      E0F4FFFF 
+ 3939              	.LBB1222:
+ 3940              	.LBB1223:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 3941              		.loc 3 1673 0
+ 3942 2d15 F30F6F85 		movdqu	-2848(%rbp), %xmm0
+ 3942      E0F4FFFF 
+ 3943 2d1d 660F7F85 		movdqa	%xmm0, -6016(%rbp)
+ 3943      80E8FFFF 
+ 3944 2d25 660F6F95 		movdqa	-6016(%rbp), %xmm2
+ 3944      80E8FFFF 
+ 3945 2d2d F30F7F95 		movdqu	%xmm2, -2816(%rbp)
+ 3945      00F5FFFF 
+ 3946              	.LBB1224:
+ 3947              	.LBB1225:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 149
+
+
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 3948              		.loc 1 852 0
+ 3949 2d35 F30F6F85 		movdqu	-2816(%rbp), %xmm0
+ 3949      00F5FFFF 
+ 3950 2d3d 660F3ADF 		aeskeygenassist	$8, %xmm0, %xmm0
+ 3950      C008
+ 3951              	.LBE1225:
+ 3952              	.LBE1224:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 3953              		.loc 3 1674 0
+ 3954 2d43 660F7F85 		movdqa	%xmm0, -6016(%rbp)
+ 3954      80E8FFFF 
+ 3955 2d4b 660F6F85 		movdqa	-6016(%rbp), %xmm0
+ 3955      80E8FFFF 
+ 3956 2d53 F30F7F85 		movdqu	%xmm0, -2800(%rbp)
+ 3956      10F5FFFF 
+ 3957 2d5b F30F6F85 		movdqu	-2800(%rbp), %xmm0
+ 3957      10F5FFFF 
+ 3958 2d63 F30F7F85 		movdqu	%xmm0, -2768(%rbp)
+ 3958      30F5FFFF 
+ 3959              	.LBB1226:
+ 3960              	.LBB1227:
+ 3961              	.LBB1228:
+ 3962              	.LBB1229:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 3963              		.loc 1 450 0
+ 3964 2d6b F30F6F85 		movdqu	-2768(%rbp), %xmm0
+ 3964      30F5FFFF 
+ 3965 2d73 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 3965      FF
+ 3966              	.LBE1229:
+ 3967              	.LBE1228:
+ 3968              	.LBE1227:
+ 3969              	.LBE1226:
+ 3970              	.LBE1223:
+ 3971              	.LBE1222:
+ 3972              		.loc 3 1831 0
+ 3973 2d78 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 3973      A0E7FFFF 
+1832:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v2,0x08);                             /* F(k23): F(k23): F(k23) : F(k23)       */
+1833:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0 ^= k;                                       /* k24   : k25   : k26    : k27          */
+ 3974              		.loc 3 1833 0
+ 3975 2d80 660F6F95 		movdqa	-6320(%rbp), %xmm2
+ 3975      50E7FFFF 
+ 3976 2d88 660FEF95 		pxor	-6240(%rbp), %xmm2
+ 3976      A0E7FFFF 
+ 3977 2d90 660F7F95 		movdqa	%xmm2, -6320(%rbp)
+ 3977      50E7FFFF 
+1834:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v0);   /* k27   : k27   : k27    : k27          */
+ 3978              		.loc 3 1834 0
+ 3979 2d98 660F6F85 		movdqa	-6320(%rbp), %xmm0
+ 3979      50E7FFFF 
+ 3980 2da0 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 3980      A0E7FFFF 
+ 3981 2da8 660F6F95 		movdqa	-6240(%rbp), %xmm2
+ 3981      A0E7FFFF 
+ 3982 2db0 F30F7F95 		movdqu	%xmm2, -2752(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 150
+
+
+ 3982      40F5FFFF 
+ 3983 2db8 F30F6F85 		movdqu	-2752(%rbp), %xmm0
+ 3983      40F5FFFF 
+ 3984 2dc0 F30F7F85 		movdqu	%xmm0, -2720(%rbp)
+ 3984      60F5FFFF 
+ 3985              	.LBB1230:
+ 3986              	.LBB1231:
+ 3987              	.LBB1232:
+ 3988              	.LBB1233:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 3989              		.loc 1 450 0
+ 3990 2dc8 F30F6F85 		movdqu	-2720(%rbp), %xmm0
+ 3990      60F5FFFF 
+ 3991 2dd0 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 3991      FF
+ 3992              	.LBE1233:
+ 3993              	.LBE1232:
+ 3994              	.LBE1231:
+ 3995              	.LBE1230:
+ 3996              		.loc 3 1834 0
+ 3997 2dd5 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 3997      A0E7FFFF 
+1835:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1 ^= k;                                       /* k28   : k29   : x      : x            */
+ 3998              		.loc 3 1835 0
+ 3999 2ddd 660F6F85 		movdqa	-6304(%rbp), %xmm0
+ 3999      60E7FFFF 
+ 4000 2de5 660FEF85 		pxor	-6240(%rbp), %xmm0
+ 4000      A0E7FFFF 
+ 4001 2ded 660F7F85 		movdqa	%xmm0, -6304(%rbp)
+ 4001      60E7FFFF 
+1836:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1837:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[6] = v0; /* K24:K25:K26:K27 */
+ 4002              		.loc 3 1837 0
+ 4003 2df5 488B8548 		movq	-5816(%rbp), %rax
+ 4003      E9FFFF
+ 4004 2dfc 4883C060 		addq	$96, %rax
+ 4005 2e00 660F6F95 		movdqa	-6320(%rbp), %xmm2
+ 4005      50E7FFFF 
+ 4006 2e08 660F7F10 		movdqa	%xmm2, (%rax)
+1838:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1839:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 4-15 = 28-39 */
+1840:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1841:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1842:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 4007              		.loc 3 1842 0
+ 4008 2e0c 660F6F85 		movdqa	-6304(%rbp), %xmm0
+ 4008      60E7FFFF 
+ 4009 2e14 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 4009      A0E7FFFF 
+ 4010 2e1c 660F6F95 		movdqa	-6240(%rbp), %xmm2
+ 4010      A0E7FFFF 
+ 4011 2e24 F30F7F95 		movdqu	%xmm2, -2688(%rbp)
+ 4011      80F5FFFF 
+ 4012              	.LBB1234:
+ 4013              	.LBB1235:
+1621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 4014              		.loc 3 1621 0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 151
+
+
+ 4015 2e2c F30F6F85 		movdqu	-2688(%rbp), %xmm0
+ 4015      80F5FFFF 
+ 4016 2e34 660F7F85 		movdqa	%xmm0, -6000(%rbp)
+ 4016      90E8FFFF 
+ 4017 2e3c 660F6F95 		movdqa	-6000(%rbp), %xmm2
+ 4017      90E8FFFF 
+ 4018 2e44 F30F7F95 		movdqu	%xmm2, -2656(%rbp)
+ 4018      A0F5FFFF 
+ 4019              	.LBB1236:
+ 4020              	.LBB1237:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 4021              		.loc 1 852 0
+ 4022 2e4c F30F6F85 		movdqu	-2656(%rbp), %xmm0
+ 4022      A0F5FFFF 
+ 4023 2e54 660F3ADF 		aeskeygenassist	$16, %xmm0, %xmm0
+ 4023      C010
+ 4024              	.LBE1237:
+ 4025              	.LBE1236:
+1622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 4026              		.loc 3 1622 0
+ 4027 2e5a 660F7F85 		movdqa	%xmm0, -6000(%rbp)
+ 4027      90E8FFFF 
+ 4028 2e62 660F6F85 		movdqa	-6000(%rbp), %xmm0
+ 4028      90E8FFFF 
+ 4029 2e6a F30F7F85 		movdqu	%xmm0, -2640(%rbp)
+ 4029      B0F5FFFF 
+ 4030 2e72 F30F6F85 		movdqu	-2640(%rbp), %xmm0
+ 4030      B0F5FFFF 
+ 4031 2e7a F30F7F85 		movdqu	%xmm0, -2608(%rbp)
+ 4031      D0F5FFFF 
+ 4032              	.LBB1238:
+ 4033              	.LBB1239:
+ 4034              	.LBB1240:
+ 4035              	.LBB1241:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 4036              		.loc 1 450 0
+ 4037 2e82 F30F6F85 		movdqu	-2608(%rbp), %xmm0
+ 4037      D0F5FFFF 
+ 4038 2e8a 660F70C0 		pshufd	$85, %xmm0, %xmm0
+ 4038      55
+ 4039              	.LBE1241:
+ 4040              	.LBE1240:
+ 4041              	.LBE1239:
+ 4042              	.LBE1238:
+ 4043              	.LBE1235:
+ 4044              	.LBE1234:
+ 4045              		.loc 3 1842 0
+ 4046 2e8f 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 4046      A0E7FFFF 
+ 4047 2e97 660F6F95 		movdqa	-6320(%rbp), %xmm2
+ 4047      50E7FFFF 
+ 4048 2e9f F30F7F95 		movdqu	%xmm2, -2592(%rbp)
+ 4048      E0F5FFFF 
+ 4049              	.LBB1242:
+ 4050              	.LBB1243:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 4051              		.loc 3 1565 0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 152
+
+
+ 4052 2ea7 F30F6F85 		movdqu	-2592(%rbp), %xmm0
+ 4052      E0F5FFFF 
+ 4053 2eaf 660F7F85 		movdqa	%xmm0, -5984(%rbp)
+ 4053      A0E8FFFF 
+ 4054 2eb7 660F6F95 		movdqa	-5984(%rbp), %xmm2
+ 4054      A0E8FFFF 
+ 4055 2ebf F30F7F95 		movdqu	%xmm2, -2576(%rbp)
+ 4055      F0F5FFFF 
+ 4056              	.LBB1244:
+ 4057              	.LBB1245:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4058              		.loc 3 1278 0
+ 4059 2ec7 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 4059      00000000 
+ 4060 2ecf F30F6F8D 		movdqu	-2576(%rbp), %xmm1
+ 4060      F0F5FFFF 
+ 4061 2ed7 F30F7F8D 		movdqu	%xmm1, -2544(%rbp)
+ 4061      10F6FFFF 
+ 4062 2edf F30F7F85 		movdqu	%xmm0, -2560(%rbp)
+ 4062      00F6FFFF 
+ 4063 2ee7 F30F6F85 		movdqu	-2544(%rbp), %xmm0
+ 4063      10F6FFFF 
+ 4064 2eef F30F7F85 		movdqu	%xmm0, -2512(%rbp)
+ 4064      30F6FFFF 
+ 4065 2ef7 F30F6F85 		movdqu	-2560(%rbp), %xmm0
+ 4065      00F6FFFF 
+ 4066 2eff F30F7F85 		movdqu	%xmm0, -2528(%rbp)
+ 4066      20F6FFFF 
+ 4067              	.LBB1246:
+ 4068              	.LBB1247:
+ 4069              	.LBB1248:
+ 4070              	.LBB1249:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4071              		.loc 1 529 0
+ 4072 2f07 F30F6F8D 		movdqu	-2528(%rbp), %xmm1
+ 4072      20F6FFFF 
+ 4073 2f0f F30F6F85 		movdqu	-2512(%rbp), %xmm0
+ 4073      30F6FFFF 
+ 4074 2f17 660F3800 		pshufb	%xmm1, %xmm0
+ 4074      C1
+ 4075              	.LBE1249:
+ 4076              	.LBE1248:
+ 4077              	.LBE1247:
+ 4078              	.LBE1246:
+ 4079              	.LBE1245:
+ 4080              	.LBE1244:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4081              		.loc 3 1567 0
+ 4082 2f1c 660F7F85 		movdqa	%xmm0, -5984(%rbp)
+ 4082      A0E8FFFF 
+ 4083 2f24 660F6F85 		movdqa	-5984(%rbp), %xmm0
+ 4083      A0E8FFFF 
+ 4084 2f2c 660FEF85 		pxor	-2592(%rbp), %xmm0
+ 4084      E0F5FFFF 
+ 4085 2f34 F30F7F85 		movdqu	%xmm0, -2592(%rbp)
+ 4085      E0F5FFFF 
+ 4086 2f3c 660F6F85 		movdqa	-5984(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 153
+
+
+ 4086      A0E8FFFF 
+ 4087 2f44 F30F7F85 		movdqu	%xmm0, -2496(%rbp)
+ 4087      40F6FFFF 
+ 4088              	.LBB1250:
+ 4089              	.LBB1251:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4090              		.loc 3 1278 0
+ 4091 2f4c 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 4091      00000000 
+ 4092 2f54 F30F6F8D 		movdqu	-2496(%rbp), %xmm1
+ 4092      40F6FFFF 
+ 4093 2f5c F30F7F8D 		movdqu	%xmm1, -2464(%rbp)
+ 4093      60F6FFFF 
+ 4094 2f64 F30F7F85 		movdqu	%xmm0, -2480(%rbp)
+ 4094      50F6FFFF 
+ 4095 2f6c F30F6F85 		movdqu	-2464(%rbp), %xmm0
+ 4095      60F6FFFF 
+ 4096 2f74 F30F7F85 		movdqu	%xmm0, -2432(%rbp)
+ 4096      80F6FFFF 
+ 4097 2f7c F30F6F85 		movdqu	-2480(%rbp), %xmm0
+ 4097      50F6FFFF 
+ 4098 2f84 F30F7F85 		movdqu	%xmm0, -2448(%rbp)
+ 4098      70F6FFFF 
+ 4099              	.LBB1252:
+ 4100              	.LBB1253:
+ 4101              	.LBB1254:
+ 4102              	.LBB1255:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4103              		.loc 1 529 0
+ 4104 2f8c F30F6F8D 		movdqu	-2448(%rbp), %xmm1
+ 4104      70F6FFFF 
+ 4105 2f94 F30F6F85 		movdqu	-2432(%rbp), %xmm0
+ 4105      80F6FFFF 
+ 4106 2f9c 660F3800 		pshufb	%xmm1, %xmm0
+ 4106      C1
+ 4107              	.LBE1255:
+ 4108              	.LBE1254:
+ 4109              	.LBE1253:
+ 4110              	.LBE1252:
+ 4111              	.LBE1251:
+ 4112              	.LBE1250:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4113              		.loc 3 1568 0
+ 4114 2fa1 660F7F85 		movdqa	%xmm0, -5984(%rbp)
+ 4114      A0E8FFFF 
+ 4115 2fa9 660F6F85 		movdqa	-5984(%rbp), %xmm0
+ 4115      A0E8FFFF 
+ 4116 2fb1 660FEF85 		pxor	-2592(%rbp), %xmm0
+ 4116      E0F5FFFF 
+ 4117 2fb9 F30F7F85 		movdqu	%xmm0, -2592(%rbp)
+ 4117      E0F5FFFF 
+ 4118 2fc1 660F6F95 		movdqa	-5984(%rbp), %xmm2
+ 4118      A0E8FFFF 
+ 4119 2fc9 F30F7F95 		movdqu	%xmm2, -2416(%rbp)
+ 4119      90F6FFFF 
+ 4120              	.LBB1256:
+ 4121              	.LBB1257:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 154
+
+
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4122              		.loc 3 1278 0
+ 4123 2fd1 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 4123      00000000 
+ 4124 2fd9 F30F6F8D 		movdqu	-2416(%rbp), %xmm1
+ 4124      90F6FFFF 
+ 4125 2fe1 F30F7F8D 		movdqu	%xmm1, -2384(%rbp)
+ 4125      B0F6FFFF 
+ 4126 2fe9 F30F7F85 		movdqu	%xmm0, -2400(%rbp)
+ 4126      A0F6FFFF 
+ 4127 2ff1 F30F6F85 		movdqu	-2384(%rbp), %xmm0
+ 4127      B0F6FFFF 
+ 4128 2ff9 F30F7F85 		movdqu	%xmm0, -2352(%rbp)
+ 4128      D0F6FFFF 
+ 4129 3001 F30F6F85 		movdqu	-2400(%rbp), %xmm0
+ 4129      A0F6FFFF 
+ 4130 3009 F30F7F85 		movdqu	%xmm0, -2368(%rbp)
+ 4130      C0F6FFFF 
+ 4131              	.LBB1258:
+ 4132              	.LBB1259:
+ 4133              	.LBB1260:
+ 4134              	.LBB1261:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4135              		.loc 1 529 0
+ 4136 3011 F30F6F8D 		movdqu	-2368(%rbp), %xmm1
+ 4136      C0F6FFFF 
+ 4137 3019 F30F6F85 		movdqu	-2352(%rbp), %xmm0
+ 4137      D0F6FFFF 
+ 4138 3021 660F3800 		pshufb	%xmm1, %xmm0
+ 4138      C1
+ 4139              	.LBE1261:
+ 4140              	.LBE1260:
+ 4141              	.LBE1259:
+ 4142              	.LBE1258:
+ 4143              	.LBE1257:
+ 4144              	.LBE1256:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4145              		.loc 3 1569 0
+ 4146 3026 660F7F85 		movdqa	%xmm0, -5984(%rbp)
+ 4146      A0E8FFFF 
+ 4147 302e 660F6F85 		movdqa	-5984(%rbp), %xmm0
+ 4147      A0E8FFFF 
+ 4148 3036 660FEF85 		pxor	-2592(%rbp), %xmm0
+ 4148      E0F5FFFF 
+ 4149 303e F30F7F85 		movdqu	%xmm0, -2592(%rbp)
+ 4149      E0F5FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 4150              		.loc 3 1571 0
+ 4151 3046 F30F6F85 		movdqu	-2592(%rbp), %xmm0
+ 4151      E0F5FFFF 
+ 4152              	.LBE1243:
+ 4153              	.LBE1242:
+1843:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v1,0x10);                             /* F(k29): F(k29): F(k29) : F(k29)       */
+1844:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3  = AESBCMEMBER(ShiftXorColumns) (v0);       /* k24   :k24^k25:k24^k25^k26:k24^k25^k26^k27 */
+ 4154              		.loc 3 1844 0
+ 4155 304e 660F7F85 		movdqa	%xmm0, -6272(%rbp)
+ 4155      80E7FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 155
+
+
+1845:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3 ^= k;                                       /* k30   : k31   : k32    : k33          */
+ 4156              		.loc 3 1845 0
+ 4157 3056 660F6F85 		movdqa	-6272(%rbp), %xmm0
+ 4157      80E7FFFF 
+ 4158 305e 660FEF85 		pxor	-6240(%rbp), %xmm0
+ 4158      A0E7FFFF 
+ 4159 3066 660F7F85 		movdqa	%xmm0, -6272(%rbp)
+ 4159      80E7FFFF 
+ 4160 306e 660F6F95 		movdqa	-6304(%rbp), %xmm2
+ 4160      60E7FFFF 
+ 4161 3076 F30F7F95 		movdqu	%xmm2, -2336(%rbp)
+ 4161      E0F6FFFF 
+ 4162              	.LBB1262:
+ 4163              	.LBB1263:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 4164              		.loc 3 1565 0
+ 4165 307e F30F6F85 		movdqu	-2336(%rbp), %xmm0
+ 4165      E0F6FFFF 
+ 4166 3086 660F7F85 		movdqa	%xmm0, -5968(%rbp)
+ 4166      B0E8FFFF 
+ 4167 308e 660F6F95 		movdqa	-5968(%rbp), %xmm2
+ 4167      B0E8FFFF 
+ 4168 3096 F30F7F95 		movdqu	%xmm2, -2320(%rbp)
+ 4168      F0F6FFFF 
+ 4169              	.LBB1264:
+ 4170              	.LBB1265:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4171              		.loc 3 1278 0
+ 4172 309e 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 4172      00000000 
+ 4173 30a6 F30F6F8D 		movdqu	-2320(%rbp), %xmm1
+ 4173      F0F6FFFF 
+ 4174 30ae F30F7F8D 		movdqu	%xmm1, -2288(%rbp)
+ 4174      10F7FFFF 
+ 4175 30b6 F30F7F85 		movdqu	%xmm0, -2304(%rbp)
+ 4175      00F7FFFF 
+ 4176 30be F30F6F85 		movdqu	-2288(%rbp), %xmm0
+ 4176      10F7FFFF 
+ 4177 30c6 F30F7F85 		movdqu	%xmm0, -2256(%rbp)
+ 4177      30F7FFFF 
+ 4178 30ce F30F6F85 		movdqu	-2304(%rbp), %xmm0
+ 4178      00F7FFFF 
+ 4179 30d6 F30F7F85 		movdqu	%xmm0, -2272(%rbp)
+ 4179      20F7FFFF 
+ 4180              	.LBB1266:
+ 4181              	.LBB1267:
+ 4182              	.LBB1268:
+ 4183              	.LBB1269:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4184              		.loc 1 529 0
+ 4185 30de F30F6F8D 		movdqu	-2272(%rbp), %xmm1
+ 4185      20F7FFFF 
+ 4186 30e6 F30F6F85 		movdqu	-2256(%rbp), %xmm0
+ 4186      30F7FFFF 
+ 4187 30ee 660F3800 		pshufb	%xmm1, %xmm0
+ 4187      C1
+ 4188              	.LBE1269:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 156
+
+
+ 4189              	.LBE1268:
+ 4190              	.LBE1267:
+ 4191              	.LBE1266:
+ 4192              	.LBE1265:
+ 4193              	.LBE1264:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4194              		.loc 3 1567 0
+ 4195 30f3 660F7F85 		movdqa	%xmm0, -5968(%rbp)
+ 4195      B0E8FFFF 
+ 4196 30fb 660F6F85 		movdqa	-5968(%rbp), %xmm0
+ 4196      B0E8FFFF 
+ 4197 3103 660FEF85 		pxor	-2336(%rbp), %xmm0
+ 4197      E0F6FFFF 
+ 4198 310b F30F7F85 		movdqu	%xmm0, -2336(%rbp)
+ 4198      E0F6FFFF 
+ 4199 3113 660F6F85 		movdqa	-5968(%rbp), %xmm0
+ 4199      B0E8FFFF 
+ 4200 311b F30F7F85 		movdqu	%xmm0, -2240(%rbp)
+ 4200      40F7FFFF 
+ 4201              	.LBB1270:
+ 4202              	.LBB1271:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4203              		.loc 3 1278 0
+ 4204 3123 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 4204      00000000 
+ 4205 312b F30F6F8D 		movdqu	-2240(%rbp), %xmm1
+ 4205      40F7FFFF 
+ 4206 3133 F30F7F8D 		movdqu	%xmm1, -2208(%rbp)
+ 4206      60F7FFFF 
+ 4207 313b F30F7F85 		movdqu	%xmm0, -2224(%rbp)
+ 4207      50F7FFFF 
+ 4208 3143 F30F6F85 		movdqu	-2208(%rbp), %xmm0
+ 4208      60F7FFFF 
+ 4209 314b F30F7F85 		movdqu	%xmm0, -2176(%rbp)
+ 4209      80F7FFFF 
+ 4210 3153 F30F6F85 		movdqu	-2224(%rbp), %xmm0
+ 4210      50F7FFFF 
+ 4211 315b F30F7F85 		movdqu	%xmm0, -2192(%rbp)
+ 4211      70F7FFFF 
+ 4212              	.LBB1272:
+ 4213              	.LBB1273:
+ 4214              	.LBB1274:
+ 4215              	.LBB1275:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4216              		.loc 1 529 0
+ 4217 3163 F30F6F8D 		movdqu	-2192(%rbp), %xmm1
+ 4217      70F7FFFF 
+ 4218 316b F30F6F85 		movdqu	-2176(%rbp), %xmm0
+ 4218      80F7FFFF 
+ 4219 3173 660F3800 		pshufb	%xmm1, %xmm0
+ 4219      C1
+ 4220              	.LBE1275:
+ 4221              	.LBE1274:
+ 4222              	.LBE1273:
+ 4223              	.LBE1272:
+ 4224              	.LBE1271:
+ 4225              	.LBE1270:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 157
+
+
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4226              		.loc 3 1568 0
+ 4227 3178 660F7F85 		movdqa	%xmm0, -5968(%rbp)
+ 4227      B0E8FFFF 
+ 4228 3180 660F6F85 		movdqa	-5968(%rbp), %xmm0
+ 4228      B0E8FFFF 
+ 4229 3188 660FEF85 		pxor	-2336(%rbp), %xmm0
+ 4229      E0F6FFFF 
+ 4230 3190 F30F7F85 		movdqu	%xmm0, -2336(%rbp)
+ 4230      E0F6FFFF 
+ 4231 3198 660F6F95 		movdqa	-5968(%rbp), %xmm2
+ 4231      B0E8FFFF 
+ 4232 31a0 F30F7F95 		movdqu	%xmm2, -2160(%rbp)
+ 4232      90F7FFFF 
+ 4233              	.LBB1276:
+ 4234              	.LBB1277:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4235              		.loc 3 1278 0
+ 4236 31a8 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 4236      00000000 
+ 4237 31b0 F30F6F8D 		movdqu	-2160(%rbp), %xmm1
+ 4237      90F7FFFF 
+ 4238 31b8 F30F7F8D 		movdqu	%xmm1, -2128(%rbp)
+ 4238      B0F7FFFF 
+ 4239 31c0 F30F7F85 		movdqu	%xmm0, -2144(%rbp)
+ 4239      A0F7FFFF 
+ 4240 31c8 F30F6F85 		movdqu	-2128(%rbp), %xmm0
+ 4240      B0F7FFFF 
+ 4241 31d0 F30F7F85 		movdqu	%xmm0, -2096(%rbp)
+ 4241      D0F7FFFF 
+ 4242 31d8 F30F6F85 		movdqu	-2144(%rbp), %xmm0
+ 4242      A0F7FFFF 
+ 4243 31e0 F30F7F85 		movdqu	%xmm0, -2112(%rbp)
+ 4243      C0F7FFFF 
+ 4244              	.LBB1278:
+ 4245              	.LBB1279:
+ 4246              	.LBB1280:
+ 4247              	.LBB1281:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4248              		.loc 1 529 0
+ 4249 31e8 F30F6F8D 		movdqu	-2112(%rbp), %xmm1
+ 4249      C0F7FFFF 
+ 4250 31f0 F30F6F85 		movdqu	-2096(%rbp), %xmm0
+ 4250      D0F7FFFF 
+ 4251 31f8 660F3800 		pshufb	%xmm1, %xmm0
+ 4251      C1
+ 4252              	.LBE1281:
+ 4253              	.LBE1280:
+ 4254              	.LBE1279:
+ 4255              	.LBE1278:
+ 4256              	.LBE1277:
+ 4257              	.LBE1276:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4258              		.loc 3 1569 0
+ 4259 31fd 660F7F85 		movdqa	%xmm0, -5968(%rbp)
+ 4259      B0E8FFFF 
+ 4260 3205 660F6F85 		movdqa	-5968(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 158
+
+
+ 4260      B0E8FFFF 
+ 4261 320d 660FEF85 		pxor	-2336(%rbp), %xmm0
+ 4261      E0F6FFFF 
+ 4262 3215 F30F7F85 		movdqu	%xmm0, -2336(%rbp)
+ 4262      E0F6FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 4263              		.loc 3 1571 0
+ 4264 321d F30F6F85 		movdqu	-2336(%rbp), %xmm0
+ 4264      E0F6FFFF 
+ 4265              	.LBE1263:
+ 4266              	.LBE1262:
+1846:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4  = AESBCMEMBER(ShiftXorColumns) (v1);       /* k26   :k28^k29: k29    : 0            */
+ 4267              		.loc 3 1846 0
+ 4268 3225 660F7F85 		movdqa	%xmm0, -6256(%rbp)
+ 4268      90E7FFFF 
+1847:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k33   : k33   : k33    : k33          */
+ 4269              		.loc 3 1847 0
+ 4270 322d 660F6F85 		movdqa	-6272(%rbp), %xmm0
+ 4270      80E7FFFF 
+ 4271 3235 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 4271      A0E7FFFF 
+ 4272 323d 660F6F95 		movdqa	-6240(%rbp), %xmm2
+ 4272      A0E7FFFF 
+ 4273 3245 F30F7F95 		movdqu	%xmm2, -2080(%rbp)
+ 4273      E0F7FFFF 
+ 4274 324d F30F6F85 		movdqu	-2080(%rbp), %xmm0
+ 4274      E0F7FFFF 
+ 4275 3255 F30F7F85 		movdqu	%xmm0, -2048(%rbp)
+ 4275      00F8FFFF 
+ 4276              	.LBB1282:
+ 4277              	.LBB1283:
+ 4278              	.LBB1284:
+ 4279              	.LBB1285:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 4280              		.loc 1 450 0
+ 4281 325d F30F6F85 		movdqu	-2048(%rbp), %xmm0
+ 4281      00F8FFFF 
+ 4282 3265 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 4282      FF
+ 4283              	.LBE1285:
+ 4284              	.LBE1284:
+ 4285              	.LBE1283:
+ 4286              	.LBE1282:
+ 4287              		.loc 3 1847 0
+ 4288 326a 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 4288      A0E7FFFF 
+1848:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4 ^= k;                                       /* k34   : k35   : x      : x            */
+ 4289              		.loc 3 1848 0
+ 4290 3272 660F6F85 		movdqa	-6256(%rbp), %xmm0
+ 4290      90E7FFFF 
+ 4291 327a 660FEF85 		pxor	-6240(%rbp), %xmm0
+ 4291      A0E7FFFF 
+ 4292 3282 660F7F85 		movdqa	%xmm0, -6256(%rbp)
+ 4292      90E7FFFF 
+ 4293 328a 660F6F95 		movdqa	-6304(%rbp), %xmm2
+ 4293      60E7FFFF 
+ 4294 3292 F30F7F95 		movdqu	%xmm2, -2016(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 159
+
+
+ 4294      20F8FFFF 
+ 4295 329a 660F6F85 		movdqa	-6272(%rbp), %xmm0
+ 4295      80E7FFFF 
+ 4296 32a2 F30F7F85 		movdqu	%xmm0, -2032(%rbp)
+ 4296      10F8FFFF 
+ 4297 32aa F30F6F85 		movdqu	-2016(%rbp), %xmm0
+ 4297      20F8FFFF 
+ 4298 32b2 F30F7F85 		movdqu	%xmm0, -1968(%rbp)
+ 4298      50F8FFFF 
+ 4299 32ba F30F6F85 		movdqu	-2032(%rbp), %xmm0
+ 4299      10F8FFFF 
+ 4300 32c2 F30F7F85 		movdqu	%xmm0, -1984(%rbp)
+ 4300      40F8FFFF 
+ 4301              	.LBB1286:
+ 4302              	.LBB1287:
+ 4303              	.LBB1288:
+ 4304              	.LBB1289:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 4305              		.loc 1 366 0
+ 4306 32ca F20F1085 		movsd	-1984(%rbp), %xmm0
+ 4306      40F8FFFF 
+ 4307 32d2 660F1685 		movhpd	-1976(%rbp), %xmm0
+ 4307      48F8FFFF 
+ 4308 32da F20F108D 		movsd	-1968(%rbp), %xmm1
+ 4308      50F8FFFF 
+ 4309 32e2 660F168D 		movhpd	-1960(%rbp), %xmm1
+ 4309      58F8FFFF 
+ 4310 32ea 660F28D1 		movapd	%xmm1, %xmm2
+ 4311 32ee 660F14D0 		unpcklpd	%xmm0, %xmm2
+ 4312 32f2 660F28C2 		movapd	%xmm2, %xmm0
+ 4313              	.LBE1289:
+ 4314              	.LBE1288:
+ 4315              	.LBE1287:
+ 4316              	.LBE1286:
+1849:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateMerge1) (v1,v3);        /* k28   : k29   : k30    : k31          */
+ 4317              		.loc 3 1849 0
+ 4318 32f6 660F7F85 		movdqa	%xmm0, -6304(%rbp)
+ 4318      60E7FFFF 
+1850:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[7] = v1; /* K28:K29:K30:K31 */
+ 4319              		.loc 3 1851 0
+ 4320 32fe 488B8548 		movq	-5816(%rbp), %rax
+ 4320      E9FFFF
+ 4321 3305 4883C070 		addq	$112, %rax
+ 4322 3309 660F6F85 		movdqa	-6304(%rbp), %xmm0
+ 4322      60E7FFFF 
+ 4323 3311 660F7F00 		movdqa	%xmm0, (%rax)
+ 4324 3315 660F6F95 		movdqa	-6272(%rbp), %xmm2
+ 4324      80E7FFFF 
+ 4325 331d F30F7F95 		movdqu	%xmm2, -1936(%rbp)
+ 4325      70F8FFFF 
+ 4326 3325 660F6F85 		movdqa	-6256(%rbp), %xmm0
+ 4326      90E7FFFF 
+ 4327 332d F30F7F85 		movdqu	%xmm0, -1952(%rbp)
+ 4327      60F8FFFF 
+ 4328 3335 F30F6F85 		movdqu	-1936(%rbp), %xmm0
+ 4328      70F8FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 160
+
+
+ 4329 333d F30F7F85 		movdqu	%xmm0, -1888(%rbp)
+ 4329      A0F8FFFF 
+ 4330 3345 F30F6F85 		movdqu	-1952(%rbp), %xmm0
+ 4330      60F8FFFF 
+ 4331 334d F30F7F85 		movdqu	%xmm0, -1904(%rbp)
+ 4331      90F8FFFF 
+ 4332              	.LBB1290:
+ 4333              	.LBB1291:
+ 4334              	.LBB1292:
+ 4335              	.LBB1293:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 4336              		.loc 1 366 0
+ 4337 3355 F20F108D 		movsd	-1904(%rbp), %xmm1
+ 4337      90F8FFFF 
+ 4338 335d 660F168D 		movhpd	-1896(%rbp), %xmm1
+ 4338      98F8FFFF 
+ 4339 3365 F20F1085 		movsd	-1888(%rbp), %xmm0
+ 4339      A0F8FFFF 
+ 4340 336d 660F1685 		movhpd	-1880(%rbp), %xmm0
+ 4340      A8F8FFFF 
+ 4341 3375 660FC6C1 		shufpd	$1, %xmm1, %xmm0
+ 4341      01
+ 4342              	.LBE1293:
+ 4343              	.LBE1292:
+ 4344              	.LBE1291:
+ 4345              	.LBE1290:
+1852:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1853:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v2  = AESBCMEMBER(StateMerge2) (v3,v4);        /* k32   : k33   : k34    : k35          */
+ 4346              		.loc 3 1853 0
+ 4347 337a 660F7F85 		movdqa	%xmm0, -6288(%rbp)
+ 4347      70E7FFFF 
+1854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[8] = v2; /* K32:K33:K34:K35 */
+ 4348              		.loc 3 1854 0
+ 4349 3382 488B8548 		movq	-5816(%rbp), %rax
+ 4349      E9FFFF
+ 4350 3389 4883E880 		subq	$-128, %rax
+ 4351 338d 660F6F95 		movdqa	-6288(%rbp), %xmm2
+ 4351      70E7FFFF 
+ 4352 3395 660F7F10 		movdqa	%xmm2, (%rax)
+ 4353 3399 660F6F85 		movdqa	-6272(%rbp), %xmm0
+ 4353      80E7FFFF 
+ 4354 33a1 F30F7F85 		movdqu	%xmm0, -1872(%rbp)
+ 4354      B0F8FFFF 
+ 4355              	.LBB1294:
+ 4356              	.LBB1295:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 4357              		.loc 3 1565 0
+ 4358 33a9 F30F6F95 		movdqu	-1872(%rbp), %xmm2
+ 4358      B0F8FFFF 
+ 4359 33b1 660F7F95 		movdqa	%xmm2, -5952(%rbp)
+ 4359      C0E8FFFF 
+ 4360 33b9 660F6F85 		movdqa	-5952(%rbp), %xmm0
+ 4360      C0E8FFFF 
+ 4361 33c1 F30F7F85 		movdqu	%xmm0, -1856(%rbp)
+ 4361      C0F8FFFF 
+ 4362              	.LBB1296:
+ 4363              	.LBB1297:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 161
+
+
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4364              		.loc 3 1278 0
+ 4365 33c9 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 4365      00000000 
+ 4366 33d1 F30F6F8D 		movdqu	-1856(%rbp), %xmm1
+ 4366      C0F8FFFF 
+ 4367 33d9 F30F7F8D 		movdqu	%xmm1, -1824(%rbp)
+ 4367      E0F8FFFF 
+ 4368 33e1 F30F7F85 		movdqu	%xmm0, -1840(%rbp)
+ 4368      D0F8FFFF 
+ 4369 33e9 F30F6F85 		movdqu	-1824(%rbp), %xmm0
+ 4369      E0F8FFFF 
+ 4370 33f1 F30F7F85 		movdqu	%xmm0, -1792(%rbp)
+ 4370      00F9FFFF 
+ 4371 33f9 F30F6F85 		movdqu	-1840(%rbp), %xmm0
+ 4371      D0F8FFFF 
+ 4372 3401 F30F7F85 		movdqu	%xmm0, -1808(%rbp)
+ 4372      F0F8FFFF 
+ 4373              	.LBB1298:
+ 4374              	.LBB1299:
+ 4375              	.LBB1300:
+ 4376              	.LBB1301:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4377              		.loc 1 529 0
+ 4378 3409 F30F6F8D 		movdqu	-1808(%rbp), %xmm1
+ 4378      F0F8FFFF 
+ 4379 3411 F30F6F85 		movdqu	-1792(%rbp), %xmm0
+ 4379      00F9FFFF 
+ 4380 3419 660F3800 		pshufb	%xmm1, %xmm0
+ 4380      C1
+ 4381              	.LBE1301:
+ 4382              	.LBE1300:
+ 4383              	.LBE1299:
+ 4384              	.LBE1298:
+ 4385              	.LBE1297:
+ 4386              	.LBE1296:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4387              		.loc 3 1567 0
+ 4388 341e 660F7F85 		movdqa	%xmm0, -5952(%rbp)
+ 4388      C0E8FFFF 
+ 4389 3426 660F6F85 		movdqa	-5952(%rbp), %xmm0
+ 4389      C0E8FFFF 
+ 4390 342e 660FEF85 		pxor	-1872(%rbp), %xmm0
+ 4390      B0F8FFFF 
+ 4391 3436 F30F7F85 		movdqu	%xmm0, -1872(%rbp)
+ 4391      B0F8FFFF 
+ 4392 343e 660F6F95 		movdqa	-5952(%rbp), %xmm2
+ 4392      C0E8FFFF 
+ 4393 3446 F30F7F95 		movdqu	%xmm2, -1776(%rbp)
+ 4393      10F9FFFF 
+ 4394              	.LBB1302:
+ 4395              	.LBB1303:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4396              		.loc 3 1278 0
+ 4397 344e 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 4397      00000000 
+ 4398 3456 F30F6F8D 		movdqu	-1776(%rbp), %xmm1
+
GAS LISTING /tmp/ccPaCTqg.s 			page 162
+
+
+ 4398      10F9FFFF 
+ 4399 345e F30F7F8D 		movdqu	%xmm1, -1744(%rbp)
+ 4399      30F9FFFF 
+ 4400 3466 F30F7F85 		movdqu	%xmm0, -1760(%rbp)
+ 4400      20F9FFFF 
+ 4401 346e F30F6F85 		movdqu	-1744(%rbp), %xmm0
+ 4401      30F9FFFF 
+ 4402 3476 F30F7F85 		movdqu	%xmm0, -1712(%rbp)
+ 4402      50F9FFFF 
+ 4403 347e F30F6F85 		movdqu	-1760(%rbp), %xmm0
+ 4403      20F9FFFF 
+ 4404 3486 F30F7F85 		movdqu	%xmm0, -1728(%rbp)
+ 4404      40F9FFFF 
+ 4405              	.LBB1304:
+ 4406              	.LBB1305:
+ 4407              	.LBB1306:
+ 4408              	.LBB1307:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4409              		.loc 1 529 0
+ 4410 348e F30F6F8D 		movdqu	-1728(%rbp), %xmm1
+ 4410      40F9FFFF 
+ 4411 3496 F30F6F85 		movdqu	-1712(%rbp), %xmm0
+ 4411      50F9FFFF 
+ 4412 349e 660F3800 		pshufb	%xmm1, %xmm0
+ 4412      C1
+ 4413              	.LBE1307:
+ 4414              	.LBE1306:
+ 4415              	.LBE1305:
+ 4416              	.LBE1304:
+ 4417              	.LBE1303:
+ 4418              	.LBE1302:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4419              		.loc 3 1568 0
+ 4420 34a3 660F7F85 		movdqa	%xmm0, -5952(%rbp)
+ 4420      C0E8FFFF 
+ 4421 34ab 660F6F85 		movdqa	-5952(%rbp), %xmm0
+ 4421      C0E8FFFF 
+ 4422 34b3 660FEF85 		pxor	-1872(%rbp), %xmm0
+ 4422      B0F8FFFF 
+ 4423 34bb F30F7F85 		movdqu	%xmm0, -1872(%rbp)
+ 4423      B0F8FFFF 
+ 4424 34c3 660F6F85 		movdqa	-5952(%rbp), %xmm0
+ 4424      C0E8FFFF 
+ 4425 34cb F30F7F85 		movdqu	%xmm0, -1696(%rbp)
+ 4425      60F9FFFF 
+ 4426              	.LBB1308:
+ 4427              	.LBB1309:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4428              		.loc 3 1278 0
+ 4429 34d3 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 4429      00000000 
+ 4430 34db F30F6F8D 		movdqu	-1696(%rbp), %xmm1
+ 4430      60F9FFFF 
+ 4431 34e3 F30F7F8D 		movdqu	%xmm1, -1664(%rbp)
+ 4431      80F9FFFF 
+ 4432 34eb F30F7F85 		movdqu	%xmm0, -1680(%rbp)
+ 4432      70F9FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 163
+
+
+ 4433 34f3 F30F6F85 		movdqu	-1664(%rbp), %xmm0
+ 4433      80F9FFFF 
+ 4434 34fb F30F7F85 		movdqu	%xmm0, -1632(%rbp)
+ 4434      A0F9FFFF 
+ 4435 3503 F30F6F85 		movdqu	-1680(%rbp), %xmm0
+ 4435      70F9FFFF 
+ 4436 350b F30F7F85 		movdqu	%xmm0, -1648(%rbp)
+ 4436      90F9FFFF 
+ 4437              	.LBB1310:
+ 4438              	.LBB1311:
+ 4439              	.LBB1312:
+ 4440              	.LBB1313:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4441              		.loc 1 529 0
+ 4442 3513 F30F6F8D 		movdqu	-1648(%rbp), %xmm1
+ 4442      90F9FFFF 
+ 4443 351b F30F6F85 		movdqu	-1632(%rbp), %xmm0
+ 4443      A0F9FFFF 
+ 4444 3523 660F3800 		pshufb	%xmm1, %xmm0
+ 4444      C1
+ 4445              	.LBE1313:
+ 4446              	.LBE1312:
+ 4447              	.LBE1311:
+ 4448              	.LBE1310:
+ 4449              	.LBE1309:
+ 4450              	.LBE1308:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4451              		.loc 3 1569 0
+ 4452 3528 660F7F85 		movdqa	%xmm0, -5952(%rbp)
+ 4452      C0E8FFFF 
+ 4453 3530 660F6F85 		movdqa	-5952(%rbp), %xmm0
+ 4453      C0E8FFFF 
+ 4454 3538 660FEF85 		pxor	-1872(%rbp), %xmm0
+ 4454      B0F8FFFF 
+ 4455 3540 F30F7F85 		movdqu	%xmm0, -1872(%rbp)
+ 4455      B0F8FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 4456              		.loc 3 1571 0
+ 4457 3548 F30F6F85 		movdqu	-1872(%rbp), %xmm0
+ 4457      B0F8FFFF 
+ 4458              	.LBE1295:
+ 4459              	.LBE1294:
+1855:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 2 */
+1856:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(ShiftXorColumns) (v3);       /* k30   :k30^k31:k30^k31^k32:k30^k31^k32^k33 */
+ 4460              		.loc 3 1856 0
+ 4461 3550 660F7F85 		movdqa	%xmm0, -6320(%rbp)
+ 4461      50E7FFFF 
+ 4462 3558 660F6F95 		movdqa	-6256(%rbp), %xmm2
+ 4462      90E7FFFF 
+ 4463 3560 F30F7F95 		movdqu	%xmm2, -1616(%rbp)
+ 4463      B0F9FFFF 
+ 4464              	.LBB1314:
+ 4465              	.LBB1315:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 4466              		.loc 3 1565 0
+ 4467 3568 F30F6F85 		movdqu	-1616(%rbp), %xmm0
+ 4467      B0F9FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 164
+
+
+ 4468 3570 660F7F85 		movdqa	%xmm0, -5936(%rbp)
+ 4468      D0E8FFFF 
+ 4469 3578 660F6F95 		movdqa	-5936(%rbp), %xmm2
+ 4469      D0E8FFFF 
+ 4470 3580 F30F7F95 		movdqu	%xmm2, -1600(%rbp)
+ 4470      C0F9FFFF 
+ 4471              	.LBB1316:
+ 4472              	.LBB1317:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4473              		.loc 3 1278 0
+ 4474 3588 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 4474      00000000 
+ 4475 3590 F30F6F8D 		movdqu	-1600(%rbp), %xmm1
+ 4475      C0F9FFFF 
+ 4476 3598 F30F7F8D 		movdqu	%xmm1, -1568(%rbp)
+ 4476      E0F9FFFF 
+ 4477 35a0 F30F7F85 		movdqu	%xmm0, -1584(%rbp)
+ 4477      D0F9FFFF 
+ 4478 35a8 F30F6F85 		movdqu	-1568(%rbp), %xmm0
+ 4478      E0F9FFFF 
+ 4479 35b0 F30F7F85 		movdqu	%xmm0, -1536(%rbp)
+ 4479      00FAFFFF 
+ 4480 35b8 F30F6F85 		movdqu	-1584(%rbp), %xmm0
+ 4480      D0F9FFFF 
+ 4481 35c0 F30F7F85 		movdqu	%xmm0, -1552(%rbp)
+ 4481      F0F9FFFF 
+ 4482              	.LBB1318:
+ 4483              	.LBB1319:
+ 4484              	.LBB1320:
+ 4485              	.LBB1321:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4486              		.loc 1 529 0
+ 4487 35c8 F30F6F8D 		movdqu	-1552(%rbp), %xmm1
+ 4487      F0F9FFFF 
+ 4488 35d0 F30F6F85 		movdqu	-1536(%rbp), %xmm0
+ 4488      00FAFFFF 
+ 4489 35d8 660F3800 		pshufb	%xmm1, %xmm0
+ 4489      C1
+ 4490              	.LBE1321:
+ 4491              	.LBE1320:
+ 4492              	.LBE1319:
+ 4493              	.LBE1318:
+ 4494              	.LBE1317:
+ 4495              	.LBE1316:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4496              		.loc 3 1567 0
+ 4497 35dd 660F7F85 		movdqa	%xmm0, -5936(%rbp)
+ 4497      D0E8FFFF 
+ 4498 35e5 660F6F85 		movdqa	-5936(%rbp), %xmm0
+ 4498      D0E8FFFF 
+ 4499 35ed 660FEF85 		pxor	-1616(%rbp), %xmm0
+ 4499      B0F9FFFF 
+ 4500 35f5 F30F7F85 		movdqu	%xmm0, -1616(%rbp)
+ 4500      B0F9FFFF 
+ 4501 35fd 660F6F85 		movdqa	-5936(%rbp), %xmm0
+ 4501      D0E8FFFF 
+ 4502 3605 F30F7F85 		movdqu	%xmm0, -1520(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 165
+
+
+ 4502      10FAFFFF 
+ 4503              	.LBB1322:
+ 4504              	.LBB1323:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4505              		.loc 3 1278 0
+ 4506 360d 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 4506      00000000 
+ 4507 3615 F30F6F8D 		movdqu	-1520(%rbp), %xmm1
+ 4507      10FAFFFF 
+ 4508 361d F30F7F8D 		movdqu	%xmm1, -1488(%rbp)
+ 4508      30FAFFFF 
+ 4509 3625 F30F7F85 		movdqu	%xmm0, -1504(%rbp)
+ 4509      20FAFFFF 
+ 4510 362d F30F6F85 		movdqu	-1488(%rbp), %xmm0
+ 4510      30FAFFFF 
+ 4511 3635 F30F7F85 		movdqu	%xmm0, -1456(%rbp)
+ 4511      50FAFFFF 
+ 4512 363d F30F6F85 		movdqu	-1504(%rbp), %xmm0
+ 4512      20FAFFFF 
+ 4513 3645 F30F7F85 		movdqu	%xmm0, -1472(%rbp)
+ 4513      40FAFFFF 
+ 4514              	.LBB1324:
+ 4515              	.LBB1325:
+ 4516              	.LBB1326:
+ 4517              	.LBB1327:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4518              		.loc 1 529 0
+ 4519 364d F30F6F8D 		movdqu	-1472(%rbp), %xmm1
+ 4519      40FAFFFF 
+ 4520 3655 F30F6F85 		movdqu	-1456(%rbp), %xmm0
+ 4520      50FAFFFF 
+ 4521 365d 660F3800 		pshufb	%xmm1, %xmm0
+ 4521      C1
+ 4522              	.LBE1327:
+ 4523              	.LBE1326:
+ 4524              	.LBE1325:
+ 4525              	.LBE1324:
+ 4526              	.LBE1323:
+ 4527              	.LBE1322:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4528              		.loc 3 1568 0
+ 4529 3662 660F7F85 		movdqa	%xmm0, -5936(%rbp)
+ 4529      D0E8FFFF 
+ 4530 366a 660F6F85 		movdqa	-5936(%rbp), %xmm0
+ 4530      D0E8FFFF 
+ 4531 3672 660FEF85 		pxor	-1616(%rbp), %xmm0
+ 4531      B0F9FFFF 
+ 4532 367a F30F7F85 		movdqu	%xmm0, -1616(%rbp)
+ 4532      B0F9FFFF 
+ 4533 3682 660F6F95 		movdqa	-5936(%rbp), %xmm2
+ 4533      D0E8FFFF 
+ 4534 368a F30F7F95 		movdqu	%xmm2, -1440(%rbp)
+ 4534      60FAFFFF 
+ 4535              	.LBB1328:
+ 4536              	.LBB1329:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4537              		.loc 3 1278 0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 166
+
+
+ 4538 3692 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 4538      00000000 
+ 4539 369a F30F6F8D 		movdqu	-1440(%rbp), %xmm1
+ 4539      60FAFFFF 
+ 4540 36a2 F30F7F8D 		movdqu	%xmm1, -1408(%rbp)
+ 4540      80FAFFFF 
+ 4541 36aa F30F7F85 		movdqu	%xmm0, -1424(%rbp)
+ 4541      70FAFFFF 
+ 4542 36b2 F30F6F85 		movdqu	-1408(%rbp), %xmm0
+ 4542      80FAFFFF 
+ 4543 36ba F30F7F85 		movdqu	%xmm0, -1376(%rbp)
+ 4543      A0FAFFFF 
+ 4544 36c2 F30F6F85 		movdqu	-1424(%rbp), %xmm0
+ 4544      70FAFFFF 
+ 4545 36ca F30F7F85 		movdqu	%xmm0, -1392(%rbp)
+ 4545      90FAFFFF 
+ 4546              	.LBB1330:
+ 4547              	.LBB1331:
+ 4548              	.LBB1332:
+ 4549              	.LBB1333:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4550              		.loc 1 529 0
+ 4551 36d2 F30F6F8D 		movdqu	-1392(%rbp), %xmm1
+ 4551      90FAFFFF 
+ 4552 36da F30F6F85 		movdqu	-1376(%rbp), %xmm0
+ 4552      A0FAFFFF 
+ 4553 36e2 660F3800 		pshufb	%xmm1, %xmm0
+ 4553      C1
+ 4554              	.LBE1333:
+ 4555              	.LBE1332:
+ 4556              	.LBE1331:
+ 4557              	.LBE1330:
+ 4558              	.LBE1329:
+ 4559              	.LBE1328:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4560              		.loc 3 1569 0
+ 4561 36e7 660F7F85 		movdqa	%xmm0, -5936(%rbp)
+ 4561      D0E8FFFF 
+ 4562 36ef 660F6F85 		movdqa	-5936(%rbp), %xmm0
+ 4562      D0E8FFFF 
+ 4563 36f7 660FEF85 		pxor	-1616(%rbp), %xmm0
+ 4563      B0F9FFFF 
+ 4564 36ff F30F7F85 		movdqu	%xmm0, -1616(%rbp)
+ 4564      B0F9FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 4565              		.loc 3 1571 0
+ 4566 3707 F30F6F85 		movdqu	-1616(%rbp), %xmm0
+ 4566      B0F9FFFF 
+ 4567              	.LBE1315:
+ 4568              	.LBE1314:
+1857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(ShiftXorColumns) (v4);       /* k26   :k26^k27: k27    : 0            */
+ 4569              		.loc 3 1857 0
+ 4570 370f 660F7F85 		movdqa	%xmm0, -6304(%rbp)
+ 4570      60E7FFFF 
+1858:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 4571              		.loc 3 1858 0
+ 4572 3717 660F6F85 		movdqa	-6288(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 167
+
+
+ 4572      70E7FFFF 
+ 4573 371f 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 4573      A0E7FFFF 
+ 4574 3727 660F6F95 		movdqa	-6240(%rbp), %xmm2
+ 4574      A0E7FFFF 
+ 4575 372f F30F7F95 		movdqu	%xmm2, -1344(%rbp)
+ 4575      C0FAFFFF 
+ 4576              	.LBB1334:
+ 4577              	.LBB1335:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 4578              		.loc 3 1673 0
+ 4579 3737 F30F6F85 		movdqu	-1344(%rbp), %xmm0
+ 4579      C0FAFFFF 
+ 4580 373f 660F7F85 		movdqa	%xmm0, -5920(%rbp)
+ 4580      E0E8FFFF 
+ 4581 3747 660F6F95 		movdqa	-5920(%rbp), %xmm2
+ 4581      E0E8FFFF 
+ 4582 374f F30F7F95 		movdqu	%xmm2, -1312(%rbp)
+ 4582      E0FAFFFF 
+ 4583              	.LBB1336:
+ 4584              	.LBB1337:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 4585              		.loc 1 852 0
+ 4586 3757 F30F6F85 		movdqu	-1312(%rbp), %xmm0
+ 4586      E0FAFFFF 
+ 4587 375f 660F3ADF 		aeskeygenassist	$32, %xmm0, %xmm0
+ 4587      C020
+ 4588              	.LBE1337:
+ 4589              	.LBE1336:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 4590              		.loc 3 1674 0
+ 4591 3765 660F7F85 		movdqa	%xmm0, -5920(%rbp)
+ 4591      E0E8FFFF 
+ 4592 376d 660F6F85 		movdqa	-5920(%rbp), %xmm0
+ 4592      E0E8FFFF 
+ 4593 3775 F30F7F85 		movdqu	%xmm0, -1296(%rbp)
+ 4593      F0FAFFFF 
+ 4594 377d F30F6F85 		movdqu	-1296(%rbp), %xmm0
+ 4594      F0FAFFFF 
+ 4595 3785 F30F7F85 		movdqu	%xmm0, -1264(%rbp)
+ 4595      10FBFFFF 
+ 4596              	.LBB1338:
+ 4597              	.LBB1339:
+ 4598              	.LBB1340:
+ 4599              	.LBB1341:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 4600              		.loc 1 450 0
+ 4601 378d F30F6F85 		movdqu	-1264(%rbp), %xmm0
+ 4601      10FBFFFF 
+ 4602 3795 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 4602      FF
+ 4603              	.LBE1341:
+ 4604              	.LBE1340:
+ 4605              	.LBE1339:
+ 4606              	.LBE1338:
+ 4607              	.LBE1335:
+ 4608              	.LBE1334:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 168
+
+
+ 4609              		.loc 3 1858 0
+ 4610 379a 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 4610      A0E7FFFF 
+1859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v2,0x20);                             /* F(k35): F(k35): F(k35) : F(k35)       */
+1860:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0 ^= k;                                       /* k36   : k37   : k38    : k39          */
+ 4611              		.loc 3 1860 0
+ 4612 37a2 660F6F95 		movdqa	-6320(%rbp), %xmm2
+ 4612      50E7FFFF 
+ 4613 37aa 660FEF95 		pxor	-6240(%rbp), %xmm2
+ 4613      A0E7FFFF 
+ 4614 37b2 660F7F95 		movdqa	%xmm2, -6320(%rbp)
+ 4614      50E7FFFF 
+ 4615 37ba 660F6F85 		movdqa	-6320(%rbp), %xmm0
+ 4615      50E7FFFF 
+ 4616 37c2 F30F7F85 		movdqu	%xmm0, -1248(%rbp)
+ 4616      20FBFFFF 
+ 4617 37ca F30F6F85 		movdqu	-1248(%rbp), %xmm0
+ 4617      20FBFFFF 
+ 4618 37d2 F30F7F85 		movdqu	%xmm0, -1216(%rbp)
+ 4618      40FBFFFF 
+ 4619              	.LBB1342:
+ 4620              	.LBB1343:
+ 4621              	.LBB1344:
+ 4622              	.LBB1345:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 4623              		.loc 1 450 0
+ 4624 37da F30F6F85 		movdqu	-1216(%rbp), %xmm0
+ 4624      40FBFFFF 
+ 4625 37e2 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 4625      FF
+ 4626              	.LBE1345:
+ 4627              	.LBE1344:
+ 4628              	.LBE1343:
+ 4629              	.LBE1342:
+1861:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (v0);       /* k39   : k39   : k39    : k39          */
+ 4630              		.loc 3 1861 0
+ 4631 37e7 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 4631      A0E7FFFF 
+1862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1 ^= k;                                       /* k40   : k41   : x      : x            */
+ 4632              		.loc 3 1862 0
+ 4633 37ef 660F6F95 		movdqa	-6304(%rbp), %xmm2
+ 4633      60E7FFFF 
+ 4634 37f7 660FEF95 		pxor	-6240(%rbp), %xmm2
+ 4634      A0E7FFFF 
+ 4635 37ff 660F7F95 		movdqa	%xmm2, -6304(%rbp)
+ 4635      60E7FFFF 
+1863:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1864:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[9] = v0; /* K36:K37:K38:K39 */
+ 4636              		.loc 3 1864 0
+ 4637 3807 488B8548 		movq	-5816(%rbp), %rax
+ 4637      E9FFFF
+ 4638 380e 48059000 		addq	$144, %rax
+ 4638      0000
+ 4639 3814 660F6F85 		movdqa	-6320(%rbp), %xmm0
+ 4639      50E7FFFF 
+ 4640 381c 660F7F00 		movdqa	%xmm0, (%rax)
+1865:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 169
+
+
+1866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 4-15 = 40-55 but we only need through 51 so we change from pattern 2 to pattern 3 */
+1867:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1869:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 4641              		.loc 3 1869 0
+ 4642 3820 660F6F95 		movdqa	-6304(%rbp), %xmm2
+ 4642      60E7FFFF 
+ 4643 3828 660F7F95 		movdqa	%xmm2, -6240(%rbp)
+ 4643      A0E7FFFF 
+ 4644 3830 660F6F85 		movdqa	-6240(%rbp), %xmm0
+ 4644      A0E7FFFF 
+ 4645 3838 F30F7F85 		movdqu	%xmm0, -1184(%rbp)
+ 4645      60FBFFFF 
+ 4646              	.LBB1346:
+ 4647              	.LBB1347:
+1621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 4648              		.loc 3 1621 0
+ 4649 3840 F30F6F95 		movdqu	-1184(%rbp), %xmm2
+ 4649      60FBFFFF 
+ 4650 3848 660F7F95 		movdqa	%xmm2, -5904(%rbp)
+ 4650      F0E8FFFF 
+ 4651 3850 660F6F85 		movdqa	-5904(%rbp), %xmm0
+ 4651      F0E8FFFF 
+ 4652 3858 F30F7F85 		movdqu	%xmm0, -1152(%rbp)
+ 4652      80FBFFFF 
+ 4653              	.LBB1348:
+ 4654              	.LBB1349:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 4655              		.loc 1 852 0
+ 4656 3860 F30F6F85 		movdqu	-1152(%rbp), %xmm0
+ 4656      80FBFFFF 
+ 4657 3868 660F3ADF 		aeskeygenassist	$64, %xmm0, %xmm0
+ 4657      C040
+ 4658              	.LBE1349:
+ 4659              	.LBE1348:
+1622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 4660              		.loc 3 1622 0
+ 4661 386e 660F7F85 		movdqa	%xmm0, -5904(%rbp)
+ 4661      F0E8FFFF 
+ 4662 3876 660F6F95 		movdqa	-5904(%rbp), %xmm2
+ 4662      F0E8FFFF 
+ 4663 387e F30F7F95 		movdqu	%xmm2, -1136(%rbp)
+ 4663      90FBFFFF 
+ 4664 3886 F30F6F85 		movdqu	-1136(%rbp), %xmm0
+ 4664      90FBFFFF 
+ 4665 388e F30F7F85 		movdqu	%xmm0, -1104(%rbp)
+ 4665      B0FBFFFF 
+ 4666              	.LBB1350:
+ 4667              	.LBB1351:
+ 4668              	.LBB1352:
+ 4669              	.LBB1353:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 4670              		.loc 1 450 0
+ 4671 3896 F30F6F85 		movdqu	-1104(%rbp), %xmm0
+ 4671      B0FBFFFF 
+ 4672 389e 660F70C0 		pshufd	$85, %xmm0, %xmm0
+ 4672      55
+
GAS LISTING /tmp/ccPaCTqg.s 			page 170
+
+
+ 4673              	.LBE1353:
+ 4674              	.LBE1352:
+ 4675              	.LBE1351:
+ 4676              	.LBE1350:
+ 4677              	.LBE1347:
+ 4678              	.LBE1346:
+ 4679              		.loc 3 1869 0
+ 4680 38a3 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 4680      A0E7FFFF 
+ 4681 38ab 660F6F85 		movdqa	-6320(%rbp), %xmm0
+ 4681      50E7FFFF 
+ 4682 38b3 F30F7F85 		movdqu	%xmm0, -1088(%rbp)
+ 4682      C0FBFFFF 
+ 4683              	.LBB1354:
+ 4684              	.LBB1355:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 4685              		.loc 3 1565 0
+ 4686 38bb F30F6F95 		movdqu	-1088(%rbp), %xmm2
+ 4686      C0FBFFFF 
+ 4687 38c3 660F7F95 		movdqa	%xmm2, -5888(%rbp)
+ 4687      00E9FFFF 
+ 4688 38cb 660F6F85 		movdqa	-5888(%rbp), %xmm0
+ 4688      00E9FFFF 
+ 4689 38d3 F30F7F85 		movdqu	%xmm0, -1072(%rbp)
+ 4689      D0FBFFFF 
+ 4690              	.LBB1356:
+ 4691              	.LBB1357:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4692              		.loc 3 1278 0
+ 4693 38db 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 4693      00000000 
+ 4694 38e3 F30F6F8D 		movdqu	-1072(%rbp), %xmm1
+ 4694      D0FBFFFF 
+ 4695 38eb F30F7F8D 		movdqu	%xmm1, -1040(%rbp)
+ 4695      F0FBFFFF 
+ 4696 38f3 F30F7F85 		movdqu	%xmm0, -1056(%rbp)
+ 4696      E0FBFFFF 
+ 4697 38fb F30F6F85 		movdqu	-1040(%rbp), %xmm0
+ 4697      F0FBFFFF 
+ 4698 3903 F30F7F85 		movdqu	%xmm0, -1008(%rbp)
+ 4698      10FCFFFF 
+ 4699 390b F30F6F85 		movdqu	-1056(%rbp), %xmm0
+ 4699      E0FBFFFF 
+ 4700 3913 F30F7F85 		movdqu	%xmm0, -1024(%rbp)
+ 4700      00FCFFFF 
+ 4701              	.LBB1358:
+ 4702              	.LBB1359:
+ 4703              	.LBB1360:
+ 4704              	.LBB1361:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4705              		.loc 1 529 0
+ 4706 391b F30F6F8D 		movdqu	-1024(%rbp), %xmm1
+ 4706      00FCFFFF 
+ 4707 3923 F30F6F85 		movdqu	-1008(%rbp), %xmm0
+ 4707      10FCFFFF 
+ 4708 392b 660F3800 		pshufb	%xmm1, %xmm0
+ 4708      C1
+
GAS LISTING /tmp/ccPaCTqg.s 			page 171
+
+
+ 4709              	.LBE1361:
+ 4710              	.LBE1360:
+ 4711              	.LBE1359:
+ 4712              	.LBE1358:
+ 4713              	.LBE1357:
+ 4714              	.LBE1356:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4715              		.loc 3 1567 0
+ 4716 3930 660F7F85 		movdqa	%xmm0, -5888(%rbp)
+ 4716      00E9FFFF 
+ 4717 3938 660F6F85 		movdqa	-5888(%rbp), %xmm0
+ 4717      00E9FFFF 
+ 4718 3940 660FEF85 		pxor	-1088(%rbp), %xmm0
+ 4718      C0FBFFFF 
+ 4719 3948 F30F7F85 		movdqu	%xmm0, -1088(%rbp)
+ 4719      C0FBFFFF 
+ 4720 3950 660F6F95 		movdqa	-5888(%rbp), %xmm2
+ 4720      00E9FFFF 
+ 4721 3958 F30F7F95 		movdqu	%xmm2, -992(%rbp)
+ 4721      20FCFFFF 
+ 4722              	.LBB1362:
+ 4723              	.LBB1363:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4724              		.loc 3 1278 0
+ 4725 3960 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 4725      00000000 
+ 4726 3968 F30F6F8D 		movdqu	-992(%rbp), %xmm1
+ 4726      20FCFFFF 
+ 4727 3970 F30F7F8D 		movdqu	%xmm1, -960(%rbp)
+ 4727      40FCFFFF 
+ 4728 3978 F30F7F85 		movdqu	%xmm0, -976(%rbp)
+ 4728      30FCFFFF 
+ 4729 3980 F30F6F85 		movdqu	-960(%rbp), %xmm0
+ 4729      40FCFFFF 
+ 4730 3988 F30F7F85 		movdqu	%xmm0, -928(%rbp)
+ 4730      60FCFFFF 
+ 4731 3990 F30F6F85 		movdqu	-976(%rbp), %xmm0
+ 4731      30FCFFFF 
+ 4732 3998 F30F7F85 		movdqu	%xmm0, -944(%rbp)
+ 4732      50FCFFFF 
+ 4733              	.LBB1364:
+ 4734              	.LBB1365:
+ 4735              	.LBB1366:
+ 4736              	.LBB1367:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4737              		.loc 1 529 0
+ 4738 39a0 F30F6F8D 		movdqu	-944(%rbp), %xmm1
+ 4738      50FCFFFF 
+ 4739 39a8 F30F6F85 		movdqu	-928(%rbp), %xmm0
+ 4739      60FCFFFF 
+ 4740 39b0 660F3800 		pshufb	%xmm1, %xmm0
+ 4740      C1
+ 4741              	.LBE1367:
+ 4742              	.LBE1366:
+ 4743              	.LBE1365:
+ 4744              	.LBE1364:
+ 4745              	.LBE1363:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 172
+
+
+ 4746              	.LBE1362:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4747              		.loc 3 1568 0
+ 4748 39b5 660F7F85 		movdqa	%xmm0, -5888(%rbp)
+ 4748      00E9FFFF 
+ 4749 39bd 660F6F85 		movdqa	-5888(%rbp), %xmm0
+ 4749      00E9FFFF 
+ 4750 39c5 660FEF85 		pxor	-1088(%rbp), %xmm0
+ 4750      C0FBFFFF 
+ 4751 39cd F30F7F85 		movdqu	%xmm0, -1088(%rbp)
+ 4751      C0FBFFFF 
+ 4752 39d5 660F6F85 		movdqa	-5888(%rbp), %xmm0
+ 4752      00E9FFFF 
+ 4753 39dd F30F7F85 		movdqu	%xmm0, -912(%rbp)
+ 4753      70FCFFFF 
+ 4754              	.LBB1368:
+ 4755              	.LBB1369:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4756              		.loc 3 1278 0
+ 4757 39e5 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 4757      00000000 
+ 4758 39ed F30F6F8D 		movdqu	-912(%rbp), %xmm1
+ 4758      70FCFFFF 
+ 4759 39f5 F30F7F8D 		movdqu	%xmm1, -880(%rbp)
+ 4759      90FCFFFF 
+ 4760 39fd F30F7F85 		movdqu	%xmm0, -896(%rbp)
+ 4760      80FCFFFF 
+ 4761 3a05 F30F6F85 		movdqu	-880(%rbp), %xmm0
+ 4761      90FCFFFF 
+ 4762 3a0d F30F7F85 		movdqu	%xmm0, -848(%rbp)
+ 4762      B0FCFFFF 
+ 4763 3a15 F30F6F85 		movdqu	-896(%rbp), %xmm0
+ 4763      80FCFFFF 
+ 4764 3a1d F30F7F85 		movdqu	%xmm0, -864(%rbp)
+ 4764      A0FCFFFF 
+ 4765              	.LBB1370:
+ 4766              	.LBB1371:
+ 4767              	.LBB1372:
+ 4768              	.LBB1373:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4769              		.loc 1 529 0
+ 4770 3a25 F30F6F8D 		movdqu	-864(%rbp), %xmm1
+ 4770      A0FCFFFF 
+ 4771 3a2d F30F6F85 		movdqu	-848(%rbp), %xmm0
+ 4771      B0FCFFFF 
+ 4772 3a35 660F3800 		pshufb	%xmm1, %xmm0
+ 4772      C1
+ 4773              	.LBE1373:
+ 4774              	.LBE1372:
+ 4775              	.LBE1371:
+ 4776              	.LBE1370:
+ 4777              	.LBE1369:
+ 4778              	.LBE1368:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4779              		.loc 3 1569 0
+ 4780 3a3a 660F7F85 		movdqa	%xmm0, -5888(%rbp)
+ 4780      00E9FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 173
+
+
+ 4781 3a42 660F6F85 		movdqa	-5888(%rbp), %xmm0
+ 4781      00E9FFFF 
+ 4782 3a4a 660FEF85 		pxor	-1088(%rbp), %xmm0
+ 4782      C0FBFFFF 
+ 4783 3a52 F30F7F85 		movdqu	%xmm0, -1088(%rbp)
+ 4783      C0FBFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 4784              		.loc 3 1571 0
+ 4785 3a5a F30F6F85 		movdqu	-1088(%rbp), %xmm0
+ 4785      C0FBFFFF 
+ 4786              	.LBE1355:
+ 4787              	.LBE1354:
+1870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v1,0x40);                             /* F(k41): F(k41): F(k41) : F(k41)       */
+1871:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3  = AESBCMEMBER(ShiftXorColumns) (v0);       /* k36   :k36^k37:k36^k37^k38:k36^k37^k38^k39 */
+ 4788              		.loc 3 1871 0
+ 4789 3a62 660F7F85 		movdqa	%xmm0, -6272(%rbp)
+ 4789      80E7FFFF 
+ 4790 3a6a 660F6F95 		movdqa	-6304(%rbp), %xmm2
+ 4790      60E7FFFF 
+ 4791 3a72 F30F7F95 		movdqu	%xmm2, -832(%rbp)
+ 4791      C0FCFFFF 
+ 4792              	.LBB1374:
+ 4793              	.LBB1375:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 4794              		.loc 3 1565 0
+ 4795 3a7a F30F6F85 		movdqu	-832(%rbp), %xmm0
+ 4795      C0FCFFFF 
+ 4796 3a82 660F7F85 		movdqa	%xmm0, -5872(%rbp)
+ 4796      10E9FFFF 
+ 4797 3a8a 660F6F95 		movdqa	-5872(%rbp), %xmm2
+ 4797      10E9FFFF 
+ 4798 3a92 F30F7F95 		movdqu	%xmm2, -816(%rbp)
+ 4798      D0FCFFFF 
+ 4799              	.LBB1376:
+ 4800              	.LBB1377:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4801              		.loc 3 1278 0
+ 4802 3a9a 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 4802      00000000 
+ 4803 3aa2 F30F6F8D 		movdqu	-816(%rbp), %xmm1
+ 4803      D0FCFFFF 
+ 4804 3aaa F30F7F8D 		movdqu	%xmm1, -784(%rbp)
+ 4804      F0FCFFFF 
+ 4805 3ab2 F30F7F85 		movdqu	%xmm0, -800(%rbp)
+ 4805      E0FCFFFF 
+ 4806 3aba F30F6F85 		movdqu	-784(%rbp), %xmm0
+ 4806      F0FCFFFF 
+ 4807 3ac2 F30F7F85 		movdqu	%xmm0, -752(%rbp)
+ 4807      10FDFFFF 
+ 4808 3aca F30F6F85 		movdqu	-800(%rbp), %xmm0
+ 4808      E0FCFFFF 
+ 4809 3ad2 F30F7F85 		movdqu	%xmm0, -768(%rbp)
+ 4809      00FDFFFF 
+ 4810              	.LBB1378:
+ 4811              	.LBB1379:
+ 4812              	.LBB1380:
+ 4813              	.LBB1381:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 174
+
+
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4814              		.loc 1 529 0
+ 4815 3ada F30F6F8D 		movdqu	-768(%rbp), %xmm1
+ 4815      00FDFFFF 
+ 4816 3ae2 F30F6F85 		movdqu	-752(%rbp), %xmm0
+ 4816      10FDFFFF 
+ 4817 3aea 660F3800 		pshufb	%xmm1, %xmm0
+ 4817      C1
+ 4818              	.LBE1381:
+ 4819              	.LBE1380:
+ 4820              	.LBE1379:
+ 4821              	.LBE1378:
+ 4822              	.LBE1377:
+ 4823              	.LBE1376:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4824              		.loc 3 1567 0
+ 4825 3aef 660F7F85 		movdqa	%xmm0, -5872(%rbp)
+ 4825      10E9FFFF 
+ 4826 3af7 660F6F85 		movdqa	-5872(%rbp), %xmm0
+ 4826      10E9FFFF 
+ 4827 3aff 660FEF85 		pxor	-832(%rbp), %xmm0
+ 4827      C0FCFFFF 
+ 4828 3b07 F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 4828      C0FCFFFF 
+ 4829 3b0f 660F6F85 		movdqa	-5872(%rbp), %xmm0
+ 4829      10E9FFFF 
+ 4830 3b17 F30F7F85 		movdqu	%xmm0, -736(%rbp)
+ 4830      20FDFFFF 
+ 4831              	.LBB1382:
+ 4832              	.LBB1383:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4833              		.loc 3 1278 0
+ 4834 3b1f 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 4834      00000000 
+ 4835 3b27 F30F6F8D 		movdqu	-736(%rbp), %xmm1
+ 4835      20FDFFFF 
+ 4836 3b2f F30F7F8D 		movdqu	%xmm1, -704(%rbp)
+ 4836      40FDFFFF 
+ 4837 3b37 F30F7F85 		movdqu	%xmm0, -720(%rbp)
+ 4837      30FDFFFF 
+ 4838 3b3f F30F6F85 		movdqu	-704(%rbp), %xmm0
+ 4838      40FDFFFF 
+ 4839 3b47 F30F7F85 		movdqu	%xmm0, -672(%rbp)
+ 4839      60FDFFFF 
+ 4840 3b4f F30F6F85 		movdqu	-720(%rbp), %xmm0
+ 4840      30FDFFFF 
+ 4841 3b57 F30F7F85 		movdqu	%xmm0, -688(%rbp)
+ 4841      50FDFFFF 
+ 4842              	.LBB1384:
+ 4843              	.LBB1385:
+ 4844              	.LBB1386:
+ 4845              	.LBB1387:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4846              		.loc 1 529 0
+ 4847 3b5f F30F6F8D 		movdqu	-688(%rbp), %xmm1
+ 4847      50FDFFFF 
+ 4848 3b67 F30F6F85 		movdqu	-672(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 175
+
+
+ 4848      60FDFFFF 
+ 4849 3b6f 660F3800 		pshufb	%xmm1, %xmm0
+ 4849      C1
+ 4850              	.LBE1387:
+ 4851              	.LBE1386:
+ 4852              	.LBE1385:
+ 4853              	.LBE1384:
+ 4854              	.LBE1383:
+ 4855              	.LBE1382:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4856              		.loc 3 1568 0
+ 4857 3b74 660F7F85 		movdqa	%xmm0, -5872(%rbp)
+ 4857      10E9FFFF 
+ 4858 3b7c 660F6F85 		movdqa	-5872(%rbp), %xmm0
+ 4858      10E9FFFF 
+ 4859 3b84 660FEF85 		pxor	-832(%rbp), %xmm0
+ 4859      C0FCFFFF 
+ 4860 3b8c F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 4860      C0FCFFFF 
+ 4861 3b94 660F6F95 		movdqa	-5872(%rbp), %xmm2
+ 4861      10E9FFFF 
+ 4862 3b9c F30F7F95 		movdqu	%xmm2, -656(%rbp)
+ 4862      70FDFFFF 
+ 4863              	.LBB1388:
+ 4864              	.LBB1389:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4865              		.loc 3 1278 0
+ 4866 3ba4 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 4866      00000000 
+ 4867 3bac F30F6F8D 		movdqu	-656(%rbp), %xmm1
+ 4867      70FDFFFF 
+ 4868 3bb4 F30F7F8D 		movdqu	%xmm1, -624(%rbp)
+ 4868      90FDFFFF 
+ 4869 3bbc F30F7F85 		movdqu	%xmm0, -640(%rbp)
+ 4869      80FDFFFF 
+ 4870 3bc4 F30F6F85 		movdqu	-624(%rbp), %xmm0
+ 4870      90FDFFFF 
+ 4871 3bcc F30F7F85 		movdqu	%xmm0, -592(%rbp)
+ 4871      B0FDFFFF 
+ 4872 3bd4 F30F6F85 		movdqu	-640(%rbp), %xmm0
+ 4872      80FDFFFF 
+ 4873 3bdc F30F7F85 		movdqu	%xmm0, -608(%rbp)
+ 4873      A0FDFFFF 
+ 4874              	.LBB1390:
+ 4875              	.LBB1391:
+ 4876              	.LBB1392:
+ 4877              	.LBB1393:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4878              		.loc 1 529 0
+ 4879 3be4 F30F6F8D 		movdqu	-608(%rbp), %xmm1
+ 4879      A0FDFFFF 
+ 4880 3bec F30F6F85 		movdqu	-592(%rbp), %xmm0
+ 4880      B0FDFFFF 
+ 4881 3bf4 660F3800 		pshufb	%xmm1, %xmm0
+ 4881      C1
+ 4882              	.LBE1393:
+ 4883              	.LBE1392:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 176
+
+
+ 4884              	.LBE1391:
+ 4885              	.LBE1390:
+ 4886              	.LBE1389:
+ 4887              	.LBE1388:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4888              		.loc 3 1569 0
+ 4889 3bf9 660F7F85 		movdqa	%xmm0, -5872(%rbp)
+ 4889      10E9FFFF 
+ 4890 3c01 660F6F85 		movdqa	-5872(%rbp), %xmm0
+ 4890      10E9FFFF 
+ 4891 3c09 660FEF85 		pxor	-832(%rbp), %xmm0
+ 4891      C0FCFFFF 
+ 4892 3c11 F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 4892      C0FCFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 4893              		.loc 3 1571 0
+ 4894 3c19 F30F6F85 		movdqu	-832(%rbp), %xmm0
+ 4894      C0FCFFFF 
+ 4895              	.LBE1375:
+ 4896              	.LBE1374:
+1872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4  = AESBCMEMBER(ShiftXorColumns) (v1);       /* k40   :k40^k41: x   5  : x            */
+ 4897              		.loc 3 1872 0
+ 4898 3c21 660F7F85 		movdqa	%xmm0, -6256(%rbp)
+ 4898      90E7FFFF 
+1873:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3 ^= k;                                       /* k42   : k43   : k44    : k45          */
+ 4899              		.loc 3 1873 0
+ 4900 3c29 660F6F85 		movdqa	-6272(%rbp), %xmm0
+ 4900      80E7FFFF 
+ 4901 3c31 660FEF85 		pxor	-6240(%rbp), %xmm0
+ 4901      A0E7FFFF 
+ 4902 3c39 660F7F85 		movdqa	%xmm0, -6272(%rbp)
+ 4902      80E7FFFF 
+1874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k45   : k45   : k45    : k45          */
+ 4903              		.loc 3 1874 0
+ 4904 3c41 660F6F95 		movdqa	-6272(%rbp), %xmm2
+ 4904      80E7FFFF 
+ 4905 3c49 660F7F95 		movdqa	%xmm2, -6240(%rbp)
+ 4905      A0E7FFFF 
+ 4906 3c51 660F6F85 		movdqa	-6240(%rbp), %xmm0
+ 4906      A0E7FFFF 
+ 4907 3c59 F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 4907      C0FDFFFF 
+ 4908 3c61 F30F6F85 		movdqu	-576(%rbp), %xmm0
+ 4908      C0FDFFFF 
+ 4909 3c69 F30F7F85 		movdqu	%xmm0, -544(%rbp)
+ 4909      E0FDFFFF 
+ 4910              	.LBB1394:
+ 4911              	.LBB1395:
+ 4912              	.LBB1396:
+ 4913              	.LBB1397:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 4914              		.loc 1 450 0
+ 4915 3c71 F30F6F85 		movdqu	-544(%rbp), %xmm0
+ 4915      E0FDFFFF 
+ 4916 3c79 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 4916      FF
+ 4917              	.LBE1397:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 177
+
+
+ 4918              	.LBE1396:
+ 4919              	.LBE1395:
+ 4920              	.LBE1394:
+ 4921              		.loc 3 1874 0
+ 4922 3c7e 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 4922      A0E7FFFF 
+1875:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4 ^= k;                                       /* k46   : k47   : x      : x            */
+ 4923              		.loc 3 1875 0
+ 4924 3c86 660F6F95 		movdqa	-6256(%rbp), %xmm2
+ 4924      90E7FFFF 
+ 4925 3c8e 660FEF95 		pxor	-6240(%rbp), %xmm2
+ 4925      A0E7FFFF 
+ 4926 3c96 660F7F95 		movdqa	%xmm2, -6256(%rbp)
+ 4926      90E7FFFF 
+ 4927 3c9e 660F6F85 		movdqa	-6304(%rbp), %xmm0
+ 4927      60E7FFFF 
+ 4928 3ca6 F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 4928      00FEFFFF 
+ 4929 3cae 660F6F95 		movdqa	-6272(%rbp), %xmm2
+ 4929      80E7FFFF 
+ 4930 3cb6 F30F7F95 		movdqu	%xmm2, -528(%rbp)
+ 4930      F0FDFFFF 
+ 4931 3cbe F30F6F85 		movdqu	-512(%rbp), %xmm0
+ 4931      00FEFFFF 
+ 4932 3cc6 F30F7F85 		movdqu	%xmm0, -464(%rbp)
+ 4932      30FEFFFF 
+ 4933 3cce F30F6F85 		movdqu	-528(%rbp), %xmm0
+ 4933      F0FDFFFF 
+ 4934 3cd6 F30F7F85 		movdqu	%xmm0, -480(%rbp)
+ 4934      20FEFFFF 
+ 4935              	.LBB1398:
+ 4936              	.LBB1399:
+ 4937              	.LBB1400:
+ 4938              	.LBB1401:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 4939              		.loc 1 366 0
+ 4940 3cde F20F1085 		movsd	-480(%rbp), %xmm0
+ 4940      20FEFFFF 
+ 4941 3ce6 660F1685 		movhpd	-472(%rbp), %xmm0
+ 4941      28FEFFFF 
+ 4942 3cee F20F108D 		movsd	-464(%rbp), %xmm1
+ 4942      30FEFFFF 
+ 4943 3cf6 660F168D 		movhpd	-456(%rbp), %xmm1
+ 4943      38FEFFFF 
+ 4944 3cfe 660F28D1 		movapd	%xmm1, %xmm2
+ 4945 3d02 660F14D0 		unpcklpd	%xmm0, %xmm2
+ 4946 3d06 660F28C2 		movapd	%xmm2, %xmm0
+ 4947              	.LBE1401:
+ 4948              	.LBE1400:
+ 4949              	.LBE1399:
+ 4950              	.LBE1398:
+1876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateMerge1) (v1,v3);        /* k40   : k41   : k42    : k43          */
+ 4951              		.loc 3 1876 0
+ 4952 3d0a 660F7F85 		movdqa	%xmm0, -6304(%rbp)
+ 4952      60E7FFFF 
+1877:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[10] = v1; /* K40:K41:K42:K43 */
+ 4953              		.loc 3 1877 0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 178
+
+
+ 4954 3d12 488B8548 		movq	-5816(%rbp), %rax
+ 4954      E9FFFF
+ 4955 3d19 4805A000 		addq	$160, %rax
+ 4955      0000
+ 4956 3d1f 660F6F85 		movdqa	-6304(%rbp), %xmm0
+ 4956      60E7FFFF 
+ 4957 3d27 660F7F00 		movdqa	%xmm0, (%rax)
+ 4958 3d2b 660F6F95 		movdqa	-6272(%rbp), %xmm2
+ 4958      80E7FFFF 
+ 4959 3d33 F30F7F95 		movdqu	%xmm2, -432(%rbp)
+ 4959      50FEFFFF 
+ 4960 3d3b 660F6F85 		movdqa	-6256(%rbp), %xmm0
+ 4960      90E7FFFF 
+ 4961 3d43 F30F7F85 		movdqu	%xmm0, -448(%rbp)
+ 4961      40FEFFFF 
+ 4962 3d4b F30F6F85 		movdqu	-432(%rbp), %xmm0
+ 4962      50FEFFFF 
+ 4963 3d53 F30F7F85 		movdqu	%xmm0, -384(%rbp)
+ 4963      80FEFFFF 
+ 4964 3d5b F30F6F85 		movdqu	-448(%rbp), %xmm0
+ 4964      40FEFFFF 
+ 4965 3d63 F30F7F85 		movdqu	%xmm0, -400(%rbp)
+ 4965      70FEFFFF 
+ 4966              	.LBB1402:
+ 4967              	.LBB1403:
+ 4968              	.LBB1404:
+ 4969              	.LBB1405:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 4970              		.loc 1 366 0
+ 4971 3d6b F20F108D 		movsd	-400(%rbp), %xmm1
+ 4971      70FEFFFF 
+ 4972 3d73 660F168D 		movhpd	-392(%rbp), %xmm1
+ 4972      78FEFFFF 
+ 4973 3d7b F20F1085 		movsd	-384(%rbp), %xmm0
+ 4973      80FEFFFF 
+ 4974 3d83 660F1685 		movhpd	-376(%rbp), %xmm0
+ 4974      88FEFFFF 
+ 4975 3d8b 660FC6C1 		shufpd	$1, %xmm1, %xmm0
+ 4975      01
+ 4976              	.LBE1405:
+ 4977              	.LBE1404:
+ 4978              	.LBE1403:
+ 4979              	.LBE1402:
+1878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v2  = AESBCMEMBER(StateMerge2) (v3,v4);        /* k44   : k45   : k46    : k47          */
+ 4980              		.loc 3 1878 0
+ 4981 3d90 660F7F85 		movdqa	%xmm0, -6288(%rbp)
+ 4981      70E7FFFF 
+1879:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[11] = v2; /* K44:K45:K46:K47 */
+ 4982              		.loc 3 1879 0
+ 4983 3d98 488B8548 		movq	-5816(%rbp), %rax
+ 4983      E9FFFF
+ 4984 3d9f 4805B000 		addq	$176, %rax
+ 4984      0000
+ 4985 3da5 660F6F95 		movdqa	-6288(%rbp), %xmm2
+ 4985      70E7FFFF 
+ 4986 3dad 660F7F10 		movdqa	%xmm2, (%rax)
+ 4987 3db1 660F6F85 		movdqa	-6272(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 179
+
+
+ 4987      80E7FFFF 
+ 4988 3db9 F30F7F85 		movdqu	%xmm0, -368(%rbp)
+ 4988      90FEFFFF 
+ 4989              	.LBB1406:
+ 4990              	.LBB1407:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 4991              		.loc 3 1565 0
+ 4992 3dc1 F30F6F95 		movdqu	-368(%rbp), %xmm2
+ 4992      90FEFFFF 
+ 4993 3dc9 660F7F95 		movdqa	%xmm2, -5856(%rbp)
+ 4993      20E9FFFF 
+ 4994 3dd1 660F6F85 		movdqa	-5856(%rbp), %xmm0
+ 4994      20E9FFFF 
+ 4995 3dd9 F30F7F85 		movdqu	%xmm0, -352(%rbp)
+ 4995      A0FEFFFF 
+ 4996              	.LBB1408:
+ 4997              	.LBB1409:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4998              		.loc 3 1278 0
+ 4999 3de1 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 4999      00000000 
+ 5000 3de9 F30F6F8D 		movdqu	-352(%rbp), %xmm1
+ 5000      A0FEFFFF 
+ 5001 3df1 F30F7F8D 		movdqu	%xmm1, -320(%rbp)
+ 5001      C0FEFFFF 
+ 5002 3df9 F30F7F85 		movdqu	%xmm0, -336(%rbp)
+ 5002      B0FEFFFF 
+ 5003 3e01 F30F6F85 		movdqu	-320(%rbp), %xmm0
+ 5003      C0FEFFFF 
+ 5004 3e09 F30F7F85 		movdqu	%xmm0, -288(%rbp)
+ 5004      E0FEFFFF 
+ 5005 3e11 F30F6F85 		movdqu	-336(%rbp), %xmm0
+ 5005      B0FEFFFF 
+ 5006 3e19 F30F7F85 		movdqu	%xmm0, -304(%rbp)
+ 5006      D0FEFFFF 
+ 5007              	.LBB1410:
+ 5008              	.LBB1411:
+ 5009              	.LBB1412:
+ 5010              	.LBB1413:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5011              		.loc 1 529 0
+ 5012 3e21 F30F6F8D 		movdqu	-304(%rbp), %xmm1
+ 5012      D0FEFFFF 
+ 5013 3e29 F30F6F85 		movdqu	-288(%rbp), %xmm0
+ 5013      E0FEFFFF 
+ 5014 3e31 660F3800 		pshufb	%xmm1, %xmm0
+ 5014      C1
+ 5015              	.LBE1413:
+ 5016              	.LBE1412:
+ 5017              	.LBE1411:
+ 5018              	.LBE1410:
+ 5019              	.LBE1409:
+ 5020              	.LBE1408:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5021              		.loc 3 1567 0
+ 5022 3e36 660F7F85 		movdqa	%xmm0, -5856(%rbp)
+ 5022      20E9FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 180
+
+
+ 5023 3e3e 660F6F85 		movdqa	-5856(%rbp), %xmm0
+ 5023      20E9FFFF 
+ 5024 3e46 660FEF85 		pxor	-368(%rbp), %xmm0
+ 5024      90FEFFFF 
+ 5025 3e4e F30F7F85 		movdqu	%xmm0, -368(%rbp)
+ 5025      90FEFFFF 
+ 5026 3e56 660F6F95 		movdqa	-5856(%rbp), %xmm2
+ 5026      20E9FFFF 
+ 5027 3e5e F30F7F95 		movdqu	%xmm2, -272(%rbp)
+ 5027      F0FEFFFF 
+ 5028              	.LBB1414:
+ 5029              	.LBB1415:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5030              		.loc 3 1278 0
+ 5031 3e66 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 5031      00000000 
+ 5032 3e6e F30F6F8D 		movdqu	-272(%rbp), %xmm1
+ 5032      F0FEFFFF 
+ 5033 3e76 F30F7F8D 		movdqu	%xmm1, -240(%rbp)
+ 5033      10FFFFFF 
+ 5034 3e7e F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 5034      00FFFFFF 
+ 5035 3e86 F30F6F85 		movdqu	-240(%rbp), %xmm0
+ 5035      10FFFFFF 
+ 5036 3e8e F30F7F85 		movdqu	%xmm0, -208(%rbp)
+ 5036      30FFFFFF 
+ 5037 3e96 F30F6F85 		movdqu	-256(%rbp), %xmm0
+ 5037      00FFFFFF 
+ 5038 3e9e F30F7F85 		movdqu	%xmm0, -224(%rbp)
+ 5038      20FFFFFF 
+ 5039              	.LBB1416:
+ 5040              	.LBB1417:
+ 5041              	.LBB1418:
+ 5042              	.LBB1419:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5043              		.loc 1 529 0
+ 5044 3ea6 F30F6F8D 		movdqu	-224(%rbp), %xmm1
+ 5044      20FFFFFF 
+ 5045 3eae F30F6F85 		movdqu	-208(%rbp), %xmm0
+ 5045      30FFFFFF 
+ 5046 3eb6 660F3800 		pshufb	%xmm1, %xmm0
+ 5046      C1
+ 5047              	.LBE1419:
+ 5048              	.LBE1418:
+ 5049              	.LBE1417:
+ 5050              	.LBE1416:
+ 5051              	.LBE1415:
+ 5052              	.LBE1414:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5053              		.loc 3 1568 0
+ 5054 3ebb 660F7F85 		movdqa	%xmm0, -5856(%rbp)
+ 5054      20E9FFFF 
+ 5055 3ec3 660F6F85 		movdqa	-5856(%rbp), %xmm0
+ 5055      20E9FFFF 
+ 5056 3ecb 660FEF85 		pxor	-368(%rbp), %xmm0
+ 5056      90FEFFFF 
+ 5057 3ed3 F30F7F85 		movdqu	%xmm0, -368(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 181
+
+
+ 5057      90FEFFFF 
+ 5058 3edb 660F6F85 		movdqa	-5856(%rbp), %xmm0
+ 5058      20E9FFFF 
+ 5059 3ee3 F30F7F85 		movdqu	%xmm0, -192(%rbp)
+ 5059      40FFFFFF 
+ 5060              	.LBB1420:
+ 5061              	.LBB1421:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5062              		.loc 3 1278 0
+ 5063 3eeb 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 5063      00000000 
+ 5064 3ef3 F30F6F8D 		movdqu	-192(%rbp), %xmm1
+ 5064      40FFFFFF 
+ 5065 3efb F30F7F8D 		movdqu	%xmm1, -160(%rbp)
+ 5065      60FFFFFF 
+ 5066 3f03 F30F7F85 		movdqu	%xmm0, -176(%rbp)
+ 5066      50FFFFFF 
+ 5067 3f0b F30F6F85 		movdqu	-160(%rbp), %xmm0
+ 5067      60FFFFFF 
+ 5068 3f13 F30F7F45 		movdqu	%xmm0, -128(%rbp)
+ 5068      80
+ 5069 3f18 F30F6F85 		movdqu	-176(%rbp), %xmm0
+ 5069      50FFFFFF 
+ 5070 3f20 F30F7F85 		movdqu	%xmm0, -144(%rbp)
+ 5070      70FFFFFF 
+ 5071              	.LBB1422:
+ 5072              	.LBB1423:
+ 5073              	.LBB1424:
+ 5074              	.LBB1425:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5075              		.loc 1 529 0
+ 5076 3f28 F30F6F8D 		movdqu	-144(%rbp), %xmm1
+ 5076      70FFFFFF 
+ 5077 3f30 F30F6F45 		movdqu	-128(%rbp), %xmm0
+ 5077      80
+ 5078 3f35 660F3800 		pshufb	%xmm1, %xmm0
+ 5078      C1
+ 5079              	.LBE1425:
+ 5080              	.LBE1424:
+ 5081              	.LBE1423:
+ 5082              	.LBE1422:
+ 5083              	.LBE1421:
+ 5084              	.LBE1420:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5085              		.loc 3 1569 0
+ 5086 3f3a 660F7F85 		movdqa	%xmm0, -5856(%rbp)
+ 5086      20E9FFFF 
+ 5087 3f42 660F6F85 		movdqa	-5856(%rbp), %xmm0
+ 5087      20E9FFFF 
+ 5088 3f4a 660FEF85 		pxor	-368(%rbp), %xmm0
+ 5088      90FEFFFF 
+ 5089 3f52 F30F7F85 		movdqu	%xmm0, -368(%rbp)
+ 5089      90FEFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 5090              		.loc 3 1571 0
+ 5091 3f5a F30F6F85 		movdqu	-368(%rbp), %xmm0
+ 5091      90FEFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 182
+
+
+ 5092              	.LBE1407:
+ 5093              	.LBE1406:
+1880:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1881:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 3 */
+1882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(ShiftXorColumns) (v3);       /* k42   :k42^k43:k42^k43^k44:k42^k43^k44^k45  *
+ 5094              		.loc 3 1882 0
+ 5095 3f62 660F7F85 		movdqa	%xmm0, -6320(%rbp)
+ 5095      50E7FFFF 
+ 5096 3f6a 660F6F95 		movdqa	-6288(%rbp), %xmm2
+ 5096      70E7FFFF 
+ 5097 3f72 F30F7F55 		movdqu	%xmm2, -96(%rbp)
+ 5097      A0
+ 5098              	.LBB1426:
+ 5099              	.LBB1427:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 5100              		.loc 3 1673 0
+ 5101 3f77 F30F6F45 		movdqu	-96(%rbp), %xmm0
+ 5101      A0
+ 5102 3f7c 660F7F85 		movdqa	%xmm0, -5840(%rbp)
+ 5102      30E9FFFF 
+ 5103 3f84 660F6F95 		movdqa	-5840(%rbp), %xmm2
+ 5103      30E9FFFF 
+ 5104 3f8c F30F7F55 		movdqu	%xmm2, -64(%rbp)
+ 5104      C0
+ 5105              	.LBB1428:
+ 5106              	.LBB1429:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 5107              		.loc 1 852 0
+ 5108 3f91 F30F6F45 		movdqu	-64(%rbp), %xmm0
+ 5108      C0
+ 5109 3f96 660F3ADF 		aeskeygenassist	$128, %xmm0, %xmm0
+ 5109      C080
+ 5110              	.LBE1429:
+ 5111              	.LBE1428:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 5112              		.loc 3 1674 0
+ 5113 3f9c 660F7F85 		movdqa	%xmm0, -5840(%rbp)
+ 5113      30E9FFFF 
+ 5114 3fa4 660F6F85 		movdqa	-5840(%rbp), %xmm0
+ 5114      30E9FFFF 
+ 5115 3fac F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 5115      D0
+ 5116 3fb1 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 5116      D0
+ 5117 3fb6 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 5117      F0
+ 5118              	.LBB1430:
+ 5119              	.LBB1431:
+ 5120              	.LBB1432:
+ 5121              	.LBB1433:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 5122              		.loc 1 450 0
+ 5123 3fbb F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 5123      F0
+ 5124 3fc0 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 5124      FF
+ 5125              	.LBE1433:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 183
+
+
+ 5126              	.LBE1432:
+ 5127              	.LBE1431:
+ 5128              	.LBE1430:
+ 5129              	.LBE1427:
+ 5130              	.LBE1426:
+1883:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 5131              		.loc 3 1883 0
+ 5132 3fc5 660F7F85 		movdqa	%xmm0, -6240(%rbp)
+ 5132      A0E7FFFF 
+1884:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                        (v2,0x80);  /* F(k47): F(k47): F(k47) : F(k47)       */
+1885:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0 ^= k;                                       /* k48   : k49   : k50    : k51          */
+ 5133              		.loc 3 1885 0
+ 5134 3fcd 660F6F95 		movdqa	-6320(%rbp), %xmm2
+ 5134      50E7FFFF 
+ 5135 3fd5 660FEF95 		pxor	-6240(%rbp), %xmm2
+ 5135      A0E7FFFF 
+ 5136 3fdd 660F7F95 		movdqa	%xmm2, -6320(%rbp)
+ 5136      50E7FFFF 
+1886:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[12] = v0;                           /* K48:K49:K50:K51 */
+ 5137              		.loc 3 1886 0
+ 5138 3fe5 488B8548 		movq	-5816(%rbp), %rax
+ 5138      E9FFFF
+ 5139 3fec 4805C000 		addq	$192, %rax
+ 5139      0000
+ 5140 3ff2 660F6F85 		movdqa	-6320(%rbp), %xmm0
+ 5140      50E7FFFF 
+ 5141 3ffa 660F7F00 		movdqa	%xmm0, (%rax)
+1887:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 5142              		.loc 3 1887 0
+ 5143 3ffe C9       		leave
+ 5144 3fff C3       		ret
+ 5145              		.cfi_endproc
+ 5146              	.LFE657:
+ 5147              		.size	KAESBlockCipherVecAesNiKeyExpansion192, .-KAESBlockCipherVecAesNiKeyExpansion192
+ 5148              		.type	KAESBlockCipherVecAesNiKeyExpansion256, @function
+ 5149              	KAESBlockCipherVecAesNiKeyExpansion256:
+ 5150              	.LFB658:
+1888:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1889:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1890:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion192) (CipherVec * w, const AESByte * key)
+1891:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1892:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_192, AES_Nk_192);
+1893:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1894:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1895:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1896:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1897:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1898:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1899:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----- */
+1900:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1901:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC || 1
+1902:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1903:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion256) (CipherVec * round_keys, const AESByte * key)
+1904:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 5151              		.loc 3 1904 0
+ 5152              		.cfi_startproc
+ 5153 4000 55       		pushq	%rbp
+
GAS LISTING /tmp/ccPaCTqg.s 			page 184
+
+
+ 5154              	.LCFI16:
+ 5155              		.cfi_def_cfa_offset 16
+ 5156 4001 4889E5   		movq	%rsp, %rbp
+ 5157              		.cfi_offset 6, -16
+ 5158              	.LCFI17:
+ 5159              		.cfi_def_cfa_register 6
+ 5160 4004 4881EC88 		subq	$5512, %rsp
+ 5160      150000
+ 5161 400b 4889BDC8 		movq	%rdi, -5176(%rbp)
+ 5161      EBFFFF
+ 5162 4012 4889B5C0 		movq	%rsi, -5184(%rbp)
+ 5162      EBFFFF
+ 5163              		.loc 3 1904 0
+ 5164 4019 488B85C0 		movq	-5184(%rbp), %rax
+ 5164      EBFFFF
+ 5165 4020 48898508 		movq	%rax, -5112(%rbp)
+ 5165      ECFFFF
+ 5166              	.LBB1828:
+ 5167              	.LBB1829:
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __asm__ (
+ 5168              		.loc 3 126 0
+ 5169 4027 488B8508 		movq	-5112(%rbp), %rax
+ 5169      ECFFFF
+ 5170 402e 4889C7   		movq	%rax, %rdi
+ 5171              	#APP
+ 5172              	# 126 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 5173              		movdqu (%rdi),%xmm0
+ 5174              	# 0 "" 2
+ 5175              	#NO_APP
+ 5176 4035 660F7F85 		movdqa	%xmm0, -5632(%rbp)
+ 5176      00EAFFFF 
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vec;
+ 5177              		.loc 3 129 0
+ 5178 403d 660F6F85 		movdqa	-5632(%rbp), %xmm0
+ 5178      00EAFFFF 
+ 5179              	.LBE1829:
+ 5180              	.LBE1828:
+1905:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec v0, v1;
+1906:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec k;
+1907:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1908:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0 = AESBCMEMBER (StateIn) (key);
+ 5181              		.loc 3 1908 0
+ 5182 4045 F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 5182      D0EBFFFF 
+1909:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1 = AESBCMEMBER (StateIn) (key + sizeof v0);
+ 5183              		.loc 3 1909 0
+ 5184 404d 488B85C0 		movq	-5184(%rbp), %rax
+ 5184      EBFFFF
+ 5185 4054 4883C010 		addq	$16, %rax
+ 5186 4058 48898510 		movq	%rax, -5104(%rbp)
+ 5186      ECFFFF
+ 5187              	.LBB1830:
+ 5188              	.LBB1831:
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __asm__ (
+ 5189              		.loc 3 126 0
+ 5190 405f 488B8510 		movq	-5104(%rbp), %rax
+ 5190      ECFFFF
+
GAS LISTING /tmp/ccPaCTqg.s 			page 185
+
+
+ 5191 4066 4889C7   		movq	%rax, %rdi
+ 5192              	#APP
+ 5193              	# 126 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 5194              		movdqu (%rdi),%xmm0
+ 5195              	# 0 "" 2
+ 5196              	#NO_APP
+ 5197 406d 660F7F85 		movdqa	%xmm0, -5616(%rbp)
+ 5197      10EAFFFF 
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vec;
+ 5198              		.loc 3 129 0
+ 5199 4075 660F6F85 		movdqa	-5616(%rbp), %xmm0
+ 5199      10EAFFFF 
+ 5200              	.LBE1831:
+ 5201              	.LBE1830:
+ 5202              		.loc 3 1909 0
+ 5203 407d F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 5203      E0EBFFFF 
+1910:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1911:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[0] = v0; /* k0  : k1  : k2  : k3  */
+ 5204              		.loc 3 1911 0
+ 5205 4085 488B85C8 		movq	-5176(%rbp), %rax
+ 5205      EBFFFF
+ 5206 408c F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 5206      D0EBFFFF 
+ 5207 4094 F30F7F00 		movdqu	%xmm0, (%rax)
+1912:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[1] = v1; /* k4  : k5  : k6  : k7  */
+ 5208              		.loc 3 1912 0
+ 5209 4098 488B85C8 		movq	-5176(%rbp), %rax
+ 5209      EBFFFF
+ 5210 409f 4883C010 		addq	$16, %rax
+ 5211 40a3 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 5211      E0EBFFFF 
+ 5212 40ab F30F7F00 		movdqu	%xmm0, (%rax)
+ 5213 40af F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 5213      E0EBFFFF 
+ 5214 40b7 F30F7F85 		movdqu	%xmm0, -5088(%rbp)
+ 5214      20ECFFFF 
+ 5215              	.LBB1832:
+ 5216              	.LBB1833:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 5217              		.loc 3 1673 0
+ 5218 40bf F30F6F85 		movdqu	-5088(%rbp), %xmm0
+ 5218      20ECFFFF 
+ 5219 40c7 660F7F85 		movdqa	%xmm0, -5600(%rbp)
+ 5219      20EAFFFF 
+ 5220 40cf 660F6F85 		movdqa	-5600(%rbp), %xmm0
+ 5220      20EAFFFF 
+ 5221 40d7 F30F7F85 		movdqu	%xmm0, -5056(%rbp)
+ 5221      40ECFFFF 
+ 5222              	.LBB1834:
+ 5223              	.LBB1835:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 5224              		.loc 1 852 0
+ 5225 40df F30F6F85 		movdqu	-5056(%rbp), %xmm0
+ 5225      40ECFFFF 
+ 5226 40e7 660F3ADF 		aeskeygenassist	$1, %xmm0, %xmm0
+ 5226      C001
+
GAS LISTING /tmp/ccPaCTqg.s 			page 186
+
+
+ 5227              	.LBE1835:
+ 5228              	.LBE1834:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 5229              		.loc 3 1674 0
+ 5230 40ed 660F7F85 		movdqa	%xmm0, -5600(%rbp)
+ 5230      20EAFFFF 
+ 5231 40f5 660F6F85 		movdqa	-5600(%rbp), %xmm0
+ 5231      20EAFFFF 
+ 5232 40fd F30F7F85 		movdqu	%xmm0, -5040(%rbp)
+ 5232      50ECFFFF 
+ 5233 4105 F30F6F85 		movdqu	-5040(%rbp), %xmm0
+ 5233      50ECFFFF 
+ 5234 410d F30F7F85 		movdqu	%xmm0, -5008(%rbp)
+ 5234      70ECFFFF 
+ 5235              	.LBB1836:
+ 5236              	.LBB1837:
+ 5237              	.LBB1838:
+ 5238              	.LBB1839:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 5239              		.loc 1 450 0
+ 5240 4115 F30F6F85 		movdqu	-5008(%rbp), %xmm0
+ 5240      70ECFFFF 
+ 5241 411d 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 5241      FF
+ 5242              	.LBE1839:
+ 5243              	.LBE1838:
+ 5244              	.LBE1837:
+ 5245              	.LBE1836:
+ 5246              	.LBE1833:
+ 5247              	.LBE1832:
+1913:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1914:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #define KE256_1(offset,rcon)                            \
+1915:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)(v1,rcon); \
+1916:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(ShiftXorColumns) (v0);            \
+1917:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(VecXor) (v0, k);                  \
+1918:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[offset] = v0
+1919:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1920:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #define KE256_2(offset) \
+1921:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn2)(v0);      \
+1922:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(ShiftXorColumns) (v1);            \
+1923:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(VecXor) (v1, k);                  \
+1924:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[offset] = v1
+1925:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1926:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(2,0x01);    /* k8  : k9  : k10 : k11 */
+ 5248              		.loc 3 1926 0
+ 5249 4122 F30F7F85 		movdqu	%xmm0, -5136(%rbp)
+ 5249      F0EBFFFF 
+ 5250 412a F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 5250      D0EBFFFF 
+ 5251 4132 F30F7F85 		movdqu	%xmm0, -4992(%rbp)
+ 5251      80ECFFFF 
+ 5252              	.LBB1840:
+ 5253              	.LBB1841:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 5254              		.loc 3 1565 0
+ 5255 413a F30F6F85 		movdqu	-4992(%rbp), %xmm0
+ 5255      80ECFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 187
+
+
+ 5256 4142 660F7F85 		movdqa	%xmm0, -5584(%rbp)
+ 5256      30EAFFFF 
+ 5257 414a 660F6F85 		movdqa	-5584(%rbp), %xmm0
+ 5257      30EAFFFF 
+ 5258 4152 F30F7F85 		movdqu	%xmm0, -4976(%rbp)
+ 5258      90ECFFFF 
+ 5259              	.LBB1842:
+ 5260              	.LBB1843:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5261              		.loc 3 1278 0
+ 5262 415a 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 5262      00000000 
+ 5263 4162 F30F6F8D 		movdqu	-4976(%rbp), %xmm1
+ 5263      90ECFFFF 
+ 5264 416a F30F7F8D 		movdqu	%xmm1, -4944(%rbp)
+ 5264      B0ECFFFF 
+ 5265 4172 F30F7F85 		movdqu	%xmm0, -4960(%rbp)
+ 5265      A0ECFFFF 
+ 5266 417a F30F6F85 		movdqu	-4944(%rbp), %xmm0
+ 5266      B0ECFFFF 
+ 5267 4182 F30F7F85 		movdqu	%xmm0, -4912(%rbp)
+ 5267      D0ECFFFF 
+ 5268 418a F30F6F85 		movdqu	-4960(%rbp), %xmm0
+ 5268      A0ECFFFF 
+ 5269 4192 F30F7F85 		movdqu	%xmm0, -4928(%rbp)
+ 5269      C0ECFFFF 
+ 5270              	.LBB1844:
+ 5271              	.LBB1845:
+ 5272              	.LBB1846:
+ 5273              	.LBB1847:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5274              		.loc 1 529 0
+ 5275 419a F30F6F8D 		movdqu	-4928(%rbp), %xmm1
+ 5275      C0ECFFFF 
+ 5276 41a2 F30F6F85 		movdqu	-4912(%rbp), %xmm0
+ 5276      D0ECFFFF 
+ 5277 41aa 660F3800 		pshufb	%xmm1, %xmm0
+ 5277      C1
+ 5278              	.LBE1847:
+ 5279              	.LBE1846:
+ 5280              	.LBE1845:
+ 5281              	.LBE1844:
+ 5282              	.LBE1843:
+ 5283              	.LBE1842:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5284              		.loc 3 1567 0
+ 5285 41af 660F7F85 		movdqa	%xmm0, -5584(%rbp)
+ 5285      30EAFFFF 
+ 5286 41b7 660F6F85 		movdqa	-5584(%rbp), %xmm0
+ 5286      30EAFFFF 
+ 5287 41bf 660FEF85 		pxor	-4992(%rbp), %xmm0
+ 5287      80ECFFFF 
+ 5288 41c7 F30F7F85 		movdqu	%xmm0, -4992(%rbp)
+ 5288      80ECFFFF 
+ 5289 41cf 660F6F85 		movdqa	-5584(%rbp), %xmm0
+ 5289      30EAFFFF 
+ 5290 41d7 F30F7F85 		movdqu	%xmm0, -4896(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 188
+
+
+ 5290      E0ECFFFF 
+ 5291              	.LBB1848:
+ 5292              	.LBB1849:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5293              		.loc 3 1278 0
+ 5294 41df 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 5294      00000000 
+ 5295 41e7 F30F6F8D 		movdqu	-4896(%rbp), %xmm1
+ 5295      E0ECFFFF 
+ 5296 41ef F30F7F8D 		movdqu	%xmm1, -4864(%rbp)
+ 5296      00EDFFFF 
+ 5297 41f7 F30F7F85 		movdqu	%xmm0, -4880(%rbp)
+ 5297      F0ECFFFF 
+ 5298 41ff F30F6F85 		movdqu	-4864(%rbp), %xmm0
+ 5298      00EDFFFF 
+ 5299 4207 F30F7F85 		movdqu	%xmm0, -4832(%rbp)
+ 5299      20EDFFFF 
+ 5300 420f F30F6F85 		movdqu	-4880(%rbp), %xmm0
+ 5300      F0ECFFFF 
+ 5301 4217 F30F7F85 		movdqu	%xmm0, -4848(%rbp)
+ 5301      10EDFFFF 
+ 5302              	.LBB1850:
+ 5303              	.LBB1851:
+ 5304              	.LBB1852:
+ 5305              	.LBB1853:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5306              		.loc 1 529 0
+ 5307 421f F30F6F8D 		movdqu	-4848(%rbp), %xmm1
+ 5307      10EDFFFF 
+ 5308 4227 F30F6F85 		movdqu	-4832(%rbp), %xmm0
+ 5308      20EDFFFF 
+ 5309 422f 660F3800 		pshufb	%xmm1, %xmm0
+ 5309      C1
+ 5310              	.LBE1853:
+ 5311              	.LBE1852:
+ 5312              	.LBE1851:
+ 5313              	.LBE1850:
+ 5314              	.LBE1849:
+ 5315              	.LBE1848:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5316              		.loc 3 1568 0
+ 5317 4234 660F7F85 		movdqa	%xmm0, -5584(%rbp)
+ 5317      30EAFFFF 
+ 5318 423c 660F6F85 		movdqa	-5584(%rbp), %xmm0
+ 5318      30EAFFFF 
+ 5319 4244 660FEF85 		pxor	-4992(%rbp), %xmm0
+ 5319      80ECFFFF 
+ 5320 424c F30F7F85 		movdqu	%xmm0, -4992(%rbp)
+ 5320      80ECFFFF 
+ 5321 4254 660F6F85 		movdqa	-5584(%rbp), %xmm0
+ 5321      30EAFFFF 
+ 5322 425c F30F7F85 		movdqu	%xmm0, -4816(%rbp)
+ 5322      30EDFFFF 
+ 5323              	.LBB1854:
+ 5324              	.LBB1855:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5325              		.loc 3 1278 0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 189
+
+
+ 5326 4264 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 5326      00000000 
+ 5327 426c F30F6F8D 		movdqu	-4816(%rbp), %xmm1
+ 5327      30EDFFFF 
+ 5328 4274 F30F7F8D 		movdqu	%xmm1, -4784(%rbp)
+ 5328      50EDFFFF 
+ 5329 427c F30F7F85 		movdqu	%xmm0, -4800(%rbp)
+ 5329      40EDFFFF 
+ 5330 4284 F30F6F85 		movdqu	-4784(%rbp), %xmm0
+ 5330      50EDFFFF 
+ 5331 428c F30F7F85 		movdqu	%xmm0, -4752(%rbp)
+ 5331      70EDFFFF 
+ 5332 4294 F30F6F85 		movdqu	-4800(%rbp), %xmm0
+ 5332      40EDFFFF 
+ 5333 429c F30F7F85 		movdqu	%xmm0, -4768(%rbp)
+ 5333      60EDFFFF 
+ 5334              	.LBB1856:
+ 5335              	.LBB1857:
+ 5336              	.LBB1858:
+ 5337              	.LBB1859:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5338              		.loc 1 529 0
+ 5339 42a4 F30F6F8D 		movdqu	-4768(%rbp), %xmm1
+ 5339      60EDFFFF 
+ 5340 42ac F30F6F85 		movdqu	-4752(%rbp), %xmm0
+ 5340      70EDFFFF 
+ 5341 42b4 660F3800 		pshufb	%xmm1, %xmm0
+ 5341      C1
+ 5342              	.LBE1859:
+ 5343              	.LBE1858:
+ 5344              	.LBE1857:
+ 5345              	.LBE1856:
+ 5346              	.LBE1855:
+ 5347              	.LBE1854:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5348              		.loc 3 1569 0
+ 5349 42b9 660F7F85 		movdqa	%xmm0, -5584(%rbp)
+ 5349      30EAFFFF 
+ 5350 42c1 660F6F85 		movdqa	-5584(%rbp), %xmm0
+ 5350      30EAFFFF 
+ 5351 42c9 660FEF85 		pxor	-4992(%rbp), %xmm0
+ 5351      80ECFFFF 
+ 5352 42d1 F30F7F85 		movdqu	%xmm0, -4992(%rbp)
+ 5352      80ECFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 5353              		.loc 3 1571 0
+ 5354 42d9 F30F6F85 		movdqu	-4992(%rbp), %xmm0
+ 5354      80ECFFFF 
+ 5355              	.LBE1841:
+ 5356              	.LBE1840:
+ 5357              		.loc 3 1926 0
+ 5358 42e1 F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 5358      D0EBFFFF 
+ 5359 42e9 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 5359      D0EBFFFF 
+ 5360 42f1 F30F7F85 		movdqu	%xmm0, -4720(%rbp)
+ 5360      90EDFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 190
+
+
+ 5361 42f9 F30F6F85 		movdqu	-5136(%rbp), %xmm0
+ 5361      F0EBFFFF 
+ 5362 4301 F30F7F85 		movdqu	%xmm0, -4736(%rbp)
+ 5362      80EDFFFF 
+ 5363              	.LBB1860:
+ 5364              	.LBB1861:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 5365              		.loc 3 178 0
+ 5366 4309 F30F6F85 		movdqu	-4736(%rbp), %xmm0
+ 5366      80EDFFFF 
+ 5367 4311 F30F6F8D 		movdqu	-4720(%rbp), %xmm1
+ 5367      90EDFFFF 
+ 5368 4319 660FEFC1 		pxor	%xmm1, %xmm0
+ 5369              	.LBE1861:
+ 5370              	.LBE1860:
+ 5371              		.loc 3 1926 0
+ 5372 431d F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 5372      D0EBFFFF 
+ 5373 4325 488B85C8 		movq	-5176(%rbp), %rax
+ 5373      EBFFFF
+ 5374 432c 4883C020 		addq	$32, %rax
+ 5375 4330 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 5375      D0EBFFFF 
+ 5376 4338 F30F7F00 		movdqu	%xmm0, (%rax)
+ 5377 433c F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 5377      D0EBFFFF 
+ 5378 4344 F30F7F85 		movdqu	%xmm0, -4704(%rbp)
+ 5378      A0EDFFFF 
+ 5379              	.LBB1862:
+ 5380              	.LBB1863:
+1649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 5381              		.loc 3 1649 0
+ 5382 434c F30F6F85 		movdqu	-4704(%rbp), %xmm0
+ 5382      A0EDFFFF 
+ 5383 4354 660F7F85 		movdqa	%xmm0, -5568(%rbp)
+ 5383      40EAFFFF 
+ 5384 435c 660F6F85 		movdqa	-5568(%rbp), %xmm0
+ 5384      40EAFFFF 
+ 5385 4364 F30F7F85 		movdqu	%xmm0, -4672(%rbp)
+ 5385      C0EDFFFF 
+ 5386              	.LBB1864:
+ 5387              	.LBB1865:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 5388              		.loc 1 852 0
+ 5389 436c F30F6F85 		movdqu	-4672(%rbp), %xmm0
+ 5389      C0EDFFFF 
+ 5390 4374 660F3ADF 		aeskeygenassist	$0, %xmm0, %xmm0
+ 5390      C000
+ 5391              	.LBE1865:
+ 5392              	.LBE1864:
+1650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, 0);
+ 5393              		.loc 3 1650 0
+ 5394 437a 660F7F85 		movdqa	%xmm0, -5568(%rbp)
+ 5394      40EAFFFF 
+ 5395 4382 660F6F85 		movdqa	-5568(%rbp), %xmm0
+ 5395      40EAFFFF 
+ 5396 438a F30F7F85 		movdqu	%xmm0, -4656(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 191
+
+
+ 5396      D0EDFFFF 
+ 5397 4392 F30F6F85 		movdqu	-4656(%rbp), %xmm0
+ 5397      D0EDFFFF 
+ 5398 439a F30F7F85 		movdqu	%xmm0, -4624(%rbp)
+ 5398      F0EDFFFF 
+ 5399              	.LBB1866:
+ 5400              	.LBB1867:
+ 5401              	.LBB1868:
+ 5402              	.LBB1869:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 5403              		.loc 1 450 0
+ 5404 43a2 F30F6F85 		movdqu	-4624(%rbp), %xmm0
+ 5404      F0EDFFFF 
+ 5405 43aa 660F70C0 		pshufd	$170, %xmm0, %xmm0
+ 5405      AA
+ 5406              	.LBE1869:
+ 5407              	.LBE1868:
+ 5408              	.LBE1867:
+ 5409              	.LBE1866:
+ 5410              	.LBE1863:
+ 5411              	.LBE1862:
+1927:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(3);         /* k12 : k13 : k14 : k15 */
+ 5412              		.loc 3 1927 0
+ 5413 43af F30F7F85 		movdqu	%xmm0, -5136(%rbp)
+ 5413      F0EBFFFF 
+ 5414 43b7 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 5414      E0EBFFFF 
+ 5415 43bf F30F7F85 		movdqu	%xmm0, -4608(%rbp)
+ 5415      00EEFFFF 
+ 5416              	.LBB1870:
+ 5417              	.LBB1871:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 5418              		.loc 3 1565 0
+ 5419 43c7 F30F6F85 		movdqu	-4608(%rbp), %xmm0
+ 5419      00EEFFFF 
+ 5420 43cf 660F7F85 		movdqa	%xmm0, -5552(%rbp)
+ 5420      50EAFFFF 
+ 5421 43d7 660F6F85 		movdqa	-5552(%rbp), %xmm0
+ 5421      50EAFFFF 
+ 5422 43df F30F7F85 		movdqu	%xmm0, -4592(%rbp)
+ 5422      10EEFFFF 
+ 5423              	.LBB1872:
+ 5424              	.LBB1873:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5425              		.loc 3 1278 0
+ 5426 43e7 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 5426      00000000 
+ 5427 43ef F30F6F8D 		movdqu	-4592(%rbp), %xmm1
+ 5427      10EEFFFF 
+ 5428 43f7 F30F7F8D 		movdqu	%xmm1, -4560(%rbp)
+ 5428      30EEFFFF 
+ 5429 43ff F30F7F85 		movdqu	%xmm0, -4576(%rbp)
+ 5429      20EEFFFF 
+ 5430 4407 F30F6F85 		movdqu	-4560(%rbp), %xmm0
+ 5430      30EEFFFF 
+ 5431 440f F30F7F85 		movdqu	%xmm0, -4528(%rbp)
+ 5431      50EEFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 192
+
+
+ 5432 4417 F30F6F85 		movdqu	-4576(%rbp), %xmm0
+ 5432      20EEFFFF 
+ 5433 441f F30F7F85 		movdqu	%xmm0, -4544(%rbp)
+ 5433      40EEFFFF 
+ 5434              	.LBB1874:
+ 5435              	.LBB1875:
+ 5436              	.LBB1876:
+ 5437              	.LBB1877:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5438              		.loc 1 529 0
+ 5439 4427 F30F6F8D 		movdqu	-4544(%rbp), %xmm1
+ 5439      40EEFFFF 
+ 5440 442f F30F6F85 		movdqu	-4528(%rbp), %xmm0
+ 5440      50EEFFFF 
+ 5441 4437 660F3800 		pshufb	%xmm1, %xmm0
+ 5441      C1
+ 5442              	.LBE1877:
+ 5443              	.LBE1876:
+ 5444              	.LBE1875:
+ 5445              	.LBE1874:
+ 5446              	.LBE1873:
+ 5447              	.LBE1872:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5448              		.loc 3 1567 0
+ 5449 443c 660F7F85 		movdqa	%xmm0, -5552(%rbp)
+ 5449      50EAFFFF 
+ 5450 4444 660F6F85 		movdqa	-5552(%rbp), %xmm0
+ 5450      50EAFFFF 
+ 5451 444c 660FEF85 		pxor	-4608(%rbp), %xmm0
+ 5451      00EEFFFF 
+ 5452 4454 F30F7F85 		movdqu	%xmm0, -4608(%rbp)
+ 5452      00EEFFFF 
+ 5453 445c 660F6F85 		movdqa	-5552(%rbp), %xmm0
+ 5453      50EAFFFF 
+ 5454 4464 F30F7F85 		movdqu	%xmm0, -4512(%rbp)
+ 5454      60EEFFFF 
+ 5455              	.LBB1878:
+ 5456              	.LBB1879:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5457              		.loc 3 1278 0
+ 5458 446c 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 5458      00000000 
+ 5459 4474 F30F6F8D 		movdqu	-4512(%rbp), %xmm1
+ 5459      60EEFFFF 
+ 5460 447c F30F7F8D 		movdqu	%xmm1, -4480(%rbp)
+ 5460      80EEFFFF 
+ 5461 4484 F30F7F85 		movdqu	%xmm0, -4496(%rbp)
+ 5461      70EEFFFF 
+ 5462 448c F30F6F85 		movdqu	-4480(%rbp), %xmm0
+ 5462      80EEFFFF 
+ 5463 4494 F30F7F85 		movdqu	%xmm0, -4448(%rbp)
+ 5463      A0EEFFFF 
+ 5464 449c F30F6F85 		movdqu	-4496(%rbp), %xmm0
+ 5464      70EEFFFF 
+ 5465 44a4 F30F7F85 		movdqu	%xmm0, -4464(%rbp)
+ 5465      90EEFFFF 
+ 5466              	.LBB1880:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 193
+
+
+ 5467              	.LBB1881:
+ 5468              	.LBB1882:
+ 5469              	.LBB1883:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5470              		.loc 1 529 0
+ 5471 44ac F30F6F8D 		movdqu	-4464(%rbp), %xmm1
+ 5471      90EEFFFF 
+ 5472 44b4 F30F6F85 		movdqu	-4448(%rbp), %xmm0
+ 5472      A0EEFFFF 
+ 5473 44bc 660F3800 		pshufb	%xmm1, %xmm0
+ 5473      C1
+ 5474              	.LBE1883:
+ 5475              	.LBE1882:
+ 5476              	.LBE1881:
+ 5477              	.LBE1880:
+ 5478              	.LBE1879:
+ 5479              	.LBE1878:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5480              		.loc 3 1568 0
+ 5481 44c1 660F7F85 		movdqa	%xmm0, -5552(%rbp)
+ 5481      50EAFFFF 
+ 5482 44c9 660F6F85 		movdqa	-5552(%rbp), %xmm0
+ 5482      50EAFFFF 
+ 5483 44d1 660FEF85 		pxor	-4608(%rbp), %xmm0
+ 5483      00EEFFFF 
+ 5484 44d9 F30F7F85 		movdqu	%xmm0, -4608(%rbp)
+ 5484      00EEFFFF 
+ 5485 44e1 660F6F85 		movdqa	-5552(%rbp), %xmm0
+ 5485      50EAFFFF 
+ 5486 44e9 F30F7F85 		movdqu	%xmm0, -4432(%rbp)
+ 5486      B0EEFFFF 
+ 5487              	.LBB1884:
+ 5488              	.LBB1885:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5489              		.loc 3 1278 0
+ 5490 44f1 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 5490      00000000 
+ 5491 44f9 F30F6F8D 		movdqu	-4432(%rbp), %xmm1
+ 5491      B0EEFFFF 
+ 5492 4501 F30F7F8D 		movdqu	%xmm1, -4400(%rbp)
+ 5492      D0EEFFFF 
+ 5493 4509 F30F7F85 		movdqu	%xmm0, -4416(%rbp)
+ 5493      C0EEFFFF 
+ 5494 4511 F30F6F85 		movdqu	-4400(%rbp), %xmm0
+ 5494      D0EEFFFF 
+ 5495 4519 F30F7F85 		movdqu	%xmm0, -4368(%rbp)
+ 5495      F0EEFFFF 
+ 5496 4521 F30F6F85 		movdqu	-4416(%rbp), %xmm0
+ 5496      C0EEFFFF 
+ 5497 4529 F30F7F85 		movdqu	%xmm0, -4384(%rbp)
+ 5497      E0EEFFFF 
+ 5498              	.LBB1886:
+ 5499              	.LBB1887:
+ 5500              	.LBB1888:
+ 5501              	.LBB1889:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5502              		.loc 1 529 0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 194
+
+
+ 5503 4531 F30F6F8D 		movdqu	-4384(%rbp), %xmm1
+ 5503      E0EEFFFF 
+ 5504 4539 F30F6F85 		movdqu	-4368(%rbp), %xmm0
+ 5504      F0EEFFFF 
+ 5505 4541 660F3800 		pshufb	%xmm1, %xmm0
+ 5505      C1
+ 5506              	.LBE1889:
+ 5507              	.LBE1888:
+ 5508              	.LBE1887:
+ 5509              	.LBE1886:
+ 5510              	.LBE1885:
+ 5511              	.LBE1884:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5512              		.loc 3 1569 0
+ 5513 4546 660F7F85 		movdqa	%xmm0, -5552(%rbp)
+ 5513      50EAFFFF 
+ 5514 454e 660F6F85 		movdqa	-5552(%rbp), %xmm0
+ 5514      50EAFFFF 
+ 5515 4556 660FEF85 		pxor	-4608(%rbp), %xmm0
+ 5515      00EEFFFF 
+ 5516 455e F30F7F85 		movdqu	%xmm0, -4608(%rbp)
+ 5516      00EEFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 5517              		.loc 3 1571 0
+ 5518 4566 F30F6F85 		movdqu	-4608(%rbp), %xmm0
+ 5518      00EEFFFF 
+ 5519              	.LBE1871:
+ 5520              	.LBE1870:
+ 5521              		.loc 3 1927 0
+ 5522 456e F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 5522      E0EBFFFF 
+ 5523 4576 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 5523      E0EBFFFF 
+ 5524 457e F30F7F85 		movdqu	%xmm0, -4336(%rbp)
+ 5524      10EFFFFF 
+ 5525 4586 F30F6F85 		movdqu	-5136(%rbp), %xmm0
+ 5525      F0EBFFFF 
+ 5526 458e F30F7F85 		movdqu	%xmm0, -4352(%rbp)
+ 5526      00EFFFFF 
+ 5527              	.LBB1890:
+ 5528              	.LBB1891:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 5529              		.loc 3 178 0
+ 5530 4596 F30F6F85 		movdqu	-4352(%rbp), %xmm0
+ 5530      00EFFFFF 
+ 5531 459e F30F6F8D 		movdqu	-4336(%rbp), %xmm1
+ 5531      10EFFFFF 
+ 5532 45a6 660FEFC1 		pxor	%xmm1, %xmm0
+ 5533              	.LBE1891:
+ 5534              	.LBE1890:
+ 5535              		.loc 3 1927 0
+ 5536 45aa F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 5536      E0EBFFFF 
+ 5537 45b2 488B85C8 		movq	-5176(%rbp), %rax
+ 5537      EBFFFF
+ 5538 45b9 4883C030 		addq	$48, %rax
+ 5539 45bd F30F6F85 		movdqu	-5152(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 195
+
+
+ 5539      E0EBFFFF 
+ 5540 45c5 F30F7F00 		movdqu	%xmm0, (%rax)
+ 5541 45c9 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 5541      E0EBFFFF 
+ 5542 45d1 F30F7F85 		movdqu	%xmm0, -4304(%rbp)
+ 5542      30EFFFFF 
+ 5543              	.LBB1892:
+ 5544              	.LBB1893:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 5545              		.loc 3 1673 0
+ 5546 45d9 F30F6F85 		movdqu	-4304(%rbp), %xmm0
+ 5546      30EFFFFF 
+ 5547 45e1 660F7F85 		movdqa	%xmm0, -5536(%rbp)
+ 5547      60EAFFFF 
+ 5548 45e9 660F6F85 		movdqa	-5536(%rbp), %xmm0
+ 5548      60EAFFFF 
+ 5549 45f1 F30F7F85 		movdqu	%xmm0, -4272(%rbp)
+ 5549      50EFFFFF 
+ 5550              	.LBB1894:
+ 5551              	.LBB1895:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 5552              		.loc 1 852 0
+ 5553 45f9 F30F6F85 		movdqu	-4272(%rbp), %xmm0
+ 5553      50EFFFFF 
+ 5554 4601 660F3ADF 		aeskeygenassist	$2, %xmm0, %xmm0
+ 5554      C002
+ 5555              	.LBE1895:
+ 5556              	.LBE1894:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 5557              		.loc 3 1674 0
+ 5558 4607 660F7F85 		movdqa	%xmm0, -5536(%rbp)
+ 5558      60EAFFFF 
+ 5559 460f 660F6F85 		movdqa	-5536(%rbp), %xmm0
+ 5559      60EAFFFF 
+ 5560 4617 F30F7F85 		movdqu	%xmm0, -4256(%rbp)
+ 5560      60EFFFFF 
+ 5561 461f F30F6F85 		movdqu	-4256(%rbp), %xmm0
+ 5561      60EFFFFF 
+ 5562 4627 F30F7F85 		movdqu	%xmm0, -4224(%rbp)
+ 5562      80EFFFFF 
+ 5563              	.LBB1896:
+ 5564              	.LBB1897:
+ 5565              	.LBB1898:
+ 5566              	.LBB1899:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 5567              		.loc 1 450 0
+ 5568 462f F30F6F85 		movdqu	-4224(%rbp), %xmm0
+ 5568      80EFFFFF 
+ 5569 4637 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 5569      FF
+ 5570              	.LBE1899:
+ 5571              	.LBE1898:
+ 5572              	.LBE1897:
+ 5573              	.LBE1896:
+ 5574              	.LBE1893:
+ 5575              	.LBE1892:
+1928:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(4,0x02);    /* k16 : k17 : k18 : k19 */
+
GAS LISTING /tmp/ccPaCTqg.s 			page 196
+
+
+ 5576              		.loc 3 1928 0
+ 5577 463c F30F7F85 		movdqu	%xmm0, -5136(%rbp)
+ 5577      F0EBFFFF 
+ 5578 4644 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 5578      D0EBFFFF 
+ 5579 464c F30F7F85 		movdqu	%xmm0, -4208(%rbp)
+ 5579      90EFFFFF 
+ 5580              	.LBB1900:
+ 5581              	.LBB1901:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 5582              		.loc 3 1565 0
+ 5583 4654 F30F6F85 		movdqu	-4208(%rbp), %xmm0
+ 5583      90EFFFFF 
+ 5584 465c 660F7F85 		movdqa	%xmm0, -5520(%rbp)
+ 5584      70EAFFFF 
+ 5585 4664 660F6F85 		movdqa	-5520(%rbp), %xmm0
+ 5585      70EAFFFF 
+ 5586 466c F30F7F85 		movdqu	%xmm0, -4192(%rbp)
+ 5586      A0EFFFFF 
+ 5587              	.LBB1902:
+ 5588              	.LBB1903:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5589              		.loc 3 1278 0
+ 5590 4674 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 5590      00000000 
+ 5591 467c F30F6F8D 		movdqu	-4192(%rbp), %xmm1
+ 5591      A0EFFFFF 
+ 5592 4684 F30F7F8D 		movdqu	%xmm1, -4160(%rbp)
+ 5592      C0EFFFFF 
+ 5593 468c F30F7F85 		movdqu	%xmm0, -4176(%rbp)
+ 5593      B0EFFFFF 
+ 5594 4694 F30F6F85 		movdqu	-4160(%rbp), %xmm0
+ 5594      C0EFFFFF 
+ 5595 469c F30F7F85 		movdqu	%xmm0, -4128(%rbp)
+ 5595      E0EFFFFF 
+ 5596 46a4 F30F6F85 		movdqu	-4176(%rbp), %xmm0
+ 5596      B0EFFFFF 
+ 5597 46ac F30F7F85 		movdqu	%xmm0, -4144(%rbp)
+ 5597      D0EFFFFF 
+ 5598              	.LBB1904:
+ 5599              	.LBB1905:
+ 5600              	.LBB1906:
+ 5601              	.LBB1907:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5602              		.loc 1 529 0
+ 5603 46b4 F30F6F8D 		movdqu	-4144(%rbp), %xmm1
+ 5603      D0EFFFFF 
+ 5604 46bc F30F6F85 		movdqu	-4128(%rbp), %xmm0
+ 5604      E0EFFFFF 
+ 5605 46c4 660F3800 		pshufb	%xmm1, %xmm0
+ 5605      C1
+ 5606              	.LBE1907:
+ 5607              	.LBE1906:
+ 5608              	.LBE1905:
+ 5609              	.LBE1904:
+ 5610              	.LBE1903:
+ 5611              	.LBE1902:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 197
+
+
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5612              		.loc 3 1567 0
+ 5613 46c9 660F7F85 		movdqa	%xmm0, -5520(%rbp)
+ 5613      70EAFFFF 
+ 5614 46d1 660F6F85 		movdqa	-5520(%rbp), %xmm0
+ 5614      70EAFFFF 
+ 5615 46d9 660FEF85 		pxor	-4208(%rbp), %xmm0
+ 5615      90EFFFFF 
+ 5616 46e1 F30F7F85 		movdqu	%xmm0, -4208(%rbp)
+ 5616      90EFFFFF 
+ 5617 46e9 660F6F85 		movdqa	-5520(%rbp), %xmm0
+ 5617      70EAFFFF 
+ 5618 46f1 F30F7F85 		movdqu	%xmm0, -4112(%rbp)
+ 5618      F0EFFFFF 
+ 5619              	.LBB1908:
+ 5620              	.LBB1909:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5621              		.loc 3 1278 0
+ 5622 46f9 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 5622      00000000 
+ 5623 4701 F30F6F8D 		movdqu	-4112(%rbp), %xmm1
+ 5623      F0EFFFFF 
+ 5624 4709 F30F7F8D 		movdqu	%xmm1, -4080(%rbp)
+ 5624      10F0FFFF 
+ 5625 4711 F30F7F85 		movdqu	%xmm0, -4096(%rbp)
+ 5625      00F0FFFF 
+ 5626 4719 F30F6F85 		movdqu	-4080(%rbp), %xmm0
+ 5626      10F0FFFF 
+ 5627 4721 F30F7F85 		movdqu	%xmm0, -4048(%rbp)
+ 5627      30F0FFFF 
+ 5628 4729 F30F6F85 		movdqu	-4096(%rbp), %xmm0
+ 5628      00F0FFFF 
+ 5629 4731 F30F7F85 		movdqu	%xmm0, -4064(%rbp)
+ 5629      20F0FFFF 
+ 5630              	.LBB1910:
+ 5631              	.LBB1911:
+ 5632              	.LBB1912:
+ 5633              	.LBB1913:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5634              		.loc 1 529 0
+ 5635 4739 F30F6F8D 		movdqu	-4064(%rbp), %xmm1
+ 5635      20F0FFFF 
+ 5636 4741 F30F6F85 		movdqu	-4048(%rbp), %xmm0
+ 5636      30F0FFFF 
+ 5637 4749 660F3800 		pshufb	%xmm1, %xmm0
+ 5637      C1
+ 5638              	.LBE1913:
+ 5639              	.LBE1912:
+ 5640              	.LBE1911:
+ 5641              	.LBE1910:
+ 5642              	.LBE1909:
+ 5643              	.LBE1908:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5644              		.loc 3 1568 0
+ 5645 474e 660F7F85 		movdqa	%xmm0, -5520(%rbp)
+ 5645      70EAFFFF 
+ 5646 4756 660F6F85 		movdqa	-5520(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 198
+
+
+ 5646      70EAFFFF 
+ 5647 475e 660FEF85 		pxor	-4208(%rbp), %xmm0
+ 5647      90EFFFFF 
+ 5648 4766 F30F7F85 		movdqu	%xmm0, -4208(%rbp)
+ 5648      90EFFFFF 
+ 5649 476e 660F6F85 		movdqa	-5520(%rbp), %xmm0
+ 5649      70EAFFFF 
+ 5650 4776 F30F7F85 		movdqu	%xmm0, -4032(%rbp)
+ 5650      40F0FFFF 
+ 5651              	.LBB1914:
+ 5652              	.LBB1915:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5653              		.loc 3 1278 0
+ 5654 477e 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 5654      00000000 
+ 5655 4786 F30F6F8D 		movdqu	-4032(%rbp), %xmm1
+ 5655      40F0FFFF 
+ 5656 478e F30F7F8D 		movdqu	%xmm1, -4000(%rbp)
+ 5656      60F0FFFF 
+ 5657 4796 F30F7F85 		movdqu	%xmm0, -4016(%rbp)
+ 5657      50F0FFFF 
+ 5658 479e F30F6F85 		movdqu	-4000(%rbp), %xmm0
+ 5658      60F0FFFF 
+ 5659 47a6 F30F7F85 		movdqu	%xmm0, -3968(%rbp)
+ 5659      80F0FFFF 
+ 5660 47ae F30F6F85 		movdqu	-4016(%rbp), %xmm0
+ 5660      50F0FFFF 
+ 5661 47b6 F30F7F85 		movdqu	%xmm0, -3984(%rbp)
+ 5661      70F0FFFF 
+ 5662              	.LBB1916:
+ 5663              	.LBB1917:
+ 5664              	.LBB1918:
+ 5665              	.LBB1919:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5666              		.loc 1 529 0
+ 5667 47be F30F6F8D 		movdqu	-3984(%rbp), %xmm1
+ 5667      70F0FFFF 
+ 5668 47c6 F30F6F85 		movdqu	-3968(%rbp), %xmm0
+ 5668      80F0FFFF 
+ 5669 47ce 660F3800 		pshufb	%xmm1, %xmm0
+ 5669      C1
+ 5670              	.LBE1919:
+ 5671              	.LBE1918:
+ 5672              	.LBE1917:
+ 5673              	.LBE1916:
+ 5674              	.LBE1915:
+ 5675              	.LBE1914:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5676              		.loc 3 1569 0
+ 5677 47d3 660F7F85 		movdqa	%xmm0, -5520(%rbp)
+ 5677      70EAFFFF 
+ 5678 47db 660F6F85 		movdqa	-5520(%rbp), %xmm0
+ 5678      70EAFFFF 
+ 5679 47e3 660FEF85 		pxor	-4208(%rbp), %xmm0
+ 5679      90EFFFFF 
+ 5680 47eb F30F7F85 		movdqu	%xmm0, -4208(%rbp)
+ 5680      90EFFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 199
+
+
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 5681              		.loc 3 1571 0
+ 5682 47f3 F30F6F85 		movdqu	-4208(%rbp), %xmm0
+ 5682      90EFFFFF 
+ 5683              	.LBE1901:
+ 5684              	.LBE1900:
+ 5685              		.loc 3 1928 0
+ 5686 47fb F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 5686      D0EBFFFF 
+ 5687 4803 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 5687      D0EBFFFF 
+ 5688 480b F30F7F85 		movdqu	%xmm0, -3936(%rbp)
+ 5688      A0F0FFFF 
+ 5689 4813 F30F6F85 		movdqu	-5136(%rbp), %xmm0
+ 5689      F0EBFFFF 
+ 5690 481b F30F7F85 		movdqu	%xmm0, -3952(%rbp)
+ 5690      90F0FFFF 
+ 5691              	.LBB1920:
+ 5692              	.LBB1921:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 5693              		.loc 3 178 0
+ 5694 4823 F30F6F85 		movdqu	-3952(%rbp), %xmm0
+ 5694      90F0FFFF 
+ 5695 482b F30F6F8D 		movdqu	-3936(%rbp), %xmm1
+ 5695      A0F0FFFF 
+ 5696 4833 660FEFC1 		pxor	%xmm1, %xmm0
+ 5697              	.LBE1921:
+ 5698              	.LBE1920:
+ 5699              		.loc 3 1928 0
+ 5700 4837 F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 5700      D0EBFFFF 
+ 5701 483f 488B85C8 		movq	-5176(%rbp), %rax
+ 5701      EBFFFF
+ 5702 4846 4883C040 		addq	$64, %rax
+ 5703 484a F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 5703      D0EBFFFF 
+ 5704 4852 F30F7F00 		movdqu	%xmm0, (%rax)
+ 5705 4856 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 5705      D0EBFFFF 
+ 5706 485e F30F7F85 		movdqu	%xmm0, -3920(%rbp)
+ 5706      B0F0FFFF 
+ 5707              	.LBB1922:
+ 5708              	.LBB1923:
+1649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 5709              		.loc 3 1649 0
+ 5710 4866 F30F6F85 		movdqu	-3920(%rbp), %xmm0
+ 5710      B0F0FFFF 
+ 5711 486e 660F7F85 		movdqa	%xmm0, -5504(%rbp)
+ 5711      80EAFFFF 
+ 5712 4876 660F6F85 		movdqa	-5504(%rbp), %xmm0
+ 5712      80EAFFFF 
+ 5713 487e F30F7F85 		movdqu	%xmm0, -3888(%rbp)
+ 5713      D0F0FFFF 
+ 5714              	.LBB1924:
+ 5715              	.LBB1925:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 5716              		.loc 1 852 0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 200
+
+
+ 5717 4886 F30F6F85 		movdqu	-3888(%rbp), %xmm0
+ 5717      D0F0FFFF 
+ 5718 488e 660F3ADF 		aeskeygenassist	$0, %xmm0, %xmm0
+ 5718      C000
+ 5719              	.LBE1925:
+ 5720              	.LBE1924:
+1650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, 0);
+ 5721              		.loc 3 1650 0
+ 5722 4894 660F7F85 		movdqa	%xmm0, -5504(%rbp)
+ 5722      80EAFFFF 
+ 5723 489c 660F6F85 		movdqa	-5504(%rbp), %xmm0
+ 5723      80EAFFFF 
+ 5724 48a4 F30F7F85 		movdqu	%xmm0, -3872(%rbp)
+ 5724      E0F0FFFF 
+ 5725 48ac F30F6F85 		movdqu	-3872(%rbp), %xmm0
+ 5725      E0F0FFFF 
+ 5726 48b4 F30F7F85 		movdqu	%xmm0, -3840(%rbp)
+ 5726      00F1FFFF 
+ 5727              	.LBB1926:
+ 5728              	.LBB1927:
+ 5729              	.LBB1928:
+ 5730              	.LBB1929:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 5731              		.loc 1 450 0
+ 5732 48bc F30F6F85 		movdqu	-3840(%rbp), %xmm0
+ 5732      00F1FFFF 
+ 5733 48c4 660F70C0 		pshufd	$170, %xmm0, %xmm0
+ 5733      AA
+ 5734              	.LBE1929:
+ 5735              	.LBE1928:
+ 5736              	.LBE1927:
+ 5737              	.LBE1926:
+ 5738              	.LBE1923:
+ 5739              	.LBE1922:
+1929:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(5);         /* k20 : k21 : k22 : k23 */
+ 5740              		.loc 3 1929 0
+ 5741 48c9 F30F7F85 		movdqu	%xmm0, -5136(%rbp)
+ 5741      F0EBFFFF 
+ 5742 48d1 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 5742      E0EBFFFF 
+ 5743 48d9 F30F7F85 		movdqu	%xmm0, -3824(%rbp)
+ 5743      10F1FFFF 
+ 5744              	.LBB1930:
+ 5745              	.LBB1931:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 5746              		.loc 3 1565 0
+ 5747 48e1 F30F6F85 		movdqu	-3824(%rbp), %xmm0
+ 5747      10F1FFFF 
+ 5748 48e9 660F7F85 		movdqa	%xmm0, -5488(%rbp)
+ 5748      90EAFFFF 
+ 5749 48f1 660F6F85 		movdqa	-5488(%rbp), %xmm0
+ 5749      90EAFFFF 
+ 5750 48f9 F30F7F85 		movdqu	%xmm0, -3808(%rbp)
+ 5750      20F1FFFF 
+ 5751              	.LBB1932:
+ 5752              	.LBB1933:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+
GAS LISTING /tmp/ccPaCTqg.s 			page 201
+
+
+ 5753              		.loc 3 1278 0
+ 5754 4901 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 5754      00000000 
+ 5755 4909 F30F6F8D 		movdqu	-3808(%rbp), %xmm1
+ 5755      20F1FFFF 
+ 5756 4911 F30F7F8D 		movdqu	%xmm1, -3776(%rbp)
+ 5756      40F1FFFF 
+ 5757 4919 F30F7F85 		movdqu	%xmm0, -3792(%rbp)
+ 5757      30F1FFFF 
+ 5758 4921 F30F6F85 		movdqu	-3776(%rbp), %xmm0
+ 5758      40F1FFFF 
+ 5759 4929 F30F7F85 		movdqu	%xmm0, -3744(%rbp)
+ 5759      60F1FFFF 
+ 5760 4931 F30F6F85 		movdqu	-3792(%rbp), %xmm0
+ 5760      30F1FFFF 
+ 5761 4939 F30F7F85 		movdqu	%xmm0, -3760(%rbp)
+ 5761      50F1FFFF 
+ 5762              	.LBB1934:
+ 5763              	.LBB1935:
+ 5764              	.LBB1936:
+ 5765              	.LBB1937:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5766              		.loc 1 529 0
+ 5767 4941 F30F6F8D 		movdqu	-3760(%rbp), %xmm1
+ 5767      50F1FFFF 
+ 5768 4949 F30F6F85 		movdqu	-3744(%rbp), %xmm0
+ 5768      60F1FFFF 
+ 5769 4951 660F3800 		pshufb	%xmm1, %xmm0
+ 5769      C1
+ 5770              	.LBE1937:
+ 5771              	.LBE1936:
+ 5772              	.LBE1935:
+ 5773              	.LBE1934:
+ 5774              	.LBE1933:
+ 5775              	.LBE1932:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5776              		.loc 3 1567 0
+ 5777 4956 660F7F85 		movdqa	%xmm0, -5488(%rbp)
+ 5777      90EAFFFF 
+ 5778 495e 660F6F85 		movdqa	-5488(%rbp), %xmm0
+ 5778      90EAFFFF 
+ 5779 4966 660FEF85 		pxor	-3824(%rbp), %xmm0
+ 5779      10F1FFFF 
+ 5780 496e F30F7F85 		movdqu	%xmm0, -3824(%rbp)
+ 5780      10F1FFFF 
+ 5781 4976 660F6F85 		movdqa	-5488(%rbp), %xmm0
+ 5781      90EAFFFF 
+ 5782 497e F30F7F85 		movdqu	%xmm0, -3728(%rbp)
+ 5782      70F1FFFF 
+ 5783              	.LBB1938:
+ 5784              	.LBB1939:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5785              		.loc 3 1278 0
+ 5786 4986 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 5786      00000000 
+ 5787 498e F30F6F8D 		movdqu	-3728(%rbp), %xmm1
+ 5787      70F1FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 202
+
+
+ 5788 4996 F30F7F8D 		movdqu	%xmm1, -3696(%rbp)
+ 5788      90F1FFFF 
+ 5789 499e F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 5789      80F1FFFF 
+ 5790 49a6 F30F6F85 		movdqu	-3696(%rbp), %xmm0
+ 5790      90F1FFFF 
+ 5791 49ae F30F7F85 		movdqu	%xmm0, -3664(%rbp)
+ 5791      B0F1FFFF 
+ 5792 49b6 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 5792      80F1FFFF 
+ 5793 49be F30F7F85 		movdqu	%xmm0, -3680(%rbp)
+ 5793      A0F1FFFF 
+ 5794              	.LBB1940:
+ 5795              	.LBB1941:
+ 5796              	.LBB1942:
+ 5797              	.LBB1943:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5798              		.loc 1 529 0
+ 5799 49c6 F30F6F8D 		movdqu	-3680(%rbp), %xmm1
+ 5799      A0F1FFFF 
+ 5800 49ce F30F6F85 		movdqu	-3664(%rbp), %xmm0
+ 5800      B0F1FFFF 
+ 5801 49d6 660F3800 		pshufb	%xmm1, %xmm0
+ 5801      C1
+ 5802              	.LBE1943:
+ 5803              	.LBE1942:
+ 5804              	.LBE1941:
+ 5805              	.LBE1940:
+ 5806              	.LBE1939:
+ 5807              	.LBE1938:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5808              		.loc 3 1568 0
+ 5809 49db 660F7F85 		movdqa	%xmm0, -5488(%rbp)
+ 5809      90EAFFFF 
+ 5810 49e3 660F6F85 		movdqa	-5488(%rbp), %xmm0
+ 5810      90EAFFFF 
+ 5811 49eb 660FEF85 		pxor	-3824(%rbp), %xmm0
+ 5811      10F1FFFF 
+ 5812 49f3 F30F7F85 		movdqu	%xmm0, -3824(%rbp)
+ 5812      10F1FFFF 
+ 5813 49fb 660F6F85 		movdqa	-5488(%rbp), %xmm0
+ 5813      90EAFFFF 
+ 5814 4a03 F30F7F85 		movdqu	%xmm0, -3648(%rbp)
+ 5814      C0F1FFFF 
+ 5815              	.LBB1944:
+ 5816              	.LBB1945:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5817              		.loc 3 1278 0
+ 5818 4a0b 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 5818      00000000 
+ 5819 4a13 F30F6F8D 		movdqu	-3648(%rbp), %xmm1
+ 5819      C0F1FFFF 
+ 5820 4a1b F30F7F8D 		movdqu	%xmm1, -3616(%rbp)
+ 5820      E0F1FFFF 
+ 5821 4a23 F30F7F85 		movdqu	%xmm0, -3632(%rbp)
+ 5821      D0F1FFFF 
+ 5822 4a2b F30F6F85 		movdqu	-3616(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 203
+
+
+ 5822      E0F1FFFF 
+ 5823 4a33 F30F7F85 		movdqu	%xmm0, -3584(%rbp)
+ 5823      00F2FFFF 
+ 5824 4a3b F30F6F85 		movdqu	-3632(%rbp), %xmm0
+ 5824      D0F1FFFF 
+ 5825 4a43 F30F7F85 		movdqu	%xmm0, -3600(%rbp)
+ 5825      F0F1FFFF 
+ 5826              	.LBB1946:
+ 5827              	.LBB1947:
+ 5828              	.LBB1948:
+ 5829              	.LBB1949:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5830              		.loc 1 529 0
+ 5831 4a4b F30F6F8D 		movdqu	-3600(%rbp), %xmm1
+ 5831      F0F1FFFF 
+ 5832 4a53 F30F6F85 		movdqu	-3584(%rbp), %xmm0
+ 5832      00F2FFFF 
+ 5833 4a5b 660F3800 		pshufb	%xmm1, %xmm0
+ 5833      C1
+ 5834              	.LBE1949:
+ 5835              	.LBE1948:
+ 5836              	.LBE1947:
+ 5837              	.LBE1946:
+ 5838              	.LBE1945:
+ 5839              	.LBE1944:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5840              		.loc 3 1569 0
+ 5841 4a60 660F7F85 		movdqa	%xmm0, -5488(%rbp)
+ 5841      90EAFFFF 
+ 5842 4a68 660F6F85 		movdqa	-5488(%rbp), %xmm0
+ 5842      90EAFFFF 
+ 5843 4a70 660FEF85 		pxor	-3824(%rbp), %xmm0
+ 5843      10F1FFFF 
+ 5844 4a78 F30F7F85 		movdqu	%xmm0, -3824(%rbp)
+ 5844      10F1FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 5845              		.loc 3 1571 0
+ 5846 4a80 F30F6F85 		movdqu	-3824(%rbp), %xmm0
+ 5846      10F1FFFF 
+ 5847              	.LBE1931:
+ 5848              	.LBE1930:
+ 5849              		.loc 3 1929 0
+ 5850 4a88 F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 5850      E0EBFFFF 
+ 5851 4a90 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 5851      E0EBFFFF 
+ 5852 4a98 F30F7F85 		movdqu	%xmm0, -3552(%rbp)
+ 5852      20F2FFFF 
+ 5853 4aa0 F30F6F85 		movdqu	-5136(%rbp), %xmm0
+ 5853      F0EBFFFF 
+ 5854 4aa8 F30F7F85 		movdqu	%xmm0, -3568(%rbp)
+ 5854      10F2FFFF 
+ 5855              	.LBB1950:
+ 5856              	.LBB1951:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 5857              		.loc 3 178 0
+ 5858 4ab0 F30F6F85 		movdqu	-3568(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 204
+
+
+ 5858      10F2FFFF 
+ 5859 4ab8 F30F6F8D 		movdqu	-3552(%rbp), %xmm1
+ 5859      20F2FFFF 
+ 5860 4ac0 660FEFC1 		pxor	%xmm1, %xmm0
+ 5861              	.LBE1951:
+ 5862              	.LBE1950:
+ 5863              		.loc 3 1929 0
+ 5864 4ac4 F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 5864      E0EBFFFF 
+ 5865 4acc 488B85C8 		movq	-5176(%rbp), %rax
+ 5865      EBFFFF
+ 5866 4ad3 4883C050 		addq	$80, %rax
+ 5867 4ad7 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 5867      E0EBFFFF 
+ 5868 4adf F30F7F00 		movdqu	%xmm0, (%rax)
+ 5869 4ae3 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 5869      E0EBFFFF 
+ 5870 4aeb F30F7F85 		movdqu	%xmm0, -3520(%rbp)
+ 5870      40F2FFFF 
+ 5871              	.LBB1952:
+ 5872              	.LBB1953:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 5873              		.loc 3 1673 0
+ 5874 4af3 F30F6F85 		movdqu	-3520(%rbp), %xmm0
+ 5874      40F2FFFF 
+ 5875 4afb 660F7F85 		movdqa	%xmm0, -5472(%rbp)
+ 5875      A0EAFFFF 
+ 5876 4b03 660F6F85 		movdqa	-5472(%rbp), %xmm0
+ 5876      A0EAFFFF 
+ 5877 4b0b F30F7F85 		movdqu	%xmm0, -3488(%rbp)
+ 5877      60F2FFFF 
+ 5878              	.LBB1954:
+ 5879              	.LBB1955:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 5880              		.loc 1 852 0
+ 5881 4b13 F30F6F85 		movdqu	-3488(%rbp), %xmm0
+ 5881      60F2FFFF 
+ 5882 4b1b 660F3ADF 		aeskeygenassist	$4, %xmm0, %xmm0
+ 5882      C004
+ 5883              	.LBE1955:
+ 5884              	.LBE1954:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 5885              		.loc 3 1674 0
+ 5886 4b21 660F7F85 		movdqa	%xmm0, -5472(%rbp)
+ 5886      A0EAFFFF 
+ 5887 4b29 660F6F85 		movdqa	-5472(%rbp), %xmm0
+ 5887      A0EAFFFF 
+ 5888 4b31 F30F7F85 		movdqu	%xmm0, -3472(%rbp)
+ 5888      70F2FFFF 
+ 5889 4b39 F30F6F85 		movdqu	-3472(%rbp), %xmm0
+ 5889      70F2FFFF 
+ 5890 4b41 F30F7F85 		movdqu	%xmm0, -3440(%rbp)
+ 5890      90F2FFFF 
+ 5891              	.LBB1956:
+ 5892              	.LBB1957:
+ 5893              	.LBB1958:
+ 5894              	.LBB1959:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 205
+
+
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 5895              		.loc 1 450 0
+ 5896 4b49 F30F6F85 		movdqu	-3440(%rbp), %xmm0
+ 5896      90F2FFFF 
+ 5897 4b51 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 5897      FF
+ 5898              	.LBE1959:
+ 5899              	.LBE1958:
+ 5900              	.LBE1957:
+ 5901              	.LBE1956:
+ 5902              	.LBE1953:
+ 5903              	.LBE1952:
+1930:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(6,0x04);    /* k24 : k25 : k26 : k27 */
+ 5904              		.loc 3 1930 0
+ 5905 4b56 F30F7F85 		movdqu	%xmm0, -5136(%rbp)
+ 5905      F0EBFFFF 
+ 5906 4b5e F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 5906      D0EBFFFF 
+ 5907 4b66 F30F7F85 		movdqu	%xmm0, -3424(%rbp)
+ 5907      A0F2FFFF 
+ 5908              	.LBB1960:
+ 5909              	.LBB1961:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 5910              		.loc 3 1565 0
+ 5911 4b6e F30F6F85 		movdqu	-3424(%rbp), %xmm0
+ 5911      A0F2FFFF 
+ 5912 4b76 660F7F85 		movdqa	%xmm0, -5456(%rbp)
+ 5912      B0EAFFFF 
+ 5913 4b7e 660F6F85 		movdqa	-5456(%rbp), %xmm0
+ 5913      B0EAFFFF 
+ 5914 4b86 F30F7F85 		movdqu	%xmm0, -3408(%rbp)
+ 5914      B0F2FFFF 
+ 5915              	.LBB1962:
+ 5916              	.LBB1963:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5917              		.loc 3 1278 0
+ 5918 4b8e 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 5918      00000000 
+ 5919 4b96 F30F6F8D 		movdqu	-3408(%rbp), %xmm1
+ 5919      B0F2FFFF 
+ 5920 4b9e F30F7F8D 		movdqu	%xmm1, -3376(%rbp)
+ 5920      D0F2FFFF 
+ 5921 4ba6 F30F7F85 		movdqu	%xmm0, -3392(%rbp)
+ 5921      C0F2FFFF 
+ 5922 4bae F30F6F85 		movdqu	-3376(%rbp), %xmm0
+ 5922      D0F2FFFF 
+ 5923 4bb6 F30F7F85 		movdqu	%xmm0, -3344(%rbp)
+ 5923      F0F2FFFF 
+ 5924 4bbe F30F6F85 		movdqu	-3392(%rbp), %xmm0
+ 5924      C0F2FFFF 
+ 5925 4bc6 F30F7F85 		movdqu	%xmm0, -3360(%rbp)
+ 5925      E0F2FFFF 
+ 5926              	.LBB1964:
+ 5927              	.LBB1965:
+ 5928              	.LBB1966:
+ 5929              	.LBB1967:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+
GAS LISTING /tmp/ccPaCTqg.s 			page 206
+
+
+ 5930              		.loc 1 529 0
+ 5931 4bce F30F6F8D 		movdqu	-3360(%rbp), %xmm1
+ 5931      E0F2FFFF 
+ 5932 4bd6 F30F6F85 		movdqu	-3344(%rbp), %xmm0
+ 5932      F0F2FFFF 
+ 5933 4bde 660F3800 		pshufb	%xmm1, %xmm0
+ 5933      C1
+ 5934              	.LBE1967:
+ 5935              	.LBE1966:
+ 5936              	.LBE1965:
+ 5937              	.LBE1964:
+ 5938              	.LBE1963:
+ 5939              	.LBE1962:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5940              		.loc 3 1567 0
+ 5941 4be3 660F7F85 		movdqa	%xmm0, -5456(%rbp)
+ 5941      B0EAFFFF 
+ 5942 4beb 660F6F85 		movdqa	-5456(%rbp), %xmm0
+ 5942      B0EAFFFF 
+ 5943 4bf3 660FEF85 		pxor	-3424(%rbp), %xmm0
+ 5943      A0F2FFFF 
+ 5944 4bfb F30F7F85 		movdqu	%xmm0, -3424(%rbp)
+ 5944      A0F2FFFF 
+ 5945 4c03 660F6F85 		movdqa	-5456(%rbp), %xmm0
+ 5945      B0EAFFFF 
+ 5946 4c0b F30F7F85 		movdqu	%xmm0, -3328(%rbp)
+ 5946      00F3FFFF 
+ 5947              	.LBB1968:
+ 5948              	.LBB1969:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5949              		.loc 3 1278 0
+ 5950 4c13 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 5950      00000000 
+ 5951 4c1b F30F6F8D 		movdqu	-3328(%rbp), %xmm1
+ 5951      00F3FFFF 
+ 5952 4c23 F30F7F8D 		movdqu	%xmm1, -3296(%rbp)
+ 5952      20F3FFFF 
+ 5953 4c2b F30F7F85 		movdqu	%xmm0, -3312(%rbp)
+ 5953      10F3FFFF 
+ 5954 4c33 F30F6F85 		movdqu	-3296(%rbp), %xmm0
+ 5954      20F3FFFF 
+ 5955 4c3b F30F7F85 		movdqu	%xmm0, -3264(%rbp)
+ 5955      40F3FFFF 
+ 5956 4c43 F30F6F85 		movdqu	-3312(%rbp), %xmm0
+ 5956      10F3FFFF 
+ 5957 4c4b F30F7F85 		movdqu	%xmm0, -3280(%rbp)
+ 5957      30F3FFFF 
+ 5958              	.LBB1970:
+ 5959              	.LBB1971:
+ 5960              	.LBB1972:
+ 5961              	.LBB1973:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5962              		.loc 1 529 0
+ 5963 4c53 F30F6F8D 		movdqu	-3280(%rbp), %xmm1
+ 5963      30F3FFFF 
+ 5964 4c5b F30F6F85 		movdqu	-3264(%rbp), %xmm0
+ 5964      40F3FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 207
+
+
+ 5965 4c63 660F3800 		pshufb	%xmm1, %xmm0
+ 5965      C1
+ 5966              	.LBE1973:
+ 5967              	.LBE1972:
+ 5968              	.LBE1971:
+ 5969              	.LBE1970:
+ 5970              	.LBE1969:
+ 5971              	.LBE1968:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5972              		.loc 3 1568 0
+ 5973 4c68 660F7F85 		movdqa	%xmm0, -5456(%rbp)
+ 5973      B0EAFFFF 
+ 5974 4c70 660F6F85 		movdqa	-5456(%rbp), %xmm0
+ 5974      B0EAFFFF 
+ 5975 4c78 660FEF85 		pxor	-3424(%rbp), %xmm0
+ 5975      A0F2FFFF 
+ 5976 4c80 F30F7F85 		movdqu	%xmm0, -3424(%rbp)
+ 5976      A0F2FFFF 
+ 5977 4c88 660F6F85 		movdqa	-5456(%rbp), %xmm0
+ 5977      B0EAFFFF 
+ 5978 4c90 F30F7F85 		movdqu	%xmm0, -3248(%rbp)
+ 5978      50F3FFFF 
+ 5979              	.LBB1974:
+ 5980              	.LBB1975:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5981              		.loc 3 1278 0
+ 5982 4c98 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 5982      00000000 
+ 5983 4ca0 F30F6F8D 		movdqu	-3248(%rbp), %xmm1
+ 5983      50F3FFFF 
+ 5984 4ca8 F30F7F8D 		movdqu	%xmm1, -3216(%rbp)
+ 5984      70F3FFFF 
+ 5985 4cb0 F30F7F85 		movdqu	%xmm0, -3232(%rbp)
+ 5985      60F3FFFF 
+ 5986 4cb8 F30F6F85 		movdqu	-3216(%rbp), %xmm0
+ 5986      70F3FFFF 
+ 5987 4cc0 F30F7F85 		movdqu	%xmm0, -3184(%rbp)
+ 5987      90F3FFFF 
+ 5988 4cc8 F30F6F85 		movdqu	-3232(%rbp), %xmm0
+ 5988      60F3FFFF 
+ 5989 4cd0 F30F7F85 		movdqu	%xmm0, -3200(%rbp)
+ 5989      80F3FFFF 
+ 5990              	.LBB1976:
+ 5991              	.LBB1977:
+ 5992              	.LBB1978:
+ 5993              	.LBB1979:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5994              		.loc 1 529 0
+ 5995 4cd8 F30F6F8D 		movdqu	-3200(%rbp), %xmm1
+ 5995      80F3FFFF 
+ 5996 4ce0 F30F6F85 		movdqu	-3184(%rbp), %xmm0
+ 5996      90F3FFFF 
+ 5997 4ce8 660F3800 		pshufb	%xmm1, %xmm0
+ 5997      C1
+ 5998              	.LBE1979:
+ 5999              	.LBE1978:
+ 6000              	.LBE1977:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 208
+
+
+ 6001              	.LBE1976:
+ 6002              	.LBE1975:
+ 6003              	.LBE1974:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6004              		.loc 3 1569 0
+ 6005 4ced 660F7F85 		movdqa	%xmm0, -5456(%rbp)
+ 6005      B0EAFFFF 
+ 6006 4cf5 660F6F85 		movdqa	-5456(%rbp), %xmm0
+ 6006      B0EAFFFF 
+ 6007 4cfd 660FEF85 		pxor	-3424(%rbp), %xmm0
+ 6007      A0F2FFFF 
+ 6008 4d05 F30F7F85 		movdqu	%xmm0, -3424(%rbp)
+ 6008      A0F2FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 6009              		.loc 3 1571 0
+ 6010 4d0d F30F6F85 		movdqu	-3424(%rbp), %xmm0
+ 6010      A0F2FFFF 
+ 6011              	.LBE1961:
+ 6012              	.LBE1960:
+ 6013              		.loc 3 1930 0
+ 6014 4d15 F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 6014      D0EBFFFF 
+ 6015 4d1d F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 6015      D0EBFFFF 
+ 6016 4d25 F30F7F85 		movdqu	%xmm0, -3152(%rbp)
+ 6016      B0F3FFFF 
+ 6017 4d2d F30F6F85 		movdqu	-5136(%rbp), %xmm0
+ 6017      F0EBFFFF 
+ 6018 4d35 F30F7F85 		movdqu	%xmm0, -3168(%rbp)
+ 6018      A0F3FFFF 
+ 6019              	.LBB1980:
+ 6020              	.LBB1981:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 6021              		.loc 3 178 0
+ 6022 4d3d F30F6F85 		movdqu	-3168(%rbp), %xmm0
+ 6022      A0F3FFFF 
+ 6023 4d45 F30F6F8D 		movdqu	-3152(%rbp), %xmm1
+ 6023      B0F3FFFF 
+ 6024 4d4d 660FEFC1 		pxor	%xmm1, %xmm0
+ 6025              	.LBE1981:
+ 6026              	.LBE1980:
+ 6027              		.loc 3 1930 0
+ 6028 4d51 F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 6028      D0EBFFFF 
+ 6029 4d59 488B85C8 		movq	-5176(%rbp), %rax
+ 6029      EBFFFF
+ 6030 4d60 4883C060 		addq	$96, %rax
+ 6031 4d64 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 6031      D0EBFFFF 
+ 6032 4d6c F30F7F00 		movdqu	%xmm0, (%rax)
+ 6033 4d70 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 6033      D0EBFFFF 
+ 6034 4d78 F30F7F85 		movdqu	%xmm0, -3136(%rbp)
+ 6034      C0F3FFFF 
+ 6035              	.LBB1982:
+ 6036              	.LBB1983:
+1649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+
GAS LISTING /tmp/ccPaCTqg.s 			page 209
+
+
+ 6037              		.loc 3 1649 0
+ 6038 4d80 F30F6F85 		movdqu	-3136(%rbp), %xmm0
+ 6038      C0F3FFFF 
+ 6039 4d88 660F7F85 		movdqa	%xmm0, -5440(%rbp)
+ 6039      C0EAFFFF 
+ 6040 4d90 660F6F85 		movdqa	-5440(%rbp), %xmm0
+ 6040      C0EAFFFF 
+ 6041 4d98 F30F7F85 		movdqu	%xmm0, -3104(%rbp)
+ 6041      E0F3FFFF 
+ 6042              	.LBB1984:
+ 6043              	.LBB1985:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 6044              		.loc 1 852 0
+ 6045 4da0 F30F6F85 		movdqu	-3104(%rbp), %xmm0
+ 6045      E0F3FFFF 
+ 6046 4da8 660F3ADF 		aeskeygenassist	$0, %xmm0, %xmm0
+ 6046      C000
+ 6047              	.LBE1985:
+ 6048              	.LBE1984:
+1650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, 0);
+ 6049              		.loc 3 1650 0
+ 6050 4dae 660F7F85 		movdqa	%xmm0, -5440(%rbp)
+ 6050      C0EAFFFF 
+ 6051 4db6 660F6F85 		movdqa	-5440(%rbp), %xmm0
+ 6051      C0EAFFFF 
+ 6052 4dbe F30F7F85 		movdqu	%xmm0, -3088(%rbp)
+ 6052      F0F3FFFF 
+ 6053 4dc6 F30F6F85 		movdqu	-3088(%rbp), %xmm0
+ 6053      F0F3FFFF 
+ 6054 4dce F30F7F85 		movdqu	%xmm0, -3056(%rbp)
+ 6054      10F4FFFF 
+ 6055              	.LBB1986:
+ 6056              	.LBB1987:
+ 6057              	.LBB1988:
+ 6058              	.LBB1989:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 6059              		.loc 1 450 0
+ 6060 4dd6 F30F6F85 		movdqu	-3056(%rbp), %xmm0
+ 6060      10F4FFFF 
+ 6061 4dde 660F70C0 		pshufd	$170, %xmm0, %xmm0
+ 6061      AA
+ 6062              	.LBE1989:
+ 6063              	.LBE1988:
+ 6064              	.LBE1987:
+ 6065              	.LBE1986:
+ 6066              	.LBE1983:
+ 6067              	.LBE1982:
+1931:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(7);         /* k28 : k29 : k30 : k31 */
+ 6068              		.loc 3 1931 0
+ 6069 4de3 F30F7F85 		movdqu	%xmm0, -5136(%rbp)
+ 6069      F0EBFFFF 
+ 6070 4deb F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 6070      E0EBFFFF 
+ 6071 4df3 F30F7F85 		movdqu	%xmm0, -3040(%rbp)
+ 6071      20F4FFFF 
+ 6072              	.LBB1990:
+ 6073              	.LBB1991:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 210
+
+
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 6074              		.loc 3 1565 0
+ 6075 4dfb F30F6F85 		movdqu	-3040(%rbp), %xmm0
+ 6075      20F4FFFF 
+ 6076 4e03 660F7F85 		movdqa	%xmm0, -5424(%rbp)
+ 6076      D0EAFFFF 
+ 6077 4e0b 660F6F85 		movdqa	-5424(%rbp), %xmm0
+ 6077      D0EAFFFF 
+ 6078 4e13 F30F7F85 		movdqu	%xmm0, -3024(%rbp)
+ 6078      30F4FFFF 
+ 6079              	.LBB1992:
+ 6080              	.LBB1993:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6081              		.loc 3 1278 0
+ 6082 4e1b 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 6082      00000000 
+ 6083 4e23 F30F6F8D 		movdqu	-3024(%rbp), %xmm1
+ 6083      30F4FFFF 
+ 6084 4e2b F30F7F8D 		movdqu	%xmm1, -2992(%rbp)
+ 6084      50F4FFFF 
+ 6085 4e33 F30F7F85 		movdqu	%xmm0, -3008(%rbp)
+ 6085      40F4FFFF 
+ 6086 4e3b F30F6F85 		movdqu	-2992(%rbp), %xmm0
+ 6086      50F4FFFF 
+ 6087 4e43 F30F7F85 		movdqu	%xmm0, -2960(%rbp)
+ 6087      70F4FFFF 
+ 6088 4e4b F30F6F85 		movdqu	-3008(%rbp), %xmm0
+ 6088      40F4FFFF 
+ 6089 4e53 F30F7F85 		movdqu	%xmm0, -2976(%rbp)
+ 6089      60F4FFFF 
+ 6090              	.LBB1994:
+ 6091              	.LBB1995:
+ 6092              	.LBB1996:
+ 6093              	.LBB1997:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6094              		.loc 1 529 0
+ 6095 4e5b F30F6F8D 		movdqu	-2976(%rbp), %xmm1
+ 6095      60F4FFFF 
+ 6096 4e63 F30F6F85 		movdqu	-2960(%rbp), %xmm0
+ 6096      70F4FFFF 
+ 6097 4e6b 660F3800 		pshufb	%xmm1, %xmm0
+ 6097      C1
+ 6098              	.LBE1997:
+ 6099              	.LBE1996:
+ 6100              	.LBE1995:
+ 6101              	.LBE1994:
+ 6102              	.LBE1993:
+ 6103              	.LBE1992:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6104              		.loc 3 1567 0
+ 6105 4e70 660F7F85 		movdqa	%xmm0, -5424(%rbp)
+ 6105      D0EAFFFF 
+ 6106 4e78 660F6F85 		movdqa	-5424(%rbp), %xmm0
+ 6106      D0EAFFFF 
+ 6107 4e80 660FEF85 		pxor	-3040(%rbp), %xmm0
+ 6107      20F4FFFF 
+ 6108 4e88 F30F7F85 		movdqu	%xmm0, -3040(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 211
+
+
+ 6108      20F4FFFF 
+ 6109 4e90 660F6F85 		movdqa	-5424(%rbp), %xmm0
+ 6109      D0EAFFFF 
+ 6110 4e98 F30F7F85 		movdqu	%xmm0, -2944(%rbp)
+ 6110      80F4FFFF 
+ 6111              	.LBB1998:
+ 6112              	.LBB1999:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6113              		.loc 3 1278 0
+ 6114 4ea0 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 6114      00000000 
+ 6115 4ea8 F30F6F8D 		movdqu	-2944(%rbp), %xmm1
+ 6115      80F4FFFF 
+ 6116 4eb0 F30F7F8D 		movdqu	%xmm1, -2912(%rbp)
+ 6116      A0F4FFFF 
+ 6117 4eb8 F30F7F85 		movdqu	%xmm0, -2928(%rbp)
+ 6117      90F4FFFF 
+ 6118 4ec0 F30F6F85 		movdqu	-2912(%rbp), %xmm0
+ 6118      A0F4FFFF 
+ 6119 4ec8 F30F7F85 		movdqu	%xmm0, -2880(%rbp)
+ 6119      C0F4FFFF 
+ 6120 4ed0 F30F6F85 		movdqu	-2928(%rbp), %xmm0
+ 6120      90F4FFFF 
+ 6121 4ed8 F30F7F85 		movdqu	%xmm0, -2896(%rbp)
+ 6121      B0F4FFFF 
+ 6122              	.LBB2000:
+ 6123              	.LBB2001:
+ 6124              	.LBB2002:
+ 6125              	.LBB2003:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6126              		.loc 1 529 0
+ 6127 4ee0 F30F6F8D 		movdqu	-2896(%rbp), %xmm1
+ 6127      B0F4FFFF 
+ 6128 4ee8 F30F6F85 		movdqu	-2880(%rbp), %xmm0
+ 6128      C0F4FFFF 
+ 6129 4ef0 660F3800 		pshufb	%xmm1, %xmm0
+ 6129      C1
+ 6130              	.LBE2003:
+ 6131              	.LBE2002:
+ 6132              	.LBE2001:
+ 6133              	.LBE2000:
+ 6134              	.LBE1999:
+ 6135              	.LBE1998:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6136              		.loc 3 1568 0
+ 6137 4ef5 660F7F85 		movdqa	%xmm0, -5424(%rbp)
+ 6137      D0EAFFFF 
+ 6138 4efd 660F6F85 		movdqa	-5424(%rbp), %xmm0
+ 6138      D0EAFFFF 
+ 6139 4f05 660FEF85 		pxor	-3040(%rbp), %xmm0
+ 6139      20F4FFFF 
+ 6140 4f0d F30F7F85 		movdqu	%xmm0, -3040(%rbp)
+ 6140      20F4FFFF 
+ 6141 4f15 660F6F85 		movdqa	-5424(%rbp), %xmm0
+ 6141      D0EAFFFF 
+ 6142 4f1d F30F7F85 		movdqu	%xmm0, -2864(%rbp)
+ 6142      D0F4FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 212
+
+
+ 6143              	.LBB2004:
+ 6144              	.LBB2005:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6145              		.loc 3 1278 0
+ 6146 4f25 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 6146      00000000 
+ 6147 4f2d F30F6F8D 		movdqu	-2864(%rbp), %xmm1
+ 6147      D0F4FFFF 
+ 6148 4f35 F30F7F8D 		movdqu	%xmm1, -2832(%rbp)
+ 6148      F0F4FFFF 
+ 6149 4f3d F30F7F85 		movdqu	%xmm0, -2848(%rbp)
+ 6149      E0F4FFFF 
+ 6150 4f45 F30F6F85 		movdqu	-2832(%rbp), %xmm0
+ 6150      F0F4FFFF 
+ 6151 4f4d F30F7F85 		movdqu	%xmm0, -2800(%rbp)
+ 6151      10F5FFFF 
+ 6152 4f55 F30F6F85 		movdqu	-2848(%rbp), %xmm0
+ 6152      E0F4FFFF 
+ 6153 4f5d F30F7F85 		movdqu	%xmm0, -2816(%rbp)
+ 6153      00F5FFFF 
+ 6154              	.LBB2006:
+ 6155              	.LBB2007:
+ 6156              	.LBB2008:
+ 6157              	.LBB2009:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6158              		.loc 1 529 0
+ 6159 4f65 F30F6F8D 		movdqu	-2816(%rbp), %xmm1
+ 6159      00F5FFFF 
+ 6160 4f6d F30F6F85 		movdqu	-2800(%rbp), %xmm0
+ 6160      10F5FFFF 
+ 6161 4f75 660F3800 		pshufb	%xmm1, %xmm0
+ 6161      C1
+ 6162              	.LBE2009:
+ 6163              	.LBE2008:
+ 6164              	.LBE2007:
+ 6165              	.LBE2006:
+ 6166              	.LBE2005:
+ 6167              	.LBE2004:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6168              		.loc 3 1569 0
+ 6169 4f7a 660F7F85 		movdqa	%xmm0, -5424(%rbp)
+ 6169      D0EAFFFF 
+ 6170 4f82 660F6F85 		movdqa	-5424(%rbp), %xmm0
+ 6170      D0EAFFFF 
+ 6171 4f8a 660FEF85 		pxor	-3040(%rbp), %xmm0
+ 6171      20F4FFFF 
+ 6172 4f92 F30F7F85 		movdqu	%xmm0, -3040(%rbp)
+ 6172      20F4FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 6173              		.loc 3 1571 0
+ 6174 4f9a F30F6F85 		movdqu	-3040(%rbp), %xmm0
+ 6174      20F4FFFF 
+ 6175              	.LBE1991:
+ 6176              	.LBE1990:
+ 6177              		.loc 3 1931 0
+ 6178 4fa2 F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 6178      E0EBFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 213
+
+
+ 6179 4faa F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 6179      E0EBFFFF 
+ 6180 4fb2 F30F7F85 		movdqu	%xmm0, -2768(%rbp)
+ 6180      30F5FFFF 
+ 6181 4fba F30F6F85 		movdqu	-5136(%rbp), %xmm0
+ 6181      F0EBFFFF 
+ 6182 4fc2 F30F7F85 		movdqu	%xmm0, -2784(%rbp)
+ 6182      20F5FFFF 
+ 6183              	.LBB2010:
+ 6184              	.LBB2011:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 6185              		.loc 3 178 0
+ 6186 4fca F30F6F85 		movdqu	-2784(%rbp), %xmm0
+ 6186      20F5FFFF 
+ 6187 4fd2 F30F6F8D 		movdqu	-2768(%rbp), %xmm1
+ 6187      30F5FFFF 
+ 6188 4fda 660FEFC1 		pxor	%xmm1, %xmm0
+ 6189              	.LBE2011:
+ 6190              	.LBE2010:
+ 6191              		.loc 3 1931 0
+ 6192 4fde F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 6192      E0EBFFFF 
+ 6193 4fe6 488B85C8 		movq	-5176(%rbp), %rax
+ 6193      EBFFFF
+ 6194 4fed 4883C070 		addq	$112, %rax
+ 6195 4ff1 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 6195      E0EBFFFF 
+ 6196 4ff9 F30F7F00 		movdqu	%xmm0, (%rax)
+ 6197 4ffd F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 6197      E0EBFFFF 
+ 6198 5005 F30F7F85 		movdqu	%xmm0, -2736(%rbp)
+ 6198      50F5FFFF 
+ 6199              	.LBB2012:
+ 6200              	.LBB2013:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 6201              		.loc 3 1673 0
+ 6202 500d F30F6F85 		movdqu	-2736(%rbp), %xmm0
+ 6202      50F5FFFF 
+ 6203 5015 660F7F85 		movdqa	%xmm0, -5408(%rbp)
+ 6203      E0EAFFFF 
+ 6204 501d 660F6F85 		movdqa	-5408(%rbp), %xmm0
+ 6204      E0EAFFFF 
+ 6205 5025 F30F7F85 		movdqu	%xmm0, -2704(%rbp)
+ 6205      70F5FFFF 
+ 6206              	.LBB2014:
+ 6207              	.LBB2015:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 6208              		.loc 1 852 0
+ 6209 502d F30F6F85 		movdqu	-2704(%rbp), %xmm0
+ 6209      70F5FFFF 
+ 6210 5035 660F3ADF 		aeskeygenassist	$8, %xmm0, %xmm0
+ 6210      C008
+ 6211              	.LBE2015:
+ 6212              	.LBE2014:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 6213              		.loc 3 1674 0
+ 6214 503b 660F7F85 		movdqa	%xmm0, -5408(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 214
+
+
+ 6214      E0EAFFFF 
+ 6215 5043 660F6F85 		movdqa	-5408(%rbp), %xmm0
+ 6215      E0EAFFFF 
+ 6216 504b F30F7F85 		movdqu	%xmm0, -2688(%rbp)
+ 6216      80F5FFFF 
+ 6217 5053 F30F6F85 		movdqu	-2688(%rbp), %xmm0
+ 6217      80F5FFFF 
+ 6218 505b F30F7F85 		movdqu	%xmm0, -2656(%rbp)
+ 6218      A0F5FFFF 
+ 6219              	.LBB2016:
+ 6220              	.LBB2017:
+ 6221              	.LBB2018:
+ 6222              	.LBB2019:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 6223              		.loc 1 450 0
+ 6224 5063 F30F6F85 		movdqu	-2656(%rbp), %xmm0
+ 6224      A0F5FFFF 
+ 6225 506b 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 6225      FF
+ 6226              	.LBE2019:
+ 6227              	.LBE2018:
+ 6228              	.LBE2017:
+ 6229              	.LBE2016:
+ 6230              	.LBE2013:
+ 6231              	.LBE2012:
+1932:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(8,0x08);    /* k32 : k33 : k34 : k35 */
+ 6232              		.loc 3 1932 0
+ 6233 5070 F30F7F85 		movdqu	%xmm0, -5136(%rbp)
+ 6233      F0EBFFFF 
+ 6234 5078 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 6234      D0EBFFFF 
+ 6235 5080 F30F7F85 		movdqu	%xmm0, -2640(%rbp)
+ 6235      B0F5FFFF 
+ 6236              	.LBB2020:
+ 6237              	.LBB2021:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 6238              		.loc 3 1565 0
+ 6239 5088 F30F6F85 		movdqu	-2640(%rbp), %xmm0
+ 6239      B0F5FFFF 
+ 6240 5090 660F7F85 		movdqa	%xmm0, -5392(%rbp)
+ 6240      F0EAFFFF 
+ 6241 5098 660F6F85 		movdqa	-5392(%rbp), %xmm0
+ 6241      F0EAFFFF 
+ 6242 50a0 F30F7F85 		movdqu	%xmm0, -2624(%rbp)
+ 6242      C0F5FFFF 
+ 6243              	.LBB2022:
+ 6244              	.LBB2023:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6245              		.loc 3 1278 0
+ 6246 50a8 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 6246      00000000 
+ 6247 50b0 F30F6F8D 		movdqu	-2624(%rbp), %xmm1
+ 6247      C0F5FFFF 
+ 6248 50b8 F30F7F8D 		movdqu	%xmm1, -2592(%rbp)
+ 6248      E0F5FFFF 
+ 6249 50c0 F30F7F85 		movdqu	%xmm0, -2608(%rbp)
+ 6249      D0F5FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 215
+
+
+ 6250 50c8 F30F6F85 		movdqu	-2592(%rbp), %xmm0
+ 6250      E0F5FFFF 
+ 6251 50d0 F30F7F85 		movdqu	%xmm0, -2560(%rbp)
+ 6251      00F6FFFF 
+ 6252 50d8 F30F6F85 		movdqu	-2608(%rbp), %xmm0
+ 6252      D0F5FFFF 
+ 6253 50e0 F30F7F85 		movdqu	%xmm0, -2576(%rbp)
+ 6253      F0F5FFFF 
+ 6254              	.LBB2024:
+ 6255              	.LBB2025:
+ 6256              	.LBB2026:
+ 6257              	.LBB2027:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6258              		.loc 1 529 0
+ 6259 50e8 F30F6F8D 		movdqu	-2576(%rbp), %xmm1
+ 6259      F0F5FFFF 
+ 6260 50f0 F30F6F85 		movdqu	-2560(%rbp), %xmm0
+ 6260      00F6FFFF 
+ 6261 50f8 660F3800 		pshufb	%xmm1, %xmm0
+ 6261      C1
+ 6262              	.LBE2027:
+ 6263              	.LBE2026:
+ 6264              	.LBE2025:
+ 6265              	.LBE2024:
+ 6266              	.LBE2023:
+ 6267              	.LBE2022:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6268              		.loc 3 1567 0
+ 6269 50fd 660F7F85 		movdqa	%xmm0, -5392(%rbp)
+ 6269      F0EAFFFF 
+ 6270 5105 660F6F85 		movdqa	-5392(%rbp), %xmm0
+ 6270      F0EAFFFF 
+ 6271 510d 660FEF85 		pxor	-2640(%rbp), %xmm0
+ 6271      B0F5FFFF 
+ 6272 5115 F30F7F85 		movdqu	%xmm0, -2640(%rbp)
+ 6272      B0F5FFFF 
+ 6273 511d 660F6F85 		movdqa	-5392(%rbp), %xmm0
+ 6273      F0EAFFFF 
+ 6274 5125 F30F7F85 		movdqu	%xmm0, -2544(%rbp)
+ 6274      10F6FFFF 
+ 6275              	.LBB2028:
+ 6276              	.LBB2029:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6277              		.loc 3 1278 0
+ 6278 512d 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 6278      00000000 
+ 6279 5135 F30F6F8D 		movdqu	-2544(%rbp), %xmm1
+ 6279      10F6FFFF 
+ 6280 513d F30F7F8D 		movdqu	%xmm1, -2512(%rbp)
+ 6280      30F6FFFF 
+ 6281 5145 F30F7F85 		movdqu	%xmm0, -2528(%rbp)
+ 6281      20F6FFFF 
+ 6282 514d F30F6F85 		movdqu	-2512(%rbp), %xmm0
+ 6282      30F6FFFF 
+ 6283 5155 F30F7F85 		movdqu	%xmm0, -2480(%rbp)
+ 6283      50F6FFFF 
+ 6284 515d F30F6F85 		movdqu	-2528(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 216
+
+
+ 6284      20F6FFFF 
+ 6285 5165 F30F7F85 		movdqu	%xmm0, -2496(%rbp)
+ 6285      40F6FFFF 
+ 6286              	.LBB2030:
+ 6287              	.LBB2031:
+ 6288              	.LBB2032:
+ 6289              	.LBB2033:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6290              		.loc 1 529 0
+ 6291 516d F30F6F8D 		movdqu	-2496(%rbp), %xmm1
+ 6291      40F6FFFF 
+ 6292 5175 F30F6F85 		movdqu	-2480(%rbp), %xmm0
+ 6292      50F6FFFF 
+ 6293 517d 660F3800 		pshufb	%xmm1, %xmm0
+ 6293      C1
+ 6294              	.LBE2033:
+ 6295              	.LBE2032:
+ 6296              	.LBE2031:
+ 6297              	.LBE2030:
+ 6298              	.LBE2029:
+ 6299              	.LBE2028:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6300              		.loc 3 1568 0
+ 6301 5182 660F7F85 		movdqa	%xmm0, -5392(%rbp)
+ 6301      F0EAFFFF 
+ 6302 518a 660F6F85 		movdqa	-5392(%rbp), %xmm0
+ 6302      F0EAFFFF 
+ 6303 5192 660FEF85 		pxor	-2640(%rbp), %xmm0
+ 6303      B0F5FFFF 
+ 6304 519a F30F7F85 		movdqu	%xmm0, -2640(%rbp)
+ 6304      B0F5FFFF 
+ 6305 51a2 660F6F85 		movdqa	-5392(%rbp), %xmm0
+ 6305      F0EAFFFF 
+ 6306 51aa F30F7F85 		movdqu	%xmm0, -2464(%rbp)
+ 6306      60F6FFFF 
+ 6307              	.LBB2034:
+ 6308              	.LBB2035:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6309              		.loc 3 1278 0
+ 6310 51b2 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 6310      00000000 
+ 6311 51ba F30F6F8D 		movdqu	-2464(%rbp), %xmm1
+ 6311      60F6FFFF 
+ 6312 51c2 F30F7F8D 		movdqu	%xmm1, -2432(%rbp)
+ 6312      80F6FFFF 
+ 6313 51ca F30F7F85 		movdqu	%xmm0, -2448(%rbp)
+ 6313      70F6FFFF 
+ 6314 51d2 F30F6F85 		movdqu	-2432(%rbp), %xmm0
+ 6314      80F6FFFF 
+ 6315 51da F30F7F85 		movdqu	%xmm0, -2400(%rbp)
+ 6315      A0F6FFFF 
+ 6316 51e2 F30F6F85 		movdqu	-2448(%rbp), %xmm0
+ 6316      70F6FFFF 
+ 6317 51ea F30F7F85 		movdqu	%xmm0, -2416(%rbp)
+ 6317      90F6FFFF 
+ 6318              	.LBB2036:
+ 6319              	.LBB2037:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 217
+
+
+ 6320              	.LBB2038:
+ 6321              	.LBB2039:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6322              		.loc 1 529 0
+ 6323 51f2 F30F6F8D 		movdqu	-2416(%rbp), %xmm1
+ 6323      90F6FFFF 
+ 6324 51fa F30F6F85 		movdqu	-2400(%rbp), %xmm0
+ 6324      A0F6FFFF 
+ 6325 5202 660F3800 		pshufb	%xmm1, %xmm0
+ 6325      C1
+ 6326              	.LBE2039:
+ 6327              	.LBE2038:
+ 6328              	.LBE2037:
+ 6329              	.LBE2036:
+ 6330              	.LBE2035:
+ 6331              	.LBE2034:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6332              		.loc 3 1569 0
+ 6333 5207 660F7F85 		movdqa	%xmm0, -5392(%rbp)
+ 6333      F0EAFFFF 
+ 6334 520f 660F6F85 		movdqa	-5392(%rbp), %xmm0
+ 6334      F0EAFFFF 
+ 6335 5217 660FEF85 		pxor	-2640(%rbp), %xmm0
+ 6335      B0F5FFFF 
+ 6336 521f F30F7F85 		movdqu	%xmm0, -2640(%rbp)
+ 6336      B0F5FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 6337              		.loc 3 1571 0
+ 6338 5227 F30F6F85 		movdqu	-2640(%rbp), %xmm0
+ 6338      B0F5FFFF 
+ 6339              	.LBE2021:
+ 6340              	.LBE2020:
+ 6341              		.loc 3 1932 0
+ 6342 522f F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 6342      D0EBFFFF 
+ 6343 5237 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 6343      D0EBFFFF 
+ 6344 523f F30F7F85 		movdqu	%xmm0, -2368(%rbp)
+ 6344      C0F6FFFF 
+ 6345 5247 F30F6F85 		movdqu	-5136(%rbp), %xmm0
+ 6345      F0EBFFFF 
+ 6346 524f F30F7F85 		movdqu	%xmm0, -2384(%rbp)
+ 6346      B0F6FFFF 
+ 6347              	.LBB2040:
+ 6348              	.LBB2041:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 6349              		.loc 3 178 0
+ 6350 5257 F30F6F85 		movdqu	-2384(%rbp), %xmm0
+ 6350      B0F6FFFF 
+ 6351 525f F30F6F8D 		movdqu	-2368(%rbp), %xmm1
+ 6351      C0F6FFFF 
+ 6352 5267 660FEFC1 		pxor	%xmm1, %xmm0
+ 6353              	.LBE2041:
+ 6354              	.LBE2040:
+ 6355              		.loc 3 1932 0
+ 6356 526b F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 6356      D0EBFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 218
+
+
+ 6357 5273 488B85C8 		movq	-5176(%rbp), %rax
+ 6357      EBFFFF
+ 6358 527a 4883E880 		subq	$-128, %rax
+ 6359 527e F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 6359      D0EBFFFF 
+ 6360 5286 F30F7F00 		movdqu	%xmm0, (%rax)
+ 6361 528a F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 6361      D0EBFFFF 
+ 6362 5292 F30F7F85 		movdqu	%xmm0, -2352(%rbp)
+ 6362      D0F6FFFF 
+ 6363              	.LBB2042:
+ 6364              	.LBB2043:
+1649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 6365              		.loc 3 1649 0
+ 6366 529a F30F6F85 		movdqu	-2352(%rbp), %xmm0
+ 6366      D0F6FFFF 
+ 6367 52a2 660F7F85 		movdqa	%xmm0, -5376(%rbp)
+ 6367      00EBFFFF 
+ 6368 52aa 660F6F85 		movdqa	-5376(%rbp), %xmm0
+ 6368      00EBFFFF 
+ 6369 52b2 F30F7F85 		movdqu	%xmm0, -2320(%rbp)
+ 6369      F0F6FFFF 
+ 6370              	.LBB2044:
+ 6371              	.LBB2045:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 6372              		.loc 1 852 0
+ 6373 52ba F30F6F85 		movdqu	-2320(%rbp), %xmm0
+ 6373      F0F6FFFF 
+ 6374 52c2 660F3ADF 		aeskeygenassist	$0, %xmm0, %xmm0
+ 6374      C000
+ 6375              	.LBE2045:
+ 6376              	.LBE2044:
+1650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, 0);
+ 6377              		.loc 3 1650 0
+ 6378 52c8 660F7F85 		movdqa	%xmm0, -5376(%rbp)
+ 6378      00EBFFFF 
+ 6379 52d0 660F6F85 		movdqa	-5376(%rbp), %xmm0
+ 6379      00EBFFFF 
+ 6380 52d8 F30F7F85 		movdqu	%xmm0, -2304(%rbp)
+ 6380      00F7FFFF 
+ 6381 52e0 F30F6F85 		movdqu	-2304(%rbp), %xmm0
+ 6381      00F7FFFF 
+ 6382 52e8 F30F7F85 		movdqu	%xmm0, -2272(%rbp)
+ 6382      20F7FFFF 
+ 6383              	.LBB2046:
+ 6384              	.LBB2047:
+ 6385              	.LBB2048:
+ 6386              	.LBB2049:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 6387              		.loc 1 450 0
+ 6388 52f0 F30F6F85 		movdqu	-2272(%rbp), %xmm0
+ 6388      20F7FFFF 
+ 6389 52f8 660F70C0 		pshufd	$170, %xmm0, %xmm0
+ 6389      AA
+ 6390              	.LBE2049:
+ 6391              	.LBE2048:
+ 6392              	.LBE2047:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 219
+
+
+ 6393              	.LBE2046:
+ 6394              	.LBE2043:
+ 6395              	.LBE2042:
+1933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(9);         /* k36 : k37 : k38 : k39 */
+ 6396              		.loc 3 1933 0
+ 6397 52fd F30F7F85 		movdqu	%xmm0, -5136(%rbp)
+ 6397      F0EBFFFF 
+ 6398 5305 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 6398      E0EBFFFF 
+ 6399 530d F30F7F85 		movdqu	%xmm0, -2256(%rbp)
+ 6399      30F7FFFF 
+ 6400              	.LBB2050:
+ 6401              	.LBB2051:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 6402              		.loc 3 1565 0
+ 6403 5315 F30F6F85 		movdqu	-2256(%rbp), %xmm0
+ 6403      30F7FFFF 
+ 6404 531d 660F7F85 		movdqa	%xmm0, -5360(%rbp)
+ 6404      10EBFFFF 
+ 6405 5325 660F6F85 		movdqa	-5360(%rbp), %xmm0
+ 6405      10EBFFFF 
+ 6406 532d F30F7F85 		movdqu	%xmm0, -2240(%rbp)
+ 6406      40F7FFFF 
+ 6407              	.LBB2052:
+ 6408              	.LBB2053:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6409              		.loc 3 1278 0
+ 6410 5335 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 6410      00000000 
+ 6411 533d F30F6F8D 		movdqu	-2240(%rbp), %xmm1
+ 6411      40F7FFFF 
+ 6412 5345 F30F7F8D 		movdqu	%xmm1, -2208(%rbp)
+ 6412      60F7FFFF 
+ 6413 534d F30F7F85 		movdqu	%xmm0, -2224(%rbp)
+ 6413      50F7FFFF 
+ 6414 5355 F30F6F85 		movdqu	-2208(%rbp), %xmm0
+ 6414      60F7FFFF 
+ 6415 535d F30F7F85 		movdqu	%xmm0, -2176(%rbp)
+ 6415      80F7FFFF 
+ 6416 5365 F30F6F85 		movdqu	-2224(%rbp), %xmm0
+ 6416      50F7FFFF 
+ 6417 536d F30F7F85 		movdqu	%xmm0, -2192(%rbp)
+ 6417      70F7FFFF 
+ 6418              	.LBB2054:
+ 6419              	.LBB2055:
+ 6420              	.LBB2056:
+ 6421              	.LBB2057:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6422              		.loc 1 529 0
+ 6423 5375 F30F6F8D 		movdqu	-2192(%rbp), %xmm1
+ 6423      70F7FFFF 
+ 6424 537d F30F6F85 		movdqu	-2176(%rbp), %xmm0
+ 6424      80F7FFFF 
+ 6425 5385 660F3800 		pshufb	%xmm1, %xmm0
+ 6425      C1
+ 6426              	.LBE2057:
+ 6427              	.LBE2056:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 220
+
+
+ 6428              	.LBE2055:
+ 6429              	.LBE2054:
+ 6430              	.LBE2053:
+ 6431              	.LBE2052:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6432              		.loc 3 1567 0
+ 6433 538a 660F7F85 		movdqa	%xmm0, -5360(%rbp)
+ 6433      10EBFFFF 
+ 6434 5392 660F6F85 		movdqa	-5360(%rbp), %xmm0
+ 6434      10EBFFFF 
+ 6435 539a 660FEF85 		pxor	-2256(%rbp), %xmm0
+ 6435      30F7FFFF 
+ 6436 53a2 F30F7F85 		movdqu	%xmm0, -2256(%rbp)
+ 6436      30F7FFFF 
+ 6437 53aa 660F6F85 		movdqa	-5360(%rbp), %xmm0
+ 6437      10EBFFFF 
+ 6438 53b2 F30F7F85 		movdqu	%xmm0, -2160(%rbp)
+ 6438      90F7FFFF 
+ 6439              	.LBB2058:
+ 6440              	.LBB2059:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6441              		.loc 3 1278 0
+ 6442 53ba 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 6442      00000000 
+ 6443 53c2 F30F6F8D 		movdqu	-2160(%rbp), %xmm1
+ 6443      90F7FFFF 
+ 6444 53ca F30F7F8D 		movdqu	%xmm1, -2128(%rbp)
+ 6444      B0F7FFFF 
+ 6445 53d2 F30F7F85 		movdqu	%xmm0, -2144(%rbp)
+ 6445      A0F7FFFF 
+ 6446 53da F30F6F85 		movdqu	-2128(%rbp), %xmm0
+ 6446      B0F7FFFF 
+ 6447 53e2 F30F7F85 		movdqu	%xmm0, -2096(%rbp)
+ 6447      D0F7FFFF 
+ 6448 53ea F30F6F85 		movdqu	-2144(%rbp), %xmm0
+ 6448      A0F7FFFF 
+ 6449 53f2 F30F7F85 		movdqu	%xmm0, -2112(%rbp)
+ 6449      C0F7FFFF 
+ 6450              	.LBB2060:
+ 6451              	.LBB2061:
+ 6452              	.LBB2062:
+ 6453              	.LBB2063:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6454              		.loc 1 529 0
+ 6455 53fa F30F6F8D 		movdqu	-2112(%rbp), %xmm1
+ 6455      C0F7FFFF 
+ 6456 5402 F30F6F85 		movdqu	-2096(%rbp), %xmm0
+ 6456      D0F7FFFF 
+ 6457 540a 660F3800 		pshufb	%xmm1, %xmm0
+ 6457      C1
+ 6458              	.LBE2063:
+ 6459              	.LBE2062:
+ 6460              	.LBE2061:
+ 6461              	.LBE2060:
+ 6462              	.LBE2059:
+ 6463              	.LBE2058:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+
GAS LISTING /tmp/ccPaCTqg.s 			page 221
+
+
+ 6464              		.loc 3 1568 0
+ 6465 540f 660F7F85 		movdqa	%xmm0, -5360(%rbp)
+ 6465      10EBFFFF 
+ 6466 5417 660F6F85 		movdqa	-5360(%rbp), %xmm0
+ 6466      10EBFFFF 
+ 6467 541f 660FEF85 		pxor	-2256(%rbp), %xmm0
+ 6467      30F7FFFF 
+ 6468 5427 F30F7F85 		movdqu	%xmm0, -2256(%rbp)
+ 6468      30F7FFFF 
+ 6469 542f 660F6F85 		movdqa	-5360(%rbp), %xmm0
+ 6469      10EBFFFF 
+ 6470 5437 F30F7F85 		movdqu	%xmm0, -2080(%rbp)
+ 6470      E0F7FFFF 
+ 6471              	.LBB2064:
+ 6472              	.LBB2065:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6473              		.loc 3 1278 0
+ 6474 543f 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 6474      00000000 
+ 6475 5447 F30F6F8D 		movdqu	-2080(%rbp), %xmm1
+ 6475      E0F7FFFF 
+ 6476 544f F30F7F8D 		movdqu	%xmm1, -2048(%rbp)
+ 6476      00F8FFFF 
+ 6477 5457 F30F7F85 		movdqu	%xmm0, -2064(%rbp)
+ 6477      F0F7FFFF 
+ 6478 545f F30F6F85 		movdqu	-2048(%rbp), %xmm0
+ 6478      00F8FFFF 
+ 6479 5467 F30F7F85 		movdqu	%xmm0, -2016(%rbp)
+ 6479      20F8FFFF 
+ 6480 546f F30F6F85 		movdqu	-2064(%rbp), %xmm0
+ 6480      F0F7FFFF 
+ 6481 5477 F30F7F85 		movdqu	%xmm0, -2032(%rbp)
+ 6481      10F8FFFF 
+ 6482              	.LBB2066:
+ 6483              	.LBB2067:
+ 6484              	.LBB2068:
+ 6485              	.LBB2069:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6486              		.loc 1 529 0
+ 6487 547f F30F6F8D 		movdqu	-2032(%rbp), %xmm1
+ 6487      10F8FFFF 
+ 6488 5487 F30F6F85 		movdqu	-2016(%rbp), %xmm0
+ 6488      20F8FFFF 
+ 6489 548f 660F3800 		pshufb	%xmm1, %xmm0
+ 6489      C1
+ 6490              	.LBE2069:
+ 6491              	.LBE2068:
+ 6492              	.LBE2067:
+ 6493              	.LBE2066:
+ 6494              	.LBE2065:
+ 6495              	.LBE2064:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6496              		.loc 3 1569 0
+ 6497 5494 660F7F85 		movdqa	%xmm0, -5360(%rbp)
+ 6497      10EBFFFF 
+ 6498 549c 660F6F85 		movdqa	-5360(%rbp), %xmm0
+ 6498      10EBFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 222
+
+
+ 6499 54a4 660FEF85 		pxor	-2256(%rbp), %xmm0
+ 6499      30F7FFFF 
+ 6500 54ac F30F7F85 		movdqu	%xmm0, -2256(%rbp)
+ 6500      30F7FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 6501              		.loc 3 1571 0
+ 6502 54b4 F30F6F85 		movdqu	-2256(%rbp), %xmm0
+ 6502      30F7FFFF 
+ 6503              	.LBE2051:
+ 6504              	.LBE2050:
+ 6505              		.loc 3 1933 0
+ 6506 54bc F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 6506      E0EBFFFF 
+ 6507 54c4 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 6507      E0EBFFFF 
+ 6508 54cc F30F7F85 		movdqu	%xmm0, -1984(%rbp)
+ 6508      40F8FFFF 
+ 6509 54d4 F30F6F85 		movdqu	-5136(%rbp), %xmm0
+ 6509      F0EBFFFF 
+ 6510 54dc F30F7F85 		movdqu	%xmm0, -2000(%rbp)
+ 6510      30F8FFFF 
+ 6511              	.LBB2070:
+ 6512              	.LBB2071:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 6513              		.loc 3 178 0
+ 6514 54e4 F30F6F85 		movdqu	-2000(%rbp), %xmm0
+ 6514      30F8FFFF 
+ 6515 54ec F30F6F8D 		movdqu	-1984(%rbp), %xmm1
+ 6515      40F8FFFF 
+ 6516 54f4 660FEFC1 		pxor	%xmm1, %xmm0
+ 6517              	.LBE2071:
+ 6518              	.LBE2070:
+ 6519              		.loc 3 1933 0
+ 6520 54f8 F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 6520      E0EBFFFF 
+ 6521 5500 488B85C8 		movq	-5176(%rbp), %rax
+ 6521      EBFFFF
+ 6522 5507 48059000 		addq	$144, %rax
+ 6522      0000
+ 6523 550d F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 6523      E0EBFFFF 
+ 6524 5515 F30F7F00 		movdqu	%xmm0, (%rax)
+ 6525 5519 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 6525      E0EBFFFF 
+ 6526 5521 F30F7F85 		movdqu	%xmm0, -1952(%rbp)
+ 6526      60F8FFFF 
+ 6527              	.LBB2072:
+ 6528              	.LBB2073:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 6529              		.loc 3 1673 0
+ 6530 5529 F30F6F85 		movdqu	-1952(%rbp), %xmm0
+ 6530      60F8FFFF 
+ 6531 5531 660F7F85 		movdqa	%xmm0, -5344(%rbp)
+ 6531      20EBFFFF 
+ 6532 5539 660F6F85 		movdqa	-5344(%rbp), %xmm0
+ 6532      20EBFFFF 
+ 6533 5541 F30F7F85 		movdqu	%xmm0, -1920(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 223
+
+
+ 6533      80F8FFFF 
+ 6534              	.LBB2074:
+ 6535              	.LBB2075:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 6536              		.loc 1 852 0
+ 6537 5549 F30F6F85 		movdqu	-1920(%rbp), %xmm0
+ 6537      80F8FFFF 
+ 6538 5551 660F3ADF 		aeskeygenassist	$16, %xmm0, %xmm0
+ 6538      C010
+ 6539              	.LBE2075:
+ 6540              	.LBE2074:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 6541              		.loc 3 1674 0
+ 6542 5557 660F7F85 		movdqa	%xmm0, -5344(%rbp)
+ 6542      20EBFFFF 
+ 6543 555f 660F6F85 		movdqa	-5344(%rbp), %xmm0
+ 6543      20EBFFFF 
+ 6544 5567 F30F7F85 		movdqu	%xmm0, -1904(%rbp)
+ 6544      90F8FFFF 
+ 6545 556f F30F6F85 		movdqu	-1904(%rbp), %xmm0
+ 6545      90F8FFFF 
+ 6546 5577 F30F7F85 		movdqu	%xmm0, -1872(%rbp)
+ 6546      B0F8FFFF 
+ 6547              	.LBB2076:
+ 6548              	.LBB2077:
+ 6549              	.LBB2078:
+ 6550              	.LBB2079:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 6551              		.loc 1 450 0
+ 6552 557f F30F6F85 		movdqu	-1872(%rbp), %xmm0
+ 6552      B0F8FFFF 
+ 6553 5587 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 6553      FF
+ 6554              	.LBE2079:
+ 6555              	.LBE2078:
+ 6556              	.LBE2077:
+ 6557              	.LBE2076:
+ 6558              	.LBE2073:
+ 6559              	.LBE2072:
+1934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(10,0x10);   /* k40 : k41 : k42 : k43 */
+ 6560              		.loc 3 1934 0
+ 6561 558c F30F7F85 		movdqu	%xmm0, -5136(%rbp)
+ 6561      F0EBFFFF 
+ 6562 5594 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 6562      D0EBFFFF 
+ 6563 559c F30F7F85 		movdqu	%xmm0, -1856(%rbp)
+ 6563      C0F8FFFF 
+ 6564              	.LBB2080:
+ 6565              	.LBB2081:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 6566              		.loc 3 1565 0
+ 6567 55a4 F30F6F85 		movdqu	-1856(%rbp), %xmm0
+ 6567      C0F8FFFF 
+ 6568 55ac 660F7F85 		movdqa	%xmm0, -5328(%rbp)
+ 6568      30EBFFFF 
+ 6569 55b4 660F6F85 		movdqa	-5328(%rbp), %xmm0
+ 6569      30EBFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 224
+
+
+ 6570 55bc F30F7F85 		movdqu	%xmm0, -1840(%rbp)
+ 6570      D0F8FFFF 
+ 6571              	.LBB2082:
+ 6572              	.LBB2083:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6573              		.loc 3 1278 0
+ 6574 55c4 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 6574      00000000 
+ 6575 55cc F30F6F8D 		movdqu	-1840(%rbp), %xmm1
+ 6575      D0F8FFFF 
+ 6576 55d4 F30F7F8D 		movdqu	%xmm1, -1808(%rbp)
+ 6576      F0F8FFFF 
+ 6577 55dc F30F7F85 		movdqu	%xmm0, -1824(%rbp)
+ 6577      E0F8FFFF 
+ 6578 55e4 F30F6F85 		movdqu	-1808(%rbp), %xmm0
+ 6578      F0F8FFFF 
+ 6579 55ec F30F7F85 		movdqu	%xmm0, -1776(%rbp)
+ 6579      10F9FFFF 
+ 6580 55f4 F30F6F85 		movdqu	-1824(%rbp), %xmm0
+ 6580      E0F8FFFF 
+ 6581 55fc F30F7F85 		movdqu	%xmm0, -1792(%rbp)
+ 6581      00F9FFFF 
+ 6582              	.LBB2084:
+ 6583              	.LBB2085:
+ 6584              	.LBB2086:
+ 6585              	.LBB2087:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6586              		.loc 1 529 0
+ 6587 5604 F30F6F8D 		movdqu	-1792(%rbp), %xmm1
+ 6587      00F9FFFF 
+ 6588 560c F30F6F85 		movdqu	-1776(%rbp), %xmm0
+ 6588      10F9FFFF 
+ 6589 5614 660F3800 		pshufb	%xmm1, %xmm0
+ 6589      C1
+ 6590              	.LBE2087:
+ 6591              	.LBE2086:
+ 6592              	.LBE2085:
+ 6593              	.LBE2084:
+ 6594              	.LBE2083:
+ 6595              	.LBE2082:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6596              		.loc 3 1567 0
+ 6597 5619 660F7F85 		movdqa	%xmm0, -5328(%rbp)
+ 6597      30EBFFFF 
+ 6598 5621 660F6F85 		movdqa	-5328(%rbp), %xmm0
+ 6598      30EBFFFF 
+ 6599 5629 660FEF85 		pxor	-1856(%rbp), %xmm0
+ 6599      C0F8FFFF 
+ 6600 5631 F30F7F85 		movdqu	%xmm0, -1856(%rbp)
+ 6600      C0F8FFFF 
+ 6601 5639 660F6F85 		movdqa	-5328(%rbp), %xmm0
+ 6601      30EBFFFF 
+ 6602 5641 F30F7F85 		movdqu	%xmm0, -1760(%rbp)
+ 6602      20F9FFFF 
+ 6603              	.LBB2088:
+ 6604              	.LBB2089:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+
GAS LISTING /tmp/ccPaCTqg.s 			page 225
+
+
+ 6605              		.loc 3 1278 0
+ 6606 5649 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 6606      00000000 
+ 6607 5651 F30F6F8D 		movdqu	-1760(%rbp), %xmm1
+ 6607      20F9FFFF 
+ 6608 5659 F30F7F8D 		movdqu	%xmm1, -1728(%rbp)
+ 6608      40F9FFFF 
+ 6609 5661 F30F7F85 		movdqu	%xmm0, -1744(%rbp)
+ 6609      30F9FFFF 
+ 6610 5669 F30F6F85 		movdqu	-1728(%rbp), %xmm0
+ 6610      40F9FFFF 
+ 6611 5671 F30F7F85 		movdqu	%xmm0, -1696(%rbp)
+ 6611      60F9FFFF 
+ 6612 5679 F30F6F85 		movdqu	-1744(%rbp), %xmm0
+ 6612      30F9FFFF 
+ 6613 5681 F30F7F85 		movdqu	%xmm0, -1712(%rbp)
+ 6613      50F9FFFF 
+ 6614              	.LBB2090:
+ 6615              	.LBB2091:
+ 6616              	.LBB2092:
+ 6617              	.LBB2093:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6618              		.loc 1 529 0
+ 6619 5689 F30F6F8D 		movdqu	-1712(%rbp), %xmm1
+ 6619      50F9FFFF 
+ 6620 5691 F30F6F85 		movdqu	-1696(%rbp), %xmm0
+ 6620      60F9FFFF 
+ 6621 5699 660F3800 		pshufb	%xmm1, %xmm0
+ 6621      C1
+ 6622              	.LBE2093:
+ 6623              	.LBE2092:
+ 6624              	.LBE2091:
+ 6625              	.LBE2090:
+ 6626              	.LBE2089:
+ 6627              	.LBE2088:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6628              		.loc 3 1568 0
+ 6629 569e 660F7F85 		movdqa	%xmm0, -5328(%rbp)
+ 6629      30EBFFFF 
+ 6630 56a6 660F6F85 		movdqa	-5328(%rbp), %xmm0
+ 6630      30EBFFFF 
+ 6631 56ae 660FEF85 		pxor	-1856(%rbp), %xmm0
+ 6631      C0F8FFFF 
+ 6632 56b6 F30F7F85 		movdqu	%xmm0, -1856(%rbp)
+ 6632      C0F8FFFF 
+ 6633 56be 660F6F85 		movdqa	-5328(%rbp), %xmm0
+ 6633      30EBFFFF 
+ 6634 56c6 F30F7F85 		movdqu	%xmm0, -1680(%rbp)
+ 6634      70F9FFFF 
+ 6635              	.LBB2094:
+ 6636              	.LBB2095:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6637              		.loc 3 1278 0
+ 6638 56ce 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 6638      00000000 
+ 6639 56d6 F30F6F8D 		movdqu	-1680(%rbp), %xmm1
+ 6639      70F9FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 226
+
+
+ 6640 56de F30F7F8D 		movdqu	%xmm1, -1648(%rbp)
+ 6640      90F9FFFF 
+ 6641 56e6 F30F7F85 		movdqu	%xmm0, -1664(%rbp)
+ 6641      80F9FFFF 
+ 6642 56ee F30F6F85 		movdqu	-1648(%rbp), %xmm0
+ 6642      90F9FFFF 
+ 6643 56f6 F30F7F85 		movdqu	%xmm0, -1616(%rbp)
+ 6643      B0F9FFFF 
+ 6644 56fe F30F6F85 		movdqu	-1664(%rbp), %xmm0
+ 6644      80F9FFFF 
+ 6645 5706 F30F7F85 		movdqu	%xmm0, -1632(%rbp)
+ 6645      A0F9FFFF 
+ 6646              	.LBB2096:
+ 6647              	.LBB2097:
+ 6648              	.LBB2098:
+ 6649              	.LBB2099:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6650              		.loc 1 529 0
+ 6651 570e F30F6F8D 		movdqu	-1632(%rbp), %xmm1
+ 6651      A0F9FFFF 
+ 6652 5716 F30F6F85 		movdqu	-1616(%rbp), %xmm0
+ 6652      B0F9FFFF 
+ 6653 571e 660F3800 		pshufb	%xmm1, %xmm0
+ 6653      C1
+ 6654              	.LBE2099:
+ 6655              	.LBE2098:
+ 6656              	.LBE2097:
+ 6657              	.LBE2096:
+ 6658              	.LBE2095:
+ 6659              	.LBE2094:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6660              		.loc 3 1569 0
+ 6661 5723 660F7F85 		movdqa	%xmm0, -5328(%rbp)
+ 6661      30EBFFFF 
+ 6662 572b 660F6F85 		movdqa	-5328(%rbp), %xmm0
+ 6662      30EBFFFF 
+ 6663 5733 660FEF85 		pxor	-1856(%rbp), %xmm0
+ 6663      C0F8FFFF 
+ 6664 573b F30F7F85 		movdqu	%xmm0, -1856(%rbp)
+ 6664      C0F8FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 6665              		.loc 3 1571 0
+ 6666 5743 F30F6F85 		movdqu	-1856(%rbp), %xmm0
+ 6666      C0F8FFFF 
+ 6667              	.LBE2081:
+ 6668              	.LBE2080:
+ 6669              		.loc 3 1934 0
+ 6670 574b F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 6670      D0EBFFFF 
+ 6671 5753 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 6671      D0EBFFFF 
+ 6672 575b F30F7F85 		movdqu	%xmm0, -1584(%rbp)
+ 6672      D0F9FFFF 
+ 6673 5763 F30F6F85 		movdqu	-5136(%rbp), %xmm0
+ 6673      F0EBFFFF 
+ 6674 576b F30F7F85 		movdqu	%xmm0, -1600(%rbp)
+ 6674      C0F9FFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 227
+
+
+ 6675              	.LBB2100:
+ 6676              	.LBB2101:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 6677              		.loc 3 178 0
+ 6678 5773 F30F6F85 		movdqu	-1600(%rbp), %xmm0
+ 6678      C0F9FFFF 
+ 6679 577b F30F6F8D 		movdqu	-1584(%rbp), %xmm1
+ 6679      D0F9FFFF 
+ 6680 5783 660FEFC1 		pxor	%xmm1, %xmm0
+ 6681              	.LBE2101:
+ 6682              	.LBE2100:
+ 6683              		.loc 3 1934 0
+ 6684 5787 F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 6684      D0EBFFFF 
+ 6685 578f 488B85C8 		movq	-5176(%rbp), %rax
+ 6685      EBFFFF
+ 6686 5796 4805A000 		addq	$160, %rax
+ 6686      0000
+ 6687 579c F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 6687      D0EBFFFF 
+ 6688 57a4 F30F7F00 		movdqu	%xmm0, (%rax)
+ 6689 57a8 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 6689      D0EBFFFF 
+ 6690 57b0 F30F7F85 		movdqu	%xmm0, -1568(%rbp)
+ 6690      E0F9FFFF 
+ 6691              	.LBB2102:
+ 6692              	.LBB2103:
+1649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 6693              		.loc 3 1649 0
+ 6694 57b8 F30F6F85 		movdqu	-1568(%rbp), %xmm0
+ 6694      E0F9FFFF 
+ 6695 57c0 660F7F85 		movdqa	%xmm0, -5312(%rbp)
+ 6695      40EBFFFF 
+ 6696 57c8 660F6F85 		movdqa	-5312(%rbp), %xmm0
+ 6696      40EBFFFF 
+ 6697 57d0 F30F7F85 		movdqu	%xmm0, -1536(%rbp)
+ 6697      00FAFFFF 
+ 6698              	.LBB2104:
+ 6699              	.LBB2105:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 6700              		.loc 1 852 0
+ 6701 57d8 F30F6F85 		movdqu	-1536(%rbp), %xmm0
+ 6701      00FAFFFF 
+ 6702 57e0 660F3ADF 		aeskeygenassist	$0, %xmm0, %xmm0
+ 6702      C000
+ 6703              	.LBE2105:
+ 6704              	.LBE2104:
+1650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, 0);
+ 6705              		.loc 3 1650 0
+ 6706 57e6 660F7F85 		movdqa	%xmm0, -5312(%rbp)
+ 6706      40EBFFFF 
+ 6707 57ee 660F6F85 		movdqa	-5312(%rbp), %xmm0
+ 6707      40EBFFFF 
+ 6708 57f6 F30F7F85 		movdqu	%xmm0, -1520(%rbp)
+ 6708      10FAFFFF 
+ 6709 57fe F30F6F85 		movdqu	-1520(%rbp), %xmm0
+ 6709      10FAFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 228
+
+
+ 6710 5806 F30F7F85 		movdqu	%xmm0, -1488(%rbp)
+ 6710      30FAFFFF 
+ 6711              	.LBB2106:
+ 6712              	.LBB2107:
+ 6713              	.LBB2108:
+ 6714              	.LBB2109:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 6715              		.loc 1 450 0
+ 6716 580e F30F6F85 		movdqu	-1488(%rbp), %xmm0
+ 6716      30FAFFFF 
+ 6717 5816 660F70C0 		pshufd	$170, %xmm0, %xmm0
+ 6717      AA
+ 6718              	.LBE2109:
+ 6719              	.LBE2108:
+ 6720              	.LBE2107:
+ 6721              	.LBE2106:
+ 6722              	.LBE2103:
+ 6723              	.LBE2102:
+1935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(11);        /* k44 : k45 : k46 : k47 */
+ 6724              		.loc 3 1935 0
+ 6725 581b F30F7F85 		movdqu	%xmm0, -5136(%rbp)
+ 6725      F0EBFFFF 
+ 6726 5823 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 6726      E0EBFFFF 
+ 6727 582b F30F7F85 		movdqu	%xmm0, -1472(%rbp)
+ 6727      40FAFFFF 
+ 6728              	.LBB2110:
+ 6729              	.LBB2111:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 6730              		.loc 3 1565 0
+ 6731 5833 F30F6F85 		movdqu	-1472(%rbp), %xmm0
+ 6731      40FAFFFF 
+ 6732 583b 660F7F85 		movdqa	%xmm0, -5296(%rbp)
+ 6732      50EBFFFF 
+ 6733 5843 660F6F85 		movdqa	-5296(%rbp), %xmm0
+ 6733      50EBFFFF 
+ 6734 584b F30F7F85 		movdqu	%xmm0, -1456(%rbp)
+ 6734      50FAFFFF 
+ 6735              	.LBB2112:
+ 6736              	.LBB2113:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6737              		.loc 3 1278 0
+ 6738 5853 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 6738      00000000 
+ 6739 585b F30F6F8D 		movdqu	-1456(%rbp), %xmm1
+ 6739      50FAFFFF 
+ 6740 5863 F30F7F8D 		movdqu	%xmm1, -1424(%rbp)
+ 6740      70FAFFFF 
+ 6741 586b F30F7F85 		movdqu	%xmm0, -1440(%rbp)
+ 6741      60FAFFFF 
+ 6742 5873 F30F6F85 		movdqu	-1424(%rbp), %xmm0
+ 6742      70FAFFFF 
+ 6743 587b F30F7F85 		movdqu	%xmm0, -1392(%rbp)
+ 6743      90FAFFFF 
+ 6744 5883 F30F6F85 		movdqu	-1440(%rbp), %xmm0
+ 6744      60FAFFFF 
+ 6745 588b F30F7F85 		movdqu	%xmm0, -1408(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 229
+
+
+ 6745      80FAFFFF 
+ 6746              	.LBB2114:
+ 6747              	.LBB2115:
+ 6748              	.LBB2116:
+ 6749              	.LBB2117:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6750              		.loc 1 529 0
+ 6751 5893 F30F6F8D 		movdqu	-1408(%rbp), %xmm1
+ 6751      80FAFFFF 
+ 6752 589b F30F6F85 		movdqu	-1392(%rbp), %xmm0
+ 6752      90FAFFFF 
+ 6753 58a3 660F3800 		pshufb	%xmm1, %xmm0
+ 6753      C1
+ 6754              	.LBE2117:
+ 6755              	.LBE2116:
+ 6756              	.LBE2115:
+ 6757              	.LBE2114:
+ 6758              	.LBE2113:
+ 6759              	.LBE2112:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6760              		.loc 3 1567 0
+ 6761 58a8 660F7F85 		movdqa	%xmm0, -5296(%rbp)
+ 6761      50EBFFFF 
+ 6762 58b0 660F6F85 		movdqa	-5296(%rbp), %xmm0
+ 6762      50EBFFFF 
+ 6763 58b8 660FEF85 		pxor	-1472(%rbp), %xmm0
+ 6763      40FAFFFF 
+ 6764 58c0 F30F7F85 		movdqu	%xmm0, -1472(%rbp)
+ 6764      40FAFFFF 
+ 6765 58c8 660F6F85 		movdqa	-5296(%rbp), %xmm0
+ 6765      50EBFFFF 
+ 6766 58d0 F30F7F85 		movdqu	%xmm0, -1376(%rbp)
+ 6766      A0FAFFFF 
+ 6767              	.LBB2118:
+ 6768              	.LBB2119:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6769              		.loc 3 1278 0
+ 6770 58d8 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 6770      00000000 
+ 6771 58e0 F30F6F8D 		movdqu	-1376(%rbp), %xmm1
+ 6771      A0FAFFFF 
+ 6772 58e8 F30F7F8D 		movdqu	%xmm1, -1344(%rbp)
+ 6772      C0FAFFFF 
+ 6773 58f0 F30F7F85 		movdqu	%xmm0, -1360(%rbp)
+ 6773      B0FAFFFF 
+ 6774 58f8 F30F6F85 		movdqu	-1344(%rbp), %xmm0
+ 6774      C0FAFFFF 
+ 6775 5900 F30F7F85 		movdqu	%xmm0, -1312(%rbp)
+ 6775      E0FAFFFF 
+ 6776 5908 F30F6F85 		movdqu	-1360(%rbp), %xmm0
+ 6776      B0FAFFFF 
+ 6777 5910 F30F7F85 		movdqu	%xmm0, -1328(%rbp)
+ 6777      D0FAFFFF 
+ 6778              	.LBB2120:
+ 6779              	.LBB2121:
+ 6780              	.LBB2122:
+ 6781              	.LBB2123:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 230
+
+
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6782              		.loc 1 529 0
+ 6783 5918 F30F6F8D 		movdqu	-1328(%rbp), %xmm1
+ 6783      D0FAFFFF 
+ 6784 5920 F30F6F85 		movdqu	-1312(%rbp), %xmm0
+ 6784      E0FAFFFF 
+ 6785 5928 660F3800 		pshufb	%xmm1, %xmm0
+ 6785      C1
+ 6786              	.LBE2123:
+ 6787              	.LBE2122:
+ 6788              	.LBE2121:
+ 6789              	.LBE2120:
+ 6790              	.LBE2119:
+ 6791              	.LBE2118:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6792              		.loc 3 1568 0
+ 6793 592d 660F7F85 		movdqa	%xmm0, -5296(%rbp)
+ 6793      50EBFFFF 
+ 6794 5935 660F6F85 		movdqa	-5296(%rbp), %xmm0
+ 6794      50EBFFFF 
+ 6795 593d 660FEF85 		pxor	-1472(%rbp), %xmm0
+ 6795      40FAFFFF 
+ 6796 5945 F30F7F85 		movdqu	%xmm0, -1472(%rbp)
+ 6796      40FAFFFF 
+ 6797 594d 660F6F85 		movdqa	-5296(%rbp), %xmm0
+ 6797      50EBFFFF 
+ 6798 5955 F30F7F85 		movdqu	%xmm0, -1296(%rbp)
+ 6798      F0FAFFFF 
+ 6799              	.LBB2124:
+ 6800              	.LBB2125:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6801              		.loc 3 1278 0
+ 6802 595d 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 6802      00000000 
+ 6803 5965 F30F6F8D 		movdqu	-1296(%rbp), %xmm1
+ 6803      F0FAFFFF 
+ 6804 596d F30F7F8D 		movdqu	%xmm1, -1264(%rbp)
+ 6804      10FBFFFF 
+ 6805 5975 F30F7F85 		movdqu	%xmm0, -1280(%rbp)
+ 6805      00FBFFFF 
+ 6806 597d F30F6F85 		movdqu	-1264(%rbp), %xmm0
+ 6806      10FBFFFF 
+ 6807 5985 F30F7F85 		movdqu	%xmm0, -1232(%rbp)
+ 6807      30FBFFFF 
+ 6808 598d F30F6F85 		movdqu	-1280(%rbp), %xmm0
+ 6808      00FBFFFF 
+ 6809 5995 F30F7F85 		movdqu	%xmm0, -1248(%rbp)
+ 6809      20FBFFFF 
+ 6810              	.LBB2126:
+ 6811              	.LBB2127:
+ 6812              	.LBB2128:
+ 6813              	.LBB2129:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6814              		.loc 1 529 0
+ 6815 599d F30F6F8D 		movdqu	-1248(%rbp), %xmm1
+ 6815      20FBFFFF 
+ 6816 59a5 F30F6F85 		movdqu	-1232(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 231
+
+
+ 6816      30FBFFFF 
+ 6817 59ad 660F3800 		pshufb	%xmm1, %xmm0
+ 6817      C1
+ 6818              	.LBE2129:
+ 6819              	.LBE2128:
+ 6820              	.LBE2127:
+ 6821              	.LBE2126:
+ 6822              	.LBE2125:
+ 6823              	.LBE2124:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6824              		.loc 3 1569 0
+ 6825 59b2 660F7F85 		movdqa	%xmm0, -5296(%rbp)
+ 6825      50EBFFFF 
+ 6826 59ba 660F6F85 		movdqa	-5296(%rbp), %xmm0
+ 6826      50EBFFFF 
+ 6827 59c2 660FEF85 		pxor	-1472(%rbp), %xmm0
+ 6827      40FAFFFF 
+ 6828 59ca F30F7F85 		movdqu	%xmm0, -1472(%rbp)
+ 6828      40FAFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 6829              		.loc 3 1571 0
+ 6830 59d2 F30F6F85 		movdqu	-1472(%rbp), %xmm0
+ 6830      40FAFFFF 
+ 6831              	.LBE2111:
+ 6832              	.LBE2110:
+ 6833              		.loc 3 1935 0
+ 6834 59da F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 6834      E0EBFFFF 
+ 6835 59e2 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 6835      E0EBFFFF 
+ 6836 59ea F30F7F85 		movdqu	%xmm0, -1200(%rbp)
+ 6836      50FBFFFF 
+ 6837 59f2 F30F6F85 		movdqu	-5136(%rbp), %xmm0
+ 6837      F0EBFFFF 
+ 6838 59fa F30F7F85 		movdqu	%xmm0, -1216(%rbp)
+ 6838      40FBFFFF 
+ 6839              	.LBB2130:
+ 6840              	.LBB2131:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 6841              		.loc 3 178 0
+ 6842 5a02 F30F6F85 		movdqu	-1216(%rbp), %xmm0
+ 6842      40FBFFFF 
+ 6843 5a0a F30F6F8D 		movdqu	-1200(%rbp), %xmm1
+ 6843      50FBFFFF 
+ 6844 5a12 660FEFC1 		pxor	%xmm1, %xmm0
+ 6845              	.LBE2131:
+ 6846              	.LBE2130:
+ 6847              		.loc 3 1935 0
+ 6848 5a16 F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 6848      E0EBFFFF 
+ 6849 5a1e 488B85C8 		movq	-5176(%rbp), %rax
+ 6849      EBFFFF
+ 6850 5a25 4805B000 		addq	$176, %rax
+ 6850      0000
+ 6851 5a2b F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 6851      E0EBFFFF 
+ 6852 5a33 F30F7F00 		movdqu	%xmm0, (%rax)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 232
+
+
+ 6853 5a37 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 6853      E0EBFFFF 
+ 6854 5a3f F30F7F85 		movdqu	%xmm0, -1168(%rbp)
+ 6854      70FBFFFF 
+ 6855              	.LBB2132:
+ 6856              	.LBB2133:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 6857              		.loc 3 1673 0
+ 6858 5a47 F30F6F85 		movdqu	-1168(%rbp), %xmm0
+ 6858      70FBFFFF 
+ 6859 5a4f 660F7F85 		movdqa	%xmm0, -5280(%rbp)
+ 6859      60EBFFFF 
+ 6860 5a57 660F6F85 		movdqa	-5280(%rbp), %xmm0
+ 6860      60EBFFFF 
+ 6861 5a5f F30F7F85 		movdqu	%xmm0, -1136(%rbp)
+ 6861      90FBFFFF 
+ 6862              	.LBB2134:
+ 6863              	.LBB2135:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 6864              		.loc 1 852 0
+ 6865 5a67 F30F6F85 		movdqu	-1136(%rbp), %xmm0
+ 6865      90FBFFFF 
+ 6866 5a6f 660F3ADF 		aeskeygenassist	$32, %xmm0, %xmm0
+ 6866      C020
+ 6867              	.LBE2135:
+ 6868              	.LBE2134:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 6869              		.loc 3 1674 0
+ 6870 5a75 660F7F85 		movdqa	%xmm0, -5280(%rbp)
+ 6870      60EBFFFF 
+ 6871 5a7d 660F6F85 		movdqa	-5280(%rbp), %xmm0
+ 6871      60EBFFFF 
+ 6872 5a85 F30F7F85 		movdqu	%xmm0, -1120(%rbp)
+ 6872      A0FBFFFF 
+ 6873 5a8d F30F6F85 		movdqu	-1120(%rbp), %xmm0
+ 6873      A0FBFFFF 
+ 6874 5a95 F30F7F85 		movdqu	%xmm0, -1088(%rbp)
+ 6874      C0FBFFFF 
+ 6875              	.LBB2136:
+ 6876              	.LBB2137:
+ 6877              	.LBB2138:
+ 6878              	.LBB2139:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 6879              		.loc 1 450 0
+ 6880 5a9d F30F6F85 		movdqu	-1088(%rbp), %xmm0
+ 6880      C0FBFFFF 
+ 6881 5aa5 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 6881      FF
+ 6882              	.LBE2139:
+ 6883              	.LBE2138:
+ 6884              	.LBE2137:
+ 6885              	.LBE2136:
+ 6886              	.LBE2133:
+ 6887              	.LBE2132:
+1936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(12,0x20);   /* k48 : k49 : k50 : k51 */
+ 6888              		.loc 3 1936 0
+ 6889 5aaa F30F7F85 		movdqu	%xmm0, -5136(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 233
+
+
+ 6889      F0EBFFFF 
+ 6890 5ab2 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 6890      D0EBFFFF 
+ 6891 5aba F30F7F85 		movdqu	%xmm0, -1072(%rbp)
+ 6891      D0FBFFFF 
+ 6892              	.LBB2140:
+ 6893              	.LBB2141:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 6894              		.loc 3 1565 0
+ 6895 5ac2 F30F6F85 		movdqu	-1072(%rbp), %xmm0
+ 6895      D0FBFFFF 
+ 6896 5aca 660F7F85 		movdqa	%xmm0, -5264(%rbp)
+ 6896      70EBFFFF 
+ 6897 5ad2 660F6F85 		movdqa	-5264(%rbp), %xmm0
+ 6897      70EBFFFF 
+ 6898 5ada F30F7F85 		movdqu	%xmm0, -1056(%rbp)
+ 6898      E0FBFFFF 
+ 6899              	.LBB2142:
+ 6900              	.LBB2143:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6901              		.loc 3 1278 0
+ 6902 5ae2 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 6902      00000000 
+ 6903 5aea F30F6F8D 		movdqu	-1056(%rbp), %xmm1
+ 6903      E0FBFFFF 
+ 6904 5af2 F30F7F8D 		movdqu	%xmm1, -1024(%rbp)
+ 6904      00FCFFFF 
+ 6905 5afa F30F7F85 		movdqu	%xmm0, -1040(%rbp)
+ 6905      F0FBFFFF 
+ 6906 5b02 F30F6F85 		movdqu	-1024(%rbp), %xmm0
+ 6906      00FCFFFF 
+ 6907 5b0a F30F7F85 		movdqu	%xmm0, -992(%rbp)
+ 6907      20FCFFFF 
+ 6908 5b12 F30F6F85 		movdqu	-1040(%rbp), %xmm0
+ 6908      F0FBFFFF 
+ 6909 5b1a F30F7F85 		movdqu	%xmm0, -1008(%rbp)
+ 6909      10FCFFFF 
+ 6910              	.LBB2144:
+ 6911              	.LBB2145:
+ 6912              	.LBB2146:
+ 6913              	.LBB2147:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6914              		.loc 1 529 0
+ 6915 5b22 F30F6F8D 		movdqu	-1008(%rbp), %xmm1
+ 6915      10FCFFFF 
+ 6916 5b2a F30F6F85 		movdqu	-992(%rbp), %xmm0
+ 6916      20FCFFFF 
+ 6917 5b32 660F3800 		pshufb	%xmm1, %xmm0
+ 6917      C1
+ 6918              	.LBE2147:
+ 6919              	.LBE2146:
+ 6920              	.LBE2145:
+ 6921              	.LBE2144:
+ 6922              	.LBE2143:
+ 6923              	.LBE2142:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6924              		.loc 3 1567 0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 234
+
+
+ 6925 5b37 660F7F85 		movdqa	%xmm0, -5264(%rbp)
+ 6925      70EBFFFF 
+ 6926 5b3f 660F6F85 		movdqa	-5264(%rbp), %xmm0
+ 6926      70EBFFFF 
+ 6927 5b47 660FEF85 		pxor	-1072(%rbp), %xmm0
+ 6927      D0FBFFFF 
+ 6928 5b4f F30F7F85 		movdqu	%xmm0, -1072(%rbp)
+ 6928      D0FBFFFF 
+ 6929 5b57 660F6F85 		movdqa	-5264(%rbp), %xmm0
+ 6929      70EBFFFF 
+ 6930 5b5f F30F7F85 		movdqu	%xmm0, -976(%rbp)
+ 6930      30FCFFFF 
+ 6931              	.LBB2148:
+ 6932              	.LBB2149:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6933              		.loc 3 1278 0
+ 6934 5b67 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 6934      00000000 
+ 6935 5b6f F30F6F8D 		movdqu	-976(%rbp), %xmm1
+ 6935      30FCFFFF 
+ 6936 5b77 F30F7F8D 		movdqu	%xmm1, -944(%rbp)
+ 6936      50FCFFFF 
+ 6937 5b7f F30F7F85 		movdqu	%xmm0, -960(%rbp)
+ 6937      40FCFFFF 
+ 6938 5b87 F30F6F85 		movdqu	-944(%rbp), %xmm0
+ 6938      50FCFFFF 
+ 6939 5b8f F30F7F85 		movdqu	%xmm0, -912(%rbp)
+ 6939      70FCFFFF 
+ 6940 5b97 F30F6F85 		movdqu	-960(%rbp), %xmm0
+ 6940      40FCFFFF 
+ 6941 5b9f F30F7F85 		movdqu	%xmm0, -928(%rbp)
+ 6941      60FCFFFF 
+ 6942              	.LBB2150:
+ 6943              	.LBB2151:
+ 6944              	.LBB2152:
+ 6945              	.LBB2153:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6946              		.loc 1 529 0
+ 6947 5ba7 F30F6F8D 		movdqu	-928(%rbp), %xmm1
+ 6947      60FCFFFF 
+ 6948 5baf F30F6F85 		movdqu	-912(%rbp), %xmm0
+ 6948      70FCFFFF 
+ 6949 5bb7 660F3800 		pshufb	%xmm1, %xmm0
+ 6949      C1
+ 6950              	.LBE2153:
+ 6951              	.LBE2152:
+ 6952              	.LBE2151:
+ 6953              	.LBE2150:
+ 6954              	.LBE2149:
+ 6955              	.LBE2148:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6956              		.loc 3 1568 0
+ 6957 5bbc 660F7F85 		movdqa	%xmm0, -5264(%rbp)
+ 6957      70EBFFFF 
+ 6958 5bc4 660F6F85 		movdqa	-5264(%rbp), %xmm0
+ 6958      70EBFFFF 
+ 6959 5bcc 660FEF85 		pxor	-1072(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 235
+
+
+ 6959      D0FBFFFF 
+ 6960 5bd4 F30F7F85 		movdqu	%xmm0, -1072(%rbp)
+ 6960      D0FBFFFF 
+ 6961 5bdc 660F6F85 		movdqa	-5264(%rbp), %xmm0
+ 6961      70EBFFFF 
+ 6962 5be4 F30F7F85 		movdqu	%xmm0, -896(%rbp)
+ 6962      80FCFFFF 
+ 6963              	.LBB2154:
+ 6964              	.LBB2155:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6965              		.loc 3 1278 0
+ 6966 5bec 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 6966      00000000 
+ 6967 5bf4 F30F6F8D 		movdqu	-896(%rbp), %xmm1
+ 6967      80FCFFFF 
+ 6968 5bfc F30F7F8D 		movdqu	%xmm1, -864(%rbp)
+ 6968      A0FCFFFF 
+ 6969 5c04 F30F7F85 		movdqu	%xmm0, -880(%rbp)
+ 6969      90FCFFFF 
+ 6970 5c0c F30F6F85 		movdqu	-864(%rbp), %xmm0
+ 6970      A0FCFFFF 
+ 6971 5c14 F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 6971      C0FCFFFF 
+ 6972 5c1c F30F6F85 		movdqu	-880(%rbp), %xmm0
+ 6972      90FCFFFF 
+ 6973 5c24 F30F7F85 		movdqu	%xmm0, -848(%rbp)
+ 6973      B0FCFFFF 
+ 6974              	.LBB2156:
+ 6975              	.LBB2157:
+ 6976              	.LBB2158:
+ 6977              	.LBB2159:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6978              		.loc 1 529 0
+ 6979 5c2c F30F6F8D 		movdqu	-848(%rbp), %xmm1
+ 6979      B0FCFFFF 
+ 6980 5c34 F30F6F85 		movdqu	-832(%rbp), %xmm0
+ 6980      C0FCFFFF 
+ 6981 5c3c 660F3800 		pshufb	%xmm1, %xmm0
+ 6981      C1
+ 6982              	.LBE2159:
+ 6983              	.LBE2158:
+ 6984              	.LBE2157:
+ 6985              	.LBE2156:
+ 6986              	.LBE2155:
+ 6987              	.LBE2154:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6988              		.loc 3 1569 0
+ 6989 5c41 660F7F85 		movdqa	%xmm0, -5264(%rbp)
+ 6989      70EBFFFF 
+ 6990 5c49 660F6F85 		movdqa	-5264(%rbp), %xmm0
+ 6990      70EBFFFF 
+ 6991 5c51 660FEF85 		pxor	-1072(%rbp), %xmm0
+ 6991      D0FBFFFF 
+ 6992 5c59 F30F7F85 		movdqu	%xmm0, -1072(%rbp)
+ 6992      D0FBFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 6993              		.loc 3 1571 0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 236
+
+
+ 6994 5c61 F30F6F85 		movdqu	-1072(%rbp), %xmm0
+ 6994      D0FBFFFF 
+ 6995              	.LBE2141:
+ 6996              	.LBE2140:
+ 6997              		.loc 3 1936 0
+ 6998 5c69 F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 6998      D0EBFFFF 
+ 6999 5c71 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 6999      D0EBFFFF 
+ 7000 5c79 F30F7F85 		movdqu	%xmm0, -800(%rbp)
+ 7000      E0FCFFFF 
+ 7001 5c81 F30F6F85 		movdqu	-5136(%rbp), %xmm0
+ 7001      F0EBFFFF 
+ 7002 5c89 F30F7F85 		movdqu	%xmm0, -816(%rbp)
+ 7002      D0FCFFFF 
+ 7003              	.LBB2160:
+ 7004              	.LBB2161:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 7005              		.loc 3 178 0
+ 7006 5c91 F30F6F85 		movdqu	-816(%rbp), %xmm0
+ 7006      D0FCFFFF 
+ 7007 5c99 F30F6F8D 		movdqu	-800(%rbp), %xmm1
+ 7007      E0FCFFFF 
+ 7008 5ca1 660FEFC1 		pxor	%xmm1, %xmm0
+ 7009              	.LBE2161:
+ 7010              	.LBE2160:
+ 7011              		.loc 3 1936 0
+ 7012 5ca5 F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 7012      D0EBFFFF 
+ 7013 5cad 488B85C8 		movq	-5176(%rbp), %rax
+ 7013      EBFFFF
+ 7014 5cb4 4805C000 		addq	$192, %rax
+ 7014      0000
+ 7015 5cba F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 7015      D0EBFFFF 
+ 7016 5cc2 F30F7F00 		movdqu	%xmm0, (%rax)
+ 7017 5cc6 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 7017      D0EBFFFF 
+ 7018 5cce F30F7F85 		movdqu	%xmm0, -784(%rbp)
+ 7018      F0FCFFFF 
+ 7019              	.LBB2162:
+ 7020              	.LBB2163:
+1649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 7021              		.loc 3 1649 0
+ 7022 5cd6 F30F6F85 		movdqu	-784(%rbp), %xmm0
+ 7022      F0FCFFFF 
+ 7023 5cde 660F7F85 		movdqa	%xmm0, -5248(%rbp)
+ 7023      80EBFFFF 
+ 7024 5ce6 660F6F85 		movdqa	-5248(%rbp), %xmm0
+ 7024      80EBFFFF 
+ 7025 5cee F30F7F85 		movdqu	%xmm0, -752(%rbp)
+ 7025      10FDFFFF 
+ 7026              	.LBB2164:
+ 7027              	.LBB2165:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 7028              		.loc 1 852 0
+ 7029 5cf6 F30F6F85 		movdqu	-752(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 237
+
+
+ 7029      10FDFFFF 
+ 7030 5cfe 660F3ADF 		aeskeygenassist	$0, %xmm0, %xmm0
+ 7030      C000
+ 7031              	.LBE2165:
+ 7032              	.LBE2164:
+1650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, 0);
+ 7033              		.loc 3 1650 0
+ 7034 5d04 660F7F85 		movdqa	%xmm0, -5248(%rbp)
+ 7034      80EBFFFF 
+ 7035 5d0c 660F6F85 		movdqa	-5248(%rbp), %xmm0
+ 7035      80EBFFFF 
+ 7036 5d14 F30F7F85 		movdqu	%xmm0, -736(%rbp)
+ 7036      20FDFFFF 
+ 7037 5d1c F30F6F85 		movdqu	-736(%rbp), %xmm0
+ 7037      20FDFFFF 
+ 7038 5d24 F30F7F85 		movdqu	%xmm0, -704(%rbp)
+ 7038      40FDFFFF 
+ 7039              	.LBB2166:
+ 7040              	.LBB2167:
+ 7041              	.LBB2168:
+ 7042              	.LBB2169:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 7043              		.loc 1 450 0
+ 7044 5d2c F30F6F85 		movdqu	-704(%rbp), %xmm0
+ 7044      40FDFFFF 
+ 7045 5d34 660F70C0 		pshufd	$170, %xmm0, %xmm0
+ 7045      AA
+ 7046              	.LBE2169:
+ 7047              	.LBE2168:
+ 7048              	.LBE2167:
+ 7049              	.LBE2166:
+ 7050              	.LBE2163:
+ 7051              	.LBE2162:
+1937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(13);        /* k52 : k53 : k54 : k55 */
+ 7052              		.loc 3 1937 0
+ 7053 5d39 F30F7F85 		movdqu	%xmm0, -5136(%rbp)
+ 7053      F0EBFFFF 
+ 7054 5d41 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 7054      E0EBFFFF 
+ 7055 5d49 F30F7F85 		movdqu	%xmm0, -688(%rbp)
+ 7055      50FDFFFF 
+ 7056              	.LBB2170:
+ 7057              	.LBB2171:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 7058              		.loc 3 1565 0
+ 7059 5d51 F30F6F85 		movdqu	-688(%rbp), %xmm0
+ 7059      50FDFFFF 
+ 7060 5d59 660F7F85 		movdqa	%xmm0, -5232(%rbp)
+ 7060      90EBFFFF 
+ 7061 5d61 660F6F85 		movdqa	-5232(%rbp), %xmm0
+ 7061      90EBFFFF 
+ 7062 5d69 F30F7F85 		movdqu	%xmm0, -672(%rbp)
+ 7062      60FDFFFF 
+ 7063              	.LBB2172:
+ 7064              	.LBB2173:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7065              		.loc 3 1278 0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 238
+
+
+ 7066 5d71 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 7066      00000000 
+ 7067 5d79 F30F6F8D 		movdqu	-672(%rbp), %xmm1
+ 7067      60FDFFFF 
+ 7068 5d81 F30F7F8D 		movdqu	%xmm1, -640(%rbp)
+ 7068      80FDFFFF 
+ 7069 5d89 F30F7F85 		movdqu	%xmm0, -656(%rbp)
+ 7069      70FDFFFF 
+ 7070 5d91 F30F6F85 		movdqu	-640(%rbp), %xmm0
+ 7070      80FDFFFF 
+ 7071 5d99 F30F7F85 		movdqu	%xmm0, -608(%rbp)
+ 7071      A0FDFFFF 
+ 7072 5da1 F30F6F85 		movdqu	-656(%rbp), %xmm0
+ 7072      70FDFFFF 
+ 7073 5da9 F30F7F85 		movdqu	%xmm0, -624(%rbp)
+ 7073      90FDFFFF 
+ 7074              	.LBB2174:
+ 7075              	.LBB2175:
+ 7076              	.LBB2176:
+ 7077              	.LBB2177:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7078              		.loc 1 529 0
+ 7079 5db1 F30F6F8D 		movdqu	-624(%rbp), %xmm1
+ 7079      90FDFFFF 
+ 7080 5db9 F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 7080      A0FDFFFF 
+ 7081 5dc1 660F3800 		pshufb	%xmm1, %xmm0
+ 7081      C1
+ 7082              	.LBE2177:
+ 7083              	.LBE2176:
+ 7084              	.LBE2175:
+ 7085              	.LBE2174:
+ 7086              	.LBE2173:
+ 7087              	.LBE2172:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7088              		.loc 3 1567 0
+ 7089 5dc6 660F7F85 		movdqa	%xmm0, -5232(%rbp)
+ 7089      90EBFFFF 
+ 7090 5dce 660F6F85 		movdqa	-5232(%rbp), %xmm0
+ 7090      90EBFFFF 
+ 7091 5dd6 660FEF85 		pxor	-688(%rbp), %xmm0
+ 7091      50FDFFFF 
+ 7092 5dde F30F7F85 		movdqu	%xmm0, -688(%rbp)
+ 7092      50FDFFFF 
+ 7093 5de6 660F6F85 		movdqa	-5232(%rbp), %xmm0
+ 7093      90EBFFFF 
+ 7094 5dee F30F7F85 		movdqu	%xmm0, -592(%rbp)
+ 7094      B0FDFFFF 
+ 7095              	.LBB2178:
+ 7096              	.LBB2179:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7097              		.loc 3 1278 0
+ 7098 5df6 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 7098      00000000 
+ 7099 5dfe F30F6F8D 		movdqu	-592(%rbp), %xmm1
+ 7099      B0FDFFFF 
+ 7100 5e06 F30F7F8D 		movdqu	%xmm1, -560(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 239
+
+
+ 7100      D0FDFFFF 
+ 7101 5e0e F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 7101      C0FDFFFF 
+ 7102 5e16 F30F6F85 		movdqu	-560(%rbp), %xmm0
+ 7102      D0FDFFFF 
+ 7103 5e1e F30F7F85 		movdqu	%xmm0, -528(%rbp)
+ 7103      F0FDFFFF 
+ 7104 5e26 F30F6F85 		movdqu	-576(%rbp), %xmm0
+ 7104      C0FDFFFF 
+ 7105 5e2e F30F7F85 		movdqu	%xmm0, -544(%rbp)
+ 7105      E0FDFFFF 
+ 7106              	.LBB2180:
+ 7107              	.LBB2181:
+ 7108              	.LBB2182:
+ 7109              	.LBB2183:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7110              		.loc 1 529 0
+ 7111 5e36 F30F6F8D 		movdqu	-544(%rbp), %xmm1
+ 7111      E0FDFFFF 
+ 7112 5e3e F30F6F85 		movdqu	-528(%rbp), %xmm0
+ 7112      F0FDFFFF 
+ 7113 5e46 660F3800 		pshufb	%xmm1, %xmm0
+ 7113      C1
+ 7114              	.LBE2183:
+ 7115              	.LBE2182:
+ 7116              	.LBE2181:
+ 7117              	.LBE2180:
+ 7118              	.LBE2179:
+ 7119              	.LBE2178:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7120              		.loc 3 1568 0
+ 7121 5e4b 660F7F85 		movdqa	%xmm0, -5232(%rbp)
+ 7121      90EBFFFF 
+ 7122 5e53 660F6F85 		movdqa	-5232(%rbp), %xmm0
+ 7122      90EBFFFF 
+ 7123 5e5b 660FEF85 		pxor	-688(%rbp), %xmm0
+ 7123      50FDFFFF 
+ 7124 5e63 F30F7F85 		movdqu	%xmm0, -688(%rbp)
+ 7124      50FDFFFF 
+ 7125 5e6b 660F6F85 		movdqa	-5232(%rbp), %xmm0
+ 7125      90EBFFFF 
+ 7126 5e73 F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 7126      00FEFFFF 
+ 7127              	.LBB2184:
+ 7128              	.LBB2185:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7129              		.loc 3 1278 0
+ 7130 5e7b 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 7130      00000000 
+ 7131 5e83 F30F6F8D 		movdqu	-512(%rbp), %xmm1
+ 7131      00FEFFFF 
+ 7132 5e8b F30F7F8D 		movdqu	%xmm1, -480(%rbp)
+ 7132      20FEFFFF 
+ 7133 5e93 F30F7F85 		movdqu	%xmm0, -496(%rbp)
+ 7133      10FEFFFF 
+ 7134 5e9b F30F6F85 		movdqu	-480(%rbp), %xmm0
+ 7134      20FEFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 240
+
+
+ 7135 5ea3 F30F7F85 		movdqu	%xmm0, -448(%rbp)
+ 7135      40FEFFFF 
+ 7136 5eab F30F6F85 		movdqu	-496(%rbp), %xmm0
+ 7136      10FEFFFF 
+ 7137 5eb3 F30F7F85 		movdqu	%xmm0, -464(%rbp)
+ 7137      30FEFFFF 
+ 7138              	.LBB2186:
+ 7139              	.LBB2187:
+ 7140              	.LBB2188:
+ 7141              	.LBB2189:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7142              		.loc 1 529 0
+ 7143 5ebb F30F6F8D 		movdqu	-464(%rbp), %xmm1
+ 7143      30FEFFFF 
+ 7144 5ec3 F30F6F85 		movdqu	-448(%rbp), %xmm0
+ 7144      40FEFFFF 
+ 7145 5ecb 660F3800 		pshufb	%xmm1, %xmm0
+ 7145      C1
+ 7146              	.LBE2189:
+ 7147              	.LBE2188:
+ 7148              	.LBE2187:
+ 7149              	.LBE2186:
+ 7150              	.LBE2185:
+ 7151              	.LBE2184:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7152              		.loc 3 1569 0
+ 7153 5ed0 660F7F85 		movdqa	%xmm0, -5232(%rbp)
+ 7153      90EBFFFF 
+ 7154 5ed8 660F6F85 		movdqa	-5232(%rbp), %xmm0
+ 7154      90EBFFFF 
+ 7155 5ee0 660FEF85 		pxor	-688(%rbp), %xmm0
+ 7155      50FDFFFF 
+ 7156 5ee8 F30F7F85 		movdqu	%xmm0, -688(%rbp)
+ 7156      50FDFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 7157              		.loc 3 1571 0
+ 7158 5ef0 F30F6F85 		movdqu	-688(%rbp), %xmm0
+ 7158      50FDFFFF 
+ 7159              	.LBE2171:
+ 7160              	.LBE2170:
+ 7161              		.loc 3 1937 0
+ 7162 5ef8 F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 7162      E0EBFFFF 
+ 7163 5f00 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 7163      E0EBFFFF 
+ 7164 5f08 F30F7F85 		movdqu	%xmm0, -416(%rbp)
+ 7164      60FEFFFF 
+ 7165 5f10 F30F6F85 		movdqu	-5136(%rbp), %xmm0
+ 7165      F0EBFFFF 
+ 7166 5f18 F30F7F85 		movdqu	%xmm0, -432(%rbp)
+ 7166      50FEFFFF 
+ 7167              	.LBB2190:
+ 7168              	.LBB2191:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 7169              		.loc 3 178 0
+ 7170 5f20 F30F6F85 		movdqu	-432(%rbp), %xmm0
+ 7170      50FEFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 241
+
+
+ 7171 5f28 F30F6F8D 		movdqu	-416(%rbp), %xmm1
+ 7171      60FEFFFF 
+ 7172 5f30 660FEFC1 		pxor	%xmm1, %xmm0
+ 7173              	.LBE2191:
+ 7174              	.LBE2190:
+ 7175              		.loc 3 1937 0
+ 7176 5f34 F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 7176      E0EBFFFF 
+ 7177 5f3c 488B85C8 		movq	-5176(%rbp), %rax
+ 7177      EBFFFF
+ 7178 5f43 4805D000 		addq	$208, %rax
+ 7178      0000
+ 7179 5f49 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 7179      E0EBFFFF 
+ 7180 5f51 F30F7F00 		movdqu	%xmm0, (%rax)
+ 7181 5f55 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 7181      E0EBFFFF 
+ 7182 5f5d F30F7F85 		movdqu	%xmm0, -384(%rbp)
+ 7182      80FEFFFF 
+ 7183              	.LBB2192:
+ 7184              	.LBB2193:
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+ 7185              		.loc 3 1673 0
+ 7186 5f65 F30F6F85 		movdqu	-384(%rbp), %xmm0
+ 7186      80FEFFFF 
+ 7187 5f6d 660F7F85 		movdqa	%xmm0, -5216(%rbp)
+ 7187      A0EBFFFF 
+ 7188 5f75 660F6F85 		movdqa	-5216(%rbp), %xmm0
+ 7188      A0EBFFFF 
+ 7189 5f7d F30F7F85 		movdqu	%xmm0, -352(%rbp)
+ 7189      A0FEFFFF 
+ 7190              	.LBB2194:
+ 7191              	.LBB2195:
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_aeskeygenassist128 ((v128_lli_t)round_key,
+ 7192              		.loc 1 852 0
+ 7193 5f85 F30F6F85 		movdqu	-352(%rbp), %xmm0
+ 7193      A0FEFFFF 
+ 7194 5f8d 660F3ADF 		aeskeygenassist	$64, %xmm0, %xmm0
+ 7194      C040
+ 7195              	.LBE2195:
+ 7196              	.LBE2194:
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+ 7197              		.loc 3 1674 0
+ 7198 5f93 660F7F85 		movdqa	%xmm0, -5216(%rbp)
+ 7198      A0EBFFFF 
+ 7199 5f9b 660F6F85 		movdqa	-5216(%rbp), %xmm0
+ 7199      A0EBFFFF 
+ 7200 5fa3 F30F7F85 		movdqu	%xmm0, -336(%rbp)
+ 7200      B0FEFFFF 
+ 7201 5fab F30F6F85 		movdqu	-336(%rbp), %xmm0
+ 7201      B0FEFFFF 
+ 7202 5fb3 F30F7F85 		movdqu	%xmm0, -304(%rbp)
+ 7202      D0FEFFFF 
+ 7203              	.LBB2196:
+ 7204              	.LBB2197:
+ 7205              	.LBB2198:
+ 7206              	.LBB2199:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 242
+
+
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 7207              		.loc 1 450 0
+ 7208 5fbb F30F6F85 		movdqu	-304(%rbp), %xmm0
+ 7208      D0FEFFFF 
+ 7209 5fc3 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 7209      FF
+ 7210              	.LBE2199:
+ 7211              	.LBE2198:
+ 7212              	.LBE2197:
+ 7213              	.LBE2196:
+ 7214              	.LBE2193:
+ 7215              	.LBE2192:
+1938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(14,0x40);   /* k56 : k57 : k58 : k59 */
+ 7216              		.loc 3 1938 0
+ 7217 5fc8 F30F7F85 		movdqu	%xmm0, -5136(%rbp)
+ 7217      F0EBFFFF 
+ 7218 5fd0 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 7218      D0EBFFFF 
+ 7219 5fd8 F30F7F85 		movdqu	%xmm0, -288(%rbp)
+ 7219      E0FEFFFF 
+ 7220              	.LBB2200:
+ 7221              	.LBB2201:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 7222              		.loc 3 1565 0
+ 7223 5fe0 F30F6F85 		movdqu	-288(%rbp), %xmm0
+ 7223      E0FEFFFF 
+ 7224 5fe8 660F7F85 		movdqa	%xmm0, -5200(%rbp)
+ 7224      B0EBFFFF 
+ 7225 5ff0 660F6F85 		movdqa	-5200(%rbp), %xmm0
+ 7225      B0EBFFFF 
+ 7226 5ff8 F30F7F85 		movdqu	%xmm0, -272(%rbp)
+ 7226      F0FEFFFF 
+ 7227              	.LBB2202:
+ 7228              	.LBB2203:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7229              		.loc 3 1278 0
+ 7230 6000 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 7230      00000000 
+ 7231 6008 F30F6F8D 		movdqu	-272(%rbp), %xmm1
+ 7231      F0FEFFFF 
+ 7232 6010 F30F7F8D 		movdqu	%xmm1, -240(%rbp)
+ 7232      10FFFFFF 
+ 7233 6018 F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 7233      00FFFFFF 
+ 7234 6020 F30F6F85 		movdqu	-240(%rbp), %xmm0
+ 7234      10FFFFFF 
+ 7235 6028 F30F7F85 		movdqu	%xmm0, -208(%rbp)
+ 7235      30FFFFFF 
+ 7236 6030 F30F6F85 		movdqu	-256(%rbp), %xmm0
+ 7236      00FFFFFF 
+ 7237 6038 F30F7F85 		movdqu	%xmm0, -224(%rbp)
+ 7237      20FFFFFF 
+ 7238              	.LBB2204:
+ 7239              	.LBB2205:
+ 7240              	.LBB2206:
+ 7241              	.LBB2207:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+
GAS LISTING /tmp/ccPaCTqg.s 			page 243
+
+
+ 7242              		.loc 1 529 0
+ 7243 6040 F30F6F8D 		movdqu	-224(%rbp), %xmm1
+ 7243      20FFFFFF 
+ 7244 6048 F30F6F85 		movdqu	-208(%rbp), %xmm0
+ 7244      30FFFFFF 
+ 7245 6050 660F3800 		pshufb	%xmm1, %xmm0
+ 7245      C1
+ 7246              	.LBE2207:
+ 7247              	.LBE2206:
+ 7248              	.LBE2205:
+ 7249              	.LBE2204:
+ 7250              	.LBE2203:
+ 7251              	.LBE2202:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7252              		.loc 3 1567 0
+ 7253 6055 660F7F85 		movdqa	%xmm0, -5200(%rbp)
+ 7253      B0EBFFFF 
+ 7254 605d 660F6F85 		movdqa	-5200(%rbp), %xmm0
+ 7254      B0EBFFFF 
+ 7255 6065 660FEF85 		pxor	-288(%rbp), %xmm0
+ 7255      E0FEFFFF 
+ 7256 606d F30F7F85 		movdqu	%xmm0, -288(%rbp)
+ 7256      E0FEFFFF 
+ 7257 6075 660F6F85 		movdqa	-5200(%rbp), %xmm0
+ 7257      B0EBFFFF 
+ 7258 607d F30F7F85 		movdqu	%xmm0, -192(%rbp)
+ 7258      40FFFFFF 
+ 7259              	.LBB2208:
+ 7260              	.LBB2209:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7261              		.loc 3 1278 0
+ 7262 6085 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 7262      00000000 
+ 7263 608d F30F6F8D 		movdqu	-192(%rbp), %xmm1
+ 7263      40FFFFFF 
+ 7264 6095 F30F7F8D 		movdqu	%xmm1, -160(%rbp)
+ 7264      60FFFFFF 
+ 7265 609d F30F7F85 		movdqu	%xmm0, -176(%rbp)
+ 7265      50FFFFFF 
+ 7266 60a5 F30F6F85 		movdqu	-160(%rbp), %xmm0
+ 7266      60FFFFFF 
+ 7267 60ad F30F7F45 		movdqu	%xmm0, -128(%rbp)
+ 7267      80
+ 7268 60b2 F30F6F85 		movdqu	-176(%rbp), %xmm0
+ 7268      50FFFFFF 
+ 7269 60ba F30F7F85 		movdqu	%xmm0, -144(%rbp)
+ 7269      70FFFFFF 
+ 7270              	.LBB2210:
+ 7271              	.LBB2211:
+ 7272              	.LBB2212:
+ 7273              	.LBB2213:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7274              		.loc 1 529 0
+ 7275 60c2 F30F6F8D 		movdqu	-144(%rbp), %xmm1
+ 7275      70FFFFFF 
+ 7276 60ca F30F6F45 		movdqu	-128(%rbp), %xmm0
+ 7276      80
+
GAS LISTING /tmp/ccPaCTqg.s 			page 244
+
+
+ 7277 60cf 660F3800 		pshufb	%xmm1, %xmm0
+ 7277      C1
+ 7278              	.LBE2213:
+ 7279              	.LBE2212:
+ 7280              	.LBE2211:
+ 7281              	.LBE2210:
+ 7282              	.LBE2209:
+ 7283              	.LBE2208:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7284              		.loc 3 1568 0
+ 7285 60d4 660F7F85 		movdqa	%xmm0, -5200(%rbp)
+ 7285      B0EBFFFF 
+ 7286 60dc 660F6F85 		movdqa	-5200(%rbp), %xmm0
+ 7286      B0EBFFFF 
+ 7287 60e4 660FEF85 		pxor	-288(%rbp), %xmm0
+ 7287      E0FEFFFF 
+ 7288 60ec F30F7F85 		movdqu	%xmm0, -288(%rbp)
+ 7288      E0FEFFFF 
+ 7289 60f4 660F6F85 		movdqa	-5200(%rbp), %xmm0
+ 7289      B0EBFFFF 
+ 7290 60fc F30F7F45 		movdqu	%xmm0, -112(%rbp)
+ 7290      90
+ 7291              	.LBB2214:
+ 7292              	.LBB2215:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7293              		.loc 3 1278 0
+ 7294 6101 660F6F05 		movdqa	mask.8002(%rip), %xmm0
+ 7294      00000000 
+ 7295 6109 F30F6F4D 		movdqu	-112(%rbp), %xmm1
+ 7295      90
+ 7296 610e F30F7F4D 		movdqu	%xmm1, -80(%rbp)
+ 7296      B0
+ 7297 6113 F30F7F45 		movdqu	%xmm0, -96(%rbp)
+ 7297      A0
+ 7298 6118 F30F6F45 		movdqu	-80(%rbp), %xmm0
+ 7298      B0
+ 7299 611d F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 7299      D0
+ 7300 6122 F30F6F45 		movdqu	-96(%rbp), %xmm0
+ 7300      A0
+ 7301 6127 F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 7301      C0
+ 7302              	.LBB2216:
+ 7303              	.LBB2217:
+ 7304              	.LBB2218:
+ 7305              	.LBB2219:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7306              		.loc 1 529 0
+ 7307 612c F30F6F4D 		movdqu	-64(%rbp), %xmm1
+ 7307      C0
+ 7308 6131 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 7308      D0
+ 7309 6136 660F3800 		pshufb	%xmm1, %xmm0
+ 7309      C1
+ 7310              	.LBE2219:
+ 7311              	.LBE2218:
+ 7312              	.LBE2217:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 245
+
+
+ 7313              	.LBE2216:
+ 7314              	.LBE2215:
+ 7315              	.LBE2214:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7316              		.loc 3 1569 0
+ 7317 613b 660F7F85 		movdqa	%xmm0, -5200(%rbp)
+ 7317      B0EBFFFF 
+ 7318 6143 660F6F85 		movdqa	-5200(%rbp), %xmm0
+ 7318      B0EBFFFF 
+ 7319 614b 660FEF85 		pxor	-288(%rbp), %xmm0
+ 7319      E0FEFFFF 
+ 7320 6153 F30F7F85 		movdqu	%xmm0, -288(%rbp)
+ 7320      E0FEFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 7321              		.loc 3 1571 0
+ 7322 615b F30F6F85 		movdqu	-288(%rbp), %xmm0
+ 7322      E0FEFFFF 
+ 7323              	.LBE2201:
+ 7324              	.LBE2200:
+ 7325              		.loc 3 1938 0
+ 7326 6163 F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 7326      D0EBFFFF 
+ 7327 616b F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 7327      D0EBFFFF 
+ 7328 6173 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 7328      F0
+ 7329 6178 F30F6F85 		movdqu	-5136(%rbp), %xmm0
+ 7329      F0EBFFFF 
+ 7330 6180 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 7330      E0
+ 7331              	.LBB2220:
+ 7332              	.LBB2221:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 7333              		.loc 3 178 0
+ 7334 6185 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 7334      E0
+ 7335 618a F30F6F4D 		movdqu	-16(%rbp), %xmm1
+ 7335      F0
+ 7336 618f 660FEFC1 		pxor	%xmm1, %xmm0
+ 7337              	.LBE2221:
+ 7338              	.LBE2220:
+ 7339              		.loc 3 1938 0
+ 7340 6193 F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 7340      D0EBFFFF 
+ 7341 619b 488B85C8 		movq	-5176(%rbp), %rax
+ 7341      EBFFFF
+ 7342 61a2 4805E000 		addq	$224, %rax
+ 7342      0000
+ 7343 61a8 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 7343      D0EBFFFF 
+ 7344 61b0 F30F7F00 		movdqu	%xmm0, (%rax)
+1939:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 7345              		.loc 3 1939 0
+ 7346 61b4 C9       		leave
+ 7347 61b5 C3       		ret
+ 7348              		.cfi_endproc
+ 7349              	.LFE658:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 246
+
+
+ 7350              		.size	KAESBlockCipherVecAesNiKeyExpansion256, .-KAESBlockCipherVecAesNiKeyExpansion256
+ 7351              		.type	KAESBlockCipherVecAesNiEqInvKeyExpansion, @function
+ 7352              	KAESBlockCipherVecAesNiEqInvKeyExpansion:
+ 7353              	.LFB659:
+1940:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1941:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1942:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion256) (CipherVec * w, const AESByte * key)
+1943:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1944:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_256, AES_Nk_256);
+1945:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1946:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1947:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1948:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1949:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1950:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion) (CipherVec * r, const CipherVec * dr, unsigned Nr)
+1951:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 7354              		.loc 3 1951 0
+ 7355              		.cfi_startproc
+ 7356 61b6 55       		pushq	%rbp
+ 7357              	.LCFI18:
+ 7358              		.cfi_def_cfa_offset 16
+ 7359 61b7 4889E5   		movq	%rsp, %rbp
+ 7360              		.cfi_offset 6, -16
+ 7361              	.LCFI19:
+ 7362              		.cfi_def_cfa_register 6
+ 7363 61ba 53       		pushq	%rbx
+ 7364 61bb 4883EC48 		subq	$72, %rsp
+ 7365 61bf 48897DC8 		movq	%rdi, -56(%rbp)
+ 7366 61c3 488975C0 		movq	%rsi, -64(%rbp)
+ 7367 61c7 8955BC   		movl	%edx, -68(%rbp)
+1952:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix, jx;
+1953:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1954:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     jx = Nr;
+ 7368              		.loc 3 1954 0
+ 7369 61ca 8B45BC   		movl	-68(%rbp), %eax
+ 7370 61cd 8945DC   		movl	%eax, -36(%rbp)
+1955:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ix = 0;
+ 7371              		.loc 3 1955 0
+ 7372 61d0 C745D800 		movl	$0, -40(%rbp)
+ 7372      000000
+1956:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r[ix++] = dr[jx--];
+ 7373              		.loc 3 1956 0
+ 7374 61d7 8B45D8   		mov	-40(%rbp), %eax
+ 7375 61da 48C1E004 		salq	$4, %rax
+ 7376 61de 480345C8 		addq	-56(%rbp), %rax
+ 7377 61e2 8B55DC   		mov	-36(%rbp), %edx
+ 7378 61e5 48C1E204 		salq	$4, %rdx
+ 7379 61e9 480355C0 		addq	-64(%rbp), %rdx
+ 7380 61ed 660F6F02 		movdqa	(%rdx), %xmm0
+ 7381 61f1 660F7F00 		movdqa	%xmm0, (%rax)
+ 7382 61f5 8345D801 		addl	$1, -40(%rbp)
+ 7383 61f9 836DDC01 		subl	$1, -36(%rbp)
+1957:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     while (jx)
+ 7384              		.loc 3 1957 0
+ 7385 61fd EB42     		jmp	.L20
+ 7386              		.cfi_offset 3, -24
+ 7387              	.L21:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 247
+
+
+1958:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         r[ix++] = AESBCMEMBER(InvMixColumns)(dr[jx--]);
+ 7388              		.loc 3 1958 0
+ 7389 61ff 8B45D8   		mov	-40(%rbp), %eax
+ 7390 6202 48C1E004 		salq	$4, %rax
+ 7391 6206 4889C3   		movq	%rax, %rbx
+ 7392 6209 48035DC8 		addq	-56(%rbp), %rbx
+ 7393 620d 8B45DC   		mov	-36(%rbp), %eax
+ 7394 6210 48C1E004 		salq	$4, %rax
+ 7395 6214 480345C0 		addq	-64(%rbp), %rax
+ 7396 6218 660F6F00 		movdqa	(%rax), %xmm0
+ 7397 621c 836DDC01 		subl	$1, -36(%rbp)
+ 7398 6220 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 7398      E0
+ 7399              	.LBB2224:
+ 7400              	.LBB2225:
+1102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_AESIMC (state);
+ 7401              		.loc 3 1102 0
+ 7402 6225 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 7402      E0
+ 7403 622a E8FD9DFF 		call	op_AESIMC
+ 7403      FF
+ 7404 622f F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 7404      E0
+1148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 7405              		.loc 3 1148 0
+ 7406 6234 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 7406      E0
+ 7407              	.LBE2225:
+ 7408              	.LBE2224:
+ 7409              		.loc 3 1958 0
+ 7410 6239 660F7F03 		movdqa	%xmm0, (%rbx)
+ 7411 623d 8345D801 		addl	$1, -40(%rbp)
+ 7412              	.L20:
+1957:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     while (jx)
+ 7413              		.loc 3 1957 0
+ 7414 6241 837DDC00 		cmpl	$0, -36(%rbp)
+ 7415 6245 75B8     		jne	.L21
+1959:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r[ix] = dr[jx];
+ 7416              		.loc 3 1959 0
+ 7417 6247 8B45D8   		mov	-40(%rbp), %eax
+ 7418 624a 48C1E004 		salq	$4, %rax
+ 7419 624e 480345C8 		addq	-56(%rbp), %rax
+ 7420 6252 8B55DC   		mov	-36(%rbp), %edx
+ 7421 6255 48C1E204 		salq	$4, %rdx
+ 7422 6259 480355C0 		addq	-64(%rbp), %rdx
+ 7423 625d 660F6F02 		movdqa	(%rdx), %xmm0
+ 7424 6261 660F7F00 		movdqa	%xmm0, (%rax)
+1960:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 7425              		.loc 3 1960 0
+ 7426 6265 4883C448 		addq	$72, %rsp
+ 7427 6269 5B       		popq	%rbx
+ 7428 626a C9       		leave
+ 7429 626b C3       		ret
+ 7430              		.cfi_endproc
+ 7431              	.LFE659:
+ 7432              		.size	KAESBlockCipherVecAesNiEqInvKeyExpansion, .-KAESBlockCipherVecAesNiEqInvKeyExpansion
+ 7433              		.type	KAESBlockCipherVecAesNiEqInvKeyExpansion128, @function
+
GAS LISTING /tmp/ccPaCTqg.s 			page 248
+
+
+ 7434              	KAESBlockCipherVecAesNiEqInvKeyExpansion128:
+ 7435              	.LFB660:
+1961:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1962:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1963:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1964:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion128) (CipherVec * w, const CipherVec * kw)
+1965:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 7436              		.loc 3 1965 0
+ 7437              		.cfi_startproc
+ 7438 626c 55       		pushq	%rbp
+ 7439              	.LCFI20:
+ 7440              		.cfi_def_cfa_offset 16
+ 7441 626d 4889E5   		movq	%rsp, %rbp
+ 7442              		.cfi_offset 6, -16
+ 7443              	.LCFI21:
+ 7444              		.cfi_def_cfa_register 6
+ 7445 6270 4883EC10 		subq	$16, %rsp
+ 7446 6274 48897DF8 		movq	%rdi, -8(%rbp)
+ 7447 6278 488975F0 		movq	%rsi, -16(%rbp)
+1966:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_128);
+ 7448              		.loc 3 1966 0
+ 7449 627c 488B4DF0 		movq	-16(%rbp), %rcx
+ 7450 6280 488B45F8 		movq	-8(%rbp), %rax
+ 7451 6284 BA0A0000 		movl	$10, %edx
+ 7451      00
+ 7452 6289 4889CE   		movq	%rcx, %rsi
+ 7453 628c 4889C7   		movq	%rax, %rdi
+ 7454 628f E822FFFF 		call	KAESBlockCipherVecAesNiEqInvKeyExpansion
+ 7454      FF
+1967:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 7455              		.loc 3 1967 0
+ 7456 6294 C9       		leave
+ 7457 6295 C3       		ret
+ 7458              		.cfi_endproc
+ 7459              	.LFE660:
+ 7460              		.size	KAESBlockCipherVecAesNiEqInvKeyExpansion128, .-KAESBlockCipherVecAesNiEqInvKeyExpansion128
+ 7461              		.type	KAESBlockCipherVecAesNiEqInvKeyExpansion192, @function
+ 7462              	KAESBlockCipherVecAesNiEqInvKeyExpansion192:
+ 7463              	.LFB661:
+1968:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1969:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1970:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1971:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion192) (CipherVec * w, const CipherVec * kw)
+1972:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 7464              		.loc 3 1972 0
+ 7465              		.cfi_startproc
+ 7466 6296 55       		pushq	%rbp
+ 7467              	.LCFI22:
+ 7468              		.cfi_def_cfa_offset 16
+ 7469 6297 4889E5   		movq	%rsp, %rbp
+ 7470              		.cfi_offset 6, -16
+ 7471              	.LCFI23:
+ 7472              		.cfi_def_cfa_register 6
+ 7473 629a 4883EC10 		subq	$16, %rsp
+ 7474 629e 48897DF8 		movq	%rdi, -8(%rbp)
+ 7475 62a2 488975F0 		movq	%rsi, -16(%rbp)
+1973:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_192);
+
GAS LISTING /tmp/ccPaCTqg.s 			page 249
+
+
+ 7476              		.loc 3 1973 0
+ 7477 62a6 488B4DF0 		movq	-16(%rbp), %rcx
+ 7478 62aa 488B45F8 		movq	-8(%rbp), %rax
+ 7479 62ae BA0C0000 		movl	$12, %edx
+ 7479      00
+ 7480 62b3 4889CE   		movq	%rcx, %rsi
+ 7481 62b6 4889C7   		movq	%rax, %rdi
+ 7482 62b9 E8F8FEFF 		call	KAESBlockCipherVecAesNiEqInvKeyExpansion
+ 7482      FF
+1974:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 7483              		.loc 3 1974 0
+ 7484 62be C9       		leave
+ 7485 62bf C3       		ret
+ 7486              		.cfi_endproc
+ 7487              	.LFE661:
+ 7488              		.size	KAESBlockCipherVecAesNiEqInvKeyExpansion192, .-KAESBlockCipherVecAesNiEqInvKeyExpansion192
+ 7489              		.type	KAESBlockCipherVecAesNiEqInvKeyExpansion256, @function
+ 7490              	KAESBlockCipherVecAesNiEqInvKeyExpansion256:
+ 7491              	.LFB662:
+1975:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1976:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1977:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1978:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion256) (CipherVec * w, const CipherVec * kw)
+1979:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 7492              		.loc 3 1979 0
+ 7493              		.cfi_startproc
+ 7494 62c0 55       		pushq	%rbp
+ 7495              	.LCFI24:
+ 7496              		.cfi_def_cfa_offset 16
+ 7497 62c1 4889E5   		movq	%rsp, %rbp
+ 7498              		.cfi_offset 6, -16
+ 7499              	.LCFI25:
+ 7500              		.cfi_def_cfa_register 6
+ 7501 62c4 4883EC10 		subq	$16, %rsp
+ 7502 62c8 48897DF8 		movq	%rdi, -8(%rbp)
+ 7503 62cc 488975F0 		movq	%rsi, -16(%rbp)
+1980:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_256);
+ 7504              		.loc 3 1980 0
+ 7505 62d0 488B4DF0 		movq	-16(%rbp), %rcx
+ 7506 62d4 488B45F8 		movq	-8(%rbp), %rax
+ 7507 62d8 BA0E0000 		movl	$14, %edx
+ 7507      00
+ 7508 62dd 4889CE   		movq	%rcx, %rsi
+ 7509 62e0 4889C7   		movq	%rax, %rdi
+ 7510 62e3 E8CEFEFF 		call	KAESBlockCipherVecAesNiEqInvKeyExpansion
+ 7510      FF
+1981:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 7511              		.loc 3 1981 0
+ 7512 62e8 C9       		leave
+ 7513 62e9 C3       		ret
+ 7514              		.cfi_endproc
+ 7515              	.LFE662:
+ 7516              		.size	KAESBlockCipherVecAesNiEqInvKeyExpansion256, .-KAESBlockCipherVecAesNiEqInvKeyExpansion256
+ 7517              		.section	.rodata
+ 7518              	.LC0:
+ 7519 0388 53746172 		.string	"Start of Round"
+ 7519      74206F66 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 250
+
+
+ 7519      20526F75 
+ 7519      6E6400
+ 7520              	.LC1:
+ 7521 0397 25733A09 		.string	"%s:\t%0.8x %0.8x %0.8x %0.8x\n"
+ 7521      25302E38 
+ 7521      78202530 
+ 7521      2E387820 
+ 7521      25302E38 
+ 7522              	.LC2:
+ 7523 03b4 526F756E 		.string	"Round Key"
+ 7523      64204B65 
+ 7523      7900
+ 7524              	.LC3:
+ 7525 03be 456E6420 		.string	"End 1st Round"
+ 7525      31737420 
+ 7525      526F756E 
+ 7525      6400
+ 7526              	.LC4:
+ 7527 03cc 456E6420 		.string	"End of Round"
+ 7527      6F662052 
+ 7527      6F756E64 
+ 7527      00
+ 7528              		.text
+ 7529              		.type	KAESBlockCipherVecAesNiCipher, @function
+ 7530              	KAESBlockCipherVecAesNiCipher:
+ 7531              	.LFB666:
+1982:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1983:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1984:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1985:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Cipher First Round
+1986:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1987:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1988:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FirstRound) (CipherVec state, const CipherVec round_keys)
+1989:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1990:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1991:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1992:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FirstRound) (CipherVec state, const CipherVec round_keys)
+1993:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1994:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Start of Round", state);
+1995:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1996:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+1997:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1998:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+1999:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2000:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("End 1st Round", state);
+2001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2002:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+2003:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2004:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2005:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2006:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+2007:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MiddleRound) (register CipherVec state,
+2008:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                     register const CipherVec round_keys)
+2009:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+2010:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2011:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+2012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MiddleRound) (register CipherVec state,
+
GAS LISTING /tmp/ccPaCTqg.s 			page 251
+
+
+2013:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                     register const CipherVec round_keys)
+2014:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2015:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if _DEBUGGING
+2016:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec mstate;
+2017:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec mround_keys;
+2018:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2019:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+2020:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mround_keys = round_keys;
+2021:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2022:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Start of Round", mstate);
+2023:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2024:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2025:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2026:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2027:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_AESENC (state, round_keys);
+2028:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+2029:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(SubBytes) (state);
+2030:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2031:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After SubBytes", state);
+2032:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2033:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(ShiftRows) (state);
+2034:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2035:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+2036:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2037:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(MixColumns) (state);
+2038:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2039:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /* ommited n on purpose */
+2040:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After MixColum", state);
+2041:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2042:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2043:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2044:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+2045:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("End of Round", state);
+2046:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+2048:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2049:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2050:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2051:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+2052:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(LastRound) (register CipherVec state, register CipherVec round_keys)
+2053:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+2054:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2055:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+2056:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(LastRound) (register CipherVec state, register CipherVec round_keys)
+2057:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2058:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Start of Round", state);
+2059:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2060:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2061:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_AESENCLAST (state, round_keys);
+2062:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+2063:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(SubBytes) (state);
+2064:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2065:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After SubBytes", state);
+2066:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2067:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(ShiftRows) (state);
+2068:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2069:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+
GAS LISTING /tmp/ccPaCTqg.s 			page 252
+
+
+2070:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2071:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2072:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2073:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+2074:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("End of Round", state);
+2075:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2076:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+2077:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2078:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2079:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2080:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2081:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Cipher
+2082:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2083:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2084:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * 
+2085:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** This implementation as stated
+2086:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * above for simplifaction broke out the three types of rounds into
+2087:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * first round, middle rounds, and last round.  This approach was taken
+2088:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * for ease of coding for optimization using smaller bytes of code
+2089:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * but inlining of the functions for efficiency
+2090:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2091:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+2092:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(Cipher) (CipherVec state, const CipherVec * key,
+2093:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                             unsigned Nr)
+2094:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 7532              		.loc 3 2094 0
+ 7533              		.cfi_startproc
+ 7534 62ea 55       		pushq	%rbp
+ 7535              	.LCFI26:
+ 7536              		.cfi_def_cfa_offset 16
+ 7537 62eb 4889E5   		movq	%rsp, %rbp
+ 7538              		.cfi_offset 6, -16
+ 7539              	.LCFI27:
+ 7540              		.cfi_def_cfa_register 6
+ 7541 62ee 4155     		pushq	%r13
+ 7542 62f0 4154     		pushq	%r12
+ 7543 62f2 53       		pushq	%rbx
+ 7544 62f3 4881EC88 		subq	$392, %rsp
+ 7544      010000
+ 7545 62fa 660F7F85 		movdqa	%xmm0, -400(%rbp)
+ 7545      70FEFFFF 
+ 7546 6302 4889BD68 		movq	%rdi, -408(%rbp)
+ 7546      FEFFFF
+ 7547 6309 89B564FE 		movl	%esi, -412(%rbp)
+ 7547      FFFF
+2095:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix = 0;
+ 7548              		.loc 3 2095 0
+ 7549 630f C7851CFF 		movl	$0, -228(%rbp)
+ 7549      FFFF0000 
+ 7549      0000
+2096:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2097:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(FirstRound) (state, key[ix++]);
+ 7550              		.loc 3 2097 0
+ 7551 6319 8B851CFF 		mov	-228(%rbp), %eax
+ 7551      FFFF
+ 7552 631f 48C1E004 		salq	$4, %rax
+ 7553 6323 48038568 		addq	-408(%rbp), %rax
+
GAS LISTING /tmp/ccPaCTqg.s 			page 253
+
+
+ 7553      FEFFFF
+ 7554 632a 660F6F00 		movdqa	(%rax), %xmm0
+ 7555 632e 83851CFF 		addl	$1, -228(%rbp)
+ 7555      FFFF01
+ 7556 6335 660F6F8D 		movdqa	-400(%rbp), %xmm1
+ 7556      70FEFFFF 
+ 7557 633d F30F7F8D 		movdqu	%xmm1, -208(%rbp)
+ 7557      30FFFFFF 
+ 7558 6345 F30F7F85 		movdqu	%xmm0, -224(%rbp)
+ 7558      20FFFFFF 
+ 7559              	.LBB2245:
+ 7560              	.LBB2246:
+ 7561              	.LBB2247:
+1994:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Start of Round", state);
+ 7562              		.loc 3 1994 0
+ 7563 634d F30F6F85 		movdqu	-208(%rbp), %xmm0
+ 7563      30FFFFFF 
+ 7564 6355 F30F7F85 		movdqu	%xmm0, -352(%rbp)
+ 7564      A0FEFFFF 
+ 7565              		.cfi_offset 3, -40
+ 7566              		.cfi_offset 12, -32
+ 7567              		.cfi_offset 13, -24
+ 7568 635d E8000000 		call	KDbgWriterGet at PLT
+ 7568      00
+ 7569 6362 4885C0   		testq	%rax, %rax
+ 7570 6365 7479     		je	.L31
+ 7571 6367 BF010000 		movl	$1, %edi
+ 7571      00
+ 7572 636c E8000000 		call	KDbgCondToFlag at PLT
+ 7572      00
+ 7573 6371 4889C6   		movq	%rax, %rsi
+ 7574 6374 BF100000 		movl	$16, %edi
+ 7574      00
+ 7575 6379 E8000000 		call	KDbgTestModConds at PLT
+ 7575      00
+ 7576 637e 84C0     		testb	%al, %al
+ 7577 6380 745E     		je	.L31
+ 7578 6382 8B85ACFE 		movl	-340(%rbp), %eax
+ 7578      FFFF
+ 7579 6388 89C7     		movl	%eax, %edi
+ 7580 638a E8A89CFF 		call	bswap_32
+ 7580      FF
+ 7581 638f 4189C5   		movl	%eax, %r13d
+ 7582 6392 8B85A8FE 		movl	-344(%rbp), %eax
+ 7582      FFFF
+ 7583 6398 89C7     		movl	%eax, %edi
+ 7584 639a E8989CFF 		call	bswap_32
+ 7584      FF
+ 7585 639f 4189C4   		movl	%eax, %r12d
+ 7586 63a2 8B85A4FE 		movl	-348(%rbp), %eax
+ 7586      FFFF
+ 7587 63a8 89C7     		movl	%eax, %edi
+ 7588 63aa E8889CFF 		call	bswap_32
+ 7588      FF
+ 7589 63af 89C3     		movl	%eax, %ebx
+ 7590 63b1 8B85A0FE 		movl	-352(%rbp), %eax
+ 7590      FFFF
+
GAS LISTING /tmp/ccPaCTqg.s 			page 254
+
+
+ 7591 63b7 89C7     		movl	%eax, %edi
+ 7592 63b9 E8799CFF 		call	bswap_32
+ 7592      FF
+ 7593 63be 4589E9   		movl	%r13d, %r9d
+ 7594 63c1 4589E0   		movl	%r12d, %r8d
+ 7595 63c4 89D9     		movl	%ebx, %ecx
+ 7596 63c6 89C2     		movl	%eax, %edx
+ 7597 63c8 488D3500 		leaq	.LC0(%rip), %rsi
+ 7597      000000
+ 7598 63cf 488D3D00 		leaq	.LC1(%rip), %rdi
+ 7598      000000
+ 7599 63d6 B8000000 		movl	$0, %eax
+ 7599      00
+ 7600 63db E8000000 		call	KDbgMsg at PLT
+ 7600      00
+ 7601              	.L31:
+ 7602              	.LBE2247:
+ 7603              	.LBB2248:
+1996:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+ 7604              		.loc 3 1996 0
+ 7605 63e0 F30F6F85 		movdqu	-224(%rbp), %xmm0
+ 7605      20FFFFFF 
+ 7606 63e8 F30F7F85 		movdqu	%xmm0, -368(%rbp)
+ 7606      90FEFFFF 
+ 7607 63f0 E8000000 		call	KDbgWriterGet at PLT
+ 7607      00
+ 7608 63f5 4885C0   		testq	%rax, %rax
+ 7609 63f8 7479     		je	.L33
+ 7610 63fa BF010000 		movl	$1, %edi
+ 7610      00
+ 7611 63ff E8000000 		call	KDbgCondToFlag at PLT
+ 7611      00
+ 7612 6404 4889C6   		movq	%rax, %rsi
+ 7613 6407 BF100000 		movl	$16, %edi
+ 7613      00
+ 7614 640c E8000000 		call	KDbgTestModConds at PLT
+ 7614      00
+ 7615 6411 84C0     		testb	%al, %al
+ 7616 6413 745E     		je	.L33
+ 7617 6415 8B859CFE 		movl	-356(%rbp), %eax
+ 7617      FFFF
+ 7618 641b 89C7     		movl	%eax, %edi
+ 7619 641d E8159CFF 		call	bswap_32
+ 7619      FF
+ 7620 6422 4189C5   		movl	%eax, %r13d
+ 7621 6425 8B8598FE 		movl	-360(%rbp), %eax
+ 7621      FFFF
+ 7622 642b 89C7     		movl	%eax, %edi
+ 7623 642d E8059CFF 		call	bswap_32
+ 7623      FF
+ 7624 6432 4189C4   		movl	%eax, %r12d
+ 7625 6435 8B8594FE 		movl	-364(%rbp), %eax
+ 7625      FFFF
+ 7626 643b 89C7     		movl	%eax, %edi
+ 7627 643d E8F59BFF 		call	bswap_32
+ 7627      FF
+ 7628 6442 89C3     		movl	%eax, %ebx
+
GAS LISTING /tmp/ccPaCTqg.s 			page 255
+
+
+ 7629 6444 8B8590FE 		movl	-368(%rbp), %eax
+ 7629      FFFF
+ 7630 644a 89C7     		movl	%eax, %edi
+ 7631 644c E8E69BFF 		call	bswap_32
+ 7631      FF
+ 7632 6451 4589E9   		movl	%r13d, %r9d
+ 7633 6454 4589E0   		movl	%r12d, %r8d
+ 7634 6457 89D9     		movl	%ebx, %ecx
+ 7635 6459 89C2     		movl	%eax, %edx
+ 7636 645b 488D3500 		leaq	.LC2(%rip), %rsi
+ 7636      000000
+ 7637 6462 488D3D00 		leaq	.LC1(%rip), %rdi
+ 7637      000000
+ 7638 6469 B8000000 		movl	$0, %eax
+ 7638      00
+ 7639 646e E8000000 		call	KDbgMsg at PLT
+ 7639      00
+ 7640              	.L33:
+ 7641 6473 F30F6F85 		movdqu	-208(%rbp), %xmm0
+ 7641      30FFFFFF 
+ 7642 647b F30F7F85 		movdqu	%xmm0, -176(%rbp)
+ 7642      50FFFFFF 
+ 7643 6483 F30F6F85 		movdqu	-224(%rbp), %xmm0
+ 7643      20FFFFFF 
+ 7644 648b F30F7F85 		movdqu	%xmm0, -192(%rbp)
+ 7644      40FFFFFF 
+ 7645 6493 F30F6F85 		movdqu	-176(%rbp), %xmm0
+ 7645      50FFFFFF 
+ 7646 649b F30F7F85 		movdqu	%xmm0, -144(%rbp)
+ 7646      70FFFFFF 
+ 7647 64a3 F30F6F85 		movdqu	-192(%rbp), %xmm0
+ 7647      40FFFFFF 
+ 7648 64ab F30F7F85 		movdqu	%xmm0, -160(%rbp)
+ 7648      60FFFFFF 
+ 7649              	.LBE2248:
+ 7650              	.LBB2249:
+ 7651              	.LBB2250:
+ 7652              	.LBB2251:
+ 7653              	.LBB2252:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 7654              		.loc 3 178 0
+ 7655 64b3 F30F6F85 		movdqu	-160(%rbp), %xmm0
+ 7655      60FFFFFF 
+ 7656 64bb F30F6F8D 		movdqu	-144(%rbp), %xmm1
+ 7656      70FFFFFF 
+ 7657 64c3 660FEFC1 		pxor	%xmm1, %xmm0
+ 7658              	.LBE2252:
+ 7659              	.LBE2251:
+ 7660              	.LBE2250:
+ 7661              	.LBE2249:
+1998:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 7662              		.loc 3 1998 0
+ 7663 64c7 F30F7F85 		movdqu	%xmm0, -208(%rbp)
+ 7663      30FFFFFF 
+ 7664              	.LBB2253:
+2000:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("End 1st Round", state);
+ 7665              		.loc 3 2000 0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 256
+
+
+ 7666 64cf F30F6F85 		movdqu	-208(%rbp), %xmm0
+ 7666      30FFFFFF 
+ 7667 64d7 F30F7F85 		movdqu	%xmm0, -384(%rbp)
+ 7667      80FEFFFF 
+ 7668 64df E8000000 		call	KDbgWriterGet at PLT
+ 7668      00
+ 7669 64e4 4885C0   		testq	%rax, %rax
+ 7670 64e7 7479     		je	.L35
+ 7671 64e9 BF010000 		movl	$1, %edi
+ 7671      00
+ 7672 64ee E8000000 		call	KDbgCondToFlag at PLT
+ 7672      00
+ 7673 64f3 4889C6   		movq	%rax, %rsi
+ 7674 64f6 BF100000 		movl	$16, %edi
+ 7674      00
+ 7675 64fb E8000000 		call	KDbgTestModConds at PLT
+ 7675      00
+ 7676 6500 84C0     		testb	%al, %al
+ 7677 6502 745E     		je	.L35
+ 7678 6504 8B858CFE 		movl	-372(%rbp), %eax
+ 7678      FFFF
+ 7679 650a 89C7     		movl	%eax, %edi
+ 7680 650c E8269BFF 		call	bswap_32
+ 7680      FF
+ 7681 6511 4189C5   		movl	%eax, %r13d
+ 7682 6514 8B8588FE 		movl	-376(%rbp), %eax
+ 7682      FFFF
+ 7683 651a 89C7     		movl	%eax, %edi
+ 7684 651c E8169BFF 		call	bswap_32
+ 7684      FF
+ 7685 6521 4189C4   		movl	%eax, %r12d
+ 7686 6524 8B8584FE 		movl	-380(%rbp), %eax
+ 7686      FFFF
+ 7687 652a 89C7     		movl	%eax, %edi
+ 7688 652c E8069BFF 		call	bswap_32
+ 7688      FF
+ 7689 6531 89C3     		movl	%eax, %ebx
+ 7690 6533 8B8580FE 		movl	-384(%rbp), %eax
+ 7690      FFFF
+ 7691 6539 89C7     		movl	%eax, %edi
+ 7692 653b E8F79AFF 		call	bswap_32
+ 7692      FF
+ 7693 6540 4589E9   		movl	%r13d, %r9d
+ 7694 6543 4589E0   		movl	%r12d, %r8d
+ 7695 6546 89D9     		movl	%ebx, %ecx
+ 7696 6548 89C2     		movl	%eax, %edx
+ 7697 654a 488D3500 		leaq	.LC3(%rip), %rsi
+ 7697      000000
+ 7698 6551 488D3D00 		leaq	.LC1(%rip), %rdi
+ 7698      000000
+ 7699 6558 B8000000 		movl	$0, %eax
+ 7699      00
+ 7700 655d E8000000 		call	KDbgMsg at PLT
+ 7700      00
+ 7701              	.L35:
+ 7702              	.LBE2253:
+2002:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+
GAS LISTING /tmp/ccPaCTqg.s 			page 257
+
+
+ 7703              		.loc 3 2002 0
+ 7704 6562 F30F6F85 		movdqu	-208(%rbp), %xmm0
+ 7704      30FFFFFF 
+ 7705              	.LBE2246:
+ 7706              	.LBE2245:
+ 7707              		.loc 3 2097 0
+ 7708 656a 660F7F85 		movdqa	%xmm0, -400(%rbp)
+ 7708      70FEFFFF 
+2098:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2099:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for ( ; ix < Nr; ++ix)
+ 7709              		.loc 3 2099 0
+ 7710 6572 E9130200 		jmp	.L36
+ 7710      00
+ 7711              	.L43:
+2100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(MiddleRound) (state, key[ix] );
+ 7712              		.loc 3 2100 0
+ 7713 6577 8B851CFF 		mov	-228(%rbp), %eax
+ 7713      FFFF
+ 7714 657d 48C1E004 		salq	$4, %rax
+ 7715 6581 48038568 		addq	-408(%rbp), %rax
+ 7715      FEFFFF
+ 7716 6588 660F6F00 		movdqa	(%rax), %xmm0
+ 7717 658c 660F6F8D 		movdqa	-400(%rbp), %xmm1
+ 7717      70FEFFFF 
+ 7718 6594 F30F7F4D 		movdqu	%xmm1, -112(%rbp)
+ 7718      90
+ 7719 6599 F30F7F45 		movdqu	%xmm0, -128(%rbp)
+ 7719      80
+ 7720              	.LBB2254:
+ 7721              	.LBB2255:
+2019:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+ 7722              		.loc 3 2019 0
+ 7723 659e F30F6F45 		movdqu	-112(%rbp), %xmm0
+ 7723      90
+ 7724 65a3 F30F7F45 		movdqu	%xmm0, -80(%rbp)
+ 7724      B0
+2020:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mround_keys = round_keys;
+ 7725              		.loc 3 2020 0
+ 7726 65a8 F30F6F45 		movdqu	-128(%rbp), %xmm0
+ 7726      80
+ 7727 65ad F30F7F45 		movdqu	%xmm0, -96(%rbp)
+ 7727      A0
+ 7728              	.LBB2256:
+2022:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Start of Round", mstate);
+ 7729              		.loc 3 2022 0
+ 7730 65b2 F30F6F45 		movdqu	-80(%rbp), %xmm0
+ 7730      B0
+ 7731 65b7 F30F7F85 		movdqu	%xmm0, -304(%rbp)
+ 7731      D0FEFFFF 
+ 7732 65bf E8000000 		call	KDbgWriterGet at PLT
+ 7732      00
+ 7733 65c4 4885C0   		testq	%rax, %rax
+ 7734 65c7 7479     		je	.L38
+ 7735 65c9 BF010000 		movl	$1, %edi
+ 7735      00
+ 7736 65ce E8000000 		call	KDbgCondToFlag at PLT
+ 7736      00
+
GAS LISTING /tmp/ccPaCTqg.s 			page 258
+
+
+ 7737 65d3 4889C6   		movq	%rax, %rsi
+ 7738 65d6 BF100000 		movl	$16, %edi
+ 7738      00
+ 7739 65db E8000000 		call	KDbgTestModConds at PLT
+ 7739      00
+ 7740 65e0 84C0     		testb	%al, %al
+ 7741 65e2 745E     		je	.L38
+ 7742 65e4 8B85DCFE 		movl	-292(%rbp), %eax
+ 7742      FFFF
+ 7743 65ea 89C7     		movl	%eax, %edi
+ 7744 65ec E8469AFF 		call	bswap_32
+ 7744      FF
+ 7745 65f1 4189C5   		movl	%eax, %r13d
+ 7746 65f4 8B85D8FE 		movl	-296(%rbp), %eax
+ 7746      FFFF
+ 7747 65fa 89C7     		movl	%eax, %edi
+ 7748 65fc E8369AFF 		call	bswap_32
+ 7748      FF
+ 7749 6601 4189C4   		movl	%eax, %r12d
+ 7750 6604 8B85D4FE 		movl	-300(%rbp), %eax
+ 7750      FFFF
+ 7751 660a 89C7     		movl	%eax, %edi
+ 7752 660c E8269AFF 		call	bswap_32
+ 7752      FF
+ 7753 6611 89C3     		movl	%eax, %ebx
+ 7754 6613 8B85D0FE 		movl	-304(%rbp), %eax
+ 7754      FFFF
+ 7755 6619 89C7     		movl	%eax, %edi
+ 7756 661b E8179AFF 		call	bswap_32
+ 7756      FF
+ 7757 6620 4589E9   		movl	%r13d, %r9d
+ 7758 6623 4589E0   		movl	%r12d, %r8d
+ 7759 6626 89D9     		movl	%ebx, %ecx
+ 7760 6628 89C2     		movl	%eax, %edx
+ 7761 662a 488D3500 		leaq	.LC0(%rip), %rsi
+ 7761      000000
+ 7762 6631 488D3D00 		leaq	.LC1(%rip), %rdi
+ 7762      000000
+ 7763 6638 B8000000 		movl	$0, %eax
+ 7763      00
+ 7764 663d E8000000 		call	KDbgMsg at PLT
+ 7764      00
+ 7765              	.L38:
+ 7766              	.LBE2256:
+2027:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_AESENC (state, round_keys);
+ 7767              		.loc 3 2027 0
+ 7768 6642 F30F6F4D 		movdqu	-128(%rbp), %xmm1
+ 7768      80
+ 7769 6647 F30F6F45 		movdqu	-112(%rbp), %xmm0
+ 7769      90
+ 7770 664c E8AF99FF 		call	op_AESENC
+ 7770      FF
+ 7771 6651 F30F7F45 		movdqu	%xmm0, -112(%rbp)
+ 7771      90
+ 7772              	.LBB2257:
+2044:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+ 7773              		.loc 3 2044 0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 259
+
+
+ 7774 6656 F30F6F45 		movdqu	-128(%rbp), %xmm0
+ 7774      80
+ 7775 665b F30F7F85 		movdqu	%xmm0, -320(%rbp)
+ 7775      C0FEFFFF 
+ 7776 6663 E8000000 		call	KDbgWriterGet at PLT
+ 7776      00
+ 7777 6668 4885C0   		testq	%rax, %rax
+ 7778 666b 7479     		je	.L40
+ 7779 666d BF010000 		movl	$1, %edi
+ 7779      00
+ 7780 6672 E8000000 		call	KDbgCondToFlag at PLT
+ 7780      00
+ 7781 6677 4889C6   		movq	%rax, %rsi
+ 7782 667a BF100000 		movl	$16, %edi
+ 7782      00
+ 7783 667f E8000000 		call	KDbgTestModConds at PLT
+ 7783      00
+ 7784 6684 84C0     		testb	%al, %al
+ 7785 6686 745E     		je	.L40
+ 7786 6688 8B85CCFE 		movl	-308(%rbp), %eax
+ 7786      FFFF
+ 7787 668e 89C7     		movl	%eax, %edi
+ 7788 6690 E8A299FF 		call	bswap_32
+ 7788      FF
+ 7789 6695 4189C5   		movl	%eax, %r13d
+ 7790 6698 8B85C8FE 		movl	-312(%rbp), %eax
+ 7790      FFFF
+ 7791 669e 89C7     		movl	%eax, %edi
+ 7792 66a0 E89299FF 		call	bswap_32
+ 7792      FF
+ 7793 66a5 4189C4   		movl	%eax, %r12d
+ 7794 66a8 8B85C4FE 		movl	-316(%rbp), %eax
+ 7794      FFFF
+ 7795 66ae 89C7     		movl	%eax, %edi
+ 7796 66b0 E88299FF 		call	bswap_32
+ 7796      FF
+ 7797 66b5 89C3     		movl	%eax, %ebx
+ 7798 66b7 8B85C0FE 		movl	-320(%rbp), %eax
+ 7798      FFFF
+ 7799 66bd 89C7     		movl	%eax, %edi
+ 7800 66bf E87399FF 		call	bswap_32
+ 7800      FF
+ 7801 66c4 4589E9   		movl	%r13d, %r9d
+ 7802 66c7 4589E0   		movl	%r12d, %r8d
+ 7803 66ca 89D9     		movl	%ebx, %ecx
+ 7804 66cc 89C2     		movl	%eax, %edx
+ 7805 66ce 488D3500 		leaq	.LC2(%rip), %rsi
+ 7805      000000
+ 7806 66d5 488D3D00 		leaq	.LC1(%rip), %rdi
+ 7806      000000
+ 7807 66dc B8000000 		movl	$0, %eax
+ 7807      00
+ 7808 66e1 E8000000 		call	KDbgMsg at PLT
+ 7808      00
+ 7809              	.L40:
+ 7810              	.LBE2257:
+ 7811              	.LBB2258:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 260
+
+
+2045:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("End of Round", state);
+ 7812              		.loc 3 2045 0
+ 7813 66e6 F30F6F45 		movdqu	-112(%rbp), %xmm0
+ 7813      90
+ 7814 66eb F30F7F85 		movdqu	%xmm0, -336(%rbp)
+ 7814      B0FEFFFF 
+ 7815 66f3 E8000000 		call	KDbgWriterGet at PLT
+ 7815      00
+ 7816 66f8 4885C0   		testq	%rax, %rax
+ 7817 66fb 7479     		je	.L42
+ 7818 66fd BF010000 		movl	$1, %edi
+ 7818      00
+ 7819 6702 E8000000 		call	KDbgCondToFlag at PLT
+ 7819      00
+ 7820 6707 4889C6   		movq	%rax, %rsi
+ 7821 670a BF100000 		movl	$16, %edi
+ 7821      00
+ 7822 670f E8000000 		call	KDbgTestModConds at PLT
+ 7822      00
+ 7823 6714 84C0     		testb	%al, %al
+ 7824 6716 745E     		je	.L42
+ 7825 6718 8B85BCFE 		movl	-324(%rbp), %eax
+ 7825      FFFF
+ 7826 671e 89C7     		movl	%eax, %edi
+ 7827 6720 E81299FF 		call	bswap_32
+ 7827      FF
+ 7828 6725 4189C5   		movl	%eax, %r13d
+ 7829 6728 8B85B8FE 		movl	-328(%rbp), %eax
+ 7829      FFFF
+ 7830 672e 89C7     		movl	%eax, %edi
+ 7831 6730 E80299FF 		call	bswap_32
+ 7831      FF
+ 7832 6735 4189C4   		movl	%eax, %r12d
+ 7833 6738 8B85B4FE 		movl	-332(%rbp), %eax
+ 7833      FFFF
+ 7834 673e 89C7     		movl	%eax, %edi
+ 7835 6740 E8F298FF 		call	bswap_32
+ 7835      FF
+ 7836 6745 89C3     		movl	%eax, %ebx
+ 7837 6747 8B85B0FE 		movl	-336(%rbp), %eax
+ 7837      FFFF
+ 7838 674d 89C7     		movl	%eax, %edi
+ 7839 674f E8E398FF 		call	bswap_32
+ 7839      FF
+ 7840 6754 4589E9   		movl	%r13d, %r9d
+ 7841 6757 4589E0   		movl	%r12d, %r8d
+ 7842 675a 89D9     		movl	%ebx, %ecx
+ 7843 675c 89C2     		movl	%eax, %edx
+ 7844 675e 488D3500 		leaq	.LC4(%rip), %rsi
+ 7844      000000
+ 7845 6765 488D3D00 		leaq	.LC1(%rip), %rdi
+ 7845      000000
+ 7846 676c B8000000 		movl	$0, %eax
+ 7846      00
+ 7847 6771 E8000000 		call	KDbgMsg at PLT
+ 7847      00
+ 7848              	.L42:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 261
+
+
+ 7849              	.LBE2258:
+2047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 7850              		.loc 3 2047 0
+ 7851 6776 F30F6F45 		movdqu	-112(%rbp), %xmm0
+ 7851      90
+ 7852              	.LBE2255:
+ 7853              	.LBE2254:
+ 7854              		.loc 3 2100 0
+ 7855 677b 660F7F85 		movdqa	%xmm0, -400(%rbp)
+ 7855      70FEFFFF 
+2099:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for ( ; ix < Nr; ++ix)
+ 7856              		.loc 3 2099 0
+ 7857 6783 83851CFF 		addl	$1, -228(%rbp)
+ 7857      FFFF01
+ 7858              	.L36:
+ 7859 678a 8B851CFF 		movl	-228(%rbp), %eax
+ 7859      FFFF
+ 7860 6790 3B8564FE 		cmpl	-412(%rbp), %eax
+ 7860      FFFF
+ 7861 6796 0F82DBFD 		jb	.L43
+ 7861      FFFF
+2101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(LastRound) (state, key[ix]);
+ 7862              		.loc 3 2102 0
+ 7863 679c 8B851CFF 		mov	-228(%rbp), %eax
+ 7863      FFFF
+ 7864 67a2 48C1E004 		salq	$4, %rax
+ 7865 67a6 48038568 		addq	-408(%rbp), %rax
+ 7865      FEFFFF
+ 7866 67ad 660F6F00 		movdqa	(%rax), %xmm0
+ 7867 67b1 660F6F8D 		movdqa	-400(%rbp), %xmm1
+ 7867      70FEFFFF 
+ 7868 67b9 F30F7F4D 		movdqu	%xmm1, -48(%rbp)
+ 7868      D0
+ 7869 67be F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 7869      C0
+ 7870              	.LBB2259:
+ 7871              	.LBB2260:
+ 7872              	.LBB2261:
+2058:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Start of Round", state);
+ 7873              		.loc 3 2058 0
+ 7874 67c3 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 7874      D0
+ 7875 67c8 F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 7875      00FFFFFF 
+ 7876 67d0 E8000000 		call	KDbgWriterGet at PLT
+ 7876      00
+ 7877 67d5 4885C0   		testq	%rax, %rax
+ 7878 67d8 7479     		je	.L45
+ 7879 67da BF010000 		movl	$1, %edi
+ 7879      00
+ 7880 67df E8000000 		call	KDbgCondToFlag at PLT
+ 7880      00
+ 7881 67e4 4889C6   		movq	%rax, %rsi
+ 7882 67e7 BF100000 		movl	$16, %edi
+ 7882      00
+ 7883 67ec E8000000 		call	KDbgTestModConds at PLT
+
GAS LISTING /tmp/ccPaCTqg.s 			page 262
+
+
+ 7883      00
+ 7884 67f1 84C0     		testb	%al, %al
+ 7885 67f3 745E     		je	.L45
+ 7886 67f5 8B850CFF 		movl	-244(%rbp), %eax
+ 7886      FFFF
+ 7887 67fb 89C7     		movl	%eax, %edi
+ 7888 67fd E83598FF 		call	bswap_32
+ 7888      FF
+ 7889 6802 4189C5   		movl	%eax, %r13d
+ 7890 6805 8B8508FF 		movl	-248(%rbp), %eax
+ 7890      FFFF
+ 7891 680b 89C7     		movl	%eax, %edi
+ 7892 680d E82598FF 		call	bswap_32
+ 7892      FF
+ 7893 6812 4189C4   		movl	%eax, %r12d
+ 7894 6815 8B8504FF 		movl	-252(%rbp), %eax
+ 7894      FFFF
+ 7895 681b 89C7     		movl	%eax, %edi
+ 7896 681d E81598FF 		call	bswap_32
+ 7896      FF
+ 7897 6822 89C3     		movl	%eax, %ebx
+ 7898 6824 8B8500FF 		movl	-256(%rbp), %eax
+ 7898      FFFF
+ 7899 682a 89C7     		movl	%eax, %edi
+ 7900 682c E80698FF 		call	bswap_32
+ 7900      FF
+ 7901 6831 4589E9   		movl	%r13d, %r9d
+ 7902 6834 4589E0   		movl	%r12d, %r8d
+ 7903 6837 89D9     		movl	%ebx, %ecx
+ 7904 6839 89C2     		movl	%eax, %edx
+ 7905 683b 488D3500 		leaq	.LC0(%rip), %rsi
+ 7905      000000
+ 7906 6842 488D3D00 		leaq	.LC1(%rip), %rdi
+ 7906      000000
+ 7907 6849 B8000000 		movl	$0, %eax
+ 7907      00
+ 7908 684e E8000000 		call	KDbgMsg at PLT
+ 7908      00
+ 7909              	.L45:
+ 7910              	.LBE2261:
+2061:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_AESENCLAST (state, round_keys);
+ 7911              		.loc 3 2061 0
+ 7912 6853 F30F6F4D 		movdqu	-64(%rbp), %xmm1
+ 7912      C0
+ 7913 6858 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 7913      D0
+ 7914 685d E8A997FF 		call	op_AESENCLAST
+ 7914      FF
+ 7915 6862 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 7915      D0
+ 7916              	.LBB2262:
+2073:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+ 7917              		.loc 3 2073 0
+ 7918 6867 F30F6F45 		movdqu	-64(%rbp), %xmm0
+ 7918      C0
+ 7919 686c F30F7F85 		movdqu	%xmm0, -272(%rbp)
+ 7919      F0FEFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 263
+
+
+ 7920 6874 E8000000 		call	KDbgWriterGet at PLT
+ 7920      00
+ 7921 6879 4885C0   		testq	%rax, %rax
+ 7922 687c 7479     		je	.L47
+ 7923 687e BF010000 		movl	$1, %edi
+ 7923      00
+ 7924 6883 E8000000 		call	KDbgCondToFlag at PLT
+ 7924      00
+ 7925 6888 4889C6   		movq	%rax, %rsi
+ 7926 688b BF100000 		movl	$16, %edi
+ 7926      00
+ 7927 6890 E8000000 		call	KDbgTestModConds at PLT
+ 7927      00
+ 7928 6895 84C0     		testb	%al, %al
+ 7929 6897 745E     		je	.L47
+ 7930 6899 8B85FCFE 		movl	-260(%rbp), %eax
+ 7930      FFFF
+ 7931 689f 89C7     		movl	%eax, %edi
+ 7932 68a1 E89197FF 		call	bswap_32
+ 7932      FF
+ 7933 68a6 4189C5   		movl	%eax, %r13d
+ 7934 68a9 8B85F8FE 		movl	-264(%rbp), %eax
+ 7934      FFFF
+ 7935 68af 89C7     		movl	%eax, %edi
+ 7936 68b1 E88197FF 		call	bswap_32
+ 7936      FF
+ 7937 68b6 4189C4   		movl	%eax, %r12d
+ 7938 68b9 8B85F4FE 		movl	-268(%rbp), %eax
+ 7938      FFFF
+ 7939 68bf 89C7     		movl	%eax, %edi
+ 7940 68c1 E87197FF 		call	bswap_32
+ 7940      FF
+ 7941 68c6 89C3     		movl	%eax, %ebx
+ 7942 68c8 8B85F0FE 		movl	-272(%rbp), %eax
+ 7942      FFFF
+ 7943 68ce 89C7     		movl	%eax, %edi
+ 7944 68d0 E86297FF 		call	bswap_32
+ 7944      FF
+ 7945 68d5 4589E9   		movl	%r13d, %r9d
+ 7946 68d8 4589E0   		movl	%r12d, %r8d
+ 7947 68db 89D9     		movl	%ebx, %ecx
+ 7948 68dd 89C2     		movl	%eax, %edx
+ 7949 68df 488D3500 		leaq	.LC2(%rip), %rsi
+ 7949      000000
+ 7950 68e6 488D3D00 		leaq	.LC1(%rip), %rdi
+ 7950      000000
+ 7951 68ed B8000000 		movl	$0, %eax
+ 7951      00
+ 7952 68f2 E8000000 		call	KDbgMsg at PLT
+ 7952      00
+ 7953              	.L47:
+ 7954              	.LBE2262:
+ 7955              	.LBB2263:
+2074:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("End of Round", state);
+ 7956              		.loc 3 2074 0
+ 7957 68f7 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 7957      D0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 264
+
+
+ 7958 68fc F30F7F85 		movdqu	%xmm0, -288(%rbp)
+ 7958      E0FEFFFF 
+ 7959 6904 E8000000 		call	KDbgWriterGet at PLT
+ 7959      00
+ 7960 6909 4885C0   		testq	%rax, %rax
+ 7961 690c 7479     		je	.L49
+ 7962 690e BF010000 		movl	$1, %edi
+ 7962      00
+ 7963 6913 E8000000 		call	KDbgCondToFlag at PLT
+ 7963      00
+ 7964 6918 4889C6   		movq	%rax, %rsi
+ 7965 691b BF100000 		movl	$16, %edi
+ 7965      00
+ 7966 6920 E8000000 		call	KDbgTestModConds at PLT
+ 7966      00
+ 7967 6925 84C0     		testb	%al, %al
+ 7968 6927 745E     		je	.L49
+ 7969 6929 8B85ECFE 		movl	-276(%rbp), %eax
+ 7969      FFFF
+ 7970 692f 89C7     		movl	%eax, %edi
+ 7971 6931 E80197FF 		call	bswap_32
+ 7971      FF
+ 7972 6936 4189C5   		movl	%eax, %r13d
+ 7973 6939 8B85E8FE 		movl	-280(%rbp), %eax
+ 7973      FFFF
+ 7974 693f 89C7     		movl	%eax, %edi
+ 7975 6941 E8F196FF 		call	bswap_32
+ 7975      FF
+ 7976 6946 4189C4   		movl	%eax, %r12d
+ 7977 6949 8B85E4FE 		movl	-284(%rbp), %eax
+ 7977      FFFF
+ 7978 694f 89C7     		movl	%eax, %edi
+ 7979 6951 E8E196FF 		call	bswap_32
+ 7979      FF
+ 7980 6956 89C3     		movl	%eax, %ebx
+ 7981 6958 8B85E0FE 		movl	-288(%rbp), %eax
+ 7981      FFFF
+ 7982 695e 89C7     		movl	%eax, %edi
+ 7983 6960 E8D296FF 		call	bswap_32
+ 7983      FF
+ 7984 6965 4589E9   		movl	%r13d, %r9d
+ 7985 6968 4589E0   		movl	%r12d, %r8d
+ 7986 696b 89D9     		movl	%ebx, %ecx
+ 7987 696d 89C2     		movl	%eax, %edx
+ 7988 696f 488D3500 		leaq	.LC4(%rip), %rsi
+ 7988      000000
+ 7989 6976 488D3D00 		leaq	.LC1(%rip), %rdi
+ 7989      000000
+ 7990 697d B8000000 		movl	$0, %eax
+ 7990      00
+ 7991 6982 E8000000 		call	KDbgMsg at PLT
+ 7991      00
+ 7992              	.L49:
+ 7993              	.LBE2263:
+2076:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 7994              		.loc 3 2076 0
+ 7995 6987 F30F6F45 		movdqu	-48(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 265
+
+
+ 7995      D0
+ 7996              	.LBE2260:
+ 7997              	.LBE2259:
+2103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 7998              		.loc 3 2103 0
+ 7999 698c 4881C488 		addq	$392, %rsp
+ 7999      010000
+ 8000 6993 5B       		popq	%rbx
+ 8001 6994 415C     		popq	%r12
+ 8002 6996 415D     		popq	%r13
+ 8003 6998 C9       		leave
+ 8004 6999 C3       		ret
+ 8005              		.cfi_endproc
+ 8006              	.LFE666:
+ 8007              		.size	KAESBlockCipherVecAesNiCipher, .-KAESBlockCipherVecAesNiCipher
+ 8008              		.type	KAESBlockCipherVecAesNiEqInvCipher, @function
+ 8009              	KAESBlockCipherVecAesNiEqInvCipher:
+ 8010              	.LFB670:
+2104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 
+2107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Section 5.1 of FIPS 197
+2108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   This set of routines implements our structured wrapping of the 
+2110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   FIPS-197 Section 5.3.5 Equivalent Inverse Cipher.  In particular
+2111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   figure 15 Pseudo Code for the Equivalent Inverse Cipher.
+2112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   The FIPS pseudocode has a single function which we have broken out 
+2114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   into three kinds of rounds - first round, middle rounds and last
+2115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   round as we have also done with the cipher rountine.
+2116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   The EqInvCipher operates on whole cipher blocks so the Byte and Block
+2118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   code is the same here until subroutines of the round functions are
+2119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   called.  
+2120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 
+2123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * First round of equivalent inverse cipher is merely an XOR against the
+2124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * round key.
+2125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvFirstRound) (CipherVec state, CipherVec round_keys)
+2128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+2129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvFirstRound) (CipherVec state, CipherVec round_keys)
+2132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+2134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state =  AESBCMEMBER(AddRoundKey) (state, round_keys);
+2136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+2138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("End of Round", state);
+2139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+2140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 266
+
+
+2143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * middle rounds of the equivalent inverse cipher perform four steps
+2145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   InvSubBytes (inverse substitute bytes
+2146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   InvShiftRows (inverse shift rows
+2147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   InvMixColumns (inverse mix columns)
+2148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   AddRoundKey   (xor against the round key)
+2149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * the AES-NI instruction set from until implments all four steps with 
+2151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * a single instruction
+2152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvMiddleRound) (register CipherVec state,
+2156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                          register CipherVec round_keys)
+2157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+2158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvMiddleRound) (register CipherVec state,
+2161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                          register CipherVec round_keys)
+2162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if _DEBUGGING
+2164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec mstate;
+2165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec mround_keys;
+2166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+2168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mround_keys = round_keys;
+2169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Start of Round", mstate);
+2172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /* 
+2174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * AES-NI implmentation
+2175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      */
+2176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_AESDEC (state, round_keys);
+2179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else /* #if USE_AES_NI */
+2181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /*
+2183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * All other implementations
+2184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      */
+2185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvSubBytes) (state);
+2186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # if _DEBUGGING
+2188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+2189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvSubBy", mstate);
+2191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # endif
+2192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvShiftRows) (state);
+2194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # if _DEBUGGING
+2196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+2197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvShift", mstate);
+2199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # endif
+
GAS LISTING /tmp/ccPaCTqg.s 			page 267
+
+
+2200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvMixColumns) (state);
+2202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # if _DEBUGGING
+2204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+2205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvMixCo", mstate);
+2207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # endif
+2208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if _DEBUGGING
+2213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+2214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Round Key", mround_keys);
+2216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("End of Round", mstate);
+2218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif /* #if USE_AES_NI */
+2219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+2221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * The final round of the equivalent inverse cipher is the same as 
+2226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * the middle rounds with the ommission of the InvMixColumns step.
+2227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvLastRound) (register CipherVec state,
+2230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                        register CipherVec round_keys)
+2231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+2232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvLastRound) (register CipherVec state,
+2235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                        register CipherVec round_keys)
+2236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+2238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_AESDECLAST (state, round_keys);
+2241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+2242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvSubBytes) (state);
+2244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvSubBy", state);
+2246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvShiftRows) (state);
+2248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvShift", state);
+2250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+2254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("End of Round", state);
+2255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+
GAS LISTING /tmp/ccPaCTqg.s 			page 268
+
+
+2257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * The EqInvCipher functions (is defined in Figure 15 'Pseudo Code for
+2262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * for the Equivalent Inverse Cipher.  This implementation as stated
+2263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * above for simplifaction broke out the three types of rounds into
+2264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * first round, middle rounds, and last round.  This approach was taken
+2265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * for ease of coding for optimization using smaller bytes of code
+2266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * but inlining of the functions for efficiency
+2267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static /*__inline__*/
+2269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvCipher) (CipherVec state, const CipherVec * key,
+2270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                     unsigned Nr)
+2271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8011              		.loc 3 2271 0
+ 8012              		.cfi_startproc
+ 8013 699a 55       		pushq	%rbp
+ 8014              	.LCFI28:
+ 8015              		.cfi_def_cfa_offset 16
+ 8016 699b 4889E5   		movq	%rsp, %rbp
+ 8017              		.cfi_offset 6, -16
+ 8018              	.LCFI29:
+ 8019              		.cfi_def_cfa_register 6
+ 8020 699e 4155     		pushq	%r13
+ 8021 69a0 4154     		pushq	%r12
+ 8022 69a2 53       		pushq	%rbx
+ 8023 69a3 4881EC88 		subq	$392, %rsp
+ 8023      010000
+ 8024 69aa 660F7F85 		movdqa	%xmm0, -400(%rbp)
+ 8024      70FEFFFF 
+ 8025 69b2 4889BD68 		movq	%rdi, -408(%rbp)
+ 8025      FEFFFF
+ 8026 69b9 89B564FE 		movl	%esi, -412(%rbp)
+ 8026      FFFF
+2272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix = 0;
+ 8027              		.loc 3 2272 0
+ 8028 69bf C7851CFF 		movl	$0, -228(%rbp)
+ 8028      FFFF0000 
+ 8028      0000
+2273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(EqInvFirstRound) (state, key[ix++]);
+ 8029              		.loc 3 2274 0
+ 8030 69c9 8B851CFF 		mov	-228(%rbp), %eax
+ 8030      FFFF
+ 8031 69cf 48C1E004 		salq	$4, %rax
+ 8032 69d3 48038568 		addq	-408(%rbp), %rax
+ 8032      FEFFFF
+ 8033 69da 660F6F00 		movdqa	(%rax), %xmm0
+ 8034 69de 83851CFF 		addl	$1, -228(%rbp)
+ 8034      FFFF01
+ 8035 69e5 660F6F8D 		movdqa	-400(%rbp), %xmm1
+ 8035      70FEFFFF 
+ 8036 69ed F30F7F8D 		movdqu	%xmm1, -208(%rbp)
+ 8036      30FFFFFF 
+ 8037 69f5 F30F7F85 		movdqu	%xmm0, -224(%rbp)
+ 8037      20FFFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 269
+
+
+ 8038              	.LBB2283:
+ 8039              	.LBB2284:
+ 8040              	.LBB2285:
+2133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+ 8041              		.loc 3 2133 0
+ 8042 69fd F30F6F85 		movdqu	-208(%rbp), %xmm0
+ 8042      30FFFFFF 
+ 8043 6a05 F30F7F85 		movdqu	%xmm0, -352(%rbp)
+ 8043      A0FEFFFF 
+ 8044              		.cfi_offset 3, -40
+ 8045              		.cfi_offset 12, -32
+ 8046              		.cfi_offset 13, -24
+ 8047 6a0d E8000000 		call	KDbgWriterGet at PLT
+ 8047      00
+ 8048 6a12 4885C0   		testq	%rax, %rax
+ 8049 6a15 7479     		je	.L53
+ 8050 6a17 BF030000 		movl	$3, %edi
+ 8050      00
+ 8051 6a1c E8000000 		call	KDbgCondToFlag at PLT
+ 8051      00
+ 8052 6a21 4889C6   		movq	%rax, %rsi
+ 8053 6a24 BF100000 		movl	$16, %edi
+ 8053      00
+ 8054 6a29 E8000000 		call	KDbgTestModConds at PLT
+ 8054      00
+ 8055 6a2e 84C0     		testb	%al, %al
+ 8056 6a30 745E     		je	.L53
+ 8057 6a32 8B85ACFE 		movl	-340(%rbp), %eax
+ 8057      FFFF
+ 8058 6a38 89C7     		movl	%eax, %edi
+ 8059 6a3a E8F895FF 		call	bswap_32
+ 8059      FF
+ 8060 6a3f 4189C5   		movl	%eax, %r13d
+ 8061 6a42 8B85A8FE 		movl	-344(%rbp), %eax
+ 8061      FFFF
+ 8062 6a48 89C7     		movl	%eax, %edi
+ 8063 6a4a E8E895FF 		call	bswap_32
+ 8063      FF
+ 8064 6a4f 4189C4   		movl	%eax, %r12d
+ 8065 6a52 8B85A4FE 		movl	-348(%rbp), %eax
+ 8065      FFFF
+ 8066 6a58 89C7     		movl	%eax, %edi
+ 8067 6a5a E8D895FF 		call	bswap_32
+ 8067      FF
+ 8068 6a5f 89C3     		movl	%eax, %ebx
+ 8069 6a61 8B85A0FE 		movl	-352(%rbp), %eax
+ 8069      FFFF
+ 8070 6a67 89C7     		movl	%eax, %edi
+ 8071 6a69 E8C995FF 		call	bswap_32
+ 8071      FF
+ 8072 6a6e 4589E9   		movl	%r13d, %r9d
+ 8073 6a71 4589E0   		movl	%r12d, %r8d
+ 8074 6a74 89D9     		movl	%ebx, %ecx
+ 8075 6a76 89C2     		movl	%eax, %edx
+ 8076 6a78 488D3500 		leaq	.LC0(%rip), %rsi
+ 8076      000000
+ 8077 6a7f 488D3D00 		leaq	.LC1(%rip), %rdi
+
GAS LISTING /tmp/ccPaCTqg.s 			page 270
+
+
+ 8077      000000
+ 8078 6a86 B8000000 		movl	$0, %eax
+ 8078      00
+ 8079 6a8b E8000000 		call	KDbgMsg at PLT
+ 8079      00
+ 8080              	.L53:
+ 8081 6a90 F30F6F85 		movdqu	-208(%rbp), %xmm0
+ 8081      30FFFFFF 
+ 8082 6a98 F30F7F85 		movdqu	%xmm0, -176(%rbp)
+ 8082      50FFFFFF 
+ 8083 6aa0 F30F6F85 		movdqu	-224(%rbp), %xmm0
+ 8083      20FFFFFF 
+ 8084 6aa8 F30F7F85 		movdqu	%xmm0, -192(%rbp)
+ 8084      40FFFFFF 
+ 8085 6ab0 F30F6F85 		movdqu	-176(%rbp), %xmm0
+ 8085      50FFFFFF 
+ 8086 6ab8 F30F7F85 		movdqu	%xmm0, -144(%rbp)
+ 8086      70FFFFFF 
+ 8087 6ac0 F30F6F85 		movdqu	-192(%rbp), %xmm0
+ 8087      40FFFFFF 
+ 8088 6ac8 F30F7F85 		movdqu	%xmm0, -160(%rbp)
+ 8088      60FFFFFF 
+ 8089              	.LBE2285:
+ 8090              	.LBB2286:
+ 8091              	.LBB2287:
+ 8092              	.LBB2288:
+ 8093              	.LBB2289:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 8094              		.loc 3 178 0
+ 8095 6ad0 F30F6F85 		movdqu	-160(%rbp), %xmm0
+ 8095      60FFFFFF 
+ 8096 6ad8 F30F6F8D 		movdqu	-144(%rbp), %xmm1
+ 8096      70FFFFFF 
+ 8097 6ae0 660FEFC1 		pxor	%xmm1, %xmm0
+ 8098              	.LBE2289:
+ 8099              	.LBE2288:
+ 8100              	.LBE2287:
+ 8101              	.LBE2286:
+2135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state =  AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 8102              		.loc 3 2135 0
+ 8103 6ae4 F30F7F85 		movdqu	%xmm0, -208(%rbp)
+ 8103      30FFFFFF 
+ 8104              	.LBB2290:
+2137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+ 8105              		.loc 3 2137 0
+ 8106 6aec F30F6F85 		movdqu	-224(%rbp), %xmm0
+ 8106      20FFFFFF 
+ 8107 6af4 F30F7F85 		movdqu	%xmm0, -368(%rbp)
+ 8107      90FEFFFF 
+ 8108 6afc E8000000 		call	KDbgWriterGet at PLT
+ 8108      00
+ 8109 6b01 4885C0   		testq	%rax, %rax
+ 8110 6b04 7479     		je	.L55
+ 8111 6b06 BF030000 		movl	$3, %edi
+ 8111      00
+ 8112 6b0b E8000000 		call	KDbgCondToFlag at PLT
+ 8112      00
+
GAS LISTING /tmp/ccPaCTqg.s 			page 271
+
+
+ 8113 6b10 4889C6   		movq	%rax, %rsi
+ 8114 6b13 BF100000 		movl	$16, %edi
+ 8114      00
+ 8115 6b18 E8000000 		call	KDbgTestModConds at PLT
+ 8115      00
+ 8116 6b1d 84C0     		testb	%al, %al
+ 8117 6b1f 745E     		je	.L55
+ 8118 6b21 8B859CFE 		movl	-356(%rbp), %eax
+ 8118      FFFF
+ 8119 6b27 89C7     		movl	%eax, %edi
+ 8120 6b29 E80995FF 		call	bswap_32
+ 8120      FF
+ 8121 6b2e 4189C5   		movl	%eax, %r13d
+ 8122 6b31 8B8598FE 		movl	-360(%rbp), %eax
+ 8122      FFFF
+ 8123 6b37 89C7     		movl	%eax, %edi
+ 8124 6b39 E8F994FF 		call	bswap_32
+ 8124      FF
+ 8125 6b3e 4189C4   		movl	%eax, %r12d
+ 8126 6b41 8B8594FE 		movl	-364(%rbp), %eax
+ 8126      FFFF
+ 8127 6b47 89C7     		movl	%eax, %edi
+ 8128 6b49 E8E994FF 		call	bswap_32
+ 8128      FF
+ 8129 6b4e 89C3     		movl	%eax, %ebx
+ 8130 6b50 8B8590FE 		movl	-368(%rbp), %eax
+ 8130      FFFF
+ 8131 6b56 89C7     		movl	%eax, %edi
+ 8132 6b58 E8DA94FF 		call	bswap_32
+ 8132      FF
+ 8133 6b5d 4589E9   		movl	%r13d, %r9d
+ 8134 6b60 4589E0   		movl	%r12d, %r8d
+ 8135 6b63 89D9     		movl	%ebx, %ecx
+ 8136 6b65 89C2     		movl	%eax, %edx
+ 8137 6b67 488D3500 		leaq	.LC2(%rip), %rsi
+ 8137      000000
+ 8138 6b6e 488D3D00 		leaq	.LC1(%rip), %rdi
+ 8138      000000
+ 8139 6b75 B8000000 		movl	$0, %eax
+ 8139      00
+ 8140 6b7a E8000000 		call	KDbgMsg at PLT
+ 8140      00
+ 8141              	.L55:
+ 8142              	.LBE2290:
+ 8143              	.LBB2291:
+2138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("End of Round", state);
+ 8144              		.loc 3 2138 0
+ 8145 6b7f F30F6F85 		movdqu	-208(%rbp), %xmm0
+ 8145      30FFFFFF 
+ 8146 6b87 F30F7F85 		movdqu	%xmm0, -384(%rbp)
+ 8146      80FEFFFF 
+ 8147 6b8f E8000000 		call	KDbgWriterGet at PLT
+ 8147      00
+ 8148 6b94 4885C0   		testq	%rax, %rax
+ 8149 6b97 7479     		je	.L57
+ 8150 6b99 BF030000 		movl	$3, %edi
+ 8150      00
+
GAS LISTING /tmp/ccPaCTqg.s 			page 272
+
+
+ 8151 6b9e E8000000 		call	KDbgCondToFlag at PLT
+ 8151      00
+ 8152 6ba3 4889C6   		movq	%rax, %rsi
+ 8153 6ba6 BF100000 		movl	$16, %edi
+ 8153      00
+ 8154 6bab E8000000 		call	KDbgTestModConds at PLT
+ 8154      00
+ 8155 6bb0 84C0     		testb	%al, %al
+ 8156 6bb2 745E     		je	.L57
+ 8157 6bb4 8B858CFE 		movl	-372(%rbp), %eax
+ 8157      FFFF
+ 8158 6bba 89C7     		movl	%eax, %edi
+ 8159 6bbc E87694FF 		call	bswap_32
+ 8159      FF
+ 8160 6bc1 4189C5   		movl	%eax, %r13d
+ 8161 6bc4 8B8588FE 		movl	-376(%rbp), %eax
+ 8161      FFFF
+ 8162 6bca 89C7     		movl	%eax, %edi
+ 8163 6bcc E86694FF 		call	bswap_32
+ 8163      FF
+ 8164 6bd1 4189C4   		movl	%eax, %r12d
+ 8165 6bd4 8B8584FE 		movl	-380(%rbp), %eax
+ 8165      FFFF
+ 8166 6bda 89C7     		movl	%eax, %edi
+ 8167 6bdc E85694FF 		call	bswap_32
+ 8167      FF
+ 8168 6be1 89C3     		movl	%eax, %ebx
+ 8169 6be3 8B8580FE 		movl	-384(%rbp), %eax
+ 8169      FFFF
+ 8170 6be9 89C7     		movl	%eax, %edi
+ 8171 6beb E84794FF 		call	bswap_32
+ 8171      FF
+ 8172 6bf0 4589E9   		movl	%r13d, %r9d
+ 8173 6bf3 4589E0   		movl	%r12d, %r8d
+ 8174 6bf6 89D9     		movl	%ebx, %ecx
+ 8175 6bf8 89C2     		movl	%eax, %edx
+ 8176 6bfa 488D3500 		leaq	.LC4(%rip), %rsi
+ 8176      000000
+ 8177 6c01 488D3D00 		leaq	.LC1(%rip), %rdi
+ 8177      000000
+ 8178 6c08 B8000000 		movl	$0, %eax
+ 8178      00
+ 8179 6c0d E8000000 		call	KDbgMsg at PLT
+ 8179      00
+ 8180              	.L57:
+ 8181              	.LBE2291:
+2139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 8182              		.loc 3 2139 0
+ 8183 6c12 F30F6F85 		movdqu	-208(%rbp), %xmm0
+ 8183      30FFFFFF 
+ 8184              	.LBE2284:
+ 8185              	.LBE2283:
+ 8186              		.loc 3 2274 0
+ 8187 6c1a 660F7F85 		movdqa	%xmm0, -400(%rbp)
+ 8187      70FEFFFF 
+2275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for ( ; ix < Nr; ++ix)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 273
+
+
+ 8188              		.loc 3 2276 0
+ 8189 6c22 E91D0200 		jmp	.L58
+ 8189      00
+ 8190              	.L65:
+2277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(EqInvMiddleRound) (state, key[ix] );
+ 8191              		.loc 3 2277 0
+ 8192 6c27 8B851CFF 		mov	-228(%rbp), %eax
+ 8192      FFFF
+ 8193 6c2d 48C1E004 		salq	$4, %rax
+ 8194 6c31 48038568 		addq	-408(%rbp), %rax
+ 8194      FEFFFF
+ 8195 6c38 660F6F00 		movdqa	(%rax), %xmm0
+ 8196 6c3c 660F6F8D 		movdqa	-400(%rbp), %xmm1
+ 8196      70FEFFFF 
+ 8197 6c44 F30F7F4D 		movdqu	%xmm1, -112(%rbp)
+ 8197      90
+ 8198 6c49 F30F7F45 		movdqu	%xmm0, -128(%rbp)
+ 8198      80
+ 8199              	.LBB2292:
+ 8200              	.LBB2293:
+2167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+ 8201              		.loc 3 2167 0
+ 8202 6c4e F30F6F45 		movdqu	-112(%rbp), %xmm0
+ 8202      90
+ 8203 6c53 F30F7F45 		movdqu	%xmm0, -80(%rbp)
+ 8203      B0
+2168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mround_keys = round_keys;
+ 8204              		.loc 3 2168 0
+ 8205 6c58 F30F6F45 		movdqu	-128(%rbp), %xmm0
+ 8205      80
+ 8206 6c5d F30F7F45 		movdqu	%xmm0, -96(%rbp)
+ 8206      A0
+ 8207              	.LBB2294:
+2171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Start of Round", mstate);
+ 8208              		.loc 3 2171 0
+ 8209 6c62 F30F6F45 		movdqu	-80(%rbp), %xmm0
+ 8209      B0
+ 8210 6c67 F30F7F85 		movdqu	%xmm0, -304(%rbp)
+ 8210      D0FEFFFF 
+ 8211 6c6f E8000000 		call	KDbgWriterGet at PLT
+ 8211      00
+ 8212 6c74 4885C0   		testq	%rax, %rax
+ 8213 6c77 7479     		je	.L60
+ 8214 6c79 BF030000 		movl	$3, %edi
+ 8214      00
+ 8215 6c7e E8000000 		call	KDbgCondToFlag at PLT
+ 8215      00
+ 8216 6c83 4889C6   		movq	%rax, %rsi
+ 8217 6c86 BF100000 		movl	$16, %edi
+ 8217      00
+ 8218 6c8b E8000000 		call	KDbgTestModConds at PLT
+ 8218      00
+ 8219 6c90 84C0     		testb	%al, %al
+ 8220 6c92 745E     		je	.L60
+ 8221 6c94 8B85DCFE 		movl	-292(%rbp), %eax
+ 8221      FFFF
+ 8222 6c9a 89C7     		movl	%eax, %edi
+
GAS LISTING /tmp/ccPaCTqg.s 			page 274
+
+
+ 8223 6c9c E89693FF 		call	bswap_32
+ 8223      FF
+ 8224 6ca1 4189C5   		movl	%eax, %r13d
+ 8225 6ca4 8B85D8FE 		movl	-296(%rbp), %eax
+ 8225      FFFF
+ 8226 6caa 89C7     		movl	%eax, %edi
+ 8227 6cac E88693FF 		call	bswap_32
+ 8227      FF
+ 8228 6cb1 4189C4   		movl	%eax, %r12d
+ 8229 6cb4 8B85D4FE 		movl	-300(%rbp), %eax
+ 8229      FFFF
+ 8230 6cba 89C7     		movl	%eax, %edi
+ 8231 6cbc E87693FF 		call	bswap_32
+ 8231      FF
+ 8232 6cc1 89C3     		movl	%eax, %ebx
+ 8233 6cc3 8B85D0FE 		movl	-304(%rbp), %eax
+ 8233      FFFF
+ 8234 6cc9 89C7     		movl	%eax, %edi
+ 8235 6ccb E86793FF 		call	bswap_32
+ 8235      FF
+ 8236 6cd0 4589E9   		movl	%r13d, %r9d
+ 8237 6cd3 4589E0   		movl	%r12d, %r8d
+ 8238 6cd6 89D9     		movl	%ebx, %ecx
+ 8239 6cd8 89C2     		movl	%eax, %edx
+ 8240 6cda 488D3500 		leaq	.LC0(%rip), %rsi
+ 8240      000000
+ 8241 6ce1 488D3D00 		leaq	.LC1(%rip), %rdi
+ 8241      000000
+ 8242 6ce8 B8000000 		movl	$0, %eax
+ 8242      00
+ 8243 6ced E8000000 		call	KDbgMsg at PLT
+ 8243      00
+ 8244              	.L60:
+ 8245              	.LBE2294:
+2178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_AESDEC (state, round_keys);
+ 8246              		.loc 3 2178 0
+ 8247 6cf2 F30F6F4D 		movdqu	-128(%rbp), %xmm1
+ 8247      80
+ 8248 6cf7 F30F6F45 		movdqu	-112(%rbp), %xmm0
+ 8248      90
+ 8249 6cfc E81593FF 		call	op_AESDEC
+ 8249      FF
+ 8250 6d01 F30F7F45 		movdqu	%xmm0, -112(%rbp)
+ 8250      90
+2213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+ 8251              		.loc 3 2213 0
+ 8252 6d06 F30F6F45 		movdqu	-112(%rbp), %xmm0
+ 8252      90
+ 8253 6d0b F30F7F45 		movdqu	%xmm0, -80(%rbp)
+ 8253      B0
+ 8254              	.LBB2295:
+2215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Round Key", mround_keys);
+ 8255              		.loc 3 2215 0
+ 8256 6d10 F30F6F45 		movdqu	-96(%rbp), %xmm0
+ 8256      A0
+ 8257 6d15 F30F7F85 		movdqu	%xmm0, -320(%rbp)
+ 8257      C0FEFFFF 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 275
+
+
+ 8258 6d1d E8000000 		call	KDbgWriterGet at PLT
+ 8258      00
+ 8259 6d22 4885C0   		testq	%rax, %rax
+ 8260 6d25 7479     		je	.L62
+ 8261 6d27 BF030000 		movl	$3, %edi
+ 8261      00
+ 8262 6d2c E8000000 		call	KDbgCondToFlag at PLT
+ 8262      00
+ 8263 6d31 4889C6   		movq	%rax, %rsi
+ 8264 6d34 BF100000 		movl	$16, %edi
+ 8264      00
+ 8265 6d39 E8000000 		call	KDbgTestModConds at PLT
+ 8265      00
+ 8266 6d3e 84C0     		testb	%al, %al
+ 8267 6d40 745E     		je	.L62
+ 8268 6d42 8B85CCFE 		movl	-308(%rbp), %eax
+ 8268      FFFF
+ 8269 6d48 89C7     		movl	%eax, %edi
+ 8270 6d4a E8E892FF 		call	bswap_32
+ 8270      FF
+ 8271 6d4f 4189C5   		movl	%eax, %r13d
+ 8272 6d52 8B85C8FE 		movl	-312(%rbp), %eax
+ 8272      FFFF
+ 8273 6d58 89C7     		movl	%eax, %edi
+ 8274 6d5a E8D892FF 		call	bswap_32
+ 8274      FF
+ 8275 6d5f 4189C4   		movl	%eax, %r12d
+ 8276 6d62 8B85C4FE 		movl	-316(%rbp), %eax
+ 8276      FFFF
+ 8277 6d68 89C7     		movl	%eax, %edi
+ 8278 6d6a E8C892FF 		call	bswap_32
+ 8278      FF
+ 8279 6d6f 89C3     		movl	%eax, %ebx
+ 8280 6d71 8B85C0FE 		movl	-320(%rbp), %eax
+ 8280      FFFF
+ 8281 6d77 89C7     		movl	%eax, %edi
+ 8282 6d79 E8B992FF 		call	bswap_32
+ 8282      FF
+ 8283 6d7e 4589E9   		movl	%r13d, %r9d
+ 8284 6d81 4589E0   		movl	%r12d, %r8d
+ 8285 6d84 89D9     		movl	%ebx, %ecx
+ 8286 6d86 89C2     		movl	%eax, %edx
+ 8287 6d88 488D3500 		leaq	.LC2(%rip), %rsi
+ 8287      000000
+ 8288 6d8f 488D3D00 		leaq	.LC1(%rip), %rdi
+ 8288      000000
+ 8289 6d96 B8000000 		movl	$0, %eax
+ 8289      00
+ 8290 6d9b E8000000 		call	KDbgMsg at PLT
+ 8290      00
+ 8291              	.L62:
+ 8292              	.LBE2295:
+ 8293              	.LBB2296:
+2217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("End of Round", mstate);
+ 8294              		.loc 3 2217 0
+ 8295 6da0 F30F6F45 		movdqu	-80(%rbp), %xmm0
+ 8295      B0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 276
+
+
+ 8296 6da5 F30F7F85 		movdqu	%xmm0, -336(%rbp)
+ 8296      B0FEFFFF 
+ 8297 6dad E8000000 		call	KDbgWriterGet at PLT
+ 8297      00
+ 8298 6db2 4885C0   		testq	%rax, %rax
+ 8299 6db5 7479     		je	.L64
+ 8300 6db7 BF030000 		movl	$3, %edi
+ 8300      00
+ 8301 6dbc E8000000 		call	KDbgCondToFlag at PLT
+ 8301      00
+ 8302 6dc1 4889C6   		movq	%rax, %rsi
+ 8303 6dc4 BF100000 		movl	$16, %edi
+ 8303      00
+ 8304 6dc9 E8000000 		call	KDbgTestModConds at PLT
+ 8304      00
+ 8305 6dce 84C0     		testb	%al, %al
+ 8306 6dd0 745E     		je	.L64
+ 8307 6dd2 8B85BCFE 		movl	-324(%rbp), %eax
+ 8307      FFFF
+ 8308 6dd8 89C7     		movl	%eax, %edi
+ 8309 6dda E85892FF 		call	bswap_32
+ 8309      FF
+ 8310 6ddf 4189C5   		movl	%eax, %r13d
+ 8311 6de2 8B85B8FE 		movl	-328(%rbp), %eax
+ 8311      FFFF
+ 8312 6de8 89C7     		movl	%eax, %edi
+ 8313 6dea E84892FF 		call	bswap_32
+ 8313      FF
+ 8314 6def 4189C4   		movl	%eax, %r12d
+ 8315 6df2 8B85B4FE 		movl	-332(%rbp), %eax
+ 8315      FFFF
+ 8316 6df8 89C7     		movl	%eax, %edi
+ 8317 6dfa E83892FF 		call	bswap_32
+ 8317      FF
+ 8318 6dff 89C3     		movl	%eax, %ebx
+ 8319 6e01 8B85B0FE 		movl	-336(%rbp), %eax
+ 8319      FFFF
+ 8320 6e07 89C7     		movl	%eax, %edi
+ 8321 6e09 E82992FF 		call	bswap_32
+ 8321      FF
+ 8322 6e0e 4589E9   		movl	%r13d, %r9d
+ 8323 6e11 4589E0   		movl	%r12d, %r8d
+ 8324 6e14 89D9     		movl	%ebx, %ecx
+ 8325 6e16 89C2     		movl	%eax, %edx
+ 8326 6e18 488D3500 		leaq	.LC4(%rip), %rsi
+ 8326      000000
+ 8327 6e1f 488D3D00 		leaq	.LC1(%rip), %rdi
+ 8327      000000
+ 8328 6e26 B8000000 		movl	$0, %eax
+ 8328      00
+ 8329 6e2b E8000000 		call	KDbgMsg at PLT
+ 8329      00
+ 8330              	.L64:
+ 8331              	.LBE2296:
+2220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 8332              		.loc 3 2220 0
+ 8333 6e30 F30F6F45 		movdqu	-112(%rbp), %xmm0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 277
+
+
+ 8333      90
+ 8334              	.LBE2293:
+ 8335              	.LBE2292:
+ 8336              		.loc 3 2277 0
+ 8337 6e35 660F7F85 		movdqa	%xmm0, -400(%rbp)
+ 8337      70FEFFFF 
+2276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for ( ; ix < Nr; ++ix)
+ 8338              		.loc 3 2276 0
+ 8339 6e3d 83851CFF 		addl	$1, -228(%rbp)
+ 8339      FFFF01
+ 8340              	.L58:
+ 8341 6e44 8B851CFF 		movl	-228(%rbp), %eax
+ 8341      FFFF
+ 8342 6e4a 3B8564FE 		cmpl	-412(%rbp), %eax
+ 8342      FFFF
+ 8343 6e50 0F82D1FD 		jb	.L65
+ 8343      FFFF
+2278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(EqInvLastRound) (state, key[ix]);
+ 8344              		.loc 3 2279 0
+ 8345 6e56 8B851CFF 		mov	-228(%rbp), %eax
+ 8345      FFFF
+ 8346 6e5c 48C1E004 		salq	$4, %rax
+ 8347 6e60 48038568 		addq	-408(%rbp), %rax
+ 8347      FEFFFF
+ 8348 6e67 660F6F00 		movdqa	(%rax), %xmm0
+ 8349 6e6b 660F6F8D 		movdqa	-400(%rbp), %xmm1
+ 8349      70FEFFFF 
+ 8350 6e73 F30F7F4D 		movdqu	%xmm1, -48(%rbp)
+ 8350      D0
+ 8351 6e78 F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 8351      C0
+ 8352              	.LBB2297:
+ 8353              	.LBB2298:
+ 8354              	.LBB2299:
+2237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+ 8355              		.loc 3 2237 0
+ 8356 6e7d F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 8356      D0
+ 8357 6e82 F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 8357      00FFFFFF 
+ 8358 6e8a E8000000 		call	KDbgWriterGet at PLT
+ 8358      00
+ 8359 6e8f 4885C0   		testq	%rax, %rax
+ 8360 6e92 7479     		je	.L67
+ 8361 6e94 BF030000 		movl	$3, %edi
+ 8361      00
+ 8362 6e99 E8000000 		call	KDbgCondToFlag at PLT
+ 8362      00
+ 8363 6e9e 4889C6   		movq	%rax, %rsi
+ 8364 6ea1 BF100000 		movl	$16, %edi
+ 8364      00
+ 8365 6ea6 E8000000 		call	KDbgTestModConds at PLT
+ 8365      00
+ 8366 6eab 84C0     		testb	%al, %al
+ 8367 6ead 745E     		je	.L67
+ 8368 6eaf 8B850CFF 		movl	-244(%rbp), %eax
+
GAS LISTING /tmp/ccPaCTqg.s 			page 278
+
+
+ 8368      FFFF
+ 8369 6eb5 89C7     		movl	%eax, %edi
+ 8370 6eb7 E87B91FF 		call	bswap_32
+ 8370      FF
+ 8371 6ebc 4189C5   		movl	%eax, %r13d
+ 8372 6ebf 8B8508FF 		movl	-248(%rbp), %eax
+ 8372      FFFF
+ 8373 6ec5 89C7     		movl	%eax, %edi
+ 8374 6ec7 E86B91FF 		call	bswap_32
+ 8374      FF
+ 8375 6ecc 4189C4   		movl	%eax, %r12d
+ 8376 6ecf 8B8504FF 		movl	-252(%rbp), %eax
+ 8376      FFFF
+ 8377 6ed5 89C7     		movl	%eax, %edi
+ 8378 6ed7 E85B91FF 		call	bswap_32
+ 8378      FF
+ 8379 6edc 89C3     		movl	%eax, %ebx
+ 8380 6ede 8B8500FF 		movl	-256(%rbp), %eax
+ 8380      FFFF
+ 8381 6ee4 89C7     		movl	%eax, %edi
+ 8382 6ee6 E84C91FF 		call	bswap_32
+ 8382      FF
+ 8383 6eeb 4589E9   		movl	%r13d, %r9d
+ 8384 6eee 4589E0   		movl	%r12d, %r8d
+ 8385 6ef1 89D9     		movl	%ebx, %ecx
+ 8386 6ef3 89C2     		movl	%eax, %edx
+ 8387 6ef5 488D3500 		leaq	.LC0(%rip), %rsi
+ 8387      000000
+ 8388 6efc 488D3D00 		leaq	.LC1(%rip), %rdi
+ 8388      000000
+ 8389 6f03 B8000000 		movl	$0, %eax
+ 8389      00
+ 8390 6f08 E8000000 		call	KDbgMsg at PLT
+ 8390      00
+ 8391              	.L67:
+ 8392              	.LBE2299:
+2240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_AESDECLAST (state, round_keys);
+ 8393              		.loc 3 2240 0
+ 8394 6f0d F30F6F4D 		movdqu	-64(%rbp), %xmm1
+ 8394      C0
+ 8395 6f12 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 8395      D0
+ 8396 6f17 E80591FF 		call	op_AESDECLAST
+ 8396      FF
+ 8397 6f1c F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 8397      D0
+ 8398              	.LBB2300:
+2253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+ 8399              		.loc 3 2253 0
+ 8400 6f21 F30F6F45 		movdqu	-64(%rbp), %xmm0
+ 8400      C0
+ 8401 6f26 F30F7F85 		movdqu	%xmm0, -272(%rbp)
+ 8401      F0FEFFFF 
+ 8402 6f2e E8000000 		call	KDbgWriterGet at PLT
+ 8402      00
+ 8403 6f33 4885C0   		testq	%rax, %rax
+ 8404 6f36 7479     		je	.L69
+
GAS LISTING /tmp/ccPaCTqg.s 			page 279
+
+
+ 8405 6f38 BF030000 		movl	$3, %edi
+ 8405      00
+ 8406 6f3d E8000000 		call	KDbgCondToFlag at PLT
+ 8406      00
+ 8407 6f42 4889C6   		movq	%rax, %rsi
+ 8408 6f45 BF100000 		movl	$16, %edi
+ 8408      00
+ 8409 6f4a E8000000 		call	KDbgTestModConds at PLT
+ 8409      00
+ 8410 6f4f 84C0     		testb	%al, %al
+ 8411 6f51 745E     		je	.L69
+ 8412 6f53 8B85FCFE 		movl	-260(%rbp), %eax
+ 8412      FFFF
+ 8413 6f59 89C7     		movl	%eax, %edi
+ 8414 6f5b E8D790FF 		call	bswap_32
+ 8414      FF
+ 8415 6f60 4189C5   		movl	%eax, %r13d
+ 8416 6f63 8B85F8FE 		movl	-264(%rbp), %eax
+ 8416      FFFF
+ 8417 6f69 89C7     		movl	%eax, %edi
+ 8418 6f6b E8C790FF 		call	bswap_32
+ 8418      FF
+ 8419 6f70 4189C4   		movl	%eax, %r12d
+ 8420 6f73 8B85F4FE 		movl	-268(%rbp), %eax
+ 8420      FFFF
+ 8421 6f79 89C7     		movl	%eax, %edi
+ 8422 6f7b E8B790FF 		call	bswap_32
+ 8422      FF
+ 8423 6f80 89C3     		movl	%eax, %ebx
+ 8424 6f82 8B85F0FE 		movl	-272(%rbp), %eax
+ 8424      FFFF
+ 8425 6f88 89C7     		movl	%eax, %edi
+ 8426 6f8a E8A890FF 		call	bswap_32
+ 8426      FF
+ 8427 6f8f 4589E9   		movl	%r13d, %r9d
+ 8428 6f92 4589E0   		movl	%r12d, %r8d
+ 8429 6f95 89D9     		movl	%ebx, %ecx
+ 8430 6f97 89C2     		movl	%eax, %edx
+ 8431 6f99 488D3500 		leaq	.LC2(%rip), %rsi
+ 8431      000000
+ 8432 6fa0 488D3D00 		leaq	.LC1(%rip), %rdi
+ 8432      000000
+ 8433 6fa7 B8000000 		movl	$0, %eax
+ 8433      00
+ 8434 6fac E8000000 		call	KDbgMsg at PLT
+ 8434      00
+ 8435              	.L69:
+ 8436              	.LBE2300:
+ 8437              	.LBB2301:
+2254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("End of Round", state);
+ 8438              		.loc 3 2254 0
+ 8439 6fb1 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 8439      D0
+ 8440 6fb6 F30F7F85 		movdqu	%xmm0, -288(%rbp)
+ 8440      E0FEFFFF 
+ 8441 6fbe E8000000 		call	KDbgWriterGet at PLT
+ 8441      00
+
GAS LISTING /tmp/ccPaCTqg.s 			page 280
+
+
+ 8442 6fc3 4885C0   		testq	%rax, %rax
+ 8443 6fc6 7479     		je	.L71
+ 8444 6fc8 BF030000 		movl	$3, %edi
+ 8444      00
+ 8445 6fcd E8000000 		call	KDbgCondToFlag at PLT
+ 8445      00
+ 8446 6fd2 4889C6   		movq	%rax, %rsi
+ 8447 6fd5 BF100000 		movl	$16, %edi
+ 8447      00
+ 8448 6fda E8000000 		call	KDbgTestModConds at PLT
+ 8448      00
+ 8449 6fdf 84C0     		testb	%al, %al
+ 8450 6fe1 745E     		je	.L71
+ 8451 6fe3 8B85ECFE 		movl	-276(%rbp), %eax
+ 8451      FFFF
+ 8452 6fe9 89C7     		movl	%eax, %edi
+ 8453 6feb E84790FF 		call	bswap_32
+ 8453      FF
+ 8454 6ff0 4189C5   		movl	%eax, %r13d
+ 8455 6ff3 8B85E8FE 		movl	-280(%rbp), %eax
+ 8455      FFFF
+ 8456 6ff9 89C7     		movl	%eax, %edi
+ 8457 6ffb E83790FF 		call	bswap_32
+ 8457      FF
+ 8458 7000 4189C4   		movl	%eax, %r12d
+ 8459 7003 8B85E4FE 		movl	-284(%rbp), %eax
+ 8459      FFFF
+ 8460 7009 89C7     		movl	%eax, %edi
+ 8461 700b E82790FF 		call	bswap_32
+ 8461      FF
+ 8462 7010 89C3     		movl	%eax, %ebx
+ 8463 7012 8B85E0FE 		movl	-288(%rbp), %eax
+ 8463      FFFF
+ 8464 7018 89C7     		movl	%eax, %edi
+ 8465 701a E81890FF 		call	bswap_32
+ 8465      FF
+ 8466 701f 4589E9   		movl	%r13d, %r9d
+ 8467 7022 4589E0   		movl	%r12d, %r8d
+ 8468 7025 89D9     		movl	%ebx, %ecx
+ 8469 7027 89C2     		movl	%eax, %edx
+ 8470 7029 488D3500 		leaq	.LC4(%rip), %rsi
+ 8470      000000
+ 8471 7030 488D3D00 		leaq	.LC1(%rip), %rdi
+ 8471      000000
+ 8472 7037 B8000000 		movl	$0, %eax
+ 8472      00
+ 8473 703c E8000000 		call	KDbgMsg at PLT
+ 8473      00
+ 8474              	.L71:
+ 8475              	.LBE2301:
+2256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 8476              		.loc 3 2256 0
+ 8477 7041 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 8477      D0
+ 8478              	.LBE2298:
+ 8479              	.LBE2297:
+2280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+
GAS LISTING /tmp/ccPaCTqg.s 			page 281
+
+
+ 8480              		.loc 3 2280 0
+ 8481 7046 4881C488 		addq	$392, %rsp
+ 8481      010000
+ 8482 704d 5B       		popq	%rbx
+ 8483 704e 415C     		popq	%r12
+ 8484 7050 415D     		popq	%r13
+ 8485 7052 C9       		leave
+ 8486 7053 C3       		ret
+ 8487              		.cfi_endproc
+ 8488              	.LFE670:
+ 8489              		.size	KAESBlockCipherVecAesNiEqInvCipher, .-KAESBlockCipherVecAesNiEqInvCipher
+ 8490              		.section	.rodata
+ 8491              		.type	KAESBlockCipherVecAesNiaes_ncbi_name, @object
+ 8492              		.size	KAESBlockCipherVecAesNiaes_ncbi_name, 10
+ 8493              	KAESBlockCipherVecAesNiaes_ncbi_name:
+ 8494 03d9 4145535F 		.string	"AES_CLASS"
+ 8494      434C4153 
+ 8494      5300
+ 8495              		.text
+ 8496              		.type	KAESBlockCipherVecAesNiDestroy, @function
+ 8497              	KAESBlockCipherVecAesNiDestroy:
+ 8498              	.LFB671:
+2281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+2284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * This section of the file is the use of the cipher defined above within
+2285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * our BlockCipherObject.
+2286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * These are the functions that will be directly referenced in the vector
+2288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * table for the block cipher.  These are not specifically derived from
+2289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * the FIPS-197 document.
+2290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "blockcipher-impl.h"
+2292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** typedef struct AES_CLASS AES_CLASS;
+2294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const char AESBCMEMBER(aes_ncbi_name) [] = CLASS_STRING(AES_CLASS);
+2296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Destroy
+2300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   How large is the stored key for this cipher?  Not the user key used
+2301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   to create this key (key schedule)
+2302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   This is needed by KCipher to know how large the KCipher objecr is at
+2304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   allocation and to know how much of a buffer each decryption/encryption is
+2305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(Destroy) (const BLOCKCIPHER_VEC_IMPL * self)
+2308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8499              		.loc 3 2308 0
+ 8500              		.cfi_startproc
+ 8501 7054 55       		pushq	%rbp
+ 8502              	.LCFI30:
+ 8503              		.cfi_def_cfa_offset 16
+ 8504 7055 4889E5   		movq	%rsp, %rbp
+ 8505              		.cfi_offset 6, -16
+
GAS LISTING /tmp/ccPaCTqg.s 			page 282
+
+
+ 8506              	.LCFI31:
+ 8507              		.cfi_def_cfa_register 6
+ 8508 7058 48897DF8 		movq	%rdi, -8(%rbp)
+2309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /* we use a constant object so do nothing */
+2310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 8509              		.loc 3 2310 0
+ 8510 705c C9       		leave
+ 8511 705d C3       		ret
+ 8512              		.cfi_endproc
+ 8513              	.LFE671:
+ 8514              		.size	KAESBlockCipherVecAesNiDestroy, .-KAESBlockCipherVecAesNiDestroy
+ 8515              		.type	KAESBlockCipherVecAesNiBlockSize, @function
+ 8516              	KAESBlockCipherVecAesNiBlockSize:
+ 8517              	.LFB672:
+2311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * BlockSize
+2315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t AESBCMEMBER(BlockSize) ()
+2318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8518              		.loc 3 2318 0
+ 8519              		.cfi_startproc
+ 8520 705e 55       		pushq	%rbp
+ 8521              	.LCFI32:
+ 8522              		.cfi_def_cfa_offset 16
+ 8523 705f 4889E5   		movq	%rsp, %rbp
+ 8524              		.cfi_offset 6, -16
+ 8525              	.LCFI33:
+ 8526              		.cfi_def_cfa_register 6
+2319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (uint32_t) sizeof (AESBlock);
+ 8527              		.loc 3 2319 0
+ 8528 7062 B8100000 		movl	$16, %eax
+ 8528      00
+2320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 8529              		.loc 3 2320 0
+ 8530 7067 C9       		leave
+ 8531 7068 C3       		ret
+ 8532              		.cfi_endproc
+ 8533              	.LFE672:
+ 8534              		.size	KAESBlockCipherVecAesNiBlockSize, .-KAESBlockCipherVecAesNiBlockSize
+ 8535              		.type	KAESBlockCipherVecAesNiKeySize, @function
+ 8536              	KAESBlockCipherVecAesNiKeySize:
+ 8537              	.LFB673:
+2321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * KeySize
+2325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   How large is the stored key for this cipher?  Not the user key used
+2326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   to create this key (key schedule)
+2327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   This is needed by KCipher to know how large the KCipher objecr is at
+2329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   allocation and to know how much of a buffer each decryption/encryption is
+2330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t AESBCMEMBER(KeySize) ()
+
GAS LISTING /tmp/ccPaCTqg.s 			page 283
+
+
+2333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8538              		.loc 3 2333 0
+ 8539              		.cfi_startproc
+ 8540 7069 55       		pushq	%rbp
+ 8541              	.LCFI34:
+ 8542              		.cfi_def_cfa_offset 16
+ 8543 706a 4889E5   		movq	%rsp, %rbp
+ 8544              		.cfi_offset 6, -16
+ 8545              	.LCFI35:
+ 8546              		.cfi_def_cfa_register 6
+2334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (uint32_t) sizeof (AESKeySchedule);
+ 8547              		.loc 3 2334 0
+ 8548 706d B8000100 		movl	$256, %eax
+ 8548      00
+2335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 8549              		.loc 3 2335 0
+ 8550 7072 C9       		leave
+ 8551 7073 C3       		ret
+ 8552              		.cfi_endproc
+ 8553              	.LFE673:
+ 8554              		.size	KAESBlockCipherVecAesNiKeySize, .-KAESBlockCipherVecAesNiKeySize
+ 8555              		.section	.rodata
+ 8556 03e3 00000000 		.align 8
+ 8556      00
+ 8557              	.LC5:
+ 8558 03e8 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c"
+ 8558      652F726F 
+ 8558      6461726D 
+ 8558      65722F73 
+ 8558      72615F73 
+ 8559              		.text
+ 8560              		.type	KAESBlockCipherVecAesNiSetEncryptKey, @function
+ 8561              	KAESBlockCipherVecAesNiSetEncryptKey:
+ 8562              	.LFB674:
+2336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * SetEncryptKey
+2340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   The KCipher calls this to have the block cipher build an encryption
+2341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   key in the KCipher object
+2342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t AESBCMEMBER(SetEncryptKey) (void * encrypt_key, const char * user_key,
+2346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                  uint32_t user_key_size)
+2347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8563              		.loc 3 2347 0
+ 8564              		.cfi_startproc
+ 8565 7074 55       		pushq	%rbp
+ 8566              	.LCFI36:
+ 8567              		.cfi_def_cfa_offset 16
+ 8568 7075 4889E5   		movq	%rsp, %rbp
+ 8569              		.cfi_offset 6, -16
+ 8570              	.LCFI37:
+ 8571              		.cfi_def_cfa_register 6
+ 8572 7078 4883EC30 		subq	$48, %rsp
+ 8573 707c 48897DE8 		movq	%rdi, -24(%rbp)
+
GAS LISTING /tmp/ccPaCTqg.s 			page 284
+
+
+ 8574 7080 488975E0 		movq	%rsi, -32(%rbp)
+ 8575 7084 8955DC   		movl	%edx, -36(%rbp)
+2348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rc_t rc;
+2349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESKeySchedule * key;
+2350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rc = 0;
+ 8576              		.loc 3 2351 0
+ 8577 7087 C745F400 		movl	$0, -12(%rbp)
+ 8577      000000
+2352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     key = encrypt_key;
+ 8578              		.loc 3 2352 0
+ 8579 708e 488B45E8 		movq	-24(%rbp), %rax
+ 8580 7092 488945F8 		movq	%rax, -8(%rbp)
+2353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     switch (user_key_size)
+ 8581              		.loc 3 2354 0
+ 8582 7096 8B45DC   		movl	-36(%rbp), %eax
+ 8583 7099 83F818   		cmpl	$24, %eax
+ 8584 709c 7430     		je	.L82
+ 8585 709e 83F820   		cmpl	$32, %eax
+ 8586 70a1 744E     		je	.L83
+ 8587 70a3 83F810   		cmpl	$16, %eax
+ 8588 70a6 756C     		jne	.L86
+ 8589              	.L81:
+2355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nk_128 * sizeof (AESWord):
+2357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         key->number_of_rounds = AES_Nr_128;
+ 8590              		.loc 3 2357 0
+ 8591 70a8 488B45F8 		movq	-8(%rbp), %rax
+ 8592 70ac C780F000 		movl	$10, 240(%rax)
+ 8592      00000A00 
+ 8592      0000
+2358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESBCMEMBER(KeyExpansion128) (key->round_keys, (AESByte*)user_key);
+ 8593              		.loc 3 2358 0
+ 8594 70b6 488B55E0 		movq	-32(%rbp), %rdx
+ 8595 70ba 488B45F8 		movq	-8(%rbp), %rax
+ 8596 70be 4889D6   		movq	%rdx, %rsi
+ 8597 70c1 4889C7   		movq	%rax, %rdi
+ 8598 70c4 E8828FFF 		call	KAESBlockCipherVecAesNiKeyExpansion128
+ 8598      FF
+2359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 8599              		.loc 3 2359 0
+ 8600 70c9 E98A0000 		jmp	.L84
+ 8600      00
+ 8601              	.L82:
+2360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nk_192 * sizeof (AESWord):
+2362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         key->number_of_rounds = AES_Nr_192;
+ 8602              		.loc 3 2362 0
+ 8603 70ce 488B45F8 		movq	-8(%rbp), %rax
+ 8604 70d2 C780F000 		movl	$12, 240(%rax)
+ 8604      00000C00 
+ 8604      0000
+2363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESBCMEMBER(KeyExpansion192) (key->round_keys, (AESByte*)user_key);
+ 8605              		.loc 3 2363 0
+ 8606 70dc 488B55E0 		movq	-32(%rbp), %rdx
+ 8607 70e0 488B45F8 		movq	-8(%rbp), %rax
+
GAS LISTING /tmp/ccPaCTqg.s 			page 285
+
+
+ 8608 70e4 4889D6   		movq	%rdx, %rsi
+ 8609 70e7 4889C7   		movq	%rax, %rdi
+ 8610 70ea E8D4A7FF 		call	KAESBlockCipherVecAesNiKeyExpansion192
+ 8610      FF
+2364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 8611              		.loc 3 2364 0
+ 8612 70ef EB67     		jmp	.L84
+ 8613              	.L83:
+2365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nk_256 * sizeof (AESWord):
+2367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         key->number_of_rounds = AES_Nr_256;
+ 8614              		.loc 3 2367 0
+ 8615 70f1 488B45F8 		movq	-8(%rbp), %rax
+ 8616 70f5 C780F000 		movl	$14, 240(%rax)
+ 8616      00000E00 
+ 8616      0000
+2368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESBCMEMBER(KeyExpansion256) (key->round_keys, (AESByte*)user_key);
+ 8617              		.loc 3 2368 0
+ 8618 70ff 488B55E0 		movq	-32(%rbp), %rdx
+ 8619 7103 488B45F8 		movq	-8(%rbp), %rax
+ 8620 7107 4889D6   		movq	%rdx, %rsi
+ 8621 710a 4889C7   		movq	%rax, %rdi
+ 8622 710d E8EECEFF 		call	KAESBlockCipherVecAesNiKeyExpansion256
+ 8622      FF
+2369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 8623              		.loc 3 2369 0
+ 8624 7112 EB44     		jmp	.L84
+ 8625              	.L86:
+2370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     default:
+2372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         key->number_of_rounds = 0;
+ 8626              		.loc 3 2372 0
+ 8627 7114 488B45F8 		movq	-8(%rbp), %rax
+ 8628 7118 C780F000 		movl	$0, 240(%rax)
+ 8628      00000000 
+ 8628      0000
+2373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         memset (key, 0, sizeof (*key));
+ 8629              		.loc 3 2373 0
+ 8630 7122 488B45F8 		movq	-8(%rbp), %rax
+ 8631 7126 BA000100 		movl	$256, %edx
+ 8631      00
+ 8632 712b BE000000 		movl	$0, %esi
+ 8632      00
+ 8633 7130 4889C7   		movq	%rax, %rdi
+ 8634 7133 E8000000 		call	memset at PLT
+ 8634      00
+2374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         rc = RC (rcKrypto, rcBlockCipher, rcUpdating, rcParam, rcInvalid);
+ 8635              		.loc 3 2374 0
+ 8636 7138 B9460900 		movl	$2374, %ecx
+ 8636      00
+ 8637 713d 488D1500 		leaq	__func__.8794(%rip), %rdx
+ 8637      000000
+ 8638 7144 488D3500 		leaq	.LC5(%rip), %rsi
+ 8638      000000
+ 8639 714b BFCA8F04 		movl	$-2029744182, %edi
+ 8639      87
+ 8640 7150 E8000000 		call	SetRCFileFuncLine at PLT
+
GAS LISTING /tmp/ccPaCTqg.s 			page 286
+
+
+ 8640      00
+ 8641 7155 8945F4   		movl	%eax, -12(%rbp)
+ 8642              	.L84:
+2375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+2376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return rc;
+ 8643              		.loc 3 2377 0
+ 8644 7158 8B45F4   		movl	-12(%rbp), %eax
+2378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 8645              		.loc 3 2378 0
+ 8646 715b C9       		leave
+ 8647 715c C3       		ret
+ 8648              		.cfi_endproc
+ 8649              	.LFE674:
+ 8650              		.size	KAESBlockCipherVecAesNiSetEncryptKey, .-KAESBlockCipherVecAesNiSetEncryptKey
+ 8651              		.type	KAESBlockCipherVecAesNiSetDecryptKey, @function
+ 8652              	KAESBlockCipherVecAesNiSetDecryptKey:
+ 8653              	.LFB675:
+2379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * SetDecryptKey
+2383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   The KCipher calls this to have the block cipher build an decryption
+2384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   key in the KCipher object
+2385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t AESBCMEMBER(SetDecryptKey) (void * decrypt_key,
+2389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                  const char * user_key,
+2390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                  uint32_t user_key_size)
+2391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8654              		.loc 3 2391 0
+ 8655              		.cfi_startproc
+ 8656 715d 55       		pushq	%rbp
+ 8657              	.LCFI38:
+ 8658              		.cfi_def_cfa_offset 16
+ 8659 715e 4889E5   		movq	%rsp, %rbp
+ 8660              		.cfi_offset 6, -16
+ 8661              	.LCFI39:
+ 8662              		.cfi_def_cfa_register 6
+ 8663 7161 4881EC30 		subq	$304, %rsp
+ 8663      010000
+ 8664 7168 4889BDE8 		movq	%rdi, -280(%rbp)
+ 8664      FEFFFF
+ 8665 716f 4889B5E0 		movq	%rsi, -288(%rbp)
+ 8665      FEFFFF
+ 8666 7176 8995DCFE 		movl	%edx, -292(%rbp)
+ 8666      FFFF
+2392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESKeySchedule encrypt_key;
+2393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rc_t rc;
+2394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rc = AESBCMEMBER(SetEncryptKey) (&encrypt_key, user_key, user_key_size);
+ 8667              		.loc 3 2395 0
+ 8668 717c 8B95DCFE 		movl	-292(%rbp), %edx
+ 8668      FFFF
+ 8669 7182 488B8DE0 		movq	-288(%rbp), %rcx
+ 8669      FEFFFF
+
GAS LISTING /tmp/ccPaCTqg.s 			page 287
+
+
+ 8670 7189 488D85F0 		leaq	-272(%rbp), %rax
+ 8670      FEFFFF
+ 8671 7190 4889CE   		movq	%rcx, %rsi
+ 8672 7193 4889C7   		movq	%rax, %rdi
+ 8673 7196 E8D9FEFF 		call	KAESBlockCipherVecAesNiSetEncryptKey
+ 8673      FF
+ 8674 719b 8945F4   		movl	%eax, -12(%rbp)
+2396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     if (rc == 0)
+ 8675              		.loc 3 2396 0
+ 8676 719e 837DF400 		cmpl	$0, -12(%rbp)
+ 8677 71a2 7577     		jne	.L88
+ 8678              	.LBB2302:
+2397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESKeySchedule * key;
+2399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         key = decrypt_key;
+ 8679              		.loc 3 2400 0
+ 8680 71a4 488B85E8 		movq	-280(%rbp), %rax
+ 8680      FEFFFF
+ 8681 71ab 488945F8 		movq	%rax, -8(%rbp)
+2401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         switch (key->number_of_rounds = encrypt_key.number_of_rounds)
+ 8682              		.loc 3 2402 0
+ 8683 71af 8B55E0   		movl	-32(%rbp), %edx
+ 8684 71b2 488B45F8 		movq	-8(%rbp), %rax
+ 8685 71b6 8990F000 		movl	%edx, 240(%rax)
+ 8685      0000
+ 8686 71bc 488B45F8 		movq	-8(%rbp), %rax
+ 8687 71c0 8B80F000 		movl	240(%rax), %eax
+ 8687      0000
+ 8688 71c6 83F80C   		cmpl	$12, %eax
+ 8689 71c9 7422     		je	.L90
+ 8690 71cb 83F80E   		cmpl	$14, %eax
+ 8691 71ce 7435     		je	.L91
+ 8692 71d0 83F80A   		cmpl	$10, %eax
+ 8693 71d3 7546     		jne	.L88
+ 8694              	.L89:
+2403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+2404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         case AES_Nr_128:
+2405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             AESBCMEMBER(EqInvKeyExpansion128) (key->round_keys,
+ 8695              		.loc 3 2405 0
+ 8696 71d5 488B45F8 		movq	-8(%rbp), %rax
+ 8697 71d9 488D95F0 		leaq	-272(%rbp), %rdx
+ 8697      FEFFFF
+ 8698 71e0 4889D6   		movq	%rdx, %rsi
+ 8699 71e3 4889C7   		movq	%rax, %rdi
+ 8700 71e6 E881F0FF 		call	KAESBlockCipherVecAesNiEqInvKeyExpansion128
+ 8700      FF
+2406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                                encrypt_key.round_keys);
+2407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             break;
+ 8701              		.loc 3 2407 0
+ 8702 71eb EB2E     		jmp	.L88
+ 8703              	.L90:
+2408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         case AES_Nr_192:
+2410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             AESBCMEMBER(EqInvKeyExpansion192) (key->round_keys,
+ 8704              		.loc 3 2410 0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 288
+
+
+ 8705 71ed 488B45F8 		movq	-8(%rbp), %rax
+ 8706 71f1 488D95F0 		leaq	-272(%rbp), %rdx
+ 8706      FEFFFF
+ 8707 71f8 4889D6   		movq	%rdx, %rsi
+ 8708 71fb 4889C7   		movq	%rax, %rdi
+ 8709 71fe E893F0FF 		call	KAESBlockCipherVecAesNiEqInvKeyExpansion192
+ 8709      FF
+2411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                                encrypt_key.round_keys);
+2412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             break;
+ 8710              		.loc 3 2412 0
+ 8711 7203 EB16     		jmp	.L88
+ 8712              	.L91:
+2413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         case AES_Nr_256:
+2415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             AESBCMEMBER(EqInvKeyExpansion256) (key->round_keys,
+ 8713              		.loc 3 2415 0
+ 8714 7205 488B45F8 		movq	-8(%rbp), %rax
+ 8715 7209 488D95F0 		leaq	-272(%rbp), %rdx
+ 8715      FEFFFF
+ 8716 7210 4889D6   		movq	%rdx, %rsi
+ 8717 7213 4889C7   		movq	%rax, %rdi
+ 8718 7216 E8A5F0FF 		call	KAESBlockCipherVecAesNiEqInvKeyExpansion256
+ 8718      FF
+ 8719              	.L88:
+ 8720              	.LBE2302:
+2416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                                encrypt_key.round_keys);
+2417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             break;
+2418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         }
+2419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return rc;
+ 8721              		.loc 3 2420 0
+ 8722 721b 8B45F4   		movl	-12(%rbp), %eax
+2421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 8723              		.loc 3 2421 0
+ 8724 721e C9       		leave
+ 8725 721f C3       		ret
+ 8726              		.cfi_endproc
+ 8727              	.LFE675:
+ 8728              		.size	KAESBlockCipherVecAesNiSetDecryptKey, .-KAESBlockCipherVecAesNiSetDecryptKey
+ 8729              		.section	.rodata
+ 8730              	.LC6:
+ 8731 041e 6B657900 		.string	"key"
+ 8732              		.text
+ 8733              		.type	KAESBlockCipherVecAesNiEncrypt, @function
+ 8734              	KAESBlockCipherVecAesNiEncrypt:
+ 8735              	.LFB676:
+2422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Encrypt
+2426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   Perform an encryption of a single block.  Chained modes and stream
+2428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   cipher modes will call this multiple times.
+2429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(Encrypt) (CipherVec state,
+
GAS LISTING /tmp/ccPaCTqg.s 			page 289
+
+
+2433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                 const void * encrypt_key)
+2434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8736              		.loc 3 2434 0
+ 8737              		.cfi_startproc
+ 8738 7220 55       		pushq	%rbp
+ 8739              	.LCFI40:
+ 8740              		.cfi_def_cfa_offset 16
+ 8741 7221 4889E5   		movq	%rsp, %rbp
+ 8742              		.cfi_offset 6, -16
+ 8743              	.LCFI41:
+ 8744              		.cfi_def_cfa_register 6
+ 8745 7224 4883EC30 		subq	$48, %rsp
+ 8746 7228 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 8746      E0
+ 8747 722d 48897DD8 		movq	%rdi, -40(%rbp)
+2435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     const AESKeySchedule * key = encrypt_key;
+ 8748              		.loc 3 2435 0
+ 8749 7231 488B45D8 		movq	-40(%rbp), %rax
+ 8750 7235 488945F8 		movq	%rax, -8(%rbp)
+2436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     assert (key);
+ 8751              		.loc 3 2436 0
+ 8752 7239 48837DF8 		cmpq	$0, -8(%rbp)
+ 8752      00
+ 8753 723e 751F     		jne	.L94
+ 8754 7240 488D0D00 		leaq	__PRETTY_FUNCTION__.8830(%rip), %rcx
+ 8754      000000
+ 8755 7247 BA840900 		movl	$2436, %edx
+ 8755      00
+ 8756 724c 488D3500 		leaq	.LC5(%rip), %rsi
+ 8756      000000
+ 8757 7253 488D3D00 		leaq	.LC6(%rip), %rdi
+ 8757      000000
+ 8758 725a E8000000 		call	__assert_fail at PLT
+ 8758      00
+ 8759              	.L94:
+2437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     switch (key->number_of_rounds)
+ 8760              		.loc 3 2438 0
+ 8761 725f 488B45F8 		movq	-8(%rbp), %rax
+ 8762 7263 8B80F000 		movl	240(%rax), %eax
+ 8762      0000
+ 8763 7269 83F80C   		cmpl	$12, %eax
+ 8764 726c 7436     		je	.L97
+ 8765 726e 83F80E   		cmpl	$14, %eax
+ 8766 7271 744E     		je	.L98
+ 8767 7273 83F80A   		cmpl	$10, %eax
+ 8768 7276 740F     		je	.L96
+2439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     default:
+2441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = vec_00;
+ 8769              		.loc 3 2441 0
+ 8770 7278 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 8770      00000000 
+ 8771 7280 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 8771      E0
+2442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 8772              		.loc 3 2442 0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 290
+
+
+ 8773 7285 EB55     		jmp	.L99
+ 8774              	.L96:
+2443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nr_128:
+2445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_128);
+ 8775              		.loc 3 2445 0
+ 8776 7287 488B45F8 		movq	-8(%rbp), %rax
+ 8777 728b 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 8777      E0
+ 8778 7290 BE0A0000 		movl	$10, %esi
+ 8778      00
+ 8779 7295 4889C7   		movq	%rax, %rdi
+ 8780 7298 E84DF0FF 		call	KAESBlockCipherVecAesNiCipher
+ 8780      FF
+ 8781 729d 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 8781      E0
+2446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 8782              		.loc 3 2446 0
+ 8783 72a2 EB38     		jmp	.L99
+ 8784              	.L97:
+2447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nr_192:
+2449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_192);
+ 8785              		.loc 3 2449 0
+ 8786 72a4 488B45F8 		movq	-8(%rbp), %rax
+ 8787 72a8 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 8787      E0
+ 8788 72ad BE0C0000 		movl	$12, %esi
+ 8788      00
+ 8789 72b2 4889C7   		movq	%rax, %rdi
+ 8790 72b5 E830F0FF 		call	KAESBlockCipherVecAesNiCipher
+ 8790      FF
+ 8791 72ba 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 8791      E0
+2450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 8792              		.loc 3 2450 0
+ 8793 72bf EB1B     		jmp	.L99
+ 8794              	.L98:
+2451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nr_256:
+2453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_256);
+ 8795              		.loc 3 2453 0
+ 8796 72c1 488B45F8 		movq	-8(%rbp), %rax
+ 8797 72c5 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 8797      E0
+ 8798 72ca BE0E0000 		movl	$14, %esi
+ 8798      00
+ 8799 72cf 4889C7   		movq	%rax, %rdi
+ 8800 72d2 E813F0FF 		call	KAESBlockCipherVecAesNiCipher
+ 8800      FF
+ 8801 72d7 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 8801      E0
+ 8802              	.L99:
+2454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+2455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+
GAS LISTING /tmp/ccPaCTqg.s 			page 291
+
+
+ 8803              		.loc 3 2457 0
+ 8804 72dc 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 8804      E0
+2458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 8805              		.loc 3 2458 0
+ 8806 72e1 C9       		leave
+ 8807 72e2 C3       		ret
+ 8808              		.cfi_endproc
+ 8809              	.LFE676:
+ 8810              		.size	KAESBlockCipherVecAesNiEncrypt, .-KAESBlockCipherVecAesNiEncrypt
+ 8811              		.type	KAESBlockCipherVecAesNiDecrypt, @function
+ 8812              	KAESBlockCipherVecAesNiDecrypt:
+ 8813              	.LFB677:
+2459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Decrypt
+2463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   Perform a decryption of a single block.  Chained modes and stream
+2465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   cipher modes will call this multiple times.
+2466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(Decrypt) (CipherVec state,
+2469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                 const void * decrypt_key)
+2470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8814              		.loc 3 2470 0
+ 8815              		.cfi_startproc
+ 8816 72e3 55       		pushq	%rbp
+ 8817              	.LCFI42:
+ 8818              		.cfi_def_cfa_offset 16
+ 8819 72e4 4889E5   		movq	%rsp, %rbp
+ 8820              		.cfi_offset 6, -16
+ 8821              	.LCFI43:
+ 8822              		.cfi_def_cfa_register 6
+ 8823 72e7 4883EC30 		subq	$48, %rsp
+ 8824 72eb 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 8824      E0
+ 8825 72f0 48897DD8 		movq	%rdi, -40(%rbp)
+2471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     const AESKeySchedule * key = decrypt_key;
+ 8826              		.loc 3 2471 0
+ 8827 72f4 488B45D8 		movq	-40(%rbp), %rax
+ 8828 72f8 488945F8 		movq	%rax, -8(%rbp)
+2472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     assert (key);
+ 8829              		.loc 3 2473 0
+ 8830 72fc 48837DF8 		cmpq	$0, -8(%rbp)
+ 8830      00
+ 8831 7301 751F     		jne	.L102
+ 8832 7303 488D0D00 		leaq	__PRETTY_FUNCTION__.8851(%rip), %rcx
+ 8832      000000
+ 8833 730a BAA90900 		movl	$2473, %edx
+ 8833      00
+ 8834 730f 488D3500 		leaq	.LC5(%rip), %rsi
+ 8834      000000
+ 8835 7316 488D3D00 		leaq	.LC6(%rip), %rdi
+ 8835      000000
+ 8836 731d E8000000 		call	__assert_fail at PLT
+
GAS LISTING /tmp/ccPaCTqg.s 			page 292
+
+
+ 8836      00
+ 8837              	.L102:
+2474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     switch (key->number_of_rounds)
+ 8838              		.loc 3 2475 0
+ 8839 7322 488B45F8 		movq	-8(%rbp), %rax
+ 8840 7326 8B80F000 		movl	240(%rax), %eax
+ 8840      0000
+ 8841 732c 83F80C   		cmpl	$12, %eax
+ 8842 732f 7436     		je	.L105
+ 8843 7331 83F80E   		cmpl	$14, %eax
+ 8844 7334 744E     		je	.L106
+ 8845 7336 83F80A   		cmpl	$10, %eax
+ 8846 7339 740F     		je	.L104
+2476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     default:
+2478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = vec_00; /* for an illegal cipher key schedule just write zeroes */
+ 8847              		.loc 3 2478 0
+ 8848 733b 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 8848      00000000 
+ 8849 7343 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 8849      E0
+2479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 8850              		.loc 3 2479 0
+ 8851 7348 EB55     		jmp	.L107
+ 8852              	.L104:
+2480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nr_128:
+2482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+ 8853              		.loc 3 2482 0
+ 8854 734a 488B45F8 		movq	-8(%rbp), %rax
+ 8855 734e 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 8855      E0
+ 8856 7353 BE0A0000 		movl	$10, %esi
+ 8856      00
+ 8857 7358 4889C7   		movq	%rax, %rdi
+ 8858 735b E83AF6FF 		call	KAESBlockCipherVecAesNiEqInvCipher
+ 8858      FF
+ 8859 7360 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 8859      E0
+2483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                           AES_Nr_128);
+2484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 8860              		.loc 3 2484 0
+ 8861 7365 EB38     		jmp	.L107
+ 8862              	.L105:
+2485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nr_192:
+2487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+ 8863              		.loc 3 2487 0
+ 8864 7367 488B45F8 		movq	-8(%rbp), %rax
+ 8865 736b 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 8865      E0
+ 8866 7370 BE0C0000 		movl	$12, %esi
+ 8866      00
+ 8867 7375 4889C7   		movq	%rax, %rdi
+ 8868 7378 E81DF6FF 		call	KAESBlockCipherVecAesNiEqInvCipher
+ 8868      FF
+
GAS LISTING /tmp/ccPaCTqg.s 			page 293
+
+
+ 8869 737d 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 8869      E0
+2488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                           AES_Nr_192);
+2489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 8870              		.loc 3 2489 0
+ 8871 7382 EB1B     		jmp	.L107
+ 8872              	.L106:
+2490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nr_256:
+2492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+ 8873              		.loc 3 2492 0
+ 8874 7384 488B45F8 		movq	-8(%rbp), %rax
+ 8875 7388 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 8875      E0
+ 8876 738d BE0E0000 		movl	$14, %esi
+ 8876      00
+ 8877 7392 4889C7   		movq	%rax, %rdi
+ 8878 7395 E800F6FF 		call	KAESBlockCipherVecAesNiEqInvCipher
+ 8878      FF
+ 8879 739a 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 8879      E0
+ 8880              	.L107:
+2493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                           AES_Nr_256);
+2494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+2495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 8881              		.loc 3 2497 0
+ 8882 739f 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 8882      E0
+2498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 8883              		.loc 3 2498 0
+ 8884 73a4 C9       		leave
+ 8885 73a5 C3       		ret
+ 8886              		.cfi_endproc
+ 8887              	.LFE677:
+ 8888              		.size	KAESBlockCipherVecAesNiDecrypt, .-KAESBlockCipherVecAesNiDecrypt
+ 8889              		.section	.rodata
+ 8890 0422 00000000 		.align 8
+ 8890      0000
+ 8891              	.LC7:
+ 8892 0428 25733A20 		.string	"%s: level %x a %x, b %x c %x d %x\n"
+ 8892      6C657665 
+ 8892      6C202578 
+ 8892      20612025 
+ 8892      782C2062 
+ 8893              	.LC8:
+ 8894 044b 25733A20 		.string	"%s: failed no AES\n"
+ 8894      6661696C 
+ 8894      6564206E 
+ 8894      6F204145 
+ 8894      530A00
+ 8895              	.LC9:
+ 8896 045e 25733A20 		.string	"%s: failed no SSSE3\n"
+ 8896      6661696C 
+ 8896      6564206E 
+ 8896      6F205353 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 294
+
+
+ 8896      5345330A 
+ 8897              	.LC10:
+ 8898 0473 25733A20 		.string	"%s: failed no SSE3\n"
+ 8898      6661696C 
+ 8898      6564206E 
+ 8898      6F205353 
+ 8898      45330A00 
+ 8899              	.LC11:
+ 8900 0487 25733A20 		.string	"%s: failed no SSE2\n"
+ 8900      6661696C 
+ 8900      6564206E 
+ 8900      6F205353 
+ 8900      45320A00 
+ 8901              	.LC12:
+ 8902 049b 25733A20 		.string	"%s: failed no SSE\n"
+ 8902      6661696C 
+ 8902      6564206E 
+ 8902      6F205353 
+ 8902      450A00
+ 8903              	.LC13:
+ 8904 04ae 25733A20 		.string	"%s: passed\n"
+ 8904      70617373 
+ 8904      65640A00 
+ 8905              		.text
+ 8906              		.type	KAESBlockCipherVecAesNiProcessorSupport, @function
+ 8907              	KAESBlockCipherVecAesNiProcessorSupport:
+ 8908              	.LFB678:
+2499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * MakeProcessorSupport
+2503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Run-time check for support of this particular AES implmentation by
+2505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * checking the flags given via the cpuid instruction.
+2506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** bool AESBCMEMBER(ProcessorSupport) ()
+2509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8909              		.loc 3 2509 0
+ 8910              		.cfi_startproc
+ 8911 73a6 55       		pushq	%rbp
+ 8912              	.LCFI44:
+ 8913              		.cfi_def_cfa_offset 16
+ 8914 73a7 4889E5   		movq	%rsp, %rbp
+ 8915              		.cfi_offset 6, -16
+ 8916              	.LCFI45:
+ 8917              		.cfi_def_cfa_register 6
+ 8918 73aa 53       		pushq	%rbx
+ 8919 73ab 4883EC38 		subq	$56, %rsp
+2510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     uint32_t level = 1, a, b, c, d;
+ 8920              		.loc 3 2510 0
+ 8921 73af C745D801 		movl	$1, -40(%rbp)
+ 8921      000000
+2511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     bool ret = true;
+ 8922              		.loc 3 2511 0
+ 8923 73b6 C645EF01 		movb	$1, -17(%rbp)
+2512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 295
+
+
+2513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __cpuid (level, a, b, c, d);
+ 8924              		.loc 3 2513 0
+ 8925 73ba 8B45D8   		movl	-40(%rbp), %eax
+ 8926              	#APP
+ 8927              	# 2513 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 2514              	
+ 2515              	    DEBUG_OBJECT(("%s: level %x a %x, b %x c %x d %x\n",__func__, level, a,b,c,d));
+ 8928              		cpuid
+ 8929              		
+ 8930              	# 0 "" 2
+ 8931              	#NO_APP
+ 8932 73bf 8945DC   		movl	%eax, -36(%rbp)
+ 8933 73c2 895DE0   		movl	%ebx, -32(%rbp)
+ 8934 73c5 894DE4   		movl	%ecx, -28(%rbp)
+ 8935 73c8 8955E8   		movl	%edx, -24(%rbp)
+ 8936              		.loc 3 2515 0
+ 8937              		.cfi_offset 3, -24
+ 8938 73cb E8000000 		call	KDbgWriterGet at PLT
+ 8938      00
+ 8939 73d0 4885C0   		testq	%rax, %rax
+ 8940 73d3 744F     		je	.L111
+ 8941 73d5 BF040000 		movl	$4, %edi
+ 8941      00
+ 8942 73da E8000000 		call	KDbgCondToFlag at PLT
+ 8942      00
+ 8943 73df 4889C6   		movq	%rax, %rsi
+ 8944 73e2 BF100000 		movl	$16, %edi
+ 8944      00
+ 8945 73e7 E8000000 		call	KDbgTestModConds at PLT
+ 8945      00
+ 8946 73ec 84C0     		testb	%al, %al
+ 8947 73ee 7434     		je	.L111
+ 8948 73f0 8B75E4   		movl	-28(%rbp), %esi
+ 8949 73f3 8B5DE0   		movl	-32(%rbp), %ebx
+ 8950 73f6 8B55DC   		movl	-36(%rbp), %edx
+ 8951 73f9 8B45D8   		movl	-40(%rbp), %eax
+ 8952 73fc 8B4DE8   		movl	-24(%rbp), %ecx
+ 8953 73ff 890C24   		movl	%ecx, (%rsp)
+ 8954 7402 4189F1   		movl	%esi, %r9d
+ 8955 7405 4189D8   		movl	%ebx, %r8d
+ 8956 7408 89D1     		movl	%edx, %ecx
+ 8957 740a 89C2     		movl	%eax, %edx
+ 8958 740c 488D3500 		leaq	__func__.8875(%rip), %rsi
+ 8958      000000
+ 8959 7413 488D3D00 		leaq	.LC7(%rip), %rdi
+ 8959      000000
+ 8960 741a B8000000 		movl	$0, %eax
+ 8960      00
+ 8961 741f E8000000 		call	KDbgMsg at PLT
+ 8961      00
+ 8962              	.L111:
+2516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /*
+2519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * Only one flag tells whether the AES-NI instructions
+2520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * are implmented in this CPU
+2521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      */
+
GAS LISTING /tmp/ccPaCTqg.s 			page 296
+
+
+2522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     if ( ! (c & bit_AES))
+ 8963              		.loc 3 2522 0
+ 8964 7424 8B45E4   		movl	-28(%rbp), %eax
+ 8965 7427 25000000 		andl	$33554432, %eax
+ 8965      02
+ 8966 742c 85C0     		testl	%eax, %eax
+ 8967 742e 7546     		jne	.L112
+2523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no AES\n",__func__));
+ 8968              		.loc 3 2524 0
+ 8969 7430 E8000000 		call	KDbgWriterGet at PLT
+ 8969      00
+ 8970 7435 4885C0   		testq	%rax, %rax
+ 8971 7438 7433     		je	.L114
+ 8972 743a BF040000 		movl	$4, %edi
+ 8972      00
+ 8973 743f E8000000 		call	KDbgCondToFlag at PLT
+ 8973      00
+ 8974 7444 4889C6   		movq	%rax, %rsi
+ 8975 7447 BF100000 		movl	$16, %edi
+ 8975      00
+ 8976 744c E8000000 		call	KDbgTestModConds at PLT
+ 8976      00
+ 8977 7451 84C0     		testb	%al, %al
+ 8978 7453 7418     		je	.L114
+ 8979 7455 488D3500 		leaq	__func__.8875(%rip), %rsi
+ 8979      000000
+ 8980 745c 488D3D00 		leaq	.LC8(%rip), %rdi
+ 8980      000000
+ 8981 7463 B8000000 		movl	$0, %eax
+ 8981      00
+ 8982 7468 E8000000 		call	KDbgMsg at PLT
+ 8982      00
+ 8983              	.L114:
+2525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+ 8984              		.loc 3 2525 0
+ 8985 746d C645EF00 		movb	$0, -17(%rbp)
+ 8986 7471 E9900100 		jmp	.L115
+ 8986      00
+ 8987              	.L112:
+2526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     } else
+2527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+2530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /*
+2531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * Several flags indicate different levels of SSE
+2532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * instruction implmentation
+2533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      *
+2534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * we require SSE4.1
+2535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      *
+2536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * that dates from 2006 so is most likely good enough
+2537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      */
+2538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         /* if ( ! (c & (bit_SSE4_2))
+2539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+2541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+2542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+
GAS LISTING /tmp/ccPaCTqg.s 			page 297
+
+
+2543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     else */
+2545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if ( ! (c & bit_SSE4_1))
+ 8988              		.loc 3 2545 0
+ 8989 7476 8B45E4   		movl	-28(%rbp), %eax
+ 8990 7479 25000008 		andl	$524288, %eax
+ 8990      00
+ 8991 747e 85C0     		testl	%eax, %eax
+ 8992 7480 7546     		jne	.L116
+2546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+ 8993              		.loc 3 2547 0
+ 8994 7482 E8000000 		call	KDbgWriterGet at PLT
+ 8994      00
+ 8995 7487 4885C0   		testq	%rax, %rax
+ 8996 748a 7433     		je	.L118
+ 8997 748c BF040000 		movl	$4, %edi
+ 8997      00
+ 8998 7491 E8000000 		call	KDbgCondToFlag at PLT
+ 8998      00
+ 8999 7496 4889C6   		movq	%rax, %rsi
+ 9000 7499 BF100000 		movl	$16, %edi
+ 9000      00
+ 9001 749e E8000000 		call	KDbgTestModConds at PLT
+ 9001      00
+ 9002 74a3 84C0     		testb	%al, %al
+ 9003 74a5 7418     		je	.L118
+ 9004 74a7 488D3500 		leaq	__func__.8875(%rip), %rsi
+ 9004      000000
+ 9005 74ae 488D3D00 		leaq	.LC9(%rip), %rdi
+ 9005      000000
+ 9006 74b5 B8000000 		movl	$0, %eax
+ 9006      00
+ 9007 74ba E8000000 		call	KDbgMsg at PLT
+ 9007      00
+ 9008              	.L118:
+2548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+ 9009              		.loc 3 2548 0
+ 9010 74bf C645EF00 		movb	$0, -17(%rbp)
+ 9011 74c3 E93E0100 		jmp	.L115
+ 9011      00
+ 9012              	.L116:
+2549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     else if ( ! (c & bit_SSSE3))
+ 9013              		.loc 3 2551 0
+ 9014 74c8 8B45E4   		movl	-28(%rbp), %eax
+ 9015 74cb 25000200 		andl	$512, %eax
+ 9015      00
+ 9016 74d0 85C0     		testl	%eax, %eax
+ 9017 74d2 7546     		jne	.L119
+2552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+ 9018              		.loc 3 2553 0
+ 9019 74d4 E8000000 		call	KDbgWriterGet at PLT
+ 9019      00
+ 9020 74d9 4885C0   		testq	%rax, %rax
+
GAS LISTING /tmp/ccPaCTqg.s 			page 298
+
+
+ 9021 74dc 7433     		je	.L121
+ 9022 74de BF040000 		movl	$4, %edi
+ 9022      00
+ 9023 74e3 E8000000 		call	KDbgCondToFlag at PLT
+ 9023      00
+ 9024 74e8 4889C6   		movq	%rax, %rsi
+ 9025 74eb BF100000 		movl	$16, %edi
+ 9025      00
+ 9026 74f0 E8000000 		call	KDbgTestModConds at PLT
+ 9026      00
+ 9027 74f5 84C0     		testb	%al, %al
+ 9028 74f7 7418     		je	.L121
+ 9029 74f9 488D3500 		leaq	__func__.8875(%rip), %rsi
+ 9029      000000
+ 9030 7500 488D3D00 		leaq	.LC9(%rip), %rdi
+ 9030      000000
+ 9031 7507 B8000000 		movl	$0, %eax
+ 9031      00
+ 9032 750c E8000000 		call	KDbgMsg at PLT
+ 9032      00
+ 9033              	.L121:
+2554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+ 9034              		.loc 3 2554 0
+ 9035 7511 C645EF00 		movb	$0, -17(%rbp)
+ 9036 7515 E9EC0000 		jmp	.L115
+ 9036      00
+ 9037              	.L119:
+2555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     else if ( ! (c & bit_SSE3))
+ 9038              		.loc 3 2557 0
+ 9039 751a 8B45E4   		movl	-28(%rbp), %eax
+ 9040 751d 83E001   		andl	$1, %eax
+ 9041 7520 85C0     		testl	%eax, %eax
+ 9042 7522 7546     		jne	.L122
+2558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no SSE3\n",__func__));
+ 9043              		.loc 3 2559 0
+ 9044 7524 E8000000 		call	KDbgWriterGet at PLT
+ 9044      00
+ 9045 7529 4885C0   		testq	%rax, %rax
+ 9046 752c 7433     		je	.L124
+ 9047 752e BF040000 		movl	$4, %edi
+ 9047      00
+ 9048 7533 E8000000 		call	KDbgCondToFlag at PLT
+ 9048      00
+ 9049 7538 4889C6   		movq	%rax, %rsi
+ 9050 753b BF100000 		movl	$16, %edi
+ 9050      00
+ 9051 7540 E8000000 		call	KDbgTestModConds at PLT
+ 9051      00
+ 9052 7545 84C0     		testb	%al, %al
+ 9053 7547 7418     		je	.L124
+ 9054 7549 488D3500 		leaq	__func__.8875(%rip), %rsi
+ 9054      000000
+ 9055 7550 488D3D00 		leaq	.LC10(%rip), %rdi
+ 9055      000000
+
GAS LISTING /tmp/ccPaCTqg.s 			page 299
+
+
+ 9056 7557 B8000000 		movl	$0, %eax
+ 9056      00
+ 9057 755c E8000000 		call	KDbgMsg at PLT
+ 9057      00
+ 9058              	.L124:
+2560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+ 9059              		.loc 3 2560 0
+ 9060 7561 C645EF00 		movb	$0, -17(%rbp)
+ 9061 7565 E99C0000 		jmp	.L115
+ 9061      00
+ 9062              	.L122:
+2561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     else if ( ! (d & bit_SSE2))
+ 9063              		.loc 3 2563 0
+ 9064 756a 8B45E8   		movl	-24(%rbp), %eax
+ 9065 756d 25000000 		andl	$67108864, %eax
+ 9065      04
+ 9066 7572 85C0     		testl	%eax, %eax
+ 9067 7574 7543     		jne	.L125
+2564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no SSE2\n",__func__));
+ 9068              		.loc 3 2565 0
+ 9069 7576 E8000000 		call	KDbgWriterGet at PLT
+ 9069      00
+ 9070 757b 4885C0   		testq	%rax, %rax
+ 9071 757e 7433     		je	.L127
+ 9072 7580 BF040000 		movl	$4, %edi
+ 9072      00
+ 9073 7585 E8000000 		call	KDbgCondToFlag at PLT
+ 9073      00
+ 9074 758a 4889C6   		movq	%rax, %rsi
+ 9075 758d BF100000 		movl	$16, %edi
+ 9075      00
+ 9076 7592 E8000000 		call	KDbgTestModConds at PLT
+ 9076      00
+ 9077 7597 84C0     		testb	%al, %al
+ 9078 7599 7418     		je	.L127
+ 9079 759b 488D3500 		leaq	__func__.8875(%rip), %rsi
+ 9079      000000
+ 9080 75a2 488D3D00 		leaq	.LC11(%rip), %rdi
+ 9080      000000
+ 9081 75a9 B8000000 		movl	$0, %eax
+ 9081      00
+ 9082 75ae E8000000 		call	KDbgMsg at PLT
+ 9082      00
+ 9083              	.L127:
+2566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+ 9084              		.loc 3 2566 0
+ 9085 75b3 C645EF00 		movb	$0, -17(%rbp)
+ 9086 75b7 EB4D     		jmp	.L115
+ 9087              	.L125:
+2567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     else if ( ! (d & bit_SSE))
+ 9088              		.loc 3 2569 0
+ 9089 75b9 8B45E8   		movl	-24(%rbp), %eax
+
GAS LISTING /tmp/ccPaCTqg.s 			page 300
+
+
+ 9090 75bc 25000000 		andl	$33554432, %eax
+ 9090      02
+ 9091 75c1 85C0     		testl	%eax, %eax
+ 9092 75c3 7541     		jne	.L115
+2570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no SSE\n",__func__));
+ 9093              		.loc 3 2571 0
+ 9094 75c5 E8000000 		call	KDbgWriterGet at PLT
+ 9094      00
+ 9095 75ca 4885C0   		testq	%rax, %rax
+ 9096 75cd 7433     		je	.L129
+ 9097 75cf BF040000 		movl	$4, %edi
+ 9097      00
+ 9098 75d4 E8000000 		call	KDbgCondToFlag at PLT
+ 9098      00
+ 9099 75d9 4889C6   		movq	%rax, %rsi
+ 9100 75dc BF100000 		movl	$16, %edi
+ 9100      00
+ 9101 75e1 E8000000 		call	KDbgTestModConds at PLT
+ 9101      00
+ 9102 75e6 84C0     		testb	%al, %al
+ 9103 75e8 7418     		je	.L129
+ 9104 75ea 488D3500 		leaq	__func__.8875(%rip), %rsi
+ 9104      000000
+ 9105 75f1 488D3D00 		leaq	.LC12(%rip), %rdi
+ 9105      000000
+ 9106 75f8 B8000000 		movl	$0, %eax
+ 9106      00
+ 9107 75fd E8000000 		call	KDbgMsg at PLT
+ 9107      00
+ 9108              	.L129:
+2572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+ 9109              		.loc 3 2572 0
+ 9110 7602 C645EF00 		movb	$0, -17(%rbp)
+ 9111              	.L115:
+2573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_OBJECT(("%s: passed\n",__func__));
+ 9112              		.loc 3 2575 0
+ 9113 7606 E8000000 		call	KDbgWriterGet at PLT
+ 9113      00
+ 9114 760b 4885C0   		testq	%rax, %rax
+ 9115 760e 7433     		je	.L131
+ 9116 7610 BF040000 		movl	$4, %edi
+ 9116      00
+ 9117 7615 E8000000 		call	KDbgCondToFlag at PLT
+ 9117      00
+ 9118 761a 4889C6   		movq	%rax, %rsi
+ 9119 761d BF100000 		movl	$16, %edi
+ 9119      00
+ 9120 7622 E8000000 		call	KDbgTestModConds at PLT
+ 9120      00
+ 9121 7627 84C0     		testb	%al, %al
+ 9122 7629 7418     		je	.L131
+ 9123 762b 488D3500 		leaq	__func__.8875(%rip), %rsi
+ 9123      000000
+ 9124 7632 488D3D00 		leaq	.LC13(%rip), %rdi
+
GAS LISTING /tmp/ccPaCTqg.s 			page 301
+
+
+ 9124      000000
+ 9125 7639 B8000000 		movl	$0, %eax
+ 9125      00
+ 9126 763e E8000000 		call	KDbgMsg at PLT
+ 9126      00
+ 9127              	.L131:
+2576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return ret;
+ 9128              		.loc 3 2576 0
+ 9129 7643 0FB645EF 		movzbl	-17(%rbp), %eax
+2577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 9130              		.loc 3 2577 0
+ 9131 7647 4883C438 		addq	$56, %rsp
+ 9132 764b 5B       		popq	%rbx
+ 9133 764c C9       		leave
+ 9134 764d C3       		ret
+ 9135              		.cfi_endproc
+ 9136              	.LFE678:
+ 9137              		.size	KAESBlockCipherVecAesNiProcessorSupport, .-KAESBlockCipherVecAesNiProcessorSupport
+ 9138              		.section	.data.rel.ro.local,"aw", at progbits
+ 9139              		.align 32
+ 9140              		.type	KAESBlockCipherVecAesNi_vt_, @object
+ 9141              		.size	KAESBlockCipherVecAesNi_vt_, 64
+ 9142              	KAESBlockCipherVecAesNi_vt_:
+ 9143 0000 01000000 		.long	1
+ 9144 0004 01000000 		.long	1
+ 9145 0008 00000000 		.quad	KAESBlockCipherVecAesNiDestroy
+ 9145      00000000 
+ 9146 0010 00000000 		.quad	KAESBlockCipherVecAesNiBlockSize
+ 9146      00000000 
+ 9147 0018 00000000 		.quad	KAESBlockCipherVecAesNiKeySize
+ 9147      00000000 
+ 9148 0020 00000000 		.quad	KAESBlockCipherVecAesNiSetEncryptKey
+ 9148      00000000 
+ 9149 0028 00000000 		.quad	KAESBlockCipherVecAesNiSetDecryptKey
+ 9149      00000000 
+ 9150 0030 00000000 		.quad	KAESBlockCipherVecAesNiEncrypt
+ 9150      00000000 
+ 9151 0038 00000000 		.quad	KAESBlockCipherVecAesNiDecrypt
+ 9151      00000000 
+ 9152              		.section	.rodata
+ 9153              	.LC14:
+ 9154 04ba 25733A20 		.string	"%s: %p\n"
+ 9154      25700A00 
+ 9155              		.text
+ 9156              	.globl KAESBlockCipherVecAesNiMake
+ 9157              		.type	KAESBlockCipherVecAesNiMake, @function
+ 9158              	KAESBlockCipherVecAesNiMake:
+ 9159              	.LFB679:
+2578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Init
+2582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   Initialize the fields of this object.  The derived class will call this
+2584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   during it's initialization.
+2585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * self      object to initialze
+
GAS LISTING /tmp/ccPaCTqg.s 			page 302
+
+
+2587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * vt        the virtual table of the derived class
+2588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * mgr       the cipher manager that is the construction factory block cipher
+2589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *           objects hold references to the manager while the manager merely
+2590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *           points at the block ciphers when all block ciphers are destroyed
+2591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *           the manager loses its references and it too can be destroyed if not
+2592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *           held elsewhere
+2593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * name      ASCIZ c-string the name of this class
+2594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+2596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KBlockCipherVec_vt_v1 AESBCMEMBER(_vt_) = 
+2597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 1, 1 },
+2599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(Destroy),
+2601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(BlockSize),
+2602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(KeySize),
+2603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(SetEncryptKey),
+2604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(SetDecryptKey),
+2605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(Encrypt),
+2606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(Decrypt)
+2607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+2608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Make
+2612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Create a new AES Block Cipher object.
+2614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * The processor is checked to see if this particular version is supported on
+2615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * this particular CPU.
+2616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t AESBCMEMBER(Make) (KBlockCipher ** new_obj)
+2618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 9160              		.loc 3 2618 0
+ 9161              		.cfi_startproc
+ 9162 764e 55       		pushq	%rbp
+ 9163              	.LCFI46:
+ 9164              		.cfi_def_cfa_offset 16
+ 9165 764f 4889E5   		movq	%rsp, %rbp
+ 9166              		.cfi_offset 6, -16
+ 9167              	.LCFI47:
+ 9168              		.cfi_def_cfa_register 6
+ 9169 7652 4883EC20 		subq	$32, %rsp
+ 9170 7656 48897DE8 		movq	%rdi, -24(%rbp)
+2619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rc_t rc;
+2620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_OBJECT(("%s: %p\n",__func__,new_obj));
+ 9171              		.loc 3 2621 0
+ 9172 765a E8000000 		call	KDbgWriterGet at PLT
+ 9172      00
+ 9173 765f 4885C0   		testq	%rax, %rax
+ 9174 7662 743A     		je	.L135
+ 9175 7664 BF040000 		movl	$4, %edi
+ 9175      00
+ 9176 7669 E8000000 		call	KDbgCondToFlag at PLT
+ 9176      00
+ 9177 766e 4889C6   		movq	%rax, %rsi
+ 9178 7671 BF100000 		movl	$16, %edi
+
GAS LISTING /tmp/ccPaCTqg.s 			page 303
+
+
+ 9178      00
+ 9179 7676 E8000000 		call	KDbgTestModConds at PLT
+ 9179      00
+ 9180 767b 84C0     		testb	%al, %al
+ 9181 767d 741F     		je	.L135
+ 9182 767f 488B45E8 		movq	-24(%rbp), %rax
+ 9183 7683 4889C2   		movq	%rax, %rdx
+ 9184 7686 488D3500 		leaq	__func__.8978(%rip), %rsi
+ 9184      000000
+ 9185 768d 488D3D00 		leaq	.LC14(%rip), %rdi
+ 9185      000000
+ 9186 7694 B8000000 		movl	$0, %eax
+ 9186      00
+ 9187 7699 E8000000 		call	KDbgMsg at PLT
+ 9187      00
+ 9188              	.L135:
+2622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /* Check parameter first */
+2624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     if (new_obj == NULL)
+ 9189              		.loc 3 2624 0
+ 9190 769e 48837DE8 		cmpq	$0, -24(%rbp)
+ 9190      00
+ 9191 76a3 7522     		jne	.L136
+2625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+ 9192              		.loc 3 2625 0
+ 9193 76a5 B9410A00 		movl	$2625, %ecx
+ 9193      00
+ 9194 76aa 488D1500 		leaq	__func__.8978(%rip), %rdx
+ 9194      000000
+ 9195 76b1 488D3500 		leaq	.LC5(%rip), %rsi
+ 9195      000000
+ 9196 76b8 BF878F00 		movl	$-2030006393, %edi
+ 9196      87
+ 9197 76bd E8000000 		call	SetRCFileFuncLine at PLT
+ 9197      00
+ 9198 76c2 8945FC   		movl	%eax, -4(%rbp)
+ 9199 76c5 EB53     		jmp	.L137
+ 9200              	.L136:
+2626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     else
+2628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         *new_obj = NULL;
+ 9201              		.loc 3 2629 0
+ 9202 76c7 488B45E8 		movq	-24(%rbp), %rax
+ 9203 76cb 48C70000 		movq	$0, (%rax)
+ 9203      000000
+2630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         /* check for processor support of this flavor */
+2632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if ( ! AESBCMEMBER(ProcessorSupport)())
+ 9204              		.loc 3 2632 0
+ 9205 76d2 B8000000 		movl	$0, %eax
+ 9205      00
+ 9206 76d7 E8CAFCFF 		call	KAESBlockCipherVecAesNiProcessorSupport
+ 9206      FF
+ 9207 76dc 83F001   		xorl	$1, %eax
+ 9208 76df 84C0     		testb	%al, %al
+ 9209 76e1 7422     		je	.L138
+
GAS LISTING /tmp/ccPaCTqg.s 			page 304
+
+
+2633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+ 9210              		.loc 3 2633 0
+ 9211 76e3 B9490A00 		movl	$2633, %ecx
+ 9211      00
+ 9212 76e8 488D1500 		leaq	__func__.8978(%rip), %rdx
+ 9212      000000
+ 9213 76ef 488D3500 		leaq	.LC5(%rip), %rsi
+ 9213      000000
+ 9214 76f6 BF038500 		movl	$-2030009085, %edi
+ 9214      87
+ 9215 76fb E8000000 		call	SetRCFileFuncLine at PLT
+ 9215      00
+ 9216 7700 8945FC   		movl	%eax, -4(%rbp)
+ 9217 7703 EB15     		jmp	.L137
+ 9218              	.L138:
+2634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         else
+2636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+2637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             rc = 0;
+ 9219              		.loc 3 2637 0
+ 9220 7705 C745FC00 		movl	$0, -4(%rbp)
+ 9220      000000
+2638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             *new_obj = (KBlockCipher*)&(AESBCMEMBER(_vt_));
+ 9221              		.loc 3 2638 0
+ 9222 770c 488D1500 		leaq	KAESBlockCipherVecAesNi_vt_(%rip), %rdx
+ 9222      000000
+ 9223 7713 488B45E8 		movq	-24(%rbp), %rax
+ 9224 7717 488910   		movq	%rdx, (%rax)
+ 9225              	.L137:
+2639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         }
+2640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return rc;
+ 9226              		.loc 3 2641 0
+ 9227 771a 8B45FC   		movl	-4(%rbp), %eax
+2642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 9228              		.loc 3 2642 0
+ 9229 771d C9       		leave
+ 9230 771e C3       		ret
+ 9231              		.cfi_endproc
+ 9232              	.LFE679:
+ 9233              		.size	KAESBlockCipherVecAesNiMake, .-KAESBlockCipherVecAesNiMake
+ 9234              		.section	.rodata
+ 9235 04c2 00000000 		.align 16
+ 9235      00000000 
+ 9235      00000000 
+ 9235      0000
+ 9236              		.type	__func__.8978, @object
+ 9237              		.size	__func__.8978, 28
+ 9238              	__func__.8978:
+ 9239 04d0 4B414553 		.string	"KAESBlockCipherVecAesNiMake"
+ 9239      426C6F63 
+ 9239      6B436970 
+ 9239      68657256 
+ 9239      65634165 
+ 9240 04ec 00000000 		.align 16
+ 9241              		.type	__PRETTY_FUNCTION__.8979, @object
+ 9242              		.size	__PRETTY_FUNCTION__.8979, 28
+
GAS LISTING /tmp/ccPaCTqg.s 			page 305
+
+
+ 9243              	__PRETTY_FUNCTION__.8979:
+ 9244 04f0 4B414553 		.string	"KAESBlockCipherVecAesNiMake"
+ 9244      426C6F63 
+ 9244      6B436970 
+ 9244      68657256 
+ 9244      65634165 
+ 9245 050c 00000000 		.align 32
+ 9245      00000000 
+ 9245      00000000 
+ 9245      00000000 
+ 9245      00000000 
+ 9246              		.type	__func__.8875, @object
+ 9247              		.size	__func__.8875, 40
+ 9248              	__func__.8875:
+ 9249 0520 4B414553 		.string	"KAESBlockCipherVecAesNiProcessorSupport"
+ 9249      426C6F63 
+ 9249      6B436970 
+ 9249      68657256 
+ 9249      65634165 
+ 9250 0548 00000000 		.align 16
+ 9250      00000000 
+ 9251              		.type	__PRETTY_FUNCTION__.8851, @object
+ 9252              		.size	__PRETTY_FUNCTION__.8851, 31
+ 9253              	__PRETTY_FUNCTION__.8851:
+ 9254 0550 4B414553 		.string	"KAESBlockCipherVecAesNiDecrypt"
+ 9254      426C6F63 
+ 9254      6B436970 
+ 9254      68657256 
+ 9254      65634165 
+ 9255 056f 00       		.align 16
+ 9256              		.type	__PRETTY_FUNCTION__.8830, @object
+ 9257              		.size	__PRETTY_FUNCTION__.8830, 31
+ 9258              	__PRETTY_FUNCTION__.8830:
+ 9259 0570 4B414553 		.string	"KAESBlockCipherVecAesNiEncrypt"
+ 9259      426C6F63 
+ 9259      6B436970 
+ 9259      68657256 
+ 9259      65634165 
+ 9260 058f 00000000 		.align 32
+ 9260      00000000 
+ 9260      00000000 
+ 9260      00000000 
+ 9260      00
+ 9261              		.type	__func__.8794, @object
+ 9262              		.size	__func__.8794, 37
+ 9263              	__func__.8794:
+ 9264 05a0 4B414553 		.string	"KAESBlockCipherVecAesNiSetEncryptKey"
+ 9264      426C6F63 
+ 9264      6B436970 
+ 9264      68657256 
+ 9264      65634165 
+ 9265 05c5 00000000 		.align 32
+ 9265      00000000 
+ 9265      00000000 
+ 9265      00000000 
+ 9265      00000000 
+ 9266              		.type	__PRETTY_FUNCTION__.8793, @object
+
GAS LISTING /tmp/ccPaCTqg.s 			page 306
+
+
+ 9267              		.size	__PRETTY_FUNCTION__.8793, 37
+ 9268              	__PRETTY_FUNCTION__.8793:
+ 9269 05e0 4B414553 		.string	"KAESBlockCipherVecAesNiSetEncryptKey"
+ 9269      426C6F63 
+ 9269      6B436970 
+ 9269      68657256 
+ 9269      65634165 
+ 9270 0605 00000000 		.align 16
+ 9270      00000000 
+ 9270      000000
+ 9271              		.type	mask.8002, @object
+ 9272              		.size	mask.8002, 16
+ 9273              	mask.8002:
+ 9274 0610 FF       		.byte	-1
+ 9275 0611 FF       		.byte	-1
+ 9276 0612 FF       		.byte	-1
+ 9277 0613 FF       		.byte	-1
+ 9278 0614 00       		.byte	0
+ 9279 0615 01       		.byte	1
+ 9280 0616 02       		.byte	2
+ 9281 0617 03       		.byte	3
+ 9282 0618 04       		.byte	4
+ 9283 0619 05       		.byte	5
+ 9284 061a 06       		.byte	6
+ 9285 061b 07       		.byte	7
+ 9286 061c 08       		.byte	8
+ 9287 061d 09       		.byte	9
+ 9288 061e 0A       		.byte	10
+ 9289 061f 0B       		.byte	11
+ 9290              		.align 16
+ 9291              		.type	mask.8011, @object
+ 9292              		.size	mask.8011, 16
+ 9293              	mask.8011:
+ 9294 0620 08       		.byte	8
+ 9295 0621 09       		.byte	9
+ 9296 0622 0A       		.byte	10
+ 9297 0623 0B       		.byte	11
+ 9298 0624 0C       		.byte	12
+ 9299 0625 0D       		.byte	13
+ 9300 0626 0E       		.byte	14
+ 9301 0627 0F       		.byte	15
+ 9302 0628 FF       		.byte	-1
+ 9303 0629 FF       		.byte	-1
+ 9304 062a FF       		.byte	-1
+ 9305 062b FF       		.byte	-1
+ 9306 062c FF       		.byte	-1
+ 9307 062d FF       		.byte	-1
+ 9308 062e FF       		.byte	-1
+ 9309 062f FF       		.byte	-1
+ 9310              		.text
+ 9311              	.Letext0:
+ 9312              		.section	.debug_loc,"", at progbits
+ 9313              	.Ldebug_loc0:
+ 9314              	.LLST0:
+ 9315 0000 00000000 		.quad	.LFB580-.Ltext0
+ 9315      00000000 
+ 9316 0008 01000000 		.quad	.LCFI0-.Ltext0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 307
+
+
+ 9316      00000000 
+ 9317 0010 0200     		.value	0x2
+ 9318 0012 77       		.byte	0x77
+ 9319 0013 08       		.sleb128 8
+ 9320 0014 01000000 		.quad	.LCFI0-.Ltext0
+ 9320      00000000 
+ 9321 001c 04000000 		.quad	.LCFI1-.Ltext0
+ 9321      00000000 
+ 9322 0024 0200     		.value	0x2
+ 9323 0026 77       		.byte	0x77
+ 9324 0027 10       		.sleb128 16
+ 9325 0028 04000000 		.quad	.LCFI1-.Ltext0
+ 9325      00000000 
+ 9326 0030 0B000000 		.quad	.LFE580-.Ltext0
+ 9326      00000000 
+ 9327 0038 0200     		.value	0x2
+ 9328 003a 76       		.byte	0x76
+ 9329 003b 10       		.sleb128 16
+ 9330 003c 00000000 		.quad	0x0
+ 9330      00000000 
+ 9331 0044 00000000 		.quad	0x0
+ 9331      00000000 
+ 9332              	.LLST1:
+ 9333 004c 0B000000 		.quad	.LFB581-.Ltext0
+ 9333      00000000 
+ 9334 0054 0C000000 		.quad	.LCFI2-.Ltext0
+ 9334      00000000 
+ 9335 005c 0200     		.value	0x2
+ 9336 005e 77       		.byte	0x77
+ 9337 005f 08       		.sleb128 8
+ 9338 0060 0C000000 		.quad	.LCFI2-.Ltext0
+ 9338      00000000 
+ 9339 0068 0F000000 		.quad	.LCFI3-.Ltext0
+ 9339      00000000 
+ 9340 0070 0200     		.value	0x2
+ 9341 0072 77       		.byte	0x77
+ 9342 0073 10       		.sleb128 16
+ 9343 0074 0F000000 		.quad	.LCFI3-.Ltext0
+ 9343      00000000 
+ 9344 007c 16000000 		.quad	.LFE581-.Ltext0
+ 9344      00000000 
+ 9345 0084 0200     		.value	0x2
+ 9346 0086 76       		.byte	0x76
+ 9347 0087 10       		.sleb128 16
+ 9348 0088 00000000 		.quad	0x0
+ 9348      00000000 
+ 9349 0090 00000000 		.quad	0x0
+ 9349      00000000 
+ 9350              	.LLST2:
+ 9351 0098 16000000 		.quad	.LFB582-.Ltext0
+ 9351      00000000 
+ 9352 00a0 17000000 		.quad	.LCFI4-.Ltext0
+ 9352      00000000 
+ 9353 00a8 0200     		.value	0x2
+ 9354 00aa 77       		.byte	0x77
+ 9355 00ab 08       		.sleb128 8
+ 9356 00ac 17000000 		.quad	.LCFI4-.Ltext0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 308
+
+
+ 9356      00000000 
+ 9357 00b4 1A000000 		.quad	.LCFI5-.Ltext0
+ 9357      00000000 
+ 9358 00bc 0200     		.value	0x2
+ 9359 00be 77       		.byte	0x77
+ 9360 00bf 10       		.sleb128 16
+ 9361 00c0 1A000000 		.quad	.LCFI5-.Ltext0
+ 9361      00000000 
+ 9362 00c8 21000000 		.quad	.LFE582-.Ltext0
+ 9362      00000000 
+ 9363 00d0 0200     		.value	0x2
+ 9364 00d2 76       		.byte	0x76
+ 9365 00d3 10       		.sleb128 16
+ 9366 00d4 00000000 		.quad	0x0
+ 9366      00000000 
+ 9367 00dc 00000000 		.quad	0x0
+ 9367      00000000 
+ 9368              	.LLST3:
+ 9369 00e4 21000000 		.quad	.LFB583-.Ltext0
+ 9369      00000000 
+ 9370 00ec 22000000 		.quad	.LCFI6-.Ltext0
+ 9370      00000000 
+ 9371 00f4 0200     		.value	0x2
+ 9372 00f6 77       		.byte	0x77
+ 9373 00f7 08       		.sleb128 8
+ 9374 00f8 22000000 		.quad	.LCFI6-.Ltext0
+ 9374      00000000 
+ 9375 0100 25000000 		.quad	.LCFI7-.Ltext0
+ 9375      00000000 
+ 9376 0108 0200     		.value	0x2
+ 9377 010a 77       		.byte	0x77
+ 9378 010b 10       		.sleb128 16
+ 9379 010c 25000000 		.quad	.LCFI7-.Ltext0
+ 9379      00000000 
+ 9380 0114 2C000000 		.quad	.LFE583-.Ltext0
+ 9380      00000000 
+ 9381 011c 0200     		.value	0x2
+ 9382 011e 76       		.byte	0x76
+ 9383 011f 10       		.sleb128 16
+ 9384 0120 00000000 		.quad	0x0
+ 9384      00000000 
+ 9385 0128 00000000 		.quad	0x0
+ 9385      00000000 
+ 9386              	.LLST4:
+ 9387 0130 2C000000 		.quad	.LFB585-.Ltext0
+ 9387      00000000 
+ 9388 0138 2D000000 		.quad	.LCFI8-.Ltext0
+ 9388      00000000 
+ 9389 0140 0200     		.value	0x2
+ 9390 0142 77       		.byte	0x77
+ 9391 0143 08       		.sleb128 8
+ 9392 0144 2D000000 		.quad	.LCFI8-.Ltext0
+ 9392      00000000 
+ 9393 014c 30000000 		.quad	.LCFI9-.Ltext0
+ 9393      00000000 
+ 9394 0154 0200     		.value	0x2
+ 9395 0156 77       		.byte	0x77
+
GAS LISTING /tmp/ccPaCTqg.s 			page 309
+
+
+ 9396 0157 10       		.sleb128 16
+ 9397 0158 30000000 		.quad	.LCFI9-.Ltext0
+ 9397      00000000 
+ 9398 0160 37000000 		.quad	.LFE585-.Ltext0
+ 9398      00000000 
+ 9399 0168 0200     		.value	0x2
+ 9400 016a 76       		.byte	0x76
+ 9401 016b 10       		.sleb128 16
+ 9402 016c 00000000 		.quad	0x0
+ 9402      00000000 
+ 9403 0174 00000000 		.quad	0x0
+ 9403      00000000 
+ 9404              	.LLST5:
+ 9405 017c 37000000 		.quad	.LFB602-.Ltext0
+ 9405      00000000 
+ 9406 0184 38000000 		.quad	.LCFI10-.Ltext0
+ 9406      00000000 
+ 9407 018c 0200     		.value	0x2
+ 9408 018e 77       		.byte	0x77
+ 9409 018f 08       		.sleb128 8
+ 9410 0190 38000000 		.quad	.LCFI10-.Ltext0
+ 9410      00000000 
+ 9411 0198 3B000000 		.quad	.LCFI11-.Ltext0
+ 9411      00000000 
+ 9412 01a0 0200     		.value	0x2
+ 9413 01a2 77       		.byte	0x77
+ 9414 01a3 10       		.sleb128 16
+ 9415 01a4 3B000000 		.quad	.LCFI11-.Ltext0
+ 9415      00000000 
+ 9416 01ac 4B000000 		.quad	.LFE602-.Ltext0
+ 9416      00000000 
+ 9417 01b4 0200     		.value	0x2
+ 9418 01b6 76       		.byte	0x76
+ 9419 01b7 10       		.sleb128 16
+ 9420 01b8 00000000 		.quad	0x0
+ 9420      00000000 
+ 9421 01c0 00000000 		.quad	0x0
+ 9421      00000000 
+ 9422              	.LLST6:
+ 9423 01c8 4B000000 		.quad	.LFB656-.Ltext0
+ 9423      00000000 
+ 9424 01d0 4C000000 		.quad	.LCFI12-.Ltext0
+ 9424      00000000 
+ 9425 01d8 0200     		.value	0x2
+ 9426 01da 77       		.byte	0x77
+ 9427 01db 08       		.sleb128 8
+ 9428 01dc 4C000000 		.quad	.LCFI12-.Ltext0
+ 9428      00000000 
+ 9429 01e4 4F000000 		.quad	.LCFI13-.Ltext0
+ 9429      00000000 
+ 9430 01ec 0200     		.value	0x2
+ 9431 01ee 77       		.byte	0x77
+ 9432 01ef 10       		.sleb128 16
+ 9433 01f0 4F000000 		.quad	.LCFI13-.Ltext0
+ 9433      00000000 
+ 9434 01f8 C3180000 		.quad	.LFE656-.Ltext0
+ 9434      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 310
+
+
+ 9435 0200 0200     		.value	0x2
+ 9436 0202 76       		.byte	0x76
+ 9437 0203 10       		.sleb128 16
+ 9438 0204 00000000 		.quad	0x0
+ 9438      00000000 
+ 9439 020c 00000000 		.quad	0x0
+ 9439      00000000 
+ 9440              	.LLST7:
+ 9441 0214 C3180000 		.quad	.LFB657-.Ltext0
+ 9441      00000000 
+ 9442 021c C4180000 		.quad	.LCFI14-.Ltext0
+ 9442      00000000 
+ 9443 0224 0200     		.value	0x2
+ 9444 0226 77       		.byte	0x77
+ 9445 0227 08       		.sleb128 8
+ 9446 0228 C4180000 		.quad	.LCFI14-.Ltext0
+ 9446      00000000 
+ 9447 0230 C7180000 		.quad	.LCFI15-.Ltext0
+ 9447      00000000 
+ 9448 0238 0200     		.value	0x2
+ 9449 023a 77       		.byte	0x77
+ 9450 023b 10       		.sleb128 16
+ 9451 023c C7180000 		.quad	.LCFI15-.Ltext0
+ 9451      00000000 
+ 9452 0244 00400000 		.quad	.LFE657-.Ltext0
+ 9452      00000000 
+ 9453 024c 0200     		.value	0x2
+ 9454 024e 76       		.byte	0x76
+ 9455 024f 10       		.sleb128 16
+ 9456 0250 00000000 		.quad	0x0
+ 9456      00000000 
+ 9457 0258 00000000 		.quad	0x0
+ 9457      00000000 
+ 9458              	.LLST8:
+ 9459 0260 00400000 		.quad	.LFB658-.Ltext0
+ 9459      00000000 
+ 9460 0268 01400000 		.quad	.LCFI16-.Ltext0
+ 9460      00000000 
+ 9461 0270 0200     		.value	0x2
+ 9462 0272 77       		.byte	0x77
+ 9463 0273 08       		.sleb128 8
+ 9464 0274 01400000 		.quad	.LCFI16-.Ltext0
+ 9464      00000000 
+ 9465 027c 04400000 		.quad	.LCFI17-.Ltext0
+ 9465      00000000 
+ 9466 0284 0200     		.value	0x2
+ 9467 0286 77       		.byte	0x77
+ 9468 0287 10       		.sleb128 16
+ 9469 0288 04400000 		.quad	.LCFI17-.Ltext0
+ 9469      00000000 
+ 9470 0290 B6610000 		.quad	.LFE658-.Ltext0
+ 9470      00000000 
+ 9471 0298 0200     		.value	0x2
+ 9472 029a 76       		.byte	0x76
+ 9473 029b 10       		.sleb128 16
+ 9474 029c 00000000 		.quad	0x0
+ 9474      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 311
+
+
+ 9475 02a4 00000000 		.quad	0x0
+ 9475      00000000 
+ 9476              	.LLST9:
+ 9477 02ac B6610000 		.quad	.LFB659-.Ltext0
+ 9477      00000000 
+ 9478 02b4 B7610000 		.quad	.LCFI18-.Ltext0
+ 9478      00000000 
+ 9479 02bc 0200     		.value	0x2
+ 9480 02be 77       		.byte	0x77
+ 9481 02bf 08       		.sleb128 8
+ 9482 02c0 B7610000 		.quad	.LCFI18-.Ltext0
+ 9482      00000000 
+ 9483 02c8 BA610000 		.quad	.LCFI19-.Ltext0
+ 9483      00000000 
+ 9484 02d0 0200     		.value	0x2
+ 9485 02d2 77       		.byte	0x77
+ 9486 02d3 10       		.sleb128 16
+ 9487 02d4 BA610000 		.quad	.LCFI19-.Ltext0
+ 9487      00000000 
+ 9488 02dc 6C620000 		.quad	.LFE659-.Ltext0
+ 9488      00000000 
+ 9489 02e4 0200     		.value	0x2
+ 9490 02e6 76       		.byte	0x76
+ 9491 02e7 10       		.sleb128 16
+ 9492 02e8 00000000 		.quad	0x0
+ 9492      00000000 
+ 9493 02f0 00000000 		.quad	0x0
+ 9493      00000000 
+ 9494              	.LLST10:
+ 9495 02f8 6C620000 		.quad	.LFB660-.Ltext0
+ 9495      00000000 
+ 9496 0300 6D620000 		.quad	.LCFI20-.Ltext0
+ 9496      00000000 
+ 9497 0308 0200     		.value	0x2
+ 9498 030a 77       		.byte	0x77
+ 9499 030b 08       		.sleb128 8
+ 9500 030c 6D620000 		.quad	.LCFI20-.Ltext0
+ 9500      00000000 
+ 9501 0314 70620000 		.quad	.LCFI21-.Ltext0
+ 9501      00000000 
+ 9502 031c 0200     		.value	0x2
+ 9503 031e 77       		.byte	0x77
+ 9504 031f 10       		.sleb128 16
+ 9505 0320 70620000 		.quad	.LCFI21-.Ltext0
+ 9505      00000000 
+ 9506 0328 96620000 		.quad	.LFE660-.Ltext0
+ 9506      00000000 
+ 9507 0330 0200     		.value	0x2
+ 9508 0332 76       		.byte	0x76
+ 9509 0333 10       		.sleb128 16
+ 9510 0334 00000000 		.quad	0x0
+ 9510      00000000 
+ 9511 033c 00000000 		.quad	0x0
+ 9511      00000000 
+ 9512              	.LLST11:
+ 9513 0344 96620000 		.quad	.LFB661-.Ltext0
+ 9513      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 312
+
+
+ 9514 034c 97620000 		.quad	.LCFI22-.Ltext0
+ 9514      00000000 
+ 9515 0354 0200     		.value	0x2
+ 9516 0356 77       		.byte	0x77
+ 9517 0357 08       		.sleb128 8
+ 9518 0358 97620000 		.quad	.LCFI22-.Ltext0
+ 9518      00000000 
+ 9519 0360 9A620000 		.quad	.LCFI23-.Ltext0
+ 9519      00000000 
+ 9520 0368 0200     		.value	0x2
+ 9521 036a 77       		.byte	0x77
+ 9522 036b 10       		.sleb128 16
+ 9523 036c 9A620000 		.quad	.LCFI23-.Ltext0
+ 9523      00000000 
+ 9524 0374 C0620000 		.quad	.LFE661-.Ltext0
+ 9524      00000000 
+ 9525 037c 0200     		.value	0x2
+ 9526 037e 76       		.byte	0x76
+ 9527 037f 10       		.sleb128 16
+ 9528 0380 00000000 		.quad	0x0
+ 9528      00000000 
+ 9529 0388 00000000 		.quad	0x0
+ 9529      00000000 
+ 9530              	.LLST12:
+ 9531 0390 C0620000 		.quad	.LFB662-.Ltext0
+ 9531      00000000 
+ 9532 0398 C1620000 		.quad	.LCFI24-.Ltext0
+ 9532      00000000 
+ 9533 03a0 0200     		.value	0x2
+ 9534 03a2 77       		.byte	0x77
+ 9535 03a3 08       		.sleb128 8
+ 9536 03a4 C1620000 		.quad	.LCFI24-.Ltext0
+ 9536      00000000 
+ 9537 03ac C4620000 		.quad	.LCFI25-.Ltext0
+ 9537      00000000 
+ 9538 03b4 0200     		.value	0x2
+ 9539 03b6 77       		.byte	0x77
+ 9540 03b7 10       		.sleb128 16
+ 9541 03b8 C4620000 		.quad	.LCFI25-.Ltext0
+ 9541      00000000 
+ 9542 03c0 EA620000 		.quad	.LFE662-.Ltext0
+ 9542      00000000 
+ 9543 03c8 0200     		.value	0x2
+ 9544 03ca 76       		.byte	0x76
+ 9545 03cb 10       		.sleb128 16
+ 9546 03cc 00000000 		.quad	0x0
+ 9546      00000000 
+ 9547 03d4 00000000 		.quad	0x0
+ 9547      00000000 
+ 9548              	.LLST13:
+ 9549 03dc EA620000 		.quad	.LFB666-.Ltext0
+ 9549      00000000 
+ 9550 03e4 EB620000 		.quad	.LCFI26-.Ltext0
+ 9550      00000000 
+ 9551 03ec 0200     		.value	0x2
+ 9552 03ee 77       		.byte	0x77
+ 9553 03ef 08       		.sleb128 8
+
GAS LISTING /tmp/ccPaCTqg.s 			page 313
+
+
+ 9554 03f0 EB620000 		.quad	.LCFI26-.Ltext0
+ 9554      00000000 
+ 9555 03f8 EE620000 		.quad	.LCFI27-.Ltext0
+ 9555      00000000 
+ 9556 0400 0200     		.value	0x2
+ 9557 0402 77       		.byte	0x77
+ 9558 0403 10       		.sleb128 16
+ 9559 0404 EE620000 		.quad	.LCFI27-.Ltext0
+ 9559      00000000 
+ 9560 040c 9A690000 		.quad	.LFE666-.Ltext0
+ 9560      00000000 
+ 9561 0414 0200     		.value	0x2
+ 9562 0416 76       		.byte	0x76
+ 9563 0417 10       		.sleb128 16
+ 9564 0418 00000000 		.quad	0x0
+ 9564      00000000 
+ 9565 0420 00000000 		.quad	0x0
+ 9565      00000000 
+ 9566              	.LLST14:
+ 9567 0428 9A690000 		.quad	.LFB670-.Ltext0
+ 9567      00000000 
+ 9568 0430 9B690000 		.quad	.LCFI28-.Ltext0
+ 9568      00000000 
+ 9569 0438 0200     		.value	0x2
+ 9570 043a 77       		.byte	0x77
+ 9571 043b 08       		.sleb128 8
+ 9572 043c 9B690000 		.quad	.LCFI28-.Ltext0
+ 9572      00000000 
+ 9573 0444 9E690000 		.quad	.LCFI29-.Ltext0
+ 9573      00000000 
+ 9574 044c 0200     		.value	0x2
+ 9575 044e 77       		.byte	0x77
+ 9576 044f 10       		.sleb128 16
+ 9577 0450 9E690000 		.quad	.LCFI29-.Ltext0
+ 9577      00000000 
+ 9578 0458 54700000 		.quad	.LFE670-.Ltext0
+ 9578      00000000 
+ 9579 0460 0200     		.value	0x2
+ 9580 0462 76       		.byte	0x76
+ 9581 0463 10       		.sleb128 16
+ 9582 0464 00000000 		.quad	0x0
+ 9582      00000000 
+ 9583 046c 00000000 		.quad	0x0
+ 9583      00000000 
+ 9584              	.LLST15:
+ 9585 0474 54700000 		.quad	.LFB671-.Ltext0
+ 9585      00000000 
+ 9586 047c 55700000 		.quad	.LCFI30-.Ltext0
+ 9586      00000000 
+ 9587 0484 0200     		.value	0x2
+ 9588 0486 77       		.byte	0x77
+ 9589 0487 08       		.sleb128 8
+ 9590 0488 55700000 		.quad	.LCFI30-.Ltext0
+ 9590      00000000 
+ 9591 0490 58700000 		.quad	.LCFI31-.Ltext0
+ 9591      00000000 
+ 9592 0498 0200     		.value	0x2
+
GAS LISTING /tmp/ccPaCTqg.s 			page 314
+
+
+ 9593 049a 77       		.byte	0x77
+ 9594 049b 10       		.sleb128 16
+ 9595 049c 58700000 		.quad	.LCFI31-.Ltext0
+ 9595      00000000 
+ 9596 04a4 5E700000 		.quad	.LFE671-.Ltext0
+ 9596      00000000 
+ 9597 04ac 0200     		.value	0x2
+ 9598 04ae 76       		.byte	0x76
+ 9599 04af 10       		.sleb128 16
+ 9600 04b0 00000000 		.quad	0x0
+ 9600      00000000 
+ 9601 04b8 00000000 		.quad	0x0
+ 9601      00000000 
+ 9602              	.LLST16:
+ 9603 04c0 5E700000 		.quad	.LFB672-.Ltext0
+ 9603      00000000 
+ 9604 04c8 5F700000 		.quad	.LCFI32-.Ltext0
+ 9604      00000000 
+ 9605 04d0 0200     		.value	0x2
+ 9606 04d2 77       		.byte	0x77
+ 9607 04d3 08       		.sleb128 8
+ 9608 04d4 5F700000 		.quad	.LCFI32-.Ltext0
+ 9608      00000000 
+ 9609 04dc 62700000 		.quad	.LCFI33-.Ltext0
+ 9609      00000000 
+ 9610 04e4 0200     		.value	0x2
+ 9611 04e6 77       		.byte	0x77
+ 9612 04e7 10       		.sleb128 16
+ 9613 04e8 62700000 		.quad	.LCFI33-.Ltext0
+ 9613      00000000 
+ 9614 04f0 69700000 		.quad	.LFE672-.Ltext0
+ 9614      00000000 
+ 9615 04f8 0200     		.value	0x2
+ 9616 04fa 76       		.byte	0x76
+ 9617 04fb 10       		.sleb128 16
+ 9618 04fc 00000000 		.quad	0x0
+ 9618      00000000 
+ 9619 0504 00000000 		.quad	0x0
+ 9619      00000000 
+ 9620              	.LLST17:
+ 9621 050c 69700000 		.quad	.LFB673-.Ltext0
+ 9621      00000000 
+ 9622 0514 6A700000 		.quad	.LCFI34-.Ltext0
+ 9622      00000000 
+ 9623 051c 0200     		.value	0x2
+ 9624 051e 77       		.byte	0x77
+ 9625 051f 08       		.sleb128 8
+ 9626 0520 6A700000 		.quad	.LCFI34-.Ltext0
+ 9626      00000000 
+ 9627 0528 6D700000 		.quad	.LCFI35-.Ltext0
+ 9627      00000000 
+ 9628 0530 0200     		.value	0x2
+ 9629 0532 77       		.byte	0x77
+ 9630 0533 10       		.sleb128 16
+ 9631 0534 6D700000 		.quad	.LCFI35-.Ltext0
+ 9631      00000000 
+ 9632 053c 74700000 		.quad	.LFE673-.Ltext0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 315
+
+
+ 9632      00000000 
+ 9633 0544 0200     		.value	0x2
+ 9634 0546 76       		.byte	0x76
+ 9635 0547 10       		.sleb128 16
+ 9636 0548 00000000 		.quad	0x0
+ 9636      00000000 
+ 9637 0550 00000000 		.quad	0x0
+ 9637      00000000 
+ 9638              	.LLST18:
+ 9639 0558 74700000 		.quad	.LFB674-.Ltext0
+ 9639      00000000 
+ 9640 0560 75700000 		.quad	.LCFI36-.Ltext0
+ 9640      00000000 
+ 9641 0568 0200     		.value	0x2
+ 9642 056a 77       		.byte	0x77
+ 9643 056b 08       		.sleb128 8
+ 9644 056c 75700000 		.quad	.LCFI36-.Ltext0
+ 9644      00000000 
+ 9645 0574 78700000 		.quad	.LCFI37-.Ltext0
+ 9645      00000000 
+ 9646 057c 0200     		.value	0x2
+ 9647 057e 77       		.byte	0x77
+ 9648 057f 10       		.sleb128 16
+ 9649 0580 78700000 		.quad	.LCFI37-.Ltext0
+ 9649      00000000 
+ 9650 0588 5D710000 		.quad	.LFE674-.Ltext0
+ 9650      00000000 
+ 9651 0590 0200     		.value	0x2
+ 9652 0592 76       		.byte	0x76
+ 9653 0593 10       		.sleb128 16
+ 9654 0594 00000000 		.quad	0x0
+ 9654      00000000 
+ 9655 059c 00000000 		.quad	0x0
+ 9655      00000000 
+ 9656              	.LLST19:
+ 9657 05a4 5D710000 		.quad	.LFB675-.Ltext0
+ 9657      00000000 
+ 9658 05ac 5E710000 		.quad	.LCFI38-.Ltext0
+ 9658      00000000 
+ 9659 05b4 0200     		.value	0x2
+ 9660 05b6 77       		.byte	0x77
+ 9661 05b7 08       		.sleb128 8
+ 9662 05b8 5E710000 		.quad	.LCFI38-.Ltext0
+ 9662      00000000 
+ 9663 05c0 61710000 		.quad	.LCFI39-.Ltext0
+ 9663      00000000 
+ 9664 05c8 0200     		.value	0x2
+ 9665 05ca 77       		.byte	0x77
+ 9666 05cb 10       		.sleb128 16
+ 9667 05cc 61710000 		.quad	.LCFI39-.Ltext0
+ 9667      00000000 
+ 9668 05d4 20720000 		.quad	.LFE675-.Ltext0
+ 9668      00000000 
+ 9669 05dc 0200     		.value	0x2
+ 9670 05de 76       		.byte	0x76
+ 9671 05df 10       		.sleb128 16
+ 9672 05e0 00000000 		.quad	0x0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 316
+
+
+ 9672      00000000 
+ 9673 05e8 00000000 		.quad	0x0
+ 9673      00000000 
+ 9674              	.LLST20:
+ 9675 05f0 20720000 		.quad	.LFB676-.Ltext0
+ 9675      00000000 
+ 9676 05f8 21720000 		.quad	.LCFI40-.Ltext0
+ 9676      00000000 
+ 9677 0600 0200     		.value	0x2
+ 9678 0602 77       		.byte	0x77
+ 9679 0603 08       		.sleb128 8
+ 9680 0604 21720000 		.quad	.LCFI40-.Ltext0
+ 9680      00000000 
+ 9681 060c 24720000 		.quad	.LCFI41-.Ltext0
+ 9681      00000000 
+ 9682 0614 0200     		.value	0x2
+ 9683 0616 77       		.byte	0x77
+ 9684 0617 10       		.sleb128 16
+ 9685 0618 24720000 		.quad	.LCFI41-.Ltext0
+ 9685      00000000 
+ 9686 0620 E3720000 		.quad	.LFE676-.Ltext0
+ 9686      00000000 
+ 9687 0628 0200     		.value	0x2
+ 9688 062a 76       		.byte	0x76
+ 9689 062b 10       		.sleb128 16
+ 9690 062c 00000000 		.quad	0x0
+ 9690      00000000 
+ 9691 0634 00000000 		.quad	0x0
+ 9691      00000000 
+ 9692              	.LLST21:
+ 9693 063c E3720000 		.quad	.LFB677-.Ltext0
+ 9693      00000000 
+ 9694 0644 E4720000 		.quad	.LCFI42-.Ltext0
+ 9694      00000000 
+ 9695 064c 0200     		.value	0x2
+ 9696 064e 77       		.byte	0x77
+ 9697 064f 08       		.sleb128 8
+ 9698 0650 E4720000 		.quad	.LCFI42-.Ltext0
+ 9698      00000000 
+ 9699 0658 E7720000 		.quad	.LCFI43-.Ltext0
+ 9699      00000000 
+ 9700 0660 0200     		.value	0x2
+ 9701 0662 77       		.byte	0x77
+ 9702 0663 10       		.sleb128 16
+ 9703 0664 E7720000 		.quad	.LCFI43-.Ltext0
+ 9703      00000000 
+ 9704 066c A6730000 		.quad	.LFE677-.Ltext0
+ 9704      00000000 
+ 9705 0674 0200     		.value	0x2
+ 9706 0676 76       		.byte	0x76
+ 9707 0677 10       		.sleb128 16
+ 9708 0678 00000000 		.quad	0x0
+ 9708      00000000 
+ 9709 0680 00000000 		.quad	0x0
+ 9709      00000000 
+ 9710              	.LLST22:
+ 9711 0688 A6730000 		.quad	.LFB678-.Ltext0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 317
+
+
+ 9711      00000000 
+ 9712 0690 A7730000 		.quad	.LCFI44-.Ltext0
+ 9712      00000000 
+ 9713 0698 0200     		.value	0x2
+ 9714 069a 77       		.byte	0x77
+ 9715 069b 08       		.sleb128 8
+ 9716 069c A7730000 		.quad	.LCFI44-.Ltext0
+ 9716      00000000 
+ 9717 06a4 AA730000 		.quad	.LCFI45-.Ltext0
+ 9717      00000000 
+ 9718 06ac 0200     		.value	0x2
+ 9719 06ae 77       		.byte	0x77
+ 9720 06af 10       		.sleb128 16
+ 9721 06b0 AA730000 		.quad	.LCFI45-.Ltext0
+ 9721      00000000 
+ 9722 06b8 4E760000 		.quad	.LFE678-.Ltext0
+ 9722      00000000 
+ 9723 06c0 0200     		.value	0x2
+ 9724 06c2 76       		.byte	0x76
+ 9725 06c3 10       		.sleb128 16
+ 9726 06c4 00000000 		.quad	0x0
+ 9726      00000000 
+ 9727 06cc 00000000 		.quad	0x0
+ 9727      00000000 
+ 9728              	.LLST23:
+ 9729 06d4 4E760000 		.quad	.LFB679-.Ltext0
+ 9729      00000000 
+ 9730 06dc 4F760000 		.quad	.LCFI46-.Ltext0
+ 9730      00000000 
+ 9731 06e4 0200     		.value	0x2
+ 9732 06e6 77       		.byte	0x77
+ 9733 06e7 08       		.sleb128 8
+ 9734 06e8 4F760000 		.quad	.LCFI46-.Ltext0
+ 9734      00000000 
+ 9735 06f0 52760000 		.quad	.LCFI47-.Ltext0
+ 9735      00000000 
+ 9736 06f8 0200     		.value	0x2
+ 9737 06fa 77       		.byte	0x77
+ 9738 06fb 10       		.sleb128 16
+ 9739 06fc 52760000 		.quad	.LCFI47-.Ltext0
+ 9739      00000000 
+ 9740 0704 1F770000 		.quad	.LFE679-.Ltext0
+ 9740      00000000 
+ 9741 070c 0200     		.value	0x2
+ 9742 070e 76       		.byte	0x76
+ 9743 070f 10       		.sleb128 16
+ 9744 0710 00000000 		.quad	0x0
+ 9744      00000000 
+ 9745 0718 00000000 		.quad	0x0
+ 9745      00000000 
+ 9746              		.file 4 "/usr/include/stdint.h"
+ 9747              		.file 5 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+ 9748              		.file 6 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/debug.h"
+ 9749              		.file 7 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 9750              		.file 8 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi-priv.h"
+ 9751              		.file 9 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-priv.h"
+ 9752              		.file 10 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+
GAS LISTING /tmp/ccPaCTqg.s 			page 318
+
+
+ 9753              		.section	.debug_info
+ 9754 0000 A48F0000 		.long	0x8fa4
+ 9755 0004 0200     		.value	0x2
+ 9756 0006 00000000 		.long	.Ldebug_abbrev0
+ 9757 000a 08       		.byte	0x8
+ 9758 000b 01       		.uleb128 0x1
+ 9759 000c 00000000 		.long	.LASF399
+ 9760 0010 01       		.byte	0x1
+ 9761 0011 00000000 		.long	.LASF400
+ 9762 0015 00000000 		.long	.LASF401
+ 9763 0019 00000000 		.quad	.Ltext0
+ 9763      00000000 
+ 9764 0021 00000000 		.quad	.Letext0
+ 9764      00000000 
+ 9765 0029 00000000 		.long	.Ldebug_line0
+ 9766 002d 02       		.uleb128 0x2
+ 9767 002e 01       		.byte	0x1
+ 9768 002f 06       		.byte	0x6
+ 9769 0030 00000000 		.long	.LASF0
+ 9770 0034 02       		.uleb128 0x2
+ 9771 0035 02       		.byte	0x2
+ 9772 0036 05       		.byte	0x5
+ 9773 0037 00000000 		.long	.LASF1
+ 9774 003b 03       		.uleb128 0x3
+ 9775 003c 00000000 		.long	.LASF3
+ 9776 0040 04       		.byte	0x4
+ 9777 0041 27       		.byte	0x27
+ 9778 0042 46000000 		.long	0x46
+ 9779 0046 04       		.uleb128 0x4
+ 9780 0047 04       		.byte	0x4
+ 9781 0048 05       		.byte	0x5
+ 9782 0049 696E7400 		.string	"int"
+ 9783 004d 02       		.uleb128 0x2
+ 9784 004e 08       		.byte	0x8
+ 9785 004f 05       		.byte	0x5
+ 9786 0050 00000000 		.long	.LASF2
+ 9787 0054 03       		.uleb128 0x3
+ 9788 0055 00000000 		.long	.LASF4
+ 9789 0059 04       		.byte	0x4
+ 9790 005a 31       		.byte	0x31
+ 9791 005b 5F000000 		.long	0x5f
+ 9792 005f 02       		.uleb128 0x2
+ 9793 0060 01       		.byte	0x1
+ 9794 0061 08       		.byte	0x8
+ 9795 0062 00000000 		.long	.LASF5
+ 9796 0066 02       		.uleb128 0x2
+ 9797 0067 02       		.byte	0x2
+ 9798 0068 07       		.byte	0x7
+ 9799 0069 00000000 		.long	.LASF6
+ 9800 006d 03       		.uleb128 0x3
+ 9801 006e 00000000 		.long	.LASF7
+ 9802 0072 04       		.byte	0x4
+ 9803 0073 34       		.byte	0x34
+ 9804 0074 78000000 		.long	0x78
+ 9805 0078 02       		.uleb128 0x2
+ 9806 0079 04       		.byte	0x4
+ 9807 007a 07       		.byte	0x7
+
GAS LISTING /tmp/ccPaCTqg.s 			page 319
+
+
+ 9808 007b 00000000 		.long	.LASF8
+ 9809 007f 03       		.uleb128 0x3
+ 9810 0080 00000000 		.long	.LASF9
+ 9811 0084 04       		.byte	0x4
+ 9812 0085 38       		.byte	0x38
+ 9813 0086 8A000000 		.long	0x8a
+ 9814 008a 02       		.uleb128 0x2
+ 9815 008b 08       		.byte	0x8
+ 9816 008c 07       		.byte	0x7
+ 9817 008d 00000000 		.long	.LASF10
+ 9818 0091 03       		.uleb128 0x3
+ 9819 0092 00000000 		.long	.LASF11
+ 9820 0096 05       		.byte	0x5
+ 9821 0097 30       		.byte	0x30
+ 9822 0098 6D000000 		.long	0x6d
+ 9823 009c 05       		.uleb128 0x5
+ 9824 009d 08       		.byte	0x8
+ 9825 009e 07       		.byte	0x7
+ 9826 009f 02       		.uleb128 0x2
+ 9827 00a0 01       		.byte	0x1
+ 9828 00a1 06       		.byte	0x6
+ 9829 00a2 00000000 		.long	.LASF12
+ 9830 00a6 02       		.uleb128 0x2
+ 9831 00a7 08       		.byte	0x8
+ 9832 00a8 05       		.byte	0x5
+ 9833 00a9 00000000 		.long	.LASF13
+ 9834 00ad 02       		.uleb128 0x2
+ 9835 00ae 04       		.byte	0x4
+ 9836 00af 04       		.byte	0x4
+ 9837 00b0 00000000 		.long	.LASF14
+ 9838 00b4 06       		.uleb128 0x6
+ 9839 00b5 46000000 		.long	0x46
+ 9840 00b9 07       		.uleb128 0x7
+ 9841 00ba 08       		.byte	0x8
+ 9842 00bb BF000000 		.long	0xbf
+ 9843 00bf 06       		.uleb128 0x6
+ 9844 00c0 9F000000 		.long	0x9f
+ 9845 00c4 08       		.uleb128 0x8
+ 9846 00c5 08       		.byte	0x8
+ 9847 00c6 07       		.uleb128 0x7
+ 9848 00c7 08       		.byte	0x8
+ 9849 00c8 9F000000 		.long	0x9f
+ 9850 00cc 09       		.uleb128 0x9
+ 9851 00cd 9F000000 		.long	0x9f
+ 9852 00d1 DC000000 		.long	0xdc
+ 9853 00d5 0A       		.uleb128 0xa
+ 9854 00d6 9C000000 		.long	0x9c
+ 9855 00da 27       		.byte	0x27
+ 9856 00db 00       		.byte	0x0
+ 9857 00dc 02       		.uleb128 0x2
+ 9858 00dd 08       		.byte	0x8
+ 9859 00de 07       		.byte	0x7
+ 9860 00df 00000000 		.long	.LASF15
+ 9861 00e3 07       		.uleb128 0x7
+ 9862 00e4 08       		.byte	0x8
+ 9863 00e5 E9000000 		.long	0xe9
+ 9864 00e9 0B       		.uleb128 0xb
+
GAS LISTING /tmp/ccPaCTqg.s 			page 320
+
+
+ 9865 00ea 02       		.uleb128 0x2
+ 9866 00eb 08       		.byte	0x8
+ 9867 00ec 04       		.byte	0x4
+ 9868 00ed 00000000 		.long	.LASF16
+ 9869 00f1 0C       		.uleb128 0xc
+ 9870 00f2 01       		.byte	0x1
+ 9871 00f3 A6000000 		.long	0xa6
+ 9872 00f7 0C       		.uleb128 0xc
+ 9873 00f8 01       		.byte	0x1
+ 9874 00f9 EA000000 		.long	0xea
+ 9875 00fd 03       		.uleb128 0x3
+ 9876 00fe 00000000 		.long	.LASF17
+ 9877 0102 01       		.byte	0x1
+ 9878 0103 26       		.byte	0x26
+ 9879 0104 08010000 		.long	0x108
+ 9880 0108 0C       		.uleb128 0xc
+ 9881 0109 01       		.byte	0x1
+ 9882 010a 54000000 		.long	0x54
+ 9883 010e 0C       		.uleb128 0xc
+ 9884 010f 01       		.byte	0x1
+ 9885 0110 3B000000 		.long	0x3b
+ 9886 0114 0C       		.uleb128 0xc
+ 9887 0115 01       		.byte	0x1
+ 9888 0116 9F000000 		.long	0x9f
+ 9889 011a 0D       		.uleb128 0xd
+ 9890 011b 04       		.byte	0x4
+ 9891 011c 06       		.byte	0x6
+ 9892 011d D6       		.byte	0xd6
+ 9893 011e 9B010000 		.long	0x19b
+ 9894 0122 0E       		.uleb128 0xe
+ 9895 0123 00000000 		.long	.LASF18
+ 9896 0127 7F       		.sleb128 -1
+ 9897 0128 0E       		.uleb128 0xe
+ 9898 0129 00000000 		.long	.LASF19
+ 9899 012d 00       		.sleb128 0
+ 9900 012e 0E       		.uleb128 0xe
+ 9901 012f 00000000 		.long	.LASF20
+ 9902 0133 01       		.sleb128 1
+ 9903 0134 0E       		.uleb128 0xe
+ 9904 0135 00000000 		.long	.LASF21
+ 9905 0139 02       		.sleb128 2
+ 9906 013a 0E       		.uleb128 0xe
+ 9907 013b 00000000 		.long	.LASF22
+ 9908 013f 03       		.sleb128 3
+ 9909 0140 0E       		.uleb128 0xe
+ 9910 0141 00000000 		.long	.LASF23
+ 9911 0145 04       		.sleb128 4
+ 9912 0146 0E       		.uleb128 0xe
+ 9913 0147 00000000 		.long	.LASF24
+ 9914 014b 05       		.sleb128 5
+ 9915 014c 0E       		.uleb128 0xe
+ 9916 014d 00000000 		.long	.LASF25
+ 9917 0151 06       		.sleb128 6
+ 9918 0152 0E       		.uleb128 0xe
+ 9919 0153 00000000 		.long	.LASF26
+ 9920 0157 07       		.sleb128 7
+ 9921 0158 0E       		.uleb128 0xe
+
GAS LISTING /tmp/ccPaCTqg.s 			page 321
+
+
+ 9922 0159 00000000 		.long	.LASF27
+ 9923 015d 08       		.sleb128 8
+ 9924 015e 0E       		.uleb128 0xe
+ 9925 015f 00000000 		.long	.LASF28
+ 9926 0163 09       		.sleb128 9
+ 9927 0164 0E       		.uleb128 0xe
+ 9928 0165 00000000 		.long	.LASF29
+ 9929 0169 0A       		.sleb128 10
+ 9930 016a 0E       		.uleb128 0xe
+ 9931 016b 00000000 		.long	.LASF30
+ 9932 016f 0B       		.sleb128 11
+ 9933 0170 0E       		.uleb128 0xe
+ 9934 0171 00000000 		.long	.LASF31
+ 9935 0175 0C       		.sleb128 12
+ 9936 0176 0E       		.uleb128 0xe
+ 9937 0177 00000000 		.long	.LASF32
+ 9938 017b 0D       		.sleb128 13
+ 9939 017c 0E       		.uleb128 0xe
+ 9940 017d 00000000 		.long	.LASF33
+ 9941 0181 0E       		.sleb128 14
+ 9942 0182 0E       		.uleb128 0xe
+ 9943 0183 00000000 		.long	.LASF34
+ 9944 0187 0F       		.sleb128 15
+ 9945 0188 0E       		.uleb128 0xe
+ 9946 0189 00000000 		.long	.LASF35
+ 9947 018d 10       		.sleb128 16
+ 9948 018e 0E       		.uleb128 0xe
+ 9949 018f 00000000 		.long	.LASF36
+ 9950 0193 11       		.sleb128 17
+ 9951 0194 0E       		.uleb128 0xe
+ 9952 0195 00000000 		.long	.LASF37
+ 9953 0199 12       		.sleb128 18
+ 9954 019a 00       		.byte	0x0
+ 9955 019b 0F       		.uleb128 0xf
+ 9956 019c 04       		.byte	0x4
+ 9957 019d 06       		.byte	0x6
+ 9958 019e 6701     		.value	0x167
+ 9959 01a0 C9010000 		.long	0x1c9
+ 9960 01a4 0E       		.uleb128 0xe
+ 9961 01a5 00000000 		.long	.LASF38
+ 9962 01a9 00       		.sleb128 0
+ 9963 01aa 0E       		.uleb128 0xe
+ 9964 01ab 00000000 		.long	.LASF39
+ 9965 01af 01       		.sleb128 1
+ 9966 01b0 0E       		.uleb128 0xe
+ 9967 01b1 00000000 		.long	.LASF40
+ 9968 01b5 02       		.sleb128 2
+ 9969 01b6 0E       		.uleb128 0xe
+ 9970 01b7 00000000 		.long	.LASF41
+ 9971 01bb 03       		.sleb128 3
+ 9972 01bc 0E       		.uleb128 0xe
+ 9973 01bd 00000000 		.long	.LASF42
+ 9974 01c1 04       		.sleb128 4
+ 9975 01c2 0E       		.uleb128 0xe
+ 9976 01c3 00000000 		.long	.LASF43
+ 9977 01c7 05       		.sleb128 5
+ 9978 01c8 00       		.byte	0x0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 322
+
+
+ 9979 01c9 03       		.uleb128 0x3
+ 9980 01ca 00000000 		.long	.LASF44
+ 9981 01ce 07       		.byte	0x7
+ 9982 01cf 3B       		.byte	0x3b
+ 9983 01d0 FD000000 		.long	0xfd
+ 9984 01d4 03       		.uleb128 0x3
+ 9985 01d5 00000000 		.long	.LASF45
+ 9986 01d9 07       		.byte	0x7
+ 9987 01da 43       		.byte	0x43
+ 9988 01db DF010000 		.long	0x1df
+ 9989 01df 10       		.uleb128 0x10
+ 9990 01e0 00000000 		.long	.LASF45
+ 9991 01e4 08       		.byte	0x8
+ 9992 01e5 07       		.byte	0x7
+ 9993 01e6 43       		.byte	0x43
+ 9994 01e7 08020000 		.long	0x208
+ 9995 01eb 11       		.uleb128 0x11
+ 9996 01ec 6D616A00 		.string	"maj"
+ 9997 01f0 07       		.byte	0x7
+ 9998 01f1 46       		.byte	0x46
+ 9999 01f2 6D000000 		.long	0x6d
+ 10000 01f6 02       		.byte	0x2
+ 10001 01f7 23       		.byte	0x23
+ 10002 01f8 00       		.uleb128 0x0
+ 10003 01f9 11       		.uleb128 0x11
+ 10004 01fa 6D696E00 		.string	"min"
+ 10005 01fe 07       		.byte	0x7
+ 10006 01ff 47       		.byte	0x47
+ 10007 0200 6D000000 		.long	0x6d
+ 10008 0204 02       		.byte	0x2
+ 10009 0205 23       		.byte	0x23
+ 10010 0206 04       		.uleb128 0x4
+ 10011 0207 00       		.byte	0x0
+ 10012 0208 03       		.uleb128 0x3
+ 10013 0209 00000000 		.long	.LASF46
+ 10014 020d 07       		.byte	0x7
+ 10015 020e 52       		.byte	0x52
+ 10016 020f 13020000 		.long	0x213
+ 10017 0213 10       		.uleb128 0x10
+ 10018 0214 00000000 		.long	.LASF46
+ 10019 0218 40       		.byte	0x40
+ 10020 0219 07       		.byte	0x7
+ 10021 021a 52       		.byte	0x52
+ 10022 021b 90020000 		.long	0x290
+ 10023 021f 12       		.uleb128 0x12
+ 10024 0220 00000000 		.long	.LASF47
+ 10025 0224 07       		.byte	0x7
+ 10026 0225 5E       		.byte	0x5e
+ 10027 0226 D4010000 		.long	0x1d4
+ 10028 022a 02       		.byte	0x2
+ 10029 022b 23       		.byte	0x23
+ 10030 022c 00       		.uleb128 0x0
+ 10031 022d 12       		.uleb128 0x12
+ 10032 022e 00000000 		.long	.LASF48
+ 10033 0232 07       		.byte	0x7
+ 10034 0233 63       		.byte	0x63
+ 10035 0234 D4020000 		.long	0x2d4
+
GAS LISTING /tmp/ccPaCTqg.s 			page 323
+
+
+ 10036 0238 02       		.byte	0x2
+ 10037 0239 23       		.byte	0x23
+ 10038 023a 08       		.uleb128 0x8
+ 10039 023b 12       		.uleb128 0x12
+ 10040 023c 00000000 		.long	.LASF49
+ 10041 0240 07       		.byte	0x7
+ 10042 0241 65       		.byte	0x65
+ 10043 0242 E5020000 		.long	0x2e5
+ 10044 0246 02       		.byte	0x2
+ 10045 0247 23       		.byte	0x23
+ 10046 0248 10       		.uleb128 0x10
+ 10047 0249 12       		.uleb128 0x12
+ 10048 024a 00000000 		.long	.LASF50
+ 10049 024e 07       		.byte	0x7
+ 10050 024f 67       		.byte	0x67
+ 10051 0250 E5020000 		.long	0x2e5
+ 10052 0254 02       		.byte	0x2
+ 10053 0255 23       		.byte	0x23
+ 10054 0256 18       		.uleb128 0x18
+ 10055 0257 12       		.uleb128 0x12
+ 10056 0258 00000000 		.long	.LASF51
+ 10057 025c 07       		.byte	0x7
+ 10058 025d 69       		.byte	0x69
+ 10059 025e 05030000 		.long	0x305
+ 10060 0262 02       		.byte	0x2
+ 10061 0263 23       		.byte	0x23
+ 10062 0264 20       		.uleb128 0x20
+ 10063 0265 12       		.uleb128 0x12
+ 10064 0266 00000000 		.long	.LASF52
+ 10065 026a 07       		.byte	0x7
+ 10066 026b 6D       		.byte	0x6d
+ 10067 026c 05030000 		.long	0x305
+ 10068 0270 02       		.byte	0x2
+ 10069 0271 23       		.byte	0x23
+ 10070 0272 28       		.uleb128 0x28
+ 10071 0273 12       		.uleb128 0x12
+ 10072 0274 00000000 		.long	.LASF53
+ 10073 0278 07       		.byte	0x7
+ 10074 0279 71       		.byte	0x71
+ 10075 027a 21030000 		.long	0x321
+ 10076 027e 02       		.byte	0x2
+ 10077 027f 23       		.byte	0x23
+ 10078 0280 30       		.uleb128 0x30
+ 10079 0281 12       		.uleb128 0x12
+ 10080 0282 00000000 		.long	.LASF54
+ 10081 0286 07       		.byte	0x7
+ 10082 0287 75       		.byte	0x75
+ 10083 0288 21030000 		.long	0x321
+ 10084 028c 02       		.byte	0x2
+ 10085 028d 23       		.byte	0x23
+ 10086 028e 38       		.uleb128 0x38
+ 10087 028f 00       		.byte	0x0
+ 10088 0290 03       		.uleb128 0x3
+ 10089 0291 00000000 		.long	.LASF55
+ 10090 0295 07       		.byte	0x7
+ 10091 0296 53       		.byte	0x53
+ 10092 0297 9B020000 		.long	0x29b
+
GAS LISTING /tmp/ccPaCTqg.s 			page 324
+
+
+ 10093 029b 13       		.uleb128 0x13
+ 10094 029c 00000000 		.long	.LASF55
+ 10095 02a0 40       		.byte	0x40
+ 10096 02a1 07       		.byte	0x7
+ 10097 02a2 53       		.byte	0x53
+ 10098 02a3 BD020000 		.long	0x2bd
+ 10099 02a7 14       		.uleb128 0x14
+ 10100 02a8 00000000 		.long	.LASF47
+ 10101 02ac 07       		.byte	0x7
+ 10102 02ad 7F       		.byte	0x7f
+ 10103 02ae D4010000 		.long	0x1d4
+ 10104 02b2 15       		.uleb128 0x15
+ 10105 02b3 763100   		.string	"v1"
+ 10106 02b6 07       		.byte	0x7
+ 10107 02b7 80       		.byte	0x80
+ 10108 02b8 08020000 		.long	0x208
+ 10109 02bc 00       		.byte	0x0
+ 10110 02bd 16       		.uleb128 0x16
+ 10111 02be 01       		.byte	0x1
+ 10112 02bf C9020000 		.long	0x2c9
+ 10113 02c3 17       		.uleb128 0x17
+ 10114 02c4 C9020000 		.long	0x2c9
+ 10115 02c8 00       		.byte	0x0
+ 10116 02c9 07       		.uleb128 0x7
+ 10117 02ca 08       		.byte	0x8
+ 10118 02cb CF020000 		.long	0x2cf
+ 10119 02cf 06       		.uleb128 0x6
+ 10120 02d0 90020000 		.long	0x290
+ 10121 02d4 07       		.uleb128 0x7
+ 10122 02d5 08       		.byte	0x8
+ 10123 02d6 BD020000 		.long	0x2bd
+ 10124 02da 18       		.uleb128 0x18
+ 10125 02db 6D000000 		.long	0x6d
+ 10126 02df E5020000 		.long	0x2e5
+ 10127 02e3 19       		.uleb128 0x19
+ 10128 02e4 00       		.byte	0x0
+ 10129 02e5 07       		.uleb128 0x7
+ 10130 02e6 08       		.byte	0x8
+ 10131 02e7 DA020000 		.long	0x2da
+ 10132 02eb 1A       		.uleb128 0x1a
+ 10133 02ec 01       		.byte	0x1
+ 10134 02ed 91000000 		.long	0x91
+ 10135 02f1 05030000 		.long	0x305
+ 10136 02f5 17       		.uleb128 0x17
+ 10137 02f6 C4000000 		.long	0xc4
+ 10138 02fa 17       		.uleb128 0x17
+ 10139 02fb B9000000 		.long	0xb9
+ 10140 02ff 17       		.uleb128 0x17
+ 10141 0300 6D000000 		.long	0x6d
+ 10142 0304 00       		.byte	0x0
+ 10143 0305 07       		.uleb128 0x7
+ 10144 0306 08       		.byte	0x8
+ 10145 0307 EB020000 		.long	0x2eb
+ 10146 030b 16       		.uleb128 0x16
+ 10147 030c 01       		.byte	0x1
+ 10148 030d 21030000 		.long	0x321
+ 10149 0311 17       		.uleb128 0x17
+
GAS LISTING /tmp/ccPaCTqg.s 			page 325
+
+
+ 10150 0312 B9000000 		.long	0xb9
+ 10151 0316 17       		.uleb128 0x17
+ 10152 0317 C6000000 		.long	0xc6
+ 10153 031b 17       		.uleb128 0x17
+ 10154 031c E3000000 		.long	0xe3
+ 10155 0320 00       		.byte	0x0
+ 10156 0321 07       		.uleb128 0x7
+ 10157 0322 08       		.byte	0x8
+ 10158 0323 0B030000 		.long	0x30b
+ 10159 0327 03       		.uleb128 0x3
+ 10160 0328 00000000 		.long	.LASF56
+ 10161 032c 07       		.byte	0x7
+ 10162 032d 84       		.byte	0x84
+ 10163 032e 32030000 		.long	0x332
+ 10164 0332 10       		.uleb128 0x10
+ 10165 0333 00000000 		.long	.LASF56
+ 10166 0337 40       		.byte	0x40
+ 10167 0338 07       		.byte	0x7
+ 10168 0339 84       		.byte	0x84
+ 10169 033a AF030000 		.long	0x3af
+ 10170 033e 12       		.uleb128 0x12
+ 10171 033f 00000000 		.long	.LASF47
+ 10172 0343 07       		.byte	0x7
+ 10173 0344 90       		.byte	0x90
+ 10174 0345 D4010000 		.long	0x1d4
+ 10175 0349 02       		.byte	0x2
+ 10176 034a 23       		.byte	0x23
+ 10177 034b 00       		.uleb128 0x0
+ 10178 034c 12       		.uleb128 0x12
+ 10179 034d 00000000 		.long	.LASF48
+ 10180 0351 07       		.byte	0x7
+ 10181 0352 95       		.byte	0x95
+ 10182 0353 F3030000 		.long	0x3f3
+ 10183 0357 02       		.byte	0x2
+ 10184 0358 23       		.byte	0x23
+ 10185 0359 08       		.uleb128 0x8
+ 10186 035a 12       		.uleb128 0x12
+ 10187 035b 00000000 		.long	.LASF49
+ 10188 035f 07       		.byte	0x7
+ 10189 0360 97       		.byte	0x97
+ 10190 0361 E5020000 		.long	0x2e5
+ 10191 0365 02       		.byte	0x2
+ 10192 0366 23       		.byte	0x23
+ 10193 0367 10       		.uleb128 0x10
+ 10194 0368 12       		.uleb128 0x12
+ 10195 0369 00000000 		.long	.LASF50
+ 10196 036d 07       		.byte	0x7
+ 10197 036e 99       		.byte	0x99
+ 10198 036f E5020000 		.long	0x2e5
+ 10199 0373 02       		.byte	0x2
+ 10200 0374 23       		.byte	0x23
+ 10201 0375 18       		.uleb128 0x18
+ 10202 0376 12       		.uleb128 0x12
+ 10203 0377 00000000 		.long	.LASF51
+ 10204 037b 07       		.byte	0x7
+ 10205 037c 9B       		.byte	0x9b
+ 10206 037d 05030000 		.long	0x305
+
GAS LISTING /tmp/ccPaCTqg.s 			page 326
+
+
+ 10207 0381 02       		.byte	0x2
+ 10208 0382 23       		.byte	0x23
+ 10209 0383 20       		.uleb128 0x20
+ 10210 0384 12       		.uleb128 0x12
+ 10211 0385 00000000 		.long	.LASF52
+ 10212 0389 07       		.byte	0x7
+ 10213 038a 9F       		.byte	0x9f
+ 10214 038b 05030000 		.long	0x305
+ 10215 038f 02       		.byte	0x2
+ 10216 0390 23       		.byte	0x23
+ 10217 0391 28       		.uleb128 0x28
+ 10218 0392 12       		.uleb128 0x12
+ 10219 0393 00000000 		.long	.LASF53
+ 10220 0397 07       		.byte	0x7
+ 10221 0398 A3       		.byte	0xa3
+ 10222 0399 0E040000 		.long	0x40e
+ 10223 039d 02       		.byte	0x2
+ 10224 039e 23       		.byte	0x23
+ 10225 039f 30       		.uleb128 0x30
+ 10226 03a0 12       		.uleb128 0x12
+ 10227 03a1 00000000 		.long	.LASF54
+ 10228 03a5 07       		.byte	0x7
+ 10229 03a6 A6       		.byte	0xa6
+ 10230 03a7 0E040000 		.long	0x40e
+ 10231 03ab 02       		.byte	0x2
+ 10232 03ac 23       		.byte	0x23
+ 10233 03ad 38       		.uleb128 0x38
+ 10234 03ae 00       		.byte	0x0
+ 10235 03af 03       		.uleb128 0x3
+ 10236 03b0 00000000 		.long	.LASF57
+ 10237 03b4 07       		.byte	0x7
+ 10238 03b5 85       		.byte	0x85
+ 10239 03b6 BA030000 		.long	0x3ba
+ 10240 03ba 13       		.uleb128 0x13
+ 10241 03bb 00000000 		.long	.LASF57
+ 10242 03bf 40       		.byte	0x40
+ 10243 03c0 07       		.byte	0x7
+ 10244 03c1 85       		.byte	0x85
+ 10245 03c2 DC030000 		.long	0x3dc
+ 10246 03c6 14       		.uleb128 0x14
+ 10247 03c7 00000000 		.long	.LASF47
+ 10248 03cb 07       		.byte	0x7
+ 10249 03cc AF       		.byte	0xaf
+ 10250 03cd D4010000 		.long	0x1d4
+ 10251 03d1 15       		.uleb128 0x15
+ 10252 03d2 763100   		.string	"v1"
+ 10253 03d5 07       		.byte	0x7
+ 10254 03d6 B0       		.byte	0xb0
+ 10255 03d7 27030000 		.long	0x327
+ 10256 03db 00       		.byte	0x0
+ 10257 03dc 16       		.uleb128 0x16
+ 10258 03dd 01       		.byte	0x1
+ 10259 03de E8030000 		.long	0x3e8
+ 10260 03e2 17       		.uleb128 0x17
+ 10261 03e3 E8030000 		.long	0x3e8
+ 10262 03e7 00       		.byte	0x0
+ 10263 03e8 07       		.uleb128 0x7
+
GAS LISTING /tmp/ccPaCTqg.s 			page 327
+
+
+ 10264 03e9 08       		.byte	0x8
+ 10265 03ea EE030000 		.long	0x3ee
+ 10266 03ee 06       		.uleb128 0x6
+ 10267 03ef AF030000 		.long	0x3af
+ 10268 03f3 07       		.uleb128 0x7
+ 10269 03f4 08       		.byte	0x8
+ 10270 03f5 DC030000 		.long	0x3dc
+ 10271 03f9 1A       		.uleb128 0x1a
+ 10272 03fa 01       		.byte	0x1
+ 10273 03fb C9010000 		.long	0x1c9
+ 10274 03ff 0E040000 		.long	0x40e
+ 10275 0403 17       		.uleb128 0x17
+ 10276 0404 C9010000 		.long	0x1c9
+ 10277 0408 17       		.uleb128 0x17
+ 10278 0409 E3000000 		.long	0xe3
+ 10279 040d 00       		.byte	0x0
+ 10280 040e 07       		.uleb128 0x7
+ 10281 040f 08       		.byte	0x8
+ 10282 0410 F9030000 		.long	0x3f9
+ 10283 0414 03       		.uleb128 0x3
+ 10284 0415 00000000 		.long	.LASF58
+ 10285 0419 08       		.byte	0x8
+ 10286 041a 9D       		.byte	0x9d
+ 10287 041b 54000000 		.long	0x54
+ 10288 041f 03       		.uleb128 0x3
+ 10289 0420 00000000 		.long	.LASF59
+ 10290 0424 08       		.byte	0x8
+ 10291 0425 9E       		.byte	0x9e
+ 10292 0426 6D000000 		.long	0x6d
+ 10293 042a 09       		.uleb128 0x9
+ 10294 042b 14040000 		.long	0x414
+ 10295 042f 3A040000 		.long	0x43a
+ 10296 0433 0A       		.uleb128 0xa
+ 10297 0434 9C000000 		.long	0x9c
+ 10298 0438 0F       		.byte	0xf
+ 10299 0439 00       		.byte	0x0
+ 10300 043a 03       		.uleb128 0x3
+ 10301 043b 00000000 		.long	.LASF60
+ 10302 043f 08       		.byte	0x8
+ 10303 0440 B0       		.byte	0xb0
+ 10304 0441 45040000 		.long	0x445
+ 10305 0445 1B       		.uleb128 0x1b
+ 10306 0446 00000000 		.long	.LASF60
+ 10307 044a 0001     		.value	0x100
+ 10308 044c 08       		.byte	0x8
+ 10309 044d B0       		.byte	0xb0
+ 10310 044e 70040000 		.long	0x470
+ 10311 0452 12       		.uleb128 0x12
+ 10312 0453 00000000 		.long	.LASF61
+ 10313 0457 08       		.byte	0x8
+ 10314 0458 B3       		.byte	0xb3
+ 10315 0459 70040000 		.long	0x470
+ 10316 045d 02       		.byte	0x2
+ 10317 045e 23       		.byte	0x23
+ 10318 045f 00       		.uleb128 0x0
+ 10319 0460 12       		.uleb128 0x12
+ 10320 0461 00000000 		.long	.LASF62
+
GAS LISTING /tmp/ccPaCTqg.s 			page 328
+
+
+ 10321 0465 08       		.byte	0x8
+ 10322 0466 B4       		.byte	0xb4
+ 10323 0467 6D000000 		.long	0x6d
+ 10324 046b 03       		.byte	0x3
+ 10325 046c 23       		.byte	0x23
+ 10326 046d F001     		.uleb128 0xf0
+ 10327 046f 00       		.byte	0x0
+ 10328 0470 09       		.uleb128 0x9
+ 10329 0471 C9010000 		.long	0x1c9
+ 10330 0475 80040000 		.long	0x480
+ 10331 0479 0A       		.uleb128 0xa
+ 10332 047a 9C000000 		.long	0x9c
+ 10333 047e 0E       		.byte	0xe
+ 10334 047f 00       		.byte	0x0
+ 10335 0480 1C       		.uleb128 0x1c
+ 10336 0481 10       		.byte	0x10
+ 10337 0482 08       		.byte	0x8
+ 10338 0483 C0       		.byte	0xc0
+ 10339 0484 C0040000 		.long	0x4c0
+ 10340 0488 14       		.uleb128 0x14
+ 10341 0489 00000000 		.long	.LASF63
+ 10342 048d 08       		.byte	0x8
+ 10343 048e C1       		.byte	0xc1
+ 10344 048f C9010000 		.long	0x1c9
+ 10345 0493 15       		.uleb128 0x15
+ 10346 0494 75363400 		.string	"u64"
+ 10347 0498 08       		.byte	0x8
+ 10348 0499 C2       		.byte	0xc2
+ 10349 049a C0040000 		.long	0x4c0
+ 10350 049e 14       		.uleb128 0x14
+ 10351 049f 00000000 		.long	.LASF64
+ 10352 04a3 08       		.byte	0x8
+ 10353 04a4 C3       		.byte	0xc3
+ 10354 04a5 D0040000 		.long	0x4d0
+ 10355 04a9 14       		.uleb128 0x14
+ 10356 04aa 00000000 		.long	.LASF65
+ 10357 04ae 08       		.byte	0x8
+ 10358 04af C4       		.byte	0xc4
+ 10359 04b0 2A040000 		.long	0x42a
+ 10360 04b4 14       		.uleb128 0x14
+ 10361 04b5 00000000 		.long	.LASF66
+ 10362 04b9 08       		.byte	0x8
+ 10363 04ba C5       		.byte	0xc5
+ 10364 04bb E0040000 		.long	0x4e0
+ 10365 04bf 00       		.byte	0x0
+ 10366 04c0 09       		.uleb128 0x9
+ 10367 04c1 7F000000 		.long	0x7f
+ 10368 04c5 D0040000 		.long	0x4d0
+ 10369 04c9 0A       		.uleb128 0xa
+ 10370 04ca 9C000000 		.long	0x9c
+ 10371 04ce 01       		.byte	0x1
+ 10372 04cf 00       		.byte	0x0
+ 10373 04d0 09       		.uleb128 0x9
+ 10374 04d1 1F040000 		.long	0x41f
+ 10375 04d5 E0040000 		.long	0x4e0
+ 10376 04d9 0A       		.uleb128 0xa
+ 10377 04da 9C000000 		.long	0x9c
+
GAS LISTING /tmp/ccPaCTqg.s 			page 329
+
+
+ 10378 04de 03       		.byte	0x3
+ 10379 04df 00       		.byte	0x0
+ 10380 04e0 09       		.uleb128 0x9
+ 10381 04e1 14040000 		.long	0x414
+ 10382 04e5 F6040000 		.long	0x4f6
+ 10383 04e9 0A       		.uleb128 0xa
+ 10384 04ea 9C000000 		.long	0x9c
+ 10385 04ee 03       		.byte	0x3
+ 10386 04ef 0A       		.uleb128 0xa
+ 10387 04f0 9C000000 		.long	0x9c
+ 10388 04f4 03       		.byte	0x3
+ 10389 04f5 00       		.byte	0x0
+ 10390 04f6 03       		.uleb128 0x3
+ 10391 04f7 00000000 		.long	.LASF67
+ 10392 04fb 08       		.byte	0x8
+ 10393 04fc C6       		.byte	0xc6
+ 10394 04fd 80040000 		.long	0x480
+ 10395 0501 03       		.uleb128 0x3
+ 10396 0502 00000000 		.long	.LASF68
+ 10397 0506 09       		.byte	0x9
+ 10398 0507 40       		.byte	0x40
+ 10399 0508 0C050000 		.long	0x50c
+ 10400 050c 13       		.uleb128 0x13
+ 10401 050d 00000000 		.long	.LASF68
+ 10402 0511 40       		.byte	0x40
+ 10403 0512 09       		.byte	0x9
+ 10404 0513 40       		.byte	0x40
+ 10405 0514 2F050000 		.long	0x52f
+ 10406 0518 14       		.uleb128 0x14
+ 10407 0519 00000000 		.long	.LASF69
+ 10408 051d 09       		.byte	0x9
+ 10409 051e 43       		.byte	0x43
+ 10410 051f 90020000 		.long	0x290
+ 10411 0523 15       		.uleb128 0x15
+ 10412 0524 76656300 		.string	"vec"
+ 10413 0528 09       		.byte	0x9
+ 10414 0529 44       		.byte	0x44
+ 10415 052a AF030000 		.long	0x3af
+ 10416 052e 00       		.byte	0x0
+ 10417 052f 1D       		.uleb128 0x1d
+ 10418 0530 00000000 		.long	.LASF92
+ 10419 0534 04       		.byte	0x4
+ 10420 0535 0A       		.byte	0xa
+ 10421 0536 5A       		.byte	0x5a
+ 10422 0537 C0050000 		.long	0x5c0
+ 10423 053b 0E       		.uleb128 0xe
+ 10424 053c 00000000 		.long	.LASF70
+ 10425 0540 00       		.sleb128 0
+ 10426 0541 0E       		.uleb128 0xe
+ 10427 0542 00000000 		.long	.LASF71
+ 10428 0546 01       		.sleb128 1
+ 10429 0547 0E       		.uleb128 0xe
+ 10430 0548 00000000 		.long	.LASF72
+ 10431 054c 02       		.sleb128 2
+ 10432 054d 0E       		.uleb128 0xe
+ 10433 054e 00000000 		.long	.LASF73
+ 10434 0552 03       		.sleb128 3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 330
+
+
+ 10435 0553 0E       		.uleb128 0xe
+ 10436 0554 00000000 		.long	.LASF74
+ 10437 0558 04       		.sleb128 4
+ 10438 0559 0E       		.uleb128 0xe
+ 10439 055a 00000000 		.long	.LASF75
+ 10440 055e 05       		.sleb128 5
+ 10441 055f 0E       		.uleb128 0xe
+ 10442 0560 00000000 		.long	.LASF76
+ 10443 0564 06       		.sleb128 6
+ 10444 0565 0E       		.uleb128 0xe
+ 10445 0566 00000000 		.long	.LASF77
+ 10446 056a 07       		.sleb128 7
+ 10447 056b 0E       		.uleb128 0xe
+ 10448 056c 00000000 		.long	.LASF78
+ 10449 0570 08       		.sleb128 8
+ 10450 0571 0E       		.uleb128 0xe
+ 10451 0572 00000000 		.long	.LASF79
+ 10452 0576 09       		.sleb128 9
+ 10453 0577 0E       		.uleb128 0xe
+ 10454 0578 00000000 		.long	.LASF80
+ 10455 057c 0A       		.sleb128 10
+ 10456 057d 0E       		.uleb128 0xe
+ 10457 057e 00000000 		.long	.LASF81
+ 10458 0582 0B       		.sleb128 11
+ 10459 0583 0E       		.uleb128 0xe
+ 10460 0584 00000000 		.long	.LASF82
+ 10461 0588 0C       		.sleb128 12
+ 10462 0589 0E       		.uleb128 0xe
+ 10463 058a 00000000 		.long	.LASF83
+ 10464 058e 0D       		.sleb128 13
+ 10465 058f 0E       		.uleb128 0xe
+ 10466 0590 00000000 		.long	.LASF84
+ 10467 0594 0E       		.sleb128 14
+ 10468 0595 0E       		.uleb128 0xe
+ 10469 0596 00000000 		.long	.LASF85
+ 10470 059a 0E       		.sleb128 14
+ 10471 059b 0E       		.uleb128 0xe
+ 10472 059c 00000000 		.long	.LASF86
+ 10473 05a0 0F       		.sleb128 15
+ 10474 05a1 0E       		.uleb128 0xe
+ 10475 05a2 00000000 		.long	.LASF87
+ 10476 05a6 10       		.sleb128 16
+ 10477 05a7 0E       		.uleb128 0xe
+ 10478 05a8 00000000 		.long	.LASF88
+ 10479 05ac 11       		.sleb128 17
+ 10480 05ad 0E       		.uleb128 0xe
+ 10481 05ae 00000000 		.long	.LASF89
+ 10482 05b2 12       		.sleb128 18
+ 10483 05b3 0E       		.uleb128 0xe
+ 10484 05b4 00000000 		.long	.LASF90
+ 10485 05b8 13       		.sleb128 19
+ 10486 05b9 0E       		.uleb128 0xe
+ 10487 05ba 00000000 		.long	.LASF91
+ 10488 05be 14       		.sleb128 20
+ 10489 05bf 00       		.byte	0x0
+ 10490 05c0 1D       		.uleb128 0x1d
+ 10491 05c1 00000000 		.long	.LASF93
+
GAS LISTING /tmp/ccPaCTqg.s 			page 331
+
+
+ 10492 05c5 04       		.byte	0x4
+ 10493 05c6 0A       		.byte	0xa
+ 10494 05c7 77       		.byte	0x77
+ 10495 05c8 47070000 		.long	0x747
+ 10496 05cc 0E       		.uleb128 0xe
+ 10497 05cd 00000000 		.long	.LASF94
+ 10498 05d1 00       		.sleb128 0
+ 10499 05d2 0E       		.uleb128 0xe
+ 10500 05d3 00000000 		.long	.LASF95
+ 10501 05d7 01       		.sleb128 1
+ 10502 05d8 0E       		.uleb128 0xe
+ 10503 05d9 00000000 		.long	.LASF96
+ 10504 05dd 02       		.sleb128 2
+ 10505 05de 0E       		.uleb128 0xe
+ 10506 05df 00000000 		.long	.LASF97
+ 10507 05e3 03       		.sleb128 3
+ 10508 05e4 0E       		.uleb128 0xe
+ 10509 05e5 00000000 		.long	.LASF98
+ 10510 05e9 04       		.sleb128 4
+ 10511 05ea 0E       		.uleb128 0xe
+ 10512 05eb 00000000 		.long	.LASF99
+ 10513 05ef 05       		.sleb128 5
+ 10514 05f0 0E       		.uleb128 0xe
+ 10515 05f1 00000000 		.long	.LASF100
+ 10516 05f5 06       		.sleb128 6
+ 10517 05f6 0E       		.uleb128 0xe
+ 10518 05f7 00000000 		.long	.LASF101
+ 10519 05fb 07       		.sleb128 7
+ 10520 05fc 0E       		.uleb128 0xe
+ 10521 05fd 00000000 		.long	.LASF102
+ 10522 0601 08       		.sleb128 8
+ 10523 0602 0E       		.uleb128 0xe
+ 10524 0603 00000000 		.long	.LASF103
+ 10525 0607 09       		.sleb128 9
+ 10526 0608 0E       		.uleb128 0xe
+ 10527 0609 00000000 		.long	.LASF104
+ 10528 060d 0A       		.sleb128 10
+ 10529 060e 0E       		.uleb128 0xe
+ 10530 060f 00000000 		.long	.LASF105
+ 10531 0613 0B       		.sleb128 11
+ 10532 0614 0E       		.uleb128 0xe
+ 10533 0615 00000000 		.long	.LASF106
+ 10534 0619 0C       		.sleb128 12
+ 10535 061a 0E       		.uleb128 0xe
+ 10536 061b 00000000 		.long	.LASF107
+ 10537 061f 0D       		.sleb128 13
+ 10538 0620 0E       		.uleb128 0xe
+ 10539 0621 00000000 		.long	.LASF108
+ 10540 0625 0E       		.sleb128 14
+ 10541 0626 0E       		.uleb128 0xe
+ 10542 0627 00000000 		.long	.LASF109
+ 10543 062b 0F       		.sleb128 15
+ 10544 062c 0E       		.uleb128 0xe
+ 10545 062d 00000000 		.long	.LASF110
+ 10546 0631 10       		.sleb128 16
+ 10547 0632 0E       		.uleb128 0xe
+ 10548 0633 00000000 		.long	.LASF111
+
GAS LISTING /tmp/ccPaCTqg.s 			page 332
+
+
+ 10549 0637 11       		.sleb128 17
+ 10550 0638 0E       		.uleb128 0xe
+ 10551 0639 00000000 		.long	.LASF112
+ 10552 063d 12       		.sleb128 18
+ 10553 063e 0E       		.uleb128 0xe
+ 10554 063f 00000000 		.long	.LASF113
+ 10555 0643 13       		.sleb128 19
+ 10556 0644 0E       		.uleb128 0xe
+ 10557 0645 00000000 		.long	.LASF114
+ 10558 0649 14       		.sleb128 20
+ 10559 064a 0E       		.uleb128 0xe
+ 10560 064b 00000000 		.long	.LASF115
+ 10561 064f 15       		.sleb128 21
+ 10562 0650 0E       		.uleb128 0xe
+ 10563 0651 00000000 		.long	.LASF116
+ 10564 0655 16       		.sleb128 22
+ 10565 0656 0E       		.uleb128 0xe
+ 10566 0657 00000000 		.long	.LASF117
+ 10567 065b 17       		.sleb128 23
+ 10568 065c 0E       		.uleb128 0xe
+ 10569 065d 00000000 		.long	.LASF118
+ 10570 0661 18       		.sleb128 24
+ 10571 0662 0E       		.uleb128 0xe
+ 10572 0663 00000000 		.long	.LASF119
+ 10573 0667 19       		.sleb128 25
+ 10574 0668 0E       		.uleb128 0xe
+ 10575 0669 00000000 		.long	.LASF120
+ 10576 066d 1A       		.sleb128 26
+ 10577 066e 0E       		.uleb128 0xe
+ 10578 066f 00000000 		.long	.LASF121
+ 10579 0673 1B       		.sleb128 27
+ 10580 0674 0E       		.uleb128 0xe
+ 10581 0675 00000000 		.long	.LASF122
+ 10582 0679 1C       		.sleb128 28
+ 10583 067a 0E       		.uleb128 0xe
+ 10584 067b 00000000 		.long	.LASF123
+ 10585 067f 1D       		.sleb128 29
+ 10586 0680 0E       		.uleb128 0xe
+ 10587 0681 00000000 		.long	.LASF124
+ 10588 0685 1E       		.sleb128 30
+ 10589 0686 0E       		.uleb128 0xe
+ 10590 0687 00000000 		.long	.LASF125
+ 10591 068b 1F       		.sleb128 31
+ 10592 068c 0E       		.uleb128 0xe
+ 10593 068d 00000000 		.long	.LASF126
+ 10594 0691 20       		.sleb128 32
+ 10595 0692 0E       		.uleb128 0xe
+ 10596 0693 00000000 		.long	.LASF127
+ 10597 0697 21       		.sleb128 33
+ 10598 0698 0E       		.uleb128 0xe
+ 10599 0699 00000000 		.long	.LASF128
+ 10600 069d 22       		.sleb128 34
+ 10601 069e 0E       		.uleb128 0xe
+ 10602 069f 00000000 		.long	.LASF129
+ 10603 06a3 23       		.sleb128 35
+ 10604 06a4 0E       		.uleb128 0xe
+ 10605 06a5 00000000 		.long	.LASF130
+
GAS LISTING /tmp/ccPaCTqg.s 			page 333
+
+
+ 10606 06a9 24       		.sleb128 36
+ 10607 06aa 0E       		.uleb128 0xe
+ 10608 06ab 00000000 		.long	.LASF131
+ 10609 06af 25       		.sleb128 37
+ 10610 06b0 0E       		.uleb128 0xe
+ 10611 06b1 00000000 		.long	.LASF132
+ 10612 06b5 26       		.sleb128 38
+ 10613 06b6 0E       		.uleb128 0xe
+ 10614 06b7 00000000 		.long	.LASF133
+ 10615 06bb 27       		.sleb128 39
+ 10616 06bc 0E       		.uleb128 0xe
+ 10617 06bd 00000000 		.long	.LASF134
+ 10618 06c1 28       		.sleb128 40
+ 10619 06c2 0E       		.uleb128 0xe
+ 10620 06c3 00000000 		.long	.LASF135
+ 10621 06c7 29       		.sleb128 41
+ 10622 06c8 0E       		.uleb128 0xe
+ 10623 06c9 00000000 		.long	.LASF136
+ 10624 06cd 2A       		.sleb128 42
+ 10625 06ce 0E       		.uleb128 0xe
+ 10626 06cf 00000000 		.long	.LASF137
+ 10627 06d3 2B       		.sleb128 43
+ 10628 06d4 0E       		.uleb128 0xe
+ 10629 06d5 00000000 		.long	.LASF138
+ 10630 06d9 2C       		.sleb128 44
+ 10631 06da 0E       		.uleb128 0xe
+ 10632 06db 00000000 		.long	.LASF139
+ 10633 06df 2D       		.sleb128 45
+ 10634 06e0 0E       		.uleb128 0xe
+ 10635 06e1 00000000 		.long	.LASF140
+ 10636 06e5 2E       		.sleb128 46
+ 10637 06e6 0E       		.uleb128 0xe
+ 10638 06e7 00000000 		.long	.LASF141
+ 10639 06eb 2F       		.sleb128 47
+ 10640 06ec 0E       		.uleb128 0xe
+ 10641 06ed 00000000 		.long	.LASF142
+ 10642 06f1 30       		.sleb128 48
+ 10643 06f2 0E       		.uleb128 0xe
+ 10644 06f3 00000000 		.long	.LASF143
+ 10645 06f7 31       		.sleb128 49
+ 10646 06f8 0E       		.uleb128 0xe
+ 10647 06f9 00000000 		.long	.LASF144
+ 10648 06fd 32       		.sleb128 50
+ 10649 06fe 0E       		.uleb128 0xe
+ 10650 06ff 00000000 		.long	.LASF145
+ 10651 0703 33       		.sleb128 51
+ 10652 0704 0E       		.uleb128 0xe
+ 10653 0705 00000000 		.long	.LASF146
+ 10654 0709 34       		.sleb128 52
+ 10655 070a 0E       		.uleb128 0xe
+ 10656 070b 00000000 		.long	.LASF147
+ 10657 070f 35       		.sleb128 53
+ 10658 0710 0E       		.uleb128 0xe
+ 10659 0711 00000000 		.long	.LASF148
+ 10660 0715 36       		.sleb128 54
+ 10661 0716 0E       		.uleb128 0xe
+ 10662 0717 00000000 		.long	.LASF149
+
GAS LISTING /tmp/ccPaCTqg.s 			page 334
+
+
+ 10663 071b 36       		.sleb128 54
+ 10664 071c 0E       		.uleb128 0xe
+ 10665 071d 00000000 		.long	.LASF150
+ 10666 0721 37       		.sleb128 55
+ 10667 0722 0E       		.uleb128 0xe
+ 10668 0723 00000000 		.long	.LASF151
+ 10669 0727 38       		.sleb128 56
+ 10670 0728 0E       		.uleb128 0xe
+ 10671 0729 00000000 		.long	.LASF152
+ 10672 072d 39       		.sleb128 57
+ 10673 072e 0E       		.uleb128 0xe
+ 10674 072f 00000000 		.long	.LASF153
+ 10675 0733 3A       		.sleb128 58
+ 10676 0734 0E       		.uleb128 0xe
+ 10677 0735 00000000 		.long	.LASF154
+ 10678 0739 3B       		.sleb128 59
+ 10679 073a 0E       		.uleb128 0xe
+ 10680 073b 00000000 		.long	.LASF155
+ 10681 073f 3C       		.sleb128 60
+ 10682 0740 0E       		.uleb128 0xe
+ 10683 0741 00000000 		.long	.LASF156
+ 10684 0745 3D       		.sleb128 61
+ 10685 0746 00       		.byte	0x0
+ 10686 0747 1D       		.uleb128 0x1d
+ 10687 0748 00000000 		.long	.LASF157
+ 10688 074c 04       		.byte	0x4
+ 10689 074d 0A       		.byte	0xa
+ 10690 074e BD       		.byte	0xbd
+ 10691 074f FD080000 		.long	0x8fd
+ 10692 0753 0E       		.uleb128 0xe
+ 10693 0754 00000000 		.long	.LASF158
+ 10694 0758 00       		.sleb128 0
+ 10695 0759 0E       		.uleb128 0xe
+ 10696 075a 00000000 		.long	.LASF159
+ 10697 075e 01       		.sleb128 1
+ 10698 075f 0E       		.uleb128 0xe
+ 10699 0760 00000000 		.long	.LASF160
+ 10700 0764 02       		.sleb128 2
+ 10701 0765 0E       		.uleb128 0xe
+ 10702 0766 00000000 		.long	.LASF161
+ 10703 076a 03       		.sleb128 3
+ 10704 076b 0E       		.uleb128 0xe
+ 10705 076c 00000000 		.long	.LASF162
+ 10706 0770 04       		.sleb128 4
+ 10707 0771 0E       		.uleb128 0xe
+ 10708 0772 00000000 		.long	.LASF163
+ 10709 0776 05       		.sleb128 5
+ 10710 0777 0E       		.uleb128 0xe
+ 10711 0778 00000000 		.long	.LASF164
+ 10712 077c 06       		.sleb128 6
+ 10713 077d 0E       		.uleb128 0xe
+ 10714 077e 00000000 		.long	.LASF165
+ 10715 0782 07       		.sleb128 7
+ 10716 0783 0E       		.uleb128 0xe
+ 10717 0784 00000000 		.long	.LASF166
+ 10718 0788 08       		.sleb128 8
+ 10719 0789 0E       		.uleb128 0xe
+
GAS LISTING /tmp/ccPaCTqg.s 			page 335
+
+
+ 10720 078a 00000000 		.long	.LASF167
+ 10721 078e 09       		.sleb128 9
+ 10722 078f 0E       		.uleb128 0xe
+ 10723 0790 00000000 		.long	.LASF168
+ 10724 0794 0A       		.sleb128 10
+ 10725 0795 0E       		.uleb128 0xe
+ 10726 0796 00000000 		.long	.LASF169
+ 10727 079a 0B       		.sleb128 11
+ 10728 079b 0E       		.uleb128 0xe
+ 10729 079c 00000000 		.long	.LASF170
+ 10730 07a0 0C       		.sleb128 12
+ 10731 07a1 0E       		.uleb128 0xe
+ 10732 07a2 00000000 		.long	.LASF171
+ 10733 07a6 0D       		.sleb128 13
+ 10734 07a7 0E       		.uleb128 0xe
+ 10735 07a8 00000000 		.long	.LASF172
+ 10736 07ac 0E       		.sleb128 14
+ 10737 07ad 0E       		.uleb128 0xe
+ 10738 07ae 00000000 		.long	.LASF173
+ 10739 07b2 0F       		.sleb128 15
+ 10740 07b3 0E       		.uleb128 0xe
+ 10741 07b4 00000000 		.long	.LASF174
+ 10742 07b8 10       		.sleb128 16
+ 10743 07b9 0E       		.uleb128 0xe
+ 10744 07ba 00000000 		.long	.LASF175
+ 10745 07be 11       		.sleb128 17
+ 10746 07bf 0E       		.uleb128 0xe
+ 10747 07c0 00000000 		.long	.LASF176
+ 10748 07c4 12       		.sleb128 18
+ 10749 07c5 0E       		.uleb128 0xe
+ 10750 07c6 00000000 		.long	.LASF177
+ 10751 07ca 13       		.sleb128 19
+ 10752 07cb 0E       		.uleb128 0xe
+ 10753 07cc 00000000 		.long	.LASF178
+ 10754 07d0 14       		.sleb128 20
+ 10755 07d1 0E       		.uleb128 0xe
+ 10756 07d2 00000000 		.long	.LASF179
+ 10757 07d6 15       		.sleb128 21
+ 10758 07d7 0E       		.uleb128 0xe
+ 10759 07d8 00000000 		.long	.LASF180
+ 10760 07dc 16       		.sleb128 22
+ 10761 07dd 0E       		.uleb128 0xe
+ 10762 07de 00000000 		.long	.LASF181
+ 10763 07e2 17       		.sleb128 23
+ 10764 07e3 0E       		.uleb128 0xe
+ 10765 07e4 00000000 		.long	.LASF182
+ 10766 07e8 18       		.sleb128 24
+ 10767 07e9 0E       		.uleb128 0xe
+ 10768 07ea 00000000 		.long	.LASF183
+ 10769 07ee 19       		.sleb128 25
+ 10770 07ef 0E       		.uleb128 0xe
+ 10771 07f0 00000000 		.long	.LASF184
+ 10772 07f4 1A       		.sleb128 26
+ 10773 07f5 0E       		.uleb128 0xe
+ 10774 07f6 00000000 		.long	.LASF185
+ 10775 07fa 1B       		.sleb128 27
+ 10776 07fb 0E       		.uleb128 0xe
+
GAS LISTING /tmp/ccPaCTqg.s 			page 336
+
+
+ 10777 07fc 00000000 		.long	.LASF186
+ 10778 0800 1C       		.sleb128 28
+ 10779 0801 0E       		.uleb128 0xe
+ 10780 0802 00000000 		.long	.LASF187
+ 10781 0806 1D       		.sleb128 29
+ 10782 0807 0E       		.uleb128 0xe
+ 10783 0808 00000000 		.long	.LASF188
+ 10784 080c 1E       		.sleb128 30
+ 10785 080d 0E       		.uleb128 0xe
+ 10786 080e 00000000 		.long	.LASF189
+ 10787 0812 1F       		.sleb128 31
+ 10788 0813 0E       		.uleb128 0xe
+ 10789 0814 00000000 		.long	.LASF190
+ 10790 0818 20       		.sleb128 32
+ 10791 0819 0E       		.uleb128 0xe
+ 10792 081a 00000000 		.long	.LASF191
+ 10793 081e 21       		.sleb128 33
+ 10794 081f 0E       		.uleb128 0xe
+ 10795 0820 00000000 		.long	.LASF192
+ 10796 0824 22       		.sleb128 34
+ 10797 0825 0E       		.uleb128 0xe
+ 10798 0826 00000000 		.long	.LASF193
+ 10799 082a 23       		.sleb128 35
+ 10800 082b 0E       		.uleb128 0xe
+ 10801 082c 00000000 		.long	.LASF194
+ 10802 0830 24       		.sleb128 36
+ 10803 0831 0E       		.uleb128 0xe
+ 10804 0832 00000000 		.long	.LASF195
+ 10805 0836 25       		.sleb128 37
+ 10806 0837 0E       		.uleb128 0xe
+ 10807 0838 00000000 		.long	.LASF196
+ 10808 083c 26       		.sleb128 38
+ 10809 083d 0E       		.uleb128 0xe
+ 10810 083e 00000000 		.long	.LASF197
+ 10811 0842 27       		.sleb128 39
+ 10812 0843 0E       		.uleb128 0xe
+ 10813 0844 00000000 		.long	.LASF198
+ 10814 0848 28       		.sleb128 40
+ 10815 0849 0E       		.uleb128 0xe
+ 10816 084a 00000000 		.long	.LASF199
+ 10817 084e 29       		.sleb128 41
+ 10818 084f 0E       		.uleb128 0xe
+ 10819 0850 00000000 		.long	.LASF200
+ 10820 0854 2A       		.sleb128 42
+ 10821 0855 0E       		.uleb128 0xe
+ 10822 0856 00000000 		.long	.LASF201
+ 10823 085a 2B       		.sleb128 43
+ 10824 085b 0E       		.uleb128 0xe
+ 10825 085c 00000000 		.long	.LASF202
+ 10826 0860 2C       		.sleb128 44
+ 10827 0861 0E       		.uleb128 0xe
+ 10828 0862 00000000 		.long	.LASF203
+ 10829 0866 2D       		.sleb128 45
+ 10830 0867 0E       		.uleb128 0xe
+ 10831 0868 00000000 		.long	.LASF204
+ 10832 086c 2E       		.sleb128 46
+ 10833 086d 0E       		.uleb128 0xe
+
GAS LISTING /tmp/ccPaCTqg.s 			page 337
+
+
+ 10834 086e 00000000 		.long	.LASF205
+ 10835 0872 2F       		.sleb128 47
+ 10836 0873 0E       		.uleb128 0xe
+ 10837 0874 00000000 		.long	.LASF206
+ 10838 0878 30       		.sleb128 48
+ 10839 0879 0E       		.uleb128 0xe
+ 10840 087a 00000000 		.long	.LASF207
+ 10841 087e 31       		.sleb128 49
+ 10842 087f 0E       		.uleb128 0xe
+ 10843 0880 00000000 		.long	.LASF208
+ 10844 0884 32       		.sleb128 50
+ 10845 0885 0E       		.uleb128 0xe
+ 10846 0886 00000000 		.long	.LASF209
+ 10847 088a 33       		.sleb128 51
+ 10848 088b 0E       		.uleb128 0xe
+ 10849 088c 00000000 		.long	.LASF210
+ 10850 0890 34       		.sleb128 52
+ 10851 0891 0E       		.uleb128 0xe
+ 10852 0892 00000000 		.long	.LASF211
+ 10853 0896 35       		.sleb128 53
+ 10854 0897 0E       		.uleb128 0xe
+ 10855 0898 00000000 		.long	.LASF212
+ 10856 089c 36       		.sleb128 54
+ 10857 089d 0E       		.uleb128 0xe
+ 10858 089e 00000000 		.long	.LASF213
+ 10859 08a2 37       		.sleb128 55
+ 10860 08a3 0E       		.uleb128 0xe
+ 10861 08a4 00000000 		.long	.LASF214
+ 10862 08a8 38       		.sleb128 56
+ 10863 08a9 0E       		.uleb128 0xe
+ 10864 08aa 00000000 		.long	.LASF215
+ 10865 08ae 39       		.sleb128 57
+ 10866 08af 0E       		.uleb128 0xe
+ 10867 08b0 00000000 		.long	.LASF216
+ 10868 08b4 3A       		.sleb128 58
+ 10869 08b5 0E       		.uleb128 0xe
+ 10870 08b6 00000000 		.long	.LASF217
+ 10871 08ba 3A       		.sleb128 58
+ 10872 08bb 0E       		.uleb128 0xe
+ 10873 08bc 00000000 		.long	.LASF218
+ 10874 08c0 3B       		.sleb128 59
+ 10875 08c1 0E       		.uleb128 0xe
+ 10876 08c2 00000000 		.long	.LASF219
+ 10877 08c6 3C       		.sleb128 60
+ 10878 08c7 0E       		.uleb128 0xe
+ 10879 08c8 00000000 		.long	.LASF220
+ 10880 08cc 3D       		.sleb128 61
+ 10881 08cd 0E       		.uleb128 0xe
+ 10882 08ce 00000000 		.long	.LASF221
+ 10883 08d2 3E       		.sleb128 62
+ 10884 08d3 0E       		.uleb128 0xe
+ 10885 08d4 00000000 		.long	.LASF222
+ 10886 08d8 3F       		.sleb128 63
+ 10887 08d9 0E       		.uleb128 0xe
+ 10888 08da 00000000 		.long	.LASF223
+ 10889 08de C000     		.sleb128 64
+ 10890 08e0 0E       		.uleb128 0xe
+
GAS LISTING /tmp/ccPaCTqg.s 			page 338
+
+
+ 10891 08e1 00000000 		.long	.LASF224
+ 10892 08e5 C100     		.sleb128 65
+ 10893 08e7 0E       		.uleb128 0xe
+ 10894 08e8 00000000 		.long	.LASF225
+ 10895 08ec C200     		.sleb128 66
+ 10896 08ee 0E       		.uleb128 0xe
+ 10897 08ef 00000000 		.long	.LASF226
+ 10898 08f3 C300     		.sleb128 67
+ 10899 08f5 0E       		.uleb128 0xe
+ 10900 08f6 00000000 		.long	.LASF227
+ 10901 08fa C400     		.sleb128 68
+ 10902 08fc 00       		.byte	0x0
+ 10903 08fd 1E       		.uleb128 0x1e
+ 10904 08fe 00000000 		.long	.LASF228
+ 10905 0902 04       		.byte	0x4
+ 10906 0903 0A       		.byte	0xa
+ 10907 0904 0A01     		.value	0x10a
+ 10908 0906 FC090000 		.long	0x9fc
+ 10909 090a 0E       		.uleb128 0xe
+ 10910 090b 00000000 		.long	.LASF229
+ 10911 090f 00       		.sleb128 0
+ 10912 0910 0E       		.uleb128 0xe
+ 10913 0911 00000000 		.long	.LASF230
+ 10914 0915 3D       		.sleb128 61
+ 10915 0916 0E       		.uleb128 0xe
+ 10916 0917 00000000 		.long	.LASF231
+ 10917 091b 3E       		.sleb128 62
+ 10918 091c 0E       		.uleb128 0xe
+ 10919 091d 00000000 		.long	.LASF232
+ 10920 0921 3F       		.sleb128 63
+ 10921 0922 0E       		.uleb128 0xe
+ 10922 0923 00000000 		.long	.LASF233
+ 10923 0927 C000     		.sleb128 64
+ 10924 0929 0E       		.uleb128 0xe
+ 10925 092a 00000000 		.long	.LASF234
+ 10926 092e C100     		.sleb128 65
+ 10927 0930 0E       		.uleb128 0xe
+ 10928 0931 00000000 		.long	.LASF235
+ 10929 0935 C200     		.sleb128 66
+ 10930 0937 0E       		.uleb128 0xe
+ 10931 0938 00000000 		.long	.LASF236
+ 10932 093c C300     		.sleb128 67
+ 10933 093e 0E       		.uleb128 0xe
+ 10934 093f 00000000 		.long	.LASF237
+ 10935 0943 C400     		.sleb128 68
+ 10936 0945 0E       		.uleb128 0xe
+ 10937 0946 00000000 		.long	.LASF238
+ 10938 094a C500     		.sleb128 69
+ 10939 094c 0E       		.uleb128 0xe
+ 10940 094d 00000000 		.long	.LASF239
+ 10941 0951 C600     		.sleb128 70
+ 10942 0953 0E       		.uleb128 0xe
+ 10943 0954 00000000 		.long	.LASF240
+ 10944 0958 C700     		.sleb128 71
+ 10945 095a 0E       		.uleb128 0xe
+ 10946 095b 00000000 		.long	.LASF241
+ 10947 095f C800     		.sleb128 72
+
GAS LISTING /tmp/ccPaCTqg.s 			page 339
+
+
+ 10948 0961 0E       		.uleb128 0xe
+ 10949 0962 00000000 		.long	.LASF242
+ 10950 0966 C900     		.sleb128 73
+ 10951 0968 0E       		.uleb128 0xe
+ 10952 0969 00000000 		.long	.LASF243
+ 10953 096d CA00     		.sleb128 74
+ 10954 096f 0E       		.uleb128 0xe
+ 10955 0970 00000000 		.long	.LASF244
+ 10956 0974 CB00     		.sleb128 75
+ 10957 0976 0E       		.uleb128 0xe
+ 10958 0977 00000000 		.long	.LASF245
+ 10959 097b CC00     		.sleb128 76
+ 10960 097d 0E       		.uleb128 0xe
+ 10961 097e 00000000 		.long	.LASF246
+ 10962 0982 CD00     		.sleb128 77
+ 10963 0984 0E       		.uleb128 0xe
+ 10964 0985 00000000 		.long	.LASF247
+ 10965 0989 CE00     		.sleb128 78
+ 10966 098b 0E       		.uleb128 0xe
+ 10967 098c 00000000 		.long	.LASF248
+ 10968 0990 CF00     		.sleb128 79
+ 10969 0992 0E       		.uleb128 0xe
+ 10970 0993 00000000 		.long	.LASF249
+ 10971 0997 D000     		.sleb128 80
+ 10972 0999 0E       		.uleb128 0xe
+ 10973 099a 00000000 		.long	.LASF250
+ 10974 099e D100     		.sleb128 81
+ 10975 09a0 0E       		.uleb128 0xe
+ 10976 09a1 00000000 		.long	.LASF251
+ 10977 09a5 D100     		.sleb128 81
+ 10978 09a7 0E       		.uleb128 0xe
+ 10979 09a8 00000000 		.long	.LASF252
+ 10980 09ac D200     		.sleb128 82
+ 10981 09ae 0E       		.uleb128 0xe
+ 10982 09af 00000000 		.long	.LASF253
+ 10983 09b3 D300     		.sleb128 83
+ 10984 09b5 0E       		.uleb128 0xe
+ 10985 09b6 00000000 		.long	.LASF254
+ 10986 09ba D400     		.sleb128 84
+ 10987 09bc 0E       		.uleb128 0xe
+ 10988 09bd 00000000 		.long	.LASF255
+ 10989 09c1 D500     		.sleb128 85
+ 10990 09c3 0E       		.uleb128 0xe
+ 10991 09c4 00000000 		.long	.LASF256
+ 10992 09c8 D600     		.sleb128 86
+ 10993 09ca 0E       		.uleb128 0xe
+ 10994 09cb 00000000 		.long	.LASF257
+ 10995 09cf D700     		.sleb128 87
+ 10996 09d1 0E       		.uleb128 0xe
+ 10997 09d2 00000000 		.long	.LASF258
+ 10998 09d6 D800     		.sleb128 88
+ 10999 09d8 0E       		.uleb128 0xe
+ 11000 09d9 00000000 		.long	.LASF259
+ 11001 09dd D900     		.sleb128 89
+ 11002 09df 0E       		.uleb128 0xe
+ 11003 09e0 00000000 		.long	.LASF260
+ 11004 09e4 DA00     		.sleb128 90
+
GAS LISTING /tmp/ccPaCTqg.s 			page 340
+
+
+ 11005 09e6 0E       		.uleb128 0xe
+ 11006 09e7 00000000 		.long	.LASF261
+ 11007 09eb DB00     		.sleb128 91
+ 11008 09ed 0E       		.uleb128 0xe
+ 11009 09ee 00000000 		.long	.LASF262
+ 11010 09f2 DC00     		.sleb128 92
+ 11011 09f4 0E       		.uleb128 0xe
+ 11012 09f5 00000000 		.long	.LASF263
+ 11013 09f9 DD00     		.sleb128 93
+ 11014 09fb 00       		.byte	0x0
+ 11015 09fc 1E       		.uleb128 0x1e
+ 11016 09fd 00000000 		.long	.LASF264
+ 11017 0a01 04       		.byte	0x4
+ 11018 0a02 0A       		.byte	0xa
+ 11019 0a03 3401     		.value	0x134
+ 11020 0a05 3C0B0000 		.long	0xb3c
+ 11021 0a09 0E       		.uleb128 0xe
+ 11022 0a0a 00000000 		.long	.LASF265
+ 11023 0a0e 00       		.sleb128 0
+ 11024 0a0f 0E       		.uleb128 0xe
+ 11025 0a10 00000000 		.long	.LASF266
+ 11026 0a14 01       		.sleb128 1
+ 11027 0a15 0E       		.uleb128 0xe
+ 11028 0a16 00000000 		.long	.LASF267
+ 11029 0a1a 02       		.sleb128 2
+ 11030 0a1b 0E       		.uleb128 0xe
+ 11031 0a1c 00000000 		.long	.LASF268
+ 11032 0a20 03       		.sleb128 3
+ 11033 0a21 0E       		.uleb128 0xe
+ 11034 0a22 00000000 		.long	.LASF269
+ 11035 0a26 04       		.sleb128 4
+ 11036 0a27 0E       		.uleb128 0xe
+ 11037 0a28 00000000 		.long	.LASF270
+ 11038 0a2c 05       		.sleb128 5
+ 11039 0a2d 0E       		.uleb128 0xe
+ 11040 0a2e 00000000 		.long	.LASF271
+ 11041 0a32 06       		.sleb128 6
+ 11042 0a33 0E       		.uleb128 0xe
+ 11043 0a34 00000000 		.long	.LASF272
+ 11044 0a38 07       		.sleb128 7
+ 11045 0a39 0E       		.uleb128 0xe
+ 11046 0a3a 00000000 		.long	.LASF273
+ 11047 0a3e 08       		.sleb128 8
+ 11048 0a3f 0E       		.uleb128 0xe
+ 11049 0a40 00000000 		.long	.LASF274
+ 11050 0a44 09       		.sleb128 9
+ 11051 0a45 0E       		.uleb128 0xe
+ 11052 0a46 00000000 		.long	.LASF275
+ 11053 0a4a 0A       		.sleb128 10
+ 11054 0a4b 0E       		.uleb128 0xe
+ 11055 0a4c 00000000 		.long	.LASF276
+ 11056 0a50 0B       		.sleb128 11
+ 11057 0a51 0E       		.uleb128 0xe
+ 11058 0a52 00000000 		.long	.LASF277
+ 11059 0a56 0C       		.sleb128 12
+ 11060 0a57 0E       		.uleb128 0xe
+ 11061 0a58 00000000 		.long	.LASF278
+
GAS LISTING /tmp/ccPaCTqg.s 			page 341
+
+
+ 11062 0a5c 0D       		.sleb128 13
+ 11063 0a5d 0E       		.uleb128 0xe
+ 11064 0a5e 00000000 		.long	.LASF279
+ 11065 0a62 0E       		.sleb128 14
+ 11066 0a63 0E       		.uleb128 0xe
+ 11067 0a64 00000000 		.long	.LASF280
+ 11068 0a68 0F       		.sleb128 15
+ 11069 0a69 0E       		.uleb128 0xe
+ 11070 0a6a 00000000 		.long	.LASF281
+ 11071 0a6e 10       		.sleb128 16
+ 11072 0a6f 0E       		.uleb128 0xe
+ 11073 0a70 00000000 		.long	.LASF282
+ 11074 0a74 11       		.sleb128 17
+ 11075 0a75 0E       		.uleb128 0xe
+ 11076 0a76 00000000 		.long	.LASF283
+ 11077 0a7a 12       		.sleb128 18
+ 11078 0a7b 0E       		.uleb128 0xe
+ 11079 0a7c 00000000 		.long	.LASF284
+ 11080 0a80 13       		.sleb128 19
+ 11081 0a81 0E       		.uleb128 0xe
+ 11082 0a82 00000000 		.long	.LASF285
+ 11083 0a86 14       		.sleb128 20
+ 11084 0a87 0E       		.uleb128 0xe
+ 11085 0a88 00000000 		.long	.LASF286
+ 11086 0a8c 15       		.sleb128 21
+ 11087 0a8d 0E       		.uleb128 0xe
+ 11088 0a8e 00000000 		.long	.LASF287
+ 11089 0a92 16       		.sleb128 22
+ 11090 0a93 0E       		.uleb128 0xe
+ 11091 0a94 00000000 		.long	.LASF288
+ 11092 0a98 17       		.sleb128 23
+ 11093 0a99 0E       		.uleb128 0xe
+ 11094 0a9a 00000000 		.long	.LASF289
+ 11095 0a9e 18       		.sleb128 24
+ 11096 0a9f 0E       		.uleb128 0xe
+ 11097 0aa0 00000000 		.long	.LASF290
+ 11098 0aa4 19       		.sleb128 25
+ 11099 0aa5 0E       		.uleb128 0xe
+ 11100 0aa6 00000000 		.long	.LASF291
+ 11101 0aaa 1A       		.sleb128 26
+ 11102 0aab 0E       		.uleb128 0xe
+ 11103 0aac 00000000 		.long	.LASF292
+ 11104 0ab0 1B       		.sleb128 27
+ 11105 0ab1 0E       		.uleb128 0xe
+ 11106 0ab2 00000000 		.long	.LASF293
+ 11107 0ab6 1C       		.sleb128 28
+ 11108 0ab7 0E       		.uleb128 0xe
+ 11109 0ab8 00000000 		.long	.LASF294
+ 11110 0abc 1D       		.sleb128 29
+ 11111 0abd 0E       		.uleb128 0xe
+ 11112 0abe 00000000 		.long	.LASF295
+ 11113 0ac2 1E       		.sleb128 30
+ 11114 0ac3 0E       		.uleb128 0xe
+ 11115 0ac4 00000000 		.long	.LASF296
+ 11116 0ac8 1F       		.sleb128 31
+ 11117 0ac9 0E       		.uleb128 0xe
+ 11118 0aca 00000000 		.long	.LASF297
+
GAS LISTING /tmp/ccPaCTqg.s 			page 342
+
+
+ 11119 0ace 20       		.sleb128 32
+ 11120 0acf 0E       		.uleb128 0xe
+ 11121 0ad0 00000000 		.long	.LASF298
+ 11122 0ad4 21       		.sleb128 33
+ 11123 0ad5 0E       		.uleb128 0xe
+ 11124 0ad6 00000000 		.long	.LASF299
+ 11125 0ada 22       		.sleb128 34
+ 11126 0adb 0E       		.uleb128 0xe
+ 11127 0adc 00000000 		.long	.LASF300
+ 11128 0ae0 23       		.sleb128 35
+ 11129 0ae1 0E       		.uleb128 0xe
+ 11130 0ae2 00000000 		.long	.LASF301
+ 11131 0ae6 24       		.sleb128 36
+ 11132 0ae7 0E       		.uleb128 0xe
+ 11133 0ae8 00000000 		.long	.LASF302
+ 11134 0aec 25       		.sleb128 37
+ 11135 0aed 0E       		.uleb128 0xe
+ 11136 0aee 00000000 		.long	.LASF303
+ 11137 0af2 26       		.sleb128 38
+ 11138 0af3 0E       		.uleb128 0xe
+ 11139 0af4 00000000 		.long	.LASF304
+ 11140 0af8 27       		.sleb128 39
+ 11141 0af9 0E       		.uleb128 0xe
+ 11142 0afa 00000000 		.long	.LASF305
+ 11143 0afe 28       		.sleb128 40
+ 11144 0aff 0E       		.uleb128 0xe
+ 11145 0b00 00000000 		.long	.LASF306
+ 11146 0b04 29       		.sleb128 41
+ 11147 0b05 0E       		.uleb128 0xe
+ 11148 0b06 00000000 		.long	.LASF307
+ 11149 0b0a 29       		.sleb128 41
+ 11150 0b0b 0E       		.uleb128 0xe
+ 11151 0b0c 00000000 		.long	.LASF308
+ 11152 0b10 2A       		.sleb128 42
+ 11153 0b11 0E       		.uleb128 0xe
+ 11154 0b12 00000000 		.long	.LASF309
+ 11155 0b16 2B       		.sleb128 43
+ 11156 0b17 0E       		.uleb128 0xe
+ 11157 0b18 00000000 		.long	.LASF310
+ 11158 0b1c 2C       		.sleb128 44
+ 11159 0b1d 0E       		.uleb128 0xe
+ 11160 0b1e 00000000 		.long	.LASF311
+ 11161 0b22 2D       		.sleb128 45
+ 11162 0b23 0E       		.uleb128 0xe
+ 11163 0b24 00000000 		.long	.LASF312
+ 11164 0b28 2E       		.sleb128 46
+ 11165 0b29 0E       		.uleb128 0xe
+ 11166 0b2a 00000000 		.long	.LASF313
+ 11167 0b2e 2F       		.sleb128 47
+ 11168 0b2f 0E       		.uleb128 0xe
+ 11169 0b30 00000000 		.long	.LASF314
+ 11170 0b34 30       		.sleb128 48
+ 11171 0b35 0E       		.uleb128 0xe
+ 11172 0b36 00000000 		.long	.LASF315
+ 11173 0b3a 31       		.sleb128 49
+ 11174 0b3b 00       		.byte	0x0
+ 11175 0b3c 1F       		.uleb128 0x1f
+
GAS LISTING /tmp/ccPaCTqg.s 			page 343
+
+
+ 11176 0b3d 00000000 		.long	.LASF317
+ 11177 0b41 01       		.byte	0x1
+ 11178 0b42 2803     		.value	0x328
+ 11179 0b44 01       		.byte	0x1
+ 11180 0b45 FD000000 		.long	0xfd
+ 11181 0b49 00000000 		.quad	.LFB580
+ 11181      00000000 
+ 11182 0b51 00000000 		.quad	.LFE580
+ 11182      00000000 
+ 11183 0b59 00000000 		.long	.LLST0
+ 11184 0b5d 7E0B0000 		.long	0xb7e
+ 11185 0b61 20       		.uleb128 0x20
+ 11186 0b62 00000000 		.long	.LASF63
+ 11187 0b66 01       		.byte	0x1
+ 11188 0b67 2803     		.value	0x328
+ 11189 0b69 FD000000 		.long	0xfd
+ 11190 0b6d 01       		.byte	0x1
+ 11191 0b6e 61       		.byte	0x61
+ 11192 0b6f 20       		.uleb128 0x20
+ 11193 0b70 00000000 		.long	.LASF316
+ 11194 0b74 01       		.byte	0x1
+ 11195 0b75 2803     		.value	0x328
+ 11196 0b77 7E0B0000 		.long	0xb7e
+ 11197 0b7b 01       		.byte	0x1
+ 11198 0b7c 62       		.byte	0x62
+ 11199 0b7d 00       		.byte	0x0
+ 11200 0b7e 06       		.uleb128 0x6
+ 11201 0b7f FD000000 		.long	0xfd
+ 11202 0b83 1F       		.uleb128 0x1f
+ 11203 0b84 00000000 		.long	.LASF318
+ 11204 0b88 01       		.byte	0x1
+ 11205 0b89 3103     		.value	0x331
+ 11206 0b8b 01       		.byte	0x1
+ 11207 0b8c FD000000 		.long	0xfd
+ 11208 0b90 00000000 		.quad	.LFB581
+ 11208      00000000 
+ 11209 0b98 00000000 		.quad	.LFE581
+ 11209      00000000 
+ 11210 0ba0 00000000 		.long	.LLST1
+ 11211 0ba4 C50B0000 		.long	0xbc5
+ 11212 0ba8 20       		.uleb128 0x20
+ 11213 0ba9 00000000 		.long	.LASF63
+ 11214 0bad 01       		.byte	0x1
+ 11215 0bae 3103     		.value	0x331
+ 11216 0bb0 FD000000 		.long	0xfd
+ 11217 0bb4 01       		.byte	0x1
+ 11218 0bb5 61       		.byte	0x61
+ 11219 0bb6 20       		.uleb128 0x20
+ 11220 0bb7 00000000 		.long	.LASF316
+ 11221 0bbb 01       		.byte	0x1
+ 11222 0bbc 3203     		.value	0x332
+ 11223 0bbe 7E0B0000 		.long	0xb7e
+ 11224 0bc2 01       		.byte	0x1
+ 11225 0bc3 62       		.byte	0x62
+ 11226 0bc4 00       		.byte	0x0
+ 11227 0bc5 1F       		.uleb128 0x1f
+ 11228 0bc6 00000000 		.long	.LASF319
+
GAS LISTING /tmp/ccPaCTqg.s 			page 344
+
+
+ 11229 0bca 01       		.byte	0x1
+ 11230 0bcb 3B03     		.value	0x33b
+ 11231 0bcd 01       		.byte	0x1
+ 11232 0bce FD000000 		.long	0xfd
+ 11233 0bd2 00000000 		.quad	.LFB582
+ 11233      00000000 
+ 11234 0bda 00000000 		.quad	.LFE582
+ 11234      00000000 
+ 11235 0be2 00000000 		.long	.LLST2
+ 11236 0be6 070C0000 		.long	0xc07
+ 11237 0bea 20       		.uleb128 0x20
+ 11238 0beb 00000000 		.long	.LASF63
+ 11239 0bef 01       		.byte	0x1
+ 11240 0bf0 3B03     		.value	0x33b
+ 11241 0bf2 FD000000 		.long	0xfd
+ 11242 0bf6 01       		.byte	0x1
+ 11243 0bf7 61       		.byte	0x61
+ 11244 0bf8 20       		.uleb128 0x20
+ 11245 0bf9 00000000 		.long	.LASF316
+ 11246 0bfd 01       		.byte	0x1
+ 11247 0bfe 3B03     		.value	0x33b
+ 11248 0c00 7E0B0000 		.long	0xb7e
+ 11249 0c04 01       		.byte	0x1
+ 11250 0c05 62       		.byte	0x62
+ 11251 0c06 00       		.byte	0x0
+ 11252 0c07 1F       		.uleb128 0x1f
+ 11253 0c08 00000000 		.long	.LASF320
+ 11254 0c0c 01       		.byte	0x1
+ 11255 0c0d 4403     		.value	0x344
+ 11256 0c0f 01       		.byte	0x1
+ 11257 0c10 FD000000 		.long	0xfd
+ 11258 0c14 00000000 		.quad	.LFB583
+ 11258      00000000 
+ 11259 0c1c 00000000 		.quad	.LFE583
+ 11259      00000000 
+ 11260 0c24 00000000 		.long	.LLST3
+ 11261 0c28 490C0000 		.long	0xc49
+ 11262 0c2c 20       		.uleb128 0x20
+ 11263 0c2d 00000000 		.long	.LASF63
+ 11264 0c31 01       		.byte	0x1
+ 11265 0c32 4403     		.value	0x344
+ 11266 0c34 FD000000 		.long	0xfd
+ 11267 0c38 01       		.byte	0x1
+ 11268 0c39 61       		.byte	0x61
+ 11269 0c3a 20       		.uleb128 0x20
+ 11270 0c3b 00000000 		.long	.LASF316
+ 11271 0c3f 01       		.byte	0x1
+ 11272 0c40 4503     		.value	0x345
+ 11273 0c42 7E0B0000 		.long	0xb7e
+ 11274 0c46 01       		.byte	0x1
+ 11275 0c47 62       		.byte	0x62
+ 11276 0c48 00       		.byte	0x0
+ 11277 0c49 1F       		.uleb128 0x1f
+ 11278 0c4a 00000000 		.long	.LASF321
+ 11279 0c4e 01       		.byte	0x1
+ 11280 0c4f 5B03     		.value	0x35b
+ 11281 0c51 01       		.byte	0x1
+
GAS LISTING /tmp/ccPaCTqg.s 			page 345
+
+
+ 11282 0c52 FD000000 		.long	0xfd
+ 11283 0c56 00000000 		.quad	.LFB585
+ 11283      00000000 
+ 11284 0c5e 00000000 		.quad	.LFE585
+ 11284      00000000 
+ 11285 0c66 00000000 		.long	.LLST4
+ 11286 0c6a 7D0C0000 		.long	0xc7d
+ 11287 0c6e 20       		.uleb128 0x20
+ 11288 0c6f 00000000 		.long	.LASF316
+ 11289 0c73 01       		.byte	0x1
+ 11290 0c74 5B03     		.value	0x35b
+ 11291 0c76 7E0B0000 		.long	0xb7e
+ 11292 0c7a 01       		.byte	0x1
+ 11293 0c7b 61       		.byte	0x61
+ 11294 0c7c 00       		.byte	0x0
+ 11295 0c7d 21       		.uleb128 0x21
+ 11296 0c7e 00000000 		.long	.LASF322
+ 11297 0c82 02       		.byte	0x2
+ 11298 0c83 38       		.byte	0x38
+ 11299 0c84 01       		.byte	0x1
+ 11300 0c85 6D000000 		.long	0x6d
+ 11301 0c89 00000000 		.quad	.LFB602
+ 11301      00000000 
+ 11302 0c91 00000000 		.quad	.LFE602
+ 11302      00000000 
+ 11303 0c99 00000000 		.long	.LLST5
+ 11304 0c9d BB0C0000 		.long	0xcbb
+ 11305 0ca1 22       		.uleb128 0x22
+ 11306 0ca2 6900     		.string	"i"
+ 11307 0ca4 02       		.byte	0x2
+ 11308 0ca5 38       		.byte	0x38
+ 11309 0ca6 6D000000 		.long	0x6d
+ 11310 0caa 02       		.byte	0x2
+ 11311 0cab 91       		.byte	0x91
+ 11312 0cac 64       		.sleb128 -28
+ 11313 0cad 23       		.uleb128 0x23
+ 11314 0cae 72746E00 		.string	"rtn"
+ 11315 0cb2 02       		.byte	0x2
+ 11316 0cb3 3A       		.byte	0x3a
+ 11317 0cb4 6D000000 		.long	0x6d
+ 11318 0cb8 01       		.byte	0x1
+ 11319 0cb9 53       		.byte	0x53
+ 11320 0cba 00       		.byte	0x0
+ 11321 0cbb 24       		.uleb128 0x24
+ 11322 0cbc 00000000 		.long	.LASF323
+ 11323 0cc0 03       		.byte	0x3
+ 11324 0cc1 79       		.byte	0x79
+ 11325 0cc2 01       		.byte	0x1
+ 11326 0cc3 C9010000 		.long	0x1c9
+ 11327 0cc7 03       		.byte	0x3
+ 11328 0cc8 E30C0000 		.long	0xce3
+ 11329 0ccc 25       		.uleb128 0x25
+ 11330 0ccd 61696E00 		.string	"ain"
+ 11331 0cd1 03       		.byte	0x3
+ 11332 0cd2 79       		.byte	0x79
+ 11333 0cd3 E3000000 		.long	0xe3
+ 11334 0cd7 26       		.uleb128 0x26
+
GAS LISTING /tmp/ccPaCTqg.s 			page 346
+
+
+ 11335 0cd8 76656300 		.string	"vec"
+ 11336 0cdc 03       		.byte	0x3
+ 11337 0cdd 7D       		.byte	0x7d
+ 11338 0cde C9010000 		.long	0x1c9
+ 11339 0ce2 00       		.byte	0x0
+ 11340 0ce3 27       		.uleb128 0x27
+ 11341 0ce4 00000000 		.long	.LASF324
+ 11342 0ce8 03       		.byte	0x3
+ 11343 0ce9 8606     		.value	0x686
+ 11344 0ceb 01       		.byte	0x1
+ 11345 0cec C9010000 		.long	0x1c9
+ 11346 0cf0 03       		.byte	0x3
+ 11347 0cf1 1A0D0000 		.long	0xd1a
+ 11348 0cf5 28       		.uleb128 0x28
+ 11349 0cf6 00000000 		.long	.LASF63
+ 11350 0cfa 03       		.byte	0x3
+ 11351 0cfb 8606     		.value	0x686
+ 11352 0cfd C9010000 		.long	0x1c9
+ 11353 0d01 28       		.uleb128 0x28
+ 11354 0d02 00000000 		.long	.LASF325
+ 11355 0d06 03       		.byte	0x3
+ 11356 0d07 8606     		.value	0x686
+ 11357 0d09 B4000000 		.long	0xb4
+ 11358 0d0d 29       		.uleb128 0x29
+ 11359 0d0e 746D7000 		.string	"tmp"
+ 11360 0d12 03       		.byte	0x3
+ 11361 0d13 8906     		.value	0x689
+ 11362 0d15 C9010000 		.long	0x1c9
+ 11363 0d19 00       		.byte	0x0
+ 11364 0d1a 27       		.uleb128 0x27
+ 11365 0d1b 00000000 		.long	.LASF326
+ 11366 0d1f 01       		.byte	0x1
+ 11367 0d20 5103     		.value	0x351
+ 11368 0d22 01       		.byte	0x1
+ 11369 0d23 FD000000 		.long	0xfd
+ 11370 0d27 03       		.byte	0x3
+ 11371 0d28 450D0000 		.long	0xd45
+ 11372 0d2c 28       		.uleb128 0x28
+ 11373 0d2d 00000000 		.long	.LASF316
+ 11374 0d31 01       		.byte	0x1
+ 11375 0d32 5103     		.value	0x351
+ 11376 0d34 7E0B0000 		.long	0xb7e
+ 11377 0d38 28       		.uleb128 0x28
+ 11378 0d39 00000000 		.long	.LASF325
+ 11379 0d3d 01       		.byte	0x1
+ 11380 0d3e 5203     		.value	0x352
+ 11381 0d40 B4000000 		.long	0xb4
+ 11382 0d44 00       		.byte	0x0
+ 11383 0d45 27       		.uleb128 0x27
+ 11384 0d46 00000000 		.long	.LASF327
+ 11385 0d4a 03       		.byte	0x3
+ 11386 0d4b 4605     		.value	0x546
+ 11387 0d4d 01       		.byte	0x1
+ 11388 0d4e C9010000 		.long	0x1c9
+ 11389 0d52 03       		.byte	0x3
+ 11390 0d53 640D0000 		.long	0xd64
+ 11391 0d57 28       		.uleb128 0x28
+
GAS LISTING /tmp/ccPaCTqg.s 			page 347
+
+
+ 11392 0d58 00000000 		.long	.LASF63
+ 11393 0d5c 03       		.byte	0x3
+ 11394 0d5d 4605     		.value	0x546
+ 11395 0d5f C9010000 		.long	0x1c9
+ 11396 0d63 00       		.byte	0x0
+ 11397 0d64 27       		.uleb128 0x27
+ 11398 0d65 00000000 		.long	.LASF328
+ 11399 0d69 01       		.byte	0x1
+ 11400 0d6a C001     		.value	0x1c0
+ 11401 0d6c 01       		.byte	0x1
+ 11402 0d6d FD000000 		.long	0xfd
+ 11403 0d71 03       		.byte	0x3
+ 11404 0d72 8F0D0000 		.long	0xd8f
+ 11405 0d76 2A       		.uleb128 0x2a
+ 11406 0d77 76696E00 		.string	"vin"
+ 11407 0d7b 01       		.byte	0x1
+ 11408 0d7c C001     		.value	0x1c0
+ 11409 0d7e FD000000 		.long	0xfd
+ 11410 0d82 28       		.uleb128 0x28
+ 11411 0d83 00000000 		.long	.LASF329
+ 11412 0d87 01       		.byte	0x1
+ 11413 0d88 C001     		.value	0x1c0
+ 11414 0d8a B4000000 		.long	0xb4
+ 11415 0d8e 00       		.byte	0x0
+ 11416 0d8f 27       		.uleb128 0x27
+ 11417 0d90 00000000 		.long	.LASF330
+ 11418 0d94 03       		.byte	0x3
+ 11419 0d95 1A06     		.value	0x61a
+ 11420 0d97 01       		.byte	0x1
+ 11421 0d98 C9010000 		.long	0x1c9
+ 11422 0d9c 03       		.byte	0x3
+ 11423 0d9d BA0D0000 		.long	0xdba
+ 11424 0da1 28       		.uleb128 0x28
+ 11425 0da2 00000000 		.long	.LASF63
+ 11426 0da6 03       		.byte	0x3
+ 11427 0da7 1A06     		.value	0x61a
+ 11428 0da9 C9010000 		.long	0x1c9
+ 11429 0dad 2B       		.uleb128 0x2b
+ 11430 0dae 00000000 		.long	.LASF331
+ 11431 0db2 03       		.byte	0x3
+ 11432 0db3 1D06     		.value	0x61d
+ 11433 0db5 C9010000 		.long	0x1c9
+ 11434 0db9 00       		.byte	0x0
+ 11435 0dba 27       		.uleb128 0x27
+ 11436 0dbb 00000000 		.long	.LASF332
+ 11437 0dbf 03       		.byte	0x3
+ 11438 0dc0 FA04     		.value	0x4fa
+ 11439 0dc2 01       		.byte	0x1
+ 11440 0dc3 C9010000 		.long	0x1c9
+ 11441 0dc7 03       		.byte	0x3
+ 11442 0dc8 F60D0000 		.long	0xdf6
+ 11443 0dcc 28       		.uleb128 0x28
+ 11444 0dcd 00000000 		.long	.LASF63
+ 11445 0dd1 03       		.byte	0x3
+ 11446 0dd2 FA04     		.value	0x4fa
+ 11447 0dd4 C9010000 		.long	0x1c9
+ 11448 0dd8 2C       		.uleb128 0x2c
+
GAS LISTING /tmp/ccPaCTqg.s 			page 348
+
+
+ 11449 0dd9 00000000 		.long	.LASF329
+ 11450 0ddd 03       		.byte	0x3
+ 11451 0dde FD04     		.value	0x4fd
+ 11452 0de0 F60D0000 		.long	0xdf6
+ 11453 0de4 10       		.byte	0x10
+ 11454 0de5 FF       		.byte	0xff
+ 11455 0de6 FF       		.byte	0xff
+ 11456 0de7 FF       		.byte	0xff
+ 11457 0de8 FF       		.byte	0xff
+ 11458 0de9 00       		.byte	0x0
+ 11459 0dea 01       		.byte	0x1
+ 11460 0deb 02       		.byte	0x2
+ 11461 0dec 03       		.byte	0x3
+ 11462 0ded 04       		.byte	0x4
+ 11463 0dee 05       		.byte	0x5
+ 11464 0def 06       		.byte	0x6
+ 11465 0df0 07       		.byte	0x7
+ 11466 0df1 08       		.byte	0x8
+ 11467 0df2 09       		.byte	0x9
+ 11468 0df3 0A       		.byte	0xa
+ 11469 0df4 0B       		.byte	0xb
+ 11470 0df5 00       		.byte	0x0
+ 11471 0df6 06       		.uleb128 0x6
+ 11472 0df7 C9010000 		.long	0x1c9
+ 11473 0dfb 27       		.uleb128 0x27
+ 11474 0dfc 00000000 		.long	.LASF333
+ 11475 0e00 03       		.byte	0x3
+ 11476 0e01 7101     		.value	0x171
+ 11477 0e03 01       		.byte	0x1
+ 11478 0e04 C9010000 		.long	0x1c9
+ 11479 0e08 03       		.byte	0x3
+ 11480 0e09 260E0000 		.long	0xe26
+ 11481 0e0d 28       		.uleb128 0x28
+ 11482 0e0e 00000000 		.long	.LASF334
+ 11483 0e12 03       		.byte	0x3
+ 11484 0e13 7101     		.value	0x171
+ 11485 0e15 C9010000 		.long	0x1c9
+ 11486 0e19 28       		.uleb128 0x28
+ 11487 0e1a 00000000 		.long	.LASF329
+ 11488 0e1e 03       		.byte	0x3
+ 11489 0e1f 7101     		.value	0x171
+ 11490 0e21 C9010000 		.long	0x1c9
+ 11491 0e25 00       		.byte	0x0
+ 11492 0e26 27       		.uleb128 0x27
+ 11493 0e27 00000000 		.long	.LASF335
+ 11494 0e2b 01       		.byte	0x1
+ 11495 0e2c 0F02     		.value	0x20f
+ 11496 0e2e 01       		.byte	0x1
+ 11497 0e2f FD000000 		.long	0xfd
+ 11498 0e33 03       		.byte	0x3
+ 11499 0e34 510E0000 		.long	0xe51
+ 11500 0e38 2A       		.uleb128 0x2a
+ 11501 0e39 76696E00 		.string	"vin"
+ 11502 0e3d 01       		.byte	0x1
+ 11503 0e3e 0F02     		.value	0x20f
+ 11504 0e40 FD000000 		.long	0xfd
+ 11505 0e44 28       		.uleb128 0x28
+
GAS LISTING /tmp/ccPaCTqg.s 			page 349
+
+
+ 11506 0e45 00000000 		.long	.LASF336
+ 11507 0e49 01       		.byte	0x1
+ 11508 0e4a 0F02     		.value	0x20f
+ 11509 0e4c 7E0B0000 		.long	0xb7e
+ 11510 0e50 00       		.byte	0x0
+ 11511 0e51 2D       		.uleb128 0x2d
+ 11512 0e52 00000000 		.long	.LASF346
+ 11513 0e56 03       		.byte	0x3
+ 11514 0e57 C206     		.value	0x6c2
+ 11515 0e59 01       		.byte	0x1
+ 11516 0e5a 00000000 		.quad	.LFB656
+ 11516      00000000 
+ 11517 0e62 00000000 		.quad	.LFE656
+ 11517      00000000 
+ 11518 0e6a 00000000 		.long	.LLST6
+ 11519 0e6e 712B0000 		.long	0x2b71
+ 11520 0e72 20       		.uleb128 0x20
+ 11521 0e73 00000000 		.long	.LASF61
+ 11522 0e77 03       		.byte	0x3
+ 11523 0e78 C206     		.value	0x6c2
+ 11524 0e7a 712B0000 		.long	0x2b71
+ 11525 0e7e 03       		.byte	0x3
+ 11526 0e7f 91       		.byte	0x91
+ 11527 0e80 E862     		.sleb128 -3736
+ 11528 0e82 2E       		.uleb128 0x2e
+ 11529 0e83 6B657900 		.string	"key"
+ 11530 0e87 03       		.byte	0x3
+ 11531 0e88 C206     		.value	0x6c2
+ 11532 0e8a 772B0000 		.long	0x2b77
+ 11533 0e8e 03       		.byte	0x3
+ 11534 0e8f 91       		.byte	0x91
+ 11535 0e90 E062     		.sleb128 -3744
+ 11536 0e92 2F       		.uleb128 0x2f
+ 11537 0e93 00000000 		.long	.LASF63
+ 11538 0e97 03       		.byte	0x3
+ 11539 0e98 C406     		.value	0x6c4
+ 11540 0e9a C9010000 		.long	0x1c9
+ 11541 0e9e 03       		.byte	0x3
+ 11542 0e9f 91       		.byte	0x91
+ 11543 0ea0 F062     		.sleb128 -3728
+ 11544 0ea2 2F       		.uleb128 0x2f
+ 11545 0ea3 00000000 		.long	.LASF337
+ 11546 0ea7 03       		.byte	0x3
+ 11547 0ea8 C506     		.value	0x6c5
+ 11548 0eaa C9010000 		.long	0x1c9
+ 11549 0eae 03       		.byte	0x3
+ 11550 0eaf 91       		.byte	0x91
+ 11551 0eb0 8063     		.sleb128 -3712
+ 11552 0eb2 30       		.uleb128 0x30
+ 11553 0eb3 BB0C0000 		.long	0xcbb
+ 11554 0eb7 00000000 		.quad	.LBB284
+ 11554      00000000 
+ 11555 0ebf 00000000 		.quad	.LBE284
+ 11555      00000000 
+ 11556 0ec7 03       		.byte	0x3
+ 11557 0ec8 C706     		.value	0x6c7
+ 11558 0eca F30E0000 		.long	0xef3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 350
+
+
+ 11559 0ece 31       		.uleb128 0x31
+ 11560 0ecf CC0C0000 		.long	0xccc
+ 11561 0ed3 03       		.byte	0x3
+ 11562 0ed4 91       		.byte	0x91
+ 11563 0ed5 9063     		.sleb128 -3696
+ 11564 0ed7 32       		.uleb128 0x32
+ 11565 0ed8 00000000 		.quad	.LBB285
+ 11565      00000000 
+ 11566 0ee0 00000000 		.quad	.LBE285
+ 11566      00000000 
+ 11567 0ee8 33       		.uleb128 0x33
+ 11568 0ee9 D70C0000 		.long	0xcd7
+ 11569 0eed 03       		.byte	0x3
+ 11570 0eee 76       		.byte	0x76
+ 11571 0eef A060     		.sleb128 -4064
+ 11572 0ef1 00       		.byte	0x0
+ 11573 0ef2 00       		.byte	0x0
+ 11574 0ef3 30       		.uleb128 0x30
+ 11575 0ef4 E30C0000 		.long	0xce3
+ 11576 0ef8 00000000 		.quad	.LBB286
+ 11576      00000000 
+ 11577 0f00 00000000 		.quad	.LBE286
+ 11577      00000000 
+ 11578 0f08 03       		.byte	0x3
+ 11579 0f09 D006     		.value	0x6d0
+ 11580 0f0b B90F0000 		.long	0xfb9
+ 11581 0f0f 31       		.uleb128 0x31
+ 11582 0f10 010D0000 		.long	0xd01
+ 11583 0f14 03       		.byte	0x3
+ 11584 0f15 91       		.byte	0x91
+ 11585 0f16 9C63     		.sleb128 -3684
+ 11586 0f18 31       		.uleb128 0x31
+ 11587 0f19 F50C0000 		.long	0xcf5
+ 11588 0f1d 03       		.byte	0x3
+ 11589 0f1e 91       		.byte	0x91
+ 11590 0f1f A063     		.sleb128 -3680
+ 11591 0f21 32       		.uleb128 0x32
+ 11592 0f22 00000000 		.quad	.LBB287
+ 11592      00000000 
+ 11593 0f2a 00000000 		.quad	.LBE287
+ 11593      00000000 
+ 11594 0f32 33       		.uleb128 0x33
+ 11595 0f33 0D0D0000 		.long	0xd0d
+ 11596 0f37 03       		.byte	0x3
+ 11597 0f38 76       		.byte	0x76
+ 11598 0f39 B060     		.sleb128 -4048
+ 11599 0f3b 30       		.uleb128 0x30
+ 11600 0f3c 1A0D0000 		.long	0xd1a
+ 11601 0f40 00000000 		.quad	.LBB288
+ 11601      00000000 
+ 11602 0f48 00000000 		.quad	.LBE288
+ 11602      00000000 
+ 11603 0f50 03       		.byte	0x3
+ 11604 0f51 8A06     		.value	0x68a
+ 11605 0f53 6A0F0000 		.long	0xf6a
+ 11606 0f57 31       		.uleb128 0x31
+ 11607 0f58 380D0000 		.long	0xd38
+
GAS LISTING /tmp/ccPaCTqg.s 			page 351
+
+
+ 11608 0f5c 03       		.byte	0x3
+ 11609 0f5d 91       		.byte	0x91
+ 11610 0f5e BC63     		.sleb128 -3652
+ 11611 0f60 31       		.uleb128 0x31
+ 11612 0f61 2C0D0000 		.long	0xd2c
+ 11613 0f65 03       		.byte	0x3
+ 11614 0f66 91       		.byte	0x91
+ 11615 0f67 C063     		.sleb128 -3648
+ 11616 0f69 00       		.byte	0x0
+ 11617 0f6a 34       		.uleb128 0x34
+ 11618 0f6b 450D0000 		.long	0xd45
+ 11619 0f6f 00000000 		.quad	.LBB290
+ 11619      00000000 
+ 11620 0f77 00000000 		.quad	.LBE290
+ 11620      00000000 
+ 11621 0f7f 03       		.byte	0x3
+ 11622 0f80 8B06     		.value	0x68b
+ 11623 0f82 31       		.uleb128 0x31
+ 11624 0f83 570D0000 		.long	0xd57
+ 11625 0f87 03       		.byte	0x3
+ 11626 0f88 91       		.byte	0x91
+ 11627 0f89 D063     		.sleb128 -3632
+ 11628 0f8b 34       		.uleb128 0x34
+ 11629 0f8c 640D0000 		.long	0xd64
+ 11630 0f90 00000000 		.quad	.LBB292
+ 11630      00000000 
+ 11631 0f98 00000000 		.quad	.LBE292
+ 11631      00000000 
+ 11632 0fa0 03       		.byte	0x3
+ 11633 0fa1 4905     		.value	0x549
+ 11634 0fa3 31       		.uleb128 0x31
+ 11635 0fa4 820D0000 		.long	0xd82
+ 11636 0fa8 03       		.byte	0x3
+ 11637 0fa9 91       		.byte	0x91
+ 11638 0faa EC63     		.sleb128 -3604
+ 11639 0fac 31       		.uleb128 0x31
+ 11640 0fad 760D0000 		.long	0xd76
+ 11641 0fb1 03       		.byte	0x3
+ 11642 0fb2 91       		.byte	0x91
+ 11643 0fb3 F063     		.sleb128 -3600
+ 11644 0fb5 00       		.byte	0x0
+ 11645 0fb6 00       		.byte	0x0
+ 11646 0fb7 00       		.byte	0x0
+ 11647 0fb8 00       		.byte	0x0
+ 11648 0fb9 30       		.uleb128 0x30
+ 11649 0fba 8F0D0000 		.long	0xd8f
+ 11650 0fbe 00000000 		.quad	.LBB294
+ 11650      00000000 
+ 11651 0fc6 00000000 		.quad	.LBE294
+ 11651      00000000 
+ 11652 0fce 03       		.byte	0x3
+ 11653 0fcf D006     		.value	0x6d0
+ 11654 0fd1 CD110000 		.long	0x11cd
+ 11655 0fd5 31       		.uleb128 0x31
+ 11656 0fd6 A10D0000 		.long	0xda1
+ 11657 0fda 03       		.byte	0x3
+ 11658 0fdb 91       		.byte	0x91
+
GAS LISTING /tmp/ccPaCTqg.s 			page 352
+
+
+ 11659 0fdc 8064     		.sleb128 -3584
+ 11660 0fde 32       		.uleb128 0x32
+ 11661 0fdf 00000000 		.quad	.LBB295
+ 11661      00000000 
+ 11662 0fe7 00000000 		.quad	.LBE295
+ 11662      00000000 
+ 11663 0fef 33       		.uleb128 0x33
+ 11664 0ff0 AD0D0000 		.long	0xdad
+ 11665 0ff4 03       		.byte	0x3
+ 11666 0ff5 76       		.byte	0x76
+ 11667 0ff6 C060     		.sleb128 -4032
+ 11668 0ff8 30       		.uleb128 0x30
+ 11669 0ff9 BA0D0000 		.long	0xdba
+ 11670 0ffd 00000000 		.quad	.LBB296
+ 11670      00000000 
+ 11671 1005 00000000 		.quad	.LBE296
+ 11671      00000000 
+ 11672 100d 03       		.byte	0x3
+ 11673 100e 1F06     		.value	0x61f
+ 11674 1010 95100000 		.long	0x1095
+ 11675 1014 31       		.uleb128 0x31
+ 11676 1015 CC0D0000 		.long	0xdcc
+ 11677 1019 03       		.byte	0x3
+ 11678 101a 91       		.byte	0x91
+ 11679 101b 9064     		.sleb128 -3568
+ 11680 101d 32       		.uleb128 0x32
+ 11681 101e 00000000 		.quad	.LBB297
+ 11681      00000000 
+ 11682 1026 00000000 		.quad	.LBE297
+ 11682      00000000 
+ 11683 102e 33       		.uleb128 0x33
+ 11684 102f D80D0000 		.long	0xdd8
+ 11685 1033 09       		.byte	0x9
+ 11686 1034 03       		.byte	0x3
+ 11687 1035 00000000 		.quad	mask.8002
+ 11687      00000000 
+ 11688 103d 34       		.uleb128 0x34
+ 11689 103e FB0D0000 		.long	0xdfb
+ 11690 1042 00000000 		.quad	.LBB298
+ 11690      00000000 
+ 11691 104a 00000000 		.quad	.LBE298
+ 11691      00000000 
+ 11692 1052 03       		.byte	0x3
+ 11693 1053 FE04     		.value	0x4fe
+ 11694 1055 31       		.uleb128 0x31
+ 11695 1056 190E0000 		.long	0xe19
+ 11696 105a 03       		.byte	0x3
+ 11697 105b 91       		.byte	0x91
+ 11698 105c A064     		.sleb128 -3552
+ 11699 105e 31       		.uleb128 0x31
+ 11700 105f 0D0E0000 		.long	0xe0d
+ 11701 1063 03       		.byte	0x3
+ 11702 1064 91       		.byte	0x91
+ 11703 1065 B064     		.sleb128 -3536
+ 11704 1067 34       		.uleb128 0x34
+ 11705 1068 260E0000 		.long	0xe26
+ 11706 106c 00000000 		.quad	.LBB300
+
GAS LISTING /tmp/ccPaCTqg.s 			page 353
+
+
+ 11706      00000000 
+ 11707 1074 00000000 		.quad	.LBE300
+ 11707      00000000 
+ 11708 107c 03       		.byte	0x3
+ 11709 107d 7501     		.value	0x175
+ 11710 107f 31       		.uleb128 0x31
+ 11711 1080 440E0000 		.long	0xe44
+ 11712 1084 03       		.byte	0x3
+ 11713 1085 91       		.byte	0x91
+ 11714 1086 C064     		.sleb128 -3520
+ 11715 1088 31       		.uleb128 0x31
+ 11716 1089 380E0000 		.long	0xe38
+ 11717 108d 03       		.byte	0x3
+ 11718 108e 91       		.byte	0x91
+ 11719 108f D064     		.sleb128 -3504
+ 11720 1091 00       		.byte	0x0
+ 11721 1092 00       		.byte	0x0
+ 11722 1093 00       		.byte	0x0
+ 11723 1094 00       		.byte	0x0
+ 11724 1095 30       		.uleb128 0x30
+ 11725 1096 BA0D0000 		.long	0xdba
+ 11726 109a 00000000 		.quad	.LBB302
+ 11726      00000000 
+ 11727 10a2 00000000 		.quad	.LBE302
+ 11727      00000000 
+ 11728 10aa 03       		.byte	0x3
+ 11729 10ab 2006     		.value	0x620
+ 11730 10ad 32110000 		.long	0x1132
+ 11731 10b1 31       		.uleb128 0x31
+ 11732 10b2 CC0D0000 		.long	0xdcc
+ 11733 10b6 03       		.byte	0x3
+ 11734 10b7 91       		.byte	0x91
+ 11735 10b8 E064     		.sleb128 -3488
+ 11736 10ba 32       		.uleb128 0x32
+ 11737 10bb 00000000 		.quad	.LBB303
+ 11737      00000000 
+ 11738 10c3 00000000 		.quad	.LBE303
+ 11738      00000000 
+ 11739 10cb 33       		.uleb128 0x33
+ 11740 10cc D80D0000 		.long	0xdd8
+ 11741 10d0 09       		.byte	0x9
+ 11742 10d1 03       		.byte	0x3
+ 11743 10d2 00000000 		.quad	mask.8002
+ 11743      00000000 
+ 11744 10da 34       		.uleb128 0x34
+ 11745 10db FB0D0000 		.long	0xdfb
+ 11746 10df 00000000 		.quad	.LBB304
+ 11746      00000000 
+ 11747 10e7 00000000 		.quad	.LBE304
+ 11747      00000000 
+ 11748 10ef 03       		.byte	0x3
+ 11749 10f0 FE04     		.value	0x4fe
+ 11750 10f2 31       		.uleb128 0x31
+ 11751 10f3 190E0000 		.long	0xe19
+ 11752 10f7 03       		.byte	0x3
+ 11753 10f8 91       		.byte	0x91
+ 11754 10f9 F064     		.sleb128 -3472
+
GAS LISTING /tmp/ccPaCTqg.s 			page 354
+
+
+ 11755 10fb 31       		.uleb128 0x31
+ 11756 10fc 0D0E0000 		.long	0xe0d
+ 11757 1100 03       		.byte	0x3
+ 11758 1101 91       		.byte	0x91
+ 11759 1102 8065     		.sleb128 -3456
+ 11760 1104 34       		.uleb128 0x34
+ 11761 1105 260E0000 		.long	0xe26
+ 11762 1109 00000000 		.quad	.LBB306
+ 11762      00000000 
+ 11763 1111 00000000 		.quad	.LBE306
+ 11763      00000000 
+ 11764 1119 03       		.byte	0x3
+ 11765 111a 7501     		.value	0x175
+ 11766 111c 31       		.uleb128 0x31
+ 11767 111d 440E0000 		.long	0xe44
+ 11768 1121 03       		.byte	0x3
+ 11769 1122 91       		.byte	0x91
+ 11770 1123 9065     		.sleb128 -3440
+ 11771 1125 31       		.uleb128 0x31
+ 11772 1126 380E0000 		.long	0xe38
+ 11773 112a 03       		.byte	0x3
+ 11774 112b 91       		.byte	0x91
+ 11775 112c A065     		.sleb128 -3424
+ 11776 112e 00       		.byte	0x0
+ 11777 112f 00       		.byte	0x0
+ 11778 1130 00       		.byte	0x0
+ 11779 1131 00       		.byte	0x0
+ 11780 1132 34       		.uleb128 0x34
+ 11781 1133 BA0D0000 		.long	0xdba
+ 11782 1137 00000000 		.quad	.LBB308
+ 11782      00000000 
+ 11783 113f 00000000 		.quad	.LBE308
+ 11783      00000000 
+ 11784 1147 03       		.byte	0x3
+ 11785 1148 2106     		.value	0x621
+ 11786 114a 31       		.uleb128 0x31
+ 11787 114b CC0D0000 		.long	0xdcc
+ 11788 114f 03       		.byte	0x3
+ 11789 1150 91       		.byte	0x91
+ 11790 1151 B065     		.sleb128 -3408
+ 11791 1153 32       		.uleb128 0x32
+ 11792 1154 00000000 		.quad	.LBB309
+ 11792      00000000 
+ 11793 115c 00000000 		.quad	.LBE309
+ 11793      00000000 
+ 11794 1164 33       		.uleb128 0x33
+ 11795 1165 D80D0000 		.long	0xdd8
+ 11796 1169 09       		.byte	0x9
+ 11797 116a 03       		.byte	0x3
+ 11798 116b 00000000 		.quad	mask.8002
+ 11798      00000000 
+ 11799 1173 34       		.uleb128 0x34
+ 11800 1174 FB0D0000 		.long	0xdfb
+ 11801 1178 00000000 		.quad	.LBB310
+ 11801      00000000 
+ 11802 1180 00000000 		.quad	.LBE310
+ 11802      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 355
+
+
+ 11803 1188 03       		.byte	0x3
+ 11804 1189 FE04     		.value	0x4fe
+ 11805 118b 31       		.uleb128 0x31
+ 11806 118c 190E0000 		.long	0xe19
+ 11807 1190 03       		.byte	0x3
+ 11808 1191 91       		.byte	0x91
+ 11809 1192 C065     		.sleb128 -3392
+ 11810 1194 31       		.uleb128 0x31
+ 11811 1195 0D0E0000 		.long	0xe0d
+ 11812 1199 03       		.byte	0x3
+ 11813 119a 91       		.byte	0x91
+ 11814 119b D065     		.sleb128 -3376
+ 11815 119d 34       		.uleb128 0x34
+ 11816 119e 260E0000 		.long	0xe26
+ 11817 11a2 00000000 		.quad	.LBB312
+ 11817      00000000 
+ 11818 11aa 00000000 		.quad	.LBE312
+ 11818      00000000 
+ 11819 11b2 03       		.byte	0x3
+ 11820 11b3 7501     		.value	0x175
+ 11821 11b5 31       		.uleb128 0x31
+ 11822 11b6 440E0000 		.long	0xe44
+ 11823 11ba 03       		.byte	0x3
+ 11824 11bb 91       		.byte	0x91
+ 11825 11bc E065     		.sleb128 -3360
+ 11826 11be 31       		.uleb128 0x31
+ 11827 11bf 380E0000 		.long	0xe38
+ 11828 11c3 03       		.byte	0x3
+ 11829 11c4 91       		.byte	0x91
+ 11830 11c5 F065     		.sleb128 -3344
+ 11831 11c7 00       		.byte	0x0
+ 11832 11c8 00       		.byte	0x0
+ 11833 11c9 00       		.byte	0x0
+ 11834 11ca 00       		.byte	0x0
+ 11835 11cb 00       		.byte	0x0
+ 11836 11cc 00       		.byte	0x0
+ 11837 11cd 30       		.uleb128 0x30
+ 11838 11ce E30C0000 		.long	0xce3
+ 11839 11d2 00000000 		.quad	.LBB314
+ 11839      00000000 
+ 11840 11da 00000000 		.quad	.LBE314
+ 11840      00000000 
+ 11841 11e2 03       		.byte	0x3
+ 11842 11e3 D106     		.value	0x6d1
+ 11843 11e5 93120000 		.long	0x1293
+ 11844 11e9 31       		.uleb128 0x31
+ 11845 11ea 010D0000 		.long	0xd01
+ 11846 11ee 03       		.byte	0x3
+ 11847 11ef 91       		.byte	0x91
+ 11848 11f0 8C66     		.sleb128 -3316
+ 11849 11f2 31       		.uleb128 0x31
+ 11850 11f3 F50C0000 		.long	0xcf5
+ 11851 11f7 03       		.byte	0x3
+ 11852 11f8 91       		.byte	0x91
+ 11853 11f9 9066     		.sleb128 -3312
+ 11854 11fb 32       		.uleb128 0x32
+ 11855 11fc 00000000 		.quad	.LBB315
+
GAS LISTING /tmp/ccPaCTqg.s 			page 356
+
+
+ 11855      00000000 
+ 11856 1204 00000000 		.quad	.LBE315
+ 11856      00000000 
+ 11857 120c 33       		.uleb128 0x33
+ 11858 120d 0D0D0000 		.long	0xd0d
+ 11859 1211 03       		.byte	0x3
+ 11860 1212 76       		.byte	0x76
+ 11861 1213 D060     		.sleb128 -4016
+ 11862 1215 30       		.uleb128 0x30
+ 11863 1216 1A0D0000 		.long	0xd1a
+ 11864 121a 00000000 		.quad	.LBB316
+ 11864      00000000 
+ 11865 1222 00000000 		.quad	.LBE316
+ 11865      00000000 
+ 11866 122a 03       		.byte	0x3
+ 11867 122b 8A06     		.value	0x68a
+ 11868 122d 44120000 		.long	0x1244
+ 11869 1231 31       		.uleb128 0x31
+ 11870 1232 380D0000 		.long	0xd38
+ 11871 1236 03       		.byte	0x3
+ 11872 1237 91       		.byte	0x91
+ 11873 1238 AC66     		.sleb128 -3284
+ 11874 123a 31       		.uleb128 0x31
+ 11875 123b 2C0D0000 		.long	0xd2c
+ 11876 123f 03       		.byte	0x3
+ 11877 1240 91       		.byte	0x91
+ 11878 1241 B066     		.sleb128 -3280
+ 11879 1243 00       		.byte	0x0
+ 11880 1244 34       		.uleb128 0x34
+ 11881 1245 450D0000 		.long	0xd45
+ 11882 1249 00000000 		.quad	.LBB318
+ 11882      00000000 
+ 11883 1251 00000000 		.quad	.LBE318
+ 11883      00000000 
+ 11884 1259 03       		.byte	0x3
+ 11885 125a 8B06     		.value	0x68b
+ 11886 125c 31       		.uleb128 0x31
+ 11887 125d 570D0000 		.long	0xd57
+ 11888 1261 03       		.byte	0x3
+ 11889 1262 91       		.byte	0x91
+ 11890 1263 C066     		.sleb128 -3264
+ 11891 1265 34       		.uleb128 0x34
+ 11892 1266 640D0000 		.long	0xd64
+ 11893 126a 00000000 		.quad	.LBB320
+ 11893      00000000 
+ 11894 1272 00000000 		.quad	.LBE320
+ 11894      00000000 
+ 11895 127a 03       		.byte	0x3
+ 11896 127b 4905     		.value	0x549
+ 11897 127d 31       		.uleb128 0x31
+ 11898 127e 820D0000 		.long	0xd82
+ 11899 1282 03       		.byte	0x3
+ 11900 1283 91       		.byte	0x91
+ 11901 1284 DC66     		.sleb128 -3236
+ 11902 1286 31       		.uleb128 0x31
+ 11903 1287 760D0000 		.long	0xd76
+ 11904 128b 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 357
+
+
+ 11905 128c 91       		.byte	0x91
+ 11906 128d E066     		.sleb128 -3232
+ 11907 128f 00       		.byte	0x0
+ 11908 1290 00       		.byte	0x0
+ 11909 1291 00       		.byte	0x0
+ 11910 1292 00       		.byte	0x0
+ 11911 1293 30       		.uleb128 0x30
+ 11912 1294 8F0D0000 		.long	0xd8f
+ 11913 1298 00000000 		.quad	.LBB322
+ 11913      00000000 
+ 11914 12a0 00000000 		.quad	.LBE322
+ 11914      00000000 
+ 11915 12a8 03       		.byte	0x3
+ 11916 12a9 D106     		.value	0x6d1
+ 11917 12ab A7140000 		.long	0x14a7
+ 11918 12af 31       		.uleb128 0x31
+ 11919 12b0 A10D0000 		.long	0xda1
+ 11920 12b4 03       		.byte	0x3
+ 11921 12b5 91       		.byte	0x91
+ 11922 12b6 F066     		.sleb128 -3216
+ 11923 12b8 32       		.uleb128 0x32
+ 11924 12b9 00000000 		.quad	.LBB323
+ 11924      00000000 
+ 11925 12c1 00000000 		.quad	.LBE323
+ 11925      00000000 
+ 11926 12c9 33       		.uleb128 0x33
+ 11927 12ca AD0D0000 		.long	0xdad
+ 11928 12ce 03       		.byte	0x3
+ 11929 12cf 76       		.byte	0x76
+ 11930 12d0 E060     		.sleb128 -4000
+ 11931 12d2 30       		.uleb128 0x30
+ 11932 12d3 BA0D0000 		.long	0xdba
+ 11933 12d7 00000000 		.quad	.LBB324
+ 11933      00000000 
+ 11934 12df 00000000 		.quad	.LBE324
+ 11934      00000000 
+ 11935 12e7 03       		.byte	0x3
+ 11936 12e8 1F06     		.value	0x61f
+ 11937 12ea 6F130000 		.long	0x136f
+ 11938 12ee 31       		.uleb128 0x31
+ 11939 12ef CC0D0000 		.long	0xdcc
+ 11940 12f3 03       		.byte	0x3
+ 11941 12f4 91       		.byte	0x91
+ 11942 12f5 8067     		.sleb128 -3200
+ 11943 12f7 32       		.uleb128 0x32
+ 11944 12f8 00000000 		.quad	.LBB325
+ 11944      00000000 
+ 11945 1300 00000000 		.quad	.LBE325
+ 11945      00000000 
+ 11946 1308 33       		.uleb128 0x33
+ 11947 1309 D80D0000 		.long	0xdd8
+ 11948 130d 09       		.byte	0x9
+ 11949 130e 03       		.byte	0x3
+ 11950 130f 00000000 		.quad	mask.8002
+ 11950      00000000 
+ 11951 1317 34       		.uleb128 0x34
+ 11952 1318 FB0D0000 		.long	0xdfb
+
GAS LISTING /tmp/ccPaCTqg.s 			page 358
+
+
+ 11953 131c 00000000 		.quad	.LBB326
+ 11953      00000000 
+ 11954 1324 00000000 		.quad	.LBE326
+ 11954      00000000 
+ 11955 132c 03       		.byte	0x3
+ 11956 132d FE04     		.value	0x4fe
+ 11957 132f 31       		.uleb128 0x31
+ 11958 1330 190E0000 		.long	0xe19
+ 11959 1334 03       		.byte	0x3
+ 11960 1335 91       		.byte	0x91
+ 11961 1336 9067     		.sleb128 -3184
+ 11962 1338 31       		.uleb128 0x31
+ 11963 1339 0D0E0000 		.long	0xe0d
+ 11964 133d 03       		.byte	0x3
+ 11965 133e 91       		.byte	0x91
+ 11966 133f A067     		.sleb128 -3168
+ 11967 1341 34       		.uleb128 0x34
+ 11968 1342 260E0000 		.long	0xe26
+ 11969 1346 00000000 		.quad	.LBB328
+ 11969      00000000 
+ 11970 134e 00000000 		.quad	.LBE328
+ 11970      00000000 
+ 11971 1356 03       		.byte	0x3
+ 11972 1357 7501     		.value	0x175
+ 11973 1359 31       		.uleb128 0x31
+ 11974 135a 440E0000 		.long	0xe44
+ 11975 135e 03       		.byte	0x3
+ 11976 135f 91       		.byte	0x91
+ 11977 1360 B067     		.sleb128 -3152
+ 11978 1362 31       		.uleb128 0x31
+ 11979 1363 380E0000 		.long	0xe38
+ 11980 1367 03       		.byte	0x3
+ 11981 1368 91       		.byte	0x91
+ 11982 1369 C067     		.sleb128 -3136
+ 11983 136b 00       		.byte	0x0
+ 11984 136c 00       		.byte	0x0
+ 11985 136d 00       		.byte	0x0
+ 11986 136e 00       		.byte	0x0
+ 11987 136f 30       		.uleb128 0x30
+ 11988 1370 BA0D0000 		.long	0xdba
+ 11989 1374 00000000 		.quad	.LBB330
+ 11989      00000000 
+ 11990 137c 00000000 		.quad	.LBE330
+ 11990      00000000 
+ 11991 1384 03       		.byte	0x3
+ 11992 1385 2006     		.value	0x620
+ 11993 1387 0C140000 		.long	0x140c
+ 11994 138b 31       		.uleb128 0x31
+ 11995 138c CC0D0000 		.long	0xdcc
+ 11996 1390 03       		.byte	0x3
+ 11997 1391 91       		.byte	0x91
+ 11998 1392 D067     		.sleb128 -3120
+ 11999 1394 32       		.uleb128 0x32
+ 12000 1395 00000000 		.quad	.LBB331
+ 12000      00000000 
+ 12001 139d 00000000 		.quad	.LBE331
+ 12001      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 359
+
+
+ 12002 13a5 33       		.uleb128 0x33
+ 12003 13a6 D80D0000 		.long	0xdd8
+ 12004 13aa 09       		.byte	0x9
+ 12005 13ab 03       		.byte	0x3
+ 12006 13ac 00000000 		.quad	mask.8002
+ 12006      00000000 
+ 12007 13b4 34       		.uleb128 0x34
+ 12008 13b5 FB0D0000 		.long	0xdfb
+ 12009 13b9 00000000 		.quad	.LBB332
+ 12009      00000000 
+ 12010 13c1 00000000 		.quad	.LBE332
+ 12010      00000000 
+ 12011 13c9 03       		.byte	0x3
+ 12012 13ca FE04     		.value	0x4fe
+ 12013 13cc 31       		.uleb128 0x31
+ 12014 13cd 190E0000 		.long	0xe19
+ 12015 13d1 03       		.byte	0x3
+ 12016 13d2 91       		.byte	0x91
+ 12017 13d3 E067     		.sleb128 -3104
+ 12018 13d5 31       		.uleb128 0x31
+ 12019 13d6 0D0E0000 		.long	0xe0d
+ 12020 13da 03       		.byte	0x3
+ 12021 13db 91       		.byte	0x91
+ 12022 13dc F067     		.sleb128 -3088
+ 12023 13de 34       		.uleb128 0x34
+ 12024 13df 260E0000 		.long	0xe26
+ 12025 13e3 00000000 		.quad	.LBB334
+ 12025      00000000 
+ 12026 13eb 00000000 		.quad	.LBE334
+ 12026      00000000 
+ 12027 13f3 03       		.byte	0x3
+ 12028 13f4 7501     		.value	0x175
+ 12029 13f6 31       		.uleb128 0x31
+ 12030 13f7 440E0000 		.long	0xe44
+ 12031 13fb 03       		.byte	0x3
+ 12032 13fc 91       		.byte	0x91
+ 12033 13fd 8068     		.sleb128 -3072
+ 12034 13ff 31       		.uleb128 0x31
+ 12035 1400 380E0000 		.long	0xe38
+ 12036 1404 03       		.byte	0x3
+ 12037 1405 91       		.byte	0x91
+ 12038 1406 9068     		.sleb128 -3056
+ 12039 1408 00       		.byte	0x0
+ 12040 1409 00       		.byte	0x0
+ 12041 140a 00       		.byte	0x0
+ 12042 140b 00       		.byte	0x0
+ 12043 140c 34       		.uleb128 0x34
+ 12044 140d BA0D0000 		.long	0xdba
+ 12045 1411 00000000 		.quad	.LBB336
+ 12045      00000000 
+ 12046 1419 00000000 		.quad	.LBE336
+ 12046      00000000 
+ 12047 1421 03       		.byte	0x3
+ 12048 1422 2106     		.value	0x621
+ 12049 1424 31       		.uleb128 0x31
+ 12050 1425 CC0D0000 		.long	0xdcc
+ 12051 1429 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 360
+
+
+ 12052 142a 91       		.byte	0x91
+ 12053 142b A068     		.sleb128 -3040
+ 12054 142d 32       		.uleb128 0x32
+ 12055 142e 00000000 		.quad	.LBB337
+ 12055      00000000 
+ 12056 1436 00000000 		.quad	.LBE337
+ 12056      00000000 
+ 12057 143e 33       		.uleb128 0x33
+ 12058 143f D80D0000 		.long	0xdd8
+ 12059 1443 09       		.byte	0x9
+ 12060 1444 03       		.byte	0x3
+ 12061 1445 00000000 		.quad	mask.8002
+ 12061      00000000 
+ 12062 144d 34       		.uleb128 0x34
+ 12063 144e FB0D0000 		.long	0xdfb
+ 12064 1452 00000000 		.quad	.LBB338
+ 12064      00000000 
+ 12065 145a 00000000 		.quad	.LBE338
+ 12065      00000000 
+ 12066 1462 03       		.byte	0x3
+ 12067 1463 FE04     		.value	0x4fe
+ 12068 1465 31       		.uleb128 0x31
+ 12069 1466 190E0000 		.long	0xe19
+ 12070 146a 03       		.byte	0x3
+ 12071 146b 91       		.byte	0x91
+ 12072 146c B068     		.sleb128 -3024
+ 12073 146e 31       		.uleb128 0x31
+ 12074 146f 0D0E0000 		.long	0xe0d
+ 12075 1473 03       		.byte	0x3
+ 12076 1474 91       		.byte	0x91
+ 12077 1475 C068     		.sleb128 -3008
+ 12078 1477 34       		.uleb128 0x34
+ 12079 1478 260E0000 		.long	0xe26
+ 12080 147c 00000000 		.quad	.LBB340
+ 12080      00000000 
+ 12081 1484 00000000 		.quad	.LBE340
+ 12081      00000000 
+ 12082 148c 03       		.byte	0x3
+ 12083 148d 7501     		.value	0x175
+ 12084 148f 31       		.uleb128 0x31
+ 12085 1490 440E0000 		.long	0xe44
+ 12086 1494 03       		.byte	0x3
+ 12087 1495 91       		.byte	0x91
+ 12088 1496 D068     		.sleb128 -2992
+ 12089 1498 31       		.uleb128 0x31
+ 12090 1499 380E0000 		.long	0xe38
+ 12091 149d 03       		.byte	0x3
+ 12092 149e 91       		.byte	0x91
+ 12093 149f E068     		.sleb128 -2976
+ 12094 14a1 00       		.byte	0x0
+ 12095 14a2 00       		.byte	0x0
+ 12096 14a3 00       		.byte	0x0
+ 12097 14a4 00       		.byte	0x0
+ 12098 14a5 00       		.byte	0x0
+ 12099 14a6 00       		.byte	0x0
+ 12100 14a7 30       		.uleb128 0x30
+ 12101 14a8 E30C0000 		.long	0xce3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 361
+
+
+ 12102 14ac 00000000 		.quad	.LBB342
+ 12102      00000000 
+ 12103 14b4 00000000 		.quad	.LBE342
+ 12103      00000000 
+ 12104 14bc 03       		.byte	0x3
+ 12105 14bd D206     		.value	0x6d2
+ 12106 14bf 6D150000 		.long	0x156d
+ 12107 14c3 31       		.uleb128 0x31
+ 12108 14c4 010D0000 		.long	0xd01
+ 12109 14c8 03       		.byte	0x3
+ 12110 14c9 91       		.byte	0x91
+ 12111 14ca FC68     		.sleb128 -2948
+ 12112 14cc 31       		.uleb128 0x31
+ 12113 14cd F50C0000 		.long	0xcf5
+ 12114 14d1 03       		.byte	0x3
+ 12115 14d2 91       		.byte	0x91
+ 12116 14d3 8069     		.sleb128 -2944
+ 12117 14d5 32       		.uleb128 0x32
+ 12118 14d6 00000000 		.quad	.LBB343
+ 12118      00000000 
+ 12119 14de 00000000 		.quad	.LBE343
+ 12119      00000000 
+ 12120 14e6 33       		.uleb128 0x33
+ 12121 14e7 0D0D0000 		.long	0xd0d
+ 12122 14eb 03       		.byte	0x3
+ 12123 14ec 76       		.byte	0x76
+ 12124 14ed F060     		.sleb128 -3984
+ 12125 14ef 30       		.uleb128 0x30
+ 12126 14f0 1A0D0000 		.long	0xd1a
+ 12127 14f4 00000000 		.quad	.LBB344
+ 12127      00000000 
+ 12128 14fc 00000000 		.quad	.LBE344
+ 12128      00000000 
+ 12129 1504 03       		.byte	0x3
+ 12130 1505 8A06     		.value	0x68a
+ 12131 1507 1E150000 		.long	0x151e
+ 12132 150b 31       		.uleb128 0x31
+ 12133 150c 380D0000 		.long	0xd38
+ 12134 1510 03       		.byte	0x3
+ 12135 1511 91       		.byte	0x91
+ 12136 1512 9C69     		.sleb128 -2916
+ 12137 1514 31       		.uleb128 0x31
+ 12138 1515 2C0D0000 		.long	0xd2c
+ 12139 1519 03       		.byte	0x3
+ 12140 151a 91       		.byte	0x91
+ 12141 151b A069     		.sleb128 -2912
+ 12142 151d 00       		.byte	0x0
+ 12143 151e 34       		.uleb128 0x34
+ 12144 151f 450D0000 		.long	0xd45
+ 12145 1523 00000000 		.quad	.LBB346
+ 12145      00000000 
+ 12146 152b 00000000 		.quad	.LBE346
+ 12146      00000000 
+ 12147 1533 03       		.byte	0x3
+ 12148 1534 8B06     		.value	0x68b
+ 12149 1536 31       		.uleb128 0x31
+ 12150 1537 570D0000 		.long	0xd57
+
GAS LISTING /tmp/ccPaCTqg.s 			page 362
+
+
+ 12151 153b 03       		.byte	0x3
+ 12152 153c 91       		.byte	0x91
+ 12153 153d B069     		.sleb128 -2896
+ 12154 153f 34       		.uleb128 0x34
+ 12155 1540 640D0000 		.long	0xd64
+ 12156 1544 00000000 		.quad	.LBB348
+ 12156      00000000 
+ 12157 154c 00000000 		.quad	.LBE348
+ 12157      00000000 
+ 12158 1554 03       		.byte	0x3
+ 12159 1555 4905     		.value	0x549
+ 12160 1557 31       		.uleb128 0x31
+ 12161 1558 820D0000 		.long	0xd82
+ 12162 155c 03       		.byte	0x3
+ 12163 155d 91       		.byte	0x91
+ 12164 155e CC69     		.sleb128 -2868
+ 12165 1560 31       		.uleb128 0x31
+ 12166 1561 760D0000 		.long	0xd76
+ 12167 1565 03       		.byte	0x3
+ 12168 1566 91       		.byte	0x91
+ 12169 1567 D069     		.sleb128 -2864
+ 12170 1569 00       		.byte	0x0
+ 12171 156a 00       		.byte	0x0
+ 12172 156b 00       		.byte	0x0
+ 12173 156c 00       		.byte	0x0
+ 12174 156d 30       		.uleb128 0x30
+ 12175 156e 8F0D0000 		.long	0xd8f
+ 12176 1572 00000000 		.quad	.LBB350
+ 12176      00000000 
+ 12177 157a 00000000 		.quad	.LBE350
+ 12177      00000000 
+ 12178 1582 03       		.byte	0x3
+ 12179 1583 D206     		.value	0x6d2
+ 12180 1585 81170000 		.long	0x1781
+ 12181 1589 31       		.uleb128 0x31
+ 12182 158a A10D0000 		.long	0xda1
+ 12183 158e 03       		.byte	0x3
+ 12184 158f 91       		.byte	0x91
+ 12185 1590 E069     		.sleb128 -2848
+ 12186 1592 32       		.uleb128 0x32
+ 12187 1593 00000000 		.quad	.LBB351
+ 12187      00000000 
+ 12188 159b 00000000 		.quad	.LBE351
+ 12188      00000000 
+ 12189 15a3 33       		.uleb128 0x33
+ 12190 15a4 AD0D0000 		.long	0xdad
+ 12191 15a8 03       		.byte	0x3
+ 12192 15a9 76       		.byte	0x76
+ 12193 15aa 8061     		.sleb128 -3968
+ 12194 15ac 30       		.uleb128 0x30
+ 12195 15ad BA0D0000 		.long	0xdba
+ 12196 15b1 00000000 		.quad	.LBB352
+ 12196      00000000 
+ 12197 15b9 00000000 		.quad	.LBE352
+ 12197      00000000 
+ 12198 15c1 03       		.byte	0x3
+ 12199 15c2 1F06     		.value	0x61f
+
GAS LISTING /tmp/ccPaCTqg.s 			page 363
+
+
+ 12200 15c4 49160000 		.long	0x1649
+ 12201 15c8 31       		.uleb128 0x31
+ 12202 15c9 CC0D0000 		.long	0xdcc
+ 12203 15cd 03       		.byte	0x3
+ 12204 15ce 91       		.byte	0x91
+ 12205 15cf F069     		.sleb128 -2832
+ 12206 15d1 32       		.uleb128 0x32
+ 12207 15d2 00000000 		.quad	.LBB353
+ 12207      00000000 
+ 12208 15da 00000000 		.quad	.LBE353
+ 12208      00000000 
+ 12209 15e2 33       		.uleb128 0x33
+ 12210 15e3 D80D0000 		.long	0xdd8
+ 12211 15e7 09       		.byte	0x9
+ 12212 15e8 03       		.byte	0x3
+ 12213 15e9 00000000 		.quad	mask.8002
+ 12213      00000000 
+ 12214 15f1 34       		.uleb128 0x34
+ 12215 15f2 FB0D0000 		.long	0xdfb
+ 12216 15f6 00000000 		.quad	.LBB354
+ 12216      00000000 
+ 12217 15fe 00000000 		.quad	.LBE354
+ 12217      00000000 
+ 12218 1606 03       		.byte	0x3
+ 12219 1607 FE04     		.value	0x4fe
+ 12220 1609 31       		.uleb128 0x31
+ 12221 160a 190E0000 		.long	0xe19
+ 12222 160e 03       		.byte	0x3
+ 12223 160f 91       		.byte	0x91
+ 12224 1610 806A     		.sleb128 -2816
+ 12225 1612 31       		.uleb128 0x31
+ 12226 1613 0D0E0000 		.long	0xe0d
+ 12227 1617 03       		.byte	0x3
+ 12228 1618 91       		.byte	0x91
+ 12229 1619 906A     		.sleb128 -2800
+ 12230 161b 34       		.uleb128 0x34
+ 12231 161c 260E0000 		.long	0xe26
+ 12232 1620 00000000 		.quad	.LBB356
+ 12232      00000000 
+ 12233 1628 00000000 		.quad	.LBE356
+ 12233      00000000 
+ 12234 1630 03       		.byte	0x3
+ 12235 1631 7501     		.value	0x175
+ 12236 1633 31       		.uleb128 0x31
+ 12237 1634 440E0000 		.long	0xe44
+ 12238 1638 03       		.byte	0x3
+ 12239 1639 91       		.byte	0x91
+ 12240 163a A06A     		.sleb128 -2784
+ 12241 163c 31       		.uleb128 0x31
+ 12242 163d 380E0000 		.long	0xe38
+ 12243 1641 03       		.byte	0x3
+ 12244 1642 91       		.byte	0x91
+ 12245 1643 B06A     		.sleb128 -2768
+ 12246 1645 00       		.byte	0x0
+ 12247 1646 00       		.byte	0x0
+ 12248 1647 00       		.byte	0x0
+ 12249 1648 00       		.byte	0x0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 364
+
+
+ 12250 1649 30       		.uleb128 0x30
+ 12251 164a BA0D0000 		.long	0xdba
+ 12252 164e 00000000 		.quad	.LBB358
+ 12252      00000000 
+ 12253 1656 00000000 		.quad	.LBE358
+ 12253      00000000 
+ 12254 165e 03       		.byte	0x3
+ 12255 165f 2006     		.value	0x620
+ 12256 1661 E6160000 		.long	0x16e6
+ 12257 1665 31       		.uleb128 0x31
+ 12258 1666 CC0D0000 		.long	0xdcc
+ 12259 166a 03       		.byte	0x3
+ 12260 166b 91       		.byte	0x91
+ 12261 166c C06A     		.sleb128 -2752
+ 12262 166e 32       		.uleb128 0x32
+ 12263 166f 00000000 		.quad	.LBB359
+ 12263      00000000 
+ 12264 1677 00000000 		.quad	.LBE359
+ 12264      00000000 
+ 12265 167f 33       		.uleb128 0x33
+ 12266 1680 D80D0000 		.long	0xdd8
+ 12267 1684 09       		.byte	0x9
+ 12268 1685 03       		.byte	0x3
+ 12269 1686 00000000 		.quad	mask.8002
+ 12269      00000000 
+ 12270 168e 34       		.uleb128 0x34
+ 12271 168f FB0D0000 		.long	0xdfb
+ 12272 1693 00000000 		.quad	.LBB360
+ 12272      00000000 
+ 12273 169b 00000000 		.quad	.LBE360
+ 12273      00000000 
+ 12274 16a3 03       		.byte	0x3
+ 12275 16a4 FE04     		.value	0x4fe
+ 12276 16a6 31       		.uleb128 0x31
+ 12277 16a7 190E0000 		.long	0xe19
+ 12278 16ab 03       		.byte	0x3
+ 12279 16ac 91       		.byte	0x91
+ 12280 16ad D06A     		.sleb128 -2736
+ 12281 16af 31       		.uleb128 0x31
+ 12282 16b0 0D0E0000 		.long	0xe0d
+ 12283 16b4 03       		.byte	0x3
+ 12284 16b5 91       		.byte	0x91
+ 12285 16b6 E06A     		.sleb128 -2720
+ 12286 16b8 34       		.uleb128 0x34
+ 12287 16b9 260E0000 		.long	0xe26
+ 12288 16bd 00000000 		.quad	.LBB362
+ 12288      00000000 
+ 12289 16c5 00000000 		.quad	.LBE362
+ 12289      00000000 
+ 12290 16cd 03       		.byte	0x3
+ 12291 16ce 7501     		.value	0x175
+ 12292 16d0 31       		.uleb128 0x31
+ 12293 16d1 440E0000 		.long	0xe44
+ 12294 16d5 03       		.byte	0x3
+ 12295 16d6 91       		.byte	0x91
+ 12296 16d7 F06A     		.sleb128 -2704
+ 12297 16d9 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s 			page 365
+
+
+ 12298 16da 380E0000 		.long	0xe38
+ 12299 16de 03       		.byte	0x3
+ 12300 16df 91       		.byte	0x91
+ 12301 16e0 806B     		.sleb128 -2688
+ 12302 16e2 00       		.byte	0x0
+ 12303 16e3 00       		.byte	0x0
+ 12304 16e4 00       		.byte	0x0
+ 12305 16e5 00       		.byte	0x0
+ 12306 16e6 34       		.uleb128 0x34
+ 12307 16e7 BA0D0000 		.long	0xdba
+ 12308 16eb 00000000 		.quad	.LBB364
+ 12308      00000000 
+ 12309 16f3 00000000 		.quad	.LBE364
+ 12309      00000000 
+ 12310 16fb 03       		.byte	0x3
+ 12311 16fc 2106     		.value	0x621
+ 12312 16fe 31       		.uleb128 0x31
+ 12313 16ff CC0D0000 		.long	0xdcc
+ 12314 1703 03       		.byte	0x3
+ 12315 1704 91       		.byte	0x91
+ 12316 1705 906B     		.sleb128 -2672
+ 12317 1707 32       		.uleb128 0x32
+ 12318 1708 00000000 		.quad	.LBB365
+ 12318      00000000 
+ 12319 1710 00000000 		.quad	.LBE365
+ 12319      00000000 
+ 12320 1718 33       		.uleb128 0x33
+ 12321 1719 D80D0000 		.long	0xdd8
+ 12322 171d 09       		.byte	0x9
+ 12323 171e 03       		.byte	0x3
+ 12324 171f 00000000 		.quad	mask.8002
+ 12324      00000000 
+ 12325 1727 34       		.uleb128 0x34
+ 12326 1728 FB0D0000 		.long	0xdfb
+ 12327 172c 00000000 		.quad	.LBB366
+ 12327      00000000 
+ 12328 1734 00000000 		.quad	.LBE366
+ 12328      00000000 
+ 12329 173c 03       		.byte	0x3
+ 12330 173d FE04     		.value	0x4fe
+ 12331 173f 31       		.uleb128 0x31
+ 12332 1740 190E0000 		.long	0xe19
+ 12333 1744 03       		.byte	0x3
+ 12334 1745 91       		.byte	0x91
+ 12335 1746 A06B     		.sleb128 -2656
+ 12336 1748 31       		.uleb128 0x31
+ 12337 1749 0D0E0000 		.long	0xe0d
+ 12338 174d 03       		.byte	0x3
+ 12339 174e 91       		.byte	0x91
+ 12340 174f B06B     		.sleb128 -2640
+ 12341 1751 34       		.uleb128 0x34
+ 12342 1752 260E0000 		.long	0xe26
+ 12343 1756 00000000 		.quad	.LBB368
+ 12343      00000000 
+ 12344 175e 00000000 		.quad	.LBE368
+ 12344      00000000 
+ 12345 1766 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 366
+
+
+ 12346 1767 7501     		.value	0x175
+ 12347 1769 31       		.uleb128 0x31
+ 12348 176a 440E0000 		.long	0xe44
+ 12349 176e 03       		.byte	0x3
+ 12350 176f 91       		.byte	0x91
+ 12351 1770 C06B     		.sleb128 -2624
+ 12352 1772 31       		.uleb128 0x31
+ 12353 1773 380E0000 		.long	0xe38
+ 12354 1777 03       		.byte	0x3
+ 12355 1778 91       		.byte	0x91
+ 12356 1779 D06B     		.sleb128 -2608
+ 12357 177b 00       		.byte	0x0
+ 12358 177c 00       		.byte	0x0
+ 12359 177d 00       		.byte	0x0
+ 12360 177e 00       		.byte	0x0
+ 12361 177f 00       		.byte	0x0
+ 12362 1780 00       		.byte	0x0
+ 12363 1781 30       		.uleb128 0x30
+ 12364 1782 E30C0000 		.long	0xce3
+ 12365 1786 00000000 		.quad	.LBB370
+ 12365      00000000 
+ 12366 178e 00000000 		.quad	.LBE370
+ 12366      00000000 
+ 12367 1796 03       		.byte	0x3
+ 12368 1797 D306     		.value	0x6d3
+ 12369 1799 47180000 		.long	0x1847
+ 12370 179d 31       		.uleb128 0x31
+ 12371 179e 010D0000 		.long	0xd01
+ 12372 17a2 03       		.byte	0x3
+ 12373 17a3 91       		.byte	0x91
+ 12374 17a4 EC6B     		.sleb128 -2580
+ 12375 17a6 31       		.uleb128 0x31
+ 12376 17a7 F50C0000 		.long	0xcf5
+ 12377 17ab 03       		.byte	0x3
+ 12378 17ac 91       		.byte	0x91
+ 12379 17ad F06B     		.sleb128 -2576
+ 12380 17af 32       		.uleb128 0x32
+ 12381 17b0 00000000 		.quad	.LBB371
+ 12381      00000000 
+ 12382 17b8 00000000 		.quad	.LBE371
+ 12382      00000000 
+ 12383 17c0 33       		.uleb128 0x33
+ 12384 17c1 0D0D0000 		.long	0xd0d
+ 12385 17c5 03       		.byte	0x3
+ 12386 17c6 76       		.byte	0x76
+ 12387 17c7 9061     		.sleb128 -3952
+ 12388 17c9 30       		.uleb128 0x30
+ 12389 17ca 1A0D0000 		.long	0xd1a
+ 12390 17ce 00000000 		.quad	.LBB372
+ 12390      00000000 
+ 12391 17d6 00000000 		.quad	.LBE372
+ 12391      00000000 
+ 12392 17de 03       		.byte	0x3
+ 12393 17df 8A06     		.value	0x68a
+ 12394 17e1 F8170000 		.long	0x17f8
+ 12395 17e5 31       		.uleb128 0x31
+ 12396 17e6 380D0000 		.long	0xd38
+
GAS LISTING /tmp/ccPaCTqg.s 			page 367
+
+
+ 12397 17ea 03       		.byte	0x3
+ 12398 17eb 91       		.byte	0x91
+ 12399 17ec 8C6C     		.sleb128 -2548
+ 12400 17ee 31       		.uleb128 0x31
+ 12401 17ef 2C0D0000 		.long	0xd2c
+ 12402 17f3 03       		.byte	0x3
+ 12403 17f4 91       		.byte	0x91
+ 12404 17f5 906C     		.sleb128 -2544
+ 12405 17f7 00       		.byte	0x0
+ 12406 17f8 34       		.uleb128 0x34
+ 12407 17f9 450D0000 		.long	0xd45
+ 12408 17fd 00000000 		.quad	.LBB374
+ 12408      00000000 
+ 12409 1805 00000000 		.quad	.LBE374
+ 12409      00000000 
+ 12410 180d 03       		.byte	0x3
+ 12411 180e 8B06     		.value	0x68b
+ 12412 1810 31       		.uleb128 0x31
+ 12413 1811 570D0000 		.long	0xd57
+ 12414 1815 03       		.byte	0x3
+ 12415 1816 91       		.byte	0x91
+ 12416 1817 A06C     		.sleb128 -2528
+ 12417 1819 34       		.uleb128 0x34
+ 12418 181a 640D0000 		.long	0xd64
+ 12419 181e 00000000 		.quad	.LBB376
+ 12419      00000000 
+ 12420 1826 00000000 		.quad	.LBE376
+ 12420      00000000 
+ 12421 182e 03       		.byte	0x3
+ 12422 182f 4905     		.value	0x549
+ 12423 1831 31       		.uleb128 0x31
+ 12424 1832 820D0000 		.long	0xd82
+ 12425 1836 03       		.byte	0x3
+ 12426 1837 91       		.byte	0x91
+ 12427 1838 BC6C     		.sleb128 -2500
+ 12428 183a 31       		.uleb128 0x31
+ 12429 183b 760D0000 		.long	0xd76
+ 12430 183f 03       		.byte	0x3
+ 12431 1840 91       		.byte	0x91
+ 12432 1841 C06C     		.sleb128 -2496
+ 12433 1843 00       		.byte	0x0
+ 12434 1844 00       		.byte	0x0
+ 12435 1845 00       		.byte	0x0
+ 12436 1846 00       		.byte	0x0
+ 12437 1847 30       		.uleb128 0x30
+ 12438 1848 8F0D0000 		.long	0xd8f
+ 12439 184c 00000000 		.quad	.LBB378
+ 12439      00000000 
+ 12440 1854 00000000 		.quad	.LBE378
+ 12440      00000000 
+ 12441 185c 03       		.byte	0x3
+ 12442 185d D306     		.value	0x6d3
+ 12443 185f 5B1A0000 		.long	0x1a5b
+ 12444 1863 31       		.uleb128 0x31
+ 12445 1864 A10D0000 		.long	0xda1
+ 12446 1868 03       		.byte	0x3
+ 12447 1869 91       		.byte	0x91
+
GAS LISTING /tmp/ccPaCTqg.s 			page 368
+
+
+ 12448 186a D06C     		.sleb128 -2480
+ 12449 186c 32       		.uleb128 0x32
+ 12450 186d 00000000 		.quad	.LBB379
+ 12450      00000000 
+ 12451 1875 00000000 		.quad	.LBE379
+ 12451      00000000 
+ 12452 187d 33       		.uleb128 0x33
+ 12453 187e AD0D0000 		.long	0xdad
+ 12454 1882 03       		.byte	0x3
+ 12455 1883 76       		.byte	0x76
+ 12456 1884 A061     		.sleb128 -3936
+ 12457 1886 30       		.uleb128 0x30
+ 12458 1887 BA0D0000 		.long	0xdba
+ 12459 188b 00000000 		.quad	.LBB380
+ 12459      00000000 
+ 12460 1893 00000000 		.quad	.LBE380
+ 12460      00000000 
+ 12461 189b 03       		.byte	0x3
+ 12462 189c 1F06     		.value	0x61f
+ 12463 189e 23190000 		.long	0x1923
+ 12464 18a2 31       		.uleb128 0x31
+ 12465 18a3 CC0D0000 		.long	0xdcc
+ 12466 18a7 03       		.byte	0x3
+ 12467 18a8 91       		.byte	0x91
+ 12468 18a9 E06C     		.sleb128 -2464
+ 12469 18ab 32       		.uleb128 0x32
+ 12470 18ac 00000000 		.quad	.LBB381
+ 12470      00000000 
+ 12471 18b4 00000000 		.quad	.LBE381
+ 12471      00000000 
+ 12472 18bc 33       		.uleb128 0x33
+ 12473 18bd D80D0000 		.long	0xdd8
+ 12474 18c1 09       		.byte	0x9
+ 12475 18c2 03       		.byte	0x3
+ 12476 18c3 00000000 		.quad	mask.8002
+ 12476      00000000 
+ 12477 18cb 34       		.uleb128 0x34
+ 12478 18cc FB0D0000 		.long	0xdfb
+ 12479 18d0 00000000 		.quad	.LBB382
+ 12479      00000000 
+ 12480 18d8 00000000 		.quad	.LBE382
+ 12480      00000000 
+ 12481 18e0 03       		.byte	0x3
+ 12482 18e1 FE04     		.value	0x4fe
+ 12483 18e3 31       		.uleb128 0x31
+ 12484 18e4 190E0000 		.long	0xe19
+ 12485 18e8 03       		.byte	0x3
+ 12486 18e9 91       		.byte	0x91
+ 12487 18ea F06C     		.sleb128 -2448
+ 12488 18ec 31       		.uleb128 0x31
+ 12489 18ed 0D0E0000 		.long	0xe0d
+ 12490 18f1 03       		.byte	0x3
+ 12491 18f2 91       		.byte	0x91
+ 12492 18f3 806D     		.sleb128 -2432
+ 12493 18f5 34       		.uleb128 0x34
+ 12494 18f6 260E0000 		.long	0xe26
+ 12495 18fa 00000000 		.quad	.LBB384
+
GAS LISTING /tmp/ccPaCTqg.s 			page 369
+
+
+ 12495      00000000 
+ 12496 1902 00000000 		.quad	.LBE384
+ 12496      00000000 
+ 12497 190a 03       		.byte	0x3
+ 12498 190b 7501     		.value	0x175
+ 12499 190d 31       		.uleb128 0x31
+ 12500 190e 440E0000 		.long	0xe44
+ 12501 1912 03       		.byte	0x3
+ 12502 1913 91       		.byte	0x91
+ 12503 1914 906D     		.sleb128 -2416
+ 12504 1916 31       		.uleb128 0x31
+ 12505 1917 380E0000 		.long	0xe38
+ 12506 191b 03       		.byte	0x3
+ 12507 191c 91       		.byte	0x91
+ 12508 191d A06D     		.sleb128 -2400
+ 12509 191f 00       		.byte	0x0
+ 12510 1920 00       		.byte	0x0
+ 12511 1921 00       		.byte	0x0
+ 12512 1922 00       		.byte	0x0
+ 12513 1923 30       		.uleb128 0x30
+ 12514 1924 BA0D0000 		.long	0xdba
+ 12515 1928 00000000 		.quad	.LBB386
+ 12515      00000000 
+ 12516 1930 00000000 		.quad	.LBE386
+ 12516      00000000 
+ 12517 1938 03       		.byte	0x3
+ 12518 1939 2006     		.value	0x620
+ 12519 193b C0190000 		.long	0x19c0
+ 12520 193f 31       		.uleb128 0x31
+ 12521 1940 CC0D0000 		.long	0xdcc
+ 12522 1944 03       		.byte	0x3
+ 12523 1945 91       		.byte	0x91
+ 12524 1946 B06D     		.sleb128 -2384
+ 12525 1948 32       		.uleb128 0x32
+ 12526 1949 00000000 		.quad	.LBB387
+ 12526      00000000 
+ 12527 1951 00000000 		.quad	.LBE387
+ 12527      00000000 
+ 12528 1959 33       		.uleb128 0x33
+ 12529 195a D80D0000 		.long	0xdd8
+ 12530 195e 09       		.byte	0x9
+ 12531 195f 03       		.byte	0x3
+ 12532 1960 00000000 		.quad	mask.8002
+ 12532      00000000 
+ 12533 1968 34       		.uleb128 0x34
+ 12534 1969 FB0D0000 		.long	0xdfb
+ 12535 196d 00000000 		.quad	.LBB388
+ 12535      00000000 
+ 12536 1975 00000000 		.quad	.LBE388
+ 12536      00000000 
+ 12537 197d 03       		.byte	0x3
+ 12538 197e FE04     		.value	0x4fe
+ 12539 1980 31       		.uleb128 0x31
+ 12540 1981 190E0000 		.long	0xe19
+ 12541 1985 03       		.byte	0x3
+ 12542 1986 91       		.byte	0x91
+ 12543 1987 C06D     		.sleb128 -2368
+
GAS LISTING /tmp/ccPaCTqg.s 			page 370
+
+
+ 12544 1989 31       		.uleb128 0x31
+ 12545 198a 0D0E0000 		.long	0xe0d
+ 12546 198e 03       		.byte	0x3
+ 12547 198f 91       		.byte	0x91
+ 12548 1990 D06D     		.sleb128 -2352
+ 12549 1992 34       		.uleb128 0x34
+ 12550 1993 260E0000 		.long	0xe26
+ 12551 1997 00000000 		.quad	.LBB390
+ 12551      00000000 
+ 12552 199f 00000000 		.quad	.LBE390
+ 12552      00000000 
+ 12553 19a7 03       		.byte	0x3
+ 12554 19a8 7501     		.value	0x175
+ 12555 19aa 31       		.uleb128 0x31
+ 12556 19ab 440E0000 		.long	0xe44
+ 12557 19af 03       		.byte	0x3
+ 12558 19b0 91       		.byte	0x91
+ 12559 19b1 E06D     		.sleb128 -2336
+ 12560 19b3 31       		.uleb128 0x31
+ 12561 19b4 380E0000 		.long	0xe38
+ 12562 19b8 03       		.byte	0x3
+ 12563 19b9 91       		.byte	0x91
+ 12564 19ba F06D     		.sleb128 -2320
+ 12565 19bc 00       		.byte	0x0
+ 12566 19bd 00       		.byte	0x0
+ 12567 19be 00       		.byte	0x0
+ 12568 19bf 00       		.byte	0x0
+ 12569 19c0 34       		.uleb128 0x34
+ 12570 19c1 BA0D0000 		.long	0xdba
+ 12571 19c5 00000000 		.quad	.LBB392
+ 12571      00000000 
+ 12572 19cd 00000000 		.quad	.LBE392
+ 12572      00000000 
+ 12573 19d5 03       		.byte	0x3
+ 12574 19d6 2106     		.value	0x621
+ 12575 19d8 31       		.uleb128 0x31
+ 12576 19d9 CC0D0000 		.long	0xdcc
+ 12577 19dd 03       		.byte	0x3
+ 12578 19de 91       		.byte	0x91
+ 12579 19df 806E     		.sleb128 -2304
+ 12580 19e1 32       		.uleb128 0x32
+ 12581 19e2 00000000 		.quad	.LBB393
+ 12581      00000000 
+ 12582 19ea 00000000 		.quad	.LBE393
+ 12582      00000000 
+ 12583 19f2 33       		.uleb128 0x33
+ 12584 19f3 D80D0000 		.long	0xdd8
+ 12585 19f7 09       		.byte	0x9
+ 12586 19f8 03       		.byte	0x3
+ 12587 19f9 00000000 		.quad	mask.8002
+ 12587      00000000 
+ 12588 1a01 34       		.uleb128 0x34
+ 12589 1a02 FB0D0000 		.long	0xdfb
+ 12590 1a06 00000000 		.quad	.LBB394
+ 12590      00000000 
+ 12591 1a0e 00000000 		.quad	.LBE394
+ 12591      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 371
+
+
+ 12592 1a16 03       		.byte	0x3
+ 12593 1a17 FE04     		.value	0x4fe
+ 12594 1a19 31       		.uleb128 0x31
+ 12595 1a1a 190E0000 		.long	0xe19
+ 12596 1a1e 03       		.byte	0x3
+ 12597 1a1f 91       		.byte	0x91
+ 12598 1a20 906E     		.sleb128 -2288
+ 12599 1a22 31       		.uleb128 0x31
+ 12600 1a23 0D0E0000 		.long	0xe0d
+ 12601 1a27 03       		.byte	0x3
+ 12602 1a28 91       		.byte	0x91
+ 12603 1a29 A06E     		.sleb128 -2272
+ 12604 1a2b 34       		.uleb128 0x34
+ 12605 1a2c 260E0000 		.long	0xe26
+ 12606 1a30 00000000 		.quad	.LBB396
+ 12606      00000000 
+ 12607 1a38 00000000 		.quad	.LBE396
+ 12607      00000000 
+ 12608 1a40 03       		.byte	0x3
+ 12609 1a41 7501     		.value	0x175
+ 12610 1a43 31       		.uleb128 0x31
+ 12611 1a44 440E0000 		.long	0xe44
+ 12612 1a48 03       		.byte	0x3
+ 12613 1a49 91       		.byte	0x91
+ 12614 1a4a B06E     		.sleb128 -2256
+ 12615 1a4c 31       		.uleb128 0x31
+ 12616 1a4d 380E0000 		.long	0xe38
+ 12617 1a51 03       		.byte	0x3
+ 12618 1a52 91       		.byte	0x91
+ 12619 1a53 C06E     		.sleb128 -2240
+ 12620 1a55 00       		.byte	0x0
+ 12621 1a56 00       		.byte	0x0
+ 12622 1a57 00       		.byte	0x0
+ 12623 1a58 00       		.byte	0x0
+ 12624 1a59 00       		.byte	0x0
+ 12625 1a5a 00       		.byte	0x0
+ 12626 1a5b 30       		.uleb128 0x30
+ 12627 1a5c E30C0000 		.long	0xce3
+ 12628 1a60 00000000 		.quad	.LBB398
+ 12628      00000000 
+ 12629 1a68 00000000 		.quad	.LBE398
+ 12629      00000000 
+ 12630 1a70 03       		.byte	0x3
+ 12631 1a71 D406     		.value	0x6d4
+ 12632 1a73 211B0000 		.long	0x1b21
+ 12633 1a77 31       		.uleb128 0x31
+ 12634 1a78 010D0000 		.long	0xd01
+ 12635 1a7c 03       		.byte	0x3
+ 12636 1a7d 91       		.byte	0x91
+ 12637 1a7e DC6E     		.sleb128 -2212
+ 12638 1a80 31       		.uleb128 0x31
+ 12639 1a81 F50C0000 		.long	0xcf5
+ 12640 1a85 03       		.byte	0x3
+ 12641 1a86 91       		.byte	0x91
+ 12642 1a87 E06E     		.sleb128 -2208
+ 12643 1a89 32       		.uleb128 0x32
+ 12644 1a8a 00000000 		.quad	.LBB399
+
GAS LISTING /tmp/ccPaCTqg.s 			page 372
+
+
+ 12644      00000000 
+ 12645 1a92 00000000 		.quad	.LBE399
+ 12645      00000000 
+ 12646 1a9a 33       		.uleb128 0x33
+ 12647 1a9b 0D0D0000 		.long	0xd0d
+ 12648 1a9f 03       		.byte	0x3
+ 12649 1aa0 76       		.byte	0x76
+ 12650 1aa1 B061     		.sleb128 -3920
+ 12651 1aa3 30       		.uleb128 0x30
+ 12652 1aa4 1A0D0000 		.long	0xd1a
+ 12653 1aa8 00000000 		.quad	.LBB400
+ 12653      00000000 
+ 12654 1ab0 00000000 		.quad	.LBE400
+ 12654      00000000 
+ 12655 1ab8 03       		.byte	0x3
+ 12656 1ab9 8A06     		.value	0x68a
+ 12657 1abb D21A0000 		.long	0x1ad2
+ 12658 1abf 31       		.uleb128 0x31
+ 12659 1ac0 380D0000 		.long	0xd38
+ 12660 1ac4 03       		.byte	0x3
+ 12661 1ac5 91       		.byte	0x91
+ 12662 1ac6 FC6E     		.sleb128 -2180
+ 12663 1ac8 31       		.uleb128 0x31
+ 12664 1ac9 2C0D0000 		.long	0xd2c
+ 12665 1acd 03       		.byte	0x3
+ 12666 1ace 91       		.byte	0x91
+ 12667 1acf 806F     		.sleb128 -2176
+ 12668 1ad1 00       		.byte	0x0
+ 12669 1ad2 34       		.uleb128 0x34
+ 12670 1ad3 450D0000 		.long	0xd45
+ 12671 1ad7 00000000 		.quad	.LBB402
+ 12671      00000000 
+ 12672 1adf 00000000 		.quad	.LBE402
+ 12672      00000000 
+ 12673 1ae7 03       		.byte	0x3
+ 12674 1ae8 8B06     		.value	0x68b
+ 12675 1aea 31       		.uleb128 0x31
+ 12676 1aeb 570D0000 		.long	0xd57
+ 12677 1aef 03       		.byte	0x3
+ 12678 1af0 91       		.byte	0x91
+ 12679 1af1 906F     		.sleb128 -2160
+ 12680 1af3 34       		.uleb128 0x34
+ 12681 1af4 640D0000 		.long	0xd64
+ 12682 1af8 00000000 		.quad	.LBB404
+ 12682      00000000 
+ 12683 1b00 00000000 		.quad	.LBE404
+ 12683      00000000 
+ 12684 1b08 03       		.byte	0x3
+ 12685 1b09 4905     		.value	0x549
+ 12686 1b0b 31       		.uleb128 0x31
+ 12687 1b0c 820D0000 		.long	0xd82
+ 12688 1b10 03       		.byte	0x3
+ 12689 1b11 91       		.byte	0x91
+ 12690 1b12 AC6F     		.sleb128 -2132
+ 12691 1b14 31       		.uleb128 0x31
+ 12692 1b15 760D0000 		.long	0xd76
+ 12693 1b19 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 373
+
+
+ 12694 1b1a 91       		.byte	0x91
+ 12695 1b1b B06F     		.sleb128 -2128
+ 12696 1b1d 00       		.byte	0x0
+ 12697 1b1e 00       		.byte	0x0
+ 12698 1b1f 00       		.byte	0x0
+ 12699 1b20 00       		.byte	0x0
+ 12700 1b21 30       		.uleb128 0x30
+ 12701 1b22 8F0D0000 		.long	0xd8f
+ 12702 1b26 00000000 		.quad	.LBB406
+ 12702      00000000 
+ 12703 1b2e 00000000 		.quad	.LBE406
+ 12703      00000000 
+ 12704 1b36 03       		.byte	0x3
+ 12705 1b37 D406     		.value	0x6d4
+ 12706 1b39 351D0000 		.long	0x1d35
+ 12707 1b3d 31       		.uleb128 0x31
+ 12708 1b3e A10D0000 		.long	0xda1
+ 12709 1b42 03       		.byte	0x3
+ 12710 1b43 91       		.byte	0x91
+ 12711 1b44 C06F     		.sleb128 -2112
+ 12712 1b46 32       		.uleb128 0x32
+ 12713 1b47 00000000 		.quad	.LBB407
+ 12713      00000000 
+ 12714 1b4f 00000000 		.quad	.LBE407
+ 12714      00000000 
+ 12715 1b57 33       		.uleb128 0x33
+ 12716 1b58 AD0D0000 		.long	0xdad
+ 12717 1b5c 03       		.byte	0x3
+ 12718 1b5d 76       		.byte	0x76
+ 12719 1b5e C061     		.sleb128 -3904
+ 12720 1b60 30       		.uleb128 0x30
+ 12721 1b61 BA0D0000 		.long	0xdba
+ 12722 1b65 00000000 		.quad	.LBB408
+ 12722      00000000 
+ 12723 1b6d 00000000 		.quad	.LBE408
+ 12723      00000000 
+ 12724 1b75 03       		.byte	0x3
+ 12725 1b76 1F06     		.value	0x61f
+ 12726 1b78 FD1B0000 		.long	0x1bfd
+ 12727 1b7c 31       		.uleb128 0x31
+ 12728 1b7d CC0D0000 		.long	0xdcc
+ 12729 1b81 03       		.byte	0x3
+ 12730 1b82 91       		.byte	0x91
+ 12731 1b83 D06F     		.sleb128 -2096
+ 12732 1b85 32       		.uleb128 0x32
+ 12733 1b86 00000000 		.quad	.LBB409
+ 12733      00000000 
+ 12734 1b8e 00000000 		.quad	.LBE409
+ 12734      00000000 
+ 12735 1b96 33       		.uleb128 0x33
+ 12736 1b97 D80D0000 		.long	0xdd8
+ 12737 1b9b 09       		.byte	0x9
+ 12738 1b9c 03       		.byte	0x3
+ 12739 1b9d 00000000 		.quad	mask.8002
+ 12739      00000000 
+ 12740 1ba5 34       		.uleb128 0x34
+ 12741 1ba6 FB0D0000 		.long	0xdfb
+
GAS LISTING /tmp/ccPaCTqg.s 			page 374
+
+
+ 12742 1baa 00000000 		.quad	.LBB410
+ 12742      00000000 
+ 12743 1bb2 00000000 		.quad	.LBE410
+ 12743      00000000 
+ 12744 1bba 03       		.byte	0x3
+ 12745 1bbb FE04     		.value	0x4fe
+ 12746 1bbd 31       		.uleb128 0x31
+ 12747 1bbe 190E0000 		.long	0xe19
+ 12748 1bc2 03       		.byte	0x3
+ 12749 1bc3 91       		.byte	0x91
+ 12750 1bc4 E06F     		.sleb128 -2080
+ 12751 1bc6 31       		.uleb128 0x31
+ 12752 1bc7 0D0E0000 		.long	0xe0d
+ 12753 1bcb 03       		.byte	0x3
+ 12754 1bcc 91       		.byte	0x91
+ 12755 1bcd F06F     		.sleb128 -2064
+ 12756 1bcf 34       		.uleb128 0x34
+ 12757 1bd0 260E0000 		.long	0xe26
+ 12758 1bd4 00000000 		.quad	.LBB412
+ 12758      00000000 
+ 12759 1bdc 00000000 		.quad	.LBE412
+ 12759      00000000 
+ 12760 1be4 03       		.byte	0x3
+ 12761 1be5 7501     		.value	0x175
+ 12762 1be7 31       		.uleb128 0x31
+ 12763 1be8 440E0000 		.long	0xe44
+ 12764 1bec 03       		.byte	0x3
+ 12765 1bed 91       		.byte	0x91
+ 12766 1bee 8070     		.sleb128 -2048
+ 12767 1bf0 31       		.uleb128 0x31
+ 12768 1bf1 380E0000 		.long	0xe38
+ 12769 1bf5 03       		.byte	0x3
+ 12770 1bf6 91       		.byte	0x91
+ 12771 1bf7 9070     		.sleb128 -2032
+ 12772 1bf9 00       		.byte	0x0
+ 12773 1bfa 00       		.byte	0x0
+ 12774 1bfb 00       		.byte	0x0
+ 12775 1bfc 00       		.byte	0x0
+ 12776 1bfd 30       		.uleb128 0x30
+ 12777 1bfe BA0D0000 		.long	0xdba
+ 12778 1c02 00000000 		.quad	.LBB414
+ 12778      00000000 
+ 12779 1c0a 00000000 		.quad	.LBE414
+ 12779      00000000 
+ 12780 1c12 03       		.byte	0x3
+ 12781 1c13 2006     		.value	0x620
+ 12782 1c15 9A1C0000 		.long	0x1c9a
+ 12783 1c19 31       		.uleb128 0x31
+ 12784 1c1a CC0D0000 		.long	0xdcc
+ 12785 1c1e 03       		.byte	0x3
+ 12786 1c1f 91       		.byte	0x91
+ 12787 1c20 A070     		.sleb128 -2016
+ 12788 1c22 32       		.uleb128 0x32
+ 12789 1c23 00000000 		.quad	.LBB415
+ 12789      00000000 
+ 12790 1c2b 00000000 		.quad	.LBE415
+ 12790      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 375
+
+
+ 12791 1c33 33       		.uleb128 0x33
+ 12792 1c34 D80D0000 		.long	0xdd8
+ 12793 1c38 09       		.byte	0x9
+ 12794 1c39 03       		.byte	0x3
+ 12795 1c3a 00000000 		.quad	mask.8002
+ 12795      00000000 
+ 12796 1c42 34       		.uleb128 0x34
+ 12797 1c43 FB0D0000 		.long	0xdfb
+ 12798 1c47 00000000 		.quad	.LBB416
+ 12798      00000000 
+ 12799 1c4f 00000000 		.quad	.LBE416
+ 12799      00000000 
+ 12800 1c57 03       		.byte	0x3
+ 12801 1c58 FE04     		.value	0x4fe
+ 12802 1c5a 31       		.uleb128 0x31
+ 12803 1c5b 190E0000 		.long	0xe19
+ 12804 1c5f 03       		.byte	0x3
+ 12805 1c60 91       		.byte	0x91
+ 12806 1c61 B070     		.sleb128 -2000
+ 12807 1c63 31       		.uleb128 0x31
+ 12808 1c64 0D0E0000 		.long	0xe0d
+ 12809 1c68 03       		.byte	0x3
+ 12810 1c69 91       		.byte	0x91
+ 12811 1c6a C070     		.sleb128 -1984
+ 12812 1c6c 34       		.uleb128 0x34
+ 12813 1c6d 260E0000 		.long	0xe26
+ 12814 1c71 00000000 		.quad	.LBB418
+ 12814      00000000 
+ 12815 1c79 00000000 		.quad	.LBE418
+ 12815      00000000 
+ 12816 1c81 03       		.byte	0x3
+ 12817 1c82 7501     		.value	0x175
+ 12818 1c84 31       		.uleb128 0x31
+ 12819 1c85 440E0000 		.long	0xe44
+ 12820 1c89 03       		.byte	0x3
+ 12821 1c8a 91       		.byte	0x91
+ 12822 1c8b D070     		.sleb128 -1968
+ 12823 1c8d 31       		.uleb128 0x31
+ 12824 1c8e 380E0000 		.long	0xe38
+ 12825 1c92 03       		.byte	0x3
+ 12826 1c93 91       		.byte	0x91
+ 12827 1c94 E070     		.sleb128 -1952
+ 12828 1c96 00       		.byte	0x0
+ 12829 1c97 00       		.byte	0x0
+ 12830 1c98 00       		.byte	0x0
+ 12831 1c99 00       		.byte	0x0
+ 12832 1c9a 34       		.uleb128 0x34
+ 12833 1c9b BA0D0000 		.long	0xdba
+ 12834 1c9f 00000000 		.quad	.LBB420
+ 12834      00000000 
+ 12835 1ca7 00000000 		.quad	.LBE420
+ 12835      00000000 
+ 12836 1caf 03       		.byte	0x3
+ 12837 1cb0 2106     		.value	0x621
+ 12838 1cb2 31       		.uleb128 0x31
+ 12839 1cb3 CC0D0000 		.long	0xdcc
+ 12840 1cb7 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 376
+
+
+ 12841 1cb8 91       		.byte	0x91
+ 12842 1cb9 F070     		.sleb128 -1936
+ 12843 1cbb 32       		.uleb128 0x32
+ 12844 1cbc 00000000 		.quad	.LBB421
+ 12844      00000000 
+ 12845 1cc4 00000000 		.quad	.LBE421
+ 12845      00000000 
+ 12846 1ccc 33       		.uleb128 0x33
+ 12847 1ccd D80D0000 		.long	0xdd8
+ 12848 1cd1 09       		.byte	0x9
+ 12849 1cd2 03       		.byte	0x3
+ 12850 1cd3 00000000 		.quad	mask.8002
+ 12850      00000000 
+ 12851 1cdb 34       		.uleb128 0x34
+ 12852 1cdc FB0D0000 		.long	0xdfb
+ 12853 1ce0 00000000 		.quad	.LBB422
+ 12853      00000000 
+ 12854 1ce8 00000000 		.quad	.LBE422
+ 12854      00000000 
+ 12855 1cf0 03       		.byte	0x3
+ 12856 1cf1 FE04     		.value	0x4fe
+ 12857 1cf3 31       		.uleb128 0x31
+ 12858 1cf4 190E0000 		.long	0xe19
+ 12859 1cf8 03       		.byte	0x3
+ 12860 1cf9 91       		.byte	0x91
+ 12861 1cfa 8071     		.sleb128 -1920
+ 12862 1cfc 31       		.uleb128 0x31
+ 12863 1cfd 0D0E0000 		.long	0xe0d
+ 12864 1d01 03       		.byte	0x3
+ 12865 1d02 91       		.byte	0x91
+ 12866 1d03 9071     		.sleb128 -1904
+ 12867 1d05 34       		.uleb128 0x34
+ 12868 1d06 260E0000 		.long	0xe26
+ 12869 1d0a 00000000 		.quad	.LBB424
+ 12869      00000000 
+ 12870 1d12 00000000 		.quad	.LBE424
+ 12870      00000000 
+ 12871 1d1a 03       		.byte	0x3
+ 12872 1d1b 7501     		.value	0x175
+ 12873 1d1d 31       		.uleb128 0x31
+ 12874 1d1e 440E0000 		.long	0xe44
+ 12875 1d22 03       		.byte	0x3
+ 12876 1d23 91       		.byte	0x91
+ 12877 1d24 A071     		.sleb128 -1888
+ 12878 1d26 31       		.uleb128 0x31
+ 12879 1d27 380E0000 		.long	0xe38
+ 12880 1d2b 03       		.byte	0x3
+ 12881 1d2c 91       		.byte	0x91
+ 12882 1d2d B071     		.sleb128 -1872
+ 12883 1d2f 00       		.byte	0x0
+ 12884 1d30 00       		.byte	0x0
+ 12885 1d31 00       		.byte	0x0
+ 12886 1d32 00       		.byte	0x0
+ 12887 1d33 00       		.byte	0x0
+ 12888 1d34 00       		.byte	0x0
+ 12889 1d35 30       		.uleb128 0x30
+ 12890 1d36 E30C0000 		.long	0xce3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 377
+
+
+ 12891 1d3a 00000000 		.quad	.LBB426
+ 12891      00000000 
+ 12892 1d42 00000000 		.quad	.LBE426
+ 12892      00000000 
+ 12893 1d4a 03       		.byte	0x3
+ 12894 1d4b D506     		.value	0x6d5
+ 12895 1d4d FB1D0000 		.long	0x1dfb
+ 12896 1d51 31       		.uleb128 0x31
+ 12897 1d52 010D0000 		.long	0xd01
+ 12898 1d56 03       		.byte	0x3
+ 12899 1d57 91       		.byte	0x91
+ 12900 1d58 CC71     		.sleb128 -1844
+ 12901 1d5a 31       		.uleb128 0x31
+ 12902 1d5b F50C0000 		.long	0xcf5
+ 12903 1d5f 03       		.byte	0x3
+ 12904 1d60 91       		.byte	0x91
+ 12905 1d61 D071     		.sleb128 -1840
+ 12906 1d63 32       		.uleb128 0x32
+ 12907 1d64 00000000 		.quad	.LBB427
+ 12907      00000000 
+ 12908 1d6c 00000000 		.quad	.LBE427
+ 12908      00000000 
+ 12909 1d74 33       		.uleb128 0x33
+ 12910 1d75 0D0D0000 		.long	0xd0d
+ 12911 1d79 03       		.byte	0x3
+ 12912 1d7a 76       		.byte	0x76
+ 12913 1d7b D061     		.sleb128 -3888
+ 12914 1d7d 30       		.uleb128 0x30
+ 12915 1d7e 1A0D0000 		.long	0xd1a
+ 12916 1d82 00000000 		.quad	.LBB428
+ 12916      00000000 
+ 12917 1d8a 00000000 		.quad	.LBE428
+ 12917      00000000 
+ 12918 1d92 03       		.byte	0x3
+ 12919 1d93 8A06     		.value	0x68a
+ 12920 1d95 AC1D0000 		.long	0x1dac
+ 12921 1d99 31       		.uleb128 0x31
+ 12922 1d9a 380D0000 		.long	0xd38
+ 12923 1d9e 03       		.byte	0x3
+ 12924 1d9f 91       		.byte	0x91
+ 12925 1da0 EC71     		.sleb128 -1812
+ 12926 1da2 31       		.uleb128 0x31
+ 12927 1da3 2C0D0000 		.long	0xd2c
+ 12928 1da7 03       		.byte	0x3
+ 12929 1da8 91       		.byte	0x91
+ 12930 1da9 F071     		.sleb128 -1808
+ 12931 1dab 00       		.byte	0x0
+ 12932 1dac 34       		.uleb128 0x34
+ 12933 1dad 450D0000 		.long	0xd45
+ 12934 1db1 00000000 		.quad	.LBB430
+ 12934      00000000 
+ 12935 1db9 00000000 		.quad	.LBE430
+ 12935      00000000 
+ 12936 1dc1 03       		.byte	0x3
+ 12937 1dc2 8B06     		.value	0x68b
+ 12938 1dc4 31       		.uleb128 0x31
+ 12939 1dc5 570D0000 		.long	0xd57
+
GAS LISTING /tmp/ccPaCTqg.s 			page 378
+
+
+ 12940 1dc9 03       		.byte	0x3
+ 12941 1dca 91       		.byte	0x91
+ 12942 1dcb 8072     		.sleb128 -1792
+ 12943 1dcd 34       		.uleb128 0x34
+ 12944 1dce 640D0000 		.long	0xd64
+ 12945 1dd2 00000000 		.quad	.LBB432
+ 12945      00000000 
+ 12946 1dda 00000000 		.quad	.LBE432
+ 12946      00000000 
+ 12947 1de2 03       		.byte	0x3
+ 12948 1de3 4905     		.value	0x549
+ 12949 1de5 31       		.uleb128 0x31
+ 12950 1de6 820D0000 		.long	0xd82
+ 12951 1dea 03       		.byte	0x3
+ 12952 1deb 91       		.byte	0x91
+ 12953 1dec 9C72     		.sleb128 -1764
+ 12954 1dee 31       		.uleb128 0x31
+ 12955 1def 760D0000 		.long	0xd76
+ 12956 1df3 03       		.byte	0x3
+ 12957 1df4 91       		.byte	0x91
+ 12958 1df5 A072     		.sleb128 -1760
+ 12959 1df7 00       		.byte	0x0
+ 12960 1df8 00       		.byte	0x0
+ 12961 1df9 00       		.byte	0x0
+ 12962 1dfa 00       		.byte	0x0
+ 12963 1dfb 30       		.uleb128 0x30
+ 12964 1dfc 8F0D0000 		.long	0xd8f
+ 12965 1e00 00000000 		.quad	.LBB434
+ 12965      00000000 
+ 12966 1e08 00000000 		.quad	.LBE434
+ 12966      00000000 
+ 12967 1e10 03       		.byte	0x3
+ 12968 1e11 D506     		.value	0x6d5
+ 12969 1e13 0F200000 		.long	0x200f
+ 12970 1e17 31       		.uleb128 0x31
+ 12971 1e18 A10D0000 		.long	0xda1
+ 12972 1e1c 03       		.byte	0x3
+ 12973 1e1d 91       		.byte	0x91
+ 12974 1e1e B072     		.sleb128 -1744
+ 12975 1e20 32       		.uleb128 0x32
+ 12976 1e21 00000000 		.quad	.LBB435
+ 12976      00000000 
+ 12977 1e29 00000000 		.quad	.LBE435
+ 12977      00000000 
+ 12978 1e31 33       		.uleb128 0x33
+ 12979 1e32 AD0D0000 		.long	0xdad
+ 12980 1e36 03       		.byte	0x3
+ 12981 1e37 76       		.byte	0x76
+ 12982 1e38 E061     		.sleb128 -3872
+ 12983 1e3a 30       		.uleb128 0x30
+ 12984 1e3b BA0D0000 		.long	0xdba
+ 12985 1e3f 00000000 		.quad	.LBB436
+ 12985      00000000 
+ 12986 1e47 00000000 		.quad	.LBE436
+ 12986      00000000 
+ 12987 1e4f 03       		.byte	0x3
+ 12988 1e50 1F06     		.value	0x61f
+
GAS LISTING /tmp/ccPaCTqg.s 			page 379
+
+
+ 12989 1e52 D71E0000 		.long	0x1ed7
+ 12990 1e56 31       		.uleb128 0x31
+ 12991 1e57 CC0D0000 		.long	0xdcc
+ 12992 1e5b 03       		.byte	0x3
+ 12993 1e5c 91       		.byte	0x91
+ 12994 1e5d C072     		.sleb128 -1728
+ 12995 1e5f 32       		.uleb128 0x32
+ 12996 1e60 00000000 		.quad	.LBB437
+ 12996      00000000 
+ 12997 1e68 00000000 		.quad	.LBE437
+ 12997      00000000 
+ 12998 1e70 33       		.uleb128 0x33
+ 12999 1e71 D80D0000 		.long	0xdd8
+ 13000 1e75 09       		.byte	0x9
+ 13001 1e76 03       		.byte	0x3
+ 13002 1e77 00000000 		.quad	mask.8002
+ 13002      00000000 
+ 13003 1e7f 34       		.uleb128 0x34
+ 13004 1e80 FB0D0000 		.long	0xdfb
+ 13005 1e84 00000000 		.quad	.LBB438
+ 13005      00000000 
+ 13006 1e8c 00000000 		.quad	.LBE438
+ 13006      00000000 
+ 13007 1e94 03       		.byte	0x3
+ 13008 1e95 FE04     		.value	0x4fe
+ 13009 1e97 31       		.uleb128 0x31
+ 13010 1e98 190E0000 		.long	0xe19
+ 13011 1e9c 03       		.byte	0x3
+ 13012 1e9d 91       		.byte	0x91
+ 13013 1e9e D072     		.sleb128 -1712
+ 13014 1ea0 31       		.uleb128 0x31
+ 13015 1ea1 0D0E0000 		.long	0xe0d
+ 13016 1ea5 03       		.byte	0x3
+ 13017 1ea6 91       		.byte	0x91
+ 13018 1ea7 E072     		.sleb128 -1696
+ 13019 1ea9 34       		.uleb128 0x34
+ 13020 1eaa 260E0000 		.long	0xe26
+ 13021 1eae 00000000 		.quad	.LBB440
+ 13021      00000000 
+ 13022 1eb6 00000000 		.quad	.LBE440
+ 13022      00000000 
+ 13023 1ebe 03       		.byte	0x3
+ 13024 1ebf 7501     		.value	0x175
+ 13025 1ec1 31       		.uleb128 0x31
+ 13026 1ec2 440E0000 		.long	0xe44
+ 13027 1ec6 03       		.byte	0x3
+ 13028 1ec7 91       		.byte	0x91
+ 13029 1ec8 F072     		.sleb128 -1680
+ 13030 1eca 31       		.uleb128 0x31
+ 13031 1ecb 380E0000 		.long	0xe38
+ 13032 1ecf 03       		.byte	0x3
+ 13033 1ed0 91       		.byte	0x91
+ 13034 1ed1 8073     		.sleb128 -1664
+ 13035 1ed3 00       		.byte	0x0
+ 13036 1ed4 00       		.byte	0x0
+ 13037 1ed5 00       		.byte	0x0
+ 13038 1ed6 00       		.byte	0x0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 380
+
+
+ 13039 1ed7 30       		.uleb128 0x30
+ 13040 1ed8 BA0D0000 		.long	0xdba
+ 13041 1edc 00000000 		.quad	.LBB442
+ 13041      00000000 
+ 13042 1ee4 00000000 		.quad	.LBE442
+ 13042      00000000 
+ 13043 1eec 03       		.byte	0x3
+ 13044 1eed 2006     		.value	0x620
+ 13045 1eef 741F0000 		.long	0x1f74
+ 13046 1ef3 31       		.uleb128 0x31
+ 13047 1ef4 CC0D0000 		.long	0xdcc
+ 13048 1ef8 03       		.byte	0x3
+ 13049 1ef9 91       		.byte	0x91
+ 13050 1efa 9073     		.sleb128 -1648
+ 13051 1efc 32       		.uleb128 0x32
+ 13052 1efd 00000000 		.quad	.LBB443
+ 13052      00000000 
+ 13053 1f05 00000000 		.quad	.LBE443
+ 13053      00000000 
+ 13054 1f0d 33       		.uleb128 0x33
+ 13055 1f0e D80D0000 		.long	0xdd8
+ 13056 1f12 09       		.byte	0x9
+ 13057 1f13 03       		.byte	0x3
+ 13058 1f14 00000000 		.quad	mask.8002
+ 13058      00000000 
+ 13059 1f1c 34       		.uleb128 0x34
+ 13060 1f1d FB0D0000 		.long	0xdfb
+ 13061 1f21 00000000 		.quad	.LBB444
+ 13061      00000000 
+ 13062 1f29 00000000 		.quad	.LBE444
+ 13062      00000000 
+ 13063 1f31 03       		.byte	0x3
+ 13064 1f32 FE04     		.value	0x4fe
+ 13065 1f34 31       		.uleb128 0x31
+ 13066 1f35 190E0000 		.long	0xe19
+ 13067 1f39 03       		.byte	0x3
+ 13068 1f3a 91       		.byte	0x91
+ 13069 1f3b A073     		.sleb128 -1632
+ 13070 1f3d 31       		.uleb128 0x31
+ 13071 1f3e 0D0E0000 		.long	0xe0d
+ 13072 1f42 03       		.byte	0x3
+ 13073 1f43 91       		.byte	0x91
+ 13074 1f44 B073     		.sleb128 -1616
+ 13075 1f46 34       		.uleb128 0x34
+ 13076 1f47 260E0000 		.long	0xe26
+ 13077 1f4b 00000000 		.quad	.LBB446
+ 13077      00000000 
+ 13078 1f53 00000000 		.quad	.LBE446
+ 13078      00000000 
+ 13079 1f5b 03       		.byte	0x3
+ 13080 1f5c 7501     		.value	0x175
+ 13081 1f5e 31       		.uleb128 0x31
+ 13082 1f5f 440E0000 		.long	0xe44
+ 13083 1f63 03       		.byte	0x3
+ 13084 1f64 91       		.byte	0x91
+ 13085 1f65 C073     		.sleb128 -1600
+ 13086 1f67 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s 			page 381
+
+
+ 13087 1f68 380E0000 		.long	0xe38
+ 13088 1f6c 03       		.byte	0x3
+ 13089 1f6d 91       		.byte	0x91
+ 13090 1f6e D073     		.sleb128 -1584
+ 13091 1f70 00       		.byte	0x0
+ 13092 1f71 00       		.byte	0x0
+ 13093 1f72 00       		.byte	0x0
+ 13094 1f73 00       		.byte	0x0
+ 13095 1f74 34       		.uleb128 0x34
+ 13096 1f75 BA0D0000 		.long	0xdba
+ 13097 1f79 00000000 		.quad	.LBB448
+ 13097      00000000 
+ 13098 1f81 00000000 		.quad	.LBE448
+ 13098      00000000 
+ 13099 1f89 03       		.byte	0x3
+ 13100 1f8a 2106     		.value	0x621
+ 13101 1f8c 31       		.uleb128 0x31
+ 13102 1f8d CC0D0000 		.long	0xdcc
+ 13103 1f91 03       		.byte	0x3
+ 13104 1f92 91       		.byte	0x91
+ 13105 1f93 E073     		.sleb128 -1568
+ 13106 1f95 32       		.uleb128 0x32
+ 13107 1f96 00000000 		.quad	.LBB449
+ 13107      00000000 
+ 13108 1f9e 00000000 		.quad	.LBE449
+ 13108      00000000 
+ 13109 1fa6 33       		.uleb128 0x33
+ 13110 1fa7 D80D0000 		.long	0xdd8
+ 13111 1fab 09       		.byte	0x9
+ 13112 1fac 03       		.byte	0x3
+ 13113 1fad 00000000 		.quad	mask.8002
+ 13113      00000000 
+ 13114 1fb5 34       		.uleb128 0x34
+ 13115 1fb6 FB0D0000 		.long	0xdfb
+ 13116 1fba 00000000 		.quad	.LBB450
+ 13116      00000000 
+ 13117 1fc2 00000000 		.quad	.LBE450
+ 13117      00000000 
+ 13118 1fca 03       		.byte	0x3
+ 13119 1fcb FE04     		.value	0x4fe
+ 13120 1fcd 31       		.uleb128 0x31
+ 13121 1fce 190E0000 		.long	0xe19
+ 13122 1fd2 03       		.byte	0x3
+ 13123 1fd3 91       		.byte	0x91
+ 13124 1fd4 F073     		.sleb128 -1552
+ 13125 1fd6 31       		.uleb128 0x31
+ 13126 1fd7 0D0E0000 		.long	0xe0d
+ 13127 1fdb 03       		.byte	0x3
+ 13128 1fdc 91       		.byte	0x91
+ 13129 1fdd 8074     		.sleb128 -1536
+ 13130 1fdf 34       		.uleb128 0x34
+ 13131 1fe0 260E0000 		.long	0xe26
+ 13132 1fe4 00000000 		.quad	.LBB452
+ 13132      00000000 
+ 13133 1fec 00000000 		.quad	.LBE452
+ 13133      00000000 
+ 13134 1ff4 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 382
+
+
+ 13135 1ff5 7501     		.value	0x175
+ 13136 1ff7 31       		.uleb128 0x31
+ 13137 1ff8 440E0000 		.long	0xe44
+ 13138 1ffc 03       		.byte	0x3
+ 13139 1ffd 91       		.byte	0x91
+ 13140 1ffe 9074     		.sleb128 -1520
+ 13141 2000 31       		.uleb128 0x31
+ 13142 2001 380E0000 		.long	0xe38
+ 13143 2005 03       		.byte	0x3
+ 13144 2006 91       		.byte	0x91
+ 13145 2007 A074     		.sleb128 -1504
+ 13146 2009 00       		.byte	0x0
+ 13147 200a 00       		.byte	0x0
+ 13148 200b 00       		.byte	0x0
+ 13149 200c 00       		.byte	0x0
+ 13150 200d 00       		.byte	0x0
+ 13151 200e 00       		.byte	0x0
+ 13152 200f 30       		.uleb128 0x30
+ 13153 2010 E30C0000 		.long	0xce3
+ 13154 2014 00000000 		.quad	.LBB454
+ 13154      00000000 
+ 13155 201c 00000000 		.quad	.LBE454
+ 13155      00000000 
+ 13156 2024 03       		.byte	0x3
+ 13157 2025 D606     		.value	0x6d6
+ 13158 2027 D5200000 		.long	0x20d5
+ 13159 202b 31       		.uleb128 0x31
+ 13160 202c 010D0000 		.long	0xd01
+ 13161 2030 03       		.byte	0x3
+ 13162 2031 91       		.byte	0x91
+ 13163 2032 BC74     		.sleb128 -1476
+ 13164 2034 31       		.uleb128 0x31
+ 13165 2035 F50C0000 		.long	0xcf5
+ 13166 2039 03       		.byte	0x3
+ 13167 203a 91       		.byte	0x91
+ 13168 203b C074     		.sleb128 -1472
+ 13169 203d 32       		.uleb128 0x32
+ 13170 203e 00000000 		.quad	.LBB455
+ 13170      00000000 
+ 13171 2046 00000000 		.quad	.LBE455
+ 13171      00000000 
+ 13172 204e 33       		.uleb128 0x33
+ 13173 204f 0D0D0000 		.long	0xd0d
+ 13174 2053 03       		.byte	0x3
+ 13175 2054 76       		.byte	0x76
+ 13176 2055 F061     		.sleb128 -3856
+ 13177 2057 30       		.uleb128 0x30
+ 13178 2058 1A0D0000 		.long	0xd1a
+ 13179 205c 00000000 		.quad	.LBB456
+ 13179      00000000 
+ 13180 2064 00000000 		.quad	.LBE456
+ 13180      00000000 
+ 13181 206c 03       		.byte	0x3
+ 13182 206d 8A06     		.value	0x68a
+ 13183 206f 86200000 		.long	0x2086
+ 13184 2073 31       		.uleb128 0x31
+ 13185 2074 380D0000 		.long	0xd38
+
GAS LISTING /tmp/ccPaCTqg.s 			page 383
+
+
+ 13186 2078 03       		.byte	0x3
+ 13187 2079 91       		.byte	0x91
+ 13188 207a DC74     		.sleb128 -1444
+ 13189 207c 31       		.uleb128 0x31
+ 13190 207d 2C0D0000 		.long	0xd2c
+ 13191 2081 03       		.byte	0x3
+ 13192 2082 91       		.byte	0x91
+ 13193 2083 E074     		.sleb128 -1440
+ 13194 2085 00       		.byte	0x0
+ 13195 2086 34       		.uleb128 0x34
+ 13196 2087 450D0000 		.long	0xd45
+ 13197 208b 00000000 		.quad	.LBB458
+ 13197      00000000 
+ 13198 2093 00000000 		.quad	.LBE458
+ 13198      00000000 
+ 13199 209b 03       		.byte	0x3
+ 13200 209c 8B06     		.value	0x68b
+ 13201 209e 31       		.uleb128 0x31
+ 13202 209f 570D0000 		.long	0xd57
+ 13203 20a3 03       		.byte	0x3
+ 13204 20a4 91       		.byte	0x91
+ 13205 20a5 F074     		.sleb128 -1424
+ 13206 20a7 34       		.uleb128 0x34
+ 13207 20a8 640D0000 		.long	0xd64
+ 13208 20ac 00000000 		.quad	.LBB460
+ 13208      00000000 
+ 13209 20b4 00000000 		.quad	.LBE460
+ 13209      00000000 
+ 13210 20bc 03       		.byte	0x3
+ 13211 20bd 4905     		.value	0x549
+ 13212 20bf 31       		.uleb128 0x31
+ 13213 20c0 820D0000 		.long	0xd82
+ 13214 20c4 03       		.byte	0x3
+ 13215 20c5 91       		.byte	0x91
+ 13216 20c6 8C75     		.sleb128 -1396
+ 13217 20c8 31       		.uleb128 0x31
+ 13218 20c9 760D0000 		.long	0xd76
+ 13219 20cd 03       		.byte	0x3
+ 13220 20ce 91       		.byte	0x91
+ 13221 20cf 9075     		.sleb128 -1392
+ 13222 20d1 00       		.byte	0x0
+ 13223 20d2 00       		.byte	0x0
+ 13224 20d3 00       		.byte	0x0
+ 13225 20d4 00       		.byte	0x0
+ 13226 20d5 30       		.uleb128 0x30
+ 13227 20d6 8F0D0000 		.long	0xd8f
+ 13228 20da 00000000 		.quad	.LBB462
+ 13228      00000000 
+ 13229 20e2 00000000 		.quad	.LBE462
+ 13229      00000000 
+ 13230 20ea 03       		.byte	0x3
+ 13231 20eb D606     		.value	0x6d6
+ 13232 20ed E9220000 		.long	0x22e9
+ 13233 20f1 31       		.uleb128 0x31
+ 13234 20f2 A10D0000 		.long	0xda1
+ 13235 20f6 03       		.byte	0x3
+ 13236 20f7 91       		.byte	0x91
+
GAS LISTING /tmp/ccPaCTqg.s 			page 384
+
+
+ 13237 20f8 A075     		.sleb128 -1376
+ 13238 20fa 32       		.uleb128 0x32
+ 13239 20fb 00000000 		.quad	.LBB463
+ 13239      00000000 
+ 13240 2103 00000000 		.quad	.LBE463
+ 13240      00000000 
+ 13241 210b 33       		.uleb128 0x33
+ 13242 210c AD0D0000 		.long	0xdad
+ 13243 2110 03       		.byte	0x3
+ 13244 2111 76       		.byte	0x76
+ 13245 2112 8062     		.sleb128 -3840
+ 13246 2114 30       		.uleb128 0x30
+ 13247 2115 BA0D0000 		.long	0xdba
+ 13248 2119 00000000 		.quad	.LBB464
+ 13248      00000000 
+ 13249 2121 00000000 		.quad	.LBE464
+ 13249      00000000 
+ 13250 2129 03       		.byte	0x3
+ 13251 212a 1F06     		.value	0x61f
+ 13252 212c B1210000 		.long	0x21b1
+ 13253 2130 31       		.uleb128 0x31
+ 13254 2131 CC0D0000 		.long	0xdcc
+ 13255 2135 03       		.byte	0x3
+ 13256 2136 91       		.byte	0x91
+ 13257 2137 B075     		.sleb128 -1360
+ 13258 2139 32       		.uleb128 0x32
+ 13259 213a 00000000 		.quad	.LBB465
+ 13259      00000000 
+ 13260 2142 00000000 		.quad	.LBE465
+ 13260      00000000 
+ 13261 214a 33       		.uleb128 0x33
+ 13262 214b D80D0000 		.long	0xdd8
+ 13263 214f 09       		.byte	0x9
+ 13264 2150 03       		.byte	0x3
+ 13265 2151 00000000 		.quad	mask.8002
+ 13265      00000000 
+ 13266 2159 34       		.uleb128 0x34
+ 13267 215a FB0D0000 		.long	0xdfb
+ 13268 215e 00000000 		.quad	.LBB466
+ 13268      00000000 
+ 13269 2166 00000000 		.quad	.LBE466
+ 13269      00000000 
+ 13270 216e 03       		.byte	0x3
+ 13271 216f FE04     		.value	0x4fe
+ 13272 2171 31       		.uleb128 0x31
+ 13273 2172 190E0000 		.long	0xe19
+ 13274 2176 03       		.byte	0x3
+ 13275 2177 91       		.byte	0x91
+ 13276 2178 C075     		.sleb128 -1344
+ 13277 217a 31       		.uleb128 0x31
+ 13278 217b 0D0E0000 		.long	0xe0d
+ 13279 217f 03       		.byte	0x3
+ 13280 2180 91       		.byte	0x91
+ 13281 2181 D075     		.sleb128 -1328
+ 13282 2183 34       		.uleb128 0x34
+ 13283 2184 260E0000 		.long	0xe26
+ 13284 2188 00000000 		.quad	.LBB468
+
GAS LISTING /tmp/ccPaCTqg.s 			page 385
+
+
+ 13284      00000000 
+ 13285 2190 00000000 		.quad	.LBE468
+ 13285      00000000 
+ 13286 2198 03       		.byte	0x3
+ 13287 2199 7501     		.value	0x175
+ 13288 219b 31       		.uleb128 0x31
+ 13289 219c 440E0000 		.long	0xe44
+ 13290 21a0 03       		.byte	0x3
+ 13291 21a1 91       		.byte	0x91
+ 13292 21a2 E075     		.sleb128 -1312
+ 13293 21a4 31       		.uleb128 0x31
+ 13294 21a5 380E0000 		.long	0xe38
+ 13295 21a9 03       		.byte	0x3
+ 13296 21aa 91       		.byte	0x91
+ 13297 21ab F075     		.sleb128 -1296
+ 13298 21ad 00       		.byte	0x0
+ 13299 21ae 00       		.byte	0x0
+ 13300 21af 00       		.byte	0x0
+ 13301 21b0 00       		.byte	0x0
+ 13302 21b1 30       		.uleb128 0x30
+ 13303 21b2 BA0D0000 		.long	0xdba
+ 13304 21b6 00000000 		.quad	.LBB470
+ 13304      00000000 
+ 13305 21be 00000000 		.quad	.LBE470
+ 13305      00000000 
+ 13306 21c6 03       		.byte	0x3
+ 13307 21c7 2006     		.value	0x620
+ 13308 21c9 4E220000 		.long	0x224e
+ 13309 21cd 31       		.uleb128 0x31
+ 13310 21ce CC0D0000 		.long	0xdcc
+ 13311 21d2 03       		.byte	0x3
+ 13312 21d3 91       		.byte	0x91
+ 13313 21d4 8076     		.sleb128 -1280
+ 13314 21d6 32       		.uleb128 0x32
+ 13315 21d7 00000000 		.quad	.LBB471
+ 13315      00000000 
+ 13316 21df 00000000 		.quad	.LBE471
+ 13316      00000000 
+ 13317 21e7 33       		.uleb128 0x33
+ 13318 21e8 D80D0000 		.long	0xdd8
+ 13319 21ec 09       		.byte	0x9
+ 13320 21ed 03       		.byte	0x3
+ 13321 21ee 00000000 		.quad	mask.8002
+ 13321      00000000 
+ 13322 21f6 34       		.uleb128 0x34
+ 13323 21f7 FB0D0000 		.long	0xdfb
+ 13324 21fb 00000000 		.quad	.LBB472
+ 13324      00000000 
+ 13325 2203 00000000 		.quad	.LBE472
+ 13325      00000000 
+ 13326 220b 03       		.byte	0x3
+ 13327 220c FE04     		.value	0x4fe
+ 13328 220e 31       		.uleb128 0x31
+ 13329 220f 190E0000 		.long	0xe19
+ 13330 2213 03       		.byte	0x3
+ 13331 2214 91       		.byte	0x91
+ 13332 2215 9076     		.sleb128 -1264
+
GAS LISTING /tmp/ccPaCTqg.s 			page 386
+
+
+ 13333 2217 31       		.uleb128 0x31
+ 13334 2218 0D0E0000 		.long	0xe0d
+ 13335 221c 03       		.byte	0x3
+ 13336 221d 91       		.byte	0x91
+ 13337 221e A076     		.sleb128 -1248
+ 13338 2220 34       		.uleb128 0x34
+ 13339 2221 260E0000 		.long	0xe26
+ 13340 2225 00000000 		.quad	.LBB474
+ 13340      00000000 
+ 13341 222d 00000000 		.quad	.LBE474
+ 13341      00000000 
+ 13342 2235 03       		.byte	0x3
+ 13343 2236 7501     		.value	0x175
+ 13344 2238 31       		.uleb128 0x31
+ 13345 2239 440E0000 		.long	0xe44
+ 13346 223d 03       		.byte	0x3
+ 13347 223e 91       		.byte	0x91
+ 13348 223f B076     		.sleb128 -1232
+ 13349 2241 31       		.uleb128 0x31
+ 13350 2242 380E0000 		.long	0xe38
+ 13351 2246 03       		.byte	0x3
+ 13352 2247 91       		.byte	0x91
+ 13353 2248 C076     		.sleb128 -1216
+ 13354 224a 00       		.byte	0x0
+ 13355 224b 00       		.byte	0x0
+ 13356 224c 00       		.byte	0x0
+ 13357 224d 00       		.byte	0x0
+ 13358 224e 34       		.uleb128 0x34
+ 13359 224f BA0D0000 		.long	0xdba
+ 13360 2253 00000000 		.quad	.LBB476
+ 13360      00000000 
+ 13361 225b 00000000 		.quad	.LBE476
+ 13361      00000000 
+ 13362 2263 03       		.byte	0x3
+ 13363 2264 2106     		.value	0x621
+ 13364 2266 31       		.uleb128 0x31
+ 13365 2267 CC0D0000 		.long	0xdcc
+ 13366 226b 03       		.byte	0x3
+ 13367 226c 91       		.byte	0x91
+ 13368 226d D076     		.sleb128 -1200
+ 13369 226f 32       		.uleb128 0x32
+ 13370 2270 00000000 		.quad	.LBB477
+ 13370      00000000 
+ 13371 2278 00000000 		.quad	.LBE477
+ 13371      00000000 
+ 13372 2280 33       		.uleb128 0x33
+ 13373 2281 D80D0000 		.long	0xdd8
+ 13374 2285 09       		.byte	0x9
+ 13375 2286 03       		.byte	0x3
+ 13376 2287 00000000 		.quad	mask.8002
+ 13376      00000000 
+ 13377 228f 34       		.uleb128 0x34
+ 13378 2290 FB0D0000 		.long	0xdfb
+ 13379 2294 00000000 		.quad	.LBB478
+ 13379      00000000 
+ 13380 229c 00000000 		.quad	.LBE478
+ 13380      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 387
+
+
+ 13381 22a4 03       		.byte	0x3
+ 13382 22a5 FE04     		.value	0x4fe
+ 13383 22a7 31       		.uleb128 0x31
+ 13384 22a8 190E0000 		.long	0xe19
+ 13385 22ac 03       		.byte	0x3
+ 13386 22ad 91       		.byte	0x91
+ 13387 22ae E076     		.sleb128 -1184
+ 13388 22b0 31       		.uleb128 0x31
+ 13389 22b1 0D0E0000 		.long	0xe0d
+ 13390 22b5 03       		.byte	0x3
+ 13391 22b6 91       		.byte	0x91
+ 13392 22b7 F076     		.sleb128 -1168
+ 13393 22b9 34       		.uleb128 0x34
+ 13394 22ba 260E0000 		.long	0xe26
+ 13395 22be 00000000 		.quad	.LBB480
+ 13395      00000000 
+ 13396 22c6 00000000 		.quad	.LBE480
+ 13396      00000000 
+ 13397 22ce 03       		.byte	0x3
+ 13398 22cf 7501     		.value	0x175
+ 13399 22d1 31       		.uleb128 0x31
+ 13400 22d2 440E0000 		.long	0xe44
+ 13401 22d6 03       		.byte	0x3
+ 13402 22d7 91       		.byte	0x91
+ 13403 22d8 8077     		.sleb128 -1152
+ 13404 22da 31       		.uleb128 0x31
+ 13405 22db 380E0000 		.long	0xe38
+ 13406 22df 03       		.byte	0x3
+ 13407 22e0 91       		.byte	0x91
+ 13408 22e1 9077     		.sleb128 -1136
+ 13409 22e3 00       		.byte	0x0
+ 13410 22e4 00       		.byte	0x0
+ 13411 22e5 00       		.byte	0x0
+ 13412 22e6 00       		.byte	0x0
+ 13413 22e7 00       		.byte	0x0
+ 13414 22e8 00       		.byte	0x0
+ 13415 22e9 30       		.uleb128 0x30
+ 13416 22ea E30C0000 		.long	0xce3
+ 13417 22ee 00000000 		.quad	.LBB482
+ 13417      00000000 
+ 13418 22f6 00000000 		.quad	.LBE482
+ 13418      00000000 
+ 13419 22fe 03       		.byte	0x3
+ 13420 22ff D706     		.value	0x6d7
+ 13421 2301 AF230000 		.long	0x23af
+ 13422 2305 31       		.uleb128 0x31
+ 13423 2306 010D0000 		.long	0xd01
+ 13424 230a 03       		.byte	0x3
+ 13425 230b 91       		.byte	0x91
+ 13426 230c AC77     		.sleb128 -1108
+ 13427 230e 31       		.uleb128 0x31
+ 13428 230f F50C0000 		.long	0xcf5
+ 13429 2313 03       		.byte	0x3
+ 13430 2314 91       		.byte	0x91
+ 13431 2315 B077     		.sleb128 -1104
+ 13432 2317 32       		.uleb128 0x32
+ 13433 2318 00000000 		.quad	.LBB483
+
GAS LISTING /tmp/ccPaCTqg.s 			page 388
+
+
+ 13433      00000000 
+ 13434 2320 00000000 		.quad	.LBE483
+ 13434      00000000 
+ 13435 2328 33       		.uleb128 0x33
+ 13436 2329 0D0D0000 		.long	0xd0d
+ 13437 232d 03       		.byte	0x3
+ 13438 232e 76       		.byte	0x76
+ 13439 232f 9062     		.sleb128 -3824
+ 13440 2331 30       		.uleb128 0x30
+ 13441 2332 1A0D0000 		.long	0xd1a
+ 13442 2336 00000000 		.quad	.LBB484
+ 13442      00000000 
+ 13443 233e 00000000 		.quad	.LBE484
+ 13443      00000000 
+ 13444 2346 03       		.byte	0x3
+ 13445 2347 8A06     		.value	0x68a
+ 13446 2349 60230000 		.long	0x2360
+ 13447 234d 31       		.uleb128 0x31
+ 13448 234e 380D0000 		.long	0xd38
+ 13449 2352 03       		.byte	0x3
+ 13450 2353 91       		.byte	0x91
+ 13451 2354 CC77     		.sleb128 -1076
+ 13452 2356 31       		.uleb128 0x31
+ 13453 2357 2C0D0000 		.long	0xd2c
+ 13454 235b 03       		.byte	0x3
+ 13455 235c 91       		.byte	0x91
+ 13456 235d D077     		.sleb128 -1072
+ 13457 235f 00       		.byte	0x0
+ 13458 2360 34       		.uleb128 0x34
+ 13459 2361 450D0000 		.long	0xd45
+ 13460 2365 00000000 		.quad	.LBB486
+ 13460      00000000 
+ 13461 236d 00000000 		.quad	.LBE486
+ 13461      00000000 
+ 13462 2375 03       		.byte	0x3
+ 13463 2376 8B06     		.value	0x68b
+ 13464 2378 31       		.uleb128 0x31
+ 13465 2379 570D0000 		.long	0xd57
+ 13466 237d 03       		.byte	0x3
+ 13467 237e 91       		.byte	0x91
+ 13468 237f E077     		.sleb128 -1056
+ 13469 2381 34       		.uleb128 0x34
+ 13470 2382 640D0000 		.long	0xd64
+ 13471 2386 00000000 		.quad	.LBB488
+ 13471      00000000 
+ 13472 238e 00000000 		.quad	.LBE488
+ 13472      00000000 
+ 13473 2396 03       		.byte	0x3
+ 13474 2397 4905     		.value	0x549
+ 13475 2399 31       		.uleb128 0x31
+ 13476 239a 820D0000 		.long	0xd82
+ 13477 239e 03       		.byte	0x3
+ 13478 239f 91       		.byte	0x91
+ 13479 23a0 FC77     		.sleb128 -1028
+ 13480 23a2 31       		.uleb128 0x31
+ 13481 23a3 760D0000 		.long	0xd76
+ 13482 23a7 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 389
+
+
+ 13483 23a8 91       		.byte	0x91
+ 13484 23a9 8078     		.sleb128 -1024
+ 13485 23ab 00       		.byte	0x0
+ 13486 23ac 00       		.byte	0x0
+ 13487 23ad 00       		.byte	0x0
+ 13488 23ae 00       		.byte	0x0
+ 13489 23af 30       		.uleb128 0x30
+ 13490 23b0 8F0D0000 		.long	0xd8f
+ 13491 23b4 00000000 		.quad	.LBB490
+ 13491      00000000 
+ 13492 23bc 00000000 		.quad	.LBE490
+ 13492      00000000 
+ 13493 23c4 03       		.byte	0x3
+ 13494 23c5 D706     		.value	0x6d7
+ 13495 23c7 C3250000 		.long	0x25c3
+ 13496 23cb 31       		.uleb128 0x31
+ 13497 23cc A10D0000 		.long	0xda1
+ 13498 23d0 03       		.byte	0x3
+ 13499 23d1 91       		.byte	0x91
+ 13500 23d2 9078     		.sleb128 -1008
+ 13501 23d4 32       		.uleb128 0x32
+ 13502 23d5 00000000 		.quad	.LBB491
+ 13502      00000000 
+ 13503 23dd 00000000 		.quad	.LBE491
+ 13503      00000000 
+ 13504 23e5 33       		.uleb128 0x33
+ 13505 23e6 AD0D0000 		.long	0xdad
+ 13506 23ea 03       		.byte	0x3
+ 13507 23eb 76       		.byte	0x76
+ 13508 23ec A062     		.sleb128 -3808
+ 13509 23ee 30       		.uleb128 0x30
+ 13510 23ef BA0D0000 		.long	0xdba
+ 13511 23f3 00000000 		.quad	.LBB492
+ 13511      00000000 
+ 13512 23fb 00000000 		.quad	.LBE492
+ 13512      00000000 
+ 13513 2403 03       		.byte	0x3
+ 13514 2404 1F06     		.value	0x61f
+ 13515 2406 8B240000 		.long	0x248b
+ 13516 240a 31       		.uleb128 0x31
+ 13517 240b CC0D0000 		.long	0xdcc
+ 13518 240f 03       		.byte	0x3
+ 13519 2410 91       		.byte	0x91
+ 13520 2411 A078     		.sleb128 -992
+ 13521 2413 32       		.uleb128 0x32
+ 13522 2414 00000000 		.quad	.LBB493
+ 13522      00000000 
+ 13523 241c 00000000 		.quad	.LBE493
+ 13523      00000000 
+ 13524 2424 33       		.uleb128 0x33
+ 13525 2425 D80D0000 		.long	0xdd8
+ 13526 2429 09       		.byte	0x9
+ 13527 242a 03       		.byte	0x3
+ 13528 242b 00000000 		.quad	mask.8002
+ 13528      00000000 
+ 13529 2433 34       		.uleb128 0x34
+ 13530 2434 FB0D0000 		.long	0xdfb
+
GAS LISTING /tmp/ccPaCTqg.s 			page 390
+
+
+ 13531 2438 00000000 		.quad	.LBB494
+ 13531      00000000 
+ 13532 2440 00000000 		.quad	.LBE494
+ 13532      00000000 
+ 13533 2448 03       		.byte	0x3
+ 13534 2449 FE04     		.value	0x4fe
+ 13535 244b 31       		.uleb128 0x31
+ 13536 244c 190E0000 		.long	0xe19
+ 13537 2450 03       		.byte	0x3
+ 13538 2451 91       		.byte	0x91
+ 13539 2452 B078     		.sleb128 -976
+ 13540 2454 31       		.uleb128 0x31
+ 13541 2455 0D0E0000 		.long	0xe0d
+ 13542 2459 03       		.byte	0x3
+ 13543 245a 91       		.byte	0x91
+ 13544 245b C078     		.sleb128 -960
+ 13545 245d 34       		.uleb128 0x34
+ 13546 245e 260E0000 		.long	0xe26
+ 13547 2462 00000000 		.quad	.LBB496
+ 13547      00000000 
+ 13548 246a 00000000 		.quad	.LBE496
+ 13548      00000000 
+ 13549 2472 03       		.byte	0x3
+ 13550 2473 7501     		.value	0x175
+ 13551 2475 31       		.uleb128 0x31
+ 13552 2476 440E0000 		.long	0xe44
+ 13553 247a 03       		.byte	0x3
+ 13554 247b 91       		.byte	0x91
+ 13555 247c D078     		.sleb128 -944
+ 13556 247e 31       		.uleb128 0x31
+ 13557 247f 380E0000 		.long	0xe38
+ 13558 2483 03       		.byte	0x3
+ 13559 2484 91       		.byte	0x91
+ 13560 2485 E078     		.sleb128 -928
+ 13561 2487 00       		.byte	0x0
+ 13562 2488 00       		.byte	0x0
+ 13563 2489 00       		.byte	0x0
+ 13564 248a 00       		.byte	0x0
+ 13565 248b 30       		.uleb128 0x30
+ 13566 248c BA0D0000 		.long	0xdba
+ 13567 2490 00000000 		.quad	.LBB498
+ 13567      00000000 
+ 13568 2498 00000000 		.quad	.LBE498
+ 13568      00000000 
+ 13569 24a0 03       		.byte	0x3
+ 13570 24a1 2006     		.value	0x620
+ 13571 24a3 28250000 		.long	0x2528
+ 13572 24a7 31       		.uleb128 0x31
+ 13573 24a8 CC0D0000 		.long	0xdcc
+ 13574 24ac 03       		.byte	0x3
+ 13575 24ad 91       		.byte	0x91
+ 13576 24ae F078     		.sleb128 -912
+ 13577 24b0 32       		.uleb128 0x32
+ 13578 24b1 00000000 		.quad	.LBB499
+ 13578      00000000 
+ 13579 24b9 00000000 		.quad	.LBE499
+ 13579      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 391
+
+
+ 13580 24c1 33       		.uleb128 0x33
+ 13581 24c2 D80D0000 		.long	0xdd8
+ 13582 24c6 09       		.byte	0x9
+ 13583 24c7 03       		.byte	0x3
+ 13584 24c8 00000000 		.quad	mask.8002
+ 13584      00000000 
+ 13585 24d0 34       		.uleb128 0x34
+ 13586 24d1 FB0D0000 		.long	0xdfb
+ 13587 24d5 00000000 		.quad	.LBB500
+ 13587      00000000 
+ 13588 24dd 00000000 		.quad	.LBE500
+ 13588      00000000 
+ 13589 24e5 03       		.byte	0x3
+ 13590 24e6 FE04     		.value	0x4fe
+ 13591 24e8 31       		.uleb128 0x31
+ 13592 24e9 190E0000 		.long	0xe19
+ 13593 24ed 03       		.byte	0x3
+ 13594 24ee 91       		.byte	0x91
+ 13595 24ef 8079     		.sleb128 -896
+ 13596 24f1 31       		.uleb128 0x31
+ 13597 24f2 0D0E0000 		.long	0xe0d
+ 13598 24f6 03       		.byte	0x3
+ 13599 24f7 91       		.byte	0x91
+ 13600 24f8 9079     		.sleb128 -880
+ 13601 24fa 34       		.uleb128 0x34
+ 13602 24fb 260E0000 		.long	0xe26
+ 13603 24ff 00000000 		.quad	.LBB502
+ 13603      00000000 
+ 13604 2507 00000000 		.quad	.LBE502
+ 13604      00000000 
+ 13605 250f 03       		.byte	0x3
+ 13606 2510 7501     		.value	0x175
+ 13607 2512 31       		.uleb128 0x31
+ 13608 2513 440E0000 		.long	0xe44
+ 13609 2517 03       		.byte	0x3
+ 13610 2518 91       		.byte	0x91
+ 13611 2519 A079     		.sleb128 -864
+ 13612 251b 31       		.uleb128 0x31
+ 13613 251c 380E0000 		.long	0xe38
+ 13614 2520 03       		.byte	0x3
+ 13615 2521 91       		.byte	0x91
+ 13616 2522 B079     		.sleb128 -848
+ 13617 2524 00       		.byte	0x0
+ 13618 2525 00       		.byte	0x0
+ 13619 2526 00       		.byte	0x0
+ 13620 2527 00       		.byte	0x0
+ 13621 2528 34       		.uleb128 0x34
+ 13622 2529 BA0D0000 		.long	0xdba
+ 13623 252d 00000000 		.quad	.LBB504
+ 13623      00000000 
+ 13624 2535 00000000 		.quad	.LBE504
+ 13624      00000000 
+ 13625 253d 03       		.byte	0x3
+ 13626 253e 2106     		.value	0x621
+ 13627 2540 31       		.uleb128 0x31
+ 13628 2541 CC0D0000 		.long	0xdcc
+ 13629 2545 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 392
+
+
+ 13630 2546 91       		.byte	0x91
+ 13631 2547 C079     		.sleb128 -832
+ 13632 2549 32       		.uleb128 0x32
+ 13633 254a 00000000 		.quad	.LBB505
+ 13633      00000000 
+ 13634 2552 00000000 		.quad	.LBE505
+ 13634      00000000 
+ 13635 255a 33       		.uleb128 0x33
+ 13636 255b D80D0000 		.long	0xdd8
+ 13637 255f 09       		.byte	0x9
+ 13638 2560 03       		.byte	0x3
+ 13639 2561 00000000 		.quad	mask.8002
+ 13639      00000000 
+ 13640 2569 34       		.uleb128 0x34
+ 13641 256a FB0D0000 		.long	0xdfb
+ 13642 256e 00000000 		.quad	.LBB506
+ 13642      00000000 
+ 13643 2576 00000000 		.quad	.LBE506
+ 13643      00000000 
+ 13644 257e 03       		.byte	0x3
+ 13645 257f FE04     		.value	0x4fe
+ 13646 2581 31       		.uleb128 0x31
+ 13647 2582 190E0000 		.long	0xe19
+ 13648 2586 03       		.byte	0x3
+ 13649 2587 91       		.byte	0x91
+ 13650 2588 D079     		.sleb128 -816
+ 13651 258a 31       		.uleb128 0x31
+ 13652 258b 0D0E0000 		.long	0xe0d
+ 13653 258f 03       		.byte	0x3
+ 13654 2590 91       		.byte	0x91
+ 13655 2591 E079     		.sleb128 -800
+ 13656 2593 34       		.uleb128 0x34
+ 13657 2594 260E0000 		.long	0xe26
+ 13658 2598 00000000 		.quad	.LBB508
+ 13658      00000000 
+ 13659 25a0 00000000 		.quad	.LBE508
+ 13659      00000000 
+ 13660 25a8 03       		.byte	0x3
+ 13661 25a9 7501     		.value	0x175
+ 13662 25ab 31       		.uleb128 0x31
+ 13663 25ac 440E0000 		.long	0xe44
+ 13664 25b0 03       		.byte	0x3
+ 13665 25b1 91       		.byte	0x91
+ 13666 25b2 F079     		.sleb128 -784
+ 13667 25b4 31       		.uleb128 0x31
+ 13668 25b5 380E0000 		.long	0xe38
+ 13669 25b9 03       		.byte	0x3
+ 13670 25ba 91       		.byte	0x91
+ 13671 25bb 807A     		.sleb128 -768
+ 13672 25bd 00       		.byte	0x0
+ 13673 25be 00       		.byte	0x0
+ 13674 25bf 00       		.byte	0x0
+ 13675 25c0 00       		.byte	0x0
+ 13676 25c1 00       		.byte	0x0
+ 13677 25c2 00       		.byte	0x0
+ 13678 25c3 30       		.uleb128 0x30
+ 13679 25c4 E30C0000 		.long	0xce3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 393
+
+
+ 13680 25c8 00000000 		.quad	.LBB510
+ 13680      00000000 
+ 13681 25d0 00000000 		.quad	.LBE510
+ 13681      00000000 
+ 13682 25d8 03       		.byte	0x3
+ 13683 25d9 D806     		.value	0x6d8
+ 13684 25db 89260000 		.long	0x2689
+ 13685 25df 31       		.uleb128 0x31
+ 13686 25e0 010D0000 		.long	0xd01
+ 13687 25e4 03       		.byte	0x3
+ 13688 25e5 91       		.byte	0x91
+ 13689 25e6 9C7A     		.sleb128 -740
+ 13690 25e8 31       		.uleb128 0x31
+ 13691 25e9 F50C0000 		.long	0xcf5
+ 13692 25ed 03       		.byte	0x3
+ 13693 25ee 91       		.byte	0x91
+ 13694 25ef A07A     		.sleb128 -736
+ 13695 25f1 32       		.uleb128 0x32
+ 13696 25f2 00000000 		.quad	.LBB511
+ 13696      00000000 
+ 13697 25fa 00000000 		.quad	.LBE511
+ 13697      00000000 
+ 13698 2602 33       		.uleb128 0x33
+ 13699 2603 0D0D0000 		.long	0xd0d
+ 13700 2607 03       		.byte	0x3
+ 13701 2608 76       		.byte	0x76
+ 13702 2609 B062     		.sleb128 -3792
+ 13703 260b 30       		.uleb128 0x30
+ 13704 260c 1A0D0000 		.long	0xd1a
+ 13705 2610 00000000 		.quad	.LBB512
+ 13705      00000000 
+ 13706 2618 00000000 		.quad	.LBE512
+ 13706      00000000 
+ 13707 2620 03       		.byte	0x3
+ 13708 2621 8A06     		.value	0x68a
+ 13709 2623 3A260000 		.long	0x263a
+ 13710 2627 31       		.uleb128 0x31
+ 13711 2628 380D0000 		.long	0xd38
+ 13712 262c 03       		.byte	0x3
+ 13713 262d 91       		.byte	0x91
+ 13714 262e BC7A     		.sleb128 -708
+ 13715 2630 31       		.uleb128 0x31
+ 13716 2631 2C0D0000 		.long	0xd2c
+ 13717 2635 03       		.byte	0x3
+ 13718 2636 91       		.byte	0x91
+ 13719 2637 C07A     		.sleb128 -704
+ 13720 2639 00       		.byte	0x0
+ 13721 263a 34       		.uleb128 0x34
+ 13722 263b 450D0000 		.long	0xd45
+ 13723 263f 00000000 		.quad	.LBB514
+ 13723      00000000 
+ 13724 2647 00000000 		.quad	.LBE514
+ 13724      00000000 
+ 13725 264f 03       		.byte	0x3
+ 13726 2650 8B06     		.value	0x68b
+ 13727 2652 31       		.uleb128 0x31
+ 13728 2653 570D0000 		.long	0xd57
+
GAS LISTING /tmp/ccPaCTqg.s 			page 394
+
+
+ 13729 2657 03       		.byte	0x3
+ 13730 2658 91       		.byte	0x91
+ 13731 2659 D07A     		.sleb128 -688
+ 13732 265b 34       		.uleb128 0x34
+ 13733 265c 640D0000 		.long	0xd64
+ 13734 2660 00000000 		.quad	.LBB516
+ 13734      00000000 
+ 13735 2668 00000000 		.quad	.LBE516
+ 13735      00000000 
+ 13736 2670 03       		.byte	0x3
+ 13737 2671 4905     		.value	0x549
+ 13738 2673 31       		.uleb128 0x31
+ 13739 2674 820D0000 		.long	0xd82
+ 13740 2678 03       		.byte	0x3
+ 13741 2679 91       		.byte	0x91
+ 13742 267a EC7A     		.sleb128 -660
+ 13743 267c 31       		.uleb128 0x31
+ 13744 267d 760D0000 		.long	0xd76
+ 13745 2681 03       		.byte	0x3
+ 13746 2682 91       		.byte	0x91
+ 13747 2683 F07A     		.sleb128 -656
+ 13748 2685 00       		.byte	0x0
+ 13749 2686 00       		.byte	0x0
+ 13750 2687 00       		.byte	0x0
+ 13751 2688 00       		.byte	0x0
+ 13752 2689 30       		.uleb128 0x30
+ 13753 268a 8F0D0000 		.long	0xd8f
+ 13754 268e 00000000 		.quad	.LBB518
+ 13754      00000000 
+ 13755 2696 00000000 		.quad	.LBE518
+ 13755      00000000 
+ 13756 269e 03       		.byte	0x3
+ 13757 269f D806     		.value	0x6d8
+ 13758 26a1 9D280000 		.long	0x289d
+ 13759 26a5 31       		.uleb128 0x31
+ 13760 26a6 A10D0000 		.long	0xda1
+ 13761 26aa 03       		.byte	0x3
+ 13762 26ab 91       		.byte	0x91
+ 13763 26ac 807B     		.sleb128 -640
+ 13764 26ae 32       		.uleb128 0x32
+ 13765 26af 00000000 		.quad	.LBB519
+ 13765      00000000 
+ 13766 26b7 00000000 		.quad	.LBE519
+ 13766      00000000 
+ 13767 26bf 33       		.uleb128 0x33
+ 13768 26c0 AD0D0000 		.long	0xdad
+ 13769 26c4 03       		.byte	0x3
+ 13770 26c5 76       		.byte	0x76
+ 13771 26c6 C062     		.sleb128 -3776
+ 13772 26c8 30       		.uleb128 0x30
+ 13773 26c9 BA0D0000 		.long	0xdba
+ 13774 26cd 00000000 		.quad	.LBB520
+ 13774      00000000 
+ 13775 26d5 00000000 		.quad	.LBE520
+ 13775      00000000 
+ 13776 26dd 03       		.byte	0x3
+ 13777 26de 1F06     		.value	0x61f
+
GAS LISTING /tmp/ccPaCTqg.s 			page 395
+
+
+ 13778 26e0 65270000 		.long	0x2765
+ 13779 26e4 31       		.uleb128 0x31
+ 13780 26e5 CC0D0000 		.long	0xdcc
+ 13781 26e9 03       		.byte	0x3
+ 13782 26ea 91       		.byte	0x91
+ 13783 26eb 907B     		.sleb128 -624
+ 13784 26ed 32       		.uleb128 0x32
+ 13785 26ee 00000000 		.quad	.LBB521
+ 13785      00000000 
+ 13786 26f6 00000000 		.quad	.LBE521
+ 13786      00000000 
+ 13787 26fe 33       		.uleb128 0x33
+ 13788 26ff D80D0000 		.long	0xdd8
+ 13789 2703 09       		.byte	0x9
+ 13790 2704 03       		.byte	0x3
+ 13791 2705 00000000 		.quad	mask.8002
+ 13791      00000000 
+ 13792 270d 34       		.uleb128 0x34
+ 13793 270e FB0D0000 		.long	0xdfb
+ 13794 2712 00000000 		.quad	.LBB522
+ 13794      00000000 
+ 13795 271a 00000000 		.quad	.LBE522
+ 13795      00000000 
+ 13796 2722 03       		.byte	0x3
+ 13797 2723 FE04     		.value	0x4fe
+ 13798 2725 31       		.uleb128 0x31
+ 13799 2726 190E0000 		.long	0xe19
+ 13800 272a 03       		.byte	0x3
+ 13801 272b 91       		.byte	0x91
+ 13802 272c A07B     		.sleb128 -608
+ 13803 272e 31       		.uleb128 0x31
+ 13804 272f 0D0E0000 		.long	0xe0d
+ 13805 2733 03       		.byte	0x3
+ 13806 2734 91       		.byte	0x91
+ 13807 2735 B07B     		.sleb128 -592
+ 13808 2737 34       		.uleb128 0x34
+ 13809 2738 260E0000 		.long	0xe26
+ 13810 273c 00000000 		.quad	.LBB524
+ 13810      00000000 
+ 13811 2744 00000000 		.quad	.LBE524
+ 13811      00000000 
+ 13812 274c 03       		.byte	0x3
+ 13813 274d 7501     		.value	0x175
+ 13814 274f 31       		.uleb128 0x31
+ 13815 2750 440E0000 		.long	0xe44
+ 13816 2754 03       		.byte	0x3
+ 13817 2755 91       		.byte	0x91
+ 13818 2756 C07B     		.sleb128 -576
+ 13819 2758 31       		.uleb128 0x31
+ 13820 2759 380E0000 		.long	0xe38
+ 13821 275d 03       		.byte	0x3
+ 13822 275e 91       		.byte	0x91
+ 13823 275f D07B     		.sleb128 -560
+ 13824 2761 00       		.byte	0x0
+ 13825 2762 00       		.byte	0x0
+ 13826 2763 00       		.byte	0x0
+ 13827 2764 00       		.byte	0x0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 396
+
+
+ 13828 2765 30       		.uleb128 0x30
+ 13829 2766 BA0D0000 		.long	0xdba
+ 13830 276a 00000000 		.quad	.LBB526
+ 13830      00000000 
+ 13831 2772 00000000 		.quad	.LBE526
+ 13831      00000000 
+ 13832 277a 03       		.byte	0x3
+ 13833 277b 2006     		.value	0x620
+ 13834 277d 02280000 		.long	0x2802
+ 13835 2781 31       		.uleb128 0x31
+ 13836 2782 CC0D0000 		.long	0xdcc
+ 13837 2786 03       		.byte	0x3
+ 13838 2787 91       		.byte	0x91
+ 13839 2788 E07B     		.sleb128 -544
+ 13840 278a 32       		.uleb128 0x32
+ 13841 278b 00000000 		.quad	.LBB527
+ 13841      00000000 
+ 13842 2793 00000000 		.quad	.LBE527
+ 13842      00000000 
+ 13843 279b 33       		.uleb128 0x33
+ 13844 279c D80D0000 		.long	0xdd8
+ 13845 27a0 09       		.byte	0x9
+ 13846 27a1 03       		.byte	0x3
+ 13847 27a2 00000000 		.quad	mask.8002
+ 13847      00000000 
+ 13848 27aa 34       		.uleb128 0x34
+ 13849 27ab FB0D0000 		.long	0xdfb
+ 13850 27af 00000000 		.quad	.LBB528
+ 13850      00000000 
+ 13851 27b7 00000000 		.quad	.LBE528
+ 13851      00000000 
+ 13852 27bf 03       		.byte	0x3
+ 13853 27c0 FE04     		.value	0x4fe
+ 13854 27c2 31       		.uleb128 0x31
+ 13855 27c3 190E0000 		.long	0xe19
+ 13856 27c7 03       		.byte	0x3
+ 13857 27c8 91       		.byte	0x91
+ 13858 27c9 F07B     		.sleb128 -528
+ 13859 27cb 31       		.uleb128 0x31
+ 13860 27cc 0D0E0000 		.long	0xe0d
+ 13861 27d0 03       		.byte	0x3
+ 13862 27d1 91       		.byte	0x91
+ 13863 27d2 807C     		.sleb128 -512
+ 13864 27d4 34       		.uleb128 0x34
+ 13865 27d5 260E0000 		.long	0xe26
+ 13866 27d9 00000000 		.quad	.LBB530
+ 13866      00000000 
+ 13867 27e1 00000000 		.quad	.LBE530
+ 13867      00000000 
+ 13868 27e9 03       		.byte	0x3
+ 13869 27ea 7501     		.value	0x175
+ 13870 27ec 31       		.uleb128 0x31
+ 13871 27ed 440E0000 		.long	0xe44
+ 13872 27f1 03       		.byte	0x3
+ 13873 27f2 91       		.byte	0x91
+ 13874 27f3 907C     		.sleb128 -496
+ 13875 27f5 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s 			page 397
+
+
+ 13876 27f6 380E0000 		.long	0xe38
+ 13877 27fa 03       		.byte	0x3
+ 13878 27fb 91       		.byte	0x91
+ 13879 27fc A07C     		.sleb128 -480
+ 13880 27fe 00       		.byte	0x0
+ 13881 27ff 00       		.byte	0x0
+ 13882 2800 00       		.byte	0x0
+ 13883 2801 00       		.byte	0x0
+ 13884 2802 34       		.uleb128 0x34
+ 13885 2803 BA0D0000 		.long	0xdba
+ 13886 2807 00000000 		.quad	.LBB532
+ 13886      00000000 
+ 13887 280f 00000000 		.quad	.LBE532
+ 13887      00000000 
+ 13888 2817 03       		.byte	0x3
+ 13889 2818 2106     		.value	0x621
+ 13890 281a 31       		.uleb128 0x31
+ 13891 281b CC0D0000 		.long	0xdcc
+ 13892 281f 03       		.byte	0x3
+ 13893 2820 91       		.byte	0x91
+ 13894 2821 B07C     		.sleb128 -464
+ 13895 2823 32       		.uleb128 0x32
+ 13896 2824 00000000 		.quad	.LBB533
+ 13896      00000000 
+ 13897 282c 00000000 		.quad	.LBE533
+ 13897      00000000 
+ 13898 2834 33       		.uleb128 0x33
+ 13899 2835 D80D0000 		.long	0xdd8
+ 13900 2839 09       		.byte	0x9
+ 13901 283a 03       		.byte	0x3
+ 13902 283b 00000000 		.quad	mask.8002
+ 13902      00000000 
+ 13903 2843 34       		.uleb128 0x34
+ 13904 2844 FB0D0000 		.long	0xdfb
+ 13905 2848 00000000 		.quad	.LBB534
+ 13905      00000000 
+ 13906 2850 00000000 		.quad	.LBE534
+ 13906      00000000 
+ 13907 2858 03       		.byte	0x3
+ 13908 2859 FE04     		.value	0x4fe
+ 13909 285b 31       		.uleb128 0x31
+ 13910 285c 190E0000 		.long	0xe19
+ 13911 2860 03       		.byte	0x3
+ 13912 2861 91       		.byte	0x91
+ 13913 2862 C07C     		.sleb128 -448
+ 13914 2864 31       		.uleb128 0x31
+ 13915 2865 0D0E0000 		.long	0xe0d
+ 13916 2869 03       		.byte	0x3
+ 13917 286a 91       		.byte	0x91
+ 13918 286b D07C     		.sleb128 -432
+ 13919 286d 34       		.uleb128 0x34
+ 13920 286e 260E0000 		.long	0xe26
+ 13921 2872 00000000 		.quad	.LBB536
+ 13921      00000000 
+ 13922 287a 00000000 		.quad	.LBE536
+ 13922      00000000 
+ 13923 2882 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 398
+
+
+ 13924 2883 7501     		.value	0x175
+ 13925 2885 31       		.uleb128 0x31
+ 13926 2886 440E0000 		.long	0xe44
+ 13927 288a 03       		.byte	0x3
+ 13928 288b 91       		.byte	0x91
+ 13929 288c E07C     		.sleb128 -416
+ 13930 288e 31       		.uleb128 0x31
+ 13931 288f 380E0000 		.long	0xe38
+ 13932 2893 03       		.byte	0x3
+ 13933 2894 91       		.byte	0x91
+ 13934 2895 F07C     		.sleb128 -400
+ 13935 2897 00       		.byte	0x0
+ 13936 2898 00       		.byte	0x0
+ 13937 2899 00       		.byte	0x0
+ 13938 289a 00       		.byte	0x0
+ 13939 289b 00       		.byte	0x0
+ 13940 289c 00       		.byte	0x0
+ 13941 289d 30       		.uleb128 0x30
+ 13942 289e E30C0000 		.long	0xce3
+ 13943 28a2 00000000 		.quad	.LBB538
+ 13943      00000000 
+ 13944 28aa 00000000 		.quad	.LBE538
+ 13944      00000000 
+ 13945 28b2 03       		.byte	0x3
+ 13946 28b3 D906     		.value	0x6d9
+ 13947 28b5 63290000 		.long	0x2963
+ 13948 28b9 31       		.uleb128 0x31
+ 13949 28ba 010D0000 		.long	0xd01
+ 13950 28be 03       		.byte	0x3
+ 13951 28bf 91       		.byte	0x91
+ 13952 28c0 8C7D     		.sleb128 -372
+ 13953 28c2 31       		.uleb128 0x31
+ 13954 28c3 F50C0000 		.long	0xcf5
+ 13955 28c7 03       		.byte	0x3
+ 13956 28c8 91       		.byte	0x91
+ 13957 28c9 907D     		.sleb128 -368
+ 13958 28cb 32       		.uleb128 0x32
+ 13959 28cc 00000000 		.quad	.LBB539
+ 13959      00000000 
+ 13960 28d4 00000000 		.quad	.LBE539
+ 13960      00000000 
+ 13961 28dc 33       		.uleb128 0x33
+ 13962 28dd 0D0D0000 		.long	0xd0d
+ 13963 28e1 03       		.byte	0x3
+ 13964 28e2 76       		.byte	0x76
+ 13965 28e3 D062     		.sleb128 -3760
+ 13966 28e5 30       		.uleb128 0x30
+ 13967 28e6 1A0D0000 		.long	0xd1a
+ 13968 28ea 00000000 		.quad	.LBB540
+ 13968      00000000 
+ 13969 28f2 00000000 		.quad	.LBE540
+ 13969      00000000 
+ 13970 28fa 03       		.byte	0x3
+ 13971 28fb 8A06     		.value	0x68a
+ 13972 28fd 14290000 		.long	0x2914
+ 13973 2901 31       		.uleb128 0x31
+ 13974 2902 380D0000 		.long	0xd38
+
GAS LISTING /tmp/ccPaCTqg.s 			page 399
+
+
+ 13975 2906 03       		.byte	0x3
+ 13976 2907 91       		.byte	0x91
+ 13977 2908 AC7D     		.sleb128 -340
+ 13978 290a 31       		.uleb128 0x31
+ 13979 290b 2C0D0000 		.long	0xd2c
+ 13980 290f 03       		.byte	0x3
+ 13981 2910 91       		.byte	0x91
+ 13982 2911 B07D     		.sleb128 -336
+ 13983 2913 00       		.byte	0x0
+ 13984 2914 34       		.uleb128 0x34
+ 13985 2915 450D0000 		.long	0xd45
+ 13986 2919 00000000 		.quad	.LBB542
+ 13986      00000000 
+ 13987 2921 00000000 		.quad	.LBE542
+ 13987      00000000 
+ 13988 2929 03       		.byte	0x3
+ 13989 292a 8B06     		.value	0x68b
+ 13990 292c 31       		.uleb128 0x31
+ 13991 292d 570D0000 		.long	0xd57
+ 13992 2931 03       		.byte	0x3
+ 13993 2932 91       		.byte	0x91
+ 13994 2933 C07D     		.sleb128 -320
+ 13995 2935 34       		.uleb128 0x34
+ 13996 2936 640D0000 		.long	0xd64
+ 13997 293a 00000000 		.quad	.LBB544
+ 13997      00000000 
+ 13998 2942 00000000 		.quad	.LBE544
+ 13998      00000000 
+ 13999 294a 03       		.byte	0x3
+ 14000 294b 4905     		.value	0x549
+ 14001 294d 31       		.uleb128 0x31
+ 14002 294e 820D0000 		.long	0xd82
+ 14003 2952 03       		.byte	0x3
+ 14004 2953 91       		.byte	0x91
+ 14005 2954 DC7D     		.sleb128 -292
+ 14006 2956 31       		.uleb128 0x31
+ 14007 2957 760D0000 		.long	0xd76
+ 14008 295b 03       		.byte	0x3
+ 14009 295c 91       		.byte	0x91
+ 14010 295d E07D     		.sleb128 -288
+ 14011 295f 00       		.byte	0x0
+ 14012 2960 00       		.byte	0x0
+ 14013 2961 00       		.byte	0x0
+ 14014 2962 00       		.byte	0x0
+ 14015 2963 34       		.uleb128 0x34
+ 14016 2964 8F0D0000 		.long	0xd8f
+ 14017 2968 00000000 		.quad	.LBB546
+ 14017      00000000 
+ 14018 2970 00000000 		.quad	.LBE546
+ 14018      00000000 
+ 14019 2978 03       		.byte	0x3
+ 14020 2979 D906     		.value	0x6d9
+ 14021 297b 31       		.uleb128 0x31
+ 14022 297c A10D0000 		.long	0xda1
+ 14023 2980 03       		.byte	0x3
+ 14024 2981 91       		.byte	0x91
+ 14025 2982 F07D     		.sleb128 -272
+
GAS LISTING /tmp/ccPaCTqg.s 			page 400
+
+
+ 14026 2984 32       		.uleb128 0x32
+ 14027 2985 00000000 		.quad	.LBB547
+ 14027      00000000 
+ 14028 298d 00000000 		.quad	.LBE547
+ 14028      00000000 
+ 14029 2995 33       		.uleb128 0x33
+ 14030 2996 AD0D0000 		.long	0xdad
+ 14031 299a 03       		.byte	0x3
+ 14032 299b 76       		.byte	0x76
+ 14033 299c E062     		.sleb128 -3744
+ 14034 299e 30       		.uleb128 0x30
+ 14035 299f BA0D0000 		.long	0xdba
+ 14036 29a3 00000000 		.quad	.LBB548
+ 14036      00000000 
+ 14037 29ab 00000000 		.quad	.LBE548
+ 14037      00000000 
+ 14038 29b3 03       		.byte	0x3
+ 14039 29b4 1F06     		.value	0x61f
+ 14040 29b6 3B2A0000 		.long	0x2a3b
+ 14041 29ba 31       		.uleb128 0x31
+ 14042 29bb CC0D0000 		.long	0xdcc
+ 14043 29bf 03       		.byte	0x3
+ 14044 29c0 91       		.byte	0x91
+ 14045 29c1 807E     		.sleb128 -256
+ 14046 29c3 32       		.uleb128 0x32
+ 14047 29c4 00000000 		.quad	.LBB549
+ 14047      00000000 
+ 14048 29cc 00000000 		.quad	.LBE549
+ 14048      00000000 
+ 14049 29d4 33       		.uleb128 0x33
+ 14050 29d5 D80D0000 		.long	0xdd8
+ 14051 29d9 09       		.byte	0x9
+ 14052 29da 03       		.byte	0x3
+ 14053 29db 00000000 		.quad	mask.8002
+ 14053      00000000 
+ 14054 29e3 34       		.uleb128 0x34
+ 14055 29e4 FB0D0000 		.long	0xdfb
+ 14056 29e8 00000000 		.quad	.LBB550
+ 14056      00000000 
+ 14057 29f0 00000000 		.quad	.LBE550
+ 14057      00000000 
+ 14058 29f8 03       		.byte	0x3
+ 14059 29f9 FE04     		.value	0x4fe
+ 14060 29fb 31       		.uleb128 0x31
+ 14061 29fc 190E0000 		.long	0xe19
+ 14062 2a00 03       		.byte	0x3
+ 14063 2a01 91       		.byte	0x91
+ 14064 2a02 907E     		.sleb128 -240
+ 14065 2a04 31       		.uleb128 0x31
+ 14066 2a05 0D0E0000 		.long	0xe0d
+ 14067 2a09 03       		.byte	0x3
+ 14068 2a0a 91       		.byte	0x91
+ 14069 2a0b A07E     		.sleb128 -224
+ 14070 2a0d 34       		.uleb128 0x34
+ 14071 2a0e 260E0000 		.long	0xe26
+ 14072 2a12 00000000 		.quad	.LBB552
+ 14072      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 401
+
+
+ 14073 2a1a 00000000 		.quad	.LBE552
+ 14073      00000000 
+ 14074 2a22 03       		.byte	0x3
+ 14075 2a23 7501     		.value	0x175
+ 14076 2a25 31       		.uleb128 0x31
+ 14077 2a26 440E0000 		.long	0xe44
+ 14078 2a2a 03       		.byte	0x3
+ 14079 2a2b 91       		.byte	0x91
+ 14080 2a2c B07E     		.sleb128 -208
+ 14081 2a2e 31       		.uleb128 0x31
+ 14082 2a2f 380E0000 		.long	0xe38
+ 14083 2a33 03       		.byte	0x3
+ 14084 2a34 91       		.byte	0x91
+ 14085 2a35 C07E     		.sleb128 -192
+ 14086 2a37 00       		.byte	0x0
+ 14087 2a38 00       		.byte	0x0
+ 14088 2a39 00       		.byte	0x0
+ 14089 2a3a 00       		.byte	0x0
+ 14090 2a3b 30       		.uleb128 0x30
+ 14091 2a3c BA0D0000 		.long	0xdba
+ 14092 2a40 00000000 		.quad	.LBB554
+ 14092      00000000 
+ 14093 2a48 00000000 		.quad	.LBE554
+ 14093      00000000 
+ 14094 2a50 03       		.byte	0x3
+ 14095 2a51 2006     		.value	0x620
+ 14096 2a53 D82A0000 		.long	0x2ad8
+ 14097 2a57 31       		.uleb128 0x31
+ 14098 2a58 CC0D0000 		.long	0xdcc
+ 14099 2a5c 03       		.byte	0x3
+ 14100 2a5d 91       		.byte	0x91
+ 14101 2a5e D07E     		.sleb128 -176
+ 14102 2a60 32       		.uleb128 0x32
+ 14103 2a61 00000000 		.quad	.LBB555
+ 14103      00000000 
+ 14104 2a69 00000000 		.quad	.LBE555
+ 14104      00000000 
+ 14105 2a71 33       		.uleb128 0x33
+ 14106 2a72 D80D0000 		.long	0xdd8
+ 14107 2a76 09       		.byte	0x9
+ 14108 2a77 03       		.byte	0x3
+ 14109 2a78 00000000 		.quad	mask.8002
+ 14109      00000000 
+ 14110 2a80 34       		.uleb128 0x34
+ 14111 2a81 FB0D0000 		.long	0xdfb
+ 14112 2a85 00000000 		.quad	.LBB556
+ 14112      00000000 
+ 14113 2a8d 00000000 		.quad	.LBE556
+ 14113      00000000 
+ 14114 2a95 03       		.byte	0x3
+ 14115 2a96 FE04     		.value	0x4fe
+ 14116 2a98 31       		.uleb128 0x31
+ 14117 2a99 190E0000 		.long	0xe19
+ 14118 2a9d 03       		.byte	0x3
+ 14119 2a9e 91       		.byte	0x91
+ 14120 2a9f E07E     		.sleb128 -160
+ 14121 2aa1 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s 			page 402
+
+
+ 14122 2aa2 0D0E0000 		.long	0xe0d
+ 14123 2aa6 03       		.byte	0x3
+ 14124 2aa7 91       		.byte	0x91
+ 14125 2aa8 F07E     		.sleb128 -144
+ 14126 2aaa 34       		.uleb128 0x34
+ 14127 2aab 260E0000 		.long	0xe26
+ 14128 2aaf 00000000 		.quad	.LBB558
+ 14128      00000000 
+ 14129 2ab7 00000000 		.quad	.LBE558
+ 14129      00000000 
+ 14130 2abf 03       		.byte	0x3
+ 14131 2ac0 7501     		.value	0x175
+ 14132 2ac2 31       		.uleb128 0x31
+ 14133 2ac3 440E0000 		.long	0xe44
+ 14134 2ac7 03       		.byte	0x3
+ 14135 2ac8 91       		.byte	0x91
+ 14136 2ac9 807F     		.sleb128 -128
+ 14137 2acb 31       		.uleb128 0x31
+ 14138 2acc 380E0000 		.long	0xe38
+ 14139 2ad0 03       		.byte	0x3
+ 14140 2ad1 91       		.byte	0x91
+ 14141 2ad2 907F     		.sleb128 -112
+ 14142 2ad4 00       		.byte	0x0
+ 14143 2ad5 00       		.byte	0x0
+ 14144 2ad6 00       		.byte	0x0
+ 14145 2ad7 00       		.byte	0x0
+ 14146 2ad8 34       		.uleb128 0x34
+ 14147 2ad9 BA0D0000 		.long	0xdba
+ 14148 2add 00000000 		.quad	.LBB560
+ 14148      00000000 
+ 14149 2ae5 00000000 		.quad	.LBE560
+ 14149      00000000 
+ 14150 2aed 03       		.byte	0x3
+ 14151 2aee 2106     		.value	0x621
+ 14152 2af0 31       		.uleb128 0x31
+ 14153 2af1 CC0D0000 		.long	0xdcc
+ 14154 2af5 03       		.byte	0x3
+ 14155 2af6 91       		.byte	0x91
+ 14156 2af7 A07F     		.sleb128 -96
+ 14157 2af9 32       		.uleb128 0x32
+ 14158 2afa 00000000 		.quad	.LBB561
+ 14158      00000000 
+ 14159 2b02 00000000 		.quad	.LBE561
+ 14159      00000000 
+ 14160 2b0a 33       		.uleb128 0x33
+ 14161 2b0b D80D0000 		.long	0xdd8
+ 14162 2b0f 09       		.byte	0x9
+ 14163 2b10 03       		.byte	0x3
+ 14164 2b11 00000000 		.quad	mask.8002
+ 14164      00000000 
+ 14165 2b19 34       		.uleb128 0x34
+ 14166 2b1a FB0D0000 		.long	0xdfb
+ 14167 2b1e 00000000 		.quad	.LBB562
+ 14167      00000000 
+ 14168 2b26 00000000 		.quad	.LBE562
+ 14168      00000000 
+ 14169 2b2e 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 403
+
+
+ 14170 2b2f FE04     		.value	0x4fe
+ 14171 2b31 31       		.uleb128 0x31
+ 14172 2b32 190E0000 		.long	0xe19
+ 14173 2b36 03       		.byte	0x3
+ 14174 2b37 91       		.byte	0x91
+ 14175 2b38 B07F     		.sleb128 -80
+ 14176 2b3a 31       		.uleb128 0x31
+ 14177 2b3b 0D0E0000 		.long	0xe0d
+ 14178 2b3f 02       		.byte	0x2
+ 14179 2b40 91       		.byte	0x91
+ 14180 2b41 40       		.sleb128 -64
+ 14181 2b42 34       		.uleb128 0x34
+ 14182 2b43 260E0000 		.long	0xe26
+ 14183 2b47 00000000 		.quad	.LBB564
+ 14183      00000000 
+ 14184 2b4f 00000000 		.quad	.LBE564
+ 14184      00000000 
+ 14185 2b57 03       		.byte	0x3
+ 14186 2b58 7501     		.value	0x175
+ 14187 2b5a 31       		.uleb128 0x31
+ 14188 2b5b 440E0000 		.long	0xe44
+ 14189 2b5f 02       		.byte	0x2
+ 14190 2b60 91       		.byte	0x91
+ 14191 2b61 50       		.sleb128 -48
+ 14192 2b62 31       		.uleb128 0x31
+ 14193 2b63 380E0000 		.long	0xe38
+ 14194 2b67 02       		.byte	0x2
+ 14195 2b68 91       		.byte	0x91
+ 14196 2b69 60       		.sleb128 -32
+ 14197 2b6a 00       		.byte	0x0
+ 14198 2b6b 00       		.byte	0x0
+ 14199 2b6c 00       		.byte	0x0
+ 14200 2b6d 00       		.byte	0x0
+ 14201 2b6e 00       		.byte	0x0
+ 14202 2b6f 00       		.byte	0x0
+ 14203 2b70 00       		.byte	0x0
+ 14204 2b71 07       		.uleb128 0x7
+ 14205 2b72 08       		.byte	0x8
+ 14206 2b73 C9010000 		.long	0x1c9
+ 14207 2b77 07       		.uleb128 0x7
+ 14208 2b78 08       		.byte	0x8
+ 14209 2b79 7D2B0000 		.long	0x2b7d
+ 14210 2b7d 06       		.uleb128 0x6
+ 14211 2b7e 14040000 		.long	0x414
+ 14212 2b82 27       		.uleb128 0x27
+ 14213 2b83 00000000 		.long	.LASF338
+ 14214 2b87 03       		.byte	0x3
+ 14215 2b88 1105     		.value	0x511
+ 14216 2b8a 01       		.byte	0x1
+ 14217 2b8b C9010000 		.long	0x1c9
+ 14218 2b8f 03       		.byte	0x3
+ 14219 2b90 BE2B0000 		.long	0x2bbe
+ 14220 2b94 28       		.uleb128 0x28
+ 14221 2b95 00000000 		.long	.LASF63
+ 14222 2b99 03       		.byte	0x3
+ 14223 2b9a 1105     		.value	0x511
+ 14224 2b9c C9010000 		.long	0x1c9
+
GAS LISTING /tmp/ccPaCTqg.s 			page 404
+
+
+ 14225 2ba0 2C       		.uleb128 0x2c
+ 14226 2ba1 00000000 		.long	.LASF329
+ 14227 2ba5 03       		.byte	0x3
+ 14228 2ba6 1405     		.value	0x514
+ 14229 2ba8 F60D0000 		.long	0xdf6
+ 14230 2bac 10       		.byte	0x10
+ 14231 2bad 08       		.byte	0x8
+ 14232 2bae 09       		.byte	0x9
+ 14233 2baf 0A       		.byte	0xa
+ 14234 2bb0 0B       		.byte	0xb
+ 14235 2bb1 0C       		.byte	0xc
+ 14236 2bb2 0D       		.byte	0xd
+ 14237 2bb3 0E       		.byte	0xe
+ 14238 2bb4 0F       		.byte	0xf
+ 14239 2bb5 FF       		.byte	0xff
+ 14240 2bb6 FF       		.byte	0xff
+ 14241 2bb7 FF       		.byte	0xff
+ 14242 2bb8 FF       		.byte	0xff
+ 14243 2bb9 FF       		.byte	0xff
+ 14244 2bba FF       		.byte	0xff
+ 14245 2bbb FF       		.byte	0xff
+ 14246 2bbc FF       		.byte	0xff
+ 14247 2bbd 00       		.byte	0x0
+ 14248 2bbe 27       		.uleb128 0x27
+ 14249 2bbf 00000000 		.long	.LASF339
+ 14250 2bc3 03       		.byte	0x3
+ 14251 2bc4 5206     		.value	0x652
+ 14252 2bc6 01       		.byte	0x1
+ 14253 2bc7 C9010000 		.long	0x1c9
+ 14254 2bcb 03       		.byte	0x3
+ 14255 2bcc F52B0000 		.long	0x2bf5
+ 14256 2bd0 28       		.uleb128 0x28
+ 14257 2bd1 00000000 		.long	.LASF63
+ 14258 2bd5 03       		.byte	0x3
+ 14259 2bd6 5206     		.value	0x652
+ 14260 2bd8 C9010000 		.long	0x1c9
+ 14261 2bdc 28       		.uleb128 0x28
+ 14262 2bdd 00000000 		.long	.LASF325
+ 14263 2be1 03       		.byte	0x3
+ 14264 2be2 5206     		.value	0x652
+ 14265 2be4 B4000000 		.long	0xb4
+ 14266 2be8 29       		.uleb128 0x29
+ 14267 2be9 746D7000 		.string	"tmp"
+ 14268 2bed 03       		.byte	0x3
+ 14269 2bee 5506     		.value	0x655
+ 14270 2bf0 C9010000 		.long	0x1c9
+ 14271 2bf4 00       		.byte	0x0
+ 14272 2bf5 27       		.uleb128 0x27
+ 14273 2bf6 00000000 		.long	.LASF340
+ 14274 2bfa 03       		.byte	0x3
+ 14275 2bfb 7E05     		.value	0x57e
+ 14276 2bfd 01       		.byte	0x1
+ 14277 2bfe C9010000 		.long	0x1c9
+ 14278 2c02 03       		.byte	0x3
+ 14279 2c03 142C0000 		.long	0x2c14
+ 14280 2c07 28       		.uleb128 0x28
+ 14281 2c08 00000000 		.long	.LASF63
+
GAS LISTING /tmp/ccPaCTqg.s 			page 405
+
+
+ 14282 2c0c 03       		.byte	0x3
+ 14283 2c0d 7E05     		.value	0x57e
+ 14284 2c0f C9010000 		.long	0x1c9
+ 14285 2c13 00       		.byte	0x0
+ 14286 2c14 27       		.uleb128 0x27
+ 14287 2c15 00000000 		.long	.LASF341
+ 14288 2c19 03       		.byte	0x3
+ 14289 2c1a B705     		.value	0x5b7
+ 14290 2c1c 01       		.byte	0x1
+ 14291 2c1d C9010000 		.long	0x1c9
+ 14292 2c21 03       		.byte	0x3
+ 14293 2c22 3B2C0000 		.long	0x2c3b
+ 14294 2c26 2A       		.uleb128 0x2a
+ 14295 2c27 7700     		.string	"w"
+ 14296 2c29 03       		.byte	0x3
+ 14297 2c2a B705     		.value	0x5b7
+ 14298 2c2c C9010000 		.long	0x1c9
+ 14299 2c30 2A       		.uleb128 0x2a
+ 14300 2c31 7800     		.string	"x"
+ 14301 2c33 03       		.byte	0x3
+ 14302 2c34 B705     		.value	0x5b7
+ 14303 2c36 C9010000 		.long	0x1c9
+ 14304 2c3a 00       		.byte	0x0
+ 14305 2c3b 27       		.uleb128 0x27
+ 14306 2c3c 00000000 		.long	.LASF342
+ 14307 2c40 01       		.byte	0x1
+ 14308 2c41 6C01     		.value	0x16c
+ 14309 2c43 01       		.byte	0x1
+ 14310 2c44 FD000000 		.long	0xfd
+ 14311 2c48 03       		.byte	0x3
+ 14312 2c49 722C0000 		.long	0x2c72
+ 14313 2c4d 28       		.uleb128 0x28
+ 14314 2c4e 00000000 		.long	.LASF343
+ 14315 2c52 01       		.byte	0x1
+ 14316 2c53 6C01     		.value	0x16c
+ 14317 2c55 FD000000 		.long	0xfd
+ 14318 2c59 28       		.uleb128 0x28
+ 14319 2c5a 00000000 		.long	.LASF344
+ 14320 2c5e 01       		.byte	0x1
+ 14321 2c5f 6C01     		.value	0x16c
+ 14322 2c61 FD000000 		.long	0xfd
+ 14323 2c65 28       		.uleb128 0x28
+ 14324 2c66 00000000 		.long	.LASF329
+ 14325 2c6a 01       		.byte	0x1
+ 14326 2c6b 6C01     		.value	0x16c
+ 14327 2c6d B4000000 		.long	0xb4
+ 14328 2c71 00       		.byte	0x0
+ 14329 2c72 27       		.uleb128 0x27
+ 14330 2c73 00000000 		.long	.LASF345
+ 14331 2c77 03       		.byte	0x3
+ 14332 2c78 D705     		.value	0x5d7
+ 14333 2c7a 01       		.byte	0x1
+ 14334 2c7b C9010000 		.long	0x1c9
+ 14335 2c7f 03       		.byte	0x3
+ 14336 2c80 992C0000 		.long	0x2c99
+ 14337 2c84 2A       		.uleb128 0x2a
+ 14338 2c85 7700     		.string	"w"
+
GAS LISTING /tmp/ccPaCTqg.s 			page 406
+
+
+ 14339 2c87 03       		.byte	0x3
+ 14340 2c88 D705     		.value	0x5d7
+ 14341 2c8a C9010000 		.long	0x1c9
+ 14342 2c8e 2A       		.uleb128 0x2a
+ 14343 2c8f 7800     		.string	"x"
+ 14344 2c91 03       		.byte	0x3
+ 14345 2c92 D705     		.value	0x5d7
+ 14346 2c94 C9010000 		.long	0x1c9
+ 14347 2c98 00       		.byte	0x0
+ 14348 2c99 2D       		.uleb128 0x2d
+ 14349 2c9a 00000000 		.long	.LASF347
+ 14350 2c9e 03       		.byte	0x3
+ 14351 2c9f E706     		.value	0x6e7
+ 14352 2ca1 01       		.byte	0x1
+ 14353 2ca2 00000000 		.quad	.LFB657
+ 14353      00000000 
+ 14354 2caa 00000000 		.quad	.LFE657
+ 14354      00000000 
+ 14355 2cb2 00000000 		.long	.LLST7
+ 14356 2cb6 F7580000 		.long	0x58f7
+ 14357 2cba 20       		.uleb128 0x20
+ 14358 2cbb 00000000 		.long	.LASF61
+ 14359 2cbf 03       		.byte	0x3
+ 14360 2cc0 E706     		.value	0x6e7
+ 14361 2cc2 712B0000 		.long	0x2b71
+ 14362 2cc6 03       		.byte	0x3
+ 14363 2cc7 91       		.byte	0x91
+ 14364 2cc8 B852     		.sleb128 -5832
+ 14365 2cca 2E       		.uleb128 0x2e
+ 14366 2ccb 6B657900 		.string	"key"
+ 14367 2ccf 03       		.byte	0x3
+ 14368 2cd0 E706     		.value	0x6e7
+ 14369 2cd2 772B0000 		.long	0x2b77
+ 14370 2cd6 03       		.byte	0x3
+ 14371 2cd7 91       		.byte	0x91
+ 14372 2cd8 B052     		.sleb128 -5840
+ 14373 2cda 35       		.uleb128 0x35
+ 14374 2cdb 763000   		.string	"v0"
+ 14375 2cde 03       		.byte	0x3
+ 14376 2cdf EF06     		.value	0x6ef
+ 14377 2ce1 C9010000 		.long	0x1c9
+ 14378 2ce5 03       		.byte	0x3
+ 14379 2ce6 76       		.byte	0x76
+ 14380 2ce7 D04E     		.sleb128 -6320
+ 14381 2ce9 35       		.uleb128 0x35
+ 14382 2cea 763100   		.string	"v1"
+ 14383 2ced 03       		.byte	0x3
+ 14384 2cee EF06     		.value	0x6ef
+ 14385 2cf0 C9010000 		.long	0x1c9
+ 14386 2cf4 03       		.byte	0x3
+ 14387 2cf5 76       		.byte	0x76
+ 14388 2cf6 E04E     		.sleb128 -6304
+ 14389 2cf8 35       		.uleb128 0x35
+ 14390 2cf9 763200   		.string	"v2"
+ 14391 2cfc 03       		.byte	0x3
+ 14392 2cfd EF06     		.value	0x6ef
+ 14393 2cff C9010000 		.long	0x1c9
+
GAS LISTING /tmp/ccPaCTqg.s 			page 407
+
+
+ 14394 2d03 03       		.byte	0x3
+ 14395 2d04 76       		.byte	0x76
+ 14396 2d05 F04E     		.sleb128 -6288
+ 14397 2d07 35       		.uleb128 0x35
+ 14398 2d08 763300   		.string	"v3"
+ 14399 2d0b 03       		.byte	0x3
+ 14400 2d0c EF06     		.value	0x6ef
+ 14401 2d0e C9010000 		.long	0x1c9
+ 14402 2d12 03       		.byte	0x3
+ 14403 2d13 76       		.byte	0x76
+ 14404 2d14 804F     		.sleb128 -6272
+ 14405 2d16 35       		.uleb128 0x35
+ 14406 2d17 763400   		.string	"v4"
+ 14407 2d1a 03       		.byte	0x3
+ 14408 2d1b EF06     		.value	0x6ef
+ 14409 2d1d C9010000 		.long	0x1c9
+ 14410 2d21 03       		.byte	0x3
+ 14411 2d22 76       		.byte	0x76
+ 14412 2d23 904F     		.sleb128 -6256
+ 14413 2d25 35       		.uleb128 0x35
+ 14414 2d26 6B00     		.string	"k"
+ 14415 2d28 03       		.byte	0x3
+ 14416 2d29 F006     		.value	0x6f0
+ 14417 2d2b C9010000 		.long	0x1c9
+ 14418 2d2f 03       		.byte	0x3
+ 14419 2d30 76       		.byte	0x76
+ 14420 2d31 A04F     		.sleb128 -6240
+ 14421 2d33 30       		.uleb128 0x30
+ 14422 2d34 BB0C0000 		.long	0xcbb
+ 14423 2d38 00000000 		.quad	.LBB1000
+ 14423      00000000 
+ 14424 2d40 00000000 		.quad	.LBE1000
+ 14424      00000000 
+ 14425 2d48 03       		.byte	0x3
+ 14426 2d49 F306     		.value	0x6f3
+ 14427 2d4b 742D0000 		.long	0x2d74
+ 14428 2d4f 31       		.uleb128 0x31
+ 14429 2d50 CC0C0000 		.long	0xccc
+ 14430 2d54 03       		.byte	0x3
+ 14431 2d55 91       		.byte	0x91
+ 14432 2d56 C052     		.sleb128 -5824
+ 14433 2d58 32       		.uleb128 0x32
+ 14434 2d59 00000000 		.quad	.LBB1001
+ 14434      00000000 
+ 14435 2d61 00000000 		.quad	.LBE1001
+ 14435      00000000 
+ 14436 2d69 33       		.uleb128 0x33
+ 14437 2d6a D70C0000 		.long	0xcd7
+ 14438 2d6e 03       		.byte	0x3
+ 14439 2d6f 76       		.byte	0x76
+ 14440 2d70 B04F     		.sleb128 -6224
+ 14441 2d72 00       		.byte	0x0
+ 14442 2d73 00       		.byte	0x0
+ 14443 2d74 30       		.uleb128 0x30
+ 14444 2d75 BB0C0000 		.long	0xcbb
+ 14445 2d79 00000000 		.quad	.LBB1002
+ 14445      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 408
+
+
+ 14446 2d81 00000000 		.quad	.LBE1002
+ 14446      00000000 
+ 14447 2d89 03       		.byte	0x3
+ 14448 2d8a F406     		.value	0x6f4
+ 14449 2d8c B52D0000 		.long	0x2db5
+ 14450 2d90 31       		.uleb128 0x31
+ 14451 2d91 CC0C0000 		.long	0xccc
+ 14452 2d95 03       		.byte	0x3
+ 14453 2d96 91       		.byte	0x91
+ 14454 2d97 C852     		.sleb128 -5816
+ 14455 2d99 32       		.uleb128 0x32
+ 14456 2d9a 00000000 		.quad	.LBB1003
+ 14456      00000000 
+ 14457 2da2 00000000 		.quad	.LBE1003
+ 14457      00000000 
+ 14458 2daa 33       		.uleb128 0x33
+ 14459 2dab D70C0000 		.long	0xcd7
+ 14460 2daf 03       		.byte	0x3
+ 14461 2db0 76       		.byte	0x76
+ 14462 2db1 C04F     		.sleb128 -6208
+ 14463 2db3 00       		.byte	0x0
+ 14464 2db4 00       		.byte	0x0
+ 14465 2db5 30       		.uleb128 0x30
+ 14466 2db6 822B0000 		.long	0x2b82
+ 14467 2dba 00000000 		.quad	.LBB1004
+ 14467      00000000 
+ 14468 2dc2 00000000 		.quad	.LBE1004
+ 14468      00000000 
+ 14469 2dca 03       		.byte	0x3
+ 14470 2dcb F506     		.value	0x6f5
+ 14471 2dcd 522E0000 		.long	0x2e52
+ 14472 2dd1 31       		.uleb128 0x31
+ 14473 2dd2 942B0000 		.long	0x2b94
+ 14474 2dd6 03       		.byte	0x3
+ 14475 2dd7 91       		.byte	0x91
+ 14476 2dd8 D052     		.sleb128 -5808
+ 14477 2dda 32       		.uleb128 0x32
+ 14478 2ddb 00000000 		.quad	.LBB1005
+ 14478      00000000 
+ 14479 2de3 00000000 		.quad	.LBE1005
+ 14479      00000000 
+ 14480 2deb 33       		.uleb128 0x33
+ 14481 2dec A02B0000 		.long	0x2ba0
+ 14482 2df0 09       		.byte	0x9
+ 14483 2df1 03       		.byte	0x3
+ 14484 2df2 00000000 		.quad	mask.8011
+ 14484      00000000 
+ 14485 2dfa 34       		.uleb128 0x34
+ 14486 2dfb FB0D0000 		.long	0xdfb
+ 14487 2dff 00000000 		.quad	.LBB1006
+ 14487      00000000 
+ 14488 2e07 00000000 		.quad	.LBE1006
+ 14488      00000000 
+ 14489 2e0f 03       		.byte	0x3
+ 14490 2e10 1505     		.value	0x515
+ 14491 2e12 31       		.uleb128 0x31
+ 14492 2e13 190E0000 		.long	0xe19
+
GAS LISTING /tmp/ccPaCTqg.s 			page 409
+
+
+ 14493 2e17 03       		.byte	0x3
+ 14494 2e18 91       		.byte	0x91
+ 14495 2e19 E052     		.sleb128 -5792
+ 14496 2e1b 31       		.uleb128 0x31
+ 14497 2e1c 0D0E0000 		.long	0xe0d
+ 14498 2e20 03       		.byte	0x3
+ 14499 2e21 91       		.byte	0x91
+ 14500 2e22 F052     		.sleb128 -5776
+ 14501 2e24 34       		.uleb128 0x34
+ 14502 2e25 260E0000 		.long	0xe26
+ 14503 2e29 00000000 		.quad	.LBB1008
+ 14503      00000000 
+ 14504 2e31 00000000 		.quad	.LBE1008
+ 14504      00000000 
+ 14505 2e39 03       		.byte	0x3
+ 14506 2e3a 7501     		.value	0x175
+ 14507 2e3c 31       		.uleb128 0x31
+ 14508 2e3d 440E0000 		.long	0xe44
+ 14509 2e41 03       		.byte	0x3
+ 14510 2e42 91       		.byte	0x91
+ 14511 2e43 8053     		.sleb128 -5760
+ 14512 2e45 31       		.uleb128 0x31
+ 14513 2e46 380E0000 		.long	0xe38
+ 14514 2e4a 03       		.byte	0x3
+ 14515 2e4b 91       		.byte	0x91
+ 14516 2e4c 9053     		.sleb128 -5744
+ 14517 2e4e 00       		.byte	0x0
+ 14518 2e4f 00       		.byte	0x0
+ 14519 2e50 00       		.byte	0x0
+ 14520 2e51 00       		.byte	0x0
+ 14521 2e52 30       		.uleb128 0x30
+ 14522 2e53 BE2B0000 		.long	0x2bbe
+ 14523 2e57 00000000 		.quad	.LBB1010
+ 14523      00000000 
+ 14524 2e5f 00000000 		.quad	.LBE1010
+ 14524      00000000 
+ 14525 2e67 03       		.byte	0x3
+ 14526 2e68 FC06     		.value	0x6fc
+ 14527 2e6a 182F0000 		.long	0x2f18
+ 14528 2e6e 31       		.uleb128 0x31
+ 14529 2e6f DC2B0000 		.long	0x2bdc
+ 14530 2e73 03       		.byte	0x3
+ 14531 2e74 91       		.byte	0x91
+ 14532 2e75 AC53     		.sleb128 -5716
+ 14533 2e77 31       		.uleb128 0x31
+ 14534 2e78 D02B0000 		.long	0x2bd0
+ 14535 2e7c 03       		.byte	0x3
+ 14536 2e7d 91       		.byte	0x91
+ 14537 2e7e B053     		.sleb128 -5712
+ 14538 2e80 32       		.uleb128 0x32
+ 14539 2e81 00000000 		.quad	.LBB1011
+ 14539      00000000 
+ 14540 2e89 00000000 		.quad	.LBE1011
+ 14540      00000000 
+ 14541 2e91 33       		.uleb128 0x33
+ 14542 2e92 E82B0000 		.long	0x2be8
+ 14543 2e96 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 410
+
+
+ 14544 2e97 76       		.byte	0x76
+ 14545 2e98 D04F     		.sleb128 -6192
+ 14546 2e9a 30       		.uleb128 0x30
+ 14547 2e9b 1A0D0000 		.long	0xd1a
+ 14548 2e9f 00000000 		.quad	.LBB1012
+ 14548      00000000 
+ 14549 2ea7 00000000 		.quad	.LBE1012
+ 14549      00000000 
+ 14550 2eaf 03       		.byte	0x3
+ 14551 2eb0 5606     		.value	0x656
+ 14552 2eb2 C92E0000 		.long	0x2ec9
+ 14553 2eb6 31       		.uleb128 0x31
+ 14554 2eb7 380D0000 		.long	0xd38
+ 14555 2ebb 03       		.byte	0x3
+ 14556 2ebc 91       		.byte	0x91
+ 14557 2ebd CC53     		.sleb128 -5684
+ 14558 2ebf 31       		.uleb128 0x31
+ 14559 2ec0 2C0D0000 		.long	0xd2c
+ 14560 2ec4 03       		.byte	0x3
+ 14561 2ec5 91       		.byte	0x91
+ 14562 2ec6 D053     		.sleb128 -5680
+ 14563 2ec8 00       		.byte	0x0
+ 14564 2ec9 34       		.uleb128 0x34
+ 14565 2eca F52B0000 		.long	0x2bf5
+ 14566 2ece 00000000 		.quad	.LBB1014
+ 14566      00000000 
+ 14567 2ed6 00000000 		.quad	.LBE1014
+ 14567      00000000 
+ 14568 2ede 03       		.byte	0x3
+ 14569 2edf 5706     		.value	0x657
+ 14570 2ee1 31       		.uleb128 0x31
+ 14571 2ee2 072C0000 		.long	0x2c07
+ 14572 2ee6 03       		.byte	0x3
+ 14573 2ee7 91       		.byte	0x91
+ 14574 2ee8 E053     		.sleb128 -5664
+ 14575 2eea 34       		.uleb128 0x34
+ 14576 2eeb 640D0000 		.long	0xd64
+ 14577 2eef 00000000 		.quad	.LBB1016
+ 14577      00000000 
+ 14578 2ef7 00000000 		.quad	.LBE1016
+ 14578      00000000 
+ 14579 2eff 03       		.byte	0x3
+ 14580 2f00 8105     		.value	0x581
+ 14581 2f02 31       		.uleb128 0x31
+ 14582 2f03 820D0000 		.long	0xd82
+ 14583 2f07 03       		.byte	0x3
+ 14584 2f08 91       		.byte	0x91
+ 14585 2f09 FC53     		.sleb128 -5636
+ 14586 2f0b 31       		.uleb128 0x31
+ 14587 2f0c 760D0000 		.long	0xd76
+ 14588 2f10 03       		.byte	0x3
+ 14589 2f11 91       		.byte	0x91
+ 14590 2f12 8054     		.sleb128 -5632
+ 14591 2f14 00       		.byte	0x0
+ 14592 2f15 00       		.byte	0x0
+ 14593 2f16 00       		.byte	0x0
+ 14594 2f17 00       		.byte	0x0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 411
+
+
+ 14595 2f18 30       		.uleb128 0x30
+ 14596 2f19 8F0D0000 		.long	0xd8f
+ 14597 2f1d 00000000 		.quad	.LBB1018
+ 14597      00000000 
+ 14598 2f25 00000000 		.quad	.LBE1018
+ 14598      00000000 
+ 14599 2f2d 03       		.byte	0x3
+ 14600 2f2e FE06     		.value	0x6fe
+ 14601 2f30 2C310000 		.long	0x312c
+ 14602 2f34 31       		.uleb128 0x31
+ 14603 2f35 A10D0000 		.long	0xda1
+ 14604 2f39 03       		.byte	0x3
+ 14605 2f3a 91       		.byte	0x91
+ 14606 2f3b 9054     		.sleb128 -5616
+ 14607 2f3d 32       		.uleb128 0x32
+ 14608 2f3e 00000000 		.quad	.LBB1019
+ 14608      00000000 
+ 14609 2f46 00000000 		.quad	.LBE1019
+ 14609      00000000 
+ 14610 2f4e 33       		.uleb128 0x33
+ 14611 2f4f AD0D0000 		.long	0xdad
+ 14612 2f53 03       		.byte	0x3
+ 14613 2f54 76       		.byte	0x76
+ 14614 2f55 E04F     		.sleb128 -6176
+ 14615 2f57 30       		.uleb128 0x30
+ 14616 2f58 BA0D0000 		.long	0xdba
+ 14617 2f5c 00000000 		.quad	.LBB1020
+ 14617      00000000 
+ 14618 2f64 00000000 		.quad	.LBE1020
+ 14618      00000000 
+ 14619 2f6c 03       		.byte	0x3
+ 14620 2f6d 1F06     		.value	0x61f
+ 14621 2f6f F42F0000 		.long	0x2ff4
+ 14622 2f73 31       		.uleb128 0x31
+ 14623 2f74 CC0D0000 		.long	0xdcc
+ 14624 2f78 03       		.byte	0x3
+ 14625 2f79 91       		.byte	0x91
+ 14626 2f7a A054     		.sleb128 -5600
+ 14627 2f7c 32       		.uleb128 0x32
+ 14628 2f7d 00000000 		.quad	.LBB1021
+ 14628      00000000 
+ 14629 2f85 00000000 		.quad	.LBE1021
+ 14629      00000000 
+ 14630 2f8d 33       		.uleb128 0x33
+ 14631 2f8e D80D0000 		.long	0xdd8
+ 14632 2f92 09       		.byte	0x9
+ 14633 2f93 03       		.byte	0x3
+ 14634 2f94 00000000 		.quad	mask.8002
+ 14634      00000000 
+ 14635 2f9c 34       		.uleb128 0x34
+ 14636 2f9d FB0D0000 		.long	0xdfb
+ 14637 2fa1 00000000 		.quad	.LBB1022
+ 14637      00000000 
+ 14638 2fa9 00000000 		.quad	.LBE1022
+ 14638      00000000 
+ 14639 2fb1 03       		.byte	0x3
+ 14640 2fb2 FE04     		.value	0x4fe
+
GAS LISTING /tmp/ccPaCTqg.s 			page 412
+
+
+ 14641 2fb4 31       		.uleb128 0x31
+ 14642 2fb5 190E0000 		.long	0xe19
+ 14643 2fb9 03       		.byte	0x3
+ 14644 2fba 91       		.byte	0x91
+ 14645 2fbb B054     		.sleb128 -5584
+ 14646 2fbd 31       		.uleb128 0x31
+ 14647 2fbe 0D0E0000 		.long	0xe0d
+ 14648 2fc2 03       		.byte	0x3
+ 14649 2fc3 91       		.byte	0x91
+ 14650 2fc4 C054     		.sleb128 -5568
+ 14651 2fc6 34       		.uleb128 0x34
+ 14652 2fc7 260E0000 		.long	0xe26
+ 14653 2fcb 00000000 		.quad	.LBB1024
+ 14653      00000000 
+ 14654 2fd3 00000000 		.quad	.LBE1024
+ 14654      00000000 
+ 14655 2fdb 03       		.byte	0x3
+ 14656 2fdc 7501     		.value	0x175
+ 14657 2fde 31       		.uleb128 0x31
+ 14658 2fdf 440E0000 		.long	0xe44
+ 14659 2fe3 03       		.byte	0x3
+ 14660 2fe4 91       		.byte	0x91
+ 14661 2fe5 D054     		.sleb128 -5552
+ 14662 2fe7 31       		.uleb128 0x31
+ 14663 2fe8 380E0000 		.long	0xe38
+ 14664 2fec 03       		.byte	0x3
+ 14665 2fed 91       		.byte	0x91
+ 14666 2fee E054     		.sleb128 -5536
+ 14667 2ff0 00       		.byte	0x0
+ 14668 2ff1 00       		.byte	0x0
+ 14669 2ff2 00       		.byte	0x0
+ 14670 2ff3 00       		.byte	0x0
+ 14671 2ff4 30       		.uleb128 0x30
+ 14672 2ff5 BA0D0000 		.long	0xdba
+ 14673 2ff9 00000000 		.quad	.LBB1026
+ 14673      00000000 
+ 14674 3001 00000000 		.quad	.LBE1026
+ 14674      00000000 
+ 14675 3009 03       		.byte	0x3
+ 14676 300a 2006     		.value	0x620
+ 14677 300c 91300000 		.long	0x3091
+ 14678 3010 31       		.uleb128 0x31
+ 14679 3011 CC0D0000 		.long	0xdcc
+ 14680 3015 03       		.byte	0x3
+ 14681 3016 91       		.byte	0x91
+ 14682 3017 F054     		.sleb128 -5520
+ 14683 3019 32       		.uleb128 0x32
+ 14684 301a 00000000 		.quad	.LBB1027
+ 14684      00000000 
+ 14685 3022 00000000 		.quad	.LBE1027
+ 14685      00000000 
+ 14686 302a 33       		.uleb128 0x33
+ 14687 302b D80D0000 		.long	0xdd8
+ 14688 302f 09       		.byte	0x9
+ 14689 3030 03       		.byte	0x3
+ 14690 3031 00000000 		.quad	mask.8002
+ 14690      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 413
+
+
+ 14691 3039 34       		.uleb128 0x34
+ 14692 303a FB0D0000 		.long	0xdfb
+ 14693 303e 00000000 		.quad	.LBB1028
+ 14693      00000000 
+ 14694 3046 00000000 		.quad	.LBE1028
+ 14694      00000000 
+ 14695 304e 03       		.byte	0x3
+ 14696 304f FE04     		.value	0x4fe
+ 14697 3051 31       		.uleb128 0x31
+ 14698 3052 190E0000 		.long	0xe19
+ 14699 3056 03       		.byte	0x3
+ 14700 3057 91       		.byte	0x91
+ 14701 3058 8055     		.sleb128 -5504
+ 14702 305a 31       		.uleb128 0x31
+ 14703 305b 0D0E0000 		.long	0xe0d
+ 14704 305f 03       		.byte	0x3
+ 14705 3060 91       		.byte	0x91
+ 14706 3061 9055     		.sleb128 -5488
+ 14707 3063 34       		.uleb128 0x34
+ 14708 3064 260E0000 		.long	0xe26
+ 14709 3068 00000000 		.quad	.LBB1030
+ 14709      00000000 
+ 14710 3070 00000000 		.quad	.LBE1030
+ 14710      00000000 
+ 14711 3078 03       		.byte	0x3
+ 14712 3079 7501     		.value	0x175
+ 14713 307b 31       		.uleb128 0x31
+ 14714 307c 440E0000 		.long	0xe44
+ 14715 3080 03       		.byte	0x3
+ 14716 3081 91       		.byte	0x91
+ 14717 3082 A055     		.sleb128 -5472
+ 14718 3084 31       		.uleb128 0x31
+ 14719 3085 380E0000 		.long	0xe38
+ 14720 3089 03       		.byte	0x3
+ 14721 308a 91       		.byte	0x91
+ 14722 308b B055     		.sleb128 -5456
+ 14723 308d 00       		.byte	0x0
+ 14724 308e 00       		.byte	0x0
+ 14725 308f 00       		.byte	0x0
+ 14726 3090 00       		.byte	0x0
+ 14727 3091 34       		.uleb128 0x34
+ 14728 3092 BA0D0000 		.long	0xdba
+ 14729 3096 00000000 		.quad	.LBB1032
+ 14729      00000000 
+ 14730 309e 00000000 		.quad	.LBE1032
+ 14730      00000000 
+ 14731 30a6 03       		.byte	0x3
+ 14732 30a7 2106     		.value	0x621
+ 14733 30a9 31       		.uleb128 0x31
+ 14734 30aa CC0D0000 		.long	0xdcc
+ 14735 30ae 03       		.byte	0x3
+ 14736 30af 91       		.byte	0x91
+ 14737 30b0 C055     		.sleb128 -5440
+ 14738 30b2 32       		.uleb128 0x32
+ 14739 30b3 00000000 		.quad	.LBB1033
+ 14739      00000000 
+ 14740 30bb 00000000 		.quad	.LBE1033
+
GAS LISTING /tmp/ccPaCTqg.s 			page 414
+
+
+ 14740      00000000 
+ 14741 30c3 33       		.uleb128 0x33
+ 14742 30c4 D80D0000 		.long	0xdd8
+ 14743 30c8 09       		.byte	0x9
+ 14744 30c9 03       		.byte	0x3
+ 14745 30ca 00000000 		.quad	mask.8002
+ 14745      00000000 
+ 14746 30d2 34       		.uleb128 0x34
+ 14747 30d3 FB0D0000 		.long	0xdfb
+ 14748 30d7 00000000 		.quad	.LBB1034
+ 14748      00000000 
+ 14749 30df 00000000 		.quad	.LBE1034
+ 14749      00000000 
+ 14750 30e7 03       		.byte	0x3
+ 14751 30e8 FE04     		.value	0x4fe
+ 14752 30ea 31       		.uleb128 0x31
+ 14753 30eb 190E0000 		.long	0xe19
+ 14754 30ef 03       		.byte	0x3
+ 14755 30f0 91       		.byte	0x91
+ 14756 30f1 D055     		.sleb128 -5424
+ 14757 30f3 31       		.uleb128 0x31
+ 14758 30f4 0D0E0000 		.long	0xe0d
+ 14759 30f8 03       		.byte	0x3
+ 14760 30f9 91       		.byte	0x91
+ 14761 30fa E055     		.sleb128 -5408
+ 14762 30fc 34       		.uleb128 0x34
+ 14763 30fd 260E0000 		.long	0xe26
+ 14764 3101 00000000 		.quad	.LBB1036
+ 14764      00000000 
+ 14765 3109 00000000 		.quad	.LBE1036
+ 14765      00000000 
+ 14766 3111 03       		.byte	0x3
+ 14767 3112 7501     		.value	0x175
+ 14768 3114 31       		.uleb128 0x31
+ 14769 3115 440E0000 		.long	0xe44
+ 14770 3119 03       		.byte	0x3
+ 14771 311a 91       		.byte	0x91
+ 14772 311b F055     		.sleb128 -5392
+ 14773 311d 31       		.uleb128 0x31
+ 14774 311e 380E0000 		.long	0xe38
+ 14775 3122 03       		.byte	0x3
+ 14776 3123 91       		.byte	0x91
+ 14777 3124 8056     		.sleb128 -5376
+ 14778 3126 00       		.byte	0x0
+ 14779 3127 00       		.byte	0x0
+ 14780 3128 00       		.byte	0x0
+ 14781 3129 00       		.byte	0x0
+ 14782 312a 00       		.byte	0x0
+ 14783 312b 00       		.byte	0x0
+ 14784 312c 30       		.uleb128 0x30
+ 14785 312d 8F0D0000 		.long	0xd8f
+ 14786 3131 00000000 		.quad	.LBB1038
+ 14786      00000000 
+ 14787 3139 00000000 		.quad	.LBE1038
+ 14787      00000000 
+ 14788 3141 03       		.byte	0x3
+ 14789 3142 0007     		.value	0x700
+
GAS LISTING /tmp/ccPaCTqg.s 			page 415
+
+
+ 14790 3144 40330000 		.long	0x3340
+ 14791 3148 31       		.uleb128 0x31
+ 14792 3149 A10D0000 		.long	0xda1
+ 14793 314d 03       		.byte	0x3
+ 14794 314e 91       		.byte	0x91
+ 14795 314f 9056     		.sleb128 -5360
+ 14796 3151 32       		.uleb128 0x32
+ 14797 3152 00000000 		.quad	.LBB1039
+ 14797      00000000 
+ 14798 315a 00000000 		.quad	.LBE1039
+ 14798      00000000 
+ 14799 3162 33       		.uleb128 0x33
+ 14800 3163 AD0D0000 		.long	0xdad
+ 14801 3167 03       		.byte	0x3
+ 14802 3168 76       		.byte	0x76
+ 14803 3169 F04F     		.sleb128 -6160
+ 14804 316b 30       		.uleb128 0x30
+ 14805 316c BA0D0000 		.long	0xdba
+ 14806 3170 00000000 		.quad	.LBB1040
+ 14806      00000000 
+ 14807 3178 00000000 		.quad	.LBE1040
+ 14807      00000000 
+ 14808 3180 03       		.byte	0x3
+ 14809 3181 1F06     		.value	0x61f
+ 14810 3183 08320000 		.long	0x3208
+ 14811 3187 31       		.uleb128 0x31
+ 14812 3188 CC0D0000 		.long	0xdcc
+ 14813 318c 03       		.byte	0x3
+ 14814 318d 91       		.byte	0x91
+ 14815 318e A056     		.sleb128 -5344
+ 14816 3190 32       		.uleb128 0x32
+ 14817 3191 00000000 		.quad	.LBB1041
+ 14817      00000000 
+ 14818 3199 00000000 		.quad	.LBE1041
+ 14818      00000000 
+ 14819 31a1 33       		.uleb128 0x33
+ 14820 31a2 D80D0000 		.long	0xdd8
+ 14821 31a6 09       		.byte	0x9
+ 14822 31a7 03       		.byte	0x3
+ 14823 31a8 00000000 		.quad	mask.8002
+ 14823      00000000 
+ 14824 31b0 34       		.uleb128 0x34
+ 14825 31b1 FB0D0000 		.long	0xdfb
+ 14826 31b5 00000000 		.quad	.LBB1042
+ 14826      00000000 
+ 14827 31bd 00000000 		.quad	.LBE1042
+ 14827      00000000 
+ 14828 31c5 03       		.byte	0x3
+ 14829 31c6 FE04     		.value	0x4fe
+ 14830 31c8 31       		.uleb128 0x31
+ 14831 31c9 190E0000 		.long	0xe19
+ 14832 31cd 03       		.byte	0x3
+ 14833 31ce 91       		.byte	0x91
+ 14834 31cf B056     		.sleb128 -5328
+ 14835 31d1 31       		.uleb128 0x31
+ 14836 31d2 0D0E0000 		.long	0xe0d
+ 14837 31d6 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 416
+
+
+ 14838 31d7 91       		.byte	0x91
+ 14839 31d8 C056     		.sleb128 -5312
+ 14840 31da 34       		.uleb128 0x34
+ 14841 31db 260E0000 		.long	0xe26
+ 14842 31df 00000000 		.quad	.LBB1044
+ 14842      00000000 
+ 14843 31e7 00000000 		.quad	.LBE1044
+ 14843      00000000 
+ 14844 31ef 03       		.byte	0x3
+ 14845 31f0 7501     		.value	0x175
+ 14846 31f2 31       		.uleb128 0x31
+ 14847 31f3 440E0000 		.long	0xe44
+ 14848 31f7 03       		.byte	0x3
+ 14849 31f8 91       		.byte	0x91
+ 14850 31f9 D056     		.sleb128 -5296
+ 14851 31fb 31       		.uleb128 0x31
+ 14852 31fc 380E0000 		.long	0xe38
+ 14853 3200 03       		.byte	0x3
+ 14854 3201 91       		.byte	0x91
+ 14855 3202 E056     		.sleb128 -5280
+ 14856 3204 00       		.byte	0x0
+ 14857 3205 00       		.byte	0x0
+ 14858 3206 00       		.byte	0x0
+ 14859 3207 00       		.byte	0x0
+ 14860 3208 30       		.uleb128 0x30
+ 14861 3209 BA0D0000 		.long	0xdba
+ 14862 320d 00000000 		.quad	.LBB1046
+ 14862      00000000 
+ 14863 3215 00000000 		.quad	.LBE1046
+ 14863      00000000 
+ 14864 321d 03       		.byte	0x3
+ 14865 321e 2006     		.value	0x620
+ 14866 3220 A5320000 		.long	0x32a5
+ 14867 3224 31       		.uleb128 0x31
+ 14868 3225 CC0D0000 		.long	0xdcc
+ 14869 3229 03       		.byte	0x3
+ 14870 322a 91       		.byte	0x91
+ 14871 322b F056     		.sleb128 -5264
+ 14872 322d 32       		.uleb128 0x32
+ 14873 322e 00000000 		.quad	.LBB1047
+ 14873      00000000 
+ 14874 3236 00000000 		.quad	.LBE1047
+ 14874      00000000 
+ 14875 323e 33       		.uleb128 0x33
+ 14876 323f D80D0000 		.long	0xdd8
+ 14877 3243 09       		.byte	0x9
+ 14878 3244 03       		.byte	0x3
+ 14879 3245 00000000 		.quad	mask.8002
+ 14879      00000000 
+ 14880 324d 34       		.uleb128 0x34
+ 14881 324e FB0D0000 		.long	0xdfb
+ 14882 3252 00000000 		.quad	.LBB1048
+ 14882      00000000 
+ 14883 325a 00000000 		.quad	.LBE1048
+ 14883      00000000 
+ 14884 3262 03       		.byte	0x3
+ 14885 3263 FE04     		.value	0x4fe
+
GAS LISTING /tmp/ccPaCTqg.s 			page 417
+
+
+ 14886 3265 31       		.uleb128 0x31
+ 14887 3266 190E0000 		.long	0xe19
+ 14888 326a 03       		.byte	0x3
+ 14889 326b 91       		.byte	0x91
+ 14890 326c 8057     		.sleb128 -5248
+ 14891 326e 31       		.uleb128 0x31
+ 14892 326f 0D0E0000 		.long	0xe0d
+ 14893 3273 03       		.byte	0x3
+ 14894 3274 91       		.byte	0x91
+ 14895 3275 9057     		.sleb128 -5232
+ 14896 3277 34       		.uleb128 0x34
+ 14897 3278 260E0000 		.long	0xe26
+ 14898 327c 00000000 		.quad	.LBB1050
+ 14898      00000000 
+ 14899 3284 00000000 		.quad	.LBE1050
+ 14899      00000000 
+ 14900 328c 03       		.byte	0x3
+ 14901 328d 7501     		.value	0x175
+ 14902 328f 31       		.uleb128 0x31
+ 14903 3290 440E0000 		.long	0xe44
+ 14904 3294 03       		.byte	0x3
+ 14905 3295 91       		.byte	0x91
+ 14906 3296 A057     		.sleb128 -5216
+ 14907 3298 31       		.uleb128 0x31
+ 14908 3299 380E0000 		.long	0xe38
+ 14909 329d 03       		.byte	0x3
+ 14910 329e 91       		.byte	0x91
+ 14911 329f B057     		.sleb128 -5200
+ 14912 32a1 00       		.byte	0x0
+ 14913 32a2 00       		.byte	0x0
+ 14914 32a3 00       		.byte	0x0
+ 14915 32a4 00       		.byte	0x0
+ 14916 32a5 34       		.uleb128 0x34
+ 14917 32a6 BA0D0000 		.long	0xdba
+ 14918 32aa 00000000 		.quad	.LBB1052
+ 14918      00000000 
+ 14919 32b2 00000000 		.quad	.LBE1052
+ 14919      00000000 
+ 14920 32ba 03       		.byte	0x3
+ 14921 32bb 2106     		.value	0x621
+ 14922 32bd 31       		.uleb128 0x31
+ 14923 32be CC0D0000 		.long	0xdcc
+ 14924 32c2 03       		.byte	0x3
+ 14925 32c3 91       		.byte	0x91
+ 14926 32c4 C057     		.sleb128 -5184
+ 14927 32c6 32       		.uleb128 0x32
+ 14928 32c7 00000000 		.quad	.LBB1053
+ 14928      00000000 
+ 14929 32cf 00000000 		.quad	.LBE1053
+ 14929      00000000 
+ 14930 32d7 33       		.uleb128 0x33
+ 14931 32d8 D80D0000 		.long	0xdd8
+ 14932 32dc 09       		.byte	0x9
+ 14933 32dd 03       		.byte	0x3
+ 14934 32de 00000000 		.quad	mask.8002
+ 14934      00000000 
+ 14935 32e6 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccPaCTqg.s 			page 418
+
+
+ 14936 32e7 FB0D0000 		.long	0xdfb
+ 14937 32eb 00000000 		.quad	.LBB1054
+ 14937      00000000 
+ 14938 32f3 00000000 		.quad	.LBE1054
+ 14938      00000000 
+ 14939 32fb 03       		.byte	0x3
+ 14940 32fc FE04     		.value	0x4fe
+ 14941 32fe 31       		.uleb128 0x31
+ 14942 32ff 190E0000 		.long	0xe19
+ 14943 3303 03       		.byte	0x3
+ 14944 3304 91       		.byte	0x91
+ 14945 3305 D057     		.sleb128 -5168
+ 14946 3307 31       		.uleb128 0x31
+ 14947 3308 0D0E0000 		.long	0xe0d
+ 14948 330c 03       		.byte	0x3
+ 14949 330d 91       		.byte	0x91
+ 14950 330e E057     		.sleb128 -5152
+ 14951 3310 34       		.uleb128 0x34
+ 14952 3311 260E0000 		.long	0xe26
+ 14953 3315 00000000 		.quad	.LBB1056
+ 14953      00000000 
+ 14954 331d 00000000 		.quad	.LBE1056
+ 14954      00000000 
+ 14955 3325 03       		.byte	0x3
+ 14956 3326 7501     		.value	0x175
+ 14957 3328 31       		.uleb128 0x31
+ 14958 3329 440E0000 		.long	0xe44
+ 14959 332d 03       		.byte	0x3
+ 14960 332e 91       		.byte	0x91
+ 14961 332f F057     		.sleb128 -5136
+ 14962 3331 31       		.uleb128 0x31
+ 14963 3332 380E0000 		.long	0xe38
+ 14964 3336 03       		.byte	0x3
+ 14965 3337 91       		.byte	0x91
+ 14966 3338 8058     		.sleb128 -5120
+ 14967 333a 00       		.byte	0x0
+ 14968 333b 00       		.byte	0x0
+ 14969 333c 00       		.byte	0x0
+ 14970 333d 00       		.byte	0x0
+ 14971 333e 00       		.byte	0x0
+ 14972 333f 00       		.byte	0x0
+ 14973 3340 30       		.uleb128 0x30
+ 14974 3341 450D0000 		.long	0xd45
+ 14975 3345 00000000 		.quad	.LBB1058
+ 14975      00000000 
+ 14976 334d 00000000 		.quad	.LBE1058
+ 14976      00000000 
+ 14977 3355 03       		.byte	0x3
+ 14978 3356 0107     		.value	0x701
+ 14979 3358 91330000 		.long	0x3391
+ 14980 335c 31       		.uleb128 0x31
+ 14981 335d 570D0000 		.long	0xd57
+ 14982 3361 03       		.byte	0x3
+ 14983 3362 91       		.byte	0x91
+ 14984 3363 9058     		.sleb128 -5104
+ 14985 3365 34       		.uleb128 0x34
+ 14986 3366 640D0000 		.long	0xd64
+
GAS LISTING /tmp/ccPaCTqg.s 			page 419
+
+
+ 14987 336a 00000000 		.quad	.LBB1060
+ 14987      00000000 
+ 14988 3372 00000000 		.quad	.LBE1060
+ 14988      00000000 
+ 14989 337a 03       		.byte	0x3
+ 14990 337b 4905     		.value	0x549
+ 14991 337d 31       		.uleb128 0x31
+ 14992 337e 820D0000 		.long	0xd82
+ 14993 3382 03       		.byte	0x3
+ 14994 3383 91       		.byte	0x91
+ 14995 3384 AC58     		.sleb128 -5076
+ 14996 3386 31       		.uleb128 0x31
+ 14997 3387 760D0000 		.long	0xd76
+ 14998 338b 03       		.byte	0x3
+ 14999 338c 91       		.byte	0x91
+ 15000 338d B058     		.sleb128 -5072
+ 15001 338f 00       		.byte	0x0
+ 15002 3390 00       		.byte	0x0
+ 15003 3391 30       		.uleb128 0x30
+ 15004 3392 142C0000 		.long	0x2c14
+ 15005 3396 00000000 		.quad	.LBB1062
+ 15005      00000000 
+ 15006 339e 00000000 		.quad	.LBE1062
+ 15006      00000000 
+ 15007 33a6 03       		.byte	0x3
+ 15008 33a7 0307     		.value	0x703
+ 15009 33a9 F4330000 		.long	0x33f4
+ 15010 33ad 31       		.uleb128 0x31
+ 15011 33ae 302C0000 		.long	0x2c30
+ 15012 33b2 03       		.byte	0x3
+ 15013 33b3 91       		.byte	0x91
+ 15014 33b4 C058     		.sleb128 -5056
+ 15015 33b6 31       		.uleb128 0x31
+ 15016 33b7 262C0000 		.long	0x2c26
+ 15017 33bb 03       		.byte	0x3
+ 15018 33bc 91       		.byte	0x91
+ 15019 33bd D058     		.sleb128 -5040
+ 15020 33bf 34       		.uleb128 0x34
+ 15021 33c0 3B2C0000 		.long	0x2c3b
+ 15022 33c4 00000000 		.quad	.LBB1064
+ 15022      00000000 
+ 15023 33cc 00000000 		.quad	.LBE1064
+ 15023      00000000 
+ 15024 33d4 03       		.byte	0x3
+ 15025 33d5 BA05     		.value	0x5ba
+ 15026 33d7 31       		.uleb128 0x31
+ 15027 33d8 652C0000 		.long	0x2c65
+ 15028 33dc 03       		.byte	0x3
+ 15029 33dd 91       		.byte	0x91
+ 15030 33de EC58     		.sleb128 -5012
+ 15031 33e0 31       		.uleb128 0x31
+ 15032 33e1 592C0000 		.long	0x2c59
+ 15033 33e5 03       		.byte	0x3
+ 15034 33e6 91       		.byte	0x91
+ 15035 33e7 F058     		.sleb128 -5008
+ 15036 33e9 31       		.uleb128 0x31
+ 15037 33ea 4D2C0000 		.long	0x2c4d
+
GAS LISTING /tmp/ccPaCTqg.s 			page 420
+
+
+ 15038 33ee 03       		.byte	0x3
+ 15039 33ef 91       		.byte	0x91
+ 15040 33f0 8059     		.sleb128 -4992
+ 15041 33f2 00       		.byte	0x0
+ 15042 33f3 00       		.byte	0x0
+ 15043 33f4 30       		.uleb128 0x30
+ 15044 33f5 722C0000 		.long	0x2c72
+ 15045 33f9 00000000 		.quad	.LBB1066
+ 15045      00000000 
+ 15046 3401 00000000 		.quad	.LBE1066
+ 15046      00000000 
+ 15047 3409 03       		.byte	0x3
+ 15048 340a 0607     		.value	0x706
+ 15049 340c 57340000 		.long	0x3457
+ 15050 3410 31       		.uleb128 0x31
+ 15051 3411 8E2C0000 		.long	0x2c8e
+ 15052 3415 03       		.byte	0x3
+ 15053 3416 91       		.byte	0x91
+ 15054 3417 9059     		.sleb128 -4976
+ 15055 3419 31       		.uleb128 0x31
+ 15056 341a 842C0000 		.long	0x2c84
+ 15057 341e 03       		.byte	0x3
+ 15058 341f 91       		.byte	0x91
+ 15059 3420 A059     		.sleb128 -4960
+ 15060 3422 34       		.uleb128 0x34
+ 15061 3423 3B2C0000 		.long	0x2c3b
+ 15062 3427 00000000 		.quad	.LBB1068
+ 15062      00000000 
+ 15063 342f 00000000 		.quad	.LBE1068
+ 15063      00000000 
+ 15064 3437 03       		.byte	0x3
+ 15065 3438 DA05     		.value	0x5da
+ 15066 343a 31       		.uleb128 0x31
+ 15067 343b 652C0000 		.long	0x2c65
+ 15068 343f 03       		.byte	0x3
+ 15069 3440 91       		.byte	0x91
+ 15070 3441 BC59     		.sleb128 -4932
+ 15071 3443 31       		.uleb128 0x31
+ 15072 3444 592C0000 		.long	0x2c59
+ 15073 3448 03       		.byte	0x3
+ 15074 3449 91       		.byte	0x91
+ 15075 344a C059     		.sleb128 -4928
+ 15076 344c 31       		.uleb128 0x31
+ 15077 344d 4D2C0000 		.long	0x2c4d
+ 15078 3451 03       		.byte	0x3
+ 15079 3452 91       		.byte	0x91
+ 15080 3453 D059     		.sleb128 -4912
+ 15081 3455 00       		.byte	0x0
+ 15082 3456 00       		.byte	0x0
+ 15083 3457 30       		.uleb128 0x30
+ 15084 3458 8F0D0000 		.long	0xd8f
+ 15085 345c 00000000 		.quad	.LBB1070
+ 15085      00000000 
+ 15086 3464 00000000 		.quad	.LBE1070
+ 15086      00000000 
+ 15087 346c 03       		.byte	0x3
+ 15088 346d 0A07     		.value	0x70a
+
GAS LISTING /tmp/ccPaCTqg.s 			page 421
+
+
+ 15089 346f 6B360000 		.long	0x366b
+ 15090 3473 31       		.uleb128 0x31
+ 15091 3474 A10D0000 		.long	0xda1
+ 15092 3478 03       		.byte	0x3
+ 15093 3479 91       		.byte	0x91
+ 15094 347a E059     		.sleb128 -4896
+ 15095 347c 32       		.uleb128 0x32
+ 15096 347d 00000000 		.quad	.LBB1071
+ 15096      00000000 
+ 15097 3485 00000000 		.quad	.LBE1071
+ 15097      00000000 
+ 15098 348d 33       		.uleb128 0x33
+ 15099 348e AD0D0000 		.long	0xdad
+ 15100 3492 03       		.byte	0x3
+ 15101 3493 76       		.byte	0x76
+ 15102 3494 8050     		.sleb128 -6144
+ 15103 3496 30       		.uleb128 0x30
+ 15104 3497 BA0D0000 		.long	0xdba
+ 15105 349b 00000000 		.quad	.LBB1072
+ 15105      00000000 
+ 15106 34a3 00000000 		.quad	.LBE1072
+ 15106      00000000 
+ 15107 34ab 03       		.byte	0x3
+ 15108 34ac 1F06     		.value	0x61f
+ 15109 34ae 33350000 		.long	0x3533
+ 15110 34b2 31       		.uleb128 0x31
+ 15111 34b3 CC0D0000 		.long	0xdcc
+ 15112 34b7 03       		.byte	0x3
+ 15113 34b8 91       		.byte	0x91
+ 15114 34b9 F059     		.sleb128 -4880
+ 15115 34bb 32       		.uleb128 0x32
+ 15116 34bc 00000000 		.quad	.LBB1073
+ 15116      00000000 
+ 15117 34c4 00000000 		.quad	.LBE1073
+ 15117      00000000 
+ 15118 34cc 33       		.uleb128 0x33
+ 15119 34cd D80D0000 		.long	0xdd8
+ 15120 34d1 09       		.byte	0x9
+ 15121 34d2 03       		.byte	0x3
+ 15122 34d3 00000000 		.quad	mask.8002
+ 15122      00000000 
+ 15123 34db 34       		.uleb128 0x34
+ 15124 34dc FB0D0000 		.long	0xdfb
+ 15125 34e0 00000000 		.quad	.LBB1074
+ 15125      00000000 
+ 15126 34e8 00000000 		.quad	.LBE1074
+ 15126      00000000 
+ 15127 34f0 03       		.byte	0x3
+ 15128 34f1 FE04     		.value	0x4fe
+ 15129 34f3 31       		.uleb128 0x31
+ 15130 34f4 190E0000 		.long	0xe19
+ 15131 34f8 03       		.byte	0x3
+ 15132 34f9 91       		.byte	0x91
+ 15133 34fa 805A     		.sleb128 -4864
+ 15134 34fc 31       		.uleb128 0x31
+ 15135 34fd 0D0E0000 		.long	0xe0d
+ 15136 3501 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 422
+
+
+ 15137 3502 91       		.byte	0x91
+ 15138 3503 905A     		.sleb128 -4848
+ 15139 3505 34       		.uleb128 0x34
+ 15140 3506 260E0000 		.long	0xe26
+ 15141 350a 00000000 		.quad	.LBB1076
+ 15141      00000000 
+ 15142 3512 00000000 		.quad	.LBE1076
+ 15142      00000000 
+ 15143 351a 03       		.byte	0x3
+ 15144 351b 7501     		.value	0x175
+ 15145 351d 31       		.uleb128 0x31
+ 15146 351e 440E0000 		.long	0xe44
+ 15147 3522 03       		.byte	0x3
+ 15148 3523 91       		.byte	0x91
+ 15149 3524 A05A     		.sleb128 -4832
+ 15150 3526 31       		.uleb128 0x31
+ 15151 3527 380E0000 		.long	0xe38
+ 15152 352b 03       		.byte	0x3
+ 15153 352c 91       		.byte	0x91
+ 15154 352d B05A     		.sleb128 -4816
+ 15155 352f 00       		.byte	0x0
+ 15156 3530 00       		.byte	0x0
+ 15157 3531 00       		.byte	0x0
+ 15158 3532 00       		.byte	0x0
+ 15159 3533 30       		.uleb128 0x30
+ 15160 3534 BA0D0000 		.long	0xdba
+ 15161 3538 00000000 		.quad	.LBB1078
+ 15161      00000000 
+ 15162 3540 00000000 		.quad	.LBE1078
+ 15162      00000000 
+ 15163 3548 03       		.byte	0x3
+ 15164 3549 2006     		.value	0x620
+ 15165 354b D0350000 		.long	0x35d0
+ 15166 354f 31       		.uleb128 0x31
+ 15167 3550 CC0D0000 		.long	0xdcc
+ 15168 3554 03       		.byte	0x3
+ 15169 3555 91       		.byte	0x91
+ 15170 3556 C05A     		.sleb128 -4800
+ 15171 3558 32       		.uleb128 0x32
+ 15172 3559 00000000 		.quad	.LBB1079
+ 15172      00000000 
+ 15173 3561 00000000 		.quad	.LBE1079
+ 15173      00000000 
+ 15174 3569 33       		.uleb128 0x33
+ 15175 356a D80D0000 		.long	0xdd8
+ 15176 356e 09       		.byte	0x9
+ 15177 356f 03       		.byte	0x3
+ 15178 3570 00000000 		.quad	mask.8002
+ 15178      00000000 
+ 15179 3578 34       		.uleb128 0x34
+ 15180 3579 FB0D0000 		.long	0xdfb
+ 15181 357d 00000000 		.quad	.LBB1080
+ 15181      00000000 
+ 15182 3585 00000000 		.quad	.LBE1080
+ 15182      00000000 
+ 15183 358d 03       		.byte	0x3
+ 15184 358e FE04     		.value	0x4fe
+
GAS LISTING /tmp/ccPaCTqg.s 			page 423
+
+
+ 15185 3590 31       		.uleb128 0x31
+ 15186 3591 190E0000 		.long	0xe19
+ 15187 3595 03       		.byte	0x3
+ 15188 3596 91       		.byte	0x91
+ 15189 3597 D05A     		.sleb128 -4784
+ 15190 3599 31       		.uleb128 0x31
+ 15191 359a 0D0E0000 		.long	0xe0d
+ 15192 359e 03       		.byte	0x3
+ 15193 359f 91       		.byte	0x91
+ 15194 35a0 E05A     		.sleb128 -4768
+ 15195 35a2 34       		.uleb128 0x34
+ 15196 35a3 260E0000 		.long	0xe26
+ 15197 35a7 00000000 		.quad	.LBB1082
+ 15197      00000000 
+ 15198 35af 00000000 		.quad	.LBE1082
+ 15198      00000000 
+ 15199 35b7 03       		.byte	0x3
+ 15200 35b8 7501     		.value	0x175
+ 15201 35ba 31       		.uleb128 0x31
+ 15202 35bb 440E0000 		.long	0xe44
+ 15203 35bf 03       		.byte	0x3
+ 15204 35c0 91       		.byte	0x91
+ 15205 35c1 F05A     		.sleb128 -4752
+ 15206 35c3 31       		.uleb128 0x31
+ 15207 35c4 380E0000 		.long	0xe38
+ 15208 35c8 03       		.byte	0x3
+ 15209 35c9 91       		.byte	0x91
+ 15210 35ca 805B     		.sleb128 -4736
+ 15211 35cc 00       		.byte	0x0
+ 15212 35cd 00       		.byte	0x0
+ 15213 35ce 00       		.byte	0x0
+ 15214 35cf 00       		.byte	0x0
+ 15215 35d0 34       		.uleb128 0x34
+ 15216 35d1 BA0D0000 		.long	0xdba
+ 15217 35d5 00000000 		.quad	.LBB1084
+ 15217      00000000 
+ 15218 35dd 00000000 		.quad	.LBE1084
+ 15218      00000000 
+ 15219 35e5 03       		.byte	0x3
+ 15220 35e6 2106     		.value	0x621
+ 15221 35e8 31       		.uleb128 0x31
+ 15222 35e9 CC0D0000 		.long	0xdcc
+ 15223 35ed 03       		.byte	0x3
+ 15224 35ee 91       		.byte	0x91
+ 15225 35ef 905B     		.sleb128 -4720
+ 15226 35f1 32       		.uleb128 0x32
+ 15227 35f2 00000000 		.quad	.LBB1085
+ 15227      00000000 
+ 15228 35fa 00000000 		.quad	.LBE1085
+ 15228      00000000 
+ 15229 3602 33       		.uleb128 0x33
+ 15230 3603 D80D0000 		.long	0xdd8
+ 15231 3607 09       		.byte	0x9
+ 15232 3608 03       		.byte	0x3
+ 15233 3609 00000000 		.quad	mask.8002
+ 15233      00000000 
+ 15234 3611 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccPaCTqg.s 			page 424
+
+
+ 15235 3612 FB0D0000 		.long	0xdfb
+ 15236 3616 00000000 		.quad	.LBB1086
+ 15236      00000000 
+ 15237 361e 00000000 		.quad	.LBE1086
+ 15237      00000000 
+ 15238 3626 03       		.byte	0x3
+ 15239 3627 FE04     		.value	0x4fe
+ 15240 3629 31       		.uleb128 0x31
+ 15241 362a 190E0000 		.long	0xe19
+ 15242 362e 03       		.byte	0x3
+ 15243 362f 91       		.byte	0x91
+ 15244 3630 A05B     		.sleb128 -4704
+ 15245 3632 31       		.uleb128 0x31
+ 15246 3633 0D0E0000 		.long	0xe0d
+ 15247 3637 03       		.byte	0x3
+ 15248 3638 91       		.byte	0x91
+ 15249 3639 B05B     		.sleb128 -4688
+ 15250 363b 34       		.uleb128 0x34
+ 15251 363c 260E0000 		.long	0xe26
+ 15252 3640 00000000 		.quad	.LBB1088
+ 15252      00000000 
+ 15253 3648 00000000 		.quad	.LBE1088
+ 15253      00000000 
+ 15254 3650 03       		.byte	0x3
+ 15255 3651 7501     		.value	0x175
+ 15256 3653 31       		.uleb128 0x31
+ 15257 3654 440E0000 		.long	0xe44
+ 15258 3658 03       		.byte	0x3
+ 15259 3659 91       		.byte	0x91
+ 15260 365a C05B     		.sleb128 -4672
+ 15261 365c 31       		.uleb128 0x31
+ 15262 365d 380E0000 		.long	0xe38
+ 15263 3661 03       		.byte	0x3
+ 15264 3662 91       		.byte	0x91
+ 15265 3663 D05B     		.sleb128 -4656
+ 15266 3665 00       		.byte	0x0
+ 15267 3666 00       		.byte	0x0
+ 15268 3667 00       		.byte	0x0
+ 15269 3668 00       		.byte	0x0
+ 15270 3669 00       		.byte	0x0
+ 15271 366a 00       		.byte	0x0
+ 15272 366b 30       		.uleb128 0x30
+ 15273 366c 8F0D0000 		.long	0xd8f
+ 15274 3670 00000000 		.quad	.LBB1090
+ 15274      00000000 
+ 15275 3678 00000000 		.quad	.LBE1090
+ 15275      00000000 
+ 15276 3680 03       		.byte	0x3
+ 15277 3681 0B07     		.value	0x70b
+ 15278 3683 7F380000 		.long	0x387f
+ 15279 3687 31       		.uleb128 0x31
+ 15280 3688 A10D0000 		.long	0xda1
+ 15281 368c 03       		.byte	0x3
+ 15282 368d 91       		.byte	0x91
+ 15283 368e E05B     		.sleb128 -4640
+ 15284 3690 32       		.uleb128 0x32
+ 15285 3691 00000000 		.quad	.LBB1091
+
GAS LISTING /tmp/ccPaCTqg.s 			page 425
+
+
+ 15285      00000000 
+ 15286 3699 00000000 		.quad	.LBE1091
+ 15286      00000000 
+ 15287 36a1 33       		.uleb128 0x33
+ 15288 36a2 AD0D0000 		.long	0xdad
+ 15289 36a6 03       		.byte	0x3
+ 15290 36a7 76       		.byte	0x76
+ 15291 36a8 9050     		.sleb128 -6128
+ 15292 36aa 30       		.uleb128 0x30
+ 15293 36ab BA0D0000 		.long	0xdba
+ 15294 36af 00000000 		.quad	.LBB1092
+ 15294      00000000 
+ 15295 36b7 00000000 		.quad	.LBE1092
+ 15295      00000000 
+ 15296 36bf 03       		.byte	0x3
+ 15297 36c0 1F06     		.value	0x61f
+ 15298 36c2 47370000 		.long	0x3747
+ 15299 36c6 31       		.uleb128 0x31
+ 15300 36c7 CC0D0000 		.long	0xdcc
+ 15301 36cb 03       		.byte	0x3
+ 15302 36cc 91       		.byte	0x91
+ 15303 36cd F05B     		.sleb128 -4624
+ 15304 36cf 32       		.uleb128 0x32
+ 15305 36d0 00000000 		.quad	.LBB1093
+ 15305      00000000 
+ 15306 36d8 00000000 		.quad	.LBE1093
+ 15306      00000000 
+ 15307 36e0 33       		.uleb128 0x33
+ 15308 36e1 D80D0000 		.long	0xdd8
+ 15309 36e5 09       		.byte	0x9
+ 15310 36e6 03       		.byte	0x3
+ 15311 36e7 00000000 		.quad	mask.8002
+ 15311      00000000 
+ 15312 36ef 34       		.uleb128 0x34
+ 15313 36f0 FB0D0000 		.long	0xdfb
+ 15314 36f4 00000000 		.quad	.LBB1094
+ 15314      00000000 
+ 15315 36fc 00000000 		.quad	.LBE1094
+ 15315      00000000 
+ 15316 3704 03       		.byte	0x3
+ 15317 3705 FE04     		.value	0x4fe
+ 15318 3707 31       		.uleb128 0x31
+ 15319 3708 190E0000 		.long	0xe19
+ 15320 370c 03       		.byte	0x3
+ 15321 370d 91       		.byte	0x91
+ 15322 370e 805C     		.sleb128 -4608
+ 15323 3710 31       		.uleb128 0x31
+ 15324 3711 0D0E0000 		.long	0xe0d
+ 15325 3715 03       		.byte	0x3
+ 15326 3716 91       		.byte	0x91
+ 15327 3717 905C     		.sleb128 -4592
+ 15328 3719 34       		.uleb128 0x34
+ 15329 371a 260E0000 		.long	0xe26
+ 15330 371e 00000000 		.quad	.LBB1096
+ 15330      00000000 
+ 15331 3726 00000000 		.quad	.LBE1096
+ 15331      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 426
+
+
+ 15332 372e 03       		.byte	0x3
+ 15333 372f 7501     		.value	0x175
+ 15334 3731 31       		.uleb128 0x31
+ 15335 3732 440E0000 		.long	0xe44
+ 15336 3736 03       		.byte	0x3
+ 15337 3737 91       		.byte	0x91
+ 15338 3738 A05C     		.sleb128 -4576
+ 15339 373a 31       		.uleb128 0x31
+ 15340 373b 380E0000 		.long	0xe38
+ 15341 373f 03       		.byte	0x3
+ 15342 3740 91       		.byte	0x91
+ 15343 3741 B05C     		.sleb128 -4560
+ 15344 3743 00       		.byte	0x0
+ 15345 3744 00       		.byte	0x0
+ 15346 3745 00       		.byte	0x0
+ 15347 3746 00       		.byte	0x0
+ 15348 3747 30       		.uleb128 0x30
+ 15349 3748 BA0D0000 		.long	0xdba
+ 15350 374c 00000000 		.quad	.LBB1098
+ 15350      00000000 
+ 15351 3754 00000000 		.quad	.LBE1098
+ 15351      00000000 
+ 15352 375c 03       		.byte	0x3
+ 15353 375d 2006     		.value	0x620
+ 15354 375f E4370000 		.long	0x37e4
+ 15355 3763 31       		.uleb128 0x31
+ 15356 3764 CC0D0000 		.long	0xdcc
+ 15357 3768 03       		.byte	0x3
+ 15358 3769 91       		.byte	0x91
+ 15359 376a C05C     		.sleb128 -4544
+ 15360 376c 32       		.uleb128 0x32
+ 15361 376d 00000000 		.quad	.LBB1099
+ 15361      00000000 
+ 15362 3775 00000000 		.quad	.LBE1099
+ 15362      00000000 
+ 15363 377d 33       		.uleb128 0x33
+ 15364 377e D80D0000 		.long	0xdd8
+ 15365 3782 09       		.byte	0x9
+ 15366 3783 03       		.byte	0x3
+ 15367 3784 00000000 		.quad	mask.8002
+ 15367      00000000 
+ 15368 378c 34       		.uleb128 0x34
+ 15369 378d FB0D0000 		.long	0xdfb
+ 15370 3791 00000000 		.quad	.LBB1100
+ 15370      00000000 
+ 15371 3799 00000000 		.quad	.LBE1100
+ 15371      00000000 
+ 15372 37a1 03       		.byte	0x3
+ 15373 37a2 FE04     		.value	0x4fe
+ 15374 37a4 31       		.uleb128 0x31
+ 15375 37a5 190E0000 		.long	0xe19
+ 15376 37a9 03       		.byte	0x3
+ 15377 37aa 91       		.byte	0x91
+ 15378 37ab D05C     		.sleb128 -4528
+ 15379 37ad 31       		.uleb128 0x31
+ 15380 37ae 0D0E0000 		.long	0xe0d
+ 15381 37b2 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 427
+
+
+ 15382 37b3 91       		.byte	0x91
+ 15383 37b4 E05C     		.sleb128 -4512
+ 15384 37b6 34       		.uleb128 0x34
+ 15385 37b7 260E0000 		.long	0xe26
+ 15386 37bb 00000000 		.quad	.LBB1102
+ 15386      00000000 
+ 15387 37c3 00000000 		.quad	.LBE1102
+ 15387      00000000 
+ 15388 37cb 03       		.byte	0x3
+ 15389 37cc 7501     		.value	0x175
+ 15390 37ce 31       		.uleb128 0x31
+ 15391 37cf 440E0000 		.long	0xe44
+ 15392 37d3 03       		.byte	0x3
+ 15393 37d4 91       		.byte	0x91
+ 15394 37d5 F05C     		.sleb128 -4496
+ 15395 37d7 31       		.uleb128 0x31
+ 15396 37d8 380E0000 		.long	0xe38
+ 15397 37dc 03       		.byte	0x3
+ 15398 37dd 91       		.byte	0x91
+ 15399 37de 805D     		.sleb128 -4480
+ 15400 37e0 00       		.byte	0x0
+ 15401 37e1 00       		.byte	0x0
+ 15402 37e2 00       		.byte	0x0
+ 15403 37e3 00       		.byte	0x0
+ 15404 37e4 34       		.uleb128 0x34
+ 15405 37e5 BA0D0000 		.long	0xdba
+ 15406 37e9 00000000 		.quad	.LBB1104
+ 15406      00000000 
+ 15407 37f1 00000000 		.quad	.LBE1104
+ 15407      00000000 
+ 15408 37f9 03       		.byte	0x3
+ 15409 37fa 2106     		.value	0x621
+ 15410 37fc 31       		.uleb128 0x31
+ 15411 37fd CC0D0000 		.long	0xdcc
+ 15412 3801 03       		.byte	0x3
+ 15413 3802 91       		.byte	0x91
+ 15414 3803 905D     		.sleb128 -4464
+ 15415 3805 32       		.uleb128 0x32
+ 15416 3806 00000000 		.quad	.LBB1105
+ 15416      00000000 
+ 15417 380e 00000000 		.quad	.LBE1105
+ 15417      00000000 
+ 15418 3816 33       		.uleb128 0x33
+ 15419 3817 D80D0000 		.long	0xdd8
+ 15420 381b 09       		.byte	0x9
+ 15421 381c 03       		.byte	0x3
+ 15422 381d 00000000 		.quad	mask.8002
+ 15422      00000000 
+ 15423 3825 34       		.uleb128 0x34
+ 15424 3826 FB0D0000 		.long	0xdfb
+ 15425 382a 00000000 		.quad	.LBB1106
+ 15425      00000000 
+ 15426 3832 00000000 		.quad	.LBE1106
+ 15426      00000000 
+ 15427 383a 03       		.byte	0x3
+ 15428 383b FE04     		.value	0x4fe
+ 15429 383d 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s 			page 428
+
+
+ 15430 383e 190E0000 		.long	0xe19
+ 15431 3842 03       		.byte	0x3
+ 15432 3843 91       		.byte	0x91
+ 15433 3844 A05D     		.sleb128 -4448
+ 15434 3846 31       		.uleb128 0x31
+ 15435 3847 0D0E0000 		.long	0xe0d
+ 15436 384b 03       		.byte	0x3
+ 15437 384c 91       		.byte	0x91
+ 15438 384d B05D     		.sleb128 -4432
+ 15439 384f 34       		.uleb128 0x34
+ 15440 3850 260E0000 		.long	0xe26
+ 15441 3854 00000000 		.quad	.LBB1108
+ 15441      00000000 
+ 15442 385c 00000000 		.quad	.LBE1108
+ 15442      00000000 
+ 15443 3864 03       		.byte	0x3
+ 15444 3865 7501     		.value	0x175
+ 15445 3867 31       		.uleb128 0x31
+ 15446 3868 440E0000 		.long	0xe44
+ 15447 386c 03       		.byte	0x3
+ 15448 386d 91       		.byte	0x91
+ 15449 386e C05D     		.sleb128 -4416
+ 15450 3870 31       		.uleb128 0x31
+ 15451 3871 380E0000 		.long	0xe38
+ 15452 3875 03       		.byte	0x3
+ 15453 3876 91       		.byte	0x91
+ 15454 3877 D05D     		.sleb128 -4400
+ 15455 3879 00       		.byte	0x0
+ 15456 387a 00       		.byte	0x0
+ 15457 387b 00       		.byte	0x0
+ 15458 387c 00       		.byte	0x0
+ 15459 387d 00       		.byte	0x0
+ 15460 387e 00       		.byte	0x0
+ 15461 387f 30       		.uleb128 0x30
+ 15462 3880 E30C0000 		.long	0xce3
+ 15463 3884 00000000 		.quad	.LBB1110
+ 15463      00000000 
+ 15464 388c 00000000 		.quad	.LBE1110
+ 15464      00000000 
+ 15465 3894 03       		.byte	0x3
+ 15466 3895 0C07     		.value	0x70c
+ 15467 3897 45390000 		.long	0x3945
+ 15468 389b 31       		.uleb128 0x31
+ 15469 389c 010D0000 		.long	0xd01
+ 15470 38a0 03       		.byte	0x3
+ 15471 38a1 91       		.byte	0x91
+ 15472 38a2 EC5D     		.sleb128 -4372
+ 15473 38a4 31       		.uleb128 0x31
+ 15474 38a5 F50C0000 		.long	0xcf5
+ 15475 38a9 03       		.byte	0x3
+ 15476 38aa 91       		.byte	0x91
+ 15477 38ab F05D     		.sleb128 -4368
+ 15478 38ad 32       		.uleb128 0x32
+ 15479 38ae 00000000 		.quad	.LBB1111
+ 15479      00000000 
+ 15480 38b6 00000000 		.quad	.LBE1111
+ 15480      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 429
+
+
+ 15481 38be 33       		.uleb128 0x33
+ 15482 38bf 0D0D0000 		.long	0xd0d
+ 15483 38c3 03       		.byte	0x3
+ 15484 38c4 76       		.byte	0x76
+ 15485 38c5 A050     		.sleb128 -6112
+ 15486 38c7 30       		.uleb128 0x30
+ 15487 38c8 1A0D0000 		.long	0xd1a
+ 15488 38cc 00000000 		.quad	.LBB1112
+ 15488      00000000 
+ 15489 38d4 00000000 		.quad	.LBE1112
+ 15489      00000000 
+ 15490 38dc 03       		.byte	0x3
+ 15491 38dd 8A06     		.value	0x68a
+ 15492 38df F6380000 		.long	0x38f6
+ 15493 38e3 31       		.uleb128 0x31
+ 15494 38e4 380D0000 		.long	0xd38
+ 15495 38e8 03       		.byte	0x3
+ 15496 38e9 91       		.byte	0x91
+ 15497 38ea 8C5E     		.sleb128 -4340
+ 15498 38ec 31       		.uleb128 0x31
+ 15499 38ed 2C0D0000 		.long	0xd2c
+ 15500 38f1 03       		.byte	0x3
+ 15501 38f2 91       		.byte	0x91
+ 15502 38f3 905E     		.sleb128 -4336
+ 15503 38f5 00       		.byte	0x0
+ 15504 38f6 34       		.uleb128 0x34
+ 15505 38f7 450D0000 		.long	0xd45
+ 15506 38fb 00000000 		.quad	.LBB1114
+ 15506      00000000 
+ 15507 3903 00000000 		.quad	.LBE1114
+ 15507      00000000 
+ 15508 390b 03       		.byte	0x3
+ 15509 390c 8B06     		.value	0x68b
+ 15510 390e 31       		.uleb128 0x31
+ 15511 390f 570D0000 		.long	0xd57
+ 15512 3913 03       		.byte	0x3
+ 15513 3914 91       		.byte	0x91
+ 15514 3915 A05E     		.sleb128 -4320
+ 15515 3917 34       		.uleb128 0x34
+ 15516 3918 640D0000 		.long	0xd64
+ 15517 391c 00000000 		.quad	.LBB1116
+ 15517      00000000 
+ 15518 3924 00000000 		.quad	.LBE1116
+ 15518      00000000 
+ 15519 392c 03       		.byte	0x3
+ 15520 392d 4905     		.value	0x549
+ 15521 392f 31       		.uleb128 0x31
+ 15522 3930 820D0000 		.long	0xd82
+ 15523 3934 03       		.byte	0x3
+ 15524 3935 91       		.byte	0x91
+ 15525 3936 BC5E     		.sleb128 -4292
+ 15526 3938 31       		.uleb128 0x31
+ 15527 3939 760D0000 		.long	0xd76
+ 15528 393d 03       		.byte	0x3
+ 15529 393e 91       		.byte	0x91
+ 15530 393f C05E     		.sleb128 -4288
+ 15531 3941 00       		.byte	0x0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 430
+
+
+ 15532 3942 00       		.byte	0x0
+ 15533 3943 00       		.byte	0x0
+ 15534 3944 00       		.byte	0x0
+ 15535 3945 30       		.uleb128 0x30
+ 15536 3946 450D0000 		.long	0xd45
+ 15537 394a 00000000 		.quad	.LBB1118
+ 15537      00000000 
+ 15538 3952 00000000 		.quad	.LBE1118
+ 15538      00000000 
+ 15539 395a 03       		.byte	0x3
+ 15540 395b 1007     		.value	0x710
+ 15541 395d 96390000 		.long	0x3996
+ 15542 3961 31       		.uleb128 0x31
+ 15543 3962 570D0000 		.long	0xd57
+ 15544 3966 03       		.byte	0x3
+ 15545 3967 91       		.byte	0x91
+ 15546 3968 D05E     		.sleb128 -4272
+ 15547 396a 34       		.uleb128 0x34
+ 15548 396b 640D0000 		.long	0xd64
+ 15549 396f 00000000 		.quad	.LBB1120
+ 15549      00000000 
+ 15550 3977 00000000 		.quad	.LBE1120
+ 15550      00000000 
+ 15551 397f 03       		.byte	0x3
+ 15552 3980 4905     		.value	0x549
+ 15553 3982 31       		.uleb128 0x31
+ 15554 3983 820D0000 		.long	0xd82
+ 15555 3987 03       		.byte	0x3
+ 15556 3988 91       		.byte	0x91
+ 15557 3989 EC5E     		.sleb128 -4244
+ 15558 398b 31       		.uleb128 0x31
+ 15559 398c 760D0000 		.long	0xd76
+ 15560 3990 03       		.byte	0x3
+ 15561 3991 91       		.byte	0x91
+ 15562 3992 F05E     		.sleb128 -4240
+ 15563 3994 00       		.byte	0x0
+ 15564 3995 00       		.byte	0x0
+ 15565 3996 30       		.uleb128 0x30
+ 15566 3997 BE2B0000 		.long	0x2bbe
+ 15567 399b 00000000 		.quad	.LBB1122
+ 15567      00000000 
+ 15568 39a3 00000000 		.quad	.LBE1122
+ 15568      00000000 
+ 15569 39ab 03       		.byte	0x3
+ 15570 39ac 1707     		.value	0x717
+ 15571 39ae 5C3A0000 		.long	0x3a5c
+ 15572 39b2 31       		.uleb128 0x31
+ 15573 39b3 DC2B0000 		.long	0x2bdc
+ 15574 39b7 03       		.byte	0x3
+ 15575 39b8 91       		.byte	0x91
+ 15576 39b9 8C5F     		.sleb128 -4212
+ 15577 39bb 31       		.uleb128 0x31
+ 15578 39bc D02B0000 		.long	0x2bd0
+ 15579 39c0 03       		.byte	0x3
+ 15580 39c1 91       		.byte	0x91
+ 15581 39c2 905F     		.sleb128 -4208
+ 15582 39c4 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccPaCTqg.s 			page 431
+
+
+ 15583 39c5 00000000 		.quad	.LBB1123
+ 15583      00000000 
+ 15584 39cd 00000000 		.quad	.LBE1123
+ 15584      00000000 
+ 15585 39d5 33       		.uleb128 0x33
+ 15586 39d6 E82B0000 		.long	0x2be8
+ 15587 39da 03       		.byte	0x3
+ 15588 39db 76       		.byte	0x76
+ 15589 39dc B050     		.sleb128 -6096
+ 15590 39de 30       		.uleb128 0x30
+ 15591 39df 1A0D0000 		.long	0xd1a
+ 15592 39e3 00000000 		.quad	.LBB1124
+ 15592      00000000 
+ 15593 39eb 00000000 		.quad	.LBE1124
+ 15593      00000000 
+ 15594 39f3 03       		.byte	0x3
+ 15595 39f4 5606     		.value	0x656
+ 15596 39f6 0D3A0000 		.long	0x3a0d
+ 15597 39fa 31       		.uleb128 0x31
+ 15598 39fb 380D0000 		.long	0xd38
+ 15599 39ff 03       		.byte	0x3
+ 15600 3a00 91       		.byte	0x91
+ 15601 3a01 AC5F     		.sleb128 -4180
+ 15602 3a03 31       		.uleb128 0x31
+ 15603 3a04 2C0D0000 		.long	0xd2c
+ 15604 3a08 03       		.byte	0x3
+ 15605 3a09 91       		.byte	0x91
+ 15606 3a0a B05F     		.sleb128 -4176
+ 15607 3a0c 00       		.byte	0x0
+ 15608 3a0d 34       		.uleb128 0x34
+ 15609 3a0e F52B0000 		.long	0x2bf5
+ 15610 3a12 00000000 		.quad	.LBB1126
+ 15610      00000000 
+ 15611 3a1a 00000000 		.quad	.LBE1126
+ 15611      00000000 
+ 15612 3a22 03       		.byte	0x3
+ 15613 3a23 5706     		.value	0x657
+ 15614 3a25 31       		.uleb128 0x31
+ 15615 3a26 072C0000 		.long	0x2c07
+ 15616 3a2a 03       		.byte	0x3
+ 15617 3a2b 91       		.byte	0x91
+ 15618 3a2c C05F     		.sleb128 -4160
+ 15619 3a2e 34       		.uleb128 0x34
+ 15620 3a2f 640D0000 		.long	0xd64
+ 15621 3a33 00000000 		.quad	.LBB1128
+ 15621      00000000 
+ 15622 3a3b 00000000 		.quad	.LBE1128
+ 15622      00000000 
+ 15623 3a43 03       		.byte	0x3
+ 15624 3a44 8105     		.value	0x581
+ 15625 3a46 31       		.uleb128 0x31
+ 15626 3a47 820D0000 		.long	0xd82
+ 15627 3a4b 03       		.byte	0x3
+ 15628 3a4c 91       		.byte	0x91
+ 15629 3a4d DC5F     		.sleb128 -4132
+ 15630 3a4f 31       		.uleb128 0x31
+ 15631 3a50 760D0000 		.long	0xd76
+
GAS LISTING /tmp/ccPaCTqg.s 			page 432
+
+
+ 15632 3a54 03       		.byte	0x3
+ 15633 3a55 91       		.byte	0x91
+ 15634 3a56 E05F     		.sleb128 -4128
+ 15635 3a58 00       		.byte	0x0
+ 15636 3a59 00       		.byte	0x0
+ 15637 3a5a 00       		.byte	0x0
+ 15638 3a5b 00       		.byte	0x0
+ 15639 3a5c 30       		.uleb128 0x30
+ 15640 3a5d 8F0D0000 		.long	0xd8f
+ 15641 3a61 00000000 		.quad	.LBB1130
+ 15641      00000000 
+ 15642 3a69 00000000 		.quad	.LBE1130
+ 15642      00000000 
+ 15643 3a71 03       		.byte	0x3
+ 15644 3a72 1907     		.value	0x719
+ 15645 3a74 703C0000 		.long	0x3c70
+ 15646 3a78 31       		.uleb128 0x31
+ 15647 3a79 A10D0000 		.long	0xda1
+ 15648 3a7d 03       		.byte	0x3
+ 15649 3a7e 91       		.byte	0x91
+ 15650 3a7f F05F     		.sleb128 -4112
+ 15651 3a81 32       		.uleb128 0x32
+ 15652 3a82 00000000 		.quad	.LBB1131
+ 15652      00000000 
+ 15653 3a8a 00000000 		.quad	.LBE1131
+ 15653      00000000 
+ 15654 3a92 33       		.uleb128 0x33
+ 15655 3a93 AD0D0000 		.long	0xdad
+ 15656 3a97 03       		.byte	0x3
+ 15657 3a98 76       		.byte	0x76
+ 15658 3a99 C050     		.sleb128 -6080
+ 15659 3a9b 30       		.uleb128 0x30
+ 15660 3a9c BA0D0000 		.long	0xdba
+ 15661 3aa0 00000000 		.quad	.LBB1132
+ 15661      00000000 
+ 15662 3aa8 00000000 		.quad	.LBE1132
+ 15662      00000000 
+ 15663 3ab0 03       		.byte	0x3
+ 15664 3ab1 1F06     		.value	0x61f
+ 15665 3ab3 383B0000 		.long	0x3b38
+ 15666 3ab7 31       		.uleb128 0x31
+ 15667 3ab8 CC0D0000 		.long	0xdcc
+ 15668 3abc 03       		.byte	0x3
+ 15669 3abd 91       		.byte	0x91
+ 15670 3abe 8060     		.sleb128 -4096
+ 15671 3ac0 32       		.uleb128 0x32
+ 15672 3ac1 00000000 		.quad	.LBB1133
+ 15672      00000000 
+ 15673 3ac9 00000000 		.quad	.LBE1133
+ 15673      00000000 
+ 15674 3ad1 33       		.uleb128 0x33
+ 15675 3ad2 D80D0000 		.long	0xdd8
+ 15676 3ad6 09       		.byte	0x9
+ 15677 3ad7 03       		.byte	0x3
+ 15678 3ad8 00000000 		.quad	mask.8002
+ 15678      00000000 
+ 15679 3ae0 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccPaCTqg.s 			page 433
+
+
+ 15680 3ae1 FB0D0000 		.long	0xdfb
+ 15681 3ae5 00000000 		.quad	.LBB1134
+ 15681      00000000 
+ 15682 3aed 00000000 		.quad	.LBE1134
+ 15682      00000000 
+ 15683 3af5 03       		.byte	0x3
+ 15684 3af6 FE04     		.value	0x4fe
+ 15685 3af8 31       		.uleb128 0x31
+ 15686 3af9 190E0000 		.long	0xe19
+ 15687 3afd 03       		.byte	0x3
+ 15688 3afe 91       		.byte	0x91
+ 15689 3aff 9060     		.sleb128 -4080
+ 15690 3b01 31       		.uleb128 0x31
+ 15691 3b02 0D0E0000 		.long	0xe0d
+ 15692 3b06 03       		.byte	0x3
+ 15693 3b07 91       		.byte	0x91
+ 15694 3b08 A060     		.sleb128 -4064
+ 15695 3b0a 34       		.uleb128 0x34
+ 15696 3b0b 260E0000 		.long	0xe26
+ 15697 3b0f 00000000 		.quad	.LBB1136
+ 15697      00000000 
+ 15698 3b17 00000000 		.quad	.LBE1136
+ 15698      00000000 
+ 15699 3b1f 03       		.byte	0x3
+ 15700 3b20 7501     		.value	0x175
+ 15701 3b22 31       		.uleb128 0x31
+ 15702 3b23 440E0000 		.long	0xe44
+ 15703 3b27 03       		.byte	0x3
+ 15704 3b28 91       		.byte	0x91
+ 15705 3b29 B060     		.sleb128 -4048
+ 15706 3b2b 31       		.uleb128 0x31
+ 15707 3b2c 380E0000 		.long	0xe38
+ 15708 3b30 03       		.byte	0x3
+ 15709 3b31 91       		.byte	0x91
+ 15710 3b32 C060     		.sleb128 -4032
+ 15711 3b34 00       		.byte	0x0
+ 15712 3b35 00       		.byte	0x0
+ 15713 3b36 00       		.byte	0x0
+ 15714 3b37 00       		.byte	0x0
+ 15715 3b38 30       		.uleb128 0x30
+ 15716 3b39 BA0D0000 		.long	0xdba
+ 15717 3b3d 00000000 		.quad	.LBB1138
+ 15717      00000000 
+ 15718 3b45 00000000 		.quad	.LBE1138
+ 15718      00000000 
+ 15719 3b4d 03       		.byte	0x3
+ 15720 3b4e 2006     		.value	0x620
+ 15721 3b50 D53B0000 		.long	0x3bd5
+ 15722 3b54 31       		.uleb128 0x31
+ 15723 3b55 CC0D0000 		.long	0xdcc
+ 15724 3b59 03       		.byte	0x3
+ 15725 3b5a 91       		.byte	0x91
+ 15726 3b5b D060     		.sleb128 -4016
+ 15727 3b5d 32       		.uleb128 0x32
+ 15728 3b5e 00000000 		.quad	.LBB1139
+ 15728      00000000 
+ 15729 3b66 00000000 		.quad	.LBE1139
+
GAS LISTING /tmp/ccPaCTqg.s 			page 434
+
+
+ 15729      00000000 
+ 15730 3b6e 33       		.uleb128 0x33
+ 15731 3b6f D80D0000 		.long	0xdd8
+ 15732 3b73 09       		.byte	0x9
+ 15733 3b74 03       		.byte	0x3
+ 15734 3b75 00000000 		.quad	mask.8002
+ 15734      00000000 
+ 15735 3b7d 34       		.uleb128 0x34
+ 15736 3b7e FB0D0000 		.long	0xdfb
+ 15737 3b82 00000000 		.quad	.LBB1140
+ 15737      00000000 
+ 15738 3b8a 00000000 		.quad	.LBE1140
+ 15738      00000000 
+ 15739 3b92 03       		.byte	0x3
+ 15740 3b93 FE04     		.value	0x4fe
+ 15741 3b95 31       		.uleb128 0x31
+ 15742 3b96 190E0000 		.long	0xe19
+ 15743 3b9a 03       		.byte	0x3
+ 15744 3b9b 91       		.byte	0x91
+ 15745 3b9c E060     		.sleb128 -4000
+ 15746 3b9e 31       		.uleb128 0x31
+ 15747 3b9f 0D0E0000 		.long	0xe0d
+ 15748 3ba3 03       		.byte	0x3
+ 15749 3ba4 91       		.byte	0x91
+ 15750 3ba5 F060     		.sleb128 -3984
+ 15751 3ba7 34       		.uleb128 0x34
+ 15752 3ba8 260E0000 		.long	0xe26
+ 15753 3bac 00000000 		.quad	.LBB1142
+ 15753      00000000 
+ 15754 3bb4 00000000 		.quad	.LBE1142
+ 15754      00000000 
+ 15755 3bbc 03       		.byte	0x3
+ 15756 3bbd 7501     		.value	0x175
+ 15757 3bbf 31       		.uleb128 0x31
+ 15758 3bc0 440E0000 		.long	0xe44
+ 15759 3bc4 03       		.byte	0x3
+ 15760 3bc5 91       		.byte	0x91
+ 15761 3bc6 8061     		.sleb128 -3968
+ 15762 3bc8 31       		.uleb128 0x31
+ 15763 3bc9 380E0000 		.long	0xe38
+ 15764 3bcd 03       		.byte	0x3
+ 15765 3bce 91       		.byte	0x91
+ 15766 3bcf 9061     		.sleb128 -3952
+ 15767 3bd1 00       		.byte	0x0
+ 15768 3bd2 00       		.byte	0x0
+ 15769 3bd3 00       		.byte	0x0
+ 15770 3bd4 00       		.byte	0x0
+ 15771 3bd5 34       		.uleb128 0x34
+ 15772 3bd6 BA0D0000 		.long	0xdba
+ 15773 3bda 00000000 		.quad	.LBB1144
+ 15773      00000000 
+ 15774 3be2 00000000 		.quad	.LBE1144
+ 15774      00000000 
+ 15775 3bea 03       		.byte	0x3
+ 15776 3beb 2106     		.value	0x621
+ 15777 3bed 31       		.uleb128 0x31
+ 15778 3bee CC0D0000 		.long	0xdcc
+
GAS LISTING /tmp/ccPaCTqg.s 			page 435
+
+
+ 15779 3bf2 03       		.byte	0x3
+ 15780 3bf3 91       		.byte	0x91
+ 15781 3bf4 A061     		.sleb128 -3936
+ 15782 3bf6 32       		.uleb128 0x32
+ 15783 3bf7 00000000 		.quad	.LBB1145
+ 15783      00000000 
+ 15784 3bff 00000000 		.quad	.LBE1145
+ 15784      00000000 
+ 15785 3c07 33       		.uleb128 0x33
+ 15786 3c08 D80D0000 		.long	0xdd8
+ 15787 3c0c 09       		.byte	0x9
+ 15788 3c0d 03       		.byte	0x3
+ 15789 3c0e 00000000 		.quad	mask.8002
+ 15789      00000000 
+ 15790 3c16 34       		.uleb128 0x34
+ 15791 3c17 FB0D0000 		.long	0xdfb
+ 15792 3c1b 00000000 		.quad	.LBB1146
+ 15792      00000000 
+ 15793 3c23 00000000 		.quad	.LBE1146
+ 15793      00000000 
+ 15794 3c2b 03       		.byte	0x3
+ 15795 3c2c FE04     		.value	0x4fe
+ 15796 3c2e 31       		.uleb128 0x31
+ 15797 3c2f 190E0000 		.long	0xe19
+ 15798 3c33 03       		.byte	0x3
+ 15799 3c34 91       		.byte	0x91
+ 15800 3c35 B061     		.sleb128 -3920
+ 15801 3c37 31       		.uleb128 0x31
+ 15802 3c38 0D0E0000 		.long	0xe0d
+ 15803 3c3c 03       		.byte	0x3
+ 15804 3c3d 91       		.byte	0x91
+ 15805 3c3e C061     		.sleb128 -3904
+ 15806 3c40 34       		.uleb128 0x34
+ 15807 3c41 260E0000 		.long	0xe26
+ 15808 3c45 00000000 		.quad	.LBB1148
+ 15808      00000000 
+ 15809 3c4d 00000000 		.quad	.LBE1148
+ 15809      00000000 
+ 15810 3c55 03       		.byte	0x3
+ 15811 3c56 7501     		.value	0x175
+ 15812 3c58 31       		.uleb128 0x31
+ 15813 3c59 440E0000 		.long	0xe44
+ 15814 3c5d 03       		.byte	0x3
+ 15815 3c5e 91       		.byte	0x91
+ 15816 3c5f D061     		.sleb128 -3888
+ 15817 3c61 31       		.uleb128 0x31
+ 15818 3c62 380E0000 		.long	0xe38
+ 15819 3c66 03       		.byte	0x3
+ 15820 3c67 91       		.byte	0x91
+ 15821 3c68 E061     		.sleb128 -3872
+ 15822 3c6a 00       		.byte	0x0
+ 15823 3c6b 00       		.byte	0x0
+ 15824 3c6c 00       		.byte	0x0
+ 15825 3c6d 00       		.byte	0x0
+ 15826 3c6e 00       		.byte	0x0
+ 15827 3c6f 00       		.byte	0x0
+ 15828 3c70 30       		.uleb128 0x30
+
GAS LISTING /tmp/ccPaCTqg.s 			page 436
+
+
+ 15829 3c71 8F0D0000 		.long	0xd8f
+ 15830 3c75 00000000 		.quad	.LBB1150
+ 15830      00000000 
+ 15831 3c7d 00000000 		.quad	.LBE1150
+ 15831      00000000 
+ 15832 3c85 03       		.byte	0x3
+ 15833 3c86 1B07     		.value	0x71b
+ 15834 3c88 843E0000 		.long	0x3e84
+ 15835 3c8c 31       		.uleb128 0x31
+ 15836 3c8d A10D0000 		.long	0xda1
+ 15837 3c91 03       		.byte	0x3
+ 15838 3c92 91       		.byte	0x91
+ 15839 3c93 F061     		.sleb128 -3856
+ 15840 3c95 32       		.uleb128 0x32
+ 15841 3c96 00000000 		.quad	.LBB1151
+ 15841      00000000 
+ 15842 3c9e 00000000 		.quad	.LBE1151
+ 15842      00000000 
+ 15843 3ca6 33       		.uleb128 0x33
+ 15844 3ca7 AD0D0000 		.long	0xdad
+ 15845 3cab 03       		.byte	0x3
+ 15846 3cac 76       		.byte	0x76
+ 15847 3cad D050     		.sleb128 -6064
+ 15848 3caf 30       		.uleb128 0x30
+ 15849 3cb0 BA0D0000 		.long	0xdba
+ 15850 3cb4 00000000 		.quad	.LBB1152
+ 15850      00000000 
+ 15851 3cbc 00000000 		.quad	.LBE1152
+ 15851      00000000 
+ 15852 3cc4 03       		.byte	0x3
+ 15853 3cc5 1F06     		.value	0x61f
+ 15854 3cc7 4C3D0000 		.long	0x3d4c
+ 15855 3ccb 31       		.uleb128 0x31
+ 15856 3ccc CC0D0000 		.long	0xdcc
+ 15857 3cd0 03       		.byte	0x3
+ 15858 3cd1 91       		.byte	0x91
+ 15859 3cd2 8062     		.sleb128 -3840
+ 15860 3cd4 32       		.uleb128 0x32
+ 15861 3cd5 00000000 		.quad	.LBB1153
+ 15861      00000000 
+ 15862 3cdd 00000000 		.quad	.LBE1153
+ 15862      00000000 
+ 15863 3ce5 33       		.uleb128 0x33
+ 15864 3ce6 D80D0000 		.long	0xdd8
+ 15865 3cea 09       		.byte	0x9
+ 15866 3ceb 03       		.byte	0x3
+ 15867 3cec 00000000 		.quad	mask.8002
+ 15867      00000000 
+ 15868 3cf4 34       		.uleb128 0x34
+ 15869 3cf5 FB0D0000 		.long	0xdfb
+ 15870 3cf9 00000000 		.quad	.LBB1154
+ 15870      00000000 
+ 15871 3d01 00000000 		.quad	.LBE1154
+ 15871      00000000 
+ 15872 3d09 03       		.byte	0x3
+ 15873 3d0a FE04     		.value	0x4fe
+ 15874 3d0c 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s 			page 437
+
+
+ 15875 3d0d 190E0000 		.long	0xe19
+ 15876 3d11 03       		.byte	0x3
+ 15877 3d12 91       		.byte	0x91
+ 15878 3d13 9062     		.sleb128 -3824
+ 15879 3d15 31       		.uleb128 0x31
+ 15880 3d16 0D0E0000 		.long	0xe0d
+ 15881 3d1a 03       		.byte	0x3
+ 15882 3d1b 91       		.byte	0x91
+ 15883 3d1c A062     		.sleb128 -3808
+ 15884 3d1e 34       		.uleb128 0x34
+ 15885 3d1f 260E0000 		.long	0xe26
+ 15886 3d23 00000000 		.quad	.LBB1156
+ 15886      00000000 
+ 15887 3d2b 00000000 		.quad	.LBE1156
+ 15887      00000000 
+ 15888 3d33 03       		.byte	0x3
+ 15889 3d34 7501     		.value	0x175
+ 15890 3d36 31       		.uleb128 0x31
+ 15891 3d37 440E0000 		.long	0xe44
+ 15892 3d3b 03       		.byte	0x3
+ 15893 3d3c 91       		.byte	0x91
+ 15894 3d3d B062     		.sleb128 -3792
+ 15895 3d3f 31       		.uleb128 0x31
+ 15896 3d40 380E0000 		.long	0xe38
+ 15897 3d44 03       		.byte	0x3
+ 15898 3d45 91       		.byte	0x91
+ 15899 3d46 C062     		.sleb128 -3776
+ 15900 3d48 00       		.byte	0x0
+ 15901 3d49 00       		.byte	0x0
+ 15902 3d4a 00       		.byte	0x0
+ 15903 3d4b 00       		.byte	0x0
+ 15904 3d4c 30       		.uleb128 0x30
+ 15905 3d4d BA0D0000 		.long	0xdba
+ 15906 3d51 00000000 		.quad	.LBB1158
+ 15906      00000000 
+ 15907 3d59 00000000 		.quad	.LBE1158
+ 15907      00000000 
+ 15908 3d61 03       		.byte	0x3
+ 15909 3d62 2006     		.value	0x620
+ 15910 3d64 E93D0000 		.long	0x3de9
+ 15911 3d68 31       		.uleb128 0x31
+ 15912 3d69 CC0D0000 		.long	0xdcc
+ 15913 3d6d 03       		.byte	0x3
+ 15914 3d6e 91       		.byte	0x91
+ 15915 3d6f D062     		.sleb128 -3760
+ 15916 3d71 32       		.uleb128 0x32
+ 15917 3d72 00000000 		.quad	.LBB1159
+ 15917      00000000 
+ 15918 3d7a 00000000 		.quad	.LBE1159
+ 15918      00000000 
+ 15919 3d82 33       		.uleb128 0x33
+ 15920 3d83 D80D0000 		.long	0xdd8
+ 15921 3d87 09       		.byte	0x9
+ 15922 3d88 03       		.byte	0x3
+ 15923 3d89 00000000 		.quad	mask.8002
+ 15923      00000000 
+ 15924 3d91 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccPaCTqg.s 			page 438
+
+
+ 15925 3d92 FB0D0000 		.long	0xdfb
+ 15926 3d96 00000000 		.quad	.LBB1160
+ 15926      00000000 
+ 15927 3d9e 00000000 		.quad	.LBE1160
+ 15927      00000000 
+ 15928 3da6 03       		.byte	0x3
+ 15929 3da7 FE04     		.value	0x4fe
+ 15930 3da9 31       		.uleb128 0x31
+ 15931 3daa 190E0000 		.long	0xe19
+ 15932 3dae 03       		.byte	0x3
+ 15933 3daf 91       		.byte	0x91
+ 15934 3db0 E062     		.sleb128 -3744
+ 15935 3db2 31       		.uleb128 0x31
+ 15936 3db3 0D0E0000 		.long	0xe0d
+ 15937 3db7 03       		.byte	0x3
+ 15938 3db8 91       		.byte	0x91
+ 15939 3db9 F062     		.sleb128 -3728
+ 15940 3dbb 34       		.uleb128 0x34
+ 15941 3dbc 260E0000 		.long	0xe26
+ 15942 3dc0 00000000 		.quad	.LBB1162
+ 15942      00000000 
+ 15943 3dc8 00000000 		.quad	.LBE1162
+ 15943      00000000 
+ 15944 3dd0 03       		.byte	0x3
+ 15945 3dd1 7501     		.value	0x175
+ 15946 3dd3 31       		.uleb128 0x31
+ 15947 3dd4 440E0000 		.long	0xe44
+ 15948 3dd8 03       		.byte	0x3
+ 15949 3dd9 91       		.byte	0x91
+ 15950 3dda 8063     		.sleb128 -3712
+ 15951 3ddc 31       		.uleb128 0x31
+ 15952 3ddd 380E0000 		.long	0xe38
+ 15953 3de1 03       		.byte	0x3
+ 15954 3de2 91       		.byte	0x91
+ 15955 3de3 9063     		.sleb128 -3696
+ 15956 3de5 00       		.byte	0x0
+ 15957 3de6 00       		.byte	0x0
+ 15958 3de7 00       		.byte	0x0
+ 15959 3de8 00       		.byte	0x0
+ 15960 3de9 34       		.uleb128 0x34
+ 15961 3dea BA0D0000 		.long	0xdba
+ 15962 3dee 00000000 		.quad	.LBB1164
+ 15962      00000000 
+ 15963 3df6 00000000 		.quad	.LBE1164
+ 15963      00000000 
+ 15964 3dfe 03       		.byte	0x3
+ 15965 3dff 2106     		.value	0x621
+ 15966 3e01 31       		.uleb128 0x31
+ 15967 3e02 CC0D0000 		.long	0xdcc
+ 15968 3e06 03       		.byte	0x3
+ 15969 3e07 91       		.byte	0x91
+ 15970 3e08 A063     		.sleb128 -3680
+ 15971 3e0a 32       		.uleb128 0x32
+ 15972 3e0b 00000000 		.quad	.LBB1165
+ 15972      00000000 
+ 15973 3e13 00000000 		.quad	.LBE1165
+ 15973      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 439
+
+
+ 15974 3e1b 33       		.uleb128 0x33
+ 15975 3e1c D80D0000 		.long	0xdd8
+ 15976 3e20 09       		.byte	0x9
+ 15977 3e21 03       		.byte	0x3
+ 15978 3e22 00000000 		.quad	mask.8002
+ 15978      00000000 
+ 15979 3e2a 34       		.uleb128 0x34
+ 15980 3e2b FB0D0000 		.long	0xdfb
+ 15981 3e2f 00000000 		.quad	.LBB1166
+ 15981      00000000 
+ 15982 3e37 00000000 		.quad	.LBE1166
+ 15982      00000000 
+ 15983 3e3f 03       		.byte	0x3
+ 15984 3e40 FE04     		.value	0x4fe
+ 15985 3e42 31       		.uleb128 0x31
+ 15986 3e43 190E0000 		.long	0xe19
+ 15987 3e47 03       		.byte	0x3
+ 15988 3e48 91       		.byte	0x91
+ 15989 3e49 B063     		.sleb128 -3664
+ 15990 3e4b 31       		.uleb128 0x31
+ 15991 3e4c 0D0E0000 		.long	0xe0d
+ 15992 3e50 03       		.byte	0x3
+ 15993 3e51 91       		.byte	0x91
+ 15994 3e52 C063     		.sleb128 -3648
+ 15995 3e54 34       		.uleb128 0x34
+ 15996 3e55 260E0000 		.long	0xe26
+ 15997 3e59 00000000 		.quad	.LBB1168
+ 15997      00000000 
+ 15998 3e61 00000000 		.quad	.LBE1168
+ 15998      00000000 
+ 15999 3e69 03       		.byte	0x3
+ 16000 3e6a 7501     		.value	0x175
+ 16001 3e6c 31       		.uleb128 0x31
+ 16002 3e6d 440E0000 		.long	0xe44
+ 16003 3e71 03       		.byte	0x3
+ 16004 3e72 91       		.byte	0x91
+ 16005 3e73 D063     		.sleb128 -3632
+ 16006 3e75 31       		.uleb128 0x31
+ 16007 3e76 380E0000 		.long	0xe38
+ 16008 3e7a 03       		.byte	0x3
+ 16009 3e7b 91       		.byte	0x91
+ 16010 3e7c E063     		.sleb128 -3616
+ 16011 3e7e 00       		.byte	0x0
+ 16012 3e7f 00       		.byte	0x0
+ 16013 3e80 00       		.byte	0x0
+ 16014 3e81 00       		.byte	0x0
+ 16015 3e82 00       		.byte	0x0
+ 16016 3e83 00       		.byte	0x0
+ 16017 3e84 30       		.uleb128 0x30
+ 16018 3e85 450D0000 		.long	0xd45
+ 16019 3e89 00000000 		.quad	.LBB1170
+ 16019      00000000 
+ 16020 3e91 00000000 		.quad	.LBE1170
+ 16020      00000000 
+ 16021 3e99 03       		.byte	0x3
+ 16022 3e9a 1C07     		.value	0x71c
+ 16023 3e9c D53E0000 		.long	0x3ed5
+
GAS LISTING /tmp/ccPaCTqg.s 			page 440
+
+
+ 16024 3ea0 31       		.uleb128 0x31
+ 16025 3ea1 570D0000 		.long	0xd57
+ 16026 3ea5 03       		.byte	0x3
+ 16027 3ea6 91       		.byte	0x91
+ 16028 3ea7 F063     		.sleb128 -3600
+ 16029 3ea9 34       		.uleb128 0x34
+ 16030 3eaa 640D0000 		.long	0xd64
+ 16031 3eae 00000000 		.quad	.LBB1172
+ 16031      00000000 
+ 16032 3eb6 00000000 		.quad	.LBE1172
+ 16032      00000000 
+ 16033 3ebe 03       		.byte	0x3
+ 16034 3ebf 4905     		.value	0x549
+ 16035 3ec1 31       		.uleb128 0x31
+ 16036 3ec2 820D0000 		.long	0xd82
+ 16037 3ec6 03       		.byte	0x3
+ 16038 3ec7 91       		.byte	0x91
+ 16039 3ec8 8C64     		.sleb128 -3572
+ 16040 3eca 31       		.uleb128 0x31
+ 16041 3ecb 760D0000 		.long	0xd76
+ 16042 3ecf 03       		.byte	0x3
+ 16043 3ed0 91       		.byte	0x91
+ 16044 3ed1 9064     		.sleb128 -3568
+ 16045 3ed3 00       		.byte	0x0
+ 16046 3ed4 00       		.byte	0x0
+ 16047 3ed5 30       		.uleb128 0x30
+ 16048 3ed6 142C0000 		.long	0x2c14
+ 16049 3eda 00000000 		.quad	.LBB1174
+ 16049      00000000 
+ 16050 3ee2 00000000 		.quad	.LBE1174
+ 16050      00000000 
+ 16051 3eea 03       		.byte	0x3
+ 16052 3eeb 1E07     		.value	0x71e
+ 16053 3eed 383F0000 		.long	0x3f38
+ 16054 3ef1 31       		.uleb128 0x31
+ 16055 3ef2 302C0000 		.long	0x2c30
+ 16056 3ef6 03       		.byte	0x3
+ 16057 3ef7 91       		.byte	0x91
+ 16058 3ef8 A064     		.sleb128 -3552
+ 16059 3efa 31       		.uleb128 0x31
+ 16060 3efb 262C0000 		.long	0x2c26
+ 16061 3eff 03       		.byte	0x3
+ 16062 3f00 91       		.byte	0x91
+ 16063 3f01 B064     		.sleb128 -3536
+ 16064 3f03 34       		.uleb128 0x34
+ 16065 3f04 3B2C0000 		.long	0x2c3b
+ 16066 3f08 00000000 		.quad	.LBB1176
+ 16066      00000000 
+ 16067 3f10 00000000 		.quad	.LBE1176
+ 16067      00000000 
+ 16068 3f18 03       		.byte	0x3
+ 16069 3f19 BA05     		.value	0x5ba
+ 16070 3f1b 31       		.uleb128 0x31
+ 16071 3f1c 652C0000 		.long	0x2c65
+ 16072 3f20 03       		.byte	0x3
+ 16073 3f21 91       		.byte	0x91
+ 16074 3f22 CC64     		.sleb128 -3508
+
GAS LISTING /tmp/ccPaCTqg.s 			page 441
+
+
+ 16075 3f24 31       		.uleb128 0x31
+ 16076 3f25 592C0000 		.long	0x2c59
+ 16077 3f29 03       		.byte	0x3
+ 16078 3f2a 91       		.byte	0x91
+ 16079 3f2b D064     		.sleb128 -3504
+ 16080 3f2d 31       		.uleb128 0x31
+ 16081 3f2e 4D2C0000 		.long	0x2c4d
+ 16082 3f32 03       		.byte	0x3
+ 16083 3f33 91       		.byte	0x91
+ 16084 3f34 E064     		.sleb128 -3488
+ 16085 3f36 00       		.byte	0x0
+ 16086 3f37 00       		.byte	0x0
+ 16087 3f38 30       		.uleb128 0x30
+ 16088 3f39 722C0000 		.long	0x2c72
+ 16089 3f3d 00000000 		.quad	.LBB1178
+ 16089      00000000 
+ 16090 3f45 00000000 		.quad	.LBE1178
+ 16090      00000000 
+ 16091 3f4d 03       		.byte	0x3
+ 16092 3f4e 2107     		.value	0x721
+ 16093 3f50 9B3F0000 		.long	0x3f9b
+ 16094 3f54 31       		.uleb128 0x31
+ 16095 3f55 8E2C0000 		.long	0x2c8e
+ 16096 3f59 03       		.byte	0x3
+ 16097 3f5a 91       		.byte	0x91
+ 16098 3f5b F064     		.sleb128 -3472
+ 16099 3f5d 31       		.uleb128 0x31
+ 16100 3f5e 842C0000 		.long	0x2c84
+ 16101 3f62 03       		.byte	0x3
+ 16102 3f63 91       		.byte	0x91
+ 16103 3f64 8065     		.sleb128 -3456
+ 16104 3f66 34       		.uleb128 0x34
+ 16105 3f67 3B2C0000 		.long	0x2c3b
+ 16106 3f6b 00000000 		.quad	.LBB1180
+ 16106      00000000 
+ 16107 3f73 00000000 		.quad	.LBE1180
+ 16107      00000000 
+ 16108 3f7b 03       		.byte	0x3
+ 16109 3f7c DA05     		.value	0x5da
+ 16110 3f7e 31       		.uleb128 0x31
+ 16111 3f7f 652C0000 		.long	0x2c65
+ 16112 3f83 03       		.byte	0x3
+ 16113 3f84 91       		.byte	0x91
+ 16114 3f85 9C65     		.sleb128 -3428
+ 16115 3f87 31       		.uleb128 0x31
+ 16116 3f88 592C0000 		.long	0x2c59
+ 16117 3f8c 03       		.byte	0x3
+ 16118 3f8d 91       		.byte	0x91
+ 16119 3f8e A065     		.sleb128 -3424
+ 16120 3f90 31       		.uleb128 0x31
+ 16121 3f91 4D2C0000 		.long	0x2c4d
+ 16122 3f95 03       		.byte	0x3
+ 16123 3f96 91       		.byte	0x91
+ 16124 3f97 B065     		.sleb128 -3408
+ 16125 3f99 00       		.byte	0x0
+ 16126 3f9a 00       		.byte	0x0
+ 16127 3f9b 30       		.uleb128 0x30
+
GAS LISTING /tmp/ccPaCTqg.s 			page 442
+
+
+ 16128 3f9c 8F0D0000 		.long	0xd8f
+ 16129 3fa0 00000000 		.quad	.LBB1182
+ 16129      00000000 
+ 16130 3fa8 00000000 		.quad	.LBE1182
+ 16130      00000000 
+ 16131 3fb0 03       		.byte	0x3
+ 16132 3fb1 2507     		.value	0x725
+ 16133 3fb3 AF410000 		.long	0x41af
+ 16134 3fb7 31       		.uleb128 0x31
+ 16135 3fb8 A10D0000 		.long	0xda1
+ 16136 3fbc 03       		.byte	0x3
+ 16137 3fbd 91       		.byte	0x91
+ 16138 3fbe C065     		.sleb128 -3392
+ 16139 3fc0 32       		.uleb128 0x32
+ 16140 3fc1 00000000 		.quad	.LBB1183
+ 16140      00000000 
+ 16141 3fc9 00000000 		.quad	.LBE1183
+ 16141      00000000 
+ 16142 3fd1 33       		.uleb128 0x33
+ 16143 3fd2 AD0D0000 		.long	0xdad
+ 16144 3fd6 03       		.byte	0x3
+ 16145 3fd7 76       		.byte	0x76
+ 16146 3fd8 E050     		.sleb128 -6048
+ 16147 3fda 30       		.uleb128 0x30
+ 16148 3fdb BA0D0000 		.long	0xdba
+ 16149 3fdf 00000000 		.quad	.LBB1184
+ 16149      00000000 
+ 16150 3fe7 00000000 		.quad	.LBE1184
+ 16150      00000000 
+ 16151 3fef 03       		.byte	0x3
+ 16152 3ff0 1F06     		.value	0x61f
+ 16153 3ff2 77400000 		.long	0x4077
+ 16154 3ff6 31       		.uleb128 0x31
+ 16155 3ff7 CC0D0000 		.long	0xdcc
+ 16156 3ffb 03       		.byte	0x3
+ 16157 3ffc 91       		.byte	0x91
+ 16158 3ffd D065     		.sleb128 -3376
+ 16159 3fff 32       		.uleb128 0x32
+ 16160 4000 00000000 		.quad	.LBB1185
+ 16160      00000000 
+ 16161 4008 00000000 		.quad	.LBE1185
+ 16161      00000000 
+ 16162 4010 33       		.uleb128 0x33
+ 16163 4011 D80D0000 		.long	0xdd8
+ 16164 4015 09       		.byte	0x9
+ 16165 4016 03       		.byte	0x3
+ 16166 4017 00000000 		.quad	mask.8002
+ 16166      00000000 
+ 16167 401f 34       		.uleb128 0x34
+ 16168 4020 FB0D0000 		.long	0xdfb
+ 16169 4024 00000000 		.quad	.LBB1186
+ 16169      00000000 
+ 16170 402c 00000000 		.quad	.LBE1186
+ 16170      00000000 
+ 16171 4034 03       		.byte	0x3
+ 16172 4035 FE04     		.value	0x4fe
+ 16173 4037 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s 			page 443
+
+
+ 16174 4038 190E0000 		.long	0xe19
+ 16175 403c 03       		.byte	0x3
+ 16176 403d 91       		.byte	0x91
+ 16177 403e E065     		.sleb128 -3360
+ 16178 4040 31       		.uleb128 0x31
+ 16179 4041 0D0E0000 		.long	0xe0d
+ 16180 4045 03       		.byte	0x3
+ 16181 4046 91       		.byte	0x91
+ 16182 4047 F065     		.sleb128 -3344
+ 16183 4049 34       		.uleb128 0x34
+ 16184 404a 260E0000 		.long	0xe26
+ 16185 404e 00000000 		.quad	.LBB1188
+ 16185      00000000 
+ 16186 4056 00000000 		.quad	.LBE1188
+ 16186      00000000 
+ 16187 405e 03       		.byte	0x3
+ 16188 405f 7501     		.value	0x175
+ 16189 4061 31       		.uleb128 0x31
+ 16190 4062 440E0000 		.long	0xe44
+ 16191 4066 03       		.byte	0x3
+ 16192 4067 91       		.byte	0x91
+ 16193 4068 8066     		.sleb128 -3328
+ 16194 406a 31       		.uleb128 0x31
+ 16195 406b 380E0000 		.long	0xe38
+ 16196 406f 03       		.byte	0x3
+ 16197 4070 91       		.byte	0x91
+ 16198 4071 9066     		.sleb128 -3312
+ 16199 4073 00       		.byte	0x0
+ 16200 4074 00       		.byte	0x0
+ 16201 4075 00       		.byte	0x0
+ 16202 4076 00       		.byte	0x0
+ 16203 4077 30       		.uleb128 0x30
+ 16204 4078 BA0D0000 		.long	0xdba
+ 16205 407c 00000000 		.quad	.LBB1190
+ 16205      00000000 
+ 16206 4084 00000000 		.quad	.LBE1190
+ 16206      00000000 
+ 16207 408c 03       		.byte	0x3
+ 16208 408d 2006     		.value	0x620
+ 16209 408f 14410000 		.long	0x4114
+ 16210 4093 31       		.uleb128 0x31
+ 16211 4094 CC0D0000 		.long	0xdcc
+ 16212 4098 03       		.byte	0x3
+ 16213 4099 91       		.byte	0x91
+ 16214 409a A066     		.sleb128 -3296
+ 16215 409c 32       		.uleb128 0x32
+ 16216 409d 00000000 		.quad	.LBB1191
+ 16216      00000000 
+ 16217 40a5 00000000 		.quad	.LBE1191
+ 16217      00000000 
+ 16218 40ad 33       		.uleb128 0x33
+ 16219 40ae D80D0000 		.long	0xdd8
+ 16220 40b2 09       		.byte	0x9
+ 16221 40b3 03       		.byte	0x3
+ 16222 40b4 00000000 		.quad	mask.8002
+ 16222      00000000 
+ 16223 40bc 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccPaCTqg.s 			page 444
+
+
+ 16224 40bd FB0D0000 		.long	0xdfb
+ 16225 40c1 00000000 		.quad	.LBB1192
+ 16225      00000000 
+ 16226 40c9 00000000 		.quad	.LBE1192
+ 16226      00000000 
+ 16227 40d1 03       		.byte	0x3
+ 16228 40d2 FE04     		.value	0x4fe
+ 16229 40d4 31       		.uleb128 0x31
+ 16230 40d5 190E0000 		.long	0xe19
+ 16231 40d9 03       		.byte	0x3
+ 16232 40da 91       		.byte	0x91
+ 16233 40db B066     		.sleb128 -3280
+ 16234 40dd 31       		.uleb128 0x31
+ 16235 40de 0D0E0000 		.long	0xe0d
+ 16236 40e2 03       		.byte	0x3
+ 16237 40e3 91       		.byte	0x91
+ 16238 40e4 C066     		.sleb128 -3264
+ 16239 40e6 34       		.uleb128 0x34
+ 16240 40e7 260E0000 		.long	0xe26
+ 16241 40eb 00000000 		.quad	.LBB1194
+ 16241      00000000 
+ 16242 40f3 00000000 		.quad	.LBE1194
+ 16242      00000000 
+ 16243 40fb 03       		.byte	0x3
+ 16244 40fc 7501     		.value	0x175
+ 16245 40fe 31       		.uleb128 0x31
+ 16246 40ff 440E0000 		.long	0xe44
+ 16247 4103 03       		.byte	0x3
+ 16248 4104 91       		.byte	0x91
+ 16249 4105 D066     		.sleb128 -3248
+ 16250 4107 31       		.uleb128 0x31
+ 16251 4108 380E0000 		.long	0xe38
+ 16252 410c 03       		.byte	0x3
+ 16253 410d 91       		.byte	0x91
+ 16254 410e E066     		.sleb128 -3232
+ 16255 4110 00       		.byte	0x0
+ 16256 4111 00       		.byte	0x0
+ 16257 4112 00       		.byte	0x0
+ 16258 4113 00       		.byte	0x0
+ 16259 4114 34       		.uleb128 0x34
+ 16260 4115 BA0D0000 		.long	0xdba
+ 16261 4119 00000000 		.quad	.LBB1196
+ 16261      00000000 
+ 16262 4121 00000000 		.quad	.LBE1196
+ 16262      00000000 
+ 16263 4129 03       		.byte	0x3
+ 16264 412a 2106     		.value	0x621
+ 16265 412c 31       		.uleb128 0x31
+ 16266 412d CC0D0000 		.long	0xdcc
+ 16267 4131 03       		.byte	0x3
+ 16268 4132 91       		.byte	0x91
+ 16269 4133 F066     		.sleb128 -3216
+ 16270 4135 32       		.uleb128 0x32
+ 16271 4136 00000000 		.quad	.LBB1197
+ 16271      00000000 
+ 16272 413e 00000000 		.quad	.LBE1197
+ 16272      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 445
+
+
+ 16273 4146 33       		.uleb128 0x33
+ 16274 4147 D80D0000 		.long	0xdd8
+ 16275 414b 09       		.byte	0x9
+ 16276 414c 03       		.byte	0x3
+ 16277 414d 00000000 		.quad	mask.8002
+ 16277      00000000 
+ 16278 4155 34       		.uleb128 0x34
+ 16279 4156 FB0D0000 		.long	0xdfb
+ 16280 415a 00000000 		.quad	.LBB1198
+ 16280      00000000 
+ 16281 4162 00000000 		.quad	.LBE1198
+ 16281      00000000 
+ 16282 416a 03       		.byte	0x3
+ 16283 416b FE04     		.value	0x4fe
+ 16284 416d 31       		.uleb128 0x31
+ 16285 416e 190E0000 		.long	0xe19
+ 16286 4172 03       		.byte	0x3
+ 16287 4173 91       		.byte	0x91
+ 16288 4174 8067     		.sleb128 -3200
+ 16289 4176 31       		.uleb128 0x31
+ 16290 4177 0D0E0000 		.long	0xe0d
+ 16291 417b 03       		.byte	0x3
+ 16292 417c 91       		.byte	0x91
+ 16293 417d 9067     		.sleb128 -3184
+ 16294 417f 34       		.uleb128 0x34
+ 16295 4180 260E0000 		.long	0xe26
+ 16296 4184 00000000 		.quad	.LBB1200
+ 16296      00000000 
+ 16297 418c 00000000 		.quad	.LBE1200
+ 16297      00000000 
+ 16298 4194 03       		.byte	0x3
+ 16299 4195 7501     		.value	0x175
+ 16300 4197 31       		.uleb128 0x31
+ 16301 4198 440E0000 		.long	0xe44
+ 16302 419c 03       		.byte	0x3
+ 16303 419d 91       		.byte	0x91
+ 16304 419e A067     		.sleb128 -3168
+ 16305 41a0 31       		.uleb128 0x31
+ 16306 41a1 380E0000 		.long	0xe38
+ 16307 41a5 03       		.byte	0x3
+ 16308 41a6 91       		.byte	0x91
+ 16309 41a7 B067     		.sleb128 -3152
+ 16310 41a9 00       		.byte	0x0
+ 16311 41aa 00       		.byte	0x0
+ 16312 41ab 00       		.byte	0x0
+ 16313 41ac 00       		.byte	0x0
+ 16314 41ad 00       		.byte	0x0
+ 16315 41ae 00       		.byte	0x0
+ 16316 41af 30       		.uleb128 0x30
+ 16317 41b0 8F0D0000 		.long	0xd8f
+ 16318 41b4 00000000 		.quad	.LBB1202
+ 16318      00000000 
+ 16319 41bc 00000000 		.quad	.LBE1202
+ 16319      00000000 
+ 16320 41c4 03       		.byte	0x3
+ 16321 41c5 2607     		.value	0x726
+ 16322 41c7 C3430000 		.long	0x43c3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 446
+
+
+ 16323 41cb 31       		.uleb128 0x31
+ 16324 41cc A10D0000 		.long	0xda1
+ 16325 41d0 03       		.byte	0x3
+ 16326 41d1 91       		.byte	0x91
+ 16327 41d2 C067     		.sleb128 -3136
+ 16328 41d4 32       		.uleb128 0x32
+ 16329 41d5 00000000 		.quad	.LBB1203
+ 16329      00000000 
+ 16330 41dd 00000000 		.quad	.LBE1203
+ 16330      00000000 
+ 16331 41e5 33       		.uleb128 0x33
+ 16332 41e6 AD0D0000 		.long	0xdad
+ 16333 41ea 03       		.byte	0x3
+ 16334 41eb 76       		.byte	0x76
+ 16335 41ec F050     		.sleb128 -6032
+ 16336 41ee 30       		.uleb128 0x30
+ 16337 41ef BA0D0000 		.long	0xdba
+ 16338 41f3 00000000 		.quad	.LBB1204
+ 16338      00000000 
+ 16339 41fb 00000000 		.quad	.LBE1204
+ 16339      00000000 
+ 16340 4203 03       		.byte	0x3
+ 16341 4204 1F06     		.value	0x61f
+ 16342 4206 8B420000 		.long	0x428b
+ 16343 420a 31       		.uleb128 0x31
+ 16344 420b CC0D0000 		.long	0xdcc
+ 16345 420f 03       		.byte	0x3
+ 16346 4210 91       		.byte	0x91
+ 16347 4211 D067     		.sleb128 -3120
+ 16348 4213 32       		.uleb128 0x32
+ 16349 4214 00000000 		.quad	.LBB1205
+ 16349      00000000 
+ 16350 421c 00000000 		.quad	.LBE1205
+ 16350      00000000 
+ 16351 4224 33       		.uleb128 0x33
+ 16352 4225 D80D0000 		.long	0xdd8
+ 16353 4229 09       		.byte	0x9
+ 16354 422a 03       		.byte	0x3
+ 16355 422b 00000000 		.quad	mask.8002
+ 16355      00000000 
+ 16356 4233 34       		.uleb128 0x34
+ 16357 4234 FB0D0000 		.long	0xdfb
+ 16358 4238 00000000 		.quad	.LBB1206
+ 16358      00000000 
+ 16359 4240 00000000 		.quad	.LBE1206
+ 16359      00000000 
+ 16360 4248 03       		.byte	0x3
+ 16361 4249 FE04     		.value	0x4fe
+ 16362 424b 31       		.uleb128 0x31
+ 16363 424c 190E0000 		.long	0xe19
+ 16364 4250 03       		.byte	0x3
+ 16365 4251 91       		.byte	0x91
+ 16366 4252 E067     		.sleb128 -3104
+ 16367 4254 31       		.uleb128 0x31
+ 16368 4255 0D0E0000 		.long	0xe0d
+ 16369 4259 03       		.byte	0x3
+ 16370 425a 91       		.byte	0x91
+
GAS LISTING /tmp/ccPaCTqg.s 			page 447
+
+
+ 16371 425b F067     		.sleb128 -3088
+ 16372 425d 34       		.uleb128 0x34
+ 16373 425e 260E0000 		.long	0xe26
+ 16374 4262 00000000 		.quad	.LBB1208
+ 16374      00000000 
+ 16375 426a 00000000 		.quad	.LBE1208
+ 16375      00000000 
+ 16376 4272 03       		.byte	0x3
+ 16377 4273 7501     		.value	0x175
+ 16378 4275 31       		.uleb128 0x31
+ 16379 4276 440E0000 		.long	0xe44
+ 16380 427a 03       		.byte	0x3
+ 16381 427b 91       		.byte	0x91
+ 16382 427c 8068     		.sleb128 -3072
+ 16383 427e 31       		.uleb128 0x31
+ 16384 427f 380E0000 		.long	0xe38
+ 16385 4283 03       		.byte	0x3
+ 16386 4284 91       		.byte	0x91
+ 16387 4285 9068     		.sleb128 -3056
+ 16388 4287 00       		.byte	0x0
+ 16389 4288 00       		.byte	0x0
+ 16390 4289 00       		.byte	0x0
+ 16391 428a 00       		.byte	0x0
+ 16392 428b 30       		.uleb128 0x30
+ 16393 428c BA0D0000 		.long	0xdba
+ 16394 4290 00000000 		.quad	.LBB1210
+ 16394      00000000 
+ 16395 4298 00000000 		.quad	.LBE1210
+ 16395      00000000 
+ 16396 42a0 03       		.byte	0x3
+ 16397 42a1 2006     		.value	0x620
+ 16398 42a3 28430000 		.long	0x4328
+ 16399 42a7 31       		.uleb128 0x31
+ 16400 42a8 CC0D0000 		.long	0xdcc
+ 16401 42ac 03       		.byte	0x3
+ 16402 42ad 91       		.byte	0x91
+ 16403 42ae A068     		.sleb128 -3040
+ 16404 42b0 32       		.uleb128 0x32
+ 16405 42b1 00000000 		.quad	.LBB1211
+ 16405      00000000 
+ 16406 42b9 00000000 		.quad	.LBE1211
+ 16406      00000000 
+ 16407 42c1 33       		.uleb128 0x33
+ 16408 42c2 D80D0000 		.long	0xdd8
+ 16409 42c6 09       		.byte	0x9
+ 16410 42c7 03       		.byte	0x3
+ 16411 42c8 00000000 		.quad	mask.8002
+ 16411      00000000 
+ 16412 42d0 34       		.uleb128 0x34
+ 16413 42d1 FB0D0000 		.long	0xdfb
+ 16414 42d5 00000000 		.quad	.LBB1212
+ 16414      00000000 
+ 16415 42dd 00000000 		.quad	.LBE1212
+ 16415      00000000 
+ 16416 42e5 03       		.byte	0x3
+ 16417 42e6 FE04     		.value	0x4fe
+ 16418 42e8 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s 			page 448
+
+
+ 16419 42e9 190E0000 		.long	0xe19
+ 16420 42ed 03       		.byte	0x3
+ 16421 42ee 91       		.byte	0x91
+ 16422 42ef B068     		.sleb128 -3024
+ 16423 42f1 31       		.uleb128 0x31
+ 16424 42f2 0D0E0000 		.long	0xe0d
+ 16425 42f6 03       		.byte	0x3
+ 16426 42f7 91       		.byte	0x91
+ 16427 42f8 C068     		.sleb128 -3008
+ 16428 42fa 34       		.uleb128 0x34
+ 16429 42fb 260E0000 		.long	0xe26
+ 16430 42ff 00000000 		.quad	.LBB1214
+ 16430      00000000 
+ 16431 4307 00000000 		.quad	.LBE1214
+ 16431      00000000 
+ 16432 430f 03       		.byte	0x3
+ 16433 4310 7501     		.value	0x175
+ 16434 4312 31       		.uleb128 0x31
+ 16435 4313 440E0000 		.long	0xe44
+ 16436 4317 03       		.byte	0x3
+ 16437 4318 91       		.byte	0x91
+ 16438 4319 D068     		.sleb128 -2992
+ 16439 431b 31       		.uleb128 0x31
+ 16440 431c 380E0000 		.long	0xe38
+ 16441 4320 03       		.byte	0x3
+ 16442 4321 91       		.byte	0x91
+ 16443 4322 E068     		.sleb128 -2976
+ 16444 4324 00       		.byte	0x0
+ 16445 4325 00       		.byte	0x0
+ 16446 4326 00       		.byte	0x0
+ 16447 4327 00       		.byte	0x0
+ 16448 4328 34       		.uleb128 0x34
+ 16449 4329 BA0D0000 		.long	0xdba
+ 16450 432d 00000000 		.quad	.LBB1216
+ 16450      00000000 
+ 16451 4335 00000000 		.quad	.LBE1216
+ 16451      00000000 
+ 16452 433d 03       		.byte	0x3
+ 16453 433e 2106     		.value	0x621
+ 16454 4340 31       		.uleb128 0x31
+ 16455 4341 CC0D0000 		.long	0xdcc
+ 16456 4345 03       		.byte	0x3
+ 16457 4346 91       		.byte	0x91
+ 16458 4347 F068     		.sleb128 -2960
+ 16459 4349 32       		.uleb128 0x32
+ 16460 434a 00000000 		.quad	.LBB1217
+ 16460      00000000 
+ 16461 4352 00000000 		.quad	.LBE1217
+ 16461      00000000 
+ 16462 435a 33       		.uleb128 0x33
+ 16463 435b D80D0000 		.long	0xdd8
+ 16464 435f 09       		.byte	0x9
+ 16465 4360 03       		.byte	0x3
+ 16466 4361 00000000 		.quad	mask.8002
+ 16466      00000000 
+ 16467 4369 34       		.uleb128 0x34
+ 16468 436a FB0D0000 		.long	0xdfb
+
GAS LISTING /tmp/ccPaCTqg.s 			page 449
+
+
+ 16469 436e 00000000 		.quad	.LBB1218
+ 16469      00000000 
+ 16470 4376 00000000 		.quad	.LBE1218
+ 16470      00000000 
+ 16471 437e 03       		.byte	0x3
+ 16472 437f FE04     		.value	0x4fe
+ 16473 4381 31       		.uleb128 0x31
+ 16474 4382 190E0000 		.long	0xe19
+ 16475 4386 03       		.byte	0x3
+ 16476 4387 91       		.byte	0x91
+ 16477 4388 8069     		.sleb128 -2944
+ 16478 438a 31       		.uleb128 0x31
+ 16479 438b 0D0E0000 		.long	0xe0d
+ 16480 438f 03       		.byte	0x3
+ 16481 4390 91       		.byte	0x91
+ 16482 4391 9069     		.sleb128 -2928
+ 16483 4393 34       		.uleb128 0x34
+ 16484 4394 260E0000 		.long	0xe26
+ 16485 4398 00000000 		.quad	.LBB1220
+ 16485      00000000 
+ 16486 43a0 00000000 		.quad	.LBE1220
+ 16486      00000000 
+ 16487 43a8 03       		.byte	0x3
+ 16488 43a9 7501     		.value	0x175
+ 16489 43ab 31       		.uleb128 0x31
+ 16490 43ac 440E0000 		.long	0xe44
+ 16491 43b0 03       		.byte	0x3
+ 16492 43b1 91       		.byte	0x91
+ 16493 43b2 A069     		.sleb128 -2912
+ 16494 43b4 31       		.uleb128 0x31
+ 16495 43b5 380E0000 		.long	0xe38
+ 16496 43b9 03       		.byte	0x3
+ 16497 43ba 91       		.byte	0x91
+ 16498 43bb B069     		.sleb128 -2896
+ 16499 43bd 00       		.byte	0x0
+ 16500 43be 00       		.byte	0x0
+ 16501 43bf 00       		.byte	0x0
+ 16502 43c0 00       		.byte	0x0
+ 16503 43c1 00       		.byte	0x0
+ 16504 43c2 00       		.byte	0x0
+ 16505 43c3 30       		.uleb128 0x30
+ 16506 43c4 E30C0000 		.long	0xce3
+ 16507 43c8 00000000 		.quad	.LBB1222
+ 16507      00000000 
+ 16508 43d0 00000000 		.quad	.LBE1222
+ 16508      00000000 
+ 16509 43d8 03       		.byte	0x3
+ 16510 43d9 2707     		.value	0x727
+ 16511 43db 89440000 		.long	0x4489
+ 16512 43df 31       		.uleb128 0x31
+ 16513 43e0 010D0000 		.long	0xd01
+ 16514 43e4 03       		.byte	0x3
+ 16515 43e5 91       		.byte	0x91
+ 16516 43e6 CC69     		.sleb128 -2868
+ 16517 43e8 31       		.uleb128 0x31
+ 16518 43e9 F50C0000 		.long	0xcf5
+ 16519 43ed 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 450
+
+
+ 16520 43ee 91       		.byte	0x91
+ 16521 43ef D069     		.sleb128 -2864
+ 16522 43f1 32       		.uleb128 0x32
+ 16523 43f2 00000000 		.quad	.LBB1223
+ 16523      00000000 
+ 16524 43fa 00000000 		.quad	.LBE1223
+ 16524      00000000 
+ 16525 4402 33       		.uleb128 0x33
+ 16526 4403 0D0D0000 		.long	0xd0d
+ 16527 4407 03       		.byte	0x3
+ 16528 4408 76       		.byte	0x76
+ 16529 4409 8051     		.sleb128 -6016
+ 16530 440b 30       		.uleb128 0x30
+ 16531 440c 1A0D0000 		.long	0xd1a
+ 16532 4410 00000000 		.quad	.LBB1224
+ 16532      00000000 
+ 16533 4418 00000000 		.quad	.LBE1224
+ 16533      00000000 
+ 16534 4420 03       		.byte	0x3
+ 16535 4421 8A06     		.value	0x68a
+ 16536 4423 3A440000 		.long	0x443a
+ 16537 4427 31       		.uleb128 0x31
+ 16538 4428 380D0000 		.long	0xd38
+ 16539 442c 03       		.byte	0x3
+ 16540 442d 91       		.byte	0x91
+ 16541 442e EC69     		.sleb128 -2836
+ 16542 4430 31       		.uleb128 0x31
+ 16543 4431 2C0D0000 		.long	0xd2c
+ 16544 4435 03       		.byte	0x3
+ 16545 4436 91       		.byte	0x91
+ 16546 4437 F069     		.sleb128 -2832
+ 16547 4439 00       		.byte	0x0
+ 16548 443a 34       		.uleb128 0x34
+ 16549 443b 450D0000 		.long	0xd45
+ 16550 443f 00000000 		.quad	.LBB1226
+ 16550      00000000 
+ 16551 4447 00000000 		.quad	.LBE1226
+ 16551      00000000 
+ 16552 444f 03       		.byte	0x3
+ 16553 4450 8B06     		.value	0x68b
+ 16554 4452 31       		.uleb128 0x31
+ 16555 4453 570D0000 		.long	0xd57
+ 16556 4457 03       		.byte	0x3
+ 16557 4458 91       		.byte	0x91
+ 16558 4459 806A     		.sleb128 -2816
+ 16559 445b 34       		.uleb128 0x34
+ 16560 445c 640D0000 		.long	0xd64
+ 16561 4460 00000000 		.quad	.LBB1228
+ 16561      00000000 
+ 16562 4468 00000000 		.quad	.LBE1228
+ 16562      00000000 
+ 16563 4470 03       		.byte	0x3
+ 16564 4471 4905     		.value	0x549
+ 16565 4473 31       		.uleb128 0x31
+ 16566 4474 820D0000 		.long	0xd82
+ 16567 4478 03       		.byte	0x3
+ 16568 4479 91       		.byte	0x91
+
GAS LISTING /tmp/ccPaCTqg.s 			page 451
+
+
+ 16569 447a 9C6A     		.sleb128 -2788
+ 16570 447c 31       		.uleb128 0x31
+ 16571 447d 760D0000 		.long	0xd76
+ 16572 4481 03       		.byte	0x3
+ 16573 4482 91       		.byte	0x91
+ 16574 4483 A06A     		.sleb128 -2784
+ 16575 4485 00       		.byte	0x0
+ 16576 4486 00       		.byte	0x0
+ 16577 4487 00       		.byte	0x0
+ 16578 4488 00       		.byte	0x0
+ 16579 4489 30       		.uleb128 0x30
+ 16580 448a 450D0000 		.long	0xd45
+ 16581 448e 00000000 		.quad	.LBB1230
+ 16581      00000000 
+ 16582 4496 00000000 		.quad	.LBE1230
+ 16582      00000000 
+ 16583 449e 03       		.byte	0x3
+ 16584 449f 2A07     		.value	0x72a
+ 16585 44a1 DA440000 		.long	0x44da
+ 16586 44a5 31       		.uleb128 0x31
+ 16587 44a6 570D0000 		.long	0xd57
+ 16588 44aa 03       		.byte	0x3
+ 16589 44ab 91       		.byte	0x91
+ 16590 44ac B06A     		.sleb128 -2768
+ 16591 44ae 34       		.uleb128 0x34
+ 16592 44af 640D0000 		.long	0xd64
+ 16593 44b3 00000000 		.quad	.LBB1232
+ 16593      00000000 
+ 16594 44bb 00000000 		.quad	.LBE1232
+ 16594      00000000 
+ 16595 44c3 03       		.byte	0x3
+ 16596 44c4 4905     		.value	0x549
+ 16597 44c6 31       		.uleb128 0x31
+ 16598 44c7 820D0000 		.long	0xd82
+ 16599 44cb 03       		.byte	0x3
+ 16600 44cc 91       		.byte	0x91
+ 16601 44cd CC6A     		.sleb128 -2740
+ 16602 44cf 31       		.uleb128 0x31
+ 16603 44d0 760D0000 		.long	0xd76
+ 16604 44d4 03       		.byte	0x3
+ 16605 44d5 91       		.byte	0x91
+ 16606 44d6 D06A     		.sleb128 -2736
+ 16607 44d8 00       		.byte	0x0
+ 16608 44d9 00       		.byte	0x0
+ 16609 44da 30       		.uleb128 0x30
+ 16610 44db BE2B0000 		.long	0x2bbe
+ 16611 44df 00000000 		.quad	.LBB1234
+ 16611      00000000 
+ 16612 44e7 00000000 		.quad	.LBE1234
+ 16612      00000000 
+ 16613 44ef 03       		.byte	0x3
+ 16614 44f0 3207     		.value	0x732
+ 16615 44f2 A0450000 		.long	0x45a0
+ 16616 44f6 31       		.uleb128 0x31
+ 16617 44f7 DC2B0000 		.long	0x2bdc
+ 16618 44fb 03       		.byte	0x3
+ 16619 44fc 91       		.byte	0x91
+
GAS LISTING /tmp/ccPaCTqg.s 			page 452
+
+
+ 16620 44fd EC6A     		.sleb128 -2708
+ 16621 44ff 31       		.uleb128 0x31
+ 16622 4500 D02B0000 		.long	0x2bd0
+ 16623 4504 03       		.byte	0x3
+ 16624 4505 91       		.byte	0x91
+ 16625 4506 F06A     		.sleb128 -2704
+ 16626 4508 32       		.uleb128 0x32
+ 16627 4509 00000000 		.quad	.LBB1235
+ 16627      00000000 
+ 16628 4511 00000000 		.quad	.LBE1235
+ 16628      00000000 
+ 16629 4519 33       		.uleb128 0x33
+ 16630 451a E82B0000 		.long	0x2be8
+ 16631 451e 03       		.byte	0x3
+ 16632 451f 76       		.byte	0x76
+ 16633 4520 9051     		.sleb128 -6000
+ 16634 4522 30       		.uleb128 0x30
+ 16635 4523 1A0D0000 		.long	0xd1a
+ 16636 4527 00000000 		.quad	.LBB1236
+ 16636      00000000 
+ 16637 452f 00000000 		.quad	.LBE1236
+ 16637      00000000 
+ 16638 4537 03       		.byte	0x3
+ 16639 4538 5606     		.value	0x656
+ 16640 453a 51450000 		.long	0x4551
+ 16641 453e 31       		.uleb128 0x31
+ 16642 453f 380D0000 		.long	0xd38
+ 16643 4543 03       		.byte	0x3
+ 16644 4544 91       		.byte	0x91
+ 16645 4545 8C6B     		.sleb128 -2676
+ 16646 4547 31       		.uleb128 0x31
+ 16647 4548 2C0D0000 		.long	0xd2c
+ 16648 454c 03       		.byte	0x3
+ 16649 454d 91       		.byte	0x91
+ 16650 454e 906B     		.sleb128 -2672
+ 16651 4550 00       		.byte	0x0
+ 16652 4551 34       		.uleb128 0x34
+ 16653 4552 F52B0000 		.long	0x2bf5
+ 16654 4556 00000000 		.quad	.LBB1238
+ 16654      00000000 
+ 16655 455e 00000000 		.quad	.LBE1238
+ 16655      00000000 
+ 16656 4566 03       		.byte	0x3
+ 16657 4567 5706     		.value	0x657
+ 16658 4569 31       		.uleb128 0x31
+ 16659 456a 072C0000 		.long	0x2c07
+ 16660 456e 03       		.byte	0x3
+ 16661 456f 91       		.byte	0x91
+ 16662 4570 A06B     		.sleb128 -2656
+ 16663 4572 34       		.uleb128 0x34
+ 16664 4573 640D0000 		.long	0xd64
+ 16665 4577 00000000 		.quad	.LBB1240
+ 16665      00000000 
+ 16666 457f 00000000 		.quad	.LBE1240
+ 16666      00000000 
+ 16667 4587 03       		.byte	0x3
+ 16668 4588 8105     		.value	0x581
+
GAS LISTING /tmp/ccPaCTqg.s 			page 453
+
+
+ 16669 458a 31       		.uleb128 0x31
+ 16670 458b 820D0000 		.long	0xd82
+ 16671 458f 03       		.byte	0x3
+ 16672 4590 91       		.byte	0x91
+ 16673 4591 BC6B     		.sleb128 -2628
+ 16674 4593 31       		.uleb128 0x31
+ 16675 4594 760D0000 		.long	0xd76
+ 16676 4598 03       		.byte	0x3
+ 16677 4599 91       		.byte	0x91
+ 16678 459a C06B     		.sleb128 -2624
+ 16679 459c 00       		.byte	0x0
+ 16680 459d 00       		.byte	0x0
+ 16681 459e 00       		.byte	0x0
+ 16682 459f 00       		.byte	0x0
+ 16683 45a0 30       		.uleb128 0x30
+ 16684 45a1 8F0D0000 		.long	0xd8f
+ 16685 45a5 00000000 		.quad	.LBB1242
+ 16685      00000000 
+ 16686 45ad 00000000 		.quad	.LBE1242
+ 16686      00000000 
+ 16687 45b5 03       		.byte	0x3
+ 16688 45b6 3407     		.value	0x734
+ 16689 45b8 B4470000 		.long	0x47b4
+ 16690 45bc 31       		.uleb128 0x31
+ 16691 45bd A10D0000 		.long	0xda1
+ 16692 45c1 03       		.byte	0x3
+ 16693 45c2 91       		.byte	0x91
+ 16694 45c3 D06B     		.sleb128 -2608
+ 16695 45c5 32       		.uleb128 0x32
+ 16696 45c6 00000000 		.quad	.LBB1243
+ 16696      00000000 
+ 16697 45ce 00000000 		.quad	.LBE1243
+ 16697      00000000 
+ 16698 45d6 33       		.uleb128 0x33
+ 16699 45d7 AD0D0000 		.long	0xdad
+ 16700 45db 03       		.byte	0x3
+ 16701 45dc 76       		.byte	0x76
+ 16702 45dd A051     		.sleb128 -5984
+ 16703 45df 30       		.uleb128 0x30
+ 16704 45e0 BA0D0000 		.long	0xdba
+ 16705 45e4 00000000 		.quad	.LBB1244
+ 16705      00000000 
+ 16706 45ec 00000000 		.quad	.LBE1244
+ 16706      00000000 
+ 16707 45f4 03       		.byte	0x3
+ 16708 45f5 1F06     		.value	0x61f
+ 16709 45f7 7C460000 		.long	0x467c
+ 16710 45fb 31       		.uleb128 0x31
+ 16711 45fc CC0D0000 		.long	0xdcc
+ 16712 4600 03       		.byte	0x3
+ 16713 4601 91       		.byte	0x91
+ 16714 4602 E06B     		.sleb128 -2592
+ 16715 4604 32       		.uleb128 0x32
+ 16716 4605 00000000 		.quad	.LBB1245
+ 16716      00000000 
+ 16717 460d 00000000 		.quad	.LBE1245
+ 16717      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 454
+
+
+ 16718 4615 33       		.uleb128 0x33
+ 16719 4616 D80D0000 		.long	0xdd8
+ 16720 461a 09       		.byte	0x9
+ 16721 461b 03       		.byte	0x3
+ 16722 461c 00000000 		.quad	mask.8002
+ 16722      00000000 
+ 16723 4624 34       		.uleb128 0x34
+ 16724 4625 FB0D0000 		.long	0xdfb
+ 16725 4629 00000000 		.quad	.LBB1246
+ 16725      00000000 
+ 16726 4631 00000000 		.quad	.LBE1246
+ 16726      00000000 
+ 16727 4639 03       		.byte	0x3
+ 16728 463a FE04     		.value	0x4fe
+ 16729 463c 31       		.uleb128 0x31
+ 16730 463d 190E0000 		.long	0xe19
+ 16731 4641 03       		.byte	0x3
+ 16732 4642 91       		.byte	0x91
+ 16733 4643 F06B     		.sleb128 -2576
+ 16734 4645 31       		.uleb128 0x31
+ 16735 4646 0D0E0000 		.long	0xe0d
+ 16736 464a 03       		.byte	0x3
+ 16737 464b 91       		.byte	0x91
+ 16738 464c 806C     		.sleb128 -2560
+ 16739 464e 34       		.uleb128 0x34
+ 16740 464f 260E0000 		.long	0xe26
+ 16741 4653 00000000 		.quad	.LBB1248
+ 16741      00000000 
+ 16742 465b 00000000 		.quad	.LBE1248
+ 16742      00000000 
+ 16743 4663 03       		.byte	0x3
+ 16744 4664 7501     		.value	0x175
+ 16745 4666 31       		.uleb128 0x31
+ 16746 4667 440E0000 		.long	0xe44
+ 16747 466b 03       		.byte	0x3
+ 16748 466c 91       		.byte	0x91
+ 16749 466d 906C     		.sleb128 -2544
+ 16750 466f 31       		.uleb128 0x31
+ 16751 4670 380E0000 		.long	0xe38
+ 16752 4674 03       		.byte	0x3
+ 16753 4675 91       		.byte	0x91
+ 16754 4676 A06C     		.sleb128 -2528
+ 16755 4678 00       		.byte	0x0
+ 16756 4679 00       		.byte	0x0
+ 16757 467a 00       		.byte	0x0
+ 16758 467b 00       		.byte	0x0
+ 16759 467c 30       		.uleb128 0x30
+ 16760 467d BA0D0000 		.long	0xdba
+ 16761 4681 00000000 		.quad	.LBB1250
+ 16761      00000000 
+ 16762 4689 00000000 		.quad	.LBE1250
+ 16762      00000000 
+ 16763 4691 03       		.byte	0x3
+ 16764 4692 2006     		.value	0x620
+ 16765 4694 19470000 		.long	0x4719
+ 16766 4698 31       		.uleb128 0x31
+ 16767 4699 CC0D0000 		.long	0xdcc
+
GAS LISTING /tmp/ccPaCTqg.s 			page 455
+
+
+ 16768 469d 03       		.byte	0x3
+ 16769 469e 91       		.byte	0x91
+ 16770 469f B06C     		.sleb128 -2512
+ 16771 46a1 32       		.uleb128 0x32
+ 16772 46a2 00000000 		.quad	.LBB1251
+ 16772      00000000 
+ 16773 46aa 00000000 		.quad	.LBE1251
+ 16773      00000000 
+ 16774 46b2 33       		.uleb128 0x33
+ 16775 46b3 D80D0000 		.long	0xdd8
+ 16776 46b7 09       		.byte	0x9
+ 16777 46b8 03       		.byte	0x3
+ 16778 46b9 00000000 		.quad	mask.8002
+ 16778      00000000 
+ 16779 46c1 34       		.uleb128 0x34
+ 16780 46c2 FB0D0000 		.long	0xdfb
+ 16781 46c6 00000000 		.quad	.LBB1252
+ 16781      00000000 
+ 16782 46ce 00000000 		.quad	.LBE1252
+ 16782      00000000 
+ 16783 46d6 03       		.byte	0x3
+ 16784 46d7 FE04     		.value	0x4fe
+ 16785 46d9 31       		.uleb128 0x31
+ 16786 46da 190E0000 		.long	0xe19
+ 16787 46de 03       		.byte	0x3
+ 16788 46df 91       		.byte	0x91
+ 16789 46e0 C06C     		.sleb128 -2496
+ 16790 46e2 31       		.uleb128 0x31
+ 16791 46e3 0D0E0000 		.long	0xe0d
+ 16792 46e7 03       		.byte	0x3
+ 16793 46e8 91       		.byte	0x91
+ 16794 46e9 D06C     		.sleb128 -2480
+ 16795 46eb 34       		.uleb128 0x34
+ 16796 46ec 260E0000 		.long	0xe26
+ 16797 46f0 00000000 		.quad	.LBB1254
+ 16797      00000000 
+ 16798 46f8 00000000 		.quad	.LBE1254
+ 16798      00000000 
+ 16799 4700 03       		.byte	0x3
+ 16800 4701 7501     		.value	0x175
+ 16801 4703 31       		.uleb128 0x31
+ 16802 4704 440E0000 		.long	0xe44
+ 16803 4708 03       		.byte	0x3
+ 16804 4709 91       		.byte	0x91
+ 16805 470a E06C     		.sleb128 -2464
+ 16806 470c 31       		.uleb128 0x31
+ 16807 470d 380E0000 		.long	0xe38
+ 16808 4711 03       		.byte	0x3
+ 16809 4712 91       		.byte	0x91
+ 16810 4713 F06C     		.sleb128 -2448
+ 16811 4715 00       		.byte	0x0
+ 16812 4716 00       		.byte	0x0
+ 16813 4717 00       		.byte	0x0
+ 16814 4718 00       		.byte	0x0
+ 16815 4719 34       		.uleb128 0x34
+ 16816 471a BA0D0000 		.long	0xdba
+ 16817 471e 00000000 		.quad	.LBB1256
+
GAS LISTING /tmp/ccPaCTqg.s 			page 456
+
+
+ 16817      00000000 
+ 16818 4726 00000000 		.quad	.LBE1256
+ 16818      00000000 
+ 16819 472e 03       		.byte	0x3
+ 16820 472f 2106     		.value	0x621
+ 16821 4731 31       		.uleb128 0x31
+ 16822 4732 CC0D0000 		.long	0xdcc
+ 16823 4736 03       		.byte	0x3
+ 16824 4737 91       		.byte	0x91
+ 16825 4738 806D     		.sleb128 -2432
+ 16826 473a 32       		.uleb128 0x32
+ 16827 473b 00000000 		.quad	.LBB1257
+ 16827      00000000 
+ 16828 4743 00000000 		.quad	.LBE1257
+ 16828      00000000 
+ 16829 474b 33       		.uleb128 0x33
+ 16830 474c D80D0000 		.long	0xdd8
+ 16831 4750 09       		.byte	0x9
+ 16832 4751 03       		.byte	0x3
+ 16833 4752 00000000 		.quad	mask.8002
+ 16833      00000000 
+ 16834 475a 34       		.uleb128 0x34
+ 16835 475b FB0D0000 		.long	0xdfb
+ 16836 475f 00000000 		.quad	.LBB1258
+ 16836      00000000 
+ 16837 4767 00000000 		.quad	.LBE1258
+ 16837      00000000 
+ 16838 476f 03       		.byte	0x3
+ 16839 4770 FE04     		.value	0x4fe
+ 16840 4772 31       		.uleb128 0x31
+ 16841 4773 190E0000 		.long	0xe19
+ 16842 4777 03       		.byte	0x3
+ 16843 4778 91       		.byte	0x91
+ 16844 4779 906D     		.sleb128 -2416
+ 16845 477b 31       		.uleb128 0x31
+ 16846 477c 0D0E0000 		.long	0xe0d
+ 16847 4780 03       		.byte	0x3
+ 16848 4781 91       		.byte	0x91
+ 16849 4782 A06D     		.sleb128 -2400
+ 16850 4784 34       		.uleb128 0x34
+ 16851 4785 260E0000 		.long	0xe26
+ 16852 4789 00000000 		.quad	.LBB1260
+ 16852      00000000 
+ 16853 4791 00000000 		.quad	.LBE1260
+ 16853      00000000 
+ 16854 4799 03       		.byte	0x3
+ 16855 479a 7501     		.value	0x175
+ 16856 479c 31       		.uleb128 0x31
+ 16857 479d 440E0000 		.long	0xe44
+ 16858 47a1 03       		.byte	0x3
+ 16859 47a2 91       		.byte	0x91
+ 16860 47a3 B06D     		.sleb128 -2384
+ 16861 47a5 31       		.uleb128 0x31
+ 16862 47a6 380E0000 		.long	0xe38
+ 16863 47aa 03       		.byte	0x3
+ 16864 47ab 91       		.byte	0x91
+ 16865 47ac C06D     		.sleb128 -2368
+
GAS LISTING /tmp/ccPaCTqg.s 			page 457
+
+
+ 16866 47ae 00       		.byte	0x0
+ 16867 47af 00       		.byte	0x0
+ 16868 47b0 00       		.byte	0x0
+ 16869 47b1 00       		.byte	0x0
+ 16870 47b2 00       		.byte	0x0
+ 16871 47b3 00       		.byte	0x0
+ 16872 47b4 30       		.uleb128 0x30
+ 16873 47b5 8F0D0000 		.long	0xd8f
+ 16874 47b9 00000000 		.quad	.LBB1262
+ 16874      00000000 
+ 16875 47c1 00000000 		.quad	.LBE1262
+ 16875      00000000 
+ 16876 47c9 03       		.byte	0x3
+ 16877 47ca 3607     		.value	0x736
+ 16878 47cc C8490000 		.long	0x49c8
+ 16879 47d0 31       		.uleb128 0x31
+ 16880 47d1 A10D0000 		.long	0xda1
+ 16881 47d5 03       		.byte	0x3
+ 16882 47d6 91       		.byte	0x91
+ 16883 47d7 D06D     		.sleb128 -2352
+ 16884 47d9 32       		.uleb128 0x32
+ 16885 47da 00000000 		.quad	.LBB1263
+ 16885      00000000 
+ 16886 47e2 00000000 		.quad	.LBE1263
+ 16886      00000000 
+ 16887 47ea 33       		.uleb128 0x33
+ 16888 47eb AD0D0000 		.long	0xdad
+ 16889 47ef 03       		.byte	0x3
+ 16890 47f0 76       		.byte	0x76
+ 16891 47f1 B051     		.sleb128 -5968
+ 16892 47f3 30       		.uleb128 0x30
+ 16893 47f4 BA0D0000 		.long	0xdba
+ 16894 47f8 00000000 		.quad	.LBB1264
+ 16894      00000000 
+ 16895 4800 00000000 		.quad	.LBE1264
+ 16895      00000000 
+ 16896 4808 03       		.byte	0x3
+ 16897 4809 1F06     		.value	0x61f
+ 16898 480b 90480000 		.long	0x4890
+ 16899 480f 31       		.uleb128 0x31
+ 16900 4810 CC0D0000 		.long	0xdcc
+ 16901 4814 03       		.byte	0x3
+ 16902 4815 91       		.byte	0x91
+ 16903 4816 E06D     		.sleb128 -2336
+ 16904 4818 32       		.uleb128 0x32
+ 16905 4819 00000000 		.quad	.LBB1265
+ 16905      00000000 
+ 16906 4821 00000000 		.quad	.LBE1265
+ 16906      00000000 
+ 16907 4829 33       		.uleb128 0x33
+ 16908 482a D80D0000 		.long	0xdd8
+ 16909 482e 09       		.byte	0x9
+ 16910 482f 03       		.byte	0x3
+ 16911 4830 00000000 		.quad	mask.8002
+ 16911      00000000 
+ 16912 4838 34       		.uleb128 0x34
+ 16913 4839 FB0D0000 		.long	0xdfb
+
GAS LISTING /tmp/ccPaCTqg.s 			page 458
+
+
+ 16914 483d 00000000 		.quad	.LBB1266
+ 16914      00000000 
+ 16915 4845 00000000 		.quad	.LBE1266
+ 16915      00000000 
+ 16916 484d 03       		.byte	0x3
+ 16917 484e FE04     		.value	0x4fe
+ 16918 4850 31       		.uleb128 0x31
+ 16919 4851 190E0000 		.long	0xe19
+ 16920 4855 03       		.byte	0x3
+ 16921 4856 91       		.byte	0x91
+ 16922 4857 F06D     		.sleb128 -2320
+ 16923 4859 31       		.uleb128 0x31
+ 16924 485a 0D0E0000 		.long	0xe0d
+ 16925 485e 03       		.byte	0x3
+ 16926 485f 91       		.byte	0x91
+ 16927 4860 806E     		.sleb128 -2304
+ 16928 4862 34       		.uleb128 0x34
+ 16929 4863 260E0000 		.long	0xe26
+ 16930 4867 00000000 		.quad	.LBB1268
+ 16930      00000000 
+ 16931 486f 00000000 		.quad	.LBE1268
+ 16931      00000000 
+ 16932 4877 03       		.byte	0x3
+ 16933 4878 7501     		.value	0x175
+ 16934 487a 31       		.uleb128 0x31
+ 16935 487b 440E0000 		.long	0xe44
+ 16936 487f 03       		.byte	0x3
+ 16937 4880 91       		.byte	0x91
+ 16938 4881 906E     		.sleb128 -2288
+ 16939 4883 31       		.uleb128 0x31
+ 16940 4884 380E0000 		.long	0xe38
+ 16941 4888 03       		.byte	0x3
+ 16942 4889 91       		.byte	0x91
+ 16943 488a A06E     		.sleb128 -2272
+ 16944 488c 00       		.byte	0x0
+ 16945 488d 00       		.byte	0x0
+ 16946 488e 00       		.byte	0x0
+ 16947 488f 00       		.byte	0x0
+ 16948 4890 30       		.uleb128 0x30
+ 16949 4891 BA0D0000 		.long	0xdba
+ 16950 4895 00000000 		.quad	.LBB1270
+ 16950      00000000 
+ 16951 489d 00000000 		.quad	.LBE1270
+ 16951      00000000 
+ 16952 48a5 03       		.byte	0x3
+ 16953 48a6 2006     		.value	0x620
+ 16954 48a8 2D490000 		.long	0x492d
+ 16955 48ac 31       		.uleb128 0x31
+ 16956 48ad CC0D0000 		.long	0xdcc
+ 16957 48b1 03       		.byte	0x3
+ 16958 48b2 91       		.byte	0x91
+ 16959 48b3 B06E     		.sleb128 -2256
+ 16960 48b5 32       		.uleb128 0x32
+ 16961 48b6 00000000 		.quad	.LBB1271
+ 16961      00000000 
+ 16962 48be 00000000 		.quad	.LBE1271
+ 16962      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 459
+
+
+ 16963 48c6 33       		.uleb128 0x33
+ 16964 48c7 D80D0000 		.long	0xdd8
+ 16965 48cb 09       		.byte	0x9
+ 16966 48cc 03       		.byte	0x3
+ 16967 48cd 00000000 		.quad	mask.8002
+ 16967      00000000 
+ 16968 48d5 34       		.uleb128 0x34
+ 16969 48d6 FB0D0000 		.long	0xdfb
+ 16970 48da 00000000 		.quad	.LBB1272
+ 16970      00000000 
+ 16971 48e2 00000000 		.quad	.LBE1272
+ 16971      00000000 
+ 16972 48ea 03       		.byte	0x3
+ 16973 48eb FE04     		.value	0x4fe
+ 16974 48ed 31       		.uleb128 0x31
+ 16975 48ee 190E0000 		.long	0xe19
+ 16976 48f2 03       		.byte	0x3
+ 16977 48f3 91       		.byte	0x91
+ 16978 48f4 C06E     		.sleb128 -2240
+ 16979 48f6 31       		.uleb128 0x31
+ 16980 48f7 0D0E0000 		.long	0xe0d
+ 16981 48fb 03       		.byte	0x3
+ 16982 48fc 91       		.byte	0x91
+ 16983 48fd D06E     		.sleb128 -2224
+ 16984 48ff 34       		.uleb128 0x34
+ 16985 4900 260E0000 		.long	0xe26
+ 16986 4904 00000000 		.quad	.LBB1274
+ 16986      00000000 
+ 16987 490c 00000000 		.quad	.LBE1274
+ 16987      00000000 
+ 16988 4914 03       		.byte	0x3
+ 16989 4915 7501     		.value	0x175
+ 16990 4917 31       		.uleb128 0x31
+ 16991 4918 440E0000 		.long	0xe44
+ 16992 491c 03       		.byte	0x3
+ 16993 491d 91       		.byte	0x91
+ 16994 491e E06E     		.sleb128 -2208
+ 16995 4920 31       		.uleb128 0x31
+ 16996 4921 380E0000 		.long	0xe38
+ 16997 4925 03       		.byte	0x3
+ 16998 4926 91       		.byte	0x91
+ 16999 4927 F06E     		.sleb128 -2192
+ 17000 4929 00       		.byte	0x0
+ 17001 492a 00       		.byte	0x0
+ 17002 492b 00       		.byte	0x0
+ 17003 492c 00       		.byte	0x0
+ 17004 492d 34       		.uleb128 0x34
+ 17005 492e BA0D0000 		.long	0xdba
+ 17006 4932 00000000 		.quad	.LBB1276
+ 17006      00000000 
+ 17007 493a 00000000 		.quad	.LBE1276
+ 17007      00000000 
+ 17008 4942 03       		.byte	0x3
+ 17009 4943 2106     		.value	0x621
+ 17010 4945 31       		.uleb128 0x31
+ 17011 4946 CC0D0000 		.long	0xdcc
+ 17012 494a 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 460
+
+
+ 17013 494b 91       		.byte	0x91
+ 17014 494c 806F     		.sleb128 -2176
+ 17015 494e 32       		.uleb128 0x32
+ 17016 494f 00000000 		.quad	.LBB1277
+ 17016      00000000 
+ 17017 4957 00000000 		.quad	.LBE1277
+ 17017      00000000 
+ 17018 495f 33       		.uleb128 0x33
+ 17019 4960 D80D0000 		.long	0xdd8
+ 17020 4964 09       		.byte	0x9
+ 17021 4965 03       		.byte	0x3
+ 17022 4966 00000000 		.quad	mask.8002
+ 17022      00000000 
+ 17023 496e 34       		.uleb128 0x34
+ 17024 496f FB0D0000 		.long	0xdfb
+ 17025 4973 00000000 		.quad	.LBB1278
+ 17025      00000000 
+ 17026 497b 00000000 		.quad	.LBE1278
+ 17026      00000000 
+ 17027 4983 03       		.byte	0x3
+ 17028 4984 FE04     		.value	0x4fe
+ 17029 4986 31       		.uleb128 0x31
+ 17030 4987 190E0000 		.long	0xe19
+ 17031 498b 03       		.byte	0x3
+ 17032 498c 91       		.byte	0x91
+ 17033 498d 906F     		.sleb128 -2160
+ 17034 498f 31       		.uleb128 0x31
+ 17035 4990 0D0E0000 		.long	0xe0d
+ 17036 4994 03       		.byte	0x3
+ 17037 4995 91       		.byte	0x91
+ 17038 4996 A06F     		.sleb128 -2144
+ 17039 4998 34       		.uleb128 0x34
+ 17040 4999 260E0000 		.long	0xe26
+ 17041 499d 00000000 		.quad	.LBB1280
+ 17041      00000000 
+ 17042 49a5 00000000 		.quad	.LBE1280
+ 17042      00000000 
+ 17043 49ad 03       		.byte	0x3
+ 17044 49ae 7501     		.value	0x175
+ 17045 49b0 31       		.uleb128 0x31
+ 17046 49b1 440E0000 		.long	0xe44
+ 17047 49b5 03       		.byte	0x3
+ 17048 49b6 91       		.byte	0x91
+ 17049 49b7 B06F     		.sleb128 -2128
+ 17050 49b9 31       		.uleb128 0x31
+ 17051 49ba 380E0000 		.long	0xe38
+ 17052 49be 03       		.byte	0x3
+ 17053 49bf 91       		.byte	0x91
+ 17054 49c0 C06F     		.sleb128 -2112
+ 17055 49c2 00       		.byte	0x0
+ 17056 49c3 00       		.byte	0x0
+ 17057 49c4 00       		.byte	0x0
+ 17058 49c5 00       		.byte	0x0
+ 17059 49c6 00       		.byte	0x0
+ 17060 49c7 00       		.byte	0x0
+ 17061 49c8 30       		.uleb128 0x30
+ 17062 49c9 450D0000 		.long	0xd45
+
GAS LISTING /tmp/ccPaCTqg.s 			page 461
+
+
+ 17063 49cd 00000000 		.quad	.LBB1282
+ 17063      00000000 
+ 17064 49d5 00000000 		.quad	.LBE1282
+ 17064      00000000 
+ 17065 49dd 03       		.byte	0x3
+ 17066 49de 3707     		.value	0x737
+ 17067 49e0 194A0000 		.long	0x4a19
+ 17068 49e4 31       		.uleb128 0x31
+ 17069 49e5 570D0000 		.long	0xd57
+ 17070 49e9 03       		.byte	0x3
+ 17071 49ea 91       		.byte	0x91
+ 17072 49eb D06F     		.sleb128 -2096
+ 17073 49ed 34       		.uleb128 0x34
+ 17074 49ee 640D0000 		.long	0xd64
+ 17075 49f2 00000000 		.quad	.LBB1284
+ 17075      00000000 
+ 17076 49fa 00000000 		.quad	.LBE1284
+ 17076      00000000 
+ 17077 4a02 03       		.byte	0x3
+ 17078 4a03 4905     		.value	0x549
+ 17079 4a05 31       		.uleb128 0x31
+ 17080 4a06 820D0000 		.long	0xd82
+ 17081 4a0a 03       		.byte	0x3
+ 17082 4a0b 91       		.byte	0x91
+ 17083 4a0c EC6F     		.sleb128 -2068
+ 17084 4a0e 31       		.uleb128 0x31
+ 17085 4a0f 760D0000 		.long	0xd76
+ 17086 4a13 03       		.byte	0x3
+ 17087 4a14 91       		.byte	0x91
+ 17088 4a15 F06F     		.sleb128 -2064
+ 17089 4a17 00       		.byte	0x0
+ 17090 4a18 00       		.byte	0x0
+ 17091 4a19 30       		.uleb128 0x30
+ 17092 4a1a 142C0000 		.long	0x2c14
+ 17093 4a1e 00000000 		.quad	.LBB1286
+ 17093      00000000 
+ 17094 4a26 00000000 		.quad	.LBE1286
+ 17094      00000000 
+ 17095 4a2e 03       		.byte	0x3
+ 17096 4a2f 3907     		.value	0x739
+ 17097 4a31 7C4A0000 		.long	0x4a7c
+ 17098 4a35 31       		.uleb128 0x31
+ 17099 4a36 302C0000 		.long	0x2c30
+ 17100 4a3a 03       		.byte	0x3
+ 17101 4a3b 91       		.byte	0x91
+ 17102 4a3c 8070     		.sleb128 -2048
+ 17103 4a3e 31       		.uleb128 0x31
+ 17104 4a3f 262C0000 		.long	0x2c26
+ 17105 4a43 03       		.byte	0x3
+ 17106 4a44 91       		.byte	0x91
+ 17107 4a45 9070     		.sleb128 -2032
+ 17108 4a47 34       		.uleb128 0x34
+ 17109 4a48 3B2C0000 		.long	0x2c3b
+ 17110 4a4c 00000000 		.quad	.LBB1288
+ 17110      00000000 
+ 17111 4a54 00000000 		.quad	.LBE1288
+ 17111      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 462
+
+
+ 17112 4a5c 03       		.byte	0x3
+ 17113 4a5d BA05     		.value	0x5ba
+ 17114 4a5f 31       		.uleb128 0x31
+ 17115 4a60 652C0000 		.long	0x2c65
+ 17116 4a64 03       		.byte	0x3
+ 17117 4a65 91       		.byte	0x91
+ 17118 4a66 AC70     		.sleb128 -2004
+ 17119 4a68 31       		.uleb128 0x31
+ 17120 4a69 592C0000 		.long	0x2c59
+ 17121 4a6d 03       		.byte	0x3
+ 17122 4a6e 91       		.byte	0x91
+ 17123 4a6f B070     		.sleb128 -2000
+ 17124 4a71 31       		.uleb128 0x31
+ 17125 4a72 4D2C0000 		.long	0x2c4d
+ 17126 4a76 03       		.byte	0x3
+ 17127 4a77 91       		.byte	0x91
+ 17128 4a78 C070     		.sleb128 -1984
+ 17129 4a7a 00       		.byte	0x0
+ 17130 4a7b 00       		.byte	0x0
+ 17131 4a7c 30       		.uleb128 0x30
+ 17132 4a7d 722C0000 		.long	0x2c72
+ 17133 4a81 00000000 		.quad	.LBB1290
+ 17133      00000000 
+ 17134 4a89 00000000 		.quad	.LBE1290
+ 17134      00000000 
+ 17135 4a91 03       		.byte	0x3
+ 17136 4a92 3D07     		.value	0x73d
+ 17137 4a94 DF4A0000 		.long	0x4adf
+ 17138 4a98 31       		.uleb128 0x31
+ 17139 4a99 8E2C0000 		.long	0x2c8e
+ 17140 4a9d 03       		.byte	0x3
+ 17141 4a9e 91       		.byte	0x91
+ 17142 4a9f D070     		.sleb128 -1968
+ 17143 4aa1 31       		.uleb128 0x31
+ 17144 4aa2 842C0000 		.long	0x2c84
+ 17145 4aa6 03       		.byte	0x3
+ 17146 4aa7 91       		.byte	0x91
+ 17147 4aa8 E070     		.sleb128 -1952
+ 17148 4aaa 34       		.uleb128 0x34
+ 17149 4aab 3B2C0000 		.long	0x2c3b
+ 17150 4aaf 00000000 		.quad	.LBB1292
+ 17150      00000000 
+ 17151 4ab7 00000000 		.quad	.LBE1292
+ 17151      00000000 
+ 17152 4abf 03       		.byte	0x3
+ 17153 4ac0 DA05     		.value	0x5da
+ 17154 4ac2 31       		.uleb128 0x31
+ 17155 4ac3 652C0000 		.long	0x2c65
+ 17156 4ac7 03       		.byte	0x3
+ 17157 4ac8 91       		.byte	0x91
+ 17158 4ac9 FC70     		.sleb128 -1924
+ 17159 4acb 31       		.uleb128 0x31
+ 17160 4acc 592C0000 		.long	0x2c59
+ 17161 4ad0 03       		.byte	0x3
+ 17162 4ad1 91       		.byte	0x91
+ 17163 4ad2 8071     		.sleb128 -1920
+ 17164 4ad4 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s 			page 463
+
+
+ 17165 4ad5 4D2C0000 		.long	0x2c4d
+ 17166 4ad9 03       		.byte	0x3
+ 17167 4ada 91       		.byte	0x91
+ 17168 4adb 9071     		.sleb128 -1904
+ 17169 4add 00       		.byte	0x0
+ 17170 4ade 00       		.byte	0x0
+ 17171 4adf 30       		.uleb128 0x30
+ 17172 4ae0 8F0D0000 		.long	0xd8f
+ 17173 4ae4 00000000 		.quad	.LBB1294
+ 17173      00000000 
+ 17174 4aec 00000000 		.quad	.LBE1294
+ 17174      00000000 
+ 17175 4af4 03       		.byte	0x3
+ 17176 4af5 4007     		.value	0x740
+ 17177 4af7 F34C0000 		.long	0x4cf3
+ 17178 4afb 31       		.uleb128 0x31
+ 17179 4afc A10D0000 		.long	0xda1
+ 17180 4b00 03       		.byte	0x3
+ 17181 4b01 91       		.byte	0x91
+ 17182 4b02 A071     		.sleb128 -1888
+ 17183 4b04 32       		.uleb128 0x32
+ 17184 4b05 00000000 		.quad	.LBB1295
+ 17184      00000000 
+ 17185 4b0d 00000000 		.quad	.LBE1295
+ 17185      00000000 
+ 17186 4b15 33       		.uleb128 0x33
+ 17187 4b16 AD0D0000 		.long	0xdad
+ 17188 4b1a 03       		.byte	0x3
+ 17189 4b1b 76       		.byte	0x76
+ 17190 4b1c C051     		.sleb128 -5952
+ 17191 4b1e 30       		.uleb128 0x30
+ 17192 4b1f BA0D0000 		.long	0xdba
+ 17193 4b23 00000000 		.quad	.LBB1296
+ 17193      00000000 
+ 17194 4b2b 00000000 		.quad	.LBE1296
+ 17194      00000000 
+ 17195 4b33 03       		.byte	0x3
+ 17196 4b34 1F06     		.value	0x61f
+ 17197 4b36 BB4B0000 		.long	0x4bbb
+ 17198 4b3a 31       		.uleb128 0x31
+ 17199 4b3b CC0D0000 		.long	0xdcc
+ 17200 4b3f 03       		.byte	0x3
+ 17201 4b40 91       		.byte	0x91
+ 17202 4b41 B071     		.sleb128 -1872
+ 17203 4b43 32       		.uleb128 0x32
+ 17204 4b44 00000000 		.quad	.LBB1297
+ 17204      00000000 
+ 17205 4b4c 00000000 		.quad	.LBE1297
+ 17205      00000000 
+ 17206 4b54 33       		.uleb128 0x33
+ 17207 4b55 D80D0000 		.long	0xdd8
+ 17208 4b59 09       		.byte	0x9
+ 17209 4b5a 03       		.byte	0x3
+ 17210 4b5b 00000000 		.quad	mask.8002
+ 17210      00000000 
+ 17211 4b63 34       		.uleb128 0x34
+ 17212 4b64 FB0D0000 		.long	0xdfb
+
GAS LISTING /tmp/ccPaCTqg.s 			page 464
+
+
+ 17213 4b68 00000000 		.quad	.LBB1298
+ 17213      00000000 
+ 17214 4b70 00000000 		.quad	.LBE1298
+ 17214      00000000 
+ 17215 4b78 03       		.byte	0x3
+ 17216 4b79 FE04     		.value	0x4fe
+ 17217 4b7b 31       		.uleb128 0x31
+ 17218 4b7c 190E0000 		.long	0xe19
+ 17219 4b80 03       		.byte	0x3
+ 17220 4b81 91       		.byte	0x91
+ 17221 4b82 C071     		.sleb128 -1856
+ 17222 4b84 31       		.uleb128 0x31
+ 17223 4b85 0D0E0000 		.long	0xe0d
+ 17224 4b89 03       		.byte	0x3
+ 17225 4b8a 91       		.byte	0x91
+ 17226 4b8b D071     		.sleb128 -1840
+ 17227 4b8d 34       		.uleb128 0x34
+ 17228 4b8e 260E0000 		.long	0xe26
+ 17229 4b92 00000000 		.quad	.LBB1300
+ 17229      00000000 
+ 17230 4b9a 00000000 		.quad	.LBE1300
+ 17230      00000000 
+ 17231 4ba2 03       		.byte	0x3
+ 17232 4ba3 7501     		.value	0x175
+ 17233 4ba5 31       		.uleb128 0x31
+ 17234 4ba6 440E0000 		.long	0xe44
+ 17235 4baa 03       		.byte	0x3
+ 17236 4bab 91       		.byte	0x91
+ 17237 4bac E071     		.sleb128 -1824
+ 17238 4bae 31       		.uleb128 0x31
+ 17239 4baf 380E0000 		.long	0xe38
+ 17240 4bb3 03       		.byte	0x3
+ 17241 4bb4 91       		.byte	0x91
+ 17242 4bb5 F071     		.sleb128 -1808
+ 17243 4bb7 00       		.byte	0x0
+ 17244 4bb8 00       		.byte	0x0
+ 17245 4bb9 00       		.byte	0x0
+ 17246 4bba 00       		.byte	0x0
+ 17247 4bbb 30       		.uleb128 0x30
+ 17248 4bbc BA0D0000 		.long	0xdba
+ 17249 4bc0 00000000 		.quad	.LBB1302
+ 17249      00000000 
+ 17250 4bc8 00000000 		.quad	.LBE1302
+ 17250      00000000 
+ 17251 4bd0 03       		.byte	0x3
+ 17252 4bd1 2006     		.value	0x620
+ 17253 4bd3 584C0000 		.long	0x4c58
+ 17254 4bd7 31       		.uleb128 0x31
+ 17255 4bd8 CC0D0000 		.long	0xdcc
+ 17256 4bdc 03       		.byte	0x3
+ 17257 4bdd 91       		.byte	0x91
+ 17258 4bde 8072     		.sleb128 -1792
+ 17259 4be0 32       		.uleb128 0x32
+ 17260 4be1 00000000 		.quad	.LBB1303
+ 17260      00000000 
+ 17261 4be9 00000000 		.quad	.LBE1303
+ 17261      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 465
+
+
+ 17262 4bf1 33       		.uleb128 0x33
+ 17263 4bf2 D80D0000 		.long	0xdd8
+ 17264 4bf6 09       		.byte	0x9
+ 17265 4bf7 03       		.byte	0x3
+ 17266 4bf8 00000000 		.quad	mask.8002
+ 17266      00000000 
+ 17267 4c00 34       		.uleb128 0x34
+ 17268 4c01 FB0D0000 		.long	0xdfb
+ 17269 4c05 00000000 		.quad	.LBB1304
+ 17269      00000000 
+ 17270 4c0d 00000000 		.quad	.LBE1304
+ 17270      00000000 
+ 17271 4c15 03       		.byte	0x3
+ 17272 4c16 FE04     		.value	0x4fe
+ 17273 4c18 31       		.uleb128 0x31
+ 17274 4c19 190E0000 		.long	0xe19
+ 17275 4c1d 03       		.byte	0x3
+ 17276 4c1e 91       		.byte	0x91
+ 17277 4c1f 9072     		.sleb128 -1776
+ 17278 4c21 31       		.uleb128 0x31
+ 17279 4c22 0D0E0000 		.long	0xe0d
+ 17280 4c26 03       		.byte	0x3
+ 17281 4c27 91       		.byte	0x91
+ 17282 4c28 A072     		.sleb128 -1760
+ 17283 4c2a 34       		.uleb128 0x34
+ 17284 4c2b 260E0000 		.long	0xe26
+ 17285 4c2f 00000000 		.quad	.LBB1306
+ 17285      00000000 
+ 17286 4c37 00000000 		.quad	.LBE1306
+ 17286      00000000 
+ 17287 4c3f 03       		.byte	0x3
+ 17288 4c40 7501     		.value	0x175
+ 17289 4c42 31       		.uleb128 0x31
+ 17290 4c43 440E0000 		.long	0xe44
+ 17291 4c47 03       		.byte	0x3
+ 17292 4c48 91       		.byte	0x91
+ 17293 4c49 B072     		.sleb128 -1744
+ 17294 4c4b 31       		.uleb128 0x31
+ 17295 4c4c 380E0000 		.long	0xe38
+ 17296 4c50 03       		.byte	0x3
+ 17297 4c51 91       		.byte	0x91
+ 17298 4c52 C072     		.sleb128 -1728
+ 17299 4c54 00       		.byte	0x0
+ 17300 4c55 00       		.byte	0x0
+ 17301 4c56 00       		.byte	0x0
+ 17302 4c57 00       		.byte	0x0
+ 17303 4c58 34       		.uleb128 0x34
+ 17304 4c59 BA0D0000 		.long	0xdba
+ 17305 4c5d 00000000 		.quad	.LBB1308
+ 17305      00000000 
+ 17306 4c65 00000000 		.quad	.LBE1308
+ 17306      00000000 
+ 17307 4c6d 03       		.byte	0x3
+ 17308 4c6e 2106     		.value	0x621
+ 17309 4c70 31       		.uleb128 0x31
+ 17310 4c71 CC0D0000 		.long	0xdcc
+ 17311 4c75 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 466
+
+
+ 17312 4c76 91       		.byte	0x91
+ 17313 4c77 D072     		.sleb128 -1712
+ 17314 4c79 32       		.uleb128 0x32
+ 17315 4c7a 00000000 		.quad	.LBB1309
+ 17315      00000000 
+ 17316 4c82 00000000 		.quad	.LBE1309
+ 17316      00000000 
+ 17317 4c8a 33       		.uleb128 0x33
+ 17318 4c8b D80D0000 		.long	0xdd8
+ 17319 4c8f 09       		.byte	0x9
+ 17320 4c90 03       		.byte	0x3
+ 17321 4c91 00000000 		.quad	mask.8002
+ 17321      00000000 
+ 17322 4c99 34       		.uleb128 0x34
+ 17323 4c9a FB0D0000 		.long	0xdfb
+ 17324 4c9e 00000000 		.quad	.LBB1310
+ 17324      00000000 
+ 17325 4ca6 00000000 		.quad	.LBE1310
+ 17325      00000000 
+ 17326 4cae 03       		.byte	0x3
+ 17327 4caf FE04     		.value	0x4fe
+ 17328 4cb1 31       		.uleb128 0x31
+ 17329 4cb2 190E0000 		.long	0xe19
+ 17330 4cb6 03       		.byte	0x3
+ 17331 4cb7 91       		.byte	0x91
+ 17332 4cb8 E072     		.sleb128 -1696
+ 17333 4cba 31       		.uleb128 0x31
+ 17334 4cbb 0D0E0000 		.long	0xe0d
+ 17335 4cbf 03       		.byte	0x3
+ 17336 4cc0 91       		.byte	0x91
+ 17337 4cc1 F072     		.sleb128 -1680
+ 17338 4cc3 34       		.uleb128 0x34
+ 17339 4cc4 260E0000 		.long	0xe26
+ 17340 4cc8 00000000 		.quad	.LBB1312
+ 17340      00000000 
+ 17341 4cd0 00000000 		.quad	.LBE1312
+ 17341      00000000 
+ 17342 4cd8 03       		.byte	0x3
+ 17343 4cd9 7501     		.value	0x175
+ 17344 4cdb 31       		.uleb128 0x31
+ 17345 4cdc 440E0000 		.long	0xe44
+ 17346 4ce0 03       		.byte	0x3
+ 17347 4ce1 91       		.byte	0x91
+ 17348 4ce2 8073     		.sleb128 -1664
+ 17349 4ce4 31       		.uleb128 0x31
+ 17350 4ce5 380E0000 		.long	0xe38
+ 17351 4ce9 03       		.byte	0x3
+ 17352 4cea 91       		.byte	0x91
+ 17353 4ceb 9073     		.sleb128 -1648
+ 17354 4ced 00       		.byte	0x0
+ 17355 4cee 00       		.byte	0x0
+ 17356 4cef 00       		.byte	0x0
+ 17357 4cf0 00       		.byte	0x0
+ 17358 4cf1 00       		.byte	0x0
+ 17359 4cf2 00       		.byte	0x0
+ 17360 4cf3 30       		.uleb128 0x30
+ 17361 4cf4 8F0D0000 		.long	0xd8f
+
GAS LISTING /tmp/ccPaCTqg.s 			page 467
+
+
+ 17362 4cf8 00000000 		.quad	.LBB1314
+ 17362      00000000 
+ 17363 4d00 00000000 		.quad	.LBE1314
+ 17363      00000000 
+ 17364 4d08 03       		.byte	0x3
+ 17365 4d09 4107     		.value	0x741
+ 17366 4d0b 074F0000 		.long	0x4f07
+ 17367 4d0f 31       		.uleb128 0x31
+ 17368 4d10 A10D0000 		.long	0xda1
+ 17369 4d14 03       		.byte	0x3
+ 17370 4d15 91       		.byte	0x91
+ 17371 4d16 A073     		.sleb128 -1632
+ 17372 4d18 32       		.uleb128 0x32
+ 17373 4d19 00000000 		.quad	.LBB1315
+ 17373      00000000 
+ 17374 4d21 00000000 		.quad	.LBE1315
+ 17374      00000000 
+ 17375 4d29 33       		.uleb128 0x33
+ 17376 4d2a AD0D0000 		.long	0xdad
+ 17377 4d2e 03       		.byte	0x3
+ 17378 4d2f 76       		.byte	0x76
+ 17379 4d30 D051     		.sleb128 -5936
+ 17380 4d32 30       		.uleb128 0x30
+ 17381 4d33 BA0D0000 		.long	0xdba
+ 17382 4d37 00000000 		.quad	.LBB1316
+ 17382      00000000 
+ 17383 4d3f 00000000 		.quad	.LBE1316
+ 17383      00000000 
+ 17384 4d47 03       		.byte	0x3
+ 17385 4d48 1F06     		.value	0x61f
+ 17386 4d4a CF4D0000 		.long	0x4dcf
+ 17387 4d4e 31       		.uleb128 0x31
+ 17388 4d4f CC0D0000 		.long	0xdcc
+ 17389 4d53 03       		.byte	0x3
+ 17390 4d54 91       		.byte	0x91
+ 17391 4d55 B073     		.sleb128 -1616
+ 17392 4d57 32       		.uleb128 0x32
+ 17393 4d58 00000000 		.quad	.LBB1317
+ 17393      00000000 
+ 17394 4d60 00000000 		.quad	.LBE1317
+ 17394      00000000 
+ 17395 4d68 33       		.uleb128 0x33
+ 17396 4d69 D80D0000 		.long	0xdd8
+ 17397 4d6d 09       		.byte	0x9
+ 17398 4d6e 03       		.byte	0x3
+ 17399 4d6f 00000000 		.quad	mask.8002
+ 17399      00000000 
+ 17400 4d77 34       		.uleb128 0x34
+ 17401 4d78 FB0D0000 		.long	0xdfb
+ 17402 4d7c 00000000 		.quad	.LBB1318
+ 17402      00000000 
+ 17403 4d84 00000000 		.quad	.LBE1318
+ 17403      00000000 
+ 17404 4d8c 03       		.byte	0x3
+ 17405 4d8d FE04     		.value	0x4fe
+ 17406 4d8f 31       		.uleb128 0x31
+ 17407 4d90 190E0000 		.long	0xe19
+
GAS LISTING /tmp/ccPaCTqg.s 			page 468
+
+
+ 17408 4d94 03       		.byte	0x3
+ 17409 4d95 91       		.byte	0x91
+ 17410 4d96 C073     		.sleb128 -1600
+ 17411 4d98 31       		.uleb128 0x31
+ 17412 4d99 0D0E0000 		.long	0xe0d
+ 17413 4d9d 03       		.byte	0x3
+ 17414 4d9e 91       		.byte	0x91
+ 17415 4d9f D073     		.sleb128 -1584
+ 17416 4da1 34       		.uleb128 0x34
+ 17417 4da2 260E0000 		.long	0xe26
+ 17418 4da6 00000000 		.quad	.LBB1320
+ 17418      00000000 
+ 17419 4dae 00000000 		.quad	.LBE1320
+ 17419      00000000 
+ 17420 4db6 03       		.byte	0x3
+ 17421 4db7 7501     		.value	0x175
+ 17422 4db9 31       		.uleb128 0x31
+ 17423 4dba 440E0000 		.long	0xe44
+ 17424 4dbe 03       		.byte	0x3
+ 17425 4dbf 91       		.byte	0x91
+ 17426 4dc0 E073     		.sleb128 -1568
+ 17427 4dc2 31       		.uleb128 0x31
+ 17428 4dc3 380E0000 		.long	0xe38
+ 17429 4dc7 03       		.byte	0x3
+ 17430 4dc8 91       		.byte	0x91
+ 17431 4dc9 F073     		.sleb128 -1552
+ 17432 4dcb 00       		.byte	0x0
+ 17433 4dcc 00       		.byte	0x0
+ 17434 4dcd 00       		.byte	0x0
+ 17435 4dce 00       		.byte	0x0
+ 17436 4dcf 30       		.uleb128 0x30
+ 17437 4dd0 BA0D0000 		.long	0xdba
+ 17438 4dd4 00000000 		.quad	.LBB1322
+ 17438      00000000 
+ 17439 4ddc 00000000 		.quad	.LBE1322
+ 17439      00000000 
+ 17440 4de4 03       		.byte	0x3
+ 17441 4de5 2006     		.value	0x620
+ 17442 4de7 6C4E0000 		.long	0x4e6c
+ 17443 4deb 31       		.uleb128 0x31
+ 17444 4dec CC0D0000 		.long	0xdcc
+ 17445 4df0 03       		.byte	0x3
+ 17446 4df1 91       		.byte	0x91
+ 17447 4df2 8074     		.sleb128 -1536
+ 17448 4df4 32       		.uleb128 0x32
+ 17449 4df5 00000000 		.quad	.LBB1323
+ 17449      00000000 
+ 17450 4dfd 00000000 		.quad	.LBE1323
+ 17450      00000000 
+ 17451 4e05 33       		.uleb128 0x33
+ 17452 4e06 D80D0000 		.long	0xdd8
+ 17453 4e0a 09       		.byte	0x9
+ 17454 4e0b 03       		.byte	0x3
+ 17455 4e0c 00000000 		.quad	mask.8002
+ 17455      00000000 
+ 17456 4e14 34       		.uleb128 0x34
+ 17457 4e15 FB0D0000 		.long	0xdfb
+
GAS LISTING /tmp/ccPaCTqg.s 			page 469
+
+
+ 17458 4e19 00000000 		.quad	.LBB1324
+ 17458      00000000 
+ 17459 4e21 00000000 		.quad	.LBE1324
+ 17459      00000000 
+ 17460 4e29 03       		.byte	0x3
+ 17461 4e2a FE04     		.value	0x4fe
+ 17462 4e2c 31       		.uleb128 0x31
+ 17463 4e2d 190E0000 		.long	0xe19
+ 17464 4e31 03       		.byte	0x3
+ 17465 4e32 91       		.byte	0x91
+ 17466 4e33 9074     		.sleb128 -1520
+ 17467 4e35 31       		.uleb128 0x31
+ 17468 4e36 0D0E0000 		.long	0xe0d
+ 17469 4e3a 03       		.byte	0x3
+ 17470 4e3b 91       		.byte	0x91
+ 17471 4e3c A074     		.sleb128 -1504
+ 17472 4e3e 34       		.uleb128 0x34
+ 17473 4e3f 260E0000 		.long	0xe26
+ 17474 4e43 00000000 		.quad	.LBB1326
+ 17474      00000000 
+ 17475 4e4b 00000000 		.quad	.LBE1326
+ 17475      00000000 
+ 17476 4e53 03       		.byte	0x3
+ 17477 4e54 7501     		.value	0x175
+ 17478 4e56 31       		.uleb128 0x31
+ 17479 4e57 440E0000 		.long	0xe44
+ 17480 4e5b 03       		.byte	0x3
+ 17481 4e5c 91       		.byte	0x91
+ 17482 4e5d B074     		.sleb128 -1488
+ 17483 4e5f 31       		.uleb128 0x31
+ 17484 4e60 380E0000 		.long	0xe38
+ 17485 4e64 03       		.byte	0x3
+ 17486 4e65 91       		.byte	0x91
+ 17487 4e66 C074     		.sleb128 -1472
+ 17488 4e68 00       		.byte	0x0
+ 17489 4e69 00       		.byte	0x0
+ 17490 4e6a 00       		.byte	0x0
+ 17491 4e6b 00       		.byte	0x0
+ 17492 4e6c 34       		.uleb128 0x34
+ 17493 4e6d BA0D0000 		.long	0xdba
+ 17494 4e71 00000000 		.quad	.LBB1328
+ 17494      00000000 
+ 17495 4e79 00000000 		.quad	.LBE1328
+ 17495      00000000 
+ 17496 4e81 03       		.byte	0x3
+ 17497 4e82 2106     		.value	0x621
+ 17498 4e84 31       		.uleb128 0x31
+ 17499 4e85 CC0D0000 		.long	0xdcc
+ 17500 4e89 03       		.byte	0x3
+ 17501 4e8a 91       		.byte	0x91
+ 17502 4e8b D074     		.sleb128 -1456
+ 17503 4e8d 32       		.uleb128 0x32
+ 17504 4e8e 00000000 		.quad	.LBB1329
+ 17504      00000000 
+ 17505 4e96 00000000 		.quad	.LBE1329
+ 17505      00000000 
+ 17506 4e9e 33       		.uleb128 0x33
+
GAS LISTING /tmp/ccPaCTqg.s 			page 470
+
+
+ 17507 4e9f D80D0000 		.long	0xdd8
+ 17508 4ea3 09       		.byte	0x9
+ 17509 4ea4 03       		.byte	0x3
+ 17510 4ea5 00000000 		.quad	mask.8002
+ 17510      00000000 
+ 17511 4ead 34       		.uleb128 0x34
+ 17512 4eae FB0D0000 		.long	0xdfb
+ 17513 4eb2 00000000 		.quad	.LBB1330
+ 17513      00000000 
+ 17514 4eba 00000000 		.quad	.LBE1330
+ 17514      00000000 
+ 17515 4ec2 03       		.byte	0x3
+ 17516 4ec3 FE04     		.value	0x4fe
+ 17517 4ec5 31       		.uleb128 0x31
+ 17518 4ec6 190E0000 		.long	0xe19
+ 17519 4eca 03       		.byte	0x3
+ 17520 4ecb 91       		.byte	0x91
+ 17521 4ecc E074     		.sleb128 -1440
+ 17522 4ece 31       		.uleb128 0x31
+ 17523 4ecf 0D0E0000 		.long	0xe0d
+ 17524 4ed3 03       		.byte	0x3
+ 17525 4ed4 91       		.byte	0x91
+ 17526 4ed5 F074     		.sleb128 -1424
+ 17527 4ed7 34       		.uleb128 0x34
+ 17528 4ed8 260E0000 		.long	0xe26
+ 17529 4edc 00000000 		.quad	.LBB1332
+ 17529      00000000 
+ 17530 4ee4 00000000 		.quad	.LBE1332
+ 17530      00000000 
+ 17531 4eec 03       		.byte	0x3
+ 17532 4eed 7501     		.value	0x175
+ 17533 4eef 31       		.uleb128 0x31
+ 17534 4ef0 440E0000 		.long	0xe44
+ 17535 4ef4 03       		.byte	0x3
+ 17536 4ef5 91       		.byte	0x91
+ 17537 4ef6 8075     		.sleb128 -1408
+ 17538 4ef8 31       		.uleb128 0x31
+ 17539 4ef9 380E0000 		.long	0xe38
+ 17540 4efd 03       		.byte	0x3
+ 17541 4efe 91       		.byte	0x91
+ 17542 4eff 9075     		.sleb128 -1392
+ 17543 4f01 00       		.byte	0x0
+ 17544 4f02 00       		.byte	0x0
+ 17545 4f03 00       		.byte	0x0
+ 17546 4f04 00       		.byte	0x0
+ 17547 4f05 00       		.byte	0x0
+ 17548 4f06 00       		.byte	0x0
+ 17549 4f07 30       		.uleb128 0x30
+ 17550 4f08 E30C0000 		.long	0xce3
+ 17551 4f0c 00000000 		.quad	.LBB1334
+ 17551      00000000 
+ 17552 4f14 00000000 		.quad	.LBE1334
+ 17552      00000000 
+ 17553 4f1c 03       		.byte	0x3
+ 17554 4f1d 4207     		.value	0x742
+ 17555 4f1f CD4F0000 		.long	0x4fcd
+ 17556 4f23 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s 			page 471
+
+
+ 17557 4f24 010D0000 		.long	0xd01
+ 17558 4f28 03       		.byte	0x3
+ 17559 4f29 91       		.byte	0x91
+ 17560 4f2a AC75     		.sleb128 -1364
+ 17561 4f2c 31       		.uleb128 0x31
+ 17562 4f2d F50C0000 		.long	0xcf5
+ 17563 4f31 03       		.byte	0x3
+ 17564 4f32 91       		.byte	0x91
+ 17565 4f33 B075     		.sleb128 -1360
+ 17566 4f35 32       		.uleb128 0x32
+ 17567 4f36 00000000 		.quad	.LBB1335
+ 17567      00000000 
+ 17568 4f3e 00000000 		.quad	.LBE1335
+ 17568      00000000 
+ 17569 4f46 33       		.uleb128 0x33
+ 17570 4f47 0D0D0000 		.long	0xd0d
+ 17571 4f4b 03       		.byte	0x3
+ 17572 4f4c 76       		.byte	0x76
+ 17573 4f4d E051     		.sleb128 -5920
+ 17574 4f4f 30       		.uleb128 0x30
+ 17575 4f50 1A0D0000 		.long	0xd1a
+ 17576 4f54 00000000 		.quad	.LBB1336
+ 17576      00000000 
+ 17577 4f5c 00000000 		.quad	.LBE1336
+ 17577      00000000 
+ 17578 4f64 03       		.byte	0x3
+ 17579 4f65 8A06     		.value	0x68a
+ 17580 4f67 7E4F0000 		.long	0x4f7e
+ 17581 4f6b 31       		.uleb128 0x31
+ 17582 4f6c 380D0000 		.long	0xd38
+ 17583 4f70 03       		.byte	0x3
+ 17584 4f71 91       		.byte	0x91
+ 17585 4f72 CC75     		.sleb128 -1332
+ 17586 4f74 31       		.uleb128 0x31
+ 17587 4f75 2C0D0000 		.long	0xd2c
+ 17588 4f79 03       		.byte	0x3
+ 17589 4f7a 91       		.byte	0x91
+ 17590 4f7b D075     		.sleb128 -1328
+ 17591 4f7d 00       		.byte	0x0
+ 17592 4f7e 34       		.uleb128 0x34
+ 17593 4f7f 450D0000 		.long	0xd45
+ 17594 4f83 00000000 		.quad	.LBB1338
+ 17594      00000000 
+ 17595 4f8b 00000000 		.quad	.LBE1338
+ 17595      00000000 
+ 17596 4f93 03       		.byte	0x3
+ 17597 4f94 8B06     		.value	0x68b
+ 17598 4f96 31       		.uleb128 0x31
+ 17599 4f97 570D0000 		.long	0xd57
+ 17600 4f9b 03       		.byte	0x3
+ 17601 4f9c 91       		.byte	0x91
+ 17602 4f9d E075     		.sleb128 -1312
+ 17603 4f9f 34       		.uleb128 0x34
+ 17604 4fa0 640D0000 		.long	0xd64
+ 17605 4fa4 00000000 		.quad	.LBB1340
+ 17605      00000000 
+ 17606 4fac 00000000 		.quad	.LBE1340
+
GAS LISTING /tmp/ccPaCTqg.s 			page 472
+
+
+ 17606      00000000 
+ 17607 4fb4 03       		.byte	0x3
+ 17608 4fb5 4905     		.value	0x549
+ 17609 4fb7 31       		.uleb128 0x31
+ 17610 4fb8 820D0000 		.long	0xd82
+ 17611 4fbc 03       		.byte	0x3
+ 17612 4fbd 91       		.byte	0x91
+ 17613 4fbe FC75     		.sleb128 -1284
+ 17614 4fc0 31       		.uleb128 0x31
+ 17615 4fc1 760D0000 		.long	0xd76
+ 17616 4fc5 03       		.byte	0x3
+ 17617 4fc6 91       		.byte	0x91
+ 17618 4fc7 8076     		.sleb128 -1280
+ 17619 4fc9 00       		.byte	0x0
+ 17620 4fca 00       		.byte	0x0
+ 17621 4fcb 00       		.byte	0x0
+ 17622 4fcc 00       		.byte	0x0
+ 17623 4fcd 30       		.uleb128 0x30
+ 17624 4fce 450D0000 		.long	0xd45
+ 17625 4fd2 00000000 		.quad	.LBB1342
+ 17625      00000000 
+ 17626 4fda 00000000 		.quad	.LBE1342
+ 17626      00000000 
+ 17627 4fe2 03       		.byte	0x3
+ 17628 4fe3 4507     		.value	0x745
+ 17629 4fe5 1E500000 		.long	0x501e
+ 17630 4fe9 31       		.uleb128 0x31
+ 17631 4fea 570D0000 		.long	0xd57
+ 17632 4fee 03       		.byte	0x3
+ 17633 4fef 91       		.byte	0x91
+ 17634 4ff0 9076     		.sleb128 -1264
+ 17635 4ff2 34       		.uleb128 0x34
+ 17636 4ff3 640D0000 		.long	0xd64
+ 17637 4ff7 00000000 		.quad	.LBB1344
+ 17637      00000000 
+ 17638 4fff 00000000 		.quad	.LBE1344
+ 17638      00000000 
+ 17639 5007 03       		.byte	0x3
+ 17640 5008 4905     		.value	0x549
+ 17641 500a 31       		.uleb128 0x31
+ 17642 500b 820D0000 		.long	0xd82
+ 17643 500f 03       		.byte	0x3
+ 17644 5010 91       		.byte	0x91
+ 17645 5011 AC76     		.sleb128 -1236
+ 17646 5013 31       		.uleb128 0x31
+ 17647 5014 760D0000 		.long	0xd76
+ 17648 5018 03       		.byte	0x3
+ 17649 5019 91       		.byte	0x91
+ 17650 501a B076     		.sleb128 -1232
+ 17651 501c 00       		.byte	0x0
+ 17652 501d 00       		.byte	0x0
+ 17653 501e 30       		.uleb128 0x30
+ 17654 501f BE2B0000 		.long	0x2bbe
+ 17655 5023 00000000 		.quad	.LBB1346
+ 17655      00000000 
+ 17656 502b 00000000 		.quad	.LBE1346
+ 17656      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 473
+
+
+ 17657 5033 03       		.byte	0x3
+ 17658 5034 4D07     		.value	0x74d
+ 17659 5036 E4500000 		.long	0x50e4
+ 17660 503a 31       		.uleb128 0x31
+ 17661 503b DC2B0000 		.long	0x2bdc
+ 17662 503f 03       		.byte	0x3
+ 17663 5040 91       		.byte	0x91
+ 17664 5041 CC76     		.sleb128 -1204
+ 17665 5043 31       		.uleb128 0x31
+ 17666 5044 D02B0000 		.long	0x2bd0
+ 17667 5048 03       		.byte	0x3
+ 17668 5049 91       		.byte	0x91
+ 17669 504a D076     		.sleb128 -1200
+ 17670 504c 32       		.uleb128 0x32
+ 17671 504d 00000000 		.quad	.LBB1347
+ 17671      00000000 
+ 17672 5055 00000000 		.quad	.LBE1347
+ 17672      00000000 
+ 17673 505d 33       		.uleb128 0x33
+ 17674 505e E82B0000 		.long	0x2be8
+ 17675 5062 03       		.byte	0x3
+ 17676 5063 76       		.byte	0x76
+ 17677 5064 F051     		.sleb128 -5904
+ 17678 5066 30       		.uleb128 0x30
+ 17679 5067 1A0D0000 		.long	0xd1a
+ 17680 506b 00000000 		.quad	.LBB1348
+ 17680      00000000 
+ 17681 5073 00000000 		.quad	.LBE1348
+ 17681      00000000 
+ 17682 507b 03       		.byte	0x3
+ 17683 507c 5606     		.value	0x656
+ 17684 507e 95500000 		.long	0x5095
+ 17685 5082 31       		.uleb128 0x31
+ 17686 5083 380D0000 		.long	0xd38
+ 17687 5087 03       		.byte	0x3
+ 17688 5088 91       		.byte	0x91
+ 17689 5089 EC76     		.sleb128 -1172
+ 17690 508b 31       		.uleb128 0x31
+ 17691 508c 2C0D0000 		.long	0xd2c
+ 17692 5090 03       		.byte	0x3
+ 17693 5091 91       		.byte	0x91
+ 17694 5092 F076     		.sleb128 -1168
+ 17695 5094 00       		.byte	0x0
+ 17696 5095 34       		.uleb128 0x34
+ 17697 5096 F52B0000 		.long	0x2bf5
+ 17698 509a 00000000 		.quad	.LBB1350
+ 17698      00000000 
+ 17699 50a2 00000000 		.quad	.LBE1350
+ 17699      00000000 
+ 17700 50aa 03       		.byte	0x3
+ 17701 50ab 5706     		.value	0x657
+ 17702 50ad 31       		.uleb128 0x31
+ 17703 50ae 072C0000 		.long	0x2c07
+ 17704 50b2 03       		.byte	0x3
+ 17705 50b3 91       		.byte	0x91
+ 17706 50b4 8077     		.sleb128 -1152
+ 17707 50b6 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccPaCTqg.s 			page 474
+
+
+ 17708 50b7 640D0000 		.long	0xd64
+ 17709 50bb 00000000 		.quad	.LBB1352
+ 17709      00000000 
+ 17710 50c3 00000000 		.quad	.LBE1352
+ 17710      00000000 
+ 17711 50cb 03       		.byte	0x3
+ 17712 50cc 8105     		.value	0x581
+ 17713 50ce 31       		.uleb128 0x31
+ 17714 50cf 820D0000 		.long	0xd82
+ 17715 50d3 03       		.byte	0x3
+ 17716 50d4 91       		.byte	0x91
+ 17717 50d5 9C77     		.sleb128 -1124
+ 17718 50d7 31       		.uleb128 0x31
+ 17719 50d8 760D0000 		.long	0xd76
+ 17720 50dc 03       		.byte	0x3
+ 17721 50dd 91       		.byte	0x91
+ 17722 50de A077     		.sleb128 -1120
+ 17723 50e0 00       		.byte	0x0
+ 17724 50e1 00       		.byte	0x0
+ 17725 50e2 00       		.byte	0x0
+ 17726 50e3 00       		.byte	0x0
+ 17727 50e4 30       		.uleb128 0x30
+ 17728 50e5 8F0D0000 		.long	0xd8f
+ 17729 50e9 00000000 		.quad	.LBB1354
+ 17729      00000000 
+ 17730 50f1 00000000 		.quad	.LBE1354
+ 17730      00000000 
+ 17731 50f9 03       		.byte	0x3
+ 17732 50fa 4F07     		.value	0x74f
+ 17733 50fc F8520000 		.long	0x52f8
+ 17734 5100 31       		.uleb128 0x31
+ 17735 5101 A10D0000 		.long	0xda1
+ 17736 5105 03       		.byte	0x3
+ 17737 5106 91       		.byte	0x91
+ 17738 5107 B077     		.sleb128 -1104
+ 17739 5109 32       		.uleb128 0x32
+ 17740 510a 00000000 		.quad	.LBB1355
+ 17740      00000000 
+ 17741 5112 00000000 		.quad	.LBE1355
+ 17741      00000000 
+ 17742 511a 33       		.uleb128 0x33
+ 17743 511b AD0D0000 		.long	0xdad
+ 17744 511f 03       		.byte	0x3
+ 17745 5120 76       		.byte	0x76
+ 17746 5121 8052     		.sleb128 -5888
+ 17747 5123 30       		.uleb128 0x30
+ 17748 5124 BA0D0000 		.long	0xdba
+ 17749 5128 00000000 		.quad	.LBB1356
+ 17749      00000000 
+ 17750 5130 00000000 		.quad	.LBE1356
+ 17750      00000000 
+ 17751 5138 03       		.byte	0x3
+ 17752 5139 1F06     		.value	0x61f
+ 17753 513b C0510000 		.long	0x51c0
+ 17754 513f 31       		.uleb128 0x31
+ 17755 5140 CC0D0000 		.long	0xdcc
+ 17756 5144 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 475
+
+
+ 17757 5145 91       		.byte	0x91
+ 17758 5146 C077     		.sleb128 -1088
+ 17759 5148 32       		.uleb128 0x32
+ 17760 5149 00000000 		.quad	.LBB1357
+ 17760      00000000 
+ 17761 5151 00000000 		.quad	.LBE1357
+ 17761      00000000 
+ 17762 5159 33       		.uleb128 0x33
+ 17763 515a D80D0000 		.long	0xdd8
+ 17764 515e 09       		.byte	0x9
+ 17765 515f 03       		.byte	0x3
+ 17766 5160 00000000 		.quad	mask.8002
+ 17766      00000000 
+ 17767 5168 34       		.uleb128 0x34
+ 17768 5169 FB0D0000 		.long	0xdfb
+ 17769 516d 00000000 		.quad	.LBB1358
+ 17769      00000000 
+ 17770 5175 00000000 		.quad	.LBE1358
+ 17770      00000000 
+ 17771 517d 03       		.byte	0x3
+ 17772 517e FE04     		.value	0x4fe
+ 17773 5180 31       		.uleb128 0x31
+ 17774 5181 190E0000 		.long	0xe19
+ 17775 5185 03       		.byte	0x3
+ 17776 5186 91       		.byte	0x91
+ 17777 5187 D077     		.sleb128 -1072
+ 17778 5189 31       		.uleb128 0x31
+ 17779 518a 0D0E0000 		.long	0xe0d
+ 17780 518e 03       		.byte	0x3
+ 17781 518f 91       		.byte	0x91
+ 17782 5190 E077     		.sleb128 -1056
+ 17783 5192 34       		.uleb128 0x34
+ 17784 5193 260E0000 		.long	0xe26
+ 17785 5197 00000000 		.quad	.LBB1360
+ 17785      00000000 
+ 17786 519f 00000000 		.quad	.LBE1360
+ 17786      00000000 
+ 17787 51a7 03       		.byte	0x3
+ 17788 51a8 7501     		.value	0x175
+ 17789 51aa 31       		.uleb128 0x31
+ 17790 51ab 440E0000 		.long	0xe44
+ 17791 51af 03       		.byte	0x3
+ 17792 51b0 91       		.byte	0x91
+ 17793 51b1 F077     		.sleb128 -1040
+ 17794 51b3 31       		.uleb128 0x31
+ 17795 51b4 380E0000 		.long	0xe38
+ 17796 51b8 03       		.byte	0x3
+ 17797 51b9 91       		.byte	0x91
+ 17798 51ba 8078     		.sleb128 -1024
+ 17799 51bc 00       		.byte	0x0
+ 17800 51bd 00       		.byte	0x0
+ 17801 51be 00       		.byte	0x0
+ 17802 51bf 00       		.byte	0x0
+ 17803 51c0 30       		.uleb128 0x30
+ 17804 51c1 BA0D0000 		.long	0xdba
+ 17805 51c5 00000000 		.quad	.LBB1362
+ 17805      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 476
+
+
+ 17806 51cd 00000000 		.quad	.LBE1362
+ 17806      00000000 
+ 17807 51d5 03       		.byte	0x3
+ 17808 51d6 2006     		.value	0x620
+ 17809 51d8 5D520000 		.long	0x525d
+ 17810 51dc 31       		.uleb128 0x31
+ 17811 51dd CC0D0000 		.long	0xdcc
+ 17812 51e1 03       		.byte	0x3
+ 17813 51e2 91       		.byte	0x91
+ 17814 51e3 9078     		.sleb128 -1008
+ 17815 51e5 32       		.uleb128 0x32
+ 17816 51e6 00000000 		.quad	.LBB1363
+ 17816      00000000 
+ 17817 51ee 00000000 		.quad	.LBE1363
+ 17817      00000000 
+ 17818 51f6 33       		.uleb128 0x33
+ 17819 51f7 D80D0000 		.long	0xdd8
+ 17820 51fb 09       		.byte	0x9
+ 17821 51fc 03       		.byte	0x3
+ 17822 51fd 00000000 		.quad	mask.8002
+ 17822      00000000 
+ 17823 5205 34       		.uleb128 0x34
+ 17824 5206 FB0D0000 		.long	0xdfb
+ 17825 520a 00000000 		.quad	.LBB1364
+ 17825      00000000 
+ 17826 5212 00000000 		.quad	.LBE1364
+ 17826      00000000 
+ 17827 521a 03       		.byte	0x3
+ 17828 521b FE04     		.value	0x4fe
+ 17829 521d 31       		.uleb128 0x31
+ 17830 521e 190E0000 		.long	0xe19
+ 17831 5222 03       		.byte	0x3
+ 17832 5223 91       		.byte	0x91
+ 17833 5224 A078     		.sleb128 -992
+ 17834 5226 31       		.uleb128 0x31
+ 17835 5227 0D0E0000 		.long	0xe0d
+ 17836 522b 03       		.byte	0x3
+ 17837 522c 91       		.byte	0x91
+ 17838 522d B078     		.sleb128 -976
+ 17839 522f 34       		.uleb128 0x34
+ 17840 5230 260E0000 		.long	0xe26
+ 17841 5234 00000000 		.quad	.LBB1366
+ 17841      00000000 
+ 17842 523c 00000000 		.quad	.LBE1366
+ 17842      00000000 
+ 17843 5244 03       		.byte	0x3
+ 17844 5245 7501     		.value	0x175
+ 17845 5247 31       		.uleb128 0x31
+ 17846 5248 440E0000 		.long	0xe44
+ 17847 524c 03       		.byte	0x3
+ 17848 524d 91       		.byte	0x91
+ 17849 524e C078     		.sleb128 -960
+ 17850 5250 31       		.uleb128 0x31
+ 17851 5251 380E0000 		.long	0xe38
+ 17852 5255 03       		.byte	0x3
+ 17853 5256 91       		.byte	0x91
+ 17854 5257 D078     		.sleb128 -944
+
GAS LISTING /tmp/ccPaCTqg.s 			page 477
+
+
+ 17855 5259 00       		.byte	0x0
+ 17856 525a 00       		.byte	0x0
+ 17857 525b 00       		.byte	0x0
+ 17858 525c 00       		.byte	0x0
+ 17859 525d 34       		.uleb128 0x34
+ 17860 525e BA0D0000 		.long	0xdba
+ 17861 5262 00000000 		.quad	.LBB1368
+ 17861      00000000 
+ 17862 526a 00000000 		.quad	.LBE1368
+ 17862      00000000 
+ 17863 5272 03       		.byte	0x3
+ 17864 5273 2106     		.value	0x621
+ 17865 5275 31       		.uleb128 0x31
+ 17866 5276 CC0D0000 		.long	0xdcc
+ 17867 527a 03       		.byte	0x3
+ 17868 527b 91       		.byte	0x91
+ 17869 527c E078     		.sleb128 -928
+ 17870 527e 32       		.uleb128 0x32
+ 17871 527f 00000000 		.quad	.LBB1369
+ 17871      00000000 
+ 17872 5287 00000000 		.quad	.LBE1369
+ 17872      00000000 
+ 17873 528f 33       		.uleb128 0x33
+ 17874 5290 D80D0000 		.long	0xdd8
+ 17875 5294 09       		.byte	0x9
+ 17876 5295 03       		.byte	0x3
+ 17877 5296 00000000 		.quad	mask.8002
+ 17877      00000000 
+ 17878 529e 34       		.uleb128 0x34
+ 17879 529f FB0D0000 		.long	0xdfb
+ 17880 52a3 00000000 		.quad	.LBB1370
+ 17880      00000000 
+ 17881 52ab 00000000 		.quad	.LBE1370
+ 17881      00000000 
+ 17882 52b3 03       		.byte	0x3
+ 17883 52b4 FE04     		.value	0x4fe
+ 17884 52b6 31       		.uleb128 0x31
+ 17885 52b7 190E0000 		.long	0xe19
+ 17886 52bb 03       		.byte	0x3
+ 17887 52bc 91       		.byte	0x91
+ 17888 52bd F078     		.sleb128 -912
+ 17889 52bf 31       		.uleb128 0x31
+ 17890 52c0 0D0E0000 		.long	0xe0d
+ 17891 52c4 03       		.byte	0x3
+ 17892 52c5 91       		.byte	0x91
+ 17893 52c6 8079     		.sleb128 -896
+ 17894 52c8 34       		.uleb128 0x34
+ 17895 52c9 260E0000 		.long	0xe26
+ 17896 52cd 00000000 		.quad	.LBB1372
+ 17896      00000000 
+ 17897 52d5 00000000 		.quad	.LBE1372
+ 17897      00000000 
+ 17898 52dd 03       		.byte	0x3
+ 17899 52de 7501     		.value	0x175
+ 17900 52e0 31       		.uleb128 0x31
+ 17901 52e1 440E0000 		.long	0xe44
+ 17902 52e5 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 478
+
+
+ 17903 52e6 91       		.byte	0x91
+ 17904 52e7 9079     		.sleb128 -880
+ 17905 52e9 31       		.uleb128 0x31
+ 17906 52ea 380E0000 		.long	0xe38
+ 17907 52ee 03       		.byte	0x3
+ 17908 52ef 91       		.byte	0x91
+ 17909 52f0 A079     		.sleb128 -864
+ 17910 52f2 00       		.byte	0x0
+ 17911 52f3 00       		.byte	0x0
+ 17912 52f4 00       		.byte	0x0
+ 17913 52f5 00       		.byte	0x0
+ 17914 52f6 00       		.byte	0x0
+ 17915 52f7 00       		.byte	0x0
+ 17916 52f8 30       		.uleb128 0x30
+ 17917 52f9 8F0D0000 		.long	0xd8f
+ 17918 52fd 00000000 		.quad	.LBB1374
+ 17918      00000000 
+ 17919 5305 00000000 		.quad	.LBE1374
+ 17919      00000000 
+ 17920 530d 03       		.byte	0x3
+ 17921 530e 5007     		.value	0x750
+ 17922 5310 0C550000 		.long	0x550c
+ 17923 5314 31       		.uleb128 0x31
+ 17924 5315 A10D0000 		.long	0xda1
+ 17925 5319 03       		.byte	0x3
+ 17926 531a 91       		.byte	0x91
+ 17927 531b B079     		.sleb128 -848
+ 17928 531d 32       		.uleb128 0x32
+ 17929 531e 00000000 		.quad	.LBB1375
+ 17929      00000000 
+ 17930 5326 00000000 		.quad	.LBE1375
+ 17930      00000000 
+ 17931 532e 33       		.uleb128 0x33
+ 17932 532f AD0D0000 		.long	0xdad
+ 17933 5333 03       		.byte	0x3
+ 17934 5334 76       		.byte	0x76
+ 17935 5335 9052     		.sleb128 -5872
+ 17936 5337 30       		.uleb128 0x30
+ 17937 5338 BA0D0000 		.long	0xdba
+ 17938 533c 00000000 		.quad	.LBB1376
+ 17938      00000000 
+ 17939 5344 00000000 		.quad	.LBE1376
+ 17939      00000000 
+ 17940 534c 03       		.byte	0x3
+ 17941 534d 1F06     		.value	0x61f
+ 17942 534f D4530000 		.long	0x53d4
+ 17943 5353 31       		.uleb128 0x31
+ 17944 5354 CC0D0000 		.long	0xdcc
+ 17945 5358 03       		.byte	0x3
+ 17946 5359 91       		.byte	0x91
+ 17947 535a C079     		.sleb128 -832
+ 17948 535c 32       		.uleb128 0x32
+ 17949 535d 00000000 		.quad	.LBB1377
+ 17949      00000000 
+ 17950 5365 00000000 		.quad	.LBE1377
+ 17950      00000000 
+ 17951 536d 33       		.uleb128 0x33
+
GAS LISTING /tmp/ccPaCTqg.s 			page 479
+
+
+ 17952 536e D80D0000 		.long	0xdd8
+ 17953 5372 09       		.byte	0x9
+ 17954 5373 03       		.byte	0x3
+ 17955 5374 00000000 		.quad	mask.8002
+ 17955      00000000 
+ 17956 537c 34       		.uleb128 0x34
+ 17957 537d FB0D0000 		.long	0xdfb
+ 17958 5381 00000000 		.quad	.LBB1378
+ 17958      00000000 
+ 17959 5389 00000000 		.quad	.LBE1378
+ 17959      00000000 
+ 17960 5391 03       		.byte	0x3
+ 17961 5392 FE04     		.value	0x4fe
+ 17962 5394 31       		.uleb128 0x31
+ 17963 5395 190E0000 		.long	0xe19
+ 17964 5399 03       		.byte	0x3
+ 17965 539a 91       		.byte	0x91
+ 17966 539b D079     		.sleb128 -816
+ 17967 539d 31       		.uleb128 0x31
+ 17968 539e 0D0E0000 		.long	0xe0d
+ 17969 53a2 03       		.byte	0x3
+ 17970 53a3 91       		.byte	0x91
+ 17971 53a4 E079     		.sleb128 -800
+ 17972 53a6 34       		.uleb128 0x34
+ 17973 53a7 260E0000 		.long	0xe26
+ 17974 53ab 00000000 		.quad	.LBB1380
+ 17974      00000000 
+ 17975 53b3 00000000 		.quad	.LBE1380
+ 17975      00000000 
+ 17976 53bb 03       		.byte	0x3
+ 17977 53bc 7501     		.value	0x175
+ 17978 53be 31       		.uleb128 0x31
+ 17979 53bf 440E0000 		.long	0xe44
+ 17980 53c3 03       		.byte	0x3
+ 17981 53c4 91       		.byte	0x91
+ 17982 53c5 F079     		.sleb128 -784
+ 17983 53c7 31       		.uleb128 0x31
+ 17984 53c8 380E0000 		.long	0xe38
+ 17985 53cc 03       		.byte	0x3
+ 17986 53cd 91       		.byte	0x91
+ 17987 53ce 807A     		.sleb128 -768
+ 17988 53d0 00       		.byte	0x0
+ 17989 53d1 00       		.byte	0x0
+ 17990 53d2 00       		.byte	0x0
+ 17991 53d3 00       		.byte	0x0
+ 17992 53d4 30       		.uleb128 0x30
+ 17993 53d5 BA0D0000 		.long	0xdba
+ 17994 53d9 00000000 		.quad	.LBB1382
+ 17994      00000000 
+ 17995 53e1 00000000 		.quad	.LBE1382
+ 17995      00000000 
+ 17996 53e9 03       		.byte	0x3
+ 17997 53ea 2006     		.value	0x620
+ 17998 53ec 71540000 		.long	0x5471
+ 17999 53f0 31       		.uleb128 0x31
+ 18000 53f1 CC0D0000 		.long	0xdcc
+ 18001 53f5 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 480
+
+
+ 18002 53f6 91       		.byte	0x91
+ 18003 53f7 907A     		.sleb128 -752
+ 18004 53f9 32       		.uleb128 0x32
+ 18005 53fa 00000000 		.quad	.LBB1383
+ 18005      00000000 
+ 18006 5402 00000000 		.quad	.LBE1383
+ 18006      00000000 
+ 18007 540a 33       		.uleb128 0x33
+ 18008 540b D80D0000 		.long	0xdd8
+ 18009 540f 09       		.byte	0x9
+ 18010 5410 03       		.byte	0x3
+ 18011 5411 00000000 		.quad	mask.8002
+ 18011      00000000 
+ 18012 5419 34       		.uleb128 0x34
+ 18013 541a FB0D0000 		.long	0xdfb
+ 18014 541e 00000000 		.quad	.LBB1384
+ 18014      00000000 
+ 18015 5426 00000000 		.quad	.LBE1384
+ 18015      00000000 
+ 18016 542e 03       		.byte	0x3
+ 18017 542f FE04     		.value	0x4fe
+ 18018 5431 31       		.uleb128 0x31
+ 18019 5432 190E0000 		.long	0xe19
+ 18020 5436 03       		.byte	0x3
+ 18021 5437 91       		.byte	0x91
+ 18022 5438 A07A     		.sleb128 -736
+ 18023 543a 31       		.uleb128 0x31
+ 18024 543b 0D0E0000 		.long	0xe0d
+ 18025 543f 03       		.byte	0x3
+ 18026 5440 91       		.byte	0x91
+ 18027 5441 B07A     		.sleb128 -720
+ 18028 5443 34       		.uleb128 0x34
+ 18029 5444 260E0000 		.long	0xe26
+ 18030 5448 00000000 		.quad	.LBB1386
+ 18030      00000000 
+ 18031 5450 00000000 		.quad	.LBE1386
+ 18031      00000000 
+ 18032 5458 03       		.byte	0x3
+ 18033 5459 7501     		.value	0x175
+ 18034 545b 31       		.uleb128 0x31
+ 18035 545c 440E0000 		.long	0xe44
+ 18036 5460 03       		.byte	0x3
+ 18037 5461 91       		.byte	0x91
+ 18038 5462 C07A     		.sleb128 -704
+ 18039 5464 31       		.uleb128 0x31
+ 18040 5465 380E0000 		.long	0xe38
+ 18041 5469 03       		.byte	0x3
+ 18042 546a 91       		.byte	0x91
+ 18043 546b D07A     		.sleb128 -688
+ 18044 546d 00       		.byte	0x0
+ 18045 546e 00       		.byte	0x0
+ 18046 546f 00       		.byte	0x0
+ 18047 5470 00       		.byte	0x0
+ 18048 5471 34       		.uleb128 0x34
+ 18049 5472 BA0D0000 		.long	0xdba
+ 18050 5476 00000000 		.quad	.LBB1388
+ 18050      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 481
+
+
+ 18051 547e 00000000 		.quad	.LBE1388
+ 18051      00000000 
+ 18052 5486 03       		.byte	0x3
+ 18053 5487 2106     		.value	0x621
+ 18054 5489 31       		.uleb128 0x31
+ 18055 548a CC0D0000 		.long	0xdcc
+ 18056 548e 03       		.byte	0x3
+ 18057 548f 91       		.byte	0x91
+ 18058 5490 E07A     		.sleb128 -672
+ 18059 5492 32       		.uleb128 0x32
+ 18060 5493 00000000 		.quad	.LBB1389
+ 18060      00000000 
+ 18061 549b 00000000 		.quad	.LBE1389
+ 18061      00000000 
+ 18062 54a3 33       		.uleb128 0x33
+ 18063 54a4 D80D0000 		.long	0xdd8
+ 18064 54a8 09       		.byte	0x9
+ 18065 54a9 03       		.byte	0x3
+ 18066 54aa 00000000 		.quad	mask.8002
+ 18066      00000000 
+ 18067 54b2 34       		.uleb128 0x34
+ 18068 54b3 FB0D0000 		.long	0xdfb
+ 18069 54b7 00000000 		.quad	.LBB1390
+ 18069      00000000 
+ 18070 54bf 00000000 		.quad	.LBE1390
+ 18070      00000000 
+ 18071 54c7 03       		.byte	0x3
+ 18072 54c8 FE04     		.value	0x4fe
+ 18073 54ca 31       		.uleb128 0x31
+ 18074 54cb 190E0000 		.long	0xe19
+ 18075 54cf 03       		.byte	0x3
+ 18076 54d0 91       		.byte	0x91
+ 18077 54d1 F07A     		.sleb128 -656
+ 18078 54d3 31       		.uleb128 0x31
+ 18079 54d4 0D0E0000 		.long	0xe0d
+ 18080 54d8 03       		.byte	0x3
+ 18081 54d9 91       		.byte	0x91
+ 18082 54da 807B     		.sleb128 -640
+ 18083 54dc 34       		.uleb128 0x34
+ 18084 54dd 260E0000 		.long	0xe26
+ 18085 54e1 00000000 		.quad	.LBB1392
+ 18085      00000000 
+ 18086 54e9 00000000 		.quad	.LBE1392
+ 18086      00000000 
+ 18087 54f1 03       		.byte	0x3
+ 18088 54f2 7501     		.value	0x175
+ 18089 54f4 31       		.uleb128 0x31
+ 18090 54f5 440E0000 		.long	0xe44
+ 18091 54f9 03       		.byte	0x3
+ 18092 54fa 91       		.byte	0x91
+ 18093 54fb 907B     		.sleb128 -624
+ 18094 54fd 31       		.uleb128 0x31
+ 18095 54fe 380E0000 		.long	0xe38
+ 18096 5502 03       		.byte	0x3
+ 18097 5503 91       		.byte	0x91
+ 18098 5504 A07B     		.sleb128 -608
+ 18099 5506 00       		.byte	0x0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 482
+
+
+ 18100 5507 00       		.byte	0x0
+ 18101 5508 00       		.byte	0x0
+ 18102 5509 00       		.byte	0x0
+ 18103 550a 00       		.byte	0x0
+ 18104 550b 00       		.byte	0x0
+ 18105 550c 30       		.uleb128 0x30
+ 18106 550d 450D0000 		.long	0xd45
+ 18107 5511 00000000 		.quad	.LBB1394
+ 18107      00000000 
+ 18108 5519 00000000 		.quad	.LBE1394
+ 18108      00000000 
+ 18109 5521 03       		.byte	0x3
+ 18110 5522 5207     		.value	0x752
+ 18111 5524 5D550000 		.long	0x555d
+ 18112 5528 31       		.uleb128 0x31
+ 18113 5529 570D0000 		.long	0xd57
+ 18114 552d 03       		.byte	0x3
+ 18115 552e 91       		.byte	0x91
+ 18116 552f B07B     		.sleb128 -592
+ 18117 5531 34       		.uleb128 0x34
+ 18118 5532 640D0000 		.long	0xd64
+ 18119 5536 00000000 		.quad	.LBB1396
+ 18119      00000000 
+ 18120 553e 00000000 		.quad	.LBE1396
+ 18120      00000000 
+ 18121 5546 03       		.byte	0x3
+ 18122 5547 4905     		.value	0x549
+ 18123 5549 31       		.uleb128 0x31
+ 18124 554a 820D0000 		.long	0xd82
+ 18125 554e 03       		.byte	0x3
+ 18126 554f 91       		.byte	0x91
+ 18127 5550 CC7B     		.sleb128 -564
+ 18128 5552 31       		.uleb128 0x31
+ 18129 5553 760D0000 		.long	0xd76
+ 18130 5557 03       		.byte	0x3
+ 18131 5558 91       		.byte	0x91
+ 18132 5559 D07B     		.sleb128 -560
+ 18133 555b 00       		.byte	0x0
+ 18134 555c 00       		.byte	0x0
+ 18135 555d 30       		.uleb128 0x30
+ 18136 555e 142C0000 		.long	0x2c14
+ 18137 5562 00000000 		.quad	.LBB1398
+ 18137      00000000 
+ 18138 556a 00000000 		.quad	.LBE1398
+ 18138      00000000 
+ 18139 5572 03       		.byte	0x3
+ 18140 5573 5407     		.value	0x754
+ 18141 5575 C0550000 		.long	0x55c0
+ 18142 5579 31       		.uleb128 0x31
+ 18143 557a 302C0000 		.long	0x2c30
+ 18144 557e 03       		.byte	0x3
+ 18145 557f 91       		.byte	0x91
+ 18146 5580 E07B     		.sleb128 -544
+ 18147 5582 31       		.uleb128 0x31
+ 18148 5583 262C0000 		.long	0x2c26
+ 18149 5587 03       		.byte	0x3
+ 18150 5588 91       		.byte	0x91
+
GAS LISTING /tmp/ccPaCTqg.s 			page 483
+
+
+ 18151 5589 F07B     		.sleb128 -528
+ 18152 558b 34       		.uleb128 0x34
+ 18153 558c 3B2C0000 		.long	0x2c3b
+ 18154 5590 00000000 		.quad	.LBB1400
+ 18154      00000000 
+ 18155 5598 00000000 		.quad	.LBE1400
+ 18155      00000000 
+ 18156 55a0 03       		.byte	0x3
+ 18157 55a1 BA05     		.value	0x5ba
+ 18158 55a3 31       		.uleb128 0x31
+ 18159 55a4 652C0000 		.long	0x2c65
+ 18160 55a8 03       		.byte	0x3
+ 18161 55a9 91       		.byte	0x91
+ 18162 55aa 8C7C     		.sleb128 -500
+ 18163 55ac 31       		.uleb128 0x31
+ 18164 55ad 592C0000 		.long	0x2c59
+ 18165 55b1 03       		.byte	0x3
+ 18166 55b2 91       		.byte	0x91
+ 18167 55b3 907C     		.sleb128 -496
+ 18168 55b5 31       		.uleb128 0x31
+ 18169 55b6 4D2C0000 		.long	0x2c4d
+ 18170 55ba 03       		.byte	0x3
+ 18171 55bb 91       		.byte	0x91
+ 18172 55bc A07C     		.sleb128 -480
+ 18173 55be 00       		.byte	0x0
+ 18174 55bf 00       		.byte	0x0
+ 18175 55c0 30       		.uleb128 0x30
+ 18176 55c1 722C0000 		.long	0x2c72
+ 18177 55c5 00000000 		.quad	.LBB1402
+ 18177      00000000 
+ 18178 55cd 00000000 		.quad	.LBE1402
+ 18178      00000000 
+ 18179 55d5 03       		.byte	0x3
+ 18180 55d6 5607     		.value	0x756
+ 18181 55d8 23560000 		.long	0x5623
+ 18182 55dc 31       		.uleb128 0x31
+ 18183 55dd 8E2C0000 		.long	0x2c8e
+ 18184 55e1 03       		.byte	0x3
+ 18185 55e2 91       		.byte	0x91
+ 18186 55e3 B07C     		.sleb128 -464
+ 18187 55e5 31       		.uleb128 0x31
+ 18188 55e6 842C0000 		.long	0x2c84
+ 18189 55ea 03       		.byte	0x3
+ 18190 55eb 91       		.byte	0x91
+ 18191 55ec C07C     		.sleb128 -448
+ 18192 55ee 34       		.uleb128 0x34
+ 18193 55ef 3B2C0000 		.long	0x2c3b
+ 18194 55f3 00000000 		.quad	.LBB1404
+ 18194      00000000 
+ 18195 55fb 00000000 		.quad	.LBE1404
+ 18195      00000000 
+ 18196 5603 03       		.byte	0x3
+ 18197 5604 DA05     		.value	0x5da
+ 18198 5606 31       		.uleb128 0x31
+ 18199 5607 652C0000 		.long	0x2c65
+ 18200 560b 03       		.byte	0x3
+ 18201 560c 91       		.byte	0x91
+
GAS LISTING /tmp/ccPaCTqg.s 			page 484
+
+
+ 18202 560d DC7C     		.sleb128 -420
+ 18203 560f 31       		.uleb128 0x31
+ 18204 5610 592C0000 		.long	0x2c59
+ 18205 5614 03       		.byte	0x3
+ 18206 5615 91       		.byte	0x91
+ 18207 5616 E07C     		.sleb128 -416
+ 18208 5618 31       		.uleb128 0x31
+ 18209 5619 4D2C0000 		.long	0x2c4d
+ 18210 561d 03       		.byte	0x3
+ 18211 561e 91       		.byte	0x91
+ 18212 561f F07C     		.sleb128 -400
+ 18213 5621 00       		.byte	0x0
+ 18214 5622 00       		.byte	0x0
+ 18215 5623 30       		.uleb128 0x30
+ 18216 5624 8F0D0000 		.long	0xd8f
+ 18217 5628 00000000 		.quad	.LBB1406
+ 18217      00000000 
+ 18218 5630 00000000 		.quad	.LBE1406
+ 18218      00000000 
+ 18219 5638 03       		.byte	0x3
+ 18220 5639 5A07     		.value	0x75a
+ 18221 563b 37580000 		.long	0x5837
+ 18222 563f 31       		.uleb128 0x31
+ 18223 5640 A10D0000 		.long	0xda1
+ 18224 5644 03       		.byte	0x3
+ 18225 5645 91       		.byte	0x91
+ 18226 5646 807D     		.sleb128 -384
+ 18227 5648 32       		.uleb128 0x32
+ 18228 5649 00000000 		.quad	.LBB1407
+ 18228      00000000 
+ 18229 5651 00000000 		.quad	.LBE1407
+ 18229      00000000 
+ 18230 5659 33       		.uleb128 0x33
+ 18231 565a AD0D0000 		.long	0xdad
+ 18232 565e 03       		.byte	0x3
+ 18233 565f 76       		.byte	0x76
+ 18234 5660 A052     		.sleb128 -5856
+ 18235 5662 30       		.uleb128 0x30
+ 18236 5663 BA0D0000 		.long	0xdba
+ 18237 5667 00000000 		.quad	.LBB1408
+ 18237      00000000 
+ 18238 566f 00000000 		.quad	.LBE1408
+ 18238      00000000 
+ 18239 5677 03       		.byte	0x3
+ 18240 5678 1F06     		.value	0x61f
+ 18241 567a FF560000 		.long	0x56ff
+ 18242 567e 31       		.uleb128 0x31
+ 18243 567f CC0D0000 		.long	0xdcc
+ 18244 5683 03       		.byte	0x3
+ 18245 5684 91       		.byte	0x91
+ 18246 5685 907D     		.sleb128 -368
+ 18247 5687 32       		.uleb128 0x32
+ 18248 5688 00000000 		.quad	.LBB1409
+ 18248      00000000 
+ 18249 5690 00000000 		.quad	.LBE1409
+ 18249      00000000 
+ 18250 5698 33       		.uleb128 0x33
+
GAS LISTING /tmp/ccPaCTqg.s 			page 485
+
+
+ 18251 5699 D80D0000 		.long	0xdd8
+ 18252 569d 09       		.byte	0x9
+ 18253 569e 03       		.byte	0x3
+ 18254 569f 00000000 		.quad	mask.8002
+ 18254      00000000 
+ 18255 56a7 34       		.uleb128 0x34
+ 18256 56a8 FB0D0000 		.long	0xdfb
+ 18257 56ac 00000000 		.quad	.LBB1410
+ 18257      00000000 
+ 18258 56b4 00000000 		.quad	.LBE1410
+ 18258      00000000 
+ 18259 56bc 03       		.byte	0x3
+ 18260 56bd FE04     		.value	0x4fe
+ 18261 56bf 31       		.uleb128 0x31
+ 18262 56c0 190E0000 		.long	0xe19
+ 18263 56c4 03       		.byte	0x3
+ 18264 56c5 91       		.byte	0x91
+ 18265 56c6 A07D     		.sleb128 -352
+ 18266 56c8 31       		.uleb128 0x31
+ 18267 56c9 0D0E0000 		.long	0xe0d
+ 18268 56cd 03       		.byte	0x3
+ 18269 56ce 91       		.byte	0x91
+ 18270 56cf B07D     		.sleb128 -336
+ 18271 56d1 34       		.uleb128 0x34
+ 18272 56d2 260E0000 		.long	0xe26
+ 18273 56d6 00000000 		.quad	.LBB1412
+ 18273      00000000 
+ 18274 56de 00000000 		.quad	.LBE1412
+ 18274      00000000 
+ 18275 56e6 03       		.byte	0x3
+ 18276 56e7 7501     		.value	0x175
+ 18277 56e9 31       		.uleb128 0x31
+ 18278 56ea 440E0000 		.long	0xe44
+ 18279 56ee 03       		.byte	0x3
+ 18280 56ef 91       		.byte	0x91
+ 18281 56f0 C07D     		.sleb128 -320
+ 18282 56f2 31       		.uleb128 0x31
+ 18283 56f3 380E0000 		.long	0xe38
+ 18284 56f7 03       		.byte	0x3
+ 18285 56f8 91       		.byte	0x91
+ 18286 56f9 D07D     		.sleb128 -304
+ 18287 56fb 00       		.byte	0x0
+ 18288 56fc 00       		.byte	0x0
+ 18289 56fd 00       		.byte	0x0
+ 18290 56fe 00       		.byte	0x0
+ 18291 56ff 30       		.uleb128 0x30
+ 18292 5700 BA0D0000 		.long	0xdba
+ 18293 5704 00000000 		.quad	.LBB1414
+ 18293      00000000 
+ 18294 570c 00000000 		.quad	.LBE1414
+ 18294      00000000 
+ 18295 5714 03       		.byte	0x3
+ 18296 5715 2006     		.value	0x620
+ 18297 5717 9C570000 		.long	0x579c
+ 18298 571b 31       		.uleb128 0x31
+ 18299 571c CC0D0000 		.long	0xdcc
+ 18300 5720 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 486
+
+
+ 18301 5721 91       		.byte	0x91
+ 18302 5722 E07D     		.sleb128 -288
+ 18303 5724 32       		.uleb128 0x32
+ 18304 5725 00000000 		.quad	.LBB1415
+ 18304      00000000 
+ 18305 572d 00000000 		.quad	.LBE1415
+ 18305      00000000 
+ 18306 5735 33       		.uleb128 0x33
+ 18307 5736 D80D0000 		.long	0xdd8
+ 18308 573a 09       		.byte	0x9
+ 18309 573b 03       		.byte	0x3
+ 18310 573c 00000000 		.quad	mask.8002
+ 18310      00000000 
+ 18311 5744 34       		.uleb128 0x34
+ 18312 5745 FB0D0000 		.long	0xdfb
+ 18313 5749 00000000 		.quad	.LBB1416
+ 18313      00000000 
+ 18314 5751 00000000 		.quad	.LBE1416
+ 18314      00000000 
+ 18315 5759 03       		.byte	0x3
+ 18316 575a FE04     		.value	0x4fe
+ 18317 575c 31       		.uleb128 0x31
+ 18318 575d 190E0000 		.long	0xe19
+ 18319 5761 03       		.byte	0x3
+ 18320 5762 91       		.byte	0x91
+ 18321 5763 F07D     		.sleb128 -272
+ 18322 5765 31       		.uleb128 0x31
+ 18323 5766 0D0E0000 		.long	0xe0d
+ 18324 576a 03       		.byte	0x3
+ 18325 576b 91       		.byte	0x91
+ 18326 576c 807E     		.sleb128 -256
+ 18327 576e 34       		.uleb128 0x34
+ 18328 576f 260E0000 		.long	0xe26
+ 18329 5773 00000000 		.quad	.LBB1418
+ 18329      00000000 
+ 18330 577b 00000000 		.quad	.LBE1418
+ 18330      00000000 
+ 18331 5783 03       		.byte	0x3
+ 18332 5784 7501     		.value	0x175
+ 18333 5786 31       		.uleb128 0x31
+ 18334 5787 440E0000 		.long	0xe44
+ 18335 578b 03       		.byte	0x3
+ 18336 578c 91       		.byte	0x91
+ 18337 578d 907E     		.sleb128 -240
+ 18338 578f 31       		.uleb128 0x31
+ 18339 5790 380E0000 		.long	0xe38
+ 18340 5794 03       		.byte	0x3
+ 18341 5795 91       		.byte	0x91
+ 18342 5796 A07E     		.sleb128 -224
+ 18343 5798 00       		.byte	0x0
+ 18344 5799 00       		.byte	0x0
+ 18345 579a 00       		.byte	0x0
+ 18346 579b 00       		.byte	0x0
+ 18347 579c 34       		.uleb128 0x34
+ 18348 579d BA0D0000 		.long	0xdba
+ 18349 57a1 00000000 		.quad	.LBB1420
+ 18349      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 487
+
+
+ 18350 57a9 00000000 		.quad	.LBE1420
+ 18350      00000000 
+ 18351 57b1 03       		.byte	0x3
+ 18352 57b2 2106     		.value	0x621
+ 18353 57b4 31       		.uleb128 0x31
+ 18354 57b5 CC0D0000 		.long	0xdcc
+ 18355 57b9 03       		.byte	0x3
+ 18356 57ba 91       		.byte	0x91
+ 18357 57bb B07E     		.sleb128 -208
+ 18358 57bd 32       		.uleb128 0x32
+ 18359 57be 00000000 		.quad	.LBB1421
+ 18359      00000000 
+ 18360 57c6 00000000 		.quad	.LBE1421
+ 18360      00000000 
+ 18361 57ce 33       		.uleb128 0x33
+ 18362 57cf D80D0000 		.long	0xdd8
+ 18363 57d3 09       		.byte	0x9
+ 18364 57d4 03       		.byte	0x3
+ 18365 57d5 00000000 		.quad	mask.8002
+ 18365      00000000 
+ 18366 57dd 34       		.uleb128 0x34
+ 18367 57de FB0D0000 		.long	0xdfb
+ 18368 57e2 00000000 		.quad	.LBB1422
+ 18368      00000000 
+ 18369 57ea 00000000 		.quad	.LBE1422
+ 18369      00000000 
+ 18370 57f2 03       		.byte	0x3
+ 18371 57f3 FE04     		.value	0x4fe
+ 18372 57f5 31       		.uleb128 0x31
+ 18373 57f6 190E0000 		.long	0xe19
+ 18374 57fa 03       		.byte	0x3
+ 18375 57fb 91       		.byte	0x91
+ 18376 57fc C07E     		.sleb128 -192
+ 18377 57fe 31       		.uleb128 0x31
+ 18378 57ff 0D0E0000 		.long	0xe0d
+ 18379 5803 03       		.byte	0x3
+ 18380 5804 91       		.byte	0x91
+ 18381 5805 D07E     		.sleb128 -176
+ 18382 5807 34       		.uleb128 0x34
+ 18383 5808 260E0000 		.long	0xe26
+ 18384 580c 00000000 		.quad	.LBB1424
+ 18384      00000000 
+ 18385 5814 00000000 		.quad	.LBE1424
+ 18385      00000000 
+ 18386 581c 03       		.byte	0x3
+ 18387 581d 7501     		.value	0x175
+ 18388 581f 31       		.uleb128 0x31
+ 18389 5820 440E0000 		.long	0xe44
+ 18390 5824 03       		.byte	0x3
+ 18391 5825 91       		.byte	0x91
+ 18392 5826 E07E     		.sleb128 -160
+ 18393 5828 31       		.uleb128 0x31
+ 18394 5829 380E0000 		.long	0xe38
+ 18395 582d 03       		.byte	0x3
+ 18396 582e 91       		.byte	0x91
+ 18397 582f F07E     		.sleb128 -144
+ 18398 5831 00       		.byte	0x0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 488
+
+
+ 18399 5832 00       		.byte	0x0
+ 18400 5833 00       		.byte	0x0
+ 18401 5834 00       		.byte	0x0
+ 18402 5835 00       		.byte	0x0
+ 18403 5836 00       		.byte	0x0
+ 18404 5837 34       		.uleb128 0x34
+ 18405 5838 E30C0000 		.long	0xce3
+ 18406 583c 00000000 		.quad	.LBB1426
+ 18406      00000000 
+ 18407 5844 00000000 		.quad	.LBE1426
+ 18407      00000000 
+ 18408 584c 03       		.byte	0x3
+ 18409 584d 5B07     		.value	0x75b
+ 18410 584f 31       		.uleb128 0x31
+ 18411 5850 010D0000 		.long	0xd01
+ 18412 5854 03       		.byte	0x3
+ 18413 5855 91       		.byte	0x91
+ 18414 5856 8C7F     		.sleb128 -116
+ 18415 5858 31       		.uleb128 0x31
+ 18416 5859 F50C0000 		.long	0xcf5
+ 18417 585d 03       		.byte	0x3
+ 18418 585e 91       		.byte	0x91
+ 18419 585f 907F     		.sleb128 -112
+ 18420 5861 32       		.uleb128 0x32
+ 18421 5862 00000000 		.quad	.LBB1427
+ 18421      00000000 
+ 18422 586a 00000000 		.quad	.LBE1427
+ 18422      00000000 
+ 18423 5872 33       		.uleb128 0x33
+ 18424 5873 0D0D0000 		.long	0xd0d
+ 18425 5877 03       		.byte	0x3
+ 18426 5878 76       		.byte	0x76
+ 18427 5879 B052     		.sleb128 -5840
+ 18428 587b 30       		.uleb128 0x30
+ 18429 587c 1A0D0000 		.long	0xd1a
+ 18430 5880 00000000 		.quad	.LBB1428
+ 18430      00000000 
+ 18431 5888 00000000 		.quad	.LBE1428
+ 18431      00000000 
+ 18432 5890 03       		.byte	0x3
+ 18433 5891 8A06     		.value	0x68a
+ 18434 5893 AA580000 		.long	0x58aa
+ 18435 5897 31       		.uleb128 0x31
+ 18436 5898 380D0000 		.long	0xd38
+ 18437 589c 03       		.byte	0x3
+ 18438 589d 91       		.byte	0x91
+ 18439 589e AC7F     		.sleb128 -84
+ 18440 58a0 31       		.uleb128 0x31
+ 18441 58a1 2C0D0000 		.long	0xd2c
+ 18442 58a5 03       		.byte	0x3
+ 18443 58a6 91       		.byte	0x91
+ 18444 58a7 B07F     		.sleb128 -80
+ 18445 58a9 00       		.byte	0x0
+ 18446 58aa 34       		.uleb128 0x34
+ 18447 58ab 450D0000 		.long	0xd45
+ 18448 58af 00000000 		.quad	.LBB1430
+ 18448      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 489
+
+
+ 18449 58b7 00000000 		.quad	.LBE1430
+ 18449      00000000 
+ 18450 58bf 03       		.byte	0x3
+ 18451 58c0 8B06     		.value	0x68b
+ 18452 58c2 31       		.uleb128 0x31
+ 18453 58c3 570D0000 		.long	0xd57
+ 18454 58c7 02       		.byte	0x2
+ 18455 58c8 91       		.byte	0x91
+ 18456 58c9 40       		.sleb128 -64
+ 18457 58ca 34       		.uleb128 0x34
+ 18458 58cb 640D0000 		.long	0xd64
+ 18459 58cf 00000000 		.quad	.LBB1432
+ 18459      00000000 
+ 18460 58d7 00000000 		.quad	.LBE1432
+ 18460      00000000 
+ 18461 58df 03       		.byte	0x3
+ 18462 58e0 4905     		.value	0x549
+ 18463 58e2 31       		.uleb128 0x31
+ 18464 58e3 820D0000 		.long	0xd82
+ 18465 58e7 02       		.byte	0x2
+ 18466 58e8 91       		.byte	0x91
+ 18467 58e9 5C       		.sleb128 -36
+ 18468 58ea 31       		.uleb128 0x31
+ 18469 58eb 760D0000 		.long	0xd76
+ 18470 58ef 02       		.byte	0x2
+ 18471 58f0 91       		.byte	0x91
+ 18472 58f1 60       		.sleb128 -32
+ 18473 58f2 00       		.byte	0x0
+ 18474 58f3 00       		.byte	0x0
+ 18475 58f4 00       		.byte	0x0
+ 18476 58f5 00       		.byte	0x0
+ 18477 58f6 00       		.byte	0x0
+ 18478 58f7 24       		.uleb128 0x24
+ 18479 58f8 00000000 		.long	.LASF348
+ 18480 58fc 03       		.byte	0x3
+ 18481 58fd AE       		.byte	0xae
+ 18482 58fe 01       		.byte	0x1
+ 18483 58ff C9010000 		.long	0x1c9
+ 18484 5903 03       		.byte	0x3
+ 18485 5904 1D590000 		.long	0x591d
+ 18486 5908 25       		.uleb128 0x25
+ 18487 5909 763100   		.string	"v1"
+ 18488 590c 03       		.byte	0x3
+ 18489 590d AE       		.byte	0xae
+ 18490 590e C9010000 		.long	0x1c9
+ 18491 5912 25       		.uleb128 0x25
+ 18492 5913 763200   		.string	"v2"
+ 18493 5916 03       		.byte	0x3
+ 18494 5917 AE       		.byte	0xae
+ 18495 5918 C9010000 		.long	0x1c9
+ 18496 591c 00       		.byte	0x0
+ 18497 591d 27       		.uleb128 0x27
+ 18498 591e 00000000 		.long	.LASF349
+ 18499 5922 03       		.byte	0x3
+ 18500 5923 6E06     		.value	0x66e
+ 18501 5925 01       		.byte	0x1
+ 18502 5926 C9010000 		.long	0x1c9
+
GAS LISTING /tmp/ccPaCTqg.s 			page 490
+
+
+ 18503 592a 03       		.byte	0x3
+ 18504 592b 48590000 		.long	0x5948
+ 18505 592f 28       		.uleb128 0x28
+ 18506 5930 00000000 		.long	.LASF63
+ 18507 5934 03       		.byte	0x3
+ 18508 5935 6E06     		.value	0x66e
+ 18509 5937 C9010000 		.long	0x1c9
+ 18510 593b 29       		.uleb128 0x29
+ 18511 593c 746D7000 		.string	"tmp"
+ 18512 5940 03       		.byte	0x3
+ 18513 5941 7106     		.value	0x671
+ 18514 5943 C9010000 		.long	0x1c9
+ 18515 5947 00       		.byte	0x0
+ 18516 5948 27       		.uleb128 0x27
+ 18517 5949 00000000 		.long	.LASF350
+ 18518 594d 03       		.byte	0x3
+ 18519 594e 6205     		.value	0x562
+ 18520 5950 01       		.byte	0x1
+ 18521 5951 C9010000 		.long	0x1c9
+ 18522 5955 03       		.byte	0x3
+ 18523 5956 67590000 		.long	0x5967
+ 18524 595a 28       		.uleb128 0x28
+ 18525 595b 00000000 		.long	.LASF63
+ 18526 595f 03       		.byte	0x3
+ 18527 5960 6205     		.value	0x562
+ 18528 5962 C9010000 		.long	0x1c9
+ 18529 5966 00       		.byte	0x0
+ 18530 5967 2D       		.uleb128 0x2d
+ 18531 5968 00000000 		.long	.LASF351
+ 18532 596c 03       		.byte	0x3
+ 18533 596d 6F07     		.value	0x76f
+ 18534 596f 01       		.byte	0x1
+ 18535 5970 00000000 		.quad	.LFB658
+ 18535      00000000 
+ 18536 5978 00000000 		.quad	.LFE658
+ 18536      00000000 
+ 18537 5980 00000000 		.long	.LLST8
+ 18538 5984 8F810000 		.long	0x818f
+ 18539 5988 20       		.uleb128 0x20
+ 18540 5989 00000000 		.long	.LASF61
+ 18541 598d 03       		.byte	0x3
+ 18542 598e 6F07     		.value	0x76f
+ 18543 5990 712B0000 		.long	0x2b71
+ 18544 5994 03       		.byte	0x3
+ 18545 5995 91       		.byte	0x91
+ 18546 5996 B857     		.sleb128 -5192
+ 18547 5998 2E       		.uleb128 0x2e
+ 18548 5999 6B657900 		.string	"key"
+ 18549 599d 03       		.byte	0x3
+ 18550 599e 6F07     		.value	0x76f
+ 18551 59a0 772B0000 		.long	0x2b77
+ 18552 59a4 03       		.byte	0x3
+ 18553 59a5 91       		.byte	0x91
+ 18554 59a6 B057     		.sleb128 -5200
+ 18555 59a8 35       		.uleb128 0x35
+ 18556 59a9 763000   		.string	"v0"
+ 18557 59ac 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 491
+
+
+ 18558 59ad 7107     		.value	0x771
+ 18559 59af C9010000 		.long	0x1c9
+ 18560 59b3 03       		.byte	0x3
+ 18561 59b4 91       		.byte	0x91
+ 18562 59b5 C057     		.sleb128 -5184
+ 18563 59b7 35       		.uleb128 0x35
+ 18564 59b8 763100   		.string	"v1"
+ 18565 59bb 03       		.byte	0x3
+ 18566 59bc 7107     		.value	0x771
+ 18567 59be C9010000 		.long	0x1c9
+ 18568 59c2 03       		.byte	0x3
+ 18569 59c3 91       		.byte	0x91
+ 18570 59c4 D057     		.sleb128 -5168
+ 18571 59c6 35       		.uleb128 0x35
+ 18572 59c7 6B00     		.string	"k"
+ 18573 59c9 03       		.byte	0x3
+ 18574 59ca 7207     		.value	0x772
+ 18575 59cc C9010000 		.long	0x1c9
+ 18576 59d0 03       		.byte	0x3
+ 18577 59d1 91       		.byte	0x91
+ 18578 59d2 E057     		.sleb128 -5152
+ 18579 59d4 30       		.uleb128 0x30
+ 18580 59d5 BB0C0000 		.long	0xcbb
+ 18581 59d9 00000000 		.quad	.LBB1828
+ 18581      00000000 
+ 18582 59e1 00000000 		.quad	.LBE1828
+ 18582      00000000 
+ 18583 59e9 03       		.byte	0x3
+ 18584 59ea 7407     		.value	0x774
+ 18585 59ec 155A0000 		.long	0x5a15
+ 18586 59f0 31       		.uleb128 0x31
+ 18587 59f1 CC0C0000 		.long	0xccc
+ 18588 59f5 03       		.byte	0x3
+ 18589 59f6 91       		.byte	0x91
+ 18590 59f7 F857     		.sleb128 -5128
+ 18591 59f9 32       		.uleb128 0x32
+ 18592 59fa 00000000 		.quad	.LBB1829
+ 18592      00000000 
+ 18593 5a02 00000000 		.quad	.LBE1829
+ 18593      00000000 
+ 18594 5a0a 33       		.uleb128 0x33
+ 18595 5a0b D70C0000 		.long	0xcd7
+ 18596 5a0f 03       		.byte	0x3
+ 18597 5a10 76       		.byte	0x76
+ 18598 5a11 8054     		.sleb128 -5632
+ 18599 5a13 00       		.byte	0x0
+ 18600 5a14 00       		.byte	0x0
+ 18601 5a15 30       		.uleb128 0x30
+ 18602 5a16 BB0C0000 		.long	0xcbb
+ 18603 5a1a 00000000 		.quad	.LBB1830
+ 18603      00000000 
+ 18604 5a22 00000000 		.quad	.LBE1830
+ 18604      00000000 
+ 18605 5a2a 03       		.byte	0x3
+ 18606 5a2b 7507     		.value	0x775
+ 18607 5a2d 565A0000 		.long	0x5a56
+ 18608 5a31 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s 			page 492
+
+
+ 18609 5a32 CC0C0000 		.long	0xccc
+ 18610 5a36 03       		.byte	0x3
+ 18611 5a37 91       		.byte	0x91
+ 18612 5a38 8058     		.sleb128 -5120
+ 18613 5a3a 32       		.uleb128 0x32
+ 18614 5a3b 00000000 		.quad	.LBB1831
+ 18614      00000000 
+ 18615 5a43 00000000 		.quad	.LBE1831
+ 18615      00000000 
+ 18616 5a4b 33       		.uleb128 0x33
+ 18617 5a4c D70C0000 		.long	0xcd7
+ 18618 5a50 03       		.byte	0x3
+ 18619 5a51 76       		.byte	0x76
+ 18620 5a52 9054     		.sleb128 -5616
+ 18621 5a54 00       		.byte	0x0
+ 18622 5a55 00       		.byte	0x0
+ 18623 5a56 30       		.uleb128 0x30
+ 18624 5a57 E30C0000 		.long	0xce3
+ 18625 5a5b 00000000 		.quad	.LBB1832
+ 18625      00000000 
+ 18626 5a63 00000000 		.quad	.LBE1832
+ 18626      00000000 
+ 18627 5a6b 03       		.byte	0x3
+ 18628 5a6c 8607     		.value	0x786
+ 18629 5a6e 1C5B0000 		.long	0x5b1c
+ 18630 5a72 31       		.uleb128 0x31
+ 18631 5a73 010D0000 		.long	0xd01
+ 18632 5a77 03       		.byte	0x3
+ 18633 5a78 91       		.byte	0x91
+ 18634 5a79 8C58     		.sleb128 -5108
+ 18635 5a7b 31       		.uleb128 0x31
+ 18636 5a7c F50C0000 		.long	0xcf5
+ 18637 5a80 03       		.byte	0x3
+ 18638 5a81 91       		.byte	0x91
+ 18639 5a82 9058     		.sleb128 -5104
+ 18640 5a84 32       		.uleb128 0x32
+ 18641 5a85 00000000 		.quad	.LBB1833
+ 18641      00000000 
+ 18642 5a8d 00000000 		.quad	.LBE1833
+ 18642      00000000 
+ 18643 5a95 33       		.uleb128 0x33
+ 18644 5a96 0D0D0000 		.long	0xd0d
+ 18645 5a9a 03       		.byte	0x3
+ 18646 5a9b 76       		.byte	0x76
+ 18647 5a9c A054     		.sleb128 -5600
+ 18648 5a9e 30       		.uleb128 0x30
+ 18649 5a9f 1A0D0000 		.long	0xd1a
+ 18650 5aa3 00000000 		.quad	.LBB1834
+ 18650      00000000 
+ 18651 5aab 00000000 		.quad	.LBE1834
+ 18651      00000000 
+ 18652 5ab3 03       		.byte	0x3
+ 18653 5ab4 8A06     		.value	0x68a
+ 18654 5ab6 CD5A0000 		.long	0x5acd
+ 18655 5aba 31       		.uleb128 0x31
+ 18656 5abb 380D0000 		.long	0xd38
+ 18657 5abf 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 493
+
+
+ 18658 5ac0 91       		.byte	0x91
+ 18659 5ac1 AC58     		.sleb128 -5076
+ 18660 5ac3 31       		.uleb128 0x31
+ 18661 5ac4 2C0D0000 		.long	0xd2c
+ 18662 5ac8 03       		.byte	0x3
+ 18663 5ac9 91       		.byte	0x91
+ 18664 5aca B058     		.sleb128 -5072
+ 18665 5acc 00       		.byte	0x0
+ 18666 5acd 34       		.uleb128 0x34
+ 18667 5ace 450D0000 		.long	0xd45
+ 18668 5ad2 00000000 		.quad	.LBB1836
+ 18668      00000000 
+ 18669 5ada 00000000 		.quad	.LBE1836
+ 18669      00000000 
+ 18670 5ae2 03       		.byte	0x3
+ 18671 5ae3 8B06     		.value	0x68b
+ 18672 5ae5 31       		.uleb128 0x31
+ 18673 5ae6 570D0000 		.long	0xd57
+ 18674 5aea 03       		.byte	0x3
+ 18675 5aeb 91       		.byte	0x91
+ 18676 5aec C058     		.sleb128 -5056
+ 18677 5aee 34       		.uleb128 0x34
+ 18678 5aef 640D0000 		.long	0xd64
+ 18679 5af3 00000000 		.quad	.LBB1838
+ 18679      00000000 
+ 18680 5afb 00000000 		.quad	.LBE1838
+ 18680      00000000 
+ 18681 5b03 03       		.byte	0x3
+ 18682 5b04 4905     		.value	0x549
+ 18683 5b06 31       		.uleb128 0x31
+ 18684 5b07 820D0000 		.long	0xd82
+ 18685 5b0b 03       		.byte	0x3
+ 18686 5b0c 91       		.byte	0x91
+ 18687 5b0d DC58     		.sleb128 -5028
+ 18688 5b0f 31       		.uleb128 0x31
+ 18689 5b10 760D0000 		.long	0xd76
+ 18690 5b14 03       		.byte	0x3
+ 18691 5b15 91       		.byte	0x91
+ 18692 5b16 E058     		.sleb128 -5024
+ 18693 5b18 00       		.byte	0x0
+ 18694 5b19 00       		.byte	0x0
+ 18695 5b1a 00       		.byte	0x0
+ 18696 5b1b 00       		.byte	0x0
+ 18697 5b1c 30       		.uleb128 0x30
+ 18698 5b1d 8F0D0000 		.long	0xd8f
+ 18699 5b21 00000000 		.quad	.LBB1840
+ 18699      00000000 
+ 18700 5b29 00000000 		.quad	.LBE1840
+ 18700      00000000 
+ 18701 5b31 03       		.byte	0x3
+ 18702 5b32 8607     		.value	0x786
+ 18703 5b34 305D0000 		.long	0x5d30
+ 18704 5b38 31       		.uleb128 0x31
+ 18705 5b39 A10D0000 		.long	0xda1
+ 18706 5b3d 03       		.byte	0x3
+ 18707 5b3e 91       		.byte	0x91
+ 18708 5b3f F058     		.sleb128 -5008
+
GAS LISTING /tmp/ccPaCTqg.s 			page 494
+
+
+ 18709 5b41 32       		.uleb128 0x32
+ 18710 5b42 00000000 		.quad	.LBB1841
+ 18710      00000000 
+ 18711 5b4a 00000000 		.quad	.LBE1841
+ 18711      00000000 
+ 18712 5b52 33       		.uleb128 0x33
+ 18713 5b53 AD0D0000 		.long	0xdad
+ 18714 5b57 03       		.byte	0x3
+ 18715 5b58 76       		.byte	0x76
+ 18716 5b59 B054     		.sleb128 -5584
+ 18717 5b5b 30       		.uleb128 0x30
+ 18718 5b5c BA0D0000 		.long	0xdba
+ 18719 5b60 00000000 		.quad	.LBB1842
+ 18719      00000000 
+ 18720 5b68 00000000 		.quad	.LBE1842
+ 18720      00000000 
+ 18721 5b70 03       		.byte	0x3
+ 18722 5b71 1F06     		.value	0x61f
+ 18723 5b73 F85B0000 		.long	0x5bf8
+ 18724 5b77 31       		.uleb128 0x31
+ 18725 5b78 CC0D0000 		.long	0xdcc
+ 18726 5b7c 03       		.byte	0x3
+ 18727 5b7d 91       		.byte	0x91
+ 18728 5b7e 8059     		.sleb128 -4992
+ 18729 5b80 32       		.uleb128 0x32
+ 18730 5b81 00000000 		.quad	.LBB1843
+ 18730      00000000 
+ 18731 5b89 00000000 		.quad	.LBE1843
+ 18731      00000000 
+ 18732 5b91 33       		.uleb128 0x33
+ 18733 5b92 D80D0000 		.long	0xdd8
+ 18734 5b96 09       		.byte	0x9
+ 18735 5b97 03       		.byte	0x3
+ 18736 5b98 00000000 		.quad	mask.8002
+ 18736      00000000 
+ 18737 5ba0 34       		.uleb128 0x34
+ 18738 5ba1 FB0D0000 		.long	0xdfb
+ 18739 5ba5 00000000 		.quad	.LBB1844
+ 18739      00000000 
+ 18740 5bad 00000000 		.quad	.LBE1844
+ 18740      00000000 
+ 18741 5bb5 03       		.byte	0x3
+ 18742 5bb6 FE04     		.value	0x4fe
+ 18743 5bb8 31       		.uleb128 0x31
+ 18744 5bb9 190E0000 		.long	0xe19
+ 18745 5bbd 03       		.byte	0x3
+ 18746 5bbe 91       		.byte	0x91
+ 18747 5bbf 9059     		.sleb128 -4976
+ 18748 5bc1 31       		.uleb128 0x31
+ 18749 5bc2 0D0E0000 		.long	0xe0d
+ 18750 5bc6 03       		.byte	0x3
+ 18751 5bc7 91       		.byte	0x91
+ 18752 5bc8 A059     		.sleb128 -4960
+ 18753 5bca 34       		.uleb128 0x34
+ 18754 5bcb 260E0000 		.long	0xe26
+ 18755 5bcf 00000000 		.quad	.LBB1846
+ 18755      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 495
+
+
+ 18756 5bd7 00000000 		.quad	.LBE1846
+ 18756      00000000 
+ 18757 5bdf 03       		.byte	0x3
+ 18758 5be0 7501     		.value	0x175
+ 18759 5be2 31       		.uleb128 0x31
+ 18760 5be3 440E0000 		.long	0xe44
+ 18761 5be7 03       		.byte	0x3
+ 18762 5be8 91       		.byte	0x91
+ 18763 5be9 B059     		.sleb128 -4944
+ 18764 5beb 31       		.uleb128 0x31
+ 18765 5bec 380E0000 		.long	0xe38
+ 18766 5bf0 03       		.byte	0x3
+ 18767 5bf1 91       		.byte	0x91
+ 18768 5bf2 C059     		.sleb128 -4928
+ 18769 5bf4 00       		.byte	0x0
+ 18770 5bf5 00       		.byte	0x0
+ 18771 5bf6 00       		.byte	0x0
+ 18772 5bf7 00       		.byte	0x0
+ 18773 5bf8 30       		.uleb128 0x30
+ 18774 5bf9 BA0D0000 		.long	0xdba
+ 18775 5bfd 00000000 		.quad	.LBB1848
+ 18775      00000000 
+ 18776 5c05 00000000 		.quad	.LBE1848
+ 18776      00000000 
+ 18777 5c0d 03       		.byte	0x3
+ 18778 5c0e 2006     		.value	0x620
+ 18779 5c10 955C0000 		.long	0x5c95
+ 18780 5c14 31       		.uleb128 0x31
+ 18781 5c15 CC0D0000 		.long	0xdcc
+ 18782 5c19 03       		.byte	0x3
+ 18783 5c1a 91       		.byte	0x91
+ 18784 5c1b D059     		.sleb128 -4912
+ 18785 5c1d 32       		.uleb128 0x32
+ 18786 5c1e 00000000 		.quad	.LBB1849
+ 18786      00000000 
+ 18787 5c26 00000000 		.quad	.LBE1849
+ 18787      00000000 
+ 18788 5c2e 33       		.uleb128 0x33
+ 18789 5c2f D80D0000 		.long	0xdd8
+ 18790 5c33 09       		.byte	0x9
+ 18791 5c34 03       		.byte	0x3
+ 18792 5c35 00000000 		.quad	mask.8002
+ 18792      00000000 
+ 18793 5c3d 34       		.uleb128 0x34
+ 18794 5c3e FB0D0000 		.long	0xdfb
+ 18795 5c42 00000000 		.quad	.LBB1850
+ 18795      00000000 
+ 18796 5c4a 00000000 		.quad	.LBE1850
+ 18796      00000000 
+ 18797 5c52 03       		.byte	0x3
+ 18798 5c53 FE04     		.value	0x4fe
+ 18799 5c55 31       		.uleb128 0x31
+ 18800 5c56 190E0000 		.long	0xe19
+ 18801 5c5a 03       		.byte	0x3
+ 18802 5c5b 91       		.byte	0x91
+ 18803 5c5c E059     		.sleb128 -4896
+ 18804 5c5e 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s 			page 496
+
+
+ 18805 5c5f 0D0E0000 		.long	0xe0d
+ 18806 5c63 03       		.byte	0x3
+ 18807 5c64 91       		.byte	0x91
+ 18808 5c65 F059     		.sleb128 -4880
+ 18809 5c67 34       		.uleb128 0x34
+ 18810 5c68 260E0000 		.long	0xe26
+ 18811 5c6c 00000000 		.quad	.LBB1852
+ 18811      00000000 
+ 18812 5c74 00000000 		.quad	.LBE1852
+ 18812      00000000 
+ 18813 5c7c 03       		.byte	0x3
+ 18814 5c7d 7501     		.value	0x175
+ 18815 5c7f 31       		.uleb128 0x31
+ 18816 5c80 440E0000 		.long	0xe44
+ 18817 5c84 03       		.byte	0x3
+ 18818 5c85 91       		.byte	0x91
+ 18819 5c86 805A     		.sleb128 -4864
+ 18820 5c88 31       		.uleb128 0x31
+ 18821 5c89 380E0000 		.long	0xe38
+ 18822 5c8d 03       		.byte	0x3
+ 18823 5c8e 91       		.byte	0x91
+ 18824 5c8f 905A     		.sleb128 -4848
+ 18825 5c91 00       		.byte	0x0
+ 18826 5c92 00       		.byte	0x0
+ 18827 5c93 00       		.byte	0x0
+ 18828 5c94 00       		.byte	0x0
+ 18829 5c95 34       		.uleb128 0x34
+ 18830 5c96 BA0D0000 		.long	0xdba
+ 18831 5c9a 00000000 		.quad	.LBB1854
+ 18831      00000000 
+ 18832 5ca2 00000000 		.quad	.LBE1854
+ 18832      00000000 
+ 18833 5caa 03       		.byte	0x3
+ 18834 5cab 2106     		.value	0x621
+ 18835 5cad 31       		.uleb128 0x31
+ 18836 5cae CC0D0000 		.long	0xdcc
+ 18837 5cb2 03       		.byte	0x3
+ 18838 5cb3 91       		.byte	0x91
+ 18839 5cb4 A05A     		.sleb128 -4832
+ 18840 5cb6 32       		.uleb128 0x32
+ 18841 5cb7 00000000 		.quad	.LBB1855
+ 18841      00000000 
+ 18842 5cbf 00000000 		.quad	.LBE1855
+ 18842      00000000 
+ 18843 5cc7 33       		.uleb128 0x33
+ 18844 5cc8 D80D0000 		.long	0xdd8
+ 18845 5ccc 09       		.byte	0x9
+ 18846 5ccd 03       		.byte	0x3
+ 18847 5cce 00000000 		.quad	mask.8002
+ 18847      00000000 
+ 18848 5cd6 34       		.uleb128 0x34
+ 18849 5cd7 FB0D0000 		.long	0xdfb
+ 18850 5cdb 00000000 		.quad	.LBB1856
+ 18850      00000000 
+ 18851 5ce3 00000000 		.quad	.LBE1856
+ 18851      00000000 
+ 18852 5ceb 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 497
+
+
+ 18853 5cec FE04     		.value	0x4fe
+ 18854 5cee 31       		.uleb128 0x31
+ 18855 5cef 190E0000 		.long	0xe19
+ 18856 5cf3 03       		.byte	0x3
+ 18857 5cf4 91       		.byte	0x91
+ 18858 5cf5 B05A     		.sleb128 -4816
+ 18859 5cf7 31       		.uleb128 0x31
+ 18860 5cf8 0D0E0000 		.long	0xe0d
+ 18861 5cfc 03       		.byte	0x3
+ 18862 5cfd 91       		.byte	0x91
+ 18863 5cfe C05A     		.sleb128 -4800
+ 18864 5d00 34       		.uleb128 0x34
+ 18865 5d01 260E0000 		.long	0xe26
+ 18866 5d05 00000000 		.quad	.LBB1858
+ 18866      00000000 
+ 18867 5d0d 00000000 		.quad	.LBE1858
+ 18867      00000000 
+ 18868 5d15 03       		.byte	0x3
+ 18869 5d16 7501     		.value	0x175
+ 18870 5d18 31       		.uleb128 0x31
+ 18871 5d19 440E0000 		.long	0xe44
+ 18872 5d1d 03       		.byte	0x3
+ 18873 5d1e 91       		.byte	0x91
+ 18874 5d1f D05A     		.sleb128 -4784
+ 18875 5d21 31       		.uleb128 0x31
+ 18876 5d22 380E0000 		.long	0xe38
+ 18877 5d26 03       		.byte	0x3
+ 18878 5d27 91       		.byte	0x91
+ 18879 5d28 E05A     		.sleb128 -4768
+ 18880 5d2a 00       		.byte	0x0
+ 18881 5d2b 00       		.byte	0x0
+ 18882 5d2c 00       		.byte	0x0
+ 18883 5d2d 00       		.byte	0x0
+ 18884 5d2e 00       		.byte	0x0
+ 18885 5d2f 00       		.byte	0x0
+ 18886 5d30 30       		.uleb128 0x30
+ 18887 5d31 F7580000 		.long	0x58f7
+ 18888 5d35 00000000 		.quad	.LBB1860
+ 18888      00000000 
+ 18889 5d3d 00000000 		.quad	.LBE1860
+ 18889      00000000 
+ 18890 5d45 03       		.byte	0x3
+ 18891 5d46 8607     		.value	0x786
+ 18892 5d48 5F5D0000 		.long	0x5d5f
+ 18893 5d4c 31       		.uleb128 0x31
+ 18894 5d4d 12590000 		.long	0x5912
+ 18895 5d51 03       		.byte	0x3
+ 18896 5d52 91       		.byte	0x91
+ 18897 5d53 F05A     		.sleb128 -4752
+ 18898 5d55 31       		.uleb128 0x31
+ 18899 5d56 08590000 		.long	0x5908
+ 18900 5d5a 03       		.byte	0x3
+ 18901 5d5b 91       		.byte	0x91
+ 18902 5d5c 805B     		.sleb128 -4736
+ 18903 5d5e 00       		.byte	0x0
+ 18904 5d5f 30       		.uleb128 0x30
+ 18905 5d60 1D590000 		.long	0x591d
+
GAS LISTING /tmp/ccPaCTqg.s 			page 498
+
+
+ 18906 5d64 00000000 		.quad	.LBB1862
+ 18906      00000000 
+ 18907 5d6c 00000000 		.quad	.LBE1862
+ 18907      00000000 
+ 18908 5d74 03       		.byte	0x3
+ 18909 5d75 8707     		.value	0x787
+ 18910 5d77 1C5E0000 		.long	0x5e1c
+ 18911 5d7b 31       		.uleb128 0x31
+ 18912 5d7c 2F590000 		.long	0x592f
+ 18913 5d80 03       		.byte	0x3
+ 18914 5d81 91       		.byte	0x91
+ 18915 5d82 905B     		.sleb128 -4720
+ 18916 5d84 32       		.uleb128 0x32
+ 18917 5d85 00000000 		.quad	.LBB1863
+ 18917      00000000 
+ 18918 5d8d 00000000 		.quad	.LBE1863
+ 18918      00000000 
+ 18919 5d95 33       		.uleb128 0x33
+ 18920 5d96 3B590000 		.long	0x593b
+ 18921 5d9a 03       		.byte	0x3
+ 18922 5d9b 76       		.byte	0x76
+ 18923 5d9c C054     		.sleb128 -5568
+ 18924 5d9e 30       		.uleb128 0x30
+ 18925 5d9f 1A0D0000 		.long	0xd1a
+ 18926 5da3 00000000 		.quad	.LBB1864
+ 18926      00000000 
+ 18927 5dab 00000000 		.quad	.LBE1864
+ 18927      00000000 
+ 18928 5db3 03       		.byte	0x3
+ 18929 5db4 7206     		.value	0x672
+ 18930 5db6 CD5D0000 		.long	0x5dcd
+ 18931 5dba 31       		.uleb128 0x31
+ 18932 5dbb 380D0000 		.long	0xd38
+ 18933 5dbf 03       		.byte	0x3
+ 18934 5dc0 91       		.byte	0x91
+ 18935 5dc1 AC5B     		.sleb128 -4692
+ 18936 5dc3 31       		.uleb128 0x31
+ 18937 5dc4 2C0D0000 		.long	0xd2c
+ 18938 5dc8 03       		.byte	0x3
+ 18939 5dc9 91       		.byte	0x91
+ 18940 5dca B05B     		.sleb128 -4688
+ 18941 5dcc 00       		.byte	0x0
+ 18942 5dcd 34       		.uleb128 0x34
+ 18943 5dce 48590000 		.long	0x5948
+ 18944 5dd2 00000000 		.quad	.LBB1866
+ 18944      00000000 
+ 18945 5dda 00000000 		.quad	.LBE1866
+ 18945      00000000 
+ 18946 5de2 03       		.byte	0x3
+ 18947 5de3 7306     		.value	0x673
+ 18948 5de5 31       		.uleb128 0x31
+ 18949 5de6 5A590000 		.long	0x595a
+ 18950 5dea 03       		.byte	0x3
+ 18951 5deb 91       		.byte	0x91
+ 18952 5dec C05B     		.sleb128 -4672
+ 18953 5dee 34       		.uleb128 0x34
+ 18954 5def 640D0000 		.long	0xd64
+
GAS LISTING /tmp/ccPaCTqg.s 			page 499
+
+
+ 18955 5df3 00000000 		.quad	.LBB1868
+ 18955      00000000 
+ 18956 5dfb 00000000 		.quad	.LBE1868
+ 18956      00000000 
+ 18957 5e03 03       		.byte	0x3
+ 18958 5e04 6505     		.value	0x565
+ 18959 5e06 31       		.uleb128 0x31
+ 18960 5e07 820D0000 		.long	0xd82
+ 18961 5e0b 03       		.byte	0x3
+ 18962 5e0c 91       		.byte	0x91
+ 18963 5e0d DC5B     		.sleb128 -4644
+ 18964 5e0f 31       		.uleb128 0x31
+ 18965 5e10 760D0000 		.long	0xd76
+ 18966 5e14 03       		.byte	0x3
+ 18967 5e15 91       		.byte	0x91
+ 18968 5e16 E05B     		.sleb128 -4640
+ 18969 5e18 00       		.byte	0x0
+ 18970 5e19 00       		.byte	0x0
+ 18971 5e1a 00       		.byte	0x0
+ 18972 5e1b 00       		.byte	0x0
+ 18973 5e1c 30       		.uleb128 0x30
+ 18974 5e1d 8F0D0000 		.long	0xd8f
+ 18975 5e21 00000000 		.quad	.LBB1870
+ 18975      00000000 
+ 18976 5e29 00000000 		.quad	.LBE1870
+ 18976      00000000 
+ 18977 5e31 03       		.byte	0x3
+ 18978 5e32 8707     		.value	0x787
+ 18979 5e34 30600000 		.long	0x6030
+ 18980 5e38 31       		.uleb128 0x31
+ 18981 5e39 A10D0000 		.long	0xda1
+ 18982 5e3d 03       		.byte	0x3
+ 18983 5e3e 91       		.byte	0x91
+ 18984 5e3f F05B     		.sleb128 -4624
+ 18985 5e41 32       		.uleb128 0x32
+ 18986 5e42 00000000 		.quad	.LBB1871
+ 18986      00000000 
+ 18987 5e4a 00000000 		.quad	.LBE1871
+ 18987      00000000 
+ 18988 5e52 33       		.uleb128 0x33
+ 18989 5e53 AD0D0000 		.long	0xdad
+ 18990 5e57 03       		.byte	0x3
+ 18991 5e58 76       		.byte	0x76
+ 18992 5e59 D054     		.sleb128 -5552
+ 18993 5e5b 30       		.uleb128 0x30
+ 18994 5e5c BA0D0000 		.long	0xdba
+ 18995 5e60 00000000 		.quad	.LBB1872
+ 18995      00000000 
+ 18996 5e68 00000000 		.quad	.LBE1872
+ 18996      00000000 
+ 18997 5e70 03       		.byte	0x3
+ 18998 5e71 1F06     		.value	0x61f
+ 18999 5e73 F85E0000 		.long	0x5ef8
+ 19000 5e77 31       		.uleb128 0x31
+ 19001 5e78 CC0D0000 		.long	0xdcc
+ 19002 5e7c 03       		.byte	0x3
+ 19003 5e7d 91       		.byte	0x91
+
GAS LISTING /tmp/ccPaCTqg.s 			page 500
+
+
+ 19004 5e7e 805C     		.sleb128 -4608
+ 19005 5e80 32       		.uleb128 0x32
+ 19006 5e81 00000000 		.quad	.LBB1873
+ 19006      00000000 
+ 19007 5e89 00000000 		.quad	.LBE1873
+ 19007      00000000 
+ 19008 5e91 33       		.uleb128 0x33
+ 19009 5e92 D80D0000 		.long	0xdd8
+ 19010 5e96 09       		.byte	0x9
+ 19011 5e97 03       		.byte	0x3
+ 19012 5e98 00000000 		.quad	mask.8002
+ 19012      00000000 
+ 19013 5ea0 34       		.uleb128 0x34
+ 19014 5ea1 FB0D0000 		.long	0xdfb
+ 19015 5ea5 00000000 		.quad	.LBB1874
+ 19015      00000000 
+ 19016 5ead 00000000 		.quad	.LBE1874
+ 19016      00000000 
+ 19017 5eb5 03       		.byte	0x3
+ 19018 5eb6 FE04     		.value	0x4fe
+ 19019 5eb8 31       		.uleb128 0x31
+ 19020 5eb9 190E0000 		.long	0xe19
+ 19021 5ebd 03       		.byte	0x3
+ 19022 5ebe 91       		.byte	0x91
+ 19023 5ebf 905C     		.sleb128 -4592
+ 19024 5ec1 31       		.uleb128 0x31
+ 19025 5ec2 0D0E0000 		.long	0xe0d
+ 19026 5ec6 03       		.byte	0x3
+ 19027 5ec7 91       		.byte	0x91
+ 19028 5ec8 A05C     		.sleb128 -4576
+ 19029 5eca 34       		.uleb128 0x34
+ 19030 5ecb 260E0000 		.long	0xe26
+ 19031 5ecf 00000000 		.quad	.LBB1876
+ 19031      00000000 
+ 19032 5ed7 00000000 		.quad	.LBE1876
+ 19032      00000000 
+ 19033 5edf 03       		.byte	0x3
+ 19034 5ee0 7501     		.value	0x175
+ 19035 5ee2 31       		.uleb128 0x31
+ 19036 5ee3 440E0000 		.long	0xe44
+ 19037 5ee7 03       		.byte	0x3
+ 19038 5ee8 91       		.byte	0x91
+ 19039 5ee9 B05C     		.sleb128 -4560
+ 19040 5eeb 31       		.uleb128 0x31
+ 19041 5eec 380E0000 		.long	0xe38
+ 19042 5ef0 03       		.byte	0x3
+ 19043 5ef1 91       		.byte	0x91
+ 19044 5ef2 C05C     		.sleb128 -4544
+ 19045 5ef4 00       		.byte	0x0
+ 19046 5ef5 00       		.byte	0x0
+ 19047 5ef6 00       		.byte	0x0
+ 19048 5ef7 00       		.byte	0x0
+ 19049 5ef8 30       		.uleb128 0x30
+ 19050 5ef9 BA0D0000 		.long	0xdba
+ 19051 5efd 00000000 		.quad	.LBB1878
+ 19051      00000000 
+ 19052 5f05 00000000 		.quad	.LBE1878
+
GAS LISTING /tmp/ccPaCTqg.s 			page 501
+
+
+ 19052      00000000 
+ 19053 5f0d 03       		.byte	0x3
+ 19054 5f0e 2006     		.value	0x620
+ 19055 5f10 955F0000 		.long	0x5f95
+ 19056 5f14 31       		.uleb128 0x31
+ 19057 5f15 CC0D0000 		.long	0xdcc
+ 19058 5f19 03       		.byte	0x3
+ 19059 5f1a 91       		.byte	0x91
+ 19060 5f1b D05C     		.sleb128 -4528
+ 19061 5f1d 32       		.uleb128 0x32
+ 19062 5f1e 00000000 		.quad	.LBB1879
+ 19062      00000000 
+ 19063 5f26 00000000 		.quad	.LBE1879
+ 19063      00000000 
+ 19064 5f2e 33       		.uleb128 0x33
+ 19065 5f2f D80D0000 		.long	0xdd8
+ 19066 5f33 09       		.byte	0x9
+ 19067 5f34 03       		.byte	0x3
+ 19068 5f35 00000000 		.quad	mask.8002
+ 19068      00000000 
+ 19069 5f3d 34       		.uleb128 0x34
+ 19070 5f3e FB0D0000 		.long	0xdfb
+ 19071 5f42 00000000 		.quad	.LBB1880
+ 19071      00000000 
+ 19072 5f4a 00000000 		.quad	.LBE1880
+ 19072      00000000 
+ 19073 5f52 03       		.byte	0x3
+ 19074 5f53 FE04     		.value	0x4fe
+ 19075 5f55 31       		.uleb128 0x31
+ 19076 5f56 190E0000 		.long	0xe19
+ 19077 5f5a 03       		.byte	0x3
+ 19078 5f5b 91       		.byte	0x91
+ 19079 5f5c E05C     		.sleb128 -4512
+ 19080 5f5e 31       		.uleb128 0x31
+ 19081 5f5f 0D0E0000 		.long	0xe0d
+ 19082 5f63 03       		.byte	0x3
+ 19083 5f64 91       		.byte	0x91
+ 19084 5f65 F05C     		.sleb128 -4496
+ 19085 5f67 34       		.uleb128 0x34
+ 19086 5f68 260E0000 		.long	0xe26
+ 19087 5f6c 00000000 		.quad	.LBB1882
+ 19087      00000000 
+ 19088 5f74 00000000 		.quad	.LBE1882
+ 19088      00000000 
+ 19089 5f7c 03       		.byte	0x3
+ 19090 5f7d 7501     		.value	0x175
+ 19091 5f7f 31       		.uleb128 0x31
+ 19092 5f80 440E0000 		.long	0xe44
+ 19093 5f84 03       		.byte	0x3
+ 19094 5f85 91       		.byte	0x91
+ 19095 5f86 805D     		.sleb128 -4480
+ 19096 5f88 31       		.uleb128 0x31
+ 19097 5f89 380E0000 		.long	0xe38
+ 19098 5f8d 03       		.byte	0x3
+ 19099 5f8e 91       		.byte	0x91
+ 19100 5f8f 905D     		.sleb128 -4464
+ 19101 5f91 00       		.byte	0x0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 502
+
+
+ 19102 5f92 00       		.byte	0x0
+ 19103 5f93 00       		.byte	0x0
+ 19104 5f94 00       		.byte	0x0
+ 19105 5f95 34       		.uleb128 0x34
+ 19106 5f96 BA0D0000 		.long	0xdba
+ 19107 5f9a 00000000 		.quad	.LBB1884
+ 19107      00000000 
+ 19108 5fa2 00000000 		.quad	.LBE1884
+ 19108      00000000 
+ 19109 5faa 03       		.byte	0x3
+ 19110 5fab 2106     		.value	0x621
+ 19111 5fad 31       		.uleb128 0x31
+ 19112 5fae CC0D0000 		.long	0xdcc
+ 19113 5fb2 03       		.byte	0x3
+ 19114 5fb3 91       		.byte	0x91
+ 19115 5fb4 A05D     		.sleb128 -4448
+ 19116 5fb6 32       		.uleb128 0x32
+ 19117 5fb7 00000000 		.quad	.LBB1885
+ 19117      00000000 
+ 19118 5fbf 00000000 		.quad	.LBE1885
+ 19118      00000000 
+ 19119 5fc7 33       		.uleb128 0x33
+ 19120 5fc8 D80D0000 		.long	0xdd8
+ 19121 5fcc 09       		.byte	0x9
+ 19122 5fcd 03       		.byte	0x3
+ 19123 5fce 00000000 		.quad	mask.8002
+ 19123      00000000 
+ 19124 5fd6 34       		.uleb128 0x34
+ 19125 5fd7 FB0D0000 		.long	0xdfb
+ 19126 5fdb 00000000 		.quad	.LBB1886
+ 19126      00000000 
+ 19127 5fe3 00000000 		.quad	.LBE1886
+ 19127      00000000 
+ 19128 5feb 03       		.byte	0x3
+ 19129 5fec FE04     		.value	0x4fe
+ 19130 5fee 31       		.uleb128 0x31
+ 19131 5fef 190E0000 		.long	0xe19
+ 19132 5ff3 03       		.byte	0x3
+ 19133 5ff4 91       		.byte	0x91
+ 19134 5ff5 B05D     		.sleb128 -4432
+ 19135 5ff7 31       		.uleb128 0x31
+ 19136 5ff8 0D0E0000 		.long	0xe0d
+ 19137 5ffc 03       		.byte	0x3
+ 19138 5ffd 91       		.byte	0x91
+ 19139 5ffe C05D     		.sleb128 -4416
+ 19140 6000 34       		.uleb128 0x34
+ 19141 6001 260E0000 		.long	0xe26
+ 19142 6005 00000000 		.quad	.LBB1888
+ 19142      00000000 
+ 19143 600d 00000000 		.quad	.LBE1888
+ 19143      00000000 
+ 19144 6015 03       		.byte	0x3
+ 19145 6016 7501     		.value	0x175
+ 19146 6018 31       		.uleb128 0x31
+ 19147 6019 440E0000 		.long	0xe44
+ 19148 601d 03       		.byte	0x3
+ 19149 601e 91       		.byte	0x91
+
GAS LISTING /tmp/ccPaCTqg.s 			page 503
+
+
+ 19150 601f D05D     		.sleb128 -4400
+ 19151 6021 31       		.uleb128 0x31
+ 19152 6022 380E0000 		.long	0xe38
+ 19153 6026 03       		.byte	0x3
+ 19154 6027 91       		.byte	0x91
+ 19155 6028 E05D     		.sleb128 -4384
+ 19156 602a 00       		.byte	0x0
+ 19157 602b 00       		.byte	0x0
+ 19158 602c 00       		.byte	0x0
+ 19159 602d 00       		.byte	0x0
+ 19160 602e 00       		.byte	0x0
+ 19161 602f 00       		.byte	0x0
+ 19162 6030 30       		.uleb128 0x30
+ 19163 6031 F7580000 		.long	0x58f7
+ 19164 6035 00000000 		.quad	.LBB1890
+ 19164      00000000 
+ 19165 603d 00000000 		.quad	.LBE1890
+ 19165      00000000 
+ 19166 6045 03       		.byte	0x3
+ 19167 6046 8707     		.value	0x787
+ 19168 6048 5F600000 		.long	0x605f
+ 19169 604c 31       		.uleb128 0x31
+ 19170 604d 12590000 		.long	0x5912
+ 19171 6051 03       		.byte	0x3
+ 19172 6052 91       		.byte	0x91
+ 19173 6053 F05D     		.sleb128 -4368
+ 19174 6055 31       		.uleb128 0x31
+ 19175 6056 08590000 		.long	0x5908
+ 19176 605a 03       		.byte	0x3
+ 19177 605b 91       		.byte	0x91
+ 19178 605c 805E     		.sleb128 -4352
+ 19179 605e 00       		.byte	0x0
+ 19180 605f 30       		.uleb128 0x30
+ 19181 6060 E30C0000 		.long	0xce3
+ 19182 6064 00000000 		.quad	.LBB1892
+ 19182      00000000 
+ 19183 606c 00000000 		.quad	.LBE1892
+ 19183      00000000 
+ 19184 6074 03       		.byte	0x3
+ 19185 6075 8807     		.value	0x788
+ 19186 6077 25610000 		.long	0x6125
+ 19187 607b 31       		.uleb128 0x31
+ 19188 607c 010D0000 		.long	0xd01
+ 19189 6080 03       		.byte	0x3
+ 19190 6081 91       		.byte	0x91
+ 19191 6082 9C5E     		.sleb128 -4324
+ 19192 6084 31       		.uleb128 0x31
+ 19193 6085 F50C0000 		.long	0xcf5
+ 19194 6089 03       		.byte	0x3
+ 19195 608a 91       		.byte	0x91
+ 19196 608b A05E     		.sleb128 -4320
+ 19197 608d 32       		.uleb128 0x32
+ 19198 608e 00000000 		.quad	.LBB1893
+ 19198      00000000 
+ 19199 6096 00000000 		.quad	.LBE1893
+ 19199      00000000 
+ 19200 609e 33       		.uleb128 0x33
+
GAS LISTING /tmp/ccPaCTqg.s 			page 504
+
+
+ 19201 609f 0D0D0000 		.long	0xd0d
+ 19202 60a3 03       		.byte	0x3
+ 19203 60a4 76       		.byte	0x76
+ 19204 60a5 E054     		.sleb128 -5536
+ 19205 60a7 30       		.uleb128 0x30
+ 19206 60a8 1A0D0000 		.long	0xd1a
+ 19207 60ac 00000000 		.quad	.LBB1894
+ 19207      00000000 
+ 19208 60b4 00000000 		.quad	.LBE1894
+ 19208      00000000 
+ 19209 60bc 03       		.byte	0x3
+ 19210 60bd 8A06     		.value	0x68a
+ 19211 60bf D6600000 		.long	0x60d6
+ 19212 60c3 31       		.uleb128 0x31
+ 19213 60c4 380D0000 		.long	0xd38
+ 19214 60c8 03       		.byte	0x3
+ 19215 60c9 91       		.byte	0x91
+ 19216 60ca BC5E     		.sleb128 -4292
+ 19217 60cc 31       		.uleb128 0x31
+ 19218 60cd 2C0D0000 		.long	0xd2c
+ 19219 60d1 03       		.byte	0x3
+ 19220 60d2 91       		.byte	0x91
+ 19221 60d3 C05E     		.sleb128 -4288
+ 19222 60d5 00       		.byte	0x0
+ 19223 60d6 34       		.uleb128 0x34
+ 19224 60d7 450D0000 		.long	0xd45
+ 19225 60db 00000000 		.quad	.LBB1896
+ 19225      00000000 
+ 19226 60e3 00000000 		.quad	.LBE1896
+ 19226      00000000 
+ 19227 60eb 03       		.byte	0x3
+ 19228 60ec 8B06     		.value	0x68b
+ 19229 60ee 31       		.uleb128 0x31
+ 19230 60ef 570D0000 		.long	0xd57
+ 19231 60f3 03       		.byte	0x3
+ 19232 60f4 91       		.byte	0x91
+ 19233 60f5 D05E     		.sleb128 -4272
+ 19234 60f7 34       		.uleb128 0x34
+ 19235 60f8 640D0000 		.long	0xd64
+ 19236 60fc 00000000 		.quad	.LBB1898
+ 19236      00000000 
+ 19237 6104 00000000 		.quad	.LBE1898
+ 19237      00000000 
+ 19238 610c 03       		.byte	0x3
+ 19239 610d 4905     		.value	0x549
+ 19240 610f 31       		.uleb128 0x31
+ 19241 6110 820D0000 		.long	0xd82
+ 19242 6114 03       		.byte	0x3
+ 19243 6115 91       		.byte	0x91
+ 19244 6116 EC5E     		.sleb128 -4244
+ 19245 6118 31       		.uleb128 0x31
+ 19246 6119 760D0000 		.long	0xd76
+ 19247 611d 03       		.byte	0x3
+ 19248 611e 91       		.byte	0x91
+ 19249 611f F05E     		.sleb128 -4240
+ 19250 6121 00       		.byte	0x0
+ 19251 6122 00       		.byte	0x0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 505
+
+
+ 19252 6123 00       		.byte	0x0
+ 19253 6124 00       		.byte	0x0
+ 19254 6125 30       		.uleb128 0x30
+ 19255 6126 8F0D0000 		.long	0xd8f
+ 19256 612a 00000000 		.quad	.LBB1900
+ 19256      00000000 
+ 19257 6132 00000000 		.quad	.LBE1900
+ 19257      00000000 
+ 19258 613a 03       		.byte	0x3
+ 19259 613b 8807     		.value	0x788
+ 19260 613d 39630000 		.long	0x6339
+ 19261 6141 31       		.uleb128 0x31
+ 19262 6142 A10D0000 		.long	0xda1
+ 19263 6146 03       		.byte	0x3
+ 19264 6147 91       		.byte	0x91
+ 19265 6148 805F     		.sleb128 -4224
+ 19266 614a 32       		.uleb128 0x32
+ 19267 614b 00000000 		.quad	.LBB1901
+ 19267      00000000 
+ 19268 6153 00000000 		.quad	.LBE1901
+ 19268      00000000 
+ 19269 615b 33       		.uleb128 0x33
+ 19270 615c AD0D0000 		.long	0xdad
+ 19271 6160 03       		.byte	0x3
+ 19272 6161 76       		.byte	0x76
+ 19273 6162 F054     		.sleb128 -5520
+ 19274 6164 30       		.uleb128 0x30
+ 19275 6165 BA0D0000 		.long	0xdba
+ 19276 6169 00000000 		.quad	.LBB1902
+ 19276      00000000 
+ 19277 6171 00000000 		.quad	.LBE1902
+ 19277      00000000 
+ 19278 6179 03       		.byte	0x3
+ 19279 617a 1F06     		.value	0x61f
+ 19280 617c 01620000 		.long	0x6201
+ 19281 6180 31       		.uleb128 0x31
+ 19282 6181 CC0D0000 		.long	0xdcc
+ 19283 6185 03       		.byte	0x3
+ 19284 6186 91       		.byte	0x91
+ 19285 6187 905F     		.sleb128 -4208
+ 19286 6189 32       		.uleb128 0x32
+ 19287 618a 00000000 		.quad	.LBB1903
+ 19287      00000000 
+ 19288 6192 00000000 		.quad	.LBE1903
+ 19288      00000000 
+ 19289 619a 33       		.uleb128 0x33
+ 19290 619b D80D0000 		.long	0xdd8
+ 19291 619f 09       		.byte	0x9
+ 19292 61a0 03       		.byte	0x3
+ 19293 61a1 00000000 		.quad	mask.8002
+ 19293      00000000 
+ 19294 61a9 34       		.uleb128 0x34
+ 19295 61aa FB0D0000 		.long	0xdfb
+ 19296 61ae 00000000 		.quad	.LBB1904
+ 19296      00000000 
+ 19297 61b6 00000000 		.quad	.LBE1904
+ 19297      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 506
+
+
+ 19298 61be 03       		.byte	0x3
+ 19299 61bf FE04     		.value	0x4fe
+ 19300 61c1 31       		.uleb128 0x31
+ 19301 61c2 190E0000 		.long	0xe19
+ 19302 61c6 03       		.byte	0x3
+ 19303 61c7 91       		.byte	0x91
+ 19304 61c8 A05F     		.sleb128 -4192
+ 19305 61ca 31       		.uleb128 0x31
+ 19306 61cb 0D0E0000 		.long	0xe0d
+ 19307 61cf 03       		.byte	0x3
+ 19308 61d0 91       		.byte	0x91
+ 19309 61d1 B05F     		.sleb128 -4176
+ 19310 61d3 34       		.uleb128 0x34
+ 19311 61d4 260E0000 		.long	0xe26
+ 19312 61d8 00000000 		.quad	.LBB1906
+ 19312      00000000 
+ 19313 61e0 00000000 		.quad	.LBE1906
+ 19313      00000000 
+ 19314 61e8 03       		.byte	0x3
+ 19315 61e9 7501     		.value	0x175
+ 19316 61eb 31       		.uleb128 0x31
+ 19317 61ec 440E0000 		.long	0xe44
+ 19318 61f0 03       		.byte	0x3
+ 19319 61f1 91       		.byte	0x91
+ 19320 61f2 C05F     		.sleb128 -4160
+ 19321 61f4 31       		.uleb128 0x31
+ 19322 61f5 380E0000 		.long	0xe38
+ 19323 61f9 03       		.byte	0x3
+ 19324 61fa 91       		.byte	0x91
+ 19325 61fb D05F     		.sleb128 -4144
+ 19326 61fd 00       		.byte	0x0
+ 19327 61fe 00       		.byte	0x0
+ 19328 61ff 00       		.byte	0x0
+ 19329 6200 00       		.byte	0x0
+ 19330 6201 30       		.uleb128 0x30
+ 19331 6202 BA0D0000 		.long	0xdba
+ 19332 6206 00000000 		.quad	.LBB1908
+ 19332      00000000 
+ 19333 620e 00000000 		.quad	.LBE1908
+ 19333      00000000 
+ 19334 6216 03       		.byte	0x3
+ 19335 6217 2006     		.value	0x620
+ 19336 6219 9E620000 		.long	0x629e
+ 19337 621d 31       		.uleb128 0x31
+ 19338 621e CC0D0000 		.long	0xdcc
+ 19339 6222 03       		.byte	0x3
+ 19340 6223 91       		.byte	0x91
+ 19341 6224 E05F     		.sleb128 -4128
+ 19342 6226 32       		.uleb128 0x32
+ 19343 6227 00000000 		.quad	.LBB1909
+ 19343      00000000 
+ 19344 622f 00000000 		.quad	.LBE1909
+ 19344      00000000 
+ 19345 6237 33       		.uleb128 0x33
+ 19346 6238 D80D0000 		.long	0xdd8
+ 19347 623c 09       		.byte	0x9
+ 19348 623d 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 507
+
+
+ 19349 623e 00000000 		.quad	mask.8002
+ 19349      00000000 
+ 19350 6246 34       		.uleb128 0x34
+ 19351 6247 FB0D0000 		.long	0xdfb
+ 19352 624b 00000000 		.quad	.LBB1910
+ 19352      00000000 
+ 19353 6253 00000000 		.quad	.LBE1910
+ 19353      00000000 
+ 19354 625b 03       		.byte	0x3
+ 19355 625c FE04     		.value	0x4fe
+ 19356 625e 31       		.uleb128 0x31
+ 19357 625f 190E0000 		.long	0xe19
+ 19358 6263 03       		.byte	0x3
+ 19359 6264 91       		.byte	0x91
+ 19360 6265 F05F     		.sleb128 -4112
+ 19361 6267 31       		.uleb128 0x31
+ 19362 6268 0D0E0000 		.long	0xe0d
+ 19363 626c 03       		.byte	0x3
+ 19364 626d 91       		.byte	0x91
+ 19365 626e 8060     		.sleb128 -4096
+ 19366 6270 34       		.uleb128 0x34
+ 19367 6271 260E0000 		.long	0xe26
+ 19368 6275 00000000 		.quad	.LBB1912
+ 19368      00000000 
+ 19369 627d 00000000 		.quad	.LBE1912
+ 19369      00000000 
+ 19370 6285 03       		.byte	0x3
+ 19371 6286 7501     		.value	0x175
+ 19372 6288 31       		.uleb128 0x31
+ 19373 6289 440E0000 		.long	0xe44
+ 19374 628d 03       		.byte	0x3
+ 19375 628e 91       		.byte	0x91
+ 19376 628f 9060     		.sleb128 -4080
+ 19377 6291 31       		.uleb128 0x31
+ 19378 6292 380E0000 		.long	0xe38
+ 19379 6296 03       		.byte	0x3
+ 19380 6297 91       		.byte	0x91
+ 19381 6298 A060     		.sleb128 -4064
+ 19382 629a 00       		.byte	0x0
+ 19383 629b 00       		.byte	0x0
+ 19384 629c 00       		.byte	0x0
+ 19385 629d 00       		.byte	0x0
+ 19386 629e 34       		.uleb128 0x34
+ 19387 629f BA0D0000 		.long	0xdba
+ 19388 62a3 00000000 		.quad	.LBB1914
+ 19388      00000000 
+ 19389 62ab 00000000 		.quad	.LBE1914
+ 19389      00000000 
+ 19390 62b3 03       		.byte	0x3
+ 19391 62b4 2106     		.value	0x621
+ 19392 62b6 31       		.uleb128 0x31
+ 19393 62b7 CC0D0000 		.long	0xdcc
+ 19394 62bb 03       		.byte	0x3
+ 19395 62bc 91       		.byte	0x91
+ 19396 62bd B060     		.sleb128 -4048
+ 19397 62bf 32       		.uleb128 0x32
+ 19398 62c0 00000000 		.quad	.LBB1915
+
GAS LISTING /tmp/ccPaCTqg.s 			page 508
+
+
+ 19398      00000000 
+ 19399 62c8 00000000 		.quad	.LBE1915
+ 19399      00000000 
+ 19400 62d0 33       		.uleb128 0x33
+ 19401 62d1 D80D0000 		.long	0xdd8
+ 19402 62d5 09       		.byte	0x9
+ 19403 62d6 03       		.byte	0x3
+ 19404 62d7 00000000 		.quad	mask.8002
+ 19404      00000000 
+ 19405 62df 34       		.uleb128 0x34
+ 19406 62e0 FB0D0000 		.long	0xdfb
+ 19407 62e4 00000000 		.quad	.LBB1916
+ 19407      00000000 
+ 19408 62ec 00000000 		.quad	.LBE1916
+ 19408      00000000 
+ 19409 62f4 03       		.byte	0x3
+ 19410 62f5 FE04     		.value	0x4fe
+ 19411 62f7 31       		.uleb128 0x31
+ 19412 62f8 190E0000 		.long	0xe19
+ 19413 62fc 03       		.byte	0x3
+ 19414 62fd 91       		.byte	0x91
+ 19415 62fe C060     		.sleb128 -4032
+ 19416 6300 31       		.uleb128 0x31
+ 19417 6301 0D0E0000 		.long	0xe0d
+ 19418 6305 03       		.byte	0x3
+ 19419 6306 91       		.byte	0x91
+ 19420 6307 D060     		.sleb128 -4016
+ 19421 6309 34       		.uleb128 0x34
+ 19422 630a 260E0000 		.long	0xe26
+ 19423 630e 00000000 		.quad	.LBB1918
+ 19423      00000000 
+ 19424 6316 00000000 		.quad	.LBE1918
+ 19424      00000000 
+ 19425 631e 03       		.byte	0x3
+ 19426 631f 7501     		.value	0x175
+ 19427 6321 31       		.uleb128 0x31
+ 19428 6322 440E0000 		.long	0xe44
+ 19429 6326 03       		.byte	0x3
+ 19430 6327 91       		.byte	0x91
+ 19431 6328 E060     		.sleb128 -4000
+ 19432 632a 31       		.uleb128 0x31
+ 19433 632b 380E0000 		.long	0xe38
+ 19434 632f 03       		.byte	0x3
+ 19435 6330 91       		.byte	0x91
+ 19436 6331 F060     		.sleb128 -3984
+ 19437 6333 00       		.byte	0x0
+ 19438 6334 00       		.byte	0x0
+ 19439 6335 00       		.byte	0x0
+ 19440 6336 00       		.byte	0x0
+ 19441 6337 00       		.byte	0x0
+ 19442 6338 00       		.byte	0x0
+ 19443 6339 30       		.uleb128 0x30
+ 19444 633a F7580000 		.long	0x58f7
+ 19445 633e 00000000 		.quad	.LBB1920
+ 19445      00000000 
+ 19446 6346 00000000 		.quad	.LBE1920
+ 19446      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 509
+
+
+ 19447 634e 03       		.byte	0x3
+ 19448 634f 8807     		.value	0x788
+ 19449 6351 68630000 		.long	0x6368
+ 19450 6355 31       		.uleb128 0x31
+ 19451 6356 12590000 		.long	0x5912
+ 19452 635a 03       		.byte	0x3
+ 19453 635b 91       		.byte	0x91
+ 19454 635c 8061     		.sleb128 -3968
+ 19455 635e 31       		.uleb128 0x31
+ 19456 635f 08590000 		.long	0x5908
+ 19457 6363 03       		.byte	0x3
+ 19458 6364 91       		.byte	0x91
+ 19459 6365 9061     		.sleb128 -3952
+ 19460 6367 00       		.byte	0x0
+ 19461 6368 30       		.uleb128 0x30
+ 19462 6369 1D590000 		.long	0x591d
+ 19463 636d 00000000 		.quad	.LBB1922
+ 19463      00000000 
+ 19464 6375 00000000 		.quad	.LBE1922
+ 19464      00000000 
+ 19465 637d 03       		.byte	0x3
+ 19466 637e 8907     		.value	0x789
+ 19467 6380 25640000 		.long	0x6425
+ 19468 6384 31       		.uleb128 0x31
+ 19469 6385 2F590000 		.long	0x592f
+ 19470 6389 03       		.byte	0x3
+ 19471 638a 91       		.byte	0x91
+ 19472 638b A061     		.sleb128 -3936
+ 19473 638d 32       		.uleb128 0x32
+ 19474 638e 00000000 		.quad	.LBB1923
+ 19474      00000000 
+ 19475 6396 00000000 		.quad	.LBE1923
+ 19475      00000000 
+ 19476 639e 33       		.uleb128 0x33
+ 19477 639f 3B590000 		.long	0x593b
+ 19478 63a3 03       		.byte	0x3
+ 19479 63a4 76       		.byte	0x76
+ 19480 63a5 8055     		.sleb128 -5504
+ 19481 63a7 30       		.uleb128 0x30
+ 19482 63a8 1A0D0000 		.long	0xd1a
+ 19483 63ac 00000000 		.quad	.LBB1924
+ 19483      00000000 
+ 19484 63b4 00000000 		.quad	.LBE1924
+ 19484      00000000 
+ 19485 63bc 03       		.byte	0x3
+ 19486 63bd 7206     		.value	0x672
+ 19487 63bf D6630000 		.long	0x63d6
+ 19488 63c3 31       		.uleb128 0x31
+ 19489 63c4 380D0000 		.long	0xd38
+ 19490 63c8 03       		.byte	0x3
+ 19491 63c9 91       		.byte	0x91
+ 19492 63ca BC61     		.sleb128 -3908
+ 19493 63cc 31       		.uleb128 0x31
+ 19494 63cd 2C0D0000 		.long	0xd2c
+ 19495 63d1 03       		.byte	0x3
+ 19496 63d2 91       		.byte	0x91
+ 19497 63d3 C061     		.sleb128 -3904
+
GAS LISTING /tmp/ccPaCTqg.s 			page 510
+
+
+ 19498 63d5 00       		.byte	0x0
+ 19499 63d6 34       		.uleb128 0x34
+ 19500 63d7 48590000 		.long	0x5948
+ 19501 63db 00000000 		.quad	.LBB1926
+ 19501      00000000 
+ 19502 63e3 00000000 		.quad	.LBE1926
+ 19502      00000000 
+ 19503 63eb 03       		.byte	0x3
+ 19504 63ec 7306     		.value	0x673
+ 19505 63ee 31       		.uleb128 0x31
+ 19506 63ef 5A590000 		.long	0x595a
+ 19507 63f3 03       		.byte	0x3
+ 19508 63f4 91       		.byte	0x91
+ 19509 63f5 D061     		.sleb128 -3888
+ 19510 63f7 34       		.uleb128 0x34
+ 19511 63f8 640D0000 		.long	0xd64
+ 19512 63fc 00000000 		.quad	.LBB1928
+ 19512      00000000 
+ 19513 6404 00000000 		.quad	.LBE1928
+ 19513      00000000 
+ 19514 640c 03       		.byte	0x3
+ 19515 640d 6505     		.value	0x565
+ 19516 640f 31       		.uleb128 0x31
+ 19517 6410 820D0000 		.long	0xd82
+ 19518 6414 03       		.byte	0x3
+ 19519 6415 91       		.byte	0x91
+ 19520 6416 EC61     		.sleb128 -3860
+ 19521 6418 31       		.uleb128 0x31
+ 19522 6419 760D0000 		.long	0xd76
+ 19523 641d 03       		.byte	0x3
+ 19524 641e 91       		.byte	0x91
+ 19525 641f F061     		.sleb128 -3856
+ 19526 6421 00       		.byte	0x0
+ 19527 6422 00       		.byte	0x0
+ 19528 6423 00       		.byte	0x0
+ 19529 6424 00       		.byte	0x0
+ 19530 6425 30       		.uleb128 0x30
+ 19531 6426 8F0D0000 		.long	0xd8f
+ 19532 642a 00000000 		.quad	.LBB1930
+ 19532      00000000 
+ 19533 6432 00000000 		.quad	.LBE1930
+ 19533      00000000 
+ 19534 643a 03       		.byte	0x3
+ 19535 643b 8907     		.value	0x789
+ 19536 643d 39660000 		.long	0x6639
+ 19537 6441 31       		.uleb128 0x31
+ 19538 6442 A10D0000 		.long	0xda1
+ 19539 6446 03       		.byte	0x3
+ 19540 6447 91       		.byte	0x91
+ 19541 6448 8062     		.sleb128 -3840
+ 19542 644a 32       		.uleb128 0x32
+ 19543 644b 00000000 		.quad	.LBB1931
+ 19543      00000000 
+ 19544 6453 00000000 		.quad	.LBE1931
+ 19544      00000000 
+ 19545 645b 33       		.uleb128 0x33
+ 19546 645c AD0D0000 		.long	0xdad
+
GAS LISTING /tmp/ccPaCTqg.s 			page 511
+
+
+ 19547 6460 03       		.byte	0x3
+ 19548 6461 76       		.byte	0x76
+ 19549 6462 9055     		.sleb128 -5488
+ 19550 6464 30       		.uleb128 0x30
+ 19551 6465 BA0D0000 		.long	0xdba
+ 19552 6469 00000000 		.quad	.LBB1932
+ 19552      00000000 
+ 19553 6471 00000000 		.quad	.LBE1932
+ 19553      00000000 
+ 19554 6479 03       		.byte	0x3
+ 19555 647a 1F06     		.value	0x61f
+ 19556 647c 01650000 		.long	0x6501
+ 19557 6480 31       		.uleb128 0x31
+ 19558 6481 CC0D0000 		.long	0xdcc
+ 19559 6485 03       		.byte	0x3
+ 19560 6486 91       		.byte	0x91
+ 19561 6487 9062     		.sleb128 -3824
+ 19562 6489 32       		.uleb128 0x32
+ 19563 648a 00000000 		.quad	.LBB1933
+ 19563      00000000 
+ 19564 6492 00000000 		.quad	.LBE1933
+ 19564      00000000 
+ 19565 649a 33       		.uleb128 0x33
+ 19566 649b D80D0000 		.long	0xdd8
+ 19567 649f 09       		.byte	0x9
+ 19568 64a0 03       		.byte	0x3
+ 19569 64a1 00000000 		.quad	mask.8002
+ 19569      00000000 
+ 19570 64a9 34       		.uleb128 0x34
+ 19571 64aa FB0D0000 		.long	0xdfb
+ 19572 64ae 00000000 		.quad	.LBB1934
+ 19572      00000000 
+ 19573 64b6 00000000 		.quad	.LBE1934
+ 19573      00000000 
+ 19574 64be 03       		.byte	0x3
+ 19575 64bf FE04     		.value	0x4fe
+ 19576 64c1 31       		.uleb128 0x31
+ 19577 64c2 190E0000 		.long	0xe19
+ 19578 64c6 03       		.byte	0x3
+ 19579 64c7 91       		.byte	0x91
+ 19580 64c8 A062     		.sleb128 -3808
+ 19581 64ca 31       		.uleb128 0x31
+ 19582 64cb 0D0E0000 		.long	0xe0d
+ 19583 64cf 03       		.byte	0x3
+ 19584 64d0 91       		.byte	0x91
+ 19585 64d1 B062     		.sleb128 -3792
+ 19586 64d3 34       		.uleb128 0x34
+ 19587 64d4 260E0000 		.long	0xe26
+ 19588 64d8 00000000 		.quad	.LBB1936
+ 19588      00000000 
+ 19589 64e0 00000000 		.quad	.LBE1936
+ 19589      00000000 
+ 19590 64e8 03       		.byte	0x3
+ 19591 64e9 7501     		.value	0x175
+ 19592 64eb 31       		.uleb128 0x31
+ 19593 64ec 440E0000 		.long	0xe44
+ 19594 64f0 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 512
+
+
+ 19595 64f1 91       		.byte	0x91
+ 19596 64f2 C062     		.sleb128 -3776
+ 19597 64f4 31       		.uleb128 0x31
+ 19598 64f5 380E0000 		.long	0xe38
+ 19599 64f9 03       		.byte	0x3
+ 19600 64fa 91       		.byte	0x91
+ 19601 64fb D062     		.sleb128 -3760
+ 19602 64fd 00       		.byte	0x0
+ 19603 64fe 00       		.byte	0x0
+ 19604 64ff 00       		.byte	0x0
+ 19605 6500 00       		.byte	0x0
+ 19606 6501 30       		.uleb128 0x30
+ 19607 6502 BA0D0000 		.long	0xdba
+ 19608 6506 00000000 		.quad	.LBB1938
+ 19608      00000000 
+ 19609 650e 00000000 		.quad	.LBE1938
+ 19609      00000000 
+ 19610 6516 03       		.byte	0x3
+ 19611 6517 2006     		.value	0x620
+ 19612 6519 9E650000 		.long	0x659e
+ 19613 651d 31       		.uleb128 0x31
+ 19614 651e CC0D0000 		.long	0xdcc
+ 19615 6522 03       		.byte	0x3
+ 19616 6523 91       		.byte	0x91
+ 19617 6524 E062     		.sleb128 -3744
+ 19618 6526 32       		.uleb128 0x32
+ 19619 6527 00000000 		.quad	.LBB1939
+ 19619      00000000 
+ 19620 652f 00000000 		.quad	.LBE1939
+ 19620      00000000 
+ 19621 6537 33       		.uleb128 0x33
+ 19622 6538 D80D0000 		.long	0xdd8
+ 19623 653c 09       		.byte	0x9
+ 19624 653d 03       		.byte	0x3
+ 19625 653e 00000000 		.quad	mask.8002
+ 19625      00000000 
+ 19626 6546 34       		.uleb128 0x34
+ 19627 6547 FB0D0000 		.long	0xdfb
+ 19628 654b 00000000 		.quad	.LBB1940
+ 19628      00000000 
+ 19629 6553 00000000 		.quad	.LBE1940
+ 19629      00000000 
+ 19630 655b 03       		.byte	0x3
+ 19631 655c FE04     		.value	0x4fe
+ 19632 655e 31       		.uleb128 0x31
+ 19633 655f 190E0000 		.long	0xe19
+ 19634 6563 03       		.byte	0x3
+ 19635 6564 91       		.byte	0x91
+ 19636 6565 F062     		.sleb128 -3728
+ 19637 6567 31       		.uleb128 0x31
+ 19638 6568 0D0E0000 		.long	0xe0d
+ 19639 656c 03       		.byte	0x3
+ 19640 656d 91       		.byte	0x91
+ 19641 656e 8063     		.sleb128 -3712
+ 19642 6570 34       		.uleb128 0x34
+ 19643 6571 260E0000 		.long	0xe26
+ 19644 6575 00000000 		.quad	.LBB1942
+
GAS LISTING /tmp/ccPaCTqg.s 			page 513
+
+
+ 19644      00000000 
+ 19645 657d 00000000 		.quad	.LBE1942
+ 19645      00000000 
+ 19646 6585 03       		.byte	0x3
+ 19647 6586 7501     		.value	0x175
+ 19648 6588 31       		.uleb128 0x31
+ 19649 6589 440E0000 		.long	0xe44
+ 19650 658d 03       		.byte	0x3
+ 19651 658e 91       		.byte	0x91
+ 19652 658f 9063     		.sleb128 -3696
+ 19653 6591 31       		.uleb128 0x31
+ 19654 6592 380E0000 		.long	0xe38
+ 19655 6596 03       		.byte	0x3
+ 19656 6597 91       		.byte	0x91
+ 19657 6598 A063     		.sleb128 -3680
+ 19658 659a 00       		.byte	0x0
+ 19659 659b 00       		.byte	0x0
+ 19660 659c 00       		.byte	0x0
+ 19661 659d 00       		.byte	0x0
+ 19662 659e 34       		.uleb128 0x34
+ 19663 659f BA0D0000 		.long	0xdba
+ 19664 65a3 00000000 		.quad	.LBB1944
+ 19664      00000000 
+ 19665 65ab 00000000 		.quad	.LBE1944
+ 19665      00000000 
+ 19666 65b3 03       		.byte	0x3
+ 19667 65b4 2106     		.value	0x621
+ 19668 65b6 31       		.uleb128 0x31
+ 19669 65b7 CC0D0000 		.long	0xdcc
+ 19670 65bb 03       		.byte	0x3
+ 19671 65bc 91       		.byte	0x91
+ 19672 65bd B063     		.sleb128 -3664
+ 19673 65bf 32       		.uleb128 0x32
+ 19674 65c0 00000000 		.quad	.LBB1945
+ 19674      00000000 
+ 19675 65c8 00000000 		.quad	.LBE1945
+ 19675      00000000 
+ 19676 65d0 33       		.uleb128 0x33
+ 19677 65d1 D80D0000 		.long	0xdd8
+ 19678 65d5 09       		.byte	0x9
+ 19679 65d6 03       		.byte	0x3
+ 19680 65d7 00000000 		.quad	mask.8002
+ 19680      00000000 
+ 19681 65df 34       		.uleb128 0x34
+ 19682 65e0 FB0D0000 		.long	0xdfb
+ 19683 65e4 00000000 		.quad	.LBB1946
+ 19683      00000000 
+ 19684 65ec 00000000 		.quad	.LBE1946
+ 19684      00000000 
+ 19685 65f4 03       		.byte	0x3
+ 19686 65f5 FE04     		.value	0x4fe
+ 19687 65f7 31       		.uleb128 0x31
+ 19688 65f8 190E0000 		.long	0xe19
+ 19689 65fc 03       		.byte	0x3
+ 19690 65fd 91       		.byte	0x91
+ 19691 65fe C063     		.sleb128 -3648
+ 19692 6600 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s 			page 514
+
+
+ 19693 6601 0D0E0000 		.long	0xe0d
+ 19694 6605 03       		.byte	0x3
+ 19695 6606 91       		.byte	0x91
+ 19696 6607 D063     		.sleb128 -3632
+ 19697 6609 34       		.uleb128 0x34
+ 19698 660a 260E0000 		.long	0xe26
+ 19699 660e 00000000 		.quad	.LBB1948
+ 19699      00000000 
+ 19700 6616 00000000 		.quad	.LBE1948
+ 19700      00000000 
+ 19701 661e 03       		.byte	0x3
+ 19702 661f 7501     		.value	0x175
+ 19703 6621 31       		.uleb128 0x31
+ 19704 6622 440E0000 		.long	0xe44
+ 19705 6626 03       		.byte	0x3
+ 19706 6627 91       		.byte	0x91
+ 19707 6628 E063     		.sleb128 -3616
+ 19708 662a 31       		.uleb128 0x31
+ 19709 662b 380E0000 		.long	0xe38
+ 19710 662f 03       		.byte	0x3
+ 19711 6630 91       		.byte	0x91
+ 19712 6631 F063     		.sleb128 -3600
+ 19713 6633 00       		.byte	0x0
+ 19714 6634 00       		.byte	0x0
+ 19715 6635 00       		.byte	0x0
+ 19716 6636 00       		.byte	0x0
+ 19717 6637 00       		.byte	0x0
+ 19718 6638 00       		.byte	0x0
+ 19719 6639 30       		.uleb128 0x30
+ 19720 663a F7580000 		.long	0x58f7
+ 19721 663e 00000000 		.quad	.LBB1950
+ 19721      00000000 
+ 19722 6646 00000000 		.quad	.LBE1950
+ 19722      00000000 
+ 19723 664e 03       		.byte	0x3
+ 19724 664f 8907     		.value	0x789
+ 19725 6651 68660000 		.long	0x6668
+ 19726 6655 31       		.uleb128 0x31
+ 19727 6656 12590000 		.long	0x5912
+ 19728 665a 03       		.byte	0x3
+ 19729 665b 91       		.byte	0x91
+ 19730 665c 8064     		.sleb128 -3584
+ 19731 665e 31       		.uleb128 0x31
+ 19732 665f 08590000 		.long	0x5908
+ 19733 6663 03       		.byte	0x3
+ 19734 6664 91       		.byte	0x91
+ 19735 6665 9064     		.sleb128 -3568
+ 19736 6667 00       		.byte	0x0
+ 19737 6668 30       		.uleb128 0x30
+ 19738 6669 E30C0000 		.long	0xce3
+ 19739 666d 00000000 		.quad	.LBB1952
+ 19739      00000000 
+ 19740 6675 00000000 		.quad	.LBE1952
+ 19740      00000000 
+ 19741 667d 03       		.byte	0x3
+ 19742 667e 8A07     		.value	0x78a
+ 19743 6680 2E670000 		.long	0x672e
+
GAS LISTING /tmp/ccPaCTqg.s 			page 515
+
+
+ 19744 6684 31       		.uleb128 0x31
+ 19745 6685 010D0000 		.long	0xd01
+ 19746 6689 03       		.byte	0x3
+ 19747 668a 91       		.byte	0x91
+ 19748 668b AC64     		.sleb128 -3540
+ 19749 668d 31       		.uleb128 0x31
+ 19750 668e F50C0000 		.long	0xcf5
+ 19751 6692 03       		.byte	0x3
+ 19752 6693 91       		.byte	0x91
+ 19753 6694 B064     		.sleb128 -3536
+ 19754 6696 32       		.uleb128 0x32
+ 19755 6697 00000000 		.quad	.LBB1953
+ 19755      00000000 
+ 19756 669f 00000000 		.quad	.LBE1953
+ 19756      00000000 
+ 19757 66a7 33       		.uleb128 0x33
+ 19758 66a8 0D0D0000 		.long	0xd0d
+ 19759 66ac 03       		.byte	0x3
+ 19760 66ad 76       		.byte	0x76
+ 19761 66ae A055     		.sleb128 -5472
+ 19762 66b0 30       		.uleb128 0x30
+ 19763 66b1 1A0D0000 		.long	0xd1a
+ 19764 66b5 00000000 		.quad	.LBB1954
+ 19764      00000000 
+ 19765 66bd 00000000 		.quad	.LBE1954
+ 19765      00000000 
+ 19766 66c5 03       		.byte	0x3
+ 19767 66c6 8A06     		.value	0x68a
+ 19768 66c8 DF660000 		.long	0x66df
+ 19769 66cc 31       		.uleb128 0x31
+ 19770 66cd 380D0000 		.long	0xd38
+ 19771 66d1 03       		.byte	0x3
+ 19772 66d2 91       		.byte	0x91
+ 19773 66d3 CC64     		.sleb128 -3508
+ 19774 66d5 31       		.uleb128 0x31
+ 19775 66d6 2C0D0000 		.long	0xd2c
+ 19776 66da 03       		.byte	0x3
+ 19777 66db 91       		.byte	0x91
+ 19778 66dc D064     		.sleb128 -3504
+ 19779 66de 00       		.byte	0x0
+ 19780 66df 34       		.uleb128 0x34
+ 19781 66e0 450D0000 		.long	0xd45
+ 19782 66e4 00000000 		.quad	.LBB1956
+ 19782      00000000 
+ 19783 66ec 00000000 		.quad	.LBE1956
+ 19783      00000000 
+ 19784 66f4 03       		.byte	0x3
+ 19785 66f5 8B06     		.value	0x68b
+ 19786 66f7 31       		.uleb128 0x31
+ 19787 66f8 570D0000 		.long	0xd57
+ 19788 66fc 03       		.byte	0x3
+ 19789 66fd 91       		.byte	0x91
+ 19790 66fe E064     		.sleb128 -3488
+ 19791 6700 34       		.uleb128 0x34
+ 19792 6701 640D0000 		.long	0xd64
+ 19793 6705 00000000 		.quad	.LBB1958
+ 19793      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 516
+
+
+ 19794 670d 00000000 		.quad	.LBE1958
+ 19794      00000000 
+ 19795 6715 03       		.byte	0x3
+ 19796 6716 4905     		.value	0x549
+ 19797 6718 31       		.uleb128 0x31
+ 19798 6719 820D0000 		.long	0xd82
+ 19799 671d 03       		.byte	0x3
+ 19800 671e 91       		.byte	0x91
+ 19801 671f FC64     		.sleb128 -3460
+ 19802 6721 31       		.uleb128 0x31
+ 19803 6722 760D0000 		.long	0xd76
+ 19804 6726 03       		.byte	0x3
+ 19805 6727 91       		.byte	0x91
+ 19806 6728 8065     		.sleb128 -3456
+ 19807 672a 00       		.byte	0x0
+ 19808 672b 00       		.byte	0x0
+ 19809 672c 00       		.byte	0x0
+ 19810 672d 00       		.byte	0x0
+ 19811 672e 30       		.uleb128 0x30
+ 19812 672f 8F0D0000 		.long	0xd8f
+ 19813 6733 00000000 		.quad	.LBB1960
+ 19813      00000000 
+ 19814 673b 00000000 		.quad	.LBE1960
+ 19814      00000000 
+ 19815 6743 03       		.byte	0x3
+ 19816 6744 8A07     		.value	0x78a
+ 19817 6746 42690000 		.long	0x6942
+ 19818 674a 31       		.uleb128 0x31
+ 19819 674b A10D0000 		.long	0xda1
+ 19820 674f 03       		.byte	0x3
+ 19821 6750 91       		.byte	0x91
+ 19822 6751 9065     		.sleb128 -3440
+ 19823 6753 32       		.uleb128 0x32
+ 19824 6754 00000000 		.quad	.LBB1961
+ 19824      00000000 
+ 19825 675c 00000000 		.quad	.LBE1961
+ 19825      00000000 
+ 19826 6764 33       		.uleb128 0x33
+ 19827 6765 AD0D0000 		.long	0xdad
+ 19828 6769 03       		.byte	0x3
+ 19829 676a 76       		.byte	0x76
+ 19830 676b B055     		.sleb128 -5456
+ 19831 676d 30       		.uleb128 0x30
+ 19832 676e BA0D0000 		.long	0xdba
+ 19833 6772 00000000 		.quad	.LBB1962
+ 19833      00000000 
+ 19834 677a 00000000 		.quad	.LBE1962
+ 19834      00000000 
+ 19835 6782 03       		.byte	0x3
+ 19836 6783 1F06     		.value	0x61f
+ 19837 6785 0A680000 		.long	0x680a
+ 19838 6789 31       		.uleb128 0x31
+ 19839 678a CC0D0000 		.long	0xdcc
+ 19840 678e 03       		.byte	0x3
+ 19841 678f 91       		.byte	0x91
+ 19842 6790 A065     		.sleb128 -3424
+ 19843 6792 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccPaCTqg.s 			page 517
+
+
+ 19844 6793 00000000 		.quad	.LBB1963
+ 19844      00000000 
+ 19845 679b 00000000 		.quad	.LBE1963
+ 19845      00000000 
+ 19846 67a3 33       		.uleb128 0x33
+ 19847 67a4 D80D0000 		.long	0xdd8
+ 19848 67a8 09       		.byte	0x9
+ 19849 67a9 03       		.byte	0x3
+ 19850 67aa 00000000 		.quad	mask.8002
+ 19850      00000000 
+ 19851 67b2 34       		.uleb128 0x34
+ 19852 67b3 FB0D0000 		.long	0xdfb
+ 19853 67b7 00000000 		.quad	.LBB1964
+ 19853      00000000 
+ 19854 67bf 00000000 		.quad	.LBE1964
+ 19854      00000000 
+ 19855 67c7 03       		.byte	0x3
+ 19856 67c8 FE04     		.value	0x4fe
+ 19857 67ca 31       		.uleb128 0x31
+ 19858 67cb 190E0000 		.long	0xe19
+ 19859 67cf 03       		.byte	0x3
+ 19860 67d0 91       		.byte	0x91
+ 19861 67d1 B065     		.sleb128 -3408
+ 19862 67d3 31       		.uleb128 0x31
+ 19863 67d4 0D0E0000 		.long	0xe0d
+ 19864 67d8 03       		.byte	0x3
+ 19865 67d9 91       		.byte	0x91
+ 19866 67da C065     		.sleb128 -3392
+ 19867 67dc 34       		.uleb128 0x34
+ 19868 67dd 260E0000 		.long	0xe26
+ 19869 67e1 00000000 		.quad	.LBB1966
+ 19869      00000000 
+ 19870 67e9 00000000 		.quad	.LBE1966
+ 19870      00000000 
+ 19871 67f1 03       		.byte	0x3
+ 19872 67f2 7501     		.value	0x175
+ 19873 67f4 31       		.uleb128 0x31
+ 19874 67f5 440E0000 		.long	0xe44
+ 19875 67f9 03       		.byte	0x3
+ 19876 67fa 91       		.byte	0x91
+ 19877 67fb D065     		.sleb128 -3376
+ 19878 67fd 31       		.uleb128 0x31
+ 19879 67fe 380E0000 		.long	0xe38
+ 19880 6802 03       		.byte	0x3
+ 19881 6803 91       		.byte	0x91
+ 19882 6804 E065     		.sleb128 -3360
+ 19883 6806 00       		.byte	0x0
+ 19884 6807 00       		.byte	0x0
+ 19885 6808 00       		.byte	0x0
+ 19886 6809 00       		.byte	0x0
+ 19887 680a 30       		.uleb128 0x30
+ 19888 680b BA0D0000 		.long	0xdba
+ 19889 680f 00000000 		.quad	.LBB1968
+ 19889      00000000 
+ 19890 6817 00000000 		.quad	.LBE1968
+ 19890      00000000 
+ 19891 681f 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 518
+
+
+ 19892 6820 2006     		.value	0x620
+ 19893 6822 A7680000 		.long	0x68a7
+ 19894 6826 31       		.uleb128 0x31
+ 19895 6827 CC0D0000 		.long	0xdcc
+ 19896 682b 03       		.byte	0x3
+ 19897 682c 91       		.byte	0x91
+ 19898 682d F065     		.sleb128 -3344
+ 19899 682f 32       		.uleb128 0x32
+ 19900 6830 00000000 		.quad	.LBB1969
+ 19900      00000000 
+ 19901 6838 00000000 		.quad	.LBE1969
+ 19901      00000000 
+ 19902 6840 33       		.uleb128 0x33
+ 19903 6841 D80D0000 		.long	0xdd8
+ 19904 6845 09       		.byte	0x9
+ 19905 6846 03       		.byte	0x3
+ 19906 6847 00000000 		.quad	mask.8002
+ 19906      00000000 
+ 19907 684f 34       		.uleb128 0x34
+ 19908 6850 FB0D0000 		.long	0xdfb
+ 19909 6854 00000000 		.quad	.LBB1970
+ 19909      00000000 
+ 19910 685c 00000000 		.quad	.LBE1970
+ 19910      00000000 
+ 19911 6864 03       		.byte	0x3
+ 19912 6865 FE04     		.value	0x4fe
+ 19913 6867 31       		.uleb128 0x31
+ 19914 6868 190E0000 		.long	0xe19
+ 19915 686c 03       		.byte	0x3
+ 19916 686d 91       		.byte	0x91
+ 19917 686e 8066     		.sleb128 -3328
+ 19918 6870 31       		.uleb128 0x31
+ 19919 6871 0D0E0000 		.long	0xe0d
+ 19920 6875 03       		.byte	0x3
+ 19921 6876 91       		.byte	0x91
+ 19922 6877 9066     		.sleb128 -3312
+ 19923 6879 34       		.uleb128 0x34
+ 19924 687a 260E0000 		.long	0xe26
+ 19925 687e 00000000 		.quad	.LBB1972
+ 19925      00000000 
+ 19926 6886 00000000 		.quad	.LBE1972
+ 19926      00000000 
+ 19927 688e 03       		.byte	0x3
+ 19928 688f 7501     		.value	0x175
+ 19929 6891 31       		.uleb128 0x31
+ 19930 6892 440E0000 		.long	0xe44
+ 19931 6896 03       		.byte	0x3
+ 19932 6897 91       		.byte	0x91
+ 19933 6898 A066     		.sleb128 -3296
+ 19934 689a 31       		.uleb128 0x31
+ 19935 689b 380E0000 		.long	0xe38
+ 19936 689f 03       		.byte	0x3
+ 19937 68a0 91       		.byte	0x91
+ 19938 68a1 B066     		.sleb128 -3280
+ 19939 68a3 00       		.byte	0x0
+ 19940 68a4 00       		.byte	0x0
+ 19941 68a5 00       		.byte	0x0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 519
+
+
+ 19942 68a6 00       		.byte	0x0
+ 19943 68a7 34       		.uleb128 0x34
+ 19944 68a8 BA0D0000 		.long	0xdba
+ 19945 68ac 00000000 		.quad	.LBB1974
+ 19945      00000000 
+ 19946 68b4 00000000 		.quad	.LBE1974
+ 19946      00000000 
+ 19947 68bc 03       		.byte	0x3
+ 19948 68bd 2106     		.value	0x621
+ 19949 68bf 31       		.uleb128 0x31
+ 19950 68c0 CC0D0000 		.long	0xdcc
+ 19951 68c4 03       		.byte	0x3
+ 19952 68c5 91       		.byte	0x91
+ 19953 68c6 C066     		.sleb128 -3264
+ 19954 68c8 32       		.uleb128 0x32
+ 19955 68c9 00000000 		.quad	.LBB1975
+ 19955      00000000 
+ 19956 68d1 00000000 		.quad	.LBE1975
+ 19956      00000000 
+ 19957 68d9 33       		.uleb128 0x33
+ 19958 68da D80D0000 		.long	0xdd8
+ 19959 68de 09       		.byte	0x9
+ 19960 68df 03       		.byte	0x3
+ 19961 68e0 00000000 		.quad	mask.8002
+ 19961      00000000 
+ 19962 68e8 34       		.uleb128 0x34
+ 19963 68e9 FB0D0000 		.long	0xdfb
+ 19964 68ed 00000000 		.quad	.LBB1976
+ 19964      00000000 
+ 19965 68f5 00000000 		.quad	.LBE1976
+ 19965      00000000 
+ 19966 68fd 03       		.byte	0x3
+ 19967 68fe FE04     		.value	0x4fe
+ 19968 6900 31       		.uleb128 0x31
+ 19969 6901 190E0000 		.long	0xe19
+ 19970 6905 03       		.byte	0x3
+ 19971 6906 91       		.byte	0x91
+ 19972 6907 D066     		.sleb128 -3248
+ 19973 6909 31       		.uleb128 0x31
+ 19974 690a 0D0E0000 		.long	0xe0d
+ 19975 690e 03       		.byte	0x3
+ 19976 690f 91       		.byte	0x91
+ 19977 6910 E066     		.sleb128 -3232
+ 19978 6912 34       		.uleb128 0x34
+ 19979 6913 260E0000 		.long	0xe26
+ 19980 6917 00000000 		.quad	.LBB1978
+ 19980      00000000 
+ 19981 691f 00000000 		.quad	.LBE1978
+ 19981      00000000 
+ 19982 6927 03       		.byte	0x3
+ 19983 6928 7501     		.value	0x175
+ 19984 692a 31       		.uleb128 0x31
+ 19985 692b 440E0000 		.long	0xe44
+ 19986 692f 03       		.byte	0x3
+ 19987 6930 91       		.byte	0x91
+ 19988 6931 F066     		.sleb128 -3216
+ 19989 6933 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s 			page 520
+
+
+ 19990 6934 380E0000 		.long	0xe38
+ 19991 6938 03       		.byte	0x3
+ 19992 6939 91       		.byte	0x91
+ 19993 693a 8067     		.sleb128 -3200
+ 19994 693c 00       		.byte	0x0
+ 19995 693d 00       		.byte	0x0
+ 19996 693e 00       		.byte	0x0
+ 19997 693f 00       		.byte	0x0
+ 19998 6940 00       		.byte	0x0
+ 19999 6941 00       		.byte	0x0
+ 20000 6942 30       		.uleb128 0x30
+ 20001 6943 F7580000 		.long	0x58f7
+ 20002 6947 00000000 		.quad	.LBB1980
+ 20002      00000000 
+ 20003 694f 00000000 		.quad	.LBE1980
+ 20003      00000000 
+ 20004 6957 03       		.byte	0x3
+ 20005 6958 8A07     		.value	0x78a
+ 20006 695a 71690000 		.long	0x6971
+ 20007 695e 31       		.uleb128 0x31
+ 20008 695f 12590000 		.long	0x5912
+ 20009 6963 03       		.byte	0x3
+ 20010 6964 91       		.byte	0x91
+ 20011 6965 9067     		.sleb128 -3184
+ 20012 6967 31       		.uleb128 0x31
+ 20013 6968 08590000 		.long	0x5908
+ 20014 696c 03       		.byte	0x3
+ 20015 696d 91       		.byte	0x91
+ 20016 696e A067     		.sleb128 -3168
+ 20017 6970 00       		.byte	0x0
+ 20018 6971 30       		.uleb128 0x30
+ 20019 6972 1D590000 		.long	0x591d
+ 20020 6976 00000000 		.quad	.LBB1982
+ 20020      00000000 
+ 20021 697e 00000000 		.quad	.LBE1982
+ 20021      00000000 
+ 20022 6986 03       		.byte	0x3
+ 20023 6987 8B07     		.value	0x78b
+ 20024 6989 2E6A0000 		.long	0x6a2e
+ 20025 698d 31       		.uleb128 0x31
+ 20026 698e 2F590000 		.long	0x592f
+ 20027 6992 03       		.byte	0x3
+ 20028 6993 91       		.byte	0x91
+ 20029 6994 B067     		.sleb128 -3152
+ 20030 6996 32       		.uleb128 0x32
+ 20031 6997 00000000 		.quad	.LBB1983
+ 20031      00000000 
+ 20032 699f 00000000 		.quad	.LBE1983
+ 20032      00000000 
+ 20033 69a7 33       		.uleb128 0x33
+ 20034 69a8 3B590000 		.long	0x593b
+ 20035 69ac 03       		.byte	0x3
+ 20036 69ad 76       		.byte	0x76
+ 20037 69ae C055     		.sleb128 -5440
+ 20038 69b0 30       		.uleb128 0x30
+ 20039 69b1 1A0D0000 		.long	0xd1a
+ 20040 69b5 00000000 		.quad	.LBB1984
+
GAS LISTING /tmp/ccPaCTqg.s 			page 521
+
+
+ 20040      00000000 
+ 20041 69bd 00000000 		.quad	.LBE1984
+ 20041      00000000 
+ 20042 69c5 03       		.byte	0x3
+ 20043 69c6 7206     		.value	0x672
+ 20044 69c8 DF690000 		.long	0x69df
+ 20045 69cc 31       		.uleb128 0x31
+ 20046 69cd 380D0000 		.long	0xd38
+ 20047 69d1 03       		.byte	0x3
+ 20048 69d2 91       		.byte	0x91
+ 20049 69d3 CC67     		.sleb128 -3124
+ 20050 69d5 31       		.uleb128 0x31
+ 20051 69d6 2C0D0000 		.long	0xd2c
+ 20052 69da 03       		.byte	0x3
+ 20053 69db 91       		.byte	0x91
+ 20054 69dc D067     		.sleb128 -3120
+ 20055 69de 00       		.byte	0x0
+ 20056 69df 34       		.uleb128 0x34
+ 20057 69e0 48590000 		.long	0x5948
+ 20058 69e4 00000000 		.quad	.LBB1986
+ 20058      00000000 
+ 20059 69ec 00000000 		.quad	.LBE1986
+ 20059      00000000 
+ 20060 69f4 03       		.byte	0x3
+ 20061 69f5 7306     		.value	0x673
+ 20062 69f7 31       		.uleb128 0x31
+ 20063 69f8 5A590000 		.long	0x595a
+ 20064 69fc 03       		.byte	0x3
+ 20065 69fd 91       		.byte	0x91
+ 20066 69fe E067     		.sleb128 -3104
+ 20067 6a00 34       		.uleb128 0x34
+ 20068 6a01 640D0000 		.long	0xd64
+ 20069 6a05 00000000 		.quad	.LBB1988
+ 20069      00000000 
+ 20070 6a0d 00000000 		.quad	.LBE1988
+ 20070      00000000 
+ 20071 6a15 03       		.byte	0x3
+ 20072 6a16 6505     		.value	0x565
+ 20073 6a18 31       		.uleb128 0x31
+ 20074 6a19 820D0000 		.long	0xd82
+ 20075 6a1d 03       		.byte	0x3
+ 20076 6a1e 91       		.byte	0x91
+ 20077 6a1f FC67     		.sleb128 -3076
+ 20078 6a21 31       		.uleb128 0x31
+ 20079 6a22 760D0000 		.long	0xd76
+ 20080 6a26 03       		.byte	0x3
+ 20081 6a27 91       		.byte	0x91
+ 20082 6a28 8068     		.sleb128 -3072
+ 20083 6a2a 00       		.byte	0x0
+ 20084 6a2b 00       		.byte	0x0
+ 20085 6a2c 00       		.byte	0x0
+ 20086 6a2d 00       		.byte	0x0
+ 20087 6a2e 30       		.uleb128 0x30
+ 20088 6a2f 8F0D0000 		.long	0xd8f
+ 20089 6a33 00000000 		.quad	.LBB1990
+ 20089      00000000 
+ 20090 6a3b 00000000 		.quad	.LBE1990
+
GAS LISTING /tmp/ccPaCTqg.s 			page 522
+
+
+ 20090      00000000 
+ 20091 6a43 03       		.byte	0x3
+ 20092 6a44 8B07     		.value	0x78b
+ 20093 6a46 426C0000 		.long	0x6c42
+ 20094 6a4a 31       		.uleb128 0x31
+ 20095 6a4b A10D0000 		.long	0xda1
+ 20096 6a4f 03       		.byte	0x3
+ 20097 6a50 91       		.byte	0x91
+ 20098 6a51 9068     		.sleb128 -3056
+ 20099 6a53 32       		.uleb128 0x32
+ 20100 6a54 00000000 		.quad	.LBB1991
+ 20100      00000000 
+ 20101 6a5c 00000000 		.quad	.LBE1991
+ 20101      00000000 
+ 20102 6a64 33       		.uleb128 0x33
+ 20103 6a65 AD0D0000 		.long	0xdad
+ 20104 6a69 03       		.byte	0x3
+ 20105 6a6a 76       		.byte	0x76
+ 20106 6a6b D055     		.sleb128 -5424
+ 20107 6a6d 30       		.uleb128 0x30
+ 20108 6a6e BA0D0000 		.long	0xdba
+ 20109 6a72 00000000 		.quad	.LBB1992
+ 20109      00000000 
+ 20110 6a7a 00000000 		.quad	.LBE1992
+ 20110      00000000 
+ 20111 6a82 03       		.byte	0x3
+ 20112 6a83 1F06     		.value	0x61f
+ 20113 6a85 0A6B0000 		.long	0x6b0a
+ 20114 6a89 31       		.uleb128 0x31
+ 20115 6a8a CC0D0000 		.long	0xdcc
+ 20116 6a8e 03       		.byte	0x3
+ 20117 6a8f 91       		.byte	0x91
+ 20118 6a90 A068     		.sleb128 -3040
+ 20119 6a92 32       		.uleb128 0x32
+ 20120 6a93 00000000 		.quad	.LBB1993
+ 20120      00000000 
+ 20121 6a9b 00000000 		.quad	.LBE1993
+ 20121      00000000 
+ 20122 6aa3 33       		.uleb128 0x33
+ 20123 6aa4 D80D0000 		.long	0xdd8
+ 20124 6aa8 09       		.byte	0x9
+ 20125 6aa9 03       		.byte	0x3
+ 20126 6aaa 00000000 		.quad	mask.8002
+ 20126      00000000 
+ 20127 6ab2 34       		.uleb128 0x34
+ 20128 6ab3 FB0D0000 		.long	0xdfb
+ 20129 6ab7 00000000 		.quad	.LBB1994
+ 20129      00000000 
+ 20130 6abf 00000000 		.quad	.LBE1994
+ 20130      00000000 
+ 20131 6ac7 03       		.byte	0x3
+ 20132 6ac8 FE04     		.value	0x4fe
+ 20133 6aca 31       		.uleb128 0x31
+ 20134 6acb 190E0000 		.long	0xe19
+ 20135 6acf 03       		.byte	0x3
+ 20136 6ad0 91       		.byte	0x91
+ 20137 6ad1 B068     		.sleb128 -3024
+
GAS LISTING /tmp/ccPaCTqg.s 			page 523
+
+
+ 20138 6ad3 31       		.uleb128 0x31
+ 20139 6ad4 0D0E0000 		.long	0xe0d
+ 20140 6ad8 03       		.byte	0x3
+ 20141 6ad9 91       		.byte	0x91
+ 20142 6ada C068     		.sleb128 -3008
+ 20143 6adc 34       		.uleb128 0x34
+ 20144 6add 260E0000 		.long	0xe26
+ 20145 6ae1 00000000 		.quad	.LBB1996
+ 20145      00000000 
+ 20146 6ae9 00000000 		.quad	.LBE1996
+ 20146      00000000 
+ 20147 6af1 03       		.byte	0x3
+ 20148 6af2 7501     		.value	0x175
+ 20149 6af4 31       		.uleb128 0x31
+ 20150 6af5 440E0000 		.long	0xe44
+ 20151 6af9 03       		.byte	0x3
+ 20152 6afa 91       		.byte	0x91
+ 20153 6afb D068     		.sleb128 -2992
+ 20154 6afd 31       		.uleb128 0x31
+ 20155 6afe 380E0000 		.long	0xe38
+ 20156 6b02 03       		.byte	0x3
+ 20157 6b03 91       		.byte	0x91
+ 20158 6b04 E068     		.sleb128 -2976
+ 20159 6b06 00       		.byte	0x0
+ 20160 6b07 00       		.byte	0x0
+ 20161 6b08 00       		.byte	0x0
+ 20162 6b09 00       		.byte	0x0
+ 20163 6b0a 30       		.uleb128 0x30
+ 20164 6b0b BA0D0000 		.long	0xdba
+ 20165 6b0f 00000000 		.quad	.LBB1998
+ 20165      00000000 
+ 20166 6b17 00000000 		.quad	.LBE1998
+ 20166      00000000 
+ 20167 6b1f 03       		.byte	0x3
+ 20168 6b20 2006     		.value	0x620
+ 20169 6b22 A76B0000 		.long	0x6ba7
+ 20170 6b26 31       		.uleb128 0x31
+ 20171 6b27 CC0D0000 		.long	0xdcc
+ 20172 6b2b 03       		.byte	0x3
+ 20173 6b2c 91       		.byte	0x91
+ 20174 6b2d F068     		.sleb128 -2960
+ 20175 6b2f 32       		.uleb128 0x32
+ 20176 6b30 00000000 		.quad	.LBB1999
+ 20176      00000000 
+ 20177 6b38 00000000 		.quad	.LBE1999
+ 20177      00000000 
+ 20178 6b40 33       		.uleb128 0x33
+ 20179 6b41 D80D0000 		.long	0xdd8
+ 20180 6b45 09       		.byte	0x9
+ 20181 6b46 03       		.byte	0x3
+ 20182 6b47 00000000 		.quad	mask.8002
+ 20182      00000000 
+ 20183 6b4f 34       		.uleb128 0x34
+ 20184 6b50 FB0D0000 		.long	0xdfb
+ 20185 6b54 00000000 		.quad	.LBB2000
+ 20185      00000000 
+ 20186 6b5c 00000000 		.quad	.LBE2000
+
GAS LISTING /tmp/ccPaCTqg.s 			page 524
+
+
+ 20186      00000000 
+ 20187 6b64 03       		.byte	0x3
+ 20188 6b65 FE04     		.value	0x4fe
+ 20189 6b67 31       		.uleb128 0x31
+ 20190 6b68 190E0000 		.long	0xe19
+ 20191 6b6c 03       		.byte	0x3
+ 20192 6b6d 91       		.byte	0x91
+ 20193 6b6e 8069     		.sleb128 -2944
+ 20194 6b70 31       		.uleb128 0x31
+ 20195 6b71 0D0E0000 		.long	0xe0d
+ 20196 6b75 03       		.byte	0x3
+ 20197 6b76 91       		.byte	0x91
+ 20198 6b77 9069     		.sleb128 -2928
+ 20199 6b79 34       		.uleb128 0x34
+ 20200 6b7a 260E0000 		.long	0xe26
+ 20201 6b7e 00000000 		.quad	.LBB2002
+ 20201      00000000 
+ 20202 6b86 00000000 		.quad	.LBE2002
+ 20202      00000000 
+ 20203 6b8e 03       		.byte	0x3
+ 20204 6b8f 7501     		.value	0x175
+ 20205 6b91 31       		.uleb128 0x31
+ 20206 6b92 440E0000 		.long	0xe44
+ 20207 6b96 03       		.byte	0x3
+ 20208 6b97 91       		.byte	0x91
+ 20209 6b98 A069     		.sleb128 -2912
+ 20210 6b9a 31       		.uleb128 0x31
+ 20211 6b9b 380E0000 		.long	0xe38
+ 20212 6b9f 03       		.byte	0x3
+ 20213 6ba0 91       		.byte	0x91
+ 20214 6ba1 B069     		.sleb128 -2896
+ 20215 6ba3 00       		.byte	0x0
+ 20216 6ba4 00       		.byte	0x0
+ 20217 6ba5 00       		.byte	0x0
+ 20218 6ba6 00       		.byte	0x0
+ 20219 6ba7 34       		.uleb128 0x34
+ 20220 6ba8 BA0D0000 		.long	0xdba
+ 20221 6bac 00000000 		.quad	.LBB2004
+ 20221      00000000 
+ 20222 6bb4 00000000 		.quad	.LBE2004
+ 20222      00000000 
+ 20223 6bbc 03       		.byte	0x3
+ 20224 6bbd 2106     		.value	0x621
+ 20225 6bbf 31       		.uleb128 0x31
+ 20226 6bc0 CC0D0000 		.long	0xdcc
+ 20227 6bc4 03       		.byte	0x3
+ 20228 6bc5 91       		.byte	0x91
+ 20229 6bc6 C069     		.sleb128 -2880
+ 20230 6bc8 32       		.uleb128 0x32
+ 20231 6bc9 00000000 		.quad	.LBB2005
+ 20231      00000000 
+ 20232 6bd1 00000000 		.quad	.LBE2005
+ 20232      00000000 
+ 20233 6bd9 33       		.uleb128 0x33
+ 20234 6bda D80D0000 		.long	0xdd8
+ 20235 6bde 09       		.byte	0x9
+ 20236 6bdf 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 525
+
+
+ 20237 6be0 00000000 		.quad	mask.8002
+ 20237      00000000 
+ 20238 6be8 34       		.uleb128 0x34
+ 20239 6be9 FB0D0000 		.long	0xdfb
+ 20240 6bed 00000000 		.quad	.LBB2006
+ 20240      00000000 
+ 20241 6bf5 00000000 		.quad	.LBE2006
+ 20241      00000000 
+ 20242 6bfd 03       		.byte	0x3
+ 20243 6bfe FE04     		.value	0x4fe
+ 20244 6c00 31       		.uleb128 0x31
+ 20245 6c01 190E0000 		.long	0xe19
+ 20246 6c05 03       		.byte	0x3
+ 20247 6c06 91       		.byte	0x91
+ 20248 6c07 D069     		.sleb128 -2864
+ 20249 6c09 31       		.uleb128 0x31
+ 20250 6c0a 0D0E0000 		.long	0xe0d
+ 20251 6c0e 03       		.byte	0x3
+ 20252 6c0f 91       		.byte	0x91
+ 20253 6c10 E069     		.sleb128 -2848
+ 20254 6c12 34       		.uleb128 0x34
+ 20255 6c13 260E0000 		.long	0xe26
+ 20256 6c17 00000000 		.quad	.LBB2008
+ 20256      00000000 
+ 20257 6c1f 00000000 		.quad	.LBE2008
+ 20257      00000000 
+ 20258 6c27 03       		.byte	0x3
+ 20259 6c28 7501     		.value	0x175
+ 20260 6c2a 31       		.uleb128 0x31
+ 20261 6c2b 440E0000 		.long	0xe44
+ 20262 6c2f 03       		.byte	0x3
+ 20263 6c30 91       		.byte	0x91
+ 20264 6c31 F069     		.sleb128 -2832
+ 20265 6c33 31       		.uleb128 0x31
+ 20266 6c34 380E0000 		.long	0xe38
+ 20267 6c38 03       		.byte	0x3
+ 20268 6c39 91       		.byte	0x91
+ 20269 6c3a 806A     		.sleb128 -2816
+ 20270 6c3c 00       		.byte	0x0
+ 20271 6c3d 00       		.byte	0x0
+ 20272 6c3e 00       		.byte	0x0
+ 20273 6c3f 00       		.byte	0x0
+ 20274 6c40 00       		.byte	0x0
+ 20275 6c41 00       		.byte	0x0
+ 20276 6c42 30       		.uleb128 0x30
+ 20277 6c43 F7580000 		.long	0x58f7
+ 20278 6c47 00000000 		.quad	.LBB2010
+ 20278      00000000 
+ 20279 6c4f 00000000 		.quad	.LBE2010
+ 20279      00000000 
+ 20280 6c57 03       		.byte	0x3
+ 20281 6c58 8B07     		.value	0x78b
+ 20282 6c5a 716C0000 		.long	0x6c71
+ 20283 6c5e 31       		.uleb128 0x31
+ 20284 6c5f 12590000 		.long	0x5912
+ 20285 6c63 03       		.byte	0x3
+ 20286 6c64 91       		.byte	0x91
+
GAS LISTING /tmp/ccPaCTqg.s 			page 526
+
+
+ 20287 6c65 906A     		.sleb128 -2800
+ 20288 6c67 31       		.uleb128 0x31
+ 20289 6c68 08590000 		.long	0x5908
+ 20290 6c6c 03       		.byte	0x3
+ 20291 6c6d 91       		.byte	0x91
+ 20292 6c6e A06A     		.sleb128 -2784
+ 20293 6c70 00       		.byte	0x0
+ 20294 6c71 30       		.uleb128 0x30
+ 20295 6c72 E30C0000 		.long	0xce3
+ 20296 6c76 00000000 		.quad	.LBB2012
+ 20296      00000000 
+ 20297 6c7e 00000000 		.quad	.LBE2012
+ 20297      00000000 
+ 20298 6c86 03       		.byte	0x3
+ 20299 6c87 8C07     		.value	0x78c
+ 20300 6c89 376D0000 		.long	0x6d37
+ 20301 6c8d 31       		.uleb128 0x31
+ 20302 6c8e 010D0000 		.long	0xd01
+ 20303 6c92 03       		.byte	0x3
+ 20304 6c93 91       		.byte	0x91
+ 20305 6c94 BC6A     		.sleb128 -2756
+ 20306 6c96 31       		.uleb128 0x31
+ 20307 6c97 F50C0000 		.long	0xcf5
+ 20308 6c9b 03       		.byte	0x3
+ 20309 6c9c 91       		.byte	0x91
+ 20310 6c9d C06A     		.sleb128 -2752
+ 20311 6c9f 32       		.uleb128 0x32
+ 20312 6ca0 00000000 		.quad	.LBB2013
+ 20312      00000000 
+ 20313 6ca8 00000000 		.quad	.LBE2013
+ 20313      00000000 
+ 20314 6cb0 33       		.uleb128 0x33
+ 20315 6cb1 0D0D0000 		.long	0xd0d
+ 20316 6cb5 03       		.byte	0x3
+ 20317 6cb6 76       		.byte	0x76
+ 20318 6cb7 E055     		.sleb128 -5408
+ 20319 6cb9 30       		.uleb128 0x30
+ 20320 6cba 1A0D0000 		.long	0xd1a
+ 20321 6cbe 00000000 		.quad	.LBB2014
+ 20321      00000000 
+ 20322 6cc6 00000000 		.quad	.LBE2014
+ 20322      00000000 
+ 20323 6cce 03       		.byte	0x3
+ 20324 6ccf 8A06     		.value	0x68a
+ 20325 6cd1 E86C0000 		.long	0x6ce8
+ 20326 6cd5 31       		.uleb128 0x31
+ 20327 6cd6 380D0000 		.long	0xd38
+ 20328 6cda 03       		.byte	0x3
+ 20329 6cdb 91       		.byte	0x91
+ 20330 6cdc DC6A     		.sleb128 -2724
+ 20331 6cde 31       		.uleb128 0x31
+ 20332 6cdf 2C0D0000 		.long	0xd2c
+ 20333 6ce3 03       		.byte	0x3
+ 20334 6ce4 91       		.byte	0x91
+ 20335 6ce5 E06A     		.sleb128 -2720
+ 20336 6ce7 00       		.byte	0x0
+ 20337 6ce8 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccPaCTqg.s 			page 527
+
+
+ 20338 6ce9 450D0000 		.long	0xd45
+ 20339 6ced 00000000 		.quad	.LBB2016
+ 20339      00000000 
+ 20340 6cf5 00000000 		.quad	.LBE2016
+ 20340      00000000 
+ 20341 6cfd 03       		.byte	0x3
+ 20342 6cfe 8B06     		.value	0x68b
+ 20343 6d00 31       		.uleb128 0x31
+ 20344 6d01 570D0000 		.long	0xd57
+ 20345 6d05 03       		.byte	0x3
+ 20346 6d06 91       		.byte	0x91
+ 20347 6d07 F06A     		.sleb128 -2704
+ 20348 6d09 34       		.uleb128 0x34
+ 20349 6d0a 640D0000 		.long	0xd64
+ 20350 6d0e 00000000 		.quad	.LBB2018
+ 20350      00000000 
+ 20351 6d16 00000000 		.quad	.LBE2018
+ 20351      00000000 
+ 20352 6d1e 03       		.byte	0x3
+ 20353 6d1f 4905     		.value	0x549
+ 20354 6d21 31       		.uleb128 0x31
+ 20355 6d22 820D0000 		.long	0xd82
+ 20356 6d26 03       		.byte	0x3
+ 20357 6d27 91       		.byte	0x91
+ 20358 6d28 8C6B     		.sleb128 -2676
+ 20359 6d2a 31       		.uleb128 0x31
+ 20360 6d2b 760D0000 		.long	0xd76
+ 20361 6d2f 03       		.byte	0x3
+ 20362 6d30 91       		.byte	0x91
+ 20363 6d31 906B     		.sleb128 -2672
+ 20364 6d33 00       		.byte	0x0
+ 20365 6d34 00       		.byte	0x0
+ 20366 6d35 00       		.byte	0x0
+ 20367 6d36 00       		.byte	0x0
+ 20368 6d37 30       		.uleb128 0x30
+ 20369 6d38 8F0D0000 		.long	0xd8f
+ 20370 6d3c 00000000 		.quad	.LBB2020
+ 20370      00000000 
+ 20371 6d44 00000000 		.quad	.LBE2020
+ 20371      00000000 
+ 20372 6d4c 03       		.byte	0x3
+ 20373 6d4d 8C07     		.value	0x78c
+ 20374 6d4f 4B6F0000 		.long	0x6f4b
+ 20375 6d53 31       		.uleb128 0x31
+ 20376 6d54 A10D0000 		.long	0xda1
+ 20377 6d58 03       		.byte	0x3
+ 20378 6d59 91       		.byte	0x91
+ 20379 6d5a A06B     		.sleb128 -2656
+ 20380 6d5c 32       		.uleb128 0x32
+ 20381 6d5d 00000000 		.quad	.LBB2021
+ 20381      00000000 
+ 20382 6d65 00000000 		.quad	.LBE2021
+ 20382      00000000 
+ 20383 6d6d 33       		.uleb128 0x33
+ 20384 6d6e AD0D0000 		.long	0xdad
+ 20385 6d72 03       		.byte	0x3
+ 20386 6d73 76       		.byte	0x76
+
GAS LISTING /tmp/ccPaCTqg.s 			page 528
+
+
+ 20387 6d74 F055     		.sleb128 -5392
+ 20388 6d76 30       		.uleb128 0x30
+ 20389 6d77 BA0D0000 		.long	0xdba
+ 20390 6d7b 00000000 		.quad	.LBB2022
+ 20390      00000000 
+ 20391 6d83 00000000 		.quad	.LBE2022
+ 20391      00000000 
+ 20392 6d8b 03       		.byte	0x3
+ 20393 6d8c 1F06     		.value	0x61f
+ 20394 6d8e 136E0000 		.long	0x6e13
+ 20395 6d92 31       		.uleb128 0x31
+ 20396 6d93 CC0D0000 		.long	0xdcc
+ 20397 6d97 03       		.byte	0x3
+ 20398 6d98 91       		.byte	0x91
+ 20399 6d99 B06B     		.sleb128 -2640
+ 20400 6d9b 32       		.uleb128 0x32
+ 20401 6d9c 00000000 		.quad	.LBB2023
+ 20401      00000000 
+ 20402 6da4 00000000 		.quad	.LBE2023
+ 20402      00000000 
+ 20403 6dac 33       		.uleb128 0x33
+ 20404 6dad D80D0000 		.long	0xdd8
+ 20405 6db1 09       		.byte	0x9
+ 20406 6db2 03       		.byte	0x3
+ 20407 6db3 00000000 		.quad	mask.8002
+ 20407      00000000 
+ 20408 6dbb 34       		.uleb128 0x34
+ 20409 6dbc FB0D0000 		.long	0xdfb
+ 20410 6dc0 00000000 		.quad	.LBB2024
+ 20410      00000000 
+ 20411 6dc8 00000000 		.quad	.LBE2024
+ 20411      00000000 
+ 20412 6dd0 03       		.byte	0x3
+ 20413 6dd1 FE04     		.value	0x4fe
+ 20414 6dd3 31       		.uleb128 0x31
+ 20415 6dd4 190E0000 		.long	0xe19
+ 20416 6dd8 03       		.byte	0x3
+ 20417 6dd9 91       		.byte	0x91
+ 20418 6dda C06B     		.sleb128 -2624
+ 20419 6ddc 31       		.uleb128 0x31
+ 20420 6ddd 0D0E0000 		.long	0xe0d
+ 20421 6de1 03       		.byte	0x3
+ 20422 6de2 91       		.byte	0x91
+ 20423 6de3 D06B     		.sleb128 -2608
+ 20424 6de5 34       		.uleb128 0x34
+ 20425 6de6 260E0000 		.long	0xe26
+ 20426 6dea 00000000 		.quad	.LBB2026
+ 20426      00000000 
+ 20427 6df2 00000000 		.quad	.LBE2026
+ 20427      00000000 
+ 20428 6dfa 03       		.byte	0x3
+ 20429 6dfb 7501     		.value	0x175
+ 20430 6dfd 31       		.uleb128 0x31
+ 20431 6dfe 440E0000 		.long	0xe44
+ 20432 6e02 03       		.byte	0x3
+ 20433 6e03 91       		.byte	0x91
+ 20434 6e04 E06B     		.sleb128 -2592
+
GAS LISTING /tmp/ccPaCTqg.s 			page 529
+
+
+ 20435 6e06 31       		.uleb128 0x31
+ 20436 6e07 380E0000 		.long	0xe38
+ 20437 6e0b 03       		.byte	0x3
+ 20438 6e0c 91       		.byte	0x91
+ 20439 6e0d F06B     		.sleb128 -2576
+ 20440 6e0f 00       		.byte	0x0
+ 20441 6e10 00       		.byte	0x0
+ 20442 6e11 00       		.byte	0x0
+ 20443 6e12 00       		.byte	0x0
+ 20444 6e13 30       		.uleb128 0x30
+ 20445 6e14 BA0D0000 		.long	0xdba
+ 20446 6e18 00000000 		.quad	.LBB2028
+ 20446      00000000 
+ 20447 6e20 00000000 		.quad	.LBE2028
+ 20447      00000000 
+ 20448 6e28 03       		.byte	0x3
+ 20449 6e29 2006     		.value	0x620
+ 20450 6e2b B06E0000 		.long	0x6eb0
+ 20451 6e2f 31       		.uleb128 0x31
+ 20452 6e30 CC0D0000 		.long	0xdcc
+ 20453 6e34 03       		.byte	0x3
+ 20454 6e35 91       		.byte	0x91
+ 20455 6e36 806C     		.sleb128 -2560
+ 20456 6e38 32       		.uleb128 0x32
+ 20457 6e39 00000000 		.quad	.LBB2029
+ 20457      00000000 
+ 20458 6e41 00000000 		.quad	.LBE2029
+ 20458      00000000 
+ 20459 6e49 33       		.uleb128 0x33
+ 20460 6e4a D80D0000 		.long	0xdd8
+ 20461 6e4e 09       		.byte	0x9
+ 20462 6e4f 03       		.byte	0x3
+ 20463 6e50 00000000 		.quad	mask.8002
+ 20463      00000000 
+ 20464 6e58 34       		.uleb128 0x34
+ 20465 6e59 FB0D0000 		.long	0xdfb
+ 20466 6e5d 00000000 		.quad	.LBB2030
+ 20466      00000000 
+ 20467 6e65 00000000 		.quad	.LBE2030
+ 20467      00000000 
+ 20468 6e6d 03       		.byte	0x3
+ 20469 6e6e FE04     		.value	0x4fe
+ 20470 6e70 31       		.uleb128 0x31
+ 20471 6e71 190E0000 		.long	0xe19
+ 20472 6e75 03       		.byte	0x3
+ 20473 6e76 91       		.byte	0x91
+ 20474 6e77 906C     		.sleb128 -2544
+ 20475 6e79 31       		.uleb128 0x31
+ 20476 6e7a 0D0E0000 		.long	0xe0d
+ 20477 6e7e 03       		.byte	0x3
+ 20478 6e7f 91       		.byte	0x91
+ 20479 6e80 A06C     		.sleb128 -2528
+ 20480 6e82 34       		.uleb128 0x34
+ 20481 6e83 260E0000 		.long	0xe26
+ 20482 6e87 00000000 		.quad	.LBB2032
+ 20482      00000000 
+ 20483 6e8f 00000000 		.quad	.LBE2032
+
GAS LISTING /tmp/ccPaCTqg.s 			page 530
+
+
+ 20483      00000000 
+ 20484 6e97 03       		.byte	0x3
+ 20485 6e98 7501     		.value	0x175
+ 20486 6e9a 31       		.uleb128 0x31
+ 20487 6e9b 440E0000 		.long	0xe44
+ 20488 6e9f 03       		.byte	0x3
+ 20489 6ea0 91       		.byte	0x91
+ 20490 6ea1 B06C     		.sleb128 -2512
+ 20491 6ea3 31       		.uleb128 0x31
+ 20492 6ea4 380E0000 		.long	0xe38
+ 20493 6ea8 03       		.byte	0x3
+ 20494 6ea9 91       		.byte	0x91
+ 20495 6eaa C06C     		.sleb128 -2496
+ 20496 6eac 00       		.byte	0x0
+ 20497 6ead 00       		.byte	0x0
+ 20498 6eae 00       		.byte	0x0
+ 20499 6eaf 00       		.byte	0x0
+ 20500 6eb0 34       		.uleb128 0x34
+ 20501 6eb1 BA0D0000 		.long	0xdba
+ 20502 6eb5 00000000 		.quad	.LBB2034
+ 20502      00000000 
+ 20503 6ebd 00000000 		.quad	.LBE2034
+ 20503      00000000 
+ 20504 6ec5 03       		.byte	0x3
+ 20505 6ec6 2106     		.value	0x621
+ 20506 6ec8 31       		.uleb128 0x31
+ 20507 6ec9 CC0D0000 		.long	0xdcc
+ 20508 6ecd 03       		.byte	0x3
+ 20509 6ece 91       		.byte	0x91
+ 20510 6ecf D06C     		.sleb128 -2480
+ 20511 6ed1 32       		.uleb128 0x32
+ 20512 6ed2 00000000 		.quad	.LBB2035
+ 20512      00000000 
+ 20513 6eda 00000000 		.quad	.LBE2035
+ 20513      00000000 
+ 20514 6ee2 33       		.uleb128 0x33
+ 20515 6ee3 D80D0000 		.long	0xdd8
+ 20516 6ee7 09       		.byte	0x9
+ 20517 6ee8 03       		.byte	0x3
+ 20518 6ee9 00000000 		.quad	mask.8002
+ 20518      00000000 
+ 20519 6ef1 34       		.uleb128 0x34
+ 20520 6ef2 FB0D0000 		.long	0xdfb
+ 20521 6ef6 00000000 		.quad	.LBB2036
+ 20521      00000000 
+ 20522 6efe 00000000 		.quad	.LBE2036
+ 20522      00000000 
+ 20523 6f06 03       		.byte	0x3
+ 20524 6f07 FE04     		.value	0x4fe
+ 20525 6f09 31       		.uleb128 0x31
+ 20526 6f0a 190E0000 		.long	0xe19
+ 20527 6f0e 03       		.byte	0x3
+ 20528 6f0f 91       		.byte	0x91
+ 20529 6f10 E06C     		.sleb128 -2464
+ 20530 6f12 31       		.uleb128 0x31
+ 20531 6f13 0D0E0000 		.long	0xe0d
+ 20532 6f17 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 531
+
+
+ 20533 6f18 91       		.byte	0x91
+ 20534 6f19 F06C     		.sleb128 -2448
+ 20535 6f1b 34       		.uleb128 0x34
+ 20536 6f1c 260E0000 		.long	0xe26
+ 20537 6f20 00000000 		.quad	.LBB2038
+ 20537      00000000 
+ 20538 6f28 00000000 		.quad	.LBE2038
+ 20538      00000000 
+ 20539 6f30 03       		.byte	0x3
+ 20540 6f31 7501     		.value	0x175
+ 20541 6f33 31       		.uleb128 0x31
+ 20542 6f34 440E0000 		.long	0xe44
+ 20543 6f38 03       		.byte	0x3
+ 20544 6f39 91       		.byte	0x91
+ 20545 6f3a 806D     		.sleb128 -2432
+ 20546 6f3c 31       		.uleb128 0x31
+ 20547 6f3d 380E0000 		.long	0xe38
+ 20548 6f41 03       		.byte	0x3
+ 20549 6f42 91       		.byte	0x91
+ 20550 6f43 906D     		.sleb128 -2416
+ 20551 6f45 00       		.byte	0x0
+ 20552 6f46 00       		.byte	0x0
+ 20553 6f47 00       		.byte	0x0
+ 20554 6f48 00       		.byte	0x0
+ 20555 6f49 00       		.byte	0x0
+ 20556 6f4a 00       		.byte	0x0
+ 20557 6f4b 30       		.uleb128 0x30
+ 20558 6f4c F7580000 		.long	0x58f7
+ 20559 6f50 00000000 		.quad	.LBB2040
+ 20559      00000000 
+ 20560 6f58 00000000 		.quad	.LBE2040
+ 20560      00000000 
+ 20561 6f60 03       		.byte	0x3
+ 20562 6f61 8C07     		.value	0x78c
+ 20563 6f63 7A6F0000 		.long	0x6f7a
+ 20564 6f67 31       		.uleb128 0x31
+ 20565 6f68 12590000 		.long	0x5912
+ 20566 6f6c 03       		.byte	0x3
+ 20567 6f6d 91       		.byte	0x91
+ 20568 6f6e A06D     		.sleb128 -2400
+ 20569 6f70 31       		.uleb128 0x31
+ 20570 6f71 08590000 		.long	0x5908
+ 20571 6f75 03       		.byte	0x3
+ 20572 6f76 91       		.byte	0x91
+ 20573 6f77 B06D     		.sleb128 -2384
+ 20574 6f79 00       		.byte	0x0
+ 20575 6f7a 30       		.uleb128 0x30
+ 20576 6f7b 1D590000 		.long	0x591d
+ 20577 6f7f 00000000 		.quad	.LBB2042
+ 20577      00000000 
+ 20578 6f87 00000000 		.quad	.LBE2042
+ 20578      00000000 
+ 20579 6f8f 03       		.byte	0x3
+ 20580 6f90 8D07     		.value	0x78d
+ 20581 6f92 37700000 		.long	0x7037
+ 20582 6f96 31       		.uleb128 0x31
+ 20583 6f97 2F590000 		.long	0x592f
+
GAS LISTING /tmp/ccPaCTqg.s 			page 532
+
+
+ 20584 6f9b 03       		.byte	0x3
+ 20585 6f9c 91       		.byte	0x91
+ 20586 6f9d C06D     		.sleb128 -2368
+ 20587 6f9f 32       		.uleb128 0x32
+ 20588 6fa0 00000000 		.quad	.LBB2043
+ 20588      00000000 
+ 20589 6fa8 00000000 		.quad	.LBE2043
+ 20589      00000000 
+ 20590 6fb0 33       		.uleb128 0x33
+ 20591 6fb1 3B590000 		.long	0x593b
+ 20592 6fb5 03       		.byte	0x3
+ 20593 6fb6 76       		.byte	0x76
+ 20594 6fb7 8056     		.sleb128 -5376
+ 20595 6fb9 30       		.uleb128 0x30
+ 20596 6fba 1A0D0000 		.long	0xd1a
+ 20597 6fbe 00000000 		.quad	.LBB2044
+ 20597      00000000 
+ 20598 6fc6 00000000 		.quad	.LBE2044
+ 20598      00000000 
+ 20599 6fce 03       		.byte	0x3
+ 20600 6fcf 7206     		.value	0x672
+ 20601 6fd1 E86F0000 		.long	0x6fe8
+ 20602 6fd5 31       		.uleb128 0x31
+ 20603 6fd6 380D0000 		.long	0xd38
+ 20604 6fda 03       		.byte	0x3
+ 20605 6fdb 91       		.byte	0x91
+ 20606 6fdc DC6D     		.sleb128 -2340
+ 20607 6fde 31       		.uleb128 0x31
+ 20608 6fdf 2C0D0000 		.long	0xd2c
+ 20609 6fe3 03       		.byte	0x3
+ 20610 6fe4 91       		.byte	0x91
+ 20611 6fe5 E06D     		.sleb128 -2336
+ 20612 6fe7 00       		.byte	0x0
+ 20613 6fe8 34       		.uleb128 0x34
+ 20614 6fe9 48590000 		.long	0x5948
+ 20615 6fed 00000000 		.quad	.LBB2046
+ 20615      00000000 
+ 20616 6ff5 00000000 		.quad	.LBE2046
+ 20616      00000000 
+ 20617 6ffd 03       		.byte	0x3
+ 20618 6ffe 7306     		.value	0x673
+ 20619 7000 31       		.uleb128 0x31
+ 20620 7001 5A590000 		.long	0x595a
+ 20621 7005 03       		.byte	0x3
+ 20622 7006 91       		.byte	0x91
+ 20623 7007 F06D     		.sleb128 -2320
+ 20624 7009 34       		.uleb128 0x34
+ 20625 700a 640D0000 		.long	0xd64
+ 20626 700e 00000000 		.quad	.LBB2048
+ 20626      00000000 
+ 20627 7016 00000000 		.quad	.LBE2048
+ 20627      00000000 
+ 20628 701e 03       		.byte	0x3
+ 20629 701f 6505     		.value	0x565
+ 20630 7021 31       		.uleb128 0x31
+ 20631 7022 820D0000 		.long	0xd82
+ 20632 7026 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 533
+
+
+ 20633 7027 91       		.byte	0x91
+ 20634 7028 8C6E     		.sleb128 -2292
+ 20635 702a 31       		.uleb128 0x31
+ 20636 702b 760D0000 		.long	0xd76
+ 20637 702f 03       		.byte	0x3
+ 20638 7030 91       		.byte	0x91
+ 20639 7031 906E     		.sleb128 -2288
+ 20640 7033 00       		.byte	0x0
+ 20641 7034 00       		.byte	0x0
+ 20642 7035 00       		.byte	0x0
+ 20643 7036 00       		.byte	0x0
+ 20644 7037 30       		.uleb128 0x30
+ 20645 7038 8F0D0000 		.long	0xd8f
+ 20646 703c 00000000 		.quad	.LBB2050
+ 20646      00000000 
+ 20647 7044 00000000 		.quad	.LBE2050
+ 20647      00000000 
+ 20648 704c 03       		.byte	0x3
+ 20649 704d 8D07     		.value	0x78d
+ 20650 704f 4B720000 		.long	0x724b
+ 20651 7053 31       		.uleb128 0x31
+ 20652 7054 A10D0000 		.long	0xda1
+ 20653 7058 03       		.byte	0x3
+ 20654 7059 91       		.byte	0x91
+ 20655 705a A06E     		.sleb128 -2272
+ 20656 705c 32       		.uleb128 0x32
+ 20657 705d 00000000 		.quad	.LBB2051
+ 20657      00000000 
+ 20658 7065 00000000 		.quad	.LBE2051
+ 20658      00000000 
+ 20659 706d 33       		.uleb128 0x33
+ 20660 706e AD0D0000 		.long	0xdad
+ 20661 7072 03       		.byte	0x3
+ 20662 7073 76       		.byte	0x76
+ 20663 7074 9056     		.sleb128 -5360
+ 20664 7076 30       		.uleb128 0x30
+ 20665 7077 BA0D0000 		.long	0xdba
+ 20666 707b 00000000 		.quad	.LBB2052
+ 20666      00000000 
+ 20667 7083 00000000 		.quad	.LBE2052
+ 20667      00000000 
+ 20668 708b 03       		.byte	0x3
+ 20669 708c 1F06     		.value	0x61f
+ 20670 708e 13710000 		.long	0x7113
+ 20671 7092 31       		.uleb128 0x31
+ 20672 7093 CC0D0000 		.long	0xdcc
+ 20673 7097 03       		.byte	0x3
+ 20674 7098 91       		.byte	0x91
+ 20675 7099 B06E     		.sleb128 -2256
+ 20676 709b 32       		.uleb128 0x32
+ 20677 709c 00000000 		.quad	.LBB2053
+ 20677      00000000 
+ 20678 70a4 00000000 		.quad	.LBE2053
+ 20678      00000000 
+ 20679 70ac 33       		.uleb128 0x33
+ 20680 70ad D80D0000 		.long	0xdd8
+ 20681 70b1 09       		.byte	0x9
+
GAS LISTING /tmp/ccPaCTqg.s 			page 534
+
+
+ 20682 70b2 03       		.byte	0x3
+ 20683 70b3 00000000 		.quad	mask.8002
+ 20683      00000000 
+ 20684 70bb 34       		.uleb128 0x34
+ 20685 70bc FB0D0000 		.long	0xdfb
+ 20686 70c0 00000000 		.quad	.LBB2054
+ 20686      00000000 
+ 20687 70c8 00000000 		.quad	.LBE2054
+ 20687      00000000 
+ 20688 70d0 03       		.byte	0x3
+ 20689 70d1 FE04     		.value	0x4fe
+ 20690 70d3 31       		.uleb128 0x31
+ 20691 70d4 190E0000 		.long	0xe19
+ 20692 70d8 03       		.byte	0x3
+ 20693 70d9 91       		.byte	0x91
+ 20694 70da C06E     		.sleb128 -2240
+ 20695 70dc 31       		.uleb128 0x31
+ 20696 70dd 0D0E0000 		.long	0xe0d
+ 20697 70e1 03       		.byte	0x3
+ 20698 70e2 91       		.byte	0x91
+ 20699 70e3 D06E     		.sleb128 -2224
+ 20700 70e5 34       		.uleb128 0x34
+ 20701 70e6 260E0000 		.long	0xe26
+ 20702 70ea 00000000 		.quad	.LBB2056
+ 20702      00000000 
+ 20703 70f2 00000000 		.quad	.LBE2056
+ 20703      00000000 
+ 20704 70fa 03       		.byte	0x3
+ 20705 70fb 7501     		.value	0x175
+ 20706 70fd 31       		.uleb128 0x31
+ 20707 70fe 440E0000 		.long	0xe44
+ 20708 7102 03       		.byte	0x3
+ 20709 7103 91       		.byte	0x91
+ 20710 7104 E06E     		.sleb128 -2208
+ 20711 7106 31       		.uleb128 0x31
+ 20712 7107 380E0000 		.long	0xe38
+ 20713 710b 03       		.byte	0x3
+ 20714 710c 91       		.byte	0x91
+ 20715 710d F06E     		.sleb128 -2192
+ 20716 710f 00       		.byte	0x0
+ 20717 7110 00       		.byte	0x0
+ 20718 7111 00       		.byte	0x0
+ 20719 7112 00       		.byte	0x0
+ 20720 7113 30       		.uleb128 0x30
+ 20721 7114 BA0D0000 		.long	0xdba
+ 20722 7118 00000000 		.quad	.LBB2058
+ 20722      00000000 
+ 20723 7120 00000000 		.quad	.LBE2058
+ 20723      00000000 
+ 20724 7128 03       		.byte	0x3
+ 20725 7129 2006     		.value	0x620
+ 20726 712b B0710000 		.long	0x71b0
+ 20727 712f 31       		.uleb128 0x31
+ 20728 7130 CC0D0000 		.long	0xdcc
+ 20729 7134 03       		.byte	0x3
+ 20730 7135 91       		.byte	0x91
+ 20731 7136 806F     		.sleb128 -2176
+
GAS LISTING /tmp/ccPaCTqg.s 			page 535
+
+
+ 20732 7138 32       		.uleb128 0x32
+ 20733 7139 00000000 		.quad	.LBB2059
+ 20733      00000000 
+ 20734 7141 00000000 		.quad	.LBE2059
+ 20734      00000000 
+ 20735 7149 33       		.uleb128 0x33
+ 20736 714a D80D0000 		.long	0xdd8
+ 20737 714e 09       		.byte	0x9
+ 20738 714f 03       		.byte	0x3
+ 20739 7150 00000000 		.quad	mask.8002
+ 20739      00000000 
+ 20740 7158 34       		.uleb128 0x34
+ 20741 7159 FB0D0000 		.long	0xdfb
+ 20742 715d 00000000 		.quad	.LBB2060
+ 20742      00000000 
+ 20743 7165 00000000 		.quad	.LBE2060
+ 20743      00000000 
+ 20744 716d 03       		.byte	0x3
+ 20745 716e FE04     		.value	0x4fe
+ 20746 7170 31       		.uleb128 0x31
+ 20747 7171 190E0000 		.long	0xe19
+ 20748 7175 03       		.byte	0x3
+ 20749 7176 91       		.byte	0x91
+ 20750 7177 906F     		.sleb128 -2160
+ 20751 7179 31       		.uleb128 0x31
+ 20752 717a 0D0E0000 		.long	0xe0d
+ 20753 717e 03       		.byte	0x3
+ 20754 717f 91       		.byte	0x91
+ 20755 7180 A06F     		.sleb128 -2144
+ 20756 7182 34       		.uleb128 0x34
+ 20757 7183 260E0000 		.long	0xe26
+ 20758 7187 00000000 		.quad	.LBB2062
+ 20758      00000000 
+ 20759 718f 00000000 		.quad	.LBE2062
+ 20759      00000000 
+ 20760 7197 03       		.byte	0x3
+ 20761 7198 7501     		.value	0x175
+ 20762 719a 31       		.uleb128 0x31
+ 20763 719b 440E0000 		.long	0xe44
+ 20764 719f 03       		.byte	0x3
+ 20765 71a0 91       		.byte	0x91
+ 20766 71a1 B06F     		.sleb128 -2128
+ 20767 71a3 31       		.uleb128 0x31
+ 20768 71a4 380E0000 		.long	0xe38
+ 20769 71a8 03       		.byte	0x3
+ 20770 71a9 91       		.byte	0x91
+ 20771 71aa C06F     		.sleb128 -2112
+ 20772 71ac 00       		.byte	0x0
+ 20773 71ad 00       		.byte	0x0
+ 20774 71ae 00       		.byte	0x0
+ 20775 71af 00       		.byte	0x0
+ 20776 71b0 34       		.uleb128 0x34
+ 20777 71b1 BA0D0000 		.long	0xdba
+ 20778 71b5 00000000 		.quad	.LBB2064
+ 20778      00000000 
+ 20779 71bd 00000000 		.quad	.LBE2064
+ 20779      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 536
+
+
+ 20780 71c5 03       		.byte	0x3
+ 20781 71c6 2106     		.value	0x621
+ 20782 71c8 31       		.uleb128 0x31
+ 20783 71c9 CC0D0000 		.long	0xdcc
+ 20784 71cd 03       		.byte	0x3
+ 20785 71ce 91       		.byte	0x91
+ 20786 71cf D06F     		.sleb128 -2096
+ 20787 71d1 32       		.uleb128 0x32
+ 20788 71d2 00000000 		.quad	.LBB2065
+ 20788      00000000 
+ 20789 71da 00000000 		.quad	.LBE2065
+ 20789      00000000 
+ 20790 71e2 33       		.uleb128 0x33
+ 20791 71e3 D80D0000 		.long	0xdd8
+ 20792 71e7 09       		.byte	0x9
+ 20793 71e8 03       		.byte	0x3
+ 20794 71e9 00000000 		.quad	mask.8002
+ 20794      00000000 
+ 20795 71f1 34       		.uleb128 0x34
+ 20796 71f2 FB0D0000 		.long	0xdfb
+ 20797 71f6 00000000 		.quad	.LBB2066
+ 20797      00000000 
+ 20798 71fe 00000000 		.quad	.LBE2066
+ 20798      00000000 
+ 20799 7206 03       		.byte	0x3
+ 20800 7207 FE04     		.value	0x4fe
+ 20801 7209 31       		.uleb128 0x31
+ 20802 720a 190E0000 		.long	0xe19
+ 20803 720e 03       		.byte	0x3
+ 20804 720f 91       		.byte	0x91
+ 20805 7210 E06F     		.sleb128 -2080
+ 20806 7212 31       		.uleb128 0x31
+ 20807 7213 0D0E0000 		.long	0xe0d
+ 20808 7217 03       		.byte	0x3
+ 20809 7218 91       		.byte	0x91
+ 20810 7219 F06F     		.sleb128 -2064
+ 20811 721b 34       		.uleb128 0x34
+ 20812 721c 260E0000 		.long	0xe26
+ 20813 7220 00000000 		.quad	.LBB2068
+ 20813      00000000 
+ 20814 7228 00000000 		.quad	.LBE2068
+ 20814      00000000 
+ 20815 7230 03       		.byte	0x3
+ 20816 7231 7501     		.value	0x175
+ 20817 7233 31       		.uleb128 0x31
+ 20818 7234 440E0000 		.long	0xe44
+ 20819 7238 03       		.byte	0x3
+ 20820 7239 91       		.byte	0x91
+ 20821 723a 8070     		.sleb128 -2048
+ 20822 723c 31       		.uleb128 0x31
+ 20823 723d 380E0000 		.long	0xe38
+ 20824 7241 03       		.byte	0x3
+ 20825 7242 91       		.byte	0x91
+ 20826 7243 9070     		.sleb128 -2032
+ 20827 7245 00       		.byte	0x0
+ 20828 7246 00       		.byte	0x0
+ 20829 7247 00       		.byte	0x0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 537
+
+
+ 20830 7248 00       		.byte	0x0
+ 20831 7249 00       		.byte	0x0
+ 20832 724a 00       		.byte	0x0
+ 20833 724b 30       		.uleb128 0x30
+ 20834 724c F7580000 		.long	0x58f7
+ 20835 7250 00000000 		.quad	.LBB2070
+ 20835      00000000 
+ 20836 7258 00000000 		.quad	.LBE2070
+ 20836      00000000 
+ 20837 7260 03       		.byte	0x3
+ 20838 7261 8D07     		.value	0x78d
+ 20839 7263 7A720000 		.long	0x727a
+ 20840 7267 31       		.uleb128 0x31
+ 20841 7268 12590000 		.long	0x5912
+ 20842 726c 03       		.byte	0x3
+ 20843 726d 91       		.byte	0x91
+ 20844 726e A070     		.sleb128 -2016
+ 20845 7270 31       		.uleb128 0x31
+ 20846 7271 08590000 		.long	0x5908
+ 20847 7275 03       		.byte	0x3
+ 20848 7276 91       		.byte	0x91
+ 20849 7277 B070     		.sleb128 -2000
+ 20850 7279 00       		.byte	0x0
+ 20851 727a 30       		.uleb128 0x30
+ 20852 727b E30C0000 		.long	0xce3
+ 20853 727f 00000000 		.quad	.LBB2072
+ 20853      00000000 
+ 20854 7287 00000000 		.quad	.LBE2072
+ 20854      00000000 
+ 20855 728f 03       		.byte	0x3
+ 20856 7290 8E07     		.value	0x78e
+ 20857 7292 40730000 		.long	0x7340
+ 20858 7296 31       		.uleb128 0x31
+ 20859 7297 010D0000 		.long	0xd01
+ 20860 729b 03       		.byte	0x3
+ 20861 729c 91       		.byte	0x91
+ 20862 729d CC70     		.sleb128 -1972
+ 20863 729f 31       		.uleb128 0x31
+ 20864 72a0 F50C0000 		.long	0xcf5
+ 20865 72a4 03       		.byte	0x3
+ 20866 72a5 91       		.byte	0x91
+ 20867 72a6 D070     		.sleb128 -1968
+ 20868 72a8 32       		.uleb128 0x32
+ 20869 72a9 00000000 		.quad	.LBB2073
+ 20869      00000000 
+ 20870 72b1 00000000 		.quad	.LBE2073
+ 20870      00000000 
+ 20871 72b9 33       		.uleb128 0x33
+ 20872 72ba 0D0D0000 		.long	0xd0d
+ 20873 72be 03       		.byte	0x3
+ 20874 72bf 76       		.byte	0x76
+ 20875 72c0 A056     		.sleb128 -5344
+ 20876 72c2 30       		.uleb128 0x30
+ 20877 72c3 1A0D0000 		.long	0xd1a
+ 20878 72c7 00000000 		.quad	.LBB2074
+ 20878      00000000 
+ 20879 72cf 00000000 		.quad	.LBE2074
+
GAS LISTING /tmp/ccPaCTqg.s 			page 538
+
+
+ 20879      00000000 
+ 20880 72d7 03       		.byte	0x3
+ 20881 72d8 8A06     		.value	0x68a
+ 20882 72da F1720000 		.long	0x72f1
+ 20883 72de 31       		.uleb128 0x31
+ 20884 72df 380D0000 		.long	0xd38
+ 20885 72e3 03       		.byte	0x3
+ 20886 72e4 91       		.byte	0x91
+ 20887 72e5 EC70     		.sleb128 -1940
+ 20888 72e7 31       		.uleb128 0x31
+ 20889 72e8 2C0D0000 		.long	0xd2c
+ 20890 72ec 03       		.byte	0x3
+ 20891 72ed 91       		.byte	0x91
+ 20892 72ee F070     		.sleb128 -1936
+ 20893 72f0 00       		.byte	0x0
+ 20894 72f1 34       		.uleb128 0x34
+ 20895 72f2 450D0000 		.long	0xd45
+ 20896 72f6 00000000 		.quad	.LBB2076
+ 20896      00000000 
+ 20897 72fe 00000000 		.quad	.LBE2076
+ 20897      00000000 
+ 20898 7306 03       		.byte	0x3
+ 20899 7307 8B06     		.value	0x68b
+ 20900 7309 31       		.uleb128 0x31
+ 20901 730a 570D0000 		.long	0xd57
+ 20902 730e 03       		.byte	0x3
+ 20903 730f 91       		.byte	0x91
+ 20904 7310 8071     		.sleb128 -1920
+ 20905 7312 34       		.uleb128 0x34
+ 20906 7313 640D0000 		.long	0xd64
+ 20907 7317 00000000 		.quad	.LBB2078
+ 20907      00000000 
+ 20908 731f 00000000 		.quad	.LBE2078
+ 20908      00000000 
+ 20909 7327 03       		.byte	0x3
+ 20910 7328 4905     		.value	0x549
+ 20911 732a 31       		.uleb128 0x31
+ 20912 732b 820D0000 		.long	0xd82
+ 20913 732f 03       		.byte	0x3
+ 20914 7330 91       		.byte	0x91
+ 20915 7331 9C71     		.sleb128 -1892
+ 20916 7333 31       		.uleb128 0x31
+ 20917 7334 760D0000 		.long	0xd76
+ 20918 7338 03       		.byte	0x3
+ 20919 7339 91       		.byte	0x91
+ 20920 733a A071     		.sleb128 -1888
+ 20921 733c 00       		.byte	0x0
+ 20922 733d 00       		.byte	0x0
+ 20923 733e 00       		.byte	0x0
+ 20924 733f 00       		.byte	0x0
+ 20925 7340 30       		.uleb128 0x30
+ 20926 7341 8F0D0000 		.long	0xd8f
+ 20927 7345 00000000 		.quad	.LBB2080
+ 20927      00000000 
+ 20928 734d 00000000 		.quad	.LBE2080
+ 20928      00000000 
+ 20929 7355 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 539
+
+
+ 20930 7356 8E07     		.value	0x78e
+ 20931 7358 54750000 		.long	0x7554
+ 20932 735c 31       		.uleb128 0x31
+ 20933 735d A10D0000 		.long	0xda1
+ 20934 7361 03       		.byte	0x3
+ 20935 7362 91       		.byte	0x91
+ 20936 7363 B071     		.sleb128 -1872
+ 20937 7365 32       		.uleb128 0x32
+ 20938 7366 00000000 		.quad	.LBB2081
+ 20938      00000000 
+ 20939 736e 00000000 		.quad	.LBE2081
+ 20939      00000000 
+ 20940 7376 33       		.uleb128 0x33
+ 20941 7377 AD0D0000 		.long	0xdad
+ 20942 737b 03       		.byte	0x3
+ 20943 737c 76       		.byte	0x76
+ 20944 737d B056     		.sleb128 -5328
+ 20945 737f 30       		.uleb128 0x30
+ 20946 7380 BA0D0000 		.long	0xdba
+ 20947 7384 00000000 		.quad	.LBB2082
+ 20947      00000000 
+ 20948 738c 00000000 		.quad	.LBE2082
+ 20948      00000000 
+ 20949 7394 03       		.byte	0x3
+ 20950 7395 1F06     		.value	0x61f
+ 20951 7397 1C740000 		.long	0x741c
+ 20952 739b 31       		.uleb128 0x31
+ 20953 739c CC0D0000 		.long	0xdcc
+ 20954 73a0 03       		.byte	0x3
+ 20955 73a1 91       		.byte	0x91
+ 20956 73a2 C071     		.sleb128 -1856
+ 20957 73a4 32       		.uleb128 0x32
+ 20958 73a5 00000000 		.quad	.LBB2083
+ 20958      00000000 
+ 20959 73ad 00000000 		.quad	.LBE2083
+ 20959      00000000 
+ 20960 73b5 33       		.uleb128 0x33
+ 20961 73b6 D80D0000 		.long	0xdd8
+ 20962 73ba 09       		.byte	0x9
+ 20963 73bb 03       		.byte	0x3
+ 20964 73bc 00000000 		.quad	mask.8002
+ 20964      00000000 
+ 20965 73c4 34       		.uleb128 0x34
+ 20966 73c5 FB0D0000 		.long	0xdfb
+ 20967 73c9 00000000 		.quad	.LBB2084
+ 20967      00000000 
+ 20968 73d1 00000000 		.quad	.LBE2084
+ 20968      00000000 
+ 20969 73d9 03       		.byte	0x3
+ 20970 73da FE04     		.value	0x4fe
+ 20971 73dc 31       		.uleb128 0x31
+ 20972 73dd 190E0000 		.long	0xe19
+ 20973 73e1 03       		.byte	0x3
+ 20974 73e2 91       		.byte	0x91
+ 20975 73e3 D071     		.sleb128 -1840
+ 20976 73e5 31       		.uleb128 0x31
+ 20977 73e6 0D0E0000 		.long	0xe0d
+
GAS LISTING /tmp/ccPaCTqg.s 			page 540
+
+
+ 20978 73ea 03       		.byte	0x3
+ 20979 73eb 91       		.byte	0x91
+ 20980 73ec E071     		.sleb128 -1824
+ 20981 73ee 34       		.uleb128 0x34
+ 20982 73ef 260E0000 		.long	0xe26
+ 20983 73f3 00000000 		.quad	.LBB2086
+ 20983      00000000 
+ 20984 73fb 00000000 		.quad	.LBE2086
+ 20984      00000000 
+ 20985 7403 03       		.byte	0x3
+ 20986 7404 7501     		.value	0x175
+ 20987 7406 31       		.uleb128 0x31
+ 20988 7407 440E0000 		.long	0xe44
+ 20989 740b 03       		.byte	0x3
+ 20990 740c 91       		.byte	0x91
+ 20991 740d F071     		.sleb128 -1808
+ 20992 740f 31       		.uleb128 0x31
+ 20993 7410 380E0000 		.long	0xe38
+ 20994 7414 03       		.byte	0x3
+ 20995 7415 91       		.byte	0x91
+ 20996 7416 8072     		.sleb128 -1792
+ 20997 7418 00       		.byte	0x0
+ 20998 7419 00       		.byte	0x0
+ 20999 741a 00       		.byte	0x0
+ 21000 741b 00       		.byte	0x0
+ 21001 741c 30       		.uleb128 0x30
+ 21002 741d BA0D0000 		.long	0xdba
+ 21003 7421 00000000 		.quad	.LBB2088
+ 21003      00000000 
+ 21004 7429 00000000 		.quad	.LBE2088
+ 21004      00000000 
+ 21005 7431 03       		.byte	0x3
+ 21006 7432 2006     		.value	0x620
+ 21007 7434 B9740000 		.long	0x74b9
+ 21008 7438 31       		.uleb128 0x31
+ 21009 7439 CC0D0000 		.long	0xdcc
+ 21010 743d 03       		.byte	0x3
+ 21011 743e 91       		.byte	0x91
+ 21012 743f 9072     		.sleb128 -1776
+ 21013 7441 32       		.uleb128 0x32
+ 21014 7442 00000000 		.quad	.LBB2089
+ 21014      00000000 
+ 21015 744a 00000000 		.quad	.LBE2089
+ 21015      00000000 
+ 21016 7452 33       		.uleb128 0x33
+ 21017 7453 D80D0000 		.long	0xdd8
+ 21018 7457 09       		.byte	0x9
+ 21019 7458 03       		.byte	0x3
+ 21020 7459 00000000 		.quad	mask.8002
+ 21020      00000000 
+ 21021 7461 34       		.uleb128 0x34
+ 21022 7462 FB0D0000 		.long	0xdfb
+ 21023 7466 00000000 		.quad	.LBB2090
+ 21023      00000000 
+ 21024 746e 00000000 		.quad	.LBE2090
+ 21024      00000000 
+ 21025 7476 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 541
+
+
+ 21026 7477 FE04     		.value	0x4fe
+ 21027 7479 31       		.uleb128 0x31
+ 21028 747a 190E0000 		.long	0xe19
+ 21029 747e 03       		.byte	0x3
+ 21030 747f 91       		.byte	0x91
+ 21031 7480 A072     		.sleb128 -1760
+ 21032 7482 31       		.uleb128 0x31
+ 21033 7483 0D0E0000 		.long	0xe0d
+ 21034 7487 03       		.byte	0x3
+ 21035 7488 91       		.byte	0x91
+ 21036 7489 B072     		.sleb128 -1744
+ 21037 748b 34       		.uleb128 0x34
+ 21038 748c 260E0000 		.long	0xe26
+ 21039 7490 00000000 		.quad	.LBB2092
+ 21039      00000000 
+ 21040 7498 00000000 		.quad	.LBE2092
+ 21040      00000000 
+ 21041 74a0 03       		.byte	0x3
+ 21042 74a1 7501     		.value	0x175
+ 21043 74a3 31       		.uleb128 0x31
+ 21044 74a4 440E0000 		.long	0xe44
+ 21045 74a8 03       		.byte	0x3
+ 21046 74a9 91       		.byte	0x91
+ 21047 74aa C072     		.sleb128 -1728
+ 21048 74ac 31       		.uleb128 0x31
+ 21049 74ad 380E0000 		.long	0xe38
+ 21050 74b1 03       		.byte	0x3
+ 21051 74b2 91       		.byte	0x91
+ 21052 74b3 D072     		.sleb128 -1712
+ 21053 74b5 00       		.byte	0x0
+ 21054 74b6 00       		.byte	0x0
+ 21055 74b7 00       		.byte	0x0
+ 21056 74b8 00       		.byte	0x0
+ 21057 74b9 34       		.uleb128 0x34
+ 21058 74ba BA0D0000 		.long	0xdba
+ 21059 74be 00000000 		.quad	.LBB2094
+ 21059      00000000 
+ 21060 74c6 00000000 		.quad	.LBE2094
+ 21060      00000000 
+ 21061 74ce 03       		.byte	0x3
+ 21062 74cf 2106     		.value	0x621
+ 21063 74d1 31       		.uleb128 0x31
+ 21064 74d2 CC0D0000 		.long	0xdcc
+ 21065 74d6 03       		.byte	0x3
+ 21066 74d7 91       		.byte	0x91
+ 21067 74d8 E072     		.sleb128 -1696
+ 21068 74da 32       		.uleb128 0x32
+ 21069 74db 00000000 		.quad	.LBB2095
+ 21069      00000000 
+ 21070 74e3 00000000 		.quad	.LBE2095
+ 21070      00000000 
+ 21071 74eb 33       		.uleb128 0x33
+ 21072 74ec D80D0000 		.long	0xdd8
+ 21073 74f0 09       		.byte	0x9
+ 21074 74f1 03       		.byte	0x3
+ 21075 74f2 00000000 		.quad	mask.8002
+ 21075      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 542
+
+
+ 21076 74fa 34       		.uleb128 0x34
+ 21077 74fb FB0D0000 		.long	0xdfb
+ 21078 74ff 00000000 		.quad	.LBB2096
+ 21078      00000000 
+ 21079 7507 00000000 		.quad	.LBE2096
+ 21079      00000000 
+ 21080 750f 03       		.byte	0x3
+ 21081 7510 FE04     		.value	0x4fe
+ 21082 7512 31       		.uleb128 0x31
+ 21083 7513 190E0000 		.long	0xe19
+ 21084 7517 03       		.byte	0x3
+ 21085 7518 91       		.byte	0x91
+ 21086 7519 F072     		.sleb128 -1680
+ 21087 751b 31       		.uleb128 0x31
+ 21088 751c 0D0E0000 		.long	0xe0d
+ 21089 7520 03       		.byte	0x3
+ 21090 7521 91       		.byte	0x91
+ 21091 7522 8073     		.sleb128 -1664
+ 21092 7524 34       		.uleb128 0x34
+ 21093 7525 260E0000 		.long	0xe26
+ 21094 7529 00000000 		.quad	.LBB2098
+ 21094      00000000 
+ 21095 7531 00000000 		.quad	.LBE2098
+ 21095      00000000 
+ 21096 7539 03       		.byte	0x3
+ 21097 753a 7501     		.value	0x175
+ 21098 753c 31       		.uleb128 0x31
+ 21099 753d 440E0000 		.long	0xe44
+ 21100 7541 03       		.byte	0x3
+ 21101 7542 91       		.byte	0x91
+ 21102 7543 9073     		.sleb128 -1648
+ 21103 7545 31       		.uleb128 0x31
+ 21104 7546 380E0000 		.long	0xe38
+ 21105 754a 03       		.byte	0x3
+ 21106 754b 91       		.byte	0x91
+ 21107 754c A073     		.sleb128 -1632
+ 21108 754e 00       		.byte	0x0
+ 21109 754f 00       		.byte	0x0
+ 21110 7550 00       		.byte	0x0
+ 21111 7551 00       		.byte	0x0
+ 21112 7552 00       		.byte	0x0
+ 21113 7553 00       		.byte	0x0
+ 21114 7554 30       		.uleb128 0x30
+ 21115 7555 F7580000 		.long	0x58f7
+ 21116 7559 00000000 		.quad	.LBB2100
+ 21116      00000000 
+ 21117 7561 00000000 		.quad	.LBE2100
+ 21117      00000000 
+ 21118 7569 03       		.byte	0x3
+ 21119 756a 8E07     		.value	0x78e
+ 21120 756c 83750000 		.long	0x7583
+ 21121 7570 31       		.uleb128 0x31
+ 21122 7571 12590000 		.long	0x5912
+ 21123 7575 03       		.byte	0x3
+ 21124 7576 91       		.byte	0x91
+ 21125 7577 B073     		.sleb128 -1616
+ 21126 7579 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s 			page 543
+
+
+ 21127 757a 08590000 		.long	0x5908
+ 21128 757e 03       		.byte	0x3
+ 21129 757f 91       		.byte	0x91
+ 21130 7580 C073     		.sleb128 -1600
+ 21131 7582 00       		.byte	0x0
+ 21132 7583 30       		.uleb128 0x30
+ 21133 7584 1D590000 		.long	0x591d
+ 21134 7588 00000000 		.quad	.LBB2102
+ 21134      00000000 
+ 21135 7590 00000000 		.quad	.LBE2102
+ 21135      00000000 
+ 21136 7598 03       		.byte	0x3
+ 21137 7599 8F07     		.value	0x78f
+ 21138 759b 40760000 		.long	0x7640
+ 21139 759f 31       		.uleb128 0x31
+ 21140 75a0 2F590000 		.long	0x592f
+ 21141 75a4 03       		.byte	0x3
+ 21142 75a5 91       		.byte	0x91
+ 21143 75a6 D073     		.sleb128 -1584
+ 21144 75a8 32       		.uleb128 0x32
+ 21145 75a9 00000000 		.quad	.LBB2103
+ 21145      00000000 
+ 21146 75b1 00000000 		.quad	.LBE2103
+ 21146      00000000 
+ 21147 75b9 33       		.uleb128 0x33
+ 21148 75ba 3B590000 		.long	0x593b
+ 21149 75be 03       		.byte	0x3
+ 21150 75bf 76       		.byte	0x76
+ 21151 75c0 C056     		.sleb128 -5312
+ 21152 75c2 30       		.uleb128 0x30
+ 21153 75c3 1A0D0000 		.long	0xd1a
+ 21154 75c7 00000000 		.quad	.LBB2104
+ 21154      00000000 
+ 21155 75cf 00000000 		.quad	.LBE2104
+ 21155      00000000 
+ 21156 75d7 03       		.byte	0x3
+ 21157 75d8 7206     		.value	0x672
+ 21158 75da F1750000 		.long	0x75f1
+ 21159 75de 31       		.uleb128 0x31
+ 21160 75df 380D0000 		.long	0xd38
+ 21161 75e3 03       		.byte	0x3
+ 21162 75e4 91       		.byte	0x91
+ 21163 75e5 EC73     		.sleb128 -1556
+ 21164 75e7 31       		.uleb128 0x31
+ 21165 75e8 2C0D0000 		.long	0xd2c
+ 21166 75ec 03       		.byte	0x3
+ 21167 75ed 91       		.byte	0x91
+ 21168 75ee F073     		.sleb128 -1552
+ 21169 75f0 00       		.byte	0x0
+ 21170 75f1 34       		.uleb128 0x34
+ 21171 75f2 48590000 		.long	0x5948
+ 21172 75f6 00000000 		.quad	.LBB2106
+ 21172      00000000 
+ 21173 75fe 00000000 		.quad	.LBE2106
+ 21173      00000000 
+ 21174 7606 03       		.byte	0x3
+ 21175 7607 7306     		.value	0x673
+
GAS LISTING /tmp/ccPaCTqg.s 			page 544
+
+
+ 21176 7609 31       		.uleb128 0x31
+ 21177 760a 5A590000 		.long	0x595a
+ 21178 760e 03       		.byte	0x3
+ 21179 760f 91       		.byte	0x91
+ 21180 7610 8074     		.sleb128 -1536
+ 21181 7612 34       		.uleb128 0x34
+ 21182 7613 640D0000 		.long	0xd64
+ 21183 7617 00000000 		.quad	.LBB2108
+ 21183      00000000 
+ 21184 761f 00000000 		.quad	.LBE2108
+ 21184      00000000 
+ 21185 7627 03       		.byte	0x3
+ 21186 7628 6505     		.value	0x565
+ 21187 762a 31       		.uleb128 0x31
+ 21188 762b 820D0000 		.long	0xd82
+ 21189 762f 03       		.byte	0x3
+ 21190 7630 91       		.byte	0x91
+ 21191 7631 9C74     		.sleb128 -1508
+ 21192 7633 31       		.uleb128 0x31
+ 21193 7634 760D0000 		.long	0xd76
+ 21194 7638 03       		.byte	0x3
+ 21195 7639 91       		.byte	0x91
+ 21196 763a A074     		.sleb128 -1504
+ 21197 763c 00       		.byte	0x0
+ 21198 763d 00       		.byte	0x0
+ 21199 763e 00       		.byte	0x0
+ 21200 763f 00       		.byte	0x0
+ 21201 7640 30       		.uleb128 0x30
+ 21202 7641 8F0D0000 		.long	0xd8f
+ 21203 7645 00000000 		.quad	.LBB2110
+ 21203      00000000 
+ 21204 764d 00000000 		.quad	.LBE2110
+ 21204      00000000 
+ 21205 7655 03       		.byte	0x3
+ 21206 7656 8F07     		.value	0x78f
+ 21207 7658 54780000 		.long	0x7854
+ 21208 765c 31       		.uleb128 0x31
+ 21209 765d A10D0000 		.long	0xda1
+ 21210 7661 03       		.byte	0x3
+ 21211 7662 91       		.byte	0x91
+ 21212 7663 B074     		.sleb128 -1488
+ 21213 7665 32       		.uleb128 0x32
+ 21214 7666 00000000 		.quad	.LBB2111
+ 21214      00000000 
+ 21215 766e 00000000 		.quad	.LBE2111
+ 21215      00000000 
+ 21216 7676 33       		.uleb128 0x33
+ 21217 7677 AD0D0000 		.long	0xdad
+ 21218 767b 03       		.byte	0x3
+ 21219 767c 76       		.byte	0x76
+ 21220 767d D056     		.sleb128 -5296
+ 21221 767f 30       		.uleb128 0x30
+ 21222 7680 BA0D0000 		.long	0xdba
+ 21223 7684 00000000 		.quad	.LBB2112
+ 21223      00000000 
+ 21224 768c 00000000 		.quad	.LBE2112
+ 21224      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 545
+
+
+ 21225 7694 03       		.byte	0x3
+ 21226 7695 1F06     		.value	0x61f
+ 21227 7697 1C770000 		.long	0x771c
+ 21228 769b 31       		.uleb128 0x31
+ 21229 769c CC0D0000 		.long	0xdcc
+ 21230 76a0 03       		.byte	0x3
+ 21231 76a1 91       		.byte	0x91
+ 21232 76a2 C074     		.sleb128 -1472
+ 21233 76a4 32       		.uleb128 0x32
+ 21234 76a5 00000000 		.quad	.LBB2113
+ 21234      00000000 
+ 21235 76ad 00000000 		.quad	.LBE2113
+ 21235      00000000 
+ 21236 76b5 33       		.uleb128 0x33
+ 21237 76b6 D80D0000 		.long	0xdd8
+ 21238 76ba 09       		.byte	0x9
+ 21239 76bb 03       		.byte	0x3
+ 21240 76bc 00000000 		.quad	mask.8002
+ 21240      00000000 
+ 21241 76c4 34       		.uleb128 0x34
+ 21242 76c5 FB0D0000 		.long	0xdfb
+ 21243 76c9 00000000 		.quad	.LBB2114
+ 21243      00000000 
+ 21244 76d1 00000000 		.quad	.LBE2114
+ 21244      00000000 
+ 21245 76d9 03       		.byte	0x3
+ 21246 76da FE04     		.value	0x4fe
+ 21247 76dc 31       		.uleb128 0x31
+ 21248 76dd 190E0000 		.long	0xe19
+ 21249 76e1 03       		.byte	0x3
+ 21250 76e2 91       		.byte	0x91
+ 21251 76e3 D074     		.sleb128 -1456
+ 21252 76e5 31       		.uleb128 0x31
+ 21253 76e6 0D0E0000 		.long	0xe0d
+ 21254 76ea 03       		.byte	0x3
+ 21255 76eb 91       		.byte	0x91
+ 21256 76ec E074     		.sleb128 -1440
+ 21257 76ee 34       		.uleb128 0x34
+ 21258 76ef 260E0000 		.long	0xe26
+ 21259 76f3 00000000 		.quad	.LBB2116
+ 21259      00000000 
+ 21260 76fb 00000000 		.quad	.LBE2116
+ 21260      00000000 
+ 21261 7703 03       		.byte	0x3
+ 21262 7704 7501     		.value	0x175
+ 21263 7706 31       		.uleb128 0x31
+ 21264 7707 440E0000 		.long	0xe44
+ 21265 770b 03       		.byte	0x3
+ 21266 770c 91       		.byte	0x91
+ 21267 770d F074     		.sleb128 -1424
+ 21268 770f 31       		.uleb128 0x31
+ 21269 7710 380E0000 		.long	0xe38
+ 21270 7714 03       		.byte	0x3
+ 21271 7715 91       		.byte	0x91
+ 21272 7716 8075     		.sleb128 -1408
+ 21273 7718 00       		.byte	0x0
+ 21274 7719 00       		.byte	0x0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 546
+
+
+ 21275 771a 00       		.byte	0x0
+ 21276 771b 00       		.byte	0x0
+ 21277 771c 30       		.uleb128 0x30
+ 21278 771d BA0D0000 		.long	0xdba
+ 21279 7721 00000000 		.quad	.LBB2118
+ 21279      00000000 
+ 21280 7729 00000000 		.quad	.LBE2118
+ 21280      00000000 
+ 21281 7731 03       		.byte	0x3
+ 21282 7732 2006     		.value	0x620
+ 21283 7734 B9770000 		.long	0x77b9
+ 21284 7738 31       		.uleb128 0x31
+ 21285 7739 CC0D0000 		.long	0xdcc
+ 21286 773d 03       		.byte	0x3
+ 21287 773e 91       		.byte	0x91
+ 21288 773f 9075     		.sleb128 -1392
+ 21289 7741 32       		.uleb128 0x32
+ 21290 7742 00000000 		.quad	.LBB2119
+ 21290      00000000 
+ 21291 774a 00000000 		.quad	.LBE2119
+ 21291      00000000 
+ 21292 7752 33       		.uleb128 0x33
+ 21293 7753 D80D0000 		.long	0xdd8
+ 21294 7757 09       		.byte	0x9
+ 21295 7758 03       		.byte	0x3
+ 21296 7759 00000000 		.quad	mask.8002
+ 21296      00000000 
+ 21297 7761 34       		.uleb128 0x34
+ 21298 7762 FB0D0000 		.long	0xdfb
+ 21299 7766 00000000 		.quad	.LBB2120
+ 21299      00000000 
+ 21300 776e 00000000 		.quad	.LBE2120
+ 21300      00000000 
+ 21301 7776 03       		.byte	0x3
+ 21302 7777 FE04     		.value	0x4fe
+ 21303 7779 31       		.uleb128 0x31
+ 21304 777a 190E0000 		.long	0xe19
+ 21305 777e 03       		.byte	0x3
+ 21306 777f 91       		.byte	0x91
+ 21307 7780 A075     		.sleb128 -1376
+ 21308 7782 31       		.uleb128 0x31
+ 21309 7783 0D0E0000 		.long	0xe0d
+ 21310 7787 03       		.byte	0x3
+ 21311 7788 91       		.byte	0x91
+ 21312 7789 B075     		.sleb128 -1360
+ 21313 778b 34       		.uleb128 0x34
+ 21314 778c 260E0000 		.long	0xe26
+ 21315 7790 00000000 		.quad	.LBB2122
+ 21315      00000000 
+ 21316 7798 00000000 		.quad	.LBE2122
+ 21316      00000000 
+ 21317 77a0 03       		.byte	0x3
+ 21318 77a1 7501     		.value	0x175
+ 21319 77a3 31       		.uleb128 0x31
+ 21320 77a4 440E0000 		.long	0xe44
+ 21321 77a8 03       		.byte	0x3
+ 21322 77a9 91       		.byte	0x91
+
GAS LISTING /tmp/ccPaCTqg.s 			page 547
+
+
+ 21323 77aa C075     		.sleb128 -1344
+ 21324 77ac 31       		.uleb128 0x31
+ 21325 77ad 380E0000 		.long	0xe38
+ 21326 77b1 03       		.byte	0x3
+ 21327 77b2 91       		.byte	0x91
+ 21328 77b3 D075     		.sleb128 -1328
+ 21329 77b5 00       		.byte	0x0
+ 21330 77b6 00       		.byte	0x0
+ 21331 77b7 00       		.byte	0x0
+ 21332 77b8 00       		.byte	0x0
+ 21333 77b9 34       		.uleb128 0x34
+ 21334 77ba BA0D0000 		.long	0xdba
+ 21335 77be 00000000 		.quad	.LBB2124
+ 21335      00000000 
+ 21336 77c6 00000000 		.quad	.LBE2124
+ 21336      00000000 
+ 21337 77ce 03       		.byte	0x3
+ 21338 77cf 2106     		.value	0x621
+ 21339 77d1 31       		.uleb128 0x31
+ 21340 77d2 CC0D0000 		.long	0xdcc
+ 21341 77d6 03       		.byte	0x3
+ 21342 77d7 91       		.byte	0x91
+ 21343 77d8 E075     		.sleb128 -1312
+ 21344 77da 32       		.uleb128 0x32
+ 21345 77db 00000000 		.quad	.LBB2125
+ 21345      00000000 
+ 21346 77e3 00000000 		.quad	.LBE2125
+ 21346      00000000 
+ 21347 77eb 33       		.uleb128 0x33
+ 21348 77ec D80D0000 		.long	0xdd8
+ 21349 77f0 09       		.byte	0x9
+ 21350 77f1 03       		.byte	0x3
+ 21351 77f2 00000000 		.quad	mask.8002
+ 21351      00000000 
+ 21352 77fa 34       		.uleb128 0x34
+ 21353 77fb FB0D0000 		.long	0xdfb
+ 21354 77ff 00000000 		.quad	.LBB2126
+ 21354      00000000 
+ 21355 7807 00000000 		.quad	.LBE2126
+ 21355      00000000 
+ 21356 780f 03       		.byte	0x3
+ 21357 7810 FE04     		.value	0x4fe
+ 21358 7812 31       		.uleb128 0x31
+ 21359 7813 190E0000 		.long	0xe19
+ 21360 7817 03       		.byte	0x3
+ 21361 7818 91       		.byte	0x91
+ 21362 7819 F075     		.sleb128 -1296
+ 21363 781b 31       		.uleb128 0x31
+ 21364 781c 0D0E0000 		.long	0xe0d
+ 21365 7820 03       		.byte	0x3
+ 21366 7821 91       		.byte	0x91
+ 21367 7822 8076     		.sleb128 -1280
+ 21368 7824 34       		.uleb128 0x34
+ 21369 7825 260E0000 		.long	0xe26
+ 21370 7829 00000000 		.quad	.LBB2128
+ 21370      00000000 
+ 21371 7831 00000000 		.quad	.LBE2128
+
GAS LISTING /tmp/ccPaCTqg.s 			page 548
+
+
+ 21371      00000000 
+ 21372 7839 03       		.byte	0x3
+ 21373 783a 7501     		.value	0x175
+ 21374 783c 31       		.uleb128 0x31
+ 21375 783d 440E0000 		.long	0xe44
+ 21376 7841 03       		.byte	0x3
+ 21377 7842 91       		.byte	0x91
+ 21378 7843 9076     		.sleb128 -1264
+ 21379 7845 31       		.uleb128 0x31
+ 21380 7846 380E0000 		.long	0xe38
+ 21381 784a 03       		.byte	0x3
+ 21382 784b 91       		.byte	0x91
+ 21383 784c A076     		.sleb128 -1248
+ 21384 784e 00       		.byte	0x0
+ 21385 784f 00       		.byte	0x0
+ 21386 7850 00       		.byte	0x0
+ 21387 7851 00       		.byte	0x0
+ 21388 7852 00       		.byte	0x0
+ 21389 7853 00       		.byte	0x0
+ 21390 7854 30       		.uleb128 0x30
+ 21391 7855 F7580000 		.long	0x58f7
+ 21392 7859 00000000 		.quad	.LBB2130
+ 21392      00000000 
+ 21393 7861 00000000 		.quad	.LBE2130
+ 21393      00000000 
+ 21394 7869 03       		.byte	0x3
+ 21395 786a 8F07     		.value	0x78f
+ 21396 786c 83780000 		.long	0x7883
+ 21397 7870 31       		.uleb128 0x31
+ 21398 7871 12590000 		.long	0x5912
+ 21399 7875 03       		.byte	0x3
+ 21400 7876 91       		.byte	0x91
+ 21401 7877 B076     		.sleb128 -1232
+ 21402 7879 31       		.uleb128 0x31
+ 21403 787a 08590000 		.long	0x5908
+ 21404 787e 03       		.byte	0x3
+ 21405 787f 91       		.byte	0x91
+ 21406 7880 C076     		.sleb128 -1216
+ 21407 7882 00       		.byte	0x0
+ 21408 7883 30       		.uleb128 0x30
+ 21409 7884 E30C0000 		.long	0xce3
+ 21410 7888 00000000 		.quad	.LBB2132
+ 21410      00000000 
+ 21411 7890 00000000 		.quad	.LBE2132
+ 21411      00000000 
+ 21412 7898 03       		.byte	0x3
+ 21413 7899 9007     		.value	0x790
+ 21414 789b 49790000 		.long	0x7949
+ 21415 789f 31       		.uleb128 0x31
+ 21416 78a0 010D0000 		.long	0xd01
+ 21417 78a4 03       		.byte	0x3
+ 21418 78a5 91       		.byte	0x91
+ 21419 78a6 DC76     		.sleb128 -1188
+ 21420 78a8 31       		.uleb128 0x31
+ 21421 78a9 F50C0000 		.long	0xcf5
+ 21422 78ad 03       		.byte	0x3
+ 21423 78ae 91       		.byte	0x91
+
GAS LISTING /tmp/ccPaCTqg.s 			page 549
+
+
+ 21424 78af E076     		.sleb128 -1184
+ 21425 78b1 32       		.uleb128 0x32
+ 21426 78b2 00000000 		.quad	.LBB2133
+ 21426      00000000 
+ 21427 78ba 00000000 		.quad	.LBE2133
+ 21427      00000000 
+ 21428 78c2 33       		.uleb128 0x33
+ 21429 78c3 0D0D0000 		.long	0xd0d
+ 21430 78c7 03       		.byte	0x3
+ 21431 78c8 76       		.byte	0x76
+ 21432 78c9 E056     		.sleb128 -5280
+ 21433 78cb 30       		.uleb128 0x30
+ 21434 78cc 1A0D0000 		.long	0xd1a
+ 21435 78d0 00000000 		.quad	.LBB2134
+ 21435      00000000 
+ 21436 78d8 00000000 		.quad	.LBE2134
+ 21436      00000000 
+ 21437 78e0 03       		.byte	0x3
+ 21438 78e1 8A06     		.value	0x68a
+ 21439 78e3 FA780000 		.long	0x78fa
+ 21440 78e7 31       		.uleb128 0x31
+ 21441 78e8 380D0000 		.long	0xd38
+ 21442 78ec 03       		.byte	0x3
+ 21443 78ed 91       		.byte	0x91
+ 21444 78ee FC76     		.sleb128 -1156
+ 21445 78f0 31       		.uleb128 0x31
+ 21446 78f1 2C0D0000 		.long	0xd2c
+ 21447 78f5 03       		.byte	0x3
+ 21448 78f6 91       		.byte	0x91
+ 21449 78f7 8077     		.sleb128 -1152
+ 21450 78f9 00       		.byte	0x0
+ 21451 78fa 34       		.uleb128 0x34
+ 21452 78fb 450D0000 		.long	0xd45
+ 21453 78ff 00000000 		.quad	.LBB2136
+ 21453      00000000 
+ 21454 7907 00000000 		.quad	.LBE2136
+ 21454      00000000 
+ 21455 790f 03       		.byte	0x3
+ 21456 7910 8B06     		.value	0x68b
+ 21457 7912 31       		.uleb128 0x31
+ 21458 7913 570D0000 		.long	0xd57
+ 21459 7917 03       		.byte	0x3
+ 21460 7918 91       		.byte	0x91
+ 21461 7919 9077     		.sleb128 -1136
+ 21462 791b 34       		.uleb128 0x34
+ 21463 791c 640D0000 		.long	0xd64
+ 21464 7920 00000000 		.quad	.LBB2138
+ 21464      00000000 
+ 21465 7928 00000000 		.quad	.LBE2138
+ 21465      00000000 
+ 21466 7930 03       		.byte	0x3
+ 21467 7931 4905     		.value	0x549
+ 21468 7933 31       		.uleb128 0x31
+ 21469 7934 820D0000 		.long	0xd82
+ 21470 7938 03       		.byte	0x3
+ 21471 7939 91       		.byte	0x91
+ 21472 793a AC77     		.sleb128 -1108
+
GAS LISTING /tmp/ccPaCTqg.s 			page 550
+
+
+ 21473 793c 31       		.uleb128 0x31
+ 21474 793d 760D0000 		.long	0xd76
+ 21475 7941 03       		.byte	0x3
+ 21476 7942 91       		.byte	0x91
+ 21477 7943 B077     		.sleb128 -1104
+ 21478 7945 00       		.byte	0x0
+ 21479 7946 00       		.byte	0x0
+ 21480 7947 00       		.byte	0x0
+ 21481 7948 00       		.byte	0x0
+ 21482 7949 30       		.uleb128 0x30
+ 21483 794a 8F0D0000 		.long	0xd8f
+ 21484 794e 00000000 		.quad	.LBB2140
+ 21484      00000000 
+ 21485 7956 00000000 		.quad	.LBE2140
+ 21485      00000000 
+ 21486 795e 03       		.byte	0x3
+ 21487 795f 9007     		.value	0x790
+ 21488 7961 5D7B0000 		.long	0x7b5d
+ 21489 7965 31       		.uleb128 0x31
+ 21490 7966 A10D0000 		.long	0xda1
+ 21491 796a 03       		.byte	0x3
+ 21492 796b 91       		.byte	0x91
+ 21493 796c C077     		.sleb128 -1088
+ 21494 796e 32       		.uleb128 0x32
+ 21495 796f 00000000 		.quad	.LBB2141
+ 21495      00000000 
+ 21496 7977 00000000 		.quad	.LBE2141
+ 21496      00000000 
+ 21497 797f 33       		.uleb128 0x33
+ 21498 7980 AD0D0000 		.long	0xdad
+ 21499 7984 03       		.byte	0x3
+ 21500 7985 76       		.byte	0x76
+ 21501 7986 F056     		.sleb128 -5264
+ 21502 7988 30       		.uleb128 0x30
+ 21503 7989 BA0D0000 		.long	0xdba
+ 21504 798d 00000000 		.quad	.LBB2142
+ 21504      00000000 
+ 21505 7995 00000000 		.quad	.LBE2142
+ 21505      00000000 
+ 21506 799d 03       		.byte	0x3
+ 21507 799e 1F06     		.value	0x61f
+ 21508 79a0 257A0000 		.long	0x7a25
+ 21509 79a4 31       		.uleb128 0x31
+ 21510 79a5 CC0D0000 		.long	0xdcc
+ 21511 79a9 03       		.byte	0x3
+ 21512 79aa 91       		.byte	0x91
+ 21513 79ab D077     		.sleb128 -1072
+ 21514 79ad 32       		.uleb128 0x32
+ 21515 79ae 00000000 		.quad	.LBB2143
+ 21515      00000000 
+ 21516 79b6 00000000 		.quad	.LBE2143
+ 21516      00000000 
+ 21517 79be 33       		.uleb128 0x33
+ 21518 79bf D80D0000 		.long	0xdd8
+ 21519 79c3 09       		.byte	0x9
+ 21520 79c4 03       		.byte	0x3
+ 21521 79c5 00000000 		.quad	mask.8002
+
GAS LISTING /tmp/ccPaCTqg.s 			page 551
+
+
+ 21521      00000000 
+ 21522 79cd 34       		.uleb128 0x34
+ 21523 79ce FB0D0000 		.long	0xdfb
+ 21524 79d2 00000000 		.quad	.LBB2144
+ 21524      00000000 
+ 21525 79da 00000000 		.quad	.LBE2144
+ 21525      00000000 
+ 21526 79e2 03       		.byte	0x3
+ 21527 79e3 FE04     		.value	0x4fe
+ 21528 79e5 31       		.uleb128 0x31
+ 21529 79e6 190E0000 		.long	0xe19
+ 21530 79ea 03       		.byte	0x3
+ 21531 79eb 91       		.byte	0x91
+ 21532 79ec E077     		.sleb128 -1056
+ 21533 79ee 31       		.uleb128 0x31
+ 21534 79ef 0D0E0000 		.long	0xe0d
+ 21535 79f3 03       		.byte	0x3
+ 21536 79f4 91       		.byte	0x91
+ 21537 79f5 F077     		.sleb128 -1040
+ 21538 79f7 34       		.uleb128 0x34
+ 21539 79f8 260E0000 		.long	0xe26
+ 21540 79fc 00000000 		.quad	.LBB2146
+ 21540      00000000 
+ 21541 7a04 00000000 		.quad	.LBE2146
+ 21541      00000000 
+ 21542 7a0c 03       		.byte	0x3
+ 21543 7a0d 7501     		.value	0x175
+ 21544 7a0f 31       		.uleb128 0x31
+ 21545 7a10 440E0000 		.long	0xe44
+ 21546 7a14 03       		.byte	0x3
+ 21547 7a15 91       		.byte	0x91
+ 21548 7a16 8078     		.sleb128 -1024
+ 21549 7a18 31       		.uleb128 0x31
+ 21550 7a19 380E0000 		.long	0xe38
+ 21551 7a1d 03       		.byte	0x3
+ 21552 7a1e 91       		.byte	0x91
+ 21553 7a1f 9078     		.sleb128 -1008
+ 21554 7a21 00       		.byte	0x0
+ 21555 7a22 00       		.byte	0x0
+ 21556 7a23 00       		.byte	0x0
+ 21557 7a24 00       		.byte	0x0
+ 21558 7a25 30       		.uleb128 0x30
+ 21559 7a26 BA0D0000 		.long	0xdba
+ 21560 7a2a 00000000 		.quad	.LBB2148
+ 21560      00000000 
+ 21561 7a32 00000000 		.quad	.LBE2148
+ 21561      00000000 
+ 21562 7a3a 03       		.byte	0x3
+ 21563 7a3b 2006     		.value	0x620
+ 21564 7a3d C27A0000 		.long	0x7ac2
+ 21565 7a41 31       		.uleb128 0x31
+ 21566 7a42 CC0D0000 		.long	0xdcc
+ 21567 7a46 03       		.byte	0x3
+ 21568 7a47 91       		.byte	0x91
+ 21569 7a48 A078     		.sleb128 -992
+ 21570 7a4a 32       		.uleb128 0x32
+ 21571 7a4b 00000000 		.quad	.LBB2149
+
GAS LISTING /tmp/ccPaCTqg.s 			page 552
+
+
+ 21571      00000000 
+ 21572 7a53 00000000 		.quad	.LBE2149
+ 21572      00000000 
+ 21573 7a5b 33       		.uleb128 0x33
+ 21574 7a5c D80D0000 		.long	0xdd8
+ 21575 7a60 09       		.byte	0x9
+ 21576 7a61 03       		.byte	0x3
+ 21577 7a62 00000000 		.quad	mask.8002
+ 21577      00000000 
+ 21578 7a6a 34       		.uleb128 0x34
+ 21579 7a6b FB0D0000 		.long	0xdfb
+ 21580 7a6f 00000000 		.quad	.LBB2150
+ 21580      00000000 
+ 21581 7a77 00000000 		.quad	.LBE2150
+ 21581      00000000 
+ 21582 7a7f 03       		.byte	0x3
+ 21583 7a80 FE04     		.value	0x4fe
+ 21584 7a82 31       		.uleb128 0x31
+ 21585 7a83 190E0000 		.long	0xe19
+ 21586 7a87 03       		.byte	0x3
+ 21587 7a88 91       		.byte	0x91
+ 21588 7a89 B078     		.sleb128 -976
+ 21589 7a8b 31       		.uleb128 0x31
+ 21590 7a8c 0D0E0000 		.long	0xe0d
+ 21591 7a90 03       		.byte	0x3
+ 21592 7a91 91       		.byte	0x91
+ 21593 7a92 C078     		.sleb128 -960
+ 21594 7a94 34       		.uleb128 0x34
+ 21595 7a95 260E0000 		.long	0xe26
+ 21596 7a99 00000000 		.quad	.LBB2152
+ 21596      00000000 
+ 21597 7aa1 00000000 		.quad	.LBE2152
+ 21597      00000000 
+ 21598 7aa9 03       		.byte	0x3
+ 21599 7aaa 7501     		.value	0x175
+ 21600 7aac 31       		.uleb128 0x31
+ 21601 7aad 440E0000 		.long	0xe44
+ 21602 7ab1 03       		.byte	0x3
+ 21603 7ab2 91       		.byte	0x91
+ 21604 7ab3 D078     		.sleb128 -944
+ 21605 7ab5 31       		.uleb128 0x31
+ 21606 7ab6 380E0000 		.long	0xe38
+ 21607 7aba 03       		.byte	0x3
+ 21608 7abb 91       		.byte	0x91
+ 21609 7abc E078     		.sleb128 -928
+ 21610 7abe 00       		.byte	0x0
+ 21611 7abf 00       		.byte	0x0
+ 21612 7ac0 00       		.byte	0x0
+ 21613 7ac1 00       		.byte	0x0
+ 21614 7ac2 34       		.uleb128 0x34
+ 21615 7ac3 BA0D0000 		.long	0xdba
+ 21616 7ac7 00000000 		.quad	.LBB2154
+ 21616      00000000 
+ 21617 7acf 00000000 		.quad	.LBE2154
+ 21617      00000000 
+ 21618 7ad7 03       		.byte	0x3
+ 21619 7ad8 2106     		.value	0x621
+
GAS LISTING /tmp/ccPaCTqg.s 			page 553
+
+
+ 21620 7ada 31       		.uleb128 0x31
+ 21621 7adb CC0D0000 		.long	0xdcc
+ 21622 7adf 03       		.byte	0x3
+ 21623 7ae0 91       		.byte	0x91
+ 21624 7ae1 F078     		.sleb128 -912
+ 21625 7ae3 32       		.uleb128 0x32
+ 21626 7ae4 00000000 		.quad	.LBB2155
+ 21626      00000000 
+ 21627 7aec 00000000 		.quad	.LBE2155
+ 21627      00000000 
+ 21628 7af4 33       		.uleb128 0x33
+ 21629 7af5 D80D0000 		.long	0xdd8
+ 21630 7af9 09       		.byte	0x9
+ 21631 7afa 03       		.byte	0x3
+ 21632 7afb 00000000 		.quad	mask.8002
+ 21632      00000000 
+ 21633 7b03 34       		.uleb128 0x34
+ 21634 7b04 FB0D0000 		.long	0xdfb
+ 21635 7b08 00000000 		.quad	.LBB2156
+ 21635      00000000 
+ 21636 7b10 00000000 		.quad	.LBE2156
+ 21636      00000000 
+ 21637 7b18 03       		.byte	0x3
+ 21638 7b19 FE04     		.value	0x4fe
+ 21639 7b1b 31       		.uleb128 0x31
+ 21640 7b1c 190E0000 		.long	0xe19
+ 21641 7b20 03       		.byte	0x3
+ 21642 7b21 91       		.byte	0x91
+ 21643 7b22 8079     		.sleb128 -896
+ 21644 7b24 31       		.uleb128 0x31
+ 21645 7b25 0D0E0000 		.long	0xe0d
+ 21646 7b29 03       		.byte	0x3
+ 21647 7b2a 91       		.byte	0x91
+ 21648 7b2b 9079     		.sleb128 -880
+ 21649 7b2d 34       		.uleb128 0x34
+ 21650 7b2e 260E0000 		.long	0xe26
+ 21651 7b32 00000000 		.quad	.LBB2158
+ 21651      00000000 
+ 21652 7b3a 00000000 		.quad	.LBE2158
+ 21652      00000000 
+ 21653 7b42 03       		.byte	0x3
+ 21654 7b43 7501     		.value	0x175
+ 21655 7b45 31       		.uleb128 0x31
+ 21656 7b46 440E0000 		.long	0xe44
+ 21657 7b4a 03       		.byte	0x3
+ 21658 7b4b 91       		.byte	0x91
+ 21659 7b4c A079     		.sleb128 -864
+ 21660 7b4e 31       		.uleb128 0x31
+ 21661 7b4f 380E0000 		.long	0xe38
+ 21662 7b53 03       		.byte	0x3
+ 21663 7b54 91       		.byte	0x91
+ 21664 7b55 B079     		.sleb128 -848
+ 21665 7b57 00       		.byte	0x0
+ 21666 7b58 00       		.byte	0x0
+ 21667 7b59 00       		.byte	0x0
+ 21668 7b5a 00       		.byte	0x0
+ 21669 7b5b 00       		.byte	0x0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 554
+
+
+ 21670 7b5c 00       		.byte	0x0
+ 21671 7b5d 30       		.uleb128 0x30
+ 21672 7b5e F7580000 		.long	0x58f7
+ 21673 7b62 00000000 		.quad	.LBB2160
+ 21673      00000000 
+ 21674 7b6a 00000000 		.quad	.LBE2160
+ 21674      00000000 
+ 21675 7b72 03       		.byte	0x3
+ 21676 7b73 9007     		.value	0x790
+ 21677 7b75 8C7B0000 		.long	0x7b8c
+ 21678 7b79 31       		.uleb128 0x31
+ 21679 7b7a 12590000 		.long	0x5912
+ 21680 7b7e 03       		.byte	0x3
+ 21681 7b7f 91       		.byte	0x91
+ 21682 7b80 C079     		.sleb128 -832
+ 21683 7b82 31       		.uleb128 0x31
+ 21684 7b83 08590000 		.long	0x5908
+ 21685 7b87 03       		.byte	0x3
+ 21686 7b88 91       		.byte	0x91
+ 21687 7b89 D079     		.sleb128 -816
+ 21688 7b8b 00       		.byte	0x0
+ 21689 7b8c 30       		.uleb128 0x30
+ 21690 7b8d 1D590000 		.long	0x591d
+ 21691 7b91 00000000 		.quad	.LBB2162
+ 21691      00000000 
+ 21692 7b99 00000000 		.quad	.LBE2162
+ 21692      00000000 
+ 21693 7ba1 03       		.byte	0x3
+ 21694 7ba2 9107     		.value	0x791
+ 21695 7ba4 497C0000 		.long	0x7c49
+ 21696 7ba8 31       		.uleb128 0x31
+ 21697 7ba9 2F590000 		.long	0x592f
+ 21698 7bad 03       		.byte	0x3
+ 21699 7bae 91       		.byte	0x91
+ 21700 7baf E079     		.sleb128 -800
+ 21701 7bb1 32       		.uleb128 0x32
+ 21702 7bb2 00000000 		.quad	.LBB2163
+ 21702      00000000 
+ 21703 7bba 00000000 		.quad	.LBE2163
+ 21703      00000000 
+ 21704 7bc2 33       		.uleb128 0x33
+ 21705 7bc3 3B590000 		.long	0x593b
+ 21706 7bc7 03       		.byte	0x3
+ 21707 7bc8 76       		.byte	0x76
+ 21708 7bc9 8057     		.sleb128 -5248
+ 21709 7bcb 30       		.uleb128 0x30
+ 21710 7bcc 1A0D0000 		.long	0xd1a
+ 21711 7bd0 00000000 		.quad	.LBB2164
+ 21711      00000000 
+ 21712 7bd8 00000000 		.quad	.LBE2164
+ 21712      00000000 
+ 21713 7be0 03       		.byte	0x3
+ 21714 7be1 7206     		.value	0x672
+ 21715 7be3 FA7B0000 		.long	0x7bfa
+ 21716 7be7 31       		.uleb128 0x31
+ 21717 7be8 380D0000 		.long	0xd38
+ 21718 7bec 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 555
+
+
+ 21719 7bed 91       		.byte	0x91
+ 21720 7bee FC79     		.sleb128 -772
+ 21721 7bf0 31       		.uleb128 0x31
+ 21722 7bf1 2C0D0000 		.long	0xd2c
+ 21723 7bf5 03       		.byte	0x3
+ 21724 7bf6 91       		.byte	0x91
+ 21725 7bf7 807A     		.sleb128 -768
+ 21726 7bf9 00       		.byte	0x0
+ 21727 7bfa 34       		.uleb128 0x34
+ 21728 7bfb 48590000 		.long	0x5948
+ 21729 7bff 00000000 		.quad	.LBB2166
+ 21729      00000000 
+ 21730 7c07 00000000 		.quad	.LBE2166
+ 21730      00000000 
+ 21731 7c0f 03       		.byte	0x3
+ 21732 7c10 7306     		.value	0x673
+ 21733 7c12 31       		.uleb128 0x31
+ 21734 7c13 5A590000 		.long	0x595a
+ 21735 7c17 03       		.byte	0x3
+ 21736 7c18 91       		.byte	0x91
+ 21737 7c19 907A     		.sleb128 -752
+ 21738 7c1b 34       		.uleb128 0x34
+ 21739 7c1c 640D0000 		.long	0xd64
+ 21740 7c20 00000000 		.quad	.LBB2168
+ 21740      00000000 
+ 21741 7c28 00000000 		.quad	.LBE2168
+ 21741      00000000 
+ 21742 7c30 03       		.byte	0x3
+ 21743 7c31 6505     		.value	0x565
+ 21744 7c33 31       		.uleb128 0x31
+ 21745 7c34 820D0000 		.long	0xd82
+ 21746 7c38 03       		.byte	0x3
+ 21747 7c39 91       		.byte	0x91
+ 21748 7c3a AC7A     		.sleb128 -724
+ 21749 7c3c 31       		.uleb128 0x31
+ 21750 7c3d 760D0000 		.long	0xd76
+ 21751 7c41 03       		.byte	0x3
+ 21752 7c42 91       		.byte	0x91
+ 21753 7c43 B07A     		.sleb128 -720
+ 21754 7c45 00       		.byte	0x0
+ 21755 7c46 00       		.byte	0x0
+ 21756 7c47 00       		.byte	0x0
+ 21757 7c48 00       		.byte	0x0
+ 21758 7c49 30       		.uleb128 0x30
+ 21759 7c4a 8F0D0000 		.long	0xd8f
+ 21760 7c4e 00000000 		.quad	.LBB2170
+ 21760      00000000 
+ 21761 7c56 00000000 		.quad	.LBE2170
+ 21761      00000000 
+ 21762 7c5e 03       		.byte	0x3
+ 21763 7c5f 9107     		.value	0x791
+ 21764 7c61 5D7E0000 		.long	0x7e5d
+ 21765 7c65 31       		.uleb128 0x31
+ 21766 7c66 A10D0000 		.long	0xda1
+ 21767 7c6a 03       		.byte	0x3
+ 21768 7c6b 91       		.byte	0x91
+ 21769 7c6c C07A     		.sleb128 -704
+
GAS LISTING /tmp/ccPaCTqg.s 			page 556
+
+
+ 21770 7c6e 32       		.uleb128 0x32
+ 21771 7c6f 00000000 		.quad	.LBB2171
+ 21771      00000000 
+ 21772 7c77 00000000 		.quad	.LBE2171
+ 21772      00000000 
+ 21773 7c7f 33       		.uleb128 0x33
+ 21774 7c80 AD0D0000 		.long	0xdad
+ 21775 7c84 03       		.byte	0x3
+ 21776 7c85 76       		.byte	0x76
+ 21777 7c86 9057     		.sleb128 -5232
+ 21778 7c88 30       		.uleb128 0x30
+ 21779 7c89 BA0D0000 		.long	0xdba
+ 21780 7c8d 00000000 		.quad	.LBB2172
+ 21780      00000000 
+ 21781 7c95 00000000 		.quad	.LBE2172
+ 21781      00000000 
+ 21782 7c9d 03       		.byte	0x3
+ 21783 7c9e 1F06     		.value	0x61f
+ 21784 7ca0 257D0000 		.long	0x7d25
+ 21785 7ca4 31       		.uleb128 0x31
+ 21786 7ca5 CC0D0000 		.long	0xdcc
+ 21787 7ca9 03       		.byte	0x3
+ 21788 7caa 91       		.byte	0x91
+ 21789 7cab D07A     		.sleb128 -688
+ 21790 7cad 32       		.uleb128 0x32
+ 21791 7cae 00000000 		.quad	.LBB2173
+ 21791      00000000 
+ 21792 7cb6 00000000 		.quad	.LBE2173
+ 21792      00000000 
+ 21793 7cbe 33       		.uleb128 0x33
+ 21794 7cbf D80D0000 		.long	0xdd8
+ 21795 7cc3 09       		.byte	0x9
+ 21796 7cc4 03       		.byte	0x3
+ 21797 7cc5 00000000 		.quad	mask.8002
+ 21797      00000000 
+ 21798 7ccd 34       		.uleb128 0x34
+ 21799 7cce FB0D0000 		.long	0xdfb
+ 21800 7cd2 00000000 		.quad	.LBB2174
+ 21800      00000000 
+ 21801 7cda 00000000 		.quad	.LBE2174
+ 21801      00000000 
+ 21802 7ce2 03       		.byte	0x3
+ 21803 7ce3 FE04     		.value	0x4fe
+ 21804 7ce5 31       		.uleb128 0x31
+ 21805 7ce6 190E0000 		.long	0xe19
+ 21806 7cea 03       		.byte	0x3
+ 21807 7ceb 91       		.byte	0x91
+ 21808 7cec E07A     		.sleb128 -672
+ 21809 7cee 31       		.uleb128 0x31
+ 21810 7cef 0D0E0000 		.long	0xe0d
+ 21811 7cf3 03       		.byte	0x3
+ 21812 7cf4 91       		.byte	0x91
+ 21813 7cf5 F07A     		.sleb128 -656
+ 21814 7cf7 34       		.uleb128 0x34
+ 21815 7cf8 260E0000 		.long	0xe26
+ 21816 7cfc 00000000 		.quad	.LBB2176
+ 21816      00000000 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 557
+
+
+ 21817 7d04 00000000 		.quad	.LBE2176
+ 21817      00000000 
+ 21818 7d0c 03       		.byte	0x3
+ 21819 7d0d 7501     		.value	0x175
+ 21820 7d0f 31       		.uleb128 0x31
+ 21821 7d10 440E0000 		.long	0xe44
+ 21822 7d14 03       		.byte	0x3
+ 21823 7d15 91       		.byte	0x91
+ 21824 7d16 807B     		.sleb128 -640
+ 21825 7d18 31       		.uleb128 0x31
+ 21826 7d19 380E0000 		.long	0xe38
+ 21827 7d1d 03       		.byte	0x3
+ 21828 7d1e 91       		.byte	0x91
+ 21829 7d1f 907B     		.sleb128 -624
+ 21830 7d21 00       		.byte	0x0
+ 21831 7d22 00       		.byte	0x0
+ 21832 7d23 00       		.byte	0x0
+ 21833 7d24 00       		.byte	0x0
+ 21834 7d25 30       		.uleb128 0x30
+ 21835 7d26 BA0D0000 		.long	0xdba
+ 21836 7d2a 00000000 		.quad	.LBB2178
+ 21836      00000000 
+ 21837 7d32 00000000 		.quad	.LBE2178
+ 21837      00000000 
+ 21838 7d3a 03       		.byte	0x3
+ 21839 7d3b 2006     		.value	0x620
+ 21840 7d3d C27D0000 		.long	0x7dc2
+ 21841 7d41 31       		.uleb128 0x31
+ 21842 7d42 CC0D0000 		.long	0xdcc
+ 21843 7d46 03       		.byte	0x3
+ 21844 7d47 91       		.byte	0x91
+ 21845 7d48 A07B     		.sleb128 -608
+ 21846 7d4a 32       		.uleb128 0x32
+ 21847 7d4b 00000000 		.quad	.LBB2179
+ 21847      00000000 
+ 21848 7d53 00000000 		.quad	.LBE2179
+ 21848      00000000 
+ 21849 7d5b 33       		.uleb128 0x33
+ 21850 7d5c D80D0000 		.long	0xdd8
+ 21851 7d60 09       		.byte	0x9
+ 21852 7d61 03       		.byte	0x3
+ 21853 7d62 00000000 		.quad	mask.8002
+ 21853      00000000 
+ 21854 7d6a 34       		.uleb128 0x34
+ 21855 7d6b FB0D0000 		.long	0xdfb
+ 21856 7d6f 00000000 		.quad	.LBB2180
+ 21856      00000000 
+ 21857 7d77 00000000 		.quad	.LBE2180
+ 21857      00000000 
+ 21858 7d7f 03       		.byte	0x3
+ 21859 7d80 FE04     		.value	0x4fe
+ 21860 7d82 31       		.uleb128 0x31
+ 21861 7d83 190E0000 		.long	0xe19
+ 21862 7d87 03       		.byte	0x3
+ 21863 7d88 91       		.byte	0x91
+ 21864 7d89 B07B     		.sleb128 -592
+ 21865 7d8b 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s 			page 558
+
+
+ 21866 7d8c 0D0E0000 		.long	0xe0d
+ 21867 7d90 03       		.byte	0x3
+ 21868 7d91 91       		.byte	0x91
+ 21869 7d92 C07B     		.sleb128 -576
+ 21870 7d94 34       		.uleb128 0x34
+ 21871 7d95 260E0000 		.long	0xe26
+ 21872 7d99 00000000 		.quad	.LBB2182
+ 21872      00000000 
+ 21873 7da1 00000000 		.quad	.LBE2182
+ 21873      00000000 
+ 21874 7da9 03       		.byte	0x3
+ 21875 7daa 7501     		.value	0x175
+ 21876 7dac 31       		.uleb128 0x31
+ 21877 7dad 440E0000 		.long	0xe44
+ 21878 7db1 03       		.byte	0x3
+ 21879 7db2 91       		.byte	0x91
+ 21880 7db3 D07B     		.sleb128 -560
+ 21881 7db5 31       		.uleb128 0x31
+ 21882 7db6 380E0000 		.long	0xe38
+ 21883 7dba 03       		.byte	0x3
+ 21884 7dbb 91       		.byte	0x91
+ 21885 7dbc E07B     		.sleb128 -544
+ 21886 7dbe 00       		.byte	0x0
+ 21887 7dbf 00       		.byte	0x0
+ 21888 7dc0 00       		.byte	0x0
+ 21889 7dc1 00       		.byte	0x0
+ 21890 7dc2 34       		.uleb128 0x34
+ 21891 7dc3 BA0D0000 		.long	0xdba
+ 21892 7dc7 00000000 		.quad	.LBB2184
+ 21892      00000000 
+ 21893 7dcf 00000000 		.quad	.LBE2184
+ 21893      00000000 
+ 21894 7dd7 03       		.byte	0x3
+ 21895 7dd8 2106     		.value	0x621
+ 21896 7dda 31       		.uleb128 0x31
+ 21897 7ddb CC0D0000 		.long	0xdcc
+ 21898 7ddf 03       		.byte	0x3
+ 21899 7de0 91       		.byte	0x91
+ 21900 7de1 F07B     		.sleb128 -528
+ 21901 7de3 32       		.uleb128 0x32
+ 21902 7de4 00000000 		.quad	.LBB2185
+ 21902      00000000 
+ 21903 7dec 00000000 		.quad	.LBE2185
+ 21903      00000000 
+ 21904 7df4 33       		.uleb128 0x33
+ 21905 7df5 D80D0000 		.long	0xdd8
+ 21906 7df9 09       		.byte	0x9
+ 21907 7dfa 03       		.byte	0x3
+ 21908 7dfb 00000000 		.quad	mask.8002
+ 21908      00000000 
+ 21909 7e03 34       		.uleb128 0x34
+ 21910 7e04 FB0D0000 		.long	0xdfb
+ 21911 7e08 00000000 		.quad	.LBB2186
+ 21911      00000000 
+ 21912 7e10 00000000 		.quad	.LBE2186
+ 21912      00000000 
+ 21913 7e18 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 559
+
+
+ 21914 7e19 FE04     		.value	0x4fe
+ 21915 7e1b 31       		.uleb128 0x31
+ 21916 7e1c 190E0000 		.long	0xe19
+ 21917 7e20 03       		.byte	0x3
+ 21918 7e21 91       		.byte	0x91
+ 21919 7e22 807C     		.sleb128 -512
+ 21920 7e24 31       		.uleb128 0x31
+ 21921 7e25 0D0E0000 		.long	0xe0d
+ 21922 7e29 03       		.byte	0x3
+ 21923 7e2a 91       		.byte	0x91
+ 21924 7e2b 907C     		.sleb128 -496
+ 21925 7e2d 34       		.uleb128 0x34
+ 21926 7e2e 260E0000 		.long	0xe26
+ 21927 7e32 00000000 		.quad	.LBB2188
+ 21927      00000000 
+ 21928 7e3a 00000000 		.quad	.LBE2188
+ 21928      00000000 
+ 21929 7e42 03       		.byte	0x3
+ 21930 7e43 7501     		.value	0x175
+ 21931 7e45 31       		.uleb128 0x31
+ 21932 7e46 440E0000 		.long	0xe44
+ 21933 7e4a 03       		.byte	0x3
+ 21934 7e4b 91       		.byte	0x91
+ 21935 7e4c A07C     		.sleb128 -480
+ 21936 7e4e 31       		.uleb128 0x31
+ 21937 7e4f 380E0000 		.long	0xe38
+ 21938 7e53 03       		.byte	0x3
+ 21939 7e54 91       		.byte	0x91
+ 21940 7e55 B07C     		.sleb128 -464
+ 21941 7e57 00       		.byte	0x0
+ 21942 7e58 00       		.byte	0x0
+ 21943 7e59 00       		.byte	0x0
+ 21944 7e5a 00       		.byte	0x0
+ 21945 7e5b 00       		.byte	0x0
+ 21946 7e5c 00       		.byte	0x0
+ 21947 7e5d 30       		.uleb128 0x30
+ 21948 7e5e F7580000 		.long	0x58f7
+ 21949 7e62 00000000 		.quad	.LBB2190
+ 21949      00000000 
+ 21950 7e6a 00000000 		.quad	.LBE2190
+ 21950      00000000 
+ 21951 7e72 03       		.byte	0x3
+ 21952 7e73 9107     		.value	0x791
+ 21953 7e75 8C7E0000 		.long	0x7e8c
+ 21954 7e79 31       		.uleb128 0x31
+ 21955 7e7a 12590000 		.long	0x5912
+ 21956 7e7e 03       		.byte	0x3
+ 21957 7e7f 91       		.byte	0x91
+ 21958 7e80 C07C     		.sleb128 -448
+ 21959 7e82 31       		.uleb128 0x31
+ 21960 7e83 08590000 		.long	0x5908
+ 21961 7e87 03       		.byte	0x3
+ 21962 7e88 91       		.byte	0x91
+ 21963 7e89 D07C     		.sleb128 -432
+ 21964 7e8b 00       		.byte	0x0
+ 21965 7e8c 30       		.uleb128 0x30
+ 21966 7e8d E30C0000 		.long	0xce3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 560
+
+
+ 21967 7e91 00000000 		.quad	.LBB2192
+ 21967      00000000 
+ 21968 7e99 00000000 		.quad	.LBE2192
+ 21968      00000000 
+ 21969 7ea1 03       		.byte	0x3
+ 21970 7ea2 9207     		.value	0x792
+ 21971 7ea4 527F0000 		.long	0x7f52
+ 21972 7ea8 31       		.uleb128 0x31
+ 21973 7ea9 010D0000 		.long	0xd01
+ 21974 7ead 03       		.byte	0x3
+ 21975 7eae 91       		.byte	0x91
+ 21976 7eaf EC7C     		.sleb128 -404
+ 21977 7eb1 31       		.uleb128 0x31
+ 21978 7eb2 F50C0000 		.long	0xcf5
+ 21979 7eb6 03       		.byte	0x3
+ 21980 7eb7 91       		.byte	0x91
+ 21981 7eb8 F07C     		.sleb128 -400
+ 21982 7eba 32       		.uleb128 0x32
+ 21983 7ebb 00000000 		.quad	.LBB2193
+ 21983      00000000 
+ 21984 7ec3 00000000 		.quad	.LBE2193
+ 21984      00000000 
+ 21985 7ecb 33       		.uleb128 0x33
+ 21986 7ecc 0D0D0000 		.long	0xd0d
+ 21987 7ed0 03       		.byte	0x3
+ 21988 7ed1 76       		.byte	0x76
+ 21989 7ed2 A057     		.sleb128 -5216
+ 21990 7ed4 30       		.uleb128 0x30
+ 21991 7ed5 1A0D0000 		.long	0xd1a
+ 21992 7ed9 00000000 		.quad	.LBB2194
+ 21992      00000000 
+ 21993 7ee1 00000000 		.quad	.LBE2194
+ 21993      00000000 
+ 21994 7ee9 03       		.byte	0x3
+ 21995 7eea 8A06     		.value	0x68a
+ 21996 7eec 037F0000 		.long	0x7f03
+ 21997 7ef0 31       		.uleb128 0x31
+ 21998 7ef1 380D0000 		.long	0xd38
+ 21999 7ef5 03       		.byte	0x3
+ 22000 7ef6 91       		.byte	0x91
+ 22001 7ef7 8C7D     		.sleb128 -372
+ 22002 7ef9 31       		.uleb128 0x31
+ 22003 7efa 2C0D0000 		.long	0xd2c
+ 22004 7efe 03       		.byte	0x3
+ 22005 7eff 91       		.byte	0x91
+ 22006 7f00 907D     		.sleb128 -368
+ 22007 7f02 00       		.byte	0x0
+ 22008 7f03 34       		.uleb128 0x34
+ 22009 7f04 450D0000 		.long	0xd45
+ 22010 7f08 00000000 		.quad	.LBB2196
+ 22010      00000000 
+ 22011 7f10 00000000 		.quad	.LBE2196
+ 22011      00000000 
+ 22012 7f18 03       		.byte	0x3
+ 22013 7f19 8B06     		.value	0x68b
+ 22014 7f1b 31       		.uleb128 0x31
+ 22015 7f1c 570D0000 		.long	0xd57
+
GAS LISTING /tmp/ccPaCTqg.s 			page 561
+
+
+ 22016 7f20 03       		.byte	0x3
+ 22017 7f21 91       		.byte	0x91
+ 22018 7f22 A07D     		.sleb128 -352
+ 22019 7f24 34       		.uleb128 0x34
+ 22020 7f25 640D0000 		.long	0xd64
+ 22021 7f29 00000000 		.quad	.LBB2198
+ 22021      00000000 
+ 22022 7f31 00000000 		.quad	.LBE2198
+ 22022      00000000 
+ 22023 7f39 03       		.byte	0x3
+ 22024 7f3a 4905     		.value	0x549
+ 22025 7f3c 31       		.uleb128 0x31
+ 22026 7f3d 820D0000 		.long	0xd82
+ 22027 7f41 03       		.byte	0x3
+ 22028 7f42 91       		.byte	0x91
+ 22029 7f43 BC7D     		.sleb128 -324
+ 22030 7f45 31       		.uleb128 0x31
+ 22031 7f46 760D0000 		.long	0xd76
+ 22032 7f4a 03       		.byte	0x3
+ 22033 7f4b 91       		.byte	0x91
+ 22034 7f4c C07D     		.sleb128 -320
+ 22035 7f4e 00       		.byte	0x0
+ 22036 7f4f 00       		.byte	0x0
+ 22037 7f50 00       		.byte	0x0
+ 22038 7f51 00       		.byte	0x0
+ 22039 7f52 30       		.uleb128 0x30
+ 22040 7f53 8F0D0000 		.long	0xd8f
+ 22041 7f57 00000000 		.quad	.LBB2200
+ 22041      00000000 
+ 22042 7f5f 00000000 		.quad	.LBE2200
+ 22042      00000000 
+ 22043 7f67 03       		.byte	0x3
+ 22044 7f68 9207     		.value	0x792
+ 22045 7f6a 65810000 		.long	0x8165
+ 22046 7f6e 31       		.uleb128 0x31
+ 22047 7f6f A10D0000 		.long	0xda1
+ 22048 7f73 03       		.byte	0x3
+ 22049 7f74 91       		.byte	0x91
+ 22050 7f75 D07D     		.sleb128 -304
+ 22051 7f77 32       		.uleb128 0x32
+ 22052 7f78 00000000 		.quad	.LBB2201
+ 22052      00000000 
+ 22053 7f80 00000000 		.quad	.LBE2201
+ 22053      00000000 
+ 22054 7f88 33       		.uleb128 0x33
+ 22055 7f89 AD0D0000 		.long	0xdad
+ 22056 7f8d 03       		.byte	0x3
+ 22057 7f8e 76       		.byte	0x76
+ 22058 7f8f B057     		.sleb128 -5200
+ 22059 7f91 30       		.uleb128 0x30
+ 22060 7f92 BA0D0000 		.long	0xdba
+ 22061 7f96 00000000 		.quad	.LBB2202
+ 22061      00000000 
+ 22062 7f9e 00000000 		.quad	.LBE2202
+ 22062      00000000 
+ 22063 7fa6 03       		.byte	0x3
+ 22064 7fa7 1F06     		.value	0x61f
+
GAS LISTING /tmp/ccPaCTqg.s 			page 562
+
+
+ 22065 7fa9 2E800000 		.long	0x802e
+ 22066 7fad 31       		.uleb128 0x31
+ 22067 7fae CC0D0000 		.long	0xdcc
+ 22068 7fb2 03       		.byte	0x3
+ 22069 7fb3 91       		.byte	0x91
+ 22070 7fb4 E07D     		.sleb128 -288
+ 22071 7fb6 32       		.uleb128 0x32
+ 22072 7fb7 00000000 		.quad	.LBB2203
+ 22072      00000000 
+ 22073 7fbf 00000000 		.quad	.LBE2203
+ 22073      00000000 
+ 22074 7fc7 33       		.uleb128 0x33
+ 22075 7fc8 D80D0000 		.long	0xdd8
+ 22076 7fcc 09       		.byte	0x9
+ 22077 7fcd 03       		.byte	0x3
+ 22078 7fce 00000000 		.quad	mask.8002
+ 22078      00000000 
+ 22079 7fd6 34       		.uleb128 0x34
+ 22080 7fd7 FB0D0000 		.long	0xdfb
+ 22081 7fdb 00000000 		.quad	.LBB2204
+ 22081      00000000 
+ 22082 7fe3 00000000 		.quad	.LBE2204
+ 22082      00000000 
+ 22083 7feb 03       		.byte	0x3
+ 22084 7fec FE04     		.value	0x4fe
+ 22085 7fee 31       		.uleb128 0x31
+ 22086 7fef 190E0000 		.long	0xe19
+ 22087 7ff3 03       		.byte	0x3
+ 22088 7ff4 91       		.byte	0x91
+ 22089 7ff5 F07D     		.sleb128 -272
+ 22090 7ff7 31       		.uleb128 0x31
+ 22091 7ff8 0D0E0000 		.long	0xe0d
+ 22092 7ffc 03       		.byte	0x3
+ 22093 7ffd 91       		.byte	0x91
+ 22094 7ffe 807E     		.sleb128 -256
+ 22095 8000 34       		.uleb128 0x34
+ 22096 8001 260E0000 		.long	0xe26
+ 22097 8005 00000000 		.quad	.LBB2206
+ 22097      00000000 
+ 22098 800d 00000000 		.quad	.LBE2206
+ 22098      00000000 
+ 22099 8015 03       		.byte	0x3
+ 22100 8016 7501     		.value	0x175
+ 22101 8018 31       		.uleb128 0x31
+ 22102 8019 440E0000 		.long	0xe44
+ 22103 801d 03       		.byte	0x3
+ 22104 801e 91       		.byte	0x91
+ 22105 801f 907E     		.sleb128 -240
+ 22106 8021 31       		.uleb128 0x31
+ 22107 8022 380E0000 		.long	0xe38
+ 22108 8026 03       		.byte	0x3
+ 22109 8027 91       		.byte	0x91
+ 22110 8028 A07E     		.sleb128 -224
+ 22111 802a 00       		.byte	0x0
+ 22112 802b 00       		.byte	0x0
+ 22113 802c 00       		.byte	0x0
+ 22114 802d 00       		.byte	0x0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 563
+
+
+ 22115 802e 30       		.uleb128 0x30
+ 22116 802f BA0D0000 		.long	0xdba
+ 22117 8033 00000000 		.quad	.LBB2208
+ 22117      00000000 
+ 22118 803b 00000000 		.quad	.LBE2208
+ 22118      00000000 
+ 22119 8043 03       		.byte	0x3
+ 22120 8044 2006     		.value	0x620
+ 22121 8046 CB800000 		.long	0x80cb
+ 22122 804a 31       		.uleb128 0x31
+ 22123 804b CC0D0000 		.long	0xdcc
+ 22124 804f 03       		.byte	0x3
+ 22125 8050 91       		.byte	0x91
+ 22126 8051 B07E     		.sleb128 -208
+ 22127 8053 32       		.uleb128 0x32
+ 22128 8054 00000000 		.quad	.LBB2209
+ 22128      00000000 
+ 22129 805c 00000000 		.quad	.LBE2209
+ 22129      00000000 
+ 22130 8064 33       		.uleb128 0x33
+ 22131 8065 D80D0000 		.long	0xdd8
+ 22132 8069 09       		.byte	0x9
+ 22133 806a 03       		.byte	0x3
+ 22134 806b 00000000 		.quad	mask.8002
+ 22134      00000000 
+ 22135 8073 34       		.uleb128 0x34
+ 22136 8074 FB0D0000 		.long	0xdfb
+ 22137 8078 00000000 		.quad	.LBB2210
+ 22137      00000000 
+ 22138 8080 00000000 		.quad	.LBE2210
+ 22138      00000000 
+ 22139 8088 03       		.byte	0x3
+ 22140 8089 FE04     		.value	0x4fe
+ 22141 808b 31       		.uleb128 0x31
+ 22142 808c 190E0000 		.long	0xe19
+ 22143 8090 03       		.byte	0x3
+ 22144 8091 91       		.byte	0x91
+ 22145 8092 C07E     		.sleb128 -192
+ 22146 8094 31       		.uleb128 0x31
+ 22147 8095 0D0E0000 		.long	0xe0d
+ 22148 8099 03       		.byte	0x3
+ 22149 809a 91       		.byte	0x91
+ 22150 809b D07E     		.sleb128 -176
+ 22151 809d 34       		.uleb128 0x34
+ 22152 809e 260E0000 		.long	0xe26
+ 22153 80a2 00000000 		.quad	.LBB2212
+ 22153      00000000 
+ 22154 80aa 00000000 		.quad	.LBE2212
+ 22154      00000000 
+ 22155 80b2 03       		.byte	0x3
+ 22156 80b3 7501     		.value	0x175
+ 22157 80b5 31       		.uleb128 0x31
+ 22158 80b6 440E0000 		.long	0xe44
+ 22159 80ba 03       		.byte	0x3
+ 22160 80bb 91       		.byte	0x91
+ 22161 80bc E07E     		.sleb128 -160
+ 22162 80be 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s 			page 564
+
+
+ 22163 80bf 380E0000 		.long	0xe38
+ 22164 80c3 03       		.byte	0x3
+ 22165 80c4 91       		.byte	0x91
+ 22166 80c5 F07E     		.sleb128 -144
+ 22167 80c7 00       		.byte	0x0
+ 22168 80c8 00       		.byte	0x0
+ 22169 80c9 00       		.byte	0x0
+ 22170 80ca 00       		.byte	0x0
+ 22171 80cb 34       		.uleb128 0x34
+ 22172 80cc BA0D0000 		.long	0xdba
+ 22173 80d0 00000000 		.quad	.LBB2214
+ 22173      00000000 
+ 22174 80d8 00000000 		.quad	.LBE2214
+ 22174      00000000 
+ 22175 80e0 03       		.byte	0x3
+ 22176 80e1 2106     		.value	0x621
+ 22177 80e3 31       		.uleb128 0x31
+ 22178 80e4 CC0D0000 		.long	0xdcc
+ 22179 80e8 03       		.byte	0x3
+ 22180 80e9 91       		.byte	0x91
+ 22181 80ea 807F     		.sleb128 -128
+ 22182 80ec 32       		.uleb128 0x32
+ 22183 80ed 00000000 		.quad	.LBB2215
+ 22183      00000000 
+ 22184 80f5 00000000 		.quad	.LBE2215
+ 22184      00000000 
+ 22185 80fd 33       		.uleb128 0x33
+ 22186 80fe D80D0000 		.long	0xdd8
+ 22187 8102 09       		.byte	0x9
+ 22188 8103 03       		.byte	0x3
+ 22189 8104 00000000 		.quad	mask.8002
+ 22189      00000000 
+ 22190 810c 34       		.uleb128 0x34
+ 22191 810d FB0D0000 		.long	0xdfb
+ 22192 8111 00000000 		.quad	.LBB2216
+ 22192      00000000 
+ 22193 8119 00000000 		.quad	.LBE2216
+ 22193      00000000 
+ 22194 8121 03       		.byte	0x3
+ 22195 8122 FE04     		.value	0x4fe
+ 22196 8124 31       		.uleb128 0x31
+ 22197 8125 190E0000 		.long	0xe19
+ 22198 8129 03       		.byte	0x3
+ 22199 812a 91       		.byte	0x91
+ 22200 812b 907F     		.sleb128 -112
+ 22201 812d 31       		.uleb128 0x31
+ 22202 812e 0D0E0000 		.long	0xe0d
+ 22203 8132 03       		.byte	0x3
+ 22204 8133 91       		.byte	0x91
+ 22205 8134 A07F     		.sleb128 -96
+ 22206 8136 34       		.uleb128 0x34
+ 22207 8137 260E0000 		.long	0xe26
+ 22208 813b 00000000 		.quad	.LBB2218
+ 22208      00000000 
+ 22209 8143 00000000 		.quad	.LBE2218
+ 22209      00000000 
+ 22210 814b 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 565
+
+
+ 22211 814c 7501     		.value	0x175
+ 22212 814e 31       		.uleb128 0x31
+ 22213 814f 440E0000 		.long	0xe44
+ 22214 8153 03       		.byte	0x3
+ 22215 8154 91       		.byte	0x91
+ 22216 8155 B07F     		.sleb128 -80
+ 22217 8157 31       		.uleb128 0x31
+ 22218 8158 380E0000 		.long	0xe38
+ 22219 815c 02       		.byte	0x2
+ 22220 815d 91       		.byte	0x91
+ 22221 815e 40       		.sleb128 -64
+ 22222 815f 00       		.byte	0x0
+ 22223 8160 00       		.byte	0x0
+ 22224 8161 00       		.byte	0x0
+ 22225 8162 00       		.byte	0x0
+ 22226 8163 00       		.byte	0x0
+ 22227 8164 00       		.byte	0x0
+ 22228 8165 34       		.uleb128 0x34
+ 22229 8166 F7580000 		.long	0x58f7
+ 22230 816a 00000000 		.quad	.LBB2220
+ 22230      00000000 
+ 22231 8172 00000000 		.quad	.LBE2220
+ 22231      00000000 
+ 22232 817a 03       		.byte	0x3
+ 22233 817b 9207     		.value	0x792
+ 22234 817d 31       		.uleb128 0x31
+ 22235 817e 12590000 		.long	0x5912
+ 22236 8182 02       		.byte	0x2
+ 22237 8183 91       		.byte	0x91
+ 22238 8184 50       		.sleb128 -48
+ 22239 8185 31       		.uleb128 0x31
+ 22240 8186 08590000 		.long	0x5908
+ 22241 818a 02       		.byte	0x2
+ 22242 818b 91       		.byte	0x91
+ 22243 818c 60       		.sleb128 -32
+ 22244 818d 00       		.byte	0x0
+ 22245 818e 00       		.byte	0x0
+ 22246 818f 27       		.uleb128 0x27
+ 22247 8190 00000000 		.long	.LASF352
+ 22248 8194 03       		.byte	0x3
+ 22249 8195 4B04     		.value	0x44b
+ 22250 8197 01       		.byte	0x1
+ 22251 8198 C9010000 		.long	0x1c9
+ 22252 819c 03       		.byte	0x3
+ 22253 819d AE810000 		.long	0x81ae
+ 22254 81a1 28       		.uleb128 0x28
+ 22255 81a2 00000000 		.long	.LASF63
+ 22256 81a6 03       		.byte	0x3
+ 22257 81a7 4B04     		.value	0x44b
+ 22258 81a9 C9010000 		.long	0x1c9
+ 22259 81ad 00       		.byte	0x0
+ 22260 81ae 2D       		.uleb128 0x2d
+ 22261 81af 00000000 		.long	.LASF353
+ 22262 81b3 03       		.byte	0x3
+ 22263 81b4 9E07     		.value	0x79e
+ 22264 81b6 01       		.byte	0x1
+ 22265 81b7 00000000 		.quad	.LFB659
+
GAS LISTING /tmp/ccPaCTqg.s 			page 566
+
+
+ 22265      00000000 
+ 22266 81bf 00000000 		.quad	.LFE659
+ 22266      00000000 
+ 22267 81c7 00000000 		.long	.LLST9
+ 22268 81cb 39820000 		.long	0x8239
+ 22269 81cf 2E       		.uleb128 0x2e
+ 22270 81d0 7200     		.string	"r"
+ 22271 81d2 03       		.byte	0x3
+ 22272 81d3 9E07     		.value	0x79e
+ 22273 81d5 712B0000 		.long	0x2b71
+ 22274 81d9 03       		.byte	0x3
+ 22275 81da 91       		.byte	0x91
+ 22276 81db B87F     		.sleb128 -72
+ 22277 81dd 2E       		.uleb128 0x2e
+ 22278 81de 647200   		.string	"dr"
+ 22279 81e1 03       		.byte	0x3
+ 22280 81e2 9E07     		.value	0x79e
+ 22281 81e4 39820000 		.long	0x8239
+ 22282 81e8 03       		.byte	0x3
+ 22283 81e9 91       		.byte	0x91
+ 22284 81ea B07F     		.sleb128 -80
+ 22285 81ec 2E       		.uleb128 0x2e
+ 22286 81ed 4E7200   		.string	"Nr"
+ 22287 81f0 03       		.byte	0x3
+ 22288 81f1 9E07     		.value	0x79e
+ 22289 81f3 78000000 		.long	0x78
+ 22290 81f7 03       		.byte	0x3
+ 22291 81f8 91       		.byte	0x91
+ 22292 81f9 AC7F     		.sleb128 -84
+ 22293 81fb 35       		.uleb128 0x35
+ 22294 81fc 697800   		.string	"ix"
+ 22295 81ff 03       		.byte	0x3
+ 22296 8200 A007     		.value	0x7a0
+ 22297 8202 78000000 		.long	0x78
+ 22298 8206 02       		.byte	0x2
+ 22299 8207 91       		.byte	0x91
+ 22300 8208 48       		.sleb128 -56
+ 22301 8209 35       		.uleb128 0x35
+ 22302 820a 6A7800   		.string	"jx"
+ 22303 820d 03       		.byte	0x3
+ 22304 820e A007     		.value	0x7a0
+ 22305 8210 78000000 		.long	0x78
+ 22306 8214 02       		.byte	0x2
+ 22307 8215 91       		.byte	0x91
+ 22308 8216 4C       		.sleb128 -52
+ 22309 8217 34       		.uleb128 0x34
+ 22310 8218 8F810000 		.long	0x818f
+ 22311 821c 00000000 		.quad	.LBB2224
+ 22311      00000000 
+ 22312 8224 00000000 		.quad	.LBE2224
+ 22312      00000000 
+ 22313 822c 03       		.byte	0x3
+ 22314 822d A607     		.value	0x7a6
+ 22315 822f 31       		.uleb128 0x31
+ 22316 8230 A1810000 		.long	0x81a1
+ 22317 8234 02       		.byte	0x2
+ 22318 8235 91       		.byte	0x91
+
GAS LISTING /tmp/ccPaCTqg.s 			page 567
+
+
+ 22319 8236 50       		.sleb128 -48
+ 22320 8237 00       		.byte	0x0
+ 22321 8238 00       		.byte	0x0
+ 22322 8239 07       		.uleb128 0x7
+ 22323 823a 08       		.byte	0x8
+ 22324 823b F60D0000 		.long	0xdf6
+ 22325 823f 2D       		.uleb128 0x2d
+ 22326 8240 00000000 		.long	.LASF354
+ 22327 8244 03       		.byte	0x3
+ 22328 8245 AC07     		.value	0x7ac
+ 22329 8247 01       		.byte	0x1
+ 22330 8248 00000000 		.quad	.LFB660
+ 22330      00000000 
+ 22331 8250 00000000 		.quad	.LFE660
+ 22331      00000000 
+ 22332 8258 00000000 		.long	.LLST10
+ 22333 825c 7C820000 		.long	0x827c
+ 22334 8260 2E       		.uleb128 0x2e
+ 22335 8261 7700     		.string	"w"
+ 22336 8263 03       		.byte	0x3
+ 22337 8264 AC07     		.value	0x7ac
+ 22338 8266 712B0000 		.long	0x2b71
+ 22339 826a 02       		.byte	0x2
+ 22340 826b 91       		.byte	0x91
+ 22341 826c 68       		.sleb128 -24
+ 22342 826d 2E       		.uleb128 0x2e
+ 22343 826e 6B7700   		.string	"kw"
+ 22344 8271 03       		.byte	0x3
+ 22345 8272 AC07     		.value	0x7ac
+ 22346 8274 39820000 		.long	0x8239
+ 22347 8278 02       		.byte	0x2
+ 22348 8279 91       		.byte	0x91
+ 22349 827a 60       		.sleb128 -32
+ 22350 827b 00       		.byte	0x0
+ 22351 827c 2D       		.uleb128 0x2d
+ 22352 827d 00000000 		.long	.LASF355
+ 22353 8281 03       		.byte	0x3
+ 22354 8282 B307     		.value	0x7b3
+ 22355 8284 01       		.byte	0x1
+ 22356 8285 00000000 		.quad	.LFB661
+ 22356      00000000 
+ 22357 828d 00000000 		.quad	.LFE661
+ 22357      00000000 
+ 22358 8295 00000000 		.long	.LLST11
+ 22359 8299 B9820000 		.long	0x82b9
+ 22360 829d 2E       		.uleb128 0x2e
+ 22361 829e 7700     		.string	"w"
+ 22362 82a0 03       		.byte	0x3
+ 22363 82a1 B307     		.value	0x7b3
+ 22364 82a3 712B0000 		.long	0x2b71
+ 22365 82a7 02       		.byte	0x2
+ 22366 82a8 91       		.byte	0x91
+ 22367 82a9 68       		.sleb128 -24
+ 22368 82aa 2E       		.uleb128 0x2e
+ 22369 82ab 6B7700   		.string	"kw"
+ 22370 82ae 03       		.byte	0x3
+ 22371 82af B307     		.value	0x7b3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 568
+
+
+ 22372 82b1 39820000 		.long	0x8239
+ 22373 82b5 02       		.byte	0x2
+ 22374 82b6 91       		.byte	0x91
+ 22375 82b7 60       		.sleb128 -32
+ 22376 82b8 00       		.byte	0x0
+ 22377 82b9 2D       		.uleb128 0x2d
+ 22378 82ba 00000000 		.long	.LASF356
+ 22379 82be 03       		.byte	0x3
+ 22380 82bf BA07     		.value	0x7ba
+ 22381 82c1 01       		.byte	0x1
+ 22382 82c2 00000000 		.quad	.LFB662
+ 22382      00000000 
+ 22383 82ca 00000000 		.quad	.LFE662
+ 22383      00000000 
+ 22384 82d2 00000000 		.long	.LLST12
+ 22385 82d6 F6820000 		.long	0x82f6
+ 22386 82da 2E       		.uleb128 0x2e
+ 22387 82db 7700     		.string	"w"
+ 22388 82dd 03       		.byte	0x3
+ 22389 82de BA07     		.value	0x7ba
+ 22390 82e0 712B0000 		.long	0x2b71
+ 22391 82e4 02       		.byte	0x2
+ 22392 82e5 91       		.byte	0x91
+ 22393 82e6 68       		.sleb128 -24
+ 22394 82e7 2E       		.uleb128 0x2e
+ 22395 82e8 6B7700   		.string	"kw"
+ 22396 82eb 03       		.byte	0x3
+ 22397 82ec BA07     		.value	0x7ba
+ 22398 82ee 39820000 		.long	0x8239
+ 22399 82f2 02       		.byte	0x2
+ 22400 82f3 91       		.byte	0x91
+ 22401 82f4 60       		.sleb128 -32
+ 22402 82f5 00       		.byte	0x0
+ 22403 82f6 27       		.uleb128 0x27
+ 22404 82f7 00000000 		.long	.LASF357
+ 22405 82fb 03       		.byte	0x3
+ 22406 82fc C807     		.value	0x7c8
+ 22407 82fe 01       		.byte	0x1
+ 22408 82ff C9010000 		.long	0x1c9
+ 22409 8303 03       		.byte	0x3
+ 22410 8304 4D830000 		.long	0x834d
+ 22411 8308 28       		.uleb128 0x28
+ 22412 8309 00000000 		.long	.LASF63
+ 22413 830d 03       		.byte	0x3
+ 22414 830e C807     		.value	0x7c8
+ 22415 8310 C9010000 		.long	0x1c9
+ 22416 8314 28       		.uleb128 0x28
+ 22417 8315 00000000 		.long	.LASF61
+ 22418 8319 03       		.byte	0x3
+ 22419 831a C807     		.value	0x7c8
+ 22420 831c F60D0000 		.long	0xdf6
+ 22421 8320 36       		.uleb128 0x36
+ 22422 8321 30830000 		.long	0x8330
+ 22423 8325 29       		.uleb128 0x29
+ 22424 8326 7600     		.string	"v"
+ 22425 8328 03       		.byte	0x3
+ 22426 8329 CA07     		.value	0x7ca
+
GAS LISTING /tmp/ccPaCTqg.s 			page 569
+
+
+ 22427 832b F6040000 		.long	0x4f6
+ 22428 832f 00       		.byte	0x0
+ 22429 8330 36       		.uleb128 0x36
+ 22430 8331 40830000 		.long	0x8340
+ 22431 8335 29       		.uleb128 0x29
+ 22432 8336 7600     		.string	"v"
+ 22433 8338 03       		.byte	0x3
+ 22434 8339 CC07     		.value	0x7cc
+ 22435 833b F6040000 		.long	0x4f6
+ 22436 833f 00       		.byte	0x0
+ 22437 8340 37       		.uleb128 0x37
+ 22438 8341 29       		.uleb128 0x29
+ 22439 8342 7600     		.string	"v"
+ 22440 8344 03       		.byte	0x3
+ 22441 8345 D007     		.value	0x7d0
+ 22442 8347 F6040000 		.long	0x4f6
+ 22443 834b 00       		.byte	0x0
+ 22444 834c 00       		.byte	0x0
+ 22445 834d 27       		.uleb128 0x27
+ 22446 834e 00000000 		.long	.LASF358
+ 22447 8352 03       		.byte	0x3
+ 22448 8353 2102     		.value	0x221
+ 22449 8355 01       		.byte	0x1
+ 22450 8356 C9010000 		.long	0x1c9
+ 22451 835a 03       		.byte	0x3
+ 22452 835b 78830000 		.long	0x8378
+ 22453 835f 28       		.uleb128 0x28
+ 22454 8360 00000000 		.long	.LASF63
+ 22455 8364 03       		.byte	0x3
+ 22456 8365 2102     		.value	0x221
+ 22457 8367 C9010000 		.long	0x1c9
+ 22458 836b 28       		.uleb128 0x28
+ 22459 836c 00000000 		.long	.LASF316
+ 22460 8370 03       		.byte	0x3
+ 22461 8371 2102     		.value	0x221
+ 22462 8373 C9010000 		.long	0x1c9
+ 22463 8377 00       		.byte	0x0
+ 22464 8378 27       		.uleb128 0x27
+ 22465 8379 00000000 		.long	.LASF359
+ 22466 837d 03       		.byte	0x3
+ 22467 837e DC07     		.value	0x7dc
+ 22468 8380 01       		.byte	0x1
+ 22469 8381 C9010000 		.long	0x1c9
+ 22470 8385 03       		.byte	0x3
+ 22471 8386 E7830000 		.long	0x83e7
+ 22472 838a 28       		.uleb128 0x28
+ 22473 838b 00000000 		.long	.LASF63
+ 22474 838f 03       		.byte	0x3
+ 22475 8390 DC07     		.value	0x7dc
+ 22476 8392 C9010000 		.long	0x1c9
+ 22477 8396 28       		.uleb128 0x28
+ 22478 8397 00000000 		.long	.LASF61
+ 22479 839b 03       		.byte	0x3
+ 22480 839c DD07     		.value	0x7dd
+ 22481 839e F60D0000 		.long	0xdf6
+ 22482 83a2 2B       		.uleb128 0x2b
+ 22483 83a3 00000000 		.long	.LASF360
+
GAS LISTING /tmp/ccPaCTqg.s 			page 570
+
+
+ 22484 83a7 03       		.byte	0x3
+ 22485 83a8 E007     		.value	0x7e0
+ 22486 83aa C9010000 		.long	0x1c9
+ 22487 83ae 2B       		.uleb128 0x2b
+ 22488 83af 00000000 		.long	.LASF361
+ 22489 83b3 03       		.byte	0x3
+ 22490 83b4 E107     		.value	0x7e1
+ 22491 83b6 C9010000 		.long	0x1c9
+ 22492 83ba 36       		.uleb128 0x36
+ 22493 83bb CA830000 		.long	0x83ca
+ 22494 83bf 29       		.uleb128 0x29
+ 22495 83c0 7600     		.string	"v"
+ 22496 83c2 03       		.byte	0x3
+ 22497 83c3 E607     		.value	0x7e6
+ 22498 83c5 F6040000 		.long	0x4f6
+ 22499 83c9 00       		.byte	0x0
+ 22500 83ca 36       		.uleb128 0x36
+ 22501 83cb DA830000 		.long	0x83da
+ 22502 83cf 29       		.uleb128 0x29
+ 22503 83d0 7600     		.string	"v"
+ 22504 83d2 03       		.byte	0x3
+ 22505 83d3 FC07     		.value	0x7fc
+ 22506 83d5 F6040000 		.long	0x4f6
+ 22507 83d9 00       		.byte	0x0
+ 22508 83da 37       		.uleb128 0x37
+ 22509 83db 29       		.uleb128 0x29
+ 22510 83dc 7600     		.string	"v"
+ 22511 83de 03       		.byte	0x3
+ 22512 83df FD07     		.value	0x7fd
+ 22513 83e1 F6040000 		.long	0x4f6
+ 22514 83e5 00       		.byte	0x0
+ 22515 83e6 00       		.byte	0x0
+ 22516 83e7 27       		.uleb128 0x27
+ 22517 83e8 00000000 		.long	.LASF362
+ 22518 83ec 03       		.byte	0x3
+ 22519 83ed 0808     		.value	0x808
+ 22520 83ef 01       		.byte	0x1
+ 22521 83f0 C9010000 		.long	0x1c9
+ 22522 83f4 03       		.byte	0x3
+ 22523 83f5 3E840000 		.long	0x843e
+ 22524 83f9 28       		.uleb128 0x28
+ 22525 83fa 00000000 		.long	.LASF63
+ 22526 83fe 03       		.byte	0x3
+ 22527 83ff 0808     		.value	0x808
+ 22528 8401 C9010000 		.long	0x1c9
+ 22529 8405 28       		.uleb128 0x28
+ 22530 8406 00000000 		.long	.LASF61
+ 22531 840a 03       		.byte	0x3
+ 22532 840b 0808     		.value	0x808
+ 22533 840d C9010000 		.long	0x1c9
+ 22534 8411 36       		.uleb128 0x36
+ 22535 8412 21840000 		.long	0x8421
+ 22536 8416 29       		.uleb128 0x29
+ 22537 8417 7600     		.string	"v"
+ 22538 8419 03       		.byte	0x3
+ 22539 841a 0A08     		.value	0x80a
+ 22540 841c F6040000 		.long	0x4f6
+
GAS LISTING /tmp/ccPaCTqg.s 			page 571
+
+
+ 22541 8420 00       		.byte	0x0
+ 22542 8421 36       		.uleb128 0x36
+ 22543 8422 31840000 		.long	0x8431
+ 22544 8426 29       		.uleb128 0x29
+ 22545 8427 7600     		.string	"v"
+ 22546 8429 03       		.byte	0x3
+ 22547 842a 1908     		.value	0x819
+ 22548 842c F6040000 		.long	0x4f6
+ 22549 8430 00       		.byte	0x0
+ 22550 8431 37       		.uleb128 0x37
+ 22551 8432 29       		.uleb128 0x29
+ 22552 8433 7600     		.string	"v"
+ 22553 8435 03       		.byte	0x3
+ 22554 8436 1A08     		.value	0x81a
+ 22555 8438 F6040000 		.long	0x4f6
+ 22556 843c 00       		.byte	0x0
+ 22557 843d 00       		.byte	0x0
+ 22558 843e 1F       		.uleb128 0x1f
+ 22559 843f 00000000 		.long	.LASF363
+ 22560 8443 03       		.byte	0x3
+ 22561 8444 2C08     		.value	0x82c
+ 22562 8446 01       		.byte	0x1
+ 22563 8447 C9010000 		.long	0x1c9
+ 22564 844b 00000000 		.quad	.LFB666
+ 22564      00000000 
+ 22565 8453 00000000 		.quad	.LFE666
+ 22565      00000000 
+ 22566 845b 00000000 		.long	.LLST13
+ 22567 845f B3860000 		.long	0x86b3
+ 22568 8463 20       		.uleb128 0x20
+ 22569 8464 00000000 		.long	.LASF63
+ 22570 8468 03       		.byte	0x3
+ 22571 8469 2C08     		.value	0x82c
+ 22572 846b C9010000 		.long	0x1c9
+ 22573 846f 03       		.byte	0x3
+ 22574 8470 91       		.byte	0x91
+ 22575 8471 E07C     		.sleb128 -416
+ 22576 8473 2E       		.uleb128 0x2e
+ 22577 8474 6B657900 		.string	"key"
+ 22578 8478 03       		.byte	0x3
+ 22579 8479 2C08     		.value	0x82c
+ 22580 847b 39820000 		.long	0x8239
+ 22581 847f 03       		.byte	0x3
+ 22582 8480 91       		.byte	0x91
+ 22583 8481 D87C     		.sleb128 -424
+ 22584 8483 2E       		.uleb128 0x2e
+ 22585 8484 4E7200   		.string	"Nr"
+ 22586 8487 03       		.byte	0x3
+ 22587 8488 2D08     		.value	0x82d
+ 22588 848a 78000000 		.long	0x78
+ 22589 848e 03       		.byte	0x3
+ 22590 848f 91       		.byte	0x91
+ 22591 8490 D47C     		.sleb128 -428
+ 22592 8492 35       		.uleb128 0x35
+ 22593 8493 697800   		.string	"ix"
+ 22594 8496 03       		.byte	0x3
+ 22595 8497 2F08     		.value	0x82f
+
GAS LISTING /tmp/ccPaCTqg.s 			page 572
+
+
+ 22596 8499 78000000 		.long	0x78
+ 22597 849d 03       		.byte	0x3
+ 22598 849e 91       		.byte	0x91
+ 22599 849f 8C7E     		.sleb128 -244
+ 22600 84a1 30       		.uleb128 0x30
+ 22601 84a2 F6820000 		.long	0x82f6
+ 22602 84a6 00000000 		.quad	.LBB2245
+ 22602      00000000 
+ 22603 84ae 00000000 		.quad	.LBE2245
+ 22603      00000000 
+ 22604 84b6 03       		.byte	0x3
+ 22605 84b7 3108     		.value	0x831
+ 22606 84b9 83850000 		.long	0x8583
+ 22607 84bd 31       		.uleb128 0x31
+ 22608 84be 14830000 		.long	0x8314
+ 22609 84c2 03       		.byte	0x3
+ 22610 84c3 91       		.byte	0x91
+ 22611 84c4 907E     		.sleb128 -240
+ 22612 84c6 31       		.uleb128 0x31
+ 22613 84c7 08830000 		.long	0x8308
+ 22614 84cb 03       		.byte	0x3
+ 22615 84cc 91       		.byte	0x91
+ 22616 84cd A07E     		.sleb128 -224
+ 22617 84cf 38       		.uleb128 0x38
+ 22618 84d0 00000000 		.quad	.LBB2247
+ 22618      00000000 
+ 22619 84d8 00000000 		.quad	.LBE2247
+ 22619      00000000 
+ 22620 84e0 EE840000 		.long	0x84ee
+ 22621 84e4 33       		.uleb128 0x33
+ 22622 84e5 25830000 		.long	0x8325
+ 22623 84e9 03       		.byte	0x3
+ 22624 84ea 91       		.byte	0x91
+ 22625 84eb 907D     		.sleb128 -368
+ 22626 84ed 00       		.byte	0x0
+ 22627 84ee 38       		.uleb128 0x38
+ 22628 84ef 00000000 		.quad	.LBB2248
+ 22628      00000000 
+ 22629 84f7 00000000 		.quad	.LBE2248
+ 22629      00000000 
+ 22630 84ff 0D850000 		.long	0x850d
+ 22631 8503 33       		.uleb128 0x33
+ 22632 8504 35830000 		.long	0x8335
+ 22633 8508 03       		.byte	0x3
+ 22634 8509 91       		.byte	0x91
+ 22635 850a 807D     		.sleb128 -384
+ 22636 850c 00       		.byte	0x0
+ 22637 850d 30       		.uleb128 0x30
+ 22638 850e 4D830000 		.long	0x834d
+ 22639 8512 00000000 		.quad	.LBB2249
+ 22639      00000000 
+ 22640 851a 00000000 		.quad	.LBE2249
+ 22640      00000000 
+ 22641 8522 03       		.byte	0x3
+ 22642 8523 CE07     		.value	0x7ce
+ 22643 8525 67850000 		.long	0x8567
+ 22644 8529 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s 			page 573
+
+
+ 22645 852a 6B830000 		.long	0x836b
+ 22646 852e 03       		.byte	0x3
+ 22647 852f 91       		.byte	0x91
+ 22648 8530 B07E     		.sleb128 -208
+ 22649 8532 31       		.uleb128 0x31
+ 22650 8533 5F830000 		.long	0x835f
+ 22651 8537 03       		.byte	0x3
+ 22652 8538 91       		.byte	0x91
+ 22653 8539 C07E     		.sleb128 -192
+ 22654 853b 34       		.uleb128 0x34
+ 22655 853c F7580000 		.long	0x58f7
+ 22656 8540 00000000 		.quad	.LBB2251
+ 22656      00000000 
+ 22657 8548 00000000 		.quad	.LBE2251
+ 22657      00000000 
+ 22658 8550 03       		.byte	0x3
+ 22659 8551 2302     		.value	0x223
+ 22660 8553 31       		.uleb128 0x31
+ 22661 8554 12590000 		.long	0x5912
+ 22662 8558 03       		.byte	0x3
+ 22663 8559 91       		.byte	0x91
+ 22664 855a D07E     		.sleb128 -176
+ 22665 855c 31       		.uleb128 0x31
+ 22666 855d 08590000 		.long	0x5908
+ 22667 8561 03       		.byte	0x3
+ 22668 8562 91       		.byte	0x91
+ 22669 8563 E07E     		.sleb128 -160
+ 22670 8565 00       		.byte	0x0
+ 22671 8566 00       		.byte	0x0
+ 22672 8567 32       		.uleb128 0x32
+ 22673 8568 00000000 		.quad	.LBB2253
+ 22673      00000000 
+ 22674 8570 00000000 		.quad	.LBE2253
+ 22674      00000000 
+ 22675 8578 33       		.uleb128 0x33
+ 22676 8579 41830000 		.long	0x8341
+ 22677 857d 03       		.byte	0x3
+ 22678 857e 91       		.byte	0x91
+ 22679 857f F07C     		.sleb128 -400
+ 22680 8581 00       		.byte	0x0
+ 22681 8582 00       		.byte	0x0
+ 22682 8583 30       		.uleb128 0x30
+ 22683 8584 78830000 		.long	0x8378
+ 22684 8588 00000000 		.quad	.LBB2254
+ 22684      00000000 
+ 22685 8590 00000000 		.quad	.LBE2254
+ 22685      00000000 
+ 22686 8598 03       		.byte	0x3
+ 22687 8599 3408     		.value	0x834
+ 22688 859b 2F860000 		.long	0x862f
+ 22689 859f 31       		.uleb128 0x31
+ 22690 85a0 96830000 		.long	0x8396
+ 22691 85a4 03       		.byte	0x3
+ 22692 85a5 91       		.byte	0x91
+ 22693 85a6 F07E     		.sleb128 -144
+ 22694 85a8 31       		.uleb128 0x31
+ 22695 85a9 8A830000 		.long	0x838a
+
GAS LISTING /tmp/ccPaCTqg.s 			page 574
+
+
+ 22696 85ad 03       		.byte	0x3
+ 22697 85ae 91       		.byte	0x91
+ 22698 85af 807F     		.sleb128 -128
+ 22699 85b1 32       		.uleb128 0x32
+ 22700 85b2 00000000 		.quad	.LBB2255
+ 22700      00000000 
+ 22701 85ba 00000000 		.quad	.LBE2255
+ 22701      00000000 
+ 22702 85c2 33       		.uleb128 0x33
+ 22703 85c3 A2830000 		.long	0x83a2
+ 22704 85c7 03       		.byte	0x3
+ 22705 85c8 91       		.byte	0x91
+ 22706 85c9 A07F     		.sleb128 -96
+ 22707 85cb 33       		.uleb128 0x33
+ 22708 85cc AE830000 		.long	0x83ae
+ 22709 85d0 03       		.byte	0x3
+ 22710 85d1 91       		.byte	0x91
+ 22711 85d2 907F     		.sleb128 -112
+ 22712 85d4 38       		.uleb128 0x38
+ 22713 85d5 00000000 		.quad	.LBB2256
+ 22713      00000000 
+ 22714 85dd 00000000 		.quad	.LBE2256
+ 22714      00000000 
+ 22715 85e5 F3850000 		.long	0x85f3
+ 22716 85e9 33       		.uleb128 0x33
+ 22717 85ea BF830000 		.long	0x83bf
+ 22718 85ee 03       		.byte	0x3
+ 22719 85ef 91       		.byte	0x91
+ 22720 85f0 C07D     		.sleb128 -320
+ 22721 85f2 00       		.byte	0x0
+ 22722 85f3 38       		.uleb128 0x38
+ 22723 85f4 00000000 		.quad	.LBB2257
+ 22723      00000000 
+ 22724 85fc 00000000 		.quad	.LBE2257
+ 22724      00000000 
+ 22725 8604 12860000 		.long	0x8612
+ 22726 8608 33       		.uleb128 0x33
+ 22727 8609 CF830000 		.long	0x83cf
+ 22728 860d 03       		.byte	0x3
+ 22729 860e 91       		.byte	0x91
+ 22730 860f B07D     		.sleb128 -336
+ 22731 8611 00       		.byte	0x0
+ 22732 8612 32       		.uleb128 0x32
+ 22733 8613 00000000 		.quad	.LBB2258
+ 22733      00000000 
+ 22734 861b 00000000 		.quad	.LBE2258
+ 22734      00000000 
+ 22735 8623 33       		.uleb128 0x33
+ 22736 8624 DB830000 		.long	0x83db
+ 22737 8628 03       		.byte	0x3
+ 22738 8629 91       		.byte	0x91
+ 22739 862a A07D     		.sleb128 -352
+ 22740 862c 00       		.byte	0x0
+ 22741 862d 00       		.byte	0x0
+ 22742 862e 00       		.byte	0x0
+ 22743 862f 34       		.uleb128 0x34
+ 22744 8630 E7830000 		.long	0x83e7
+
GAS LISTING /tmp/ccPaCTqg.s 			page 575
+
+
+ 22745 8634 00000000 		.quad	.LBB2259
+ 22745      00000000 
+ 22746 863c 00000000 		.quad	.LBE2259
+ 22746      00000000 
+ 22747 8644 03       		.byte	0x3
+ 22748 8645 3608     		.value	0x836
+ 22749 8647 31       		.uleb128 0x31
+ 22750 8648 05840000 		.long	0x8405
+ 22751 864c 03       		.byte	0x3
+ 22752 864d 91       		.byte	0x91
+ 22753 864e B07F     		.sleb128 -80
+ 22754 8650 31       		.uleb128 0x31
+ 22755 8651 F9830000 		.long	0x83f9
+ 22756 8655 02       		.byte	0x2
+ 22757 8656 91       		.byte	0x91
+ 22758 8657 40       		.sleb128 -64
+ 22759 8658 38       		.uleb128 0x38
+ 22760 8659 00000000 		.quad	.LBB2261
+ 22760      00000000 
+ 22761 8661 00000000 		.quad	.LBE2261
+ 22761      00000000 
+ 22762 8669 77860000 		.long	0x8677
+ 22763 866d 33       		.uleb128 0x33
+ 22764 866e 16840000 		.long	0x8416
+ 22765 8672 03       		.byte	0x3
+ 22766 8673 91       		.byte	0x91
+ 22767 8674 F07D     		.sleb128 -272
+ 22768 8676 00       		.byte	0x0
+ 22769 8677 38       		.uleb128 0x38
+ 22770 8678 00000000 		.quad	.LBB2262
+ 22770      00000000 
+ 22771 8680 00000000 		.quad	.LBE2262
+ 22771      00000000 
+ 22772 8688 96860000 		.long	0x8696
+ 22773 868c 33       		.uleb128 0x33
+ 22774 868d 26840000 		.long	0x8426
+ 22775 8691 03       		.byte	0x3
+ 22776 8692 91       		.byte	0x91
+ 22777 8693 E07D     		.sleb128 -288
+ 22778 8695 00       		.byte	0x0
+ 22779 8696 32       		.uleb128 0x32
+ 22780 8697 00000000 		.quad	.LBB2263
+ 22780      00000000 
+ 22781 869f 00000000 		.quad	.LBE2263
+ 22781      00000000 
+ 22782 86a7 33       		.uleb128 0x33
+ 22783 86a8 32840000 		.long	0x8432
+ 22784 86ac 03       		.byte	0x3
+ 22785 86ad 91       		.byte	0x91
+ 22786 86ae D07D     		.sleb128 -304
+ 22787 86b0 00       		.byte	0x0
+ 22788 86b1 00       		.byte	0x0
+ 22789 86b2 00       		.byte	0x0
+ 22790 86b3 27       		.uleb128 0x27
+ 22791 86b4 00000000 		.long	.LASF364
+ 22792 86b8 03       		.byte	0x3
+ 22793 86b9 5308     		.value	0x853
+
GAS LISTING /tmp/ccPaCTqg.s 			page 576
+
+
+ 22794 86bb 01       		.byte	0x1
+ 22795 86bc C9010000 		.long	0x1c9
+ 22796 86c0 03       		.byte	0x3
+ 22797 86c1 0A870000 		.long	0x870a
+ 22798 86c5 28       		.uleb128 0x28
+ 22799 86c6 00000000 		.long	.LASF63
+ 22800 86ca 03       		.byte	0x3
+ 22801 86cb 5308     		.value	0x853
+ 22802 86cd C9010000 		.long	0x1c9
+ 22803 86d1 28       		.uleb128 0x28
+ 22804 86d2 00000000 		.long	.LASF61
+ 22805 86d6 03       		.byte	0x3
+ 22806 86d7 5308     		.value	0x853
+ 22807 86d9 C9010000 		.long	0x1c9
+ 22808 86dd 36       		.uleb128 0x36
+ 22809 86de ED860000 		.long	0x86ed
+ 22810 86e2 29       		.uleb128 0x29
+ 22811 86e3 7600     		.string	"v"
+ 22812 86e5 03       		.byte	0x3
+ 22813 86e6 5508     		.value	0x855
+ 22814 86e8 F6040000 		.long	0x4f6
+ 22815 86ec 00       		.byte	0x0
+ 22816 86ed 36       		.uleb128 0x36
+ 22817 86ee FD860000 		.long	0x86fd
+ 22818 86f2 29       		.uleb128 0x29
+ 22819 86f3 7600     		.string	"v"
+ 22820 86f5 03       		.byte	0x3
+ 22821 86f6 5908     		.value	0x859
+ 22822 86f8 F6040000 		.long	0x4f6
+ 22823 86fc 00       		.byte	0x0
+ 22824 86fd 37       		.uleb128 0x37
+ 22825 86fe 29       		.uleb128 0x29
+ 22826 86ff 7600     		.string	"v"
+ 22827 8701 03       		.byte	0x3
+ 22828 8702 5A08     		.value	0x85a
+ 22829 8704 F6040000 		.long	0x4f6
+ 22830 8708 00       		.byte	0x0
+ 22831 8709 00       		.byte	0x0
+ 22832 870a 27       		.uleb128 0x27
+ 22833 870b 00000000 		.long	.LASF365
+ 22834 870f 03       		.byte	0x3
+ 22835 8710 7008     		.value	0x870
+ 22836 8712 01       		.byte	0x1
+ 22837 8713 C9010000 		.long	0x1c9
+ 22838 8717 03       		.byte	0x3
+ 22839 8718 79870000 		.long	0x8779
+ 22840 871c 28       		.uleb128 0x28
+ 22841 871d 00000000 		.long	.LASF63
+ 22842 8721 03       		.byte	0x3
+ 22843 8722 7008     		.value	0x870
+ 22844 8724 C9010000 		.long	0x1c9
+ 22845 8728 28       		.uleb128 0x28
+ 22846 8729 00000000 		.long	.LASF61
+ 22847 872d 03       		.byte	0x3
+ 22848 872e 7108     		.value	0x871
+ 22849 8730 C9010000 		.long	0x1c9
+ 22850 8734 2B       		.uleb128 0x2b
+
GAS LISTING /tmp/ccPaCTqg.s 			page 577
+
+
+ 22851 8735 00000000 		.long	.LASF360
+ 22852 8739 03       		.byte	0x3
+ 22853 873a 7408     		.value	0x874
+ 22854 873c C9010000 		.long	0x1c9
+ 22855 8740 2B       		.uleb128 0x2b
+ 22856 8741 00000000 		.long	.LASF361
+ 22857 8745 03       		.byte	0x3
+ 22858 8746 7508     		.value	0x875
+ 22859 8748 C9010000 		.long	0x1c9
+ 22860 874c 36       		.uleb128 0x36
+ 22861 874d 5C870000 		.long	0x875c
+ 22862 8751 29       		.uleb128 0x29
+ 22863 8752 7600     		.string	"v"
+ 22864 8754 03       		.byte	0x3
+ 22865 8755 7B08     		.value	0x87b
+ 22866 8757 F6040000 		.long	0x4f6
+ 22867 875b 00       		.byte	0x0
+ 22868 875c 36       		.uleb128 0x36
+ 22869 875d 6C870000 		.long	0x876c
+ 22870 8761 29       		.uleb128 0x29
+ 22871 8762 7600     		.string	"v"
+ 22872 8764 03       		.byte	0x3
+ 22873 8765 A708     		.value	0x8a7
+ 22874 8767 F6040000 		.long	0x4f6
+ 22875 876b 00       		.byte	0x0
+ 22876 876c 37       		.uleb128 0x37
+ 22877 876d 29       		.uleb128 0x29
+ 22878 876e 7600     		.string	"v"
+ 22879 8770 03       		.byte	0x3
+ 22880 8771 A908     		.value	0x8a9
+ 22881 8773 F6040000 		.long	0x4f6
+ 22882 8777 00       		.byte	0x0
+ 22883 8778 00       		.byte	0x0
+ 22884 8779 27       		.uleb128 0x27
+ 22885 877a 00000000 		.long	.LASF366
+ 22886 877e 03       		.byte	0x3
+ 22887 877f BA08     		.value	0x8ba
+ 22888 8781 01       		.byte	0x1
+ 22889 8782 C9010000 		.long	0x1c9
+ 22890 8786 03       		.byte	0x3
+ 22891 8787 D0870000 		.long	0x87d0
+ 22892 878b 28       		.uleb128 0x28
+ 22893 878c 00000000 		.long	.LASF63
+ 22894 8790 03       		.byte	0x3
+ 22895 8791 BA08     		.value	0x8ba
+ 22896 8793 C9010000 		.long	0x1c9
+ 22897 8797 28       		.uleb128 0x28
+ 22898 8798 00000000 		.long	.LASF61
+ 22899 879c 03       		.byte	0x3
+ 22900 879d BB08     		.value	0x8bb
+ 22901 879f C9010000 		.long	0x1c9
+ 22902 87a3 36       		.uleb128 0x36
+ 22903 87a4 B3870000 		.long	0x87b3
+ 22904 87a8 29       		.uleb128 0x29
+ 22905 87a9 7600     		.string	"v"
+ 22906 87ab 03       		.byte	0x3
+ 22907 87ac BD08     		.value	0x8bd
+
GAS LISTING /tmp/ccPaCTqg.s 			page 578
+
+
+ 22908 87ae F6040000 		.long	0x4f6
+ 22909 87b2 00       		.byte	0x0
+ 22910 87b3 36       		.uleb128 0x36
+ 22911 87b4 C3870000 		.long	0x87c3
+ 22912 87b8 29       		.uleb128 0x29
+ 22913 87b9 7600     		.string	"v"
+ 22914 87bb 03       		.byte	0x3
+ 22915 87bc CD08     		.value	0x8cd
+ 22916 87be F6040000 		.long	0x4f6
+ 22917 87c2 00       		.byte	0x0
+ 22918 87c3 37       		.uleb128 0x37
+ 22919 87c4 29       		.uleb128 0x29
+ 22920 87c5 7600     		.string	"v"
+ 22921 87c7 03       		.byte	0x3
+ 22922 87c8 CE08     		.value	0x8ce
+ 22923 87ca F6040000 		.long	0x4f6
+ 22924 87ce 00       		.byte	0x0
+ 22925 87cf 00       		.byte	0x0
+ 22926 87d0 1F       		.uleb128 0x1f
+ 22927 87d1 00000000 		.long	.LASF367
+ 22928 87d5 03       		.byte	0x3
+ 22929 87d6 DD08     		.value	0x8dd
+ 22930 87d8 01       		.byte	0x1
+ 22931 87d9 C9010000 		.long	0x1c9
+ 22932 87dd 00000000 		.quad	.LFB670
+ 22932      00000000 
+ 22933 87e5 00000000 		.quad	.LFE670
+ 22933      00000000 
+ 22934 87ed 00000000 		.long	.LLST14
+ 22935 87f1 458A0000 		.long	0x8a45
+ 22936 87f5 20       		.uleb128 0x20
+ 22937 87f6 00000000 		.long	.LASF63
+ 22938 87fa 03       		.byte	0x3
+ 22939 87fb DD08     		.value	0x8dd
+ 22940 87fd C9010000 		.long	0x1c9
+ 22941 8801 03       		.byte	0x3
+ 22942 8802 91       		.byte	0x91
+ 22943 8803 E07C     		.sleb128 -416
+ 22944 8805 2E       		.uleb128 0x2e
+ 22945 8806 6B657900 		.string	"key"
+ 22946 880a 03       		.byte	0x3
+ 22947 880b DD08     		.value	0x8dd
+ 22948 880d 39820000 		.long	0x8239
+ 22949 8811 03       		.byte	0x3
+ 22950 8812 91       		.byte	0x91
+ 22951 8813 D87C     		.sleb128 -424
+ 22952 8815 2E       		.uleb128 0x2e
+ 22953 8816 4E7200   		.string	"Nr"
+ 22954 8819 03       		.byte	0x3
+ 22955 881a DE08     		.value	0x8de
+ 22956 881c 78000000 		.long	0x78
+ 22957 8820 03       		.byte	0x3
+ 22958 8821 91       		.byte	0x91
+ 22959 8822 D47C     		.sleb128 -428
+ 22960 8824 35       		.uleb128 0x35
+ 22961 8825 697800   		.string	"ix"
+ 22962 8828 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 579
+
+
+ 22963 8829 E008     		.value	0x8e0
+ 22964 882b 78000000 		.long	0x78
+ 22965 882f 03       		.byte	0x3
+ 22966 8830 91       		.byte	0x91
+ 22967 8831 8C7E     		.sleb128 -244
+ 22968 8833 30       		.uleb128 0x30
+ 22969 8834 B3860000 		.long	0x86b3
+ 22970 8838 00000000 		.quad	.LBB2283
+ 22970      00000000 
+ 22971 8840 00000000 		.quad	.LBE2283
+ 22971      00000000 
+ 22972 8848 03       		.byte	0x3
+ 22973 8849 E208     		.value	0x8e2
+ 22974 884b 15890000 		.long	0x8915
+ 22975 884f 31       		.uleb128 0x31
+ 22976 8850 D1860000 		.long	0x86d1
+ 22977 8854 03       		.byte	0x3
+ 22978 8855 91       		.byte	0x91
+ 22979 8856 907E     		.sleb128 -240
+ 22980 8858 31       		.uleb128 0x31
+ 22981 8859 C5860000 		.long	0x86c5
+ 22982 885d 03       		.byte	0x3
+ 22983 885e 91       		.byte	0x91
+ 22984 885f A07E     		.sleb128 -224
+ 22985 8861 38       		.uleb128 0x38
+ 22986 8862 00000000 		.quad	.LBB2285
+ 22986      00000000 
+ 22987 886a 00000000 		.quad	.LBE2285
+ 22987      00000000 
+ 22988 8872 80880000 		.long	0x8880
+ 22989 8876 33       		.uleb128 0x33
+ 22990 8877 E2860000 		.long	0x86e2
+ 22991 887b 03       		.byte	0x3
+ 22992 887c 91       		.byte	0x91
+ 22993 887d 907D     		.sleb128 -368
+ 22994 887f 00       		.byte	0x0
+ 22995 8880 30       		.uleb128 0x30
+ 22996 8881 4D830000 		.long	0x834d
+ 22997 8885 00000000 		.quad	.LBB2286
+ 22997      00000000 
+ 22998 888d 00000000 		.quad	.LBE2286
+ 22998      00000000 
+ 22999 8895 03       		.byte	0x3
+ 23000 8896 5708     		.value	0x857
+ 23001 8898 DA880000 		.long	0x88da
+ 23002 889c 31       		.uleb128 0x31
+ 23003 889d 6B830000 		.long	0x836b
+ 23004 88a1 03       		.byte	0x3
+ 23005 88a2 91       		.byte	0x91
+ 23006 88a3 B07E     		.sleb128 -208
+ 23007 88a5 31       		.uleb128 0x31
+ 23008 88a6 5F830000 		.long	0x835f
+ 23009 88aa 03       		.byte	0x3
+ 23010 88ab 91       		.byte	0x91
+ 23011 88ac C07E     		.sleb128 -192
+ 23012 88ae 34       		.uleb128 0x34
+ 23013 88af F7580000 		.long	0x58f7
+
GAS LISTING /tmp/ccPaCTqg.s 			page 580
+
+
+ 23014 88b3 00000000 		.quad	.LBB2288
+ 23014      00000000 
+ 23015 88bb 00000000 		.quad	.LBE2288
+ 23015      00000000 
+ 23016 88c3 03       		.byte	0x3
+ 23017 88c4 2302     		.value	0x223
+ 23018 88c6 31       		.uleb128 0x31
+ 23019 88c7 12590000 		.long	0x5912
+ 23020 88cb 03       		.byte	0x3
+ 23021 88cc 91       		.byte	0x91
+ 23022 88cd D07E     		.sleb128 -176
+ 23023 88cf 31       		.uleb128 0x31
+ 23024 88d0 08590000 		.long	0x5908
+ 23025 88d4 03       		.byte	0x3
+ 23026 88d5 91       		.byte	0x91
+ 23027 88d6 E07E     		.sleb128 -160
+ 23028 88d8 00       		.byte	0x0
+ 23029 88d9 00       		.byte	0x0
+ 23030 88da 38       		.uleb128 0x38
+ 23031 88db 00000000 		.quad	.LBB2290
+ 23031      00000000 
+ 23032 88e3 00000000 		.quad	.LBE2290
+ 23032      00000000 
+ 23033 88eb F9880000 		.long	0x88f9
+ 23034 88ef 33       		.uleb128 0x33
+ 23035 88f0 F2860000 		.long	0x86f2
+ 23036 88f4 03       		.byte	0x3
+ 23037 88f5 91       		.byte	0x91
+ 23038 88f6 807D     		.sleb128 -384
+ 23039 88f8 00       		.byte	0x0
+ 23040 88f9 32       		.uleb128 0x32
+ 23041 88fa 00000000 		.quad	.LBB2291
+ 23041      00000000 
+ 23042 8902 00000000 		.quad	.LBE2291
+ 23042      00000000 
+ 23043 890a 33       		.uleb128 0x33
+ 23044 890b FE860000 		.long	0x86fe
+ 23045 890f 03       		.byte	0x3
+ 23046 8910 91       		.byte	0x91
+ 23047 8911 F07C     		.sleb128 -400
+ 23048 8913 00       		.byte	0x0
+ 23049 8914 00       		.byte	0x0
+ 23050 8915 30       		.uleb128 0x30
+ 23051 8916 0A870000 		.long	0x870a
+ 23052 891a 00000000 		.quad	.LBB2292
+ 23052      00000000 
+ 23053 8922 00000000 		.quad	.LBE2292
+ 23053      00000000 
+ 23054 892a 03       		.byte	0x3
+ 23055 892b E508     		.value	0x8e5
+ 23056 892d C1890000 		.long	0x89c1
+ 23057 8931 31       		.uleb128 0x31
+ 23058 8932 28870000 		.long	0x8728
+ 23059 8936 03       		.byte	0x3
+ 23060 8937 91       		.byte	0x91
+ 23061 8938 F07E     		.sleb128 -144
+ 23062 893a 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccPaCTqg.s 			page 581
+
+
+ 23063 893b 1C870000 		.long	0x871c
+ 23064 893f 03       		.byte	0x3
+ 23065 8940 91       		.byte	0x91
+ 23066 8941 807F     		.sleb128 -128
+ 23067 8943 32       		.uleb128 0x32
+ 23068 8944 00000000 		.quad	.LBB2293
+ 23068      00000000 
+ 23069 894c 00000000 		.quad	.LBE2293
+ 23069      00000000 
+ 23070 8954 33       		.uleb128 0x33
+ 23071 8955 34870000 		.long	0x8734
+ 23072 8959 03       		.byte	0x3
+ 23073 895a 91       		.byte	0x91
+ 23074 895b A07F     		.sleb128 -96
+ 23075 895d 33       		.uleb128 0x33
+ 23076 895e 40870000 		.long	0x8740
+ 23077 8962 03       		.byte	0x3
+ 23078 8963 91       		.byte	0x91
+ 23079 8964 907F     		.sleb128 -112
+ 23080 8966 38       		.uleb128 0x38
+ 23081 8967 00000000 		.quad	.LBB2294
+ 23081      00000000 
+ 23082 896f 00000000 		.quad	.LBE2294
+ 23082      00000000 
+ 23083 8977 85890000 		.long	0x8985
+ 23084 897b 33       		.uleb128 0x33
+ 23085 897c 51870000 		.long	0x8751
+ 23086 8980 03       		.byte	0x3
+ 23087 8981 91       		.byte	0x91
+ 23088 8982 C07D     		.sleb128 -320
+ 23089 8984 00       		.byte	0x0
+ 23090 8985 38       		.uleb128 0x38
+ 23091 8986 00000000 		.quad	.LBB2295
+ 23091      00000000 
+ 23092 898e 00000000 		.quad	.LBE2295
+ 23092      00000000 
+ 23093 8996 A4890000 		.long	0x89a4
+ 23094 899a 33       		.uleb128 0x33
+ 23095 899b 61870000 		.long	0x8761
+ 23096 899f 03       		.byte	0x3
+ 23097 89a0 91       		.byte	0x91
+ 23098 89a1 B07D     		.sleb128 -336
+ 23099 89a3 00       		.byte	0x0
+ 23100 89a4 32       		.uleb128 0x32
+ 23101 89a5 00000000 		.quad	.LBB2296
+ 23101      00000000 
+ 23102 89ad 00000000 		.quad	.LBE2296
+ 23102      00000000 
+ 23103 89b5 33       		.uleb128 0x33
+ 23104 89b6 6D870000 		.long	0x876d
+ 23105 89ba 03       		.byte	0x3
+ 23106 89bb 91       		.byte	0x91
+ 23107 89bc A07D     		.sleb128 -352
+ 23108 89be 00       		.byte	0x0
+ 23109 89bf 00       		.byte	0x0
+ 23110 89c0 00       		.byte	0x0
+ 23111 89c1 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccPaCTqg.s 			page 582
+
+
+ 23112 89c2 79870000 		.long	0x8779
+ 23113 89c6 00000000 		.quad	.LBB2297
+ 23113      00000000 
+ 23114 89ce 00000000 		.quad	.LBE2297
+ 23114      00000000 
+ 23115 89d6 03       		.byte	0x3
+ 23116 89d7 E708     		.value	0x8e7
+ 23117 89d9 31       		.uleb128 0x31
+ 23118 89da 97870000 		.long	0x8797
+ 23119 89de 03       		.byte	0x3
+ 23120 89df 91       		.byte	0x91
+ 23121 89e0 B07F     		.sleb128 -80
+ 23122 89e2 31       		.uleb128 0x31
+ 23123 89e3 8B870000 		.long	0x878b
+ 23124 89e7 02       		.byte	0x2
+ 23125 89e8 91       		.byte	0x91
+ 23126 89e9 40       		.sleb128 -64
+ 23127 89ea 38       		.uleb128 0x38
+ 23128 89eb 00000000 		.quad	.LBB2299
+ 23128      00000000 
+ 23129 89f3 00000000 		.quad	.LBE2299
+ 23129      00000000 
+ 23130 89fb 098A0000 		.long	0x8a09
+ 23131 89ff 33       		.uleb128 0x33
+ 23132 8a00 A8870000 		.long	0x87a8
+ 23133 8a04 03       		.byte	0x3
+ 23134 8a05 91       		.byte	0x91
+ 23135 8a06 F07D     		.sleb128 -272
+ 23136 8a08 00       		.byte	0x0
+ 23137 8a09 38       		.uleb128 0x38
+ 23138 8a0a 00000000 		.quad	.LBB2300
+ 23138      00000000 
+ 23139 8a12 00000000 		.quad	.LBE2300
+ 23139      00000000 
+ 23140 8a1a 288A0000 		.long	0x8a28
+ 23141 8a1e 33       		.uleb128 0x33
+ 23142 8a1f B8870000 		.long	0x87b8
+ 23143 8a23 03       		.byte	0x3
+ 23144 8a24 91       		.byte	0x91
+ 23145 8a25 E07D     		.sleb128 -288
+ 23146 8a27 00       		.byte	0x0
+ 23147 8a28 32       		.uleb128 0x32
+ 23148 8a29 00000000 		.quad	.LBB2301
+ 23148      00000000 
+ 23149 8a31 00000000 		.quad	.LBE2301
+ 23149      00000000 
+ 23150 8a39 33       		.uleb128 0x33
+ 23151 8a3a C4870000 		.long	0x87c4
+ 23152 8a3e 03       		.byte	0x3
+ 23153 8a3f 91       		.byte	0x91
+ 23154 8a40 D07D     		.sleb128 -304
+ 23155 8a42 00       		.byte	0x0
+ 23156 8a43 00       		.byte	0x0
+ 23157 8a44 00       		.byte	0x0
+ 23158 8a45 2D       		.uleb128 0x2d
+ 23159 8a46 00000000 		.long	.LASF368
+ 23160 8a4a 03       		.byte	0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 583
+
+
+ 23161 8a4b 0309     		.value	0x903
+ 23162 8a4d 01       		.byte	0x1
+ 23163 8a4e 00000000 		.quad	.LFB671
+ 23163      00000000 
+ 23164 8a56 00000000 		.quad	.LFE671
+ 23164      00000000 
+ 23165 8a5e 00000000 		.long	.LLST15
+ 23166 8a62 768A0000 		.long	0x8a76
+ 23167 8a66 20       		.uleb128 0x20
+ 23168 8a67 00000000 		.long	.LASF369
+ 23169 8a6b 03       		.byte	0x3
+ 23170 8a6c 0309     		.value	0x903
+ 23171 8a6e E8030000 		.long	0x3e8
+ 23172 8a72 02       		.byte	0x2
+ 23173 8a73 91       		.byte	0x91
+ 23174 8a74 68       		.sleb128 -24
+ 23175 8a75 00       		.byte	0x0
+ 23176 8a76 39       		.uleb128 0x39
+ 23177 8a77 00000000 		.long	.LASF370
+ 23178 8a7b 03       		.byte	0x3
+ 23179 8a7c 0D09     		.value	0x90d
+ 23180 8a7e 6D000000 		.long	0x6d
+ 23181 8a82 00000000 		.quad	.LFB672
+ 23181      00000000 
+ 23182 8a8a 00000000 		.quad	.LFE672
+ 23182      00000000 
+ 23183 8a92 00000000 		.long	.LLST16
+ 23184 8a96 39       		.uleb128 0x39
+ 23185 8a97 00000000 		.long	.LASF371
+ 23186 8a9b 03       		.byte	0x3
+ 23187 8a9c 1C09     		.value	0x91c
+ 23188 8a9e 6D000000 		.long	0x6d
+ 23189 8aa2 00000000 		.quad	.LFB673
+ 23189      00000000 
+ 23190 8aaa 00000000 		.quad	.LFE673
+ 23190      00000000 
+ 23191 8ab2 00000000 		.long	.LLST17
+ 23192 8ab6 1F       		.uleb128 0x1f
+ 23193 8ab7 00000000 		.long	.LASF372
+ 23194 8abb 03       		.byte	0x3
+ 23195 8abc 2909     		.value	0x929
+ 23196 8abe 01       		.byte	0x1
+ 23197 8abf 91000000 		.long	0x91
+ 23198 8ac3 00000000 		.quad	.LFB674
+ 23198      00000000 
+ 23199 8acb 00000000 		.quad	.LFE674
+ 23199      00000000 
+ 23200 8ad3 00000000 		.long	.LLST18
+ 23201 8ad7 4E8B0000 		.long	0x8b4e
+ 23202 8adb 20       		.uleb128 0x20
+ 23203 8adc 00000000 		.long	.LASF373
+ 23204 8ae0 03       		.byte	0x3
+ 23205 8ae1 2909     		.value	0x929
+ 23206 8ae3 C4000000 		.long	0xc4
+ 23207 8ae7 02       		.byte	0x2
+ 23208 8ae8 91       		.byte	0x91
+ 23209 8ae9 58       		.sleb128 -40
+
GAS LISTING /tmp/ccPaCTqg.s 			page 584
+
+
+ 23210 8aea 20       		.uleb128 0x20
+ 23211 8aeb 00000000 		.long	.LASF374
+ 23212 8aef 03       		.byte	0x3
+ 23213 8af0 2909     		.value	0x929
+ 23214 8af2 B9000000 		.long	0xb9
+ 23215 8af6 02       		.byte	0x2
+ 23216 8af7 91       		.byte	0x91
+ 23217 8af8 50       		.sleb128 -48
+ 23218 8af9 20       		.uleb128 0x20
+ 23219 8afa 00000000 		.long	.LASF375
+ 23220 8afe 03       		.byte	0x3
+ 23221 8aff 2A09     		.value	0x92a
+ 23222 8b01 6D000000 		.long	0x6d
+ 23223 8b05 02       		.byte	0x2
+ 23224 8b06 91       		.byte	0x91
+ 23225 8b07 4C       		.sleb128 -52
+ 23226 8b08 35       		.uleb128 0x35
+ 23227 8b09 726300   		.string	"rc"
+ 23228 8b0c 03       		.byte	0x3
+ 23229 8b0d 2C09     		.value	0x92c
+ 23230 8b0f 91000000 		.long	0x91
+ 23231 8b13 02       		.byte	0x2
+ 23232 8b14 91       		.byte	0x91
+ 23233 8b15 64       		.sleb128 -28
+ 23234 8b16 35       		.uleb128 0x35
+ 23235 8b17 6B657900 		.string	"key"
+ 23236 8b1b 03       		.byte	0x3
+ 23237 8b1c 2D09     		.value	0x92d
+ 23238 8b1e 4E8B0000 		.long	0x8b4e
+ 23239 8b22 02       		.byte	0x2
+ 23240 8b23 91       		.byte	0x91
+ 23241 8b24 68       		.sleb128 -24
+ 23242 8b25 3A       		.uleb128 0x3a
+ 23243 8b26 00000000 		.long	.LASF376
+ 23244 8b2a 648B0000 		.long	0x8b64
+ 23245 8b2e 01       		.byte	0x1
+ 23246 8b2f 09       		.byte	0x9
+ 23247 8b30 03       		.byte	0x3
+ 23248 8b31 00000000 		.quad	__PRETTY_FUNCTION__.8793
+ 23248      00000000 
+ 23249 8b39 3A       		.uleb128 0x3a
+ 23250 8b3a 00000000 		.long	.LASF377
+ 23251 8b3e 698B0000 		.long	0x8b69
+ 23252 8b42 01       		.byte	0x1
+ 23253 8b43 09       		.byte	0x9
+ 23254 8b44 03       		.byte	0x3
+ 23255 8b45 00000000 		.quad	__func__.8794
+ 23255      00000000 
+ 23256 8b4d 00       		.byte	0x0
+ 23257 8b4e 07       		.uleb128 0x7
+ 23258 8b4f 08       		.byte	0x8
+ 23259 8b50 3A040000 		.long	0x43a
+ 23260 8b54 09       		.uleb128 0x9
+ 23261 8b55 9F000000 		.long	0x9f
+ 23262 8b59 648B0000 		.long	0x8b64
+ 23263 8b5d 0A       		.uleb128 0xa
+ 23264 8b5e 9C000000 		.long	0x9c
+
GAS LISTING /tmp/ccPaCTqg.s 			page 585
+
+
+ 23265 8b62 24       		.byte	0x24
+ 23266 8b63 00       		.byte	0x0
+ 23267 8b64 06       		.uleb128 0x6
+ 23268 8b65 548B0000 		.long	0x8b54
+ 23269 8b69 06       		.uleb128 0x6
+ 23270 8b6a 548B0000 		.long	0x8b54
+ 23271 8b6e 1F       		.uleb128 0x1f
+ 23272 8b6f 00000000 		.long	.LASF378
+ 23273 8b73 03       		.byte	0x3
+ 23274 8b74 5409     		.value	0x954
+ 23275 8b76 01       		.byte	0x1
+ 23276 8b77 91000000 		.long	0x91
+ 23277 8b7b 00000000 		.quad	.LFB675
+ 23277      00000000 
+ 23278 8b83 00000000 		.quad	.LFE675
+ 23278      00000000 
+ 23279 8b8b 00000000 		.long	.LLST19
+ 23280 8b8f 038C0000 		.long	0x8c03
+ 23281 8b93 20       		.uleb128 0x20
+ 23282 8b94 00000000 		.long	.LASF379
+ 23283 8b98 03       		.byte	0x3
+ 23284 8b99 5409     		.value	0x954
+ 23285 8b9b C4000000 		.long	0xc4
+ 23286 8b9f 03       		.byte	0x3
+ 23287 8ba0 91       		.byte	0x91
+ 23288 8ba1 D87D     		.sleb128 -296
+ 23289 8ba3 20       		.uleb128 0x20
+ 23290 8ba4 00000000 		.long	.LASF374
+ 23291 8ba8 03       		.byte	0x3
+ 23292 8ba9 5509     		.value	0x955
+ 23293 8bab B9000000 		.long	0xb9
+ 23294 8baf 03       		.byte	0x3
+ 23295 8bb0 91       		.byte	0x91
+ 23296 8bb1 D07D     		.sleb128 -304
+ 23297 8bb3 20       		.uleb128 0x20
+ 23298 8bb4 00000000 		.long	.LASF375
+ 23299 8bb8 03       		.byte	0x3
+ 23300 8bb9 5609     		.value	0x956
+ 23301 8bbb 6D000000 		.long	0x6d
+ 23302 8bbf 03       		.byte	0x3
+ 23303 8bc0 91       		.byte	0x91
+ 23304 8bc1 CC7D     		.sleb128 -308
+ 23305 8bc3 2F       		.uleb128 0x2f
+ 23306 8bc4 00000000 		.long	.LASF373
+ 23307 8bc8 03       		.byte	0x3
+ 23308 8bc9 5809     		.value	0x958
+ 23309 8bcb 3A040000 		.long	0x43a
+ 23310 8bcf 03       		.byte	0x3
+ 23311 8bd0 91       		.byte	0x91
+ 23312 8bd1 E07D     		.sleb128 -288
+ 23313 8bd3 35       		.uleb128 0x35
+ 23314 8bd4 726300   		.string	"rc"
+ 23315 8bd7 03       		.byte	0x3
+ 23316 8bd8 5909     		.value	0x959
+ 23317 8bda 91000000 		.long	0x91
+ 23318 8bde 02       		.byte	0x2
+ 23319 8bdf 91       		.byte	0x91
+
GAS LISTING /tmp/ccPaCTqg.s 			page 586
+
+
+ 23320 8be0 64       		.sleb128 -28
+ 23321 8be1 32       		.uleb128 0x32
+ 23322 8be2 00000000 		.quad	.LBB2302
+ 23322      00000000 
+ 23323 8bea 00000000 		.quad	.LBE2302
+ 23323      00000000 
+ 23324 8bf2 35       		.uleb128 0x35
+ 23325 8bf3 6B657900 		.string	"key"
+ 23326 8bf7 03       		.byte	0x3
+ 23327 8bf8 5E09     		.value	0x95e
+ 23328 8bfa 4E8B0000 		.long	0x8b4e
+ 23329 8bfe 02       		.byte	0x2
+ 23330 8bff 91       		.byte	0x91
+ 23331 8c00 68       		.sleb128 -24
+ 23332 8c01 00       		.byte	0x0
+ 23333 8c02 00       		.byte	0x0
+ 23334 8c03 1F       		.uleb128 0x1f
+ 23335 8c04 00000000 		.long	.LASF380
+ 23336 8c08 03       		.byte	0x3
+ 23337 8c09 8009     		.value	0x980
+ 23338 8c0b 01       		.byte	0x1
+ 23339 8c0c C9010000 		.long	0x1c9
+ 23340 8c10 00000000 		.quad	.LFB676
+ 23340      00000000 
+ 23341 8c18 00000000 		.quad	.LFE676
+ 23341      00000000 
+ 23342 8c20 00000000 		.long	.LLST20
+ 23343 8c24 6A8C0000 		.long	0x8c6a
+ 23344 8c28 20       		.uleb128 0x20
+ 23345 8c29 00000000 		.long	.LASF63
+ 23346 8c2d 03       		.byte	0x3
+ 23347 8c2e 8009     		.value	0x980
+ 23348 8c30 C9010000 		.long	0x1c9
+ 23349 8c34 02       		.byte	0x2
+ 23350 8c35 91       		.byte	0x91
+ 23351 8c36 50       		.sleb128 -48
+ 23352 8c37 20       		.uleb128 0x20
+ 23353 8c38 00000000 		.long	.LASF373
+ 23354 8c3c 03       		.byte	0x3
+ 23355 8c3d 8109     		.value	0x981
+ 23356 8c3f E3000000 		.long	0xe3
+ 23357 8c43 02       		.byte	0x2
+ 23358 8c44 91       		.byte	0x91
+ 23359 8c45 48       		.sleb128 -56
+ 23360 8c46 35       		.uleb128 0x35
+ 23361 8c47 6B657900 		.string	"key"
+ 23362 8c4b 03       		.byte	0x3
+ 23363 8c4c 8309     		.value	0x983
+ 23364 8c4e 6A8C0000 		.long	0x8c6a
+ 23365 8c52 02       		.byte	0x2
+ 23366 8c53 91       		.byte	0x91
+ 23367 8c54 68       		.sleb128 -24
+ 23368 8c55 3A       		.uleb128 0x3a
+ 23369 8c56 00000000 		.long	.LASF376
+ 23370 8c5a 858C0000 		.long	0x8c85
+ 23371 8c5e 01       		.byte	0x1
+ 23372 8c5f 09       		.byte	0x9
+
GAS LISTING /tmp/ccPaCTqg.s 			page 587
+
+
+ 23373 8c60 03       		.byte	0x3
+ 23374 8c61 00000000 		.quad	__PRETTY_FUNCTION__.8830
+ 23374      00000000 
+ 23375 8c69 00       		.byte	0x0
+ 23376 8c6a 07       		.uleb128 0x7
+ 23377 8c6b 08       		.byte	0x8
+ 23378 8c6c 708C0000 		.long	0x8c70
+ 23379 8c70 06       		.uleb128 0x6
+ 23380 8c71 3A040000 		.long	0x43a
+ 23381 8c75 09       		.uleb128 0x9
+ 23382 8c76 9F000000 		.long	0x9f
+ 23383 8c7a 858C0000 		.long	0x8c85
+ 23384 8c7e 0A       		.uleb128 0xa
+ 23385 8c7f 9C000000 		.long	0x9c
+ 23386 8c83 1E       		.byte	0x1e
+ 23387 8c84 00       		.byte	0x0
+ 23388 8c85 06       		.uleb128 0x6
+ 23389 8c86 758C0000 		.long	0x8c75
+ 23390 8c8a 1F       		.uleb128 0x1f
+ 23391 8c8b 00000000 		.long	.LASF381
+ 23392 8c8f 03       		.byte	0x3
+ 23393 8c90 A409     		.value	0x9a4
+ 23394 8c92 01       		.byte	0x1
+ 23395 8c93 C9010000 		.long	0x1c9
+ 23396 8c97 00000000 		.quad	.LFB677
+ 23396      00000000 
+ 23397 8c9f 00000000 		.quad	.LFE677
+ 23397      00000000 
+ 23398 8ca7 00000000 		.long	.LLST21
+ 23399 8cab F18C0000 		.long	0x8cf1
+ 23400 8caf 20       		.uleb128 0x20
+ 23401 8cb0 00000000 		.long	.LASF63
+ 23402 8cb4 03       		.byte	0x3
+ 23403 8cb5 A409     		.value	0x9a4
+ 23404 8cb7 C9010000 		.long	0x1c9
+ 23405 8cbb 02       		.byte	0x2
+ 23406 8cbc 91       		.byte	0x91
+ 23407 8cbd 50       		.sleb128 -48
+ 23408 8cbe 20       		.uleb128 0x20
+ 23409 8cbf 00000000 		.long	.LASF379
+ 23410 8cc3 03       		.byte	0x3
+ 23411 8cc4 A509     		.value	0x9a5
+ 23412 8cc6 E3000000 		.long	0xe3
+ 23413 8cca 02       		.byte	0x2
+ 23414 8ccb 91       		.byte	0x91
+ 23415 8ccc 48       		.sleb128 -56
+ 23416 8ccd 35       		.uleb128 0x35
+ 23417 8cce 6B657900 		.string	"key"
+ 23418 8cd2 03       		.byte	0x3
+ 23419 8cd3 A709     		.value	0x9a7
+ 23420 8cd5 6A8C0000 		.long	0x8c6a
+ 23421 8cd9 02       		.byte	0x2
+ 23422 8cda 91       		.byte	0x91
+ 23423 8cdb 68       		.sleb128 -24
+ 23424 8cdc 3A       		.uleb128 0x3a
+ 23425 8cdd 00000000 		.long	.LASF376
+ 23426 8ce1 F18C0000 		.long	0x8cf1
+
GAS LISTING /tmp/ccPaCTqg.s 			page 588
+
+
+ 23427 8ce5 01       		.byte	0x1
+ 23428 8ce6 09       		.byte	0x9
+ 23429 8ce7 03       		.byte	0x3
+ 23430 8ce8 00000000 		.quad	__PRETTY_FUNCTION__.8851
+ 23430      00000000 
+ 23431 8cf0 00       		.byte	0x0
+ 23432 8cf1 06       		.uleb128 0x6
+ 23433 8cf2 758C0000 		.long	0x8c75
+ 23434 8cf6 3B       		.uleb128 0x3b
+ 23435 8cf7 00000000 		.long	.LASF382
+ 23436 8cfb 03       		.byte	0x3
+ 23437 8cfc CC09     		.value	0x9cc
+ 23438 8cfe 818D0000 		.long	0x8d81
+ 23439 8d02 00000000 		.quad	.LFB678
+ 23439      00000000 
+ 23440 8d0a 00000000 		.quad	.LFE678
+ 23440      00000000 
+ 23441 8d12 00000000 		.long	.LLST22
+ 23442 8d16 818D0000 		.long	0x8d81
+ 23443 8d1a 2F       		.uleb128 0x2f
+ 23444 8d1b 00000000 		.long	.LASF383
+ 23445 8d1f 03       		.byte	0x3
+ 23446 8d20 CE09     		.value	0x9ce
+ 23447 8d22 6D000000 		.long	0x6d
+ 23448 8d26 02       		.byte	0x2
+ 23449 8d27 91       		.byte	0x91
+ 23450 8d28 48       		.sleb128 -56
+ 23451 8d29 35       		.uleb128 0x35
+ 23452 8d2a 6100     		.string	"a"
+ 23453 8d2c 03       		.byte	0x3
+ 23454 8d2d CE09     		.value	0x9ce
+ 23455 8d2f 6D000000 		.long	0x6d
+ 23456 8d33 02       		.byte	0x2
+ 23457 8d34 91       		.byte	0x91
+ 23458 8d35 4C       		.sleb128 -52
+ 23459 8d36 35       		.uleb128 0x35
+ 23460 8d37 6200     		.string	"b"
+ 23461 8d39 03       		.byte	0x3
+ 23462 8d3a CE09     		.value	0x9ce
+ 23463 8d3c 6D000000 		.long	0x6d
+ 23464 8d40 02       		.byte	0x2
+ 23465 8d41 91       		.byte	0x91
+ 23466 8d42 50       		.sleb128 -48
+ 23467 8d43 35       		.uleb128 0x35
+ 23468 8d44 6300     		.string	"c"
+ 23469 8d46 03       		.byte	0x3
+ 23470 8d47 CE09     		.value	0x9ce
+ 23471 8d49 6D000000 		.long	0x6d
+ 23472 8d4d 02       		.byte	0x2
+ 23473 8d4e 91       		.byte	0x91
+ 23474 8d4f 54       		.sleb128 -44
+ 23475 8d50 35       		.uleb128 0x35
+ 23476 8d51 6400     		.string	"d"
+ 23477 8d53 03       		.byte	0x3
+ 23478 8d54 CE09     		.value	0x9ce
+ 23479 8d56 6D000000 		.long	0x6d
+ 23480 8d5a 02       		.byte	0x2
+
GAS LISTING /tmp/ccPaCTqg.s 			page 589
+
+
+ 23481 8d5b 91       		.byte	0x91
+ 23482 8d5c 58       		.sleb128 -40
+ 23483 8d5d 35       		.uleb128 0x35
+ 23484 8d5e 72657400 		.string	"ret"
+ 23485 8d62 03       		.byte	0x3
+ 23486 8d63 CF09     		.value	0x9cf
+ 23487 8d65 818D0000 		.long	0x8d81
+ 23488 8d69 02       		.byte	0x2
+ 23489 8d6a 91       		.byte	0x91
+ 23490 8d6b 5F       		.sleb128 -33
+ 23491 8d6c 3A       		.uleb128 0x3a
+ 23492 8d6d 00000000 		.long	.LASF377
+ 23493 8d71 888D0000 		.long	0x8d88
+ 23494 8d75 01       		.byte	0x1
+ 23495 8d76 09       		.byte	0x9
+ 23496 8d77 03       		.byte	0x3
+ 23497 8d78 00000000 		.quad	__func__.8875
+ 23497      00000000 
+ 23498 8d80 00       		.byte	0x0
+ 23499 8d81 02       		.uleb128 0x2
+ 23500 8d82 01       		.byte	0x1
+ 23501 8d83 02       		.byte	0x2
+ 23502 8d84 00000000 		.long	.LASF384
+ 23503 8d88 06       		.uleb128 0x6
+ 23504 8d89 CC000000 		.long	0xcc
+ 23505 8d8d 3C       		.uleb128 0x3c
+ 23506 8d8e 01       		.byte	0x1
+ 23507 8d8f 00000000 		.long	.LASF402
+ 23508 8d93 03       		.byte	0x3
+ 23509 8d94 390A     		.value	0xa39
+ 23510 8d96 01       		.byte	0x1
+ 23511 8d97 91000000 		.long	0x91
+ 23512 8d9b 00000000 		.quad	.LFB679
+ 23512      00000000 
+ 23513 8da3 00000000 		.quad	.LFE679
+ 23513      00000000 
+ 23514 8dab 00000000 		.long	.LLST23
+ 23515 8daf F98D0000 		.long	0x8df9
+ 23516 8db3 20       		.uleb128 0x20
+ 23517 8db4 00000000 		.long	.LASF385
+ 23518 8db8 03       		.byte	0x3
+ 23519 8db9 390A     		.value	0xa39
+ 23520 8dbb F98D0000 		.long	0x8df9
+ 23521 8dbf 02       		.byte	0x2
+ 23522 8dc0 91       		.byte	0x91
+ 23523 8dc1 58       		.sleb128 -40
+ 23524 8dc2 35       		.uleb128 0x35
+ 23525 8dc3 726300   		.string	"rc"
+ 23526 8dc6 03       		.byte	0x3
+ 23527 8dc7 3B0A     		.value	0xa3b
+ 23528 8dc9 91000000 		.long	0x91
+ 23529 8dcd 02       		.byte	0x2
+ 23530 8dce 91       		.byte	0x91
+ 23531 8dcf 6C       		.sleb128 -20
+ 23532 8dd0 3A       		.uleb128 0x3a
+ 23533 8dd1 00000000 		.long	.LASF377
+ 23534 8dd5 158E0000 		.long	0x8e15
+
GAS LISTING /tmp/ccPaCTqg.s 			page 590
+
+
+ 23535 8dd9 01       		.byte	0x1
+ 23536 8dda 09       		.byte	0x9
+ 23537 8ddb 03       		.byte	0x3
+ 23538 8ddc 00000000 		.quad	__func__.8978
+ 23538      00000000 
+ 23539 8de4 3A       		.uleb128 0x3a
+ 23540 8de5 00000000 		.long	.LASF376
+ 23541 8de9 1A8E0000 		.long	0x8e1a
+ 23542 8ded 01       		.byte	0x1
+ 23543 8dee 09       		.byte	0x9
+ 23544 8def 03       		.byte	0x3
+ 23545 8df0 00000000 		.quad	__PRETTY_FUNCTION__.8979
+ 23545      00000000 
+ 23546 8df8 00       		.byte	0x0
+ 23547 8df9 07       		.uleb128 0x7
+ 23548 8dfa 08       		.byte	0x8
+ 23549 8dfb FF8D0000 		.long	0x8dff
+ 23550 8dff 07       		.uleb128 0x7
+ 23551 8e00 08       		.byte	0x8
+ 23552 8e01 01050000 		.long	0x501
+ 23553 8e05 09       		.uleb128 0x9
+ 23554 8e06 9F000000 		.long	0x9f
+ 23555 8e0a 158E0000 		.long	0x8e15
+ 23556 8e0e 0A       		.uleb128 0xa
+ 23557 8e0f 9C000000 		.long	0x9c
+ 23558 8e13 1B       		.byte	0x1b
+ 23559 8e14 00       		.byte	0x0
+ 23560 8e15 06       		.uleb128 0x6
+ 23561 8e16 058E0000 		.long	0x8e05
+ 23562 8e1a 06       		.uleb128 0x6
+ 23563 8e1b 058E0000 		.long	0x8e05
+ 23564 8e1f 3D       		.uleb128 0x3d
+ 23565 8e20 00000000 		.long	.LASF386
+ 23566 8e24 03       		.byte	0x3
+ 23567 8e25 53       		.byte	0x53
+ 23568 8e26 F60D0000 		.long	0xdf6
+ 23569 8e2a 09       		.byte	0x9
+ 23570 8e2b 03       		.byte	0x3
+ 23571 8e2c 00000000 		.quad	vec_00
+ 23571      00000000 
+ 23572 8e34 3D       		.uleb128 0x3d
+ 23573 8e35 00000000 		.long	.LASF387
+ 23574 8e39 03       		.byte	0x3
+ 23575 8e3a 57       		.byte	0x57
+ 23576 8e3b F60D0000 		.long	0xdf6
+ 23577 8e3f 09       		.byte	0x9
+ 23578 8e40 03       		.byte	0x3
+ 23579 8e41 00000000 		.quad	vec_01
+ 23579      00000000 
+ 23580 8e49 3D       		.uleb128 0x3d
+ 23581 8e4a 00000000 		.long	.LASF388
+ 23582 8e4e 03       		.byte	0x3
+ 23583 8e4f 5B       		.byte	0x5b
+ 23584 8e50 F60D0000 		.long	0xdf6
+ 23585 8e54 09       		.byte	0x9
+ 23586 8e55 03       		.byte	0x3
+ 23587 8e56 00000000 		.quad	vec_0F
+
GAS LISTING /tmp/ccPaCTqg.s 			page 591
+
+
+ 23587      00000000 
+ 23588 8e5e 3D       		.uleb128 0x3d
+ 23589 8e5f 00000000 		.long	.LASF389
+ 23590 8e63 03       		.byte	0x3
+ 23591 8e64 5F       		.byte	0x5f
+ 23592 8e65 F60D0000 		.long	0xdf6
+ 23593 8e69 09       		.byte	0x9
+ 23594 8e6a 03       		.byte	0x3
+ 23595 8e6b 00000000 		.quad	vec_10
+ 23595      00000000 
+ 23596 8e73 09       		.uleb128 0x9
+ 23597 8e74 14040000 		.long	0x414
+ 23598 8e78 838E0000 		.long	0x8e83
+ 23599 8e7c 0A       		.uleb128 0xa
+ 23600 8e7d 9C000000 		.long	0x9c
+ 23601 8e81 FF       		.byte	0xff
+ 23602 8e82 00       		.byte	0x0
+ 23603 8e83 2F       		.uleb128 0x2f
+ 23604 8e84 00000000 		.long	.LASF390
+ 23605 8e88 03       		.byte	0x3
+ 23606 8e89 AA02     		.value	0x2aa
+ 23607 8e8b 998E0000 		.long	0x8e99
+ 23608 8e8f 09       		.byte	0x9
+ 23609 8e90 03       		.byte	0x3
+ 23610 8e91 00000000 		.quad	KAESBlockCipherVecAesNiRijndaelSBox
+ 23610      00000000 
+ 23611 8e99 06       		.uleb128 0x6
+ 23612 8e9a 738E0000 		.long	0x8e73
+ 23613 8e9e 09       		.uleb128 0x9
+ 23614 8e9f C9010000 		.long	0x1c9
+ 23615 8ea3 AE8E0000 		.long	0x8eae
+ 23616 8ea7 0A       		.uleb128 0xa
+ 23617 8ea8 9C000000 		.long	0x9c
+ 23618 8eac 0F       		.byte	0xf
+ 23619 8ead 00       		.byte	0x0
+ 23620 8eae 2F       		.uleb128 0x2f
+ 23621 8eaf 00000000 		.long	.LASF391
+ 23622 8eb3 03       		.byte	0x3
+ 23623 8eb4 1903     		.value	0x319
+ 23624 8eb6 C48E0000 		.long	0x8ec4
+ 23625 8eba 09       		.byte	0x9
+ 23626 8ebb 03       		.byte	0x3
+ 23627 8ebc 00000000 		.quad	KAESBlockCipherVecAesNiRijndaelSBoxV
+ 23627      00000000 
+ 23628 8ec4 06       		.uleb128 0x6
+ 23629 8ec5 9E8E0000 		.long	0x8e9e
+ 23630 8ec9 2F       		.uleb128 0x2f
+ 23631 8eca 00000000 		.long	.LASF392
+ 23632 8ece 03       		.byte	0x3
+ 23633 8ecf 2F03     		.value	0x32f
+ 23634 8ed1 DF8E0000 		.long	0x8edf
+ 23635 8ed5 09       		.byte	0x9
+ 23636 8ed6 03       		.byte	0x3
+ 23637 8ed7 00000000 		.quad	KAESBlockCipherVecAesNiRijndaelInvSBoxV
+ 23637      00000000 
+ 23638 8edf 06       		.uleb128 0x6
+ 23639 8ee0 9E8E0000 		.long	0x8e9e
+
GAS LISTING /tmp/ccPaCTqg.s 			page 592
+
+
+ 23640 8ee4 2F       		.uleb128 0x2f
+ 23641 8ee5 00000000 		.long	.LASF393
+ 23642 8ee9 03       		.byte	0x3
+ 23643 8eea 4603     		.value	0x346
+ 23644 8eec F60D0000 		.long	0xdf6
+ 23645 8ef0 09       		.byte	0x9
+ 23646 8ef1 03       		.byte	0x3
+ 23647 8ef2 00000000 		.quad	lo_filter
+ 23647      00000000 
+ 23648 8efa 2F       		.uleb128 0x2f
+ 23649 8efb 00000000 		.long	.LASF394
+ 23650 8eff 03       		.byte	0x3
+ 23651 8f00 9703     		.value	0x397
+ 23652 8f02 F60D0000 		.long	0xdf6
+ 23653 8f06 09       		.byte	0x9
+ 23654 8f07 03       		.byte	0x3
+ 23655 8f08 00000000 		.quad	FF_tab
+ 23655      00000000 
+ 23656 8f10 09       		.uleb128 0x9
+ 23657 8f11 14040000 		.long	0x414
+ 23658 8f15 208F0000 		.long	0x8f20
+ 23659 8f19 0A       		.uleb128 0xa
+ 23660 8f1a 9C000000 		.long	0x9c
+ 23661 8f1e 07       		.byte	0x7
+ 23662 8f1f 00       		.byte	0x0
+ 23663 8f20 2F       		.uleb128 0x2f
+ 23664 8f21 00000000 		.long	.LASF395
+ 23665 8f25 03       		.byte	0x3
+ 23666 8f26 DF03     		.value	0x3df
+ 23667 8f28 108F0000 		.long	0x8f10
+ 23668 8f2c 09       		.byte	0x9
+ 23669 8f2d 03       		.byte	0x3
+ 23670 8f2e 00000000 		.quad	KAESBlockCipherVecAesNiFFtable
+ 23670      00000000 
+ 23671 8f36 09       		.uleb128 0x9
+ 23672 8f37 1F040000 		.long	0x41f
+ 23673 8f3b 468F0000 		.long	0x8f46
+ 23674 8f3f 0A       		.uleb128 0xa
+ 23675 8f40 9C000000 		.long	0x9c
+ 23676 8f44 09       		.byte	0x9
+ 23677 8f45 00       		.byte	0x0
+ 23678 8f46 2F       		.uleb128 0x2f
+ 23679 8f47 00000000 		.long	.LASF396
+ 23680 8f4b 03       		.byte	0x3
+ 23681 8f4c 9E04     		.value	0x49e
+ 23682 8f4e 5C8F0000 		.long	0x8f5c
+ 23683 8f52 09       		.byte	0x9
+ 23684 8f53 03       		.byte	0x3
+ 23685 8f54 00000000 		.quad	KAESBlockCipherVecAesNiRcon
+ 23685      00000000 
+ 23686 8f5c 06       		.uleb128 0x6
+ 23687 8f5d 368F0000 		.long	0x8f36
+ 23688 8f61 09       		.uleb128 0x9
+ 23689 8f62 9F000000 		.long	0x9f
+ 23690 8f66 718F0000 		.long	0x8f71
+ 23691 8f6a 0A       		.uleb128 0xa
+ 23692 8f6b 9C000000 		.long	0x9c
+
GAS LISTING /tmp/ccPaCTqg.s 			page 593
+
+
+ 23693 8f6f 09       		.byte	0x9
+ 23694 8f70 00       		.byte	0x0
+ 23695 8f71 2F       		.uleb128 0x2f
+ 23696 8f72 00000000 		.long	.LASF397
+ 23697 8f76 03       		.byte	0x3
+ 23698 8f77 F708     		.value	0x8f7
+ 23699 8f79 878F0000 		.long	0x8f87
+ 23700 8f7d 09       		.byte	0x9
+ 23701 8f7e 03       		.byte	0x3
+ 23702 8f7f 00000000 		.quad	KAESBlockCipherVecAesNiaes_ncbi_name
+ 23702      00000000 
+ 23703 8f87 06       		.uleb128 0x6
+ 23704 8f88 618F0000 		.long	0x8f61
+ 23705 8f8c 2F       		.uleb128 0x2f
+ 23706 8f8d 00000000 		.long	.LASF398
+ 23707 8f91 03       		.byte	0x3
+ 23708 8f92 240A     		.value	0xa24
+ 23709 8f94 A28F0000 		.long	0x8fa2
+ 23710 8f98 09       		.byte	0x9
+ 23711 8f99 03       		.byte	0x3
+ 23712 8f9a 00000000 		.quad	KAESBlockCipherVecAesNi_vt_
+ 23712      00000000 
+ 23713 8fa2 06       		.uleb128 0x6
+ 23714 8fa3 27030000 		.long	0x327
+ 23715 8fa7 00       		.byte	0x0
+ 23716              		.section	.debug_abbrev
+ 23717 0000 01       		.uleb128 0x1
+ 23718 0001 11       		.uleb128 0x11
+ 23719 0002 01       		.byte	0x1
+ 23720 0003 25       		.uleb128 0x25
+ 23721 0004 0E       		.uleb128 0xe
+ 23722 0005 13       		.uleb128 0x13
+ 23723 0006 0B       		.uleb128 0xb
+ 23724 0007 03       		.uleb128 0x3
+ 23725 0008 0E       		.uleb128 0xe
+ 23726 0009 1B       		.uleb128 0x1b
+ 23727 000a 0E       		.uleb128 0xe
+ 23728 000b 11       		.uleb128 0x11
+ 23729 000c 01       		.uleb128 0x1
+ 23730 000d 12       		.uleb128 0x12
+ 23731 000e 01       		.uleb128 0x1
+ 23732 000f 10       		.uleb128 0x10
+ 23733 0010 06       		.uleb128 0x6
+ 23734 0011 00       		.byte	0x0
+ 23735 0012 00       		.byte	0x0
+ 23736 0013 02       		.uleb128 0x2
+ 23737 0014 24       		.uleb128 0x24
+ 23738 0015 00       		.byte	0x0
+ 23739 0016 0B       		.uleb128 0xb
+ 23740 0017 0B       		.uleb128 0xb
+ 23741 0018 3E       		.uleb128 0x3e
+ 23742 0019 0B       		.uleb128 0xb
+ 23743 001a 03       		.uleb128 0x3
+ 23744 001b 0E       		.uleb128 0xe
+ 23745 001c 00       		.byte	0x0
+ 23746 001d 00       		.byte	0x0
+ 23747 001e 03       		.uleb128 0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 594
+
+
+ 23748 001f 16       		.uleb128 0x16
+ 23749 0020 00       		.byte	0x0
+ 23750 0021 03       		.uleb128 0x3
+ 23751 0022 0E       		.uleb128 0xe
+ 23752 0023 3A       		.uleb128 0x3a
+ 23753 0024 0B       		.uleb128 0xb
+ 23754 0025 3B       		.uleb128 0x3b
+ 23755 0026 0B       		.uleb128 0xb
+ 23756 0027 49       		.uleb128 0x49
+ 23757 0028 13       		.uleb128 0x13
+ 23758 0029 00       		.byte	0x0
+ 23759 002a 00       		.byte	0x0
+ 23760 002b 04       		.uleb128 0x4
+ 23761 002c 24       		.uleb128 0x24
+ 23762 002d 00       		.byte	0x0
+ 23763 002e 0B       		.uleb128 0xb
+ 23764 002f 0B       		.uleb128 0xb
+ 23765 0030 3E       		.uleb128 0x3e
+ 23766 0031 0B       		.uleb128 0xb
+ 23767 0032 03       		.uleb128 0x3
+ 23768 0033 08       		.uleb128 0x8
+ 23769 0034 00       		.byte	0x0
+ 23770 0035 00       		.byte	0x0
+ 23771 0036 05       		.uleb128 0x5
+ 23772 0037 24       		.uleb128 0x24
+ 23773 0038 00       		.byte	0x0
+ 23774 0039 0B       		.uleb128 0xb
+ 23775 003a 0B       		.uleb128 0xb
+ 23776 003b 3E       		.uleb128 0x3e
+ 23777 003c 0B       		.uleb128 0xb
+ 23778 003d 00       		.byte	0x0
+ 23779 003e 00       		.byte	0x0
+ 23780 003f 06       		.uleb128 0x6
+ 23781 0040 26       		.uleb128 0x26
+ 23782 0041 00       		.byte	0x0
+ 23783 0042 49       		.uleb128 0x49
+ 23784 0043 13       		.uleb128 0x13
+ 23785 0044 00       		.byte	0x0
+ 23786 0045 00       		.byte	0x0
+ 23787 0046 07       		.uleb128 0x7
+ 23788 0047 0F       		.uleb128 0xf
+ 23789 0048 00       		.byte	0x0
+ 23790 0049 0B       		.uleb128 0xb
+ 23791 004a 0B       		.uleb128 0xb
+ 23792 004b 49       		.uleb128 0x49
+ 23793 004c 13       		.uleb128 0x13
+ 23794 004d 00       		.byte	0x0
+ 23795 004e 00       		.byte	0x0
+ 23796 004f 08       		.uleb128 0x8
+ 23797 0050 0F       		.uleb128 0xf
+ 23798 0051 00       		.byte	0x0
+ 23799 0052 0B       		.uleb128 0xb
+ 23800 0053 0B       		.uleb128 0xb
+ 23801 0054 00       		.byte	0x0
+ 23802 0055 00       		.byte	0x0
+ 23803 0056 09       		.uleb128 0x9
+ 23804 0057 01       		.uleb128 0x1
+
GAS LISTING /tmp/ccPaCTqg.s 			page 595
+
+
+ 23805 0058 01       		.byte	0x1
+ 23806 0059 49       		.uleb128 0x49
+ 23807 005a 13       		.uleb128 0x13
+ 23808 005b 01       		.uleb128 0x1
+ 23809 005c 13       		.uleb128 0x13
+ 23810 005d 00       		.byte	0x0
+ 23811 005e 00       		.byte	0x0
+ 23812 005f 0A       		.uleb128 0xa
+ 23813 0060 21       		.uleb128 0x21
+ 23814 0061 00       		.byte	0x0
+ 23815 0062 49       		.uleb128 0x49
+ 23816 0063 13       		.uleb128 0x13
+ 23817 0064 2F       		.uleb128 0x2f
+ 23818 0065 0B       		.uleb128 0xb
+ 23819 0066 00       		.byte	0x0
+ 23820 0067 00       		.byte	0x0
+ 23821 0068 0B       		.uleb128 0xb
+ 23822 0069 26       		.uleb128 0x26
+ 23823 006a 00       		.byte	0x0
+ 23824 006b 00       		.byte	0x0
+ 23825 006c 00       		.byte	0x0
+ 23826 006d 0C       		.uleb128 0xc
+ 23827 006e 01       		.uleb128 0x1
+ 23828 006f 00       		.byte	0x0
+ 23829 0070 8742     		.uleb128 0x2107
+ 23830 0072 0C       		.uleb128 0xc
+ 23831 0073 49       		.uleb128 0x49
+ 23832 0074 13       		.uleb128 0x13
+ 23833 0075 00       		.byte	0x0
+ 23834 0076 00       		.byte	0x0
+ 23835 0077 0D       		.uleb128 0xd
+ 23836 0078 04       		.uleb128 0x4
+ 23837 0079 01       		.byte	0x1
+ 23838 007a 0B       		.uleb128 0xb
+ 23839 007b 0B       		.uleb128 0xb
+ 23840 007c 3A       		.uleb128 0x3a
+ 23841 007d 0B       		.uleb128 0xb
+ 23842 007e 3B       		.uleb128 0x3b
+ 23843 007f 0B       		.uleb128 0xb
+ 23844 0080 01       		.uleb128 0x1
+ 23845 0081 13       		.uleb128 0x13
+ 23846 0082 00       		.byte	0x0
+ 23847 0083 00       		.byte	0x0
+ 23848 0084 0E       		.uleb128 0xe
+ 23849 0085 28       		.uleb128 0x28
+ 23850 0086 00       		.byte	0x0
+ 23851 0087 03       		.uleb128 0x3
+ 23852 0088 0E       		.uleb128 0xe
+ 23853 0089 1C       		.uleb128 0x1c
+ 23854 008a 0D       		.uleb128 0xd
+ 23855 008b 00       		.byte	0x0
+ 23856 008c 00       		.byte	0x0
+ 23857 008d 0F       		.uleb128 0xf
+ 23858 008e 04       		.uleb128 0x4
+ 23859 008f 01       		.byte	0x1
+ 23860 0090 0B       		.uleb128 0xb
+ 23861 0091 0B       		.uleb128 0xb
+
GAS LISTING /tmp/ccPaCTqg.s 			page 596
+
+
+ 23862 0092 3A       		.uleb128 0x3a
+ 23863 0093 0B       		.uleb128 0xb
+ 23864 0094 3B       		.uleb128 0x3b
+ 23865 0095 05       		.uleb128 0x5
+ 23866 0096 01       		.uleb128 0x1
+ 23867 0097 13       		.uleb128 0x13
+ 23868 0098 00       		.byte	0x0
+ 23869 0099 00       		.byte	0x0
+ 23870 009a 10       		.uleb128 0x10
+ 23871 009b 13       		.uleb128 0x13
+ 23872 009c 01       		.byte	0x1
+ 23873 009d 03       		.uleb128 0x3
+ 23874 009e 0E       		.uleb128 0xe
+ 23875 009f 0B       		.uleb128 0xb
+ 23876 00a0 0B       		.uleb128 0xb
+ 23877 00a1 3A       		.uleb128 0x3a
+ 23878 00a2 0B       		.uleb128 0xb
+ 23879 00a3 3B       		.uleb128 0x3b
+ 23880 00a4 0B       		.uleb128 0xb
+ 23881 00a5 01       		.uleb128 0x1
+ 23882 00a6 13       		.uleb128 0x13
+ 23883 00a7 00       		.byte	0x0
+ 23884 00a8 00       		.byte	0x0
+ 23885 00a9 11       		.uleb128 0x11
+ 23886 00aa 0D       		.uleb128 0xd
+ 23887 00ab 00       		.byte	0x0
+ 23888 00ac 03       		.uleb128 0x3
+ 23889 00ad 08       		.uleb128 0x8
+ 23890 00ae 3A       		.uleb128 0x3a
+ 23891 00af 0B       		.uleb128 0xb
+ 23892 00b0 3B       		.uleb128 0x3b
+ 23893 00b1 0B       		.uleb128 0xb
+ 23894 00b2 49       		.uleb128 0x49
+ 23895 00b3 13       		.uleb128 0x13
+ 23896 00b4 38       		.uleb128 0x38
+ 23897 00b5 0A       		.uleb128 0xa
+ 23898 00b6 00       		.byte	0x0
+ 23899 00b7 00       		.byte	0x0
+ 23900 00b8 12       		.uleb128 0x12
+ 23901 00b9 0D       		.uleb128 0xd
+ 23902 00ba 00       		.byte	0x0
+ 23903 00bb 03       		.uleb128 0x3
+ 23904 00bc 0E       		.uleb128 0xe
+ 23905 00bd 3A       		.uleb128 0x3a
+ 23906 00be 0B       		.uleb128 0xb
+ 23907 00bf 3B       		.uleb128 0x3b
+ 23908 00c0 0B       		.uleb128 0xb
+ 23909 00c1 49       		.uleb128 0x49
+ 23910 00c2 13       		.uleb128 0x13
+ 23911 00c3 38       		.uleb128 0x38
+ 23912 00c4 0A       		.uleb128 0xa
+ 23913 00c5 00       		.byte	0x0
+ 23914 00c6 00       		.byte	0x0
+ 23915 00c7 13       		.uleb128 0x13
+ 23916 00c8 17       		.uleb128 0x17
+ 23917 00c9 01       		.byte	0x1
+ 23918 00ca 03       		.uleb128 0x3
+
GAS LISTING /tmp/ccPaCTqg.s 			page 597
+
+
+ 23919 00cb 0E       		.uleb128 0xe
+ 23920 00cc 0B       		.uleb128 0xb
+ 23921 00cd 0B       		.uleb128 0xb
+ 23922 00ce 3A       		.uleb128 0x3a
+ 23923 00cf 0B       		.uleb128 0xb
+ 23924 00d0 3B       		.uleb128 0x3b
+ 23925 00d1 0B       		.uleb128 0xb
+ 23926 00d2 01       		.uleb128 0x1
+ 23927 00d3 13       		.uleb128 0x13
+ 23928 00d4 00       		.byte	0x0
+ 23929 00d5 00       		.byte	0x0
+ 23930 00d6 14       		.uleb128 0x14
+ 23931 00d7 0D       		.uleb128 0xd
+ 23932 00d8 00       		.byte	0x0
+ 23933 00d9 03       		.uleb128 0x3
+ 23934 00da 0E       		.uleb128 0xe
+ 23935 00db 3A       		.uleb128 0x3a
+ 23936 00dc 0B       		.uleb128 0xb
+ 23937 00dd 3B       		.uleb128 0x3b
+ 23938 00de 0B       		.uleb128 0xb
+ 23939 00df 49       		.uleb128 0x49
+ 23940 00e0 13       		.uleb128 0x13
+ 23941 00e1 00       		.byte	0x0
+ 23942 00e2 00       		.byte	0x0
+ 23943 00e3 15       		.uleb128 0x15
+ 23944 00e4 0D       		.uleb128 0xd
+ 23945 00e5 00       		.byte	0x0
+ 23946 00e6 03       		.uleb128 0x3
+ 23947 00e7 08       		.uleb128 0x8
+ 23948 00e8 3A       		.uleb128 0x3a
+ 23949 00e9 0B       		.uleb128 0xb
+ 23950 00ea 3B       		.uleb128 0x3b
+ 23951 00eb 0B       		.uleb128 0xb
+ 23952 00ec 49       		.uleb128 0x49
+ 23953 00ed 13       		.uleb128 0x13
+ 23954 00ee 00       		.byte	0x0
+ 23955 00ef 00       		.byte	0x0
+ 23956 00f0 16       		.uleb128 0x16
+ 23957 00f1 15       		.uleb128 0x15
+ 23958 00f2 01       		.byte	0x1
+ 23959 00f3 27       		.uleb128 0x27
+ 23960 00f4 0C       		.uleb128 0xc
+ 23961 00f5 01       		.uleb128 0x1
+ 23962 00f6 13       		.uleb128 0x13
+ 23963 00f7 00       		.byte	0x0
+ 23964 00f8 00       		.byte	0x0
+ 23965 00f9 17       		.uleb128 0x17
+ 23966 00fa 05       		.uleb128 0x5
+ 23967 00fb 00       		.byte	0x0
+ 23968 00fc 49       		.uleb128 0x49
+ 23969 00fd 13       		.uleb128 0x13
+ 23970 00fe 00       		.byte	0x0
+ 23971 00ff 00       		.byte	0x0
+ 23972 0100 18       		.uleb128 0x18
+ 23973 0101 15       		.uleb128 0x15
+ 23974 0102 01       		.byte	0x1
+ 23975 0103 49       		.uleb128 0x49
+
GAS LISTING /tmp/ccPaCTqg.s 			page 598
+
+
+ 23976 0104 13       		.uleb128 0x13
+ 23977 0105 01       		.uleb128 0x1
+ 23978 0106 13       		.uleb128 0x13
+ 23979 0107 00       		.byte	0x0
+ 23980 0108 00       		.byte	0x0
+ 23981 0109 19       		.uleb128 0x19
+ 23982 010a 18       		.uleb128 0x18
+ 23983 010b 00       		.byte	0x0
+ 23984 010c 00       		.byte	0x0
+ 23985 010d 00       		.byte	0x0
+ 23986 010e 1A       		.uleb128 0x1a
+ 23987 010f 15       		.uleb128 0x15
+ 23988 0110 01       		.byte	0x1
+ 23989 0111 27       		.uleb128 0x27
+ 23990 0112 0C       		.uleb128 0xc
+ 23991 0113 49       		.uleb128 0x49
+ 23992 0114 13       		.uleb128 0x13
+ 23993 0115 01       		.uleb128 0x1
+ 23994 0116 13       		.uleb128 0x13
+ 23995 0117 00       		.byte	0x0
+ 23996 0118 00       		.byte	0x0
+ 23997 0119 1B       		.uleb128 0x1b
+ 23998 011a 13       		.uleb128 0x13
+ 23999 011b 01       		.byte	0x1
+ 24000 011c 03       		.uleb128 0x3
+ 24001 011d 0E       		.uleb128 0xe
+ 24002 011e 0B       		.uleb128 0xb
+ 24003 011f 05       		.uleb128 0x5
+ 24004 0120 3A       		.uleb128 0x3a
+ 24005 0121 0B       		.uleb128 0xb
+ 24006 0122 3B       		.uleb128 0x3b
+ 24007 0123 0B       		.uleb128 0xb
+ 24008 0124 01       		.uleb128 0x1
+ 24009 0125 13       		.uleb128 0x13
+ 24010 0126 00       		.byte	0x0
+ 24011 0127 00       		.byte	0x0
+ 24012 0128 1C       		.uleb128 0x1c
+ 24013 0129 17       		.uleb128 0x17
+ 24014 012a 01       		.byte	0x1
+ 24015 012b 0B       		.uleb128 0xb
+ 24016 012c 0B       		.uleb128 0xb
+ 24017 012d 3A       		.uleb128 0x3a
+ 24018 012e 0B       		.uleb128 0xb
+ 24019 012f 3B       		.uleb128 0x3b
+ 24020 0130 0B       		.uleb128 0xb
+ 24021 0131 01       		.uleb128 0x1
+ 24022 0132 13       		.uleb128 0x13
+ 24023 0133 00       		.byte	0x0
+ 24024 0134 00       		.byte	0x0
+ 24025 0135 1D       		.uleb128 0x1d
+ 24026 0136 04       		.uleb128 0x4
+ 24027 0137 01       		.byte	0x1
+ 24028 0138 03       		.uleb128 0x3
+ 24029 0139 0E       		.uleb128 0xe
+ 24030 013a 0B       		.uleb128 0xb
+ 24031 013b 0B       		.uleb128 0xb
+ 24032 013c 3A       		.uleb128 0x3a
+
GAS LISTING /tmp/ccPaCTqg.s 			page 599
+
+
+ 24033 013d 0B       		.uleb128 0xb
+ 24034 013e 3B       		.uleb128 0x3b
+ 24035 013f 0B       		.uleb128 0xb
+ 24036 0140 01       		.uleb128 0x1
+ 24037 0141 13       		.uleb128 0x13
+ 24038 0142 00       		.byte	0x0
+ 24039 0143 00       		.byte	0x0
+ 24040 0144 1E       		.uleb128 0x1e
+ 24041 0145 04       		.uleb128 0x4
+ 24042 0146 01       		.byte	0x1
+ 24043 0147 03       		.uleb128 0x3
+ 24044 0148 0E       		.uleb128 0xe
+ 24045 0149 0B       		.uleb128 0xb
+ 24046 014a 0B       		.uleb128 0xb
+ 24047 014b 3A       		.uleb128 0x3a
+ 24048 014c 0B       		.uleb128 0xb
+ 24049 014d 3B       		.uleb128 0x3b
+ 24050 014e 05       		.uleb128 0x5
+ 24051 014f 01       		.uleb128 0x1
+ 24052 0150 13       		.uleb128 0x13
+ 24053 0151 00       		.byte	0x0
+ 24054 0152 00       		.byte	0x0
+ 24055 0153 1F       		.uleb128 0x1f
+ 24056 0154 2E       		.uleb128 0x2e
+ 24057 0155 01       		.byte	0x1
+ 24058 0156 03       		.uleb128 0x3
+ 24059 0157 0E       		.uleb128 0xe
+ 24060 0158 3A       		.uleb128 0x3a
+ 24061 0159 0B       		.uleb128 0xb
+ 24062 015a 3B       		.uleb128 0x3b
+ 24063 015b 05       		.uleb128 0x5
+ 24064 015c 27       		.uleb128 0x27
+ 24065 015d 0C       		.uleb128 0xc
+ 24066 015e 49       		.uleb128 0x49
+ 24067 015f 13       		.uleb128 0x13
+ 24068 0160 11       		.uleb128 0x11
+ 24069 0161 01       		.uleb128 0x1
+ 24070 0162 12       		.uleb128 0x12
+ 24071 0163 01       		.uleb128 0x1
+ 24072 0164 40       		.uleb128 0x40
+ 24073 0165 06       		.uleb128 0x6
+ 24074 0166 01       		.uleb128 0x1
+ 24075 0167 13       		.uleb128 0x13
+ 24076 0168 00       		.byte	0x0
+ 24077 0169 00       		.byte	0x0
+ 24078 016a 20       		.uleb128 0x20
+ 24079 016b 05       		.uleb128 0x5
+ 24080 016c 00       		.byte	0x0
+ 24081 016d 03       		.uleb128 0x3
+ 24082 016e 0E       		.uleb128 0xe
+ 24083 016f 3A       		.uleb128 0x3a
+ 24084 0170 0B       		.uleb128 0xb
+ 24085 0171 3B       		.uleb128 0x3b
+ 24086 0172 05       		.uleb128 0x5
+ 24087 0173 49       		.uleb128 0x49
+ 24088 0174 13       		.uleb128 0x13
+ 24089 0175 02       		.uleb128 0x2
+
GAS LISTING /tmp/ccPaCTqg.s 			page 600
+
+
+ 24090 0176 0A       		.uleb128 0xa
+ 24091 0177 00       		.byte	0x0
+ 24092 0178 00       		.byte	0x0
+ 24093 0179 21       		.uleb128 0x21
+ 24094 017a 2E       		.uleb128 0x2e
+ 24095 017b 01       		.byte	0x1
+ 24096 017c 03       		.uleb128 0x3
+ 24097 017d 0E       		.uleb128 0xe
+ 24098 017e 3A       		.uleb128 0x3a
+ 24099 017f 0B       		.uleb128 0xb
+ 24100 0180 3B       		.uleb128 0x3b
+ 24101 0181 0B       		.uleb128 0xb
+ 24102 0182 27       		.uleb128 0x27
+ 24103 0183 0C       		.uleb128 0xc
+ 24104 0184 49       		.uleb128 0x49
+ 24105 0185 13       		.uleb128 0x13
+ 24106 0186 11       		.uleb128 0x11
+ 24107 0187 01       		.uleb128 0x1
+ 24108 0188 12       		.uleb128 0x12
+ 24109 0189 01       		.uleb128 0x1
+ 24110 018a 40       		.uleb128 0x40
+ 24111 018b 06       		.uleb128 0x6
+ 24112 018c 01       		.uleb128 0x1
+ 24113 018d 13       		.uleb128 0x13
+ 24114 018e 00       		.byte	0x0
+ 24115 018f 00       		.byte	0x0
+ 24116 0190 22       		.uleb128 0x22
+ 24117 0191 05       		.uleb128 0x5
+ 24118 0192 00       		.byte	0x0
+ 24119 0193 03       		.uleb128 0x3
+ 24120 0194 08       		.uleb128 0x8
+ 24121 0195 3A       		.uleb128 0x3a
+ 24122 0196 0B       		.uleb128 0xb
+ 24123 0197 3B       		.uleb128 0x3b
+ 24124 0198 0B       		.uleb128 0xb
+ 24125 0199 49       		.uleb128 0x49
+ 24126 019a 13       		.uleb128 0x13
+ 24127 019b 02       		.uleb128 0x2
+ 24128 019c 0A       		.uleb128 0xa
+ 24129 019d 00       		.byte	0x0
+ 24130 019e 00       		.byte	0x0
+ 24131 019f 23       		.uleb128 0x23
+ 24132 01a0 34       		.uleb128 0x34
+ 24133 01a1 00       		.byte	0x0
+ 24134 01a2 03       		.uleb128 0x3
+ 24135 01a3 08       		.uleb128 0x8
+ 24136 01a4 3A       		.uleb128 0x3a
+ 24137 01a5 0B       		.uleb128 0xb
+ 24138 01a6 3B       		.uleb128 0x3b
+ 24139 01a7 0B       		.uleb128 0xb
+ 24140 01a8 49       		.uleb128 0x49
+ 24141 01a9 13       		.uleb128 0x13
+ 24142 01aa 02       		.uleb128 0x2
+ 24143 01ab 0A       		.uleb128 0xa
+ 24144 01ac 00       		.byte	0x0
+ 24145 01ad 00       		.byte	0x0
+ 24146 01ae 24       		.uleb128 0x24
+
GAS LISTING /tmp/ccPaCTqg.s 			page 601
+
+
+ 24147 01af 2E       		.uleb128 0x2e
+ 24148 01b0 01       		.byte	0x1
+ 24149 01b1 03       		.uleb128 0x3
+ 24150 01b2 0E       		.uleb128 0xe
+ 24151 01b3 3A       		.uleb128 0x3a
+ 24152 01b4 0B       		.uleb128 0xb
+ 24153 01b5 3B       		.uleb128 0x3b
+ 24154 01b6 0B       		.uleb128 0xb
+ 24155 01b7 27       		.uleb128 0x27
+ 24156 01b8 0C       		.uleb128 0xc
+ 24157 01b9 49       		.uleb128 0x49
+ 24158 01ba 13       		.uleb128 0x13
+ 24159 01bb 20       		.uleb128 0x20
+ 24160 01bc 0B       		.uleb128 0xb
+ 24161 01bd 01       		.uleb128 0x1
+ 24162 01be 13       		.uleb128 0x13
+ 24163 01bf 00       		.byte	0x0
+ 24164 01c0 00       		.byte	0x0
+ 24165 01c1 25       		.uleb128 0x25
+ 24166 01c2 05       		.uleb128 0x5
+ 24167 01c3 00       		.byte	0x0
+ 24168 01c4 03       		.uleb128 0x3
+ 24169 01c5 08       		.uleb128 0x8
+ 24170 01c6 3A       		.uleb128 0x3a
+ 24171 01c7 0B       		.uleb128 0xb
+ 24172 01c8 3B       		.uleb128 0x3b
+ 24173 01c9 0B       		.uleb128 0xb
+ 24174 01ca 49       		.uleb128 0x49
+ 24175 01cb 13       		.uleb128 0x13
+ 24176 01cc 00       		.byte	0x0
+ 24177 01cd 00       		.byte	0x0
+ 24178 01ce 26       		.uleb128 0x26
+ 24179 01cf 34       		.uleb128 0x34
+ 24180 01d0 00       		.byte	0x0
+ 24181 01d1 03       		.uleb128 0x3
+ 24182 01d2 08       		.uleb128 0x8
+ 24183 01d3 3A       		.uleb128 0x3a
+ 24184 01d4 0B       		.uleb128 0xb
+ 24185 01d5 3B       		.uleb128 0x3b
+ 24186 01d6 0B       		.uleb128 0xb
+ 24187 01d7 49       		.uleb128 0x49
+ 24188 01d8 13       		.uleb128 0x13
+ 24189 01d9 00       		.byte	0x0
+ 24190 01da 00       		.byte	0x0
+ 24191 01db 27       		.uleb128 0x27
+ 24192 01dc 2E       		.uleb128 0x2e
+ 24193 01dd 01       		.byte	0x1
+ 24194 01de 03       		.uleb128 0x3
+ 24195 01df 0E       		.uleb128 0xe
+ 24196 01e0 3A       		.uleb128 0x3a
+ 24197 01e1 0B       		.uleb128 0xb
+ 24198 01e2 3B       		.uleb128 0x3b
+ 24199 01e3 05       		.uleb128 0x5
+ 24200 01e4 27       		.uleb128 0x27
+ 24201 01e5 0C       		.uleb128 0xc
+ 24202 01e6 49       		.uleb128 0x49
+ 24203 01e7 13       		.uleb128 0x13
+
GAS LISTING /tmp/ccPaCTqg.s 			page 602
+
+
+ 24204 01e8 20       		.uleb128 0x20
+ 24205 01e9 0B       		.uleb128 0xb
+ 24206 01ea 01       		.uleb128 0x1
+ 24207 01eb 13       		.uleb128 0x13
+ 24208 01ec 00       		.byte	0x0
+ 24209 01ed 00       		.byte	0x0
+ 24210 01ee 28       		.uleb128 0x28
+ 24211 01ef 05       		.uleb128 0x5
+ 24212 01f0 00       		.byte	0x0
+ 24213 01f1 03       		.uleb128 0x3
+ 24214 01f2 0E       		.uleb128 0xe
+ 24215 01f3 3A       		.uleb128 0x3a
+ 24216 01f4 0B       		.uleb128 0xb
+ 24217 01f5 3B       		.uleb128 0x3b
+ 24218 01f6 05       		.uleb128 0x5
+ 24219 01f7 49       		.uleb128 0x49
+ 24220 01f8 13       		.uleb128 0x13
+ 24221 01f9 00       		.byte	0x0
+ 24222 01fa 00       		.byte	0x0
+ 24223 01fb 29       		.uleb128 0x29
+ 24224 01fc 34       		.uleb128 0x34
+ 24225 01fd 00       		.byte	0x0
+ 24226 01fe 03       		.uleb128 0x3
+ 24227 01ff 08       		.uleb128 0x8
+ 24228 0200 3A       		.uleb128 0x3a
+ 24229 0201 0B       		.uleb128 0xb
+ 24230 0202 3B       		.uleb128 0x3b
+ 24231 0203 05       		.uleb128 0x5
+ 24232 0204 49       		.uleb128 0x49
+ 24233 0205 13       		.uleb128 0x13
+ 24234 0206 00       		.byte	0x0
+ 24235 0207 00       		.byte	0x0
+ 24236 0208 2A       		.uleb128 0x2a
+ 24237 0209 05       		.uleb128 0x5
+ 24238 020a 00       		.byte	0x0
+ 24239 020b 03       		.uleb128 0x3
+ 24240 020c 08       		.uleb128 0x8
+ 24241 020d 3A       		.uleb128 0x3a
+ 24242 020e 0B       		.uleb128 0xb
+ 24243 020f 3B       		.uleb128 0x3b
+ 24244 0210 05       		.uleb128 0x5
+ 24245 0211 49       		.uleb128 0x49
+ 24246 0212 13       		.uleb128 0x13
+ 24247 0213 00       		.byte	0x0
+ 24248 0214 00       		.byte	0x0
+ 24249 0215 2B       		.uleb128 0x2b
+ 24250 0216 34       		.uleb128 0x34
+ 24251 0217 00       		.byte	0x0
+ 24252 0218 03       		.uleb128 0x3
+ 24253 0219 0E       		.uleb128 0xe
+ 24254 021a 3A       		.uleb128 0x3a
+ 24255 021b 0B       		.uleb128 0xb
+ 24256 021c 3B       		.uleb128 0x3b
+ 24257 021d 05       		.uleb128 0x5
+ 24258 021e 49       		.uleb128 0x49
+ 24259 021f 13       		.uleb128 0x13
+ 24260 0220 00       		.byte	0x0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 603
+
+
+ 24261 0221 00       		.byte	0x0
+ 24262 0222 2C       		.uleb128 0x2c
+ 24263 0223 34       		.uleb128 0x34
+ 24264 0224 00       		.byte	0x0
+ 24265 0225 03       		.uleb128 0x3
+ 24266 0226 0E       		.uleb128 0xe
+ 24267 0227 3A       		.uleb128 0x3a
+ 24268 0228 0B       		.uleb128 0xb
+ 24269 0229 3B       		.uleb128 0x3b
+ 24270 022a 05       		.uleb128 0x5
+ 24271 022b 49       		.uleb128 0x49
+ 24272 022c 13       		.uleb128 0x13
+ 24273 022d 1C       		.uleb128 0x1c
+ 24274 022e 0A       		.uleb128 0xa
+ 24275 022f 00       		.byte	0x0
+ 24276 0230 00       		.byte	0x0
+ 24277 0231 2D       		.uleb128 0x2d
+ 24278 0232 2E       		.uleb128 0x2e
+ 24279 0233 01       		.byte	0x1
+ 24280 0234 03       		.uleb128 0x3
+ 24281 0235 0E       		.uleb128 0xe
+ 24282 0236 3A       		.uleb128 0x3a
+ 24283 0237 0B       		.uleb128 0xb
+ 24284 0238 3B       		.uleb128 0x3b
+ 24285 0239 05       		.uleb128 0x5
+ 24286 023a 27       		.uleb128 0x27
+ 24287 023b 0C       		.uleb128 0xc
+ 24288 023c 11       		.uleb128 0x11
+ 24289 023d 01       		.uleb128 0x1
+ 24290 023e 12       		.uleb128 0x12
+ 24291 023f 01       		.uleb128 0x1
+ 24292 0240 40       		.uleb128 0x40
+ 24293 0241 06       		.uleb128 0x6
+ 24294 0242 01       		.uleb128 0x1
+ 24295 0243 13       		.uleb128 0x13
+ 24296 0244 00       		.byte	0x0
+ 24297 0245 00       		.byte	0x0
+ 24298 0246 2E       		.uleb128 0x2e
+ 24299 0247 05       		.uleb128 0x5
+ 24300 0248 00       		.byte	0x0
+ 24301 0249 03       		.uleb128 0x3
+ 24302 024a 08       		.uleb128 0x8
+ 24303 024b 3A       		.uleb128 0x3a
+ 24304 024c 0B       		.uleb128 0xb
+ 24305 024d 3B       		.uleb128 0x3b
+ 24306 024e 05       		.uleb128 0x5
+ 24307 024f 49       		.uleb128 0x49
+ 24308 0250 13       		.uleb128 0x13
+ 24309 0251 02       		.uleb128 0x2
+ 24310 0252 0A       		.uleb128 0xa
+ 24311 0253 00       		.byte	0x0
+ 24312 0254 00       		.byte	0x0
+ 24313 0255 2F       		.uleb128 0x2f
+ 24314 0256 34       		.uleb128 0x34
+ 24315 0257 00       		.byte	0x0
+ 24316 0258 03       		.uleb128 0x3
+ 24317 0259 0E       		.uleb128 0xe
+
GAS LISTING /tmp/ccPaCTqg.s 			page 604
+
+
+ 24318 025a 3A       		.uleb128 0x3a
+ 24319 025b 0B       		.uleb128 0xb
+ 24320 025c 3B       		.uleb128 0x3b
+ 24321 025d 05       		.uleb128 0x5
+ 24322 025e 49       		.uleb128 0x49
+ 24323 025f 13       		.uleb128 0x13
+ 24324 0260 02       		.uleb128 0x2
+ 24325 0261 0A       		.uleb128 0xa
+ 24326 0262 00       		.byte	0x0
+ 24327 0263 00       		.byte	0x0
+ 24328 0264 30       		.uleb128 0x30
+ 24329 0265 1D       		.uleb128 0x1d
+ 24330 0266 01       		.byte	0x1
+ 24331 0267 31       		.uleb128 0x31
+ 24332 0268 13       		.uleb128 0x13
+ 24333 0269 11       		.uleb128 0x11
+ 24334 026a 01       		.uleb128 0x1
+ 24335 026b 12       		.uleb128 0x12
+ 24336 026c 01       		.uleb128 0x1
+ 24337 026d 58       		.uleb128 0x58
+ 24338 026e 0B       		.uleb128 0xb
+ 24339 026f 59       		.uleb128 0x59
+ 24340 0270 05       		.uleb128 0x5
+ 24341 0271 01       		.uleb128 0x1
+ 24342 0272 13       		.uleb128 0x13
+ 24343 0273 00       		.byte	0x0
+ 24344 0274 00       		.byte	0x0
+ 24345 0275 31       		.uleb128 0x31
+ 24346 0276 05       		.uleb128 0x5
+ 24347 0277 00       		.byte	0x0
+ 24348 0278 31       		.uleb128 0x31
+ 24349 0279 13       		.uleb128 0x13
+ 24350 027a 02       		.uleb128 0x2
+ 24351 027b 0A       		.uleb128 0xa
+ 24352 027c 00       		.byte	0x0
+ 24353 027d 00       		.byte	0x0
+ 24354 027e 32       		.uleb128 0x32
+ 24355 027f 0B       		.uleb128 0xb
+ 24356 0280 01       		.byte	0x1
+ 24357 0281 11       		.uleb128 0x11
+ 24358 0282 01       		.uleb128 0x1
+ 24359 0283 12       		.uleb128 0x12
+ 24360 0284 01       		.uleb128 0x1
+ 24361 0285 00       		.byte	0x0
+ 24362 0286 00       		.byte	0x0
+ 24363 0287 33       		.uleb128 0x33
+ 24364 0288 34       		.uleb128 0x34
+ 24365 0289 00       		.byte	0x0
+ 24366 028a 31       		.uleb128 0x31
+ 24367 028b 13       		.uleb128 0x13
+ 24368 028c 02       		.uleb128 0x2
+ 24369 028d 0A       		.uleb128 0xa
+ 24370 028e 00       		.byte	0x0
+ 24371 028f 00       		.byte	0x0
+ 24372 0290 34       		.uleb128 0x34
+ 24373 0291 1D       		.uleb128 0x1d
+ 24374 0292 01       		.byte	0x1
+
GAS LISTING /tmp/ccPaCTqg.s 			page 605
+
+
+ 24375 0293 31       		.uleb128 0x31
+ 24376 0294 13       		.uleb128 0x13
+ 24377 0295 11       		.uleb128 0x11
+ 24378 0296 01       		.uleb128 0x1
+ 24379 0297 12       		.uleb128 0x12
+ 24380 0298 01       		.uleb128 0x1
+ 24381 0299 58       		.uleb128 0x58
+ 24382 029a 0B       		.uleb128 0xb
+ 24383 029b 59       		.uleb128 0x59
+ 24384 029c 05       		.uleb128 0x5
+ 24385 029d 00       		.byte	0x0
+ 24386 029e 00       		.byte	0x0
+ 24387 029f 35       		.uleb128 0x35
+ 24388 02a0 34       		.uleb128 0x34
+ 24389 02a1 00       		.byte	0x0
+ 24390 02a2 03       		.uleb128 0x3
+ 24391 02a3 08       		.uleb128 0x8
+ 24392 02a4 3A       		.uleb128 0x3a
+ 24393 02a5 0B       		.uleb128 0xb
+ 24394 02a6 3B       		.uleb128 0x3b
+ 24395 02a7 05       		.uleb128 0x5
+ 24396 02a8 49       		.uleb128 0x49
+ 24397 02a9 13       		.uleb128 0x13
+ 24398 02aa 02       		.uleb128 0x2
+ 24399 02ab 0A       		.uleb128 0xa
+ 24400 02ac 00       		.byte	0x0
+ 24401 02ad 00       		.byte	0x0
+ 24402 02ae 36       		.uleb128 0x36
+ 24403 02af 0B       		.uleb128 0xb
+ 24404 02b0 01       		.byte	0x1
+ 24405 02b1 01       		.uleb128 0x1
+ 24406 02b2 13       		.uleb128 0x13
+ 24407 02b3 00       		.byte	0x0
+ 24408 02b4 00       		.byte	0x0
+ 24409 02b5 37       		.uleb128 0x37
+ 24410 02b6 0B       		.uleb128 0xb
+ 24411 02b7 01       		.byte	0x1
+ 24412 02b8 00       		.byte	0x0
+ 24413 02b9 00       		.byte	0x0
+ 24414 02ba 38       		.uleb128 0x38
+ 24415 02bb 0B       		.uleb128 0xb
+ 24416 02bc 01       		.byte	0x1
+ 24417 02bd 11       		.uleb128 0x11
+ 24418 02be 01       		.uleb128 0x1
+ 24419 02bf 12       		.uleb128 0x12
+ 24420 02c0 01       		.uleb128 0x1
+ 24421 02c1 01       		.uleb128 0x1
+ 24422 02c2 13       		.uleb128 0x13
+ 24423 02c3 00       		.byte	0x0
+ 24424 02c4 00       		.byte	0x0
+ 24425 02c5 39       		.uleb128 0x39
+ 24426 02c6 2E       		.uleb128 0x2e
+ 24427 02c7 00       		.byte	0x0
+ 24428 02c8 03       		.uleb128 0x3
+ 24429 02c9 0E       		.uleb128 0xe
+ 24430 02ca 3A       		.uleb128 0x3a
+ 24431 02cb 0B       		.uleb128 0xb
+
GAS LISTING /tmp/ccPaCTqg.s 			page 606
+
+
+ 24432 02cc 3B       		.uleb128 0x3b
+ 24433 02cd 05       		.uleb128 0x5
+ 24434 02ce 49       		.uleb128 0x49
+ 24435 02cf 13       		.uleb128 0x13
+ 24436 02d0 11       		.uleb128 0x11
+ 24437 02d1 01       		.uleb128 0x1
+ 24438 02d2 12       		.uleb128 0x12
+ 24439 02d3 01       		.uleb128 0x1
+ 24440 02d4 40       		.uleb128 0x40
+ 24441 02d5 06       		.uleb128 0x6
+ 24442 02d6 00       		.byte	0x0
+ 24443 02d7 00       		.byte	0x0
+ 24444 02d8 3A       		.uleb128 0x3a
+ 24445 02d9 34       		.uleb128 0x34
+ 24446 02da 00       		.byte	0x0
+ 24447 02db 03       		.uleb128 0x3
+ 24448 02dc 0E       		.uleb128 0xe
+ 24449 02dd 49       		.uleb128 0x49
+ 24450 02de 13       		.uleb128 0x13
+ 24451 02df 34       		.uleb128 0x34
+ 24452 02e0 0C       		.uleb128 0xc
+ 24453 02e1 02       		.uleb128 0x2
+ 24454 02e2 0A       		.uleb128 0xa
+ 24455 02e3 00       		.byte	0x0
+ 24456 02e4 00       		.byte	0x0
+ 24457 02e5 3B       		.uleb128 0x3b
+ 24458 02e6 2E       		.uleb128 0x2e
+ 24459 02e7 01       		.byte	0x1
+ 24460 02e8 03       		.uleb128 0x3
+ 24461 02e9 0E       		.uleb128 0xe
+ 24462 02ea 3A       		.uleb128 0x3a
+ 24463 02eb 0B       		.uleb128 0xb
+ 24464 02ec 3B       		.uleb128 0x3b
+ 24465 02ed 05       		.uleb128 0x5
+ 24466 02ee 49       		.uleb128 0x49
+ 24467 02ef 13       		.uleb128 0x13
+ 24468 02f0 11       		.uleb128 0x11
+ 24469 02f1 01       		.uleb128 0x1
+ 24470 02f2 12       		.uleb128 0x12
+ 24471 02f3 01       		.uleb128 0x1
+ 24472 02f4 40       		.uleb128 0x40
+ 24473 02f5 06       		.uleb128 0x6
+ 24474 02f6 01       		.uleb128 0x1
+ 24475 02f7 13       		.uleb128 0x13
+ 24476 02f8 00       		.byte	0x0
+ 24477 02f9 00       		.byte	0x0
+ 24478 02fa 3C       		.uleb128 0x3c
+ 24479 02fb 2E       		.uleb128 0x2e
+ 24480 02fc 01       		.byte	0x1
+ 24481 02fd 3F       		.uleb128 0x3f
+ 24482 02fe 0C       		.uleb128 0xc
+ 24483 02ff 03       		.uleb128 0x3
+ 24484 0300 0E       		.uleb128 0xe
+ 24485 0301 3A       		.uleb128 0x3a
+ 24486 0302 0B       		.uleb128 0xb
+ 24487 0303 3B       		.uleb128 0x3b
+ 24488 0304 05       		.uleb128 0x5
+
GAS LISTING /tmp/ccPaCTqg.s 			page 607
+
+
+ 24489 0305 27       		.uleb128 0x27
+ 24490 0306 0C       		.uleb128 0xc
+ 24491 0307 49       		.uleb128 0x49
+ 24492 0308 13       		.uleb128 0x13
+ 24493 0309 11       		.uleb128 0x11
+ 24494 030a 01       		.uleb128 0x1
+ 24495 030b 12       		.uleb128 0x12
+ 24496 030c 01       		.uleb128 0x1
+ 24497 030d 40       		.uleb128 0x40
+ 24498 030e 06       		.uleb128 0x6
+ 24499 030f 01       		.uleb128 0x1
+ 24500 0310 13       		.uleb128 0x13
+ 24501 0311 00       		.byte	0x0
+ 24502 0312 00       		.byte	0x0
+ 24503 0313 3D       		.uleb128 0x3d
+ 24504 0314 34       		.uleb128 0x34
+ 24505 0315 00       		.byte	0x0
+ 24506 0316 03       		.uleb128 0x3
+ 24507 0317 0E       		.uleb128 0xe
+ 24508 0318 3A       		.uleb128 0x3a
+ 24509 0319 0B       		.uleb128 0xb
+ 24510 031a 3B       		.uleb128 0x3b
+ 24511 031b 0B       		.uleb128 0xb
+ 24512 031c 49       		.uleb128 0x49
+ 24513 031d 13       		.uleb128 0x13
+ 24514 031e 02       		.uleb128 0x2
+ 24515 031f 0A       		.uleb128 0xa
+ 24516 0320 00       		.byte	0x0
+ 24517 0321 00       		.byte	0x0
+ 24518 0322 00       		.byte	0x0
+ 24519              		.section	.debug_pubnames,"", at progbits
+ 24520 0000 2E000000 		.long	0x2e
+ 24521 0004 0200     		.value	0x2
+ 24522 0006 00000000 		.long	.Ldebug_info0
+ 24523 000a A88F0000 		.long	0x8fa8
+ 24524 000e 8D8D0000 		.long	0x8d8d
+ 24525 0012 4B414553 		.string	"KAESBlockCipherVecAesNiMake"
+ 24525      426C6F63 
+ 24525      6B436970 
+ 24525      68657256 
+ 24525      65634165 
+ 24526 002e 00000000 		.long	0x0
+ 24527              		.section	.debug_aranges,"", at progbits
+ 24528 0000 2C000000 		.long	0x2c
+ 24529 0004 0200     		.value	0x2
+ 24530 0006 00000000 		.long	.Ldebug_info0
+ 24531 000a 08       		.byte	0x8
+ 24532 000b 00       		.byte	0x0
+ 24533 000c 0000     		.value	0x0
+ 24534 000e 0000     		.value	0x0
+ 24535 0010 00000000 		.quad	.Ltext0
+ 24535      00000000 
+ 24536 0018 1F770000 		.quad	.Letext0-.Ltext0
+ 24536      00000000 
+ 24537 0020 00000000 		.quad	0x0
+ 24537      00000000 
+ 24538 0028 00000000 		.quad	0x0
+
GAS LISTING /tmp/ccPaCTqg.s 			page 608
+
+
+ 24538      00000000 
+ 24539              		.section	.debug_str,"MS", at progbits,1
+ 24540              	.LASF67:
+ 24541 0000 43697068 		.string	"CipherVec_AES_u"
+ 24541      65725665 
+ 24541      635F4145 
+ 24541      535F7500 
+ 24542              	.LASF285:
+ 24543 0010 7263496E 		.string	"rcInsufficient"
+ 24543      73756666 
+ 24543      69636965 
+ 24543      6E7400
+ 24544              	.LASF302:
+ 24545 001f 72634475 		.string	"rcDuplicate"
+ 24545      706C6963 
+ 24545      61746500 
+ 24546              	.LASF105:
+ 24547 002b 7263436F 		.string	"rcCondition"
+ 24547      6E646974 
+ 24547      696F6E00 
+ 24548              	.LASF219:
+ 24549 0037 7263456E 		.string	"rcEncrypting"
+ 24549      63727970 
+ 24549      74696E67 
+ 24549      00
+ 24550              	.LASF178:
+ 24551 0044 72634F70 		.string	"rcOpening"
+ 24551      656E696E 
+ 24551      6700
+ 24552              	.LASF186:
+ 24553 004e 72635065 		.string	"rcPersisting"
+ 24553      72736973 
+ 24553      74696E67 
+ 24553      00
+ 24554              	.LASF364:
+ 24555 005b 4B414553 		.string	"KAESBlockCipherVecAesNiEqInvFirstRound"
+ 24555      426C6F63 
+ 24555      6B436970 
+ 24555      68657256 
+ 24555      65634165 
+ 24556              	.LASF224:
+ 24557 0082 72635365 		.string	"rcSending"
+ 24557      6E64696E 
+ 24557      6700
+ 24558              	.LASF218:
+ 24559 008c 72634170 		.string	"rcAppending"
+ 24559      70656E64 
+ 24559      696E6700 
+ 24560              	.LASF204:
+ 24561 0098 72635369 		.string	"rcSignaling"
+ 24561      676E616C 
+ 24561      696E6700 
+ 24562              	.LASF20:
+ 24563 00a4 4442475F 		.string	"DBG_BLAST"
+ 24563      424C4153 
+ 24563      5400
+ 24564              	.LASF260:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 609
+
+
+ 24565 00ae 72635369 		.string	"rcSignalSet"
+ 24565      676E616C 
+ 24565      53657400 
+ 24566              	.LASF206:
+ 24567 00ba 72634174 		.string	"rcAttaching"
+ 24567      74616368 
+ 24567      696E6700 
+ 24568              	.LASF138:
+ 24569 00c6 72635461 		.string	"rcTable"
+ 24569      626C6500 
+ 24570              	.LASF393:
+ 24571 00ce 6C6F5F66 		.string	"lo_filter"
+ 24571      696C7465 
+ 24571      7200
+ 24572              	.LASF102:
+ 24573 00d8 72634275 		.string	"rcBuffer"
+ 24573      66666572 
+ 24573      00
+ 24574              	.LASF3:
+ 24575 00e1 696E7433 		.string	"int32_t"
+ 24575      325F7400 
+ 24576              	.LASF234:
+ 24577 00e9 72634D65 		.string	"rcMemory"
+ 24577      6D6F7279 
+ 24577      00
+ 24578              	.LASF365:
+ 24579 00f2 4B414553 		.string	"KAESBlockCipherVecAesNiEqInvMiddleRound"
+ 24579      426C6F63 
+ 24579      6B436970 
+ 24579      68657256 
+ 24579      65634165 
+ 24580              	.LASF167:
+ 24581 011a 72634C6F 		.string	"rcLocking"
+ 24581      636B696E 
+ 24581      6700
+ 24582              	.LASF202:
+ 24583 0124 72635061 		.string	"rcParsing"
+ 24583      7273696E 
+ 24583      6700
+ 24584              	.LASF231:
+ 24585 012e 72635365 		.string	"rcSelf"
+ 24585      6C6600
+ 24586              	.LASF124:
+ 24587 0135 72634D65 		.string	"rcMetadata"
+ 24587      74616461 
+ 24587      746100
+ 24588              	.LASF247:
+ 24589 0140 72634172 		.string	"rcArcHardLink"
+ 24589      63486172 
+ 24589      644C696E 
+ 24589      6B00
+ 24590              	.LASF73:
+ 24591 014e 7263436F 		.string	"rcCont"
+ 24591      6E7400
+ 24592              	.LASF255:
+ 24593 0155 72634368 		.string	"rcChecksum"
+ 24593      65636B73 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 610
+
+
+ 24593      756D00
+ 24594              	.LASF377:
+ 24595 0160 5F5F6675 		.string	"__func__"
+ 24595      6E635F5F 
+ 24595      00
+ 24596              	.LASF299:
+ 24597 0169 7263546F 		.string	"rcTooShort"
+ 24597      6F53686F 
+ 24597      727400
+ 24598              	.LASF129:
+ 24599 0174 72635061 		.string	"rcPagemap"
+ 24599      67656D61 
+ 24599      7000
+ 24600              	.LASF354:
+ 24601 017e 4B414553 		.string	"KAESBlockCipherVecAesNiEqInvKeyExpansion128"
+ 24601      426C6F63 
+ 24601      6B436970 
+ 24601      68657256 
+ 24601      65634165 
+ 24602              	.LASF81:
+ 24603 01aa 72634170 		.string	"rcApp"
+ 24603      7000
+ 24604              	.LASF112:
+ 24605 01b0 72634669 		.string	"rcFileDesc"
+ 24605      6C654465 
+ 24605      736300
+ 24606              	.LASF251:
+ 24607 01bb 72634974 		.string	"rcItem"
+ 24607      656D00
+ 24608              	.LASF143:
+ 24609 01c2 72635472 		.string	"rcTrie"
+ 24609      696500
+ 24610              	.LASF84:
+ 24611 01c9 72634C61 		.string	"rcLastModule_v1_0"
+ 24611      73744D6F 
+ 24611      64756C65 
+ 24611      5F76315F 
+ 24611      3000
+ 24612              	.LASF63:
+ 24613 01db 73746174 		.string	"state"
+ 24613      6500
+ 24614              	.LASF242:
+ 24615 01e1 72634279 		.string	"rcByteOrder"
+ 24615      74654F72 
+ 24615      64657200 
+ 24616              	.LASF60:
+ 24617 01ed 4145534B 		.string	"AESKeySchedule"
+ 24617      65795363 
+ 24617      68656475 
+ 24617      6C6500
+ 24618              	.LASF61:
+ 24619 01fc 726F756E 		.string	"round_keys"
+ 24619      645F6B65 
+ 24619      797300
+ 24620              	.LASF160:
+ 24621 0207 7263436F 		.string	"rcConstructing"
+ 24621      6E737472 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 611
+
+
+ 24621      75637469 
+ 24621      6E6700
+ 24622              	.LASF376:
+ 24623 0216 5F5F5052 		.string	"__PRETTY_FUNCTION__"
+ 24623      45545459 
+ 24623      5F46554E 
+ 24623      4354494F 
+ 24623      4E5F5F00 
+ 24624              	.LASF11:
+ 24625 022a 72635F74 		.string	"rc_t"
+ 24625      00
+ 24626              	.LASF236:
+ 24627 022f 7263466F 		.string	"rcFormat"
+ 24627      726D6174 
+ 24627      00
+ 24628              	.LASF319:
+ 24629 0238 6F705F41 		.string	"op_AESDEC"
+ 24629      45534445 
+ 24629      4300
+ 24630              	.LASF294:
+ 24631 0242 7263556E 		.string	"rcUnauthorized"
+ 24631      61757468 
+ 24631      6F72697A 
+ 24631      656400
+ 24632              	.LASF174:
+ 24633 0251 72635265 		.string	"rcRemoving"
+ 24633      6D6F7669 
+ 24633      6E6700
+ 24634              	.LASF87:
+ 24635 025c 72634B72 		.string	"rcKrypto"
+ 24635      7970746F 
+ 24635      00
+ 24636              	.LASF165:
+ 24637 0265 72635669 		.string	"rcVisiting"
+ 24637      73697469 
+ 24637      6E6700
+ 24638              	.LASF95:
+ 24639 0270 72634172 		.string	"rcArc"
+ 24639      6300
+ 24640              	.LASF70:
+ 24641 0276 72634578 		.string	"rcExe"
+ 24641      6500
+ 24642              	.LASF300:
+ 24643 027c 7263546F 		.string	"rcTooLong"
+ 24643      6F4C6F6E 
+ 24643      6700
+ 24644              	.LASF328:
+ 24645 0286 6F705F50 		.string	"op_PSHUFD128"
+ 24645      53485546 
+ 24645      44313238 
+ 24645      00
+ 24646              	.LASF228:
+ 24647 0293 52434F62 		.string	"RCObject"
+ 24647      6A656374 
+ 24647      00
+ 24648              	.LASF391:
+ 24649 029c 4B414553 		.string	"KAESBlockCipherVecAesNiRijndaelSBoxV"
+
GAS LISTING /tmp/ccPaCTqg.s 			page 612
+
+
+ 24649      426C6F63 
+ 24649      6B436970 
+ 24649      68657256 
+ 24649      65634165 
+ 24650              	.LASF238:
+ 24651 02c1 7263496E 		.string	"rcInterface"
+ 24651      74657266 
+ 24651      61636500 
+ 24652              	.LASF166:
+ 24653 02cd 72635265 		.string	"rcResolving"
+ 24653      736F6C76 
+ 24653      696E6700 
+ 24654              	.LASF108:
+ 24655 02d9 72634469 		.string	"rcDirectory"
+ 24655      72656374 
+ 24655      6F727900 
+ 24656              	.LASF2:
+ 24657 02e5 6C6F6E67 		.string	"long int"
+ 24657      20696E74 
+ 24657      00
+ 24658              	.LASF59:
+ 24659 02ee 41455357 		.string	"AESWord"
+ 24659      6F726400 
+ 24660              	.LASF196:
+ 24661 02f6 72635661 		.string	"rcValidating"
+ 24661      6C696461 
+ 24661      74696E67 
+ 24661      00
+ 24662              	.LASF98:
+ 24663 0303 72634172 		.string	"rcArgv"
+ 24663      677600
+ 24664              	.LASF353:
+ 24665 030a 4B414553 		.string	"KAESBlockCipherVecAesNiEqInvKeyExpansion"
+ 24665      426C6F63 
+ 24665      6B436970 
+ 24665      68657256 
+ 24665      65634165 
+ 24666              	.LASF74:
+ 24667 0333 72634353 		.string	"rcCS"
+ 24667      00
+ 24668              	.LASF390:
+ 24669 0338 4B414553 		.string	"KAESBlockCipherVecAesNiRijndaelSBox"
+ 24669      426C6F63 
+ 24669      6B436970 
+ 24669      68657256 
+ 24669      65634165 
+ 24670              	.LASF155:
+ 24671 035c 72635572 		.string	"rcUri"
+ 24671      6900
+ 24672              	.LASF177:
+ 24673 0362 72634372 		.string	"rcCreating"
+ 24673      65617469 
+ 24673      6E6700
+ 24674              	.LASF337:
+ 24675 036d 6B676173 		.string	"kgastate"
+ 24675      74617465 
+ 24675      00
+
GAS LISTING /tmp/ccPaCTqg.s 			page 613
+
+
+ 24676              	.LASF53:
+ 24677 0376 656E6372 		.string	"encrypt"
+ 24677      79707400 
+ 24678              	.LASF17:
+ 24679 037e 76313238 		.string	"v128_u8_t"
+ 24679      5F75385F 
+ 24679      7400
+ 24680              	.LASF25:
+ 24681 0388 4442475F 		.string	"DBG_XML"
+ 24681      584D4C00 
+ 24682              	.LASF331:
+ 24683 0390 73686966 		.string	"shift"
+ 24683      7400
+ 24684              	.LASF37:
+ 24685 0396 4442475F 		.string	"DBG_MOD_COUNT"
+ 24685      4D4F445F 
+ 24685      434F554E 
+ 24685      5400
+ 24686              	.LASF79:
+ 24687 03a4 72634442 		.string	"rcDB"
+ 24687      00
+ 24688              	.LASF257:
+ 24689 03a9 7263436F 		.string	"rcConnection"
+ 24689      6E6E6563 
+ 24689      74696F6E 
+ 24689      00
+ 24690              	.LASF125:
+ 24691 03b6 72634D67 		.string	"rcMgr"
+ 24691      7200
+ 24692              	.LASF287:
+ 24693 03bc 72635669 		.string	"rcViolated"
+ 24693      6F6C6174 
+ 24693      656400
+ 24694              	.LASF220:
+ 24695 03c7 72634465 		.string	"rcDecrypting"
+ 24695      63727970 
+ 24695      74696E67 
+ 24695      00
+ 24696              	.LASF380:
+ 24697 03d4 4B414553 		.string	"KAESBlockCipherVecAesNiEncrypt"
+ 24697      426C6F63 
+ 24697      6B436970 
+ 24697      68657256 
+ 24697      65634165 
+ 24698              	.LASF0:
+ 24699 03f3 7369676E 		.string	"signed char"
+ 24699      65642063 
+ 24699      68617200 
+ 24700              	.LASF4:
+ 24701 03ff 75696E74 		.string	"uint8_t"
+ 24701      385F7400 
+ 24702              	.LASF103:
+ 24703 0407 72634368 		.string	"rcChar"
+ 24703      617200
+ 24704              	.LASF88:
+ 24705 040e 72635244 		.string	"rcRDBMS"
+ 24705      424D5300 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 614
+
+
+ 24706              	.LASF197:
+ 24707 0416 72634578 		.string	"rcExecuting"
+ 24707      65637574 
+ 24707      696E6700 
+ 24708              	.LASF330:
+ 24709 0422 4B414553 		.string	"KAESBlockCipherVecAesNiShiftXorColumns"
+ 24709      426C6F63 
+ 24709      6B436970 
+ 24709      68657256 
+ 24709      65634165 
+ 24710              	.LASF18:
+ 24711 0449 4442475F 		.string	"DBG_MOD_NOT_FOUND"
+ 24711      4D4F445F 
+ 24711      4E4F545F 
+ 24711      464F554E 
+ 24711      4400
+ 24712              	.LASF184:
+ 24713 045b 72635265 		.string	"rcReverting"
+ 24713      76657274 
+ 24713      696E6700 
+ 24714              	.LASF100:
+ 24715 0467 72634261 		.string	"rcBarrier"
+ 24715      72726965 
+ 24715      7200
+ 24716              	.LASF284:
+ 24717 0471 72634578 		.string	"rcExhausted"
+ 24717      68617573 
+ 24717      74656400 
+ 24718              	.LASF5:
+ 24719 047d 756E7369 		.string	"unsigned char"
+ 24719      676E6564 
+ 24719      20636861 
+ 24719      7200
+ 24720              	.LASF157:
+ 24721 048b 5243436F 		.string	"RCContext"
+ 24721      6E746578 
+ 24721      7400
+ 24722              	.LASF120:
+ 24723 0495 72634C6F 		.string	"rcLock"
+ 24723      636B00
+ 24724              	.LASF273:
+ 24725 049c 72634261 		.string	"rcBadVersion"
+ 24725      64566572 
+ 24725      73696F6E 
+ 24725      00
+ 24726              	.LASF274:
+ 24727 04a9 72634465 		.string	"rcDestroyed"
+ 24727      7374726F 
+ 24727      79656400 
+ 24728              	.LASF137:
+ 24729 04b5 72635374 		.string	"rcString"
+ 24729      72696E67 
+ 24729      00
+ 24730              	.LASF99:
+ 24731 04be 72634174 		.string	"rcAttr"
+ 24731      747200
+ 24732              	.LASF121:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 615
+
+
+ 24733 04c5 72634C6F 		.string	"rcLog"
+ 24733      6700
+ 24734              	.LASF385:
+ 24735 04cb 6E65775F 		.string	"new_obj"
+ 24735      6F626A00 
+ 24736              	.LASF21:
+ 24737 04d3 4442475F 		.string	"DBG_KDB"
+ 24737      4B444200 
+ 24738              	.LASF225:
+ 24739 04db 72635072 		.string	"rcProcessing"
+ 24739      6F636573 
+ 24739      73696E67 
+ 24739      00
+ 24740              	.LASF75:
+ 24741 04e8 72634646 		.string	"rcFF"
+ 24741      00
+ 24742              	.LASF384:
+ 24743 04ed 5F426F6F 		.string	"_Bool"
+ 24743      6C00
+ 24744              	.LASF76:
+ 24745 04f3 72634653 		.string	"rcFS"
+ 24745      00
+ 24746              	.LASF65:
+ 24747 04f8 62797465 		.string	"bytes"
+ 24747      7300
+ 24748              	.LASF372:
+ 24749 04fe 4B414553 		.string	"KAESBlockCipherVecAesNiSetEncryptKey"
+ 24749      426C6F63 
+ 24749      6B436970 
+ 24749      68657256 
+ 24749      65634165 
+ 24750              	.LASF163:
+ 24751 0523 72634163 		.string	"rcAccessing"
+ 24751      63657373 
+ 24751      696E6700 
+ 24752              	.LASF281:
+ 24753 052f 7263496E 		.string	"rcInterrupted"
+ 24753      74657272 
+ 24753      75707465 
+ 24753      6400
+ 24754              	.LASF289:
+ 24755 053d 72634E6F 		.string	"rcNotFound"
+ 24755      74466F75 
+ 24755      6E6400
+ 24756              	.LASF12:
+ 24757 0548 63686172 		.string	"char"
+ 24757      00
+ 24758              	.LASF371:
+ 24759 054d 4B414553 		.string	"KAESBlockCipherVecAesNiKeySize"
+ 24759      426C6F63 
+ 24759      6B436970 
+ 24759      68657256 
+ 24759      65634165 
+ 24760              	.LASF339:
+ 24761 056c 4B414553 		.string	"KAESBlockCipherVecAesNiAesKeyGenAssistColumn1"
+ 24761      426C6F63 
+ 24761      6B436970 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 616
+
+
+ 24761      68657256 
+ 24761      65634165 
+ 24762              	.LASF127:
+ 24763 059a 72634E6F 		.string	"rcNode"
+ 24763      646500
+ 24764              	.LASF324:
+ 24765 05a1 4B414553 		.string	"KAESBlockCipherVecAesNiAesKeyGenAssistColumn3"
+ 24765      426C6F63 
+ 24765      6B436970 
+ 24765      68657256 
+ 24765      65634165 
+ 24766              	.LASF35:
+ 24767 05cf 4442475F 		.string	"DBG_AES"
+ 24767      41455300 
+ 24768              	.LASF258:
+ 24769 05d7 72634572 		.string	"rcError"
+ 24769      726F7200 
+ 24770              	.LASF344:
+ 24771 05df 76696E32 		.string	"vin2"
+ 24771      00
+ 24772              	.LASF175:
+ 24773 05e4 7263436C 		.string	"rcClearing"
+ 24773      65617269 
+ 24773      6E6700
+ 24774              	.LASF233:
+ 24775 05ef 72634F66 		.string	"rcOffset"
+ 24775      66736574 
+ 24775      00
+ 24776              	.LASF179:
+ 24777 05f8 7263436C 		.string	"rcClosing"
+ 24777      6F73696E 
+ 24777      6700
+ 24778              	.LASF111:
+ 24779 0602 72634669 		.string	"rcFile"
+ 24779      6C6500
+ 24780              	.LASF140:
+ 24781 0609 72635469 		.string	"rcTimeout"
+ 24781      6D656F75 
+ 24781      7400
+ 24782              	.LASF355:
+ 24783 0613 4B414553 		.string	"KAESBlockCipherVecAesNiEqInvKeyExpansion192"
+ 24783      426C6F63 
+ 24783      6B436970 
+ 24783      68657256 
+ 24783      65634165 
+ 24784              	.LASF128:
+ 24785 063f 72634E75 		.string	"rcNumeral"
+ 24785      6D657261 
+ 24785      6C00
+ 24786              	.LASF205:
+ 24787 0649 72635761 		.string	"rcWaiting"
+ 24787      6974696E 
+ 24787      6700
+ 24788              	.LASF316:
+ 24789 0653 726F756E 		.string	"round_key"
+ 24789      645F6B65 
+ 24789      7900
+
GAS LISTING /tmp/ccPaCTqg.s 			page 617
+
+
+ 24790              	.LASF209:
+ 24791 065d 72634650 		.string	"rcFPCoding"
+ 24791      436F6469 
+ 24791      6E6700
+ 24792              	.LASF357:
+ 24793 0668 4B414553 		.string	"KAESBlockCipherVecAesNiFirstRound"
+ 24793      426C6F63 
+ 24793      6B436970 
+ 24793      68657256 
+ 24793      65634165 
+ 24794              	.LASF366:
+ 24795 068a 4B414553 		.string	"KAESBlockCipherVecAesNiEqInvLastRound"
+ 24795      426C6F63 
+ 24795      6B436970 
+ 24795      68657256 
+ 24795      65634165 
+ 24796              	.LASF261:
+ 24797 06b0 72635369 		.string	"rcSize"
+ 24797      7A6500
+ 24798              	.LASF246:
+ 24799 06b7 72634469 		.string	"rcDirEntry"
+ 24799      72456E74 
+ 24799      727900
+ 24800              	.LASF198:
+ 24801 06c2 72634875 		.string	"rcHuffmanCoding"
+ 24801      66666D61 
+ 24801      6E436F64 
+ 24801      696E6700 
+ 24802              	.LASF30:
+ 24803 06d2 4442475F 		.string	"DBG_KFG"
+ 24803      4B464700 
+ 24804              	.LASF64:
+ 24805 06da 636F6C75 		.string	"columns"
+ 24805      6D6E7300 
+ 24806              	.LASF279:
+ 24807 06e2 72634275 		.string	"rcBusy"
+ 24807      737900
+ 24808              	.LASF27:
+ 24809 06e9 4442475F 		.string	"DBG_SRA"
+ 24809      53524100 
+ 24810              	.LASF237:
+ 24811 06f1 72635472 		.string	"rcTransfer"
+ 24811      616E7366 
+ 24811      657200
+ 24812              	.LASF24:
+ 24813 06fc 4442475F 		.string	"DBG_KFS"
+ 24813      4B465300 
+ 24814              	.LASF367:
+ 24815 0704 4B414553 		.string	"KAESBlockCipherVecAesNiEqInvCipher"
+ 24815      426C6F63 
+ 24815      6B436970 
+ 24815      68657256 
+ 24815      65634165 
+ 24816              	.LASF192:
+ 24817 0727 72635061 		.string	"rcPacking"
+ 24817      636B696E 
+ 24817      6700
+
GAS LISTING /tmp/ccPaCTqg.s 			page 618
+
+
+ 24818              	.LASF188:
+ 24819 0731 7263436F 		.string	"rcCopying"
+ 24819      7079696E 
+ 24819      6700
+ 24820              	.LASF333:
+ 24821 073b 4B414553 		.string	"KAESBlockCipherVecAesNiPackShuffleBytes"
+ 24821      426C6F63 
+ 24821      6B436970 
+ 24821      68657256 
+ 24821      65634165 
+ 24822              	.LASF335:
+ 24823 0763 6F705F50 		.string	"op_PSHUFB128"
+ 24823      53485546 
+ 24823      42313238 
+ 24823      00
+ 24824              	.LASF195:
+ 24825 0770 72634465 		.string	"rcDecoding"
+ 24825      636F6469 
+ 24825      6E6700
+ 24826              	.LASF168:
+ 24827 077b 7263556E 		.string	"rcUnlocking"
+ 24827      6C6F636B 
+ 24827      696E6700 
+ 24828              	.LASF56:
+ 24829 0787 4B426C6F 		.string	"KBlockCipherVec_vt_v1"
+ 24829      636B4369 
+ 24829      70686572 
+ 24829      5665635F 
+ 24829      76745F76 
+ 24830              	.LASF23:
+ 24831 079d 4442475F 		.string	"DBG_LEGREF"
+ 24831      4C454752 
+ 24831      454600
+ 24832              	.LASF169:
+ 24833 07a8 72635265 		.string	"rcRenaming"
+ 24833      6E616D69 
+ 24833      6E6700
+ 24834              	.LASF374:
+ 24835 07b3 75736572 		.string	"user_key"
+ 24835      5F6B6579 
+ 24835      00
+ 24836              	.LASF239:
+ 24837 07bc 72634964 		.string	"rcId"
+ 24837      00
+ 24838              	.LASF152:
+ 24839 07c1 7263436D 		.string	"rcCmd"
+ 24839      6400
+ 24840              	.LASF321:
+ 24841 07c7 6F705F41 		.string	"op_AESIMC"
+ 24841      4553494D 
+ 24841      4300
+ 24842              	.LASF33:
+ 24843 07d1 4442475F 		.string	"DBG_LOADLIB"
+ 24843      4C4F4144 
+ 24843      4C494200 
+ 24844              	.LASF291:
+ 24845 07dd 7263556E 		.string	"rcUnlocked"
+
GAS LISTING /tmp/ccPaCTqg.s 			page 619
+
+
+ 24845      6C6F636B 
+ 24845      656400
+ 24846              	.LASF92:
+ 24847 07e8 52434D6F 		.string	"RCModule"
+ 24847      64756C65 
+ 24847      00
+ 24848              	.LASF253:
+ 24849 07f1 7263456E 		.string	"rcEncryption"
+ 24849      63727970 
+ 24849      74696F6E 
+ 24849      00
+ 24850              	.LASF288:
+ 24851 07fe 72634578 		.string	"rcExists"
+ 24851      69737473 
+ 24851      00
+ 24852              	.LASF44:
+ 24853 0807 43697068 		.string	"CipherVec"
+ 24853      65725665 
+ 24853      6300
+ 24854              	.LASF307:
+ 24855 0811 72634F70 		.string	"rcOpen"
+ 24855      656E00
+ 24856              	.LASF293:
+ 24857 0818 72634465 		.string	"rcDeadlock"
+ 24857      61646C6F 
+ 24857      636B00
+ 24858              	.LASF230:
+ 24859 0823 72634C69 		.string	"rcLink"
+ 24859      6E6B00
+ 24860              	.LASF217:
+ 24861 082a 7263466C 		.string	"rcFlushing"
+ 24861      75736869 
+ 24861      6E6700
+ 24862              	.LASF265:
+ 24863 0835 72634E6F 		.string	"rcNoErr"
+ 24863      45727200 
+ 24864              	.LASF386:
+ 24865 083d 7665635F 		.string	"vec_00"
+ 24865      303000
+ 24866              	.LASF387:
+ 24867 0844 7665635F 		.string	"vec_01"
+ 24867      303100
+ 24868              	.LASF244:
+ 24869 084b 72635461 		.string	"rcTag"
+ 24869      6700
+ 24870              	.LASF29:
+ 24871 0851 4442475F 		.string	"DBG_ALIGN"
+ 24871      414C4947 
+ 24871      4E00
+ 24872              	.LASF208:
+ 24873 085b 72634C6F 		.string	"rcLogging"
+ 24873      6767696E 
+ 24873      6700
+ 24874              	.LASF301:
+ 24875 0865 7263546F 		.string	"rcTooBig"
+ 24875      6F426967 
+ 24875      00
+
GAS LISTING /tmp/ccPaCTqg.s 			page 620
+
+
+ 24876              	.LASF145:
+ 24877 086e 72635665 		.string	"rcVector"
+ 24877      63746F72 
+ 24877      00
+ 24878              	.LASF180:
+ 24879 0877 72635265 		.string	"rcResizing"
+ 24879      73697A69 
+ 24879      6E6700
+ 24880              	.LASF154:
+ 24881 0882 72635175 		.string	"rcQuery"
+ 24881      65727900 
+ 24882              	.LASF10:
+ 24883 088a 6C6F6E67 		.string	"long unsigned int"
+ 24883      20756E73 
+ 24883      69676E65 
+ 24883      6420696E 
+ 24883      7400
+ 24884              	.LASF286:
+ 24885 089c 72634578 		.string	"rcExcessive"
+ 24885      63657373 
+ 24885      69766500 
+ 24886              	.LASF214:
+ 24887 08a8 72634576 		.string	"rcEvaluating"
+ 24887      616C7561 
+ 24887      74696E67 
+ 24887      00
+ 24888              	.LASF151:
+ 24889 08b5 7263526E 		.string	"rcRng"
+ 24889      6700
+ 24890              	.LASF159:
+ 24891 08bb 72634361 		.string	"rcCasting"
+ 24891      7374696E 
+ 24891      6700
+ 24892              	.LASF369:
+ 24893 08c5 73656C66 		.string	"self"
+ 24893      00
+ 24894              	.LASF119:
+ 24895 08ca 72634974 		.string	"rcIterator"
+ 24895      65726174 
+ 24895      6F7200
+ 24896              	.LASF57:
+ 24897 08d5 4B426C6F 		.string	"KBlockCipherVec"
+ 24897      636B4369 
+ 24897      70686572 
+ 24897      56656300 
+ 24898              	.LASF389:
+ 24899 08e5 7665635F 		.string	"vec_10"
+ 24899      313000
+ 24900              	.LASF342:
+ 24901 08ec 6F705F53 		.string	"op_SHUFPD"
+ 24901      48554650 
+ 24901      4400
+ 24902              	.LASF397:
+ 24903 08f6 4B414553 		.string	"KAESBlockCipherVecAesNiaes_ncbi_name"
+ 24903      426C6F63 
+ 24903      6B436970 
+ 24903      68657256 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 621
+
+
+ 24903      65634165 
+ 24904              	.LASF136:
+ 24905 091b 72635374 		.string	"rcStorage"
+ 24905      6F726167 
+ 24905      6500
+ 24906              	.LASF378:
+ 24907 0925 4B414553 		.string	"KAESBlockCipherVecAesNiSetDecryptKey"
+ 24907      426C6F63 
+ 24907      6B436970 
+ 24907      68657256 
+ 24907      65634165 
+ 24908              	.LASF338:
+ 24909 094a 4B414553 		.string	"KAESBlockCipherVecAesNiStateShiftRight64"
+ 24909      426C6F63 
+ 24909      6B436970 
+ 24909      68657256 
+ 24909      65634165 
+ 24910              	.LASF303:
+ 24911 0973 72634F75 		.string	"rcOutOfKDirectory"
+ 24911      744F664B 
+ 24911      44697265 
+ 24911      63746F72 
+ 24911      7900
+ 24912              	.LASF248:
+ 24913 0985 7263526F 		.string	"rcRow"
+ 24913      7700
+ 24914              	.LASF26:
+ 24915 098b 4442475F 		.string	"DBG_VDB"
+ 24915      56444200 
+ 24916              	.LASF148:
+ 24917 0993 72634C61 		.string	"rcLastTarget_v1_0"
+ 24917      73745461 
+ 24917      72676574 
+ 24917      5F76315F 
+ 24917      3000
+ 24918              	.LASF156:
+ 24919 09a5 72634C61 		.string	"rcLastTarget_v1_1"
+ 24919      73745461 
+ 24919      72676574 
+ 24919      5F76315F 
+ 24919      3100
+ 24920              	.LASF135:
+ 24921 09b7 72635365 		.string	"rcSemaphore"
+ 24921      6D617068 
+ 24921      6F726500 
+ 24922              	.LASF318:
+ 24923 09c3 6F705F41 		.string	"op_AESENCLAST"
+ 24923      4553454E 
+ 24923      434C4153 
+ 24923      5400
+ 24924              	.LASF280:
+ 24925 09d1 7263496E 		.string	"rcIncomplete"
+ 24925      636F6D70 
+ 24925      6C657465 
+ 24925      00
+ 24926              	.LASF309:
+ 24927 09de 72634E6F 		.string	"rcNotOpen"
+
GAS LISTING /tmp/ccPaCTqg.s 			page 622
+
+
+ 24927      744F7065 
+ 24927      6E00
+ 24928              	.LASF118:
+ 24929 09e8 7263496E 		.string	"rcIndex"
+ 24929      64657800 
+ 24930              	.LASF28:
+ 24931 09f0 4442475F 		.string	"DBG_XARC"
+ 24931      58415243 
+ 24931      00
+ 24932              	.LASF399:
+ 24933 09f9 474E5520 		.string	"GNU C 4.4.2"
+ 24933      4320342E 
+ 24933      342E3200 
+ 24934              	.LASF71:
+ 24935 0a05 72635275 		.string	"rcRuntime"
+ 24935      6E74696D 
+ 24935      6500
+ 24936              	.LASF110:
+ 24937 0a0f 7263586D 		.string	"rcXmlDoc"
+ 24937      6C446F63 
+ 24937      00
+ 24938              	.LASF13:
+ 24939 0a18 6C6F6E67 		.string	"long long int"
+ 24939      206C6F6E 
+ 24939      6720696E 
+ 24939      7400
+ 24940              	.LASF191:
+ 24941 0a26 7263506F 		.string	"rcPositioning"
+ 24941      73697469 
+ 24941      6F6E696E 
+ 24941      6700
+ 24942              	.LASF359:
+ 24943 0a34 4B414553 		.string	"KAESBlockCipherVecAesNiMiddleRound"
+ 24943      426C6F63 
+ 24943      6B436970 
+ 24943      68657256 
+ 24943      65634165 
+ 24944              	.LASF132:
+ 24945 0a57 72635175 		.string	"rcQueue"
+ 24945      65756500 
+ 24946              	.LASF207:
+ 24947 0a5f 72634465 		.string	"rcDetaching"
+ 24947      74616368 
+ 24947      696E6700 
+ 24948              	.LASF122:
+ 24949 0a6b 72634D44 		.string	"rcMD5SumFmt"
+ 24949      3553756D 
+ 24949      466D7400 
+ 24950              	.LASF173:
+ 24951 0a77 7263496E 		.string	"rcInserting"
+ 24951      73657274 
+ 24951      696E6700 
+ 24952              	.LASF221:
+ 24953 0a83 7263436F 		.string	"rcComparing"
+ 24953      6D706172 
+ 24953      696E6700 
+ 24954              	.LASF283:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 623
+
+
+ 24955 0a8f 7263456D 		.string	"rcEmpty"
+ 24955      70747900 
+ 24956              	.LASF115:
+ 24957 0a97 7263466F 		.string	"rcFormatter"
+ 24957      726D6174 
+ 24957      74657200 
+ 24958              	.LASF361:
+ 24959 0aa3 6D726F75 		.string	"mround_keys"
+ 24959      6E645F6B 
+ 24959      65797300 
+ 24960              	.LASF16:
+ 24961 0aaf 646F7562 		.string	"double"
+ 24961      6C6500
+ 24962              	.LASF200:
+ 24963 0ab6 72635265 		.string	"rcRegistering"
+ 24963      67697374 
+ 24963      6572696E 
+ 24963      6700
+ 24964              	.LASF89:
+ 24965 0ac4 72634E53 		.string	"rcNS"
+ 24965      00
+ 24966              	.LASF232:
+ 24967 0ac9 72635061 		.string	"rcParam"
+ 24967      72616D00 
+ 24968              	.LASF93:
+ 24969 0ad1 52435461 		.string	"RCTarget"
+ 24969      72676574 
+ 24969      00
+ 24970              	.LASF326:
+ 24971 0ada 6F705F41 		.string	"op_AESKEYGENASSIST"
+ 24971      45534B45 
+ 24971      5947454E 
+ 24971      41535349 
+ 24971      535400
+ 24972              	.LASF42:
+ 24973 0aed 4442475F 		.string	"DBG_AES_OBJECT"
+ 24973      4145535F 
+ 24973      4F424A45 
+ 24973      435400
+ 24974              	.LASF329:
+ 24975 0afc 6D61736B 		.string	"mask"
+ 24975      00
+ 24976              	.LASF254:
+ 24977 0b01 72634372 		.string	"rcCrc"
+ 24977      6300
+ 24978              	.LASF322:
+ 24979 0b07 62737761 		.string	"bswap_32"
+ 24979      705F3332 
+ 24979      00
+ 24980              	.LASF32:
+ 24981 0b10 4442475F 		.string	"DBG_SEARCH"
+ 24981      53454152 
+ 24981      434800
+ 24982              	.LASF82:
+ 24983 0b1b 7263584D 		.string	"rcXML"
+ 24983      4C00
+ 24984              	.LASF34:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 624
+
+
+ 24985 0b21 4442475F 		.string	"DBG_VFS"
+ 24985      56465300 
+ 24986              	.LASF38:
+ 24987 0b29 4442475F 		.string	"DBG_AES_KEYEXP"
+ 24987      4145535F 
+ 24987      4B455945 
+ 24987      585000
+ 24988              	.LASF400:
+ 24989 0b38 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c"
+ 24989      652F726F 
+ 24989      6461726D 
+ 24989      65722F73 
+ 24989      72615F73 
+ 24990              	.LASF14:
+ 24991 0b6e 666C6F61 		.string	"float"
+ 24991      7400
+ 24992              	.LASF176:
+ 24993 0b74 72635570 		.string	"rcUpdating"
+ 24993      64617469 
+ 24993      6E6700
+ 24994              	.LASF358:
+ 24995 0b7f 4B414553 		.string	"KAESBlockCipherVecAesNiAddRoundKey"
+ 24995      426C6F63 
+ 24995      6B436970 
+ 24995      68657256 
+ 24995      65634165 
+ 24996              	.LASF203:
+ 24997 0ba2 7263436F 		.string	"rcConverting"
+ 24997      6E766572 
+ 24997      74696E67 
+ 24997      00
+ 24998              	.LASF189:
+ 24999 0baf 7263436F 		.string	"rcConcatenating"
+ 24999      6E636174 
+ 24999      656E6174 
+ 24999      696E6700 
+ 25000              	.LASF68:
+ 25001 0bbf 4B426C6F 		.string	"KBlockCipher"
+ 25001      636B4369 
+ 25001      70686572 
+ 25001      00
+ 25002              	.LASF146:
+ 25003 0bcc 72634479 		.string	"rcDylib"
+ 25003      6C696200 
+ 25004              	.LASF295:
+ 25005 0bd4 72635265 		.string	"rcReadonly"
+ 25005      61646F6E 
+ 25005      6C7900
+ 25006              	.LASF340:
+ 25007 0bdf 4B414553 		.string	"KAESBlockCipherVecAesNiStateDupColumn1"
+ 25007      426C6F63 
+ 25007      6B436970 
+ 25007      68657256 
+ 25007      65634165 
+ 25008              	.LASF350:
+ 25009 0c06 4B414553 		.string	"KAESBlockCipherVecAesNiStateDupColumn2"
+ 25009      426C6F63 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 625
+
+
+ 25009      6B436970 
+ 25009      68657256 
+ 25009      65634165 
+ 25010              	.LASF327:
+ 25011 0c2d 4B414553 		.string	"KAESBlockCipherVecAesNiStateDupColumn3"
+ 25011      426C6F63 
+ 25011      6B436970 
+ 25011      68657256 
+ 25011      65634165 
+ 25012              	.LASF8:
+ 25013 0c54 756E7369 		.string	"unsigned int"
+ 25013      676E6564 
+ 25013      20696E74 
+ 25013      00
+ 25014              	.LASF66:
+ 25015 0c61 67726964 		.string	"grid"
+ 25015      00
+ 25016              	.LASF41:
+ 25017 0c66 4442475F 		.string	"DBG_AES_INVCIPHER"
+ 25017      4145535F 
+ 25017      494E5643 
+ 25017      49504845 
+ 25017      5200
+ 25018              	.LASF296:
+ 25019 0c78 72635772 		.string	"rcWriteonly"
+ 25019      6974656F 
+ 25019      6E6C7900 
+ 25020              	.LASF290:
+ 25021 0c84 72634C6F 		.string	"rcLocked"
+ 25021      636B6564 
+ 25021      00
+ 25022              	.LASF172:
+ 25023 0c8d 72635072 		.string	"rcProjecting"
+ 25023      6F6A6563 
+ 25023      74696E67 
+ 25023      00
+ 25024              	.LASF77:
+ 25025 0c9a 72635053 		.string	"rcPS"
+ 25025      00
+ 25026              	.LASF262:
+ 25027 0c9f 72635265 		.string	"rcRefcount"
+ 25027      66636F75 
+ 25027      6E7400
+ 25028              	.LASF97:
+ 25029 0caa 7263546F 		.string	"rcTocEntry"
+ 25029      63456E74 
+ 25029      727900
+ 25030              	.LASF252:
+ 25031 0cb5 72634D6F 		.string	"rcMode"
+ 25031      646500
+ 25032              	.LASF311:
+ 25033 0cbc 7263556E 		.string	"rcUnequal"
+ 25033      65717561 
+ 25033      6C00
+ 25034              	.LASF292:
+ 25035 0cc6 72634465 		.string	"rcDetached"
+ 25035      74616368 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 626
+
+
+ 25035      656400
+ 25036              	.LASF317:
+ 25037 0cd1 6F705F41 		.string	"op_AESENC"
+ 25037      4553454E 
+ 25037      4300
+ 25038              	.LASF298:
+ 25039 0cdb 7263496E 		.string	"rcInPlaceNotAllowed"
+ 25039      506C6163 
+ 25039      654E6F74 
+ 25039      416C6C6F 
+ 25039      77656400 
+ 25040              	.LASF341:
+ 25041 0cef 4B414553 		.string	"KAESBlockCipherVecAesNiStateMerge1"
+ 25041      426C6F63 
+ 25041      6B436970 
+ 25041      68657256 
+ 25041      65634165 
+ 25042              	.LASF345:
+ 25043 0d12 4B414553 		.string	"KAESBlockCipherVecAesNiStateMerge2"
+ 25043      426C6F63 
+ 25043      6B436970 
+ 25043      68657256 
+ 25043      65634165 
+ 25044              	.LASF240:
+ 25045 0d35 72635261 		.string	"rcRange"
+ 25045      6E676500 
+ 25046              	.LASF336:
+ 25047 0d3d 76746162 		.string	"vtab"
+ 25047      00
+ 25048              	.LASF401:
+ 25049 0d42 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 25049      652F726F 
+ 25049      6461726D 
+ 25049      65722F73 
+ 25049      72615F73 
+ 25050              	.LASF250:
+ 25051 0d8a 72634C61 		.string	"rcLastObject_v1_0"
+ 25051      73744F62 
+ 25051      6A656374 
+ 25051      5F76315F 
+ 25051      3000
+ 25052              	.LASF263:
+ 25053 0d9c 72634C61 		.string	"rcLastObject_v1_1"
+ 25053      73744F62 
+ 25053      6A656374 
+ 25053      5F76315F 
+ 25053      3100
+ 25054              	.LASF346:
+ 25055 0dae 4B414553 		.string	"KAESBlockCipherVecAesNiKeyExpansion128"
+ 25055      426C6F63 
+ 25055      6B436970 
+ 25055      68657256 
+ 25055      65634165 
+ 25056              	.LASF216:
+ 25057 0dd5 72634C61 		.string	"rcLastContext_v1_0"
+ 25057      7374436F 
+ 25057      6E746578 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 627
+
+
+ 25057      745F7631 
+ 25057      5F3000
+ 25058              	.LASF227:
+ 25059 0de8 72634C61 		.string	"rcLastContext_v1_1"
+ 25059      7374436F 
+ 25059      6E746578 
+ 25059      745F7631 
+ 25059      5F3100
+ 25060              	.LASF325:
+ 25061 0dfb 72636F6E 		.string	"rcon"
+ 25061      00
+ 25062              	.LASF382:
+ 25063 0e00 4B414553 		.string	"KAESBlockCipherVecAesNiProcessorSupport"
+ 25063      426C6F63 
+ 25063      6B436970 
+ 25063      68657256 
+ 25063      65634165 
+ 25064              	.LASF123:
+ 25065 0e28 72634D65 		.string	"rcMemMap"
+ 25065      6D4D6170 
+ 25065      00
+ 25066              	.LASF58:
+ 25067 0e31 41455342 		.string	"AESByte"
+ 25067      79746500 
+ 25068              	.LASF147:
+ 25069 0e39 72634578 		.string	"rcExpression"
+ 25069      70726573 
+ 25069      73696F6E 
+ 25069      00
+ 25070              	.LASF193:
+ 25071 0e46 7263556E 		.string	"rcUnpacking"
+ 25071      7061636B 
+ 25071      696E6700 
+ 25072              	.LASF109:
+ 25073 0e52 7263446F 		.string	"rcDoc"
+ 25073      6300
+ 25074              	.LASF19:
+ 25075 0e58 4442475F 		.string	"DBG_APP"
+ 25075      41505000 
+ 25076              	.LASF210:
+ 25077 0e60 72634D75 		.string	"rcMultiplexing"
+ 25077      6C746970 
+ 25077      6C657869 
+ 25077      6E6700
+ 25078              	.LASF212:
+ 25079 0e6f 72635365 		.string	"rcSearching"
+ 25079      61726368 
+ 25079      696E6700 
+ 25080              	.LASF394:
+ 25081 0e7b 46465F74 		.string	"FF_tab"
+ 25081      616200
+ 25082              	.LASF312:
+ 25083 0e82 72634661 		.string	"rcFailed"
+ 25083      696C6564 
+ 25083      00
+ 25084              	.LASF381:
+ 25085 0e8b 4B414553 		.string	"KAESBlockCipherVecAesNiDecrypt"
+
GAS LISTING /tmp/ccPaCTqg.s 			page 628
+
+
+ 25085      426C6F63 
+ 25085      6B436970 
+ 25085      68657256 
+ 25085      65634165 
+ 25086              	.LASF40:
+ 25087 0eaa 4442475F 		.string	"DBG_AES_INVKEYEXP"
+ 25087      4145535F 
+ 25087      494E564B 
+ 25087      45594558 
+ 25087      5000
+ 25088              	.LASF277:
+ 25089 0ebc 7263496E 		.string	"rcIncorrect"
+ 25089      636F7272 
+ 25089      65637400 
+ 25090              	.LASF116:
+ 25091 0ec8 72634675 		.string	"rcFunctParam"
+ 25091      6E637450 
+ 25091      6172616D 
+ 25091      00
+ 25092              	.LASF226:
+ 25093 0ed5 72634964 		.string	"rcIdentifying"
+ 25093      656E7469 
+ 25093      6679696E 
+ 25093      6700
+ 25094              	.LASF241:
+ 25095 0ee3 7263436F 		.string	"rcConstraint"
+ 25095      6E737472 
+ 25095      61696E74 
+ 25095      00
+ 25096              	.LASF267:
+ 25097 0ef0 7263556E 		.string	"rcUnknown"
+ 25097      6B6E6F77 
+ 25097      6E00
+ 25098              	.LASF106:
+ 25099 0efa 72634375 		.string	"rcCursor"
+ 25099      72736F72 
+ 25099      00
+ 25100              	.LASF264:
+ 25101 0f03 52435374 		.string	"RCState"
+ 25101      61746500 
+ 25102              	.LASF55:
+ 25103 0f0b 4B426C6F 		.string	"KBlockCipherByte"
+ 25103      636B4369 
+ 25103      70686572 
+ 25103      42797465 
+ 25103      00
+ 25104              	.LASF46:
+ 25105 0f1c 4B426C6F 		.string	"KBlockCipherByte_vt_v1"
+ 25105      636B4369 
+ 25105      70686572 
+ 25105      42797465 
+ 25105      5F76745F 
+ 25106              	.LASF304:
+ 25107 0f33 72634967 		.string	"rcIgnored"
+ 25107      6E6F7265 
+ 25107      6400
+ 25108              	.LASF162:
+
GAS LISTING /tmp/ccPaCTqg.s 			page 629
+
+
+ 25109 0f3d 72635265 		.string	"rcReleasing"
+ 25109      6C656173 
+ 25109      696E6700 
+ 25110              	.LASF85:
+ 25111 0f49 72634B46 		.string	"rcKFG"
+ 25111      4700
+ 25112              	.LASF243:
+ 25113 0f4f 72634D65 		.string	"rcMessage"
+ 25113      73736167 
+ 25113      6500
+ 25114              	.LASF190:
+ 25115 0f59 7263466F 		.string	"rcFormatting"
+ 25115      726D6174 
+ 25115      74696E67 
+ 25115      00
+ 25116              	.LASF83:
+ 25117 0f66 72635352 		.string	"rcSRA"
+ 25117      4100
+ 25118              	.LASF259:
+ 25119 0f6c 7263456E 		.string	"rcEnvironment"
+ 25119      7669726F 
+ 25119      6E6D656E 
+ 25119      7400
+ 25120              	.LASF15:
+ 25121 0f7a 6C6F6E67 		.string	"long long unsigned int"
+ 25121      206C6F6E 
+ 25121      6720756E 
+ 25121      7369676E 
+ 25121      65642069 
+ 25122              	.LASF48:
+ 25123 0f91 64657374 		.string	"destroy"
+ 25123      726F7900 
+ 25124              	.LASF141:
+ 25125 0f99 7263546F 		.string	"rcToken"
+ 25125      6B656E00 
+ 25126              	.LASF201:
+ 25127 0fa1 7263546F 		.string	"rcTokenizing"
+ 25127      6B656E69 
+ 25127      7A696E67 
+ 25127      00
+ 25128              	.LASF22:
+ 25129 0fae 4442475F 		.string	"DBG_REF"
+ 25129      52454600 
+ 25130              	.LASF182:
+ 25131 0fb6 72635772 		.string	"rcWriting"
+ 25131      6974696E 
+ 25131      6700
+ 25132              	.LASF158:
+ 25133 0fc0 7263416C 		.string	"rcAllocating"
+ 25133      6C6F6361 
+ 25133      74696E67 
+ 25133      00
+ 25134              	.LASF144:
+ 25135 0fcd 72635479 		.string	"rcType"
+ 25135      706500
+ 25136              	.LASF245:
+ 25137 0fd4 72635265 		.string	"rcResources"
+
GAS LISTING /tmp/ccPaCTqg.s 			page 630
+
+
+ 25137      736F7572 
+ 25137      63657300 
+ 25138              	.LASF126:
+ 25139 0fe0 72634E61 		.string	"rcNamelist"
+ 25139      6D656C69 
+ 25139      737400
+ 25140              	.LASF352:
+ 25141 0feb 4B414553 		.string	"KAESBlockCipherVecAesNiInvMixColumns"
+ 25141      426C6F63 
+ 25141      6B436970 
+ 25141      68657256 
+ 25141      65634165 
+ 25142              	.LASF402:
+ 25143 1010 4B414553 		.string	"KAESBlockCipherVecAesNiMake"
+ 25143      426C6F63 
+ 25143      6B436970 
+ 25143      68657256 
+ 25143      65634165 
+ 25144              	.LASF368:
+ 25145 102c 4B414553 		.string	"KAESBlockCipherVecAesNiDestroy"
+ 25145      426C6F63 
+ 25145      6B436970 
+ 25145      68657256 
+ 25145      65634165 
+ 25146              	.LASF310:
+ 25147 104b 7263556E 		.string	"rcUndefined"
+ 25147      64656669 
+ 25147      6E656400 
+ 25148              	.LASF278:
+ 25149 1057 7263496E 		.string	"rcInconsistent"
+ 25149      636F6E73 
+ 25149      69737465 
+ 25149      6E7400
+ 25150              	.LASF223:
+ 25151 1066 72635265 		.string	"rcRetrieving"
+ 25151      74726965 
+ 25151      76696E67 
+ 25151      00
+ 25152              	.LASF373:
+ 25153 1073 656E6372 		.string	"encrypt_key"
+ 25153      7970745F 
+ 25153      6B657900 
+ 25154              	.LASF395:
+ 25155 107f 4B414553 		.string	"KAESBlockCipherVecAesNiFFtable"
+ 25155      426C6F63 
+ 25155      6B436970 
+ 25155      68657256 
+ 25155      65634165 
+ 25156              	.LASF54:
+ 25157 109e 64656372 		.string	"decrypt"
+ 25157      79707400 
+ 25158              	.LASF47:
+ 25159 10a6 76657273 		.string	"version"
+ 25159      696F6E00 
+ 25160              	.LASF235:
+ 25161 10ae 72634E61 		.string	"rcName"
+ 25161      6D6500
+
GAS LISTING /tmp/ccPaCTqg.s 			page 631
+
+
+ 25162              	.LASF272:
+ 25163 10b5 72634E75 		.string	"rcNull"
+ 25163      6C6C00
+ 25164              	.LASF194:
+ 25165 10bc 7263456E 		.string	"rcEncoding"
+ 25165      636F6469 
+ 25165      6E6700
+ 25166              	.LASF113:
+ 25167 10c7 72634669 		.string	"rcFileFormat"
+ 25167      6C65466F 
+ 25167      726D6174 
+ 25167      00
+ 25168              	.LASF150:
+ 25169 10d4 7263456E 		.string	"rcEncryptionKey"
+ 25169      63727970 
+ 25169      74696F6E 
+ 25169      4B657900 
+ 25170              	.LASF215:
+ 25171 10e4 7263496E 		.string	"rcInflating"
+ 25171      666C6174 
+ 25171      696E6700 
+ 25172              	.LASF370:
+ 25173 10f0 4B414553 		.string	"KAESBlockCipherVecAesNiBlockSize"
+ 25173      426C6F63 
+ 25173      6B436970 
+ 25173      68657256 
+ 25173      65634165 
+ 25174              	.LASF297:
+ 25175 1111 72634E6F 		.string	"rcNoPerm"
+ 25175      5065726D 
+ 25175      00
+ 25176              	.LASF334:
+ 25177 111a 64657374 		.string	"dest"
+ 25177      00
+ 25178              	.LASF185:
+ 25179 111f 72635265 		.string	"rcResetting"
+ 25179      73657474 
+ 25179      696E6700 
+ 25180              	.LASF49:
+ 25181 112b 626C6F63 		.string	"block_size"
+ 25181      6B5F7369 
+ 25181      7A6500
+ 25182              	.LASF133:
+ 25183 1136 72635257 		.string	"rcRWLock"
+ 25183      4C6F636B 
+ 25183      00
+ 25184              	.LASF164:
+ 25185 113f 72634C69 		.string	"rcListing"
+ 25185      7374696E 
+ 25185      6700
+ 25186              	.LASF388:
+ 25187 1149 7665635F 		.string	"vec_0F"
+ 25187      304600
+ 25188              	.LASF114:
+ 25189 1150 72634675 		.string	"rcFunction"
+ 25189      6E637469 
+ 25189      6F6E00
+
GAS LISTING /tmp/ccPaCTqg.s 			page 632
+
+
+ 25190              	.LASF39:
+ 25191 115b 4442475F 		.string	"DBG_AES_CIPHER"
+ 25191      4145535F 
+ 25191      43495048 
+ 25191      455200
+ 25192              	.LASF270:
+ 25193 116a 7263556E 		.string	"rcUnrecognized"
+ 25193      7265636F 
+ 25193      676E697A 
+ 25193      656400
+ 25194              	.LASF62:
+ 25195 1179 6E756D62 		.string	"number_of_rounds"
+ 25195      65725F6F 
+ 25195      665F726F 
+ 25195      756E6473 
+ 25195      00
+ 25196              	.LASF343:
+ 25197 118a 76696E31 		.string	"vin1"
+ 25197      00
+ 25198              	.LASF86:
+ 25199 118f 7263416C 		.string	"rcAlign"
+ 25199      69676E00 
+ 25200              	.LASF356:
+ 25201 1197 4B414553 		.string	"KAESBlockCipherVecAesNiEqInvKeyExpansion256"
+ 25201      426C6F63 
+ 25201      6B436970 
+ 25201      68657256 
+ 25201      65634165 
+ 25202              	.LASF149:
+ 25203 11c3 72635072 		.string	"rcProduction"
+ 25203      6F647563 
+ 25203      74696F6E 
+ 25203      00
+ 25204              	.LASF396:
+ 25205 11d0 4B414553 		.string	"KAESBlockCipherVecAesNiRcon"
+ 25205      426C6F63 
+ 25205      6B436970 
+ 25205      68657256 
+ 25205      65634165 
+ 25206              	.LASF91:
+ 25207 11ec 72634C61 		.string	"rcLastModule_v1_1"
+ 25207      73744D6F 
+ 25207      64756C65 
+ 25207      5F76315F 
+ 25207      3100
+ 25208              	.LASF139:
+ 25209 11fe 72635468 		.string	"rcThread"
+ 25209      72656164 
+ 25209      00
+ 25210              	.LASF348:
+ 25211 1207 4B414553 		.string	"KAESBlockCipherVecAesNiVecXor"
+ 25211      426C6F63 
+ 25211      6B436970 
+ 25211      68657256 
+ 25211      65634165 
+ 25212              	.LASF187:
+ 25213 1225 72634672 		.string	"rcFreezing"
+
GAS LISTING /tmp/ccPaCTqg.s 			page 633
+
+
+ 25213      65657A69 
+ 25213      6E6700
+ 25214              	.LASF398:
+ 25215 1230 4B414553 		.string	"KAESBlockCipherVecAesNi_vt_"
+ 25215      426C6F63 
+ 25215      6B436970 
+ 25215      68657256 
+ 25215      65634165 
+ 25216              	.LASF52:
+ 25217 124c 7365745F 		.string	"set_decrypt_key"
+ 25217      64656372 
+ 25217      7970745F 
+ 25217      6B657900 
+ 25218              	.LASF69:
+ 25219 125c 62797465 		.string	"byte"
+ 25219      00
+ 25220              	.LASF45:
+ 25221 1261 4B426C6F 		.string	"KBlockCipher_vt"
+ 25221      636B4369 
+ 25221      70686572 
+ 25221      5F767400 
+ 25222              	.LASF379:
+ 25223 1271 64656372 		.string	"decrypt_key"
+ 25223      7970745F 
+ 25223      6B657900 
+ 25224              	.LASF256:
+ 25225 127d 72635365 		.string	"rcSeed"
+ 25225      656400
+ 25226              	.LASF213:
+ 25227 1284 72634C6F 		.string	"rcLoading"
+ 25227      6164696E 
+ 25227      6700
+ 25228              	.LASF1:
+ 25229 128e 73686F72 		.string	"short int"
+ 25229      7420696E 
+ 25229      7400
+ 25230              	.LASF9:
+ 25231 1298 75696E74 		.string	"uint64_t"
+ 25231      36345F74 
+ 25231      00
+ 25232              	.LASF306:
+ 25233 12a1 72634C61 		.string	"rcLastState_v1_0"
+ 25233      73745374 
+ 25233      6174655F 
+ 25233      76315F30 
+ 25233      00
+ 25234              	.LASF315:
+ 25235 12b2 72634C61 		.string	"rcLastState_v1_1"
+ 25235      73745374 
+ 25235      6174655F 
+ 25235      76315F31 
+ 25235      00
+ 25236              	.LASF80:
+ 25237 12c3 72635644 		.string	"rcVDB"
+ 25237      4200
+ 25238              	.LASF347:
+ 25239 12c9 4B414553 		.string	"KAESBlockCipherVecAesNiKeyExpansion192"
+
GAS LISTING /tmp/ccPaCTqg.s 			page 634
+
+
+ 25239      426C6F63 
+ 25239      6B436970 
+ 25239      68657256 
+ 25239      65634165 
+ 25240              	.LASF51:
+ 25241 12f0 7365745F 		.string	"set_encrypt_key"
+ 25241      656E6372 
+ 25241      7970745F 
+ 25241      6B657900 
+ 25242              	.LASF78:
+ 25243 1300 72635846 		.string	"rcXF"
+ 25243      00
+ 25244              	.LASF161:
+ 25245 1305 72634465 		.string	"rcDestroying"
+ 25245      7374726F 
+ 25245      79696E67 
+ 25245      00
+ 25246              	.LASF266:
+ 25247 1312 7263446F 		.string	"rcDone"
+ 25247      6E6500
+ 25248              	.LASF96:
+ 25249 1319 7263546F 		.string	"rcToc"
+ 25249      6300
+ 25250              	.LASF170:
+ 25251 131f 7263416C 		.string	"rcAliasing"
+ 25251      69617369 
+ 25251      6E6700
+ 25252              	.LASF131:
+ 25253 132a 72635072 		.string	"rcProcess"
+ 25253      6F636573 
+ 25253      7300
+ 25254              	.LASF229:
+ 25255 1334 72634E6F 		.string	"rcNoObj"
+ 25255      4F626A00 
+ 25256              	.LASF268:
+ 25257 133c 7263556E 		.string	"rcUnsupported"
+ 25257      73757070 
+ 25257      6F727465 
+ 25257      6400
+ 25258              	.LASF349:
+ 25259 134a 4B414553 		.string	"KAESBlockCipherVecAesNiAesKeyGenAssistColumn2"
+ 25259      426C6F63 
+ 25259      6B436970 
+ 25259      68657256 
+ 25259      65634165 
+ 25260              	.LASF104:
+ 25261 1378 7263436F 		.string	"rcColumn"
+ 25261      6C756D6E 
+ 25261      00
+ 25262              	.LASF269:
+ 25263 1381 7263556E 		.string	"rcUnexpected"
+ 25263      65787065 
+ 25263      63746564 
+ 25263      00
+ 25264              	.LASF7:
+ 25265 138e 75696E74 		.string	"uint32_t"
+ 25265      33325F74 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 635
+
+
+ 25265      00
+ 25266              	.LASF90:
+ 25267 1397 72635646 		.string	"rcVFS"
+ 25267      5300
+ 25268              	.LASF31:
+ 25269 139d 4442475F 		.string	"DBG_KRYPTO"
+ 25269      4B525950 
+ 25269      544F00
+ 25270              	.LASF43:
+ 25271 13a8 4442475F 		.string	"DBG_AES_COUNT"
+ 25271      4145535F 
+ 25271      434F554E 
+ 25271      5400
+ 25272              	.LASF351:
+ 25273 13b6 4B414553 		.string	"KAESBlockCipherVecAesNiKeyExpansion256"
+ 25273      426C6F63 
+ 25273      6B436970 
+ 25273      68657256 
+ 25273      65634165 
+ 25274              	.LASF383:
+ 25275 13dd 6C657665 		.string	"level"
+ 25275      6C00
+ 25276              	.LASF320:
+ 25277 13e3 6F705F41 		.string	"op_AESDECLAST"
+ 25277      45534445 
+ 25277      434C4153 
+ 25277      5400
+ 25278              	.LASF314:
+ 25279 13f1 72635772 		.string	"rcWrongType"
+ 25279      6F6E6754 
+ 25279      79706500 
+ 25280              	.LASF249:
+ 25281 13fd 72634C69 		.string	"rcLibrary"
+ 25281      62726172 
+ 25281      7900
+ 25282              	.LASF282:
+ 25283 1407 72634361 		.string	"rcCanceled"
+ 25283      6E63656C 
+ 25283      656400
+ 25284              	.LASF153:
+ 25285 1412 72634461 		.string	"rcData"
+ 25285      746100
+ 25286              	.LASF363:
+ 25287 1419 4B414553 		.string	"KAESBlockCipherVecAesNiCipher"
+ 25287      426C6F63 
+ 25287      6B436970 
+ 25287      68657256 
+ 25287      65634165 
+ 25288              	.LASF117:
+ 25289 1437 72634865 		.string	"rcHeader"
+ 25289      61646572 
+ 25289      00
+ 25290              	.LASF6:
+ 25291 1440 73686F72 		.string	"short unsigned int"
+ 25291      7420756E 
+ 25291      7369676E 
+ 25291      65642069 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 636
+
+
+ 25291      6E7400
+ 25292              	.LASF107:
+ 25293 1453 72634461 		.string	"rcDatabase"
+ 25293      74616261 
+ 25293      736500
+ 25294              	.LASF183:
+ 25295 145e 7263436F 		.string	"rcCommitting"
+ 25295      6D6D6974 
+ 25295      74696E67 
+ 25295      00
+ 25296              	.LASF211:
+ 25297 146b 7263436C 		.string	"rcClassifying"
+ 25297      61737369 
+ 25297      6679696E 
+ 25297      6700
+ 25298              	.LASF142:
+ 25299 1479 72635472 		.string	"rcTree"
+ 25299      656500
+ 25300              	.LASF36:
+ 25301 1480 4442475F 		.string	"DBG_ARGS"
+ 25301      41524753 
+ 25301      00
+ 25302              	.LASF171:
+ 25303 1489 72635365 		.string	"rcSelecting"
+ 25303      6C656374 
+ 25303      696E6700 
+ 25304              	.LASF72:
+ 25305 1495 72635465 		.string	"rcText"
+ 25305      787400
+ 25306              	.LASF308:
+ 25307 149c 72634F75 		.string	"rcOutoforder"
+ 25307      746F666F 
+ 25307      72646572 
+ 25307      00
+ 25308              	.LASF275:
+ 25309 14a9 7263496E 		.string	"rcInvalid"
+ 25309      76616C69 
+ 25309      6400
+ 25310              	.LASF375:
+ 25311 14b3 75736572 		.string	"user_key_size"
+ 25311      5F6B6579 
+ 25311      5F73697A 
+ 25311      6500
+ 25312              	.LASF332:
+ 25313 14c1 4B414553 		.string	"KAESBlockCipherVecAesNiStateShiftLeft32"
+ 25313      426C6F63 
+ 25313      6B436970 
+ 25313      68657256 
+ 25313      65634165 
+ 25314              	.LASF222:
+ 25315 14e9 7263496E 		.string	"rcInitializing"
+ 25315      69746961 
+ 25315      6C697A69 
+ 25315      6E6700
+ 25316              	.LASF101:
+ 25317 14f8 7263426C 		.string	"rcBlob"
+ 25317      6F6200
+
GAS LISTING /tmp/ccPaCTqg.s 			page 637
+
+
+ 25318              	.LASF360:
+ 25319 14ff 6D737461 		.string	"mstate"
+ 25319      746500
+ 25320              	.LASF199:
+ 25321 1506 72635265 		.string	"rcReindexing"
+ 25321      696E6465 
+ 25321      78696E67 
+ 25321      00
+ 25322              	.LASF94:
+ 25323 1513 72634E6F 		.string	"rcNoTarg"
+ 25323      54617267 
+ 25323      00
+ 25324              	.LASF362:
+ 25325 151c 4B414553 		.string	"KAESBlockCipherVecAesNiLastRound"
+ 25325      426C6F63 
+ 25325      6B436970 
+ 25325      68657256 
+ 25325      65634165 
+ 25326              	.LASF276:
+ 25327 153d 7263436F 		.string	"rcCorrupt"
+ 25327      72727570 
+ 25327      7400
+ 25328              	.LASF305:
+ 25329 1547 72634F75 		.string	"rcOutofrange"
+ 25329      746F6672 
+ 25329      616E6765 
+ 25329      00
+ 25330              	.LASF134:
+ 25331 1554 72635363 		.string	"rcSchema"
+ 25331      68656D61 
+ 25331      00
+ 25332              	.LASF323:
+ 25333 155d 4B414553 		.string	"KAESBlockCipherVecAesNiStateIn"
+ 25333      426C6F63 
+ 25333      6B436970 
+ 25333      68657256 
+ 25333      65634165 
+ 25334              	.LASF130:
+ 25335 157c 72635061 		.string	"rcPath"
+ 25335      746800
+ 25336              	.LASF181:
+ 25337 1583 72635265 		.string	"rcReading"
+ 25337      6164696E 
+ 25337      6700
+ 25338              	.LASF50:
+ 25339 158d 6B65795F 		.string	"key_size"
+ 25339      73697A65 
+ 25339      00
+ 25340              	.LASF313:
+ 25341 1596 72634E6F 		.string	"rcNotAvailable"
+ 25341      74417661 
+ 25341      696C6162 
+ 25341      6C6500
+ 25342              	.LASF392:
+ 25343 15a5 4B414553 		.string	"KAESBlockCipherVecAesNiRijndaelInvSBoxV"
+ 25343      426C6F63 
+ 25343      6B436970 
+
GAS LISTING /tmp/ccPaCTqg.s 			page 638
+
+
+ 25343      68657256 
+ 25343      65634165 
+ 25344              	.LASF271:
+ 25345 15cd 7263416D 		.string	"rcAmbiguous"
+ 25345      62696775 
+ 25345      6F757300 
+ 25346              		.ident	"GCC: (GNU) 4.4.2"
+ 25347              		.section	.note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/ccPaCTqg.s 			page 639
+
+
+DEFINED SYMBOLS
+                            *ABS*:0000000000000000 aes-ncbi.c
+     /tmp/ccPaCTqg.s:11     .text:0000000000000000 op_AESENC
+     /tmp/ccPaCTqg.s:32     .text:000000000000000b op_AESENCLAST
+     /tmp/ccPaCTqg.s:52     .text:0000000000000016 op_AESDEC
+     /tmp/ccPaCTqg.s:72     .text:0000000000000021 op_AESDECLAST
+     /tmp/ccPaCTqg.s:92     .text:000000000000002c op_AESIMC
+     /tmp/ccPaCTqg.s:112    .text:0000000000000037 bswap_32
+     /tmp/ccPaCTqg.s:148    .rodata:0000000000000000 vec_00
+     /tmp/ccPaCTqg.s:153    .rodata:0000000000000010 vec_01
+     /tmp/ccPaCTqg.s:173    .rodata:0000000000000020 vec_0F
+     /tmp/ccPaCTqg.s:193    .rodata:0000000000000030 vec_10
+     /tmp/ccPaCTqg.s:213    .rodata:0000000000000040 KAESBlockCipherVecAesNiRijndaelSBox
+     /tmp/ccPaCTqg.s:473    .rodata:0000000000000140 KAESBlockCipherVecAesNiRijndaelSBoxV
+     /tmp/ccPaCTqg.s:733    .rodata:0000000000000240 KAESBlockCipherVecAesNiRijndaelInvSBoxV
+     /tmp/ccPaCTqg.s:993    .rodata:0000000000000340 lo_filter
+     /tmp/ccPaCTqg.s:1013   .rodata:0000000000000350 FF_tab
+     /tmp/ccPaCTqg.s:1033   .data:0000000000000000 KAESBlockCipherVecAesNiFFtable
+     /tmp/ccPaCTqg.s:1046   .rodata:0000000000000360 KAESBlockCipherVecAesNiRcon
+     /tmp/ccPaCTqg.s:1059   .text:000000000000004b KAESBlockCipherVecAesNiKeyExpansion128
+     /tmp/ccPaCTqg.s:9273   .rodata:0000000000000610 mask.8002
+     /tmp/ccPaCTqg.s:2645   .text:00000000000018c3 KAESBlockCipherVecAesNiKeyExpansion192
+     /tmp/ccPaCTqg.s:9293   .rodata:0000000000000620 mask.8011
+     /tmp/ccPaCTqg.s:5149   .text:0000000000004000 KAESBlockCipherVecAesNiKeyExpansion256
+     /tmp/ccPaCTqg.s:7352   .text:00000000000061b6 KAESBlockCipherVecAesNiEqInvKeyExpansion
+     /tmp/ccPaCTqg.s:7434   .text:000000000000626c KAESBlockCipherVecAesNiEqInvKeyExpansion128
+     /tmp/ccPaCTqg.s:7462   .text:0000000000006296 KAESBlockCipherVecAesNiEqInvKeyExpansion192
+     /tmp/ccPaCTqg.s:7490   .text:00000000000062c0 KAESBlockCipherVecAesNiEqInvKeyExpansion256
+     /tmp/ccPaCTqg.s:7530   .text:00000000000062ea KAESBlockCipherVecAesNiCipher
+     /tmp/ccPaCTqg.s:8009   .text:000000000000699a KAESBlockCipherVecAesNiEqInvCipher
+     /tmp/ccPaCTqg.s:8493   .rodata:00000000000003d9 KAESBlockCipherVecAesNiaes_ncbi_name
+     /tmp/ccPaCTqg.s:8497   .text:0000000000007054 KAESBlockCipherVecAesNiDestroy
+     /tmp/ccPaCTqg.s:8516   .text:000000000000705e KAESBlockCipherVecAesNiBlockSize
+     /tmp/ccPaCTqg.s:8536   .text:0000000000007069 KAESBlockCipherVecAesNiKeySize
+     /tmp/ccPaCTqg.s:8561   .text:0000000000007074 KAESBlockCipherVecAesNiSetEncryptKey
+     /tmp/ccPaCTqg.s:9263   .rodata:00000000000005a0 __func__.8794
+     /tmp/ccPaCTqg.s:8652   .text:000000000000715d KAESBlockCipherVecAesNiSetDecryptKey
+     /tmp/ccPaCTqg.s:8734   .text:0000000000007220 KAESBlockCipherVecAesNiEncrypt
+     /tmp/ccPaCTqg.s:9258   .rodata:0000000000000570 __PRETTY_FUNCTION__.8830
+     /tmp/ccPaCTqg.s:8812   .text:00000000000072e3 KAESBlockCipherVecAesNiDecrypt
+     /tmp/ccPaCTqg.s:9253   .rodata:0000000000000550 __PRETTY_FUNCTION__.8851
+     /tmp/ccPaCTqg.s:8907   .text:00000000000073a6 KAESBlockCipherVecAesNiProcessorSupport
+     /tmp/ccPaCTqg.s:9248   .rodata:0000000000000520 __func__.8875
+     /tmp/ccPaCTqg.s:9142   .data.rel.ro.local:0000000000000000 KAESBlockCipherVecAesNi_vt_
+     /tmp/ccPaCTqg.s:9158   .text:000000000000764e KAESBlockCipherVecAesNiMake
+     /tmp/ccPaCTqg.s:9238   .rodata:00000000000004d0 __func__.8978
+     /tmp/ccPaCTqg.s:9243   .rodata:00000000000004f0 __PRETTY_FUNCTION__.8979
+     /tmp/ccPaCTqg.s:9268   .rodata:00000000000005e0 __PRETTY_FUNCTION__.8793
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+KDbgWriterGet
+KDbgCondToFlag
+KDbgTestModConds
+KDbgMsg
+memset
+SetRCFileFuncLine
+
GAS LISTING /tmp/ccPaCTqg.s 			page 640
+
+
+__assert_fail
diff --git a/libs/krypto/aes-ncbi.c b/libs/krypto/aes-ncbi.c
new file mode 100644
index 0000000..4215feb
--- /dev/null
+++ b/libs/krypto/aes-ncbi.c
@@ -0,0 +1,2644 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+
+#include <krypto/extern.h>
+
+#include "ncbi-priv.h"
+#include "aes-ncbi-priv.h"
+#include "cipher-priv.h"
+#include "blockcipher-priv.h"
+
+#include <klib/debug.h>
+#include <klib/out.h>
+#include <klib/rc.h>
+
+
+#include <byteswap.h>
+#include <string.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <sysalloc.h>
+
+#if USE_VEC
+#include <cpuid.h>
+#endif
+
+#if USE_VECREG
+#include <v128.h>
+#endif
+
+/*
+ * This implements the AES cipher as defined by FIPS-197 from NIST
+ *  
+ * Notes on implmentation:
+ *
+ * NOTE:
+ * Byte ordering in AES is not critical but unllike the original implmentation
+ * bytes are not re-ordered to a big endian order upon reading them in and this
+ * code will expect to run on an Intel/AMD type processor and might have issues
+ * on some big endian processors.
+ *
+ * NOTE:
+ * Many functions are written as static inline functions to
+ * facilitate GCC type assembly language optimization on various processors
+ *
+ * NOTE:
+ * This implements the Equivalent Inverse Cipher not the Inverse Cipher.  In
+ * general functions will match those defined in the FIPS-197 document where they
+ * do not get optimized away for Intel/AMD XMM registers and AES-NI instructions.
+ *
+ * NOTE:
+ * C-99 types are used for specific sized types.  An unaddornded unsigned type
+ * is used for many index type variables to allow the compiler choice in
+ * size where size does not matter very much.  As these index variables do
+ * not go above 16 any size would do but the compiler can choose the size most
+ * suited for array subscripting.
+ */
+
+static const
+CipherVec vec_00 =  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+static const
+CipherVec vec_01 =  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+                      0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+
+static const
+CipherVec vec_0F =  { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
+                      0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F };
+
+static const
+CipherVec vec_10 =  { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+                      0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 };
+
+
+
+/* ======================================================================
+ * These functions implment the Advanced Encryption Standard AES as defined
+ * in the FIPS (Federal Information Processing Standars Publication 197
+ * Of Nevember 26, 2001.
+ */
+
+/* ======================================================================
+ * FIPS-197 5.1
+ */
+
+/*
+ * Read a blocks worth of bytes into an CipherVec
+ *
+ * With vector registers it is a single instruction, without them it
+ * is a memmove call
+ */
+static __inline__ 
+CipherVec AESBCMEMBER(StateIn) (const void * ain)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+CipherVec AESBCMEMBER(StateIn) (const void * ain)
+{
+#if USE_VEC_REG
+
+    register CipherVec vec;
+    __asm__ (
+        "movdqu (%[a]),%[s]" : [s] "=x" (vec) : [a] "D" (ain)
+        );
+    return vec;
+
+#else
+
+    CipherVec_AES_u u;
+    memmove (&u.bytes, ain, sizeof (u));
+    return u.state;
+
+#endif
+}
+
+
+/*
+ * Write a block's worth of bytes out from an CipherVec
+ *
+ * With vector registers it is a single instruction, without them it
+ * is a memmove call
+ */
+static __inline__
+void AESBCMEMBER(StateOut) (const CipherVec vec, void * rout)
+    __attribute__ ((always_inline));
+
+static __inline__
+void AESBCMEMBER(StateOut) (const CipherVec vec, void * rout)
+{
+#if USE_VEC_REG
+
+    register CipherVec rvec = vec;
+    __asm__ (
+        "movdqu %[s],(%[a])" : : [s] "x" (rvec), [a] "D" (rout)
+        );
+
+#else
+
+    memmove (rout, &vec, sizeof (vec));
+
+#endif
+}
+
+
+static __inline__ 
+CipherVec AESBCMEMBER(VecXor) (CipherVec v1, CipherVec v2)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+CipherVec AESBCMEMBER(VecXor) (CipherVec v1, CipherVec v2)
+{
+#if USE_VEC
+
+    return v1 ^ v2;
+
+#else
+
+    CipherVec_AES_u u1, u2; /* state and key not countries :) */
+    unsigned ix;
+
+    u1.state = v1;
+    u2.state = v2;
+
+    for (ix = 0; ix < AES_Nb; ++ix)
+        u1.columns[ix] ^= u2.columns[ix];
+
+    return u1.state;
+
+#endif
+}
+
+
+static __inline__ 
+CipherVec AESBCMEMBER(VecAnd) (CipherVec v1, CipherVec v2)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+CipherVec AESBCMEMBER(VecAnd) (CipherVec v1, CipherVec v2)
+{
+#if USE_VEC
+
+    return v1 & v2;
+
+#else
+
+    CipherVec_AES_u u1, u2; /* state and key not countries :) */
+    unsigned ix;
+
+    u1.state = v1;
+    u2.state = v2;
+
+    for (ix = 0; ix < AES_Nb; ++ix)
+        u1.columns[ix] &= u2.columns[ix];
+
+    return u1.state;
+
+#endif
+}
+
+
+static __inline__ 
+CipherVec AESBCMEMBER(VecOr) (CipherVec v1, CipherVec v2)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+CipherVec AESBCMEMBER(VecOr) (CipherVec v1, CipherVec v2)
+{
+#if USE_VEC
+
+    return v1 | v2;
+
+#else
+
+    CipherVec_AES_u u1, u2; /* state and key not countries :) */
+    unsigned ix;
+
+    u1.state = v1;
+    u2.state = v2;
+
+    for (ix = 0; ix < AES_Nb; ++ix)
+        u1.columns[ix] |= u2.columns[ix];
+
+    return u1.state;
+
+#endif
+}
+
+
+static __inline__ 
+CipherVec AESBCMEMBER(VecAdd) (CipherVec v1, CipherVec v2)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+CipherVec AESBCMEMBER(VecAdd) (CipherVec v1, CipherVec v2)
+{
+#if USE_VEC
+
+    return v1 + v2;
+
+#else
+
+    CipherVec_AES_u u1, u2; /* state and key not countries :) */
+    unsigned ix;
+
+    u1.state = v1;
+    u2.state = v2;
+
+    for (ix = 0; ix < AES_Nb; ++ix)
+        u1.columns[ix] += u2.columns[ix];
+
+    return u1.state;
+
+#endif
+}
+
+
+static __inline__ 
+CipherVec AESBCMEMBER(VecSub) (CipherVec v1, CipherVec v2)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+CipherVec AESBCMEMBER(VecSub) (CipherVec v1, CipherVec v2)
+{
+#if USE_VEC
+
+    return v1 - v2;
+
+#else
+
+    CipherVec_AES_u u1, u2; /* state and key not countries :) */
+    unsigned ix;
+
+    u1.state = v1;
+    u2.state = v2;
+
+    for (ix = 0; ix < AES_Nb; ++ix)
+        u1.columns[ix] -= u2.columns[ix];
+
+    return u1.state;
+
+#endif
+}
+
+
+static __inline__ 
+CipherVec AESBCMEMBER(VecMul) (CipherVec v1, CipherVec v2)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+CipherVec AESBCMEMBER(VecMul) (CipherVec v1, CipherVec v2)
+{
+#if USE_VEC
+
+    return v1 * v2;
+
+#else
+
+    CipherVec_AES_u u1, u2; /* state and key not countries :) */
+    unsigned ix;
+
+    u1.state = v1;
+    u2.state = v2;
+
+    for (ix = 0; ix < AES_Nb; ++ix)
+        u1.columns[ix] *= u2.columns[ix];
+
+    return u1.state;
+
+#endif
+}
+
+
+static __inline__ 
+CipherVec AESBCMEMBER(VecDiv) (CipherVec v1, CipherVec v2)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+CipherVec AESBCMEMBER(VecDiv) (CipherVec v1, CipherVec v2)
+{
+#if USE_VEC
+
+    return v1 / v2;
+
+#else
+
+    CipherVec_AES_u u1, u2; /* state and key not countries :) */
+    unsigned ix;
+
+    u1.state = v1;
+    u2.state = v2;
+
+    for (ix = 0; ix < AES_Nb; ++ix)
+        u1.columns[ix] /= u2.columns[ix];
+
+    return u1.state;
+
+#endif
+}
+
+static __inline__ 
+CipherVec AESBCMEMBER(PackShuffleBytes) (CipherVec dest, CipherVec mask)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+CipherVec AESBCMEMBER(PackShuffleBytes) (CipherVec dest, CipherVec mask)
+{
+#if USE_VEC_REG
+
+    return op_PSHUFB128 (dest, mask);
+
+#else
+
+    CipherVec_AES_u out, in, gate;
+    unsigned ix;
+
+    in.state = dest;
+    gate.state = mask;
+
+    for (ix = 0; ix < sizeof dest; ++ix)
+    {
+        if (gate.bytes[ix] & 0x80)
+            out.bytes[ix] = 0;
+        else
+            out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+    }
+
+    return out.state;
+
+#endif
+}
+
+
+static __inline__ 
+CipherVec AESBCMEMBER(VecSLLBI) (CipherVec v, const int k)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+CipherVec AESBCMEMBER(VecSLLBI) (CipherVec v, const int k)
+{
+#if USE_VEC_REG
+    static const CipherVec sl_mask [9] = 
+        {
+            { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+              0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
+            { 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
+              0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE },
+            { 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+              0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC },
+            { 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
+              0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8 },
+            { 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
+              0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0 },
+            { 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+              0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0 },
+            { 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
+              0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0 },
+            { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+              0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 },
+            { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+              0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
+        };
+    CipherVec vv = v;
+
+    assert (k <= 8);
+    
+
+/*     DEBUG_CIPHER_VECTOR ("mask", sl_mask[k]); */
+/*     DEBUG_CIPHER_VECTOR ("v 1", vv); */
+    vv = op_PSLLDI128 (vv, k);
+/*     DEBUG_CIPHER_VECTOR ("v 2", vv); */
+    vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+/*     DEBUG_CIPHER_VECTOR ("v 3", vv); */
+    return vv;
+
+#else
+
+    CipherVec_AES_u vv; /* state and key not countries :) */
+    unsigned ix;
+
+    vv.state = v;
+
+    for (ix = 0; ix < sizeof (v); ++ix)
+    {
+        KOutMsg ("SLLBI %d %x ", k, vv.bytes[ix]);
+        vv.bytes[ix] <<= k;
+        KOutMsg ("%x\n", vv.bytes[ix]);
+    }
+    return vv.state;
+
+#endif
+}
+
+
+static __inline__ 
+CipherVec AESBCMEMBER(VecSRLBI) (CipherVec v, const int k)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+CipherVec AESBCMEMBER(VecSRLBI) (CipherVec v, const int k)
+{
+#if USE_VEC_REG
+    static const CipherVec sr_mask [9] = 
+        {
+            { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+              0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
+            { 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
+              0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F },
+            { 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+              0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F },
+            { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
+              0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F },
+            { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
+              0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F },
+            { 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+              0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07 },
+            { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+              0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 },
+            { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+              0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 },
+            { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+              0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
+        };
+
+    v = op_PSRLDI128 (v, k);
+    v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+    return v;
+
+#else
+
+    CipherVec_AES_u vv; /* state and key not countries :) */
+    unsigned ix;
+
+    vv.state = v;
+
+    for (ix = 0; ix < sizeof (v); ++ix)
+    {
+        KOutMsg ("SRLBI %d %x ", k, vv.bytes[ix]);
+        vv.bytes[ix] >>= k;
+        KOutMsg ("%x\n", vv.bytes[ix]);
+    }
+    return vv.state;
+
+#endif
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(SetColumn) (CipherVec state, AESWord column, const int which)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(SetColumn) (CipherVec state, AESWord column, const int which)
+{
+#if USE_VEC_REG
+    state = op_PINSRUD (state, column, which);
+#else
+    CipherVec_AES_u u;
+    u.state = state;
+    u.columns [which] = column;
+    state = u.state;
+#endif
+    return state;
+}
+
+
+/* ======================================================================
+ * FIPS-197 5.1.4
+ *
+ * The AddRoundKey transformation is a sinple exclusive or of all 128 bits
+ * in the current block against a round key.  This operation is used in all
+ * Cipher and EqInvCipher rounds
+ *
+ * With vector types it is a single operation that with vector registers is
+ * a single op-code.
+ */
+static __inline__ 
+CipherVec AESBCMEMBER(AddRoundKey) (CipherVec state, CipherVec round_key)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+CipherVec AESBCMEMBER(AddRoundKey) (CipherVec state, CipherVec round_key)
+{
+    return AESBCMEMBER(VecXor) (state, round_key);
+}
+
+
+/* ======================================================================
+ * FIPS-197 5.1.2
+ *
+ * FIPS 197 describes the state in column major format
+ * while C and assembly programmers tend to think in row major
+ * The byte order is 0,1,2,3,,...F as shown in the first diagram.
+ *
+ *  ShiftRows() is defined as leaving this state
+ * +---+---+---+---+     +---+---+---+---+
+ * | 0 | 4 | 8 | C |     | 0 | 4 | 8 | C |
+ * +---+---+---+---+     +---+---+---+---+
+ * | 1 | 5 | 9 | D |     | 5 | 9 | D | 1 |
+ * +---+---+---+---+     +---+---+---+---+
+ * | 2 | 6 | A | E |     | A | E | 2 | 6 |
+ * +---+---+---+---+     +---+---+---+---+
+ * | 3 | 7 | B | F |     | F | 3 | 7 | B |
+ * +---+---+---+---+     +---+---+---+---+
+ */
+static __inline__
+CipherVec AESBCMEMBER(ShiftRows) (CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(ShiftRows) (CipherVec state)
+{
+static const
+    CipherVec ShiftRowTable
+    /*   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
+    = {  0,  5, 10, 15,  4,  9, 14,  3,  8, 13,  2,  7, 12,  1,  6, 11 };
+
+    state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+    return state;
+}
+
+
+/* ======================================================================
+ * FIPS-197 5.3.1
+ *
+ * InvShiftRows() is defined as leaving this state
+ * +---+---+---+---+     +---+---+---+---+
+ * | 0 | 4 | 8 | C |     | 0 | 4 | 8 | C |
+ * +---+---+---+---+     +---+---+---+---+
+ * | 1 | 5 | 9 | D |     | D | 1 | 5 | 9 |
+ * +---+---+---+---+     +---+---+---+---+
+ * | 2 | 6 | A | E |     | A | E | 2 | 6 |
+ * +---+---+---+---+     +---+---+---+---+
+ * | 3 | 7 | B | F |     | 7 | B | F | 3 |
+ * +---+---+---+---+     +---+---+---+---+
+ */
+static __inline__
+CipherVec AESBCMEMBER(InvShiftRows) (CipherVec state)
+    __attribute__ ((always_inline));
+
+
+static __inline__
+CipherVec AESBCMEMBER(InvShiftRows) (CipherVec state)
+{
+    static const CipherVecByte InvShiftRowTable
+        /*   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
+        = {  0, 13, 10,  7,  4,  1, 14, 11,  8,  5,  2, 15, 12,  9,  6,  3 };
+
+    state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+    return state;
+}
+
+
+/* ======================================================================
+ * +---+---+---+---+     +---+---+---+---+
+ * | 0 | 4 | 8 | C |     | 3 | 7 | B | F |
+ * +---+---+---+---+     +---+---+---+---+
+ * | 1 | 5 | 9 | D |     | 0 | 4 | 8 | C |
+ * +---+---+---+---+     +---+---+---+---+
+ * | 2 | 6 | A | E |     | 1 | 5 | 9 | D |
+ * +---+---+---+---+     +---+---+---+---+
+ * | 3 | 7 | B | F |     | 2 | 6 | A | E |
+ * +---+---+---+---+     +---+---+---+---+
+ */
+static __inline__
+CipherVec AESBCMEMBER(RotBytesRight) (CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(RotBytesRight) (CipherVec state)
+{
+static const
+    CipherVec ShiftRowTable
+    /*   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
+    = {  3,  0,  1,  2,  7,  4,  5,  6, 11,  8,  9, 10, 15, 12, 13, 14 };
+
+    state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+    return state;
+}
+
+
+/* ======================================================================
+ * +---+---+---+---+     +---+---+---+---+
+ * | 0 | 4 | 8 | C |     | 1 | 5 | B | D |
+ * +---+---+---+---+     +---+---+---+---+
+ * | 1 | 5 | 9 | D |     | 2 | 6 | 8 | E |
+ * +---+---+---+---+     +---+---+---+---+
+ * | 2 | 6 | A | E |     | 3 | 7 | 9 | F |
+ * +---+---+---+---+     +---+---+---+---+
+ * | 3 | 7 | B | F |     | 0 | 4 | 8 | C |
+ * +---+---+---+---+     +---+---+---+---+
+ */
+static __inline__
+CipherVec AESBCMEMBER(RotBytesLeft) (CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(RotBytesLeft) (CipherVec state)
+{
+    static const CipherVec ShiftRowTable
+        /*   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
+        = {  1,  2,  3,  0,  5,  6,  7,  4,  9, 10, 11,  8, 13, 14, 15, 12 };
+
+    state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+    return state;
+}
+
+
+/* ======================================================================
+ * FIPS-197 5.1.1
+ */
+
+
+/*
+ * SubBytes replaces each byte in a state with a specific byte value from
+ * A Rijndael Substitution box
+ */
+static const 
+AESByte AESBCMEMBER(RijndaelSBox)[256] = 
+{
+/*        -0    -1    -2    -3    -4    -5    -6    -7    -8    -9    -A    -B    -C    -D    -E    -F */
+/* 0- */ 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
+/* 1- */ 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
+/* 2- */ 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
+/* 3- */ 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
+/* 4- */ 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
+/* 5- */ 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
+/* 6- */ 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
+/* 7- */ 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
+/* 8- */ 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
+/* 9- */ 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
+/* A- */ 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
+/* B- */ 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
+/* C- */ 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
+/* D- */ 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
+/* E- */ 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
+/* F- */ 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
+};
+
+
+#if 0
+static __inline__
+CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+{
+    CipherVec_AES_u u;
+    unsigned ix;
+
+    u.state = state;
+
+    for (ix = 0; ix < sizeof (u.bytes); ++ix)
+    {
+        u.bytes[ix] = AESBCMEMBER(RijndaelSBox)[u.bytes[ix]];
+    }
+
+    return u.state;
+}
+#endif
+
+/*
+ * SubWord performs the same operation as SubBytes but on
+ * the four bytes of a column and not a whole state
+ */
+static __inline__
+AESWord AESBCMEMBER(SubWord) (AESWord w)
+    __attribute__ ((always_inline));
+
+static __inline__
+AESWord AESBCMEMBER(SubWord) (AESWord w)
+{
+    AESColumn col;
+    unsigned ix;
+
+    col.word = w;
+    for (ix = 0; ix < sizeof (col); ++ix)
+        col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+    return col.word;
+}
+
+#if 0
+/*
+ * InvSubBytes replaces each byte in a state with a specific byte value from
+ * an Inversze Rijndael Substitution box.  That is InvSubBytes undoes SubBytes
+ */
+static const 
+uint8_t AESBCMEMBER(RijndaelInvSBox)[256] = 
+{
+/*        -0    -1    -2    -3    -4    -5    -6    -7    -8    -9    -A    -B    -C    -D    -E    -F */
+/* 0- */ 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
+/* 1- */ 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
+/* 2- */ 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
+/* 3- */ 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
+/* 4- */ 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
+/* 5- */ 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
+/* 6- */ 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
+/* 7- */ 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
+/* 8- */ 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
+/* 9- */ 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
+/* A- */ 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
+/* B- */ 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
+/* C- */ 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
+/* D- */ 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
+/* E- */ 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
+/* F- */ 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
+};
+
+
+static __inline__
+CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+{
+    CipherVec_AES_u u;
+    unsigned ix;
+
+    u.state = state;
+    for (ix = 0; ix < sizeof (u.bytes); ++ix)
+        u.bytes[ix] = AESBCMEMBER(RijndaelInvSBox)[u.bytes[ix]];
+
+    return u.state;
+}
+#endif
+
+static const
+CipherVec AESBCMEMBER(RijndaelSBoxV)[16] = 
+{
+/*     -0    -1    -2    -3    -4    -5    -6    -7    -8    -9    -A    -B    -C    -D    -E    -F */
+    { 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76 },
+    { 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0 },
+    { 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15 },
+    { 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75 },
+    { 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84 },
+    { 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF },
+    { 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8 },
+    { 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2 },
+    { 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73 },
+    { 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB },
+    { 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79 },
+    { 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08 },
+    { 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A },
+    { 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E },
+    { 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF },
+    { 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 }
+};
+
+static const
+CipherVec AESBCMEMBER(RijndaelInvSBoxV)[16] = 
+{
+/*     -0    -1    -2    -3    -4    -5    -6    -7    -8    -9    -A    -B    -C    -D    -E    -F */
+    { 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB },
+    { 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB },
+    { 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E },
+    { 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25 },
+    { 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92 },
+    { 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84 },
+    { 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06 },
+    { 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B },
+    { 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73 },
+    { 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E },
+    { 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B },
+    { 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4 },
+    { 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F },
+    { 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF },
+    { 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61 },
+    { 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D }
+};
+
+
+static const
+CipherVec lo_filter = { 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+                        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
+
+static __inline__
+CipherVec AESBCMEMBER(SubBytesInt) (CipherVec state, const CipherVec box [16])
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(SubBytesInt) (CipherVec state, const CipherVec box [16])
+{
+    CipherVec lo, hi, tmp, out;
+    unsigned ix;
+
+    out = vec_00;
+
+/*     DEBUG_CIPHER_VECTOR ("state", state); */
+    lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+/*     DEBUG_CIPHER_VECTOR ("lo", lo); */
+#if USE_VEC_REG
+    hi = op_PSRLDI128 (state, 4);
+/*     DEBUG_CIPHER_VECTOR ("hi", hi); */
+    hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+/*     DEBUG_CIPHER_VECTOR ("hi", hi); */
+#else
+    hi = AESBCMEMBER(VecDiv) (state, vec_10);
+/*     DEBUG_CIPHER_VECTOR ("hi", hi); */
+#endif
+
+    for (ix = 0; ix < sizeof (state); ++ix)
+    {
+        tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+/*         DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+        tmp = AESBCMEMBER(VecOr) (lo, tmp);
+/*         DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+        tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+/*         DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+        out = AESBCMEMBER(VecOr) (out, tmp);
+/*         DEBUG_CIPHER_VECTOR ("out", out); */
+        hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+/*         DEBUG_CIPHER_VECTOR ("hi", hi); */
+        hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+/*         DEBUG_CIPHER_VECTOR ("hi", hi); */
+    }
+/*     DEBUG_CIPHER_VECTOR ("out", out); */
+    return out;
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+{
+    return AESBCMEMBER(SubBytesInt) (state, AESBCMEMBER(RijndaelSBoxV));
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+{
+    return AESBCMEMBER(SubBytesInt) (state, AESBCMEMBER(RijndaelInvSBoxV));
+}
+
+
+/* ======================================================================
+ * FIPS-197 5.1.3
+ */
+
+/*
+ * there are no psllb or psrlb instructions so shift words not bytes
+ * and then cut off bits that would have been zeroed if there were
+ * such instructions
+ *
+ * 
+ */
+static const CipherVec FF_tab = 
+{ 0x00, 0x1B, 0x36, 0x2D, 0x6C, 0x77, 0x5A, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+static __inline__
+CipherVec AESBCMEMBER(FF_mul) (register CipherVec state, const int bits)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(FF_mul) (register CipherVec state, const int bits)
+{
+    CipherVec sl, sr;
+
+    assert (bits <= 8);
+
+    DEBUG_CIPHER_VECTOR ("state", state);
+    sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+    DEBUG_CIPHER_VECTOR ("sr", sr);
+    sl = AESBCMEMBER(VecSLLBI) (state, bits);
+    DEBUG_CIPHER_VECTOR ("sl", sl);
+    sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+    return AESBCMEMBER(VecXor)(sl, sr);
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(FF_mul_02) (CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(FF_mul_02) (register CipherVec state)
+{
+    DEBUG_CIPHER_VECTOR ("state", state);
+
+    state =  AESBCMEMBER(FF_mul) (state, 1);
+    DEBUG_CIPHER_VECTOR ("state", state);
+
+    return state;
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(FF_mul_04) (CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(FF_mul_04) (CipherVec state)
+{
+    DEBUG_CIPHER_VECTOR ("state", state);
+
+    state =  AESBCMEMBER(FF_mul) (state, 2);
+    DEBUG_CIPHER_VECTOR ("state", state);
+
+    return state;
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(FF_mul_08) (CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(FF_mul_08) (CipherVec state)
+{
+    DEBUG_CIPHER_VECTOR ("state", state);
+
+    state =  AESBCMEMBER(FF_mul) (state, 3);
+    DEBUG_CIPHER_VECTOR ("state", state);
+
+    return state;
+}
+
+
+static AESByte AESBCMEMBER(FFtable)[] = { 0x00, 0x1b, 0x36, 0x2d, 0x6c, 0x77, 0x5a, 0x41 };
+
+
+static __inline__ 
+AESByte AESBCMEMBER(FFtab) (uint8_t x)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+AESByte AESBCMEMBER(FFtab) (uint8_t x)
+{
+    return AESBCMEMBER(FFtable)[x];
+}
+
+
+static __inline__ 
+AESByte AESBCMEMBER(FFmul02) (AESByte b)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+AESByte AESBCMEMBER(FFmul02) (AESByte b)
+{
+    return (b << 1) ^ AESBCMEMBER(FFtab)(b >> 7);
+}
+
+
+static __inline__ 
+AESByte AESBCMEMBER(FFmul04) (AESByte b)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+AESByte AESBCMEMBER(FFmul04) (AESByte b)
+{
+    return (b << 2) ^ AESBCMEMBER(FFtab)(b >> 6);
+}
+
+
+static __inline__ 
+AESByte AESBCMEMBER(FFmul08) (AESByte b)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+AESByte AESBCMEMBER(FFmul08) (AESByte b)
+{
+    return (b << 3) ^ AESBCMEMBER(FFtab)(b >> 5);
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(MixColumns) (CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(MixColumns) (CipherVec state)
+{
+    register CipherVec c0, c1, c2, c3;
+    
+    c1 = AESBCMEMBER(RotBytesLeft) (state);
+    c2 = AESBCMEMBER(RotBytesLeft) (c1);
+    c3 = AESBCMEMBER(RotBytesLeft) (c2);
+    c0 = AESBCMEMBER(VecXor) (state, c1);
+
+
+#if USE_VEC_REG
+    c0 = AESBCMEMBER(FF_mul_02) (c0);
+#else
+    {
+        CipherVec_AES_u tmp;
+        unsigned ix;
+
+        tmp.state = c0;
+    
+        for (ix = 0; ix < sizeof tmp; ++ix)
+            tmp.bytes[ix] = AESBCMEMBER(FFmul02)(tmp.bytes[ix]);
+        c0 = tmp.state;
+    }
+#endif
+    c1 = AESBCMEMBER(VecXor) (c1, c2);
+    c1 = AESBCMEMBER(VecXor) (c1, c3);
+    c1 = AESBCMEMBER(VecXor) (c1, c0);
+
+    return c1;
+/* obsoleted 
+    CipherVec_AES_u in, out;
+    unsigned ix;
+
+    in.state = state;
+
+    for (ix = 0; ix < sizeof (out.bytes); ix += 4)
+    {
+        unsigned const s0 = in.bytes[ix + 0];
+        unsigned const s1 = in.bytes[ix + 1];
+        unsigned const s2 = in.bytes[ix + 2];
+        unsigned const s3 = in.bytes[ix + 3];
+
+        out.bytes[ix + 0] =      s1 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s0 ^ s1);
+        out.bytes[ix + 1] = s0      ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s1 ^ s2);
+        out.bytes[ix + 2] = s0 ^ s1      ^ s3 ^ AESBCMEMBER(FFmul02)(s2 ^ s3);
+        out.bytes[ix + 3] = s0 ^ s1 ^ s2      ^ AESBCMEMBER(FFmul02)(s3 ^ s0);
+    }
+    return out.state;
+*/
+}
+
+static __inline__
+CipherVec AESBCMEMBER(InvMixColumns) (CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(InvMixColumns) (CipherVec state)
+{
+#if USE_AES_NI
+    state = op_AESIMC (state);
+#else
+    register CipherVec r1, r2, r3, f2, f4, f8;
+
+    r1 = AESBCMEMBER(RotBytesLeft) (state);
+    r2 = AESBCMEMBER(RotBytesLeft) (r1);
+    r3 = AESBCMEMBER(RotBytesLeft) (r2);        
+
+    f4 = AESBCMEMBER(VecXor) (state, r2);
+    f2 = AESBCMEMBER(VecXor) (state, r1);
+    f8 = AESBCMEMBER(VecXor) (r2, r3);
+    state = AESBCMEMBER(VecXor) (f8, r1);
+    f8 = AESBCMEMBER(VecXor) (f8, f2);
+
+
+#if USE_VEC_REG
+    f2 = AESBCMEMBER(FF_mul) (f2,1);
+    f4 = AESBCMEMBER(FF_mul) (f4,2);
+    f8 = AESBCMEMBER(FF_mul) (f8,3);
+#else
+    {
+        CipherVec_AES_u fu2, fu4, fu8;
+        unsigned ix;
+
+        fu2.state = f2;
+        fu4.state = f4;
+        fu8.state = f8;
+
+        for (ix = 0; ix < sizeof fu2; ++ix)
+        {
+            fu2.bytes[ix] = AESBCMEMBER(FFmul02)(fu2.bytes[ix]);
+            fu4.bytes[ix] = AESBCMEMBER(FFmul04)(fu4.bytes[ix]);
+            fu8.bytes[ix] = AESBCMEMBER(FFmul08)(fu8.bytes[ix]);
+        }
+        f2 = fu2.state;
+        f4 = fu4.state;
+        f8 = fu8.state;
+    }
+#endif
+
+    state = AESBCMEMBER(VecXor) (state, f2);
+    state = AESBCMEMBER(VecXor) (state, f4);
+    state = AESBCMEMBER(VecXor) (state, f8);
+
+#endif
+
+    return state;
+/*
+    CipherVec_AES_u in, out;
+    unsigned ix;
+
+    in.state = state;
+
+    for (ix = 0; ix < sizeof (out.bytes); ix += AES_Nb)
+    {
+        AESWord s0 = in.bytes[ix + 0];
+        AESWord s1 = in.bytes[ix + 1];
+        AESWord s2 = in.bytes[ix + 2];
+        AESWord s3 = in.bytes[ix + 3];
+        AESWord p, q;
+
+        q =     AESBCMEMBER(FFmul08)(s0 ^ s1 ^ s2 ^ s3);
+        p = q ^ AESBCMEMBER(FFmul04)(s0 ^ s2);
+        q = q ^ AESBCMEMBER(FFmul04)(s1 ^ s3);
+
+        out.bytes[ix + 0] =      s1 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s0 ^ s1) ^ p;
+        out.bytes[ix + 1] = s0      ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s1 ^ s2) ^ q;
+        out.bytes[ix + 2] = s0 ^ s1      ^ s3 ^ AESBCMEMBER(FFmul02)(s2 ^ s3) ^ p;
+        out.bytes[ix + 3] = s0 ^ s1 ^ s2      ^ AESBCMEMBER(FFmul02)(s3 ^ s0) ^ q;
+    }
+
+    return out.state;
+*/
+}
+
+
+/* ======================================================================
+ * FIPS-197 5.2
+ */
+static const
+AESWord AESBCMEMBER(Rcon)[] = {
+    0x00000001, 0x00000002, 0x00000004, 0x00000008,
+    0x00000010, 0x00000020, 0x00000040, 0x00000080,
+    0x0000001B, 0x00000036
+};
+
+
+static __inline__
+AESWord AESBCMEMBER(RotWord) (AESWord w)
+    __attribute__ ((always_inline));
+
+static __inline__
+AESWord AESBCMEMBER(RotWord) (AESWord w)
+{
+    return (w >> 8) | (w << 24);
+}
+
+
+static __inline__
+AESWord AESBCMEMBER(GetWord) (const AESByte * pointer)
+    __attribute__ ((always_inline));
+
+static __inline__
+AESWord AESBCMEMBER(GetWord) (const AESByte * pointer)
+{
+    /*
+     * not portable to architectures which require aligned multibyte reads
+     * but as this only runs on Intel at this point it is fine for now
+     */
+    return *(AESWord*)pointer;
+}
+
+
+
+static __inline__
+void AESBCMEMBER(KeyExpansion) (CipherVec * r, const AESByte * key, unsigned Nr, unsigned Nk)
+{
+    AESWord * w = (AESWord*)r;
+    const AESWord * pRcon;
+    unsigned ix, limit;
+    AESWord temp;
+
+
+    DEBUG_KEYEXP(("%s (w (%p), key (%p), Nr (%u) Nk (%u))\n", __func__, w, key, Nr, Nk));
+
+    for (ix = 0; ix < Nk; ++ix)
+    {
+        DEBUG_KEYEXP(("i (dec): %u\n", ix));
+        temp = AESBCMEMBER(GetWord) (key+(ix*4));
+        w[ix] = temp;
+        DEBUG_KEYEXP(("kw[%i]: %0.8x\n", ix, temp));
+    }
+
+    limit = AES_Nb * (Nr + 1);
+    pRcon = AESBCMEMBER(Rcon);
+    DEBUG_KEYEXP(("Nk (%u) Nr (%u) limit (%u)\n", Nk, Nr, limit));
+        
+    for (; ix < limit; ++ix)
+    {
+
+        DEBUG_KEYEXP(("i (dec): %u %u\n", ix, limit));
+
+        /* temp should already be set */
+        DEBUG_KEYEXP(("temp: %0.8x\n", temp));
+        if ((ix % Nk) == 0)
+        {
+            temp = AESBCMEMBER(RotWord)(temp);
+            DEBUG_KEYEXP(("after RotWord: %0.8x \n", temp));
+            temp = AESBCMEMBER(SubWord) (temp);
+            DEBUG_KEYEXP(("after SubWord: %0.8x \n", temp));
+            DEBUG_KEYEXP(("Rcon [i/Nk]: %0.8x\n", *pRcon));
+            temp ^= *pRcon++;
+            DEBUG_KEYEXP(("after XOR with Rcon: %0.8x \n", temp));
+        }
+        else if ((Nk > 6) && ((ix % Nk) == 4))
+        {
+            temp = AESBCMEMBER(SubWord) (temp);
+            DEBUG_KEYEXP(("after SubWord: %0.8x \n", temp));
+        }
+        DEBUG_KEYEXP(("w[i-Nk]: %0.8x\n", w[ix-Nk]));
+        temp ^= w [ix - Nk];
+        DEBUG_KEYEXP(("kw[ix]: %0.8x\n", temp));
+        w [ix] = temp;
+    }
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(StateShiftLeft32) (CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateShiftLeft32) (CipherVec state)
+{
+#if (USE_VEC_REG)
+    static const CipherVec mask = { 0xFF, 0xFF, 0xFF, 0xFF, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
+    return AESBCMEMBER(PackShuffleBytes) (state, mask);
+#else
+    CipherVec_AES_u temp;
+
+    temp.state = state;
+    temp.columns[3] = temp.columns[2];
+    temp.columns[2] = temp.columns[1];
+    temp.columns[1] = temp.columns[0];
+    temp.columns[0] = 0;
+    return temp.state;
+#endif
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(StateShiftRight64) (CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateShiftRight64) (CipherVec state)
+{
+#if (USE_VEC_REG)
+    static const CipherVec mask = { 8, 9, 10, 11, 12, 13, 14, 15, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
+    return AESBCMEMBER(PackShuffleBytes) (state, mask);
+#else
+    CipherVec_AES_u temp;
+
+    temp.state = state;
+    temp.columns[0] = temp.columns[2];
+    temp.columns[1] = temp.columns[3];
+    temp.columns[2] = 0;
+    temp.columns[3] = 0;
+    return temp.state;
+#endif
+}
+
+
+static __inline__
+CipherVec AESBCMEMBER(StateShiftLeft64) (CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateShiftLeft64) (CipherVec state)
+{
+#if (USE_VEC_REG)
+    static const CipherVec mask = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0, 1, 2, 3, 4, 5, 6, 7 };
+    return AESBCMEMBER(PackShuffleBytes) (state, mask);
+#else
+    CipherVec_AES_u temp;
+
+    temp.state = state;
+    temp.columns[3] = temp.columns[2];
+    temp.columns[2] = temp.columns[1];
+    temp.columns[1] = temp.columns[0];
+    temp.columns[0] = 0;
+    return temp.state;
+#endif
+}
+
+
+/*
+ * incoming vector in words
+ *     W0:W1:W2:W3
+ *
+ * output vector in words
+ *     W3:W3:W3:W3
+ */
+static __inline__
+CipherVec AESBCMEMBER(StateDupColumn3) (CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateDupColumn3) (CipherVec state)
+{
+#if (USE_VEC_REG)
+    return op_PSHUFD128 (state,0xFF);
+#else
+    CipherVec_AES_u temp;
+
+    temp.state = state;
+    temp.columns[2] = temp.columns[3];
+    temp.columns[1] = temp.columns[3];
+    temp.columns[0] = temp.columns[3];
+    return temp.state;
+#endif
+}
+
+
+/*
+ * incoming vector in words
+ *     W0:W1:W2:W3
+ *
+ * output vector in words
+ *     W2:W2:W2:W2
+ */
+static __inline__
+CipherVec AESBCMEMBER(StateDupColumn2) (CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateDupColumn2) (CipherVec state)
+{
+#if (USE_VEC_REG)
+    return op_PSHUFD128 (state,0xAA);
+#else
+    CipherVec_AES_u temp;
+
+    temp.state = state;
+    temp.columns[3] = temp.columns[2];
+    temp.columns[1] = temp.columns[2];
+    temp.columns[0] = temp.columns[2];
+    return temp.state;
+#endif
+}
+
+
+/*
+ * incoming vector in words
+ *     W0:W1:W2:W3
+ *
+ * output vector in words
+ *     W2:W2:W2:W2
+ */
+static __inline__
+CipherVec AESBCMEMBER(StateDupColumn1) (CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateDupColumn1) (CipherVec state)
+{
+#if (USE_VEC_REG)
+    return op_PSHUFD128 (state,0x55);
+#else
+    CipherVec_AES_u temp;
+
+    temp.state = state;
+    temp.columns[3] = temp.columns[1];
+    temp.columns[2] = temp.columns[1];
+    temp.columns[0] = temp.columns[1];
+    return temp.state;
+#endif
+}
+
+
+/*
+ * incoming vector in words
+ *     W0:W1:W2:W3
+ *
+ * output vector in words
+ *     W0:W0:W0:W0
+ */
+static __inline__
+CipherVec AESBCMEMBER(StateDupColumn0) (CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateDupColumn0) (CipherVec state)
+{
+#if (USE_VEC_REG)
+    return op_PSHUFD128 (state,0x00);
+#else
+    CipherVec_AES_u temp;
+
+    temp.state = state;
+    temp.columns[3] = temp.columns[0];
+    temp.columns[2] = temp.columns[0];
+    temp.columns[1] = temp.columns[0];
+    return temp.state;
+#endif
+}
+
+
+/*
+ * incoming vector in words
+ *     W0:W1:W2:W3
+ *     X0:X1:X2:X3
+ *
+ * output vector in words
+ *     W0:W1:X0:X1
+ */
+static __inline__
+CipherVec AESBCMEMBER(StateMerge1) (CipherVec w, CipherVec x)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateMerge1) (CipherVec w, CipherVec x)
+{
+#if USE_VEC_REG
+    return op_SHUFPD (w, x, 0x00);
+#else
+    CipherVec_AES_u ww;
+    CipherVec_AES_u xx;
+
+    ww.state = w;
+    xx.state = x;
+
+    ww.columns[2] = xx.columns[0];
+    ww.columns[3] = xx.columns[1];
+
+    return ww.state;
+#endif
+}
+
+
+/*
+ * incoming vector in words
+ *     W0:W1:W2:W3
+ *     X0:X1:X2:X3
+ *
+ * output vector in words
+ *     X2:X3:W0:W1
+ */
+static __inline__
+CipherVec AESBCMEMBER(StateMerge2) (CipherVec w, CipherVec x)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateMerge2) (CipherVec w, CipherVec x)
+{
+#if USE_VEC_REG
+    return op_SHUFPD (w, x, 0x01);
+#else
+    CipherVec_AES_u ww;
+    CipherVec_AES_u xx;
+
+    ww.state = w;
+    xx.state = x;
+
+    ww.columns[0] = ww.columns[2];
+    ww.columns[1] = ww.columns[3];
+    ww.columns[2] = xx.columns[0];
+    ww.columns[3] = xx.columns[1];
+
+    return ww.state;
+#endif
+}
+
+
+/*
+ * incoming vector in words
+ *     W0:W1:W2:W3
+ *     X0:X1:X2:X3
+ *
+ * output vector in words
+ *     X2:X3:W0:W1
+ */
+static __inline__
+CipherVec AESBCMEMBER(StateMerge3) (CipherVec v0, CipherVec v1)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(StateMerge3) (CipherVec v0, CipherVec v1)
+{
+#if USE_VEC_REG
+    return op_SHUFPD (v0, v1, 0x02);
+#else
+    CipherVec_AES_u t0;
+    CipherVec_AES_u t1;
+
+    t0.state = v0;
+    t1.state = v1;
+
+    t0.columns[2] = t0.columns[0];
+    t0.columns[3] = t0.columns[1];
+    t0.columns[0] = t1.columns[2];
+    t0.columns[1] = t1.columns[3];
+
+    return t0.state;
+#endif
+}
+
+
+/*
+ * incoming vector in words
+ *     W0:W1:W2:W3
+ *
+ * output vector in words
+ *     W0:W0^W1:W0^W1^W2:W0^W1^W2^W3
+ */
+static __inline__
+CipherVec AESBCMEMBER(ShiftXorColumns) (CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(ShiftXorColumns) (CipherVec state)
+{
+#if USE_VEC
+    register CipherVec shift = state;
+
+    state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+    state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+    state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+
+    return state;
+#else
+    CipherVec_AES_u temp;
+
+    temp.state = state;
+
+    temp.columns[1] ^= temp.columns[0];
+    temp.columns[2] ^= temp.columns[1];
+    temp.columns[3] ^= temp.columns[2];
+
+    return temp.state;
+#endif
+}
+
+
+static __inline__ 
+CipherVec AESBCMEMBER(AesKeyGenAssist) (register CipherVec state, const int rcon)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+CipherVec AESBCMEMBER(AesKeyGenAssist) (register CipherVec state, const int rcon)
+{
+#if (USE_AES_NI)
+    return op_AESKEYGENASSIST (state, rcon);
+#else
+    CipherVec_AES_u in;
+    CipherVec_AES_u out;
+    AESWord rconw;
+
+    rconw = (AESWord)(AESByte)rcon;
+    in.state = state;
+
+    out.columns[0] = AESBCMEMBER(SubWord)(in.columns[1]);
+    out.columns[1] = AESBCMEMBER(RotWord)(out.columns[0]) ^ rconw;
+    out.columns[2] = AESBCMEMBER(SubWord)(in.columns[3]);
+    out.columns[3] = AESBCMEMBER(RotWord)(out.columns[2]) ^ rconw;
+
+    return out.state;
+#endif
+}
+
+
+static __inline__ 
+CipherVec AESBCMEMBER(AesKeyGenAssistColumn1) (register CipherVec state, const int rcon)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+CipherVec AESBCMEMBER(AesKeyGenAssistColumn1) (register CipherVec state, const int rcon)
+{
+#if (USE_AES_NI)
+    register CipherVec tmp = state;
+    tmp = op_AESKEYGENASSIST (tmp, rcon);
+    return  AESBCMEMBER(StateDupColumn1) (tmp);
+#else
+    CipherVec_AES_u u;
+    AESWord rconw;
+    AESWord temp;
+
+    rconw = (AESWord)(AESByte)rcon;
+    u.state = state;
+    temp  = AESBCMEMBER(SubWord)(u.columns[1]);
+    temp  = AESBCMEMBER(RotWord)(temp);
+    temp ^= rconw;
+
+    u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+    return u.state;
+#endif
+}
+
+
+static __inline__ 
+CipherVec AESBCMEMBER(AesKeyGenAssistColumn2) (register CipherVec state)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+CipherVec AESBCMEMBER(AesKeyGenAssistColumn2) (register CipherVec state)
+{
+#if (USE_AES_NI)
+    register CipherVec tmp = state;
+    tmp = op_AESKEYGENASSIST (tmp, 0);
+    return  AESBCMEMBER(StateDupColumn2) (tmp);
+#else
+    CipherVec_AES_u u;
+    AESWord temp;
+
+    u.state = state;
+    temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+
+    u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+    return u.state;
+#endif
+}
+
+
+static __inline__ 
+CipherVec AESBCMEMBER(AesKeyGenAssistColumn3) (register CipherVec state, const int rcon)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+CipherVec AESBCMEMBER(AesKeyGenAssistColumn3) (register CipherVec state, const int rcon)
+{
+#if (USE_AES_NI)
+    register CipherVec tmp = state;
+    tmp = op_AESKEYGENASSIST (tmp, rcon);
+    return  AESBCMEMBER(StateDupColumn3) (tmp);
+
+#else
+    register CipherVec vrcon;
+    register CipherVec tmp;
+
+    vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+    tmp = AESBCMEMBER(SubBytes) (state);
+    DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+    tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+    DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+    tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+    DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+    tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+    DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+    return tmp;
+
+#endif
+/*
+#elif USE_VEC && 1
+    register CipherVec tmp;
+    CipherVec_AES_u u;
+    
+    u.columns [3] = rcon;
+
+    tmp = AESBCMEMBER(SubBytes) (state);
+    DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+    tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+    DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+    tmp = AESBCMEMBER(VecXor)(tmp, u.state);
+    DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+    tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+    DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+    return tmp;
+
+#else
+    CipherVec_AES_u u;
+    AESWord rconw;
+    AESWord temp;
+
+    rconw = (AESWord)(AESByte)rcon;
+    u.state = state;
+    temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+    temp  = AESBCMEMBER(RotWord)(temp);
+    temp ^= rconw;
+
+    u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+    return u.state;
+#endif
+*/
+}
+
+
+#if USE_VEC
+static __inline__
+void AESBCMEMBER(KeyExpansion128) (CipherVec * round_keys, const AESByte * key)
+{
+    CipherVec state;
+    CipherVec kgastate;
+
+    state = AESBCMEMBER(StateIn) (key);
+    round_keys[0] = state;
+
+#define KE128(rcon,offset) \
+    kgastate = AESBCMEMBER(AesKeyGenAssistColumn3) (state, rcon); \
+    state = AESBCMEMBER(ShiftXorColumns) (state); \
+    state ^= kgastate; \
+    round_keys[offset] = state
+
+    KE128(0x01,1);
+    KE128(0x02,2);
+    KE128(0x04,3);
+    KE128(0x08,4);
+    KE128(0x10,5);
+    KE128(0x20,6);
+    KE128(0x40,7);
+    KE128(0x80,8);
+    KE128(0x1B,9);
+    KE128(0x36,10);
+}
+#else
+static __inline__
+void AESBCMEMBER(KeyExpansion128) (CipherVec * w, const AESByte * key)
+{
+    OUTMSG(("\n\n\n%s: Not my code\n\n\n",__func__));
+    AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_128, AES_Nk_128);
+}
+#endif
+
+
+#if USE_VEC
+static __inline__
+void AESBCMEMBER(KeyExpansion192) (CipherVec * round_keys, const AESByte * key)
+{
+    /* work on three blocks at a time which is two Nr worth
+     * we'll build it with 6 words in v0:v1 and 6 words in w0:w1
+     * but move them them into v0:v1:v2 before writing them to
+     * the key schedule
+     */
+
+    register CipherVec v0, v1, v2, v3, v4;
+    register CipherVec k;          /* we'll only need one of the key gen assist blocks at a time */
+
+/* pattern 0 */
+    v0  = AESBCMEMBER(StateIn) (key);              /* k0    : k1    : k2     : k3           */
+    v1  = AESBCMEMBER(StateIn) (key+8);            /* k2    : k3    : k4     : k5           */
+    v1  = AESBCMEMBER(StateShiftRight64) (v1);     /* k4    : k5    : 0      : 0            */
+
+    round_keys[0] = v0; /* K0:K1:K2:K3 */
+
+/* pattern 1 */
+/* start the working pattern with 6 ready words in v0:v1 */
+
+    k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+        (k = v1, 0x01);                            /* F(k5) : F(k5) : F(k5)  : F(k5)        */
+    v3  = AESBCMEMBER(ShiftXorColumns) (v0);       /* k0    : k0^k1 :k0^k1^k2:k0^k1^k2^k3   */
+    v3 ^= k;                                       /* k6    : k7    : k8     : k9           */
+    v4  = AESBCMEMBER(ShiftXorColumns) (v1);       /* k4    : k4^k5 : k4^k5  : k4^k5        */
+    k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k9    : k9    : k9     : k9           */
+    v4 ^= k;                                       /* k10   : k11   : k10    : k11          */
+    v1  = AESBCMEMBER(StateMerge1) (v1,v3);        /* k4    : k5    : k6     : k7           */
+    round_keys[1] = v1; /* K4:K5:K6:K7 */
+
+    v2  = AESBCMEMBER(StateMerge2) (v3,v4);        /* k8    : k9    : k10    : k11          */
+    round_keys[2] = v2; /* K8:K9:K10:K11 */
+
+/* pattern 2 */
+    v0  = AESBCMEMBER(ShiftXorColumns) (v3);       /* k6    : k6^k7 :k6^k7^k8:k6^k7^k8^k9   */
+    v1  = AESBCMEMBER(ShiftXorColumns) (v4);       /* k10   :k10^k11: k10^k11: k10^k11      */
+    k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+        (k = v2,0x02);                             /* F(k11): F(k11): F(k11) : F(k11)       */
+    v0 ^= k;                                       /* k12   : k13   : k14    : k15          */
+    round_keys[3] = v0; /* K12:K13:K14:K15 */
+    k   = AESBCMEMBER(StateDupColumn3) (k = v0);   /* k15   : k15   : k15    : k15          */
+    v1 ^= k;                                       /* k16   : k17   : k16    : k17          */
+
+
+/* pattern 1 */
+/* start the working pattern with 6 ready words in v0:v1 */
+
+    k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+        (k = v1,0x04);                             /* F(k17): F(k17): F(k17) : F(k17)       */
+    v3  = AESBCMEMBER(ShiftXorColumns) (v0);       /* k12   :k12^k13:k12^k13^k14:k12^k13^k14^k15 */
+    v3 ^= k;                                       /* k18   : k19   : k20    : k21          */
+    v4  = AESBCMEMBER(ShiftXorColumns) (v1);       /* k16   :k16^k17: k17    : 0            */
+    k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k21   : k21   : k21    : k21          */
+    v4 ^= k;                                       /* k22   : k23   : x      : x            */
+    v1  = AESBCMEMBER(StateMerge1) (v1,v3);        /* k16   : k17   : k18    : k19          */
+    round_keys[4] = v1; /* K16:K17:K18:K19 */
+
+    v2  = AESBCMEMBER(StateMerge2) (v3,v4);        /* k20   : k21   : k22    : k23          */
+    round_keys[5] = v2; /* K20:K21:K22:K23 */
+
+/* pattern 2 */
+    v0  = AESBCMEMBER(ShiftXorColumns) (v3);       /* k18   :k18^k19:k18^k19^k20:k18^k19^k20^k21 */
+    v1  = AESBCMEMBER(ShiftXorColumns) (v4);       /* k22   :k22^k23: k23    : 0            */
+    k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+        (k = v2,0x08);                             /* F(k23): F(k23): F(k23) : F(k23)       */
+    v0 ^= k;                                       /* k24   : k25   : k26    : k27          */
+    k   = AESBCMEMBER(StateDupColumn3) (k = v0);   /* k27   : k27   : k27    : k27          */
+    v1 ^= k;                                       /* k28   : k29   : x      : x            */
+
+    round_keys[6] = v0; /* K24:K25:K26:K27 */
+
+/* pattern 1 4-15 = 28-39 */
+/* start the working pattern with 6 ready words in v0:v1 */
+
+    k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+        (k = v1,0x10);                             /* F(k29): F(k29): F(k29) : F(k29)       */
+    v3  = AESBCMEMBER(ShiftXorColumns) (v0);       /* k24   :k24^k25:k24^k25^k26:k24^k25^k26^k27 */
+    v3 ^= k;                                       /* k30   : k31   : k32    : k33          */
+    v4  = AESBCMEMBER(ShiftXorColumns) (v1);       /* k26   :k28^k29: k29    : 0            */
+    k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k33   : k33   : k33    : k33          */
+    v4 ^= k;                                       /* k34   : k35   : x      : x            */
+    v1  = AESBCMEMBER(StateMerge1) (v1,v3);        /* k28   : k29   : k30    : k31          */
+
+    round_keys[7] = v1; /* K28:K29:K30:K31 */
+
+    v2  = AESBCMEMBER(StateMerge2) (v3,v4);        /* k32   : k33   : k34    : k35          */
+    round_keys[8] = v2; /* K32:K33:K34:K35 */
+/* pattern 2 */
+    v0  = AESBCMEMBER(ShiftXorColumns) (v3);       /* k30   :k30^k31:k30^k31^k32:k30^k31^k32^k33 */
+    v1  = AESBCMEMBER(ShiftXorColumns) (v4);       /* k26   :k26^k27: k27    : 0            */
+    k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+        (k = v2,0x20);                             /* F(k35): F(k35): F(k35) : F(k35)       */
+    v0 ^= k;                                       /* k36   : k37   : k38    : k39          */
+    k   = AESBCMEMBER(StateDupColumn3) (v0);       /* k39   : k39   : k39    : k39          */
+    v1 ^= k;                                       /* k40   : k41   : x      : x            */
+
+    round_keys[9] = v0; /* K36:K37:K38:K39 */
+
+/* pattern 1 4-15 = 40-55 but we only need through 51 so we change from pattern 2 to pattern 3 */
+/* start the working pattern with 6 ready words in v0:v1 */
+
+    k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+        (k = v1,0x40);                             /* F(k41): F(k41): F(k41) : F(k41)       */
+    v3  = AESBCMEMBER(ShiftXorColumns) (v0);       /* k36   :k36^k37:k36^k37^k38:k36^k37^k38^k39 */
+    v4  = AESBCMEMBER(ShiftXorColumns) (v1);       /* k40   :k40^k41: x   5  : x            */
+    v3 ^= k;                                       /* k42   : k43   : k44    : k45          */
+    k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k45   : k45   : k45    : k45          */
+    v4 ^= k;                                       /* k46   : k47   : x      : x            */
+    v1  = AESBCMEMBER(StateMerge1) (v1,v3);        /* k40   : k41   : k42    : k43          */
+    round_keys[10] = v1; /* K40:K41:K42:K43 */
+    v2  = AESBCMEMBER(StateMerge2) (v3,v4);        /* k44   : k45   : k46    : k47          */
+    round_keys[11] = v2; /* K44:K45:K46:K47 */
+
+/* pattern 3 */
+    v0  = AESBCMEMBER(ShiftXorColumns) (v3);       /* k42   :k42^k43:k42^k43^k44:k42^k43^k44^k45  */
+    k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+                                       (v2,0x80);  /* F(k47): F(k47): F(k47) : F(k47)       */
+    v0 ^= k;                                       /* k48   : k49   : k50    : k51          */
+    round_keys[12] = v0;                           /* K48:K49:K50:K51 */
+}
+#else
+static __inline__
+void AESBCMEMBER(KeyExpansion192) (CipherVec * w, const AESByte * key)
+{
+    AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_192, AES_Nk_192);
+}
+#endif
+
+
+
+
+/* ----- */
+
+#if USE_VEC || 1
+static __inline__
+void AESBCMEMBER(KeyExpansion256) (CipherVec * round_keys, const AESByte * key)
+{
+    CipherVec v0, v1;
+    CipherVec k;
+
+    v0 = AESBCMEMBER (StateIn) (key);
+    v1 = AESBCMEMBER (StateIn) (key + sizeof v0);
+
+    round_keys[0] = v0; /* k0  : k1  : k2  : k3  */
+    round_keys[1] = v1; /* k4  : k5  : k6  : k7  */
+
+#define KE256_1(offset,rcon)                            \
+    k   = AESBCMEMBER(AesKeyGenAssistColumn3)(v1,rcon); \
+    v0  = AESBCMEMBER(ShiftXorColumns) (v0);            \
+    v0  = AESBCMEMBER(VecXor) (v0, k);                  \
+    round_keys[offset] = v0
+
+#define KE256_2(offset) \
+    k   = AESBCMEMBER(AesKeyGenAssistColumn2)(v0);      \
+    v1  = AESBCMEMBER(ShiftXorColumns) (v1);            \
+    v1  = AESBCMEMBER(VecXor) (v1, k);                  \
+    round_keys[offset] = v1
+
+    KE256_1(2,0x01);    /* k8  : k9  : k10 : k11 */
+    KE256_2(3);         /* k12 : k13 : k14 : k15 */
+    KE256_1(4,0x02);    /* k16 : k17 : k18 : k19 */
+    KE256_2(5);         /* k20 : k21 : k22 : k23 */
+    KE256_1(6,0x04);    /* k24 : k25 : k26 : k27 */
+    KE256_2(7);         /* k28 : k29 : k30 : k31 */
+    KE256_1(8,0x08);    /* k32 : k33 : k34 : k35 */
+    KE256_2(9);         /* k36 : k37 : k38 : k39 */
+    KE256_1(10,0x10);   /* k40 : k41 : k42 : k43 */
+    KE256_2(11);        /* k44 : k45 : k46 : k47 */
+    KE256_1(12,0x20);   /* k48 : k49 : k50 : k51 */
+    KE256_2(13);        /* k52 : k53 : k54 : k55 */
+    KE256_1(14,0x40);   /* k56 : k57 : k58 : k59 */
+}
+#else
+static __inline__
+void AESBCMEMBER(KeyExpansion256) (CipherVec * w, const AESByte * key)
+{
+    AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_256, AES_Nk_256);
+}
+#endif
+
+
+static __inline__
+void AESBCMEMBER(EqInvKeyExpansion) (CipherVec * r, const CipherVec * dr, unsigned Nr)
+{
+    unsigned ix, jx;
+
+    jx = Nr;
+    ix = 0;
+    r[ix++] = dr[jx--];
+    while (jx)
+        r[ix++] = AESBCMEMBER(InvMixColumns)(dr[jx--]);
+    r[ix] = dr[jx];
+}
+
+
+static __inline__
+void AESBCMEMBER(EqInvKeyExpansion128) (CipherVec * w, const CipherVec * kw)
+{
+    AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_128);
+}
+
+
+static __inline__
+void AESBCMEMBER(EqInvKeyExpansion192) (CipherVec * w, const CipherVec * kw)
+{
+    AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_192);
+}
+
+
+static __inline__
+void AESBCMEMBER(EqInvKeyExpansion256) (CipherVec * w, const CipherVec * kw)
+{
+    AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_256);
+}
+
+
+/*
+ * Cipher First Round
+ */
+static __inline__ 
+CipherVec AESBCMEMBER(FirstRound) (CipherVec state, const CipherVec round_keys)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+CipherVec AESBCMEMBER(FirstRound) (CipherVec state, const CipherVec round_keys)
+{
+    DEBUG_CIPHER_VECTOR("Start of Round", state);
+
+    DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+
+    state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+
+    DEBUG_CIPHER_VECTOR("End 1st Round", state);
+
+    return state;
+}
+
+
+static __inline__ 
+CipherVec AESBCMEMBER(MiddleRound) (register CipherVec state,
+                                    register const CipherVec round_keys)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+CipherVec AESBCMEMBER(MiddleRound) (register CipherVec state,
+                                    register const CipherVec round_keys)
+{
+#if _DEBUGGING
+    CipherVec mstate;
+    CipherVec mround_keys;
+
+    mstate = state;
+    mround_keys = round_keys;
+
+    DEBUG_CIPHER_VECTOR("Start of Round", mstate);
+
+#endif
+
+#if USE_AES_NI
+    state = op_AESENC (state, round_keys);
+#else
+    state = AESBCMEMBER(SubBytes) (state);
+
+    DEBUG_CIPHER_VECTOR("After SubBytes", state);
+
+    state = AESBCMEMBER(ShiftRows) (state);
+
+    DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+
+    state = AESBCMEMBER(MixColumns) (state);
+
+    /* ommited n on purpose */
+    DEBUG_CIPHER_VECTOR("After MixColum", state);
+
+    state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+#endif
+    DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+    DEBUG_CIPHER_VECTOR("End of Round", state);
+
+    return state;
+}
+
+
+static __inline__ 
+CipherVec AESBCMEMBER(LastRound) (register CipherVec state, register CipherVec round_keys)
+    __attribute__ ((always_inline));
+
+static __inline__ 
+CipherVec AESBCMEMBER(LastRound) (register CipherVec state, register CipherVec round_keys)
+{
+    DEBUG_CIPHER_VECTOR("Start of Round", state);
+
+#if USE_AES_NI
+    state = op_AESENCLAST (state, round_keys);
+#else
+    state = AESBCMEMBER(SubBytes) (state);
+
+    DEBUG_CIPHER_VECTOR("After SubBytes", state);
+
+    state = AESBCMEMBER(ShiftRows) (state);
+
+    DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+
+    state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+#endif
+    DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+    DEBUG_CIPHER_VECTOR("End of Round", state);
+
+    return state;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Cipher
+ */
+/*
+ * 
+This implementation as stated
+ * above for simplifaction broke out the three types of rounds into
+ * first round, middle rounds, and last round.  This approach was taken
+ * for ease of coding for optimization using smaller bytes of code
+ * but inlining of the functions for efficiency
+ */
+static __inline__ 
+CipherVec AESBCMEMBER(Cipher) (CipherVec state, const CipherVec * key,
+                            unsigned Nr)
+{
+    unsigned ix = 0;
+
+    state = AESBCMEMBER(FirstRound) (state, key[ix++]);
+
+    for ( ; ix < Nr; ++ix)
+        state = AESBCMEMBER(MiddleRound) (state, key[ix] );
+
+    return AESBCMEMBER(LastRound) (state, key[ix]);
+}
+
+
+/* 
+ * Section 5.1 of FIPS 197
+ *
+ *   This set of routines implements our structured wrapping of the 
+ *   FIPS-197 Section 5.3.5 Equivalent Inverse Cipher.  In particular
+ *   figure 15 Pseudo Code for the Equivalent Inverse Cipher.
+ *
+ *   The FIPS pseudocode has a single function which we have broken out 
+ *   into three kinds of rounds - first round, middle rounds and last
+ *   round as we have also done with the cipher rountine.
+ *
+ *   The EqInvCipher operates on whole cipher blocks so the Byte and Block
+ *   code is the same here until subroutines of the round functions are
+ *   called.  
+ */
+
+/* 
+ * First round of equivalent inverse cipher is merely an XOR against the
+ * round key.
+ */
+static __inline__
+CipherVec AESBCMEMBER(EqInvFirstRound) (CipherVec state, CipherVec round_keys)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(EqInvFirstRound) (CipherVec state, CipherVec round_keys)
+{
+    DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+
+    state =  AESBCMEMBER(AddRoundKey) (state, round_keys);
+
+    DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+    DEBUG_INVCIPHER_VECTOR("End of Round", state);
+    return state;
+}
+
+
+/*
+ * middle rounds of the equivalent inverse cipher perform four steps
+ *   InvSubBytes (inverse substitute bytes
+ *   InvShiftRows (inverse shift rows
+ *   InvMixColumns (inverse mix columns)
+ *   AddRoundKey   (xor against the round key)
+ *
+ * the AES-NI instruction set from until implments all four steps with 
+ * a single instruction
+ */
+
+static __inline__
+CipherVec AESBCMEMBER(EqInvMiddleRound) (register CipherVec state,
+                                         register CipherVec round_keys)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(EqInvMiddleRound) (register CipherVec state,
+                                         register CipherVec round_keys)
+{
+#if _DEBUGGING
+    CipherVec mstate;
+    CipherVec mround_keys;
+
+    mstate = state;
+    mround_keys = round_keys;
+#endif
+
+    DEBUG_INVCIPHER_VECTOR("Start of Round", mstate);
+
+    /* 
+     * AES-NI implmentation
+     */
+#if USE_AES_NI
+
+    state = op_AESDEC (state, round_keys);
+
+#else /* #if USE_AES_NI */
+
+    /*
+     * All other implementations
+     */
+    state = AESBCMEMBER(InvSubBytes) (state);
+
+# if _DEBUGGING
+    mstate = state;
+
+    DEBUG_INVCIPHER_VECTOR("After InvSubBy", mstate);
+# endif
+
+    state = AESBCMEMBER(InvShiftRows) (state);
+
+# if _DEBUGGING
+    mstate = state;
+
+    DEBUG_INVCIPHER_VECTOR("After InvShift", mstate);
+# endif
+
+    state = AESBCMEMBER(InvMixColumns) (state);
+
+# if _DEBUGGING
+    mstate = state;
+
+    DEBUG_INVCIPHER_VECTOR("After InvMixCo", mstate);
+# endif
+
+    state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+#endif
+
+#if _DEBUGGING
+    mstate = state;
+
+    DEBUG_INVCIPHER_VECTOR("Round Key", mround_keys);
+
+    DEBUG_INVCIPHER_VECTOR("End of Round", mstate);
+#endif /* #if USE_AES_NI */
+
+    return state;
+}
+
+
+/*
+ * The final round of the equivalent inverse cipher is the same as 
+ * the middle rounds with the ommission of the InvMixColumns step.
+ */
+static __inline__
+CipherVec AESBCMEMBER(EqInvLastRound) (register CipherVec state,
+                                       register CipherVec round_keys)
+    __attribute__ ((always_inline));
+
+static __inline__
+CipherVec AESBCMEMBER(EqInvLastRound) (register CipherVec state,
+                                       register CipherVec round_keys)
+{
+    DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+
+#if USE_AES_NI
+    state = op_AESDECLAST (state, round_keys);
+#else
+
+    state = AESBCMEMBER(InvSubBytes) (state);
+
+    DEBUG_INVCIPHER_VECTOR("After InvSubBy", state);
+
+    state = AESBCMEMBER(InvShiftRows) (state);
+
+    DEBUG_INVCIPHER_VECTOR("After InvShift", state);
+
+    state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+#endif
+    DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+    DEBUG_INVCIPHER_VECTOR("End of Round", state);
+
+    return state;
+}
+
+
+/*
+ * The EqInvCipher functions (is defined in Figure 15 'Pseudo Code for
+ * for the Equivalent Inverse Cipher.  This implementation as stated
+ * above for simplifaction broke out the three types of rounds into
+ * first round, middle rounds, and last round.  This approach was taken
+ * for ease of coding for optimization using smaller bytes of code
+ * but inlining of the functions for efficiency
+ */
+static /*__inline__*/
+CipherVec AESBCMEMBER(EqInvCipher) (CipherVec state, const CipherVec * key,
+                                    unsigned Nr)
+{
+    unsigned ix = 0;
+
+    state = AESBCMEMBER(EqInvFirstRound) (state, key[ix++]);
+
+    for ( ; ix < Nr; ++ix)
+        state = AESBCMEMBER(EqInvMiddleRound) (state, key[ix] );
+
+    return AESBCMEMBER(EqInvLastRound) (state, key[ix]);
+}
+
+
+/* ======================================================================
+ * This section of the file is the use of the cipher defined above within
+ * our BlockCipherObject.
+ *
+ * These are the functions that will be directly referenced in the vector
+ * table for the block cipher.  These are not specifically derived from
+ * the FIPS-197 document.
+ */
+#include "blockcipher-impl.h"
+
+typedef struct AES_CLASS AES_CLASS;
+
+static const char AESBCMEMBER(aes_ncbi_name) [] = CLASS_STRING(AES_CLASS);
+
+
+/* ----------------------------------------------------------------------
+ * Destroy
+ *   How large is the stored key for this cipher?  Not the user key used
+ *   to create this key (key schedule)
+ *
+ *   This is needed by KCipher to know how large the KCipher objecr is at
+ *   allocation and to know how much of a buffer each decryption/encryption is
+ */
+static
+void AESBCMEMBER(Destroy) (const BLOCKCIPHER_VEC_IMPL * self)
+{
+    /* we use a constant object so do nothing */
+}
+
+
+/* ----------------------------------------------------------------------
+ * BlockSize
+ */
+static
+uint32_t AESBCMEMBER(BlockSize) ()
+{
+    return (uint32_t) sizeof (AESBlock);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KeySize
+ *   How large is the stored key for this cipher?  Not the user key used
+ *   to create this key (key schedule)
+ *
+ *   This is needed by KCipher to know how large the KCipher objecr is at
+ *   allocation and to know how much of a buffer each decryption/encryption is
+ */
+static
+uint32_t AESBCMEMBER(KeySize) ()
+{
+    return (uint32_t) sizeof (AESKeySchedule);
+}
+
+
+/* ----------------------------------------------------------------------
+ * SetEncryptKey
+ *   The KCipher calls this to have the block cipher build an encryption
+ *   key in the KCipher object
+ *
+ */
+static
+rc_t AESBCMEMBER(SetEncryptKey) (void * encrypt_key, const char * user_key,
+                                 uint32_t user_key_size)
+{
+    rc_t rc;
+    AESKeySchedule * key;
+
+    rc = 0;
+    key = encrypt_key;
+
+    switch (user_key_size)
+    {
+    case AES_Nk_128 * sizeof (AESWord):
+        key->number_of_rounds = AES_Nr_128;
+        AESBCMEMBER(KeyExpansion128) (key->round_keys, (AESByte*)user_key);
+        break;
+
+    case AES_Nk_192 * sizeof (AESWord):
+        key->number_of_rounds = AES_Nr_192;
+        AESBCMEMBER(KeyExpansion192) (key->round_keys, (AESByte*)user_key);
+        break;
+
+    case AES_Nk_256 * sizeof (AESWord):
+        key->number_of_rounds = AES_Nr_256;
+        AESBCMEMBER(KeyExpansion256) (key->round_keys, (AESByte*)user_key);
+        break;
+
+    default:
+        key->number_of_rounds = 0;
+        memset (key, 0, sizeof (*key));
+        rc = RC (rcKrypto, rcBlockCipher, rcUpdating, rcParam, rcInvalid);
+        break;
+    }
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * SetDecryptKey
+ *   The KCipher calls this to have the block cipher build an decryption
+ *   key in the KCipher object
+ *
+ */
+static
+rc_t AESBCMEMBER(SetDecryptKey) (void * decrypt_key,
+                                 const char * user_key,
+                                 uint32_t user_key_size)
+{
+    AESKeySchedule encrypt_key;
+    rc_t rc;
+
+    rc = AESBCMEMBER(SetEncryptKey) (&encrypt_key, user_key, user_key_size);
+    if (rc == 0)
+    {
+        AESKeySchedule * key;
+
+        key = decrypt_key;
+
+        switch (key->number_of_rounds = encrypt_key.number_of_rounds)
+        {
+        case AES_Nr_128:
+            AESBCMEMBER(EqInvKeyExpansion128) (key->round_keys,
+                                               encrypt_key.round_keys);
+            break;
+
+        case AES_Nr_192:
+            AESBCMEMBER(EqInvKeyExpansion192) (key->round_keys,
+                                               encrypt_key.round_keys);
+            break;
+
+        case AES_Nr_256:
+            AESBCMEMBER(EqInvKeyExpansion256) (key->round_keys,
+                                               encrypt_key.round_keys);
+            break;
+        }
+    }
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Encrypt
+ *
+ *   Perform an encryption of a single block.  Chained modes and stream
+ *   cipher modes will call this multiple times.
+ *
+ */
+static
+CipherVec AESBCMEMBER(Encrypt) (CipherVec state,
+                                const void * encrypt_key)
+{
+    const AESKeySchedule * key = encrypt_key;
+    assert (key);
+
+    switch (key->number_of_rounds)
+    {
+    default:
+        state = vec_00;
+        break;
+
+    case AES_Nr_128:
+        state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_128);
+        break;
+
+    case AES_Nr_192:
+        state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_192);
+        break;
+
+    case AES_Nr_256:
+        state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_256);
+        break;
+    }
+
+    return state;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Decrypt
+ *
+ *   Perform a decryption of a single block.  Chained modes and stream
+ *   cipher modes will call this multiple times.
+ */
+static
+CipherVec AESBCMEMBER(Decrypt) (CipherVec state,
+                                const void * decrypt_key)
+{
+    const AESKeySchedule * key = decrypt_key;
+
+    assert (key);
+
+    switch (key->number_of_rounds)
+    {
+    default:
+        state = vec_00; /* for an illegal cipher key schedule just write zeroes */
+        break;
+
+    case AES_Nr_128:
+        state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+                                          AES_Nr_128);
+        break;
+
+    case AES_Nr_192:
+        state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+                                          AES_Nr_192);
+        break;
+
+    case AES_Nr_256:
+        state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+                                          AES_Nr_256);
+        break;
+    }
+
+    return state;
+}
+
+
+/* ----------------------------------------------------------------------
+ * MakeProcessorSupport
+ *
+ * Run-time check for support of this particular AES implmentation by
+ * checking the flags given via the cpuid instruction.
+ */
+static __inline__
+bool AESBCMEMBER(ProcessorSupport) ()
+{
+    uint32_t level = 1, a, b, c, d;
+    bool ret = true;
+
+    __cpuid (level, a, b, c, d);
+
+    DEBUG_OBJECT(("%s: level %x a %x, b %x c %x d %x\n",__func__, level, a,b,c,d));
+
+#if USE_AES_NI
+    /*
+     * Only one flag tells whether the AES-NI instructions
+     * are implmented in this CPU
+     */
+    if ( ! (c & bit_AES))
+    {
+        DEBUG_OBJECT(("%s: failed no AES\n",__func__));
+        ret = false;
+    } else
+#endif
+
+#if USE_VEC_REG
+    /*
+     * Several flags indicate different levels of SSE
+     * instruction implmentation
+     *
+     * we require SSE4.1
+     *
+     * that dates from 2006 so is most likely good enough
+     */
+        /* if ( ! (c & (bit_SSE4_2))
+    {
+        DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+        ret = false;
+    }
+
+    else */
+        if ( ! (c & bit_SSE4_1))
+    {
+        DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+        ret = false;
+    }
+
+    else if ( ! (c & bit_SSSE3))
+    {
+        DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+        ret = false;
+    }
+
+    else if ( ! (c & bit_SSE3))
+    {
+        DEBUG_OBJECT(("%s: failed no SSE3\n",__func__));
+        ret = false;
+    }
+
+    else if ( ! (d & bit_SSE2))
+    {
+        DEBUG_OBJECT(("%s: failed no SSE2\n",__func__));
+        ret = false;
+    }
+
+    else if ( ! (d & bit_SSE))
+    {
+        DEBUG_OBJECT(("%s: failed no SSE\n",__func__));
+        ret = false;
+    }
+#endif
+    DEBUG_OBJECT(("%s: passed\n",__func__));
+    return ret;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Init
+ *
+ *   Initialize the fields of this object.  The derived class will call this
+ *   during it's initialization.
+ *
+ * self      object to initialze
+ * vt        the virtual table of the derived class
+ * mgr       the cipher manager that is the construction factory block cipher
+ *           objects hold references to the manager while the manager merely
+ *           points at the block ciphers when all block ciphers are destroyed
+ *           the manager loses its references and it too can be destroyed if not
+ *           held elsewhere
+ * name      ASCIZ c-string the name of this class
+ */
+static const
+KBlockCipherVec_vt_v1 AESBCMEMBER(_vt_) = 
+{
+    { 1, 1 },
+
+    AESBCMEMBER(Destroy),
+    AESBCMEMBER(BlockSize),
+    AESBCMEMBER(KeySize),
+    AESBCMEMBER(SetEncryptKey),
+    AESBCMEMBER(SetDecryptKey),
+    AESBCMEMBER(Encrypt),
+    AESBCMEMBER(Decrypt)
+};
+
+
+/* ----------------------------------------------------------------------
+ * Make
+ *
+ * Create a new AES Block Cipher object.
+ * The processor is checked to see if this particular version is supported on
+ * this particular CPU.
+ */
+rc_t AESBCMEMBER(Make) (KBlockCipher ** new_obj)
+{
+    rc_t rc;
+
+    DEBUG_OBJECT(("%s: %p\n",__func__,new_obj));
+
+    /* Check parameter first */
+    if (new_obj == NULL)
+        rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+
+    else
+    {
+        *new_obj = NULL;
+
+        /* check for processor support of this flavor */
+        if ( ! AESBCMEMBER(ProcessorSupport)())
+            rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+
+        else
+        {
+            rc = 0;
+            *new_obj = (KBlockCipher*)&(AESBCMEMBER(_vt_));
+        }
+    }
+    return rc;
+}
+
+/* end of file lib/krypto/aes-ncbi.c */
diff --git a/libs/krypto/aes-ncbi.vec.pic.o.list b/libs/krypto/aes-ncbi.vec.pic.o.list
new file mode 100644
index 0000000..243c606
--- /dev/null
+++ b/libs/krypto/aes-ncbi.vec.pic.o.list
@@ -0,0 +1,74023 @@
+GAS LISTING /tmp/ccMa7HLZ.s 			page 1
+
+
+   1              		.file	"aes-ncbi.c"
+   2              		.section	.debug_abbrev,"", at progbits
+   3              	.Ldebug_abbrev0:
+   4              		.section	.debug_info,"", at progbits
+   5              	.Ldebug_info0:
+   6              		.section	.debug_line,"", at progbits
+   7              	.Ldebug_line0:
+   8 0000 3B260000 		.text
+   8      02007101 
+   8      00000101 
+   8      FB0E0D00 
+   8      01010101 
+   9              	.Ltext0:
+  10              		.type	bswap_32, @function
+  11              	bswap_32:
+  12              	.LFB509:
+  13              		.file 1 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h"
+   1:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** /*===========================================================================
+   2:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+   3:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *                            PUBLIC DOMAIN NOTICE
+   4:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *               National Center for Biotechnology Information
+   5:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+   6:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  This software/database is a "United States Government Work" under the
+   7:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  terms of the United States Copyright Act.  It was written as part of
+   8:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  the author's official duties as a United States Government employee and
+   9:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  thus cannot be copyrighted.  This software/database is freely available
+  10:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  to the public for use. The National Library of Medicine and the U.S.
+  11:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  Government have not placed any restriction on its use or reproduction.
+  12:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+  13:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  Although all reasonable efforts have been taken to ensure the accuracy
+  14:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  and reliability of the software and data, the NLM and the U.S.
+  15:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  Government do not and cannot warrant the performance or results that
+  16:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  may be obtained by using this software or data. The NLM and the U.S.
+  17:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  Government disclaim all warranties, express or implied, including
+  18:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  warranties of performance, merchantability or fitness for any particular
+  19:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  purpose.
+  20:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+  21:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  Please cite the author in any work or product based on this material.
+  22:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+  23:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * ===========================================================================
+  24:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+  25:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** */
+  26:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** 
+  27:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #ifndef _h_byteswap_
+  28:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #define _h_byteswap_
+  29:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** 
+  30:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #ifdef _BYTESWAP_H
+  31:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #warning "GNU byteswap.h being used"
+  32:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #else
+  33:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #define _BYTESWAP_H	1234
+  34:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** 
+  35:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #include <stdint.h>
+  36:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** 
+  37:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #ifdef __cplusplus
+  38:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** extern "C" {
+  39:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #endif
+  40:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 2
+
+
+  41:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** /* perform single instruction byte swap */
+  42:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** static __inline__ uint16_t bswap_16 ( uint16_t i )
+  43:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** {
+  44:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     register uint16_t rtn;
+  45:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     __asm__
+  46:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     (
+  47:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         "rorw $8, %w0"
+  48:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         : "=r" ( rtn )
+  49:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         : "0" ( i )
+  50:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         : "cc"
+  51:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     );
+  52:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     return rtn;
+  53:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** }
+  54:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** 
+  55:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** /* perform single instruction byte swap */
+  56:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** static __inline__ uint32_t bswap_32 ( uint32_t i )
+  57:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** {
+  14              		.loc 1 57 0
+  15              		.cfi_startproc
+  16 0000 55       		pushq	%rbp
+  17              	.LCFI0:
+  18              		.cfi_def_cfa_offset 16
+  19 0001 4889E5   		movq	%rsp, %rbp
+  20              		.cfi_offset 6, -16
+  21              	.LCFI1:
+  22              		.cfi_def_cfa_register 6
+  23 0004 53       		pushq	%rbx
+  24 0005 897DF4   		movl	%edi, -12(%rbp)
+  58:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     register uint32_t rtn;
+  59:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     __asm__
+  25              		.loc 1 59 0
+  26 0008 8B45F4   		movl	-12(%rbp), %eax
+  27 000b 89C3     		movl	%eax, %ebx
+  28              		.cfi_offset 3, -24
+  29              	#APP
+  30              	# 59 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h" 1
+  60              	    (
+  61:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         "bswap %0"
+  62:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         : "=r" ( rtn )
+  63:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         : "0" ( i )
+  64:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         : "cc"
+  65:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     );
+  66:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     return rtn;
+  31              		bswap %ebx
+  32              	# 0 "" 2
+  33              		.loc 1 66 0
+  34              	#NO_APP
+  35 000f 89D8     		movl	%ebx, %eax
+  67:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** }
+  36              		.loc 1 67 0
+  37 0011 5B       		popq	%rbx
+  38 0012 C9       		leave
+  39 0013 C3       		ret
+  40              		.cfi_endproc
+  41              	.LFE509:
+  42              		.size	bswap_32, .-bswap_32
+  43              		.section	.rodata
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 3
+
+
+  44              		.align 16
+  45              		.type	vec_00, @object
+  46              		.size	vec_00, 16
+  47              	vec_00:
+  48 0000 00000000 		.zero	16
+  48      00000000 
+  48      00000000 
+  48      00000000 
+  49              		.align 16
+  50              		.type	vec_01, @object
+  51              		.size	vec_01, 16
+  52              	vec_01:
+  53 0010 01       		.byte	1
+  54 0011 01       		.byte	1
+  55 0012 01       		.byte	1
+  56 0013 01       		.byte	1
+  57 0014 01       		.byte	1
+  58 0015 01       		.byte	1
+  59 0016 01       		.byte	1
+  60 0017 01       		.byte	1
+  61 0018 01       		.byte	1
+  62 0019 01       		.byte	1
+  63 001a 01       		.byte	1
+  64 001b 01       		.byte	1
+  65 001c 01       		.byte	1
+  66 001d 01       		.byte	1
+  67 001e 01       		.byte	1
+  68 001f 01       		.byte	1
+  69              		.align 16
+  70              		.type	vec_0F, @object
+  71              		.size	vec_0F, 16
+  72              	vec_0F:
+  73 0020 0F       		.byte	15
+  74 0021 0F       		.byte	15
+  75 0022 0F       		.byte	15
+  76 0023 0F       		.byte	15
+  77 0024 0F       		.byte	15
+  78 0025 0F       		.byte	15
+  79 0026 0F       		.byte	15
+  80 0027 0F       		.byte	15
+  81 0028 0F       		.byte	15
+  82 0029 0F       		.byte	15
+  83 002a 0F       		.byte	15
+  84 002b 0F       		.byte	15
+  85 002c 0F       		.byte	15
+  86 002d 0F       		.byte	15
+  87 002e 0F       		.byte	15
+  88 002f 0F       		.byte	15
+  89              		.align 16
+  90              		.type	vec_10, @object
+  91              		.size	vec_10, 16
+  92              	vec_10:
+  93 0030 10       		.byte	16
+  94 0031 10       		.byte	16
+  95 0032 10       		.byte	16
+  96 0033 10       		.byte	16
+  97 0034 10       		.byte	16
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 4
+
+
+  98 0035 10       		.byte	16
+  99 0036 10       		.byte	16
+ 100 0037 10       		.byte	16
+ 101 0038 10       		.byte	16
+ 102 0039 10       		.byte	16
+ 103 003a 10       		.byte	16
+ 104 003b 10       		.byte	16
+ 105 003c 10       		.byte	16
+ 106 003d 10       		.byte	16
+ 107 003e 10       		.byte	16
+ 108 003f 10       		.byte	16
+ 109              		.align 32
+ 110              		.type	KAESBlockCipherVecRijndaelSBox, @object
+ 111              		.size	KAESBlockCipherVecRijndaelSBox, 256
+ 112              	KAESBlockCipherVecRijndaelSBox:
+ 113 0040 63       		.byte	99
+ 114 0041 7C       		.byte	124
+ 115 0042 77       		.byte	119
+ 116 0043 7B       		.byte	123
+ 117 0044 F2       		.byte	-14
+ 118 0045 6B       		.byte	107
+ 119 0046 6F       		.byte	111
+ 120 0047 C5       		.byte	-59
+ 121 0048 30       		.byte	48
+ 122 0049 01       		.byte	1
+ 123 004a 67       		.byte	103
+ 124 004b 2B       		.byte	43
+ 125 004c FE       		.byte	-2
+ 126 004d D7       		.byte	-41
+ 127 004e AB       		.byte	-85
+ 128 004f 76       		.byte	118
+ 129 0050 CA       		.byte	-54
+ 130 0051 82       		.byte	-126
+ 131 0052 C9       		.byte	-55
+ 132 0053 7D       		.byte	125
+ 133 0054 FA       		.byte	-6
+ 134 0055 59       		.byte	89
+ 135 0056 47       		.byte	71
+ 136 0057 F0       		.byte	-16
+ 137 0058 AD       		.byte	-83
+ 138 0059 D4       		.byte	-44
+ 139 005a A2       		.byte	-94
+ 140 005b AF       		.byte	-81
+ 141 005c 9C       		.byte	-100
+ 142 005d A4       		.byte	-92
+ 143 005e 72       		.byte	114
+ 144 005f C0       		.byte	-64
+ 145 0060 B7       		.byte	-73
+ 146 0061 FD       		.byte	-3
+ 147 0062 93       		.byte	-109
+ 148 0063 26       		.byte	38
+ 149 0064 36       		.byte	54
+ 150 0065 3F       		.byte	63
+ 151 0066 F7       		.byte	-9
+ 152 0067 CC       		.byte	-52
+ 153 0068 34       		.byte	52
+ 154 0069 A5       		.byte	-91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 5
+
+
+ 155 006a E5       		.byte	-27
+ 156 006b F1       		.byte	-15
+ 157 006c 71       		.byte	113
+ 158 006d D8       		.byte	-40
+ 159 006e 31       		.byte	49
+ 160 006f 15       		.byte	21
+ 161 0070 04       		.byte	4
+ 162 0071 C7       		.byte	-57
+ 163 0072 23       		.byte	35
+ 164 0073 C3       		.byte	-61
+ 165 0074 18       		.byte	24
+ 166 0075 96       		.byte	-106
+ 167 0076 05       		.byte	5
+ 168 0077 9A       		.byte	-102
+ 169 0078 07       		.byte	7
+ 170 0079 12       		.byte	18
+ 171 007a 80       		.byte	-128
+ 172 007b E2       		.byte	-30
+ 173 007c EB       		.byte	-21
+ 174 007d 27       		.byte	39
+ 175 007e B2       		.byte	-78
+ 176 007f 75       		.byte	117
+ 177 0080 09       		.byte	9
+ 178 0081 83       		.byte	-125
+ 179 0082 2C       		.byte	44
+ 180 0083 1A       		.byte	26
+ 181 0084 1B       		.byte	27
+ 182 0085 6E       		.byte	110
+ 183 0086 5A       		.byte	90
+ 184 0087 A0       		.byte	-96
+ 185 0088 52       		.byte	82
+ 186 0089 3B       		.byte	59
+ 187 008a D6       		.byte	-42
+ 188 008b B3       		.byte	-77
+ 189 008c 29       		.byte	41
+ 190 008d E3       		.byte	-29
+ 191 008e 2F       		.byte	47
+ 192 008f 84       		.byte	-124
+ 193 0090 53       		.byte	83
+ 194 0091 D1       		.byte	-47
+ 195 0092 00       		.byte	0
+ 196 0093 ED       		.byte	-19
+ 197 0094 20       		.byte	32
+ 198 0095 FC       		.byte	-4
+ 199 0096 B1       		.byte	-79
+ 200 0097 5B       		.byte	91
+ 201 0098 6A       		.byte	106
+ 202 0099 CB       		.byte	-53
+ 203 009a BE       		.byte	-66
+ 204 009b 39       		.byte	57
+ 205 009c 4A       		.byte	74
+ 206 009d 4C       		.byte	76
+ 207 009e 58       		.byte	88
+ 208 009f CF       		.byte	-49
+ 209 00a0 D0       		.byte	-48
+ 210 00a1 EF       		.byte	-17
+ 211 00a2 AA       		.byte	-86
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 6
+
+
+ 212 00a3 FB       		.byte	-5
+ 213 00a4 43       		.byte	67
+ 214 00a5 4D       		.byte	77
+ 215 00a6 33       		.byte	51
+ 216 00a7 85       		.byte	-123
+ 217 00a8 45       		.byte	69
+ 218 00a9 F9       		.byte	-7
+ 219 00aa 02       		.byte	2
+ 220 00ab 7F       		.byte	127
+ 221 00ac 50       		.byte	80
+ 222 00ad 3C       		.byte	60
+ 223 00ae 9F       		.byte	-97
+ 224 00af A8       		.byte	-88
+ 225 00b0 51       		.byte	81
+ 226 00b1 A3       		.byte	-93
+ 227 00b2 40       		.byte	64
+ 228 00b3 8F       		.byte	-113
+ 229 00b4 92       		.byte	-110
+ 230 00b5 9D       		.byte	-99
+ 231 00b6 38       		.byte	56
+ 232 00b7 F5       		.byte	-11
+ 233 00b8 BC       		.byte	-68
+ 234 00b9 B6       		.byte	-74
+ 235 00ba DA       		.byte	-38
+ 236 00bb 21       		.byte	33
+ 237 00bc 10       		.byte	16
+ 238 00bd FF       		.byte	-1
+ 239 00be F3       		.byte	-13
+ 240 00bf D2       		.byte	-46
+ 241 00c0 CD       		.byte	-51
+ 242 00c1 0C       		.byte	12
+ 243 00c2 13       		.byte	19
+ 244 00c3 EC       		.byte	-20
+ 245 00c4 5F       		.byte	95
+ 246 00c5 97       		.byte	-105
+ 247 00c6 44       		.byte	68
+ 248 00c7 17       		.byte	23
+ 249 00c8 C4       		.byte	-60
+ 250 00c9 A7       		.byte	-89
+ 251 00ca 7E       		.byte	126
+ 252 00cb 3D       		.byte	61
+ 253 00cc 64       		.byte	100
+ 254 00cd 5D       		.byte	93
+ 255 00ce 19       		.byte	25
+ 256 00cf 73       		.byte	115
+ 257 00d0 60       		.byte	96
+ 258 00d1 81       		.byte	-127
+ 259 00d2 4F       		.byte	79
+ 260 00d3 DC       		.byte	-36
+ 261 00d4 22       		.byte	34
+ 262 00d5 2A       		.byte	42
+ 263 00d6 90       		.byte	-112
+ 264 00d7 88       		.byte	-120
+ 265 00d8 46       		.byte	70
+ 266 00d9 EE       		.byte	-18
+ 267 00da B8       		.byte	-72
+ 268 00db 14       		.byte	20
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 7
+
+
+ 269 00dc DE       		.byte	-34
+ 270 00dd 5E       		.byte	94
+ 271 00de 0B       		.byte	11
+ 272 00df DB       		.byte	-37
+ 273 00e0 E0       		.byte	-32
+ 274 00e1 32       		.byte	50
+ 275 00e2 3A       		.byte	58
+ 276 00e3 0A       		.byte	10
+ 277 00e4 49       		.byte	73
+ 278 00e5 06       		.byte	6
+ 279 00e6 24       		.byte	36
+ 280 00e7 5C       		.byte	92
+ 281 00e8 C2       		.byte	-62
+ 282 00e9 D3       		.byte	-45
+ 283 00ea AC       		.byte	-84
+ 284 00eb 62       		.byte	98
+ 285 00ec 91       		.byte	-111
+ 286 00ed 95       		.byte	-107
+ 287 00ee E4       		.byte	-28
+ 288 00ef 79       		.byte	121
+ 289 00f0 E7       		.byte	-25
+ 290 00f1 C8       		.byte	-56
+ 291 00f2 37       		.byte	55
+ 292 00f3 6D       		.byte	109
+ 293 00f4 8D       		.byte	-115
+ 294 00f5 D5       		.byte	-43
+ 295 00f6 4E       		.byte	78
+ 296 00f7 A9       		.byte	-87
+ 297 00f8 6C       		.byte	108
+ 298 00f9 56       		.byte	86
+ 299 00fa F4       		.byte	-12
+ 300 00fb EA       		.byte	-22
+ 301 00fc 65       		.byte	101
+ 302 00fd 7A       		.byte	122
+ 303 00fe AE       		.byte	-82
+ 304 00ff 08       		.byte	8
+ 305 0100 BA       		.byte	-70
+ 306 0101 78       		.byte	120
+ 307 0102 25       		.byte	37
+ 308 0103 2E       		.byte	46
+ 309 0104 1C       		.byte	28
+ 310 0105 A6       		.byte	-90
+ 311 0106 B4       		.byte	-76
+ 312 0107 C6       		.byte	-58
+ 313 0108 E8       		.byte	-24
+ 314 0109 DD       		.byte	-35
+ 315 010a 74       		.byte	116
+ 316 010b 1F       		.byte	31
+ 317 010c 4B       		.byte	75
+ 318 010d BD       		.byte	-67
+ 319 010e 8B       		.byte	-117
+ 320 010f 8A       		.byte	-118
+ 321 0110 70       		.byte	112
+ 322 0111 3E       		.byte	62
+ 323 0112 B5       		.byte	-75
+ 324 0113 66       		.byte	102
+ 325 0114 48       		.byte	72
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 8
+
+
+ 326 0115 03       		.byte	3
+ 327 0116 F6       		.byte	-10
+ 328 0117 0E       		.byte	14
+ 329 0118 61       		.byte	97
+ 330 0119 35       		.byte	53
+ 331 011a 57       		.byte	87
+ 332 011b B9       		.byte	-71
+ 333 011c 86       		.byte	-122
+ 334 011d C1       		.byte	-63
+ 335 011e 1D       		.byte	29
+ 336 011f 9E       		.byte	-98
+ 337 0120 E1       		.byte	-31
+ 338 0121 F8       		.byte	-8
+ 339 0122 98       		.byte	-104
+ 340 0123 11       		.byte	17
+ 341 0124 69       		.byte	105
+ 342 0125 D9       		.byte	-39
+ 343 0126 8E       		.byte	-114
+ 344 0127 94       		.byte	-108
+ 345 0128 9B       		.byte	-101
+ 346 0129 1E       		.byte	30
+ 347 012a 87       		.byte	-121
+ 348 012b E9       		.byte	-23
+ 349 012c CE       		.byte	-50
+ 350 012d 55       		.byte	85
+ 351 012e 28       		.byte	40
+ 352 012f DF       		.byte	-33
+ 353 0130 8C       		.byte	-116
+ 354 0131 A1       		.byte	-95
+ 355 0132 89       		.byte	-119
+ 356 0133 0D       		.byte	13
+ 357 0134 BF       		.byte	-65
+ 358 0135 E6       		.byte	-26
+ 359 0136 42       		.byte	66
+ 360 0137 68       		.byte	104
+ 361 0138 41       		.byte	65
+ 362 0139 99       		.byte	-103
+ 363 013a 2D       		.byte	45
+ 364 013b 0F       		.byte	15
+ 365 013c B0       		.byte	-80
+ 366 013d 54       		.byte	84
+ 367 013e BB       		.byte	-69
+ 368 013f 16       		.byte	22
+ 369              		.align 32
+ 370              		.type	KAESBlockCipherVecRijndaelSBoxV, @object
+ 371              		.size	KAESBlockCipherVecRijndaelSBoxV, 256
+ 372              	KAESBlockCipherVecRijndaelSBoxV:
+ 373 0140 63       		.byte	99
+ 374 0141 7C       		.byte	124
+ 375 0142 77       		.byte	119
+ 376 0143 7B       		.byte	123
+ 377 0144 F2       		.byte	-14
+ 378 0145 6B       		.byte	107
+ 379 0146 6F       		.byte	111
+ 380 0147 C5       		.byte	-59
+ 381 0148 30       		.byte	48
+ 382 0149 01       		.byte	1
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 9
+
+
+ 383 014a 67       		.byte	103
+ 384 014b 2B       		.byte	43
+ 385 014c FE       		.byte	-2
+ 386 014d D7       		.byte	-41
+ 387 014e AB       		.byte	-85
+ 388 014f 76       		.byte	118
+ 389 0150 CA       		.byte	-54
+ 390 0151 82       		.byte	-126
+ 391 0152 C9       		.byte	-55
+ 392 0153 7D       		.byte	125
+ 393 0154 FA       		.byte	-6
+ 394 0155 59       		.byte	89
+ 395 0156 47       		.byte	71
+ 396 0157 F0       		.byte	-16
+ 397 0158 AD       		.byte	-83
+ 398 0159 D4       		.byte	-44
+ 399 015a A2       		.byte	-94
+ 400 015b AF       		.byte	-81
+ 401 015c 9C       		.byte	-100
+ 402 015d A4       		.byte	-92
+ 403 015e 72       		.byte	114
+ 404 015f C0       		.byte	-64
+ 405 0160 B7       		.byte	-73
+ 406 0161 FD       		.byte	-3
+ 407 0162 93       		.byte	-109
+ 408 0163 26       		.byte	38
+ 409 0164 36       		.byte	54
+ 410 0165 3F       		.byte	63
+ 411 0166 F7       		.byte	-9
+ 412 0167 CC       		.byte	-52
+ 413 0168 34       		.byte	52
+ 414 0169 A5       		.byte	-91
+ 415 016a E5       		.byte	-27
+ 416 016b F1       		.byte	-15
+ 417 016c 71       		.byte	113
+ 418 016d D8       		.byte	-40
+ 419 016e 31       		.byte	49
+ 420 016f 15       		.byte	21
+ 421 0170 04       		.byte	4
+ 422 0171 C7       		.byte	-57
+ 423 0172 23       		.byte	35
+ 424 0173 C3       		.byte	-61
+ 425 0174 18       		.byte	24
+ 426 0175 96       		.byte	-106
+ 427 0176 05       		.byte	5
+ 428 0177 9A       		.byte	-102
+ 429 0178 07       		.byte	7
+ 430 0179 12       		.byte	18
+ 431 017a 80       		.byte	-128
+ 432 017b E2       		.byte	-30
+ 433 017c EB       		.byte	-21
+ 434 017d 27       		.byte	39
+ 435 017e B2       		.byte	-78
+ 436 017f 75       		.byte	117
+ 437 0180 09       		.byte	9
+ 438 0181 83       		.byte	-125
+ 439 0182 2C       		.byte	44
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 10
+
+
+ 440 0183 1A       		.byte	26
+ 441 0184 1B       		.byte	27
+ 442 0185 6E       		.byte	110
+ 443 0186 5A       		.byte	90
+ 444 0187 A0       		.byte	-96
+ 445 0188 52       		.byte	82
+ 446 0189 3B       		.byte	59
+ 447 018a D6       		.byte	-42
+ 448 018b B3       		.byte	-77
+ 449 018c 29       		.byte	41
+ 450 018d E3       		.byte	-29
+ 451 018e 2F       		.byte	47
+ 452 018f 84       		.byte	-124
+ 453 0190 53       		.byte	83
+ 454 0191 D1       		.byte	-47
+ 455 0192 00       		.byte	0
+ 456 0193 ED       		.byte	-19
+ 457 0194 20       		.byte	32
+ 458 0195 FC       		.byte	-4
+ 459 0196 B1       		.byte	-79
+ 460 0197 5B       		.byte	91
+ 461 0198 6A       		.byte	106
+ 462 0199 CB       		.byte	-53
+ 463 019a BE       		.byte	-66
+ 464 019b 39       		.byte	57
+ 465 019c 4A       		.byte	74
+ 466 019d 4C       		.byte	76
+ 467 019e 58       		.byte	88
+ 468 019f CF       		.byte	-49
+ 469 01a0 D0       		.byte	-48
+ 470 01a1 EF       		.byte	-17
+ 471 01a2 AA       		.byte	-86
+ 472 01a3 FB       		.byte	-5
+ 473 01a4 43       		.byte	67
+ 474 01a5 4D       		.byte	77
+ 475 01a6 33       		.byte	51
+ 476 01a7 85       		.byte	-123
+ 477 01a8 45       		.byte	69
+ 478 01a9 F9       		.byte	-7
+ 479 01aa 02       		.byte	2
+ 480 01ab 7F       		.byte	127
+ 481 01ac 50       		.byte	80
+ 482 01ad 3C       		.byte	60
+ 483 01ae 9F       		.byte	-97
+ 484 01af A8       		.byte	-88
+ 485 01b0 51       		.byte	81
+ 486 01b1 A3       		.byte	-93
+ 487 01b2 40       		.byte	64
+ 488 01b3 8F       		.byte	-113
+ 489 01b4 92       		.byte	-110
+ 490 01b5 9D       		.byte	-99
+ 491 01b6 38       		.byte	56
+ 492 01b7 F5       		.byte	-11
+ 493 01b8 BC       		.byte	-68
+ 494 01b9 B6       		.byte	-74
+ 495 01ba DA       		.byte	-38
+ 496 01bb 21       		.byte	33
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 11
+
+
+ 497 01bc 10       		.byte	16
+ 498 01bd FF       		.byte	-1
+ 499 01be F3       		.byte	-13
+ 500 01bf D2       		.byte	-46
+ 501 01c0 CD       		.byte	-51
+ 502 01c1 0C       		.byte	12
+ 503 01c2 13       		.byte	19
+ 504 01c3 EC       		.byte	-20
+ 505 01c4 5F       		.byte	95
+ 506 01c5 97       		.byte	-105
+ 507 01c6 44       		.byte	68
+ 508 01c7 17       		.byte	23
+ 509 01c8 C4       		.byte	-60
+ 510 01c9 A7       		.byte	-89
+ 511 01ca 7E       		.byte	126
+ 512 01cb 3D       		.byte	61
+ 513 01cc 64       		.byte	100
+ 514 01cd 5D       		.byte	93
+ 515 01ce 19       		.byte	25
+ 516 01cf 73       		.byte	115
+ 517 01d0 60       		.byte	96
+ 518 01d1 81       		.byte	-127
+ 519 01d2 4F       		.byte	79
+ 520 01d3 DC       		.byte	-36
+ 521 01d4 22       		.byte	34
+ 522 01d5 2A       		.byte	42
+ 523 01d6 90       		.byte	-112
+ 524 01d7 88       		.byte	-120
+ 525 01d8 46       		.byte	70
+ 526 01d9 EE       		.byte	-18
+ 527 01da B8       		.byte	-72
+ 528 01db 14       		.byte	20
+ 529 01dc DE       		.byte	-34
+ 530 01dd 5E       		.byte	94
+ 531 01de 0B       		.byte	11
+ 532 01df DB       		.byte	-37
+ 533 01e0 E0       		.byte	-32
+ 534 01e1 32       		.byte	50
+ 535 01e2 3A       		.byte	58
+ 536 01e3 0A       		.byte	10
+ 537 01e4 49       		.byte	73
+ 538 01e5 06       		.byte	6
+ 539 01e6 24       		.byte	36
+ 540 01e7 5C       		.byte	92
+ 541 01e8 C2       		.byte	-62
+ 542 01e9 D3       		.byte	-45
+ 543 01ea AC       		.byte	-84
+ 544 01eb 62       		.byte	98
+ 545 01ec 91       		.byte	-111
+ 546 01ed 95       		.byte	-107
+ 547 01ee E4       		.byte	-28
+ 548 01ef 79       		.byte	121
+ 549 01f0 E7       		.byte	-25
+ 550 01f1 C8       		.byte	-56
+ 551 01f2 37       		.byte	55
+ 552 01f3 6D       		.byte	109
+ 553 01f4 8D       		.byte	-115
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 12
+
+
+ 554 01f5 D5       		.byte	-43
+ 555 01f6 4E       		.byte	78
+ 556 01f7 A9       		.byte	-87
+ 557 01f8 6C       		.byte	108
+ 558 01f9 56       		.byte	86
+ 559 01fa F4       		.byte	-12
+ 560 01fb EA       		.byte	-22
+ 561 01fc 65       		.byte	101
+ 562 01fd 7A       		.byte	122
+ 563 01fe AE       		.byte	-82
+ 564 01ff 08       		.byte	8
+ 565 0200 BA       		.byte	-70
+ 566 0201 78       		.byte	120
+ 567 0202 25       		.byte	37
+ 568 0203 2E       		.byte	46
+ 569 0204 1C       		.byte	28
+ 570 0205 A6       		.byte	-90
+ 571 0206 B4       		.byte	-76
+ 572 0207 C6       		.byte	-58
+ 573 0208 E8       		.byte	-24
+ 574 0209 DD       		.byte	-35
+ 575 020a 74       		.byte	116
+ 576 020b 1F       		.byte	31
+ 577 020c 4B       		.byte	75
+ 578 020d BD       		.byte	-67
+ 579 020e 8B       		.byte	-117
+ 580 020f 8A       		.byte	-118
+ 581 0210 70       		.byte	112
+ 582 0211 3E       		.byte	62
+ 583 0212 B5       		.byte	-75
+ 584 0213 66       		.byte	102
+ 585 0214 48       		.byte	72
+ 586 0215 03       		.byte	3
+ 587 0216 F6       		.byte	-10
+ 588 0217 0E       		.byte	14
+ 589 0218 61       		.byte	97
+ 590 0219 35       		.byte	53
+ 591 021a 57       		.byte	87
+ 592 021b B9       		.byte	-71
+ 593 021c 86       		.byte	-122
+ 594 021d C1       		.byte	-63
+ 595 021e 1D       		.byte	29
+ 596 021f 9E       		.byte	-98
+ 597 0220 E1       		.byte	-31
+ 598 0221 F8       		.byte	-8
+ 599 0222 98       		.byte	-104
+ 600 0223 11       		.byte	17
+ 601 0224 69       		.byte	105
+ 602 0225 D9       		.byte	-39
+ 603 0226 8E       		.byte	-114
+ 604 0227 94       		.byte	-108
+ 605 0228 9B       		.byte	-101
+ 606 0229 1E       		.byte	30
+ 607 022a 87       		.byte	-121
+ 608 022b E9       		.byte	-23
+ 609 022c CE       		.byte	-50
+ 610 022d 55       		.byte	85
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 13
+
+
+ 611 022e 28       		.byte	40
+ 612 022f DF       		.byte	-33
+ 613 0230 8C       		.byte	-116
+ 614 0231 A1       		.byte	-95
+ 615 0232 89       		.byte	-119
+ 616 0233 0D       		.byte	13
+ 617 0234 BF       		.byte	-65
+ 618 0235 E6       		.byte	-26
+ 619 0236 42       		.byte	66
+ 620 0237 68       		.byte	104
+ 621 0238 41       		.byte	65
+ 622 0239 99       		.byte	-103
+ 623 023a 2D       		.byte	45
+ 624 023b 0F       		.byte	15
+ 625 023c B0       		.byte	-80
+ 626 023d 54       		.byte	84
+ 627 023e BB       		.byte	-69
+ 628 023f 16       		.byte	22
+ 629              		.align 32
+ 630              		.type	KAESBlockCipherVecRijndaelInvSBoxV, @object
+ 631              		.size	KAESBlockCipherVecRijndaelInvSBoxV, 256
+ 632              	KAESBlockCipherVecRijndaelInvSBoxV:
+ 633 0240 52       		.byte	82
+ 634 0241 09       		.byte	9
+ 635 0242 6A       		.byte	106
+ 636 0243 D5       		.byte	-43
+ 637 0244 30       		.byte	48
+ 638 0245 36       		.byte	54
+ 639 0246 A5       		.byte	-91
+ 640 0247 38       		.byte	56
+ 641 0248 BF       		.byte	-65
+ 642 0249 40       		.byte	64
+ 643 024a A3       		.byte	-93
+ 644 024b 9E       		.byte	-98
+ 645 024c 81       		.byte	-127
+ 646 024d F3       		.byte	-13
+ 647 024e D7       		.byte	-41
+ 648 024f FB       		.byte	-5
+ 649 0250 7C       		.byte	124
+ 650 0251 E3       		.byte	-29
+ 651 0252 39       		.byte	57
+ 652 0253 82       		.byte	-126
+ 653 0254 9B       		.byte	-101
+ 654 0255 2F       		.byte	47
+ 655 0256 FF       		.byte	-1
+ 656 0257 87       		.byte	-121
+ 657 0258 34       		.byte	52
+ 658 0259 8E       		.byte	-114
+ 659 025a 43       		.byte	67
+ 660 025b 44       		.byte	68
+ 661 025c C4       		.byte	-60
+ 662 025d DE       		.byte	-34
+ 663 025e E9       		.byte	-23
+ 664 025f CB       		.byte	-53
+ 665 0260 54       		.byte	84
+ 666 0261 7B       		.byte	123
+ 667 0262 94       		.byte	-108
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 14
+
+
+ 668 0263 32       		.byte	50
+ 669 0264 A6       		.byte	-90
+ 670 0265 C2       		.byte	-62
+ 671 0266 23       		.byte	35
+ 672 0267 3D       		.byte	61
+ 673 0268 EE       		.byte	-18
+ 674 0269 4C       		.byte	76
+ 675 026a 95       		.byte	-107
+ 676 026b 0B       		.byte	11
+ 677 026c 42       		.byte	66
+ 678 026d FA       		.byte	-6
+ 679 026e C3       		.byte	-61
+ 680 026f 4E       		.byte	78
+ 681 0270 08       		.byte	8
+ 682 0271 2E       		.byte	46
+ 683 0272 A1       		.byte	-95
+ 684 0273 66       		.byte	102
+ 685 0274 28       		.byte	40
+ 686 0275 D9       		.byte	-39
+ 687 0276 24       		.byte	36
+ 688 0277 B2       		.byte	-78
+ 689 0278 76       		.byte	118
+ 690 0279 5B       		.byte	91
+ 691 027a A2       		.byte	-94
+ 692 027b 49       		.byte	73
+ 693 027c 6D       		.byte	109
+ 694 027d 8B       		.byte	-117
+ 695 027e D1       		.byte	-47
+ 696 027f 25       		.byte	37
+ 697 0280 72       		.byte	114
+ 698 0281 F8       		.byte	-8
+ 699 0282 F6       		.byte	-10
+ 700 0283 64       		.byte	100
+ 701 0284 86       		.byte	-122
+ 702 0285 68       		.byte	104
+ 703 0286 98       		.byte	-104
+ 704 0287 16       		.byte	22
+ 705 0288 D4       		.byte	-44
+ 706 0289 A4       		.byte	-92
+ 707 028a 5C       		.byte	92
+ 708 028b CC       		.byte	-52
+ 709 028c 5D       		.byte	93
+ 710 028d 65       		.byte	101
+ 711 028e B6       		.byte	-74
+ 712 028f 92       		.byte	-110
+ 713 0290 6C       		.byte	108
+ 714 0291 70       		.byte	112
+ 715 0292 48       		.byte	72
+ 716 0293 50       		.byte	80
+ 717 0294 FD       		.byte	-3
+ 718 0295 ED       		.byte	-19
+ 719 0296 B9       		.byte	-71
+ 720 0297 DA       		.byte	-38
+ 721 0298 5E       		.byte	94
+ 722 0299 15       		.byte	21
+ 723 029a 46       		.byte	70
+ 724 029b 57       		.byte	87
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 15
+
+
+ 725 029c A7       		.byte	-89
+ 726 029d 8D       		.byte	-115
+ 727 029e 9D       		.byte	-99
+ 728 029f 84       		.byte	-124
+ 729 02a0 90       		.byte	-112
+ 730 02a1 D8       		.byte	-40
+ 731 02a2 AB       		.byte	-85
+ 732 02a3 00       		.byte	0
+ 733 02a4 8C       		.byte	-116
+ 734 02a5 BC       		.byte	-68
+ 735 02a6 D3       		.byte	-45
+ 736 02a7 0A       		.byte	10
+ 737 02a8 F7       		.byte	-9
+ 738 02a9 E4       		.byte	-28
+ 739 02aa 58       		.byte	88
+ 740 02ab 05       		.byte	5
+ 741 02ac B8       		.byte	-72
+ 742 02ad B3       		.byte	-77
+ 743 02ae 45       		.byte	69
+ 744 02af 06       		.byte	6
+ 745 02b0 D0       		.byte	-48
+ 746 02b1 2C       		.byte	44
+ 747 02b2 1E       		.byte	30
+ 748 02b3 8F       		.byte	-113
+ 749 02b4 CA       		.byte	-54
+ 750 02b5 3F       		.byte	63
+ 751 02b6 0F       		.byte	15
+ 752 02b7 02       		.byte	2
+ 753 02b8 C1       		.byte	-63
+ 754 02b9 AF       		.byte	-81
+ 755 02ba BD       		.byte	-67
+ 756 02bb 03       		.byte	3
+ 757 02bc 01       		.byte	1
+ 758 02bd 13       		.byte	19
+ 759 02be 8A       		.byte	-118
+ 760 02bf 6B       		.byte	107
+ 761 02c0 3A       		.byte	58
+ 762 02c1 91       		.byte	-111
+ 763 02c2 11       		.byte	17
+ 764 02c3 41       		.byte	65
+ 765 02c4 4F       		.byte	79
+ 766 02c5 67       		.byte	103
+ 767 02c6 DC       		.byte	-36
+ 768 02c7 EA       		.byte	-22
+ 769 02c8 97       		.byte	-105
+ 770 02c9 F2       		.byte	-14
+ 771 02ca CF       		.byte	-49
+ 772 02cb CE       		.byte	-50
+ 773 02cc F0       		.byte	-16
+ 774 02cd B4       		.byte	-76
+ 775 02ce E6       		.byte	-26
+ 776 02cf 73       		.byte	115
+ 777 02d0 96       		.byte	-106
+ 778 02d1 AC       		.byte	-84
+ 779 02d2 74       		.byte	116
+ 780 02d3 22       		.byte	34
+ 781 02d4 E7       		.byte	-25
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 16
+
+
+ 782 02d5 AD       		.byte	-83
+ 783 02d6 35       		.byte	53
+ 784 02d7 85       		.byte	-123
+ 785 02d8 E2       		.byte	-30
+ 786 02d9 F9       		.byte	-7
+ 787 02da 37       		.byte	55
+ 788 02db E8       		.byte	-24
+ 789 02dc 1C       		.byte	28
+ 790 02dd 75       		.byte	117
+ 791 02de DF       		.byte	-33
+ 792 02df 6E       		.byte	110
+ 793 02e0 47       		.byte	71
+ 794 02e1 F1       		.byte	-15
+ 795 02e2 1A       		.byte	26
+ 796 02e3 71       		.byte	113
+ 797 02e4 1D       		.byte	29
+ 798 02e5 29       		.byte	41
+ 799 02e6 C5       		.byte	-59
+ 800 02e7 89       		.byte	-119
+ 801 02e8 6F       		.byte	111
+ 802 02e9 B7       		.byte	-73
+ 803 02ea 62       		.byte	98
+ 804 02eb 0E       		.byte	14
+ 805 02ec AA       		.byte	-86
+ 806 02ed 18       		.byte	24
+ 807 02ee BE       		.byte	-66
+ 808 02ef 1B       		.byte	27
+ 809 02f0 FC       		.byte	-4
+ 810 02f1 56       		.byte	86
+ 811 02f2 3E       		.byte	62
+ 812 02f3 4B       		.byte	75
+ 813 02f4 C6       		.byte	-58
+ 814 02f5 D2       		.byte	-46
+ 815 02f6 79       		.byte	121
+ 816 02f7 20       		.byte	32
+ 817 02f8 9A       		.byte	-102
+ 818 02f9 DB       		.byte	-37
+ 819 02fa C0       		.byte	-64
+ 820 02fb FE       		.byte	-2
+ 821 02fc 78       		.byte	120
+ 822 02fd CD       		.byte	-51
+ 823 02fe 5A       		.byte	90
+ 824 02ff F4       		.byte	-12
+ 825 0300 1F       		.byte	31
+ 826 0301 DD       		.byte	-35
+ 827 0302 A8       		.byte	-88
+ 828 0303 33       		.byte	51
+ 829 0304 88       		.byte	-120
+ 830 0305 07       		.byte	7
+ 831 0306 C7       		.byte	-57
+ 832 0307 31       		.byte	49
+ 833 0308 B1       		.byte	-79
+ 834 0309 12       		.byte	18
+ 835 030a 10       		.byte	16
+ 836 030b 59       		.byte	89
+ 837 030c 27       		.byte	39
+ 838 030d 80       		.byte	-128
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 17
+
+
+ 839 030e EC       		.byte	-20
+ 840 030f 5F       		.byte	95
+ 841 0310 60       		.byte	96
+ 842 0311 51       		.byte	81
+ 843 0312 7F       		.byte	127
+ 844 0313 A9       		.byte	-87
+ 845 0314 19       		.byte	25
+ 846 0315 B5       		.byte	-75
+ 847 0316 4A       		.byte	74
+ 848 0317 0D       		.byte	13
+ 849 0318 2D       		.byte	45
+ 850 0319 E5       		.byte	-27
+ 851 031a 7A       		.byte	122
+ 852 031b 9F       		.byte	-97
+ 853 031c 93       		.byte	-109
+ 854 031d C9       		.byte	-55
+ 855 031e 9C       		.byte	-100
+ 856 031f EF       		.byte	-17
+ 857 0320 A0       		.byte	-96
+ 858 0321 E0       		.byte	-32
+ 859 0322 3B       		.byte	59
+ 860 0323 4D       		.byte	77
+ 861 0324 AE       		.byte	-82
+ 862 0325 2A       		.byte	42
+ 863 0326 F5       		.byte	-11
+ 864 0327 B0       		.byte	-80
+ 865 0328 C8       		.byte	-56
+ 866 0329 EB       		.byte	-21
+ 867 032a BB       		.byte	-69
+ 868 032b 3C       		.byte	60
+ 869 032c 83       		.byte	-125
+ 870 032d 53       		.byte	83
+ 871 032e 99       		.byte	-103
+ 872 032f 61       		.byte	97
+ 873 0330 17       		.byte	23
+ 874 0331 2B       		.byte	43
+ 875 0332 04       		.byte	4
+ 876 0333 7E       		.byte	126
+ 877 0334 BA       		.byte	-70
+ 878 0335 77       		.byte	119
+ 879 0336 D6       		.byte	-42
+ 880 0337 26       		.byte	38
+ 881 0338 E1       		.byte	-31
+ 882 0339 69       		.byte	105
+ 883 033a 14       		.byte	20
+ 884 033b 63       		.byte	99
+ 885 033c 55       		.byte	85
+ 886 033d 21       		.byte	33
+ 887 033e 0C       		.byte	12
+ 888 033f 7D       		.byte	125
+ 889              		.align 16
+ 890              		.type	lo_filter, @object
+ 891              		.size	lo_filter, 16
+ 892              	lo_filter:
+ 893 0340 00       		.byte	0
+ 894 0341 FF       		.byte	-1
+ 895 0342 FF       		.byte	-1
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 18
+
+
+ 896 0343 FF       		.byte	-1
+ 897 0344 FF       		.byte	-1
+ 898 0345 FF       		.byte	-1
+ 899 0346 FF       		.byte	-1
+ 900 0347 FF       		.byte	-1
+ 901 0348 FF       		.byte	-1
+ 902 0349 FF       		.byte	-1
+ 903 034a FF       		.byte	-1
+ 904 034b FF       		.byte	-1
+ 905 034c FF       		.byte	-1
+ 906 034d FF       		.byte	-1
+ 907 034e FF       		.byte	-1
+ 908 034f FF       		.byte	-1
+ 909              		.align 16
+ 910              		.type	FF_tab, @object
+ 911              		.size	FF_tab, 16
+ 912              	FF_tab:
+ 913 0350 00       		.byte	0
+ 914 0351 1B       		.byte	27
+ 915 0352 36       		.byte	54
+ 916 0353 2D       		.byte	45
+ 917 0354 6C       		.byte	108
+ 918 0355 77       		.byte	119
+ 919 0356 5A       		.byte	90
+ 920 0357 41       		.byte	65
+ 921 0358 00       		.byte	0
+ 922 0359 00       		.byte	0
+ 923 035a 00       		.byte	0
+ 924 035b 00       		.byte	0
+ 925 035c 00       		.byte	0
+ 926 035d 00       		.byte	0
+ 927 035e 00       		.byte	0
+ 928 035f 00       		.byte	0
+ 929              		.data
+ 930              		.type	KAESBlockCipherVecFFtable, @object
+ 931              		.size	KAESBlockCipherVecFFtable, 8
+ 932              	KAESBlockCipherVecFFtable:
+ 933 0000 00       		.byte	0
+ 934 0001 1B       		.byte	27
+ 935 0002 36       		.byte	54
+ 936 0003 2D       		.byte	45
+ 937 0004 6C       		.byte	108
+ 938 0005 77       		.byte	119
+ 939 0006 5A       		.byte	90
+ 940 0007 41       		.byte	65
+ 941              		.section	.rodata
+ 942              		.align 32
+ 943              		.type	KAESBlockCipherVecRcon, @object
+ 944              		.size	KAESBlockCipherVecRcon, 40
+ 945              	KAESBlockCipherVecRcon:
+ 946 0360 01000000 		.long	1
+ 947 0364 02000000 		.long	2
+ 948 0368 04000000 		.long	4
+ 949 036c 08000000 		.long	8
+ 950 0370 10000000 		.long	16
+ 951 0374 20000000 		.long	32
+ 952 0378 40000000 		.long	64
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 19
+
+
+ 953 037c 80000000 		.long	128
+ 954 0380 1B000000 		.long	27
+ 955 0384 36000000 		.long	54
+ 956              	.LC0:
+ 957 0388 53756242 		.string	"SubBytes"
+ 957      79746573 
+ 957      00
+ 958              	.LC1:
+ 959 0391 25733A09 		.string	"%s:\t%0.8x %0.8x %0.8x %0.8x\n"
+ 959      25302E38 
+ 959      78202530 
+ 959      2E387820 
+ 959      25302E38 
+ 960              	.LC2:
+ 961 03ae 526F7442 		.string	"RotBytesLeft"
+ 961      79746573 
+ 961      4C656674 
+ 961      00
+ 962              	.LC3:
+ 963 03bb 56656358 		.string	"VecXor"
+ 963      6F7200
+ 964              	.LC4:
+ 965 03c2 53746174 		.string	"StateDupColumn3"
+ 965      65447570 
+ 965      436F6C75 
+ 965      6D6E3300 
+ 966              		.text
+ 967              		.type	KAESBlockCipherVecKeyExpansion128, @function
+ 968              	KAESBlockCipherVecKeyExpansion128:
+ 969              	.LFB563:
+ 970              		.file 2 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c"
+   1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*===========================================================================
+   2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+   3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *                            PUBLIC DOMAIN NOTICE
+   4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *               National Center for Biotechnology Information
+   5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+   6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  This software/database is a "United States Government Work" under the
+   7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  terms of the United States Copyright Act.  It was written as part of
+   8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  the author's official duties as a United States Government employee and
+   9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  thus cannot be copyrighted.  This software/database is freely available
+  10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  to the public for use. The National Library of Medicine and the U.S.
+  11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  Government have not placed any restriction on its use or reproduction.
+  12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  Although all reasonable efforts have been taken to ensure the accuracy
+  14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  and reliability of the software and data, the NLM and the U.S.
+  15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  Government do not and cannot warrant the performance or results that
+  16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  may be obtained by using this software or data. The NLM and the U.S.
+  17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  Government disclaim all warranties, express or implied, including
+  18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  warranties of performance, merchantability or fitness for any particular
+  19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  purpose.
+  20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  Please cite the author in any work or product based on this material.
+  22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * ===========================================================================
+  24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+  25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 20
+
+
+  27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <krypto/extern.h>
+  28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "ncbi-priv.h"
+  30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "aes-ncbi-priv.h"
+  31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "cipher-priv.h"
+  32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "blockcipher-priv.h"
+  33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <klib/debug.h>
+  35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <klib/out.h>
+  36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <klib/rc.h>
+  37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <byteswap.h>
+  40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <string.h>
+  41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <stdint.h>
+  42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <stdlib.h>
+  43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <assert.h>
+  44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <sysalloc.h>
+  45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+  47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <cpuid.h>
+  48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+  49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VECREG
+  51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <v128.h>
+  52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+  53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+  55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * This implements the AES cipher as defined by FIPS-197 from NIST
+  56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  
+  57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Notes on implmentation:
+  58:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  59:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * NOTE:
+  60:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Byte ordering in AES is not critical but unllike the original implmentation
+  61:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * bytes are not re-ordered to a big endian order upon reading them in and this
+  62:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * code will expect to run on an Intel/AMD type processor and might have issues
+  63:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * on some big endian processors.
+  64:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  65:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * NOTE:
+  66:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Many functions are written as static inline functions to
+  67:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * facilitate GCC type assembly language optimization on various processors
+  68:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  69:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * NOTE:
+  70:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * This implements the Equivalent Inverse Cipher not the Inverse Cipher.  In
+  71:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * general functions will match those defined in the FIPS-197 document where they
+  72:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * do not get optimized away for Intel/AMD XMM registers and AES-NI instructions.
+  73:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  74:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * NOTE:
+  75:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * C-99 types are used for specific sized types.  An unaddornded unsigned type
+  76:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * is used for many index type variables to allow the compiler choice in
+  77:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * size where size does not matter very much.  As these index variables do
+  78:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * not go above 16 any size would do but the compiler can choose the size most
+  79:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * suited for array subscripting.
+  80:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+  81:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  82:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+  83:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_00 =  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 21
+
+
+  84:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+  85:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  86:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+  87:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_01 =  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+  88:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                       0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+  89:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  90:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+  91:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_0F =  { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
+  92:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                       0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F };
+  93:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  94:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+  95:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_10 =  { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+  96:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                       0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 };
+  97:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  98:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  99:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * These functions implment the Advanced Encryption Standard AES as defined
+ 102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * in the FIPS (Federal Information Processing Standars Publication 197
+ 103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Of Nevember 26, 2001.
+ 104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.1
+ 108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Read a blocks worth of bytes into an CipherVec
+ 112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * With vector registers it is a single instruction, without them it
+ 114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * is a memmove call
+ 115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateIn) (const void * ain)
+ 118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateIn) (const void * ain)
+ 122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec vec;
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __asm__ (
+ 127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         "movdqu (%[a]),%[s]" : [s] "=x" (vec) : [a] "D" (ain)
+ 128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         );
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vec;
+ 130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     memmove (&u.bytes, ain, sizeof (u));
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 22
+
+
+ 141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Write a block's worth of bytes out from an CipherVec
+ 143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * With vector registers it is a single instruction, without them it
+ 145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * is a memmove call
+ 146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(StateOut) (const CipherVec vec, void * rout)
+ 149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(StateOut) (const CipherVec vec, void * rout)
+ 153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec rvec = vec;
+ 157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __asm__ (
+ 158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         "movdqu %[s],(%[a])" : : [s] "x" (rvec), [a] "D" (rout)
+ 159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         );
+ 160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     memmove (rout, &vec, sizeof (vec));
+ 164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecXor) (CipherVec v1, CipherVec v2)
+ 171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecXor) (CipherVec v1, CipherVec v2)
+ 175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] ^= u2.columns[ix];
+ 190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 23
+
+
+ 198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAnd) (CipherVec v1, CipherVec v2)
+ 199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAnd) (CipherVec v1, CipherVec v2)
+ 203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] &= u2.columns[ix];
+ 218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecOr) (CipherVec v1, CipherVec v2)
+ 227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecOr) (CipherVec v1, CipherVec v2)
+ 231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] |= u2.columns[ix];
+ 246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAdd) (CipherVec v1, CipherVec v2)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 24
+
+
+ 255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAdd) (CipherVec v1, CipherVec v2)
+ 259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 + v2;
+ 263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] += u2.columns[ix];
+ 274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSub) (CipherVec v1, CipherVec v2)
+ 283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSub) (CipherVec v1, CipherVec v2)
+ 287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] -= u2.columns[ix];
+ 302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecMul) (CipherVec v1, CipherVec v2)
+ 311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 25
+
+
+ 312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecMul) (CipherVec v1, CipherVec v2)
+ 315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 * v2;
+ 319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] *= u2.columns[ix];
+ 330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecDiv) (CipherVec v1, CipherVec v2)
+ 339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecDiv) (CipherVec v1, CipherVec v2)
+ 343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] /= u2.columns[ix];
+ 358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(PackShuffleBytes) (CipherVec dest, CipherVec mask)
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 26
+
+
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(PackShuffleBytes) (CipherVec dest, CipherVec mask)
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_PSHUFB128 (dest, mask);
+ 374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u out, in, gate;
+ 378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         else
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+ 390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSLLBI) (CipherVec v, const int k)
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSLLBI) (CipherVec v, const int k)
+ 403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVec sl_mask [9] = 
+ 406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+ 407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
+ 409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
+ 410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE },
+ 411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC },
+ 413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
+ 414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8 },
+ 415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0 },
+ 417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0 },
+ 419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
+ 420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0 },
+ 421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 },
+ 423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ 425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         };
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 27
+
+
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec vv = v;
+ 427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     assert (k <= 8);
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("mask", sl_mask[k]); */
+ 432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("v 1", vv); */
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = op_PSLLDI128 (vv, k);
+ 434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("v 2", vv); */
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("v 3", vv); */
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vv;
+ 438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u vv; /* state and key not countries :) */
+ 442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv.state = v;
+ 445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (v); ++ix)
+ 447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+ 448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         KOutMsg ("SLLBI %d %x ", k, vv.bytes[ix]);
+ 449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         vv.bytes[ix] <<= k;
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         KOutMsg ("%x\n", vv.bytes[ix]);
+ 451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+ 452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vv.state;
+ 453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSRLBI) (CipherVec v, const int k)
+ 460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSRLBI) (CipherVec v, const int k)
+ 464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVec sr_mask [9] = 
+ 467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
+ 471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F },
+ 472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F },
+ 474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
+ 475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F },
+ 476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
+ 477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F },
+ 478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07 },
+ 480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 },
+ 482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 28
+
+
+ 483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 },
+ 484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ 486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         };
+ 487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = op_PSRLDI128 (v, k);
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v;
+ 491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u vv; /* state and key not countries :) */
+ 495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv.state = v;
+ 498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (v); ++ix)
+ 500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         KOutMsg ("SRLBI %d %x ", k, vv.bytes[ix]);
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         vv.bytes[ix] >>= k;
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         KOutMsg ("%x\n", vv.bytes[ix]);
+ 504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+ 505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vv.state;
+ 506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SetColumn) (CipherVec state, AESWord column, const int which)
+ 513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 514:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SetColumn) (CipherVec state, AESWord column, const int which)
+ 517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.1.4
+ 532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * The AddRoundKey transformation is a sinple exclusive or of all 128 bits
+ 534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * in the current block against a round key.  This operation is used in all
+ 535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Cipher and EqInvCipher rounds
+ 536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * With vector types it is a single operation that with vector registers is
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * a single op-code.
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 29
+
+
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AddRoundKey) (CipherVec state, CipherVec round_key)
+ 542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AddRoundKey) (CipherVec state, CipherVec round_key)
+ 546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(VecXor) (state, round_key);
+ 548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.1.2
+ 553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS 197 describes the state in column major format
+ 555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * while C and assembly programmers tend to think in row major
+ 556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * The byte order is 0,1,2,3,,...F as shown in the first diagram.
+ 557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  ShiftRows() is defined as leaving this state
+ 559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 0 | 4 | 8 | C |     | 0 | 4 | 8 | C |
+ 561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 1 | 5 | 9 | D |     | 5 | 9 | D | 1 |
+ 563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 2 | 6 | A | E |     | A | E | 2 | 6 |
+ 565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 3 | 7 | B | F |     | F | 3 | 7 | B |
+ 567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftRows) (CipherVec state)
+ 571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftRows) (CipherVec state)
+ 575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec ShiftRowTable
+ 578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /*   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
+ 579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     = {  0,  5, 10, 15,  4,  9, 14,  3,  8, 13,  2,  7, 12,  1,  6, 11 };
+ 580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.3.1
+ 588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * InvShiftRows() is defined as leaving this state
+ 590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 0 | 4 | 8 | C |     | 0 | 4 | 8 | C |
+ 592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 1 | 5 | 9 | D |     | D | 1 | 5 | 9 |
+ 594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 2 | 6 | A | E |     | A | E | 2 | 6 |
+ 596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 30
+
+
+ 597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 3 | 7 | B | F |     | 7 | B | F | 3 |
+ 598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvShiftRows) (CipherVec state)
+ 602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvShiftRows) (CipherVec state)
+ 607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVecByte InvShiftRowTable
+ 609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         /*   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
+ 610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         = {  0, 13, 10,  7,  4,  1, 14, 11,  8,  5,  2, 15, 12,  9,  6,  3 };
+ 611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 0 | 4 | 8 | C |     | 3 | 7 | B | F |
+ 620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 1 | 5 | 9 | D |     | 0 | 4 | 8 | C |
+ 622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 2 | 6 | A | E |     | 1 | 5 | 9 | D |
+ 624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 3 | 7 | B | F |     | 2 | 6 | A | E |
+ 626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesRight) (CipherVec state)
+ 630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesRight) (CipherVec state)
+ 634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec ShiftRowTable
+ 637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /*   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
+ 638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     = {  3,  0,  1,  2,  7,  4,  5,  6, 11,  8,  9, 10, 15, 12, 13, 14 };
+ 639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 643:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 644:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 645:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 646:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 647:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 0 | 4 | 8 | C |     | 1 | 5 | B | D |
+ 648:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 1 | 5 | 9 | D |     | 2 | 6 | 8 | E |
+ 650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 651:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 2 | 6 | A | E |     | 3 | 7 | 9 | F |
+ 652:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 653:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 3 | 7 | B | F |     | 0 | 4 | 8 | C |
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 31
+
+
+ 654:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 655:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesLeft) (CipherVec state)
+ 658:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 661:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesLeft) (CipherVec state)
+ 662:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 663:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVec ShiftRowTable
+ 664:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         /*   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
+ 665:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         = {  1,  2,  3,  0,  5,  6,  7,  4,  9, 10, 11,  8, 13, 14, 15, 12 };
+ 666:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 669:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 670:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 671:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 672:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.1.1
+ 674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 675:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 676:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 677:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 678:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * SubBytes replaces each byte in a state with a specific byte value from
+ 679:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * A Rijndael Substitution box
+ 680:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const 
+ 682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(RijndaelSBox)[256] = 
+ 683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*        -0    -1    -2    -3    -4    -5    -6    -7    -8    -9    -A    -B    -C    -D    -E   
+ 685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0- */ 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 
+ 686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 1- */ 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 
+ 687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 2- */ 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 
+ 688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 3- */ 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 
+ 689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 4- */ 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 
+ 690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 5- */ 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 
+ 691:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 6- */ 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 
+ 692:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 7- */ 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 
+ 693:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 8- */ 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 
+ 694:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 9- */ 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 
+ 695:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* A- */ 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 
+ 696:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* B- */ 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 
+ 697:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* C- */ 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 
+ 698:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* D- */ 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 
+ 699:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* E- */ 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 
+ 700:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* F- */ 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 
+ 701:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 702:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 703:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 704:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if 0
+ 705:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 706:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ 707:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 708:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 709:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 710:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 32
+
+
+ 711:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 712:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+ 713:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 714:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 715:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 716:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 717:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (u.bytes); ++ix)
+ 718:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+ 719:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u.bytes[ix] = AESBCMEMBER(RijndaelSBox)[u.bytes[ix]];
+ 720:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+ 721:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 722:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 723:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 724:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 725:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 726:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 727:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * SubWord performs the same operation as SubBytes but on
+ 728:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * the four bytes of a column and not a whole state
+ 729:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 730:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 731:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(SubWord) (AESWord w)
+ 732:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 733:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 734:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 735:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(SubWord) (AESWord w)
+ 736:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 737:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESColumn col;
+ 738:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 739:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if 0
+ 747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * InvSubBytes replaces each byte in a state with a specific byte value from
+ 749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * an Inversze Rijndael Substitution box.  That is InvSubBytes undoes SubBytes
+ 750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const 
+ 752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint8_t AESBCMEMBER(RijndaelInvSBox)[256] = 
+ 753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 754:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*        -0    -1    -2    -3    -4    -5    -6    -7    -8    -9    -A    -B    -C    -D    -E   
+ 755:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0- */ 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 
+ 756:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 1- */ 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 
+ 757:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 2- */ 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 
+ 758:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 3- */ 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 
+ 759:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 4- */ 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 
+ 760:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 5- */ 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 
+ 761:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 6- */ 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 
+ 762:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 7- */ 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 
+ 763:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 8- */ 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 
+ 764:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 9- */ 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 
+ 765:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* A- */ 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 
+ 766:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* B- */ 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 
+ 767:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* C- */ 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 33
+
+
+ 768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* D- */ 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 
+ 769:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* E- */ 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 
+ 770:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* F- */ 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 
+ 771:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 772:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 773:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 774:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 775:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 776:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 777:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 778:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 779:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 781:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+ 782:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 783:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 784:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 785:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (u.bytes); ++ix)
+ 786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u.bytes[ix] = AESBCMEMBER(RijndaelInvSBox)[u.bytes[ix]];
+ 787:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 789:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 790:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 791:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 792:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RijndaelSBoxV)[16] = 
+ 794:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 795:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     -0    -1    -2    -3    -4    -5    -6    -7    -8    -9    -A    -B    -C    -D    -E    -F
+ 796:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x7
+ 797:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC
+ 798:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x1
+ 799:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x7
+ 800:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x8
+ 801:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xC
+ 802:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA
+ 803:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD
+ 804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x7
+ 805:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xD
+ 806:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x7
+ 807:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x0
+ 808:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8
+ 809:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9
+ 810:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xD
+ 811:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x1
+ 812:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 813:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 814:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 815:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RijndaelInvSBoxV)[16] = 
+ 816:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 817:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     -0    -1    -2    -3    -4    -5    -6    -7    -8    -9    -A    -B    -C    -D    -E    -F
+ 818:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xF
+ 819:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xC
+ 820:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4
+ 821:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x2
+ 822:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x9
+ 823:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x8
+ 824:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 34
+
+
+ 825:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6
+ 826:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x7
+ 827:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6
+ 828:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1
+ 829:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF
+ 830:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5
+ 831:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xE
+ 832:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x6
+ 833:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7
+ 834:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 835:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 836:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 837:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 838:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec lo_filter = { 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 839:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
+ 840:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 841:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 842:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytesInt) (CipherVec state, const CipherVec box [16])
+ 843:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 844:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 845:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 846:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytesInt) (CipherVec state, const CipherVec box [16])
+ 847:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 848:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec lo, hi, tmp, out;
+ 849:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 850:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 853:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("state", state); */
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 855:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("lo", lo); */
+ 856:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 858:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 860:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 861:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 863:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 864:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 865:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 867:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 869:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*         DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 871:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*         DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 873:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*         DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 875:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*         DEBUG_CIPHER_VECTOR ("out", out); */
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 877:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*         DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 879:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*         DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 880:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+ 881:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("out", out); */
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 35
+
+
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 883:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 884:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 885:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 886:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 887:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ 888:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 889:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 890:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 891:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ 892:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 893:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(SubBytesInt) (state, AESBCMEMBER(RijndaelSBoxV));
+ 894:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 895:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 896:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 897:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 898:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 899:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 900:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 901:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 902:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 903:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 904:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(SubBytesInt) (state, AESBCMEMBER(RijndaelInvSBoxV));
+ 905:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 906:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 907:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 908:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 909:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.1.3
+ 910:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 911:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 912:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 913:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * there are no psllb or psrlb instructions so shift words not bytes
+ 914:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * and then cut off bits that would have been zeroed if there were
+ 915:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * such instructions
+ 916:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 917:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * 
+ 918:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 919:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec FF_tab = 
+ 920:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x00, 0x1B, 0x36, 0x2D, 0x6C, 0x77, 0x5A, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ 921:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 922:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 923:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul) (register CipherVec state, const int bits)
+ 924:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 925:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 926:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 927:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul) (register CipherVec state, const int bits)
+ 928:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 929:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec sl, sr;
+ 930:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 931:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     assert (bits <= 8);
+ 932:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("sr", sr);
+ 936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ 937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("sl", sl);
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 36
+
+
+ 939:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(VecXor)(sl, sr);
+ 940:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 941:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 942:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 943:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 944:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_02) (CipherVec state)
+ 945:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 946:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 947:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 948:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_02) (register CipherVec state)
+ 949:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 950:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 951:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 952:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state =  AESBCMEMBER(FF_mul) (state, 1);
+ 953:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 954:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 955:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 956:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 957:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 958:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 959:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 960:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_04) (CipherVec state)
+ 961:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 962:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 963:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 964:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_04) (CipherVec state)
+ 965:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 966:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 967:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 968:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state =  AESBCMEMBER(FF_mul) (state, 2);
+ 969:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 970:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 971:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 972:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 973:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 974:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 975:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 976:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_08) (CipherVec state)
+ 977:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 978:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 979:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 980:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_08) (CipherVec state)
+ 981:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 982:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 983:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 984:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state =  AESBCMEMBER(FF_mul) (state, 3);
+ 985:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 986:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 987:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 988:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 989:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 990:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 991:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static AESByte AESBCMEMBER(FFtable)[] = { 0x00, 0x1b, 0x36, 0x2d, 0x6c, 0x77, 0x5a, 0x41 };
+ 992:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 993:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 994:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 995:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFtab) (uint8_t x)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 37
+
+
+ 996:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 997:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 998:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 999:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFtab) (uint8_t x)
+1000:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(FFtable)[x];
+1002:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1003:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1004:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1005:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1006:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul02) (AESByte b)
+1007:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1008:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1009:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1010:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul02) (AESByte b)
+1011:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 1) ^ AESBCMEMBER(FFtab)(b >> 7);
+1013:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1014:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1015:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1016:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1017:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul04) (AESByte b)
+1018:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1019:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1020:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1021:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul04) (AESByte b)
+1022:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1023:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 2) ^ AESBCMEMBER(FFtab)(b >> 6);
+1024:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1025:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1026:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1027:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1028:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul08) (AESByte b)
+1029:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1030:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1031:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1032:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul08) (AESByte b)
+1033:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1034:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 3) ^ AESBCMEMBER(FFtab)(b >> 5);
+1035:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1036:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1037:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1038:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1039:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MixColumns) (CipherVec state)
+1040:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1041:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1042:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1043:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MixColumns) (CipherVec state)
+1044:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1045:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec c0, c1, c2, c3;
+1046:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     
+1047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c1 = AESBCMEMBER(RotBytesLeft) (state);
+1048:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c2 = AESBCMEMBER(RotBytesLeft) (c1);
+1049:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c3 = AESBCMEMBER(RotBytesLeft) (c2);
+1050:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c0 = AESBCMEMBER(VecXor) (state, c1);
+1051:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1052:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 38
+
+
+1053:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1054:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c0 = AESBCMEMBER(FF_mul_02) (c0);
+1055:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1056:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+1057:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         CipherVec_AES_u tmp;
+1058:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         unsigned ix;
+1059:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1060:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp.state = c0;
+1061:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     
+1062:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         for (ix = 0; ix < sizeof tmp; ++ix)
+1063:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             tmp.bytes[ix] = AESBCMEMBER(FFmul02)(tmp.bytes[ix]);
+1064:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         c0 = tmp.state;
+1065:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+1066:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1067:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c1 = AESBCMEMBER(VecXor) (c1, c2);
+1068:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c1 = AESBCMEMBER(VecXor) (c1, c3);
+1069:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c1 = AESBCMEMBER(VecXor) (c1, c0);
+1070:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1071:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return c1;
+1072:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* obsoleted 
+1073:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u in, out;
+1074:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+1075:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1076:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = state;
+1077:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1078:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (out.bytes); ix += 4)
+1079:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+1080:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         unsigned const s0 = in.bytes[ix + 0];
+1081:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         unsigned const s1 = in.bytes[ix + 1];
+1082:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         unsigned const s2 = in.bytes[ix + 2];
+1083:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         unsigned const s3 = in.bytes[ix + 3];
+1084:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1085:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 0] =      s1 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s0 ^ s1);
+1086:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 1] = s0      ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s1 ^ s2);
+1087:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 2] = s0 ^ s1      ^ s3 ^ AESBCMEMBER(FFmul02)(s2 ^ s3);
+1088:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 3] = s0 ^ s1 ^ s2      ^ AESBCMEMBER(FFmul02)(s3 ^ s0);
+1089:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+1090:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+1091:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1092:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1093:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1094:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1095:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvMixColumns) (CipherVec state)
+1096:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1097:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1098:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1099:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvMixColumns) (CipherVec state)
+1100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+1102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_AESIMC (state);
+1103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec r1, r2, r3, f2, f4, f8;
+1105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r1 = AESBCMEMBER(RotBytesLeft) (state);
+1107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r2 = AESBCMEMBER(RotBytesLeft) (r1);
+1108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r3 = AESBCMEMBER(RotBytesLeft) (r2);        
+1109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 39
+
+
+1110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f4 = AESBCMEMBER(VecXor) (state, r2);
+1111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f2 = AESBCMEMBER(VecXor) (state, r1);
+1112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f8 = AESBCMEMBER(VecXor) (r2, r3);
+1113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (f8, r1);
+1114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f8 = AESBCMEMBER(VecXor) (f8, f2);
+1115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f2 = AESBCMEMBER(FF_mul) (f2,1);
+1119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f4 = AESBCMEMBER(FF_mul) (f4,2);
+1120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f8 = AESBCMEMBER(FF_mul) (f8,3);
+1121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+1123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         CipherVec_AES_u fu2, fu4, fu8;
+1124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         unsigned ix;
+1125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         fu2.state = f2;
+1127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         fu4.state = f4;
+1128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         fu8.state = f8;
+1129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         for (ix = 0; ix < sizeof fu2; ++ix)
+1131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+1132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu2.bytes[ix] = AESBCMEMBER(FFmul02)(fu2.bytes[ix]);
+1133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu4.bytes[ix] = AESBCMEMBER(FFmul04)(fu4.bytes[ix]);
+1134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu8.bytes[ix] = AESBCMEMBER(FFmul08)(fu8.bytes[ix]);
+1135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         }
+1136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         f2 = fu2.state;
+1137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         f4 = fu4.state;
+1138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         f8 = fu8.state;
+1139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+1140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f2);
+1143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f4);
+1144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f8);
+1145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+1149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u in, out;
+1151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+1152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = state;
+1154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (out.bytes); ix += AES_Nb)
+1156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+1157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESWord s0 = in.bytes[ix + 0];
+1158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESWord s1 = in.bytes[ix + 1];
+1159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESWord s2 = in.bytes[ix + 2];
+1160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESWord s3 = in.bytes[ix + 3];
+1161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESWord p, q;
+1162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         q =     AESBCMEMBER(FFmul08)(s0 ^ s1 ^ s2 ^ s3);
+1164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         p = q ^ AESBCMEMBER(FFmul04)(s0 ^ s2);
+1165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         q = q ^ AESBCMEMBER(FFmul04)(s1 ^ s3);
+1166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 40
+
+
+1167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 0] =      s1 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s0 ^ s1) ^ p;
+1168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 1] = s0      ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s1 ^ s2) ^ q;
+1169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 2] = s0 ^ s1      ^ s3 ^ AESBCMEMBER(FFmul02)(s2 ^ s3) ^ p;
+1170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 3] = s0 ^ s1 ^ s2      ^ AESBCMEMBER(FFmul02)(s3 ^ s0) ^ q;
+1171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+1172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+1174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+1179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.2
+1180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+1182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(Rcon)[] = {
+1183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     0x00000001, 0x00000002, 0x00000004, 0x00000008,
+1184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     0x00000010, 0x00000020, 0x00000040, 0x00000080,
+1185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     0x0000001B, 0x00000036
+1186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+1187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(RotWord) (AESWord w)
+1191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(RotWord) (AESWord w)
+1195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (w >> 8) | (w << 24);
+1197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(GetWord) (const AESByte * pointer)
+1202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(GetWord) (const AESByte * pointer)
+1206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /*
+1208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * not portable to architectures which require aligned multibyte reads
+1209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * but as this only runs on Intel at this point it is fine for now
+1210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      */
+1211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return *(AESWord*)pointer;
+1212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion) (CipherVec * r, const AESByte * key, unsigned Nr, unsigned Nk)
+1218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord * w = (AESWord*)r;
+1220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     const AESWord * pRcon;
+1221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix, limit;
+1222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord temp;
+1223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 41
+
+
+1224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_KEYEXP(("%s (w (%p), key (%p), Nr (%u) Nk (%u))\n", __func__, w, key, Nr, Nk));
+1226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < Nk; ++ix)
+1228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+1229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_KEYEXP(("i (dec): %u\n", ix));
+1230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         temp = AESBCMEMBER(GetWord) (key+(ix*4));
+1231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         w[ix] = temp;
+1232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_KEYEXP(("kw[%i]: %0.8x\n", ix, temp));
+1233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+1234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     limit = AES_Nb * (Nr + 1);
+1236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     pRcon = AESBCMEMBER(Rcon);
+1237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_KEYEXP(("Nk (%u) Nr (%u) limit (%u)\n", Nk, Nr, limit));
+1238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         
+1239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (; ix < limit; ++ix)
+1240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+1241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_KEYEXP(("i (dec): %u %u\n", ix, limit));
+1243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         /* temp should already be set */
+1245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_KEYEXP(("temp: %0.8x\n", temp));
+1246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if ((ix % Nk) == 0)
+1247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+1248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             temp = AESBCMEMBER(RotWord)(temp);
+1249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             DEBUG_KEYEXP(("after RotWord: %0.8x \n", temp));
+1250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             temp = AESBCMEMBER(SubWord) (temp);
+1251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             DEBUG_KEYEXP(("after SubWord: %0.8x \n", temp));
+1252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             DEBUG_KEYEXP(("Rcon [i/Nk]: %0.8x\n", *pRcon));
+1253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             temp ^= *pRcon++;
+1254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             DEBUG_KEYEXP(("after XOR with Rcon: %0.8x \n", temp));
+1255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         }
+1256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         else if ((Nk > 6) && ((ix % Nk) == 4))
+1257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+1258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             temp = AESBCMEMBER(SubWord) (temp);
+1259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             DEBUG_KEYEXP(("after SubWord: %0.8x \n", temp));
+1260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         }
+1261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_KEYEXP(("w[i-Nk]: %0.8x\n", w[ix-Nk]));
+1262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         temp ^= w [ix - Nk];
+1263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_KEYEXP(("kw[ix]: %0.8x\n", temp));
+1264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         w [ix] = temp;
+1265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+1266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft32) (CipherVec state)
+1271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft32) (CipherVec state)
+1275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVec mask = { 0xFF, 0xFF, 0xFF, 0xFF, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+1279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 42
+
+
+1281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftRight64) (CipherVec state)
+1294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftRight64) (CipherVec state)
+1298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVec mask = { 8, 9, 10, 11, 12, 13, 14, 15, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF
+1301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+1302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[2];
+1307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+1308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = 0;
+1309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = 0;
+1310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft64) (CipherVec state)
+1317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft64) (CipherVec state)
+1321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVec mask = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0, 1, 2, 3, 4, 
+1324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+1325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+1330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+1331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+1332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+1333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 43
+
+
+1338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W3:W3:W3:W3
+1344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn3) (CipherVec state)
+1347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn3) (CipherVec state)
+1351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_PSHUFD128 (state,0xFF);
+1354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W2:W2:W2:W2
+1372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn2) (CipherVec state)
+1375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn2) (CipherVec state)
+1379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_PSHUFD128 (state,0xAA);
+1382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+1387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[2];
+1388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[2];
+1389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 44
+
+
+1395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W2:W2:W2:W2
+1400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn1) (CipherVec state)
+1403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn1) (CipherVec state)
+1407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_PSHUFD128 (state,0x55);
+1410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[1];
+1415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+1416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[1];
+1417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W0:W0:W0
+1428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn0) (CipherVec state)
+1431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn0) (CipherVec state)
+1435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_PSHUFD128 (state,0x00);
+1438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[0];
+1443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[0];
+1444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+1445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 45
+
+
+1452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     X0:X1:X2:X3
+1454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:X0:X1
+1457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge1) (CipherVec w, CipherVec x)
+1460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge1) (CipherVec w, CipherVec x)
+1464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_SHUFPD (w, x, 0x00);
+1467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u ww;
+1469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u xx;
+1470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.state = w;
+1472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     xx.state = x;
+1473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[2] = xx.columns[0];
+1475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[3] = xx.columns[1];
+1476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return ww.state;
+1478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     X0:X1:X2:X3
+1486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     X2:X3:W0:W1
+1489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge2) (CipherVec w, CipherVec x)
+1492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge2) (CipherVec w, CipherVec x)
+1496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_SHUFPD (w, x, 0x01);
+1499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u ww;
+1501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u xx;
+1502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.state = w;
+1504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     xx.state = x;
+1505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[0] = ww.columns[2];
+1507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[1] = ww.columns[3];
+1508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[2] = xx.columns[0];
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 46
+
+
+1509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[3] = xx.columns[1];
+1510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return ww.state;
+1512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1514:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     X0:X1:X2:X3
+1520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     X2:X3:W0:W1
+1523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge3) (CipherVec v0, CipherVec v1)
+1526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge3) (CipherVec v0, CipherVec v1)
+1530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_SHUFPD (v0, v1, 0x02);
+1533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u t0;
+1535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u t1;
+1536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     t0.state = v0;
+1538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     t1.state = v1;
+1539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     t0.columns[2] = t0.columns[0];
+1541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     t0.columns[3] = t0.columns[1];
+1542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     t0.columns[0] = t1.columns[2];
+1543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     t0.columns[1] = t1.columns[3];
+1544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return t0.state;
+1546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W0^W1:W0^W1^W2:W0^W1^W2^W3
+1556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftXorColumns) (CipherVec state)
+1559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftXorColumns) (CipherVec state)
+1563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 47
+
+
+1566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+1570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+1572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] ^= temp.columns[0];
+1578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] ^= temp.columns[1];
+1579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] ^= temp.columns[2];
+1580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssist) (register CipherVec state, const int rcon)
+1588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssist) (register CipherVec state, const int rcon)
+1592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_AESKEYGENASSIST (state, rcon);
+1595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u in;
+1597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u out;
+1598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord rconw;
+1599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rconw = (AESWord)(AESByte)rcon;
+1601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = state;
+1602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out.columns[0] = AESBCMEMBER(SubWord)(in.columns[1]);
+1604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out.columns[1] = AESBCMEMBER(RotWord)(out.columns[0]) ^ rconw;
+1605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out.columns[2] = AESBCMEMBER(SubWord)(in.columns[3]);
+1606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out.columns[3] = AESBCMEMBER(RotWord)(out.columns[2]) ^ rconw;
+1607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+1609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn1) (register CipherVec state, const int rcon)
+1615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn1) (register CipherVec state, const int rcon)
+1619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+1622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 48
+
+
+1623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return  AESBCMEMBER(StateDupColumn1) (tmp);
+1624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+1626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord rconw;
+1627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord temp;
+1628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rconw = (AESWord)(AESByte)rcon;
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[1]);
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(RotWord)(temp);
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp ^= rconw;
+1634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+1637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn2) (register CipherVec state)
+1643:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1644:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1645:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1646:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn2) (register CipherVec state)
+1647:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1648:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+1650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, 0);
+1651:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return  AESBCMEMBER(StateDupColumn2) (tmp);
+1652:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1653:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+1654:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord temp;
+1655:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+1658:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+1661:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1662:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1663:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1664:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1665:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1666:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn3) (register CipherVec state, const int rcon)
+1667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1669:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1670:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn3) (register CipherVec state, const int rcon)
+1671:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1672:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+1675:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return  AESBCMEMBER(StateDupColumn3) (tmp);
+1676:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1677:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1678:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec vrcon;
+1679:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 49
+
+
+1680:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+1691:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1692:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1693:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1694:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #elif USE_VEC && 1
+1695:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp;
+1696:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+1697:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     
+1698:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [3] = rcon;
+1699:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1700:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+1701:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+1702:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+1703:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+1704:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, u.state);
+1705:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+1706:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+1707:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+1708:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+1709:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1710:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1711:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+1712:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord rconw;
+1713:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord temp;
+1714:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1715:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rconw = (AESWord)(AESByte)rcon;
+1716:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+1717:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+1718:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(RotWord)(temp);
+1719:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp ^= rconw;
+1720:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1721:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+1722:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+1723:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1724:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1725:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1726:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1727:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1728:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+1729:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1730:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion128) (CipherVec * round_keys, const AESByte * key)
+1731:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 971              		.loc 2 1731 0
+ 972              		.cfi_startproc
+ 973 0014 55       		pushq	%rbp
+ 974              	.LCFI2:
+ 975              		.cfi_def_cfa_offset 16
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 50
+
+
+ 976 0015 4889E5   		movq	%rsp, %rbp
+ 977              		.cfi_offset 6, -16
+ 978              	.LCFI3:
+ 979              		.cfi_def_cfa_register 6
+ 980 0018 4157     		pushq	%r15
+ 981 001a 4156     		pushq	%r14
+ 982 001c 4155     		pushq	%r13
+ 983 001e 4154     		pushq	%r12
+ 984 0020 53       		pushq	%rbx
+ 985 0021 4881EC58 		subq	$10328, %rsp
+ 985      280000
+ 986 0028 4889BDB8 		movq	%rdi, -9544(%rbp)
+ 986      DAFFFF
+ 987 002f 4889B5B0 		movq	%rsi, -9552(%rbp)
+ 987      DAFFFF
+ 988              		.loc 2 1731 0
+ 989 0036 488B85B0 		movq	-9552(%rbp), %rax
+ 989      DAFFFF
+ 990 003d 48898530 		movq	%rax, -6608(%rbp)
+ 990      E6FFFF
+ 991              	.LBB444:
+ 992              	.LBB445:
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     memmove (&u.bytes, ain, sizeof (u));
+ 993              		.loc 2 134 0
+ 994 0044 488B8D30 		movq	-6608(%rbp), %rcx
+ 994      E6FFFF
+ 995 004b 488D85C0 		leaq	-9536(%rbp), %rax
+ 995      DAFFFF
+ 996 0052 BA100000 		movl	$16, %edx
+ 996      00
+ 997 0057 4889CE   		movq	%rcx, %rsi
+ 998 005a 4889C7   		movq	%rax, %rdi
+ 999              		.cfi_offset 3, -56
+ 1000              		.cfi_offset 12, -48
+ 1001              		.cfi_offset 13, -40
+ 1002              		.cfi_offset 14, -32
+ 1003              		.cfi_offset 15, -24
+ 1004 005d E8000000 		call	memmove at PLT
+ 1004      00
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 1005              		.loc 2 135 0
+ 1006 0062 F30F6F85 		movdqu	-9536(%rbp), %xmm0
+ 1006      C0DAFFFF 
+ 1007              	.LBE445:
+ 1008              	.LBE444:
+1732:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec state;
+1733:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec kgastate;
+1734:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1735:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(StateIn) (key);
+ 1009              		.loc 2 1735 0
+ 1010 006a F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 1010      10E6FFFF 
+1736:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[0] = state;
+ 1011              		.loc 2 1736 0
+ 1012 0072 488B85B8 		movq	-9544(%rbp), %rax
+ 1012      DAFFFF
+ 1013 0079 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 51
+
+
+ 1013      10E6FFFF 
+ 1014 0081 F30F7F00 		movdqu	%xmm0, (%rax)
+ 1015 0085 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 1015      10E6FFFF 
+ 1016 008d F30F7F85 		movdqu	%xmm0, -6592(%rbp)
+ 1016      40E6FFFF 
+ 1017              	.LBB446:
+ 1018              	.LBB447:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 1019              		.loc 2 1681 0
+ 1020 0095 B8010000 		movl	$1, %eax
+ 1020      00
+ 1021 009a 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 1021      00000000 
+ 1022 00a2 F30F7F85 		movdqu	%xmm0, -6560(%rbp)
+ 1022      60E6FFFF 
+ 1023 00aa 89855CE6 		movl	%eax, -6564(%rbp)
+ 1023      FFFF
+ 1024              	.LBB448:
+ 1025              	.LBB449:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 1026              		.loc 2 522 0
+ 1027 00b0 F30F6F85 		movdqu	-6560(%rbp), %xmm0
+ 1027      60E6FFFF 
+ 1028 00b8 F30F7F85 		movdqu	%xmm0, -9456(%rbp)
+ 1028      10DBFFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 1029              		.loc 2 523 0
+ 1030 00c0 B8030000 		movl	$3, %eax
+ 1030      00
+ 1031 00c5 4898     		cltq
+ 1032 00c7 8B955CE6 		movl	-6564(%rbp), %edx
+ 1032      FFFF
+ 1033 00cd 89948510 		movl	%edx, -9456(%rbp,%rax,4)
+ 1033      DBFFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 1034              		.loc 2 524 0
+ 1035 00d4 F30F6F85 		movdqu	-9456(%rbp), %xmm0
+ 1035      10DBFFFF 
+ 1036 00dc F30F7F85 		movdqu	%xmm0, -6560(%rbp)
+ 1036      60E6FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 1037              		.loc 2 526 0
+ 1038 00e4 F30F6F85 		movdqu	-6560(%rbp), %xmm0
+ 1038      60E6FFFF 
+ 1039              	.LBE449:
+ 1040              	.LBE448:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 1041              		.loc 2 1681 0
+ 1042 00ec 660F7F85 		movdqa	%xmm0, -10176(%rbp)
+ 1042      40D8FFFF 
+ 1043 00f4 F30F6F85 		movdqu	-6592(%rbp), %xmm0
+ 1043      40E6FFFF 
+ 1044 00fc F30F7F85 		movdqu	%xmm0, -6544(%rbp)
+ 1044      70E6FFFF 
+ 1045 0104 F30F6F85 		movdqu	-6544(%rbp), %xmm0
+ 1045      70E6FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 52
+
+
+ 1046 010c F30F7F85 		movdqu	%xmm0, -6512(%rbp)
+ 1046      90E6FFFF 
+ 1047 0114 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 1047      000000
+ 1048 011b 48898588 		movq	%rax, -6520(%rbp)
+ 1048      E6FFFF
+ 1049              	.LBB450:
+ 1050              	.LBB451:
+ 1051              	.LBB452:
+ 1052              	.LBB453:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 1053              		.loc 2 851 0
+ 1054 0122 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 1054      00000000 
+ 1055 012a F30F7F85 		movdqu	%xmm0, -6480(%rbp)
+ 1055      B0E6FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 1056              		.loc 2 854 0
+ 1057 0132 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 1057      00000000 
+ 1058 013a F30F6F8D 		movdqu	-6512(%rbp), %xmm1
+ 1058      90E6FFFF 
+ 1059 0142 F30F7F8D 		movdqu	%xmm1, -6400(%rbp)
+ 1059      00E7FFFF 
+ 1060 014a F30F7F85 		movdqu	%xmm0, -6416(%rbp)
+ 1060      F0E6FFFF 
+ 1061              	.LBB454:
+ 1062              	.LBB455:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 1063              		.loc 2 206 0
+ 1064 0152 F30F6F85 		movdqu	-6416(%rbp), %xmm0
+ 1064      F0E6FFFF 
+ 1065 015a F30F6F8D 		movdqu	-6400(%rbp), %xmm1
+ 1065      00E7FFFF 
+ 1066 0162 660FDBC1 		pand	%xmm1, %xmm0
+ 1067              	.LBE455:
+ 1068              	.LBE454:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 1069              		.loc 2 854 0
+ 1070 0166 F30F7F85 		movdqu	%xmm0, -6432(%rbp)
+ 1070      E0E6FFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 1071              		.loc 2 862 0
+ 1072 016e 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 1072      00000000 
+ 1073 0176 F30F6F8D 		movdqu	-6512(%rbp), %xmm1
+ 1073      90E6FFFF 
+ 1074 017e F30F7F8D 		movdqu	%xmm1, -6368(%rbp)
+ 1074      20E7FFFF 
+ 1075 0186 F30F7F85 		movdqu	%xmm0, -6384(%rbp)
+ 1075      10E7FFFF 
+ 1076              	.LBB456:
+1737:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1738:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #define KE128(rcon,offset) \
+1739:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     kgastate = AESBCMEMBER(AesKeyGenAssistColumn3) (state, rcon); \
+1740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(ShiftXorColumns) (state); \
+1741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= kgastate; \
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 53
+
+
+1742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[offset] = state
+1743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x01,1);
+1745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x02,2);
+1746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x04,3);
+1747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x08,4);
+1748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x10,5);
+1749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x20,6);
+1750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x40,7);
+1751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x80,8);
+1752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x1B,9);
+1753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x36,10);
+1754:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1755:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1756:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1757:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion128) (CipherVec * w, const AESByte * key)
+1758:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1759:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     OUTMSG(("\n\n\n%s: Not my code\n\n\n",__func__));
+1760:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_128, AES_Nk_128);
+1761:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1762:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1763:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1764:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1765:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+1766:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1767:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion192) (CipherVec * round_keys, const AESByte * key)
+1768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1769:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /* work on three blocks at a time which is two Nr worth
+1770:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * we'll build it with 6 words in v0:v1 and 6 words in w0:w1
+1771:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * but move them them into v0:v1:v2 before writing them to
+1772:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * the key schedule
+1773:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      */
+1774:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1775:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec v0, v1, v2, v3, v4;
+1776:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec k;          /* we'll only need one of the key gen assist blocks at a time */
+1777:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1778:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 0 */
+1779:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(StateIn) (key);              /* k0    : k1    : k2     : k3           */
+1780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateIn) (key+8);            /* k2    : k3    : k4     : k5           */
+1781:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateShiftRight64) (v1);     /* k4    : k5    : 0      : 0            */
+1782:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1783:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[0] = v0; /* K0:K1:K2:K3 */
+1784:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1785:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 */
+1786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1787:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+1789:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v1, 0x01);                            /* F(k5) : F(k5) : F(k5)  : F(k5)        */
+1790:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3  = AESBCMEMBER(ShiftXorColumns) (v0);       /* k0    : k0^k1 :k0^k1^k2:k0^k1^k2^k3   */
+1791:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3 ^= k;                                       /* k6    : k7    : k8     : k9           */
+1792:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4  = AESBCMEMBER(ShiftXorColumns) (v1);       /* k4    : k4^k5 : k4^k5  : k4^k5        */
+1793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k9    : k9    : k9     : k9           */
+1794:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4 ^= k;                                       /* k10   : k11   : k10    : k11          */
+1795:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateMerge1) (v1,v3);        /* k4    : k5    : k6     : k7           */
+1796:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[1] = v1; /* K4:K5:K6:K7 */
+1797:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1798:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v2  = AESBCMEMBER(StateMerge2) (v3,v4);        /* k8    : k9    : k10    : k11          */
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 54
+
+
+1799:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[2] = v2; /* K8:K9:K10:K11 */
+1800:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1801:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 2 */
+1802:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(ShiftXorColumns) (v3);       /* k6    : k6^k7 :k6^k7^k8:k6^k7^k8^k9   */
+1803:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(ShiftXorColumns) (v4);       /* k10   :k10^k11: k10^k11: k10^k11      */
+1804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+1805:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v2,0x02);                             /* F(k11): F(k11): F(k11) : F(k11)       */
+1806:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0 ^= k;                                       /* k12   : k13   : k14    : k15          */
+1807:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[3] = v0; /* K12:K13:K14:K15 */
+1808:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v0);   /* k15   : k15   : k15    : k15          */
+1809:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1 ^= k;                                       /* k16   : k17   : k16    : k17          */
+1810:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1811:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1812:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 */
+1813:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1814:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1815:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+1816:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v1,0x04);                             /* F(k17): F(k17): F(k17) : F(k17)       */
+1817:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3  = AESBCMEMBER(ShiftXorColumns) (v0);       /* k12   :k12^k13:k12^k13^k14:k12^k13^k14^k15 */
+1818:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3 ^= k;                                       /* k18   : k19   : k20    : k21          */
+1819:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4  = AESBCMEMBER(ShiftXorColumns) (v1);       /* k16   :k16^k17: k17    : 0            */
+1820:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k21   : k21   : k21    : k21          */
+1821:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4 ^= k;                                       /* k22   : k23   : x      : x            */
+1822:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateMerge1) (v1,v3);        /* k16   : k17   : k18    : k19          */
+1823:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[4] = v1; /* K16:K17:K18:K19 */
+1824:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1825:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v2  = AESBCMEMBER(StateMerge2) (v3,v4);        /* k20   : k21   : k22    : k23          */
+1826:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[5] = v2; /* K20:K21:K22:K23 */
+1827:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1828:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 2 */
+1829:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(ShiftXorColumns) (v3);       /* k18   :k18^k19:k18^k19^k20:k18^k19^k20^k21 */
+1830:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(ShiftXorColumns) (v4);       /* k22   :k22^k23: k23    : 0            */
+1831:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+1832:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v2,0x08);                             /* F(k23): F(k23): F(k23) : F(k23)       */
+1833:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0 ^= k;                                       /* k24   : k25   : k26    : k27          */
+1834:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v0);   /* k27   : k27   : k27    : k27          */
+1835:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1 ^= k;                                       /* k28   : k29   : x      : x            */
+1836:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1837:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[6] = v0; /* K24:K25:K26:K27 */
+1838:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1839:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 4-15 = 28-39 */
+1840:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1841:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1842:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+1843:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v1,0x10);                             /* F(k29): F(k29): F(k29) : F(k29)       */
+1844:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3  = AESBCMEMBER(ShiftXorColumns) (v0);       /* k24   :k24^k25:k24^k25^k26:k24^k25^k26^k27 */
+1845:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3 ^= k;                                       /* k30   : k31   : k32    : k33          */
+1846:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4  = AESBCMEMBER(ShiftXorColumns) (v1);       /* k26   :k28^k29: k29    : 0            */
+1847:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k33   : k33   : k33    : k33          */
+1848:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4 ^= k;                                       /* k34   : k35   : x      : x            */
+1849:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateMerge1) (v1,v3);        /* k28   : k29   : k30    : k31          */
+1850:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[7] = v1; /* K28:K29:K30:K31 */
+1852:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1853:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v2  = AESBCMEMBER(StateMerge2) (v3,v4);        /* k32   : k33   : k34    : k35          */
+1854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[8] = v2; /* K32:K33:K34:K35 */
+1855:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 2 */
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 55
+
+
+1856:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(ShiftXorColumns) (v3);       /* k30   :k30^k31:k30^k31^k32:k30^k31^k32^k33 */
+1857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(ShiftXorColumns) (v4);       /* k26   :k26^k27: k27    : 0            */
+1858:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+1859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v2,0x20);                             /* F(k35): F(k35): F(k35) : F(k35)       */
+1860:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0 ^= k;                                       /* k36   : k37   : k38    : k39          */
+1861:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (v0);       /* k39   : k39   : k39    : k39          */
+1862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1 ^= k;                                       /* k40   : k41   : x      : x            */
+1863:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1864:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[9] = v0; /* K36:K37:K38:K39 */
+1865:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 4-15 = 40-55 but we only need through 51 so we change from pattern 2 to pattern 3 */
+1867:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1869:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+1870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v1,0x40);                             /* F(k41): F(k41): F(k41) : F(k41)       */
+1871:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3  = AESBCMEMBER(ShiftXorColumns) (v0);       /* k36   :k36^k37:k36^k37^k38:k36^k37^k38^k39 */
+1872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4  = AESBCMEMBER(ShiftXorColumns) (v1);       /* k40   :k40^k41: x   5  : x            */
+1873:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3 ^= k;                                       /* k42   : k43   : k44    : k45          */
+1874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k45   : k45   : k45    : k45          */
+1875:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4 ^= k;                                       /* k46   : k47   : x      : x            */
+1876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateMerge1) (v1,v3);        /* k40   : k41   : k42    : k43          */
+1877:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[10] = v1; /* K40:K41:K42:K43 */
+1878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v2  = AESBCMEMBER(StateMerge2) (v3,v4);        /* k44   : k45   : k46    : k47          */
+1879:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[11] = v2; /* K44:K45:K46:K47 */
+1880:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1881:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 3 */
+1882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(ShiftXorColumns) (v3);       /* k42   :k42^k43:k42^k43^k44:k42^k43^k44^k45  *
+1883:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+1884:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                        (v2,0x80);  /* F(k47): F(k47): F(k47) : F(k47)       */
+1885:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0 ^= k;                                       /* k48   : k49   : k50    : k51          */
+1886:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[12] = v0;                           /* K48:K49:K50:K51 */
+1887:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1888:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1889:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1890:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion192) (CipherVec * w, const AESByte * key)
+1891:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1892:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_192, AES_Nk_192);
+1893:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1894:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1895:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1896:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1897:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1898:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1899:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----- */
+1900:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1901:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC || 1
+1902:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1903:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion256) (CipherVec * round_keys, const AESByte * key)
+1904:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1905:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec v0, v1;
+1906:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec k;
+1907:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1908:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0 = AESBCMEMBER (StateIn) (key);
+1909:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1 = AESBCMEMBER (StateIn) (key + sizeof v0);
+1910:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1911:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[0] = v0; /* k0  : k1  : k2  : k3  */
+1912:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[1] = v1; /* k4  : k5  : k6  : k7  */
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 56
+
+
+1913:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1914:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #define KE256_1(offset,rcon)                            \
+1915:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)(v1,rcon); \
+1916:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(ShiftXorColumns) (v0);            \
+1917:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(VecXor) (v0, k);                  \
+1918:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[offset] = v0
+1919:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1920:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #define KE256_2(offset) \
+1921:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn2)(v0);      \
+1922:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(ShiftXorColumns) (v1);            \
+1923:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(VecXor) (v1, k);                  \
+1924:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[offset] = v1
+1925:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1926:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(2,0x01);    /* k8  : k9  : k10 : k11 */
+1927:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(3);         /* k12 : k13 : k14 : k15 */
+1928:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(4,0x02);    /* k16 : k17 : k18 : k19 */
+1929:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(5);         /* k20 : k21 : k22 : k23 */
+1930:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(6,0x04);    /* k24 : k25 : k26 : k27 */
+1931:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(7);         /* k28 : k29 : k30 : k31 */
+1932:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(8,0x08);    /* k32 : k33 : k34 : k35 */
+1933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(9);         /* k36 : k37 : k38 : k39 */
+1934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(10,0x10);   /* k40 : k41 : k42 : k43 */
+1935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(11);        /* k44 : k45 : k46 : k47 */
+1936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(12,0x20);   /* k48 : k49 : k50 : k51 */
+1937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(13);        /* k52 : k53 : k54 : k55 */
+1938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(14,0x40);   /* k56 : k57 : k58 : k59 */
+1939:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1940:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1941:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1942:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion256) (CipherVec * w, const AESByte * key)
+1943:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1944:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_256, AES_Nk_256);
+1945:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1946:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1947:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1948:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1949:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1950:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion) (CipherVec * r, const CipherVec * dr, unsigned Nr)
+1951:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1952:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix, jx;
+1953:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1954:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     jx = Nr;
+1955:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ix = 0;
+1956:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r[ix++] = dr[jx--];
+1957:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     while (jx)
+1958:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         r[ix++] = AESBCMEMBER(InvMixColumns)(dr[jx--]);
+1959:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r[ix] = dr[jx];
+1960:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1961:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1962:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1963:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1964:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion128) (CipherVec * w, const CipherVec * kw)
+1965:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1966:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_128);
+1967:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1968:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1969:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 57
+
+
+1970:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1971:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion192) (CipherVec * w, const CipherVec * kw)
+1972:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1973:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_192);
+1974:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1975:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1976:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1977:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1978:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion256) (CipherVec * w, const CipherVec * kw)
+1979:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1980:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_256);
+1981:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1982:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1983:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1984:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1985:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Cipher First Round
+1986:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1987:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1988:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FirstRound) (CipherVec state, const CipherVec round_keys)
+1989:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1990:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1991:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1992:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FirstRound) (CipherVec state, const CipherVec round_keys)
+1993:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1994:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Start of Round", state);
+1995:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1996:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+1997:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1998:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+1999:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2000:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("End 1st Round", state);
+2001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2002:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+2003:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2004:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2005:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2006:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+2007:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MiddleRound) (register CipherVec state,
+2008:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                     register const CipherVec round_keys)
+2009:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+2010:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2011:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+2012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MiddleRound) (register CipherVec state,
+2013:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                     register const CipherVec round_keys)
+2014:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2015:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if _DEBUGGING
+2016:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec mstate;
+2017:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec mround_keys;
+2018:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2019:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+2020:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mround_keys = round_keys;
+2021:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2022:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Start of Round", mstate);
+2023:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2024:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2025:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2026:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 58
+
+
+2027:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_AESENC (state, round_keys);
+2028:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+2029:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(SubBytes) (state);
+2030:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2031:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After SubBytes", state);
+2032:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2033:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(ShiftRows) (state);
+2034:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2035:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+2036:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2037:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(MixColumns) (state);
+2038:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2039:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /* ommited n on purpose */
+2040:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After MixColum", state);
+2041:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2042:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2043:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2044:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+2045:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("End of Round", state);
+2046:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+2048:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2049:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2050:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2051:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+2052:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(LastRound) (register CipherVec state, register CipherVec round_keys)
+2053:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+2054:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2055:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+2056:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(LastRound) (register CipherVec state, register CipherVec round_keys)
+2057:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2058:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Start of Round", state);
+2059:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2060:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2061:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_AESENCLAST (state, round_keys);
+2062:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+2063:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(SubBytes) (state);
+2064:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2065:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After SubBytes", state);
+2066:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2067:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(ShiftRows) (state);
+2068:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2069:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+2070:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2071:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2072:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2073:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+2074:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("End of Round", state);
+2075:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2076:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+2077:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2078:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2079:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2080:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2081:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Cipher
+2082:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2083:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 59
+
+
+2084:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * 
+2085:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** This implementation as stated
+2086:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * above for simplifaction broke out the three types of rounds into
+2087:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * first round, middle rounds, and last round.  This approach was taken
+2088:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * for ease of coding for optimization using smaller bytes of code
+2089:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * but inlining of the functions for efficiency
+2090:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2091:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+2092:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(Cipher) (CipherVec state, const CipherVec * key,
+2093:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                             unsigned Nr)
+2094:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2095:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix = 0;
+2096:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2097:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(FirstRound) (state, key[ix++]);
+2098:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2099:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for ( ; ix < Nr; ++ix)
+2100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(MiddleRound) (state, key[ix] );
+2101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(LastRound) (state, key[ix]);
+2103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 
+2107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Section 5.1 of FIPS 197
+2108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   This set of routines implements our structured wrapping of the 
+2110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   FIPS-197 Section 5.3.5 Equivalent Inverse Cipher.  In particular
+2111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   figure 15 Pseudo Code for the Equivalent Inverse Cipher.
+2112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   The FIPS pseudocode has a single function which we have broken out 
+2114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   into three kinds of rounds - first round, middle rounds and last
+2115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   round as we have also done with the cipher rountine.
+2116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   The EqInvCipher operates on whole cipher blocks so the Byte and Block
+2118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   code is the same here until subroutines of the round functions are
+2119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   called.  
+2120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 
+2123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * First round of equivalent inverse cipher is merely an XOR against the
+2124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * round key.
+2125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvFirstRound) (CipherVec state, CipherVec round_keys)
+2128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+2129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvFirstRound) (CipherVec state, CipherVec round_keys)
+2132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+2134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state =  AESBCMEMBER(AddRoundKey) (state, round_keys);
+2136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+2138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("End of Round", state);
+2139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+2140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 60
+
+
+2141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * middle rounds of the equivalent inverse cipher perform four steps
+2145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   InvSubBytes (inverse substitute bytes
+2146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   InvShiftRows (inverse shift rows
+2147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   InvMixColumns (inverse mix columns)
+2148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   AddRoundKey   (xor against the round key)
+2149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * the AES-NI instruction set from until implments all four steps with 
+2151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * a single instruction
+2152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvMiddleRound) (register CipherVec state,
+2156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                          register CipherVec round_keys)
+2157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+2158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvMiddleRound) (register CipherVec state,
+2161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                          register CipherVec round_keys)
+2162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if _DEBUGGING
+2164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec mstate;
+2165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec mround_keys;
+2166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+2168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mround_keys = round_keys;
+2169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Start of Round", mstate);
+2172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /* 
+2174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * AES-NI implmentation
+2175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      */
+2176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_AESDEC (state, round_keys);
+2179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else /* #if USE_AES_NI */
+2181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /*
+2183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * All other implementations
+2184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      */
+2185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvSubBytes) (state);
+2186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # if _DEBUGGING
+2188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+2189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvSubBy", mstate);
+2191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # endif
+2192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvShiftRows) (state);
+2194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # if _DEBUGGING
+2196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+2197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 61
+
+
+2198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvShift", mstate);
+2199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # endif
+2200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvMixColumns) (state);
+2202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # if _DEBUGGING
+2204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+2205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvMixCo", mstate);
+2207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # endif
+2208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if _DEBUGGING
+2213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+2214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Round Key", mround_keys);
+2216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("End of Round", mstate);
+2218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif /* #if USE_AES_NI */
+2219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+2221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * The final round of the equivalent inverse cipher is the same as 
+2226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * the middle rounds with the ommission of the InvMixColumns step.
+2227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvLastRound) (register CipherVec state,
+2230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                        register CipherVec round_keys)
+2231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+2232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvLastRound) (register CipherVec state,
+2235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                        register CipherVec round_keys)
+2236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+2238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_AESDECLAST (state, round_keys);
+2241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+2242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvSubBytes) (state);
+2244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvSubBy", state);
+2246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvShiftRows) (state);
+2248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvShift", state);
+2250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+2254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("End of Round", state);
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 62
+
+
+2255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+2257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * The EqInvCipher functions (is defined in Figure 15 'Pseudo Code for
+2262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * for the Equivalent Inverse Cipher.  This implementation as stated
+2263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * above for simplifaction broke out the three types of rounds into
+2264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * first round, middle rounds, and last round.  This approach was taken
+2265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * for ease of coding for optimization using smaller bytes of code
+2266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * but inlining of the functions for efficiency
+2267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static /*__inline__*/
+2269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvCipher) (CipherVec state, const CipherVec * key,
+2270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                     unsigned Nr)
+2271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix = 0;
+2273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(EqInvFirstRound) (state, key[ix++]);
+2275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for ( ; ix < Nr; ++ix)
+2277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(EqInvMiddleRound) (state, key[ix] );
+2278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(EqInvLastRound) (state, key[ix]);
+2280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+2284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * This section of the file is the use of the cipher defined above within
+2285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * our BlockCipherObject.
+2286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * These are the functions that will be directly referenced in the vector
+2288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * table for the block cipher.  These are not specifically derived from
+2289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * the FIPS-197 document.
+2290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "blockcipher-impl.h"
+2292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** typedef struct AES_CLASS AES_CLASS;
+2294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const char AESBCMEMBER(aes_ncbi_name) [] = CLASS_STRING(AES_CLASS);
+2296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Destroy
+2300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   How large is the stored key for this cipher?  Not the user key used
+2301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   to create this key (key schedule)
+2302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   This is needed by KCipher to know how large the KCipher objecr is at
+2304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   allocation and to know how much of a buffer each decryption/encryption is
+2305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(Destroy) (const BLOCKCIPHER_VEC_IMPL * self)
+2308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /* we use a constant object so do nothing */
+2310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 63
+
+
+2312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * BlockSize
+2315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t AESBCMEMBER(BlockSize) ()
+2318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (uint32_t) sizeof (AESBlock);
+2320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * KeySize
+2325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   How large is the stored key for this cipher?  Not the user key used
+2326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   to create this key (key schedule)
+2327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   This is needed by KCipher to know how large the KCipher objecr is at
+2329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   allocation and to know how much of a buffer each decryption/encryption is
+2330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t AESBCMEMBER(KeySize) ()
+2333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (uint32_t) sizeof (AESKeySchedule);
+2335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * SetEncryptKey
+2340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   The KCipher calls this to have the block cipher build an encryption
+2341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   key in the KCipher object
+2342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t AESBCMEMBER(SetEncryptKey) (void * encrypt_key, const char * user_key,
+2346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                  uint32_t user_key_size)
+2347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rc_t rc;
+2349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESKeySchedule * key;
+2350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rc = 0;
+2352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     key = encrypt_key;
+2353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     switch (user_key_size)
+2355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nk_128 * sizeof (AESWord):
+2357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         key->number_of_rounds = AES_Nr_128;
+2358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESBCMEMBER(KeyExpansion128) (key->round_keys, (AESByte*)user_key);
+2359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+2360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nk_192 * sizeof (AESWord):
+2362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         key->number_of_rounds = AES_Nr_192;
+2363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESBCMEMBER(KeyExpansion192) (key->round_keys, (AESByte*)user_key);
+2364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+2365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nk_256 * sizeof (AESWord):
+2367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         key->number_of_rounds = AES_Nr_256;
+2368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESBCMEMBER(KeyExpansion256) (key->round_keys, (AESByte*)user_key);
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 64
+
+
+2369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+2370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     default:
+2372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         key->number_of_rounds = 0;
+2373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         memset (key, 0, sizeof (*key));
+2374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         rc = RC (rcKrypto, rcBlockCipher, rcUpdating, rcParam, rcInvalid);
+2375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+2376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return rc;
+2378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * SetDecryptKey
+2383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   The KCipher calls this to have the block cipher build an decryption
+2384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   key in the KCipher object
+2385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t AESBCMEMBER(SetDecryptKey) (void * decrypt_key,
+2389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                  const char * user_key,
+2390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                  uint32_t user_key_size)
+2391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESKeySchedule encrypt_key;
+2393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rc_t rc;
+2394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rc = AESBCMEMBER(SetEncryptKey) (&encrypt_key, user_key, user_key_size);
+2396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     if (rc == 0)
+2397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESKeySchedule * key;
+2399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         key = decrypt_key;
+2401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         switch (key->number_of_rounds = encrypt_key.number_of_rounds)
+2403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+2404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         case AES_Nr_128:
+2405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             AESBCMEMBER(EqInvKeyExpansion128) (key->round_keys,
+2406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                                encrypt_key.round_keys);
+2407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             break;
+2408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         case AES_Nr_192:
+2410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             AESBCMEMBER(EqInvKeyExpansion192) (key->round_keys,
+2411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                                encrypt_key.round_keys);
+2412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             break;
+2413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         case AES_Nr_256:
+2415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             AESBCMEMBER(EqInvKeyExpansion256) (key->round_keys,
+2416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                                encrypt_key.round_keys);
+2417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             break;
+2418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         }
+2419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return rc;
+2421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Encrypt
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 65
+
+
+2426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   Perform an encryption of a single block.  Chained modes and stream
+2428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   cipher modes will call this multiple times.
+2429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(Encrypt) (CipherVec state,
+2433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                 const void * encrypt_key)
+2434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     const AESKeySchedule * key = encrypt_key;
+2436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     assert (key);
+2437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     switch (key->number_of_rounds)
+2439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     default:
+2441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = vec_00;
+2442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+2443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nr_128:
+2445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_128);
+2446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+2447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nr_192:
+2449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_192);
+2450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+2451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nr_256:
+2453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_256);
+2454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+2455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+2458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Decrypt
+2463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   Perform a decryption of a single block.  Chained modes and stream
+2465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   cipher modes will call this multiple times.
+2466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(Decrypt) (CipherVec state,
+2469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                 const void * decrypt_key)
+2470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     const AESKeySchedule * key = decrypt_key;
+2472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     assert (key);
+2474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     switch (key->number_of_rounds)
+2476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     default:
+2478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = vec_00; /* for an illegal cipher key schedule just write zeroes */
+2479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+2480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nr_128:
+2482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 66
+
+
+2483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                           AES_Nr_128);
+2484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+2485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nr_192:
+2487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+2488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                           AES_Nr_192);
+2489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+2490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nr_256:
+2492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+2493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                           AES_Nr_256);
+2494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+2495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+2498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * MakeProcessorSupport
+2503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Run-time check for support of this particular AES implmentation by
+2505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * checking the flags given via the cpuid instruction.
+2506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** bool AESBCMEMBER(ProcessorSupport) ()
+2509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     uint32_t level = 1, a, b, c, d;
+2511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     bool ret = true;
+2512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __cpuid (level, a, b, c, d);
+2514:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_OBJECT(("%s: level %x a %x, b %x c %x d %x\n",__func__, level, a,b,c,d));
+2516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /*
+2519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * Only one flag tells whether the AES-NI instructions
+2520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * are implmented in this CPU
+2521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      */
+2522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     if ( ! (c & bit_AES))
+2523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no AES\n",__func__));
+2525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+2526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     } else
+2527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+2530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /*
+2531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * Several flags indicate different levels of SSE
+2532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * instruction implmentation
+2533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      *
+2534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * we require SSE4.1
+2535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      *
+2536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * that dates from 2006 so is most likely good enough
+2537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      */
+2538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         /* if ( ! (c & (bit_SSE4_2))
+2539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 67
+
+
+2540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+2541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+2542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     else */
+2545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if ( ! (c & bit_SSE4_1))
+2546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+2548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+2549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     else if ( ! (c & bit_SSSE3))
+2552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+2554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+2555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     else if ( ! (c & bit_SSE3))
+2558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no SSE3\n",__func__));
+2560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+2561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     else if ( ! (d & bit_SSE2))
+2564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no SSE2\n",__func__));
+2566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+2567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     else if ( ! (d & bit_SSE))
+2570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no SSE\n",__func__));
+2572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+2573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_OBJECT(("%s: passed\n",__func__));
+2576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return ret;
+2577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Init
+2582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   Initialize the fields of this object.  The derived class will call this
+2584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   during it's initialization.
+2585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * self      object to initialze
+2587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * vt        the virtual table of the derived class
+2588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * mgr       the cipher manager that is the construction factory block cipher
+2589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *           objects hold references to the manager while the manager merely
+2590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *           points at the block ciphers when all block ciphers are destroyed
+2591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *           the manager loses its references and it too can be destroyed if not
+2592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *           held elsewhere
+2593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * name      ASCIZ c-string the name of this class
+2594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+2596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KBlockCipherVec_vt_v1 AESBCMEMBER(_vt_) = 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 68
+
+
+2597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 1, 1 },
+2599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(Destroy),
+2601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(BlockSize),
+2602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(KeySize),
+2603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(SetEncryptKey),
+2604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(SetDecryptKey),
+2605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(Encrypt),
+2606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(Decrypt)
+2607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+2608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Make
+2612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Create a new AES Block Cipher object.
+2614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * The processor is checked to see if this particular version is supported on
+2615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * this particular CPU.
+2616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t AESBCMEMBER(Make) (KBlockCipher ** new_obj)
+2618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rc_t rc;
+2620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_OBJECT(("%s: %p\n",__func__,new_obj));
+2622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /* Check parameter first */
+2624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     if (new_obj == NULL)
+2625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+2626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     else
+2628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         *new_obj = NULL;
+2630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         /* check for processor support of this flavor */
+2632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if ( ! AESBCMEMBER(ProcessorSupport)())
+2633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+2634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         else
+2636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+2637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             rc = 0;
+2638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             *new_obj = (KBlockCipher*)&(AESBCMEMBER(_vt_));
+2639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         }
+2640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return rc;
+2642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 1077              		.loc 2 2642 0
+ 1078 018e 0FB68520 		movzbl	-6368(%rbp), %eax
+ 1078      E7FFFF
+ 1079 0195 0FB69510 		movzbl	-6384(%rbp), %edx
+ 1079      E7FFFF
+ 1080 019c 0FB6C0   		movzbl	%al, %eax
+ 1081 019f 6689858E 		movw	%ax, -10354(%rbp)
+ 1081      D7FFFF
+ 1082 01a6 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1082      D7FFFF
+ 1083 01ad F6F2     		divb	%dl
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 69
+
+
+ 1084 01af 4189C7   		movl	%eax, %r15d
+ 1085 01b2 0FB68521 		movzbl	-6367(%rbp), %eax
+ 1085      E7FFFF
+ 1086 01b9 0FB69511 		movzbl	-6383(%rbp), %edx
+ 1086      E7FFFF
+ 1087 01c0 0FB6C0   		movzbl	%al, %eax
+ 1088 01c3 6689858E 		movw	%ax, -10354(%rbp)
+ 1088      D7FFFF
+ 1089 01ca 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1089      D7FFFF
+ 1090 01d1 F6F2     		divb	%dl
+ 1091 01d3 88855FD8 		movb	%al, -10145(%rbp)
+ 1091      FFFF
+ 1092 01d9 0FB68522 		movzbl	-6366(%rbp), %eax
+ 1092      E7FFFF
+ 1093 01e0 0FB69512 		movzbl	-6382(%rbp), %edx
+ 1093      E7FFFF
+ 1094 01e7 0FB6C0   		movzbl	%al, %eax
+ 1095 01ea 6689858E 		movw	%ax, -10354(%rbp)
+ 1095      D7FFFF
+ 1096 01f1 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1096      D7FFFF
+ 1097 01f8 F6F2     		divb	%dl
+ 1098 01fa 88855ED8 		movb	%al, -10146(%rbp)
+ 1098      FFFF
+ 1099 0200 0FB68523 		movzbl	-6365(%rbp), %eax
+ 1099      E7FFFF
+ 1100 0207 0FB69513 		movzbl	-6381(%rbp), %edx
+ 1100      E7FFFF
+ 1101 020e 0FB6C0   		movzbl	%al, %eax
+ 1102 0211 6689858E 		movw	%ax, -10354(%rbp)
+ 1102      D7FFFF
+ 1103 0218 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1103      D7FFFF
+ 1104 021f F6F2     		divb	%dl
+ 1105 0221 88855DD8 		movb	%al, -10147(%rbp)
+ 1105      FFFF
+ 1106 0227 0FB68524 		movzbl	-6364(%rbp), %eax
+ 1106      E7FFFF
+ 1107 022e 0FB69514 		movzbl	-6380(%rbp), %edx
+ 1107      E7FFFF
+ 1108 0235 0FB6C0   		movzbl	%al, %eax
+ 1109 0238 6689858E 		movw	%ax, -10354(%rbp)
+ 1109      D7FFFF
+ 1110 023f 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1110      D7FFFF
+ 1111 0246 F6F2     		divb	%dl
+ 1112 0248 88855CD8 		movb	%al, -10148(%rbp)
+ 1112      FFFF
+ 1113 024e 0FB68525 		movzbl	-6363(%rbp), %eax
+ 1113      E7FFFF
+ 1114 0255 0FB69515 		movzbl	-6379(%rbp), %edx
+ 1114      E7FFFF
+ 1115 025c 0FB6C0   		movzbl	%al, %eax
+ 1116 025f 6689858E 		movw	%ax, -10354(%rbp)
+ 1116      D7FFFF
+ 1117 0266 0FB7858E 		movzwl	-10354(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 70
+
+
+ 1117      D7FFFF
+ 1118 026d F6F2     		divb	%dl
+ 1119 026f 4189C1   		movl	%eax, %r9d
+ 1120 0272 0FB68526 		movzbl	-6362(%rbp), %eax
+ 1120      E7FFFF
+ 1121 0279 0FB69516 		movzbl	-6378(%rbp), %edx
+ 1121      E7FFFF
+ 1122 0280 0FB6C0   		movzbl	%al, %eax
+ 1123 0283 6689858E 		movw	%ax, -10354(%rbp)
+ 1123      D7FFFF
+ 1124 028a 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1124      D7FFFF
+ 1125 0291 F6F2     		divb	%dl
+ 1126 0293 89C7     		movl	%eax, %edi
+ 1127 0295 0FB68527 		movzbl	-6361(%rbp), %eax
+ 1127      E7FFFF
+ 1128 029c 0FB69517 		movzbl	-6377(%rbp), %edx
+ 1128      E7FFFF
+ 1129 02a3 0FB6C0   		movzbl	%al, %eax
+ 1130 02a6 6689858E 		movw	%ax, -10354(%rbp)
+ 1130      D7FFFF
+ 1131 02ad 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1131      D7FFFF
+ 1132 02b4 F6F2     		divb	%dl
+ 1133 02b6 89C3     		movl	%eax, %ebx
+ 1134 02b8 0FB68528 		movzbl	-6360(%rbp), %eax
+ 1134      E7FFFF
+ 1135 02bf 0FB69518 		movzbl	-6376(%rbp), %edx
+ 1135      E7FFFF
+ 1136 02c6 0FB6C0   		movzbl	%al, %eax
+ 1137 02c9 6689858E 		movw	%ax, -10354(%rbp)
+ 1137      D7FFFF
+ 1138 02d0 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1138      D7FFFF
+ 1139 02d7 F6F2     		divb	%dl
+ 1140 02d9 4189C2   		movl	%eax, %r10d
+ 1141 02dc 0FB68529 		movzbl	-6359(%rbp), %eax
+ 1141      E7FFFF
+ 1142 02e3 0FB69519 		movzbl	-6375(%rbp), %edx
+ 1142      E7FFFF
+ 1143 02ea 0FB6C0   		movzbl	%al, %eax
+ 1144 02ed 6689858E 		movw	%ax, -10354(%rbp)
+ 1144      D7FFFF
+ 1145 02f4 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1145      D7FFFF
+ 1146 02fb F6F2     		divb	%dl
+ 1147 02fd 4189C3   		movl	%eax, %r11d
+ 1148 0300 0FB6852A 		movzbl	-6358(%rbp), %eax
+ 1148      E7FFFF
+ 1149 0307 0FB6951A 		movzbl	-6374(%rbp), %edx
+ 1149      E7FFFF
+ 1150 030e 0FB6C0   		movzbl	%al, %eax
+ 1151 0311 6689858E 		movw	%ax, -10354(%rbp)
+ 1151      D7FFFF
+ 1152 0318 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1152      D7FFFF
+ 1153 031f F6F2     		divb	%dl
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 71
+
+
+ 1154 0321 4189C4   		movl	%eax, %r12d
+ 1155 0324 0FB6852B 		movzbl	-6357(%rbp), %eax
+ 1155      E7FFFF
+ 1156 032b 0FB6951B 		movzbl	-6373(%rbp), %edx
+ 1156      E7FFFF
+ 1157 0332 0FB6C0   		movzbl	%al, %eax
+ 1158 0335 6689858E 		movw	%ax, -10354(%rbp)
+ 1158      D7FFFF
+ 1159 033c 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1159      D7FFFF
+ 1160 0343 F6F2     		divb	%dl
+ 1161 0345 4189C5   		movl	%eax, %r13d
+ 1162 0348 0FB6852C 		movzbl	-6356(%rbp), %eax
+ 1162      E7FFFF
+ 1163 034f 0FB6951C 		movzbl	-6372(%rbp), %edx
+ 1163      E7FFFF
+ 1164 0356 0FB6C0   		movzbl	%al, %eax
+ 1165 0359 6689858E 		movw	%ax, -10354(%rbp)
+ 1165      D7FFFF
+ 1166 0360 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1166      D7FFFF
+ 1167 0367 F6F2     		divb	%dl
+ 1168 0369 4189C6   		movl	%eax, %r14d
+ 1169 036c 0FB6852D 		movzbl	-6355(%rbp), %eax
+ 1169      E7FFFF
+ 1170 0373 0FB6951D 		movzbl	-6371(%rbp), %edx
+ 1170      E7FFFF
+ 1171 037a 0FB6C0   		movzbl	%al, %eax
+ 1172 037d 6689858E 		movw	%ax, -10354(%rbp)
+ 1172      D7FFFF
+ 1173 0384 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1173      D7FFFF
+ 1174 038b F6F2     		divb	%dl
+ 1175 038d 4189C0   		movl	%eax, %r8d
+ 1176 0390 0FB6852E 		movzbl	-6354(%rbp), %eax
+ 1176      E7FFFF
+ 1177 0397 0FB6951E 		movzbl	-6370(%rbp), %edx
+ 1177      E7FFFF
+ 1178 039e 0FB6C0   		movzbl	%al, %eax
+ 1179 03a1 6689858E 		movw	%ax, -10354(%rbp)
+ 1179      D7FFFF
+ 1180 03a8 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1180      D7FFFF
+ 1181 03af F6F2     		divb	%dl
+ 1182 03b1 89C6     		movl	%eax, %esi
+ 1183 03b3 0FB6852F 		movzbl	-6353(%rbp), %eax
+ 1183      E7FFFF
+ 1184 03ba 0FB6951F 		movzbl	-6369(%rbp), %edx
+ 1184      E7FFFF
+ 1185 03c1 0FB6C0   		movzbl	%al, %eax
+ 1186 03c4 6689858E 		movw	%ax, -10354(%rbp)
+ 1186      D7FFFF
+ 1187 03cb 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1187      D7FFFF
+ 1188 03d2 F6F2     		divb	%dl
+ 1189 03d4 89C1     		movl	%eax, %ecx
+ 1190              	.LBB457:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 72
+
+
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 1191              		.loc 2 346 0
+ 1192 03d6 0FB6D3   		movzbl	%bl, %edx
+ 1193 03d9 400FB6C7 		movzbl	%dil, %eax
+ 1194 03dd 48C1E208 		salq	$8, %rdx
+ 1195 03e1 4809C2   		orq	%rax, %rdx
+ 1196 03e4 410FB6C1 		movzbl	%r9b, %eax
+ 1197 03e8 48C1E208 		salq	$8, %rdx
+ 1198 03ec 4809C2   		orq	%rax, %rdx
+ 1199 03ef 0FB6855C 		movzbl	-10148(%rbp), %eax
+ 1199      D8FFFF
+ 1200 03f6 48C1E208 		salq	$8, %rdx
+ 1201 03fa 4809C2   		orq	%rax, %rdx
+ 1202 03fd 0FB6855D 		movzbl	-10147(%rbp), %eax
+ 1202      D8FFFF
+ 1203 0404 48C1E208 		salq	$8, %rdx
+ 1204 0408 4809C2   		orq	%rax, %rdx
+ 1205 040b 0FB6855E 		movzbl	-10146(%rbp), %eax
+ 1205      D8FFFF
+ 1206 0412 48C1E208 		salq	$8, %rdx
+ 1207 0416 4809C2   		orq	%rax, %rdx
+ 1208 0419 0FB6855F 		movzbl	-10145(%rbp), %eax
+ 1208      D8FFFF
+ 1209 0420 48C1E208 		salq	$8, %rdx
+ 1210 0424 4809C2   		orq	%rax, %rdx
+ 1211 0427 410FB6C7 		movzbl	%r15b, %eax
+ 1212 042b 48C1E208 		salq	$8, %rdx
+ 1213 042f 4809C2   		orq	%rax, %rdx
+ 1214 0432 0FB6C1   		movzbl	%cl, %eax
+ 1215 0435 400FB6CE 		movzbl	%sil, %ecx
+ 1216 0439 48C1E008 		salq	$8, %rax
+ 1217 043d 4809C8   		orq	%rcx, %rax
+ 1218 0440 410FB6C8 		movzbl	%r8b, %ecx
+ 1219 0444 48C1E008 		salq	$8, %rax
+ 1220 0448 4809C8   		orq	%rcx, %rax
+ 1221 044b 410FB6CE 		movzbl	%r14b, %ecx
+ 1222 044f 48C1E008 		salq	$8, %rax
+ 1223 0453 4809C8   		orq	%rcx, %rax
+ 1224 0456 410FB6CD 		movzbl	%r13b, %ecx
+ 1225 045a 48C1E008 		salq	$8, %rax
+ 1226 045e 4809C8   		orq	%rcx, %rax
+ 1227 0461 410FB6CC 		movzbl	%r12b, %ecx
+ 1228 0465 48C1E008 		salq	$8, %rax
+ 1229 0469 4809C8   		orq	%rcx, %rax
+ 1230 046c 410FB6CB 		movzbl	%r11b, %ecx
+ 1231 0470 48C1E008 		salq	$8, %rax
+ 1232 0474 4809C8   		orq	%rcx, %rax
+ 1233 0477 410FB6CA 		movzbl	%r10b, %ecx
+ 1234 047b 48C1E008 		salq	$8, %rax
+ 1235 047f 4809C8   		orq	%rcx, %rax
+ 1236 0482 48899520 		movq	%rdx, -10208(%rbp)
+ 1236      D8FFFF
+ 1237 0489 48898528 		movq	%rax, -10200(%rbp)
+ 1237      D8FFFF
+ 1238 0490 660F6F85 		movdqa	-10208(%rbp), %xmm0
+ 1238      20D8FFFF 
+ 1239              	.LBE457:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 73
+
+
+ 1240              	.LBE456:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 1241              		.loc 2 862 0
+ 1242 0498 F30F7F85 		movdqu	%xmm0, -6448(%rbp)
+ 1242      D0E6FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 1243              		.loc 2 866 0
+ 1244 04a0 C785ACE6 		movl	$0, -6484(%rbp)
+ 1244      FFFF0000 
+ 1244      0000
+ 1245 04aa E9860200 		jmp	.L4
+ 1245      00
+ 1246              	.L13:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 1247              		.loc 2 868 0
+ 1248 04af 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 1248      00000000 
+ 1249 04b7 F30F7F85 		movdqu	%xmm0, -6336(%rbp)
+ 1249      40E7FFFF 
+ 1250 04bf F30F6F85 		movdqu	-6448(%rbp), %xmm0
+ 1250      D0E6FFFF 
+ 1251 04c7 F30F7F85 		movdqu	%xmm0, -6352(%rbp)
+ 1251      30E7FFFF 
+ 1252              	.LBB458:
+ 1253              	.LBB459:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 1254              		.loc 2 380 0
+ 1255 04cf F30F6F85 		movdqu	-6336(%rbp), %xmm0
+ 1255      40E7FFFF 
+ 1256 04d7 F30F7F85 		movdqu	%xmm0, -9424(%rbp)
+ 1256      30DBFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 1257              		.loc 2 381 0
+ 1258 04df F30F6F85 		movdqu	-6352(%rbp), %xmm0
+ 1258      30E7FFFF 
+ 1259 04e7 F30F7F85 		movdqu	%xmm0, -9440(%rbp)
+ 1259      20DBFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 1260              		.loc 2 383 0
+ 1261 04ef C7855CE7 		movl	$0, -6308(%rbp)
+ 1261      FFFF0000 
+ 1261      0000
+ 1262 04f9 EB5C     		jmp	.L5
+ 1263              	.L8:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 1264              		.loc 2 385 0
+ 1265 04fb 8B855CE7 		movl	-6308(%rbp), %eax
+ 1265      FFFF
+ 1266 0501 89C0     		mov	%eax, %eax
+ 1267 0503 0FB68405 		movzbl	-9440(%rbp,%rax), %eax
+ 1267      20DBFFFF 
+ 1268 050b 84C0     		testb	%al, %al
+ 1269 050d 7912     		jns	.L6
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 1270              		.loc 2 386 0
+ 1271 050f 8B855CE7 		movl	-6308(%rbp), %eax
+ 1271      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 74
+
+
+ 1272 0515 89C0     		mov	%eax, %eax
+ 1273 0517 C6840540 		movb	$0, -9408(%rbp,%rax)
+ 1273      DBFFFF00 
+ 1274 051f EB2F     		jmp	.L7
+ 1275              	.L6:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 1276              		.loc 2 388 0
+ 1277 0521 8B8D5CE7 		movl	-6308(%rbp), %ecx
+ 1277      FFFF
+ 1278 0527 8B855CE7 		movl	-6308(%rbp), %eax
+ 1278      FFFF
+ 1279 052d 89C0     		mov	%eax, %eax
+ 1280 052f 0FB68405 		movzbl	-9440(%rbp,%rax), %eax
+ 1280      20DBFFFF 
+ 1281 0537 0FB6C0   		movzbl	%al, %eax
+ 1282 053a 83E00F   		andl	$15, %eax
+ 1283 053d 4898     		cltq
+ 1284 053f 0FB69405 		movzbl	-9424(%rbp,%rax), %edx
+ 1284      30DBFFFF 
+ 1285 0547 89C8     		mov	%ecx, %eax
+ 1286 0549 88940540 		movb	%dl, -9408(%rbp,%rax)
+ 1286      DBFFFF
+ 1287              	.L7:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 1288              		.loc 2 383 0
+ 1289 0550 83855CE7 		addl	$1, -6308(%rbp)
+ 1289      FFFF01
+ 1290              	.L5:
+ 1291 0557 83BD5CE7 		cmpl	$15, -6308(%rbp)
+ 1291      FFFF0F
+ 1292 055e 769B     		jbe	.L8
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 1293              		.loc 2 391 0
+ 1294 0560 F30F6F85 		movdqu	-9408(%rbp), %xmm0
+ 1294      40DBFFFF 
+ 1295              	.LBE459:
+ 1296              	.LBE458:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 1297              		.loc 2 868 0
+ 1298 0568 F30F7F85 		movdqu	%xmm0, -6464(%rbp)
+ 1298      C0E6FFFF 
+ 1299 0570 F30F6F85 		movdqu	-6432(%rbp), %xmm0
+ 1299      E0E6FFFF 
+ 1300 0578 F30F7F85 		movdqu	%xmm0, -6288(%rbp)
+ 1300      70E7FFFF 
+ 1301 0580 F30F6F85 		movdqu	-6464(%rbp), %xmm0
+ 1301      C0E6FFFF 
+ 1302 0588 F30F7F85 		movdqu	%xmm0, -6304(%rbp)
+ 1302      60E7FFFF 
+ 1303              	.LBB460:
+ 1304              	.LBB461:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 1305              		.loc 2 234 0
+ 1306 0590 F30F6F85 		movdqu	-6304(%rbp), %xmm0
+ 1306      60E7FFFF 
+ 1307 0598 F30F6F8D 		movdqu	-6288(%rbp), %xmm1
+ 1307      70E7FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 75
+
+
+ 1308 05a0 660FEBC1 		por	%xmm1, %xmm0
+ 1309              	.LBE461:
+ 1310              	.LBE460:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 1311              		.loc 2 870 0
+ 1312 05a4 F30F7F85 		movdqu	%xmm0, -6464(%rbp)
+ 1312      C0E6FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 1313              		.loc 2 872 0
+ 1314 05ac 8B85ACE6 		mov	-6484(%rbp), %eax
+ 1314      FFFF
+ 1315 05b2 48C1E004 		salq	$4, %rax
+ 1316 05b6 48038588 		addq	-6520(%rbp), %rax
+ 1316      E6FFFF
+ 1317 05bd 660F6F00 		movdqa	(%rax), %xmm0
+ 1318 05c1 F30F7F85 		movdqu	%xmm0, -6256(%rbp)
+ 1318      90E7FFFF 
+ 1319 05c9 F30F6F85 		movdqu	-6464(%rbp), %xmm0
+ 1319      C0E6FFFF 
+ 1320 05d1 F30F7F85 		movdqu	%xmm0, -6272(%rbp)
+ 1320      80E7FFFF 
+ 1321              	.LBB462:
+ 1322              	.LBB463:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 1323              		.loc 2 380 0
+ 1324 05d9 F30F6F85 		movdqu	-6256(%rbp), %xmm0
+ 1324      90E7FFFF 
+ 1325 05e1 F30F7F85 		movdqu	%xmm0, -9376(%rbp)
+ 1325      60DBFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 1326              		.loc 2 381 0
+ 1327 05e9 F30F6F85 		movdqu	-6272(%rbp), %xmm0
+ 1327      80E7FFFF 
+ 1328 05f1 F30F7F85 		movdqu	%xmm0, -9392(%rbp)
+ 1328      50DBFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 1329              		.loc 2 383 0
+ 1330 05f9 C785ACE7 		movl	$0, -6228(%rbp)
+ 1330      FFFF0000 
+ 1330      0000
+ 1331 0603 EB5C     		jmp	.L9
+ 1332              	.L12:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 1333              		.loc 2 385 0
+ 1334 0605 8B85ACE7 		movl	-6228(%rbp), %eax
+ 1334      FFFF
+ 1335 060b 89C0     		mov	%eax, %eax
+ 1336 060d 0FB68405 		movzbl	-9392(%rbp,%rax), %eax
+ 1336      50DBFFFF 
+ 1337 0615 84C0     		testb	%al, %al
+ 1338 0617 7912     		jns	.L10
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 1339              		.loc 2 386 0
+ 1340 0619 8B85ACE7 		movl	-6228(%rbp), %eax
+ 1340      FFFF
+ 1341 061f 89C0     		mov	%eax, %eax
+ 1342 0621 C6840570 		movb	$0, -9360(%rbp,%rax)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 76
+
+
+ 1342      DBFFFF00 
+ 1343 0629 EB2F     		jmp	.L11
+ 1344              	.L10:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 1345              		.loc 2 388 0
+ 1346 062b 8B8DACE7 		movl	-6228(%rbp), %ecx
+ 1346      FFFF
+ 1347 0631 8B85ACE7 		movl	-6228(%rbp), %eax
+ 1347      FFFF
+ 1348 0637 89C0     		mov	%eax, %eax
+ 1349 0639 0FB68405 		movzbl	-9392(%rbp,%rax), %eax
+ 1349      50DBFFFF 
+ 1350 0641 0FB6C0   		movzbl	%al, %eax
+ 1351 0644 83E00F   		andl	$15, %eax
+ 1352 0647 4898     		cltq
+ 1353 0649 0FB69405 		movzbl	-9376(%rbp,%rax), %edx
+ 1353      60DBFFFF 
+ 1354 0651 89C8     		mov	%ecx, %eax
+ 1355 0653 88940570 		movb	%dl, -9360(%rbp,%rax)
+ 1355      DBFFFF
+ 1356              	.L11:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 1357              		.loc 2 383 0
+ 1358 065a 8385ACE7 		addl	$1, -6228(%rbp)
+ 1358      FFFF01
+ 1359              	.L9:
+ 1360 0661 83BDACE7 		cmpl	$15, -6228(%rbp)
+ 1360      FFFF0F
+ 1361 0668 769B     		jbe	.L12
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 1362              		.loc 2 391 0
+ 1363 066a F30F6F85 		movdqu	-9360(%rbp), %xmm0
+ 1363      70DBFFFF 
+ 1364              	.LBE463:
+ 1365              	.LBE462:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 1366              		.loc 2 872 0
+ 1367 0672 F30F7F85 		movdqu	%xmm0, -6464(%rbp)
+ 1367      C0E6FFFF 
+ 1368 067a F30F6F85 		movdqu	-6480(%rbp), %xmm0
+ 1368      B0E6FFFF 
+ 1369 0682 F30F7F85 		movdqu	%xmm0, -6208(%rbp)
+ 1369      C0E7FFFF 
+ 1370 068a F30F6F85 		movdqu	-6464(%rbp), %xmm0
+ 1370      C0E6FFFF 
+ 1371 0692 F30F7F85 		movdqu	%xmm0, -6224(%rbp)
+ 1371      B0E7FFFF 
+ 1372              	.LBB464:
+ 1373              	.LBB465:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 1374              		.loc 2 234 0
+ 1375 069a F30F6F85 		movdqu	-6224(%rbp), %xmm0
+ 1375      B0E7FFFF 
+ 1376 06a2 F30F6F8D 		movdqu	-6208(%rbp), %xmm1
+ 1376      C0E7FFFF 
+ 1377 06aa 660FEBC1 		por	%xmm1, %xmm0
+ 1378              	.LBE465:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 77
+
+
+ 1379              	.LBE464:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 1380              		.loc 2 874 0
+ 1381 06ae F30F7F85 		movdqu	%xmm0, -6480(%rbp)
+ 1381      B0E6FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 1382              		.loc 2 876 0
+ 1383 06b6 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 1383      00000000 
+ 1384 06be F30F6F8D 		movdqu	-6448(%rbp), %xmm1
+ 1384      D0E6FFFF 
+ 1385 06c6 F30F7F8D 		movdqu	%xmm1, -6176(%rbp)
+ 1385      E0E7FFFF 
+ 1386 06ce F30F7F85 		movdqu	%xmm0, -6192(%rbp)
+ 1386      D0E7FFFF 
+ 1387              	.LBB466:
+ 1388              	.LBB467:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 1389              		.loc 2 290 0
+ 1390 06d6 F30F6F8D 		movdqu	-6192(%rbp), %xmm1
+ 1390      D0E7FFFF 
+ 1391 06de F30F6F85 		movdqu	-6176(%rbp), %xmm0
+ 1391      E0E7FFFF 
+ 1392 06e6 660FF8C1 		psubb	%xmm1, %xmm0
+ 1393              	.LBE467:
+ 1394              	.LBE466:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 1395              		.loc 2 876 0
+ 1396 06ea F30F7F85 		movdqu	%xmm0, -6448(%rbp)
+ 1396      D0E6FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 1397              		.loc 2 878 0
+ 1398 06f2 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 1398      00000000 
+ 1399 06fa F30F6F8D 		movdqu	-6448(%rbp), %xmm1
+ 1399      D0E6FFFF 
+ 1400 0702 F30F7F8D 		movdqu	%xmm1, -6144(%rbp)
+ 1400      00E8FFFF 
+ 1401 070a F30F7F85 		movdqu	%xmm0, -6160(%rbp)
+ 1401      F0E7FFFF 
+ 1402              	.LBB468:
+ 1403              	.LBB469:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 1404              		.loc 2 206 0
+ 1405 0712 F30F6F85 		movdqu	-6160(%rbp), %xmm0
+ 1405      F0E7FFFF 
+ 1406 071a F30F6F8D 		movdqu	-6144(%rbp), %xmm1
+ 1406      00E8FFFF 
+ 1407 0722 660FDBC1 		pand	%xmm1, %xmm0
+ 1408              	.LBE469:
+ 1409              	.LBE468:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 1410              		.loc 2 878 0
+ 1411 0726 F30F7F85 		movdqu	%xmm0, -6448(%rbp)
+ 1411      D0E6FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 1412              		.loc 2 866 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 78
+
+
+ 1413 072e 8385ACE6 		addl	$1, -6484(%rbp)
+ 1413      FFFF01
+ 1414              	.L4:
+ 1415 0735 83BDACE6 		cmpl	$15, -6484(%rbp)
+ 1415      FFFF0F
+ 1416 073c 0F866DFD 		jbe	.L13
+ 1416      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 1417              		.loc 2 882 0
+ 1418 0742 F30F6F85 		movdqu	-6480(%rbp), %xmm0
+ 1418      B0E6FFFF 
+ 1419              	.LBE453:
+ 1420              	.LBE452:
+ 1421              	.LBE451:
+ 1422              	.LBE450:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 1423              		.loc 2 1682 0
+ 1424 074a 660F7F85 		movdqa	%xmm0, -10192(%rbp)
+ 1424      30D8FFFF 
+ 1425              	.LBB470:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 1426              		.loc 2 1683 0
+ 1427 0752 660F6F85 		movdqa	-10192(%rbp), %xmm0
+ 1427      30D8FFFF 
+ 1428 075a F30F7F85 		movdqu	%xmm0, -9472(%rbp)
+ 1428      00DBFFFF 
+ 1429 0762 E8000000 		call	KDbgWriterGet at PLT
+ 1429      00
+ 1430 0767 4885C0   		testq	%rax, %rax
+ 1431 076a 7479     		je	.L15
+ 1432 076c BF010000 		movl	$1, %edi
+ 1432      00
+ 1433 0771 E8000000 		call	KDbgCondToFlag at PLT
+ 1433      00
+ 1434 0776 4889C6   		movq	%rax, %rsi
+ 1435 0779 BF100000 		movl	$16, %edi
+ 1435      00
+ 1436 077e E8000000 		call	KDbgTestModConds at PLT
+ 1436      00
+ 1437 0783 84C0     		testb	%al, %al
+ 1438 0785 745E     		je	.L15
+ 1439 0787 8B850CDB 		movl	-9460(%rbp), %eax
+ 1439      FFFF
+ 1440 078d 89C7     		movl	%eax, %edi
+ 1441 078f E86CF8FF 		call	bswap_32
+ 1441      FF
+ 1442 0794 4189C5   		movl	%eax, %r13d
+ 1443 0797 8B8508DB 		movl	-9464(%rbp), %eax
+ 1443      FFFF
+ 1444 079d 89C7     		movl	%eax, %edi
+ 1445 079f E85CF8FF 		call	bswap_32
+ 1445      FF
+ 1446 07a4 4189C4   		movl	%eax, %r12d
+ 1447 07a7 8B8504DB 		movl	-9468(%rbp), %eax
+ 1447      FFFF
+ 1448 07ad 89C7     		movl	%eax, %edi
+ 1449 07af E84CF8FF 		call	bswap_32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 79
+
+
+ 1449      FF
+ 1450 07b4 89C3     		movl	%eax, %ebx
+ 1451 07b6 8B8500DB 		movl	-9472(%rbp), %eax
+ 1451      FFFF
+ 1452 07bc 89C7     		movl	%eax, %edi
+ 1453 07be E83DF8FF 		call	bswap_32
+ 1453      FF
+ 1454 07c3 4589E9   		movl	%r13d, %r9d
+ 1455 07c6 4589E0   		movl	%r12d, %r8d
+ 1456 07c9 89D9     		movl	%ebx, %ecx
+ 1457 07cb 89C2     		movl	%eax, %edx
+ 1458 07cd 488D3500 		leaq	.LC0(%rip), %rsi
+ 1458      000000
+ 1459 07d4 488D3D00 		leaq	.LC1(%rip), %rdi
+ 1459      000000
+ 1460 07db B8000000 		movl	$0, %eax
+ 1460      00
+ 1461 07e0 E8000000 		call	KDbgMsg at PLT
+ 1461      00
+ 1462              	.L15:
+ 1463 07e5 660F6F85 		movdqa	-10192(%rbp), %xmm0
+ 1463      30D8FFFF 
+ 1464 07ed F30F7F85 		movdqu	%xmm0, -6128(%rbp)
+ 1464      10E8FFFF 
+ 1465              	.LBE470:
+ 1466              	.LBB471:
+ 1467              	.LBB472:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 1468              		.loc 2 667 0
+ 1469 07f5 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 1469      00000000 
+ 1470 07fd F30F6F8D 		movdqu	-6128(%rbp), %xmm1
+ 1470      10E8FFFF 
+ 1471 0805 F30F7F8D 		movdqu	%xmm1, -6096(%rbp)
+ 1471      30E8FFFF 
+ 1472 080d F30F7F85 		movdqu	%xmm0, -6112(%rbp)
+ 1472      20E8FFFF 
+ 1473              	.LBB473:
+ 1474              	.LBB474:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 1475              		.loc 2 380 0
+ 1476 0815 F30F6F85 		movdqu	-6096(%rbp), %xmm0
+ 1476      30E8FFFF 
+ 1477 081d F30F7F85 		movdqu	%xmm0, -9328(%rbp)
+ 1477      90DBFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 1478              		.loc 2 381 0
+ 1479 0825 F30F6F85 		movdqu	-6112(%rbp), %xmm0
+ 1479      20E8FFFF 
+ 1480 082d F30F7F85 		movdqu	%xmm0, -9344(%rbp)
+ 1480      80DBFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 1481              		.loc 2 383 0
+ 1482 0835 C7854CE8 		movl	$0, -6068(%rbp)
+ 1482      FFFF0000 
+ 1482      0000
+ 1483 083f EB5C     		jmp	.L16
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 80
+
+
+ 1484              	.L19:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 1485              		.loc 2 385 0
+ 1486 0841 8B854CE8 		movl	-6068(%rbp), %eax
+ 1486      FFFF
+ 1487 0847 89C0     		mov	%eax, %eax
+ 1488 0849 0FB68405 		movzbl	-9344(%rbp,%rax), %eax
+ 1488      80DBFFFF 
+ 1489 0851 84C0     		testb	%al, %al
+ 1490 0853 7912     		jns	.L17
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 1491              		.loc 2 386 0
+ 1492 0855 8B854CE8 		movl	-6068(%rbp), %eax
+ 1492      FFFF
+ 1493 085b 89C0     		mov	%eax, %eax
+ 1494 085d C68405A0 		movb	$0, -9312(%rbp,%rax)
+ 1494      DBFFFF00 
+ 1495 0865 EB2F     		jmp	.L18
+ 1496              	.L17:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 1497              		.loc 2 388 0
+ 1498 0867 8B8D4CE8 		movl	-6068(%rbp), %ecx
+ 1498      FFFF
+ 1499 086d 8B854CE8 		movl	-6068(%rbp), %eax
+ 1499      FFFF
+ 1500 0873 89C0     		mov	%eax, %eax
+ 1501 0875 0FB68405 		movzbl	-9344(%rbp,%rax), %eax
+ 1501      80DBFFFF 
+ 1502 087d 0FB6C0   		movzbl	%al, %eax
+ 1503 0880 83E00F   		andl	$15, %eax
+ 1504 0883 4898     		cltq
+ 1505 0885 0FB69405 		movzbl	-9328(%rbp,%rax), %edx
+ 1505      90DBFFFF 
+ 1506 088d 89C8     		mov	%ecx, %eax
+ 1507 088f 889405A0 		movb	%dl, -9312(%rbp,%rax)
+ 1507      DBFFFF
+ 1508              	.L18:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 1509              		.loc 2 383 0
+ 1510 0896 83854CE8 		addl	$1, -6068(%rbp)
+ 1510      FFFF01
+ 1511              	.L16:
+ 1512 089d 83BD4CE8 		cmpl	$15, -6068(%rbp)
+ 1512      FFFF0F
+ 1513 08a4 769B     		jbe	.L19
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 1514              		.loc 2 391 0
+ 1515 08a6 F30F6F85 		movdqu	-9312(%rbp), %xmm0
+ 1515      A0DBFFFF 
+ 1516              	.LBE474:
+ 1517              	.LBE473:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 1518              		.loc 2 667 0
+ 1519 08ae F30F7F85 		movdqu	%xmm0, -6128(%rbp)
+ 1519      10E8FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 1520              		.loc 2 668 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 81
+
+
+ 1521 08b6 F30F6F85 		movdqu	-6128(%rbp), %xmm0
+ 1521      10E8FFFF 
+ 1522              	.LBE472:
+ 1523              	.LBE471:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 1524              		.loc 2 1684 0
+ 1525 08be 660F7F85 		movdqa	%xmm0, -10192(%rbp)
+ 1525      30D8FFFF 
+ 1526              	.LBB475:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 1527              		.loc 2 1685 0
+ 1528 08c6 660F6F85 		movdqa	-10192(%rbp), %xmm0
+ 1528      30D8FFFF 
+ 1529 08ce F30F7F85 		movdqu	%xmm0, -9488(%rbp)
+ 1529      F0DAFFFF 
+ 1530 08d6 E8000000 		call	KDbgWriterGet at PLT
+ 1530      00
+ 1531 08db 4885C0   		testq	%rax, %rax
+ 1532 08de 7479     		je	.L21
+ 1533 08e0 BF010000 		movl	$1, %edi
+ 1533      00
+ 1534 08e5 E8000000 		call	KDbgCondToFlag at PLT
+ 1534      00
+ 1535 08ea 4889C6   		movq	%rax, %rsi
+ 1536 08ed BF100000 		movl	$16, %edi
+ 1536      00
+ 1537 08f2 E8000000 		call	KDbgTestModConds at PLT
+ 1537      00
+ 1538 08f7 84C0     		testb	%al, %al
+ 1539 08f9 745E     		je	.L21
+ 1540 08fb 8B85FCDA 		movl	-9476(%rbp), %eax
+ 1540      FFFF
+ 1541 0901 89C7     		movl	%eax, %edi
+ 1542 0903 E8F8F6FF 		call	bswap_32
+ 1542      FF
+ 1543 0908 4189C5   		movl	%eax, %r13d
+ 1544 090b 8B85F8DA 		movl	-9480(%rbp), %eax
+ 1544      FFFF
+ 1545 0911 89C7     		movl	%eax, %edi
+ 1546 0913 E8E8F6FF 		call	bswap_32
+ 1546      FF
+ 1547 0918 4189C4   		movl	%eax, %r12d
+ 1548 091b 8B85F4DA 		movl	-9484(%rbp), %eax
+ 1548      FFFF
+ 1549 0921 89C7     		movl	%eax, %edi
+ 1550 0923 E8D8F6FF 		call	bswap_32
+ 1550      FF
+ 1551 0928 89C3     		movl	%eax, %ebx
+ 1552 092a 8B85F0DA 		movl	-9488(%rbp), %eax
+ 1552      FFFF
+ 1553 0930 89C7     		movl	%eax, %edi
+ 1554 0932 E8C9F6FF 		call	bswap_32
+ 1554      FF
+ 1555 0937 4589E9   		movl	%r13d, %r9d
+ 1556 093a 4589E0   		movl	%r12d, %r8d
+ 1557 093d 89D9     		movl	%ebx, %ecx
+ 1558 093f 89C2     		movl	%eax, %edx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 82
+
+
+ 1559 0941 488D3500 		leaq	.LC2(%rip), %rsi
+ 1559      000000
+ 1560 0948 488D3D00 		leaq	.LC1(%rip), %rdi
+ 1560      000000
+ 1561 094f B8000000 		movl	$0, %eax
+ 1561      00
+ 1562 0954 E8000000 		call	KDbgMsg at PLT
+ 1562      00
+ 1563              	.L21:
+ 1564 0959 660F6F85 		movdqa	-10192(%rbp), %xmm0
+ 1564      30D8FFFF 
+ 1565 0961 F30F7F85 		movdqu	%xmm0, -6048(%rbp)
+ 1565      60E8FFFF 
+ 1566 0969 660F6F85 		movdqa	-10176(%rbp), %xmm0
+ 1566      40D8FFFF 
+ 1567 0971 F30F7F85 		movdqu	%xmm0, -6064(%rbp)
+ 1567      50E8FFFF 
+ 1568              	.LBE475:
+ 1569              	.LBB476:
+ 1570              	.LBB477:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 1571              		.loc 2 178 0
+ 1572 0979 F30F6F85 		movdqu	-6064(%rbp), %xmm0
+ 1572      50E8FFFF 
+ 1573 0981 F30F6F8D 		movdqu	-6048(%rbp), %xmm1
+ 1573      60E8FFFF 
+ 1574 0989 660FEFC1 		pxor	%xmm1, %xmm0
+ 1575              	.LBE477:
+ 1576              	.LBE476:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 1577              		.loc 2 1686 0
+ 1578 098d 660F7F85 		movdqa	%xmm0, -10192(%rbp)
+ 1578      30D8FFFF 
+ 1579              	.LBB478:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 1580              		.loc 2 1687 0
+ 1581 0995 660F6F85 		movdqa	-10192(%rbp), %xmm0
+ 1581      30D8FFFF 
+ 1582 099d F30F7F85 		movdqu	%xmm0, -9504(%rbp)
+ 1582      E0DAFFFF 
+ 1583 09a5 E8000000 		call	KDbgWriterGet at PLT
+ 1583      00
+ 1584 09aa 4885C0   		testq	%rax, %rax
+ 1585 09ad 7479     		je	.L23
+ 1586 09af BF010000 		movl	$1, %edi
+ 1586      00
+ 1587 09b4 E8000000 		call	KDbgCondToFlag at PLT
+ 1587      00
+ 1588 09b9 4889C6   		movq	%rax, %rsi
+ 1589 09bc BF100000 		movl	$16, %edi
+ 1589      00
+ 1590 09c1 E8000000 		call	KDbgTestModConds at PLT
+ 1590      00
+ 1591 09c6 84C0     		testb	%al, %al
+ 1592 09c8 745E     		je	.L23
+ 1593 09ca 8B85ECDA 		movl	-9492(%rbp), %eax
+ 1593      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 83
+
+
+ 1594 09d0 89C7     		movl	%eax, %edi
+ 1595 09d2 E829F6FF 		call	bswap_32
+ 1595      FF
+ 1596 09d7 4189C5   		movl	%eax, %r13d
+ 1597 09da 8B85E8DA 		movl	-9496(%rbp), %eax
+ 1597      FFFF
+ 1598 09e0 89C7     		movl	%eax, %edi
+ 1599 09e2 E819F6FF 		call	bswap_32
+ 1599      FF
+ 1600 09e7 4189C4   		movl	%eax, %r12d
+ 1601 09ea 8B85E4DA 		movl	-9500(%rbp), %eax
+ 1601      FFFF
+ 1602 09f0 89C7     		movl	%eax, %edi
+ 1603 09f2 E809F6FF 		call	bswap_32
+ 1603      FF
+ 1604 09f7 89C3     		movl	%eax, %ebx
+ 1605 09f9 8B85E0DA 		movl	-9504(%rbp), %eax
+ 1605      FFFF
+ 1606 09ff 89C7     		movl	%eax, %edi
+ 1607 0a01 E8FAF5FF 		call	bswap_32
+ 1607      FF
+ 1608 0a06 4589E9   		movl	%r13d, %r9d
+ 1609 0a09 4589E0   		movl	%r12d, %r8d
+ 1610 0a0c 89D9     		movl	%ebx, %ecx
+ 1611 0a0e 89C2     		movl	%eax, %edx
+ 1612 0a10 488D3500 		leaq	.LC3(%rip), %rsi
+ 1612      000000
+ 1613 0a17 488D3D00 		leaq	.LC1(%rip), %rdi
+ 1613      000000
+ 1614 0a1e B8000000 		movl	$0, %eax
+ 1614      00
+ 1615 0a23 E8000000 		call	KDbgMsg at PLT
+ 1615      00
+ 1616              	.L23:
+ 1617 0a28 660F6F85 		movdqa	-10192(%rbp), %xmm0
+ 1617      30D8FFFF 
+ 1618 0a30 F30F7F85 		movdqu	%xmm0, -6032(%rbp)
+ 1618      70E8FFFF 
+ 1619              	.LBE478:
+ 1620              	.LBB479:
+ 1621              	.LBB480:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 1622              		.loc 2 1357 0
+ 1623 0a38 F30F6F85 		movdqu	-6032(%rbp), %xmm0
+ 1623      70E8FFFF 
+ 1624 0a40 F30F7F85 		movdqu	%xmm0, -9296(%rbp)
+ 1624      B0DBFFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 1625              		.loc 2 1358 0
+ 1626 0a48 8B85BCDB 		movl	-9284(%rbp), %eax
+ 1626      FFFF
+ 1627 0a4e 8985B8DB 		movl	%eax, -9288(%rbp)
+ 1627      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 1628              		.loc 2 1359 0
+ 1629 0a54 8B85BCDB 		movl	-9284(%rbp), %eax
+ 1629      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 84
+
+
+ 1630 0a5a 8985B4DB 		movl	%eax, -9292(%rbp)
+ 1630      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 1631              		.loc 2 1360 0
+ 1632 0a60 8B85BCDB 		movl	-9284(%rbp), %eax
+ 1632      FFFF
+ 1633 0a66 8985B0DB 		movl	%eax, -9296(%rbp)
+ 1633      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 1634              		.loc 2 1361 0
+ 1635 0a6c F30F6F85 		movdqu	-9296(%rbp), %xmm0
+ 1635      B0DBFFFF 
+ 1636              	.LBE480:
+ 1637              	.LBE479:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 1638              		.loc 2 1688 0
+ 1639 0a74 660F7F85 		movdqa	%xmm0, -10192(%rbp)
+ 1639      30D8FFFF 
+ 1640              	.LBB481:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 1641              		.loc 2 1689 0
+ 1642 0a7c 660F6F85 		movdqa	-10192(%rbp), %xmm0
+ 1642      30D8FFFF 
+ 1643 0a84 F30F7F85 		movdqu	%xmm0, -9520(%rbp)
+ 1643      D0DAFFFF 
+ 1644 0a8c E8000000 		call	KDbgWriterGet at PLT
+ 1644      00
+ 1645 0a91 4885C0   		testq	%rax, %rax
+ 1646 0a94 7479     		je	.L25
+ 1647 0a96 BF010000 		movl	$1, %edi
+ 1647      00
+ 1648 0a9b E8000000 		call	KDbgCondToFlag at PLT
+ 1648      00
+ 1649 0aa0 4889C6   		movq	%rax, %rsi
+ 1650 0aa3 BF100000 		movl	$16, %edi
+ 1650      00
+ 1651 0aa8 E8000000 		call	KDbgTestModConds at PLT
+ 1651      00
+ 1652 0aad 84C0     		testb	%al, %al
+ 1653 0aaf 745E     		je	.L25
+ 1654 0ab1 8B85DCDA 		movl	-9508(%rbp), %eax
+ 1654      FFFF
+ 1655 0ab7 89C7     		movl	%eax, %edi
+ 1656 0ab9 E842F5FF 		call	bswap_32
+ 1656      FF
+ 1657 0abe 4189C5   		movl	%eax, %r13d
+ 1658 0ac1 8B85D8DA 		movl	-9512(%rbp), %eax
+ 1658      FFFF
+ 1659 0ac7 89C7     		movl	%eax, %edi
+ 1660 0ac9 E832F5FF 		call	bswap_32
+ 1660      FF
+ 1661 0ace 4189C4   		movl	%eax, %r12d
+ 1662 0ad1 8B85D4DA 		movl	-9516(%rbp), %eax
+ 1662      FFFF
+ 1663 0ad7 89C7     		movl	%eax, %edi
+ 1664 0ad9 E822F5FF 		call	bswap_32
+ 1664      FF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 85
+
+
+ 1665 0ade 89C3     		movl	%eax, %ebx
+ 1666 0ae0 8B85D0DA 		movl	-9520(%rbp), %eax
+ 1666      FFFF
+ 1667 0ae6 89C7     		movl	%eax, %edi
+ 1668 0ae8 E813F5FF 		call	bswap_32
+ 1668      FF
+ 1669 0aed 4589E9   		movl	%r13d, %r9d
+ 1670 0af0 4589E0   		movl	%r12d, %r8d
+ 1671 0af3 89D9     		movl	%ebx, %ecx
+ 1672 0af5 89C2     		movl	%eax, %edx
+ 1673 0af7 488D3500 		leaq	.LC4(%rip), %rsi
+ 1673      000000
+ 1674 0afe 488D3D00 		leaq	.LC1(%rip), %rdi
+ 1674      000000
+ 1675 0b05 B8000000 		movl	$0, %eax
+ 1675      00
+ 1676 0b0a E8000000 		call	KDbgMsg at PLT
+ 1676      00
+ 1677              	.L25:
+ 1678              	.LBE481:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 1679              		.loc 2 1690 0
+ 1680 0b0f 660F6F85 		movdqa	-10192(%rbp), %xmm0
+ 1680      30D8FFFF 
+ 1681              	.LBE447:
+ 1682              	.LBE446:
+1744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x01,1);
+ 1683              		.loc 2 1744 0
+ 1684 0b17 F30F7F85 		movdqu	%xmm0, -6624(%rbp)
+ 1684      20E6FFFF 
+ 1685 0b1f F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 1685      10E6FFFF 
+ 1686 0b27 F30F7F85 		movdqu	%xmm0, -6016(%rbp)
+ 1686      80E8FFFF 
+ 1687              	.LBB482:
+ 1688              	.LBB483:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 1689              		.loc 2 1565 0
+ 1690 0b2f F30F6F85 		movdqu	-6016(%rbp), %xmm0
+ 1690      80E8FFFF 
+ 1691 0b37 660F7F85 		movdqa	%xmm0, -10144(%rbp)
+ 1691      60D8FFFF 
+ 1692 0b3f 660F6F85 		movdqa	-10144(%rbp), %xmm0
+ 1692      60D8FFFF 
+ 1693 0b47 F30F7F85 		movdqu	%xmm0, -6000(%rbp)
+ 1693      90E8FFFF 
+ 1694              	.LBB484:
+ 1695              	.LBB485:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 1696              		.loc 2 1282 0
+ 1697 0b4f F30F6F85 		movdqu	-6000(%rbp), %xmm0
+ 1697      90E8FFFF 
+ 1698 0b57 F30F7F85 		movdqu	%xmm0, -9280(%rbp)
+ 1698      C0DBFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 1699              		.loc 2 1283 0
+ 1700 0b5f 8B85C8DB 		movl	-9272(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 86
+
+
+ 1700      FFFF
+ 1701 0b65 8985CCDB 		movl	%eax, -9268(%rbp)
+ 1701      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 1702              		.loc 2 1284 0
+ 1703 0b6b 8B85C4DB 		movl	-9276(%rbp), %eax
+ 1703      FFFF
+ 1704 0b71 8985C8DB 		movl	%eax, -9272(%rbp)
+ 1704      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 1705              		.loc 2 1285 0
+ 1706 0b77 8B85C0DB 		movl	-9280(%rbp), %eax
+ 1706      FFFF
+ 1707 0b7d 8985C4DB 		movl	%eax, -9276(%rbp)
+ 1707      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 1708              		.loc 2 1286 0
+ 1709 0b83 C785C0DB 		movl	$0, -9280(%rbp)
+ 1709      FFFF0000 
+ 1709      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 1710              		.loc 2 1287 0
+ 1711 0b8d F30F6F85 		movdqu	-9280(%rbp), %xmm0
+ 1711      C0DBFFFF 
+ 1712              	.LBE485:
+ 1713              	.LBE484:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1714              		.loc 2 1567 0
+ 1715 0b95 660F7F85 		movdqa	%xmm0, -10144(%rbp)
+ 1715      60D8FFFF 
+ 1716 0b9d 660F6F85 		movdqa	-10144(%rbp), %xmm0
+ 1716      60D8FFFF 
+ 1717 0ba5 660FEF85 		pxor	-6016(%rbp), %xmm0
+ 1717      80E8FFFF 
+ 1718 0bad F30F7F85 		movdqu	%xmm0, -6016(%rbp)
+ 1718      80E8FFFF 
+ 1719 0bb5 660F6F85 		movdqa	-10144(%rbp), %xmm0
+ 1719      60D8FFFF 
+ 1720 0bbd F30F7F85 		movdqu	%xmm0, -5984(%rbp)
+ 1720      A0E8FFFF 
+ 1721              	.LBB486:
+ 1722              	.LBB487:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 1723              		.loc 2 1282 0
+ 1724 0bc5 F30F6F85 		movdqu	-5984(%rbp), %xmm0
+ 1724      A0E8FFFF 
+ 1725 0bcd F30F7F85 		movdqu	%xmm0, -9264(%rbp)
+ 1725      D0DBFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 1726              		.loc 2 1283 0
+ 1727 0bd5 8B85D8DB 		movl	-9256(%rbp), %eax
+ 1727      FFFF
+ 1728 0bdb 8985DCDB 		movl	%eax, -9252(%rbp)
+ 1728      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 1729              		.loc 2 1284 0
+ 1730 0be1 8B85D4DB 		movl	-9260(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 87
+
+
+ 1730      FFFF
+ 1731 0be7 8985D8DB 		movl	%eax, -9256(%rbp)
+ 1731      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 1732              		.loc 2 1285 0
+ 1733 0bed 8B85D0DB 		movl	-9264(%rbp), %eax
+ 1733      FFFF
+ 1734 0bf3 8985D4DB 		movl	%eax, -9260(%rbp)
+ 1734      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 1735              		.loc 2 1286 0
+ 1736 0bf9 C785D0DB 		movl	$0, -9264(%rbp)
+ 1736      FFFF0000 
+ 1736      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 1737              		.loc 2 1287 0
+ 1738 0c03 F30F6F85 		movdqu	-9264(%rbp), %xmm0
+ 1738      D0DBFFFF 
+ 1739              	.LBE487:
+ 1740              	.LBE486:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1741              		.loc 2 1568 0
+ 1742 0c0b 660F7F85 		movdqa	%xmm0, -10144(%rbp)
+ 1742      60D8FFFF 
+ 1743 0c13 660F6F85 		movdqa	-10144(%rbp), %xmm0
+ 1743      60D8FFFF 
+ 1744 0c1b 660FEF85 		pxor	-6016(%rbp), %xmm0
+ 1744      80E8FFFF 
+ 1745 0c23 F30F7F85 		movdqu	%xmm0, -6016(%rbp)
+ 1745      80E8FFFF 
+ 1746 0c2b 660F6F85 		movdqa	-10144(%rbp), %xmm0
+ 1746      60D8FFFF 
+ 1747 0c33 F30F7F85 		movdqu	%xmm0, -5968(%rbp)
+ 1747      B0E8FFFF 
+ 1748              	.LBB488:
+ 1749              	.LBB489:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 1750              		.loc 2 1282 0
+ 1751 0c3b F30F6F85 		movdqu	-5968(%rbp), %xmm0
+ 1751      B0E8FFFF 
+ 1752 0c43 F30F7F85 		movdqu	%xmm0, -9248(%rbp)
+ 1752      E0DBFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 1753              		.loc 2 1283 0
+ 1754 0c4b 8B85E8DB 		movl	-9240(%rbp), %eax
+ 1754      FFFF
+ 1755 0c51 8985ECDB 		movl	%eax, -9236(%rbp)
+ 1755      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 1756              		.loc 2 1284 0
+ 1757 0c57 8B85E4DB 		movl	-9244(%rbp), %eax
+ 1757      FFFF
+ 1758 0c5d 8985E8DB 		movl	%eax, -9240(%rbp)
+ 1758      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 1759              		.loc 2 1285 0
+ 1760 0c63 8B85E0DB 		movl	-9248(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 88
+
+
+ 1760      FFFF
+ 1761 0c69 8985E4DB 		movl	%eax, -9244(%rbp)
+ 1761      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 1762              		.loc 2 1286 0
+ 1763 0c6f C785E0DB 		movl	$0, -9248(%rbp)
+ 1763      FFFF0000 
+ 1763      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 1764              		.loc 2 1287 0
+ 1765 0c79 F30F6F85 		movdqu	-9248(%rbp), %xmm0
+ 1765      E0DBFFFF 
+ 1766              	.LBE489:
+ 1767              	.LBE488:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1768              		.loc 2 1569 0
+ 1769 0c81 660F7F85 		movdqa	%xmm0, -10144(%rbp)
+ 1769      60D8FFFF 
+ 1770 0c89 660F6F85 		movdqa	-10144(%rbp), %xmm0
+ 1770      60D8FFFF 
+ 1771 0c91 660FEF85 		pxor	-6016(%rbp), %xmm0
+ 1771      80E8FFFF 
+ 1772 0c99 F30F7F85 		movdqu	%xmm0, -6016(%rbp)
+ 1772      80E8FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 1773              		.loc 2 1571 0
+ 1774 0ca1 F30F6F85 		movdqu	-6016(%rbp), %xmm0
+ 1774      80E8FFFF 
+ 1775              	.LBE483:
+ 1776              	.LBE482:
+1744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x01,1);
+ 1777              		.loc 2 1744 0
+ 1778 0ca9 F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 1778      10E6FFFF 
+ 1779 0cb1 F30F6F85 		movdqu	-6624(%rbp), %xmm0
+ 1779      20E6FFFF 
+ 1780 0cb9 F30F6F8D 		movdqu	-6640(%rbp), %xmm1
+ 1780      10E6FFFF 
+ 1781 0cc1 660FEFC1 		pxor	%xmm1, %xmm0
+ 1782 0cc5 F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 1782      10E6FFFF 
+ 1783 0ccd 488B85B8 		movq	-9544(%rbp), %rax
+ 1783      DAFFFF
+ 1784 0cd4 4883C010 		addq	$16, %rax
+ 1785 0cd8 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 1785      10E6FFFF 
+ 1786 0ce0 F30F7F00 		movdqu	%xmm0, (%rax)
+ 1787 0ce4 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 1787      10E6FFFF 
+ 1788 0cec F30F7F85 		movdqu	%xmm0, -5936(%rbp)
+ 1788      D0E8FFFF 
+ 1789              	.LBB490:
+ 1790              	.LBB491:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 1791              		.loc 2 1681 0
+ 1792 0cf4 B8020000 		movl	$2, %eax
+ 1792      00
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 89
+
+
+ 1793 0cf9 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 1793      00000000 
+ 1794 0d01 F30F7F85 		movdqu	%xmm0, -5904(%rbp)
+ 1794      F0E8FFFF 
+ 1795 0d09 8985ECE8 		movl	%eax, -5908(%rbp)
+ 1795      FFFF
+ 1796              	.LBB492:
+ 1797              	.LBB493:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 1798              		.loc 2 522 0
+ 1799 0d0f F30F6F85 		movdqu	-5904(%rbp), %xmm0
+ 1799      F0E8FFFF 
+ 1800 0d17 F30F7F85 		movdqu	%xmm0, -9168(%rbp)
+ 1800      30DCFFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 1801              		.loc 2 523 0
+ 1802 0d1f B8030000 		movl	$3, %eax
+ 1802      00
+ 1803 0d24 4898     		cltq
+ 1804 0d26 8B95ECE8 		movl	-5908(%rbp), %edx
+ 1804      FFFF
+ 1805 0d2c 89948530 		movl	%edx, -9168(%rbp,%rax,4)
+ 1805      DCFFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 1806              		.loc 2 524 0
+ 1807 0d33 F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 1807      30DCFFFF 
+ 1808 0d3b F30F7F85 		movdqu	%xmm0, -5904(%rbp)
+ 1808      F0E8FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 1809              		.loc 2 526 0
+ 1810 0d43 F30F6F85 		movdqu	-5904(%rbp), %xmm0
+ 1810      F0E8FFFF 
+ 1811              	.LBE493:
+ 1812              	.LBE492:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 1813              		.loc 2 1681 0
+ 1814 0d4b 660F7F85 		movdqa	%xmm0, -10112(%rbp)
+ 1814      80D8FFFF 
+ 1815 0d53 F30F6F85 		movdqu	-5936(%rbp), %xmm0
+ 1815      D0E8FFFF 
+ 1816 0d5b F30F7F85 		movdqu	%xmm0, -5888(%rbp)
+ 1816      00E9FFFF 
+ 1817 0d63 F30F6F85 		movdqu	-5888(%rbp), %xmm0
+ 1817      00E9FFFF 
+ 1818 0d6b F30F7F85 		movdqu	%xmm0, -5856(%rbp)
+ 1818      20E9FFFF 
+ 1819 0d73 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 1819      000000
+ 1820 0d7a 48898518 		movq	%rax, -5864(%rbp)
+ 1820      E9FFFF
+ 1821              	.LBB494:
+ 1822              	.LBB495:
+ 1823              	.LBB496:
+ 1824              	.LBB497:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 1825              		.loc 2 851 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 90
+
+
+ 1826 0d81 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 1826      00000000 
+ 1827 0d89 F30F7F85 		movdqu	%xmm0, -5824(%rbp)
+ 1827      40E9FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 1828              		.loc 2 854 0
+ 1829 0d91 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 1829      00000000 
+ 1830 0d99 F30F6F8D 		movdqu	-5856(%rbp), %xmm1
+ 1830      20E9FFFF 
+ 1831 0da1 F30F7F8D 		movdqu	%xmm1, -5744(%rbp)
+ 1831      90E9FFFF 
+ 1832 0da9 F30F7F85 		movdqu	%xmm0, -5760(%rbp)
+ 1832      80E9FFFF 
+ 1833              	.LBB498:
+ 1834              	.LBB499:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 1835              		.loc 2 206 0
+ 1836 0db1 F30F6F85 		movdqu	-5760(%rbp), %xmm0
+ 1836      80E9FFFF 
+ 1837 0db9 F30F6F8D 		movdqu	-5744(%rbp), %xmm1
+ 1837      90E9FFFF 
+ 1838 0dc1 660FDBC1 		pand	%xmm1, %xmm0
+ 1839              	.LBE499:
+ 1840              	.LBE498:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 1841              		.loc 2 854 0
+ 1842 0dc5 F30F7F85 		movdqu	%xmm0, -5776(%rbp)
+ 1842      70E9FFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 1843              		.loc 2 862 0
+ 1844 0dcd 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 1844      00000000 
+ 1845 0dd5 F30F6F8D 		movdqu	-5856(%rbp), %xmm1
+ 1845      20E9FFFF 
+ 1846 0ddd F30F7F8D 		movdqu	%xmm1, -5712(%rbp)
+ 1846      B0E9FFFF 
+ 1847 0de5 F30F7F85 		movdqu	%xmm0, -5728(%rbp)
+ 1847      A0E9FFFF 
+ 1848              	.LBB500:
+ 1849              		.loc 2 2642 0
+ 1850 0ded 0FB685B0 		movzbl	-5712(%rbp), %eax
+ 1850      E9FFFF
+ 1851 0df4 0FB695A0 		movzbl	-5728(%rbp), %edx
+ 1851      E9FFFF
+ 1852 0dfb 0FB6C0   		movzbl	%al, %eax
+ 1853 0dfe 6689858E 		movw	%ax, -10354(%rbp)
+ 1853      D7FFFF
+ 1854 0e05 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1854      D7FFFF
+ 1855 0e0c F6F2     		divb	%dl
+ 1856 0e0e 4189C7   		movl	%eax, %r15d
+ 1857 0e11 0FB685B1 		movzbl	-5711(%rbp), %eax
+ 1857      E9FFFF
+ 1858 0e18 0FB695A1 		movzbl	-5727(%rbp), %edx
+ 1858      E9FFFF
+ 1859 0e1f 0FB6C0   		movzbl	%al, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 91
+
+
+ 1860 0e22 6689858E 		movw	%ax, -10354(%rbp)
+ 1860      D7FFFF
+ 1861 0e29 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1861      D7FFFF
+ 1862 0e30 F6F2     		divb	%dl
+ 1863 0e32 88859FD8 		movb	%al, -10081(%rbp)
+ 1863      FFFF
+ 1864 0e38 0FB685B2 		movzbl	-5710(%rbp), %eax
+ 1864      E9FFFF
+ 1865 0e3f 0FB695A2 		movzbl	-5726(%rbp), %edx
+ 1865      E9FFFF
+ 1866 0e46 0FB6C0   		movzbl	%al, %eax
+ 1867 0e49 6689858E 		movw	%ax, -10354(%rbp)
+ 1867      D7FFFF
+ 1868 0e50 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1868      D7FFFF
+ 1869 0e57 F6F2     		divb	%dl
+ 1870 0e59 88859ED8 		movb	%al, -10082(%rbp)
+ 1870      FFFF
+ 1871 0e5f 0FB685B3 		movzbl	-5709(%rbp), %eax
+ 1871      E9FFFF
+ 1872 0e66 0FB695A3 		movzbl	-5725(%rbp), %edx
+ 1872      E9FFFF
+ 1873 0e6d 0FB6C0   		movzbl	%al, %eax
+ 1874 0e70 6689858E 		movw	%ax, -10354(%rbp)
+ 1874      D7FFFF
+ 1875 0e77 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1875      D7FFFF
+ 1876 0e7e F6F2     		divb	%dl
+ 1877 0e80 88859DD8 		movb	%al, -10083(%rbp)
+ 1877      FFFF
+ 1878 0e86 0FB685B4 		movzbl	-5708(%rbp), %eax
+ 1878      E9FFFF
+ 1879 0e8d 0FB695A4 		movzbl	-5724(%rbp), %edx
+ 1879      E9FFFF
+ 1880 0e94 0FB6C0   		movzbl	%al, %eax
+ 1881 0e97 6689858E 		movw	%ax, -10354(%rbp)
+ 1881      D7FFFF
+ 1882 0e9e 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1882      D7FFFF
+ 1883 0ea5 F6F2     		divb	%dl
+ 1884 0ea7 88859CD8 		movb	%al, -10084(%rbp)
+ 1884      FFFF
+ 1885 0ead 0FB685B5 		movzbl	-5707(%rbp), %eax
+ 1885      E9FFFF
+ 1886 0eb4 0FB695A5 		movzbl	-5723(%rbp), %edx
+ 1886      E9FFFF
+ 1887 0ebb 0FB6C0   		movzbl	%al, %eax
+ 1888 0ebe 6689858E 		movw	%ax, -10354(%rbp)
+ 1888      D7FFFF
+ 1889 0ec5 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1889      D7FFFF
+ 1890 0ecc F6F2     		divb	%dl
+ 1891 0ece 4189C1   		movl	%eax, %r9d
+ 1892 0ed1 0FB685B6 		movzbl	-5706(%rbp), %eax
+ 1892      E9FFFF
+ 1893 0ed8 0FB695A6 		movzbl	-5722(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 92
+
+
+ 1893      E9FFFF
+ 1894 0edf 0FB6C0   		movzbl	%al, %eax
+ 1895 0ee2 6689858E 		movw	%ax, -10354(%rbp)
+ 1895      D7FFFF
+ 1896 0ee9 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1896      D7FFFF
+ 1897 0ef0 F6F2     		divb	%dl
+ 1898 0ef2 89C7     		movl	%eax, %edi
+ 1899 0ef4 0FB685B7 		movzbl	-5705(%rbp), %eax
+ 1899      E9FFFF
+ 1900 0efb 0FB695A7 		movzbl	-5721(%rbp), %edx
+ 1900      E9FFFF
+ 1901 0f02 0FB6C0   		movzbl	%al, %eax
+ 1902 0f05 6689858E 		movw	%ax, -10354(%rbp)
+ 1902      D7FFFF
+ 1903 0f0c 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1903      D7FFFF
+ 1904 0f13 F6F2     		divb	%dl
+ 1905 0f15 89C3     		movl	%eax, %ebx
+ 1906 0f17 0FB685B8 		movzbl	-5704(%rbp), %eax
+ 1906      E9FFFF
+ 1907 0f1e 0FB695A8 		movzbl	-5720(%rbp), %edx
+ 1907      E9FFFF
+ 1908 0f25 0FB6C0   		movzbl	%al, %eax
+ 1909 0f28 6689858E 		movw	%ax, -10354(%rbp)
+ 1909      D7FFFF
+ 1910 0f2f 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1910      D7FFFF
+ 1911 0f36 F6F2     		divb	%dl
+ 1912 0f38 4189C2   		movl	%eax, %r10d
+ 1913 0f3b 0FB685B9 		movzbl	-5703(%rbp), %eax
+ 1913      E9FFFF
+ 1914 0f42 0FB695A9 		movzbl	-5719(%rbp), %edx
+ 1914      E9FFFF
+ 1915 0f49 0FB6C0   		movzbl	%al, %eax
+ 1916 0f4c 6689858E 		movw	%ax, -10354(%rbp)
+ 1916      D7FFFF
+ 1917 0f53 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1917      D7FFFF
+ 1918 0f5a F6F2     		divb	%dl
+ 1919 0f5c 4189C3   		movl	%eax, %r11d
+ 1920 0f5f 0FB685BA 		movzbl	-5702(%rbp), %eax
+ 1920      E9FFFF
+ 1921 0f66 0FB695AA 		movzbl	-5718(%rbp), %edx
+ 1921      E9FFFF
+ 1922 0f6d 0FB6C0   		movzbl	%al, %eax
+ 1923 0f70 6689858E 		movw	%ax, -10354(%rbp)
+ 1923      D7FFFF
+ 1924 0f77 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1924      D7FFFF
+ 1925 0f7e F6F2     		divb	%dl
+ 1926 0f80 4189C4   		movl	%eax, %r12d
+ 1927 0f83 0FB685BB 		movzbl	-5701(%rbp), %eax
+ 1927      E9FFFF
+ 1928 0f8a 0FB695AB 		movzbl	-5717(%rbp), %edx
+ 1928      E9FFFF
+ 1929 0f91 0FB6C0   		movzbl	%al, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 93
+
+
+ 1930 0f94 6689858E 		movw	%ax, -10354(%rbp)
+ 1930      D7FFFF
+ 1931 0f9b 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1931      D7FFFF
+ 1932 0fa2 F6F2     		divb	%dl
+ 1933 0fa4 4189C5   		movl	%eax, %r13d
+ 1934 0fa7 0FB685BC 		movzbl	-5700(%rbp), %eax
+ 1934      E9FFFF
+ 1935 0fae 0FB695AC 		movzbl	-5716(%rbp), %edx
+ 1935      E9FFFF
+ 1936 0fb5 0FB6C0   		movzbl	%al, %eax
+ 1937 0fb8 6689858E 		movw	%ax, -10354(%rbp)
+ 1937      D7FFFF
+ 1938 0fbf 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1938      D7FFFF
+ 1939 0fc6 F6F2     		divb	%dl
+ 1940 0fc8 4189C6   		movl	%eax, %r14d
+ 1941 0fcb 0FB685BD 		movzbl	-5699(%rbp), %eax
+ 1941      E9FFFF
+ 1942 0fd2 0FB695AD 		movzbl	-5715(%rbp), %edx
+ 1942      E9FFFF
+ 1943 0fd9 0FB6C0   		movzbl	%al, %eax
+ 1944 0fdc 6689858E 		movw	%ax, -10354(%rbp)
+ 1944      D7FFFF
+ 1945 0fe3 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1945      D7FFFF
+ 1946 0fea F6F2     		divb	%dl
+ 1947 0fec 4189C0   		movl	%eax, %r8d
+ 1948 0fef 0FB685BE 		movzbl	-5698(%rbp), %eax
+ 1948      E9FFFF
+ 1949 0ff6 0FB695AE 		movzbl	-5714(%rbp), %edx
+ 1949      E9FFFF
+ 1950 0ffd 0FB6C0   		movzbl	%al, %eax
+ 1951 1000 6689858E 		movw	%ax, -10354(%rbp)
+ 1951      D7FFFF
+ 1952 1007 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1952      D7FFFF
+ 1953 100e F6F2     		divb	%dl
+ 1954 1010 89C6     		movl	%eax, %esi
+ 1955 1012 0FB685BF 		movzbl	-5697(%rbp), %eax
+ 1955      E9FFFF
+ 1956 1019 0FB695AF 		movzbl	-5713(%rbp), %edx
+ 1956      E9FFFF
+ 1957 1020 0FB6C0   		movzbl	%al, %eax
+ 1958 1023 6689858E 		movw	%ax, -10354(%rbp)
+ 1958      D7FFFF
+ 1959 102a 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 1959      D7FFFF
+ 1960 1031 F6F2     		divb	%dl
+ 1961 1033 89C1     		movl	%eax, %ecx
+ 1962              	.LBB501:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 1963              		.loc 2 346 0
+ 1964 1035 0FB6D3   		movzbl	%bl, %edx
+ 1965 1038 400FB6C7 		movzbl	%dil, %eax
+ 1966 103c 48C1E208 		salq	$8, %rdx
+ 1967 1040 4809C2   		orq	%rax, %rdx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 94
+
+
+ 1968 1043 410FB6C1 		movzbl	%r9b, %eax
+ 1969 1047 48C1E208 		salq	$8, %rdx
+ 1970 104b 4809C2   		orq	%rax, %rdx
+ 1971 104e 0FB6859C 		movzbl	-10084(%rbp), %eax
+ 1971      D8FFFF
+ 1972 1055 48C1E208 		salq	$8, %rdx
+ 1973 1059 4809C2   		orq	%rax, %rdx
+ 1974 105c 0FB6859D 		movzbl	-10083(%rbp), %eax
+ 1974      D8FFFF
+ 1975 1063 48C1E208 		salq	$8, %rdx
+ 1976 1067 4809C2   		orq	%rax, %rdx
+ 1977 106a 0FB6859E 		movzbl	-10082(%rbp), %eax
+ 1977      D8FFFF
+ 1978 1071 48C1E208 		salq	$8, %rdx
+ 1979 1075 4809C2   		orq	%rax, %rdx
+ 1980 1078 0FB6859F 		movzbl	-10081(%rbp), %eax
+ 1980      D8FFFF
+ 1981 107f 48C1E208 		salq	$8, %rdx
+ 1982 1083 4809C2   		orq	%rax, %rdx
+ 1983 1086 410FB6C7 		movzbl	%r15b, %eax
+ 1984 108a 48C1E208 		salq	$8, %rdx
+ 1985 108e 4809C2   		orq	%rax, %rdx
+ 1986 1091 0FB6C1   		movzbl	%cl, %eax
+ 1987 1094 400FB6CE 		movzbl	%sil, %ecx
+ 1988 1098 48C1E008 		salq	$8, %rax
+ 1989 109c 4809C8   		orq	%rcx, %rax
+ 1990 109f 410FB6C8 		movzbl	%r8b, %ecx
+ 1991 10a3 48C1E008 		salq	$8, %rax
+ 1992 10a7 4809C8   		orq	%rcx, %rax
+ 1993 10aa 410FB6CE 		movzbl	%r14b, %ecx
+ 1994 10ae 48C1E008 		salq	$8, %rax
+ 1995 10b2 4809C8   		orq	%rcx, %rax
+ 1996 10b5 410FB6CD 		movzbl	%r13b, %ecx
+ 1997 10b9 48C1E008 		salq	$8, %rax
+ 1998 10bd 4809C8   		orq	%rcx, %rax
+ 1999 10c0 410FB6CC 		movzbl	%r12b, %ecx
+ 2000 10c4 48C1E008 		salq	$8, %rax
+ 2001 10c8 4809C8   		orq	%rcx, %rax
+ 2002 10cb 410FB6CB 		movzbl	%r11b, %ecx
+ 2003 10cf 48C1E008 		salq	$8, %rax
+ 2004 10d3 4809C8   		orq	%rcx, %rax
+ 2005 10d6 410FB6CA 		movzbl	%r10b, %ecx
+ 2006 10da 48C1E008 		salq	$8, %rax
+ 2007 10de 4809C8   		orq	%rcx, %rax
+ 2008 10e1 48899510 		movq	%rdx, -10224(%rbp)
+ 2008      D8FFFF
+ 2009 10e8 48898518 		movq	%rax, -10216(%rbp)
+ 2009      D8FFFF
+ 2010 10ef 660F6F85 		movdqa	-10224(%rbp), %xmm0
+ 2010      10D8FFFF 
+ 2011              	.LBE501:
+ 2012              	.LBE500:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 2013              		.loc 2 862 0
+ 2014 10f7 F30F7F85 		movdqu	%xmm0, -5792(%rbp)
+ 2014      60E9FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 95
+
+
+ 2015              		.loc 2 866 0
+ 2016 10ff C7853CE9 		movl	$0, -5828(%rbp)
+ 2016      FFFF0000 
+ 2016      0000
+ 2017 1109 E9860200 		jmp	.L26
+ 2017      00
+ 2018              	.L35:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 2019              		.loc 2 868 0
+ 2020 110e 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 2020      00000000 
+ 2021 1116 F30F7F85 		movdqu	%xmm0, -5680(%rbp)
+ 2021      D0E9FFFF 
+ 2022 111e F30F6F85 		movdqu	-5792(%rbp), %xmm0
+ 2022      60E9FFFF 
+ 2023 1126 F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 2023      C0E9FFFF 
+ 2024              	.LBB502:
+ 2025              	.LBB503:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 2026              		.loc 2 380 0
+ 2027 112e F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 2027      D0E9FFFF 
+ 2028 1136 F30F7F85 		movdqu	%xmm0, -9136(%rbp)
+ 2028      50DCFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 2029              		.loc 2 381 0
+ 2030 113e F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 2030      C0E9FFFF 
+ 2031 1146 F30F7F85 		movdqu	%xmm0, -9152(%rbp)
+ 2031      40DCFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 2032              		.loc 2 383 0
+ 2033 114e C785ECE9 		movl	$0, -5652(%rbp)
+ 2033      FFFF0000 
+ 2033      0000
+ 2034 1158 EB5C     		jmp	.L27
+ 2035              	.L30:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 2036              		.loc 2 385 0
+ 2037 115a 8B85ECE9 		movl	-5652(%rbp), %eax
+ 2037      FFFF
+ 2038 1160 89C0     		mov	%eax, %eax
+ 2039 1162 0FB68405 		movzbl	-9152(%rbp,%rax), %eax
+ 2039      40DCFFFF 
+ 2040 116a 84C0     		testb	%al, %al
+ 2041 116c 7912     		jns	.L28
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 2042              		.loc 2 386 0
+ 2043 116e 8B85ECE9 		movl	-5652(%rbp), %eax
+ 2043      FFFF
+ 2044 1174 89C0     		mov	%eax, %eax
+ 2045 1176 C6840560 		movb	$0, -9120(%rbp,%rax)
+ 2045      DCFFFF00 
+ 2046 117e EB2F     		jmp	.L29
+ 2047              	.L28:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 96
+
+
+ 2048              		.loc 2 388 0
+ 2049 1180 8B8DECE9 		movl	-5652(%rbp), %ecx
+ 2049      FFFF
+ 2050 1186 8B85ECE9 		movl	-5652(%rbp), %eax
+ 2050      FFFF
+ 2051 118c 89C0     		mov	%eax, %eax
+ 2052 118e 0FB68405 		movzbl	-9152(%rbp,%rax), %eax
+ 2052      40DCFFFF 
+ 2053 1196 0FB6C0   		movzbl	%al, %eax
+ 2054 1199 83E00F   		andl	$15, %eax
+ 2055 119c 4898     		cltq
+ 2056 119e 0FB69405 		movzbl	-9136(%rbp,%rax), %edx
+ 2056      50DCFFFF 
+ 2057 11a6 89C8     		mov	%ecx, %eax
+ 2058 11a8 88940560 		movb	%dl, -9120(%rbp,%rax)
+ 2058      DCFFFF
+ 2059              	.L29:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 2060              		.loc 2 383 0
+ 2061 11af 8385ECE9 		addl	$1, -5652(%rbp)
+ 2061      FFFF01
+ 2062              	.L27:
+ 2063 11b6 83BDECE9 		cmpl	$15, -5652(%rbp)
+ 2063      FFFF0F
+ 2064 11bd 769B     		jbe	.L30
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 2065              		.loc 2 391 0
+ 2066 11bf F30F6F85 		movdqu	-9120(%rbp), %xmm0
+ 2066      60DCFFFF 
+ 2067              	.LBE503:
+ 2068              	.LBE502:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 2069              		.loc 2 868 0
+ 2070 11c7 F30F7F85 		movdqu	%xmm0, -5808(%rbp)
+ 2070      50E9FFFF 
+ 2071 11cf F30F6F85 		movdqu	-5776(%rbp), %xmm0
+ 2071      70E9FFFF 
+ 2072 11d7 F30F7F85 		movdqu	%xmm0, -5632(%rbp)
+ 2072      00EAFFFF 
+ 2073 11df F30F6F85 		movdqu	-5808(%rbp), %xmm0
+ 2073      50E9FFFF 
+ 2074 11e7 F30F7F85 		movdqu	%xmm0, -5648(%rbp)
+ 2074      F0E9FFFF 
+ 2075              	.LBB504:
+ 2076              	.LBB505:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 2077              		.loc 2 234 0
+ 2078 11ef F30F6F85 		movdqu	-5648(%rbp), %xmm0
+ 2078      F0E9FFFF 
+ 2079 11f7 F30F6F8D 		movdqu	-5632(%rbp), %xmm1
+ 2079      00EAFFFF 
+ 2080 11ff 660FEBC1 		por	%xmm1, %xmm0
+ 2081              	.LBE505:
+ 2082              	.LBE504:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 2083              		.loc 2 870 0
+ 2084 1203 F30F7F85 		movdqu	%xmm0, -5808(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 97
+
+
+ 2084      50E9FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 2085              		.loc 2 872 0
+ 2086 120b 8B853CE9 		mov	-5828(%rbp), %eax
+ 2086      FFFF
+ 2087 1211 48C1E004 		salq	$4, %rax
+ 2088 1215 48038518 		addq	-5864(%rbp), %rax
+ 2088      E9FFFF
+ 2089 121c 660F6F00 		movdqa	(%rax), %xmm0
+ 2090 1220 F30F7F85 		movdqu	%xmm0, -5600(%rbp)
+ 2090      20EAFFFF 
+ 2091 1228 F30F6F85 		movdqu	-5808(%rbp), %xmm0
+ 2091      50E9FFFF 
+ 2092 1230 F30F7F85 		movdqu	%xmm0, -5616(%rbp)
+ 2092      10EAFFFF 
+ 2093              	.LBB506:
+ 2094              	.LBB507:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 2095              		.loc 2 380 0
+ 2096 1238 F30F6F85 		movdqu	-5600(%rbp), %xmm0
+ 2096      20EAFFFF 
+ 2097 1240 F30F7F85 		movdqu	%xmm0, -9088(%rbp)
+ 2097      80DCFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 2098              		.loc 2 381 0
+ 2099 1248 F30F6F85 		movdqu	-5616(%rbp), %xmm0
+ 2099      10EAFFFF 
+ 2100 1250 F30F7F85 		movdqu	%xmm0, -9104(%rbp)
+ 2100      70DCFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 2101              		.loc 2 383 0
+ 2102 1258 C7853CEA 		movl	$0, -5572(%rbp)
+ 2102      FFFF0000 
+ 2102      0000
+ 2103 1262 EB5C     		jmp	.L31
+ 2104              	.L34:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 2105              		.loc 2 385 0
+ 2106 1264 8B853CEA 		movl	-5572(%rbp), %eax
+ 2106      FFFF
+ 2107 126a 89C0     		mov	%eax, %eax
+ 2108 126c 0FB68405 		movzbl	-9104(%rbp,%rax), %eax
+ 2108      70DCFFFF 
+ 2109 1274 84C0     		testb	%al, %al
+ 2110 1276 7912     		jns	.L32
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 2111              		.loc 2 386 0
+ 2112 1278 8B853CEA 		movl	-5572(%rbp), %eax
+ 2112      FFFF
+ 2113 127e 89C0     		mov	%eax, %eax
+ 2114 1280 C6840590 		movb	$0, -9072(%rbp,%rax)
+ 2114      DCFFFF00 
+ 2115 1288 EB2F     		jmp	.L33
+ 2116              	.L32:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 2117              		.loc 2 388 0
+ 2118 128a 8B8D3CEA 		movl	-5572(%rbp), %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 98
+
+
+ 2118      FFFF
+ 2119 1290 8B853CEA 		movl	-5572(%rbp), %eax
+ 2119      FFFF
+ 2120 1296 89C0     		mov	%eax, %eax
+ 2121 1298 0FB68405 		movzbl	-9104(%rbp,%rax), %eax
+ 2121      70DCFFFF 
+ 2122 12a0 0FB6C0   		movzbl	%al, %eax
+ 2123 12a3 83E00F   		andl	$15, %eax
+ 2124 12a6 4898     		cltq
+ 2125 12a8 0FB69405 		movzbl	-9088(%rbp,%rax), %edx
+ 2125      80DCFFFF 
+ 2126 12b0 89C8     		mov	%ecx, %eax
+ 2127 12b2 88940590 		movb	%dl, -9072(%rbp,%rax)
+ 2127      DCFFFF
+ 2128              	.L33:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 2129              		.loc 2 383 0
+ 2130 12b9 83853CEA 		addl	$1, -5572(%rbp)
+ 2130      FFFF01
+ 2131              	.L31:
+ 2132 12c0 83BD3CEA 		cmpl	$15, -5572(%rbp)
+ 2132      FFFF0F
+ 2133 12c7 769B     		jbe	.L34
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 2134              		.loc 2 391 0
+ 2135 12c9 F30F6F85 		movdqu	-9072(%rbp), %xmm0
+ 2135      90DCFFFF 
+ 2136              	.LBE507:
+ 2137              	.LBE506:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 2138              		.loc 2 872 0
+ 2139 12d1 F30F7F85 		movdqu	%xmm0, -5808(%rbp)
+ 2139      50E9FFFF 
+ 2140 12d9 F30F6F85 		movdqu	-5824(%rbp), %xmm0
+ 2140      40E9FFFF 
+ 2141 12e1 F30F7F85 		movdqu	%xmm0, -5552(%rbp)
+ 2141      50EAFFFF 
+ 2142 12e9 F30F6F85 		movdqu	-5808(%rbp), %xmm0
+ 2142      50E9FFFF 
+ 2143 12f1 F30F7F85 		movdqu	%xmm0, -5568(%rbp)
+ 2143      40EAFFFF 
+ 2144              	.LBB508:
+ 2145              	.LBB509:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 2146              		.loc 2 234 0
+ 2147 12f9 F30F6F85 		movdqu	-5568(%rbp), %xmm0
+ 2147      40EAFFFF 
+ 2148 1301 F30F6F8D 		movdqu	-5552(%rbp), %xmm1
+ 2148      50EAFFFF 
+ 2149 1309 660FEBC1 		por	%xmm1, %xmm0
+ 2150              	.LBE509:
+ 2151              	.LBE508:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 2152              		.loc 2 874 0
+ 2153 130d F30F7F85 		movdqu	%xmm0, -5824(%rbp)
+ 2153      40E9FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 99
+
+
+ 2154              		.loc 2 876 0
+ 2155 1315 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 2155      00000000 
+ 2156 131d F30F6F8D 		movdqu	-5792(%rbp), %xmm1
+ 2156      60E9FFFF 
+ 2157 1325 F30F7F8D 		movdqu	%xmm1, -5520(%rbp)
+ 2157      70EAFFFF 
+ 2158 132d F30F7F85 		movdqu	%xmm0, -5536(%rbp)
+ 2158      60EAFFFF 
+ 2159              	.LBB510:
+ 2160              	.LBB511:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 2161              		.loc 2 290 0
+ 2162 1335 F30F6F8D 		movdqu	-5536(%rbp), %xmm1
+ 2162      60EAFFFF 
+ 2163 133d F30F6F85 		movdqu	-5520(%rbp), %xmm0
+ 2163      70EAFFFF 
+ 2164 1345 660FF8C1 		psubb	%xmm1, %xmm0
+ 2165              	.LBE511:
+ 2166              	.LBE510:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 2167              		.loc 2 876 0
+ 2168 1349 F30F7F85 		movdqu	%xmm0, -5792(%rbp)
+ 2168      60E9FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2169              		.loc 2 878 0
+ 2170 1351 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 2170      00000000 
+ 2171 1359 F30F6F8D 		movdqu	-5792(%rbp), %xmm1
+ 2171      60E9FFFF 
+ 2172 1361 F30F7F8D 		movdqu	%xmm1, -5488(%rbp)
+ 2172      90EAFFFF 
+ 2173 1369 F30F7F85 		movdqu	%xmm0, -5504(%rbp)
+ 2173      80EAFFFF 
+ 2174              	.LBB512:
+ 2175              	.LBB513:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 2176              		.loc 2 206 0
+ 2177 1371 F30F6F85 		movdqu	-5504(%rbp), %xmm0
+ 2177      80EAFFFF 
+ 2178 1379 F30F6F8D 		movdqu	-5488(%rbp), %xmm1
+ 2178      90EAFFFF 
+ 2179 1381 660FDBC1 		pand	%xmm1, %xmm0
+ 2180              	.LBE513:
+ 2181              	.LBE512:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2182              		.loc 2 878 0
+ 2183 1385 F30F7F85 		movdqu	%xmm0, -5792(%rbp)
+ 2183      60E9FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 2184              		.loc 2 866 0
+ 2185 138d 83853CE9 		addl	$1, -5828(%rbp)
+ 2185      FFFF01
+ 2186              	.L26:
+ 2187 1394 83BD3CE9 		cmpl	$15, -5828(%rbp)
+ 2187      FFFF0F
+ 2188 139b 0F866DFD 		jbe	.L35
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 100
+
+
+ 2188      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 2189              		.loc 2 882 0
+ 2190 13a1 F30F6F85 		movdqu	-5824(%rbp), %xmm0
+ 2190      40E9FFFF 
+ 2191              	.LBE497:
+ 2192              	.LBE496:
+ 2193              	.LBE495:
+ 2194              	.LBE494:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 2195              		.loc 2 1682 0
+ 2196 13a9 660F7F85 		movdqa	%xmm0, -10128(%rbp)
+ 2196      70D8FFFF 
+ 2197              	.LBB514:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 2198              		.loc 2 1683 0
+ 2199 13b1 660F6F85 		movdqa	-10128(%rbp), %xmm0
+ 2199      70D8FFFF 
+ 2200 13b9 F30F7F85 		movdqu	%xmm0, -9184(%rbp)
+ 2200      20DCFFFF 
+ 2201 13c1 E8000000 		call	KDbgWriterGet at PLT
+ 2201      00
+ 2202 13c6 4885C0   		testq	%rax, %rax
+ 2203 13c9 7479     		je	.L37
+ 2204 13cb BF010000 		movl	$1, %edi
+ 2204      00
+ 2205 13d0 E8000000 		call	KDbgCondToFlag at PLT
+ 2205      00
+ 2206 13d5 4889C6   		movq	%rax, %rsi
+ 2207 13d8 BF100000 		movl	$16, %edi
+ 2207      00
+ 2208 13dd E8000000 		call	KDbgTestModConds at PLT
+ 2208      00
+ 2209 13e2 84C0     		testb	%al, %al
+ 2210 13e4 745E     		je	.L37
+ 2211 13e6 8B852CDC 		movl	-9172(%rbp), %eax
+ 2211      FFFF
+ 2212 13ec 89C7     		movl	%eax, %edi
+ 2213 13ee E80DECFF 		call	bswap_32
+ 2213      FF
+ 2214 13f3 4189C5   		movl	%eax, %r13d
+ 2215 13f6 8B8528DC 		movl	-9176(%rbp), %eax
+ 2215      FFFF
+ 2216 13fc 89C7     		movl	%eax, %edi
+ 2217 13fe E8FDEBFF 		call	bswap_32
+ 2217      FF
+ 2218 1403 4189C4   		movl	%eax, %r12d
+ 2219 1406 8B8524DC 		movl	-9180(%rbp), %eax
+ 2219      FFFF
+ 2220 140c 89C7     		movl	%eax, %edi
+ 2221 140e E8EDEBFF 		call	bswap_32
+ 2221      FF
+ 2222 1413 89C3     		movl	%eax, %ebx
+ 2223 1415 8B8520DC 		movl	-9184(%rbp), %eax
+ 2223      FFFF
+ 2224 141b 89C7     		movl	%eax, %edi
+ 2225 141d E8DEEBFF 		call	bswap_32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 101
+
+
+ 2225      FF
+ 2226 1422 4589E9   		movl	%r13d, %r9d
+ 2227 1425 4589E0   		movl	%r12d, %r8d
+ 2228 1428 89D9     		movl	%ebx, %ecx
+ 2229 142a 89C2     		movl	%eax, %edx
+ 2230 142c 488D3500 		leaq	.LC0(%rip), %rsi
+ 2230      000000
+ 2231 1433 488D3D00 		leaq	.LC1(%rip), %rdi
+ 2231      000000
+ 2232 143a B8000000 		movl	$0, %eax
+ 2232      00
+ 2233 143f E8000000 		call	KDbgMsg at PLT
+ 2233      00
+ 2234              	.L37:
+ 2235 1444 660F6F85 		movdqa	-10128(%rbp), %xmm0
+ 2235      70D8FFFF 
+ 2236 144c F30F7F85 		movdqu	%xmm0, -5472(%rbp)
+ 2236      A0EAFFFF 
+ 2237              	.LBE514:
+ 2238              	.LBB515:
+ 2239              	.LBB516:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 2240              		.loc 2 667 0
+ 2241 1454 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 2241      00000000 
+ 2242 145c F30F6F8D 		movdqu	-5472(%rbp), %xmm1
+ 2242      A0EAFFFF 
+ 2243 1464 F30F7F8D 		movdqu	%xmm1, -5440(%rbp)
+ 2243      C0EAFFFF 
+ 2244 146c F30F7F85 		movdqu	%xmm0, -5456(%rbp)
+ 2244      B0EAFFFF 
+ 2245              	.LBB517:
+ 2246              	.LBB518:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 2247              		.loc 2 380 0
+ 2248 1474 F30F6F85 		movdqu	-5440(%rbp), %xmm0
+ 2248      C0EAFFFF 
+ 2249 147c F30F7F85 		movdqu	%xmm0, -9040(%rbp)
+ 2249      B0DCFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 2250              		.loc 2 381 0
+ 2251 1484 F30F6F85 		movdqu	-5456(%rbp), %xmm0
+ 2251      B0EAFFFF 
+ 2252 148c F30F7F85 		movdqu	%xmm0, -9056(%rbp)
+ 2252      A0DCFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 2253              		.loc 2 383 0
+ 2254 1494 C785DCEA 		movl	$0, -5412(%rbp)
+ 2254      FFFF0000 
+ 2254      0000
+ 2255 149e EB5C     		jmp	.L38
+ 2256              	.L41:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 2257              		.loc 2 385 0
+ 2258 14a0 8B85DCEA 		movl	-5412(%rbp), %eax
+ 2258      FFFF
+ 2259 14a6 89C0     		mov	%eax, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 102
+
+
+ 2260 14a8 0FB68405 		movzbl	-9056(%rbp,%rax), %eax
+ 2260      A0DCFFFF 
+ 2261 14b0 84C0     		testb	%al, %al
+ 2262 14b2 7912     		jns	.L39
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 2263              		.loc 2 386 0
+ 2264 14b4 8B85DCEA 		movl	-5412(%rbp), %eax
+ 2264      FFFF
+ 2265 14ba 89C0     		mov	%eax, %eax
+ 2266 14bc C68405C0 		movb	$0, -9024(%rbp,%rax)
+ 2266      DCFFFF00 
+ 2267 14c4 EB2F     		jmp	.L40
+ 2268              	.L39:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 2269              		.loc 2 388 0
+ 2270 14c6 8B8DDCEA 		movl	-5412(%rbp), %ecx
+ 2270      FFFF
+ 2271 14cc 8B85DCEA 		movl	-5412(%rbp), %eax
+ 2271      FFFF
+ 2272 14d2 89C0     		mov	%eax, %eax
+ 2273 14d4 0FB68405 		movzbl	-9056(%rbp,%rax), %eax
+ 2273      A0DCFFFF 
+ 2274 14dc 0FB6C0   		movzbl	%al, %eax
+ 2275 14df 83E00F   		andl	$15, %eax
+ 2276 14e2 4898     		cltq
+ 2277 14e4 0FB69405 		movzbl	-9040(%rbp,%rax), %edx
+ 2277      B0DCFFFF 
+ 2278 14ec 89C8     		mov	%ecx, %eax
+ 2279 14ee 889405C0 		movb	%dl, -9024(%rbp,%rax)
+ 2279      DCFFFF
+ 2280              	.L40:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 2281              		.loc 2 383 0
+ 2282 14f5 8385DCEA 		addl	$1, -5412(%rbp)
+ 2282      FFFF01
+ 2283              	.L38:
+ 2284 14fc 83BDDCEA 		cmpl	$15, -5412(%rbp)
+ 2284      FFFF0F
+ 2285 1503 769B     		jbe	.L41
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 2286              		.loc 2 391 0
+ 2287 1505 F30F6F85 		movdqu	-9024(%rbp), %xmm0
+ 2287      C0DCFFFF 
+ 2288              	.LBE518:
+ 2289              	.LBE517:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 2290              		.loc 2 667 0
+ 2291 150d F30F7F85 		movdqu	%xmm0, -5472(%rbp)
+ 2291      A0EAFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 2292              		.loc 2 668 0
+ 2293 1515 F30F6F85 		movdqu	-5472(%rbp), %xmm0
+ 2293      A0EAFFFF 
+ 2294              	.LBE516:
+ 2295              	.LBE515:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 2296              		.loc 2 1684 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 103
+
+
+ 2297 151d 660F7F85 		movdqa	%xmm0, -10128(%rbp)
+ 2297      70D8FFFF 
+ 2298              	.LBB519:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 2299              		.loc 2 1685 0
+ 2300 1525 660F6F85 		movdqa	-10128(%rbp), %xmm0
+ 2300      70D8FFFF 
+ 2301 152d F30F7F85 		movdqu	%xmm0, -9200(%rbp)
+ 2301      10DCFFFF 
+ 2302 1535 E8000000 		call	KDbgWriterGet at PLT
+ 2302      00
+ 2303 153a 4885C0   		testq	%rax, %rax
+ 2304 153d 7479     		je	.L43
+ 2305 153f BF010000 		movl	$1, %edi
+ 2305      00
+ 2306 1544 E8000000 		call	KDbgCondToFlag at PLT
+ 2306      00
+ 2307 1549 4889C6   		movq	%rax, %rsi
+ 2308 154c BF100000 		movl	$16, %edi
+ 2308      00
+ 2309 1551 E8000000 		call	KDbgTestModConds at PLT
+ 2309      00
+ 2310 1556 84C0     		testb	%al, %al
+ 2311 1558 745E     		je	.L43
+ 2312 155a 8B851CDC 		movl	-9188(%rbp), %eax
+ 2312      FFFF
+ 2313 1560 89C7     		movl	%eax, %edi
+ 2314 1562 E899EAFF 		call	bswap_32
+ 2314      FF
+ 2315 1567 4189C5   		movl	%eax, %r13d
+ 2316 156a 8B8518DC 		movl	-9192(%rbp), %eax
+ 2316      FFFF
+ 2317 1570 89C7     		movl	%eax, %edi
+ 2318 1572 E889EAFF 		call	bswap_32
+ 2318      FF
+ 2319 1577 4189C4   		movl	%eax, %r12d
+ 2320 157a 8B8514DC 		movl	-9196(%rbp), %eax
+ 2320      FFFF
+ 2321 1580 89C7     		movl	%eax, %edi
+ 2322 1582 E879EAFF 		call	bswap_32
+ 2322      FF
+ 2323 1587 89C3     		movl	%eax, %ebx
+ 2324 1589 8B8510DC 		movl	-9200(%rbp), %eax
+ 2324      FFFF
+ 2325 158f 89C7     		movl	%eax, %edi
+ 2326 1591 E86AEAFF 		call	bswap_32
+ 2326      FF
+ 2327 1596 4589E9   		movl	%r13d, %r9d
+ 2328 1599 4589E0   		movl	%r12d, %r8d
+ 2329 159c 89D9     		movl	%ebx, %ecx
+ 2330 159e 89C2     		movl	%eax, %edx
+ 2331 15a0 488D3500 		leaq	.LC2(%rip), %rsi
+ 2331      000000
+ 2332 15a7 488D3D00 		leaq	.LC1(%rip), %rdi
+ 2332      000000
+ 2333 15ae B8000000 		movl	$0, %eax
+ 2333      00
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 104
+
+
+ 2334 15b3 E8000000 		call	KDbgMsg at PLT
+ 2334      00
+ 2335              	.L43:
+ 2336 15b8 660F6F85 		movdqa	-10128(%rbp), %xmm0
+ 2336      70D8FFFF 
+ 2337 15c0 F30F7F85 		movdqu	%xmm0, -5392(%rbp)
+ 2337      F0EAFFFF 
+ 2338 15c8 660F6F85 		movdqa	-10112(%rbp), %xmm0
+ 2338      80D8FFFF 
+ 2339 15d0 F30F7F85 		movdqu	%xmm0, -5408(%rbp)
+ 2339      E0EAFFFF 
+ 2340              	.LBE519:
+ 2341              	.LBB520:
+ 2342              	.LBB521:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 2343              		.loc 2 178 0
+ 2344 15d8 F30F6F85 		movdqu	-5408(%rbp), %xmm0
+ 2344      E0EAFFFF 
+ 2345 15e0 F30F6F8D 		movdqu	-5392(%rbp), %xmm1
+ 2345      F0EAFFFF 
+ 2346 15e8 660FEFC1 		pxor	%xmm1, %xmm0
+ 2347              	.LBE521:
+ 2348              	.LBE520:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 2349              		.loc 2 1686 0
+ 2350 15ec 660F7F85 		movdqa	%xmm0, -10128(%rbp)
+ 2350      70D8FFFF 
+ 2351              	.LBB522:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 2352              		.loc 2 1687 0
+ 2353 15f4 660F6F85 		movdqa	-10128(%rbp), %xmm0
+ 2353      70D8FFFF 
+ 2354 15fc F30F7F85 		movdqu	%xmm0, -9216(%rbp)
+ 2354      00DCFFFF 
+ 2355 1604 E8000000 		call	KDbgWriterGet at PLT
+ 2355      00
+ 2356 1609 4885C0   		testq	%rax, %rax
+ 2357 160c 7479     		je	.L45
+ 2358 160e BF010000 		movl	$1, %edi
+ 2358      00
+ 2359 1613 E8000000 		call	KDbgCondToFlag at PLT
+ 2359      00
+ 2360 1618 4889C6   		movq	%rax, %rsi
+ 2361 161b BF100000 		movl	$16, %edi
+ 2361      00
+ 2362 1620 E8000000 		call	KDbgTestModConds at PLT
+ 2362      00
+ 2363 1625 84C0     		testb	%al, %al
+ 2364 1627 745E     		je	.L45
+ 2365 1629 8B850CDC 		movl	-9204(%rbp), %eax
+ 2365      FFFF
+ 2366 162f 89C7     		movl	%eax, %edi
+ 2367 1631 E8CAE9FF 		call	bswap_32
+ 2367      FF
+ 2368 1636 4189C5   		movl	%eax, %r13d
+ 2369 1639 8B8508DC 		movl	-9208(%rbp), %eax
+ 2369      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 105
+
+
+ 2370 163f 89C7     		movl	%eax, %edi
+ 2371 1641 E8BAE9FF 		call	bswap_32
+ 2371      FF
+ 2372 1646 4189C4   		movl	%eax, %r12d
+ 2373 1649 8B8504DC 		movl	-9212(%rbp), %eax
+ 2373      FFFF
+ 2374 164f 89C7     		movl	%eax, %edi
+ 2375 1651 E8AAE9FF 		call	bswap_32
+ 2375      FF
+ 2376 1656 89C3     		movl	%eax, %ebx
+ 2377 1658 8B8500DC 		movl	-9216(%rbp), %eax
+ 2377      FFFF
+ 2378 165e 89C7     		movl	%eax, %edi
+ 2379 1660 E89BE9FF 		call	bswap_32
+ 2379      FF
+ 2380 1665 4589E9   		movl	%r13d, %r9d
+ 2381 1668 4589E0   		movl	%r12d, %r8d
+ 2382 166b 89D9     		movl	%ebx, %ecx
+ 2383 166d 89C2     		movl	%eax, %edx
+ 2384 166f 488D3500 		leaq	.LC3(%rip), %rsi
+ 2384      000000
+ 2385 1676 488D3D00 		leaq	.LC1(%rip), %rdi
+ 2385      000000
+ 2386 167d B8000000 		movl	$0, %eax
+ 2386      00
+ 2387 1682 E8000000 		call	KDbgMsg at PLT
+ 2387      00
+ 2388              	.L45:
+ 2389 1687 660F6F85 		movdqa	-10128(%rbp), %xmm0
+ 2389      70D8FFFF 
+ 2390 168f F30F7F85 		movdqu	%xmm0, -5376(%rbp)
+ 2390      00EBFFFF 
+ 2391              	.LBE522:
+ 2392              	.LBB523:
+ 2393              	.LBB524:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 2394              		.loc 2 1357 0
+ 2395 1697 F30F6F85 		movdqu	-5376(%rbp), %xmm0
+ 2395      00EBFFFF 
+ 2396 169f F30F7F85 		movdqu	%xmm0, -9008(%rbp)
+ 2396      D0DCFFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 2397              		.loc 2 1358 0
+ 2398 16a7 8B85DCDC 		movl	-8996(%rbp), %eax
+ 2398      FFFF
+ 2399 16ad 8985D8DC 		movl	%eax, -9000(%rbp)
+ 2399      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 2400              		.loc 2 1359 0
+ 2401 16b3 8B85DCDC 		movl	-8996(%rbp), %eax
+ 2401      FFFF
+ 2402 16b9 8985D4DC 		movl	%eax, -9004(%rbp)
+ 2402      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 2403              		.loc 2 1360 0
+ 2404 16bf 8B85DCDC 		movl	-8996(%rbp), %eax
+ 2404      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 106
+
+
+ 2405 16c5 8985D0DC 		movl	%eax, -9008(%rbp)
+ 2405      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 2406              		.loc 2 1361 0
+ 2407 16cb F30F6F85 		movdqu	-9008(%rbp), %xmm0
+ 2407      D0DCFFFF 
+ 2408              	.LBE524:
+ 2409              	.LBE523:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 2410              		.loc 2 1688 0
+ 2411 16d3 660F7F85 		movdqa	%xmm0, -10128(%rbp)
+ 2411      70D8FFFF 
+ 2412              	.LBB525:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 2413              		.loc 2 1689 0
+ 2414 16db 660F6F85 		movdqa	-10128(%rbp), %xmm0
+ 2414      70D8FFFF 
+ 2415 16e3 F30F7F85 		movdqu	%xmm0, -9232(%rbp)
+ 2415      F0DBFFFF 
+ 2416 16eb E8000000 		call	KDbgWriterGet at PLT
+ 2416      00
+ 2417 16f0 4885C0   		testq	%rax, %rax
+ 2418 16f3 7479     		je	.L47
+ 2419 16f5 BF010000 		movl	$1, %edi
+ 2419      00
+ 2420 16fa E8000000 		call	KDbgCondToFlag at PLT
+ 2420      00
+ 2421 16ff 4889C6   		movq	%rax, %rsi
+ 2422 1702 BF100000 		movl	$16, %edi
+ 2422      00
+ 2423 1707 E8000000 		call	KDbgTestModConds at PLT
+ 2423      00
+ 2424 170c 84C0     		testb	%al, %al
+ 2425 170e 745E     		je	.L47
+ 2426 1710 8B85FCDB 		movl	-9220(%rbp), %eax
+ 2426      FFFF
+ 2427 1716 89C7     		movl	%eax, %edi
+ 2428 1718 E8E3E8FF 		call	bswap_32
+ 2428      FF
+ 2429 171d 4189C5   		movl	%eax, %r13d
+ 2430 1720 8B85F8DB 		movl	-9224(%rbp), %eax
+ 2430      FFFF
+ 2431 1726 89C7     		movl	%eax, %edi
+ 2432 1728 E8D3E8FF 		call	bswap_32
+ 2432      FF
+ 2433 172d 4189C4   		movl	%eax, %r12d
+ 2434 1730 8B85F4DB 		movl	-9228(%rbp), %eax
+ 2434      FFFF
+ 2435 1736 89C7     		movl	%eax, %edi
+ 2436 1738 E8C3E8FF 		call	bswap_32
+ 2436      FF
+ 2437 173d 89C3     		movl	%eax, %ebx
+ 2438 173f 8B85F0DB 		movl	-9232(%rbp), %eax
+ 2438      FFFF
+ 2439 1745 89C7     		movl	%eax, %edi
+ 2440 1747 E8B4E8FF 		call	bswap_32
+ 2440      FF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 107
+
+
+ 2441 174c 4589E9   		movl	%r13d, %r9d
+ 2442 174f 4589E0   		movl	%r12d, %r8d
+ 2443 1752 89D9     		movl	%ebx, %ecx
+ 2444 1754 89C2     		movl	%eax, %edx
+ 2445 1756 488D3500 		leaq	.LC4(%rip), %rsi
+ 2445      000000
+ 2446 175d 488D3D00 		leaq	.LC1(%rip), %rdi
+ 2446      000000
+ 2447 1764 B8000000 		movl	$0, %eax
+ 2447      00
+ 2448 1769 E8000000 		call	KDbgMsg at PLT
+ 2448      00
+ 2449              	.L47:
+ 2450              	.LBE525:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 2451              		.loc 2 1690 0
+ 2452 176e 660F6F85 		movdqa	-10128(%rbp), %xmm0
+ 2452      70D8FFFF 
+ 2453              	.LBE491:
+ 2454              	.LBE490:
+1745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x02,2);
+ 2455              		.loc 2 1745 0
+ 2456 1776 F30F7F85 		movdqu	%xmm0, -6624(%rbp)
+ 2456      20E6FFFF 
+ 2457 177e F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 2457      10E6FFFF 
+ 2458 1786 F30F7F85 		movdqu	%xmm0, -5360(%rbp)
+ 2458      10EBFFFF 
+ 2459              	.LBB526:
+ 2460              	.LBB527:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 2461              		.loc 2 1565 0
+ 2462 178e F30F6F85 		movdqu	-5360(%rbp), %xmm0
+ 2462      10EBFFFF 
+ 2463 1796 660F7F85 		movdqa	%xmm0, -10080(%rbp)
+ 2463      A0D8FFFF 
+ 2464 179e 660F6F85 		movdqa	-10080(%rbp), %xmm0
+ 2464      A0D8FFFF 
+ 2465 17a6 F30F7F85 		movdqu	%xmm0, -5344(%rbp)
+ 2465      20EBFFFF 
+ 2466              	.LBB528:
+ 2467              	.LBB529:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 2468              		.loc 2 1282 0
+ 2469 17ae F30F6F85 		movdqu	-5344(%rbp), %xmm0
+ 2469      20EBFFFF 
+ 2470 17b6 F30F7F85 		movdqu	%xmm0, -8992(%rbp)
+ 2470      E0DCFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 2471              		.loc 2 1283 0
+ 2472 17be 8B85E8DC 		movl	-8984(%rbp), %eax
+ 2472      FFFF
+ 2473 17c4 8985ECDC 		movl	%eax, -8980(%rbp)
+ 2473      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 2474              		.loc 2 1284 0
+ 2475 17ca 8B85E4DC 		movl	-8988(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 108
+
+
+ 2475      FFFF
+ 2476 17d0 8985E8DC 		movl	%eax, -8984(%rbp)
+ 2476      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 2477              		.loc 2 1285 0
+ 2478 17d6 8B85E0DC 		movl	-8992(%rbp), %eax
+ 2478      FFFF
+ 2479 17dc 8985E4DC 		movl	%eax, -8988(%rbp)
+ 2479      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 2480              		.loc 2 1286 0
+ 2481 17e2 C785E0DC 		movl	$0, -8992(%rbp)
+ 2481      FFFF0000 
+ 2481      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 2482              		.loc 2 1287 0
+ 2483 17ec F30F6F85 		movdqu	-8992(%rbp), %xmm0
+ 2483      E0DCFFFF 
+ 2484              	.LBE529:
+ 2485              	.LBE528:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2486              		.loc 2 1567 0
+ 2487 17f4 660F7F85 		movdqa	%xmm0, -10080(%rbp)
+ 2487      A0D8FFFF 
+ 2488 17fc 660F6F85 		movdqa	-10080(%rbp), %xmm0
+ 2488      A0D8FFFF 
+ 2489 1804 660FEF85 		pxor	-5360(%rbp), %xmm0
+ 2489      10EBFFFF 
+ 2490 180c F30F7F85 		movdqu	%xmm0, -5360(%rbp)
+ 2490      10EBFFFF 
+ 2491 1814 660F6F85 		movdqa	-10080(%rbp), %xmm0
+ 2491      A0D8FFFF 
+ 2492 181c F30F7F85 		movdqu	%xmm0, -5328(%rbp)
+ 2492      30EBFFFF 
+ 2493              	.LBB530:
+ 2494              	.LBB531:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 2495              		.loc 2 1282 0
+ 2496 1824 F30F6F85 		movdqu	-5328(%rbp), %xmm0
+ 2496      30EBFFFF 
+ 2497 182c F30F7F85 		movdqu	%xmm0, -8976(%rbp)
+ 2497      F0DCFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 2498              		.loc 2 1283 0
+ 2499 1834 8B85F8DC 		movl	-8968(%rbp), %eax
+ 2499      FFFF
+ 2500 183a 8985FCDC 		movl	%eax, -8964(%rbp)
+ 2500      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 2501              		.loc 2 1284 0
+ 2502 1840 8B85F4DC 		movl	-8972(%rbp), %eax
+ 2502      FFFF
+ 2503 1846 8985F8DC 		movl	%eax, -8968(%rbp)
+ 2503      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 2504              		.loc 2 1285 0
+ 2505 184c 8B85F0DC 		movl	-8976(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 109
+
+
+ 2505      FFFF
+ 2506 1852 8985F4DC 		movl	%eax, -8972(%rbp)
+ 2506      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 2507              		.loc 2 1286 0
+ 2508 1858 C785F0DC 		movl	$0, -8976(%rbp)
+ 2508      FFFF0000 
+ 2508      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 2509              		.loc 2 1287 0
+ 2510 1862 F30F6F85 		movdqu	-8976(%rbp), %xmm0
+ 2510      F0DCFFFF 
+ 2511              	.LBE531:
+ 2512              	.LBE530:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2513              		.loc 2 1568 0
+ 2514 186a 660F7F85 		movdqa	%xmm0, -10080(%rbp)
+ 2514      A0D8FFFF 
+ 2515 1872 660F6F85 		movdqa	-10080(%rbp), %xmm0
+ 2515      A0D8FFFF 
+ 2516 187a 660FEF85 		pxor	-5360(%rbp), %xmm0
+ 2516      10EBFFFF 
+ 2517 1882 F30F7F85 		movdqu	%xmm0, -5360(%rbp)
+ 2517      10EBFFFF 
+ 2518 188a 660F6F85 		movdqa	-10080(%rbp), %xmm0
+ 2518      A0D8FFFF 
+ 2519 1892 F30F7F85 		movdqu	%xmm0, -5312(%rbp)
+ 2519      40EBFFFF 
+ 2520              	.LBB532:
+ 2521              	.LBB533:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 2522              		.loc 2 1282 0
+ 2523 189a F30F6F85 		movdqu	-5312(%rbp), %xmm0
+ 2523      40EBFFFF 
+ 2524 18a2 F30F7F85 		movdqu	%xmm0, -8960(%rbp)
+ 2524      00DDFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 2525              		.loc 2 1283 0
+ 2526 18aa 8B8508DD 		movl	-8952(%rbp), %eax
+ 2526      FFFF
+ 2527 18b0 89850CDD 		movl	%eax, -8948(%rbp)
+ 2527      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 2528              		.loc 2 1284 0
+ 2529 18b6 8B8504DD 		movl	-8956(%rbp), %eax
+ 2529      FFFF
+ 2530 18bc 898508DD 		movl	%eax, -8952(%rbp)
+ 2530      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 2531              		.loc 2 1285 0
+ 2532 18c2 8B8500DD 		movl	-8960(%rbp), %eax
+ 2532      FFFF
+ 2533 18c8 898504DD 		movl	%eax, -8956(%rbp)
+ 2533      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 2534              		.loc 2 1286 0
+ 2535 18ce C78500DD 		movl	$0, -8960(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 110
+
+
+ 2535      FFFF0000 
+ 2535      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 2536              		.loc 2 1287 0
+ 2537 18d8 F30F6F85 		movdqu	-8960(%rbp), %xmm0
+ 2537      00DDFFFF 
+ 2538              	.LBE533:
+ 2539              	.LBE532:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2540              		.loc 2 1569 0
+ 2541 18e0 660F7F85 		movdqa	%xmm0, -10080(%rbp)
+ 2541      A0D8FFFF 
+ 2542 18e8 660F6F85 		movdqa	-10080(%rbp), %xmm0
+ 2542      A0D8FFFF 
+ 2543 18f0 660FEF85 		pxor	-5360(%rbp), %xmm0
+ 2543      10EBFFFF 
+ 2544 18f8 F30F7F85 		movdqu	%xmm0, -5360(%rbp)
+ 2544      10EBFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 2545              		.loc 2 1571 0
+ 2546 1900 F30F6F85 		movdqu	-5360(%rbp), %xmm0
+ 2546      10EBFFFF 
+ 2547              	.LBE527:
+ 2548              	.LBE526:
+1745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x02,2);
+ 2549              		.loc 2 1745 0
+ 2550 1908 F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 2550      10E6FFFF 
+ 2551 1910 F30F6F85 		movdqu	-6624(%rbp), %xmm0
+ 2551      20E6FFFF 
+ 2552 1918 F30F6F8D 		movdqu	-6640(%rbp), %xmm1
+ 2552      10E6FFFF 
+ 2553 1920 660FEFC1 		pxor	%xmm1, %xmm0
+ 2554 1924 F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 2554      10E6FFFF 
+ 2555 192c 488B85B8 		movq	-9544(%rbp), %rax
+ 2555      DAFFFF
+ 2556 1933 4883C020 		addq	$32, %rax
+ 2557 1937 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 2557      10E6FFFF 
+ 2558 193f F30F7F00 		movdqu	%xmm0, (%rax)
+ 2559 1943 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 2559      10E6FFFF 
+ 2560 194b F30F7F85 		movdqu	%xmm0, -5280(%rbp)
+ 2560      60EBFFFF 
+ 2561              	.LBB534:
+ 2562              	.LBB535:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 2563              		.loc 2 1681 0
+ 2564 1953 B8040000 		movl	$4, %eax
+ 2564      00
+ 2565 1958 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 2565      00000000 
+ 2566 1960 F30F7F85 		movdqu	%xmm0, -5248(%rbp)
+ 2566      80EBFFFF 
+ 2567 1968 89857CEB 		movl	%eax, -5252(%rbp)
+ 2567      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 111
+
+
+ 2568              	.LBB536:
+ 2569              	.LBB537:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 2570              		.loc 2 522 0
+ 2571 196e F30F6F85 		movdqu	-5248(%rbp), %xmm0
+ 2571      80EBFFFF 
+ 2572 1976 F30F7F85 		movdqu	%xmm0, -8880(%rbp)
+ 2572      50DDFFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 2573              		.loc 2 523 0
+ 2574 197e B8030000 		movl	$3, %eax
+ 2574      00
+ 2575 1983 4898     		cltq
+ 2576 1985 8B957CEB 		movl	-5252(%rbp), %edx
+ 2576      FFFF
+ 2577 198b 89948550 		movl	%edx, -8880(%rbp,%rax,4)
+ 2577      DDFFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 2578              		.loc 2 524 0
+ 2579 1992 F30F6F85 		movdqu	-8880(%rbp), %xmm0
+ 2579      50DDFFFF 
+ 2580 199a F30F7F85 		movdqu	%xmm0, -5248(%rbp)
+ 2580      80EBFFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 2581              		.loc 2 526 0
+ 2582 19a2 F30F6F85 		movdqu	-5248(%rbp), %xmm0
+ 2582      80EBFFFF 
+ 2583              	.LBE537:
+ 2584              	.LBE536:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 2585              		.loc 2 1681 0
+ 2586 19aa 660F7F85 		movdqa	%xmm0, -10048(%rbp)
+ 2586      C0D8FFFF 
+ 2587 19b2 F30F6F85 		movdqu	-5280(%rbp), %xmm0
+ 2587      60EBFFFF 
+ 2588 19ba F30F7F85 		movdqu	%xmm0, -5232(%rbp)
+ 2588      90EBFFFF 
+ 2589 19c2 F30F6F85 		movdqu	-5232(%rbp), %xmm0
+ 2589      90EBFFFF 
+ 2590 19ca F30F7F85 		movdqu	%xmm0, -5200(%rbp)
+ 2590      B0EBFFFF 
+ 2591 19d2 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 2591      000000
+ 2592 19d9 488985A8 		movq	%rax, -5208(%rbp)
+ 2592      EBFFFF
+ 2593              	.LBB538:
+ 2594              	.LBB539:
+ 2595              	.LBB540:
+ 2596              	.LBB541:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 2597              		.loc 2 851 0
+ 2598 19e0 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 2598      00000000 
+ 2599 19e8 F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 2599      D0EBFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 2600              		.loc 2 854 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 112
+
+
+ 2601 19f0 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 2601      00000000 
+ 2602 19f8 F30F6F8D 		movdqu	-5200(%rbp), %xmm1
+ 2602      B0EBFFFF 
+ 2603 1a00 F30F7F8D 		movdqu	%xmm1, -5088(%rbp)
+ 2603      20ECFFFF 
+ 2604 1a08 F30F7F85 		movdqu	%xmm0, -5104(%rbp)
+ 2604      10ECFFFF 
+ 2605              	.LBB542:
+ 2606              	.LBB543:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 2607              		.loc 2 206 0
+ 2608 1a10 F30F6F85 		movdqu	-5104(%rbp), %xmm0
+ 2608      10ECFFFF 
+ 2609 1a18 F30F6F8D 		movdqu	-5088(%rbp), %xmm1
+ 2609      20ECFFFF 
+ 2610 1a20 660FDBC1 		pand	%xmm1, %xmm0
+ 2611              	.LBE543:
+ 2612              	.LBE542:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 2613              		.loc 2 854 0
+ 2614 1a24 F30F7F85 		movdqu	%xmm0, -5120(%rbp)
+ 2614      00ECFFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 2615              		.loc 2 862 0
+ 2616 1a2c 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 2616      00000000 
+ 2617 1a34 F30F6F8D 		movdqu	-5200(%rbp), %xmm1
+ 2617      B0EBFFFF 
+ 2618 1a3c F30F7F8D 		movdqu	%xmm1, -5056(%rbp)
+ 2618      40ECFFFF 
+ 2619 1a44 F30F7F85 		movdqu	%xmm0, -5072(%rbp)
+ 2619      30ECFFFF 
+ 2620              	.LBB544:
+ 2621              		.loc 2 2642 0
+ 2622 1a4c 0FB68540 		movzbl	-5056(%rbp), %eax
+ 2622      ECFFFF
+ 2623 1a53 0FB69530 		movzbl	-5072(%rbp), %edx
+ 2623      ECFFFF
+ 2624 1a5a 0FB6C0   		movzbl	%al, %eax
+ 2625 1a5d 6689858E 		movw	%ax, -10354(%rbp)
+ 2625      D7FFFF
+ 2626 1a64 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 2626      D7FFFF
+ 2627 1a6b F6F2     		divb	%dl
+ 2628 1a6d 4189C7   		movl	%eax, %r15d
+ 2629 1a70 0FB68541 		movzbl	-5055(%rbp), %eax
+ 2629      ECFFFF
+ 2630 1a77 0FB69531 		movzbl	-5071(%rbp), %edx
+ 2630      ECFFFF
+ 2631 1a7e 0FB6C0   		movzbl	%al, %eax
+ 2632 1a81 6689858E 		movw	%ax, -10354(%rbp)
+ 2632      D7FFFF
+ 2633 1a88 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 2633      D7FFFF
+ 2634 1a8f F6F2     		divb	%dl
+ 2635 1a91 8885DFD8 		movb	%al, -10017(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 113
+
+
+ 2635      FFFF
+ 2636 1a97 0FB68542 		movzbl	-5054(%rbp), %eax
+ 2636      ECFFFF
+ 2637 1a9e 0FB69532 		movzbl	-5070(%rbp), %edx
+ 2637      ECFFFF
+ 2638 1aa5 0FB6C0   		movzbl	%al, %eax
+ 2639 1aa8 6689858E 		movw	%ax, -10354(%rbp)
+ 2639      D7FFFF
+ 2640 1aaf 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 2640      D7FFFF
+ 2641 1ab6 F6F2     		divb	%dl
+ 2642 1ab8 8885DED8 		movb	%al, -10018(%rbp)
+ 2642      FFFF
+ 2643 1abe 0FB68543 		movzbl	-5053(%rbp), %eax
+ 2643      ECFFFF
+ 2644 1ac5 0FB69533 		movzbl	-5069(%rbp), %edx
+ 2644      ECFFFF
+ 2645 1acc 0FB6C0   		movzbl	%al, %eax
+ 2646 1acf 6689858E 		movw	%ax, -10354(%rbp)
+ 2646      D7FFFF
+ 2647 1ad6 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 2647      D7FFFF
+ 2648 1add F6F2     		divb	%dl
+ 2649 1adf 8885DDD8 		movb	%al, -10019(%rbp)
+ 2649      FFFF
+ 2650 1ae5 0FB68544 		movzbl	-5052(%rbp), %eax
+ 2650      ECFFFF
+ 2651 1aec 0FB69534 		movzbl	-5068(%rbp), %edx
+ 2651      ECFFFF
+ 2652 1af3 0FB6C0   		movzbl	%al, %eax
+ 2653 1af6 6689858E 		movw	%ax, -10354(%rbp)
+ 2653      D7FFFF
+ 2654 1afd 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 2654      D7FFFF
+ 2655 1b04 F6F2     		divb	%dl
+ 2656 1b06 8885DCD8 		movb	%al, -10020(%rbp)
+ 2656      FFFF
+ 2657 1b0c 0FB68545 		movzbl	-5051(%rbp), %eax
+ 2657      ECFFFF
+ 2658 1b13 0FB69535 		movzbl	-5067(%rbp), %edx
+ 2658      ECFFFF
+ 2659 1b1a 0FB6C0   		movzbl	%al, %eax
+ 2660 1b1d 6689858E 		movw	%ax, -10354(%rbp)
+ 2660      D7FFFF
+ 2661 1b24 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 2661      D7FFFF
+ 2662 1b2b F6F2     		divb	%dl
+ 2663 1b2d 4189C1   		movl	%eax, %r9d
+ 2664 1b30 0FB68546 		movzbl	-5050(%rbp), %eax
+ 2664      ECFFFF
+ 2665 1b37 0FB69536 		movzbl	-5066(%rbp), %edx
+ 2665      ECFFFF
+ 2666 1b3e 0FB6C0   		movzbl	%al, %eax
+ 2667 1b41 6689858E 		movw	%ax, -10354(%rbp)
+ 2667      D7FFFF
+ 2668 1b48 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 2668      D7FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 114
+
+
+ 2669 1b4f F6F2     		divb	%dl
+ 2670 1b51 89C7     		movl	%eax, %edi
+ 2671 1b53 0FB68547 		movzbl	-5049(%rbp), %eax
+ 2671      ECFFFF
+ 2672 1b5a 0FB69537 		movzbl	-5065(%rbp), %edx
+ 2672      ECFFFF
+ 2673 1b61 0FB6C0   		movzbl	%al, %eax
+ 2674 1b64 6689858E 		movw	%ax, -10354(%rbp)
+ 2674      D7FFFF
+ 2675 1b6b 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 2675      D7FFFF
+ 2676 1b72 F6F2     		divb	%dl
+ 2677 1b74 89C3     		movl	%eax, %ebx
+ 2678 1b76 0FB68548 		movzbl	-5048(%rbp), %eax
+ 2678      ECFFFF
+ 2679 1b7d 0FB69538 		movzbl	-5064(%rbp), %edx
+ 2679      ECFFFF
+ 2680 1b84 0FB6C0   		movzbl	%al, %eax
+ 2681 1b87 6689858E 		movw	%ax, -10354(%rbp)
+ 2681      D7FFFF
+ 2682 1b8e 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 2682      D7FFFF
+ 2683 1b95 F6F2     		divb	%dl
+ 2684 1b97 4189C2   		movl	%eax, %r10d
+ 2685 1b9a 0FB68549 		movzbl	-5047(%rbp), %eax
+ 2685      ECFFFF
+ 2686 1ba1 0FB69539 		movzbl	-5063(%rbp), %edx
+ 2686      ECFFFF
+ 2687 1ba8 0FB6C0   		movzbl	%al, %eax
+ 2688 1bab 6689858E 		movw	%ax, -10354(%rbp)
+ 2688      D7FFFF
+ 2689 1bb2 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 2689      D7FFFF
+ 2690 1bb9 F6F2     		divb	%dl
+ 2691 1bbb 4189C3   		movl	%eax, %r11d
+ 2692 1bbe 0FB6854A 		movzbl	-5046(%rbp), %eax
+ 2692      ECFFFF
+ 2693 1bc5 0FB6953A 		movzbl	-5062(%rbp), %edx
+ 2693      ECFFFF
+ 2694 1bcc 0FB6C0   		movzbl	%al, %eax
+ 2695 1bcf 6689858E 		movw	%ax, -10354(%rbp)
+ 2695      D7FFFF
+ 2696 1bd6 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 2696      D7FFFF
+ 2697 1bdd F6F2     		divb	%dl
+ 2698 1bdf 4189C4   		movl	%eax, %r12d
+ 2699 1be2 0FB6854B 		movzbl	-5045(%rbp), %eax
+ 2699      ECFFFF
+ 2700 1be9 0FB6953B 		movzbl	-5061(%rbp), %edx
+ 2700      ECFFFF
+ 2701 1bf0 0FB6C0   		movzbl	%al, %eax
+ 2702 1bf3 6689858E 		movw	%ax, -10354(%rbp)
+ 2702      D7FFFF
+ 2703 1bfa 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 2703      D7FFFF
+ 2704 1c01 F6F2     		divb	%dl
+ 2705 1c03 4189C5   		movl	%eax, %r13d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 115
+
+
+ 2706 1c06 0FB6854C 		movzbl	-5044(%rbp), %eax
+ 2706      ECFFFF
+ 2707 1c0d 0FB6953C 		movzbl	-5060(%rbp), %edx
+ 2707      ECFFFF
+ 2708 1c14 0FB6C0   		movzbl	%al, %eax
+ 2709 1c17 6689858E 		movw	%ax, -10354(%rbp)
+ 2709      D7FFFF
+ 2710 1c1e 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 2710      D7FFFF
+ 2711 1c25 F6F2     		divb	%dl
+ 2712 1c27 4189C6   		movl	%eax, %r14d
+ 2713 1c2a 0FB6854D 		movzbl	-5043(%rbp), %eax
+ 2713      ECFFFF
+ 2714 1c31 0FB6953D 		movzbl	-5059(%rbp), %edx
+ 2714      ECFFFF
+ 2715 1c38 0FB6C0   		movzbl	%al, %eax
+ 2716 1c3b 6689858E 		movw	%ax, -10354(%rbp)
+ 2716      D7FFFF
+ 2717 1c42 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 2717      D7FFFF
+ 2718 1c49 F6F2     		divb	%dl
+ 2719 1c4b 4189C0   		movl	%eax, %r8d
+ 2720 1c4e 0FB6854E 		movzbl	-5042(%rbp), %eax
+ 2720      ECFFFF
+ 2721 1c55 0FB6953E 		movzbl	-5058(%rbp), %edx
+ 2721      ECFFFF
+ 2722 1c5c 0FB6C0   		movzbl	%al, %eax
+ 2723 1c5f 6689858E 		movw	%ax, -10354(%rbp)
+ 2723      D7FFFF
+ 2724 1c66 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 2724      D7FFFF
+ 2725 1c6d F6F2     		divb	%dl
+ 2726 1c6f 89C6     		movl	%eax, %esi
+ 2727 1c71 0FB6854F 		movzbl	-5041(%rbp), %eax
+ 2727      ECFFFF
+ 2728 1c78 0FB6953F 		movzbl	-5057(%rbp), %edx
+ 2728      ECFFFF
+ 2729 1c7f 0FB6C0   		movzbl	%al, %eax
+ 2730 1c82 6689858E 		movw	%ax, -10354(%rbp)
+ 2730      D7FFFF
+ 2731 1c89 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 2731      D7FFFF
+ 2732 1c90 F6F2     		divb	%dl
+ 2733 1c92 89C1     		movl	%eax, %ecx
+ 2734              	.LBB545:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 2735              		.loc 2 346 0
+ 2736 1c94 0FB6D3   		movzbl	%bl, %edx
+ 2737 1c97 400FB6C7 		movzbl	%dil, %eax
+ 2738 1c9b 48C1E208 		salq	$8, %rdx
+ 2739 1c9f 4809C2   		orq	%rax, %rdx
+ 2740 1ca2 410FB6C1 		movzbl	%r9b, %eax
+ 2741 1ca6 48C1E208 		salq	$8, %rdx
+ 2742 1caa 4809C2   		orq	%rax, %rdx
+ 2743 1cad 0FB685DC 		movzbl	-10020(%rbp), %eax
+ 2743      D8FFFF
+ 2744 1cb4 48C1E208 		salq	$8, %rdx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 116
+
+
+ 2745 1cb8 4809C2   		orq	%rax, %rdx
+ 2746 1cbb 0FB685DD 		movzbl	-10019(%rbp), %eax
+ 2746      D8FFFF
+ 2747 1cc2 48C1E208 		salq	$8, %rdx
+ 2748 1cc6 4809C2   		orq	%rax, %rdx
+ 2749 1cc9 0FB685DE 		movzbl	-10018(%rbp), %eax
+ 2749      D8FFFF
+ 2750 1cd0 48C1E208 		salq	$8, %rdx
+ 2751 1cd4 4809C2   		orq	%rax, %rdx
+ 2752 1cd7 0FB685DF 		movzbl	-10017(%rbp), %eax
+ 2752      D8FFFF
+ 2753 1cde 48C1E208 		salq	$8, %rdx
+ 2754 1ce2 4809C2   		orq	%rax, %rdx
+ 2755 1ce5 410FB6C7 		movzbl	%r15b, %eax
+ 2756 1ce9 48C1E208 		salq	$8, %rdx
+ 2757 1ced 4809C2   		orq	%rax, %rdx
+ 2758 1cf0 0FB6C1   		movzbl	%cl, %eax
+ 2759 1cf3 400FB6CE 		movzbl	%sil, %ecx
+ 2760 1cf7 48C1E008 		salq	$8, %rax
+ 2761 1cfb 4809C8   		orq	%rcx, %rax
+ 2762 1cfe 410FB6C8 		movzbl	%r8b, %ecx
+ 2763 1d02 48C1E008 		salq	$8, %rax
+ 2764 1d06 4809C8   		orq	%rcx, %rax
+ 2765 1d09 410FB6CE 		movzbl	%r14b, %ecx
+ 2766 1d0d 48C1E008 		salq	$8, %rax
+ 2767 1d11 4809C8   		orq	%rcx, %rax
+ 2768 1d14 410FB6CD 		movzbl	%r13b, %ecx
+ 2769 1d18 48C1E008 		salq	$8, %rax
+ 2770 1d1c 4809C8   		orq	%rcx, %rax
+ 2771 1d1f 410FB6CC 		movzbl	%r12b, %ecx
+ 2772 1d23 48C1E008 		salq	$8, %rax
+ 2773 1d27 4809C8   		orq	%rcx, %rax
+ 2774 1d2a 410FB6CB 		movzbl	%r11b, %ecx
+ 2775 1d2e 48C1E008 		salq	$8, %rax
+ 2776 1d32 4809C8   		orq	%rcx, %rax
+ 2777 1d35 410FB6CA 		movzbl	%r10b, %ecx
+ 2778 1d39 48C1E008 		salq	$8, %rax
+ 2779 1d3d 4809C8   		orq	%rcx, %rax
+ 2780 1d40 48899500 		movq	%rdx, -10240(%rbp)
+ 2780      D8FFFF
+ 2781 1d47 48898508 		movq	%rax, -10232(%rbp)
+ 2781      D8FFFF
+ 2782 1d4e 660F6F85 		movdqa	-10240(%rbp), %xmm0
+ 2782      00D8FFFF 
+ 2783              	.LBE545:
+ 2784              	.LBE544:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 2785              		.loc 2 862 0
+ 2786 1d56 F30F7F85 		movdqu	%xmm0, -5136(%rbp)
+ 2786      F0EBFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 2787              		.loc 2 866 0
+ 2788 1d5e C785CCEB 		movl	$0, -5172(%rbp)
+ 2788      FFFF0000 
+ 2788      0000
+ 2789 1d68 E9860200 		jmp	.L48
+ 2789      00
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 117
+
+
+ 2790              	.L57:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 2791              		.loc 2 868 0
+ 2792 1d6d 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 2792      00000000 
+ 2793 1d75 F30F7F85 		movdqu	%xmm0, -5024(%rbp)
+ 2793      60ECFFFF 
+ 2794 1d7d F30F6F85 		movdqu	-5136(%rbp), %xmm0
+ 2794      F0EBFFFF 
+ 2795 1d85 F30F7F85 		movdqu	%xmm0, -5040(%rbp)
+ 2795      50ECFFFF 
+ 2796              	.LBB546:
+ 2797              	.LBB547:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 2798              		.loc 2 380 0
+ 2799 1d8d F30F6F85 		movdqu	-5024(%rbp), %xmm0
+ 2799      60ECFFFF 
+ 2800 1d95 F30F7F85 		movdqu	%xmm0, -8848(%rbp)
+ 2800      70DDFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 2801              		.loc 2 381 0
+ 2802 1d9d F30F6F85 		movdqu	-5040(%rbp), %xmm0
+ 2802      50ECFFFF 
+ 2803 1da5 F30F7F85 		movdqu	%xmm0, -8864(%rbp)
+ 2803      60DDFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 2804              		.loc 2 383 0
+ 2805 1dad C7857CEC 		movl	$0, -4996(%rbp)
+ 2805      FFFF0000 
+ 2805      0000
+ 2806 1db7 EB5C     		jmp	.L49
+ 2807              	.L52:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 2808              		.loc 2 385 0
+ 2809 1db9 8B857CEC 		movl	-4996(%rbp), %eax
+ 2809      FFFF
+ 2810 1dbf 89C0     		mov	%eax, %eax
+ 2811 1dc1 0FB68405 		movzbl	-8864(%rbp,%rax), %eax
+ 2811      60DDFFFF 
+ 2812 1dc9 84C0     		testb	%al, %al
+ 2813 1dcb 7912     		jns	.L50
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 2814              		.loc 2 386 0
+ 2815 1dcd 8B857CEC 		movl	-4996(%rbp), %eax
+ 2815      FFFF
+ 2816 1dd3 89C0     		mov	%eax, %eax
+ 2817 1dd5 C6840580 		movb	$0, -8832(%rbp,%rax)
+ 2817      DDFFFF00 
+ 2818 1ddd EB2F     		jmp	.L51
+ 2819              	.L50:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 2820              		.loc 2 388 0
+ 2821 1ddf 8B8D7CEC 		movl	-4996(%rbp), %ecx
+ 2821      FFFF
+ 2822 1de5 8B857CEC 		movl	-4996(%rbp), %eax
+ 2822      FFFF
+ 2823 1deb 89C0     		mov	%eax, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 118
+
+
+ 2824 1ded 0FB68405 		movzbl	-8864(%rbp,%rax), %eax
+ 2824      60DDFFFF 
+ 2825 1df5 0FB6C0   		movzbl	%al, %eax
+ 2826 1df8 83E00F   		andl	$15, %eax
+ 2827 1dfb 4898     		cltq
+ 2828 1dfd 0FB69405 		movzbl	-8848(%rbp,%rax), %edx
+ 2828      70DDFFFF 
+ 2829 1e05 89C8     		mov	%ecx, %eax
+ 2830 1e07 88940580 		movb	%dl, -8832(%rbp,%rax)
+ 2830      DDFFFF
+ 2831              	.L51:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 2832              		.loc 2 383 0
+ 2833 1e0e 83857CEC 		addl	$1, -4996(%rbp)
+ 2833      FFFF01
+ 2834              	.L49:
+ 2835 1e15 83BD7CEC 		cmpl	$15, -4996(%rbp)
+ 2835      FFFF0F
+ 2836 1e1c 769B     		jbe	.L52
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 2837              		.loc 2 391 0
+ 2838 1e1e F30F6F85 		movdqu	-8832(%rbp), %xmm0
+ 2838      80DDFFFF 
+ 2839              	.LBE547:
+ 2840              	.LBE546:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 2841              		.loc 2 868 0
+ 2842 1e26 F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 2842      E0EBFFFF 
+ 2843 1e2e F30F6F85 		movdqu	-5120(%rbp), %xmm0
+ 2843      00ECFFFF 
+ 2844 1e36 F30F7F85 		movdqu	%xmm0, -4976(%rbp)
+ 2844      90ECFFFF 
+ 2845 1e3e F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 2845      E0EBFFFF 
+ 2846 1e46 F30F7F85 		movdqu	%xmm0, -4992(%rbp)
+ 2846      80ECFFFF 
+ 2847              	.LBB548:
+ 2848              	.LBB549:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 2849              		.loc 2 234 0
+ 2850 1e4e F30F6F85 		movdqu	-4992(%rbp), %xmm0
+ 2850      80ECFFFF 
+ 2851 1e56 F30F6F8D 		movdqu	-4976(%rbp), %xmm1
+ 2851      90ECFFFF 
+ 2852 1e5e 660FEBC1 		por	%xmm1, %xmm0
+ 2853              	.LBE549:
+ 2854              	.LBE548:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 2855              		.loc 2 870 0
+ 2856 1e62 F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 2856      E0EBFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 2857              		.loc 2 872 0
+ 2858 1e6a 8B85CCEB 		mov	-5172(%rbp), %eax
+ 2858      FFFF
+ 2859 1e70 48C1E004 		salq	$4, %rax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 119
+
+
+ 2860 1e74 480385A8 		addq	-5208(%rbp), %rax
+ 2860      EBFFFF
+ 2861 1e7b 660F6F00 		movdqa	(%rax), %xmm0
+ 2862 1e7f F30F7F85 		movdqu	%xmm0, -4944(%rbp)
+ 2862      B0ECFFFF 
+ 2863 1e87 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 2863      E0EBFFFF 
+ 2864 1e8f F30F7F85 		movdqu	%xmm0, -4960(%rbp)
+ 2864      A0ECFFFF 
+ 2865              	.LBB550:
+ 2866              	.LBB551:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 2867              		.loc 2 380 0
+ 2868 1e97 F30F6F85 		movdqu	-4944(%rbp), %xmm0
+ 2868      B0ECFFFF 
+ 2869 1e9f F30F7F85 		movdqu	%xmm0, -8800(%rbp)
+ 2869      A0DDFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 2870              		.loc 2 381 0
+ 2871 1ea7 F30F6F85 		movdqu	-4960(%rbp), %xmm0
+ 2871      A0ECFFFF 
+ 2872 1eaf F30F7F85 		movdqu	%xmm0, -8816(%rbp)
+ 2872      90DDFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 2873              		.loc 2 383 0
+ 2874 1eb7 C785CCEC 		movl	$0, -4916(%rbp)
+ 2874      FFFF0000 
+ 2874      0000
+ 2875 1ec1 EB5C     		jmp	.L53
+ 2876              	.L56:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 2877              		.loc 2 385 0
+ 2878 1ec3 8B85CCEC 		movl	-4916(%rbp), %eax
+ 2878      FFFF
+ 2879 1ec9 89C0     		mov	%eax, %eax
+ 2880 1ecb 0FB68405 		movzbl	-8816(%rbp,%rax), %eax
+ 2880      90DDFFFF 
+ 2881 1ed3 84C0     		testb	%al, %al
+ 2882 1ed5 7912     		jns	.L54
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 2883              		.loc 2 386 0
+ 2884 1ed7 8B85CCEC 		movl	-4916(%rbp), %eax
+ 2884      FFFF
+ 2885 1edd 89C0     		mov	%eax, %eax
+ 2886 1edf C68405B0 		movb	$0, -8784(%rbp,%rax)
+ 2886      DDFFFF00 
+ 2887 1ee7 EB2F     		jmp	.L55
+ 2888              	.L54:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 2889              		.loc 2 388 0
+ 2890 1ee9 8B8DCCEC 		movl	-4916(%rbp), %ecx
+ 2890      FFFF
+ 2891 1eef 8B85CCEC 		movl	-4916(%rbp), %eax
+ 2891      FFFF
+ 2892 1ef5 89C0     		mov	%eax, %eax
+ 2893 1ef7 0FB68405 		movzbl	-8816(%rbp,%rax), %eax
+ 2893      90DDFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 120
+
+
+ 2894 1eff 0FB6C0   		movzbl	%al, %eax
+ 2895 1f02 83E00F   		andl	$15, %eax
+ 2896 1f05 4898     		cltq
+ 2897 1f07 0FB69405 		movzbl	-8800(%rbp,%rax), %edx
+ 2897      A0DDFFFF 
+ 2898 1f0f 89C8     		mov	%ecx, %eax
+ 2899 1f11 889405B0 		movb	%dl, -8784(%rbp,%rax)
+ 2899      DDFFFF
+ 2900              	.L55:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 2901              		.loc 2 383 0
+ 2902 1f18 8385CCEC 		addl	$1, -4916(%rbp)
+ 2902      FFFF01
+ 2903              	.L53:
+ 2904 1f1f 83BDCCEC 		cmpl	$15, -4916(%rbp)
+ 2904      FFFF0F
+ 2905 1f26 769B     		jbe	.L56
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 2906              		.loc 2 391 0
+ 2907 1f28 F30F6F85 		movdqu	-8784(%rbp), %xmm0
+ 2907      B0DDFFFF 
+ 2908              	.LBE551:
+ 2909              	.LBE550:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 2910              		.loc 2 872 0
+ 2911 1f30 F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 2911      E0EBFFFF 
+ 2912 1f38 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 2912      D0EBFFFF 
+ 2913 1f40 F30F7F85 		movdqu	%xmm0, -4896(%rbp)
+ 2913      E0ECFFFF 
+ 2914 1f48 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 2914      E0EBFFFF 
+ 2915 1f50 F30F7F85 		movdqu	%xmm0, -4912(%rbp)
+ 2915      D0ECFFFF 
+ 2916              	.LBB552:
+ 2917              	.LBB553:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 2918              		.loc 2 234 0
+ 2919 1f58 F30F6F85 		movdqu	-4912(%rbp), %xmm0
+ 2919      D0ECFFFF 
+ 2920 1f60 F30F6F8D 		movdqu	-4896(%rbp), %xmm1
+ 2920      E0ECFFFF 
+ 2921 1f68 660FEBC1 		por	%xmm1, %xmm0
+ 2922              	.LBE553:
+ 2923              	.LBE552:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 2924              		.loc 2 874 0
+ 2925 1f6c F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 2925      D0EBFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 2926              		.loc 2 876 0
+ 2927 1f74 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 2927      00000000 
+ 2928 1f7c F30F6F8D 		movdqu	-5136(%rbp), %xmm1
+ 2928      F0EBFFFF 
+ 2929 1f84 F30F7F8D 		movdqu	%xmm1, -4864(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 121
+
+
+ 2929      00EDFFFF 
+ 2930 1f8c F30F7F85 		movdqu	%xmm0, -4880(%rbp)
+ 2930      F0ECFFFF 
+ 2931              	.LBB554:
+ 2932              	.LBB555:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 2933              		.loc 2 290 0
+ 2934 1f94 F30F6F8D 		movdqu	-4880(%rbp), %xmm1
+ 2934      F0ECFFFF 
+ 2935 1f9c F30F6F85 		movdqu	-4864(%rbp), %xmm0
+ 2935      00EDFFFF 
+ 2936 1fa4 660FF8C1 		psubb	%xmm1, %xmm0
+ 2937              	.LBE555:
+ 2938              	.LBE554:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 2939              		.loc 2 876 0
+ 2940 1fa8 F30F7F85 		movdqu	%xmm0, -5136(%rbp)
+ 2940      F0EBFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2941              		.loc 2 878 0
+ 2942 1fb0 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 2942      00000000 
+ 2943 1fb8 F30F6F8D 		movdqu	-5136(%rbp), %xmm1
+ 2943      F0EBFFFF 
+ 2944 1fc0 F30F7F8D 		movdqu	%xmm1, -4832(%rbp)
+ 2944      20EDFFFF 
+ 2945 1fc8 F30F7F85 		movdqu	%xmm0, -4848(%rbp)
+ 2945      10EDFFFF 
+ 2946              	.LBB556:
+ 2947              	.LBB557:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 2948              		.loc 2 206 0
+ 2949 1fd0 F30F6F85 		movdqu	-4848(%rbp), %xmm0
+ 2949      10EDFFFF 
+ 2950 1fd8 F30F6F8D 		movdqu	-4832(%rbp), %xmm1
+ 2950      20EDFFFF 
+ 2951 1fe0 660FDBC1 		pand	%xmm1, %xmm0
+ 2952              	.LBE557:
+ 2953              	.LBE556:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2954              		.loc 2 878 0
+ 2955 1fe4 F30F7F85 		movdqu	%xmm0, -5136(%rbp)
+ 2955      F0EBFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 2956              		.loc 2 866 0
+ 2957 1fec 8385CCEB 		addl	$1, -5172(%rbp)
+ 2957      FFFF01
+ 2958              	.L48:
+ 2959 1ff3 83BDCCEB 		cmpl	$15, -5172(%rbp)
+ 2959      FFFF0F
+ 2960 1ffa 0F866DFD 		jbe	.L57
+ 2960      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 2961              		.loc 2 882 0
+ 2962 2000 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 2962      D0EBFFFF 
+ 2963              	.LBE541:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 122
+
+
+ 2964              	.LBE540:
+ 2965              	.LBE539:
+ 2966              	.LBE538:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 2967              		.loc 2 1682 0
+ 2968 2008 660F7F85 		movdqa	%xmm0, -10064(%rbp)
+ 2968      B0D8FFFF 
+ 2969              	.LBB558:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 2970              		.loc 2 1683 0
+ 2971 2010 660F6F85 		movdqa	-10064(%rbp), %xmm0
+ 2971      B0D8FFFF 
+ 2972 2018 F30F7F85 		movdqu	%xmm0, -8896(%rbp)
+ 2972      40DDFFFF 
+ 2973 2020 E8000000 		call	KDbgWriterGet at PLT
+ 2973      00
+ 2974 2025 4885C0   		testq	%rax, %rax
+ 2975 2028 7479     		je	.L59
+ 2976 202a BF010000 		movl	$1, %edi
+ 2976      00
+ 2977 202f E8000000 		call	KDbgCondToFlag at PLT
+ 2977      00
+ 2978 2034 4889C6   		movq	%rax, %rsi
+ 2979 2037 BF100000 		movl	$16, %edi
+ 2979      00
+ 2980 203c E8000000 		call	KDbgTestModConds at PLT
+ 2980      00
+ 2981 2041 84C0     		testb	%al, %al
+ 2982 2043 745E     		je	.L59
+ 2983 2045 8B854CDD 		movl	-8884(%rbp), %eax
+ 2983      FFFF
+ 2984 204b 89C7     		movl	%eax, %edi
+ 2985 204d E8AEDFFF 		call	bswap_32
+ 2985      FF
+ 2986 2052 4189C5   		movl	%eax, %r13d
+ 2987 2055 8B8548DD 		movl	-8888(%rbp), %eax
+ 2987      FFFF
+ 2988 205b 89C7     		movl	%eax, %edi
+ 2989 205d E89EDFFF 		call	bswap_32
+ 2989      FF
+ 2990 2062 4189C4   		movl	%eax, %r12d
+ 2991 2065 8B8544DD 		movl	-8892(%rbp), %eax
+ 2991      FFFF
+ 2992 206b 89C7     		movl	%eax, %edi
+ 2993 206d E88EDFFF 		call	bswap_32
+ 2993      FF
+ 2994 2072 89C3     		movl	%eax, %ebx
+ 2995 2074 8B8540DD 		movl	-8896(%rbp), %eax
+ 2995      FFFF
+ 2996 207a 89C7     		movl	%eax, %edi
+ 2997 207c E87FDFFF 		call	bswap_32
+ 2997      FF
+ 2998 2081 4589E9   		movl	%r13d, %r9d
+ 2999 2084 4589E0   		movl	%r12d, %r8d
+ 3000 2087 89D9     		movl	%ebx, %ecx
+ 3001 2089 89C2     		movl	%eax, %edx
+ 3002 208b 488D3500 		leaq	.LC0(%rip), %rsi
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 123
+
+
+ 3002      000000
+ 3003 2092 488D3D00 		leaq	.LC1(%rip), %rdi
+ 3003      000000
+ 3004 2099 B8000000 		movl	$0, %eax
+ 3004      00
+ 3005 209e E8000000 		call	KDbgMsg at PLT
+ 3005      00
+ 3006              	.L59:
+ 3007 20a3 660F6F85 		movdqa	-10064(%rbp), %xmm0
+ 3007      B0D8FFFF 
+ 3008 20ab F30F7F85 		movdqu	%xmm0, -4816(%rbp)
+ 3008      30EDFFFF 
+ 3009              	.LBE558:
+ 3010              	.LBB559:
+ 3011              	.LBB560:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 3012              		.loc 2 667 0
+ 3013 20b3 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 3013      00000000 
+ 3014 20bb F30F6F8D 		movdqu	-4816(%rbp), %xmm1
+ 3014      30EDFFFF 
+ 3015 20c3 F30F7F8D 		movdqu	%xmm1, -4784(%rbp)
+ 3015      50EDFFFF 
+ 3016 20cb F30F7F85 		movdqu	%xmm0, -4800(%rbp)
+ 3016      40EDFFFF 
+ 3017              	.LBB561:
+ 3018              	.LBB562:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 3019              		.loc 2 380 0
+ 3020 20d3 F30F6F85 		movdqu	-4784(%rbp), %xmm0
+ 3020      50EDFFFF 
+ 3021 20db F30F7F85 		movdqu	%xmm0, -8752(%rbp)
+ 3021      D0DDFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 3022              		.loc 2 381 0
+ 3023 20e3 F30F6F85 		movdqu	-4800(%rbp), %xmm0
+ 3023      40EDFFFF 
+ 3024 20eb F30F7F85 		movdqu	%xmm0, -8768(%rbp)
+ 3024      C0DDFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 3025              		.loc 2 383 0
+ 3026 20f3 C7856CED 		movl	$0, -4756(%rbp)
+ 3026      FFFF0000 
+ 3026      0000
+ 3027 20fd EB5C     		jmp	.L60
+ 3028              	.L63:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 3029              		.loc 2 385 0
+ 3030 20ff 8B856CED 		movl	-4756(%rbp), %eax
+ 3030      FFFF
+ 3031 2105 89C0     		mov	%eax, %eax
+ 3032 2107 0FB68405 		movzbl	-8768(%rbp,%rax), %eax
+ 3032      C0DDFFFF 
+ 3033 210f 84C0     		testb	%al, %al
+ 3034 2111 7912     		jns	.L61
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 3035              		.loc 2 386 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 124
+
+
+ 3036 2113 8B856CED 		movl	-4756(%rbp), %eax
+ 3036      FFFF
+ 3037 2119 89C0     		mov	%eax, %eax
+ 3038 211b C68405E0 		movb	$0, -8736(%rbp,%rax)
+ 3038      DDFFFF00 
+ 3039 2123 EB2F     		jmp	.L62
+ 3040              	.L61:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 3041              		.loc 2 388 0
+ 3042 2125 8B8D6CED 		movl	-4756(%rbp), %ecx
+ 3042      FFFF
+ 3043 212b 8B856CED 		movl	-4756(%rbp), %eax
+ 3043      FFFF
+ 3044 2131 89C0     		mov	%eax, %eax
+ 3045 2133 0FB68405 		movzbl	-8768(%rbp,%rax), %eax
+ 3045      C0DDFFFF 
+ 3046 213b 0FB6C0   		movzbl	%al, %eax
+ 3047 213e 83E00F   		andl	$15, %eax
+ 3048 2141 4898     		cltq
+ 3049 2143 0FB69405 		movzbl	-8752(%rbp,%rax), %edx
+ 3049      D0DDFFFF 
+ 3050 214b 89C8     		mov	%ecx, %eax
+ 3051 214d 889405E0 		movb	%dl, -8736(%rbp,%rax)
+ 3051      DDFFFF
+ 3052              	.L62:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 3053              		.loc 2 383 0
+ 3054 2154 83856CED 		addl	$1, -4756(%rbp)
+ 3054      FFFF01
+ 3055              	.L60:
+ 3056 215b 83BD6CED 		cmpl	$15, -4756(%rbp)
+ 3056      FFFF0F
+ 3057 2162 769B     		jbe	.L63
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 3058              		.loc 2 391 0
+ 3059 2164 F30F6F85 		movdqu	-8736(%rbp), %xmm0
+ 3059      E0DDFFFF 
+ 3060              	.LBE562:
+ 3061              	.LBE561:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 3062              		.loc 2 667 0
+ 3063 216c F30F7F85 		movdqu	%xmm0, -4816(%rbp)
+ 3063      30EDFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 3064              		.loc 2 668 0
+ 3065 2174 F30F6F85 		movdqu	-4816(%rbp), %xmm0
+ 3065      30EDFFFF 
+ 3066              	.LBE560:
+ 3067              	.LBE559:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 3068              		.loc 2 1684 0
+ 3069 217c 660F7F85 		movdqa	%xmm0, -10064(%rbp)
+ 3069      B0D8FFFF 
+ 3070              	.LBB563:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 3071              		.loc 2 1685 0
+ 3072 2184 660F6F85 		movdqa	-10064(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 125
+
+
+ 3072      B0D8FFFF 
+ 3073 218c F30F7F85 		movdqu	%xmm0, -8912(%rbp)
+ 3073      30DDFFFF 
+ 3074 2194 E8000000 		call	KDbgWriterGet at PLT
+ 3074      00
+ 3075 2199 4885C0   		testq	%rax, %rax
+ 3076 219c 7479     		je	.L65
+ 3077 219e BF010000 		movl	$1, %edi
+ 3077      00
+ 3078 21a3 E8000000 		call	KDbgCondToFlag at PLT
+ 3078      00
+ 3079 21a8 4889C6   		movq	%rax, %rsi
+ 3080 21ab BF100000 		movl	$16, %edi
+ 3080      00
+ 3081 21b0 E8000000 		call	KDbgTestModConds at PLT
+ 3081      00
+ 3082 21b5 84C0     		testb	%al, %al
+ 3083 21b7 745E     		je	.L65
+ 3084 21b9 8B853CDD 		movl	-8900(%rbp), %eax
+ 3084      FFFF
+ 3085 21bf 89C7     		movl	%eax, %edi
+ 3086 21c1 E83ADEFF 		call	bswap_32
+ 3086      FF
+ 3087 21c6 4189C5   		movl	%eax, %r13d
+ 3088 21c9 8B8538DD 		movl	-8904(%rbp), %eax
+ 3088      FFFF
+ 3089 21cf 89C7     		movl	%eax, %edi
+ 3090 21d1 E82ADEFF 		call	bswap_32
+ 3090      FF
+ 3091 21d6 4189C4   		movl	%eax, %r12d
+ 3092 21d9 8B8534DD 		movl	-8908(%rbp), %eax
+ 3092      FFFF
+ 3093 21df 89C7     		movl	%eax, %edi
+ 3094 21e1 E81ADEFF 		call	bswap_32
+ 3094      FF
+ 3095 21e6 89C3     		movl	%eax, %ebx
+ 3096 21e8 8B8530DD 		movl	-8912(%rbp), %eax
+ 3096      FFFF
+ 3097 21ee 89C7     		movl	%eax, %edi
+ 3098 21f0 E80BDEFF 		call	bswap_32
+ 3098      FF
+ 3099 21f5 4589E9   		movl	%r13d, %r9d
+ 3100 21f8 4589E0   		movl	%r12d, %r8d
+ 3101 21fb 89D9     		movl	%ebx, %ecx
+ 3102 21fd 89C2     		movl	%eax, %edx
+ 3103 21ff 488D3500 		leaq	.LC2(%rip), %rsi
+ 3103      000000
+ 3104 2206 488D3D00 		leaq	.LC1(%rip), %rdi
+ 3104      000000
+ 3105 220d B8000000 		movl	$0, %eax
+ 3105      00
+ 3106 2212 E8000000 		call	KDbgMsg at PLT
+ 3106      00
+ 3107              	.L65:
+ 3108 2217 660F6F85 		movdqa	-10064(%rbp), %xmm0
+ 3108      B0D8FFFF 
+ 3109 221f F30F7F85 		movdqu	%xmm0, -4736(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 126
+
+
+ 3109      80EDFFFF 
+ 3110 2227 660F6F85 		movdqa	-10048(%rbp), %xmm0
+ 3110      C0D8FFFF 
+ 3111 222f F30F7F85 		movdqu	%xmm0, -4752(%rbp)
+ 3111      70EDFFFF 
+ 3112              	.LBE563:
+ 3113              	.LBB564:
+ 3114              	.LBB565:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 3115              		.loc 2 178 0
+ 3116 2237 F30F6F85 		movdqu	-4752(%rbp), %xmm0
+ 3116      70EDFFFF 
+ 3117 223f F30F6F8D 		movdqu	-4736(%rbp), %xmm1
+ 3117      80EDFFFF 
+ 3118 2247 660FEFC1 		pxor	%xmm1, %xmm0
+ 3119              	.LBE565:
+ 3120              	.LBE564:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 3121              		.loc 2 1686 0
+ 3122 224b 660F7F85 		movdqa	%xmm0, -10064(%rbp)
+ 3122      B0D8FFFF 
+ 3123              	.LBB566:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 3124              		.loc 2 1687 0
+ 3125 2253 660F6F85 		movdqa	-10064(%rbp), %xmm0
+ 3125      B0D8FFFF 
+ 3126 225b F30F7F85 		movdqu	%xmm0, -8928(%rbp)
+ 3126      20DDFFFF 
+ 3127 2263 E8000000 		call	KDbgWriterGet at PLT
+ 3127      00
+ 3128 2268 4885C0   		testq	%rax, %rax
+ 3129 226b 7479     		je	.L67
+ 3130 226d BF010000 		movl	$1, %edi
+ 3130      00
+ 3131 2272 E8000000 		call	KDbgCondToFlag at PLT
+ 3131      00
+ 3132 2277 4889C6   		movq	%rax, %rsi
+ 3133 227a BF100000 		movl	$16, %edi
+ 3133      00
+ 3134 227f E8000000 		call	KDbgTestModConds at PLT
+ 3134      00
+ 3135 2284 84C0     		testb	%al, %al
+ 3136 2286 745E     		je	.L67
+ 3137 2288 8B852CDD 		movl	-8916(%rbp), %eax
+ 3137      FFFF
+ 3138 228e 89C7     		movl	%eax, %edi
+ 3139 2290 E86BDDFF 		call	bswap_32
+ 3139      FF
+ 3140 2295 4189C5   		movl	%eax, %r13d
+ 3141 2298 8B8528DD 		movl	-8920(%rbp), %eax
+ 3141      FFFF
+ 3142 229e 89C7     		movl	%eax, %edi
+ 3143 22a0 E85BDDFF 		call	bswap_32
+ 3143      FF
+ 3144 22a5 4189C4   		movl	%eax, %r12d
+ 3145 22a8 8B8524DD 		movl	-8924(%rbp), %eax
+ 3145      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 127
+
+
+ 3146 22ae 89C7     		movl	%eax, %edi
+ 3147 22b0 E84BDDFF 		call	bswap_32
+ 3147      FF
+ 3148 22b5 89C3     		movl	%eax, %ebx
+ 3149 22b7 8B8520DD 		movl	-8928(%rbp), %eax
+ 3149      FFFF
+ 3150 22bd 89C7     		movl	%eax, %edi
+ 3151 22bf E83CDDFF 		call	bswap_32
+ 3151      FF
+ 3152 22c4 4589E9   		movl	%r13d, %r9d
+ 3153 22c7 4589E0   		movl	%r12d, %r8d
+ 3154 22ca 89D9     		movl	%ebx, %ecx
+ 3155 22cc 89C2     		movl	%eax, %edx
+ 3156 22ce 488D3500 		leaq	.LC3(%rip), %rsi
+ 3156      000000
+ 3157 22d5 488D3D00 		leaq	.LC1(%rip), %rdi
+ 3157      000000
+ 3158 22dc B8000000 		movl	$0, %eax
+ 3158      00
+ 3159 22e1 E8000000 		call	KDbgMsg at PLT
+ 3159      00
+ 3160              	.L67:
+ 3161 22e6 660F6F85 		movdqa	-10064(%rbp), %xmm0
+ 3161      B0D8FFFF 
+ 3162 22ee F30F7F85 		movdqu	%xmm0, -4720(%rbp)
+ 3162      90EDFFFF 
+ 3163              	.LBE566:
+ 3164              	.LBB567:
+ 3165              	.LBB568:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 3166              		.loc 2 1357 0
+ 3167 22f6 F30F6F85 		movdqu	-4720(%rbp), %xmm0
+ 3167      90EDFFFF 
+ 3168 22fe F30F7F85 		movdqu	%xmm0, -8720(%rbp)
+ 3168      F0DDFFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 3169              		.loc 2 1358 0
+ 3170 2306 8B85FCDD 		movl	-8708(%rbp), %eax
+ 3170      FFFF
+ 3171 230c 8985F8DD 		movl	%eax, -8712(%rbp)
+ 3171      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 3172              		.loc 2 1359 0
+ 3173 2312 8B85FCDD 		movl	-8708(%rbp), %eax
+ 3173      FFFF
+ 3174 2318 8985F4DD 		movl	%eax, -8716(%rbp)
+ 3174      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 3175              		.loc 2 1360 0
+ 3176 231e 8B85FCDD 		movl	-8708(%rbp), %eax
+ 3176      FFFF
+ 3177 2324 8985F0DD 		movl	%eax, -8720(%rbp)
+ 3177      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 3178              		.loc 2 1361 0
+ 3179 232a F30F6F85 		movdqu	-8720(%rbp), %xmm0
+ 3179      F0DDFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 128
+
+
+ 3180              	.LBE568:
+ 3181              	.LBE567:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 3182              		.loc 2 1688 0
+ 3183 2332 660F7F85 		movdqa	%xmm0, -10064(%rbp)
+ 3183      B0D8FFFF 
+ 3184              	.LBB569:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 3185              		.loc 2 1689 0
+ 3186 233a 660F6F85 		movdqa	-10064(%rbp), %xmm0
+ 3186      B0D8FFFF 
+ 3187 2342 F30F7F85 		movdqu	%xmm0, -8944(%rbp)
+ 3187      10DDFFFF 
+ 3188 234a E8000000 		call	KDbgWriterGet at PLT
+ 3188      00
+ 3189 234f 4885C0   		testq	%rax, %rax
+ 3190 2352 7479     		je	.L69
+ 3191 2354 BF010000 		movl	$1, %edi
+ 3191      00
+ 3192 2359 E8000000 		call	KDbgCondToFlag at PLT
+ 3192      00
+ 3193 235e 4889C6   		movq	%rax, %rsi
+ 3194 2361 BF100000 		movl	$16, %edi
+ 3194      00
+ 3195 2366 E8000000 		call	KDbgTestModConds at PLT
+ 3195      00
+ 3196 236b 84C0     		testb	%al, %al
+ 3197 236d 745E     		je	.L69
+ 3198 236f 8B851CDD 		movl	-8932(%rbp), %eax
+ 3198      FFFF
+ 3199 2375 89C7     		movl	%eax, %edi
+ 3200 2377 E884DCFF 		call	bswap_32
+ 3200      FF
+ 3201 237c 4189C5   		movl	%eax, %r13d
+ 3202 237f 8B8518DD 		movl	-8936(%rbp), %eax
+ 3202      FFFF
+ 3203 2385 89C7     		movl	%eax, %edi
+ 3204 2387 E874DCFF 		call	bswap_32
+ 3204      FF
+ 3205 238c 4189C4   		movl	%eax, %r12d
+ 3206 238f 8B8514DD 		movl	-8940(%rbp), %eax
+ 3206      FFFF
+ 3207 2395 89C7     		movl	%eax, %edi
+ 3208 2397 E864DCFF 		call	bswap_32
+ 3208      FF
+ 3209 239c 89C3     		movl	%eax, %ebx
+ 3210 239e 8B8510DD 		movl	-8944(%rbp), %eax
+ 3210      FFFF
+ 3211 23a4 89C7     		movl	%eax, %edi
+ 3212 23a6 E855DCFF 		call	bswap_32
+ 3212      FF
+ 3213 23ab 4589E9   		movl	%r13d, %r9d
+ 3214 23ae 4589E0   		movl	%r12d, %r8d
+ 3215 23b1 89D9     		movl	%ebx, %ecx
+ 3216 23b3 89C2     		movl	%eax, %edx
+ 3217 23b5 488D3500 		leaq	.LC4(%rip), %rsi
+ 3217      000000
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 129
+
+
+ 3218 23bc 488D3D00 		leaq	.LC1(%rip), %rdi
+ 3218      000000
+ 3219 23c3 B8000000 		movl	$0, %eax
+ 3219      00
+ 3220 23c8 E8000000 		call	KDbgMsg at PLT
+ 3220      00
+ 3221              	.L69:
+ 3222              	.LBE569:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 3223              		.loc 2 1690 0
+ 3224 23cd 660F6F85 		movdqa	-10064(%rbp), %xmm0
+ 3224      B0D8FFFF 
+ 3225              	.LBE535:
+ 3226              	.LBE534:
+1746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x04,3);
+ 3227              		.loc 2 1746 0
+ 3228 23d5 F30F7F85 		movdqu	%xmm0, -6624(%rbp)
+ 3228      20E6FFFF 
+ 3229 23dd F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 3229      10E6FFFF 
+ 3230 23e5 F30F7F85 		movdqu	%xmm0, -4704(%rbp)
+ 3230      A0EDFFFF 
+ 3231              	.LBB570:
+ 3232              	.LBB571:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 3233              		.loc 2 1565 0
+ 3234 23ed F30F6F85 		movdqu	-4704(%rbp), %xmm0
+ 3234      A0EDFFFF 
+ 3235 23f5 660F7F85 		movdqa	%xmm0, -10016(%rbp)
+ 3235      E0D8FFFF 
+ 3236 23fd 660F6F85 		movdqa	-10016(%rbp), %xmm0
+ 3236      E0D8FFFF 
+ 3237 2405 F30F7F85 		movdqu	%xmm0, -4688(%rbp)
+ 3237      B0EDFFFF 
+ 3238              	.LBB572:
+ 3239              	.LBB573:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 3240              		.loc 2 1282 0
+ 3241 240d F30F6F85 		movdqu	-4688(%rbp), %xmm0
+ 3241      B0EDFFFF 
+ 3242 2415 F30F7F85 		movdqu	%xmm0, -8704(%rbp)
+ 3242      00DEFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 3243              		.loc 2 1283 0
+ 3244 241d 8B8508DE 		movl	-8696(%rbp), %eax
+ 3244      FFFF
+ 3245 2423 89850CDE 		movl	%eax, -8692(%rbp)
+ 3245      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 3246              		.loc 2 1284 0
+ 3247 2429 8B8504DE 		movl	-8700(%rbp), %eax
+ 3247      FFFF
+ 3248 242f 898508DE 		movl	%eax, -8696(%rbp)
+ 3248      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 3249              		.loc 2 1285 0
+ 3250 2435 8B8500DE 		movl	-8704(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 130
+
+
+ 3250      FFFF
+ 3251 243b 898504DE 		movl	%eax, -8700(%rbp)
+ 3251      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 3252              		.loc 2 1286 0
+ 3253 2441 C78500DE 		movl	$0, -8704(%rbp)
+ 3253      FFFF0000 
+ 3253      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 3254              		.loc 2 1287 0
+ 3255 244b F30F6F85 		movdqu	-8704(%rbp), %xmm0
+ 3255      00DEFFFF 
+ 3256              	.LBE573:
+ 3257              	.LBE572:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3258              		.loc 2 1567 0
+ 3259 2453 660F7F85 		movdqa	%xmm0, -10016(%rbp)
+ 3259      E0D8FFFF 
+ 3260 245b 660F6F85 		movdqa	-10016(%rbp), %xmm0
+ 3260      E0D8FFFF 
+ 3261 2463 660FEF85 		pxor	-4704(%rbp), %xmm0
+ 3261      A0EDFFFF 
+ 3262 246b F30F7F85 		movdqu	%xmm0, -4704(%rbp)
+ 3262      A0EDFFFF 
+ 3263 2473 660F6F85 		movdqa	-10016(%rbp), %xmm0
+ 3263      E0D8FFFF 
+ 3264 247b F30F7F85 		movdqu	%xmm0, -4672(%rbp)
+ 3264      C0EDFFFF 
+ 3265              	.LBB574:
+ 3266              	.LBB575:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 3267              		.loc 2 1282 0
+ 3268 2483 F30F6F85 		movdqu	-4672(%rbp), %xmm0
+ 3268      C0EDFFFF 
+ 3269 248b F30F7F85 		movdqu	%xmm0, -8688(%rbp)
+ 3269      10DEFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 3270              		.loc 2 1283 0
+ 3271 2493 8B8518DE 		movl	-8680(%rbp), %eax
+ 3271      FFFF
+ 3272 2499 89851CDE 		movl	%eax, -8676(%rbp)
+ 3272      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 3273              		.loc 2 1284 0
+ 3274 249f 8B8514DE 		movl	-8684(%rbp), %eax
+ 3274      FFFF
+ 3275 24a5 898518DE 		movl	%eax, -8680(%rbp)
+ 3275      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 3276              		.loc 2 1285 0
+ 3277 24ab 8B8510DE 		movl	-8688(%rbp), %eax
+ 3277      FFFF
+ 3278 24b1 898514DE 		movl	%eax, -8684(%rbp)
+ 3278      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 3279              		.loc 2 1286 0
+ 3280 24b7 C78510DE 		movl	$0, -8688(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 131
+
+
+ 3280      FFFF0000 
+ 3280      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 3281              		.loc 2 1287 0
+ 3282 24c1 F30F6F85 		movdqu	-8688(%rbp), %xmm0
+ 3282      10DEFFFF 
+ 3283              	.LBE575:
+ 3284              	.LBE574:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3285              		.loc 2 1568 0
+ 3286 24c9 660F7F85 		movdqa	%xmm0, -10016(%rbp)
+ 3286      E0D8FFFF 
+ 3287 24d1 660F6F85 		movdqa	-10016(%rbp), %xmm0
+ 3287      E0D8FFFF 
+ 3288 24d9 660FEF85 		pxor	-4704(%rbp), %xmm0
+ 3288      A0EDFFFF 
+ 3289 24e1 F30F7F85 		movdqu	%xmm0, -4704(%rbp)
+ 3289      A0EDFFFF 
+ 3290 24e9 660F6F85 		movdqa	-10016(%rbp), %xmm0
+ 3290      E0D8FFFF 
+ 3291 24f1 F30F7F85 		movdqu	%xmm0, -4656(%rbp)
+ 3291      D0EDFFFF 
+ 3292              	.LBB576:
+ 3293              	.LBB577:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 3294              		.loc 2 1282 0
+ 3295 24f9 F30F6F85 		movdqu	-4656(%rbp), %xmm0
+ 3295      D0EDFFFF 
+ 3296 2501 F30F7F85 		movdqu	%xmm0, -8672(%rbp)
+ 3296      20DEFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 3297              		.loc 2 1283 0
+ 3298 2509 8B8528DE 		movl	-8664(%rbp), %eax
+ 3298      FFFF
+ 3299 250f 89852CDE 		movl	%eax, -8660(%rbp)
+ 3299      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 3300              		.loc 2 1284 0
+ 3301 2515 8B8524DE 		movl	-8668(%rbp), %eax
+ 3301      FFFF
+ 3302 251b 898528DE 		movl	%eax, -8664(%rbp)
+ 3302      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 3303              		.loc 2 1285 0
+ 3304 2521 8B8520DE 		movl	-8672(%rbp), %eax
+ 3304      FFFF
+ 3305 2527 898524DE 		movl	%eax, -8668(%rbp)
+ 3305      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 3306              		.loc 2 1286 0
+ 3307 252d C78520DE 		movl	$0, -8672(%rbp)
+ 3307      FFFF0000 
+ 3307      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 3308              		.loc 2 1287 0
+ 3309 2537 F30F6F85 		movdqu	-8672(%rbp), %xmm0
+ 3309      20DEFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 132
+
+
+ 3310              	.LBE577:
+ 3311              	.LBE576:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3312              		.loc 2 1569 0
+ 3313 253f 660F7F85 		movdqa	%xmm0, -10016(%rbp)
+ 3313      E0D8FFFF 
+ 3314 2547 660F6F85 		movdqa	-10016(%rbp), %xmm0
+ 3314      E0D8FFFF 
+ 3315 254f 660FEF85 		pxor	-4704(%rbp), %xmm0
+ 3315      A0EDFFFF 
+ 3316 2557 F30F7F85 		movdqu	%xmm0, -4704(%rbp)
+ 3316      A0EDFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 3317              		.loc 2 1571 0
+ 3318 255f F30F6F85 		movdqu	-4704(%rbp), %xmm0
+ 3318      A0EDFFFF 
+ 3319              	.LBE571:
+ 3320              	.LBE570:
+1746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x04,3);
+ 3321              		.loc 2 1746 0
+ 3322 2567 F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 3322      10E6FFFF 
+ 3323 256f F30F6F85 		movdqu	-6624(%rbp), %xmm0
+ 3323      20E6FFFF 
+ 3324 2577 F30F6F8D 		movdqu	-6640(%rbp), %xmm1
+ 3324      10E6FFFF 
+ 3325 257f 660FEFC1 		pxor	%xmm1, %xmm0
+ 3326 2583 F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 3326      10E6FFFF 
+ 3327 258b 488B85B8 		movq	-9544(%rbp), %rax
+ 3327      DAFFFF
+ 3328 2592 4883C030 		addq	$48, %rax
+ 3329 2596 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 3329      10E6FFFF 
+ 3330 259e F30F7F00 		movdqu	%xmm0, (%rax)
+ 3331 25a2 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 3331      10E6FFFF 
+ 3332 25aa F30F7F85 		movdqu	%xmm0, -4624(%rbp)
+ 3332      F0EDFFFF 
+ 3333              	.LBB578:
+ 3334              	.LBB579:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 3335              		.loc 2 1681 0
+ 3336 25b2 B8080000 		movl	$8, %eax
+ 3336      00
+ 3337 25b7 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 3337      00000000 
+ 3338 25bf F30F7F85 		movdqu	%xmm0, -4592(%rbp)
+ 3338      10EEFFFF 
+ 3339 25c7 89850CEE 		movl	%eax, -4596(%rbp)
+ 3339      FFFF
+ 3340              	.LBB580:
+ 3341              	.LBB581:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 3342              		.loc 2 522 0
+ 3343 25cd F30F6F85 		movdqu	-4592(%rbp), %xmm0
+ 3343      10EEFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 133
+
+
+ 3344 25d5 F30F7F85 		movdqu	%xmm0, -8592(%rbp)
+ 3344      70DEFFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 3345              		.loc 2 523 0
+ 3346 25dd B8030000 		movl	$3, %eax
+ 3346      00
+ 3347 25e2 4898     		cltq
+ 3348 25e4 8B950CEE 		movl	-4596(%rbp), %edx
+ 3348      FFFF
+ 3349 25ea 89948570 		movl	%edx, -8592(%rbp,%rax,4)
+ 3349      DEFFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 3350              		.loc 2 524 0
+ 3351 25f1 F30F6F85 		movdqu	-8592(%rbp), %xmm0
+ 3351      70DEFFFF 
+ 3352 25f9 F30F7F85 		movdqu	%xmm0, -4592(%rbp)
+ 3352      10EEFFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 3353              		.loc 2 526 0
+ 3354 2601 F30F6F85 		movdqu	-4592(%rbp), %xmm0
+ 3354      10EEFFFF 
+ 3355              	.LBE581:
+ 3356              	.LBE580:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 3357              		.loc 2 1681 0
+ 3358 2609 660F7F85 		movdqa	%xmm0, -9984(%rbp)
+ 3358      00D9FFFF 
+ 3359 2611 F30F6F85 		movdqu	-4624(%rbp), %xmm0
+ 3359      F0EDFFFF 
+ 3360 2619 F30F7F85 		movdqu	%xmm0, -4576(%rbp)
+ 3360      20EEFFFF 
+ 3361 2621 F30F6F85 		movdqu	-4576(%rbp), %xmm0
+ 3361      20EEFFFF 
+ 3362 2629 F30F7F85 		movdqu	%xmm0, -4544(%rbp)
+ 3362      40EEFFFF 
+ 3363 2631 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 3363      000000
+ 3364 2638 48898538 		movq	%rax, -4552(%rbp)
+ 3364      EEFFFF
+ 3365              	.LBB582:
+ 3366              	.LBB583:
+ 3367              	.LBB584:
+ 3368              	.LBB585:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 3369              		.loc 2 851 0
+ 3370 263f 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 3370      00000000 
+ 3371 2647 F30F7F85 		movdqu	%xmm0, -4512(%rbp)
+ 3371      60EEFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 3372              		.loc 2 854 0
+ 3373 264f 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 3373      00000000 
+ 3374 2657 F30F6F8D 		movdqu	-4544(%rbp), %xmm1
+ 3374      40EEFFFF 
+ 3375 265f F30F7F8D 		movdqu	%xmm1, -4432(%rbp)
+ 3375      B0EEFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 134
+
+
+ 3376 2667 F30F7F85 		movdqu	%xmm0, -4448(%rbp)
+ 3376      A0EEFFFF 
+ 3377              	.LBB586:
+ 3378              	.LBB587:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 3379              		.loc 2 206 0
+ 3380 266f F30F6F85 		movdqu	-4448(%rbp), %xmm0
+ 3380      A0EEFFFF 
+ 3381 2677 F30F6F8D 		movdqu	-4432(%rbp), %xmm1
+ 3381      B0EEFFFF 
+ 3382 267f 660FDBC1 		pand	%xmm1, %xmm0
+ 3383              	.LBE587:
+ 3384              	.LBE586:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 3385              		.loc 2 854 0
+ 3386 2683 F30F7F85 		movdqu	%xmm0, -4464(%rbp)
+ 3386      90EEFFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 3387              		.loc 2 862 0
+ 3388 268b 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 3388      00000000 
+ 3389 2693 F30F6F8D 		movdqu	-4544(%rbp), %xmm1
+ 3389      40EEFFFF 
+ 3390 269b F30F7F8D 		movdqu	%xmm1, -4400(%rbp)
+ 3390      D0EEFFFF 
+ 3391 26a3 F30F7F85 		movdqu	%xmm0, -4416(%rbp)
+ 3391      C0EEFFFF 
+ 3392              	.LBB588:
+ 3393              		.loc 2 2642 0
+ 3394 26ab 0FB685D0 		movzbl	-4400(%rbp), %eax
+ 3394      EEFFFF
+ 3395 26b2 0FB695C0 		movzbl	-4416(%rbp), %edx
+ 3395      EEFFFF
+ 3396 26b9 0FB6C0   		movzbl	%al, %eax
+ 3397 26bc 6689858E 		movw	%ax, -10354(%rbp)
+ 3397      D7FFFF
+ 3398 26c3 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 3398      D7FFFF
+ 3399 26ca F6F2     		divb	%dl
+ 3400 26cc 4189C7   		movl	%eax, %r15d
+ 3401 26cf 0FB685D1 		movzbl	-4399(%rbp), %eax
+ 3401      EEFFFF
+ 3402 26d6 0FB695C1 		movzbl	-4415(%rbp), %edx
+ 3402      EEFFFF
+ 3403 26dd 0FB6C0   		movzbl	%al, %eax
+ 3404 26e0 6689858E 		movw	%ax, -10354(%rbp)
+ 3404      D7FFFF
+ 3405 26e7 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 3405      D7FFFF
+ 3406 26ee F6F2     		divb	%dl
+ 3407 26f0 88851FD9 		movb	%al, -9953(%rbp)
+ 3407      FFFF
+ 3408 26f6 0FB685D2 		movzbl	-4398(%rbp), %eax
+ 3408      EEFFFF
+ 3409 26fd 0FB695C2 		movzbl	-4414(%rbp), %edx
+ 3409      EEFFFF
+ 3410 2704 0FB6C0   		movzbl	%al, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 135
+
+
+ 3411 2707 6689858E 		movw	%ax, -10354(%rbp)
+ 3411      D7FFFF
+ 3412 270e 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 3412      D7FFFF
+ 3413 2715 F6F2     		divb	%dl
+ 3414 2717 88851ED9 		movb	%al, -9954(%rbp)
+ 3414      FFFF
+ 3415 271d 0FB685D3 		movzbl	-4397(%rbp), %eax
+ 3415      EEFFFF
+ 3416 2724 0FB695C3 		movzbl	-4413(%rbp), %edx
+ 3416      EEFFFF
+ 3417 272b 0FB6C0   		movzbl	%al, %eax
+ 3418 272e 6689858E 		movw	%ax, -10354(%rbp)
+ 3418      D7FFFF
+ 3419 2735 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 3419      D7FFFF
+ 3420 273c F6F2     		divb	%dl
+ 3421 273e 88851DD9 		movb	%al, -9955(%rbp)
+ 3421      FFFF
+ 3422 2744 0FB685D4 		movzbl	-4396(%rbp), %eax
+ 3422      EEFFFF
+ 3423 274b 0FB695C4 		movzbl	-4412(%rbp), %edx
+ 3423      EEFFFF
+ 3424 2752 0FB6C0   		movzbl	%al, %eax
+ 3425 2755 6689858E 		movw	%ax, -10354(%rbp)
+ 3425      D7FFFF
+ 3426 275c 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 3426      D7FFFF
+ 3427 2763 F6F2     		divb	%dl
+ 3428 2765 88851CD9 		movb	%al, -9956(%rbp)
+ 3428      FFFF
+ 3429 276b 0FB685D5 		movzbl	-4395(%rbp), %eax
+ 3429      EEFFFF
+ 3430 2772 0FB695C5 		movzbl	-4411(%rbp), %edx
+ 3430      EEFFFF
+ 3431 2779 0FB6C0   		movzbl	%al, %eax
+ 3432 277c 6689858E 		movw	%ax, -10354(%rbp)
+ 3432      D7FFFF
+ 3433 2783 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 3433      D7FFFF
+ 3434 278a F6F2     		divb	%dl
+ 3435 278c 4189C1   		movl	%eax, %r9d
+ 3436 278f 0FB685D6 		movzbl	-4394(%rbp), %eax
+ 3436      EEFFFF
+ 3437 2796 0FB695C6 		movzbl	-4410(%rbp), %edx
+ 3437      EEFFFF
+ 3438 279d 0FB6C0   		movzbl	%al, %eax
+ 3439 27a0 6689858E 		movw	%ax, -10354(%rbp)
+ 3439      D7FFFF
+ 3440 27a7 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 3440      D7FFFF
+ 3441 27ae F6F2     		divb	%dl
+ 3442 27b0 89C7     		movl	%eax, %edi
+ 3443 27b2 0FB685D7 		movzbl	-4393(%rbp), %eax
+ 3443      EEFFFF
+ 3444 27b9 0FB695C7 		movzbl	-4409(%rbp), %edx
+ 3444      EEFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 136
+
+
+ 3445 27c0 0FB6C0   		movzbl	%al, %eax
+ 3446 27c3 6689858E 		movw	%ax, -10354(%rbp)
+ 3446      D7FFFF
+ 3447 27ca 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 3447      D7FFFF
+ 3448 27d1 F6F2     		divb	%dl
+ 3449 27d3 89C3     		movl	%eax, %ebx
+ 3450 27d5 0FB685D8 		movzbl	-4392(%rbp), %eax
+ 3450      EEFFFF
+ 3451 27dc 0FB695C8 		movzbl	-4408(%rbp), %edx
+ 3451      EEFFFF
+ 3452 27e3 0FB6C0   		movzbl	%al, %eax
+ 3453 27e6 6689858E 		movw	%ax, -10354(%rbp)
+ 3453      D7FFFF
+ 3454 27ed 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 3454      D7FFFF
+ 3455 27f4 F6F2     		divb	%dl
+ 3456 27f6 4189C2   		movl	%eax, %r10d
+ 3457 27f9 0FB685D9 		movzbl	-4391(%rbp), %eax
+ 3457      EEFFFF
+ 3458 2800 0FB695C9 		movzbl	-4407(%rbp), %edx
+ 3458      EEFFFF
+ 3459 2807 0FB6C0   		movzbl	%al, %eax
+ 3460 280a 6689858E 		movw	%ax, -10354(%rbp)
+ 3460      D7FFFF
+ 3461 2811 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 3461      D7FFFF
+ 3462 2818 F6F2     		divb	%dl
+ 3463 281a 4189C3   		movl	%eax, %r11d
+ 3464 281d 0FB685DA 		movzbl	-4390(%rbp), %eax
+ 3464      EEFFFF
+ 3465 2824 0FB695CA 		movzbl	-4406(%rbp), %edx
+ 3465      EEFFFF
+ 3466 282b 0FB6C0   		movzbl	%al, %eax
+ 3467 282e 6689858E 		movw	%ax, -10354(%rbp)
+ 3467      D7FFFF
+ 3468 2835 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 3468      D7FFFF
+ 3469 283c F6F2     		divb	%dl
+ 3470 283e 4189C4   		movl	%eax, %r12d
+ 3471 2841 0FB685DB 		movzbl	-4389(%rbp), %eax
+ 3471      EEFFFF
+ 3472 2848 0FB695CB 		movzbl	-4405(%rbp), %edx
+ 3472      EEFFFF
+ 3473 284f 0FB6C0   		movzbl	%al, %eax
+ 3474 2852 6689858E 		movw	%ax, -10354(%rbp)
+ 3474      D7FFFF
+ 3475 2859 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 3475      D7FFFF
+ 3476 2860 F6F2     		divb	%dl
+ 3477 2862 4189C5   		movl	%eax, %r13d
+ 3478 2865 0FB685DC 		movzbl	-4388(%rbp), %eax
+ 3478      EEFFFF
+ 3479 286c 0FB695CC 		movzbl	-4404(%rbp), %edx
+ 3479      EEFFFF
+ 3480 2873 0FB6C0   		movzbl	%al, %eax
+ 3481 2876 6689858E 		movw	%ax, -10354(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 137
+
+
+ 3481      D7FFFF
+ 3482 287d 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 3482      D7FFFF
+ 3483 2884 F6F2     		divb	%dl
+ 3484 2886 4189C6   		movl	%eax, %r14d
+ 3485 2889 0FB685DD 		movzbl	-4387(%rbp), %eax
+ 3485      EEFFFF
+ 3486 2890 0FB695CD 		movzbl	-4403(%rbp), %edx
+ 3486      EEFFFF
+ 3487 2897 0FB6C0   		movzbl	%al, %eax
+ 3488 289a 6689858E 		movw	%ax, -10354(%rbp)
+ 3488      D7FFFF
+ 3489 28a1 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 3489      D7FFFF
+ 3490 28a8 F6F2     		divb	%dl
+ 3491 28aa 4189C0   		movl	%eax, %r8d
+ 3492 28ad 0FB685DE 		movzbl	-4386(%rbp), %eax
+ 3492      EEFFFF
+ 3493 28b4 0FB695CE 		movzbl	-4402(%rbp), %edx
+ 3493      EEFFFF
+ 3494 28bb 0FB6C0   		movzbl	%al, %eax
+ 3495 28be 6689858E 		movw	%ax, -10354(%rbp)
+ 3495      D7FFFF
+ 3496 28c5 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 3496      D7FFFF
+ 3497 28cc F6F2     		divb	%dl
+ 3498 28ce 89C6     		movl	%eax, %esi
+ 3499 28d0 0FB685DF 		movzbl	-4385(%rbp), %eax
+ 3499      EEFFFF
+ 3500 28d7 0FB695CF 		movzbl	-4401(%rbp), %edx
+ 3500      EEFFFF
+ 3501 28de 0FB6C0   		movzbl	%al, %eax
+ 3502 28e1 6689858E 		movw	%ax, -10354(%rbp)
+ 3502      D7FFFF
+ 3503 28e8 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 3503      D7FFFF
+ 3504 28ef F6F2     		divb	%dl
+ 3505 28f1 89C1     		movl	%eax, %ecx
+ 3506              	.LBB589:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 3507              		.loc 2 346 0
+ 3508 28f3 0FB6D3   		movzbl	%bl, %edx
+ 3509 28f6 400FB6C7 		movzbl	%dil, %eax
+ 3510 28fa 48C1E208 		salq	$8, %rdx
+ 3511 28fe 4809C2   		orq	%rax, %rdx
+ 3512 2901 410FB6C1 		movzbl	%r9b, %eax
+ 3513 2905 48C1E208 		salq	$8, %rdx
+ 3514 2909 4809C2   		orq	%rax, %rdx
+ 3515 290c 0FB6851C 		movzbl	-9956(%rbp), %eax
+ 3515      D9FFFF
+ 3516 2913 48C1E208 		salq	$8, %rdx
+ 3517 2917 4809C2   		orq	%rax, %rdx
+ 3518 291a 0FB6851D 		movzbl	-9955(%rbp), %eax
+ 3518      D9FFFF
+ 3519 2921 48C1E208 		salq	$8, %rdx
+ 3520 2925 4809C2   		orq	%rax, %rdx
+ 3521 2928 0FB6851E 		movzbl	-9954(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 138
+
+
+ 3521      D9FFFF
+ 3522 292f 48C1E208 		salq	$8, %rdx
+ 3523 2933 4809C2   		orq	%rax, %rdx
+ 3524 2936 0FB6851F 		movzbl	-9953(%rbp), %eax
+ 3524      D9FFFF
+ 3525 293d 48C1E208 		salq	$8, %rdx
+ 3526 2941 4809C2   		orq	%rax, %rdx
+ 3527 2944 410FB6C7 		movzbl	%r15b, %eax
+ 3528 2948 48C1E208 		salq	$8, %rdx
+ 3529 294c 4809C2   		orq	%rax, %rdx
+ 3530 294f 0FB6C1   		movzbl	%cl, %eax
+ 3531 2952 400FB6CE 		movzbl	%sil, %ecx
+ 3532 2956 48C1E008 		salq	$8, %rax
+ 3533 295a 4809C8   		orq	%rcx, %rax
+ 3534 295d 410FB6C8 		movzbl	%r8b, %ecx
+ 3535 2961 48C1E008 		salq	$8, %rax
+ 3536 2965 4809C8   		orq	%rcx, %rax
+ 3537 2968 410FB6CE 		movzbl	%r14b, %ecx
+ 3538 296c 48C1E008 		salq	$8, %rax
+ 3539 2970 4809C8   		orq	%rcx, %rax
+ 3540 2973 410FB6CD 		movzbl	%r13b, %ecx
+ 3541 2977 48C1E008 		salq	$8, %rax
+ 3542 297b 4809C8   		orq	%rcx, %rax
+ 3543 297e 410FB6CC 		movzbl	%r12b, %ecx
+ 3544 2982 48C1E008 		salq	$8, %rax
+ 3545 2986 4809C8   		orq	%rcx, %rax
+ 3546 2989 410FB6CB 		movzbl	%r11b, %ecx
+ 3547 298d 48C1E008 		salq	$8, %rax
+ 3548 2991 4809C8   		orq	%rcx, %rax
+ 3549 2994 410FB6CA 		movzbl	%r10b, %ecx
+ 3550 2998 48C1E008 		salq	$8, %rax
+ 3551 299c 4809C8   		orq	%rcx, %rax
+ 3552 299f 488995F0 		movq	%rdx, -10256(%rbp)
+ 3552      D7FFFF
+ 3553 29a6 488985F8 		movq	%rax, -10248(%rbp)
+ 3553      D7FFFF
+ 3554 29ad 660F6F85 		movdqa	-10256(%rbp), %xmm0
+ 3554      F0D7FFFF 
+ 3555              	.LBE589:
+ 3556              	.LBE588:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 3557              		.loc 2 862 0
+ 3558 29b5 F30F7F85 		movdqu	%xmm0, -4480(%rbp)
+ 3558      80EEFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 3559              		.loc 2 866 0
+ 3560 29bd C7855CEE 		movl	$0, -4516(%rbp)
+ 3560      FFFF0000 
+ 3560      0000
+ 3561 29c7 E9860200 		jmp	.L70
+ 3561      00
+ 3562              	.L79:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 3563              		.loc 2 868 0
+ 3564 29cc 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 3564      00000000 
+ 3565 29d4 F30F7F85 		movdqu	%xmm0, -4368(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 139
+
+
+ 3565      F0EEFFFF 
+ 3566 29dc F30F6F85 		movdqu	-4480(%rbp), %xmm0
+ 3566      80EEFFFF 
+ 3567 29e4 F30F7F85 		movdqu	%xmm0, -4384(%rbp)
+ 3567      E0EEFFFF 
+ 3568              	.LBB590:
+ 3569              	.LBB591:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 3570              		.loc 2 380 0
+ 3571 29ec F30F6F85 		movdqu	-4368(%rbp), %xmm0
+ 3571      F0EEFFFF 
+ 3572 29f4 F30F7F85 		movdqu	%xmm0, -8560(%rbp)
+ 3572      90DEFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 3573              		.loc 2 381 0
+ 3574 29fc F30F6F85 		movdqu	-4384(%rbp), %xmm0
+ 3574      E0EEFFFF 
+ 3575 2a04 F30F7F85 		movdqu	%xmm0, -8576(%rbp)
+ 3575      80DEFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 3576              		.loc 2 383 0
+ 3577 2a0c C7850CEF 		movl	$0, -4340(%rbp)
+ 3577      FFFF0000 
+ 3577      0000
+ 3578 2a16 EB5C     		jmp	.L71
+ 3579              	.L74:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 3580              		.loc 2 385 0
+ 3581 2a18 8B850CEF 		movl	-4340(%rbp), %eax
+ 3581      FFFF
+ 3582 2a1e 89C0     		mov	%eax, %eax
+ 3583 2a20 0FB68405 		movzbl	-8576(%rbp,%rax), %eax
+ 3583      80DEFFFF 
+ 3584 2a28 84C0     		testb	%al, %al
+ 3585 2a2a 7912     		jns	.L72
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 3586              		.loc 2 386 0
+ 3587 2a2c 8B850CEF 		movl	-4340(%rbp), %eax
+ 3587      FFFF
+ 3588 2a32 89C0     		mov	%eax, %eax
+ 3589 2a34 C68405A0 		movb	$0, -8544(%rbp,%rax)
+ 3589      DEFFFF00 
+ 3590 2a3c EB2F     		jmp	.L73
+ 3591              	.L72:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 3592              		.loc 2 388 0
+ 3593 2a3e 8B8D0CEF 		movl	-4340(%rbp), %ecx
+ 3593      FFFF
+ 3594 2a44 8B850CEF 		movl	-4340(%rbp), %eax
+ 3594      FFFF
+ 3595 2a4a 89C0     		mov	%eax, %eax
+ 3596 2a4c 0FB68405 		movzbl	-8576(%rbp,%rax), %eax
+ 3596      80DEFFFF 
+ 3597 2a54 0FB6C0   		movzbl	%al, %eax
+ 3598 2a57 83E00F   		andl	$15, %eax
+ 3599 2a5a 4898     		cltq
+ 3600 2a5c 0FB69405 		movzbl	-8560(%rbp,%rax), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 140
+
+
+ 3600      90DEFFFF 
+ 3601 2a64 89C8     		mov	%ecx, %eax
+ 3602 2a66 889405A0 		movb	%dl, -8544(%rbp,%rax)
+ 3602      DEFFFF
+ 3603              	.L73:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 3604              		.loc 2 383 0
+ 3605 2a6d 83850CEF 		addl	$1, -4340(%rbp)
+ 3605      FFFF01
+ 3606              	.L71:
+ 3607 2a74 83BD0CEF 		cmpl	$15, -4340(%rbp)
+ 3607      FFFF0F
+ 3608 2a7b 769B     		jbe	.L74
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 3609              		.loc 2 391 0
+ 3610 2a7d F30F6F85 		movdqu	-8544(%rbp), %xmm0
+ 3610      A0DEFFFF 
+ 3611              	.LBE591:
+ 3612              	.LBE590:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 3613              		.loc 2 868 0
+ 3614 2a85 F30F7F85 		movdqu	%xmm0, -4496(%rbp)
+ 3614      70EEFFFF 
+ 3615 2a8d F30F6F85 		movdqu	-4464(%rbp), %xmm0
+ 3615      90EEFFFF 
+ 3616 2a95 F30F7F85 		movdqu	%xmm0, -4320(%rbp)
+ 3616      20EFFFFF 
+ 3617 2a9d F30F6F85 		movdqu	-4496(%rbp), %xmm0
+ 3617      70EEFFFF 
+ 3618 2aa5 F30F7F85 		movdqu	%xmm0, -4336(%rbp)
+ 3618      10EFFFFF 
+ 3619              	.LBB592:
+ 3620              	.LBB593:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 3621              		.loc 2 234 0
+ 3622 2aad F30F6F85 		movdqu	-4336(%rbp), %xmm0
+ 3622      10EFFFFF 
+ 3623 2ab5 F30F6F8D 		movdqu	-4320(%rbp), %xmm1
+ 3623      20EFFFFF 
+ 3624 2abd 660FEBC1 		por	%xmm1, %xmm0
+ 3625              	.LBE593:
+ 3626              	.LBE592:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 3627              		.loc 2 870 0
+ 3628 2ac1 F30F7F85 		movdqu	%xmm0, -4496(%rbp)
+ 3628      70EEFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 3629              		.loc 2 872 0
+ 3630 2ac9 8B855CEE 		mov	-4516(%rbp), %eax
+ 3630      FFFF
+ 3631 2acf 48C1E004 		salq	$4, %rax
+ 3632 2ad3 48038538 		addq	-4552(%rbp), %rax
+ 3632      EEFFFF
+ 3633 2ada 660F6F00 		movdqa	(%rax), %xmm0
+ 3634 2ade F30F7F85 		movdqu	%xmm0, -4288(%rbp)
+ 3634      40EFFFFF 
+ 3635 2ae6 F30F6F85 		movdqu	-4496(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 141
+
+
+ 3635      70EEFFFF 
+ 3636 2aee F30F7F85 		movdqu	%xmm0, -4304(%rbp)
+ 3636      30EFFFFF 
+ 3637              	.LBB594:
+ 3638              	.LBB595:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 3639              		.loc 2 380 0
+ 3640 2af6 F30F6F85 		movdqu	-4288(%rbp), %xmm0
+ 3640      40EFFFFF 
+ 3641 2afe F30F7F85 		movdqu	%xmm0, -8512(%rbp)
+ 3641      C0DEFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 3642              		.loc 2 381 0
+ 3643 2b06 F30F6F85 		movdqu	-4304(%rbp), %xmm0
+ 3643      30EFFFFF 
+ 3644 2b0e F30F7F85 		movdqu	%xmm0, -8528(%rbp)
+ 3644      B0DEFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 3645              		.loc 2 383 0
+ 3646 2b16 C7855CEF 		movl	$0, -4260(%rbp)
+ 3646      FFFF0000 
+ 3646      0000
+ 3647 2b20 EB5C     		jmp	.L75
+ 3648              	.L78:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 3649              		.loc 2 385 0
+ 3650 2b22 8B855CEF 		movl	-4260(%rbp), %eax
+ 3650      FFFF
+ 3651 2b28 89C0     		mov	%eax, %eax
+ 3652 2b2a 0FB68405 		movzbl	-8528(%rbp,%rax), %eax
+ 3652      B0DEFFFF 
+ 3653 2b32 84C0     		testb	%al, %al
+ 3654 2b34 7912     		jns	.L76
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 3655              		.loc 2 386 0
+ 3656 2b36 8B855CEF 		movl	-4260(%rbp), %eax
+ 3656      FFFF
+ 3657 2b3c 89C0     		mov	%eax, %eax
+ 3658 2b3e C68405D0 		movb	$0, -8496(%rbp,%rax)
+ 3658      DEFFFF00 
+ 3659 2b46 EB2F     		jmp	.L77
+ 3660              	.L76:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 3661              		.loc 2 388 0
+ 3662 2b48 8B8D5CEF 		movl	-4260(%rbp), %ecx
+ 3662      FFFF
+ 3663 2b4e 8B855CEF 		movl	-4260(%rbp), %eax
+ 3663      FFFF
+ 3664 2b54 89C0     		mov	%eax, %eax
+ 3665 2b56 0FB68405 		movzbl	-8528(%rbp,%rax), %eax
+ 3665      B0DEFFFF 
+ 3666 2b5e 0FB6C0   		movzbl	%al, %eax
+ 3667 2b61 83E00F   		andl	$15, %eax
+ 3668 2b64 4898     		cltq
+ 3669 2b66 0FB69405 		movzbl	-8512(%rbp,%rax), %edx
+ 3669      C0DEFFFF 
+ 3670 2b6e 89C8     		mov	%ecx, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 142
+
+
+ 3671 2b70 889405D0 		movb	%dl, -8496(%rbp,%rax)
+ 3671      DEFFFF
+ 3672              	.L77:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 3673              		.loc 2 383 0
+ 3674 2b77 83855CEF 		addl	$1, -4260(%rbp)
+ 3674      FFFF01
+ 3675              	.L75:
+ 3676 2b7e 83BD5CEF 		cmpl	$15, -4260(%rbp)
+ 3676      FFFF0F
+ 3677 2b85 769B     		jbe	.L78
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 3678              		.loc 2 391 0
+ 3679 2b87 F30F6F85 		movdqu	-8496(%rbp), %xmm0
+ 3679      D0DEFFFF 
+ 3680              	.LBE595:
+ 3681              	.LBE594:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 3682              		.loc 2 872 0
+ 3683 2b8f F30F7F85 		movdqu	%xmm0, -4496(%rbp)
+ 3683      70EEFFFF 
+ 3684 2b97 F30F6F85 		movdqu	-4512(%rbp), %xmm0
+ 3684      60EEFFFF 
+ 3685 2b9f F30F7F85 		movdqu	%xmm0, -4240(%rbp)
+ 3685      70EFFFFF 
+ 3686 2ba7 F30F6F85 		movdqu	-4496(%rbp), %xmm0
+ 3686      70EEFFFF 
+ 3687 2baf F30F7F85 		movdqu	%xmm0, -4256(%rbp)
+ 3687      60EFFFFF 
+ 3688              	.LBB596:
+ 3689              	.LBB597:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 3690              		.loc 2 234 0
+ 3691 2bb7 F30F6F85 		movdqu	-4256(%rbp), %xmm0
+ 3691      60EFFFFF 
+ 3692 2bbf F30F6F8D 		movdqu	-4240(%rbp), %xmm1
+ 3692      70EFFFFF 
+ 3693 2bc7 660FEBC1 		por	%xmm1, %xmm0
+ 3694              	.LBE597:
+ 3695              	.LBE596:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 3696              		.loc 2 874 0
+ 3697 2bcb F30F7F85 		movdqu	%xmm0, -4512(%rbp)
+ 3697      60EEFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 3698              		.loc 2 876 0
+ 3699 2bd3 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 3699      00000000 
+ 3700 2bdb F30F6F8D 		movdqu	-4480(%rbp), %xmm1
+ 3700      80EEFFFF 
+ 3701 2be3 F30F7F8D 		movdqu	%xmm1, -4208(%rbp)
+ 3701      90EFFFFF 
+ 3702 2beb F30F7F85 		movdqu	%xmm0, -4224(%rbp)
+ 3702      80EFFFFF 
+ 3703              	.LBB598:
+ 3704              	.LBB599:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 143
+
+
+ 3705              		.loc 2 290 0
+ 3706 2bf3 F30F6F8D 		movdqu	-4224(%rbp), %xmm1
+ 3706      80EFFFFF 
+ 3707 2bfb F30F6F85 		movdqu	-4208(%rbp), %xmm0
+ 3707      90EFFFFF 
+ 3708 2c03 660FF8C1 		psubb	%xmm1, %xmm0
+ 3709              	.LBE599:
+ 3710              	.LBE598:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 3711              		.loc 2 876 0
+ 3712 2c07 F30F7F85 		movdqu	%xmm0, -4480(%rbp)
+ 3712      80EEFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 3713              		.loc 2 878 0
+ 3714 2c0f 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 3714      00000000 
+ 3715 2c17 F30F6F8D 		movdqu	-4480(%rbp), %xmm1
+ 3715      80EEFFFF 
+ 3716 2c1f F30F7F8D 		movdqu	%xmm1, -4176(%rbp)
+ 3716      B0EFFFFF 
+ 3717 2c27 F30F7F85 		movdqu	%xmm0, -4192(%rbp)
+ 3717      A0EFFFFF 
+ 3718              	.LBB600:
+ 3719              	.LBB601:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 3720              		.loc 2 206 0
+ 3721 2c2f F30F6F85 		movdqu	-4192(%rbp), %xmm0
+ 3721      A0EFFFFF 
+ 3722 2c37 F30F6F8D 		movdqu	-4176(%rbp), %xmm1
+ 3722      B0EFFFFF 
+ 3723 2c3f 660FDBC1 		pand	%xmm1, %xmm0
+ 3724              	.LBE601:
+ 3725              	.LBE600:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 3726              		.loc 2 878 0
+ 3727 2c43 F30F7F85 		movdqu	%xmm0, -4480(%rbp)
+ 3727      80EEFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 3728              		.loc 2 866 0
+ 3729 2c4b 83855CEE 		addl	$1, -4516(%rbp)
+ 3729      FFFF01
+ 3730              	.L70:
+ 3731 2c52 83BD5CEE 		cmpl	$15, -4516(%rbp)
+ 3731      FFFF0F
+ 3732 2c59 0F866DFD 		jbe	.L79
+ 3732      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 3733              		.loc 2 882 0
+ 3734 2c5f F30F6F85 		movdqu	-4512(%rbp), %xmm0
+ 3734      60EEFFFF 
+ 3735              	.LBE585:
+ 3736              	.LBE584:
+ 3737              	.LBE583:
+ 3738              	.LBE582:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 3739              		.loc 2 1682 0
+ 3740 2c67 660F7F85 		movdqa	%xmm0, -10000(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 144
+
+
+ 3740      F0D8FFFF 
+ 3741              	.LBB602:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 3742              		.loc 2 1683 0
+ 3743 2c6f 660F6F85 		movdqa	-10000(%rbp), %xmm0
+ 3743      F0D8FFFF 
+ 3744 2c77 F30F7F85 		movdqu	%xmm0, -8608(%rbp)
+ 3744      60DEFFFF 
+ 3745 2c7f E8000000 		call	KDbgWriterGet at PLT
+ 3745      00
+ 3746 2c84 4885C0   		testq	%rax, %rax
+ 3747 2c87 7479     		je	.L81
+ 3748 2c89 BF010000 		movl	$1, %edi
+ 3748      00
+ 3749 2c8e E8000000 		call	KDbgCondToFlag at PLT
+ 3749      00
+ 3750 2c93 4889C6   		movq	%rax, %rsi
+ 3751 2c96 BF100000 		movl	$16, %edi
+ 3751      00
+ 3752 2c9b E8000000 		call	KDbgTestModConds at PLT
+ 3752      00
+ 3753 2ca0 84C0     		testb	%al, %al
+ 3754 2ca2 745E     		je	.L81
+ 3755 2ca4 8B856CDE 		movl	-8596(%rbp), %eax
+ 3755      FFFF
+ 3756 2caa 89C7     		movl	%eax, %edi
+ 3757 2cac E84FD3FF 		call	bswap_32
+ 3757      FF
+ 3758 2cb1 4189C5   		movl	%eax, %r13d
+ 3759 2cb4 8B8568DE 		movl	-8600(%rbp), %eax
+ 3759      FFFF
+ 3760 2cba 89C7     		movl	%eax, %edi
+ 3761 2cbc E83FD3FF 		call	bswap_32
+ 3761      FF
+ 3762 2cc1 4189C4   		movl	%eax, %r12d
+ 3763 2cc4 8B8564DE 		movl	-8604(%rbp), %eax
+ 3763      FFFF
+ 3764 2cca 89C7     		movl	%eax, %edi
+ 3765 2ccc E82FD3FF 		call	bswap_32
+ 3765      FF
+ 3766 2cd1 89C3     		movl	%eax, %ebx
+ 3767 2cd3 8B8560DE 		movl	-8608(%rbp), %eax
+ 3767      FFFF
+ 3768 2cd9 89C7     		movl	%eax, %edi
+ 3769 2cdb E820D3FF 		call	bswap_32
+ 3769      FF
+ 3770 2ce0 4589E9   		movl	%r13d, %r9d
+ 3771 2ce3 4589E0   		movl	%r12d, %r8d
+ 3772 2ce6 89D9     		movl	%ebx, %ecx
+ 3773 2ce8 89C2     		movl	%eax, %edx
+ 3774 2cea 488D3500 		leaq	.LC0(%rip), %rsi
+ 3774      000000
+ 3775 2cf1 488D3D00 		leaq	.LC1(%rip), %rdi
+ 3775      000000
+ 3776 2cf8 B8000000 		movl	$0, %eax
+ 3776      00
+ 3777 2cfd E8000000 		call	KDbgMsg at PLT
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 145
+
+
+ 3777      00
+ 3778              	.L81:
+ 3779 2d02 660F6F85 		movdqa	-10000(%rbp), %xmm0
+ 3779      F0D8FFFF 
+ 3780 2d0a F30F7F85 		movdqu	%xmm0, -4160(%rbp)
+ 3780      C0EFFFFF 
+ 3781              	.LBE602:
+ 3782              	.LBB603:
+ 3783              	.LBB604:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 3784              		.loc 2 667 0
+ 3785 2d12 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 3785      00000000 
+ 3786 2d1a F30F6F8D 		movdqu	-4160(%rbp), %xmm1
+ 3786      C0EFFFFF 
+ 3787 2d22 F30F7F8D 		movdqu	%xmm1, -4128(%rbp)
+ 3787      E0EFFFFF 
+ 3788 2d2a F30F7F85 		movdqu	%xmm0, -4144(%rbp)
+ 3788      D0EFFFFF 
+ 3789              	.LBB605:
+ 3790              	.LBB606:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 3791              		.loc 2 380 0
+ 3792 2d32 F30F6F85 		movdqu	-4128(%rbp), %xmm0
+ 3792      E0EFFFFF 
+ 3793 2d3a F30F7F85 		movdqu	%xmm0, -8464(%rbp)
+ 3793      F0DEFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 3794              		.loc 2 381 0
+ 3795 2d42 F30F6F85 		movdqu	-4144(%rbp), %xmm0
+ 3795      D0EFFFFF 
+ 3796 2d4a F30F7F85 		movdqu	%xmm0, -8480(%rbp)
+ 3796      E0DEFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 3797              		.loc 2 383 0
+ 3798 2d52 C785FCEF 		movl	$0, -4100(%rbp)
+ 3798      FFFF0000 
+ 3798      0000
+ 3799 2d5c EB5C     		jmp	.L82
+ 3800              	.L85:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 3801              		.loc 2 385 0
+ 3802 2d5e 8B85FCEF 		movl	-4100(%rbp), %eax
+ 3802      FFFF
+ 3803 2d64 89C0     		mov	%eax, %eax
+ 3804 2d66 0FB68405 		movzbl	-8480(%rbp,%rax), %eax
+ 3804      E0DEFFFF 
+ 3805 2d6e 84C0     		testb	%al, %al
+ 3806 2d70 7912     		jns	.L83
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 3807              		.loc 2 386 0
+ 3808 2d72 8B85FCEF 		movl	-4100(%rbp), %eax
+ 3808      FFFF
+ 3809 2d78 89C0     		mov	%eax, %eax
+ 3810 2d7a C6840500 		movb	$0, -8448(%rbp,%rax)
+ 3810      DFFFFF00 
+ 3811 2d82 EB2F     		jmp	.L84
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 146
+
+
+ 3812              	.L83:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 3813              		.loc 2 388 0
+ 3814 2d84 8B8DFCEF 		movl	-4100(%rbp), %ecx
+ 3814      FFFF
+ 3815 2d8a 8B85FCEF 		movl	-4100(%rbp), %eax
+ 3815      FFFF
+ 3816 2d90 89C0     		mov	%eax, %eax
+ 3817 2d92 0FB68405 		movzbl	-8480(%rbp,%rax), %eax
+ 3817      E0DEFFFF 
+ 3818 2d9a 0FB6C0   		movzbl	%al, %eax
+ 3819 2d9d 83E00F   		andl	$15, %eax
+ 3820 2da0 4898     		cltq
+ 3821 2da2 0FB69405 		movzbl	-8464(%rbp,%rax), %edx
+ 3821      F0DEFFFF 
+ 3822 2daa 89C8     		mov	%ecx, %eax
+ 3823 2dac 88940500 		movb	%dl, -8448(%rbp,%rax)
+ 3823      DFFFFF
+ 3824              	.L84:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 3825              		.loc 2 383 0
+ 3826 2db3 8385FCEF 		addl	$1, -4100(%rbp)
+ 3826      FFFF01
+ 3827              	.L82:
+ 3828 2dba 83BDFCEF 		cmpl	$15, -4100(%rbp)
+ 3828      FFFF0F
+ 3829 2dc1 769B     		jbe	.L85
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 3830              		.loc 2 391 0
+ 3831 2dc3 F30F6F85 		movdqu	-8448(%rbp), %xmm0
+ 3831      00DFFFFF 
+ 3832              	.LBE606:
+ 3833              	.LBE605:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 3834              		.loc 2 667 0
+ 3835 2dcb F30F7F85 		movdqu	%xmm0, -4160(%rbp)
+ 3835      C0EFFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 3836              		.loc 2 668 0
+ 3837 2dd3 F30F6F85 		movdqu	-4160(%rbp), %xmm0
+ 3837      C0EFFFFF 
+ 3838              	.LBE604:
+ 3839              	.LBE603:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 3840              		.loc 2 1684 0
+ 3841 2ddb 660F7F85 		movdqa	%xmm0, -10000(%rbp)
+ 3841      F0D8FFFF 
+ 3842              	.LBB607:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 3843              		.loc 2 1685 0
+ 3844 2de3 660F6F85 		movdqa	-10000(%rbp), %xmm0
+ 3844      F0D8FFFF 
+ 3845 2deb F30F7F85 		movdqu	%xmm0, -8624(%rbp)
+ 3845      50DEFFFF 
+ 3846 2df3 E8000000 		call	KDbgWriterGet at PLT
+ 3846      00
+ 3847 2df8 4885C0   		testq	%rax, %rax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 147
+
+
+ 3848 2dfb 7479     		je	.L87
+ 3849 2dfd BF010000 		movl	$1, %edi
+ 3849      00
+ 3850 2e02 E8000000 		call	KDbgCondToFlag at PLT
+ 3850      00
+ 3851 2e07 4889C6   		movq	%rax, %rsi
+ 3852 2e0a BF100000 		movl	$16, %edi
+ 3852      00
+ 3853 2e0f E8000000 		call	KDbgTestModConds at PLT
+ 3853      00
+ 3854 2e14 84C0     		testb	%al, %al
+ 3855 2e16 745E     		je	.L87
+ 3856 2e18 8B855CDE 		movl	-8612(%rbp), %eax
+ 3856      FFFF
+ 3857 2e1e 89C7     		movl	%eax, %edi
+ 3858 2e20 E8DBD1FF 		call	bswap_32
+ 3858      FF
+ 3859 2e25 4189C5   		movl	%eax, %r13d
+ 3860 2e28 8B8558DE 		movl	-8616(%rbp), %eax
+ 3860      FFFF
+ 3861 2e2e 89C7     		movl	%eax, %edi
+ 3862 2e30 E8CBD1FF 		call	bswap_32
+ 3862      FF
+ 3863 2e35 4189C4   		movl	%eax, %r12d
+ 3864 2e38 8B8554DE 		movl	-8620(%rbp), %eax
+ 3864      FFFF
+ 3865 2e3e 89C7     		movl	%eax, %edi
+ 3866 2e40 E8BBD1FF 		call	bswap_32
+ 3866      FF
+ 3867 2e45 89C3     		movl	%eax, %ebx
+ 3868 2e47 8B8550DE 		movl	-8624(%rbp), %eax
+ 3868      FFFF
+ 3869 2e4d 89C7     		movl	%eax, %edi
+ 3870 2e4f E8ACD1FF 		call	bswap_32
+ 3870      FF
+ 3871 2e54 4589E9   		movl	%r13d, %r9d
+ 3872 2e57 4589E0   		movl	%r12d, %r8d
+ 3873 2e5a 89D9     		movl	%ebx, %ecx
+ 3874 2e5c 89C2     		movl	%eax, %edx
+ 3875 2e5e 488D3500 		leaq	.LC2(%rip), %rsi
+ 3875      000000
+ 3876 2e65 488D3D00 		leaq	.LC1(%rip), %rdi
+ 3876      000000
+ 3877 2e6c B8000000 		movl	$0, %eax
+ 3877      00
+ 3878 2e71 E8000000 		call	KDbgMsg at PLT
+ 3878      00
+ 3879              	.L87:
+ 3880 2e76 660F6F85 		movdqa	-10000(%rbp), %xmm0
+ 3880      F0D8FFFF 
+ 3881 2e7e F30F7F85 		movdqu	%xmm0, -4080(%rbp)
+ 3881      10F0FFFF 
+ 3882 2e86 660F6F85 		movdqa	-9984(%rbp), %xmm0
+ 3882      00D9FFFF 
+ 3883 2e8e F30F7F85 		movdqu	%xmm0, -4096(%rbp)
+ 3883      00F0FFFF 
+ 3884              	.LBE607:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 148
+
+
+ 3885              	.LBB608:
+ 3886              	.LBB609:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 3887              		.loc 2 178 0
+ 3888 2e96 F30F6F85 		movdqu	-4096(%rbp), %xmm0
+ 3888      00F0FFFF 
+ 3889 2e9e F30F6F8D 		movdqu	-4080(%rbp), %xmm1
+ 3889      10F0FFFF 
+ 3890 2ea6 660FEFC1 		pxor	%xmm1, %xmm0
+ 3891              	.LBE609:
+ 3892              	.LBE608:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 3893              		.loc 2 1686 0
+ 3894 2eaa 660F7F85 		movdqa	%xmm0, -10000(%rbp)
+ 3894      F0D8FFFF 
+ 3895              	.LBB610:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 3896              		.loc 2 1687 0
+ 3897 2eb2 660F6F85 		movdqa	-10000(%rbp), %xmm0
+ 3897      F0D8FFFF 
+ 3898 2eba F30F7F85 		movdqu	%xmm0, -8640(%rbp)
+ 3898      40DEFFFF 
+ 3899 2ec2 E8000000 		call	KDbgWriterGet at PLT
+ 3899      00
+ 3900 2ec7 4885C0   		testq	%rax, %rax
+ 3901 2eca 7479     		je	.L89
+ 3902 2ecc BF010000 		movl	$1, %edi
+ 3902      00
+ 3903 2ed1 E8000000 		call	KDbgCondToFlag at PLT
+ 3903      00
+ 3904 2ed6 4889C6   		movq	%rax, %rsi
+ 3905 2ed9 BF100000 		movl	$16, %edi
+ 3905      00
+ 3906 2ede E8000000 		call	KDbgTestModConds at PLT
+ 3906      00
+ 3907 2ee3 84C0     		testb	%al, %al
+ 3908 2ee5 745E     		je	.L89
+ 3909 2ee7 8B854CDE 		movl	-8628(%rbp), %eax
+ 3909      FFFF
+ 3910 2eed 89C7     		movl	%eax, %edi
+ 3911 2eef E80CD1FF 		call	bswap_32
+ 3911      FF
+ 3912 2ef4 4189C5   		movl	%eax, %r13d
+ 3913 2ef7 8B8548DE 		movl	-8632(%rbp), %eax
+ 3913      FFFF
+ 3914 2efd 89C7     		movl	%eax, %edi
+ 3915 2eff E8FCD0FF 		call	bswap_32
+ 3915      FF
+ 3916 2f04 4189C4   		movl	%eax, %r12d
+ 3917 2f07 8B8544DE 		movl	-8636(%rbp), %eax
+ 3917      FFFF
+ 3918 2f0d 89C7     		movl	%eax, %edi
+ 3919 2f0f E8ECD0FF 		call	bswap_32
+ 3919      FF
+ 3920 2f14 89C3     		movl	%eax, %ebx
+ 3921 2f16 8B8540DE 		movl	-8640(%rbp), %eax
+ 3921      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 149
+
+
+ 3922 2f1c 89C7     		movl	%eax, %edi
+ 3923 2f1e E8DDD0FF 		call	bswap_32
+ 3923      FF
+ 3924 2f23 4589E9   		movl	%r13d, %r9d
+ 3925 2f26 4589E0   		movl	%r12d, %r8d
+ 3926 2f29 89D9     		movl	%ebx, %ecx
+ 3927 2f2b 89C2     		movl	%eax, %edx
+ 3928 2f2d 488D3500 		leaq	.LC3(%rip), %rsi
+ 3928      000000
+ 3929 2f34 488D3D00 		leaq	.LC1(%rip), %rdi
+ 3929      000000
+ 3930 2f3b B8000000 		movl	$0, %eax
+ 3930      00
+ 3931 2f40 E8000000 		call	KDbgMsg at PLT
+ 3931      00
+ 3932              	.L89:
+ 3933 2f45 660F6F85 		movdqa	-10000(%rbp), %xmm0
+ 3933      F0D8FFFF 
+ 3934 2f4d F30F7F85 		movdqu	%xmm0, -4064(%rbp)
+ 3934      20F0FFFF 
+ 3935              	.LBE610:
+ 3936              	.LBB611:
+ 3937              	.LBB612:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 3938              		.loc 2 1357 0
+ 3939 2f55 F30F6F85 		movdqu	-4064(%rbp), %xmm0
+ 3939      20F0FFFF 
+ 3940 2f5d F30F7F85 		movdqu	%xmm0, -8432(%rbp)
+ 3940      10DFFFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 3941              		.loc 2 1358 0
+ 3942 2f65 8B851CDF 		movl	-8420(%rbp), %eax
+ 3942      FFFF
+ 3943 2f6b 898518DF 		movl	%eax, -8424(%rbp)
+ 3943      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 3944              		.loc 2 1359 0
+ 3945 2f71 8B851CDF 		movl	-8420(%rbp), %eax
+ 3945      FFFF
+ 3946 2f77 898514DF 		movl	%eax, -8428(%rbp)
+ 3946      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 3947              		.loc 2 1360 0
+ 3948 2f7d 8B851CDF 		movl	-8420(%rbp), %eax
+ 3948      FFFF
+ 3949 2f83 898510DF 		movl	%eax, -8432(%rbp)
+ 3949      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 3950              		.loc 2 1361 0
+ 3951 2f89 F30F6F85 		movdqu	-8432(%rbp), %xmm0
+ 3951      10DFFFFF 
+ 3952              	.LBE612:
+ 3953              	.LBE611:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 3954              		.loc 2 1688 0
+ 3955 2f91 660F7F85 		movdqa	%xmm0, -10000(%rbp)
+ 3955      F0D8FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 150
+
+
+ 3956              	.LBB613:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 3957              		.loc 2 1689 0
+ 3958 2f99 660F6F85 		movdqa	-10000(%rbp), %xmm0
+ 3958      F0D8FFFF 
+ 3959 2fa1 F30F7F85 		movdqu	%xmm0, -8656(%rbp)
+ 3959      30DEFFFF 
+ 3960 2fa9 E8000000 		call	KDbgWriterGet at PLT
+ 3960      00
+ 3961 2fae 4885C0   		testq	%rax, %rax
+ 3962 2fb1 7479     		je	.L91
+ 3963 2fb3 BF010000 		movl	$1, %edi
+ 3963      00
+ 3964 2fb8 E8000000 		call	KDbgCondToFlag at PLT
+ 3964      00
+ 3965 2fbd 4889C6   		movq	%rax, %rsi
+ 3966 2fc0 BF100000 		movl	$16, %edi
+ 3966      00
+ 3967 2fc5 E8000000 		call	KDbgTestModConds at PLT
+ 3967      00
+ 3968 2fca 84C0     		testb	%al, %al
+ 3969 2fcc 745E     		je	.L91
+ 3970 2fce 8B853CDE 		movl	-8644(%rbp), %eax
+ 3970      FFFF
+ 3971 2fd4 89C7     		movl	%eax, %edi
+ 3972 2fd6 E825D0FF 		call	bswap_32
+ 3972      FF
+ 3973 2fdb 4189C5   		movl	%eax, %r13d
+ 3974 2fde 8B8538DE 		movl	-8648(%rbp), %eax
+ 3974      FFFF
+ 3975 2fe4 89C7     		movl	%eax, %edi
+ 3976 2fe6 E815D0FF 		call	bswap_32
+ 3976      FF
+ 3977 2feb 4189C4   		movl	%eax, %r12d
+ 3978 2fee 8B8534DE 		movl	-8652(%rbp), %eax
+ 3978      FFFF
+ 3979 2ff4 89C7     		movl	%eax, %edi
+ 3980 2ff6 E805D0FF 		call	bswap_32
+ 3980      FF
+ 3981 2ffb 89C3     		movl	%eax, %ebx
+ 3982 2ffd 8B8530DE 		movl	-8656(%rbp), %eax
+ 3982      FFFF
+ 3983 3003 89C7     		movl	%eax, %edi
+ 3984 3005 E8F6CFFF 		call	bswap_32
+ 3984      FF
+ 3985 300a 4589E9   		movl	%r13d, %r9d
+ 3986 300d 4589E0   		movl	%r12d, %r8d
+ 3987 3010 89D9     		movl	%ebx, %ecx
+ 3988 3012 89C2     		movl	%eax, %edx
+ 3989 3014 488D3500 		leaq	.LC4(%rip), %rsi
+ 3989      000000
+ 3990 301b 488D3D00 		leaq	.LC1(%rip), %rdi
+ 3990      000000
+ 3991 3022 B8000000 		movl	$0, %eax
+ 3991      00
+ 3992 3027 E8000000 		call	KDbgMsg at PLT
+ 3992      00
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 151
+
+
+ 3993              	.L91:
+ 3994              	.LBE613:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 3995              		.loc 2 1690 0
+ 3996 302c 660F6F85 		movdqa	-10000(%rbp), %xmm0
+ 3996      F0D8FFFF 
+ 3997              	.LBE579:
+ 3998              	.LBE578:
+1747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x08,4);
+ 3999              		.loc 2 1747 0
+ 4000 3034 F30F7F85 		movdqu	%xmm0, -6624(%rbp)
+ 4000      20E6FFFF 
+ 4001 303c F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 4001      10E6FFFF 
+ 4002 3044 F30F7F85 		movdqu	%xmm0, -4048(%rbp)
+ 4002      30F0FFFF 
+ 4003              	.LBB614:
+ 4004              	.LBB615:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 4005              		.loc 2 1565 0
+ 4006 304c F30F6F85 		movdqu	-4048(%rbp), %xmm0
+ 4006      30F0FFFF 
+ 4007 3054 660F7F85 		movdqa	%xmm0, -9952(%rbp)
+ 4007      20D9FFFF 
+ 4008 305c 660F6F85 		movdqa	-9952(%rbp), %xmm0
+ 4008      20D9FFFF 
+ 4009 3064 F30F7F85 		movdqu	%xmm0, -4032(%rbp)
+ 4009      40F0FFFF 
+ 4010              	.LBB616:
+ 4011              	.LBB617:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 4012              		.loc 2 1282 0
+ 4013 306c F30F6F85 		movdqu	-4032(%rbp), %xmm0
+ 4013      40F0FFFF 
+ 4014 3074 F30F7F85 		movdqu	%xmm0, -8416(%rbp)
+ 4014      20DFFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 4015              		.loc 2 1283 0
+ 4016 307c 8B8528DF 		movl	-8408(%rbp), %eax
+ 4016      FFFF
+ 4017 3082 89852CDF 		movl	%eax, -8404(%rbp)
+ 4017      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 4018              		.loc 2 1284 0
+ 4019 3088 8B8524DF 		movl	-8412(%rbp), %eax
+ 4019      FFFF
+ 4020 308e 898528DF 		movl	%eax, -8408(%rbp)
+ 4020      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 4021              		.loc 2 1285 0
+ 4022 3094 8B8520DF 		movl	-8416(%rbp), %eax
+ 4022      FFFF
+ 4023 309a 898524DF 		movl	%eax, -8412(%rbp)
+ 4023      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 4024              		.loc 2 1286 0
+ 4025 30a0 C78520DF 		movl	$0, -8416(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 152
+
+
+ 4025      FFFF0000 
+ 4025      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 4026              		.loc 2 1287 0
+ 4027 30aa F30F6F85 		movdqu	-8416(%rbp), %xmm0
+ 4027      20DFFFFF 
+ 4028              	.LBE617:
+ 4029              	.LBE616:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4030              		.loc 2 1567 0
+ 4031 30b2 660F7F85 		movdqa	%xmm0, -9952(%rbp)
+ 4031      20D9FFFF 
+ 4032 30ba 660F6F85 		movdqa	-9952(%rbp), %xmm0
+ 4032      20D9FFFF 
+ 4033 30c2 660FEF85 		pxor	-4048(%rbp), %xmm0
+ 4033      30F0FFFF 
+ 4034 30ca F30F7F85 		movdqu	%xmm0, -4048(%rbp)
+ 4034      30F0FFFF 
+ 4035 30d2 660F6F85 		movdqa	-9952(%rbp), %xmm0
+ 4035      20D9FFFF 
+ 4036 30da F30F7F85 		movdqu	%xmm0, -4016(%rbp)
+ 4036      50F0FFFF 
+ 4037              	.LBB618:
+ 4038              	.LBB619:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 4039              		.loc 2 1282 0
+ 4040 30e2 F30F6F85 		movdqu	-4016(%rbp), %xmm0
+ 4040      50F0FFFF 
+ 4041 30ea F30F7F85 		movdqu	%xmm0, -8400(%rbp)
+ 4041      30DFFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 4042              		.loc 2 1283 0
+ 4043 30f2 8B8538DF 		movl	-8392(%rbp), %eax
+ 4043      FFFF
+ 4044 30f8 89853CDF 		movl	%eax, -8388(%rbp)
+ 4044      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 4045              		.loc 2 1284 0
+ 4046 30fe 8B8534DF 		movl	-8396(%rbp), %eax
+ 4046      FFFF
+ 4047 3104 898538DF 		movl	%eax, -8392(%rbp)
+ 4047      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 4048              		.loc 2 1285 0
+ 4049 310a 8B8530DF 		movl	-8400(%rbp), %eax
+ 4049      FFFF
+ 4050 3110 898534DF 		movl	%eax, -8396(%rbp)
+ 4050      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 4051              		.loc 2 1286 0
+ 4052 3116 C78530DF 		movl	$0, -8400(%rbp)
+ 4052      FFFF0000 
+ 4052      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 4053              		.loc 2 1287 0
+ 4054 3120 F30F6F85 		movdqu	-8400(%rbp), %xmm0
+ 4054      30DFFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 153
+
+
+ 4055              	.LBE619:
+ 4056              	.LBE618:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4057              		.loc 2 1568 0
+ 4058 3128 660F7F85 		movdqa	%xmm0, -9952(%rbp)
+ 4058      20D9FFFF 
+ 4059 3130 660F6F85 		movdqa	-9952(%rbp), %xmm0
+ 4059      20D9FFFF 
+ 4060 3138 660FEF85 		pxor	-4048(%rbp), %xmm0
+ 4060      30F0FFFF 
+ 4061 3140 F30F7F85 		movdqu	%xmm0, -4048(%rbp)
+ 4061      30F0FFFF 
+ 4062 3148 660F6F85 		movdqa	-9952(%rbp), %xmm0
+ 4062      20D9FFFF 
+ 4063 3150 F30F7F85 		movdqu	%xmm0, -4000(%rbp)
+ 4063      60F0FFFF 
+ 4064              	.LBB620:
+ 4065              	.LBB621:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 4066              		.loc 2 1282 0
+ 4067 3158 F30F6F85 		movdqu	-4000(%rbp), %xmm0
+ 4067      60F0FFFF 
+ 4068 3160 F30F7F85 		movdqu	%xmm0, -8384(%rbp)
+ 4068      40DFFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 4069              		.loc 2 1283 0
+ 4070 3168 8B8548DF 		movl	-8376(%rbp), %eax
+ 4070      FFFF
+ 4071 316e 89854CDF 		movl	%eax, -8372(%rbp)
+ 4071      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 4072              		.loc 2 1284 0
+ 4073 3174 8B8544DF 		movl	-8380(%rbp), %eax
+ 4073      FFFF
+ 4074 317a 898548DF 		movl	%eax, -8376(%rbp)
+ 4074      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 4075              		.loc 2 1285 0
+ 4076 3180 8B8540DF 		movl	-8384(%rbp), %eax
+ 4076      FFFF
+ 4077 3186 898544DF 		movl	%eax, -8380(%rbp)
+ 4077      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 4078              		.loc 2 1286 0
+ 4079 318c C78540DF 		movl	$0, -8384(%rbp)
+ 4079      FFFF0000 
+ 4079      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 4080              		.loc 2 1287 0
+ 4081 3196 F30F6F85 		movdqu	-8384(%rbp), %xmm0
+ 4081      40DFFFFF 
+ 4082              	.LBE621:
+ 4083              	.LBE620:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4084              		.loc 2 1569 0
+ 4085 319e 660F7F85 		movdqa	%xmm0, -9952(%rbp)
+ 4085      20D9FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 154
+
+
+ 4086 31a6 660F6F85 		movdqa	-9952(%rbp), %xmm0
+ 4086      20D9FFFF 
+ 4087 31ae 660FEF85 		pxor	-4048(%rbp), %xmm0
+ 4087      30F0FFFF 
+ 4088 31b6 F30F7F85 		movdqu	%xmm0, -4048(%rbp)
+ 4088      30F0FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 4089              		.loc 2 1571 0
+ 4090 31be F30F6F85 		movdqu	-4048(%rbp), %xmm0
+ 4090      30F0FFFF 
+ 4091              	.LBE615:
+ 4092              	.LBE614:
+1747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x08,4);
+ 4093              		.loc 2 1747 0
+ 4094 31c6 F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 4094      10E6FFFF 
+ 4095 31ce F30F6F85 		movdqu	-6624(%rbp), %xmm0
+ 4095      20E6FFFF 
+ 4096 31d6 F30F6F8D 		movdqu	-6640(%rbp), %xmm1
+ 4096      10E6FFFF 
+ 4097 31de 660FEFC1 		pxor	%xmm1, %xmm0
+ 4098 31e2 F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 4098      10E6FFFF 
+ 4099 31ea 488B85B8 		movq	-9544(%rbp), %rax
+ 4099      DAFFFF
+ 4100 31f1 4883C040 		addq	$64, %rax
+ 4101 31f5 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 4101      10E6FFFF 
+ 4102 31fd F30F7F00 		movdqu	%xmm0, (%rax)
+ 4103 3201 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 4103      10E6FFFF 
+ 4104 3209 F30F7F85 		movdqu	%xmm0, -3968(%rbp)
+ 4104      80F0FFFF 
+ 4105              	.LBB622:
+ 4106              	.LBB623:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 4107              		.loc 2 1681 0
+ 4108 3211 B8100000 		movl	$16, %eax
+ 4108      00
+ 4109 3216 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 4109      00000000 
+ 4110 321e F30F7F85 		movdqu	%xmm0, -3936(%rbp)
+ 4110      A0F0FFFF 
+ 4111 3226 89859CF0 		movl	%eax, -3940(%rbp)
+ 4111      FFFF
+ 4112              	.LBB624:
+ 4113              	.LBB625:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 4114              		.loc 2 522 0
+ 4115 322c F30F6F85 		movdqu	-3936(%rbp), %xmm0
+ 4115      A0F0FFFF 
+ 4116 3234 F30F7F85 		movdqu	%xmm0, -8304(%rbp)
+ 4116      90DFFFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 4117              		.loc 2 523 0
+ 4118 323c B8030000 		movl	$3, %eax
+ 4118      00
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 155
+
+
+ 4119 3241 4898     		cltq
+ 4120 3243 8B959CF0 		movl	-3940(%rbp), %edx
+ 4120      FFFF
+ 4121 3249 89948590 		movl	%edx, -8304(%rbp,%rax,4)
+ 4121      DFFFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 4122              		.loc 2 524 0
+ 4123 3250 F30F6F85 		movdqu	-8304(%rbp), %xmm0
+ 4123      90DFFFFF 
+ 4124 3258 F30F7F85 		movdqu	%xmm0, -3936(%rbp)
+ 4124      A0F0FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 4125              		.loc 2 526 0
+ 4126 3260 F30F6F85 		movdqu	-3936(%rbp), %xmm0
+ 4126      A0F0FFFF 
+ 4127              	.LBE625:
+ 4128              	.LBE624:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 4129              		.loc 2 1681 0
+ 4130 3268 660F7F85 		movdqa	%xmm0, -9920(%rbp)
+ 4130      40D9FFFF 
+ 4131 3270 F30F6F85 		movdqu	-3968(%rbp), %xmm0
+ 4131      80F0FFFF 
+ 4132 3278 F30F7F85 		movdqu	%xmm0, -3920(%rbp)
+ 4132      B0F0FFFF 
+ 4133 3280 F30F6F85 		movdqu	-3920(%rbp), %xmm0
+ 4133      B0F0FFFF 
+ 4134 3288 F30F7F85 		movdqu	%xmm0, -3888(%rbp)
+ 4134      D0F0FFFF 
+ 4135 3290 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 4135      000000
+ 4136 3297 488985C8 		movq	%rax, -3896(%rbp)
+ 4136      F0FFFF
+ 4137              	.LBB626:
+ 4138              	.LBB627:
+ 4139              	.LBB628:
+ 4140              	.LBB629:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 4141              		.loc 2 851 0
+ 4142 329e 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 4142      00000000 
+ 4143 32a6 F30F7F85 		movdqu	%xmm0, -3856(%rbp)
+ 4143      F0F0FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 4144              		.loc 2 854 0
+ 4145 32ae 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 4145      00000000 
+ 4146 32b6 F30F6F8D 		movdqu	-3888(%rbp), %xmm1
+ 4146      D0F0FFFF 
+ 4147 32be F30F7F8D 		movdqu	%xmm1, -3776(%rbp)
+ 4147      40F1FFFF 
+ 4148 32c6 F30F7F85 		movdqu	%xmm0, -3792(%rbp)
+ 4148      30F1FFFF 
+ 4149              	.LBB630:
+ 4150              	.LBB631:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 4151              		.loc 2 206 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 156
+
+
+ 4152 32ce F30F6F85 		movdqu	-3792(%rbp), %xmm0
+ 4152      30F1FFFF 
+ 4153 32d6 F30F6F8D 		movdqu	-3776(%rbp), %xmm1
+ 4153      40F1FFFF 
+ 4154 32de 660FDBC1 		pand	%xmm1, %xmm0
+ 4155              	.LBE631:
+ 4156              	.LBE630:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 4157              		.loc 2 854 0
+ 4158 32e2 F30F7F85 		movdqu	%xmm0, -3808(%rbp)
+ 4158      20F1FFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 4159              		.loc 2 862 0
+ 4160 32ea 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 4160      00000000 
+ 4161 32f2 F30F6F8D 		movdqu	-3888(%rbp), %xmm1
+ 4161      D0F0FFFF 
+ 4162 32fa F30F7F8D 		movdqu	%xmm1, -3744(%rbp)
+ 4162      60F1FFFF 
+ 4163 3302 F30F7F85 		movdqu	%xmm0, -3760(%rbp)
+ 4163      50F1FFFF 
+ 4164              	.LBB632:
+ 4165              		.loc 2 2642 0
+ 4166 330a 0FB68560 		movzbl	-3744(%rbp), %eax
+ 4166      F1FFFF
+ 4167 3311 0FB69550 		movzbl	-3760(%rbp), %edx
+ 4167      F1FFFF
+ 4168 3318 0FB6C0   		movzbl	%al, %eax
+ 4169 331b 6689858E 		movw	%ax, -10354(%rbp)
+ 4169      D7FFFF
+ 4170 3322 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4170      D7FFFF
+ 4171 3329 F6F2     		divb	%dl
+ 4172 332b 4189C7   		movl	%eax, %r15d
+ 4173 332e 0FB68561 		movzbl	-3743(%rbp), %eax
+ 4173      F1FFFF
+ 4174 3335 0FB69551 		movzbl	-3759(%rbp), %edx
+ 4174      F1FFFF
+ 4175 333c 0FB6C0   		movzbl	%al, %eax
+ 4176 333f 6689858E 		movw	%ax, -10354(%rbp)
+ 4176      D7FFFF
+ 4177 3346 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4177      D7FFFF
+ 4178 334d F6F2     		divb	%dl
+ 4179 334f 88855FD9 		movb	%al, -9889(%rbp)
+ 4179      FFFF
+ 4180 3355 0FB68562 		movzbl	-3742(%rbp), %eax
+ 4180      F1FFFF
+ 4181 335c 0FB69552 		movzbl	-3758(%rbp), %edx
+ 4181      F1FFFF
+ 4182 3363 0FB6C0   		movzbl	%al, %eax
+ 4183 3366 6689858E 		movw	%ax, -10354(%rbp)
+ 4183      D7FFFF
+ 4184 336d 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4184      D7FFFF
+ 4185 3374 F6F2     		divb	%dl
+ 4186 3376 88855ED9 		movb	%al, -9890(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 157
+
+
+ 4186      FFFF
+ 4187 337c 0FB68563 		movzbl	-3741(%rbp), %eax
+ 4187      F1FFFF
+ 4188 3383 0FB69553 		movzbl	-3757(%rbp), %edx
+ 4188      F1FFFF
+ 4189 338a 0FB6C0   		movzbl	%al, %eax
+ 4190 338d 6689858E 		movw	%ax, -10354(%rbp)
+ 4190      D7FFFF
+ 4191 3394 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4191      D7FFFF
+ 4192 339b F6F2     		divb	%dl
+ 4193 339d 88855DD9 		movb	%al, -9891(%rbp)
+ 4193      FFFF
+ 4194 33a3 0FB68564 		movzbl	-3740(%rbp), %eax
+ 4194      F1FFFF
+ 4195 33aa 0FB69554 		movzbl	-3756(%rbp), %edx
+ 4195      F1FFFF
+ 4196 33b1 0FB6C0   		movzbl	%al, %eax
+ 4197 33b4 6689858E 		movw	%ax, -10354(%rbp)
+ 4197      D7FFFF
+ 4198 33bb 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4198      D7FFFF
+ 4199 33c2 F6F2     		divb	%dl
+ 4200 33c4 88855CD9 		movb	%al, -9892(%rbp)
+ 4200      FFFF
+ 4201 33ca 0FB68565 		movzbl	-3739(%rbp), %eax
+ 4201      F1FFFF
+ 4202 33d1 0FB69555 		movzbl	-3755(%rbp), %edx
+ 4202      F1FFFF
+ 4203 33d8 0FB6C0   		movzbl	%al, %eax
+ 4204 33db 6689858E 		movw	%ax, -10354(%rbp)
+ 4204      D7FFFF
+ 4205 33e2 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4205      D7FFFF
+ 4206 33e9 F6F2     		divb	%dl
+ 4207 33eb 4189C1   		movl	%eax, %r9d
+ 4208 33ee 0FB68566 		movzbl	-3738(%rbp), %eax
+ 4208      F1FFFF
+ 4209 33f5 0FB69556 		movzbl	-3754(%rbp), %edx
+ 4209      F1FFFF
+ 4210 33fc 0FB6C0   		movzbl	%al, %eax
+ 4211 33ff 6689858E 		movw	%ax, -10354(%rbp)
+ 4211      D7FFFF
+ 4212 3406 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4212      D7FFFF
+ 4213 340d F6F2     		divb	%dl
+ 4214 340f 89C7     		movl	%eax, %edi
+ 4215 3411 0FB68567 		movzbl	-3737(%rbp), %eax
+ 4215      F1FFFF
+ 4216 3418 0FB69557 		movzbl	-3753(%rbp), %edx
+ 4216      F1FFFF
+ 4217 341f 0FB6C0   		movzbl	%al, %eax
+ 4218 3422 6689858E 		movw	%ax, -10354(%rbp)
+ 4218      D7FFFF
+ 4219 3429 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4219      D7FFFF
+ 4220 3430 F6F2     		divb	%dl
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 158
+
+
+ 4221 3432 89C3     		movl	%eax, %ebx
+ 4222 3434 0FB68568 		movzbl	-3736(%rbp), %eax
+ 4222      F1FFFF
+ 4223 343b 0FB69558 		movzbl	-3752(%rbp), %edx
+ 4223      F1FFFF
+ 4224 3442 0FB6C0   		movzbl	%al, %eax
+ 4225 3445 6689858E 		movw	%ax, -10354(%rbp)
+ 4225      D7FFFF
+ 4226 344c 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4226      D7FFFF
+ 4227 3453 F6F2     		divb	%dl
+ 4228 3455 4189C2   		movl	%eax, %r10d
+ 4229 3458 0FB68569 		movzbl	-3735(%rbp), %eax
+ 4229      F1FFFF
+ 4230 345f 0FB69559 		movzbl	-3751(%rbp), %edx
+ 4230      F1FFFF
+ 4231 3466 0FB6C0   		movzbl	%al, %eax
+ 4232 3469 6689858E 		movw	%ax, -10354(%rbp)
+ 4232      D7FFFF
+ 4233 3470 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4233      D7FFFF
+ 4234 3477 F6F2     		divb	%dl
+ 4235 3479 4189C3   		movl	%eax, %r11d
+ 4236 347c 0FB6856A 		movzbl	-3734(%rbp), %eax
+ 4236      F1FFFF
+ 4237 3483 0FB6955A 		movzbl	-3750(%rbp), %edx
+ 4237      F1FFFF
+ 4238 348a 0FB6C0   		movzbl	%al, %eax
+ 4239 348d 6689858E 		movw	%ax, -10354(%rbp)
+ 4239      D7FFFF
+ 4240 3494 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4240      D7FFFF
+ 4241 349b F6F2     		divb	%dl
+ 4242 349d 4189C4   		movl	%eax, %r12d
+ 4243 34a0 0FB6856B 		movzbl	-3733(%rbp), %eax
+ 4243      F1FFFF
+ 4244 34a7 0FB6955B 		movzbl	-3749(%rbp), %edx
+ 4244      F1FFFF
+ 4245 34ae 0FB6C0   		movzbl	%al, %eax
+ 4246 34b1 6689858E 		movw	%ax, -10354(%rbp)
+ 4246      D7FFFF
+ 4247 34b8 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4247      D7FFFF
+ 4248 34bf F6F2     		divb	%dl
+ 4249 34c1 4189C5   		movl	%eax, %r13d
+ 4250 34c4 0FB6856C 		movzbl	-3732(%rbp), %eax
+ 4250      F1FFFF
+ 4251 34cb 0FB6955C 		movzbl	-3748(%rbp), %edx
+ 4251      F1FFFF
+ 4252 34d2 0FB6C0   		movzbl	%al, %eax
+ 4253 34d5 6689858E 		movw	%ax, -10354(%rbp)
+ 4253      D7FFFF
+ 4254 34dc 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4254      D7FFFF
+ 4255 34e3 F6F2     		divb	%dl
+ 4256 34e5 4189C6   		movl	%eax, %r14d
+ 4257 34e8 0FB6856D 		movzbl	-3731(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 159
+
+
+ 4257      F1FFFF
+ 4258 34ef 0FB6955D 		movzbl	-3747(%rbp), %edx
+ 4258      F1FFFF
+ 4259 34f6 0FB6C0   		movzbl	%al, %eax
+ 4260 34f9 6689858E 		movw	%ax, -10354(%rbp)
+ 4260      D7FFFF
+ 4261 3500 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4261      D7FFFF
+ 4262 3507 F6F2     		divb	%dl
+ 4263 3509 4189C0   		movl	%eax, %r8d
+ 4264 350c 0FB6856E 		movzbl	-3730(%rbp), %eax
+ 4264      F1FFFF
+ 4265 3513 0FB6955E 		movzbl	-3746(%rbp), %edx
+ 4265      F1FFFF
+ 4266 351a 0FB6C0   		movzbl	%al, %eax
+ 4267 351d 6689858E 		movw	%ax, -10354(%rbp)
+ 4267      D7FFFF
+ 4268 3524 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4268      D7FFFF
+ 4269 352b F6F2     		divb	%dl
+ 4270 352d 89C6     		movl	%eax, %esi
+ 4271 352f 0FB6856F 		movzbl	-3729(%rbp), %eax
+ 4271      F1FFFF
+ 4272 3536 0FB6955F 		movzbl	-3745(%rbp), %edx
+ 4272      F1FFFF
+ 4273 353d 0FB6C0   		movzbl	%al, %eax
+ 4274 3540 6689858E 		movw	%ax, -10354(%rbp)
+ 4274      D7FFFF
+ 4275 3547 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4275      D7FFFF
+ 4276 354e F6F2     		divb	%dl
+ 4277 3550 89C1     		movl	%eax, %ecx
+ 4278              	.LBB633:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 4279              		.loc 2 346 0
+ 4280 3552 0FB6D3   		movzbl	%bl, %edx
+ 4281 3555 400FB6C7 		movzbl	%dil, %eax
+ 4282 3559 48C1E208 		salq	$8, %rdx
+ 4283 355d 4809C2   		orq	%rax, %rdx
+ 4284 3560 410FB6C1 		movzbl	%r9b, %eax
+ 4285 3564 48C1E208 		salq	$8, %rdx
+ 4286 3568 4809C2   		orq	%rax, %rdx
+ 4287 356b 0FB6855C 		movzbl	-9892(%rbp), %eax
+ 4287      D9FFFF
+ 4288 3572 48C1E208 		salq	$8, %rdx
+ 4289 3576 4809C2   		orq	%rax, %rdx
+ 4290 3579 0FB6855D 		movzbl	-9891(%rbp), %eax
+ 4290      D9FFFF
+ 4291 3580 48C1E208 		salq	$8, %rdx
+ 4292 3584 4809C2   		orq	%rax, %rdx
+ 4293 3587 0FB6855E 		movzbl	-9890(%rbp), %eax
+ 4293      D9FFFF
+ 4294 358e 48C1E208 		salq	$8, %rdx
+ 4295 3592 4809C2   		orq	%rax, %rdx
+ 4296 3595 0FB6855F 		movzbl	-9889(%rbp), %eax
+ 4296      D9FFFF
+ 4297 359c 48C1E208 		salq	$8, %rdx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 160
+
+
+ 4298 35a0 4809C2   		orq	%rax, %rdx
+ 4299 35a3 410FB6C7 		movzbl	%r15b, %eax
+ 4300 35a7 48C1E208 		salq	$8, %rdx
+ 4301 35ab 4809C2   		orq	%rax, %rdx
+ 4302 35ae 0FB6C1   		movzbl	%cl, %eax
+ 4303 35b1 400FB6CE 		movzbl	%sil, %ecx
+ 4304 35b5 48C1E008 		salq	$8, %rax
+ 4305 35b9 4809C8   		orq	%rcx, %rax
+ 4306 35bc 410FB6C8 		movzbl	%r8b, %ecx
+ 4307 35c0 48C1E008 		salq	$8, %rax
+ 4308 35c4 4809C8   		orq	%rcx, %rax
+ 4309 35c7 410FB6CE 		movzbl	%r14b, %ecx
+ 4310 35cb 48C1E008 		salq	$8, %rax
+ 4311 35cf 4809C8   		orq	%rcx, %rax
+ 4312 35d2 410FB6CD 		movzbl	%r13b, %ecx
+ 4313 35d6 48C1E008 		salq	$8, %rax
+ 4314 35da 4809C8   		orq	%rcx, %rax
+ 4315 35dd 410FB6CC 		movzbl	%r12b, %ecx
+ 4316 35e1 48C1E008 		salq	$8, %rax
+ 4317 35e5 4809C8   		orq	%rcx, %rax
+ 4318 35e8 410FB6CB 		movzbl	%r11b, %ecx
+ 4319 35ec 48C1E008 		salq	$8, %rax
+ 4320 35f0 4809C8   		orq	%rcx, %rax
+ 4321 35f3 410FB6CA 		movzbl	%r10b, %ecx
+ 4322 35f7 48C1E008 		salq	$8, %rax
+ 4323 35fb 4809C8   		orq	%rcx, %rax
+ 4324 35fe 488995E0 		movq	%rdx, -10272(%rbp)
+ 4324      D7FFFF
+ 4325 3605 488985E8 		movq	%rax, -10264(%rbp)
+ 4325      D7FFFF
+ 4326 360c 660F6F85 		movdqa	-10272(%rbp), %xmm0
+ 4326      E0D7FFFF 
+ 4327              	.LBE633:
+ 4328              	.LBE632:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 4329              		.loc 2 862 0
+ 4330 3614 F30F7F85 		movdqu	%xmm0, -3824(%rbp)
+ 4330      10F1FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 4331              		.loc 2 866 0
+ 4332 361c C785ECF0 		movl	$0, -3860(%rbp)
+ 4332      FFFF0000 
+ 4332      0000
+ 4333 3626 E9860200 		jmp	.L92
+ 4333      00
+ 4334              	.L101:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 4335              		.loc 2 868 0
+ 4336 362b 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 4336      00000000 
+ 4337 3633 F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 4337      80F1FFFF 
+ 4338 363b F30F6F85 		movdqu	-3824(%rbp), %xmm0
+ 4338      10F1FFFF 
+ 4339 3643 F30F7F85 		movdqu	%xmm0, -3728(%rbp)
+ 4339      70F1FFFF 
+ 4340              	.LBB634:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 161
+
+
+ 4341              	.LBB635:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 4342              		.loc 2 380 0
+ 4343 364b F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 4343      80F1FFFF 
+ 4344 3653 F30F7F85 		movdqu	%xmm0, -8272(%rbp)
+ 4344      B0DFFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 4345              		.loc 2 381 0
+ 4346 365b F30F6F85 		movdqu	-3728(%rbp), %xmm0
+ 4346      70F1FFFF 
+ 4347 3663 F30F7F85 		movdqu	%xmm0, -8288(%rbp)
+ 4347      A0DFFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 4348              		.loc 2 383 0
+ 4349 366b C7859CF1 		movl	$0, -3684(%rbp)
+ 4349      FFFF0000 
+ 4349      0000
+ 4350 3675 EB5C     		jmp	.L93
+ 4351              	.L96:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 4352              		.loc 2 385 0
+ 4353 3677 8B859CF1 		movl	-3684(%rbp), %eax
+ 4353      FFFF
+ 4354 367d 89C0     		mov	%eax, %eax
+ 4355 367f 0FB68405 		movzbl	-8288(%rbp,%rax), %eax
+ 4355      A0DFFFFF 
+ 4356 3687 84C0     		testb	%al, %al
+ 4357 3689 7912     		jns	.L94
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 4358              		.loc 2 386 0
+ 4359 368b 8B859CF1 		movl	-3684(%rbp), %eax
+ 4359      FFFF
+ 4360 3691 89C0     		mov	%eax, %eax
+ 4361 3693 C68405C0 		movb	$0, -8256(%rbp,%rax)
+ 4361      DFFFFF00 
+ 4362 369b EB2F     		jmp	.L95
+ 4363              	.L94:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 4364              		.loc 2 388 0
+ 4365 369d 8B8D9CF1 		movl	-3684(%rbp), %ecx
+ 4365      FFFF
+ 4366 36a3 8B859CF1 		movl	-3684(%rbp), %eax
+ 4366      FFFF
+ 4367 36a9 89C0     		mov	%eax, %eax
+ 4368 36ab 0FB68405 		movzbl	-8288(%rbp,%rax), %eax
+ 4368      A0DFFFFF 
+ 4369 36b3 0FB6C0   		movzbl	%al, %eax
+ 4370 36b6 83E00F   		andl	$15, %eax
+ 4371 36b9 4898     		cltq
+ 4372 36bb 0FB69405 		movzbl	-8272(%rbp,%rax), %edx
+ 4372      B0DFFFFF 
+ 4373 36c3 89C8     		mov	%ecx, %eax
+ 4374 36c5 889405C0 		movb	%dl, -8256(%rbp,%rax)
+ 4374      DFFFFF
+ 4375              	.L95:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 162
+
+
+ 4376              		.loc 2 383 0
+ 4377 36cc 83859CF1 		addl	$1, -3684(%rbp)
+ 4377      FFFF01
+ 4378              	.L93:
+ 4379 36d3 83BD9CF1 		cmpl	$15, -3684(%rbp)
+ 4379      FFFF0F
+ 4380 36da 769B     		jbe	.L96
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 4381              		.loc 2 391 0
+ 4382 36dc F30F6F85 		movdqu	-8256(%rbp), %xmm0
+ 4382      C0DFFFFF 
+ 4383              	.LBE635:
+ 4384              	.LBE634:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 4385              		.loc 2 868 0
+ 4386 36e4 F30F7F85 		movdqu	%xmm0, -3840(%rbp)
+ 4386      00F1FFFF 
+ 4387 36ec F30F6F85 		movdqu	-3808(%rbp), %xmm0
+ 4387      20F1FFFF 
+ 4388 36f4 F30F7F85 		movdqu	%xmm0, -3664(%rbp)
+ 4388      B0F1FFFF 
+ 4389 36fc F30F6F85 		movdqu	-3840(%rbp), %xmm0
+ 4389      00F1FFFF 
+ 4390 3704 F30F7F85 		movdqu	%xmm0, -3680(%rbp)
+ 4390      A0F1FFFF 
+ 4391              	.LBB636:
+ 4392              	.LBB637:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 4393              		.loc 2 234 0
+ 4394 370c F30F6F85 		movdqu	-3680(%rbp), %xmm0
+ 4394      A0F1FFFF 
+ 4395 3714 F30F6F8D 		movdqu	-3664(%rbp), %xmm1
+ 4395      B0F1FFFF 
+ 4396 371c 660FEBC1 		por	%xmm1, %xmm0
+ 4397              	.LBE637:
+ 4398              	.LBE636:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 4399              		.loc 2 870 0
+ 4400 3720 F30F7F85 		movdqu	%xmm0, -3840(%rbp)
+ 4400      00F1FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 4401              		.loc 2 872 0
+ 4402 3728 8B85ECF0 		mov	-3860(%rbp), %eax
+ 4402      FFFF
+ 4403 372e 48C1E004 		salq	$4, %rax
+ 4404 3732 480385C8 		addq	-3896(%rbp), %rax
+ 4404      F0FFFF
+ 4405 3739 660F6F00 		movdqa	(%rax), %xmm0
+ 4406 373d F30F7F85 		movdqu	%xmm0, -3632(%rbp)
+ 4406      D0F1FFFF 
+ 4407 3745 F30F6F85 		movdqu	-3840(%rbp), %xmm0
+ 4407      00F1FFFF 
+ 4408 374d F30F7F85 		movdqu	%xmm0, -3648(%rbp)
+ 4408      C0F1FFFF 
+ 4409              	.LBB638:
+ 4410              	.LBB639:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 163
+
+
+ 4411              		.loc 2 380 0
+ 4412 3755 F30F6F85 		movdqu	-3632(%rbp), %xmm0
+ 4412      D0F1FFFF 
+ 4413 375d F30F7F85 		movdqu	%xmm0, -8224(%rbp)
+ 4413      E0DFFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 4414              		.loc 2 381 0
+ 4415 3765 F30F6F85 		movdqu	-3648(%rbp), %xmm0
+ 4415      C0F1FFFF 
+ 4416 376d F30F7F85 		movdqu	%xmm0, -8240(%rbp)
+ 4416      D0DFFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 4417              		.loc 2 383 0
+ 4418 3775 C785ECF1 		movl	$0, -3604(%rbp)
+ 4418      FFFF0000 
+ 4418      0000
+ 4419 377f EB5C     		jmp	.L97
+ 4420              	.L100:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 4421              		.loc 2 385 0
+ 4422 3781 8B85ECF1 		movl	-3604(%rbp), %eax
+ 4422      FFFF
+ 4423 3787 89C0     		mov	%eax, %eax
+ 4424 3789 0FB68405 		movzbl	-8240(%rbp,%rax), %eax
+ 4424      D0DFFFFF 
+ 4425 3791 84C0     		testb	%al, %al
+ 4426 3793 7912     		jns	.L98
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 4427              		.loc 2 386 0
+ 4428 3795 8B85ECF1 		movl	-3604(%rbp), %eax
+ 4428      FFFF
+ 4429 379b 89C0     		mov	%eax, %eax
+ 4430 379d C68405F0 		movb	$0, -8208(%rbp,%rax)
+ 4430      DFFFFF00 
+ 4431 37a5 EB2F     		jmp	.L99
+ 4432              	.L98:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 4433              		.loc 2 388 0
+ 4434 37a7 8B8DECF1 		movl	-3604(%rbp), %ecx
+ 4434      FFFF
+ 4435 37ad 8B85ECF1 		movl	-3604(%rbp), %eax
+ 4435      FFFF
+ 4436 37b3 89C0     		mov	%eax, %eax
+ 4437 37b5 0FB68405 		movzbl	-8240(%rbp,%rax), %eax
+ 4437      D0DFFFFF 
+ 4438 37bd 0FB6C0   		movzbl	%al, %eax
+ 4439 37c0 83E00F   		andl	$15, %eax
+ 4440 37c3 4898     		cltq
+ 4441 37c5 0FB69405 		movzbl	-8224(%rbp,%rax), %edx
+ 4441      E0DFFFFF 
+ 4442 37cd 89C8     		mov	%ecx, %eax
+ 4443 37cf 889405F0 		movb	%dl, -8208(%rbp,%rax)
+ 4443      DFFFFF
+ 4444              	.L99:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 4445              		.loc 2 383 0
+ 4446 37d6 8385ECF1 		addl	$1, -3604(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 164
+
+
+ 4446      FFFF01
+ 4447              	.L97:
+ 4448 37dd 83BDECF1 		cmpl	$15, -3604(%rbp)
+ 4448      FFFF0F
+ 4449 37e4 769B     		jbe	.L100
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 4450              		.loc 2 391 0
+ 4451 37e6 F30F6F85 		movdqu	-8208(%rbp), %xmm0
+ 4451      F0DFFFFF 
+ 4452              	.LBE639:
+ 4453              	.LBE638:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 4454              		.loc 2 872 0
+ 4455 37ee F30F7F85 		movdqu	%xmm0, -3840(%rbp)
+ 4455      00F1FFFF 
+ 4456 37f6 F30F6F85 		movdqu	-3856(%rbp), %xmm0
+ 4456      F0F0FFFF 
+ 4457 37fe F30F7F85 		movdqu	%xmm0, -3584(%rbp)
+ 4457      00F2FFFF 
+ 4458 3806 F30F6F85 		movdqu	-3840(%rbp), %xmm0
+ 4458      00F1FFFF 
+ 4459 380e F30F7F85 		movdqu	%xmm0, -3600(%rbp)
+ 4459      F0F1FFFF 
+ 4460              	.LBB640:
+ 4461              	.LBB641:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 4462              		.loc 2 234 0
+ 4463 3816 F30F6F85 		movdqu	-3600(%rbp), %xmm0
+ 4463      F0F1FFFF 
+ 4464 381e F30F6F8D 		movdqu	-3584(%rbp), %xmm1
+ 4464      00F2FFFF 
+ 4465 3826 660FEBC1 		por	%xmm1, %xmm0
+ 4466              	.LBE641:
+ 4467              	.LBE640:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 4468              		.loc 2 874 0
+ 4469 382a F30F7F85 		movdqu	%xmm0, -3856(%rbp)
+ 4469      F0F0FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 4470              		.loc 2 876 0
+ 4471 3832 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 4471      00000000 
+ 4472 383a F30F6F8D 		movdqu	-3824(%rbp), %xmm1
+ 4472      10F1FFFF 
+ 4473 3842 F30F7F8D 		movdqu	%xmm1, -3552(%rbp)
+ 4473      20F2FFFF 
+ 4474 384a F30F7F85 		movdqu	%xmm0, -3568(%rbp)
+ 4474      10F2FFFF 
+ 4475              	.LBB642:
+ 4476              	.LBB643:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 4477              		.loc 2 290 0
+ 4478 3852 F30F6F8D 		movdqu	-3568(%rbp), %xmm1
+ 4478      10F2FFFF 
+ 4479 385a F30F6F85 		movdqu	-3552(%rbp), %xmm0
+ 4479      20F2FFFF 
+ 4480 3862 660FF8C1 		psubb	%xmm1, %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 165
+
+
+ 4481              	.LBE643:
+ 4482              	.LBE642:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 4483              		.loc 2 876 0
+ 4484 3866 F30F7F85 		movdqu	%xmm0, -3824(%rbp)
+ 4484      10F1FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 4485              		.loc 2 878 0
+ 4486 386e 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 4486      00000000 
+ 4487 3876 F30F6F8D 		movdqu	-3824(%rbp), %xmm1
+ 4487      10F1FFFF 
+ 4488 387e F30F7F8D 		movdqu	%xmm1, -3520(%rbp)
+ 4488      40F2FFFF 
+ 4489 3886 F30F7F85 		movdqu	%xmm0, -3536(%rbp)
+ 4489      30F2FFFF 
+ 4490              	.LBB644:
+ 4491              	.LBB645:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 4492              		.loc 2 206 0
+ 4493 388e F30F6F85 		movdqu	-3536(%rbp), %xmm0
+ 4493      30F2FFFF 
+ 4494 3896 F30F6F8D 		movdqu	-3520(%rbp), %xmm1
+ 4494      40F2FFFF 
+ 4495 389e 660FDBC1 		pand	%xmm1, %xmm0
+ 4496              	.LBE645:
+ 4497              	.LBE644:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 4498              		.loc 2 878 0
+ 4499 38a2 F30F7F85 		movdqu	%xmm0, -3824(%rbp)
+ 4499      10F1FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 4500              		.loc 2 866 0
+ 4501 38aa 8385ECF0 		addl	$1, -3860(%rbp)
+ 4501      FFFF01
+ 4502              	.L92:
+ 4503 38b1 83BDECF0 		cmpl	$15, -3860(%rbp)
+ 4503      FFFF0F
+ 4504 38b8 0F866DFD 		jbe	.L101
+ 4504      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 4505              		.loc 2 882 0
+ 4506 38be F30F6F85 		movdqu	-3856(%rbp), %xmm0
+ 4506      F0F0FFFF 
+ 4507              	.LBE629:
+ 4508              	.LBE628:
+ 4509              	.LBE627:
+ 4510              	.LBE626:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 4511              		.loc 2 1682 0
+ 4512 38c6 660F7F85 		movdqa	%xmm0, -9936(%rbp)
+ 4512      30D9FFFF 
+ 4513              	.LBB646:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 4514              		.loc 2 1683 0
+ 4515 38ce 660F6F85 		movdqa	-9936(%rbp), %xmm0
+ 4515      30D9FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 166
+
+
+ 4516 38d6 F30F7F85 		movdqu	%xmm0, -8320(%rbp)
+ 4516      80DFFFFF 
+ 4517 38de E8000000 		call	KDbgWriterGet at PLT
+ 4517      00
+ 4518 38e3 4885C0   		testq	%rax, %rax
+ 4519 38e6 7479     		je	.L103
+ 4520 38e8 BF010000 		movl	$1, %edi
+ 4520      00
+ 4521 38ed E8000000 		call	KDbgCondToFlag at PLT
+ 4521      00
+ 4522 38f2 4889C6   		movq	%rax, %rsi
+ 4523 38f5 BF100000 		movl	$16, %edi
+ 4523      00
+ 4524 38fa E8000000 		call	KDbgTestModConds at PLT
+ 4524      00
+ 4525 38ff 84C0     		testb	%al, %al
+ 4526 3901 745E     		je	.L103
+ 4527 3903 8B858CDF 		movl	-8308(%rbp), %eax
+ 4527      FFFF
+ 4528 3909 89C7     		movl	%eax, %edi
+ 4529 390b E8F0C6FF 		call	bswap_32
+ 4529      FF
+ 4530 3910 4189C5   		movl	%eax, %r13d
+ 4531 3913 8B8588DF 		movl	-8312(%rbp), %eax
+ 4531      FFFF
+ 4532 3919 89C7     		movl	%eax, %edi
+ 4533 391b E8E0C6FF 		call	bswap_32
+ 4533      FF
+ 4534 3920 4189C4   		movl	%eax, %r12d
+ 4535 3923 8B8584DF 		movl	-8316(%rbp), %eax
+ 4535      FFFF
+ 4536 3929 89C7     		movl	%eax, %edi
+ 4537 392b E8D0C6FF 		call	bswap_32
+ 4537      FF
+ 4538 3930 89C3     		movl	%eax, %ebx
+ 4539 3932 8B8580DF 		movl	-8320(%rbp), %eax
+ 4539      FFFF
+ 4540 3938 89C7     		movl	%eax, %edi
+ 4541 393a E8C1C6FF 		call	bswap_32
+ 4541      FF
+ 4542 393f 4589E9   		movl	%r13d, %r9d
+ 4543 3942 4589E0   		movl	%r12d, %r8d
+ 4544 3945 89D9     		movl	%ebx, %ecx
+ 4545 3947 89C2     		movl	%eax, %edx
+ 4546 3949 488D3500 		leaq	.LC0(%rip), %rsi
+ 4546      000000
+ 4547 3950 488D3D00 		leaq	.LC1(%rip), %rdi
+ 4547      000000
+ 4548 3957 B8000000 		movl	$0, %eax
+ 4548      00
+ 4549 395c E8000000 		call	KDbgMsg at PLT
+ 4549      00
+ 4550              	.L103:
+ 4551 3961 660F6F85 		movdqa	-9936(%rbp), %xmm0
+ 4551      30D9FFFF 
+ 4552 3969 F30F7F85 		movdqu	%xmm0, -3504(%rbp)
+ 4552      50F2FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 167
+
+
+ 4553              	.LBE646:
+ 4554              	.LBB647:
+ 4555              	.LBB648:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 4556              		.loc 2 667 0
+ 4557 3971 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 4557      00000000 
+ 4558 3979 F30F6F8D 		movdqu	-3504(%rbp), %xmm1
+ 4558      50F2FFFF 
+ 4559 3981 F30F7F8D 		movdqu	%xmm1, -3472(%rbp)
+ 4559      70F2FFFF 
+ 4560 3989 F30F7F85 		movdqu	%xmm0, -3488(%rbp)
+ 4560      60F2FFFF 
+ 4561              	.LBB649:
+ 4562              	.LBB650:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 4563              		.loc 2 380 0
+ 4564 3991 F30F6F85 		movdqu	-3472(%rbp), %xmm0
+ 4564      70F2FFFF 
+ 4565 3999 F30F7F85 		movdqu	%xmm0, -8176(%rbp)
+ 4565      10E0FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 4566              		.loc 2 381 0
+ 4567 39a1 F30F6F85 		movdqu	-3488(%rbp), %xmm0
+ 4567      60F2FFFF 
+ 4568 39a9 F30F7F85 		movdqu	%xmm0, -8192(%rbp)
+ 4568      00E0FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 4569              		.loc 2 383 0
+ 4570 39b1 C7858CF2 		movl	$0, -3444(%rbp)
+ 4570      FFFF0000 
+ 4570      0000
+ 4571 39bb EB5C     		jmp	.L104
+ 4572              	.L107:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 4573              		.loc 2 385 0
+ 4574 39bd 8B858CF2 		movl	-3444(%rbp), %eax
+ 4574      FFFF
+ 4575 39c3 89C0     		mov	%eax, %eax
+ 4576 39c5 0FB68405 		movzbl	-8192(%rbp,%rax), %eax
+ 4576      00E0FFFF 
+ 4577 39cd 84C0     		testb	%al, %al
+ 4578 39cf 7912     		jns	.L105
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 4579              		.loc 2 386 0
+ 4580 39d1 8B858CF2 		movl	-3444(%rbp), %eax
+ 4580      FFFF
+ 4581 39d7 89C0     		mov	%eax, %eax
+ 4582 39d9 C6840520 		movb	$0, -8160(%rbp,%rax)
+ 4582      E0FFFF00 
+ 4583 39e1 EB2F     		jmp	.L106
+ 4584              	.L105:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 4585              		.loc 2 388 0
+ 4586 39e3 8B8D8CF2 		movl	-3444(%rbp), %ecx
+ 4586      FFFF
+ 4587 39e9 8B858CF2 		movl	-3444(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 168
+
+
+ 4587      FFFF
+ 4588 39ef 89C0     		mov	%eax, %eax
+ 4589 39f1 0FB68405 		movzbl	-8192(%rbp,%rax), %eax
+ 4589      00E0FFFF 
+ 4590 39f9 0FB6C0   		movzbl	%al, %eax
+ 4591 39fc 83E00F   		andl	$15, %eax
+ 4592 39ff 4898     		cltq
+ 4593 3a01 0FB69405 		movzbl	-8176(%rbp,%rax), %edx
+ 4593      10E0FFFF 
+ 4594 3a09 89C8     		mov	%ecx, %eax
+ 4595 3a0b 88940520 		movb	%dl, -8160(%rbp,%rax)
+ 4595      E0FFFF
+ 4596              	.L106:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 4597              		.loc 2 383 0
+ 4598 3a12 83858CF2 		addl	$1, -3444(%rbp)
+ 4598      FFFF01
+ 4599              	.L104:
+ 4600 3a19 83BD8CF2 		cmpl	$15, -3444(%rbp)
+ 4600      FFFF0F
+ 4601 3a20 769B     		jbe	.L107
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 4602              		.loc 2 391 0
+ 4603 3a22 F30F6F85 		movdqu	-8160(%rbp), %xmm0
+ 4603      20E0FFFF 
+ 4604              	.LBE650:
+ 4605              	.LBE649:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 4606              		.loc 2 667 0
+ 4607 3a2a F30F7F85 		movdqu	%xmm0, -3504(%rbp)
+ 4607      50F2FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 4608              		.loc 2 668 0
+ 4609 3a32 F30F6F85 		movdqu	-3504(%rbp), %xmm0
+ 4609      50F2FFFF 
+ 4610              	.LBE648:
+ 4611              	.LBE647:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 4612              		.loc 2 1684 0
+ 4613 3a3a 660F7F85 		movdqa	%xmm0, -9936(%rbp)
+ 4613      30D9FFFF 
+ 4614              	.LBB651:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 4615              		.loc 2 1685 0
+ 4616 3a42 660F6F85 		movdqa	-9936(%rbp), %xmm0
+ 4616      30D9FFFF 
+ 4617 3a4a F30F7F85 		movdqu	%xmm0, -8336(%rbp)
+ 4617      70DFFFFF 
+ 4618 3a52 E8000000 		call	KDbgWriterGet at PLT
+ 4618      00
+ 4619 3a57 4885C0   		testq	%rax, %rax
+ 4620 3a5a 7479     		je	.L109
+ 4621 3a5c BF010000 		movl	$1, %edi
+ 4621      00
+ 4622 3a61 E8000000 		call	KDbgCondToFlag at PLT
+ 4622      00
+ 4623 3a66 4889C6   		movq	%rax, %rsi
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 169
+
+
+ 4624 3a69 BF100000 		movl	$16, %edi
+ 4624      00
+ 4625 3a6e E8000000 		call	KDbgTestModConds at PLT
+ 4625      00
+ 4626 3a73 84C0     		testb	%al, %al
+ 4627 3a75 745E     		je	.L109
+ 4628 3a77 8B857CDF 		movl	-8324(%rbp), %eax
+ 4628      FFFF
+ 4629 3a7d 89C7     		movl	%eax, %edi
+ 4630 3a7f E87CC5FF 		call	bswap_32
+ 4630      FF
+ 4631 3a84 4189C5   		movl	%eax, %r13d
+ 4632 3a87 8B8578DF 		movl	-8328(%rbp), %eax
+ 4632      FFFF
+ 4633 3a8d 89C7     		movl	%eax, %edi
+ 4634 3a8f E86CC5FF 		call	bswap_32
+ 4634      FF
+ 4635 3a94 4189C4   		movl	%eax, %r12d
+ 4636 3a97 8B8574DF 		movl	-8332(%rbp), %eax
+ 4636      FFFF
+ 4637 3a9d 89C7     		movl	%eax, %edi
+ 4638 3a9f E85CC5FF 		call	bswap_32
+ 4638      FF
+ 4639 3aa4 89C3     		movl	%eax, %ebx
+ 4640 3aa6 8B8570DF 		movl	-8336(%rbp), %eax
+ 4640      FFFF
+ 4641 3aac 89C7     		movl	%eax, %edi
+ 4642 3aae E84DC5FF 		call	bswap_32
+ 4642      FF
+ 4643 3ab3 4589E9   		movl	%r13d, %r9d
+ 4644 3ab6 4589E0   		movl	%r12d, %r8d
+ 4645 3ab9 89D9     		movl	%ebx, %ecx
+ 4646 3abb 89C2     		movl	%eax, %edx
+ 4647 3abd 488D3500 		leaq	.LC2(%rip), %rsi
+ 4647      000000
+ 4648 3ac4 488D3D00 		leaq	.LC1(%rip), %rdi
+ 4648      000000
+ 4649 3acb B8000000 		movl	$0, %eax
+ 4649      00
+ 4650 3ad0 E8000000 		call	KDbgMsg at PLT
+ 4650      00
+ 4651              	.L109:
+ 4652 3ad5 660F6F85 		movdqa	-9936(%rbp), %xmm0
+ 4652      30D9FFFF 
+ 4653 3add F30F7F85 		movdqu	%xmm0, -3424(%rbp)
+ 4653      A0F2FFFF 
+ 4654 3ae5 660F6F85 		movdqa	-9920(%rbp), %xmm0
+ 4654      40D9FFFF 
+ 4655 3aed F30F7F85 		movdqu	%xmm0, -3440(%rbp)
+ 4655      90F2FFFF 
+ 4656              	.LBE651:
+ 4657              	.LBB652:
+ 4658              	.LBB653:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 4659              		.loc 2 178 0
+ 4660 3af5 F30F6F85 		movdqu	-3440(%rbp), %xmm0
+ 4660      90F2FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 170
+
+
+ 4661 3afd F30F6F8D 		movdqu	-3424(%rbp), %xmm1
+ 4661      A0F2FFFF 
+ 4662 3b05 660FEFC1 		pxor	%xmm1, %xmm0
+ 4663              	.LBE653:
+ 4664              	.LBE652:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 4665              		.loc 2 1686 0
+ 4666 3b09 660F7F85 		movdqa	%xmm0, -9936(%rbp)
+ 4666      30D9FFFF 
+ 4667              	.LBB654:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 4668              		.loc 2 1687 0
+ 4669 3b11 660F6F85 		movdqa	-9936(%rbp), %xmm0
+ 4669      30D9FFFF 
+ 4670 3b19 F30F7F85 		movdqu	%xmm0, -8352(%rbp)
+ 4670      60DFFFFF 
+ 4671 3b21 E8000000 		call	KDbgWriterGet at PLT
+ 4671      00
+ 4672 3b26 4885C0   		testq	%rax, %rax
+ 4673 3b29 7479     		je	.L111
+ 4674 3b2b BF010000 		movl	$1, %edi
+ 4674      00
+ 4675 3b30 E8000000 		call	KDbgCondToFlag at PLT
+ 4675      00
+ 4676 3b35 4889C6   		movq	%rax, %rsi
+ 4677 3b38 BF100000 		movl	$16, %edi
+ 4677      00
+ 4678 3b3d E8000000 		call	KDbgTestModConds at PLT
+ 4678      00
+ 4679 3b42 84C0     		testb	%al, %al
+ 4680 3b44 745E     		je	.L111
+ 4681 3b46 8B856CDF 		movl	-8340(%rbp), %eax
+ 4681      FFFF
+ 4682 3b4c 89C7     		movl	%eax, %edi
+ 4683 3b4e E8ADC4FF 		call	bswap_32
+ 4683      FF
+ 4684 3b53 4189C5   		movl	%eax, %r13d
+ 4685 3b56 8B8568DF 		movl	-8344(%rbp), %eax
+ 4685      FFFF
+ 4686 3b5c 89C7     		movl	%eax, %edi
+ 4687 3b5e E89DC4FF 		call	bswap_32
+ 4687      FF
+ 4688 3b63 4189C4   		movl	%eax, %r12d
+ 4689 3b66 8B8564DF 		movl	-8348(%rbp), %eax
+ 4689      FFFF
+ 4690 3b6c 89C7     		movl	%eax, %edi
+ 4691 3b6e E88DC4FF 		call	bswap_32
+ 4691      FF
+ 4692 3b73 89C3     		movl	%eax, %ebx
+ 4693 3b75 8B8560DF 		movl	-8352(%rbp), %eax
+ 4693      FFFF
+ 4694 3b7b 89C7     		movl	%eax, %edi
+ 4695 3b7d E87EC4FF 		call	bswap_32
+ 4695      FF
+ 4696 3b82 4589E9   		movl	%r13d, %r9d
+ 4697 3b85 4589E0   		movl	%r12d, %r8d
+ 4698 3b88 89D9     		movl	%ebx, %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 171
+
+
+ 4699 3b8a 89C2     		movl	%eax, %edx
+ 4700 3b8c 488D3500 		leaq	.LC3(%rip), %rsi
+ 4700      000000
+ 4701 3b93 488D3D00 		leaq	.LC1(%rip), %rdi
+ 4701      000000
+ 4702 3b9a B8000000 		movl	$0, %eax
+ 4702      00
+ 4703 3b9f E8000000 		call	KDbgMsg at PLT
+ 4703      00
+ 4704              	.L111:
+ 4705 3ba4 660F6F85 		movdqa	-9936(%rbp), %xmm0
+ 4705      30D9FFFF 
+ 4706 3bac F30F7F85 		movdqu	%xmm0, -3408(%rbp)
+ 4706      B0F2FFFF 
+ 4707              	.LBE654:
+ 4708              	.LBB655:
+ 4709              	.LBB656:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 4710              		.loc 2 1357 0
+ 4711 3bb4 F30F6F85 		movdqu	-3408(%rbp), %xmm0
+ 4711      B0F2FFFF 
+ 4712 3bbc F30F7F85 		movdqu	%xmm0, -8144(%rbp)
+ 4712      30E0FFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 4713              		.loc 2 1358 0
+ 4714 3bc4 8B853CE0 		movl	-8132(%rbp), %eax
+ 4714      FFFF
+ 4715 3bca 898538E0 		movl	%eax, -8136(%rbp)
+ 4715      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 4716              		.loc 2 1359 0
+ 4717 3bd0 8B853CE0 		movl	-8132(%rbp), %eax
+ 4717      FFFF
+ 4718 3bd6 898534E0 		movl	%eax, -8140(%rbp)
+ 4718      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 4719              		.loc 2 1360 0
+ 4720 3bdc 8B853CE0 		movl	-8132(%rbp), %eax
+ 4720      FFFF
+ 4721 3be2 898530E0 		movl	%eax, -8144(%rbp)
+ 4721      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 4722              		.loc 2 1361 0
+ 4723 3be8 F30F6F85 		movdqu	-8144(%rbp), %xmm0
+ 4723      30E0FFFF 
+ 4724              	.LBE656:
+ 4725              	.LBE655:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 4726              		.loc 2 1688 0
+ 4727 3bf0 660F7F85 		movdqa	%xmm0, -9936(%rbp)
+ 4727      30D9FFFF 
+ 4728              	.LBB657:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 4729              		.loc 2 1689 0
+ 4730 3bf8 660F6F85 		movdqa	-9936(%rbp), %xmm0
+ 4730      30D9FFFF 
+ 4731 3c00 F30F7F85 		movdqu	%xmm0, -8368(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 172
+
+
+ 4731      50DFFFFF 
+ 4732 3c08 E8000000 		call	KDbgWriterGet at PLT
+ 4732      00
+ 4733 3c0d 4885C0   		testq	%rax, %rax
+ 4734 3c10 7479     		je	.L113
+ 4735 3c12 BF010000 		movl	$1, %edi
+ 4735      00
+ 4736 3c17 E8000000 		call	KDbgCondToFlag at PLT
+ 4736      00
+ 4737 3c1c 4889C6   		movq	%rax, %rsi
+ 4738 3c1f BF100000 		movl	$16, %edi
+ 4738      00
+ 4739 3c24 E8000000 		call	KDbgTestModConds at PLT
+ 4739      00
+ 4740 3c29 84C0     		testb	%al, %al
+ 4741 3c2b 745E     		je	.L113
+ 4742 3c2d 8B855CDF 		movl	-8356(%rbp), %eax
+ 4742      FFFF
+ 4743 3c33 89C7     		movl	%eax, %edi
+ 4744 3c35 E8C6C3FF 		call	bswap_32
+ 4744      FF
+ 4745 3c3a 4189C5   		movl	%eax, %r13d
+ 4746 3c3d 8B8558DF 		movl	-8360(%rbp), %eax
+ 4746      FFFF
+ 4747 3c43 89C7     		movl	%eax, %edi
+ 4748 3c45 E8B6C3FF 		call	bswap_32
+ 4748      FF
+ 4749 3c4a 4189C4   		movl	%eax, %r12d
+ 4750 3c4d 8B8554DF 		movl	-8364(%rbp), %eax
+ 4750      FFFF
+ 4751 3c53 89C7     		movl	%eax, %edi
+ 4752 3c55 E8A6C3FF 		call	bswap_32
+ 4752      FF
+ 4753 3c5a 89C3     		movl	%eax, %ebx
+ 4754 3c5c 8B8550DF 		movl	-8368(%rbp), %eax
+ 4754      FFFF
+ 4755 3c62 89C7     		movl	%eax, %edi
+ 4756 3c64 E897C3FF 		call	bswap_32
+ 4756      FF
+ 4757 3c69 4589E9   		movl	%r13d, %r9d
+ 4758 3c6c 4589E0   		movl	%r12d, %r8d
+ 4759 3c6f 89D9     		movl	%ebx, %ecx
+ 4760 3c71 89C2     		movl	%eax, %edx
+ 4761 3c73 488D3500 		leaq	.LC4(%rip), %rsi
+ 4761      000000
+ 4762 3c7a 488D3D00 		leaq	.LC1(%rip), %rdi
+ 4762      000000
+ 4763 3c81 B8000000 		movl	$0, %eax
+ 4763      00
+ 4764 3c86 E8000000 		call	KDbgMsg at PLT
+ 4764      00
+ 4765              	.L113:
+ 4766              	.LBE657:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 4767              		.loc 2 1690 0
+ 4768 3c8b 660F6F85 		movdqa	-9936(%rbp), %xmm0
+ 4768      30D9FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 173
+
+
+ 4769              	.LBE623:
+ 4770              	.LBE622:
+1748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x10,5);
+ 4771              		.loc 2 1748 0
+ 4772 3c93 F30F7F85 		movdqu	%xmm0, -6624(%rbp)
+ 4772      20E6FFFF 
+ 4773 3c9b F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 4773      10E6FFFF 
+ 4774 3ca3 F30F7F85 		movdqu	%xmm0, -3392(%rbp)
+ 4774      C0F2FFFF 
+ 4775              	.LBB658:
+ 4776              	.LBB659:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 4777              		.loc 2 1565 0
+ 4778 3cab F30F6F85 		movdqu	-3392(%rbp), %xmm0
+ 4778      C0F2FFFF 
+ 4779 3cb3 660F7F85 		movdqa	%xmm0, -9888(%rbp)
+ 4779      60D9FFFF 
+ 4780 3cbb 660F6F85 		movdqa	-9888(%rbp), %xmm0
+ 4780      60D9FFFF 
+ 4781 3cc3 F30F7F85 		movdqu	%xmm0, -3376(%rbp)
+ 4781      D0F2FFFF 
+ 4782              	.LBB660:
+ 4783              	.LBB661:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 4784              		.loc 2 1282 0
+ 4785 3ccb F30F6F85 		movdqu	-3376(%rbp), %xmm0
+ 4785      D0F2FFFF 
+ 4786 3cd3 F30F7F85 		movdqu	%xmm0, -8128(%rbp)
+ 4786      40E0FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 4787              		.loc 2 1283 0
+ 4788 3cdb 8B8548E0 		movl	-8120(%rbp), %eax
+ 4788      FFFF
+ 4789 3ce1 89854CE0 		movl	%eax, -8116(%rbp)
+ 4789      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 4790              		.loc 2 1284 0
+ 4791 3ce7 8B8544E0 		movl	-8124(%rbp), %eax
+ 4791      FFFF
+ 4792 3ced 898548E0 		movl	%eax, -8120(%rbp)
+ 4792      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 4793              		.loc 2 1285 0
+ 4794 3cf3 8B8540E0 		movl	-8128(%rbp), %eax
+ 4794      FFFF
+ 4795 3cf9 898544E0 		movl	%eax, -8124(%rbp)
+ 4795      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 4796              		.loc 2 1286 0
+ 4797 3cff C78540E0 		movl	$0, -8128(%rbp)
+ 4797      FFFF0000 
+ 4797      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 4798              		.loc 2 1287 0
+ 4799 3d09 F30F6F85 		movdqu	-8128(%rbp), %xmm0
+ 4799      40E0FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 174
+
+
+ 4800              	.LBE661:
+ 4801              	.LBE660:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4802              		.loc 2 1567 0
+ 4803 3d11 660F7F85 		movdqa	%xmm0, -9888(%rbp)
+ 4803      60D9FFFF 
+ 4804 3d19 660F6F85 		movdqa	-9888(%rbp), %xmm0
+ 4804      60D9FFFF 
+ 4805 3d21 660FEF85 		pxor	-3392(%rbp), %xmm0
+ 4805      C0F2FFFF 
+ 4806 3d29 F30F7F85 		movdqu	%xmm0, -3392(%rbp)
+ 4806      C0F2FFFF 
+ 4807 3d31 660F6F85 		movdqa	-9888(%rbp), %xmm0
+ 4807      60D9FFFF 
+ 4808 3d39 F30F7F85 		movdqu	%xmm0, -3360(%rbp)
+ 4808      E0F2FFFF 
+ 4809              	.LBB662:
+ 4810              	.LBB663:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 4811              		.loc 2 1282 0
+ 4812 3d41 F30F6F85 		movdqu	-3360(%rbp), %xmm0
+ 4812      E0F2FFFF 
+ 4813 3d49 F30F7F85 		movdqu	%xmm0, -8112(%rbp)
+ 4813      50E0FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 4814              		.loc 2 1283 0
+ 4815 3d51 8B8558E0 		movl	-8104(%rbp), %eax
+ 4815      FFFF
+ 4816 3d57 89855CE0 		movl	%eax, -8100(%rbp)
+ 4816      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 4817              		.loc 2 1284 0
+ 4818 3d5d 8B8554E0 		movl	-8108(%rbp), %eax
+ 4818      FFFF
+ 4819 3d63 898558E0 		movl	%eax, -8104(%rbp)
+ 4819      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 4820              		.loc 2 1285 0
+ 4821 3d69 8B8550E0 		movl	-8112(%rbp), %eax
+ 4821      FFFF
+ 4822 3d6f 898554E0 		movl	%eax, -8108(%rbp)
+ 4822      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 4823              		.loc 2 1286 0
+ 4824 3d75 C78550E0 		movl	$0, -8112(%rbp)
+ 4824      FFFF0000 
+ 4824      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 4825              		.loc 2 1287 0
+ 4826 3d7f F30F6F85 		movdqu	-8112(%rbp), %xmm0
+ 4826      50E0FFFF 
+ 4827              	.LBE663:
+ 4828              	.LBE662:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4829              		.loc 2 1568 0
+ 4830 3d87 660F7F85 		movdqa	%xmm0, -9888(%rbp)
+ 4830      60D9FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 175
+
+
+ 4831 3d8f 660F6F85 		movdqa	-9888(%rbp), %xmm0
+ 4831      60D9FFFF 
+ 4832 3d97 660FEF85 		pxor	-3392(%rbp), %xmm0
+ 4832      C0F2FFFF 
+ 4833 3d9f F30F7F85 		movdqu	%xmm0, -3392(%rbp)
+ 4833      C0F2FFFF 
+ 4834 3da7 660F6F85 		movdqa	-9888(%rbp), %xmm0
+ 4834      60D9FFFF 
+ 4835 3daf F30F7F85 		movdqu	%xmm0, -3344(%rbp)
+ 4835      F0F2FFFF 
+ 4836              	.LBB664:
+ 4837              	.LBB665:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 4838              		.loc 2 1282 0
+ 4839 3db7 F30F6F85 		movdqu	-3344(%rbp), %xmm0
+ 4839      F0F2FFFF 
+ 4840 3dbf F30F7F85 		movdqu	%xmm0, -8096(%rbp)
+ 4840      60E0FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 4841              		.loc 2 1283 0
+ 4842 3dc7 8B8568E0 		movl	-8088(%rbp), %eax
+ 4842      FFFF
+ 4843 3dcd 89856CE0 		movl	%eax, -8084(%rbp)
+ 4843      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 4844              		.loc 2 1284 0
+ 4845 3dd3 8B8564E0 		movl	-8092(%rbp), %eax
+ 4845      FFFF
+ 4846 3dd9 898568E0 		movl	%eax, -8088(%rbp)
+ 4846      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 4847              		.loc 2 1285 0
+ 4848 3ddf 8B8560E0 		movl	-8096(%rbp), %eax
+ 4848      FFFF
+ 4849 3de5 898564E0 		movl	%eax, -8092(%rbp)
+ 4849      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 4850              		.loc 2 1286 0
+ 4851 3deb C78560E0 		movl	$0, -8096(%rbp)
+ 4851      FFFF0000 
+ 4851      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 4852              		.loc 2 1287 0
+ 4853 3df5 F30F6F85 		movdqu	-8096(%rbp), %xmm0
+ 4853      60E0FFFF 
+ 4854              	.LBE665:
+ 4855              	.LBE664:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4856              		.loc 2 1569 0
+ 4857 3dfd 660F7F85 		movdqa	%xmm0, -9888(%rbp)
+ 4857      60D9FFFF 
+ 4858 3e05 660F6F85 		movdqa	-9888(%rbp), %xmm0
+ 4858      60D9FFFF 
+ 4859 3e0d 660FEF85 		pxor	-3392(%rbp), %xmm0
+ 4859      C0F2FFFF 
+ 4860 3e15 F30F7F85 		movdqu	%xmm0, -3392(%rbp)
+ 4860      C0F2FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 176
+
+
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 4861              		.loc 2 1571 0
+ 4862 3e1d F30F6F85 		movdqu	-3392(%rbp), %xmm0
+ 4862      C0F2FFFF 
+ 4863              	.LBE659:
+ 4864              	.LBE658:
+1748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x10,5);
+ 4865              		.loc 2 1748 0
+ 4866 3e25 F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 4866      10E6FFFF 
+ 4867 3e2d F30F6F85 		movdqu	-6624(%rbp), %xmm0
+ 4867      20E6FFFF 
+ 4868 3e35 F30F6F8D 		movdqu	-6640(%rbp), %xmm1
+ 4868      10E6FFFF 
+ 4869 3e3d 660FEFC1 		pxor	%xmm1, %xmm0
+ 4870 3e41 F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 4870      10E6FFFF 
+ 4871 3e49 488B85B8 		movq	-9544(%rbp), %rax
+ 4871      DAFFFF
+ 4872 3e50 4883C050 		addq	$80, %rax
+ 4873 3e54 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 4873      10E6FFFF 
+ 4874 3e5c F30F7F00 		movdqu	%xmm0, (%rax)
+ 4875 3e60 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 4875      10E6FFFF 
+ 4876 3e68 F30F7F85 		movdqu	%xmm0, -3312(%rbp)
+ 4876      10F3FFFF 
+ 4877              	.LBB666:
+ 4878              	.LBB667:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 4879              		.loc 2 1681 0
+ 4880 3e70 B8200000 		movl	$32, %eax
+ 4880      00
+ 4881 3e75 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 4881      00000000 
+ 4882 3e7d F30F7F85 		movdqu	%xmm0, -3280(%rbp)
+ 4882      30F3FFFF 
+ 4883 3e85 89852CF3 		movl	%eax, -3284(%rbp)
+ 4883      FFFF
+ 4884              	.LBB668:
+ 4885              	.LBB669:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 4886              		.loc 2 522 0
+ 4887 3e8b F30F6F85 		movdqu	-3280(%rbp), %xmm0
+ 4887      30F3FFFF 
+ 4888 3e93 F30F7F85 		movdqu	%xmm0, -8016(%rbp)
+ 4888      B0E0FFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 4889              		.loc 2 523 0
+ 4890 3e9b B8030000 		movl	$3, %eax
+ 4890      00
+ 4891 3ea0 4898     		cltq
+ 4892 3ea2 8B952CF3 		movl	-3284(%rbp), %edx
+ 4892      FFFF
+ 4893 3ea8 899485B0 		movl	%edx, -8016(%rbp,%rax,4)
+ 4893      E0FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 177
+
+
+ 4894              		.loc 2 524 0
+ 4895 3eaf F30F6F85 		movdqu	-8016(%rbp), %xmm0
+ 4895      B0E0FFFF 
+ 4896 3eb7 F30F7F85 		movdqu	%xmm0, -3280(%rbp)
+ 4896      30F3FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 4897              		.loc 2 526 0
+ 4898 3ebf F30F6F85 		movdqu	-3280(%rbp), %xmm0
+ 4898      30F3FFFF 
+ 4899              	.LBE669:
+ 4900              	.LBE668:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 4901              		.loc 2 1681 0
+ 4902 3ec7 660F7F85 		movdqa	%xmm0, -9856(%rbp)
+ 4902      80D9FFFF 
+ 4903 3ecf F30F6F85 		movdqu	-3312(%rbp), %xmm0
+ 4903      10F3FFFF 
+ 4904 3ed7 F30F7F85 		movdqu	%xmm0, -3264(%rbp)
+ 4904      40F3FFFF 
+ 4905 3edf F30F6F85 		movdqu	-3264(%rbp), %xmm0
+ 4905      40F3FFFF 
+ 4906 3ee7 F30F7F85 		movdqu	%xmm0, -3232(%rbp)
+ 4906      60F3FFFF 
+ 4907 3eef 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 4907      000000
+ 4908 3ef6 48898558 		movq	%rax, -3240(%rbp)
+ 4908      F3FFFF
+ 4909              	.LBB670:
+ 4910              	.LBB671:
+ 4911              	.LBB672:
+ 4912              	.LBB673:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 4913              		.loc 2 851 0
+ 4914 3efd 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 4914      00000000 
+ 4915 3f05 F30F7F85 		movdqu	%xmm0, -3200(%rbp)
+ 4915      80F3FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 4916              		.loc 2 854 0
+ 4917 3f0d 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 4917      00000000 
+ 4918 3f15 F30F6F8D 		movdqu	-3232(%rbp), %xmm1
+ 4918      60F3FFFF 
+ 4919 3f1d F30F7F8D 		movdqu	%xmm1, -3120(%rbp)
+ 4919      D0F3FFFF 
+ 4920 3f25 F30F7F85 		movdqu	%xmm0, -3136(%rbp)
+ 4920      C0F3FFFF 
+ 4921              	.LBB674:
+ 4922              	.LBB675:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 4923              		.loc 2 206 0
+ 4924 3f2d F30F6F85 		movdqu	-3136(%rbp), %xmm0
+ 4924      C0F3FFFF 
+ 4925 3f35 F30F6F8D 		movdqu	-3120(%rbp), %xmm1
+ 4925      D0F3FFFF 
+ 4926 3f3d 660FDBC1 		pand	%xmm1, %xmm0
+ 4927              	.LBE675:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 178
+
+
+ 4928              	.LBE674:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 4929              		.loc 2 854 0
+ 4930 3f41 F30F7F85 		movdqu	%xmm0, -3152(%rbp)
+ 4930      B0F3FFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 4931              		.loc 2 862 0
+ 4932 3f49 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 4932      00000000 
+ 4933 3f51 F30F6F8D 		movdqu	-3232(%rbp), %xmm1
+ 4933      60F3FFFF 
+ 4934 3f59 F30F7F8D 		movdqu	%xmm1, -3088(%rbp)
+ 4934      F0F3FFFF 
+ 4935 3f61 F30F7F85 		movdqu	%xmm0, -3104(%rbp)
+ 4935      E0F3FFFF 
+ 4936              	.LBB676:
+ 4937              		.loc 2 2642 0
+ 4938 3f69 0FB685F0 		movzbl	-3088(%rbp), %eax
+ 4938      F3FFFF
+ 4939 3f70 0FB695E0 		movzbl	-3104(%rbp), %edx
+ 4939      F3FFFF
+ 4940 3f77 0FB6C0   		movzbl	%al, %eax
+ 4941 3f7a 6689858E 		movw	%ax, -10354(%rbp)
+ 4941      D7FFFF
+ 4942 3f81 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4942      D7FFFF
+ 4943 3f88 F6F2     		divb	%dl
+ 4944 3f8a 4189C7   		movl	%eax, %r15d
+ 4945 3f8d 0FB685F1 		movzbl	-3087(%rbp), %eax
+ 4945      F3FFFF
+ 4946 3f94 0FB695E1 		movzbl	-3103(%rbp), %edx
+ 4946      F3FFFF
+ 4947 3f9b 0FB6C0   		movzbl	%al, %eax
+ 4948 3f9e 6689858E 		movw	%ax, -10354(%rbp)
+ 4948      D7FFFF
+ 4949 3fa5 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4949      D7FFFF
+ 4950 3fac F6F2     		divb	%dl
+ 4951 3fae 88859FD9 		movb	%al, -9825(%rbp)
+ 4951      FFFF
+ 4952 3fb4 0FB685F2 		movzbl	-3086(%rbp), %eax
+ 4952      F3FFFF
+ 4953 3fbb 0FB695E2 		movzbl	-3102(%rbp), %edx
+ 4953      F3FFFF
+ 4954 3fc2 0FB6C0   		movzbl	%al, %eax
+ 4955 3fc5 6689858E 		movw	%ax, -10354(%rbp)
+ 4955      D7FFFF
+ 4956 3fcc 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4956      D7FFFF
+ 4957 3fd3 F6F2     		divb	%dl
+ 4958 3fd5 88859ED9 		movb	%al, -9826(%rbp)
+ 4958      FFFF
+ 4959 3fdb 0FB685F3 		movzbl	-3085(%rbp), %eax
+ 4959      F3FFFF
+ 4960 3fe2 0FB695E3 		movzbl	-3101(%rbp), %edx
+ 4960      F3FFFF
+ 4961 3fe9 0FB6C0   		movzbl	%al, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 179
+
+
+ 4962 3fec 6689858E 		movw	%ax, -10354(%rbp)
+ 4962      D7FFFF
+ 4963 3ff3 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4963      D7FFFF
+ 4964 3ffa F6F2     		divb	%dl
+ 4965 3ffc 88859DD9 		movb	%al, -9827(%rbp)
+ 4965      FFFF
+ 4966 4002 0FB685F4 		movzbl	-3084(%rbp), %eax
+ 4966      F3FFFF
+ 4967 4009 0FB695E4 		movzbl	-3100(%rbp), %edx
+ 4967      F3FFFF
+ 4968 4010 0FB6C0   		movzbl	%al, %eax
+ 4969 4013 6689858E 		movw	%ax, -10354(%rbp)
+ 4969      D7FFFF
+ 4970 401a 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4970      D7FFFF
+ 4971 4021 F6F2     		divb	%dl
+ 4972 4023 88859CD9 		movb	%al, -9828(%rbp)
+ 4972      FFFF
+ 4973 4029 0FB685F5 		movzbl	-3083(%rbp), %eax
+ 4973      F3FFFF
+ 4974 4030 0FB695E5 		movzbl	-3099(%rbp), %edx
+ 4974      F3FFFF
+ 4975 4037 0FB6C0   		movzbl	%al, %eax
+ 4976 403a 6689858E 		movw	%ax, -10354(%rbp)
+ 4976      D7FFFF
+ 4977 4041 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4977      D7FFFF
+ 4978 4048 F6F2     		divb	%dl
+ 4979 404a 4189C1   		movl	%eax, %r9d
+ 4980 404d 0FB685F6 		movzbl	-3082(%rbp), %eax
+ 4980      F3FFFF
+ 4981 4054 0FB695E6 		movzbl	-3098(%rbp), %edx
+ 4981      F3FFFF
+ 4982 405b 0FB6C0   		movzbl	%al, %eax
+ 4983 405e 6689858E 		movw	%ax, -10354(%rbp)
+ 4983      D7FFFF
+ 4984 4065 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4984      D7FFFF
+ 4985 406c F6F2     		divb	%dl
+ 4986 406e 89C7     		movl	%eax, %edi
+ 4987 4070 0FB685F7 		movzbl	-3081(%rbp), %eax
+ 4987      F3FFFF
+ 4988 4077 0FB695E7 		movzbl	-3097(%rbp), %edx
+ 4988      F3FFFF
+ 4989 407e 0FB6C0   		movzbl	%al, %eax
+ 4990 4081 6689858E 		movw	%ax, -10354(%rbp)
+ 4990      D7FFFF
+ 4991 4088 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4991      D7FFFF
+ 4992 408f F6F2     		divb	%dl
+ 4993 4091 89C3     		movl	%eax, %ebx
+ 4994 4093 0FB685F8 		movzbl	-3080(%rbp), %eax
+ 4994      F3FFFF
+ 4995 409a 0FB695E8 		movzbl	-3096(%rbp), %edx
+ 4995      F3FFFF
+ 4996 40a1 0FB6C0   		movzbl	%al, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 180
+
+
+ 4997 40a4 6689858E 		movw	%ax, -10354(%rbp)
+ 4997      D7FFFF
+ 4998 40ab 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 4998      D7FFFF
+ 4999 40b2 F6F2     		divb	%dl
+ 5000 40b4 4189C2   		movl	%eax, %r10d
+ 5001 40b7 0FB685F9 		movzbl	-3079(%rbp), %eax
+ 5001      F3FFFF
+ 5002 40be 0FB695E9 		movzbl	-3095(%rbp), %edx
+ 5002      F3FFFF
+ 5003 40c5 0FB6C0   		movzbl	%al, %eax
+ 5004 40c8 6689858E 		movw	%ax, -10354(%rbp)
+ 5004      D7FFFF
+ 5005 40cf 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5005      D7FFFF
+ 5006 40d6 F6F2     		divb	%dl
+ 5007 40d8 4189C3   		movl	%eax, %r11d
+ 5008 40db 0FB685FA 		movzbl	-3078(%rbp), %eax
+ 5008      F3FFFF
+ 5009 40e2 0FB695EA 		movzbl	-3094(%rbp), %edx
+ 5009      F3FFFF
+ 5010 40e9 0FB6C0   		movzbl	%al, %eax
+ 5011 40ec 6689858E 		movw	%ax, -10354(%rbp)
+ 5011      D7FFFF
+ 5012 40f3 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5012      D7FFFF
+ 5013 40fa F6F2     		divb	%dl
+ 5014 40fc 4189C4   		movl	%eax, %r12d
+ 5015 40ff 0FB685FB 		movzbl	-3077(%rbp), %eax
+ 5015      F3FFFF
+ 5016 4106 0FB695EB 		movzbl	-3093(%rbp), %edx
+ 5016      F3FFFF
+ 5017 410d 0FB6C0   		movzbl	%al, %eax
+ 5018 4110 6689858E 		movw	%ax, -10354(%rbp)
+ 5018      D7FFFF
+ 5019 4117 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5019      D7FFFF
+ 5020 411e F6F2     		divb	%dl
+ 5021 4120 4189C5   		movl	%eax, %r13d
+ 5022 4123 0FB685FC 		movzbl	-3076(%rbp), %eax
+ 5022      F3FFFF
+ 5023 412a 0FB695EC 		movzbl	-3092(%rbp), %edx
+ 5023      F3FFFF
+ 5024 4131 0FB6C0   		movzbl	%al, %eax
+ 5025 4134 6689858E 		movw	%ax, -10354(%rbp)
+ 5025      D7FFFF
+ 5026 413b 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5026      D7FFFF
+ 5027 4142 F6F2     		divb	%dl
+ 5028 4144 4189C6   		movl	%eax, %r14d
+ 5029 4147 0FB685FD 		movzbl	-3075(%rbp), %eax
+ 5029      F3FFFF
+ 5030 414e 0FB695ED 		movzbl	-3091(%rbp), %edx
+ 5030      F3FFFF
+ 5031 4155 0FB6C0   		movzbl	%al, %eax
+ 5032 4158 6689858E 		movw	%ax, -10354(%rbp)
+ 5032      D7FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 181
+
+
+ 5033 415f 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5033      D7FFFF
+ 5034 4166 F6F2     		divb	%dl
+ 5035 4168 4189C0   		movl	%eax, %r8d
+ 5036 416b 0FB685FE 		movzbl	-3074(%rbp), %eax
+ 5036      F3FFFF
+ 5037 4172 0FB695EE 		movzbl	-3090(%rbp), %edx
+ 5037      F3FFFF
+ 5038 4179 0FB6C0   		movzbl	%al, %eax
+ 5039 417c 6689858E 		movw	%ax, -10354(%rbp)
+ 5039      D7FFFF
+ 5040 4183 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5040      D7FFFF
+ 5041 418a F6F2     		divb	%dl
+ 5042 418c 89C6     		movl	%eax, %esi
+ 5043 418e 0FB685FF 		movzbl	-3073(%rbp), %eax
+ 5043      F3FFFF
+ 5044 4195 0FB695EF 		movzbl	-3089(%rbp), %edx
+ 5044      F3FFFF
+ 5045 419c 0FB6C0   		movzbl	%al, %eax
+ 5046 419f 6689858E 		movw	%ax, -10354(%rbp)
+ 5046      D7FFFF
+ 5047 41a6 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5047      D7FFFF
+ 5048 41ad F6F2     		divb	%dl
+ 5049 41af 89C1     		movl	%eax, %ecx
+ 5050              	.LBB677:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 5051              		.loc 2 346 0
+ 5052 41b1 0FB6D3   		movzbl	%bl, %edx
+ 5053 41b4 400FB6C7 		movzbl	%dil, %eax
+ 5054 41b8 48C1E208 		salq	$8, %rdx
+ 5055 41bc 4809C2   		orq	%rax, %rdx
+ 5056 41bf 410FB6C1 		movzbl	%r9b, %eax
+ 5057 41c3 48C1E208 		salq	$8, %rdx
+ 5058 41c7 4809C2   		orq	%rax, %rdx
+ 5059 41ca 0FB6859C 		movzbl	-9828(%rbp), %eax
+ 5059      D9FFFF
+ 5060 41d1 48C1E208 		salq	$8, %rdx
+ 5061 41d5 4809C2   		orq	%rax, %rdx
+ 5062 41d8 0FB6859D 		movzbl	-9827(%rbp), %eax
+ 5062      D9FFFF
+ 5063 41df 48C1E208 		salq	$8, %rdx
+ 5064 41e3 4809C2   		orq	%rax, %rdx
+ 5065 41e6 0FB6859E 		movzbl	-9826(%rbp), %eax
+ 5065      D9FFFF
+ 5066 41ed 48C1E208 		salq	$8, %rdx
+ 5067 41f1 4809C2   		orq	%rax, %rdx
+ 5068 41f4 0FB6859F 		movzbl	-9825(%rbp), %eax
+ 5068      D9FFFF
+ 5069 41fb 48C1E208 		salq	$8, %rdx
+ 5070 41ff 4809C2   		orq	%rax, %rdx
+ 5071 4202 410FB6C7 		movzbl	%r15b, %eax
+ 5072 4206 48C1E208 		salq	$8, %rdx
+ 5073 420a 4809C2   		orq	%rax, %rdx
+ 5074 420d 0FB6C1   		movzbl	%cl, %eax
+ 5075 4210 400FB6CE 		movzbl	%sil, %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 182
+
+
+ 5076 4214 48C1E008 		salq	$8, %rax
+ 5077 4218 4809C8   		orq	%rcx, %rax
+ 5078 421b 410FB6C8 		movzbl	%r8b, %ecx
+ 5079 421f 48C1E008 		salq	$8, %rax
+ 5080 4223 4809C8   		orq	%rcx, %rax
+ 5081 4226 410FB6CE 		movzbl	%r14b, %ecx
+ 5082 422a 48C1E008 		salq	$8, %rax
+ 5083 422e 4809C8   		orq	%rcx, %rax
+ 5084 4231 410FB6CD 		movzbl	%r13b, %ecx
+ 5085 4235 48C1E008 		salq	$8, %rax
+ 5086 4239 4809C8   		orq	%rcx, %rax
+ 5087 423c 410FB6CC 		movzbl	%r12b, %ecx
+ 5088 4240 48C1E008 		salq	$8, %rax
+ 5089 4244 4809C8   		orq	%rcx, %rax
+ 5090 4247 410FB6CB 		movzbl	%r11b, %ecx
+ 5091 424b 48C1E008 		salq	$8, %rax
+ 5092 424f 4809C8   		orq	%rcx, %rax
+ 5093 4252 410FB6CA 		movzbl	%r10b, %ecx
+ 5094 4256 48C1E008 		salq	$8, %rax
+ 5095 425a 4809C8   		orq	%rcx, %rax
+ 5096 425d 488995D0 		movq	%rdx, -10288(%rbp)
+ 5096      D7FFFF
+ 5097 4264 488985D8 		movq	%rax, -10280(%rbp)
+ 5097      D7FFFF
+ 5098 426b 660F6F85 		movdqa	-10288(%rbp), %xmm0
+ 5098      D0D7FFFF 
+ 5099              	.LBE677:
+ 5100              	.LBE676:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 5101              		.loc 2 862 0
+ 5102 4273 F30F7F85 		movdqu	%xmm0, -3168(%rbp)
+ 5102      A0F3FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 5103              		.loc 2 866 0
+ 5104 427b C7857CF3 		movl	$0, -3204(%rbp)
+ 5104      FFFF0000 
+ 5104      0000
+ 5105 4285 E9860200 		jmp	.L114
+ 5105      00
+ 5106              	.L123:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 5107              		.loc 2 868 0
+ 5108 428a 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 5108      00000000 
+ 5109 4292 F30F7F85 		movdqu	%xmm0, -3056(%rbp)
+ 5109      10F4FFFF 
+ 5110 429a F30F6F85 		movdqu	-3168(%rbp), %xmm0
+ 5110      A0F3FFFF 
+ 5111 42a2 F30F7F85 		movdqu	%xmm0, -3072(%rbp)
+ 5111      00F4FFFF 
+ 5112              	.LBB678:
+ 5113              	.LBB679:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 5114              		.loc 2 380 0
+ 5115 42aa F30F6F85 		movdqu	-3056(%rbp), %xmm0
+ 5115      10F4FFFF 
+ 5116 42b2 F30F7F85 		movdqu	%xmm0, -7984(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 183
+
+
+ 5116      D0E0FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 5117              		.loc 2 381 0
+ 5118 42ba F30F6F85 		movdqu	-3072(%rbp), %xmm0
+ 5118      00F4FFFF 
+ 5119 42c2 F30F7F85 		movdqu	%xmm0, -8000(%rbp)
+ 5119      C0E0FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 5120              		.loc 2 383 0
+ 5121 42ca C7852CF4 		movl	$0, -3028(%rbp)
+ 5121      FFFF0000 
+ 5121      0000
+ 5122 42d4 EB5C     		jmp	.L115
+ 5123              	.L118:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 5124              		.loc 2 385 0
+ 5125 42d6 8B852CF4 		movl	-3028(%rbp), %eax
+ 5125      FFFF
+ 5126 42dc 89C0     		mov	%eax, %eax
+ 5127 42de 0FB68405 		movzbl	-8000(%rbp,%rax), %eax
+ 5127      C0E0FFFF 
+ 5128 42e6 84C0     		testb	%al, %al
+ 5129 42e8 7912     		jns	.L116
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 5130              		.loc 2 386 0
+ 5131 42ea 8B852CF4 		movl	-3028(%rbp), %eax
+ 5131      FFFF
+ 5132 42f0 89C0     		mov	%eax, %eax
+ 5133 42f2 C68405E0 		movb	$0, -7968(%rbp,%rax)
+ 5133      E0FFFF00 
+ 5134 42fa EB2F     		jmp	.L117
+ 5135              	.L116:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 5136              		.loc 2 388 0
+ 5137 42fc 8B8D2CF4 		movl	-3028(%rbp), %ecx
+ 5137      FFFF
+ 5138 4302 8B852CF4 		movl	-3028(%rbp), %eax
+ 5138      FFFF
+ 5139 4308 89C0     		mov	%eax, %eax
+ 5140 430a 0FB68405 		movzbl	-8000(%rbp,%rax), %eax
+ 5140      C0E0FFFF 
+ 5141 4312 0FB6C0   		movzbl	%al, %eax
+ 5142 4315 83E00F   		andl	$15, %eax
+ 5143 4318 4898     		cltq
+ 5144 431a 0FB69405 		movzbl	-7984(%rbp,%rax), %edx
+ 5144      D0E0FFFF 
+ 5145 4322 89C8     		mov	%ecx, %eax
+ 5146 4324 889405E0 		movb	%dl, -7968(%rbp,%rax)
+ 5146      E0FFFF
+ 5147              	.L117:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 5148              		.loc 2 383 0
+ 5149 432b 83852CF4 		addl	$1, -3028(%rbp)
+ 5149      FFFF01
+ 5150              	.L115:
+ 5151 4332 83BD2CF4 		cmpl	$15, -3028(%rbp)
+ 5151      FFFF0F
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 184
+
+
+ 5152 4339 769B     		jbe	.L118
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 5153              		.loc 2 391 0
+ 5154 433b F30F6F85 		movdqu	-7968(%rbp), %xmm0
+ 5154      E0E0FFFF 
+ 5155              	.LBE679:
+ 5156              	.LBE678:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 5157              		.loc 2 868 0
+ 5158 4343 F30F7F85 		movdqu	%xmm0, -3184(%rbp)
+ 5158      90F3FFFF 
+ 5159 434b F30F6F85 		movdqu	-3152(%rbp), %xmm0
+ 5159      B0F3FFFF 
+ 5160 4353 F30F7F85 		movdqu	%xmm0, -3008(%rbp)
+ 5160      40F4FFFF 
+ 5161 435b F30F6F85 		movdqu	-3184(%rbp), %xmm0
+ 5161      90F3FFFF 
+ 5162 4363 F30F7F85 		movdqu	%xmm0, -3024(%rbp)
+ 5162      30F4FFFF 
+ 5163              	.LBB680:
+ 5164              	.LBB681:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 5165              		.loc 2 234 0
+ 5166 436b F30F6F85 		movdqu	-3024(%rbp), %xmm0
+ 5166      30F4FFFF 
+ 5167 4373 F30F6F8D 		movdqu	-3008(%rbp), %xmm1
+ 5167      40F4FFFF 
+ 5168 437b 660FEBC1 		por	%xmm1, %xmm0
+ 5169              	.LBE681:
+ 5170              	.LBE680:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 5171              		.loc 2 870 0
+ 5172 437f F30F7F85 		movdqu	%xmm0, -3184(%rbp)
+ 5172      90F3FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 5173              		.loc 2 872 0
+ 5174 4387 8B857CF3 		mov	-3204(%rbp), %eax
+ 5174      FFFF
+ 5175 438d 48C1E004 		salq	$4, %rax
+ 5176 4391 48038558 		addq	-3240(%rbp), %rax
+ 5176      F3FFFF
+ 5177 4398 660F6F00 		movdqa	(%rax), %xmm0
+ 5178 439c F30F7F85 		movdqu	%xmm0, -2976(%rbp)
+ 5178      60F4FFFF 
+ 5179 43a4 F30F6F85 		movdqu	-3184(%rbp), %xmm0
+ 5179      90F3FFFF 
+ 5180 43ac F30F7F85 		movdqu	%xmm0, -2992(%rbp)
+ 5180      50F4FFFF 
+ 5181              	.LBB682:
+ 5182              	.LBB683:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 5183              		.loc 2 380 0
+ 5184 43b4 F30F6F85 		movdqu	-2976(%rbp), %xmm0
+ 5184      60F4FFFF 
+ 5185 43bc F30F7F85 		movdqu	%xmm0, -7936(%rbp)
+ 5185      00E1FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 185
+
+
+ 5186              		.loc 2 381 0
+ 5187 43c4 F30F6F85 		movdqu	-2992(%rbp), %xmm0
+ 5187      50F4FFFF 
+ 5188 43cc F30F7F85 		movdqu	%xmm0, -7952(%rbp)
+ 5188      F0E0FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 5189              		.loc 2 383 0
+ 5190 43d4 C7857CF4 		movl	$0, -2948(%rbp)
+ 5190      FFFF0000 
+ 5190      0000
+ 5191 43de EB5C     		jmp	.L119
+ 5192              	.L122:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 5193              		.loc 2 385 0
+ 5194 43e0 8B857CF4 		movl	-2948(%rbp), %eax
+ 5194      FFFF
+ 5195 43e6 89C0     		mov	%eax, %eax
+ 5196 43e8 0FB68405 		movzbl	-7952(%rbp,%rax), %eax
+ 5196      F0E0FFFF 
+ 5197 43f0 84C0     		testb	%al, %al
+ 5198 43f2 7912     		jns	.L120
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 5199              		.loc 2 386 0
+ 5200 43f4 8B857CF4 		movl	-2948(%rbp), %eax
+ 5200      FFFF
+ 5201 43fa 89C0     		mov	%eax, %eax
+ 5202 43fc C6840510 		movb	$0, -7920(%rbp,%rax)
+ 5202      E1FFFF00 
+ 5203 4404 EB2F     		jmp	.L121
+ 5204              	.L120:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 5205              		.loc 2 388 0
+ 5206 4406 8B8D7CF4 		movl	-2948(%rbp), %ecx
+ 5206      FFFF
+ 5207 440c 8B857CF4 		movl	-2948(%rbp), %eax
+ 5207      FFFF
+ 5208 4412 89C0     		mov	%eax, %eax
+ 5209 4414 0FB68405 		movzbl	-7952(%rbp,%rax), %eax
+ 5209      F0E0FFFF 
+ 5210 441c 0FB6C0   		movzbl	%al, %eax
+ 5211 441f 83E00F   		andl	$15, %eax
+ 5212 4422 4898     		cltq
+ 5213 4424 0FB69405 		movzbl	-7936(%rbp,%rax), %edx
+ 5213      00E1FFFF 
+ 5214 442c 89C8     		mov	%ecx, %eax
+ 5215 442e 88940510 		movb	%dl, -7920(%rbp,%rax)
+ 5215      E1FFFF
+ 5216              	.L121:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 5217              		.loc 2 383 0
+ 5218 4435 83857CF4 		addl	$1, -2948(%rbp)
+ 5218      FFFF01
+ 5219              	.L119:
+ 5220 443c 83BD7CF4 		cmpl	$15, -2948(%rbp)
+ 5220      FFFF0F
+ 5221 4443 769B     		jbe	.L122
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 186
+
+
+ 5222              		.loc 2 391 0
+ 5223 4445 F30F6F85 		movdqu	-7920(%rbp), %xmm0
+ 5223      10E1FFFF 
+ 5224              	.LBE683:
+ 5225              	.LBE682:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 5226              		.loc 2 872 0
+ 5227 444d F30F7F85 		movdqu	%xmm0, -3184(%rbp)
+ 5227      90F3FFFF 
+ 5228 4455 F30F6F85 		movdqu	-3200(%rbp), %xmm0
+ 5228      80F3FFFF 
+ 5229 445d F30F7F85 		movdqu	%xmm0, -2928(%rbp)
+ 5229      90F4FFFF 
+ 5230 4465 F30F6F85 		movdqu	-3184(%rbp), %xmm0
+ 5230      90F3FFFF 
+ 5231 446d F30F7F85 		movdqu	%xmm0, -2944(%rbp)
+ 5231      80F4FFFF 
+ 5232              	.LBB684:
+ 5233              	.LBB685:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 5234              		.loc 2 234 0
+ 5235 4475 F30F6F85 		movdqu	-2944(%rbp), %xmm0
+ 5235      80F4FFFF 
+ 5236 447d F30F6F8D 		movdqu	-2928(%rbp), %xmm1
+ 5236      90F4FFFF 
+ 5237 4485 660FEBC1 		por	%xmm1, %xmm0
+ 5238              	.LBE685:
+ 5239              	.LBE684:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 5240              		.loc 2 874 0
+ 5241 4489 F30F7F85 		movdqu	%xmm0, -3200(%rbp)
+ 5241      80F3FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 5242              		.loc 2 876 0
+ 5243 4491 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 5243      00000000 
+ 5244 4499 F30F6F8D 		movdqu	-3168(%rbp), %xmm1
+ 5244      A0F3FFFF 
+ 5245 44a1 F30F7F8D 		movdqu	%xmm1, -2896(%rbp)
+ 5245      B0F4FFFF 
+ 5246 44a9 F30F7F85 		movdqu	%xmm0, -2912(%rbp)
+ 5246      A0F4FFFF 
+ 5247              	.LBB686:
+ 5248              	.LBB687:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 5249              		.loc 2 290 0
+ 5250 44b1 F30F6F8D 		movdqu	-2912(%rbp), %xmm1
+ 5250      A0F4FFFF 
+ 5251 44b9 F30F6F85 		movdqu	-2896(%rbp), %xmm0
+ 5251      B0F4FFFF 
+ 5252 44c1 660FF8C1 		psubb	%xmm1, %xmm0
+ 5253              	.LBE687:
+ 5254              	.LBE686:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 5255              		.loc 2 876 0
+ 5256 44c5 F30F7F85 		movdqu	%xmm0, -3168(%rbp)
+ 5256      A0F3FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 187
+
+
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 5257              		.loc 2 878 0
+ 5258 44cd 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 5258      00000000 
+ 5259 44d5 F30F6F8D 		movdqu	-3168(%rbp), %xmm1
+ 5259      A0F3FFFF 
+ 5260 44dd F30F7F8D 		movdqu	%xmm1, -2864(%rbp)
+ 5260      D0F4FFFF 
+ 5261 44e5 F30F7F85 		movdqu	%xmm0, -2880(%rbp)
+ 5261      C0F4FFFF 
+ 5262              	.LBB688:
+ 5263              	.LBB689:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 5264              		.loc 2 206 0
+ 5265 44ed F30F6F85 		movdqu	-2880(%rbp), %xmm0
+ 5265      C0F4FFFF 
+ 5266 44f5 F30F6F8D 		movdqu	-2864(%rbp), %xmm1
+ 5266      D0F4FFFF 
+ 5267 44fd 660FDBC1 		pand	%xmm1, %xmm0
+ 5268              	.LBE689:
+ 5269              	.LBE688:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 5270              		.loc 2 878 0
+ 5271 4501 F30F7F85 		movdqu	%xmm0, -3168(%rbp)
+ 5271      A0F3FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 5272              		.loc 2 866 0
+ 5273 4509 83857CF3 		addl	$1, -3204(%rbp)
+ 5273      FFFF01
+ 5274              	.L114:
+ 5275 4510 83BD7CF3 		cmpl	$15, -3204(%rbp)
+ 5275      FFFF0F
+ 5276 4517 0F866DFD 		jbe	.L123
+ 5276      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 5277              		.loc 2 882 0
+ 5278 451d F30F6F85 		movdqu	-3200(%rbp), %xmm0
+ 5278      80F3FFFF 
+ 5279              	.LBE673:
+ 5280              	.LBE672:
+ 5281              	.LBE671:
+ 5282              	.LBE670:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 5283              		.loc 2 1682 0
+ 5284 4525 660F7F85 		movdqa	%xmm0, -9872(%rbp)
+ 5284      70D9FFFF 
+ 5285              	.LBB690:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 5286              		.loc 2 1683 0
+ 5287 452d 660F6F85 		movdqa	-9872(%rbp), %xmm0
+ 5287      70D9FFFF 
+ 5288 4535 F30F7F85 		movdqu	%xmm0, -8032(%rbp)
+ 5288      A0E0FFFF 
+ 5289 453d E8000000 		call	KDbgWriterGet at PLT
+ 5289      00
+ 5290 4542 4885C0   		testq	%rax, %rax
+ 5291 4545 7479     		je	.L125
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 188
+
+
+ 5292 4547 BF010000 		movl	$1, %edi
+ 5292      00
+ 5293 454c E8000000 		call	KDbgCondToFlag at PLT
+ 5293      00
+ 5294 4551 4889C6   		movq	%rax, %rsi
+ 5295 4554 BF100000 		movl	$16, %edi
+ 5295      00
+ 5296 4559 E8000000 		call	KDbgTestModConds at PLT
+ 5296      00
+ 5297 455e 84C0     		testb	%al, %al
+ 5298 4560 745E     		je	.L125
+ 5299 4562 8B85ACE0 		movl	-8020(%rbp), %eax
+ 5299      FFFF
+ 5300 4568 89C7     		movl	%eax, %edi
+ 5301 456a E891BAFF 		call	bswap_32
+ 5301      FF
+ 5302 456f 4189C5   		movl	%eax, %r13d
+ 5303 4572 8B85A8E0 		movl	-8024(%rbp), %eax
+ 5303      FFFF
+ 5304 4578 89C7     		movl	%eax, %edi
+ 5305 457a E881BAFF 		call	bswap_32
+ 5305      FF
+ 5306 457f 4189C4   		movl	%eax, %r12d
+ 5307 4582 8B85A4E0 		movl	-8028(%rbp), %eax
+ 5307      FFFF
+ 5308 4588 89C7     		movl	%eax, %edi
+ 5309 458a E871BAFF 		call	bswap_32
+ 5309      FF
+ 5310 458f 89C3     		movl	%eax, %ebx
+ 5311 4591 8B85A0E0 		movl	-8032(%rbp), %eax
+ 5311      FFFF
+ 5312 4597 89C7     		movl	%eax, %edi
+ 5313 4599 E862BAFF 		call	bswap_32
+ 5313      FF
+ 5314 459e 4589E9   		movl	%r13d, %r9d
+ 5315 45a1 4589E0   		movl	%r12d, %r8d
+ 5316 45a4 89D9     		movl	%ebx, %ecx
+ 5317 45a6 89C2     		movl	%eax, %edx
+ 5318 45a8 488D3500 		leaq	.LC0(%rip), %rsi
+ 5318      000000
+ 5319 45af 488D3D00 		leaq	.LC1(%rip), %rdi
+ 5319      000000
+ 5320 45b6 B8000000 		movl	$0, %eax
+ 5320      00
+ 5321 45bb E8000000 		call	KDbgMsg at PLT
+ 5321      00
+ 5322              	.L125:
+ 5323 45c0 660F6F85 		movdqa	-9872(%rbp), %xmm0
+ 5323      70D9FFFF 
+ 5324 45c8 F30F7F85 		movdqu	%xmm0, -2848(%rbp)
+ 5324      E0F4FFFF 
+ 5325              	.LBE690:
+ 5326              	.LBB691:
+ 5327              	.LBB692:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 5328              		.loc 2 667 0
+ 5329 45d0 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 189
+
+
+ 5329      00000000 
+ 5330 45d8 F30F6F8D 		movdqu	-2848(%rbp), %xmm1
+ 5330      E0F4FFFF 
+ 5331 45e0 F30F7F8D 		movdqu	%xmm1, -2816(%rbp)
+ 5331      00F5FFFF 
+ 5332 45e8 F30F7F85 		movdqu	%xmm0, -2832(%rbp)
+ 5332      F0F4FFFF 
+ 5333              	.LBB693:
+ 5334              	.LBB694:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 5335              		.loc 2 380 0
+ 5336 45f0 F30F6F85 		movdqu	-2816(%rbp), %xmm0
+ 5336      00F5FFFF 
+ 5337 45f8 F30F7F85 		movdqu	%xmm0, -7888(%rbp)
+ 5337      30E1FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 5338              		.loc 2 381 0
+ 5339 4600 F30F6F85 		movdqu	-2832(%rbp), %xmm0
+ 5339      F0F4FFFF 
+ 5340 4608 F30F7F85 		movdqu	%xmm0, -7904(%rbp)
+ 5340      20E1FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 5341              		.loc 2 383 0
+ 5342 4610 C7851CF5 		movl	$0, -2788(%rbp)
+ 5342      FFFF0000 
+ 5342      0000
+ 5343 461a EB5C     		jmp	.L126
+ 5344              	.L129:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 5345              		.loc 2 385 0
+ 5346 461c 8B851CF5 		movl	-2788(%rbp), %eax
+ 5346      FFFF
+ 5347 4622 89C0     		mov	%eax, %eax
+ 5348 4624 0FB68405 		movzbl	-7904(%rbp,%rax), %eax
+ 5348      20E1FFFF 
+ 5349 462c 84C0     		testb	%al, %al
+ 5350 462e 7912     		jns	.L127
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 5351              		.loc 2 386 0
+ 5352 4630 8B851CF5 		movl	-2788(%rbp), %eax
+ 5352      FFFF
+ 5353 4636 89C0     		mov	%eax, %eax
+ 5354 4638 C6840540 		movb	$0, -7872(%rbp,%rax)
+ 5354      E1FFFF00 
+ 5355 4640 EB2F     		jmp	.L128
+ 5356              	.L127:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 5357              		.loc 2 388 0
+ 5358 4642 8B8D1CF5 		movl	-2788(%rbp), %ecx
+ 5358      FFFF
+ 5359 4648 8B851CF5 		movl	-2788(%rbp), %eax
+ 5359      FFFF
+ 5360 464e 89C0     		mov	%eax, %eax
+ 5361 4650 0FB68405 		movzbl	-7904(%rbp,%rax), %eax
+ 5361      20E1FFFF 
+ 5362 4658 0FB6C0   		movzbl	%al, %eax
+ 5363 465b 83E00F   		andl	$15, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 190
+
+
+ 5364 465e 4898     		cltq
+ 5365 4660 0FB69405 		movzbl	-7888(%rbp,%rax), %edx
+ 5365      30E1FFFF 
+ 5366 4668 89C8     		mov	%ecx, %eax
+ 5367 466a 88940540 		movb	%dl, -7872(%rbp,%rax)
+ 5367      E1FFFF
+ 5368              	.L128:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 5369              		.loc 2 383 0
+ 5370 4671 83851CF5 		addl	$1, -2788(%rbp)
+ 5370      FFFF01
+ 5371              	.L126:
+ 5372 4678 83BD1CF5 		cmpl	$15, -2788(%rbp)
+ 5372      FFFF0F
+ 5373 467f 769B     		jbe	.L129
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 5374              		.loc 2 391 0
+ 5375 4681 F30F6F85 		movdqu	-7872(%rbp), %xmm0
+ 5375      40E1FFFF 
+ 5376              	.LBE694:
+ 5377              	.LBE693:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 5378              		.loc 2 667 0
+ 5379 4689 F30F7F85 		movdqu	%xmm0, -2848(%rbp)
+ 5379      E0F4FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 5380              		.loc 2 668 0
+ 5381 4691 F30F6F85 		movdqu	-2848(%rbp), %xmm0
+ 5381      E0F4FFFF 
+ 5382              	.LBE692:
+ 5383              	.LBE691:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 5384              		.loc 2 1684 0
+ 5385 4699 660F7F85 		movdqa	%xmm0, -9872(%rbp)
+ 5385      70D9FFFF 
+ 5386              	.LBB695:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 5387              		.loc 2 1685 0
+ 5388 46a1 660F6F85 		movdqa	-9872(%rbp), %xmm0
+ 5388      70D9FFFF 
+ 5389 46a9 F30F7F85 		movdqu	%xmm0, -8048(%rbp)
+ 5389      90E0FFFF 
+ 5390 46b1 E8000000 		call	KDbgWriterGet at PLT
+ 5390      00
+ 5391 46b6 4885C0   		testq	%rax, %rax
+ 5392 46b9 7479     		je	.L131
+ 5393 46bb BF010000 		movl	$1, %edi
+ 5393      00
+ 5394 46c0 E8000000 		call	KDbgCondToFlag at PLT
+ 5394      00
+ 5395 46c5 4889C6   		movq	%rax, %rsi
+ 5396 46c8 BF100000 		movl	$16, %edi
+ 5396      00
+ 5397 46cd E8000000 		call	KDbgTestModConds at PLT
+ 5397      00
+ 5398 46d2 84C0     		testb	%al, %al
+ 5399 46d4 745E     		je	.L131
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 191
+
+
+ 5400 46d6 8B859CE0 		movl	-8036(%rbp), %eax
+ 5400      FFFF
+ 5401 46dc 89C7     		movl	%eax, %edi
+ 5402 46de E81DB9FF 		call	bswap_32
+ 5402      FF
+ 5403 46e3 4189C5   		movl	%eax, %r13d
+ 5404 46e6 8B8598E0 		movl	-8040(%rbp), %eax
+ 5404      FFFF
+ 5405 46ec 89C7     		movl	%eax, %edi
+ 5406 46ee E80DB9FF 		call	bswap_32
+ 5406      FF
+ 5407 46f3 4189C4   		movl	%eax, %r12d
+ 5408 46f6 8B8594E0 		movl	-8044(%rbp), %eax
+ 5408      FFFF
+ 5409 46fc 89C7     		movl	%eax, %edi
+ 5410 46fe E8FDB8FF 		call	bswap_32
+ 5410      FF
+ 5411 4703 89C3     		movl	%eax, %ebx
+ 5412 4705 8B8590E0 		movl	-8048(%rbp), %eax
+ 5412      FFFF
+ 5413 470b 89C7     		movl	%eax, %edi
+ 5414 470d E8EEB8FF 		call	bswap_32
+ 5414      FF
+ 5415 4712 4589E9   		movl	%r13d, %r9d
+ 5416 4715 4589E0   		movl	%r12d, %r8d
+ 5417 4718 89D9     		movl	%ebx, %ecx
+ 5418 471a 89C2     		movl	%eax, %edx
+ 5419 471c 488D3500 		leaq	.LC2(%rip), %rsi
+ 5419      000000
+ 5420 4723 488D3D00 		leaq	.LC1(%rip), %rdi
+ 5420      000000
+ 5421 472a B8000000 		movl	$0, %eax
+ 5421      00
+ 5422 472f E8000000 		call	KDbgMsg at PLT
+ 5422      00
+ 5423              	.L131:
+ 5424 4734 660F6F85 		movdqa	-9872(%rbp), %xmm0
+ 5424      70D9FFFF 
+ 5425 473c F30F7F85 		movdqu	%xmm0, -2768(%rbp)
+ 5425      30F5FFFF 
+ 5426 4744 660F6F85 		movdqa	-9856(%rbp), %xmm0
+ 5426      80D9FFFF 
+ 5427 474c F30F7F85 		movdqu	%xmm0, -2784(%rbp)
+ 5427      20F5FFFF 
+ 5428              	.LBE695:
+ 5429              	.LBB696:
+ 5430              	.LBB697:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 5431              		.loc 2 178 0
+ 5432 4754 F30F6F85 		movdqu	-2784(%rbp), %xmm0
+ 5432      20F5FFFF 
+ 5433 475c F30F6F8D 		movdqu	-2768(%rbp), %xmm1
+ 5433      30F5FFFF 
+ 5434 4764 660FEFC1 		pxor	%xmm1, %xmm0
+ 5435              	.LBE697:
+ 5436              	.LBE696:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 192
+
+
+ 5437              		.loc 2 1686 0
+ 5438 4768 660F7F85 		movdqa	%xmm0, -9872(%rbp)
+ 5438      70D9FFFF 
+ 5439              	.LBB698:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 5440              		.loc 2 1687 0
+ 5441 4770 660F6F85 		movdqa	-9872(%rbp), %xmm0
+ 5441      70D9FFFF 
+ 5442 4778 F30F7F85 		movdqu	%xmm0, -8064(%rbp)
+ 5442      80E0FFFF 
+ 5443 4780 E8000000 		call	KDbgWriterGet at PLT
+ 5443      00
+ 5444 4785 4885C0   		testq	%rax, %rax
+ 5445 4788 7479     		je	.L133
+ 5446 478a BF010000 		movl	$1, %edi
+ 5446      00
+ 5447 478f E8000000 		call	KDbgCondToFlag at PLT
+ 5447      00
+ 5448 4794 4889C6   		movq	%rax, %rsi
+ 5449 4797 BF100000 		movl	$16, %edi
+ 5449      00
+ 5450 479c E8000000 		call	KDbgTestModConds at PLT
+ 5450      00
+ 5451 47a1 84C0     		testb	%al, %al
+ 5452 47a3 745E     		je	.L133
+ 5453 47a5 8B858CE0 		movl	-8052(%rbp), %eax
+ 5453      FFFF
+ 5454 47ab 89C7     		movl	%eax, %edi
+ 5455 47ad E84EB8FF 		call	bswap_32
+ 5455      FF
+ 5456 47b2 4189C5   		movl	%eax, %r13d
+ 5457 47b5 8B8588E0 		movl	-8056(%rbp), %eax
+ 5457      FFFF
+ 5458 47bb 89C7     		movl	%eax, %edi
+ 5459 47bd E83EB8FF 		call	bswap_32
+ 5459      FF
+ 5460 47c2 4189C4   		movl	%eax, %r12d
+ 5461 47c5 8B8584E0 		movl	-8060(%rbp), %eax
+ 5461      FFFF
+ 5462 47cb 89C7     		movl	%eax, %edi
+ 5463 47cd E82EB8FF 		call	bswap_32
+ 5463      FF
+ 5464 47d2 89C3     		movl	%eax, %ebx
+ 5465 47d4 8B8580E0 		movl	-8064(%rbp), %eax
+ 5465      FFFF
+ 5466 47da 89C7     		movl	%eax, %edi
+ 5467 47dc E81FB8FF 		call	bswap_32
+ 5467      FF
+ 5468 47e1 4589E9   		movl	%r13d, %r9d
+ 5469 47e4 4589E0   		movl	%r12d, %r8d
+ 5470 47e7 89D9     		movl	%ebx, %ecx
+ 5471 47e9 89C2     		movl	%eax, %edx
+ 5472 47eb 488D3500 		leaq	.LC3(%rip), %rsi
+ 5472      000000
+ 5473 47f2 488D3D00 		leaq	.LC1(%rip), %rdi
+ 5473      000000
+ 5474 47f9 B8000000 		movl	$0, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 193
+
+
+ 5474      00
+ 5475 47fe E8000000 		call	KDbgMsg at PLT
+ 5475      00
+ 5476              	.L133:
+ 5477 4803 660F6F85 		movdqa	-9872(%rbp), %xmm0
+ 5477      70D9FFFF 
+ 5478 480b F30F7F85 		movdqu	%xmm0, -2752(%rbp)
+ 5478      40F5FFFF 
+ 5479              	.LBE698:
+ 5480              	.LBB699:
+ 5481              	.LBB700:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 5482              		.loc 2 1357 0
+ 5483 4813 F30F6F85 		movdqu	-2752(%rbp), %xmm0
+ 5483      40F5FFFF 
+ 5484 481b F30F7F85 		movdqu	%xmm0, -7856(%rbp)
+ 5484      50E1FFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 5485              		.loc 2 1358 0
+ 5486 4823 8B855CE1 		movl	-7844(%rbp), %eax
+ 5486      FFFF
+ 5487 4829 898558E1 		movl	%eax, -7848(%rbp)
+ 5487      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 5488              		.loc 2 1359 0
+ 5489 482f 8B855CE1 		movl	-7844(%rbp), %eax
+ 5489      FFFF
+ 5490 4835 898554E1 		movl	%eax, -7852(%rbp)
+ 5490      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 5491              		.loc 2 1360 0
+ 5492 483b 8B855CE1 		movl	-7844(%rbp), %eax
+ 5492      FFFF
+ 5493 4841 898550E1 		movl	%eax, -7856(%rbp)
+ 5493      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 5494              		.loc 2 1361 0
+ 5495 4847 F30F6F85 		movdqu	-7856(%rbp), %xmm0
+ 5495      50E1FFFF 
+ 5496              	.LBE700:
+ 5497              	.LBE699:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 5498              		.loc 2 1688 0
+ 5499 484f 660F7F85 		movdqa	%xmm0, -9872(%rbp)
+ 5499      70D9FFFF 
+ 5500              	.LBB701:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 5501              		.loc 2 1689 0
+ 5502 4857 660F6F85 		movdqa	-9872(%rbp), %xmm0
+ 5502      70D9FFFF 
+ 5503 485f F30F7F85 		movdqu	%xmm0, -8080(%rbp)
+ 5503      70E0FFFF 
+ 5504 4867 E8000000 		call	KDbgWriterGet at PLT
+ 5504      00
+ 5505 486c 4885C0   		testq	%rax, %rax
+ 5506 486f 7479     		je	.L135
+ 5507 4871 BF010000 		movl	$1, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 194
+
+
+ 5507      00
+ 5508 4876 E8000000 		call	KDbgCondToFlag at PLT
+ 5508      00
+ 5509 487b 4889C6   		movq	%rax, %rsi
+ 5510 487e BF100000 		movl	$16, %edi
+ 5510      00
+ 5511 4883 E8000000 		call	KDbgTestModConds at PLT
+ 5511      00
+ 5512 4888 84C0     		testb	%al, %al
+ 5513 488a 745E     		je	.L135
+ 5514 488c 8B857CE0 		movl	-8068(%rbp), %eax
+ 5514      FFFF
+ 5515 4892 89C7     		movl	%eax, %edi
+ 5516 4894 E867B7FF 		call	bswap_32
+ 5516      FF
+ 5517 4899 4189C5   		movl	%eax, %r13d
+ 5518 489c 8B8578E0 		movl	-8072(%rbp), %eax
+ 5518      FFFF
+ 5519 48a2 89C7     		movl	%eax, %edi
+ 5520 48a4 E857B7FF 		call	bswap_32
+ 5520      FF
+ 5521 48a9 4189C4   		movl	%eax, %r12d
+ 5522 48ac 8B8574E0 		movl	-8076(%rbp), %eax
+ 5522      FFFF
+ 5523 48b2 89C7     		movl	%eax, %edi
+ 5524 48b4 E847B7FF 		call	bswap_32
+ 5524      FF
+ 5525 48b9 89C3     		movl	%eax, %ebx
+ 5526 48bb 8B8570E0 		movl	-8080(%rbp), %eax
+ 5526      FFFF
+ 5527 48c1 89C7     		movl	%eax, %edi
+ 5528 48c3 E838B7FF 		call	bswap_32
+ 5528      FF
+ 5529 48c8 4589E9   		movl	%r13d, %r9d
+ 5530 48cb 4589E0   		movl	%r12d, %r8d
+ 5531 48ce 89D9     		movl	%ebx, %ecx
+ 5532 48d0 89C2     		movl	%eax, %edx
+ 5533 48d2 488D3500 		leaq	.LC4(%rip), %rsi
+ 5533      000000
+ 5534 48d9 488D3D00 		leaq	.LC1(%rip), %rdi
+ 5534      000000
+ 5535 48e0 B8000000 		movl	$0, %eax
+ 5535      00
+ 5536 48e5 E8000000 		call	KDbgMsg at PLT
+ 5536      00
+ 5537              	.L135:
+ 5538              	.LBE701:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 5539              		.loc 2 1690 0
+ 5540 48ea 660F6F85 		movdqa	-9872(%rbp), %xmm0
+ 5540      70D9FFFF 
+ 5541              	.LBE667:
+ 5542              	.LBE666:
+1749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x20,6);
+ 5543              		.loc 2 1749 0
+ 5544 48f2 F30F7F85 		movdqu	%xmm0, -6624(%rbp)
+ 5544      20E6FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 195
+
+
+ 5545 48fa F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 5545      10E6FFFF 
+ 5546 4902 F30F7F85 		movdqu	%xmm0, -2736(%rbp)
+ 5546      50F5FFFF 
+ 5547              	.LBB702:
+ 5548              	.LBB703:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 5549              		.loc 2 1565 0
+ 5550 490a F30F6F85 		movdqu	-2736(%rbp), %xmm0
+ 5550      50F5FFFF 
+ 5551 4912 660F7F85 		movdqa	%xmm0, -9824(%rbp)
+ 5551      A0D9FFFF 
+ 5552 491a 660F6F85 		movdqa	-9824(%rbp), %xmm0
+ 5552      A0D9FFFF 
+ 5553 4922 F30F7F85 		movdqu	%xmm0, -2720(%rbp)
+ 5553      60F5FFFF 
+ 5554              	.LBB704:
+ 5555              	.LBB705:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 5556              		.loc 2 1282 0
+ 5557 492a F30F6F85 		movdqu	-2720(%rbp), %xmm0
+ 5557      60F5FFFF 
+ 5558 4932 F30F7F85 		movdqu	%xmm0, -7840(%rbp)
+ 5558      60E1FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 5559              		.loc 2 1283 0
+ 5560 493a 8B8568E1 		movl	-7832(%rbp), %eax
+ 5560      FFFF
+ 5561 4940 89856CE1 		movl	%eax, -7828(%rbp)
+ 5561      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 5562              		.loc 2 1284 0
+ 5563 4946 8B8564E1 		movl	-7836(%rbp), %eax
+ 5563      FFFF
+ 5564 494c 898568E1 		movl	%eax, -7832(%rbp)
+ 5564      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 5565              		.loc 2 1285 0
+ 5566 4952 8B8560E1 		movl	-7840(%rbp), %eax
+ 5566      FFFF
+ 5567 4958 898564E1 		movl	%eax, -7836(%rbp)
+ 5567      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 5568              		.loc 2 1286 0
+ 5569 495e C78560E1 		movl	$0, -7840(%rbp)
+ 5569      FFFF0000 
+ 5569      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 5570              		.loc 2 1287 0
+ 5571 4968 F30F6F85 		movdqu	-7840(%rbp), %xmm0
+ 5571      60E1FFFF 
+ 5572              	.LBE705:
+ 5573              	.LBE704:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5574              		.loc 2 1567 0
+ 5575 4970 660F7F85 		movdqa	%xmm0, -9824(%rbp)
+ 5575      A0D9FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 196
+
+
+ 5576 4978 660F6F85 		movdqa	-9824(%rbp), %xmm0
+ 5576      A0D9FFFF 
+ 5577 4980 660FEF85 		pxor	-2736(%rbp), %xmm0
+ 5577      50F5FFFF 
+ 5578 4988 F30F7F85 		movdqu	%xmm0, -2736(%rbp)
+ 5578      50F5FFFF 
+ 5579 4990 660F6F85 		movdqa	-9824(%rbp), %xmm0
+ 5579      A0D9FFFF 
+ 5580 4998 F30F7F85 		movdqu	%xmm0, -2704(%rbp)
+ 5580      70F5FFFF 
+ 5581              	.LBB706:
+ 5582              	.LBB707:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 5583              		.loc 2 1282 0
+ 5584 49a0 F30F6F85 		movdqu	-2704(%rbp), %xmm0
+ 5584      70F5FFFF 
+ 5585 49a8 F30F7F85 		movdqu	%xmm0, -7824(%rbp)
+ 5585      70E1FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 5586              		.loc 2 1283 0
+ 5587 49b0 8B8578E1 		movl	-7816(%rbp), %eax
+ 5587      FFFF
+ 5588 49b6 89857CE1 		movl	%eax, -7812(%rbp)
+ 5588      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 5589              		.loc 2 1284 0
+ 5590 49bc 8B8574E1 		movl	-7820(%rbp), %eax
+ 5590      FFFF
+ 5591 49c2 898578E1 		movl	%eax, -7816(%rbp)
+ 5591      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 5592              		.loc 2 1285 0
+ 5593 49c8 8B8570E1 		movl	-7824(%rbp), %eax
+ 5593      FFFF
+ 5594 49ce 898574E1 		movl	%eax, -7820(%rbp)
+ 5594      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 5595              		.loc 2 1286 0
+ 5596 49d4 C78570E1 		movl	$0, -7824(%rbp)
+ 5596      FFFF0000 
+ 5596      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 5597              		.loc 2 1287 0
+ 5598 49de F30F6F85 		movdqu	-7824(%rbp), %xmm0
+ 5598      70E1FFFF 
+ 5599              	.LBE707:
+ 5600              	.LBE706:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5601              		.loc 2 1568 0
+ 5602 49e6 660F7F85 		movdqa	%xmm0, -9824(%rbp)
+ 5602      A0D9FFFF 
+ 5603 49ee 660F6F85 		movdqa	-9824(%rbp), %xmm0
+ 5603      A0D9FFFF 
+ 5604 49f6 660FEF85 		pxor	-2736(%rbp), %xmm0
+ 5604      50F5FFFF 
+ 5605 49fe F30F7F85 		movdqu	%xmm0, -2736(%rbp)
+ 5605      50F5FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 197
+
+
+ 5606 4a06 660F6F85 		movdqa	-9824(%rbp), %xmm0
+ 5606      A0D9FFFF 
+ 5607 4a0e F30F7F85 		movdqu	%xmm0, -2688(%rbp)
+ 5607      80F5FFFF 
+ 5608              	.LBB708:
+ 5609              	.LBB709:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 5610              		.loc 2 1282 0
+ 5611 4a16 F30F6F85 		movdqu	-2688(%rbp), %xmm0
+ 5611      80F5FFFF 
+ 5612 4a1e F30F7F85 		movdqu	%xmm0, -7808(%rbp)
+ 5612      80E1FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 5613              		.loc 2 1283 0
+ 5614 4a26 8B8588E1 		movl	-7800(%rbp), %eax
+ 5614      FFFF
+ 5615 4a2c 89858CE1 		movl	%eax, -7796(%rbp)
+ 5615      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 5616              		.loc 2 1284 0
+ 5617 4a32 8B8584E1 		movl	-7804(%rbp), %eax
+ 5617      FFFF
+ 5618 4a38 898588E1 		movl	%eax, -7800(%rbp)
+ 5618      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 5619              		.loc 2 1285 0
+ 5620 4a3e 8B8580E1 		movl	-7808(%rbp), %eax
+ 5620      FFFF
+ 5621 4a44 898584E1 		movl	%eax, -7804(%rbp)
+ 5621      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 5622              		.loc 2 1286 0
+ 5623 4a4a C78580E1 		movl	$0, -7808(%rbp)
+ 5623      FFFF0000 
+ 5623      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 5624              		.loc 2 1287 0
+ 5625 4a54 F30F6F85 		movdqu	-7808(%rbp), %xmm0
+ 5625      80E1FFFF 
+ 5626              	.LBE709:
+ 5627              	.LBE708:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5628              		.loc 2 1569 0
+ 5629 4a5c 660F7F85 		movdqa	%xmm0, -9824(%rbp)
+ 5629      A0D9FFFF 
+ 5630 4a64 660F6F85 		movdqa	-9824(%rbp), %xmm0
+ 5630      A0D9FFFF 
+ 5631 4a6c 660FEF85 		pxor	-2736(%rbp), %xmm0
+ 5631      50F5FFFF 
+ 5632 4a74 F30F7F85 		movdqu	%xmm0, -2736(%rbp)
+ 5632      50F5FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 5633              		.loc 2 1571 0
+ 5634 4a7c F30F6F85 		movdqu	-2736(%rbp), %xmm0
+ 5634      50F5FFFF 
+ 5635              	.LBE703:
+ 5636              	.LBE702:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 198
+
+
+1749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x20,6);
+ 5637              		.loc 2 1749 0
+ 5638 4a84 F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 5638      10E6FFFF 
+ 5639 4a8c F30F6F85 		movdqu	-6624(%rbp), %xmm0
+ 5639      20E6FFFF 
+ 5640 4a94 F30F6F8D 		movdqu	-6640(%rbp), %xmm1
+ 5640      10E6FFFF 
+ 5641 4a9c 660FEFC1 		pxor	%xmm1, %xmm0
+ 5642 4aa0 F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 5642      10E6FFFF 
+ 5643 4aa8 488B85B8 		movq	-9544(%rbp), %rax
+ 5643      DAFFFF
+ 5644 4aaf 4883C060 		addq	$96, %rax
+ 5645 4ab3 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 5645      10E6FFFF 
+ 5646 4abb F30F7F00 		movdqu	%xmm0, (%rax)
+ 5647 4abf F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 5647      10E6FFFF 
+ 5648 4ac7 F30F7F85 		movdqu	%xmm0, -2656(%rbp)
+ 5648      A0F5FFFF 
+ 5649              	.LBB710:
+ 5650              	.LBB711:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 5651              		.loc 2 1681 0
+ 5652 4acf B8400000 		movl	$64, %eax
+ 5652      00
+ 5653 4ad4 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 5653      00000000 
+ 5654 4adc F30F7F85 		movdqu	%xmm0, -2624(%rbp)
+ 5654      C0F5FFFF 
+ 5655 4ae4 8985BCF5 		movl	%eax, -2628(%rbp)
+ 5655      FFFF
+ 5656              	.LBB712:
+ 5657              	.LBB713:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 5658              		.loc 2 522 0
+ 5659 4aea F30F6F85 		movdqu	-2624(%rbp), %xmm0
+ 5659      C0F5FFFF 
+ 5660 4af2 F30F7F85 		movdqu	%xmm0, -7728(%rbp)
+ 5660      D0E1FFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 5661              		.loc 2 523 0
+ 5662 4afa B8030000 		movl	$3, %eax
+ 5662      00
+ 5663 4aff 4898     		cltq
+ 5664 4b01 8B95BCF5 		movl	-2628(%rbp), %edx
+ 5664      FFFF
+ 5665 4b07 899485D0 		movl	%edx, -7728(%rbp,%rax,4)
+ 5665      E1FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 5666              		.loc 2 524 0
+ 5667 4b0e F30F6F85 		movdqu	-7728(%rbp), %xmm0
+ 5667      D0E1FFFF 
+ 5668 4b16 F30F7F85 		movdqu	%xmm0, -2624(%rbp)
+ 5668      C0F5FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 199
+
+
+ 5669              		.loc 2 526 0
+ 5670 4b1e F30F6F85 		movdqu	-2624(%rbp), %xmm0
+ 5670      C0F5FFFF 
+ 5671              	.LBE713:
+ 5672              	.LBE712:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 5673              		.loc 2 1681 0
+ 5674 4b26 660F7F85 		movdqa	%xmm0, -9792(%rbp)
+ 5674      C0D9FFFF 
+ 5675 4b2e F30F6F85 		movdqu	-2656(%rbp), %xmm0
+ 5675      A0F5FFFF 
+ 5676 4b36 F30F7F85 		movdqu	%xmm0, -2608(%rbp)
+ 5676      D0F5FFFF 
+ 5677 4b3e F30F6F85 		movdqu	-2608(%rbp), %xmm0
+ 5677      D0F5FFFF 
+ 5678 4b46 F30F7F85 		movdqu	%xmm0, -2576(%rbp)
+ 5678      F0F5FFFF 
+ 5679 4b4e 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 5679      000000
+ 5680 4b55 488985E8 		movq	%rax, -2584(%rbp)
+ 5680      F5FFFF
+ 5681              	.LBB714:
+ 5682              	.LBB715:
+ 5683              	.LBB716:
+ 5684              	.LBB717:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 5685              		.loc 2 851 0
+ 5686 4b5c 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 5686      00000000 
+ 5687 4b64 F30F7F85 		movdqu	%xmm0, -2544(%rbp)
+ 5687      10F6FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 5688              		.loc 2 854 0
+ 5689 4b6c 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 5689      00000000 
+ 5690 4b74 F30F6F8D 		movdqu	-2576(%rbp), %xmm1
+ 5690      F0F5FFFF 
+ 5691 4b7c F30F7F8D 		movdqu	%xmm1, -2464(%rbp)
+ 5691      60F6FFFF 
+ 5692 4b84 F30F7F85 		movdqu	%xmm0, -2480(%rbp)
+ 5692      50F6FFFF 
+ 5693              	.LBB718:
+ 5694              	.LBB719:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 5695              		.loc 2 206 0
+ 5696 4b8c F30F6F85 		movdqu	-2480(%rbp), %xmm0
+ 5696      50F6FFFF 
+ 5697 4b94 F30F6F8D 		movdqu	-2464(%rbp), %xmm1
+ 5697      60F6FFFF 
+ 5698 4b9c 660FDBC1 		pand	%xmm1, %xmm0
+ 5699              	.LBE719:
+ 5700              	.LBE718:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 5701              		.loc 2 854 0
+ 5702 4ba0 F30F7F85 		movdqu	%xmm0, -2496(%rbp)
+ 5702      40F6FFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 200
+
+
+ 5703              		.loc 2 862 0
+ 5704 4ba8 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 5704      00000000 
+ 5705 4bb0 F30F6F8D 		movdqu	-2576(%rbp), %xmm1
+ 5705      F0F5FFFF 
+ 5706 4bb8 F30F7F8D 		movdqu	%xmm1, -2432(%rbp)
+ 5706      80F6FFFF 
+ 5707 4bc0 F30F7F85 		movdqu	%xmm0, -2448(%rbp)
+ 5707      70F6FFFF 
+ 5708              	.LBB720:
+ 5709              		.loc 2 2642 0
+ 5710 4bc8 0FB68580 		movzbl	-2432(%rbp), %eax
+ 5710      F6FFFF
+ 5711 4bcf 0FB69570 		movzbl	-2448(%rbp), %edx
+ 5711      F6FFFF
+ 5712 4bd6 0FB6C0   		movzbl	%al, %eax
+ 5713 4bd9 6689858E 		movw	%ax, -10354(%rbp)
+ 5713      D7FFFF
+ 5714 4be0 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5714      D7FFFF
+ 5715 4be7 F6F2     		divb	%dl
+ 5716 4be9 4189C7   		movl	%eax, %r15d
+ 5717 4bec 0FB68581 		movzbl	-2431(%rbp), %eax
+ 5717      F6FFFF
+ 5718 4bf3 0FB69571 		movzbl	-2447(%rbp), %edx
+ 5718      F6FFFF
+ 5719 4bfa 0FB6C0   		movzbl	%al, %eax
+ 5720 4bfd 6689858E 		movw	%ax, -10354(%rbp)
+ 5720      D7FFFF
+ 5721 4c04 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5721      D7FFFF
+ 5722 4c0b F6F2     		divb	%dl
+ 5723 4c0d 8885DFD9 		movb	%al, -9761(%rbp)
+ 5723      FFFF
+ 5724 4c13 0FB68582 		movzbl	-2430(%rbp), %eax
+ 5724      F6FFFF
+ 5725 4c1a 0FB69572 		movzbl	-2446(%rbp), %edx
+ 5725      F6FFFF
+ 5726 4c21 0FB6C0   		movzbl	%al, %eax
+ 5727 4c24 6689858E 		movw	%ax, -10354(%rbp)
+ 5727      D7FFFF
+ 5728 4c2b 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5728      D7FFFF
+ 5729 4c32 F6F2     		divb	%dl
+ 5730 4c34 8885DED9 		movb	%al, -9762(%rbp)
+ 5730      FFFF
+ 5731 4c3a 0FB68583 		movzbl	-2429(%rbp), %eax
+ 5731      F6FFFF
+ 5732 4c41 0FB69573 		movzbl	-2445(%rbp), %edx
+ 5732      F6FFFF
+ 5733 4c48 0FB6C0   		movzbl	%al, %eax
+ 5734 4c4b 6689858E 		movw	%ax, -10354(%rbp)
+ 5734      D7FFFF
+ 5735 4c52 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5735      D7FFFF
+ 5736 4c59 F6F2     		divb	%dl
+ 5737 4c5b 8885DDD9 		movb	%al, -9763(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 201
+
+
+ 5737      FFFF
+ 5738 4c61 0FB68584 		movzbl	-2428(%rbp), %eax
+ 5738      F6FFFF
+ 5739 4c68 0FB69574 		movzbl	-2444(%rbp), %edx
+ 5739      F6FFFF
+ 5740 4c6f 0FB6C0   		movzbl	%al, %eax
+ 5741 4c72 6689858E 		movw	%ax, -10354(%rbp)
+ 5741      D7FFFF
+ 5742 4c79 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5742      D7FFFF
+ 5743 4c80 F6F2     		divb	%dl
+ 5744 4c82 8885DCD9 		movb	%al, -9764(%rbp)
+ 5744      FFFF
+ 5745 4c88 0FB68585 		movzbl	-2427(%rbp), %eax
+ 5745      F6FFFF
+ 5746 4c8f 0FB69575 		movzbl	-2443(%rbp), %edx
+ 5746      F6FFFF
+ 5747 4c96 0FB6C0   		movzbl	%al, %eax
+ 5748 4c99 6689858E 		movw	%ax, -10354(%rbp)
+ 5748      D7FFFF
+ 5749 4ca0 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5749      D7FFFF
+ 5750 4ca7 F6F2     		divb	%dl
+ 5751 4ca9 4189C1   		movl	%eax, %r9d
+ 5752 4cac 0FB68586 		movzbl	-2426(%rbp), %eax
+ 5752      F6FFFF
+ 5753 4cb3 0FB69576 		movzbl	-2442(%rbp), %edx
+ 5753      F6FFFF
+ 5754 4cba 0FB6C0   		movzbl	%al, %eax
+ 5755 4cbd 6689858E 		movw	%ax, -10354(%rbp)
+ 5755      D7FFFF
+ 5756 4cc4 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5756      D7FFFF
+ 5757 4ccb F6F2     		divb	%dl
+ 5758 4ccd 89C7     		movl	%eax, %edi
+ 5759 4ccf 0FB68587 		movzbl	-2425(%rbp), %eax
+ 5759      F6FFFF
+ 5760 4cd6 0FB69577 		movzbl	-2441(%rbp), %edx
+ 5760      F6FFFF
+ 5761 4cdd 0FB6C0   		movzbl	%al, %eax
+ 5762 4ce0 6689858E 		movw	%ax, -10354(%rbp)
+ 5762      D7FFFF
+ 5763 4ce7 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5763      D7FFFF
+ 5764 4cee F6F2     		divb	%dl
+ 5765 4cf0 89C3     		movl	%eax, %ebx
+ 5766 4cf2 0FB68588 		movzbl	-2424(%rbp), %eax
+ 5766      F6FFFF
+ 5767 4cf9 0FB69578 		movzbl	-2440(%rbp), %edx
+ 5767      F6FFFF
+ 5768 4d00 0FB6C0   		movzbl	%al, %eax
+ 5769 4d03 6689858E 		movw	%ax, -10354(%rbp)
+ 5769      D7FFFF
+ 5770 4d0a 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5770      D7FFFF
+ 5771 4d11 F6F2     		divb	%dl
+ 5772 4d13 4189C2   		movl	%eax, %r10d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 202
+
+
+ 5773 4d16 0FB68589 		movzbl	-2423(%rbp), %eax
+ 5773      F6FFFF
+ 5774 4d1d 0FB69579 		movzbl	-2439(%rbp), %edx
+ 5774      F6FFFF
+ 5775 4d24 0FB6C0   		movzbl	%al, %eax
+ 5776 4d27 6689858E 		movw	%ax, -10354(%rbp)
+ 5776      D7FFFF
+ 5777 4d2e 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5777      D7FFFF
+ 5778 4d35 F6F2     		divb	%dl
+ 5779 4d37 4189C3   		movl	%eax, %r11d
+ 5780 4d3a 0FB6858A 		movzbl	-2422(%rbp), %eax
+ 5780      F6FFFF
+ 5781 4d41 0FB6957A 		movzbl	-2438(%rbp), %edx
+ 5781      F6FFFF
+ 5782 4d48 0FB6C0   		movzbl	%al, %eax
+ 5783 4d4b 6689858E 		movw	%ax, -10354(%rbp)
+ 5783      D7FFFF
+ 5784 4d52 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5784      D7FFFF
+ 5785 4d59 F6F2     		divb	%dl
+ 5786 4d5b 4189C4   		movl	%eax, %r12d
+ 5787 4d5e 0FB6858B 		movzbl	-2421(%rbp), %eax
+ 5787      F6FFFF
+ 5788 4d65 0FB6957B 		movzbl	-2437(%rbp), %edx
+ 5788      F6FFFF
+ 5789 4d6c 0FB6C0   		movzbl	%al, %eax
+ 5790 4d6f 6689858E 		movw	%ax, -10354(%rbp)
+ 5790      D7FFFF
+ 5791 4d76 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5791      D7FFFF
+ 5792 4d7d F6F2     		divb	%dl
+ 5793 4d7f 4189C5   		movl	%eax, %r13d
+ 5794 4d82 0FB6858C 		movzbl	-2420(%rbp), %eax
+ 5794      F6FFFF
+ 5795 4d89 0FB6957C 		movzbl	-2436(%rbp), %edx
+ 5795      F6FFFF
+ 5796 4d90 0FB6C0   		movzbl	%al, %eax
+ 5797 4d93 6689858E 		movw	%ax, -10354(%rbp)
+ 5797      D7FFFF
+ 5798 4d9a 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5798      D7FFFF
+ 5799 4da1 F6F2     		divb	%dl
+ 5800 4da3 4189C6   		movl	%eax, %r14d
+ 5801 4da6 0FB6858D 		movzbl	-2419(%rbp), %eax
+ 5801      F6FFFF
+ 5802 4dad 0FB6957D 		movzbl	-2435(%rbp), %edx
+ 5802      F6FFFF
+ 5803 4db4 0FB6C0   		movzbl	%al, %eax
+ 5804 4db7 6689858E 		movw	%ax, -10354(%rbp)
+ 5804      D7FFFF
+ 5805 4dbe 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5805      D7FFFF
+ 5806 4dc5 F6F2     		divb	%dl
+ 5807 4dc7 4189C0   		movl	%eax, %r8d
+ 5808 4dca 0FB6858E 		movzbl	-2418(%rbp), %eax
+ 5808      F6FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 203
+
+
+ 5809 4dd1 0FB6957E 		movzbl	-2434(%rbp), %edx
+ 5809      F6FFFF
+ 5810 4dd8 0FB6C0   		movzbl	%al, %eax
+ 5811 4ddb 6689858E 		movw	%ax, -10354(%rbp)
+ 5811      D7FFFF
+ 5812 4de2 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5812      D7FFFF
+ 5813 4de9 F6F2     		divb	%dl
+ 5814 4deb 89C6     		movl	%eax, %esi
+ 5815 4ded 0FB6858F 		movzbl	-2417(%rbp), %eax
+ 5815      F6FFFF
+ 5816 4df4 0FB6957F 		movzbl	-2433(%rbp), %edx
+ 5816      F6FFFF
+ 5817 4dfb 0FB6C0   		movzbl	%al, %eax
+ 5818 4dfe 6689858E 		movw	%ax, -10354(%rbp)
+ 5818      D7FFFF
+ 5819 4e05 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 5819      D7FFFF
+ 5820 4e0c F6F2     		divb	%dl
+ 5821 4e0e 89C1     		movl	%eax, %ecx
+ 5822              	.LBB721:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 5823              		.loc 2 346 0
+ 5824 4e10 0FB6D3   		movzbl	%bl, %edx
+ 5825 4e13 400FB6C7 		movzbl	%dil, %eax
+ 5826 4e17 48C1E208 		salq	$8, %rdx
+ 5827 4e1b 4809C2   		orq	%rax, %rdx
+ 5828 4e1e 410FB6C1 		movzbl	%r9b, %eax
+ 5829 4e22 48C1E208 		salq	$8, %rdx
+ 5830 4e26 4809C2   		orq	%rax, %rdx
+ 5831 4e29 0FB685DC 		movzbl	-9764(%rbp), %eax
+ 5831      D9FFFF
+ 5832 4e30 48C1E208 		salq	$8, %rdx
+ 5833 4e34 4809C2   		orq	%rax, %rdx
+ 5834 4e37 0FB685DD 		movzbl	-9763(%rbp), %eax
+ 5834      D9FFFF
+ 5835 4e3e 48C1E208 		salq	$8, %rdx
+ 5836 4e42 4809C2   		orq	%rax, %rdx
+ 5837 4e45 0FB685DE 		movzbl	-9762(%rbp), %eax
+ 5837      D9FFFF
+ 5838 4e4c 48C1E208 		salq	$8, %rdx
+ 5839 4e50 4809C2   		orq	%rax, %rdx
+ 5840 4e53 0FB685DF 		movzbl	-9761(%rbp), %eax
+ 5840      D9FFFF
+ 5841 4e5a 48C1E208 		salq	$8, %rdx
+ 5842 4e5e 4809C2   		orq	%rax, %rdx
+ 5843 4e61 410FB6C7 		movzbl	%r15b, %eax
+ 5844 4e65 48C1E208 		salq	$8, %rdx
+ 5845 4e69 4809C2   		orq	%rax, %rdx
+ 5846 4e6c 0FB6C1   		movzbl	%cl, %eax
+ 5847 4e6f 400FB6CE 		movzbl	%sil, %ecx
+ 5848 4e73 48C1E008 		salq	$8, %rax
+ 5849 4e77 4809C8   		orq	%rcx, %rax
+ 5850 4e7a 410FB6C8 		movzbl	%r8b, %ecx
+ 5851 4e7e 48C1E008 		salq	$8, %rax
+ 5852 4e82 4809C8   		orq	%rcx, %rax
+ 5853 4e85 410FB6CE 		movzbl	%r14b, %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 204
+
+
+ 5854 4e89 48C1E008 		salq	$8, %rax
+ 5855 4e8d 4809C8   		orq	%rcx, %rax
+ 5856 4e90 410FB6CD 		movzbl	%r13b, %ecx
+ 5857 4e94 48C1E008 		salq	$8, %rax
+ 5858 4e98 4809C8   		orq	%rcx, %rax
+ 5859 4e9b 410FB6CC 		movzbl	%r12b, %ecx
+ 5860 4e9f 48C1E008 		salq	$8, %rax
+ 5861 4ea3 4809C8   		orq	%rcx, %rax
+ 5862 4ea6 410FB6CB 		movzbl	%r11b, %ecx
+ 5863 4eaa 48C1E008 		salq	$8, %rax
+ 5864 4eae 4809C8   		orq	%rcx, %rax
+ 5865 4eb1 410FB6CA 		movzbl	%r10b, %ecx
+ 5866 4eb5 48C1E008 		salq	$8, %rax
+ 5867 4eb9 4809C8   		orq	%rcx, %rax
+ 5868 4ebc 488995C0 		movq	%rdx, -10304(%rbp)
+ 5868      D7FFFF
+ 5869 4ec3 488985C8 		movq	%rax, -10296(%rbp)
+ 5869      D7FFFF
+ 5870 4eca 660F6F85 		movdqa	-10304(%rbp), %xmm0
+ 5870      C0D7FFFF 
+ 5871              	.LBE721:
+ 5872              	.LBE720:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 5873              		.loc 2 862 0
+ 5874 4ed2 F30F7F85 		movdqu	%xmm0, -2512(%rbp)
+ 5874      30F6FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 5875              		.loc 2 866 0
+ 5876 4eda C7850CF6 		movl	$0, -2548(%rbp)
+ 5876      FFFF0000 
+ 5876      0000
+ 5877 4ee4 E9860200 		jmp	.L136
+ 5877      00
+ 5878              	.L145:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 5879              		.loc 2 868 0
+ 5880 4ee9 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 5880      00000000 
+ 5881 4ef1 F30F7F85 		movdqu	%xmm0, -2400(%rbp)
+ 5881      A0F6FFFF 
+ 5882 4ef9 F30F6F85 		movdqu	-2512(%rbp), %xmm0
+ 5882      30F6FFFF 
+ 5883 4f01 F30F7F85 		movdqu	%xmm0, -2416(%rbp)
+ 5883      90F6FFFF 
+ 5884              	.LBB722:
+ 5885              	.LBB723:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 5886              		.loc 2 380 0
+ 5887 4f09 F30F6F85 		movdqu	-2400(%rbp), %xmm0
+ 5887      A0F6FFFF 
+ 5888 4f11 F30F7F85 		movdqu	%xmm0, -7696(%rbp)
+ 5888      F0E1FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 5889              		.loc 2 381 0
+ 5890 4f19 F30F6F85 		movdqu	-2416(%rbp), %xmm0
+ 5890      90F6FFFF 
+ 5891 4f21 F30F7F85 		movdqu	%xmm0, -7712(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 205
+
+
+ 5891      E0E1FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 5892              		.loc 2 383 0
+ 5893 4f29 C785BCF6 		movl	$0, -2372(%rbp)
+ 5893      FFFF0000 
+ 5893      0000
+ 5894 4f33 EB5C     		jmp	.L137
+ 5895              	.L140:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 5896              		.loc 2 385 0
+ 5897 4f35 8B85BCF6 		movl	-2372(%rbp), %eax
+ 5897      FFFF
+ 5898 4f3b 89C0     		mov	%eax, %eax
+ 5899 4f3d 0FB68405 		movzbl	-7712(%rbp,%rax), %eax
+ 5899      E0E1FFFF 
+ 5900 4f45 84C0     		testb	%al, %al
+ 5901 4f47 7912     		jns	.L138
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 5902              		.loc 2 386 0
+ 5903 4f49 8B85BCF6 		movl	-2372(%rbp), %eax
+ 5903      FFFF
+ 5904 4f4f 89C0     		mov	%eax, %eax
+ 5905 4f51 C6840500 		movb	$0, -7680(%rbp,%rax)
+ 5905      E2FFFF00 
+ 5906 4f59 EB2F     		jmp	.L139
+ 5907              	.L138:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 5908              		.loc 2 388 0
+ 5909 4f5b 8B8DBCF6 		movl	-2372(%rbp), %ecx
+ 5909      FFFF
+ 5910 4f61 8B85BCF6 		movl	-2372(%rbp), %eax
+ 5910      FFFF
+ 5911 4f67 89C0     		mov	%eax, %eax
+ 5912 4f69 0FB68405 		movzbl	-7712(%rbp,%rax), %eax
+ 5912      E0E1FFFF 
+ 5913 4f71 0FB6C0   		movzbl	%al, %eax
+ 5914 4f74 83E00F   		andl	$15, %eax
+ 5915 4f77 4898     		cltq
+ 5916 4f79 0FB69405 		movzbl	-7696(%rbp,%rax), %edx
+ 5916      F0E1FFFF 
+ 5917 4f81 89C8     		mov	%ecx, %eax
+ 5918 4f83 88940500 		movb	%dl, -7680(%rbp,%rax)
+ 5918      E2FFFF
+ 5919              	.L139:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 5920              		.loc 2 383 0
+ 5921 4f8a 8385BCF6 		addl	$1, -2372(%rbp)
+ 5921      FFFF01
+ 5922              	.L137:
+ 5923 4f91 83BDBCF6 		cmpl	$15, -2372(%rbp)
+ 5923      FFFF0F
+ 5924 4f98 769B     		jbe	.L140
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 5925              		.loc 2 391 0
+ 5926 4f9a F30F6F85 		movdqu	-7680(%rbp), %xmm0
+ 5926      00E2FFFF 
+ 5927              	.LBE723:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 206
+
+
+ 5928              	.LBE722:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 5929              		.loc 2 868 0
+ 5930 4fa2 F30F7F85 		movdqu	%xmm0, -2528(%rbp)
+ 5930      20F6FFFF 
+ 5931 4faa F30F6F85 		movdqu	-2496(%rbp), %xmm0
+ 5931      40F6FFFF 
+ 5932 4fb2 F30F7F85 		movdqu	%xmm0, -2352(%rbp)
+ 5932      D0F6FFFF 
+ 5933 4fba F30F6F85 		movdqu	-2528(%rbp), %xmm0
+ 5933      20F6FFFF 
+ 5934 4fc2 F30F7F85 		movdqu	%xmm0, -2368(%rbp)
+ 5934      C0F6FFFF 
+ 5935              	.LBB724:
+ 5936              	.LBB725:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 5937              		.loc 2 234 0
+ 5938 4fca F30F6F85 		movdqu	-2368(%rbp), %xmm0
+ 5938      C0F6FFFF 
+ 5939 4fd2 F30F6F8D 		movdqu	-2352(%rbp), %xmm1
+ 5939      D0F6FFFF 
+ 5940 4fda 660FEBC1 		por	%xmm1, %xmm0
+ 5941              	.LBE725:
+ 5942              	.LBE724:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 5943              		.loc 2 870 0
+ 5944 4fde F30F7F85 		movdqu	%xmm0, -2528(%rbp)
+ 5944      20F6FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 5945              		.loc 2 872 0
+ 5946 4fe6 8B850CF6 		mov	-2548(%rbp), %eax
+ 5946      FFFF
+ 5947 4fec 48C1E004 		salq	$4, %rax
+ 5948 4ff0 480385E8 		addq	-2584(%rbp), %rax
+ 5948      F5FFFF
+ 5949 4ff7 660F6F00 		movdqa	(%rax), %xmm0
+ 5950 4ffb F30F7F85 		movdqu	%xmm0, -2320(%rbp)
+ 5950      F0F6FFFF 
+ 5951 5003 F30F6F85 		movdqu	-2528(%rbp), %xmm0
+ 5951      20F6FFFF 
+ 5952 500b F30F7F85 		movdqu	%xmm0, -2336(%rbp)
+ 5952      E0F6FFFF 
+ 5953              	.LBB726:
+ 5954              	.LBB727:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 5955              		.loc 2 380 0
+ 5956 5013 F30F6F85 		movdqu	-2320(%rbp), %xmm0
+ 5956      F0F6FFFF 
+ 5957 501b F30F7F85 		movdqu	%xmm0, -7648(%rbp)
+ 5957      20E2FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 5958              		.loc 2 381 0
+ 5959 5023 F30F6F85 		movdqu	-2336(%rbp), %xmm0
+ 5959      E0F6FFFF 
+ 5960 502b F30F7F85 		movdqu	%xmm0, -7664(%rbp)
+ 5960      10E2FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 207
+
+
+ 5961              		.loc 2 383 0
+ 5962 5033 C7850CF7 		movl	$0, -2292(%rbp)
+ 5962      FFFF0000 
+ 5962      0000
+ 5963 503d EB5C     		jmp	.L141
+ 5964              	.L144:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 5965              		.loc 2 385 0
+ 5966 503f 8B850CF7 		movl	-2292(%rbp), %eax
+ 5966      FFFF
+ 5967 5045 89C0     		mov	%eax, %eax
+ 5968 5047 0FB68405 		movzbl	-7664(%rbp,%rax), %eax
+ 5968      10E2FFFF 
+ 5969 504f 84C0     		testb	%al, %al
+ 5970 5051 7912     		jns	.L142
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 5971              		.loc 2 386 0
+ 5972 5053 8B850CF7 		movl	-2292(%rbp), %eax
+ 5972      FFFF
+ 5973 5059 89C0     		mov	%eax, %eax
+ 5974 505b C6840530 		movb	$0, -7632(%rbp,%rax)
+ 5974      E2FFFF00 
+ 5975 5063 EB2F     		jmp	.L143
+ 5976              	.L142:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 5977              		.loc 2 388 0
+ 5978 5065 8B8D0CF7 		movl	-2292(%rbp), %ecx
+ 5978      FFFF
+ 5979 506b 8B850CF7 		movl	-2292(%rbp), %eax
+ 5979      FFFF
+ 5980 5071 89C0     		mov	%eax, %eax
+ 5981 5073 0FB68405 		movzbl	-7664(%rbp,%rax), %eax
+ 5981      10E2FFFF 
+ 5982 507b 0FB6C0   		movzbl	%al, %eax
+ 5983 507e 83E00F   		andl	$15, %eax
+ 5984 5081 4898     		cltq
+ 5985 5083 0FB69405 		movzbl	-7648(%rbp,%rax), %edx
+ 5985      20E2FFFF 
+ 5986 508b 89C8     		mov	%ecx, %eax
+ 5987 508d 88940530 		movb	%dl, -7632(%rbp,%rax)
+ 5987      E2FFFF
+ 5988              	.L143:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 5989              		.loc 2 383 0
+ 5990 5094 83850CF7 		addl	$1, -2292(%rbp)
+ 5990      FFFF01
+ 5991              	.L141:
+ 5992 509b 83BD0CF7 		cmpl	$15, -2292(%rbp)
+ 5992      FFFF0F
+ 5993 50a2 769B     		jbe	.L144
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 5994              		.loc 2 391 0
+ 5995 50a4 F30F6F85 		movdqu	-7632(%rbp), %xmm0
+ 5995      30E2FFFF 
+ 5996              	.LBE727:
+ 5997              	.LBE726:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 208
+
+
+ 5998              		.loc 2 872 0
+ 5999 50ac F30F7F85 		movdqu	%xmm0, -2528(%rbp)
+ 5999      20F6FFFF 
+ 6000 50b4 F30F6F85 		movdqu	-2544(%rbp), %xmm0
+ 6000      10F6FFFF 
+ 6001 50bc F30F7F85 		movdqu	%xmm0, -2272(%rbp)
+ 6001      20F7FFFF 
+ 6002 50c4 F30F6F85 		movdqu	-2528(%rbp), %xmm0
+ 6002      20F6FFFF 
+ 6003 50cc F30F7F85 		movdqu	%xmm0, -2288(%rbp)
+ 6003      10F7FFFF 
+ 6004              	.LBB728:
+ 6005              	.LBB729:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 6006              		.loc 2 234 0
+ 6007 50d4 F30F6F85 		movdqu	-2288(%rbp), %xmm0
+ 6007      10F7FFFF 
+ 6008 50dc F30F6F8D 		movdqu	-2272(%rbp), %xmm1
+ 6008      20F7FFFF 
+ 6009 50e4 660FEBC1 		por	%xmm1, %xmm0
+ 6010              	.LBE729:
+ 6011              	.LBE728:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 6012              		.loc 2 874 0
+ 6013 50e8 F30F7F85 		movdqu	%xmm0, -2544(%rbp)
+ 6013      10F6FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 6014              		.loc 2 876 0
+ 6015 50f0 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 6015      00000000 
+ 6016 50f8 F30F6F8D 		movdqu	-2512(%rbp), %xmm1
+ 6016      30F6FFFF 
+ 6017 5100 F30F7F8D 		movdqu	%xmm1, -2240(%rbp)
+ 6017      40F7FFFF 
+ 6018 5108 F30F7F85 		movdqu	%xmm0, -2256(%rbp)
+ 6018      30F7FFFF 
+ 6019              	.LBB730:
+ 6020              	.LBB731:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 6021              		.loc 2 290 0
+ 6022 5110 F30F6F8D 		movdqu	-2256(%rbp), %xmm1
+ 6022      30F7FFFF 
+ 6023 5118 F30F6F85 		movdqu	-2240(%rbp), %xmm0
+ 6023      40F7FFFF 
+ 6024 5120 660FF8C1 		psubb	%xmm1, %xmm0
+ 6025              	.LBE731:
+ 6026              	.LBE730:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 6027              		.loc 2 876 0
+ 6028 5124 F30F7F85 		movdqu	%xmm0, -2512(%rbp)
+ 6028      30F6FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 6029              		.loc 2 878 0
+ 6030 512c 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 6030      00000000 
+ 6031 5134 F30F6F8D 		movdqu	-2512(%rbp), %xmm1
+ 6031      30F6FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 209
+
+
+ 6032 513c F30F7F8D 		movdqu	%xmm1, -2208(%rbp)
+ 6032      60F7FFFF 
+ 6033 5144 F30F7F85 		movdqu	%xmm0, -2224(%rbp)
+ 6033      50F7FFFF 
+ 6034              	.LBB732:
+ 6035              	.LBB733:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 6036              		.loc 2 206 0
+ 6037 514c F30F6F85 		movdqu	-2224(%rbp), %xmm0
+ 6037      50F7FFFF 
+ 6038 5154 F30F6F8D 		movdqu	-2208(%rbp), %xmm1
+ 6038      60F7FFFF 
+ 6039 515c 660FDBC1 		pand	%xmm1, %xmm0
+ 6040              	.LBE733:
+ 6041              	.LBE732:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 6042              		.loc 2 878 0
+ 6043 5160 F30F7F85 		movdqu	%xmm0, -2512(%rbp)
+ 6043      30F6FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 6044              		.loc 2 866 0
+ 6045 5168 83850CF6 		addl	$1, -2548(%rbp)
+ 6045      FFFF01
+ 6046              	.L136:
+ 6047 516f 83BD0CF6 		cmpl	$15, -2548(%rbp)
+ 6047      FFFF0F
+ 6048 5176 0F866DFD 		jbe	.L145
+ 6048      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 6049              		.loc 2 882 0
+ 6050 517c F30F6F85 		movdqu	-2544(%rbp), %xmm0
+ 6050      10F6FFFF 
+ 6051              	.LBE717:
+ 6052              	.LBE716:
+ 6053              	.LBE715:
+ 6054              	.LBE714:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 6055              		.loc 2 1682 0
+ 6056 5184 660F7F85 		movdqa	%xmm0, -9808(%rbp)
+ 6056      B0D9FFFF 
+ 6057              	.LBB734:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 6058              		.loc 2 1683 0
+ 6059 518c 660F6F85 		movdqa	-9808(%rbp), %xmm0
+ 6059      B0D9FFFF 
+ 6060 5194 F30F7F85 		movdqu	%xmm0, -7744(%rbp)
+ 6060      C0E1FFFF 
+ 6061 519c E8000000 		call	KDbgWriterGet at PLT
+ 6061      00
+ 6062 51a1 4885C0   		testq	%rax, %rax
+ 6063 51a4 7479     		je	.L147
+ 6064 51a6 BF010000 		movl	$1, %edi
+ 6064      00
+ 6065 51ab E8000000 		call	KDbgCondToFlag at PLT
+ 6065      00
+ 6066 51b0 4889C6   		movq	%rax, %rsi
+ 6067 51b3 BF100000 		movl	$16, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 210
+
+
+ 6067      00
+ 6068 51b8 E8000000 		call	KDbgTestModConds at PLT
+ 6068      00
+ 6069 51bd 84C0     		testb	%al, %al
+ 6070 51bf 745E     		je	.L147
+ 6071 51c1 8B85CCE1 		movl	-7732(%rbp), %eax
+ 6071      FFFF
+ 6072 51c7 89C7     		movl	%eax, %edi
+ 6073 51c9 E832AEFF 		call	bswap_32
+ 6073      FF
+ 6074 51ce 4189C5   		movl	%eax, %r13d
+ 6075 51d1 8B85C8E1 		movl	-7736(%rbp), %eax
+ 6075      FFFF
+ 6076 51d7 89C7     		movl	%eax, %edi
+ 6077 51d9 E822AEFF 		call	bswap_32
+ 6077      FF
+ 6078 51de 4189C4   		movl	%eax, %r12d
+ 6079 51e1 8B85C4E1 		movl	-7740(%rbp), %eax
+ 6079      FFFF
+ 6080 51e7 89C7     		movl	%eax, %edi
+ 6081 51e9 E812AEFF 		call	bswap_32
+ 6081      FF
+ 6082 51ee 89C3     		movl	%eax, %ebx
+ 6083 51f0 8B85C0E1 		movl	-7744(%rbp), %eax
+ 6083      FFFF
+ 6084 51f6 89C7     		movl	%eax, %edi
+ 6085 51f8 E803AEFF 		call	bswap_32
+ 6085      FF
+ 6086 51fd 4589E9   		movl	%r13d, %r9d
+ 6087 5200 4589E0   		movl	%r12d, %r8d
+ 6088 5203 89D9     		movl	%ebx, %ecx
+ 6089 5205 89C2     		movl	%eax, %edx
+ 6090 5207 488D3500 		leaq	.LC0(%rip), %rsi
+ 6090      000000
+ 6091 520e 488D3D00 		leaq	.LC1(%rip), %rdi
+ 6091      000000
+ 6092 5215 B8000000 		movl	$0, %eax
+ 6092      00
+ 6093 521a E8000000 		call	KDbgMsg at PLT
+ 6093      00
+ 6094              	.L147:
+ 6095 521f 660F6F85 		movdqa	-9808(%rbp), %xmm0
+ 6095      B0D9FFFF 
+ 6096 5227 F30F7F85 		movdqu	%xmm0, -2192(%rbp)
+ 6096      70F7FFFF 
+ 6097              	.LBE734:
+ 6098              	.LBB735:
+ 6099              	.LBB736:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 6100              		.loc 2 667 0
+ 6101 522f 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 6101      00000000 
+ 6102 5237 F30F6F8D 		movdqu	-2192(%rbp), %xmm1
+ 6102      70F7FFFF 
+ 6103 523f F30F7F8D 		movdqu	%xmm1, -2160(%rbp)
+ 6103      90F7FFFF 
+ 6104 5247 F30F7F85 		movdqu	%xmm0, -2176(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 211
+
+
+ 6104      80F7FFFF 
+ 6105              	.LBB737:
+ 6106              	.LBB738:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 6107              		.loc 2 380 0
+ 6108 524f F30F6F85 		movdqu	-2160(%rbp), %xmm0
+ 6108      90F7FFFF 
+ 6109 5257 F30F7F85 		movdqu	%xmm0, -7600(%rbp)
+ 6109      50E2FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 6110              		.loc 2 381 0
+ 6111 525f F30F6F85 		movdqu	-2176(%rbp), %xmm0
+ 6111      80F7FFFF 
+ 6112 5267 F30F7F85 		movdqu	%xmm0, -7616(%rbp)
+ 6112      40E2FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 6113              		.loc 2 383 0
+ 6114 526f C785ACF7 		movl	$0, -2132(%rbp)
+ 6114      FFFF0000 
+ 6114      0000
+ 6115 5279 EB5C     		jmp	.L148
+ 6116              	.L151:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 6117              		.loc 2 385 0
+ 6118 527b 8B85ACF7 		movl	-2132(%rbp), %eax
+ 6118      FFFF
+ 6119 5281 89C0     		mov	%eax, %eax
+ 6120 5283 0FB68405 		movzbl	-7616(%rbp,%rax), %eax
+ 6120      40E2FFFF 
+ 6121 528b 84C0     		testb	%al, %al
+ 6122 528d 7912     		jns	.L149
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 6123              		.loc 2 386 0
+ 6124 528f 8B85ACF7 		movl	-2132(%rbp), %eax
+ 6124      FFFF
+ 6125 5295 89C0     		mov	%eax, %eax
+ 6126 5297 C6840560 		movb	$0, -7584(%rbp,%rax)
+ 6126      E2FFFF00 
+ 6127 529f EB2F     		jmp	.L150
+ 6128              	.L149:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 6129              		.loc 2 388 0
+ 6130 52a1 8B8DACF7 		movl	-2132(%rbp), %ecx
+ 6130      FFFF
+ 6131 52a7 8B85ACF7 		movl	-2132(%rbp), %eax
+ 6131      FFFF
+ 6132 52ad 89C0     		mov	%eax, %eax
+ 6133 52af 0FB68405 		movzbl	-7616(%rbp,%rax), %eax
+ 6133      40E2FFFF 
+ 6134 52b7 0FB6C0   		movzbl	%al, %eax
+ 6135 52ba 83E00F   		andl	$15, %eax
+ 6136 52bd 4898     		cltq
+ 6137 52bf 0FB69405 		movzbl	-7600(%rbp,%rax), %edx
+ 6137      50E2FFFF 
+ 6138 52c7 89C8     		mov	%ecx, %eax
+ 6139 52c9 88940560 		movb	%dl, -7584(%rbp,%rax)
+ 6139      E2FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 212
+
+
+ 6140              	.L150:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 6141              		.loc 2 383 0
+ 6142 52d0 8385ACF7 		addl	$1, -2132(%rbp)
+ 6142      FFFF01
+ 6143              	.L148:
+ 6144 52d7 83BDACF7 		cmpl	$15, -2132(%rbp)
+ 6144      FFFF0F
+ 6145 52de 769B     		jbe	.L151
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 6146              		.loc 2 391 0
+ 6147 52e0 F30F6F85 		movdqu	-7584(%rbp), %xmm0
+ 6147      60E2FFFF 
+ 6148              	.LBE738:
+ 6149              	.LBE737:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 6150              		.loc 2 667 0
+ 6151 52e8 F30F7F85 		movdqu	%xmm0, -2192(%rbp)
+ 6151      70F7FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 6152              		.loc 2 668 0
+ 6153 52f0 F30F6F85 		movdqu	-2192(%rbp), %xmm0
+ 6153      70F7FFFF 
+ 6154              	.LBE736:
+ 6155              	.LBE735:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 6156              		.loc 2 1684 0
+ 6157 52f8 660F7F85 		movdqa	%xmm0, -9808(%rbp)
+ 6157      B0D9FFFF 
+ 6158              	.LBB739:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 6159              		.loc 2 1685 0
+ 6160 5300 660F6F85 		movdqa	-9808(%rbp), %xmm0
+ 6160      B0D9FFFF 
+ 6161 5308 F30F7F85 		movdqu	%xmm0, -7760(%rbp)
+ 6161      B0E1FFFF 
+ 6162 5310 E8000000 		call	KDbgWriterGet at PLT
+ 6162      00
+ 6163 5315 4885C0   		testq	%rax, %rax
+ 6164 5318 7479     		je	.L153
+ 6165 531a BF010000 		movl	$1, %edi
+ 6165      00
+ 6166 531f E8000000 		call	KDbgCondToFlag at PLT
+ 6166      00
+ 6167 5324 4889C6   		movq	%rax, %rsi
+ 6168 5327 BF100000 		movl	$16, %edi
+ 6168      00
+ 6169 532c E8000000 		call	KDbgTestModConds at PLT
+ 6169      00
+ 6170 5331 84C0     		testb	%al, %al
+ 6171 5333 745E     		je	.L153
+ 6172 5335 8B85BCE1 		movl	-7748(%rbp), %eax
+ 6172      FFFF
+ 6173 533b 89C7     		movl	%eax, %edi
+ 6174 533d E8BEACFF 		call	bswap_32
+ 6174      FF
+ 6175 5342 4189C5   		movl	%eax, %r13d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 213
+
+
+ 6176 5345 8B85B8E1 		movl	-7752(%rbp), %eax
+ 6176      FFFF
+ 6177 534b 89C7     		movl	%eax, %edi
+ 6178 534d E8AEACFF 		call	bswap_32
+ 6178      FF
+ 6179 5352 4189C4   		movl	%eax, %r12d
+ 6180 5355 8B85B4E1 		movl	-7756(%rbp), %eax
+ 6180      FFFF
+ 6181 535b 89C7     		movl	%eax, %edi
+ 6182 535d E89EACFF 		call	bswap_32
+ 6182      FF
+ 6183 5362 89C3     		movl	%eax, %ebx
+ 6184 5364 8B85B0E1 		movl	-7760(%rbp), %eax
+ 6184      FFFF
+ 6185 536a 89C7     		movl	%eax, %edi
+ 6186 536c E88FACFF 		call	bswap_32
+ 6186      FF
+ 6187 5371 4589E9   		movl	%r13d, %r9d
+ 6188 5374 4589E0   		movl	%r12d, %r8d
+ 6189 5377 89D9     		movl	%ebx, %ecx
+ 6190 5379 89C2     		movl	%eax, %edx
+ 6191 537b 488D3500 		leaq	.LC2(%rip), %rsi
+ 6191      000000
+ 6192 5382 488D3D00 		leaq	.LC1(%rip), %rdi
+ 6192      000000
+ 6193 5389 B8000000 		movl	$0, %eax
+ 6193      00
+ 6194 538e E8000000 		call	KDbgMsg at PLT
+ 6194      00
+ 6195              	.L153:
+ 6196 5393 660F6F85 		movdqa	-9808(%rbp), %xmm0
+ 6196      B0D9FFFF 
+ 6197 539b F30F7F85 		movdqu	%xmm0, -2112(%rbp)
+ 6197      C0F7FFFF 
+ 6198 53a3 660F6F85 		movdqa	-9792(%rbp), %xmm0
+ 6198      C0D9FFFF 
+ 6199 53ab F30F7F85 		movdqu	%xmm0, -2128(%rbp)
+ 6199      B0F7FFFF 
+ 6200              	.LBE739:
+ 6201              	.LBB740:
+ 6202              	.LBB741:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 6203              		.loc 2 178 0
+ 6204 53b3 F30F6F85 		movdqu	-2128(%rbp), %xmm0
+ 6204      B0F7FFFF 
+ 6205 53bb F30F6F8D 		movdqu	-2112(%rbp), %xmm1
+ 6205      C0F7FFFF 
+ 6206 53c3 660FEFC1 		pxor	%xmm1, %xmm0
+ 6207              	.LBE741:
+ 6208              	.LBE740:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 6209              		.loc 2 1686 0
+ 6210 53c7 660F7F85 		movdqa	%xmm0, -9808(%rbp)
+ 6210      B0D9FFFF 
+ 6211              	.LBB742:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 6212              		.loc 2 1687 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 214
+
+
+ 6213 53cf 660F6F85 		movdqa	-9808(%rbp), %xmm0
+ 6213      B0D9FFFF 
+ 6214 53d7 F30F7F85 		movdqu	%xmm0, -7776(%rbp)
+ 6214      A0E1FFFF 
+ 6215 53df E8000000 		call	KDbgWriterGet at PLT
+ 6215      00
+ 6216 53e4 4885C0   		testq	%rax, %rax
+ 6217 53e7 7479     		je	.L155
+ 6218 53e9 BF010000 		movl	$1, %edi
+ 6218      00
+ 6219 53ee E8000000 		call	KDbgCondToFlag at PLT
+ 6219      00
+ 6220 53f3 4889C6   		movq	%rax, %rsi
+ 6221 53f6 BF100000 		movl	$16, %edi
+ 6221      00
+ 6222 53fb E8000000 		call	KDbgTestModConds at PLT
+ 6222      00
+ 6223 5400 84C0     		testb	%al, %al
+ 6224 5402 745E     		je	.L155
+ 6225 5404 8B85ACE1 		movl	-7764(%rbp), %eax
+ 6225      FFFF
+ 6226 540a 89C7     		movl	%eax, %edi
+ 6227 540c E8EFABFF 		call	bswap_32
+ 6227      FF
+ 6228 5411 4189C5   		movl	%eax, %r13d
+ 6229 5414 8B85A8E1 		movl	-7768(%rbp), %eax
+ 6229      FFFF
+ 6230 541a 89C7     		movl	%eax, %edi
+ 6231 541c E8DFABFF 		call	bswap_32
+ 6231      FF
+ 6232 5421 4189C4   		movl	%eax, %r12d
+ 6233 5424 8B85A4E1 		movl	-7772(%rbp), %eax
+ 6233      FFFF
+ 6234 542a 89C7     		movl	%eax, %edi
+ 6235 542c E8CFABFF 		call	bswap_32
+ 6235      FF
+ 6236 5431 89C3     		movl	%eax, %ebx
+ 6237 5433 8B85A0E1 		movl	-7776(%rbp), %eax
+ 6237      FFFF
+ 6238 5439 89C7     		movl	%eax, %edi
+ 6239 543b E8C0ABFF 		call	bswap_32
+ 6239      FF
+ 6240 5440 4589E9   		movl	%r13d, %r9d
+ 6241 5443 4589E0   		movl	%r12d, %r8d
+ 6242 5446 89D9     		movl	%ebx, %ecx
+ 6243 5448 89C2     		movl	%eax, %edx
+ 6244 544a 488D3500 		leaq	.LC3(%rip), %rsi
+ 6244      000000
+ 6245 5451 488D3D00 		leaq	.LC1(%rip), %rdi
+ 6245      000000
+ 6246 5458 B8000000 		movl	$0, %eax
+ 6246      00
+ 6247 545d E8000000 		call	KDbgMsg at PLT
+ 6247      00
+ 6248              	.L155:
+ 6249 5462 660F6F85 		movdqa	-9808(%rbp), %xmm0
+ 6249      B0D9FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 215
+
+
+ 6250 546a F30F7F85 		movdqu	%xmm0, -2096(%rbp)
+ 6250      D0F7FFFF 
+ 6251              	.LBE742:
+ 6252              	.LBB743:
+ 6253              	.LBB744:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 6254              		.loc 2 1357 0
+ 6255 5472 F30F6F85 		movdqu	-2096(%rbp), %xmm0
+ 6255      D0F7FFFF 
+ 6256 547a F30F7F85 		movdqu	%xmm0, -7568(%rbp)
+ 6256      70E2FFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 6257              		.loc 2 1358 0
+ 6258 5482 8B857CE2 		movl	-7556(%rbp), %eax
+ 6258      FFFF
+ 6259 5488 898578E2 		movl	%eax, -7560(%rbp)
+ 6259      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 6260              		.loc 2 1359 0
+ 6261 548e 8B857CE2 		movl	-7556(%rbp), %eax
+ 6261      FFFF
+ 6262 5494 898574E2 		movl	%eax, -7564(%rbp)
+ 6262      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 6263              		.loc 2 1360 0
+ 6264 549a 8B857CE2 		movl	-7556(%rbp), %eax
+ 6264      FFFF
+ 6265 54a0 898570E2 		movl	%eax, -7568(%rbp)
+ 6265      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 6266              		.loc 2 1361 0
+ 6267 54a6 F30F6F85 		movdqu	-7568(%rbp), %xmm0
+ 6267      70E2FFFF 
+ 6268              	.LBE744:
+ 6269              	.LBE743:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 6270              		.loc 2 1688 0
+ 6271 54ae 660F7F85 		movdqa	%xmm0, -9808(%rbp)
+ 6271      B0D9FFFF 
+ 6272              	.LBB745:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 6273              		.loc 2 1689 0
+ 6274 54b6 660F6F85 		movdqa	-9808(%rbp), %xmm0
+ 6274      B0D9FFFF 
+ 6275 54be F30F7F85 		movdqu	%xmm0, -7792(%rbp)
+ 6275      90E1FFFF 
+ 6276 54c6 E8000000 		call	KDbgWriterGet at PLT
+ 6276      00
+ 6277 54cb 4885C0   		testq	%rax, %rax
+ 6278 54ce 7479     		je	.L157
+ 6279 54d0 BF010000 		movl	$1, %edi
+ 6279      00
+ 6280 54d5 E8000000 		call	KDbgCondToFlag at PLT
+ 6280      00
+ 6281 54da 4889C6   		movq	%rax, %rsi
+ 6282 54dd BF100000 		movl	$16, %edi
+ 6282      00
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 216
+
+
+ 6283 54e2 E8000000 		call	KDbgTestModConds at PLT
+ 6283      00
+ 6284 54e7 84C0     		testb	%al, %al
+ 6285 54e9 745E     		je	.L157
+ 6286 54eb 8B859CE1 		movl	-7780(%rbp), %eax
+ 6286      FFFF
+ 6287 54f1 89C7     		movl	%eax, %edi
+ 6288 54f3 E808ABFF 		call	bswap_32
+ 6288      FF
+ 6289 54f8 4189C5   		movl	%eax, %r13d
+ 6290 54fb 8B8598E1 		movl	-7784(%rbp), %eax
+ 6290      FFFF
+ 6291 5501 89C7     		movl	%eax, %edi
+ 6292 5503 E8F8AAFF 		call	bswap_32
+ 6292      FF
+ 6293 5508 4189C4   		movl	%eax, %r12d
+ 6294 550b 8B8594E1 		movl	-7788(%rbp), %eax
+ 6294      FFFF
+ 6295 5511 89C7     		movl	%eax, %edi
+ 6296 5513 E8E8AAFF 		call	bswap_32
+ 6296      FF
+ 6297 5518 89C3     		movl	%eax, %ebx
+ 6298 551a 8B8590E1 		movl	-7792(%rbp), %eax
+ 6298      FFFF
+ 6299 5520 89C7     		movl	%eax, %edi
+ 6300 5522 E8D9AAFF 		call	bswap_32
+ 6300      FF
+ 6301 5527 4589E9   		movl	%r13d, %r9d
+ 6302 552a 4589E0   		movl	%r12d, %r8d
+ 6303 552d 89D9     		movl	%ebx, %ecx
+ 6304 552f 89C2     		movl	%eax, %edx
+ 6305 5531 488D3500 		leaq	.LC4(%rip), %rsi
+ 6305      000000
+ 6306 5538 488D3D00 		leaq	.LC1(%rip), %rdi
+ 6306      000000
+ 6307 553f B8000000 		movl	$0, %eax
+ 6307      00
+ 6308 5544 E8000000 		call	KDbgMsg at PLT
+ 6308      00
+ 6309              	.L157:
+ 6310              	.LBE745:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 6311              		.loc 2 1690 0
+ 6312 5549 660F6F85 		movdqa	-9808(%rbp), %xmm0
+ 6312      B0D9FFFF 
+ 6313              	.LBE711:
+ 6314              	.LBE710:
+1750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x40,7);
+ 6315              		.loc 2 1750 0
+ 6316 5551 F30F7F85 		movdqu	%xmm0, -6624(%rbp)
+ 6316      20E6FFFF 
+ 6317 5559 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 6317      10E6FFFF 
+ 6318 5561 F30F7F85 		movdqu	%xmm0, -2080(%rbp)
+ 6318      E0F7FFFF 
+ 6319              	.LBB746:
+ 6320              	.LBB747:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 217
+
+
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 6321              		.loc 2 1565 0
+ 6322 5569 F30F6F85 		movdqu	-2080(%rbp), %xmm0
+ 6322      E0F7FFFF 
+ 6323 5571 660F7F85 		movdqa	%xmm0, -9760(%rbp)
+ 6323      E0D9FFFF 
+ 6324 5579 660F6F85 		movdqa	-9760(%rbp), %xmm0
+ 6324      E0D9FFFF 
+ 6325 5581 F30F7F85 		movdqu	%xmm0, -2064(%rbp)
+ 6325      F0F7FFFF 
+ 6326              	.LBB748:
+ 6327              	.LBB749:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 6328              		.loc 2 1282 0
+ 6329 5589 F30F6F85 		movdqu	-2064(%rbp), %xmm0
+ 6329      F0F7FFFF 
+ 6330 5591 F30F7F85 		movdqu	%xmm0, -7552(%rbp)
+ 6330      80E2FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 6331              		.loc 2 1283 0
+ 6332 5599 8B8588E2 		movl	-7544(%rbp), %eax
+ 6332      FFFF
+ 6333 559f 89858CE2 		movl	%eax, -7540(%rbp)
+ 6333      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 6334              		.loc 2 1284 0
+ 6335 55a5 8B8584E2 		movl	-7548(%rbp), %eax
+ 6335      FFFF
+ 6336 55ab 898588E2 		movl	%eax, -7544(%rbp)
+ 6336      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 6337              		.loc 2 1285 0
+ 6338 55b1 8B8580E2 		movl	-7552(%rbp), %eax
+ 6338      FFFF
+ 6339 55b7 898584E2 		movl	%eax, -7548(%rbp)
+ 6339      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 6340              		.loc 2 1286 0
+ 6341 55bd C78580E2 		movl	$0, -7552(%rbp)
+ 6341      FFFF0000 
+ 6341      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 6342              		.loc 2 1287 0
+ 6343 55c7 F30F6F85 		movdqu	-7552(%rbp), %xmm0
+ 6343      80E2FFFF 
+ 6344              	.LBE749:
+ 6345              	.LBE748:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6346              		.loc 2 1567 0
+ 6347 55cf 660F7F85 		movdqa	%xmm0, -9760(%rbp)
+ 6347      E0D9FFFF 
+ 6348 55d7 660F6F85 		movdqa	-9760(%rbp), %xmm0
+ 6348      E0D9FFFF 
+ 6349 55df 660FEF85 		pxor	-2080(%rbp), %xmm0
+ 6349      E0F7FFFF 
+ 6350 55e7 F30F7F85 		movdqu	%xmm0, -2080(%rbp)
+ 6350      E0F7FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 218
+
+
+ 6351 55ef 660F6F85 		movdqa	-9760(%rbp), %xmm0
+ 6351      E0D9FFFF 
+ 6352 55f7 F30F7F85 		movdqu	%xmm0, -2048(%rbp)
+ 6352      00F8FFFF 
+ 6353              	.LBB750:
+ 6354              	.LBB751:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 6355              		.loc 2 1282 0
+ 6356 55ff F30F6F85 		movdqu	-2048(%rbp), %xmm0
+ 6356      00F8FFFF 
+ 6357 5607 F30F7F85 		movdqu	%xmm0, -7536(%rbp)
+ 6357      90E2FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 6358              		.loc 2 1283 0
+ 6359 560f 8B8598E2 		movl	-7528(%rbp), %eax
+ 6359      FFFF
+ 6360 5615 89859CE2 		movl	%eax, -7524(%rbp)
+ 6360      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 6361              		.loc 2 1284 0
+ 6362 561b 8B8594E2 		movl	-7532(%rbp), %eax
+ 6362      FFFF
+ 6363 5621 898598E2 		movl	%eax, -7528(%rbp)
+ 6363      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 6364              		.loc 2 1285 0
+ 6365 5627 8B8590E2 		movl	-7536(%rbp), %eax
+ 6365      FFFF
+ 6366 562d 898594E2 		movl	%eax, -7532(%rbp)
+ 6366      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 6367              		.loc 2 1286 0
+ 6368 5633 C78590E2 		movl	$0, -7536(%rbp)
+ 6368      FFFF0000 
+ 6368      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 6369              		.loc 2 1287 0
+ 6370 563d F30F6F85 		movdqu	-7536(%rbp), %xmm0
+ 6370      90E2FFFF 
+ 6371              	.LBE751:
+ 6372              	.LBE750:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6373              		.loc 2 1568 0
+ 6374 5645 660F7F85 		movdqa	%xmm0, -9760(%rbp)
+ 6374      E0D9FFFF 
+ 6375 564d 660F6F85 		movdqa	-9760(%rbp), %xmm0
+ 6375      E0D9FFFF 
+ 6376 5655 660FEF85 		pxor	-2080(%rbp), %xmm0
+ 6376      E0F7FFFF 
+ 6377 565d F30F7F85 		movdqu	%xmm0, -2080(%rbp)
+ 6377      E0F7FFFF 
+ 6378 5665 660F6F85 		movdqa	-9760(%rbp), %xmm0
+ 6378      E0D9FFFF 
+ 6379 566d F30F7F85 		movdqu	%xmm0, -2032(%rbp)
+ 6379      10F8FFFF 
+ 6380              	.LBB752:
+ 6381              	.LBB753:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 219
+
+
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 6382              		.loc 2 1282 0
+ 6383 5675 F30F6F85 		movdqu	-2032(%rbp), %xmm0
+ 6383      10F8FFFF 
+ 6384 567d F30F7F85 		movdqu	%xmm0, -7520(%rbp)
+ 6384      A0E2FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 6385              		.loc 2 1283 0
+ 6386 5685 8B85A8E2 		movl	-7512(%rbp), %eax
+ 6386      FFFF
+ 6387 568b 8985ACE2 		movl	%eax, -7508(%rbp)
+ 6387      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 6388              		.loc 2 1284 0
+ 6389 5691 8B85A4E2 		movl	-7516(%rbp), %eax
+ 6389      FFFF
+ 6390 5697 8985A8E2 		movl	%eax, -7512(%rbp)
+ 6390      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 6391              		.loc 2 1285 0
+ 6392 569d 8B85A0E2 		movl	-7520(%rbp), %eax
+ 6392      FFFF
+ 6393 56a3 8985A4E2 		movl	%eax, -7516(%rbp)
+ 6393      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 6394              		.loc 2 1286 0
+ 6395 56a9 C785A0E2 		movl	$0, -7520(%rbp)
+ 6395      FFFF0000 
+ 6395      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 6396              		.loc 2 1287 0
+ 6397 56b3 F30F6F85 		movdqu	-7520(%rbp), %xmm0
+ 6397      A0E2FFFF 
+ 6398              	.LBE753:
+ 6399              	.LBE752:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6400              		.loc 2 1569 0
+ 6401 56bb 660F7F85 		movdqa	%xmm0, -9760(%rbp)
+ 6401      E0D9FFFF 
+ 6402 56c3 660F6F85 		movdqa	-9760(%rbp), %xmm0
+ 6402      E0D9FFFF 
+ 6403 56cb 660FEF85 		pxor	-2080(%rbp), %xmm0
+ 6403      E0F7FFFF 
+ 6404 56d3 F30F7F85 		movdqu	%xmm0, -2080(%rbp)
+ 6404      E0F7FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 6405              		.loc 2 1571 0
+ 6406 56db F30F6F85 		movdqu	-2080(%rbp), %xmm0
+ 6406      E0F7FFFF 
+ 6407              	.LBE747:
+ 6408              	.LBE746:
+1750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x40,7);
+ 6409              		.loc 2 1750 0
+ 6410 56e3 F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 6410      10E6FFFF 
+ 6411 56eb F30F6F85 		movdqu	-6624(%rbp), %xmm0
+ 6411      20E6FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 220
+
+
+ 6412 56f3 F30F6F8D 		movdqu	-6640(%rbp), %xmm1
+ 6412      10E6FFFF 
+ 6413 56fb 660FEFC1 		pxor	%xmm1, %xmm0
+ 6414 56ff F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 6414      10E6FFFF 
+ 6415 5707 488B85B8 		movq	-9544(%rbp), %rax
+ 6415      DAFFFF
+ 6416 570e 4883C070 		addq	$112, %rax
+ 6417 5712 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 6417      10E6FFFF 
+ 6418 571a F30F7F00 		movdqu	%xmm0, (%rax)
+ 6419 571e F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 6419      10E6FFFF 
+ 6420 5726 F30F7F85 		movdqu	%xmm0, -2000(%rbp)
+ 6420      30F8FFFF 
+ 6421              	.LBB754:
+ 6422              	.LBB755:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 6423              		.loc 2 1681 0
+ 6424 572e B8800000 		movl	$128, %eax
+ 6424      00
+ 6425 5733 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 6425      00000000 
+ 6426 573b F30F7F85 		movdqu	%xmm0, -1968(%rbp)
+ 6426      50F8FFFF 
+ 6427 5743 89854CF8 		movl	%eax, -1972(%rbp)
+ 6427      FFFF
+ 6428              	.LBB756:
+ 6429              	.LBB757:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 6430              		.loc 2 522 0
+ 6431 5749 F30F6F85 		movdqu	-1968(%rbp), %xmm0
+ 6431      50F8FFFF 
+ 6432 5751 F30F7F85 		movdqu	%xmm0, -7440(%rbp)
+ 6432      F0E2FFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 6433              		.loc 2 523 0
+ 6434 5759 B8030000 		movl	$3, %eax
+ 6434      00
+ 6435 575e 4898     		cltq
+ 6436 5760 8B954CF8 		movl	-1972(%rbp), %edx
+ 6436      FFFF
+ 6437 5766 899485F0 		movl	%edx, -7440(%rbp,%rax,4)
+ 6437      E2FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 6438              		.loc 2 524 0
+ 6439 576d F30F6F85 		movdqu	-7440(%rbp), %xmm0
+ 6439      F0E2FFFF 
+ 6440 5775 F30F7F85 		movdqu	%xmm0, -1968(%rbp)
+ 6440      50F8FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 6441              		.loc 2 526 0
+ 6442 577d F30F6F85 		movdqu	-1968(%rbp), %xmm0
+ 6442      50F8FFFF 
+ 6443              	.LBE757:
+ 6444              	.LBE756:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 221
+
+
+ 6445              		.loc 2 1681 0
+ 6446 5785 660F7F85 		movdqa	%xmm0, -9728(%rbp)
+ 6446      00DAFFFF 
+ 6447 578d F30F6F85 		movdqu	-2000(%rbp), %xmm0
+ 6447      30F8FFFF 
+ 6448 5795 F30F7F85 		movdqu	%xmm0, -1952(%rbp)
+ 6448      60F8FFFF 
+ 6449 579d F30F6F85 		movdqu	-1952(%rbp), %xmm0
+ 6449      60F8FFFF 
+ 6450 57a5 F30F7F85 		movdqu	%xmm0, -1920(%rbp)
+ 6450      80F8FFFF 
+ 6451 57ad 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 6451      000000
+ 6452 57b4 48898578 		movq	%rax, -1928(%rbp)
+ 6452      F8FFFF
+ 6453              	.LBB758:
+ 6454              	.LBB759:
+ 6455              	.LBB760:
+ 6456              	.LBB761:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 6457              		.loc 2 851 0
+ 6458 57bb 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 6458      00000000 
+ 6459 57c3 F30F7F85 		movdqu	%xmm0, -1888(%rbp)
+ 6459      A0F8FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 6460              		.loc 2 854 0
+ 6461 57cb 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 6461      00000000 
+ 6462 57d3 F30F6F8D 		movdqu	-1920(%rbp), %xmm1
+ 6462      80F8FFFF 
+ 6463 57db F30F7F8D 		movdqu	%xmm1, -1808(%rbp)
+ 6463      F0F8FFFF 
+ 6464 57e3 F30F7F85 		movdqu	%xmm0, -1824(%rbp)
+ 6464      E0F8FFFF 
+ 6465              	.LBB762:
+ 6466              	.LBB763:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 6467              		.loc 2 206 0
+ 6468 57eb F30F6F85 		movdqu	-1824(%rbp), %xmm0
+ 6468      E0F8FFFF 
+ 6469 57f3 F30F6F8D 		movdqu	-1808(%rbp), %xmm1
+ 6469      F0F8FFFF 
+ 6470 57fb 660FDBC1 		pand	%xmm1, %xmm0
+ 6471              	.LBE763:
+ 6472              	.LBE762:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 6473              		.loc 2 854 0
+ 6474 57ff F30F7F85 		movdqu	%xmm0, -1840(%rbp)
+ 6474      D0F8FFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 6475              		.loc 2 862 0
+ 6476 5807 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 6476      00000000 
+ 6477 580f F30F6F8D 		movdqu	-1920(%rbp), %xmm1
+ 6477      80F8FFFF 
+ 6478 5817 F30F7F8D 		movdqu	%xmm1, -1776(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 222
+
+
+ 6478      10F9FFFF 
+ 6479 581f F30F7F85 		movdqu	%xmm0, -1792(%rbp)
+ 6479      00F9FFFF 
+ 6480              	.LBB764:
+ 6481              		.loc 2 2642 0
+ 6482 5827 0FB68510 		movzbl	-1776(%rbp), %eax
+ 6482      F9FFFF
+ 6483 582e 0FB69500 		movzbl	-1792(%rbp), %edx
+ 6483      F9FFFF
+ 6484 5835 0FB6C0   		movzbl	%al, %eax
+ 6485 5838 6689858E 		movw	%ax, -10354(%rbp)
+ 6485      D7FFFF
+ 6486 583f 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 6486      D7FFFF
+ 6487 5846 F6F2     		divb	%dl
+ 6488 5848 4189C7   		movl	%eax, %r15d
+ 6489 584b 0FB68511 		movzbl	-1775(%rbp), %eax
+ 6489      F9FFFF
+ 6490 5852 0FB69501 		movzbl	-1791(%rbp), %edx
+ 6490      F9FFFF
+ 6491 5859 0FB6C0   		movzbl	%al, %eax
+ 6492 585c 6689858E 		movw	%ax, -10354(%rbp)
+ 6492      D7FFFF
+ 6493 5863 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 6493      D7FFFF
+ 6494 586a F6F2     		divb	%dl
+ 6495 586c 88851FDA 		movb	%al, -9697(%rbp)
+ 6495      FFFF
+ 6496 5872 0FB68512 		movzbl	-1774(%rbp), %eax
+ 6496      F9FFFF
+ 6497 5879 0FB69502 		movzbl	-1790(%rbp), %edx
+ 6497      F9FFFF
+ 6498 5880 0FB6C0   		movzbl	%al, %eax
+ 6499 5883 6689858E 		movw	%ax, -10354(%rbp)
+ 6499      D7FFFF
+ 6500 588a 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 6500      D7FFFF
+ 6501 5891 F6F2     		divb	%dl
+ 6502 5893 88851EDA 		movb	%al, -9698(%rbp)
+ 6502      FFFF
+ 6503 5899 0FB68513 		movzbl	-1773(%rbp), %eax
+ 6503      F9FFFF
+ 6504 58a0 0FB69503 		movzbl	-1789(%rbp), %edx
+ 6504      F9FFFF
+ 6505 58a7 0FB6C0   		movzbl	%al, %eax
+ 6506 58aa 6689858E 		movw	%ax, -10354(%rbp)
+ 6506      D7FFFF
+ 6507 58b1 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 6507      D7FFFF
+ 6508 58b8 F6F2     		divb	%dl
+ 6509 58ba 88851DDA 		movb	%al, -9699(%rbp)
+ 6509      FFFF
+ 6510 58c0 0FB68514 		movzbl	-1772(%rbp), %eax
+ 6510      F9FFFF
+ 6511 58c7 0FB69504 		movzbl	-1788(%rbp), %edx
+ 6511      F9FFFF
+ 6512 58ce 0FB6C0   		movzbl	%al, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 223
+
+
+ 6513 58d1 6689858E 		movw	%ax, -10354(%rbp)
+ 6513      D7FFFF
+ 6514 58d8 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 6514      D7FFFF
+ 6515 58df F6F2     		divb	%dl
+ 6516 58e1 88851CDA 		movb	%al, -9700(%rbp)
+ 6516      FFFF
+ 6517 58e7 0FB68515 		movzbl	-1771(%rbp), %eax
+ 6517      F9FFFF
+ 6518 58ee 0FB69505 		movzbl	-1787(%rbp), %edx
+ 6518      F9FFFF
+ 6519 58f5 0FB6C0   		movzbl	%al, %eax
+ 6520 58f8 6689858E 		movw	%ax, -10354(%rbp)
+ 6520      D7FFFF
+ 6521 58ff 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 6521      D7FFFF
+ 6522 5906 F6F2     		divb	%dl
+ 6523 5908 4189C1   		movl	%eax, %r9d
+ 6524 590b 0FB68516 		movzbl	-1770(%rbp), %eax
+ 6524      F9FFFF
+ 6525 5912 0FB69506 		movzbl	-1786(%rbp), %edx
+ 6525      F9FFFF
+ 6526 5919 0FB6C0   		movzbl	%al, %eax
+ 6527 591c 6689858E 		movw	%ax, -10354(%rbp)
+ 6527      D7FFFF
+ 6528 5923 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 6528      D7FFFF
+ 6529 592a F6F2     		divb	%dl
+ 6530 592c 89C7     		movl	%eax, %edi
+ 6531 592e 0FB68517 		movzbl	-1769(%rbp), %eax
+ 6531      F9FFFF
+ 6532 5935 0FB69507 		movzbl	-1785(%rbp), %edx
+ 6532      F9FFFF
+ 6533 593c 0FB6C0   		movzbl	%al, %eax
+ 6534 593f 6689858E 		movw	%ax, -10354(%rbp)
+ 6534      D7FFFF
+ 6535 5946 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 6535      D7FFFF
+ 6536 594d F6F2     		divb	%dl
+ 6537 594f 89C3     		movl	%eax, %ebx
+ 6538 5951 0FB68518 		movzbl	-1768(%rbp), %eax
+ 6538      F9FFFF
+ 6539 5958 0FB69508 		movzbl	-1784(%rbp), %edx
+ 6539      F9FFFF
+ 6540 595f 0FB6C0   		movzbl	%al, %eax
+ 6541 5962 6689858E 		movw	%ax, -10354(%rbp)
+ 6541      D7FFFF
+ 6542 5969 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 6542      D7FFFF
+ 6543 5970 F6F2     		divb	%dl
+ 6544 5972 4189C2   		movl	%eax, %r10d
+ 6545 5975 0FB68519 		movzbl	-1767(%rbp), %eax
+ 6545      F9FFFF
+ 6546 597c 0FB69509 		movzbl	-1783(%rbp), %edx
+ 6546      F9FFFF
+ 6547 5983 0FB6C0   		movzbl	%al, %eax
+ 6548 5986 6689858E 		movw	%ax, -10354(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 224
+
+
+ 6548      D7FFFF
+ 6549 598d 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 6549      D7FFFF
+ 6550 5994 F6F2     		divb	%dl
+ 6551 5996 4189C3   		movl	%eax, %r11d
+ 6552 5999 0FB6851A 		movzbl	-1766(%rbp), %eax
+ 6552      F9FFFF
+ 6553 59a0 0FB6950A 		movzbl	-1782(%rbp), %edx
+ 6553      F9FFFF
+ 6554 59a7 0FB6C0   		movzbl	%al, %eax
+ 6555 59aa 6689858E 		movw	%ax, -10354(%rbp)
+ 6555      D7FFFF
+ 6556 59b1 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 6556      D7FFFF
+ 6557 59b8 F6F2     		divb	%dl
+ 6558 59ba 4189C4   		movl	%eax, %r12d
+ 6559 59bd 0FB6851B 		movzbl	-1765(%rbp), %eax
+ 6559      F9FFFF
+ 6560 59c4 0FB6950B 		movzbl	-1781(%rbp), %edx
+ 6560      F9FFFF
+ 6561 59cb 0FB6C0   		movzbl	%al, %eax
+ 6562 59ce 6689858E 		movw	%ax, -10354(%rbp)
+ 6562      D7FFFF
+ 6563 59d5 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 6563      D7FFFF
+ 6564 59dc F6F2     		divb	%dl
+ 6565 59de 4189C5   		movl	%eax, %r13d
+ 6566 59e1 0FB6851C 		movzbl	-1764(%rbp), %eax
+ 6566      F9FFFF
+ 6567 59e8 0FB6950C 		movzbl	-1780(%rbp), %edx
+ 6567      F9FFFF
+ 6568 59ef 0FB6C0   		movzbl	%al, %eax
+ 6569 59f2 6689858E 		movw	%ax, -10354(%rbp)
+ 6569      D7FFFF
+ 6570 59f9 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 6570      D7FFFF
+ 6571 5a00 F6F2     		divb	%dl
+ 6572 5a02 4189C6   		movl	%eax, %r14d
+ 6573 5a05 0FB6851D 		movzbl	-1763(%rbp), %eax
+ 6573      F9FFFF
+ 6574 5a0c 0FB6950D 		movzbl	-1779(%rbp), %edx
+ 6574      F9FFFF
+ 6575 5a13 0FB6C0   		movzbl	%al, %eax
+ 6576 5a16 6689858E 		movw	%ax, -10354(%rbp)
+ 6576      D7FFFF
+ 6577 5a1d 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 6577      D7FFFF
+ 6578 5a24 F6F2     		divb	%dl
+ 6579 5a26 4189C0   		movl	%eax, %r8d
+ 6580 5a29 0FB6851E 		movzbl	-1762(%rbp), %eax
+ 6580      F9FFFF
+ 6581 5a30 0FB6950E 		movzbl	-1778(%rbp), %edx
+ 6581      F9FFFF
+ 6582 5a37 0FB6C0   		movzbl	%al, %eax
+ 6583 5a3a 6689858E 		movw	%ax, -10354(%rbp)
+ 6583      D7FFFF
+ 6584 5a41 0FB7858E 		movzwl	-10354(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 225
+
+
+ 6584      D7FFFF
+ 6585 5a48 F6F2     		divb	%dl
+ 6586 5a4a 89C6     		movl	%eax, %esi
+ 6587 5a4c 0FB6851F 		movzbl	-1761(%rbp), %eax
+ 6587      F9FFFF
+ 6588 5a53 0FB6950F 		movzbl	-1777(%rbp), %edx
+ 6588      F9FFFF
+ 6589 5a5a 0FB6C0   		movzbl	%al, %eax
+ 6590 5a5d 6689858E 		movw	%ax, -10354(%rbp)
+ 6590      D7FFFF
+ 6591 5a64 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 6591      D7FFFF
+ 6592 5a6b F6F2     		divb	%dl
+ 6593 5a6d 89C1     		movl	%eax, %ecx
+ 6594              	.LBB765:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 6595              		.loc 2 346 0
+ 6596 5a6f 0FB6D3   		movzbl	%bl, %edx
+ 6597 5a72 400FB6C7 		movzbl	%dil, %eax
+ 6598 5a76 48C1E208 		salq	$8, %rdx
+ 6599 5a7a 4809C2   		orq	%rax, %rdx
+ 6600 5a7d 410FB6C1 		movzbl	%r9b, %eax
+ 6601 5a81 48C1E208 		salq	$8, %rdx
+ 6602 5a85 4809C2   		orq	%rax, %rdx
+ 6603 5a88 0FB6851C 		movzbl	-9700(%rbp), %eax
+ 6603      DAFFFF
+ 6604 5a8f 48C1E208 		salq	$8, %rdx
+ 6605 5a93 4809C2   		orq	%rax, %rdx
+ 6606 5a96 0FB6851D 		movzbl	-9699(%rbp), %eax
+ 6606      DAFFFF
+ 6607 5a9d 48C1E208 		salq	$8, %rdx
+ 6608 5aa1 4809C2   		orq	%rax, %rdx
+ 6609 5aa4 0FB6851E 		movzbl	-9698(%rbp), %eax
+ 6609      DAFFFF
+ 6610 5aab 48C1E208 		salq	$8, %rdx
+ 6611 5aaf 4809C2   		orq	%rax, %rdx
+ 6612 5ab2 0FB6851F 		movzbl	-9697(%rbp), %eax
+ 6612      DAFFFF
+ 6613 5ab9 48C1E208 		salq	$8, %rdx
+ 6614 5abd 4809C2   		orq	%rax, %rdx
+ 6615 5ac0 410FB6C7 		movzbl	%r15b, %eax
+ 6616 5ac4 48C1E208 		salq	$8, %rdx
+ 6617 5ac8 4809C2   		orq	%rax, %rdx
+ 6618 5acb 0FB6C1   		movzbl	%cl, %eax
+ 6619 5ace 400FB6CE 		movzbl	%sil, %ecx
+ 6620 5ad2 48C1E008 		salq	$8, %rax
+ 6621 5ad6 4809C8   		orq	%rcx, %rax
+ 6622 5ad9 410FB6C8 		movzbl	%r8b, %ecx
+ 6623 5add 48C1E008 		salq	$8, %rax
+ 6624 5ae1 4809C8   		orq	%rcx, %rax
+ 6625 5ae4 410FB6CE 		movzbl	%r14b, %ecx
+ 6626 5ae8 48C1E008 		salq	$8, %rax
+ 6627 5aec 4809C8   		orq	%rcx, %rax
+ 6628 5aef 410FB6CD 		movzbl	%r13b, %ecx
+ 6629 5af3 48C1E008 		salq	$8, %rax
+ 6630 5af7 4809C8   		orq	%rcx, %rax
+ 6631 5afa 410FB6CC 		movzbl	%r12b, %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 226
+
+
+ 6632 5afe 48C1E008 		salq	$8, %rax
+ 6633 5b02 4809C8   		orq	%rcx, %rax
+ 6634 5b05 410FB6CB 		movzbl	%r11b, %ecx
+ 6635 5b09 48C1E008 		salq	$8, %rax
+ 6636 5b0d 4809C8   		orq	%rcx, %rax
+ 6637 5b10 410FB6CA 		movzbl	%r10b, %ecx
+ 6638 5b14 48C1E008 		salq	$8, %rax
+ 6639 5b18 4809C8   		orq	%rcx, %rax
+ 6640 5b1b 488995B0 		movq	%rdx, -10320(%rbp)
+ 6640      D7FFFF
+ 6641 5b22 488985B8 		movq	%rax, -10312(%rbp)
+ 6641      D7FFFF
+ 6642 5b29 660F6F85 		movdqa	-10320(%rbp), %xmm0
+ 6642      B0D7FFFF 
+ 6643              	.LBE765:
+ 6644              	.LBE764:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 6645              		.loc 2 862 0
+ 6646 5b31 F30F7F85 		movdqu	%xmm0, -1856(%rbp)
+ 6646      C0F8FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 6647              		.loc 2 866 0
+ 6648 5b39 C7859CF8 		movl	$0, -1892(%rbp)
+ 6648      FFFF0000 
+ 6648      0000
+ 6649 5b43 E9860200 		jmp	.L158
+ 6649      00
+ 6650              	.L167:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 6651              		.loc 2 868 0
+ 6652 5b48 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 6652      00000000 
+ 6653 5b50 F30F7F85 		movdqu	%xmm0, -1744(%rbp)
+ 6653      30F9FFFF 
+ 6654 5b58 F30F6F85 		movdqu	-1856(%rbp), %xmm0
+ 6654      C0F8FFFF 
+ 6655 5b60 F30F7F85 		movdqu	%xmm0, -1760(%rbp)
+ 6655      20F9FFFF 
+ 6656              	.LBB766:
+ 6657              	.LBB767:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 6658              		.loc 2 380 0
+ 6659 5b68 F30F6F85 		movdqu	-1744(%rbp), %xmm0
+ 6659      30F9FFFF 
+ 6660 5b70 F30F7F85 		movdqu	%xmm0, -7408(%rbp)
+ 6660      10E3FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 6661              		.loc 2 381 0
+ 6662 5b78 F30F6F85 		movdqu	-1760(%rbp), %xmm0
+ 6662      20F9FFFF 
+ 6663 5b80 F30F7F85 		movdqu	%xmm0, -7424(%rbp)
+ 6663      00E3FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 6664              		.loc 2 383 0
+ 6665 5b88 C7854CF9 		movl	$0, -1716(%rbp)
+ 6665      FFFF0000 
+ 6665      0000
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 227
+
+
+ 6666 5b92 EB5C     		jmp	.L159
+ 6667              	.L162:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 6668              		.loc 2 385 0
+ 6669 5b94 8B854CF9 		movl	-1716(%rbp), %eax
+ 6669      FFFF
+ 6670 5b9a 89C0     		mov	%eax, %eax
+ 6671 5b9c 0FB68405 		movzbl	-7424(%rbp,%rax), %eax
+ 6671      00E3FFFF 
+ 6672 5ba4 84C0     		testb	%al, %al
+ 6673 5ba6 7912     		jns	.L160
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 6674              		.loc 2 386 0
+ 6675 5ba8 8B854CF9 		movl	-1716(%rbp), %eax
+ 6675      FFFF
+ 6676 5bae 89C0     		mov	%eax, %eax
+ 6677 5bb0 C6840520 		movb	$0, -7392(%rbp,%rax)
+ 6677      E3FFFF00 
+ 6678 5bb8 EB2F     		jmp	.L161
+ 6679              	.L160:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 6680              		.loc 2 388 0
+ 6681 5bba 8B8D4CF9 		movl	-1716(%rbp), %ecx
+ 6681      FFFF
+ 6682 5bc0 8B854CF9 		movl	-1716(%rbp), %eax
+ 6682      FFFF
+ 6683 5bc6 89C0     		mov	%eax, %eax
+ 6684 5bc8 0FB68405 		movzbl	-7424(%rbp,%rax), %eax
+ 6684      00E3FFFF 
+ 6685 5bd0 0FB6C0   		movzbl	%al, %eax
+ 6686 5bd3 83E00F   		andl	$15, %eax
+ 6687 5bd6 4898     		cltq
+ 6688 5bd8 0FB69405 		movzbl	-7408(%rbp,%rax), %edx
+ 6688      10E3FFFF 
+ 6689 5be0 89C8     		mov	%ecx, %eax
+ 6690 5be2 88940520 		movb	%dl, -7392(%rbp,%rax)
+ 6690      E3FFFF
+ 6691              	.L161:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 6692              		.loc 2 383 0
+ 6693 5be9 83854CF9 		addl	$1, -1716(%rbp)
+ 6693      FFFF01
+ 6694              	.L159:
+ 6695 5bf0 83BD4CF9 		cmpl	$15, -1716(%rbp)
+ 6695      FFFF0F
+ 6696 5bf7 769B     		jbe	.L162
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 6697              		.loc 2 391 0
+ 6698 5bf9 F30F6F85 		movdqu	-7392(%rbp), %xmm0
+ 6698      20E3FFFF 
+ 6699              	.LBE767:
+ 6700              	.LBE766:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 6701              		.loc 2 868 0
+ 6702 5c01 F30F7F85 		movdqu	%xmm0, -1872(%rbp)
+ 6702      B0F8FFFF 
+ 6703 5c09 F30F6F85 		movdqu	-1840(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 228
+
+
+ 6703      D0F8FFFF 
+ 6704 5c11 F30F7F85 		movdqu	%xmm0, -1696(%rbp)
+ 6704      60F9FFFF 
+ 6705 5c19 F30F6F85 		movdqu	-1872(%rbp), %xmm0
+ 6705      B0F8FFFF 
+ 6706 5c21 F30F7F85 		movdqu	%xmm0, -1712(%rbp)
+ 6706      50F9FFFF 
+ 6707              	.LBB768:
+ 6708              	.LBB769:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 6709              		.loc 2 234 0
+ 6710 5c29 F30F6F85 		movdqu	-1712(%rbp), %xmm0
+ 6710      50F9FFFF 
+ 6711 5c31 F30F6F8D 		movdqu	-1696(%rbp), %xmm1
+ 6711      60F9FFFF 
+ 6712 5c39 660FEBC1 		por	%xmm1, %xmm0
+ 6713              	.LBE769:
+ 6714              	.LBE768:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 6715              		.loc 2 870 0
+ 6716 5c3d F30F7F85 		movdqu	%xmm0, -1872(%rbp)
+ 6716      B0F8FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 6717              		.loc 2 872 0
+ 6718 5c45 8B859CF8 		mov	-1892(%rbp), %eax
+ 6718      FFFF
+ 6719 5c4b 48C1E004 		salq	$4, %rax
+ 6720 5c4f 48038578 		addq	-1928(%rbp), %rax
+ 6720      F8FFFF
+ 6721 5c56 660F6F00 		movdqa	(%rax), %xmm0
+ 6722 5c5a F30F7F85 		movdqu	%xmm0, -1664(%rbp)
+ 6722      80F9FFFF 
+ 6723 5c62 F30F6F85 		movdqu	-1872(%rbp), %xmm0
+ 6723      B0F8FFFF 
+ 6724 5c6a F30F7F85 		movdqu	%xmm0, -1680(%rbp)
+ 6724      70F9FFFF 
+ 6725              	.LBB770:
+ 6726              	.LBB771:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 6727              		.loc 2 380 0
+ 6728 5c72 F30F6F85 		movdqu	-1664(%rbp), %xmm0
+ 6728      80F9FFFF 
+ 6729 5c7a F30F7F85 		movdqu	%xmm0, -7360(%rbp)
+ 6729      40E3FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 6730              		.loc 2 381 0
+ 6731 5c82 F30F6F85 		movdqu	-1680(%rbp), %xmm0
+ 6731      70F9FFFF 
+ 6732 5c8a F30F7F85 		movdqu	%xmm0, -7376(%rbp)
+ 6732      30E3FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 6733              		.loc 2 383 0
+ 6734 5c92 C7859CF9 		movl	$0, -1636(%rbp)
+ 6734      FFFF0000 
+ 6734      0000
+ 6735 5c9c EB5C     		jmp	.L163
+ 6736              	.L166:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 229
+
+
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 6737              		.loc 2 385 0
+ 6738 5c9e 8B859CF9 		movl	-1636(%rbp), %eax
+ 6738      FFFF
+ 6739 5ca4 89C0     		mov	%eax, %eax
+ 6740 5ca6 0FB68405 		movzbl	-7376(%rbp,%rax), %eax
+ 6740      30E3FFFF 
+ 6741 5cae 84C0     		testb	%al, %al
+ 6742 5cb0 7912     		jns	.L164
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 6743              		.loc 2 386 0
+ 6744 5cb2 8B859CF9 		movl	-1636(%rbp), %eax
+ 6744      FFFF
+ 6745 5cb8 89C0     		mov	%eax, %eax
+ 6746 5cba C6840550 		movb	$0, -7344(%rbp,%rax)
+ 6746      E3FFFF00 
+ 6747 5cc2 EB2F     		jmp	.L165
+ 6748              	.L164:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 6749              		.loc 2 388 0
+ 6750 5cc4 8B8D9CF9 		movl	-1636(%rbp), %ecx
+ 6750      FFFF
+ 6751 5cca 8B859CF9 		movl	-1636(%rbp), %eax
+ 6751      FFFF
+ 6752 5cd0 89C0     		mov	%eax, %eax
+ 6753 5cd2 0FB68405 		movzbl	-7376(%rbp,%rax), %eax
+ 6753      30E3FFFF 
+ 6754 5cda 0FB6C0   		movzbl	%al, %eax
+ 6755 5cdd 83E00F   		andl	$15, %eax
+ 6756 5ce0 4898     		cltq
+ 6757 5ce2 0FB69405 		movzbl	-7360(%rbp,%rax), %edx
+ 6757      40E3FFFF 
+ 6758 5cea 89C8     		mov	%ecx, %eax
+ 6759 5cec 88940550 		movb	%dl, -7344(%rbp,%rax)
+ 6759      E3FFFF
+ 6760              	.L165:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 6761              		.loc 2 383 0
+ 6762 5cf3 83859CF9 		addl	$1, -1636(%rbp)
+ 6762      FFFF01
+ 6763              	.L163:
+ 6764 5cfa 83BD9CF9 		cmpl	$15, -1636(%rbp)
+ 6764      FFFF0F
+ 6765 5d01 769B     		jbe	.L166
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 6766              		.loc 2 391 0
+ 6767 5d03 F30F6F85 		movdqu	-7344(%rbp), %xmm0
+ 6767      50E3FFFF 
+ 6768              	.LBE771:
+ 6769              	.LBE770:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 6770              		.loc 2 872 0
+ 6771 5d0b F30F7F85 		movdqu	%xmm0, -1872(%rbp)
+ 6771      B0F8FFFF 
+ 6772 5d13 F30F6F85 		movdqu	-1888(%rbp), %xmm0
+ 6772      A0F8FFFF 
+ 6773 5d1b F30F7F85 		movdqu	%xmm0, -1616(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 230
+
+
+ 6773      B0F9FFFF 
+ 6774 5d23 F30F6F85 		movdqu	-1872(%rbp), %xmm0
+ 6774      B0F8FFFF 
+ 6775 5d2b F30F7F85 		movdqu	%xmm0, -1632(%rbp)
+ 6775      A0F9FFFF 
+ 6776              	.LBB772:
+ 6777              	.LBB773:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 6778              		.loc 2 234 0
+ 6779 5d33 F30F6F85 		movdqu	-1632(%rbp), %xmm0
+ 6779      A0F9FFFF 
+ 6780 5d3b F30F6F8D 		movdqu	-1616(%rbp), %xmm1
+ 6780      B0F9FFFF 
+ 6781 5d43 660FEBC1 		por	%xmm1, %xmm0
+ 6782              	.LBE773:
+ 6783              	.LBE772:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 6784              		.loc 2 874 0
+ 6785 5d47 F30F7F85 		movdqu	%xmm0, -1888(%rbp)
+ 6785      A0F8FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 6786              		.loc 2 876 0
+ 6787 5d4f 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 6787      00000000 
+ 6788 5d57 F30F6F8D 		movdqu	-1856(%rbp), %xmm1
+ 6788      C0F8FFFF 
+ 6789 5d5f F30F7F8D 		movdqu	%xmm1, -1584(%rbp)
+ 6789      D0F9FFFF 
+ 6790 5d67 F30F7F85 		movdqu	%xmm0, -1600(%rbp)
+ 6790      C0F9FFFF 
+ 6791              	.LBB774:
+ 6792              	.LBB775:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 6793              		.loc 2 290 0
+ 6794 5d6f F30F6F8D 		movdqu	-1600(%rbp), %xmm1
+ 6794      C0F9FFFF 
+ 6795 5d77 F30F6F85 		movdqu	-1584(%rbp), %xmm0
+ 6795      D0F9FFFF 
+ 6796 5d7f 660FF8C1 		psubb	%xmm1, %xmm0
+ 6797              	.LBE775:
+ 6798              	.LBE774:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 6799              		.loc 2 876 0
+ 6800 5d83 F30F7F85 		movdqu	%xmm0, -1856(%rbp)
+ 6800      C0F8FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 6801              		.loc 2 878 0
+ 6802 5d8b 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 6802      00000000 
+ 6803 5d93 F30F6F8D 		movdqu	-1856(%rbp), %xmm1
+ 6803      C0F8FFFF 
+ 6804 5d9b F30F7F8D 		movdqu	%xmm1, -1552(%rbp)
+ 6804      F0F9FFFF 
+ 6805 5da3 F30F7F85 		movdqu	%xmm0, -1568(%rbp)
+ 6805      E0F9FFFF 
+ 6806              	.LBB776:
+ 6807              	.LBB777:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 231
+
+
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 6808              		.loc 2 206 0
+ 6809 5dab F30F6F85 		movdqu	-1568(%rbp), %xmm0
+ 6809      E0F9FFFF 
+ 6810 5db3 F30F6F8D 		movdqu	-1552(%rbp), %xmm1
+ 6810      F0F9FFFF 
+ 6811 5dbb 660FDBC1 		pand	%xmm1, %xmm0
+ 6812              	.LBE777:
+ 6813              	.LBE776:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 6814              		.loc 2 878 0
+ 6815 5dbf F30F7F85 		movdqu	%xmm0, -1856(%rbp)
+ 6815      C0F8FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 6816              		.loc 2 866 0
+ 6817 5dc7 83859CF8 		addl	$1, -1892(%rbp)
+ 6817      FFFF01
+ 6818              	.L158:
+ 6819 5dce 83BD9CF8 		cmpl	$15, -1892(%rbp)
+ 6819      FFFF0F
+ 6820 5dd5 0F866DFD 		jbe	.L167
+ 6820      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 6821              		.loc 2 882 0
+ 6822 5ddb F30F6F85 		movdqu	-1888(%rbp), %xmm0
+ 6822      A0F8FFFF 
+ 6823              	.LBE761:
+ 6824              	.LBE760:
+ 6825              	.LBE759:
+ 6826              	.LBE758:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 6827              		.loc 2 1682 0
+ 6828 5de3 660F7F85 		movdqa	%xmm0, -9744(%rbp)
+ 6828      F0D9FFFF 
+ 6829              	.LBB778:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 6830              		.loc 2 1683 0
+ 6831 5deb 660F6F85 		movdqa	-9744(%rbp), %xmm0
+ 6831      F0D9FFFF 
+ 6832 5df3 F30F7F85 		movdqu	%xmm0, -7456(%rbp)
+ 6832      E0E2FFFF 
+ 6833 5dfb E8000000 		call	KDbgWriterGet at PLT
+ 6833      00
+ 6834 5e00 4885C0   		testq	%rax, %rax
+ 6835 5e03 7479     		je	.L169
+ 6836 5e05 BF010000 		movl	$1, %edi
+ 6836      00
+ 6837 5e0a E8000000 		call	KDbgCondToFlag at PLT
+ 6837      00
+ 6838 5e0f 4889C6   		movq	%rax, %rsi
+ 6839 5e12 BF100000 		movl	$16, %edi
+ 6839      00
+ 6840 5e17 E8000000 		call	KDbgTestModConds at PLT
+ 6840      00
+ 6841 5e1c 84C0     		testb	%al, %al
+ 6842 5e1e 745E     		je	.L169
+ 6843 5e20 8B85ECE2 		movl	-7444(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 232
+
+
+ 6843      FFFF
+ 6844 5e26 89C7     		movl	%eax, %edi
+ 6845 5e28 E8D3A1FF 		call	bswap_32
+ 6845      FF
+ 6846 5e2d 4189C5   		movl	%eax, %r13d
+ 6847 5e30 8B85E8E2 		movl	-7448(%rbp), %eax
+ 6847      FFFF
+ 6848 5e36 89C7     		movl	%eax, %edi
+ 6849 5e38 E8C3A1FF 		call	bswap_32
+ 6849      FF
+ 6850 5e3d 4189C4   		movl	%eax, %r12d
+ 6851 5e40 8B85E4E2 		movl	-7452(%rbp), %eax
+ 6851      FFFF
+ 6852 5e46 89C7     		movl	%eax, %edi
+ 6853 5e48 E8B3A1FF 		call	bswap_32
+ 6853      FF
+ 6854 5e4d 89C3     		movl	%eax, %ebx
+ 6855 5e4f 8B85E0E2 		movl	-7456(%rbp), %eax
+ 6855      FFFF
+ 6856 5e55 89C7     		movl	%eax, %edi
+ 6857 5e57 E8A4A1FF 		call	bswap_32
+ 6857      FF
+ 6858 5e5c 4589E9   		movl	%r13d, %r9d
+ 6859 5e5f 4589E0   		movl	%r12d, %r8d
+ 6860 5e62 89D9     		movl	%ebx, %ecx
+ 6861 5e64 89C2     		movl	%eax, %edx
+ 6862 5e66 488D3500 		leaq	.LC0(%rip), %rsi
+ 6862      000000
+ 6863 5e6d 488D3D00 		leaq	.LC1(%rip), %rdi
+ 6863      000000
+ 6864 5e74 B8000000 		movl	$0, %eax
+ 6864      00
+ 6865 5e79 E8000000 		call	KDbgMsg at PLT
+ 6865      00
+ 6866              	.L169:
+ 6867 5e7e 660F6F85 		movdqa	-9744(%rbp), %xmm0
+ 6867      F0D9FFFF 
+ 6868 5e86 F30F7F85 		movdqu	%xmm0, -1536(%rbp)
+ 6868      00FAFFFF 
+ 6869              	.LBE778:
+ 6870              	.LBB779:
+ 6871              	.LBB780:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 6872              		.loc 2 667 0
+ 6873 5e8e 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 6873      00000000 
+ 6874 5e96 F30F6F8D 		movdqu	-1536(%rbp), %xmm1
+ 6874      00FAFFFF 
+ 6875 5e9e F30F7F8D 		movdqu	%xmm1, -1504(%rbp)
+ 6875      20FAFFFF 
+ 6876 5ea6 F30F7F85 		movdqu	%xmm0, -1520(%rbp)
+ 6876      10FAFFFF 
+ 6877              	.LBB781:
+ 6878              	.LBB782:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 6879              		.loc 2 380 0
+ 6880 5eae F30F6F85 		movdqu	-1504(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 233
+
+
+ 6880      20FAFFFF 
+ 6881 5eb6 F30F7F85 		movdqu	%xmm0, -7312(%rbp)
+ 6881      70E3FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 6882              		.loc 2 381 0
+ 6883 5ebe F30F6F85 		movdqu	-1520(%rbp), %xmm0
+ 6883      10FAFFFF 
+ 6884 5ec6 F30F7F85 		movdqu	%xmm0, -7328(%rbp)
+ 6884      60E3FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 6885              		.loc 2 383 0
+ 6886 5ece C7853CFA 		movl	$0, -1476(%rbp)
+ 6886      FFFF0000 
+ 6886      0000
+ 6887 5ed8 EB5C     		jmp	.L170
+ 6888              	.L173:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 6889              		.loc 2 385 0
+ 6890 5eda 8B853CFA 		movl	-1476(%rbp), %eax
+ 6890      FFFF
+ 6891 5ee0 89C0     		mov	%eax, %eax
+ 6892 5ee2 0FB68405 		movzbl	-7328(%rbp,%rax), %eax
+ 6892      60E3FFFF 
+ 6893 5eea 84C0     		testb	%al, %al
+ 6894 5eec 7912     		jns	.L171
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 6895              		.loc 2 386 0
+ 6896 5eee 8B853CFA 		movl	-1476(%rbp), %eax
+ 6896      FFFF
+ 6897 5ef4 89C0     		mov	%eax, %eax
+ 6898 5ef6 C6840580 		movb	$0, -7296(%rbp,%rax)
+ 6898      E3FFFF00 
+ 6899 5efe EB2F     		jmp	.L172
+ 6900              	.L171:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 6901              		.loc 2 388 0
+ 6902 5f00 8B8D3CFA 		movl	-1476(%rbp), %ecx
+ 6902      FFFF
+ 6903 5f06 8B853CFA 		movl	-1476(%rbp), %eax
+ 6903      FFFF
+ 6904 5f0c 89C0     		mov	%eax, %eax
+ 6905 5f0e 0FB68405 		movzbl	-7328(%rbp,%rax), %eax
+ 6905      60E3FFFF 
+ 6906 5f16 0FB6C0   		movzbl	%al, %eax
+ 6907 5f19 83E00F   		andl	$15, %eax
+ 6908 5f1c 4898     		cltq
+ 6909 5f1e 0FB69405 		movzbl	-7312(%rbp,%rax), %edx
+ 6909      70E3FFFF 
+ 6910 5f26 89C8     		mov	%ecx, %eax
+ 6911 5f28 88940580 		movb	%dl, -7296(%rbp,%rax)
+ 6911      E3FFFF
+ 6912              	.L172:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 6913              		.loc 2 383 0
+ 6914 5f2f 83853CFA 		addl	$1, -1476(%rbp)
+ 6914      FFFF01
+ 6915              	.L170:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 234
+
+
+ 6916 5f36 83BD3CFA 		cmpl	$15, -1476(%rbp)
+ 6916      FFFF0F
+ 6917 5f3d 769B     		jbe	.L173
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 6918              		.loc 2 391 0
+ 6919 5f3f F30F6F85 		movdqu	-7296(%rbp), %xmm0
+ 6919      80E3FFFF 
+ 6920              	.LBE782:
+ 6921              	.LBE781:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 6922              		.loc 2 667 0
+ 6923 5f47 F30F7F85 		movdqu	%xmm0, -1536(%rbp)
+ 6923      00FAFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 6924              		.loc 2 668 0
+ 6925 5f4f F30F6F85 		movdqu	-1536(%rbp), %xmm0
+ 6925      00FAFFFF 
+ 6926              	.LBE780:
+ 6927              	.LBE779:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 6928              		.loc 2 1684 0
+ 6929 5f57 660F7F85 		movdqa	%xmm0, -9744(%rbp)
+ 6929      F0D9FFFF 
+ 6930              	.LBB783:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 6931              		.loc 2 1685 0
+ 6932 5f5f 660F6F85 		movdqa	-9744(%rbp), %xmm0
+ 6932      F0D9FFFF 
+ 6933 5f67 F30F7F85 		movdqu	%xmm0, -7472(%rbp)
+ 6933      D0E2FFFF 
+ 6934 5f6f E8000000 		call	KDbgWriterGet at PLT
+ 6934      00
+ 6935 5f74 4885C0   		testq	%rax, %rax
+ 6936 5f77 7479     		je	.L175
+ 6937 5f79 BF010000 		movl	$1, %edi
+ 6937      00
+ 6938 5f7e E8000000 		call	KDbgCondToFlag at PLT
+ 6938      00
+ 6939 5f83 4889C6   		movq	%rax, %rsi
+ 6940 5f86 BF100000 		movl	$16, %edi
+ 6940      00
+ 6941 5f8b E8000000 		call	KDbgTestModConds at PLT
+ 6941      00
+ 6942 5f90 84C0     		testb	%al, %al
+ 6943 5f92 745E     		je	.L175
+ 6944 5f94 8B85DCE2 		movl	-7460(%rbp), %eax
+ 6944      FFFF
+ 6945 5f9a 89C7     		movl	%eax, %edi
+ 6946 5f9c E85FA0FF 		call	bswap_32
+ 6946      FF
+ 6947 5fa1 4189C5   		movl	%eax, %r13d
+ 6948 5fa4 8B85D8E2 		movl	-7464(%rbp), %eax
+ 6948      FFFF
+ 6949 5faa 89C7     		movl	%eax, %edi
+ 6950 5fac E84FA0FF 		call	bswap_32
+ 6950      FF
+ 6951 5fb1 4189C4   		movl	%eax, %r12d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 235
+
+
+ 6952 5fb4 8B85D4E2 		movl	-7468(%rbp), %eax
+ 6952      FFFF
+ 6953 5fba 89C7     		movl	%eax, %edi
+ 6954 5fbc E83FA0FF 		call	bswap_32
+ 6954      FF
+ 6955 5fc1 89C3     		movl	%eax, %ebx
+ 6956 5fc3 8B85D0E2 		movl	-7472(%rbp), %eax
+ 6956      FFFF
+ 6957 5fc9 89C7     		movl	%eax, %edi
+ 6958 5fcb E830A0FF 		call	bswap_32
+ 6958      FF
+ 6959 5fd0 4589E9   		movl	%r13d, %r9d
+ 6960 5fd3 4589E0   		movl	%r12d, %r8d
+ 6961 5fd6 89D9     		movl	%ebx, %ecx
+ 6962 5fd8 89C2     		movl	%eax, %edx
+ 6963 5fda 488D3500 		leaq	.LC2(%rip), %rsi
+ 6963      000000
+ 6964 5fe1 488D3D00 		leaq	.LC1(%rip), %rdi
+ 6964      000000
+ 6965 5fe8 B8000000 		movl	$0, %eax
+ 6965      00
+ 6966 5fed E8000000 		call	KDbgMsg at PLT
+ 6966      00
+ 6967              	.L175:
+ 6968 5ff2 660F6F85 		movdqa	-9744(%rbp), %xmm0
+ 6968      F0D9FFFF 
+ 6969 5ffa F30F7F85 		movdqu	%xmm0, -1456(%rbp)
+ 6969      50FAFFFF 
+ 6970 6002 660F6F85 		movdqa	-9728(%rbp), %xmm0
+ 6970      00DAFFFF 
+ 6971 600a F30F7F85 		movdqu	%xmm0, -1472(%rbp)
+ 6971      40FAFFFF 
+ 6972              	.LBE783:
+ 6973              	.LBB784:
+ 6974              	.LBB785:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 6975              		.loc 2 178 0
+ 6976 6012 F30F6F85 		movdqu	-1472(%rbp), %xmm0
+ 6976      40FAFFFF 
+ 6977 601a F30F6F8D 		movdqu	-1456(%rbp), %xmm1
+ 6977      50FAFFFF 
+ 6978 6022 660FEFC1 		pxor	%xmm1, %xmm0
+ 6979              	.LBE785:
+ 6980              	.LBE784:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 6981              		.loc 2 1686 0
+ 6982 6026 660F7F85 		movdqa	%xmm0, -9744(%rbp)
+ 6982      F0D9FFFF 
+ 6983              	.LBB786:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 6984              		.loc 2 1687 0
+ 6985 602e 660F6F85 		movdqa	-9744(%rbp), %xmm0
+ 6985      F0D9FFFF 
+ 6986 6036 F30F7F85 		movdqu	%xmm0, -7488(%rbp)
+ 6986      C0E2FFFF 
+ 6987 603e E8000000 		call	KDbgWriterGet at PLT
+ 6987      00
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 236
+
+
+ 6988 6043 4885C0   		testq	%rax, %rax
+ 6989 6046 7479     		je	.L177
+ 6990 6048 BF010000 		movl	$1, %edi
+ 6990      00
+ 6991 604d E8000000 		call	KDbgCondToFlag at PLT
+ 6991      00
+ 6992 6052 4889C6   		movq	%rax, %rsi
+ 6993 6055 BF100000 		movl	$16, %edi
+ 6993      00
+ 6994 605a E8000000 		call	KDbgTestModConds at PLT
+ 6994      00
+ 6995 605f 84C0     		testb	%al, %al
+ 6996 6061 745E     		je	.L177
+ 6997 6063 8B85CCE2 		movl	-7476(%rbp), %eax
+ 6997      FFFF
+ 6998 6069 89C7     		movl	%eax, %edi
+ 6999 606b E8909FFF 		call	bswap_32
+ 6999      FF
+ 7000 6070 4189C5   		movl	%eax, %r13d
+ 7001 6073 8B85C8E2 		movl	-7480(%rbp), %eax
+ 7001      FFFF
+ 7002 6079 89C7     		movl	%eax, %edi
+ 7003 607b E8809FFF 		call	bswap_32
+ 7003      FF
+ 7004 6080 4189C4   		movl	%eax, %r12d
+ 7005 6083 8B85C4E2 		movl	-7484(%rbp), %eax
+ 7005      FFFF
+ 7006 6089 89C7     		movl	%eax, %edi
+ 7007 608b E8709FFF 		call	bswap_32
+ 7007      FF
+ 7008 6090 89C3     		movl	%eax, %ebx
+ 7009 6092 8B85C0E2 		movl	-7488(%rbp), %eax
+ 7009      FFFF
+ 7010 6098 89C7     		movl	%eax, %edi
+ 7011 609a E8619FFF 		call	bswap_32
+ 7011      FF
+ 7012 609f 4589E9   		movl	%r13d, %r9d
+ 7013 60a2 4589E0   		movl	%r12d, %r8d
+ 7014 60a5 89D9     		movl	%ebx, %ecx
+ 7015 60a7 89C2     		movl	%eax, %edx
+ 7016 60a9 488D3500 		leaq	.LC3(%rip), %rsi
+ 7016      000000
+ 7017 60b0 488D3D00 		leaq	.LC1(%rip), %rdi
+ 7017      000000
+ 7018 60b7 B8000000 		movl	$0, %eax
+ 7018      00
+ 7019 60bc E8000000 		call	KDbgMsg at PLT
+ 7019      00
+ 7020              	.L177:
+ 7021 60c1 660F6F85 		movdqa	-9744(%rbp), %xmm0
+ 7021      F0D9FFFF 
+ 7022 60c9 F30F7F85 		movdqu	%xmm0, -1440(%rbp)
+ 7022      60FAFFFF 
+ 7023              	.LBE786:
+ 7024              	.LBB787:
+ 7025              	.LBB788:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 237
+
+
+ 7026              		.loc 2 1357 0
+ 7027 60d1 F30F6F85 		movdqu	-1440(%rbp), %xmm0
+ 7027      60FAFFFF 
+ 7028 60d9 F30F7F85 		movdqu	%xmm0, -7280(%rbp)
+ 7028      90E3FFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 7029              		.loc 2 1358 0
+ 7030 60e1 8B859CE3 		movl	-7268(%rbp), %eax
+ 7030      FFFF
+ 7031 60e7 898598E3 		movl	%eax, -7272(%rbp)
+ 7031      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 7032              		.loc 2 1359 0
+ 7033 60ed 8B859CE3 		movl	-7268(%rbp), %eax
+ 7033      FFFF
+ 7034 60f3 898594E3 		movl	%eax, -7276(%rbp)
+ 7034      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 7035              		.loc 2 1360 0
+ 7036 60f9 8B859CE3 		movl	-7268(%rbp), %eax
+ 7036      FFFF
+ 7037 60ff 898590E3 		movl	%eax, -7280(%rbp)
+ 7037      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 7038              		.loc 2 1361 0
+ 7039 6105 F30F6F85 		movdqu	-7280(%rbp), %xmm0
+ 7039      90E3FFFF 
+ 7040              	.LBE788:
+ 7041              	.LBE787:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 7042              		.loc 2 1688 0
+ 7043 610d 660F7F85 		movdqa	%xmm0, -9744(%rbp)
+ 7043      F0D9FFFF 
+ 7044              	.LBB789:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 7045              		.loc 2 1689 0
+ 7046 6115 660F6F85 		movdqa	-9744(%rbp), %xmm0
+ 7046      F0D9FFFF 
+ 7047 611d F30F7F85 		movdqu	%xmm0, -7504(%rbp)
+ 7047      B0E2FFFF 
+ 7048 6125 E8000000 		call	KDbgWriterGet at PLT
+ 7048      00
+ 7049 612a 4885C0   		testq	%rax, %rax
+ 7050 612d 7479     		je	.L179
+ 7051 612f BF010000 		movl	$1, %edi
+ 7051      00
+ 7052 6134 E8000000 		call	KDbgCondToFlag at PLT
+ 7052      00
+ 7053 6139 4889C6   		movq	%rax, %rsi
+ 7054 613c BF100000 		movl	$16, %edi
+ 7054      00
+ 7055 6141 E8000000 		call	KDbgTestModConds at PLT
+ 7055      00
+ 7056 6146 84C0     		testb	%al, %al
+ 7057 6148 745E     		je	.L179
+ 7058 614a 8B85BCE2 		movl	-7492(%rbp), %eax
+ 7058      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 238
+
+
+ 7059 6150 89C7     		movl	%eax, %edi
+ 7060 6152 E8A99EFF 		call	bswap_32
+ 7060      FF
+ 7061 6157 4189C5   		movl	%eax, %r13d
+ 7062 615a 8B85B8E2 		movl	-7496(%rbp), %eax
+ 7062      FFFF
+ 7063 6160 89C7     		movl	%eax, %edi
+ 7064 6162 E8999EFF 		call	bswap_32
+ 7064      FF
+ 7065 6167 4189C4   		movl	%eax, %r12d
+ 7066 616a 8B85B4E2 		movl	-7500(%rbp), %eax
+ 7066      FFFF
+ 7067 6170 89C7     		movl	%eax, %edi
+ 7068 6172 E8899EFF 		call	bswap_32
+ 7068      FF
+ 7069 6177 89C3     		movl	%eax, %ebx
+ 7070 6179 8B85B0E2 		movl	-7504(%rbp), %eax
+ 7070      FFFF
+ 7071 617f 89C7     		movl	%eax, %edi
+ 7072 6181 E87A9EFF 		call	bswap_32
+ 7072      FF
+ 7073 6186 4589E9   		movl	%r13d, %r9d
+ 7074 6189 4589E0   		movl	%r12d, %r8d
+ 7075 618c 89D9     		movl	%ebx, %ecx
+ 7076 618e 89C2     		movl	%eax, %edx
+ 7077 6190 488D3500 		leaq	.LC4(%rip), %rsi
+ 7077      000000
+ 7078 6197 488D3D00 		leaq	.LC1(%rip), %rdi
+ 7078      000000
+ 7079 619e B8000000 		movl	$0, %eax
+ 7079      00
+ 7080 61a3 E8000000 		call	KDbgMsg at PLT
+ 7080      00
+ 7081              	.L179:
+ 7082              	.LBE789:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 7083              		.loc 2 1690 0
+ 7084 61a8 660F6F85 		movdqa	-9744(%rbp), %xmm0
+ 7084      F0D9FFFF 
+ 7085              	.LBE755:
+ 7086              	.LBE754:
+1751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x80,8);
+ 7087              		.loc 2 1751 0
+ 7088 61b0 F30F7F85 		movdqu	%xmm0, -6624(%rbp)
+ 7088      20E6FFFF 
+ 7089 61b8 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 7089      10E6FFFF 
+ 7090 61c0 F30F7F85 		movdqu	%xmm0, -1424(%rbp)
+ 7090      70FAFFFF 
+ 7091              	.LBB790:
+ 7092              	.LBB791:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 7093              		.loc 2 1565 0
+ 7094 61c8 F30F6F85 		movdqu	-1424(%rbp), %xmm0
+ 7094      70FAFFFF 
+ 7095 61d0 660F7F85 		movdqa	%xmm0, -9696(%rbp)
+ 7095      20DAFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 239
+
+
+ 7096 61d8 660F6F85 		movdqa	-9696(%rbp), %xmm0
+ 7096      20DAFFFF 
+ 7097 61e0 F30F7F85 		movdqu	%xmm0, -1408(%rbp)
+ 7097      80FAFFFF 
+ 7098              	.LBB792:
+ 7099              	.LBB793:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 7100              		.loc 2 1282 0
+ 7101 61e8 F30F6F85 		movdqu	-1408(%rbp), %xmm0
+ 7101      80FAFFFF 
+ 7102 61f0 F30F7F85 		movdqu	%xmm0, -7264(%rbp)
+ 7102      A0E3FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 7103              		.loc 2 1283 0
+ 7104 61f8 8B85A8E3 		movl	-7256(%rbp), %eax
+ 7104      FFFF
+ 7105 61fe 8985ACE3 		movl	%eax, -7252(%rbp)
+ 7105      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 7106              		.loc 2 1284 0
+ 7107 6204 8B85A4E3 		movl	-7260(%rbp), %eax
+ 7107      FFFF
+ 7108 620a 8985A8E3 		movl	%eax, -7256(%rbp)
+ 7108      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 7109              		.loc 2 1285 0
+ 7110 6210 8B85A0E3 		movl	-7264(%rbp), %eax
+ 7110      FFFF
+ 7111 6216 8985A4E3 		movl	%eax, -7260(%rbp)
+ 7111      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 7112              		.loc 2 1286 0
+ 7113 621c C785A0E3 		movl	$0, -7264(%rbp)
+ 7113      FFFF0000 
+ 7113      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 7114              		.loc 2 1287 0
+ 7115 6226 F30F6F85 		movdqu	-7264(%rbp), %xmm0
+ 7115      A0E3FFFF 
+ 7116              	.LBE793:
+ 7117              	.LBE792:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7118              		.loc 2 1567 0
+ 7119 622e 660F7F85 		movdqa	%xmm0, -9696(%rbp)
+ 7119      20DAFFFF 
+ 7120 6236 660F6F85 		movdqa	-9696(%rbp), %xmm0
+ 7120      20DAFFFF 
+ 7121 623e 660FEF85 		pxor	-1424(%rbp), %xmm0
+ 7121      70FAFFFF 
+ 7122 6246 F30F7F85 		movdqu	%xmm0, -1424(%rbp)
+ 7122      70FAFFFF 
+ 7123 624e 660F6F85 		movdqa	-9696(%rbp), %xmm0
+ 7123      20DAFFFF 
+ 7124 6256 F30F7F85 		movdqu	%xmm0, -1392(%rbp)
+ 7124      90FAFFFF 
+ 7125              	.LBB794:
+ 7126              	.LBB795:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 240
+
+
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 7127              		.loc 2 1282 0
+ 7128 625e F30F6F85 		movdqu	-1392(%rbp), %xmm0
+ 7128      90FAFFFF 
+ 7129 6266 F30F7F85 		movdqu	%xmm0, -7248(%rbp)
+ 7129      B0E3FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 7130              		.loc 2 1283 0
+ 7131 626e 8B85B8E3 		movl	-7240(%rbp), %eax
+ 7131      FFFF
+ 7132 6274 8985BCE3 		movl	%eax, -7236(%rbp)
+ 7132      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 7133              		.loc 2 1284 0
+ 7134 627a 8B85B4E3 		movl	-7244(%rbp), %eax
+ 7134      FFFF
+ 7135 6280 8985B8E3 		movl	%eax, -7240(%rbp)
+ 7135      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 7136              		.loc 2 1285 0
+ 7137 6286 8B85B0E3 		movl	-7248(%rbp), %eax
+ 7137      FFFF
+ 7138 628c 8985B4E3 		movl	%eax, -7244(%rbp)
+ 7138      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 7139              		.loc 2 1286 0
+ 7140 6292 C785B0E3 		movl	$0, -7248(%rbp)
+ 7140      FFFF0000 
+ 7140      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 7141              		.loc 2 1287 0
+ 7142 629c F30F6F85 		movdqu	-7248(%rbp), %xmm0
+ 7142      B0E3FFFF 
+ 7143              	.LBE795:
+ 7144              	.LBE794:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7145              		.loc 2 1568 0
+ 7146 62a4 660F7F85 		movdqa	%xmm0, -9696(%rbp)
+ 7146      20DAFFFF 
+ 7147 62ac 660F6F85 		movdqa	-9696(%rbp), %xmm0
+ 7147      20DAFFFF 
+ 7148 62b4 660FEF85 		pxor	-1424(%rbp), %xmm0
+ 7148      70FAFFFF 
+ 7149 62bc F30F7F85 		movdqu	%xmm0, -1424(%rbp)
+ 7149      70FAFFFF 
+ 7150 62c4 660F6F85 		movdqa	-9696(%rbp), %xmm0
+ 7150      20DAFFFF 
+ 7151 62cc F30F7F85 		movdqu	%xmm0, -1376(%rbp)
+ 7151      A0FAFFFF 
+ 7152              	.LBB796:
+ 7153              	.LBB797:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 7154              		.loc 2 1282 0
+ 7155 62d4 F30F6F85 		movdqu	-1376(%rbp), %xmm0
+ 7155      A0FAFFFF 
+ 7156 62dc F30F7F85 		movdqu	%xmm0, -7232(%rbp)
+ 7156      C0E3FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 241
+
+
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 7157              		.loc 2 1283 0
+ 7158 62e4 8B85C8E3 		movl	-7224(%rbp), %eax
+ 7158      FFFF
+ 7159 62ea 8985CCE3 		movl	%eax, -7220(%rbp)
+ 7159      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 7160              		.loc 2 1284 0
+ 7161 62f0 8B85C4E3 		movl	-7228(%rbp), %eax
+ 7161      FFFF
+ 7162 62f6 8985C8E3 		movl	%eax, -7224(%rbp)
+ 7162      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 7163              		.loc 2 1285 0
+ 7164 62fc 8B85C0E3 		movl	-7232(%rbp), %eax
+ 7164      FFFF
+ 7165 6302 8985C4E3 		movl	%eax, -7228(%rbp)
+ 7165      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 7166              		.loc 2 1286 0
+ 7167 6308 C785C0E3 		movl	$0, -7232(%rbp)
+ 7167      FFFF0000 
+ 7167      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 7168              		.loc 2 1287 0
+ 7169 6312 F30F6F85 		movdqu	-7232(%rbp), %xmm0
+ 7169      C0E3FFFF 
+ 7170              	.LBE797:
+ 7171              	.LBE796:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7172              		.loc 2 1569 0
+ 7173 631a 660F7F85 		movdqa	%xmm0, -9696(%rbp)
+ 7173      20DAFFFF 
+ 7174 6322 660F6F85 		movdqa	-9696(%rbp), %xmm0
+ 7174      20DAFFFF 
+ 7175 632a 660FEF85 		pxor	-1424(%rbp), %xmm0
+ 7175      70FAFFFF 
+ 7176 6332 F30F7F85 		movdqu	%xmm0, -1424(%rbp)
+ 7176      70FAFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 7177              		.loc 2 1571 0
+ 7178 633a F30F6F85 		movdqu	-1424(%rbp), %xmm0
+ 7178      70FAFFFF 
+ 7179              	.LBE791:
+ 7180              	.LBE790:
+1751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x80,8);
+ 7181              		.loc 2 1751 0
+ 7182 6342 F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 7182      10E6FFFF 
+ 7183 634a F30F6F85 		movdqu	-6624(%rbp), %xmm0
+ 7183      20E6FFFF 
+ 7184 6352 F30F6F8D 		movdqu	-6640(%rbp), %xmm1
+ 7184      10E6FFFF 
+ 7185 635a 660FEFC1 		pxor	%xmm1, %xmm0
+ 7186 635e F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 7186      10E6FFFF 
+ 7187 6366 488B85B8 		movq	-9544(%rbp), %rax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 242
+
+
+ 7187      DAFFFF
+ 7188 636d 4883E880 		subq	$-128, %rax
+ 7189 6371 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 7189      10E6FFFF 
+ 7190 6379 F30F7F00 		movdqu	%xmm0, (%rax)
+ 7191 637d F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 7191      10E6FFFF 
+ 7192 6385 F30F7F85 		movdqu	%xmm0, -1344(%rbp)
+ 7192      C0FAFFFF 
+ 7193              	.LBB798:
+ 7194              	.LBB799:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 7195              		.loc 2 1681 0
+ 7196 638d B81B0000 		movl	$27, %eax
+ 7196      00
+ 7197 6392 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 7197      00000000 
+ 7198 639a F30F7F85 		movdqu	%xmm0, -1312(%rbp)
+ 7198      E0FAFFFF 
+ 7199 63a2 8985DCFA 		movl	%eax, -1316(%rbp)
+ 7199      FFFF
+ 7200              	.LBB800:
+ 7201              	.LBB801:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 7202              		.loc 2 522 0
+ 7203 63a8 F30F6F85 		movdqu	-1312(%rbp), %xmm0
+ 7203      E0FAFFFF 
+ 7204 63b0 F30F7F85 		movdqu	%xmm0, -7152(%rbp)
+ 7204      10E4FFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 7205              		.loc 2 523 0
+ 7206 63b8 B8030000 		movl	$3, %eax
+ 7206      00
+ 7207 63bd 4898     		cltq
+ 7208 63bf 8B95DCFA 		movl	-1316(%rbp), %edx
+ 7208      FFFF
+ 7209 63c5 89948510 		movl	%edx, -7152(%rbp,%rax,4)
+ 7209      E4FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 7210              		.loc 2 524 0
+ 7211 63cc F30F6F85 		movdqu	-7152(%rbp), %xmm0
+ 7211      10E4FFFF 
+ 7212 63d4 F30F7F85 		movdqu	%xmm0, -1312(%rbp)
+ 7212      E0FAFFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 7213              		.loc 2 526 0
+ 7214 63dc F30F6F85 		movdqu	-1312(%rbp), %xmm0
+ 7214      E0FAFFFF 
+ 7215              	.LBE801:
+ 7216              	.LBE800:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 7217              		.loc 2 1681 0
+ 7218 63e4 660F7F85 		movdqa	%xmm0, -9664(%rbp)
+ 7218      40DAFFFF 
+ 7219 63ec F30F6F85 		movdqu	-1344(%rbp), %xmm0
+ 7219      C0FAFFFF 
+ 7220 63f4 F30F7F85 		movdqu	%xmm0, -1296(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 243
+
+
+ 7220      F0FAFFFF 
+ 7221 63fc F30F6F85 		movdqu	-1296(%rbp), %xmm0
+ 7221      F0FAFFFF 
+ 7222 6404 F30F7F85 		movdqu	%xmm0, -1264(%rbp)
+ 7222      10FBFFFF 
+ 7223 640c 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 7223      000000
+ 7224 6413 48898508 		movq	%rax, -1272(%rbp)
+ 7224      FBFFFF
+ 7225              	.LBB802:
+ 7226              	.LBB803:
+ 7227              	.LBB804:
+ 7228              	.LBB805:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 7229              		.loc 2 851 0
+ 7230 641a 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 7230      00000000 
+ 7231 6422 F30F7F85 		movdqu	%xmm0, -1232(%rbp)
+ 7231      30FBFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 7232              		.loc 2 854 0
+ 7233 642a 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 7233      00000000 
+ 7234 6432 F30F6F8D 		movdqu	-1264(%rbp), %xmm1
+ 7234      10FBFFFF 
+ 7235 643a F30F7F8D 		movdqu	%xmm1, -1152(%rbp)
+ 7235      80FBFFFF 
+ 7236 6442 F30F7F85 		movdqu	%xmm0, -1168(%rbp)
+ 7236      70FBFFFF 
+ 7237              	.LBB806:
+ 7238              	.LBB807:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 7239              		.loc 2 206 0
+ 7240 644a F30F6F85 		movdqu	-1168(%rbp), %xmm0
+ 7240      70FBFFFF 
+ 7241 6452 F30F6F8D 		movdqu	-1152(%rbp), %xmm1
+ 7241      80FBFFFF 
+ 7242 645a 660FDBC1 		pand	%xmm1, %xmm0
+ 7243              	.LBE807:
+ 7244              	.LBE806:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 7245              		.loc 2 854 0
+ 7246 645e F30F7F85 		movdqu	%xmm0, -1184(%rbp)
+ 7246      60FBFFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 7247              		.loc 2 862 0
+ 7248 6466 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 7248      00000000 
+ 7249 646e F30F6F8D 		movdqu	-1264(%rbp), %xmm1
+ 7249      10FBFFFF 
+ 7250 6476 F30F7F8D 		movdqu	%xmm1, -1120(%rbp)
+ 7250      A0FBFFFF 
+ 7251 647e F30F7F85 		movdqu	%xmm0, -1136(%rbp)
+ 7251      90FBFFFF 
+ 7252              	.LBB808:
+ 7253              		.loc 2 2642 0
+ 7254 6486 0FB685A0 		movzbl	-1120(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 244
+
+
+ 7254      FBFFFF
+ 7255 648d 0FB69590 		movzbl	-1136(%rbp), %edx
+ 7255      FBFFFF
+ 7256 6494 0FB6C0   		movzbl	%al, %eax
+ 7257 6497 6689858E 		movw	%ax, -10354(%rbp)
+ 7257      D7FFFF
+ 7258 649e 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 7258      D7FFFF
+ 7259 64a5 F6F2     		divb	%dl
+ 7260 64a7 4189C7   		movl	%eax, %r15d
+ 7261 64aa 0FB685A1 		movzbl	-1119(%rbp), %eax
+ 7261      FBFFFF
+ 7262 64b1 0FB69591 		movzbl	-1135(%rbp), %edx
+ 7262      FBFFFF
+ 7263 64b8 0FB6C0   		movzbl	%al, %eax
+ 7264 64bb 6689858E 		movw	%ax, -10354(%rbp)
+ 7264      D7FFFF
+ 7265 64c2 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 7265      D7FFFF
+ 7266 64c9 F6F2     		divb	%dl
+ 7267 64cb 88855FDA 		movb	%al, -9633(%rbp)
+ 7267      FFFF
+ 7268 64d1 0FB685A2 		movzbl	-1118(%rbp), %eax
+ 7268      FBFFFF
+ 7269 64d8 0FB69592 		movzbl	-1134(%rbp), %edx
+ 7269      FBFFFF
+ 7270 64df 0FB6C0   		movzbl	%al, %eax
+ 7271 64e2 6689858E 		movw	%ax, -10354(%rbp)
+ 7271      D7FFFF
+ 7272 64e9 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 7272      D7FFFF
+ 7273 64f0 F6F2     		divb	%dl
+ 7274 64f2 88855EDA 		movb	%al, -9634(%rbp)
+ 7274      FFFF
+ 7275 64f8 0FB685A3 		movzbl	-1117(%rbp), %eax
+ 7275      FBFFFF
+ 7276 64ff 0FB69593 		movzbl	-1133(%rbp), %edx
+ 7276      FBFFFF
+ 7277 6506 0FB6C0   		movzbl	%al, %eax
+ 7278 6509 6689858E 		movw	%ax, -10354(%rbp)
+ 7278      D7FFFF
+ 7279 6510 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 7279      D7FFFF
+ 7280 6517 F6F2     		divb	%dl
+ 7281 6519 88855DDA 		movb	%al, -9635(%rbp)
+ 7281      FFFF
+ 7282 651f 0FB685A4 		movzbl	-1116(%rbp), %eax
+ 7282      FBFFFF
+ 7283 6526 0FB69594 		movzbl	-1132(%rbp), %edx
+ 7283      FBFFFF
+ 7284 652d 0FB6C0   		movzbl	%al, %eax
+ 7285 6530 6689858E 		movw	%ax, -10354(%rbp)
+ 7285      D7FFFF
+ 7286 6537 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 7286      D7FFFF
+ 7287 653e F6F2     		divb	%dl
+ 7288 6540 88855CDA 		movb	%al, -9636(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 245
+
+
+ 7288      FFFF
+ 7289 6546 0FB685A5 		movzbl	-1115(%rbp), %eax
+ 7289      FBFFFF
+ 7290 654d 0FB69595 		movzbl	-1131(%rbp), %edx
+ 7290      FBFFFF
+ 7291 6554 0FB6C0   		movzbl	%al, %eax
+ 7292 6557 6689858E 		movw	%ax, -10354(%rbp)
+ 7292      D7FFFF
+ 7293 655e 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 7293      D7FFFF
+ 7294 6565 F6F2     		divb	%dl
+ 7295 6567 4189C1   		movl	%eax, %r9d
+ 7296 656a 0FB685A6 		movzbl	-1114(%rbp), %eax
+ 7296      FBFFFF
+ 7297 6571 0FB69596 		movzbl	-1130(%rbp), %edx
+ 7297      FBFFFF
+ 7298 6578 0FB6C0   		movzbl	%al, %eax
+ 7299 657b 6689858E 		movw	%ax, -10354(%rbp)
+ 7299      D7FFFF
+ 7300 6582 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 7300      D7FFFF
+ 7301 6589 F6F2     		divb	%dl
+ 7302 658b 89C7     		movl	%eax, %edi
+ 7303 658d 0FB685A7 		movzbl	-1113(%rbp), %eax
+ 7303      FBFFFF
+ 7304 6594 0FB69597 		movzbl	-1129(%rbp), %edx
+ 7304      FBFFFF
+ 7305 659b 0FB6C0   		movzbl	%al, %eax
+ 7306 659e 6689858E 		movw	%ax, -10354(%rbp)
+ 7306      D7FFFF
+ 7307 65a5 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 7307      D7FFFF
+ 7308 65ac F6F2     		divb	%dl
+ 7309 65ae 89C3     		movl	%eax, %ebx
+ 7310 65b0 0FB685A8 		movzbl	-1112(%rbp), %eax
+ 7310      FBFFFF
+ 7311 65b7 0FB69598 		movzbl	-1128(%rbp), %edx
+ 7311      FBFFFF
+ 7312 65be 0FB6C0   		movzbl	%al, %eax
+ 7313 65c1 6689858E 		movw	%ax, -10354(%rbp)
+ 7313      D7FFFF
+ 7314 65c8 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 7314      D7FFFF
+ 7315 65cf F6F2     		divb	%dl
+ 7316 65d1 4189C2   		movl	%eax, %r10d
+ 7317 65d4 0FB685A9 		movzbl	-1111(%rbp), %eax
+ 7317      FBFFFF
+ 7318 65db 0FB69599 		movzbl	-1127(%rbp), %edx
+ 7318      FBFFFF
+ 7319 65e2 0FB6C0   		movzbl	%al, %eax
+ 7320 65e5 6689858E 		movw	%ax, -10354(%rbp)
+ 7320      D7FFFF
+ 7321 65ec 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 7321      D7FFFF
+ 7322 65f3 F6F2     		divb	%dl
+ 7323 65f5 4189C3   		movl	%eax, %r11d
+ 7324 65f8 0FB685AA 		movzbl	-1110(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 246
+
+
+ 7324      FBFFFF
+ 7325 65ff 0FB6959A 		movzbl	-1126(%rbp), %edx
+ 7325      FBFFFF
+ 7326 6606 0FB6C0   		movzbl	%al, %eax
+ 7327 6609 6689858E 		movw	%ax, -10354(%rbp)
+ 7327      D7FFFF
+ 7328 6610 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 7328      D7FFFF
+ 7329 6617 F6F2     		divb	%dl
+ 7330 6619 4189C4   		movl	%eax, %r12d
+ 7331 661c 0FB685AB 		movzbl	-1109(%rbp), %eax
+ 7331      FBFFFF
+ 7332 6623 0FB6959B 		movzbl	-1125(%rbp), %edx
+ 7332      FBFFFF
+ 7333 662a 0FB6C0   		movzbl	%al, %eax
+ 7334 662d 6689858E 		movw	%ax, -10354(%rbp)
+ 7334      D7FFFF
+ 7335 6634 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 7335      D7FFFF
+ 7336 663b F6F2     		divb	%dl
+ 7337 663d 4189C5   		movl	%eax, %r13d
+ 7338 6640 0FB685AC 		movzbl	-1108(%rbp), %eax
+ 7338      FBFFFF
+ 7339 6647 0FB6959C 		movzbl	-1124(%rbp), %edx
+ 7339      FBFFFF
+ 7340 664e 0FB6C0   		movzbl	%al, %eax
+ 7341 6651 6689858E 		movw	%ax, -10354(%rbp)
+ 7341      D7FFFF
+ 7342 6658 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 7342      D7FFFF
+ 7343 665f F6F2     		divb	%dl
+ 7344 6661 4189C6   		movl	%eax, %r14d
+ 7345 6664 0FB685AD 		movzbl	-1107(%rbp), %eax
+ 7345      FBFFFF
+ 7346 666b 0FB6959D 		movzbl	-1123(%rbp), %edx
+ 7346      FBFFFF
+ 7347 6672 0FB6C0   		movzbl	%al, %eax
+ 7348 6675 6689858E 		movw	%ax, -10354(%rbp)
+ 7348      D7FFFF
+ 7349 667c 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 7349      D7FFFF
+ 7350 6683 F6F2     		divb	%dl
+ 7351 6685 4189C0   		movl	%eax, %r8d
+ 7352 6688 0FB685AE 		movzbl	-1106(%rbp), %eax
+ 7352      FBFFFF
+ 7353 668f 0FB6959E 		movzbl	-1122(%rbp), %edx
+ 7353      FBFFFF
+ 7354 6696 0FB6C0   		movzbl	%al, %eax
+ 7355 6699 6689858E 		movw	%ax, -10354(%rbp)
+ 7355      D7FFFF
+ 7356 66a0 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 7356      D7FFFF
+ 7357 66a7 F6F2     		divb	%dl
+ 7358 66a9 89C6     		movl	%eax, %esi
+ 7359 66ab 0FB685AF 		movzbl	-1105(%rbp), %eax
+ 7359      FBFFFF
+ 7360 66b2 0FB6959F 		movzbl	-1121(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 247
+
+
+ 7360      FBFFFF
+ 7361 66b9 0FB6C0   		movzbl	%al, %eax
+ 7362 66bc 6689858E 		movw	%ax, -10354(%rbp)
+ 7362      D7FFFF
+ 7363 66c3 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 7363      D7FFFF
+ 7364 66ca F6F2     		divb	%dl
+ 7365 66cc 89C1     		movl	%eax, %ecx
+ 7366              	.LBB809:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 7367              		.loc 2 346 0
+ 7368 66ce 0FB6D3   		movzbl	%bl, %edx
+ 7369 66d1 400FB6C7 		movzbl	%dil, %eax
+ 7370 66d5 48C1E208 		salq	$8, %rdx
+ 7371 66d9 4809C2   		orq	%rax, %rdx
+ 7372 66dc 410FB6C1 		movzbl	%r9b, %eax
+ 7373 66e0 48C1E208 		salq	$8, %rdx
+ 7374 66e4 4809C2   		orq	%rax, %rdx
+ 7375 66e7 0FB6855C 		movzbl	-9636(%rbp), %eax
+ 7375      DAFFFF
+ 7376 66ee 48C1E208 		salq	$8, %rdx
+ 7377 66f2 4809C2   		orq	%rax, %rdx
+ 7378 66f5 0FB6855D 		movzbl	-9635(%rbp), %eax
+ 7378      DAFFFF
+ 7379 66fc 48C1E208 		salq	$8, %rdx
+ 7380 6700 4809C2   		orq	%rax, %rdx
+ 7381 6703 0FB6855E 		movzbl	-9634(%rbp), %eax
+ 7381      DAFFFF
+ 7382 670a 48C1E208 		salq	$8, %rdx
+ 7383 670e 4809C2   		orq	%rax, %rdx
+ 7384 6711 0FB6855F 		movzbl	-9633(%rbp), %eax
+ 7384      DAFFFF
+ 7385 6718 48C1E208 		salq	$8, %rdx
+ 7386 671c 4809C2   		orq	%rax, %rdx
+ 7387 671f 410FB6C7 		movzbl	%r15b, %eax
+ 7388 6723 48C1E208 		salq	$8, %rdx
+ 7389 6727 4809C2   		orq	%rax, %rdx
+ 7390 672a 0FB6C1   		movzbl	%cl, %eax
+ 7391 672d 400FB6CE 		movzbl	%sil, %ecx
+ 7392 6731 48C1E008 		salq	$8, %rax
+ 7393 6735 4809C8   		orq	%rcx, %rax
+ 7394 6738 410FB6C8 		movzbl	%r8b, %ecx
+ 7395 673c 48C1E008 		salq	$8, %rax
+ 7396 6740 4809C8   		orq	%rcx, %rax
+ 7397 6743 410FB6CE 		movzbl	%r14b, %ecx
+ 7398 6747 48C1E008 		salq	$8, %rax
+ 7399 674b 4809C8   		orq	%rcx, %rax
+ 7400 674e 410FB6CD 		movzbl	%r13b, %ecx
+ 7401 6752 48C1E008 		salq	$8, %rax
+ 7402 6756 4809C8   		orq	%rcx, %rax
+ 7403 6759 410FB6CC 		movzbl	%r12b, %ecx
+ 7404 675d 48C1E008 		salq	$8, %rax
+ 7405 6761 4809C8   		orq	%rcx, %rax
+ 7406 6764 410FB6CB 		movzbl	%r11b, %ecx
+ 7407 6768 48C1E008 		salq	$8, %rax
+ 7408 676c 4809C8   		orq	%rcx, %rax
+ 7409 676f 410FB6CA 		movzbl	%r10b, %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 248
+
+
+ 7410 6773 48C1E008 		salq	$8, %rax
+ 7411 6777 4809C8   		orq	%rcx, %rax
+ 7412 677a 488995A0 		movq	%rdx, -10336(%rbp)
+ 7412      D7FFFF
+ 7413 6781 488985A8 		movq	%rax, -10328(%rbp)
+ 7413      D7FFFF
+ 7414 6788 660F6F85 		movdqa	-10336(%rbp), %xmm0
+ 7414      A0D7FFFF 
+ 7415              	.LBE809:
+ 7416              	.LBE808:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 7417              		.loc 2 862 0
+ 7418 6790 F30F7F85 		movdqu	%xmm0, -1200(%rbp)
+ 7418      50FBFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 7419              		.loc 2 866 0
+ 7420 6798 C7852CFB 		movl	$0, -1236(%rbp)
+ 7420      FFFF0000 
+ 7420      0000
+ 7421 67a2 E9860200 		jmp	.L180
+ 7421      00
+ 7422              	.L189:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 7423              		.loc 2 868 0
+ 7424 67a7 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 7424      00000000 
+ 7425 67af F30F7F85 		movdqu	%xmm0, -1088(%rbp)
+ 7425      C0FBFFFF 
+ 7426 67b7 F30F6F85 		movdqu	-1200(%rbp), %xmm0
+ 7426      50FBFFFF 
+ 7427 67bf F30F7F85 		movdqu	%xmm0, -1104(%rbp)
+ 7427      B0FBFFFF 
+ 7428              	.LBB810:
+ 7429              	.LBB811:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 7430              		.loc 2 380 0
+ 7431 67c7 F30F6F85 		movdqu	-1088(%rbp), %xmm0
+ 7431      C0FBFFFF 
+ 7432 67cf F30F7F85 		movdqu	%xmm0, -7120(%rbp)
+ 7432      30E4FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 7433              		.loc 2 381 0
+ 7434 67d7 F30F6F85 		movdqu	-1104(%rbp), %xmm0
+ 7434      B0FBFFFF 
+ 7435 67df F30F7F85 		movdqu	%xmm0, -7136(%rbp)
+ 7435      20E4FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 7436              		.loc 2 383 0
+ 7437 67e7 C785DCFB 		movl	$0, -1060(%rbp)
+ 7437      FFFF0000 
+ 7437      0000
+ 7438 67f1 EB5C     		jmp	.L181
+ 7439              	.L184:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 7440              		.loc 2 385 0
+ 7441 67f3 8B85DCFB 		movl	-1060(%rbp), %eax
+ 7441      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 249
+
+
+ 7442 67f9 89C0     		mov	%eax, %eax
+ 7443 67fb 0FB68405 		movzbl	-7136(%rbp,%rax), %eax
+ 7443      20E4FFFF 
+ 7444 6803 84C0     		testb	%al, %al
+ 7445 6805 7912     		jns	.L182
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 7446              		.loc 2 386 0
+ 7447 6807 8B85DCFB 		movl	-1060(%rbp), %eax
+ 7447      FFFF
+ 7448 680d 89C0     		mov	%eax, %eax
+ 7449 680f C6840540 		movb	$0, -7104(%rbp,%rax)
+ 7449      E4FFFF00 
+ 7450 6817 EB2F     		jmp	.L183
+ 7451              	.L182:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 7452              		.loc 2 388 0
+ 7453 6819 8B8DDCFB 		movl	-1060(%rbp), %ecx
+ 7453      FFFF
+ 7454 681f 8B85DCFB 		movl	-1060(%rbp), %eax
+ 7454      FFFF
+ 7455 6825 89C0     		mov	%eax, %eax
+ 7456 6827 0FB68405 		movzbl	-7136(%rbp,%rax), %eax
+ 7456      20E4FFFF 
+ 7457 682f 0FB6C0   		movzbl	%al, %eax
+ 7458 6832 83E00F   		andl	$15, %eax
+ 7459 6835 4898     		cltq
+ 7460 6837 0FB69405 		movzbl	-7120(%rbp,%rax), %edx
+ 7460      30E4FFFF 
+ 7461 683f 89C8     		mov	%ecx, %eax
+ 7462 6841 88940540 		movb	%dl, -7104(%rbp,%rax)
+ 7462      E4FFFF
+ 7463              	.L183:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 7464              		.loc 2 383 0
+ 7465 6848 8385DCFB 		addl	$1, -1060(%rbp)
+ 7465      FFFF01
+ 7466              	.L181:
+ 7467 684f 83BDDCFB 		cmpl	$15, -1060(%rbp)
+ 7467      FFFF0F
+ 7468 6856 769B     		jbe	.L184
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 7469              		.loc 2 391 0
+ 7470 6858 F30F6F85 		movdqu	-7104(%rbp), %xmm0
+ 7470      40E4FFFF 
+ 7471              	.LBE811:
+ 7472              	.LBE810:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 7473              		.loc 2 868 0
+ 7474 6860 F30F7F85 		movdqu	%xmm0, -1216(%rbp)
+ 7474      40FBFFFF 
+ 7475 6868 F30F6F85 		movdqu	-1184(%rbp), %xmm0
+ 7475      60FBFFFF 
+ 7476 6870 F30F7F85 		movdqu	%xmm0, -1040(%rbp)
+ 7476      F0FBFFFF 
+ 7477 6878 F30F6F85 		movdqu	-1216(%rbp), %xmm0
+ 7477      40FBFFFF 
+ 7478 6880 F30F7F85 		movdqu	%xmm0, -1056(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 250
+
+
+ 7478      E0FBFFFF 
+ 7479              	.LBB812:
+ 7480              	.LBB813:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 7481              		.loc 2 234 0
+ 7482 6888 F30F6F85 		movdqu	-1056(%rbp), %xmm0
+ 7482      E0FBFFFF 
+ 7483 6890 F30F6F8D 		movdqu	-1040(%rbp), %xmm1
+ 7483      F0FBFFFF 
+ 7484 6898 660FEBC1 		por	%xmm1, %xmm0
+ 7485              	.LBE813:
+ 7486              	.LBE812:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 7487              		.loc 2 870 0
+ 7488 689c F30F7F85 		movdqu	%xmm0, -1216(%rbp)
+ 7488      40FBFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 7489              		.loc 2 872 0
+ 7490 68a4 8B852CFB 		mov	-1236(%rbp), %eax
+ 7490      FFFF
+ 7491 68aa 48C1E004 		salq	$4, %rax
+ 7492 68ae 48038508 		addq	-1272(%rbp), %rax
+ 7492      FBFFFF
+ 7493 68b5 660F6F00 		movdqa	(%rax), %xmm0
+ 7494 68b9 F30F7F85 		movdqu	%xmm0, -1008(%rbp)
+ 7494      10FCFFFF 
+ 7495 68c1 F30F6F85 		movdqu	-1216(%rbp), %xmm0
+ 7495      40FBFFFF 
+ 7496 68c9 F30F7F85 		movdqu	%xmm0, -1024(%rbp)
+ 7496      00FCFFFF 
+ 7497              	.LBB814:
+ 7498              	.LBB815:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 7499              		.loc 2 380 0
+ 7500 68d1 F30F6F85 		movdqu	-1008(%rbp), %xmm0
+ 7500      10FCFFFF 
+ 7501 68d9 F30F7F85 		movdqu	%xmm0, -7072(%rbp)
+ 7501      60E4FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 7502              		.loc 2 381 0
+ 7503 68e1 F30F6F85 		movdqu	-1024(%rbp), %xmm0
+ 7503      00FCFFFF 
+ 7504 68e9 F30F7F85 		movdqu	%xmm0, -7088(%rbp)
+ 7504      50E4FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 7505              		.loc 2 383 0
+ 7506 68f1 C7852CFC 		movl	$0, -980(%rbp)
+ 7506      FFFF0000 
+ 7506      0000
+ 7507 68fb EB5C     		jmp	.L185
+ 7508              	.L188:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 7509              		.loc 2 385 0
+ 7510 68fd 8B852CFC 		movl	-980(%rbp), %eax
+ 7510      FFFF
+ 7511 6903 89C0     		mov	%eax, %eax
+ 7512 6905 0FB68405 		movzbl	-7088(%rbp,%rax), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 251
+
+
+ 7512      50E4FFFF 
+ 7513 690d 84C0     		testb	%al, %al
+ 7514 690f 7912     		jns	.L186
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 7515              		.loc 2 386 0
+ 7516 6911 8B852CFC 		movl	-980(%rbp), %eax
+ 7516      FFFF
+ 7517 6917 89C0     		mov	%eax, %eax
+ 7518 6919 C6840570 		movb	$0, -7056(%rbp,%rax)
+ 7518      E4FFFF00 
+ 7519 6921 EB2F     		jmp	.L187
+ 7520              	.L186:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 7521              		.loc 2 388 0
+ 7522 6923 8B8D2CFC 		movl	-980(%rbp), %ecx
+ 7522      FFFF
+ 7523 6929 8B852CFC 		movl	-980(%rbp), %eax
+ 7523      FFFF
+ 7524 692f 89C0     		mov	%eax, %eax
+ 7525 6931 0FB68405 		movzbl	-7088(%rbp,%rax), %eax
+ 7525      50E4FFFF 
+ 7526 6939 0FB6C0   		movzbl	%al, %eax
+ 7527 693c 83E00F   		andl	$15, %eax
+ 7528 693f 4898     		cltq
+ 7529 6941 0FB69405 		movzbl	-7072(%rbp,%rax), %edx
+ 7529      60E4FFFF 
+ 7530 6949 89C8     		mov	%ecx, %eax
+ 7531 694b 88940570 		movb	%dl, -7056(%rbp,%rax)
+ 7531      E4FFFF
+ 7532              	.L187:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 7533              		.loc 2 383 0
+ 7534 6952 83852CFC 		addl	$1, -980(%rbp)
+ 7534      FFFF01
+ 7535              	.L185:
+ 7536 6959 83BD2CFC 		cmpl	$15, -980(%rbp)
+ 7536      FFFF0F
+ 7537 6960 769B     		jbe	.L188
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 7538              		.loc 2 391 0
+ 7539 6962 F30F6F85 		movdqu	-7056(%rbp), %xmm0
+ 7539      70E4FFFF 
+ 7540              	.LBE815:
+ 7541              	.LBE814:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 7542              		.loc 2 872 0
+ 7543 696a F30F7F85 		movdqu	%xmm0, -1216(%rbp)
+ 7543      40FBFFFF 
+ 7544 6972 F30F6F85 		movdqu	-1232(%rbp), %xmm0
+ 7544      30FBFFFF 
+ 7545 697a F30F7F85 		movdqu	%xmm0, -960(%rbp)
+ 7545      40FCFFFF 
+ 7546 6982 F30F6F85 		movdqu	-1216(%rbp), %xmm0
+ 7546      40FBFFFF 
+ 7547 698a F30F7F85 		movdqu	%xmm0, -976(%rbp)
+ 7547      30FCFFFF 
+ 7548              	.LBB816:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 252
+
+
+ 7549              	.LBB817:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 7550              		.loc 2 234 0
+ 7551 6992 F30F6F85 		movdqu	-976(%rbp), %xmm0
+ 7551      30FCFFFF 
+ 7552 699a F30F6F8D 		movdqu	-960(%rbp), %xmm1
+ 7552      40FCFFFF 
+ 7553 69a2 660FEBC1 		por	%xmm1, %xmm0
+ 7554              	.LBE817:
+ 7555              	.LBE816:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 7556              		.loc 2 874 0
+ 7557 69a6 F30F7F85 		movdqu	%xmm0, -1232(%rbp)
+ 7557      30FBFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 7558              		.loc 2 876 0
+ 7559 69ae 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 7559      00000000 
+ 7560 69b6 F30F6F8D 		movdqu	-1200(%rbp), %xmm1
+ 7560      50FBFFFF 
+ 7561 69be F30F7F8D 		movdqu	%xmm1, -928(%rbp)
+ 7561      60FCFFFF 
+ 7562 69c6 F30F7F85 		movdqu	%xmm0, -944(%rbp)
+ 7562      50FCFFFF 
+ 7563              	.LBB818:
+ 7564              	.LBB819:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 7565              		.loc 2 290 0
+ 7566 69ce F30F6F8D 		movdqu	-944(%rbp), %xmm1
+ 7566      50FCFFFF 
+ 7567 69d6 F30F6F85 		movdqu	-928(%rbp), %xmm0
+ 7567      60FCFFFF 
+ 7568 69de 660FF8C1 		psubb	%xmm1, %xmm0
+ 7569              	.LBE819:
+ 7570              	.LBE818:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 7571              		.loc 2 876 0
+ 7572 69e2 F30F7F85 		movdqu	%xmm0, -1200(%rbp)
+ 7572      50FBFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 7573              		.loc 2 878 0
+ 7574 69ea 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 7574      00000000 
+ 7575 69f2 F30F6F8D 		movdqu	-1200(%rbp), %xmm1
+ 7575      50FBFFFF 
+ 7576 69fa F30F7F8D 		movdqu	%xmm1, -896(%rbp)
+ 7576      80FCFFFF 
+ 7577 6a02 F30F7F85 		movdqu	%xmm0, -912(%rbp)
+ 7577      70FCFFFF 
+ 7578              	.LBB820:
+ 7579              	.LBB821:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 7580              		.loc 2 206 0
+ 7581 6a0a F30F6F85 		movdqu	-912(%rbp), %xmm0
+ 7581      70FCFFFF 
+ 7582 6a12 F30F6F8D 		movdqu	-896(%rbp), %xmm1
+ 7582      80FCFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 253
+
+
+ 7583 6a1a 660FDBC1 		pand	%xmm1, %xmm0
+ 7584              	.LBE821:
+ 7585              	.LBE820:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 7586              		.loc 2 878 0
+ 7587 6a1e F30F7F85 		movdqu	%xmm0, -1200(%rbp)
+ 7587      50FBFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 7588              		.loc 2 866 0
+ 7589 6a26 83852CFB 		addl	$1, -1236(%rbp)
+ 7589      FFFF01
+ 7590              	.L180:
+ 7591 6a2d 83BD2CFB 		cmpl	$15, -1236(%rbp)
+ 7591      FFFF0F
+ 7592 6a34 0F866DFD 		jbe	.L189
+ 7592      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 7593              		.loc 2 882 0
+ 7594 6a3a F30F6F85 		movdqu	-1232(%rbp), %xmm0
+ 7594      30FBFFFF 
+ 7595              	.LBE805:
+ 7596              	.LBE804:
+ 7597              	.LBE803:
+ 7598              	.LBE802:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 7599              		.loc 2 1682 0
+ 7600 6a42 660F7F85 		movdqa	%xmm0, -9680(%rbp)
+ 7600      30DAFFFF 
+ 7601              	.LBB822:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 7602              		.loc 2 1683 0
+ 7603 6a4a 660F6F85 		movdqa	-9680(%rbp), %xmm0
+ 7603      30DAFFFF 
+ 7604 6a52 F30F7F85 		movdqu	%xmm0, -7168(%rbp)
+ 7604      00E4FFFF 
+ 7605 6a5a E8000000 		call	KDbgWriterGet at PLT
+ 7605      00
+ 7606 6a5f 4885C0   		testq	%rax, %rax
+ 7607 6a62 7479     		je	.L191
+ 7608 6a64 BF010000 		movl	$1, %edi
+ 7608      00
+ 7609 6a69 E8000000 		call	KDbgCondToFlag at PLT
+ 7609      00
+ 7610 6a6e 4889C6   		movq	%rax, %rsi
+ 7611 6a71 BF100000 		movl	$16, %edi
+ 7611      00
+ 7612 6a76 E8000000 		call	KDbgTestModConds at PLT
+ 7612      00
+ 7613 6a7b 84C0     		testb	%al, %al
+ 7614 6a7d 745E     		je	.L191
+ 7615 6a7f 8B850CE4 		movl	-7156(%rbp), %eax
+ 7615      FFFF
+ 7616 6a85 89C7     		movl	%eax, %edi
+ 7617 6a87 E87495FF 		call	bswap_32
+ 7617      FF
+ 7618 6a8c 4189C5   		movl	%eax, %r13d
+ 7619 6a8f 8B8508E4 		movl	-7160(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 254
+
+
+ 7619      FFFF
+ 7620 6a95 89C7     		movl	%eax, %edi
+ 7621 6a97 E86495FF 		call	bswap_32
+ 7621      FF
+ 7622 6a9c 4189C4   		movl	%eax, %r12d
+ 7623 6a9f 8B8504E4 		movl	-7164(%rbp), %eax
+ 7623      FFFF
+ 7624 6aa5 89C7     		movl	%eax, %edi
+ 7625 6aa7 E85495FF 		call	bswap_32
+ 7625      FF
+ 7626 6aac 89C3     		movl	%eax, %ebx
+ 7627 6aae 8B8500E4 		movl	-7168(%rbp), %eax
+ 7627      FFFF
+ 7628 6ab4 89C7     		movl	%eax, %edi
+ 7629 6ab6 E84595FF 		call	bswap_32
+ 7629      FF
+ 7630 6abb 4589E9   		movl	%r13d, %r9d
+ 7631 6abe 4589E0   		movl	%r12d, %r8d
+ 7632 6ac1 89D9     		movl	%ebx, %ecx
+ 7633 6ac3 89C2     		movl	%eax, %edx
+ 7634 6ac5 488D3500 		leaq	.LC0(%rip), %rsi
+ 7634      000000
+ 7635 6acc 488D3D00 		leaq	.LC1(%rip), %rdi
+ 7635      000000
+ 7636 6ad3 B8000000 		movl	$0, %eax
+ 7636      00
+ 7637 6ad8 E8000000 		call	KDbgMsg at PLT
+ 7637      00
+ 7638              	.L191:
+ 7639 6add 660F6F85 		movdqa	-9680(%rbp), %xmm0
+ 7639      30DAFFFF 
+ 7640 6ae5 F30F7F85 		movdqu	%xmm0, -880(%rbp)
+ 7640      90FCFFFF 
+ 7641              	.LBE822:
+ 7642              	.LBB823:
+ 7643              	.LBB824:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 7644              		.loc 2 667 0
+ 7645 6aed 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 7645      00000000 
+ 7646 6af5 F30F6F8D 		movdqu	-880(%rbp), %xmm1
+ 7646      90FCFFFF 
+ 7647 6afd F30F7F8D 		movdqu	%xmm1, -848(%rbp)
+ 7647      B0FCFFFF 
+ 7648 6b05 F30F7F85 		movdqu	%xmm0, -864(%rbp)
+ 7648      A0FCFFFF 
+ 7649              	.LBB825:
+ 7650              	.LBB826:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 7651              		.loc 2 380 0
+ 7652 6b0d F30F6F85 		movdqu	-848(%rbp), %xmm0
+ 7652      B0FCFFFF 
+ 7653 6b15 F30F7F85 		movdqu	%xmm0, -7024(%rbp)
+ 7653      90E4FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 7654              		.loc 2 381 0
+ 7655 6b1d F30F6F85 		movdqu	-864(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 255
+
+
+ 7655      A0FCFFFF 
+ 7656 6b25 F30F7F85 		movdqu	%xmm0, -7040(%rbp)
+ 7656      80E4FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 7657              		.loc 2 383 0
+ 7658 6b2d C785CCFC 		movl	$0, -820(%rbp)
+ 7658      FFFF0000 
+ 7658      0000
+ 7659 6b37 EB5C     		jmp	.L192
+ 7660              	.L195:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 7661              		.loc 2 385 0
+ 7662 6b39 8B85CCFC 		movl	-820(%rbp), %eax
+ 7662      FFFF
+ 7663 6b3f 89C0     		mov	%eax, %eax
+ 7664 6b41 0FB68405 		movzbl	-7040(%rbp,%rax), %eax
+ 7664      80E4FFFF 
+ 7665 6b49 84C0     		testb	%al, %al
+ 7666 6b4b 7912     		jns	.L193
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 7667              		.loc 2 386 0
+ 7668 6b4d 8B85CCFC 		movl	-820(%rbp), %eax
+ 7668      FFFF
+ 7669 6b53 89C0     		mov	%eax, %eax
+ 7670 6b55 C68405A0 		movb	$0, -7008(%rbp,%rax)
+ 7670      E4FFFF00 
+ 7671 6b5d EB2F     		jmp	.L194
+ 7672              	.L193:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 7673              		.loc 2 388 0
+ 7674 6b5f 8B8DCCFC 		movl	-820(%rbp), %ecx
+ 7674      FFFF
+ 7675 6b65 8B85CCFC 		movl	-820(%rbp), %eax
+ 7675      FFFF
+ 7676 6b6b 89C0     		mov	%eax, %eax
+ 7677 6b6d 0FB68405 		movzbl	-7040(%rbp,%rax), %eax
+ 7677      80E4FFFF 
+ 7678 6b75 0FB6C0   		movzbl	%al, %eax
+ 7679 6b78 83E00F   		andl	$15, %eax
+ 7680 6b7b 4898     		cltq
+ 7681 6b7d 0FB69405 		movzbl	-7024(%rbp,%rax), %edx
+ 7681      90E4FFFF 
+ 7682 6b85 89C8     		mov	%ecx, %eax
+ 7683 6b87 889405A0 		movb	%dl, -7008(%rbp,%rax)
+ 7683      E4FFFF
+ 7684              	.L194:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 7685              		.loc 2 383 0
+ 7686 6b8e 8385CCFC 		addl	$1, -820(%rbp)
+ 7686      FFFF01
+ 7687              	.L192:
+ 7688 6b95 83BDCCFC 		cmpl	$15, -820(%rbp)
+ 7688      FFFF0F
+ 7689 6b9c 769B     		jbe	.L195
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 7690              		.loc 2 391 0
+ 7691 6b9e F30F6F85 		movdqu	-7008(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 256
+
+
+ 7691      A0E4FFFF 
+ 7692              	.LBE826:
+ 7693              	.LBE825:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 7694              		.loc 2 667 0
+ 7695 6ba6 F30F7F85 		movdqu	%xmm0, -880(%rbp)
+ 7695      90FCFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 7696              		.loc 2 668 0
+ 7697 6bae F30F6F85 		movdqu	-880(%rbp), %xmm0
+ 7697      90FCFFFF 
+ 7698              	.LBE824:
+ 7699              	.LBE823:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 7700              		.loc 2 1684 0
+ 7701 6bb6 660F7F85 		movdqa	%xmm0, -9680(%rbp)
+ 7701      30DAFFFF 
+ 7702              	.LBB827:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 7703              		.loc 2 1685 0
+ 7704 6bbe 660F6F85 		movdqa	-9680(%rbp), %xmm0
+ 7704      30DAFFFF 
+ 7705 6bc6 F30F7F85 		movdqu	%xmm0, -7184(%rbp)
+ 7705      F0E3FFFF 
+ 7706 6bce E8000000 		call	KDbgWriterGet at PLT
+ 7706      00
+ 7707 6bd3 4885C0   		testq	%rax, %rax
+ 7708 6bd6 7479     		je	.L197
+ 7709 6bd8 BF010000 		movl	$1, %edi
+ 7709      00
+ 7710 6bdd E8000000 		call	KDbgCondToFlag at PLT
+ 7710      00
+ 7711 6be2 4889C6   		movq	%rax, %rsi
+ 7712 6be5 BF100000 		movl	$16, %edi
+ 7712      00
+ 7713 6bea E8000000 		call	KDbgTestModConds at PLT
+ 7713      00
+ 7714 6bef 84C0     		testb	%al, %al
+ 7715 6bf1 745E     		je	.L197
+ 7716 6bf3 8B85FCE3 		movl	-7172(%rbp), %eax
+ 7716      FFFF
+ 7717 6bf9 89C7     		movl	%eax, %edi
+ 7718 6bfb E80094FF 		call	bswap_32
+ 7718      FF
+ 7719 6c00 4189C5   		movl	%eax, %r13d
+ 7720 6c03 8B85F8E3 		movl	-7176(%rbp), %eax
+ 7720      FFFF
+ 7721 6c09 89C7     		movl	%eax, %edi
+ 7722 6c0b E8F093FF 		call	bswap_32
+ 7722      FF
+ 7723 6c10 4189C4   		movl	%eax, %r12d
+ 7724 6c13 8B85F4E3 		movl	-7180(%rbp), %eax
+ 7724      FFFF
+ 7725 6c19 89C7     		movl	%eax, %edi
+ 7726 6c1b E8E093FF 		call	bswap_32
+ 7726      FF
+ 7727 6c20 89C3     		movl	%eax, %ebx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 257
+
+
+ 7728 6c22 8B85F0E3 		movl	-7184(%rbp), %eax
+ 7728      FFFF
+ 7729 6c28 89C7     		movl	%eax, %edi
+ 7730 6c2a E8D193FF 		call	bswap_32
+ 7730      FF
+ 7731 6c2f 4589E9   		movl	%r13d, %r9d
+ 7732 6c32 4589E0   		movl	%r12d, %r8d
+ 7733 6c35 89D9     		movl	%ebx, %ecx
+ 7734 6c37 89C2     		movl	%eax, %edx
+ 7735 6c39 488D3500 		leaq	.LC2(%rip), %rsi
+ 7735      000000
+ 7736 6c40 488D3D00 		leaq	.LC1(%rip), %rdi
+ 7736      000000
+ 7737 6c47 B8000000 		movl	$0, %eax
+ 7737      00
+ 7738 6c4c E8000000 		call	KDbgMsg at PLT
+ 7738      00
+ 7739              	.L197:
+ 7740 6c51 660F6F85 		movdqa	-9680(%rbp), %xmm0
+ 7740      30DAFFFF 
+ 7741 6c59 F30F7F85 		movdqu	%xmm0, -800(%rbp)
+ 7741      E0FCFFFF 
+ 7742 6c61 660F6F85 		movdqa	-9664(%rbp), %xmm0
+ 7742      40DAFFFF 
+ 7743 6c69 F30F7F85 		movdqu	%xmm0, -816(%rbp)
+ 7743      D0FCFFFF 
+ 7744              	.LBE827:
+ 7745              	.LBB828:
+ 7746              	.LBB829:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 7747              		.loc 2 178 0
+ 7748 6c71 F30F6F85 		movdqu	-816(%rbp), %xmm0
+ 7748      D0FCFFFF 
+ 7749 6c79 F30F6F8D 		movdqu	-800(%rbp), %xmm1
+ 7749      E0FCFFFF 
+ 7750 6c81 660FEFC1 		pxor	%xmm1, %xmm0
+ 7751              	.LBE829:
+ 7752              	.LBE828:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 7753              		.loc 2 1686 0
+ 7754 6c85 660F7F85 		movdqa	%xmm0, -9680(%rbp)
+ 7754      30DAFFFF 
+ 7755              	.LBB830:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 7756              		.loc 2 1687 0
+ 7757 6c8d 660F6F85 		movdqa	-9680(%rbp), %xmm0
+ 7757      30DAFFFF 
+ 7758 6c95 F30F7F85 		movdqu	%xmm0, -7200(%rbp)
+ 7758      E0E3FFFF 
+ 7759 6c9d E8000000 		call	KDbgWriterGet at PLT
+ 7759      00
+ 7760 6ca2 4885C0   		testq	%rax, %rax
+ 7761 6ca5 7479     		je	.L199
+ 7762 6ca7 BF010000 		movl	$1, %edi
+ 7762      00
+ 7763 6cac E8000000 		call	KDbgCondToFlag at PLT
+ 7763      00
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 258
+
+
+ 7764 6cb1 4889C6   		movq	%rax, %rsi
+ 7765 6cb4 BF100000 		movl	$16, %edi
+ 7765      00
+ 7766 6cb9 E8000000 		call	KDbgTestModConds at PLT
+ 7766      00
+ 7767 6cbe 84C0     		testb	%al, %al
+ 7768 6cc0 745E     		je	.L199
+ 7769 6cc2 8B85ECE3 		movl	-7188(%rbp), %eax
+ 7769      FFFF
+ 7770 6cc8 89C7     		movl	%eax, %edi
+ 7771 6cca E83193FF 		call	bswap_32
+ 7771      FF
+ 7772 6ccf 4189C5   		movl	%eax, %r13d
+ 7773 6cd2 8B85E8E3 		movl	-7192(%rbp), %eax
+ 7773      FFFF
+ 7774 6cd8 89C7     		movl	%eax, %edi
+ 7775 6cda E82193FF 		call	bswap_32
+ 7775      FF
+ 7776 6cdf 4189C4   		movl	%eax, %r12d
+ 7777 6ce2 8B85E4E3 		movl	-7196(%rbp), %eax
+ 7777      FFFF
+ 7778 6ce8 89C7     		movl	%eax, %edi
+ 7779 6cea E81193FF 		call	bswap_32
+ 7779      FF
+ 7780 6cef 89C3     		movl	%eax, %ebx
+ 7781 6cf1 8B85E0E3 		movl	-7200(%rbp), %eax
+ 7781      FFFF
+ 7782 6cf7 89C7     		movl	%eax, %edi
+ 7783 6cf9 E80293FF 		call	bswap_32
+ 7783      FF
+ 7784 6cfe 4589E9   		movl	%r13d, %r9d
+ 7785 6d01 4589E0   		movl	%r12d, %r8d
+ 7786 6d04 89D9     		movl	%ebx, %ecx
+ 7787 6d06 89C2     		movl	%eax, %edx
+ 7788 6d08 488D3500 		leaq	.LC3(%rip), %rsi
+ 7788      000000
+ 7789 6d0f 488D3D00 		leaq	.LC1(%rip), %rdi
+ 7789      000000
+ 7790 6d16 B8000000 		movl	$0, %eax
+ 7790      00
+ 7791 6d1b E8000000 		call	KDbgMsg at PLT
+ 7791      00
+ 7792              	.L199:
+ 7793 6d20 660F6F85 		movdqa	-9680(%rbp), %xmm0
+ 7793      30DAFFFF 
+ 7794 6d28 F30F7F85 		movdqu	%xmm0, -784(%rbp)
+ 7794      F0FCFFFF 
+ 7795              	.LBE830:
+ 7796              	.LBB831:
+ 7797              	.LBB832:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 7798              		.loc 2 1357 0
+ 7799 6d30 F30F6F85 		movdqu	-784(%rbp), %xmm0
+ 7799      F0FCFFFF 
+ 7800 6d38 F30F7F85 		movdqu	%xmm0, -6992(%rbp)
+ 7800      B0E4FFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 259
+
+
+ 7801              		.loc 2 1358 0
+ 7802 6d40 8B85BCE4 		movl	-6980(%rbp), %eax
+ 7802      FFFF
+ 7803 6d46 8985B8E4 		movl	%eax, -6984(%rbp)
+ 7803      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 7804              		.loc 2 1359 0
+ 7805 6d4c 8B85BCE4 		movl	-6980(%rbp), %eax
+ 7805      FFFF
+ 7806 6d52 8985B4E4 		movl	%eax, -6988(%rbp)
+ 7806      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 7807              		.loc 2 1360 0
+ 7808 6d58 8B85BCE4 		movl	-6980(%rbp), %eax
+ 7808      FFFF
+ 7809 6d5e 8985B0E4 		movl	%eax, -6992(%rbp)
+ 7809      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 7810              		.loc 2 1361 0
+ 7811 6d64 F30F6F85 		movdqu	-6992(%rbp), %xmm0
+ 7811      B0E4FFFF 
+ 7812              	.LBE832:
+ 7813              	.LBE831:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 7814              		.loc 2 1688 0
+ 7815 6d6c 660F7F85 		movdqa	%xmm0, -9680(%rbp)
+ 7815      30DAFFFF 
+ 7816              	.LBB833:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 7817              		.loc 2 1689 0
+ 7818 6d74 660F6F85 		movdqa	-9680(%rbp), %xmm0
+ 7818      30DAFFFF 
+ 7819 6d7c F30F7F85 		movdqu	%xmm0, -7216(%rbp)
+ 7819      D0E3FFFF 
+ 7820 6d84 E8000000 		call	KDbgWriterGet at PLT
+ 7820      00
+ 7821 6d89 4885C0   		testq	%rax, %rax
+ 7822 6d8c 7479     		je	.L201
+ 7823 6d8e BF010000 		movl	$1, %edi
+ 7823      00
+ 7824 6d93 E8000000 		call	KDbgCondToFlag at PLT
+ 7824      00
+ 7825 6d98 4889C6   		movq	%rax, %rsi
+ 7826 6d9b BF100000 		movl	$16, %edi
+ 7826      00
+ 7827 6da0 E8000000 		call	KDbgTestModConds at PLT
+ 7827      00
+ 7828 6da5 84C0     		testb	%al, %al
+ 7829 6da7 745E     		je	.L201
+ 7830 6da9 8B85DCE3 		movl	-7204(%rbp), %eax
+ 7830      FFFF
+ 7831 6daf 89C7     		movl	%eax, %edi
+ 7832 6db1 E84A92FF 		call	bswap_32
+ 7832      FF
+ 7833 6db6 4189C5   		movl	%eax, %r13d
+ 7834 6db9 8B85D8E3 		movl	-7208(%rbp), %eax
+ 7834      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 260
+
+
+ 7835 6dbf 89C7     		movl	%eax, %edi
+ 7836 6dc1 E83A92FF 		call	bswap_32
+ 7836      FF
+ 7837 6dc6 4189C4   		movl	%eax, %r12d
+ 7838 6dc9 8B85D4E3 		movl	-7212(%rbp), %eax
+ 7838      FFFF
+ 7839 6dcf 89C7     		movl	%eax, %edi
+ 7840 6dd1 E82A92FF 		call	bswap_32
+ 7840      FF
+ 7841 6dd6 89C3     		movl	%eax, %ebx
+ 7842 6dd8 8B85D0E3 		movl	-7216(%rbp), %eax
+ 7842      FFFF
+ 7843 6dde 89C7     		movl	%eax, %edi
+ 7844 6de0 E81B92FF 		call	bswap_32
+ 7844      FF
+ 7845 6de5 4589E9   		movl	%r13d, %r9d
+ 7846 6de8 4589E0   		movl	%r12d, %r8d
+ 7847 6deb 89D9     		movl	%ebx, %ecx
+ 7848 6ded 89C2     		movl	%eax, %edx
+ 7849 6def 488D3500 		leaq	.LC4(%rip), %rsi
+ 7849      000000
+ 7850 6df6 488D3D00 		leaq	.LC1(%rip), %rdi
+ 7850      000000
+ 7851 6dfd B8000000 		movl	$0, %eax
+ 7851      00
+ 7852 6e02 E8000000 		call	KDbgMsg at PLT
+ 7852      00
+ 7853              	.L201:
+ 7854              	.LBE833:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 7855              		.loc 2 1690 0
+ 7856 6e07 660F6F85 		movdqa	-9680(%rbp), %xmm0
+ 7856      30DAFFFF 
+ 7857              	.LBE799:
+ 7858              	.LBE798:
+1752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x1B,9);
+ 7859              		.loc 2 1752 0
+ 7860 6e0f F30F7F85 		movdqu	%xmm0, -6624(%rbp)
+ 7860      20E6FFFF 
+ 7861 6e17 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 7861      10E6FFFF 
+ 7862 6e1f F30F7F85 		movdqu	%xmm0, -768(%rbp)
+ 7862      00FDFFFF 
+ 7863              	.LBB834:
+ 7864              	.LBB835:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 7865              		.loc 2 1565 0
+ 7866 6e27 F30F6F85 		movdqu	-768(%rbp), %xmm0
+ 7866      00FDFFFF 
+ 7867 6e2f 660F7F85 		movdqa	%xmm0, -9632(%rbp)
+ 7867      60DAFFFF 
+ 7868 6e37 660F6F85 		movdqa	-9632(%rbp), %xmm0
+ 7868      60DAFFFF 
+ 7869 6e3f F30F7F85 		movdqu	%xmm0, -752(%rbp)
+ 7869      10FDFFFF 
+ 7870              	.LBB836:
+ 7871              	.LBB837:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 261
+
+
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 7872              		.loc 2 1282 0
+ 7873 6e47 F30F6F85 		movdqu	-752(%rbp), %xmm0
+ 7873      10FDFFFF 
+ 7874 6e4f F30F7F85 		movdqu	%xmm0, -6976(%rbp)
+ 7874      C0E4FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 7875              		.loc 2 1283 0
+ 7876 6e57 8B85C8E4 		movl	-6968(%rbp), %eax
+ 7876      FFFF
+ 7877 6e5d 8985CCE4 		movl	%eax, -6964(%rbp)
+ 7877      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 7878              		.loc 2 1284 0
+ 7879 6e63 8B85C4E4 		movl	-6972(%rbp), %eax
+ 7879      FFFF
+ 7880 6e69 8985C8E4 		movl	%eax, -6968(%rbp)
+ 7880      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 7881              		.loc 2 1285 0
+ 7882 6e6f 8B85C0E4 		movl	-6976(%rbp), %eax
+ 7882      FFFF
+ 7883 6e75 8985C4E4 		movl	%eax, -6972(%rbp)
+ 7883      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 7884              		.loc 2 1286 0
+ 7885 6e7b C785C0E4 		movl	$0, -6976(%rbp)
+ 7885      FFFF0000 
+ 7885      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 7886              		.loc 2 1287 0
+ 7887 6e85 F30F6F85 		movdqu	-6976(%rbp), %xmm0
+ 7887      C0E4FFFF 
+ 7888              	.LBE837:
+ 7889              	.LBE836:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7890              		.loc 2 1567 0
+ 7891 6e8d 660F7F85 		movdqa	%xmm0, -9632(%rbp)
+ 7891      60DAFFFF 
+ 7892 6e95 660F6F85 		movdqa	-9632(%rbp), %xmm0
+ 7892      60DAFFFF 
+ 7893 6e9d 660FEF85 		pxor	-768(%rbp), %xmm0
+ 7893      00FDFFFF 
+ 7894 6ea5 F30F7F85 		movdqu	%xmm0, -768(%rbp)
+ 7894      00FDFFFF 
+ 7895 6ead 660F6F85 		movdqa	-9632(%rbp), %xmm0
+ 7895      60DAFFFF 
+ 7896 6eb5 F30F7F85 		movdqu	%xmm0, -736(%rbp)
+ 7896      20FDFFFF 
+ 7897              	.LBB838:
+ 7898              	.LBB839:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 7899              		.loc 2 1282 0
+ 7900 6ebd F30F6F85 		movdqu	-736(%rbp), %xmm0
+ 7900      20FDFFFF 
+ 7901 6ec5 F30F7F85 		movdqu	%xmm0, -6960(%rbp)
+ 7901      D0E4FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 262
+
+
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 7902              		.loc 2 1283 0
+ 7903 6ecd 8B85D8E4 		movl	-6952(%rbp), %eax
+ 7903      FFFF
+ 7904 6ed3 8985DCE4 		movl	%eax, -6948(%rbp)
+ 7904      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 7905              		.loc 2 1284 0
+ 7906 6ed9 8B85D4E4 		movl	-6956(%rbp), %eax
+ 7906      FFFF
+ 7907 6edf 8985D8E4 		movl	%eax, -6952(%rbp)
+ 7907      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 7908              		.loc 2 1285 0
+ 7909 6ee5 8B85D0E4 		movl	-6960(%rbp), %eax
+ 7909      FFFF
+ 7910 6eeb 8985D4E4 		movl	%eax, -6956(%rbp)
+ 7910      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 7911              		.loc 2 1286 0
+ 7912 6ef1 C785D0E4 		movl	$0, -6960(%rbp)
+ 7912      FFFF0000 
+ 7912      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 7913              		.loc 2 1287 0
+ 7914 6efb F30F6F85 		movdqu	-6960(%rbp), %xmm0
+ 7914      D0E4FFFF 
+ 7915              	.LBE839:
+ 7916              	.LBE838:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7917              		.loc 2 1568 0
+ 7918 6f03 660F7F85 		movdqa	%xmm0, -9632(%rbp)
+ 7918      60DAFFFF 
+ 7919 6f0b 660F6F85 		movdqa	-9632(%rbp), %xmm0
+ 7919      60DAFFFF 
+ 7920 6f13 660FEF85 		pxor	-768(%rbp), %xmm0
+ 7920      00FDFFFF 
+ 7921 6f1b F30F7F85 		movdqu	%xmm0, -768(%rbp)
+ 7921      00FDFFFF 
+ 7922 6f23 660F6F85 		movdqa	-9632(%rbp), %xmm0
+ 7922      60DAFFFF 
+ 7923 6f2b F30F7F85 		movdqu	%xmm0, -720(%rbp)
+ 7923      30FDFFFF 
+ 7924              	.LBB840:
+ 7925              	.LBB841:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 7926              		.loc 2 1282 0
+ 7927 6f33 F30F6F85 		movdqu	-720(%rbp), %xmm0
+ 7927      30FDFFFF 
+ 7928 6f3b F30F7F85 		movdqu	%xmm0, -6944(%rbp)
+ 7928      E0E4FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 7929              		.loc 2 1283 0
+ 7930 6f43 8B85E8E4 		movl	-6936(%rbp), %eax
+ 7930      FFFF
+ 7931 6f49 8985ECE4 		movl	%eax, -6932(%rbp)
+ 7931      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 263
+
+
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 7932              		.loc 2 1284 0
+ 7933 6f4f 8B85E4E4 		movl	-6940(%rbp), %eax
+ 7933      FFFF
+ 7934 6f55 8985E8E4 		movl	%eax, -6936(%rbp)
+ 7934      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 7935              		.loc 2 1285 0
+ 7936 6f5b 8B85E0E4 		movl	-6944(%rbp), %eax
+ 7936      FFFF
+ 7937 6f61 8985E4E4 		movl	%eax, -6940(%rbp)
+ 7937      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 7938              		.loc 2 1286 0
+ 7939 6f67 C785E0E4 		movl	$0, -6944(%rbp)
+ 7939      FFFF0000 
+ 7939      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 7940              		.loc 2 1287 0
+ 7941 6f71 F30F6F85 		movdqu	-6944(%rbp), %xmm0
+ 7941      E0E4FFFF 
+ 7942              	.LBE841:
+ 7943              	.LBE840:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7944              		.loc 2 1569 0
+ 7945 6f79 660F7F85 		movdqa	%xmm0, -9632(%rbp)
+ 7945      60DAFFFF 
+ 7946 6f81 660F6F85 		movdqa	-9632(%rbp), %xmm0
+ 7946      60DAFFFF 
+ 7947 6f89 660FEF85 		pxor	-768(%rbp), %xmm0
+ 7947      00FDFFFF 
+ 7948 6f91 F30F7F85 		movdqu	%xmm0, -768(%rbp)
+ 7948      00FDFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 7949              		.loc 2 1571 0
+ 7950 6f99 F30F6F85 		movdqu	-768(%rbp), %xmm0
+ 7950      00FDFFFF 
+ 7951              	.LBE835:
+ 7952              	.LBE834:
+1752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x1B,9);
+ 7953              		.loc 2 1752 0
+ 7954 6fa1 F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 7954      10E6FFFF 
+ 7955 6fa9 F30F6F85 		movdqu	-6624(%rbp), %xmm0
+ 7955      20E6FFFF 
+ 7956 6fb1 F30F6F8D 		movdqu	-6640(%rbp), %xmm1
+ 7956      10E6FFFF 
+ 7957 6fb9 660FEFC1 		pxor	%xmm1, %xmm0
+ 7958 6fbd F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 7958      10E6FFFF 
+ 7959 6fc5 488B85B8 		movq	-9544(%rbp), %rax
+ 7959      DAFFFF
+ 7960 6fcc 48059000 		addq	$144, %rax
+ 7960      0000
+ 7961 6fd2 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 7961      10E6FFFF 
+ 7962 6fda F30F7F00 		movdqu	%xmm0, (%rax)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 264
+
+
+ 7963 6fde F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 7963      10E6FFFF 
+ 7964 6fe6 F30F7F85 		movdqu	%xmm0, -688(%rbp)
+ 7964      50FDFFFF 
+ 7965              	.LBB842:
+ 7966              	.LBB843:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 7967              		.loc 2 1681 0
+ 7968 6fee B8360000 		movl	$54, %eax
+ 7968      00
+ 7969 6ff3 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 7969      00000000 
+ 7970 6ffb F30F7F85 		movdqu	%xmm0, -656(%rbp)
+ 7970      70FDFFFF 
+ 7971 7003 89856CFD 		movl	%eax, -660(%rbp)
+ 7971      FFFF
+ 7972              	.LBB844:
+ 7973              	.LBB845:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 7974              		.loc 2 522 0
+ 7975 7009 F30F6F85 		movdqu	-656(%rbp), %xmm0
+ 7975      70FDFFFF 
+ 7976 7011 F30F7F85 		movdqu	%xmm0, -6864(%rbp)
+ 7976      30E5FFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 7977              		.loc 2 523 0
+ 7978 7019 B8030000 		movl	$3, %eax
+ 7978      00
+ 7979 701e 4898     		cltq
+ 7980 7020 8B956CFD 		movl	-660(%rbp), %edx
+ 7980      FFFF
+ 7981 7026 89948530 		movl	%edx, -6864(%rbp,%rax,4)
+ 7981      E5FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 7982              		.loc 2 524 0
+ 7983 702d F30F6F85 		movdqu	-6864(%rbp), %xmm0
+ 7983      30E5FFFF 
+ 7984 7035 F30F7F85 		movdqu	%xmm0, -656(%rbp)
+ 7984      70FDFFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 7985              		.loc 2 526 0
+ 7986 703d F30F6F85 		movdqu	-656(%rbp), %xmm0
+ 7986      70FDFFFF 
+ 7987              	.LBE845:
+ 7988              	.LBE844:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 7989              		.loc 2 1681 0
+ 7990 7045 660F7F85 		movdqa	%xmm0, -9600(%rbp)
+ 7990      80DAFFFF 
+ 7991 704d F30F6F85 		movdqu	-688(%rbp), %xmm0
+ 7991      50FDFFFF 
+ 7992 7055 F30F7F85 		movdqu	%xmm0, -640(%rbp)
+ 7992      80FDFFFF 
+ 7993 705d F30F6F85 		movdqu	-640(%rbp), %xmm0
+ 7993      80FDFFFF 
+ 7994 7065 F30F7F85 		movdqu	%xmm0, -608(%rbp)
+ 7994      A0FDFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 265
+
+
+ 7995 706d 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 7995      000000
+ 7996 7074 48898598 		movq	%rax, -616(%rbp)
+ 7996      FDFFFF
+ 7997              	.LBB846:
+ 7998              	.LBB847:
+ 7999              	.LBB848:
+ 8000              	.LBB849:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 8001              		.loc 2 851 0
+ 8002 707b 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 8002      00000000 
+ 8003 7083 F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 8003      C0FDFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 8004              		.loc 2 854 0
+ 8005 708b 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 8005      00000000 
+ 8006 7093 F30F6F8D 		movdqu	-608(%rbp), %xmm1
+ 8006      A0FDFFFF 
+ 8007 709b F30F7F8D 		movdqu	%xmm1, -496(%rbp)
+ 8007      10FEFFFF 
+ 8008 70a3 F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 8008      00FEFFFF 
+ 8009              	.LBB850:
+ 8010              	.LBB851:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 8011              		.loc 2 206 0
+ 8012 70ab F30F6F85 		movdqu	-512(%rbp), %xmm0
+ 8012      00FEFFFF 
+ 8013 70b3 F30F6F8D 		movdqu	-496(%rbp), %xmm1
+ 8013      10FEFFFF 
+ 8014 70bb 660FDBC1 		pand	%xmm1, %xmm0
+ 8015              	.LBE851:
+ 8016              	.LBE850:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 8017              		.loc 2 854 0
+ 8018 70bf F30F7F85 		movdqu	%xmm0, -528(%rbp)
+ 8018      F0FDFFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 8019              		.loc 2 862 0
+ 8020 70c7 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 8020      00000000 
+ 8021 70cf F30F6F8D 		movdqu	-608(%rbp), %xmm1
+ 8021      A0FDFFFF 
+ 8022 70d7 F30F7F8D 		movdqu	%xmm1, -464(%rbp)
+ 8022      30FEFFFF 
+ 8023 70df F30F7F85 		movdqu	%xmm0, -480(%rbp)
+ 8023      20FEFFFF 
+ 8024              	.LBB852:
+ 8025              		.loc 2 2642 0
+ 8026 70e7 0FB68530 		movzbl	-464(%rbp), %eax
+ 8026      FEFFFF
+ 8027 70ee 0FB69520 		movzbl	-480(%rbp), %edx
+ 8027      FEFFFF
+ 8028 70f5 0FB6C0   		movzbl	%al, %eax
+ 8029 70f8 6689858E 		movw	%ax, -10354(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 266
+
+
+ 8029      D7FFFF
+ 8030 70ff 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 8030      D7FFFF
+ 8031 7106 F6F2     		divb	%dl
+ 8032 7108 4189C7   		movl	%eax, %r15d
+ 8033 710b 0FB68531 		movzbl	-463(%rbp), %eax
+ 8033      FEFFFF
+ 8034 7112 0FB69521 		movzbl	-479(%rbp), %edx
+ 8034      FEFFFF
+ 8035 7119 0FB6C0   		movzbl	%al, %eax
+ 8036 711c 6689858E 		movw	%ax, -10354(%rbp)
+ 8036      D7FFFF
+ 8037 7123 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 8037      D7FFFF
+ 8038 712a F6F2     		divb	%dl
+ 8039 712c 88859FDA 		movb	%al, -9569(%rbp)
+ 8039      FFFF
+ 8040 7132 0FB68532 		movzbl	-462(%rbp), %eax
+ 8040      FEFFFF
+ 8041 7139 0FB69522 		movzbl	-478(%rbp), %edx
+ 8041      FEFFFF
+ 8042 7140 0FB6C0   		movzbl	%al, %eax
+ 8043 7143 6689858E 		movw	%ax, -10354(%rbp)
+ 8043      D7FFFF
+ 8044 714a 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 8044      D7FFFF
+ 8045 7151 F6F2     		divb	%dl
+ 8046 7153 88859EDA 		movb	%al, -9570(%rbp)
+ 8046      FFFF
+ 8047 7159 0FB68533 		movzbl	-461(%rbp), %eax
+ 8047      FEFFFF
+ 8048 7160 0FB69523 		movzbl	-477(%rbp), %edx
+ 8048      FEFFFF
+ 8049 7167 0FB6C0   		movzbl	%al, %eax
+ 8050 716a 6689858E 		movw	%ax, -10354(%rbp)
+ 8050      D7FFFF
+ 8051 7171 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 8051      D7FFFF
+ 8052 7178 F6F2     		divb	%dl
+ 8053 717a 88859DDA 		movb	%al, -9571(%rbp)
+ 8053      FFFF
+ 8054 7180 0FB68534 		movzbl	-460(%rbp), %eax
+ 8054      FEFFFF
+ 8055 7187 0FB69524 		movzbl	-476(%rbp), %edx
+ 8055      FEFFFF
+ 8056 718e 0FB6C0   		movzbl	%al, %eax
+ 8057 7191 6689858E 		movw	%ax, -10354(%rbp)
+ 8057      D7FFFF
+ 8058 7198 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 8058      D7FFFF
+ 8059 719f F6F2     		divb	%dl
+ 8060 71a1 88859CDA 		movb	%al, -9572(%rbp)
+ 8060      FFFF
+ 8061 71a7 0FB68535 		movzbl	-459(%rbp), %eax
+ 8061      FEFFFF
+ 8062 71ae 0FB69525 		movzbl	-475(%rbp), %edx
+ 8062      FEFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 267
+
+
+ 8063 71b5 0FB6C0   		movzbl	%al, %eax
+ 8064 71b8 6689858E 		movw	%ax, -10354(%rbp)
+ 8064      D7FFFF
+ 8065 71bf 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 8065      D7FFFF
+ 8066 71c6 F6F2     		divb	%dl
+ 8067 71c8 4189C1   		movl	%eax, %r9d
+ 8068 71cb 0FB68536 		movzbl	-458(%rbp), %eax
+ 8068      FEFFFF
+ 8069 71d2 0FB69526 		movzbl	-474(%rbp), %edx
+ 8069      FEFFFF
+ 8070 71d9 0FB6C0   		movzbl	%al, %eax
+ 8071 71dc 6689858E 		movw	%ax, -10354(%rbp)
+ 8071      D7FFFF
+ 8072 71e3 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 8072      D7FFFF
+ 8073 71ea F6F2     		divb	%dl
+ 8074 71ec 89C7     		movl	%eax, %edi
+ 8075 71ee 0FB68537 		movzbl	-457(%rbp), %eax
+ 8075      FEFFFF
+ 8076 71f5 0FB69527 		movzbl	-473(%rbp), %edx
+ 8076      FEFFFF
+ 8077 71fc 0FB6C0   		movzbl	%al, %eax
+ 8078 71ff 6689858E 		movw	%ax, -10354(%rbp)
+ 8078      D7FFFF
+ 8079 7206 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 8079      D7FFFF
+ 8080 720d F6F2     		divb	%dl
+ 8081 720f 89C3     		movl	%eax, %ebx
+ 8082 7211 0FB68538 		movzbl	-456(%rbp), %eax
+ 8082      FEFFFF
+ 8083 7218 0FB69528 		movzbl	-472(%rbp), %edx
+ 8083      FEFFFF
+ 8084 721f 0FB6C0   		movzbl	%al, %eax
+ 8085 7222 6689858E 		movw	%ax, -10354(%rbp)
+ 8085      D7FFFF
+ 8086 7229 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 8086      D7FFFF
+ 8087 7230 F6F2     		divb	%dl
+ 8088 7232 4189C2   		movl	%eax, %r10d
+ 8089 7235 0FB68539 		movzbl	-455(%rbp), %eax
+ 8089      FEFFFF
+ 8090 723c 0FB69529 		movzbl	-471(%rbp), %edx
+ 8090      FEFFFF
+ 8091 7243 0FB6C0   		movzbl	%al, %eax
+ 8092 7246 6689858E 		movw	%ax, -10354(%rbp)
+ 8092      D7FFFF
+ 8093 724d 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 8093      D7FFFF
+ 8094 7254 F6F2     		divb	%dl
+ 8095 7256 4189C3   		movl	%eax, %r11d
+ 8096 7259 0FB6853A 		movzbl	-454(%rbp), %eax
+ 8096      FEFFFF
+ 8097 7260 0FB6952A 		movzbl	-470(%rbp), %edx
+ 8097      FEFFFF
+ 8098 7267 0FB6C0   		movzbl	%al, %eax
+ 8099 726a 6689858E 		movw	%ax, -10354(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 268
+
+
+ 8099      D7FFFF
+ 8100 7271 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 8100      D7FFFF
+ 8101 7278 F6F2     		divb	%dl
+ 8102 727a 4189C4   		movl	%eax, %r12d
+ 8103 727d 0FB6853B 		movzbl	-453(%rbp), %eax
+ 8103      FEFFFF
+ 8104 7284 0FB6952B 		movzbl	-469(%rbp), %edx
+ 8104      FEFFFF
+ 8105 728b 0FB6C0   		movzbl	%al, %eax
+ 8106 728e 6689858E 		movw	%ax, -10354(%rbp)
+ 8106      D7FFFF
+ 8107 7295 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 8107      D7FFFF
+ 8108 729c F6F2     		divb	%dl
+ 8109 729e 4189C5   		movl	%eax, %r13d
+ 8110 72a1 0FB6853C 		movzbl	-452(%rbp), %eax
+ 8110      FEFFFF
+ 8111 72a8 0FB6952C 		movzbl	-468(%rbp), %edx
+ 8111      FEFFFF
+ 8112 72af 0FB6C0   		movzbl	%al, %eax
+ 8113 72b2 6689858E 		movw	%ax, -10354(%rbp)
+ 8113      D7FFFF
+ 8114 72b9 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 8114      D7FFFF
+ 8115 72c0 F6F2     		divb	%dl
+ 8116 72c2 4189C6   		movl	%eax, %r14d
+ 8117 72c5 0FB6853D 		movzbl	-451(%rbp), %eax
+ 8117      FEFFFF
+ 8118 72cc 0FB6952D 		movzbl	-467(%rbp), %edx
+ 8118      FEFFFF
+ 8119 72d3 0FB6C0   		movzbl	%al, %eax
+ 8120 72d6 6689858E 		movw	%ax, -10354(%rbp)
+ 8120      D7FFFF
+ 8121 72dd 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 8121      D7FFFF
+ 8122 72e4 F6F2     		divb	%dl
+ 8123 72e6 4189C0   		movl	%eax, %r8d
+ 8124 72e9 0FB6853E 		movzbl	-450(%rbp), %eax
+ 8124      FEFFFF
+ 8125 72f0 0FB6952E 		movzbl	-466(%rbp), %edx
+ 8125      FEFFFF
+ 8126 72f7 0FB6C0   		movzbl	%al, %eax
+ 8127 72fa 6689858E 		movw	%ax, -10354(%rbp)
+ 8127      D7FFFF
+ 8128 7301 0FB7858E 		movzwl	-10354(%rbp), %eax
+ 8128      D7FFFF
+ 8129 7308 F6F2     		divb	%dl
+ 8130 730a 89C6     		movl	%eax, %esi
+ 8131 730c 0FB6853F 		movzbl	-449(%rbp), %eax
+ 8131      FEFFFF
+ 8132 7313 0FB6952F 		movzbl	-465(%rbp), %edx
+ 8132      FEFFFF
+ 8133 731a 0FB6C0   		movzbl	%al, %eax
+ 8134 731d 6689858E 		movw	%ax, -10354(%rbp)
+ 8134      D7FFFF
+ 8135 7324 0FB7858E 		movzwl	-10354(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 269
+
+
+ 8135      D7FFFF
+ 8136 732b F6F2     		divb	%dl
+ 8137 732d 89C1     		movl	%eax, %ecx
+ 8138              	.LBB853:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 8139              		.loc 2 346 0
+ 8140 732f 0FB6D3   		movzbl	%bl, %edx
+ 8141 7332 400FB6C7 		movzbl	%dil, %eax
+ 8142 7336 48C1E208 		salq	$8, %rdx
+ 8143 733a 4809C2   		orq	%rax, %rdx
+ 8144 733d 410FB6C1 		movzbl	%r9b, %eax
+ 8145 7341 48C1E208 		salq	$8, %rdx
+ 8146 7345 4809C2   		orq	%rax, %rdx
+ 8147 7348 0FB6859C 		movzbl	-9572(%rbp), %eax
+ 8147      DAFFFF
+ 8148 734f 48C1E208 		salq	$8, %rdx
+ 8149 7353 4809C2   		orq	%rax, %rdx
+ 8150 7356 0FB6859D 		movzbl	-9571(%rbp), %eax
+ 8150      DAFFFF
+ 8151 735d 48C1E208 		salq	$8, %rdx
+ 8152 7361 4809C2   		orq	%rax, %rdx
+ 8153 7364 0FB6859E 		movzbl	-9570(%rbp), %eax
+ 8153      DAFFFF
+ 8154 736b 48C1E208 		salq	$8, %rdx
+ 8155 736f 4809C2   		orq	%rax, %rdx
+ 8156 7372 0FB6859F 		movzbl	-9569(%rbp), %eax
+ 8156      DAFFFF
+ 8157 7379 48C1E208 		salq	$8, %rdx
+ 8158 737d 4809C2   		orq	%rax, %rdx
+ 8159 7380 410FB6C7 		movzbl	%r15b, %eax
+ 8160 7384 48C1E208 		salq	$8, %rdx
+ 8161 7388 4809C2   		orq	%rax, %rdx
+ 8162 738b 0FB6C1   		movzbl	%cl, %eax
+ 8163 738e 400FB6CE 		movzbl	%sil, %ecx
+ 8164 7392 48C1E008 		salq	$8, %rax
+ 8165 7396 4809C8   		orq	%rcx, %rax
+ 8166 7399 410FB6C8 		movzbl	%r8b, %ecx
+ 8167 739d 48C1E008 		salq	$8, %rax
+ 8168 73a1 4809C8   		orq	%rcx, %rax
+ 8169 73a4 410FB6CE 		movzbl	%r14b, %ecx
+ 8170 73a8 48C1E008 		salq	$8, %rax
+ 8171 73ac 4809C8   		orq	%rcx, %rax
+ 8172 73af 410FB6CD 		movzbl	%r13b, %ecx
+ 8173 73b3 48C1E008 		salq	$8, %rax
+ 8174 73b7 4809C8   		orq	%rcx, %rax
+ 8175 73ba 410FB6CC 		movzbl	%r12b, %ecx
+ 8176 73be 48C1E008 		salq	$8, %rax
+ 8177 73c2 4809C8   		orq	%rcx, %rax
+ 8178 73c5 410FB6CB 		movzbl	%r11b, %ecx
+ 8179 73c9 48C1E008 		salq	$8, %rax
+ 8180 73cd 4809C8   		orq	%rcx, %rax
+ 8181 73d0 410FB6CA 		movzbl	%r10b, %ecx
+ 8182 73d4 48C1E008 		salq	$8, %rax
+ 8183 73d8 4809C8   		orq	%rcx, %rax
+ 8184 73db 48899590 		movq	%rdx, -10352(%rbp)
+ 8184      D7FFFF
+ 8185 73e2 48898598 		movq	%rax, -10344(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 270
+
+
+ 8185      D7FFFF
+ 8186 73e9 660F6F85 		movdqa	-10352(%rbp), %xmm0
+ 8186      90D7FFFF 
+ 8187              	.LBE853:
+ 8188              	.LBE852:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 8189              		.loc 2 862 0
+ 8190 73f1 F30F7F85 		movdqu	%xmm0, -544(%rbp)
+ 8190      E0FDFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 8191              		.loc 2 866 0
+ 8192 73f9 C785BCFD 		movl	$0, -580(%rbp)
+ 8192      FFFF0000 
+ 8192      0000
+ 8193 7403 E9860200 		jmp	.L202
+ 8193      00
+ 8194              	.L211:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 8195              		.loc 2 868 0
+ 8196 7408 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 8196      00000000 
+ 8197 7410 F30F7F85 		movdqu	%xmm0, -432(%rbp)
+ 8197      50FEFFFF 
+ 8198 7418 F30F6F85 		movdqu	-544(%rbp), %xmm0
+ 8198      E0FDFFFF 
+ 8199 7420 F30F7F85 		movdqu	%xmm0, -448(%rbp)
+ 8199      40FEFFFF 
+ 8200              	.LBB854:
+ 8201              	.LBB855:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 8202              		.loc 2 380 0
+ 8203 7428 F30F6F85 		movdqu	-432(%rbp), %xmm0
+ 8203      50FEFFFF 
+ 8204 7430 F30F7F85 		movdqu	%xmm0, -6832(%rbp)
+ 8204      50E5FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 8205              		.loc 2 381 0
+ 8206 7438 F30F6F85 		movdqu	-448(%rbp), %xmm0
+ 8206      40FEFFFF 
+ 8207 7440 F30F7F85 		movdqu	%xmm0, -6848(%rbp)
+ 8207      40E5FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 8208              		.loc 2 383 0
+ 8209 7448 C7856CFE 		movl	$0, -404(%rbp)
+ 8209      FFFF0000 
+ 8209      0000
+ 8210 7452 EB5C     		jmp	.L203
+ 8211              	.L206:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 8212              		.loc 2 385 0
+ 8213 7454 8B856CFE 		movl	-404(%rbp), %eax
+ 8213      FFFF
+ 8214 745a 89C0     		mov	%eax, %eax
+ 8215 745c 0FB68405 		movzbl	-6848(%rbp,%rax), %eax
+ 8215      40E5FFFF 
+ 8216 7464 84C0     		testb	%al, %al
+ 8217 7466 7912     		jns	.L204
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 271
+
+
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 8218              		.loc 2 386 0
+ 8219 7468 8B856CFE 		movl	-404(%rbp), %eax
+ 8219      FFFF
+ 8220 746e 89C0     		mov	%eax, %eax
+ 8221 7470 C6840560 		movb	$0, -6816(%rbp,%rax)
+ 8221      E5FFFF00 
+ 8222 7478 EB2F     		jmp	.L205
+ 8223              	.L204:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 8224              		.loc 2 388 0
+ 8225 747a 8B8D6CFE 		movl	-404(%rbp), %ecx
+ 8225      FFFF
+ 8226 7480 8B856CFE 		movl	-404(%rbp), %eax
+ 8226      FFFF
+ 8227 7486 89C0     		mov	%eax, %eax
+ 8228 7488 0FB68405 		movzbl	-6848(%rbp,%rax), %eax
+ 8228      40E5FFFF 
+ 8229 7490 0FB6C0   		movzbl	%al, %eax
+ 8230 7493 83E00F   		andl	$15, %eax
+ 8231 7496 4898     		cltq
+ 8232 7498 0FB69405 		movzbl	-6832(%rbp,%rax), %edx
+ 8232      50E5FFFF 
+ 8233 74a0 89C8     		mov	%ecx, %eax
+ 8234 74a2 88940560 		movb	%dl, -6816(%rbp,%rax)
+ 8234      E5FFFF
+ 8235              	.L205:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 8236              		.loc 2 383 0
+ 8237 74a9 83856CFE 		addl	$1, -404(%rbp)
+ 8237      FFFF01
+ 8238              	.L203:
+ 8239 74b0 83BD6CFE 		cmpl	$15, -404(%rbp)
+ 8239      FFFF0F
+ 8240 74b7 769B     		jbe	.L206
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 8241              		.loc 2 391 0
+ 8242 74b9 F30F6F85 		movdqu	-6816(%rbp), %xmm0
+ 8242      60E5FFFF 
+ 8243              	.LBE855:
+ 8244              	.LBE854:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 8245              		.loc 2 868 0
+ 8246 74c1 F30F7F85 		movdqu	%xmm0, -560(%rbp)
+ 8246      D0FDFFFF 
+ 8247 74c9 F30F6F85 		movdqu	-528(%rbp), %xmm0
+ 8247      F0FDFFFF 
+ 8248 74d1 F30F7F85 		movdqu	%xmm0, -384(%rbp)
+ 8248      80FEFFFF 
+ 8249 74d9 F30F6F85 		movdqu	-560(%rbp), %xmm0
+ 8249      D0FDFFFF 
+ 8250 74e1 F30F7F85 		movdqu	%xmm0, -400(%rbp)
+ 8250      70FEFFFF 
+ 8251              	.LBB856:
+ 8252              	.LBB857:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 8253              		.loc 2 234 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 272
+
+
+ 8254 74e9 F30F6F85 		movdqu	-400(%rbp), %xmm0
+ 8254      70FEFFFF 
+ 8255 74f1 F30F6F8D 		movdqu	-384(%rbp), %xmm1
+ 8255      80FEFFFF 
+ 8256 74f9 660FEBC1 		por	%xmm1, %xmm0
+ 8257              	.LBE857:
+ 8258              	.LBE856:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 8259              		.loc 2 870 0
+ 8260 74fd F30F7F85 		movdqu	%xmm0, -560(%rbp)
+ 8260      D0FDFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 8261              		.loc 2 872 0
+ 8262 7505 8B85BCFD 		mov	-580(%rbp), %eax
+ 8262      FFFF
+ 8263 750b 48C1E004 		salq	$4, %rax
+ 8264 750f 48038598 		addq	-616(%rbp), %rax
+ 8264      FDFFFF
+ 8265 7516 660F6F00 		movdqa	(%rax), %xmm0
+ 8266 751a F30F7F85 		movdqu	%xmm0, -352(%rbp)
+ 8266      A0FEFFFF 
+ 8267 7522 F30F6F85 		movdqu	-560(%rbp), %xmm0
+ 8267      D0FDFFFF 
+ 8268 752a F30F7F85 		movdqu	%xmm0, -368(%rbp)
+ 8268      90FEFFFF 
+ 8269              	.LBB858:
+ 8270              	.LBB859:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 8271              		.loc 2 380 0
+ 8272 7532 F30F6F85 		movdqu	-352(%rbp), %xmm0
+ 8272      A0FEFFFF 
+ 8273 753a F30F7F85 		movdqu	%xmm0, -6784(%rbp)
+ 8273      80E5FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 8274              		.loc 2 381 0
+ 8275 7542 F30F6F85 		movdqu	-368(%rbp), %xmm0
+ 8275      90FEFFFF 
+ 8276 754a F30F7F85 		movdqu	%xmm0, -6800(%rbp)
+ 8276      70E5FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 8277              		.loc 2 383 0
+ 8278 7552 C785BCFE 		movl	$0, -324(%rbp)
+ 8278      FFFF0000 
+ 8278      0000
+ 8279 755c EB5C     		jmp	.L207
+ 8280              	.L210:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 8281              		.loc 2 385 0
+ 8282 755e 8B85BCFE 		movl	-324(%rbp), %eax
+ 8282      FFFF
+ 8283 7564 89C0     		mov	%eax, %eax
+ 8284 7566 0FB68405 		movzbl	-6800(%rbp,%rax), %eax
+ 8284      70E5FFFF 
+ 8285 756e 84C0     		testb	%al, %al
+ 8286 7570 7912     		jns	.L208
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 8287              		.loc 2 386 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 273
+
+
+ 8288 7572 8B85BCFE 		movl	-324(%rbp), %eax
+ 8288      FFFF
+ 8289 7578 89C0     		mov	%eax, %eax
+ 8290 757a C6840590 		movb	$0, -6768(%rbp,%rax)
+ 8290      E5FFFF00 
+ 8291 7582 EB2F     		jmp	.L209
+ 8292              	.L208:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 8293              		.loc 2 388 0
+ 8294 7584 8B8DBCFE 		movl	-324(%rbp), %ecx
+ 8294      FFFF
+ 8295 758a 8B85BCFE 		movl	-324(%rbp), %eax
+ 8295      FFFF
+ 8296 7590 89C0     		mov	%eax, %eax
+ 8297 7592 0FB68405 		movzbl	-6800(%rbp,%rax), %eax
+ 8297      70E5FFFF 
+ 8298 759a 0FB6C0   		movzbl	%al, %eax
+ 8299 759d 83E00F   		andl	$15, %eax
+ 8300 75a0 4898     		cltq
+ 8301 75a2 0FB69405 		movzbl	-6784(%rbp,%rax), %edx
+ 8301      80E5FFFF 
+ 8302 75aa 89C8     		mov	%ecx, %eax
+ 8303 75ac 88940590 		movb	%dl, -6768(%rbp,%rax)
+ 8303      E5FFFF
+ 8304              	.L209:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 8305              		.loc 2 383 0
+ 8306 75b3 8385BCFE 		addl	$1, -324(%rbp)
+ 8306      FFFF01
+ 8307              	.L207:
+ 8308 75ba 83BDBCFE 		cmpl	$15, -324(%rbp)
+ 8308      FFFF0F
+ 8309 75c1 769B     		jbe	.L210
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 8310              		.loc 2 391 0
+ 8311 75c3 F30F6F85 		movdqu	-6768(%rbp), %xmm0
+ 8311      90E5FFFF 
+ 8312              	.LBE859:
+ 8313              	.LBE858:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 8314              		.loc 2 872 0
+ 8315 75cb F30F7F85 		movdqu	%xmm0, -560(%rbp)
+ 8315      D0FDFFFF 
+ 8316 75d3 F30F6F85 		movdqu	-576(%rbp), %xmm0
+ 8316      C0FDFFFF 
+ 8317 75db F30F7F85 		movdqu	%xmm0, -304(%rbp)
+ 8317      D0FEFFFF 
+ 8318 75e3 F30F6F85 		movdqu	-560(%rbp), %xmm0
+ 8318      D0FDFFFF 
+ 8319 75eb F30F7F85 		movdqu	%xmm0, -320(%rbp)
+ 8319      C0FEFFFF 
+ 8320              	.LBB860:
+ 8321              	.LBB861:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 8322              		.loc 2 234 0
+ 8323 75f3 F30F6F85 		movdqu	-320(%rbp), %xmm0
+ 8323      C0FEFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 274
+
+
+ 8324 75fb F30F6F8D 		movdqu	-304(%rbp), %xmm1
+ 8324      D0FEFFFF 
+ 8325 7603 660FEBC1 		por	%xmm1, %xmm0
+ 8326              	.LBE861:
+ 8327              	.LBE860:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 8328              		.loc 2 874 0
+ 8329 7607 F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 8329      C0FDFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 8330              		.loc 2 876 0
+ 8331 760f 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 8331      00000000 
+ 8332 7617 F30F6F8D 		movdqu	-544(%rbp), %xmm1
+ 8332      E0FDFFFF 
+ 8333 761f F30F7F8D 		movdqu	%xmm1, -272(%rbp)
+ 8333      F0FEFFFF 
+ 8334 7627 F30F7F85 		movdqu	%xmm0, -288(%rbp)
+ 8334      E0FEFFFF 
+ 8335              	.LBB862:
+ 8336              	.LBB863:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 8337              		.loc 2 290 0
+ 8338 762f F30F6F8D 		movdqu	-288(%rbp), %xmm1
+ 8338      E0FEFFFF 
+ 8339 7637 F30F6F85 		movdqu	-272(%rbp), %xmm0
+ 8339      F0FEFFFF 
+ 8340 763f 660FF8C1 		psubb	%xmm1, %xmm0
+ 8341              	.LBE863:
+ 8342              	.LBE862:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 8343              		.loc 2 876 0
+ 8344 7643 F30F7F85 		movdqu	%xmm0, -544(%rbp)
+ 8344      E0FDFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 8345              		.loc 2 878 0
+ 8346 764b 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 8346      00000000 
+ 8347 7653 F30F6F8D 		movdqu	-544(%rbp), %xmm1
+ 8347      E0FDFFFF 
+ 8348 765b F30F7F8D 		movdqu	%xmm1, -240(%rbp)
+ 8348      10FFFFFF 
+ 8349 7663 F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 8349      00FFFFFF 
+ 8350              	.LBB864:
+ 8351              	.LBB865:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 8352              		.loc 2 206 0
+ 8353 766b F30F6F85 		movdqu	-256(%rbp), %xmm0
+ 8353      00FFFFFF 
+ 8354 7673 F30F6F8D 		movdqu	-240(%rbp), %xmm1
+ 8354      10FFFFFF 
+ 8355 767b 660FDBC1 		pand	%xmm1, %xmm0
+ 8356              	.LBE865:
+ 8357              	.LBE864:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 8358              		.loc 2 878 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 275
+
+
+ 8359 767f F30F7F85 		movdqu	%xmm0, -544(%rbp)
+ 8359      E0FDFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 8360              		.loc 2 866 0
+ 8361 7687 8385BCFD 		addl	$1, -580(%rbp)
+ 8361      FFFF01
+ 8362              	.L202:
+ 8363 768e 83BDBCFD 		cmpl	$15, -580(%rbp)
+ 8363      FFFF0F
+ 8364 7695 0F866DFD 		jbe	.L211
+ 8364      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 8365              		.loc 2 882 0
+ 8366 769b F30F6F85 		movdqu	-576(%rbp), %xmm0
+ 8366      C0FDFFFF 
+ 8367              	.LBE849:
+ 8368              	.LBE848:
+ 8369              	.LBE847:
+ 8370              	.LBE846:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 8371              		.loc 2 1682 0
+ 8372 76a3 660F7F85 		movdqa	%xmm0, -9616(%rbp)
+ 8372      70DAFFFF 
+ 8373              	.LBB866:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 8374              		.loc 2 1683 0
+ 8375 76ab 660F6F85 		movdqa	-9616(%rbp), %xmm0
+ 8375      70DAFFFF 
+ 8376 76b3 F30F7F85 		movdqu	%xmm0, -6880(%rbp)
+ 8376      20E5FFFF 
+ 8377 76bb E8000000 		call	KDbgWriterGet at PLT
+ 8377      00
+ 8378 76c0 4885C0   		testq	%rax, %rax
+ 8379 76c3 7479     		je	.L213
+ 8380 76c5 BF010000 		movl	$1, %edi
+ 8380      00
+ 8381 76ca E8000000 		call	KDbgCondToFlag at PLT
+ 8381      00
+ 8382 76cf 4889C6   		movq	%rax, %rsi
+ 8383 76d2 BF100000 		movl	$16, %edi
+ 8383      00
+ 8384 76d7 E8000000 		call	KDbgTestModConds at PLT
+ 8384      00
+ 8385 76dc 84C0     		testb	%al, %al
+ 8386 76de 745E     		je	.L213
+ 8387 76e0 8B852CE5 		movl	-6868(%rbp), %eax
+ 8387      FFFF
+ 8388 76e6 89C7     		movl	%eax, %edi
+ 8389 76e8 E81389FF 		call	bswap_32
+ 8389      FF
+ 8390 76ed 4189C5   		movl	%eax, %r13d
+ 8391 76f0 8B8528E5 		movl	-6872(%rbp), %eax
+ 8391      FFFF
+ 8392 76f6 89C7     		movl	%eax, %edi
+ 8393 76f8 E80389FF 		call	bswap_32
+ 8393      FF
+ 8394 76fd 4189C4   		movl	%eax, %r12d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 276
+
+
+ 8395 7700 8B8524E5 		movl	-6876(%rbp), %eax
+ 8395      FFFF
+ 8396 7706 89C7     		movl	%eax, %edi
+ 8397 7708 E8F388FF 		call	bswap_32
+ 8397      FF
+ 8398 770d 89C3     		movl	%eax, %ebx
+ 8399 770f 8B8520E5 		movl	-6880(%rbp), %eax
+ 8399      FFFF
+ 8400 7715 89C7     		movl	%eax, %edi
+ 8401 7717 E8E488FF 		call	bswap_32
+ 8401      FF
+ 8402 771c 4589E9   		movl	%r13d, %r9d
+ 8403 771f 4589E0   		movl	%r12d, %r8d
+ 8404 7722 89D9     		movl	%ebx, %ecx
+ 8405 7724 89C2     		movl	%eax, %edx
+ 8406 7726 488D3500 		leaq	.LC0(%rip), %rsi
+ 8406      000000
+ 8407 772d 488D3D00 		leaq	.LC1(%rip), %rdi
+ 8407      000000
+ 8408 7734 B8000000 		movl	$0, %eax
+ 8408      00
+ 8409 7739 E8000000 		call	KDbgMsg at PLT
+ 8409      00
+ 8410              	.L213:
+ 8411 773e 660F6F85 		movdqa	-9616(%rbp), %xmm0
+ 8411      70DAFFFF 
+ 8412 7746 F30F7F85 		movdqu	%xmm0, -224(%rbp)
+ 8412      20FFFFFF 
+ 8413              	.LBE866:
+ 8414              	.LBB867:
+ 8415              	.LBB868:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 8416              		.loc 2 667 0
+ 8417 774e 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 8417      00000000 
+ 8418 7756 F30F6F8D 		movdqu	-224(%rbp), %xmm1
+ 8418      20FFFFFF 
+ 8419 775e F30F7F8D 		movdqu	%xmm1, -192(%rbp)
+ 8419      40FFFFFF 
+ 8420 7766 F30F7F85 		movdqu	%xmm0, -208(%rbp)
+ 8420      30FFFFFF 
+ 8421              	.LBB869:
+ 8422              	.LBB870:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 8423              		.loc 2 380 0
+ 8424 776e F30F6F85 		movdqu	-192(%rbp), %xmm0
+ 8424      40FFFFFF 
+ 8425 7776 F30F7F85 		movdqu	%xmm0, -6736(%rbp)
+ 8425      B0E5FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 8426              		.loc 2 381 0
+ 8427 777e F30F6F85 		movdqu	-208(%rbp), %xmm0
+ 8427      30FFFFFF 
+ 8428 7786 F30F7F85 		movdqu	%xmm0, -6752(%rbp)
+ 8428      A0E5FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 8429              		.loc 2 383 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 277
+
+
+ 8430 778e C7855CFF 		movl	$0, -164(%rbp)
+ 8430      FFFF0000 
+ 8430      0000
+ 8431 7798 EB5C     		jmp	.L214
+ 8432              	.L217:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 8433              		.loc 2 385 0
+ 8434 779a 8B855CFF 		movl	-164(%rbp), %eax
+ 8434      FFFF
+ 8435 77a0 89C0     		mov	%eax, %eax
+ 8436 77a2 0FB68405 		movzbl	-6752(%rbp,%rax), %eax
+ 8436      A0E5FFFF 
+ 8437 77aa 84C0     		testb	%al, %al
+ 8438 77ac 7912     		jns	.L215
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 8439              		.loc 2 386 0
+ 8440 77ae 8B855CFF 		movl	-164(%rbp), %eax
+ 8440      FFFF
+ 8441 77b4 89C0     		mov	%eax, %eax
+ 8442 77b6 C68405C0 		movb	$0, -6720(%rbp,%rax)
+ 8442      E5FFFF00 
+ 8443 77be EB2F     		jmp	.L216
+ 8444              	.L215:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 8445              		.loc 2 388 0
+ 8446 77c0 8B8D5CFF 		movl	-164(%rbp), %ecx
+ 8446      FFFF
+ 8447 77c6 8B855CFF 		movl	-164(%rbp), %eax
+ 8447      FFFF
+ 8448 77cc 89C0     		mov	%eax, %eax
+ 8449 77ce 0FB68405 		movzbl	-6752(%rbp,%rax), %eax
+ 8449      A0E5FFFF 
+ 8450 77d6 0FB6C0   		movzbl	%al, %eax
+ 8451 77d9 83E00F   		andl	$15, %eax
+ 8452 77dc 4898     		cltq
+ 8453 77de 0FB69405 		movzbl	-6736(%rbp,%rax), %edx
+ 8453      B0E5FFFF 
+ 8454 77e6 89C8     		mov	%ecx, %eax
+ 8455 77e8 889405C0 		movb	%dl, -6720(%rbp,%rax)
+ 8455      E5FFFF
+ 8456              	.L216:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 8457              		.loc 2 383 0
+ 8458 77ef 83855CFF 		addl	$1, -164(%rbp)
+ 8458      FFFF01
+ 8459              	.L214:
+ 8460 77f6 83BD5CFF 		cmpl	$15, -164(%rbp)
+ 8460      FFFF0F
+ 8461 77fd 769B     		jbe	.L217
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 8462              		.loc 2 391 0
+ 8463 77ff F30F6F85 		movdqu	-6720(%rbp), %xmm0
+ 8463      C0E5FFFF 
+ 8464              	.LBE870:
+ 8465              	.LBE869:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 8466              		.loc 2 667 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 278
+
+
+ 8467 7807 F30F7F85 		movdqu	%xmm0, -224(%rbp)
+ 8467      20FFFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 8468              		.loc 2 668 0
+ 8469 780f F30F6F85 		movdqu	-224(%rbp), %xmm0
+ 8469      20FFFFFF 
+ 8470              	.LBE868:
+ 8471              	.LBE867:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 8472              		.loc 2 1684 0
+ 8473 7817 660F7F85 		movdqa	%xmm0, -9616(%rbp)
+ 8473      70DAFFFF 
+ 8474              	.LBB871:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 8475              		.loc 2 1685 0
+ 8476 781f 660F6F85 		movdqa	-9616(%rbp), %xmm0
+ 8476      70DAFFFF 
+ 8477 7827 F30F7F85 		movdqu	%xmm0, -6896(%rbp)
+ 8477      10E5FFFF 
+ 8478 782f E8000000 		call	KDbgWriterGet at PLT
+ 8478      00
+ 8479 7834 4885C0   		testq	%rax, %rax
+ 8480 7837 7479     		je	.L219
+ 8481 7839 BF010000 		movl	$1, %edi
+ 8481      00
+ 8482 783e E8000000 		call	KDbgCondToFlag at PLT
+ 8482      00
+ 8483 7843 4889C6   		movq	%rax, %rsi
+ 8484 7846 BF100000 		movl	$16, %edi
+ 8484      00
+ 8485 784b E8000000 		call	KDbgTestModConds at PLT
+ 8485      00
+ 8486 7850 84C0     		testb	%al, %al
+ 8487 7852 745E     		je	.L219
+ 8488 7854 8B851CE5 		movl	-6884(%rbp), %eax
+ 8488      FFFF
+ 8489 785a 89C7     		movl	%eax, %edi
+ 8490 785c E89F87FF 		call	bswap_32
+ 8490      FF
+ 8491 7861 4189C5   		movl	%eax, %r13d
+ 8492 7864 8B8518E5 		movl	-6888(%rbp), %eax
+ 8492      FFFF
+ 8493 786a 89C7     		movl	%eax, %edi
+ 8494 786c E88F87FF 		call	bswap_32
+ 8494      FF
+ 8495 7871 4189C4   		movl	%eax, %r12d
+ 8496 7874 8B8514E5 		movl	-6892(%rbp), %eax
+ 8496      FFFF
+ 8497 787a 89C7     		movl	%eax, %edi
+ 8498 787c E87F87FF 		call	bswap_32
+ 8498      FF
+ 8499 7881 89C3     		movl	%eax, %ebx
+ 8500 7883 8B8510E5 		movl	-6896(%rbp), %eax
+ 8500      FFFF
+ 8501 7889 89C7     		movl	%eax, %edi
+ 8502 788b E87087FF 		call	bswap_32
+ 8502      FF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 279
+
+
+ 8503 7890 4589E9   		movl	%r13d, %r9d
+ 8504 7893 4589E0   		movl	%r12d, %r8d
+ 8505 7896 89D9     		movl	%ebx, %ecx
+ 8506 7898 89C2     		movl	%eax, %edx
+ 8507 789a 488D3500 		leaq	.LC2(%rip), %rsi
+ 8507      000000
+ 8508 78a1 488D3D00 		leaq	.LC1(%rip), %rdi
+ 8508      000000
+ 8509 78a8 B8000000 		movl	$0, %eax
+ 8509      00
+ 8510 78ad E8000000 		call	KDbgMsg at PLT
+ 8510      00
+ 8511              	.L219:
+ 8512 78b2 660F6F85 		movdqa	-9616(%rbp), %xmm0
+ 8512      70DAFFFF 
+ 8513 78ba F30F7F85 		movdqu	%xmm0, -144(%rbp)
+ 8513      70FFFFFF 
+ 8514 78c2 660F6F85 		movdqa	-9600(%rbp), %xmm0
+ 8514      80DAFFFF 
+ 8515 78ca F30F7F85 		movdqu	%xmm0, -160(%rbp)
+ 8515      60FFFFFF 
+ 8516              	.LBE871:
+ 8517              	.LBB872:
+ 8518              	.LBB873:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 8519              		.loc 2 178 0
+ 8520 78d2 F30F6F85 		movdqu	-160(%rbp), %xmm0
+ 8520      60FFFFFF 
+ 8521 78da F30F6F8D 		movdqu	-144(%rbp), %xmm1
+ 8521      70FFFFFF 
+ 8522 78e2 660FEFC1 		pxor	%xmm1, %xmm0
+ 8523              	.LBE873:
+ 8524              	.LBE872:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 8525              		.loc 2 1686 0
+ 8526 78e6 660F7F85 		movdqa	%xmm0, -9616(%rbp)
+ 8526      70DAFFFF 
+ 8527              	.LBB874:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 8528              		.loc 2 1687 0
+ 8529 78ee 660F6F85 		movdqa	-9616(%rbp), %xmm0
+ 8529      70DAFFFF 
+ 8530 78f6 F30F7F85 		movdqu	%xmm0, -6912(%rbp)
+ 8530      00E5FFFF 
+ 8531 78fe E8000000 		call	KDbgWriterGet at PLT
+ 8531      00
+ 8532 7903 4885C0   		testq	%rax, %rax
+ 8533 7906 7479     		je	.L221
+ 8534 7908 BF010000 		movl	$1, %edi
+ 8534      00
+ 8535 790d E8000000 		call	KDbgCondToFlag at PLT
+ 8535      00
+ 8536 7912 4889C6   		movq	%rax, %rsi
+ 8537 7915 BF100000 		movl	$16, %edi
+ 8537      00
+ 8538 791a E8000000 		call	KDbgTestModConds at PLT
+ 8538      00
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 280
+
+
+ 8539 791f 84C0     		testb	%al, %al
+ 8540 7921 745E     		je	.L221
+ 8541 7923 8B850CE5 		movl	-6900(%rbp), %eax
+ 8541      FFFF
+ 8542 7929 89C7     		movl	%eax, %edi
+ 8543 792b E8D086FF 		call	bswap_32
+ 8543      FF
+ 8544 7930 4189C5   		movl	%eax, %r13d
+ 8545 7933 8B8508E5 		movl	-6904(%rbp), %eax
+ 8545      FFFF
+ 8546 7939 89C7     		movl	%eax, %edi
+ 8547 793b E8C086FF 		call	bswap_32
+ 8547      FF
+ 8548 7940 4189C4   		movl	%eax, %r12d
+ 8549 7943 8B8504E5 		movl	-6908(%rbp), %eax
+ 8549      FFFF
+ 8550 7949 89C7     		movl	%eax, %edi
+ 8551 794b E8B086FF 		call	bswap_32
+ 8551      FF
+ 8552 7950 89C3     		movl	%eax, %ebx
+ 8553 7952 8B8500E5 		movl	-6912(%rbp), %eax
+ 8553      FFFF
+ 8554 7958 89C7     		movl	%eax, %edi
+ 8555 795a E8A186FF 		call	bswap_32
+ 8555      FF
+ 8556 795f 4589E9   		movl	%r13d, %r9d
+ 8557 7962 4589E0   		movl	%r12d, %r8d
+ 8558 7965 89D9     		movl	%ebx, %ecx
+ 8559 7967 89C2     		movl	%eax, %edx
+ 8560 7969 488D3500 		leaq	.LC3(%rip), %rsi
+ 8560      000000
+ 8561 7970 488D3D00 		leaq	.LC1(%rip), %rdi
+ 8561      000000
+ 8562 7977 B8000000 		movl	$0, %eax
+ 8562      00
+ 8563 797c E8000000 		call	KDbgMsg at PLT
+ 8563      00
+ 8564              	.L221:
+ 8565 7981 660F6F85 		movdqa	-9616(%rbp), %xmm0
+ 8565      70DAFFFF 
+ 8566 7989 F30F7F45 		movdqu	%xmm0, -128(%rbp)
+ 8566      80
+ 8567              	.LBE874:
+ 8568              	.LBB875:
+ 8569              	.LBB876:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 8570              		.loc 2 1357 0
+ 8571 798e F30F6F45 		movdqu	-128(%rbp), %xmm0
+ 8571      80
+ 8572 7993 F30F7F85 		movdqu	%xmm0, -6704(%rbp)
+ 8572      D0E5FFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 8573              		.loc 2 1358 0
+ 8574 799b 8B85DCE5 		movl	-6692(%rbp), %eax
+ 8574      FFFF
+ 8575 79a1 8985D8E5 		movl	%eax, -6696(%rbp)
+ 8575      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 281
+
+
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 8576              		.loc 2 1359 0
+ 8577 79a7 8B85DCE5 		movl	-6692(%rbp), %eax
+ 8577      FFFF
+ 8578 79ad 8985D4E5 		movl	%eax, -6700(%rbp)
+ 8578      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 8579              		.loc 2 1360 0
+ 8580 79b3 8B85DCE5 		movl	-6692(%rbp), %eax
+ 8580      FFFF
+ 8581 79b9 8985D0E5 		movl	%eax, -6704(%rbp)
+ 8581      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 8582              		.loc 2 1361 0
+ 8583 79bf F30F6F85 		movdqu	-6704(%rbp), %xmm0
+ 8583      D0E5FFFF 
+ 8584              	.LBE876:
+ 8585              	.LBE875:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 8586              		.loc 2 1688 0
+ 8587 79c7 660F7F85 		movdqa	%xmm0, -9616(%rbp)
+ 8587      70DAFFFF 
+ 8588              	.LBB877:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 8589              		.loc 2 1689 0
+ 8590 79cf 660F6F85 		movdqa	-9616(%rbp), %xmm0
+ 8590      70DAFFFF 
+ 8591 79d7 F30F7F85 		movdqu	%xmm0, -6928(%rbp)
+ 8591      F0E4FFFF 
+ 8592 79df E8000000 		call	KDbgWriterGet at PLT
+ 8592      00
+ 8593 79e4 4885C0   		testq	%rax, %rax
+ 8594 79e7 7479     		je	.L223
+ 8595 79e9 BF010000 		movl	$1, %edi
+ 8595      00
+ 8596 79ee E8000000 		call	KDbgCondToFlag at PLT
+ 8596      00
+ 8597 79f3 4889C6   		movq	%rax, %rsi
+ 8598 79f6 BF100000 		movl	$16, %edi
+ 8598      00
+ 8599 79fb E8000000 		call	KDbgTestModConds at PLT
+ 8599      00
+ 8600 7a00 84C0     		testb	%al, %al
+ 8601 7a02 745E     		je	.L223
+ 8602 7a04 8B85FCE4 		movl	-6916(%rbp), %eax
+ 8602      FFFF
+ 8603 7a0a 89C7     		movl	%eax, %edi
+ 8604 7a0c E8EF85FF 		call	bswap_32
+ 8604      FF
+ 8605 7a11 4189C5   		movl	%eax, %r13d
+ 8606 7a14 8B85F8E4 		movl	-6920(%rbp), %eax
+ 8606      FFFF
+ 8607 7a1a 89C7     		movl	%eax, %edi
+ 8608 7a1c E8DF85FF 		call	bswap_32
+ 8608      FF
+ 8609 7a21 4189C4   		movl	%eax, %r12d
+ 8610 7a24 8B85F4E4 		movl	-6924(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 282
+
+
+ 8610      FFFF
+ 8611 7a2a 89C7     		movl	%eax, %edi
+ 8612 7a2c E8CF85FF 		call	bswap_32
+ 8612      FF
+ 8613 7a31 89C3     		movl	%eax, %ebx
+ 8614 7a33 8B85F0E4 		movl	-6928(%rbp), %eax
+ 8614      FFFF
+ 8615 7a39 89C7     		movl	%eax, %edi
+ 8616 7a3b E8C085FF 		call	bswap_32
+ 8616      FF
+ 8617 7a40 4589E9   		movl	%r13d, %r9d
+ 8618 7a43 4589E0   		movl	%r12d, %r8d
+ 8619 7a46 89D9     		movl	%ebx, %ecx
+ 8620 7a48 89C2     		movl	%eax, %edx
+ 8621 7a4a 488D3500 		leaq	.LC4(%rip), %rsi
+ 8621      000000
+ 8622 7a51 488D3D00 		leaq	.LC1(%rip), %rdi
+ 8622      000000
+ 8623 7a58 B8000000 		movl	$0, %eax
+ 8623      00
+ 8624 7a5d E8000000 		call	KDbgMsg at PLT
+ 8624      00
+ 8625              	.L223:
+ 8626              	.LBE877:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 8627              		.loc 2 1690 0
+ 8628 7a62 660F6F85 		movdqa	-9616(%rbp), %xmm0
+ 8628      70DAFFFF 
+ 8629              	.LBE843:
+ 8630              	.LBE842:
+1753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x36,10);
+ 8631              		.loc 2 1753 0
+ 8632 7a6a F30F7F85 		movdqu	%xmm0, -6624(%rbp)
+ 8632      20E6FFFF 
+ 8633 7a72 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 8633      10E6FFFF 
+ 8634 7a7a F30F7F45 		movdqu	%xmm0, -112(%rbp)
+ 8634      90
+ 8635              	.LBB878:
+ 8636              	.LBB879:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 8637              		.loc 2 1565 0
+ 8638 7a7f F30F6F45 		movdqu	-112(%rbp), %xmm0
+ 8638      90
+ 8639 7a84 660F7F85 		movdqa	%xmm0, -9568(%rbp)
+ 8639      A0DAFFFF 
+ 8640 7a8c 660F6F85 		movdqa	-9568(%rbp), %xmm0
+ 8640      A0DAFFFF 
+ 8641 7a94 F30F7F45 		movdqu	%xmm0, -96(%rbp)
+ 8641      A0
+ 8642              	.LBB880:
+ 8643              	.LBB881:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 8644              		.loc 2 1282 0
+ 8645 7a99 F30F6F45 		movdqu	-96(%rbp), %xmm0
+ 8645      A0
+ 8646 7a9e F30F7F85 		movdqu	%xmm0, -6688(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 283
+
+
+ 8646      E0E5FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 8647              		.loc 2 1283 0
+ 8648 7aa6 8B85E8E5 		movl	-6680(%rbp), %eax
+ 8648      FFFF
+ 8649 7aac 8985ECE5 		movl	%eax, -6676(%rbp)
+ 8649      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 8650              		.loc 2 1284 0
+ 8651 7ab2 8B85E4E5 		movl	-6684(%rbp), %eax
+ 8651      FFFF
+ 8652 7ab8 8985E8E5 		movl	%eax, -6680(%rbp)
+ 8652      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 8653              		.loc 2 1285 0
+ 8654 7abe 8B85E0E5 		movl	-6688(%rbp), %eax
+ 8654      FFFF
+ 8655 7ac4 8985E4E5 		movl	%eax, -6684(%rbp)
+ 8655      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 8656              		.loc 2 1286 0
+ 8657 7aca C785E0E5 		movl	$0, -6688(%rbp)
+ 8657      FFFF0000 
+ 8657      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 8658              		.loc 2 1287 0
+ 8659 7ad4 F30F6F85 		movdqu	-6688(%rbp), %xmm0
+ 8659      E0E5FFFF 
+ 8660              	.LBE881:
+ 8661              	.LBE880:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8662              		.loc 2 1567 0
+ 8663 7adc 660F7F85 		movdqa	%xmm0, -9568(%rbp)
+ 8663      A0DAFFFF 
+ 8664 7ae4 660F6F85 		movdqa	-9568(%rbp), %xmm0
+ 8664      A0DAFFFF 
+ 8665 7aec 660FEF45 		pxor	-112(%rbp), %xmm0
+ 8665      90
+ 8666 7af1 F30F7F45 		movdqu	%xmm0, -112(%rbp)
+ 8666      90
+ 8667 7af6 660F6F85 		movdqa	-9568(%rbp), %xmm0
+ 8667      A0DAFFFF 
+ 8668 7afe F30F7F45 		movdqu	%xmm0, -80(%rbp)
+ 8668      B0
+ 8669              	.LBB882:
+ 8670              	.LBB883:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 8671              		.loc 2 1282 0
+ 8672 7b03 F30F6F45 		movdqu	-80(%rbp), %xmm0
+ 8672      B0
+ 8673 7b08 F30F7F85 		movdqu	%xmm0, -6672(%rbp)
+ 8673      F0E5FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 8674              		.loc 2 1283 0
+ 8675 7b10 8B85F8E5 		movl	-6664(%rbp), %eax
+ 8675      FFFF
+ 8676 7b16 8985FCE5 		movl	%eax, -6660(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 284
+
+
+ 8676      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 8677              		.loc 2 1284 0
+ 8678 7b1c 8B85F4E5 		movl	-6668(%rbp), %eax
+ 8678      FFFF
+ 8679 7b22 8985F8E5 		movl	%eax, -6664(%rbp)
+ 8679      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 8680              		.loc 2 1285 0
+ 8681 7b28 8B85F0E5 		movl	-6672(%rbp), %eax
+ 8681      FFFF
+ 8682 7b2e 8985F4E5 		movl	%eax, -6668(%rbp)
+ 8682      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 8683              		.loc 2 1286 0
+ 8684 7b34 C785F0E5 		movl	$0, -6672(%rbp)
+ 8684      FFFF0000 
+ 8684      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 8685              		.loc 2 1287 0
+ 8686 7b3e F30F6F85 		movdqu	-6672(%rbp), %xmm0
+ 8686      F0E5FFFF 
+ 8687              	.LBE883:
+ 8688              	.LBE882:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8689              		.loc 2 1568 0
+ 8690 7b46 660F7F85 		movdqa	%xmm0, -9568(%rbp)
+ 8690      A0DAFFFF 
+ 8691 7b4e 660F6F85 		movdqa	-9568(%rbp), %xmm0
+ 8691      A0DAFFFF 
+ 8692 7b56 660FEF45 		pxor	-112(%rbp), %xmm0
+ 8692      90
+ 8693 7b5b F30F7F45 		movdqu	%xmm0, -112(%rbp)
+ 8693      90
+ 8694 7b60 660F6F85 		movdqa	-9568(%rbp), %xmm0
+ 8694      A0DAFFFF 
+ 8695 7b68 F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 8695      C0
+ 8696              	.LBB884:
+ 8697              	.LBB885:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 8698              		.loc 2 1282 0
+ 8699 7b6d F30F6F45 		movdqu	-64(%rbp), %xmm0
+ 8699      C0
+ 8700 7b72 F30F7F85 		movdqu	%xmm0, -6656(%rbp)
+ 8700      00E6FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 8701              		.loc 2 1283 0
+ 8702 7b7a 8B8508E6 		movl	-6648(%rbp), %eax
+ 8702      FFFF
+ 8703 7b80 89850CE6 		movl	%eax, -6644(%rbp)
+ 8703      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 8704              		.loc 2 1284 0
+ 8705 7b86 8B8504E6 		movl	-6652(%rbp), %eax
+ 8705      FFFF
+ 8706 7b8c 898508E6 		movl	%eax, -6648(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 285
+
+
+ 8706      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 8707              		.loc 2 1285 0
+ 8708 7b92 8B8500E6 		movl	-6656(%rbp), %eax
+ 8708      FFFF
+ 8709 7b98 898504E6 		movl	%eax, -6652(%rbp)
+ 8709      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 8710              		.loc 2 1286 0
+ 8711 7b9e C78500E6 		movl	$0, -6656(%rbp)
+ 8711      FFFF0000 
+ 8711      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 8712              		.loc 2 1287 0
+ 8713 7ba8 F30F6F85 		movdqu	-6656(%rbp), %xmm0
+ 8713      00E6FFFF 
+ 8714              	.LBE885:
+ 8715              	.LBE884:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8716              		.loc 2 1569 0
+ 8717 7bb0 660F7F85 		movdqa	%xmm0, -9568(%rbp)
+ 8717      A0DAFFFF 
+ 8718 7bb8 660F6F85 		movdqa	-9568(%rbp), %xmm0
+ 8718      A0DAFFFF 
+ 8719 7bc0 660FEF45 		pxor	-112(%rbp), %xmm0
+ 8719      90
+ 8720 7bc5 F30F7F45 		movdqu	%xmm0, -112(%rbp)
+ 8720      90
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 8721              		.loc 2 1571 0
+ 8722 7bca F30F6F45 		movdqu	-112(%rbp), %xmm0
+ 8722      90
+ 8723              	.LBE879:
+ 8724              	.LBE878:
+1753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x36,10);
+ 8725              		.loc 2 1753 0
+ 8726 7bcf F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 8726      10E6FFFF 
+ 8727 7bd7 F30F6F85 		movdqu	-6624(%rbp), %xmm0
+ 8727      20E6FFFF 
+ 8728 7bdf F30F6F8D 		movdqu	-6640(%rbp), %xmm1
+ 8728      10E6FFFF 
+ 8729 7be7 660FEFC1 		pxor	%xmm1, %xmm0
+ 8730 7beb F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 8730      10E6FFFF 
+ 8731 7bf3 488B85B8 		movq	-9544(%rbp), %rax
+ 8731      DAFFFF
+ 8732 7bfa 4805A000 		addq	$160, %rax
+ 8732      0000
+ 8733 7c00 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 8733      10E6FFFF 
+ 8734 7c08 F30F7F00 		movdqu	%xmm0, (%rax)
+1754:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 8735              		.loc 2 1754 0
+ 8736 7c0c 4881C458 		addq	$10328, %rsp
+ 8736      280000
+ 8737 7c13 5B       		popq	%rbx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 286
+
+
+ 8738 7c14 415C     		popq	%r12
+ 8739 7c16 415D     		popq	%r13
+ 8740 7c18 415E     		popq	%r14
+ 8741 7c1a 415F     		popq	%r15
+ 8742 7c1c C9       		leave
+ 8743 7c1d C3       		ret
+ 8744              		.cfi_endproc
+ 8745              	.LFE563:
+ 8746              		.size	KAESBlockCipherVecKeyExpansion128, .-KAESBlockCipherVecKeyExpansion128
+ 8747              		.type	KAESBlockCipherVecKeyExpansion192, @function
+ 8748              	KAESBlockCipherVecKeyExpansion192:
+ 8749              	.LFB564:
+1768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8750              		.loc 2 1768 0
+ 8751              		.cfi_startproc
+ 8752 7c1e 55       		pushq	%rbp
+ 8753              	.LCFI4:
+ 8754              		.cfi_def_cfa_offset 16
+ 8755 7c1f 4889E5   		movq	%rsp, %rbp
+ 8756              		.cfi_offset 6, -16
+ 8757              	.LCFI5:
+ 8758              		.cfi_def_cfa_register 6
+ 8759 7c22 4157     		pushq	%r15
+ 8760 7c24 4156     		pushq	%r14
+ 8761 7c26 4155     		pushq	%r13
+ 8762 7c28 4154     		pushq	%r12
+ 8763 7c2a 53       		pushq	%rbx
+ 8764 7c2b 4881ECB8 		subq	$6840, %rsp
+ 8764      1A0000
+ 8765 7c32 4889BD88 		movq	%rdi, -6264(%rbp)
+ 8765      E7FFFF
+ 8766 7c39 4889B580 		movq	%rsi, -6272(%rbp)
+ 8766      E7FFFF
+1768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 8767              		.loc 2 1768 0
+ 8768 7c40 488B8580 		movq	-6272(%rbp), %rax
+ 8768      E7FFFF
+ 8769 7c47 48898540 		movq	%rax, -4032(%rbp)
+ 8769      F0FFFF
+ 8770              	.LBB1210:
+ 8771              	.LBB1211:
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     memmove (&u.bytes, ain, sizeof (u));
+ 8772              		.loc 2 134 0
+ 8773 7c4e 488B8D40 		movq	-4032(%rbp), %rcx
+ 8773      F0FFFF
+ 8774 7c55 488D8590 		leaq	-6256(%rbp), %rax
+ 8774      E7FFFF
+ 8775 7c5c BA100000 		movl	$16, %edx
+ 8775      00
+ 8776 7c61 4889CE   		movq	%rcx, %rsi
+ 8777 7c64 4889C7   		movq	%rax, %rdi
+ 8778              		.cfi_offset 3, -56
+ 8779              		.cfi_offset 12, -48
+ 8780              		.cfi_offset 13, -40
+ 8781              		.cfi_offset 14, -32
+ 8782              		.cfi_offset 15, -24
+ 8783 7c67 E8000000 		call	memmove at PLT
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 287
+
+
+ 8783      00
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 8784              		.loc 2 135 0
+ 8785 7c6c F30F6F85 		movdqu	-6256(%rbp), %xmm0
+ 8785      90E7FFFF 
+ 8786              	.LBE1211:
+ 8787              	.LBE1210:
+1779:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(StateIn) (key);              /* k0    : k1    : k2     : k3           */
+ 8788              		.loc 2 1779 0
+ 8789 7c74 660F7F85 		movdqa	%xmm0, -6800(%rbp)
+ 8789      70E5FFFF 
+1780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateIn) (key+8);            /* k2    : k3    : k4     : k5           */
+ 8790              		.loc 2 1780 0
+ 8791 7c7c 488B8580 		movq	-6272(%rbp), %rax
+ 8791      E7FFFF
+ 8792 7c83 4883C008 		addq	$8, %rax
+ 8793 7c87 48898548 		movq	%rax, -4024(%rbp)
+ 8793      F0FFFF
+ 8794              	.LBB1212:
+ 8795              	.LBB1213:
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     memmove (&u.bytes, ain, sizeof (u));
+ 8796              		.loc 2 134 0
+ 8797 7c8e 488B8D48 		movq	-4024(%rbp), %rcx
+ 8797      F0FFFF
+ 8798 7c95 488D85A0 		leaq	-6240(%rbp), %rax
+ 8798      E7FFFF
+ 8799 7c9c BA100000 		movl	$16, %edx
+ 8799      00
+ 8800 7ca1 4889CE   		movq	%rcx, %rsi
+ 8801 7ca4 4889C7   		movq	%rax, %rdi
+ 8802 7ca7 E8000000 		call	memmove at PLT
+ 8802      00
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 8803              		.loc 2 135 0
+ 8804 7cac F30F6F85 		movdqu	-6240(%rbp), %xmm0
+ 8804      A0E7FFFF 
+ 8805              	.LBE1213:
+ 8806              	.LBE1212:
+1780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateIn) (key+8);            /* k2    : k3    : k4     : k5           */
+ 8807              		.loc 2 1780 0
+ 8808 7cb4 660F7F85 		movdqa	%xmm0, -6784(%rbp)
+ 8808      80E5FFFF 
+ 8809 7cbc 660F6F85 		movdqa	-6784(%rbp), %xmm0
+ 8809      80E5FFFF 
+ 8810 7cc4 F30F7F85 		movdqu	%xmm0, -4016(%rbp)
+ 8810      50F0FFFF 
+ 8811              	.LBB1214:
+ 8812              	.LBB1215:
+1305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 8813              		.loc 2 1305 0
+ 8814 7ccc F30F6F85 		movdqu	-4016(%rbp), %xmm0
+ 8814      50F0FFFF 
+ 8815 7cd4 F30F7F85 		movdqu	%xmm0, -6224(%rbp)
+ 8815      B0E7FFFF 
+1306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[2];
+ 8816              		.loc 2 1306 0
+ 8817 7cdc 8B85B8E7 		movl	-6216(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 288
+
+
+ 8817      FFFF
+ 8818 7ce2 8985B0E7 		movl	%eax, -6224(%rbp)
+ 8818      FFFF
+1307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 8819              		.loc 2 1307 0
+ 8820 7ce8 8B85BCE7 		movl	-6212(%rbp), %eax
+ 8820      FFFF
+ 8821 7cee 8985B4E7 		movl	%eax, -6220(%rbp)
+ 8821      FFFF
+1308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = 0;
+ 8822              		.loc 2 1308 0
+ 8823 7cf4 C785B8E7 		movl	$0, -6216(%rbp)
+ 8823      FFFF0000 
+ 8823      0000
+1309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = 0;
+ 8824              		.loc 2 1309 0
+ 8825 7cfe C785BCE7 		movl	$0, -6212(%rbp)
+ 8825      FFFF0000 
+ 8825      0000
+1310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 8826              		.loc 2 1310 0
+ 8827 7d08 F30F6F85 		movdqu	-6224(%rbp), %xmm0
+ 8827      B0E7FFFF 
+ 8828              	.LBE1215:
+ 8829              	.LBE1214:
+1781:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateShiftRight64) (v1);     /* k4    : k5    : 0      : 0            */
+ 8830              		.loc 2 1781 0
+ 8831 7d10 660F7F85 		movdqa	%xmm0, -6784(%rbp)
+ 8831      80E5FFFF 
+1783:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[0] = v0; /* K0:K1:K2:K3 */
+ 8832              		.loc 2 1783 0
+ 8833 7d18 488B8588 		movq	-6264(%rbp), %rax
+ 8833      E7FFFF
+ 8834 7d1f 660F6F85 		movdqa	-6800(%rbp), %xmm0
+ 8834      70E5FFFF 
+ 8835 7d27 660F7F00 		movdqa	%xmm0, (%rax)
+1788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 8836              		.loc 2 1788 0
+ 8837 7d2b 660F6F85 		movdqa	-6784(%rbp), %xmm0
+ 8837      80E5FFFF 
+ 8838 7d33 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 8838      C0E5FFFF 
+ 8839 7d3b 660F6F85 		movdqa	-6720(%rbp), %xmm0
+ 8839      C0E5FFFF 
+ 8840 7d43 F30F7F85 		movdqu	%xmm0, -3984(%rbp)
+ 8840      70F0FFFF 
+ 8841              	.LBB1216:
+ 8842              	.LBB1217:
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rconw = (AESWord)(AESByte)rcon;
+ 8843              		.loc 2 1629 0
+ 8844 7d4b B8010000 		movl	$1, %eax
+ 8844      00
+ 8845 7d50 0FB6C0   		movzbl	%al, %eax
+ 8846 7d53 898590F0 		movl	%eax, -3952(%rbp)
+ 8846      FFFF
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 8847              		.loc 2 1630 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 289
+
+
+ 8848 7d59 F30F6F85 		movdqu	-3984(%rbp), %xmm0
+ 8848      70F0FFFF 
+ 8849 7d61 F30F7F85 		movdqu	%xmm0, -6192(%rbp)
+ 8849      D0E7FFFF 
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[1]);
+ 8850              		.loc 2 1631 0
+ 8851 7d69 8B85D4E7 		movl	-6188(%rbp), %eax
+ 8851      FFFF
+ 8852 7d6f 898594F0 		movl	%eax, -3948(%rbp)
+ 8852      FFFF
+ 8853              	.LBB1218:
+ 8854              	.LBB1219:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 8855              		.loc 2 740 0
+ 8856 7d75 8B8594F0 		movl	-3948(%rbp), %eax
+ 8856      FFFF
+ 8857 7d7b 8985C0E7 		movl	%eax, -6208(%rbp)
+ 8857      FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 8858              		.loc 2 741 0
+ 8859 7d81 C78598F0 		movl	$0, -3944(%rbp)
+ 8859      FFFF0000 
+ 8859      0000
+ 8860 7d8b EB36     		jmp	.L226
+ 8861              	.L227:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 8862              		.loc 2 742 0
+ 8863 7d8d 8B8D98F0 		movl	-3944(%rbp), %ecx
+ 8863      FFFF
+ 8864 7d93 8B8598F0 		movl	-3944(%rbp), %eax
+ 8864      FFFF
+ 8865 7d99 89C0     		mov	%eax, %eax
+ 8866 7d9b 0FB68405 		movzbl	-6208(%rbp,%rax), %eax
+ 8866      C0E7FFFF 
+ 8867 7da3 0FB6C0   		movzbl	%al, %eax
+ 8868 7da6 89C2     		mov	%eax, %edx
+ 8869 7da8 488D0500 		leaq	KAESBlockCipherVecRijndaelSBox(%rip), %rax
+ 8869      000000
+ 8870 7daf 0FB61402 		movzbl	(%rdx,%rax), %edx
+ 8871 7db3 89C8     		mov	%ecx, %eax
+ 8872 7db5 889405C0 		movb	%dl, -6208(%rbp,%rax)
+ 8872      E7FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 8873              		.loc 2 741 0
+ 8874 7dbc 838598F0 		addl	$1, -3944(%rbp)
+ 8874      FFFF01
+ 8875              	.L226:
+ 8876 7dc3 83BD98F0 		cmpl	$3, -3944(%rbp)
+ 8876      FFFF03
+ 8877 7dca 76C1     		jbe	.L227
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 8878              		.loc 2 743 0
+ 8879 7dcc 8B85C0E7 		movl	-6208(%rbp), %eax
+ 8879      FFFF
+ 8880              	.LBE1219:
+ 8881              	.LBE1218:
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[1]);
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 290
+
+
+ 8882              		.loc 2 1631 0
+ 8883 7dd2 89858CF0 		movl	%eax, -3956(%rbp)
+ 8883      FFFF
+ 8884 7dd8 8B858CF0 		movl	-3956(%rbp), %eax
+ 8884      FFFF
+ 8885 7dde 89859CF0 		movl	%eax, -3940(%rbp)
+ 8885      FFFF
+ 8886              	.LBB1220:
+ 8887              	.LBB1221:
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (w >> 8) | (w << 24);
+ 8888              		.loc 2 1196 0
+ 8889 7de4 8B859CF0 		movl	-3940(%rbp), %eax
+ 8889      FFFF
+ 8890 7dea C1C808   		rorl	$8, %eax
+ 8891              	.LBE1221:
+ 8892              	.LBE1220:
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(RotWord)(temp);
+ 8893              		.loc 2 1632 0
+ 8894 7ded 89858CF0 		movl	%eax, -3956(%rbp)
+ 8894      FFFF
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp ^= rconw;
+ 8895              		.loc 2 1633 0
+ 8896 7df3 8B8590F0 		movl	-3952(%rbp), %eax
+ 8896      FFFF
+ 8897 7df9 31858CF0 		xorl	%eax, -3956(%rbp)
+ 8897      FFFF
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 8898              		.loc 2 1635 0
+ 8899 7dff 8B858CF0 		movl	-3956(%rbp), %eax
+ 8899      FFFF
+ 8900 7e05 8985DCE7 		movl	%eax, -6180(%rbp)
+ 8900      FFFF
+ 8901 7e0b 8B85DCE7 		movl	-6180(%rbp), %eax
+ 8901      FFFF
+ 8902 7e11 8985D8E7 		movl	%eax, -6184(%rbp)
+ 8902      FFFF
+ 8903 7e17 8B85D8E7 		movl	-6184(%rbp), %eax
+ 8903      FFFF
+ 8904 7e1d 8985D4E7 		movl	%eax, -6188(%rbp)
+ 8904      FFFF
+ 8905 7e23 8B85D4E7 		movl	-6188(%rbp), %eax
+ 8905      FFFF
+ 8906 7e29 8985D0E7 		movl	%eax, -6192(%rbp)
+ 8906      FFFF
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 8907              		.loc 2 1636 0
+ 8908 7e2f F30F6F85 		movdqu	-6192(%rbp), %xmm0
+ 8908      D0E7FFFF 
+ 8909              	.LBE1217:
+ 8910              	.LBE1216:
+1788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 8911              		.loc 2 1788 0
+ 8912 7e37 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 8912      C0E5FFFF 
+ 8913 7e3f 660F6F85 		movdqa	-6800(%rbp), %xmm0
+ 8913      70E5FFFF 
+ 8914 7e47 F30F7F85 		movdqu	%xmm0, -3936(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 291
+
+
+ 8914      A0F0FFFF 
+ 8915              	.LBB1222:
+ 8916              	.LBB1223:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 8917              		.loc 2 1565 0
+ 8918 7e4f F30F6F85 		movdqu	-3936(%rbp), %xmm0
+ 8918      A0F0FFFF 
+ 8919 7e57 660F7F85 		movdqa	%xmm0, -6704(%rbp)
+ 8919      D0E5FFFF 
+ 8920 7e5f 660F6F85 		movdqa	-6704(%rbp), %xmm0
+ 8920      D0E5FFFF 
+ 8921 7e67 F30F7F85 		movdqu	%xmm0, -3920(%rbp)
+ 8921      B0F0FFFF 
+ 8922              	.LBB1224:
+ 8923              	.LBB1225:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 8924              		.loc 2 1282 0
+ 8925 7e6f F30F6F85 		movdqu	-3920(%rbp), %xmm0
+ 8925      B0F0FFFF 
+ 8926 7e77 F30F7F85 		movdqu	%xmm0, -6176(%rbp)
+ 8926      E0E7FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 8927              		.loc 2 1283 0
+ 8928 7e7f 8B85E8E7 		movl	-6168(%rbp), %eax
+ 8928      FFFF
+ 8929 7e85 8985ECE7 		movl	%eax, -6164(%rbp)
+ 8929      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 8930              		.loc 2 1284 0
+ 8931 7e8b 8B85E4E7 		movl	-6172(%rbp), %eax
+ 8931      FFFF
+ 8932 7e91 8985E8E7 		movl	%eax, -6168(%rbp)
+ 8932      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 8933              		.loc 2 1285 0
+ 8934 7e97 8B85E0E7 		movl	-6176(%rbp), %eax
+ 8934      FFFF
+ 8935 7e9d 8985E4E7 		movl	%eax, -6172(%rbp)
+ 8935      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 8936              		.loc 2 1286 0
+ 8937 7ea3 C785E0E7 		movl	$0, -6176(%rbp)
+ 8937      FFFF0000 
+ 8937      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 8938              		.loc 2 1287 0
+ 8939 7ead F30F6F85 		movdqu	-6176(%rbp), %xmm0
+ 8939      E0E7FFFF 
+ 8940              	.LBE1225:
+ 8941              	.LBE1224:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8942              		.loc 2 1567 0
+ 8943 7eb5 660F7F85 		movdqa	%xmm0, -6704(%rbp)
+ 8943      D0E5FFFF 
+ 8944 7ebd 660F6F85 		movdqa	-6704(%rbp), %xmm0
+ 8944      D0E5FFFF 
+ 8945 7ec5 660FEF85 		pxor	-3936(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 292
+
+
+ 8945      A0F0FFFF 
+ 8946 7ecd F30F7F85 		movdqu	%xmm0, -3936(%rbp)
+ 8946      A0F0FFFF 
+ 8947 7ed5 660F6F85 		movdqa	-6704(%rbp), %xmm0
+ 8947      D0E5FFFF 
+ 8948 7edd F30F7F85 		movdqu	%xmm0, -3904(%rbp)
+ 8948      C0F0FFFF 
+ 8949              	.LBB1226:
+ 8950              	.LBB1227:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 8951              		.loc 2 1282 0
+ 8952 7ee5 F30F6F85 		movdqu	-3904(%rbp), %xmm0
+ 8952      C0F0FFFF 
+ 8953 7eed F30F7F85 		movdqu	%xmm0, -6160(%rbp)
+ 8953      F0E7FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 8954              		.loc 2 1283 0
+ 8955 7ef5 8B85F8E7 		movl	-6152(%rbp), %eax
+ 8955      FFFF
+ 8956 7efb 8985FCE7 		movl	%eax, -6148(%rbp)
+ 8956      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 8957              		.loc 2 1284 0
+ 8958 7f01 8B85F4E7 		movl	-6156(%rbp), %eax
+ 8958      FFFF
+ 8959 7f07 8985F8E7 		movl	%eax, -6152(%rbp)
+ 8959      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 8960              		.loc 2 1285 0
+ 8961 7f0d 8B85F0E7 		movl	-6160(%rbp), %eax
+ 8961      FFFF
+ 8962 7f13 8985F4E7 		movl	%eax, -6156(%rbp)
+ 8962      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 8963              		.loc 2 1286 0
+ 8964 7f19 C785F0E7 		movl	$0, -6160(%rbp)
+ 8964      FFFF0000 
+ 8964      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 8965              		.loc 2 1287 0
+ 8966 7f23 F30F6F85 		movdqu	-6160(%rbp), %xmm0
+ 8966      F0E7FFFF 
+ 8967              	.LBE1227:
+ 8968              	.LBE1226:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8969              		.loc 2 1568 0
+ 8970 7f2b 660F7F85 		movdqa	%xmm0, -6704(%rbp)
+ 8970      D0E5FFFF 
+ 8971 7f33 660F6F85 		movdqa	-6704(%rbp), %xmm0
+ 8971      D0E5FFFF 
+ 8972 7f3b 660FEF85 		pxor	-3936(%rbp), %xmm0
+ 8972      A0F0FFFF 
+ 8973 7f43 F30F7F85 		movdqu	%xmm0, -3936(%rbp)
+ 8973      A0F0FFFF 
+ 8974 7f4b 660F6F85 		movdqa	-6704(%rbp), %xmm0
+ 8974      D0E5FFFF 
+ 8975 7f53 F30F7F85 		movdqu	%xmm0, -3888(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 293
+
+
+ 8975      D0F0FFFF 
+ 8976              	.LBB1228:
+ 8977              	.LBB1229:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 8978              		.loc 2 1282 0
+ 8979 7f5b F30F6F85 		movdqu	-3888(%rbp), %xmm0
+ 8979      D0F0FFFF 
+ 8980 7f63 F30F7F85 		movdqu	%xmm0, -6144(%rbp)
+ 8980      00E8FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 8981              		.loc 2 1283 0
+ 8982 7f6b 8B8508E8 		movl	-6136(%rbp), %eax
+ 8982      FFFF
+ 8983 7f71 89850CE8 		movl	%eax, -6132(%rbp)
+ 8983      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 8984              		.loc 2 1284 0
+ 8985 7f77 8B8504E8 		movl	-6140(%rbp), %eax
+ 8985      FFFF
+ 8986 7f7d 898508E8 		movl	%eax, -6136(%rbp)
+ 8986      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 8987              		.loc 2 1285 0
+ 8988 7f83 8B8500E8 		movl	-6144(%rbp), %eax
+ 8988      FFFF
+ 8989 7f89 898504E8 		movl	%eax, -6140(%rbp)
+ 8989      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 8990              		.loc 2 1286 0
+ 8991 7f8f C78500E8 		movl	$0, -6144(%rbp)
+ 8991      FFFF0000 
+ 8991      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 8992              		.loc 2 1287 0
+ 8993 7f99 F30F6F85 		movdqu	-6144(%rbp), %xmm0
+ 8993      00E8FFFF 
+ 8994              	.LBE1229:
+ 8995              	.LBE1228:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8996              		.loc 2 1569 0
+ 8997 7fa1 660F7F85 		movdqa	%xmm0, -6704(%rbp)
+ 8997      D0E5FFFF 
+ 8998 7fa9 660F6F85 		movdqa	-6704(%rbp), %xmm0
+ 8998      D0E5FFFF 
+ 8999 7fb1 660FEF85 		pxor	-3936(%rbp), %xmm0
+ 8999      A0F0FFFF 
+ 9000 7fb9 F30F7F85 		movdqu	%xmm0, -3936(%rbp)
+ 9000      A0F0FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 9001              		.loc 2 1571 0
+ 9002 7fc1 F30F6F85 		movdqu	-3936(%rbp), %xmm0
+ 9002      A0F0FFFF 
+ 9003              	.LBE1223:
+ 9004              	.LBE1222:
+1790:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3  = AESBCMEMBER(ShiftXorColumns) (v0);       /* k0    : k0^k1 :k0^k1^k2:k0^k1^k2^k3   */
+ 9005              		.loc 2 1790 0
+ 9006 7fc9 660F7F85 		movdqa	%xmm0, -6752(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 294
+
+
+ 9006      A0E5FFFF 
+1791:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3 ^= k;                                       /* k6    : k7    : k8     : k9           */
+ 9007              		.loc 2 1791 0
+ 9008 7fd1 660F6F85 		movdqa	-6752(%rbp), %xmm0
+ 9008      A0E5FFFF 
+ 9009 7fd9 660FEF85 		pxor	-6720(%rbp), %xmm0
+ 9009      C0E5FFFF 
+ 9010 7fe1 660F7F85 		movdqa	%xmm0, -6752(%rbp)
+ 9010      A0E5FFFF 
+ 9011 7fe9 660F6F85 		movdqa	-6784(%rbp), %xmm0
+ 9011      80E5FFFF 
+ 9012 7ff1 F30F7F85 		movdqu	%xmm0, -3872(%rbp)
+ 9012      E0F0FFFF 
+ 9013              	.LBB1230:
+ 9014              	.LBB1231:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 9015              		.loc 2 1565 0
+ 9016 7ff9 F30F6F85 		movdqu	-3872(%rbp), %xmm0
+ 9016      E0F0FFFF 
+ 9017 8001 660F7F85 		movdqa	%xmm0, -6688(%rbp)
+ 9017      E0E5FFFF 
+ 9018 8009 660F6F85 		movdqa	-6688(%rbp), %xmm0
+ 9018      E0E5FFFF 
+ 9019 8011 F30F7F85 		movdqu	%xmm0, -3856(%rbp)
+ 9019      F0F0FFFF 
+ 9020              	.LBB1232:
+ 9021              	.LBB1233:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 9022              		.loc 2 1282 0
+ 9023 8019 F30F6F85 		movdqu	-3856(%rbp), %xmm0
+ 9023      F0F0FFFF 
+ 9024 8021 F30F7F85 		movdqu	%xmm0, -6128(%rbp)
+ 9024      10E8FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 9025              		.loc 2 1283 0
+ 9026 8029 8B8518E8 		movl	-6120(%rbp), %eax
+ 9026      FFFF
+ 9027 802f 89851CE8 		movl	%eax, -6116(%rbp)
+ 9027      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 9028              		.loc 2 1284 0
+ 9029 8035 8B8514E8 		movl	-6124(%rbp), %eax
+ 9029      FFFF
+ 9030 803b 898518E8 		movl	%eax, -6120(%rbp)
+ 9030      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 9031              		.loc 2 1285 0
+ 9032 8041 8B8510E8 		movl	-6128(%rbp), %eax
+ 9032      FFFF
+ 9033 8047 898514E8 		movl	%eax, -6124(%rbp)
+ 9033      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 9034              		.loc 2 1286 0
+ 9035 804d C78510E8 		movl	$0, -6128(%rbp)
+ 9035      FFFF0000 
+ 9035      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 295
+
+
+ 9036              		.loc 2 1287 0
+ 9037 8057 F30F6F85 		movdqu	-6128(%rbp), %xmm0
+ 9037      10E8FFFF 
+ 9038              	.LBE1233:
+ 9039              	.LBE1232:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9040              		.loc 2 1567 0
+ 9041 805f 660F7F85 		movdqa	%xmm0, -6688(%rbp)
+ 9041      E0E5FFFF 
+ 9042 8067 660F6F85 		movdqa	-6688(%rbp), %xmm0
+ 9042      E0E5FFFF 
+ 9043 806f 660FEF85 		pxor	-3872(%rbp), %xmm0
+ 9043      E0F0FFFF 
+ 9044 8077 F30F7F85 		movdqu	%xmm0, -3872(%rbp)
+ 9044      E0F0FFFF 
+ 9045 807f 660F6F85 		movdqa	-6688(%rbp), %xmm0
+ 9045      E0E5FFFF 
+ 9046 8087 F30F7F85 		movdqu	%xmm0, -3840(%rbp)
+ 9046      00F1FFFF 
+ 9047              	.LBB1234:
+ 9048              	.LBB1235:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 9049              		.loc 2 1282 0
+ 9050 808f F30F6F85 		movdqu	-3840(%rbp), %xmm0
+ 9050      00F1FFFF 
+ 9051 8097 F30F7F85 		movdqu	%xmm0, -6112(%rbp)
+ 9051      20E8FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 9052              		.loc 2 1283 0
+ 9053 809f 8B8528E8 		movl	-6104(%rbp), %eax
+ 9053      FFFF
+ 9054 80a5 89852CE8 		movl	%eax, -6100(%rbp)
+ 9054      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 9055              		.loc 2 1284 0
+ 9056 80ab 8B8524E8 		movl	-6108(%rbp), %eax
+ 9056      FFFF
+ 9057 80b1 898528E8 		movl	%eax, -6104(%rbp)
+ 9057      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 9058              		.loc 2 1285 0
+ 9059 80b7 8B8520E8 		movl	-6112(%rbp), %eax
+ 9059      FFFF
+ 9060 80bd 898524E8 		movl	%eax, -6108(%rbp)
+ 9060      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 9061              		.loc 2 1286 0
+ 9062 80c3 C78520E8 		movl	$0, -6112(%rbp)
+ 9062      FFFF0000 
+ 9062      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 9063              		.loc 2 1287 0
+ 9064 80cd F30F6F85 		movdqu	-6112(%rbp), %xmm0
+ 9064      20E8FFFF 
+ 9065              	.LBE1235:
+ 9066              	.LBE1234:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 296
+
+
+ 9067              		.loc 2 1568 0
+ 9068 80d5 660F7F85 		movdqa	%xmm0, -6688(%rbp)
+ 9068      E0E5FFFF 
+ 9069 80dd 660F6F85 		movdqa	-6688(%rbp), %xmm0
+ 9069      E0E5FFFF 
+ 9070 80e5 660FEF85 		pxor	-3872(%rbp), %xmm0
+ 9070      E0F0FFFF 
+ 9071 80ed F30F7F85 		movdqu	%xmm0, -3872(%rbp)
+ 9071      E0F0FFFF 
+ 9072 80f5 660F6F85 		movdqa	-6688(%rbp), %xmm0
+ 9072      E0E5FFFF 
+ 9073 80fd F30F7F85 		movdqu	%xmm0, -3824(%rbp)
+ 9073      10F1FFFF 
+ 9074              	.LBB1236:
+ 9075              	.LBB1237:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 9076              		.loc 2 1282 0
+ 9077 8105 F30F6F85 		movdqu	-3824(%rbp), %xmm0
+ 9077      10F1FFFF 
+ 9078 810d F30F7F85 		movdqu	%xmm0, -6096(%rbp)
+ 9078      30E8FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 9079              		.loc 2 1283 0
+ 9080 8115 8B8538E8 		movl	-6088(%rbp), %eax
+ 9080      FFFF
+ 9081 811b 89853CE8 		movl	%eax, -6084(%rbp)
+ 9081      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 9082              		.loc 2 1284 0
+ 9083 8121 8B8534E8 		movl	-6092(%rbp), %eax
+ 9083      FFFF
+ 9084 8127 898538E8 		movl	%eax, -6088(%rbp)
+ 9084      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 9085              		.loc 2 1285 0
+ 9086 812d 8B8530E8 		movl	-6096(%rbp), %eax
+ 9086      FFFF
+ 9087 8133 898534E8 		movl	%eax, -6092(%rbp)
+ 9087      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 9088              		.loc 2 1286 0
+ 9089 8139 C78530E8 		movl	$0, -6096(%rbp)
+ 9089      FFFF0000 
+ 9089      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 9090              		.loc 2 1287 0
+ 9091 8143 F30F6F85 		movdqu	-6096(%rbp), %xmm0
+ 9091      30E8FFFF 
+ 9092              	.LBE1237:
+ 9093              	.LBE1236:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9094              		.loc 2 1569 0
+ 9095 814b 660F7F85 		movdqa	%xmm0, -6688(%rbp)
+ 9095      E0E5FFFF 
+ 9096 8153 660F6F85 		movdqa	-6688(%rbp), %xmm0
+ 9096      E0E5FFFF 
+ 9097 815b 660FEF85 		pxor	-3872(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 297
+
+
+ 9097      E0F0FFFF 
+ 9098 8163 F30F7F85 		movdqu	%xmm0, -3872(%rbp)
+ 9098      E0F0FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 9099              		.loc 2 1571 0
+ 9100 816b F30F6F85 		movdqu	-3872(%rbp), %xmm0
+ 9100      E0F0FFFF 
+ 9101              	.LBE1231:
+ 9102              	.LBE1230:
+1792:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4  = AESBCMEMBER(ShiftXorColumns) (v1);       /* k4    : k4^k5 : k4^k5  : k4^k5        */
+ 9103              		.loc 2 1792 0
+ 9104 8173 660F7F85 		movdqa	%xmm0, -6736(%rbp)
+ 9104      B0E5FFFF 
+1793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k9    : k9    : k9     : k9           */
+ 9105              		.loc 2 1793 0
+ 9106 817b 660F6F85 		movdqa	-6752(%rbp), %xmm0
+ 9106      A0E5FFFF 
+ 9107 8183 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 9107      C0E5FFFF 
+ 9108 818b 660F6F85 		movdqa	-6720(%rbp), %xmm0
+ 9108      C0E5FFFF 
+ 9109 8193 F30F7F85 		movdqu	%xmm0, -3808(%rbp)
+ 9109      20F1FFFF 
+ 9110              	.LBB1238:
+ 9111              	.LBB1239:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 9112              		.loc 2 1357 0
+ 9113 819b F30F6F85 		movdqu	-3808(%rbp), %xmm0
+ 9113      20F1FFFF 
+ 9114 81a3 F30F7F85 		movdqu	%xmm0, -6080(%rbp)
+ 9114      40E8FFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 9115              		.loc 2 1358 0
+ 9116 81ab 8B854CE8 		movl	-6068(%rbp), %eax
+ 9116      FFFF
+ 9117 81b1 898548E8 		movl	%eax, -6072(%rbp)
+ 9117      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 9118              		.loc 2 1359 0
+ 9119 81b7 8B854CE8 		movl	-6068(%rbp), %eax
+ 9119      FFFF
+ 9120 81bd 898544E8 		movl	%eax, -6076(%rbp)
+ 9120      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 9121              		.loc 2 1360 0
+ 9122 81c3 8B854CE8 		movl	-6068(%rbp), %eax
+ 9122      FFFF
+ 9123 81c9 898540E8 		movl	%eax, -6080(%rbp)
+ 9123      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 9124              		.loc 2 1361 0
+ 9125 81cf F30F6F85 		movdqu	-6080(%rbp), %xmm0
+ 9125      40E8FFFF 
+ 9126              	.LBE1239:
+ 9127              	.LBE1238:
+1793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k9    : k9    : k9     : k9           */
+ 9128              		.loc 2 1793 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 298
+
+
+ 9129 81d7 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 9129      C0E5FFFF 
+1794:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4 ^= k;                                       /* k10   : k11   : k10    : k11          */
+ 9130              		.loc 2 1794 0
+ 9131 81df 660F6F85 		movdqa	-6736(%rbp), %xmm0
+ 9131      B0E5FFFF 
+ 9132 81e7 660FEF85 		pxor	-6720(%rbp), %xmm0
+ 9132      C0E5FFFF 
+ 9133 81ef 660F7F85 		movdqa	%xmm0, -6736(%rbp)
+ 9133      B0E5FFFF 
+ 9134 81f7 660F6F85 		movdqa	-6784(%rbp), %xmm0
+ 9134      80E5FFFF 
+ 9135 81ff F30F7F85 		movdqu	%xmm0, -3776(%rbp)
+ 9135      40F1FFFF 
+ 9136 8207 660F6F85 		movdqa	-6752(%rbp), %xmm0
+ 9136      A0E5FFFF 
+ 9137 820f F30F7F85 		movdqu	%xmm0, -3792(%rbp)
+ 9137      30F1FFFF 
+ 9138              	.LBB1240:
+ 9139              	.LBB1241:
+1471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.state = w;
+ 9140              		.loc 2 1471 0
+ 9141 8217 F30F6F85 		movdqu	-3776(%rbp), %xmm0
+ 9141      40F1FFFF 
+ 9142 821f F30F7F85 		movdqu	%xmm0, -6048(%rbp)
+ 9142      60E8FFFF 
+1472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     xx.state = x;
+ 9143              		.loc 2 1472 0
+ 9144 8227 F30F6F85 		movdqu	-3792(%rbp), %xmm0
+ 9144      30F1FFFF 
+ 9145 822f F30F7F85 		movdqu	%xmm0, -6064(%rbp)
+ 9145      50E8FFFF 
+1474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[2] = xx.columns[0];
+ 9146              		.loc 2 1474 0
+ 9147 8237 8B8550E8 		movl	-6064(%rbp), %eax
+ 9147      FFFF
+ 9148 823d 898568E8 		movl	%eax, -6040(%rbp)
+ 9148      FFFF
+1475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[3] = xx.columns[1];
+ 9149              		.loc 2 1475 0
+ 9150 8243 8B8554E8 		movl	-6060(%rbp), %eax
+ 9150      FFFF
+ 9151 8249 89856CE8 		movl	%eax, -6036(%rbp)
+ 9151      FFFF
+1477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return ww.state;
+ 9152              		.loc 2 1477 0
+ 9153 824f F30F6F85 		movdqu	-6048(%rbp), %xmm0
+ 9153      60E8FFFF 
+ 9154              	.LBE1241:
+ 9155              	.LBE1240:
+1795:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateMerge1) (v1,v3);        /* k4    : k5    : k6     : k7           */
+ 9156              		.loc 2 1795 0
+ 9157 8257 660F7F85 		movdqa	%xmm0, -6784(%rbp)
+ 9157      80E5FFFF 
+1796:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[1] = v1; /* K4:K5:K6:K7 */
+ 9158              		.loc 2 1796 0
+ 9159 825f 488B8588 		movq	-6264(%rbp), %rax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 299
+
+
+ 9159      E7FFFF
+ 9160 8266 4883C010 		addq	$16, %rax
+ 9161 826a 660F6F85 		movdqa	-6784(%rbp), %xmm0
+ 9161      80E5FFFF 
+ 9162 8272 660F7F00 		movdqa	%xmm0, (%rax)
+ 9163 8276 660F6F85 		movdqa	-6752(%rbp), %xmm0
+ 9163      A0E5FFFF 
+ 9164 827e F30F7F85 		movdqu	%xmm0, -3744(%rbp)
+ 9164      60F1FFFF 
+ 9165 8286 660F6F85 		movdqa	-6736(%rbp), %xmm0
+ 9165      B0E5FFFF 
+ 9166 828e F30F7F85 		movdqu	%xmm0, -3760(%rbp)
+ 9166      50F1FFFF 
+ 9167              	.LBB1242:
+ 9168              	.LBB1243:
+1503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.state = w;
+ 9169              		.loc 2 1503 0
+ 9170 8296 F30F6F85 		movdqu	-3744(%rbp), %xmm0
+ 9170      60F1FFFF 
+ 9171 829e F30F7F85 		movdqu	%xmm0, -6016(%rbp)
+ 9171      80E8FFFF 
+1504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     xx.state = x;
+ 9172              		.loc 2 1504 0
+ 9173 82a6 F30F6F85 		movdqu	-3760(%rbp), %xmm0
+ 9173      50F1FFFF 
+ 9174 82ae F30F7F85 		movdqu	%xmm0, -6032(%rbp)
+ 9174      70E8FFFF 
+1506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[0] = ww.columns[2];
+ 9175              		.loc 2 1506 0
+ 9176 82b6 8B8588E8 		movl	-6008(%rbp), %eax
+ 9176      FFFF
+ 9177 82bc 898580E8 		movl	%eax, -6016(%rbp)
+ 9177      FFFF
+1507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[1] = ww.columns[3];
+ 9178              		.loc 2 1507 0
+ 9179 82c2 8B858CE8 		movl	-6004(%rbp), %eax
+ 9179      FFFF
+ 9180 82c8 898584E8 		movl	%eax, -6012(%rbp)
+ 9180      FFFF
+1508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[2] = xx.columns[0];
+ 9181              		.loc 2 1508 0
+ 9182 82ce 8B8570E8 		movl	-6032(%rbp), %eax
+ 9182      FFFF
+ 9183 82d4 898588E8 		movl	%eax, -6008(%rbp)
+ 9183      FFFF
+1509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[3] = xx.columns[1];
+ 9184              		.loc 2 1509 0
+ 9185 82da 8B8574E8 		movl	-6028(%rbp), %eax
+ 9185      FFFF
+ 9186 82e0 89858CE8 		movl	%eax, -6004(%rbp)
+ 9186      FFFF
+1511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return ww.state;
+ 9187              		.loc 2 1511 0
+ 9188 82e6 F30F6F85 		movdqu	-6016(%rbp), %xmm0
+ 9188      80E8FFFF 
+ 9189              	.LBE1243:
+ 9190              	.LBE1242:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 300
+
+
+1798:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v2  = AESBCMEMBER(StateMerge2) (v3,v4);        /* k8    : k9    : k10    : k11          */
+ 9191              		.loc 2 1798 0
+ 9192 82ee 660F7F85 		movdqa	%xmm0, -6768(%rbp)
+ 9192      90E5FFFF 
+1799:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[2] = v2; /* K8:K9:K10:K11 */
+ 9193              		.loc 2 1799 0
+ 9194 82f6 488B8588 		movq	-6264(%rbp), %rax
+ 9194      E7FFFF
+ 9195 82fd 4883C020 		addq	$32, %rax
+ 9196 8301 660F6F85 		movdqa	-6768(%rbp), %xmm0
+ 9196      90E5FFFF 
+ 9197 8309 660F7F00 		movdqa	%xmm0, (%rax)
+ 9198 830d 660F6F85 		movdqa	-6752(%rbp), %xmm0
+ 9198      A0E5FFFF 
+ 9199 8315 F30F7F85 		movdqu	%xmm0, -3728(%rbp)
+ 9199      70F1FFFF 
+ 9200              	.LBB1244:
+ 9201              	.LBB1245:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 9202              		.loc 2 1565 0
+ 9203 831d F30F6F85 		movdqu	-3728(%rbp), %xmm0
+ 9203      70F1FFFF 
+ 9204 8325 660F7F85 		movdqa	%xmm0, -6672(%rbp)
+ 9204      F0E5FFFF 
+ 9205 832d 660F6F85 		movdqa	-6672(%rbp), %xmm0
+ 9205      F0E5FFFF 
+ 9206 8335 F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 9206      80F1FFFF 
+ 9207              	.LBB1246:
+ 9208              	.LBB1247:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 9209              		.loc 2 1282 0
+ 9210 833d F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 9210      80F1FFFF 
+ 9211 8345 F30F7F85 		movdqu	%xmm0, -6000(%rbp)
+ 9211      90E8FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 9212              		.loc 2 1283 0
+ 9213 834d 8B8598E8 		movl	-5992(%rbp), %eax
+ 9213      FFFF
+ 9214 8353 89859CE8 		movl	%eax, -5988(%rbp)
+ 9214      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 9215              		.loc 2 1284 0
+ 9216 8359 8B8594E8 		movl	-5996(%rbp), %eax
+ 9216      FFFF
+ 9217 835f 898598E8 		movl	%eax, -5992(%rbp)
+ 9217      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 9218              		.loc 2 1285 0
+ 9219 8365 8B8590E8 		movl	-6000(%rbp), %eax
+ 9219      FFFF
+ 9220 836b 898594E8 		movl	%eax, -5996(%rbp)
+ 9220      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 9221              		.loc 2 1286 0
+ 9222 8371 C78590E8 		movl	$0, -6000(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 301
+
+
+ 9222      FFFF0000 
+ 9222      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 9223              		.loc 2 1287 0
+ 9224 837b F30F6F85 		movdqu	-6000(%rbp), %xmm0
+ 9224      90E8FFFF 
+ 9225              	.LBE1247:
+ 9226              	.LBE1246:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9227              		.loc 2 1567 0
+ 9228 8383 660F7F85 		movdqa	%xmm0, -6672(%rbp)
+ 9228      F0E5FFFF 
+ 9229 838b 660F6F85 		movdqa	-6672(%rbp), %xmm0
+ 9229      F0E5FFFF 
+ 9230 8393 660FEF85 		pxor	-3728(%rbp), %xmm0
+ 9230      70F1FFFF 
+ 9231 839b F30F7F85 		movdqu	%xmm0, -3728(%rbp)
+ 9231      70F1FFFF 
+ 9232 83a3 660F6F85 		movdqa	-6672(%rbp), %xmm0
+ 9232      F0E5FFFF 
+ 9233 83ab F30F7F85 		movdqu	%xmm0, -3696(%rbp)
+ 9233      90F1FFFF 
+ 9234              	.LBB1248:
+ 9235              	.LBB1249:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 9236              		.loc 2 1282 0
+ 9237 83b3 F30F6F85 		movdqu	-3696(%rbp), %xmm0
+ 9237      90F1FFFF 
+ 9238 83bb F30F7F85 		movdqu	%xmm0, -5984(%rbp)
+ 9238      A0E8FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 9239              		.loc 2 1283 0
+ 9240 83c3 8B85A8E8 		movl	-5976(%rbp), %eax
+ 9240      FFFF
+ 9241 83c9 8985ACE8 		movl	%eax, -5972(%rbp)
+ 9241      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 9242              		.loc 2 1284 0
+ 9243 83cf 8B85A4E8 		movl	-5980(%rbp), %eax
+ 9243      FFFF
+ 9244 83d5 8985A8E8 		movl	%eax, -5976(%rbp)
+ 9244      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 9245              		.loc 2 1285 0
+ 9246 83db 8B85A0E8 		movl	-5984(%rbp), %eax
+ 9246      FFFF
+ 9247 83e1 8985A4E8 		movl	%eax, -5980(%rbp)
+ 9247      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 9248              		.loc 2 1286 0
+ 9249 83e7 C785A0E8 		movl	$0, -5984(%rbp)
+ 9249      FFFF0000 
+ 9249      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 9250              		.loc 2 1287 0
+ 9251 83f1 F30F6F85 		movdqu	-5984(%rbp), %xmm0
+ 9251      A0E8FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 302
+
+
+ 9252              	.LBE1249:
+ 9253              	.LBE1248:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9254              		.loc 2 1568 0
+ 9255 83f9 660F7F85 		movdqa	%xmm0, -6672(%rbp)
+ 9255      F0E5FFFF 
+ 9256 8401 660F6F85 		movdqa	-6672(%rbp), %xmm0
+ 9256      F0E5FFFF 
+ 9257 8409 660FEF85 		pxor	-3728(%rbp), %xmm0
+ 9257      70F1FFFF 
+ 9258 8411 F30F7F85 		movdqu	%xmm0, -3728(%rbp)
+ 9258      70F1FFFF 
+ 9259 8419 660F6F85 		movdqa	-6672(%rbp), %xmm0
+ 9259      F0E5FFFF 
+ 9260 8421 F30F7F85 		movdqu	%xmm0, -3680(%rbp)
+ 9260      A0F1FFFF 
+ 9261              	.LBB1250:
+ 9262              	.LBB1251:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 9263              		.loc 2 1282 0
+ 9264 8429 F30F6F85 		movdqu	-3680(%rbp), %xmm0
+ 9264      A0F1FFFF 
+ 9265 8431 F30F7F85 		movdqu	%xmm0, -5968(%rbp)
+ 9265      B0E8FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 9266              		.loc 2 1283 0
+ 9267 8439 8B85B8E8 		movl	-5960(%rbp), %eax
+ 9267      FFFF
+ 9268 843f 8985BCE8 		movl	%eax, -5956(%rbp)
+ 9268      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 9269              		.loc 2 1284 0
+ 9270 8445 8B85B4E8 		movl	-5964(%rbp), %eax
+ 9270      FFFF
+ 9271 844b 8985B8E8 		movl	%eax, -5960(%rbp)
+ 9271      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 9272              		.loc 2 1285 0
+ 9273 8451 8B85B0E8 		movl	-5968(%rbp), %eax
+ 9273      FFFF
+ 9274 8457 8985B4E8 		movl	%eax, -5964(%rbp)
+ 9274      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 9275              		.loc 2 1286 0
+ 9276 845d C785B0E8 		movl	$0, -5968(%rbp)
+ 9276      FFFF0000 
+ 9276      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 9277              		.loc 2 1287 0
+ 9278 8467 F30F6F85 		movdqu	-5968(%rbp), %xmm0
+ 9278      B0E8FFFF 
+ 9279              	.LBE1251:
+ 9280              	.LBE1250:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9281              		.loc 2 1569 0
+ 9282 846f 660F7F85 		movdqa	%xmm0, -6672(%rbp)
+ 9282      F0E5FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 303
+
+
+ 9283 8477 660F6F85 		movdqa	-6672(%rbp), %xmm0
+ 9283      F0E5FFFF 
+ 9284 847f 660FEF85 		pxor	-3728(%rbp), %xmm0
+ 9284      70F1FFFF 
+ 9285 8487 F30F7F85 		movdqu	%xmm0, -3728(%rbp)
+ 9285      70F1FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 9286              		.loc 2 1571 0
+ 9287 848f F30F6F85 		movdqu	-3728(%rbp), %xmm0
+ 9287      70F1FFFF 
+ 9288              	.LBE1245:
+ 9289              	.LBE1244:
+1802:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(ShiftXorColumns) (v3);       /* k6    : k6^k7 :k6^k7^k8:k6^k7^k8^k9   */
+ 9290              		.loc 2 1802 0
+ 9291 8497 660F7F85 		movdqa	%xmm0, -6800(%rbp)
+ 9291      70E5FFFF 
+ 9292 849f 660F6F85 		movdqa	-6736(%rbp), %xmm0
+ 9292      B0E5FFFF 
+ 9293 84a7 F30F7F85 		movdqu	%xmm0, -3664(%rbp)
+ 9293      B0F1FFFF 
+ 9294              	.LBB1252:
+ 9295              	.LBB1253:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 9296              		.loc 2 1565 0
+ 9297 84af F30F6F85 		movdqu	-3664(%rbp), %xmm0
+ 9297      B0F1FFFF 
+ 9298 84b7 660F7F85 		movdqa	%xmm0, -6656(%rbp)
+ 9298      00E6FFFF 
+ 9299 84bf 660F6F85 		movdqa	-6656(%rbp), %xmm0
+ 9299      00E6FFFF 
+ 9300 84c7 F30F7F85 		movdqu	%xmm0, -3648(%rbp)
+ 9300      C0F1FFFF 
+ 9301              	.LBB1254:
+ 9302              	.LBB1255:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 9303              		.loc 2 1282 0
+ 9304 84cf F30F6F85 		movdqu	-3648(%rbp), %xmm0
+ 9304      C0F1FFFF 
+ 9305 84d7 F30F7F85 		movdqu	%xmm0, -5952(%rbp)
+ 9305      C0E8FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 9306              		.loc 2 1283 0
+ 9307 84df 8B85C8E8 		movl	-5944(%rbp), %eax
+ 9307      FFFF
+ 9308 84e5 8985CCE8 		movl	%eax, -5940(%rbp)
+ 9308      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 9309              		.loc 2 1284 0
+ 9310 84eb 8B85C4E8 		movl	-5948(%rbp), %eax
+ 9310      FFFF
+ 9311 84f1 8985C8E8 		movl	%eax, -5944(%rbp)
+ 9311      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 9312              		.loc 2 1285 0
+ 9313 84f7 8B85C0E8 		movl	-5952(%rbp), %eax
+ 9313      FFFF
+ 9314 84fd 8985C4E8 		movl	%eax, -5948(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 304
+
+
+ 9314      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 9315              		.loc 2 1286 0
+ 9316 8503 C785C0E8 		movl	$0, -5952(%rbp)
+ 9316      FFFF0000 
+ 9316      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 9317              		.loc 2 1287 0
+ 9318 850d F30F6F85 		movdqu	-5952(%rbp), %xmm0
+ 9318      C0E8FFFF 
+ 9319              	.LBE1255:
+ 9320              	.LBE1254:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9321              		.loc 2 1567 0
+ 9322 8515 660F7F85 		movdqa	%xmm0, -6656(%rbp)
+ 9322      00E6FFFF 
+ 9323 851d 660F6F85 		movdqa	-6656(%rbp), %xmm0
+ 9323      00E6FFFF 
+ 9324 8525 660FEF85 		pxor	-3664(%rbp), %xmm0
+ 9324      B0F1FFFF 
+ 9325 852d F30F7F85 		movdqu	%xmm0, -3664(%rbp)
+ 9325      B0F1FFFF 
+ 9326 8535 660F6F85 		movdqa	-6656(%rbp), %xmm0
+ 9326      00E6FFFF 
+ 9327 853d F30F7F85 		movdqu	%xmm0, -3632(%rbp)
+ 9327      D0F1FFFF 
+ 9328              	.LBB1256:
+ 9329              	.LBB1257:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 9330              		.loc 2 1282 0
+ 9331 8545 F30F6F85 		movdqu	-3632(%rbp), %xmm0
+ 9331      D0F1FFFF 
+ 9332 854d F30F7F85 		movdqu	%xmm0, -5936(%rbp)
+ 9332      D0E8FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 9333              		.loc 2 1283 0
+ 9334 8555 8B85D8E8 		movl	-5928(%rbp), %eax
+ 9334      FFFF
+ 9335 855b 8985DCE8 		movl	%eax, -5924(%rbp)
+ 9335      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 9336              		.loc 2 1284 0
+ 9337 8561 8B85D4E8 		movl	-5932(%rbp), %eax
+ 9337      FFFF
+ 9338 8567 8985D8E8 		movl	%eax, -5928(%rbp)
+ 9338      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 9339              		.loc 2 1285 0
+ 9340 856d 8B85D0E8 		movl	-5936(%rbp), %eax
+ 9340      FFFF
+ 9341 8573 8985D4E8 		movl	%eax, -5932(%rbp)
+ 9341      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 9342              		.loc 2 1286 0
+ 9343 8579 C785D0E8 		movl	$0, -5936(%rbp)
+ 9343      FFFF0000 
+ 9343      0000
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 305
+
+
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 9344              		.loc 2 1287 0
+ 9345 8583 F30F6F85 		movdqu	-5936(%rbp), %xmm0
+ 9345      D0E8FFFF 
+ 9346              	.LBE1257:
+ 9347              	.LBE1256:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9348              		.loc 2 1568 0
+ 9349 858b 660F7F85 		movdqa	%xmm0, -6656(%rbp)
+ 9349      00E6FFFF 
+ 9350 8593 660F6F85 		movdqa	-6656(%rbp), %xmm0
+ 9350      00E6FFFF 
+ 9351 859b 660FEF85 		pxor	-3664(%rbp), %xmm0
+ 9351      B0F1FFFF 
+ 9352 85a3 F30F7F85 		movdqu	%xmm0, -3664(%rbp)
+ 9352      B0F1FFFF 
+ 9353 85ab 660F6F85 		movdqa	-6656(%rbp), %xmm0
+ 9353      00E6FFFF 
+ 9354 85b3 F30F7F85 		movdqu	%xmm0, -3616(%rbp)
+ 9354      E0F1FFFF 
+ 9355              	.LBB1258:
+ 9356              	.LBB1259:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 9357              		.loc 2 1282 0
+ 9358 85bb F30F6F85 		movdqu	-3616(%rbp), %xmm0
+ 9358      E0F1FFFF 
+ 9359 85c3 F30F7F85 		movdqu	%xmm0, -5920(%rbp)
+ 9359      E0E8FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 9360              		.loc 2 1283 0
+ 9361 85cb 8B85E8E8 		movl	-5912(%rbp), %eax
+ 9361      FFFF
+ 9362 85d1 8985ECE8 		movl	%eax, -5908(%rbp)
+ 9362      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 9363              		.loc 2 1284 0
+ 9364 85d7 8B85E4E8 		movl	-5916(%rbp), %eax
+ 9364      FFFF
+ 9365 85dd 8985E8E8 		movl	%eax, -5912(%rbp)
+ 9365      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 9366              		.loc 2 1285 0
+ 9367 85e3 8B85E0E8 		movl	-5920(%rbp), %eax
+ 9367      FFFF
+ 9368 85e9 8985E4E8 		movl	%eax, -5916(%rbp)
+ 9368      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 9369              		.loc 2 1286 0
+ 9370 85ef C785E0E8 		movl	$0, -5920(%rbp)
+ 9370      FFFF0000 
+ 9370      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 9371              		.loc 2 1287 0
+ 9372 85f9 F30F6F85 		movdqu	-5920(%rbp), %xmm0
+ 9372      E0E8FFFF 
+ 9373              	.LBE1259:
+ 9374              	.LBE1258:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 306
+
+
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9375              		.loc 2 1569 0
+ 9376 8601 660F7F85 		movdqa	%xmm0, -6656(%rbp)
+ 9376      00E6FFFF 
+ 9377 8609 660F6F85 		movdqa	-6656(%rbp), %xmm0
+ 9377      00E6FFFF 
+ 9378 8611 660FEF85 		pxor	-3664(%rbp), %xmm0
+ 9378      B0F1FFFF 
+ 9379 8619 F30F7F85 		movdqu	%xmm0, -3664(%rbp)
+ 9379      B0F1FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 9380              		.loc 2 1571 0
+ 9381 8621 F30F6F85 		movdqu	-3664(%rbp), %xmm0
+ 9381      B0F1FFFF 
+ 9382              	.LBE1253:
+ 9383              	.LBE1252:
+1803:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(ShiftXorColumns) (v4);       /* k10   :k10^k11: k10^k11: k10^k11      */
+ 9384              		.loc 2 1803 0
+ 9385 8629 660F7F85 		movdqa	%xmm0, -6784(%rbp)
+ 9385      80E5FFFF 
+1804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 9386              		.loc 2 1804 0
+ 9387 8631 660F6F85 		movdqa	-6768(%rbp), %xmm0
+ 9387      90E5FFFF 
+ 9388 8639 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 9388      C0E5FFFF 
+ 9389 8641 660F6F85 		movdqa	-6720(%rbp), %xmm0
+ 9389      C0E5FFFF 
+ 9390 8649 F30F7F85 		movdqu	%xmm0, -3584(%rbp)
+ 9390      00F2FFFF 
+ 9391              	.LBB1260:
+ 9392              	.LBB1261:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 9393              		.loc 2 1681 0
+ 9394 8651 B8020000 		movl	$2, %eax
+ 9394      00
+ 9395 8656 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 9395      00000000 
+ 9396 865e F30F7F85 		movdqu	%xmm0, -3552(%rbp)
+ 9396      20F2FFFF 
+ 9397 8666 89851CF2 		movl	%eax, -3556(%rbp)
+ 9397      FFFF
+ 9398              	.LBB1262:
+ 9399              	.LBB1263:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 9400              		.loc 2 522 0
+ 9401 866c F30F6F85 		movdqu	-3552(%rbp), %xmm0
+ 9401      20F2FFFF 
+ 9402 8674 F30F7F85 		movdqu	%xmm0, -5840(%rbp)
+ 9402      30E9FFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 9403              		.loc 2 523 0
+ 9404 867c B8030000 		movl	$3, %eax
+ 9404      00
+ 9405 8681 4898     		cltq
+ 9406 8683 8B951CF2 		movl	-3556(%rbp), %edx
+ 9406      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 307
+
+
+ 9407 8689 89948530 		movl	%edx, -5840(%rbp,%rax,4)
+ 9407      E9FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 9408              		.loc 2 524 0
+ 9409 8690 F30F6F85 		movdqu	-5840(%rbp), %xmm0
+ 9409      30E9FFFF 
+ 9410 8698 F30F7F85 		movdqu	%xmm0, -3552(%rbp)
+ 9410      20F2FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 9411              		.loc 2 526 0
+ 9412 86a0 F30F6F85 		movdqu	-3552(%rbp), %xmm0
+ 9412      20F2FFFF 
+ 9413              	.LBE1263:
+ 9414              	.LBE1262:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 9415              		.loc 2 1681 0
+ 9416 86a8 660F7F85 		movdqa	%xmm0, -6624(%rbp)
+ 9416      20E6FFFF 
+ 9417 86b0 F30F6F85 		movdqu	-3584(%rbp), %xmm0
+ 9417      00F2FFFF 
+ 9418 86b8 F30F7F85 		movdqu	%xmm0, -3536(%rbp)
+ 9418      30F2FFFF 
+ 9419 86c0 F30F6F85 		movdqu	-3536(%rbp), %xmm0
+ 9419      30F2FFFF 
+ 9420 86c8 F30F7F85 		movdqu	%xmm0, -3504(%rbp)
+ 9420      50F2FFFF 
+ 9421 86d0 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 9421      000000
+ 9422 86d7 48898548 		movq	%rax, -3512(%rbp)
+ 9422      F2FFFF
+ 9423              	.LBB1264:
+ 9424              	.LBB1265:
+ 9425              	.LBB1266:
+ 9426              	.LBB1267:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 9427              		.loc 2 851 0
+ 9428 86de 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 9428      00000000 
+ 9429 86e6 F30F7F85 		movdqu	%xmm0, -3472(%rbp)
+ 9429      70F2FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 9430              		.loc 2 854 0
+ 9431 86ee 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 9431      00000000 
+ 9432 86f6 F30F6F8D 		movdqu	-3504(%rbp), %xmm1
+ 9432      50F2FFFF 
+ 9433 86fe F30F7F8D 		movdqu	%xmm1, -3392(%rbp)
+ 9433      C0F2FFFF 
+ 9434 8706 F30F7F85 		movdqu	%xmm0, -3408(%rbp)
+ 9434      B0F2FFFF 
+ 9435              	.LBB1268:
+ 9436              	.LBB1269:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 9437              		.loc 2 206 0
+ 9438 870e F30F6F85 		movdqu	-3408(%rbp), %xmm0
+ 9438      B0F2FFFF 
+ 9439 8716 F30F6F8D 		movdqu	-3392(%rbp), %xmm1
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 308
+
+
+ 9439      C0F2FFFF 
+ 9440 871e 660FDBC1 		pand	%xmm1, %xmm0
+ 9441              	.LBE1269:
+ 9442              	.LBE1268:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 9443              		.loc 2 854 0
+ 9444 8722 F30F7F85 		movdqu	%xmm0, -3424(%rbp)
+ 9444      A0F2FFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 9445              		.loc 2 862 0
+ 9446 872a 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 9446      00000000 
+ 9447 8732 F30F6F8D 		movdqu	-3504(%rbp), %xmm1
+ 9447      50F2FFFF 
+ 9448 873a F30F7F8D 		movdqu	%xmm1, -3360(%rbp)
+ 9448      E0F2FFFF 
+ 9449 8742 F30F7F85 		movdqu	%xmm0, -3376(%rbp)
+ 9449      D0F2FFFF 
+ 9450              	.LBB1270:
+ 9451              		.loc 2 2642 0
+ 9452 874a 0FB685E0 		movzbl	-3360(%rbp), %eax
+ 9452      F2FFFF
+ 9453 8751 0FB695D0 		movzbl	-3376(%rbp), %edx
+ 9453      F2FFFF
+ 9454 8758 0FB6C0   		movzbl	%al, %eax
+ 9455 875b 6689852E 		movw	%ax, -6866(%rbp)
+ 9455      E5FFFF
+ 9456 8762 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 9456      E5FFFF
+ 9457 8769 F6F2     		divb	%dl
+ 9458 876b 4189C7   		movl	%eax, %r15d
+ 9459 876e 0FB685E1 		movzbl	-3359(%rbp), %eax
+ 9459      F2FFFF
+ 9460 8775 0FB695D1 		movzbl	-3375(%rbp), %edx
+ 9460      F2FFFF
+ 9461 877c 0FB6C0   		movzbl	%al, %eax
+ 9462 877f 6689852E 		movw	%ax, -6866(%rbp)
+ 9462      E5FFFF
+ 9463 8786 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 9463      E5FFFF
+ 9464 878d F6F2     		divb	%dl
+ 9465 878f 88853FE6 		movb	%al, -6593(%rbp)
+ 9465      FFFF
+ 9466 8795 0FB685E2 		movzbl	-3358(%rbp), %eax
+ 9466      F2FFFF
+ 9467 879c 0FB695D2 		movzbl	-3374(%rbp), %edx
+ 9467      F2FFFF
+ 9468 87a3 0FB6C0   		movzbl	%al, %eax
+ 9469 87a6 6689852E 		movw	%ax, -6866(%rbp)
+ 9469      E5FFFF
+ 9470 87ad 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 9470      E5FFFF
+ 9471 87b4 F6F2     		divb	%dl
+ 9472 87b6 88853EE6 		movb	%al, -6594(%rbp)
+ 9472      FFFF
+ 9473 87bc 0FB685E3 		movzbl	-3357(%rbp), %eax
+ 9473      F2FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 309
+
+
+ 9474 87c3 0FB695D3 		movzbl	-3373(%rbp), %edx
+ 9474      F2FFFF
+ 9475 87ca 0FB6C0   		movzbl	%al, %eax
+ 9476 87cd 6689852E 		movw	%ax, -6866(%rbp)
+ 9476      E5FFFF
+ 9477 87d4 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 9477      E5FFFF
+ 9478 87db F6F2     		divb	%dl
+ 9479 87dd 88853DE6 		movb	%al, -6595(%rbp)
+ 9479      FFFF
+ 9480 87e3 0FB685E4 		movzbl	-3356(%rbp), %eax
+ 9480      F2FFFF
+ 9481 87ea 0FB695D4 		movzbl	-3372(%rbp), %edx
+ 9481      F2FFFF
+ 9482 87f1 0FB6C0   		movzbl	%al, %eax
+ 9483 87f4 6689852E 		movw	%ax, -6866(%rbp)
+ 9483      E5FFFF
+ 9484 87fb 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 9484      E5FFFF
+ 9485 8802 F6F2     		divb	%dl
+ 9486 8804 88853CE6 		movb	%al, -6596(%rbp)
+ 9486      FFFF
+ 9487 880a 0FB685E5 		movzbl	-3355(%rbp), %eax
+ 9487      F2FFFF
+ 9488 8811 0FB695D5 		movzbl	-3371(%rbp), %edx
+ 9488      F2FFFF
+ 9489 8818 0FB6C0   		movzbl	%al, %eax
+ 9490 881b 6689852E 		movw	%ax, -6866(%rbp)
+ 9490      E5FFFF
+ 9491 8822 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 9491      E5FFFF
+ 9492 8829 F6F2     		divb	%dl
+ 9493 882b 4189C1   		movl	%eax, %r9d
+ 9494 882e 0FB685E6 		movzbl	-3354(%rbp), %eax
+ 9494      F2FFFF
+ 9495 8835 0FB695D6 		movzbl	-3370(%rbp), %edx
+ 9495      F2FFFF
+ 9496 883c 0FB6C0   		movzbl	%al, %eax
+ 9497 883f 6689852E 		movw	%ax, -6866(%rbp)
+ 9497      E5FFFF
+ 9498 8846 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 9498      E5FFFF
+ 9499 884d F6F2     		divb	%dl
+ 9500 884f 89C7     		movl	%eax, %edi
+ 9501 8851 0FB685E7 		movzbl	-3353(%rbp), %eax
+ 9501      F2FFFF
+ 9502 8858 0FB695D7 		movzbl	-3369(%rbp), %edx
+ 9502      F2FFFF
+ 9503 885f 0FB6C0   		movzbl	%al, %eax
+ 9504 8862 6689852E 		movw	%ax, -6866(%rbp)
+ 9504      E5FFFF
+ 9505 8869 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 9505      E5FFFF
+ 9506 8870 F6F2     		divb	%dl
+ 9507 8872 89C3     		movl	%eax, %ebx
+ 9508 8874 0FB685E8 		movzbl	-3352(%rbp), %eax
+ 9508      F2FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 310
+
+
+ 9509 887b 0FB695D8 		movzbl	-3368(%rbp), %edx
+ 9509      F2FFFF
+ 9510 8882 0FB6C0   		movzbl	%al, %eax
+ 9511 8885 6689852E 		movw	%ax, -6866(%rbp)
+ 9511      E5FFFF
+ 9512 888c 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 9512      E5FFFF
+ 9513 8893 F6F2     		divb	%dl
+ 9514 8895 4189C2   		movl	%eax, %r10d
+ 9515 8898 0FB685E9 		movzbl	-3351(%rbp), %eax
+ 9515      F2FFFF
+ 9516 889f 0FB695D9 		movzbl	-3367(%rbp), %edx
+ 9516      F2FFFF
+ 9517 88a6 0FB6C0   		movzbl	%al, %eax
+ 9518 88a9 6689852E 		movw	%ax, -6866(%rbp)
+ 9518      E5FFFF
+ 9519 88b0 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 9519      E5FFFF
+ 9520 88b7 F6F2     		divb	%dl
+ 9521 88b9 4189C3   		movl	%eax, %r11d
+ 9522 88bc 0FB685EA 		movzbl	-3350(%rbp), %eax
+ 9522      F2FFFF
+ 9523 88c3 0FB695DA 		movzbl	-3366(%rbp), %edx
+ 9523      F2FFFF
+ 9524 88ca 0FB6C0   		movzbl	%al, %eax
+ 9525 88cd 6689852E 		movw	%ax, -6866(%rbp)
+ 9525      E5FFFF
+ 9526 88d4 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 9526      E5FFFF
+ 9527 88db F6F2     		divb	%dl
+ 9528 88dd 4189C4   		movl	%eax, %r12d
+ 9529 88e0 0FB685EB 		movzbl	-3349(%rbp), %eax
+ 9529      F2FFFF
+ 9530 88e7 0FB695DB 		movzbl	-3365(%rbp), %edx
+ 9530      F2FFFF
+ 9531 88ee 0FB6C0   		movzbl	%al, %eax
+ 9532 88f1 6689852E 		movw	%ax, -6866(%rbp)
+ 9532      E5FFFF
+ 9533 88f8 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 9533      E5FFFF
+ 9534 88ff F6F2     		divb	%dl
+ 9535 8901 4189C5   		movl	%eax, %r13d
+ 9536 8904 0FB685EC 		movzbl	-3348(%rbp), %eax
+ 9536      F2FFFF
+ 9537 890b 0FB695DC 		movzbl	-3364(%rbp), %edx
+ 9537      F2FFFF
+ 9538 8912 0FB6C0   		movzbl	%al, %eax
+ 9539 8915 6689852E 		movw	%ax, -6866(%rbp)
+ 9539      E5FFFF
+ 9540 891c 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 9540      E5FFFF
+ 9541 8923 F6F2     		divb	%dl
+ 9542 8925 4189C6   		movl	%eax, %r14d
+ 9543 8928 0FB685ED 		movzbl	-3347(%rbp), %eax
+ 9543      F2FFFF
+ 9544 892f 0FB695DD 		movzbl	-3363(%rbp), %edx
+ 9544      F2FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 311
+
+
+ 9545 8936 0FB6C0   		movzbl	%al, %eax
+ 9546 8939 6689852E 		movw	%ax, -6866(%rbp)
+ 9546      E5FFFF
+ 9547 8940 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 9547      E5FFFF
+ 9548 8947 F6F2     		divb	%dl
+ 9549 8949 4189C0   		movl	%eax, %r8d
+ 9550 894c 0FB685EE 		movzbl	-3346(%rbp), %eax
+ 9550      F2FFFF
+ 9551 8953 0FB695DE 		movzbl	-3362(%rbp), %edx
+ 9551      F2FFFF
+ 9552 895a 0FB6C0   		movzbl	%al, %eax
+ 9553 895d 6689852E 		movw	%ax, -6866(%rbp)
+ 9553      E5FFFF
+ 9554 8964 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 9554      E5FFFF
+ 9555 896b F6F2     		divb	%dl
+ 9556 896d 89C6     		movl	%eax, %esi
+ 9557 896f 0FB685EF 		movzbl	-3345(%rbp), %eax
+ 9557      F2FFFF
+ 9558 8976 0FB695DF 		movzbl	-3361(%rbp), %edx
+ 9558      F2FFFF
+ 9559 897d 0FB6C0   		movzbl	%al, %eax
+ 9560 8980 6689852E 		movw	%ax, -6866(%rbp)
+ 9560      E5FFFF
+ 9561 8987 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 9561      E5FFFF
+ 9562 898e F6F2     		divb	%dl
+ 9563 8990 89C1     		movl	%eax, %ecx
+ 9564              	.LBB1271:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 9565              		.loc 2 346 0
+ 9566 8992 0FB6D3   		movzbl	%bl, %edx
+ 9567 8995 400FB6C7 		movzbl	%dil, %eax
+ 9568 8999 48C1E208 		salq	$8, %rdx
+ 9569 899d 4809C2   		orq	%rax, %rdx
+ 9570 89a0 410FB6C1 		movzbl	%r9b, %eax
+ 9571 89a4 48C1E208 		salq	$8, %rdx
+ 9572 89a8 4809C2   		orq	%rax, %rdx
+ 9573 89ab 0FB6853C 		movzbl	-6596(%rbp), %eax
+ 9573      E6FFFF
+ 9574 89b2 48C1E208 		salq	$8, %rdx
+ 9575 89b6 4809C2   		orq	%rax, %rdx
+ 9576 89b9 0FB6853D 		movzbl	-6595(%rbp), %eax
+ 9576      E6FFFF
+ 9577 89c0 48C1E208 		salq	$8, %rdx
+ 9578 89c4 4809C2   		orq	%rax, %rdx
+ 9579 89c7 0FB6853E 		movzbl	-6594(%rbp), %eax
+ 9579      E6FFFF
+ 9580 89ce 48C1E208 		salq	$8, %rdx
+ 9581 89d2 4809C2   		orq	%rax, %rdx
+ 9582 89d5 0FB6853F 		movzbl	-6593(%rbp), %eax
+ 9582      E6FFFF
+ 9583 89dc 48C1E208 		salq	$8, %rdx
+ 9584 89e0 4809C2   		orq	%rax, %rdx
+ 9585 89e3 410FB6C7 		movzbl	%r15b, %eax
+ 9586 89e7 48C1E208 		salq	$8, %rdx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 312
+
+
+ 9587 89eb 4809C2   		orq	%rax, %rdx
+ 9588 89ee 0FB6C1   		movzbl	%cl, %eax
+ 9589 89f1 400FB6CE 		movzbl	%sil, %ecx
+ 9590 89f5 48C1E008 		salq	$8, %rax
+ 9591 89f9 4809C8   		orq	%rcx, %rax
+ 9592 89fc 410FB6C8 		movzbl	%r8b, %ecx
+ 9593 8a00 48C1E008 		salq	$8, %rax
+ 9594 8a04 4809C8   		orq	%rcx, %rax
+ 9595 8a07 410FB6CE 		movzbl	%r14b, %ecx
+ 9596 8a0b 48C1E008 		salq	$8, %rax
+ 9597 8a0f 4809C8   		orq	%rcx, %rax
+ 9598 8a12 410FB6CD 		movzbl	%r13b, %ecx
+ 9599 8a16 48C1E008 		salq	$8, %rax
+ 9600 8a1a 4809C8   		orq	%rcx, %rax
+ 9601 8a1d 410FB6CC 		movzbl	%r12b, %ecx
+ 9602 8a21 48C1E008 		salq	$8, %rax
+ 9603 8a25 4809C8   		orq	%rcx, %rax
+ 9604 8a28 410FB6CB 		movzbl	%r11b, %ecx
+ 9605 8a2c 48C1E008 		salq	$8, %rax
+ 9606 8a30 4809C8   		orq	%rcx, %rax
+ 9607 8a33 410FB6CA 		movzbl	%r10b, %ecx
+ 9608 8a37 48C1E008 		salq	$8, %rax
+ 9609 8a3b 4809C8   		orq	%rcx, %rax
+ 9610 8a3e 48899560 		movq	%rdx, -6816(%rbp)
+ 9610      E5FFFF
+ 9611 8a45 48898568 		movq	%rax, -6808(%rbp)
+ 9611      E5FFFF
+ 9612 8a4c 660F6F85 		movdqa	-6816(%rbp), %xmm0
+ 9612      60E5FFFF 
+ 9613              	.LBE1271:
+ 9614              	.LBE1270:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 9615              		.loc 2 862 0
+ 9616 8a54 F30F7F85 		movdqu	%xmm0, -3440(%rbp)
+ 9616      90F2FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 9617              		.loc 2 866 0
+ 9618 8a5c C7856CF2 		movl	$0, -3476(%rbp)
+ 9618      FFFF0000 
+ 9618      0000
+ 9619 8a66 E9860200 		jmp	.L228
+ 9619      00
+ 9620              	.L237:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 9621              		.loc 2 868 0
+ 9622 8a6b 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 9622      00000000 
+ 9623 8a73 F30F7F85 		movdqu	%xmm0, -3328(%rbp)
+ 9623      00F3FFFF 
+ 9624 8a7b F30F6F85 		movdqu	-3440(%rbp), %xmm0
+ 9624      90F2FFFF 
+ 9625 8a83 F30F7F85 		movdqu	%xmm0, -3344(%rbp)
+ 9625      F0F2FFFF 
+ 9626              	.LBB1272:
+ 9627              	.LBB1273:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 9628              		.loc 2 380 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 313
+
+
+ 9629 8a8b F30F6F85 		movdqu	-3328(%rbp), %xmm0
+ 9629      00F3FFFF 
+ 9630 8a93 F30F7F85 		movdqu	%xmm0, -5808(%rbp)
+ 9630      50E9FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 9631              		.loc 2 381 0
+ 9632 8a9b F30F6F85 		movdqu	-3344(%rbp), %xmm0
+ 9632      F0F2FFFF 
+ 9633 8aa3 F30F7F85 		movdqu	%xmm0, -5824(%rbp)
+ 9633      40E9FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 9634              		.loc 2 383 0
+ 9635 8aab C7851CF3 		movl	$0, -3300(%rbp)
+ 9635      FFFF0000 
+ 9635      0000
+ 9636 8ab5 EB5C     		jmp	.L229
+ 9637              	.L232:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 9638              		.loc 2 385 0
+ 9639 8ab7 8B851CF3 		movl	-3300(%rbp), %eax
+ 9639      FFFF
+ 9640 8abd 89C0     		mov	%eax, %eax
+ 9641 8abf 0FB68405 		movzbl	-5824(%rbp,%rax), %eax
+ 9641      40E9FFFF 
+ 9642 8ac7 84C0     		testb	%al, %al
+ 9643 8ac9 7912     		jns	.L230
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 9644              		.loc 2 386 0
+ 9645 8acb 8B851CF3 		movl	-3300(%rbp), %eax
+ 9645      FFFF
+ 9646 8ad1 89C0     		mov	%eax, %eax
+ 9647 8ad3 C6840560 		movb	$0, -5792(%rbp,%rax)
+ 9647      E9FFFF00 
+ 9648 8adb EB2F     		jmp	.L231
+ 9649              	.L230:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 9650              		.loc 2 388 0
+ 9651 8add 8B8D1CF3 		movl	-3300(%rbp), %ecx
+ 9651      FFFF
+ 9652 8ae3 8B851CF3 		movl	-3300(%rbp), %eax
+ 9652      FFFF
+ 9653 8ae9 89C0     		mov	%eax, %eax
+ 9654 8aeb 0FB68405 		movzbl	-5824(%rbp,%rax), %eax
+ 9654      40E9FFFF 
+ 9655 8af3 0FB6C0   		movzbl	%al, %eax
+ 9656 8af6 83E00F   		andl	$15, %eax
+ 9657 8af9 4898     		cltq
+ 9658 8afb 0FB69405 		movzbl	-5808(%rbp,%rax), %edx
+ 9658      50E9FFFF 
+ 9659 8b03 89C8     		mov	%ecx, %eax
+ 9660 8b05 88940560 		movb	%dl, -5792(%rbp,%rax)
+ 9660      E9FFFF
+ 9661              	.L231:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 9662              		.loc 2 383 0
+ 9663 8b0c 83851CF3 		addl	$1, -3300(%rbp)
+ 9663      FFFF01
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 314
+
+
+ 9664              	.L229:
+ 9665 8b13 83BD1CF3 		cmpl	$15, -3300(%rbp)
+ 9665      FFFF0F
+ 9666 8b1a 769B     		jbe	.L232
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 9667              		.loc 2 391 0
+ 9668 8b1c F30F6F85 		movdqu	-5792(%rbp), %xmm0
+ 9668      60E9FFFF 
+ 9669              	.LBE1273:
+ 9670              	.LBE1272:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 9671              		.loc 2 868 0
+ 9672 8b24 F30F7F85 		movdqu	%xmm0, -3456(%rbp)
+ 9672      80F2FFFF 
+ 9673 8b2c F30F6F85 		movdqu	-3424(%rbp), %xmm0
+ 9673      A0F2FFFF 
+ 9674 8b34 F30F7F85 		movdqu	%xmm0, -3280(%rbp)
+ 9674      30F3FFFF 
+ 9675 8b3c F30F6F85 		movdqu	-3456(%rbp), %xmm0
+ 9675      80F2FFFF 
+ 9676 8b44 F30F7F85 		movdqu	%xmm0, -3296(%rbp)
+ 9676      20F3FFFF 
+ 9677              	.LBB1274:
+ 9678              	.LBB1275:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 9679              		.loc 2 234 0
+ 9680 8b4c F30F6F85 		movdqu	-3296(%rbp), %xmm0
+ 9680      20F3FFFF 
+ 9681 8b54 F30F6F8D 		movdqu	-3280(%rbp), %xmm1
+ 9681      30F3FFFF 
+ 9682 8b5c 660FEBC1 		por	%xmm1, %xmm0
+ 9683              	.LBE1275:
+ 9684              	.LBE1274:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 9685              		.loc 2 870 0
+ 9686 8b60 F30F7F85 		movdqu	%xmm0, -3456(%rbp)
+ 9686      80F2FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 9687              		.loc 2 872 0
+ 9688 8b68 8B856CF2 		mov	-3476(%rbp), %eax
+ 9688      FFFF
+ 9689 8b6e 48C1E004 		salq	$4, %rax
+ 9690 8b72 48038548 		addq	-3512(%rbp), %rax
+ 9690      F2FFFF
+ 9691 8b79 660F6F00 		movdqa	(%rax), %xmm0
+ 9692 8b7d F30F7F85 		movdqu	%xmm0, -3248(%rbp)
+ 9692      50F3FFFF 
+ 9693 8b85 F30F6F85 		movdqu	-3456(%rbp), %xmm0
+ 9693      80F2FFFF 
+ 9694 8b8d F30F7F85 		movdqu	%xmm0, -3264(%rbp)
+ 9694      40F3FFFF 
+ 9695              	.LBB1276:
+ 9696              	.LBB1277:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 9697              		.loc 2 380 0
+ 9698 8b95 F30F6F85 		movdqu	-3248(%rbp), %xmm0
+ 9698      50F3FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 315
+
+
+ 9699 8b9d F30F7F85 		movdqu	%xmm0, -5760(%rbp)
+ 9699      80E9FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 9700              		.loc 2 381 0
+ 9701 8ba5 F30F6F85 		movdqu	-3264(%rbp), %xmm0
+ 9701      40F3FFFF 
+ 9702 8bad F30F7F85 		movdqu	%xmm0, -5776(%rbp)
+ 9702      70E9FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 9703              		.loc 2 383 0
+ 9704 8bb5 C7856CF3 		movl	$0, -3220(%rbp)
+ 9704      FFFF0000 
+ 9704      0000
+ 9705 8bbf EB5C     		jmp	.L233
+ 9706              	.L236:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 9707              		.loc 2 385 0
+ 9708 8bc1 8B856CF3 		movl	-3220(%rbp), %eax
+ 9708      FFFF
+ 9709 8bc7 89C0     		mov	%eax, %eax
+ 9710 8bc9 0FB68405 		movzbl	-5776(%rbp,%rax), %eax
+ 9710      70E9FFFF 
+ 9711 8bd1 84C0     		testb	%al, %al
+ 9712 8bd3 7912     		jns	.L234
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 9713              		.loc 2 386 0
+ 9714 8bd5 8B856CF3 		movl	-3220(%rbp), %eax
+ 9714      FFFF
+ 9715 8bdb 89C0     		mov	%eax, %eax
+ 9716 8bdd C6840590 		movb	$0, -5744(%rbp,%rax)
+ 9716      E9FFFF00 
+ 9717 8be5 EB2F     		jmp	.L235
+ 9718              	.L234:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 9719              		.loc 2 388 0
+ 9720 8be7 8B8D6CF3 		movl	-3220(%rbp), %ecx
+ 9720      FFFF
+ 9721 8bed 8B856CF3 		movl	-3220(%rbp), %eax
+ 9721      FFFF
+ 9722 8bf3 89C0     		mov	%eax, %eax
+ 9723 8bf5 0FB68405 		movzbl	-5776(%rbp,%rax), %eax
+ 9723      70E9FFFF 
+ 9724 8bfd 0FB6C0   		movzbl	%al, %eax
+ 9725 8c00 83E00F   		andl	$15, %eax
+ 9726 8c03 4898     		cltq
+ 9727 8c05 0FB69405 		movzbl	-5760(%rbp,%rax), %edx
+ 9727      80E9FFFF 
+ 9728 8c0d 89C8     		mov	%ecx, %eax
+ 9729 8c0f 88940590 		movb	%dl, -5744(%rbp,%rax)
+ 9729      E9FFFF
+ 9730              	.L235:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 9731              		.loc 2 383 0
+ 9732 8c16 83856CF3 		addl	$1, -3220(%rbp)
+ 9732      FFFF01
+ 9733              	.L233:
+ 9734 8c1d 83BD6CF3 		cmpl	$15, -3220(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 316
+
+
+ 9734      FFFF0F
+ 9735 8c24 769B     		jbe	.L236
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 9736              		.loc 2 391 0
+ 9737 8c26 F30F6F85 		movdqu	-5744(%rbp), %xmm0
+ 9737      90E9FFFF 
+ 9738              	.LBE1277:
+ 9739              	.LBE1276:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 9740              		.loc 2 872 0
+ 9741 8c2e F30F7F85 		movdqu	%xmm0, -3456(%rbp)
+ 9741      80F2FFFF 
+ 9742 8c36 F30F6F85 		movdqu	-3472(%rbp), %xmm0
+ 9742      70F2FFFF 
+ 9743 8c3e F30F7F85 		movdqu	%xmm0, -3200(%rbp)
+ 9743      80F3FFFF 
+ 9744 8c46 F30F6F85 		movdqu	-3456(%rbp), %xmm0
+ 9744      80F2FFFF 
+ 9745 8c4e F30F7F85 		movdqu	%xmm0, -3216(%rbp)
+ 9745      70F3FFFF 
+ 9746              	.LBB1278:
+ 9747              	.LBB1279:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 9748              		.loc 2 234 0
+ 9749 8c56 F30F6F85 		movdqu	-3216(%rbp), %xmm0
+ 9749      70F3FFFF 
+ 9750 8c5e F30F6F8D 		movdqu	-3200(%rbp), %xmm1
+ 9750      80F3FFFF 
+ 9751 8c66 660FEBC1 		por	%xmm1, %xmm0
+ 9752              	.LBE1279:
+ 9753              	.LBE1278:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 9754              		.loc 2 874 0
+ 9755 8c6a F30F7F85 		movdqu	%xmm0, -3472(%rbp)
+ 9755      70F2FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 9756              		.loc 2 876 0
+ 9757 8c72 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 9757      00000000 
+ 9758 8c7a F30F6F8D 		movdqu	-3440(%rbp), %xmm1
+ 9758      90F2FFFF 
+ 9759 8c82 F30F7F8D 		movdqu	%xmm1, -3168(%rbp)
+ 9759      A0F3FFFF 
+ 9760 8c8a F30F7F85 		movdqu	%xmm0, -3184(%rbp)
+ 9760      90F3FFFF 
+ 9761              	.LBB1280:
+ 9762              	.LBB1281:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 9763              		.loc 2 290 0
+ 9764 8c92 F30F6F8D 		movdqu	-3184(%rbp), %xmm1
+ 9764      90F3FFFF 
+ 9765 8c9a F30F6F85 		movdqu	-3168(%rbp), %xmm0
+ 9765      A0F3FFFF 
+ 9766 8ca2 660FF8C1 		psubb	%xmm1, %xmm0
+ 9767              	.LBE1281:
+ 9768              	.LBE1280:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 317
+
+
+ 9769              		.loc 2 876 0
+ 9770 8ca6 F30F7F85 		movdqu	%xmm0, -3440(%rbp)
+ 9770      90F2FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 9771              		.loc 2 878 0
+ 9772 8cae 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 9772      00000000 
+ 9773 8cb6 F30F6F8D 		movdqu	-3440(%rbp), %xmm1
+ 9773      90F2FFFF 
+ 9774 8cbe F30F7F8D 		movdqu	%xmm1, -3136(%rbp)
+ 9774      C0F3FFFF 
+ 9775 8cc6 F30F7F85 		movdqu	%xmm0, -3152(%rbp)
+ 9775      B0F3FFFF 
+ 9776              	.LBB1282:
+ 9777              	.LBB1283:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 9778              		.loc 2 206 0
+ 9779 8cce F30F6F85 		movdqu	-3152(%rbp), %xmm0
+ 9779      B0F3FFFF 
+ 9780 8cd6 F30F6F8D 		movdqu	-3136(%rbp), %xmm1
+ 9780      C0F3FFFF 
+ 9781 8cde 660FDBC1 		pand	%xmm1, %xmm0
+ 9782              	.LBE1283:
+ 9783              	.LBE1282:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 9784              		.loc 2 878 0
+ 9785 8ce2 F30F7F85 		movdqu	%xmm0, -3440(%rbp)
+ 9785      90F2FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 9786              		.loc 2 866 0
+ 9787 8cea 83856CF2 		addl	$1, -3476(%rbp)
+ 9787      FFFF01
+ 9788              	.L228:
+ 9789 8cf1 83BD6CF2 		cmpl	$15, -3476(%rbp)
+ 9789      FFFF0F
+ 9790 8cf8 0F866DFD 		jbe	.L237
+ 9790      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 9791              		.loc 2 882 0
+ 9792 8cfe F30F6F85 		movdqu	-3472(%rbp), %xmm0
+ 9792      70F2FFFF 
+ 9793              	.LBE1267:
+ 9794              	.LBE1266:
+ 9795              	.LBE1265:
+ 9796              	.LBE1264:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 9797              		.loc 2 1682 0
+ 9798 8d06 660F7F85 		movdqa	%xmm0, -6640(%rbp)
+ 9798      10E6FFFF 
+ 9799              	.LBB1284:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 9800              		.loc 2 1683 0
+ 9801 8d0e 660F6F85 		movdqa	-6640(%rbp), %xmm0
+ 9801      10E6FFFF 
+ 9802 8d16 F30F7F85 		movdqu	%xmm0, -5856(%rbp)
+ 9802      20E9FFFF 
+ 9803 8d1e E8000000 		call	KDbgWriterGet at PLT
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 318
+
+
+ 9803      00
+ 9804 8d23 4885C0   		testq	%rax, %rax
+ 9805 8d26 7479     		je	.L239
+ 9806 8d28 BF010000 		movl	$1, %edi
+ 9806      00
+ 9807 8d2d E8000000 		call	KDbgCondToFlag at PLT
+ 9807      00
+ 9808 8d32 4889C6   		movq	%rax, %rsi
+ 9809 8d35 BF100000 		movl	$16, %edi
+ 9809      00
+ 9810 8d3a E8000000 		call	KDbgTestModConds at PLT
+ 9810      00
+ 9811 8d3f 84C0     		testb	%al, %al
+ 9812 8d41 745E     		je	.L239
+ 9813 8d43 8B852CE9 		movl	-5844(%rbp), %eax
+ 9813      FFFF
+ 9814 8d49 89C7     		movl	%eax, %edi
+ 9815 8d4b E8B072FF 		call	bswap_32
+ 9815      FF
+ 9816 8d50 4189C5   		movl	%eax, %r13d
+ 9817 8d53 8B8528E9 		movl	-5848(%rbp), %eax
+ 9817      FFFF
+ 9818 8d59 89C7     		movl	%eax, %edi
+ 9819 8d5b E8A072FF 		call	bswap_32
+ 9819      FF
+ 9820 8d60 4189C4   		movl	%eax, %r12d
+ 9821 8d63 8B8524E9 		movl	-5852(%rbp), %eax
+ 9821      FFFF
+ 9822 8d69 89C7     		movl	%eax, %edi
+ 9823 8d6b E89072FF 		call	bswap_32
+ 9823      FF
+ 9824 8d70 89C3     		movl	%eax, %ebx
+ 9825 8d72 8B8520E9 		movl	-5856(%rbp), %eax
+ 9825      FFFF
+ 9826 8d78 89C7     		movl	%eax, %edi
+ 9827 8d7a E88172FF 		call	bswap_32
+ 9827      FF
+ 9828 8d7f 4589E9   		movl	%r13d, %r9d
+ 9829 8d82 4589E0   		movl	%r12d, %r8d
+ 9830 8d85 89D9     		movl	%ebx, %ecx
+ 9831 8d87 89C2     		movl	%eax, %edx
+ 9832 8d89 488D3500 		leaq	.LC0(%rip), %rsi
+ 9832      000000
+ 9833 8d90 488D3D00 		leaq	.LC1(%rip), %rdi
+ 9833      000000
+ 9834 8d97 B8000000 		movl	$0, %eax
+ 9834      00
+ 9835 8d9c E8000000 		call	KDbgMsg at PLT
+ 9835      00
+ 9836              	.L239:
+ 9837 8da1 660F6F85 		movdqa	-6640(%rbp), %xmm0
+ 9837      10E6FFFF 
+ 9838 8da9 F30F7F85 		movdqu	%xmm0, -3120(%rbp)
+ 9838      D0F3FFFF 
+ 9839              	.LBE1284:
+ 9840              	.LBB1285:
+ 9841              	.LBB1286:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 319
+
+
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 9842              		.loc 2 667 0
+ 9843 8db1 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 9843      00000000 
+ 9844 8db9 F30F6F8D 		movdqu	-3120(%rbp), %xmm1
+ 9844      D0F3FFFF 
+ 9845 8dc1 F30F7F8D 		movdqu	%xmm1, -3088(%rbp)
+ 9845      F0F3FFFF 
+ 9846 8dc9 F30F7F85 		movdqu	%xmm0, -3104(%rbp)
+ 9846      E0F3FFFF 
+ 9847              	.LBB1287:
+ 9848              	.LBB1288:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 9849              		.loc 2 380 0
+ 9850 8dd1 F30F6F85 		movdqu	-3088(%rbp), %xmm0
+ 9850      F0F3FFFF 
+ 9851 8dd9 F30F7F85 		movdqu	%xmm0, -5712(%rbp)
+ 9851      B0E9FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 9852              		.loc 2 381 0
+ 9853 8de1 F30F6F85 		movdqu	-3104(%rbp), %xmm0
+ 9853      E0F3FFFF 
+ 9854 8de9 F30F7F85 		movdqu	%xmm0, -5728(%rbp)
+ 9854      A0E9FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 9855              		.loc 2 383 0
+ 9856 8df1 C7850CF4 		movl	$0, -3060(%rbp)
+ 9856      FFFF0000 
+ 9856      0000
+ 9857 8dfb EB5C     		jmp	.L240
+ 9858              	.L243:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 9859              		.loc 2 385 0
+ 9860 8dfd 8B850CF4 		movl	-3060(%rbp), %eax
+ 9860      FFFF
+ 9861 8e03 89C0     		mov	%eax, %eax
+ 9862 8e05 0FB68405 		movzbl	-5728(%rbp,%rax), %eax
+ 9862      A0E9FFFF 
+ 9863 8e0d 84C0     		testb	%al, %al
+ 9864 8e0f 7912     		jns	.L241
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 9865              		.loc 2 386 0
+ 9866 8e11 8B850CF4 		movl	-3060(%rbp), %eax
+ 9866      FFFF
+ 9867 8e17 89C0     		mov	%eax, %eax
+ 9868 8e19 C68405C0 		movb	$0, -5696(%rbp,%rax)
+ 9868      E9FFFF00 
+ 9869 8e21 EB2F     		jmp	.L242
+ 9870              	.L241:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 9871              		.loc 2 388 0
+ 9872 8e23 8B8D0CF4 		movl	-3060(%rbp), %ecx
+ 9872      FFFF
+ 9873 8e29 8B850CF4 		movl	-3060(%rbp), %eax
+ 9873      FFFF
+ 9874 8e2f 89C0     		mov	%eax, %eax
+ 9875 8e31 0FB68405 		movzbl	-5728(%rbp,%rax), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 320
+
+
+ 9875      A0E9FFFF 
+ 9876 8e39 0FB6C0   		movzbl	%al, %eax
+ 9877 8e3c 83E00F   		andl	$15, %eax
+ 9878 8e3f 4898     		cltq
+ 9879 8e41 0FB69405 		movzbl	-5712(%rbp,%rax), %edx
+ 9879      B0E9FFFF 
+ 9880 8e49 89C8     		mov	%ecx, %eax
+ 9881 8e4b 889405C0 		movb	%dl, -5696(%rbp,%rax)
+ 9881      E9FFFF
+ 9882              	.L242:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 9883              		.loc 2 383 0
+ 9884 8e52 83850CF4 		addl	$1, -3060(%rbp)
+ 9884      FFFF01
+ 9885              	.L240:
+ 9886 8e59 83BD0CF4 		cmpl	$15, -3060(%rbp)
+ 9886      FFFF0F
+ 9887 8e60 769B     		jbe	.L243
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 9888              		.loc 2 391 0
+ 9889 8e62 F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 9889      C0E9FFFF 
+ 9890              	.LBE1288:
+ 9891              	.LBE1287:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 9892              		.loc 2 667 0
+ 9893 8e6a F30F7F85 		movdqu	%xmm0, -3120(%rbp)
+ 9893      D0F3FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 9894              		.loc 2 668 0
+ 9895 8e72 F30F6F85 		movdqu	-3120(%rbp), %xmm0
+ 9895      D0F3FFFF 
+ 9896              	.LBE1286:
+ 9897              	.LBE1285:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 9898              		.loc 2 1684 0
+ 9899 8e7a 660F7F85 		movdqa	%xmm0, -6640(%rbp)
+ 9899      10E6FFFF 
+ 9900              	.LBB1289:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 9901              		.loc 2 1685 0
+ 9902 8e82 660F6F85 		movdqa	-6640(%rbp), %xmm0
+ 9902      10E6FFFF 
+ 9903 8e8a F30F7F85 		movdqu	%xmm0, -5872(%rbp)
+ 9903      10E9FFFF 
+ 9904 8e92 E8000000 		call	KDbgWriterGet at PLT
+ 9904      00
+ 9905 8e97 4885C0   		testq	%rax, %rax
+ 9906 8e9a 7479     		je	.L245
+ 9907 8e9c BF010000 		movl	$1, %edi
+ 9907      00
+ 9908 8ea1 E8000000 		call	KDbgCondToFlag at PLT
+ 9908      00
+ 9909 8ea6 4889C6   		movq	%rax, %rsi
+ 9910 8ea9 BF100000 		movl	$16, %edi
+ 9910      00
+ 9911 8eae E8000000 		call	KDbgTestModConds at PLT
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 321
+
+
+ 9911      00
+ 9912 8eb3 84C0     		testb	%al, %al
+ 9913 8eb5 745E     		je	.L245
+ 9914 8eb7 8B851CE9 		movl	-5860(%rbp), %eax
+ 9914      FFFF
+ 9915 8ebd 89C7     		movl	%eax, %edi
+ 9916 8ebf E83C71FF 		call	bswap_32
+ 9916      FF
+ 9917 8ec4 4189C5   		movl	%eax, %r13d
+ 9918 8ec7 8B8518E9 		movl	-5864(%rbp), %eax
+ 9918      FFFF
+ 9919 8ecd 89C7     		movl	%eax, %edi
+ 9920 8ecf E82C71FF 		call	bswap_32
+ 9920      FF
+ 9921 8ed4 4189C4   		movl	%eax, %r12d
+ 9922 8ed7 8B8514E9 		movl	-5868(%rbp), %eax
+ 9922      FFFF
+ 9923 8edd 89C7     		movl	%eax, %edi
+ 9924 8edf E81C71FF 		call	bswap_32
+ 9924      FF
+ 9925 8ee4 89C3     		movl	%eax, %ebx
+ 9926 8ee6 8B8510E9 		movl	-5872(%rbp), %eax
+ 9926      FFFF
+ 9927 8eec 89C7     		movl	%eax, %edi
+ 9928 8eee E80D71FF 		call	bswap_32
+ 9928      FF
+ 9929 8ef3 4589E9   		movl	%r13d, %r9d
+ 9930 8ef6 4589E0   		movl	%r12d, %r8d
+ 9931 8ef9 89D9     		movl	%ebx, %ecx
+ 9932 8efb 89C2     		movl	%eax, %edx
+ 9933 8efd 488D3500 		leaq	.LC2(%rip), %rsi
+ 9933      000000
+ 9934 8f04 488D3D00 		leaq	.LC1(%rip), %rdi
+ 9934      000000
+ 9935 8f0b B8000000 		movl	$0, %eax
+ 9935      00
+ 9936 8f10 E8000000 		call	KDbgMsg at PLT
+ 9936      00
+ 9937              	.L245:
+ 9938 8f15 660F6F85 		movdqa	-6640(%rbp), %xmm0
+ 9938      10E6FFFF 
+ 9939 8f1d F30F7F85 		movdqu	%xmm0, -3040(%rbp)
+ 9939      20F4FFFF 
+ 9940 8f25 660F6F85 		movdqa	-6624(%rbp), %xmm0
+ 9940      20E6FFFF 
+ 9941 8f2d F30F7F85 		movdqu	%xmm0, -3056(%rbp)
+ 9941      10F4FFFF 
+ 9942              	.LBE1289:
+ 9943              	.LBB1290:
+ 9944              	.LBB1291:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 9945              		.loc 2 178 0
+ 9946 8f35 F30F6F85 		movdqu	-3056(%rbp), %xmm0
+ 9946      10F4FFFF 
+ 9947 8f3d F30F6F8D 		movdqu	-3040(%rbp), %xmm1
+ 9947      20F4FFFF 
+ 9948 8f45 660FEFC1 		pxor	%xmm1, %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 322
+
+
+ 9949              	.LBE1291:
+ 9950              	.LBE1290:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 9951              		.loc 2 1686 0
+ 9952 8f49 660F7F85 		movdqa	%xmm0, -6640(%rbp)
+ 9952      10E6FFFF 
+ 9953              	.LBB1292:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 9954              		.loc 2 1687 0
+ 9955 8f51 660F6F85 		movdqa	-6640(%rbp), %xmm0
+ 9955      10E6FFFF 
+ 9956 8f59 F30F7F85 		movdqu	%xmm0, -5888(%rbp)
+ 9956      00E9FFFF 
+ 9957 8f61 E8000000 		call	KDbgWriterGet at PLT
+ 9957      00
+ 9958 8f66 4885C0   		testq	%rax, %rax
+ 9959 8f69 7479     		je	.L247
+ 9960 8f6b BF010000 		movl	$1, %edi
+ 9960      00
+ 9961 8f70 E8000000 		call	KDbgCondToFlag at PLT
+ 9961      00
+ 9962 8f75 4889C6   		movq	%rax, %rsi
+ 9963 8f78 BF100000 		movl	$16, %edi
+ 9963      00
+ 9964 8f7d E8000000 		call	KDbgTestModConds at PLT
+ 9964      00
+ 9965 8f82 84C0     		testb	%al, %al
+ 9966 8f84 745E     		je	.L247
+ 9967 8f86 8B850CE9 		movl	-5876(%rbp), %eax
+ 9967      FFFF
+ 9968 8f8c 89C7     		movl	%eax, %edi
+ 9969 8f8e E86D70FF 		call	bswap_32
+ 9969      FF
+ 9970 8f93 4189C5   		movl	%eax, %r13d
+ 9971 8f96 8B8508E9 		movl	-5880(%rbp), %eax
+ 9971      FFFF
+ 9972 8f9c 89C7     		movl	%eax, %edi
+ 9973 8f9e E85D70FF 		call	bswap_32
+ 9973      FF
+ 9974 8fa3 4189C4   		movl	%eax, %r12d
+ 9975 8fa6 8B8504E9 		movl	-5884(%rbp), %eax
+ 9975      FFFF
+ 9976 8fac 89C7     		movl	%eax, %edi
+ 9977 8fae E84D70FF 		call	bswap_32
+ 9977      FF
+ 9978 8fb3 89C3     		movl	%eax, %ebx
+ 9979 8fb5 8B8500E9 		movl	-5888(%rbp), %eax
+ 9979      FFFF
+ 9980 8fbb 89C7     		movl	%eax, %edi
+ 9981 8fbd E83E70FF 		call	bswap_32
+ 9981      FF
+ 9982 8fc2 4589E9   		movl	%r13d, %r9d
+ 9983 8fc5 4589E0   		movl	%r12d, %r8d
+ 9984 8fc8 89D9     		movl	%ebx, %ecx
+ 9985 8fca 89C2     		movl	%eax, %edx
+ 9986 8fcc 488D3500 		leaq	.LC3(%rip), %rsi
+ 9986      000000
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 323
+
+
+ 9987 8fd3 488D3D00 		leaq	.LC1(%rip), %rdi
+ 9987      000000
+ 9988 8fda B8000000 		movl	$0, %eax
+ 9988      00
+ 9989 8fdf E8000000 		call	KDbgMsg at PLT
+ 9989      00
+ 9990              	.L247:
+ 9991 8fe4 660F6F85 		movdqa	-6640(%rbp), %xmm0
+ 9991      10E6FFFF 
+ 9992 8fec F30F7F85 		movdqu	%xmm0, -3024(%rbp)
+ 9992      30F4FFFF 
+ 9993              	.LBE1292:
+ 9994              	.LBB1293:
+ 9995              	.LBB1294:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 9996              		.loc 2 1357 0
+ 9997 8ff4 F30F6F85 		movdqu	-3024(%rbp), %xmm0
+ 9997      30F4FFFF 
+ 9998 8ffc F30F7F85 		movdqu	%xmm0, -5680(%rbp)
+ 9998      D0E9FFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 9999              		.loc 2 1358 0
+ 10000 9004 8B85DCE9 		movl	-5668(%rbp), %eax
+ 10000      FFFF
+ 10001 900a 8985D8E9 		movl	%eax, -5672(%rbp)
+ 10001      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 10002              		.loc 2 1359 0
+ 10003 9010 8B85DCE9 		movl	-5668(%rbp), %eax
+ 10003      FFFF
+ 10004 9016 8985D4E9 		movl	%eax, -5676(%rbp)
+ 10004      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 10005              		.loc 2 1360 0
+ 10006 901c 8B85DCE9 		movl	-5668(%rbp), %eax
+ 10006      FFFF
+ 10007 9022 8985D0E9 		movl	%eax, -5680(%rbp)
+ 10007      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 10008              		.loc 2 1361 0
+ 10009 9028 F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 10009      D0E9FFFF 
+ 10010              	.LBE1294:
+ 10011              	.LBE1293:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 10012              		.loc 2 1688 0
+ 10013 9030 660F7F85 		movdqa	%xmm0, -6640(%rbp)
+ 10013      10E6FFFF 
+ 10014              	.LBB1295:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 10015              		.loc 2 1689 0
+ 10016 9038 660F6F85 		movdqa	-6640(%rbp), %xmm0
+ 10016      10E6FFFF 
+ 10017 9040 F30F7F85 		movdqu	%xmm0, -5904(%rbp)
+ 10017      F0E8FFFF 
+ 10018 9048 E8000000 		call	KDbgWriterGet at PLT
+ 10018      00
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 324
+
+
+ 10019 904d 4885C0   		testq	%rax, %rax
+ 10020 9050 7479     		je	.L249
+ 10021 9052 BF010000 		movl	$1, %edi
+ 10021      00
+ 10022 9057 E8000000 		call	KDbgCondToFlag at PLT
+ 10022      00
+ 10023 905c 4889C6   		movq	%rax, %rsi
+ 10024 905f BF100000 		movl	$16, %edi
+ 10024      00
+ 10025 9064 E8000000 		call	KDbgTestModConds at PLT
+ 10025      00
+ 10026 9069 84C0     		testb	%al, %al
+ 10027 906b 745E     		je	.L249
+ 10028 906d 8B85FCE8 		movl	-5892(%rbp), %eax
+ 10028      FFFF
+ 10029 9073 89C7     		movl	%eax, %edi
+ 10030 9075 E8866FFF 		call	bswap_32
+ 10030      FF
+ 10031 907a 4189C5   		movl	%eax, %r13d
+ 10032 907d 8B85F8E8 		movl	-5896(%rbp), %eax
+ 10032      FFFF
+ 10033 9083 89C7     		movl	%eax, %edi
+ 10034 9085 E8766FFF 		call	bswap_32
+ 10034      FF
+ 10035 908a 4189C4   		movl	%eax, %r12d
+ 10036 908d 8B85F4E8 		movl	-5900(%rbp), %eax
+ 10036      FFFF
+ 10037 9093 89C7     		movl	%eax, %edi
+ 10038 9095 E8666FFF 		call	bswap_32
+ 10038      FF
+ 10039 909a 89C3     		movl	%eax, %ebx
+ 10040 909c 8B85F0E8 		movl	-5904(%rbp), %eax
+ 10040      FFFF
+ 10041 90a2 89C7     		movl	%eax, %edi
+ 10042 90a4 E8576FFF 		call	bswap_32
+ 10042      FF
+ 10043 90a9 4589E9   		movl	%r13d, %r9d
+ 10044 90ac 4589E0   		movl	%r12d, %r8d
+ 10045 90af 89D9     		movl	%ebx, %ecx
+ 10046 90b1 89C2     		movl	%eax, %edx
+ 10047 90b3 488D3500 		leaq	.LC4(%rip), %rsi
+ 10047      000000
+ 10048 90ba 488D3D00 		leaq	.LC1(%rip), %rdi
+ 10048      000000
+ 10049 90c1 B8000000 		movl	$0, %eax
+ 10049      00
+ 10050 90c6 E8000000 		call	KDbgMsg at PLT
+ 10050      00
+ 10051              	.L249:
+ 10052              	.LBE1295:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 10053              		.loc 2 1690 0
+ 10054 90cb 660F6F85 		movdqa	-6640(%rbp), %xmm0
+ 10054      10E6FFFF 
+ 10055              	.LBE1261:
+ 10056              	.LBE1260:
+1804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 325
+
+
+ 10057              		.loc 2 1804 0
+ 10058 90d3 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 10058      C0E5FFFF 
+1806:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0 ^= k;                                       /* k12   : k13   : k14    : k15          */
+ 10059              		.loc 2 1806 0
+ 10060 90db 660F6F85 		movdqa	-6800(%rbp), %xmm0
+ 10060      70E5FFFF 
+ 10061 90e3 660FEF85 		pxor	-6720(%rbp), %xmm0
+ 10061      C0E5FFFF 
+ 10062 90eb 660F7F85 		movdqa	%xmm0, -6800(%rbp)
+ 10062      70E5FFFF 
+1807:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[3] = v0; /* K12:K13:K14:K15 */
+ 10063              		.loc 2 1807 0
+ 10064 90f3 488B8588 		movq	-6264(%rbp), %rax
+ 10064      E7FFFF
+ 10065 90fa 4883C030 		addq	$48, %rax
+ 10066 90fe 660F6F85 		movdqa	-6800(%rbp), %xmm0
+ 10066      70E5FFFF 
+ 10067 9106 660F7F00 		movdqa	%xmm0, (%rax)
+1808:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v0);   /* k15   : k15   : k15    : k15          */
+ 10068              		.loc 2 1808 0
+ 10069 910a 660F6F85 		movdqa	-6800(%rbp), %xmm0
+ 10069      70E5FFFF 
+ 10070 9112 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 10070      C0E5FFFF 
+ 10071 911a 660F6F85 		movdqa	-6720(%rbp), %xmm0
+ 10071      C0E5FFFF 
+ 10072 9122 F30F7F85 		movdqu	%xmm0, -3008(%rbp)
+ 10072      40F4FFFF 
+ 10073              	.LBB1296:
+ 10074              	.LBB1297:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 10075              		.loc 2 1357 0
+ 10076 912a F30F6F85 		movdqu	-3008(%rbp), %xmm0
+ 10076      40F4FFFF 
+ 10077 9132 F30F7F85 		movdqu	%xmm0, -5664(%rbp)
+ 10077      E0E9FFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 10078              		.loc 2 1358 0
+ 10079 913a 8B85ECE9 		movl	-5652(%rbp), %eax
+ 10079      FFFF
+ 10080 9140 8985E8E9 		movl	%eax, -5656(%rbp)
+ 10080      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 10081              		.loc 2 1359 0
+ 10082 9146 8B85ECE9 		movl	-5652(%rbp), %eax
+ 10082      FFFF
+ 10083 914c 8985E4E9 		movl	%eax, -5660(%rbp)
+ 10083      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 10084              		.loc 2 1360 0
+ 10085 9152 8B85ECE9 		movl	-5652(%rbp), %eax
+ 10085      FFFF
+ 10086 9158 8985E0E9 		movl	%eax, -5664(%rbp)
+ 10086      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 10087              		.loc 2 1361 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 326
+
+
+ 10088 915e F30F6F85 		movdqu	-5664(%rbp), %xmm0
+ 10088      E0E9FFFF 
+ 10089              	.LBE1297:
+ 10090              	.LBE1296:
+1808:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v0);   /* k15   : k15   : k15    : k15          */
+ 10091              		.loc 2 1808 0
+ 10092 9166 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 10092      C0E5FFFF 
+1809:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1 ^= k;                                       /* k16   : k17   : k16    : k17          */
+ 10093              		.loc 2 1809 0
+ 10094 916e 660F6F85 		movdqa	-6784(%rbp), %xmm0
+ 10094      80E5FFFF 
+ 10095 9176 660FEF85 		pxor	-6720(%rbp), %xmm0
+ 10095      C0E5FFFF 
+ 10096 917e 660F7F85 		movdqa	%xmm0, -6784(%rbp)
+ 10096      80E5FFFF 
+1815:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 10097              		.loc 2 1815 0
+ 10098 9186 660F6F85 		movdqa	-6784(%rbp), %xmm0
+ 10098      80E5FFFF 
+ 10099 918e 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 10099      C0E5FFFF 
+ 10100 9196 660F6F85 		movdqa	-6720(%rbp), %xmm0
+ 10100      C0E5FFFF 
+ 10101 919e F30F7F85 		movdqu	%xmm0, -2976(%rbp)
+ 10101      60F4FFFF 
+ 10102              	.LBB1298:
+ 10103              	.LBB1299:
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rconw = (AESWord)(AESByte)rcon;
+ 10104              		.loc 2 1629 0
+ 10105 91a6 B8040000 		movl	$4, %eax
+ 10105      00
+ 10106 91ab 0FB6C0   		movzbl	%al, %eax
+ 10107 91ae 898580F4 		movl	%eax, -2944(%rbp)
+ 10107      FFFF
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 10108              		.loc 2 1630 0
+ 10109 91b4 F30F6F85 		movdqu	-2976(%rbp), %xmm0
+ 10109      60F4FFFF 
+ 10110 91bc F30F7F85 		movdqu	%xmm0, -5632(%rbp)
+ 10110      00EAFFFF 
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[1]);
+ 10111              		.loc 2 1631 0
+ 10112 91c4 8B8504EA 		movl	-5628(%rbp), %eax
+ 10112      FFFF
+ 10113 91ca 898584F4 		movl	%eax, -2940(%rbp)
+ 10113      FFFF
+ 10114              	.LBB1300:
+ 10115              	.LBB1301:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 10116              		.loc 2 740 0
+ 10117 91d0 8B8584F4 		movl	-2940(%rbp), %eax
+ 10117      FFFF
+ 10118 91d6 8985F0E9 		movl	%eax, -5648(%rbp)
+ 10118      FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 10119              		.loc 2 741 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 327
+
+
+ 10120 91dc C78588F4 		movl	$0, -2936(%rbp)
+ 10120      FFFF0000 
+ 10120      0000
+ 10121 91e6 EB36     		jmp	.L250
+ 10122              	.L251:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 10123              		.loc 2 742 0
+ 10124 91e8 8B8D88F4 		movl	-2936(%rbp), %ecx
+ 10124      FFFF
+ 10125 91ee 8B8588F4 		movl	-2936(%rbp), %eax
+ 10125      FFFF
+ 10126 91f4 89C0     		mov	%eax, %eax
+ 10127 91f6 0FB68405 		movzbl	-5648(%rbp,%rax), %eax
+ 10127      F0E9FFFF 
+ 10128 91fe 0FB6C0   		movzbl	%al, %eax
+ 10129 9201 89C2     		mov	%eax, %edx
+ 10130 9203 488D0500 		leaq	KAESBlockCipherVecRijndaelSBox(%rip), %rax
+ 10130      000000
+ 10131 920a 0FB61402 		movzbl	(%rdx,%rax), %edx
+ 10132 920e 89C8     		mov	%ecx, %eax
+ 10133 9210 889405F0 		movb	%dl, -5648(%rbp,%rax)
+ 10133      E9FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 10134              		.loc 2 741 0
+ 10135 9217 838588F4 		addl	$1, -2936(%rbp)
+ 10135      FFFF01
+ 10136              	.L250:
+ 10137 921e 83BD88F4 		cmpl	$3, -2936(%rbp)
+ 10137      FFFF03
+ 10138 9225 76C1     		jbe	.L251
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 10139              		.loc 2 743 0
+ 10140 9227 8B85F0E9 		movl	-5648(%rbp), %eax
+ 10140      FFFF
+ 10141              	.LBE1301:
+ 10142              	.LBE1300:
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[1]);
+ 10143              		.loc 2 1631 0
+ 10144 922d 89857CF4 		movl	%eax, -2948(%rbp)
+ 10144      FFFF
+ 10145 9233 8B857CF4 		movl	-2948(%rbp), %eax
+ 10145      FFFF
+ 10146 9239 89858CF4 		movl	%eax, -2932(%rbp)
+ 10146      FFFF
+ 10147              	.LBB1302:
+ 10148              	.LBB1303:
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (w >> 8) | (w << 24);
+ 10149              		.loc 2 1196 0
+ 10150 923f 8B858CF4 		movl	-2932(%rbp), %eax
+ 10150      FFFF
+ 10151 9245 C1C808   		rorl	$8, %eax
+ 10152              	.LBE1303:
+ 10153              	.LBE1302:
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(RotWord)(temp);
+ 10154              		.loc 2 1632 0
+ 10155 9248 89857CF4 		movl	%eax, -2948(%rbp)
+ 10155      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 328
+
+
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp ^= rconw;
+ 10156              		.loc 2 1633 0
+ 10157 924e 8B8580F4 		movl	-2944(%rbp), %eax
+ 10157      FFFF
+ 10158 9254 31857CF4 		xorl	%eax, -2948(%rbp)
+ 10158      FFFF
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 10159              		.loc 2 1635 0
+ 10160 925a 8B857CF4 		movl	-2948(%rbp), %eax
+ 10160      FFFF
+ 10161 9260 89850CEA 		movl	%eax, -5620(%rbp)
+ 10161      FFFF
+ 10162 9266 8B850CEA 		movl	-5620(%rbp), %eax
+ 10162      FFFF
+ 10163 926c 898508EA 		movl	%eax, -5624(%rbp)
+ 10163      FFFF
+ 10164 9272 8B8508EA 		movl	-5624(%rbp), %eax
+ 10164      FFFF
+ 10165 9278 898504EA 		movl	%eax, -5628(%rbp)
+ 10165      FFFF
+ 10166 927e 8B8504EA 		movl	-5628(%rbp), %eax
+ 10166      FFFF
+ 10167 9284 898500EA 		movl	%eax, -5632(%rbp)
+ 10167      FFFF
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 10168              		.loc 2 1636 0
+ 10169 928a F30F6F85 		movdqu	-5632(%rbp), %xmm0
+ 10169      00EAFFFF 
+ 10170              	.LBE1299:
+ 10171              	.LBE1298:
+1815:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 10172              		.loc 2 1815 0
+ 10173 9292 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 10173      C0E5FFFF 
+ 10174 929a 660F6F85 		movdqa	-6800(%rbp), %xmm0
+ 10174      70E5FFFF 
+ 10175 92a2 F30F7F85 		movdqu	%xmm0, -2928(%rbp)
+ 10175      90F4FFFF 
+ 10176              	.LBB1304:
+ 10177              	.LBB1305:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 10178              		.loc 2 1565 0
+ 10179 92aa F30F6F85 		movdqu	-2928(%rbp), %xmm0
+ 10179      90F4FFFF 
+ 10180 92b2 660F7F85 		movdqa	%xmm0, -6592(%rbp)
+ 10180      40E6FFFF 
+ 10181 92ba 660F6F85 		movdqa	-6592(%rbp), %xmm0
+ 10181      40E6FFFF 
+ 10182 92c2 F30F7F85 		movdqu	%xmm0, -2912(%rbp)
+ 10182      A0F4FFFF 
+ 10183              	.LBB1306:
+ 10184              	.LBB1307:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 10185              		.loc 2 1282 0
+ 10186 92ca F30F6F85 		movdqu	-2912(%rbp), %xmm0
+ 10186      A0F4FFFF 
+ 10187 92d2 F30F7F85 		movdqu	%xmm0, -5616(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 329
+
+
+ 10187      10EAFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 10188              		.loc 2 1283 0
+ 10189 92da 8B8518EA 		movl	-5608(%rbp), %eax
+ 10189      FFFF
+ 10190 92e0 89851CEA 		movl	%eax, -5604(%rbp)
+ 10190      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 10191              		.loc 2 1284 0
+ 10192 92e6 8B8514EA 		movl	-5612(%rbp), %eax
+ 10192      FFFF
+ 10193 92ec 898518EA 		movl	%eax, -5608(%rbp)
+ 10193      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 10194              		.loc 2 1285 0
+ 10195 92f2 8B8510EA 		movl	-5616(%rbp), %eax
+ 10195      FFFF
+ 10196 92f8 898514EA 		movl	%eax, -5612(%rbp)
+ 10196      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 10197              		.loc 2 1286 0
+ 10198 92fe C78510EA 		movl	$0, -5616(%rbp)
+ 10198      FFFF0000 
+ 10198      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 10199              		.loc 2 1287 0
+ 10200 9308 F30F6F85 		movdqu	-5616(%rbp), %xmm0
+ 10200      10EAFFFF 
+ 10201              	.LBE1307:
+ 10202              	.LBE1306:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10203              		.loc 2 1567 0
+ 10204 9310 660F7F85 		movdqa	%xmm0, -6592(%rbp)
+ 10204      40E6FFFF 
+ 10205 9318 660F6F85 		movdqa	-6592(%rbp), %xmm0
+ 10205      40E6FFFF 
+ 10206 9320 660FEF85 		pxor	-2928(%rbp), %xmm0
+ 10206      90F4FFFF 
+ 10207 9328 F30F7F85 		movdqu	%xmm0, -2928(%rbp)
+ 10207      90F4FFFF 
+ 10208 9330 660F6F85 		movdqa	-6592(%rbp), %xmm0
+ 10208      40E6FFFF 
+ 10209 9338 F30F7F85 		movdqu	%xmm0, -2896(%rbp)
+ 10209      B0F4FFFF 
+ 10210              	.LBB1308:
+ 10211              	.LBB1309:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 10212              		.loc 2 1282 0
+ 10213 9340 F30F6F85 		movdqu	-2896(%rbp), %xmm0
+ 10213      B0F4FFFF 
+ 10214 9348 F30F7F85 		movdqu	%xmm0, -5600(%rbp)
+ 10214      20EAFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 10215              		.loc 2 1283 0
+ 10216 9350 8B8528EA 		movl	-5592(%rbp), %eax
+ 10216      FFFF
+ 10217 9356 89852CEA 		movl	%eax, -5588(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 330
+
+
+ 10217      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 10218              		.loc 2 1284 0
+ 10219 935c 8B8524EA 		movl	-5596(%rbp), %eax
+ 10219      FFFF
+ 10220 9362 898528EA 		movl	%eax, -5592(%rbp)
+ 10220      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 10221              		.loc 2 1285 0
+ 10222 9368 8B8520EA 		movl	-5600(%rbp), %eax
+ 10222      FFFF
+ 10223 936e 898524EA 		movl	%eax, -5596(%rbp)
+ 10223      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 10224              		.loc 2 1286 0
+ 10225 9374 C78520EA 		movl	$0, -5600(%rbp)
+ 10225      FFFF0000 
+ 10225      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 10226              		.loc 2 1287 0
+ 10227 937e F30F6F85 		movdqu	-5600(%rbp), %xmm0
+ 10227      20EAFFFF 
+ 10228              	.LBE1309:
+ 10229              	.LBE1308:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10230              		.loc 2 1568 0
+ 10231 9386 660F7F85 		movdqa	%xmm0, -6592(%rbp)
+ 10231      40E6FFFF 
+ 10232 938e 660F6F85 		movdqa	-6592(%rbp), %xmm0
+ 10232      40E6FFFF 
+ 10233 9396 660FEF85 		pxor	-2928(%rbp), %xmm0
+ 10233      90F4FFFF 
+ 10234 939e F30F7F85 		movdqu	%xmm0, -2928(%rbp)
+ 10234      90F4FFFF 
+ 10235 93a6 660F6F85 		movdqa	-6592(%rbp), %xmm0
+ 10235      40E6FFFF 
+ 10236 93ae F30F7F85 		movdqu	%xmm0, -2880(%rbp)
+ 10236      C0F4FFFF 
+ 10237              	.LBB1310:
+ 10238              	.LBB1311:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 10239              		.loc 2 1282 0
+ 10240 93b6 F30F6F85 		movdqu	-2880(%rbp), %xmm0
+ 10240      C0F4FFFF 
+ 10241 93be F30F7F85 		movdqu	%xmm0, -5584(%rbp)
+ 10241      30EAFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 10242              		.loc 2 1283 0
+ 10243 93c6 8B8538EA 		movl	-5576(%rbp), %eax
+ 10243      FFFF
+ 10244 93cc 89853CEA 		movl	%eax, -5572(%rbp)
+ 10244      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 10245              		.loc 2 1284 0
+ 10246 93d2 8B8534EA 		movl	-5580(%rbp), %eax
+ 10246      FFFF
+ 10247 93d8 898538EA 		movl	%eax, -5576(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 331
+
+
+ 10247      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 10248              		.loc 2 1285 0
+ 10249 93de 8B8530EA 		movl	-5584(%rbp), %eax
+ 10249      FFFF
+ 10250 93e4 898534EA 		movl	%eax, -5580(%rbp)
+ 10250      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 10251              		.loc 2 1286 0
+ 10252 93ea C78530EA 		movl	$0, -5584(%rbp)
+ 10252      FFFF0000 
+ 10252      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 10253              		.loc 2 1287 0
+ 10254 93f4 F30F6F85 		movdqu	-5584(%rbp), %xmm0
+ 10254      30EAFFFF 
+ 10255              	.LBE1311:
+ 10256              	.LBE1310:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10257              		.loc 2 1569 0
+ 10258 93fc 660F7F85 		movdqa	%xmm0, -6592(%rbp)
+ 10258      40E6FFFF 
+ 10259 9404 660F6F85 		movdqa	-6592(%rbp), %xmm0
+ 10259      40E6FFFF 
+ 10260 940c 660FEF85 		pxor	-2928(%rbp), %xmm0
+ 10260      90F4FFFF 
+ 10261 9414 F30F7F85 		movdqu	%xmm0, -2928(%rbp)
+ 10261      90F4FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 10262              		.loc 2 1571 0
+ 10263 941c F30F6F85 		movdqu	-2928(%rbp), %xmm0
+ 10263      90F4FFFF 
+ 10264              	.LBE1305:
+ 10265              	.LBE1304:
+1817:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3  = AESBCMEMBER(ShiftXorColumns) (v0);       /* k12   :k12^k13:k12^k13^k14:k12^k13^k14^k15 */
+ 10266              		.loc 2 1817 0
+ 10267 9424 660F7F85 		movdqa	%xmm0, -6752(%rbp)
+ 10267      A0E5FFFF 
+1818:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3 ^= k;                                       /* k18   : k19   : k20    : k21          */
+ 10268              		.loc 2 1818 0
+ 10269 942c 660F6F85 		movdqa	-6752(%rbp), %xmm0
+ 10269      A0E5FFFF 
+ 10270 9434 660FEF85 		pxor	-6720(%rbp), %xmm0
+ 10270      C0E5FFFF 
+ 10271 943c 660F7F85 		movdqa	%xmm0, -6752(%rbp)
+ 10271      A0E5FFFF 
+ 10272 9444 660F6F85 		movdqa	-6784(%rbp), %xmm0
+ 10272      80E5FFFF 
+ 10273 944c F30F7F85 		movdqu	%xmm0, -2864(%rbp)
+ 10273      D0F4FFFF 
+ 10274              	.LBB1312:
+ 10275              	.LBB1313:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 10276              		.loc 2 1565 0
+ 10277 9454 F30F6F85 		movdqu	-2864(%rbp), %xmm0
+ 10277      D0F4FFFF 
+ 10278 945c 660F7F85 		movdqa	%xmm0, -6576(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 332
+
+
+ 10278      50E6FFFF 
+ 10279 9464 660F6F85 		movdqa	-6576(%rbp), %xmm0
+ 10279      50E6FFFF 
+ 10280 946c F30F7F85 		movdqu	%xmm0, -2848(%rbp)
+ 10280      E0F4FFFF 
+ 10281              	.LBB1314:
+ 10282              	.LBB1315:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 10283              		.loc 2 1282 0
+ 10284 9474 F30F6F85 		movdqu	-2848(%rbp), %xmm0
+ 10284      E0F4FFFF 
+ 10285 947c F30F7F85 		movdqu	%xmm0, -5568(%rbp)
+ 10285      40EAFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 10286              		.loc 2 1283 0
+ 10287 9484 8B8548EA 		movl	-5560(%rbp), %eax
+ 10287      FFFF
+ 10288 948a 89854CEA 		movl	%eax, -5556(%rbp)
+ 10288      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 10289              		.loc 2 1284 0
+ 10290 9490 8B8544EA 		movl	-5564(%rbp), %eax
+ 10290      FFFF
+ 10291 9496 898548EA 		movl	%eax, -5560(%rbp)
+ 10291      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 10292              		.loc 2 1285 0
+ 10293 949c 8B8540EA 		movl	-5568(%rbp), %eax
+ 10293      FFFF
+ 10294 94a2 898544EA 		movl	%eax, -5564(%rbp)
+ 10294      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 10295              		.loc 2 1286 0
+ 10296 94a8 C78540EA 		movl	$0, -5568(%rbp)
+ 10296      FFFF0000 
+ 10296      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 10297              		.loc 2 1287 0
+ 10298 94b2 F30F6F85 		movdqu	-5568(%rbp), %xmm0
+ 10298      40EAFFFF 
+ 10299              	.LBE1315:
+ 10300              	.LBE1314:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10301              		.loc 2 1567 0
+ 10302 94ba 660F7F85 		movdqa	%xmm0, -6576(%rbp)
+ 10302      50E6FFFF 
+ 10303 94c2 660F6F85 		movdqa	-6576(%rbp), %xmm0
+ 10303      50E6FFFF 
+ 10304 94ca 660FEF85 		pxor	-2864(%rbp), %xmm0
+ 10304      D0F4FFFF 
+ 10305 94d2 F30F7F85 		movdqu	%xmm0, -2864(%rbp)
+ 10305      D0F4FFFF 
+ 10306 94da 660F6F85 		movdqa	-6576(%rbp), %xmm0
+ 10306      50E6FFFF 
+ 10307 94e2 F30F7F85 		movdqu	%xmm0, -2832(%rbp)
+ 10307      F0F4FFFF 
+ 10308              	.LBB1316:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 333
+
+
+ 10309              	.LBB1317:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 10310              		.loc 2 1282 0
+ 10311 94ea F30F6F85 		movdqu	-2832(%rbp), %xmm0
+ 10311      F0F4FFFF 
+ 10312 94f2 F30F7F85 		movdqu	%xmm0, -5552(%rbp)
+ 10312      50EAFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 10313              		.loc 2 1283 0
+ 10314 94fa 8B8558EA 		movl	-5544(%rbp), %eax
+ 10314      FFFF
+ 10315 9500 89855CEA 		movl	%eax, -5540(%rbp)
+ 10315      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 10316              		.loc 2 1284 0
+ 10317 9506 8B8554EA 		movl	-5548(%rbp), %eax
+ 10317      FFFF
+ 10318 950c 898558EA 		movl	%eax, -5544(%rbp)
+ 10318      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 10319              		.loc 2 1285 0
+ 10320 9512 8B8550EA 		movl	-5552(%rbp), %eax
+ 10320      FFFF
+ 10321 9518 898554EA 		movl	%eax, -5548(%rbp)
+ 10321      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 10322              		.loc 2 1286 0
+ 10323 951e C78550EA 		movl	$0, -5552(%rbp)
+ 10323      FFFF0000 
+ 10323      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 10324              		.loc 2 1287 0
+ 10325 9528 F30F6F85 		movdqu	-5552(%rbp), %xmm0
+ 10325      50EAFFFF 
+ 10326              	.LBE1317:
+ 10327              	.LBE1316:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10328              		.loc 2 1568 0
+ 10329 9530 660F7F85 		movdqa	%xmm0, -6576(%rbp)
+ 10329      50E6FFFF 
+ 10330 9538 660F6F85 		movdqa	-6576(%rbp), %xmm0
+ 10330      50E6FFFF 
+ 10331 9540 660FEF85 		pxor	-2864(%rbp), %xmm0
+ 10331      D0F4FFFF 
+ 10332 9548 F30F7F85 		movdqu	%xmm0, -2864(%rbp)
+ 10332      D0F4FFFF 
+ 10333 9550 660F6F85 		movdqa	-6576(%rbp), %xmm0
+ 10333      50E6FFFF 
+ 10334 9558 F30F7F85 		movdqu	%xmm0, -2816(%rbp)
+ 10334      00F5FFFF 
+ 10335              	.LBB1318:
+ 10336              	.LBB1319:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 10337              		.loc 2 1282 0
+ 10338 9560 F30F6F85 		movdqu	-2816(%rbp), %xmm0
+ 10338      00F5FFFF 
+ 10339 9568 F30F7F85 		movdqu	%xmm0, -5536(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 334
+
+
+ 10339      60EAFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 10340              		.loc 2 1283 0
+ 10341 9570 8B8568EA 		movl	-5528(%rbp), %eax
+ 10341      FFFF
+ 10342 9576 89856CEA 		movl	%eax, -5524(%rbp)
+ 10342      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 10343              		.loc 2 1284 0
+ 10344 957c 8B8564EA 		movl	-5532(%rbp), %eax
+ 10344      FFFF
+ 10345 9582 898568EA 		movl	%eax, -5528(%rbp)
+ 10345      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 10346              		.loc 2 1285 0
+ 10347 9588 8B8560EA 		movl	-5536(%rbp), %eax
+ 10347      FFFF
+ 10348 958e 898564EA 		movl	%eax, -5532(%rbp)
+ 10348      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 10349              		.loc 2 1286 0
+ 10350 9594 C78560EA 		movl	$0, -5536(%rbp)
+ 10350      FFFF0000 
+ 10350      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 10351              		.loc 2 1287 0
+ 10352 959e F30F6F85 		movdqu	-5536(%rbp), %xmm0
+ 10352      60EAFFFF 
+ 10353              	.LBE1319:
+ 10354              	.LBE1318:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10355              		.loc 2 1569 0
+ 10356 95a6 660F7F85 		movdqa	%xmm0, -6576(%rbp)
+ 10356      50E6FFFF 
+ 10357 95ae 660F6F85 		movdqa	-6576(%rbp), %xmm0
+ 10357      50E6FFFF 
+ 10358 95b6 660FEF85 		pxor	-2864(%rbp), %xmm0
+ 10358      D0F4FFFF 
+ 10359 95be F30F7F85 		movdqu	%xmm0, -2864(%rbp)
+ 10359      D0F4FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 10360              		.loc 2 1571 0
+ 10361 95c6 F30F6F85 		movdqu	-2864(%rbp), %xmm0
+ 10361      D0F4FFFF 
+ 10362              	.LBE1313:
+ 10363              	.LBE1312:
+1819:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4  = AESBCMEMBER(ShiftXorColumns) (v1);       /* k16   :k16^k17: k17    : 0            */
+ 10364              		.loc 2 1819 0
+ 10365 95ce 660F7F85 		movdqa	%xmm0, -6736(%rbp)
+ 10365      B0E5FFFF 
+1820:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k21   : k21   : k21    : k21          */
+ 10366              		.loc 2 1820 0
+ 10367 95d6 660F6F85 		movdqa	-6752(%rbp), %xmm0
+ 10367      A0E5FFFF 
+ 10368 95de 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 10368      C0E5FFFF 
+ 10369 95e6 660F6F85 		movdqa	-6720(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 335
+
+
+ 10369      C0E5FFFF 
+ 10370 95ee F30F7F85 		movdqu	%xmm0, -2800(%rbp)
+ 10370      10F5FFFF 
+ 10371              	.LBB1320:
+ 10372              	.LBB1321:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 10373              		.loc 2 1357 0
+ 10374 95f6 F30F6F85 		movdqu	-2800(%rbp), %xmm0
+ 10374      10F5FFFF 
+ 10375 95fe F30F7F85 		movdqu	%xmm0, -5520(%rbp)
+ 10375      70EAFFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 10376              		.loc 2 1358 0
+ 10377 9606 8B857CEA 		movl	-5508(%rbp), %eax
+ 10377      FFFF
+ 10378 960c 898578EA 		movl	%eax, -5512(%rbp)
+ 10378      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 10379              		.loc 2 1359 0
+ 10380 9612 8B857CEA 		movl	-5508(%rbp), %eax
+ 10380      FFFF
+ 10381 9618 898574EA 		movl	%eax, -5516(%rbp)
+ 10381      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 10382              		.loc 2 1360 0
+ 10383 961e 8B857CEA 		movl	-5508(%rbp), %eax
+ 10383      FFFF
+ 10384 9624 898570EA 		movl	%eax, -5520(%rbp)
+ 10384      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 10385              		.loc 2 1361 0
+ 10386 962a F30F6F85 		movdqu	-5520(%rbp), %xmm0
+ 10386      70EAFFFF 
+ 10387              	.LBE1321:
+ 10388              	.LBE1320:
+1820:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k21   : k21   : k21    : k21          */
+ 10389              		.loc 2 1820 0
+ 10390 9632 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 10390      C0E5FFFF 
+1821:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4 ^= k;                                       /* k22   : k23   : x      : x            */
+ 10391              		.loc 2 1821 0
+ 10392 963a 660F6F85 		movdqa	-6736(%rbp), %xmm0
+ 10392      B0E5FFFF 
+ 10393 9642 660FEF85 		pxor	-6720(%rbp), %xmm0
+ 10393      C0E5FFFF 
+ 10394 964a 660F7F85 		movdqa	%xmm0, -6736(%rbp)
+ 10394      B0E5FFFF 
+ 10395 9652 660F6F85 		movdqa	-6784(%rbp), %xmm0
+ 10395      80E5FFFF 
+ 10396 965a F30F7F85 		movdqu	%xmm0, -2768(%rbp)
+ 10396      30F5FFFF 
+ 10397 9662 660F6F85 		movdqa	-6752(%rbp), %xmm0
+ 10397      A0E5FFFF 
+ 10398 966a F30F7F85 		movdqu	%xmm0, -2784(%rbp)
+ 10398      20F5FFFF 
+ 10399              	.LBB1322:
+ 10400              	.LBB1323:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 336
+
+
+1471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.state = w;
+ 10401              		.loc 2 1471 0
+ 10402 9672 F30F6F85 		movdqu	-2768(%rbp), %xmm0
+ 10402      30F5FFFF 
+ 10403 967a F30F7F85 		movdqu	%xmm0, -5488(%rbp)
+ 10403      90EAFFFF 
+1472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     xx.state = x;
+ 10404              		.loc 2 1472 0
+ 10405 9682 F30F6F85 		movdqu	-2784(%rbp), %xmm0
+ 10405      20F5FFFF 
+ 10406 968a F30F7F85 		movdqu	%xmm0, -5504(%rbp)
+ 10406      80EAFFFF 
+1474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[2] = xx.columns[0];
+ 10407              		.loc 2 1474 0
+ 10408 9692 8B8580EA 		movl	-5504(%rbp), %eax
+ 10408      FFFF
+ 10409 9698 898598EA 		movl	%eax, -5480(%rbp)
+ 10409      FFFF
+1475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[3] = xx.columns[1];
+ 10410              		.loc 2 1475 0
+ 10411 969e 8B8584EA 		movl	-5500(%rbp), %eax
+ 10411      FFFF
+ 10412 96a4 89859CEA 		movl	%eax, -5476(%rbp)
+ 10412      FFFF
+1477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return ww.state;
+ 10413              		.loc 2 1477 0
+ 10414 96aa F30F6F85 		movdqu	-5488(%rbp), %xmm0
+ 10414      90EAFFFF 
+ 10415              	.LBE1323:
+ 10416              	.LBE1322:
+1822:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateMerge1) (v1,v3);        /* k16   : k17   : k18    : k19          */
+ 10417              		.loc 2 1822 0
+ 10418 96b2 660F7F85 		movdqa	%xmm0, -6784(%rbp)
+ 10418      80E5FFFF 
+1823:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[4] = v1; /* K16:K17:K18:K19 */
+ 10419              		.loc 2 1823 0
+ 10420 96ba 488B8588 		movq	-6264(%rbp), %rax
+ 10420      E7FFFF
+ 10421 96c1 4883C040 		addq	$64, %rax
+ 10422 96c5 660F6F85 		movdqa	-6784(%rbp), %xmm0
+ 10422      80E5FFFF 
+ 10423 96cd 660F7F00 		movdqa	%xmm0, (%rax)
+ 10424 96d1 660F6F85 		movdqa	-6752(%rbp), %xmm0
+ 10424      A0E5FFFF 
+ 10425 96d9 F30F7F85 		movdqu	%xmm0, -2736(%rbp)
+ 10425      50F5FFFF 
+ 10426 96e1 660F6F85 		movdqa	-6736(%rbp), %xmm0
+ 10426      B0E5FFFF 
+ 10427 96e9 F30F7F85 		movdqu	%xmm0, -2752(%rbp)
+ 10427      40F5FFFF 
+ 10428              	.LBB1324:
+ 10429              	.LBB1325:
+1503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.state = w;
+ 10430              		.loc 2 1503 0
+ 10431 96f1 F30F6F85 		movdqu	-2736(%rbp), %xmm0
+ 10431      50F5FFFF 
+ 10432 96f9 F30F7F85 		movdqu	%xmm0, -5456(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 337
+
+
+ 10432      B0EAFFFF 
+1504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     xx.state = x;
+ 10433              		.loc 2 1504 0
+ 10434 9701 F30F6F85 		movdqu	-2752(%rbp), %xmm0
+ 10434      40F5FFFF 
+ 10435 9709 F30F7F85 		movdqu	%xmm0, -5472(%rbp)
+ 10435      A0EAFFFF 
+1506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[0] = ww.columns[2];
+ 10436              		.loc 2 1506 0
+ 10437 9711 8B85B8EA 		movl	-5448(%rbp), %eax
+ 10437      FFFF
+ 10438 9717 8985B0EA 		movl	%eax, -5456(%rbp)
+ 10438      FFFF
+1507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[1] = ww.columns[3];
+ 10439              		.loc 2 1507 0
+ 10440 971d 8B85BCEA 		movl	-5444(%rbp), %eax
+ 10440      FFFF
+ 10441 9723 8985B4EA 		movl	%eax, -5452(%rbp)
+ 10441      FFFF
+1508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[2] = xx.columns[0];
+ 10442              		.loc 2 1508 0
+ 10443 9729 8B85A0EA 		movl	-5472(%rbp), %eax
+ 10443      FFFF
+ 10444 972f 8985B8EA 		movl	%eax, -5448(%rbp)
+ 10444      FFFF
+1509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[3] = xx.columns[1];
+ 10445              		.loc 2 1509 0
+ 10446 9735 8B85A4EA 		movl	-5468(%rbp), %eax
+ 10446      FFFF
+ 10447 973b 8985BCEA 		movl	%eax, -5444(%rbp)
+ 10447      FFFF
+1511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return ww.state;
+ 10448              		.loc 2 1511 0
+ 10449 9741 F30F6F85 		movdqu	-5456(%rbp), %xmm0
+ 10449      B0EAFFFF 
+ 10450              	.LBE1325:
+ 10451              	.LBE1324:
+1825:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v2  = AESBCMEMBER(StateMerge2) (v3,v4);        /* k20   : k21   : k22    : k23          */
+ 10452              		.loc 2 1825 0
+ 10453 9749 660F7F85 		movdqa	%xmm0, -6768(%rbp)
+ 10453      90E5FFFF 
+1826:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[5] = v2; /* K20:K21:K22:K23 */
+ 10454              		.loc 2 1826 0
+ 10455 9751 488B8588 		movq	-6264(%rbp), %rax
+ 10455      E7FFFF
+ 10456 9758 4883C050 		addq	$80, %rax
+ 10457 975c 660F6F85 		movdqa	-6768(%rbp), %xmm0
+ 10457      90E5FFFF 
+ 10458 9764 660F7F00 		movdqa	%xmm0, (%rax)
+ 10459 9768 660F6F85 		movdqa	-6752(%rbp), %xmm0
+ 10459      A0E5FFFF 
+ 10460 9770 F30F7F85 		movdqu	%xmm0, -2720(%rbp)
+ 10460      60F5FFFF 
+ 10461              	.LBB1326:
+ 10462              	.LBB1327:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 10463              		.loc 2 1565 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 338
+
+
+ 10464 9778 F30F6F85 		movdqu	-2720(%rbp), %xmm0
+ 10464      60F5FFFF 
+ 10465 9780 660F7F85 		movdqa	%xmm0, -6560(%rbp)
+ 10465      60E6FFFF 
+ 10466 9788 660F6F85 		movdqa	-6560(%rbp), %xmm0
+ 10466      60E6FFFF 
+ 10467 9790 F30F7F85 		movdqu	%xmm0, -2704(%rbp)
+ 10467      70F5FFFF 
+ 10468              	.LBB1328:
+ 10469              	.LBB1329:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 10470              		.loc 2 1282 0
+ 10471 9798 F30F6F85 		movdqu	-2704(%rbp), %xmm0
+ 10471      70F5FFFF 
+ 10472 97a0 F30F7F85 		movdqu	%xmm0, -5440(%rbp)
+ 10472      C0EAFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 10473              		.loc 2 1283 0
+ 10474 97a8 8B85C8EA 		movl	-5432(%rbp), %eax
+ 10474      FFFF
+ 10475 97ae 8985CCEA 		movl	%eax, -5428(%rbp)
+ 10475      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 10476              		.loc 2 1284 0
+ 10477 97b4 8B85C4EA 		movl	-5436(%rbp), %eax
+ 10477      FFFF
+ 10478 97ba 8985C8EA 		movl	%eax, -5432(%rbp)
+ 10478      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 10479              		.loc 2 1285 0
+ 10480 97c0 8B85C0EA 		movl	-5440(%rbp), %eax
+ 10480      FFFF
+ 10481 97c6 8985C4EA 		movl	%eax, -5436(%rbp)
+ 10481      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 10482              		.loc 2 1286 0
+ 10483 97cc C785C0EA 		movl	$0, -5440(%rbp)
+ 10483      FFFF0000 
+ 10483      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 10484              		.loc 2 1287 0
+ 10485 97d6 F30F6F85 		movdqu	-5440(%rbp), %xmm0
+ 10485      C0EAFFFF 
+ 10486              	.LBE1329:
+ 10487              	.LBE1328:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10488              		.loc 2 1567 0
+ 10489 97de 660F7F85 		movdqa	%xmm0, -6560(%rbp)
+ 10489      60E6FFFF 
+ 10490 97e6 660F6F85 		movdqa	-6560(%rbp), %xmm0
+ 10490      60E6FFFF 
+ 10491 97ee 660FEF85 		pxor	-2720(%rbp), %xmm0
+ 10491      60F5FFFF 
+ 10492 97f6 F30F7F85 		movdqu	%xmm0, -2720(%rbp)
+ 10492      60F5FFFF 
+ 10493 97fe 660F6F85 		movdqa	-6560(%rbp), %xmm0
+ 10493      60E6FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 339
+
+
+ 10494 9806 F30F7F85 		movdqu	%xmm0, -2688(%rbp)
+ 10494      80F5FFFF 
+ 10495              	.LBB1330:
+ 10496              	.LBB1331:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 10497              		.loc 2 1282 0
+ 10498 980e F30F6F85 		movdqu	-2688(%rbp), %xmm0
+ 10498      80F5FFFF 
+ 10499 9816 F30F7F85 		movdqu	%xmm0, -5424(%rbp)
+ 10499      D0EAFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 10500              		.loc 2 1283 0
+ 10501 981e 8B85D8EA 		movl	-5416(%rbp), %eax
+ 10501      FFFF
+ 10502 9824 8985DCEA 		movl	%eax, -5412(%rbp)
+ 10502      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 10503              		.loc 2 1284 0
+ 10504 982a 8B85D4EA 		movl	-5420(%rbp), %eax
+ 10504      FFFF
+ 10505 9830 8985D8EA 		movl	%eax, -5416(%rbp)
+ 10505      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 10506              		.loc 2 1285 0
+ 10507 9836 8B85D0EA 		movl	-5424(%rbp), %eax
+ 10507      FFFF
+ 10508 983c 8985D4EA 		movl	%eax, -5420(%rbp)
+ 10508      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 10509              		.loc 2 1286 0
+ 10510 9842 C785D0EA 		movl	$0, -5424(%rbp)
+ 10510      FFFF0000 
+ 10510      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 10511              		.loc 2 1287 0
+ 10512 984c F30F6F85 		movdqu	-5424(%rbp), %xmm0
+ 10512      D0EAFFFF 
+ 10513              	.LBE1331:
+ 10514              	.LBE1330:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10515              		.loc 2 1568 0
+ 10516 9854 660F7F85 		movdqa	%xmm0, -6560(%rbp)
+ 10516      60E6FFFF 
+ 10517 985c 660F6F85 		movdqa	-6560(%rbp), %xmm0
+ 10517      60E6FFFF 
+ 10518 9864 660FEF85 		pxor	-2720(%rbp), %xmm0
+ 10518      60F5FFFF 
+ 10519 986c F30F7F85 		movdqu	%xmm0, -2720(%rbp)
+ 10519      60F5FFFF 
+ 10520 9874 660F6F85 		movdqa	-6560(%rbp), %xmm0
+ 10520      60E6FFFF 
+ 10521 987c F30F7F85 		movdqu	%xmm0, -2672(%rbp)
+ 10521      90F5FFFF 
+ 10522              	.LBB1332:
+ 10523              	.LBB1333:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 10524              		.loc 2 1282 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 340
+
+
+ 10525 9884 F30F6F85 		movdqu	-2672(%rbp), %xmm0
+ 10525      90F5FFFF 
+ 10526 988c F30F7F85 		movdqu	%xmm0, -5408(%rbp)
+ 10526      E0EAFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 10527              		.loc 2 1283 0
+ 10528 9894 8B85E8EA 		movl	-5400(%rbp), %eax
+ 10528      FFFF
+ 10529 989a 8985ECEA 		movl	%eax, -5396(%rbp)
+ 10529      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 10530              		.loc 2 1284 0
+ 10531 98a0 8B85E4EA 		movl	-5404(%rbp), %eax
+ 10531      FFFF
+ 10532 98a6 8985E8EA 		movl	%eax, -5400(%rbp)
+ 10532      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 10533              		.loc 2 1285 0
+ 10534 98ac 8B85E0EA 		movl	-5408(%rbp), %eax
+ 10534      FFFF
+ 10535 98b2 8985E4EA 		movl	%eax, -5404(%rbp)
+ 10535      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 10536              		.loc 2 1286 0
+ 10537 98b8 C785E0EA 		movl	$0, -5408(%rbp)
+ 10537      FFFF0000 
+ 10537      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 10538              		.loc 2 1287 0
+ 10539 98c2 F30F6F85 		movdqu	-5408(%rbp), %xmm0
+ 10539      E0EAFFFF 
+ 10540              	.LBE1333:
+ 10541              	.LBE1332:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10542              		.loc 2 1569 0
+ 10543 98ca 660F7F85 		movdqa	%xmm0, -6560(%rbp)
+ 10543      60E6FFFF 
+ 10544 98d2 660F6F85 		movdqa	-6560(%rbp), %xmm0
+ 10544      60E6FFFF 
+ 10545 98da 660FEF85 		pxor	-2720(%rbp), %xmm0
+ 10545      60F5FFFF 
+ 10546 98e2 F30F7F85 		movdqu	%xmm0, -2720(%rbp)
+ 10546      60F5FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 10547              		.loc 2 1571 0
+ 10548 98ea F30F6F85 		movdqu	-2720(%rbp), %xmm0
+ 10548      60F5FFFF 
+ 10549              	.LBE1327:
+ 10550              	.LBE1326:
+1829:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(ShiftXorColumns) (v3);       /* k18   :k18^k19:k18^k19^k20:k18^k19^k20^k21 */
+ 10551              		.loc 2 1829 0
+ 10552 98f2 660F7F85 		movdqa	%xmm0, -6800(%rbp)
+ 10552      70E5FFFF 
+ 10553 98fa 660F6F85 		movdqa	-6736(%rbp), %xmm0
+ 10553      B0E5FFFF 
+ 10554 9902 F30F7F85 		movdqu	%xmm0, -2656(%rbp)
+ 10554      A0F5FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 341
+
+
+ 10555              	.LBB1334:
+ 10556              	.LBB1335:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 10557              		.loc 2 1565 0
+ 10558 990a F30F6F85 		movdqu	-2656(%rbp), %xmm0
+ 10558      A0F5FFFF 
+ 10559 9912 660F7F85 		movdqa	%xmm0, -6544(%rbp)
+ 10559      70E6FFFF 
+ 10560 991a 660F6F85 		movdqa	-6544(%rbp), %xmm0
+ 10560      70E6FFFF 
+ 10561 9922 F30F7F85 		movdqu	%xmm0, -2640(%rbp)
+ 10561      B0F5FFFF 
+ 10562              	.LBB1336:
+ 10563              	.LBB1337:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 10564              		.loc 2 1282 0
+ 10565 992a F30F6F85 		movdqu	-2640(%rbp), %xmm0
+ 10565      B0F5FFFF 
+ 10566 9932 F30F7F85 		movdqu	%xmm0, -5392(%rbp)
+ 10566      F0EAFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 10567              		.loc 2 1283 0
+ 10568 993a 8B85F8EA 		movl	-5384(%rbp), %eax
+ 10568      FFFF
+ 10569 9940 8985FCEA 		movl	%eax, -5380(%rbp)
+ 10569      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 10570              		.loc 2 1284 0
+ 10571 9946 8B85F4EA 		movl	-5388(%rbp), %eax
+ 10571      FFFF
+ 10572 994c 8985F8EA 		movl	%eax, -5384(%rbp)
+ 10572      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 10573              		.loc 2 1285 0
+ 10574 9952 8B85F0EA 		movl	-5392(%rbp), %eax
+ 10574      FFFF
+ 10575 9958 8985F4EA 		movl	%eax, -5388(%rbp)
+ 10575      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 10576              		.loc 2 1286 0
+ 10577 995e C785F0EA 		movl	$0, -5392(%rbp)
+ 10577      FFFF0000 
+ 10577      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 10578              		.loc 2 1287 0
+ 10579 9968 F30F6F85 		movdqu	-5392(%rbp), %xmm0
+ 10579      F0EAFFFF 
+ 10580              	.LBE1337:
+ 10581              	.LBE1336:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10582              		.loc 2 1567 0
+ 10583 9970 660F7F85 		movdqa	%xmm0, -6544(%rbp)
+ 10583      70E6FFFF 
+ 10584 9978 660F6F85 		movdqa	-6544(%rbp), %xmm0
+ 10584      70E6FFFF 
+ 10585 9980 660FEF85 		pxor	-2656(%rbp), %xmm0
+ 10585      A0F5FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 342
+
+
+ 10586 9988 F30F7F85 		movdqu	%xmm0, -2656(%rbp)
+ 10586      A0F5FFFF 
+ 10587 9990 660F6F85 		movdqa	-6544(%rbp), %xmm0
+ 10587      70E6FFFF 
+ 10588 9998 F30F7F85 		movdqu	%xmm0, -2624(%rbp)
+ 10588      C0F5FFFF 
+ 10589              	.LBB1338:
+ 10590              	.LBB1339:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 10591              		.loc 2 1282 0
+ 10592 99a0 F30F6F85 		movdqu	-2624(%rbp), %xmm0
+ 10592      C0F5FFFF 
+ 10593 99a8 F30F7F85 		movdqu	%xmm0, -5376(%rbp)
+ 10593      00EBFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 10594              		.loc 2 1283 0
+ 10595 99b0 8B8508EB 		movl	-5368(%rbp), %eax
+ 10595      FFFF
+ 10596 99b6 89850CEB 		movl	%eax, -5364(%rbp)
+ 10596      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 10597              		.loc 2 1284 0
+ 10598 99bc 8B8504EB 		movl	-5372(%rbp), %eax
+ 10598      FFFF
+ 10599 99c2 898508EB 		movl	%eax, -5368(%rbp)
+ 10599      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 10600              		.loc 2 1285 0
+ 10601 99c8 8B8500EB 		movl	-5376(%rbp), %eax
+ 10601      FFFF
+ 10602 99ce 898504EB 		movl	%eax, -5372(%rbp)
+ 10602      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 10603              		.loc 2 1286 0
+ 10604 99d4 C78500EB 		movl	$0, -5376(%rbp)
+ 10604      FFFF0000 
+ 10604      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 10605              		.loc 2 1287 0
+ 10606 99de F30F6F85 		movdqu	-5376(%rbp), %xmm0
+ 10606      00EBFFFF 
+ 10607              	.LBE1339:
+ 10608              	.LBE1338:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10609              		.loc 2 1568 0
+ 10610 99e6 660F7F85 		movdqa	%xmm0, -6544(%rbp)
+ 10610      70E6FFFF 
+ 10611 99ee 660F6F85 		movdqa	-6544(%rbp), %xmm0
+ 10611      70E6FFFF 
+ 10612 99f6 660FEF85 		pxor	-2656(%rbp), %xmm0
+ 10612      A0F5FFFF 
+ 10613 99fe F30F7F85 		movdqu	%xmm0, -2656(%rbp)
+ 10613      A0F5FFFF 
+ 10614 9a06 660F6F85 		movdqa	-6544(%rbp), %xmm0
+ 10614      70E6FFFF 
+ 10615 9a0e F30F7F85 		movdqu	%xmm0, -2608(%rbp)
+ 10615      D0F5FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 343
+
+
+ 10616              	.LBB1340:
+ 10617              	.LBB1341:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 10618              		.loc 2 1282 0
+ 10619 9a16 F30F6F85 		movdqu	-2608(%rbp), %xmm0
+ 10619      D0F5FFFF 
+ 10620 9a1e F30F7F85 		movdqu	%xmm0, -5360(%rbp)
+ 10620      10EBFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 10621              		.loc 2 1283 0
+ 10622 9a26 8B8518EB 		movl	-5352(%rbp), %eax
+ 10622      FFFF
+ 10623 9a2c 89851CEB 		movl	%eax, -5348(%rbp)
+ 10623      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 10624              		.loc 2 1284 0
+ 10625 9a32 8B8514EB 		movl	-5356(%rbp), %eax
+ 10625      FFFF
+ 10626 9a38 898518EB 		movl	%eax, -5352(%rbp)
+ 10626      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 10627              		.loc 2 1285 0
+ 10628 9a3e 8B8510EB 		movl	-5360(%rbp), %eax
+ 10628      FFFF
+ 10629 9a44 898514EB 		movl	%eax, -5356(%rbp)
+ 10629      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 10630              		.loc 2 1286 0
+ 10631 9a4a C78510EB 		movl	$0, -5360(%rbp)
+ 10631      FFFF0000 
+ 10631      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 10632              		.loc 2 1287 0
+ 10633 9a54 F30F6F85 		movdqu	-5360(%rbp), %xmm0
+ 10633      10EBFFFF 
+ 10634              	.LBE1341:
+ 10635              	.LBE1340:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10636              		.loc 2 1569 0
+ 10637 9a5c 660F7F85 		movdqa	%xmm0, -6544(%rbp)
+ 10637      70E6FFFF 
+ 10638 9a64 660F6F85 		movdqa	-6544(%rbp), %xmm0
+ 10638      70E6FFFF 
+ 10639 9a6c 660FEF85 		pxor	-2656(%rbp), %xmm0
+ 10639      A0F5FFFF 
+ 10640 9a74 F30F7F85 		movdqu	%xmm0, -2656(%rbp)
+ 10640      A0F5FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 10641              		.loc 2 1571 0
+ 10642 9a7c F30F6F85 		movdqu	-2656(%rbp), %xmm0
+ 10642      A0F5FFFF 
+ 10643              	.LBE1335:
+ 10644              	.LBE1334:
+1830:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(ShiftXorColumns) (v4);       /* k22   :k22^k23: k23    : 0            */
+ 10645              		.loc 2 1830 0
+ 10646 9a84 660F7F85 		movdqa	%xmm0, -6784(%rbp)
+ 10646      80E5FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 344
+
+
+1831:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 10647              		.loc 2 1831 0
+ 10648 9a8c 660F6F85 		movdqa	-6768(%rbp), %xmm0
+ 10648      90E5FFFF 
+ 10649 9a94 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 10649      C0E5FFFF 
+ 10650 9a9c 660F6F85 		movdqa	-6720(%rbp), %xmm0
+ 10650      C0E5FFFF 
+ 10651 9aa4 F30F7F85 		movdqu	%xmm0, -2576(%rbp)
+ 10651      F0F5FFFF 
+ 10652              	.LBB1342:
+ 10653              	.LBB1343:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 10654              		.loc 2 1681 0
+ 10655 9aac B8080000 		movl	$8, %eax
+ 10655      00
+ 10656 9ab1 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 10656      00000000 
+ 10657 9ab9 F30F7F85 		movdqu	%xmm0, -2544(%rbp)
+ 10657      10F6FFFF 
+ 10658 9ac1 89850CF6 		movl	%eax, -2548(%rbp)
+ 10658      FFFF
+ 10659              	.LBB1344:
+ 10660              	.LBB1345:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 10661              		.loc 2 522 0
+ 10662 9ac7 F30F6F85 		movdqu	-2544(%rbp), %xmm0
+ 10662      10F6FFFF 
+ 10663 9acf F30F7F85 		movdqu	%xmm0, -5280(%rbp)
+ 10663      60EBFFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 10664              		.loc 2 523 0
+ 10665 9ad7 B8030000 		movl	$3, %eax
+ 10665      00
+ 10666 9adc 4898     		cltq
+ 10667 9ade 8B950CF6 		movl	-2548(%rbp), %edx
+ 10667      FFFF
+ 10668 9ae4 89948560 		movl	%edx, -5280(%rbp,%rax,4)
+ 10668      EBFFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 10669              		.loc 2 524 0
+ 10670 9aeb F30F6F85 		movdqu	-5280(%rbp), %xmm0
+ 10670      60EBFFFF 
+ 10671 9af3 F30F7F85 		movdqu	%xmm0, -2544(%rbp)
+ 10671      10F6FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 10672              		.loc 2 526 0
+ 10673 9afb F30F6F85 		movdqu	-2544(%rbp), %xmm0
+ 10673      10F6FFFF 
+ 10674              	.LBE1345:
+ 10675              	.LBE1344:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 10676              		.loc 2 1681 0
+ 10677 9b03 660F7F85 		movdqa	%xmm0, -6512(%rbp)
+ 10677      90E6FFFF 
+ 10678 9b0b F30F6F85 		movdqu	-2576(%rbp), %xmm0
+ 10678      F0F5FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 345
+
+
+ 10679 9b13 F30F7F85 		movdqu	%xmm0, -2528(%rbp)
+ 10679      20F6FFFF 
+ 10680 9b1b F30F6F85 		movdqu	-2528(%rbp), %xmm0
+ 10680      20F6FFFF 
+ 10681 9b23 F30F7F85 		movdqu	%xmm0, -2496(%rbp)
+ 10681      40F6FFFF 
+ 10682 9b2b 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 10682      000000
+ 10683 9b32 48898538 		movq	%rax, -2504(%rbp)
+ 10683      F6FFFF
+ 10684              	.LBB1346:
+ 10685              	.LBB1347:
+ 10686              	.LBB1348:
+ 10687              	.LBB1349:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 10688              		.loc 2 851 0
+ 10689 9b39 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 10689      00000000 
+ 10690 9b41 F30F7F85 		movdqu	%xmm0, -2464(%rbp)
+ 10690      60F6FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 10691              		.loc 2 854 0
+ 10692 9b49 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 10692      00000000 
+ 10693 9b51 F30F6F8D 		movdqu	-2496(%rbp), %xmm1
+ 10693      40F6FFFF 
+ 10694 9b59 F30F7F8D 		movdqu	%xmm1, -2384(%rbp)
+ 10694      B0F6FFFF 
+ 10695 9b61 F30F7F85 		movdqu	%xmm0, -2400(%rbp)
+ 10695      A0F6FFFF 
+ 10696              	.LBB1350:
+ 10697              	.LBB1351:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 10698              		.loc 2 206 0
+ 10699 9b69 F30F6F85 		movdqu	-2400(%rbp), %xmm0
+ 10699      A0F6FFFF 
+ 10700 9b71 F30F6F8D 		movdqu	-2384(%rbp), %xmm1
+ 10700      B0F6FFFF 
+ 10701 9b79 660FDBC1 		pand	%xmm1, %xmm0
+ 10702              	.LBE1351:
+ 10703              	.LBE1350:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 10704              		.loc 2 854 0
+ 10705 9b7d F30F7F85 		movdqu	%xmm0, -2416(%rbp)
+ 10705      90F6FFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 10706              		.loc 2 862 0
+ 10707 9b85 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 10707      00000000 
+ 10708 9b8d F30F6F8D 		movdqu	-2496(%rbp), %xmm1
+ 10708      40F6FFFF 
+ 10709 9b95 F30F7F8D 		movdqu	%xmm1, -2352(%rbp)
+ 10709      D0F6FFFF 
+ 10710 9b9d F30F7F85 		movdqu	%xmm0, -2368(%rbp)
+ 10710      C0F6FFFF 
+ 10711              	.LBB1352:
+ 10712              		.loc 2 2642 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 346
+
+
+ 10713 9ba5 0FB685D0 		movzbl	-2352(%rbp), %eax
+ 10713      F6FFFF
+ 10714 9bac 0FB695C0 		movzbl	-2368(%rbp), %edx
+ 10714      F6FFFF
+ 10715 9bb3 0FB6C0   		movzbl	%al, %eax
+ 10716 9bb6 6689852E 		movw	%ax, -6866(%rbp)
+ 10716      E5FFFF
+ 10717 9bbd 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 10717      E5FFFF
+ 10718 9bc4 F6F2     		divb	%dl
+ 10719 9bc6 4189C7   		movl	%eax, %r15d
+ 10720 9bc9 0FB685D1 		movzbl	-2351(%rbp), %eax
+ 10720      F6FFFF
+ 10721 9bd0 0FB695C1 		movzbl	-2367(%rbp), %edx
+ 10721      F6FFFF
+ 10722 9bd7 0FB6C0   		movzbl	%al, %eax
+ 10723 9bda 6689852E 		movw	%ax, -6866(%rbp)
+ 10723      E5FFFF
+ 10724 9be1 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 10724      E5FFFF
+ 10725 9be8 F6F2     		divb	%dl
+ 10726 9bea 8885AFE6 		movb	%al, -6481(%rbp)
+ 10726      FFFF
+ 10727 9bf0 0FB685D2 		movzbl	-2350(%rbp), %eax
+ 10727      F6FFFF
+ 10728 9bf7 0FB695C2 		movzbl	-2366(%rbp), %edx
+ 10728      F6FFFF
+ 10729 9bfe 0FB6C0   		movzbl	%al, %eax
+ 10730 9c01 6689852E 		movw	%ax, -6866(%rbp)
+ 10730      E5FFFF
+ 10731 9c08 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 10731      E5FFFF
+ 10732 9c0f F6F2     		divb	%dl
+ 10733 9c11 8885AEE6 		movb	%al, -6482(%rbp)
+ 10733      FFFF
+ 10734 9c17 0FB685D3 		movzbl	-2349(%rbp), %eax
+ 10734      F6FFFF
+ 10735 9c1e 0FB695C3 		movzbl	-2365(%rbp), %edx
+ 10735      F6FFFF
+ 10736 9c25 0FB6C0   		movzbl	%al, %eax
+ 10737 9c28 6689852E 		movw	%ax, -6866(%rbp)
+ 10737      E5FFFF
+ 10738 9c2f 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 10738      E5FFFF
+ 10739 9c36 F6F2     		divb	%dl
+ 10740 9c38 8885ADE6 		movb	%al, -6483(%rbp)
+ 10740      FFFF
+ 10741 9c3e 0FB685D4 		movzbl	-2348(%rbp), %eax
+ 10741      F6FFFF
+ 10742 9c45 0FB695C4 		movzbl	-2364(%rbp), %edx
+ 10742      F6FFFF
+ 10743 9c4c 0FB6C0   		movzbl	%al, %eax
+ 10744 9c4f 6689852E 		movw	%ax, -6866(%rbp)
+ 10744      E5FFFF
+ 10745 9c56 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 10745      E5FFFF
+ 10746 9c5d F6F2     		divb	%dl
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 347
+
+
+ 10747 9c5f 8885ACE6 		movb	%al, -6484(%rbp)
+ 10747      FFFF
+ 10748 9c65 0FB685D5 		movzbl	-2347(%rbp), %eax
+ 10748      F6FFFF
+ 10749 9c6c 0FB695C5 		movzbl	-2363(%rbp), %edx
+ 10749      F6FFFF
+ 10750 9c73 0FB6C0   		movzbl	%al, %eax
+ 10751 9c76 6689852E 		movw	%ax, -6866(%rbp)
+ 10751      E5FFFF
+ 10752 9c7d 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 10752      E5FFFF
+ 10753 9c84 F6F2     		divb	%dl
+ 10754 9c86 4189C1   		movl	%eax, %r9d
+ 10755 9c89 0FB685D6 		movzbl	-2346(%rbp), %eax
+ 10755      F6FFFF
+ 10756 9c90 0FB695C6 		movzbl	-2362(%rbp), %edx
+ 10756      F6FFFF
+ 10757 9c97 0FB6C0   		movzbl	%al, %eax
+ 10758 9c9a 6689852E 		movw	%ax, -6866(%rbp)
+ 10758      E5FFFF
+ 10759 9ca1 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 10759      E5FFFF
+ 10760 9ca8 F6F2     		divb	%dl
+ 10761 9caa 89C7     		movl	%eax, %edi
+ 10762 9cac 0FB685D7 		movzbl	-2345(%rbp), %eax
+ 10762      F6FFFF
+ 10763 9cb3 0FB695C7 		movzbl	-2361(%rbp), %edx
+ 10763      F6FFFF
+ 10764 9cba 0FB6C0   		movzbl	%al, %eax
+ 10765 9cbd 6689852E 		movw	%ax, -6866(%rbp)
+ 10765      E5FFFF
+ 10766 9cc4 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 10766      E5FFFF
+ 10767 9ccb F6F2     		divb	%dl
+ 10768 9ccd 89C3     		movl	%eax, %ebx
+ 10769 9ccf 0FB685D8 		movzbl	-2344(%rbp), %eax
+ 10769      F6FFFF
+ 10770 9cd6 0FB695C8 		movzbl	-2360(%rbp), %edx
+ 10770      F6FFFF
+ 10771 9cdd 0FB6C0   		movzbl	%al, %eax
+ 10772 9ce0 6689852E 		movw	%ax, -6866(%rbp)
+ 10772      E5FFFF
+ 10773 9ce7 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 10773      E5FFFF
+ 10774 9cee F6F2     		divb	%dl
+ 10775 9cf0 4189C2   		movl	%eax, %r10d
+ 10776 9cf3 0FB685D9 		movzbl	-2343(%rbp), %eax
+ 10776      F6FFFF
+ 10777 9cfa 0FB695C9 		movzbl	-2359(%rbp), %edx
+ 10777      F6FFFF
+ 10778 9d01 0FB6C0   		movzbl	%al, %eax
+ 10779 9d04 6689852E 		movw	%ax, -6866(%rbp)
+ 10779      E5FFFF
+ 10780 9d0b 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 10780      E5FFFF
+ 10781 9d12 F6F2     		divb	%dl
+ 10782 9d14 4189C3   		movl	%eax, %r11d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 348
+
+
+ 10783 9d17 0FB685DA 		movzbl	-2342(%rbp), %eax
+ 10783      F6FFFF
+ 10784 9d1e 0FB695CA 		movzbl	-2358(%rbp), %edx
+ 10784      F6FFFF
+ 10785 9d25 0FB6C0   		movzbl	%al, %eax
+ 10786 9d28 6689852E 		movw	%ax, -6866(%rbp)
+ 10786      E5FFFF
+ 10787 9d2f 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 10787      E5FFFF
+ 10788 9d36 F6F2     		divb	%dl
+ 10789 9d38 4189C4   		movl	%eax, %r12d
+ 10790 9d3b 0FB685DB 		movzbl	-2341(%rbp), %eax
+ 10790      F6FFFF
+ 10791 9d42 0FB695CB 		movzbl	-2357(%rbp), %edx
+ 10791      F6FFFF
+ 10792 9d49 0FB6C0   		movzbl	%al, %eax
+ 10793 9d4c 6689852E 		movw	%ax, -6866(%rbp)
+ 10793      E5FFFF
+ 10794 9d53 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 10794      E5FFFF
+ 10795 9d5a F6F2     		divb	%dl
+ 10796 9d5c 4189C5   		movl	%eax, %r13d
+ 10797 9d5f 0FB685DC 		movzbl	-2340(%rbp), %eax
+ 10797      F6FFFF
+ 10798 9d66 0FB695CC 		movzbl	-2356(%rbp), %edx
+ 10798      F6FFFF
+ 10799 9d6d 0FB6C0   		movzbl	%al, %eax
+ 10800 9d70 6689852E 		movw	%ax, -6866(%rbp)
+ 10800      E5FFFF
+ 10801 9d77 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 10801      E5FFFF
+ 10802 9d7e F6F2     		divb	%dl
+ 10803 9d80 4189C6   		movl	%eax, %r14d
+ 10804 9d83 0FB685DD 		movzbl	-2339(%rbp), %eax
+ 10804      F6FFFF
+ 10805 9d8a 0FB695CD 		movzbl	-2355(%rbp), %edx
+ 10805      F6FFFF
+ 10806 9d91 0FB6C0   		movzbl	%al, %eax
+ 10807 9d94 6689852E 		movw	%ax, -6866(%rbp)
+ 10807      E5FFFF
+ 10808 9d9b 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 10808      E5FFFF
+ 10809 9da2 F6F2     		divb	%dl
+ 10810 9da4 4189C0   		movl	%eax, %r8d
+ 10811 9da7 0FB685DE 		movzbl	-2338(%rbp), %eax
+ 10811      F6FFFF
+ 10812 9dae 0FB695CE 		movzbl	-2354(%rbp), %edx
+ 10812      F6FFFF
+ 10813 9db5 0FB6C0   		movzbl	%al, %eax
+ 10814 9db8 6689852E 		movw	%ax, -6866(%rbp)
+ 10814      E5FFFF
+ 10815 9dbf 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 10815      E5FFFF
+ 10816 9dc6 F6F2     		divb	%dl
+ 10817 9dc8 89C6     		movl	%eax, %esi
+ 10818 9dca 0FB685DF 		movzbl	-2337(%rbp), %eax
+ 10818      F6FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 349
+
+
+ 10819 9dd1 0FB695CF 		movzbl	-2353(%rbp), %edx
+ 10819      F6FFFF
+ 10820 9dd8 0FB6C0   		movzbl	%al, %eax
+ 10821 9ddb 6689852E 		movw	%ax, -6866(%rbp)
+ 10821      E5FFFF
+ 10822 9de2 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 10822      E5FFFF
+ 10823 9de9 F6F2     		divb	%dl
+ 10824 9deb 89C1     		movl	%eax, %ecx
+ 10825              	.LBB1353:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 10826              		.loc 2 346 0
+ 10827 9ded 0FB6D3   		movzbl	%bl, %edx
+ 10828 9df0 400FB6C7 		movzbl	%dil, %eax
+ 10829 9df4 48C1E208 		salq	$8, %rdx
+ 10830 9df8 4809C2   		orq	%rax, %rdx
+ 10831 9dfb 410FB6C1 		movzbl	%r9b, %eax
+ 10832 9dff 48C1E208 		salq	$8, %rdx
+ 10833 9e03 4809C2   		orq	%rax, %rdx
+ 10834 9e06 0FB685AC 		movzbl	-6484(%rbp), %eax
+ 10834      E6FFFF
+ 10835 9e0d 48C1E208 		salq	$8, %rdx
+ 10836 9e11 4809C2   		orq	%rax, %rdx
+ 10837 9e14 0FB685AD 		movzbl	-6483(%rbp), %eax
+ 10837      E6FFFF
+ 10838 9e1b 48C1E208 		salq	$8, %rdx
+ 10839 9e1f 4809C2   		orq	%rax, %rdx
+ 10840 9e22 0FB685AE 		movzbl	-6482(%rbp), %eax
+ 10840      E6FFFF
+ 10841 9e29 48C1E208 		salq	$8, %rdx
+ 10842 9e2d 4809C2   		orq	%rax, %rdx
+ 10843 9e30 0FB685AF 		movzbl	-6481(%rbp), %eax
+ 10843      E6FFFF
+ 10844 9e37 48C1E208 		salq	$8, %rdx
+ 10845 9e3b 4809C2   		orq	%rax, %rdx
+ 10846 9e3e 410FB6C7 		movzbl	%r15b, %eax
+ 10847 9e42 48C1E208 		salq	$8, %rdx
+ 10848 9e46 4809C2   		orq	%rax, %rdx
+ 10849 9e49 0FB6C1   		movzbl	%cl, %eax
+ 10850 9e4c 400FB6CE 		movzbl	%sil, %ecx
+ 10851 9e50 48C1E008 		salq	$8, %rax
+ 10852 9e54 4809C8   		orq	%rcx, %rax
+ 10853 9e57 410FB6C8 		movzbl	%r8b, %ecx
+ 10854 9e5b 48C1E008 		salq	$8, %rax
+ 10855 9e5f 4809C8   		orq	%rcx, %rax
+ 10856 9e62 410FB6CE 		movzbl	%r14b, %ecx
+ 10857 9e66 48C1E008 		salq	$8, %rax
+ 10858 9e6a 4809C8   		orq	%rcx, %rax
+ 10859 9e6d 410FB6CD 		movzbl	%r13b, %ecx
+ 10860 9e71 48C1E008 		salq	$8, %rax
+ 10861 9e75 4809C8   		orq	%rcx, %rax
+ 10862 9e78 410FB6CC 		movzbl	%r12b, %ecx
+ 10863 9e7c 48C1E008 		salq	$8, %rax
+ 10864 9e80 4809C8   		orq	%rcx, %rax
+ 10865 9e83 410FB6CB 		movzbl	%r11b, %ecx
+ 10866 9e87 48C1E008 		salq	$8, %rax
+ 10867 9e8b 4809C8   		orq	%rcx, %rax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 350
+
+
+ 10868 9e8e 410FB6CA 		movzbl	%r10b, %ecx
+ 10869 9e92 48C1E008 		salq	$8, %rax
+ 10870 9e96 4809C8   		orq	%rcx, %rax
+ 10871 9e99 48899550 		movq	%rdx, -6832(%rbp)
+ 10871      E5FFFF
+ 10872 9ea0 48898558 		movq	%rax, -6824(%rbp)
+ 10872      E5FFFF
+ 10873 9ea7 660F6F85 		movdqa	-6832(%rbp), %xmm0
+ 10873      50E5FFFF 
+ 10874              	.LBE1353:
+ 10875              	.LBE1352:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 10876              		.loc 2 862 0
+ 10877 9eaf F30F7F85 		movdqu	%xmm0, -2432(%rbp)
+ 10877      80F6FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 10878              		.loc 2 866 0
+ 10879 9eb7 C7855CF6 		movl	$0, -2468(%rbp)
+ 10879      FFFF0000 
+ 10879      0000
+ 10880 9ec1 E9860200 		jmp	.L252
+ 10880      00
+ 10881              	.L261:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 10882              		.loc 2 868 0
+ 10883 9ec6 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 10883      00000000 
+ 10884 9ece F30F7F85 		movdqu	%xmm0, -2320(%rbp)
+ 10884      F0F6FFFF 
+ 10885 9ed6 F30F6F85 		movdqu	-2432(%rbp), %xmm0
+ 10885      80F6FFFF 
+ 10886 9ede F30F7F85 		movdqu	%xmm0, -2336(%rbp)
+ 10886      E0F6FFFF 
+ 10887              	.LBB1354:
+ 10888              	.LBB1355:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 10889              		.loc 2 380 0
+ 10890 9ee6 F30F6F85 		movdqu	-2320(%rbp), %xmm0
+ 10890      F0F6FFFF 
+ 10891 9eee F30F7F85 		movdqu	%xmm0, -5248(%rbp)
+ 10891      80EBFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 10892              		.loc 2 381 0
+ 10893 9ef6 F30F6F85 		movdqu	-2336(%rbp), %xmm0
+ 10893      E0F6FFFF 
+ 10894 9efe F30F7F85 		movdqu	%xmm0, -5264(%rbp)
+ 10894      70EBFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 10895              		.loc 2 383 0
+ 10896 9f06 C7850CF7 		movl	$0, -2292(%rbp)
+ 10896      FFFF0000 
+ 10896      0000
+ 10897 9f10 EB5C     		jmp	.L253
+ 10898              	.L256:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 10899              		.loc 2 385 0
+ 10900 9f12 8B850CF7 		movl	-2292(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 351
+
+
+ 10900      FFFF
+ 10901 9f18 89C0     		mov	%eax, %eax
+ 10902 9f1a 0FB68405 		movzbl	-5264(%rbp,%rax), %eax
+ 10902      70EBFFFF 
+ 10903 9f22 84C0     		testb	%al, %al
+ 10904 9f24 7912     		jns	.L254
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 10905              		.loc 2 386 0
+ 10906 9f26 8B850CF7 		movl	-2292(%rbp), %eax
+ 10906      FFFF
+ 10907 9f2c 89C0     		mov	%eax, %eax
+ 10908 9f2e C6840590 		movb	$0, -5232(%rbp,%rax)
+ 10908      EBFFFF00 
+ 10909 9f36 EB2F     		jmp	.L255
+ 10910              	.L254:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 10911              		.loc 2 388 0
+ 10912 9f38 8B8D0CF7 		movl	-2292(%rbp), %ecx
+ 10912      FFFF
+ 10913 9f3e 8B850CF7 		movl	-2292(%rbp), %eax
+ 10913      FFFF
+ 10914 9f44 89C0     		mov	%eax, %eax
+ 10915 9f46 0FB68405 		movzbl	-5264(%rbp,%rax), %eax
+ 10915      70EBFFFF 
+ 10916 9f4e 0FB6C0   		movzbl	%al, %eax
+ 10917 9f51 83E00F   		andl	$15, %eax
+ 10918 9f54 4898     		cltq
+ 10919 9f56 0FB69405 		movzbl	-5248(%rbp,%rax), %edx
+ 10919      80EBFFFF 
+ 10920 9f5e 89C8     		mov	%ecx, %eax
+ 10921 9f60 88940590 		movb	%dl, -5232(%rbp,%rax)
+ 10921      EBFFFF
+ 10922              	.L255:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 10923              		.loc 2 383 0
+ 10924 9f67 83850CF7 		addl	$1, -2292(%rbp)
+ 10924      FFFF01
+ 10925              	.L253:
+ 10926 9f6e 83BD0CF7 		cmpl	$15, -2292(%rbp)
+ 10926      FFFF0F
+ 10927 9f75 769B     		jbe	.L256
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 10928              		.loc 2 391 0
+ 10929 9f77 F30F6F85 		movdqu	-5232(%rbp), %xmm0
+ 10929      90EBFFFF 
+ 10930              	.LBE1355:
+ 10931              	.LBE1354:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 10932              		.loc 2 868 0
+ 10933 9f7f F30F7F85 		movdqu	%xmm0, -2448(%rbp)
+ 10933      70F6FFFF 
+ 10934 9f87 F30F6F85 		movdqu	-2416(%rbp), %xmm0
+ 10934      90F6FFFF 
+ 10935 9f8f F30F7F85 		movdqu	%xmm0, -2272(%rbp)
+ 10935      20F7FFFF 
+ 10936 9f97 F30F6F85 		movdqu	-2448(%rbp), %xmm0
+ 10936      70F6FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 352
+
+
+ 10937 9f9f F30F7F85 		movdqu	%xmm0, -2288(%rbp)
+ 10937      10F7FFFF 
+ 10938              	.LBB1356:
+ 10939              	.LBB1357:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 10940              		.loc 2 234 0
+ 10941 9fa7 F30F6F85 		movdqu	-2288(%rbp), %xmm0
+ 10941      10F7FFFF 
+ 10942 9faf F30F6F8D 		movdqu	-2272(%rbp), %xmm1
+ 10942      20F7FFFF 
+ 10943 9fb7 660FEBC1 		por	%xmm1, %xmm0
+ 10944              	.LBE1357:
+ 10945              	.LBE1356:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 10946              		.loc 2 870 0
+ 10947 9fbb F30F7F85 		movdqu	%xmm0, -2448(%rbp)
+ 10947      70F6FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 10948              		.loc 2 872 0
+ 10949 9fc3 8B855CF6 		mov	-2468(%rbp), %eax
+ 10949      FFFF
+ 10950 9fc9 48C1E004 		salq	$4, %rax
+ 10951 9fcd 48038538 		addq	-2504(%rbp), %rax
+ 10951      F6FFFF
+ 10952 9fd4 660F6F00 		movdqa	(%rax), %xmm0
+ 10953 9fd8 F30F7F85 		movdqu	%xmm0, -2240(%rbp)
+ 10953      40F7FFFF 
+ 10954 9fe0 F30F6F85 		movdqu	-2448(%rbp), %xmm0
+ 10954      70F6FFFF 
+ 10955 9fe8 F30F7F85 		movdqu	%xmm0, -2256(%rbp)
+ 10955      30F7FFFF 
+ 10956              	.LBB1358:
+ 10957              	.LBB1359:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 10958              		.loc 2 380 0
+ 10959 9ff0 F30F6F85 		movdqu	-2240(%rbp), %xmm0
+ 10959      40F7FFFF 
+ 10960 9ff8 F30F7F85 		movdqu	%xmm0, -5200(%rbp)
+ 10960      B0EBFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 10961              		.loc 2 381 0
+ 10962 a000 F30F6F85 		movdqu	-2256(%rbp), %xmm0
+ 10962      30F7FFFF 
+ 10963 a008 F30F7F85 		movdqu	%xmm0, -5216(%rbp)
+ 10963      A0EBFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 10964              		.loc 2 383 0
+ 10965 a010 C7855CF7 		movl	$0, -2212(%rbp)
+ 10965      FFFF0000 
+ 10965      0000
+ 10966 a01a EB5C     		jmp	.L257
+ 10967              	.L260:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 10968              		.loc 2 385 0
+ 10969 a01c 8B855CF7 		movl	-2212(%rbp), %eax
+ 10969      FFFF
+ 10970 a022 89C0     		mov	%eax, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 353
+
+
+ 10971 a024 0FB68405 		movzbl	-5216(%rbp,%rax), %eax
+ 10971      A0EBFFFF 
+ 10972 a02c 84C0     		testb	%al, %al
+ 10973 a02e 7912     		jns	.L258
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 10974              		.loc 2 386 0
+ 10975 a030 8B855CF7 		movl	-2212(%rbp), %eax
+ 10975      FFFF
+ 10976 a036 89C0     		mov	%eax, %eax
+ 10977 a038 C68405C0 		movb	$0, -5184(%rbp,%rax)
+ 10977      EBFFFF00 
+ 10978 a040 EB2F     		jmp	.L259
+ 10979              	.L258:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 10980              		.loc 2 388 0
+ 10981 a042 8B8D5CF7 		movl	-2212(%rbp), %ecx
+ 10981      FFFF
+ 10982 a048 8B855CF7 		movl	-2212(%rbp), %eax
+ 10982      FFFF
+ 10983 a04e 89C0     		mov	%eax, %eax
+ 10984 a050 0FB68405 		movzbl	-5216(%rbp,%rax), %eax
+ 10984      A0EBFFFF 
+ 10985 a058 0FB6C0   		movzbl	%al, %eax
+ 10986 a05b 83E00F   		andl	$15, %eax
+ 10987 a05e 4898     		cltq
+ 10988 a060 0FB69405 		movzbl	-5200(%rbp,%rax), %edx
+ 10988      B0EBFFFF 
+ 10989 a068 89C8     		mov	%ecx, %eax
+ 10990 a06a 889405C0 		movb	%dl, -5184(%rbp,%rax)
+ 10990      EBFFFF
+ 10991              	.L259:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 10992              		.loc 2 383 0
+ 10993 a071 83855CF7 		addl	$1, -2212(%rbp)
+ 10993      FFFF01
+ 10994              	.L257:
+ 10995 a078 83BD5CF7 		cmpl	$15, -2212(%rbp)
+ 10995      FFFF0F
+ 10996 a07f 769B     		jbe	.L260
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 10997              		.loc 2 391 0
+ 10998 a081 F30F6F85 		movdqu	-5184(%rbp), %xmm0
+ 10998      C0EBFFFF 
+ 10999              	.LBE1359:
+ 11000              	.LBE1358:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 11001              		.loc 2 872 0
+ 11002 a089 F30F7F85 		movdqu	%xmm0, -2448(%rbp)
+ 11002      70F6FFFF 
+ 11003 a091 F30F6F85 		movdqu	-2464(%rbp), %xmm0
+ 11003      60F6FFFF 
+ 11004 a099 F30F7F85 		movdqu	%xmm0, -2192(%rbp)
+ 11004      70F7FFFF 
+ 11005 a0a1 F30F6F85 		movdqu	-2448(%rbp), %xmm0
+ 11005      70F6FFFF 
+ 11006 a0a9 F30F7F85 		movdqu	%xmm0, -2208(%rbp)
+ 11006      60F7FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 354
+
+
+ 11007              	.LBB1360:
+ 11008              	.LBB1361:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 11009              		.loc 2 234 0
+ 11010 a0b1 F30F6F85 		movdqu	-2208(%rbp), %xmm0
+ 11010      60F7FFFF 
+ 11011 a0b9 F30F6F8D 		movdqu	-2192(%rbp), %xmm1
+ 11011      70F7FFFF 
+ 11012 a0c1 660FEBC1 		por	%xmm1, %xmm0
+ 11013              	.LBE1361:
+ 11014              	.LBE1360:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 11015              		.loc 2 874 0
+ 11016 a0c5 F30F7F85 		movdqu	%xmm0, -2464(%rbp)
+ 11016      60F6FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 11017              		.loc 2 876 0
+ 11018 a0cd 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 11018      00000000 
+ 11019 a0d5 F30F6F8D 		movdqu	-2432(%rbp), %xmm1
+ 11019      80F6FFFF 
+ 11020 a0dd F30F7F8D 		movdqu	%xmm1, -2160(%rbp)
+ 11020      90F7FFFF 
+ 11021 a0e5 F30F7F85 		movdqu	%xmm0, -2176(%rbp)
+ 11021      80F7FFFF 
+ 11022              	.LBB1362:
+ 11023              	.LBB1363:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 11024              		.loc 2 290 0
+ 11025 a0ed F30F6F8D 		movdqu	-2176(%rbp), %xmm1
+ 11025      80F7FFFF 
+ 11026 a0f5 F30F6F85 		movdqu	-2160(%rbp), %xmm0
+ 11026      90F7FFFF 
+ 11027 a0fd 660FF8C1 		psubb	%xmm1, %xmm0
+ 11028              	.LBE1363:
+ 11029              	.LBE1362:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 11030              		.loc 2 876 0
+ 11031 a101 F30F7F85 		movdqu	%xmm0, -2432(%rbp)
+ 11031      80F6FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 11032              		.loc 2 878 0
+ 11033 a109 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 11033      00000000 
+ 11034 a111 F30F6F8D 		movdqu	-2432(%rbp), %xmm1
+ 11034      80F6FFFF 
+ 11035 a119 F30F7F8D 		movdqu	%xmm1, -2128(%rbp)
+ 11035      B0F7FFFF 
+ 11036 a121 F30F7F85 		movdqu	%xmm0, -2144(%rbp)
+ 11036      A0F7FFFF 
+ 11037              	.LBB1364:
+ 11038              	.LBB1365:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 11039              		.loc 2 206 0
+ 11040 a129 F30F6F85 		movdqu	-2144(%rbp), %xmm0
+ 11040      A0F7FFFF 
+ 11041 a131 F30F6F8D 		movdqu	-2128(%rbp), %xmm1
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 355
+
+
+ 11041      B0F7FFFF 
+ 11042 a139 660FDBC1 		pand	%xmm1, %xmm0
+ 11043              	.LBE1365:
+ 11044              	.LBE1364:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 11045              		.loc 2 878 0
+ 11046 a13d F30F7F85 		movdqu	%xmm0, -2432(%rbp)
+ 11046      80F6FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 11047              		.loc 2 866 0
+ 11048 a145 83855CF6 		addl	$1, -2468(%rbp)
+ 11048      FFFF01
+ 11049              	.L252:
+ 11050 a14c 83BD5CF6 		cmpl	$15, -2468(%rbp)
+ 11050      FFFF0F
+ 11051 a153 0F866DFD 		jbe	.L261
+ 11051      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 11052              		.loc 2 882 0
+ 11053 a159 F30F6F85 		movdqu	-2464(%rbp), %xmm0
+ 11053      60F6FFFF 
+ 11054              	.LBE1349:
+ 11055              	.LBE1348:
+ 11056              	.LBE1347:
+ 11057              	.LBE1346:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 11058              		.loc 2 1682 0
+ 11059 a161 660F7F85 		movdqa	%xmm0, -6528(%rbp)
+ 11059      80E6FFFF 
+ 11060              	.LBB1366:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 11061              		.loc 2 1683 0
+ 11062 a169 660F6F85 		movdqa	-6528(%rbp), %xmm0
+ 11062      80E6FFFF 
+ 11063 a171 F30F7F85 		movdqu	%xmm0, -5296(%rbp)
+ 11063      50EBFFFF 
+ 11064 a179 E8000000 		call	KDbgWriterGet at PLT
+ 11064      00
+ 11065 a17e 4885C0   		testq	%rax, %rax
+ 11066 a181 7479     		je	.L263
+ 11067 a183 BF010000 		movl	$1, %edi
+ 11067      00
+ 11068 a188 E8000000 		call	KDbgCondToFlag at PLT
+ 11068      00
+ 11069 a18d 4889C6   		movq	%rax, %rsi
+ 11070 a190 BF100000 		movl	$16, %edi
+ 11070      00
+ 11071 a195 E8000000 		call	KDbgTestModConds at PLT
+ 11071      00
+ 11072 a19a 84C0     		testb	%al, %al
+ 11073 a19c 745E     		je	.L263
+ 11074 a19e 8B855CEB 		movl	-5284(%rbp), %eax
+ 11074      FFFF
+ 11075 a1a4 89C7     		movl	%eax, %edi
+ 11076 a1a6 E8555EFF 		call	bswap_32
+ 11076      FF
+ 11077 a1ab 4189C5   		movl	%eax, %r13d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 356
+
+
+ 11078 a1ae 8B8558EB 		movl	-5288(%rbp), %eax
+ 11078      FFFF
+ 11079 a1b4 89C7     		movl	%eax, %edi
+ 11080 a1b6 E8455EFF 		call	bswap_32
+ 11080      FF
+ 11081 a1bb 4189C4   		movl	%eax, %r12d
+ 11082 a1be 8B8554EB 		movl	-5292(%rbp), %eax
+ 11082      FFFF
+ 11083 a1c4 89C7     		movl	%eax, %edi
+ 11084 a1c6 E8355EFF 		call	bswap_32
+ 11084      FF
+ 11085 a1cb 89C3     		movl	%eax, %ebx
+ 11086 a1cd 8B8550EB 		movl	-5296(%rbp), %eax
+ 11086      FFFF
+ 11087 a1d3 89C7     		movl	%eax, %edi
+ 11088 a1d5 E8265EFF 		call	bswap_32
+ 11088      FF
+ 11089 a1da 4589E9   		movl	%r13d, %r9d
+ 11090 a1dd 4589E0   		movl	%r12d, %r8d
+ 11091 a1e0 89D9     		movl	%ebx, %ecx
+ 11092 a1e2 89C2     		movl	%eax, %edx
+ 11093 a1e4 488D3500 		leaq	.LC0(%rip), %rsi
+ 11093      000000
+ 11094 a1eb 488D3D00 		leaq	.LC1(%rip), %rdi
+ 11094      000000
+ 11095 a1f2 B8000000 		movl	$0, %eax
+ 11095      00
+ 11096 a1f7 E8000000 		call	KDbgMsg at PLT
+ 11096      00
+ 11097              	.L263:
+ 11098 a1fc 660F6F85 		movdqa	-6528(%rbp), %xmm0
+ 11098      80E6FFFF 
+ 11099 a204 F30F7F85 		movdqu	%xmm0, -2112(%rbp)
+ 11099      C0F7FFFF 
+ 11100              	.LBE1366:
+ 11101              	.LBB1367:
+ 11102              	.LBB1368:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 11103              		.loc 2 667 0
+ 11104 a20c 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 11104      00000000 
+ 11105 a214 F30F6F8D 		movdqu	-2112(%rbp), %xmm1
+ 11105      C0F7FFFF 
+ 11106 a21c F30F7F8D 		movdqu	%xmm1, -2080(%rbp)
+ 11106      E0F7FFFF 
+ 11107 a224 F30F7F85 		movdqu	%xmm0, -2096(%rbp)
+ 11107      D0F7FFFF 
+ 11108              	.LBB1369:
+ 11109              	.LBB1370:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 11110              		.loc 2 380 0
+ 11111 a22c F30F6F85 		movdqu	-2080(%rbp), %xmm0
+ 11111      E0F7FFFF 
+ 11112 a234 F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 11112      E0EBFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 11113              		.loc 2 381 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 357
+
+
+ 11114 a23c F30F6F85 		movdqu	-2096(%rbp), %xmm0
+ 11114      D0F7FFFF 
+ 11115 a244 F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 11115      D0EBFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 11116              		.loc 2 383 0
+ 11117 a24c C785FCF7 		movl	$0, -2052(%rbp)
+ 11117      FFFF0000 
+ 11117      0000
+ 11118 a256 EB5C     		jmp	.L264
+ 11119              	.L267:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 11120              		.loc 2 385 0
+ 11121 a258 8B85FCF7 		movl	-2052(%rbp), %eax
+ 11121      FFFF
+ 11122 a25e 89C0     		mov	%eax, %eax
+ 11123 a260 0FB68405 		movzbl	-5168(%rbp,%rax), %eax
+ 11123      D0EBFFFF 
+ 11124 a268 84C0     		testb	%al, %al
+ 11125 a26a 7912     		jns	.L265
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 11126              		.loc 2 386 0
+ 11127 a26c 8B85FCF7 		movl	-2052(%rbp), %eax
+ 11127      FFFF
+ 11128 a272 89C0     		mov	%eax, %eax
+ 11129 a274 C68405F0 		movb	$0, -5136(%rbp,%rax)
+ 11129      EBFFFF00 
+ 11130 a27c EB2F     		jmp	.L266
+ 11131              	.L265:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 11132              		.loc 2 388 0
+ 11133 a27e 8B8DFCF7 		movl	-2052(%rbp), %ecx
+ 11133      FFFF
+ 11134 a284 8B85FCF7 		movl	-2052(%rbp), %eax
+ 11134      FFFF
+ 11135 a28a 89C0     		mov	%eax, %eax
+ 11136 a28c 0FB68405 		movzbl	-5168(%rbp,%rax), %eax
+ 11136      D0EBFFFF 
+ 11137 a294 0FB6C0   		movzbl	%al, %eax
+ 11138 a297 83E00F   		andl	$15, %eax
+ 11139 a29a 4898     		cltq
+ 11140 a29c 0FB69405 		movzbl	-5152(%rbp,%rax), %edx
+ 11140      E0EBFFFF 
+ 11141 a2a4 89C8     		mov	%ecx, %eax
+ 11142 a2a6 889405F0 		movb	%dl, -5136(%rbp,%rax)
+ 11142      EBFFFF
+ 11143              	.L266:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 11144              		.loc 2 383 0
+ 11145 a2ad 8385FCF7 		addl	$1, -2052(%rbp)
+ 11145      FFFF01
+ 11146              	.L264:
+ 11147 a2b4 83BDFCF7 		cmpl	$15, -2052(%rbp)
+ 11147      FFFF0F
+ 11148 a2bb 769B     		jbe	.L267
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 11149              		.loc 2 391 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 358
+
+
+ 11150 a2bd F30F6F85 		movdqu	-5136(%rbp), %xmm0
+ 11150      F0EBFFFF 
+ 11151              	.LBE1370:
+ 11152              	.LBE1369:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 11153              		.loc 2 667 0
+ 11154 a2c5 F30F7F85 		movdqu	%xmm0, -2112(%rbp)
+ 11154      C0F7FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 11155              		.loc 2 668 0
+ 11156 a2cd F30F6F85 		movdqu	-2112(%rbp), %xmm0
+ 11156      C0F7FFFF 
+ 11157              	.LBE1368:
+ 11158              	.LBE1367:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 11159              		.loc 2 1684 0
+ 11160 a2d5 660F7F85 		movdqa	%xmm0, -6528(%rbp)
+ 11160      80E6FFFF 
+ 11161              	.LBB1371:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 11162              		.loc 2 1685 0
+ 11163 a2dd 660F6F85 		movdqa	-6528(%rbp), %xmm0
+ 11163      80E6FFFF 
+ 11164 a2e5 F30F7F85 		movdqu	%xmm0, -5312(%rbp)
+ 11164      40EBFFFF 
+ 11165 a2ed E8000000 		call	KDbgWriterGet at PLT
+ 11165      00
+ 11166 a2f2 4885C0   		testq	%rax, %rax
+ 11167 a2f5 7479     		je	.L269
+ 11168 a2f7 BF010000 		movl	$1, %edi
+ 11168      00
+ 11169 a2fc E8000000 		call	KDbgCondToFlag at PLT
+ 11169      00
+ 11170 a301 4889C6   		movq	%rax, %rsi
+ 11171 a304 BF100000 		movl	$16, %edi
+ 11171      00
+ 11172 a309 E8000000 		call	KDbgTestModConds at PLT
+ 11172      00
+ 11173 a30e 84C0     		testb	%al, %al
+ 11174 a310 745E     		je	.L269
+ 11175 a312 8B854CEB 		movl	-5300(%rbp), %eax
+ 11175      FFFF
+ 11176 a318 89C7     		movl	%eax, %edi
+ 11177 a31a E8E15CFF 		call	bswap_32
+ 11177      FF
+ 11178 a31f 4189C5   		movl	%eax, %r13d
+ 11179 a322 8B8548EB 		movl	-5304(%rbp), %eax
+ 11179      FFFF
+ 11180 a328 89C7     		movl	%eax, %edi
+ 11181 a32a E8D15CFF 		call	bswap_32
+ 11181      FF
+ 11182 a32f 4189C4   		movl	%eax, %r12d
+ 11183 a332 8B8544EB 		movl	-5308(%rbp), %eax
+ 11183      FFFF
+ 11184 a338 89C7     		movl	%eax, %edi
+ 11185 a33a E8C15CFF 		call	bswap_32
+ 11185      FF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 359
+
+
+ 11186 a33f 89C3     		movl	%eax, %ebx
+ 11187 a341 8B8540EB 		movl	-5312(%rbp), %eax
+ 11187      FFFF
+ 11188 a347 89C7     		movl	%eax, %edi
+ 11189 a349 E8B25CFF 		call	bswap_32
+ 11189      FF
+ 11190 a34e 4589E9   		movl	%r13d, %r9d
+ 11191 a351 4589E0   		movl	%r12d, %r8d
+ 11192 a354 89D9     		movl	%ebx, %ecx
+ 11193 a356 89C2     		movl	%eax, %edx
+ 11194 a358 488D3500 		leaq	.LC2(%rip), %rsi
+ 11194      000000
+ 11195 a35f 488D3D00 		leaq	.LC1(%rip), %rdi
+ 11195      000000
+ 11196 a366 B8000000 		movl	$0, %eax
+ 11196      00
+ 11197 a36b E8000000 		call	KDbgMsg at PLT
+ 11197      00
+ 11198              	.L269:
+ 11199 a370 660F6F85 		movdqa	-6528(%rbp), %xmm0
+ 11199      80E6FFFF 
+ 11200 a378 F30F7F85 		movdqu	%xmm0, -2032(%rbp)
+ 11200      10F8FFFF 
+ 11201 a380 660F6F85 		movdqa	-6512(%rbp), %xmm0
+ 11201      90E6FFFF 
+ 11202 a388 F30F7F85 		movdqu	%xmm0, -2048(%rbp)
+ 11202      00F8FFFF 
+ 11203              	.LBE1371:
+ 11204              	.LBB1372:
+ 11205              	.LBB1373:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 11206              		.loc 2 178 0
+ 11207 a390 F30F6F85 		movdqu	-2048(%rbp), %xmm0
+ 11207      00F8FFFF 
+ 11208 a398 F30F6F8D 		movdqu	-2032(%rbp), %xmm1
+ 11208      10F8FFFF 
+ 11209 a3a0 660FEFC1 		pxor	%xmm1, %xmm0
+ 11210              	.LBE1373:
+ 11211              	.LBE1372:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 11212              		.loc 2 1686 0
+ 11213 a3a4 660F7F85 		movdqa	%xmm0, -6528(%rbp)
+ 11213      80E6FFFF 
+ 11214              	.LBB1374:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 11215              		.loc 2 1687 0
+ 11216 a3ac 660F6F85 		movdqa	-6528(%rbp), %xmm0
+ 11216      80E6FFFF 
+ 11217 a3b4 F30F7F85 		movdqu	%xmm0, -5328(%rbp)
+ 11217      30EBFFFF 
+ 11218 a3bc E8000000 		call	KDbgWriterGet at PLT
+ 11218      00
+ 11219 a3c1 4885C0   		testq	%rax, %rax
+ 11220 a3c4 7479     		je	.L271
+ 11221 a3c6 BF010000 		movl	$1, %edi
+ 11221      00
+ 11222 a3cb E8000000 		call	KDbgCondToFlag at PLT
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 360
+
+
+ 11222      00
+ 11223 a3d0 4889C6   		movq	%rax, %rsi
+ 11224 a3d3 BF100000 		movl	$16, %edi
+ 11224      00
+ 11225 a3d8 E8000000 		call	KDbgTestModConds at PLT
+ 11225      00
+ 11226 a3dd 84C0     		testb	%al, %al
+ 11227 a3df 745E     		je	.L271
+ 11228 a3e1 8B853CEB 		movl	-5316(%rbp), %eax
+ 11228      FFFF
+ 11229 a3e7 89C7     		movl	%eax, %edi
+ 11230 a3e9 E8125CFF 		call	bswap_32
+ 11230      FF
+ 11231 a3ee 4189C5   		movl	%eax, %r13d
+ 11232 a3f1 8B8538EB 		movl	-5320(%rbp), %eax
+ 11232      FFFF
+ 11233 a3f7 89C7     		movl	%eax, %edi
+ 11234 a3f9 E8025CFF 		call	bswap_32
+ 11234      FF
+ 11235 a3fe 4189C4   		movl	%eax, %r12d
+ 11236 a401 8B8534EB 		movl	-5324(%rbp), %eax
+ 11236      FFFF
+ 11237 a407 89C7     		movl	%eax, %edi
+ 11238 a409 E8F25BFF 		call	bswap_32
+ 11238      FF
+ 11239 a40e 89C3     		movl	%eax, %ebx
+ 11240 a410 8B8530EB 		movl	-5328(%rbp), %eax
+ 11240      FFFF
+ 11241 a416 89C7     		movl	%eax, %edi
+ 11242 a418 E8E35BFF 		call	bswap_32
+ 11242      FF
+ 11243 a41d 4589E9   		movl	%r13d, %r9d
+ 11244 a420 4589E0   		movl	%r12d, %r8d
+ 11245 a423 89D9     		movl	%ebx, %ecx
+ 11246 a425 89C2     		movl	%eax, %edx
+ 11247 a427 488D3500 		leaq	.LC3(%rip), %rsi
+ 11247      000000
+ 11248 a42e 488D3D00 		leaq	.LC1(%rip), %rdi
+ 11248      000000
+ 11249 a435 B8000000 		movl	$0, %eax
+ 11249      00
+ 11250 a43a E8000000 		call	KDbgMsg at PLT
+ 11250      00
+ 11251              	.L271:
+ 11252 a43f 660F6F85 		movdqa	-6528(%rbp), %xmm0
+ 11252      80E6FFFF 
+ 11253 a447 F30F7F85 		movdqu	%xmm0, -2016(%rbp)
+ 11253      20F8FFFF 
+ 11254              	.LBE1374:
+ 11255              	.LBB1375:
+ 11256              	.LBB1376:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 11257              		.loc 2 1357 0
+ 11258 a44f F30F6F85 		movdqu	-2016(%rbp), %xmm0
+ 11258      20F8FFFF 
+ 11259 a457 F30F7F85 		movdqu	%xmm0, -5120(%rbp)
+ 11259      00ECFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 361
+
+
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 11260              		.loc 2 1358 0
+ 11261 a45f 8B850CEC 		movl	-5108(%rbp), %eax
+ 11261      FFFF
+ 11262 a465 898508EC 		movl	%eax, -5112(%rbp)
+ 11262      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 11263              		.loc 2 1359 0
+ 11264 a46b 8B850CEC 		movl	-5108(%rbp), %eax
+ 11264      FFFF
+ 11265 a471 898504EC 		movl	%eax, -5116(%rbp)
+ 11265      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 11266              		.loc 2 1360 0
+ 11267 a477 8B850CEC 		movl	-5108(%rbp), %eax
+ 11267      FFFF
+ 11268 a47d 898500EC 		movl	%eax, -5120(%rbp)
+ 11268      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 11269              		.loc 2 1361 0
+ 11270 a483 F30F6F85 		movdqu	-5120(%rbp), %xmm0
+ 11270      00ECFFFF 
+ 11271              	.LBE1376:
+ 11272              	.LBE1375:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 11273              		.loc 2 1688 0
+ 11274 a48b 660F7F85 		movdqa	%xmm0, -6528(%rbp)
+ 11274      80E6FFFF 
+ 11275              	.LBB1377:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 11276              		.loc 2 1689 0
+ 11277 a493 660F6F85 		movdqa	-6528(%rbp), %xmm0
+ 11277      80E6FFFF 
+ 11278 a49b F30F7F85 		movdqu	%xmm0, -5344(%rbp)
+ 11278      20EBFFFF 
+ 11279 a4a3 E8000000 		call	KDbgWriterGet at PLT
+ 11279      00
+ 11280 a4a8 4885C0   		testq	%rax, %rax
+ 11281 a4ab 7479     		je	.L273
+ 11282 a4ad BF010000 		movl	$1, %edi
+ 11282      00
+ 11283 a4b2 E8000000 		call	KDbgCondToFlag at PLT
+ 11283      00
+ 11284 a4b7 4889C6   		movq	%rax, %rsi
+ 11285 a4ba BF100000 		movl	$16, %edi
+ 11285      00
+ 11286 a4bf E8000000 		call	KDbgTestModConds at PLT
+ 11286      00
+ 11287 a4c4 84C0     		testb	%al, %al
+ 11288 a4c6 745E     		je	.L273
+ 11289 a4c8 8B852CEB 		movl	-5332(%rbp), %eax
+ 11289      FFFF
+ 11290 a4ce 89C7     		movl	%eax, %edi
+ 11291 a4d0 E82B5BFF 		call	bswap_32
+ 11291      FF
+ 11292 a4d5 4189C5   		movl	%eax, %r13d
+ 11293 a4d8 8B8528EB 		movl	-5336(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 362
+
+
+ 11293      FFFF
+ 11294 a4de 89C7     		movl	%eax, %edi
+ 11295 a4e0 E81B5BFF 		call	bswap_32
+ 11295      FF
+ 11296 a4e5 4189C4   		movl	%eax, %r12d
+ 11297 a4e8 8B8524EB 		movl	-5340(%rbp), %eax
+ 11297      FFFF
+ 11298 a4ee 89C7     		movl	%eax, %edi
+ 11299 a4f0 E80B5BFF 		call	bswap_32
+ 11299      FF
+ 11300 a4f5 89C3     		movl	%eax, %ebx
+ 11301 a4f7 8B8520EB 		movl	-5344(%rbp), %eax
+ 11301      FFFF
+ 11302 a4fd 89C7     		movl	%eax, %edi
+ 11303 a4ff E8FC5AFF 		call	bswap_32
+ 11303      FF
+ 11304 a504 4589E9   		movl	%r13d, %r9d
+ 11305 a507 4589E0   		movl	%r12d, %r8d
+ 11306 a50a 89D9     		movl	%ebx, %ecx
+ 11307 a50c 89C2     		movl	%eax, %edx
+ 11308 a50e 488D3500 		leaq	.LC4(%rip), %rsi
+ 11308      000000
+ 11309 a515 488D3D00 		leaq	.LC1(%rip), %rdi
+ 11309      000000
+ 11310 a51c B8000000 		movl	$0, %eax
+ 11310      00
+ 11311 a521 E8000000 		call	KDbgMsg at PLT
+ 11311      00
+ 11312              	.L273:
+ 11313              	.LBE1377:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 11314              		.loc 2 1690 0
+ 11315 a526 660F6F85 		movdqa	-6528(%rbp), %xmm0
+ 11315      80E6FFFF 
+ 11316              	.LBE1343:
+ 11317              	.LBE1342:
+1831:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 11318              		.loc 2 1831 0
+ 11319 a52e 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 11319      C0E5FFFF 
+1833:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0 ^= k;                                       /* k24   : k25   : k26    : k27          */
+ 11320              		.loc 2 1833 0
+ 11321 a536 660F6F85 		movdqa	-6800(%rbp), %xmm0
+ 11321      70E5FFFF 
+ 11322 a53e 660FEF85 		pxor	-6720(%rbp), %xmm0
+ 11322      C0E5FFFF 
+ 11323 a546 660F7F85 		movdqa	%xmm0, -6800(%rbp)
+ 11323      70E5FFFF 
+1834:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v0);   /* k27   : k27   : k27    : k27          */
+ 11324              		.loc 2 1834 0
+ 11325 a54e 660F6F85 		movdqa	-6800(%rbp), %xmm0
+ 11325      70E5FFFF 
+ 11326 a556 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 11326      C0E5FFFF 
+ 11327 a55e 660F6F85 		movdqa	-6720(%rbp), %xmm0
+ 11327      C0E5FFFF 
+ 11328 a566 F30F7F85 		movdqu	%xmm0, -2000(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 363
+
+
+ 11328      30F8FFFF 
+ 11329              	.LBB1378:
+ 11330              	.LBB1379:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 11331              		.loc 2 1357 0
+ 11332 a56e F30F6F85 		movdqu	-2000(%rbp), %xmm0
+ 11332      30F8FFFF 
+ 11333 a576 F30F7F85 		movdqu	%xmm0, -5104(%rbp)
+ 11333      10ECFFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 11334              		.loc 2 1358 0
+ 11335 a57e 8B851CEC 		movl	-5092(%rbp), %eax
+ 11335      FFFF
+ 11336 a584 898518EC 		movl	%eax, -5096(%rbp)
+ 11336      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 11337              		.loc 2 1359 0
+ 11338 a58a 8B851CEC 		movl	-5092(%rbp), %eax
+ 11338      FFFF
+ 11339 a590 898514EC 		movl	%eax, -5100(%rbp)
+ 11339      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 11340              		.loc 2 1360 0
+ 11341 a596 8B851CEC 		movl	-5092(%rbp), %eax
+ 11341      FFFF
+ 11342 a59c 898510EC 		movl	%eax, -5104(%rbp)
+ 11342      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 11343              		.loc 2 1361 0
+ 11344 a5a2 F30F6F85 		movdqu	-5104(%rbp), %xmm0
+ 11344      10ECFFFF 
+ 11345              	.LBE1379:
+ 11346              	.LBE1378:
+1834:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v0);   /* k27   : k27   : k27    : k27          */
+ 11347              		.loc 2 1834 0
+ 11348 a5aa 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 11348      C0E5FFFF 
+1835:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1 ^= k;                                       /* k28   : k29   : x      : x            */
+ 11349              		.loc 2 1835 0
+ 11350 a5b2 660F6F85 		movdqa	-6784(%rbp), %xmm0
+ 11350      80E5FFFF 
+ 11351 a5ba 660FEF85 		pxor	-6720(%rbp), %xmm0
+ 11351      C0E5FFFF 
+ 11352 a5c2 660F7F85 		movdqa	%xmm0, -6784(%rbp)
+ 11352      80E5FFFF 
+1837:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[6] = v0; /* K24:K25:K26:K27 */
+ 11353              		.loc 2 1837 0
+ 11354 a5ca 488B8588 		movq	-6264(%rbp), %rax
+ 11354      E7FFFF
+ 11355 a5d1 4883C060 		addq	$96, %rax
+ 11356 a5d5 660F6F85 		movdqa	-6800(%rbp), %xmm0
+ 11356      70E5FFFF 
+ 11357 a5dd 660F7F00 		movdqa	%xmm0, (%rax)
+1842:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 11358              		.loc 2 1842 0
+ 11359 a5e1 660F6F85 		movdqa	-6784(%rbp), %xmm0
+ 11359      80E5FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 364
+
+
+ 11360 a5e9 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 11360      C0E5FFFF 
+ 11361 a5f1 660F6F85 		movdqa	-6720(%rbp), %xmm0
+ 11361      C0E5FFFF 
+ 11362 a5f9 F30F7F85 		movdqu	%xmm0, -1968(%rbp)
+ 11362      50F8FFFF 
+ 11363              	.LBB1380:
+ 11364              	.LBB1381:
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rconw = (AESWord)(AESByte)rcon;
+ 11365              		.loc 2 1629 0
+ 11366 a601 B8100000 		movl	$16, %eax
+ 11366      00
+ 11367 a606 0FB6C0   		movzbl	%al, %eax
+ 11368 a609 898570F8 		movl	%eax, -1936(%rbp)
+ 11368      FFFF
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 11369              		.loc 2 1630 0
+ 11370 a60f F30F6F85 		movdqu	-1968(%rbp), %xmm0
+ 11370      50F8FFFF 
+ 11371 a617 F30F7F85 		movdqu	%xmm0, -5072(%rbp)
+ 11371      30ECFFFF 
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[1]);
+ 11372              		.loc 2 1631 0
+ 11373 a61f 8B8534EC 		movl	-5068(%rbp), %eax
+ 11373      FFFF
+ 11374 a625 898574F8 		movl	%eax, -1932(%rbp)
+ 11374      FFFF
+ 11375              	.LBB1382:
+ 11376              	.LBB1383:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 11377              		.loc 2 740 0
+ 11378 a62b 8B8574F8 		movl	-1932(%rbp), %eax
+ 11378      FFFF
+ 11379 a631 898520EC 		movl	%eax, -5088(%rbp)
+ 11379      FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 11380              		.loc 2 741 0
+ 11381 a637 C78578F8 		movl	$0, -1928(%rbp)
+ 11381      FFFF0000 
+ 11381      0000
+ 11382 a641 EB36     		jmp	.L274
+ 11383              	.L275:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 11384              		.loc 2 742 0
+ 11385 a643 8B8D78F8 		movl	-1928(%rbp), %ecx
+ 11385      FFFF
+ 11386 a649 8B8578F8 		movl	-1928(%rbp), %eax
+ 11386      FFFF
+ 11387 a64f 89C0     		mov	%eax, %eax
+ 11388 a651 0FB68405 		movzbl	-5088(%rbp,%rax), %eax
+ 11388      20ECFFFF 
+ 11389 a659 0FB6C0   		movzbl	%al, %eax
+ 11390 a65c 89C2     		mov	%eax, %edx
+ 11391 a65e 488D0500 		leaq	KAESBlockCipherVecRijndaelSBox(%rip), %rax
+ 11391      000000
+ 11392 a665 0FB61402 		movzbl	(%rdx,%rax), %edx
+ 11393 a669 89C8     		mov	%ecx, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 365
+
+
+ 11394 a66b 88940520 		movb	%dl, -5088(%rbp,%rax)
+ 11394      ECFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 11395              		.loc 2 741 0
+ 11396 a672 838578F8 		addl	$1, -1928(%rbp)
+ 11396      FFFF01
+ 11397              	.L274:
+ 11398 a679 83BD78F8 		cmpl	$3, -1928(%rbp)
+ 11398      FFFF03
+ 11399 a680 76C1     		jbe	.L275
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 11400              		.loc 2 743 0
+ 11401 a682 8B8520EC 		movl	-5088(%rbp), %eax
+ 11401      FFFF
+ 11402              	.LBE1383:
+ 11403              	.LBE1382:
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[1]);
+ 11404              		.loc 2 1631 0
+ 11405 a688 89856CF8 		movl	%eax, -1940(%rbp)
+ 11405      FFFF
+ 11406 a68e 8B856CF8 		movl	-1940(%rbp), %eax
+ 11406      FFFF
+ 11407 a694 89857CF8 		movl	%eax, -1924(%rbp)
+ 11407      FFFF
+ 11408              	.LBB1384:
+ 11409              	.LBB1385:
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (w >> 8) | (w << 24);
+ 11410              		.loc 2 1196 0
+ 11411 a69a 8B857CF8 		movl	-1924(%rbp), %eax
+ 11411      FFFF
+ 11412 a6a0 C1C808   		rorl	$8, %eax
+ 11413              	.LBE1385:
+ 11414              	.LBE1384:
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(RotWord)(temp);
+ 11415              		.loc 2 1632 0
+ 11416 a6a3 89856CF8 		movl	%eax, -1940(%rbp)
+ 11416      FFFF
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp ^= rconw;
+ 11417              		.loc 2 1633 0
+ 11418 a6a9 8B8570F8 		movl	-1936(%rbp), %eax
+ 11418      FFFF
+ 11419 a6af 31856CF8 		xorl	%eax, -1940(%rbp)
+ 11419      FFFF
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 11420              		.loc 2 1635 0
+ 11421 a6b5 8B856CF8 		movl	-1940(%rbp), %eax
+ 11421      FFFF
+ 11422 a6bb 89853CEC 		movl	%eax, -5060(%rbp)
+ 11422      FFFF
+ 11423 a6c1 8B853CEC 		movl	-5060(%rbp), %eax
+ 11423      FFFF
+ 11424 a6c7 898538EC 		movl	%eax, -5064(%rbp)
+ 11424      FFFF
+ 11425 a6cd 8B8538EC 		movl	-5064(%rbp), %eax
+ 11425      FFFF
+ 11426 a6d3 898534EC 		movl	%eax, -5068(%rbp)
+ 11426      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 366
+
+
+ 11427 a6d9 8B8534EC 		movl	-5068(%rbp), %eax
+ 11427      FFFF
+ 11428 a6df 898530EC 		movl	%eax, -5072(%rbp)
+ 11428      FFFF
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 11429              		.loc 2 1636 0
+ 11430 a6e5 F30F6F85 		movdqu	-5072(%rbp), %xmm0
+ 11430      30ECFFFF 
+ 11431              	.LBE1381:
+ 11432              	.LBE1380:
+1842:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 11433              		.loc 2 1842 0
+ 11434 a6ed 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 11434      C0E5FFFF 
+ 11435 a6f5 660F6F85 		movdqa	-6800(%rbp), %xmm0
+ 11435      70E5FFFF 
+ 11436 a6fd F30F7F85 		movdqu	%xmm0, -1920(%rbp)
+ 11436      80F8FFFF 
+ 11437              	.LBB1386:
+ 11438              	.LBB1387:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 11439              		.loc 2 1565 0
+ 11440 a705 F30F6F85 		movdqu	-1920(%rbp), %xmm0
+ 11440      80F8FFFF 
+ 11441 a70d 660F7F85 		movdqa	%xmm0, -6480(%rbp)
+ 11441      B0E6FFFF 
+ 11442 a715 660F6F85 		movdqa	-6480(%rbp), %xmm0
+ 11442      B0E6FFFF 
+ 11443 a71d F30F7F85 		movdqu	%xmm0, -1904(%rbp)
+ 11443      90F8FFFF 
+ 11444              	.LBB1388:
+ 11445              	.LBB1389:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 11446              		.loc 2 1282 0
+ 11447 a725 F30F6F85 		movdqu	-1904(%rbp), %xmm0
+ 11447      90F8FFFF 
+ 11448 a72d F30F7F85 		movdqu	%xmm0, -5056(%rbp)
+ 11448      40ECFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 11449              		.loc 2 1283 0
+ 11450 a735 8B8548EC 		movl	-5048(%rbp), %eax
+ 11450      FFFF
+ 11451 a73b 89854CEC 		movl	%eax, -5044(%rbp)
+ 11451      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 11452              		.loc 2 1284 0
+ 11453 a741 8B8544EC 		movl	-5052(%rbp), %eax
+ 11453      FFFF
+ 11454 a747 898548EC 		movl	%eax, -5048(%rbp)
+ 11454      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 11455              		.loc 2 1285 0
+ 11456 a74d 8B8540EC 		movl	-5056(%rbp), %eax
+ 11456      FFFF
+ 11457 a753 898544EC 		movl	%eax, -5052(%rbp)
+ 11457      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 367
+
+
+ 11458              		.loc 2 1286 0
+ 11459 a759 C78540EC 		movl	$0, -5056(%rbp)
+ 11459      FFFF0000 
+ 11459      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 11460              		.loc 2 1287 0
+ 11461 a763 F30F6F85 		movdqu	-5056(%rbp), %xmm0
+ 11461      40ECFFFF 
+ 11462              	.LBE1389:
+ 11463              	.LBE1388:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11464              		.loc 2 1567 0
+ 11465 a76b 660F7F85 		movdqa	%xmm0, -6480(%rbp)
+ 11465      B0E6FFFF 
+ 11466 a773 660F6F85 		movdqa	-6480(%rbp), %xmm0
+ 11466      B0E6FFFF 
+ 11467 a77b 660FEF85 		pxor	-1920(%rbp), %xmm0
+ 11467      80F8FFFF 
+ 11468 a783 F30F7F85 		movdqu	%xmm0, -1920(%rbp)
+ 11468      80F8FFFF 
+ 11469 a78b 660F6F85 		movdqa	-6480(%rbp), %xmm0
+ 11469      B0E6FFFF 
+ 11470 a793 F30F7F85 		movdqu	%xmm0, -1888(%rbp)
+ 11470      A0F8FFFF 
+ 11471              	.LBB1390:
+ 11472              	.LBB1391:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 11473              		.loc 2 1282 0
+ 11474 a79b F30F6F85 		movdqu	-1888(%rbp), %xmm0
+ 11474      A0F8FFFF 
+ 11475 a7a3 F30F7F85 		movdqu	%xmm0, -5040(%rbp)
+ 11475      50ECFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 11476              		.loc 2 1283 0
+ 11477 a7ab 8B8558EC 		movl	-5032(%rbp), %eax
+ 11477      FFFF
+ 11478 a7b1 89855CEC 		movl	%eax, -5028(%rbp)
+ 11478      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 11479              		.loc 2 1284 0
+ 11480 a7b7 8B8554EC 		movl	-5036(%rbp), %eax
+ 11480      FFFF
+ 11481 a7bd 898558EC 		movl	%eax, -5032(%rbp)
+ 11481      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 11482              		.loc 2 1285 0
+ 11483 a7c3 8B8550EC 		movl	-5040(%rbp), %eax
+ 11483      FFFF
+ 11484 a7c9 898554EC 		movl	%eax, -5036(%rbp)
+ 11484      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 11485              		.loc 2 1286 0
+ 11486 a7cf C78550EC 		movl	$0, -5040(%rbp)
+ 11486      FFFF0000 
+ 11486      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 11487              		.loc 2 1287 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 368
+
+
+ 11488 a7d9 F30F6F85 		movdqu	-5040(%rbp), %xmm0
+ 11488      50ECFFFF 
+ 11489              	.LBE1391:
+ 11490              	.LBE1390:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11491              		.loc 2 1568 0
+ 11492 a7e1 660F7F85 		movdqa	%xmm0, -6480(%rbp)
+ 11492      B0E6FFFF 
+ 11493 a7e9 660F6F85 		movdqa	-6480(%rbp), %xmm0
+ 11493      B0E6FFFF 
+ 11494 a7f1 660FEF85 		pxor	-1920(%rbp), %xmm0
+ 11494      80F8FFFF 
+ 11495 a7f9 F30F7F85 		movdqu	%xmm0, -1920(%rbp)
+ 11495      80F8FFFF 
+ 11496 a801 660F6F85 		movdqa	-6480(%rbp), %xmm0
+ 11496      B0E6FFFF 
+ 11497 a809 F30F7F85 		movdqu	%xmm0, -1872(%rbp)
+ 11497      B0F8FFFF 
+ 11498              	.LBB1392:
+ 11499              	.LBB1393:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 11500              		.loc 2 1282 0
+ 11501 a811 F30F6F85 		movdqu	-1872(%rbp), %xmm0
+ 11501      B0F8FFFF 
+ 11502 a819 F30F7F85 		movdqu	%xmm0, -5024(%rbp)
+ 11502      60ECFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 11503              		.loc 2 1283 0
+ 11504 a821 8B8568EC 		movl	-5016(%rbp), %eax
+ 11504      FFFF
+ 11505 a827 89856CEC 		movl	%eax, -5012(%rbp)
+ 11505      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 11506              		.loc 2 1284 0
+ 11507 a82d 8B8564EC 		movl	-5020(%rbp), %eax
+ 11507      FFFF
+ 11508 a833 898568EC 		movl	%eax, -5016(%rbp)
+ 11508      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 11509              		.loc 2 1285 0
+ 11510 a839 8B8560EC 		movl	-5024(%rbp), %eax
+ 11510      FFFF
+ 11511 a83f 898564EC 		movl	%eax, -5020(%rbp)
+ 11511      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 11512              		.loc 2 1286 0
+ 11513 a845 C78560EC 		movl	$0, -5024(%rbp)
+ 11513      FFFF0000 
+ 11513      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 11514              		.loc 2 1287 0
+ 11515 a84f F30F6F85 		movdqu	-5024(%rbp), %xmm0
+ 11515      60ECFFFF 
+ 11516              	.LBE1393:
+ 11517              	.LBE1392:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11518              		.loc 2 1569 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 369
+
+
+ 11519 a857 660F7F85 		movdqa	%xmm0, -6480(%rbp)
+ 11519      B0E6FFFF 
+ 11520 a85f 660F6F85 		movdqa	-6480(%rbp), %xmm0
+ 11520      B0E6FFFF 
+ 11521 a867 660FEF85 		pxor	-1920(%rbp), %xmm0
+ 11521      80F8FFFF 
+ 11522 a86f F30F7F85 		movdqu	%xmm0, -1920(%rbp)
+ 11522      80F8FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 11523              		.loc 2 1571 0
+ 11524 a877 F30F6F85 		movdqu	-1920(%rbp), %xmm0
+ 11524      80F8FFFF 
+ 11525              	.LBE1387:
+ 11526              	.LBE1386:
+1844:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3  = AESBCMEMBER(ShiftXorColumns) (v0);       /* k24   :k24^k25:k24^k25^k26:k24^k25^k26^k27 */
+ 11527              		.loc 2 1844 0
+ 11528 a87f 660F7F85 		movdqa	%xmm0, -6752(%rbp)
+ 11528      A0E5FFFF 
+1845:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3 ^= k;                                       /* k30   : k31   : k32    : k33          */
+ 11529              		.loc 2 1845 0
+ 11530 a887 660F6F85 		movdqa	-6752(%rbp), %xmm0
+ 11530      A0E5FFFF 
+ 11531 a88f 660FEF85 		pxor	-6720(%rbp), %xmm0
+ 11531      C0E5FFFF 
+ 11532 a897 660F7F85 		movdqa	%xmm0, -6752(%rbp)
+ 11532      A0E5FFFF 
+ 11533 a89f 660F6F85 		movdqa	-6784(%rbp), %xmm0
+ 11533      80E5FFFF 
+ 11534 a8a7 F30F7F85 		movdqu	%xmm0, -1856(%rbp)
+ 11534      C0F8FFFF 
+ 11535              	.LBB1394:
+ 11536              	.LBB1395:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 11537              		.loc 2 1565 0
+ 11538 a8af F30F6F85 		movdqu	-1856(%rbp), %xmm0
+ 11538      C0F8FFFF 
+ 11539 a8b7 660F7F85 		movdqa	%xmm0, -6464(%rbp)
+ 11539      C0E6FFFF 
+ 11540 a8bf 660F6F85 		movdqa	-6464(%rbp), %xmm0
+ 11540      C0E6FFFF 
+ 11541 a8c7 F30F7F85 		movdqu	%xmm0, -1840(%rbp)
+ 11541      D0F8FFFF 
+ 11542              	.LBB1396:
+ 11543              	.LBB1397:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 11544              		.loc 2 1282 0
+ 11545 a8cf F30F6F85 		movdqu	-1840(%rbp), %xmm0
+ 11545      D0F8FFFF 
+ 11546 a8d7 F30F7F85 		movdqu	%xmm0, -5008(%rbp)
+ 11546      70ECFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 11547              		.loc 2 1283 0
+ 11548 a8df 8B8578EC 		movl	-5000(%rbp), %eax
+ 11548      FFFF
+ 11549 a8e5 89857CEC 		movl	%eax, -4996(%rbp)
+ 11549      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 370
+
+
+ 11550              		.loc 2 1284 0
+ 11551 a8eb 8B8574EC 		movl	-5004(%rbp), %eax
+ 11551      FFFF
+ 11552 a8f1 898578EC 		movl	%eax, -5000(%rbp)
+ 11552      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 11553              		.loc 2 1285 0
+ 11554 a8f7 8B8570EC 		movl	-5008(%rbp), %eax
+ 11554      FFFF
+ 11555 a8fd 898574EC 		movl	%eax, -5004(%rbp)
+ 11555      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 11556              		.loc 2 1286 0
+ 11557 a903 C78570EC 		movl	$0, -5008(%rbp)
+ 11557      FFFF0000 
+ 11557      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 11558              		.loc 2 1287 0
+ 11559 a90d F30F6F85 		movdqu	-5008(%rbp), %xmm0
+ 11559      70ECFFFF 
+ 11560              	.LBE1397:
+ 11561              	.LBE1396:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11562              		.loc 2 1567 0
+ 11563 a915 660F7F85 		movdqa	%xmm0, -6464(%rbp)
+ 11563      C0E6FFFF 
+ 11564 a91d 660F6F85 		movdqa	-6464(%rbp), %xmm0
+ 11564      C0E6FFFF 
+ 11565 a925 660FEF85 		pxor	-1856(%rbp), %xmm0
+ 11565      C0F8FFFF 
+ 11566 a92d F30F7F85 		movdqu	%xmm0, -1856(%rbp)
+ 11566      C0F8FFFF 
+ 11567 a935 660F6F85 		movdqa	-6464(%rbp), %xmm0
+ 11567      C0E6FFFF 
+ 11568 a93d F30F7F85 		movdqu	%xmm0, -1824(%rbp)
+ 11568      E0F8FFFF 
+ 11569              	.LBB1398:
+ 11570              	.LBB1399:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 11571              		.loc 2 1282 0
+ 11572 a945 F30F6F85 		movdqu	-1824(%rbp), %xmm0
+ 11572      E0F8FFFF 
+ 11573 a94d F30F7F85 		movdqu	%xmm0, -4992(%rbp)
+ 11573      80ECFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 11574              		.loc 2 1283 0
+ 11575 a955 8B8588EC 		movl	-4984(%rbp), %eax
+ 11575      FFFF
+ 11576 a95b 89858CEC 		movl	%eax, -4980(%rbp)
+ 11576      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 11577              		.loc 2 1284 0
+ 11578 a961 8B8584EC 		movl	-4988(%rbp), %eax
+ 11578      FFFF
+ 11579 a967 898588EC 		movl	%eax, -4984(%rbp)
+ 11579      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 371
+
+
+ 11580              		.loc 2 1285 0
+ 11581 a96d 8B8580EC 		movl	-4992(%rbp), %eax
+ 11581      FFFF
+ 11582 a973 898584EC 		movl	%eax, -4988(%rbp)
+ 11582      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 11583              		.loc 2 1286 0
+ 11584 a979 C78580EC 		movl	$0, -4992(%rbp)
+ 11584      FFFF0000 
+ 11584      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 11585              		.loc 2 1287 0
+ 11586 a983 F30F6F85 		movdqu	-4992(%rbp), %xmm0
+ 11586      80ECFFFF 
+ 11587              	.LBE1399:
+ 11588              	.LBE1398:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11589              		.loc 2 1568 0
+ 11590 a98b 660F7F85 		movdqa	%xmm0, -6464(%rbp)
+ 11590      C0E6FFFF 
+ 11591 a993 660F6F85 		movdqa	-6464(%rbp), %xmm0
+ 11591      C0E6FFFF 
+ 11592 a99b 660FEF85 		pxor	-1856(%rbp), %xmm0
+ 11592      C0F8FFFF 
+ 11593 a9a3 F30F7F85 		movdqu	%xmm0, -1856(%rbp)
+ 11593      C0F8FFFF 
+ 11594 a9ab 660F6F85 		movdqa	-6464(%rbp), %xmm0
+ 11594      C0E6FFFF 
+ 11595 a9b3 F30F7F85 		movdqu	%xmm0, -1808(%rbp)
+ 11595      F0F8FFFF 
+ 11596              	.LBB1400:
+ 11597              	.LBB1401:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 11598              		.loc 2 1282 0
+ 11599 a9bb F30F6F85 		movdqu	-1808(%rbp), %xmm0
+ 11599      F0F8FFFF 
+ 11600 a9c3 F30F7F85 		movdqu	%xmm0, -4976(%rbp)
+ 11600      90ECFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 11601              		.loc 2 1283 0
+ 11602 a9cb 8B8598EC 		movl	-4968(%rbp), %eax
+ 11602      FFFF
+ 11603 a9d1 89859CEC 		movl	%eax, -4964(%rbp)
+ 11603      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 11604              		.loc 2 1284 0
+ 11605 a9d7 8B8594EC 		movl	-4972(%rbp), %eax
+ 11605      FFFF
+ 11606 a9dd 898598EC 		movl	%eax, -4968(%rbp)
+ 11606      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 11607              		.loc 2 1285 0
+ 11608 a9e3 8B8590EC 		movl	-4976(%rbp), %eax
+ 11608      FFFF
+ 11609 a9e9 898594EC 		movl	%eax, -4972(%rbp)
+ 11609      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 372
+
+
+ 11610              		.loc 2 1286 0
+ 11611 a9ef C78590EC 		movl	$0, -4976(%rbp)
+ 11611      FFFF0000 
+ 11611      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 11612              		.loc 2 1287 0
+ 11613 a9f9 F30F6F85 		movdqu	-4976(%rbp), %xmm0
+ 11613      90ECFFFF 
+ 11614              	.LBE1401:
+ 11615              	.LBE1400:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11616              		.loc 2 1569 0
+ 11617 aa01 660F7F85 		movdqa	%xmm0, -6464(%rbp)
+ 11617      C0E6FFFF 
+ 11618 aa09 660F6F85 		movdqa	-6464(%rbp), %xmm0
+ 11618      C0E6FFFF 
+ 11619 aa11 660FEF85 		pxor	-1856(%rbp), %xmm0
+ 11619      C0F8FFFF 
+ 11620 aa19 F30F7F85 		movdqu	%xmm0, -1856(%rbp)
+ 11620      C0F8FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 11621              		.loc 2 1571 0
+ 11622 aa21 F30F6F85 		movdqu	-1856(%rbp), %xmm0
+ 11622      C0F8FFFF 
+ 11623              	.LBE1395:
+ 11624              	.LBE1394:
+1846:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4  = AESBCMEMBER(ShiftXorColumns) (v1);       /* k26   :k28^k29: k29    : 0            */
+ 11625              		.loc 2 1846 0
+ 11626 aa29 660F7F85 		movdqa	%xmm0, -6736(%rbp)
+ 11626      B0E5FFFF 
+1847:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k33   : k33   : k33    : k33          */
+ 11627              		.loc 2 1847 0
+ 11628 aa31 660F6F85 		movdqa	-6752(%rbp), %xmm0
+ 11628      A0E5FFFF 
+ 11629 aa39 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 11629      C0E5FFFF 
+ 11630 aa41 660F6F85 		movdqa	-6720(%rbp), %xmm0
+ 11630      C0E5FFFF 
+ 11631 aa49 F30F7F85 		movdqu	%xmm0, -1792(%rbp)
+ 11631      00F9FFFF 
+ 11632              	.LBB1402:
+ 11633              	.LBB1403:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 11634              		.loc 2 1357 0
+ 11635 aa51 F30F6F85 		movdqu	-1792(%rbp), %xmm0
+ 11635      00F9FFFF 
+ 11636 aa59 F30F7F85 		movdqu	%xmm0, -4960(%rbp)
+ 11636      A0ECFFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 11637              		.loc 2 1358 0
+ 11638 aa61 8B85ACEC 		movl	-4948(%rbp), %eax
+ 11638      FFFF
+ 11639 aa67 8985A8EC 		movl	%eax, -4952(%rbp)
+ 11639      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 11640              		.loc 2 1359 0
+ 11641 aa6d 8B85ACEC 		movl	-4948(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 373
+
+
+ 11641      FFFF
+ 11642 aa73 8985A4EC 		movl	%eax, -4956(%rbp)
+ 11642      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 11643              		.loc 2 1360 0
+ 11644 aa79 8B85ACEC 		movl	-4948(%rbp), %eax
+ 11644      FFFF
+ 11645 aa7f 8985A0EC 		movl	%eax, -4960(%rbp)
+ 11645      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 11646              		.loc 2 1361 0
+ 11647 aa85 F30F6F85 		movdqu	-4960(%rbp), %xmm0
+ 11647      A0ECFFFF 
+ 11648              	.LBE1403:
+ 11649              	.LBE1402:
+1847:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k33   : k33   : k33    : k33          */
+ 11650              		.loc 2 1847 0
+ 11651 aa8d 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 11651      C0E5FFFF 
+1848:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4 ^= k;                                       /* k34   : k35   : x      : x            */
+ 11652              		.loc 2 1848 0
+ 11653 aa95 660F6F85 		movdqa	-6736(%rbp), %xmm0
+ 11653      B0E5FFFF 
+ 11654 aa9d 660FEF85 		pxor	-6720(%rbp), %xmm0
+ 11654      C0E5FFFF 
+ 11655 aaa5 660F7F85 		movdqa	%xmm0, -6736(%rbp)
+ 11655      B0E5FFFF 
+ 11656 aaad 660F6F85 		movdqa	-6784(%rbp), %xmm0
+ 11656      80E5FFFF 
+ 11657 aab5 F30F7F85 		movdqu	%xmm0, -1760(%rbp)
+ 11657      20F9FFFF 
+ 11658 aabd 660F6F85 		movdqa	-6752(%rbp), %xmm0
+ 11658      A0E5FFFF 
+ 11659 aac5 F30F7F85 		movdqu	%xmm0, -1776(%rbp)
+ 11659      10F9FFFF 
+ 11660              	.LBB1404:
+ 11661              	.LBB1405:
+1471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.state = w;
+ 11662              		.loc 2 1471 0
+ 11663 aacd F30F6F85 		movdqu	-1760(%rbp), %xmm0
+ 11663      20F9FFFF 
+ 11664 aad5 F30F7F85 		movdqu	%xmm0, -4928(%rbp)
+ 11664      C0ECFFFF 
+1472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     xx.state = x;
+ 11665              		.loc 2 1472 0
+ 11666 aadd F30F6F85 		movdqu	-1776(%rbp), %xmm0
+ 11666      10F9FFFF 
+ 11667 aae5 F30F7F85 		movdqu	%xmm0, -4944(%rbp)
+ 11667      B0ECFFFF 
+1474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[2] = xx.columns[0];
+ 11668              		.loc 2 1474 0
+ 11669 aaed 8B85B0EC 		movl	-4944(%rbp), %eax
+ 11669      FFFF
+ 11670 aaf3 8985C8EC 		movl	%eax, -4920(%rbp)
+ 11670      FFFF
+1475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[3] = xx.columns[1];
+ 11671              		.loc 2 1475 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 374
+
+
+ 11672 aaf9 8B85B4EC 		movl	-4940(%rbp), %eax
+ 11672      FFFF
+ 11673 aaff 8985CCEC 		movl	%eax, -4916(%rbp)
+ 11673      FFFF
+1477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return ww.state;
+ 11674              		.loc 2 1477 0
+ 11675 ab05 F30F6F85 		movdqu	-4928(%rbp), %xmm0
+ 11675      C0ECFFFF 
+ 11676              	.LBE1405:
+ 11677              	.LBE1404:
+1849:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateMerge1) (v1,v3);        /* k28   : k29   : k30    : k31          */
+ 11678              		.loc 2 1849 0
+ 11679 ab0d 660F7F85 		movdqa	%xmm0, -6784(%rbp)
+ 11679      80E5FFFF 
+1851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[7] = v1; /* K28:K29:K30:K31 */
+ 11680              		.loc 2 1851 0
+ 11681 ab15 488B8588 		movq	-6264(%rbp), %rax
+ 11681      E7FFFF
+ 11682 ab1c 4883C070 		addq	$112, %rax
+ 11683 ab20 660F6F85 		movdqa	-6784(%rbp), %xmm0
+ 11683      80E5FFFF 
+ 11684 ab28 660F7F00 		movdqa	%xmm0, (%rax)
+ 11685 ab2c 660F6F85 		movdqa	-6752(%rbp), %xmm0
+ 11685      A0E5FFFF 
+ 11686 ab34 F30F7F85 		movdqu	%xmm0, -1728(%rbp)
+ 11686      40F9FFFF 
+ 11687 ab3c 660F6F85 		movdqa	-6736(%rbp), %xmm0
+ 11687      B0E5FFFF 
+ 11688 ab44 F30F7F85 		movdqu	%xmm0, -1744(%rbp)
+ 11688      30F9FFFF 
+ 11689              	.LBB1406:
+ 11690              	.LBB1407:
+1503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.state = w;
+ 11691              		.loc 2 1503 0
+ 11692 ab4c F30F6F85 		movdqu	-1728(%rbp), %xmm0
+ 11692      40F9FFFF 
+ 11693 ab54 F30F7F85 		movdqu	%xmm0, -4896(%rbp)
+ 11693      E0ECFFFF 
+1504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     xx.state = x;
+ 11694              		.loc 2 1504 0
+ 11695 ab5c F30F6F85 		movdqu	-1744(%rbp), %xmm0
+ 11695      30F9FFFF 
+ 11696 ab64 F30F7F85 		movdqu	%xmm0, -4912(%rbp)
+ 11696      D0ECFFFF 
+1506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[0] = ww.columns[2];
+ 11697              		.loc 2 1506 0
+ 11698 ab6c 8B85E8EC 		movl	-4888(%rbp), %eax
+ 11698      FFFF
+ 11699 ab72 8985E0EC 		movl	%eax, -4896(%rbp)
+ 11699      FFFF
+1507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[1] = ww.columns[3];
+ 11700              		.loc 2 1507 0
+ 11701 ab78 8B85ECEC 		movl	-4884(%rbp), %eax
+ 11701      FFFF
+ 11702 ab7e 8985E4EC 		movl	%eax, -4892(%rbp)
+ 11702      FFFF
+1508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[2] = xx.columns[0];
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 375
+
+
+ 11703              		.loc 2 1508 0
+ 11704 ab84 8B85D0EC 		movl	-4912(%rbp), %eax
+ 11704      FFFF
+ 11705 ab8a 8985E8EC 		movl	%eax, -4888(%rbp)
+ 11705      FFFF
+1509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[3] = xx.columns[1];
+ 11706              		.loc 2 1509 0
+ 11707 ab90 8B85D4EC 		movl	-4908(%rbp), %eax
+ 11707      FFFF
+ 11708 ab96 8985ECEC 		movl	%eax, -4884(%rbp)
+ 11708      FFFF
+1511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return ww.state;
+ 11709              		.loc 2 1511 0
+ 11710 ab9c F30F6F85 		movdqu	-4896(%rbp), %xmm0
+ 11710      E0ECFFFF 
+ 11711              	.LBE1407:
+ 11712              	.LBE1406:
+1853:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v2  = AESBCMEMBER(StateMerge2) (v3,v4);        /* k32   : k33   : k34    : k35          */
+ 11713              		.loc 2 1853 0
+ 11714 aba4 660F7F85 		movdqa	%xmm0, -6768(%rbp)
+ 11714      90E5FFFF 
+1854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[8] = v2; /* K32:K33:K34:K35 */
+ 11715              		.loc 2 1854 0
+ 11716 abac 488B8588 		movq	-6264(%rbp), %rax
+ 11716      E7FFFF
+ 11717 abb3 4883E880 		subq	$-128, %rax
+ 11718 abb7 660F6F85 		movdqa	-6768(%rbp), %xmm0
+ 11718      90E5FFFF 
+ 11719 abbf 660F7F00 		movdqa	%xmm0, (%rax)
+ 11720 abc3 660F6F85 		movdqa	-6752(%rbp), %xmm0
+ 11720      A0E5FFFF 
+ 11721 abcb F30F7F85 		movdqu	%xmm0, -1712(%rbp)
+ 11721      50F9FFFF 
+ 11722              	.LBB1408:
+ 11723              	.LBB1409:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 11724              		.loc 2 1565 0
+ 11725 abd3 F30F6F85 		movdqu	-1712(%rbp), %xmm0
+ 11725      50F9FFFF 
+ 11726 abdb 660F7F85 		movdqa	%xmm0, -6448(%rbp)
+ 11726      D0E6FFFF 
+ 11727 abe3 660F6F85 		movdqa	-6448(%rbp), %xmm0
+ 11727      D0E6FFFF 
+ 11728 abeb F30F7F85 		movdqu	%xmm0, -1696(%rbp)
+ 11728      60F9FFFF 
+ 11729              	.LBB1410:
+ 11730              	.LBB1411:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 11731              		.loc 2 1282 0
+ 11732 abf3 F30F6F85 		movdqu	-1696(%rbp), %xmm0
+ 11732      60F9FFFF 
+ 11733 abfb F30F7F85 		movdqu	%xmm0, -4880(%rbp)
+ 11733      F0ECFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 11734              		.loc 2 1283 0
+ 11735 ac03 8B85F8EC 		movl	-4872(%rbp), %eax
+ 11735      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 376
+
+
+ 11736 ac09 8985FCEC 		movl	%eax, -4868(%rbp)
+ 11736      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 11737              		.loc 2 1284 0
+ 11738 ac0f 8B85F4EC 		movl	-4876(%rbp), %eax
+ 11738      FFFF
+ 11739 ac15 8985F8EC 		movl	%eax, -4872(%rbp)
+ 11739      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 11740              		.loc 2 1285 0
+ 11741 ac1b 8B85F0EC 		movl	-4880(%rbp), %eax
+ 11741      FFFF
+ 11742 ac21 8985F4EC 		movl	%eax, -4876(%rbp)
+ 11742      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 11743              		.loc 2 1286 0
+ 11744 ac27 C785F0EC 		movl	$0, -4880(%rbp)
+ 11744      FFFF0000 
+ 11744      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 11745              		.loc 2 1287 0
+ 11746 ac31 F30F6F85 		movdqu	-4880(%rbp), %xmm0
+ 11746      F0ECFFFF 
+ 11747              	.LBE1411:
+ 11748              	.LBE1410:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11749              		.loc 2 1567 0
+ 11750 ac39 660F7F85 		movdqa	%xmm0, -6448(%rbp)
+ 11750      D0E6FFFF 
+ 11751 ac41 660F6F85 		movdqa	-6448(%rbp), %xmm0
+ 11751      D0E6FFFF 
+ 11752 ac49 660FEF85 		pxor	-1712(%rbp), %xmm0
+ 11752      50F9FFFF 
+ 11753 ac51 F30F7F85 		movdqu	%xmm0, -1712(%rbp)
+ 11753      50F9FFFF 
+ 11754 ac59 660F6F85 		movdqa	-6448(%rbp), %xmm0
+ 11754      D0E6FFFF 
+ 11755 ac61 F30F7F85 		movdqu	%xmm0, -1680(%rbp)
+ 11755      70F9FFFF 
+ 11756              	.LBB1412:
+ 11757              	.LBB1413:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 11758              		.loc 2 1282 0
+ 11759 ac69 F30F6F85 		movdqu	-1680(%rbp), %xmm0
+ 11759      70F9FFFF 
+ 11760 ac71 F30F7F85 		movdqu	%xmm0, -4864(%rbp)
+ 11760      00EDFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 11761              		.loc 2 1283 0
+ 11762 ac79 8B8508ED 		movl	-4856(%rbp), %eax
+ 11762      FFFF
+ 11763 ac7f 89850CED 		movl	%eax, -4852(%rbp)
+ 11763      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 11764              		.loc 2 1284 0
+ 11765 ac85 8B8504ED 		movl	-4860(%rbp), %eax
+ 11765      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 377
+
+
+ 11766 ac8b 898508ED 		movl	%eax, -4856(%rbp)
+ 11766      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 11767              		.loc 2 1285 0
+ 11768 ac91 8B8500ED 		movl	-4864(%rbp), %eax
+ 11768      FFFF
+ 11769 ac97 898504ED 		movl	%eax, -4860(%rbp)
+ 11769      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 11770              		.loc 2 1286 0
+ 11771 ac9d C78500ED 		movl	$0, -4864(%rbp)
+ 11771      FFFF0000 
+ 11771      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 11772              		.loc 2 1287 0
+ 11773 aca7 F30F6F85 		movdqu	-4864(%rbp), %xmm0
+ 11773      00EDFFFF 
+ 11774              	.LBE1413:
+ 11775              	.LBE1412:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11776              		.loc 2 1568 0
+ 11777 acaf 660F7F85 		movdqa	%xmm0, -6448(%rbp)
+ 11777      D0E6FFFF 
+ 11778 acb7 660F6F85 		movdqa	-6448(%rbp), %xmm0
+ 11778      D0E6FFFF 
+ 11779 acbf 660FEF85 		pxor	-1712(%rbp), %xmm0
+ 11779      50F9FFFF 
+ 11780 acc7 F30F7F85 		movdqu	%xmm0, -1712(%rbp)
+ 11780      50F9FFFF 
+ 11781 accf 660F6F85 		movdqa	-6448(%rbp), %xmm0
+ 11781      D0E6FFFF 
+ 11782 acd7 F30F7F85 		movdqu	%xmm0, -1664(%rbp)
+ 11782      80F9FFFF 
+ 11783              	.LBB1414:
+ 11784              	.LBB1415:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 11785              		.loc 2 1282 0
+ 11786 acdf F30F6F85 		movdqu	-1664(%rbp), %xmm0
+ 11786      80F9FFFF 
+ 11787 ace7 F30F7F85 		movdqu	%xmm0, -4848(%rbp)
+ 11787      10EDFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 11788              		.loc 2 1283 0
+ 11789 acef 8B8518ED 		movl	-4840(%rbp), %eax
+ 11789      FFFF
+ 11790 acf5 89851CED 		movl	%eax, -4836(%rbp)
+ 11790      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 11791              		.loc 2 1284 0
+ 11792 acfb 8B8514ED 		movl	-4844(%rbp), %eax
+ 11792      FFFF
+ 11793 ad01 898518ED 		movl	%eax, -4840(%rbp)
+ 11793      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 11794              		.loc 2 1285 0
+ 11795 ad07 8B8510ED 		movl	-4848(%rbp), %eax
+ 11795      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 378
+
+
+ 11796 ad0d 898514ED 		movl	%eax, -4844(%rbp)
+ 11796      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 11797              		.loc 2 1286 0
+ 11798 ad13 C78510ED 		movl	$0, -4848(%rbp)
+ 11798      FFFF0000 
+ 11798      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 11799              		.loc 2 1287 0
+ 11800 ad1d F30F6F85 		movdqu	-4848(%rbp), %xmm0
+ 11800      10EDFFFF 
+ 11801              	.LBE1415:
+ 11802              	.LBE1414:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11803              		.loc 2 1569 0
+ 11804 ad25 660F7F85 		movdqa	%xmm0, -6448(%rbp)
+ 11804      D0E6FFFF 
+ 11805 ad2d 660F6F85 		movdqa	-6448(%rbp), %xmm0
+ 11805      D0E6FFFF 
+ 11806 ad35 660FEF85 		pxor	-1712(%rbp), %xmm0
+ 11806      50F9FFFF 
+ 11807 ad3d F30F7F85 		movdqu	%xmm0, -1712(%rbp)
+ 11807      50F9FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 11808              		.loc 2 1571 0
+ 11809 ad45 F30F6F85 		movdqu	-1712(%rbp), %xmm0
+ 11809      50F9FFFF 
+ 11810              	.LBE1409:
+ 11811              	.LBE1408:
+1856:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(ShiftXorColumns) (v3);       /* k30   :k30^k31:k30^k31^k32:k30^k31^k32^k33 */
+ 11812              		.loc 2 1856 0
+ 11813 ad4d 660F7F85 		movdqa	%xmm0, -6800(%rbp)
+ 11813      70E5FFFF 
+ 11814 ad55 660F6F85 		movdqa	-6736(%rbp), %xmm0
+ 11814      B0E5FFFF 
+ 11815 ad5d F30F7F85 		movdqu	%xmm0, -1648(%rbp)
+ 11815      90F9FFFF 
+ 11816              	.LBB1416:
+ 11817              	.LBB1417:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 11818              		.loc 2 1565 0
+ 11819 ad65 F30F6F85 		movdqu	-1648(%rbp), %xmm0
+ 11819      90F9FFFF 
+ 11820 ad6d 660F7F85 		movdqa	%xmm0, -6432(%rbp)
+ 11820      E0E6FFFF 
+ 11821 ad75 660F6F85 		movdqa	-6432(%rbp), %xmm0
+ 11821      E0E6FFFF 
+ 11822 ad7d F30F7F85 		movdqu	%xmm0, -1632(%rbp)
+ 11822      A0F9FFFF 
+ 11823              	.LBB1418:
+ 11824              	.LBB1419:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 11825              		.loc 2 1282 0
+ 11826 ad85 F30F6F85 		movdqu	-1632(%rbp), %xmm0
+ 11826      A0F9FFFF 
+ 11827 ad8d F30F7F85 		movdqu	%xmm0, -4832(%rbp)
+ 11827      20EDFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 379
+
+
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 11828              		.loc 2 1283 0
+ 11829 ad95 8B8528ED 		movl	-4824(%rbp), %eax
+ 11829      FFFF
+ 11830 ad9b 89852CED 		movl	%eax, -4820(%rbp)
+ 11830      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 11831              		.loc 2 1284 0
+ 11832 ada1 8B8524ED 		movl	-4828(%rbp), %eax
+ 11832      FFFF
+ 11833 ada7 898528ED 		movl	%eax, -4824(%rbp)
+ 11833      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 11834              		.loc 2 1285 0
+ 11835 adad 8B8520ED 		movl	-4832(%rbp), %eax
+ 11835      FFFF
+ 11836 adb3 898524ED 		movl	%eax, -4828(%rbp)
+ 11836      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 11837              		.loc 2 1286 0
+ 11838 adb9 C78520ED 		movl	$0, -4832(%rbp)
+ 11838      FFFF0000 
+ 11838      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 11839              		.loc 2 1287 0
+ 11840 adc3 F30F6F85 		movdqu	-4832(%rbp), %xmm0
+ 11840      20EDFFFF 
+ 11841              	.LBE1419:
+ 11842              	.LBE1418:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11843              		.loc 2 1567 0
+ 11844 adcb 660F7F85 		movdqa	%xmm0, -6432(%rbp)
+ 11844      E0E6FFFF 
+ 11845 add3 660F6F85 		movdqa	-6432(%rbp), %xmm0
+ 11845      E0E6FFFF 
+ 11846 addb 660FEF85 		pxor	-1648(%rbp), %xmm0
+ 11846      90F9FFFF 
+ 11847 ade3 F30F7F85 		movdqu	%xmm0, -1648(%rbp)
+ 11847      90F9FFFF 
+ 11848 adeb 660F6F85 		movdqa	-6432(%rbp), %xmm0
+ 11848      E0E6FFFF 
+ 11849 adf3 F30F7F85 		movdqu	%xmm0, -1616(%rbp)
+ 11849      B0F9FFFF 
+ 11850              	.LBB1420:
+ 11851              	.LBB1421:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 11852              		.loc 2 1282 0
+ 11853 adfb F30F6F85 		movdqu	-1616(%rbp), %xmm0
+ 11853      B0F9FFFF 
+ 11854 ae03 F30F7F85 		movdqu	%xmm0, -4816(%rbp)
+ 11854      30EDFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 11855              		.loc 2 1283 0
+ 11856 ae0b 8B8538ED 		movl	-4808(%rbp), %eax
+ 11856      FFFF
+ 11857 ae11 89853CED 		movl	%eax, -4804(%rbp)
+ 11857      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 380
+
+
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 11858              		.loc 2 1284 0
+ 11859 ae17 8B8534ED 		movl	-4812(%rbp), %eax
+ 11859      FFFF
+ 11860 ae1d 898538ED 		movl	%eax, -4808(%rbp)
+ 11860      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 11861              		.loc 2 1285 0
+ 11862 ae23 8B8530ED 		movl	-4816(%rbp), %eax
+ 11862      FFFF
+ 11863 ae29 898534ED 		movl	%eax, -4812(%rbp)
+ 11863      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 11864              		.loc 2 1286 0
+ 11865 ae2f C78530ED 		movl	$0, -4816(%rbp)
+ 11865      FFFF0000 
+ 11865      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 11866              		.loc 2 1287 0
+ 11867 ae39 F30F6F85 		movdqu	-4816(%rbp), %xmm0
+ 11867      30EDFFFF 
+ 11868              	.LBE1421:
+ 11869              	.LBE1420:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11870              		.loc 2 1568 0
+ 11871 ae41 660F7F85 		movdqa	%xmm0, -6432(%rbp)
+ 11871      E0E6FFFF 
+ 11872 ae49 660F6F85 		movdqa	-6432(%rbp), %xmm0
+ 11872      E0E6FFFF 
+ 11873 ae51 660FEF85 		pxor	-1648(%rbp), %xmm0
+ 11873      90F9FFFF 
+ 11874 ae59 F30F7F85 		movdqu	%xmm0, -1648(%rbp)
+ 11874      90F9FFFF 
+ 11875 ae61 660F6F85 		movdqa	-6432(%rbp), %xmm0
+ 11875      E0E6FFFF 
+ 11876 ae69 F30F7F85 		movdqu	%xmm0, -1600(%rbp)
+ 11876      C0F9FFFF 
+ 11877              	.LBB1422:
+ 11878              	.LBB1423:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 11879              		.loc 2 1282 0
+ 11880 ae71 F30F6F85 		movdqu	-1600(%rbp), %xmm0
+ 11880      C0F9FFFF 
+ 11881 ae79 F30F7F85 		movdqu	%xmm0, -4800(%rbp)
+ 11881      40EDFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 11882              		.loc 2 1283 0
+ 11883 ae81 8B8548ED 		movl	-4792(%rbp), %eax
+ 11883      FFFF
+ 11884 ae87 89854CED 		movl	%eax, -4788(%rbp)
+ 11884      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 11885              		.loc 2 1284 0
+ 11886 ae8d 8B8544ED 		movl	-4796(%rbp), %eax
+ 11886      FFFF
+ 11887 ae93 898548ED 		movl	%eax, -4792(%rbp)
+ 11887      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 381
+
+
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 11888              		.loc 2 1285 0
+ 11889 ae99 8B8540ED 		movl	-4800(%rbp), %eax
+ 11889      FFFF
+ 11890 ae9f 898544ED 		movl	%eax, -4796(%rbp)
+ 11890      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 11891              		.loc 2 1286 0
+ 11892 aea5 C78540ED 		movl	$0, -4800(%rbp)
+ 11892      FFFF0000 
+ 11892      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 11893              		.loc 2 1287 0
+ 11894 aeaf F30F6F85 		movdqu	-4800(%rbp), %xmm0
+ 11894      40EDFFFF 
+ 11895              	.LBE1423:
+ 11896              	.LBE1422:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11897              		.loc 2 1569 0
+ 11898 aeb7 660F7F85 		movdqa	%xmm0, -6432(%rbp)
+ 11898      E0E6FFFF 
+ 11899 aebf 660F6F85 		movdqa	-6432(%rbp), %xmm0
+ 11899      E0E6FFFF 
+ 11900 aec7 660FEF85 		pxor	-1648(%rbp), %xmm0
+ 11900      90F9FFFF 
+ 11901 aecf F30F7F85 		movdqu	%xmm0, -1648(%rbp)
+ 11901      90F9FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 11902              		.loc 2 1571 0
+ 11903 aed7 F30F6F85 		movdqu	-1648(%rbp), %xmm0
+ 11903      90F9FFFF 
+ 11904              	.LBE1417:
+ 11905              	.LBE1416:
+1857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(ShiftXorColumns) (v4);       /* k26   :k26^k27: k27    : 0            */
+ 11906              		.loc 2 1857 0
+ 11907 aedf 660F7F85 		movdqa	%xmm0, -6784(%rbp)
+ 11907      80E5FFFF 
+1858:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 11908              		.loc 2 1858 0
+ 11909 aee7 660F6F85 		movdqa	-6768(%rbp), %xmm0
+ 11909      90E5FFFF 
+ 11910 aeef 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 11910      C0E5FFFF 
+ 11911 aef7 660F6F85 		movdqa	-6720(%rbp), %xmm0
+ 11911      C0E5FFFF 
+ 11912 aeff F30F7F85 		movdqu	%xmm0, -1568(%rbp)
+ 11912      E0F9FFFF 
+ 11913              	.LBB1424:
+ 11914              	.LBB1425:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 11915              		.loc 2 1681 0
+ 11916 af07 B8200000 		movl	$32, %eax
+ 11916      00
+ 11917 af0c 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 11917      00000000 
+ 11918 af14 F30F7F85 		movdqu	%xmm0, -1536(%rbp)
+ 11918      00FAFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 382
+
+
+ 11919 af1c 8985FCF9 		movl	%eax, -1540(%rbp)
+ 11919      FFFF
+ 11920              	.LBB1426:
+ 11921              	.LBB1427:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 11922              		.loc 2 522 0
+ 11923 af22 F30F6F85 		movdqu	-1536(%rbp), %xmm0
+ 11923      00FAFFFF 
+ 11924 af2a F30F7F85 		movdqu	%xmm0, -4720(%rbp)
+ 11924      90EDFFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 11925              		.loc 2 523 0
+ 11926 af32 B8030000 		movl	$3, %eax
+ 11926      00
+ 11927 af37 4898     		cltq
+ 11928 af39 8B95FCF9 		movl	-1540(%rbp), %edx
+ 11928      FFFF
+ 11929 af3f 89948590 		movl	%edx, -4720(%rbp,%rax,4)
+ 11929      EDFFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 11930              		.loc 2 524 0
+ 11931 af46 F30F6F85 		movdqu	-4720(%rbp), %xmm0
+ 11931      90EDFFFF 
+ 11932 af4e F30F7F85 		movdqu	%xmm0, -1536(%rbp)
+ 11932      00FAFFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 11933              		.loc 2 526 0
+ 11934 af56 F30F6F85 		movdqu	-1536(%rbp), %xmm0
+ 11934      00FAFFFF 
+ 11935              	.LBE1427:
+ 11936              	.LBE1426:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 11937              		.loc 2 1681 0
+ 11938 af5e 660F7F85 		movdqa	%xmm0, -6400(%rbp)
+ 11938      00E7FFFF 
+ 11939 af66 F30F6F85 		movdqu	-1568(%rbp), %xmm0
+ 11939      E0F9FFFF 
+ 11940 af6e F30F7F85 		movdqu	%xmm0, -1520(%rbp)
+ 11940      10FAFFFF 
+ 11941 af76 F30F6F85 		movdqu	-1520(%rbp), %xmm0
+ 11941      10FAFFFF 
+ 11942 af7e F30F7F85 		movdqu	%xmm0, -1488(%rbp)
+ 11942      30FAFFFF 
+ 11943 af86 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 11943      000000
+ 11944 af8d 48898528 		movq	%rax, -1496(%rbp)
+ 11944      FAFFFF
+ 11945              	.LBB1428:
+ 11946              	.LBB1429:
+ 11947              	.LBB1430:
+ 11948              	.LBB1431:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 11949              		.loc 2 851 0
+ 11950 af94 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 11950      00000000 
+ 11951 af9c F30F7F85 		movdqu	%xmm0, -1456(%rbp)
+ 11951      50FAFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 383
+
+
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 11952              		.loc 2 854 0
+ 11953 afa4 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 11953      00000000 
+ 11954 afac F30F6F8D 		movdqu	-1488(%rbp), %xmm1
+ 11954      30FAFFFF 
+ 11955 afb4 F30F7F8D 		movdqu	%xmm1, -1376(%rbp)
+ 11955      A0FAFFFF 
+ 11956 afbc F30F7F85 		movdqu	%xmm0, -1392(%rbp)
+ 11956      90FAFFFF 
+ 11957              	.LBB1432:
+ 11958              	.LBB1433:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 11959              		.loc 2 206 0
+ 11960 afc4 F30F6F85 		movdqu	-1392(%rbp), %xmm0
+ 11960      90FAFFFF 
+ 11961 afcc F30F6F8D 		movdqu	-1376(%rbp), %xmm1
+ 11961      A0FAFFFF 
+ 11962 afd4 660FDBC1 		pand	%xmm1, %xmm0
+ 11963              	.LBE1433:
+ 11964              	.LBE1432:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 11965              		.loc 2 854 0
+ 11966 afd8 F30F7F85 		movdqu	%xmm0, -1408(%rbp)
+ 11966      80FAFFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 11967              		.loc 2 862 0
+ 11968 afe0 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 11968      00000000 
+ 11969 afe8 F30F6F8D 		movdqu	-1488(%rbp), %xmm1
+ 11969      30FAFFFF 
+ 11970 aff0 F30F7F8D 		movdqu	%xmm1, -1344(%rbp)
+ 11970      C0FAFFFF 
+ 11971 aff8 F30F7F85 		movdqu	%xmm0, -1360(%rbp)
+ 11971      B0FAFFFF 
+ 11972              	.LBB1434:
+ 11973              		.loc 2 2642 0
+ 11974 b000 0FB685C0 		movzbl	-1344(%rbp), %eax
+ 11974      FAFFFF
+ 11975 b007 0FB695B0 		movzbl	-1360(%rbp), %edx
+ 11975      FAFFFF
+ 11976 b00e 0FB6C0   		movzbl	%al, %eax
+ 11977 b011 6689852E 		movw	%ax, -6866(%rbp)
+ 11977      E5FFFF
+ 11978 b018 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 11978      E5FFFF
+ 11979 b01f F6F2     		divb	%dl
+ 11980 b021 4189C7   		movl	%eax, %r15d
+ 11981 b024 0FB685C1 		movzbl	-1343(%rbp), %eax
+ 11981      FAFFFF
+ 11982 b02b 0FB695B1 		movzbl	-1359(%rbp), %edx
+ 11982      FAFFFF
+ 11983 b032 0FB6C0   		movzbl	%al, %eax
+ 11984 b035 6689852E 		movw	%ax, -6866(%rbp)
+ 11984      E5FFFF
+ 11985 b03c 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 11985      E5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 384
+
+
+ 11986 b043 F6F2     		divb	%dl
+ 11987 b045 88851FE7 		movb	%al, -6369(%rbp)
+ 11987      FFFF
+ 11988 b04b 0FB685C2 		movzbl	-1342(%rbp), %eax
+ 11988      FAFFFF
+ 11989 b052 0FB695B2 		movzbl	-1358(%rbp), %edx
+ 11989      FAFFFF
+ 11990 b059 0FB6C0   		movzbl	%al, %eax
+ 11991 b05c 6689852E 		movw	%ax, -6866(%rbp)
+ 11991      E5FFFF
+ 11992 b063 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 11992      E5FFFF
+ 11993 b06a F6F2     		divb	%dl
+ 11994 b06c 88851EE7 		movb	%al, -6370(%rbp)
+ 11994      FFFF
+ 11995 b072 0FB685C3 		movzbl	-1341(%rbp), %eax
+ 11995      FAFFFF
+ 11996 b079 0FB695B3 		movzbl	-1357(%rbp), %edx
+ 11996      FAFFFF
+ 11997 b080 0FB6C0   		movzbl	%al, %eax
+ 11998 b083 6689852E 		movw	%ax, -6866(%rbp)
+ 11998      E5FFFF
+ 11999 b08a 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 11999      E5FFFF
+ 12000 b091 F6F2     		divb	%dl
+ 12001 b093 88851DE7 		movb	%al, -6371(%rbp)
+ 12001      FFFF
+ 12002 b099 0FB685C4 		movzbl	-1340(%rbp), %eax
+ 12002      FAFFFF
+ 12003 b0a0 0FB695B4 		movzbl	-1356(%rbp), %edx
+ 12003      FAFFFF
+ 12004 b0a7 0FB6C0   		movzbl	%al, %eax
+ 12005 b0aa 6689852E 		movw	%ax, -6866(%rbp)
+ 12005      E5FFFF
+ 12006 b0b1 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 12006      E5FFFF
+ 12007 b0b8 F6F2     		divb	%dl
+ 12008 b0ba 88851CE7 		movb	%al, -6372(%rbp)
+ 12008      FFFF
+ 12009 b0c0 0FB685C5 		movzbl	-1339(%rbp), %eax
+ 12009      FAFFFF
+ 12010 b0c7 0FB695B5 		movzbl	-1355(%rbp), %edx
+ 12010      FAFFFF
+ 12011 b0ce 0FB6C0   		movzbl	%al, %eax
+ 12012 b0d1 6689852E 		movw	%ax, -6866(%rbp)
+ 12012      E5FFFF
+ 12013 b0d8 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 12013      E5FFFF
+ 12014 b0df F6F2     		divb	%dl
+ 12015 b0e1 4189C1   		movl	%eax, %r9d
+ 12016 b0e4 0FB685C6 		movzbl	-1338(%rbp), %eax
+ 12016      FAFFFF
+ 12017 b0eb 0FB695B6 		movzbl	-1354(%rbp), %edx
+ 12017      FAFFFF
+ 12018 b0f2 0FB6C0   		movzbl	%al, %eax
+ 12019 b0f5 6689852E 		movw	%ax, -6866(%rbp)
+ 12019      E5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 385
+
+
+ 12020 b0fc 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 12020      E5FFFF
+ 12021 b103 F6F2     		divb	%dl
+ 12022 b105 89C7     		movl	%eax, %edi
+ 12023 b107 0FB685C7 		movzbl	-1337(%rbp), %eax
+ 12023      FAFFFF
+ 12024 b10e 0FB695B7 		movzbl	-1353(%rbp), %edx
+ 12024      FAFFFF
+ 12025 b115 0FB6C0   		movzbl	%al, %eax
+ 12026 b118 6689852E 		movw	%ax, -6866(%rbp)
+ 12026      E5FFFF
+ 12027 b11f 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 12027      E5FFFF
+ 12028 b126 F6F2     		divb	%dl
+ 12029 b128 89C3     		movl	%eax, %ebx
+ 12030 b12a 0FB685C8 		movzbl	-1336(%rbp), %eax
+ 12030      FAFFFF
+ 12031 b131 0FB695B8 		movzbl	-1352(%rbp), %edx
+ 12031      FAFFFF
+ 12032 b138 0FB6C0   		movzbl	%al, %eax
+ 12033 b13b 6689852E 		movw	%ax, -6866(%rbp)
+ 12033      E5FFFF
+ 12034 b142 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 12034      E5FFFF
+ 12035 b149 F6F2     		divb	%dl
+ 12036 b14b 4189C2   		movl	%eax, %r10d
+ 12037 b14e 0FB685C9 		movzbl	-1335(%rbp), %eax
+ 12037      FAFFFF
+ 12038 b155 0FB695B9 		movzbl	-1351(%rbp), %edx
+ 12038      FAFFFF
+ 12039 b15c 0FB6C0   		movzbl	%al, %eax
+ 12040 b15f 6689852E 		movw	%ax, -6866(%rbp)
+ 12040      E5FFFF
+ 12041 b166 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 12041      E5FFFF
+ 12042 b16d F6F2     		divb	%dl
+ 12043 b16f 4189C3   		movl	%eax, %r11d
+ 12044 b172 0FB685CA 		movzbl	-1334(%rbp), %eax
+ 12044      FAFFFF
+ 12045 b179 0FB695BA 		movzbl	-1350(%rbp), %edx
+ 12045      FAFFFF
+ 12046 b180 0FB6C0   		movzbl	%al, %eax
+ 12047 b183 6689852E 		movw	%ax, -6866(%rbp)
+ 12047      E5FFFF
+ 12048 b18a 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 12048      E5FFFF
+ 12049 b191 F6F2     		divb	%dl
+ 12050 b193 4189C4   		movl	%eax, %r12d
+ 12051 b196 0FB685CB 		movzbl	-1333(%rbp), %eax
+ 12051      FAFFFF
+ 12052 b19d 0FB695BB 		movzbl	-1349(%rbp), %edx
+ 12052      FAFFFF
+ 12053 b1a4 0FB6C0   		movzbl	%al, %eax
+ 12054 b1a7 6689852E 		movw	%ax, -6866(%rbp)
+ 12054      E5FFFF
+ 12055 b1ae 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 12055      E5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 386
+
+
+ 12056 b1b5 F6F2     		divb	%dl
+ 12057 b1b7 4189C5   		movl	%eax, %r13d
+ 12058 b1ba 0FB685CC 		movzbl	-1332(%rbp), %eax
+ 12058      FAFFFF
+ 12059 b1c1 0FB695BC 		movzbl	-1348(%rbp), %edx
+ 12059      FAFFFF
+ 12060 b1c8 0FB6C0   		movzbl	%al, %eax
+ 12061 b1cb 6689852E 		movw	%ax, -6866(%rbp)
+ 12061      E5FFFF
+ 12062 b1d2 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 12062      E5FFFF
+ 12063 b1d9 F6F2     		divb	%dl
+ 12064 b1db 4189C6   		movl	%eax, %r14d
+ 12065 b1de 0FB685CD 		movzbl	-1331(%rbp), %eax
+ 12065      FAFFFF
+ 12066 b1e5 0FB695BD 		movzbl	-1347(%rbp), %edx
+ 12066      FAFFFF
+ 12067 b1ec 0FB6C0   		movzbl	%al, %eax
+ 12068 b1ef 6689852E 		movw	%ax, -6866(%rbp)
+ 12068      E5FFFF
+ 12069 b1f6 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 12069      E5FFFF
+ 12070 b1fd F6F2     		divb	%dl
+ 12071 b1ff 4189C0   		movl	%eax, %r8d
+ 12072 b202 0FB685CE 		movzbl	-1330(%rbp), %eax
+ 12072      FAFFFF
+ 12073 b209 0FB695BE 		movzbl	-1346(%rbp), %edx
+ 12073      FAFFFF
+ 12074 b210 0FB6C0   		movzbl	%al, %eax
+ 12075 b213 6689852E 		movw	%ax, -6866(%rbp)
+ 12075      E5FFFF
+ 12076 b21a 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 12076      E5FFFF
+ 12077 b221 F6F2     		divb	%dl
+ 12078 b223 89C6     		movl	%eax, %esi
+ 12079 b225 0FB685CF 		movzbl	-1329(%rbp), %eax
+ 12079      FAFFFF
+ 12080 b22c 0FB695BF 		movzbl	-1345(%rbp), %edx
+ 12080      FAFFFF
+ 12081 b233 0FB6C0   		movzbl	%al, %eax
+ 12082 b236 6689852E 		movw	%ax, -6866(%rbp)
+ 12082      E5FFFF
+ 12083 b23d 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 12083      E5FFFF
+ 12084 b244 F6F2     		divb	%dl
+ 12085 b246 89C1     		movl	%eax, %ecx
+ 12086              	.LBB1435:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 12087              		.loc 2 346 0
+ 12088 b248 0FB6D3   		movzbl	%bl, %edx
+ 12089 b24b 400FB6C7 		movzbl	%dil, %eax
+ 12090 b24f 48C1E208 		salq	$8, %rdx
+ 12091 b253 4809C2   		orq	%rax, %rdx
+ 12092 b256 410FB6C1 		movzbl	%r9b, %eax
+ 12093 b25a 48C1E208 		salq	$8, %rdx
+ 12094 b25e 4809C2   		orq	%rax, %rdx
+ 12095 b261 0FB6851C 		movzbl	-6372(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 387
+
+
+ 12095      E7FFFF
+ 12096 b268 48C1E208 		salq	$8, %rdx
+ 12097 b26c 4809C2   		orq	%rax, %rdx
+ 12098 b26f 0FB6851D 		movzbl	-6371(%rbp), %eax
+ 12098      E7FFFF
+ 12099 b276 48C1E208 		salq	$8, %rdx
+ 12100 b27a 4809C2   		orq	%rax, %rdx
+ 12101 b27d 0FB6851E 		movzbl	-6370(%rbp), %eax
+ 12101      E7FFFF
+ 12102 b284 48C1E208 		salq	$8, %rdx
+ 12103 b288 4809C2   		orq	%rax, %rdx
+ 12104 b28b 0FB6851F 		movzbl	-6369(%rbp), %eax
+ 12104      E7FFFF
+ 12105 b292 48C1E208 		salq	$8, %rdx
+ 12106 b296 4809C2   		orq	%rax, %rdx
+ 12107 b299 410FB6C7 		movzbl	%r15b, %eax
+ 12108 b29d 48C1E208 		salq	$8, %rdx
+ 12109 b2a1 4809C2   		orq	%rax, %rdx
+ 12110 b2a4 0FB6C1   		movzbl	%cl, %eax
+ 12111 b2a7 400FB6CE 		movzbl	%sil, %ecx
+ 12112 b2ab 48C1E008 		salq	$8, %rax
+ 12113 b2af 4809C8   		orq	%rcx, %rax
+ 12114 b2b2 410FB6C8 		movzbl	%r8b, %ecx
+ 12115 b2b6 48C1E008 		salq	$8, %rax
+ 12116 b2ba 4809C8   		orq	%rcx, %rax
+ 12117 b2bd 410FB6CE 		movzbl	%r14b, %ecx
+ 12118 b2c1 48C1E008 		salq	$8, %rax
+ 12119 b2c5 4809C8   		orq	%rcx, %rax
+ 12120 b2c8 410FB6CD 		movzbl	%r13b, %ecx
+ 12121 b2cc 48C1E008 		salq	$8, %rax
+ 12122 b2d0 4809C8   		orq	%rcx, %rax
+ 12123 b2d3 410FB6CC 		movzbl	%r12b, %ecx
+ 12124 b2d7 48C1E008 		salq	$8, %rax
+ 12125 b2db 4809C8   		orq	%rcx, %rax
+ 12126 b2de 410FB6CB 		movzbl	%r11b, %ecx
+ 12127 b2e2 48C1E008 		salq	$8, %rax
+ 12128 b2e6 4809C8   		orq	%rcx, %rax
+ 12129 b2e9 410FB6CA 		movzbl	%r10b, %ecx
+ 12130 b2ed 48C1E008 		salq	$8, %rax
+ 12131 b2f1 4809C8   		orq	%rcx, %rax
+ 12132 b2f4 48899540 		movq	%rdx, -6848(%rbp)
+ 12132      E5FFFF
+ 12133 b2fb 48898548 		movq	%rax, -6840(%rbp)
+ 12133      E5FFFF
+ 12134 b302 660F6F85 		movdqa	-6848(%rbp), %xmm0
+ 12134      40E5FFFF 
+ 12135              	.LBE1435:
+ 12136              	.LBE1434:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 12137              		.loc 2 862 0
+ 12138 b30a F30F7F85 		movdqu	%xmm0, -1424(%rbp)
+ 12138      70FAFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 12139              		.loc 2 866 0
+ 12140 b312 C7854CFA 		movl	$0, -1460(%rbp)
+ 12140      FFFF0000 
+ 12140      0000
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 388
+
+
+ 12141 b31c E9860200 		jmp	.L276
+ 12141      00
+ 12142              	.L285:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 12143              		.loc 2 868 0
+ 12144 b321 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 12144      00000000 
+ 12145 b329 F30F7F85 		movdqu	%xmm0, -1312(%rbp)
+ 12145      E0FAFFFF 
+ 12146 b331 F30F6F85 		movdqu	-1424(%rbp), %xmm0
+ 12146      70FAFFFF 
+ 12147 b339 F30F7F85 		movdqu	%xmm0, -1328(%rbp)
+ 12147      D0FAFFFF 
+ 12148              	.LBB1436:
+ 12149              	.LBB1437:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 12150              		.loc 2 380 0
+ 12151 b341 F30F6F85 		movdqu	-1312(%rbp), %xmm0
+ 12151      E0FAFFFF 
+ 12152 b349 F30F7F85 		movdqu	%xmm0, -4688(%rbp)
+ 12152      B0EDFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 12153              		.loc 2 381 0
+ 12154 b351 F30F6F85 		movdqu	-1328(%rbp), %xmm0
+ 12154      D0FAFFFF 
+ 12155 b359 F30F7F85 		movdqu	%xmm0, -4704(%rbp)
+ 12155      A0EDFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 12156              		.loc 2 383 0
+ 12157 b361 C785FCFA 		movl	$0, -1284(%rbp)
+ 12157      FFFF0000 
+ 12157      0000
+ 12158 b36b EB5C     		jmp	.L277
+ 12159              	.L280:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 12160              		.loc 2 385 0
+ 12161 b36d 8B85FCFA 		movl	-1284(%rbp), %eax
+ 12161      FFFF
+ 12162 b373 89C0     		mov	%eax, %eax
+ 12163 b375 0FB68405 		movzbl	-4704(%rbp,%rax), %eax
+ 12163      A0EDFFFF 
+ 12164 b37d 84C0     		testb	%al, %al
+ 12165 b37f 7912     		jns	.L278
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 12166              		.loc 2 386 0
+ 12167 b381 8B85FCFA 		movl	-1284(%rbp), %eax
+ 12167      FFFF
+ 12168 b387 89C0     		mov	%eax, %eax
+ 12169 b389 C68405C0 		movb	$0, -4672(%rbp,%rax)
+ 12169      EDFFFF00 
+ 12170 b391 EB2F     		jmp	.L279
+ 12171              	.L278:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 12172              		.loc 2 388 0
+ 12173 b393 8B8DFCFA 		movl	-1284(%rbp), %ecx
+ 12173      FFFF
+ 12174 b399 8B85FCFA 		movl	-1284(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 389
+
+
+ 12174      FFFF
+ 12175 b39f 89C0     		mov	%eax, %eax
+ 12176 b3a1 0FB68405 		movzbl	-4704(%rbp,%rax), %eax
+ 12176      A0EDFFFF 
+ 12177 b3a9 0FB6C0   		movzbl	%al, %eax
+ 12178 b3ac 83E00F   		andl	$15, %eax
+ 12179 b3af 4898     		cltq
+ 12180 b3b1 0FB69405 		movzbl	-4688(%rbp,%rax), %edx
+ 12180      B0EDFFFF 
+ 12181 b3b9 89C8     		mov	%ecx, %eax
+ 12182 b3bb 889405C0 		movb	%dl, -4672(%rbp,%rax)
+ 12182      EDFFFF
+ 12183              	.L279:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 12184              		.loc 2 383 0
+ 12185 b3c2 8385FCFA 		addl	$1, -1284(%rbp)
+ 12185      FFFF01
+ 12186              	.L277:
+ 12187 b3c9 83BDFCFA 		cmpl	$15, -1284(%rbp)
+ 12187      FFFF0F
+ 12188 b3d0 769B     		jbe	.L280
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 12189              		.loc 2 391 0
+ 12190 b3d2 F30F6F85 		movdqu	-4672(%rbp), %xmm0
+ 12190      C0EDFFFF 
+ 12191              	.LBE1437:
+ 12192              	.LBE1436:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 12193              		.loc 2 868 0
+ 12194 b3da F30F7F85 		movdqu	%xmm0, -1440(%rbp)
+ 12194      60FAFFFF 
+ 12195 b3e2 F30F6F85 		movdqu	-1408(%rbp), %xmm0
+ 12195      80FAFFFF 
+ 12196 b3ea F30F7F85 		movdqu	%xmm0, -1264(%rbp)
+ 12196      10FBFFFF 
+ 12197 b3f2 F30F6F85 		movdqu	-1440(%rbp), %xmm0
+ 12197      60FAFFFF 
+ 12198 b3fa F30F7F85 		movdqu	%xmm0, -1280(%rbp)
+ 12198      00FBFFFF 
+ 12199              	.LBB1438:
+ 12200              	.LBB1439:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 12201              		.loc 2 234 0
+ 12202 b402 F30F6F85 		movdqu	-1280(%rbp), %xmm0
+ 12202      00FBFFFF 
+ 12203 b40a F30F6F8D 		movdqu	-1264(%rbp), %xmm1
+ 12203      10FBFFFF 
+ 12204 b412 660FEBC1 		por	%xmm1, %xmm0
+ 12205              	.LBE1439:
+ 12206              	.LBE1438:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 12207              		.loc 2 870 0
+ 12208 b416 F30F7F85 		movdqu	%xmm0, -1440(%rbp)
+ 12208      60FAFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 12209              		.loc 2 872 0
+ 12210 b41e 8B854CFA 		mov	-1460(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 390
+
+
+ 12210      FFFF
+ 12211 b424 48C1E004 		salq	$4, %rax
+ 12212 b428 48038528 		addq	-1496(%rbp), %rax
+ 12212      FAFFFF
+ 12213 b42f 660F6F00 		movdqa	(%rax), %xmm0
+ 12214 b433 F30F7F85 		movdqu	%xmm0, -1232(%rbp)
+ 12214      30FBFFFF 
+ 12215 b43b F30F6F85 		movdqu	-1440(%rbp), %xmm0
+ 12215      60FAFFFF 
+ 12216 b443 F30F7F85 		movdqu	%xmm0, -1248(%rbp)
+ 12216      20FBFFFF 
+ 12217              	.LBB1440:
+ 12218              	.LBB1441:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 12219              		.loc 2 380 0
+ 12220 b44b F30F6F85 		movdqu	-1232(%rbp), %xmm0
+ 12220      30FBFFFF 
+ 12221 b453 F30F7F85 		movdqu	%xmm0, -4640(%rbp)
+ 12221      E0EDFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 12222              		.loc 2 381 0
+ 12223 b45b F30F6F85 		movdqu	-1248(%rbp), %xmm0
+ 12223      20FBFFFF 
+ 12224 b463 F30F7F85 		movdqu	%xmm0, -4656(%rbp)
+ 12224      D0EDFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 12225              		.loc 2 383 0
+ 12226 b46b C7854CFB 		movl	$0, -1204(%rbp)
+ 12226      FFFF0000 
+ 12226      0000
+ 12227 b475 EB5C     		jmp	.L281
+ 12228              	.L284:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 12229              		.loc 2 385 0
+ 12230 b477 8B854CFB 		movl	-1204(%rbp), %eax
+ 12230      FFFF
+ 12231 b47d 89C0     		mov	%eax, %eax
+ 12232 b47f 0FB68405 		movzbl	-4656(%rbp,%rax), %eax
+ 12232      D0EDFFFF 
+ 12233 b487 84C0     		testb	%al, %al
+ 12234 b489 7912     		jns	.L282
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 12235              		.loc 2 386 0
+ 12236 b48b 8B854CFB 		movl	-1204(%rbp), %eax
+ 12236      FFFF
+ 12237 b491 89C0     		mov	%eax, %eax
+ 12238 b493 C68405F0 		movb	$0, -4624(%rbp,%rax)
+ 12238      EDFFFF00 
+ 12239 b49b EB2F     		jmp	.L283
+ 12240              	.L282:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 12241              		.loc 2 388 0
+ 12242 b49d 8B8D4CFB 		movl	-1204(%rbp), %ecx
+ 12242      FFFF
+ 12243 b4a3 8B854CFB 		movl	-1204(%rbp), %eax
+ 12243      FFFF
+ 12244 b4a9 89C0     		mov	%eax, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 391
+
+
+ 12245 b4ab 0FB68405 		movzbl	-4656(%rbp,%rax), %eax
+ 12245      D0EDFFFF 
+ 12246 b4b3 0FB6C0   		movzbl	%al, %eax
+ 12247 b4b6 83E00F   		andl	$15, %eax
+ 12248 b4b9 4898     		cltq
+ 12249 b4bb 0FB69405 		movzbl	-4640(%rbp,%rax), %edx
+ 12249      E0EDFFFF 
+ 12250 b4c3 89C8     		mov	%ecx, %eax
+ 12251 b4c5 889405F0 		movb	%dl, -4624(%rbp,%rax)
+ 12251      EDFFFF
+ 12252              	.L283:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 12253              		.loc 2 383 0
+ 12254 b4cc 83854CFB 		addl	$1, -1204(%rbp)
+ 12254      FFFF01
+ 12255              	.L281:
+ 12256 b4d3 83BD4CFB 		cmpl	$15, -1204(%rbp)
+ 12256      FFFF0F
+ 12257 b4da 769B     		jbe	.L284
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 12258              		.loc 2 391 0
+ 12259 b4dc F30F6F85 		movdqu	-4624(%rbp), %xmm0
+ 12259      F0EDFFFF 
+ 12260              	.LBE1441:
+ 12261              	.LBE1440:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 12262              		.loc 2 872 0
+ 12263 b4e4 F30F7F85 		movdqu	%xmm0, -1440(%rbp)
+ 12263      60FAFFFF 
+ 12264 b4ec F30F6F85 		movdqu	-1456(%rbp), %xmm0
+ 12264      50FAFFFF 
+ 12265 b4f4 F30F7F85 		movdqu	%xmm0, -1184(%rbp)
+ 12265      60FBFFFF 
+ 12266 b4fc F30F6F85 		movdqu	-1440(%rbp), %xmm0
+ 12266      60FAFFFF 
+ 12267 b504 F30F7F85 		movdqu	%xmm0, -1200(%rbp)
+ 12267      50FBFFFF 
+ 12268              	.LBB1442:
+ 12269              	.LBB1443:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 12270              		.loc 2 234 0
+ 12271 b50c F30F6F85 		movdqu	-1200(%rbp), %xmm0
+ 12271      50FBFFFF 
+ 12272 b514 F30F6F8D 		movdqu	-1184(%rbp), %xmm1
+ 12272      60FBFFFF 
+ 12273 b51c 660FEBC1 		por	%xmm1, %xmm0
+ 12274              	.LBE1443:
+ 12275              	.LBE1442:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 12276              		.loc 2 874 0
+ 12277 b520 F30F7F85 		movdqu	%xmm0, -1456(%rbp)
+ 12277      50FAFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 12278              		.loc 2 876 0
+ 12279 b528 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 12279      00000000 
+ 12280 b530 F30F6F8D 		movdqu	-1424(%rbp), %xmm1
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 392
+
+
+ 12280      70FAFFFF 
+ 12281 b538 F30F7F8D 		movdqu	%xmm1, -1152(%rbp)
+ 12281      80FBFFFF 
+ 12282 b540 F30F7F85 		movdqu	%xmm0, -1168(%rbp)
+ 12282      70FBFFFF 
+ 12283              	.LBB1444:
+ 12284              	.LBB1445:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 12285              		.loc 2 290 0
+ 12286 b548 F30F6F8D 		movdqu	-1168(%rbp), %xmm1
+ 12286      70FBFFFF 
+ 12287 b550 F30F6F85 		movdqu	-1152(%rbp), %xmm0
+ 12287      80FBFFFF 
+ 12288 b558 660FF8C1 		psubb	%xmm1, %xmm0
+ 12289              	.LBE1445:
+ 12290              	.LBE1444:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 12291              		.loc 2 876 0
+ 12292 b55c F30F7F85 		movdqu	%xmm0, -1424(%rbp)
+ 12292      70FAFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 12293              		.loc 2 878 0
+ 12294 b564 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 12294      00000000 
+ 12295 b56c F30F6F8D 		movdqu	-1424(%rbp), %xmm1
+ 12295      70FAFFFF 
+ 12296 b574 F30F7F8D 		movdqu	%xmm1, -1120(%rbp)
+ 12296      A0FBFFFF 
+ 12297 b57c F30F7F85 		movdqu	%xmm0, -1136(%rbp)
+ 12297      90FBFFFF 
+ 12298              	.LBB1446:
+ 12299              	.LBB1447:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 12300              		.loc 2 206 0
+ 12301 b584 F30F6F85 		movdqu	-1136(%rbp), %xmm0
+ 12301      90FBFFFF 
+ 12302 b58c F30F6F8D 		movdqu	-1120(%rbp), %xmm1
+ 12302      A0FBFFFF 
+ 12303 b594 660FDBC1 		pand	%xmm1, %xmm0
+ 12304              	.LBE1447:
+ 12305              	.LBE1446:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 12306              		.loc 2 878 0
+ 12307 b598 F30F7F85 		movdqu	%xmm0, -1424(%rbp)
+ 12307      70FAFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 12308              		.loc 2 866 0
+ 12309 b5a0 83854CFA 		addl	$1, -1460(%rbp)
+ 12309      FFFF01
+ 12310              	.L276:
+ 12311 b5a7 83BD4CFA 		cmpl	$15, -1460(%rbp)
+ 12311      FFFF0F
+ 12312 b5ae 0F866DFD 		jbe	.L285
+ 12312      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 12313              		.loc 2 882 0
+ 12314 b5b4 F30F6F85 		movdqu	-1456(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 393
+
+
+ 12314      50FAFFFF 
+ 12315              	.LBE1431:
+ 12316              	.LBE1430:
+ 12317              	.LBE1429:
+ 12318              	.LBE1428:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 12319              		.loc 2 1682 0
+ 12320 b5bc 660F7F85 		movdqa	%xmm0, -6416(%rbp)
+ 12320      F0E6FFFF 
+ 12321              	.LBB1448:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 12322              		.loc 2 1683 0
+ 12323 b5c4 660F6F85 		movdqa	-6416(%rbp), %xmm0
+ 12323      F0E6FFFF 
+ 12324 b5cc F30F7F85 		movdqu	%xmm0, -4736(%rbp)
+ 12324      80EDFFFF 
+ 12325 b5d4 E8000000 		call	KDbgWriterGet at PLT
+ 12325      00
+ 12326 b5d9 4885C0   		testq	%rax, %rax
+ 12327 b5dc 7479     		je	.L287
+ 12328 b5de BF010000 		movl	$1, %edi
+ 12328      00
+ 12329 b5e3 E8000000 		call	KDbgCondToFlag at PLT
+ 12329      00
+ 12330 b5e8 4889C6   		movq	%rax, %rsi
+ 12331 b5eb BF100000 		movl	$16, %edi
+ 12331      00
+ 12332 b5f0 E8000000 		call	KDbgTestModConds at PLT
+ 12332      00
+ 12333 b5f5 84C0     		testb	%al, %al
+ 12334 b5f7 745E     		je	.L287
+ 12335 b5f9 8B858CED 		movl	-4724(%rbp), %eax
+ 12335      FFFF
+ 12336 b5ff 89C7     		movl	%eax, %edi
+ 12337 b601 E8FA49FF 		call	bswap_32
+ 12337      FF
+ 12338 b606 4189C5   		movl	%eax, %r13d
+ 12339 b609 8B8588ED 		movl	-4728(%rbp), %eax
+ 12339      FFFF
+ 12340 b60f 89C7     		movl	%eax, %edi
+ 12341 b611 E8EA49FF 		call	bswap_32
+ 12341      FF
+ 12342 b616 4189C4   		movl	%eax, %r12d
+ 12343 b619 8B8584ED 		movl	-4732(%rbp), %eax
+ 12343      FFFF
+ 12344 b61f 89C7     		movl	%eax, %edi
+ 12345 b621 E8DA49FF 		call	bswap_32
+ 12345      FF
+ 12346 b626 89C3     		movl	%eax, %ebx
+ 12347 b628 8B8580ED 		movl	-4736(%rbp), %eax
+ 12347      FFFF
+ 12348 b62e 89C7     		movl	%eax, %edi
+ 12349 b630 E8CB49FF 		call	bswap_32
+ 12349      FF
+ 12350 b635 4589E9   		movl	%r13d, %r9d
+ 12351 b638 4589E0   		movl	%r12d, %r8d
+ 12352 b63b 89D9     		movl	%ebx, %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 394
+
+
+ 12353 b63d 89C2     		movl	%eax, %edx
+ 12354 b63f 488D3500 		leaq	.LC0(%rip), %rsi
+ 12354      000000
+ 12355 b646 488D3D00 		leaq	.LC1(%rip), %rdi
+ 12355      000000
+ 12356 b64d B8000000 		movl	$0, %eax
+ 12356      00
+ 12357 b652 E8000000 		call	KDbgMsg at PLT
+ 12357      00
+ 12358              	.L287:
+ 12359 b657 660F6F85 		movdqa	-6416(%rbp), %xmm0
+ 12359      F0E6FFFF 
+ 12360 b65f F30F7F85 		movdqu	%xmm0, -1104(%rbp)
+ 12360      B0FBFFFF 
+ 12361              	.LBE1448:
+ 12362              	.LBB1449:
+ 12363              	.LBB1450:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 12364              		.loc 2 667 0
+ 12365 b667 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 12365      00000000 
+ 12366 b66f F30F6F8D 		movdqu	-1104(%rbp), %xmm1
+ 12366      B0FBFFFF 
+ 12367 b677 F30F7F8D 		movdqu	%xmm1, -1072(%rbp)
+ 12367      D0FBFFFF 
+ 12368 b67f F30F7F85 		movdqu	%xmm0, -1088(%rbp)
+ 12368      C0FBFFFF 
+ 12369              	.LBB1451:
+ 12370              	.LBB1452:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 12371              		.loc 2 380 0
+ 12372 b687 F30F6F85 		movdqu	-1072(%rbp), %xmm0
+ 12372      D0FBFFFF 
+ 12373 b68f F30F7F85 		movdqu	%xmm0, -4592(%rbp)
+ 12373      10EEFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 12374              		.loc 2 381 0
+ 12375 b697 F30F6F85 		movdqu	-1088(%rbp), %xmm0
+ 12375      C0FBFFFF 
+ 12376 b69f F30F7F85 		movdqu	%xmm0, -4608(%rbp)
+ 12376      00EEFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 12377              		.loc 2 383 0
+ 12378 b6a7 C785ECFB 		movl	$0, -1044(%rbp)
+ 12378      FFFF0000 
+ 12378      0000
+ 12379 b6b1 EB5C     		jmp	.L288
+ 12380              	.L291:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 12381              		.loc 2 385 0
+ 12382 b6b3 8B85ECFB 		movl	-1044(%rbp), %eax
+ 12382      FFFF
+ 12383 b6b9 89C0     		mov	%eax, %eax
+ 12384 b6bb 0FB68405 		movzbl	-4608(%rbp,%rax), %eax
+ 12384      00EEFFFF 
+ 12385 b6c3 84C0     		testb	%al, %al
+ 12386 b6c5 7912     		jns	.L289
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 395
+
+
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 12387              		.loc 2 386 0
+ 12388 b6c7 8B85ECFB 		movl	-1044(%rbp), %eax
+ 12388      FFFF
+ 12389 b6cd 89C0     		mov	%eax, %eax
+ 12390 b6cf C6840520 		movb	$0, -4576(%rbp,%rax)
+ 12390      EEFFFF00 
+ 12391 b6d7 EB2F     		jmp	.L290
+ 12392              	.L289:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 12393              		.loc 2 388 0
+ 12394 b6d9 8B8DECFB 		movl	-1044(%rbp), %ecx
+ 12394      FFFF
+ 12395 b6df 8B85ECFB 		movl	-1044(%rbp), %eax
+ 12395      FFFF
+ 12396 b6e5 89C0     		mov	%eax, %eax
+ 12397 b6e7 0FB68405 		movzbl	-4608(%rbp,%rax), %eax
+ 12397      00EEFFFF 
+ 12398 b6ef 0FB6C0   		movzbl	%al, %eax
+ 12399 b6f2 83E00F   		andl	$15, %eax
+ 12400 b6f5 4898     		cltq
+ 12401 b6f7 0FB69405 		movzbl	-4592(%rbp,%rax), %edx
+ 12401      10EEFFFF 
+ 12402 b6ff 89C8     		mov	%ecx, %eax
+ 12403 b701 88940520 		movb	%dl, -4576(%rbp,%rax)
+ 12403      EEFFFF
+ 12404              	.L290:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 12405              		.loc 2 383 0
+ 12406 b708 8385ECFB 		addl	$1, -1044(%rbp)
+ 12406      FFFF01
+ 12407              	.L288:
+ 12408 b70f 83BDECFB 		cmpl	$15, -1044(%rbp)
+ 12408      FFFF0F
+ 12409 b716 769B     		jbe	.L291
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 12410              		.loc 2 391 0
+ 12411 b718 F30F6F85 		movdqu	-4576(%rbp), %xmm0
+ 12411      20EEFFFF 
+ 12412              	.LBE1452:
+ 12413              	.LBE1451:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 12414              		.loc 2 667 0
+ 12415 b720 F30F7F85 		movdqu	%xmm0, -1104(%rbp)
+ 12415      B0FBFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 12416              		.loc 2 668 0
+ 12417 b728 F30F6F85 		movdqu	-1104(%rbp), %xmm0
+ 12417      B0FBFFFF 
+ 12418              	.LBE1450:
+ 12419              	.LBE1449:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 12420              		.loc 2 1684 0
+ 12421 b730 660F7F85 		movdqa	%xmm0, -6416(%rbp)
+ 12421      F0E6FFFF 
+ 12422              	.LBB1453:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 396
+
+
+ 12423              		.loc 2 1685 0
+ 12424 b738 660F6F85 		movdqa	-6416(%rbp), %xmm0
+ 12424      F0E6FFFF 
+ 12425 b740 F30F7F85 		movdqu	%xmm0, -4752(%rbp)
+ 12425      70EDFFFF 
+ 12426 b748 E8000000 		call	KDbgWriterGet at PLT
+ 12426      00
+ 12427 b74d 4885C0   		testq	%rax, %rax
+ 12428 b750 7479     		je	.L293
+ 12429 b752 BF010000 		movl	$1, %edi
+ 12429      00
+ 12430 b757 E8000000 		call	KDbgCondToFlag at PLT
+ 12430      00
+ 12431 b75c 4889C6   		movq	%rax, %rsi
+ 12432 b75f BF100000 		movl	$16, %edi
+ 12432      00
+ 12433 b764 E8000000 		call	KDbgTestModConds at PLT
+ 12433      00
+ 12434 b769 84C0     		testb	%al, %al
+ 12435 b76b 745E     		je	.L293
+ 12436 b76d 8B857CED 		movl	-4740(%rbp), %eax
+ 12436      FFFF
+ 12437 b773 89C7     		movl	%eax, %edi
+ 12438 b775 E88648FF 		call	bswap_32
+ 12438      FF
+ 12439 b77a 4189C5   		movl	%eax, %r13d
+ 12440 b77d 8B8578ED 		movl	-4744(%rbp), %eax
+ 12440      FFFF
+ 12441 b783 89C7     		movl	%eax, %edi
+ 12442 b785 E87648FF 		call	bswap_32
+ 12442      FF
+ 12443 b78a 4189C4   		movl	%eax, %r12d
+ 12444 b78d 8B8574ED 		movl	-4748(%rbp), %eax
+ 12444      FFFF
+ 12445 b793 89C7     		movl	%eax, %edi
+ 12446 b795 E86648FF 		call	bswap_32
+ 12446      FF
+ 12447 b79a 89C3     		movl	%eax, %ebx
+ 12448 b79c 8B8570ED 		movl	-4752(%rbp), %eax
+ 12448      FFFF
+ 12449 b7a2 89C7     		movl	%eax, %edi
+ 12450 b7a4 E85748FF 		call	bswap_32
+ 12450      FF
+ 12451 b7a9 4589E9   		movl	%r13d, %r9d
+ 12452 b7ac 4589E0   		movl	%r12d, %r8d
+ 12453 b7af 89D9     		movl	%ebx, %ecx
+ 12454 b7b1 89C2     		movl	%eax, %edx
+ 12455 b7b3 488D3500 		leaq	.LC2(%rip), %rsi
+ 12455      000000
+ 12456 b7ba 488D3D00 		leaq	.LC1(%rip), %rdi
+ 12456      000000
+ 12457 b7c1 B8000000 		movl	$0, %eax
+ 12457      00
+ 12458 b7c6 E8000000 		call	KDbgMsg at PLT
+ 12458      00
+ 12459              	.L293:
+ 12460 b7cb 660F6F85 		movdqa	-6416(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 397
+
+
+ 12460      F0E6FFFF 
+ 12461 b7d3 F30F7F85 		movdqu	%xmm0, -1024(%rbp)
+ 12461      00FCFFFF 
+ 12462 b7db 660F6F85 		movdqa	-6400(%rbp), %xmm0
+ 12462      00E7FFFF 
+ 12463 b7e3 F30F7F85 		movdqu	%xmm0, -1040(%rbp)
+ 12463      F0FBFFFF 
+ 12464              	.LBE1453:
+ 12465              	.LBB1454:
+ 12466              	.LBB1455:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 12467              		.loc 2 178 0
+ 12468 b7eb F30F6F85 		movdqu	-1040(%rbp), %xmm0
+ 12468      F0FBFFFF 
+ 12469 b7f3 F30F6F8D 		movdqu	-1024(%rbp), %xmm1
+ 12469      00FCFFFF 
+ 12470 b7fb 660FEFC1 		pxor	%xmm1, %xmm0
+ 12471              	.LBE1455:
+ 12472              	.LBE1454:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 12473              		.loc 2 1686 0
+ 12474 b7ff 660F7F85 		movdqa	%xmm0, -6416(%rbp)
+ 12474      F0E6FFFF 
+ 12475              	.LBB1456:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 12476              		.loc 2 1687 0
+ 12477 b807 660F6F85 		movdqa	-6416(%rbp), %xmm0
+ 12477      F0E6FFFF 
+ 12478 b80f F30F7F85 		movdqu	%xmm0, -4768(%rbp)
+ 12478      60EDFFFF 
+ 12479 b817 E8000000 		call	KDbgWriterGet at PLT
+ 12479      00
+ 12480 b81c 4885C0   		testq	%rax, %rax
+ 12481 b81f 7479     		je	.L295
+ 12482 b821 BF010000 		movl	$1, %edi
+ 12482      00
+ 12483 b826 E8000000 		call	KDbgCondToFlag at PLT
+ 12483      00
+ 12484 b82b 4889C6   		movq	%rax, %rsi
+ 12485 b82e BF100000 		movl	$16, %edi
+ 12485      00
+ 12486 b833 E8000000 		call	KDbgTestModConds at PLT
+ 12486      00
+ 12487 b838 84C0     		testb	%al, %al
+ 12488 b83a 745E     		je	.L295
+ 12489 b83c 8B856CED 		movl	-4756(%rbp), %eax
+ 12489      FFFF
+ 12490 b842 89C7     		movl	%eax, %edi
+ 12491 b844 E8B747FF 		call	bswap_32
+ 12491      FF
+ 12492 b849 4189C5   		movl	%eax, %r13d
+ 12493 b84c 8B8568ED 		movl	-4760(%rbp), %eax
+ 12493      FFFF
+ 12494 b852 89C7     		movl	%eax, %edi
+ 12495 b854 E8A747FF 		call	bswap_32
+ 12495      FF
+ 12496 b859 4189C4   		movl	%eax, %r12d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 398
+
+
+ 12497 b85c 8B8564ED 		movl	-4764(%rbp), %eax
+ 12497      FFFF
+ 12498 b862 89C7     		movl	%eax, %edi
+ 12499 b864 E89747FF 		call	bswap_32
+ 12499      FF
+ 12500 b869 89C3     		movl	%eax, %ebx
+ 12501 b86b 8B8560ED 		movl	-4768(%rbp), %eax
+ 12501      FFFF
+ 12502 b871 89C7     		movl	%eax, %edi
+ 12503 b873 E88847FF 		call	bswap_32
+ 12503      FF
+ 12504 b878 4589E9   		movl	%r13d, %r9d
+ 12505 b87b 4589E0   		movl	%r12d, %r8d
+ 12506 b87e 89D9     		movl	%ebx, %ecx
+ 12507 b880 89C2     		movl	%eax, %edx
+ 12508 b882 488D3500 		leaq	.LC3(%rip), %rsi
+ 12508      000000
+ 12509 b889 488D3D00 		leaq	.LC1(%rip), %rdi
+ 12509      000000
+ 12510 b890 B8000000 		movl	$0, %eax
+ 12510      00
+ 12511 b895 E8000000 		call	KDbgMsg at PLT
+ 12511      00
+ 12512              	.L295:
+ 12513 b89a 660F6F85 		movdqa	-6416(%rbp), %xmm0
+ 12513      F0E6FFFF 
+ 12514 b8a2 F30F7F85 		movdqu	%xmm0, -1008(%rbp)
+ 12514      10FCFFFF 
+ 12515              	.LBE1456:
+ 12516              	.LBB1457:
+ 12517              	.LBB1458:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 12518              		.loc 2 1357 0
+ 12519 b8aa F30F6F85 		movdqu	-1008(%rbp), %xmm0
+ 12519      10FCFFFF 
+ 12520 b8b2 F30F7F85 		movdqu	%xmm0, -4560(%rbp)
+ 12520      30EEFFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 12521              		.loc 2 1358 0
+ 12522 b8ba 8B853CEE 		movl	-4548(%rbp), %eax
+ 12522      FFFF
+ 12523 b8c0 898538EE 		movl	%eax, -4552(%rbp)
+ 12523      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 12524              		.loc 2 1359 0
+ 12525 b8c6 8B853CEE 		movl	-4548(%rbp), %eax
+ 12525      FFFF
+ 12526 b8cc 898534EE 		movl	%eax, -4556(%rbp)
+ 12526      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 12527              		.loc 2 1360 0
+ 12528 b8d2 8B853CEE 		movl	-4548(%rbp), %eax
+ 12528      FFFF
+ 12529 b8d8 898530EE 		movl	%eax, -4560(%rbp)
+ 12529      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 12530              		.loc 2 1361 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 399
+
+
+ 12531 b8de F30F6F85 		movdqu	-4560(%rbp), %xmm0
+ 12531      30EEFFFF 
+ 12532              	.LBE1458:
+ 12533              	.LBE1457:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 12534              		.loc 2 1688 0
+ 12535 b8e6 660F7F85 		movdqa	%xmm0, -6416(%rbp)
+ 12535      F0E6FFFF 
+ 12536              	.LBB1459:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 12537              		.loc 2 1689 0
+ 12538 b8ee 660F6F85 		movdqa	-6416(%rbp), %xmm0
+ 12538      F0E6FFFF 
+ 12539 b8f6 F30F7F85 		movdqu	%xmm0, -4784(%rbp)
+ 12539      50EDFFFF 
+ 12540 b8fe E8000000 		call	KDbgWriterGet at PLT
+ 12540      00
+ 12541 b903 4885C0   		testq	%rax, %rax
+ 12542 b906 7479     		je	.L297
+ 12543 b908 BF010000 		movl	$1, %edi
+ 12543      00
+ 12544 b90d E8000000 		call	KDbgCondToFlag at PLT
+ 12544      00
+ 12545 b912 4889C6   		movq	%rax, %rsi
+ 12546 b915 BF100000 		movl	$16, %edi
+ 12546      00
+ 12547 b91a E8000000 		call	KDbgTestModConds at PLT
+ 12547      00
+ 12548 b91f 84C0     		testb	%al, %al
+ 12549 b921 745E     		je	.L297
+ 12550 b923 8B855CED 		movl	-4772(%rbp), %eax
+ 12550      FFFF
+ 12551 b929 89C7     		movl	%eax, %edi
+ 12552 b92b E8D046FF 		call	bswap_32
+ 12552      FF
+ 12553 b930 4189C5   		movl	%eax, %r13d
+ 12554 b933 8B8558ED 		movl	-4776(%rbp), %eax
+ 12554      FFFF
+ 12555 b939 89C7     		movl	%eax, %edi
+ 12556 b93b E8C046FF 		call	bswap_32
+ 12556      FF
+ 12557 b940 4189C4   		movl	%eax, %r12d
+ 12558 b943 8B8554ED 		movl	-4780(%rbp), %eax
+ 12558      FFFF
+ 12559 b949 89C7     		movl	%eax, %edi
+ 12560 b94b E8B046FF 		call	bswap_32
+ 12560      FF
+ 12561 b950 89C3     		movl	%eax, %ebx
+ 12562 b952 8B8550ED 		movl	-4784(%rbp), %eax
+ 12562      FFFF
+ 12563 b958 89C7     		movl	%eax, %edi
+ 12564 b95a E8A146FF 		call	bswap_32
+ 12564      FF
+ 12565 b95f 4589E9   		movl	%r13d, %r9d
+ 12566 b962 4589E0   		movl	%r12d, %r8d
+ 12567 b965 89D9     		movl	%ebx, %ecx
+ 12568 b967 89C2     		movl	%eax, %edx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 400
+
+
+ 12569 b969 488D3500 		leaq	.LC4(%rip), %rsi
+ 12569      000000
+ 12570 b970 488D3D00 		leaq	.LC1(%rip), %rdi
+ 12570      000000
+ 12571 b977 B8000000 		movl	$0, %eax
+ 12571      00
+ 12572 b97c E8000000 		call	KDbgMsg at PLT
+ 12572      00
+ 12573              	.L297:
+ 12574              	.LBE1459:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 12575              		.loc 2 1690 0
+ 12576 b981 660F6F85 		movdqa	-6416(%rbp), %xmm0
+ 12576      F0E6FFFF 
+ 12577              	.LBE1425:
+ 12578              	.LBE1424:
+1858:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 12579              		.loc 2 1858 0
+ 12580 b989 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 12580      C0E5FFFF 
+1860:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0 ^= k;                                       /* k36   : k37   : k38    : k39          */
+ 12581              		.loc 2 1860 0
+ 12582 b991 660F6F85 		movdqa	-6800(%rbp), %xmm0
+ 12582      70E5FFFF 
+ 12583 b999 660FEF85 		pxor	-6720(%rbp), %xmm0
+ 12583      C0E5FFFF 
+ 12584 b9a1 660F7F85 		movdqa	%xmm0, -6800(%rbp)
+ 12584      70E5FFFF 
+ 12585 b9a9 660F6F85 		movdqa	-6800(%rbp), %xmm0
+ 12585      70E5FFFF 
+ 12586 b9b1 F30F7F85 		movdqu	%xmm0, -992(%rbp)
+ 12586      20FCFFFF 
+ 12587              	.LBB1460:
+ 12588              	.LBB1461:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 12589              		.loc 2 1357 0
+ 12590 b9b9 F30F6F85 		movdqu	-992(%rbp), %xmm0
+ 12590      20FCFFFF 
+ 12591 b9c1 F30F7F85 		movdqu	%xmm0, -4544(%rbp)
+ 12591      40EEFFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 12592              		.loc 2 1358 0
+ 12593 b9c9 8B854CEE 		movl	-4532(%rbp), %eax
+ 12593      FFFF
+ 12594 b9cf 898548EE 		movl	%eax, -4536(%rbp)
+ 12594      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 12595              		.loc 2 1359 0
+ 12596 b9d5 8B854CEE 		movl	-4532(%rbp), %eax
+ 12596      FFFF
+ 12597 b9db 898544EE 		movl	%eax, -4540(%rbp)
+ 12597      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 12598              		.loc 2 1360 0
+ 12599 b9e1 8B854CEE 		movl	-4532(%rbp), %eax
+ 12599      FFFF
+ 12600 b9e7 898540EE 		movl	%eax, -4544(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 401
+
+
+ 12600      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 12601              		.loc 2 1361 0
+ 12602 b9ed F30F6F85 		movdqu	-4544(%rbp), %xmm0
+ 12602      40EEFFFF 
+ 12603              	.LBE1461:
+ 12604              	.LBE1460:
+1861:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (v0);       /* k39   : k39   : k39    : k39          */
+ 12605              		.loc 2 1861 0
+ 12606 b9f5 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 12606      C0E5FFFF 
+1862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1 ^= k;                                       /* k40   : k41   : x      : x            */
+ 12607              		.loc 2 1862 0
+ 12608 b9fd 660F6F85 		movdqa	-6784(%rbp), %xmm0
+ 12608      80E5FFFF 
+ 12609 ba05 660FEF85 		pxor	-6720(%rbp), %xmm0
+ 12609      C0E5FFFF 
+ 12610 ba0d 660F7F85 		movdqa	%xmm0, -6784(%rbp)
+ 12610      80E5FFFF 
+1864:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[9] = v0; /* K36:K37:K38:K39 */
+ 12611              		.loc 2 1864 0
+ 12612 ba15 488B8588 		movq	-6264(%rbp), %rax
+ 12612      E7FFFF
+ 12613 ba1c 48059000 		addq	$144, %rax
+ 12613      0000
+ 12614 ba22 660F6F85 		movdqa	-6800(%rbp), %xmm0
+ 12614      70E5FFFF 
+ 12615 ba2a 660F7F00 		movdqa	%xmm0, (%rax)
+1869:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 12616              		.loc 2 1869 0
+ 12617 ba2e 660F6F85 		movdqa	-6784(%rbp), %xmm0
+ 12617      80E5FFFF 
+ 12618 ba36 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 12618      C0E5FFFF 
+ 12619 ba3e 660F6F85 		movdqa	-6720(%rbp), %xmm0
+ 12619      C0E5FFFF 
+ 12620 ba46 F30F7F85 		movdqu	%xmm0, -960(%rbp)
+ 12620      40FCFFFF 
+ 12621              	.LBB1462:
+ 12622              	.LBB1463:
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rconw = (AESWord)(AESByte)rcon;
+ 12623              		.loc 2 1629 0
+ 12624 ba4e B8400000 		movl	$64, %eax
+ 12624      00
+ 12625 ba53 0FB6C0   		movzbl	%al, %eax
+ 12626 ba56 898560FC 		movl	%eax, -928(%rbp)
+ 12626      FFFF
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 12627              		.loc 2 1630 0
+ 12628 ba5c F30F6F85 		movdqu	-960(%rbp), %xmm0
+ 12628      40FCFFFF 
+ 12629 ba64 F30F7F85 		movdqu	%xmm0, -4512(%rbp)
+ 12629      60EEFFFF 
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[1]);
+ 12630              		.loc 2 1631 0
+ 12631 ba6c 8B8564EE 		movl	-4508(%rbp), %eax
+ 12631      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 402
+
+
+ 12632 ba72 898564FC 		movl	%eax, -924(%rbp)
+ 12632      FFFF
+ 12633              	.LBB1464:
+ 12634              	.LBB1465:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 12635              		.loc 2 740 0
+ 12636 ba78 8B8564FC 		movl	-924(%rbp), %eax
+ 12636      FFFF
+ 12637 ba7e 898550EE 		movl	%eax, -4528(%rbp)
+ 12637      FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 12638              		.loc 2 741 0
+ 12639 ba84 C78568FC 		movl	$0, -920(%rbp)
+ 12639      FFFF0000 
+ 12639      0000
+ 12640 ba8e EB36     		jmp	.L298
+ 12641              	.L299:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 12642              		.loc 2 742 0
+ 12643 ba90 8B8D68FC 		movl	-920(%rbp), %ecx
+ 12643      FFFF
+ 12644 ba96 8B8568FC 		movl	-920(%rbp), %eax
+ 12644      FFFF
+ 12645 ba9c 89C0     		mov	%eax, %eax
+ 12646 ba9e 0FB68405 		movzbl	-4528(%rbp,%rax), %eax
+ 12646      50EEFFFF 
+ 12647 baa6 0FB6C0   		movzbl	%al, %eax
+ 12648 baa9 89C2     		mov	%eax, %edx
+ 12649 baab 488D0500 		leaq	KAESBlockCipherVecRijndaelSBox(%rip), %rax
+ 12649      000000
+ 12650 bab2 0FB61402 		movzbl	(%rdx,%rax), %edx
+ 12651 bab6 89C8     		mov	%ecx, %eax
+ 12652 bab8 88940550 		movb	%dl, -4528(%rbp,%rax)
+ 12652      EEFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 12653              		.loc 2 741 0
+ 12654 babf 838568FC 		addl	$1, -920(%rbp)
+ 12654      FFFF01
+ 12655              	.L298:
+ 12656 bac6 83BD68FC 		cmpl	$3, -920(%rbp)
+ 12656      FFFF03
+ 12657 bacd 76C1     		jbe	.L299
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 12658              		.loc 2 743 0
+ 12659 bacf 8B8550EE 		movl	-4528(%rbp), %eax
+ 12659      FFFF
+ 12660              	.LBE1465:
+ 12661              	.LBE1464:
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[1]);
+ 12662              		.loc 2 1631 0
+ 12663 bad5 89855CFC 		movl	%eax, -932(%rbp)
+ 12663      FFFF
+ 12664 badb 8B855CFC 		movl	-932(%rbp), %eax
+ 12664      FFFF
+ 12665 bae1 89856CFC 		movl	%eax, -916(%rbp)
+ 12665      FFFF
+ 12666              	.LBB1466:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 403
+
+
+ 12667              	.LBB1467:
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (w >> 8) | (w << 24);
+ 12668              		.loc 2 1196 0
+ 12669 bae7 8B856CFC 		movl	-916(%rbp), %eax
+ 12669      FFFF
+ 12670 baed C1C808   		rorl	$8, %eax
+ 12671              	.LBE1467:
+ 12672              	.LBE1466:
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(RotWord)(temp);
+ 12673              		.loc 2 1632 0
+ 12674 baf0 89855CFC 		movl	%eax, -932(%rbp)
+ 12674      FFFF
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp ^= rconw;
+ 12675              		.loc 2 1633 0
+ 12676 baf6 8B8560FC 		movl	-928(%rbp), %eax
+ 12676      FFFF
+ 12677 bafc 31855CFC 		xorl	%eax, -932(%rbp)
+ 12677      FFFF
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 12678              		.loc 2 1635 0
+ 12679 bb02 8B855CFC 		movl	-932(%rbp), %eax
+ 12679      FFFF
+ 12680 bb08 89856CEE 		movl	%eax, -4500(%rbp)
+ 12680      FFFF
+ 12681 bb0e 8B856CEE 		movl	-4500(%rbp), %eax
+ 12681      FFFF
+ 12682 bb14 898568EE 		movl	%eax, -4504(%rbp)
+ 12682      FFFF
+ 12683 bb1a 8B8568EE 		movl	-4504(%rbp), %eax
+ 12683      FFFF
+ 12684 bb20 898564EE 		movl	%eax, -4508(%rbp)
+ 12684      FFFF
+ 12685 bb26 8B8564EE 		movl	-4508(%rbp), %eax
+ 12685      FFFF
+ 12686 bb2c 898560EE 		movl	%eax, -4512(%rbp)
+ 12686      FFFF
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 12687              		.loc 2 1636 0
+ 12688 bb32 F30F6F85 		movdqu	-4512(%rbp), %xmm0
+ 12688      60EEFFFF 
+ 12689              	.LBE1463:
+ 12690              	.LBE1462:
+1869:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 12691              		.loc 2 1869 0
+ 12692 bb3a 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 12692      C0E5FFFF 
+ 12693 bb42 660F6F85 		movdqa	-6800(%rbp), %xmm0
+ 12693      70E5FFFF 
+ 12694 bb4a F30F7F85 		movdqu	%xmm0, -912(%rbp)
+ 12694      70FCFFFF 
+ 12695              	.LBB1468:
+ 12696              	.LBB1469:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 12697              		.loc 2 1565 0
+ 12698 bb52 F30F6F85 		movdqu	-912(%rbp), %xmm0
+ 12698      70FCFFFF 
+ 12699 bb5a 660F7F85 		movdqa	%xmm0, -6368(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 404
+
+
+ 12699      20E7FFFF 
+ 12700 bb62 660F6F85 		movdqa	-6368(%rbp), %xmm0
+ 12700      20E7FFFF 
+ 12701 bb6a F30F7F85 		movdqu	%xmm0, -896(%rbp)
+ 12701      80FCFFFF 
+ 12702              	.LBB1470:
+ 12703              	.LBB1471:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 12704              		.loc 2 1282 0
+ 12705 bb72 F30F6F85 		movdqu	-896(%rbp), %xmm0
+ 12705      80FCFFFF 
+ 12706 bb7a F30F7F85 		movdqu	%xmm0, -4496(%rbp)
+ 12706      70EEFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 12707              		.loc 2 1283 0
+ 12708 bb82 8B8578EE 		movl	-4488(%rbp), %eax
+ 12708      FFFF
+ 12709 bb88 89857CEE 		movl	%eax, -4484(%rbp)
+ 12709      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 12710              		.loc 2 1284 0
+ 12711 bb8e 8B8574EE 		movl	-4492(%rbp), %eax
+ 12711      FFFF
+ 12712 bb94 898578EE 		movl	%eax, -4488(%rbp)
+ 12712      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 12713              		.loc 2 1285 0
+ 12714 bb9a 8B8570EE 		movl	-4496(%rbp), %eax
+ 12714      FFFF
+ 12715 bba0 898574EE 		movl	%eax, -4492(%rbp)
+ 12715      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 12716              		.loc 2 1286 0
+ 12717 bba6 C78570EE 		movl	$0, -4496(%rbp)
+ 12717      FFFF0000 
+ 12717      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 12718              		.loc 2 1287 0
+ 12719 bbb0 F30F6F85 		movdqu	-4496(%rbp), %xmm0
+ 12719      70EEFFFF 
+ 12720              	.LBE1471:
+ 12721              	.LBE1470:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12722              		.loc 2 1567 0
+ 12723 bbb8 660F7F85 		movdqa	%xmm0, -6368(%rbp)
+ 12723      20E7FFFF 
+ 12724 bbc0 660F6F85 		movdqa	-6368(%rbp), %xmm0
+ 12724      20E7FFFF 
+ 12725 bbc8 660FEF85 		pxor	-912(%rbp), %xmm0
+ 12725      70FCFFFF 
+ 12726 bbd0 F30F7F85 		movdqu	%xmm0, -912(%rbp)
+ 12726      70FCFFFF 
+ 12727 bbd8 660F6F85 		movdqa	-6368(%rbp), %xmm0
+ 12727      20E7FFFF 
+ 12728 bbe0 F30F7F85 		movdqu	%xmm0, -880(%rbp)
+ 12728      90FCFFFF 
+ 12729              	.LBB1472:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 405
+
+
+ 12730              	.LBB1473:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 12731              		.loc 2 1282 0
+ 12732 bbe8 F30F6F85 		movdqu	-880(%rbp), %xmm0
+ 12732      90FCFFFF 
+ 12733 bbf0 F30F7F85 		movdqu	%xmm0, -4480(%rbp)
+ 12733      80EEFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 12734              		.loc 2 1283 0
+ 12735 bbf8 8B8588EE 		movl	-4472(%rbp), %eax
+ 12735      FFFF
+ 12736 bbfe 89858CEE 		movl	%eax, -4468(%rbp)
+ 12736      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 12737              		.loc 2 1284 0
+ 12738 bc04 8B8584EE 		movl	-4476(%rbp), %eax
+ 12738      FFFF
+ 12739 bc0a 898588EE 		movl	%eax, -4472(%rbp)
+ 12739      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 12740              		.loc 2 1285 0
+ 12741 bc10 8B8580EE 		movl	-4480(%rbp), %eax
+ 12741      FFFF
+ 12742 bc16 898584EE 		movl	%eax, -4476(%rbp)
+ 12742      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 12743              		.loc 2 1286 0
+ 12744 bc1c C78580EE 		movl	$0, -4480(%rbp)
+ 12744      FFFF0000 
+ 12744      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 12745              		.loc 2 1287 0
+ 12746 bc26 F30F6F85 		movdqu	-4480(%rbp), %xmm0
+ 12746      80EEFFFF 
+ 12747              	.LBE1473:
+ 12748              	.LBE1472:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12749              		.loc 2 1568 0
+ 12750 bc2e 660F7F85 		movdqa	%xmm0, -6368(%rbp)
+ 12750      20E7FFFF 
+ 12751 bc36 660F6F85 		movdqa	-6368(%rbp), %xmm0
+ 12751      20E7FFFF 
+ 12752 bc3e 660FEF85 		pxor	-912(%rbp), %xmm0
+ 12752      70FCFFFF 
+ 12753 bc46 F30F7F85 		movdqu	%xmm0, -912(%rbp)
+ 12753      70FCFFFF 
+ 12754 bc4e 660F6F85 		movdqa	-6368(%rbp), %xmm0
+ 12754      20E7FFFF 
+ 12755 bc56 F30F7F85 		movdqu	%xmm0, -864(%rbp)
+ 12755      A0FCFFFF 
+ 12756              	.LBB1474:
+ 12757              	.LBB1475:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 12758              		.loc 2 1282 0
+ 12759 bc5e F30F6F85 		movdqu	-864(%rbp), %xmm0
+ 12759      A0FCFFFF 
+ 12760 bc66 F30F7F85 		movdqu	%xmm0, -4464(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 406
+
+
+ 12760      90EEFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 12761              		.loc 2 1283 0
+ 12762 bc6e 8B8598EE 		movl	-4456(%rbp), %eax
+ 12762      FFFF
+ 12763 bc74 89859CEE 		movl	%eax, -4452(%rbp)
+ 12763      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 12764              		.loc 2 1284 0
+ 12765 bc7a 8B8594EE 		movl	-4460(%rbp), %eax
+ 12765      FFFF
+ 12766 bc80 898598EE 		movl	%eax, -4456(%rbp)
+ 12766      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 12767              		.loc 2 1285 0
+ 12768 bc86 8B8590EE 		movl	-4464(%rbp), %eax
+ 12768      FFFF
+ 12769 bc8c 898594EE 		movl	%eax, -4460(%rbp)
+ 12769      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 12770              		.loc 2 1286 0
+ 12771 bc92 C78590EE 		movl	$0, -4464(%rbp)
+ 12771      FFFF0000 
+ 12771      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 12772              		.loc 2 1287 0
+ 12773 bc9c F30F6F85 		movdqu	-4464(%rbp), %xmm0
+ 12773      90EEFFFF 
+ 12774              	.LBE1475:
+ 12775              	.LBE1474:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12776              		.loc 2 1569 0
+ 12777 bca4 660F7F85 		movdqa	%xmm0, -6368(%rbp)
+ 12777      20E7FFFF 
+ 12778 bcac 660F6F85 		movdqa	-6368(%rbp), %xmm0
+ 12778      20E7FFFF 
+ 12779 bcb4 660FEF85 		pxor	-912(%rbp), %xmm0
+ 12779      70FCFFFF 
+ 12780 bcbc F30F7F85 		movdqu	%xmm0, -912(%rbp)
+ 12780      70FCFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 12781              		.loc 2 1571 0
+ 12782 bcc4 F30F6F85 		movdqu	-912(%rbp), %xmm0
+ 12782      70FCFFFF 
+ 12783              	.LBE1469:
+ 12784              	.LBE1468:
+1871:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3  = AESBCMEMBER(ShiftXorColumns) (v0);       /* k36   :k36^k37:k36^k37^k38:k36^k37^k38^k39 */
+ 12785              		.loc 2 1871 0
+ 12786 bccc 660F7F85 		movdqa	%xmm0, -6752(%rbp)
+ 12786      A0E5FFFF 
+ 12787 bcd4 660F6F85 		movdqa	-6784(%rbp), %xmm0
+ 12787      80E5FFFF 
+ 12788 bcdc F30F7F85 		movdqu	%xmm0, -848(%rbp)
+ 12788      B0FCFFFF 
+ 12789              	.LBB1476:
+ 12790              	.LBB1477:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 407
+
+
+ 12791              		.loc 2 1565 0
+ 12792 bce4 F30F6F85 		movdqu	-848(%rbp), %xmm0
+ 12792      B0FCFFFF 
+ 12793 bcec 660F7F85 		movdqa	%xmm0, -6352(%rbp)
+ 12793      30E7FFFF 
+ 12794 bcf4 660F6F85 		movdqa	-6352(%rbp), %xmm0
+ 12794      30E7FFFF 
+ 12795 bcfc F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 12795      C0FCFFFF 
+ 12796              	.LBB1478:
+ 12797              	.LBB1479:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 12798              		.loc 2 1282 0
+ 12799 bd04 F30F6F85 		movdqu	-832(%rbp), %xmm0
+ 12799      C0FCFFFF 
+ 12800 bd0c F30F7F85 		movdqu	%xmm0, -4448(%rbp)
+ 12800      A0EEFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 12801              		.loc 2 1283 0
+ 12802 bd14 8B85A8EE 		movl	-4440(%rbp), %eax
+ 12802      FFFF
+ 12803 bd1a 8985ACEE 		movl	%eax, -4436(%rbp)
+ 12803      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 12804              		.loc 2 1284 0
+ 12805 bd20 8B85A4EE 		movl	-4444(%rbp), %eax
+ 12805      FFFF
+ 12806 bd26 8985A8EE 		movl	%eax, -4440(%rbp)
+ 12806      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 12807              		.loc 2 1285 0
+ 12808 bd2c 8B85A0EE 		movl	-4448(%rbp), %eax
+ 12808      FFFF
+ 12809 bd32 8985A4EE 		movl	%eax, -4444(%rbp)
+ 12809      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 12810              		.loc 2 1286 0
+ 12811 bd38 C785A0EE 		movl	$0, -4448(%rbp)
+ 12811      FFFF0000 
+ 12811      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 12812              		.loc 2 1287 0
+ 12813 bd42 F30F6F85 		movdqu	-4448(%rbp), %xmm0
+ 12813      A0EEFFFF 
+ 12814              	.LBE1479:
+ 12815              	.LBE1478:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12816              		.loc 2 1567 0
+ 12817 bd4a 660F7F85 		movdqa	%xmm0, -6352(%rbp)
+ 12817      30E7FFFF 
+ 12818 bd52 660F6F85 		movdqa	-6352(%rbp), %xmm0
+ 12818      30E7FFFF 
+ 12819 bd5a 660FEF85 		pxor	-848(%rbp), %xmm0
+ 12819      B0FCFFFF 
+ 12820 bd62 F30F7F85 		movdqu	%xmm0, -848(%rbp)
+ 12820      B0FCFFFF 
+ 12821 bd6a 660F6F85 		movdqa	-6352(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 408
+
+
+ 12821      30E7FFFF 
+ 12822 bd72 F30F7F85 		movdqu	%xmm0, -816(%rbp)
+ 12822      D0FCFFFF 
+ 12823              	.LBB1480:
+ 12824              	.LBB1481:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 12825              		.loc 2 1282 0
+ 12826 bd7a F30F6F85 		movdqu	-816(%rbp), %xmm0
+ 12826      D0FCFFFF 
+ 12827 bd82 F30F7F85 		movdqu	%xmm0, -4432(%rbp)
+ 12827      B0EEFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 12828              		.loc 2 1283 0
+ 12829 bd8a 8B85B8EE 		movl	-4424(%rbp), %eax
+ 12829      FFFF
+ 12830 bd90 8985BCEE 		movl	%eax, -4420(%rbp)
+ 12830      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 12831              		.loc 2 1284 0
+ 12832 bd96 8B85B4EE 		movl	-4428(%rbp), %eax
+ 12832      FFFF
+ 12833 bd9c 8985B8EE 		movl	%eax, -4424(%rbp)
+ 12833      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 12834              		.loc 2 1285 0
+ 12835 bda2 8B85B0EE 		movl	-4432(%rbp), %eax
+ 12835      FFFF
+ 12836 bda8 8985B4EE 		movl	%eax, -4428(%rbp)
+ 12836      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 12837              		.loc 2 1286 0
+ 12838 bdae C785B0EE 		movl	$0, -4432(%rbp)
+ 12838      FFFF0000 
+ 12838      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 12839              		.loc 2 1287 0
+ 12840 bdb8 F30F6F85 		movdqu	-4432(%rbp), %xmm0
+ 12840      B0EEFFFF 
+ 12841              	.LBE1481:
+ 12842              	.LBE1480:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12843              		.loc 2 1568 0
+ 12844 bdc0 660F7F85 		movdqa	%xmm0, -6352(%rbp)
+ 12844      30E7FFFF 
+ 12845 bdc8 660F6F85 		movdqa	-6352(%rbp), %xmm0
+ 12845      30E7FFFF 
+ 12846 bdd0 660FEF85 		pxor	-848(%rbp), %xmm0
+ 12846      B0FCFFFF 
+ 12847 bdd8 F30F7F85 		movdqu	%xmm0, -848(%rbp)
+ 12847      B0FCFFFF 
+ 12848 bde0 660F6F85 		movdqa	-6352(%rbp), %xmm0
+ 12848      30E7FFFF 
+ 12849 bde8 F30F7F85 		movdqu	%xmm0, -800(%rbp)
+ 12849      E0FCFFFF 
+ 12850              	.LBB1482:
+ 12851              	.LBB1483:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 409
+
+
+ 12852              		.loc 2 1282 0
+ 12853 bdf0 F30F6F85 		movdqu	-800(%rbp), %xmm0
+ 12853      E0FCFFFF 
+ 12854 bdf8 F30F7F85 		movdqu	%xmm0, -4416(%rbp)
+ 12854      C0EEFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 12855              		.loc 2 1283 0
+ 12856 be00 8B85C8EE 		movl	-4408(%rbp), %eax
+ 12856      FFFF
+ 12857 be06 8985CCEE 		movl	%eax, -4404(%rbp)
+ 12857      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 12858              		.loc 2 1284 0
+ 12859 be0c 8B85C4EE 		movl	-4412(%rbp), %eax
+ 12859      FFFF
+ 12860 be12 8985C8EE 		movl	%eax, -4408(%rbp)
+ 12860      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 12861              		.loc 2 1285 0
+ 12862 be18 8B85C0EE 		movl	-4416(%rbp), %eax
+ 12862      FFFF
+ 12863 be1e 8985C4EE 		movl	%eax, -4412(%rbp)
+ 12863      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 12864              		.loc 2 1286 0
+ 12865 be24 C785C0EE 		movl	$0, -4416(%rbp)
+ 12865      FFFF0000 
+ 12865      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 12866              		.loc 2 1287 0
+ 12867 be2e F30F6F85 		movdqu	-4416(%rbp), %xmm0
+ 12867      C0EEFFFF 
+ 12868              	.LBE1483:
+ 12869              	.LBE1482:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12870              		.loc 2 1569 0
+ 12871 be36 660F7F85 		movdqa	%xmm0, -6352(%rbp)
+ 12871      30E7FFFF 
+ 12872 be3e 660F6F85 		movdqa	-6352(%rbp), %xmm0
+ 12872      30E7FFFF 
+ 12873 be46 660FEF85 		pxor	-848(%rbp), %xmm0
+ 12873      B0FCFFFF 
+ 12874 be4e F30F7F85 		movdqu	%xmm0, -848(%rbp)
+ 12874      B0FCFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 12875              		.loc 2 1571 0
+ 12876 be56 F30F6F85 		movdqu	-848(%rbp), %xmm0
+ 12876      B0FCFFFF 
+ 12877              	.LBE1477:
+ 12878              	.LBE1476:
+1872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4  = AESBCMEMBER(ShiftXorColumns) (v1);       /* k40   :k40^k41: x   5  : x            */
+ 12879              		.loc 2 1872 0
+ 12880 be5e 660F7F85 		movdqa	%xmm0, -6736(%rbp)
+ 12880      B0E5FFFF 
+1873:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3 ^= k;                                       /* k42   : k43   : k44    : k45          */
+ 12881              		.loc 2 1873 0
+ 12882 be66 660F6F85 		movdqa	-6752(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 410
+
+
+ 12882      A0E5FFFF 
+ 12883 be6e 660FEF85 		pxor	-6720(%rbp), %xmm0
+ 12883      C0E5FFFF 
+ 12884 be76 660F7F85 		movdqa	%xmm0, -6752(%rbp)
+ 12884      A0E5FFFF 
+1874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k45   : k45   : k45    : k45          */
+ 12885              		.loc 2 1874 0
+ 12886 be7e 660F6F85 		movdqa	-6752(%rbp), %xmm0
+ 12886      A0E5FFFF 
+ 12887 be86 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 12887      C0E5FFFF 
+ 12888 be8e 660F6F85 		movdqa	-6720(%rbp), %xmm0
+ 12888      C0E5FFFF 
+ 12889 be96 F30F7F85 		movdqu	%xmm0, -784(%rbp)
+ 12889      F0FCFFFF 
+ 12890              	.LBB1484:
+ 12891              	.LBB1485:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 12892              		.loc 2 1357 0
+ 12893 be9e F30F6F85 		movdqu	-784(%rbp), %xmm0
+ 12893      F0FCFFFF 
+ 12894 bea6 F30F7F85 		movdqu	%xmm0, -4400(%rbp)
+ 12894      D0EEFFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 12895              		.loc 2 1358 0
+ 12896 beae 8B85DCEE 		movl	-4388(%rbp), %eax
+ 12896      FFFF
+ 12897 beb4 8985D8EE 		movl	%eax, -4392(%rbp)
+ 12897      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 12898              		.loc 2 1359 0
+ 12899 beba 8B85DCEE 		movl	-4388(%rbp), %eax
+ 12899      FFFF
+ 12900 bec0 8985D4EE 		movl	%eax, -4396(%rbp)
+ 12900      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 12901              		.loc 2 1360 0
+ 12902 bec6 8B85DCEE 		movl	-4388(%rbp), %eax
+ 12902      FFFF
+ 12903 becc 8985D0EE 		movl	%eax, -4400(%rbp)
+ 12903      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 12904              		.loc 2 1361 0
+ 12905 bed2 F30F6F85 		movdqu	-4400(%rbp), %xmm0
+ 12905      D0EEFFFF 
+ 12906              	.LBE1485:
+ 12907              	.LBE1484:
+1874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k45   : k45   : k45    : k45          */
+ 12908              		.loc 2 1874 0
+ 12909 beda 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 12909      C0E5FFFF 
+1875:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4 ^= k;                                       /* k46   : k47   : x      : x            */
+ 12910              		.loc 2 1875 0
+ 12911 bee2 660F6F85 		movdqa	-6736(%rbp), %xmm0
+ 12911      B0E5FFFF 
+ 12912 beea 660FEF85 		pxor	-6720(%rbp), %xmm0
+ 12912      C0E5FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 411
+
+
+ 12913 bef2 660F7F85 		movdqa	%xmm0, -6736(%rbp)
+ 12913      B0E5FFFF 
+ 12914 befa 660F6F85 		movdqa	-6784(%rbp), %xmm0
+ 12914      80E5FFFF 
+ 12915 bf02 F30F7F85 		movdqu	%xmm0, -752(%rbp)
+ 12915      10FDFFFF 
+ 12916 bf0a 660F6F85 		movdqa	-6752(%rbp), %xmm0
+ 12916      A0E5FFFF 
+ 12917 bf12 F30F7F85 		movdqu	%xmm0, -768(%rbp)
+ 12917      00FDFFFF 
+ 12918              	.LBB1486:
+ 12919              	.LBB1487:
+1471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.state = w;
+ 12920              		.loc 2 1471 0
+ 12921 bf1a F30F6F85 		movdqu	-752(%rbp), %xmm0
+ 12921      10FDFFFF 
+ 12922 bf22 F30F7F85 		movdqu	%xmm0, -4368(%rbp)
+ 12922      F0EEFFFF 
+1472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     xx.state = x;
+ 12923              		.loc 2 1472 0
+ 12924 bf2a F30F6F85 		movdqu	-768(%rbp), %xmm0
+ 12924      00FDFFFF 
+ 12925 bf32 F30F7F85 		movdqu	%xmm0, -4384(%rbp)
+ 12925      E0EEFFFF 
+1474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[2] = xx.columns[0];
+ 12926              		.loc 2 1474 0
+ 12927 bf3a 8B85E0EE 		movl	-4384(%rbp), %eax
+ 12927      FFFF
+ 12928 bf40 8985F8EE 		movl	%eax, -4360(%rbp)
+ 12928      FFFF
+1475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[3] = xx.columns[1];
+ 12929              		.loc 2 1475 0
+ 12930 bf46 8B85E4EE 		movl	-4380(%rbp), %eax
+ 12930      FFFF
+ 12931 bf4c 8985FCEE 		movl	%eax, -4356(%rbp)
+ 12931      FFFF
+1477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return ww.state;
+ 12932              		.loc 2 1477 0
+ 12933 bf52 F30F6F85 		movdqu	-4368(%rbp), %xmm0
+ 12933      F0EEFFFF 
+ 12934              	.LBE1487:
+ 12935              	.LBE1486:
+1876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateMerge1) (v1,v3);        /* k40   : k41   : k42    : k43          */
+ 12936              		.loc 2 1876 0
+ 12937 bf5a 660F7F85 		movdqa	%xmm0, -6784(%rbp)
+ 12937      80E5FFFF 
+1877:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[10] = v1; /* K40:K41:K42:K43 */
+ 12938              		.loc 2 1877 0
+ 12939 bf62 488B8588 		movq	-6264(%rbp), %rax
+ 12939      E7FFFF
+ 12940 bf69 4805A000 		addq	$160, %rax
+ 12940      0000
+ 12941 bf6f 660F6F85 		movdqa	-6784(%rbp), %xmm0
+ 12941      80E5FFFF 
+ 12942 bf77 660F7F00 		movdqa	%xmm0, (%rax)
+ 12943 bf7b 660F6F85 		movdqa	-6752(%rbp), %xmm0
+ 12943      A0E5FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 412
+
+
+ 12944 bf83 F30F7F85 		movdqu	%xmm0, -720(%rbp)
+ 12944      30FDFFFF 
+ 12945 bf8b 660F6F85 		movdqa	-6736(%rbp), %xmm0
+ 12945      B0E5FFFF 
+ 12946 bf93 F30F7F85 		movdqu	%xmm0, -736(%rbp)
+ 12946      20FDFFFF 
+ 12947              	.LBB1488:
+ 12948              	.LBB1489:
+1503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.state = w;
+ 12949              		.loc 2 1503 0
+ 12950 bf9b F30F6F85 		movdqu	-720(%rbp), %xmm0
+ 12950      30FDFFFF 
+ 12951 bfa3 F30F7F85 		movdqu	%xmm0, -4336(%rbp)
+ 12951      10EFFFFF 
+1504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     xx.state = x;
+ 12952              		.loc 2 1504 0
+ 12953 bfab F30F6F85 		movdqu	-736(%rbp), %xmm0
+ 12953      20FDFFFF 
+ 12954 bfb3 F30F7F85 		movdqu	%xmm0, -4352(%rbp)
+ 12954      00EFFFFF 
+1506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[0] = ww.columns[2];
+ 12955              		.loc 2 1506 0
+ 12956 bfbb 8B8518EF 		movl	-4328(%rbp), %eax
+ 12956      FFFF
+ 12957 bfc1 898510EF 		movl	%eax, -4336(%rbp)
+ 12957      FFFF
+1507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[1] = ww.columns[3];
+ 12958              		.loc 2 1507 0
+ 12959 bfc7 8B851CEF 		movl	-4324(%rbp), %eax
+ 12959      FFFF
+ 12960 bfcd 898514EF 		movl	%eax, -4332(%rbp)
+ 12960      FFFF
+1508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[2] = xx.columns[0];
+ 12961              		.loc 2 1508 0
+ 12962 bfd3 8B8500EF 		movl	-4352(%rbp), %eax
+ 12962      FFFF
+ 12963 bfd9 898518EF 		movl	%eax, -4328(%rbp)
+ 12963      FFFF
+1509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[3] = xx.columns[1];
+ 12964              		.loc 2 1509 0
+ 12965 bfdf 8B8504EF 		movl	-4348(%rbp), %eax
+ 12965      FFFF
+ 12966 bfe5 89851CEF 		movl	%eax, -4324(%rbp)
+ 12966      FFFF
+1511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return ww.state;
+ 12967              		.loc 2 1511 0
+ 12968 bfeb F30F6F85 		movdqu	-4336(%rbp), %xmm0
+ 12968      10EFFFFF 
+ 12969              	.LBE1489:
+ 12970              	.LBE1488:
+1878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v2  = AESBCMEMBER(StateMerge2) (v3,v4);        /* k44   : k45   : k46    : k47          */
+ 12971              		.loc 2 1878 0
+ 12972 bff3 660F7F85 		movdqa	%xmm0, -6768(%rbp)
+ 12972      90E5FFFF 
+1879:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[11] = v2; /* K44:K45:K46:K47 */
+ 12973              		.loc 2 1879 0
+ 12974 bffb 488B8588 		movq	-6264(%rbp), %rax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 413
+
+
+ 12974      E7FFFF
+ 12975 c002 4805B000 		addq	$176, %rax
+ 12975      0000
+ 12976 c008 660F6F85 		movdqa	-6768(%rbp), %xmm0
+ 12976      90E5FFFF 
+ 12977 c010 660F7F00 		movdqa	%xmm0, (%rax)
+ 12978 c014 660F6F85 		movdqa	-6752(%rbp), %xmm0
+ 12978      A0E5FFFF 
+ 12979 c01c F30F7F85 		movdqu	%xmm0, -704(%rbp)
+ 12979      40FDFFFF 
+ 12980              	.LBB1490:
+ 12981              	.LBB1491:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 12982              		.loc 2 1565 0
+ 12983 c024 F30F6F85 		movdqu	-704(%rbp), %xmm0
+ 12983      40FDFFFF 
+ 12984 c02c 660F7F85 		movdqa	%xmm0, -6336(%rbp)
+ 12984      40E7FFFF 
+ 12985 c034 660F6F85 		movdqa	-6336(%rbp), %xmm0
+ 12985      40E7FFFF 
+ 12986 c03c F30F7F85 		movdqu	%xmm0, -688(%rbp)
+ 12986      50FDFFFF 
+ 12987              	.LBB1492:
+ 12988              	.LBB1493:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 12989              		.loc 2 1282 0
+ 12990 c044 F30F6F85 		movdqu	-688(%rbp), %xmm0
+ 12990      50FDFFFF 
+ 12991 c04c F30F7F85 		movdqu	%xmm0, -4320(%rbp)
+ 12991      20EFFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 12992              		.loc 2 1283 0
+ 12993 c054 8B8528EF 		movl	-4312(%rbp), %eax
+ 12993      FFFF
+ 12994 c05a 89852CEF 		movl	%eax, -4308(%rbp)
+ 12994      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 12995              		.loc 2 1284 0
+ 12996 c060 8B8524EF 		movl	-4316(%rbp), %eax
+ 12996      FFFF
+ 12997 c066 898528EF 		movl	%eax, -4312(%rbp)
+ 12997      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 12998              		.loc 2 1285 0
+ 12999 c06c 8B8520EF 		movl	-4320(%rbp), %eax
+ 12999      FFFF
+ 13000 c072 898524EF 		movl	%eax, -4316(%rbp)
+ 13000      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 13001              		.loc 2 1286 0
+ 13002 c078 C78520EF 		movl	$0, -4320(%rbp)
+ 13002      FFFF0000 
+ 13002      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 13003              		.loc 2 1287 0
+ 13004 c082 F30F6F85 		movdqu	-4320(%rbp), %xmm0
+ 13004      20EFFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 414
+
+
+ 13005              	.LBE1493:
+ 13006              	.LBE1492:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13007              		.loc 2 1567 0
+ 13008 c08a 660F7F85 		movdqa	%xmm0, -6336(%rbp)
+ 13008      40E7FFFF 
+ 13009 c092 660F6F85 		movdqa	-6336(%rbp), %xmm0
+ 13009      40E7FFFF 
+ 13010 c09a 660FEF85 		pxor	-704(%rbp), %xmm0
+ 13010      40FDFFFF 
+ 13011 c0a2 F30F7F85 		movdqu	%xmm0, -704(%rbp)
+ 13011      40FDFFFF 
+ 13012 c0aa 660F6F85 		movdqa	-6336(%rbp), %xmm0
+ 13012      40E7FFFF 
+ 13013 c0b2 F30F7F85 		movdqu	%xmm0, -672(%rbp)
+ 13013      60FDFFFF 
+ 13014              	.LBB1494:
+ 13015              	.LBB1495:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 13016              		.loc 2 1282 0
+ 13017 c0ba F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 13017      60FDFFFF 
+ 13018 c0c2 F30F7F85 		movdqu	%xmm0, -4304(%rbp)
+ 13018      30EFFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 13019              		.loc 2 1283 0
+ 13020 c0ca 8B8538EF 		movl	-4296(%rbp), %eax
+ 13020      FFFF
+ 13021 c0d0 89853CEF 		movl	%eax, -4292(%rbp)
+ 13021      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 13022              		.loc 2 1284 0
+ 13023 c0d6 8B8534EF 		movl	-4300(%rbp), %eax
+ 13023      FFFF
+ 13024 c0dc 898538EF 		movl	%eax, -4296(%rbp)
+ 13024      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 13025              		.loc 2 1285 0
+ 13026 c0e2 8B8530EF 		movl	-4304(%rbp), %eax
+ 13026      FFFF
+ 13027 c0e8 898534EF 		movl	%eax, -4300(%rbp)
+ 13027      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 13028              		.loc 2 1286 0
+ 13029 c0ee C78530EF 		movl	$0, -4304(%rbp)
+ 13029      FFFF0000 
+ 13029      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 13030              		.loc 2 1287 0
+ 13031 c0f8 F30F6F85 		movdqu	-4304(%rbp), %xmm0
+ 13031      30EFFFFF 
+ 13032              	.LBE1495:
+ 13033              	.LBE1494:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13034              		.loc 2 1568 0
+ 13035 c100 660F7F85 		movdqa	%xmm0, -6336(%rbp)
+ 13035      40E7FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 415
+
+
+ 13036 c108 660F6F85 		movdqa	-6336(%rbp), %xmm0
+ 13036      40E7FFFF 
+ 13037 c110 660FEF85 		pxor	-704(%rbp), %xmm0
+ 13037      40FDFFFF 
+ 13038 c118 F30F7F85 		movdqu	%xmm0, -704(%rbp)
+ 13038      40FDFFFF 
+ 13039 c120 660F6F85 		movdqa	-6336(%rbp), %xmm0
+ 13039      40E7FFFF 
+ 13040 c128 F30F7F85 		movdqu	%xmm0, -656(%rbp)
+ 13040      70FDFFFF 
+ 13041              	.LBB1496:
+ 13042              	.LBB1497:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 13043              		.loc 2 1282 0
+ 13044 c130 F30F6F85 		movdqu	-656(%rbp), %xmm0
+ 13044      70FDFFFF 
+ 13045 c138 F30F7F85 		movdqu	%xmm0, -4288(%rbp)
+ 13045      40EFFFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 13046              		.loc 2 1283 0
+ 13047 c140 8B8548EF 		movl	-4280(%rbp), %eax
+ 13047      FFFF
+ 13048 c146 89854CEF 		movl	%eax, -4276(%rbp)
+ 13048      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 13049              		.loc 2 1284 0
+ 13050 c14c 8B8544EF 		movl	-4284(%rbp), %eax
+ 13050      FFFF
+ 13051 c152 898548EF 		movl	%eax, -4280(%rbp)
+ 13051      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 13052              		.loc 2 1285 0
+ 13053 c158 8B8540EF 		movl	-4288(%rbp), %eax
+ 13053      FFFF
+ 13054 c15e 898544EF 		movl	%eax, -4284(%rbp)
+ 13054      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 13055              		.loc 2 1286 0
+ 13056 c164 C78540EF 		movl	$0, -4288(%rbp)
+ 13056      FFFF0000 
+ 13056      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 13057              		.loc 2 1287 0
+ 13058 c16e F30F6F85 		movdqu	-4288(%rbp), %xmm0
+ 13058      40EFFFFF 
+ 13059              	.LBE1497:
+ 13060              	.LBE1496:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13061              		.loc 2 1569 0
+ 13062 c176 660F7F85 		movdqa	%xmm0, -6336(%rbp)
+ 13062      40E7FFFF 
+ 13063 c17e 660F6F85 		movdqa	-6336(%rbp), %xmm0
+ 13063      40E7FFFF 
+ 13064 c186 660FEF85 		pxor	-704(%rbp), %xmm0
+ 13064      40FDFFFF 
+ 13065 c18e F30F7F85 		movdqu	%xmm0, -704(%rbp)
+ 13065      40FDFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 416
+
+
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 13066              		.loc 2 1571 0
+ 13067 c196 F30F6F85 		movdqu	-704(%rbp), %xmm0
+ 13067      40FDFFFF 
+ 13068              	.LBE1491:
+ 13069              	.LBE1490:
+1882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(ShiftXorColumns) (v3);       /* k42   :k42^k43:k42^k43^k44:k42^k43^k44^k45  *
+ 13070              		.loc 2 1882 0
+ 13071 c19e 660F7F85 		movdqa	%xmm0, -6800(%rbp)
+ 13071      70E5FFFF 
+ 13072 c1a6 660F6F85 		movdqa	-6768(%rbp), %xmm0
+ 13072      90E5FFFF 
+ 13073 c1ae F30F7F85 		movdqu	%xmm0, -624(%rbp)
+ 13073      90FDFFFF 
+ 13074              	.LBB1498:
+ 13075              	.LBB1499:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 13076              		.loc 2 1681 0
+ 13077 c1b6 B8800000 		movl	$128, %eax
+ 13077      00
+ 13078 c1bb 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 13078      00000000 
+ 13079 c1c3 F30F7F85 		movdqu	%xmm0, -592(%rbp)
+ 13079      B0FDFFFF 
+ 13080 c1cb 8985ACFD 		movl	%eax, -596(%rbp)
+ 13080      FFFF
+ 13081              	.LBB1500:
+ 13082              	.LBB1501:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 13083              		.loc 2 522 0
+ 13084 c1d1 F30F6F85 		movdqu	-592(%rbp), %xmm0
+ 13084      B0FDFFFF 
+ 13085 c1d9 F30F7F85 		movdqu	%xmm0, -4208(%rbp)
+ 13085      90EFFFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 13086              		.loc 2 523 0
+ 13087 c1e1 B8030000 		movl	$3, %eax
+ 13087      00
+ 13088 c1e6 4898     		cltq
+ 13089 c1e8 8B95ACFD 		movl	-596(%rbp), %edx
+ 13089      FFFF
+ 13090 c1ee 89948590 		movl	%edx, -4208(%rbp,%rax,4)
+ 13090      EFFFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 13091              		.loc 2 524 0
+ 13092 c1f5 F30F6F85 		movdqu	-4208(%rbp), %xmm0
+ 13092      90EFFFFF 
+ 13093 c1fd F30F7F85 		movdqu	%xmm0, -592(%rbp)
+ 13093      B0FDFFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 13094              		.loc 2 526 0
+ 13095 c205 F30F6F85 		movdqu	-592(%rbp), %xmm0
+ 13095      B0FDFFFF 
+ 13096              	.LBE1501:
+ 13097              	.LBE1500:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 13098              		.loc 2 1681 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 417
+
+
+ 13099 c20d 660F7F85 		movdqa	%xmm0, -6304(%rbp)
+ 13099      60E7FFFF 
+ 13100 c215 F30F6F85 		movdqu	-624(%rbp), %xmm0
+ 13100      90FDFFFF 
+ 13101 c21d F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 13101      C0FDFFFF 
+ 13102 c225 F30F6F85 		movdqu	-576(%rbp), %xmm0
+ 13102      C0FDFFFF 
+ 13103 c22d F30F7F85 		movdqu	%xmm0, -544(%rbp)
+ 13103      E0FDFFFF 
+ 13104 c235 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 13104      000000
+ 13105 c23c 488985D8 		movq	%rax, -552(%rbp)
+ 13105      FDFFFF
+ 13106              	.LBB1502:
+ 13107              	.LBB1503:
+ 13108              	.LBB1504:
+ 13109              	.LBB1505:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 13110              		.loc 2 851 0
+ 13111 c243 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 13111      00000000 
+ 13112 c24b F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 13112      00FEFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 13113              		.loc 2 854 0
+ 13114 c253 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 13114      00000000 
+ 13115 c25b F30F6F8D 		movdqu	-544(%rbp), %xmm1
+ 13115      E0FDFFFF 
+ 13116 c263 F30F7F8D 		movdqu	%xmm1, -432(%rbp)
+ 13116      50FEFFFF 
+ 13117 c26b F30F7F85 		movdqu	%xmm0, -448(%rbp)
+ 13117      40FEFFFF 
+ 13118              	.LBB1506:
+ 13119              	.LBB1507:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 13120              		.loc 2 206 0
+ 13121 c273 F30F6F85 		movdqu	-448(%rbp), %xmm0
+ 13121      40FEFFFF 
+ 13122 c27b F30F6F8D 		movdqu	-432(%rbp), %xmm1
+ 13122      50FEFFFF 
+ 13123 c283 660FDBC1 		pand	%xmm1, %xmm0
+ 13124              	.LBE1507:
+ 13125              	.LBE1506:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 13126              		.loc 2 854 0
+ 13127 c287 F30F7F85 		movdqu	%xmm0, -464(%rbp)
+ 13127      30FEFFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 13128              		.loc 2 862 0
+ 13129 c28f 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 13129      00000000 
+ 13130 c297 F30F6F8D 		movdqu	-544(%rbp), %xmm1
+ 13130      E0FDFFFF 
+ 13131 c29f F30F7F8D 		movdqu	%xmm1, -400(%rbp)
+ 13131      70FEFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 418
+
+
+ 13132 c2a7 F30F7F85 		movdqu	%xmm0, -416(%rbp)
+ 13132      60FEFFFF 
+ 13133              	.LBB1508:
+ 13134              		.loc 2 2642 0
+ 13135 c2af 0FB68570 		movzbl	-400(%rbp), %eax
+ 13135      FEFFFF
+ 13136 c2b6 0FB69560 		movzbl	-416(%rbp), %edx
+ 13136      FEFFFF
+ 13137 c2bd 0FB6C0   		movzbl	%al, %eax
+ 13138 c2c0 6689852E 		movw	%ax, -6866(%rbp)
+ 13138      E5FFFF
+ 13139 c2c7 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 13139      E5FFFF
+ 13140 c2ce F6F2     		divb	%dl
+ 13141 c2d0 4189C7   		movl	%eax, %r15d
+ 13142 c2d3 0FB68571 		movzbl	-399(%rbp), %eax
+ 13142      FEFFFF
+ 13143 c2da 0FB69561 		movzbl	-415(%rbp), %edx
+ 13143      FEFFFF
+ 13144 c2e1 0FB6C0   		movzbl	%al, %eax
+ 13145 c2e4 6689852E 		movw	%ax, -6866(%rbp)
+ 13145      E5FFFF
+ 13146 c2eb 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 13146      E5FFFF
+ 13147 c2f2 F6F2     		divb	%dl
+ 13148 c2f4 88857FE7 		movb	%al, -6273(%rbp)
+ 13148      FFFF
+ 13149 c2fa 0FB68572 		movzbl	-398(%rbp), %eax
+ 13149      FEFFFF
+ 13150 c301 0FB69562 		movzbl	-414(%rbp), %edx
+ 13150      FEFFFF
+ 13151 c308 0FB6C0   		movzbl	%al, %eax
+ 13152 c30b 6689852E 		movw	%ax, -6866(%rbp)
+ 13152      E5FFFF
+ 13153 c312 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 13153      E5FFFF
+ 13154 c319 F6F2     		divb	%dl
+ 13155 c31b 88857EE7 		movb	%al, -6274(%rbp)
+ 13155      FFFF
+ 13156 c321 0FB68573 		movzbl	-397(%rbp), %eax
+ 13156      FEFFFF
+ 13157 c328 0FB69563 		movzbl	-413(%rbp), %edx
+ 13157      FEFFFF
+ 13158 c32f 0FB6C0   		movzbl	%al, %eax
+ 13159 c332 6689852E 		movw	%ax, -6866(%rbp)
+ 13159      E5FFFF
+ 13160 c339 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 13160      E5FFFF
+ 13161 c340 F6F2     		divb	%dl
+ 13162 c342 88857DE7 		movb	%al, -6275(%rbp)
+ 13162      FFFF
+ 13163 c348 0FB68574 		movzbl	-396(%rbp), %eax
+ 13163      FEFFFF
+ 13164 c34f 0FB69564 		movzbl	-412(%rbp), %edx
+ 13164      FEFFFF
+ 13165 c356 0FB6C0   		movzbl	%al, %eax
+ 13166 c359 6689852E 		movw	%ax, -6866(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 419
+
+
+ 13166      E5FFFF
+ 13167 c360 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 13167      E5FFFF
+ 13168 c367 F6F2     		divb	%dl
+ 13169 c369 88857CE7 		movb	%al, -6276(%rbp)
+ 13169      FFFF
+ 13170 c36f 0FB68575 		movzbl	-395(%rbp), %eax
+ 13170      FEFFFF
+ 13171 c376 0FB69565 		movzbl	-411(%rbp), %edx
+ 13171      FEFFFF
+ 13172 c37d 0FB6C0   		movzbl	%al, %eax
+ 13173 c380 6689852E 		movw	%ax, -6866(%rbp)
+ 13173      E5FFFF
+ 13174 c387 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 13174      E5FFFF
+ 13175 c38e F6F2     		divb	%dl
+ 13176 c390 4189C1   		movl	%eax, %r9d
+ 13177 c393 0FB68576 		movzbl	-394(%rbp), %eax
+ 13177      FEFFFF
+ 13178 c39a 0FB69566 		movzbl	-410(%rbp), %edx
+ 13178      FEFFFF
+ 13179 c3a1 0FB6C0   		movzbl	%al, %eax
+ 13180 c3a4 6689852E 		movw	%ax, -6866(%rbp)
+ 13180      E5FFFF
+ 13181 c3ab 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 13181      E5FFFF
+ 13182 c3b2 F6F2     		divb	%dl
+ 13183 c3b4 89C7     		movl	%eax, %edi
+ 13184 c3b6 0FB68577 		movzbl	-393(%rbp), %eax
+ 13184      FEFFFF
+ 13185 c3bd 0FB69567 		movzbl	-409(%rbp), %edx
+ 13185      FEFFFF
+ 13186 c3c4 0FB6C0   		movzbl	%al, %eax
+ 13187 c3c7 6689852E 		movw	%ax, -6866(%rbp)
+ 13187      E5FFFF
+ 13188 c3ce 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 13188      E5FFFF
+ 13189 c3d5 F6F2     		divb	%dl
+ 13190 c3d7 89C3     		movl	%eax, %ebx
+ 13191 c3d9 0FB68578 		movzbl	-392(%rbp), %eax
+ 13191      FEFFFF
+ 13192 c3e0 0FB69568 		movzbl	-408(%rbp), %edx
+ 13192      FEFFFF
+ 13193 c3e7 0FB6C0   		movzbl	%al, %eax
+ 13194 c3ea 6689852E 		movw	%ax, -6866(%rbp)
+ 13194      E5FFFF
+ 13195 c3f1 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 13195      E5FFFF
+ 13196 c3f8 F6F2     		divb	%dl
+ 13197 c3fa 4189C2   		movl	%eax, %r10d
+ 13198 c3fd 0FB68579 		movzbl	-391(%rbp), %eax
+ 13198      FEFFFF
+ 13199 c404 0FB69569 		movzbl	-407(%rbp), %edx
+ 13199      FEFFFF
+ 13200 c40b 0FB6C0   		movzbl	%al, %eax
+ 13201 c40e 6689852E 		movw	%ax, -6866(%rbp)
+ 13201      E5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 420
+
+
+ 13202 c415 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 13202      E5FFFF
+ 13203 c41c F6F2     		divb	%dl
+ 13204 c41e 4189C3   		movl	%eax, %r11d
+ 13205 c421 0FB6857A 		movzbl	-390(%rbp), %eax
+ 13205      FEFFFF
+ 13206 c428 0FB6956A 		movzbl	-406(%rbp), %edx
+ 13206      FEFFFF
+ 13207 c42f 0FB6C0   		movzbl	%al, %eax
+ 13208 c432 6689852E 		movw	%ax, -6866(%rbp)
+ 13208      E5FFFF
+ 13209 c439 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 13209      E5FFFF
+ 13210 c440 F6F2     		divb	%dl
+ 13211 c442 4189C4   		movl	%eax, %r12d
+ 13212 c445 0FB6857B 		movzbl	-389(%rbp), %eax
+ 13212      FEFFFF
+ 13213 c44c 0FB6956B 		movzbl	-405(%rbp), %edx
+ 13213      FEFFFF
+ 13214 c453 0FB6C0   		movzbl	%al, %eax
+ 13215 c456 6689852E 		movw	%ax, -6866(%rbp)
+ 13215      E5FFFF
+ 13216 c45d 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 13216      E5FFFF
+ 13217 c464 F6F2     		divb	%dl
+ 13218 c466 4189C5   		movl	%eax, %r13d
+ 13219 c469 0FB6857C 		movzbl	-388(%rbp), %eax
+ 13219      FEFFFF
+ 13220 c470 0FB6956C 		movzbl	-404(%rbp), %edx
+ 13220      FEFFFF
+ 13221 c477 0FB6C0   		movzbl	%al, %eax
+ 13222 c47a 6689852E 		movw	%ax, -6866(%rbp)
+ 13222      E5FFFF
+ 13223 c481 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 13223      E5FFFF
+ 13224 c488 F6F2     		divb	%dl
+ 13225 c48a 4189C6   		movl	%eax, %r14d
+ 13226 c48d 0FB6857D 		movzbl	-387(%rbp), %eax
+ 13226      FEFFFF
+ 13227 c494 0FB6956D 		movzbl	-403(%rbp), %edx
+ 13227      FEFFFF
+ 13228 c49b 0FB6C0   		movzbl	%al, %eax
+ 13229 c49e 6689852E 		movw	%ax, -6866(%rbp)
+ 13229      E5FFFF
+ 13230 c4a5 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 13230      E5FFFF
+ 13231 c4ac F6F2     		divb	%dl
+ 13232 c4ae 4189C0   		movl	%eax, %r8d
+ 13233 c4b1 0FB6857E 		movzbl	-386(%rbp), %eax
+ 13233      FEFFFF
+ 13234 c4b8 0FB6956E 		movzbl	-402(%rbp), %edx
+ 13234      FEFFFF
+ 13235 c4bf 0FB6C0   		movzbl	%al, %eax
+ 13236 c4c2 6689852E 		movw	%ax, -6866(%rbp)
+ 13236      E5FFFF
+ 13237 c4c9 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 13237      E5FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 421
+
+
+ 13238 c4d0 F6F2     		divb	%dl
+ 13239 c4d2 89C6     		movl	%eax, %esi
+ 13240 c4d4 0FB6857F 		movzbl	-385(%rbp), %eax
+ 13240      FEFFFF
+ 13241 c4db 0FB6956F 		movzbl	-401(%rbp), %edx
+ 13241      FEFFFF
+ 13242 c4e2 0FB6C0   		movzbl	%al, %eax
+ 13243 c4e5 6689852E 		movw	%ax, -6866(%rbp)
+ 13243      E5FFFF
+ 13244 c4ec 0FB7852E 		movzwl	-6866(%rbp), %eax
+ 13244      E5FFFF
+ 13245 c4f3 F6F2     		divb	%dl
+ 13246 c4f5 89C1     		movl	%eax, %ecx
+ 13247              	.LBB1509:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 13248              		.loc 2 346 0
+ 13249 c4f7 0FB6D3   		movzbl	%bl, %edx
+ 13250 c4fa 400FB6C7 		movzbl	%dil, %eax
+ 13251 c4fe 48C1E208 		salq	$8, %rdx
+ 13252 c502 4809C2   		orq	%rax, %rdx
+ 13253 c505 410FB6C1 		movzbl	%r9b, %eax
+ 13254 c509 48C1E208 		salq	$8, %rdx
+ 13255 c50d 4809C2   		orq	%rax, %rdx
+ 13256 c510 0FB6857C 		movzbl	-6276(%rbp), %eax
+ 13256      E7FFFF
+ 13257 c517 48C1E208 		salq	$8, %rdx
+ 13258 c51b 4809C2   		orq	%rax, %rdx
+ 13259 c51e 0FB6857D 		movzbl	-6275(%rbp), %eax
+ 13259      E7FFFF
+ 13260 c525 48C1E208 		salq	$8, %rdx
+ 13261 c529 4809C2   		orq	%rax, %rdx
+ 13262 c52c 0FB6857E 		movzbl	-6274(%rbp), %eax
+ 13262      E7FFFF
+ 13263 c533 48C1E208 		salq	$8, %rdx
+ 13264 c537 4809C2   		orq	%rax, %rdx
+ 13265 c53a 0FB6857F 		movzbl	-6273(%rbp), %eax
+ 13265      E7FFFF
+ 13266 c541 48C1E208 		salq	$8, %rdx
+ 13267 c545 4809C2   		orq	%rax, %rdx
+ 13268 c548 410FB6C7 		movzbl	%r15b, %eax
+ 13269 c54c 48C1E208 		salq	$8, %rdx
+ 13270 c550 4809C2   		orq	%rax, %rdx
+ 13271 c553 0FB6C1   		movzbl	%cl, %eax
+ 13272 c556 400FB6CE 		movzbl	%sil, %ecx
+ 13273 c55a 48C1E008 		salq	$8, %rax
+ 13274 c55e 4809C8   		orq	%rcx, %rax
+ 13275 c561 410FB6C8 		movzbl	%r8b, %ecx
+ 13276 c565 48C1E008 		salq	$8, %rax
+ 13277 c569 4809C8   		orq	%rcx, %rax
+ 13278 c56c 410FB6CE 		movzbl	%r14b, %ecx
+ 13279 c570 48C1E008 		salq	$8, %rax
+ 13280 c574 4809C8   		orq	%rcx, %rax
+ 13281 c577 410FB6CD 		movzbl	%r13b, %ecx
+ 13282 c57b 48C1E008 		salq	$8, %rax
+ 13283 c57f 4809C8   		orq	%rcx, %rax
+ 13284 c582 410FB6CC 		movzbl	%r12b, %ecx
+ 13285 c586 48C1E008 		salq	$8, %rax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 422
+
+
+ 13286 c58a 4809C8   		orq	%rcx, %rax
+ 13287 c58d 410FB6CB 		movzbl	%r11b, %ecx
+ 13288 c591 48C1E008 		salq	$8, %rax
+ 13289 c595 4809C8   		orq	%rcx, %rax
+ 13290 c598 410FB6CA 		movzbl	%r10b, %ecx
+ 13291 c59c 48C1E008 		salq	$8, %rax
+ 13292 c5a0 4809C8   		orq	%rcx, %rax
+ 13293 c5a3 48899530 		movq	%rdx, -6864(%rbp)
+ 13293      E5FFFF
+ 13294 c5aa 48898538 		movq	%rax, -6856(%rbp)
+ 13294      E5FFFF
+ 13295 c5b1 660F6F85 		movdqa	-6864(%rbp), %xmm0
+ 13295      30E5FFFF 
+ 13296              	.LBE1509:
+ 13297              	.LBE1508:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 13298              		.loc 2 862 0
+ 13299 c5b9 F30F7F85 		movdqu	%xmm0, -480(%rbp)
+ 13299      20FEFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 13300              		.loc 2 866 0
+ 13301 c5c1 C785FCFD 		movl	$0, -516(%rbp)
+ 13301      FFFF0000 
+ 13301      0000
+ 13302 c5cb E9860200 		jmp	.L300
+ 13302      00
+ 13303              	.L309:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 13304              		.loc 2 868 0
+ 13305 c5d0 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 13305      00000000 
+ 13306 c5d8 F30F7F85 		movdqu	%xmm0, -368(%rbp)
+ 13306      90FEFFFF 
+ 13307 c5e0 F30F6F85 		movdqu	-480(%rbp), %xmm0
+ 13307      20FEFFFF 
+ 13308 c5e8 F30F7F85 		movdqu	%xmm0, -384(%rbp)
+ 13308      80FEFFFF 
+ 13309              	.LBB1510:
+ 13310              	.LBB1511:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 13311              		.loc 2 380 0
+ 13312 c5f0 F30F6F85 		movdqu	-368(%rbp), %xmm0
+ 13312      90FEFFFF 
+ 13313 c5f8 F30F7F85 		movdqu	%xmm0, -4176(%rbp)
+ 13313      B0EFFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 13314              		.loc 2 381 0
+ 13315 c600 F30F6F85 		movdqu	-384(%rbp), %xmm0
+ 13315      80FEFFFF 
+ 13316 c608 F30F7F85 		movdqu	%xmm0, -4192(%rbp)
+ 13316      A0EFFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 13317              		.loc 2 383 0
+ 13318 c610 C785ACFE 		movl	$0, -340(%rbp)
+ 13318      FFFF0000 
+ 13318      0000
+ 13319 c61a EB5C     		jmp	.L301
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 423
+
+
+ 13320              	.L304:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 13321              		.loc 2 385 0
+ 13322 c61c 8B85ACFE 		movl	-340(%rbp), %eax
+ 13322      FFFF
+ 13323 c622 89C0     		mov	%eax, %eax
+ 13324 c624 0FB68405 		movzbl	-4192(%rbp,%rax), %eax
+ 13324      A0EFFFFF 
+ 13325 c62c 84C0     		testb	%al, %al
+ 13326 c62e 7912     		jns	.L302
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 13327              		.loc 2 386 0
+ 13328 c630 8B85ACFE 		movl	-340(%rbp), %eax
+ 13328      FFFF
+ 13329 c636 89C0     		mov	%eax, %eax
+ 13330 c638 C68405C0 		movb	$0, -4160(%rbp,%rax)
+ 13330      EFFFFF00 
+ 13331 c640 EB2F     		jmp	.L303
+ 13332              	.L302:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 13333              		.loc 2 388 0
+ 13334 c642 8B8DACFE 		movl	-340(%rbp), %ecx
+ 13334      FFFF
+ 13335 c648 8B85ACFE 		movl	-340(%rbp), %eax
+ 13335      FFFF
+ 13336 c64e 89C0     		mov	%eax, %eax
+ 13337 c650 0FB68405 		movzbl	-4192(%rbp,%rax), %eax
+ 13337      A0EFFFFF 
+ 13338 c658 0FB6C0   		movzbl	%al, %eax
+ 13339 c65b 83E00F   		andl	$15, %eax
+ 13340 c65e 4898     		cltq
+ 13341 c660 0FB69405 		movzbl	-4176(%rbp,%rax), %edx
+ 13341      B0EFFFFF 
+ 13342 c668 89C8     		mov	%ecx, %eax
+ 13343 c66a 889405C0 		movb	%dl, -4160(%rbp,%rax)
+ 13343      EFFFFF
+ 13344              	.L303:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 13345              		.loc 2 383 0
+ 13346 c671 8385ACFE 		addl	$1, -340(%rbp)
+ 13346      FFFF01
+ 13347              	.L301:
+ 13348 c678 83BDACFE 		cmpl	$15, -340(%rbp)
+ 13348      FFFF0F
+ 13349 c67f 769B     		jbe	.L304
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 13350              		.loc 2 391 0
+ 13351 c681 F30F6F85 		movdqu	-4160(%rbp), %xmm0
+ 13351      C0EFFFFF 
+ 13352              	.LBE1511:
+ 13353              	.LBE1510:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 13354              		.loc 2 868 0
+ 13355 c689 F30F7F85 		movdqu	%xmm0, -496(%rbp)
+ 13355      10FEFFFF 
+ 13356 c691 F30F6F85 		movdqu	-464(%rbp), %xmm0
+ 13356      30FEFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 424
+
+
+ 13357 c699 F30F7F85 		movdqu	%xmm0, -320(%rbp)
+ 13357      C0FEFFFF 
+ 13358 c6a1 F30F6F85 		movdqu	-496(%rbp), %xmm0
+ 13358      10FEFFFF 
+ 13359 c6a9 F30F7F85 		movdqu	%xmm0, -336(%rbp)
+ 13359      B0FEFFFF 
+ 13360              	.LBB1512:
+ 13361              	.LBB1513:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 13362              		.loc 2 234 0
+ 13363 c6b1 F30F6F85 		movdqu	-336(%rbp), %xmm0
+ 13363      B0FEFFFF 
+ 13364 c6b9 F30F6F8D 		movdqu	-320(%rbp), %xmm1
+ 13364      C0FEFFFF 
+ 13365 c6c1 660FEBC1 		por	%xmm1, %xmm0
+ 13366              	.LBE1513:
+ 13367              	.LBE1512:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 13368              		.loc 2 870 0
+ 13369 c6c5 F30F7F85 		movdqu	%xmm0, -496(%rbp)
+ 13369      10FEFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 13370              		.loc 2 872 0
+ 13371 c6cd 8B85FCFD 		mov	-516(%rbp), %eax
+ 13371      FFFF
+ 13372 c6d3 48C1E004 		salq	$4, %rax
+ 13373 c6d7 480385D8 		addq	-552(%rbp), %rax
+ 13373      FDFFFF
+ 13374 c6de 660F6F00 		movdqa	(%rax), %xmm0
+ 13375 c6e2 F30F7F85 		movdqu	%xmm0, -288(%rbp)
+ 13375      E0FEFFFF 
+ 13376 c6ea F30F6F85 		movdqu	-496(%rbp), %xmm0
+ 13376      10FEFFFF 
+ 13377 c6f2 F30F7F85 		movdqu	%xmm0, -304(%rbp)
+ 13377      D0FEFFFF 
+ 13378              	.LBB1514:
+ 13379              	.LBB1515:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 13380              		.loc 2 380 0
+ 13381 c6fa F30F6F85 		movdqu	-288(%rbp), %xmm0
+ 13381      E0FEFFFF 
+ 13382 c702 F30F7F85 		movdqu	%xmm0, -4128(%rbp)
+ 13382      E0EFFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 13383              		.loc 2 381 0
+ 13384 c70a F30F6F85 		movdqu	-304(%rbp), %xmm0
+ 13384      D0FEFFFF 
+ 13385 c712 F30F7F85 		movdqu	%xmm0, -4144(%rbp)
+ 13385      D0EFFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 13386              		.loc 2 383 0
+ 13387 c71a C785FCFE 		movl	$0, -260(%rbp)
+ 13387      FFFF0000 
+ 13387      0000
+ 13388 c724 EB5C     		jmp	.L305
+ 13389              	.L308:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 425
+
+
+ 13390              		.loc 2 385 0
+ 13391 c726 8B85FCFE 		movl	-260(%rbp), %eax
+ 13391      FFFF
+ 13392 c72c 89C0     		mov	%eax, %eax
+ 13393 c72e 0FB68405 		movzbl	-4144(%rbp,%rax), %eax
+ 13393      D0EFFFFF 
+ 13394 c736 84C0     		testb	%al, %al
+ 13395 c738 7912     		jns	.L306
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 13396              		.loc 2 386 0
+ 13397 c73a 8B85FCFE 		movl	-260(%rbp), %eax
+ 13397      FFFF
+ 13398 c740 89C0     		mov	%eax, %eax
+ 13399 c742 C68405F0 		movb	$0, -4112(%rbp,%rax)
+ 13399      EFFFFF00 
+ 13400 c74a EB2F     		jmp	.L307
+ 13401              	.L306:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 13402              		.loc 2 388 0
+ 13403 c74c 8B8DFCFE 		movl	-260(%rbp), %ecx
+ 13403      FFFF
+ 13404 c752 8B85FCFE 		movl	-260(%rbp), %eax
+ 13404      FFFF
+ 13405 c758 89C0     		mov	%eax, %eax
+ 13406 c75a 0FB68405 		movzbl	-4144(%rbp,%rax), %eax
+ 13406      D0EFFFFF 
+ 13407 c762 0FB6C0   		movzbl	%al, %eax
+ 13408 c765 83E00F   		andl	$15, %eax
+ 13409 c768 4898     		cltq
+ 13410 c76a 0FB69405 		movzbl	-4128(%rbp,%rax), %edx
+ 13410      E0EFFFFF 
+ 13411 c772 89C8     		mov	%ecx, %eax
+ 13412 c774 889405F0 		movb	%dl, -4112(%rbp,%rax)
+ 13412      EFFFFF
+ 13413              	.L307:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 13414              		.loc 2 383 0
+ 13415 c77b 8385FCFE 		addl	$1, -260(%rbp)
+ 13415      FFFF01
+ 13416              	.L305:
+ 13417 c782 83BDFCFE 		cmpl	$15, -260(%rbp)
+ 13417      FFFF0F
+ 13418 c789 769B     		jbe	.L308
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 13419              		.loc 2 391 0
+ 13420 c78b F30F6F85 		movdqu	-4112(%rbp), %xmm0
+ 13420      F0EFFFFF 
+ 13421              	.LBE1515:
+ 13422              	.LBE1514:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 13423              		.loc 2 872 0
+ 13424 c793 F30F7F85 		movdqu	%xmm0, -496(%rbp)
+ 13424      10FEFFFF 
+ 13425 c79b F30F6F85 		movdqu	-512(%rbp), %xmm0
+ 13425      00FEFFFF 
+ 13426 c7a3 F30F7F85 		movdqu	%xmm0, -240(%rbp)
+ 13426      10FFFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 426
+
+
+ 13427 c7ab F30F6F85 		movdqu	-496(%rbp), %xmm0
+ 13427      10FEFFFF 
+ 13428 c7b3 F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 13428      00FFFFFF 
+ 13429              	.LBB1516:
+ 13430              	.LBB1517:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 13431              		.loc 2 234 0
+ 13432 c7bb F30F6F85 		movdqu	-256(%rbp), %xmm0
+ 13432      00FFFFFF 
+ 13433 c7c3 F30F6F8D 		movdqu	-240(%rbp), %xmm1
+ 13433      10FFFFFF 
+ 13434 c7cb 660FEBC1 		por	%xmm1, %xmm0
+ 13435              	.LBE1517:
+ 13436              	.LBE1516:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 13437              		.loc 2 874 0
+ 13438 c7cf F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 13438      00FEFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 13439              		.loc 2 876 0
+ 13440 c7d7 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 13440      00000000 
+ 13441 c7df F30F6F8D 		movdqu	-480(%rbp), %xmm1
+ 13441      20FEFFFF 
+ 13442 c7e7 F30F7F8D 		movdqu	%xmm1, -208(%rbp)
+ 13442      30FFFFFF 
+ 13443 c7ef F30F7F85 		movdqu	%xmm0, -224(%rbp)
+ 13443      20FFFFFF 
+ 13444              	.LBB1518:
+ 13445              	.LBB1519:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 13446              		.loc 2 290 0
+ 13447 c7f7 F30F6F8D 		movdqu	-224(%rbp), %xmm1
+ 13447      20FFFFFF 
+ 13448 c7ff F30F6F85 		movdqu	-208(%rbp), %xmm0
+ 13448      30FFFFFF 
+ 13449 c807 660FF8C1 		psubb	%xmm1, %xmm0
+ 13450              	.LBE1519:
+ 13451              	.LBE1518:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 13452              		.loc 2 876 0
+ 13453 c80b F30F7F85 		movdqu	%xmm0, -480(%rbp)
+ 13453      20FEFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 13454              		.loc 2 878 0
+ 13455 c813 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 13455      00000000 
+ 13456 c81b F30F6F8D 		movdqu	-480(%rbp), %xmm1
+ 13456      20FEFFFF 
+ 13457 c823 F30F7F8D 		movdqu	%xmm1, -176(%rbp)
+ 13457      50FFFFFF 
+ 13458 c82b F30F7F85 		movdqu	%xmm0, -192(%rbp)
+ 13458      40FFFFFF 
+ 13459              	.LBB1520:
+ 13460              	.LBB1521:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 427
+
+
+ 13461              		.loc 2 206 0
+ 13462 c833 F30F6F85 		movdqu	-192(%rbp), %xmm0
+ 13462      40FFFFFF 
+ 13463 c83b F30F6F8D 		movdqu	-176(%rbp), %xmm1
+ 13463      50FFFFFF 
+ 13464 c843 660FDBC1 		pand	%xmm1, %xmm0
+ 13465              	.LBE1521:
+ 13466              	.LBE1520:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 13467              		.loc 2 878 0
+ 13468 c847 F30F7F85 		movdqu	%xmm0, -480(%rbp)
+ 13468      20FEFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 13469              		.loc 2 866 0
+ 13470 c84f 8385FCFD 		addl	$1, -516(%rbp)
+ 13470      FFFF01
+ 13471              	.L300:
+ 13472 c856 83BDFCFD 		cmpl	$15, -516(%rbp)
+ 13472      FFFF0F
+ 13473 c85d 0F866DFD 		jbe	.L309
+ 13473      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 13474              		.loc 2 882 0
+ 13475 c863 F30F6F85 		movdqu	-512(%rbp), %xmm0
+ 13475      00FEFFFF 
+ 13476              	.LBE1505:
+ 13477              	.LBE1504:
+ 13478              	.LBE1503:
+ 13479              	.LBE1502:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 13480              		.loc 2 1682 0
+ 13481 c86b 660F7F85 		movdqa	%xmm0, -6320(%rbp)
+ 13481      50E7FFFF 
+ 13482              	.LBB1522:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 13483              		.loc 2 1683 0
+ 13484 c873 660F6F85 		movdqa	-6320(%rbp), %xmm0
+ 13484      50E7FFFF 
+ 13485 c87b F30F7F85 		movdqu	%xmm0, -4224(%rbp)
+ 13485      80EFFFFF 
+ 13486 c883 E8000000 		call	KDbgWriterGet at PLT
+ 13486      00
+ 13487 c888 4885C0   		testq	%rax, %rax
+ 13488 c88b 7479     		je	.L311
+ 13489 c88d BF010000 		movl	$1, %edi
+ 13489      00
+ 13490 c892 E8000000 		call	KDbgCondToFlag at PLT
+ 13490      00
+ 13491 c897 4889C6   		movq	%rax, %rsi
+ 13492 c89a BF100000 		movl	$16, %edi
+ 13492      00
+ 13493 c89f E8000000 		call	KDbgTestModConds at PLT
+ 13493      00
+ 13494 c8a4 84C0     		testb	%al, %al
+ 13495 c8a6 745E     		je	.L311
+ 13496 c8a8 8B858CEF 		movl	-4212(%rbp), %eax
+ 13496      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 428
+
+
+ 13497 c8ae 89C7     		movl	%eax, %edi
+ 13498 c8b0 E84B37FF 		call	bswap_32
+ 13498      FF
+ 13499 c8b5 4189C5   		movl	%eax, %r13d
+ 13500 c8b8 8B8588EF 		movl	-4216(%rbp), %eax
+ 13500      FFFF
+ 13501 c8be 89C7     		movl	%eax, %edi
+ 13502 c8c0 E83B37FF 		call	bswap_32
+ 13502      FF
+ 13503 c8c5 4189C4   		movl	%eax, %r12d
+ 13504 c8c8 8B8584EF 		movl	-4220(%rbp), %eax
+ 13504      FFFF
+ 13505 c8ce 89C7     		movl	%eax, %edi
+ 13506 c8d0 E82B37FF 		call	bswap_32
+ 13506      FF
+ 13507 c8d5 89C3     		movl	%eax, %ebx
+ 13508 c8d7 8B8580EF 		movl	-4224(%rbp), %eax
+ 13508      FFFF
+ 13509 c8dd 89C7     		movl	%eax, %edi
+ 13510 c8df E81C37FF 		call	bswap_32
+ 13510      FF
+ 13511 c8e4 4589E9   		movl	%r13d, %r9d
+ 13512 c8e7 4589E0   		movl	%r12d, %r8d
+ 13513 c8ea 89D9     		movl	%ebx, %ecx
+ 13514 c8ec 89C2     		movl	%eax, %edx
+ 13515 c8ee 488D3500 		leaq	.LC0(%rip), %rsi
+ 13515      000000
+ 13516 c8f5 488D3D00 		leaq	.LC1(%rip), %rdi
+ 13516      000000
+ 13517 c8fc B8000000 		movl	$0, %eax
+ 13517      00
+ 13518 c901 E8000000 		call	KDbgMsg at PLT
+ 13518      00
+ 13519              	.L311:
+ 13520 c906 660F6F85 		movdqa	-6320(%rbp), %xmm0
+ 13520      50E7FFFF 
+ 13521 c90e F30F7F85 		movdqu	%xmm0, -160(%rbp)
+ 13521      60FFFFFF 
+ 13522              	.LBE1522:
+ 13523              	.LBB1523:
+ 13524              	.LBB1524:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 13525              		.loc 2 667 0
+ 13526 c916 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 13526      00000000 
+ 13527 c91e F30F6F8D 		movdqu	-160(%rbp), %xmm1
+ 13527      60FFFFFF 
+ 13528 c926 F30F7F4D 		movdqu	%xmm1, -128(%rbp)
+ 13528      80
+ 13529 c92b F30F7F85 		movdqu	%xmm0, -144(%rbp)
+ 13529      70FFFFFF 
+ 13530              	.LBB1525:
+ 13531              	.LBB1526:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 13532              		.loc 2 380 0
+ 13533 c933 F30F6F45 		movdqu	-128(%rbp), %xmm0
+ 13533      80
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 429
+
+
+ 13534 c938 F30F7F85 		movdqu	%xmm0, -4080(%rbp)
+ 13534      10F0FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 13535              		.loc 2 381 0
+ 13536 c940 F30F6F85 		movdqu	-144(%rbp), %xmm0
+ 13536      70FFFFFF 
+ 13537 c948 F30F7F85 		movdqu	%xmm0, -4096(%rbp)
+ 13537      00F0FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 13538              		.loc 2 383 0
+ 13539 c950 C7459C00 		movl	$0, -100(%rbp)
+ 13539      000000
+ 13540 c957 EB4D     		jmp	.L312
+ 13541              	.L315:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 13542              		.loc 2 385 0
+ 13543 c959 8B459C   		movl	-100(%rbp), %eax
+ 13544 c95c 89C0     		mov	%eax, %eax
+ 13545 c95e 0FB68405 		movzbl	-4096(%rbp,%rax), %eax
+ 13545      00F0FFFF 
+ 13546 c966 84C0     		testb	%al, %al
+ 13547 c968 790F     		jns	.L313
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 13548              		.loc 2 386 0
+ 13549 c96a 8B459C   		movl	-100(%rbp), %eax
+ 13550 c96d 89C0     		mov	%eax, %eax
+ 13551 c96f C6840520 		movb	$0, -4064(%rbp,%rax)
+ 13551      F0FFFF00 
+ 13552 c977 EB29     		jmp	.L314
+ 13553              	.L313:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 13554              		.loc 2 388 0
+ 13555 c979 8B4D9C   		movl	-100(%rbp), %ecx
+ 13556 c97c 8B459C   		movl	-100(%rbp), %eax
+ 13557 c97f 89C0     		mov	%eax, %eax
+ 13558 c981 0FB68405 		movzbl	-4096(%rbp,%rax), %eax
+ 13558      00F0FFFF 
+ 13559 c989 0FB6C0   		movzbl	%al, %eax
+ 13560 c98c 83E00F   		andl	$15, %eax
+ 13561 c98f 4898     		cltq
+ 13562 c991 0FB69405 		movzbl	-4080(%rbp,%rax), %edx
+ 13562      10F0FFFF 
+ 13563 c999 89C8     		mov	%ecx, %eax
+ 13564 c99b 88940520 		movb	%dl, -4064(%rbp,%rax)
+ 13564      F0FFFF
+ 13565              	.L314:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 13566              		.loc 2 383 0
+ 13567 c9a2 83459C01 		addl	$1, -100(%rbp)
+ 13568              	.L312:
+ 13569 c9a6 837D9C0F 		cmpl	$15, -100(%rbp)
+ 13570 c9aa 76AD     		jbe	.L315
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 13571              		.loc 2 391 0
+ 13572 c9ac F30F6F85 		movdqu	-4064(%rbp), %xmm0
+ 13572      20F0FFFF 
+ 13573              	.LBE1526:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 430
+
+
+ 13574              	.LBE1525:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 13575              		.loc 2 667 0
+ 13576 c9b4 F30F7F85 		movdqu	%xmm0, -160(%rbp)
+ 13576      60FFFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 13577              		.loc 2 668 0
+ 13578 c9bc F30F6F85 		movdqu	-160(%rbp), %xmm0
+ 13578      60FFFFFF 
+ 13579              	.LBE1524:
+ 13580              	.LBE1523:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 13581              		.loc 2 1684 0
+ 13582 c9c4 660F7F85 		movdqa	%xmm0, -6320(%rbp)
+ 13582      50E7FFFF 
+ 13583              	.LBB1527:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 13584              		.loc 2 1685 0
+ 13585 c9cc 660F6F85 		movdqa	-6320(%rbp), %xmm0
+ 13585      50E7FFFF 
+ 13586 c9d4 F30F7F85 		movdqu	%xmm0, -4240(%rbp)
+ 13586      70EFFFFF 
+ 13587 c9dc E8000000 		call	KDbgWriterGet at PLT
+ 13587      00
+ 13588 c9e1 4885C0   		testq	%rax, %rax
+ 13589 c9e4 7479     		je	.L317
+ 13590 c9e6 BF010000 		movl	$1, %edi
+ 13590      00
+ 13591 c9eb E8000000 		call	KDbgCondToFlag at PLT
+ 13591      00
+ 13592 c9f0 4889C6   		movq	%rax, %rsi
+ 13593 c9f3 BF100000 		movl	$16, %edi
+ 13593      00
+ 13594 c9f8 E8000000 		call	KDbgTestModConds at PLT
+ 13594      00
+ 13595 c9fd 84C0     		testb	%al, %al
+ 13596 c9ff 745E     		je	.L317
+ 13597 ca01 8B857CEF 		movl	-4228(%rbp), %eax
+ 13597      FFFF
+ 13598 ca07 89C7     		movl	%eax, %edi
+ 13599 ca09 E8F235FF 		call	bswap_32
+ 13599      FF
+ 13600 ca0e 4189C5   		movl	%eax, %r13d
+ 13601 ca11 8B8578EF 		movl	-4232(%rbp), %eax
+ 13601      FFFF
+ 13602 ca17 89C7     		movl	%eax, %edi
+ 13603 ca19 E8E235FF 		call	bswap_32
+ 13603      FF
+ 13604 ca1e 4189C4   		movl	%eax, %r12d
+ 13605 ca21 8B8574EF 		movl	-4236(%rbp), %eax
+ 13605      FFFF
+ 13606 ca27 89C7     		movl	%eax, %edi
+ 13607 ca29 E8D235FF 		call	bswap_32
+ 13607      FF
+ 13608 ca2e 89C3     		movl	%eax, %ebx
+ 13609 ca30 8B8570EF 		movl	-4240(%rbp), %eax
+ 13609      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 431
+
+
+ 13610 ca36 89C7     		movl	%eax, %edi
+ 13611 ca38 E8C335FF 		call	bswap_32
+ 13611      FF
+ 13612 ca3d 4589E9   		movl	%r13d, %r9d
+ 13613 ca40 4589E0   		movl	%r12d, %r8d
+ 13614 ca43 89D9     		movl	%ebx, %ecx
+ 13615 ca45 89C2     		movl	%eax, %edx
+ 13616 ca47 488D3500 		leaq	.LC2(%rip), %rsi
+ 13616      000000
+ 13617 ca4e 488D3D00 		leaq	.LC1(%rip), %rdi
+ 13617      000000
+ 13618 ca55 B8000000 		movl	$0, %eax
+ 13618      00
+ 13619 ca5a E8000000 		call	KDbgMsg at PLT
+ 13619      00
+ 13620              	.L317:
+ 13621 ca5f 660F6F85 		movdqa	-6320(%rbp), %xmm0
+ 13621      50E7FFFF 
+ 13622 ca67 F30F7F45 		movdqu	%xmm0, -80(%rbp)
+ 13622      B0
+ 13623 ca6c 660F6F85 		movdqa	-6304(%rbp), %xmm0
+ 13623      60E7FFFF 
+ 13624 ca74 F30F7F45 		movdqu	%xmm0, -96(%rbp)
+ 13624      A0
+ 13625              	.LBE1527:
+ 13626              	.LBB1528:
+ 13627              	.LBB1529:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 13628              		.loc 2 178 0
+ 13629 ca79 F30F6F45 		movdqu	-96(%rbp), %xmm0
+ 13629      A0
+ 13630 ca7e F30F6F4D 		movdqu	-80(%rbp), %xmm1
+ 13630      B0
+ 13631 ca83 660FEFC1 		pxor	%xmm1, %xmm0
+ 13632              	.LBE1529:
+ 13633              	.LBE1528:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 13634              		.loc 2 1686 0
+ 13635 ca87 660F7F85 		movdqa	%xmm0, -6320(%rbp)
+ 13635      50E7FFFF 
+ 13636              	.LBB1530:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 13637              		.loc 2 1687 0
+ 13638 ca8f 660F6F85 		movdqa	-6320(%rbp), %xmm0
+ 13638      50E7FFFF 
+ 13639 ca97 F30F7F85 		movdqu	%xmm0, -4256(%rbp)
+ 13639      60EFFFFF 
+ 13640 ca9f E8000000 		call	KDbgWriterGet at PLT
+ 13640      00
+ 13641 caa4 4885C0   		testq	%rax, %rax
+ 13642 caa7 7479     		je	.L319
+ 13643 caa9 BF010000 		movl	$1, %edi
+ 13643      00
+ 13644 caae E8000000 		call	KDbgCondToFlag at PLT
+ 13644      00
+ 13645 cab3 4889C6   		movq	%rax, %rsi
+ 13646 cab6 BF100000 		movl	$16, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 432
+
+
+ 13646      00
+ 13647 cabb E8000000 		call	KDbgTestModConds at PLT
+ 13647      00
+ 13648 cac0 84C0     		testb	%al, %al
+ 13649 cac2 745E     		je	.L319
+ 13650 cac4 8B856CEF 		movl	-4244(%rbp), %eax
+ 13650      FFFF
+ 13651 caca 89C7     		movl	%eax, %edi
+ 13652 cacc E82F35FF 		call	bswap_32
+ 13652      FF
+ 13653 cad1 4189C5   		movl	%eax, %r13d
+ 13654 cad4 8B8568EF 		movl	-4248(%rbp), %eax
+ 13654      FFFF
+ 13655 cada 89C7     		movl	%eax, %edi
+ 13656 cadc E81F35FF 		call	bswap_32
+ 13656      FF
+ 13657 cae1 4189C4   		movl	%eax, %r12d
+ 13658 cae4 8B8564EF 		movl	-4252(%rbp), %eax
+ 13658      FFFF
+ 13659 caea 89C7     		movl	%eax, %edi
+ 13660 caec E80F35FF 		call	bswap_32
+ 13660      FF
+ 13661 caf1 89C3     		movl	%eax, %ebx
+ 13662 caf3 8B8560EF 		movl	-4256(%rbp), %eax
+ 13662      FFFF
+ 13663 caf9 89C7     		movl	%eax, %edi
+ 13664 cafb E80035FF 		call	bswap_32
+ 13664      FF
+ 13665 cb00 4589E9   		movl	%r13d, %r9d
+ 13666 cb03 4589E0   		movl	%r12d, %r8d
+ 13667 cb06 89D9     		movl	%ebx, %ecx
+ 13668 cb08 89C2     		movl	%eax, %edx
+ 13669 cb0a 488D3500 		leaq	.LC3(%rip), %rsi
+ 13669      000000
+ 13670 cb11 488D3D00 		leaq	.LC1(%rip), %rdi
+ 13670      000000
+ 13671 cb18 B8000000 		movl	$0, %eax
+ 13671      00
+ 13672 cb1d E8000000 		call	KDbgMsg at PLT
+ 13672      00
+ 13673              	.L319:
+ 13674 cb22 660F6F85 		movdqa	-6320(%rbp), %xmm0
+ 13674      50E7FFFF 
+ 13675 cb2a F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 13675      C0
+ 13676              	.LBE1530:
+ 13677              	.LBB1531:
+ 13678              	.LBB1532:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 13679              		.loc 2 1357 0
+ 13680 cb2f F30F6F45 		movdqu	-64(%rbp), %xmm0
+ 13680      C0
+ 13681 cb34 F30F7F85 		movdqu	%xmm0, -4048(%rbp)
+ 13681      30F0FFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 13682              		.loc 2 1358 0
+ 13683 cb3c 8B853CF0 		movl	-4036(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 433
+
+
+ 13683      FFFF
+ 13684 cb42 898538F0 		movl	%eax, -4040(%rbp)
+ 13684      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 13685              		.loc 2 1359 0
+ 13686 cb48 8B853CF0 		movl	-4036(%rbp), %eax
+ 13686      FFFF
+ 13687 cb4e 898534F0 		movl	%eax, -4044(%rbp)
+ 13687      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 13688              		.loc 2 1360 0
+ 13689 cb54 8B853CF0 		movl	-4036(%rbp), %eax
+ 13689      FFFF
+ 13690 cb5a 898530F0 		movl	%eax, -4048(%rbp)
+ 13690      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 13691              		.loc 2 1361 0
+ 13692 cb60 F30F6F85 		movdqu	-4048(%rbp), %xmm0
+ 13692      30F0FFFF 
+ 13693              	.LBE1532:
+ 13694              	.LBE1531:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 13695              		.loc 2 1688 0
+ 13696 cb68 660F7F85 		movdqa	%xmm0, -6320(%rbp)
+ 13696      50E7FFFF 
+ 13697              	.LBB1533:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 13698              		.loc 2 1689 0
+ 13699 cb70 660F6F85 		movdqa	-6320(%rbp), %xmm0
+ 13699      50E7FFFF 
+ 13700 cb78 F30F7F85 		movdqu	%xmm0, -4272(%rbp)
+ 13700      50EFFFFF 
+ 13701 cb80 E8000000 		call	KDbgWriterGet at PLT
+ 13701      00
+ 13702 cb85 4885C0   		testq	%rax, %rax
+ 13703 cb88 7479     		je	.L321
+ 13704 cb8a BF010000 		movl	$1, %edi
+ 13704      00
+ 13705 cb8f E8000000 		call	KDbgCondToFlag at PLT
+ 13705      00
+ 13706 cb94 4889C6   		movq	%rax, %rsi
+ 13707 cb97 BF100000 		movl	$16, %edi
+ 13707      00
+ 13708 cb9c E8000000 		call	KDbgTestModConds at PLT
+ 13708      00
+ 13709 cba1 84C0     		testb	%al, %al
+ 13710 cba3 745E     		je	.L321
+ 13711 cba5 8B855CEF 		movl	-4260(%rbp), %eax
+ 13711      FFFF
+ 13712 cbab 89C7     		movl	%eax, %edi
+ 13713 cbad E84E34FF 		call	bswap_32
+ 13713      FF
+ 13714 cbb2 4189C5   		movl	%eax, %r13d
+ 13715 cbb5 8B8558EF 		movl	-4264(%rbp), %eax
+ 13715      FFFF
+ 13716 cbbb 89C7     		movl	%eax, %edi
+ 13717 cbbd E83E34FF 		call	bswap_32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 434
+
+
+ 13717      FF
+ 13718 cbc2 4189C4   		movl	%eax, %r12d
+ 13719 cbc5 8B8554EF 		movl	-4268(%rbp), %eax
+ 13719      FFFF
+ 13720 cbcb 89C7     		movl	%eax, %edi
+ 13721 cbcd E82E34FF 		call	bswap_32
+ 13721      FF
+ 13722 cbd2 89C3     		movl	%eax, %ebx
+ 13723 cbd4 8B8550EF 		movl	-4272(%rbp), %eax
+ 13723      FFFF
+ 13724 cbda 89C7     		movl	%eax, %edi
+ 13725 cbdc E81F34FF 		call	bswap_32
+ 13725      FF
+ 13726 cbe1 4589E9   		movl	%r13d, %r9d
+ 13727 cbe4 4589E0   		movl	%r12d, %r8d
+ 13728 cbe7 89D9     		movl	%ebx, %ecx
+ 13729 cbe9 89C2     		movl	%eax, %edx
+ 13730 cbeb 488D3500 		leaq	.LC4(%rip), %rsi
+ 13730      000000
+ 13731 cbf2 488D3D00 		leaq	.LC1(%rip), %rdi
+ 13731      000000
+ 13732 cbf9 B8000000 		movl	$0, %eax
+ 13732      00
+ 13733 cbfe E8000000 		call	KDbgMsg at PLT
+ 13733      00
+ 13734              	.L321:
+ 13735              	.LBE1533:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 13736              		.loc 2 1690 0
+ 13737 cc03 660F6F85 		movdqa	-6320(%rbp), %xmm0
+ 13737      50E7FFFF 
+ 13738              	.LBE1499:
+ 13739              	.LBE1498:
+1883:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 13740              		.loc 2 1883 0
+ 13741 cc0b 660F7F85 		movdqa	%xmm0, -6720(%rbp)
+ 13741      C0E5FFFF 
+1885:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0 ^= k;                                       /* k48   : k49   : k50    : k51          */
+ 13742              		.loc 2 1885 0
+ 13743 cc13 660F6F85 		movdqa	-6800(%rbp), %xmm0
+ 13743      70E5FFFF 
+ 13744 cc1b 660FEF85 		pxor	-6720(%rbp), %xmm0
+ 13744      C0E5FFFF 
+ 13745 cc23 660F7F85 		movdqa	%xmm0, -6800(%rbp)
+ 13745      70E5FFFF 
+1886:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[12] = v0;                           /* K48:K49:K50:K51 */
+ 13746              		.loc 2 1886 0
+ 13747 cc2b 488B8588 		movq	-6264(%rbp), %rax
+ 13747      E7FFFF
+ 13748 cc32 4805C000 		addq	$192, %rax
+ 13748      0000
+ 13749 cc38 660F6F85 		movdqa	-6800(%rbp), %xmm0
+ 13749      70E5FFFF 
+ 13750 cc40 660F7F00 		movdqa	%xmm0, (%rax)
+1887:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 13751              		.loc 2 1887 0
+ 13752 cc44 4881C4B8 		addq	$6840, %rsp
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 435
+
+
+ 13752      1A0000
+ 13753 cc4b 5B       		popq	%rbx
+ 13754 cc4c 415C     		popq	%r12
+ 13755 cc4e 415D     		popq	%r13
+ 13756 cc50 415E     		popq	%r14
+ 13757 cc52 415F     		popq	%r15
+ 13758 cc54 C9       		leave
+ 13759 cc55 C3       		ret
+ 13760              		.cfi_endproc
+ 13761              	.LFE564:
+ 13762              		.size	KAESBlockCipherVecKeyExpansion192, .-KAESBlockCipherVecKeyExpansion192
+ 13763              		.type	KAESBlockCipherVecKeyExpansion256, @function
+ 13764              	KAESBlockCipherVecKeyExpansion256:
+ 13765              	.LFB565:
+1904:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 13766              		.loc 2 1904 0
+ 13767              		.cfi_startproc
+ 13768 cc56 55       		pushq	%rbp
+ 13769              	.LCFI6:
+ 13770              		.cfi_def_cfa_offset 16
+ 13771 cc57 4889E5   		movq	%rsp, %rbp
+ 13772              		.cfi_offset 6, -16
+ 13773              	.LCFI7:
+ 13774              		.cfi_def_cfa_register 6
+ 13775 cc5a 4157     		pushq	%r15
+ 13776 cc5c 4156     		pushq	%r14
+ 13777 cc5e 4155     		pushq	%r13
+ 13778 cc60 4154     		pushq	%r12
+ 13779 cc62 53       		pushq	%rbx
+ 13780 cc63 4881ECA8 		subq	$8872, %rsp
+ 13780      220000
+ 13781 cc6a 4889BDD8 		movq	%rdi, -8232(%rbp)
+ 13781      DFFFFF
+ 13782 cc71 4889B5D0 		movq	%rsi, -8240(%rbp)
+ 13782      DFFFFF
+1904:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 13783              		.loc 2 1904 0
+ 13784 cc78 488B85D0 		movq	-8240(%rbp), %rax
+ 13784      DFFFFF
+ 13785 cc7f 488985F8 		movq	%rax, -5640(%rbp)
+ 13785      E9FFFF
+ 13786              	.LBB1944:
+ 13787              	.LBB1945:
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     memmove (&u.bytes, ain, sizeof (u));
+ 13788              		.loc 2 134 0
+ 13789 cc86 488B8DF8 		movq	-5640(%rbp), %rcx
+ 13789      E9FFFF
+ 13790 cc8d 488D85E0 		leaq	-8224(%rbp), %rax
+ 13790      DFFFFF
+ 13791 cc94 BA100000 		movl	$16, %edx
+ 13791      00
+ 13792 cc99 4889CE   		movq	%rcx, %rsi
+ 13793 cc9c 4889C7   		movq	%rax, %rdi
+ 13794              		.cfi_offset 3, -56
+ 13795              		.cfi_offset 12, -48
+ 13796              		.cfi_offset 13, -40
+ 13797              		.cfi_offset 14, -32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 436
+
+
+ 13798              		.cfi_offset 15, -24
+ 13799 cc9f E8000000 		call	memmove at PLT
+ 13799      00
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 13800              		.loc 2 135 0
+ 13801 cca4 F30F6F85 		movdqu	-8224(%rbp), %xmm0
+ 13801      E0DFFFFF 
+ 13802              	.LBE1945:
+ 13803              	.LBE1944:
+1908:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0 = AESBCMEMBER (StateIn) (key);
+ 13804              		.loc 2 1908 0
+ 13805 ccac F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 13805      C0E9FFFF 
+1909:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1 = AESBCMEMBER (StateIn) (key + sizeof v0);
+ 13806              		.loc 2 1909 0
+ 13807 ccb4 488B85D0 		movq	-8240(%rbp), %rax
+ 13807      DFFFFF
+ 13808 ccbb 4883C010 		addq	$16, %rax
+ 13809 ccbf 48898500 		movq	%rax, -5632(%rbp)
+ 13809      EAFFFF
+ 13810              	.LBB1946:
+ 13811              	.LBB1947:
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     memmove (&u.bytes, ain, sizeof (u));
+ 13812              		.loc 2 134 0
+ 13813 ccc6 488B8D00 		movq	-5632(%rbp), %rcx
+ 13813      EAFFFF
+ 13814 cccd 488D85F0 		leaq	-8208(%rbp), %rax
+ 13814      DFFFFF
+ 13815 ccd4 BA100000 		movl	$16, %edx
+ 13815      00
+ 13816 ccd9 4889CE   		movq	%rcx, %rsi
+ 13817 ccdc 4889C7   		movq	%rax, %rdi
+ 13818 ccdf E8000000 		call	memmove at PLT
+ 13818      00
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 13819              		.loc 2 135 0
+ 13820 cce4 F30F6F85 		movdqu	-8208(%rbp), %xmm0
+ 13820      F0DFFFFF 
+ 13821              	.LBE1947:
+ 13822              	.LBE1946:
+1909:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1 = AESBCMEMBER (StateIn) (key + sizeof v0);
+ 13823              		.loc 2 1909 0
+ 13824 ccec F30F7F85 		movdqu	%xmm0, -5680(%rbp)
+ 13824      D0E9FFFF 
+1911:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[0] = v0; /* k0  : k1  : k2  : k3  */
+ 13825              		.loc 2 1911 0
+ 13826 ccf4 488B85D8 		movq	-8232(%rbp), %rax
+ 13826      DFFFFF
+ 13827 ccfb F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 13827      C0E9FFFF 
+ 13828 cd03 F30F7F00 		movdqu	%xmm0, (%rax)
+1912:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[1] = v1; /* k4  : k5  : k6  : k7  */
+ 13829              		.loc 2 1912 0
+ 13830 cd07 488B85D8 		movq	-8232(%rbp), %rax
+ 13830      DFFFFF
+ 13831 cd0e 4883C010 		addq	$16, %rax
+ 13832 cd12 F30F6F85 		movdqu	-5680(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 437
+
+
+ 13832      D0E9FFFF 
+ 13833 cd1a F30F7F00 		movdqu	%xmm0, (%rax)
+ 13834 cd1e F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 13834      D0E9FFFF 
+ 13835 cd26 F30F7F85 		movdqu	%xmm0, -5616(%rbp)
+ 13835      10EAFFFF 
+ 13836              	.LBB1948:
+ 13837              	.LBB1949:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 13838              		.loc 2 1681 0
+ 13839 cd2e B8010000 		movl	$1, %eax
+ 13839      00
+ 13840 cd33 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 13840      00000000 
+ 13841 cd3b F30F7F85 		movdqu	%xmm0, -5584(%rbp)
+ 13841      30EAFFFF 
+ 13842 cd43 89852CEA 		movl	%eax, -5588(%rbp)
+ 13842      FFFF
+ 13843              	.LBB1950:
+ 13844              	.LBB1951:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 13845              		.loc 2 522 0
+ 13846 cd49 F30F6F85 		movdqu	-5584(%rbp), %xmm0
+ 13846      30EAFFFF 
+ 13847 cd51 F30F7F85 		movdqu	%xmm0, -8128(%rbp)
+ 13847      40E0FFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 13848              		.loc 2 523 0
+ 13849 cd59 B8030000 		movl	$3, %eax
+ 13849      00
+ 13850 cd5e 4898     		cltq
+ 13851 cd60 8B952CEA 		movl	-5588(%rbp), %edx
+ 13851      FFFF
+ 13852 cd66 89948540 		movl	%edx, -8128(%rbp,%rax,4)
+ 13852      E0FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 13853              		.loc 2 524 0
+ 13854 cd6d F30F6F85 		movdqu	-8128(%rbp), %xmm0
+ 13854      40E0FFFF 
+ 13855 cd75 F30F7F85 		movdqu	%xmm0, -5584(%rbp)
+ 13855      30EAFFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 13856              		.loc 2 526 0
+ 13857 cd7d F30F6F85 		movdqu	-5584(%rbp), %xmm0
+ 13857      30EAFFFF 
+ 13858              	.LBE1951:
+ 13859              	.LBE1950:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 13860              		.loc 2 1681 0
+ 13861 cd85 660F7F85 		movdqa	%xmm0, -8768(%rbp)
+ 13861      C0DDFFFF 
+ 13862 cd8d F30F6F85 		movdqu	-5616(%rbp), %xmm0
+ 13862      10EAFFFF 
+ 13863 cd95 F30F7F85 		movdqu	%xmm0, -5568(%rbp)
+ 13863      40EAFFFF 
+ 13864 cd9d F30F6F85 		movdqu	-5568(%rbp), %xmm0
+ 13864      40EAFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 438
+
+
+ 13865 cda5 F30F7F85 		movdqu	%xmm0, -5536(%rbp)
+ 13865      60EAFFFF 
+ 13866 cdad 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 13866      000000
+ 13867 cdb4 48898558 		movq	%rax, -5544(%rbp)
+ 13867      EAFFFF
+ 13868              	.LBB1952:
+ 13869              	.LBB1953:
+ 13870              	.LBB1954:
+ 13871              	.LBB1955:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 13872              		.loc 2 851 0
+ 13873 cdbb 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 13873      00000000 
+ 13874 cdc3 F30F7F85 		movdqu	%xmm0, -5504(%rbp)
+ 13874      80EAFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 13875              		.loc 2 854 0
+ 13876 cdcb 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 13876      00000000 
+ 13877 cdd3 F30F6F8D 		movdqu	-5536(%rbp), %xmm1
+ 13877      60EAFFFF 
+ 13878 cddb F30F7F8D 		movdqu	%xmm1, -5424(%rbp)
+ 13878      D0EAFFFF 
+ 13879 cde3 F30F7F85 		movdqu	%xmm0, -5440(%rbp)
+ 13879      C0EAFFFF 
+ 13880              	.LBB1956:
+ 13881              	.LBB1957:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 13882              		.loc 2 206 0
+ 13883 cdeb F30F6F85 		movdqu	-5440(%rbp), %xmm0
+ 13883      C0EAFFFF 
+ 13884 cdf3 F30F6F8D 		movdqu	-5424(%rbp), %xmm1
+ 13884      D0EAFFFF 
+ 13885 cdfb 660FDBC1 		pand	%xmm1, %xmm0
+ 13886              	.LBE1957:
+ 13887              	.LBE1956:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 13888              		.loc 2 854 0
+ 13889 cdff F30F7F85 		movdqu	%xmm0, -5456(%rbp)
+ 13889      B0EAFFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 13890              		.loc 2 862 0
+ 13891 ce07 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 13891      00000000 
+ 13892 ce0f F30F6F8D 		movdqu	-5536(%rbp), %xmm1
+ 13892      60EAFFFF 
+ 13893 ce17 F30F7F8D 		movdqu	%xmm1, -5392(%rbp)
+ 13893      F0EAFFFF 
+ 13894 ce1f F30F7F85 		movdqu	%xmm0, -5408(%rbp)
+ 13894      E0EAFFFF 
+ 13895              	.LBB1958:
+ 13896              		.loc 2 2642 0
+ 13897 ce27 0FB685F0 		movzbl	-5392(%rbp), %eax
+ 13897      EAFFFF
+ 13898 ce2e 0FB695E0 		movzbl	-5408(%rbp), %edx
+ 13898      EAFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 439
+
+
+ 13899 ce35 0FB6C0   		movzbl	%al, %eax
+ 13900 ce38 6689853E 		movw	%ax, -8898(%rbp)
+ 13900      DDFFFF
+ 13901 ce3f 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 13901      DDFFFF
+ 13902 ce46 F6F2     		divb	%dl
+ 13903 ce48 4189C7   		movl	%eax, %r15d
+ 13904 ce4b 0FB685F1 		movzbl	-5391(%rbp), %eax
+ 13904      EAFFFF
+ 13905 ce52 0FB695E1 		movzbl	-5407(%rbp), %edx
+ 13905      EAFFFF
+ 13906 ce59 0FB6C0   		movzbl	%al, %eax
+ 13907 ce5c 6689853E 		movw	%ax, -8898(%rbp)
+ 13907      DDFFFF
+ 13908 ce63 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 13908      DDFFFF
+ 13909 ce6a F6F2     		divb	%dl
+ 13910 ce6c 8885DFDD 		movb	%al, -8737(%rbp)
+ 13910      FFFF
+ 13911 ce72 0FB685F2 		movzbl	-5390(%rbp), %eax
+ 13911      EAFFFF
+ 13912 ce79 0FB695E2 		movzbl	-5406(%rbp), %edx
+ 13912      EAFFFF
+ 13913 ce80 0FB6C0   		movzbl	%al, %eax
+ 13914 ce83 6689853E 		movw	%ax, -8898(%rbp)
+ 13914      DDFFFF
+ 13915 ce8a 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 13915      DDFFFF
+ 13916 ce91 F6F2     		divb	%dl
+ 13917 ce93 8885DEDD 		movb	%al, -8738(%rbp)
+ 13917      FFFF
+ 13918 ce99 0FB685F3 		movzbl	-5389(%rbp), %eax
+ 13918      EAFFFF
+ 13919 cea0 0FB695E3 		movzbl	-5405(%rbp), %edx
+ 13919      EAFFFF
+ 13920 cea7 0FB6C0   		movzbl	%al, %eax
+ 13921 ceaa 6689853E 		movw	%ax, -8898(%rbp)
+ 13921      DDFFFF
+ 13922 ceb1 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 13922      DDFFFF
+ 13923 ceb8 F6F2     		divb	%dl
+ 13924 ceba 8885DDDD 		movb	%al, -8739(%rbp)
+ 13924      FFFF
+ 13925 cec0 0FB685F4 		movzbl	-5388(%rbp), %eax
+ 13925      EAFFFF
+ 13926 cec7 0FB695E4 		movzbl	-5404(%rbp), %edx
+ 13926      EAFFFF
+ 13927 cece 0FB6C0   		movzbl	%al, %eax
+ 13928 ced1 6689853E 		movw	%ax, -8898(%rbp)
+ 13928      DDFFFF
+ 13929 ced8 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 13929      DDFFFF
+ 13930 cedf F6F2     		divb	%dl
+ 13931 cee1 8885DCDD 		movb	%al, -8740(%rbp)
+ 13931      FFFF
+ 13932 cee7 0FB685F5 		movzbl	-5387(%rbp), %eax
+ 13932      EAFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 440
+
+
+ 13933 ceee 0FB695E5 		movzbl	-5403(%rbp), %edx
+ 13933      EAFFFF
+ 13934 cef5 0FB6C0   		movzbl	%al, %eax
+ 13935 cef8 6689853E 		movw	%ax, -8898(%rbp)
+ 13935      DDFFFF
+ 13936 ceff 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 13936      DDFFFF
+ 13937 cf06 F6F2     		divb	%dl
+ 13938 cf08 4189C1   		movl	%eax, %r9d
+ 13939 cf0b 0FB685F6 		movzbl	-5386(%rbp), %eax
+ 13939      EAFFFF
+ 13940 cf12 0FB695E6 		movzbl	-5402(%rbp), %edx
+ 13940      EAFFFF
+ 13941 cf19 0FB6C0   		movzbl	%al, %eax
+ 13942 cf1c 6689853E 		movw	%ax, -8898(%rbp)
+ 13942      DDFFFF
+ 13943 cf23 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 13943      DDFFFF
+ 13944 cf2a F6F2     		divb	%dl
+ 13945 cf2c 89C7     		movl	%eax, %edi
+ 13946 cf2e 0FB685F7 		movzbl	-5385(%rbp), %eax
+ 13946      EAFFFF
+ 13947 cf35 0FB695E7 		movzbl	-5401(%rbp), %edx
+ 13947      EAFFFF
+ 13948 cf3c 0FB6C0   		movzbl	%al, %eax
+ 13949 cf3f 6689853E 		movw	%ax, -8898(%rbp)
+ 13949      DDFFFF
+ 13950 cf46 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 13950      DDFFFF
+ 13951 cf4d F6F2     		divb	%dl
+ 13952 cf4f 89C3     		movl	%eax, %ebx
+ 13953 cf51 0FB685F8 		movzbl	-5384(%rbp), %eax
+ 13953      EAFFFF
+ 13954 cf58 0FB695E8 		movzbl	-5400(%rbp), %edx
+ 13954      EAFFFF
+ 13955 cf5f 0FB6C0   		movzbl	%al, %eax
+ 13956 cf62 6689853E 		movw	%ax, -8898(%rbp)
+ 13956      DDFFFF
+ 13957 cf69 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 13957      DDFFFF
+ 13958 cf70 F6F2     		divb	%dl
+ 13959 cf72 4189C2   		movl	%eax, %r10d
+ 13960 cf75 0FB685F9 		movzbl	-5383(%rbp), %eax
+ 13960      EAFFFF
+ 13961 cf7c 0FB695E9 		movzbl	-5399(%rbp), %edx
+ 13961      EAFFFF
+ 13962 cf83 0FB6C0   		movzbl	%al, %eax
+ 13963 cf86 6689853E 		movw	%ax, -8898(%rbp)
+ 13963      DDFFFF
+ 13964 cf8d 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 13964      DDFFFF
+ 13965 cf94 F6F2     		divb	%dl
+ 13966 cf96 4189C3   		movl	%eax, %r11d
+ 13967 cf99 0FB685FA 		movzbl	-5382(%rbp), %eax
+ 13967      EAFFFF
+ 13968 cfa0 0FB695EA 		movzbl	-5398(%rbp), %edx
+ 13968      EAFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 441
+
+
+ 13969 cfa7 0FB6C0   		movzbl	%al, %eax
+ 13970 cfaa 6689853E 		movw	%ax, -8898(%rbp)
+ 13970      DDFFFF
+ 13971 cfb1 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 13971      DDFFFF
+ 13972 cfb8 F6F2     		divb	%dl
+ 13973 cfba 4189C4   		movl	%eax, %r12d
+ 13974 cfbd 0FB685FB 		movzbl	-5381(%rbp), %eax
+ 13974      EAFFFF
+ 13975 cfc4 0FB695EB 		movzbl	-5397(%rbp), %edx
+ 13975      EAFFFF
+ 13976 cfcb 0FB6C0   		movzbl	%al, %eax
+ 13977 cfce 6689853E 		movw	%ax, -8898(%rbp)
+ 13977      DDFFFF
+ 13978 cfd5 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 13978      DDFFFF
+ 13979 cfdc F6F2     		divb	%dl
+ 13980 cfde 4189C5   		movl	%eax, %r13d
+ 13981 cfe1 0FB685FC 		movzbl	-5380(%rbp), %eax
+ 13981      EAFFFF
+ 13982 cfe8 0FB695EC 		movzbl	-5396(%rbp), %edx
+ 13982      EAFFFF
+ 13983 cfef 0FB6C0   		movzbl	%al, %eax
+ 13984 cff2 6689853E 		movw	%ax, -8898(%rbp)
+ 13984      DDFFFF
+ 13985 cff9 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 13985      DDFFFF
+ 13986 d000 F6F2     		divb	%dl
+ 13987 d002 4189C6   		movl	%eax, %r14d
+ 13988 d005 0FB685FD 		movzbl	-5379(%rbp), %eax
+ 13988      EAFFFF
+ 13989 d00c 0FB695ED 		movzbl	-5395(%rbp), %edx
+ 13989      EAFFFF
+ 13990 d013 0FB6C0   		movzbl	%al, %eax
+ 13991 d016 6689853E 		movw	%ax, -8898(%rbp)
+ 13991      DDFFFF
+ 13992 d01d 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 13992      DDFFFF
+ 13993 d024 F6F2     		divb	%dl
+ 13994 d026 4189C0   		movl	%eax, %r8d
+ 13995 d029 0FB685FE 		movzbl	-5378(%rbp), %eax
+ 13995      EAFFFF
+ 13996 d030 0FB695EE 		movzbl	-5394(%rbp), %edx
+ 13996      EAFFFF
+ 13997 d037 0FB6C0   		movzbl	%al, %eax
+ 13998 d03a 6689853E 		movw	%ax, -8898(%rbp)
+ 13998      DDFFFF
+ 13999 d041 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 13999      DDFFFF
+ 14000 d048 F6F2     		divb	%dl
+ 14001 d04a 89C6     		movl	%eax, %esi
+ 14002 d04c 0FB685FF 		movzbl	-5377(%rbp), %eax
+ 14002      EAFFFF
+ 14003 d053 0FB695EF 		movzbl	-5393(%rbp), %edx
+ 14003      EAFFFF
+ 14004 d05a 0FB6C0   		movzbl	%al, %eax
+ 14005 d05d 6689853E 		movw	%ax, -8898(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 442
+
+
+ 14005      DDFFFF
+ 14006 d064 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 14006      DDFFFF
+ 14007 d06b F6F2     		divb	%dl
+ 14008 d06d 89C1     		movl	%eax, %ecx
+ 14009              	.LBB1959:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 14010              		.loc 2 346 0
+ 14011 d06f 0FB6D3   		movzbl	%bl, %edx
+ 14012 d072 400FB6C7 		movzbl	%dil, %eax
+ 14013 d076 48C1E208 		salq	$8, %rdx
+ 14014 d07a 4809C2   		orq	%rax, %rdx
+ 14015 d07d 410FB6C1 		movzbl	%r9b, %eax
+ 14016 d081 48C1E208 		salq	$8, %rdx
+ 14017 d085 4809C2   		orq	%rax, %rdx
+ 14018 d088 0FB685DC 		movzbl	-8740(%rbp), %eax
+ 14018      DDFFFF
+ 14019 d08f 48C1E208 		salq	$8, %rdx
+ 14020 d093 4809C2   		orq	%rax, %rdx
+ 14021 d096 0FB685DD 		movzbl	-8739(%rbp), %eax
+ 14021      DDFFFF
+ 14022 d09d 48C1E208 		salq	$8, %rdx
+ 14023 d0a1 4809C2   		orq	%rax, %rdx
+ 14024 d0a4 0FB685DE 		movzbl	-8738(%rbp), %eax
+ 14024      DDFFFF
+ 14025 d0ab 48C1E208 		salq	$8, %rdx
+ 14026 d0af 4809C2   		orq	%rax, %rdx
+ 14027 d0b2 0FB685DF 		movzbl	-8737(%rbp), %eax
+ 14027      DDFFFF
+ 14028 d0b9 48C1E208 		salq	$8, %rdx
+ 14029 d0bd 4809C2   		orq	%rax, %rdx
+ 14030 d0c0 410FB6C7 		movzbl	%r15b, %eax
+ 14031 d0c4 48C1E208 		salq	$8, %rdx
+ 14032 d0c8 4809C2   		orq	%rax, %rdx
+ 14033 d0cb 0FB6C1   		movzbl	%cl, %eax
+ 14034 d0ce 400FB6CE 		movzbl	%sil, %ecx
+ 14035 d0d2 48C1E008 		salq	$8, %rax
+ 14036 d0d6 4809C8   		orq	%rcx, %rax
+ 14037 d0d9 410FB6C8 		movzbl	%r8b, %ecx
+ 14038 d0dd 48C1E008 		salq	$8, %rax
+ 14039 d0e1 4809C8   		orq	%rcx, %rax
+ 14040 d0e4 410FB6CE 		movzbl	%r14b, %ecx
+ 14041 d0e8 48C1E008 		salq	$8, %rax
+ 14042 d0ec 4809C8   		orq	%rcx, %rax
+ 14043 d0ef 410FB6CD 		movzbl	%r13b, %ecx
+ 14044 d0f3 48C1E008 		salq	$8, %rax
+ 14045 d0f7 4809C8   		orq	%rcx, %rax
+ 14046 d0fa 410FB6CC 		movzbl	%r12b, %ecx
+ 14047 d0fe 48C1E008 		salq	$8, %rax
+ 14048 d102 4809C8   		orq	%rcx, %rax
+ 14049 d105 410FB6CB 		movzbl	%r11b, %ecx
+ 14050 d109 48C1E008 		salq	$8, %rax
+ 14051 d10d 4809C8   		orq	%rcx, %rax
+ 14052 d110 410FB6CA 		movzbl	%r10b, %ecx
+ 14053 d114 48C1E008 		salq	$8, %rax
+ 14054 d118 4809C8   		orq	%rcx, %rax
+ 14055 d11b 488995A0 		movq	%rdx, -8800(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 443
+
+
+ 14055      DDFFFF
+ 14056 d122 488985A8 		movq	%rax, -8792(%rbp)
+ 14056      DDFFFF
+ 14057 d129 660F6F85 		movdqa	-8800(%rbp), %xmm0
+ 14057      A0DDFFFF 
+ 14058              	.LBE1959:
+ 14059              	.LBE1958:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 14060              		.loc 2 862 0
+ 14061 d131 F30F7F85 		movdqu	%xmm0, -5472(%rbp)
+ 14061      A0EAFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 14062              		.loc 2 866 0
+ 14063 d139 C7857CEA 		movl	$0, -5508(%rbp)
+ 14063      FFFF0000 
+ 14063      0000
+ 14064 d143 E9860200 		jmp	.L324
+ 14064      00
+ 14065              	.L333:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 14066              		.loc 2 868 0
+ 14067 d148 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 14067      00000000 
+ 14068 d150 F30F7F85 		movdqu	%xmm0, -5360(%rbp)
+ 14068      10EBFFFF 
+ 14069 d158 F30F6F85 		movdqu	-5472(%rbp), %xmm0
+ 14069      A0EAFFFF 
+ 14070 d160 F30F7F85 		movdqu	%xmm0, -5376(%rbp)
+ 14070      00EBFFFF 
+ 14071              	.LBB1960:
+ 14072              	.LBB1961:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 14073              		.loc 2 380 0
+ 14074 d168 F30F6F85 		movdqu	-5360(%rbp), %xmm0
+ 14074      10EBFFFF 
+ 14075 d170 F30F7F85 		movdqu	%xmm0, -8096(%rbp)
+ 14075      60E0FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 14076              		.loc 2 381 0
+ 14077 d178 F30F6F85 		movdqu	-5376(%rbp), %xmm0
+ 14077      00EBFFFF 
+ 14078 d180 F30F7F85 		movdqu	%xmm0, -8112(%rbp)
+ 14078      50E0FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 14079              		.loc 2 383 0
+ 14080 d188 C7852CEB 		movl	$0, -5332(%rbp)
+ 14080      FFFF0000 
+ 14080      0000
+ 14081 d192 EB5C     		jmp	.L325
+ 14082              	.L328:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 14083              		.loc 2 385 0
+ 14084 d194 8B852CEB 		movl	-5332(%rbp), %eax
+ 14084      FFFF
+ 14085 d19a 89C0     		mov	%eax, %eax
+ 14086 d19c 0FB68405 		movzbl	-8112(%rbp,%rax), %eax
+ 14086      50E0FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 444
+
+
+ 14087 d1a4 84C0     		testb	%al, %al
+ 14088 d1a6 7912     		jns	.L326
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 14089              		.loc 2 386 0
+ 14090 d1a8 8B852CEB 		movl	-5332(%rbp), %eax
+ 14090      FFFF
+ 14091 d1ae 89C0     		mov	%eax, %eax
+ 14092 d1b0 C6840570 		movb	$0, -8080(%rbp,%rax)
+ 14092      E0FFFF00 
+ 14093 d1b8 EB2F     		jmp	.L327
+ 14094              	.L326:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 14095              		.loc 2 388 0
+ 14096 d1ba 8B8D2CEB 		movl	-5332(%rbp), %ecx
+ 14096      FFFF
+ 14097 d1c0 8B852CEB 		movl	-5332(%rbp), %eax
+ 14097      FFFF
+ 14098 d1c6 89C0     		mov	%eax, %eax
+ 14099 d1c8 0FB68405 		movzbl	-8112(%rbp,%rax), %eax
+ 14099      50E0FFFF 
+ 14100 d1d0 0FB6C0   		movzbl	%al, %eax
+ 14101 d1d3 83E00F   		andl	$15, %eax
+ 14102 d1d6 4898     		cltq
+ 14103 d1d8 0FB69405 		movzbl	-8096(%rbp,%rax), %edx
+ 14103      60E0FFFF 
+ 14104 d1e0 89C8     		mov	%ecx, %eax
+ 14105 d1e2 88940570 		movb	%dl, -8080(%rbp,%rax)
+ 14105      E0FFFF
+ 14106              	.L327:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 14107              		.loc 2 383 0
+ 14108 d1e9 83852CEB 		addl	$1, -5332(%rbp)
+ 14108      FFFF01
+ 14109              	.L325:
+ 14110 d1f0 83BD2CEB 		cmpl	$15, -5332(%rbp)
+ 14110      FFFF0F
+ 14111 d1f7 769B     		jbe	.L328
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 14112              		.loc 2 391 0
+ 14113 d1f9 F30F6F85 		movdqu	-8080(%rbp), %xmm0
+ 14113      70E0FFFF 
+ 14114              	.LBE1961:
+ 14115              	.LBE1960:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 14116              		.loc 2 868 0
+ 14117 d201 F30F7F85 		movdqu	%xmm0, -5488(%rbp)
+ 14117      90EAFFFF 
+ 14118 d209 F30F6F85 		movdqu	-5456(%rbp), %xmm0
+ 14118      B0EAFFFF 
+ 14119 d211 F30F7F85 		movdqu	%xmm0, -5312(%rbp)
+ 14119      40EBFFFF 
+ 14120 d219 F30F6F85 		movdqu	-5488(%rbp), %xmm0
+ 14120      90EAFFFF 
+ 14121 d221 F30F7F85 		movdqu	%xmm0, -5328(%rbp)
+ 14121      30EBFFFF 
+ 14122              	.LBB1962:
+ 14123              	.LBB1963:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 445
+
+
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 14124              		.loc 2 234 0
+ 14125 d229 F30F6F85 		movdqu	-5328(%rbp), %xmm0
+ 14125      30EBFFFF 
+ 14126 d231 F30F6F8D 		movdqu	-5312(%rbp), %xmm1
+ 14126      40EBFFFF 
+ 14127 d239 660FEBC1 		por	%xmm1, %xmm0
+ 14128              	.LBE1963:
+ 14129              	.LBE1962:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 14130              		.loc 2 870 0
+ 14131 d23d F30F7F85 		movdqu	%xmm0, -5488(%rbp)
+ 14131      90EAFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 14132              		.loc 2 872 0
+ 14133 d245 8B857CEA 		mov	-5508(%rbp), %eax
+ 14133      FFFF
+ 14134 d24b 48C1E004 		salq	$4, %rax
+ 14135 d24f 48038558 		addq	-5544(%rbp), %rax
+ 14135      EAFFFF
+ 14136 d256 660F6F00 		movdqa	(%rax), %xmm0
+ 14137 d25a F30F7F85 		movdqu	%xmm0, -5280(%rbp)
+ 14137      60EBFFFF 
+ 14138 d262 F30F6F85 		movdqu	-5488(%rbp), %xmm0
+ 14138      90EAFFFF 
+ 14139 d26a F30F7F85 		movdqu	%xmm0, -5296(%rbp)
+ 14139      50EBFFFF 
+ 14140              	.LBB1964:
+ 14141              	.LBB1965:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 14142              		.loc 2 380 0
+ 14143 d272 F30F6F85 		movdqu	-5280(%rbp), %xmm0
+ 14143      60EBFFFF 
+ 14144 d27a F30F7F85 		movdqu	%xmm0, -8048(%rbp)
+ 14144      90E0FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 14145              		.loc 2 381 0
+ 14146 d282 F30F6F85 		movdqu	-5296(%rbp), %xmm0
+ 14146      50EBFFFF 
+ 14147 d28a F30F7F85 		movdqu	%xmm0, -8064(%rbp)
+ 14147      80E0FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 14148              		.loc 2 383 0
+ 14149 d292 C7857CEB 		movl	$0, -5252(%rbp)
+ 14149      FFFF0000 
+ 14149      0000
+ 14150 d29c EB5C     		jmp	.L329
+ 14151              	.L332:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 14152              		.loc 2 385 0
+ 14153 d29e 8B857CEB 		movl	-5252(%rbp), %eax
+ 14153      FFFF
+ 14154 d2a4 89C0     		mov	%eax, %eax
+ 14155 d2a6 0FB68405 		movzbl	-8064(%rbp,%rax), %eax
+ 14155      80E0FFFF 
+ 14156 d2ae 84C0     		testb	%al, %al
+ 14157 d2b0 7912     		jns	.L330
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 446
+
+
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 14158              		.loc 2 386 0
+ 14159 d2b2 8B857CEB 		movl	-5252(%rbp), %eax
+ 14159      FFFF
+ 14160 d2b8 89C0     		mov	%eax, %eax
+ 14161 d2ba C68405A0 		movb	$0, -8032(%rbp,%rax)
+ 14161      E0FFFF00 
+ 14162 d2c2 EB2F     		jmp	.L331
+ 14163              	.L330:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 14164              		.loc 2 388 0
+ 14165 d2c4 8B8D7CEB 		movl	-5252(%rbp), %ecx
+ 14165      FFFF
+ 14166 d2ca 8B857CEB 		movl	-5252(%rbp), %eax
+ 14166      FFFF
+ 14167 d2d0 89C0     		mov	%eax, %eax
+ 14168 d2d2 0FB68405 		movzbl	-8064(%rbp,%rax), %eax
+ 14168      80E0FFFF 
+ 14169 d2da 0FB6C0   		movzbl	%al, %eax
+ 14170 d2dd 83E00F   		andl	$15, %eax
+ 14171 d2e0 4898     		cltq
+ 14172 d2e2 0FB69405 		movzbl	-8048(%rbp,%rax), %edx
+ 14172      90E0FFFF 
+ 14173 d2ea 89C8     		mov	%ecx, %eax
+ 14174 d2ec 889405A0 		movb	%dl, -8032(%rbp,%rax)
+ 14174      E0FFFF
+ 14175              	.L331:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 14176              		.loc 2 383 0
+ 14177 d2f3 83857CEB 		addl	$1, -5252(%rbp)
+ 14177      FFFF01
+ 14178              	.L329:
+ 14179 d2fa 83BD7CEB 		cmpl	$15, -5252(%rbp)
+ 14179      FFFF0F
+ 14180 d301 769B     		jbe	.L332
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 14181              		.loc 2 391 0
+ 14182 d303 F30F6F85 		movdqu	-8032(%rbp), %xmm0
+ 14182      A0E0FFFF 
+ 14183              	.LBE1965:
+ 14184              	.LBE1964:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 14185              		.loc 2 872 0
+ 14186 d30b F30F7F85 		movdqu	%xmm0, -5488(%rbp)
+ 14186      90EAFFFF 
+ 14187 d313 F30F6F85 		movdqu	-5504(%rbp), %xmm0
+ 14187      80EAFFFF 
+ 14188 d31b F30F7F85 		movdqu	%xmm0, -5232(%rbp)
+ 14188      90EBFFFF 
+ 14189 d323 F30F6F85 		movdqu	-5488(%rbp), %xmm0
+ 14189      90EAFFFF 
+ 14190 d32b F30F7F85 		movdqu	%xmm0, -5248(%rbp)
+ 14190      80EBFFFF 
+ 14191              	.LBB1966:
+ 14192              	.LBB1967:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 14193              		.loc 2 234 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 447
+
+
+ 14194 d333 F30F6F85 		movdqu	-5248(%rbp), %xmm0
+ 14194      80EBFFFF 
+ 14195 d33b F30F6F8D 		movdqu	-5232(%rbp), %xmm1
+ 14195      90EBFFFF 
+ 14196 d343 660FEBC1 		por	%xmm1, %xmm0
+ 14197              	.LBE1967:
+ 14198              	.LBE1966:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 14199              		.loc 2 874 0
+ 14200 d347 F30F7F85 		movdqu	%xmm0, -5504(%rbp)
+ 14200      80EAFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 14201              		.loc 2 876 0
+ 14202 d34f 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 14202      00000000 
+ 14203 d357 F30F6F8D 		movdqu	-5472(%rbp), %xmm1
+ 14203      A0EAFFFF 
+ 14204 d35f F30F7F8D 		movdqu	%xmm1, -5200(%rbp)
+ 14204      B0EBFFFF 
+ 14205 d367 F30F7F85 		movdqu	%xmm0, -5216(%rbp)
+ 14205      A0EBFFFF 
+ 14206              	.LBB1968:
+ 14207              	.LBB1969:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 14208              		.loc 2 290 0
+ 14209 d36f F30F6F8D 		movdqu	-5216(%rbp), %xmm1
+ 14209      A0EBFFFF 
+ 14210 d377 F30F6F85 		movdqu	-5200(%rbp), %xmm0
+ 14210      B0EBFFFF 
+ 14211 d37f 660FF8C1 		psubb	%xmm1, %xmm0
+ 14212              	.LBE1969:
+ 14213              	.LBE1968:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 14214              		.loc 2 876 0
+ 14215 d383 F30F7F85 		movdqu	%xmm0, -5472(%rbp)
+ 14215      A0EAFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 14216              		.loc 2 878 0
+ 14217 d38b 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 14217      00000000 
+ 14218 d393 F30F6F8D 		movdqu	-5472(%rbp), %xmm1
+ 14218      A0EAFFFF 
+ 14219 d39b F30F7F8D 		movdqu	%xmm1, -5168(%rbp)
+ 14219      D0EBFFFF 
+ 14220 d3a3 F30F7F85 		movdqu	%xmm0, -5184(%rbp)
+ 14220      C0EBFFFF 
+ 14221              	.LBB1970:
+ 14222              	.LBB1971:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 14223              		.loc 2 206 0
+ 14224 d3ab F30F6F85 		movdqu	-5184(%rbp), %xmm0
+ 14224      C0EBFFFF 
+ 14225 d3b3 F30F6F8D 		movdqu	-5168(%rbp), %xmm1
+ 14225      D0EBFFFF 
+ 14226 d3bb 660FDBC1 		pand	%xmm1, %xmm0
+ 14227              	.LBE1971:
+ 14228              	.LBE1970:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 448
+
+
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 14229              		.loc 2 878 0
+ 14230 d3bf F30F7F85 		movdqu	%xmm0, -5472(%rbp)
+ 14230      A0EAFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 14231              		.loc 2 866 0
+ 14232 d3c7 83857CEA 		addl	$1, -5508(%rbp)
+ 14232      FFFF01
+ 14233              	.L324:
+ 14234 d3ce 83BD7CEA 		cmpl	$15, -5508(%rbp)
+ 14234      FFFF0F
+ 14235 d3d5 0F866DFD 		jbe	.L333
+ 14235      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 14236              		.loc 2 882 0
+ 14237 d3db F30F6F85 		movdqu	-5504(%rbp), %xmm0
+ 14237      80EAFFFF 
+ 14238              	.LBE1955:
+ 14239              	.LBE1954:
+ 14240              	.LBE1953:
+ 14241              	.LBE1952:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 14242              		.loc 2 1682 0
+ 14243 d3e3 660F7F85 		movdqa	%xmm0, -8784(%rbp)
+ 14243      B0DDFFFF 
+ 14244              	.LBB1972:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 14245              		.loc 2 1683 0
+ 14246 d3eb 660F6F85 		movdqa	-8784(%rbp), %xmm0
+ 14246      B0DDFFFF 
+ 14247 d3f3 F30F7F85 		movdqu	%xmm0, -8144(%rbp)
+ 14247      30E0FFFF 
+ 14248 d3fb E8000000 		call	KDbgWriterGet at PLT
+ 14248      00
+ 14249 d400 4885C0   		testq	%rax, %rax
+ 14250 d403 7479     		je	.L335
+ 14251 d405 BF010000 		movl	$1, %edi
+ 14251      00
+ 14252 d40a E8000000 		call	KDbgCondToFlag at PLT
+ 14252      00
+ 14253 d40f 4889C6   		movq	%rax, %rsi
+ 14254 d412 BF100000 		movl	$16, %edi
+ 14254      00
+ 14255 d417 E8000000 		call	KDbgTestModConds at PLT
+ 14255      00
+ 14256 d41c 84C0     		testb	%al, %al
+ 14257 d41e 745E     		je	.L335
+ 14258 d420 8B853CE0 		movl	-8132(%rbp), %eax
+ 14258      FFFF
+ 14259 d426 89C7     		movl	%eax, %edi
+ 14260 d428 E8D32BFF 		call	bswap_32
+ 14260      FF
+ 14261 d42d 4189C5   		movl	%eax, %r13d
+ 14262 d430 8B8538E0 		movl	-8136(%rbp), %eax
+ 14262      FFFF
+ 14263 d436 89C7     		movl	%eax, %edi
+ 14264 d438 E8C32BFF 		call	bswap_32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 449
+
+
+ 14264      FF
+ 14265 d43d 4189C4   		movl	%eax, %r12d
+ 14266 d440 8B8534E0 		movl	-8140(%rbp), %eax
+ 14266      FFFF
+ 14267 d446 89C7     		movl	%eax, %edi
+ 14268 d448 E8B32BFF 		call	bswap_32
+ 14268      FF
+ 14269 d44d 89C3     		movl	%eax, %ebx
+ 14270 d44f 8B8530E0 		movl	-8144(%rbp), %eax
+ 14270      FFFF
+ 14271 d455 89C7     		movl	%eax, %edi
+ 14272 d457 E8A42BFF 		call	bswap_32
+ 14272      FF
+ 14273 d45c 4589E9   		movl	%r13d, %r9d
+ 14274 d45f 4589E0   		movl	%r12d, %r8d
+ 14275 d462 89D9     		movl	%ebx, %ecx
+ 14276 d464 89C2     		movl	%eax, %edx
+ 14277 d466 488D3500 		leaq	.LC0(%rip), %rsi
+ 14277      000000
+ 14278 d46d 488D3D00 		leaq	.LC1(%rip), %rdi
+ 14278      000000
+ 14279 d474 B8000000 		movl	$0, %eax
+ 14279      00
+ 14280 d479 E8000000 		call	KDbgMsg at PLT
+ 14280      00
+ 14281              	.L335:
+ 14282 d47e 660F6F85 		movdqa	-8784(%rbp), %xmm0
+ 14282      B0DDFFFF 
+ 14283 d486 F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 14283      E0EBFFFF 
+ 14284              	.LBE1972:
+ 14285              	.LBB1973:
+ 14286              	.LBB1974:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 14287              		.loc 2 667 0
+ 14288 d48e 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 14288      00000000 
+ 14289 d496 F30F6F8D 		movdqu	-5152(%rbp), %xmm1
+ 14289      E0EBFFFF 
+ 14290 d49e F30F7F8D 		movdqu	%xmm1, -5120(%rbp)
+ 14290      00ECFFFF 
+ 14291 d4a6 F30F7F85 		movdqu	%xmm0, -5136(%rbp)
+ 14291      F0EBFFFF 
+ 14292              	.LBB1975:
+ 14293              	.LBB1976:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 14294              		.loc 2 380 0
+ 14295 d4ae F30F6F85 		movdqu	-5120(%rbp), %xmm0
+ 14295      00ECFFFF 
+ 14296 d4b6 F30F7F85 		movdqu	%xmm0, -8000(%rbp)
+ 14296      C0E0FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 14297              		.loc 2 381 0
+ 14298 d4be F30F6F85 		movdqu	-5136(%rbp), %xmm0
+ 14298      F0EBFFFF 
+ 14299 d4c6 F30F7F85 		movdqu	%xmm0, -8016(%rbp)
+ 14299      B0E0FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 450
+
+
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 14300              		.loc 2 383 0
+ 14301 d4ce C7851CEC 		movl	$0, -5092(%rbp)
+ 14301      FFFF0000 
+ 14301      0000
+ 14302 d4d8 EB5C     		jmp	.L336
+ 14303              	.L339:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 14304              		.loc 2 385 0
+ 14305 d4da 8B851CEC 		movl	-5092(%rbp), %eax
+ 14305      FFFF
+ 14306 d4e0 89C0     		mov	%eax, %eax
+ 14307 d4e2 0FB68405 		movzbl	-8016(%rbp,%rax), %eax
+ 14307      B0E0FFFF 
+ 14308 d4ea 84C0     		testb	%al, %al
+ 14309 d4ec 7912     		jns	.L337
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 14310              		.loc 2 386 0
+ 14311 d4ee 8B851CEC 		movl	-5092(%rbp), %eax
+ 14311      FFFF
+ 14312 d4f4 89C0     		mov	%eax, %eax
+ 14313 d4f6 C68405D0 		movb	$0, -7984(%rbp,%rax)
+ 14313      E0FFFF00 
+ 14314 d4fe EB2F     		jmp	.L338
+ 14315              	.L337:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 14316              		.loc 2 388 0
+ 14317 d500 8B8D1CEC 		movl	-5092(%rbp), %ecx
+ 14317      FFFF
+ 14318 d506 8B851CEC 		movl	-5092(%rbp), %eax
+ 14318      FFFF
+ 14319 d50c 89C0     		mov	%eax, %eax
+ 14320 d50e 0FB68405 		movzbl	-8016(%rbp,%rax), %eax
+ 14320      B0E0FFFF 
+ 14321 d516 0FB6C0   		movzbl	%al, %eax
+ 14322 d519 83E00F   		andl	$15, %eax
+ 14323 d51c 4898     		cltq
+ 14324 d51e 0FB69405 		movzbl	-8000(%rbp,%rax), %edx
+ 14324      C0E0FFFF 
+ 14325 d526 89C8     		mov	%ecx, %eax
+ 14326 d528 889405D0 		movb	%dl, -7984(%rbp,%rax)
+ 14326      E0FFFF
+ 14327              	.L338:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 14328              		.loc 2 383 0
+ 14329 d52f 83851CEC 		addl	$1, -5092(%rbp)
+ 14329      FFFF01
+ 14330              	.L336:
+ 14331 d536 83BD1CEC 		cmpl	$15, -5092(%rbp)
+ 14331      FFFF0F
+ 14332 d53d 769B     		jbe	.L339
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 14333              		.loc 2 391 0
+ 14334 d53f F30F6F85 		movdqu	-7984(%rbp), %xmm0
+ 14334      D0E0FFFF 
+ 14335              	.LBE1976:
+ 14336              	.LBE1975:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 451
+
+
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 14337              		.loc 2 667 0
+ 14338 d547 F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 14338      E0EBFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 14339              		.loc 2 668 0
+ 14340 d54f F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 14340      E0EBFFFF 
+ 14341              	.LBE1974:
+ 14342              	.LBE1973:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 14343              		.loc 2 1684 0
+ 14344 d557 660F7F85 		movdqa	%xmm0, -8784(%rbp)
+ 14344      B0DDFFFF 
+ 14345              	.LBB1977:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 14346              		.loc 2 1685 0
+ 14347 d55f 660F6F85 		movdqa	-8784(%rbp), %xmm0
+ 14347      B0DDFFFF 
+ 14348 d567 F30F7F85 		movdqu	%xmm0, -8160(%rbp)
+ 14348      20E0FFFF 
+ 14349 d56f E8000000 		call	KDbgWriterGet at PLT
+ 14349      00
+ 14350 d574 4885C0   		testq	%rax, %rax
+ 14351 d577 7479     		je	.L341
+ 14352 d579 BF010000 		movl	$1, %edi
+ 14352      00
+ 14353 d57e E8000000 		call	KDbgCondToFlag at PLT
+ 14353      00
+ 14354 d583 4889C6   		movq	%rax, %rsi
+ 14355 d586 BF100000 		movl	$16, %edi
+ 14355      00
+ 14356 d58b E8000000 		call	KDbgTestModConds at PLT
+ 14356      00
+ 14357 d590 84C0     		testb	%al, %al
+ 14358 d592 745E     		je	.L341
+ 14359 d594 8B852CE0 		movl	-8148(%rbp), %eax
+ 14359      FFFF
+ 14360 d59a 89C7     		movl	%eax, %edi
+ 14361 d59c E85F2AFF 		call	bswap_32
+ 14361      FF
+ 14362 d5a1 4189C5   		movl	%eax, %r13d
+ 14363 d5a4 8B8528E0 		movl	-8152(%rbp), %eax
+ 14363      FFFF
+ 14364 d5aa 89C7     		movl	%eax, %edi
+ 14365 d5ac E84F2AFF 		call	bswap_32
+ 14365      FF
+ 14366 d5b1 4189C4   		movl	%eax, %r12d
+ 14367 d5b4 8B8524E0 		movl	-8156(%rbp), %eax
+ 14367      FFFF
+ 14368 d5ba 89C7     		movl	%eax, %edi
+ 14369 d5bc E83F2AFF 		call	bswap_32
+ 14369      FF
+ 14370 d5c1 89C3     		movl	%eax, %ebx
+ 14371 d5c3 8B8520E0 		movl	-8160(%rbp), %eax
+ 14371      FFFF
+ 14372 d5c9 89C7     		movl	%eax, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 452
+
+
+ 14373 d5cb E8302AFF 		call	bswap_32
+ 14373      FF
+ 14374 d5d0 4589E9   		movl	%r13d, %r9d
+ 14375 d5d3 4589E0   		movl	%r12d, %r8d
+ 14376 d5d6 89D9     		movl	%ebx, %ecx
+ 14377 d5d8 89C2     		movl	%eax, %edx
+ 14378 d5da 488D3500 		leaq	.LC2(%rip), %rsi
+ 14378      000000
+ 14379 d5e1 488D3D00 		leaq	.LC1(%rip), %rdi
+ 14379      000000
+ 14380 d5e8 B8000000 		movl	$0, %eax
+ 14380      00
+ 14381 d5ed E8000000 		call	KDbgMsg at PLT
+ 14381      00
+ 14382              	.L341:
+ 14383 d5f2 660F6F85 		movdqa	-8784(%rbp), %xmm0
+ 14383      B0DDFFFF 
+ 14384 d5fa F30F7F85 		movdqu	%xmm0, -5072(%rbp)
+ 14384      30ECFFFF 
+ 14385 d602 660F6F85 		movdqa	-8768(%rbp), %xmm0
+ 14385      C0DDFFFF 
+ 14386 d60a F30F7F85 		movdqu	%xmm0, -5088(%rbp)
+ 14386      20ECFFFF 
+ 14387              	.LBE1977:
+ 14388              	.LBB1978:
+ 14389              	.LBB1979:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 14390              		.loc 2 178 0
+ 14391 d612 F30F6F85 		movdqu	-5088(%rbp), %xmm0
+ 14391      20ECFFFF 
+ 14392 d61a F30F6F8D 		movdqu	-5072(%rbp), %xmm1
+ 14392      30ECFFFF 
+ 14393 d622 660FEFC1 		pxor	%xmm1, %xmm0
+ 14394              	.LBE1979:
+ 14395              	.LBE1978:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 14396              		.loc 2 1686 0
+ 14397 d626 660F7F85 		movdqa	%xmm0, -8784(%rbp)
+ 14397      B0DDFFFF 
+ 14398              	.LBB1980:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 14399              		.loc 2 1687 0
+ 14400 d62e 660F6F85 		movdqa	-8784(%rbp), %xmm0
+ 14400      B0DDFFFF 
+ 14401 d636 F30F7F85 		movdqu	%xmm0, -8176(%rbp)
+ 14401      10E0FFFF 
+ 14402 d63e E8000000 		call	KDbgWriterGet at PLT
+ 14402      00
+ 14403 d643 4885C0   		testq	%rax, %rax
+ 14404 d646 7479     		je	.L343
+ 14405 d648 BF010000 		movl	$1, %edi
+ 14405      00
+ 14406 d64d E8000000 		call	KDbgCondToFlag at PLT
+ 14406      00
+ 14407 d652 4889C6   		movq	%rax, %rsi
+ 14408 d655 BF100000 		movl	$16, %edi
+ 14408      00
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 453
+
+
+ 14409 d65a E8000000 		call	KDbgTestModConds at PLT
+ 14409      00
+ 14410 d65f 84C0     		testb	%al, %al
+ 14411 d661 745E     		je	.L343
+ 14412 d663 8B851CE0 		movl	-8164(%rbp), %eax
+ 14412      FFFF
+ 14413 d669 89C7     		movl	%eax, %edi
+ 14414 d66b E89029FF 		call	bswap_32
+ 14414      FF
+ 14415 d670 4189C5   		movl	%eax, %r13d
+ 14416 d673 8B8518E0 		movl	-8168(%rbp), %eax
+ 14416      FFFF
+ 14417 d679 89C7     		movl	%eax, %edi
+ 14418 d67b E88029FF 		call	bswap_32
+ 14418      FF
+ 14419 d680 4189C4   		movl	%eax, %r12d
+ 14420 d683 8B8514E0 		movl	-8172(%rbp), %eax
+ 14420      FFFF
+ 14421 d689 89C7     		movl	%eax, %edi
+ 14422 d68b E87029FF 		call	bswap_32
+ 14422      FF
+ 14423 d690 89C3     		movl	%eax, %ebx
+ 14424 d692 8B8510E0 		movl	-8176(%rbp), %eax
+ 14424      FFFF
+ 14425 d698 89C7     		movl	%eax, %edi
+ 14426 d69a E86129FF 		call	bswap_32
+ 14426      FF
+ 14427 d69f 4589E9   		movl	%r13d, %r9d
+ 14428 d6a2 4589E0   		movl	%r12d, %r8d
+ 14429 d6a5 89D9     		movl	%ebx, %ecx
+ 14430 d6a7 89C2     		movl	%eax, %edx
+ 14431 d6a9 488D3500 		leaq	.LC3(%rip), %rsi
+ 14431      000000
+ 14432 d6b0 488D3D00 		leaq	.LC1(%rip), %rdi
+ 14432      000000
+ 14433 d6b7 B8000000 		movl	$0, %eax
+ 14433      00
+ 14434 d6bc E8000000 		call	KDbgMsg at PLT
+ 14434      00
+ 14435              	.L343:
+ 14436 d6c1 660F6F85 		movdqa	-8784(%rbp), %xmm0
+ 14436      B0DDFFFF 
+ 14437 d6c9 F30F7F85 		movdqu	%xmm0, -5056(%rbp)
+ 14437      40ECFFFF 
+ 14438              	.LBE1980:
+ 14439              	.LBB1981:
+ 14440              	.LBB1982:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 14441              		.loc 2 1357 0
+ 14442 d6d1 F30F6F85 		movdqu	-5056(%rbp), %xmm0
+ 14442      40ECFFFF 
+ 14443 d6d9 F30F7F85 		movdqu	%xmm0, -7968(%rbp)
+ 14443      E0E0FFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 14444              		.loc 2 1358 0
+ 14445 d6e1 8B85ECE0 		movl	-7956(%rbp), %eax
+ 14445      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 454
+
+
+ 14446 d6e7 8985E8E0 		movl	%eax, -7960(%rbp)
+ 14446      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 14447              		.loc 2 1359 0
+ 14448 d6ed 8B85ECE0 		movl	-7956(%rbp), %eax
+ 14448      FFFF
+ 14449 d6f3 8985E4E0 		movl	%eax, -7964(%rbp)
+ 14449      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 14450              		.loc 2 1360 0
+ 14451 d6f9 8B85ECE0 		movl	-7956(%rbp), %eax
+ 14451      FFFF
+ 14452 d6ff 8985E0E0 		movl	%eax, -7968(%rbp)
+ 14452      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 14453              		.loc 2 1361 0
+ 14454 d705 F30F6F85 		movdqu	-7968(%rbp), %xmm0
+ 14454      E0E0FFFF 
+ 14455              	.LBE1982:
+ 14456              	.LBE1981:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 14457              		.loc 2 1688 0
+ 14458 d70d 660F7F85 		movdqa	%xmm0, -8784(%rbp)
+ 14458      B0DDFFFF 
+ 14459              	.LBB1983:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 14460              		.loc 2 1689 0
+ 14461 d715 660F6F85 		movdqa	-8784(%rbp), %xmm0
+ 14461      B0DDFFFF 
+ 14462 d71d F30F7F85 		movdqu	%xmm0, -8192(%rbp)
+ 14462      00E0FFFF 
+ 14463 d725 E8000000 		call	KDbgWriterGet at PLT
+ 14463      00
+ 14464 d72a 4885C0   		testq	%rax, %rax
+ 14465 d72d 7479     		je	.L345
+ 14466 d72f BF010000 		movl	$1, %edi
+ 14466      00
+ 14467 d734 E8000000 		call	KDbgCondToFlag at PLT
+ 14467      00
+ 14468 d739 4889C6   		movq	%rax, %rsi
+ 14469 d73c BF100000 		movl	$16, %edi
+ 14469      00
+ 14470 d741 E8000000 		call	KDbgTestModConds at PLT
+ 14470      00
+ 14471 d746 84C0     		testb	%al, %al
+ 14472 d748 745E     		je	.L345
+ 14473 d74a 8B850CE0 		movl	-8180(%rbp), %eax
+ 14473      FFFF
+ 14474 d750 89C7     		movl	%eax, %edi
+ 14475 d752 E8A928FF 		call	bswap_32
+ 14475      FF
+ 14476 d757 4189C5   		movl	%eax, %r13d
+ 14477 d75a 8B8508E0 		movl	-8184(%rbp), %eax
+ 14477      FFFF
+ 14478 d760 89C7     		movl	%eax, %edi
+ 14479 d762 E89928FF 		call	bswap_32
+ 14479      FF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 455
+
+
+ 14480 d767 4189C4   		movl	%eax, %r12d
+ 14481 d76a 8B8504E0 		movl	-8188(%rbp), %eax
+ 14481      FFFF
+ 14482 d770 89C7     		movl	%eax, %edi
+ 14483 d772 E88928FF 		call	bswap_32
+ 14483      FF
+ 14484 d777 89C3     		movl	%eax, %ebx
+ 14485 d779 8B8500E0 		movl	-8192(%rbp), %eax
+ 14485      FFFF
+ 14486 d77f 89C7     		movl	%eax, %edi
+ 14487 d781 E87A28FF 		call	bswap_32
+ 14487      FF
+ 14488 d786 4589E9   		movl	%r13d, %r9d
+ 14489 d789 4589E0   		movl	%r12d, %r8d
+ 14490 d78c 89D9     		movl	%ebx, %ecx
+ 14491 d78e 89C2     		movl	%eax, %edx
+ 14492 d790 488D3500 		leaq	.LC4(%rip), %rsi
+ 14492      000000
+ 14493 d797 488D3D00 		leaq	.LC1(%rip), %rdi
+ 14493      000000
+ 14494 d79e B8000000 		movl	$0, %eax
+ 14494      00
+ 14495 d7a3 E8000000 		call	KDbgMsg at PLT
+ 14495      00
+ 14496              	.L345:
+ 14497              	.LBE1983:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 14498              		.loc 2 1690 0
+ 14499 d7a8 660F6F85 		movdqa	-8784(%rbp), %xmm0
+ 14499      B0DDFFFF 
+ 14500              	.LBE1949:
+ 14501              	.LBE1948:
+1926:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(2,0x01);    /* k8  : k9  : k10 : k11 */
+ 14502              		.loc 2 1926 0
+ 14503 d7b0 F30F7F85 		movdqu	%xmm0, -5664(%rbp)
+ 14503      E0E9FFFF 
+ 14504 d7b8 F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 14504      C0E9FFFF 
+ 14505 d7c0 F30F7F85 		movdqu	%xmm0, -5040(%rbp)
+ 14505      50ECFFFF 
+ 14506              	.LBB1984:
+ 14507              	.LBB1985:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 14508              		.loc 2 1565 0
+ 14509 d7c8 F30F6F85 		movdqu	-5040(%rbp), %xmm0
+ 14509      50ECFFFF 
+ 14510 d7d0 660F7F85 		movdqa	%xmm0, -8736(%rbp)
+ 14510      E0DDFFFF 
+ 14511 d7d8 660F6F85 		movdqa	-8736(%rbp), %xmm0
+ 14511      E0DDFFFF 
+ 14512 d7e0 F30F7F85 		movdqu	%xmm0, -5024(%rbp)
+ 14512      60ECFFFF 
+ 14513              	.LBB1986:
+ 14514              	.LBB1987:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 14515              		.loc 2 1282 0
+ 14516 d7e8 F30F6F85 		movdqu	-5024(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 456
+
+
+ 14516      60ECFFFF 
+ 14517 d7f0 F30F7F85 		movdqu	%xmm0, -7952(%rbp)
+ 14517      F0E0FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 14518              		.loc 2 1283 0
+ 14519 d7f8 8B85F8E0 		movl	-7944(%rbp), %eax
+ 14519      FFFF
+ 14520 d7fe 8985FCE0 		movl	%eax, -7940(%rbp)
+ 14520      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 14521              		.loc 2 1284 0
+ 14522 d804 8B85F4E0 		movl	-7948(%rbp), %eax
+ 14522      FFFF
+ 14523 d80a 8985F8E0 		movl	%eax, -7944(%rbp)
+ 14523      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 14524              		.loc 2 1285 0
+ 14525 d810 8B85F0E0 		movl	-7952(%rbp), %eax
+ 14525      FFFF
+ 14526 d816 8985F4E0 		movl	%eax, -7948(%rbp)
+ 14526      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 14527              		.loc 2 1286 0
+ 14528 d81c C785F0E0 		movl	$0, -7952(%rbp)
+ 14528      FFFF0000 
+ 14528      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 14529              		.loc 2 1287 0
+ 14530 d826 F30F6F85 		movdqu	-7952(%rbp), %xmm0
+ 14530      F0E0FFFF 
+ 14531              	.LBE1987:
+ 14532              	.LBE1986:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14533              		.loc 2 1567 0
+ 14534 d82e 660F7F85 		movdqa	%xmm0, -8736(%rbp)
+ 14534      E0DDFFFF 
+ 14535 d836 660F6F85 		movdqa	-8736(%rbp), %xmm0
+ 14535      E0DDFFFF 
+ 14536 d83e 660FEF85 		pxor	-5040(%rbp), %xmm0
+ 14536      50ECFFFF 
+ 14537 d846 F30F7F85 		movdqu	%xmm0, -5040(%rbp)
+ 14537      50ECFFFF 
+ 14538 d84e 660F6F85 		movdqa	-8736(%rbp), %xmm0
+ 14538      E0DDFFFF 
+ 14539 d856 F30F7F85 		movdqu	%xmm0, -5008(%rbp)
+ 14539      70ECFFFF 
+ 14540              	.LBB1988:
+ 14541              	.LBB1989:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 14542              		.loc 2 1282 0
+ 14543 d85e F30F6F85 		movdqu	-5008(%rbp), %xmm0
+ 14543      70ECFFFF 
+ 14544 d866 F30F7F85 		movdqu	%xmm0, -7936(%rbp)
+ 14544      00E1FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 14545              		.loc 2 1283 0
+ 14546 d86e 8B8508E1 		movl	-7928(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 457
+
+
+ 14546      FFFF
+ 14547 d874 89850CE1 		movl	%eax, -7924(%rbp)
+ 14547      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 14548              		.loc 2 1284 0
+ 14549 d87a 8B8504E1 		movl	-7932(%rbp), %eax
+ 14549      FFFF
+ 14550 d880 898508E1 		movl	%eax, -7928(%rbp)
+ 14550      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 14551              		.loc 2 1285 0
+ 14552 d886 8B8500E1 		movl	-7936(%rbp), %eax
+ 14552      FFFF
+ 14553 d88c 898504E1 		movl	%eax, -7932(%rbp)
+ 14553      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 14554              		.loc 2 1286 0
+ 14555 d892 C78500E1 		movl	$0, -7936(%rbp)
+ 14555      FFFF0000 
+ 14555      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 14556              		.loc 2 1287 0
+ 14557 d89c F30F6F85 		movdqu	-7936(%rbp), %xmm0
+ 14557      00E1FFFF 
+ 14558              	.LBE1989:
+ 14559              	.LBE1988:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14560              		.loc 2 1568 0
+ 14561 d8a4 660F7F85 		movdqa	%xmm0, -8736(%rbp)
+ 14561      E0DDFFFF 
+ 14562 d8ac 660F6F85 		movdqa	-8736(%rbp), %xmm0
+ 14562      E0DDFFFF 
+ 14563 d8b4 660FEF85 		pxor	-5040(%rbp), %xmm0
+ 14563      50ECFFFF 
+ 14564 d8bc F30F7F85 		movdqu	%xmm0, -5040(%rbp)
+ 14564      50ECFFFF 
+ 14565 d8c4 660F6F85 		movdqa	-8736(%rbp), %xmm0
+ 14565      E0DDFFFF 
+ 14566 d8cc F30F7F85 		movdqu	%xmm0, -4992(%rbp)
+ 14566      80ECFFFF 
+ 14567              	.LBB1990:
+ 14568              	.LBB1991:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 14569              		.loc 2 1282 0
+ 14570 d8d4 F30F6F85 		movdqu	-4992(%rbp), %xmm0
+ 14570      80ECFFFF 
+ 14571 d8dc F30F7F85 		movdqu	%xmm0, -7920(%rbp)
+ 14571      10E1FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 14572              		.loc 2 1283 0
+ 14573 d8e4 8B8518E1 		movl	-7912(%rbp), %eax
+ 14573      FFFF
+ 14574 d8ea 89851CE1 		movl	%eax, -7908(%rbp)
+ 14574      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 14575              		.loc 2 1284 0
+ 14576 d8f0 8B8514E1 		movl	-7916(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 458
+
+
+ 14576      FFFF
+ 14577 d8f6 898518E1 		movl	%eax, -7912(%rbp)
+ 14577      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 14578              		.loc 2 1285 0
+ 14579 d8fc 8B8510E1 		movl	-7920(%rbp), %eax
+ 14579      FFFF
+ 14580 d902 898514E1 		movl	%eax, -7916(%rbp)
+ 14580      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 14581              		.loc 2 1286 0
+ 14582 d908 C78510E1 		movl	$0, -7920(%rbp)
+ 14582      FFFF0000 
+ 14582      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 14583              		.loc 2 1287 0
+ 14584 d912 F30F6F85 		movdqu	-7920(%rbp), %xmm0
+ 14584      10E1FFFF 
+ 14585              	.LBE1991:
+ 14586              	.LBE1990:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14587              		.loc 2 1569 0
+ 14588 d91a 660F7F85 		movdqa	%xmm0, -8736(%rbp)
+ 14588      E0DDFFFF 
+ 14589 d922 660F6F85 		movdqa	-8736(%rbp), %xmm0
+ 14589      E0DDFFFF 
+ 14590 d92a 660FEF85 		pxor	-5040(%rbp), %xmm0
+ 14590      50ECFFFF 
+ 14591 d932 F30F7F85 		movdqu	%xmm0, -5040(%rbp)
+ 14591      50ECFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 14592              		.loc 2 1571 0
+ 14593 d93a F30F6F85 		movdqu	-5040(%rbp), %xmm0
+ 14593      50ECFFFF 
+ 14594              	.LBE1985:
+ 14595              	.LBE1984:
+1926:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(2,0x01);    /* k8  : k9  : k10 : k11 */
+ 14596              		.loc 2 1926 0
+ 14597 d942 F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 14597      C0E9FFFF 
+ 14598 d94a F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 14598      C0E9FFFF 
+ 14599 d952 F30F7F85 		movdqu	%xmm0, -4960(%rbp)
+ 14599      A0ECFFFF 
+ 14600 d95a F30F6F85 		movdqu	-5664(%rbp), %xmm0
+ 14600      E0E9FFFF 
+ 14601 d962 F30F7F85 		movdqu	%xmm0, -4976(%rbp)
+ 14601      90ECFFFF 
+ 14602              	.LBB1992:
+ 14603              	.LBB1993:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 14604              		.loc 2 178 0
+ 14605 d96a F30F6F85 		movdqu	-4976(%rbp), %xmm0
+ 14605      90ECFFFF 
+ 14606 d972 F30F6F8D 		movdqu	-4960(%rbp), %xmm1
+ 14606      A0ECFFFF 
+ 14607 d97a 660FEFC1 		pxor	%xmm1, %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 459
+
+
+ 14608              	.LBE1993:
+ 14609              	.LBE1992:
+1926:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(2,0x01);    /* k8  : k9  : k10 : k11 */
+ 14610              		.loc 2 1926 0
+ 14611 d97e F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 14611      C0E9FFFF 
+ 14612 d986 488B85D8 		movq	-8232(%rbp), %rax
+ 14612      DFFFFF
+ 14613 d98d 4883C020 		addq	$32, %rax
+ 14614 d991 F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 14614      C0E9FFFF 
+ 14615 d999 F30F7F00 		movdqu	%xmm0, (%rax)
+ 14616 d99d F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 14616      C0E9FFFF 
+ 14617 d9a5 F30F7F85 		movdqu	%xmm0, -4944(%rbp)
+ 14617      B0ECFFFF 
+ 14618              	.LBB1994:
+ 14619              	.LBB1995:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 14620              		.loc 2 1656 0
+ 14621 d9ad F30F6F85 		movdqu	-4944(%rbp), %xmm0
+ 14621      B0ECFFFF 
+ 14622 d9b5 F30F7F85 		movdqu	%xmm0, -7888(%rbp)
+ 14622      30E1FFFF 
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 14623              		.loc 2 1657 0
+ 14624 d9bd 8B853CE1 		movl	-7876(%rbp), %eax
+ 14624      FFFF
+ 14625 d9c3 8985C8EC 		movl	%eax, -4920(%rbp)
+ 14625      FFFF
+ 14626              	.LBB1996:
+ 14627              	.LBB1997:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 14628              		.loc 2 740 0
+ 14629 d9c9 8B85C8EC 		movl	-4920(%rbp), %eax
+ 14629      FFFF
+ 14630 d9cf 898520E1 		movl	%eax, -7904(%rbp)
+ 14630      FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 14631              		.loc 2 741 0
+ 14632 d9d5 C785CCEC 		movl	$0, -4916(%rbp)
+ 14632      FFFF0000 
+ 14632      0000
+ 14633 d9df EB36     		jmp	.L346
+ 14634              	.L347:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 14635              		.loc 2 742 0
+ 14636 d9e1 8B8DCCEC 		movl	-4916(%rbp), %ecx
+ 14636      FFFF
+ 14637 d9e7 8B85CCEC 		movl	-4916(%rbp), %eax
+ 14637      FFFF
+ 14638 d9ed 89C0     		mov	%eax, %eax
+ 14639 d9ef 0FB68405 		movzbl	-7904(%rbp,%rax), %eax
+ 14639      20E1FFFF 
+ 14640 d9f7 0FB6C0   		movzbl	%al, %eax
+ 14641 d9fa 89C2     		mov	%eax, %edx
+ 14642 d9fc 488D0500 		leaq	KAESBlockCipherVecRijndaelSBox(%rip), %rax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 460
+
+
+ 14642      000000
+ 14643 da03 0FB61402 		movzbl	(%rdx,%rax), %edx
+ 14644 da07 89C8     		mov	%ecx, %eax
+ 14645 da09 88940520 		movb	%dl, -7904(%rbp,%rax)
+ 14645      E1FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 14646              		.loc 2 741 0
+ 14647 da10 8385CCEC 		addl	$1, -4916(%rbp)
+ 14647      FFFF01
+ 14648              	.L346:
+ 14649 da17 83BDCCEC 		cmpl	$3, -4916(%rbp)
+ 14649      FFFF03
+ 14650 da1e 76C1     		jbe	.L347
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 14651              		.loc 2 743 0
+ 14652 da20 8B8520E1 		movl	-7904(%rbp), %eax
+ 14652      FFFF
+ 14653              	.LBE1997:
+ 14654              	.LBE1996:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 14655              		.loc 2 1657 0
+ 14656 da26 8985C4EC 		movl	%eax, -4924(%rbp)
+ 14656      FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 14657              		.loc 2 1659 0
+ 14658 da2c 8B85C4EC 		movl	-4924(%rbp), %eax
+ 14658      FFFF
+ 14659 da32 89853CE1 		movl	%eax, -7876(%rbp)
+ 14659      FFFF
+ 14660 da38 8B853CE1 		movl	-7876(%rbp), %eax
+ 14660      FFFF
+ 14661 da3e 898538E1 		movl	%eax, -7880(%rbp)
+ 14661      FFFF
+ 14662 da44 8B8538E1 		movl	-7880(%rbp), %eax
+ 14662      FFFF
+ 14663 da4a 898534E1 		movl	%eax, -7884(%rbp)
+ 14663      FFFF
+ 14664 da50 8B8534E1 		movl	-7884(%rbp), %eax
+ 14664      FFFF
+ 14665 da56 898530E1 		movl	%eax, -7888(%rbp)
+ 14665      FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 14666              		.loc 2 1660 0
+ 14667 da5c F30F6F85 		movdqu	-7888(%rbp), %xmm0
+ 14667      30E1FFFF 
+ 14668              	.LBE1995:
+ 14669              	.LBE1994:
+1927:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(3);         /* k12 : k13 : k14 : k15 */
+ 14670              		.loc 2 1927 0
+ 14671 da64 F30F7F85 		movdqu	%xmm0, -5664(%rbp)
+ 14671      E0E9FFFF 
+ 14672 da6c F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 14672      D0E9FFFF 
+ 14673 da74 F30F7F85 		movdqu	%xmm0, -4912(%rbp)
+ 14673      D0ECFFFF 
+ 14674              	.LBB1998:
+ 14675              	.LBB1999:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 461
+
+
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 14676              		.loc 2 1565 0
+ 14677 da7c F30F6F85 		movdqu	-4912(%rbp), %xmm0
+ 14677      D0ECFFFF 
+ 14678 da84 660F7F85 		movdqa	%xmm0, -8720(%rbp)
+ 14678      F0DDFFFF 
+ 14679 da8c 660F6F85 		movdqa	-8720(%rbp), %xmm0
+ 14679      F0DDFFFF 
+ 14680 da94 F30F7F85 		movdqu	%xmm0, -4896(%rbp)
+ 14680      E0ECFFFF 
+ 14681              	.LBB2000:
+ 14682              	.LBB2001:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 14683              		.loc 2 1282 0
+ 14684 da9c F30F6F85 		movdqu	-4896(%rbp), %xmm0
+ 14684      E0ECFFFF 
+ 14685 daa4 F30F7F85 		movdqu	%xmm0, -7872(%rbp)
+ 14685      40E1FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 14686              		.loc 2 1283 0
+ 14687 daac 8B8548E1 		movl	-7864(%rbp), %eax
+ 14687      FFFF
+ 14688 dab2 89854CE1 		movl	%eax, -7860(%rbp)
+ 14688      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 14689              		.loc 2 1284 0
+ 14690 dab8 8B8544E1 		movl	-7868(%rbp), %eax
+ 14690      FFFF
+ 14691 dabe 898548E1 		movl	%eax, -7864(%rbp)
+ 14691      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 14692              		.loc 2 1285 0
+ 14693 dac4 8B8540E1 		movl	-7872(%rbp), %eax
+ 14693      FFFF
+ 14694 daca 898544E1 		movl	%eax, -7868(%rbp)
+ 14694      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 14695              		.loc 2 1286 0
+ 14696 dad0 C78540E1 		movl	$0, -7872(%rbp)
+ 14696      FFFF0000 
+ 14696      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 14697              		.loc 2 1287 0
+ 14698 dada F30F6F85 		movdqu	-7872(%rbp), %xmm0
+ 14698      40E1FFFF 
+ 14699              	.LBE2001:
+ 14700              	.LBE2000:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14701              		.loc 2 1567 0
+ 14702 dae2 660F7F85 		movdqa	%xmm0, -8720(%rbp)
+ 14702      F0DDFFFF 
+ 14703 daea 660F6F85 		movdqa	-8720(%rbp), %xmm0
+ 14703      F0DDFFFF 
+ 14704 daf2 660FEF85 		pxor	-4912(%rbp), %xmm0
+ 14704      D0ECFFFF 
+ 14705 dafa F30F7F85 		movdqu	%xmm0, -4912(%rbp)
+ 14705      D0ECFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 462
+
+
+ 14706 db02 660F6F85 		movdqa	-8720(%rbp), %xmm0
+ 14706      F0DDFFFF 
+ 14707 db0a F30F7F85 		movdqu	%xmm0, -4880(%rbp)
+ 14707      F0ECFFFF 
+ 14708              	.LBB2002:
+ 14709              	.LBB2003:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 14710              		.loc 2 1282 0
+ 14711 db12 F30F6F85 		movdqu	-4880(%rbp), %xmm0
+ 14711      F0ECFFFF 
+ 14712 db1a F30F7F85 		movdqu	%xmm0, -7856(%rbp)
+ 14712      50E1FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 14713              		.loc 2 1283 0
+ 14714 db22 8B8558E1 		movl	-7848(%rbp), %eax
+ 14714      FFFF
+ 14715 db28 89855CE1 		movl	%eax, -7844(%rbp)
+ 14715      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 14716              		.loc 2 1284 0
+ 14717 db2e 8B8554E1 		movl	-7852(%rbp), %eax
+ 14717      FFFF
+ 14718 db34 898558E1 		movl	%eax, -7848(%rbp)
+ 14718      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 14719              		.loc 2 1285 0
+ 14720 db3a 8B8550E1 		movl	-7856(%rbp), %eax
+ 14720      FFFF
+ 14721 db40 898554E1 		movl	%eax, -7852(%rbp)
+ 14721      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 14722              		.loc 2 1286 0
+ 14723 db46 C78550E1 		movl	$0, -7856(%rbp)
+ 14723      FFFF0000 
+ 14723      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 14724              		.loc 2 1287 0
+ 14725 db50 F30F6F85 		movdqu	-7856(%rbp), %xmm0
+ 14725      50E1FFFF 
+ 14726              	.LBE2003:
+ 14727              	.LBE2002:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14728              		.loc 2 1568 0
+ 14729 db58 660F7F85 		movdqa	%xmm0, -8720(%rbp)
+ 14729      F0DDFFFF 
+ 14730 db60 660F6F85 		movdqa	-8720(%rbp), %xmm0
+ 14730      F0DDFFFF 
+ 14731 db68 660FEF85 		pxor	-4912(%rbp), %xmm0
+ 14731      D0ECFFFF 
+ 14732 db70 F30F7F85 		movdqu	%xmm0, -4912(%rbp)
+ 14732      D0ECFFFF 
+ 14733 db78 660F6F85 		movdqa	-8720(%rbp), %xmm0
+ 14733      F0DDFFFF 
+ 14734 db80 F30F7F85 		movdqu	%xmm0, -4864(%rbp)
+ 14734      00EDFFFF 
+ 14735              	.LBB2004:
+ 14736              	.LBB2005:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 463
+
+
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 14737              		.loc 2 1282 0
+ 14738 db88 F30F6F85 		movdqu	-4864(%rbp), %xmm0
+ 14738      00EDFFFF 
+ 14739 db90 F30F7F85 		movdqu	%xmm0, -7840(%rbp)
+ 14739      60E1FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 14740              		.loc 2 1283 0
+ 14741 db98 8B8568E1 		movl	-7832(%rbp), %eax
+ 14741      FFFF
+ 14742 db9e 89856CE1 		movl	%eax, -7828(%rbp)
+ 14742      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 14743              		.loc 2 1284 0
+ 14744 dba4 8B8564E1 		movl	-7836(%rbp), %eax
+ 14744      FFFF
+ 14745 dbaa 898568E1 		movl	%eax, -7832(%rbp)
+ 14745      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 14746              		.loc 2 1285 0
+ 14747 dbb0 8B8560E1 		movl	-7840(%rbp), %eax
+ 14747      FFFF
+ 14748 dbb6 898564E1 		movl	%eax, -7836(%rbp)
+ 14748      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 14749              		.loc 2 1286 0
+ 14750 dbbc C78560E1 		movl	$0, -7840(%rbp)
+ 14750      FFFF0000 
+ 14750      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 14751              		.loc 2 1287 0
+ 14752 dbc6 F30F6F85 		movdqu	-7840(%rbp), %xmm0
+ 14752      60E1FFFF 
+ 14753              	.LBE2005:
+ 14754              	.LBE2004:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14755              		.loc 2 1569 0
+ 14756 dbce 660F7F85 		movdqa	%xmm0, -8720(%rbp)
+ 14756      F0DDFFFF 
+ 14757 dbd6 660F6F85 		movdqa	-8720(%rbp), %xmm0
+ 14757      F0DDFFFF 
+ 14758 dbde 660FEF85 		pxor	-4912(%rbp), %xmm0
+ 14758      D0ECFFFF 
+ 14759 dbe6 F30F7F85 		movdqu	%xmm0, -4912(%rbp)
+ 14759      D0ECFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 14760              		.loc 2 1571 0
+ 14761 dbee F30F6F85 		movdqu	-4912(%rbp), %xmm0
+ 14761      D0ECFFFF 
+ 14762              	.LBE1999:
+ 14763              	.LBE1998:
+1927:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(3);         /* k12 : k13 : k14 : k15 */
+ 14764              		.loc 2 1927 0
+ 14765 dbf6 F30F7F85 		movdqu	%xmm0, -5680(%rbp)
+ 14765      D0E9FFFF 
+ 14766 dbfe F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 14766      D0E9FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 464
+
+
+ 14767 dc06 F30F7F85 		movdqu	%xmm0, -4832(%rbp)
+ 14767      20EDFFFF 
+ 14768 dc0e F30F6F85 		movdqu	-5664(%rbp), %xmm0
+ 14768      E0E9FFFF 
+ 14769 dc16 F30F7F85 		movdqu	%xmm0, -4848(%rbp)
+ 14769      10EDFFFF 
+ 14770              	.LBB2006:
+ 14771              	.LBB2007:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 14772              		.loc 2 178 0
+ 14773 dc1e F30F6F85 		movdqu	-4848(%rbp), %xmm0
+ 14773      10EDFFFF 
+ 14774 dc26 F30F6F8D 		movdqu	-4832(%rbp), %xmm1
+ 14774      20EDFFFF 
+ 14775 dc2e 660FEFC1 		pxor	%xmm1, %xmm0
+ 14776              	.LBE2007:
+ 14777              	.LBE2006:
+1927:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(3);         /* k12 : k13 : k14 : k15 */
+ 14778              		.loc 2 1927 0
+ 14779 dc32 F30F7F85 		movdqu	%xmm0, -5680(%rbp)
+ 14779      D0E9FFFF 
+ 14780 dc3a 488B85D8 		movq	-8232(%rbp), %rax
+ 14780      DFFFFF
+ 14781 dc41 4883C030 		addq	$48, %rax
+ 14782 dc45 F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 14782      D0E9FFFF 
+ 14783 dc4d F30F7F00 		movdqu	%xmm0, (%rax)
+ 14784 dc51 F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 14784      D0E9FFFF 
+ 14785 dc59 F30F7F85 		movdqu	%xmm0, -4800(%rbp)
+ 14785      40EDFFFF 
+ 14786              	.LBB2008:
+ 14787              	.LBB2009:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 14788              		.loc 2 1681 0
+ 14789 dc61 B8020000 		movl	$2, %eax
+ 14789      00
+ 14790 dc66 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 14790      00000000 
+ 14791 dc6e F30F7F85 		movdqu	%xmm0, -4768(%rbp)
+ 14791      60EDFFFF 
+ 14792 dc76 89855CED 		movl	%eax, -4772(%rbp)
+ 14792      FFFF
+ 14793              	.LBB2010:
+ 14794              	.LBB2011:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 14795              		.loc 2 522 0
+ 14796 dc7c F30F6F85 		movdqu	-4768(%rbp), %xmm0
+ 14796      60EDFFFF 
+ 14797 dc84 F30F7F85 		movdqu	%xmm0, -7760(%rbp)
+ 14797      B0E1FFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 14798              		.loc 2 523 0
+ 14799 dc8c B8030000 		movl	$3, %eax
+ 14799      00
+ 14800 dc91 4898     		cltq
+ 14801 dc93 8B955CED 		movl	-4772(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 465
+
+
+ 14801      FFFF
+ 14802 dc99 899485B0 		movl	%edx, -7760(%rbp,%rax,4)
+ 14802      E1FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 14803              		.loc 2 524 0
+ 14804 dca0 F30F6F85 		movdqu	-7760(%rbp), %xmm0
+ 14804      B0E1FFFF 
+ 14805 dca8 F30F7F85 		movdqu	%xmm0, -4768(%rbp)
+ 14805      60EDFFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 14806              		.loc 2 526 0
+ 14807 dcb0 F30F6F85 		movdqu	-4768(%rbp), %xmm0
+ 14807      60EDFFFF 
+ 14808              	.LBE2011:
+ 14809              	.LBE2010:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 14810              		.loc 2 1681 0
+ 14811 dcb8 660F7F85 		movdqa	%xmm0, -8688(%rbp)
+ 14811      10DEFFFF 
+ 14812 dcc0 F30F6F85 		movdqu	-4800(%rbp), %xmm0
+ 14812      40EDFFFF 
+ 14813 dcc8 F30F7F85 		movdqu	%xmm0, -4752(%rbp)
+ 14813      70EDFFFF 
+ 14814 dcd0 F30F6F85 		movdqu	-4752(%rbp), %xmm0
+ 14814      70EDFFFF 
+ 14815 dcd8 F30F7F85 		movdqu	%xmm0, -4720(%rbp)
+ 14815      90EDFFFF 
+ 14816 dce0 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 14816      000000
+ 14817 dce7 48898588 		movq	%rax, -4728(%rbp)
+ 14817      EDFFFF
+ 14818              	.LBB2012:
+ 14819              	.LBB2013:
+ 14820              	.LBB2014:
+ 14821              	.LBB2015:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 14822              		.loc 2 851 0
+ 14823 dcee 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 14823      00000000 
+ 14824 dcf6 F30F7F85 		movdqu	%xmm0, -4688(%rbp)
+ 14824      B0EDFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 14825              		.loc 2 854 0
+ 14826 dcfe 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 14826      00000000 
+ 14827 dd06 F30F6F8D 		movdqu	-4720(%rbp), %xmm1
+ 14827      90EDFFFF 
+ 14828 dd0e F30F7F8D 		movdqu	%xmm1, -4608(%rbp)
+ 14828      00EEFFFF 
+ 14829 dd16 F30F7F85 		movdqu	%xmm0, -4624(%rbp)
+ 14829      F0EDFFFF 
+ 14830              	.LBB2016:
+ 14831              	.LBB2017:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 14832              		.loc 2 206 0
+ 14833 dd1e F30F6F85 		movdqu	-4624(%rbp), %xmm0
+ 14833      F0EDFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 466
+
+
+ 14834 dd26 F30F6F8D 		movdqu	-4608(%rbp), %xmm1
+ 14834      00EEFFFF 
+ 14835 dd2e 660FDBC1 		pand	%xmm1, %xmm0
+ 14836              	.LBE2017:
+ 14837              	.LBE2016:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 14838              		.loc 2 854 0
+ 14839 dd32 F30F7F85 		movdqu	%xmm0, -4640(%rbp)
+ 14839      E0EDFFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 14840              		.loc 2 862 0
+ 14841 dd3a 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 14841      00000000 
+ 14842 dd42 F30F6F8D 		movdqu	-4720(%rbp), %xmm1
+ 14842      90EDFFFF 
+ 14843 dd4a F30F7F8D 		movdqu	%xmm1, -4576(%rbp)
+ 14843      20EEFFFF 
+ 14844 dd52 F30F7F85 		movdqu	%xmm0, -4592(%rbp)
+ 14844      10EEFFFF 
+ 14845              	.LBB2018:
+ 14846              		.loc 2 2642 0
+ 14847 dd5a 0FB68520 		movzbl	-4576(%rbp), %eax
+ 14847      EEFFFF
+ 14848 dd61 0FB69510 		movzbl	-4592(%rbp), %edx
+ 14848      EEFFFF
+ 14849 dd68 0FB6C0   		movzbl	%al, %eax
+ 14850 dd6b 6689853E 		movw	%ax, -8898(%rbp)
+ 14850      DDFFFF
+ 14851 dd72 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 14851      DDFFFF
+ 14852 dd79 F6F2     		divb	%dl
+ 14853 dd7b 4189C7   		movl	%eax, %r15d
+ 14854 dd7e 0FB68521 		movzbl	-4575(%rbp), %eax
+ 14854      EEFFFF
+ 14855 dd85 0FB69511 		movzbl	-4591(%rbp), %edx
+ 14855      EEFFFF
+ 14856 dd8c 0FB6C0   		movzbl	%al, %eax
+ 14857 dd8f 6689853E 		movw	%ax, -8898(%rbp)
+ 14857      DDFFFF
+ 14858 dd96 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 14858      DDFFFF
+ 14859 dd9d F6F2     		divb	%dl
+ 14860 dd9f 88852FDE 		movb	%al, -8657(%rbp)
+ 14860      FFFF
+ 14861 dda5 0FB68522 		movzbl	-4574(%rbp), %eax
+ 14861      EEFFFF
+ 14862 ddac 0FB69512 		movzbl	-4590(%rbp), %edx
+ 14862      EEFFFF
+ 14863 ddb3 0FB6C0   		movzbl	%al, %eax
+ 14864 ddb6 6689853E 		movw	%ax, -8898(%rbp)
+ 14864      DDFFFF
+ 14865 ddbd 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 14865      DDFFFF
+ 14866 ddc4 F6F2     		divb	%dl
+ 14867 ddc6 88852EDE 		movb	%al, -8658(%rbp)
+ 14867      FFFF
+ 14868 ddcc 0FB68523 		movzbl	-4573(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 467
+
+
+ 14868      EEFFFF
+ 14869 ddd3 0FB69513 		movzbl	-4589(%rbp), %edx
+ 14869      EEFFFF
+ 14870 ddda 0FB6C0   		movzbl	%al, %eax
+ 14871 dddd 6689853E 		movw	%ax, -8898(%rbp)
+ 14871      DDFFFF
+ 14872 dde4 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 14872      DDFFFF
+ 14873 ddeb F6F2     		divb	%dl
+ 14874 dded 88852DDE 		movb	%al, -8659(%rbp)
+ 14874      FFFF
+ 14875 ddf3 0FB68524 		movzbl	-4572(%rbp), %eax
+ 14875      EEFFFF
+ 14876 ddfa 0FB69514 		movzbl	-4588(%rbp), %edx
+ 14876      EEFFFF
+ 14877 de01 0FB6C0   		movzbl	%al, %eax
+ 14878 de04 6689853E 		movw	%ax, -8898(%rbp)
+ 14878      DDFFFF
+ 14879 de0b 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 14879      DDFFFF
+ 14880 de12 F6F2     		divb	%dl
+ 14881 de14 88852CDE 		movb	%al, -8660(%rbp)
+ 14881      FFFF
+ 14882 de1a 0FB68525 		movzbl	-4571(%rbp), %eax
+ 14882      EEFFFF
+ 14883 de21 0FB69515 		movzbl	-4587(%rbp), %edx
+ 14883      EEFFFF
+ 14884 de28 0FB6C0   		movzbl	%al, %eax
+ 14885 de2b 6689853E 		movw	%ax, -8898(%rbp)
+ 14885      DDFFFF
+ 14886 de32 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 14886      DDFFFF
+ 14887 de39 F6F2     		divb	%dl
+ 14888 de3b 4189C1   		movl	%eax, %r9d
+ 14889 de3e 0FB68526 		movzbl	-4570(%rbp), %eax
+ 14889      EEFFFF
+ 14890 de45 0FB69516 		movzbl	-4586(%rbp), %edx
+ 14890      EEFFFF
+ 14891 de4c 0FB6C0   		movzbl	%al, %eax
+ 14892 de4f 6689853E 		movw	%ax, -8898(%rbp)
+ 14892      DDFFFF
+ 14893 de56 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 14893      DDFFFF
+ 14894 de5d F6F2     		divb	%dl
+ 14895 de5f 89C7     		movl	%eax, %edi
+ 14896 de61 0FB68527 		movzbl	-4569(%rbp), %eax
+ 14896      EEFFFF
+ 14897 de68 0FB69517 		movzbl	-4585(%rbp), %edx
+ 14897      EEFFFF
+ 14898 de6f 0FB6C0   		movzbl	%al, %eax
+ 14899 de72 6689853E 		movw	%ax, -8898(%rbp)
+ 14899      DDFFFF
+ 14900 de79 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 14900      DDFFFF
+ 14901 de80 F6F2     		divb	%dl
+ 14902 de82 89C3     		movl	%eax, %ebx
+ 14903 de84 0FB68528 		movzbl	-4568(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 468
+
+
+ 14903      EEFFFF
+ 14904 de8b 0FB69518 		movzbl	-4584(%rbp), %edx
+ 14904      EEFFFF
+ 14905 de92 0FB6C0   		movzbl	%al, %eax
+ 14906 de95 6689853E 		movw	%ax, -8898(%rbp)
+ 14906      DDFFFF
+ 14907 de9c 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 14907      DDFFFF
+ 14908 dea3 F6F2     		divb	%dl
+ 14909 dea5 4189C2   		movl	%eax, %r10d
+ 14910 dea8 0FB68529 		movzbl	-4567(%rbp), %eax
+ 14910      EEFFFF
+ 14911 deaf 0FB69519 		movzbl	-4583(%rbp), %edx
+ 14911      EEFFFF
+ 14912 deb6 0FB6C0   		movzbl	%al, %eax
+ 14913 deb9 6689853E 		movw	%ax, -8898(%rbp)
+ 14913      DDFFFF
+ 14914 dec0 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 14914      DDFFFF
+ 14915 dec7 F6F2     		divb	%dl
+ 14916 dec9 4189C3   		movl	%eax, %r11d
+ 14917 decc 0FB6852A 		movzbl	-4566(%rbp), %eax
+ 14917      EEFFFF
+ 14918 ded3 0FB6951A 		movzbl	-4582(%rbp), %edx
+ 14918      EEFFFF
+ 14919 deda 0FB6C0   		movzbl	%al, %eax
+ 14920 dedd 6689853E 		movw	%ax, -8898(%rbp)
+ 14920      DDFFFF
+ 14921 dee4 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 14921      DDFFFF
+ 14922 deeb F6F2     		divb	%dl
+ 14923 deed 4189C4   		movl	%eax, %r12d
+ 14924 def0 0FB6852B 		movzbl	-4565(%rbp), %eax
+ 14924      EEFFFF
+ 14925 def7 0FB6951B 		movzbl	-4581(%rbp), %edx
+ 14925      EEFFFF
+ 14926 defe 0FB6C0   		movzbl	%al, %eax
+ 14927 df01 6689853E 		movw	%ax, -8898(%rbp)
+ 14927      DDFFFF
+ 14928 df08 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 14928      DDFFFF
+ 14929 df0f F6F2     		divb	%dl
+ 14930 df11 4189C5   		movl	%eax, %r13d
+ 14931 df14 0FB6852C 		movzbl	-4564(%rbp), %eax
+ 14931      EEFFFF
+ 14932 df1b 0FB6951C 		movzbl	-4580(%rbp), %edx
+ 14932      EEFFFF
+ 14933 df22 0FB6C0   		movzbl	%al, %eax
+ 14934 df25 6689853E 		movw	%ax, -8898(%rbp)
+ 14934      DDFFFF
+ 14935 df2c 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 14935      DDFFFF
+ 14936 df33 F6F2     		divb	%dl
+ 14937 df35 4189C6   		movl	%eax, %r14d
+ 14938 df38 0FB6852D 		movzbl	-4563(%rbp), %eax
+ 14938      EEFFFF
+ 14939 df3f 0FB6951D 		movzbl	-4579(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 469
+
+
+ 14939      EEFFFF
+ 14940 df46 0FB6C0   		movzbl	%al, %eax
+ 14941 df49 6689853E 		movw	%ax, -8898(%rbp)
+ 14941      DDFFFF
+ 14942 df50 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 14942      DDFFFF
+ 14943 df57 F6F2     		divb	%dl
+ 14944 df59 4189C0   		movl	%eax, %r8d
+ 14945 df5c 0FB6852E 		movzbl	-4562(%rbp), %eax
+ 14945      EEFFFF
+ 14946 df63 0FB6951E 		movzbl	-4578(%rbp), %edx
+ 14946      EEFFFF
+ 14947 df6a 0FB6C0   		movzbl	%al, %eax
+ 14948 df6d 6689853E 		movw	%ax, -8898(%rbp)
+ 14948      DDFFFF
+ 14949 df74 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 14949      DDFFFF
+ 14950 df7b F6F2     		divb	%dl
+ 14951 df7d 89C6     		movl	%eax, %esi
+ 14952 df7f 0FB6852F 		movzbl	-4561(%rbp), %eax
+ 14952      EEFFFF
+ 14953 df86 0FB6951F 		movzbl	-4577(%rbp), %edx
+ 14953      EEFFFF
+ 14954 df8d 0FB6C0   		movzbl	%al, %eax
+ 14955 df90 6689853E 		movw	%ax, -8898(%rbp)
+ 14955      DDFFFF
+ 14956 df97 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 14956      DDFFFF
+ 14957 df9e F6F2     		divb	%dl
+ 14958 dfa0 89C1     		movl	%eax, %ecx
+ 14959              	.LBB2019:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 14960              		.loc 2 346 0
+ 14961 dfa2 0FB6D3   		movzbl	%bl, %edx
+ 14962 dfa5 400FB6C7 		movzbl	%dil, %eax
+ 14963 dfa9 48C1E208 		salq	$8, %rdx
+ 14964 dfad 4809C2   		orq	%rax, %rdx
+ 14965 dfb0 410FB6C1 		movzbl	%r9b, %eax
+ 14966 dfb4 48C1E208 		salq	$8, %rdx
+ 14967 dfb8 4809C2   		orq	%rax, %rdx
+ 14968 dfbb 0FB6852C 		movzbl	-8660(%rbp), %eax
+ 14968      DEFFFF
+ 14969 dfc2 48C1E208 		salq	$8, %rdx
+ 14970 dfc6 4809C2   		orq	%rax, %rdx
+ 14971 dfc9 0FB6852D 		movzbl	-8659(%rbp), %eax
+ 14971      DEFFFF
+ 14972 dfd0 48C1E208 		salq	$8, %rdx
+ 14973 dfd4 4809C2   		orq	%rax, %rdx
+ 14974 dfd7 0FB6852E 		movzbl	-8658(%rbp), %eax
+ 14974      DEFFFF
+ 14975 dfde 48C1E208 		salq	$8, %rdx
+ 14976 dfe2 4809C2   		orq	%rax, %rdx
+ 14977 dfe5 0FB6852F 		movzbl	-8657(%rbp), %eax
+ 14977      DEFFFF
+ 14978 dfec 48C1E208 		salq	$8, %rdx
+ 14979 dff0 4809C2   		orq	%rax, %rdx
+ 14980 dff3 410FB6C7 		movzbl	%r15b, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 470
+
+
+ 14981 dff7 48C1E208 		salq	$8, %rdx
+ 14982 dffb 4809C2   		orq	%rax, %rdx
+ 14983 dffe 0FB6C1   		movzbl	%cl, %eax
+ 14984 e001 400FB6CE 		movzbl	%sil, %ecx
+ 14985 e005 48C1E008 		salq	$8, %rax
+ 14986 e009 4809C8   		orq	%rcx, %rax
+ 14987 e00c 410FB6C8 		movzbl	%r8b, %ecx
+ 14988 e010 48C1E008 		salq	$8, %rax
+ 14989 e014 4809C8   		orq	%rcx, %rax
+ 14990 e017 410FB6CE 		movzbl	%r14b, %ecx
+ 14991 e01b 48C1E008 		salq	$8, %rax
+ 14992 e01f 4809C8   		orq	%rcx, %rax
+ 14993 e022 410FB6CD 		movzbl	%r13b, %ecx
+ 14994 e026 48C1E008 		salq	$8, %rax
+ 14995 e02a 4809C8   		orq	%rcx, %rax
+ 14996 e02d 410FB6CC 		movzbl	%r12b, %ecx
+ 14997 e031 48C1E008 		salq	$8, %rax
+ 14998 e035 4809C8   		orq	%rcx, %rax
+ 14999 e038 410FB6CB 		movzbl	%r11b, %ecx
+ 15000 e03c 48C1E008 		salq	$8, %rax
+ 15001 e040 4809C8   		orq	%rcx, %rax
+ 15002 e043 410FB6CA 		movzbl	%r10b, %ecx
+ 15003 e047 48C1E008 		salq	$8, %rax
+ 15004 e04b 4809C8   		orq	%rcx, %rax
+ 15005 e04e 48899590 		movq	%rdx, -8816(%rbp)
+ 15005      DDFFFF
+ 15006 e055 48898598 		movq	%rax, -8808(%rbp)
+ 15006      DDFFFF
+ 15007 e05c 660F6F85 		movdqa	-8816(%rbp), %xmm0
+ 15007      90DDFFFF 
+ 15008              	.LBE2019:
+ 15009              	.LBE2018:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 15010              		.loc 2 862 0
+ 15011 e064 F30F7F85 		movdqu	%xmm0, -4656(%rbp)
+ 15011      D0EDFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 15012              		.loc 2 866 0
+ 15013 e06c C785ACED 		movl	$0, -4692(%rbp)
+ 15013      FFFF0000 
+ 15013      0000
+ 15014 e076 E9860200 		jmp	.L348
+ 15014      00
+ 15015              	.L357:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 15016              		.loc 2 868 0
+ 15017 e07b 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 15017      00000000 
+ 15018 e083 F30F7F85 		movdqu	%xmm0, -4544(%rbp)
+ 15018      40EEFFFF 
+ 15019 e08b F30F6F85 		movdqu	-4656(%rbp), %xmm0
+ 15019      D0EDFFFF 
+ 15020 e093 F30F7F85 		movdqu	%xmm0, -4560(%rbp)
+ 15020      30EEFFFF 
+ 15021              	.LBB2020:
+ 15022              	.LBB2021:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 471
+
+
+ 15023              		.loc 2 380 0
+ 15024 e09b F30F6F85 		movdqu	-4544(%rbp), %xmm0
+ 15024      40EEFFFF 
+ 15025 e0a3 F30F7F85 		movdqu	%xmm0, -7728(%rbp)
+ 15025      D0E1FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 15026              		.loc 2 381 0
+ 15027 e0ab F30F6F85 		movdqu	-4560(%rbp), %xmm0
+ 15027      30EEFFFF 
+ 15028 e0b3 F30F7F85 		movdqu	%xmm0, -7744(%rbp)
+ 15028      C0E1FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 15029              		.loc 2 383 0
+ 15030 e0bb C7855CEE 		movl	$0, -4516(%rbp)
+ 15030      FFFF0000 
+ 15030      0000
+ 15031 e0c5 EB5C     		jmp	.L349
+ 15032              	.L352:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 15033              		.loc 2 385 0
+ 15034 e0c7 8B855CEE 		movl	-4516(%rbp), %eax
+ 15034      FFFF
+ 15035 e0cd 89C0     		mov	%eax, %eax
+ 15036 e0cf 0FB68405 		movzbl	-7744(%rbp,%rax), %eax
+ 15036      C0E1FFFF 
+ 15037 e0d7 84C0     		testb	%al, %al
+ 15038 e0d9 7912     		jns	.L350
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 15039              		.loc 2 386 0
+ 15040 e0db 8B855CEE 		movl	-4516(%rbp), %eax
+ 15040      FFFF
+ 15041 e0e1 89C0     		mov	%eax, %eax
+ 15042 e0e3 C68405E0 		movb	$0, -7712(%rbp,%rax)
+ 15042      E1FFFF00 
+ 15043 e0eb EB2F     		jmp	.L351
+ 15044              	.L350:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 15045              		.loc 2 388 0
+ 15046 e0ed 8B8D5CEE 		movl	-4516(%rbp), %ecx
+ 15046      FFFF
+ 15047 e0f3 8B855CEE 		movl	-4516(%rbp), %eax
+ 15047      FFFF
+ 15048 e0f9 89C0     		mov	%eax, %eax
+ 15049 e0fb 0FB68405 		movzbl	-7744(%rbp,%rax), %eax
+ 15049      C0E1FFFF 
+ 15050 e103 0FB6C0   		movzbl	%al, %eax
+ 15051 e106 83E00F   		andl	$15, %eax
+ 15052 e109 4898     		cltq
+ 15053 e10b 0FB69405 		movzbl	-7728(%rbp,%rax), %edx
+ 15053      D0E1FFFF 
+ 15054 e113 89C8     		mov	%ecx, %eax
+ 15055 e115 889405E0 		movb	%dl, -7712(%rbp,%rax)
+ 15055      E1FFFF
+ 15056              	.L351:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 15057              		.loc 2 383 0
+ 15058 e11c 83855CEE 		addl	$1, -4516(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 472
+
+
+ 15058      FFFF01
+ 15059              	.L349:
+ 15060 e123 83BD5CEE 		cmpl	$15, -4516(%rbp)
+ 15060      FFFF0F
+ 15061 e12a 769B     		jbe	.L352
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 15062              		.loc 2 391 0
+ 15063 e12c F30F6F85 		movdqu	-7712(%rbp), %xmm0
+ 15063      E0E1FFFF 
+ 15064              	.LBE2021:
+ 15065              	.LBE2020:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 15066              		.loc 2 868 0
+ 15067 e134 F30F7F85 		movdqu	%xmm0, -4672(%rbp)
+ 15067      C0EDFFFF 
+ 15068 e13c F30F6F85 		movdqu	-4640(%rbp), %xmm0
+ 15068      E0EDFFFF 
+ 15069 e144 F30F7F85 		movdqu	%xmm0, -4496(%rbp)
+ 15069      70EEFFFF 
+ 15070 e14c F30F6F85 		movdqu	-4672(%rbp), %xmm0
+ 15070      C0EDFFFF 
+ 15071 e154 F30F7F85 		movdqu	%xmm0, -4512(%rbp)
+ 15071      60EEFFFF 
+ 15072              	.LBB2022:
+ 15073              	.LBB2023:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 15074              		.loc 2 234 0
+ 15075 e15c F30F6F85 		movdqu	-4512(%rbp), %xmm0
+ 15075      60EEFFFF 
+ 15076 e164 F30F6F8D 		movdqu	-4496(%rbp), %xmm1
+ 15076      70EEFFFF 
+ 15077 e16c 660FEBC1 		por	%xmm1, %xmm0
+ 15078              	.LBE2023:
+ 15079              	.LBE2022:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 15080              		.loc 2 870 0
+ 15081 e170 F30F7F85 		movdqu	%xmm0, -4672(%rbp)
+ 15081      C0EDFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 15082              		.loc 2 872 0
+ 15083 e178 8B85ACED 		mov	-4692(%rbp), %eax
+ 15083      FFFF
+ 15084 e17e 48C1E004 		salq	$4, %rax
+ 15085 e182 48038588 		addq	-4728(%rbp), %rax
+ 15085      EDFFFF
+ 15086 e189 660F6F00 		movdqa	(%rax), %xmm0
+ 15087 e18d F30F7F85 		movdqu	%xmm0, -4464(%rbp)
+ 15087      90EEFFFF 
+ 15088 e195 F30F6F85 		movdqu	-4672(%rbp), %xmm0
+ 15088      C0EDFFFF 
+ 15089 e19d F30F7F85 		movdqu	%xmm0, -4480(%rbp)
+ 15089      80EEFFFF 
+ 15090              	.LBB2024:
+ 15091              	.LBB2025:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 15092              		.loc 2 380 0
+ 15093 e1a5 F30F6F85 		movdqu	-4464(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 473
+
+
+ 15093      90EEFFFF 
+ 15094 e1ad F30F7F85 		movdqu	%xmm0, -7680(%rbp)
+ 15094      00E2FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 15095              		.loc 2 381 0
+ 15096 e1b5 F30F6F85 		movdqu	-4480(%rbp), %xmm0
+ 15096      80EEFFFF 
+ 15097 e1bd F30F7F85 		movdqu	%xmm0, -7696(%rbp)
+ 15097      F0E1FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 15098              		.loc 2 383 0
+ 15099 e1c5 C785ACEE 		movl	$0, -4436(%rbp)
+ 15099      FFFF0000 
+ 15099      0000
+ 15100 e1cf EB5C     		jmp	.L353
+ 15101              	.L356:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 15102              		.loc 2 385 0
+ 15103 e1d1 8B85ACEE 		movl	-4436(%rbp), %eax
+ 15103      FFFF
+ 15104 e1d7 89C0     		mov	%eax, %eax
+ 15105 e1d9 0FB68405 		movzbl	-7696(%rbp,%rax), %eax
+ 15105      F0E1FFFF 
+ 15106 e1e1 84C0     		testb	%al, %al
+ 15107 e1e3 7912     		jns	.L354
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 15108              		.loc 2 386 0
+ 15109 e1e5 8B85ACEE 		movl	-4436(%rbp), %eax
+ 15109      FFFF
+ 15110 e1eb 89C0     		mov	%eax, %eax
+ 15111 e1ed C6840510 		movb	$0, -7664(%rbp,%rax)
+ 15111      E2FFFF00 
+ 15112 e1f5 EB2F     		jmp	.L355
+ 15113              	.L354:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 15114              		.loc 2 388 0
+ 15115 e1f7 8B8DACEE 		movl	-4436(%rbp), %ecx
+ 15115      FFFF
+ 15116 e1fd 8B85ACEE 		movl	-4436(%rbp), %eax
+ 15116      FFFF
+ 15117 e203 89C0     		mov	%eax, %eax
+ 15118 e205 0FB68405 		movzbl	-7696(%rbp,%rax), %eax
+ 15118      F0E1FFFF 
+ 15119 e20d 0FB6C0   		movzbl	%al, %eax
+ 15120 e210 83E00F   		andl	$15, %eax
+ 15121 e213 4898     		cltq
+ 15122 e215 0FB69405 		movzbl	-7680(%rbp,%rax), %edx
+ 15122      00E2FFFF 
+ 15123 e21d 89C8     		mov	%ecx, %eax
+ 15124 e21f 88940510 		movb	%dl, -7664(%rbp,%rax)
+ 15124      E2FFFF
+ 15125              	.L355:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 15126              		.loc 2 383 0
+ 15127 e226 8385ACEE 		addl	$1, -4436(%rbp)
+ 15127      FFFF01
+ 15128              	.L353:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 474
+
+
+ 15129 e22d 83BDACEE 		cmpl	$15, -4436(%rbp)
+ 15129      FFFF0F
+ 15130 e234 769B     		jbe	.L356
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 15131              		.loc 2 391 0
+ 15132 e236 F30F6F85 		movdqu	-7664(%rbp), %xmm0
+ 15132      10E2FFFF 
+ 15133              	.LBE2025:
+ 15134              	.LBE2024:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 15135              		.loc 2 872 0
+ 15136 e23e F30F7F85 		movdqu	%xmm0, -4672(%rbp)
+ 15136      C0EDFFFF 
+ 15137 e246 F30F6F85 		movdqu	-4688(%rbp), %xmm0
+ 15137      B0EDFFFF 
+ 15138 e24e F30F7F85 		movdqu	%xmm0, -4416(%rbp)
+ 15138      C0EEFFFF 
+ 15139 e256 F30F6F85 		movdqu	-4672(%rbp), %xmm0
+ 15139      C0EDFFFF 
+ 15140 e25e F30F7F85 		movdqu	%xmm0, -4432(%rbp)
+ 15140      B0EEFFFF 
+ 15141              	.LBB2026:
+ 15142              	.LBB2027:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 15143              		.loc 2 234 0
+ 15144 e266 F30F6F85 		movdqu	-4432(%rbp), %xmm0
+ 15144      B0EEFFFF 
+ 15145 e26e F30F6F8D 		movdqu	-4416(%rbp), %xmm1
+ 15145      C0EEFFFF 
+ 15146 e276 660FEBC1 		por	%xmm1, %xmm0
+ 15147              	.LBE2027:
+ 15148              	.LBE2026:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 15149              		.loc 2 874 0
+ 15150 e27a F30F7F85 		movdqu	%xmm0, -4688(%rbp)
+ 15150      B0EDFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 15151              		.loc 2 876 0
+ 15152 e282 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 15152      00000000 
+ 15153 e28a F30F6F8D 		movdqu	-4656(%rbp), %xmm1
+ 15153      D0EDFFFF 
+ 15154 e292 F30F7F8D 		movdqu	%xmm1, -4384(%rbp)
+ 15154      E0EEFFFF 
+ 15155 e29a F30F7F85 		movdqu	%xmm0, -4400(%rbp)
+ 15155      D0EEFFFF 
+ 15156              	.LBB2028:
+ 15157              	.LBB2029:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 15158              		.loc 2 290 0
+ 15159 e2a2 F30F6F8D 		movdqu	-4400(%rbp), %xmm1
+ 15159      D0EEFFFF 
+ 15160 e2aa F30F6F85 		movdqu	-4384(%rbp), %xmm0
+ 15160      E0EEFFFF 
+ 15161 e2b2 660FF8C1 		psubb	%xmm1, %xmm0
+ 15162              	.LBE2029:
+ 15163              	.LBE2028:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 475
+
+
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 15164              		.loc 2 876 0
+ 15165 e2b6 F30F7F85 		movdqu	%xmm0, -4656(%rbp)
+ 15165      D0EDFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 15166              		.loc 2 878 0
+ 15167 e2be 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 15167      00000000 
+ 15168 e2c6 F30F6F8D 		movdqu	-4656(%rbp), %xmm1
+ 15168      D0EDFFFF 
+ 15169 e2ce F30F7F8D 		movdqu	%xmm1, -4352(%rbp)
+ 15169      00EFFFFF 
+ 15170 e2d6 F30F7F85 		movdqu	%xmm0, -4368(%rbp)
+ 15170      F0EEFFFF 
+ 15171              	.LBB2030:
+ 15172              	.LBB2031:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 15173              		.loc 2 206 0
+ 15174 e2de F30F6F85 		movdqu	-4368(%rbp), %xmm0
+ 15174      F0EEFFFF 
+ 15175 e2e6 F30F6F8D 		movdqu	-4352(%rbp), %xmm1
+ 15175      00EFFFFF 
+ 15176 e2ee 660FDBC1 		pand	%xmm1, %xmm0
+ 15177              	.LBE2031:
+ 15178              	.LBE2030:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 15179              		.loc 2 878 0
+ 15180 e2f2 F30F7F85 		movdqu	%xmm0, -4656(%rbp)
+ 15180      D0EDFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 15181              		.loc 2 866 0
+ 15182 e2fa 8385ACED 		addl	$1, -4692(%rbp)
+ 15182      FFFF01
+ 15183              	.L348:
+ 15184 e301 83BDACED 		cmpl	$15, -4692(%rbp)
+ 15184      FFFF0F
+ 15185 e308 0F866DFD 		jbe	.L357
+ 15185      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 15186              		.loc 2 882 0
+ 15187 e30e F30F6F85 		movdqu	-4688(%rbp), %xmm0
+ 15187      B0EDFFFF 
+ 15188              	.LBE2015:
+ 15189              	.LBE2014:
+ 15190              	.LBE2013:
+ 15191              	.LBE2012:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 15192              		.loc 2 1682 0
+ 15193 e316 660F7F85 		movdqa	%xmm0, -8704(%rbp)
+ 15193      00DEFFFF 
+ 15194              	.LBB2032:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 15195              		.loc 2 1683 0
+ 15196 e31e 660F6F85 		movdqa	-8704(%rbp), %xmm0
+ 15196      00DEFFFF 
+ 15197 e326 F30F7F85 		movdqu	%xmm0, -7776(%rbp)
+ 15197      A0E1FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 476
+
+
+ 15198 e32e E8000000 		call	KDbgWriterGet at PLT
+ 15198      00
+ 15199 e333 4885C0   		testq	%rax, %rax
+ 15200 e336 7479     		je	.L359
+ 15201 e338 BF010000 		movl	$1, %edi
+ 15201      00
+ 15202 e33d E8000000 		call	KDbgCondToFlag at PLT
+ 15202      00
+ 15203 e342 4889C6   		movq	%rax, %rsi
+ 15204 e345 BF100000 		movl	$16, %edi
+ 15204      00
+ 15205 e34a E8000000 		call	KDbgTestModConds at PLT
+ 15205      00
+ 15206 e34f 84C0     		testb	%al, %al
+ 15207 e351 745E     		je	.L359
+ 15208 e353 8B85ACE1 		movl	-7764(%rbp), %eax
+ 15208      FFFF
+ 15209 e359 89C7     		movl	%eax, %edi
+ 15210 e35b E8A01CFF 		call	bswap_32
+ 15210      FF
+ 15211 e360 4189C5   		movl	%eax, %r13d
+ 15212 e363 8B85A8E1 		movl	-7768(%rbp), %eax
+ 15212      FFFF
+ 15213 e369 89C7     		movl	%eax, %edi
+ 15214 e36b E8901CFF 		call	bswap_32
+ 15214      FF
+ 15215 e370 4189C4   		movl	%eax, %r12d
+ 15216 e373 8B85A4E1 		movl	-7772(%rbp), %eax
+ 15216      FFFF
+ 15217 e379 89C7     		movl	%eax, %edi
+ 15218 e37b E8801CFF 		call	bswap_32
+ 15218      FF
+ 15219 e380 89C3     		movl	%eax, %ebx
+ 15220 e382 8B85A0E1 		movl	-7776(%rbp), %eax
+ 15220      FFFF
+ 15221 e388 89C7     		movl	%eax, %edi
+ 15222 e38a E8711CFF 		call	bswap_32
+ 15222      FF
+ 15223 e38f 4589E9   		movl	%r13d, %r9d
+ 15224 e392 4589E0   		movl	%r12d, %r8d
+ 15225 e395 89D9     		movl	%ebx, %ecx
+ 15226 e397 89C2     		movl	%eax, %edx
+ 15227 e399 488D3500 		leaq	.LC0(%rip), %rsi
+ 15227      000000
+ 15228 e3a0 488D3D00 		leaq	.LC1(%rip), %rdi
+ 15228      000000
+ 15229 e3a7 B8000000 		movl	$0, %eax
+ 15229      00
+ 15230 e3ac E8000000 		call	KDbgMsg at PLT
+ 15230      00
+ 15231              	.L359:
+ 15232 e3b1 660F6F85 		movdqa	-8704(%rbp), %xmm0
+ 15232      00DEFFFF 
+ 15233 e3b9 F30F7F85 		movdqu	%xmm0, -4336(%rbp)
+ 15233      10EFFFFF 
+ 15234              	.LBE2032:
+ 15235              	.LBB2033:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 477
+
+
+ 15236              	.LBB2034:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 15237              		.loc 2 667 0
+ 15238 e3c1 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 15238      00000000 
+ 15239 e3c9 F30F6F8D 		movdqu	-4336(%rbp), %xmm1
+ 15239      10EFFFFF 
+ 15240 e3d1 F30F7F8D 		movdqu	%xmm1, -4304(%rbp)
+ 15240      30EFFFFF 
+ 15241 e3d9 F30F7F85 		movdqu	%xmm0, -4320(%rbp)
+ 15241      20EFFFFF 
+ 15242              	.LBB2035:
+ 15243              	.LBB2036:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 15244              		.loc 2 380 0
+ 15245 e3e1 F30F6F85 		movdqu	-4304(%rbp), %xmm0
+ 15245      30EFFFFF 
+ 15246 e3e9 F30F7F85 		movdqu	%xmm0, -7632(%rbp)
+ 15246      30E2FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 15247              		.loc 2 381 0
+ 15248 e3f1 F30F6F85 		movdqu	-4320(%rbp), %xmm0
+ 15248      20EFFFFF 
+ 15249 e3f9 F30F7F85 		movdqu	%xmm0, -7648(%rbp)
+ 15249      20E2FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 15250              		.loc 2 383 0
+ 15251 e401 C7854CEF 		movl	$0, -4276(%rbp)
+ 15251      FFFF0000 
+ 15251      0000
+ 15252 e40b EB5C     		jmp	.L360
+ 15253              	.L363:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 15254              		.loc 2 385 0
+ 15255 e40d 8B854CEF 		movl	-4276(%rbp), %eax
+ 15255      FFFF
+ 15256 e413 89C0     		mov	%eax, %eax
+ 15257 e415 0FB68405 		movzbl	-7648(%rbp,%rax), %eax
+ 15257      20E2FFFF 
+ 15258 e41d 84C0     		testb	%al, %al
+ 15259 e41f 7912     		jns	.L361
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 15260              		.loc 2 386 0
+ 15261 e421 8B854CEF 		movl	-4276(%rbp), %eax
+ 15261      FFFF
+ 15262 e427 89C0     		mov	%eax, %eax
+ 15263 e429 C6840540 		movb	$0, -7616(%rbp,%rax)
+ 15263      E2FFFF00 
+ 15264 e431 EB2F     		jmp	.L362
+ 15265              	.L361:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 15266              		.loc 2 388 0
+ 15267 e433 8B8D4CEF 		movl	-4276(%rbp), %ecx
+ 15267      FFFF
+ 15268 e439 8B854CEF 		movl	-4276(%rbp), %eax
+ 15268      FFFF
+ 15269 e43f 89C0     		mov	%eax, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 478
+
+
+ 15270 e441 0FB68405 		movzbl	-7648(%rbp,%rax), %eax
+ 15270      20E2FFFF 
+ 15271 e449 0FB6C0   		movzbl	%al, %eax
+ 15272 e44c 83E00F   		andl	$15, %eax
+ 15273 e44f 4898     		cltq
+ 15274 e451 0FB69405 		movzbl	-7632(%rbp,%rax), %edx
+ 15274      30E2FFFF 
+ 15275 e459 89C8     		mov	%ecx, %eax
+ 15276 e45b 88940540 		movb	%dl, -7616(%rbp,%rax)
+ 15276      E2FFFF
+ 15277              	.L362:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 15278              		.loc 2 383 0
+ 15279 e462 83854CEF 		addl	$1, -4276(%rbp)
+ 15279      FFFF01
+ 15280              	.L360:
+ 15281 e469 83BD4CEF 		cmpl	$15, -4276(%rbp)
+ 15281      FFFF0F
+ 15282 e470 769B     		jbe	.L363
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 15283              		.loc 2 391 0
+ 15284 e472 F30F6F85 		movdqu	-7616(%rbp), %xmm0
+ 15284      40E2FFFF 
+ 15285              	.LBE2036:
+ 15286              	.LBE2035:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 15287              		.loc 2 667 0
+ 15288 e47a F30F7F85 		movdqu	%xmm0, -4336(%rbp)
+ 15288      10EFFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 15289              		.loc 2 668 0
+ 15290 e482 F30F6F85 		movdqu	-4336(%rbp), %xmm0
+ 15290      10EFFFFF 
+ 15291              	.LBE2034:
+ 15292              	.LBE2033:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 15293              		.loc 2 1684 0
+ 15294 e48a 660F7F85 		movdqa	%xmm0, -8704(%rbp)
+ 15294      00DEFFFF 
+ 15295              	.LBB2037:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 15296              		.loc 2 1685 0
+ 15297 e492 660F6F85 		movdqa	-8704(%rbp), %xmm0
+ 15297      00DEFFFF 
+ 15298 e49a F30F7F85 		movdqu	%xmm0, -7792(%rbp)
+ 15298      90E1FFFF 
+ 15299 e4a2 E8000000 		call	KDbgWriterGet at PLT
+ 15299      00
+ 15300 e4a7 4885C0   		testq	%rax, %rax
+ 15301 e4aa 7479     		je	.L365
+ 15302 e4ac BF010000 		movl	$1, %edi
+ 15302      00
+ 15303 e4b1 E8000000 		call	KDbgCondToFlag at PLT
+ 15303      00
+ 15304 e4b6 4889C6   		movq	%rax, %rsi
+ 15305 e4b9 BF100000 		movl	$16, %edi
+ 15305      00
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 479
+
+
+ 15306 e4be E8000000 		call	KDbgTestModConds at PLT
+ 15306      00
+ 15307 e4c3 84C0     		testb	%al, %al
+ 15308 e4c5 745E     		je	.L365
+ 15309 e4c7 8B859CE1 		movl	-7780(%rbp), %eax
+ 15309      FFFF
+ 15310 e4cd 89C7     		movl	%eax, %edi
+ 15311 e4cf E82C1BFF 		call	bswap_32
+ 15311      FF
+ 15312 e4d4 4189C5   		movl	%eax, %r13d
+ 15313 e4d7 8B8598E1 		movl	-7784(%rbp), %eax
+ 15313      FFFF
+ 15314 e4dd 89C7     		movl	%eax, %edi
+ 15315 e4df E81C1BFF 		call	bswap_32
+ 15315      FF
+ 15316 e4e4 4189C4   		movl	%eax, %r12d
+ 15317 e4e7 8B8594E1 		movl	-7788(%rbp), %eax
+ 15317      FFFF
+ 15318 e4ed 89C7     		movl	%eax, %edi
+ 15319 e4ef E80C1BFF 		call	bswap_32
+ 15319      FF
+ 15320 e4f4 89C3     		movl	%eax, %ebx
+ 15321 e4f6 8B8590E1 		movl	-7792(%rbp), %eax
+ 15321      FFFF
+ 15322 e4fc 89C7     		movl	%eax, %edi
+ 15323 e4fe E8FD1AFF 		call	bswap_32
+ 15323      FF
+ 15324 e503 4589E9   		movl	%r13d, %r9d
+ 15325 e506 4589E0   		movl	%r12d, %r8d
+ 15326 e509 89D9     		movl	%ebx, %ecx
+ 15327 e50b 89C2     		movl	%eax, %edx
+ 15328 e50d 488D3500 		leaq	.LC2(%rip), %rsi
+ 15328      000000
+ 15329 e514 488D3D00 		leaq	.LC1(%rip), %rdi
+ 15329      000000
+ 15330 e51b B8000000 		movl	$0, %eax
+ 15330      00
+ 15331 e520 E8000000 		call	KDbgMsg at PLT
+ 15331      00
+ 15332              	.L365:
+ 15333 e525 660F6F85 		movdqa	-8704(%rbp), %xmm0
+ 15333      00DEFFFF 
+ 15334 e52d F30F7F85 		movdqu	%xmm0, -4256(%rbp)
+ 15334      60EFFFFF 
+ 15335 e535 660F6F85 		movdqa	-8688(%rbp), %xmm0
+ 15335      10DEFFFF 
+ 15336 e53d F30F7F85 		movdqu	%xmm0, -4272(%rbp)
+ 15336      50EFFFFF 
+ 15337              	.LBE2037:
+ 15338              	.LBB2038:
+ 15339              	.LBB2039:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 15340              		.loc 2 178 0
+ 15341 e545 F30F6F85 		movdqu	-4272(%rbp), %xmm0
+ 15341      50EFFFFF 
+ 15342 e54d F30F6F8D 		movdqu	-4256(%rbp), %xmm1
+ 15342      60EFFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 480
+
+
+ 15343 e555 660FEFC1 		pxor	%xmm1, %xmm0
+ 15344              	.LBE2039:
+ 15345              	.LBE2038:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 15346              		.loc 2 1686 0
+ 15347 e559 660F7F85 		movdqa	%xmm0, -8704(%rbp)
+ 15347      00DEFFFF 
+ 15348              	.LBB2040:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 15349              		.loc 2 1687 0
+ 15350 e561 660F6F85 		movdqa	-8704(%rbp), %xmm0
+ 15350      00DEFFFF 
+ 15351 e569 F30F7F85 		movdqu	%xmm0, -7808(%rbp)
+ 15351      80E1FFFF 
+ 15352 e571 E8000000 		call	KDbgWriterGet at PLT
+ 15352      00
+ 15353 e576 4885C0   		testq	%rax, %rax
+ 15354 e579 7479     		je	.L367
+ 15355 e57b BF010000 		movl	$1, %edi
+ 15355      00
+ 15356 e580 E8000000 		call	KDbgCondToFlag at PLT
+ 15356      00
+ 15357 e585 4889C6   		movq	%rax, %rsi
+ 15358 e588 BF100000 		movl	$16, %edi
+ 15358      00
+ 15359 e58d E8000000 		call	KDbgTestModConds at PLT
+ 15359      00
+ 15360 e592 84C0     		testb	%al, %al
+ 15361 e594 745E     		je	.L367
+ 15362 e596 8B858CE1 		movl	-7796(%rbp), %eax
+ 15362      FFFF
+ 15363 e59c 89C7     		movl	%eax, %edi
+ 15364 e59e E85D1AFF 		call	bswap_32
+ 15364      FF
+ 15365 e5a3 4189C5   		movl	%eax, %r13d
+ 15366 e5a6 8B8588E1 		movl	-7800(%rbp), %eax
+ 15366      FFFF
+ 15367 e5ac 89C7     		movl	%eax, %edi
+ 15368 e5ae E84D1AFF 		call	bswap_32
+ 15368      FF
+ 15369 e5b3 4189C4   		movl	%eax, %r12d
+ 15370 e5b6 8B8584E1 		movl	-7804(%rbp), %eax
+ 15370      FFFF
+ 15371 e5bc 89C7     		movl	%eax, %edi
+ 15372 e5be E83D1AFF 		call	bswap_32
+ 15372      FF
+ 15373 e5c3 89C3     		movl	%eax, %ebx
+ 15374 e5c5 8B8580E1 		movl	-7808(%rbp), %eax
+ 15374      FFFF
+ 15375 e5cb 89C7     		movl	%eax, %edi
+ 15376 e5cd E82E1AFF 		call	bswap_32
+ 15376      FF
+ 15377 e5d2 4589E9   		movl	%r13d, %r9d
+ 15378 e5d5 4589E0   		movl	%r12d, %r8d
+ 15379 e5d8 89D9     		movl	%ebx, %ecx
+ 15380 e5da 89C2     		movl	%eax, %edx
+ 15381 e5dc 488D3500 		leaq	.LC3(%rip), %rsi
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 481
+
+
+ 15381      000000
+ 15382 e5e3 488D3D00 		leaq	.LC1(%rip), %rdi
+ 15382      000000
+ 15383 e5ea B8000000 		movl	$0, %eax
+ 15383      00
+ 15384 e5ef E8000000 		call	KDbgMsg at PLT
+ 15384      00
+ 15385              	.L367:
+ 15386 e5f4 660F6F85 		movdqa	-8704(%rbp), %xmm0
+ 15386      00DEFFFF 
+ 15387 e5fc F30F7F85 		movdqu	%xmm0, -4240(%rbp)
+ 15387      70EFFFFF 
+ 15388              	.LBE2040:
+ 15389              	.LBB2041:
+ 15390              	.LBB2042:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 15391              		.loc 2 1357 0
+ 15392 e604 F30F6F85 		movdqu	-4240(%rbp), %xmm0
+ 15392      70EFFFFF 
+ 15393 e60c F30F7F85 		movdqu	%xmm0, -7600(%rbp)
+ 15393      50E2FFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 15394              		.loc 2 1358 0
+ 15395 e614 8B855CE2 		movl	-7588(%rbp), %eax
+ 15395      FFFF
+ 15396 e61a 898558E2 		movl	%eax, -7592(%rbp)
+ 15396      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 15397              		.loc 2 1359 0
+ 15398 e620 8B855CE2 		movl	-7588(%rbp), %eax
+ 15398      FFFF
+ 15399 e626 898554E2 		movl	%eax, -7596(%rbp)
+ 15399      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 15400              		.loc 2 1360 0
+ 15401 e62c 8B855CE2 		movl	-7588(%rbp), %eax
+ 15401      FFFF
+ 15402 e632 898550E2 		movl	%eax, -7600(%rbp)
+ 15402      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 15403              		.loc 2 1361 0
+ 15404 e638 F30F6F85 		movdqu	-7600(%rbp), %xmm0
+ 15404      50E2FFFF 
+ 15405              	.LBE2042:
+ 15406              	.LBE2041:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 15407              		.loc 2 1688 0
+ 15408 e640 660F7F85 		movdqa	%xmm0, -8704(%rbp)
+ 15408      00DEFFFF 
+ 15409              	.LBB2043:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 15410              		.loc 2 1689 0
+ 15411 e648 660F6F85 		movdqa	-8704(%rbp), %xmm0
+ 15411      00DEFFFF 
+ 15412 e650 F30F7F85 		movdqu	%xmm0, -7824(%rbp)
+ 15412      70E1FFFF 
+ 15413 e658 E8000000 		call	KDbgWriterGet at PLT
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 482
+
+
+ 15413      00
+ 15414 e65d 4885C0   		testq	%rax, %rax
+ 15415 e660 7479     		je	.L369
+ 15416 e662 BF010000 		movl	$1, %edi
+ 15416      00
+ 15417 e667 E8000000 		call	KDbgCondToFlag at PLT
+ 15417      00
+ 15418 e66c 4889C6   		movq	%rax, %rsi
+ 15419 e66f BF100000 		movl	$16, %edi
+ 15419      00
+ 15420 e674 E8000000 		call	KDbgTestModConds at PLT
+ 15420      00
+ 15421 e679 84C0     		testb	%al, %al
+ 15422 e67b 745E     		je	.L369
+ 15423 e67d 8B857CE1 		movl	-7812(%rbp), %eax
+ 15423      FFFF
+ 15424 e683 89C7     		movl	%eax, %edi
+ 15425 e685 E87619FF 		call	bswap_32
+ 15425      FF
+ 15426 e68a 4189C5   		movl	%eax, %r13d
+ 15427 e68d 8B8578E1 		movl	-7816(%rbp), %eax
+ 15427      FFFF
+ 15428 e693 89C7     		movl	%eax, %edi
+ 15429 e695 E86619FF 		call	bswap_32
+ 15429      FF
+ 15430 e69a 4189C4   		movl	%eax, %r12d
+ 15431 e69d 8B8574E1 		movl	-7820(%rbp), %eax
+ 15431      FFFF
+ 15432 e6a3 89C7     		movl	%eax, %edi
+ 15433 e6a5 E85619FF 		call	bswap_32
+ 15433      FF
+ 15434 e6aa 89C3     		movl	%eax, %ebx
+ 15435 e6ac 8B8570E1 		movl	-7824(%rbp), %eax
+ 15435      FFFF
+ 15436 e6b2 89C7     		movl	%eax, %edi
+ 15437 e6b4 E84719FF 		call	bswap_32
+ 15437      FF
+ 15438 e6b9 4589E9   		movl	%r13d, %r9d
+ 15439 e6bc 4589E0   		movl	%r12d, %r8d
+ 15440 e6bf 89D9     		movl	%ebx, %ecx
+ 15441 e6c1 89C2     		movl	%eax, %edx
+ 15442 e6c3 488D3500 		leaq	.LC4(%rip), %rsi
+ 15442      000000
+ 15443 e6ca 488D3D00 		leaq	.LC1(%rip), %rdi
+ 15443      000000
+ 15444 e6d1 B8000000 		movl	$0, %eax
+ 15444      00
+ 15445 e6d6 E8000000 		call	KDbgMsg at PLT
+ 15445      00
+ 15446              	.L369:
+ 15447              	.LBE2043:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 15448              		.loc 2 1690 0
+ 15449 e6db 660F6F85 		movdqa	-8704(%rbp), %xmm0
+ 15449      00DEFFFF 
+ 15450              	.LBE2009:
+ 15451              	.LBE2008:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 483
+
+
+1928:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(4,0x02);    /* k16 : k17 : k18 : k19 */
+ 15452              		.loc 2 1928 0
+ 15453 e6e3 F30F7F85 		movdqu	%xmm0, -5664(%rbp)
+ 15453      E0E9FFFF 
+ 15454 e6eb F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 15454      C0E9FFFF 
+ 15455 e6f3 F30F7F85 		movdqu	%xmm0, -4224(%rbp)
+ 15455      80EFFFFF 
+ 15456              	.LBB2044:
+ 15457              	.LBB2045:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 15458              		.loc 2 1565 0
+ 15459 e6fb F30F6F85 		movdqu	-4224(%rbp), %xmm0
+ 15459      80EFFFFF 
+ 15460 e703 660F7F85 		movdqa	%xmm0, -8656(%rbp)
+ 15460      30DEFFFF 
+ 15461 e70b 660F6F85 		movdqa	-8656(%rbp), %xmm0
+ 15461      30DEFFFF 
+ 15462 e713 F30F7F85 		movdqu	%xmm0, -4208(%rbp)
+ 15462      90EFFFFF 
+ 15463              	.LBB2046:
+ 15464              	.LBB2047:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 15465              		.loc 2 1282 0
+ 15466 e71b F30F6F85 		movdqu	-4208(%rbp), %xmm0
+ 15466      90EFFFFF 
+ 15467 e723 F30F7F85 		movdqu	%xmm0, -7584(%rbp)
+ 15467      60E2FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 15468              		.loc 2 1283 0
+ 15469 e72b 8B8568E2 		movl	-7576(%rbp), %eax
+ 15469      FFFF
+ 15470 e731 89856CE2 		movl	%eax, -7572(%rbp)
+ 15470      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 15471              		.loc 2 1284 0
+ 15472 e737 8B8564E2 		movl	-7580(%rbp), %eax
+ 15472      FFFF
+ 15473 e73d 898568E2 		movl	%eax, -7576(%rbp)
+ 15473      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 15474              		.loc 2 1285 0
+ 15475 e743 8B8560E2 		movl	-7584(%rbp), %eax
+ 15475      FFFF
+ 15476 e749 898564E2 		movl	%eax, -7580(%rbp)
+ 15476      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 15477              		.loc 2 1286 0
+ 15478 e74f C78560E2 		movl	$0, -7584(%rbp)
+ 15478      FFFF0000 
+ 15478      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 15479              		.loc 2 1287 0
+ 15480 e759 F30F6F85 		movdqu	-7584(%rbp), %xmm0
+ 15480      60E2FFFF 
+ 15481              	.LBE2047:
+ 15482              	.LBE2046:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 484
+
+
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15483              		.loc 2 1567 0
+ 15484 e761 660F7F85 		movdqa	%xmm0, -8656(%rbp)
+ 15484      30DEFFFF 
+ 15485 e769 660F6F85 		movdqa	-8656(%rbp), %xmm0
+ 15485      30DEFFFF 
+ 15486 e771 660FEF85 		pxor	-4224(%rbp), %xmm0
+ 15486      80EFFFFF 
+ 15487 e779 F30F7F85 		movdqu	%xmm0, -4224(%rbp)
+ 15487      80EFFFFF 
+ 15488 e781 660F6F85 		movdqa	-8656(%rbp), %xmm0
+ 15488      30DEFFFF 
+ 15489 e789 F30F7F85 		movdqu	%xmm0, -4192(%rbp)
+ 15489      A0EFFFFF 
+ 15490              	.LBB2048:
+ 15491              	.LBB2049:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 15492              		.loc 2 1282 0
+ 15493 e791 F30F6F85 		movdqu	-4192(%rbp), %xmm0
+ 15493      A0EFFFFF 
+ 15494 e799 F30F7F85 		movdqu	%xmm0, -7568(%rbp)
+ 15494      70E2FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 15495              		.loc 2 1283 0
+ 15496 e7a1 8B8578E2 		movl	-7560(%rbp), %eax
+ 15496      FFFF
+ 15497 e7a7 89857CE2 		movl	%eax, -7556(%rbp)
+ 15497      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 15498              		.loc 2 1284 0
+ 15499 e7ad 8B8574E2 		movl	-7564(%rbp), %eax
+ 15499      FFFF
+ 15500 e7b3 898578E2 		movl	%eax, -7560(%rbp)
+ 15500      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 15501              		.loc 2 1285 0
+ 15502 e7b9 8B8570E2 		movl	-7568(%rbp), %eax
+ 15502      FFFF
+ 15503 e7bf 898574E2 		movl	%eax, -7564(%rbp)
+ 15503      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 15504              		.loc 2 1286 0
+ 15505 e7c5 C78570E2 		movl	$0, -7568(%rbp)
+ 15505      FFFF0000 
+ 15505      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 15506              		.loc 2 1287 0
+ 15507 e7cf F30F6F85 		movdqu	-7568(%rbp), %xmm0
+ 15507      70E2FFFF 
+ 15508              	.LBE2049:
+ 15509              	.LBE2048:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15510              		.loc 2 1568 0
+ 15511 e7d7 660F7F85 		movdqa	%xmm0, -8656(%rbp)
+ 15511      30DEFFFF 
+ 15512 e7df 660F6F85 		movdqa	-8656(%rbp), %xmm0
+ 15512      30DEFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 485
+
+
+ 15513 e7e7 660FEF85 		pxor	-4224(%rbp), %xmm0
+ 15513      80EFFFFF 
+ 15514 e7ef F30F7F85 		movdqu	%xmm0, -4224(%rbp)
+ 15514      80EFFFFF 
+ 15515 e7f7 660F6F85 		movdqa	-8656(%rbp), %xmm0
+ 15515      30DEFFFF 
+ 15516 e7ff F30F7F85 		movdqu	%xmm0, -4176(%rbp)
+ 15516      B0EFFFFF 
+ 15517              	.LBB2050:
+ 15518              	.LBB2051:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 15519              		.loc 2 1282 0
+ 15520 e807 F30F6F85 		movdqu	-4176(%rbp), %xmm0
+ 15520      B0EFFFFF 
+ 15521 e80f F30F7F85 		movdqu	%xmm0, -7552(%rbp)
+ 15521      80E2FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 15522              		.loc 2 1283 0
+ 15523 e817 8B8588E2 		movl	-7544(%rbp), %eax
+ 15523      FFFF
+ 15524 e81d 89858CE2 		movl	%eax, -7540(%rbp)
+ 15524      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 15525              		.loc 2 1284 0
+ 15526 e823 8B8584E2 		movl	-7548(%rbp), %eax
+ 15526      FFFF
+ 15527 e829 898588E2 		movl	%eax, -7544(%rbp)
+ 15527      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 15528              		.loc 2 1285 0
+ 15529 e82f 8B8580E2 		movl	-7552(%rbp), %eax
+ 15529      FFFF
+ 15530 e835 898584E2 		movl	%eax, -7548(%rbp)
+ 15530      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 15531              		.loc 2 1286 0
+ 15532 e83b C78580E2 		movl	$0, -7552(%rbp)
+ 15532      FFFF0000 
+ 15532      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 15533              		.loc 2 1287 0
+ 15534 e845 F30F6F85 		movdqu	-7552(%rbp), %xmm0
+ 15534      80E2FFFF 
+ 15535              	.LBE2051:
+ 15536              	.LBE2050:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15537              		.loc 2 1569 0
+ 15538 e84d 660F7F85 		movdqa	%xmm0, -8656(%rbp)
+ 15538      30DEFFFF 
+ 15539 e855 660F6F85 		movdqa	-8656(%rbp), %xmm0
+ 15539      30DEFFFF 
+ 15540 e85d 660FEF85 		pxor	-4224(%rbp), %xmm0
+ 15540      80EFFFFF 
+ 15541 e865 F30F7F85 		movdqu	%xmm0, -4224(%rbp)
+ 15541      80EFFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 15542              		.loc 2 1571 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 486
+
+
+ 15543 e86d F30F6F85 		movdqu	-4224(%rbp), %xmm0
+ 15543      80EFFFFF 
+ 15544              	.LBE2045:
+ 15545              	.LBE2044:
+1928:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(4,0x02);    /* k16 : k17 : k18 : k19 */
+ 15546              		.loc 2 1928 0
+ 15547 e875 F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 15547      C0E9FFFF 
+ 15548 e87d F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 15548      C0E9FFFF 
+ 15549 e885 F30F7F85 		movdqu	%xmm0, -4144(%rbp)
+ 15549      D0EFFFFF 
+ 15550 e88d F30F6F85 		movdqu	-5664(%rbp), %xmm0
+ 15550      E0E9FFFF 
+ 15551 e895 F30F7F85 		movdqu	%xmm0, -4160(%rbp)
+ 15551      C0EFFFFF 
+ 15552              	.LBB2052:
+ 15553              	.LBB2053:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 15554              		.loc 2 178 0
+ 15555 e89d F30F6F85 		movdqu	-4160(%rbp), %xmm0
+ 15555      C0EFFFFF 
+ 15556 e8a5 F30F6F8D 		movdqu	-4144(%rbp), %xmm1
+ 15556      D0EFFFFF 
+ 15557 e8ad 660FEFC1 		pxor	%xmm1, %xmm0
+ 15558              	.LBE2053:
+ 15559              	.LBE2052:
+1928:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(4,0x02);    /* k16 : k17 : k18 : k19 */
+ 15560              		.loc 2 1928 0
+ 15561 e8b1 F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 15561      C0E9FFFF 
+ 15562 e8b9 488B85D8 		movq	-8232(%rbp), %rax
+ 15562      DFFFFF
+ 15563 e8c0 4883C040 		addq	$64, %rax
+ 15564 e8c4 F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 15564      C0E9FFFF 
+ 15565 e8cc F30F7F00 		movdqu	%xmm0, (%rax)
+ 15566 e8d0 F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 15566      C0E9FFFF 
+ 15567 e8d8 F30F7F85 		movdqu	%xmm0, -4128(%rbp)
+ 15567      E0EFFFFF 
+ 15568              	.LBB2054:
+ 15569              	.LBB2055:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 15570              		.loc 2 1656 0
+ 15571 e8e0 F30F6F85 		movdqu	-4128(%rbp), %xmm0
+ 15571      E0EFFFFF 
+ 15572 e8e8 F30F7F85 		movdqu	%xmm0, -7520(%rbp)
+ 15572      A0E2FFFF 
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 15573              		.loc 2 1657 0
+ 15574 e8f0 8B85ACE2 		movl	-7508(%rbp), %eax
+ 15574      FFFF
+ 15575 e8f6 8985F8EF 		movl	%eax, -4104(%rbp)
+ 15575      FFFF
+ 15576              	.LBB2056:
+ 15577              	.LBB2057:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 487
+
+
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 15578              		.loc 2 740 0
+ 15579 e8fc 8B85F8EF 		movl	-4104(%rbp), %eax
+ 15579      FFFF
+ 15580 e902 898590E2 		movl	%eax, -7536(%rbp)
+ 15580      FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 15581              		.loc 2 741 0
+ 15582 e908 C785FCEF 		movl	$0, -4100(%rbp)
+ 15582      FFFF0000 
+ 15582      0000
+ 15583 e912 EB36     		jmp	.L370
+ 15584              	.L371:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 15585              		.loc 2 742 0
+ 15586 e914 8B8DFCEF 		movl	-4100(%rbp), %ecx
+ 15586      FFFF
+ 15587 e91a 8B85FCEF 		movl	-4100(%rbp), %eax
+ 15587      FFFF
+ 15588 e920 89C0     		mov	%eax, %eax
+ 15589 e922 0FB68405 		movzbl	-7536(%rbp,%rax), %eax
+ 15589      90E2FFFF 
+ 15590 e92a 0FB6C0   		movzbl	%al, %eax
+ 15591 e92d 89C2     		mov	%eax, %edx
+ 15592 e92f 488D0500 		leaq	KAESBlockCipherVecRijndaelSBox(%rip), %rax
+ 15592      000000
+ 15593 e936 0FB61402 		movzbl	(%rdx,%rax), %edx
+ 15594 e93a 89C8     		mov	%ecx, %eax
+ 15595 e93c 88940590 		movb	%dl, -7536(%rbp,%rax)
+ 15595      E2FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 15596              		.loc 2 741 0
+ 15597 e943 8385FCEF 		addl	$1, -4100(%rbp)
+ 15597      FFFF01
+ 15598              	.L370:
+ 15599 e94a 83BDFCEF 		cmpl	$3, -4100(%rbp)
+ 15599      FFFF03
+ 15600 e951 76C1     		jbe	.L371
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 15601              		.loc 2 743 0
+ 15602 e953 8B8590E2 		movl	-7536(%rbp), %eax
+ 15602      FFFF
+ 15603              	.LBE2057:
+ 15604              	.LBE2056:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 15605              		.loc 2 1657 0
+ 15606 e959 8985F4EF 		movl	%eax, -4108(%rbp)
+ 15606      FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 15607              		.loc 2 1659 0
+ 15608 e95f 8B85F4EF 		movl	-4108(%rbp), %eax
+ 15608      FFFF
+ 15609 e965 8985ACE2 		movl	%eax, -7508(%rbp)
+ 15609      FFFF
+ 15610 e96b 8B85ACE2 		movl	-7508(%rbp), %eax
+ 15610      FFFF
+ 15611 e971 8985A8E2 		movl	%eax, -7512(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 488
+
+
+ 15611      FFFF
+ 15612 e977 8B85A8E2 		movl	-7512(%rbp), %eax
+ 15612      FFFF
+ 15613 e97d 8985A4E2 		movl	%eax, -7516(%rbp)
+ 15613      FFFF
+ 15614 e983 8B85A4E2 		movl	-7516(%rbp), %eax
+ 15614      FFFF
+ 15615 e989 8985A0E2 		movl	%eax, -7520(%rbp)
+ 15615      FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 15616              		.loc 2 1660 0
+ 15617 e98f F30F6F85 		movdqu	-7520(%rbp), %xmm0
+ 15617      A0E2FFFF 
+ 15618              	.LBE2055:
+ 15619              	.LBE2054:
+1929:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(5);         /* k20 : k21 : k22 : k23 */
+ 15620              		.loc 2 1929 0
+ 15621 e997 F30F7F85 		movdqu	%xmm0, -5664(%rbp)
+ 15621      E0E9FFFF 
+ 15622 e99f F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 15622      D0E9FFFF 
+ 15623 e9a7 F30F7F85 		movdqu	%xmm0, -4096(%rbp)
+ 15623      00F0FFFF 
+ 15624              	.LBB2058:
+ 15625              	.LBB2059:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 15626              		.loc 2 1565 0
+ 15627 e9af F30F6F85 		movdqu	-4096(%rbp), %xmm0
+ 15627      00F0FFFF 
+ 15628 e9b7 660F7F85 		movdqa	%xmm0, -8640(%rbp)
+ 15628      40DEFFFF 
+ 15629 e9bf 660F6F85 		movdqa	-8640(%rbp), %xmm0
+ 15629      40DEFFFF 
+ 15630 e9c7 F30F7F85 		movdqu	%xmm0, -4080(%rbp)
+ 15630      10F0FFFF 
+ 15631              	.LBB2060:
+ 15632              	.LBB2061:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 15633              		.loc 2 1282 0
+ 15634 e9cf F30F6F85 		movdqu	-4080(%rbp), %xmm0
+ 15634      10F0FFFF 
+ 15635 e9d7 F30F7F85 		movdqu	%xmm0, -7504(%rbp)
+ 15635      B0E2FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 15636              		.loc 2 1283 0
+ 15637 e9df 8B85B8E2 		movl	-7496(%rbp), %eax
+ 15637      FFFF
+ 15638 e9e5 8985BCE2 		movl	%eax, -7492(%rbp)
+ 15638      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 15639              		.loc 2 1284 0
+ 15640 e9eb 8B85B4E2 		movl	-7500(%rbp), %eax
+ 15640      FFFF
+ 15641 e9f1 8985B8E2 		movl	%eax, -7496(%rbp)
+ 15641      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 15642              		.loc 2 1285 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 489
+
+
+ 15643 e9f7 8B85B0E2 		movl	-7504(%rbp), %eax
+ 15643      FFFF
+ 15644 e9fd 8985B4E2 		movl	%eax, -7500(%rbp)
+ 15644      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 15645              		.loc 2 1286 0
+ 15646 ea03 C785B0E2 		movl	$0, -7504(%rbp)
+ 15646      FFFF0000 
+ 15646      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 15647              		.loc 2 1287 0
+ 15648 ea0d F30F6F85 		movdqu	-7504(%rbp), %xmm0
+ 15648      B0E2FFFF 
+ 15649              	.LBE2061:
+ 15650              	.LBE2060:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15651              		.loc 2 1567 0
+ 15652 ea15 660F7F85 		movdqa	%xmm0, -8640(%rbp)
+ 15652      40DEFFFF 
+ 15653 ea1d 660F6F85 		movdqa	-8640(%rbp), %xmm0
+ 15653      40DEFFFF 
+ 15654 ea25 660FEF85 		pxor	-4096(%rbp), %xmm0
+ 15654      00F0FFFF 
+ 15655 ea2d F30F7F85 		movdqu	%xmm0, -4096(%rbp)
+ 15655      00F0FFFF 
+ 15656 ea35 660F6F85 		movdqa	-8640(%rbp), %xmm0
+ 15656      40DEFFFF 
+ 15657 ea3d F30F7F85 		movdqu	%xmm0, -4064(%rbp)
+ 15657      20F0FFFF 
+ 15658              	.LBB2062:
+ 15659              	.LBB2063:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 15660              		.loc 2 1282 0
+ 15661 ea45 F30F6F85 		movdqu	-4064(%rbp), %xmm0
+ 15661      20F0FFFF 
+ 15662 ea4d F30F7F85 		movdqu	%xmm0, -7488(%rbp)
+ 15662      C0E2FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 15663              		.loc 2 1283 0
+ 15664 ea55 8B85C8E2 		movl	-7480(%rbp), %eax
+ 15664      FFFF
+ 15665 ea5b 8985CCE2 		movl	%eax, -7476(%rbp)
+ 15665      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 15666              		.loc 2 1284 0
+ 15667 ea61 8B85C4E2 		movl	-7484(%rbp), %eax
+ 15667      FFFF
+ 15668 ea67 8985C8E2 		movl	%eax, -7480(%rbp)
+ 15668      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 15669              		.loc 2 1285 0
+ 15670 ea6d 8B85C0E2 		movl	-7488(%rbp), %eax
+ 15670      FFFF
+ 15671 ea73 8985C4E2 		movl	%eax, -7484(%rbp)
+ 15671      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 15672              		.loc 2 1286 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 490
+
+
+ 15673 ea79 C785C0E2 		movl	$0, -7488(%rbp)
+ 15673      FFFF0000 
+ 15673      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 15674              		.loc 2 1287 0
+ 15675 ea83 F30F6F85 		movdqu	-7488(%rbp), %xmm0
+ 15675      C0E2FFFF 
+ 15676              	.LBE2063:
+ 15677              	.LBE2062:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15678              		.loc 2 1568 0
+ 15679 ea8b 660F7F85 		movdqa	%xmm0, -8640(%rbp)
+ 15679      40DEFFFF 
+ 15680 ea93 660F6F85 		movdqa	-8640(%rbp), %xmm0
+ 15680      40DEFFFF 
+ 15681 ea9b 660FEF85 		pxor	-4096(%rbp), %xmm0
+ 15681      00F0FFFF 
+ 15682 eaa3 F30F7F85 		movdqu	%xmm0, -4096(%rbp)
+ 15682      00F0FFFF 
+ 15683 eaab 660F6F85 		movdqa	-8640(%rbp), %xmm0
+ 15683      40DEFFFF 
+ 15684 eab3 F30F7F85 		movdqu	%xmm0, -4048(%rbp)
+ 15684      30F0FFFF 
+ 15685              	.LBB2064:
+ 15686              	.LBB2065:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 15687              		.loc 2 1282 0
+ 15688 eabb F30F6F85 		movdqu	-4048(%rbp), %xmm0
+ 15688      30F0FFFF 
+ 15689 eac3 F30F7F85 		movdqu	%xmm0, -7472(%rbp)
+ 15689      D0E2FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 15690              		.loc 2 1283 0
+ 15691 eacb 8B85D8E2 		movl	-7464(%rbp), %eax
+ 15691      FFFF
+ 15692 ead1 8985DCE2 		movl	%eax, -7460(%rbp)
+ 15692      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 15693              		.loc 2 1284 0
+ 15694 ead7 8B85D4E2 		movl	-7468(%rbp), %eax
+ 15694      FFFF
+ 15695 eadd 8985D8E2 		movl	%eax, -7464(%rbp)
+ 15695      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 15696              		.loc 2 1285 0
+ 15697 eae3 8B85D0E2 		movl	-7472(%rbp), %eax
+ 15697      FFFF
+ 15698 eae9 8985D4E2 		movl	%eax, -7468(%rbp)
+ 15698      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 15699              		.loc 2 1286 0
+ 15700 eaef C785D0E2 		movl	$0, -7472(%rbp)
+ 15700      FFFF0000 
+ 15700      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 15701              		.loc 2 1287 0
+ 15702 eaf9 F30F6F85 		movdqu	-7472(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 491
+
+
+ 15702      D0E2FFFF 
+ 15703              	.LBE2065:
+ 15704              	.LBE2064:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15705              		.loc 2 1569 0
+ 15706 eb01 660F7F85 		movdqa	%xmm0, -8640(%rbp)
+ 15706      40DEFFFF 
+ 15707 eb09 660F6F85 		movdqa	-8640(%rbp), %xmm0
+ 15707      40DEFFFF 
+ 15708 eb11 660FEF85 		pxor	-4096(%rbp), %xmm0
+ 15708      00F0FFFF 
+ 15709 eb19 F30F7F85 		movdqu	%xmm0, -4096(%rbp)
+ 15709      00F0FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 15710              		.loc 2 1571 0
+ 15711 eb21 F30F6F85 		movdqu	-4096(%rbp), %xmm0
+ 15711      00F0FFFF 
+ 15712              	.LBE2059:
+ 15713              	.LBE2058:
+1929:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(5);         /* k20 : k21 : k22 : k23 */
+ 15714              		.loc 2 1929 0
+ 15715 eb29 F30F7F85 		movdqu	%xmm0, -5680(%rbp)
+ 15715      D0E9FFFF 
+ 15716 eb31 F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 15716      D0E9FFFF 
+ 15717 eb39 F30F7F85 		movdqu	%xmm0, -4016(%rbp)
+ 15717      50F0FFFF 
+ 15718 eb41 F30F6F85 		movdqu	-5664(%rbp), %xmm0
+ 15718      E0E9FFFF 
+ 15719 eb49 F30F7F85 		movdqu	%xmm0, -4032(%rbp)
+ 15719      40F0FFFF 
+ 15720              	.LBB2066:
+ 15721              	.LBB2067:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 15722              		.loc 2 178 0
+ 15723 eb51 F30F6F85 		movdqu	-4032(%rbp), %xmm0
+ 15723      40F0FFFF 
+ 15724 eb59 F30F6F8D 		movdqu	-4016(%rbp), %xmm1
+ 15724      50F0FFFF 
+ 15725 eb61 660FEFC1 		pxor	%xmm1, %xmm0
+ 15726              	.LBE2067:
+ 15727              	.LBE2066:
+1929:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(5);         /* k20 : k21 : k22 : k23 */
+ 15728              		.loc 2 1929 0
+ 15729 eb65 F30F7F85 		movdqu	%xmm0, -5680(%rbp)
+ 15729      D0E9FFFF 
+ 15730 eb6d 488B85D8 		movq	-8232(%rbp), %rax
+ 15730      DFFFFF
+ 15731 eb74 4883C050 		addq	$80, %rax
+ 15732 eb78 F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 15732      D0E9FFFF 
+ 15733 eb80 F30F7F00 		movdqu	%xmm0, (%rax)
+ 15734 eb84 F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 15734      D0E9FFFF 
+ 15735 eb8c F30F7F85 		movdqu	%xmm0, -3984(%rbp)
+ 15735      70F0FFFF 
+ 15736              	.LBB2068:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 492
+
+
+ 15737              	.LBB2069:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 15738              		.loc 2 1681 0
+ 15739 eb94 B8040000 		movl	$4, %eax
+ 15739      00
+ 15740 eb99 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 15740      00000000 
+ 15741 eba1 F30F7F85 		movdqu	%xmm0, -3952(%rbp)
+ 15741      90F0FFFF 
+ 15742 eba9 89858CF0 		movl	%eax, -3956(%rbp)
+ 15742      FFFF
+ 15743              	.LBB2070:
+ 15744              	.LBB2071:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 15745              		.loc 2 522 0
+ 15746 ebaf F30F6F85 		movdqu	-3952(%rbp), %xmm0
+ 15746      90F0FFFF 
+ 15747 ebb7 F30F7F85 		movdqu	%xmm0, -7392(%rbp)
+ 15747      20E3FFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 15748              		.loc 2 523 0
+ 15749 ebbf B8030000 		movl	$3, %eax
+ 15749      00
+ 15750 ebc4 4898     		cltq
+ 15751 ebc6 8B958CF0 		movl	-3956(%rbp), %edx
+ 15751      FFFF
+ 15752 ebcc 89948520 		movl	%edx, -7392(%rbp,%rax,4)
+ 15752      E3FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 15753              		.loc 2 524 0
+ 15754 ebd3 F30F6F85 		movdqu	-7392(%rbp), %xmm0
+ 15754      20E3FFFF 
+ 15755 ebdb F30F7F85 		movdqu	%xmm0, -3952(%rbp)
+ 15755      90F0FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 15756              		.loc 2 526 0
+ 15757 ebe3 F30F6F85 		movdqu	-3952(%rbp), %xmm0
+ 15757      90F0FFFF 
+ 15758              	.LBE2071:
+ 15759              	.LBE2070:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 15760              		.loc 2 1681 0
+ 15761 ebeb 660F7F85 		movdqa	%xmm0, -8608(%rbp)
+ 15761      60DEFFFF 
+ 15762 ebf3 F30F6F85 		movdqu	-3984(%rbp), %xmm0
+ 15762      70F0FFFF 
+ 15763 ebfb F30F7F85 		movdqu	%xmm0, -3936(%rbp)
+ 15763      A0F0FFFF 
+ 15764 ec03 F30F6F85 		movdqu	-3936(%rbp), %xmm0
+ 15764      A0F0FFFF 
+ 15765 ec0b F30F7F85 		movdqu	%xmm0, -3904(%rbp)
+ 15765      C0F0FFFF 
+ 15766 ec13 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 15766      000000
+ 15767 ec1a 488985B8 		movq	%rax, -3912(%rbp)
+ 15767      F0FFFF
+ 15768              	.LBB2072:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 493
+
+
+ 15769              	.LBB2073:
+ 15770              	.LBB2074:
+ 15771              	.LBB2075:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 15772              		.loc 2 851 0
+ 15773 ec21 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 15773      00000000 
+ 15774 ec29 F30F7F85 		movdqu	%xmm0, -3872(%rbp)
+ 15774      E0F0FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 15775              		.loc 2 854 0
+ 15776 ec31 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 15776      00000000 
+ 15777 ec39 F30F6F8D 		movdqu	-3904(%rbp), %xmm1
+ 15777      C0F0FFFF 
+ 15778 ec41 F30F7F8D 		movdqu	%xmm1, -3792(%rbp)
+ 15778      30F1FFFF 
+ 15779 ec49 F30F7F85 		movdqu	%xmm0, -3808(%rbp)
+ 15779      20F1FFFF 
+ 15780              	.LBB2076:
+ 15781              	.LBB2077:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 15782              		.loc 2 206 0
+ 15783 ec51 F30F6F85 		movdqu	-3808(%rbp), %xmm0
+ 15783      20F1FFFF 
+ 15784 ec59 F30F6F8D 		movdqu	-3792(%rbp), %xmm1
+ 15784      30F1FFFF 
+ 15785 ec61 660FDBC1 		pand	%xmm1, %xmm0
+ 15786              	.LBE2077:
+ 15787              	.LBE2076:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 15788              		.loc 2 854 0
+ 15789 ec65 F30F7F85 		movdqu	%xmm0, -3824(%rbp)
+ 15789      10F1FFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 15790              		.loc 2 862 0
+ 15791 ec6d 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 15791      00000000 
+ 15792 ec75 F30F6F8D 		movdqu	-3904(%rbp), %xmm1
+ 15792      C0F0FFFF 
+ 15793 ec7d F30F7F8D 		movdqu	%xmm1, -3760(%rbp)
+ 15793      50F1FFFF 
+ 15794 ec85 F30F7F85 		movdqu	%xmm0, -3776(%rbp)
+ 15794      40F1FFFF 
+ 15795              	.LBB2078:
+ 15796              		.loc 2 2642 0
+ 15797 ec8d 0FB68550 		movzbl	-3760(%rbp), %eax
+ 15797      F1FFFF
+ 15798 ec94 0FB69540 		movzbl	-3776(%rbp), %edx
+ 15798      F1FFFF
+ 15799 ec9b 0FB6C0   		movzbl	%al, %eax
+ 15800 ec9e 6689853E 		movw	%ax, -8898(%rbp)
+ 15800      DDFFFF
+ 15801 eca5 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 15801      DDFFFF
+ 15802 ecac F6F2     		divb	%dl
+ 15803 ecae 4189C7   		movl	%eax, %r15d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 494
+
+
+ 15804 ecb1 0FB68551 		movzbl	-3759(%rbp), %eax
+ 15804      F1FFFF
+ 15805 ecb8 0FB69541 		movzbl	-3775(%rbp), %edx
+ 15805      F1FFFF
+ 15806 ecbf 0FB6C0   		movzbl	%al, %eax
+ 15807 ecc2 6689853E 		movw	%ax, -8898(%rbp)
+ 15807      DDFFFF
+ 15808 ecc9 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 15808      DDFFFF
+ 15809 ecd0 F6F2     		divb	%dl
+ 15810 ecd2 88857FDE 		movb	%al, -8577(%rbp)
+ 15810      FFFF
+ 15811 ecd8 0FB68552 		movzbl	-3758(%rbp), %eax
+ 15811      F1FFFF
+ 15812 ecdf 0FB69542 		movzbl	-3774(%rbp), %edx
+ 15812      F1FFFF
+ 15813 ece6 0FB6C0   		movzbl	%al, %eax
+ 15814 ece9 6689853E 		movw	%ax, -8898(%rbp)
+ 15814      DDFFFF
+ 15815 ecf0 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 15815      DDFFFF
+ 15816 ecf7 F6F2     		divb	%dl
+ 15817 ecf9 88857EDE 		movb	%al, -8578(%rbp)
+ 15817      FFFF
+ 15818 ecff 0FB68553 		movzbl	-3757(%rbp), %eax
+ 15818      F1FFFF
+ 15819 ed06 0FB69543 		movzbl	-3773(%rbp), %edx
+ 15819      F1FFFF
+ 15820 ed0d 0FB6C0   		movzbl	%al, %eax
+ 15821 ed10 6689853E 		movw	%ax, -8898(%rbp)
+ 15821      DDFFFF
+ 15822 ed17 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 15822      DDFFFF
+ 15823 ed1e F6F2     		divb	%dl
+ 15824 ed20 88857DDE 		movb	%al, -8579(%rbp)
+ 15824      FFFF
+ 15825 ed26 0FB68554 		movzbl	-3756(%rbp), %eax
+ 15825      F1FFFF
+ 15826 ed2d 0FB69544 		movzbl	-3772(%rbp), %edx
+ 15826      F1FFFF
+ 15827 ed34 0FB6C0   		movzbl	%al, %eax
+ 15828 ed37 6689853E 		movw	%ax, -8898(%rbp)
+ 15828      DDFFFF
+ 15829 ed3e 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 15829      DDFFFF
+ 15830 ed45 F6F2     		divb	%dl
+ 15831 ed47 88857CDE 		movb	%al, -8580(%rbp)
+ 15831      FFFF
+ 15832 ed4d 0FB68555 		movzbl	-3755(%rbp), %eax
+ 15832      F1FFFF
+ 15833 ed54 0FB69545 		movzbl	-3771(%rbp), %edx
+ 15833      F1FFFF
+ 15834 ed5b 0FB6C0   		movzbl	%al, %eax
+ 15835 ed5e 6689853E 		movw	%ax, -8898(%rbp)
+ 15835      DDFFFF
+ 15836 ed65 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 15836      DDFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 495
+
+
+ 15837 ed6c F6F2     		divb	%dl
+ 15838 ed6e 4189C1   		movl	%eax, %r9d
+ 15839 ed71 0FB68556 		movzbl	-3754(%rbp), %eax
+ 15839      F1FFFF
+ 15840 ed78 0FB69546 		movzbl	-3770(%rbp), %edx
+ 15840      F1FFFF
+ 15841 ed7f 0FB6C0   		movzbl	%al, %eax
+ 15842 ed82 6689853E 		movw	%ax, -8898(%rbp)
+ 15842      DDFFFF
+ 15843 ed89 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 15843      DDFFFF
+ 15844 ed90 F6F2     		divb	%dl
+ 15845 ed92 89C7     		movl	%eax, %edi
+ 15846 ed94 0FB68557 		movzbl	-3753(%rbp), %eax
+ 15846      F1FFFF
+ 15847 ed9b 0FB69547 		movzbl	-3769(%rbp), %edx
+ 15847      F1FFFF
+ 15848 eda2 0FB6C0   		movzbl	%al, %eax
+ 15849 eda5 6689853E 		movw	%ax, -8898(%rbp)
+ 15849      DDFFFF
+ 15850 edac 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 15850      DDFFFF
+ 15851 edb3 F6F2     		divb	%dl
+ 15852 edb5 89C3     		movl	%eax, %ebx
+ 15853 edb7 0FB68558 		movzbl	-3752(%rbp), %eax
+ 15853      F1FFFF
+ 15854 edbe 0FB69548 		movzbl	-3768(%rbp), %edx
+ 15854      F1FFFF
+ 15855 edc5 0FB6C0   		movzbl	%al, %eax
+ 15856 edc8 6689853E 		movw	%ax, -8898(%rbp)
+ 15856      DDFFFF
+ 15857 edcf 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 15857      DDFFFF
+ 15858 edd6 F6F2     		divb	%dl
+ 15859 edd8 4189C2   		movl	%eax, %r10d
+ 15860 eddb 0FB68559 		movzbl	-3751(%rbp), %eax
+ 15860      F1FFFF
+ 15861 ede2 0FB69549 		movzbl	-3767(%rbp), %edx
+ 15861      F1FFFF
+ 15862 ede9 0FB6C0   		movzbl	%al, %eax
+ 15863 edec 6689853E 		movw	%ax, -8898(%rbp)
+ 15863      DDFFFF
+ 15864 edf3 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 15864      DDFFFF
+ 15865 edfa F6F2     		divb	%dl
+ 15866 edfc 4189C3   		movl	%eax, %r11d
+ 15867 edff 0FB6855A 		movzbl	-3750(%rbp), %eax
+ 15867      F1FFFF
+ 15868 ee06 0FB6954A 		movzbl	-3766(%rbp), %edx
+ 15868      F1FFFF
+ 15869 ee0d 0FB6C0   		movzbl	%al, %eax
+ 15870 ee10 6689853E 		movw	%ax, -8898(%rbp)
+ 15870      DDFFFF
+ 15871 ee17 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 15871      DDFFFF
+ 15872 ee1e F6F2     		divb	%dl
+ 15873 ee20 4189C4   		movl	%eax, %r12d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 496
+
+
+ 15874 ee23 0FB6855B 		movzbl	-3749(%rbp), %eax
+ 15874      F1FFFF
+ 15875 ee2a 0FB6954B 		movzbl	-3765(%rbp), %edx
+ 15875      F1FFFF
+ 15876 ee31 0FB6C0   		movzbl	%al, %eax
+ 15877 ee34 6689853E 		movw	%ax, -8898(%rbp)
+ 15877      DDFFFF
+ 15878 ee3b 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 15878      DDFFFF
+ 15879 ee42 F6F2     		divb	%dl
+ 15880 ee44 4189C5   		movl	%eax, %r13d
+ 15881 ee47 0FB6855C 		movzbl	-3748(%rbp), %eax
+ 15881      F1FFFF
+ 15882 ee4e 0FB6954C 		movzbl	-3764(%rbp), %edx
+ 15882      F1FFFF
+ 15883 ee55 0FB6C0   		movzbl	%al, %eax
+ 15884 ee58 6689853E 		movw	%ax, -8898(%rbp)
+ 15884      DDFFFF
+ 15885 ee5f 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 15885      DDFFFF
+ 15886 ee66 F6F2     		divb	%dl
+ 15887 ee68 4189C6   		movl	%eax, %r14d
+ 15888 ee6b 0FB6855D 		movzbl	-3747(%rbp), %eax
+ 15888      F1FFFF
+ 15889 ee72 0FB6954D 		movzbl	-3763(%rbp), %edx
+ 15889      F1FFFF
+ 15890 ee79 0FB6C0   		movzbl	%al, %eax
+ 15891 ee7c 6689853E 		movw	%ax, -8898(%rbp)
+ 15891      DDFFFF
+ 15892 ee83 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 15892      DDFFFF
+ 15893 ee8a F6F2     		divb	%dl
+ 15894 ee8c 4189C0   		movl	%eax, %r8d
+ 15895 ee8f 0FB6855E 		movzbl	-3746(%rbp), %eax
+ 15895      F1FFFF
+ 15896 ee96 0FB6954E 		movzbl	-3762(%rbp), %edx
+ 15896      F1FFFF
+ 15897 ee9d 0FB6C0   		movzbl	%al, %eax
+ 15898 eea0 6689853E 		movw	%ax, -8898(%rbp)
+ 15898      DDFFFF
+ 15899 eea7 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 15899      DDFFFF
+ 15900 eeae F6F2     		divb	%dl
+ 15901 eeb0 89C6     		movl	%eax, %esi
+ 15902 eeb2 0FB6855F 		movzbl	-3745(%rbp), %eax
+ 15902      F1FFFF
+ 15903 eeb9 0FB6954F 		movzbl	-3761(%rbp), %edx
+ 15903      F1FFFF
+ 15904 eec0 0FB6C0   		movzbl	%al, %eax
+ 15905 eec3 6689853E 		movw	%ax, -8898(%rbp)
+ 15905      DDFFFF
+ 15906 eeca 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 15906      DDFFFF
+ 15907 eed1 F6F2     		divb	%dl
+ 15908 eed3 89C1     		movl	%eax, %ecx
+ 15909              	.LBB2079:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 497
+
+
+ 15910              		.loc 2 346 0
+ 15911 eed5 0FB6D3   		movzbl	%bl, %edx
+ 15912 eed8 400FB6C7 		movzbl	%dil, %eax
+ 15913 eedc 48C1E208 		salq	$8, %rdx
+ 15914 eee0 4809C2   		orq	%rax, %rdx
+ 15915 eee3 410FB6C1 		movzbl	%r9b, %eax
+ 15916 eee7 48C1E208 		salq	$8, %rdx
+ 15917 eeeb 4809C2   		orq	%rax, %rdx
+ 15918 eeee 0FB6857C 		movzbl	-8580(%rbp), %eax
+ 15918      DEFFFF
+ 15919 eef5 48C1E208 		salq	$8, %rdx
+ 15920 eef9 4809C2   		orq	%rax, %rdx
+ 15921 eefc 0FB6857D 		movzbl	-8579(%rbp), %eax
+ 15921      DEFFFF
+ 15922 ef03 48C1E208 		salq	$8, %rdx
+ 15923 ef07 4809C2   		orq	%rax, %rdx
+ 15924 ef0a 0FB6857E 		movzbl	-8578(%rbp), %eax
+ 15924      DEFFFF
+ 15925 ef11 48C1E208 		salq	$8, %rdx
+ 15926 ef15 4809C2   		orq	%rax, %rdx
+ 15927 ef18 0FB6857F 		movzbl	-8577(%rbp), %eax
+ 15927      DEFFFF
+ 15928 ef1f 48C1E208 		salq	$8, %rdx
+ 15929 ef23 4809C2   		orq	%rax, %rdx
+ 15930 ef26 410FB6C7 		movzbl	%r15b, %eax
+ 15931 ef2a 48C1E208 		salq	$8, %rdx
+ 15932 ef2e 4809C2   		orq	%rax, %rdx
+ 15933 ef31 0FB6C1   		movzbl	%cl, %eax
+ 15934 ef34 400FB6CE 		movzbl	%sil, %ecx
+ 15935 ef38 48C1E008 		salq	$8, %rax
+ 15936 ef3c 4809C8   		orq	%rcx, %rax
+ 15937 ef3f 410FB6C8 		movzbl	%r8b, %ecx
+ 15938 ef43 48C1E008 		salq	$8, %rax
+ 15939 ef47 4809C8   		orq	%rcx, %rax
+ 15940 ef4a 410FB6CE 		movzbl	%r14b, %ecx
+ 15941 ef4e 48C1E008 		salq	$8, %rax
+ 15942 ef52 4809C8   		orq	%rcx, %rax
+ 15943 ef55 410FB6CD 		movzbl	%r13b, %ecx
+ 15944 ef59 48C1E008 		salq	$8, %rax
+ 15945 ef5d 4809C8   		orq	%rcx, %rax
+ 15946 ef60 410FB6CC 		movzbl	%r12b, %ecx
+ 15947 ef64 48C1E008 		salq	$8, %rax
+ 15948 ef68 4809C8   		orq	%rcx, %rax
+ 15949 ef6b 410FB6CB 		movzbl	%r11b, %ecx
+ 15950 ef6f 48C1E008 		salq	$8, %rax
+ 15951 ef73 4809C8   		orq	%rcx, %rax
+ 15952 ef76 410FB6CA 		movzbl	%r10b, %ecx
+ 15953 ef7a 48C1E008 		salq	$8, %rax
+ 15954 ef7e 4809C8   		orq	%rcx, %rax
+ 15955 ef81 48899580 		movq	%rdx, -8832(%rbp)
+ 15955      DDFFFF
+ 15956 ef88 48898588 		movq	%rax, -8824(%rbp)
+ 15956      DDFFFF
+ 15957 ef8f 660F6F85 		movdqa	-8832(%rbp), %xmm0
+ 15957      80DDFFFF 
+ 15958              	.LBE2079:
+ 15959              	.LBE2078:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 498
+
+
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 15960              		.loc 2 862 0
+ 15961 ef97 F30F7F85 		movdqu	%xmm0, -3840(%rbp)
+ 15961      00F1FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 15962              		.loc 2 866 0
+ 15963 ef9f C785DCF0 		movl	$0, -3876(%rbp)
+ 15963      FFFF0000 
+ 15963      0000
+ 15964 efa9 E9860200 		jmp	.L372
+ 15964      00
+ 15965              	.L381:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 15966              		.loc 2 868 0
+ 15967 efae 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 15967      00000000 
+ 15968 efb6 F30F7F85 		movdqu	%xmm0, -3728(%rbp)
+ 15968      70F1FFFF 
+ 15969 efbe F30F6F85 		movdqu	-3840(%rbp), %xmm0
+ 15969      00F1FFFF 
+ 15970 efc6 F30F7F85 		movdqu	%xmm0, -3744(%rbp)
+ 15970      60F1FFFF 
+ 15971              	.LBB2080:
+ 15972              	.LBB2081:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 15973              		.loc 2 380 0
+ 15974 efce F30F6F85 		movdqu	-3728(%rbp), %xmm0
+ 15974      70F1FFFF 
+ 15975 efd6 F30F7F85 		movdqu	%xmm0, -7360(%rbp)
+ 15975      40E3FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 15976              		.loc 2 381 0
+ 15977 efde F30F6F85 		movdqu	-3744(%rbp), %xmm0
+ 15977      60F1FFFF 
+ 15978 efe6 F30F7F85 		movdqu	%xmm0, -7376(%rbp)
+ 15978      30E3FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 15979              		.loc 2 383 0
+ 15980 efee C7858CF1 		movl	$0, -3700(%rbp)
+ 15980      FFFF0000 
+ 15980      0000
+ 15981 eff8 EB5C     		jmp	.L373
+ 15982              	.L376:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 15983              		.loc 2 385 0
+ 15984 effa 8B858CF1 		movl	-3700(%rbp), %eax
+ 15984      FFFF
+ 15985 f000 89C0     		mov	%eax, %eax
+ 15986 f002 0FB68405 		movzbl	-7376(%rbp,%rax), %eax
+ 15986      30E3FFFF 
+ 15987 f00a 84C0     		testb	%al, %al
+ 15988 f00c 7912     		jns	.L374
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 15989              		.loc 2 386 0
+ 15990 f00e 8B858CF1 		movl	-3700(%rbp), %eax
+ 15990      FFFF
+ 15991 f014 89C0     		mov	%eax, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 499
+
+
+ 15992 f016 C6840550 		movb	$0, -7344(%rbp,%rax)
+ 15992      E3FFFF00 
+ 15993 f01e EB2F     		jmp	.L375
+ 15994              	.L374:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 15995              		.loc 2 388 0
+ 15996 f020 8B8D8CF1 		movl	-3700(%rbp), %ecx
+ 15996      FFFF
+ 15997 f026 8B858CF1 		movl	-3700(%rbp), %eax
+ 15997      FFFF
+ 15998 f02c 89C0     		mov	%eax, %eax
+ 15999 f02e 0FB68405 		movzbl	-7376(%rbp,%rax), %eax
+ 15999      30E3FFFF 
+ 16000 f036 0FB6C0   		movzbl	%al, %eax
+ 16001 f039 83E00F   		andl	$15, %eax
+ 16002 f03c 4898     		cltq
+ 16003 f03e 0FB69405 		movzbl	-7360(%rbp,%rax), %edx
+ 16003      40E3FFFF 
+ 16004 f046 89C8     		mov	%ecx, %eax
+ 16005 f048 88940550 		movb	%dl, -7344(%rbp,%rax)
+ 16005      E3FFFF
+ 16006              	.L375:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 16007              		.loc 2 383 0
+ 16008 f04f 83858CF1 		addl	$1, -3700(%rbp)
+ 16008      FFFF01
+ 16009              	.L373:
+ 16010 f056 83BD8CF1 		cmpl	$15, -3700(%rbp)
+ 16010      FFFF0F
+ 16011 f05d 769B     		jbe	.L376
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 16012              		.loc 2 391 0
+ 16013 f05f F30F6F85 		movdqu	-7344(%rbp), %xmm0
+ 16013      50E3FFFF 
+ 16014              	.LBE2081:
+ 16015              	.LBE2080:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 16016              		.loc 2 868 0
+ 16017 f067 F30F7F85 		movdqu	%xmm0, -3856(%rbp)
+ 16017      F0F0FFFF 
+ 16018 f06f F30F6F85 		movdqu	-3824(%rbp), %xmm0
+ 16018      10F1FFFF 
+ 16019 f077 F30F7F85 		movdqu	%xmm0, -3680(%rbp)
+ 16019      A0F1FFFF 
+ 16020 f07f F30F6F85 		movdqu	-3856(%rbp), %xmm0
+ 16020      F0F0FFFF 
+ 16021 f087 F30F7F85 		movdqu	%xmm0, -3696(%rbp)
+ 16021      90F1FFFF 
+ 16022              	.LBB2082:
+ 16023              	.LBB2083:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 16024              		.loc 2 234 0
+ 16025 f08f F30F6F85 		movdqu	-3696(%rbp), %xmm0
+ 16025      90F1FFFF 
+ 16026 f097 F30F6F8D 		movdqu	-3680(%rbp), %xmm1
+ 16026      A0F1FFFF 
+ 16027 f09f 660FEBC1 		por	%xmm1, %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 500
+
+
+ 16028              	.LBE2083:
+ 16029              	.LBE2082:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 16030              		.loc 2 870 0
+ 16031 f0a3 F30F7F85 		movdqu	%xmm0, -3856(%rbp)
+ 16031      F0F0FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 16032              		.loc 2 872 0
+ 16033 f0ab 8B85DCF0 		mov	-3876(%rbp), %eax
+ 16033      FFFF
+ 16034 f0b1 48C1E004 		salq	$4, %rax
+ 16035 f0b5 480385B8 		addq	-3912(%rbp), %rax
+ 16035      F0FFFF
+ 16036 f0bc 660F6F00 		movdqa	(%rax), %xmm0
+ 16037 f0c0 F30F7F85 		movdqu	%xmm0, -3648(%rbp)
+ 16037      C0F1FFFF 
+ 16038 f0c8 F30F6F85 		movdqu	-3856(%rbp), %xmm0
+ 16038      F0F0FFFF 
+ 16039 f0d0 F30F7F85 		movdqu	%xmm0, -3664(%rbp)
+ 16039      B0F1FFFF 
+ 16040              	.LBB2084:
+ 16041              	.LBB2085:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 16042              		.loc 2 380 0
+ 16043 f0d8 F30F6F85 		movdqu	-3648(%rbp), %xmm0
+ 16043      C0F1FFFF 
+ 16044 f0e0 F30F7F85 		movdqu	%xmm0, -7312(%rbp)
+ 16044      70E3FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 16045              		.loc 2 381 0
+ 16046 f0e8 F30F6F85 		movdqu	-3664(%rbp), %xmm0
+ 16046      B0F1FFFF 
+ 16047 f0f0 F30F7F85 		movdqu	%xmm0, -7328(%rbp)
+ 16047      60E3FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 16048              		.loc 2 383 0
+ 16049 f0f8 C785DCF1 		movl	$0, -3620(%rbp)
+ 16049      FFFF0000 
+ 16049      0000
+ 16050 f102 EB5C     		jmp	.L377
+ 16051              	.L380:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 16052              		.loc 2 385 0
+ 16053 f104 8B85DCF1 		movl	-3620(%rbp), %eax
+ 16053      FFFF
+ 16054 f10a 89C0     		mov	%eax, %eax
+ 16055 f10c 0FB68405 		movzbl	-7328(%rbp,%rax), %eax
+ 16055      60E3FFFF 
+ 16056 f114 84C0     		testb	%al, %al
+ 16057 f116 7912     		jns	.L378
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 16058              		.loc 2 386 0
+ 16059 f118 8B85DCF1 		movl	-3620(%rbp), %eax
+ 16059      FFFF
+ 16060 f11e 89C0     		mov	%eax, %eax
+ 16061 f120 C6840580 		movb	$0, -7296(%rbp,%rax)
+ 16061      E3FFFF00 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 501
+
+
+ 16062 f128 EB2F     		jmp	.L379
+ 16063              	.L378:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 16064              		.loc 2 388 0
+ 16065 f12a 8B8DDCF1 		movl	-3620(%rbp), %ecx
+ 16065      FFFF
+ 16066 f130 8B85DCF1 		movl	-3620(%rbp), %eax
+ 16066      FFFF
+ 16067 f136 89C0     		mov	%eax, %eax
+ 16068 f138 0FB68405 		movzbl	-7328(%rbp,%rax), %eax
+ 16068      60E3FFFF 
+ 16069 f140 0FB6C0   		movzbl	%al, %eax
+ 16070 f143 83E00F   		andl	$15, %eax
+ 16071 f146 4898     		cltq
+ 16072 f148 0FB69405 		movzbl	-7312(%rbp,%rax), %edx
+ 16072      70E3FFFF 
+ 16073 f150 89C8     		mov	%ecx, %eax
+ 16074 f152 88940580 		movb	%dl, -7296(%rbp,%rax)
+ 16074      E3FFFF
+ 16075              	.L379:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 16076              		.loc 2 383 0
+ 16077 f159 8385DCF1 		addl	$1, -3620(%rbp)
+ 16077      FFFF01
+ 16078              	.L377:
+ 16079 f160 83BDDCF1 		cmpl	$15, -3620(%rbp)
+ 16079      FFFF0F
+ 16080 f167 769B     		jbe	.L380
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 16081              		.loc 2 391 0
+ 16082 f169 F30F6F85 		movdqu	-7296(%rbp), %xmm0
+ 16082      80E3FFFF 
+ 16083              	.LBE2085:
+ 16084              	.LBE2084:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 16085              		.loc 2 872 0
+ 16086 f171 F30F7F85 		movdqu	%xmm0, -3856(%rbp)
+ 16086      F0F0FFFF 
+ 16087 f179 F30F6F85 		movdqu	-3872(%rbp), %xmm0
+ 16087      E0F0FFFF 
+ 16088 f181 F30F7F85 		movdqu	%xmm0, -3600(%rbp)
+ 16088      F0F1FFFF 
+ 16089 f189 F30F6F85 		movdqu	-3856(%rbp), %xmm0
+ 16089      F0F0FFFF 
+ 16090 f191 F30F7F85 		movdqu	%xmm0, -3616(%rbp)
+ 16090      E0F1FFFF 
+ 16091              	.LBB2086:
+ 16092              	.LBB2087:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 16093              		.loc 2 234 0
+ 16094 f199 F30F6F85 		movdqu	-3616(%rbp), %xmm0
+ 16094      E0F1FFFF 
+ 16095 f1a1 F30F6F8D 		movdqu	-3600(%rbp), %xmm1
+ 16095      F0F1FFFF 
+ 16096 f1a9 660FEBC1 		por	%xmm1, %xmm0
+ 16097              	.LBE2087:
+ 16098              	.LBE2086:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 502
+
+
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 16099              		.loc 2 874 0
+ 16100 f1ad F30F7F85 		movdqu	%xmm0, -3872(%rbp)
+ 16100      E0F0FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 16101              		.loc 2 876 0
+ 16102 f1b5 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 16102      00000000 
+ 16103 f1bd F30F6F8D 		movdqu	-3840(%rbp), %xmm1
+ 16103      00F1FFFF 
+ 16104 f1c5 F30F7F8D 		movdqu	%xmm1, -3568(%rbp)
+ 16104      10F2FFFF 
+ 16105 f1cd F30F7F85 		movdqu	%xmm0, -3584(%rbp)
+ 16105      00F2FFFF 
+ 16106              	.LBB2088:
+ 16107              	.LBB2089:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 16108              		.loc 2 290 0
+ 16109 f1d5 F30F6F8D 		movdqu	-3584(%rbp), %xmm1
+ 16109      00F2FFFF 
+ 16110 f1dd F30F6F85 		movdqu	-3568(%rbp), %xmm0
+ 16110      10F2FFFF 
+ 16111 f1e5 660FF8C1 		psubb	%xmm1, %xmm0
+ 16112              	.LBE2089:
+ 16113              	.LBE2088:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 16114              		.loc 2 876 0
+ 16115 f1e9 F30F7F85 		movdqu	%xmm0, -3840(%rbp)
+ 16115      00F1FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 16116              		.loc 2 878 0
+ 16117 f1f1 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 16117      00000000 
+ 16118 f1f9 F30F6F8D 		movdqu	-3840(%rbp), %xmm1
+ 16118      00F1FFFF 
+ 16119 f201 F30F7F8D 		movdqu	%xmm1, -3536(%rbp)
+ 16119      30F2FFFF 
+ 16120 f209 F30F7F85 		movdqu	%xmm0, -3552(%rbp)
+ 16120      20F2FFFF 
+ 16121              	.LBB2090:
+ 16122              	.LBB2091:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 16123              		.loc 2 206 0
+ 16124 f211 F30F6F85 		movdqu	-3552(%rbp), %xmm0
+ 16124      20F2FFFF 
+ 16125 f219 F30F6F8D 		movdqu	-3536(%rbp), %xmm1
+ 16125      30F2FFFF 
+ 16126 f221 660FDBC1 		pand	%xmm1, %xmm0
+ 16127              	.LBE2091:
+ 16128              	.LBE2090:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 16129              		.loc 2 878 0
+ 16130 f225 F30F7F85 		movdqu	%xmm0, -3840(%rbp)
+ 16130      00F1FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 16131              		.loc 2 866 0
+ 16132 f22d 8385DCF0 		addl	$1, -3876(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 503
+
+
+ 16132      FFFF01
+ 16133              	.L372:
+ 16134 f234 83BDDCF0 		cmpl	$15, -3876(%rbp)
+ 16134      FFFF0F
+ 16135 f23b 0F866DFD 		jbe	.L381
+ 16135      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 16136              		.loc 2 882 0
+ 16137 f241 F30F6F85 		movdqu	-3872(%rbp), %xmm0
+ 16137      E0F0FFFF 
+ 16138              	.LBE2075:
+ 16139              	.LBE2074:
+ 16140              	.LBE2073:
+ 16141              	.LBE2072:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 16142              		.loc 2 1682 0
+ 16143 f249 660F7F85 		movdqa	%xmm0, -8624(%rbp)
+ 16143      50DEFFFF 
+ 16144              	.LBB2092:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 16145              		.loc 2 1683 0
+ 16146 f251 660F6F85 		movdqa	-8624(%rbp), %xmm0
+ 16146      50DEFFFF 
+ 16147 f259 F30F7F85 		movdqu	%xmm0, -7408(%rbp)
+ 16147      10E3FFFF 
+ 16148 f261 E8000000 		call	KDbgWriterGet at PLT
+ 16148      00
+ 16149 f266 4885C0   		testq	%rax, %rax
+ 16150 f269 7479     		je	.L383
+ 16151 f26b BF010000 		movl	$1, %edi
+ 16151      00
+ 16152 f270 E8000000 		call	KDbgCondToFlag at PLT
+ 16152      00
+ 16153 f275 4889C6   		movq	%rax, %rsi
+ 16154 f278 BF100000 		movl	$16, %edi
+ 16154      00
+ 16155 f27d E8000000 		call	KDbgTestModConds at PLT
+ 16155      00
+ 16156 f282 84C0     		testb	%al, %al
+ 16157 f284 745E     		je	.L383
+ 16158 f286 8B851CE3 		movl	-7396(%rbp), %eax
+ 16158      FFFF
+ 16159 f28c 89C7     		movl	%eax, %edi
+ 16160 f28e E86D0DFF 		call	bswap_32
+ 16160      FF
+ 16161 f293 4189C5   		movl	%eax, %r13d
+ 16162 f296 8B8518E3 		movl	-7400(%rbp), %eax
+ 16162      FFFF
+ 16163 f29c 89C7     		movl	%eax, %edi
+ 16164 f29e E85D0DFF 		call	bswap_32
+ 16164      FF
+ 16165 f2a3 4189C4   		movl	%eax, %r12d
+ 16166 f2a6 8B8514E3 		movl	-7404(%rbp), %eax
+ 16166      FFFF
+ 16167 f2ac 89C7     		movl	%eax, %edi
+ 16168 f2ae E84D0DFF 		call	bswap_32
+ 16168      FF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 504
+
+
+ 16169 f2b3 89C3     		movl	%eax, %ebx
+ 16170 f2b5 8B8510E3 		movl	-7408(%rbp), %eax
+ 16170      FFFF
+ 16171 f2bb 89C7     		movl	%eax, %edi
+ 16172 f2bd E83E0DFF 		call	bswap_32
+ 16172      FF
+ 16173 f2c2 4589E9   		movl	%r13d, %r9d
+ 16174 f2c5 4589E0   		movl	%r12d, %r8d
+ 16175 f2c8 89D9     		movl	%ebx, %ecx
+ 16176 f2ca 89C2     		movl	%eax, %edx
+ 16177 f2cc 488D3500 		leaq	.LC0(%rip), %rsi
+ 16177      000000
+ 16178 f2d3 488D3D00 		leaq	.LC1(%rip), %rdi
+ 16178      000000
+ 16179 f2da B8000000 		movl	$0, %eax
+ 16179      00
+ 16180 f2df E8000000 		call	KDbgMsg at PLT
+ 16180      00
+ 16181              	.L383:
+ 16182 f2e4 660F6F85 		movdqa	-8624(%rbp), %xmm0
+ 16182      50DEFFFF 
+ 16183 f2ec F30F7F85 		movdqu	%xmm0, -3520(%rbp)
+ 16183      40F2FFFF 
+ 16184              	.LBE2092:
+ 16185              	.LBB2093:
+ 16186              	.LBB2094:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 16187              		.loc 2 667 0
+ 16188 f2f4 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 16188      00000000 
+ 16189 f2fc F30F6F8D 		movdqu	-3520(%rbp), %xmm1
+ 16189      40F2FFFF 
+ 16190 f304 F30F7F8D 		movdqu	%xmm1, -3488(%rbp)
+ 16190      60F2FFFF 
+ 16191 f30c F30F7F85 		movdqu	%xmm0, -3504(%rbp)
+ 16191      50F2FFFF 
+ 16192              	.LBB2095:
+ 16193              	.LBB2096:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 16194              		.loc 2 380 0
+ 16195 f314 F30F6F85 		movdqu	-3488(%rbp), %xmm0
+ 16195      60F2FFFF 
+ 16196 f31c F30F7F85 		movdqu	%xmm0, -7264(%rbp)
+ 16196      A0E3FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 16197              		.loc 2 381 0
+ 16198 f324 F30F6F85 		movdqu	-3504(%rbp), %xmm0
+ 16198      50F2FFFF 
+ 16199 f32c F30F7F85 		movdqu	%xmm0, -7280(%rbp)
+ 16199      90E3FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 16200              		.loc 2 383 0
+ 16201 f334 C7857CF2 		movl	$0, -3460(%rbp)
+ 16201      FFFF0000 
+ 16201      0000
+ 16202 f33e EB5C     		jmp	.L384
+ 16203              	.L387:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 505
+
+
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 16204              		.loc 2 385 0
+ 16205 f340 8B857CF2 		movl	-3460(%rbp), %eax
+ 16205      FFFF
+ 16206 f346 89C0     		mov	%eax, %eax
+ 16207 f348 0FB68405 		movzbl	-7280(%rbp,%rax), %eax
+ 16207      90E3FFFF 
+ 16208 f350 84C0     		testb	%al, %al
+ 16209 f352 7912     		jns	.L385
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 16210              		.loc 2 386 0
+ 16211 f354 8B857CF2 		movl	-3460(%rbp), %eax
+ 16211      FFFF
+ 16212 f35a 89C0     		mov	%eax, %eax
+ 16213 f35c C68405B0 		movb	$0, -7248(%rbp,%rax)
+ 16213      E3FFFF00 
+ 16214 f364 EB2F     		jmp	.L386
+ 16215              	.L385:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 16216              		.loc 2 388 0
+ 16217 f366 8B8D7CF2 		movl	-3460(%rbp), %ecx
+ 16217      FFFF
+ 16218 f36c 8B857CF2 		movl	-3460(%rbp), %eax
+ 16218      FFFF
+ 16219 f372 89C0     		mov	%eax, %eax
+ 16220 f374 0FB68405 		movzbl	-7280(%rbp,%rax), %eax
+ 16220      90E3FFFF 
+ 16221 f37c 0FB6C0   		movzbl	%al, %eax
+ 16222 f37f 83E00F   		andl	$15, %eax
+ 16223 f382 4898     		cltq
+ 16224 f384 0FB69405 		movzbl	-7264(%rbp,%rax), %edx
+ 16224      A0E3FFFF 
+ 16225 f38c 89C8     		mov	%ecx, %eax
+ 16226 f38e 889405B0 		movb	%dl, -7248(%rbp,%rax)
+ 16226      E3FFFF
+ 16227              	.L386:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 16228              		.loc 2 383 0
+ 16229 f395 83857CF2 		addl	$1, -3460(%rbp)
+ 16229      FFFF01
+ 16230              	.L384:
+ 16231 f39c 83BD7CF2 		cmpl	$15, -3460(%rbp)
+ 16231      FFFF0F
+ 16232 f3a3 769B     		jbe	.L387
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 16233              		.loc 2 391 0
+ 16234 f3a5 F30F6F85 		movdqu	-7248(%rbp), %xmm0
+ 16234      B0E3FFFF 
+ 16235              	.LBE2096:
+ 16236              	.LBE2095:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 16237              		.loc 2 667 0
+ 16238 f3ad F30F7F85 		movdqu	%xmm0, -3520(%rbp)
+ 16238      40F2FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 16239              		.loc 2 668 0
+ 16240 f3b5 F30F6F85 		movdqu	-3520(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 506
+
+
+ 16240      40F2FFFF 
+ 16241              	.LBE2094:
+ 16242              	.LBE2093:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 16243              		.loc 2 1684 0
+ 16244 f3bd 660F7F85 		movdqa	%xmm0, -8624(%rbp)
+ 16244      50DEFFFF 
+ 16245              	.LBB2097:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 16246              		.loc 2 1685 0
+ 16247 f3c5 660F6F85 		movdqa	-8624(%rbp), %xmm0
+ 16247      50DEFFFF 
+ 16248 f3cd F30F7F85 		movdqu	%xmm0, -7424(%rbp)
+ 16248      00E3FFFF 
+ 16249 f3d5 E8000000 		call	KDbgWriterGet at PLT
+ 16249      00
+ 16250 f3da 4885C0   		testq	%rax, %rax
+ 16251 f3dd 7479     		je	.L389
+ 16252 f3df BF010000 		movl	$1, %edi
+ 16252      00
+ 16253 f3e4 E8000000 		call	KDbgCondToFlag at PLT
+ 16253      00
+ 16254 f3e9 4889C6   		movq	%rax, %rsi
+ 16255 f3ec BF100000 		movl	$16, %edi
+ 16255      00
+ 16256 f3f1 E8000000 		call	KDbgTestModConds at PLT
+ 16256      00
+ 16257 f3f6 84C0     		testb	%al, %al
+ 16258 f3f8 745E     		je	.L389
+ 16259 f3fa 8B850CE3 		movl	-7412(%rbp), %eax
+ 16259      FFFF
+ 16260 f400 89C7     		movl	%eax, %edi
+ 16261 f402 E8F90BFF 		call	bswap_32
+ 16261      FF
+ 16262 f407 4189C5   		movl	%eax, %r13d
+ 16263 f40a 8B8508E3 		movl	-7416(%rbp), %eax
+ 16263      FFFF
+ 16264 f410 89C7     		movl	%eax, %edi
+ 16265 f412 E8E90BFF 		call	bswap_32
+ 16265      FF
+ 16266 f417 4189C4   		movl	%eax, %r12d
+ 16267 f41a 8B8504E3 		movl	-7420(%rbp), %eax
+ 16267      FFFF
+ 16268 f420 89C7     		movl	%eax, %edi
+ 16269 f422 E8D90BFF 		call	bswap_32
+ 16269      FF
+ 16270 f427 89C3     		movl	%eax, %ebx
+ 16271 f429 8B8500E3 		movl	-7424(%rbp), %eax
+ 16271      FFFF
+ 16272 f42f 89C7     		movl	%eax, %edi
+ 16273 f431 E8CA0BFF 		call	bswap_32
+ 16273      FF
+ 16274 f436 4589E9   		movl	%r13d, %r9d
+ 16275 f439 4589E0   		movl	%r12d, %r8d
+ 16276 f43c 89D9     		movl	%ebx, %ecx
+ 16277 f43e 89C2     		movl	%eax, %edx
+ 16278 f440 488D3500 		leaq	.LC2(%rip), %rsi
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 507
+
+
+ 16278      000000
+ 16279 f447 488D3D00 		leaq	.LC1(%rip), %rdi
+ 16279      000000
+ 16280 f44e B8000000 		movl	$0, %eax
+ 16280      00
+ 16281 f453 E8000000 		call	KDbgMsg at PLT
+ 16281      00
+ 16282              	.L389:
+ 16283 f458 660F6F85 		movdqa	-8624(%rbp), %xmm0
+ 16283      50DEFFFF 
+ 16284 f460 F30F7F85 		movdqu	%xmm0, -3440(%rbp)
+ 16284      90F2FFFF 
+ 16285 f468 660F6F85 		movdqa	-8608(%rbp), %xmm0
+ 16285      60DEFFFF 
+ 16286 f470 F30F7F85 		movdqu	%xmm0, -3456(%rbp)
+ 16286      80F2FFFF 
+ 16287              	.LBE2097:
+ 16288              	.LBB2098:
+ 16289              	.LBB2099:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 16290              		.loc 2 178 0
+ 16291 f478 F30F6F85 		movdqu	-3456(%rbp), %xmm0
+ 16291      80F2FFFF 
+ 16292 f480 F30F6F8D 		movdqu	-3440(%rbp), %xmm1
+ 16292      90F2FFFF 
+ 16293 f488 660FEFC1 		pxor	%xmm1, %xmm0
+ 16294              	.LBE2099:
+ 16295              	.LBE2098:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 16296              		.loc 2 1686 0
+ 16297 f48c 660F7F85 		movdqa	%xmm0, -8624(%rbp)
+ 16297      50DEFFFF 
+ 16298              	.LBB2100:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 16299              		.loc 2 1687 0
+ 16300 f494 660F6F85 		movdqa	-8624(%rbp), %xmm0
+ 16300      50DEFFFF 
+ 16301 f49c F30F7F85 		movdqu	%xmm0, -7440(%rbp)
+ 16301      F0E2FFFF 
+ 16302 f4a4 E8000000 		call	KDbgWriterGet at PLT
+ 16302      00
+ 16303 f4a9 4885C0   		testq	%rax, %rax
+ 16304 f4ac 7479     		je	.L391
+ 16305 f4ae BF010000 		movl	$1, %edi
+ 16305      00
+ 16306 f4b3 E8000000 		call	KDbgCondToFlag at PLT
+ 16306      00
+ 16307 f4b8 4889C6   		movq	%rax, %rsi
+ 16308 f4bb BF100000 		movl	$16, %edi
+ 16308      00
+ 16309 f4c0 E8000000 		call	KDbgTestModConds at PLT
+ 16309      00
+ 16310 f4c5 84C0     		testb	%al, %al
+ 16311 f4c7 745E     		je	.L391
+ 16312 f4c9 8B85FCE2 		movl	-7428(%rbp), %eax
+ 16312      FFFF
+ 16313 f4cf 89C7     		movl	%eax, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 508
+
+
+ 16314 f4d1 E82A0BFF 		call	bswap_32
+ 16314      FF
+ 16315 f4d6 4189C5   		movl	%eax, %r13d
+ 16316 f4d9 8B85F8E2 		movl	-7432(%rbp), %eax
+ 16316      FFFF
+ 16317 f4df 89C7     		movl	%eax, %edi
+ 16318 f4e1 E81A0BFF 		call	bswap_32
+ 16318      FF
+ 16319 f4e6 4189C4   		movl	%eax, %r12d
+ 16320 f4e9 8B85F4E2 		movl	-7436(%rbp), %eax
+ 16320      FFFF
+ 16321 f4ef 89C7     		movl	%eax, %edi
+ 16322 f4f1 E80A0BFF 		call	bswap_32
+ 16322      FF
+ 16323 f4f6 89C3     		movl	%eax, %ebx
+ 16324 f4f8 8B85F0E2 		movl	-7440(%rbp), %eax
+ 16324      FFFF
+ 16325 f4fe 89C7     		movl	%eax, %edi
+ 16326 f500 E8FB0AFF 		call	bswap_32
+ 16326      FF
+ 16327 f505 4589E9   		movl	%r13d, %r9d
+ 16328 f508 4589E0   		movl	%r12d, %r8d
+ 16329 f50b 89D9     		movl	%ebx, %ecx
+ 16330 f50d 89C2     		movl	%eax, %edx
+ 16331 f50f 488D3500 		leaq	.LC3(%rip), %rsi
+ 16331      000000
+ 16332 f516 488D3D00 		leaq	.LC1(%rip), %rdi
+ 16332      000000
+ 16333 f51d B8000000 		movl	$0, %eax
+ 16333      00
+ 16334 f522 E8000000 		call	KDbgMsg at PLT
+ 16334      00
+ 16335              	.L391:
+ 16336 f527 660F6F85 		movdqa	-8624(%rbp), %xmm0
+ 16336      50DEFFFF 
+ 16337 f52f F30F7F85 		movdqu	%xmm0, -3424(%rbp)
+ 16337      A0F2FFFF 
+ 16338              	.LBE2100:
+ 16339              	.LBB2101:
+ 16340              	.LBB2102:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 16341              		.loc 2 1357 0
+ 16342 f537 F30F6F85 		movdqu	-3424(%rbp), %xmm0
+ 16342      A0F2FFFF 
+ 16343 f53f F30F7F85 		movdqu	%xmm0, -7232(%rbp)
+ 16343      C0E3FFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 16344              		.loc 2 1358 0
+ 16345 f547 8B85CCE3 		movl	-7220(%rbp), %eax
+ 16345      FFFF
+ 16346 f54d 8985C8E3 		movl	%eax, -7224(%rbp)
+ 16346      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 16347              		.loc 2 1359 0
+ 16348 f553 8B85CCE3 		movl	-7220(%rbp), %eax
+ 16348      FFFF
+ 16349 f559 8985C4E3 		movl	%eax, -7228(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 509
+
+
+ 16349      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 16350              		.loc 2 1360 0
+ 16351 f55f 8B85CCE3 		movl	-7220(%rbp), %eax
+ 16351      FFFF
+ 16352 f565 8985C0E3 		movl	%eax, -7232(%rbp)
+ 16352      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 16353              		.loc 2 1361 0
+ 16354 f56b F30F6F85 		movdqu	-7232(%rbp), %xmm0
+ 16354      C0E3FFFF 
+ 16355              	.LBE2102:
+ 16356              	.LBE2101:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 16357              		.loc 2 1688 0
+ 16358 f573 660F7F85 		movdqa	%xmm0, -8624(%rbp)
+ 16358      50DEFFFF 
+ 16359              	.LBB2103:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 16360              		.loc 2 1689 0
+ 16361 f57b 660F6F85 		movdqa	-8624(%rbp), %xmm0
+ 16361      50DEFFFF 
+ 16362 f583 F30F7F85 		movdqu	%xmm0, -7456(%rbp)
+ 16362      E0E2FFFF 
+ 16363 f58b E8000000 		call	KDbgWriterGet at PLT
+ 16363      00
+ 16364 f590 4885C0   		testq	%rax, %rax
+ 16365 f593 7479     		je	.L393
+ 16366 f595 BF010000 		movl	$1, %edi
+ 16366      00
+ 16367 f59a E8000000 		call	KDbgCondToFlag at PLT
+ 16367      00
+ 16368 f59f 4889C6   		movq	%rax, %rsi
+ 16369 f5a2 BF100000 		movl	$16, %edi
+ 16369      00
+ 16370 f5a7 E8000000 		call	KDbgTestModConds at PLT
+ 16370      00
+ 16371 f5ac 84C0     		testb	%al, %al
+ 16372 f5ae 745E     		je	.L393
+ 16373 f5b0 8B85ECE2 		movl	-7444(%rbp), %eax
+ 16373      FFFF
+ 16374 f5b6 89C7     		movl	%eax, %edi
+ 16375 f5b8 E8430AFF 		call	bswap_32
+ 16375      FF
+ 16376 f5bd 4189C5   		movl	%eax, %r13d
+ 16377 f5c0 8B85E8E2 		movl	-7448(%rbp), %eax
+ 16377      FFFF
+ 16378 f5c6 89C7     		movl	%eax, %edi
+ 16379 f5c8 E8330AFF 		call	bswap_32
+ 16379      FF
+ 16380 f5cd 4189C4   		movl	%eax, %r12d
+ 16381 f5d0 8B85E4E2 		movl	-7452(%rbp), %eax
+ 16381      FFFF
+ 16382 f5d6 89C7     		movl	%eax, %edi
+ 16383 f5d8 E8230AFF 		call	bswap_32
+ 16383      FF
+ 16384 f5dd 89C3     		movl	%eax, %ebx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 510
+
+
+ 16385 f5df 8B85E0E2 		movl	-7456(%rbp), %eax
+ 16385      FFFF
+ 16386 f5e5 89C7     		movl	%eax, %edi
+ 16387 f5e7 E8140AFF 		call	bswap_32
+ 16387      FF
+ 16388 f5ec 4589E9   		movl	%r13d, %r9d
+ 16389 f5ef 4589E0   		movl	%r12d, %r8d
+ 16390 f5f2 89D9     		movl	%ebx, %ecx
+ 16391 f5f4 89C2     		movl	%eax, %edx
+ 16392 f5f6 488D3500 		leaq	.LC4(%rip), %rsi
+ 16392      000000
+ 16393 f5fd 488D3D00 		leaq	.LC1(%rip), %rdi
+ 16393      000000
+ 16394 f604 B8000000 		movl	$0, %eax
+ 16394      00
+ 16395 f609 E8000000 		call	KDbgMsg at PLT
+ 16395      00
+ 16396              	.L393:
+ 16397              	.LBE2103:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 16398              		.loc 2 1690 0
+ 16399 f60e 660F6F85 		movdqa	-8624(%rbp), %xmm0
+ 16399      50DEFFFF 
+ 16400              	.LBE2069:
+ 16401              	.LBE2068:
+1930:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(6,0x04);    /* k24 : k25 : k26 : k27 */
+ 16402              		.loc 2 1930 0
+ 16403 f616 F30F7F85 		movdqu	%xmm0, -5664(%rbp)
+ 16403      E0E9FFFF 
+ 16404 f61e F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 16404      C0E9FFFF 
+ 16405 f626 F30F7F85 		movdqu	%xmm0, -3408(%rbp)
+ 16405      B0F2FFFF 
+ 16406              	.LBB2104:
+ 16407              	.LBB2105:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 16408              		.loc 2 1565 0
+ 16409 f62e F30F6F85 		movdqu	-3408(%rbp), %xmm0
+ 16409      B0F2FFFF 
+ 16410 f636 660F7F85 		movdqa	%xmm0, -8576(%rbp)
+ 16410      80DEFFFF 
+ 16411 f63e 660F6F85 		movdqa	-8576(%rbp), %xmm0
+ 16411      80DEFFFF 
+ 16412 f646 F30F7F85 		movdqu	%xmm0, -3392(%rbp)
+ 16412      C0F2FFFF 
+ 16413              	.LBB2106:
+ 16414              	.LBB2107:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 16415              		.loc 2 1282 0
+ 16416 f64e F30F6F85 		movdqu	-3392(%rbp), %xmm0
+ 16416      C0F2FFFF 
+ 16417 f656 F30F7F85 		movdqu	%xmm0, -7216(%rbp)
+ 16417      D0E3FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 16418              		.loc 2 1283 0
+ 16419 f65e 8B85D8E3 		movl	-7208(%rbp), %eax
+ 16419      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 511
+
+
+ 16420 f664 8985DCE3 		movl	%eax, -7204(%rbp)
+ 16420      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 16421              		.loc 2 1284 0
+ 16422 f66a 8B85D4E3 		movl	-7212(%rbp), %eax
+ 16422      FFFF
+ 16423 f670 8985D8E3 		movl	%eax, -7208(%rbp)
+ 16423      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 16424              		.loc 2 1285 0
+ 16425 f676 8B85D0E3 		movl	-7216(%rbp), %eax
+ 16425      FFFF
+ 16426 f67c 8985D4E3 		movl	%eax, -7212(%rbp)
+ 16426      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 16427              		.loc 2 1286 0
+ 16428 f682 C785D0E3 		movl	$0, -7216(%rbp)
+ 16428      FFFF0000 
+ 16428      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 16429              		.loc 2 1287 0
+ 16430 f68c F30F6F85 		movdqu	-7216(%rbp), %xmm0
+ 16430      D0E3FFFF 
+ 16431              	.LBE2107:
+ 16432              	.LBE2106:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 16433              		.loc 2 1567 0
+ 16434 f694 660F7F85 		movdqa	%xmm0, -8576(%rbp)
+ 16434      80DEFFFF 
+ 16435 f69c 660F6F85 		movdqa	-8576(%rbp), %xmm0
+ 16435      80DEFFFF 
+ 16436 f6a4 660FEF85 		pxor	-3408(%rbp), %xmm0
+ 16436      B0F2FFFF 
+ 16437 f6ac F30F7F85 		movdqu	%xmm0, -3408(%rbp)
+ 16437      B0F2FFFF 
+ 16438 f6b4 660F6F85 		movdqa	-8576(%rbp), %xmm0
+ 16438      80DEFFFF 
+ 16439 f6bc F30F7F85 		movdqu	%xmm0, -3376(%rbp)
+ 16439      D0F2FFFF 
+ 16440              	.LBB2108:
+ 16441              	.LBB2109:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 16442              		.loc 2 1282 0
+ 16443 f6c4 F30F6F85 		movdqu	-3376(%rbp), %xmm0
+ 16443      D0F2FFFF 
+ 16444 f6cc F30F7F85 		movdqu	%xmm0, -7200(%rbp)
+ 16444      E0E3FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 16445              		.loc 2 1283 0
+ 16446 f6d4 8B85E8E3 		movl	-7192(%rbp), %eax
+ 16446      FFFF
+ 16447 f6da 8985ECE3 		movl	%eax, -7188(%rbp)
+ 16447      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 16448              		.loc 2 1284 0
+ 16449 f6e0 8B85E4E3 		movl	-7196(%rbp), %eax
+ 16449      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 512
+
+
+ 16450 f6e6 8985E8E3 		movl	%eax, -7192(%rbp)
+ 16450      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 16451              		.loc 2 1285 0
+ 16452 f6ec 8B85E0E3 		movl	-7200(%rbp), %eax
+ 16452      FFFF
+ 16453 f6f2 8985E4E3 		movl	%eax, -7196(%rbp)
+ 16453      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 16454              		.loc 2 1286 0
+ 16455 f6f8 C785E0E3 		movl	$0, -7200(%rbp)
+ 16455      FFFF0000 
+ 16455      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 16456              		.loc 2 1287 0
+ 16457 f702 F30F6F85 		movdqu	-7200(%rbp), %xmm0
+ 16457      E0E3FFFF 
+ 16458              	.LBE2109:
+ 16459              	.LBE2108:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 16460              		.loc 2 1568 0
+ 16461 f70a 660F7F85 		movdqa	%xmm0, -8576(%rbp)
+ 16461      80DEFFFF 
+ 16462 f712 660F6F85 		movdqa	-8576(%rbp), %xmm0
+ 16462      80DEFFFF 
+ 16463 f71a 660FEF85 		pxor	-3408(%rbp), %xmm0
+ 16463      B0F2FFFF 
+ 16464 f722 F30F7F85 		movdqu	%xmm0, -3408(%rbp)
+ 16464      B0F2FFFF 
+ 16465 f72a 660F6F85 		movdqa	-8576(%rbp), %xmm0
+ 16465      80DEFFFF 
+ 16466 f732 F30F7F85 		movdqu	%xmm0, -3360(%rbp)
+ 16466      E0F2FFFF 
+ 16467              	.LBB2110:
+ 16468              	.LBB2111:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 16469              		.loc 2 1282 0
+ 16470 f73a F30F6F85 		movdqu	-3360(%rbp), %xmm0
+ 16470      E0F2FFFF 
+ 16471 f742 F30F7F85 		movdqu	%xmm0, -7184(%rbp)
+ 16471      F0E3FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 16472              		.loc 2 1283 0
+ 16473 f74a 8B85F8E3 		movl	-7176(%rbp), %eax
+ 16473      FFFF
+ 16474 f750 8985FCE3 		movl	%eax, -7172(%rbp)
+ 16474      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 16475              		.loc 2 1284 0
+ 16476 f756 8B85F4E3 		movl	-7180(%rbp), %eax
+ 16476      FFFF
+ 16477 f75c 8985F8E3 		movl	%eax, -7176(%rbp)
+ 16477      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 16478              		.loc 2 1285 0
+ 16479 f762 8B85F0E3 		movl	-7184(%rbp), %eax
+ 16479      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 513
+
+
+ 16480 f768 8985F4E3 		movl	%eax, -7180(%rbp)
+ 16480      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 16481              		.loc 2 1286 0
+ 16482 f76e C785F0E3 		movl	$0, -7184(%rbp)
+ 16482      FFFF0000 
+ 16482      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 16483              		.loc 2 1287 0
+ 16484 f778 F30F6F85 		movdqu	-7184(%rbp), %xmm0
+ 16484      F0E3FFFF 
+ 16485              	.LBE2111:
+ 16486              	.LBE2110:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 16487              		.loc 2 1569 0
+ 16488 f780 660F7F85 		movdqa	%xmm0, -8576(%rbp)
+ 16488      80DEFFFF 
+ 16489 f788 660F6F85 		movdqa	-8576(%rbp), %xmm0
+ 16489      80DEFFFF 
+ 16490 f790 660FEF85 		pxor	-3408(%rbp), %xmm0
+ 16490      B0F2FFFF 
+ 16491 f798 F30F7F85 		movdqu	%xmm0, -3408(%rbp)
+ 16491      B0F2FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 16492              		.loc 2 1571 0
+ 16493 f7a0 F30F6F85 		movdqu	-3408(%rbp), %xmm0
+ 16493      B0F2FFFF 
+ 16494              	.LBE2105:
+ 16495              	.LBE2104:
+1930:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(6,0x04);    /* k24 : k25 : k26 : k27 */
+ 16496              		.loc 2 1930 0
+ 16497 f7a8 F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 16497      C0E9FFFF 
+ 16498 f7b0 F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 16498      C0E9FFFF 
+ 16499 f7b8 F30F7F85 		movdqu	%xmm0, -3328(%rbp)
+ 16499      00F3FFFF 
+ 16500 f7c0 F30F6F85 		movdqu	-5664(%rbp), %xmm0
+ 16500      E0E9FFFF 
+ 16501 f7c8 F30F7F85 		movdqu	%xmm0, -3344(%rbp)
+ 16501      F0F2FFFF 
+ 16502              	.LBB2112:
+ 16503              	.LBB2113:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 16504              		.loc 2 178 0
+ 16505 f7d0 F30F6F85 		movdqu	-3344(%rbp), %xmm0
+ 16505      F0F2FFFF 
+ 16506 f7d8 F30F6F8D 		movdqu	-3328(%rbp), %xmm1
+ 16506      00F3FFFF 
+ 16507 f7e0 660FEFC1 		pxor	%xmm1, %xmm0
+ 16508              	.LBE2113:
+ 16509              	.LBE2112:
+1930:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(6,0x04);    /* k24 : k25 : k26 : k27 */
+ 16510              		.loc 2 1930 0
+ 16511 f7e4 F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 16511      C0E9FFFF 
+ 16512 f7ec 488B85D8 		movq	-8232(%rbp), %rax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 514
+
+
+ 16512      DFFFFF
+ 16513 f7f3 4883C060 		addq	$96, %rax
+ 16514 f7f7 F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 16514      C0E9FFFF 
+ 16515 f7ff F30F7F00 		movdqu	%xmm0, (%rax)
+ 16516 f803 F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 16516      C0E9FFFF 
+ 16517 f80b F30F7F85 		movdqu	%xmm0, -3312(%rbp)
+ 16517      10F3FFFF 
+ 16518              	.LBB2114:
+ 16519              	.LBB2115:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 16520              		.loc 2 1656 0
+ 16521 f813 F30F6F85 		movdqu	-3312(%rbp), %xmm0
+ 16521      10F3FFFF 
+ 16522 f81b F30F7F85 		movdqu	%xmm0, -7152(%rbp)
+ 16522      10E4FFFF 
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 16523              		.loc 2 1657 0
+ 16524 f823 8B851CE4 		movl	-7140(%rbp), %eax
+ 16524      FFFF
+ 16525 f829 898528F3 		movl	%eax, -3288(%rbp)
+ 16525      FFFF
+ 16526              	.LBB2116:
+ 16527              	.LBB2117:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 16528              		.loc 2 740 0
+ 16529 f82f 8B8528F3 		movl	-3288(%rbp), %eax
+ 16529      FFFF
+ 16530 f835 898500E4 		movl	%eax, -7168(%rbp)
+ 16530      FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 16531              		.loc 2 741 0
+ 16532 f83b C7852CF3 		movl	$0, -3284(%rbp)
+ 16532      FFFF0000 
+ 16532      0000
+ 16533 f845 EB36     		jmp	.L394
+ 16534              	.L395:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 16535              		.loc 2 742 0
+ 16536 f847 8B8D2CF3 		movl	-3284(%rbp), %ecx
+ 16536      FFFF
+ 16537 f84d 8B852CF3 		movl	-3284(%rbp), %eax
+ 16537      FFFF
+ 16538 f853 89C0     		mov	%eax, %eax
+ 16539 f855 0FB68405 		movzbl	-7168(%rbp,%rax), %eax
+ 16539      00E4FFFF 
+ 16540 f85d 0FB6C0   		movzbl	%al, %eax
+ 16541 f860 89C2     		mov	%eax, %edx
+ 16542 f862 488D0500 		leaq	KAESBlockCipherVecRijndaelSBox(%rip), %rax
+ 16542      000000
+ 16543 f869 0FB61402 		movzbl	(%rdx,%rax), %edx
+ 16544 f86d 89C8     		mov	%ecx, %eax
+ 16545 f86f 88940500 		movb	%dl, -7168(%rbp,%rax)
+ 16545      E4FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 16546              		.loc 2 741 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 515
+
+
+ 16547 f876 83852CF3 		addl	$1, -3284(%rbp)
+ 16547      FFFF01
+ 16548              	.L394:
+ 16549 f87d 83BD2CF3 		cmpl	$3, -3284(%rbp)
+ 16549      FFFF03
+ 16550 f884 76C1     		jbe	.L395
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 16551              		.loc 2 743 0
+ 16552 f886 8B8500E4 		movl	-7168(%rbp), %eax
+ 16552      FFFF
+ 16553              	.LBE2117:
+ 16554              	.LBE2116:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 16555              		.loc 2 1657 0
+ 16556 f88c 898524F3 		movl	%eax, -3292(%rbp)
+ 16556      FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 16557              		.loc 2 1659 0
+ 16558 f892 8B8524F3 		movl	-3292(%rbp), %eax
+ 16558      FFFF
+ 16559 f898 89851CE4 		movl	%eax, -7140(%rbp)
+ 16559      FFFF
+ 16560 f89e 8B851CE4 		movl	-7140(%rbp), %eax
+ 16560      FFFF
+ 16561 f8a4 898518E4 		movl	%eax, -7144(%rbp)
+ 16561      FFFF
+ 16562 f8aa 8B8518E4 		movl	-7144(%rbp), %eax
+ 16562      FFFF
+ 16563 f8b0 898514E4 		movl	%eax, -7148(%rbp)
+ 16563      FFFF
+ 16564 f8b6 8B8514E4 		movl	-7148(%rbp), %eax
+ 16564      FFFF
+ 16565 f8bc 898510E4 		movl	%eax, -7152(%rbp)
+ 16565      FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 16566              		.loc 2 1660 0
+ 16567 f8c2 F30F6F85 		movdqu	-7152(%rbp), %xmm0
+ 16567      10E4FFFF 
+ 16568              	.LBE2115:
+ 16569              	.LBE2114:
+1931:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(7);         /* k28 : k29 : k30 : k31 */
+ 16570              		.loc 2 1931 0
+ 16571 f8ca F30F7F85 		movdqu	%xmm0, -5664(%rbp)
+ 16571      E0E9FFFF 
+ 16572 f8d2 F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 16572      D0E9FFFF 
+ 16573 f8da F30F7F85 		movdqu	%xmm0, -3280(%rbp)
+ 16573      30F3FFFF 
+ 16574              	.LBB2118:
+ 16575              	.LBB2119:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 16576              		.loc 2 1565 0
+ 16577 f8e2 F30F6F85 		movdqu	-3280(%rbp), %xmm0
+ 16577      30F3FFFF 
+ 16578 f8ea 660F7F85 		movdqa	%xmm0, -8560(%rbp)
+ 16578      90DEFFFF 
+ 16579 f8f2 660F6F85 		movdqa	-8560(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 516
+
+
+ 16579      90DEFFFF 
+ 16580 f8fa F30F7F85 		movdqu	%xmm0, -3264(%rbp)
+ 16580      40F3FFFF 
+ 16581              	.LBB2120:
+ 16582              	.LBB2121:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 16583              		.loc 2 1282 0
+ 16584 f902 F30F6F85 		movdqu	-3264(%rbp), %xmm0
+ 16584      40F3FFFF 
+ 16585 f90a F30F7F85 		movdqu	%xmm0, -7136(%rbp)
+ 16585      20E4FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 16586              		.loc 2 1283 0
+ 16587 f912 8B8528E4 		movl	-7128(%rbp), %eax
+ 16587      FFFF
+ 16588 f918 89852CE4 		movl	%eax, -7124(%rbp)
+ 16588      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 16589              		.loc 2 1284 0
+ 16590 f91e 8B8524E4 		movl	-7132(%rbp), %eax
+ 16590      FFFF
+ 16591 f924 898528E4 		movl	%eax, -7128(%rbp)
+ 16591      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 16592              		.loc 2 1285 0
+ 16593 f92a 8B8520E4 		movl	-7136(%rbp), %eax
+ 16593      FFFF
+ 16594 f930 898524E4 		movl	%eax, -7132(%rbp)
+ 16594      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 16595              		.loc 2 1286 0
+ 16596 f936 C78520E4 		movl	$0, -7136(%rbp)
+ 16596      FFFF0000 
+ 16596      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 16597              		.loc 2 1287 0
+ 16598 f940 F30F6F85 		movdqu	-7136(%rbp), %xmm0
+ 16598      20E4FFFF 
+ 16599              	.LBE2121:
+ 16600              	.LBE2120:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 16601              		.loc 2 1567 0
+ 16602 f948 660F7F85 		movdqa	%xmm0, -8560(%rbp)
+ 16602      90DEFFFF 
+ 16603 f950 660F6F85 		movdqa	-8560(%rbp), %xmm0
+ 16603      90DEFFFF 
+ 16604 f958 660FEF85 		pxor	-3280(%rbp), %xmm0
+ 16604      30F3FFFF 
+ 16605 f960 F30F7F85 		movdqu	%xmm0, -3280(%rbp)
+ 16605      30F3FFFF 
+ 16606 f968 660F6F85 		movdqa	-8560(%rbp), %xmm0
+ 16606      90DEFFFF 
+ 16607 f970 F30F7F85 		movdqu	%xmm0, -3248(%rbp)
+ 16607      50F3FFFF 
+ 16608              	.LBB2122:
+ 16609              	.LBB2123:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 517
+
+
+ 16610              		.loc 2 1282 0
+ 16611 f978 F30F6F85 		movdqu	-3248(%rbp), %xmm0
+ 16611      50F3FFFF 
+ 16612 f980 F30F7F85 		movdqu	%xmm0, -7120(%rbp)
+ 16612      30E4FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 16613              		.loc 2 1283 0
+ 16614 f988 8B8538E4 		movl	-7112(%rbp), %eax
+ 16614      FFFF
+ 16615 f98e 89853CE4 		movl	%eax, -7108(%rbp)
+ 16615      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 16616              		.loc 2 1284 0
+ 16617 f994 8B8534E4 		movl	-7116(%rbp), %eax
+ 16617      FFFF
+ 16618 f99a 898538E4 		movl	%eax, -7112(%rbp)
+ 16618      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 16619              		.loc 2 1285 0
+ 16620 f9a0 8B8530E4 		movl	-7120(%rbp), %eax
+ 16620      FFFF
+ 16621 f9a6 898534E4 		movl	%eax, -7116(%rbp)
+ 16621      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 16622              		.loc 2 1286 0
+ 16623 f9ac C78530E4 		movl	$0, -7120(%rbp)
+ 16623      FFFF0000 
+ 16623      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 16624              		.loc 2 1287 0
+ 16625 f9b6 F30F6F85 		movdqu	-7120(%rbp), %xmm0
+ 16625      30E4FFFF 
+ 16626              	.LBE2123:
+ 16627              	.LBE2122:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 16628              		.loc 2 1568 0
+ 16629 f9be 660F7F85 		movdqa	%xmm0, -8560(%rbp)
+ 16629      90DEFFFF 
+ 16630 f9c6 660F6F85 		movdqa	-8560(%rbp), %xmm0
+ 16630      90DEFFFF 
+ 16631 f9ce 660FEF85 		pxor	-3280(%rbp), %xmm0
+ 16631      30F3FFFF 
+ 16632 f9d6 F30F7F85 		movdqu	%xmm0, -3280(%rbp)
+ 16632      30F3FFFF 
+ 16633 f9de 660F6F85 		movdqa	-8560(%rbp), %xmm0
+ 16633      90DEFFFF 
+ 16634 f9e6 F30F7F85 		movdqu	%xmm0, -3232(%rbp)
+ 16634      60F3FFFF 
+ 16635              	.LBB2124:
+ 16636              	.LBB2125:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 16637              		.loc 2 1282 0
+ 16638 f9ee F30F6F85 		movdqu	-3232(%rbp), %xmm0
+ 16638      60F3FFFF 
+ 16639 f9f6 F30F7F85 		movdqu	%xmm0, -7104(%rbp)
+ 16639      40E4FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 518
+
+
+ 16640              		.loc 2 1283 0
+ 16641 f9fe 8B8548E4 		movl	-7096(%rbp), %eax
+ 16641      FFFF
+ 16642 fa04 89854CE4 		movl	%eax, -7092(%rbp)
+ 16642      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 16643              		.loc 2 1284 0
+ 16644 fa0a 8B8544E4 		movl	-7100(%rbp), %eax
+ 16644      FFFF
+ 16645 fa10 898548E4 		movl	%eax, -7096(%rbp)
+ 16645      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 16646              		.loc 2 1285 0
+ 16647 fa16 8B8540E4 		movl	-7104(%rbp), %eax
+ 16647      FFFF
+ 16648 fa1c 898544E4 		movl	%eax, -7100(%rbp)
+ 16648      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 16649              		.loc 2 1286 0
+ 16650 fa22 C78540E4 		movl	$0, -7104(%rbp)
+ 16650      FFFF0000 
+ 16650      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 16651              		.loc 2 1287 0
+ 16652 fa2c F30F6F85 		movdqu	-7104(%rbp), %xmm0
+ 16652      40E4FFFF 
+ 16653              	.LBE2125:
+ 16654              	.LBE2124:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 16655              		.loc 2 1569 0
+ 16656 fa34 660F7F85 		movdqa	%xmm0, -8560(%rbp)
+ 16656      90DEFFFF 
+ 16657 fa3c 660F6F85 		movdqa	-8560(%rbp), %xmm0
+ 16657      90DEFFFF 
+ 16658 fa44 660FEF85 		pxor	-3280(%rbp), %xmm0
+ 16658      30F3FFFF 
+ 16659 fa4c F30F7F85 		movdqu	%xmm0, -3280(%rbp)
+ 16659      30F3FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 16660              		.loc 2 1571 0
+ 16661 fa54 F30F6F85 		movdqu	-3280(%rbp), %xmm0
+ 16661      30F3FFFF 
+ 16662              	.LBE2119:
+ 16663              	.LBE2118:
+1931:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(7);         /* k28 : k29 : k30 : k31 */
+ 16664              		.loc 2 1931 0
+ 16665 fa5c F30F7F85 		movdqu	%xmm0, -5680(%rbp)
+ 16665      D0E9FFFF 
+ 16666 fa64 F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 16666      D0E9FFFF 
+ 16667 fa6c F30F7F85 		movdqu	%xmm0, -3200(%rbp)
+ 16667      80F3FFFF 
+ 16668 fa74 F30F6F85 		movdqu	-5664(%rbp), %xmm0
+ 16668      E0E9FFFF 
+ 16669 fa7c F30F7F85 		movdqu	%xmm0, -3216(%rbp)
+ 16669      70F3FFFF 
+ 16670              	.LBB2126:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 519
+
+
+ 16671              	.LBB2127:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 16672              		.loc 2 178 0
+ 16673 fa84 F30F6F85 		movdqu	-3216(%rbp), %xmm0
+ 16673      70F3FFFF 
+ 16674 fa8c F30F6F8D 		movdqu	-3200(%rbp), %xmm1
+ 16674      80F3FFFF 
+ 16675 fa94 660FEFC1 		pxor	%xmm1, %xmm0
+ 16676              	.LBE2127:
+ 16677              	.LBE2126:
+1931:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(7);         /* k28 : k29 : k30 : k31 */
+ 16678              		.loc 2 1931 0
+ 16679 fa98 F30F7F85 		movdqu	%xmm0, -5680(%rbp)
+ 16679      D0E9FFFF 
+ 16680 faa0 488B85D8 		movq	-8232(%rbp), %rax
+ 16680      DFFFFF
+ 16681 faa7 4883C070 		addq	$112, %rax
+ 16682 faab F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 16682      D0E9FFFF 
+ 16683 fab3 F30F7F00 		movdqu	%xmm0, (%rax)
+ 16684 fab7 F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 16684      D0E9FFFF 
+ 16685 fabf F30F7F85 		movdqu	%xmm0, -3168(%rbp)
+ 16685      A0F3FFFF 
+ 16686              	.LBB2128:
+ 16687              	.LBB2129:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 16688              		.loc 2 1681 0
+ 16689 fac7 B8080000 		movl	$8, %eax
+ 16689      00
+ 16690 facc 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 16690      00000000 
+ 16691 fad4 F30F7F85 		movdqu	%xmm0, -3136(%rbp)
+ 16691      C0F3FFFF 
+ 16692 fadc 8985BCF3 		movl	%eax, -3140(%rbp)
+ 16692      FFFF
+ 16693              	.LBB2130:
+ 16694              	.LBB2131:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 16695              		.loc 2 522 0
+ 16696 fae2 F30F6F85 		movdqu	-3136(%rbp), %xmm0
+ 16696      C0F3FFFF 
+ 16697 faea F30F7F85 		movdqu	%xmm0, -7024(%rbp)
+ 16697      90E4FFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 16698              		.loc 2 523 0
+ 16699 faf2 B8030000 		movl	$3, %eax
+ 16699      00
+ 16700 faf7 4898     		cltq
+ 16701 faf9 8B95BCF3 		movl	-3140(%rbp), %edx
+ 16701      FFFF
+ 16702 faff 89948590 		movl	%edx, -7024(%rbp,%rax,4)
+ 16702      E4FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 16703              		.loc 2 524 0
+ 16704 fb06 F30F6F85 		movdqu	-7024(%rbp), %xmm0
+ 16704      90E4FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 520
+
+
+ 16705 fb0e F30F7F85 		movdqu	%xmm0, -3136(%rbp)
+ 16705      C0F3FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 16706              		.loc 2 526 0
+ 16707 fb16 F30F6F85 		movdqu	-3136(%rbp), %xmm0
+ 16707      C0F3FFFF 
+ 16708              	.LBE2131:
+ 16709              	.LBE2130:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 16710              		.loc 2 1681 0
+ 16711 fb1e 660F7F85 		movdqa	%xmm0, -8528(%rbp)
+ 16711      B0DEFFFF 
+ 16712 fb26 F30F6F85 		movdqu	-3168(%rbp), %xmm0
+ 16712      A0F3FFFF 
+ 16713 fb2e F30F7F85 		movdqu	%xmm0, -3120(%rbp)
+ 16713      D0F3FFFF 
+ 16714 fb36 F30F6F85 		movdqu	-3120(%rbp), %xmm0
+ 16714      D0F3FFFF 
+ 16715 fb3e F30F7F85 		movdqu	%xmm0, -3088(%rbp)
+ 16715      F0F3FFFF 
+ 16716 fb46 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 16716      000000
+ 16717 fb4d 488985E8 		movq	%rax, -3096(%rbp)
+ 16717      F3FFFF
+ 16718              	.LBB2132:
+ 16719              	.LBB2133:
+ 16720              	.LBB2134:
+ 16721              	.LBB2135:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 16722              		.loc 2 851 0
+ 16723 fb54 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 16723      00000000 
+ 16724 fb5c F30F7F85 		movdqu	%xmm0, -3056(%rbp)
+ 16724      10F4FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 16725              		.loc 2 854 0
+ 16726 fb64 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 16726      00000000 
+ 16727 fb6c F30F6F8D 		movdqu	-3088(%rbp), %xmm1
+ 16727      F0F3FFFF 
+ 16728 fb74 F30F7F8D 		movdqu	%xmm1, -2976(%rbp)
+ 16728      60F4FFFF 
+ 16729 fb7c F30F7F85 		movdqu	%xmm0, -2992(%rbp)
+ 16729      50F4FFFF 
+ 16730              	.LBB2136:
+ 16731              	.LBB2137:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 16732              		.loc 2 206 0
+ 16733 fb84 F30F6F85 		movdqu	-2992(%rbp), %xmm0
+ 16733      50F4FFFF 
+ 16734 fb8c F30F6F8D 		movdqu	-2976(%rbp), %xmm1
+ 16734      60F4FFFF 
+ 16735 fb94 660FDBC1 		pand	%xmm1, %xmm0
+ 16736              	.LBE2137:
+ 16737              	.LBE2136:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 16738              		.loc 2 854 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 521
+
+
+ 16739 fb98 F30F7F85 		movdqu	%xmm0, -3008(%rbp)
+ 16739      40F4FFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 16740              		.loc 2 862 0
+ 16741 fba0 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 16741      00000000 
+ 16742 fba8 F30F6F8D 		movdqu	-3088(%rbp), %xmm1
+ 16742      F0F3FFFF 
+ 16743 fbb0 F30F7F8D 		movdqu	%xmm1, -2944(%rbp)
+ 16743      80F4FFFF 
+ 16744 fbb8 F30F7F85 		movdqu	%xmm0, -2960(%rbp)
+ 16744      70F4FFFF 
+ 16745              	.LBB2138:
+ 16746              		.loc 2 2642 0
+ 16747 fbc0 0FB68580 		movzbl	-2944(%rbp), %eax
+ 16747      F4FFFF
+ 16748 fbc7 0FB69570 		movzbl	-2960(%rbp), %edx
+ 16748      F4FFFF
+ 16749 fbce 0FB6C0   		movzbl	%al, %eax
+ 16750 fbd1 6689853E 		movw	%ax, -8898(%rbp)
+ 16750      DDFFFF
+ 16751 fbd8 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 16751      DDFFFF
+ 16752 fbdf F6F2     		divb	%dl
+ 16753 fbe1 4189C7   		movl	%eax, %r15d
+ 16754 fbe4 0FB68581 		movzbl	-2943(%rbp), %eax
+ 16754      F4FFFF
+ 16755 fbeb 0FB69571 		movzbl	-2959(%rbp), %edx
+ 16755      F4FFFF
+ 16756 fbf2 0FB6C0   		movzbl	%al, %eax
+ 16757 fbf5 6689853E 		movw	%ax, -8898(%rbp)
+ 16757      DDFFFF
+ 16758 fbfc 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 16758      DDFFFF
+ 16759 fc03 F6F2     		divb	%dl
+ 16760 fc05 8885CFDE 		movb	%al, -8497(%rbp)
+ 16760      FFFF
+ 16761 fc0b 0FB68582 		movzbl	-2942(%rbp), %eax
+ 16761      F4FFFF
+ 16762 fc12 0FB69572 		movzbl	-2958(%rbp), %edx
+ 16762      F4FFFF
+ 16763 fc19 0FB6C0   		movzbl	%al, %eax
+ 16764 fc1c 6689853E 		movw	%ax, -8898(%rbp)
+ 16764      DDFFFF
+ 16765 fc23 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 16765      DDFFFF
+ 16766 fc2a F6F2     		divb	%dl
+ 16767 fc2c 8885CEDE 		movb	%al, -8498(%rbp)
+ 16767      FFFF
+ 16768 fc32 0FB68583 		movzbl	-2941(%rbp), %eax
+ 16768      F4FFFF
+ 16769 fc39 0FB69573 		movzbl	-2957(%rbp), %edx
+ 16769      F4FFFF
+ 16770 fc40 0FB6C0   		movzbl	%al, %eax
+ 16771 fc43 6689853E 		movw	%ax, -8898(%rbp)
+ 16771      DDFFFF
+ 16772 fc4a 0FB7853E 		movzwl	-8898(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 522
+
+
+ 16772      DDFFFF
+ 16773 fc51 F6F2     		divb	%dl
+ 16774 fc53 8885CDDE 		movb	%al, -8499(%rbp)
+ 16774      FFFF
+ 16775 fc59 0FB68584 		movzbl	-2940(%rbp), %eax
+ 16775      F4FFFF
+ 16776 fc60 0FB69574 		movzbl	-2956(%rbp), %edx
+ 16776      F4FFFF
+ 16777 fc67 0FB6C0   		movzbl	%al, %eax
+ 16778 fc6a 6689853E 		movw	%ax, -8898(%rbp)
+ 16778      DDFFFF
+ 16779 fc71 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 16779      DDFFFF
+ 16780 fc78 F6F2     		divb	%dl
+ 16781 fc7a 8885CCDE 		movb	%al, -8500(%rbp)
+ 16781      FFFF
+ 16782 fc80 0FB68585 		movzbl	-2939(%rbp), %eax
+ 16782      F4FFFF
+ 16783 fc87 0FB69575 		movzbl	-2955(%rbp), %edx
+ 16783      F4FFFF
+ 16784 fc8e 0FB6C0   		movzbl	%al, %eax
+ 16785 fc91 6689853E 		movw	%ax, -8898(%rbp)
+ 16785      DDFFFF
+ 16786 fc98 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 16786      DDFFFF
+ 16787 fc9f F6F2     		divb	%dl
+ 16788 fca1 4189C1   		movl	%eax, %r9d
+ 16789 fca4 0FB68586 		movzbl	-2938(%rbp), %eax
+ 16789      F4FFFF
+ 16790 fcab 0FB69576 		movzbl	-2954(%rbp), %edx
+ 16790      F4FFFF
+ 16791 fcb2 0FB6C0   		movzbl	%al, %eax
+ 16792 fcb5 6689853E 		movw	%ax, -8898(%rbp)
+ 16792      DDFFFF
+ 16793 fcbc 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 16793      DDFFFF
+ 16794 fcc3 F6F2     		divb	%dl
+ 16795 fcc5 89C7     		movl	%eax, %edi
+ 16796 fcc7 0FB68587 		movzbl	-2937(%rbp), %eax
+ 16796      F4FFFF
+ 16797 fcce 0FB69577 		movzbl	-2953(%rbp), %edx
+ 16797      F4FFFF
+ 16798 fcd5 0FB6C0   		movzbl	%al, %eax
+ 16799 fcd8 6689853E 		movw	%ax, -8898(%rbp)
+ 16799      DDFFFF
+ 16800 fcdf 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 16800      DDFFFF
+ 16801 fce6 F6F2     		divb	%dl
+ 16802 fce8 89C3     		movl	%eax, %ebx
+ 16803 fcea 0FB68588 		movzbl	-2936(%rbp), %eax
+ 16803      F4FFFF
+ 16804 fcf1 0FB69578 		movzbl	-2952(%rbp), %edx
+ 16804      F4FFFF
+ 16805 fcf8 0FB6C0   		movzbl	%al, %eax
+ 16806 fcfb 6689853E 		movw	%ax, -8898(%rbp)
+ 16806      DDFFFF
+ 16807 fd02 0FB7853E 		movzwl	-8898(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 523
+
+
+ 16807      DDFFFF
+ 16808 fd09 F6F2     		divb	%dl
+ 16809 fd0b 4189C2   		movl	%eax, %r10d
+ 16810 fd0e 0FB68589 		movzbl	-2935(%rbp), %eax
+ 16810      F4FFFF
+ 16811 fd15 0FB69579 		movzbl	-2951(%rbp), %edx
+ 16811      F4FFFF
+ 16812 fd1c 0FB6C0   		movzbl	%al, %eax
+ 16813 fd1f 6689853E 		movw	%ax, -8898(%rbp)
+ 16813      DDFFFF
+ 16814 fd26 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 16814      DDFFFF
+ 16815 fd2d F6F2     		divb	%dl
+ 16816 fd2f 4189C3   		movl	%eax, %r11d
+ 16817 fd32 0FB6858A 		movzbl	-2934(%rbp), %eax
+ 16817      F4FFFF
+ 16818 fd39 0FB6957A 		movzbl	-2950(%rbp), %edx
+ 16818      F4FFFF
+ 16819 fd40 0FB6C0   		movzbl	%al, %eax
+ 16820 fd43 6689853E 		movw	%ax, -8898(%rbp)
+ 16820      DDFFFF
+ 16821 fd4a 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 16821      DDFFFF
+ 16822 fd51 F6F2     		divb	%dl
+ 16823 fd53 4189C4   		movl	%eax, %r12d
+ 16824 fd56 0FB6858B 		movzbl	-2933(%rbp), %eax
+ 16824      F4FFFF
+ 16825 fd5d 0FB6957B 		movzbl	-2949(%rbp), %edx
+ 16825      F4FFFF
+ 16826 fd64 0FB6C0   		movzbl	%al, %eax
+ 16827 fd67 6689853E 		movw	%ax, -8898(%rbp)
+ 16827      DDFFFF
+ 16828 fd6e 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 16828      DDFFFF
+ 16829 fd75 F6F2     		divb	%dl
+ 16830 fd77 4189C5   		movl	%eax, %r13d
+ 16831 fd7a 0FB6858C 		movzbl	-2932(%rbp), %eax
+ 16831      F4FFFF
+ 16832 fd81 0FB6957C 		movzbl	-2948(%rbp), %edx
+ 16832      F4FFFF
+ 16833 fd88 0FB6C0   		movzbl	%al, %eax
+ 16834 fd8b 6689853E 		movw	%ax, -8898(%rbp)
+ 16834      DDFFFF
+ 16835 fd92 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 16835      DDFFFF
+ 16836 fd99 F6F2     		divb	%dl
+ 16837 fd9b 4189C6   		movl	%eax, %r14d
+ 16838 fd9e 0FB6858D 		movzbl	-2931(%rbp), %eax
+ 16838      F4FFFF
+ 16839 fda5 0FB6957D 		movzbl	-2947(%rbp), %edx
+ 16839      F4FFFF
+ 16840 fdac 0FB6C0   		movzbl	%al, %eax
+ 16841 fdaf 6689853E 		movw	%ax, -8898(%rbp)
+ 16841      DDFFFF
+ 16842 fdb6 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 16842      DDFFFF
+ 16843 fdbd F6F2     		divb	%dl
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 524
+
+
+ 16844 fdbf 4189C0   		movl	%eax, %r8d
+ 16845 fdc2 0FB6858E 		movzbl	-2930(%rbp), %eax
+ 16845      F4FFFF
+ 16846 fdc9 0FB6957E 		movzbl	-2946(%rbp), %edx
+ 16846      F4FFFF
+ 16847 fdd0 0FB6C0   		movzbl	%al, %eax
+ 16848 fdd3 6689853E 		movw	%ax, -8898(%rbp)
+ 16848      DDFFFF
+ 16849 fdda 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 16849      DDFFFF
+ 16850 fde1 F6F2     		divb	%dl
+ 16851 fde3 89C6     		movl	%eax, %esi
+ 16852 fde5 0FB6858F 		movzbl	-2929(%rbp), %eax
+ 16852      F4FFFF
+ 16853 fdec 0FB6957F 		movzbl	-2945(%rbp), %edx
+ 16853      F4FFFF
+ 16854 fdf3 0FB6C0   		movzbl	%al, %eax
+ 16855 fdf6 6689853E 		movw	%ax, -8898(%rbp)
+ 16855      DDFFFF
+ 16856 fdfd 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 16856      DDFFFF
+ 16857 fe04 F6F2     		divb	%dl
+ 16858 fe06 89C1     		movl	%eax, %ecx
+ 16859              	.LBB2139:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 16860              		.loc 2 346 0
+ 16861 fe08 0FB6D3   		movzbl	%bl, %edx
+ 16862 fe0b 400FB6C7 		movzbl	%dil, %eax
+ 16863 fe0f 48C1E208 		salq	$8, %rdx
+ 16864 fe13 4809C2   		orq	%rax, %rdx
+ 16865 fe16 410FB6C1 		movzbl	%r9b, %eax
+ 16866 fe1a 48C1E208 		salq	$8, %rdx
+ 16867 fe1e 4809C2   		orq	%rax, %rdx
+ 16868 fe21 0FB685CC 		movzbl	-8500(%rbp), %eax
+ 16868      DEFFFF
+ 16869 fe28 48C1E208 		salq	$8, %rdx
+ 16870 fe2c 4809C2   		orq	%rax, %rdx
+ 16871 fe2f 0FB685CD 		movzbl	-8499(%rbp), %eax
+ 16871      DEFFFF
+ 16872 fe36 48C1E208 		salq	$8, %rdx
+ 16873 fe3a 4809C2   		orq	%rax, %rdx
+ 16874 fe3d 0FB685CE 		movzbl	-8498(%rbp), %eax
+ 16874      DEFFFF
+ 16875 fe44 48C1E208 		salq	$8, %rdx
+ 16876 fe48 4809C2   		orq	%rax, %rdx
+ 16877 fe4b 0FB685CF 		movzbl	-8497(%rbp), %eax
+ 16877      DEFFFF
+ 16878 fe52 48C1E208 		salq	$8, %rdx
+ 16879 fe56 4809C2   		orq	%rax, %rdx
+ 16880 fe59 410FB6C7 		movzbl	%r15b, %eax
+ 16881 fe5d 48C1E208 		salq	$8, %rdx
+ 16882 fe61 4809C2   		orq	%rax, %rdx
+ 16883 fe64 0FB6C1   		movzbl	%cl, %eax
+ 16884 fe67 400FB6CE 		movzbl	%sil, %ecx
+ 16885 fe6b 48C1E008 		salq	$8, %rax
+ 16886 fe6f 4809C8   		orq	%rcx, %rax
+ 16887 fe72 410FB6C8 		movzbl	%r8b, %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 525
+
+
+ 16888 fe76 48C1E008 		salq	$8, %rax
+ 16889 fe7a 4809C8   		orq	%rcx, %rax
+ 16890 fe7d 410FB6CE 		movzbl	%r14b, %ecx
+ 16891 fe81 48C1E008 		salq	$8, %rax
+ 16892 fe85 4809C8   		orq	%rcx, %rax
+ 16893 fe88 410FB6CD 		movzbl	%r13b, %ecx
+ 16894 fe8c 48C1E008 		salq	$8, %rax
+ 16895 fe90 4809C8   		orq	%rcx, %rax
+ 16896 fe93 410FB6CC 		movzbl	%r12b, %ecx
+ 16897 fe97 48C1E008 		salq	$8, %rax
+ 16898 fe9b 4809C8   		orq	%rcx, %rax
+ 16899 fe9e 410FB6CB 		movzbl	%r11b, %ecx
+ 16900 fea2 48C1E008 		salq	$8, %rax
+ 16901 fea6 4809C8   		orq	%rcx, %rax
+ 16902 fea9 410FB6CA 		movzbl	%r10b, %ecx
+ 16903 fead 48C1E008 		salq	$8, %rax
+ 16904 feb1 4809C8   		orq	%rcx, %rax
+ 16905 feb4 48899570 		movq	%rdx, -8848(%rbp)
+ 16905      DDFFFF
+ 16906 febb 48898578 		movq	%rax, -8840(%rbp)
+ 16906      DDFFFF
+ 16907 fec2 660F6F85 		movdqa	-8848(%rbp), %xmm0
+ 16907      70DDFFFF 
+ 16908              	.LBE2139:
+ 16909              	.LBE2138:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 16910              		.loc 2 862 0
+ 16911 feca F30F7F85 		movdqu	%xmm0, -3024(%rbp)
+ 16911      30F4FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 16912              		.loc 2 866 0
+ 16913 fed2 C7850CF4 		movl	$0, -3060(%rbp)
+ 16913      FFFF0000 
+ 16913      0000
+ 16914 fedc E9860200 		jmp	.L396
+ 16914      00
+ 16915              	.L405:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 16916              		.loc 2 868 0
+ 16917 fee1 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 16917      00000000 
+ 16918 fee9 F30F7F85 		movdqu	%xmm0, -2912(%rbp)
+ 16918      A0F4FFFF 
+ 16919 fef1 F30F6F85 		movdqu	-3024(%rbp), %xmm0
+ 16919      30F4FFFF 
+ 16920 fef9 F30F7F85 		movdqu	%xmm0, -2928(%rbp)
+ 16920      90F4FFFF 
+ 16921              	.LBB2140:
+ 16922              	.LBB2141:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 16923              		.loc 2 380 0
+ 16924 ff01 F30F6F85 		movdqu	-2912(%rbp), %xmm0
+ 16924      A0F4FFFF 
+ 16925 ff09 F30F7F85 		movdqu	%xmm0, -6992(%rbp)
+ 16925      B0E4FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 16926              		.loc 2 381 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 526
+
+
+ 16927 ff11 F30F6F85 		movdqu	-2928(%rbp), %xmm0
+ 16927      90F4FFFF 
+ 16928 ff19 F30F7F85 		movdqu	%xmm0, -7008(%rbp)
+ 16928      A0E4FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 16929              		.loc 2 383 0
+ 16930 ff21 C785BCF4 		movl	$0, -2884(%rbp)
+ 16930      FFFF0000 
+ 16930      0000
+ 16931 ff2b EB5C     		jmp	.L397
+ 16932              	.L400:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 16933              		.loc 2 385 0
+ 16934 ff2d 8B85BCF4 		movl	-2884(%rbp), %eax
+ 16934      FFFF
+ 16935 ff33 89C0     		mov	%eax, %eax
+ 16936 ff35 0FB68405 		movzbl	-7008(%rbp,%rax), %eax
+ 16936      A0E4FFFF 
+ 16937 ff3d 84C0     		testb	%al, %al
+ 16938 ff3f 7912     		jns	.L398
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 16939              		.loc 2 386 0
+ 16940 ff41 8B85BCF4 		movl	-2884(%rbp), %eax
+ 16940      FFFF
+ 16941 ff47 89C0     		mov	%eax, %eax
+ 16942 ff49 C68405C0 		movb	$0, -6976(%rbp,%rax)
+ 16942      E4FFFF00 
+ 16943 ff51 EB2F     		jmp	.L399
+ 16944              	.L398:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 16945              		.loc 2 388 0
+ 16946 ff53 8B8DBCF4 		movl	-2884(%rbp), %ecx
+ 16946      FFFF
+ 16947 ff59 8B85BCF4 		movl	-2884(%rbp), %eax
+ 16947      FFFF
+ 16948 ff5f 89C0     		mov	%eax, %eax
+ 16949 ff61 0FB68405 		movzbl	-7008(%rbp,%rax), %eax
+ 16949      A0E4FFFF 
+ 16950 ff69 0FB6C0   		movzbl	%al, %eax
+ 16951 ff6c 83E00F   		andl	$15, %eax
+ 16952 ff6f 4898     		cltq
+ 16953 ff71 0FB69405 		movzbl	-6992(%rbp,%rax), %edx
+ 16953      B0E4FFFF 
+ 16954 ff79 89C8     		mov	%ecx, %eax
+ 16955 ff7b 889405C0 		movb	%dl, -6976(%rbp,%rax)
+ 16955      E4FFFF
+ 16956              	.L399:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 16957              		.loc 2 383 0
+ 16958 ff82 8385BCF4 		addl	$1, -2884(%rbp)
+ 16958      FFFF01
+ 16959              	.L397:
+ 16960 ff89 83BDBCF4 		cmpl	$15, -2884(%rbp)
+ 16960      FFFF0F
+ 16961 ff90 769B     		jbe	.L400
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 16962              		.loc 2 391 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 527
+
+
+ 16963 ff92 F30F6F85 		movdqu	-6976(%rbp), %xmm0
+ 16963      C0E4FFFF 
+ 16964              	.LBE2141:
+ 16965              	.LBE2140:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 16966              		.loc 2 868 0
+ 16967 ff9a F30F7F85 		movdqu	%xmm0, -3040(%rbp)
+ 16967      20F4FFFF 
+ 16968 ffa2 F30F6F85 		movdqu	-3008(%rbp), %xmm0
+ 16968      40F4FFFF 
+ 16969 ffaa F30F7F85 		movdqu	%xmm0, -2864(%rbp)
+ 16969      D0F4FFFF 
+ 16970 ffb2 F30F6F85 		movdqu	-3040(%rbp), %xmm0
+ 16970      20F4FFFF 
+ 16971 ffba F30F7F85 		movdqu	%xmm0, -2880(%rbp)
+ 16971      C0F4FFFF 
+ 16972              	.LBB2142:
+ 16973              	.LBB2143:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 16974              		.loc 2 234 0
+ 16975 ffc2 F30F6F85 		movdqu	-2880(%rbp), %xmm0
+ 16975      C0F4FFFF 
+ 16976 ffca F30F6F8D 		movdqu	-2864(%rbp), %xmm1
+ 16976      D0F4FFFF 
+ 16977 ffd2 660FEBC1 		por	%xmm1, %xmm0
+ 16978              	.LBE2143:
+ 16979              	.LBE2142:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 16980              		.loc 2 870 0
+ 16981 ffd6 F30F7F85 		movdqu	%xmm0, -3040(%rbp)
+ 16981      20F4FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 16982              		.loc 2 872 0
+ 16983 ffde 8B850CF4 		mov	-3060(%rbp), %eax
+ 16983      FFFF
+ 16984 ffe4 48C1E004 		salq	$4, %rax
+ 16985 ffe8 480385E8 		addq	-3096(%rbp), %rax
+ 16985      F3FFFF
+ 16986 ffef 660F6F00 		movdqa	(%rax), %xmm0
+ 16987 fff3 F30F7F85 		movdqu	%xmm0, -2832(%rbp)
+ 16987      F0F4FFFF 
+ 16988 fffb F30F6F85 		movdqu	-3040(%rbp), %xmm0
+ 16988      20F4FFFF 
+ 16989 10003 F30F7F85 		movdqu	%xmm0, -2848(%rbp)
+ 16989      E0F4FFFF 
+ 16990              	.LBB2144:
+ 16991              	.LBB2145:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 16992              		.loc 2 380 0
+ 16993 1000b F30F6F85 		movdqu	-2832(%rbp), %xmm0
+ 16993      F0F4FFFF 
+ 16994 10013 F30F7F85 		movdqu	%xmm0, -6944(%rbp)
+ 16994      E0E4FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 16995              		.loc 2 381 0
+ 16996 1001b F30F6F85 		movdqu	-2848(%rbp), %xmm0
+ 16996      E0F4FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 528
+
+
+ 16997 10023 F30F7F85 		movdqu	%xmm0, -6960(%rbp)
+ 16997      D0E4FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 16998              		.loc 2 383 0
+ 16999 1002b C7850CF5 		movl	$0, -2804(%rbp)
+ 16999      FFFF0000 
+ 16999      0000
+ 17000 10035 EB5C     		jmp	.L401
+ 17001              	.L404:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 17002              		.loc 2 385 0
+ 17003 10037 8B850CF5 		movl	-2804(%rbp), %eax
+ 17003      FFFF
+ 17004 1003d 89C0     		mov	%eax, %eax
+ 17005 1003f 0FB68405 		movzbl	-6960(%rbp,%rax), %eax
+ 17005      D0E4FFFF 
+ 17006 10047 84C0     		testb	%al, %al
+ 17007 10049 7912     		jns	.L402
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 17008              		.loc 2 386 0
+ 17009 1004b 8B850CF5 		movl	-2804(%rbp), %eax
+ 17009      FFFF
+ 17010 10051 89C0     		mov	%eax, %eax
+ 17011 10053 C68405F0 		movb	$0, -6928(%rbp,%rax)
+ 17011      E4FFFF00 
+ 17012 1005b EB2F     		jmp	.L403
+ 17013              	.L402:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 17014              		.loc 2 388 0
+ 17015 1005d 8B8D0CF5 		movl	-2804(%rbp), %ecx
+ 17015      FFFF
+ 17016 10063 8B850CF5 		movl	-2804(%rbp), %eax
+ 17016      FFFF
+ 17017 10069 89C0     		mov	%eax, %eax
+ 17018 1006b 0FB68405 		movzbl	-6960(%rbp,%rax), %eax
+ 17018      D0E4FFFF 
+ 17019 10073 0FB6C0   		movzbl	%al, %eax
+ 17020 10076 83E00F   		andl	$15, %eax
+ 17021 10079 4898     		cltq
+ 17022 1007b 0FB69405 		movzbl	-6944(%rbp,%rax), %edx
+ 17022      E0E4FFFF 
+ 17023 10083 89C8     		mov	%ecx, %eax
+ 17024 10085 889405F0 		movb	%dl, -6928(%rbp,%rax)
+ 17024      E4FFFF
+ 17025              	.L403:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 17026              		.loc 2 383 0
+ 17027 1008c 83850CF5 		addl	$1, -2804(%rbp)
+ 17027      FFFF01
+ 17028              	.L401:
+ 17029 10093 83BD0CF5 		cmpl	$15, -2804(%rbp)
+ 17029      FFFF0F
+ 17030 1009a 769B     		jbe	.L404
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 17031              		.loc 2 391 0
+ 17032 1009c F30F6F85 		movdqu	-6928(%rbp), %xmm0
+ 17032      F0E4FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 529
+
+
+ 17033              	.LBE2145:
+ 17034              	.LBE2144:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 17035              		.loc 2 872 0
+ 17036 100a4 F30F7F85 		movdqu	%xmm0, -3040(%rbp)
+ 17036      20F4FFFF 
+ 17037 100ac F30F6F85 		movdqu	-3056(%rbp), %xmm0
+ 17037      10F4FFFF 
+ 17038 100b4 F30F7F85 		movdqu	%xmm0, -2784(%rbp)
+ 17038      20F5FFFF 
+ 17039 100bc F30F6F85 		movdqu	-3040(%rbp), %xmm0
+ 17039      20F4FFFF 
+ 17040 100c4 F30F7F85 		movdqu	%xmm0, -2800(%rbp)
+ 17040      10F5FFFF 
+ 17041              	.LBB2146:
+ 17042              	.LBB2147:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 17043              		.loc 2 234 0
+ 17044 100cc F30F6F85 		movdqu	-2800(%rbp), %xmm0
+ 17044      10F5FFFF 
+ 17045 100d4 F30F6F8D 		movdqu	-2784(%rbp), %xmm1
+ 17045      20F5FFFF 
+ 17046 100dc 660FEBC1 		por	%xmm1, %xmm0
+ 17047              	.LBE2147:
+ 17048              	.LBE2146:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 17049              		.loc 2 874 0
+ 17050 100e0 F30F7F85 		movdqu	%xmm0, -3056(%rbp)
+ 17050      10F4FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 17051              		.loc 2 876 0
+ 17052 100e8 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 17052      00000000 
+ 17053 100f0 F30F6F8D 		movdqu	-3024(%rbp), %xmm1
+ 17053      30F4FFFF 
+ 17054 100f8 F30F7F8D 		movdqu	%xmm1, -2752(%rbp)
+ 17054      40F5FFFF 
+ 17055 10100 F30F7F85 		movdqu	%xmm0, -2768(%rbp)
+ 17055      30F5FFFF 
+ 17056              	.LBB2148:
+ 17057              	.LBB2149:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 17058              		.loc 2 290 0
+ 17059 10108 F30F6F8D 		movdqu	-2768(%rbp), %xmm1
+ 17059      30F5FFFF 
+ 17060 10110 F30F6F85 		movdqu	-2752(%rbp), %xmm0
+ 17060      40F5FFFF 
+ 17061 10118 660FF8C1 		psubb	%xmm1, %xmm0
+ 17062              	.LBE2149:
+ 17063              	.LBE2148:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 17064              		.loc 2 876 0
+ 17065 1011c F30F7F85 		movdqu	%xmm0, -3024(%rbp)
+ 17065      30F4FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 17066              		.loc 2 878 0
+ 17067 10124 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 530
+
+
+ 17067      00000000 
+ 17068 1012c F30F6F8D 		movdqu	-3024(%rbp), %xmm1
+ 17068      30F4FFFF 
+ 17069 10134 F30F7F8D 		movdqu	%xmm1, -2720(%rbp)
+ 17069      60F5FFFF 
+ 17070 1013c F30F7F85 		movdqu	%xmm0, -2736(%rbp)
+ 17070      50F5FFFF 
+ 17071              	.LBB2150:
+ 17072              	.LBB2151:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 17073              		.loc 2 206 0
+ 17074 10144 F30F6F85 		movdqu	-2736(%rbp), %xmm0
+ 17074      50F5FFFF 
+ 17075 1014c F30F6F8D 		movdqu	-2720(%rbp), %xmm1
+ 17075      60F5FFFF 
+ 17076 10154 660FDBC1 		pand	%xmm1, %xmm0
+ 17077              	.LBE2151:
+ 17078              	.LBE2150:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 17079              		.loc 2 878 0
+ 17080 10158 F30F7F85 		movdqu	%xmm0, -3024(%rbp)
+ 17080      30F4FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 17081              		.loc 2 866 0
+ 17082 10160 83850CF4 		addl	$1, -3060(%rbp)
+ 17082      FFFF01
+ 17083              	.L396:
+ 17084 10167 83BD0CF4 		cmpl	$15, -3060(%rbp)
+ 17084      FFFF0F
+ 17085 1016e 0F866DFD 		jbe	.L405
+ 17085      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 17086              		.loc 2 882 0
+ 17087 10174 F30F6F85 		movdqu	-3056(%rbp), %xmm0
+ 17087      10F4FFFF 
+ 17088              	.LBE2135:
+ 17089              	.LBE2134:
+ 17090              	.LBE2133:
+ 17091              	.LBE2132:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 17092              		.loc 2 1682 0
+ 17093 1017c 660F7F85 		movdqa	%xmm0, -8544(%rbp)
+ 17093      A0DEFFFF 
+ 17094              	.LBB2152:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 17095              		.loc 2 1683 0
+ 17096 10184 660F6F85 		movdqa	-8544(%rbp), %xmm0
+ 17096      A0DEFFFF 
+ 17097 1018c F30F7F85 		movdqu	%xmm0, -7040(%rbp)
+ 17097      80E4FFFF 
+ 17098 10194 E8000000 		call	KDbgWriterGet at PLT
+ 17098      00
+ 17099 10199 4885C0   		testq	%rax, %rax
+ 17100 1019c 7479     		je	.L407
+ 17101 1019e BF010000 		movl	$1, %edi
+ 17101      00
+ 17102 101a3 E8000000 		call	KDbgCondToFlag at PLT
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 531
+
+
+ 17102      00
+ 17103 101a8 4889C6   		movq	%rax, %rsi
+ 17104 101ab BF100000 		movl	$16, %edi
+ 17104      00
+ 17105 101b0 E8000000 		call	KDbgTestModConds at PLT
+ 17105      00
+ 17106 101b5 84C0     		testb	%al, %al
+ 17107 101b7 745E     		je	.L407
+ 17108 101b9 8B858CE4 		movl	-7028(%rbp), %eax
+ 17108      FFFF
+ 17109 101bf 89C7     		movl	%eax, %edi
+ 17110 101c1 E83AFEFE 		call	bswap_32
+ 17110      FF
+ 17111 101c6 4189C5   		movl	%eax, %r13d
+ 17112 101c9 8B8588E4 		movl	-7032(%rbp), %eax
+ 17112      FFFF
+ 17113 101cf 89C7     		movl	%eax, %edi
+ 17114 101d1 E82AFEFE 		call	bswap_32
+ 17114      FF
+ 17115 101d6 4189C4   		movl	%eax, %r12d
+ 17116 101d9 8B8584E4 		movl	-7036(%rbp), %eax
+ 17116      FFFF
+ 17117 101df 89C7     		movl	%eax, %edi
+ 17118 101e1 E81AFEFE 		call	bswap_32
+ 17118      FF
+ 17119 101e6 89C3     		movl	%eax, %ebx
+ 17120 101e8 8B8580E4 		movl	-7040(%rbp), %eax
+ 17120      FFFF
+ 17121 101ee 89C7     		movl	%eax, %edi
+ 17122 101f0 E80BFEFE 		call	bswap_32
+ 17122      FF
+ 17123 101f5 4589E9   		movl	%r13d, %r9d
+ 17124 101f8 4589E0   		movl	%r12d, %r8d
+ 17125 101fb 89D9     		movl	%ebx, %ecx
+ 17126 101fd 89C2     		movl	%eax, %edx
+ 17127 101ff 488D3500 		leaq	.LC0(%rip), %rsi
+ 17127      000000
+ 17128 10206 488D3D00 		leaq	.LC1(%rip), %rdi
+ 17128      000000
+ 17129 1020d B8000000 		movl	$0, %eax
+ 17129      00
+ 17130 10212 E8000000 		call	KDbgMsg at PLT
+ 17130      00
+ 17131              	.L407:
+ 17132 10217 660F6F85 		movdqa	-8544(%rbp), %xmm0
+ 17132      A0DEFFFF 
+ 17133 1021f F30F7F85 		movdqu	%xmm0, -2704(%rbp)
+ 17133      70F5FFFF 
+ 17134              	.LBE2152:
+ 17135              	.LBB2153:
+ 17136              	.LBB2154:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 17137              		.loc 2 667 0
+ 17138 10227 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 17138      00000000 
+ 17139 1022f F30F6F8D 		movdqu	-2704(%rbp), %xmm1
+ 17139      70F5FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 532
+
+
+ 17140 10237 F30F7F8D 		movdqu	%xmm1, -2672(%rbp)
+ 17140      90F5FFFF 
+ 17141 1023f F30F7F85 		movdqu	%xmm0, -2688(%rbp)
+ 17141      80F5FFFF 
+ 17142              	.LBB2155:
+ 17143              	.LBB2156:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 17144              		.loc 2 380 0
+ 17145 10247 F30F6F85 		movdqu	-2672(%rbp), %xmm0
+ 17145      90F5FFFF 
+ 17146 1024f F30F7F85 		movdqu	%xmm0, -6896(%rbp)
+ 17146      10E5FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 17147              		.loc 2 381 0
+ 17148 10257 F30F6F85 		movdqu	-2688(%rbp), %xmm0
+ 17148      80F5FFFF 
+ 17149 1025f F30F7F85 		movdqu	%xmm0, -6912(%rbp)
+ 17149      00E5FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 17150              		.loc 2 383 0
+ 17151 10267 C785ACF5 		movl	$0, -2644(%rbp)
+ 17151      FFFF0000 
+ 17151      0000
+ 17152 10271 EB5C     		jmp	.L408
+ 17153              	.L411:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 17154              		.loc 2 385 0
+ 17155 10273 8B85ACF5 		movl	-2644(%rbp), %eax
+ 17155      FFFF
+ 17156 10279 89C0     		mov	%eax, %eax
+ 17157 1027b 0FB68405 		movzbl	-6912(%rbp,%rax), %eax
+ 17157      00E5FFFF 
+ 17158 10283 84C0     		testb	%al, %al
+ 17159 10285 7912     		jns	.L409
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 17160              		.loc 2 386 0
+ 17161 10287 8B85ACF5 		movl	-2644(%rbp), %eax
+ 17161      FFFF
+ 17162 1028d 89C0     		mov	%eax, %eax
+ 17163 1028f C6840520 		movb	$0, -6880(%rbp,%rax)
+ 17163      E5FFFF00 
+ 17164 10297 EB2F     		jmp	.L410
+ 17165              	.L409:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 17166              		.loc 2 388 0
+ 17167 10299 8B8DACF5 		movl	-2644(%rbp), %ecx
+ 17167      FFFF
+ 17168 1029f 8B85ACF5 		movl	-2644(%rbp), %eax
+ 17168      FFFF
+ 17169 102a5 89C0     		mov	%eax, %eax
+ 17170 102a7 0FB68405 		movzbl	-6912(%rbp,%rax), %eax
+ 17170      00E5FFFF 
+ 17171 102af 0FB6C0   		movzbl	%al, %eax
+ 17172 102b2 83E00F   		andl	$15, %eax
+ 17173 102b5 4898     		cltq
+ 17174 102b7 0FB69405 		movzbl	-6896(%rbp,%rax), %edx
+ 17174      10E5FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 533
+
+
+ 17175 102bf 89C8     		mov	%ecx, %eax
+ 17176 102c1 88940520 		movb	%dl, -6880(%rbp,%rax)
+ 17176      E5FFFF
+ 17177              	.L410:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 17178              		.loc 2 383 0
+ 17179 102c8 8385ACF5 		addl	$1, -2644(%rbp)
+ 17179      FFFF01
+ 17180              	.L408:
+ 17181 102cf 83BDACF5 		cmpl	$15, -2644(%rbp)
+ 17181      FFFF0F
+ 17182 102d6 769B     		jbe	.L411
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 17183              		.loc 2 391 0
+ 17184 102d8 F30F6F85 		movdqu	-6880(%rbp), %xmm0
+ 17184      20E5FFFF 
+ 17185              	.LBE2156:
+ 17186              	.LBE2155:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 17187              		.loc 2 667 0
+ 17188 102e0 F30F7F85 		movdqu	%xmm0, -2704(%rbp)
+ 17188      70F5FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 17189              		.loc 2 668 0
+ 17190 102e8 F30F6F85 		movdqu	-2704(%rbp), %xmm0
+ 17190      70F5FFFF 
+ 17191              	.LBE2154:
+ 17192              	.LBE2153:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 17193              		.loc 2 1684 0
+ 17194 102f0 660F7F85 		movdqa	%xmm0, -8544(%rbp)
+ 17194      A0DEFFFF 
+ 17195              	.LBB2157:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 17196              		.loc 2 1685 0
+ 17197 102f8 660F6F85 		movdqa	-8544(%rbp), %xmm0
+ 17197      A0DEFFFF 
+ 17198 10300 F30F7F85 		movdqu	%xmm0, -7056(%rbp)
+ 17198      70E4FFFF 
+ 17199 10308 E8000000 		call	KDbgWriterGet at PLT
+ 17199      00
+ 17200 1030d 4885C0   		testq	%rax, %rax
+ 17201 10310 7479     		je	.L413
+ 17202 10312 BF010000 		movl	$1, %edi
+ 17202      00
+ 17203 10317 E8000000 		call	KDbgCondToFlag at PLT
+ 17203      00
+ 17204 1031c 4889C6   		movq	%rax, %rsi
+ 17205 1031f BF100000 		movl	$16, %edi
+ 17205      00
+ 17206 10324 E8000000 		call	KDbgTestModConds at PLT
+ 17206      00
+ 17207 10329 84C0     		testb	%al, %al
+ 17208 1032b 745E     		je	.L413
+ 17209 1032d 8B857CE4 		movl	-7044(%rbp), %eax
+ 17209      FFFF
+ 17210 10333 89C7     		movl	%eax, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 534
+
+
+ 17211 10335 E8C6FCFE 		call	bswap_32
+ 17211      FF
+ 17212 1033a 4189C5   		movl	%eax, %r13d
+ 17213 1033d 8B8578E4 		movl	-7048(%rbp), %eax
+ 17213      FFFF
+ 17214 10343 89C7     		movl	%eax, %edi
+ 17215 10345 E8B6FCFE 		call	bswap_32
+ 17215      FF
+ 17216 1034a 4189C4   		movl	%eax, %r12d
+ 17217 1034d 8B8574E4 		movl	-7052(%rbp), %eax
+ 17217      FFFF
+ 17218 10353 89C7     		movl	%eax, %edi
+ 17219 10355 E8A6FCFE 		call	bswap_32
+ 17219      FF
+ 17220 1035a 89C3     		movl	%eax, %ebx
+ 17221 1035c 8B8570E4 		movl	-7056(%rbp), %eax
+ 17221      FFFF
+ 17222 10362 89C7     		movl	%eax, %edi
+ 17223 10364 E897FCFE 		call	bswap_32
+ 17223      FF
+ 17224 10369 4589E9   		movl	%r13d, %r9d
+ 17225 1036c 4589E0   		movl	%r12d, %r8d
+ 17226 1036f 89D9     		movl	%ebx, %ecx
+ 17227 10371 89C2     		movl	%eax, %edx
+ 17228 10373 488D3500 		leaq	.LC2(%rip), %rsi
+ 17228      000000
+ 17229 1037a 488D3D00 		leaq	.LC1(%rip), %rdi
+ 17229      000000
+ 17230 10381 B8000000 		movl	$0, %eax
+ 17230      00
+ 17231 10386 E8000000 		call	KDbgMsg at PLT
+ 17231      00
+ 17232              	.L413:
+ 17233 1038b 660F6F85 		movdqa	-8544(%rbp), %xmm0
+ 17233      A0DEFFFF 
+ 17234 10393 F30F7F85 		movdqu	%xmm0, -2624(%rbp)
+ 17234      C0F5FFFF 
+ 17235 1039b 660F6F85 		movdqa	-8528(%rbp), %xmm0
+ 17235      B0DEFFFF 
+ 17236 103a3 F30F7F85 		movdqu	%xmm0, -2640(%rbp)
+ 17236      B0F5FFFF 
+ 17237              	.LBE2157:
+ 17238              	.LBB2158:
+ 17239              	.LBB2159:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 17240              		.loc 2 178 0
+ 17241 103ab F30F6F85 		movdqu	-2640(%rbp), %xmm0
+ 17241      B0F5FFFF 
+ 17242 103b3 F30F6F8D 		movdqu	-2624(%rbp), %xmm1
+ 17242      C0F5FFFF 
+ 17243 103bb 660FEFC1 		pxor	%xmm1, %xmm0
+ 17244              	.LBE2159:
+ 17245              	.LBE2158:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 17246              		.loc 2 1686 0
+ 17247 103bf 660F7F85 		movdqa	%xmm0, -8544(%rbp)
+ 17247      A0DEFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 535
+
+
+ 17248              	.LBB2160:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 17249              		.loc 2 1687 0
+ 17250 103c7 660F6F85 		movdqa	-8544(%rbp), %xmm0
+ 17250      A0DEFFFF 
+ 17251 103cf F30F7F85 		movdqu	%xmm0, -7072(%rbp)
+ 17251      60E4FFFF 
+ 17252 103d7 E8000000 		call	KDbgWriterGet at PLT
+ 17252      00
+ 17253 103dc 4885C0   		testq	%rax, %rax
+ 17254 103df 7479     		je	.L415
+ 17255 103e1 BF010000 		movl	$1, %edi
+ 17255      00
+ 17256 103e6 E8000000 		call	KDbgCondToFlag at PLT
+ 17256      00
+ 17257 103eb 4889C6   		movq	%rax, %rsi
+ 17258 103ee BF100000 		movl	$16, %edi
+ 17258      00
+ 17259 103f3 E8000000 		call	KDbgTestModConds at PLT
+ 17259      00
+ 17260 103f8 84C0     		testb	%al, %al
+ 17261 103fa 745E     		je	.L415
+ 17262 103fc 8B856CE4 		movl	-7060(%rbp), %eax
+ 17262      FFFF
+ 17263 10402 89C7     		movl	%eax, %edi
+ 17264 10404 E8F7FBFE 		call	bswap_32
+ 17264      FF
+ 17265 10409 4189C5   		movl	%eax, %r13d
+ 17266 1040c 8B8568E4 		movl	-7064(%rbp), %eax
+ 17266      FFFF
+ 17267 10412 89C7     		movl	%eax, %edi
+ 17268 10414 E8E7FBFE 		call	bswap_32
+ 17268      FF
+ 17269 10419 4189C4   		movl	%eax, %r12d
+ 17270 1041c 8B8564E4 		movl	-7068(%rbp), %eax
+ 17270      FFFF
+ 17271 10422 89C7     		movl	%eax, %edi
+ 17272 10424 E8D7FBFE 		call	bswap_32
+ 17272      FF
+ 17273 10429 89C3     		movl	%eax, %ebx
+ 17274 1042b 8B8560E4 		movl	-7072(%rbp), %eax
+ 17274      FFFF
+ 17275 10431 89C7     		movl	%eax, %edi
+ 17276 10433 E8C8FBFE 		call	bswap_32
+ 17276      FF
+ 17277 10438 4589E9   		movl	%r13d, %r9d
+ 17278 1043b 4589E0   		movl	%r12d, %r8d
+ 17279 1043e 89D9     		movl	%ebx, %ecx
+ 17280 10440 89C2     		movl	%eax, %edx
+ 17281 10442 488D3500 		leaq	.LC3(%rip), %rsi
+ 17281      000000
+ 17282 10449 488D3D00 		leaq	.LC1(%rip), %rdi
+ 17282      000000
+ 17283 10450 B8000000 		movl	$0, %eax
+ 17283      00
+ 17284 10455 E8000000 		call	KDbgMsg at PLT
+ 17284      00
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 536
+
+
+ 17285              	.L415:
+ 17286 1045a 660F6F85 		movdqa	-8544(%rbp), %xmm0
+ 17286      A0DEFFFF 
+ 17287 10462 F30F7F85 		movdqu	%xmm0, -2608(%rbp)
+ 17287      D0F5FFFF 
+ 17288              	.LBE2160:
+ 17289              	.LBB2161:
+ 17290              	.LBB2162:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 17291              		.loc 2 1357 0
+ 17292 1046a F30F6F85 		movdqu	-2608(%rbp), %xmm0
+ 17292      D0F5FFFF 
+ 17293 10472 F30F7F85 		movdqu	%xmm0, -6864(%rbp)
+ 17293      30E5FFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 17294              		.loc 2 1358 0
+ 17295 1047a 8B853CE5 		movl	-6852(%rbp), %eax
+ 17295      FFFF
+ 17296 10480 898538E5 		movl	%eax, -6856(%rbp)
+ 17296      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 17297              		.loc 2 1359 0
+ 17298 10486 8B853CE5 		movl	-6852(%rbp), %eax
+ 17298      FFFF
+ 17299 1048c 898534E5 		movl	%eax, -6860(%rbp)
+ 17299      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 17300              		.loc 2 1360 0
+ 17301 10492 8B853CE5 		movl	-6852(%rbp), %eax
+ 17301      FFFF
+ 17302 10498 898530E5 		movl	%eax, -6864(%rbp)
+ 17302      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 17303              		.loc 2 1361 0
+ 17304 1049e F30F6F85 		movdqu	-6864(%rbp), %xmm0
+ 17304      30E5FFFF 
+ 17305              	.LBE2162:
+ 17306              	.LBE2161:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 17307              		.loc 2 1688 0
+ 17308 104a6 660F7F85 		movdqa	%xmm0, -8544(%rbp)
+ 17308      A0DEFFFF 
+ 17309              	.LBB2163:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 17310              		.loc 2 1689 0
+ 17311 104ae 660F6F85 		movdqa	-8544(%rbp), %xmm0
+ 17311      A0DEFFFF 
+ 17312 104b6 F30F7F85 		movdqu	%xmm0, -7088(%rbp)
+ 17312      50E4FFFF 
+ 17313 104be E8000000 		call	KDbgWriterGet at PLT
+ 17313      00
+ 17314 104c3 4885C0   		testq	%rax, %rax
+ 17315 104c6 7479     		je	.L417
+ 17316 104c8 BF010000 		movl	$1, %edi
+ 17316      00
+ 17317 104cd E8000000 		call	KDbgCondToFlag at PLT
+ 17317      00
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 537
+
+
+ 17318 104d2 4889C6   		movq	%rax, %rsi
+ 17319 104d5 BF100000 		movl	$16, %edi
+ 17319      00
+ 17320 104da E8000000 		call	KDbgTestModConds at PLT
+ 17320      00
+ 17321 104df 84C0     		testb	%al, %al
+ 17322 104e1 745E     		je	.L417
+ 17323 104e3 8B855CE4 		movl	-7076(%rbp), %eax
+ 17323      FFFF
+ 17324 104e9 89C7     		movl	%eax, %edi
+ 17325 104eb E810FBFE 		call	bswap_32
+ 17325      FF
+ 17326 104f0 4189C5   		movl	%eax, %r13d
+ 17327 104f3 8B8558E4 		movl	-7080(%rbp), %eax
+ 17327      FFFF
+ 17328 104f9 89C7     		movl	%eax, %edi
+ 17329 104fb E800FBFE 		call	bswap_32
+ 17329      FF
+ 17330 10500 4189C4   		movl	%eax, %r12d
+ 17331 10503 8B8554E4 		movl	-7084(%rbp), %eax
+ 17331      FFFF
+ 17332 10509 89C7     		movl	%eax, %edi
+ 17333 1050b E8F0FAFE 		call	bswap_32
+ 17333      FF
+ 17334 10510 89C3     		movl	%eax, %ebx
+ 17335 10512 8B8550E4 		movl	-7088(%rbp), %eax
+ 17335      FFFF
+ 17336 10518 89C7     		movl	%eax, %edi
+ 17337 1051a E8E1FAFE 		call	bswap_32
+ 17337      FF
+ 17338 1051f 4589E9   		movl	%r13d, %r9d
+ 17339 10522 4589E0   		movl	%r12d, %r8d
+ 17340 10525 89D9     		movl	%ebx, %ecx
+ 17341 10527 89C2     		movl	%eax, %edx
+ 17342 10529 488D3500 		leaq	.LC4(%rip), %rsi
+ 17342      000000
+ 17343 10530 488D3D00 		leaq	.LC1(%rip), %rdi
+ 17343      000000
+ 17344 10537 B8000000 		movl	$0, %eax
+ 17344      00
+ 17345 1053c E8000000 		call	KDbgMsg at PLT
+ 17345      00
+ 17346              	.L417:
+ 17347              	.LBE2163:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 17348              		.loc 2 1690 0
+ 17349 10541 660F6F85 		movdqa	-8544(%rbp), %xmm0
+ 17349      A0DEFFFF 
+ 17350              	.LBE2129:
+ 17351              	.LBE2128:
+1932:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(8,0x08);    /* k32 : k33 : k34 : k35 */
+ 17352              		.loc 2 1932 0
+ 17353 10549 F30F7F85 		movdqu	%xmm0, -5664(%rbp)
+ 17353      E0E9FFFF 
+ 17354 10551 F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 17354      C0E9FFFF 
+ 17355 10559 F30F7F85 		movdqu	%xmm0, -2592(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 538
+
+
+ 17355      E0F5FFFF 
+ 17356              	.LBB2164:
+ 17357              	.LBB2165:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 17358              		.loc 2 1565 0
+ 17359 10561 F30F6F85 		movdqu	-2592(%rbp), %xmm0
+ 17359      E0F5FFFF 
+ 17360 10569 660F7F85 		movdqa	%xmm0, -8496(%rbp)
+ 17360      D0DEFFFF 
+ 17361 10571 660F6F85 		movdqa	-8496(%rbp), %xmm0
+ 17361      D0DEFFFF 
+ 17362 10579 F30F7F85 		movdqu	%xmm0, -2576(%rbp)
+ 17362      F0F5FFFF 
+ 17363              	.LBB2166:
+ 17364              	.LBB2167:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 17365              		.loc 2 1282 0
+ 17366 10581 F30F6F85 		movdqu	-2576(%rbp), %xmm0
+ 17366      F0F5FFFF 
+ 17367 10589 F30F7F85 		movdqu	%xmm0, -6848(%rbp)
+ 17367      40E5FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 17368              		.loc 2 1283 0
+ 17369 10591 8B8548E5 		movl	-6840(%rbp), %eax
+ 17369      FFFF
+ 17370 10597 89854CE5 		movl	%eax, -6836(%rbp)
+ 17370      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 17371              		.loc 2 1284 0
+ 17372 1059d 8B8544E5 		movl	-6844(%rbp), %eax
+ 17372      FFFF
+ 17373 105a3 898548E5 		movl	%eax, -6840(%rbp)
+ 17373      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 17374              		.loc 2 1285 0
+ 17375 105a9 8B8540E5 		movl	-6848(%rbp), %eax
+ 17375      FFFF
+ 17376 105af 898544E5 		movl	%eax, -6844(%rbp)
+ 17376      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 17377              		.loc 2 1286 0
+ 17378 105b5 C78540E5 		movl	$0, -6848(%rbp)
+ 17378      FFFF0000 
+ 17378      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 17379              		.loc 2 1287 0
+ 17380 105bf F30F6F85 		movdqu	-6848(%rbp), %xmm0
+ 17380      40E5FFFF 
+ 17381              	.LBE2167:
+ 17382              	.LBE2166:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 17383              		.loc 2 1567 0
+ 17384 105c7 660F7F85 		movdqa	%xmm0, -8496(%rbp)
+ 17384      D0DEFFFF 
+ 17385 105cf 660F6F85 		movdqa	-8496(%rbp), %xmm0
+ 17385      D0DEFFFF 
+ 17386 105d7 660FEF85 		pxor	-2592(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 539
+
+
+ 17386      E0F5FFFF 
+ 17387 105df F30F7F85 		movdqu	%xmm0, -2592(%rbp)
+ 17387      E0F5FFFF 
+ 17388 105e7 660F6F85 		movdqa	-8496(%rbp), %xmm0
+ 17388      D0DEFFFF 
+ 17389 105ef F30F7F85 		movdqu	%xmm0, -2560(%rbp)
+ 17389      00F6FFFF 
+ 17390              	.LBB2168:
+ 17391              	.LBB2169:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 17392              		.loc 2 1282 0
+ 17393 105f7 F30F6F85 		movdqu	-2560(%rbp), %xmm0
+ 17393      00F6FFFF 
+ 17394 105ff F30F7F85 		movdqu	%xmm0, -6832(%rbp)
+ 17394      50E5FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 17395              		.loc 2 1283 0
+ 17396 10607 8B8558E5 		movl	-6824(%rbp), %eax
+ 17396      FFFF
+ 17397 1060d 89855CE5 		movl	%eax, -6820(%rbp)
+ 17397      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 17398              		.loc 2 1284 0
+ 17399 10613 8B8554E5 		movl	-6828(%rbp), %eax
+ 17399      FFFF
+ 17400 10619 898558E5 		movl	%eax, -6824(%rbp)
+ 17400      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 17401              		.loc 2 1285 0
+ 17402 1061f 8B8550E5 		movl	-6832(%rbp), %eax
+ 17402      FFFF
+ 17403 10625 898554E5 		movl	%eax, -6828(%rbp)
+ 17403      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 17404              		.loc 2 1286 0
+ 17405 1062b C78550E5 		movl	$0, -6832(%rbp)
+ 17405      FFFF0000 
+ 17405      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 17406              		.loc 2 1287 0
+ 17407 10635 F30F6F85 		movdqu	-6832(%rbp), %xmm0
+ 17407      50E5FFFF 
+ 17408              	.LBE2169:
+ 17409              	.LBE2168:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 17410              		.loc 2 1568 0
+ 17411 1063d 660F7F85 		movdqa	%xmm0, -8496(%rbp)
+ 17411      D0DEFFFF 
+ 17412 10645 660F6F85 		movdqa	-8496(%rbp), %xmm0
+ 17412      D0DEFFFF 
+ 17413 1064d 660FEF85 		pxor	-2592(%rbp), %xmm0
+ 17413      E0F5FFFF 
+ 17414 10655 F30F7F85 		movdqu	%xmm0, -2592(%rbp)
+ 17414      E0F5FFFF 
+ 17415 1065d 660F6F85 		movdqa	-8496(%rbp), %xmm0
+ 17415      D0DEFFFF 
+ 17416 10665 F30F7F85 		movdqu	%xmm0, -2544(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 540
+
+
+ 17416      10F6FFFF 
+ 17417              	.LBB2170:
+ 17418              	.LBB2171:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 17419              		.loc 2 1282 0
+ 17420 1066d F30F6F85 		movdqu	-2544(%rbp), %xmm0
+ 17420      10F6FFFF 
+ 17421 10675 F30F7F85 		movdqu	%xmm0, -6816(%rbp)
+ 17421      60E5FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 17422              		.loc 2 1283 0
+ 17423 1067d 8B8568E5 		movl	-6808(%rbp), %eax
+ 17423      FFFF
+ 17424 10683 89856CE5 		movl	%eax, -6804(%rbp)
+ 17424      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 17425              		.loc 2 1284 0
+ 17426 10689 8B8564E5 		movl	-6812(%rbp), %eax
+ 17426      FFFF
+ 17427 1068f 898568E5 		movl	%eax, -6808(%rbp)
+ 17427      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 17428              		.loc 2 1285 0
+ 17429 10695 8B8560E5 		movl	-6816(%rbp), %eax
+ 17429      FFFF
+ 17430 1069b 898564E5 		movl	%eax, -6812(%rbp)
+ 17430      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 17431              		.loc 2 1286 0
+ 17432 106a1 C78560E5 		movl	$0, -6816(%rbp)
+ 17432      FFFF0000 
+ 17432      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 17433              		.loc 2 1287 0
+ 17434 106ab F30F6F85 		movdqu	-6816(%rbp), %xmm0
+ 17434      60E5FFFF 
+ 17435              	.LBE2171:
+ 17436              	.LBE2170:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 17437              		.loc 2 1569 0
+ 17438 106b3 660F7F85 		movdqa	%xmm0, -8496(%rbp)
+ 17438      D0DEFFFF 
+ 17439 106bb 660F6F85 		movdqa	-8496(%rbp), %xmm0
+ 17439      D0DEFFFF 
+ 17440 106c3 660FEF85 		pxor	-2592(%rbp), %xmm0
+ 17440      E0F5FFFF 
+ 17441 106cb F30F7F85 		movdqu	%xmm0, -2592(%rbp)
+ 17441      E0F5FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 17442              		.loc 2 1571 0
+ 17443 106d3 F30F6F85 		movdqu	-2592(%rbp), %xmm0
+ 17443      E0F5FFFF 
+ 17444              	.LBE2165:
+ 17445              	.LBE2164:
+1932:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(8,0x08);    /* k32 : k33 : k34 : k35 */
+ 17446              		.loc 2 1932 0
+ 17447 106db F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 541
+
+
+ 17447      C0E9FFFF 
+ 17448 106e3 F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 17448      C0E9FFFF 
+ 17449 106eb F30F7F85 		movdqu	%xmm0, -2512(%rbp)
+ 17449      30F6FFFF 
+ 17450 106f3 F30F6F85 		movdqu	-5664(%rbp), %xmm0
+ 17450      E0E9FFFF 
+ 17451 106fb F30F7F85 		movdqu	%xmm0, -2528(%rbp)
+ 17451      20F6FFFF 
+ 17452              	.LBB2172:
+ 17453              	.LBB2173:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 17454              		.loc 2 178 0
+ 17455 10703 F30F6F85 		movdqu	-2528(%rbp), %xmm0
+ 17455      20F6FFFF 
+ 17456 1070b F30F6F8D 		movdqu	-2512(%rbp), %xmm1
+ 17456      30F6FFFF 
+ 17457 10713 660FEFC1 		pxor	%xmm1, %xmm0
+ 17458              	.LBE2173:
+ 17459              	.LBE2172:
+1932:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(8,0x08);    /* k32 : k33 : k34 : k35 */
+ 17460              		.loc 2 1932 0
+ 17461 10717 F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 17461      C0E9FFFF 
+ 17462 1071f 488B85D8 		movq	-8232(%rbp), %rax
+ 17462      DFFFFF
+ 17463 10726 4883E880 		subq	$-128, %rax
+ 17464 1072a F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 17464      C0E9FFFF 
+ 17465 10732 F30F7F00 		movdqu	%xmm0, (%rax)
+ 17466 10736 F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 17466      C0E9FFFF 
+ 17467 1073e F30F7F85 		movdqu	%xmm0, -2496(%rbp)
+ 17467      40F6FFFF 
+ 17468              	.LBB2174:
+ 17469              	.LBB2175:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 17470              		.loc 2 1656 0
+ 17471 10746 F30F6F85 		movdqu	-2496(%rbp), %xmm0
+ 17471      40F6FFFF 
+ 17472 1074e F30F7F85 		movdqu	%xmm0, -6784(%rbp)
+ 17472      80E5FFFF 
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 17473              		.loc 2 1657 0
+ 17474 10756 8B858CE5 		movl	-6772(%rbp), %eax
+ 17474      FFFF
+ 17475 1075c 898558F6 		movl	%eax, -2472(%rbp)
+ 17475      FFFF
+ 17476              	.LBB2176:
+ 17477              	.LBB2177:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 17478              		.loc 2 740 0
+ 17479 10762 8B8558F6 		movl	-2472(%rbp), %eax
+ 17479      FFFF
+ 17480 10768 898570E5 		movl	%eax, -6800(%rbp)
+ 17480      FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 542
+
+
+ 17481              		.loc 2 741 0
+ 17482 1076e C7855CF6 		movl	$0, -2468(%rbp)
+ 17482      FFFF0000 
+ 17482      0000
+ 17483 10778 EB36     		jmp	.L418
+ 17484              	.L419:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 17485              		.loc 2 742 0
+ 17486 1077a 8B8D5CF6 		movl	-2468(%rbp), %ecx
+ 17486      FFFF
+ 17487 10780 8B855CF6 		movl	-2468(%rbp), %eax
+ 17487      FFFF
+ 17488 10786 89C0     		mov	%eax, %eax
+ 17489 10788 0FB68405 		movzbl	-6800(%rbp,%rax), %eax
+ 17489      70E5FFFF 
+ 17490 10790 0FB6C0   		movzbl	%al, %eax
+ 17491 10793 89C2     		mov	%eax, %edx
+ 17492 10795 488D0500 		leaq	KAESBlockCipherVecRijndaelSBox(%rip), %rax
+ 17492      000000
+ 17493 1079c 0FB61402 		movzbl	(%rdx,%rax), %edx
+ 17494 107a0 89C8     		mov	%ecx, %eax
+ 17495 107a2 88940570 		movb	%dl, -6800(%rbp,%rax)
+ 17495      E5FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 17496              		.loc 2 741 0
+ 17497 107a9 83855CF6 		addl	$1, -2468(%rbp)
+ 17497      FFFF01
+ 17498              	.L418:
+ 17499 107b0 83BD5CF6 		cmpl	$3, -2468(%rbp)
+ 17499      FFFF03
+ 17500 107b7 76C1     		jbe	.L419
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 17501              		.loc 2 743 0
+ 17502 107b9 8B8570E5 		movl	-6800(%rbp), %eax
+ 17502      FFFF
+ 17503              	.LBE2177:
+ 17504              	.LBE2176:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 17505              		.loc 2 1657 0
+ 17506 107bf 898554F6 		movl	%eax, -2476(%rbp)
+ 17506      FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 17507              		.loc 2 1659 0
+ 17508 107c5 8B8554F6 		movl	-2476(%rbp), %eax
+ 17508      FFFF
+ 17509 107cb 89858CE5 		movl	%eax, -6772(%rbp)
+ 17509      FFFF
+ 17510 107d1 8B858CE5 		movl	-6772(%rbp), %eax
+ 17510      FFFF
+ 17511 107d7 898588E5 		movl	%eax, -6776(%rbp)
+ 17511      FFFF
+ 17512 107dd 8B8588E5 		movl	-6776(%rbp), %eax
+ 17512      FFFF
+ 17513 107e3 898584E5 		movl	%eax, -6780(%rbp)
+ 17513      FFFF
+ 17514 107e9 8B8584E5 		movl	-6780(%rbp), %eax
+ 17514      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 543
+
+
+ 17515 107ef 898580E5 		movl	%eax, -6784(%rbp)
+ 17515      FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 17516              		.loc 2 1660 0
+ 17517 107f5 F30F6F85 		movdqu	-6784(%rbp), %xmm0
+ 17517      80E5FFFF 
+ 17518              	.LBE2175:
+ 17519              	.LBE2174:
+1933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(9);         /* k36 : k37 : k38 : k39 */
+ 17520              		.loc 2 1933 0
+ 17521 107fd F30F7F85 		movdqu	%xmm0, -5664(%rbp)
+ 17521      E0E9FFFF 
+ 17522 10805 F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 17522      D0E9FFFF 
+ 17523 1080d F30F7F85 		movdqu	%xmm0, -2464(%rbp)
+ 17523      60F6FFFF 
+ 17524              	.LBB2178:
+ 17525              	.LBB2179:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 17526              		.loc 2 1565 0
+ 17527 10815 F30F6F85 		movdqu	-2464(%rbp), %xmm0
+ 17527      60F6FFFF 
+ 17528 1081d 660F7F85 		movdqa	%xmm0, -8480(%rbp)
+ 17528      E0DEFFFF 
+ 17529 10825 660F6F85 		movdqa	-8480(%rbp), %xmm0
+ 17529      E0DEFFFF 
+ 17530 1082d F30F7F85 		movdqu	%xmm0, -2448(%rbp)
+ 17530      70F6FFFF 
+ 17531              	.LBB2180:
+ 17532              	.LBB2181:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 17533              		.loc 2 1282 0
+ 17534 10835 F30F6F85 		movdqu	-2448(%rbp), %xmm0
+ 17534      70F6FFFF 
+ 17535 1083d F30F7F85 		movdqu	%xmm0, -6768(%rbp)
+ 17535      90E5FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 17536              		.loc 2 1283 0
+ 17537 10845 8B8598E5 		movl	-6760(%rbp), %eax
+ 17537      FFFF
+ 17538 1084b 89859CE5 		movl	%eax, -6756(%rbp)
+ 17538      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 17539              		.loc 2 1284 0
+ 17540 10851 8B8594E5 		movl	-6764(%rbp), %eax
+ 17540      FFFF
+ 17541 10857 898598E5 		movl	%eax, -6760(%rbp)
+ 17541      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 17542              		.loc 2 1285 0
+ 17543 1085d 8B8590E5 		movl	-6768(%rbp), %eax
+ 17543      FFFF
+ 17544 10863 898594E5 		movl	%eax, -6764(%rbp)
+ 17544      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 17545              		.loc 2 1286 0
+ 17546 10869 C78590E5 		movl	$0, -6768(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 544
+
+
+ 17546      FFFF0000 
+ 17546      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 17547              		.loc 2 1287 0
+ 17548 10873 F30F6F85 		movdqu	-6768(%rbp), %xmm0
+ 17548      90E5FFFF 
+ 17549              	.LBE2181:
+ 17550              	.LBE2180:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 17551              		.loc 2 1567 0
+ 17552 1087b 660F7F85 		movdqa	%xmm0, -8480(%rbp)
+ 17552      E0DEFFFF 
+ 17553 10883 660F6F85 		movdqa	-8480(%rbp), %xmm0
+ 17553      E0DEFFFF 
+ 17554 1088b 660FEF85 		pxor	-2464(%rbp), %xmm0
+ 17554      60F6FFFF 
+ 17555 10893 F30F7F85 		movdqu	%xmm0, -2464(%rbp)
+ 17555      60F6FFFF 
+ 17556 1089b 660F6F85 		movdqa	-8480(%rbp), %xmm0
+ 17556      E0DEFFFF 
+ 17557 108a3 F30F7F85 		movdqu	%xmm0, -2432(%rbp)
+ 17557      80F6FFFF 
+ 17558              	.LBB2182:
+ 17559              	.LBB2183:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 17560              		.loc 2 1282 0
+ 17561 108ab F30F6F85 		movdqu	-2432(%rbp), %xmm0
+ 17561      80F6FFFF 
+ 17562 108b3 F30F7F85 		movdqu	%xmm0, -6752(%rbp)
+ 17562      A0E5FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 17563              		.loc 2 1283 0
+ 17564 108bb 8B85A8E5 		movl	-6744(%rbp), %eax
+ 17564      FFFF
+ 17565 108c1 8985ACE5 		movl	%eax, -6740(%rbp)
+ 17565      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 17566              		.loc 2 1284 0
+ 17567 108c7 8B85A4E5 		movl	-6748(%rbp), %eax
+ 17567      FFFF
+ 17568 108cd 8985A8E5 		movl	%eax, -6744(%rbp)
+ 17568      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 17569              		.loc 2 1285 0
+ 17570 108d3 8B85A0E5 		movl	-6752(%rbp), %eax
+ 17570      FFFF
+ 17571 108d9 8985A4E5 		movl	%eax, -6748(%rbp)
+ 17571      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 17572              		.loc 2 1286 0
+ 17573 108df C785A0E5 		movl	$0, -6752(%rbp)
+ 17573      FFFF0000 
+ 17573      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 17574              		.loc 2 1287 0
+ 17575 108e9 F30F6F85 		movdqu	-6752(%rbp), %xmm0
+ 17575      A0E5FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 545
+
+
+ 17576              	.LBE2183:
+ 17577              	.LBE2182:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 17578              		.loc 2 1568 0
+ 17579 108f1 660F7F85 		movdqa	%xmm0, -8480(%rbp)
+ 17579      E0DEFFFF 
+ 17580 108f9 660F6F85 		movdqa	-8480(%rbp), %xmm0
+ 17580      E0DEFFFF 
+ 17581 10901 660FEF85 		pxor	-2464(%rbp), %xmm0
+ 17581      60F6FFFF 
+ 17582 10909 F30F7F85 		movdqu	%xmm0, -2464(%rbp)
+ 17582      60F6FFFF 
+ 17583 10911 660F6F85 		movdqa	-8480(%rbp), %xmm0
+ 17583      E0DEFFFF 
+ 17584 10919 F30F7F85 		movdqu	%xmm0, -2416(%rbp)
+ 17584      90F6FFFF 
+ 17585              	.LBB2184:
+ 17586              	.LBB2185:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 17587              		.loc 2 1282 0
+ 17588 10921 F30F6F85 		movdqu	-2416(%rbp), %xmm0
+ 17588      90F6FFFF 
+ 17589 10929 F30F7F85 		movdqu	%xmm0, -6736(%rbp)
+ 17589      B0E5FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 17590              		.loc 2 1283 0
+ 17591 10931 8B85B8E5 		movl	-6728(%rbp), %eax
+ 17591      FFFF
+ 17592 10937 8985BCE5 		movl	%eax, -6724(%rbp)
+ 17592      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 17593              		.loc 2 1284 0
+ 17594 1093d 8B85B4E5 		movl	-6732(%rbp), %eax
+ 17594      FFFF
+ 17595 10943 8985B8E5 		movl	%eax, -6728(%rbp)
+ 17595      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 17596              		.loc 2 1285 0
+ 17597 10949 8B85B0E5 		movl	-6736(%rbp), %eax
+ 17597      FFFF
+ 17598 1094f 8985B4E5 		movl	%eax, -6732(%rbp)
+ 17598      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 17599              		.loc 2 1286 0
+ 17600 10955 C785B0E5 		movl	$0, -6736(%rbp)
+ 17600      FFFF0000 
+ 17600      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 17601              		.loc 2 1287 0
+ 17602 1095f F30F6F85 		movdqu	-6736(%rbp), %xmm0
+ 17602      B0E5FFFF 
+ 17603              	.LBE2185:
+ 17604              	.LBE2184:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 17605              		.loc 2 1569 0
+ 17606 10967 660F7F85 		movdqa	%xmm0, -8480(%rbp)
+ 17606      E0DEFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 546
+
+
+ 17607 1096f 660F6F85 		movdqa	-8480(%rbp), %xmm0
+ 17607      E0DEFFFF 
+ 17608 10977 660FEF85 		pxor	-2464(%rbp), %xmm0
+ 17608      60F6FFFF 
+ 17609 1097f F30F7F85 		movdqu	%xmm0, -2464(%rbp)
+ 17609      60F6FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 17610              		.loc 2 1571 0
+ 17611 10987 F30F6F85 		movdqu	-2464(%rbp), %xmm0
+ 17611      60F6FFFF 
+ 17612              	.LBE2179:
+ 17613              	.LBE2178:
+1933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(9);         /* k36 : k37 : k38 : k39 */
+ 17614              		.loc 2 1933 0
+ 17615 1098f F30F7F85 		movdqu	%xmm0, -5680(%rbp)
+ 17615      D0E9FFFF 
+ 17616 10997 F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 17616      D0E9FFFF 
+ 17617 1099f F30F7F85 		movdqu	%xmm0, -2384(%rbp)
+ 17617      B0F6FFFF 
+ 17618 109a7 F30F6F85 		movdqu	-5664(%rbp), %xmm0
+ 17618      E0E9FFFF 
+ 17619 109af F30F7F85 		movdqu	%xmm0, -2400(%rbp)
+ 17619      A0F6FFFF 
+ 17620              	.LBB2186:
+ 17621              	.LBB2187:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 17622              		.loc 2 178 0
+ 17623 109b7 F30F6F85 		movdqu	-2400(%rbp), %xmm0
+ 17623      A0F6FFFF 
+ 17624 109bf F30F6F8D 		movdqu	-2384(%rbp), %xmm1
+ 17624      B0F6FFFF 
+ 17625 109c7 660FEFC1 		pxor	%xmm1, %xmm0
+ 17626              	.LBE2187:
+ 17627              	.LBE2186:
+1933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(9);         /* k36 : k37 : k38 : k39 */
+ 17628              		.loc 2 1933 0
+ 17629 109cb F30F7F85 		movdqu	%xmm0, -5680(%rbp)
+ 17629      D0E9FFFF 
+ 17630 109d3 488B85D8 		movq	-8232(%rbp), %rax
+ 17630      DFFFFF
+ 17631 109da 48059000 		addq	$144, %rax
+ 17631      0000
+ 17632 109e0 F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 17632      D0E9FFFF 
+ 17633 109e8 F30F7F00 		movdqu	%xmm0, (%rax)
+ 17634 109ec F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 17634      D0E9FFFF 
+ 17635 109f4 F30F7F85 		movdqu	%xmm0, -2352(%rbp)
+ 17635      D0F6FFFF 
+ 17636              	.LBB2188:
+ 17637              	.LBB2189:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 17638              		.loc 2 1681 0
+ 17639 109fc B8100000 		movl	$16, %eax
+ 17639      00
+ 17640 10a01 660F6F05 		movdqa	vec_00(%rip), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 547
+
+
+ 17640      00000000 
+ 17641 10a09 F30F7F85 		movdqu	%xmm0, -2320(%rbp)
+ 17641      F0F6FFFF 
+ 17642 10a11 8985ECF6 		movl	%eax, -2324(%rbp)
+ 17642      FFFF
+ 17643              	.LBB2190:
+ 17644              	.LBB2191:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 17645              		.loc 2 522 0
+ 17646 10a17 F30F6F85 		movdqu	-2320(%rbp), %xmm0
+ 17646      F0F6FFFF 
+ 17647 10a1f F30F7F85 		movdqu	%xmm0, -6656(%rbp)
+ 17647      00E6FFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 17648              		.loc 2 523 0
+ 17649 10a27 B8030000 		movl	$3, %eax
+ 17649      00
+ 17650 10a2c 4898     		cltq
+ 17651 10a2e 8B95ECF6 		movl	-2324(%rbp), %edx
+ 17651      FFFF
+ 17652 10a34 89948500 		movl	%edx, -6656(%rbp,%rax,4)
+ 17652      E6FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 17653              		.loc 2 524 0
+ 17654 10a3b F30F6F85 		movdqu	-6656(%rbp), %xmm0
+ 17654      00E6FFFF 
+ 17655 10a43 F30F7F85 		movdqu	%xmm0, -2320(%rbp)
+ 17655      F0F6FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 17656              		.loc 2 526 0
+ 17657 10a4b F30F6F85 		movdqu	-2320(%rbp), %xmm0
+ 17657      F0F6FFFF 
+ 17658              	.LBE2191:
+ 17659              	.LBE2190:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 17660              		.loc 2 1681 0
+ 17661 10a53 660F7F85 		movdqa	%xmm0, -8448(%rbp)
+ 17661      00DFFFFF 
+ 17662 10a5b F30F6F85 		movdqu	-2352(%rbp), %xmm0
+ 17662      D0F6FFFF 
+ 17663 10a63 F30F7F85 		movdqu	%xmm0, -2304(%rbp)
+ 17663      00F7FFFF 
+ 17664 10a6b F30F6F85 		movdqu	-2304(%rbp), %xmm0
+ 17664      00F7FFFF 
+ 17665 10a73 F30F7F85 		movdqu	%xmm0, -2272(%rbp)
+ 17665      20F7FFFF 
+ 17666 10a7b 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 17666      000000
+ 17667 10a82 48898518 		movq	%rax, -2280(%rbp)
+ 17667      F7FFFF
+ 17668              	.LBB2192:
+ 17669              	.LBB2193:
+ 17670              	.LBB2194:
+ 17671              	.LBB2195:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 17672              		.loc 2 851 0
+ 17673 10a89 660F6F05 		movdqa	vec_00(%rip), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 548
+
+
+ 17673      00000000 
+ 17674 10a91 F30F7F85 		movdqu	%xmm0, -2240(%rbp)
+ 17674      40F7FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 17675              		.loc 2 854 0
+ 17676 10a99 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 17676      00000000 
+ 17677 10aa1 F30F6F8D 		movdqu	-2272(%rbp), %xmm1
+ 17677      20F7FFFF 
+ 17678 10aa9 F30F7F8D 		movdqu	%xmm1, -2160(%rbp)
+ 17678      90F7FFFF 
+ 17679 10ab1 F30F7F85 		movdqu	%xmm0, -2176(%rbp)
+ 17679      80F7FFFF 
+ 17680              	.LBB2196:
+ 17681              	.LBB2197:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 17682              		.loc 2 206 0
+ 17683 10ab9 F30F6F85 		movdqu	-2176(%rbp), %xmm0
+ 17683      80F7FFFF 
+ 17684 10ac1 F30F6F8D 		movdqu	-2160(%rbp), %xmm1
+ 17684      90F7FFFF 
+ 17685 10ac9 660FDBC1 		pand	%xmm1, %xmm0
+ 17686              	.LBE2197:
+ 17687              	.LBE2196:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 17688              		.loc 2 854 0
+ 17689 10acd F30F7F85 		movdqu	%xmm0, -2192(%rbp)
+ 17689      70F7FFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 17690              		.loc 2 862 0
+ 17691 10ad5 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 17691      00000000 
+ 17692 10add F30F6F8D 		movdqu	-2272(%rbp), %xmm1
+ 17692      20F7FFFF 
+ 17693 10ae5 F30F7F8D 		movdqu	%xmm1, -2128(%rbp)
+ 17693      B0F7FFFF 
+ 17694 10aed F30F7F85 		movdqu	%xmm0, -2144(%rbp)
+ 17694      A0F7FFFF 
+ 17695              	.LBB2198:
+ 17696              		.loc 2 2642 0
+ 17697 10af5 0FB685B0 		movzbl	-2128(%rbp), %eax
+ 17697      F7FFFF
+ 17698 10afc 0FB695A0 		movzbl	-2144(%rbp), %edx
+ 17698      F7FFFF
+ 17699 10b03 0FB6C0   		movzbl	%al, %eax
+ 17700 10b06 6689853E 		movw	%ax, -8898(%rbp)
+ 17700      DDFFFF
+ 17701 10b0d 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 17701      DDFFFF
+ 17702 10b14 F6F2     		divb	%dl
+ 17703 10b16 4189C7   		movl	%eax, %r15d
+ 17704 10b19 0FB685B1 		movzbl	-2127(%rbp), %eax
+ 17704      F7FFFF
+ 17705 10b20 0FB695A1 		movzbl	-2143(%rbp), %edx
+ 17705      F7FFFF
+ 17706 10b27 0FB6C0   		movzbl	%al, %eax
+ 17707 10b2a 6689853E 		movw	%ax, -8898(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 549
+
+
+ 17707      DDFFFF
+ 17708 10b31 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 17708      DDFFFF
+ 17709 10b38 F6F2     		divb	%dl
+ 17710 10b3a 88851FDF 		movb	%al, -8417(%rbp)
+ 17710      FFFF
+ 17711 10b40 0FB685B2 		movzbl	-2126(%rbp), %eax
+ 17711      F7FFFF
+ 17712 10b47 0FB695A2 		movzbl	-2142(%rbp), %edx
+ 17712      F7FFFF
+ 17713 10b4e 0FB6C0   		movzbl	%al, %eax
+ 17714 10b51 6689853E 		movw	%ax, -8898(%rbp)
+ 17714      DDFFFF
+ 17715 10b58 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 17715      DDFFFF
+ 17716 10b5f F6F2     		divb	%dl
+ 17717 10b61 88851EDF 		movb	%al, -8418(%rbp)
+ 17717      FFFF
+ 17718 10b67 0FB685B3 		movzbl	-2125(%rbp), %eax
+ 17718      F7FFFF
+ 17719 10b6e 0FB695A3 		movzbl	-2141(%rbp), %edx
+ 17719      F7FFFF
+ 17720 10b75 0FB6C0   		movzbl	%al, %eax
+ 17721 10b78 6689853E 		movw	%ax, -8898(%rbp)
+ 17721      DDFFFF
+ 17722 10b7f 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 17722      DDFFFF
+ 17723 10b86 F6F2     		divb	%dl
+ 17724 10b88 88851DDF 		movb	%al, -8419(%rbp)
+ 17724      FFFF
+ 17725 10b8e 0FB685B4 		movzbl	-2124(%rbp), %eax
+ 17725      F7FFFF
+ 17726 10b95 0FB695A4 		movzbl	-2140(%rbp), %edx
+ 17726      F7FFFF
+ 17727 10b9c 0FB6C0   		movzbl	%al, %eax
+ 17728 10b9f 6689853E 		movw	%ax, -8898(%rbp)
+ 17728      DDFFFF
+ 17729 10ba6 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 17729      DDFFFF
+ 17730 10bad F6F2     		divb	%dl
+ 17731 10baf 88851CDF 		movb	%al, -8420(%rbp)
+ 17731      FFFF
+ 17732 10bb5 0FB685B5 		movzbl	-2123(%rbp), %eax
+ 17732      F7FFFF
+ 17733 10bbc 0FB695A5 		movzbl	-2139(%rbp), %edx
+ 17733      F7FFFF
+ 17734 10bc3 0FB6C0   		movzbl	%al, %eax
+ 17735 10bc6 6689853E 		movw	%ax, -8898(%rbp)
+ 17735      DDFFFF
+ 17736 10bcd 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 17736      DDFFFF
+ 17737 10bd4 F6F2     		divb	%dl
+ 17738 10bd6 4189C1   		movl	%eax, %r9d
+ 17739 10bd9 0FB685B6 		movzbl	-2122(%rbp), %eax
+ 17739      F7FFFF
+ 17740 10be0 0FB695A6 		movzbl	-2138(%rbp), %edx
+ 17740      F7FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 550
+
+
+ 17741 10be7 0FB6C0   		movzbl	%al, %eax
+ 17742 10bea 6689853E 		movw	%ax, -8898(%rbp)
+ 17742      DDFFFF
+ 17743 10bf1 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 17743      DDFFFF
+ 17744 10bf8 F6F2     		divb	%dl
+ 17745 10bfa 89C7     		movl	%eax, %edi
+ 17746 10bfc 0FB685B7 		movzbl	-2121(%rbp), %eax
+ 17746      F7FFFF
+ 17747 10c03 0FB695A7 		movzbl	-2137(%rbp), %edx
+ 17747      F7FFFF
+ 17748 10c0a 0FB6C0   		movzbl	%al, %eax
+ 17749 10c0d 6689853E 		movw	%ax, -8898(%rbp)
+ 17749      DDFFFF
+ 17750 10c14 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 17750      DDFFFF
+ 17751 10c1b F6F2     		divb	%dl
+ 17752 10c1d 89C3     		movl	%eax, %ebx
+ 17753 10c1f 0FB685B8 		movzbl	-2120(%rbp), %eax
+ 17753      F7FFFF
+ 17754 10c26 0FB695A8 		movzbl	-2136(%rbp), %edx
+ 17754      F7FFFF
+ 17755 10c2d 0FB6C0   		movzbl	%al, %eax
+ 17756 10c30 6689853E 		movw	%ax, -8898(%rbp)
+ 17756      DDFFFF
+ 17757 10c37 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 17757      DDFFFF
+ 17758 10c3e F6F2     		divb	%dl
+ 17759 10c40 4189C2   		movl	%eax, %r10d
+ 17760 10c43 0FB685B9 		movzbl	-2119(%rbp), %eax
+ 17760      F7FFFF
+ 17761 10c4a 0FB695A9 		movzbl	-2135(%rbp), %edx
+ 17761      F7FFFF
+ 17762 10c51 0FB6C0   		movzbl	%al, %eax
+ 17763 10c54 6689853E 		movw	%ax, -8898(%rbp)
+ 17763      DDFFFF
+ 17764 10c5b 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 17764      DDFFFF
+ 17765 10c62 F6F2     		divb	%dl
+ 17766 10c64 4189C3   		movl	%eax, %r11d
+ 17767 10c67 0FB685BA 		movzbl	-2118(%rbp), %eax
+ 17767      F7FFFF
+ 17768 10c6e 0FB695AA 		movzbl	-2134(%rbp), %edx
+ 17768      F7FFFF
+ 17769 10c75 0FB6C0   		movzbl	%al, %eax
+ 17770 10c78 6689853E 		movw	%ax, -8898(%rbp)
+ 17770      DDFFFF
+ 17771 10c7f 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 17771      DDFFFF
+ 17772 10c86 F6F2     		divb	%dl
+ 17773 10c88 4189C4   		movl	%eax, %r12d
+ 17774 10c8b 0FB685BB 		movzbl	-2117(%rbp), %eax
+ 17774      F7FFFF
+ 17775 10c92 0FB695AB 		movzbl	-2133(%rbp), %edx
+ 17775      F7FFFF
+ 17776 10c99 0FB6C0   		movzbl	%al, %eax
+ 17777 10c9c 6689853E 		movw	%ax, -8898(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 551
+
+
+ 17777      DDFFFF
+ 17778 10ca3 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 17778      DDFFFF
+ 17779 10caa F6F2     		divb	%dl
+ 17780 10cac 4189C5   		movl	%eax, %r13d
+ 17781 10caf 0FB685BC 		movzbl	-2116(%rbp), %eax
+ 17781      F7FFFF
+ 17782 10cb6 0FB695AC 		movzbl	-2132(%rbp), %edx
+ 17782      F7FFFF
+ 17783 10cbd 0FB6C0   		movzbl	%al, %eax
+ 17784 10cc0 6689853E 		movw	%ax, -8898(%rbp)
+ 17784      DDFFFF
+ 17785 10cc7 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 17785      DDFFFF
+ 17786 10cce F6F2     		divb	%dl
+ 17787 10cd0 4189C6   		movl	%eax, %r14d
+ 17788 10cd3 0FB685BD 		movzbl	-2115(%rbp), %eax
+ 17788      F7FFFF
+ 17789 10cda 0FB695AD 		movzbl	-2131(%rbp), %edx
+ 17789      F7FFFF
+ 17790 10ce1 0FB6C0   		movzbl	%al, %eax
+ 17791 10ce4 6689853E 		movw	%ax, -8898(%rbp)
+ 17791      DDFFFF
+ 17792 10ceb 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 17792      DDFFFF
+ 17793 10cf2 F6F2     		divb	%dl
+ 17794 10cf4 4189C0   		movl	%eax, %r8d
+ 17795 10cf7 0FB685BE 		movzbl	-2114(%rbp), %eax
+ 17795      F7FFFF
+ 17796 10cfe 0FB695AE 		movzbl	-2130(%rbp), %edx
+ 17796      F7FFFF
+ 17797 10d05 0FB6C0   		movzbl	%al, %eax
+ 17798 10d08 6689853E 		movw	%ax, -8898(%rbp)
+ 17798      DDFFFF
+ 17799 10d0f 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 17799      DDFFFF
+ 17800 10d16 F6F2     		divb	%dl
+ 17801 10d18 89C6     		movl	%eax, %esi
+ 17802 10d1a 0FB685BF 		movzbl	-2113(%rbp), %eax
+ 17802      F7FFFF
+ 17803 10d21 0FB695AF 		movzbl	-2129(%rbp), %edx
+ 17803      F7FFFF
+ 17804 10d28 0FB6C0   		movzbl	%al, %eax
+ 17805 10d2b 6689853E 		movw	%ax, -8898(%rbp)
+ 17805      DDFFFF
+ 17806 10d32 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 17806      DDFFFF
+ 17807 10d39 F6F2     		divb	%dl
+ 17808 10d3b 89C1     		movl	%eax, %ecx
+ 17809              	.LBB2199:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 17810              		.loc 2 346 0
+ 17811 10d3d 0FB6D3   		movzbl	%bl, %edx
+ 17812 10d40 400FB6C7 		movzbl	%dil, %eax
+ 17813 10d44 48C1E208 		salq	$8, %rdx
+ 17814 10d48 4809C2   		orq	%rax, %rdx
+ 17815 10d4b 410FB6C1 		movzbl	%r9b, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 552
+
+
+ 17816 10d4f 48C1E208 		salq	$8, %rdx
+ 17817 10d53 4809C2   		orq	%rax, %rdx
+ 17818 10d56 0FB6851C 		movzbl	-8420(%rbp), %eax
+ 17818      DFFFFF
+ 17819 10d5d 48C1E208 		salq	$8, %rdx
+ 17820 10d61 4809C2   		orq	%rax, %rdx
+ 17821 10d64 0FB6851D 		movzbl	-8419(%rbp), %eax
+ 17821      DFFFFF
+ 17822 10d6b 48C1E208 		salq	$8, %rdx
+ 17823 10d6f 4809C2   		orq	%rax, %rdx
+ 17824 10d72 0FB6851E 		movzbl	-8418(%rbp), %eax
+ 17824      DFFFFF
+ 17825 10d79 48C1E208 		salq	$8, %rdx
+ 17826 10d7d 4809C2   		orq	%rax, %rdx
+ 17827 10d80 0FB6851F 		movzbl	-8417(%rbp), %eax
+ 17827      DFFFFF
+ 17828 10d87 48C1E208 		salq	$8, %rdx
+ 17829 10d8b 4809C2   		orq	%rax, %rdx
+ 17830 10d8e 410FB6C7 		movzbl	%r15b, %eax
+ 17831 10d92 48C1E208 		salq	$8, %rdx
+ 17832 10d96 4809C2   		orq	%rax, %rdx
+ 17833 10d99 0FB6C1   		movzbl	%cl, %eax
+ 17834 10d9c 400FB6CE 		movzbl	%sil, %ecx
+ 17835 10da0 48C1E008 		salq	$8, %rax
+ 17836 10da4 4809C8   		orq	%rcx, %rax
+ 17837 10da7 410FB6C8 		movzbl	%r8b, %ecx
+ 17838 10dab 48C1E008 		salq	$8, %rax
+ 17839 10daf 4809C8   		orq	%rcx, %rax
+ 17840 10db2 410FB6CE 		movzbl	%r14b, %ecx
+ 17841 10db6 48C1E008 		salq	$8, %rax
+ 17842 10dba 4809C8   		orq	%rcx, %rax
+ 17843 10dbd 410FB6CD 		movzbl	%r13b, %ecx
+ 17844 10dc1 48C1E008 		salq	$8, %rax
+ 17845 10dc5 4809C8   		orq	%rcx, %rax
+ 17846 10dc8 410FB6CC 		movzbl	%r12b, %ecx
+ 17847 10dcc 48C1E008 		salq	$8, %rax
+ 17848 10dd0 4809C8   		orq	%rcx, %rax
+ 17849 10dd3 410FB6CB 		movzbl	%r11b, %ecx
+ 17850 10dd7 48C1E008 		salq	$8, %rax
+ 17851 10ddb 4809C8   		orq	%rcx, %rax
+ 17852 10dde 410FB6CA 		movzbl	%r10b, %ecx
+ 17853 10de2 48C1E008 		salq	$8, %rax
+ 17854 10de6 4809C8   		orq	%rcx, %rax
+ 17855 10de9 48899560 		movq	%rdx, -8864(%rbp)
+ 17855      DDFFFF
+ 17856 10df0 48898568 		movq	%rax, -8856(%rbp)
+ 17856      DDFFFF
+ 17857 10df7 660F6F85 		movdqa	-8864(%rbp), %xmm0
+ 17857      60DDFFFF 
+ 17858              	.LBE2199:
+ 17859              	.LBE2198:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 17860              		.loc 2 862 0
+ 17861 10dff F30F7F85 		movdqu	%xmm0, -2208(%rbp)
+ 17861      60F7FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 17862              		.loc 2 866 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 553
+
+
+ 17863 10e07 C7853CF7 		movl	$0, -2244(%rbp)
+ 17863      FFFF0000 
+ 17863      0000
+ 17864 10e11 E9860200 		jmp	.L420
+ 17864      00
+ 17865              	.L429:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 17866              		.loc 2 868 0
+ 17867 10e16 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 17867      00000000 
+ 17868 10e1e F30F7F85 		movdqu	%xmm0, -2096(%rbp)
+ 17868      D0F7FFFF 
+ 17869 10e26 F30F6F85 		movdqu	-2208(%rbp), %xmm0
+ 17869      60F7FFFF 
+ 17870 10e2e F30F7F85 		movdqu	%xmm0, -2112(%rbp)
+ 17870      C0F7FFFF 
+ 17871              	.LBB2200:
+ 17872              	.LBB2201:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 17873              		.loc 2 380 0
+ 17874 10e36 F30F6F85 		movdqu	-2096(%rbp), %xmm0
+ 17874      D0F7FFFF 
+ 17875 10e3e F30F7F85 		movdqu	%xmm0, -6624(%rbp)
+ 17875      20E6FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 17876              		.loc 2 381 0
+ 17877 10e46 F30F6F85 		movdqu	-2112(%rbp), %xmm0
+ 17877      C0F7FFFF 
+ 17878 10e4e F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 17878      10E6FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 17879              		.loc 2 383 0
+ 17880 10e56 C785ECF7 		movl	$0, -2068(%rbp)
+ 17880      FFFF0000 
+ 17880      0000
+ 17881 10e60 EB5C     		jmp	.L421
+ 17882              	.L424:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 17883              		.loc 2 385 0
+ 17884 10e62 8B85ECF7 		movl	-2068(%rbp), %eax
+ 17884      FFFF
+ 17885 10e68 89C0     		mov	%eax, %eax
+ 17886 10e6a 0FB68405 		movzbl	-6640(%rbp,%rax), %eax
+ 17886      10E6FFFF 
+ 17887 10e72 84C0     		testb	%al, %al
+ 17888 10e74 7912     		jns	.L422
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 17889              		.loc 2 386 0
+ 17890 10e76 8B85ECF7 		movl	-2068(%rbp), %eax
+ 17890      FFFF
+ 17891 10e7c 89C0     		mov	%eax, %eax
+ 17892 10e7e C6840530 		movb	$0, -6608(%rbp,%rax)
+ 17892      E6FFFF00 
+ 17893 10e86 EB2F     		jmp	.L423
+ 17894              	.L422:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 17895              		.loc 2 388 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 554
+
+
+ 17896 10e88 8B8DECF7 		movl	-2068(%rbp), %ecx
+ 17896      FFFF
+ 17897 10e8e 8B85ECF7 		movl	-2068(%rbp), %eax
+ 17897      FFFF
+ 17898 10e94 89C0     		mov	%eax, %eax
+ 17899 10e96 0FB68405 		movzbl	-6640(%rbp,%rax), %eax
+ 17899      10E6FFFF 
+ 17900 10e9e 0FB6C0   		movzbl	%al, %eax
+ 17901 10ea1 83E00F   		andl	$15, %eax
+ 17902 10ea4 4898     		cltq
+ 17903 10ea6 0FB69405 		movzbl	-6624(%rbp,%rax), %edx
+ 17903      20E6FFFF 
+ 17904 10eae 89C8     		mov	%ecx, %eax
+ 17905 10eb0 88940530 		movb	%dl, -6608(%rbp,%rax)
+ 17905      E6FFFF
+ 17906              	.L423:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 17907              		.loc 2 383 0
+ 17908 10eb7 8385ECF7 		addl	$1, -2068(%rbp)
+ 17908      FFFF01
+ 17909              	.L421:
+ 17910 10ebe 83BDECF7 		cmpl	$15, -2068(%rbp)
+ 17910      FFFF0F
+ 17911 10ec5 769B     		jbe	.L424
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 17912              		.loc 2 391 0
+ 17913 10ec7 F30F6F85 		movdqu	-6608(%rbp), %xmm0
+ 17913      30E6FFFF 
+ 17914              	.LBE2201:
+ 17915              	.LBE2200:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 17916              		.loc 2 868 0
+ 17917 10ecf F30F7F85 		movdqu	%xmm0, -2224(%rbp)
+ 17917      50F7FFFF 
+ 17918 10ed7 F30F6F85 		movdqu	-2192(%rbp), %xmm0
+ 17918      70F7FFFF 
+ 17919 10edf F30F7F85 		movdqu	%xmm0, -2048(%rbp)
+ 17919      00F8FFFF 
+ 17920 10ee7 F30F6F85 		movdqu	-2224(%rbp), %xmm0
+ 17920      50F7FFFF 
+ 17921 10eef F30F7F85 		movdqu	%xmm0, -2064(%rbp)
+ 17921      F0F7FFFF 
+ 17922              	.LBB2202:
+ 17923              	.LBB2203:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 17924              		.loc 2 234 0
+ 17925 10ef7 F30F6F85 		movdqu	-2064(%rbp), %xmm0
+ 17925      F0F7FFFF 
+ 17926 10eff F30F6F8D 		movdqu	-2048(%rbp), %xmm1
+ 17926      00F8FFFF 
+ 17927 10f07 660FEBC1 		por	%xmm1, %xmm0
+ 17928              	.LBE2203:
+ 17929              	.LBE2202:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 17930              		.loc 2 870 0
+ 17931 10f0b F30F7F85 		movdqu	%xmm0, -2224(%rbp)
+ 17931      50F7FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 555
+
+
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 17932              		.loc 2 872 0
+ 17933 10f13 8B853CF7 		mov	-2244(%rbp), %eax
+ 17933      FFFF
+ 17934 10f19 48C1E004 		salq	$4, %rax
+ 17935 10f1d 48038518 		addq	-2280(%rbp), %rax
+ 17935      F7FFFF
+ 17936 10f24 660F6F00 		movdqa	(%rax), %xmm0
+ 17937 10f28 F30F7F85 		movdqu	%xmm0, -2016(%rbp)
+ 17937      20F8FFFF 
+ 17938 10f30 F30F6F85 		movdqu	-2224(%rbp), %xmm0
+ 17938      50F7FFFF 
+ 17939 10f38 F30F7F85 		movdqu	%xmm0, -2032(%rbp)
+ 17939      10F8FFFF 
+ 17940              	.LBB2204:
+ 17941              	.LBB2205:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 17942              		.loc 2 380 0
+ 17943 10f40 F30F6F85 		movdqu	-2016(%rbp), %xmm0
+ 17943      20F8FFFF 
+ 17944 10f48 F30F7F85 		movdqu	%xmm0, -6576(%rbp)
+ 17944      50E6FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 17945              		.loc 2 381 0
+ 17946 10f50 F30F6F85 		movdqu	-2032(%rbp), %xmm0
+ 17946      10F8FFFF 
+ 17947 10f58 F30F7F85 		movdqu	%xmm0, -6592(%rbp)
+ 17947      40E6FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 17948              		.loc 2 383 0
+ 17949 10f60 C7853CF8 		movl	$0, -1988(%rbp)
+ 17949      FFFF0000 
+ 17949      0000
+ 17950 10f6a EB5C     		jmp	.L425
+ 17951              	.L428:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 17952              		.loc 2 385 0
+ 17953 10f6c 8B853CF8 		movl	-1988(%rbp), %eax
+ 17953      FFFF
+ 17954 10f72 89C0     		mov	%eax, %eax
+ 17955 10f74 0FB68405 		movzbl	-6592(%rbp,%rax), %eax
+ 17955      40E6FFFF 
+ 17956 10f7c 84C0     		testb	%al, %al
+ 17957 10f7e 7912     		jns	.L426
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 17958              		.loc 2 386 0
+ 17959 10f80 8B853CF8 		movl	-1988(%rbp), %eax
+ 17959      FFFF
+ 17960 10f86 89C0     		mov	%eax, %eax
+ 17961 10f88 C6840560 		movb	$0, -6560(%rbp,%rax)
+ 17961      E6FFFF00 
+ 17962 10f90 EB2F     		jmp	.L427
+ 17963              	.L426:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 17964              		.loc 2 388 0
+ 17965 10f92 8B8D3CF8 		movl	-1988(%rbp), %ecx
+ 17965      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 556
+
+
+ 17966 10f98 8B853CF8 		movl	-1988(%rbp), %eax
+ 17966      FFFF
+ 17967 10f9e 89C0     		mov	%eax, %eax
+ 17968 10fa0 0FB68405 		movzbl	-6592(%rbp,%rax), %eax
+ 17968      40E6FFFF 
+ 17969 10fa8 0FB6C0   		movzbl	%al, %eax
+ 17970 10fab 83E00F   		andl	$15, %eax
+ 17971 10fae 4898     		cltq
+ 17972 10fb0 0FB69405 		movzbl	-6576(%rbp,%rax), %edx
+ 17972      50E6FFFF 
+ 17973 10fb8 89C8     		mov	%ecx, %eax
+ 17974 10fba 88940560 		movb	%dl, -6560(%rbp,%rax)
+ 17974      E6FFFF
+ 17975              	.L427:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 17976              		.loc 2 383 0
+ 17977 10fc1 83853CF8 		addl	$1, -1988(%rbp)
+ 17977      FFFF01
+ 17978              	.L425:
+ 17979 10fc8 83BD3CF8 		cmpl	$15, -1988(%rbp)
+ 17979      FFFF0F
+ 17980 10fcf 769B     		jbe	.L428
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 17981              		.loc 2 391 0
+ 17982 10fd1 F30F6F85 		movdqu	-6560(%rbp), %xmm0
+ 17982      60E6FFFF 
+ 17983              	.LBE2205:
+ 17984              	.LBE2204:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 17985              		.loc 2 872 0
+ 17986 10fd9 F30F7F85 		movdqu	%xmm0, -2224(%rbp)
+ 17986      50F7FFFF 
+ 17987 10fe1 F30F6F85 		movdqu	-2240(%rbp), %xmm0
+ 17987      40F7FFFF 
+ 17988 10fe9 F30F7F85 		movdqu	%xmm0, -1968(%rbp)
+ 17988      50F8FFFF 
+ 17989 10ff1 F30F6F85 		movdqu	-2224(%rbp), %xmm0
+ 17989      50F7FFFF 
+ 17990 10ff9 F30F7F85 		movdqu	%xmm0, -1984(%rbp)
+ 17990      40F8FFFF 
+ 17991              	.LBB2206:
+ 17992              	.LBB2207:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 17993              		.loc 2 234 0
+ 17994 11001 F30F6F85 		movdqu	-1984(%rbp), %xmm0
+ 17994      40F8FFFF 
+ 17995 11009 F30F6F8D 		movdqu	-1968(%rbp), %xmm1
+ 17995      50F8FFFF 
+ 17996 11011 660FEBC1 		por	%xmm1, %xmm0
+ 17997              	.LBE2207:
+ 17998              	.LBE2206:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 17999              		.loc 2 874 0
+ 18000 11015 F30F7F85 		movdqu	%xmm0, -2240(%rbp)
+ 18000      40F7FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 18001              		.loc 2 876 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 557
+
+
+ 18002 1101d 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 18002      00000000 
+ 18003 11025 F30F6F8D 		movdqu	-2208(%rbp), %xmm1
+ 18003      60F7FFFF 
+ 18004 1102d F30F7F8D 		movdqu	%xmm1, -1936(%rbp)
+ 18004      70F8FFFF 
+ 18005 11035 F30F7F85 		movdqu	%xmm0, -1952(%rbp)
+ 18005      60F8FFFF 
+ 18006              	.LBB2208:
+ 18007              	.LBB2209:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 18008              		.loc 2 290 0
+ 18009 1103d F30F6F8D 		movdqu	-1952(%rbp), %xmm1
+ 18009      60F8FFFF 
+ 18010 11045 F30F6F85 		movdqu	-1936(%rbp), %xmm0
+ 18010      70F8FFFF 
+ 18011 1104d 660FF8C1 		psubb	%xmm1, %xmm0
+ 18012              	.LBE2209:
+ 18013              	.LBE2208:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 18014              		.loc 2 876 0
+ 18015 11051 F30F7F85 		movdqu	%xmm0, -2208(%rbp)
+ 18015      60F7FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 18016              		.loc 2 878 0
+ 18017 11059 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 18017      00000000 
+ 18018 11061 F30F6F8D 		movdqu	-2208(%rbp), %xmm1
+ 18018      60F7FFFF 
+ 18019 11069 F30F7F8D 		movdqu	%xmm1, -1904(%rbp)
+ 18019      90F8FFFF 
+ 18020 11071 F30F7F85 		movdqu	%xmm0, -1920(%rbp)
+ 18020      80F8FFFF 
+ 18021              	.LBB2210:
+ 18022              	.LBB2211:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 18023              		.loc 2 206 0
+ 18024 11079 F30F6F85 		movdqu	-1920(%rbp), %xmm0
+ 18024      80F8FFFF 
+ 18025 11081 F30F6F8D 		movdqu	-1904(%rbp), %xmm1
+ 18025      90F8FFFF 
+ 18026 11089 660FDBC1 		pand	%xmm1, %xmm0
+ 18027              	.LBE2211:
+ 18028              	.LBE2210:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 18029              		.loc 2 878 0
+ 18030 1108d F30F7F85 		movdqu	%xmm0, -2208(%rbp)
+ 18030      60F7FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 18031              		.loc 2 866 0
+ 18032 11095 83853CF7 		addl	$1, -2244(%rbp)
+ 18032      FFFF01
+ 18033              	.L420:
+ 18034 1109c 83BD3CF7 		cmpl	$15, -2244(%rbp)
+ 18034      FFFF0F
+ 18035 110a3 0F866DFD 		jbe	.L429
+ 18035      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 558
+
+
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 18036              		.loc 2 882 0
+ 18037 110a9 F30F6F85 		movdqu	-2240(%rbp), %xmm0
+ 18037      40F7FFFF 
+ 18038              	.LBE2195:
+ 18039              	.LBE2194:
+ 18040              	.LBE2193:
+ 18041              	.LBE2192:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 18042              		.loc 2 1682 0
+ 18043 110b1 660F7F85 		movdqa	%xmm0, -8464(%rbp)
+ 18043      F0DEFFFF 
+ 18044              	.LBB2212:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 18045              		.loc 2 1683 0
+ 18046 110b9 660F6F85 		movdqa	-8464(%rbp), %xmm0
+ 18046      F0DEFFFF 
+ 18047 110c1 F30F7F85 		movdqu	%xmm0, -6672(%rbp)
+ 18047      F0E5FFFF 
+ 18048 110c9 E8000000 		call	KDbgWriterGet at PLT
+ 18048      00
+ 18049 110ce 4885C0   		testq	%rax, %rax
+ 18050 110d1 7479     		je	.L431
+ 18051 110d3 BF010000 		movl	$1, %edi
+ 18051      00
+ 18052 110d8 E8000000 		call	KDbgCondToFlag at PLT
+ 18052      00
+ 18053 110dd 4889C6   		movq	%rax, %rsi
+ 18054 110e0 BF100000 		movl	$16, %edi
+ 18054      00
+ 18055 110e5 E8000000 		call	KDbgTestModConds at PLT
+ 18055      00
+ 18056 110ea 84C0     		testb	%al, %al
+ 18057 110ec 745E     		je	.L431
+ 18058 110ee 8B85FCE5 		movl	-6660(%rbp), %eax
+ 18058      FFFF
+ 18059 110f4 89C7     		movl	%eax, %edi
+ 18060 110f6 E805EFFE 		call	bswap_32
+ 18060      FF
+ 18061 110fb 4189C5   		movl	%eax, %r13d
+ 18062 110fe 8B85F8E5 		movl	-6664(%rbp), %eax
+ 18062      FFFF
+ 18063 11104 89C7     		movl	%eax, %edi
+ 18064 11106 E8F5EEFE 		call	bswap_32
+ 18064      FF
+ 18065 1110b 4189C4   		movl	%eax, %r12d
+ 18066 1110e 8B85F4E5 		movl	-6668(%rbp), %eax
+ 18066      FFFF
+ 18067 11114 89C7     		movl	%eax, %edi
+ 18068 11116 E8E5EEFE 		call	bswap_32
+ 18068      FF
+ 18069 1111b 89C3     		movl	%eax, %ebx
+ 18070 1111d 8B85F0E5 		movl	-6672(%rbp), %eax
+ 18070      FFFF
+ 18071 11123 89C7     		movl	%eax, %edi
+ 18072 11125 E8D6EEFE 		call	bswap_32
+ 18072      FF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 559
+
+
+ 18073 1112a 4589E9   		movl	%r13d, %r9d
+ 18074 1112d 4589E0   		movl	%r12d, %r8d
+ 18075 11130 89D9     		movl	%ebx, %ecx
+ 18076 11132 89C2     		movl	%eax, %edx
+ 18077 11134 488D3500 		leaq	.LC0(%rip), %rsi
+ 18077      000000
+ 18078 1113b 488D3D00 		leaq	.LC1(%rip), %rdi
+ 18078      000000
+ 18079 11142 B8000000 		movl	$0, %eax
+ 18079      00
+ 18080 11147 E8000000 		call	KDbgMsg at PLT
+ 18080      00
+ 18081              	.L431:
+ 18082 1114c 660F6F85 		movdqa	-8464(%rbp), %xmm0
+ 18082      F0DEFFFF 
+ 18083 11154 F30F7F85 		movdqu	%xmm0, -1888(%rbp)
+ 18083      A0F8FFFF 
+ 18084              	.LBE2212:
+ 18085              	.LBB2213:
+ 18086              	.LBB2214:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 18087              		.loc 2 667 0
+ 18088 1115c 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 18088      00000000 
+ 18089 11164 F30F6F8D 		movdqu	-1888(%rbp), %xmm1
+ 18089      A0F8FFFF 
+ 18090 1116c F30F7F8D 		movdqu	%xmm1, -1856(%rbp)
+ 18090      C0F8FFFF 
+ 18091 11174 F30F7F85 		movdqu	%xmm0, -1872(%rbp)
+ 18091      B0F8FFFF 
+ 18092              	.LBB2215:
+ 18093              	.LBB2216:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 18094              		.loc 2 380 0
+ 18095 1117c F30F6F85 		movdqu	-1856(%rbp), %xmm0
+ 18095      C0F8FFFF 
+ 18096 11184 F30F7F85 		movdqu	%xmm0, -6528(%rbp)
+ 18096      80E6FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 18097              		.loc 2 381 0
+ 18098 1118c F30F6F85 		movdqu	-1872(%rbp), %xmm0
+ 18098      B0F8FFFF 
+ 18099 11194 F30F7F85 		movdqu	%xmm0, -6544(%rbp)
+ 18099      70E6FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 18100              		.loc 2 383 0
+ 18101 1119c C785DCF8 		movl	$0, -1828(%rbp)
+ 18101      FFFF0000 
+ 18101      0000
+ 18102 111a6 EB5C     		jmp	.L432
+ 18103              	.L435:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 18104              		.loc 2 385 0
+ 18105 111a8 8B85DCF8 		movl	-1828(%rbp), %eax
+ 18105      FFFF
+ 18106 111ae 89C0     		mov	%eax, %eax
+ 18107 111b0 0FB68405 		movzbl	-6544(%rbp,%rax), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 560
+
+
+ 18107      70E6FFFF 
+ 18108 111b8 84C0     		testb	%al, %al
+ 18109 111ba 7912     		jns	.L433
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 18110              		.loc 2 386 0
+ 18111 111bc 8B85DCF8 		movl	-1828(%rbp), %eax
+ 18111      FFFF
+ 18112 111c2 89C0     		mov	%eax, %eax
+ 18113 111c4 C6840590 		movb	$0, -6512(%rbp,%rax)
+ 18113      E6FFFF00 
+ 18114 111cc EB2F     		jmp	.L434
+ 18115              	.L433:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 18116              		.loc 2 388 0
+ 18117 111ce 8B8DDCF8 		movl	-1828(%rbp), %ecx
+ 18117      FFFF
+ 18118 111d4 8B85DCF8 		movl	-1828(%rbp), %eax
+ 18118      FFFF
+ 18119 111da 89C0     		mov	%eax, %eax
+ 18120 111dc 0FB68405 		movzbl	-6544(%rbp,%rax), %eax
+ 18120      70E6FFFF 
+ 18121 111e4 0FB6C0   		movzbl	%al, %eax
+ 18122 111e7 83E00F   		andl	$15, %eax
+ 18123 111ea 4898     		cltq
+ 18124 111ec 0FB69405 		movzbl	-6528(%rbp,%rax), %edx
+ 18124      80E6FFFF 
+ 18125 111f4 89C8     		mov	%ecx, %eax
+ 18126 111f6 88940590 		movb	%dl, -6512(%rbp,%rax)
+ 18126      E6FFFF
+ 18127              	.L434:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 18128              		.loc 2 383 0
+ 18129 111fd 8385DCF8 		addl	$1, -1828(%rbp)
+ 18129      FFFF01
+ 18130              	.L432:
+ 18131 11204 83BDDCF8 		cmpl	$15, -1828(%rbp)
+ 18131      FFFF0F
+ 18132 1120b 769B     		jbe	.L435
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 18133              		.loc 2 391 0
+ 18134 1120d F30F6F85 		movdqu	-6512(%rbp), %xmm0
+ 18134      90E6FFFF 
+ 18135              	.LBE2216:
+ 18136              	.LBE2215:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 18137              		.loc 2 667 0
+ 18138 11215 F30F7F85 		movdqu	%xmm0, -1888(%rbp)
+ 18138      A0F8FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 18139              		.loc 2 668 0
+ 18140 1121d F30F6F85 		movdqu	-1888(%rbp), %xmm0
+ 18140      A0F8FFFF 
+ 18141              	.LBE2214:
+ 18142              	.LBE2213:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 18143              		.loc 2 1684 0
+ 18144 11225 660F7F85 		movdqa	%xmm0, -8464(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 561
+
+
+ 18144      F0DEFFFF 
+ 18145              	.LBB2217:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 18146              		.loc 2 1685 0
+ 18147 1122d 660F6F85 		movdqa	-8464(%rbp), %xmm0
+ 18147      F0DEFFFF 
+ 18148 11235 F30F7F85 		movdqu	%xmm0, -6688(%rbp)
+ 18148      E0E5FFFF 
+ 18149 1123d E8000000 		call	KDbgWriterGet at PLT
+ 18149      00
+ 18150 11242 4885C0   		testq	%rax, %rax
+ 18151 11245 7479     		je	.L437
+ 18152 11247 BF010000 		movl	$1, %edi
+ 18152      00
+ 18153 1124c E8000000 		call	KDbgCondToFlag at PLT
+ 18153      00
+ 18154 11251 4889C6   		movq	%rax, %rsi
+ 18155 11254 BF100000 		movl	$16, %edi
+ 18155      00
+ 18156 11259 E8000000 		call	KDbgTestModConds at PLT
+ 18156      00
+ 18157 1125e 84C0     		testb	%al, %al
+ 18158 11260 745E     		je	.L437
+ 18159 11262 8B85ECE5 		movl	-6676(%rbp), %eax
+ 18159      FFFF
+ 18160 11268 89C7     		movl	%eax, %edi
+ 18161 1126a E891EDFE 		call	bswap_32
+ 18161      FF
+ 18162 1126f 4189C5   		movl	%eax, %r13d
+ 18163 11272 8B85E8E5 		movl	-6680(%rbp), %eax
+ 18163      FFFF
+ 18164 11278 89C7     		movl	%eax, %edi
+ 18165 1127a E881EDFE 		call	bswap_32
+ 18165      FF
+ 18166 1127f 4189C4   		movl	%eax, %r12d
+ 18167 11282 8B85E4E5 		movl	-6684(%rbp), %eax
+ 18167      FFFF
+ 18168 11288 89C7     		movl	%eax, %edi
+ 18169 1128a E871EDFE 		call	bswap_32
+ 18169      FF
+ 18170 1128f 89C3     		movl	%eax, %ebx
+ 18171 11291 8B85E0E5 		movl	-6688(%rbp), %eax
+ 18171      FFFF
+ 18172 11297 89C7     		movl	%eax, %edi
+ 18173 11299 E862EDFE 		call	bswap_32
+ 18173      FF
+ 18174 1129e 4589E9   		movl	%r13d, %r9d
+ 18175 112a1 4589E0   		movl	%r12d, %r8d
+ 18176 112a4 89D9     		movl	%ebx, %ecx
+ 18177 112a6 89C2     		movl	%eax, %edx
+ 18178 112a8 488D3500 		leaq	.LC2(%rip), %rsi
+ 18178      000000
+ 18179 112af 488D3D00 		leaq	.LC1(%rip), %rdi
+ 18179      000000
+ 18180 112b6 B8000000 		movl	$0, %eax
+ 18180      00
+ 18181 112bb E8000000 		call	KDbgMsg at PLT
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 562
+
+
+ 18181      00
+ 18182              	.L437:
+ 18183 112c0 660F6F85 		movdqa	-8464(%rbp), %xmm0
+ 18183      F0DEFFFF 
+ 18184 112c8 F30F7F85 		movdqu	%xmm0, -1808(%rbp)
+ 18184      F0F8FFFF 
+ 18185 112d0 660F6F85 		movdqa	-8448(%rbp), %xmm0
+ 18185      00DFFFFF 
+ 18186 112d8 F30F7F85 		movdqu	%xmm0, -1824(%rbp)
+ 18186      E0F8FFFF 
+ 18187              	.LBE2217:
+ 18188              	.LBB2218:
+ 18189              	.LBB2219:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 18190              		.loc 2 178 0
+ 18191 112e0 F30F6F85 		movdqu	-1824(%rbp), %xmm0
+ 18191      E0F8FFFF 
+ 18192 112e8 F30F6F8D 		movdqu	-1808(%rbp), %xmm1
+ 18192      F0F8FFFF 
+ 18193 112f0 660FEFC1 		pxor	%xmm1, %xmm0
+ 18194              	.LBE2219:
+ 18195              	.LBE2218:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 18196              		.loc 2 1686 0
+ 18197 112f4 660F7F85 		movdqa	%xmm0, -8464(%rbp)
+ 18197      F0DEFFFF 
+ 18198              	.LBB2220:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 18199              		.loc 2 1687 0
+ 18200 112fc 660F6F85 		movdqa	-8464(%rbp), %xmm0
+ 18200      F0DEFFFF 
+ 18201 11304 F30F7F85 		movdqu	%xmm0, -6704(%rbp)
+ 18201      D0E5FFFF 
+ 18202 1130c E8000000 		call	KDbgWriterGet at PLT
+ 18202      00
+ 18203 11311 4885C0   		testq	%rax, %rax
+ 18204 11314 7479     		je	.L439
+ 18205 11316 BF010000 		movl	$1, %edi
+ 18205      00
+ 18206 1131b E8000000 		call	KDbgCondToFlag at PLT
+ 18206      00
+ 18207 11320 4889C6   		movq	%rax, %rsi
+ 18208 11323 BF100000 		movl	$16, %edi
+ 18208      00
+ 18209 11328 E8000000 		call	KDbgTestModConds at PLT
+ 18209      00
+ 18210 1132d 84C0     		testb	%al, %al
+ 18211 1132f 745E     		je	.L439
+ 18212 11331 8B85DCE5 		movl	-6692(%rbp), %eax
+ 18212      FFFF
+ 18213 11337 89C7     		movl	%eax, %edi
+ 18214 11339 E8C2ECFE 		call	bswap_32
+ 18214      FF
+ 18215 1133e 4189C5   		movl	%eax, %r13d
+ 18216 11341 8B85D8E5 		movl	-6696(%rbp), %eax
+ 18216      FFFF
+ 18217 11347 89C7     		movl	%eax, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 563
+
+
+ 18218 11349 E8B2ECFE 		call	bswap_32
+ 18218      FF
+ 18219 1134e 4189C4   		movl	%eax, %r12d
+ 18220 11351 8B85D4E5 		movl	-6700(%rbp), %eax
+ 18220      FFFF
+ 18221 11357 89C7     		movl	%eax, %edi
+ 18222 11359 E8A2ECFE 		call	bswap_32
+ 18222      FF
+ 18223 1135e 89C3     		movl	%eax, %ebx
+ 18224 11360 8B85D0E5 		movl	-6704(%rbp), %eax
+ 18224      FFFF
+ 18225 11366 89C7     		movl	%eax, %edi
+ 18226 11368 E893ECFE 		call	bswap_32
+ 18226      FF
+ 18227 1136d 4589E9   		movl	%r13d, %r9d
+ 18228 11370 4589E0   		movl	%r12d, %r8d
+ 18229 11373 89D9     		movl	%ebx, %ecx
+ 18230 11375 89C2     		movl	%eax, %edx
+ 18231 11377 488D3500 		leaq	.LC3(%rip), %rsi
+ 18231      000000
+ 18232 1137e 488D3D00 		leaq	.LC1(%rip), %rdi
+ 18232      000000
+ 18233 11385 B8000000 		movl	$0, %eax
+ 18233      00
+ 18234 1138a E8000000 		call	KDbgMsg at PLT
+ 18234      00
+ 18235              	.L439:
+ 18236 1138f 660F6F85 		movdqa	-8464(%rbp), %xmm0
+ 18236      F0DEFFFF 
+ 18237 11397 F30F7F85 		movdqu	%xmm0, -1792(%rbp)
+ 18237      00F9FFFF 
+ 18238              	.LBE2220:
+ 18239              	.LBB2221:
+ 18240              	.LBB2222:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 18241              		.loc 2 1357 0
+ 18242 1139f F30F6F85 		movdqu	-1792(%rbp), %xmm0
+ 18242      00F9FFFF 
+ 18243 113a7 F30F7F85 		movdqu	%xmm0, -6496(%rbp)
+ 18243      A0E6FFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 18244              		.loc 2 1358 0
+ 18245 113af 8B85ACE6 		movl	-6484(%rbp), %eax
+ 18245      FFFF
+ 18246 113b5 8985A8E6 		movl	%eax, -6488(%rbp)
+ 18246      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 18247              		.loc 2 1359 0
+ 18248 113bb 8B85ACE6 		movl	-6484(%rbp), %eax
+ 18248      FFFF
+ 18249 113c1 8985A4E6 		movl	%eax, -6492(%rbp)
+ 18249      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 18250              		.loc 2 1360 0
+ 18251 113c7 8B85ACE6 		movl	-6484(%rbp), %eax
+ 18251      FFFF
+ 18252 113cd 8985A0E6 		movl	%eax, -6496(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 564
+
+
+ 18252      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 18253              		.loc 2 1361 0
+ 18254 113d3 F30F6F85 		movdqu	-6496(%rbp), %xmm0
+ 18254      A0E6FFFF 
+ 18255              	.LBE2222:
+ 18256              	.LBE2221:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 18257              		.loc 2 1688 0
+ 18258 113db 660F7F85 		movdqa	%xmm0, -8464(%rbp)
+ 18258      F0DEFFFF 
+ 18259              	.LBB2223:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 18260              		.loc 2 1689 0
+ 18261 113e3 660F6F85 		movdqa	-8464(%rbp), %xmm0
+ 18261      F0DEFFFF 
+ 18262 113eb F30F7F85 		movdqu	%xmm0, -6720(%rbp)
+ 18262      C0E5FFFF 
+ 18263 113f3 E8000000 		call	KDbgWriterGet at PLT
+ 18263      00
+ 18264 113f8 4885C0   		testq	%rax, %rax
+ 18265 113fb 7479     		je	.L441
+ 18266 113fd BF010000 		movl	$1, %edi
+ 18266      00
+ 18267 11402 E8000000 		call	KDbgCondToFlag at PLT
+ 18267      00
+ 18268 11407 4889C6   		movq	%rax, %rsi
+ 18269 1140a BF100000 		movl	$16, %edi
+ 18269      00
+ 18270 1140f E8000000 		call	KDbgTestModConds at PLT
+ 18270      00
+ 18271 11414 84C0     		testb	%al, %al
+ 18272 11416 745E     		je	.L441
+ 18273 11418 8B85CCE5 		movl	-6708(%rbp), %eax
+ 18273      FFFF
+ 18274 1141e 89C7     		movl	%eax, %edi
+ 18275 11420 E8DBEBFE 		call	bswap_32
+ 18275      FF
+ 18276 11425 4189C5   		movl	%eax, %r13d
+ 18277 11428 8B85C8E5 		movl	-6712(%rbp), %eax
+ 18277      FFFF
+ 18278 1142e 89C7     		movl	%eax, %edi
+ 18279 11430 E8CBEBFE 		call	bswap_32
+ 18279      FF
+ 18280 11435 4189C4   		movl	%eax, %r12d
+ 18281 11438 8B85C4E5 		movl	-6716(%rbp), %eax
+ 18281      FFFF
+ 18282 1143e 89C7     		movl	%eax, %edi
+ 18283 11440 E8BBEBFE 		call	bswap_32
+ 18283      FF
+ 18284 11445 89C3     		movl	%eax, %ebx
+ 18285 11447 8B85C0E5 		movl	-6720(%rbp), %eax
+ 18285      FFFF
+ 18286 1144d 89C7     		movl	%eax, %edi
+ 18287 1144f E8ACEBFE 		call	bswap_32
+ 18287      FF
+ 18288 11454 4589E9   		movl	%r13d, %r9d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 565
+
+
+ 18289 11457 4589E0   		movl	%r12d, %r8d
+ 18290 1145a 89D9     		movl	%ebx, %ecx
+ 18291 1145c 89C2     		movl	%eax, %edx
+ 18292 1145e 488D3500 		leaq	.LC4(%rip), %rsi
+ 18292      000000
+ 18293 11465 488D3D00 		leaq	.LC1(%rip), %rdi
+ 18293      000000
+ 18294 1146c B8000000 		movl	$0, %eax
+ 18294      00
+ 18295 11471 E8000000 		call	KDbgMsg at PLT
+ 18295      00
+ 18296              	.L441:
+ 18297              	.LBE2223:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 18298              		.loc 2 1690 0
+ 18299 11476 660F6F85 		movdqa	-8464(%rbp), %xmm0
+ 18299      F0DEFFFF 
+ 18300              	.LBE2189:
+ 18301              	.LBE2188:
+1934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(10,0x10);   /* k40 : k41 : k42 : k43 */
+ 18302              		.loc 2 1934 0
+ 18303 1147e F30F7F85 		movdqu	%xmm0, -5664(%rbp)
+ 18303      E0E9FFFF 
+ 18304 11486 F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 18304      C0E9FFFF 
+ 18305 1148e F30F7F85 		movdqu	%xmm0, -1776(%rbp)
+ 18305      10F9FFFF 
+ 18306              	.LBB2224:
+ 18307              	.LBB2225:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 18308              		.loc 2 1565 0
+ 18309 11496 F30F6F85 		movdqu	-1776(%rbp), %xmm0
+ 18309      10F9FFFF 
+ 18310 1149e 660F7F85 		movdqa	%xmm0, -8416(%rbp)
+ 18310      20DFFFFF 
+ 18311 114a6 660F6F85 		movdqa	-8416(%rbp), %xmm0
+ 18311      20DFFFFF 
+ 18312 114ae F30F7F85 		movdqu	%xmm0, -1760(%rbp)
+ 18312      20F9FFFF 
+ 18313              	.LBB2226:
+ 18314              	.LBB2227:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 18315              		.loc 2 1282 0
+ 18316 114b6 F30F6F85 		movdqu	-1760(%rbp), %xmm0
+ 18316      20F9FFFF 
+ 18317 114be F30F7F85 		movdqu	%xmm0, -6480(%rbp)
+ 18317      B0E6FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 18318              		.loc 2 1283 0
+ 18319 114c6 8B85B8E6 		movl	-6472(%rbp), %eax
+ 18319      FFFF
+ 18320 114cc 8985BCE6 		movl	%eax, -6468(%rbp)
+ 18320      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 18321              		.loc 2 1284 0
+ 18322 114d2 8B85B4E6 		movl	-6476(%rbp), %eax
+ 18322      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 566
+
+
+ 18323 114d8 8985B8E6 		movl	%eax, -6472(%rbp)
+ 18323      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 18324              		.loc 2 1285 0
+ 18325 114de 8B85B0E6 		movl	-6480(%rbp), %eax
+ 18325      FFFF
+ 18326 114e4 8985B4E6 		movl	%eax, -6476(%rbp)
+ 18326      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 18327              		.loc 2 1286 0
+ 18328 114ea C785B0E6 		movl	$0, -6480(%rbp)
+ 18328      FFFF0000 
+ 18328      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 18329              		.loc 2 1287 0
+ 18330 114f4 F30F6F85 		movdqu	-6480(%rbp), %xmm0
+ 18330      B0E6FFFF 
+ 18331              	.LBE2227:
+ 18332              	.LBE2226:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 18333              		.loc 2 1567 0
+ 18334 114fc 660F7F85 		movdqa	%xmm0, -8416(%rbp)
+ 18334      20DFFFFF 
+ 18335 11504 660F6F85 		movdqa	-8416(%rbp), %xmm0
+ 18335      20DFFFFF 
+ 18336 1150c 660FEF85 		pxor	-1776(%rbp), %xmm0
+ 18336      10F9FFFF 
+ 18337 11514 F30F7F85 		movdqu	%xmm0, -1776(%rbp)
+ 18337      10F9FFFF 
+ 18338 1151c 660F6F85 		movdqa	-8416(%rbp), %xmm0
+ 18338      20DFFFFF 
+ 18339 11524 F30F7F85 		movdqu	%xmm0, -1744(%rbp)
+ 18339      30F9FFFF 
+ 18340              	.LBB2228:
+ 18341              	.LBB2229:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 18342              		.loc 2 1282 0
+ 18343 1152c F30F6F85 		movdqu	-1744(%rbp), %xmm0
+ 18343      30F9FFFF 
+ 18344 11534 F30F7F85 		movdqu	%xmm0, -6464(%rbp)
+ 18344      C0E6FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 18345              		.loc 2 1283 0
+ 18346 1153c 8B85C8E6 		movl	-6456(%rbp), %eax
+ 18346      FFFF
+ 18347 11542 8985CCE6 		movl	%eax, -6452(%rbp)
+ 18347      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 18348              		.loc 2 1284 0
+ 18349 11548 8B85C4E6 		movl	-6460(%rbp), %eax
+ 18349      FFFF
+ 18350 1154e 8985C8E6 		movl	%eax, -6456(%rbp)
+ 18350      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 18351              		.loc 2 1285 0
+ 18352 11554 8B85C0E6 		movl	-6464(%rbp), %eax
+ 18352      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 567
+
+
+ 18353 1155a 8985C4E6 		movl	%eax, -6460(%rbp)
+ 18353      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 18354              		.loc 2 1286 0
+ 18355 11560 C785C0E6 		movl	$0, -6464(%rbp)
+ 18355      FFFF0000 
+ 18355      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 18356              		.loc 2 1287 0
+ 18357 1156a F30F6F85 		movdqu	-6464(%rbp), %xmm0
+ 18357      C0E6FFFF 
+ 18358              	.LBE2229:
+ 18359              	.LBE2228:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 18360              		.loc 2 1568 0
+ 18361 11572 660F7F85 		movdqa	%xmm0, -8416(%rbp)
+ 18361      20DFFFFF 
+ 18362 1157a 660F6F85 		movdqa	-8416(%rbp), %xmm0
+ 18362      20DFFFFF 
+ 18363 11582 660FEF85 		pxor	-1776(%rbp), %xmm0
+ 18363      10F9FFFF 
+ 18364 1158a F30F7F85 		movdqu	%xmm0, -1776(%rbp)
+ 18364      10F9FFFF 
+ 18365 11592 660F6F85 		movdqa	-8416(%rbp), %xmm0
+ 18365      20DFFFFF 
+ 18366 1159a F30F7F85 		movdqu	%xmm0, -1728(%rbp)
+ 18366      40F9FFFF 
+ 18367              	.LBB2230:
+ 18368              	.LBB2231:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 18369              		.loc 2 1282 0
+ 18370 115a2 F30F6F85 		movdqu	-1728(%rbp), %xmm0
+ 18370      40F9FFFF 
+ 18371 115aa F30F7F85 		movdqu	%xmm0, -6448(%rbp)
+ 18371      D0E6FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 18372              		.loc 2 1283 0
+ 18373 115b2 8B85D8E6 		movl	-6440(%rbp), %eax
+ 18373      FFFF
+ 18374 115b8 8985DCE6 		movl	%eax, -6436(%rbp)
+ 18374      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 18375              		.loc 2 1284 0
+ 18376 115be 8B85D4E6 		movl	-6444(%rbp), %eax
+ 18376      FFFF
+ 18377 115c4 8985D8E6 		movl	%eax, -6440(%rbp)
+ 18377      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 18378              		.loc 2 1285 0
+ 18379 115ca 8B85D0E6 		movl	-6448(%rbp), %eax
+ 18379      FFFF
+ 18380 115d0 8985D4E6 		movl	%eax, -6444(%rbp)
+ 18380      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 18381              		.loc 2 1286 0
+ 18382 115d6 C785D0E6 		movl	$0, -6448(%rbp)
+ 18382      FFFF0000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 568
+
+
+ 18382      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 18383              		.loc 2 1287 0
+ 18384 115e0 F30F6F85 		movdqu	-6448(%rbp), %xmm0
+ 18384      D0E6FFFF 
+ 18385              	.LBE2231:
+ 18386              	.LBE2230:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 18387              		.loc 2 1569 0
+ 18388 115e8 660F7F85 		movdqa	%xmm0, -8416(%rbp)
+ 18388      20DFFFFF 
+ 18389 115f0 660F6F85 		movdqa	-8416(%rbp), %xmm0
+ 18389      20DFFFFF 
+ 18390 115f8 660FEF85 		pxor	-1776(%rbp), %xmm0
+ 18390      10F9FFFF 
+ 18391 11600 F30F7F85 		movdqu	%xmm0, -1776(%rbp)
+ 18391      10F9FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 18392              		.loc 2 1571 0
+ 18393 11608 F30F6F85 		movdqu	-1776(%rbp), %xmm0
+ 18393      10F9FFFF 
+ 18394              	.LBE2225:
+ 18395              	.LBE2224:
+1934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(10,0x10);   /* k40 : k41 : k42 : k43 */
+ 18396              		.loc 2 1934 0
+ 18397 11610 F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 18397      C0E9FFFF 
+ 18398 11618 F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 18398      C0E9FFFF 
+ 18399 11620 F30F7F85 		movdqu	%xmm0, -1696(%rbp)
+ 18399      60F9FFFF 
+ 18400 11628 F30F6F85 		movdqu	-5664(%rbp), %xmm0
+ 18400      E0E9FFFF 
+ 18401 11630 F30F7F85 		movdqu	%xmm0, -1712(%rbp)
+ 18401      50F9FFFF 
+ 18402              	.LBB2232:
+ 18403              	.LBB2233:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 18404              		.loc 2 178 0
+ 18405 11638 F30F6F85 		movdqu	-1712(%rbp), %xmm0
+ 18405      50F9FFFF 
+ 18406 11640 F30F6F8D 		movdqu	-1696(%rbp), %xmm1
+ 18406      60F9FFFF 
+ 18407 11648 660FEFC1 		pxor	%xmm1, %xmm0
+ 18408              	.LBE2233:
+ 18409              	.LBE2232:
+1934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(10,0x10);   /* k40 : k41 : k42 : k43 */
+ 18410              		.loc 2 1934 0
+ 18411 1164c F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 18411      C0E9FFFF 
+ 18412 11654 488B85D8 		movq	-8232(%rbp), %rax
+ 18412      DFFFFF
+ 18413 1165b 4805A000 		addq	$160, %rax
+ 18413      0000
+ 18414 11661 F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 18414      C0E9FFFF 
+ 18415 11669 F30F7F00 		movdqu	%xmm0, (%rax)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 569
+
+
+ 18416 1166d F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 18416      C0E9FFFF 
+ 18417 11675 F30F7F85 		movdqu	%xmm0, -1680(%rbp)
+ 18417      70F9FFFF 
+ 18418              	.LBB2234:
+ 18419              	.LBB2235:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 18420              		.loc 2 1656 0
+ 18421 1167d F30F6F85 		movdqu	-1680(%rbp), %xmm0
+ 18421      70F9FFFF 
+ 18422 11685 F30F7F85 		movdqu	%xmm0, -6416(%rbp)
+ 18422      F0E6FFFF 
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 18423              		.loc 2 1657 0
+ 18424 1168d 8B85FCE6 		movl	-6404(%rbp), %eax
+ 18424      FFFF
+ 18425 11693 898588F9 		movl	%eax, -1656(%rbp)
+ 18425      FFFF
+ 18426              	.LBB2236:
+ 18427              	.LBB2237:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 18428              		.loc 2 740 0
+ 18429 11699 8B8588F9 		movl	-1656(%rbp), %eax
+ 18429      FFFF
+ 18430 1169f 8985E0E6 		movl	%eax, -6432(%rbp)
+ 18430      FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 18431              		.loc 2 741 0
+ 18432 116a5 C7858CF9 		movl	$0, -1652(%rbp)
+ 18432      FFFF0000 
+ 18432      0000
+ 18433 116af EB36     		jmp	.L442
+ 18434              	.L443:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 18435              		.loc 2 742 0
+ 18436 116b1 8B8D8CF9 		movl	-1652(%rbp), %ecx
+ 18436      FFFF
+ 18437 116b7 8B858CF9 		movl	-1652(%rbp), %eax
+ 18437      FFFF
+ 18438 116bd 89C0     		mov	%eax, %eax
+ 18439 116bf 0FB68405 		movzbl	-6432(%rbp,%rax), %eax
+ 18439      E0E6FFFF 
+ 18440 116c7 0FB6C0   		movzbl	%al, %eax
+ 18441 116ca 89C2     		mov	%eax, %edx
+ 18442 116cc 488D0500 		leaq	KAESBlockCipherVecRijndaelSBox(%rip), %rax
+ 18442      000000
+ 18443 116d3 0FB61402 		movzbl	(%rdx,%rax), %edx
+ 18444 116d7 89C8     		mov	%ecx, %eax
+ 18445 116d9 889405E0 		movb	%dl, -6432(%rbp,%rax)
+ 18445      E6FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 18446              		.loc 2 741 0
+ 18447 116e0 83858CF9 		addl	$1, -1652(%rbp)
+ 18447      FFFF01
+ 18448              	.L442:
+ 18449 116e7 83BD8CF9 		cmpl	$3, -1652(%rbp)
+ 18449      FFFF03
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 570
+
+
+ 18450 116ee 76C1     		jbe	.L443
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 18451              		.loc 2 743 0
+ 18452 116f0 8B85E0E6 		movl	-6432(%rbp), %eax
+ 18452      FFFF
+ 18453              	.LBE2237:
+ 18454              	.LBE2236:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 18455              		.loc 2 1657 0
+ 18456 116f6 898584F9 		movl	%eax, -1660(%rbp)
+ 18456      FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 18457              		.loc 2 1659 0
+ 18458 116fc 8B8584F9 		movl	-1660(%rbp), %eax
+ 18458      FFFF
+ 18459 11702 8985FCE6 		movl	%eax, -6404(%rbp)
+ 18459      FFFF
+ 18460 11708 8B85FCE6 		movl	-6404(%rbp), %eax
+ 18460      FFFF
+ 18461 1170e 8985F8E6 		movl	%eax, -6408(%rbp)
+ 18461      FFFF
+ 18462 11714 8B85F8E6 		movl	-6408(%rbp), %eax
+ 18462      FFFF
+ 18463 1171a 8985F4E6 		movl	%eax, -6412(%rbp)
+ 18463      FFFF
+ 18464 11720 8B85F4E6 		movl	-6412(%rbp), %eax
+ 18464      FFFF
+ 18465 11726 8985F0E6 		movl	%eax, -6416(%rbp)
+ 18465      FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 18466              		.loc 2 1660 0
+ 18467 1172c F30F6F85 		movdqu	-6416(%rbp), %xmm0
+ 18467      F0E6FFFF 
+ 18468              	.LBE2235:
+ 18469              	.LBE2234:
+1935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(11);        /* k44 : k45 : k46 : k47 */
+ 18470              		.loc 2 1935 0
+ 18471 11734 F30F7F85 		movdqu	%xmm0, -5664(%rbp)
+ 18471      E0E9FFFF 
+ 18472 1173c F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 18472      D0E9FFFF 
+ 18473 11744 F30F7F85 		movdqu	%xmm0, -1648(%rbp)
+ 18473      90F9FFFF 
+ 18474              	.LBB2238:
+ 18475              	.LBB2239:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 18476              		.loc 2 1565 0
+ 18477 1174c F30F6F85 		movdqu	-1648(%rbp), %xmm0
+ 18477      90F9FFFF 
+ 18478 11754 660F7F85 		movdqa	%xmm0, -8400(%rbp)
+ 18478      30DFFFFF 
+ 18479 1175c 660F6F85 		movdqa	-8400(%rbp), %xmm0
+ 18479      30DFFFFF 
+ 18480 11764 F30F7F85 		movdqu	%xmm0, -1632(%rbp)
+ 18480      A0F9FFFF 
+ 18481              	.LBB2240:
+ 18482              	.LBB2241:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 571
+
+
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 18483              		.loc 2 1282 0
+ 18484 1176c F30F6F85 		movdqu	-1632(%rbp), %xmm0
+ 18484      A0F9FFFF 
+ 18485 11774 F30F7F85 		movdqu	%xmm0, -6400(%rbp)
+ 18485      00E7FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 18486              		.loc 2 1283 0
+ 18487 1177c 8B8508E7 		movl	-6392(%rbp), %eax
+ 18487      FFFF
+ 18488 11782 89850CE7 		movl	%eax, -6388(%rbp)
+ 18488      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 18489              		.loc 2 1284 0
+ 18490 11788 8B8504E7 		movl	-6396(%rbp), %eax
+ 18490      FFFF
+ 18491 1178e 898508E7 		movl	%eax, -6392(%rbp)
+ 18491      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 18492              		.loc 2 1285 0
+ 18493 11794 8B8500E7 		movl	-6400(%rbp), %eax
+ 18493      FFFF
+ 18494 1179a 898504E7 		movl	%eax, -6396(%rbp)
+ 18494      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 18495              		.loc 2 1286 0
+ 18496 117a0 C78500E7 		movl	$0, -6400(%rbp)
+ 18496      FFFF0000 
+ 18496      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 18497              		.loc 2 1287 0
+ 18498 117aa F30F6F85 		movdqu	-6400(%rbp), %xmm0
+ 18498      00E7FFFF 
+ 18499              	.LBE2241:
+ 18500              	.LBE2240:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 18501              		.loc 2 1567 0
+ 18502 117b2 660F7F85 		movdqa	%xmm0, -8400(%rbp)
+ 18502      30DFFFFF 
+ 18503 117ba 660F6F85 		movdqa	-8400(%rbp), %xmm0
+ 18503      30DFFFFF 
+ 18504 117c2 660FEF85 		pxor	-1648(%rbp), %xmm0
+ 18504      90F9FFFF 
+ 18505 117ca F30F7F85 		movdqu	%xmm0, -1648(%rbp)
+ 18505      90F9FFFF 
+ 18506 117d2 660F6F85 		movdqa	-8400(%rbp), %xmm0
+ 18506      30DFFFFF 
+ 18507 117da F30F7F85 		movdqu	%xmm0, -1616(%rbp)
+ 18507      B0F9FFFF 
+ 18508              	.LBB2242:
+ 18509              	.LBB2243:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 18510              		.loc 2 1282 0
+ 18511 117e2 F30F6F85 		movdqu	-1616(%rbp), %xmm0
+ 18511      B0F9FFFF 
+ 18512 117ea F30F7F85 		movdqu	%xmm0, -6384(%rbp)
+ 18512      10E7FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 572
+
+
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 18513              		.loc 2 1283 0
+ 18514 117f2 8B8518E7 		movl	-6376(%rbp), %eax
+ 18514      FFFF
+ 18515 117f8 89851CE7 		movl	%eax, -6372(%rbp)
+ 18515      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 18516              		.loc 2 1284 0
+ 18517 117fe 8B8514E7 		movl	-6380(%rbp), %eax
+ 18517      FFFF
+ 18518 11804 898518E7 		movl	%eax, -6376(%rbp)
+ 18518      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 18519              		.loc 2 1285 0
+ 18520 1180a 8B8510E7 		movl	-6384(%rbp), %eax
+ 18520      FFFF
+ 18521 11810 898514E7 		movl	%eax, -6380(%rbp)
+ 18521      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 18522              		.loc 2 1286 0
+ 18523 11816 C78510E7 		movl	$0, -6384(%rbp)
+ 18523      FFFF0000 
+ 18523      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 18524              		.loc 2 1287 0
+ 18525 11820 F30F6F85 		movdqu	-6384(%rbp), %xmm0
+ 18525      10E7FFFF 
+ 18526              	.LBE2243:
+ 18527              	.LBE2242:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 18528              		.loc 2 1568 0
+ 18529 11828 660F7F85 		movdqa	%xmm0, -8400(%rbp)
+ 18529      30DFFFFF 
+ 18530 11830 660F6F85 		movdqa	-8400(%rbp), %xmm0
+ 18530      30DFFFFF 
+ 18531 11838 660FEF85 		pxor	-1648(%rbp), %xmm0
+ 18531      90F9FFFF 
+ 18532 11840 F30F7F85 		movdqu	%xmm0, -1648(%rbp)
+ 18532      90F9FFFF 
+ 18533 11848 660F6F85 		movdqa	-8400(%rbp), %xmm0
+ 18533      30DFFFFF 
+ 18534 11850 F30F7F85 		movdqu	%xmm0, -1600(%rbp)
+ 18534      C0F9FFFF 
+ 18535              	.LBB2244:
+ 18536              	.LBB2245:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 18537              		.loc 2 1282 0
+ 18538 11858 F30F6F85 		movdqu	-1600(%rbp), %xmm0
+ 18538      C0F9FFFF 
+ 18539 11860 F30F7F85 		movdqu	%xmm0, -6368(%rbp)
+ 18539      20E7FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 18540              		.loc 2 1283 0
+ 18541 11868 8B8528E7 		movl	-6360(%rbp), %eax
+ 18541      FFFF
+ 18542 1186e 89852CE7 		movl	%eax, -6356(%rbp)
+ 18542      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 573
+
+
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 18543              		.loc 2 1284 0
+ 18544 11874 8B8524E7 		movl	-6364(%rbp), %eax
+ 18544      FFFF
+ 18545 1187a 898528E7 		movl	%eax, -6360(%rbp)
+ 18545      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 18546              		.loc 2 1285 0
+ 18547 11880 8B8520E7 		movl	-6368(%rbp), %eax
+ 18547      FFFF
+ 18548 11886 898524E7 		movl	%eax, -6364(%rbp)
+ 18548      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 18549              		.loc 2 1286 0
+ 18550 1188c C78520E7 		movl	$0, -6368(%rbp)
+ 18550      FFFF0000 
+ 18550      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 18551              		.loc 2 1287 0
+ 18552 11896 F30F6F85 		movdqu	-6368(%rbp), %xmm0
+ 18552      20E7FFFF 
+ 18553              	.LBE2245:
+ 18554              	.LBE2244:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 18555              		.loc 2 1569 0
+ 18556 1189e 660F7F85 		movdqa	%xmm0, -8400(%rbp)
+ 18556      30DFFFFF 
+ 18557 118a6 660F6F85 		movdqa	-8400(%rbp), %xmm0
+ 18557      30DFFFFF 
+ 18558 118ae 660FEF85 		pxor	-1648(%rbp), %xmm0
+ 18558      90F9FFFF 
+ 18559 118b6 F30F7F85 		movdqu	%xmm0, -1648(%rbp)
+ 18559      90F9FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 18560              		.loc 2 1571 0
+ 18561 118be F30F6F85 		movdqu	-1648(%rbp), %xmm0
+ 18561      90F9FFFF 
+ 18562              	.LBE2239:
+ 18563              	.LBE2238:
+1935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(11);        /* k44 : k45 : k46 : k47 */
+ 18564              		.loc 2 1935 0
+ 18565 118c6 F30F7F85 		movdqu	%xmm0, -5680(%rbp)
+ 18565      D0E9FFFF 
+ 18566 118ce F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 18566      D0E9FFFF 
+ 18567 118d6 F30F7F85 		movdqu	%xmm0, -1568(%rbp)
+ 18567      E0F9FFFF 
+ 18568 118de F30F6F85 		movdqu	-5664(%rbp), %xmm0
+ 18568      E0E9FFFF 
+ 18569 118e6 F30F7F85 		movdqu	%xmm0, -1584(%rbp)
+ 18569      D0F9FFFF 
+ 18570              	.LBB2246:
+ 18571              	.LBB2247:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 18572              		.loc 2 178 0
+ 18573 118ee F30F6F85 		movdqu	-1584(%rbp), %xmm0
+ 18573      D0F9FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 574
+
+
+ 18574 118f6 F30F6F8D 		movdqu	-1568(%rbp), %xmm1
+ 18574      E0F9FFFF 
+ 18575 118fe 660FEFC1 		pxor	%xmm1, %xmm0
+ 18576              	.LBE2247:
+ 18577              	.LBE2246:
+1935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(11);        /* k44 : k45 : k46 : k47 */
+ 18578              		.loc 2 1935 0
+ 18579 11902 F30F7F85 		movdqu	%xmm0, -5680(%rbp)
+ 18579      D0E9FFFF 
+ 18580 1190a 488B85D8 		movq	-8232(%rbp), %rax
+ 18580      DFFFFF
+ 18581 11911 4805B000 		addq	$176, %rax
+ 18581      0000
+ 18582 11917 F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 18582      D0E9FFFF 
+ 18583 1191f F30F7F00 		movdqu	%xmm0, (%rax)
+ 18584 11923 F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 18584      D0E9FFFF 
+ 18585 1192b F30F7F85 		movdqu	%xmm0, -1536(%rbp)
+ 18585      00FAFFFF 
+ 18586              	.LBB2248:
+ 18587              	.LBB2249:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 18588              		.loc 2 1681 0
+ 18589 11933 B8200000 		movl	$32, %eax
+ 18589      00
+ 18590 11938 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 18590      00000000 
+ 18591 11940 F30F7F85 		movdqu	%xmm0, -1504(%rbp)
+ 18591      20FAFFFF 
+ 18592 11948 89851CFA 		movl	%eax, -1508(%rbp)
+ 18592      FFFF
+ 18593              	.LBB2250:
+ 18594              	.LBB2251:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 18595              		.loc 2 522 0
+ 18596 1194e F30F6F85 		movdqu	-1504(%rbp), %xmm0
+ 18596      20FAFFFF 
+ 18597 11956 F30F7F85 		movdqu	%xmm0, -6288(%rbp)
+ 18597      70E7FFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 18598              		.loc 2 523 0
+ 18599 1195e B8030000 		movl	$3, %eax
+ 18599      00
+ 18600 11963 4898     		cltq
+ 18601 11965 8B951CFA 		movl	-1508(%rbp), %edx
+ 18601      FFFF
+ 18602 1196b 89948570 		movl	%edx, -6288(%rbp,%rax,4)
+ 18602      E7FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 18603              		.loc 2 524 0
+ 18604 11972 F30F6F85 		movdqu	-6288(%rbp), %xmm0
+ 18604      70E7FFFF 
+ 18605 1197a F30F7F85 		movdqu	%xmm0, -1504(%rbp)
+ 18605      20FAFFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 18606              		.loc 2 526 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 575
+
+
+ 18607 11982 F30F6F85 		movdqu	-1504(%rbp), %xmm0
+ 18607      20FAFFFF 
+ 18608              	.LBE2251:
+ 18609              	.LBE2250:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 18610              		.loc 2 1681 0
+ 18611 1198a 660F7F85 		movdqa	%xmm0, -8368(%rbp)
+ 18611      50DFFFFF 
+ 18612 11992 F30F6F85 		movdqu	-1536(%rbp), %xmm0
+ 18612      00FAFFFF 
+ 18613 1199a F30F7F85 		movdqu	%xmm0, -1488(%rbp)
+ 18613      30FAFFFF 
+ 18614 119a2 F30F6F85 		movdqu	-1488(%rbp), %xmm0
+ 18614      30FAFFFF 
+ 18615 119aa F30F7F85 		movdqu	%xmm0, -1456(%rbp)
+ 18615      50FAFFFF 
+ 18616 119b2 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 18616      000000
+ 18617 119b9 48898548 		movq	%rax, -1464(%rbp)
+ 18617      FAFFFF
+ 18618              	.LBB2252:
+ 18619              	.LBB2253:
+ 18620              	.LBB2254:
+ 18621              	.LBB2255:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 18622              		.loc 2 851 0
+ 18623 119c0 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 18623      00000000 
+ 18624 119c8 F30F7F85 		movdqu	%xmm0, -1424(%rbp)
+ 18624      70FAFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 18625              		.loc 2 854 0
+ 18626 119d0 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 18626      00000000 
+ 18627 119d8 F30F6F8D 		movdqu	-1456(%rbp), %xmm1
+ 18627      50FAFFFF 
+ 18628 119e0 F30F7F8D 		movdqu	%xmm1, -1344(%rbp)
+ 18628      C0FAFFFF 
+ 18629 119e8 F30F7F85 		movdqu	%xmm0, -1360(%rbp)
+ 18629      B0FAFFFF 
+ 18630              	.LBB2256:
+ 18631              	.LBB2257:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 18632              		.loc 2 206 0
+ 18633 119f0 F30F6F85 		movdqu	-1360(%rbp), %xmm0
+ 18633      B0FAFFFF 
+ 18634 119f8 F30F6F8D 		movdqu	-1344(%rbp), %xmm1
+ 18634      C0FAFFFF 
+ 18635 11a00 660FDBC1 		pand	%xmm1, %xmm0
+ 18636              	.LBE2257:
+ 18637              	.LBE2256:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 18638              		.loc 2 854 0
+ 18639 11a04 F30F7F85 		movdqu	%xmm0, -1376(%rbp)
+ 18639      A0FAFFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 18640              		.loc 2 862 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 576
+
+
+ 18641 11a0c 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 18641      00000000 
+ 18642 11a14 F30F6F8D 		movdqu	-1456(%rbp), %xmm1
+ 18642      50FAFFFF 
+ 18643 11a1c F30F7F8D 		movdqu	%xmm1, -1312(%rbp)
+ 18643      E0FAFFFF 
+ 18644 11a24 F30F7F85 		movdqu	%xmm0, -1328(%rbp)
+ 18644      D0FAFFFF 
+ 18645              	.LBB2258:
+ 18646              		.loc 2 2642 0
+ 18647 11a2c 0FB685E0 		movzbl	-1312(%rbp), %eax
+ 18647      FAFFFF
+ 18648 11a33 0FB695D0 		movzbl	-1328(%rbp), %edx
+ 18648      FAFFFF
+ 18649 11a3a 0FB6C0   		movzbl	%al, %eax
+ 18650 11a3d 6689853E 		movw	%ax, -8898(%rbp)
+ 18650      DDFFFF
+ 18651 11a44 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 18651      DDFFFF
+ 18652 11a4b F6F2     		divb	%dl
+ 18653 11a4d 4189C7   		movl	%eax, %r15d
+ 18654 11a50 0FB685E1 		movzbl	-1311(%rbp), %eax
+ 18654      FAFFFF
+ 18655 11a57 0FB695D1 		movzbl	-1327(%rbp), %edx
+ 18655      FAFFFF
+ 18656 11a5e 0FB6C0   		movzbl	%al, %eax
+ 18657 11a61 6689853E 		movw	%ax, -8898(%rbp)
+ 18657      DDFFFF
+ 18658 11a68 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 18658      DDFFFF
+ 18659 11a6f F6F2     		divb	%dl
+ 18660 11a71 88856FDF 		movb	%al, -8337(%rbp)
+ 18660      FFFF
+ 18661 11a77 0FB685E2 		movzbl	-1310(%rbp), %eax
+ 18661      FAFFFF
+ 18662 11a7e 0FB695D2 		movzbl	-1326(%rbp), %edx
+ 18662      FAFFFF
+ 18663 11a85 0FB6C0   		movzbl	%al, %eax
+ 18664 11a88 6689853E 		movw	%ax, -8898(%rbp)
+ 18664      DDFFFF
+ 18665 11a8f 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 18665      DDFFFF
+ 18666 11a96 F6F2     		divb	%dl
+ 18667 11a98 88856EDF 		movb	%al, -8338(%rbp)
+ 18667      FFFF
+ 18668 11a9e 0FB685E3 		movzbl	-1309(%rbp), %eax
+ 18668      FAFFFF
+ 18669 11aa5 0FB695D3 		movzbl	-1325(%rbp), %edx
+ 18669      FAFFFF
+ 18670 11aac 0FB6C0   		movzbl	%al, %eax
+ 18671 11aaf 6689853E 		movw	%ax, -8898(%rbp)
+ 18671      DDFFFF
+ 18672 11ab6 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 18672      DDFFFF
+ 18673 11abd F6F2     		divb	%dl
+ 18674 11abf 88856DDF 		movb	%al, -8339(%rbp)
+ 18674      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 577
+
+
+ 18675 11ac5 0FB685E4 		movzbl	-1308(%rbp), %eax
+ 18675      FAFFFF
+ 18676 11acc 0FB695D4 		movzbl	-1324(%rbp), %edx
+ 18676      FAFFFF
+ 18677 11ad3 0FB6C0   		movzbl	%al, %eax
+ 18678 11ad6 6689853E 		movw	%ax, -8898(%rbp)
+ 18678      DDFFFF
+ 18679 11add 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 18679      DDFFFF
+ 18680 11ae4 F6F2     		divb	%dl
+ 18681 11ae6 88856CDF 		movb	%al, -8340(%rbp)
+ 18681      FFFF
+ 18682 11aec 0FB685E5 		movzbl	-1307(%rbp), %eax
+ 18682      FAFFFF
+ 18683 11af3 0FB695D5 		movzbl	-1323(%rbp), %edx
+ 18683      FAFFFF
+ 18684 11afa 0FB6C0   		movzbl	%al, %eax
+ 18685 11afd 6689853E 		movw	%ax, -8898(%rbp)
+ 18685      DDFFFF
+ 18686 11b04 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 18686      DDFFFF
+ 18687 11b0b F6F2     		divb	%dl
+ 18688 11b0d 4189C1   		movl	%eax, %r9d
+ 18689 11b10 0FB685E6 		movzbl	-1306(%rbp), %eax
+ 18689      FAFFFF
+ 18690 11b17 0FB695D6 		movzbl	-1322(%rbp), %edx
+ 18690      FAFFFF
+ 18691 11b1e 0FB6C0   		movzbl	%al, %eax
+ 18692 11b21 6689853E 		movw	%ax, -8898(%rbp)
+ 18692      DDFFFF
+ 18693 11b28 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 18693      DDFFFF
+ 18694 11b2f F6F2     		divb	%dl
+ 18695 11b31 89C7     		movl	%eax, %edi
+ 18696 11b33 0FB685E7 		movzbl	-1305(%rbp), %eax
+ 18696      FAFFFF
+ 18697 11b3a 0FB695D7 		movzbl	-1321(%rbp), %edx
+ 18697      FAFFFF
+ 18698 11b41 0FB6C0   		movzbl	%al, %eax
+ 18699 11b44 6689853E 		movw	%ax, -8898(%rbp)
+ 18699      DDFFFF
+ 18700 11b4b 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 18700      DDFFFF
+ 18701 11b52 F6F2     		divb	%dl
+ 18702 11b54 89C3     		movl	%eax, %ebx
+ 18703 11b56 0FB685E8 		movzbl	-1304(%rbp), %eax
+ 18703      FAFFFF
+ 18704 11b5d 0FB695D8 		movzbl	-1320(%rbp), %edx
+ 18704      FAFFFF
+ 18705 11b64 0FB6C0   		movzbl	%al, %eax
+ 18706 11b67 6689853E 		movw	%ax, -8898(%rbp)
+ 18706      DDFFFF
+ 18707 11b6e 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 18707      DDFFFF
+ 18708 11b75 F6F2     		divb	%dl
+ 18709 11b77 4189C2   		movl	%eax, %r10d
+ 18710 11b7a 0FB685E9 		movzbl	-1303(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 578
+
+
+ 18710      FAFFFF
+ 18711 11b81 0FB695D9 		movzbl	-1319(%rbp), %edx
+ 18711      FAFFFF
+ 18712 11b88 0FB6C0   		movzbl	%al, %eax
+ 18713 11b8b 6689853E 		movw	%ax, -8898(%rbp)
+ 18713      DDFFFF
+ 18714 11b92 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 18714      DDFFFF
+ 18715 11b99 F6F2     		divb	%dl
+ 18716 11b9b 4189C3   		movl	%eax, %r11d
+ 18717 11b9e 0FB685EA 		movzbl	-1302(%rbp), %eax
+ 18717      FAFFFF
+ 18718 11ba5 0FB695DA 		movzbl	-1318(%rbp), %edx
+ 18718      FAFFFF
+ 18719 11bac 0FB6C0   		movzbl	%al, %eax
+ 18720 11baf 6689853E 		movw	%ax, -8898(%rbp)
+ 18720      DDFFFF
+ 18721 11bb6 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 18721      DDFFFF
+ 18722 11bbd F6F2     		divb	%dl
+ 18723 11bbf 4189C4   		movl	%eax, %r12d
+ 18724 11bc2 0FB685EB 		movzbl	-1301(%rbp), %eax
+ 18724      FAFFFF
+ 18725 11bc9 0FB695DB 		movzbl	-1317(%rbp), %edx
+ 18725      FAFFFF
+ 18726 11bd0 0FB6C0   		movzbl	%al, %eax
+ 18727 11bd3 6689853E 		movw	%ax, -8898(%rbp)
+ 18727      DDFFFF
+ 18728 11bda 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 18728      DDFFFF
+ 18729 11be1 F6F2     		divb	%dl
+ 18730 11be3 4189C5   		movl	%eax, %r13d
+ 18731 11be6 0FB685EC 		movzbl	-1300(%rbp), %eax
+ 18731      FAFFFF
+ 18732 11bed 0FB695DC 		movzbl	-1316(%rbp), %edx
+ 18732      FAFFFF
+ 18733 11bf4 0FB6C0   		movzbl	%al, %eax
+ 18734 11bf7 6689853E 		movw	%ax, -8898(%rbp)
+ 18734      DDFFFF
+ 18735 11bfe 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 18735      DDFFFF
+ 18736 11c05 F6F2     		divb	%dl
+ 18737 11c07 4189C6   		movl	%eax, %r14d
+ 18738 11c0a 0FB685ED 		movzbl	-1299(%rbp), %eax
+ 18738      FAFFFF
+ 18739 11c11 0FB695DD 		movzbl	-1315(%rbp), %edx
+ 18739      FAFFFF
+ 18740 11c18 0FB6C0   		movzbl	%al, %eax
+ 18741 11c1b 6689853E 		movw	%ax, -8898(%rbp)
+ 18741      DDFFFF
+ 18742 11c22 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 18742      DDFFFF
+ 18743 11c29 F6F2     		divb	%dl
+ 18744 11c2b 4189C0   		movl	%eax, %r8d
+ 18745 11c2e 0FB685EE 		movzbl	-1298(%rbp), %eax
+ 18745      FAFFFF
+ 18746 11c35 0FB695DE 		movzbl	-1314(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 579
+
+
+ 18746      FAFFFF
+ 18747 11c3c 0FB6C0   		movzbl	%al, %eax
+ 18748 11c3f 6689853E 		movw	%ax, -8898(%rbp)
+ 18748      DDFFFF
+ 18749 11c46 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 18749      DDFFFF
+ 18750 11c4d F6F2     		divb	%dl
+ 18751 11c4f 89C6     		movl	%eax, %esi
+ 18752 11c51 0FB685EF 		movzbl	-1297(%rbp), %eax
+ 18752      FAFFFF
+ 18753 11c58 0FB695DF 		movzbl	-1313(%rbp), %edx
+ 18753      FAFFFF
+ 18754 11c5f 0FB6C0   		movzbl	%al, %eax
+ 18755 11c62 6689853E 		movw	%ax, -8898(%rbp)
+ 18755      DDFFFF
+ 18756 11c69 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 18756      DDFFFF
+ 18757 11c70 F6F2     		divb	%dl
+ 18758 11c72 89C1     		movl	%eax, %ecx
+ 18759              	.LBB2259:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 18760              		.loc 2 346 0
+ 18761 11c74 0FB6D3   		movzbl	%bl, %edx
+ 18762 11c77 400FB6C7 		movzbl	%dil, %eax
+ 18763 11c7b 48C1E208 		salq	$8, %rdx
+ 18764 11c7f 4809C2   		orq	%rax, %rdx
+ 18765 11c82 410FB6C1 		movzbl	%r9b, %eax
+ 18766 11c86 48C1E208 		salq	$8, %rdx
+ 18767 11c8a 4809C2   		orq	%rax, %rdx
+ 18768 11c8d 0FB6856C 		movzbl	-8340(%rbp), %eax
+ 18768      DFFFFF
+ 18769 11c94 48C1E208 		salq	$8, %rdx
+ 18770 11c98 4809C2   		orq	%rax, %rdx
+ 18771 11c9b 0FB6856D 		movzbl	-8339(%rbp), %eax
+ 18771      DFFFFF
+ 18772 11ca2 48C1E208 		salq	$8, %rdx
+ 18773 11ca6 4809C2   		orq	%rax, %rdx
+ 18774 11ca9 0FB6856E 		movzbl	-8338(%rbp), %eax
+ 18774      DFFFFF
+ 18775 11cb0 48C1E208 		salq	$8, %rdx
+ 18776 11cb4 4809C2   		orq	%rax, %rdx
+ 18777 11cb7 0FB6856F 		movzbl	-8337(%rbp), %eax
+ 18777      DFFFFF
+ 18778 11cbe 48C1E208 		salq	$8, %rdx
+ 18779 11cc2 4809C2   		orq	%rax, %rdx
+ 18780 11cc5 410FB6C7 		movzbl	%r15b, %eax
+ 18781 11cc9 48C1E208 		salq	$8, %rdx
+ 18782 11ccd 4809C2   		orq	%rax, %rdx
+ 18783 11cd0 0FB6C1   		movzbl	%cl, %eax
+ 18784 11cd3 400FB6CE 		movzbl	%sil, %ecx
+ 18785 11cd7 48C1E008 		salq	$8, %rax
+ 18786 11cdb 4809C8   		orq	%rcx, %rax
+ 18787 11cde 410FB6C8 		movzbl	%r8b, %ecx
+ 18788 11ce2 48C1E008 		salq	$8, %rax
+ 18789 11ce6 4809C8   		orq	%rcx, %rax
+ 18790 11ce9 410FB6CE 		movzbl	%r14b, %ecx
+ 18791 11ced 48C1E008 		salq	$8, %rax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 580
+
+
+ 18792 11cf1 4809C8   		orq	%rcx, %rax
+ 18793 11cf4 410FB6CD 		movzbl	%r13b, %ecx
+ 18794 11cf8 48C1E008 		salq	$8, %rax
+ 18795 11cfc 4809C8   		orq	%rcx, %rax
+ 18796 11cff 410FB6CC 		movzbl	%r12b, %ecx
+ 18797 11d03 48C1E008 		salq	$8, %rax
+ 18798 11d07 4809C8   		orq	%rcx, %rax
+ 18799 11d0a 410FB6CB 		movzbl	%r11b, %ecx
+ 18800 11d0e 48C1E008 		salq	$8, %rax
+ 18801 11d12 4809C8   		orq	%rcx, %rax
+ 18802 11d15 410FB6CA 		movzbl	%r10b, %ecx
+ 18803 11d19 48C1E008 		salq	$8, %rax
+ 18804 11d1d 4809C8   		orq	%rcx, %rax
+ 18805 11d20 48899550 		movq	%rdx, -8880(%rbp)
+ 18805      DDFFFF
+ 18806 11d27 48898558 		movq	%rax, -8872(%rbp)
+ 18806      DDFFFF
+ 18807 11d2e 660F6F85 		movdqa	-8880(%rbp), %xmm0
+ 18807      50DDFFFF 
+ 18808              	.LBE2259:
+ 18809              	.LBE2258:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 18810              		.loc 2 862 0
+ 18811 11d36 F30F7F85 		movdqu	%xmm0, -1392(%rbp)
+ 18811      90FAFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 18812              		.loc 2 866 0
+ 18813 11d3e C7856CFA 		movl	$0, -1428(%rbp)
+ 18813      FFFF0000 
+ 18813      0000
+ 18814 11d48 E9860200 		jmp	.L444
+ 18814      00
+ 18815              	.L453:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 18816              		.loc 2 868 0
+ 18817 11d4d 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 18817      00000000 
+ 18818 11d55 F30F7F85 		movdqu	%xmm0, -1280(%rbp)
+ 18818      00FBFFFF 
+ 18819 11d5d F30F6F85 		movdqu	-1392(%rbp), %xmm0
+ 18819      90FAFFFF 
+ 18820 11d65 F30F7F85 		movdqu	%xmm0, -1296(%rbp)
+ 18820      F0FAFFFF 
+ 18821              	.LBB2260:
+ 18822              	.LBB2261:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 18823              		.loc 2 380 0
+ 18824 11d6d F30F6F85 		movdqu	-1280(%rbp), %xmm0
+ 18824      00FBFFFF 
+ 18825 11d75 F30F7F85 		movdqu	%xmm0, -6256(%rbp)
+ 18825      90E7FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 18826              		.loc 2 381 0
+ 18827 11d7d F30F6F85 		movdqu	-1296(%rbp), %xmm0
+ 18827      F0FAFFFF 
+ 18828 11d85 F30F7F85 		movdqu	%xmm0, -6272(%rbp)
+ 18828      80E7FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 581
+
+
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 18829              		.loc 2 383 0
+ 18830 11d8d C7851CFB 		movl	$0, -1252(%rbp)
+ 18830      FFFF0000 
+ 18830      0000
+ 18831 11d97 EB5C     		jmp	.L445
+ 18832              	.L448:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 18833              		.loc 2 385 0
+ 18834 11d99 8B851CFB 		movl	-1252(%rbp), %eax
+ 18834      FFFF
+ 18835 11d9f 89C0     		mov	%eax, %eax
+ 18836 11da1 0FB68405 		movzbl	-6272(%rbp,%rax), %eax
+ 18836      80E7FFFF 
+ 18837 11da9 84C0     		testb	%al, %al
+ 18838 11dab 7912     		jns	.L446
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 18839              		.loc 2 386 0
+ 18840 11dad 8B851CFB 		movl	-1252(%rbp), %eax
+ 18840      FFFF
+ 18841 11db3 89C0     		mov	%eax, %eax
+ 18842 11db5 C68405A0 		movb	$0, -6240(%rbp,%rax)
+ 18842      E7FFFF00 
+ 18843 11dbd EB2F     		jmp	.L447
+ 18844              	.L446:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 18845              		.loc 2 388 0
+ 18846 11dbf 8B8D1CFB 		movl	-1252(%rbp), %ecx
+ 18846      FFFF
+ 18847 11dc5 8B851CFB 		movl	-1252(%rbp), %eax
+ 18847      FFFF
+ 18848 11dcb 89C0     		mov	%eax, %eax
+ 18849 11dcd 0FB68405 		movzbl	-6272(%rbp,%rax), %eax
+ 18849      80E7FFFF 
+ 18850 11dd5 0FB6C0   		movzbl	%al, %eax
+ 18851 11dd8 83E00F   		andl	$15, %eax
+ 18852 11ddb 4898     		cltq
+ 18853 11ddd 0FB69405 		movzbl	-6256(%rbp,%rax), %edx
+ 18853      90E7FFFF 
+ 18854 11de5 89C8     		mov	%ecx, %eax
+ 18855 11de7 889405A0 		movb	%dl, -6240(%rbp,%rax)
+ 18855      E7FFFF
+ 18856              	.L447:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 18857              		.loc 2 383 0
+ 18858 11dee 83851CFB 		addl	$1, -1252(%rbp)
+ 18858      FFFF01
+ 18859              	.L445:
+ 18860 11df5 83BD1CFB 		cmpl	$15, -1252(%rbp)
+ 18860      FFFF0F
+ 18861 11dfc 769B     		jbe	.L448
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 18862              		.loc 2 391 0
+ 18863 11dfe F30F6F85 		movdqu	-6240(%rbp), %xmm0
+ 18863      A0E7FFFF 
+ 18864              	.LBE2261:
+ 18865              	.LBE2260:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 582
+
+
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 18866              		.loc 2 868 0
+ 18867 11e06 F30F7F85 		movdqu	%xmm0, -1408(%rbp)
+ 18867      80FAFFFF 
+ 18868 11e0e F30F6F85 		movdqu	-1376(%rbp), %xmm0
+ 18868      A0FAFFFF 
+ 18869 11e16 F30F7F85 		movdqu	%xmm0, -1232(%rbp)
+ 18869      30FBFFFF 
+ 18870 11e1e F30F6F85 		movdqu	-1408(%rbp), %xmm0
+ 18870      80FAFFFF 
+ 18871 11e26 F30F7F85 		movdqu	%xmm0, -1248(%rbp)
+ 18871      20FBFFFF 
+ 18872              	.LBB2262:
+ 18873              	.LBB2263:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 18874              		.loc 2 234 0
+ 18875 11e2e F30F6F85 		movdqu	-1248(%rbp), %xmm0
+ 18875      20FBFFFF 
+ 18876 11e36 F30F6F8D 		movdqu	-1232(%rbp), %xmm1
+ 18876      30FBFFFF 
+ 18877 11e3e 660FEBC1 		por	%xmm1, %xmm0
+ 18878              	.LBE2263:
+ 18879              	.LBE2262:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 18880              		.loc 2 870 0
+ 18881 11e42 F30F7F85 		movdqu	%xmm0, -1408(%rbp)
+ 18881      80FAFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 18882              		.loc 2 872 0
+ 18883 11e4a 8B856CFA 		mov	-1428(%rbp), %eax
+ 18883      FFFF
+ 18884 11e50 48C1E004 		salq	$4, %rax
+ 18885 11e54 48038548 		addq	-1464(%rbp), %rax
+ 18885      FAFFFF
+ 18886 11e5b 660F6F00 		movdqa	(%rax), %xmm0
+ 18887 11e5f F30F7F85 		movdqu	%xmm0, -1200(%rbp)
+ 18887      50FBFFFF 
+ 18888 11e67 F30F6F85 		movdqu	-1408(%rbp), %xmm0
+ 18888      80FAFFFF 
+ 18889 11e6f F30F7F85 		movdqu	%xmm0, -1216(%rbp)
+ 18889      40FBFFFF 
+ 18890              	.LBB2264:
+ 18891              	.LBB2265:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 18892              		.loc 2 380 0
+ 18893 11e77 F30F6F85 		movdqu	-1200(%rbp), %xmm0
+ 18893      50FBFFFF 
+ 18894 11e7f F30F7F85 		movdqu	%xmm0, -6208(%rbp)
+ 18894      C0E7FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 18895              		.loc 2 381 0
+ 18896 11e87 F30F6F85 		movdqu	-1216(%rbp), %xmm0
+ 18896      40FBFFFF 
+ 18897 11e8f F30F7F85 		movdqu	%xmm0, -6224(%rbp)
+ 18897      B0E7FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 18898              		.loc 2 383 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 583
+
+
+ 18899 11e97 C7856CFB 		movl	$0, -1172(%rbp)
+ 18899      FFFF0000 
+ 18899      0000
+ 18900 11ea1 EB5C     		jmp	.L449
+ 18901              	.L452:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 18902              		.loc 2 385 0
+ 18903 11ea3 8B856CFB 		movl	-1172(%rbp), %eax
+ 18903      FFFF
+ 18904 11ea9 89C0     		mov	%eax, %eax
+ 18905 11eab 0FB68405 		movzbl	-6224(%rbp,%rax), %eax
+ 18905      B0E7FFFF 
+ 18906 11eb3 84C0     		testb	%al, %al
+ 18907 11eb5 7912     		jns	.L450
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 18908              		.loc 2 386 0
+ 18909 11eb7 8B856CFB 		movl	-1172(%rbp), %eax
+ 18909      FFFF
+ 18910 11ebd 89C0     		mov	%eax, %eax
+ 18911 11ebf C68405D0 		movb	$0, -6192(%rbp,%rax)
+ 18911      E7FFFF00 
+ 18912 11ec7 EB2F     		jmp	.L451
+ 18913              	.L450:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 18914              		.loc 2 388 0
+ 18915 11ec9 8B8D6CFB 		movl	-1172(%rbp), %ecx
+ 18915      FFFF
+ 18916 11ecf 8B856CFB 		movl	-1172(%rbp), %eax
+ 18916      FFFF
+ 18917 11ed5 89C0     		mov	%eax, %eax
+ 18918 11ed7 0FB68405 		movzbl	-6224(%rbp,%rax), %eax
+ 18918      B0E7FFFF 
+ 18919 11edf 0FB6C0   		movzbl	%al, %eax
+ 18920 11ee2 83E00F   		andl	$15, %eax
+ 18921 11ee5 4898     		cltq
+ 18922 11ee7 0FB69405 		movzbl	-6208(%rbp,%rax), %edx
+ 18922      C0E7FFFF 
+ 18923 11eef 89C8     		mov	%ecx, %eax
+ 18924 11ef1 889405D0 		movb	%dl, -6192(%rbp,%rax)
+ 18924      E7FFFF
+ 18925              	.L451:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 18926              		.loc 2 383 0
+ 18927 11ef8 83856CFB 		addl	$1, -1172(%rbp)
+ 18927      FFFF01
+ 18928              	.L449:
+ 18929 11eff 83BD6CFB 		cmpl	$15, -1172(%rbp)
+ 18929      FFFF0F
+ 18930 11f06 769B     		jbe	.L452
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 18931              		.loc 2 391 0
+ 18932 11f08 F30F6F85 		movdqu	-6192(%rbp), %xmm0
+ 18932      D0E7FFFF 
+ 18933              	.LBE2265:
+ 18934              	.LBE2264:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 18935              		.loc 2 872 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 584
+
+
+ 18936 11f10 F30F7F85 		movdqu	%xmm0, -1408(%rbp)
+ 18936      80FAFFFF 
+ 18937 11f18 F30F6F85 		movdqu	-1424(%rbp), %xmm0
+ 18937      70FAFFFF 
+ 18938 11f20 F30F7F85 		movdqu	%xmm0, -1152(%rbp)
+ 18938      80FBFFFF 
+ 18939 11f28 F30F6F85 		movdqu	-1408(%rbp), %xmm0
+ 18939      80FAFFFF 
+ 18940 11f30 F30F7F85 		movdqu	%xmm0, -1168(%rbp)
+ 18940      70FBFFFF 
+ 18941              	.LBB2266:
+ 18942              	.LBB2267:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 18943              		.loc 2 234 0
+ 18944 11f38 F30F6F85 		movdqu	-1168(%rbp), %xmm0
+ 18944      70FBFFFF 
+ 18945 11f40 F30F6F8D 		movdqu	-1152(%rbp), %xmm1
+ 18945      80FBFFFF 
+ 18946 11f48 660FEBC1 		por	%xmm1, %xmm0
+ 18947              	.LBE2267:
+ 18948              	.LBE2266:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 18949              		.loc 2 874 0
+ 18950 11f4c F30F7F85 		movdqu	%xmm0, -1424(%rbp)
+ 18950      70FAFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 18951              		.loc 2 876 0
+ 18952 11f54 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 18952      00000000 
+ 18953 11f5c F30F6F8D 		movdqu	-1392(%rbp), %xmm1
+ 18953      90FAFFFF 
+ 18954 11f64 F30F7F8D 		movdqu	%xmm1, -1120(%rbp)
+ 18954      A0FBFFFF 
+ 18955 11f6c F30F7F85 		movdqu	%xmm0, -1136(%rbp)
+ 18955      90FBFFFF 
+ 18956              	.LBB2268:
+ 18957              	.LBB2269:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 18958              		.loc 2 290 0
+ 18959 11f74 F30F6F8D 		movdqu	-1136(%rbp), %xmm1
+ 18959      90FBFFFF 
+ 18960 11f7c F30F6F85 		movdqu	-1120(%rbp), %xmm0
+ 18960      A0FBFFFF 
+ 18961 11f84 660FF8C1 		psubb	%xmm1, %xmm0
+ 18962              	.LBE2269:
+ 18963              	.LBE2268:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 18964              		.loc 2 876 0
+ 18965 11f88 F30F7F85 		movdqu	%xmm0, -1392(%rbp)
+ 18965      90FAFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 18966              		.loc 2 878 0
+ 18967 11f90 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 18967      00000000 
+ 18968 11f98 F30F6F8D 		movdqu	-1392(%rbp), %xmm1
+ 18968      90FAFFFF 
+ 18969 11fa0 F30F7F8D 		movdqu	%xmm1, -1088(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 585
+
+
+ 18969      C0FBFFFF 
+ 18970 11fa8 F30F7F85 		movdqu	%xmm0, -1104(%rbp)
+ 18970      B0FBFFFF 
+ 18971              	.LBB2270:
+ 18972              	.LBB2271:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 18973              		.loc 2 206 0
+ 18974 11fb0 F30F6F85 		movdqu	-1104(%rbp), %xmm0
+ 18974      B0FBFFFF 
+ 18975 11fb8 F30F6F8D 		movdqu	-1088(%rbp), %xmm1
+ 18975      C0FBFFFF 
+ 18976 11fc0 660FDBC1 		pand	%xmm1, %xmm0
+ 18977              	.LBE2271:
+ 18978              	.LBE2270:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 18979              		.loc 2 878 0
+ 18980 11fc4 F30F7F85 		movdqu	%xmm0, -1392(%rbp)
+ 18980      90FAFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 18981              		.loc 2 866 0
+ 18982 11fcc 83856CFA 		addl	$1, -1428(%rbp)
+ 18982      FFFF01
+ 18983              	.L444:
+ 18984 11fd3 83BD6CFA 		cmpl	$15, -1428(%rbp)
+ 18984      FFFF0F
+ 18985 11fda 0F866DFD 		jbe	.L453
+ 18985      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 18986              		.loc 2 882 0
+ 18987 11fe0 F30F6F85 		movdqu	-1424(%rbp), %xmm0
+ 18987      70FAFFFF 
+ 18988              	.LBE2255:
+ 18989              	.LBE2254:
+ 18990              	.LBE2253:
+ 18991              	.LBE2252:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 18992              		.loc 2 1682 0
+ 18993 11fe8 660F7F85 		movdqa	%xmm0, -8384(%rbp)
+ 18993      40DFFFFF 
+ 18994              	.LBB2272:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 18995              		.loc 2 1683 0
+ 18996 11ff0 660F6F85 		movdqa	-8384(%rbp), %xmm0
+ 18996      40DFFFFF 
+ 18997 11ff8 F30F7F85 		movdqu	%xmm0, -6304(%rbp)
+ 18997      60E7FFFF 
+ 18998 12000 E8000000 		call	KDbgWriterGet at PLT
+ 18998      00
+ 18999 12005 4885C0   		testq	%rax, %rax
+ 19000 12008 7479     		je	.L455
+ 19001 1200a BF010000 		movl	$1, %edi
+ 19001      00
+ 19002 1200f E8000000 		call	KDbgCondToFlag at PLT
+ 19002      00
+ 19003 12014 4889C6   		movq	%rax, %rsi
+ 19004 12017 BF100000 		movl	$16, %edi
+ 19004      00
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 586
+
+
+ 19005 1201c E8000000 		call	KDbgTestModConds at PLT
+ 19005      00
+ 19006 12021 84C0     		testb	%al, %al
+ 19007 12023 745E     		je	.L455
+ 19008 12025 8B856CE7 		movl	-6292(%rbp), %eax
+ 19008      FFFF
+ 19009 1202b 89C7     		movl	%eax, %edi
+ 19010 1202d E8CEDFFE 		call	bswap_32
+ 19010      FF
+ 19011 12032 4189C5   		movl	%eax, %r13d
+ 19012 12035 8B8568E7 		movl	-6296(%rbp), %eax
+ 19012      FFFF
+ 19013 1203b 89C7     		movl	%eax, %edi
+ 19014 1203d E8BEDFFE 		call	bswap_32
+ 19014      FF
+ 19015 12042 4189C4   		movl	%eax, %r12d
+ 19016 12045 8B8564E7 		movl	-6300(%rbp), %eax
+ 19016      FFFF
+ 19017 1204b 89C7     		movl	%eax, %edi
+ 19018 1204d E8AEDFFE 		call	bswap_32
+ 19018      FF
+ 19019 12052 89C3     		movl	%eax, %ebx
+ 19020 12054 8B8560E7 		movl	-6304(%rbp), %eax
+ 19020      FFFF
+ 19021 1205a 89C7     		movl	%eax, %edi
+ 19022 1205c E89FDFFE 		call	bswap_32
+ 19022      FF
+ 19023 12061 4589E9   		movl	%r13d, %r9d
+ 19024 12064 4589E0   		movl	%r12d, %r8d
+ 19025 12067 89D9     		movl	%ebx, %ecx
+ 19026 12069 89C2     		movl	%eax, %edx
+ 19027 1206b 488D3500 		leaq	.LC0(%rip), %rsi
+ 19027      000000
+ 19028 12072 488D3D00 		leaq	.LC1(%rip), %rdi
+ 19028      000000
+ 19029 12079 B8000000 		movl	$0, %eax
+ 19029      00
+ 19030 1207e E8000000 		call	KDbgMsg at PLT
+ 19030      00
+ 19031              	.L455:
+ 19032 12083 660F6F85 		movdqa	-8384(%rbp), %xmm0
+ 19032      40DFFFFF 
+ 19033 1208b F30F7F85 		movdqu	%xmm0, -1072(%rbp)
+ 19033      D0FBFFFF 
+ 19034              	.LBE2272:
+ 19035              	.LBB2273:
+ 19036              	.LBB2274:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 19037              		.loc 2 667 0
+ 19038 12093 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 19038      00000000 
+ 19039 1209b F30F6F8D 		movdqu	-1072(%rbp), %xmm1
+ 19039      D0FBFFFF 
+ 19040 120a3 F30F7F8D 		movdqu	%xmm1, -1040(%rbp)
+ 19040      F0FBFFFF 
+ 19041 120ab F30F7F85 		movdqu	%xmm0, -1056(%rbp)
+ 19041      E0FBFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 587
+
+
+ 19042              	.LBB2275:
+ 19043              	.LBB2276:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 19044              		.loc 2 380 0
+ 19045 120b3 F30F6F85 		movdqu	-1040(%rbp), %xmm0
+ 19045      F0FBFFFF 
+ 19046 120bb F30F7F85 		movdqu	%xmm0, -6160(%rbp)
+ 19046      F0E7FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 19047              		.loc 2 381 0
+ 19048 120c3 F30F6F85 		movdqu	-1056(%rbp), %xmm0
+ 19048      E0FBFFFF 
+ 19049 120cb F30F7F85 		movdqu	%xmm0, -6176(%rbp)
+ 19049      E0E7FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 19050              		.loc 2 383 0
+ 19051 120d3 C7850CFC 		movl	$0, -1012(%rbp)
+ 19051      FFFF0000 
+ 19051      0000
+ 19052 120dd EB5C     		jmp	.L456
+ 19053              	.L459:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 19054              		.loc 2 385 0
+ 19055 120df 8B850CFC 		movl	-1012(%rbp), %eax
+ 19055      FFFF
+ 19056 120e5 89C0     		mov	%eax, %eax
+ 19057 120e7 0FB68405 		movzbl	-6176(%rbp,%rax), %eax
+ 19057      E0E7FFFF 
+ 19058 120ef 84C0     		testb	%al, %al
+ 19059 120f1 7912     		jns	.L457
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 19060              		.loc 2 386 0
+ 19061 120f3 8B850CFC 		movl	-1012(%rbp), %eax
+ 19061      FFFF
+ 19062 120f9 89C0     		mov	%eax, %eax
+ 19063 120fb C6840500 		movb	$0, -6144(%rbp,%rax)
+ 19063      E8FFFF00 
+ 19064 12103 EB2F     		jmp	.L458
+ 19065              	.L457:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 19066              		.loc 2 388 0
+ 19067 12105 8B8D0CFC 		movl	-1012(%rbp), %ecx
+ 19067      FFFF
+ 19068 1210b 8B850CFC 		movl	-1012(%rbp), %eax
+ 19068      FFFF
+ 19069 12111 89C0     		mov	%eax, %eax
+ 19070 12113 0FB68405 		movzbl	-6176(%rbp,%rax), %eax
+ 19070      E0E7FFFF 
+ 19071 1211b 0FB6C0   		movzbl	%al, %eax
+ 19072 1211e 83E00F   		andl	$15, %eax
+ 19073 12121 4898     		cltq
+ 19074 12123 0FB69405 		movzbl	-6160(%rbp,%rax), %edx
+ 19074      F0E7FFFF 
+ 19075 1212b 89C8     		mov	%ecx, %eax
+ 19076 1212d 88940500 		movb	%dl, -6144(%rbp,%rax)
+ 19076      E8FFFF
+ 19077              	.L458:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 588
+
+
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 19078              		.loc 2 383 0
+ 19079 12134 83850CFC 		addl	$1, -1012(%rbp)
+ 19079      FFFF01
+ 19080              	.L456:
+ 19081 1213b 83BD0CFC 		cmpl	$15, -1012(%rbp)
+ 19081      FFFF0F
+ 19082 12142 769B     		jbe	.L459
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 19083              		.loc 2 391 0
+ 19084 12144 F30F6F85 		movdqu	-6144(%rbp), %xmm0
+ 19084      00E8FFFF 
+ 19085              	.LBE2276:
+ 19086              	.LBE2275:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 19087              		.loc 2 667 0
+ 19088 1214c F30F7F85 		movdqu	%xmm0, -1072(%rbp)
+ 19088      D0FBFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 19089              		.loc 2 668 0
+ 19090 12154 F30F6F85 		movdqu	-1072(%rbp), %xmm0
+ 19090      D0FBFFFF 
+ 19091              	.LBE2274:
+ 19092              	.LBE2273:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 19093              		.loc 2 1684 0
+ 19094 1215c 660F7F85 		movdqa	%xmm0, -8384(%rbp)
+ 19094      40DFFFFF 
+ 19095              	.LBB2277:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 19096              		.loc 2 1685 0
+ 19097 12164 660F6F85 		movdqa	-8384(%rbp), %xmm0
+ 19097      40DFFFFF 
+ 19098 1216c F30F7F85 		movdqu	%xmm0, -6320(%rbp)
+ 19098      50E7FFFF 
+ 19099 12174 E8000000 		call	KDbgWriterGet at PLT
+ 19099      00
+ 19100 12179 4885C0   		testq	%rax, %rax
+ 19101 1217c 7479     		je	.L461
+ 19102 1217e BF010000 		movl	$1, %edi
+ 19102      00
+ 19103 12183 E8000000 		call	KDbgCondToFlag at PLT
+ 19103      00
+ 19104 12188 4889C6   		movq	%rax, %rsi
+ 19105 1218b BF100000 		movl	$16, %edi
+ 19105      00
+ 19106 12190 E8000000 		call	KDbgTestModConds at PLT
+ 19106      00
+ 19107 12195 84C0     		testb	%al, %al
+ 19108 12197 745E     		je	.L461
+ 19109 12199 8B855CE7 		movl	-6308(%rbp), %eax
+ 19109      FFFF
+ 19110 1219f 89C7     		movl	%eax, %edi
+ 19111 121a1 E85ADEFE 		call	bswap_32
+ 19111      FF
+ 19112 121a6 4189C5   		movl	%eax, %r13d
+ 19113 121a9 8B8558E7 		movl	-6312(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 589
+
+
+ 19113      FFFF
+ 19114 121af 89C7     		movl	%eax, %edi
+ 19115 121b1 E84ADEFE 		call	bswap_32
+ 19115      FF
+ 19116 121b6 4189C4   		movl	%eax, %r12d
+ 19117 121b9 8B8554E7 		movl	-6316(%rbp), %eax
+ 19117      FFFF
+ 19118 121bf 89C7     		movl	%eax, %edi
+ 19119 121c1 E83ADEFE 		call	bswap_32
+ 19119      FF
+ 19120 121c6 89C3     		movl	%eax, %ebx
+ 19121 121c8 8B8550E7 		movl	-6320(%rbp), %eax
+ 19121      FFFF
+ 19122 121ce 89C7     		movl	%eax, %edi
+ 19123 121d0 E82BDEFE 		call	bswap_32
+ 19123      FF
+ 19124 121d5 4589E9   		movl	%r13d, %r9d
+ 19125 121d8 4589E0   		movl	%r12d, %r8d
+ 19126 121db 89D9     		movl	%ebx, %ecx
+ 19127 121dd 89C2     		movl	%eax, %edx
+ 19128 121df 488D3500 		leaq	.LC2(%rip), %rsi
+ 19128      000000
+ 19129 121e6 488D3D00 		leaq	.LC1(%rip), %rdi
+ 19129      000000
+ 19130 121ed B8000000 		movl	$0, %eax
+ 19130      00
+ 19131 121f2 E8000000 		call	KDbgMsg at PLT
+ 19131      00
+ 19132              	.L461:
+ 19133 121f7 660F6F85 		movdqa	-8384(%rbp), %xmm0
+ 19133      40DFFFFF 
+ 19134 121ff F30F7F85 		movdqu	%xmm0, -992(%rbp)
+ 19134      20FCFFFF 
+ 19135 12207 660F6F85 		movdqa	-8368(%rbp), %xmm0
+ 19135      50DFFFFF 
+ 19136 1220f F30F7F85 		movdqu	%xmm0, -1008(%rbp)
+ 19136      10FCFFFF 
+ 19137              	.LBE2277:
+ 19138              	.LBB2278:
+ 19139              	.LBB2279:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 19140              		.loc 2 178 0
+ 19141 12217 F30F6F85 		movdqu	-1008(%rbp), %xmm0
+ 19141      10FCFFFF 
+ 19142 1221f F30F6F8D 		movdqu	-992(%rbp), %xmm1
+ 19142      20FCFFFF 
+ 19143 12227 660FEFC1 		pxor	%xmm1, %xmm0
+ 19144              	.LBE2279:
+ 19145              	.LBE2278:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 19146              		.loc 2 1686 0
+ 19147 1222b 660F7F85 		movdqa	%xmm0, -8384(%rbp)
+ 19147      40DFFFFF 
+ 19148              	.LBB2280:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 19149              		.loc 2 1687 0
+ 19150 12233 660F6F85 		movdqa	-8384(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 590
+
+
+ 19150      40DFFFFF 
+ 19151 1223b F30F7F85 		movdqu	%xmm0, -6336(%rbp)
+ 19151      40E7FFFF 
+ 19152 12243 E8000000 		call	KDbgWriterGet at PLT
+ 19152      00
+ 19153 12248 4885C0   		testq	%rax, %rax
+ 19154 1224b 7479     		je	.L463
+ 19155 1224d BF010000 		movl	$1, %edi
+ 19155      00
+ 19156 12252 E8000000 		call	KDbgCondToFlag at PLT
+ 19156      00
+ 19157 12257 4889C6   		movq	%rax, %rsi
+ 19158 1225a BF100000 		movl	$16, %edi
+ 19158      00
+ 19159 1225f E8000000 		call	KDbgTestModConds at PLT
+ 19159      00
+ 19160 12264 84C0     		testb	%al, %al
+ 19161 12266 745E     		je	.L463
+ 19162 12268 8B854CE7 		movl	-6324(%rbp), %eax
+ 19162      FFFF
+ 19163 1226e 89C7     		movl	%eax, %edi
+ 19164 12270 E88BDDFE 		call	bswap_32
+ 19164      FF
+ 19165 12275 4189C5   		movl	%eax, %r13d
+ 19166 12278 8B8548E7 		movl	-6328(%rbp), %eax
+ 19166      FFFF
+ 19167 1227e 89C7     		movl	%eax, %edi
+ 19168 12280 E87BDDFE 		call	bswap_32
+ 19168      FF
+ 19169 12285 4189C4   		movl	%eax, %r12d
+ 19170 12288 8B8544E7 		movl	-6332(%rbp), %eax
+ 19170      FFFF
+ 19171 1228e 89C7     		movl	%eax, %edi
+ 19172 12290 E86BDDFE 		call	bswap_32
+ 19172      FF
+ 19173 12295 89C3     		movl	%eax, %ebx
+ 19174 12297 8B8540E7 		movl	-6336(%rbp), %eax
+ 19174      FFFF
+ 19175 1229d 89C7     		movl	%eax, %edi
+ 19176 1229f E85CDDFE 		call	bswap_32
+ 19176      FF
+ 19177 122a4 4589E9   		movl	%r13d, %r9d
+ 19178 122a7 4589E0   		movl	%r12d, %r8d
+ 19179 122aa 89D9     		movl	%ebx, %ecx
+ 19180 122ac 89C2     		movl	%eax, %edx
+ 19181 122ae 488D3500 		leaq	.LC3(%rip), %rsi
+ 19181      000000
+ 19182 122b5 488D3D00 		leaq	.LC1(%rip), %rdi
+ 19182      000000
+ 19183 122bc B8000000 		movl	$0, %eax
+ 19183      00
+ 19184 122c1 E8000000 		call	KDbgMsg at PLT
+ 19184      00
+ 19185              	.L463:
+ 19186 122c6 660F6F85 		movdqa	-8384(%rbp), %xmm0
+ 19186      40DFFFFF 
+ 19187 122ce F30F7F85 		movdqu	%xmm0, -976(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 591
+
+
+ 19187      30FCFFFF 
+ 19188              	.LBE2280:
+ 19189              	.LBB2281:
+ 19190              	.LBB2282:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 19191              		.loc 2 1357 0
+ 19192 122d6 F30F6F85 		movdqu	-976(%rbp), %xmm0
+ 19192      30FCFFFF 
+ 19193 122de F30F7F85 		movdqu	%xmm0, -6128(%rbp)
+ 19193      10E8FFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 19194              		.loc 2 1358 0
+ 19195 122e6 8B851CE8 		movl	-6116(%rbp), %eax
+ 19195      FFFF
+ 19196 122ec 898518E8 		movl	%eax, -6120(%rbp)
+ 19196      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 19197              		.loc 2 1359 0
+ 19198 122f2 8B851CE8 		movl	-6116(%rbp), %eax
+ 19198      FFFF
+ 19199 122f8 898514E8 		movl	%eax, -6124(%rbp)
+ 19199      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 19200              		.loc 2 1360 0
+ 19201 122fe 8B851CE8 		movl	-6116(%rbp), %eax
+ 19201      FFFF
+ 19202 12304 898510E8 		movl	%eax, -6128(%rbp)
+ 19202      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 19203              		.loc 2 1361 0
+ 19204 1230a F30F6F85 		movdqu	-6128(%rbp), %xmm0
+ 19204      10E8FFFF 
+ 19205              	.LBE2282:
+ 19206              	.LBE2281:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 19207              		.loc 2 1688 0
+ 19208 12312 660F7F85 		movdqa	%xmm0, -8384(%rbp)
+ 19208      40DFFFFF 
+ 19209              	.LBB2283:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 19210              		.loc 2 1689 0
+ 19211 1231a 660F6F85 		movdqa	-8384(%rbp), %xmm0
+ 19211      40DFFFFF 
+ 19212 12322 F30F7F85 		movdqu	%xmm0, -6352(%rbp)
+ 19212      30E7FFFF 
+ 19213 1232a E8000000 		call	KDbgWriterGet at PLT
+ 19213      00
+ 19214 1232f 4885C0   		testq	%rax, %rax
+ 19215 12332 7479     		je	.L465
+ 19216 12334 BF010000 		movl	$1, %edi
+ 19216      00
+ 19217 12339 E8000000 		call	KDbgCondToFlag at PLT
+ 19217      00
+ 19218 1233e 4889C6   		movq	%rax, %rsi
+ 19219 12341 BF100000 		movl	$16, %edi
+ 19219      00
+ 19220 12346 E8000000 		call	KDbgTestModConds at PLT
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 592
+
+
+ 19220      00
+ 19221 1234b 84C0     		testb	%al, %al
+ 19222 1234d 745E     		je	.L465
+ 19223 1234f 8B853CE7 		movl	-6340(%rbp), %eax
+ 19223      FFFF
+ 19224 12355 89C7     		movl	%eax, %edi
+ 19225 12357 E8A4DCFE 		call	bswap_32
+ 19225      FF
+ 19226 1235c 4189C5   		movl	%eax, %r13d
+ 19227 1235f 8B8538E7 		movl	-6344(%rbp), %eax
+ 19227      FFFF
+ 19228 12365 89C7     		movl	%eax, %edi
+ 19229 12367 E894DCFE 		call	bswap_32
+ 19229      FF
+ 19230 1236c 4189C4   		movl	%eax, %r12d
+ 19231 1236f 8B8534E7 		movl	-6348(%rbp), %eax
+ 19231      FFFF
+ 19232 12375 89C7     		movl	%eax, %edi
+ 19233 12377 E884DCFE 		call	bswap_32
+ 19233      FF
+ 19234 1237c 89C3     		movl	%eax, %ebx
+ 19235 1237e 8B8530E7 		movl	-6352(%rbp), %eax
+ 19235      FFFF
+ 19236 12384 89C7     		movl	%eax, %edi
+ 19237 12386 E875DCFE 		call	bswap_32
+ 19237      FF
+ 19238 1238b 4589E9   		movl	%r13d, %r9d
+ 19239 1238e 4589E0   		movl	%r12d, %r8d
+ 19240 12391 89D9     		movl	%ebx, %ecx
+ 19241 12393 89C2     		movl	%eax, %edx
+ 19242 12395 488D3500 		leaq	.LC4(%rip), %rsi
+ 19242      000000
+ 19243 1239c 488D3D00 		leaq	.LC1(%rip), %rdi
+ 19243      000000
+ 19244 123a3 B8000000 		movl	$0, %eax
+ 19244      00
+ 19245 123a8 E8000000 		call	KDbgMsg at PLT
+ 19245      00
+ 19246              	.L465:
+ 19247              	.LBE2283:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 19248              		.loc 2 1690 0
+ 19249 123ad 660F6F85 		movdqa	-8384(%rbp), %xmm0
+ 19249      40DFFFFF 
+ 19250              	.LBE2249:
+ 19251              	.LBE2248:
+1936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(12,0x20);   /* k48 : k49 : k50 : k51 */
+ 19252              		.loc 2 1936 0
+ 19253 123b5 F30F7F85 		movdqu	%xmm0, -5664(%rbp)
+ 19253      E0E9FFFF 
+ 19254 123bd F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 19254      C0E9FFFF 
+ 19255 123c5 F30F7F85 		movdqu	%xmm0, -960(%rbp)
+ 19255      40FCFFFF 
+ 19256              	.LBB2284:
+ 19257              	.LBB2285:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 593
+
+
+ 19258              		.loc 2 1565 0
+ 19259 123cd F30F6F85 		movdqu	-960(%rbp), %xmm0
+ 19259      40FCFFFF 
+ 19260 123d5 660F7F85 		movdqa	%xmm0, -8336(%rbp)
+ 19260      70DFFFFF 
+ 19261 123dd 660F6F85 		movdqa	-8336(%rbp), %xmm0
+ 19261      70DFFFFF 
+ 19262 123e5 F30F7F85 		movdqu	%xmm0, -944(%rbp)
+ 19262      50FCFFFF 
+ 19263              	.LBB2286:
+ 19264              	.LBB2287:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 19265              		.loc 2 1282 0
+ 19266 123ed F30F6F85 		movdqu	-944(%rbp), %xmm0
+ 19266      50FCFFFF 
+ 19267 123f5 F30F7F85 		movdqu	%xmm0, -6112(%rbp)
+ 19267      20E8FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 19268              		.loc 2 1283 0
+ 19269 123fd 8B8528E8 		movl	-6104(%rbp), %eax
+ 19269      FFFF
+ 19270 12403 89852CE8 		movl	%eax, -6100(%rbp)
+ 19270      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 19271              		.loc 2 1284 0
+ 19272 12409 8B8524E8 		movl	-6108(%rbp), %eax
+ 19272      FFFF
+ 19273 1240f 898528E8 		movl	%eax, -6104(%rbp)
+ 19273      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 19274              		.loc 2 1285 0
+ 19275 12415 8B8520E8 		movl	-6112(%rbp), %eax
+ 19275      FFFF
+ 19276 1241b 898524E8 		movl	%eax, -6108(%rbp)
+ 19276      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 19277              		.loc 2 1286 0
+ 19278 12421 C78520E8 		movl	$0, -6112(%rbp)
+ 19278      FFFF0000 
+ 19278      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 19279              		.loc 2 1287 0
+ 19280 1242b F30F6F85 		movdqu	-6112(%rbp), %xmm0
+ 19280      20E8FFFF 
+ 19281              	.LBE2287:
+ 19282              	.LBE2286:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 19283              		.loc 2 1567 0
+ 19284 12433 660F7F85 		movdqa	%xmm0, -8336(%rbp)
+ 19284      70DFFFFF 
+ 19285 1243b 660F6F85 		movdqa	-8336(%rbp), %xmm0
+ 19285      70DFFFFF 
+ 19286 12443 660FEF85 		pxor	-960(%rbp), %xmm0
+ 19286      40FCFFFF 
+ 19287 1244b F30F7F85 		movdqu	%xmm0, -960(%rbp)
+ 19287      40FCFFFF 
+ 19288 12453 660F6F85 		movdqa	-8336(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 594
+
+
+ 19288      70DFFFFF 
+ 19289 1245b F30F7F85 		movdqu	%xmm0, -928(%rbp)
+ 19289      60FCFFFF 
+ 19290              	.LBB2288:
+ 19291              	.LBB2289:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 19292              		.loc 2 1282 0
+ 19293 12463 F30F6F85 		movdqu	-928(%rbp), %xmm0
+ 19293      60FCFFFF 
+ 19294 1246b F30F7F85 		movdqu	%xmm0, -6096(%rbp)
+ 19294      30E8FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 19295              		.loc 2 1283 0
+ 19296 12473 8B8538E8 		movl	-6088(%rbp), %eax
+ 19296      FFFF
+ 19297 12479 89853CE8 		movl	%eax, -6084(%rbp)
+ 19297      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 19298              		.loc 2 1284 0
+ 19299 1247f 8B8534E8 		movl	-6092(%rbp), %eax
+ 19299      FFFF
+ 19300 12485 898538E8 		movl	%eax, -6088(%rbp)
+ 19300      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 19301              		.loc 2 1285 0
+ 19302 1248b 8B8530E8 		movl	-6096(%rbp), %eax
+ 19302      FFFF
+ 19303 12491 898534E8 		movl	%eax, -6092(%rbp)
+ 19303      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 19304              		.loc 2 1286 0
+ 19305 12497 C78530E8 		movl	$0, -6096(%rbp)
+ 19305      FFFF0000 
+ 19305      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 19306              		.loc 2 1287 0
+ 19307 124a1 F30F6F85 		movdqu	-6096(%rbp), %xmm0
+ 19307      30E8FFFF 
+ 19308              	.LBE2289:
+ 19309              	.LBE2288:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 19310              		.loc 2 1568 0
+ 19311 124a9 660F7F85 		movdqa	%xmm0, -8336(%rbp)
+ 19311      70DFFFFF 
+ 19312 124b1 660F6F85 		movdqa	-8336(%rbp), %xmm0
+ 19312      70DFFFFF 
+ 19313 124b9 660FEF85 		pxor	-960(%rbp), %xmm0
+ 19313      40FCFFFF 
+ 19314 124c1 F30F7F85 		movdqu	%xmm0, -960(%rbp)
+ 19314      40FCFFFF 
+ 19315 124c9 660F6F85 		movdqa	-8336(%rbp), %xmm0
+ 19315      70DFFFFF 
+ 19316 124d1 F30F7F85 		movdqu	%xmm0, -912(%rbp)
+ 19316      70FCFFFF 
+ 19317              	.LBB2290:
+ 19318              	.LBB2291:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 595
+
+
+ 19319              		.loc 2 1282 0
+ 19320 124d9 F30F6F85 		movdqu	-912(%rbp), %xmm0
+ 19320      70FCFFFF 
+ 19321 124e1 F30F7F85 		movdqu	%xmm0, -6080(%rbp)
+ 19321      40E8FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 19322              		.loc 2 1283 0
+ 19323 124e9 8B8548E8 		movl	-6072(%rbp), %eax
+ 19323      FFFF
+ 19324 124ef 89854CE8 		movl	%eax, -6068(%rbp)
+ 19324      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 19325              		.loc 2 1284 0
+ 19326 124f5 8B8544E8 		movl	-6076(%rbp), %eax
+ 19326      FFFF
+ 19327 124fb 898548E8 		movl	%eax, -6072(%rbp)
+ 19327      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 19328              		.loc 2 1285 0
+ 19329 12501 8B8540E8 		movl	-6080(%rbp), %eax
+ 19329      FFFF
+ 19330 12507 898544E8 		movl	%eax, -6076(%rbp)
+ 19330      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 19331              		.loc 2 1286 0
+ 19332 1250d C78540E8 		movl	$0, -6080(%rbp)
+ 19332      FFFF0000 
+ 19332      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 19333              		.loc 2 1287 0
+ 19334 12517 F30F6F85 		movdqu	-6080(%rbp), %xmm0
+ 19334      40E8FFFF 
+ 19335              	.LBE2291:
+ 19336              	.LBE2290:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 19337              		.loc 2 1569 0
+ 19338 1251f 660F7F85 		movdqa	%xmm0, -8336(%rbp)
+ 19338      70DFFFFF 
+ 19339 12527 660F6F85 		movdqa	-8336(%rbp), %xmm0
+ 19339      70DFFFFF 
+ 19340 1252f 660FEF85 		pxor	-960(%rbp), %xmm0
+ 19340      40FCFFFF 
+ 19341 12537 F30F7F85 		movdqu	%xmm0, -960(%rbp)
+ 19341      40FCFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 19342              		.loc 2 1571 0
+ 19343 1253f F30F6F85 		movdqu	-960(%rbp), %xmm0
+ 19343      40FCFFFF 
+ 19344              	.LBE2285:
+ 19345              	.LBE2284:
+1936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(12,0x20);   /* k48 : k49 : k50 : k51 */
+ 19346              		.loc 2 1936 0
+ 19347 12547 F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 19347      C0E9FFFF 
+ 19348 1254f F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 19348      C0E9FFFF 
+ 19349 12557 F30F7F85 		movdqu	%xmm0, -880(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 596
+
+
+ 19349      90FCFFFF 
+ 19350 1255f F30F6F85 		movdqu	-5664(%rbp), %xmm0
+ 19350      E0E9FFFF 
+ 19351 12567 F30F7F85 		movdqu	%xmm0, -896(%rbp)
+ 19351      80FCFFFF 
+ 19352              	.LBB2292:
+ 19353              	.LBB2293:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 19354              		.loc 2 178 0
+ 19355 1256f F30F6F85 		movdqu	-896(%rbp), %xmm0
+ 19355      80FCFFFF 
+ 19356 12577 F30F6F8D 		movdqu	-880(%rbp), %xmm1
+ 19356      90FCFFFF 
+ 19357 1257f 660FEFC1 		pxor	%xmm1, %xmm0
+ 19358              	.LBE2293:
+ 19359              	.LBE2292:
+1936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(12,0x20);   /* k48 : k49 : k50 : k51 */
+ 19360              		.loc 2 1936 0
+ 19361 12583 F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 19361      C0E9FFFF 
+ 19362 1258b 488B85D8 		movq	-8232(%rbp), %rax
+ 19362      DFFFFF
+ 19363 12592 4805C000 		addq	$192, %rax
+ 19363      0000
+ 19364 12598 F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 19364      C0E9FFFF 
+ 19365 125a0 F30F7F00 		movdqu	%xmm0, (%rax)
+ 19366 125a4 F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 19366      C0E9FFFF 
+ 19367 125ac F30F7F85 		movdqu	%xmm0, -864(%rbp)
+ 19367      A0FCFFFF 
+ 19368              	.LBB2294:
+ 19369              	.LBB2295:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 19370              		.loc 2 1656 0
+ 19371 125b4 F30F6F85 		movdqu	-864(%rbp), %xmm0
+ 19371      A0FCFFFF 
+ 19372 125bc F30F7F85 		movdqu	%xmm0, -6048(%rbp)
+ 19372      60E8FFFF 
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 19373              		.loc 2 1657 0
+ 19374 125c4 8B856CE8 		movl	-6036(%rbp), %eax
+ 19374      FFFF
+ 19375 125ca 8985B8FC 		movl	%eax, -840(%rbp)
+ 19375      FFFF
+ 19376              	.LBB2296:
+ 19377              	.LBB2297:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 19378              		.loc 2 740 0
+ 19379 125d0 8B85B8FC 		movl	-840(%rbp), %eax
+ 19379      FFFF
+ 19380 125d6 898550E8 		movl	%eax, -6064(%rbp)
+ 19380      FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 19381              		.loc 2 741 0
+ 19382 125dc C785BCFC 		movl	$0, -836(%rbp)
+ 19382      FFFF0000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 597
+
+
+ 19382      0000
+ 19383 125e6 EB36     		jmp	.L466
+ 19384              	.L467:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 19385              		.loc 2 742 0
+ 19386 125e8 8B8DBCFC 		movl	-836(%rbp), %ecx
+ 19386      FFFF
+ 19387 125ee 8B85BCFC 		movl	-836(%rbp), %eax
+ 19387      FFFF
+ 19388 125f4 89C0     		mov	%eax, %eax
+ 19389 125f6 0FB68405 		movzbl	-6064(%rbp,%rax), %eax
+ 19389      50E8FFFF 
+ 19390 125fe 0FB6C0   		movzbl	%al, %eax
+ 19391 12601 89C2     		mov	%eax, %edx
+ 19392 12603 488D0500 		leaq	KAESBlockCipherVecRijndaelSBox(%rip), %rax
+ 19392      000000
+ 19393 1260a 0FB61402 		movzbl	(%rdx,%rax), %edx
+ 19394 1260e 89C8     		mov	%ecx, %eax
+ 19395 12610 88940550 		movb	%dl, -6064(%rbp,%rax)
+ 19395      E8FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 19396              		.loc 2 741 0
+ 19397 12617 8385BCFC 		addl	$1, -836(%rbp)
+ 19397      FFFF01
+ 19398              	.L466:
+ 19399 1261e 83BDBCFC 		cmpl	$3, -836(%rbp)
+ 19399      FFFF03
+ 19400 12625 76C1     		jbe	.L467
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 19401              		.loc 2 743 0
+ 19402 12627 8B8550E8 		movl	-6064(%rbp), %eax
+ 19402      FFFF
+ 19403              	.LBE2297:
+ 19404              	.LBE2296:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 19405              		.loc 2 1657 0
+ 19406 1262d 8985B4FC 		movl	%eax, -844(%rbp)
+ 19406      FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 19407              		.loc 2 1659 0
+ 19408 12633 8B85B4FC 		movl	-844(%rbp), %eax
+ 19408      FFFF
+ 19409 12639 89856CE8 		movl	%eax, -6036(%rbp)
+ 19409      FFFF
+ 19410 1263f 8B856CE8 		movl	-6036(%rbp), %eax
+ 19410      FFFF
+ 19411 12645 898568E8 		movl	%eax, -6040(%rbp)
+ 19411      FFFF
+ 19412 1264b 8B8568E8 		movl	-6040(%rbp), %eax
+ 19412      FFFF
+ 19413 12651 898564E8 		movl	%eax, -6044(%rbp)
+ 19413      FFFF
+ 19414 12657 8B8564E8 		movl	-6044(%rbp), %eax
+ 19414      FFFF
+ 19415 1265d 898560E8 		movl	%eax, -6048(%rbp)
+ 19415      FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 598
+
+
+ 19416              		.loc 2 1660 0
+ 19417 12663 F30F6F85 		movdqu	-6048(%rbp), %xmm0
+ 19417      60E8FFFF 
+ 19418              	.LBE2295:
+ 19419              	.LBE2294:
+1937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(13);        /* k52 : k53 : k54 : k55 */
+ 19420              		.loc 2 1937 0
+ 19421 1266b F30F7F85 		movdqu	%xmm0, -5664(%rbp)
+ 19421      E0E9FFFF 
+ 19422 12673 F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 19422      D0E9FFFF 
+ 19423 1267b F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 19423      C0FCFFFF 
+ 19424              	.LBB2298:
+ 19425              	.LBB2299:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 19426              		.loc 2 1565 0
+ 19427 12683 F30F6F85 		movdqu	-832(%rbp), %xmm0
+ 19427      C0FCFFFF 
+ 19428 1268b 660F7F85 		movdqa	%xmm0, -8320(%rbp)
+ 19428      80DFFFFF 
+ 19429 12693 660F6F85 		movdqa	-8320(%rbp), %xmm0
+ 19429      80DFFFFF 
+ 19430 1269b F30F7F85 		movdqu	%xmm0, -816(%rbp)
+ 19430      D0FCFFFF 
+ 19431              	.LBB2300:
+ 19432              	.LBB2301:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 19433              		.loc 2 1282 0
+ 19434 126a3 F30F6F85 		movdqu	-816(%rbp), %xmm0
+ 19434      D0FCFFFF 
+ 19435 126ab F30F7F85 		movdqu	%xmm0, -6032(%rbp)
+ 19435      70E8FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 19436              		.loc 2 1283 0
+ 19437 126b3 8B8578E8 		movl	-6024(%rbp), %eax
+ 19437      FFFF
+ 19438 126b9 89857CE8 		movl	%eax, -6020(%rbp)
+ 19438      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 19439              		.loc 2 1284 0
+ 19440 126bf 8B8574E8 		movl	-6028(%rbp), %eax
+ 19440      FFFF
+ 19441 126c5 898578E8 		movl	%eax, -6024(%rbp)
+ 19441      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 19442              		.loc 2 1285 0
+ 19443 126cb 8B8570E8 		movl	-6032(%rbp), %eax
+ 19443      FFFF
+ 19444 126d1 898574E8 		movl	%eax, -6028(%rbp)
+ 19444      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 19445              		.loc 2 1286 0
+ 19446 126d7 C78570E8 		movl	$0, -6032(%rbp)
+ 19446      FFFF0000 
+ 19446      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 599
+
+
+ 19447              		.loc 2 1287 0
+ 19448 126e1 F30F6F85 		movdqu	-6032(%rbp), %xmm0
+ 19448      70E8FFFF 
+ 19449              	.LBE2301:
+ 19450              	.LBE2300:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 19451              		.loc 2 1567 0
+ 19452 126e9 660F7F85 		movdqa	%xmm0, -8320(%rbp)
+ 19452      80DFFFFF 
+ 19453 126f1 660F6F85 		movdqa	-8320(%rbp), %xmm0
+ 19453      80DFFFFF 
+ 19454 126f9 660FEF85 		pxor	-832(%rbp), %xmm0
+ 19454      C0FCFFFF 
+ 19455 12701 F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 19455      C0FCFFFF 
+ 19456 12709 660F6F85 		movdqa	-8320(%rbp), %xmm0
+ 19456      80DFFFFF 
+ 19457 12711 F30F7F85 		movdqu	%xmm0, -800(%rbp)
+ 19457      E0FCFFFF 
+ 19458              	.LBB2302:
+ 19459              	.LBB2303:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 19460              		.loc 2 1282 0
+ 19461 12719 F30F6F85 		movdqu	-800(%rbp), %xmm0
+ 19461      E0FCFFFF 
+ 19462 12721 F30F7F85 		movdqu	%xmm0, -6016(%rbp)
+ 19462      80E8FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 19463              		.loc 2 1283 0
+ 19464 12729 8B8588E8 		movl	-6008(%rbp), %eax
+ 19464      FFFF
+ 19465 1272f 89858CE8 		movl	%eax, -6004(%rbp)
+ 19465      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 19466              		.loc 2 1284 0
+ 19467 12735 8B8584E8 		movl	-6012(%rbp), %eax
+ 19467      FFFF
+ 19468 1273b 898588E8 		movl	%eax, -6008(%rbp)
+ 19468      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 19469              		.loc 2 1285 0
+ 19470 12741 8B8580E8 		movl	-6016(%rbp), %eax
+ 19470      FFFF
+ 19471 12747 898584E8 		movl	%eax, -6012(%rbp)
+ 19471      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 19472              		.loc 2 1286 0
+ 19473 1274d C78580E8 		movl	$0, -6016(%rbp)
+ 19473      FFFF0000 
+ 19473      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 19474              		.loc 2 1287 0
+ 19475 12757 F30F6F85 		movdqu	-6016(%rbp), %xmm0
+ 19475      80E8FFFF 
+ 19476              	.LBE2303:
+ 19477              	.LBE2302:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 600
+
+
+ 19478              		.loc 2 1568 0
+ 19479 1275f 660F7F85 		movdqa	%xmm0, -8320(%rbp)
+ 19479      80DFFFFF 
+ 19480 12767 660F6F85 		movdqa	-8320(%rbp), %xmm0
+ 19480      80DFFFFF 
+ 19481 1276f 660FEF85 		pxor	-832(%rbp), %xmm0
+ 19481      C0FCFFFF 
+ 19482 12777 F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 19482      C0FCFFFF 
+ 19483 1277f 660F6F85 		movdqa	-8320(%rbp), %xmm0
+ 19483      80DFFFFF 
+ 19484 12787 F30F7F85 		movdqu	%xmm0, -784(%rbp)
+ 19484      F0FCFFFF 
+ 19485              	.LBB2304:
+ 19486              	.LBB2305:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 19487              		.loc 2 1282 0
+ 19488 1278f F30F6F85 		movdqu	-784(%rbp), %xmm0
+ 19488      F0FCFFFF 
+ 19489 12797 F30F7F85 		movdqu	%xmm0, -6000(%rbp)
+ 19489      90E8FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 19490              		.loc 2 1283 0
+ 19491 1279f 8B8598E8 		movl	-5992(%rbp), %eax
+ 19491      FFFF
+ 19492 127a5 89859CE8 		movl	%eax, -5988(%rbp)
+ 19492      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 19493              		.loc 2 1284 0
+ 19494 127ab 8B8594E8 		movl	-5996(%rbp), %eax
+ 19494      FFFF
+ 19495 127b1 898598E8 		movl	%eax, -5992(%rbp)
+ 19495      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 19496              		.loc 2 1285 0
+ 19497 127b7 8B8590E8 		movl	-6000(%rbp), %eax
+ 19497      FFFF
+ 19498 127bd 898594E8 		movl	%eax, -5996(%rbp)
+ 19498      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 19499              		.loc 2 1286 0
+ 19500 127c3 C78590E8 		movl	$0, -6000(%rbp)
+ 19500      FFFF0000 
+ 19500      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 19501              		.loc 2 1287 0
+ 19502 127cd F30F6F85 		movdqu	-6000(%rbp), %xmm0
+ 19502      90E8FFFF 
+ 19503              	.LBE2305:
+ 19504              	.LBE2304:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 19505              		.loc 2 1569 0
+ 19506 127d5 660F7F85 		movdqa	%xmm0, -8320(%rbp)
+ 19506      80DFFFFF 
+ 19507 127dd 660F6F85 		movdqa	-8320(%rbp), %xmm0
+ 19507      80DFFFFF 
+ 19508 127e5 660FEF85 		pxor	-832(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 601
+
+
+ 19508      C0FCFFFF 
+ 19509 127ed F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 19509      C0FCFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 19510              		.loc 2 1571 0
+ 19511 127f5 F30F6F85 		movdqu	-832(%rbp), %xmm0
+ 19511      C0FCFFFF 
+ 19512              	.LBE2299:
+ 19513              	.LBE2298:
+1937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(13);        /* k52 : k53 : k54 : k55 */
+ 19514              		.loc 2 1937 0
+ 19515 127fd F30F7F85 		movdqu	%xmm0, -5680(%rbp)
+ 19515      D0E9FFFF 
+ 19516 12805 F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 19516      D0E9FFFF 
+ 19517 1280d F30F7F85 		movdqu	%xmm0, -752(%rbp)
+ 19517      10FDFFFF 
+ 19518 12815 F30F6F85 		movdqu	-5664(%rbp), %xmm0
+ 19518      E0E9FFFF 
+ 19519 1281d F30F7F85 		movdqu	%xmm0, -768(%rbp)
+ 19519      00FDFFFF 
+ 19520              	.LBB2306:
+ 19521              	.LBB2307:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 19522              		.loc 2 178 0
+ 19523 12825 F30F6F85 		movdqu	-768(%rbp), %xmm0
+ 19523      00FDFFFF 
+ 19524 1282d F30F6F8D 		movdqu	-752(%rbp), %xmm1
+ 19524      10FDFFFF 
+ 19525 12835 660FEFC1 		pxor	%xmm1, %xmm0
+ 19526              	.LBE2307:
+ 19527              	.LBE2306:
+1937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(13);        /* k52 : k53 : k54 : k55 */
+ 19528              		.loc 2 1937 0
+ 19529 12839 F30F7F85 		movdqu	%xmm0, -5680(%rbp)
+ 19529      D0E9FFFF 
+ 19530 12841 488B85D8 		movq	-8232(%rbp), %rax
+ 19530      DFFFFF
+ 19531 12848 4805D000 		addq	$208, %rax
+ 19531      0000
+ 19532 1284e F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 19532      D0E9FFFF 
+ 19533 12856 F30F7F00 		movdqu	%xmm0, (%rax)
+ 19534 1285a F30F6F85 		movdqu	-5680(%rbp), %xmm0
+ 19534      D0E9FFFF 
+ 19535 12862 F30F7F85 		movdqu	%xmm0, -720(%rbp)
+ 19535      30FDFFFF 
+ 19536              	.LBB2308:
+ 19537              	.LBB2309:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 19538              		.loc 2 1681 0
+ 19539 1286a B8400000 		movl	$64, %eax
+ 19539      00
+ 19540 1286f 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 19540      00000000 
+ 19541 12877 F30F7F85 		movdqu	%xmm0, -688(%rbp)
+ 19541      50FDFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 602
+
+
+ 19542 1287f 89854CFD 		movl	%eax, -692(%rbp)
+ 19542      FFFF
+ 19543              	.LBB2310:
+ 19544              	.LBB2311:
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 19545              		.loc 2 522 0
+ 19546 12885 F30F6F85 		movdqu	-688(%rbp), %xmm0
+ 19546      50FDFFFF 
+ 19547 1288d F30F7F85 		movdqu	%xmm0, -5920(%rbp)
+ 19547      E0E8FFFF 
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 19548              		.loc 2 523 0
+ 19549 12895 B8030000 		movl	$3, %eax
+ 19549      00
+ 19550 1289a 4898     		cltq
+ 19551 1289c 8B954CFD 		movl	-692(%rbp), %edx
+ 19551      FFFF
+ 19552 128a2 899485E0 		movl	%edx, -5920(%rbp,%rax,4)
+ 19552      E8FFFF
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 19553              		.loc 2 524 0
+ 19554 128a9 F30F6F85 		movdqu	-5920(%rbp), %xmm0
+ 19554      E0E8FFFF 
+ 19555 128b1 F30F7F85 		movdqu	%xmm0, -688(%rbp)
+ 19555      50FDFFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 19556              		.loc 2 526 0
+ 19557 128b9 F30F6F85 		movdqu	-688(%rbp), %xmm0
+ 19557      50FDFFFF 
+ 19558              	.LBE2311:
+ 19559              	.LBE2310:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 19560              		.loc 2 1681 0
+ 19561 128c1 660F7F85 		movdqa	%xmm0, -8288(%rbp)
+ 19561      A0DFFFFF 
+ 19562 128c9 F30F6F85 		movdqu	-720(%rbp), %xmm0
+ 19562      30FDFFFF 
+ 19563 128d1 F30F7F85 		movdqu	%xmm0, -672(%rbp)
+ 19563      60FDFFFF 
+ 19564 128d9 F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 19564      60FDFFFF 
+ 19565 128e1 F30F7F85 		movdqu	%xmm0, -640(%rbp)
+ 19565      80FDFFFF 
+ 19566 128e9 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 19566      000000
+ 19567 128f0 48898578 		movq	%rax, -648(%rbp)
+ 19567      FDFFFF
+ 19568              	.LBB2312:
+ 19569              	.LBB2313:
+ 19570              	.LBB2314:
+ 19571              	.LBB2315:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 19572              		.loc 2 851 0
+ 19573 128f7 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 19573      00000000 
+ 19574 128ff F30F7F85 		movdqu	%xmm0, -608(%rbp)
+ 19574      A0FDFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 603
+
+
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 19575              		.loc 2 854 0
+ 19576 12907 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 19576      00000000 
+ 19577 1290f F30F6F8D 		movdqu	-640(%rbp), %xmm1
+ 19577      80FDFFFF 
+ 19578 12917 F30F7F8D 		movdqu	%xmm1, -528(%rbp)
+ 19578      F0FDFFFF 
+ 19579 1291f F30F7F85 		movdqu	%xmm0, -544(%rbp)
+ 19579      E0FDFFFF 
+ 19580              	.LBB2316:
+ 19581              	.LBB2317:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 19582              		.loc 2 206 0
+ 19583 12927 F30F6F85 		movdqu	-544(%rbp), %xmm0
+ 19583      E0FDFFFF 
+ 19584 1292f F30F6F8D 		movdqu	-528(%rbp), %xmm1
+ 19584      F0FDFFFF 
+ 19585 12937 660FDBC1 		pand	%xmm1, %xmm0
+ 19586              	.LBE2317:
+ 19587              	.LBE2316:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 19588              		.loc 2 854 0
+ 19589 1293b F30F7F85 		movdqu	%xmm0, -560(%rbp)
+ 19589      D0FDFFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 19590              		.loc 2 862 0
+ 19591 12943 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 19591      00000000 
+ 19592 1294b F30F6F8D 		movdqu	-640(%rbp), %xmm1
+ 19592      80FDFFFF 
+ 19593 12953 F30F7F8D 		movdqu	%xmm1, -496(%rbp)
+ 19593      10FEFFFF 
+ 19594 1295b F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 19594      00FEFFFF 
+ 19595              	.LBB2318:
+ 19596              		.loc 2 2642 0
+ 19597 12963 0FB68510 		movzbl	-496(%rbp), %eax
+ 19597      FEFFFF
+ 19598 1296a 0FB69500 		movzbl	-512(%rbp), %edx
+ 19598      FEFFFF
+ 19599 12971 0FB6C0   		movzbl	%al, %eax
+ 19600 12974 6689853E 		movw	%ax, -8898(%rbp)
+ 19600      DDFFFF
+ 19601 1297b 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 19601      DDFFFF
+ 19602 12982 F6F2     		divb	%dl
+ 19603 12984 4189C7   		movl	%eax, %r15d
+ 19604 12987 0FB68511 		movzbl	-495(%rbp), %eax
+ 19604      FEFFFF
+ 19605 1298e 0FB69501 		movzbl	-511(%rbp), %edx
+ 19605      FEFFFF
+ 19606 12995 0FB6C0   		movzbl	%al, %eax
+ 19607 12998 6689853E 		movw	%ax, -8898(%rbp)
+ 19607      DDFFFF
+ 19608 1299f 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 19608      DDFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 604
+
+
+ 19609 129a6 F6F2     		divb	%dl
+ 19610 129a8 8885BFDF 		movb	%al, -8257(%rbp)
+ 19610      FFFF
+ 19611 129ae 0FB68512 		movzbl	-494(%rbp), %eax
+ 19611      FEFFFF
+ 19612 129b5 0FB69502 		movzbl	-510(%rbp), %edx
+ 19612      FEFFFF
+ 19613 129bc 0FB6C0   		movzbl	%al, %eax
+ 19614 129bf 6689853E 		movw	%ax, -8898(%rbp)
+ 19614      DDFFFF
+ 19615 129c6 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 19615      DDFFFF
+ 19616 129cd F6F2     		divb	%dl
+ 19617 129cf 8885BEDF 		movb	%al, -8258(%rbp)
+ 19617      FFFF
+ 19618 129d5 0FB68513 		movzbl	-493(%rbp), %eax
+ 19618      FEFFFF
+ 19619 129dc 0FB69503 		movzbl	-509(%rbp), %edx
+ 19619      FEFFFF
+ 19620 129e3 0FB6C0   		movzbl	%al, %eax
+ 19621 129e6 6689853E 		movw	%ax, -8898(%rbp)
+ 19621      DDFFFF
+ 19622 129ed 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 19622      DDFFFF
+ 19623 129f4 F6F2     		divb	%dl
+ 19624 129f6 8885BDDF 		movb	%al, -8259(%rbp)
+ 19624      FFFF
+ 19625 129fc 0FB68514 		movzbl	-492(%rbp), %eax
+ 19625      FEFFFF
+ 19626 12a03 0FB69504 		movzbl	-508(%rbp), %edx
+ 19626      FEFFFF
+ 19627 12a0a 0FB6C0   		movzbl	%al, %eax
+ 19628 12a0d 6689853E 		movw	%ax, -8898(%rbp)
+ 19628      DDFFFF
+ 19629 12a14 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 19629      DDFFFF
+ 19630 12a1b F6F2     		divb	%dl
+ 19631 12a1d 8885BCDF 		movb	%al, -8260(%rbp)
+ 19631      FFFF
+ 19632 12a23 0FB68515 		movzbl	-491(%rbp), %eax
+ 19632      FEFFFF
+ 19633 12a2a 0FB69505 		movzbl	-507(%rbp), %edx
+ 19633      FEFFFF
+ 19634 12a31 0FB6C0   		movzbl	%al, %eax
+ 19635 12a34 6689853E 		movw	%ax, -8898(%rbp)
+ 19635      DDFFFF
+ 19636 12a3b 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 19636      DDFFFF
+ 19637 12a42 F6F2     		divb	%dl
+ 19638 12a44 4189C1   		movl	%eax, %r9d
+ 19639 12a47 0FB68516 		movzbl	-490(%rbp), %eax
+ 19639      FEFFFF
+ 19640 12a4e 0FB69506 		movzbl	-506(%rbp), %edx
+ 19640      FEFFFF
+ 19641 12a55 0FB6C0   		movzbl	%al, %eax
+ 19642 12a58 6689853E 		movw	%ax, -8898(%rbp)
+ 19642      DDFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 605
+
+
+ 19643 12a5f 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 19643      DDFFFF
+ 19644 12a66 F6F2     		divb	%dl
+ 19645 12a68 89C7     		movl	%eax, %edi
+ 19646 12a6a 0FB68517 		movzbl	-489(%rbp), %eax
+ 19646      FEFFFF
+ 19647 12a71 0FB69507 		movzbl	-505(%rbp), %edx
+ 19647      FEFFFF
+ 19648 12a78 0FB6C0   		movzbl	%al, %eax
+ 19649 12a7b 6689853E 		movw	%ax, -8898(%rbp)
+ 19649      DDFFFF
+ 19650 12a82 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 19650      DDFFFF
+ 19651 12a89 F6F2     		divb	%dl
+ 19652 12a8b 89C3     		movl	%eax, %ebx
+ 19653 12a8d 0FB68518 		movzbl	-488(%rbp), %eax
+ 19653      FEFFFF
+ 19654 12a94 0FB69508 		movzbl	-504(%rbp), %edx
+ 19654      FEFFFF
+ 19655 12a9b 0FB6C0   		movzbl	%al, %eax
+ 19656 12a9e 6689853E 		movw	%ax, -8898(%rbp)
+ 19656      DDFFFF
+ 19657 12aa5 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 19657      DDFFFF
+ 19658 12aac F6F2     		divb	%dl
+ 19659 12aae 4189C2   		movl	%eax, %r10d
+ 19660 12ab1 0FB68519 		movzbl	-487(%rbp), %eax
+ 19660      FEFFFF
+ 19661 12ab8 0FB69509 		movzbl	-503(%rbp), %edx
+ 19661      FEFFFF
+ 19662 12abf 0FB6C0   		movzbl	%al, %eax
+ 19663 12ac2 6689853E 		movw	%ax, -8898(%rbp)
+ 19663      DDFFFF
+ 19664 12ac9 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 19664      DDFFFF
+ 19665 12ad0 F6F2     		divb	%dl
+ 19666 12ad2 4189C3   		movl	%eax, %r11d
+ 19667 12ad5 0FB6851A 		movzbl	-486(%rbp), %eax
+ 19667      FEFFFF
+ 19668 12adc 0FB6950A 		movzbl	-502(%rbp), %edx
+ 19668      FEFFFF
+ 19669 12ae3 0FB6C0   		movzbl	%al, %eax
+ 19670 12ae6 6689853E 		movw	%ax, -8898(%rbp)
+ 19670      DDFFFF
+ 19671 12aed 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 19671      DDFFFF
+ 19672 12af4 F6F2     		divb	%dl
+ 19673 12af6 4189C4   		movl	%eax, %r12d
+ 19674 12af9 0FB6851B 		movzbl	-485(%rbp), %eax
+ 19674      FEFFFF
+ 19675 12b00 0FB6950B 		movzbl	-501(%rbp), %edx
+ 19675      FEFFFF
+ 19676 12b07 0FB6C0   		movzbl	%al, %eax
+ 19677 12b0a 6689853E 		movw	%ax, -8898(%rbp)
+ 19677      DDFFFF
+ 19678 12b11 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 19678      DDFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 606
+
+
+ 19679 12b18 F6F2     		divb	%dl
+ 19680 12b1a 4189C5   		movl	%eax, %r13d
+ 19681 12b1d 0FB6851C 		movzbl	-484(%rbp), %eax
+ 19681      FEFFFF
+ 19682 12b24 0FB6950C 		movzbl	-500(%rbp), %edx
+ 19682      FEFFFF
+ 19683 12b2b 0FB6C0   		movzbl	%al, %eax
+ 19684 12b2e 6689853E 		movw	%ax, -8898(%rbp)
+ 19684      DDFFFF
+ 19685 12b35 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 19685      DDFFFF
+ 19686 12b3c F6F2     		divb	%dl
+ 19687 12b3e 4189C6   		movl	%eax, %r14d
+ 19688 12b41 0FB6851D 		movzbl	-483(%rbp), %eax
+ 19688      FEFFFF
+ 19689 12b48 0FB6950D 		movzbl	-499(%rbp), %edx
+ 19689      FEFFFF
+ 19690 12b4f 0FB6C0   		movzbl	%al, %eax
+ 19691 12b52 6689853E 		movw	%ax, -8898(%rbp)
+ 19691      DDFFFF
+ 19692 12b59 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 19692      DDFFFF
+ 19693 12b60 F6F2     		divb	%dl
+ 19694 12b62 4189C0   		movl	%eax, %r8d
+ 19695 12b65 0FB6851E 		movzbl	-482(%rbp), %eax
+ 19695      FEFFFF
+ 19696 12b6c 0FB6950E 		movzbl	-498(%rbp), %edx
+ 19696      FEFFFF
+ 19697 12b73 0FB6C0   		movzbl	%al, %eax
+ 19698 12b76 6689853E 		movw	%ax, -8898(%rbp)
+ 19698      DDFFFF
+ 19699 12b7d 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 19699      DDFFFF
+ 19700 12b84 F6F2     		divb	%dl
+ 19701 12b86 89C6     		movl	%eax, %esi
+ 19702 12b88 0FB6851F 		movzbl	-481(%rbp), %eax
+ 19702      FEFFFF
+ 19703 12b8f 0FB6950F 		movzbl	-497(%rbp), %edx
+ 19703      FEFFFF
+ 19704 12b96 0FB6C0   		movzbl	%al, %eax
+ 19705 12b99 6689853E 		movw	%ax, -8898(%rbp)
+ 19705      DDFFFF
+ 19706 12ba0 0FB7853E 		movzwl	-8898(%rbp), %eax
+ 19706      DDFFFF
+ 19707 12ba7 F6F2     		divb	%dl
+ 19708 12ba9 89C1     		movl	%eax, %ecx
+ 19709              	.LBB2319:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 19710              		.loc 2 346 0
+ 19711 12bab 0FB6D3   		movzbl	%bl, %edx
+ 19712 12bae 400FB6C7 		movzbl	%dil, %eax
+ 19713 12bb2 48C1E208 		salq	$8, %rdx
+ 19714 12bb6 4809C2   		orq	%rax, %rdx
+ 19715 12bb9 410FB6C1 		movzbl	%r9b, %eax
+ 19716 12bbd 48C1E208 		salq	$8, %rdx
+ 19717 12bc1 4809C2   		orq	%rax, %rdx
+ 19718 12bc4 0FB685BC 		movzbl	-8260(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 607
+
+
+ 19718      DFFFFF
+ 19719 12bcb 48C1E208 		salq	$8, %rdx
+ 19720 12bcf 4809C2   		orq	%rax, %rdx
+ 19721 12bd2 0FB685BD 		movzbl	-8259(%rbp), %eax
+ 19721      DFFFFF
+ 19722 12bd9 48C1E208 		salq	$8, %rdx
+ 19723 12bdd 4809C2   		orq	%rax, %rdx
+ 19724 12be0 0FB685BE 		movzbl	-8258(%rbp), %eax
+ 19724      DFFFFF
+ 19725 12be7 48C1E208 		salq	$8, %rdx
+ 19726 12beb 4809C2   		orq	%rax, %rdx
+ 19727 12bee 0FB685BF 		movzbl	-8257(%rbp), %eax
+ 19727      DFFFFF
+ 19728 12bf5 48C1E208 		salq	$8, %rdx
+ 19729 12bf9 4809C2   		orq	%rax, %rdx
+ 19730 12bfc 410FB6C7 		movzbl	%r15b, %eax
+ 19731 12c00 48C1E208 		salq	$8, %rdx
+ 19732 12c04 4809C2   		orq	%rax, %rdx
+ 19733 12c07 0FB6C1   		movzbl	%cl, %eax
+ 19734 12c0a 400FB6CE 		movzbl	%sil, %ecx
+ 19735 12c0e 48C1E008 		salq	$8, %rax
+ 19736 12c12 4809C8   		orq	%rcx, %rax
+ 19737 12c15 410FB6C8 		movzbl	%r8b, %ecx
+ 19738 12c19 48C1E008 		salq	$8, %rax
+ 19739 12c1d 4809C8   		orq	%rcx, %rax
+ 19740 12c20 410FB6CE 		movzbl	%r14b, %ecx
+ 19741 12c24 48C1E008 		salq	$8, %rax
+ 19742 12c28 4809C8   		orq	%rcx, %rax
+ 19743 12c2b 410FB6CD 		movzbl	%r13b, %ecx
+ 19744 12c2f 48C1E008 		salq	$8, %rax
+ 19745 12c33 4809C8   		orq	%rcx, %rax
+ 19746 12c36 410FB6CC 		movzbl	%r12b, %ecx
+ 19747 12c3a 48C1E008 		salq	$8, %rax
+ 19748 12c3e 4809C8   		orq	%rcx, %rax
+ 19749 12c41 410FB6CB 		movzbl	%r11b, %ecx
+ 19750 12c45 48C1E008 		salq	$8, %rax
+ 19751 12c49 4809C8   		orq	%rcx, %rax
+ 19752 12c4c 410FB6CA 		movzbl	%r10b, %ecx
+ 19753 12c50 48C1E008 		salq	$8, %rax
+ 19754 12c54 4809C8   		orq	%rcx, %rax
+ 19755 12c57 48899540 		movq	%rdx, -8896(%rbp)
+ 19755      DDFFFF
+ 19756 12c5e 48898548 		movq	%rax, -8888(%rbp)
+ 19756      DDFFFF
+ 19757 12c65 660F6F85 		movdqa	-8896(%rbp), %xmm0
+ 19757      40DDFFFF 
+ 19758              	.LBE2319:
+ 19759              	.LBE2318:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 19760              		.loc 2 862 0
+ 19761 12c6d F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 19761      C0FDFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 19762              		.loc 2 866 0
+ 19763 12c75 C7859CFD 		movl	$0, -612(%rbp)
+ 19763      FFFF0000 
+ 19763      0000
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 608
+
+
+ 19764 12c7f E9860200 		jmp	.L468
+ 19764      00
+ 19765              	.L477:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 19766              		.loc 2 868 0
+ 19767 12c84 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 19767      00000000 
+ 19768 12c8c F30F7F85 		movdqu	%xmm0, -464(%rbp)
+ 19768      30FEFFFF 
+ 19769 12c94 F30F6F85 		movdqu	-576(%rbp), %xmm0
+ 19769      C0FDFFFF 
+ 19770 12c9c F30F7F85 		movdqu	%xmm0, -480(%rbp)
+ 19770      20FEFFFF 
+ 19771              	.LBB2320:
+ 19772              	.LBB2321:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 19773              		.loc 2 380 0
+ 19774 12ca4 F30F6F85 		movdqu	-464(%rbp), %xmm0
+ 19774      30FEFFFF 
+ 19775 12cac F30F7F85 		movdqu	%xmm0, -5888(%rbp)
+ 19775      00E9FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 19776              		.loc 2 381 0
+ 19777 12cb4 F30F6F85 		movdqu	-480(%rbp), %xmm0
+ 19777      20FEFFFF 
+ 19778 12cbc F30F7F85 		movdqu	%xmm0, -5904(%rbp)
+ 19778      F0E8FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 19779              		.loc 2 383 0
+ 19780 12cc4 C7854CFE 		movl	$0, -436(%rbp)
+ 19780      FFFF0000 
+ 19780      0000
+ 19781 12cce EB5C     		jmp	.L469
+ 19782              	.L472:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 19783              		.loc 2 385 0
+ 19784 12cd0 8B854CFE 		movl	-436(%rbp), %eax
+ 19784      FFFF
+ 19785 12cd6 89C0     		mov	%eax, %eax
+ 19786 12cd8 0FB68405 		movzbl	-5904(%rbp,%rax), %eax
+ 19786      F0E8FFFF 
+ 19787 12ce0 84C0     		testb	%al, %al
+ 19788 12ce2 7912     		jns	.L470
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 19789              		.loc 2 386 0
+ 19790 12ce4 8B854CFE 		movl	-436(%rbp), %eax
+ 19790      FFFF
+ 19791 12cea 89C0     		mov	%eax, %eax
+ 19792 12cec C6840510 		movb	$0, -5872(%rbp,%rax)
+ 19792      E9FFFF00 
+ 19793 12cf4 EB2F     		jmp	.L471
+ 19794              	.L470:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 19795              		.loc 2 388 0
+ 19796 12cf6 8B8D4CFE 		movl	-436(%rbp), %ecx
+ 19796      FFFF
+ 19797 12cfc 8B854CFE 		movl	-436(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 609
+
+
+ 19797      FFFF
+ 19798 12d02 89C0     		mov	%eax, %eax
+ 19799 12d04 0FB68405 		movzbl	-5904(%rbp,%rax), %eax
+ 19799      F0E8FFFF 
+ 19800 12d0c 0FB6C0   		movzbl	%al, %eax
+ 19801 12d0f 83E00F   		andl	$15, %eax
+ 19802 12d12 4898     		cltq
+ 19803 12d14 0FB69405 		movzbl	-5888(%rbp,%rax), %edx
+ 19803      00E9FFFF 
+ 19804 12d1c 89C8     		mov	%ecx, %eax
+ 19805 12d1e 88940510 		movb	%dl, -5872(%rbp,%rax)
+ 19805      E9FFFF
+ 19806              	.L471:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 19807              		.loc 2 383 0
+ 19808 12d25 83854CFE 		addl	$1, -436(%rbp)
+ 19808      FFFF01
+ 19809              	.L469:
+ 19810 12d2c 83BD4CFE 		cmpl	$15, -436(%rbp)
+ 19810      FFFF0F
+ 19811 12d33 769B     		jbe	.L472
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 19812              		.loc 2 391 0
+ 19813 12d35 F30F6F85 		movdqu	-5872(%rbp), %xmm0
+ 19813      10E9FFFF 
+ 19814              	.LBE2321:
+ 19815              	.LBE2320:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 19816              		.loc 2 868 0
+ 19817 12d3d F30F7F85 		movdqu	%xmm0, -592(%rbp)
+ 19817      B0FDFFFF 
+ 19818 12d45 F30F6F85 		movdqu	-560(%rbp), %xmm0
+ 19818      D0FDFFFF 
+ 19819 12d4d F30F7F85 		movdqu	%xmm0, -416(%rbp)
+ 19819      60FEFFFF 
+ 19820 12d55 F30F6F85 		movdqu	-592(%rbp), %xmm0
+ 19820      B0FDFFFF 
+ 19821 12d5d F30F7F85 		movdqu	%xmm0, -432(%rbp)
+ 19821      50FEFFFF 
+ 19822              	.LBB2322:
+ 19823              	.LBB2323:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 19824              		.loc 2 234 0
+ 19825 12d65 F30F6F85 		movdqu	-432(%rbp), %xmm0
+ 19825      50FEFFFF 
+ 19826 12d6d F30F6F8D 		movdqu	-416(%rbp), %xmm1
+ 19826      60FEFFFF 
+ 19827 12d75 660FEBC1 		por	%xmm1, %xmm0
+ 19828              	.LBE2323:
+ 19829              	.LBE2322:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 19830              		.loc 2 870 0
+ 19831 12d79 F30F7F85 		movdqu	%xmm0, -592(%rbp)
+ 19831      B0FDFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 19832              		.loc 2 872 0
+ 19833 12d81 8B859CFD 		mov	-612(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 610
+
+
+ 19833      FFFF
+ 19834 12d87 48C1E004 		salq	$4, %rax
+ 19835 12d8b 48038578 		addq	-648(%rbp), %rax
+ 19835      FDFFFF
+ 19836 12d92 660F6F00 		movdqa	(%rax), %xmm0
+ 19837 12d96 F30F7F85 		movdqu	%xmm0, -384(%rbp)
+ 19837      80FEFFFF 
+ 19838 12d9e F30F6F85 		movdqu	-592(%rbp), %xmm0
+ 19838      B0FDFFFF 
+ 19839 12da6 F30F7F85 		movdqu	%xmm0, -400(%rbp)
+ 19839      70FEFFFF 
+ 19840              	.LBB2324:
+ 19841              	.LBB2325:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 19842              		.loc 2 380 0
+ 19843 12dae F30F6F85 		movdqu	-384(%rbp), %xmm0
+ 19843      80FEFFFF 
+ 19844 12db6 F30F7F85 		movdqu	%xmm0, -5840(%rbp)
+ 19844      30E9FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 19845              		.loc 2 381 0
+ 19846 12dbe F30F6F85 		movdqu	-400(%rbp), %xmm0
+ 19846      70FEFFFF 
+ 19847 12dc6 F30F7F85 		movdqu	%xmm0, -5856(%rbp)
+ 19847      20E9FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 19848              		.loc 2 383 0
+ 19849 12dce C7859CFE 		movl	$0, -356(%rbp)
+ 19849      FFFF0000 
+ 19849      0000
+ 19850 12dd8 EB5C     		jmp	.L473
+ 19851              	.L476:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 19852              		.loc 2 385 0
+ 19853 12dda 8B859CFE 		movl	-356(%rbp), %eax
+ 19853      FFFF
+ 19854 12de0 89C0     		mov	%eax, %eax
+ 19855 12de2 0FB68405 		movzbl	-5856(%rbp,%rax), %eax
+ 19855      20E9FFFF 
+ 19856 12dea 84C0     		testb	%al, %al
+ 19857 12dec 7912     		jns	.L474
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 19858              		.loc 2 386 0
+ 19859 12dee 8B859CFE 		movl	-356(%rbp), %eax
+ 19859      FFFF
+ 19860 12df4 89C0     		mov	%eax, %eax
+ 19861 12df6 C6840540 		movb	$0, -5824(%rbp,%rax)
+ 19861      E9FFFF00 
+ 19862 12dfe EB2F     		jmp	.L475
+ 19863              	.L474:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 19864              		.loc 2 388 0
+ 19865 12e00 8B8D9CFE 		movl	-356(%rbp), %ecx
+ 19865      FFFF
+ 19866 12e06 8B859CFE 		movl	-356(%rbp), %eax
+ 19866      FFFF
+ 19867 12e0c 89C0     		mov	%eax, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 611
+
+
+ 19868 12e0e 0FB68405 		movzbl	-5856(%rbp,%rax), %eax
+ 19868      20E9FFFF 
+ 19869 12e16 0FB6C0   		movzbl	%al, %eax
+ 19870 12e19 83E00F   		andl	$15, %eax
+ 19871 12e1c 4898     		cltq
+ 19872 12e1e 0FB69405 		movzbl	-5840(%rbp,%rax), %edx
+ 19872      30E9FFFF 
+ 19873 12e26 89C8     		mov	%ecx, %eax
+ 19874 12e28 88940540 		movb	%dl, -5824(%rbp,%rax)
+ 19874      E9FFFF
+ 19875              	.L475:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 19876              		.loc 2 383 0
+ 19877 12e2f 83859CFE 		addl	$1, -356(%rbp)
+ 19877      FFFF01
+ 19878              	.L473:
+ 19879 12e36 83BD9CFE 		cmpl	$15, -356(%rbp)
+ 19879      FFFF0F
+ 19880 12e3d 769B     		jbe	.L476
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 19881              		.loc 2 391 0
+ 19882 12e3f F30F6F85 		movdqu	-5824(%rbp), %xmm0
+ 19882      40E9FFFF 
+ 19883              	.LBE2325:
+ 19884              	.LBE2324:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 19885              		.loc 2 872 0
+ 19886 12e47 F30F7F85 		movdqu	%xmm0, -592(%rbp)
+ 19886      B0FDFFFF 
+ 19887 12e4f F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 19887      A0FDFFFF 
+ 19888 12e57 F30F7F85 		movdqu	%xmm0, -336(%rbp)
+ 19888      B0FEFFFF 
+ 19889 12e5f F30F6F85 		movdqu	-592(%rbp), %xmm0
+ 19889      B0FDFFFF 
+ 19890 12e67 F30F7F85 		movdqu	%xmm0, -352(%rbp)
+ 19890      A0FEFFFF 
+ 19891              	.LBB2326:
+ 19892              	.LBB2327:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 19893              		.loc 2 234 0
+ 19894 12e6f F30F6F85 		movdqu	-352(%rbp), %xmm0
+ 19894      A0FEFFFF 
+ 19895 12e77 F30F6F8D 		movdqu	-336(%rbp), %xmm1
+ 19895      B0FEFFFF 
+ 19896 12e7f 660FEBC1 		por	%xmm1, %xmm0
+ 19897              	.LBE2327:
+ 19898              	.LBE2326:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 19899              		.loc 2 874 0
+ 19900 12e83 F30F7F85 		movdqu	%xmm0, -608(%rbp)
+ 19900      A0FDFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 19901              		.loc 2 876 0
+ 19902 12e8b 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 19902      00000000 
+ 19903 12e93 F30F6F8D 		movdqu	-576(%rbp), %xmm1
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 612
+
+
+ 19903      C0FDFFFF 
+ 19904 12e9b F30F7F8D 		movdqu	%xmm1, -304(%rbp)
+ 19904      D0FEFFFF 
+ 19905 12ea3 F30F7F85 		movdqu	%xmm0, -320(%rbp)
+ 19905      C0FEFFFF 
+ 19906              	.LBB2328:
+ 19907              	.LBB2329:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 19908              		.loc 2 290 0
+ 19909 12eab F30F6F8D 		movdqu	-320(%rbp), %xmm1
+ 19909      C0FEFFFF 
+ 19910 12eb3 F30F6F85 		movdqu	-304(%rbp), %xmm0
+ 19910      D0FEFFFF 
+ 19911 12ebb 660FF8C1 		psubb	%xmm1, %xmm0
+ 19912              	.LBE2329:
+ 19913              	.LBE2328:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 19914              		.loc 2 876 0
+ 19915 12ebf F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 19915      C0FDFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 19916              		.loc 2 878 0
+ 19917 12ec7 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 19917      00000000 
+ 19918 12ecf F30F6F8D 		movdqu	-576(%rbp), %xmm1
+ 19918      C0FDFFFF 
+ 19919 12ed7 F30F7F8D 		movdqu	%xmm1, -272(%rbp)
+ 19919      F0FEFFFF 
+ 19920 12edf F30F7F85 		movdqu	%xmm0, -288(%rbp)
+ 19920      E0FEFFFF 
+ 19921              	.LBB2330:
+ 19922              	.LBB2331:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 19923              		.loc 2 206 0
+ 19924 12ee7 F30F6F85 		movdqu	-288(%rbp), %xmm0
+ 19924      E0FEFFFF 
+ 19925 12eef F30F6F8D 		movdqu	-272(%rbp), %xmm1
+ 19925      F0FEFFFF 
+ 19926 12ef7 660FDBC1 		pand	%xmm1, %xmm0
+ 19927              	.LBE2331:
+ 19928              	.LBE2330:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 19929              		.loc 2 878 0
+ 19930 12efb F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 19930      C0FDFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 19931              		.loc 2 866 0
+ 19932 12f03 83859CFD 		addl	$1, -612(%rbp)
+ 19932      FFFF01
+ 19933              	.L468:
+ 19934 12f0a 83BD9CFD 		cmpl	$15, -612(%rbp)
+ 19934      FFFF0F
+ 19935 12f11 0F866DFD 		jbe	.L477
+ 19935      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 19936              		.loc 2 882 0
+ 19937 12f17 F30F6F85 		movdqu	-608(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 613
+
+
+ 19937      A0FDFFFF 
+ 19938              	.LBE2315:
+ 19939              	.LBE2314:
+ 19940              	.LBE2313:
+ 19941              	.LBE2312:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 19942              		.loc 2 1682 0
+ 19943 12f1f 660F7F85 		movdqa	%xmm0, -8304(%rbp)
+ 19943      90DFFFFF 
+ 19944              	.LBB2332:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 19945              		.loc 2 1683 0
+ 19946 12f27 660F6F85 		movdqa	-8304(%rbp), %xmm0
+ 19946      90DFFFFF 
+ 19947 12f2f F30F7F85 		movdqu	%xmm0, -5936(%rbp)
+ 19947      D0E8FFFF 
+ 19948 12f37 E8000000 		call	KDbgWriterGet at PLT
+ 19948      00
+ 19949 12f3c 4885C0   		testq	%rax, %rax
+ 19950 12f3f 7479     		je	.L479
+ 19951 12f41 BF010000 		movl	$1, %edi
+ 19951      00
+ 19952 12f46 E8000000 		call	KDbgCondToFlag at PLT
+ 19952      00
+ 19953 12f4b 4889C6   		movq	%rax, %rsi
+ 19954 12f4e BF100000 		movl	$16, %edi
+ 19954      00
+ 19955 12f53 E8000000 		call	KDbgTestModConds at PLT
+ 19955      00
+ 19956 12f58 84C0     		testb	%al, %al
+ 19957 12f5a 745E     		je	.L479
+ 19958 12f5c 8B85DCE8 		movl	-5924(%rbp), %eax
+ 19958      FFFF
+ 19959 12f62 89C7     		movl	%eax, %edi
+ 19960 12f64 E897D0FE 		call	bswap_32
+ 19960      FF
+ 19961 12f69 4189C5   		movl	%eax, %r13d
+ 19962 12f6c 8B85D8E8 		movl	-5928(%rbp), %eax
+ 19962      FFFF
+ 19963 12f72 89C7     		movl	%eax, %edi
+ 19964 12f74 E887D0FE 		call	bswap_32
+ 19964      FF
+ 19965 12f79 4189C4   		movl	%eax, %r12d
+ 19966 12f7c 8B85D4E8 		movl	-5932(%rbp), %eax
+ 19966      FFFF
+ 19967 12f82 89C7     		movl	%eax, %edi
+ 19968 12f84 E877D0FE 		call	bswap_32
+ 19968      FF
+ 19969 12f89 89C3     		movl	%eax, %ebx
+ 19970 12f8b 8B85D0E8 		movl	-5936(%rbp), %eax
+ 19970      FFFF
+ 19971 12f91 89C7     		movl	%eax, %edi
+ 19972 12f93 E868D0FE 		call	bswap_32
+ 19972      FF
+ 19973 12f98 4589E9   		movl	%r13d, %r9d
+ 19974 12f9b 4589E0   		movl	%r12d, %r8d
+ 19975 12f9e 89D9     		movl	%ebx, %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 614
+
+
+ 19976 12fa0 89C2     		movl	%eax, %edx
+ 19977 12fa2 488D3500 		leaq	.LC0(%rip), %rsi
+ 19977      000000
+ 19978 12fa9 488D3D00 		leaq	.LC1(%rip), %rdi
+ 19978      000000
+ 19979 12fb0 B8000000 		movl	$0, %eax
+ 19979      00
+ 19980 12fb5 E8000000 		call	KDbgMsg at PLT
+ 19980      00
+ 19981              	.L479:
+ 19982 12fba 660F6F85 		movdqa	-8304(%rbp), %xmm0
+ 19982      90DFFFFF 
+ 19983 12fc2 F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 19983      00FFFFFF 
+ 19984              	.LBE2332:
+ 19985              	.LBB2333:
+ 19986              	.LBB2334:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 19987              		.loc 2 667 0
+ 19988 12fca 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 19988      00000000 
+ 19989 12fd2 F30F6F8D 		movdqu	-256(%rbp), %xmm1
+ 19989      00FFFFFF 
+ 19990 12fda F30F7F8D 		movdqu	%xmm1, -224(%rbp)
+ 19990      20FFFFFF 
+ 19991 12fe2 F30F7F85 		movdqu	%xmm0, -240(%rbp)
+ 19991      10FFFFFF 
+ 19992              	.LBB2335:
+ 19993              	.LBB2336:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 19994              		.loc 2 380 0
+ 19995 12fea F30F6F85 		movdqu	-224(%rbp), %xmm0
+ 19995      20FFFFFF 
+ 19996 12ff2 F30F7F85 		movdqu	%xmm0, -5792(%rbp)
+ 19996      60E9FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 19997              		.loc 2 381 0
+ 19998 12ffa F30F6F85 		movdqu	-240(%rbp), %xmm0
+ 19998      10FFFFFF 
+ 19999 13002 F30F7F85 		movdqu	%xmm0, -5808(%rbp)
+ 19999      50E9FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 20000              		.loc 2 383 0
+ 20001 1300a C7853CFF 		movl	$0, -196(%rbp)
+ 20001      FFFF0000 
+ 20001      0000
+ 20002 13014 EB5C     		jmp	.L480
+ 20003              	.L483:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 20004              		.loc 2 385 0
+ 20005 13016 8B853CFF 		movl	-196(%rbp), %eax
+ 20005      FFFF
+ 20006 1301c 89C0     		mov	%eax, %eax
+ 20007 1301e 0FB68405 		movzbl	-5808(%rbp,%rax), %eax
+ 20007      50E9FFFF 
+ 20008 13026 84C0     		testb	%al, %al
+ 20009 13028 7912     		jns	.L481
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 615
+
+
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 20010              		.loc 2 386 0
+ 20011 1302a 8B853CFF 		movl	-196(%rbp), %eax
+ 20011      FFFF
+ 20012 13030 89C0     		mov	%eax, %eax
+ 20013 13032 C6840570 		movb	$0, -5776(%rbp,%rax)
+ 20013      E9FFFF00 
+ 20014 1303a EB2F     		jmp	.L482
+ 20015              	.L481:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 20016              		.loc 2 388 0
+ 20017 1303c 8B8D3CFF 		movl	-196(%rbp), %ecx
+ 20017      FFFF
+ 20018 13042 8B853CFF 		movl	-196(%rbp), %eax
+ 20018      FFFF
+ 20019 13048 89C0     		mov	%eax, %eax
+ 20020 1304a 0FB68405 		movzbl	-5808(%rbp,%rax), %eax
+ 20020      50E9FFFF 
+ 20021 13052 0FB6C0   		movzbl	%al, %eax
+ 20022 13055 83E00F   		andl	$15, %eax
+ 20023 13058 4898     		cltq
+ 20024 1305a 0FB69405 		movzbl	-5792(%rbp,%rax), %edx
+ 20024      60E9FFFF 
+ 20025 13062 89C8     		mov	%ecx, %eax
+ 20026 13064 88940570 		movb	%dl, -5776(%rbp,%rax)
+ 20026      E9FFFF
+ 20027              	.L482:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 20028              		.loc 2 383 0
+ 20029 1306b 83853CFF 		addl	$1, -196(%rbp)
+ 20029      FFFF01
+ 20030              	.L480:
+ 20031 13072 83BD3CFF 		cmpl	$15, -196(%rbp)
+ 20031      FFFF0F
+ 20032 13079 769B     		jbe	.L483
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 20033              		.loc 2 391 0
+ 20034 1307b F30F6F85 		movdqu	-5776(%rbp), %xmm0
+ 20034      70E9FFFF 
+ 20035              	.LBE2336:
+ 20036              	.LBE2335:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 20037              		.loc 2 667 0
+ 20038 13083 F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 20038      00FFFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 20039              		.loc 2 668 0
+ 20040 1308b F30F6F85 		movdqu	-256(%rbp), %xmm0
+ 20040      00FFFFFF 
+ 20041              	.LBE2334:
+ 20042              	.LBE2333:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 20043              		.loc 2 1684 0
+ 20044 13093 660F7F85 		movdqa	%xmm0, -8304(%rbp)
+ 20044      90DFFFFF 
+ 20045              	.LBB2337:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 616
+
+
+ 20046              		.loc 2 1685 0
+ 20047 1309b 660F6F85 		movdqa	-8304(%rbp), %xmm0
+ 20047      90DFFFFF 
+ 20048 130a3 F30F7F85 		movdqu	%xmm0, -5952(%rbp)
+ 20048      C0E8FFFF 
+ 20049 130ab E8000000 		call	KDbgWriterGet at PLT
+ 20049      00
+ 20050 130b0 4885C0   		testq	%rax, %rax
+ 20051 130b3 7479     		je	.L485
+ 20052 130b5 BF010000 		movl	$1, %edi
+ 20052      00
+ 20053 130ba E8000000 		call	KDbgCondToFlag at PLT
+ 20053      00
+ 20054 130bf 4889C6   		movq	%rax, %rsi
+ 20055 130c2 BF100000 		movl	$16, %edi
+ 20055      00
+ 20056 130c7 E8000000 		call	KDbgTestModConds at PLT
+ 20056      00
+ 20057 130cc 84C0     		testb	%al, %al
+ 20058 130ce 745E     		je	.L485
+ 20059 130d0 8B85CCE8 		movl	-5940(%rbp), %eax
+ 20059      FFFF
+ 20060 130d6 89C7     		movl	%eax, %edi
+ 20061 130d8 E823CFFE 		call	bswap_32
+ 20061      FF
+ 20062 130dd 4189C5   		movl	%eax, %r13d
+ 20063 130e0 8B85C8E8 		movl	-5944(%rbp), %eax
+ 20063      FFFF
+ 20064 130e6 89C7     		movl	%eax, %edi
+ 20065 130e8 E813CFFE 		call	bswap_32
+ 20065      FF
+ 20066 130ed 4189C4   		movl	%eax, %r12d
+ 20067 130f0 8B85C4E8 		movl	-5948(%rbp), %eax
+ 20067      FFFF
+ 20068 130f6 89C7     		movl	%eax, %edi
+ 20069 130f8 E803CFFE 		call	bswap_32
+ 20069      FF
+ 20070 130fd 89C3     		movl	%eax, %ebx
+ 20071 130ff 8B85C0E8 		movl	-5952(%rbp), %eax
+ 20071      FFFF
+ 20072 13105 89C7     		movl	%eax, %edi
+ 20073 13107 E8F4CEFE 		call	bswap_32
+ 20073      FF
+ 20074 1310c 4589E9   		movl	%r13d, %r9d
+ 20075 1310f 4589E0   		movl	%r12d, %r8d
+ 20076 13112 89D9     		movl	%ebx, %ecx
+ 20077 13114 89C2     		movl	%eax, %edx
+ 20078 13116 488D3500 		leaq	.LC2(%rip), %rsi
+ 20078      000000
+ 20079 1311d 488D3D00 		leaq	.LC1(%rip), %rdi
+ 20079      000000
+ 20080 13124 B8000000 		movl	$0, %eax
+ 20080      00
+ 20081 13129 E8000000 		call	KDbgMsg at PLT
+ 20081      00
+ 20082              	.L485:
+ 20083 1312e 660F6F85 		movdqa	-8304(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 617
+
+
+ 20083      90DFFFFF 
+ 20084 13136 F30F7F85 		movdqu	%xmm0, -176(%rbp)
+ 20084      50FFFFFF 
+ 20085 1313e 660F6F85 		movdqa	-8288(%rbp), %xmm0
+ 20085      A0DFFFFF 
+ 20086 13146 F30F7F85 		movdqu	%xmm0, -192(%rbp)
+ 20086      40FFFFFF 
+ 20087              	.LBE2337:
+ 20088              	.LBB2338:
+ 20089              	.LBB2339:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 20090              		.loc 2 178 0
+ 20091 1314e F30F6F85 		movdqu	-192(%rbp), %xmm0
+ 20091      40FFFFFF 
+ 20092 13156 F30F6F8D 		movdqu	-176(%rbp), %xmm1
+ 20092      50FFFFFF 
+ 20093 1315e 660FEFC1 		pxor	%xmm1, %xmm0
+ 20094              	.LBE2339:
+ 20095              	.LBE2338:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 20096              		.loc 2 1686 0
+ 20097 13162 660F7F85 		movdqa	%xmm0, -8304(%rbp)
+ 20097      90DFFFFF 
+ 20098              	.LBB2340:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 20099              		.loc 2 1687 0
+ 20100 1316a 660F6F85 		movdqa	-8304(%rbp), %xmm0
+ 20100      90DFFFFF 
+ 20101 13172 F30F7F85 		movdqu	%xmm0, -5968(%rbp)
+ 20101      B0E8FFFF 
+ 20102 1317a E8000000 		call	KDbgWriterGet at PLT
+ 20102      00
+ 20103 1317f 4885C0   		testq	%rax, %rax
+ 20104 13182 7479     		je	.L487
+ 20105 13184 BF010000 		movl	$1, %edi
+ 20105      00
+ 20106 13189 E8000000 		call	KDbgCondToFlag at PLT
+ 20106      00
+ 20107 1318e 4889C6   		movq	%rax, %rsi
+ 20108 13191 BF100000 		movl	$16, %edi
+ 20108      00
+ 20109 13196 E8000000 		call	KDbgTestModConds at PLT
+ 20109      00
+ 20110 1319b 84C0     		testb	%al, %al
+ 20111 1319d 745E     		je	.L487
+ 20112 1319f 8B85BCE8 		movl	-5956(%rbp), %eax
+ 20112      FFFF
+ 20113 131a5 89C7     		movl	%eax, %edi
+ 20114 131a7 E854CEFE 		call	bswap_32
+ 20114      FF
+ 20115 131ac 4189C5   		movl	%eax, %r13d
+ 20116 131af 8B85B8E8 		movl	-5960(%rbp), %eax
+ 20116      FFFF
+ 20117 131b5 89C7     		movl	%eax, %edi
+ 20118 131b7 E844CEFE 		call	bswap_32
+ 20118      FF
+ 20119 131bc 4189C4   		movl	%eax, %r12d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 618
+
+
+ 20120 131bf 8B85B4E8 		movl	-5964(%rbp), %eax
+ 20120      FFFF
+ 20121 131c5 89C7     		movl	%eax, %edi
+ 20122 131c7 E834CEFE 		call	bswap_32
+ 20122      FF
+ 20123 131cc 89C3     		movl	%eax, %ebx
+ 20124 131ce 8B85B0E8 		movl	-5968(%rbp), %eax
+ 20124      FFFF
+ 20125 131d4 89C7     		movl	%eax, %edi
+ 20126 131d6 E825CEFE 		call	bswap_32
+ 20126      FF
+ 20127 131db 4589E9   		movl	%r13d, %r9d
+ 20128 131de 4589E0   		movl	%r12d, %r8d
+ 20129 131e1 89D9     		movl	%ebx, %ecx
+ 20130 131e3 89C2     		movl	%eax, %edx
+ 20131 131e5 488D3500 		leaq	.LC3(%rip), %rsi
+ 20131      000000
+ 20132 131ec 488D3D00 		leaq	.LC1(%rip), %rdi
+ 20132      000000
+ 20133 131f3 B8000000 		movl	$0, %eax
+ 20133      00
+ 20134 131f8 E8000000 		call	KDbgMsg at PLT
+ 20134      00
+ 20135              	.L487:
+ 20136 131fd 660F6F85 		movdqa	-8304(%rbp), %xmm0
+ 20136      90DFFFFF 
+ 20137 13205 F30F7F85 		movdqu	%xmm0, -160(%rbp)
+ 20137      60FFFFFF 
+ 20138              	.LBE2340:
+ 20139              	.LBB2341:
+ 20140              	.LBB2342:
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 20141              		.loc 2 1357 0
+ 20142 1320d F30F6F85 		movdqu	-160(%rbp), %xmm0
+ 20142      60FFFFFF 
+ 20143 13215 F30F7F85 		movdqu	%xmm0, -5760(%rbp)
+ 20143      80E9FFFF 
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+ 20144              		.loc 2 1358 0
+ 20145 1321d 8B858CE9 		movl	-5748(%rbp), %eax
+ 20145      FFFF
+ 20146 13223 898588E9 		movl	%eax, -5752(%rbp)
+ 20146      FFFF
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+ 20147              		.loc 2 1359 0
+ 20148 13229 8B858CE9 		movl	-5748(%rbp), %eax
+ 20148      FFFF
+ 20149 1322f 898584E9 		movl	%eax, -5756(%rbp)
+ 20149      FFFF
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+ 20150              		.loc 2 1360 0
+ 20151 13235 8B858CE9 		movl	-5748(%rbp), %eax
+ 20151      FFFF
+ 20152 1323b 898580E9 		movl	%eax, -5760(%rbp)
+ 20152      FFFF
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 20153              		.loc 2 1361 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 619
+
+
+ 20154 13241 F30F6F85 		movdqu	-5760(%rbp), %xmm0
+ 20154      80E9FFFF 
+ 20155              	.LBE2342:
+ 20156              	.LBE2341:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 20157              		.loc 2 1688 0
+ 20158 13249 660F7F85 		movdqa	%xmm0, -8304(%rbp)
+ 20158      90DFFFFF 
+ 20159              	.LBB2343:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 20160              		.loc 2 1689 0
+ 20161 13251 660F6F85 		movdqa	-8304(%rbp), %xmm0
+ 20161      90DFFFFF 
+ 20162 13259 F30F7F85 		movdqu	%xmm0, -5984(%rbp)
+ 20162      A0E8FFFF 
+ 20163 13261 E8000000 		call	KDbgWriterGet at PLT
+ 20163      00
+ 20164 13266 4885C0   		testq	%rax, %rax
+ 20165 13269 7479     		je	.L489
+ 20166 1326b BF010000 		movl	$1, %edi
+ 20166      00
+ 20167 13270 E8000000 		call	KDbgCondToFlag at PLT
+ 20167      00
+ 20168 13275 4889C6   		movq	%rax, %rsi
+ 20169 13278 BF100000 		movl	$16, %edi
+ 20169      00
+ 20170 1327d E8000000 		call	KDbgTestModConds at PLT
+ 20170      00
+ 20171 13282 84C0     		testb	%al, %al
+ 20172 13284 745E     		je	.L489
+ 20173 13286 8B85ACE8 		movl	-5972(%rbp), %eax
+ 20173      FFFF
+ 20174 1328c 89C7     		movl	%eax, %edi
+ 20175 1328e E86DCDFE 		call	bswap_32
+ 20175      FF
+ 20176 13293 4189C5   		movl	%eax, %r13d
+ 20177 13296 8B85A8E8 		movl	-5976(%rbp), %eax
+ 20177      FFFF
+ 20178 1329c 89C7     		movl	%eax, %edi
+ 20179 1329e E85DCDFE 		call	bswap_32
+ 20179      FF
+ 20180 132a3 4189C4   		movl	%eax, %r12d
+ 20181 132a6 8B85A4E8 		movl	-5980(%rbp), %eax
+ 20181      FFFF
+ 20182 132ac 89C7     		movl	%eax, %edi
+ 20183 132ae E84DCDFE 		call	bswap_32
+ 20183      FF
+ 20184 132b3 89C3     		movl	%eax, %ebx
+ 20185 132b5 8B85A0E8 		movl	-5984(%rbp), %eax
+ 20185      FFFF
+ 20186 132bb 89C7     		movl	%eax, %edi
+ 20187 132bd E83ECDFE 		call	bswap_32
+ 20187      FF
+ 20188 132c2 4589E9   		movl	%r13d, %r9d
+ 20189 132c5 4589E0   		movl	%r12d, %r8d
+ 20190 132c8 89D9     		movl	%ebx, %ecx
+ 20191 132ca 89C2     		movl	%eax, %edx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 620
+
+
+ 20192 132cc 488D3500 		leaq	.LC4(%rip), %rsi
+ 20192      000000
+ 20193 132d3 488D3D00 		leaq	.LC1(%rip), %rdi
+ 20193      000000
+ 20194 132da B8000000 		movl	$0, %eax
+ 20194      00
+ 20195 132df E8000000 		call	KDbgMsg at PLT
+ 20195      00
+ 20196              	.L489:
+ 20197              	.LBE2343:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 20198              		.loc 2 1690 0
+ 20199 132e4 660F6F85 		movdqa	-8304(%rbp), %xmm0
+ 20199      90DFFFFF 
+ 20200              	.LBE2309:
+ 20201              	.LBE2308:
+1938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(14,0x40);   /* k56 : k57 : k58 : k59 */
+ 20202              		.loc 2 1938 0
+ 20203 132ec F30F7F85 		movdqu	%xmm0, -5664(%rbp)
+ 20203      E0E9FFFF 
+ 20204 132f4 F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 20204      C0E9FFFF 
+ 20205 132fc F30F7F85 		movdqu	%xmm0, -144(%rbp)
+ 20205      70FFFFFF 
+ 20206              	.LBB2344:
+ 20207              	.LBB2345:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 20208              		.loc 2 1565 0
+ 20209 13304 F30F6F85 		movdqu	-144(%rbp), %xmm0
+ 20209      70FFFFFF 
+ 20210 1330c 660F7F85 		movdqa	%xmm0, -8256(%rbp)
+ 20210      C0DFFFFF 
+ 20211 13314 660F6F85 		movdqa	-8256(%rbp), %xmm0
+ 20211      C0DFFFFF 
+ 20212 1331c F30F7F45 		movdqu	%xmm0, -128(%rbp)
+ 20212      80
+ 20213              	.LBB2346:
+ 20214              	.LBB2347:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 20215              		.loc 2 1282 0
+ 20216 13321 F30F6F45 		movdqu	-128(%rbp), %xmm0
+ 20216      80
+ 20217 13326 F30F7F85 		movdqu	%xmm0, -5744(%rbp)
+ 20217      90E9FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 20218              		.loc 2 1283 0
+ 20219 1332e 8B8598E9 		movl	-5736(%rbp), %eax
+ 20219      FFFF
+ 20220 13334 89859CE9 		movl	%eax, -5732(%rbp)
+ 20220      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 20221              		.loc 2 1284 0
+ 20222 1333a 8B8594E9 		movl	-5740(%rbp), %eax
+ 20222      FFFF
+ 20223 13340 898598E9 		movl	%eax, -5736(%rbp)
+ 20223      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 621
+
+
+ 20224              		.loc 2 1285 0
+ 20225 13346 8B8590E9 		movl	-5744(%rbp), %eax
+ 20225      FFFF
+ 20226 1334c 898594E9 		movl	%eax, -5740(%rbp)
+ 20226      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 20227              		.loc 2 1286 0
+ 20228 13352 C78590E9 		movl	$0, -5744(%rbp)
+ 20228      FFFF0000 
+ 20228      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 20229              		.loc 2 1287 0
+ 20230 1335c F30F6F85 		movdqu	-5744(%rbp), %xmm0
+ 20230      90E9FFFF 
+ 20231              	.LBE2347:
+ 20232              	.LBE2346:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 20233              		.loc 2 1567 0
+ 20234 13364 660F7F85 		movdqa	%xmm0, -8256(%rbp)
+ 20234      C0DFFFFF 
+ 20235 1336c 660F6F85 		movdqa	-8256(%rbp), %xmm0
+ 20235      C0DFFFFF 
+ 20236 13374 660FEF85 		pxor	-144(%rbp), %xmm0
+ 20236      70FFFFFF 
+ 20237 1337c F30F7F85 		movdqu	%xmm0, -144(%rbp)
+ 20237      70FFFFFF 
+ 20238 13384 660F6F85 		movdqa	-8256(%rbp), %xmm0
+ 20238      C0DFFFFF 
+ 20239 1338c F30F7F45 		movdqu	%xmm0, -112(%rbp)
+ 20239      90
+ 20240              	.LBB2348:
+ 20241              	.LBB2349:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 20242              		.loc 2 1282 0
+ 20243 13391 F30F6F45 		movdqu	-112(%rbp), %xmm0
+ 20243      90
+ 20244 13396 F30F7F85 		movdqu	%xmm0, -5728(%rbp)
+ 20244      A0E9FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 20245              		.loc 2 1283 0
+ 20246 1339e 8B85A8E9 		movl	-5720(%rbp), %eax
+ 20246      FFFF
+ 20247 133a4 8985ACE9 		movl	%eax, -5716(%rbp)
+ 20247      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 20248              		.loc 2 1284 0
+ 20249 133aa 8B85A4E9 		movl	-5724(%rbp), %eax
+ 20249      FFFF
+ 20250 133b0 8985A8E9 		movl	%eax, -5720(%rbp)
+ 20250      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 20251              		.loc 2 1285 0
+ 20252 133b6 8B85A0E9 		movl	-5728(%rbp), %eax
+ 20252      FFFF
+ 20253 133bc 8985A4E9 		movl	%eax, -5724(%rbp)
+ 20253      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 622
+
+
+ 20254              		.loc 2 1286 0
+ 20255 133c2 C785A0E9 		movl	$0, -5728(%rbp)
+ 20255      FFFF0000 
+ 20255      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 20256              		.loc 2 1287 0
+ 20257 133cc F30F6F85 		movdqu	-5728(%rbp), %xmm0
+ 20257      A0E9FFFF 
+ 20258              	.LBE2349:
+ 20259              	.LBE2348:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 20260              		.loc 2 1568 0
+ 20261 133d4 660F7F85 		movdqa	%xmm0, -8256(%rbp)
+ 20261      C0DFFFFF 
+ 20262 133dc 660F6F85 		movdqa	-8256(%rbp), %xmm0
+ 20262      C0DFFFFF 
+ 20263 133e4 660FEF85 		pxor	-144(%rbp), %xmm0
+ 20263      70FFFFFF 
+ 20264 133ec F30F7F85 		movdqu	%xmm0, -144(%rbp)
+ 20264      70FFFFFF 
+ 20265 133f4 660F6F85 		movdqa	-8256(%rbp), %xmm0
+ 20265      C0DFFFFF 
+ 20266 133fc F30F7F45 		movdqu	%xmm0, -96(%rbp)
+ 20266      A0
+ 20267              	.LBB2350:
+ 20268              	.LBB2351:
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+ 20269              		.loc 2 1282 0
+ 20270 13401 F30F6F45 		movdqu	-96(%rbp), %xmm0
+ 20270      A0
+ 20271 13406 F30F7F85 		movdqu	%xmm0, -5712(%rbp)
+ 20271      B0E9FFFF 
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+ 20272              		.loc 2 1283 0
+ 20273 1340e 8B85B8E9 		movl	-5704(%rbp), %eax
+ 20273      FFFF
+ 20274 13414 8985BCE9 		movl	%eax, -5700(%rbp)
+ 20274      FFFF
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+ 20275              		.loc 2 1284 0
+ 20276 1341a 8B85B4E9 		movl	-5708(%rbp), %eax
+ 20276      FFFF
+ 20277 13420 8985B8E9 		movl	%eax, -5704(%rbp)
+ 20277      FFFF
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+ 20278              		.loc 2 1285 0
+ 20279 13426 8B85B0E9 		movl	-5712(%rbp), %eax
+ 20279      FFFF
+ 20280 1342c 8985B4E9 		movl	%eax, -5708(%rbp)
+ 20280      FFFF
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+ 20281              		.loc 2 1286 0
+ 20282 13432 C785B0E9 		movl	$0, -5712(%rbp)
+ 20282      FFFF0000 
+ 20282      0000
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+ 20283              		.loc 2 1287 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 623
+
+
+ 20284 1343c F30F6F85 		movdqu	-5712(%rbp), %xmm0
+ 20284      B0E9FFFF 
+ 20285              	.LBE2351:
+ 20286              	.LBE2350:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 20287              		.loc 2 1569 0
+ 20288 13444 660F7F85 		movdqa	%xmm0, -8256(%rbp)
+ 20288      C0DFFFFF 
+ 20289 1344c 660F6F85 		movdqa	-8256(%rbp), %xmm0
+ 20289      C0DFFFFF 
+ 20290 13454 660FEF85 		pxor	-144(%rbp), %xmm0
+ 20290      70FFFFFF 
+ 20291 1345c F30F7F85 		movdqu	%xmm0, -144(%rbp)
+ 20291      70FFFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 20292              		.loc 2 1571 0
+ 20293 13464 F30F6F85 		movdqu	-144(%rbp), %xmm0
+ 20293      70FFFFFF 
+ 20294              	.LBE2345:
+ 20295              	.LBE2344:
+1938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(14,0x40);   /* k56 : k57 : k58 : k59 */
+ 20296              		.loc 2 1938 0
+ 20297 1346c F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 20297      C0E9FFFF 
+ 20298 13474 F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 20298      C0E9FFFF 
+ 20299 1347c F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 20299      C0
+ 20300 13481 F30F6F85 		movdqu	-5664(%rbp), %xmm0
+ 20300      E0E9FFFF 
+ 20301 13489 F30F7F45 		movdqu	%xmm0, -80(%rbp)
+ 20301      B0
+ 20302              	.LBB2352:
+ 20303              	.LBB2353:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 20304              		.loc 2 178 0
+ 20305 1348e F30F6F45 		movdqu	-80(%rbp), %xmm0
+ 20305      B0
+ 20306 13493 F30F6F4D 		movdqu	-64(%rbp), %xmm1
+ 20306      C0
+ 20307 13498 660FEFC1 		pxor	%xmm1, %xmm0
+ 20308              	.LBE2353:
+ 20309              	.LBE2352:
+1938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(14,0x40);   /* k56 : k57 : k58 : k59 */
+ 20310              		.loc 2 1938 0
+ 20311 1349c F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 20311      C0E9FFFF 
+ 20312 134a4 488B85D8 		movq	-8232(%rbp), %rax
+ 20312      DFFFFF
+ 20313 134ab 4805E000 		addq	$224, %rax
+ 20313      0000
+ 20314 134b1 F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 20314      C0E9FFFF 
+ 20315 134b9 F30F7F00 		movdqu	%xmm0, (%rax)
+1939:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 20316              		.loc 2 1939 0
+ 20317 134bd 4881C4A8 		addq	$8872, %rsp
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 624
+
+
+ 20317      220000
+ 20318 134c4 5B       		popq	%rbx
+ 20319 134c5 415C     		popq	%r12
+ 20320 134c7 415D     		popq	%r13
+ 20321 134c9 415E     		popq	%r14
+ 20322 134cb 415F     		popq	%r15
+ 20323 134cd C9       		leave
+ 20324 134ce C3       		ret
+ 20325              		.cfi_endproc
+ 20326              	.LFE565:
+ 20327              		.size	KAESBlockCipherVecKeyExpansion256, .-KAESBlockCipherVecKeyExpansion256
+ 20328              		.type	KAESBlockCipherVecEqInvKeyExpansion, @function
+ 20329              	KAESBlockCipherVecEqInvKeyExpansion:
+ 20330              	.LFB566:
+1951:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 20331              		.loc 2 1951 0
+ 20332              		.cfi_startproc
+ 20333 134cf 55       		pushq	%rbp
+ 20334              	.LCFI8:
+ 20335              		.cfi_def_cfa_offset 16
+ 20336 134d0 4889E5   		movq	%rsp, %rbp
+ 20337              		.cfi_offset 6, -16
+ 20338              	.LCFI9:
+ 20339              		.cfi_def_cfa_register 6
+ 20340 134d3 53       		pushq	%rbx
+ 20341 134d4 4881ECD0 		subq	$720, %rsp
+ 20341      020000
+ 20342 134db 4889BD28 		movq	%rdi, -728(%rbp)
+ 20342      FDFFFF
+ 20343 134e2 4889B520 		movq	%rsi, -736(%rbp)
+ 20343      FDFFFF
+ 20344 134e9 89951CFD 		movl	%edx, -740(%rbp)
+ 20344      FFFF
+1954:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     jx = Nr;
+ 20345              		.loc 2 1954 0
+ 20346 134ef 8B851CFD 		movl	-740(%rbp), %eax
+ 20346      FFFF
+ 20347 134f5 8985FCFD 		movl	%eax, -516(%rbp)
+ 20347      FFFF
+1955:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ix = 0;
+ 20348              		.loc 2 1955 0
+ 20349 134fb C785F8FD 		movl	$0, -520(%rbp)
+ 20349      FFFF0000 
+ 20349      0000
+1956:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r[ix++] = dr[jx--];
+ 20350              		.loc 2 1956 0
+ 20351 13505 8B85F8FD 		mov	-520(%rbp), %eax
+ 20351      FFFF
+ 20352 1350b 48C1E004 		salq	$4, %rax
+ 20353 1350f 48038528 		addq	-728(%rbp), %rax
+ 20353      FDFFFF
+ 20354 13516 8B95FCFD 		mov	-516(%rbp), %edx
+ 20354      FFFF
+ 20355 1351c 48C1E204 		salq	$4, %rdx
+ 20356 13520 48039520 		addq	-736(%rbp), %rdx
+ 20356      FDFFFF
+ 20357 13527 660F6F02 		movdqa	(%rdx), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 625
+
+
+ 20358 1352b 660F7F00 		movdqa	%xmm0, (%rax)
+ 20359 1352f 8385F8FD 		addl	$1, -520(%rbp)
+ 20359      FFFF01
+ 20360 13536 83ADFCFD 		subl	$1, -516(%rbp)
+ 20360      FFFF01
+1957:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     while (jx)
+ 20361              		.loc 2 1957 0
+ 20362 1353d E91F0600 		jmp	.L492
+ 20362      00
+ 20363              		.cfi_offset 3, -24
+ 20364              	.L507:
+1958:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         r[ix++] = AESBCMEMBER(InvMixColumns)(dr[jx--]);
+ 20365              		.loc 2 1958 0
+ 20366 13542 8B85F8FD 		mov	-520(%rbp), %eax
+ 20366      FFFF
+ 20367 13548 48C1E004 		salq	$4, %rax
+ 20368 1354c 48038528 		addq	-728(%rbp), %rax
+ 20368      FDFFFF
+ 20369 13553 8B95FCFD 		mov	-516(%rbp), %edx
+ 20369      FFFF
+ 20370 13559 48C1E204 		salq	$4, %rdx
+ 20371 1355d 48039520 		addq	-736(%rbp), %rdx
+ 20371      FDFFFF
+ 20372 13564 660F6F02 		movdqa	(%rdx), %xmm0
+ 20373 13568 83ADFCFD 		subl	$1, -516(%rbp)
+ 20373      FFFF01
+ 20374 1356f F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 20374      00FEFFFF 
+ 20375 13577 F30F6F85 		movdqu	-512(%rbp), %xmm0
+ 20375      00FEFFFF 
+ 20376 1357f F30F7F85 		movdqu	%xmm0, -480(%rbp)
+ 20376      20FEFFFF 
+ 20377              	.LBB2397:
+ 20378              	.LBB2398:
+ 20379              	.LBB2399:
+ 20380              	.LBB2400:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 20381              		.loc 2 667 0
+ 20382 13587 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 20382      00000000 
+ 20383 1358f F30F6F8D 		movdqu	-480(%rbp), %xmm1
+ 20383      20FEFFFF 
+ 20384 13597 F30F7F8D 		movdqu	%xmm1, -448(%rbp)
+ 20384      40FEFFFF 
+ 20385 1359f F30F7F85 		movdqu	%xmm0, -464(%rbp)
+ 20385      30FEFFFF 
+ 20386              	.LBB2401:
+ 20387              	.LBB2402:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 20388              		.loc 2 380 0
+ 20389 135a7 F30F6F85 		movdqu	-448(%rbp), %xmm0
+ 20389      40FEFFFF 
+ 20390 135af F30F7F85 		movdqu	%xmm0, -656(%rbp)
+ 20390      70FDFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 20391              		.loc 2 381 0
+ 20392 135b7 F30F6F85 		movdqu	-464(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 626
+
+
+ 20392      30FEFFFF 
+ 20393 135bf F30F7F85 		movdqu	%xmm0, -672(%rbp)
+ 20393      60FDFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 20394              		.loc 2 383 0
+ 20395 135c7 C7855CFE 		movl	$0, -420(%rbp)
+ 20395      FFFF0000 
+ 20395      0000
+ 20396 135d1 EB5D     		jmp	.L493
+ 20397              	.L496:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 20398              		.loc 2 385 0
+ 20399 135d3 8B955CFE 		movl	-420(%rbp), %edx
+ 20399      FFFF
+ 20400 135d9 89D2     		mov	%edx, %edx
+ 20401 135db 0FB69415 		movzbl	-672(%rbp,%rdx), %edx
+ 20401      60FDFFFF 
+ 20402 135e3 84D2     		testb	%dl, %dl
+ 20403 135e5 7912     		jns	.L494
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 20404              		.loc 2 386 0
+ 20405 135e7 8B955CFE 		movl	-420(%rbp), %edx
+ 20405      FFFF
+ 20406 135ed 89D2     		mov	%edx, %edx
+ 20407 135ef C6841580 		movb	$0, -640(%rbp,%rdx)
+ 20407      FDFFFF00 
+ 20408 135f7 EB30     		jmp	.L495
+ 20409              	.L494:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 20410              		.loc 2 388 0
+ 20411 135f9 8B9D5CFE 		movl	-420(%rbp), %ebx
+ 20411      FFFF
+ 20412 135ff 8B955CFE 		movl	-420(%rbp), %edx
+ 20412      FFFF
+ 20413 13605 89D2     		mov	%edx, %edx
+ 20414 13607 0FB69415 		movzbl	-672(%rbp,%rdx), %edx
+ 20414      60FDFFFF 
+ 20415 1360f 0FB6D2   		movzbl	%dl, %edx
+ 20416 13612 83E20F   		andl	$15, %edx
+ 20417 13615 4863D2   		movslq	%edx,%rdx
+ 20418 13618 0FB68C15 		movzbl	-656(%rbp,%rdx), %ecx
+ 20418      70FDFFFF 
+ 20419 13620 89DA     		mov	%ebx, %edx
+ 20420 13622 888C1580 		movb	%cl, -640(%rbp,%rdx)
+ 20420      FDFFFF
+ 20421              	.L495:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 20422              		.loc 2 383 0
+ 20423 13629 83855CFE 		addl	$1, -420(%rbp)
+ 20423      FFFF01
+ 20424              	.L493:
+ 20425 13630 83BD5CFE 		cmpl	$15, -420(%rbp)
+ 20425      FFFF0F
+ 20426 13637 769A     		jbe	.L496
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 20427              		.loc 2 391 0
+ 20428 13639 F30F6F85 		movdqu	-640(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 627
+
+
+ 20428      80FDFFFF 
+ 20429              	.LBE2402:
+ 20430              	.LBE2401:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 20431              		.loc 2 667 0
+ 20432 13641 F30F7F85 		movdqu	%xmm0, -480(%rbp)
+ 20432      20FEFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 20433              		.loc 2 668 0
+ 20434 13649 F30F6F85 		movdqu	-480(%rbp), %xmm0
+ 20434      20FEFFFF 
+ 20435              	.LBE2400:
+ 20436              	.LBE2399:
+1106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r1 = AESBCMEMBER(RotBytesLeft) (state);
+ 20437              		.loc 2 1106 0
+ 20438 13651 660F7F85 		movdqa	%xmm0, -768(%rbp)
+ 20438      00FDFFFF 
+ 20439 13659 660F6F85 		movdqa	-768(%rbp), %xmm0
+ 20439      00FDFFFF 
+ 20440 13661 F30F7F85 		movdqu	%xmm0, -416(%rbp)
+ 20440      60FEFFFF 
+ 20441              	.LBB2403:
+ 20442              	.LBB2404:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 20443              		.loc 2 667 0
+ 20444 13669 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 20444      00000000 
+ 20445 13671 F30F6F8D 		movdqu	-416(%rbp), %xmm1
+ 20445      60FEFFFF 
+ 20446 13679 F30F7F8D 		movdqu	%xmm1, -384(%rbp)
+ 20446      80FEFFFF 
+ 20447 13681 F30F7F85 		movdqu	%xmm0, -400(%rbp)
+ 20447      70FEFFFF 
+ 20448              	.LBB2405:
+ 20449              	.LBB2406:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 20450              		.loc 2 380 0
+ 20451 13689 F30F6F85 		movdqu	-384(%rbp), %xmm0
+ 20451      80FEFFFF 
+ 20452 13691 F30F7F85 		movdqu	%xmm0, -608(%rbp)
+ 20452      A0FDFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 20453              		.loc 2 381 0
+ 20454 13699 F30F6F85 		movdqu	-400(%rbp), %xmm0
+ 20454      70FEFFFF 
+ 20455 136a1 F30F7F85 		movdqu	%xmm0, -624(%rbp)
+ 20455      90FDFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 20456              		.loc 2 383 0
+ 20457 136a9 C7859CFE 		movl	$0, -356(%rbp)
+ 20457      FFFF0000 
+ 20457      0000
+ 20458 136b3 EB5D     		jmp	.L497
+ 20459              	.L500:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 20460              		.loc 2 385 0
+ 20461 136b5 8B959CFE 		movl	-356(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 628
+
+
+ 20461      FFFF
+ 20462 136bb 89D2     		mov	%edx, %edx
+ 20463 136bd 0FB69415 		movzbl	-624(%rbp,%rdx), %edx
+ 20463      90FDFFFF 
+ 20464 136c5 84D2     		testb	%dl, %dl
+ 20465 136c7 7912     		jns	.L498
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 20466              		.loc 2 386 0
+ 20467 136c9 8B959CFE 		movl	-356(%rbp), %edx
+ 20467      FFFF
+ 20468 136cf 89D2     		mov	%edx, %edx
+ 20469 136d1 C68415B0 		movb	$0, -592(%rbp,%rdx)
+ 20469      FDFFFF00 
+ 20470 136d9 EB30     		jmp	.L499
+ 20471              	.L498:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 20472              		.loc 2 388 0
+ 20473 136db 8B9D9CFE 		movl	-356(%rbp), %ebx
+ 20473      FFFF
+ 20474 136e1 8B959CFE 		movl	-356(%rbp), %edx
+ 20474      FFFF
+ 20475 136e7 89D2     		mov	%edx, %edx
+ 20476 136e9 0FB69415 		movzbl	-624(%rbp,%rdx), %edx
+ 20476      90FDFFFF 
+ 20477 136f1 0FB6D2   		movzbl	%dl, %edx
+ 20478 136f4 83E20F   		andl	$15, %edx
+ 20479 136f7 4863D2   		movslq	%edx,%rdx
+ 20480 136fa 0FB68C15 		movzbl	-608(%rbp,%rdx), %ecx
+ 20480      A0FDFFFF 
+ 20481 13702 89DA     		mov	%ebx, %edx
+ 20482 13704 888C15B0 		movb	%cl, -592(%rbp,%rdx)
+ 20482      FDFFFF
+ 20483              	.L499:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 20484              		.loc 2 383 0
+ 20485 1370b 83859CFE 		addl	$1, -356(%rbp)
+ 20485      FFFF01
+ 20486              	.L497:
+ 20487 13712 83BD9CFE 		cmpl	$15, -356(%rbp)
+ 20487      FFFF0F
+ 20488 13719 769A     		jbe	.L500
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 20489              		.loc 2 391 0
+ 20490 1371b F30F6F85 		movdqu	-592(%rbp), %xmm0
+ 20490      B0FDFFFF 
+ 20491              	.LBE2406:
+ 20492              	.LBE2405:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 20493              		.loc 2 667 0
+ 20494 13723 F30F7F85 		movdqu	%xmm0, -416(%rbp)
+ 20494      60FEFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 20495              		.loc 2 668 0
+ 20496 1372b F30F6F85 		movdqu	-416(%rbp), %xmm0
+ 20496      60FEFFFF 
+ 20497              	.LBE2404:
+ 20498              	.LBE2403:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 629
+
+
+1107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r2 = AESBCMEMBER(RotBytesLeft) (r1);
+ 20499              		.loc 2 1107 0
+ 20500 13733 660F7F85 		movdqa	%xmm0, -784(%rbp)
+ 20500      F0FCFFFF 
+ 20501 1373b 660F6F85 		movdqa	-784(%rbp), %xmm0
+ 20501      F0FCFFFF 
+ 20502 13743 F30F7F85 		movdqu	%xmm0, -352(%rbp)
+ 20502      A0FEFFFF 
+ 20503              	.LBB2407:
+ 20504              	.LBB2408:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 20505              		.loc 2 667 0
+ 20506 1374b 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 20506      00000000 
+ 20507 13753 F30F6F8D 		movdqu	-352(%rbp), %xmm1
+ 20507      A0FEFFFF 
+ 20508 1375b F30F7F8D 		movdqu	%xmm1, -320(%rbp)
+ 20508      C0FEFFFF 
+ 20509 13763 F30F7F85 		movdqu	%xmm0, -336(%rbp)
+ 20509      B0FEFFFF 
+ 20510              	.LBB2409:
+ 20511              	.LBB2410:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 20512              		.loc 2 380 0
+ 20513 1376b F30F6F85 		movdqu	-320(%rbp), %xmm0
+ 20513      C0FEFFFF 
+ 20514 13773 F30F7F85 		movdqu	%xmm0, -560(%rbp)
+ 20514      D0FDFFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 20515              		.loc 2 381 0
+ 20516 1377b F30F6F85 		movdqu	-336(%rbp), %xmm0
+ 20516      B0FEFFFF 
+ 20517 13783 F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 20517      C0FDFFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 20518              		.loc 2 383 0
+ 20519 1378b C785DCFE 		movl	$0, -292(%rbp)
+ 20519      FFFF0000 
+ 20519      0000
+ 20520 13795 EB5D     		jmp	.L501
+ 20521              	.L504:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 20522              		.loc 2 385 0
+ 20523 13797 8B95DCFE 		movl	-292(%rbp), %edx
+ 20523      FFFF
+ 20524 1379d 89D2     		mov	%edx, %edx
+ 20525 1379f 0FB69415 		movzbl	-576(%rbp,%rdx), %edx
+ 20525      C0FDFFFF 
+ 20526 137a7 84D2     		testb	%dl, %dl
+ 20527 137a9 7912     		jns	.L502
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 20528              		.loc 2 386 0
+ 20529 137ab 8B95DCFE 		movl	-292(%rbp), %edx
+ 20529      FFFF
+ 20530 137b1 89D2     		mov	%edx, %edx
+ 20531 137b3 C68415E0 		movb	$0, -544(%rbp,%rdx)
+ 20531      FDFFFF00 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 630
+
+
+ 20532 137bb EB30     		jmp	.L503
+ 20533              	.L502:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 20534              		.loc 2 388 0
+ 20535 137bd 8B9DDCFE 		movl	-292(%rbp), %ebx
+ 20535      FFFF
+ 20536 137c3 8B95DCFE 		movl	-292(%rbp), %edx
+ 20536      FFFF
+ 20537 137c9 89D2     		mov	%edx, %edx
+ 20538 137cb 0FB69415 		movzbl	-576(%rbp,%rdx), %edx
+ 20538      C0FDFFFF 
+ 20539 137d3 0FB6D2   		movzbl	%dl, %edx
+ 20540 137d6 83E20F   		andl	$15, %edx
+ 20541 137d9 4863D2   		movslq	%edx,%rdx
+ 20542 137dc 0FB68C15 		movzbl	-560(%rbp,%rdx), %ecx
+ 20542      D0FDFFFF 
+ 20543 137e4 89DA     		mov	%ebx, %edx
+ 20544 137e6 888C15E0 		movb	%cl, -544(%rbp,%rdx)
+ 20544      FDFFFF
+ 20545              	.L503:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 20546              		.loc 2 383 0
+ 20547 137ed 8385DCFE 		addl	$1, -292(%rbp)
+ 20547      FFFF01
+ 20548              	.L501:
+ 20549 137f4 83BDDCFE 		cmpl	$15, -292(%rbp)
+ 20549      FFFF0F
+ 20550 137fb 769A     		jbe	.L504
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 20551              		.loc 2 391 0
+ 20552 137fd F30F6F85 		movdqu	-544(%rbp), %xmm0
+ 20552      E0FDFFFF 
+ 20553              	.LBE2410:
+ 20554              	.LBE2409:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 20555              		.loc 2 667 0
+ 20556 13805 F30F7F85 		movdqu	%xmm0, -352(%rbp)
+ 20556      A0FEFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 20557              		.loc 2 668 0
+ 20558 1380d F30F6F85 		movdqu	-352(%rbp), %xmm0
+ 20558      A0FEFFFF 
+ 20559              	.LBE2408:
+ 20560              	.LBE2407:
+1108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r3 = AESBCMEMBER(RotBytesLeft) (r2);        
+ 20561              		.loc 2 1108 0
+ 20562 13815 660F7F85 		movdqa	%xmm0, -800(%rbp)
+ 20562      E0FCFFFF 
+ 20563 1381d F30F6F85 		movdqu	-512(%rbp), %xmm0
+ 20563      00FEFFFF 
+ 20564 13825 F30F7F85 		movdqu	%xmm0, -272(%rbp)
+ 20564      F0FEFFFF 
+ 20565 1382d 660F6F85 		movdqa	-784(%rbp), %xmm0
+ 20565      F0FCFFFF 
+ 20566 13835 F30F7F85 		movdqu	%xmm0, -288(%rbp)
+ 20566      E0FEFFFF 
+ 20567              	.LBB2411:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 631
+
+
+ 20568              	.LBB2412:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 20569              		.loc 2 178 0
+ 20570 1383d F30F6F85 		movdqu	-288(%rbp), %xmm0
+ 20570      E0FEFFFF 
+ 20571 13845 F30F6F8D 		movdqu	-272(%rbp), %xmm1
+ 20571      F0FEFFFF 
+ 20572 1384d 660FEFC1 		pxor	%xmm1, %xmm0
+ 20573              	.LBE2412:
+ 20574              	.LBE2411:
+1110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f4 = AESBCMEMBER(VecXor) (state, r2);
+ 20575              		.loc 2 1110 0
+ 20576 13851 660F7F85 		movdqa	%xmm0, -832(%rbp)
+ 20576      C0FCFFFF 
+ 20577 13859 F30F6F85 		movdqu	-512(%rbp), %xmm0
+ 20577      00FEFFFF 
+ 20578 13861 F30F7F85 		movdqu	%xmm0, -240(%rbp)
+ 20578      10FFFFFF 
+ 20579 13869 660F6F85 		movdqa	-768(%rbp), %xmm0
+ 20579      00FDFFFF 
+ 20580 13871 F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 20580      00FFFFFF 
+ 20581              	.LBB2413:
+ 20582              	.LBB2414:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 20583              		.loc 2 178 0
+ 20584 13879 F30F6F85 		movdqu	-256(%rbp), %xmm0
+ 20584      00FFFFFF 
+ 20585 13881 F30F6F8D 		movdqu	-240(%rbp), %xmm1
+ 20585      10FFFFFF 
+ 20586 13889 660FEFC1 		pxor	%xmm1, %xmm0
+ 20587              	.LBE2414:
+ 20588              	.LBE2413:
+1111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f2 = AESBCMEMBER(VecXor) (state, r1);
+ 20589              		.loc 2 1111 0
+ 20590 1388d 660F7F85 		movdqa	%xmm0, -816(%rbp)
+ 20590      D0FCFFFF 
+ 20591 13895 660F6F85 		movdqa	-784(%rbp), %xmm0
+ 20591      F0FCFFFF 
+ 20592 1389d F30F7F85 		movdqu	%xmm0, -208(%rbp)
+ 20592      30FFFFFF 
+ 20593 138a5 660F6F85 		movdqa	-800(%rbp), %xmm0
+ 20593      E0FCFFFF 
+ 20594 138ad F30F7F85 		movdqu	%xmm0, -224(%rbp)
+ 20594      20FFFFFF 
+ 20595              	.LBB2415:
+ 20596              	.LBB2416:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 20597              		.loc 2 178 0
+ 20598 138b5 F30F6F85 		movdqu	-224(%rbp), %xmm0
+ 20598      20FFFFFF 
+ 20599 138bd F30F6F8D 		movdqu	-208(%rbp), %xmm1
+ 20599      30FFFFFF 
+ 20600 138c5 660FEFC1 		pxor	%xmm1, %xmm0
+ 20601              	.LBE2416:
+ 20602              	.LBE2415:
+1112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f8 = AESBCMEMBER(VecXor) (r2, r3);
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 632
+
+
+ 20603              		.loc 2 1112 0
+ 20604 138c9 660F7F85 		movdqa	%xmm0, -848(%rbp)
+ 20604      B0FCFFFF 
+ 20605 138d1 660F6F85 		movdqa	-848(%rbp), %xmm0
+ 20605      B0FCFFFF 
+ 20606 138d9 F30F7F85 		movdqu	%xmm0, -176(%rbp)
+ 20606      50FFFFFF 
+ 20607 138e1 660F6F85 		movdqa	-768(%rbp), %xmm0
+ 20607      00FDFFFF 
+ 20608 138e9 F30F7F85 		movdqu	%xmm0, -192(%rbp)
+ 20608      40FFFFFF 
+ 20609              	.LBB2417:
+ 20610              	.LBB2418:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 20611              		.loc 2 178 0
+ 20612 138f1 F30F6F85 		movdqu	-192(%rbp), %xmm0
+ 20612      40FFFFFF 
+ 20613 138f9 F30F6F8D 		movdqu	-176(%rbp), %xmm1
+ 20613      50FFFFFF 
+ 20614 13901 660FEFC1 		pxor	%xmm1, %xmm0
+ 20615              	.LBE2418:
+ 20616              	.LBE2417:
+1113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (f8, r1);
+ 20617              		.loc 2 1113 0
+ 20618 13905 F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 20618      00FEFFFF 
+ 20619 1390d 660F6F85 		movdqa	-848(%rbp), %xmm0
+ 20619      B0FCFFFF 
+ 20620 13915 F30F7F85 		movdqu	%xmm0, -144(%rbp)
+ 20620      70FFFFFF 
+ 20621 1391d 660F6F85 		movdqa	-816(%rbp), %xmm0
+ 20621      D0FCFFFF 
+ 20622 13925 F30F7F85 		movdqu	%xmm0, -160(%rbp)
+ 20622      60FFFFFF 
+ 20623              	.LBB2419:
+ 20624              	.LBB2420:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 20625              		.loc 2 178 0
+ 20626 1392d F30F6F85 		movdqu	-160(%rbp), %xmm0
+ 20626      60FFFFFF 
+ 20627 13935 F30F6F8D 		movdqu	-144(%rbp), %xmm1
+ 20627      70FFFFFF 
+ 20628 1393d 660FEFC1 		pxor	%xmm1, %xmm0
+ 20629              	.LBE2420:
+ 20630              	.LBE2419:
+1114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f8 = AESBCMEMBER(VecXor) (f8, f2);
+ 20631              		.loc 2 1114 0
+ 20632 13941 660F7F85 		movdqa	%xmm0, -848(%rbp)
+ 20632      B0FCFFFF 
+ 20633              	.LBB2421:
+1126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         fu2.state = f2;
+ 20634              		.loc 2 1126 0
+ 20635 13949 660F6F85 		movdqa	-816(%rbp), %xmm0
+ 20635      D0FCFFFF 
+ 20636 13951 F30F7F85 		movdqu	%xmm0, -688(%rbp)
+ 20636      50FDFFFF 
+1127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         fu4.state = f4;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 633
+
+
+ 20637              		.loc 2 1127 0
+ 20638 13959 660F6F85 		movdqa	-832(%rbp), %xmm0
+ 20638      C0FCFFFF 
+ 20639 13961 F30F7F85 		movdqu	%xmm0, -704(%rbp)
+ 20639      40FDFFFF 
+1128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         fu8.state = f8;
+ 20640              		.loc 2 1128 0
+ 20641 13969 660F6F85 		movdqa	-848(%rbp), %xmm0
+ 20641      B0FCFFFF 
+ 20642 13971 F30F7F85 		movdqu	%xmm0, -720(%rbp)
+ 20642      30FDFFFF 
+1130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         for (ix = 0; ix < sizeof fu2; ++ix)
+ 20643              		.loc 2 1130 0
+ 20644 13979 C7851CFE 		movl	$0, -484(%rbp)
+ 20644      FFFF0000 
+ 20644      0000
+ 20645 13983 E9F90000 		jmp	.L505
+ 20645      00
+ 20646              	.L506:
+1132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu2.bytes[ix] = AESBCMEMBER(FFmul02)(fu2.bytes[ix]);
+ 20647              		.loc 2 1132 0
+ 20648 13988 8B9D1CFE 		movl	-484(%rbp), %ebx
+ 20648      FFFF
+ 20649 1398e 8B951CFE 		movl	-484(%rbp), %edx
+ 20649      FFFF
+ 20650 13994 89D2     		mov	%edx, %edx
+ 20651 13996 0FB69415 		movzbl	-688(%rbp,%rdx), %edx
+ 20651      50FDFFFF 
+ 20652 1399e 0FB6D2   		movzbl	%dl, %edx
+ 20653 139a1 88558A   		movb	%dl, -118(%rbp)
+ 20654              	.LBB2422:
+ 20655              	.LBB2423:
+1012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 1) ^ AESBCMEMBER(FFtab)(b >> 7);
+ 20656              		.loc 2 1012 0
+ 20657 139a4 0FB6558A 		movzbl	-118(%rbp), %edx
+ 20658 139a8 01D2     		addl	%edx, %edx
+ 20659 139aa 89D6     		movl	%edx, %esi
+ 20660 139ac 0FB6558A 		movzbl	-118(%rbp), %edx
+ 20661 139b0 C0EA07   		shrb	$7, %dl
+ 20662 139b3 0FB6D2   		movzbl	%dl, %edx
+ 20663 139b6 88558B   		movb	%dl, -117(%rbp)
+ 20664              	.LBB2424:
+ 20665              	.LBB2425:
+1001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(FFtable)[x];
+ 20666              		.loc 2 1001 0
+ 20667 139b9 0FB6558B 		movzbl	-117(%rbp), %edx
+ 20668 139bd 4863CA   		movslq	%edx,%rcx
+ 20669 139c0 488D1500 		leaq	KAESBlockCipherVecFFtable(%rip), %rdx
+ 20669      000000
+ 20670 139c7 0FB61411 		movzbl	(%rcx,%rdx), %edx
+ 20671              	.LBE2425:
+ 20672              	.LBE2424:
+1012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 1) ^ AESBCMEMBER(FFtab)(b >> 7);
+ 20673              		.loc 2 1012 0
+ 20674 139cb 31F2     		xorl	%esi, %edx
+1132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu2.bytes[ix] = AESBCMEMBER(FFmul02)(fu2.bytes[ix]);
+ 20675              		.loc 2 1132 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 634
+
+
+ 20676 139cd 89D1     		movl	%edx, %ecx
+ 20677              	.LBE2423:
+ 20678              	.LBE2422:
+ 20679 139cf 89DA     		mov	%ebx, %edx
+ 20680 139d1 888C1550 		movb	%cl, -688(%rbp,%rdx)
+ 20680      FDFFFF
+1133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu4.bytes[ix] = AESBCMEMBER(FFmul04)(fu4.bytes[ix]);
+ 20681              		.loc 2 1133 0
+ 20682 139d8 8B9D1CFE 		movl	-484(%rbp), %ebx
+ 20682      FFFF
+ 20683 139de 8B951CFE 		movl	-484(%rbp), %edx
+ 20683      FFFF
+ 20684 139e4 89D2     		mov	%edx, %edx
+ 20685 139e6 0FB69415 		movzbl	-704(%rbp,%rdx), %edx
+ 20685      40FDFFFF 
+ 20686 139ee 0FB6D2   		movzbl	%dl, %edx
+ 20687 139f1 88558C   		movb	%dl, -116(%rbp)
+ 20688              	.LBB2426:
+ 20689              	.LBB2427:
+1023:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 2) ^ AESBCMEMBER(FFtab)(b >> 6);
+ 20690              		.loc 2 1023 0
+ 20691 139f4 0FB6558C 		movzbl	-116(%rbp), %edx
+ 20692 139f8 C1E202   		sall	$2, %edx
+ 20693 139fb 89D6     		movl	%edx, %esi
+ 20694 139fd 0FB6558C 		movzbl	-116(%rbp), %edx
+ 20695 13a01 C0EA06   		shrb	$6, %dl
+ 20696 13a04 0FB6D2   		movzbl	%dl, %edx
+ 20697 13a07 88558D   		movb	%dl, -115(%rbp)
+ 20698              	.LBB2428:
+ 20699              	.LBB2429:
+1001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(FFtable)[x];
+ 20700              		.loc 2 1001 0
+ 20701 13a0a 0FB6558D 		movzbl	-115(%rbp), %edx
+ 20702 13a0e 4863CA   		movslq	%edx,%rcx
+ 20703 13a11 488D1500 		leaq	KAESBlockCipherVecFFtable(%rip), %rdx
+ 20703      000000
+ 20704 13a18 0FB61411 		movzbl	(%rcx,%rdx), %edx
+ 20705              	.LBE2429:
+ 20706              	.LBE2428:
+1023:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 2) ^ AESBCMEMBER(FFtab)(b >> 6);
+ 20707              		.loc 2 1023 0
+ 20708 13a1c 31F2     		xorl	%esi, %edx
+1133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu4.bytes[ix] = AESBCMEMBER(FFmul04)(fu4.bytes[ix]);
+ 20709              		.loc 2 1133 0
+ 20710 13a1e 89D1     		movl	%edx, %ecx
+ 20711              	.LBE2427:
+ 20712              	.LBE2426:
+ 20713 13a20 89DA     		mov	%ebx, %edx
+ 20714 13a22 888C1540 		movb	%cl, -704(%rbp,%rdx)
+ 20714      FDFFFF
+1134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu8.bytes[ix] = AESBCMEMBER(FFmul08)(fu8.bytes[ix]);
+ 20715              		.loc 2 1134 0
+ 20716 13a29 8B9D1CFE 		movl	-484(%rbp), %ebx
+ 20716      FFFF
+ 20717 13a2f 8B951CFE 		movl	-484(%rbp), %edx
+ 20717      FFFF
+ 20718 13a35 89D2     		mov	%edx, %edx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 635
+
+
+ 20719 13a37 0FB69415 		movzbl	-720(%rbp,%rdx), %edx
+ 20719      30FDFFFF 
+ 20720 13a3f 0FB6D2   		movzbl	%dl, %edx
+ 20721 13a42 88558E   		movb	%dl, -114(%rbp)
+ 20722              	.LBB2430:
+ 20723              	.LBB2431:
+1034:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 3) ^ AESBCMEMBER(FFtab)(b >> 5);
+ 20724              		.loc 2 1034 0
+ 20725 13a45 0FB6558E 		movzbl	-114(%rbp), %edx
+ 20726 13a49 C1E203   		sall	$3, %edx
+ 20727 13a4c 89D6     		movl	%edx, %esi
+ 20728 13a4e 0FB6558E 		movzbl	-114(%rbp), %edx
+ 20729 13a52 C0EA05   		shrb	$5, %dl
+ 20730 13a55 0FB6D2   		movzbl	%dl, %edx
+ 20731 13a58 88558F   		movb	%dl, -113(%rbp)
+ 20732              	.LBB2432:
+ 20733              	.LBB2433:
+1001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(FFtable)[x];
+ 20734              		.loc 2 1001 0
+ 20735 13a5b 0FB6558F 		movzbl	-113(%rbp), %edx
+ 20736 13a5f 4863CA   		movslq	%edx,%rcx
+ 20737 13a62 488D1500 		leaq	KAESBlockCipherVecFFtable(%rip), %rdx
+ 20737      000000
+ 20738 13a69 0FB61411 		movzbl	(%rcx,%rdx), %edx
+ 20739              	.LBE2433:
+ 20740              	.LBE2432:
+1034:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 3) ^ AESBCMEMBER(FFtab)(b >> 5);
+ 20741              		.loc 2 1034 0
+ 20742 13a6d 31F2     		xorl	%esi, %edx
+1134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu8.bytes[ix] = AESBCMEMBER(FFmul08)(fu8.bytes[ix]);
+ 20743              		.loc 2 1134 0
+ 20744 13a6f 89D1     		movl	%edx, %ecx
+ 20745              	.LBE2431:
+ 20746              	.LBE2430:
+ 20747 13a71 89DA     		mov	%ebx, %edx
+ 20748 13a73 888C1530 		movb	%cl, -720(%rbp,%rdx)
+ 20748      FDFFFF
+1130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         for (ix = 0; ix < sizeof fu2; ++ix)
+ 20749              		.loc 2 1130 0
+ 20750 13a7a 83851CFE 		addl	$1, -484(%rbp)
+ 20750      FFFF01
+ 20751              	.L505:
+ 20752 13a81 83BD1CFE 		cmpl	$15, -484(%rbp)
+ 20752      FFFF0F
+ 20753 13a88 0F86FAFE 		jbe	.L506
+ 20753      FFFF
+1136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         f2 = fu2.state;
+ 20754              		.loc 2 1136 0
+ 20755 13a8e F30F6F85 		movdqu	-688(%rbp), %xmm0
+ 20755      50FDFFFF 
+ 20756 13a96 660F7F85 		movdqa	%xmm0, -816(%rbp)
+ 20756      D0FCFFFF 
+1137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         f4 = fu4.state;
+ 20757              		.loc 2 1137 0
+ 20758 13a9e F30F6F85 		movdqu	-704(%rbp), %xmm0
+ 20758      40FDFFFF 
+ 20759 13aa6 660F7F85 		movdqa	%xmm0, -832(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 636
+
+
+ 20759      C0FCFFFF 
+1138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         f8 = fu8.state;
+ 20760              		.loc 2 1138 0
+ 20761 13aae F30F6F85 		movdqu	-720(%rbp), %xmm0
+ 20761      30FDFFFF 
+ 20762 13ab6 660F7F85 		movdqa	%xmm0, -848(%rbp)
+ 20762      B0FCFFFF 
+ 20763 13abe F30F6F85 		movdqu	-512(%rbp), %xmm0
+ 20763      00FEFFFF 
+ 20764 13ac6 F30F7F45 		movdqu	%xmm0, -96(%rbp)
+ 20764      A0
+ 20765 13acb 660F6F85 		movdqa	-816(%rbp), %xmm0
+ 20765      D0FCFFFF 
+ 20766 13ad3 F30F7F45 		movdqu	%xmm0, -112(%rbp)
+ 20766      90
+ 20767              	.LBE2421:
+ 20768              	.LBB2434:
+ 20769              	.LBB2435:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 20770              		.loc 2 178 0
+ 20771 13ad8 F30F6F45 		movdqu	-112(%rbp), %xmm0
+ 20771      90
+ 20772 13add F30F6F4D 		movdqu	-96(%rbp), %xmm1
+ 20772      A0
+ 20773 13ae2 660FEFC1 		pxor	%xmm1, %xmm0
+ 20774              	.LBE2435:
+ 20775              	.LBE2434:
+1142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f2);
+ 20776              		.loc 2 1142 0
+ 20777 13ae6 F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 20777      00FEFFFF 
+ 20778 13aee F30F6F85 		movdqu	-512(%rbp), %xmm0
+ 20778      00FEFFFF 
+ 20779 13af6 F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 20779      C0
+ 20780 13afb 660F6F85 		movdqa	-832(%rbp), %xmm0
+ 20780      C0FCFFFF 
+ 20781 13b03 F30F7F45 		movdqu	%xmm0, -80(%rbp)
+ 20781      B0
+ 20782              	.LBB2436:
+ 20783              	.LBB2437:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 20784              		.loc 2 178 0
+ 20785 13b08 F30F6F45 		movdqu	-80(%rbp), %xmm0
+ 20785      B0
+ 20786 13b0d F30F6F4D 		movdqu	-64(%rbp), %xmm1
+ 20786      C0
+ 20787 13b12 660FEFC1 		pxor	%xmm1, %xmm0
+ 20788              	.LBE2437:
+ 20789              	.LBE2436:
+1143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f4);
+ 20790              		.loc 2 1143 0
+ 20791 13b16 F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 20791      00FEFFFF 
+ 20792 13b1e F30F6F85 		movdqu	-512(%rbp), %xmm0
+ 20792      00FEFFFF 
+ 20793 13b26 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 637
+
+
+ 20793      E0
+ 20794 13b2b 660F6F85 		movdqa	-848(%rbp), %xmm0
+ 20794      B0FCFFFF 
+ 20795 13b33 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 20795      D0
+ 20796              	.LBB2438:
+ 20797              	.LBB2439:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 20798              		.loc 2 178 0
+ 20799 13b38 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 20799      D0
+ 20800 13b3d F30F6F4D 		movdqu	-32(%rbp), %xmm1
+ 20800      E0
+ 20801 13b42 660FEFC1 		pxor	%xmm1, %xmm0
+ 20802              	.LBE2439:
+ 20803              	.LBE2438:
+1144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f8);
+ 20804              		.loc 2 1144 0
+ 20805 13b46 F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 20805      00FEFFFF 
+1148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 20806              		.loc 2 1148 0
+ 20807 13b4e F30F6F85 		movdqu	-512(%rbp), %xmm0
+ 20807      00FEFFFF 
+ 20808              	.LBE2398:
+ 20809              	.LBE2397:
+1958:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         r[ix++] = AESBCMEMBER(InvMixColumns)(dr[jx--]);
+ 20810              		.loc 2 1958 0
+ 20811 13b56 660F7F00 		movdqa	%xmm0, (%rax)
+ 20812 13b5a 8385F8FD 		addl	$1, -520(%rbp)
+ 20812      FFFF01
+ 20813              	.L492:
+1957:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     while (jx)
+ 20814              		.loc 2 1957 0
+ 20815 13b61 83BDFCFD 		cmpl	$0, -516(%rbp)
+ 20815      FFFF00
+ 20816 13b68 0F85D4F9 		jne	.L507
+ 20816      FFFF
+1959:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r[ix] = dr[jx];
+ 20817              		.loc 2 1959 0
+ 20818 13b6e 8B85F8FD 		mov	-520(%rbp), %eax
+ 20818      FFFF
+ 20819 13b74 48C1E004 		salq	$4, %rax
+ 20820 13b78 48038528 		addq	-728(%rbp), %rax
+ 20820      FDFFFF
+ 20821 13b7f 8B95FCFD 		mov	-516(%rbp), %edx
+ 20821      FFFF
+ 20822 13b85 48C1E204 		salq	$4, %rdx
+ 20823 13b89 48039520 		addq	-736(%rbp), %rdx
+ 20823      FDFFFF
+ 20824 13b90 660F6F02 		movdqa	(%rdx), %xmm0
+ 20825 13b94 660F7F00 		movdqa	%xmm0, (%rax)
+1960:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 20826              		.loc 2 1960 0
+ 20827 13b98 4881C4D0 		addq	$720, %rsp
+ 20827      020000
+ 20828 13b9f 5B       		popq	%rbx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 638
+
+
+ 20829 13ba0 C9       		leave
+ 20830 13ba1 C3       		ret
+ 20831              		.cfi_endproc
+ 20832              	.LFE566:
+ 20833              		.size	KAESBlockCipherVecEqInvKeyExpansion, .-KAESBlockCipherVecEqInvKeyExpansion
+ 20834              		.type	KAESBlockCipherVecEqInvKeyExpansion128, @function
+ 20835              	KAESBlockCipherVecEqInvKeyExpansion128:
+ 20836              	.LFB567:
+1965:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 20837              		.loc 2 1965 0
+ 20838              		.cfi_startproc
+ 20839 13ba2 55       		pushq	%rbp
+ 20840              	.LCFI10:
+ 20841              		.cfi_def_cfa_offset 16
+ 20842 13ba3 4889E5   		movq	%rsp, %rbp
+ 20843              		.cfi_offset 6, -16
+ 20844              	.LCFI11:
+ 20845              		.cfi_def_cfa_register 6
+ 20846 13ba6 4883EC10 		subq	$16, %rsp
+ 20847 13baa 48897DF8 		movq	%rdi, -8(%rbp)
+ 20848 13bae 488975F0 		movq	%rsi, -16(%rbp)
+1966:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_128);
+ 20849              		.loc 2 1966 0
+ 20850 13bb2 488B4DF0 		movq	-16(%rbp), %rcx
+ 20851 13bb6 488B45F8 		movq	-8(%rbp), %rax
+ 20852 13bba BA0A0000 		movl	$10, %edx
+ 20852      00
+ 20853 13bbf 4889CE   		movq	%rcx, %rsi
+ 20854 13bc2 4889C7   		movq	%rax, %rdi
+ 20855 13bc5 E805F9FF 		call	KAESBlockCipherVecEqInvKeyExpansion
+ 20855      FF
+1967:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 20856              		.loc 2 1967 0
+ 20857 13bca C9       		leave
+ 20858 13bcb C3       		ret
+ 20859              		.cfi_endproc
+ 20860              	.LFE567:
+ 20861              		.size	KAESBlockCipherVecEqInvKeyExpansion128, .-KAESBlockCipherVecEqInvKeyExpansion128
+ 20862              		.type	KAESBlockCipherVecEqInvKeyExpansion192, @function
+ 20863              	KAESBlockCipherVecEqInvKeyExpansion192:
+ 20864              	.LFB568:
+1972:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 20865              		.loc 2 1972 0
+ 20866              		.cfi_startproc
+ 20867 13bcc 55       		pushq	%rbp
+ 20868              	.LCFI12:
+ 20869              		.cfi_def_cfa_offset 16
+ 20870 13bcd 4889E5   		movq	%rsp, %rbp
+ 20871              		.cfi_offset 6, -16
+ 20872              	.LCFI13:
+ 20873              		.cfi_def_cfa_register 6
+ 20874 13bd0 4883EC10 		subq	$16, %rsp
+ 20875 13bd4 48897DF8 		movq	%rdi, -8(%rbp)
+ 20876 13bd8 488975F0 		movq	%rsi, -16(%rbp)
+1973:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_192);
+ 20877              		.loc 2 1973 0
+ 20878 13bdc 488B4DF0 		movq	-16(%rbp), %rcx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 639
+
+
+ 20879 13be0 488B45F8 		movq	-8(%rbp), %rax
+ 20880 13be4 BA0C0000 		movl	$12, %edx
+ 20880      00
+ 20881 13be9 4889CE   		movq	%rcx, %rsi
+ 20882 13bec 4889C7   		movq	%rax, %rdi
+ 20883 13bef E8DBF8FF 		call	KAESBlockCipherVecEqInvKeyExpansion
+ 20883      FF
+1974:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 20884              		.loc 2 1974 0
+ 20885 13bf4 C9       		leave
+ 20886 13bf5 C3       		ret
+ 20887              		.cfi_endproc
+ 20888              	.LFE568:
+ 20889              		.size	KAESBlockCipherVecEqInvKeyExpansion192, .-KAESBlockCipherVecEqInvKeyExpansion192
+ 20890              		.type	KAESBlockCipherVecEqInvKeyExpansion256, @function
+ 20891              	KAESBlockCipherVecEqInvKeyExpansion256:
+ 20892              	.LFB569:
+1979:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 20893              		.loc 2 1979 0
+ 20894              		.cfi_startproc
+ 20895 13bf6 55       		pushq	%rbp
+ 20896              	.LCFI14:
+ 20897              		.cfi_def_cfa_offset 16
+ 20898 13bf7 4889E5   		movq	%rsp, %rbp
+ 20899              		.cfi_offset 6, -16
+ 20900              	.LCFI15:
+ 20901              		.cfi_def_cfa_register 6
+ 20902 13bfa 4883EC10 		subq	$16, %rsp
+ 20903 13bfe 48897DF8 		movq	%rdi, -8(%rbp)
+ 20904 13c02 488975F0 		movq	%rsi, -16(%rbp)
+1980:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_256);
+ 20905              		.loc 2 1980 0
+ 20906 13c06 488B4DF0 		movq	-16(%rbp), %rcx
+ 20907 13c0a 488B45F8 		movq	-8(%rbp), %rax
+ 20908 13c0e BA0E0000 		movl	$14, %edx
+ 20908      00
+ 20909 13c13 4889CE   		movq	%rcx, %rsi
+ 20910 13c16 4889C7   		movq	%rax, %rdi
+ 20911 13c19 E8B1F8FF 		call	KAESBlockCipherVecEqInvKeyExpansion
+ 20911      FF
+1981:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 20912              		.loc 2 1981 0
+ 20913 13c1e C9       		leave
+ 20914 13c1f C3       		ret
+ 20915              		.cfi_endproc
+ 20916              	.LFE569:
+ 20917              		.size	KAESBlockCipherVecEqInvKeyExpansion256, .-KAESBlockCipherVecEqInvKeyExpansion256
+ 20918              		.section	.rodata
+ 20919              	.LC5:
+ 20920 03d2 53746172 		.string	"Start of Round"
+ 20920      74206F66 
+ 20920      20526F75 
+ 20920      6E6400
+ 20921              	.LC6:
+ 20922 03e1 526F756E 		.string	"Round Key"
+ 20922      64204B65 
+ 20922      7900
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 640
+
+
+ 20923              	.LC7:
+ 20924 03eb 456E6420 		.string	"End 1st Round"
+ 20924      31737420 
+ 20924      526F756E 
+ 20924      6400
+ 20925              	.LC8:
+ 20926 03f9 41667465 		.string	"After SubBytes"
+ 20926      72205375 
+ 20926      62427974 
+ 20926      657300
+ 20927              	.LC9:
+ 20928 0408 41667465 		.string	"After ShiftRow"
+ 20928      72205368 
+ 20928      69667452 
+ 20928      6F7700
+ 20929              	.LC10:
+ 20930 0417 41667465 		.string	"After MixColum"
+ 20930      72204D69 
+ 20930      78436F6C 
+ 20930      756D00
+ 20931              	.LC11:
+ 20932 0426 456E6420 		.string	"End of Round"
+ 20932      6F662052 
+ 20932      6F756E64 
+ 20932      00
+ 20933              		.text
+ 20934              		.type	KAESBlockCipherVecCipher, @function
+ 20935              	KAESBlockCipherVecCipher:
+ 20936              	.LFB573:
+2094:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 20937              		.loc 2 2094 0
+ 20938              		.cfi_startproc
+ 20939 13c20 55       		pushq	%rbp
+ 20940              	.LCFI16:
+ 20941              		.cfi_def_cfa_offset 16
+ 20942 13c21 4889E5   		movq	%rsp, %rbp
+ 20943              		.cfi_offset 6, -16
+ 20944              	.LCFI17:
+ 20945              		.cfi_def_cfa_register 6
+ 20946 13c24 4157     		pushq	%r15
+ 20947 13c26 4156     		pushq	%r14
+ 20948 13c28 4155     		pushq	%r13
+ 20949 13c2a 4154     		pushq	%r12
+ 20950 13c2c 53       		pushq	%rbx
+ 20951 13c2d 4881ECC8 		subq	$2504, %rsp
+ 20951      090000
+ 20952 13c34 660F7F85 		movdqa	%xmm0, -2400(%rbp)
+ 20952      A0F6FFFF 
+ 20953 13c3c 4889BD98 		movq	%rdi, -2408(%rbp)
+ 20953      F6FFFF
+ 20954 13c43 89B594F6 		movl	%esi, -2412(%rbp)
+ 20954      FFFF
+2095:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix = 0;
+ 20955              		.loc 2 2095 0
+ 20956 13c49 C7855CF9 		movl	$0, -1700(%rbp)
+ 20956      FFFF0000 
+ 20956      0000
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 641
+
+
+2097:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(FirstRound) (state, key[ix++]);
+ 20957              		.loc 2 2097 0
+ 20958 13c53 8B855CF9 		mov	-1700(%rbp), %eax
+ 20958      FFFF
+ 20959 13c59 48C1E004 		salq	$4, %rax
+ 20960 13c5d 48038598 		addq	-2408(%rbp), %rax
+ 20960      F6FFFF
+ 20961 13c64 660F6F00 		movdqa	(%rax), %xmm0
+ 20962 13c68 83855CF9 		addl	$1, -1700(%rbp)
+ 20962      FFFF01
+ 20963 13c6f 660F6F8D 		movdqa	-2400(%rbp), %xmm1
+ 20963      A0F6FFFF 
+ 20964 13c77 F30F7F8D 		movdqu	%xmm1, -1680(%rbp)
+ 20964      70F9FFFF 
+ 20965 13c7f F30F7F85 		movdqu	%xmm0, -1696(%rbp)
+ 20965      60F9FFFF 
+ 20966              	.LBB2547:
+ 20967              	.LBB2548:
+ 20968              	.LBB2549:
+1994:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Start of Round", state);
+ 20969              		.loc 2 1994 0
+ 20970 13c87 F30F6F85 		movdqu	-1680(%rbp), %xmm0
+ 20970      70F9FFFF 
+ 20971 13c8f F30F7F85 		movdqu	%xmm0, -2352(%rbp)
+ 20971      D0F6FFFF 
+ 20972              		.cfi_offset 3, -56
+ 20973              		.cfi_offset 12, -48
+ 20974              		.cfi_offset 13, -40
+ 20975              		.cfi_offset 14, -32
+ 20976              		.cfi_offset 15, -24
+ 20977 13c97 E8000000 		call	KDbgWriterGet at PLT
+ 20977      00
+ 20978 13c9c 4885C0   		testq	%rax, %rax
+ 20979 13c9f 7479     		je	.L517
+ 20980 13ca1 BF010000 		movl	$1, %edi
+ 20980      00
+ 20981 13ca6 E8000000 		call	KDbgCondToFlag at PLT
+ 20981      00
+ 20982 13cab 4889C6   		movq	%rax, %rsi
+ 20983 13cae BF100000 		movl	$16, %edi
+ 20983      00
+ 20984 13cb3 E8000000 		call	KDbgTestModConds at PLT
+ 20984      00
+ 20985 13cb8 84C0     		testb	%al, %al
+ 20986 13cba 745E     		je	.L517
+ 20987 13cbc 8B85DCF6 		movl	-2340(%rbp), %eax
+ 20987      FFFF
+ 20988 13cc2 89C7     		movl	%eax, %edi
+ 20989 13cc4 E837C3FE 		call	bswap_32
+ 20989      FF
+ 20990 13cc9 4189C5   		movl	%eax, %r13d
+ 20991 13ccc 8B85D8F6 		movl	-2344(%rbp), %eax
+ 20991      FFFF
+ 20992 13cd2 89C7     		movl	%eax, %edi
+ 20993 13cd4 E827C3FE 		call	bswap_32
+ 20993      FF
+ 20994 13cd9 4189C4   		movl	%eax, %r12d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 642
+
+
+ 20995 13cdc 8B85D4F6 		movl	-2348(%rbp), %eax
+ 20995      FFFF
+ 20996 13ce2 89C7     		movl	%eax, %edi
+ 20997 13ce4 E817C3FE 		call	bswap_32
+ 20997      FF
+ 20998 13ce9 89C3     		movl	%eax, %ebx
+ 20999 13ceb 8B85D0F6 		movl	-2352(%rbp), %eax
+ 20999      FFFF
+ 21000 13cf1 89C7     		movl	%eax, %edi
+ 21001 13cf3 E808C3FE 		call	bswap_32
+ 21001      FF
+ 21002 13cf8 4589E9   		movl	%r13d, %r9d
+ 21003 13cfb 4589E0   		movl	%r12d, %r8d
+ 21004 13cfe 89D9     		movl	%ebx, %ecx
+ 21005 13d00 89C2     		movl	%eax, %edx
+ 21006 13d02 488D3500 		leaq	.LC5(%rip), %rsi
+ 21006      000000
+ 21007 13d09 488D3D00 		leaq	.LC1(%rip), %rdi
+ 21007      000000
+ 21008 13d10 B8000000 		movl	$0, %eax
+ 21008      00
+ 21009 13d15 E8000000 		call	KDbgMsg at PLT
+ 21009      00
+ 21010              	.L517:
+ 21011              	.LBE2549:
+ 21012              	.LBB2550:
+1996:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+ 21013              		.loc 2 1996 0
+ 21014 13d1a F30F6F85 		movdqu	-1696(%rbp), %xmm0
+ 21014      60F9FFFF 
+ 21015 13d22 F30F7F85 		movdqu	%xmm0, -2368(%rbp)
+ 21015      C0F6FFFF 
+ 21016 13d2a E8000000 		call	KDbgWriterGet at PLT
+ 21016      00
+ 21017 13d2f 4885C0   		testq	%rax, %rax
+ 21018 13d32 7479     		je	.L519
+ 21019 13d34 BF010000 		movl	$1, %edi
+ 21019      00
+ 21020 13d39 E8000000 		call	KDbgCondToFlag at PLT
+ 21020      00
+ 21021 13d3e 4889C6   		movq	%rax, %rsi
+ 21022 13d41 BF100000 		movl	$16, %edi
+ 21022      00
+ 21023 13d46 E8000000 		call	KDbgTestModConds at PLT
+ 21023      00
+ 21024 13d4b 84C0     		testb	%al, %al
+ 21025 13d4d 745E     		je	.L519
+ 21026 13d4f 8B85CCF6 		movl	-2356(%rbp), %eax
+ 21026      FFFF
+ 21027 13d55 89C7     		movl	%eax, %edi
+ 21028 13d57 E8A4C2FE 		call	bswap_32
+ 21028      FF
+ 21029 13d5c 4189C5   		movl	%eax, %r13d
+ 21030 13d5f 8B85C8F6 		movl	-2360(%rbp), %eax
+ 21030      FFFF
+ 21031 13d65 89C7     		movl	%eax, %edi
+ 21032 13d67 E894C2FE 		call	bswap_32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 643
+
+
+ 21032      FF
+ 21033 13d6c 4189C4   		movl	%eax, %r12d
+ 21034 13d6f 8B85C4F6 		movl	-2364(%rbp), %eax
+ 21034      FFFF
+ 21035 13d75 89C7     		movl	%eax, %edi
+ 21036 13d77 E884C2FE 		call	bswap_32
+ 21036      FF
+ 21037 13d7c 89C3     		movl	%eax, %ebx
+ 21038 13d7e 8B85C0F6 		movl	-2368(%rbp), %eax
+ 21038      FFFF
+ 21039 13d84 89C7     		movl	%eax, %edi
+ 21040 13d86 E875C2FE 		call	bswap_32
+ 21040      FF
+ 21041 13d8b 4589E9   		movl	%r13d, %r9d
+ 21042 13d8e 4589E0   		movl	%r12d, %r8d
+ 21043 13d91 89D9     		movl	%ebx, %ecx
+ 21044 13d93 89C2     		movl	%eax, %edx
+ 21045 13d95 488D3500 		leaq	.LC6(%rip), %rsi
+ 21045      000000
+ 21046 13d9c 488D3D00 		leaq	.LC1(%rip), %rdi
+ 21046      000000
+ 21047 13da3 B8000000 		movl	$0, %eax
+ 21047      00
+ 21048 13da8 E8000000 		call	KDbgMsg at PLT
+ 21048      00
+ 21049              	.L519:
+ 21050 13dad F30F6F85 		movdqu	-1680(%rbp), %xmm0
+ 21050      70F9FFFF 
+ 21051 13db5 F30F7F85 		movdqu	%xmm0, -1648(%rbp)
+ 21051      90F9FFFF 
+ 21052 13dbd F30F6F85 		movdqu	-1696(%rbp), %xmm0
+ 21052      60F9FFFF 
+ 21053 13dc5 F30F7F85 		movdqu	%xmm0, -1664(%rbp)
+ 21053      80F9FFFF 
+ 21054 13dcd F30F6F85 		movdqu	-1648(%rbp), %xmm0
+ 21054      90F9FFFF 
+ 21055 13dd5 F30F7F85 		movdqu	%xmm0, -1616(%rbp)
+ 21055      B0F9FFFF 
+ 21056 13ddd F30F6F85 		movdqu	-1664(%rbp), %xmm0
+ 21056      80F9FFFF 
+ 21057 13de5 F30F7F85 		movdqu	%xmm0, -1632(%rbp)
+ 21057      A0F9FFFF 
+ 21058              	.LBE2550:
+ 21059              	.LBB2551:
+ 21060              	.LBB2552:
+ 21061              	.LBB2553:
+ 21062              	.LBB2554:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 21063              		.loc 2 178 0
+ 21064 13ded F30F6F85 		movdqu	-1632(%rbp), %xmm0
+ 21064      A0F9FFFF 
+ 21065 13df5 F30F6F8D 		movdqu	-1616(%rbp), %xmm1
+ 21065      B0F9FFFF 
+ 21066 13dfd 660FEFC1 		pxor	%xmm1, %xmm0
+ 21067              	.LBE2554:
+ 21068              	.LBE2553:
+ 21069              	.LBE2552:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 644
+
+
+ 21070              	.LBE2551:
+1998:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 21071              		.loc 2 1998 0
+ 21072 13e01 F30F7F85 		movdqu	%xmm0, -1680(%rbp)
+ 21072      70F9FFFF 
+ 21073              	.LBB2555:
+2000:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("End 1st Round", state);
+ 21074              		.loc 2 2000 0
+ 21075 13e09 F30F6F85 		movdqu	-1680(%rbp), %xmm0
+ 21075      70F9FFFF 
+ 21076 13e11 F30F7F85 		movdqu	%xmm0, -2384(%rbp)
+ 21076      B0F6FFFF 
+ 21077 13e19 E8000000 		call	KDbgWriterGet at PLT
+ 21077      00
+ 21078 13e1e 4885C0   		testq	%rax, %rax
+ 21079 13e21 7479     		je	.L521
+ 21080 13e23 BF010000 		movl	$1, %edi
+ 21080      00
+ 21081 13e28 E8000000 		call	KDbgCondToFlag at PLT
+ 21081      00
+ 21082 13e2d 4889C6   		movq	%rax, %rsi
+ 21083 13e30 BF100000 		movl	$16, %edi
+ 21083      00
+ 21084 13e35 E8000000 		call	KDbgTestModConds at PLT
+ 21084      00
+ 21085 13e3a 84C0     		testb	%al, %al
+ 21086 13e3c 745E     		je	.L521
+ 21087 13e3e 8B85BCF6 		movl	-2372(%rbp), %eax
+ 21087      FFFF
+ 21088 13e44 89C7     		movl	%eax, %edi
+ 21089 13e46 E8B5C1FE 		call	bswap_32
+ 21089      FF
+ 21090 13e4b 4189C5   		movl	%eax, %r13d
+ 21091 13e4e 8B85B8F6 		movl	-2376(%rbp), %eax
+ 21091      FFFF
+ 21092 13e54 89C7     		movl	%eax, %edi
+ 21093 13e56 E8A5C1FE 		call	bswap_32
+ 21093      FF
+ 21094 13e5b 4189C4   		movl	%eax, %r12d
+ 21095 13e5e 8B85B4F6 		movl	-2380(%rbp), %eax
+ 21095      FFFF
+ 21096 13e64 89C7     		movl	%eax, %edi
+ 21097 13e66 E895C1FE 		call	bswap_32
+ 21097      FF
+ 21098 13e6b 89C3     		movl	%eax, %ebx
+ 21099 13e6d 8B85B0F6 		movl	-2384(%rbp), %eax
+ 21099      FFFF
+ 21100 13e73 89C7     		movl	%eax, %edi
+ 21101 13e75 E886C1FE 		call	bswap_32
+ 21101      FF
+ 21102 13e7a 4589E9   		movl	%r13d, %r9d
+ 21103 13e7d 4589E0   		movl	%r12d, %r8d
+ 21104 13e80 89D9     		movl	%ebx, %ecx
+ 21105 13e82 89C2     		movl	%eax, %edx
+ 21106 13e84 488D3500 		leaq	.LC7(%rip), %rsi
+ 21106      000000
+ 21107 13e8b 488D3D00 		leaq	.LC1(%rip), %rdi
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 645
+
+
+ 21107      000000
+ 21108 13e92 B8000000 		movl	$0, %eax
+ 21108      00
+ 21109 13e97 E8000000 		call	KDbgMsg at PLT
+ 21109      00
+ 21110              	.L521:
+ 21111              	.LBE2555:
+2002:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 21112              		.loc 2 2002 0
+ 21113 13e9c F30F6F85 		movdqu	-1680(%rbp), %xmm0
+ 21113      70F9FFFF 
+ 21114              	.LBE2548:
+ 21115              	.LBE2547:
+2097:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(FirstRound) (state, key[ix++]);
+ 21116              		.loc 2 2097 0
+ 21117 13ea4 660F7F85 		movdqa	%xmm0, -2400(%rbp)
+ 21117      A0F6FFFF 
+2099:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for ( ; ix < Nr; ++ix)
+ 21118              		.loc 2 2099 0
+ 21119 13eac E9BF0F00 		jmp	.L522
+ 21119      00
+ 21120              	.L563:
+2100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(MiddleRound) (state, key[ix] );
+ 21121              		.loc 2 2100 0
+ 21122 13eb1 8B855CF9 		mov	-1700(%rbp), %eax
+ 21122      FFFF
+ 21123 13eb7 48C1E004 		salq	$4, %rax
+ 21124 13ebb 48038598 		addq	-2408(%rbp), %rax
+ 21124      F6FFFF
+ 21125 13ec2 660F6F00 		movdqa	(%rax), %xmm0
+ 21126 13ec6 660F6F8D 		movdqa	-2400(%rbp), %xmm1
+ 21126      A0F6FFFF 
+ 21127 13ece F30F7F8D 		movdqu	%xmm1, -1584(%rbp)
+ 21127      D0F9FFFF 
+ 21128 13ed6 F30F7F85 		movdqu	%xmm0, -1600(%rbp)
+ 21128      C0F9FFFF 
+ 21129              	.LBB2556:
+ 21130              	.LBB2557:
+2019:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+ 21131              		.loc 2 2019 0
+ 21132 13ede F30F6F85 		movdqu	-1584(%rbp), %xmm0
+ 21132      D0F9FFFF 
+ 21133 13ee6 F30F7F85 		movdqu	%xmm0, -1552(%rbp)
+ 21133      F0F9FFFF 
+2020:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mround_keys = round_keys;
+ 21134              		.loc 2 2020 0
+ 21135 13eee F30F6F85 		movdqu	-1600(%rbp), %xmm0
+ 21135      C0F9FFFF 
+ 21136 13ef6 F30F7F85 		movdqu	%xmm0, -1568(%rbp)
+ 21136      E0F9FFFF 
+ 21137              	.LBB2558:
+2022:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Start of Round", mstate);
+ 21138              		.loc 2 2022 0
+ 21139 13efe F30F6F85 		movdqu	-1552(%rbp), %xmm0
+ 21139      F0F9FFFF 
+ 21140 13f06 F30F7F85 		movdqu	%xmm0, -2256(%rbp)
+ 21140      30F7FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 646
+
+
+ 21141 13f0e E8000000 		call	KDbgWriterGet at PLT
+ 21141      00
+ 21142 13f13 4885C0   		testq	%rax, %rax
+ 21143 13f16 7479     		je	.L524
+ 21144 13f18 BF010000 		movl	$1, %edi
+ 21144      00
+ 21145 13f1d E8000000 		call	KDbgCondToFlag at PLT
+ 21145      00
+ 21146 13f22 4889C6   		movq	%rax, %rsi
+ 21147 13f25 BF100000 		movl	$16, %edi
+ 21147      00
+ 21148 13f2a E8000000 		call	KDbgTestModConds at PLT
+ 21148      00
+ 21149 13f2f 84C0     		testb	%al, %al
+ 21150 13f31 745E     		je	.L524
+ 21151 13f33 8B853CF7 		movl	-2244(%rbp), %eax
+ 21151      FFFF
+ 21152 13f39 89C7     		movl	%eax, %edi
+ 21153 13f3b E8C0C0FE 		call	bswap_32
+ 21153      FF
+ 21154 13f40 4189C5   		movl	%eax, %r13d
+ 21155 13f43 8B8538F7 		movl	-2248(%rbp), %eax
+ 21155      FFFF
+ 21156 13f49 89C7     		movl	%eax, %edi
+ 21157 13f4b E8B0C0FE 		call	bswap_32
+ 21157      FF
+ 21158 13f50 4189C4   		movl	%eax, %r12d
+ 21159 13f53 8B8534F7 		movl	-2252(%rbp), %eax
+ 21159      FFFF
+ 21160 13f59 89C7     		movl	%eax, %edi
+ 21161 13f5b E8A0C0FE 		call	bswap_32
+ 21161      FF
+ 21162 13f60 89C3     		movl	%eax, %ebx
+ 21163 13f62 8B8530F7 		movl	-2256(%rbp), %eax
+ 21163      FFFF
+ 21164 13f68 89C7     		movl	%eax, %edi
+ 21165 13f6a E891C0FE 		call	bswap_32
+ 21165      FF
+ 21166 13f6f 4589E9   		movl	%r13d, %r9d
+ 21167 13f72 4589E0   		movl	%r12d, %r8d
+ 21168 13f75 89D9     		movl	%ebx, %ecx
+ 21169 13f77 89C2     		movl	%eax, %edx
+ 21170 13f79 488D3500 		leaq	.LC5(%rip), %rsi
+ 21170      000000
+ 21171 13f80 488D3D00 		leaq	.LC1(%rip), %rdi
+ 21171      000000
+ 21172 13f87 B8000000 		movl	$0, %eax
+ 21172      00
+ 21173 13f8c E8000000 		call	KDbgMsg at PLT
+ 21173      00
+ 21174              	.L524:
+ 21175 13f91 F30F6F85 		movdqu	-1584(%rbp), %xmm0
+ 21175      D0F9FFFF 
+ 21176 13f99 F30F7F85 		movdqu	%xmm0, -1536(%rbp)
+ 21176      00FAFFFF 
+ 21177 13fa1 F30F6F85 		movdqu	-1536(%rbp), %xmm0
+ 21177      00FAFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 647
+
+
+ 21178 13fa9 F30F7F85 		movdqu	%xmm0, -1504(%rbp)
+ 21178      20FAFFFF 
+ 21179 13fb1 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 21179      000000
+ 21180 13fb8 48898518 		movq	%rax, -1512(%rbp)
+ 21180      FAFFFF
+ 21181              	.LBE2558:
+ 21182              	.LBB2559:
+ 21183              	.LBB2560:
+ 21184              	.LBB2561:
+ 21185              	.LBB2562:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 21186              		.loc 2 851 0
+ 21187 13fbf 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 21187      00000000 
+ 21188 13fc7 F30F7F85 		movdqu	%xmm0, -1472(%rbp)
+ 21188      40FAFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 21189              		.loc 2 854 0
+ 21190 13fcf 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 21190      00000000 
+ 21191 13fd7 F30F6F8D 		movdqu	-1504(%rbp), %xmm1
+ 21191      20FAFFFF 
+ 21192 13fdf F30F7F8D 		movdqu	%xmm1, -1392(%rbp)
+ 21192      90FAFFFF 
+ 21193 13fe7 F30F7F85 		movdqu	%xmm0, -1408(%rbp)
+ 21193      80FAFFFF 
+ 21194              	.LBB2563:
+ 21195              	.LBB2564:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 21196              		.loc 2 206 0
+ 21197 13fef F30F6F85 		movdqu	-1408(%rbp), %xmm0
+ 21197      80FAFFFF 
+ 21198 13ff7 F30F6F8D 		movdqu	-1392(%rbp), %xmm1
+ 21198      90FAFFFF 
+ 21199 13fff 660FDBC1 		pand	%xmm1, %xmm0
+ 21200              	.LBE2564:
+ 21201              	.LBE2563:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 21202              		.loc 2 854 0
+ 21203 14003 F30F7F85 		movdqu	%xmm0, -1424(%rbp)
+ 21203      70FAFFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 21204              		.loc 2 862 0
+ 21205 1400b 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 21205      00000000 
+ 21206 14013 F30F6F8D 		movdqu	-1504(%rbp), %xmm1
+ 21206      20FAFFFF 
+ 21207 1401b F30F7F8D 		movdqu	%xmm1, -1360(%rbp)
+ 21207      B0FAFFFF 
+ 21208 14023 F30F7F85 		movdqu	%xmm0, -1376(%rbp)
+ 21208      A0FAFFFF 
+ 21209              	.LBB2565:
+ 21210              		.loc 2 2642 0
+ 21211 1402b 0FB685B0 		movzbl	-1360(%rbp), %eax
+ 21211      FAFFFF
+ 21212 14032 0FB695A0 		movzbl	-1376(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 648
+
+
+ 21212      FAFFFF
+ 21213 14039 0FB6C0   		movzbl	%al, %eax
+ 21214 1403c 6689851E 		movw	%ax, -2530(%rbp)
+ 21214      F6FFFF
+ 21215 14043 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 21215      F6FFFF
+ 21216 1404a F6F2     		divb	%dl
+ 21217 1404c 4189C7   		movl	%eax, %r15d
+ 21218 1404f 0FB685B1 		movzbl	-1359(%rbp), %eax
+ 21218      FAFFFF
+ 21219 14056 0FB695A1 		movzbl	-1375(%rbp), %edx
+ 21219      FAFFFF
+ 21220 1405d 0FB6C0   		movzbl	%al, %eax
+ 21221 14060 6689851E 		movw	%ax, -2530(%rbp)
+ 21221      F6FFFF
+ 21222 14067 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 21222      F6FFFF
+ 21223 1406e F6F2     		divb	%dl
+ 21224 14070 88854FF6 		movb	%al, -2481(%rbp)
+ 21224      FFFF
+ 21225 14076 0FB685B2 		movzbl	-1358(%rbp), %eax
+ 21225      FAFFFF
+ 21226 1407d 0FB695A2 		movzbl	-1374(%rbp), %edx
+ 21226      FAFFFF
+ 21227 14084 0FB6C0   		movzbl	%al, %eax
+ 21228 14087 6689851E 		movw	%ax, -2530(%rbp)
+ 21228      F6FFFF
+ 21229 1408e 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 21229      F6FFFF
+ 21230 14095 F6F2     		divb	%dl
+ 21231 14097 88854EF6 		movb	%al, -2482(%rbp)
+ 21231      FFFF
+ 21232 1409d 0FB685B3 		movzbl	-1357(%rbp), %eax
+ 21232      FAFFFF
+ 21233 140a4 0FB695A3 		movzbl	-1373(%rbp), %edx
+ 21233      FAFFFF
+ 21234 140ab 0FB6C0   		movzbl	%al, %eax
+ 21235 140ae 6689851E 		movw	%ax, -2530(%rbp)
+ 21235      F6FFFF
+ 21236 140b5 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 21236      F6FFFF
+ 21237 140bc F6F2     		divb	%dl
+ 21238 140be 88854DF6 		movb	%al, -2483(%rbp)
+ 21238      FFFF
+ 21239 140c4 0FB685B4 		movzbl	-1356(%rbp), %eax
+ 21239      FAFFFF
+ 21240 140cb 0FB695A4 		movzbl	-1372(%rbp), %edx
+ 21240      FAFFFF
+ 21241 140d2 0FB6C0   		movzbl	%al, %eax
+ 21242 140d5 6689851E 		movw	%ax, -2530(%rbp)
+ 21242      F6FFFF
+ 21243 140dc 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 21243      F6FFFF
+ 21244 140e3 F6F2     		divb	%dl
+ 21245 140e5 88854CF6 		movb	%al, -2484(%rbp)
+ 21245      FFFF
+ 21246 140eb 0FB685B5 		movzbl	-1355(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 649
+
+
+ 21246      FAFFFF
+ 21247 140f2 0FB695A5 		movzbl	-1371(%rbp), %edx
+ 21247      FAFFFF
+ 21248 140f9 0FB6C0   		movzbl	%al, %eax
+ 21249 140fc 6689851E 		movw	%ax, -2530(%rbp)
+ 21249      F6FFFF
+ 21250 14103 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 21250      F6FFFF
+ 21251 1410a F6F2     		divb	%dl
+ 21252 1410c 4189C1   		movl	%eax, %r9d
+ 21253 1410f 0FB685B6 		movzbl	-1354(%rbp), %eax
+ 21253      FAFFFF
+ 21254 14116 0FB695A6 		movzbl	-1370(%rbp), %edx
+ 21254      FAFFFF
+ 21255 1411d 0FB6C0   		movzbl	%al, %eax
+ 21256 14120 6689851E 		movw	%ax, -2530(%rbp)
+ 21256      F6FFFF
+ 21257 14127 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 21257      F6FFFF
+ 21258 1412e F6F2     		divb	%dl
+ 21259 14130 89C7     		movl	%eax, %edi
+ 21260 14132 0FB685B7 		movzbl	-1353(%rbp), %eax
+ 21260      FAFFFF
+ 21261 14139 0FB695A7 		movzbl	-1369(%rbp), %edx
+ 21261      FAFFFF
+ 21262 14140 0FB6C0   		movzbl	%al, %eax
+ 21263 14143 6689851E 		movw	%ax, -2530(%rbp)
+ 21263      F6FFFF
+ 21264 1414a 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 21264      F6FFFF
+ 21265 14151 F6F2     		divb	%dl
+ 21266 14153 89C3     		movl	%eax, %ebx
+ 21267 14155 0FB685B8 		movzbl	-1352(%rbp), %eax
+ 21267      FAFFFF
+ 21268 1415c 0FB695A8 		movzbl	-1368(%rbp), %edx
+ 21268      FAFFFF
+ 21269 14163 0FB6C0   		movzbl	%al, %eax
+ 21270 14166 6689851E 		movw	%ax, -2530(%rbp)
+ 21270      F6FFFF
+ 21271 1416d 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 21271      F6FFFF
+ 21272 14174 F6F2     		divb	%dl
+ 21273 14176 4189C2   		movl	%eax, %r10d
+ 21274 14179 0FB685B9 		movzbl	-1351(%rbp), %eax
+ 21274      FAFFFF
+ 21275 14180 0FB695A9 		movzbl	-1367(%rbp), %edx
+ 21275      FAFFFF
+ 21276 14187 0FB6C0   		movzbl	%al, %eax
+ 21277 1418a 6689851E 		movw	%ax, -2530(%rbp)
+ 21277      F6FFFF
+ 21278 14191 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 21278      F6FFFF
+ 21279 14198 F6F2     		divb	%dl
+ 21280 1419a 4189C3   		movl	%eax, %r11d
+ 21281 1419d 0FB685BA 		movzbl	-1350(%rbp), %eax
+ 21281      FAFFFF
+ 21282 141a4 0FB695AA 		movzbl	-1366(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 650
+
+
+ 21282      FAFFFF
+ 21283 141ab 0FB6C0   		movzbl	%al, %eax
+ 21284 141ae 6689851E 		movw	%ax, -2530(%rbp)
+ 21284      F6FFFF
+ 21285 141b5 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 21285      F6FFFF
+ 21286 141bc F6F2     		divb	%dl
+ 21287 141be 4189C4   		movl	%eax, %r12d
+ 21288 141c1 0FB685BB 		movzbl	-1349(%rbp), %eax
+ 21288      FAFFFF
+ 21289 141c8 0FB695AB 		movzbl	-1365(%rbp), %edx
+ 21289      FAFFFF
+ 21290 141cf 0FB6C0   		movzbl	%al, %eax
+ 21291 141d2 6689851E 		movw	%ax, -2530(%rbp)
+ 21291      F6FFFF
+ 21292 141d9 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 21292      F6FFFF
+ 21293 141e0 F6F2     		divb	%dl
+ 21294 141e2 4189C5   		movl	%eax, %r13d
+ 21295 141e5 0FB685BC 		movzbl	-1348(%rbp), %eax
+ 21295      FAFFFF
+ 21296 141ec 0FB695AC 		movzbl	-1364(%rbp), %edx
+ 21296      FAFFFF
+ 21297 141f3 0FB6C0   		movzbl	%al, %eax
+ 21298 141f6 6689851E 		movw	%ax, -2530(%rbp)
+ 21298      F6FFFF
+ 21299 141fd 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 21299      F6FFFF
+ 21300 14204 F6F2     		divb	%dl
+ 21301 14206 4189C6   		movl	%eax, %r14d
+ 21302 14209 0FB685BD 		movzbl	-1347(%rbp), %eax
+ 21302      FAFFFF
+ 21303 14210 0FB695AD 		movzbl	-1363(%rbp), %edx
+ 21303      FAFFFF
+ 21304 14217 0FB6C0   		movzbl	%al, %eax
+ 21305 1421a 6689851E 		movw	%ax, -2530(%rbp)
+ 21305      F6FFFF
+ 21306 14221 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 21306      F6FFFF
+ 21307 14228 F6F2     		divb	%dl
+ 21308 1422a 4189C0   		movl	%eax, %r8d
+ 21309 1422d 0FB685BE 		movzbl	-1346(%rbp), %eax
+ 21309      FAFFFF
+ 21310 14234 0FB695AE 		movzbl	-1362(%rbp), %edx
+ 21310      FAFFFF
+ 21311 1423b 0FB6C0   		movzbl	%al, %eax
+ 21312 1423e 6689851E 		movw	%ax, -2530(%rbp)
+ 21312      F6FFFF
+ 21313 14245 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 21313      F6FFFF
+ 21314 1424c F6F2     		divb	%dl
+ 21315 1424e 89C6     		movl	%eax, %esi
+ 21316 14250 0FB685BF 		movzbl	-1345(%rbp), %eax
+ 21316      FAFFFF
+ 21317 14257 0FB695AF 		movzbl	-1361(%rbp), %edx
+ 21317      FAFFFF
+ 21318 1425e 0FB6C0   		movzbl	%al, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 651
+
+
+ 21319 14261 6689851E 		movw	%ax, -2530(%rbp)
+ 21319      F6FFFF
+ 21320 14268 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 21320      F6FFFF
+ 21321 1426f F6F2     		divb	%dl
+ 21322 14271 89C1     		movl	%eax, %ecx
+ 21323              	.LBB2566:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 21324              		.loc 2 346 0
+ 21325 14273 0FB6D3   		movzbl	%bl, %edx
+ 21326 14276 400FB6C7 		movzbl	%dil, %eax
+ 21327 1427a 48C1E208 		salq	$8, %rdx
+ 21328 1427e 4809C2   		orq	%rax, %rdx
+ 21329 14281 410FB6C1 		movzbl	%r9b, %eax
+ 21330 14285 48C1E208 		salq	$8, %rdx
+ 21331 14289 4809C2   		orq	%rax, %rdx
+ 21332 1428c 0FB6854C 		movzbl	-2484(%rbp), %eax
+ 21332      F6FFFF
+ 21333 14293 48C1E208 		salq	$8, %rdx
+ 21334 14297 4809C2   		orq	%rax, %rdx
+ 21335 1429a 0FB6854D 		movzbl	-2483(%rbp), %eax
+ 21335      F6FFFF
+ 21336 142a1 48C1E208 		salq	$8, %rdx
+ 21337 142a5 4809C2   		orq	%rax, %rdx
+ 21338 142a8 0FB6854E 		movzbl	-2482(%rbp), %eax
+ 21338      F6FFFF
+ 21339 142af 48C1E208 		salq	$8, %rdx
+ 21340 142b3 4809C2   		orq	%rax, %rdx
+ 21341 142b6 0FB6854F 		movzbl	-2481(%rbp), %eax
+ 21341      F6FFFF
+ 21342 142bd 48C1E208 		salq	$8, %rdx
+ 21343 142c1 4809C2   		orq	%rax, %rdx
+ 21344 142c4 410FB6C7 		movzbl	%r15b, %eax
+ 21345 142c8 48C1E208 		salq	$8, %rdx
+ 21346 142cc 4809C2   		orq	%rax, %rdx
+ 21347 142cf 0FB6C1   		movzbl	%cl, %eax
+ 21348 142d2 400FB6CE 		movzbl	%sil, %ecx
+ 21349 142d6 48C1E008 		salq	$8, %rax
+ 21350 142da 4809C8   		orq	%rcx, %rax
+ 21351 142dd 410FB6C8 		movzbl	%r8b, %ecx
+ 21352 142e1 48C1E008 		salq	$8, %rax
+ 21353 142e5 4809C8   		orq	%rcx, %rax
+ 21354 142e8 410FB6CE 		movzbl	%r14b, %ecx
+ 21355 142ec 48C1E008 		salq	$8, %rax
+ 21356 142f0 4809C8   		orq	%rcx, %rax
+ 21357 142f3 410FB6CD 		movzbl	%r13b, %ecx
+ 21358 142f7 48C1E008 		salq	$8, %rax
+ 21359 142fb 4809C8   		orq	%rcx, %rax
+ 21360 142fe 410FB6CC 		movzbl	%r12b, %ecx
+ 21361 14302 48C1E008 		salq	$8, %rax
+ 21362 14306 4809C8   		orq	%rcx, %rax
+ 21363 14309 410FB6CB 		movzbl	%r11b, %ecx
+ 21364 1430d 48C1E008 		salq	$8, %rax
+ 21365 14311 4809C8   		orq	%rcx, %rax
+ 21366 14314 410FB6CA 		movzbl	%r10b, %ecx
+ 21367 14318 48C1E008 		salq	$8, %rax
+ 21368 1431c 4809C8   		orq	%rcx, %rax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 652
+
+
+ 21369 1431f 48899530 		movq	%rdx, -2512(%rbp)
+ 21369      F6FFFF
+ 21370 14326 48898538 		movq	%rax, -2504(%rbp)
+ 21370      F6FFFF
+ 21371 1432d 660F6F85 		movdqa	-2512(%rbp), %xmm0
+ 21371      30F6FFFF 
+ 21372              	.LBE2566:
+ 21373              	.LBE2565:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 21374              		.loc 2 862 0
+ 21375 14335 F30F7F85 		movdqu	%xmm0, -1440(%rbp)
+ 21375      60FAFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 21376              		.loc 2 866 0
+ 21377 1433d C7853CFA 		movl	$0, -1476(%rbp)
+ 21377      FFFF0000 
+ 21377      0000
+ 21378 14347 E9860200 		jmp	.L525
+ 21378      00
+ 21379              	.L534:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 21380              		.loc 2 868 0
+ 21381 1434c 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 21381      00000000 
+ 21382 14354 F30F7F85 		movdqu	%xmm0, -1328(%rbp)
+ 21382      D0FAFFFF 
+ 21383 1435c F30F6F85 		movdqu	-1440(%rbp), %xmm0
+ 21383      60FAFFFF 
+ 21384 14364 F30F7F85 		movdqu	%xmm0, -1344(%rbp)
+ 21384      C0FAFFFF 
+ 21385              	.LBB2567:
+ 21386              	.LBB2568:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 21387              		.loc 2 380 0
+ 21388 1436c F30F6F85 		movdqu	-1328(%rbp), %xmm0
+ 21388      D0FAFFFF 
+ 21389 14374 F30F7F85 		movdqu	%xmm0, -2224(%rbp)
+ 21389      50F7FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 21390              		.loc 2 381 0
+ 21391 1437c F30F6F85 		movdqu	-1344(%rbp), %xmm0
+ 21391      C0FAFFFF 
+ 21392 14384 F30F7F85 		movdqu	%xmm0, -2240(%rbp)
+ 21392      40F7FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 21393              		.loc 2 383 0
+ 21394 1438c C785ECFA 		movl	$0, -1300(%rbp)
+ 21394      FFFF0000 
+ 21394      0000
+ 21395 14396 EB5C     		jmp	.L526
+ 21396              	.L529:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 21397              		.loc 2 385 0
+ 21398 14398 8B85ECFA 		movl	-1300(%rbp), %eax
+ 21398      FFFF
+ 21399 1439e 89C0     		mov	%eax, %eax
+ 21400 143a0 0FB68405 		movzbl	-2240(%rbp,%rax), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 653
+
+
+ 21400      40F7FFFF 
+ 21401 143a8 84C0     		testb	%al, %al
+ 21402 143aa 7912     		jns	.L527
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 21403              		.loc 2 386 0
+ 21404 143ac 8B85ECFA 		movl	-1300(%rbp), %eax
+ 21404      FFFF
+ 21405 143b2 89C0     		mov	%eax, %eax
+ 21406 143b4 C6840560 		movb	$0, -2208(%rbp,%rax)
+ 21406      F7FFFF00 
+ 21407 143bc EB2F     		jmp	.L528
+ 21408              	.L527:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 21409              		.loc 2 388 0
+ 21410 143be 8B8DECFA 		movl	-1300(%rbp), %ecx
+ 21410      FFFF
+ 21411 143c4 8B85ECFA 		movl	-1300(%rbp), %eax
+ 21411      FFFF
+ 21412 143ca 89C0     		mov	%eax, %eax
+ 21413 143cc 0FB68405 		movzbl	-2240(%rbp,%rax), %eax
+ 21413      40F7FFFF 
+ 21414 143d4 0FB6C0   		movzbl	%al, %eax
+ 21415 143d7 83E00F   		andl	$15, %eax
+ 21416 143da 4898     		cltq
+ 21417 143dc 0FB69405 		movzbl	-2224(%rbp,%rax), %edx
+ 21417      50F7FFFF 
+ 21418 143e4 89C8     		mov	%ecx, %eax
+ 21419 143e6 88940560 		movb	%dl, -2208(%rbp,%rax)
+ 21419      F7FFFF
+ 21420              	.L528:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 21421              		.loc 2 383 0
+ 21422 143ed 8385ECFA 		addl	$1, -1300(%rbp)
+ 21422      FFFF01
+ 21423              	.L526:
+ 21424 143f4 83BDECFA 		cmpl	$15, -1300(%rbp)
+ 21424      FFFF0F
+ 21425 143fb 769B     		jbe	.L529
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 21426              		.loc 2 391 0
+ 21427 143fd F30F6F85 		movdqu	-2208(%rbp), %xmm0
+ 21427      60F7FFFF 
+ 21428              	.LBE2568:
+ 21429              	.LBE2567:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 21430              		.loc 2 868 0
+ 21431 14405 F30F7F85 		movdqu	%xmm0, -1456(%rbp)
+ 21431      50FAFFFF 
+ 21432 1440d F30F6F85 		movdqu	-1424(%rbp), %xmm0
+ 21432      70FAFFFF 
+ 21433 14415 F30F7F85 		movdqu	%xmm0, -1280(%rbp)
+ 21433      00FBFFFF 
+ 21434 1441d F30F6F85 		movdqu	-1456(%rbp), %xmm0
+ 21434      50FAFFFF 
+ 21435 14425 F30F7F85 		movdqu	%xmm0, -1296(%rbp)
+ 21435      F0FAFFFF 
+ 21436              	.LBB2569:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 654
+
+
+ 21437              	.LBB2570:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 21438              		.loc 2 234 0
+ 21439 1442d F30F6F85 		movdqu	-1296(%rbp), %xmm0
+ 21439      F0FAFFFF 
+ 21440 14435 F30F6F8D 		movdqu	-1280(%rbp), %xmm1
+ 21440      00FBFFFF 
+ 21441 1443d 660FEBC1 		por	%xmm1, %xmm0
+ 21442              	.LBE2570:
+ 21443              	.LBE2569:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 21444              		.loc 2 870 0
+ 21445 14441 F30F7F85 		movdqu	%xmm0, -1456(%rbp)
+ 21445      50FAFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 21446              		.loc 2 872 0
+ 21447 14449 8B853CFA 		mov	-1476(%rbp), %eax
+ 21447      FFFF
+ 21448 1444f 48C1E004 		salq	$4, %rax
+ 21449 14453 48038518 		addq	-1512(%rbp), %rax
+ 21449      FAFFFF
+ 21450 1445a 660F6F00 		movdqa	(%rax), %xmm0
+ 21451 1445e F30F7F85 		movdqu	%xmm0, -1248(%rbp)
+ 21451      20FBFFFF 
+ 21452 14466 F30F6F85 		movdqu	-1456(%rbp), %xmm0
+ 21452      50FAFFFF 
+ 21453 1446e F30F7F85 		movdqu	%xmm0, -1264(%rbp)
+ 21453      10FBFFFF 
+ 21454              	.LBB2571:
+ 21455              	.LBB2572:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 21456              		.loc 2 380 0
+ 21457 14476 F30F6F85 		movdqu	-1248(%rbp), %xmm0
+ 21457      20FBFFFF 
+ 21458 1447e F30F7F85 		movdqu	%xmm0, -2176(%rbp)
+ 21458      80F7FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 21459              		.loc 2 381 0
+ 21460 14486 F30F6F85 		movdqu	-1264(%rbp), %xmm0
+ 21460      10FBFFFF 
+ 21461 1448e F30F7F85 		movdqu	%xmm0, -2192(%rbp)
+ 21461      70F7FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 21462              		.loc 2 383 0
+ 21463 14496 C7853CFB 		movl	$0, -1220(%rbp)
+ 21463      FFFF0000 
+ 21463      0000
+ 21464 144a0 EB5C     		jmp	.L530
+ 21465              	.L533:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 21466              		.loc 2 385 0
+ 21467 144a2 8B853CFB 		movl	-1220(%rbp), %eax
+ 21467      FFFF
+ 21468 144a8 89C0     		mov	%eax, %eax
+ 21469 144aa 0FB68405 		movzbl	-2192(%rbp,%rax), %eax
+ 21469      70F7FFFF 
+ 21470 144b2 84C0     		testb	%al, %al
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 655
+
+
+ 21471 144b4 7912     		jns	.L531
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 21472              		.loc 2 386 0
+ 21473 144b6 8B853CFB 		movl	-1220(%rbp), %eax
+ 21473      FFFF
+ 21474 144bc 89C0     		mov	%eax, %eax
+ 21475 144be C6840590 		movb	$0, -2160(%rbp,%rax)
+ 21475      F7FFFF00 
+ 21476 144c6 EB2F     		jmp	.L532
+ 21477              	.L531:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 21478              		.loc 2 388 0
+ 21479 144c8 8B8D3CFB 		movl	-1220(%rbp), %ecx
+ 21479      FFFF
+ 21480 144ce 8B853CFB 		movl	-1220(%rbp), %eax
+ 21480      FFFF
+ 21481 144d4 89C0     		mov	%eax, %eax
+ 21482 144d6 0FB68405 		movzbl	-2192(%rbp,%rax), %eax
+ 21482      70F7FFFF 
+ 21483 144de 0FB6C0   		movzbl	%al, %eax
+ 21484 144e1 83E00F   		andl	$15, %eax
+ 21485 144e4 4898     		cltq
+ 21486 144e6 0FB69405 		movzbl	-2176(%rbp,%rax), %edx
+ 21486      80F7FFFF 
+ 21487 144ee 89C8     		mov	%ecx, %eax
+ 21488 144f0 88940590 		movb	%dl, -2160(%rbp,%rax)
+ 21488      F7FFFF
+ 21489              	.L532:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 21490              		.loc 2 383 0
+ 21491 144f7 83853CFB 		addl	$1, -1220(%rbp)
+ 21491      FFFF01
+ 21492              	.L530:
+ 21493 144fe 83BD3CFB 		cmpl	$15, -1220(%rbp)
+ 21493      FFFF0F
+ 21494 14505 769B     		jbe	.L533
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 21495              		.loc 2 391 0
+ 21496 14507 F30F6F85 		movdqu	-2160(%rbp), %xmm0
+ 21496      90F7FFFF 
+ 21497              	.LBE2572:
+ 21498              	.LBE2571:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 21499              		.loc 2 872 0
+ 21500 1450f F30F7F85 		movdqu	%xmm0, -1456(%rbp)
+ 21500      50FAFFFF 
+ 21501 14517 F30F6F85 		movdqu	-1472(%rbp), %xmm0
+ 21501      40FAFFFF 
+ 21502 1451f F30F7F85 		movdqu	%xmm0, -1200(%rbp)
+ 21502      50FBFFFF 
+ 21503 14527 F30F6F85 		movdqu	-1456(%rbp), %xmm0
+ 21503      50FAFFFF 
+ 21504 1452f F30F7F85 		movdqu	%xmm0, -1216(%rbp)
+ 21504      40FBFFFF 
+ 21505              	.LBB2573:
+ 21506              	.LBB2574:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 656
+
+
+ 21507              		.loc 2 234 0
+ 21508 14537 F30F6F85 		movdqu	-1216(%rbp), %xmm0
+ 21508      40FBFFFF 
+ 21509 1453f F30F6F8D 		movdqu	-1200(%rbp), %xmm1
+ 21509      50FBFFFF 
+ 21510 14547 660FEBC1 		por	%xmm1, %xmm0
+ 21511              	.LBE2574:
+ 21512              	.LBE2573:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 21513              		.loc 2 874 0
+ 21514 1454b F30F7F85 		movdqu	%xmm0, -1472(%rbp)
+ 21514      40FAFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 21515              		.loc 2 876 0
+ 21516 14553 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 21516      00000000 
+ 21517 1455b F30F6F8D 		movdqu	-1440(%rbp), %xmm1
+ 21517      60FAFFFF 
+ 21518 14563 F30F7F8D 		movdqu	%xmm1, -1168(%rbp)
+ 21518      70FBFFFF 
+ 21519 1456b F30F7F85 		movdqu	%xmm0, -1184(%rbp)
+ 21519      60FBFFFF 
+ 21520              	.LBB2575:
+ 21521              	.LBB2576:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 21522              		.loc 2 290 0
+ 21523 14573 F30F6F8D 		movdqu	-1184(%rbp), %xmm1
+ 21523      60FBFFFF 
+ 21524 1457b F30F6F85 		movdqu	-1168(%rbp), %xmm0
+ 21524      70FBFFFF 
+ 21525 14583 660FF8C1 		psubb	%xmm1, %xmm0
+ 21526              	.LBE2576:
+ 21527              	.LBE2575:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 21528              		.loc 2 876 0
+ 21529 14587 F30F7F85 		movdqu	%xmm0, -1440(%rbp)
+ 21529      60FAFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 21530              		.loc 2 878 0
+ 21531 1458f 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 21531      00000000 
+ 21532 14597 F30F6F8D 		movdqu	-1440(%rbp), %xmm1
+ 21532      60FAFFFF 
+ 21533 1459f F30F7F8D 		movdqu	%xmm1, -1136(%rbp)
+ 21533      90FBFFFF 
+ 21534 145a7 F30F7F85 		movdqu	%xmm0, -1152(%rbp)
+ 21534      80FBFFFF 
+ 21535              	.LBB2577:
+ 21536              	.LBB2578:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 21537              		.loc 2 206 0
+ 21538 145af F30F6F85 		movdqu	-1152(%rbp), %xmm0
+ 21538      80FBFFFF 
+ 21539 145b7 F30F6F8D 		movdqu	-1136(%rbp), %xmm1
+ 21539      90FBFFFF 
+ 21540 145bf 660FDBC1 		pand	%xmm1, %xmm0
+ 21541              	.LBE2578:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 657
+
+
+ 21542              	.LBE2577:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 21543              		.loc 2 878 0
+ 21544 145c3 F30F7F85 		movdqu	%xmm0, -1440(%rbp)
+ 21544      60FAFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 21545              		.loc 2 866 0
+ 21546 145cb 83853CFA 		addl	$1, -1476(%rbp)
+ 21546      FFFF01
+ 21547              	.L525:
+ 21548 145d2 83BD3CFA 		cmpl	$15, -1476(%rbp)
+ 21548      FFFF0F
+ 21549 145d9 0F866DFD 		jbe	.L534
+ 21549      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 21550              		.loc 2 882 0
+ 21551 145df F30F6F85 		movdqu	-1472(%rbp), %xmm0
+ 21551      40FAFFFF 
+ 21552              	.LBE2562:
+ 21553              	.LBE2561:
+ 21554              	.LBE2560:
+ 21555              	.LBE2559:
+2029:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(SubBytes) (state);
+ 21556              		.loc 2 2029 0
+ 21557 145e7 F30F7F85 		movdqu	%xmm0, -1584(%rbp)
+ 21557      D0F9FFFF 
+ 21558              	.LBB2579:
+2031:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After SubBytes", state);
+ 21559              		.loc 2 2031 0
+ 21560 145ef F30F6F85 		movdqu	-1584(%rbp), %xmm0
+ 21560      D0F9FFFF 
+ 21561 145f7 F30F7F85 		movdqu	%xmm0, -2272(%rbp)
+ 21561      20F7FFFF 
+ 21562 145ff E8000000 		call	KDbgWriterGet at PLT
+ 21562      00
+ 21563 14604 4885C0   		testq	%rax, %rax
+ 21564 14607 7479     		je	.L536
+ 21565 14609 BF010000 		movl	$1, %edi
+ 21565      00
+ 21566 1460e E8000000 		call	KDbgCondToFlag at PLT
+ 21566      00
+ 21567 14613 4889C6   		movq	%rax, %rsi
+ 21568 14616 BF100000 		movl	$16, %edi
+ 21568      00
+ 21569 1461b E8000000 		call	KDbgTestModConds at PLT
+ 21569      00
+ 21570 14620 84C0     		testb	%al, %al
+ 21571 14622 745E     		je	.L536
+ 21572 14624 8B852CF7 		movl	-2260(%rbp), %eax
+ 21572      FFFF
+ 21573 1462a 89C7     		movl	%eax, %edi
+ 21574 1462c E8CFB9FE 		call	bswap_32
+ 21574      FF
+ 21575 14631 4189C5   		movl	%eax, %r13d
+ 21576 14634 8B8528F7 		movl	-2264(%rbp), %eax
+ 21576      FFFF
+ 21577 1463a 89C7     		movl	%eax, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 658
+
+
+ 21578 1463c E8BFB9FE 		call	bswap_32
+ 21578      FF
+ 21579 14641 4189C4   		movl	%eax, %r12d
+ 21580 14644 8B8524F7 		movl	-2268(%rbp), %eax
+ 21580      FFFF
+ 21581 1464a 89C7     		movl	%eax, %edi
+ 21582 1464c E8AFB9FE 		call	bswap_32
+ 21582      FF
+ 21583 14651 89C3     		movl	%eax, %ebx
+ 21584 14653 8B8520F7 		movl	-2272(%rbp), %eax
+ 21584      FFFF
+ 21585 14659 89C7     		movl	%eax, %edi
+ 21586 1465b E8A0B9FE 		call	bswap_32
+ 21586      FF
+ 21587 14660 4589E9   		movl	%r13d, %r9d
+ 21588 14663 4589E0   		movl	%r12d, %r8d
+ 21589 14666 89D9     		movl	%ebx, %ecx
+ 21590 14668 89C2     		movl	%eax, %edx
+ 21591 1466a 488D3500 		leaq	.LC8(%rip), %rsi
+ 21591      000000
+ 21592 14671 488D3D00 		leaq	.LC1(%rip), %rdi
+ 21592      000000
+ 21593 14678 B8000000 		movl	$0, %eax
+ 21593      00
+ 21594 1467d E8000000 		call	KDbgMsg at PLT
+ 21594      00
+ 21595              	.L536:
+ 21596 14682 F30F6F85 		movdqu	-1584(%rbp), %xmm0
+ 21596      D0F9FFFF 
+ 21597 1468a F30F7F85 		movdqu	%xmm0, -1120(%rbp)
+ 21597      A0FBFFFF 
+ 21598              	.LBE2579:
+ 21599              	.LBB2580:
+ 21600              	.LBB2581:
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 21601              		.loc 2 581 0
+ 21602 14692 660F6F05 		movdqa	ShiftRowTable.6741(%rip), %xmm0
+ 21602      00000000 
+ 21603 1469a F30F6F8D 		movdqu	-1120(%rbp), %xmm1
+ 21603      A0FBFFFF 
+ 21604 146a2 F30F7F8D 		movdqu	%xmm1, -1088(%rbp)
+ 21604      C0FBFFFF 
+ 21605 146aa F30F7F85 		movdqu	%xmm0, -1104(%rbp)
+ 21605      B0FBFFFF 
+ 21606              	.LBB2582:
+ 21607              	.LBB2583:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 21608              		.loc 2 380 0
+ 21609 146b2 F30F6F85 		movdqu	-1088(%rbp), %xmm0
+ 21609      C0FBFFFF 
+ 21610 146ba F30F7F85 		movdqu	%xmm0, -2128(%rbp)
+ 21610      B0F7FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 21611              		.loc 2 381 0
+ 21612 146c2 F30F6F85 		movdqu	-1104(%rbp), %xmm0
+ 21612      B0FBFFFF 
+ 21613 146ca F30F7F85 		movdqu	%xmm0, -2144(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 659
+
+
+ 21613      A0F7FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 21614              		.loc 2 383 0
+ 21615 146d2 C785DCFB 		movl	$0, -1060(%rbp)
+ 21615      FFFF0000 
+ 21615      0000
+ 21616 146dc EB5C     		jmp	.L537
+ 21617              	.L540:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 21618              		.loc 2 385 0
+ 21619 146de 8B85DCFB 		movl	-1060(%rbp), %eax
+ 21619      FFFF
+ 21620 146e4 89C0     		mov	%eax, %eax
+ 21621 146e6 0FB68405 		movzbl	-2144(%rbp,%rax), %eax
+ 21621      A0F7FFFF 
+ 21622 146ee 84C0     		testb	%al, %al
+ 21623 146f0 7912     		jns	.L538
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 21624              		.loc 2 386 0
+ 21625 146f2 8B85DCFB 		movl	-1060(%rbp), %eax
+ 21625      FFFF
+ 21626 146f8 89C0     		mov	%eax, %eax
+ 21627 146fa C68405C0 		movb	$0, -2112(%rbp,%rax)
+ 21627      F7FFFF00 
+ 21628 14702 EB2F     		jmp	.L539
+ 21629              	.L538:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 21630              		.loc 2 388 0
+ 21631 14704 8B8DDCFB 		movl	-1060(%rbp), %ecx
+ 21631      FFFF
+ 21632 1470a 8B85DCFB 		movl	-1060(%rbp), %eax
+ 21632      FFFF
+ 21633 14710 89C0     		mov	%eax, %eax
+ 21634 14712 0FB68405 		movzbl	-2144(%rbp,%rax), %eax
+ 21634      A0F7FFFF 
+ 21635 1471a 0FB6C0   		movzbl	%al, %eax
+ 21636 1471d 83E00F   		andl	$15, %eax
+ 21637 14720 4898     		cltq
+ 21638 14722 0FB69405 		movzbl	-2128(%rbp,%rax), %edx
+ 21638      B0F7FFFF 
+ 21639 1472a 89C8     		mov	%ecx, %eax
+ 21640 1472c 889405C0 		movb	%dl, -2112(%rbp,%rax)
+ 21640      F7FFFF
+ 21641              	.L539:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 21642              		.loc 2 383 0
+ 21643 14733 8385DCFB 		addl	$1, -1060(%rbp)
+ 21643      FFFF01
+ 21644              	.L537:
+ 21645 1473a 83BDDCFB 		cmpl	$15, -1060(%rbp)
+ 21645      FFFF0F
+ 21646 14741 769B     		jbe	.L540
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 21647              		.loc 2 391 0
+ 21648 14743 F30F6F85 		movdqu	-2112(%rbp), %xmm0
+ 21648      C0F7FFFF 
+ 21649              	.LBE2583:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 660
+
+
+ 21650              	.LBE2582:
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 21651              		.loc 2 581 0
+ 21652 1474b F30F7F85 		movdqu	%xmm0, -1120(%rbp)
+ 21652      A0FBFFFF 
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 21653              		.loc 2 582 0
+ 21654 14753 F30F6F85 		movdqu	-1120(%rbp), %xmm0
+ 21654      A0FBFFFF 
+ 21655              	.LBE2581:
+ 21656              	.LBE2580:
+2033:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(ShiftRows) (state);
+ 21657              		.loc 2 2033 0
+ 21658 1475b F30F7F85 		movdqu	%xmm0, -1584(%rbp)
+ 21658      D0F9FFFF 
+ 21659              	.LBB2584:
+2035:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+ 21660              		.loc 2 2035 0
+ 21661 14763 F30F6F85 		movdqu	-1584(%rbp), %xmm0
+ 21661      D0F9FFFF 
+ 21662 1476b F30F7F85 		movdqu	%xmm0, -2288(%rbp)
+ 21662      10F7FFFF 
+ 21663 14773 E8000000 		call	KDbgWriterGet at PLT
+ 21663      00
+ 21664 14778 4885C0   		testq	%rax, %rax
+ 21665 1477b 7479     		je	.L542
+ 21666 1477d BF010000 		movl	$1, %edi
+ 21666      00
+ 21667 14782 E8000000 		call	KDbgCondToFlag at PLT
+ 21667      00
+ 21668 14787 4889C6   		movq	%rax, %rsi
+ 21669 1478a BF100000 		movl	$16, %edi
+ 21669      00
+ 21670 1478f E8000000 		call	KDbgTestModConds at PLT
+ 21670      00
+ 21671 14794 84C0     		testb	%al, %al
+ 21672 14796 745E     		je	.L542
+ 21673 14798 8B851CF7 		movl	-2276(%rbp), %eax
+ 21673      FFFF
+ 21674 1479e 89C7     		movl	%eax, %edi
+ 21675 147a0 E85BB8FE 		call	bswap_32
+ 21675      FF
+ 21676 147a5 4189C5   		movl	%eax, %r13d
+ 21677 147a8 8B8518F7 		movl	-2280(%rbp), %eax
+ 21677      FFFF
+ 21678 147ae 89C7     		movl	%eax, %edi
+ 21679 147b0 E84BB8FE 		call	bswap_32
+ 21679      FF
+ 21680 147b5 4189C4   		movl	%eax, %r12d
+ 21681 147b8 8B8514F7 		movl	-2284(%rbp), %eax
+ 21681      FFFF
+ 21682 147be 89C7     		movl	%eax, %edi
+ 21683 147c0 E83BB8FE 		call	bswap_32
+ 21683      FF
+ 21684 147c5 89C3     		movl	%eax, %ebx
+ 21685 147c7 8B8510F7 		movl	-2288(%rbp), %eax
+ 21685      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 661
+
+
+ 21686 147cd 89C7     		movl	%eax, %edi
+ 21687 147cf E82CB8FE 		call	bswap_32
+ 21687      FF
+ 21688 147d4 4589E9   		movl	%r13d, %r9d
+ 21689 147d7 4589E0   		movl	%r12d, %r8d
+ 21690 147da 89D9     		movl	%ebx, %ecx
+ 21691 147dc 89C2     		movl	%eax, %edx
+ 21692 147de 488D3500 		leaq	.LC9(%rip), %rsi
+ 21692      000000
+ 21693 147e5 488D3D00 		leaq	.LC1(%rip), %rdi
+ 21693      000000
+ 21694 147ec B8000000 		movl	$0, %eax
+ 21694      00
+ 21695 147f1 E8000000 		call	KDbgMsg at PLT
+ 21695      00
+ 21696              	.L542:
+ 21697 147f6 F30F6F85 		movdqu	-1584(%rbp), %xmm0
+ 21697      D0F9FFFF 
+ 21698 147fe F30F7F85 		movdqu	%xmm0, -1056(%rbp)
+ 21698      E0FBFFFF 
+ 21699 14806 F30F6F85 		movdqu	-1056(%rbp), %xmm0
+ 21699      E0FBFFFF 
+ 21700 1480e F30F7F85 		movdqu	%xmm0, -1024(%rbp)
+ 21700      00FCFFFF 
+ 21701              	.LBE2584:
+ 21702              	.LBB2585:
+ 21703              	.LBB2586:
+ 21704              	.LBB2587:
+ 21705              	.LBB2588:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 21706              		.loc 2 667 0
+ 21707 14816 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 21707      00000000 
+ 21708 1481e F30F6F8D 		movdqu	-1024(%rbp), %xmm1
+ 21708      00FCFFFF 
+ 21709 14826 F30F7F8D 		movdqu	%xmm1, -992(%rbp)
+ 21709      20FCFFFF 
+ 21710 1482e F30F7F85 		movdqu	%xmm0, -1008(%rbp)
+ 21710      10FCFFFF 
+ 21711              	.LBB2589:
+ 21712              	.LBB2590:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 21713              		.loc 2 380 0
+ 21714 14836 F30F6F85 		movdqu	-992(%rbp), %xmm0
+ 21714      20FCFFFF 
+ 21715 1483e F30F7F85 		movdqu	%xmm0, -2064(%rbp)
+ 21715      F0F7FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 21716              		.loc 2 381 0
+ 21717 14846 F30F6F85 		movdqu	-1008(%rbp), %xmm0
+ 21717      10FCFFFF 
+ 21718 1484e F30F7F85 		movdqu	%xmm0, -2080(%rbp)
+ 21718      E0F7FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 21719              		.loc 2 383 0
+ 21720 14856 C7853CFC 		movl	$0, -964(%rbp)
+ 21720      FFFF0000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 662
+
+
+ 21720      0000
+ 21721 14860 EB5C     		jmp	.L543
+ 21722              	.L546:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 21723              		.loc 2 385 0
+ 21724 14862 8B853CFC 		movl	-964(%rbp), %eax
+ 21724      FFFF
+ 21725 14868 89C0     		mov	%eax, %eax
+ 21726 1486a 0FB68405 		movzbl	-2080(%rbp,%rax), %eax
+ 21726      E0F7FFFF 
+ 21727 14872 84C0     		testb	%al, %al
+ 21728 14874 7912     		jns	.L544
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 21729              		.loc 2 386 0
+ 21730 14876 8B853CFC 		movl	-964(%rbp), %eax
+ 21730      FFFF
+ 21731 1487c 89C0     		mov	%eax, %eax
+ 21732 1487e C6840500 		movb	$0, -2048(%rbp,%rax)
+ 21732      F8FFFF00 
+ 21733 14886 EB2F     		jmp	.L545
+ 21734              	.L544:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 21735              		.loc 2 388 0
+ 21736 14888 8B8D3CFC 		movl	-964(%rbp), %ecx
+ 21736      FFFF
+ 21737 1488e 8B853CFC 		movl	-964(%rbp), %eax
+ 21737      FFFF
+ 21738 14894 89C0     		mov	%eax, %eax
+ 21739 14896 0FB68405 		movzbl	-2080(%rbp,%rax), %eax
+ 21739      E0F7FFFF 
+ 21740 1489e 0FB6C0   		movzbl	%al, %eax
+ 21741 148a1 83E00F   		andl	$15, %eax
+ 21742 148a4 4898     		cltq
+ 21743 148a6 0FB69405 		movzbl	-2064(%rbp,%rax), %edx
+ 21743      F0F7FFFF 
+ 21744 148ae 89C8     		mov	%ecx, %eax
+ 21745 148b0 88940500 		movb	%dl, -2048(%rbp,%rax)
+ 21745      F8FFFF
+ 21746              	.L545:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 21747              		.loc 2 383 0
+ 21748 148b7 83853CFC 		addl	$1, -964(%rbp)
+ 21748      FFFF01
+ 21749              	.L543:
+ 21750 148be 83BD3CFC 		cmpl	$15, -964(%rbp)
+ 21750      FFFF0F
+ 21751 148c5 769B     		jbe	.L546
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 21752              		.loc 2 391 0
+ 21753 148c7 F30F6F85 		movdqu	-2048(%rbp), %xmm0
+ 21753      00F8FFFF 
+ 21754              	.LBE2590:
+ 21755              	.LBE2589:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 21756              		.loc 2 667 0
+ 21757 148cf F30F7F85 		movdqu	%xmm0, -1024(%rbp)
+ 21757      00FCFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 663
+
+
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 21758              		.loc 2 668 0
+ 21759 148d7 F30F6F85 		movdqu	-1024(%rbp), %xmm0
+ 21759      00FCFFFF 
+ 21760              	.LBE2588:
+ 21761              	.LBE2587:
+1047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c1 = AESBCMEMBER(RotBytesLeft) (state);
+ 21762              		.loc 2 1047 0
+ 21763 148df 660F7F85 		movdqa	%xmm0, -2448(%rbp)
+ 21763      70F6FFFF 
+ 21764 148e7 660F6F85 		movdqa	-2448(%rbp), %xmm0
+ 21764      70F6FFFF 
+ 21765 148ef F30F7F85 		movdqu	%xmm0, -960(%rbp)
+ 21765      40FCFFFF 
+ 21766              	.LBB2591:
+ 21767              	.LBB2592:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 21768              		.loc 2 667 0
+ 21769 148f7 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 21769      00000000 
+ 21770 148ff F30F6F8D 		movdqu	-960(%rbp), %xmm1
+ 21770      40FCFFFF 
+ 21771 14907 F30F7F8D 		movdqu	%xmm1, -928(%rbp)
+ 21771      60FCFFFF 
+ 21772 1490f F30F7F85 		movdqu	%xmm0, -944(%rbp)
+ 21772      50FCFFFF 
+ 21773              	.LBB2593:
+ 21774              	.LBB2594:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 21775              		.loc 2 380 0
+ 21776 14917 F30F6F85 		movdqu	-928(%rbp), %xmm0
+ 21776      60FCFFFF 
+ 21777 1491f F30F7F85 		movdqu	%xmm0, -2016(%rbp)
+ 21777      20F8FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 21778              		.loc 2 381 0
+ 21779 14927 F30F6F85 		movdqu	-944(%rbp), %xmm0
+ 21779      50FCFFFF 
+ 21780 1492f F30F7F85 		movdqu	%xmm0, -2032(%rbp)
+ 21780      10F8FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 21781              		.loc 2 383 0
+ 21782 14937 C7857CFC 		movl	$0, -900(%rbp)
+ 21782      FFFF0000 
+ 21782      0000
+ 21783 14941 EB5C     		jmp	.L547
+ 21784              	.L550:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 21785              		.loc 2 385 0
+ 21786 14943 8B857CFC 		movl	-900(%rbp), %eax
+ 21786      FFFF
+ 21787 14949 89C0     		mov	%eax, %eax
+ 21788 1494b 0FB68405 		movzbl	-2032(%rbp,%rax), %eax
+ 21788      10F8FFFF 
+ 21789 14953 84C0     		testb	%al, %al
+ 21790 14955 7912     		jns	.L548
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 664
+
+
+ 21791              		.loc 2 386 0
+ 21792 14957 8B857CFC 		movl	-900(%rbp), %eax
+ 21792      FFFF
+ 21793 1495d 89C0     		mov	%eax, %eax
+ 21794 1495f C6840530 		movb	$0, -2000(%rbp,%rax)
+ 21794      F8FFFF00 
+ 21795 14967 EB2F     		jmp	.L549
+ 21796              	.L548:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 21797              		.loc 2 388 0
+ 21798 14969 8B8D7CFC 		movl	-900(%rbp), %ecx
+ 21798      FFFF
+ 21799 1496f 8B857CFC 		movl	-900(%rbp), %eax
+ 21799      FFFF
+ 21800 14975 89C0     		mov	%eax, %eax
+ 21801 14977 0FB68405 		movzbl	-2032(%rbp,%rax), %eax
+ 21801      10F8FFFF 
+ 21802 1497f 0FB6C0   		movzbl	%al, %eax
+ 21803 14982 83E00F   		andl	$15, %eax
+ 21804 14985 4898     		cltq
+ 21805 14987 0FB69405 		movzbl	-2016(%rbp,%rax), %edx
+ 21805      20F8FFFF 
+ 21806 1498f 89C8     		mov	%ecx, %eax
+ 21807 14991 88940530 		movb	%dl, -2000(%rbp,%rax)
+ 21807      F8FFFF
+ 21808              	.L549:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 21809              		.loc 2 383 0
+ 21810 14998 83857CFC 		addl	$1, -900(%rbp)
+ 21810      FFFF01
+ 21811              	.L547:
+ 21812 1499f 83BD7CFC 		cmpl	$15, -900(%rbp)
+ 21812      FFFF0F
+ 21813 149a6 769B     		jbe	.L550
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 21814              		.loc 2 391 0
+ 21815 149a8 F30F6F85 		movdqu	-2000(%rbp), %xmm0
+ 21815      30F8FFFF 
+ 21816              	.LBE2594:
+ 21817              	.LBE2593:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 21818              		.loc 2 667 0
+ 21819 149b0 F30F7F85 		movdqu	%xmm0, -960(%rbp)
+ 21819      40FCFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 21820              		.loc 2 668 0
+ 21821 149b8 F30F6F85 		movdqu	-960(%rbp), %xmm0
+ 21821      40FCFFFF 
+ 21822              	.LBE2592:
+ 21823              	.LBE2591:
+1048:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c2 = AESBCMEMBER(RotBytesLeft) (c1);
+ 21824              		.loc 2 1048 0
+ 21825 149c0 660F7F85 		movdqa	%xmm0, -2464(%rbp)
+ 21825      60F6FFFF 
+ 21826 149c8 660F6F85 		movdqa	-2464(%rbp), %xmm0
+ 21826      60F6FFFF 
+ 21827 149d0 F30F7F85 		movdqu	%xmm0, -896(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 665
+
+
+ 21827      80FCFFFF 
+ 21828              	.LBB2595:
+ 21829              	.LBB2596:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 21830              		.loc 2 667 0
+ 21831 149d8 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 21831      00000000 
+ 21832 149e0 F30F6F8D 		movdqu	-896(%rbp), %xmm1
+ 21832      80FCFFFF 
+ 21833 149e8 F30F7F8D 		movdqu	%xmm1, -864(%rbp)
+ 21833      A0FCFFFF 
+ 21834 149f0 F30F7F85 		movdqu	%xmm0, -880(%rbp)
+ 21834      90FCFFFF 
+ 21835              	.LBB2597:
+ 21836              	.LBB2598:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 21837              		.loc 2 380 0
+ 21838 149f8 F30F6F85 		movdqu	-864(%rbp), %xmm0
+ 21838      A0FCFFFF 
+ 21839 14a00 F30F7F85 		movdqu	%xmm0, -1968(%rbp)
+ 21839      50F8FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 21840              		.loc 2 381 0
+ 21841 14a08 F30F6F85 		movdqu	-880(%rbp), %xmm0
+ 21841      90FCFFFF 
+ 21842 14a10 F30F7F85 		movdqu	%xmm0, -1984(%rbp)
+ 21842      40F8FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 21843              		.loc 2 383 0
+ 21844 14a18 C785BCFC 		movl	$0, -836(%rbp)
+ 21844      FFFF0000 
+ 21844      0000
+ 21845 14a22 EB5C     		jmp	.L551
+ 21846              	.L554:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 21847              		.loc 2 385 0
+ 21848 14a24 8B85BCFC 		movl	-836(%rbp), %eax
+ 21848      FFFF
+ 21849 14a2a 89C0     		mov	%eax, %eax
+ 21850 14a2c 0FB68405 		movzbl	-1984(%rbp,%rax), %eax
+ 21850      40F8FFFF 
+ 21851 14a34 84C0     		testb	%al, %al
+ 21852 14a36 7912     		jns	.L552
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 21853              		.loc 2 386 0
+ 21854 14a38 8B85BCFC 		movl	-836(%rbp), %eax
+ 21854      FFFF
+ 21855 14a3e 89C0     		mov	%eax, %eax
+ 21856 14a40 C6840560 		movb	$0, -1952(%rbp,%rax)
+ 21856      F8FFFF00 
+ 21857 14a48 EB2F     		jmp	.L553
+ 21858              	.L552:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 21859              		.loc 2 388 0
+ 21860 14a4a 8B8DBCFC 		movl	-836(%rbp), %ecx
+ 21860      FFFF
+ 21861 14a50 8B85BCFC 		movl	-836(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 666
+
+
+ 21861      FFFF
+ 21862 14a56 89C0     		mov	%eax, %eax
+ 21863 14a58 0FB68405 		movzbl	-1984(%rbp,%rax), %eax
+ 21863      40F8FFFF 
+ 21864 14a60 0FB6C0   		movzbl	%al, %eax
+ 21865 14a63 83E00F   		andl	$15, %eax
+ 21866 14a66 4898     		cltq
+ 21867 14a68 0FB69405 		movzbl	-1968(%rbp,%rax), %edx
+ 21867      50F8FFFF 
+ 21868 14a70 89C8     		mov	%ecx, %eax
+ 21869 14a72 88940560 		movb	%dl, -1952(%rbp,%rax)
+ 21869      F8FFFF
+ 21870              	.L553:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 21871              		.loc 2 383 0
+ 21872 14a79 8385BCFC 		addl	$1, -836(%rbp)
+ 21872      FFFF01
+ 21873              	.L551:
+ 21874 14a80 83BDBCFC 		cmpl	$15, -836(%rbp)
+ 21874      FFFF0F
+ 21875 14a87 769B     		jbe	.L554
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 21876              		.loc 2 391 0
+ 21877 14a89 F30F6F85 		movdqu	-1952(%rbp), %xmm0
+ 21877      60F8FFFF 
+ 21878              	.LBE2598:
+ 21879              	.LBE2597:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 21880              		.loc 2 667 0
+ 21881 14a91 F30F7F85 		movdqu	%xmm0, -896(%rbp)
+ 21881      80FCFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 21882              		.loc 2 668 0
+ 21883 14a99 F30F6F85 		movdqu	-896(%rbp), %xmm0
+ 21883      80FCFFFF 
+ 21884              	.LBE2596:
+ 21885              	.LBE2595:
+1049:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c3 = AESBCMEMBER(RotBytesLeft) (c2);
+ 21886              		.loc 2 1049 0
+ 21887 14aa1 660F7F85 		movdqa	%xmm0, -2480(%rbp)
+ 21887      50F6FFFF 
+ 21888 14aa9 F30F6F85 		movdqu	-1056(%rbp), %xmm0
+ 21888      E0FBFFFF 
+ 21889 14ab1 F30F7F85 		movdqu	%xmm0, -816(%rbp)
+ 21889      D0FCFFFF 
+ 21890 14ab9 660F6F85 		movdqa	-2448(%rbp), %xmm0
+ 21890      70F6FFFF 
+ 21891 14ac1 F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 21891      C0FCFFFF 
+ 21892              	.LBB2599:
+ 21893              	.LBB2600:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 21894              		.loc 2 178 0
+ 21895 14ac9 F30F6F85 		movdqu	-832(%rbp), %xmm0
+ 21895      C0FCFFFF 
+ 21896 14ad1 F30F6F8D 		movdqu	-816(%rbp), %xmm1
+ 21896      D0FCFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 667
+
+
+ 21897 14ad9 660FEFC1 		pxor	%xmm1, %xmm0
+ 21898              	.LBE2600:
+ 21899              	.LBE2599:
+1050:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c0 = AESBCMEMBER(VecXor) (state, c1);
+ 21900              		.loc 2 1050 0
+ 21901 14add 660F7F85 		movdqa	%xmm0, -2432(%rbp)
+ 21901      80F6FFFF 
+ 21902              	.LBB2601:
+1060:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp.state = c0;
+ 21903              		.loc 2 1060 0
+ 21904 14ae5 660F6F85 		movdqa	-2432(%rbp), %xmm0
+ 21904      80F6FFFF 
+ 21905 14aed F30F7F85 		movdqu	%xmm0, -2096(%rbp)
+ 21905      D0F7FFFF 
+1062:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         for (ix = 0; ix < sizeof tmp; ++ix)
+ 21906              		.loc 2 1062 0
+ 21907 14af5 C785FCFB 		movl	$0, -1028(%rbp)
+ 21907      FFFF0000 
+ 21907      0000
+ 21908 14aff EB66     		jmp	.L555
+ 21909              	.L556:
+1063:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             tmp.bytes[ix] = AESBCMEMBER(FFmul02)(tmp.bytes[ix]);
+ 21910              		.loc 2 1063 0
+ 21911 14b01 8B8DFCFB 		movl	-1028(%rbp), %ecx
+ 21911      FFFF
+ 21912 14b07 8B85FCFB 		movl	-1028(%rbp), %eax
+ 21912      FFFF
+ 21913 14b0d 89C0     		mov	%eax, %eax
+ 21914 14b0f 0FB68405 		movzbl	-2096(%rbp,%rax), %eax
+ 21914      D0F7FFFF 
+ 21915 14b17 0FB6C0   		movzbl	%al, %eax
+ 21916 14b1a 8885EEFC 		movb	%al, -786(%rbp)
+ 21916      FFFF
+ 21917              	.LBB2602:
+ 21918              	.LBB2603:
+1012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 1) ^ AESBCMEMBER(FFtab)(b >> 7);
+ 21919              		.loc 2 1012 0
+ 21920 14b20 0FB685EE 		movzbl	-786(%rbp), %eax
+ 21920      FCFFFF
+ 21921 14b27 01C0     		addl	%eax, %eax
+ 21922 14b29 89C3     		movl	%eax, %ebx
+ 21923 14b2b 0FB685EE 		movzbl	-786(%rbp), %eax
+ 21923      FCFFFF
+ 21924 14b32 C0E807   		shrb	$7, %al
+ 21925 14b35 0FB6C0   		movzbl	%al, %eax
+ 21926 14b38 8885EFFC 		movb	%al, -785(%rbp)
+ 21926      FFFF
+ 21927              	.LBB2604:
+ 21928              	.LBB2605:
+1001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(FFtable)[x];
+ 21929              		.loc 2 1001 0
+ 21930 14b3e 0FB685EF 		movzbl	-785(%rbp), %eax
+ 21930      FCFFFF
+ 21931 14b45 4863D0   		movslq	%eax,%rdx
+ 21932 14b48 488D0500 		leaq	KAESBlockCipherVecFFtable(%rip), %rax
+ 21932      000000
+ 21933 14b4f 0FB60402 		movzbl	(%rdx,%rax), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 668
+
+
+ 21934              	.LBE2605:
+ 21935              	.LBE2604:
+1012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 1) ^ AESBCMEMBER(FFtab)(b >> 7);
+ 21936              		.loc 2 1012 0
+ 21937 14b53 31D8     		xorl	%ebx, %eax
+1063:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             tmp.bytes[ix] = AESBCMEMBER(FFmul02)(tmp.bytes[ix]);
+ 21938              		.loc 2 1063 0
+ 21939 14b55 89C2     		movl	%eax, %edx
+ 21940              	.LBE2603:
+ 21941              	.LBE2602:
+ 21942 14b57 89C8     		mov	%ecx, %eax
+ 21943 14b59 889405D0 		movb	%dl, -2096(%rbp,%rax)
+ 21943      F7FFFF
+1062:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         for (ix = 0; ix < sizeof tmp; ++ix)
+ 21944              		.loc 2 1062 0
+ 21945 14b60 8385FCFB 		addl	$1, -1028(%rbp)
+ 21945      FFFF01
+ 21946              	.L555:
+ 21947 14b67 83BDFCFB 		cmpl	$15, -1028(%rbp)
+ 21947      FFFF0F
+ 21948 14b6e 7691     		jbe	.L556
+1064:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         c0 = tmp.state;
+ 21949              		.loc 2 1064 0
+ 21950 14b70 F30F6F85 		movdqu	-2096(%rbp), %xmm0
+ 21950      D0F7FFFF 
+ 21951 14b78 660F7F85 		movdqa	%xmm0, -2432(%rbp)
+ 21951      80F6FFFF 
+ 21952 14b80 660F6F85 		movdqa	-2448(%rbp), %xmm0
+ 21952      70F6FFFF 
+ 21953 14b88 F30F7F85 		movdqu	%xmm0, -768(%rbp)
+ 21953      00FDFFFF 
+ 21954 14b90 660F6F85 		movdqa	-2464(%rbp), %xmm0
+ 21954      60F6FFFF 
+ 21955 14b98 F30F7F85 		movdqu	%xmm0, -784(%rbp)
+ 21955      F0FCFFFF 
+ 21956              	.LBE2601:
+ 21957              	.LBB2606:
+ 21958              	.LBB2607:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 21959              		.loc 2 178 0
+ 21960 14ba0 F30F6F85 		movdqu	-784(%rbp), %xmm0
+ 21960      F0FCFFFF 
+ 21961 14ba8 F30F6F8D 		movdqu	-768(%rbp), %xmm1
+ 21961      00FDFFFF 
+ 21962 14bb0 660FEFC1 		pxor	%xmm1, %xmm0
+ 21963              	.LBE2607:
+ 21964              	.LBE2606:
+1067:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c1 = AESBCMEMBER(VecXor) (c1, c2);
+ 21965              		.loc 2 1067 0
+ 21966 14bb4 660F7F85 		movdqa	%xmm0, -2448(%rbp)
+ 21966      70F6FFFF 
+ 21967 14bbc 660F6F85 		movdqa	-2448(%rbp), %xmm0
+ 21967      70F6FFFF 
+ 21968 14bc4 F30F7F85 		movdqu	%xmm0, -736(%rbp)
+ 21968      20FDFFFF 
+ 21969 14bcc 660F6F85 		movdqa	-2480(%rbp), %xmm0
+ 21969      50F6FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 669
+
+
+ 21970 14bd4 F30F7F85 		movdqu	%xmm0, -752(%rbp)
+ 21970      10FDFFFF 
+ 21971              	.LBB2608:
+ 21972              	.LBB2609:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 21973              		.loc 2 178 0
+ 21974 14bdc F30F6F85 		movdqu	-752(%rbp), %xmm0
+ 21974      10FDFFFF 
+ 21975 14be4 F30F6F8D 		movdqu	-736(%rbp), %xmm1
+ 21975      20FDFFFF 
+ 21976 14bec 660FEFC1 		pxor	%xmm1, %xmm0
+ 21977              	.LBE2609:
+ 21978              	.LBE2608:
+1068:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c1 = AESBCMEMBER(VecXor) (c1, c3);
+ 21979              		.loc 2 1068 0
+ 21980 14bf0 660F7F85 		movdqa	%xmm0, -2448(%rbp)
+ 21980      70F6FFFF 
+ 21981 14bf8 660F6F85 		movdqa	-2448(%rbp), %xmm0
+ 21981      70F6FFFF 
+ 21982 14c00 F30F7F85 		movdqu	%xmm0, -704(%rbp)
+ 21982      40FDFFFF 
+ 21983 14c08 660F6F85 		movdqa	-2432(%rbp), %xmm0
+ 21983      80F6FFFF 
+ 21984 14c10 F30F7F85 		movdqu	%xmm0, -720(%rbp)
+ 21984      30FDFFFF 
+ 21985              	.LBB2610:
+ 21986              	.LBB2611:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 21987              		.loc 2 178 0
+ 21988 14c18 F30F6F85 		movdqu	-720(%rbp), %xmm0
+ 21988      30FDFFFF 
+ 21989 14c20 F30F6F8D 		movdqu	-704(%rbp), %xmm1
+ 21989      40FDFFFF 
+ 21990 14c28 660FEFC1 		pxor	%xmm1, %xmm0
+ 21991              	.LBE2611:
+ 21992              	.LBE2610:
+1069:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c1 = AESBCMEMBER(VecXor) (c1, c0);
+ 21993              		.loc 2 1069 0
+ 21994 14c2c 660F7F85 		movdqa	%xmm0, -2448(%rbp)
+ 21994      70F6FFFF 
+1071:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return c1;
+ 21995              		.loc 2 1071 0
+ 21996 14c34 660F6F85 		movdqa	-2448(%rbp), %xmm0
+ 21996      70F6FFFF 
+ 21997              	.LBE2586:
+ 21998              	.LBE2585:
+2037:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(MixColumns) (state);
+ 21999              		.loc 2 2037 0
+ 22000 14c3c F30F7F85 		movdqu	%xmm0, -1584(%rbp)
+ 22000      D0F9FFFF 
+ 22001              	.LBB2612:
+2040:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After MixColum", state);
+ 22002              		.loc 2 2040 0
+ 22003 14c44 F30F6F85 		movdqu	-1584(%rbp), %xmm0
+ 22003      D0F9FFFF 
+ 22004 14c4c F30F7F85 		movdqu	%xmm0, -2304(%rbp)
+ 22004      00F7FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 670
+
+
+ 22005 14c54 E8000000 		call	KDbgWriterGet at PLT
+ 22005      00
+ 22006 14c59 4885C0   		testq	%rax, %rax
+ 22007 14c5c 7479     		je	.L558
+ 22008 14c5e BF010000 		movl	$1, %edi
+ 22008      00
+ 22009 14c63 E8000000 		call	KDbgCondToFlag at PLT
+ 22009      00
+ 22010 14c68 4889C6   		movq	%rax, %rsi
+ 22011 14c6b BF100000 		movl	$16, %edi
+ 22011      00
+ 22012 14c70 E8000000 		call	KDbgTestModConds at PLT
+ 22012      00
+ 22013 14c75 84C0     		testb	%al, %al
+ 22014 14c77 745E     		je	.L558
+ 22015 14c79 8B850CF7 		movl	-2292(%rbp), %eax
+ 22015      FFFF
+ 22016 14c7f 89C7     		movl	%eax, %edi
+ 22017 14c81 E87AB3FE 		call	bswap_32
+ 22017      FF
+ 22018 14c86 4189C5   		movl	%eax, %r13d
+ 22019 14c89 8B8508F7 		movl	-2296(%rbp), %eax
+ 22019      FFFF
+ 22020 14c8f 89C7     		movl	%eax, %edi
+ 22021 14c91 E86AB3FE 		call	bswap_32
+ 22021      FF
+ 22022 14c96 4189C4   		movl	%eax, %r12d
+ 22023 14c99 8B8504F7 		movl	-2300(%rbp), %eax
+ 22023      FFFF
+ 22024 14c9f 89C7     		movl	%eax, %edi
+ 22025 14ca1 E85AB3FE 		call	bswap_32
+ 22025      FF
+ 22026 14ca6 89C3     		movl	%eax, %ebx
+ 22027 14ca8 8B8500F7 		movl	-2304(%rbp), %eax
+ 22027      FFFF
+ 22028 14cae 89C7     		movl	%eax, %edi
+ 22029 14cb0 E84BB3FE 		call	bswap_32
+ 22029      FF
+ 22030 14cb5 4589E9   		movl	%r13d, %r9d
+ 22031 14cb8 4589E0   		movl	%r12d, %r8d
+ 22032 14cbb 89D9     		movl	%ebx, %ecx
+ 22033 14cbd 89C2     		movl	%eax, %edx
+ 22034 14cbf 488D3500 		leaq	.LC10(%rip), %rsi
+ 22034      000000
+ 22035 14cc6 488D3D00 		leaq	.LC1(%rip), %rdi
+ 22035      000000
+ 22036 14ccd B8000000 		movl	$0, %eax
+ 22036      00
+ 22037 14cd2 E8000000 		call	KDbgMsg at PLT
+ 22037      00
+ 22038              	.L558:
+ 22039 14cd7 F30F6F85 		movdqu	-1584(%rbp), %xmm0
+ 22039      D0F9FFFF 
+ 22040 14cdf F30F7F85 		movdqu	%xmm0, -672(%rbp)
+ 22040      60FDFFFF 
+ 22041 14ce7 F30F6F85 		movdqu	-1600(%rbp), %xmm0
+ 22041      C0F9FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 671
+
+
+ 22042 14cef F30F7F85 		movdqu	%xmm0, -688(%rbp)
+ 22042      50FDFFFF 
+ 22043 14cf7 F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 22043      60FDFFFF 
+ 22044 14cff F30F7F85 		movdqu	%xmm0, -640(%rbp)
+ 22044      80FDFFFF 
+ 22045 14d07 F30F6F85 		movdqu	-688(%rbp), %xmm0
+ 22045      50FDFFFF 
+ 22046 14d0f F30F7F85 		movdqu	%xmm0, -656(%rbp)
+ 22046      70FDFFFF 
+ 22047              	.LBE2612:
+ 22048              	.LBB2613:
+ 22049              	.LBB2614:
+ 22050              	.LBB2615:
+ 22051              	.LBB2616:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 22052              		.loc 2 178 0
+ 22053 14d17 F30F6F85 		movdqu	-656(%rbp), %xmm0
+ 22053      70FDFFFF 
+ 22054 14d1f F30F6F8D 		movdqu	-640(%rbp), %xmm1
+ 22054      80FDFFFF 
+ 22055 14d27 660FEFC1 		pxor	%xmm1, %xmm0
+ 22056              	.LBE2616:
+ 22057              	.LBE2615:
+ 22058              	.LBE2614:
+ 22059              	.LBE2613:
+2042:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 22060              		.loc 2 2042 0
+ 22061 14d2b F30F7F85 		movdqu	%xmm0, -1584(%rbp)
+ 22061      D0F9FFFF 
+ 22062              	.LBB2617:
+2044:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+ 22063              		.loc 2 2044 0
+ 22064 14d33 F30F6F85 		movdqu	-1600(%rbp), %xmm0
+ 22064      C0F9FFFF 
+ 22065 14d3b F30F7F85 		movdqu	%xmm0, -2320(%rbp)
+ 22065      F0F6FFFF 
+ 22066 14d43 E8000000 		call	KDbgWriterGet at PLT
+ 22066      00
+ 22067 14d48 4885C0   		testq	%rax, %rax
+ 22068 14d4b 7479     		je	.L560
+ 22069 14d4d BF010000 		movl	$1, %edi
+ 22069      00
+ 22070 14d52 E8000000 		call	KDbgCondToFlag at PLT
+ 22070      00
+ 22071 14d57 4889C6   		movq	%rax, %rsi
+ 22072 14d5a BF100000 		movl	$16, %edi
+ 22072      00
+ 22073 14d5f E8000000 		call	KDbgTestModConds at PLT
+ 22073      00
+ 22074 14d64 84C0     		testb	%al, %al
+ 22075 14d66 745E     		je	.L560
+ 22076 14d68 8B85FCF6 		movl	-2308(%rbp), %eax
+ 22076      FFFF
+ 22077 14d6e 89C7     		movl	%eax, %edi
+ 22078 14d70 E88BB2FE 		call	bswap_32
+ 22078      FF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 672
+
+
+ 22079 14d75 4189C5   		movl	%eax, %r13d
+ 22080 14d78 8B85F8F6 		movl	-2312(%rbp), %eax
+ 22080      FFFF
+ 22081 14d7e 89C7     		movl	%eax, %edi
+ 22082 14d80 E87BB2FE 		call	bswap_32
+ 22082      FF
+ 22083 14d85 4189C4   		movl	%eax, %r12d
+ 22084 14d88 8B85F4F6 		movl	-2316(%rbp), %eax
+ 22084      FFFF
+ 22085 14d8e 89C7     		movl	%eax, %edi
+ 22086 14d90 E86BB2FE 		call	bswap_32
+ 22086      FF
+ 22087 14d95 89C3     		movl	%eax, %ebx
+ 22088 14d97 8B85F0F6 		movl	-2320(%rbp), %eax
+ 22088      FFFF
+ 22089 14d9d 89C7     		movl	%eax, %edi
+ 22090 14d9f E85CB2FE 		call	bswap_32
+ 22090      FF
+ 22091 14da4 4589E9   		movl	%r13d, %r9d
+ 22092 14da7 4589E0   		movl	%r12d, %r8d
+ 22093 14daa 89D9     		movl	%ebx, %ecx
+ 22094 14dac 89C2     		movl	%eax, %edx
+ 22095 14dae 488D3500 		leaq	.LC6(%rip), %rsi
+ 22095      000000
+ 22096 14db5 488D3D00 		leaq	.LC1(%rip), %rdi
+ 22096      000000
+ 22097 14dbc B8000000 		movl	$0, %eax
+ 22097      00
+ 22098 14dc1 E8000000 		call	KDbgMsg at PLT
+ 22098      00
+ 22099              	.L560:
+ 22100              	.LBE2617:
+ 22101              	.LBB2618:
+2045:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("End of Round", state);
+ 22102              		.loc 2 2045 0
+ 22103 14dc6 F30F6F85 		movdqu	-1584(%rbp), %xmm0
+ 22103      D0F9FFFF 
+ 22104 14dce F30F7F85 		movdqu	%xmm0, -2336(%rbp)
+ 22104      E0F6FFFF 
+ 22105 14dd6 E8000000 		call	KDbgWriterGet at PLT
+ 22105      00
+ 22106 14ddb 4885C0   		testq	%rax, %rax
+ 22107 14dde 7479     		je	.L562
+ 22108 14de0 BF010000 		movl	$1, %edi
+ 22108      00
+ 22109 14de5 E8000000 		call	KDbgCondToFlag at PLT
+ 22109      00
+ 22110 14dea 4889C6   		movq	%rax, %rsi
+ 22111 14ded BF100000 		movl	$16, %edi
+ 22111      00
+ 22112 14df2 E8000000 		call	KDbgTestModConds at PLT
+ 22112      00
+ 22113 14df7 84C0     		testb	%al, %al
+ 22114 14df9 745E     		je	.L562
+ 22115 14dfb 8B85ECF6 		movl	-2324(%rbp), %eax
+ 22115      FFFF
+ 22116 14e01 89C7     		movl	%eax, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 673
+
+
+ 22117 14e03 E8F8B1FE 		call	bswap_32
+ 22117      FF
+ 22118 14e08 4189C5   		movl	%eax, %r13d
+ 22119 14e0b 8B85E8F6 		movl	-2328(%rbp), %eax
+ 22119      FFFF
+ 22120 14e11 89C7     		movl	%eax, %edi
+ 22121 14e13 E8E8B1FE 		call	bswap_32
+ 22121      FF
+ 22122 14e18 4189C4   		movl	%eax, %r12d
+ 22123 14e1b 8B85E4F6 		movl	-2332(%rbp), %eax
+ 22123      FFFF
+ 22124 14e21 89C7     		movl	%eax, %edi
+ 22125 14e23 E8D8B1FE 		call	bswap_32
+ 22125      FF
+ 22126 14e28 89C3     		movl	%eax, %ebx
+ 22127 14e2a 8B85E0F6 		movl	-2336(%rbp), %eax
+ 22127      FFFF
+ 22128 14e30 89C7     		movl	%eax, %edi
+ 22129 14e32 E8C9B1FE 		call	bswap_32
+ 22129      FF
+ 22130 14e37 4589E9   		movl	%r13d, %r9d
+ 22131 14e3a 4589E0   		movl	%r12d, %r8d
+ 22132 14e3d 89D9     		movl	%ebx, %ecx
+ 22133 14e3f 89C2     		movl	%eax, %edx
+ 22134 14e41 488D3500 		leaq	.LC11(%rip), %rsi
+ 22134      000000
+ 22135 14e48 488D3D00 		leaq	.LC1(%rip), %rdi
+ 22135      000000
+ 22136 14e4f B8000000 		movl	$0, %eax
+ 22136      00
+ 22137 14e54 E8000000 		call	KDbgMsg at PLT
+ 22137      00
+ 22138              	.L562:
+ 22139              	.LBE2618:
+2047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 22140              		.loc 2 2047 0
+ 22141 14e59 F30F6F85 		movdqu	-1584(%rbp), %xmm0
+ 22141      D0F9FFFF 
+ 22142              	.LBE2557:
+ 22143              	.LBE2556:
+2100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(MiddleRound) (state, key[ix] );
+ 22144              		.loc 2 2100 0
+ 22145 14e61 660F7F85 		movdqa	%xmm0, -2400(%rbp)
+ 22145      A0F6FFFF 
+2099:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for ( ; ix < Nr; ++ix)
+ 22146              		.loc 2 2099 0
+ 22147 14e69 83855CF9 		addl	$1, -1700(%rbp)
+ 22147      FFFF01
+ 22148              	.L522:
+ 22149 14e70 8B855CF9 		movl	-1700(%rbp), %eax
+ 22149      FFFF
+ 22150 14e76 3B8594F6 		cmpl	-2412(%rbp), %eax
+ 22150      FFFF
+ 22151 14e7c 0F822FF0 		jb	.L563
+ 22151      FFFF
+2102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(LastRound) (state, key[ix]);
+ 22152              		.loc 2 2102 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 674
+
+
+ 22153 14e82 8B855CF9 		mov	-1700(%rbp), %eax
+ 22153      FFFF
+ 22154 14e88 48C1E004 		salq	$4, %rax
+ 22155 14e8c 48038598 		addq	-2408(%rbp), %rax
+ 22155      F6FFFF
+ 22156 14e93 660F6F00 		movdqa	(%rax), %xmm0
+ 22157 14e97 660F6F8D 		movdqa	-2400(%rbp), %xmm1
+ 22157      A0F6FFFF 
+ 22158 14e9f F30F7F8D 		movdqu	%xmm1, -608(%rbp)
+ 22158      A0FDFFFF 
+ 22159 14ea7 F30F7F85 		movdqu	%xmm0, -624(%rbp)
+ 22159      90FDFFFF 
+ 22160              	.LBB2619:
+ 22161              	.LBB2620:
+ 22162              	.LBB2621:
+2058:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Start of Round", state);
+ 22163              		.loc 2 2058 0
+ 22164 14eaf F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 22164      A0FDFFFF 
+ 22165 14eb7 F30F7F85 		movdqu	%xmm0, -1872(%rbp)
+ 22165      B0F8FFFF 
+ 22166 14ebf E8000000 		call	KDbgWriterGet at PLT
+ 22166      00
+ 22167 14ec4 4885C0   		testq	%rax, %rax
+ 22168 14ec7 7479     		je	.L565
+ 22169 14ec9 BF010000 		movl	$1, %edi
+ 22169      00
+ 22170 14ece E8000000 		call	KDbgCondToFlag at PLT
+ 22170      00
+ 22171 14ed3 4889C6   		movq	%rax, %rsi
+ 22172 14ed6 BF100000 		movl	$16, %edi
+ 22172      00
+ 22173 14edb E8000000 		call	KDbgTestModConds at PLT
+ 22173      00
+ 22174 14ee0 84C0     		testb	%al, %al
+ 22175 14ee2 745E     		je	.L565
+ 22176 14ee4 8B85BCF8 		movl	-1860(%rbp), %eax
+ 22176      FFFF
+ 22177 14eea 89C7     		movl	%eax, %edi
+ 22178 14eec E80FB1FE 		call	bswap_32
+ 22178      FF
+ 22179 14ef1 4189C5   		movl	%eax, %r13d
+ 22180 14ef4 8B85B8F8 		movl	-1864(%rbp), %eax
+ 22180      FFFF
+ 22181 14efa 89C7     		movl	%eax, %edi
+ 22182 14efc E8FFB0FE 		call	bswap_32
+ 22182      FF
+ 22183 14f01 4189C4   		movl	%eax, %r12d
+ 22184 14f04 8B85B4F8 		movl	-1868(%rbp), %eax
+ 22184      FFFF
+ 22185 14f0a 89C7     		movl	%eax, %edi
+ 22186 14f0c E8EFB0FE 		call	bswap_32
+ 22186      FF
+ 22187 14f11 89C3     		movl	%eax, %ebx
+ 22188 14f13 8B85B0F8 		movl	-1872(%rbp), %eax
+ 22188      FFFF
+ 22189 14f19 89C7     		movl	%eax, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 675
+
+
+ 22190 14f1b E8E0B0FE 		call	bswap_32
+ 22190      FF
+ 22191 14f20 4589E9   		movl	%r13d, %r9d
+ 22192 14f23 4589E0   		movl	%r12d, %r8d
+ 22193 14f26 89D9     		movl	%ebx, %ecx
+ 22194 14f28 89C2     		movl	%eax, %edx
+ 22195 14f2a 488D3500 		leaq	.LC5(%rip), %rsi
+ 22195      000000
+ 22196 14f31 488D3D00 		leaq	.LC1(%rip), %rdi
+ 22196      000000
+ 22197 14f38 B8000000 		movl	$0, %eax
+ 22197      00
+ 22198 14f3d E8000000 		call	KDbgMsg at PLT
+ 22198      00
+ 22199              	.L565:
+ 22200 14f42 F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 22200      A0FDFFFF 
+ 22201 14f4a F30F7F85 		movdqu	%xmm0, -592(%rbp)
+ 22201      B0FDFFFF 
+ 22202 14f52 F30F6F85 		movdqu	-592(%rbp), %xmm0
+ 22202      B0FDFFFF 
+ 22203 14f5a F30F7F85 		movdqu	%xmm0, -560(%rbp)
+ 22203      D0FDFFFF 
+ 22204 14f62 488D0500 		leaq	KAESBlockCipherVecRijndaelSBoxV(%rip), %rax
+ 22204      000000
+ 22205 14f69 488985C8 		movq	%rax, -568(%rbp)
+ 22205      FDFFFF
+ 22206              	.LBE2621:
+ 22207              	.LBB2622:
+ 22208              	.LBB2623:
+ 22209              	.LBB2624:
+ 22210              	.LBB2625:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 22211              		.loc 2 851 0
+ 22212 14f70 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 22212      00000000 
+ 22213 14f78 F30F7F85 		movdqu	%xmm0, -528(%rbp)
+ 22213      F0FDFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 22214              		.loc 2 854 0
+ 22215 14f80 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 22215      00000000 
+ 22216 14f88 F30F6F8D 		movdqu	-560(%rbp), %xmm1
+ 22216      D0FDFFFF 
+ 22217 14f90 F30F7F8D 		movdqu	%xmm1, -448(%rbp)
+ 22217      40FEFFFF 
+ 22218 14f98 F30F7F85 		movdqu	%xmm0, -464(%rbp)
+ 22218      30FEFFFF 
+ 22219              	.LBB2626:
+ 22220              	.LBB2627:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 22221              		.loc 2 206 0
+ 22222 14fa0 F30F6F85 		movdqu	-464(%rbp), %xmm0
+ 22222      30FEFFFF 
+ 22223 14fa8 F30F6F8D 		movdqu	-448(%rbp), %xmm1
+ 22223      40FEFFFF 
+ 22224 14fb0 660FDBC1 		pand	%xmm1, %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 676
+
+
+ 22225              	.LBE2627:
+ 22226              	.LBE2626:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 22227              		.loc 2 854 0
+ 22228 14fb4 F30F7F85 		movdqu	%xmm0, -480(%rbp)
+ 22228      20FEFFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 22229              		.loc 2 862 0
+ 22230 14fbc 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 22230      00000000 
+ 22231 14fc4 F30F6F8D 		movdqu	-560(%rbp), %xmm1
+ 22231      D0FDFFFF 
+ 22232 14fcc F30F7F8D 		movdqu	%xmm1, -416(%rbp)
+ 22232      60FEFFFF 
+ 22233 14fd4 F30F7F85 		movdqu	%xmm0, -432(%rbp)
+ 22233      50FEFFFF 
+ 22234              	.LBB2628:
+ 22235              		.loc 2 2642 0
+ 22236 14fdc 0FB68560 		movzbl	-416(%rbp), %eax
+ 22236      FEFFFF
+ 22237 14fe3 0FB69550 		movzbl	-432(%rbp), %edx
+ 22237      FEFFFF
+ 22238 14fea 0FB6C0   		movzbl	%al, %eax
+ 22239 14fed 6689851E 		movw	%ax, -2530(%rbp)
+ 22239      F6FFFF
+ 22240 14ff4 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 22240      F6FFFF
+ 22241 14ffb F6F2     		divb	%dl
+ 22242 14ffd 4189C7   		movl	%eax, %r15d
+ 22243 15000 0FB68561 		movzbl	-415(%rbp), %eax
+ 22243      FEFFFF
+ 22244 15007 0FB69551 		movzbl	-431(%rbp), %edx
+ 22244      FEFFFF
+ 22245 1500e 0FB6C0   		movzbl	%al, %eax
+ 22246 15011 6689851E 		movw	%ax, -2530(%rbp)
+ 22246      F6FFFF
+ 22247 15018 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 22247      F6FFFF
+ 22248 1501f F6F2     		divb	%dl
+ 22249 15021 888593F6 		movb	%al, -2413(%rbp)
+ 22249      FFFF
+ 22250 15027 0FB68562 		movzbl	-414(%rbp), %eax
+ 22250      FEFFFF
+ 22251 1502e 0FB69552 		movzbl	-430(%rbp), %edx
+ 22251      FEFFFF
+ 22252 15035 0FB6C0   		movzbl	%al, %eax
+ 22253 15038 6689851E 		movw	%ax, -2530(%rbp)
+ 22253      F6FFFF
+ 22254 1503f 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 22254      F6FFFF
+ 22255 15046 F6F2     		divb	%dl
+ 22256 15048 888592F6 		movb	%al, -2414(%rbp)
+ 22256      FFFF
+ 22257 1504e 0FB68563 		movzbl	-413(%rbp), %eax
+ 22257      FEFFFF
+ 22258 15055 0FB69553 		movzbl	-429(%rbp), %edx
+ 22258      FEFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 677
+
+
+ 22259 1505c 0FB6C0   		movzbl	%al, %eax
+ 22260 1505f 6689851E 		movw	%ax, -2530(%rbp)
+ 22260      F6FFFF
+ 22261 15066 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 22261      F6FFFF
+ 22262 1506d F6F2     		divb	%dl
+ 22263 1506f 888591F6 		movb	%al, -2415(%rbp)
+ 22263      FFFF
+ 22264 15075 0FB68564 		movzbl	-412(%rbp), %eax
+ 22264      FEFFFF
+ 22265 1507c 0FB69554 		movzbl	-428(%rbp), %edx
+ 22265      FEFFFF
+ 22266 15083 0FB6C0   		movzbl	%al, %eax
+ 22267 15086 6689851E 		movw	%ax, -2530(%rbp)
+ 22267      F6FFFF
+ 22268 1508d 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 22268      F6FFFF
+ 22269 15094 F6F2     		divb	%dl
+ 22270 15096 888590F6 		movb	%al, -2416(%rbp)
+ 22270      FFFF
+ 22271 1509c 0FB68565 		movzbl	-411(%rbp), %eax
+ 22271      FEFFFF
+ 22272 150a3 0FB69555 		movzbl	-427(%rbp), %edx
+ 22272      FEFFFF
+ 22273 150aa 0FB6C0   		movzbl	%al, %eax
+ 22274 150ad 6689851E 		movw	%ax, -2530(%rbp)
+ 22274      F6FFFF
+ 22275 150b4 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 22275      F6FFFF
+ 22276 150bb F6F2     		divb	%dl
+ 22277 150bd 4189C1   		movl	%eax, %r9d
+ 22278 150c0 0FB68566 		movzbl	-410(%rbp), %eax
+ 22278      FEFFFF
+ 22279 150c7 0FB69556 		movzbl	-426(%rbp), %edx
+ 22279      FEFFFF
+ 22280 150ce 0FB6C0   		movzbl	%al, %eax
+ 22281 150d1 6689851E 		movw	%ax, -2530(%rbp)
+ 22281      F6FFFF
+ 22282 150d8 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 22282      F6FFFF
+ 22283 150df F6F2     		divb	%dl
+ 22284 150e1 89C7     		movl	%eax, %edi
+ 22285 150e3 0FB68567 		movzbl	-409(%rbp), %eax
+ 22285      FEFFFF
+ 22286 150ea 0FB69557 		movzbl	-425(%rbp), %edx
+ 22286      FEFFFF
+ 22287 150f1 0FB6C0   		movzbl	%al, %eax
+ 22288 150f4 6689851E 		movw	%ax, -2530(%rbp)
+ 22288      F6FFFF
+ 22289 150fb 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 22289      F6FFFF
+ 22290 15102 F6F2     		divb	%dl
+ 22291 15104 89C3     		movl	%eax, %ebx
+ 22292 15106 0FB68568 		movzbl	-408(%rbp), %eax
+ 22292      FEFFFF
+ 22293 1510d 0FB69558 		movzbl	-424(%rbp), %edx
+ 22293      FEFFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 678
+
+
+ 22294 15114 0FB6C0   		movzbl	%al, %eax
+ 22295 15117 6689851E 		movw	%ax, -2530(%rbp)
+ 22295      F6FFFF
+ 22296 1511e 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 22296      F6FFFF
+ 22297 15125 F6F2     		divb	%dl
+ 22298 15127 4189C2   		movl	%eax, %r10d
+ 22299 1512a 0FB68569 		movzbl	-407(%rbp), %eax
+ 22299      FEFFFF
+ 22300 15131 0FB69559 		movzbl	-423(%rbp), %edx
+ 22300      FEFFFF
+ 22301 15138 0FB6C0   		movzbl	%al, %eax
+ 22302 1513b 6689851E 		movw	%ax, -2530(%rbp)
+ 22302      F6FFFF
+ 22303 15142 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 22303      F6FFFF
+ 22304 15149 F6F2     		divb	%dl
+ 22305 1514b 4189C3   		movl	%eax, %r11d
+ 22306 1514e 0FB6856A 		movzbl	-406(%rbp), %eax
+ 22306      FEFFFF
+ 22307 15155 0FB6955A 		movzbl	-422(%rbp), %edx
+ 22307      FEFFFF
+ 22308 1515c 0FB6C0   		movzbl	%al, %eax
+ 22309 1515f 6689851E 		movw	%ax, -2530(%rbp)
+ 22309      F6FFFF
+ 22310 15166 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 22310      F6FFFF
+ 22311 1516d F6F2     		divb	%dl
+ 22312 1516f 4189C4   		movl	%eax, %r12d
+ 22313 15172 0FB6856B 		movzbl	-405(%rbp), %eax
+ 22313      FEFFFF
+ 22314 15179 0FB6955B 		movzbl	-421(%rbp), %edx
+ 22314      FEFFFF
+ 22315 15180 0FB6C0   		movzbl	%al, %eax
+ 22316 15183 6689851E 		movw	%ax, -2530(%rbp)
+ 22316      F6FFFF
+ 22317 1518a 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 22317      F6FFFF
+ 22318 15191 F6F2     		divb	%dl
+ 22319 15193 4189C5   		movl	%eax, %r13d
+ 22320 15196 0FB6856C 		movzbl	-404(%rbp), %eax
+ 22320      FEFFFF
+ 22321 1519d 0FB6955C 		movzbl	-420(%rbp), %edx
+ 22321      FEFFFF
+ 22322 151a4 0FB6C0   		movzbl	%al, %eax
+ 22323 151a7 6689851E 		movw	%ax, -2530(%rbp)
+ 22323      F6FFFF
+ 22324 151ae 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 22324      F6FFFF
+ 22325 151b5 F6F2     		divb	%dl
+ 22326 151b7 4189C6   		movl	%eax, %r14d
+ 22327 151ba 0FB6856D 		movzbl	-403(%rbp), %eax
+ 22327      FEFFFF
+ 22328 151c1 0FB6955D 		movzbl	-419(%rbp), %edx
+ 22328      FEFFFF
+ 22329 151c8 0FB6C0   		movzbl	%al, %eax
+ 22330 151cb 6689851E 		movw	%ax, -2530(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 679
+
+
+ 22330      F6FFFF
+ 22331 151d2 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 22331      F6FFFF
+ 22332 151d9 F6F2     		divb	%dl
+ 22333 151db 4189C0   		movl	%eax, %r8d
+ 22334 151de 0FB6856E 		movzbl	-402(%rbp), %eax
+ 22334      FEFFFF
+ 22335 151e5 0FB6955E 		movzbl	-418(%rbp), %edx
+ 22335      FEFFFF
+ 22336 151ec 0FB6C0   		movzbl	%al, %eax
+ 22337 151ef 6689851E 		movw	%ax, -2530(%rbp)
+ 22337      F6FFFF
+ 22338 151f6 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 22338      F6FFFF
+ 22339 151fd F6F2     		divb	%dl
+ 22340 151ff 89C6     		movl	%eax, %esi
+ 22341 15201 0FB6856F 		movzbl	-401(%rbp), %eax
+ 22341      FEFFFF
+ 22342 15208 0FB6955F 		movzbl	-417(%rbp), %edx
+ 22342      FEFFFF
+ 22343 1520f 0FB6C0   		movzbl	%al, %eax
+ 22344 15212 6689851E 		movw	%ax, -2530(%rbp)
+ 22344      F6FFFF
+ 22345 15219 0FB7851E 		movzwl	-2530(%rbp), %eax
+ 22345      F6FFFF
+ 22346 15220 F6F2     		divb	%dl
+ 22347 15222 89C1     		movl	%eax, %ecx
+ 22348              	.LBB2629:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 22349              		.loc 2 346 0
+ 22350 15224 0FB6D3   		movzbl	%bl, %edx
+ 22351 15227 400FB6C7 		movzbl	%dil, %eax
+ 22352 1522b 48C1E208 		salq	$8, %rdx
+ 22353 1522f 4809C2   		orq	%rax, %rdx
+ 22354 15232 410FB6C1 		movzbl	%r9b, %eax
+ 22355 15236 48C1E208 		salq	$8, %rdx
+ 22356 1523a 4809C2   		orq	%rax, %rdx
+ 22357 1523d 0FB68590 		movzbl	-2416(%rbp), %eax
+ 22357      F6FFFF
+ 22358 15244 48C1E208 		salq	$8, %rdx
+ 22359 15248 4809C2   		orq	%rax, %rdx
+ 22360 1524b 0FB68591 		movzbl	-2415(%rbp), %eax
+ 22360      F6FFFF
+ 22361 15252 48C1E208 		salq	$8, %rdx
+ 22362 15256 4809C2   		orq	%rax, %rdx
+ 22363 15259 0FB68592 		movzbl	-2414(%rbp), %eax
+ 22363      F6FFFF
+ 22364 15260 48C1E208 		salq	$8, %rdx
+ 22365 15264 4809C2   		orq	%rax, %rdx
+ 22366 15267 0FB68593 		movzbl	-2413(%rbp), %eax
+ 22366      F6FFFF
+ 22367 1526e 48C1E208 		salq	$8, %rdx
+ 22368 15272 4809C2   		orq	%rax, %rdx
+ 22369 15275 410FB6C7 		movzbl	%r15b, %eax
+ 22370 15279 48C1E208 		salq	$8, %rdx
+ 22371 1527d 4809C2   		orq	%rax, %rdx
+ 22372 15280 0FB6C1   		movzbl	%cl, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 680
+
+
+ 22373 15283 400FB6CE 		movzbl	%sil, %ecx
+ 22374 15287 48C1E008 		salq	$8, %rax
+ 22375 1528b 4809C8   		orq	%rcx, %rax
+ 22376 1528e 410FB6C8 		movzbl	%r8b, %ecx
+ 22377 15292 48C1E008 		salq	$8, %rax
+ 22378 15296 4809C8   		orq	%rcx, %rax
+ 22379 15299 410FB6CE 		movzbl	%r14b, %ecx
+ 22380 1529d 48C1E008 		salq	$8, %rax
+ 22381 152a1 4809C8   		orq	%rcx, %rax
+ 22382 152a4 410FB6CD 		movzbl	%r13b, %ecx
+ 22383 152a8 48C1E008 		salq	$8, %rax
+ 22384 152ac 4809C8   		orq	%rcx, %rax
+ 22385 152af 410FB6CC 		movzbl	%r12b, %ecx
+ 22386 152b3 48C1E008 		salq	$8, %rax
+ 22387 152b7 4809C8   		orq	%rcx, %rax
+ 22388 152ba 410FB6CB 		movzbl	%r11b, %ecx
+ 22389 152be 48C1E008 		salq	$8, %rax
+ 22390 152c2 4809C8   		orq	%rcx, %rax
+ 22391 152c5 410FB6CA 		movzbl	%r10b, %ecx
+ 22392 152c9 48C1E008 		salq	$8, %rax
+ 22393 152cd 4809C8   		orq	%rcx, %rax
+ 22394 152d0 48899520 		movq	%rdx, -2528(%rbp)
+ 22394      F6FFFF
+ 22395 152d7 48898528 		movq	%rax, -2520(%rbp)
+ 22395      F6FFFF
+ 22396 152de 660F6F85 		movdqa	-2528(%rbp), %xmm0
+ 22396      20F6FFFF 
+ 22397              	.LBE2629:
+ 22398              	.LBE2628:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 22399              		.loc 2 862 0
+ 22400 152e6 F30F7F85 		movdqu	%xmm0, -496(%rbp)
+ 22400      10FEFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 22401              		.loc 2 866 0
+ 22402 152ee C785ECFD 		movl	$0, -532(%rbp)
+ 22402      FFFF0000 
+ 22402      0000
+ 22403 152f8 E9860200 		jmp	.L566
+ 22403      00
+ 22404              	.L575:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 22405              		.loc 2 868 0
+ 22406 152fd 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 22406      00000000 
+ 22407 15305 F30F7F85 		movdqu	%xmm0, -384(%rbp)
+ 22407      80FEFFFF 
+ 22408 1530d F30F6F85 		movdqu	-496(%rbp), %xmm0
+ 22408      10FEFFFF 
+ 22409 15315 F30F7F85 		movdqu	%xmm0, -400(%rbp)
+ 22409      70FEFFFF 
+ 22410              	.LBB2630:
+ 22411              	.LBB2631:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 22412              		.loc 2 380 0
+ 22413 1531d F30F6F85 		movdqu	-384(%rbp), %xmm0
+ 22413      80FEFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 681
+
+
+ 22414 15325 F30F7F85 		movdqu	%xmm0, -1840(%rbp)
+ 22414      D0F8FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 22415              		.loc 2 381 0
+ 22416 1532d F30F6F85 		movdqu	-400(%rbp), %xmm0
+ 22416      70FEFFFF 
+ 22417 15335 F30F7F85 		movdqu	%xmm0, -1856(%rbp)
+ 22417      C0F8FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 22418              		.loc 2 383 0
+ 22419 1533d C7859CFE 		movl	$0, -356(%rbp)
+ 22419      FFFF0000 
+ 22419      0000
+ 22420 15347 EB5C     		jmp	.L567
+ 22421              	.L570:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 22422              		.loc 2 385 0
+ 22423 15349 8B859CFE 		movl	-356(%rbp), %eax
+ 22423      FFFF
+ 22424 1534f 89C0     		mov	%eax, %eax
+ 22425 15351 0FB68405 		movzbl	-1856(%rbp,%rax), %eax
+ 22425      C0F8FFFF 
+ 22426 15359 84C0     		testb	%al, %al
+ 22427 1535b 7912     		jns	.L568
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 22428              		.loc 2 386 0
+ 22429 1535d 8B859CFE 		movl	-356(%rbp), %eax
+ 22429      FFFF
+ 22430 15363 89C0     		mov	%eax, %eax
+ 22431 15365 C68405E0 		movb	$0, -1824(%rbp,%rax)
+ 22431      F8FFFF00 
+ 22432 1536d EB2F     		jmp	.L569
+ 22433              	.L568:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 22434              		.loc 2 388 0
+ 22435 1536f 8B8D9CFE 		movl	-356(%rbp), %ecx
+ 22435      FFFF
+ 22436 15375 8B859CFE 		movl	-356(%rbp), %eax
+ 22436      FFFF
+ 22437 1537b 89C0     		mov	%eax, %eax
+ 22438 1537d 0FB68405 		movzbl	-1856(%rbp,%rax), %eax
+ 22438      C0F8FFFF 
+ 22439 15385 0FB6C0   		movzbl	%al, %eax
+ 22440 15388 83E00F   		andl	$15, %eax
+ 22441 1538b 4898     		cltq
+ 22442 1538d 0FB69405 		movzbl	-1840(%rbp,%rax), %edx
+ 22442      D0F8FFFF 
+ 22443 15395 89C8     		mov	%ecx, %eax
+ 22444 15397 889405E0 		movb	%dl, -1824(%rbp,%rax)
+ 22444      F8FFFF
+ 22445              	.L569:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 22446              		.loc 2 383 0
+ 22447 1539e 83859CFE 		addl	$1, -356(%rbp)
+ 22447      FFFF01
+ 22448              	.L567:
+ 22449 153a5 83BD9CFE 		cmpl	$15, -356(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 682
+
+
+ 22449      FFFF0F
+ 22450 153ac 769B     		jbe	.L570
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 22451              		.loc 2 391 0
+ 22452 153ae F30F6F85 		movdqu	-1824(%rbp), %xmm0
+ 22452      E0F8FFFF 
+ 22453              	.LBE2631:
+ 22454              	.LBE2630:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 22455              		.loc 2 868 0
+ 22456 153b6 F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 22456      00FEFFFF 
+ 22457 153be F30F6F85 		movdqu	-480(%rbp), %xmm0
+ 22457      20FEFFFF 
+ 22458 153c6 F30F7F85 		movdqu	%xmm0, -336(%rbp)
+ 22458      B0FEFFFF 
+ 22459 153ce F30F6F85 		movdqu	-512(%rbp), %xmm0
+ 22459      00FEFFFF 
+ 22460 153d6 F30F7F85 		movdqu	%xmm0, -352(%rbp)
+ 22460      A0FEFFFF 
+ 22461              	.LBB2632:
+ 22462              	.LBB2633:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 22463              		.loc 2 234 0
+ 22464 153de F30F6F85 		movdqu	-352(%rbp), %xmm0
+ 22464      A0FEFFFF 
+ 22465 153e6 F30F6F8D 		movdqu	-336(%rbp), %xmm1
+ 22465      B0FEFFFF 
+ 22466 153ee 660FEBC1 		por	%xmm1, %xmm0
+ 22467              	.LBE2633:
+ 22468              	.LBE2632:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 22469              		.loc 2 870 0
+ 22470 153f2 F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 22470      00FEFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 22471              		.loc 2 872 0
+ 22472 153fa 8B85ECFD 		mov	-532(%rbp), %eax
+ 22472      FFFF
+ 22473 15400 48C1E004 		salq	$4, %rax
+ 22474 15404 480385C8 		addq	-568(%rbp), %rax
+ 22474      FDFFFF
+ 22475 1540b 660F6F00 		movdqa	(%rax), %xmm0
+ 22476 1540f F30F7F85 		movdqu	%xmm0, -304(%rbp)
+ 22476      D0FEFFFF 
+ 22477 15417 F30F6F85 		movdqu	-512(%rbp), %xmm0
+ 22477      00FEFFFF 
+ 22478 1541f F30F7F85 		movdqu	%xmm0, -320(%rbp)
+ 22478      C0FEFFFF 
+ 22479              	.LBB2634:
+ 22480              	.LBB2635:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 22481              		.loc 2 380 0
+ 22482 15427 F30F6F85 		movdqu	-304(%rbp), %xmm0
+ 22482      D0FEFFFF 
+ 22483 1542f F30F7F85 		movdqu	%xmm0, -1792(%rbp)
+ 22483      00F9FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 683
+
+
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 22484              		.loc 2 381 0
+ 22485 15437 F30F6F85 		movdqu	-320(%rbp), %xmm0
+ 22485      C0FEFFFF 
+ 22486 1543f F30F7F85 		movdqu	%xmm0, -1808(%rbp)
+ 22486      F0F8FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 22487              		.loc 2 383 0
+ 22488 15447 C785ECFE 		movl	$0, -276(%rbp)
+ 22488      FFFF0000 
+ 22488      0000
+ 22489 15451 EB5C     		jmp	.L571
+ 22490              	.L574:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 22491              		.loc 2 385 0
+ 22492 15453 8B85ECFE 		movl	-276(%rbp), %eax
+ 22492      FFFF
+ 22493 15459 89C0     		mov	%eax, %eax
+ 22494 1545b 0FB68405 		movzbl	-1808(%rbp,%rax), %eax
+ 22494      F0F8FFFF 
+ 22495 15463 84C0     		testb	%al, %al
+ 22496 15465 7912     		jns	.L572
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 22497              		.loc 2 386 0
+ 22498 15467 8B85ECFE 		movl	-276(%rbp), %eax
+ 22498      FFFF
+ 22499 1546d 89C0     		mov	%eax, %eax
+ 22500 1546f C6840510 		movb	$0, -1776(%rbp,%rax)
+ 22500      F9FFFF00 
+ 22501 15477 EB2F     		jmp	.L573
+ 22502              	.L572:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 22503              		.loc 2 388 0
+ 22504 15479 8B8DECFE 		movl	-276(%rbp), %ecx
+ 22504      FFFF
+ 22505 1547f 8B85ECFE 		movl	-276(%rbp), %eax
+ 22505      FFFF
+ 22506 15485 89C0     		mov	%eax, %eax
+ 22507 15487 0FB68405 		movzbl	-1808(%rbp,%rax), %eax
+ 22507      F0F8FFFF 
+ 22508 1548f 0FB6C0   		movzbl	%al, %eax
+ 22509 15492 83E00F   		andl	$15, %eax
+ 22510 15495 4898     		cltq
+ 22511 15497 0FB69405 		movzbl	-1792(%rbp,%rax), %edx
+ 22511      00F9FFFF 
+ 22512 1549f 89C8     		mov	%ecx, %eax
+ 22513 154a1 88940510 		movb	%dl, -1776(%rbp,%rax)
+ 22513      F9FFFF
+ 22514              	.L573:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 22515              		.loc 2 383 0
+ 22516 154a8 8385ECFE 		addl	$1, -276(%rbp)
+ 22516      FFFF01
+ 22517              	.L571:
+ 22518 154af 83BDECFE 		cmpl	$15, -276(%rbp)
+ 22518      FFFF0F
+ 22519 154b6 769B     		jbe	.L574
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 684
+
+
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 22520              		.loc 2 391 0
+ 22521 154b8 F30F6F85 		movdqu	-1776(%rbp), %xmm0
+ 22521      10F9FFFF 
+ 22522              	.LBE2635:
+ 22523              	.LBE2634:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 22524              		.loc 2 872 0
+ 22525 154c0 F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 22525      00FEFFFF 
+ 22526 154c8 F30F6F85 		movdqu	-528(%rbp), %xmm0
+ 22526      F0FDFFFF 
+ 22527 154d0 F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 22527      00FFFFFF 
+ 22528 154d8 F30F6F85 		movdqu	-512(%rbp), %xmm0
+ 22528      00FEFFFF 
+ 22529 154e0 F30F7F85 		movdqu	%xmm0, -272(%rbp)
+ 22529      F0FEFFFF 
+ 22530              	.LBB2636:
+ 22531              	.LBB2637:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 22532              		.loc 2 234 0
+ 22533 154e8 F30F6F85 		movdqu	-272(%rbp), %xmm0
+ 22533      F0FEFFFF 
+ 22534 154f0 F30F6F8D 		movdqu	-256(%rbp), %xmm1
+ 22534      00FFFFFF 
+ 22535 154f8 660FEBC1 		por	%xmm1, %xmm0
+ 22536              	.LBE2637:
+ 22537              	.LBE2636:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 22538              		.loc 2 874 0
+ 22539 154fc F30F7F85 		movdqu	%xmm0, -528(%rbp)
+ 22539      F0FDFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 22540              		.loc 2 876 0
+ 22541 15504 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 22541      00000000 
+ 22542 1550c F30F6F8D 		movdqu	-496(%rbp), %xmm1
+ 22542      10FEFFFF 
+ 22543 15514 F30F7F8D 		movdqu	%xmm1, -224(%rbp)
+ 22543      20FFFFFF 
+ 22544 1551c F30F7F85 		movdqu	%xmm0, -240(%rbp)
+ 22544      10FFFFFF 
+ 22545              	.LBB2638:
+ 22546              	.LBB2639:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 22547              		.loc 2 290 0
+ 22548 15524 F30F6F8D 		movdqu	-240(%rbp), %xmm1
+ 22548      10FFFFFF 
+ 22549 1552c F30F6F85 		movdqu	-224(%rbp), %xmm0
+ 22549      20FFFFFF 
+ 22550 15534 660FF8C1 		psubb	%xmm1, %xmm0
+ 22551              	.LBE2639:
+ 22552              	.LBE2638:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 22553              		.loc 2 876 0
+ 22554 15538 F30F7F85 		movdqu	%xmm0, -496(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 685
+
+
+ 22554      10FEFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 22555              		.loc 2 878 0
+ 22556 15540 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 22556      00000000 
+ 22557 15548 F30F6F8D 		movdqu	-496(%rbp), %xmm1
+ 22557      10FEFFFF 
+ 22558 15550 F30F7F8D 		movdqu	%xmm1, -192(%rbp)
+ 22558      40FFFFFF 
+ 22559 15558 F30F7F85 		movdqu	%xmm0, -208(%rbp)
+ 22559      30FFFFFF 
+ 22560              	.LBB2640:
+ 22561              	.LBB2641:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 22562              		.loc 2 206 0
+ 22563 15560 F30F6F85 		movdqu	-208(%rbp), %xmm0
+ 22563      30FFFFFF 
+ 22564 15568 F30F6F8D 		movdqu	-192(%rbp), %xmm1
+ 22564      40FFFFFF 
+ 22565 15570 660FDBC1 		pand	%xmm1, %xmm0
+ 22566              	.LBE2641:
+ 22567              	.LBE2640:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 22568              		.loc 2 878 0
+ 22569 15574 F30F7F85 		movdqu	%xmm0, -496(%rbp)
+ 22569      10FEFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 22570              		.loc 2 866 0
+ 22571 1557c 8385ECFD 		addl	$1, -532(%rbp)
+ 22571      FFFF01
+ 22572              	.L566:
+ 22573 15583 83BDECFD 		cmpl	$15, -532(%rbp)
+ 22573      FFFF0F
+ 22574 1558a 0F866DFD 		jbe	.L575
+ 22574      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 22575              		.loc 2 882 0
+ 22576 15590 F30F6F85 		movdqu	-528(%rbp), %xmm0
+ 22576      F0FDFFFF 
+ 22577              	.LBE2625:
+ 22578              	.LBE2624:
+ 22579              	.LBE2623:
+ 22580              	.LBE2622:
+2063:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(SubBytes) (state);
+ 22581              		.loc 2 2063 0
+ 22582 15598 F30F7F85 		movdqu	%xmm0, -608(%rbp)
+ 22582      A0FDFFFF 
+ 22583              	.LBB2642:
+2065:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After SubBytes", state);
+ 22584              		.loc 2 2065 0
+ 22585 155a0 F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 22585      A0FDFFFF 
+ 22586 155a8 F30F7F85 		movdqu	%xmm0, -1888(%rbp)
+ 22586      A0F8FFFF 
+ 22587 155b0 E8000000 		call	KDbgWriterGet at PLT
+ 22587      00
+ 22588 155b5 4885C0   		testq	%rax, %rax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 686
+
+
+ 22589 155b8 7479     		je	.L577
+ 22590 155ba BF010000 		movl	$1, %edi
+ 22590      00
+ 22591 155bf E8000000 		call	KDbgCondToFlag at PLT
+ 22591      00
+ 22592 155c4 4889C6   		movq	%rax, %rsi
+ 22593 155c7 BF100000 		movl	$16, %edi
+ 22593      00
+ 22594 155cc E8000000 		call	KDbgTestModConds at PLT
+ 22594      00
+ 22595 155d1 84C0     		testb	%al, %al
+ 22596 155d3 745E     		je	.L577
+ 22597 155d5 8B85ACF8 		movl	-1876(%rbp), %eax
+ 22597      FFFF
+ 22598 155db 89C7     		movl	%eax, %edi
+ 22599 155dd E81EAAFE 		call	bswap_32
+ 22599      FF
+ 22600 155e2 4189C5   		movl	%eax, %r13d
+ 22601 155e5 8B85A8F8 		movl	-1880(%rbp), %eax
+ 22601      FFFF
+ 22602 155eb 89C7     		movl	%eax, %edi
+ 22603 155ed E80EAAFE 		call	bswap_32
+ 22603      FF
+ 22604 155f2 4189C4   		movl	%eax, %r12d
+ 22605 155f5 8B85A4F8 		movl	-1884(%rbp), %eax
+ 22605      FFFF
+ 22606 155fb 89C7     		movl	%eax, %edi
+ 22607 155fd E8FEA9FE 		call	bswap_32
+ 22607      FF
+ 22608 15602 89C3     		movl	%eax, %ebx
+ 22609 15604 8B85A0F8 		movl	-1888(%rbp), %eax
+ 22609      FFFF
+ 22610 1560a 89C7     		movl	%eax, %edi
+ 22611 1560c E8EFA9FE 		call	bswap_32
+ 22611      FF
+ 22612 15611 4589E9   		movl	%r13d, %r9d
+ 22613 15614 4589E0   		movl	%r12d, %r8d
+ 22614 15617 89D9     		movl	%ebx, %ecx
+ 22615 15619 89C2     		movl	%eax, %edx
+ 22616 1561b 488D3500 		leaq	.LC8(%rip), %rsi
+ 22616      000000
+ 22617 15622 488D3D00 		leaq	.LC1(%rip), %rdi
+ 22617      000000
+ 22618 15629 B8000000 		movl	$0, %eax
+ 22618      00
+ 22619 1562e E8000000 		call	KDbgMsg at PLT
+ 22619      00
+ 22620              	.L577:
+ 22621 15633 F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 22621      A0FDFFFF 
+ 22622 1563b F30F7F85 		movdqu	%xmm0, -176(%rbp)
+ 22622      50FFFFFF 
+ 22623              	.LBE2642:
+ 22624              	.LBB2643:
+ 22625              	.LBB2644:
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 22626              		.loc 2 581 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 687
+
+
+ 22627 15643 660F6F05 		movdqa	ShiftRowTable.6741(%rip), %xmm0
+ 22627      00000000 
+ 22628 1564b F30F6F8D 		movdqu	-176(%rbp), %xmm1
+ 22628      50FFFFFF 
+ 22629 15653 F30F7F8D 		movdqu	%xmm1, -144(%rbp)
+ 22629      70FFFFFF 
+ 22630 1565b F30F7F85 		movdqu	%xmm0, -160(%rbp)
+ 22630      60FFFFFF 
+ 22631              	.LBB2645:
+ 22632              	.LBB2646:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 22633              		.loc 2 380 0
+ 22634 15663 F30F6F85 		movdqu	-144(%rbp), %xmm0
+ 22634      70FFFFFF 
+ 22635 1566b F30F7F85 		movdqu	%xmm0, -1744(%rbp)
+ 22635      30F9FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 22636              		.loc 2 381 0
+ 22637 15673 F30F6F85 		movdqu	-160(%rbp), %xmm0
+ 22637      60FFFFFF 
+ 22638 1567b F30F7F85 		movdqu	%xmm0, -1760(%rbp)
+ 22638      20F9FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 22639              		.loc 2 383 0
+ 22640 15683 C7458C00 		movl	$0, -116(%rbp)
+ 22640      000000
+ 22641 1568a EB4D     		jmp	.L578
+ 22642              	.L581:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 22643              		.loc 2 385 0
+ 22644 1568c 8B458C   		movl	-116(%rbp), %eax
+ 22645 1568f 89C0     		mov	%eax, %eax
+ 22646 15691 0FB68405 		movzbl	-1760(%rbp,%rax), %eax
+ 22646      20F9FFFF 
+ 22647 15699 84C0     		testb	%al, %al
+ 22648 1569b 790F     		jns	.L579
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 22649              		.loc 2 386 0
+ 22650 1569d 8B458C   		movl	-116(%rbp), %eax
+ 22651 156a0 89C0     		mov	%eax, %eax
+ 22652 156a2 C6840540 		movb	$0, -1728(%rbp,%rax)
+ 22652      F9FFFF00 
+ 22653 156aa EB29     		jmp	.L580
+ 22654              	.L579:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 22655              		.loc 2 388 0
+ 22656 156ac 8B4D8C   		movl	-116(%rbp), %ecx
+ 22657 156af 8B458C   		movl	-116(%rbp), %eax
+ 22658 156b2 89C0     		mov	%eax, %eax
+ 22659 156b4 0FB68405 		movzbl	-1760(%rbp,%rax), %eax
+ 22659      20F9FFFF 
+ 22660 156bc 0FB6C0   		movzbl	%al, %eax
+ 22661 156bf 83E00F   		andl	$15, %eax
+ 22662 156c2 4898     		cltq
+ 22663 156c4 0FB69405 		movzbl	-1744(%rbp,%rax), %edx
+ 22663      30F9FFFF 
+ 22664 156cc 89C8     		mov	%ecx, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 688
+
+
+ 22665 156ce 88940540 		movb	%dl, -1728(%rbp,%rax)
+ 22665      F9FFFF
+ 22666              	.L580:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 22667              		.loc 2 383 0
+ 22668 156d5 83458C01 		addl	$1, -116(%rbp)
+ 22669              	.L578:
+ 22670 156d9 837D8C0F 		cmpl	$15, -116(%rbp)
+ 22671 156dd 76AD     		jbe	.L581
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 22672              		.loc 2 391 0
+ 22673 156df F30F6F85 		movdqu	-1728(%rbp), %xmm0
+ 22673      40F9FFFF 
+ 22674              	.LBE2646:
+ 22675              	.LBE2645:
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 22676              		.loc 2 581 0
+ 22677 156e7 F30F7F85 		movdqu	%xmm0, -176(%rbp)
+ 22677      50FFFFFF 
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 22678              		.loc 2 582 0
+ 22679 156ef F30F6F85 		movdqu	-176(%rbp), %xmm0
+ 22679      50FFFFFF 
+ 22680              	.LBE2644:
+ 22681              	.LBE2643:
+2067:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(ShiftRows) (state);
+ 22682              		.loc 2 2067 0
+ 22683 156f7 F30F7F85 		movdqu	%xmm0, -608(%rbp)
+ 22683      A0FDFFFF 
+ 22684              	.LBB2647:
+2069:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+ 22685              		.loc 2 2069 0
+ 22686 156ff F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 22686      A0FDFFFF 
+ 22687 15707 F30F7F85 		movdqu	%xmm0, -1904(%rbp)
+ 22687      90F8FFFF 
+ 22688 1570f E8000000 		call	KDbgWriterGet at PLT
+ 22688      00
+ 22689 15714 4885C0   		testq	%rax, %rax
+ 22690 15717 7479     		je	.L583
+ 22691 15719 BF010000 		movl	$1, %edi
+ 22691      00
+ 22692 1571e E8000000 		call	KDbgCondToFlag at PLT
+ 22692      00
+ 22693 15723 4889C6   		movq	%rax, %rsi
+ 22694 15726 BF100000 		movl	$16, %edi
+ 22694      00
+ 22695 1572b E8000000 		call	KDbgTestModConds at PLT
+ 22695      00
+ 22696 15730 84C0     		testb	%al, %al
+ 22697 15732 745E     		je	.L583
+ 22698 15734 8B859CF8 		movl	-1892(%rbp), %eax
+ 22698      FFFF
+ 22699 1573a 89C7     		movl	%eax, %edi
+ 22700 1573c E8BFA8FE 		call	bswap_32
+ 22700      FF
+ 22701 15741 4189C5   		movl	%eax, %r13d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 689
+
+
+ 22702 15744 8B8598F8 		movl	-1896(%rbp), %eax
+ 22702      FFFF
+ 22703 1574a 89C7     		movl	%eax, %edi
+ 22704 1574c E8AFA8FE 		call	bswap_32
+ 22704      FF
+ 22705 15751 4189C4   		movl	%eax, %r12d
+ 22706 15754 8B8594F8 		movl	-1900(%rbp), %eax
+ 22706      FFFF
+ 22707 1575a 89C7     		movl	%eax, %edi
+ 22708 1575c E89FA8FE 		call	bswap_32
+ 22708      FF
+ 22709 15761 89C3     		movl	%eax, %ebx
+ 22710 15763 8B8590F8 		movl	-1904(%rbp), %eax
+ 22710      FFFF
+ 22711 15769 89C7     		movl	%eax, %edi
+ 22712 1576b E890A8FE 		call	bswap_32
+ 22712      FF
+ 22713 15770 4589E9   		movl	%r13d, %r9d
+ 22714 15773 4589E0   		movl	%r12d, %r8d
+ 22715 15776 89D9     		movl	%ebx, %ecx
+ 22716 15778 89C2     		movl	%eax, %edx
+ 22717 1577a 488D3500 		leaq	.LC9(%rip), %rsi
+ 22717      000000
+ 22718 15781 488D3D00 		leaq	.LC1(%rip), %rdi
+ 22718      000000
+ 22719 15788 B8000000 		movl	$0, %eax
+ 22719      00
+ 22720 1578d E8000000 		call	KDbgMsg at PLT
+ 22720      00
+ 22721              	.L583:
+ 22722 15792 F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 22722      A0FDFFFF 
+ 22723 1579a F30F7F45 		movdqu	%xmm0, -96(%rbp)
+ 22723      A0
+ 22724 1579f F30F6F85 		movdqu	-624(%rbp), %xmm0
+ 22724      90FDFFFF 
+ 22725 157a7 F30F7F45 		movdqu	%xmm0, -112(%rbp)
+ 22725      90
+ 22726 157ac F30F6F45 		movdqu	-96(%rbp), %xmm0
+ 22726      A0
+ 22727 157b1 F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 22727      C0
+ 22728 157b6 F30F6F45 		movdqu	-112(%rbp), %xmm0
+ 22728      90
+ 22729 157bb F30F7F45 		movdqu	%xmm0, -80(%rbp)
+ 22729      B0
+ 22730              	.LBE2647:
+ 22731              	.LBB2648:
+ 22732              	.LBB2649:
+ 22733              	.LBB2650:
+ 22734              	.LBB2651:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 22735              		.loc 2 178 0
+ 22736 157c0 F30F6F45 		movdqu	-80(%rbp), %xmm0
+ 22736      B0
+ 22737 157c5 F30F6F4D 		movdqu	-64(%rbp), %xmm1
+ 22737      C0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 690
+
+
+ 22738 157ca 660FEFC1 		pxor	%xmm1, %xmm0
+ 22739              	.LBE2651:
+ 22740              	.LBE2650:
+ 22741              	.LBE2649:
+ 22742              	.LBE2648:
+2071:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 22743              		.loc 2 2071 0
+ 22744 157ce F30F7F85 		movdqu	%xmm0, -608(%rbp)
+ 22744      A0FDFFFF 
+ 22745              	.LBB2652:
+2073:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+ 22746              		.loc 2 2073 0
+ 22747 157d6 F30F6F85 		movdqu	-624(%rbp), %xmm0
+ 22747      90FDFFFF 
+ 22748 157de F30F7F85 		movdqu	%xmm0, -1920(%rbp)
+ 22748      80F8FFFF 
+ 22749 157e6 E8000000 		call	KDbgWriterGet at PLT
+ 22749      00
+ 22750 157eb 4885C0   		testq	%rax, %rax
+ 22751 157ee 7479     		je	.L585
+ 22752 157f0 BF010000 		movl	$1, %edi
+ 22752      00
+ 22753 157f5 E8000000 		call	KDbgCondToFlag at PLT
+ 22753      00
+ 22754 157fa 4889C6   		movq	%rax, %rsi
+ 22755 157fd BF100000 		movl	$16, %edi
+ 22755      00
+ 22756 15802 E8000000 		call	KDbgTestModConds at PLT
+ 22756      00
+ 22757 15807 84C0     		testb	%al, %al
+ 22758 15809 745E     		je	.L585
+ 22759 1580b 8B858CF8 		movl	-1908(%rbp), %eax
+ 22759      FFFF
+ 22760 15811 89C7     		movl	%eax, %edi
+ 22761 15813 E8E8A7FE 		call	bswap_32
+ 22761      FF
+ 22762 15818 4189C5   		movl	%eax, %r13d
+ 22763 1581b 8B8588F8 		movl	-1912(%rbp), %eax
+ 22763      FFFF
+ 22764 15821 89C7     		movl	%eax, %edi
+ 22765 15823 E8D8A7FE 		call	bswap_32
+ 22765      FF
+ 22766 15828 4189C4   		movl	%eax, %r12d
+ 22767 1582b 8B8584F8 		movl	-1916(%rbp), %eax
+ 22767      FFFF
+ 22768 15831 89C7     		movl	%eax, %edi
+ 22769 15833 E8C8A7FE 		call	bswap_32
+ 22769      FF
+ 22770 15838 89C3     		movl	%eax, %ebx
+ 22771 1583a 8B8580F8 		movl	-1920(%rbp), %eax
+ 22771      FFFF
+ 22772 15840 89C7     		movl	%eax, %edi
+ 22773 15842 E8B9A7FE 		call	bswap_32
+ 22773      FF
+ 22774 15847 4589E9   		movl	%r13d, %r9d
+ 22775 1584a 4589E0   		movl	%r12d, %r8d
+ 22776 1584d 89D9     		movl	%ebx, %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 691
+
+
+ 22777 1584f 89C2     		movl	%eax, %edx
+ 22778 15851 488D3500 		leaq	.LC6(%rip), %rsi
+ 22778      000000
+ 22779 15858 488D3D00 		leaq	.LC1(%rip), %rdi
+ 22779      000000
+ 22780 1585f B8000000 		movl	$0, %eax
+ 22780      00
+ 22781 15864 E8000000 		call	KDbgMsg at PLT
+ 22781      00
+ 22782              	.L585:
+ 22783              	.LBE2652:
+ 22784              	.LBB2653:
+2074:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("End of Round", state);
+ 22785              		.loc 2 2074 0
+ 22786 15869 F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 22786      A0FDFFFF 
+ 22787 15871 F30F7F85 		movdqu	%xmm0, -1936(%rbp)
+ 22787      70F8FFFF 
+ 22788 15879 E8000000 		call	KDbgWriterGet at PLT
+ 22788      00
+ 22789 1587e 4885C0   		testq	%rax, %rax
+ 22790 15881 7479     		je	.L587
+ 22791 15883 BF010000 		movl	$1, %edi
+ 22791      00
+ 22792 15888 E8000000 		call	KDbgCondToFlag at PLT
+ 22792      00
+ 22793 1588d 4889C6   		movq	%rax, %rsi
+ 22794 15890 BF100000 		movl	$16, %edi
+ 22794      00
+ 22795 15895 E8000000 		call	KDbgTestModConds at PLT
+ 22795      00
+ 22796 1589a 84C0     		testb	%al, %al
+ 22797 1589c 745E     		je	.L587
+ 22798 1589e 8B857CF8 		movl	-1924(%rbp), %eax
+ 22798      FFFF
+ 22799 158a4 89C7     		movl	%eax, %edi
+ 22800 158a6 E855A7FE 		call	bswap_32
+ 22800      FF
+ 22801 158ab 4189C5   		movl	%eax, %r13d
+ 22802 158ae 8B8578F8 		movl	-1928(%rbp), %eax
+ 22802      FFFF
+ 22803 158b4 89C7     		movl	%eax, %edi
+ 22804 158b6 E845A7FE 		call	bswap_32
+ 22804      FF
+ 22805 158bb 4189C4   		movl	%eax, %r12d
+ 22806 158be 8B8574F8 		movl	-1932(%rbp), %eax
+ 22806      FFFF
+ 22807 158c4 89C7     		movl	%eax, %edi
+ 22808 158c6 E835A7FE 		call	bswap_32
+ 22808      FF
+ 22809 158cb 89C3     		movl	%eax, %ebx
+ 22810 158cd 8B8570F8 		movl	-1936(%rbp), %eax
+ 22810      FFFF
+ 22811 158d3 89C7     		movl	%eax, %edi
+ 22812 158d5 E826A7FE 		call	bswap_32
+ 22812      FF
+ 22813 158da 4589E9   		movl	%r13d, %r9d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 692
+
+
+ 22814 158dd 4589E0   		movl	%r12d, %r8d
+ 22815 158e0 89D9     		movl	%ebx, %ecx
+ 22816 158e2 89C2     		movl	%eax, %edx
+ 22817 158e4 488D3500 		leaq	.LC11(%rip), %rsi
+ 22817      000000
+ 22818 158eb 488D3D00 		leaq	.LC1(%rip), %rdi
+ 22818      000000
+ 22819 158f2 B8000000 		movl	$0, %eax
+ 22819      00
+ 22820 158f7 E8000000 		call	KDbgMsg at PLT
+ 22820      00
+ 22821              	.L587:
+ 22822              	.LBE2653:
+2076:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 22823              		.loc 2 2076 0
+ 22824 158fc F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 22824      A0FDFFFF 
+ 22825              	.LBE2620:
+ 22826              	.LBE2619:
+2103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 22827              		.loc 2 2103 0
+ 22828 15904 4881C4C8 		addq	$2504, %rsp
+ 22828      090000
+ 22829 1590b 5B       		popq	%rbx
+ 22830 1590c 415C     		popq	%r12
+ 22831 1590e 415D     		popq	%r13
+ 22832 15910 415E     		popq	%r14
+ 22833 15912 415F     		popq	%r15
+ 22834 15914 C9       		leave
+ 22835 15915 C3       		ret
+ 22836              		.cfi_endproc
+ 22837              	.LFE573:
+ 22838              		.size	KAESBlockCipherVecCipher, .-KAESBlockCipherVecCipher
+ 22839              		.section	.rodata
+ 22840              	.LC12:
+ 22841 0433 41667465 		.string	"After InvSubBy"
+ 22841      7220496E 
+ 22841      76537562 
+ 22841      427900
+ 22842              	.LC13:
+ 22843 0442 41667465 		.string	"After InvShift"
+ 22843      7220496E 
+ 22843      76536869 
+ 22843      667400
+ 22844              	.LC14:
+ 22845 0451 41667465 		.string	"After InvMixCo"
+ 22845      7220496E 
+ 22845      764D6978 
+ 22845      436F00
+ 22846              		.text
+ 22847              		.type	KAESBlockCipherVecEqInvCipher, @function
+ 22848              	KAESBlockCipherVecEqInvCipher:
+ 22849              	.LFB577:
+2271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 22850              		.loc 2 2271 0
+ 22851              		.cfi_startproc
+ 22852 15916 55       		pushq	%rbp
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 693
+
+
+ 22853              	.LCFI18:
+ 22854              		.cfi_def_cfa_offset 16
+ 22855 15917 4889E5   		movq	%rsp, %rbp
+ 22856              		.cfi_offset 6, -16
+ 22857              	.LCFI19:
+ 22858              		.cfi_def_cfa_register 6
+ 22859 1591a 4157     		pushq	%r15
+ 22860 1591c 4156     		pushq	%r14
+ 22861 1591e 4155     		pushq	%r13
+ 22862 15920 4154     		pushq	%r12
+ 22863 15922 53       		pushq	%rbx
+ 22864 15923 4881EC88 		subq	$2696, %rsp
+ 22864      0A0000
+ 22865 1592a 660F7F85 		movdqa	%xmm0, -2560(%rbp)
+ 22865      00F6FFFF 
+ 22866 15932 4889BDF8 		movq	%rdi, -2568(%rbp)
+ 22866      F5FFFF
+ 22867 15939 89B5F4F5 		movl	%esi, -2572(%rbp)
+ 22867      FFFF
+2272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix = 0;
+ 22868              		.loc 2 2272 0
+ 22869 1593f C785DCF8 		movl	$0, -1828(%rbp)
+ 22869      FFFF0000 
+ 22869      0000
+2274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(EqInvFirstRound) (state, key[ix++]);
+ 22870              		.loc 2 2274 0
+ 22871 15949 8B85DCF8 		mov	-1828(%rbp), %eax
+ 22871      FFFF
+ 22872 1594f 48C1E004 		salq	$4, %rax
+ 22873 15953 480385F8 		addq	-2568(%rbp), %rax
+ 22873      F5FFFF
+ 22874 1595a 660F6F00 		movdqa	(%rax), %xmm0
+ 22875 1595e 8385DCF8 		addl	$1, -1828(%rbp)
+ 22875      FFFF01
+ 22876 15965 660F6F8D 		movdqa	-2560(%rbp), %xmm1
+ 22876      00F6FFFF 
+ 22877 1596d F30F7F8D 		movdqu	%xmm1, -1808(%rbp)
+ 22877      F0F8FFFF 
+ 22878 15975 F30F7F85 		movdqu	%xmm0, -1824(%rbp)
+ 22878      E0F8FFFF 
+ 22879              	.LBB2777:
+ 22880              	.LBB2778:
+ 22881              	.LBB2779:
+2133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+ 22882              		.loc 2 2133 0
+ 22883 1597d F30F6F85 		movdqu	-1808(%rbp), %xmm0
+ 22883      F0F8FFFF 
+ 22884 15985 F30F7F85 		movdqu	%xmm0, -2512(%rbp)
+ 22884      30F6FFFF 
+ 22885              		.cfi_offset 3, -56
+ 22886              		.cfi_offset 12, -48
+ 22887              		.cfi_offset 13, -40
+ 22888              		.cfi_offset 14, -32
+ 22889              		.cfi_offset 15, -24
+ 22890 1598d E8000000 		call	KDbgWriterGet at PLT
+ 22890      00
+ 22891 15992 4885C0   		testq	%rax, %rax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 694
+
+
+ 22892 15995 7479     		je	.L591
+ 22893 15997 BF030000 		movl	$3, %edi
+ 22893      00
+ 22894 1599c E8000000 		call	KDbgCondToFlag at PLT
+ 22894      00
+ 22895 159a1 4889C6   		movq	%rax, %rsi
+ 22896 159a4 BF100000 		movl	$16, %edi
+ 22896      00
+ 22897 159a9 E8000000 		call	KDbgTestModConds at PLT
+ 22897      00
+ 22898 159ae 84C0     		testb	%al, %al
+ 22899 159b0 745E     		je	.L591
+ 22900 159b2 8B853CF6 		movl	-2500(%rbp), %eax
+ 22900      FFFF
+ 22901 159b8 89C7     		movl	%eax, %edi
+ 22902 159ba E841A6FE 		call	bswap_32
+ 22902      FF
+ 22903 159bf 4189C5   		movl	%eax, %r13d
+ 22904 159c2 8B8538F6 		movl	-2504(%rbp), %eax
+ 22904      FFFF
+ 22905 159c8 89C7     		movl	%eax, %edi
+ 22906 159ca E831A6FE 		call	bswap_32
+ 22906      FF
+ 22907 159cf 4189C4   		movl	%eax, %r12d
+ 22908 159d2 8B8534F6 		movl	-2508(%rbp), %eax
+ 22908      FFFF
+ 22909 159d8 89C7     		movl	%eax, %edi
+ 22910 159da E821A6FE 		call	bswap_32
+ 22910      FF
+ 22911 159df 89C3     		movl	%eax, %ebx
+ 22912 159e1 8B8530F6 		movl	-2512(%rbp), %eax
+ 22912      FFFF
+ 22913 159e7 89C7     		movl	%eax, %edi
+ 22914 159e9 E812A6FE 		call	bswap_32
+ 22914      FF
+ 22915 159ee 4589E9   		movl	%r13d, %r9d
+ 22916 159f1 4589E0   		movl	%r12d, %r8d
+ 22917 159f4 89D9     		movl	%ebx, %ecx
+ 22918 159f6 89C2     		movl	%eax, %edx
+ 22919 159f8 488D3500 		leaq	.LC5(%rip), %rsi
+ 22919      000000
+ 22920 159ff 488D3D00 		leaq	.LC1(%rip), %rdi
+ 22920      000000
+ 22921 15a06 B8000000 		movl	$0, %eax
+ 22921      00
+ 22922 15a0b E8000000 		call	KDbgMsg at PLT
+ 22922      00
+ 22923              	.L591:
+ 22924 15a10 F30F6F85 		movdqu	-1808(%rbp), %xmm0
+ 22924      F0F8FFFF 
+ 22925 15a18 F30F7F85 		movdqu	%xmm0, -1776(%rbp)
+ 22925      10F9FFFF 
+ 22926 15a20 F30F6F85 		movdqu	-1824(%rbp), %xmm0
+ 22926      E0F8FFFF 
+ 22927 15a28 F30F7F85 		movdqu	%xmm0, -1792(%rbp)
+ 22927      00F9FFFF 
+ 22928 15a30 F30F6F85 		movdqu	-1776(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 695
+
+
+ 22928      10F9FFFF 
+ 22929 15a38 F30F7F85 		movdqu	%xmm0, -1744(%rbp)
+ 22929      30F9FFFF 
+ 22930 15a40 F30F6F85 		movdqu	-1792(%rbp), %xmm0
+ 22930      00F9FFFF 
+ 22931 15a48 F30F7F85 		movdqu	%xmm0, -1760(%rbp)
+ 22931      20F9FFFF 
+ 22932              	.LBE2779:
+ 22933              	.LBB2780:
+ 22934              	.LBB2781:
+ 22935              	.LBB2782:
+ 22936              	.LBB2783:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 22937              		.loc 2 178 0
+ 22938 15a50 F30F6F85 		movdqu	-1760(%rbp), %xmm0
+ 22938      20F9FFFF 
+ 22939 15a58 F30F6F8D 		movdqu	-1744(%rbp), %xmm1
+ 22939      30F9FFFF 
+ 22940 15a60 660FEFC1 		pxor	%xmm1, %xmm0
+ 22941              	.LBE2783:
+ 22942              	.LBE2782:
+ 22943              	.LBE2781:
+ 22944              	.LBE2780:
+2135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state =  AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 22945              		.loc 2 2135 0
+ 22946 15a64 F30F7F85 		movdqu	%xmm0, -1808(%rbp)
+ 22946      F0F8FFFF 
+ 22947              	.LBB2784:
+2137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+ 22948              		.loc 2 2137 0
+ 22949 15a6c F30F6F85 		movdqu	-1824(%rbp), %xmm0
+ 22949      E0F8FFFF 
+ 22950 15a74 F30F7F85 		movdqu	%xmm0, -2528(%rbp)
+ 22950      20F6FFFF 
+ 22951 15a7c E8000000 		call	KDbgWriterGet at PLT
+ 22951      00
+ 22952 15a81 4885C0   		testq	%rax, %rax
+ 22953 15a84 7479     		je	.L593
+ 22954 15a86 BF030000 		movl	$3, %edi
+ 22954      00
+ 22955 15a8b E8000000 		call	KDbgCondToFlag at PLT
+ 22955      00
+ 22956 15a90 4889C6   		movq	%rax, %rsi
+ 22957 15a93 BF100000 		movl	$16, %edi
+ 22957      00
+ 22958 15a98 E8000000 		call	KDbgTestModConds at PLT
+ 22958      00
+ 22959 15a9d 84C0     		testb	%al, %al
+ 22960 15a9f 745E     		je	.L593
+ 22961 15aa1 8B852CF6 		movl	-2516(%rbp), %eax
+ 22961      FFFF
+ 22962 15aa7 89C7     		movl	%eax, %edi
+ 22963 15aa9 E852A5FE 		call	bswap_32
+ 22963      FF
+ 22964 15aae 4189C5   		movl	%eax, %r13d
+ 22965 15ab1 8B8528F6 		movl	-2520(%rbp), %eax
+ 22965      FFFF
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 696
+
+
+ 22966 15ab7 89C7     		movl	%eax, %edi
+ 22967 15ab9 E842A5FE 		call	bswap_32
+ 22967      FF
+ 22968 15abe 4189C4   		movl	%eax, %r12d
+ 22969 15ac1 8B8524F6 		movl	-2524(%rbp), %eax
+ 22969      FFFF
+ 22970 15ac7 89C7     		movl	%eax, %edi
+ 22971 15ac9 E832A5FE 		call	bswap_32
+ 22971      FF
+ 22972 15ace 89C3     		movl	%eax, %ebx
+ 22973 15ad0 8B8520F6 		movl	-2528(%rbp), %eax
+ 22973      FFFF
+ 22974 15ad6 89C7     		movl	%eax, %edi
+ 22975 15ad8 E823A5FE 		call	bswap_32
+ 22975      FF
+ 22976 15add 4589E9   		movl	%r13d, %r9d
+ 22977 15ae0 4589E0   		movl	%r12d, %r8d
+ 22978 15ae3 89D9     		movl	%ebx, %ecx
+ 22979 15ae5 89C2     		movl	%eax, %edx
+ 22980 15ae7 488D3500 		leaq	.LC6(%rip), %rsi
+ 22980      000000
+ 22981 15aee 488D3D00 		leaq	.LC1(%rip), %rdi
+ 22981      000000
+ 22982 15af5 B8000000 		movl	$0, %eax
+ 22982      00
+ 22983 15afa E8000000 		call	KDbgMsg at PLT
+ 22983      00
+ 22984              	.L593:
+ 22985              	.LBE2784:
+ 22986              	.LBB2785:
+2138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("End of Round", state);
+ 22987              		.loc 2 2138 0
+ 22988 15aff F30F6F85 		movdqu	-1808(%rbp), %xmm0
+ 22988      F0F8FFFF 
+ 22989 15b07 F30F7F85 		movdqu	%xmm0, -2544(%rbp)
+ 22989      10F6FFFF 
+ 22990 15b0f E8000000 		call	KDbgWriterGet at PLT
+ 22990      00
+ 22991 15b14 4885C0   		testq	%rax, %rax
+ 22992 15b17 7479     		je	.L595
+ 22993 15b19 BF030000 		movl	$3, %edi
+ 22993      00
+ 22994 15b1e E8000000 		call	KDbgCondToFlag at PLT
+ 22994      00
+ 22995 15b23 4889C6   		movq	%rax, %rsi
+ 22996 15b26 BF100000 		movl	$16, %edi
+ 22996      00
+ 22997 15b2b E8000000 		call	KDbgTestModConds at PLT
+ 22997      00
+ 22998 15b30 84C0     		testb	%al, %al
+ 22999 15b32 745E     		je	.L595
+ 23000 15b34 8B851CF6 		movl	-2532(%rbp), %eax
+ 23000      FFFF
+ 23001 15b3a 89C7     		movl	%eax, %edi
+ 23002 15b3c E8BFA4FE 		call	bswap_32
+ 23002      FF
+ 23003 15b41 4189C5   		movl	%eax, %r13d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 697
+
+
+ 23004 15b44 8B8518F6 		movl	-2536(%rbp), %eax
+ 23004      FFFF
+ 23005 15b4a 89C7     		movl	%eax, %edi
+ 23006 15b4c E8AFA4FE 		call	bswap_32
+ 23006      FF
+ 23007 15b51 4189C4   		movl	%eax, %r12d
+ 23008 15b54 8B8514F6 		movl	-2540(%rbp), %eax
+ 23008      FFFF
+ 23009 15b5a 89C7     		movl	%eax, %edi
+ 23010 15b5c E89FA4FE 		call	bswap_32
+ 23010      FF
+ 23011 15b61 89C3     		movl	%eax, %ebx
+ 23012 15b63 8B8510F6 		movl	-2544(%rbp), %eax
+ 23012      FFFF
+ 23013 15b69 89C7     		movl	%eax, %edi
+ 23014 15b6b E890A4FE 		call	bswap_32
+ 23014      FF
+ 23015 15b70 4589E9   		movl	%r13d, %r9d
+ 23016 15b73 4589E0   		movl	%r12d, %r8d
+ 23017 15b76 89D9     		movl	%ebx, %ecx
+ 23018 15b78 89C2     		movl	%eax, %edx
+ 23019 15b7a 488D3500 		leaq	.LC11(%rip), %rsi
+ 23019      000000
+ 23020 15b81 488D3D00 		leaq	.LC1(%rip), %rdi
+ 23020      000000
+ 23021 15b88 B8000000 		movl	$0, %eax
+ 23021      00
+ 23022 15b8d E8000000 		call	KDbgMsg at PLT
+ 23022      00
+ 23023              	.L595:
+ 23024              	.LBE2785:
+2139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 23025              		.loc 2 2139 0
+ 23026 15b92 F30F6F85 		movdqu	-1808(%rbp), %xmm0
+ 23026      F0F8FFFF 
+ 23027              	.LBE2778:
+ 23028              	.LBE2777:
+2274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(EqInvFirstRound) (state, key[ix++]);
+ 23029              		.loc 2 2274 0
+ 23030 15b9a 660F7F85 		movdqa	%xmm0, -2560(%rbp)
+ 23030      00F6FFFF 
+2276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for ( ; ix < Nr; ++ix)
+ 23031              		.loc 2 2276 0
+ 23032 15ba2 E9F61100 		jmp	.L596
+ 23032      00
+ 23033              	.L637:
+2277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(EqInvMiddleRound) (state, key[ix] );
+ 23034              		.loc 2 2277 0
+ 23035 15ba7 8B85DCF8 		mov	-1828(%rbp), %eax
+ 23035      FFFF
+ 23036 15bad 48C1E004 		salq	$4, %rax
+ 23037 15bb1 480385F8 		addq	-2568(%rbp), %rax
+ 23037      F5FFFF
+ 23038 15bb8 660F6F00 		movdqa	(%rax), %xmm0
+ 23039 15bbc 660F6F8D 		movdqa	-2560(%rbp), %xmm1
+ 23039      00F6FFFF 
+ 23040 15bc4 F30F7F8D 		movdqu	%xmm1, -1712(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 698
+
+
+ 23040      50F9FFFF 
+ 23041 15bcc F30F7F85 		movdqu	%xmm0, -1728(%rbp)
+ 23041      40F9FFFF 
+ 23042              	.LBB2786:
+ 23043              	.LBB2787:
+2167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+ 23044              		.loc 2 2167 0
+ 23045 15bd4 F30F6F85 		movdqu	-1712(%rbp), %xmm0
+ 23045      50F9FFFF 
+ 23046 15bdc F30F7F85 		movdqu	%xmm0, -1680(%rbp)
+ 23046      70F9FFFF 
+2168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mround_keys = round_keys;
+ 23047              		.loc 2 2168 0
+ 23048 15be4 F30F6F85 		movdqu	-1728(%rbp), %xmm0
+ 23048      40F9FFFF 
+ 23049 15bec F30F7F85 		movdqu	%xmm0, -1696(%rbp)
+ 23049      60F9FFFF 
+ 23050              	.LBB2788:
+2171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Start of Round", mstate);
+ 23051              		.loc 2 2171 0
+ 23052 15bf4 F30F6F85 		movdqu	-1680(%rbp), %xmm0
+ 23052      70F9FFFF 
+ 23053 15bfc F30F7F85 		movdqu	%xmm0, -2416(%rbp)
+ 23053      90F6FFFF 
+ 23054 15c04 E8000000 		call	KDbgWriterGet at PLT
+ 23054      00
+ 23055 15c09 4885C0   		testq	%rax, %rax
+ 23056 15c0c 7479     		je	.L598
+ 23057 15c0e BF030000 		movl	$3, %edi
+ 23057      00
+ 23058 15c13 E8000000 		call	KDbgCondToFlag at PLT
+ 23058      00
+ 23059 15c18 4889C6   		movq	%rax, %rsi
+ 23060 15c1b BF100000 		movl	$16, %edi
+ 23060      00
+ 23061 15c20 E8000000 		call	KDbgTestModConds at PLT
+ 23061      00
+ 23062 15c25 84C0     		testb	%al, %al
+ 23063 15c27 745E     		je	.L598
+ 23064 15c29 8B859CF6 		movl	-2404(%rbp), %eax
+ 23064      FFFF
+ 23065 15c2f 89C7     		movl	%eax, %edi
+ 23066 15c31 E8CAA3FE 		call	bswap_32
+ 23066      FF
+ 23067 15c36 4189C5   		movl	%eax, %r13d
+ 23068 15c39 8B8598F6 		movl	-2408(%rbp), %eax
+ 23068      FFFF
+ 23069 15c3f 89C7     		movl	%eax, %edi
+ 23070 15c41 E8BAA3FE 		call	bswap_32
+ 23070      FF
+ 23071 15c46 4189C4   		movl	%eax, %r12d
+ 23072 15c49 8B8594F6 		movl	-2412(%rbp), %eax
+ 23072      FFFF
+ 23073 15c4f 89C7     		movl	%eax, %edi
+ 23074 15c51 E8AAA3FE 		call	bswap_32
+ 23074      FF
+ 23075 15c56 89C3     		movl	%eax, %ebx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 699
+
+
+ 23076 15c58 8B8590F6 		movl	-2416(%rbp), %eax
+ 23076      FFFF
+ 23077 15c5e 89C7     		movl	%eax, %edi
+ 23078 15c60 E89BA3FE 		call	bswap_32
+ 23078      FF
+ 23079 15c65 4589E9   		movl	%r13d, %r9d
+ 23080 15c68 4589E0   		movl	%r12d, %r8d
+ 23081 15c6b 89D9     		movl	%ebx, %ecx
+ 23082 15c6d 89C2     		movl	%eax, %edx
+ 23083 15c6f 488D3500 		leaq	.LC5(%rip), %rsi
+ 23083      000000
+ 23084 15c76 488D3D00 		leaq	.LC1(%rip), %rdi
+ 23084      000000
+ 23085 15c7d B8000000 		movl	$0, %eax
+ 23085      00
+ 23086 15c82 E8000000 		call	KDbgMsg at PLT
+ 23086      00
+ 23087              	.L598:
+ 23088 15c87 F30F6F85 		movdqu	-1712(%rbp), %xmm0
+ 23088      50F9FFFF 
+ 23089 15c8f F30F7F85 		movdqu	%xmm0, -1664(%rbp)
+ 23089      80F9FFFF 
+ 23090 15c97 F30F6F85 		movdqu	-1664(%rbp), %xmm0
+ 23090      80F9FFFF 
+ 23091 15c9f F30F7F85 		movdqu	%xmm0, -1632(%rbp)
+ 23091      A0F9FFFF 
+ 23092 15ca7 488D0500 		leaq	KAESBlockCipherVecRijndaelInvSBoxV(%rip), %rax
+ 23092      000000
+ 23093 15cae 48898598 		movq	%rax, -1640(%rbp)
+ 23093      F9FFFF
+ 23094              	.LBE2788:
+ 23095              	.LBB2789:
+ 23096              	.LBB2790:
+ 23097              	.LBB2791:
+ 23098              	.LBB2792:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 23099              		.loc 2 851 0
+ 23100 15cb5 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 23100      00000000 
+ 23101 15cbd F30F7F85 		movdqu	%xmm0, -1600(%rbp)
+ 23101      C0F9FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 23102              		.loc 2 854 0
+ 23103 15cc5 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 23103      00000000 
+ 23104 15ccd F30F6F8D 		movdqu	-1632(%rbp), %xmm1
+ 23104      A0F9FFFF 
+ 23105 15cd5 F30F7F8D 		movdqu	%xmm1, -1520(%rbp)
+ 23105      10FAFFFF 
+ 23106 15cdd F30F7F85 		movdqu	%xmm0, -1536(%rbp)
+ 23106      00FAFFFF 
+ 23107              	.LBB2793:
+ 23108              	.LBB2794:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 23109              		.loc 2 206 0
+ 23110 15ce5 F30F6F85 		movdqu	-1536(%rbp), %xmm0
+ 23110      00FAFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 700
+
+
+ 23111 15ced F30F6F8D 		movdqu	-1520(%rbp), %xmm1
+ 23111      10FAFFFF 
+ 23112 15cf5 660FDBC1 		pand	%xmm1, %xmm0
+ 23113              	.LBE2794:
+ 23114              	.LBE2793:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 23115              		.loc 2 854 0
+ 23116 15cf9 F30F7F85 		movdqu	%xmm0, -1552(%rbp)
+ 23116      F0F9FFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 23117              		.loc 2 862 0
+ 23118 15d01 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 23118      00000000 
+ 23119 15d09 F30F6F8D 		movdqu	-1632(%rbp), %xmm1
+ 23119      A0F9FFFF 
+ 23120 15d11 F30F7F8D 		movdqu	%xmm1, -1488(%rbp)
+ 23120      30FAFFFF 
+ 23121 15d19 F30F7F85 		movdqu	%xmm0, -1504(%rbp)
+ 23121      20FAFFFF 
+ 23122              	.LBB2795:
+ 23123              		.loc 2 2642 0
+ 23124 15d21 0FB68530 		movzbl	-1488(%rbp), %eax
+ 23124      FAFFFF
+ 23125 15d28 0FB69520 		movzbl	-1504(%rbp), %edx
+ 23125      FAFFFF
+ 23126 15d2f 0FB6C0   		movzbl	%al, %eax
+ 23127 15d32 6689855E 		movw	%ax, -2722(%rbp)
+ 23127      F5FFFF
+ 23128 15d39 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 23128      F5FFFF
+ 23129 15d40 F6F2     		divb	%dl
+ 23130 15d42 4189C7   		movl	%eax, %r15d
+ 23131 15d45 0FB68531 		movzbl	-1487(%rbp), %eax
+ 23131      FAFFFF
+ 23132 15d4c 0FB69521 		movzbl	-1503(%rbp), %edx
+ 23132      FAFFFF
+ 23133 15d53 0FB6C0   		movzbl	%al, %eax
+ 23134 15d56 6689855E 		movw	%ax, -2722(%rbp)
+ 23134      F5FFFF
+ 23135 15d5d 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 23135      F5FFFF
+ 23136 15d64 F6F2     		divb	%dl
+ 23137 15d66 88858FF5 		movb	%al, -2673(%rbp)
+ 23137      FFFF
+ 23138 15d6c 0FB68532 		movzbl	-1486(%rbp), %eax
+ 23138      FAFFFF
+ 23139 15d73 0FB69522 		movzbl	-1502(%rbp), %edx
+ 23139      FAFFFF
+ 23140 15d7a 0FB6C0   		movzbl	%al, %eax
+ 23141 15d7d 6689855E 		movw	%ax, -2722(%rbp)
+ 23141      F5FFFF
+ 23142 15d84 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 23142      F5FFFF
+ 23143 15d8b F6F2     		divb	%dl
+ 23144 15d8d 88858EF5 		movb	%al, -2674(%rbp)
+ 23144      FFFF
+ 23145 15d93 0FB68533 		movzbl	-1485(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 701
+
+
+ 23145      FAFFFF
+ 23146 15d9a 0FB69523 		movzbl	-1501(%rbp), %edx
+ 23146      FAFFFF
+ 23147 15da1 0FB6C0   		movzbl	%al, %eax
+ 23148 15da4 6689855E 		movw	%ax, -2722(%rbp)
+ 23148      F5FFFF
+ 23149 15dab 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 23149      F5FFFF
+ 23150 15db2 F6F2     		divb	%dl
+ 23151 15db4 88858DF5 		movb	%al, -2675(%rbp)
+ 23151      FFFF
+ 23152 15dba 0FB68534 		movzbl	-1484(%rbp), %eax
+ 23152      FAFFFF
+ 23153 15dc1 0FB69524 		movzbl	-1500(%rbp), %edx
+ 23153      FAFFFF
+ 23154 15dc8 0FB6C0   		movzbl	%al, %eax
+ 23155 15dcb 6689855E 		movw	%ax, -2722(%rbp)
+ 23155      F5FFFF
+ 23156 15dd2 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 23156      F5FFFF
+ 23157 15dd9 F6F2     		divb	%dl
+ 23158 15ddb 88858CF5 		movb	%al, -2676(%rbp)
+ 23158      FFFF
+ 23159 15de1 0FB68535 		movzbl	-1483(%rbp), %eax
+ 23159      FAFFFF
+ 23160 15de8 0FB69525 		movzbl	-1499(%rbp), %edx
+ 23160      FAFFFF
+ 23161 15def 0FB6C0   		movzbl	%al, %eax
+ 23162 15df2 6689855E 		movw	%ax, -2722(%rbp)
+ 23162      F5FFFF
+ 23163 15df9 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 23163      F5FFFF
+ 23164 15e00 F6F2     		divb	%dl
+ 23165 15e02 4189C1   		movl	%eax, %r9d
+ 23166 15e05 0FB68536 		movzbl	-1482(%rbp), %eax
+ 23166      FAFFFF
+ 23167 15e0c 0FB69526 		movzbl	-1498(%rbp), %edx
+ 23167      FAFFFF
+ 23168 15e13 0FB6C0   		movzbl	%al, %eax
+ 23169 15e16 6689855E 		movw	%ax, -2722(%rbp)
+ 23169      F5FFFF
+ 23170 15e1d 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 23170      F5FFFF
+ 23171 15e24 F6F2     		divb	%dl
+ 23172 15e26 89C7     		movl	%eax, %edi
+ 23173 15e28 0FB68537 		movzbl	-1481(%rbp), %eax
+ 23173      FAFFFF
+ 23174 15e2f 0FB69527 		movzbl	-1497(%rbp), %edx
+ 23174      FAFFFF
+ 23175 15e36 0FB6C0   		movzbl	%al, %eax
+ 23176 15e39 6689855E 		movw	%ax, -2722(%rbp)
+ 23176      F5FFFF
+ 23177 15e40 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 23177      F5FFFF
+ 23178 15e47 F6F2     		divb	%dl
+ 23179 15e49 89C3     		movl	%eax, %ebx
+ 23180 15e4b 0FB68538 		movzbl	-1480(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 702
+
+
+ 23180      FAFFFF
+ 23181 15e52 0FB69528 		movzbl	-1496(%rbp), %edx
+ 23181      FAFFFF
+ 23182 15e59 0FB6C0   		movzbl	%al, %eax
+ 23183 15e5c 6689855E 		movw	%ax, -2722(%rbp)
+ 23183      F5FFFF
+ 23184 15e63 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 23184      F5FFFF
+ 23185 15e6a F6F2     		divb	%dl
+ 23186 15e6c 4189C2   		movl	%eax, %r10d
+ 23187 15e6f 0FB68539 		movzbl	-1479(%rbp), %eax
+ 23187      FAFFFF
+ 23188 15e76 0FB69529 		movzbl	-1495(%rbp), %edx
+ 23188      FAFFFF
+ 23189 15e7d 0FB6C0   		movzbl	%al, %eax
+ 23190 15e80 6689855E 		movw	%ax, -2722(%rbp)
+ 23190      F5FFFF
+ 23191 15e87 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 23191      F5FFFF
+ 23192 15e8e F6F2     		divb	%dl
+ 23193 15e90 4189C3   		movl	%eax, %r11d
+ 23194 15e93 0FB6853A 		movzbl	-1478(%rbp), %eax
+ 23194      FAFFFF
+ 23195 15e9a 0FB6952A 		movzbl	-1494(%rbp), %edx
+ 23195      FAFFFF
+ 23196 15ea1 0FB6C0   		movzbl	%al, %eax
+ 23197 15ea4 6689855E 		movw	%ax, -2722(%rbp)
+ 23197      F5FFFF
+ 23198 15eab 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 23198      F5FFFF
+ 23199 15eb2 F6F2     		divb	%dl
+ 23200 15eb4 4189C4   		movl	%eax, %r12d
+ 23201 15eb7 0FB6853B 		movzbl	-1477(%rbp), %eax
+ 23201      FAFFFF
+ 23202 15ebe 0FB6952B 		movzbl	-1493(%rbp), %edx
+ 23202      FAFFFF
+ 23203 15ec5 0FB6C0   		movzbl	%al, %eax
+ 23204 15ec8 6689855E 		movw	%ax, -2722(%rbp)
+ 23204      F5FFFF
+ 23205 15ecf 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 23205      F5FFFF
+ 23206 15ed6 F6F2     		divb	%dl
+ 23207 15ed8 4189C5   		movl	%eax, %r13d
+ 23208 15edb 0FB6853C 		movzbl	-1476(%rbp), %eax
+ 23208      FAFFFF
+ 23209 15ee2 0FB6952C 		movzbl	-1492(%rbp), %edx
+ 23209      FAFFFF
+ 23210 15ee9 0FB6C0   		movzbl	%al, %eax
+ 23211 15eec 6689855E 		movw	%ax, -2722(%rbp)
+ 23211      F5FFFF
+ 23212 15ef3 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 23212      F5FFFF
+ 23213 15efa F6F2     		divb	%dl
+ 23214 15efc 4189C6   		movl	%eax, %r14d
+ 23215 15eff 0FB6853D 		movzbl	-1475(%rbp), %eax
+ 23215      FAFFFF
+ 23216 15f06 0FB6952D 		movzbl	-1491(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 703
+
+
+ 23216      FAFFFF
+ 23217 15f0d 0FB6C0   		movzbl	%al, %eax
+ 23218 15f10 6689855E 		movw	%ax, -2722(%rbp)
+ 23218      F5FFFF
+ 23219 15f17 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 23219      F5FFFF
+ 23220 15f1e F6F2     		divb	%dl
+ 23221 15f20 4189C0   		movl	%eax, %r8d
+ 23222 15f23 0FB6853E 		movzbl	-1474(%rbp), %eax
+ 23222      FAFFFF
+ 23223 15f2a 0FB6952E 		movzbl	-1490(%rbp), %edx
+ 23223      FAFFFF
+ 23224 15f31 0FB6C0   		movzbl	%al, %eax
+ 23225 15f34 6689855E 		movw	%ax, -2722(%rbp)
+ 23225      F5FFFF
+ 23226 15f3b 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 23226      F5FFFF
+ 23227 15f42 F6F2     		divb	%dl
+ 23228 15f44 89C6     		movl	%eax, %esi
+ 23229 15f46 0FB6853F 		movzbl	-1473(%rbp), %eax
+ 23229      FAFFFF
+ 23230 15f4d 0FB6952F 		movzbl	-1489(%rbp), %edx
+ 23230      FAFFFF
+ 23231 15f54 0FB6C0   		movzbl	%al, %eax
+ 23232 15f57 6689855E 		movw	%ax, -2722(%rbp)
+ 23232      F5FFFF
+ 23233 15f5e 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 23233      F5FFFF
+ 23234 15f65 F6F2     		divb	%dl
+ 23235 15f67 89C1     		movl	%eax, %ecx
+ 23236              	.LBB2796:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 23237              		.loc 2 346 0
+ 23238 15f69 0FB6D3   		movzbl	%bl, %edx
+ 23239 15f6c 400FB6C7 		movzbl	%dil, %eax
+ 23240 15f70 48C1E208 		salq	$8, %rdx
+ 23241 15f74 4809C2   		orq	%rax, %rdx
+ 23242 15f77 410FB6C1 		movzbl	%r9b, %eax
+ 23243 15f7b 48C1E208 		salq	$8, %rdx
+ 23244 15f7f 4809C2   		orq	%rax, %rdx
+ 23245 15f82 0FB6858C 		movzbl	-2676(%rbp), %eax
+ 23245      F5FFFF
+ 23246 15f89 48C1E208 		salq	$8, %rdx
+ 23247 15f8d 4809C2   		orq	%rax, %rdx
+ 23248 15f90 0FB6858D 		movzbl	-2675(%rbp), %eax
+ 23248      F5FFFF
+ 23249 15f97 48C1E208 		salq	$8, %rdx
+ 23250 15f9b 4809C2   		orq	%rax, %rdx
+ 23251 15f9e 0FB6858E 		movzbl	-2674(%rbp), %eax
+ 23251      F5FFFF
+ 23252 15fa5 48C1E208 		salq	$8, %rdx
+ 23253 15fa9 4809C2   		orq	%rax, %rdx
+ 23254 15fac 0FB6858F 		movzbl	-2673(%rbp), %eax
+ 23254      F5FFFF
+ 23255 15fb3 48C1E208 		salq	$8, %rdx
+ 23256 15fb7 4809C2   		orq	%rax, %rdx
+ 23257 15fba 410FB6C7 		movzbl	%r15b, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 704
+
+
+ 23258 15fbe 48C1E208 		salq	$8, %rdx
+ 23259 15fc2 4809C2   		orq	%rax, %rdx
+ 23260 15fc5 0FB6C1   		movzbl	%cl, %eax
+ 23261 15fc8 400FB6CE 		movzbl	%sil, %ecx
+ 23262 15fcc 48C1E008 		salq	$8, %rax
+ 23263 15fd0 4809C8   		orq	%rcx, %rax
+ 23264 15fd3 410FB6C8 		movzbl	%r8b, %ecx
+ 23265 15fd7 48C1E008 		salq	$8, %rax
+ 23266 15fdb 4809C8   		orq	%rcx, %rax
+ 23267 15fde 410FB6CE 		movzbl	%r14b, %ecx
+ 23268 15fe2 48C1E008 		salq	$8, %rax
+ 23269 15fe6 4809C8   		orq	%rcx, %rax
+ 23270 15fe9 410FB6CD 		movzbl	%r13b, %ecx
+ 23271 15fed 48C1E008 		salq	$8, %rax
+ 23272 15ff1 4809C8   		orq	%rcx, %rax
+ 23273 15ff4 410FB6CC 		movzbl	%r12b, %ecx
+ 23274 15ff8 48C1E008 		salq	$8, %rax
+ 23275 15ffc 4809C8   		orq	%rcx, %rax
+ 23276 15fff 410FB6CB 		movzbl	%r11b, %ecx
+ 23277 16003 48C1E008 		salq	$8, %rax
+ 23278 16007 4809C8   		orq	%rcx, %rax
+ 23279 1600a 410FB6CA 		movzbl	%r10b, %ecx
+ 23280 1600e 48C1E008 		salq	$8, %rax
+ 23281 16012 4809C8   		orq	%rcx, %rax
+ 23282 16015 48899570 		movq	%rdx, -2704(%rbp)
+ 23282      F5FFFF
+ 23283 1601c 48898578 		movq	%rax, -2696(%rbp)
+ 23283      F5FFFF
+ 23284 16023 660F6F85 		movdqa	-2704(%rbp), %xmm0
+ 23284      70F5FFFF 
+ 23285              	.LBE2796:
+ 23286              	.LBE2795:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 23287              		.loc 2 862 0
+ 23288 1602b F30F7F85 		movdqu	%xmm0, -1568(%rbp)
+ 23288      E0F9FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 23289              		.loc 2 866 0
+ 23290 16033 C785BCF9 		movl	$0, -1604(%rbp)
+ 23290      FFFF0000 
+ 23290      0000
+ 23291 1603d E9860200 		jmp	.L599
+ 23291      00
+ 23292              	.L608:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 23293              		.loc 2 868 0
+ 23294 16042 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 23294      00000000 
+ 23295 1604a F30F7F85 		movdqu	%xmm0, -1456(%rbp)
+ 23295      50FAFFFF 
+ 23296 16052 F30F6F85 		movdqu	-1568(%rbp), %xmm0
+ 23296      E0F9FFFF 
+ 23297 1605a F30F7F85 		movdqu	%xmm0, -1472(%rbp)
+ 23297      40FAFFFF 
+ 23298              	.LBB2797:
+ 23299              	.LBB2798:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 705
+
+
+ 23300              		.loc 2 380 0
+ 23301 16062 F30F6F85 		movdqu	-1456(%rbp), %xmm0
+ 23301      50FAFFFF 
+ 23302 1606a F30F7F85 		movdqu	%xmm0, -2384(%rbp)
+ 23302      B0F6FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 23303              		.loc 2 381 0
+ 23304 16072 F30F6F85 		movdqu	-1472(%rbp), %xmm0
+ 23304      40FAFFFF 
+ 23305 1607a F30F7F85 		movdqu	%xmm0, -2400(%rbp)
+ 23305      A0F6FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 23306              		.loc 2 383 0
+ 23307 16082 C7856CFA 		movl	$0, -1428(%rbp)
+ 23307      FFFF0000 
+ 23307      0000
+ 23308 1608c EB5C     		jmp	.L600
+ 23309              	.L603:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 23310              		.loc 2 385 0
+ 23311 1608e 8B856CFA 		movl	-1428(%rbp), %eax
+ 23311      FFFF
+ 23312 16094 89C0     		mov	%eax, %eax
+ 23313 16096 0FB68405 		movzbl	-2400(%rbp,%rax), %eax
+ 23313      A0F6FFFF 
+ 23314 1609e 84C0     		testb	%al, %al
+ 23315 160a0 7912     		jns	.L601
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 23316              		.loc 2 386 0
+ 23317 160a2 8B856CFA 		movl	-1428(%rbp), %eax
+ 23317      FFFF
+ 23318 160a8 89C0     		mov	%eax, %eax
+ 23319 160aa C68405C0 		movb	$0, -2368(%rbp,%rax)
+ 23319      F6FFFF00 
+ 23320 160b2 EB2F     		jmp	.L602
+ 23321              	.L601:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 23322              		.loc 2 388 0
+ 23323 160b4 8B8D6CFA 		movl	-1428(%rbp), %ecx
+ 23323      FFFF
+ 23324 160ba 8B856CFA 		movl	-1428(%rbp), %eax
+ 23324      FFFF
+ 23325 160c0 89C0     		mov	%eax, %eax
+ 23326 160c2 0FB68405 		movzbl	-2400(%rbp,%rax), %eax
+ 23326      A0F6FFFF 
+ 23327 160ca 0FB6C0   		movzbl	%al, %eax
+ 23328 160cd 83E00F   		andl	$15, %eax
+ 23329 160d0 4898     		cltq
+ 23330 160d2 0FB69405 		movzbl	-2384(%rbp,%rax), %edx
+ 23330      B0F6FFFF 
+ 23331 160da 89C8     		mov	%ecx, %eax
+ 23332 160dc 889405C0 		movb	%dl, -2368(%rbp,%rax)
+ 23332      F6FFFF
+ 23333              	.L602:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 23334              		.loc 2 383 0
+ 23335 160e3 83856CFA 		addl	$1, -1428(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 706
+
+
+ 23335      FFFF01
+ 23336              	.L600:
+ 23337 160ea 83BD6CFA 		cmpl	$15, -1428(%rbp)
+ 23337      FFFF0F
+ 23338 160f1 769B     		jbe	.L603
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 23339              		.loc 2 391 0
+ 23340 160f3 F30F6F85 		movdqu	-2368(%rbp), %xmm0
+ 23340      C0F6FFFF 
+ 23341              	.LBE2798:
+ 23342              	.LBE2797:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 23343              		.loc 2 868 0
+ 23344 160fb F30F7F85 		movdqu	%xmm0, -1584(%rbp)
+ 23344      D0F9FFFF 
+ 23345 16103 F30F6F85 		movdqu	-1552(%rbp), %xmm0
+ 23345      F0F9FFFF 
+ 23346 1610b F30F7F85 		movdqu	%xmm0, -1408(%rbp)
+ 23346      80FAFFFF 
+ 23347 16113 F30F6F85 		movdqu	-1584(%rbp), %xmm0
+ 23347      D0F9FFFF 
+ 23348 1611b F30F7F85 		movdqu	%xmm0, -1424(%rbp)
+ 23348      70FAFFFF 
+ 23349              	.LBB2799:
+ 23350              	.LBB2800:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 23351              		.loc 2 234 0
+ 23352 16123 F30F6F85 		movdqu	-1424(%rbp), %xmm0
+ 23352      70FAFFFF 
+ 23353 1612b F30F6F8D 		movdqu	-1408(%rbp), %xmm1
+ 23353      80FAFFFF 
+ 23354 16133 660FEBC1 		por	%xmm1, %xmm0
+ 23355              	.LBE2800:
+ 23356              	.LBE2799:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 23357              		.loc 2 870 0
+ 23358 16137 F30F7F85 		movdqu	%xmm0, -1584(%rbp)
+ 23358      D0F9FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 23359              		.loc 2 872 0
+ 23360 1613f 8B85BCF9 		mov	-1604(%rbp), %eax
+ 23360      FFFF
+ 23361 16145 48C1E004 		salq	$4, %rax
+ 23362 16149 48038598 		addq	-1640(%rbp), %rax
+ 23362      F9FFFF
+ 23363 16150 660F6F00 		movdqa	(%rax), %xmm0
+ 23364 16154 F30F7F85 		movdqu	%xmm0, -1376(%rbp)
+ 23364      A0FAFFFF 
+ 23365 1615c F30F6F85 		movdqu	-1584(%rbp), %xmm0
+ 23365      D0F9FFFF 
+ 23366 16164 F30F7F85 		movdqu	%xmm0, -1392(%rbp)
+ 23366      90FAFFFF 
+ 23367              	.LBB2801:
+ 23368              	.LBB2802:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 23369              		.loc 2 380 0
+ 23370 1616c F30F6F85 		movdqu	-1376(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 707
+
+
+ 23370      A0FAFFFF 
+ 23371 16174 F30F7F85 		movdqu	%xmm0, -2336(%rbp)
+ 23371      E0F6FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 23372              		.loc 2 381 0
+ 23373 1617c F30F6F85 		movdqu	-1392(%rbp), %xmm0
+ 23373      90FAFFFF 
+ 23374 16184 F30F7F85 		movdqu	%xmm0, -2352(%rbp)
+ 23374      D0F6FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 23375              		.loc 2 383 0
+ 23376 1618c C785BCFA 		movl	$0, -1348(%rbp)
+ 23376      FFFF0000 
+ 23376      0000
+ 23377 16196 EB5C     		jmp	.L604
+ 23378              	.L607:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 23379              		.loc 2 385 0
+ 23380 16198 8B85BCFA 		movl	-1348(%rbp), %eax
+ 23380      FFFF
+ 23381 1619e 89C0     		mov	%eax, %eax
+ 23382 161a0 0FB68405 		movzbl	-2352(%rbp,%rax), %eax
+ 23382      D0F6FFFF 
+ 23383 161a8 84C0     		testb	%al, %al
+ 23384 161aa 7912     		jns	.L605
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 23385              		.loc 2 386 0
+ 23386 161ac 8B85BCFA 		movl	-1348(%rbp), %eax
+ 23386      FFFF
+ 23387 161b2 89C0     		mov	%eax, %eax
+ 23388 161b4 C68405F0 		movb	$0, -2320(%rbp,%rax)
+ 23388      F6FFFF00 
+ 23389 161bc EB2F     		jmp	.L606
+ 23390              	.L605:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 23391              		.loc 2 388 0
+ 23392 161be 8B8DBCFA 		movl	-1348(%rbp), %ecx
+ 23392      FFFF
+ 23393 161c4 8B85BCFA 		movl	-1348(%rbp), %eax
+ 23393      FFFF
+ 23394 161ca 89C0     		mov	%eax, %eax
+ 23395 161cc 0FB68405 		movzbl	-2352(%rbp,%rax), %eax
+ 23395      D0F6FFFF 
+ 23396 161d4 0FB6C0   		movzbl	%al, %eax
+ 23397 161d7 83E00F   		andl	$15, %eax
+ 23398 161da 4898     		cltq
+ 23399 161dc 0FB69405 		movzbl	-2336(%rbp,%rax), %edx
+ 23399      E0F6FFFF 
+ 23400 161e4 89C8     		mov	%ecx, %eax
+ 23401 161e6 889405F0 		movb	%dl, -2320(%rbp,%rax)
+ 23401      F6FFFF
+ 23402              	.L606:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 23403              		.loc 2 383 0
+ 23404 161ed 8385BCFA 		addl	$1, -1348(%rbp)
+ 23404      FFFF01
+ 23405              	.L604:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 708
+
+
+ 23406 161f4 83BDBCFA 		cmpl	$15, -1348(%rbp)
+ 23406      FFFF0F
+ 23407 161fb 769B     		jbe	.L607
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 23408              		.loc 2 391 0
+ 23409 161fd F30F6F85 		movdqu	-2320(%rbp), %xmm0
+ 23409      F0F6FFFF 
+ 23410              	.LBE2802:
+ 23411              	.LBE2801:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 23412              		.loc 2 872 0
+ 23413 16205 F30F7F85 		movdqu	%xmm0, -1584(%rbp)
+ 23413      D0F9FFFF 
+ 23414 1620d F30F6F85 		movdqu	-1600(%rbp), %xmm0
+ 23414      C0F9FFFF 
+ 23415 16215 F30F7F85 		movdqu	%xmm0, -1328(%rbp)
+ 23415      D0FAFFFF 
+ 23416 1621d F30F6F85 		movdqu	-1584(%rbp), %xmm0
+ 23416      D0F9FFFF 
+ 23417 16225 F30F7F85 		movdqu	%xmm0, -1344(%rbp)
+ 23417      C0FAFFFF 
+ 23418              	.LBB2803:
+ 23419              	.LBB2804:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 23420              		.loc 2 234 0
+ 23421 1622d F30F6F85 		movdqu	-1344(%rbp), %xmm0
+ 23421      C0FAFFFF 
+ 23422 16235 F30F6F8D 		movdqu	-1328(%rbp), %xmm1
+ 23422      D0FAFFFF 
+ 23423 1623d 660FEBC1 		por	%xmm1, %xmm0
+ 23424              	.LBE2804:
+ 23425              	.LBE2803:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 23426              		.loc 2 874 0
+ 23427 16241 F30F7F85 		movdqu	%xmm0, -1600(%rbp)
+ 23427      C0F9FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 23428              		.loc 2 876 0
+ 23429 16249 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 23429      00000000 
+ 23430 16251 F30F6F8D 		movdqu	-1568(%rbp), %xmm1
+ 23430      E0F9FFFF 
+ 23431 16259 F30F7F8D 		movdqu	%xmm1, -1296(%rbp)
+ 23431      F0FAFFFF 
+ 23432 16261 F30F7F85 		movdqu	%xmm0, -1312(%rbp)
+ 23432      E0FAFFFF 
+ 23433              	.LBB2805:
+ 23434              	.LBB2806:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 23435              		.loc 2 290 0
+ 23436 16269 F30F6F8D 		movdqu	-1312(%rbp), %xmm1
+ 23436      E0FAFFFF 
+ 23437 16271 F30F6F85 		movdqu	-1296(%rbp), %xmm0
+ 23437      F0FAFFFF 
+ 23438 16279 660FF8C1 		psubb	%xmm1, %xmm0
+ 23439              	.LBE2806:
+ 23440              	.LBE2805:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 709
+
+
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 23441              		.loc 2 876 0
+ 23442 1627d F30F7F85 		movdqu	%xmm0, -1568(%rbp)
+ 23442      E0F9FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 23443              		.loc 2 878 0
+ 23444 16285 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 23444      00000000 
+ 23445 1628d F30F6F8D 		movdqu	-1568(%rbp), %xmm1
+ 23445      E0F9FFFF 
+ 23446 16295 F30F7F8D 		movdqu	%xmm1, -1264(%rbp)
+ 23446      10FBFFFF 
+ 23447 1629d F30F7F85 		movdqu	%xmm0, -1280(%rbp)
+ 23447      00FBFFFF 
+ 23448              	.LBB2807:
+ 23449              	.LBB2808:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 23450              		.loc 2 206 0
+ 23451 162a5 F30F6F85 		movdqu	-1280(%rbp), %xmm0
+ 23451      00FBFFFF 
+ 23452 162ad F30F6F8D 		movdqu	-1264(%rbp), %xmm1
+ 23452      10FBFFFF 
+ 23453 162b5 660FDBC1 		pand	%xmm1, %xmm0
+ 23454              	.LBE2808:
+ 23455              	.LBE2807:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 23456              		.loc 2 878 0
+ 23457 162b9 F30F7F85 		movdqu	%xmm0, -1568(%rbp)
+ 23457      E0F9FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 23458              		.loc 2 866 0
+ 23459 162c1 8385BCF9 		addl	$1, -1604(%rbp)
+ 23459      FFFF01
+ 23460              	.L599:
+ 23461 162c8 83BDBCF9 		cmpl	$15, -1604(%rbp)
+ 23461      FFFF0F
+ 23462 162cf 0F866DFD 		jbe	.L608
+ 23462      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 23463              		.loc 2 882 0
+ 23464 162d5 F30F6F85 		movdqu	-1600(%rbp), %xmm0
+ 23464      C0F9FFFF 
+ 23465              	.LBE2792:
+ 23466              	.LBE2791:
+ 23467              	.LBE2790:
+ 23468              	.LBE2789:
+2185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvSubBytes) (state);
+ 23469              		.loc 2 2185 0
+ 23470 162dd F30F7F85 		movdqu	%xmm0, -1712(%rbp)
+ 23470      50F9FFFF 
+2188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+ 23471              		.loc 2 2188 0
+ 23472 162e5 F30F6F85 		movdqu	-1712(%rbp), %xmm0
+ 23472      50F9FFFF 
+ 23473 162ed F30F7F85 		movdqu	%xmm0, -1680(%rbp)
+ 23473      70F9FFFF 
+ 23474              	.LBB2809:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 710
+
+
+2190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvSubBy", mstate);
+ 23475              		.loc 2 2190 0
+ 23476 162f5 F30F6F85 		movdqu	-1680(%rbp), %xmm0
+ 23476      70F9FFFF 
+ 23477 162fd F30F7F85 		movdqu	%xmm0, -2432(%rbp)
+ 23477      80F6FFFF 
+ 23478 16305 E8000000 		call	KDbgWriterGet at PLT
+ 23478      00
+ 23479 1630a 4885C0   		testq	%rax, %rax
+ 23480 1630d 7479     		je	.L610
+ 23481 1630f BF030000 		movl	$3, %edi
+ 23481      00
+ 23482 16314 E8000000 		call	KDbgCondToFlag at PLT
+ 23482      00
+ 23483 16319 4889C6   		movq	%rax, %rsi
+ 23484 1631c BF100000 		movl	$16, %edi
+ 23484      00
+ 23485 16321 E8000000 		call	KDbgTestModConds at PLT
+ 23485      00
+ 23486 16326 84C0     		testb	%al, %al
+ 23487 16328 745E     		je	.L610
+ 23488 1632a 8B858CF6 		movl	-2420(%rbp), %eax
+ 23488      FFFF
+ 23489 16330 89C7     		movl	%eax, %edi
+ 23490 16332 E8C99CFE 		call	bswap_32
+ 23490      FF
+ 23491 16337 4189C5   		movl	%eax, %r13d
+ 23492 1633a 8B8588F6 		movl	-2424(%rbp), %eax
+ 23492      FFFF
+ 23493 16340 89C7     		movl	%eax, %edi
+ 23494 16342 E8B99CFE 		call	bswap_32
+ 23494      FF
+ 23495 16347 4189C4   		movl	%eax, %r12d
+ 23496 1634a 8B8584F6 		movl	-2428(%rbp), %eax
+ 23496      FFFF
+ 23497 16350 89C7     		movl	%eax, %edi
+ 23498 16352 E8A99CFE 		call	bswap_32
+ 23498      FF
+ 23499 16357 89C3     		movl	%eax, %ebx
+ 23500 16359 8B8580F6 		movl	-2432(%rbp), %eax
+ 23500      FFFF
+ 23501 1635f 89C7     		movl	%eax, %edi
+ 23502 16361 E89A9CFE 		call	bswap_32
+ 23502      FF
+ 23503 16366 4589E9   		movl	%r13d, %r9d
+ 23504 16369 4589E0   		movl	%r12d, %r8d
+ 23505 1636c 89D9     		movl	%ebx, %ecx
+ 23506 1636e 89C2     		movl	%eax, %edx
+ 23507 16370 488D3500 		leaq	.LC12(%rip), %rsi
+ 23507      000000
+ 23508 16377 488D3D00 		leaq	.LC1(%rip), %rdi
+ 23508      000000
+ 23509 1637e B8000000 		movl	$0, %eax
+ 23509      00
+ 23510 16383 E8000000 		call	KDbgMsg at PLT
+ 23510      00
+ 23511              	.L610:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 711
+
+
+ 23512 16388 F30F6F85 		movdqu	-1712(%rbp), %xmm0
+ 23512      50F9FFFF 
+ 23513 16390 F30F7F85 		movdqu	%xmm0, -1248(%rbp)
+ 23513      20FBFFFF 
+ 23514              	.LBE2809:
+ 23515              	.LBB2810:
+ 23516              	.LBB2811:
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 23517              		.loc 2 612 0
+ 23518 16398 660F6F05 		movdqa	InvShiftRowTable.6750(%rip), %xmm0
+ 23518      00000000 
+ 23519 163a0 F30F6F8D 		movdqu	-1248(%rbp), %xmm1
+ 23519      20FBFFFF 
+ 23520 163a8 F30F7F8D 		movdqu	%xmm1, -1216(%rbp)
+ 23520      40FBFFFF 
+ 23521 163b0 F30F7F85 		movdqu	%xmm0, -1232(%rbp)
+ 23521      30FBFFFF 
+ 23522              	.LBB2812:
+ 23523              	.LBB2813:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 23524              		.loc 2 380 0
+ 23525 163b8 F30F6F85 		movdqu	-1216(%rbp), %xmm0
+ 23525      40FBFFFF 
+ 23526 163c0 F30F7F85 		movdqu	%xmm0, -2288(%rbp)
+ 23526      10F7FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 23527              		.loc 2 381 0
+ 23528 163c8 F30F6F85 		movdqu	-1232(%rbp), %xmm0
+ 23528      30FBFFFF 
+ 23529 163d0 F30F7F85 		movdqu	%xmm0, -2304(%rbp)
+ 23529      00F7FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 23530              		.loc 2 383 0
+ 23531 163d8 C7855CFB 		movl	$0, -1188(%rbp)
+ 23531      FFFF0000 
+ 23531      0000
+ 23532 163e2 EB5C     		jmp	.L611
+ 23533              	.L614:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 23534              		.loc 2 385 0
+ 23535 163e4 8B855CFB 		movl	-1188(%rbp), %eax
+ 23535      FFFF
+ 23536 163ea 89C0     		mov	%eax, %eax
+ 23537 163ec 0FB68405 		movzbl	-2304(%rbp,%rax), %eax
+ 23537      00F7FFFF 
+ 23538 163f4 84C0     		testb	%al, %al
+ 23539 163f6 7912     		jns	.L612
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 23540              		.loc 2 386 0
+ 23541 163f8 8B855CFB 		movl	-1188(%rbp), %eax
+ 23541      FFFF
+ 23542 163fe 89C0     		mov	%eax, %eax
+ 23543 16400 C6840520 		movb	$0, -2272(%rbp,%rax)
+ 23543      F7FFFF00 
+ 23544 16408 EB2F     		jmp	.L613
+ 23545              	.L612:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 712
+
+
+ 23546              		.loc 2 388 0
+ 23547 1640a 8B8D5CFB 		movl	-1188(%rbp), %ecx
+ 23547      FFFF
+ 23548 16410 8B855CFB 		movl	-1188(%rbp), %eax
+ 23548      FFFF
+ 23549 16416 89C0     		mov	%eax, %eax
+ 23550 16418 0FB68405 		movzbl	-2304(%rbp,%rax), %eax
+ 23550      00F7FFFF 
+ 23551 16420 0FB6C0   		movzbl	%al, %eax
+ 23552 16423 83E00F   		andl	$15, %eax
+ 23553 16426 4898     		cltq
+ 23554 16428 0FB69405 		movzbl	-2288(%rbp,%rax), %edx
+ 23554      10F7FFFF 
+ 23555 16430 89C8     		mov	%ecx, %eax
+ 23556 16432 88940520 		movb	%dl, -2272(%rbp,%rax)
+ 23556      F7FFFF
+ 23557              	.L613:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 23558              		.loc 2 383 0
+ 23559 16439 83855CFB 		addl	$1, -1188(%rbp)
+ 23559      FFFF01
+ 23560              	.L611:
+ 23561 16440 83BD5CFB 		cmpl	$15, -1188(%rbp)
+ 23561      FFFF0F
+ 23562 16447 769B     		jbe	.L614
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 23563              		.loc 2 391 0
+ 23564 16449 F30F6F85 		movdqu	-2272(%rbp), %xmm0
+ 23564      20F7FFFF 
+ 23565              	.LBE2813:
+ 23566              	.LBE2812:
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 23567              		.loc 2 612 0
+ 23568 16451 F30F7F85 		movdqu	%xmm0, -1248(%rbp)
+ 23568      20FBFFFF 
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 23569              		.loc 2 613 0
+ 23570 16459 F30F6F85 		movdqu	-1248(%rbp), %xmm0
+ 23570      20FBFFFF 
+ 23571              	.LBE2811:
+ 23572              	.LBE2810:
+2193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvShiftRows) (state);
+ 23573              		.loc 2 2193 0
+ 23574 16461 F30F7F85 		movdqu	%xmm0, -1712(%rbp)
+ 23574      50F9FFFF 
+2196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+ 23575              		.loc 2 2196 0
+ 23576 16469 F30F6F85 		movdqu	-1712(%rbp), %xmm0
+ 23576      50F9FFFF 
+ 23577 16471 F30F7F85 		movdqu	%xmm0, -1680(%rbp)
+ 23577      70F9FFFF 
+ 23578              	.LBB2814:
+2198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvShift", mstate);
+ 23579              		.loc 2 2198 0
+ 23580 16479 F30F6F85 		movdqu	-1680(%rbp), %xmm0
+ 23580      70F9FFFF 
+ 23581 16481 F30F7F85 		movdqu	%xmm0, -2448(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 713
+
+
+ 23581      70F6FFFF 
+ 23582 16489 E8000000 		call	KDbgWriterGet at PLT
+ 23582      00
+ 23583 1648e 4885C0   		testq	%rax, %rax
+ 23584 16491 7479     		je	.L616
+ 23585 16493 BF030000 		movl	$3, %edi
+ 23585      00
+ 23586 16498 E8000000 		call	KDbgCondToFlag at PLT
+ 23586      00
+ 23587 1649d 4889C6   		movq	%rax, %rsi
+ 23588 164a0 BF100000 		movl	$16, %edi
+ 23588      00
+ 23589 164a5 E8000000 		call	KDbgTestModConds at PLT
+ 23589      00
+ 23590 164aa 84C0     		testb	%al, %al
+ 23591 164ac 745E     		je	.L616
+ 23592 164ae 8B857CF6 		movl	-2436(%rbp), %eax
+ 23592      FFFF
+ 23593 164b4 89C7     		movl	%eax, %edi
+ 23594 164b6 E8459BFE 		call	bswap_32
+ 23594      FF
+ 23595 164bb 4189C5   		movl	%eax, %r13d
+ 23596 164be 8B8578F6 		movl	-2440(%rbp), %eax
+ 23596      FFFF
+ 23597 164c4 89C7     		movl	%eax, %edi
+ 23598 164c6 E8359BFE 		call	bswap_32
+ 23598      FF
+ 23599 164cb 4189C4   		movl	%eax, %r12d
+ 23600 164ce 8B8574F6 		movl	-2444(%rbp), %eax
+ 23600      FFFF
+ 23601 164d4 89C7     		movl	%eax, %edi
+ 23602 164d6 E8259BFE 		call	bswap_32
+ 23602      FF
+ 23603 164db 89C3     		movl	%eax, %ebx
+ 23604 164dd 8B8570F6 		movl	-2448(%rbp), %eax
+ 23604      FFFF
+ 23605 164e3 89C7     		movl	%eax, %edi
+ 23606 164e5 E8169BFE 		call	bswap_32
+ 23606      FF
+ 23607 164ea 4589E9   		movl	%r13d, %r9d
+ 23608 164ed 4589E0   		movl	%r12d, %r8d
+ 23609 164f0 89D9     		movl	%ebx, %ecx
+ 23610 164f2 89C2     		movl	%eax, %edx
+ 23611 164f4 488D3500 		leaq	.LC13(%rip), %rsi
+ 23611      000000
+ 23612 164fb 488D3D00 		leaq	.LC1(%rip), %rdi
+ 23612      000000
+ 23613 16502 B8000000 		movl	$0, %eax
+ 23613      00
+ 23614 16507 E8000000 		call	KDbgMsg at PLT
+ 23614      00
+ 23615              	.L616:
+ 23616 1650c F30F6F85 		movdqu	-1712(%rbp), %xmm0
+ 23616      50F9FFFF 
+ 23617 16514 F30F7F85 		movdqu	%xmm0, -1184(%rbp)
+ 23617      60FBFFFF 
+ 23618 1651c F30F6F85 		movdqu	-1184(%rbp), %xmm0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 714
+
+
+ 23618      60FBFFFF 
+ 23619 16524 F30F7F85 		movdqu	%xmm0, -1152(%rbp)
+ 23619      80FBFFFF 
+ 23620              	.LBE2814:
+ 23621              	.LBB2815:
+ 23622              	.LBB2816:
+ 23623              	.LBB2817:
+ 23624              	.LBB2818:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 23625              		.loc 2 667 0
+ 23626 1652c 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 23626      00000000 
+ 23627 16534 F30F6F8D 		movdqu	-1152(%rbp), %xmm1
+ 23627      80FBFFFF 
+ 23628 1653c F30F7F8D 		movdqu	%xmm1, -1120(%rbp)
+ 23628      A0FBFFFF 
+ 23629 16544 F30F7F85 		movdqu	%xmm0, -1136(%rbp)
+ 23629      90FBFFFF 
+ 23630              	.LBB2819:
+ 23631              	.LBB2820:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 23632              		.loc 2 380 0
+ 23633 1654c F30F6F85 		movdqu	-1120(%rbp), %xmm0
+ 23633      A0FBFFFF 
+ 23634 16554 F30F7F85 		movdqu	%xmm0, -2192(%rbp)
+ 23634      70F7FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 23635              		.loc 2 381 0
+ 23636 1655c F30F6F85 		movdqu	-1136(%rbp), %xmm0
+ 23636      90FBFFFF 
+ 23637 16564 F30F7F85 		movdqu	%xmm0, -2208(%rbp)
+ 23637      60F7FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 23638              		.loc 2 383 0
+ 23639 1656c C785BCFB 		movl	$0, -1092(%rbp)
+ 23639      FFFF0000 
+ 23639      0000
+ 23640 16576 EB5C     		jmp	.L617
+ 23641              	.L620:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 23642              		.loc 2 385 0
+ 23643 16578 8B85BCFB 		movl	-1092(%rbp), %eax
+ 23643      FFFF
+ 23644 1657e 89C0     		mov	%eax, %eax
+ 23645 16580 0FB68405 		movzbl	-2208(%rbp,%rax), %eax
+ 23645      60F7FFFF 
+ 23646 16588 84C0     		testb	%al, %al
+ 23647 1658a 7912     		jns	.L618
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 23648              		.loc 2 386 0
+ 23649 1658c 8B85BCFB 		movl	-1092(%rbp), %eax
+ 23649      FFFF
+ 23650 16592 89C0     		mov	%eax, %eax
+ 23651 16594 C6840580 		movb	$0, -2176(%rbp,%rax)
+ 23651      F7FFFF00 
+ 23652 1659c EB2F     		jmp	.L619
+ 23653              	.L618:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 715
+
+
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 23654              		.loc 2 388 0
+ 23655 1659e 8B8DBCFB 		movl	-1092(%rbp), %ecx
+ 23655      FFFF
+ 23656 165a4 8B85BCFB 		movl	-1092(%rbp), %eax
+ 23656      FFFF
+ 23657 165aa 89C0     		mov	%eax, %eax
+ 23658 165ac 0FB68405 		movzbl	-2208(%rbp,%rax), %eax
+ 23658      60F7FFFF 
+ 23659 165b4 0FB6C0   		movzbl	%al, %eax
+ 23660 165b7 83E00F   		andl	$15, %eax
+ 23661 165ba 4898     		cltq
+ 23662 165bc 0FB69405 		movzbl	-2192(%rbp,%rax), %edx
+ 23662      70F7FFFF 
+ 23663 165c4 89C8     		mov	%ecx, %eax
+ 23664 165c6 88940580 		movb	%dl, -2176(%rbp,%rax)
+ 23664      F7FFFF
+ 23665              	.L619:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 23666              		.loc 2 383 0
+ 23667 165cd 8385BCFB 		addl	$1, -1092(%rbp)
+ 23667      FFFF01
+ 23668              	.L617:
+ 23669 165d4 83BDBCFB 		cmpl	$15, -1092(%rbp)
+ 23669      FFFF0F
+ 23670 165db 769B     		jbe	.L620
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 23671              		.loc 2 391 0
+ 23672 165dd F30F6F85 		movdqu	-2176(%rbp), %xmm0
+ 23672      80F7FFFF 
+ 23673              	.LBE2820:
+ 23674              	.LBE2819:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 23675              		.loc 2 667 0
+ 23676 165e5 F30F7F85 		movdqu	%xmm0, -1152(%rbp)
+ 23676      80FBFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 23677              		.loc 2 668 0
+ 23678 165ed F30F6F85 		movdqu	-1152(%rbp), %xmm0
+ 23678      80FBFFFF 
+ 23679              	.LBE2818:
+ 23680              	.LBE2817:
+1106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r1 = AESBCMEMBER(RotBytesLeft) (state);
+ 23681              		.loc 2 1106 0
+ 23682 165f5 660F7F85 		movdqa	%xmm0, -2592(%rbp)
+ 23682      E0F5FFFF 
+ 23683 165fd 660F6F85 		movdqa	-2592(%rbp), %xmm0
+ 23683      E0F5FFFF 
+ 23684 16605 F30F7F85 		movdqu	%xmm0, -1088(%rbp)
+ 23684      C0FBFFFF 
+ 23685              	.LBB2821:
+ 23686              	.LBB2822:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 23687              		.loc 2 667 0
+ 23688 1660d 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 23688      00000000 
+ 23689 16615 F30F6F8D 		movdqu	-1088(%rbp), %xmm1
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 716
+
+
+ 23689      C0FBFFFF 
+ 23690 1661d F30F7F8D 		movdqu	%xmm1, -1056(%rbp)
+ 23690      E0FBFFFF 
+ 23691 16625 F30F7F85 		movdqu	%xmm0, -1072(%rbp)
+ 23691      D0FBFFFF 
+ 23692              	.LBB2823:
+ 23693              	.LBB2824:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 23694              		.loc 2 380 0
+ 23695 1662d F30F6F85 		movdqu	-1056(%rbp), %xmm0
+ 23695      E0FBFFFF 
+ 23696 16635 F30F7F85 		movdqu	%xmm0, -2144(%rbp)
+ 23696      A0F7FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 23697              		.loc 2 381 0
+ 23698 1663d F30F6F85 		movdqu	-1072(%rbp), %xmm0
+ 23698      D0FBFFFF 
+ 23699 16645 F30F7F85 		movdqu	%xmm0, -2160(%rbp)
+ 23699      90F7FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 23700              		.loc 2 383 0
+ 23701 1664d C785FCFB 		movl	$0, -1028(%rbp)
+ 23701      FFFF0000 
+ 23701      0000
+ 23702 16657 EB5C     		jmp	.L621
+ 23703              	.L624:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 23704              		.loc 2 385 0
+ 23705 16659 8B85FCFB 		movl	-1028(%rbp), %eax
+ 23705      FFFF
+ 23706 1665f 89C0     		mov	%eax, %eax
+ 23707 16661 0FB68405 		movzbl	-2160(%rbp,%rax), %eax
+ 23707      90F7FFFF 
+ 23708 16669 84C0     		testb	%al, %al
+ 23709 1666b 7912     		jns	.L622
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 23710              		.loc 2 386 0
+ 23711 1666d 8B85FCFB 		movl	-1028(%rbp), %eax
+ 23711      FFFF
+ 23712 16673 89C0     		mov	%eax, %eax
+ 23713 16675 C68405B0 		movb	$0, -2128(%rbp,%rax)
+ 23713      F7FFFF00 
+ 23714 1667d EB2F     		jmp	.L623
+ 23715              	.L622:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 23716              		.loc 2 388 0
+ 23717 1667f 8B8DFCFB 		movl	-1028(%rbp), %ecx
+ 23717      FFFF
+ 23718 16685 8B85FCFB 		movl	-1028(%rbp), %eax
+ 23718      FFFF
+ 23719 1668b 89C0     		mov	%eax, %eax
+ 23720 1668d 0FB68405 		movzbl	-2160(%rbp,%rax), %eax
+ 23720      90F7FFFF 
+ 23721 16695 0FB6C0   		movzbl	%al, %eax
+ 23722 16698 83E00F   		andl	$15, %eax
+ 23723 1669b 4898     		cltq
+ 23724 1669d 0FB69405 		movzbl	-2144(%rbp,%rax), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 717
+
+
+ 23724      A0F7FFFF 
+ 23725 166a5 89C8     		mov	%ecx, %eax
+ 23726 166a7 889405B0 		movb	%dl, -2128(%rbp,%rax)
+ 23726      F7FFFF
+ 23727              	.L623:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 23728              		.loc 2 383 0
+ 23729 166ae 8385FCFB 		addl	$1, -1028(%rbp)
+ 23729      FFFF01
+ 23730              	.L621:
+ 23731 166b5 83BDFCFB 		cmpl	$15, -1028(%rbp)
+ 23731      FFFF0F
+ 23732 166bc 769B     		jbe	.L624
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 23733              		.loc 2 391 0
+ 23734 166be F30F6F85 		movdqu	-2128(%rbp), %xmm0
+ 23734      B0F7FFFF 
+ 23735              	.LBE2824:
+ 23736              	.LBE2823:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 23737              		.loc 2 667 0
+ 23738 166c6 F30F7F85 		movdqu	%xmm0, -1088(%rbp)
+ 23738      C0FBFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 23739              		.loc 2 668 0
+ 23740 166ce F30F6F85 		movdqu	-1088(%rbp), %xmm0
+ 23740      C0FBFFFF 
+ 23741              	.LBE2822:
+ 23742              	.LBE2821:
+1107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r2 = AESBCMEMBER(RotBytesLeft) (r1);
+ 23743              		.loc 2 1107 0
+ 23744 166d6 660F7F85 		movdqa	%xmm0, -2608(%rbp)
+ 23744      D0F5FFFF 
+ 23745 166de 660F6F85 		movdqa	-2608(%rbp), %xmm0
+ 23745      D0F5FFFF 
+ 23746 166e6 F30F7F85 		movdqu	%xmm0, -1024(%rbp)
+ 23746      00FCFFFF 
+ 23747              	.LBB2825:
+ 23748              	.LBB2826:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 23749              		.loc 2 667 0
+ 23750 166ee 660F6F05 		movdqa	ShiftRowTable.6768(%rip), %xmm0
+ 23750      00000000 
+ 23751 166f6 F30F6F8D 		movdqu	-1024(%rbp), %xmm1
+ 23751      00FCFFFF 
+ 23752 166fe F30F7F8D 		movdqu	%xmm1, -992(%rbp)
+ 23752      20FCFFFF 
+ 23753 16706 F30F7F85 		movdqu	%xmm0, -1008(%rbp)
+ 23753      10FCFFFF 
+ 23754              	.LBB2827:
+ 23755              	.LBB2828:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 23756              		.loc 2 380 0
+ 23757 1670e F30F6F85 		movdqu	-992(%rbp), %xmm0
+ 23757      20FCFFFF 
+ 23758 16716 F30F7F85 		movdqu	%xmm0, -2096(%rbp)
+ 23758      D0F7FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 718
+
+
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 23759              		.loc 2 381 0
+ 23760 1671e F30F6F85 		movdqu	-1008(%rbp), %xmm0
+ 23760      10FCFFFF 
+ 23761 16726 F30F7F85 		movdqu	%xmm0, -2112(%rbp)
+ 23761      C0F7FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 23762              		.loc 2 383 0
+ 23763 1672e C7853CFC 		movl	$0, -964(%rbp)
+ 23763      FFFF0000 
+ 23763      0000
+ 23764 16738 EB5C     		jmp	.L625
+ 23765              	.L628:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 23766              		.loc 2 385 0
+ 23767 1673a 8B853CFC 		movl	-964(%rbp), %eax
+ 23767      FFFF
+ 23768 16740 89C0     		mov	%eax, %eax
+ 23769 16742 0FB68405 		movzbl	-2112(%rbp,%rax), %eax
+ 23769      C0F7FFFF 
+ 23770 1674a 84C0     		testb	%al, %al
+ 23771 1674c 7912     		jns	.L626
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 23772              		.loc 2 386 0
+ 23773 1674e 8B853CFC 		movl	-964(%rbp), %eax
+ 23773      FFFF
+ 23774 16754 89C0     		mov	%eax, %eax
+ 23775 16756 C68405E0 		movb	$0, -2080(%rbp,%rax)
+ 23775      F7FFFF00 
+ 23776 1675e EB2F     		jmp	.L627
+ 23777              	.L626:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 23778              		.loc 2 388 0
+ 23779 16760 8B8D3CFC 		movl	-964(%rbp), %ecx
+ 23779      FFFF
+ 23780 16766 8B853CFC 		movl	-964(%rbp), %eax
+ 23780      FFFF
+ 23781 1676c 89C0     		mov	%eax, %eax
+ 23782 1676e 0FB68405 		movzbl	-2112(%rbp,%rax), %eax
+ 23782      C0F7FFFF 
+ 23783 16776 0FB6C0   		movzbl	%al, %eax
+ 23784 16779 83E00F   		andl	$15, %eax
+ 23785 1677c 4898     		cltq
+ 23786 1677e 0FB69405 		movzbl	-2096(%rbp,%rax), %edx
+ 23786      D0F7FFFF 
+ 23787 16786 89C8     		mov	%ecx, %eax
+ 23788 16788 889405E0 		movb	%dl, -2080(%rbp,%rax)
+ 23788      F7FFFF
+ 23789              	.L627:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 23790              		.loc 2 383 0
+ 23791 1678f 83853CFC 		addl	$1, -964(%rbp)
+ 23791      FFFF01
+ 23792              	.L625:
+ 23793 16796 83BD3CFC 		cmpl	$15, -964(%rbp)
+ 23793      FFFF0F
+ 23794 1679d 769B     		jbe	.L628
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 719
+
+
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 23795              		.loc 2 391 0
+ 23796 1679f F30F6F85 		movdqu	-2080(%rbp), %xmm0
+ 23796      E0F7FFFF 
+ 23797              	.LBE2828:
+ 23798              	.LBE2827:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 23799              		.loc 2 667 0
+ 23800 167a7 F30F7F85 		movdqu	%xmm0, -1024(%rbp)
+ 23800      00FCFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 23801              		.loc 2 668 0
+ 23802 167af F30F6F85 		movdqu	-1024(%rbp), %xmm0
+ 23802      00FCFFFF 
+ 23803              	.LBE2826:
+ 23804              	.LBE2825:
+1108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r3 = AESBCMEMBER(RotBytesLeft) (r2);        
+ 23805              		.loc 2 1108 0
+ 23806 167b7 660F7F85 		movdqa	%xmm0, -2624(%rbp)
+ 23806      C0F5FFFF 
+ 23807 167bf F30F6F85 		movdqu	-1184(%rbp), %xmm0
+ 23807      60FBFFFF 
+ 23808 167c7 F30F7F85 		movdqu	%xmm0, -944(%rbp)
+ 23808      50FCFFFF 
+ 23809 167cf 660F6F85 		movdqa	-2608(%rbp), %xmm0
+ 23809      D0F5FFFF 
+ 23810 167d7 F30F7F85 		movdqu	%xmm0, -960(%rbp)
+ 23810      40FCFFFF 
+ 23811              	.LBB2829:
+ 23812              	.LBB2830:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 23813              		.loc 2 178 0
+ 23814 167df F30F6F85 		movdqu	-960(%rbp), %xmm0
+ 23814      40FCFFFF 
+ 23815 167e7 F30F6F8D 		movdqu	-944(%rbp), %xmm1
+ 23815      50FCFFFF 
+ 23816 167ef 660FEFC1 		pxor	%xmm1, %xmm0
+ 23817              	.LBE2830:
+ 23818              	.LBE2829:
+1110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f4 = AESBCMEMBER(VecXor) (state, r2);
+ 23819              		.loc 2 1110 0
+ 23820 167f3 660F7F85 		movdqa	%xmm0, -2656(%rbp)
+ 23820      A0F5FFFF 
+ 23821 167fb F30F6F85 		movdqu	-1184(%rbp), %xmm0
+ 23821      60FBFFFF 
+ 23822 16803 F30F7F85 		movdqu	%xmm0, -912(%rbp)
+ 23822      70FCFFFF 
+ 23823 1680b 660F6F85 		movdqa	-2592(%rbp), %xmm0
+ 23823      E0F5FFFF 
+ 23824 16813 F30F7F85 		movdqu	%xmm0, -928(%rbp)
+ 23824      60FCFFFF 
+ 23825              	.LBB2831:
+ 23826              	.LBB2832:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 23827              		.loc 2 178 0
+ 23828 1681b F30F6F85 		movdqu	-928(%rbp), %xmm0
+ 23828      60FCFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 720
+
+
+ 23829 16823 F30F6F8D 		movdqu	-912(%rbp), %xmm1
+ 23829      70FCFFFF 
+ 23830 1682b 660FEFC1 		pxor	%xmm1, %xmm0
+ 23831              	.LBE2832:
+ 23832              	.LBE2831:
+1111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f2 = AESBCMEMBER(VecXor) (state, r1);
+ 23833              		.loc 2 1111 0
+ 23834 1682f 660F7F85 		movdqa	%xmm0, -2640(%rbp)
+ 23834      B0F5FFFF 
+ 23835 16837 660F6F85 		movdqa	-2608(%rbp), %xmm0
+ 23835      D0F5FFFF 
+ 23836 1683f F30F7F85 		movdqu	%xmm0, -880(%rbp)
+ 23836      90FCFFFF 
+ 23837 16847 660F6F85 		movdqa	-2624(%rbp), %xmm0
+ 23837      C0F5FFFF 
+ 23838 1684f F30F7F85 		movdqu	%xmm0, -896(%rbp)
+ 23838      80FCFFFF 
+ 23839              	.LBB2833:
+ 23840              	.LBB2834:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 23841              		.loc 2 178 0
+ 23842 16857 F30F6F85 		movdqu	-896(%rbp), %xmm0
+ 23842      80FCFFFF 
+ 23843 1685f F30F6F8D 		movdqu	-880(%rbp), %xmm1
+ 23843      90FCFFFF 
+ 23844 16867 660FEFC1 		pxor	%xmm1, %xmm0
+ 23845              	.LBE2834:
+ 23846              	.LBE2833:
+1112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f8 = AESBCMEMBER(VecXor) (r2, r3);
+ 23847              		.loc 2 1112 0
+ 23848 1686b 660F7F85 		movdqa	%xmm0, -2672(%rbp)
+ 23848      90F5FFFF 
+ 23849 16873 660F6F85 		movdqa	-2672(%rbp), %xmm0
+ 23849      90F5FFFF 
+ 23850 1687b F30F7F85 		movdqu	%xmm0, -848(%rbp)
+ 23850      B0FCFFFF 
+ 23851 16883 660F6F85 		movdqa	-2592(%rbp), %xmm0
+ 23851      E0F5FFFF 
+ 23852 1688b F30F7F85 		movdqu	%xmm0, -864(%rbp)
+ 23852      A0FCFFFF 
+ 23853              	.LBB2835:
+ 23854              	.LBB2836:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 23855              		.loc 2 178 0
+ 23856 16893 F30F6F85 		movdqu	-864(%rbp), %xmm0
+ 23856      A0FCFFFF 
+ 23857 1689b F30F6F8D 		movdqu	-848(%rbp), %xmm1
+ 23857      B0FCFFFF 
+ 23858 168a3 660FEFC1 		pxor	%xmm1, %xmm0
+ 23859              	.LBE2836:
+ 23860              	.LBE2835:
+1113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (f8, r1);
+ 23861              		.loc 2 1113 0
+ 23862 168a7 F30F7F85 		movdqu	%xmm0, -1184(%rbp)
+ 23862      60FBFFFF 
+ 23863 168af 660F6F85 		movdqa	-2672(%rbp), %xmm0
+ 23863      90F5FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 721
+
+
+ 23864 168b7 F30F7F85 		movdqu	%xmm0, -816(%rbp)
+ 23864      D0FCFFFF 
+ 23865 168bf 660F6F85 		movdqa	-2640(%rbp), %xmm0
+ 23865      B0F5FFFF 
+ 23866 168c7 F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 23866      C0FCFFFF 
+ 23867              	.LBB2837:
+ 23868              	.LBB2838:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 23869              		.loc 2 178 0
+ 23870 168cf F30F6F85 		movdqu	-832(%rbp), %xmm0
+ 23870      C0FCFFFF 
+ 23871 168d7 F30F6F8D 		movdqu	-816(%rbp), %xmm1
+ 23871      D0FCFFFF 
+ 23872 168df 660FEFC1 		pxor	%xmm1, %xmm0
+ 23873              	.LBE2838:
+ 23874              	.LBE2837:
+1114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f8 = AESBCMEMBER(VecXor) (f8, f2);
+ 23875              		.loc 2 1114 0
+ 23876 168e3 660F7F85 		movdqa	%xmm0, -2672(%rbp)
+ 23876      90F5FFFF 
+ 23877              	.LBB2839:
+1126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         fu2.state = f2;
+ 23878              		.loc 2 1126 0
+ 23879 168eb 660F6F85 		movdqa	-2640(%rbp), %xmm0
+ 23879      B0F5FFFF 
+ 23880 168f3 F30F7F85 		movdqu	%xmm0, -2224(%rbp)
+ 23880      50F7FFFF 
+1127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         fu4.state = f4;
+ 23881              		.loc 2 1127 0
+ 23882 168fb 660F6F85 		movdqa	-2656(%rbp), %xmm0
+ 23882      A0F5FFFF 
+ 23883 16903 F30F7F85 		movdqu	%xmm0, -2240(%rbp)
+ 23883      40F7FFFF 
+1128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         fu8.state = f8;
+ 23884              		.loc 2 1128 0
+ 23885 1690b 660F6F85 		movdqa	-2672(%rbp), %xmm0
+ 23885      90F5FFFF 
+ 23886 16913 F30F7F85 		movdqu	%xmm0, -2256(%rbp)
+ 23886      30F7FFFF 
+1130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         for (ix = 0; ix < sizeof fu2; ++ix)
+ 23887              		.loc 2 1130 0
+ 23888 1691b C7857CFB 		movl	$0, -1156(%rbp)
+ 23888      FFFF0000 
+ 23888      0000
+ 23889 16925 E9260100 		jmp	.L629
+ 23889      00
+ 23890              	.L630:
+1132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu2.bytes[ix] = AESBCMEMBER(FFmul02)(fu2.bytes[ix]);
+ 23891              		.loc 2 1132 0
+ 23892 1692a 8B8D7CFB 		movl	-1156(%rbp), %ecx
+ 23892      FFFF
+ 23893 16930 8B857CFB 		movl	-1156(%rbp), %eax
+ 23893      FFFF
+ 23894 16936 89C0     		mov	%eax, %eax
+ 23895 16938 0FB68405 		movzbl	-2224(%rbp,%rax), %eax
+ 23895      50F7FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 722
+
+
+ 23896 16940 0FB6C0   		movzbl	%al, %eax
+ 23897 16943 8885EAFC 		movb	%al, -790(%rbp)
+ 23897      FFFF
+ 23898              	.LBB2840:
+ 23899              	.LBB2841:
+1012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 1) ^ AESBCMEMBER(FFtab)(b >> 7);
+ 23900              		.loc 2 1012 0
+ 23901 16949 0FB685EA 		movzbl	-790(%rbp), %eax
+ 23901      FCFFFF
+ 23902 16950 01C0     		addl	%eax, %eax
+ 23903 16952 89C3     		movl	%eax, %ebx
+ 23904 16954 0FB685EA 		movzbl	-790(%rbp), %eax
+ 23904      FCFFFF
+ 23905 1695b C0E807   		shrb	$7, %al
+ 23906 1695e 0FB6C0   		movzbl	%al, %eax
+ 23907 16961 8885EBFC 		movb	%al, -789(%rbp)
+ 23907      FFFF
+ 23908              	.LBB2842:
+ 23909              	.LBB2843:
+1001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(FFtable)[x];
+ 23910              		.loc 2 1001 0
+ 23911 16967 0FB685EB 		movzbl	-789(%rbp), %eax
+ 23911      FCFFFF
+ 23912 1696e 4863D0   		movslq	%eax,%rdx
+ 23913 16971 488D0500 		leaq	KAESBlockCipherVecFFtable(%rip), %rax
+ 23913      000000
+ 23914 16978 0FB60402 		movzbl	(%rdx,%rax), %eax
+ 23915              	.LBE2843:
+ 23916              	.LBE2842:
+1012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 1) ^ AESBCMEMBER(FFtab)(b >> 7);
+ 23917              		.loc 2 1012 0
+ 23918 1697c 31D8     		xorl	%ebx, %eax
+1132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu2.bytes[ix] = AESBCMEMBER(FFmul02)(fu2.bytes[ix]);
+ 23919              		.loc 2 1132 0
+ 23920 1697e 89C2     		movl	%eax, %edx
+ 23921              	.LBE2841:
+ 23922              	.LBE2840:
+ 23923 16980 89C8     		mov	%ecx, %eax
+ 23924 16982 88940550 		movb	%dl, -2224(%rbp,%rax)
+ 23924      F7FFFF
+1133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu4.bytes[ix] = AESBCMEMBER(FFmul04)(fu4.bytes[ix]);
+ 23925              		.loc 2 1133 0
+ 23926 16989 8B8D7CFB 		movl	-1156(%rbp), %ecx
+ 23926      FFFF
+ 23927 1698f 8B857CFB 		movl	-1156(%rbp), %eax
+ 23927      FFFF
+ 23928 16995 89C0     		mov	%eax, %eax
+ 23929 16997 0FB68405 		movzbl	-2240(%rbp,%rax), %eax
+ 23929      40F7FFFF 
+ 23930 1699f 0FB6C0   		movzbl	%al, %eax
+ 23931 169a2 8885ECFC 		movb	%al, -788(%rbp)
+ 23931      FFFF
+ 23932              	.LBB2844:
+ 23933              	.LBB2845:
+1023:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 2) ^ AESBCMEMBER(FFtab)(b >> 6);
+ 23934              		.loc 2 1023 0
+ 23935 169a8 0FB685EC 		movzbl	-788(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 723
+
+
+ 23935      FCFFFF
+ 23936 169af C1E002   		sall	$2, %eax
+ 23937 169b2 89C3     		movl	%eax, %ebx
+ 23938 169b4 0FB685EC 		movzbl	-788(%rbp), %eax
+ 23938      FCFFFF
+ 23939 169bb C0E806   		shrb	$6, %al
+ 23940 169be 0FB6C0   		movzbl	%al, %eax
+ 23941 169c1 8885EDFC 		movb	%al, -787(%rbp)
+ 23941      FFFF
+ 23942              	.LBB2846:
+ 23943              	.LBB2847:
+1001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(FFtable)[x];
+ 23944              		.loc 2 1001 0
+ 23945 169c7 0FB685ED 		movzbl	-787(%rbp), %eax
+ 23945      FCFFFF
+ 23946 169ce 4863D0   		movslq	%eax,%rdx
+ 23947 169d1 488D0500 		leaq	KAESBlockCipherVecFFtable(%rip), %rax
+ 23947      000000
+ 23948 169d8 0FB60402 		movzbl	(%rdx,%rax), %eax
+ 23949              	.LBE2847:
+ 23950              	.LBE2846:
+1023:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 2) ^ AESBCMEMBER(FFtab)(b >> 6);
+ 23951              		.loc 2 1023 0
+ 23952 169dc 31D8     		xorl	%ebx, %eax
+1133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu4.bytes[ix] = AESBCMEMBER(FFmul04)(fu4.bytes[ix]);
+ 23953              		.loc 2 1133 0
+ 23954 169de 89C2     		movl	%eax, %edx
+ 23955              	.LBE2845:
+ 23956              	.LBE2844:
+ 23957 169e0 89C8     		mov	%ecx, %eax
+ 23958 169e2 88940540 		movb	%dl, -2240(%rbp,%rax)
+ 23958      F7FFFF
+1134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu8.bytes[ix] = AESBCMEMBER(FFmul08)(fu8.bytes[ix]);
+ 23959              		.loc 2 1134 0
+ 23960 169e9 8B8D7CFB 		movl	-1156(%rbp), %ecx
+ 23960      FFFF
+ 23961 169ef 8B857CFB 		movl	-1156(%rbp), %eax
+ 23961      FFFF
+ 23962 169f5 89C0     		mov	%eax, %eax
+ 23963 169f7 0FB68405 		movzbl	-2256(%rbp,%rax), %eax
+ 23963      30F7FFFF 
+ 23964 169ff 0FB6C0   		movzbl	%al, %eax
+ 23965 16a02 8885EEFC 		movb	%al, -786(%rbp)
+ 23965      FFFF
+ 23966              	.LBB2848:
+ 23967              	.LBB2849:
+1034:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 3) ^ AESBCMEMBER(FFtab)(b >> 5);
+ 23968              		.loc 2 1034 0
+ 23969 16a08 0FB685EE 		movzbl	-786(%rbp), %eax
+ 23969      FCFFFF
+ 23970 16a0f C1E003   		sall	$3, %eax
+ 23971 16a12 89C3     		movl	%eax, %ebx
+ 23972 16a14 0FB685EE 		movzbl	-786(%rbp), %eax
+ 23972      FCFFFF
+ 23973 16a1b C0E805   		shrb	$5, %al
+ 23974 16a1e 0FB6C0   		movzbl	%al, %eax
+ 23975 16a21 8885EFFC 		movb	%al, -785(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 724
+
+
+ 23975      FFFF
+ 23976              	.LBB2850:
+ 23977              	.LBB2851:
+1001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(FFtable)[x];
+ 23978              		.loc 2 1001 0
+ 23979 16a27 0FB685EF 		movzbl	-785(%rbp), %eax
+ 23979      FCFFFF
+ 23980 16a2e 4863D0   		movslq	%eax,%rdx
+ 23981 16a31 488D0500 		leaq	KAESBlockCipherVecFFtable(%rip), %rax
+ 23981      000000
+ 23982 16a38 0FB60402 		movzbl	(%rdx,%rax), %eax
+ 23983              	.LBE2851:
+ 23984              	.LBE2850:
+1034:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 3) ^ AESBCMEMBER(FFtab)(b >> 5);
+ 23985              		.loc 2 1034 0
+ 23986 16a3c 31D8     		xorl	%ebx, %eax
+1134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu8.bytes[ix] = AESBCMEMBER(FFmul08)(fu8.bytes[ix]);
+ 23987              		.loc 2 1134 0
+ 23988 16a3e 89C2     		movl	%eax, %edx
+ 23989              	.LBE2849:
+ 23990              	.LBE2848:
+ 23991 16a40 89C8     		mov	%ecx, %eax
+ 23992 16a42 88940530 		movb	%dl, -2256(%rbp,%rax)
+ 23992      F7FFFF
+1130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         for (ix = 0; ix < sizeof fu2; ++ix)
+ 23993              		.loc 2 1130 0
+ 23994 16a49 83857CFB 		addl	$1, -1156(%rbp)
+ 23994      FFFF01
+ 23995              	.L629:
+ 23996 16a50 83BD7CFB 		cmpl	$15, -1156(%rbp)
+ 23996      FFFF0F
+ 23997 16a57 0F86CDFE 		jbe	.L630
+ 23997      FFFF
+1136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         f2 = fu2.state;
+ 23998              		.loc 2 1136 0
+ 23999 16a5d F30F6F85 		movdqu	-2224(%rbp), %xmm0
+ 23999      50F7FFFF 
+ 24000 16a65 660F7F85 		movdqa	%xmm0, -2640(%rbp)
+ 24000      B0F5FFFF 
+1137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         f4 = fu4.state;
+ 24001              		.loc 2 1137 0
+ 24002 16a6d F30F6F85 		movdqu	-2240(%rbp), %xmm0
+ 24002      40F7FFFF 
+ 24003 16a75 660F7F85 		movdqa	%xmm0, -2656(%rbp)
+ 24003      A0F5FFFF 
+1138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         f8 = fu8.state;
+ 24004              		.loc 2 1138 0
+ 24005 16a7d F30F6F85 		movdqu	-2256(%rbp), %xmm0
+ 24005      30F7FFFF 
+ 24006 16a85 660F7F85 		movdqa	%xmm0, -2672(%rbp)
+ 24006      90F5FFFF 
+ 24007 16a8d F30F6F85 		movdqu	-1184(%rbp), %xmm0
+ 24007      60FBFFFF 
+ 24008 16a95 F30F7F85 		movdqu	%xmm0, -768(%rbp)
+ 24008      00FDFFFF 
+ 24009 16a9d 660F6F85 		movdqa	-2640(%rbp), %xmm0
+ 24009      B0F5FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 725
+
+
+ 24010 16aa5 F30F7F85 		movdqu	%xmm0, -784(%rbp)
+ 24010      F0FCFFFF 
+ 24011              	.LBE2839:
+ 24012              	.LBB2852:
+ 24013              	.LBB2853:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 24014              		.loc 2 178 0
+ 24015 16aad F30F6F85 		movdqu	-784(%rbp), %xmm0
+ 24015      F0FCFFFF 
+ 24016 16ab5 F30F6F8D 		movdqu	-768(%rbp), %xmm1
+ 24016      00FDFFFF 
+ 24017 16abd 660FEFC1 		pxor	%xmm1, %xmm0
+ 24018              	.LBE2853:
+ 24019              	.LBE2852:
+1142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f2);
+ 24020              		.loc 2 1142 0
+ 24021 16ac1 F30F7F85 		movdqu	%xmm0, -1184(%rbp)
+ 24021      60FBFFFF 
+ 24022 16ac9 F30F6F85 		movdqu	-1184(%rbp), %xmm0
+ 24022      60FBFFFF 
+ 24023 16ad1 F30F7F85 		movdqu	%xmm0, -736(%rbp)
+ 24023      20FDFFFF 
+ 24024 16ad9 660F6F85 		movdqa	-2656(%rbp), %xmm0
+ 24024      A0F5FFFF 
+ 24025 16ae1 F30F7F85 		movdqu	%xmm0, -752(%rbp)
+ 24025      10FDFFFF 
+ 24026              	.LBB2854:
+ 24027              	.LBB2855:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 24028              		.loc 2 178 0
+ 24029 16ae9 F30F6F85 		movdqu	-752(%rbp), %xmm0
+ 24029      10FDFFFF 
+ 24030 16af1 F30F6F8D 		movdqu	-736(%rbp), %xmm1
+ 24030      20FDFFFF 
+ 24031 16af9 660FEFC1 		pxor	%xmm1, %xmm0
+ 24032              	.LBE2855:
+ 24033              	.LBE2854:
+1143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f4);
+ 24034              		.loc 2 1143 0
+ 24035 16afd F30F7F85 		movdqu	%xmm0, -1184(%rbp)
+ 24035      60FBFFFF 
+ 24036 16b05 F30F6F85 		movdqu	-1184(%rbp), %xmm0
+ 24036      60FBFFFF 
+ 24037 16b0d F30F7F85 		movdqu	%xmm0, -704(%rbp)
+ 24037      40FDFFFF 
+ 24038 16b15 660F6F85 		movdqa	-2672(%rbp), %xmm0
+ 24038      90F5FFFF 
+ 24039 16b1d F30F7F85 		movdqu	%xmm0, -720(%rbp)
+ 24039      30FDFFFF 
+ 24040              	.LBB2856:
+ 24041              	.LBB2857:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 24042              		.loc 2 178 0
+ 24043 16b25 F30F6F85 		movdqu	-720(%rbp), %xmm0
+ 24043      30FDFFFF 
+ 24044 16b2d F30F6F8D 		movdqu	-704(%rbp), %xmm1
+ 24044      40FDFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 726
+
+
+ 24045 16b35 660FEFC1 		pxor	%xmm1, %xmm0
+ 24046              	.LBE2857:
+ 24047              	.LBE2856:
+1144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f8);
+ 24048              		.loc 2 1144 0
+ 24049 16b39 F30F7F85 		movdqu	%xmm0, -1184(%rbp)
+ 24049      60FBFFFF 
+1148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 24050              		.loc 2 1148 0
+ 24051 16b41 F30F6F85 		movdqu	-1184(%rbp), %xmm0
+ 24051      60FBFFFF 
+ 24052              	.LBE2816:
+ 24053              	.LBE2815:
+2201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvMixColumns) (state);
+ 24054              		.loc 2 2201 0
+ 24055 16b49 F30F7F85 		movdqu	%xmm0, -1712(%rbp)
+ 24055      50F9FFFF 
+2204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+ 24056              		.loc 2 2204 0
+ 24057 16b51 F30F6F85 		movdqu	-1712(%rbp), %xmm0
+ 24057      50F9FFFF 
+ 24058 16b59 F30F7F85 		movdqu	%xmm0, -1680(%rbp)
+ 24058      70F9FFFF 
+ 24059              	.LBB2858:
+2206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvMixCo", mstate);
+ 24060              		.loc 2 2206 0
+ 24061 16b61 F30F6F85 		movdqu	-1680(%rbp), %xmm0
+ 24061      70F9FFFF 
+ 24062 16b69 F30F7F85 		movdqu	%xmm0, -2464(%rbp)
+ 24062      60F6FFFF 
+ 24063 16b71 E8000000 		call	KDbgWriterGet at PLT
+ 24063      00
+ 24064 16b76 4885C0   		testq	%rax, %rax
+ 24065 16b79 7479     		je	.L632
+ 24066 16b7b BF030000 		movl	$3, %edi
+ 24066      00
+ 24067 16b80 E8000000 		call	KDbgCondToFlag at PLT
+ 24067      00
+ 24068 16b85 4889C6   		movq	%rax, %rsi
+ 24069 16b88 BF100000 		movl	$16, %edi
+ 24069      00
+ 24070 16b8d E8000000 		call	KDbgTestModConds at PLT
+ 24070      00
+ 24071 16b92 84C0     		testb	%al, %al
+ 24072 16b94 745E     		je	.L632
+ 24073 16b96 8B856CF6 		movl	-2452(%rbp), %eax
+ 24073      FFFF
+ 24074 16b9c 89C7     		movl	%eax, %edi
+ 24075 16b9e E85D94FE 		call	bswap_32
+ 24075      FF
+ 24076 16ba3 4189C5   		movl	%eax, %r13d
+ 24077 16ba6 8B8568F6 		movl	-2456(%rbp), %eax
+ 24077      FFFF
+ 24078 16bac 89C7     		movl	%eax, %edi
+ 24079 16bae E84D94FE 		call	bswap_32
+ 24079      FF
+ 24080 16bb3 4189C4   		movl	%eax, %r12d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 727
+
+
+ 24081 16bb6 8B8564F6 		movl	-2460(%rbp), %eax
+ 24081      FFFF
+ 24082 16bbc 89C7     		movl	%eax, %edi
+ 24083 16bbe E83D94FE 		call	bswap_32
+ 24083      FF
+ 24084 16bc3 89C3     		movl	%eax, %ebx
+ 24085 16bc5 8B8560F6 		movl	-2464(%rbp), %eax
+ 24085      FFFF
+ 24086 16bcb 89C7     		movl	%eax, %edi
+ 24087 16bcd E82E94FE 		call	bswap_32
+ 24087      FF
+ 24088 16bd2 4589E9   		movl	%r13d, %r9d
+ 24089 16bd5 4589E0   		movl	%r12d, %r8d
+ 24090 16bd8 89D9     		movl	%ebx, %ecx
+ 24091 16bda 89C2     		movl	%eax, %edx
+ 24092 16bdc 488D3500 		leaq	.LC14(%rip), %rsi
+ 24092      000000
+ 24093 16be3 488D3D00 		leaq	.LC1(%rip), %rdi
+ 24093      000000
+ 24094 16bea B8000000 		movl	$0, %eax
+ 24094      00
+ 24095 16bef E8000000 		call	KDbgMsg at PLT
+ 24095      00
+ 24096              	.L632:
+ 24097 16bf4 F30F6F85 		movdqu	-1712(%rbp), %xmm0
+ 24097      50F9FFFF 
+ 24098 16bfc F30F7F85 		movdqu	%xmm0, -672(%rbp)
+ 24098      60FDFFFF 
+ 24099 16c04 F30F6F85 		movdqu	-1728(%rbp), %xmm0
+ 24099      40F9FFFF 
+ 24100 16c0c F30F7F85 		movdqu	%xmm0, -688(%rbp)
+ 24100      50FDFFFF 
+ 24101 16c14 F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 24101      60FDFFFF 
+ 24102 16c1c F30F7F85 		movdqu	%xmm0, -640(%rbp)
+ 24102      80FDFFFF 
+ 24103 16c24 F30F6F85 		movdqu	-688(%rbp), %xmm0
+ 24103      50FDFFFF 
+ 24104 16c2c F30F7F85 		movdqu	%xmm0, -656(%rbp)
+ 24104      70FDFFFF 
+ 24105              	.LBE2858:
+ 24106              	.LBB2859:
+ 24107              	.LBB2860:
+ 24108              	.LBB2861:
+ 24109              	.LBB2862:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 24110              		.loc 2 178 0
+ 24111 16c34 F30F6F85 		movdqu	-656(%rbp), %xmm0
+ 24111      70FDFFFF 
+ 24112 16c3c F30F6F8D 		movdqu	-640(%rbp), %xmm1
+ 24112      80FDFFFF 
+ 24113 16c44 660FEFC1 		pxor	%xmm1, %xmm0
+ 24114              	.LBE2862:
+ 24115              	.LBE2861:
+ 24116              	.LBE2860:
+ 24117              	.LBE2859:
+2209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 728
+
+
+ 24118              		.loc 2 2209 0
+ 24119 16c48 F30F7F85 		movdqu	%xmm0, -1712(%rbp)
+ 24119      50F9FFFF 
+2213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+ 24120              		.loc 2 2213 0
+ 24121 16c50 F30F6F85 		movdqu	-1712(%rbp), %xmm0
+ 24121      50F9FFFF 
+ 24122 16c58 F30F7F85 		movdqu	%xmm0, -1680(%rbp)
+ 24122      70F9FFFF 
+ 24123              	.LBB2863:
+2215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Round Key", mround_keys);
+ 24124              		.loc 2 2215 0
+ 24125 16c60 F30F6F85 		movdqu	-1696(%rbp), %xmm0
+ 24125      60F9FFFF 
+ 24126 16c68 F30F7F85 		movdqu	%xmm0, -2480(%rbp)
+ 24126      50F6FFFF 
+ 24127 16c70 E8000000 		call	KDbgWriterGet at PLT
+ 24127      00
+ 24128 16c75 4885C0   		testq	%rax, %rax
+ 24129 16c78 7479     		je	.L634
+ 24130 16c7a BF030000 		movl	$3, %edi
+ 24130      00
+ 24131 16c7f E8000000 		call	KDbgCondToFlag at PLT
+ 24131      00
+ 24132 16c84 4889C6   		movq	%rax, %rsi
+ 24133 16c87 BF100000 		movl	$16, %edi
+ 24133      00
+ 24134 16c8c E8000000 		call	KDbgTestModConds at PLT
+ 24134      00
+ 24135 16c91 84C0     		testb	%al, %al
+ 24136 16c93 745E     		je	.L634
+ 24137 16c95 8B855CF6 		movl	-2468(%rbp), %eax
+ 24137      FFFF
+ 24138 16c9b 89C7     		movl	%eax, %edi
+ 24139 16c9d E85E93FE 		call	bswap_32
+ 24139      FF
+ 24140 16ca2 4189C5   		movl	%eax, %r13d
+ 24141 16ca5 8B8558F6 		movl	-2472(%rbp), %eax
+ 24141      FFFF
+ 24142 16cab 89C7     		movl	%eax, %edi
+ 24143 16cad E84E93FE 		call	bswap_32
+ 24143      FF
+ 24144 16cb2 4189C4   		movl	%eax, %r12d
+ 24145 16cb5 8B8554F6 		movl	-2476(%rbp), %eax
+ 24145      FFFF
+ 24146 16cbb 89C7     		movl	%eax, %edi
+ 24147 16cbd E83E93FE 		call	bswap_32
+ 24147      FF
+ 24148 16cc2 89C3     		movl	%eax, %ebx
+ 24149 16cc4 8B8550F6 		movl	-2480(%rbp), %eax
+ 24149      FFFF
+ 24150 16cca 89C7     		movl	%eax, %edi
+ 24151 16ccc E82F93FE 		call	bswap_32
+ 24151      FF
+ 24152 16cd1 4589E9   		movl	%r13d, %r9d
+ 24153 16cd4 4589E0   		movl	%r12d, %r8d
+ 24154 16cd7 89D9     		movl	%ebx, %ecx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 729
+
+
+ 24155 16cd9 89C2     		movl	%eax, %edx
+ 24156 16cdb 488D3500 		leaq	.LC6(%rip), %rsi
+ 24156      000000
+ 24157 16ce2 488D3D00 		leaq	.LC1(%rip), %rdi
+ 24157      000000
+ 24158 16ce9 B8000000 		movl	$0, %eax
+ 24158      00
+ 24159 16cee E8000000 		call	KDbgMsg at PLT
+ 24159      00
+ 24160              	.L634:
+ 24161              	.LBE2863:
+ 24162              	.LBB2864:
+2217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("End of Round", mstate);
+ 24163              		.loc 2 2217 0
+ 24164 16cf3 F30F6F85 		movdqu	-1680(%rbp), %xmm0
+ 24164      70F9FFFF 
+ 24165 16cfb F30F7F85 		movdqu	%xmm0, -2496(%rbp)
+ 24165      40F6FFFF 
+ 24166 16d03 E8000000 		call	KDbgWriterGet at PLT
+ 24166      00
+ 24167 16d08 4885C0   		testq	%rax, %rax
+ 24168 16d0b 7479     		je	.L636
+ 24169 16d0d BF030000 		movl	$3, %edi
+ 24169      00
+ 24170 16d12 E8000000 		call	KDbgCondToFlag at PLT
+ 24170      00
+ 24171 16d17 4889C6   		movq	%rax, %rsi
+ 24172 16d1a BF100000 		movl	$16, %edi
+ 24172      00
+ 24173 16d1f E8000000 		call	KDbgTestModConds at PLT
+ 24173      00
+ 24174 16d24 84C0     		testb	%al, %al
+ 24175 16d26 745E     		je	.L636
+ 24176 16d28 8B854CF6 		movl	-2484(%rbp), %eax
+ 24176      FFFF
+ 24177 16d2e 89C7     		movl	%eax, %edi
+ 24178 16d30 E8CB92FE 		call	bswap_32
+ 24178      FF
+ 24179 16d35 4189C5   		movl	%eax, %r13d
+ 24180 16d38 8B8548F6 		movl	-2488(%rbp), %eax
+ 24180      FFFF
+ 24181 16d3e 89C7     		movl	%eax, %edi
+ 24182 16d40 E8BB92FE 		call	bswap_32
+ 24182      FF
+ 24183 16d45 4189C4   		movl	%eax, %r12d
+ 24184 16d48 8B8544F6 		movl	-2492(%rbp), %eax
+ 24184      FFFF
+ 24185 16d4e 89C7     		movl	%eax, %edi
+ 24186 16d50 E8AB92FE 		call	bswap_32
+ 24186      FF
+ 24187 16d55 89C3     		movl	%eax, %ebx
+ 24188 16d57 8B8540F6 		movl	-2496(%rbp), %eax
+ 24188      FFFF
+ 24189 16d5d 89C7     		movl	%eax, %edi
+ 24190 16d5f E89C92FE 		call	bswap_32
+ 24190      FF
+ 24191 16d64 4589E9   		movl	%r13d, %r9d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 730
+
+
+ 24192 16d67 4589E0   		movl	%r12d, %r8d
+ 24193 16d6a 89D9     		movl	%ebx, %ecx
+ 24194 16d6c 89C2     		movl	%eax, %edx
+ 24195 16d6e 488D3500 		leaq	.LC11(%rip), %rsi
+ 24195      000000
+ 24196 16d75 488D3D00 		leaq	.LC1(%rip), %rdi
+ 24196      000000
+ 24197 16d7c B8000000 		movl	$0, %eax
+ 24197      00
+ 24198 16d81 E8000000 		call	KDbgMsg at PLT
+ 24198      00
+ 24199              	.L636:
+ 24200              	.LBE2864:
+2220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 24201              		.loc 2 2220 0
+ 24202 16d86 F30F6F85 		movdqu	-1712(%rbp), %xmm0
+ 24202      50F9FFFF 
+ 24203              	.LBE2787:
+ 24204              	.LBE2786:
+2277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(EqInvMiddleRound) (state, key[ix] );
+ 24205              		.loc 2 2277 0
+ 24206 16d8e 660F7F85 		movdqa	%xmm0, -2560(%rbp)
+ 24206      00F6FFFF 
+2276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for ( ; ix < Nr; ++ix)
+ 24207              		.loc 2 2276 0
+ 24208 16d96 8385DCF8 		addl	$1, -1828(%rbp)
+ 24208      FFFF01
+ 24209              	.L596:
+ 24210 16d9d 8B85DCF8 		movl	-1828(%rbp), %eax
+ 24210      FFFF
+ 24211 16da3 3B85F4F5 		cmpl	-2572(%rbp), %eax
+ 24211      FFFF
+ 24212 16da9 0F82F8ED 		jb	.L637
+ 24212      FFFF
+2279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(EqInvLastRound) (state, key[ix]);
+ 24213              		.loc 2 2279 0
+ 24214 16daf 8B85DCF8 		mov	-1828(%rbp), %eax
+ 24214      FFFF
+ 24215 16db5 48C1E004 		salq	$4, %rax
+ 24216 16db9 480385F8 		addq	-2568(%rbp), %rax
+ 24216      F5FFFF
+ 24217 16dc0 660F6F00 		movdqa	(%rax), %xmm0
+ 24218 16dc4 660F6F8D 		movdqa	-2560(%rbp), %xmm1
+ 24218      00F6FFFF 
+ 24219 16dcc F30F7F8D 		movdqu	%xmm1, -608(%rbp)
+ 24219      A0FDFFFF 
+ 24220 16dd4 F30F7F85 		movdqu	%xmm0, -624(%rbp)
+ 24220      90FDFFFF 
+ 24221              	.LBB2865:
+ 24222              	.LBB2866:
+ 24223              	.LBB2867:
+2237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+ 24224              		.loc 2 2237 0
+ 24225 16ddc F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 24225      A0FDFFFF 
+ 24226 16de4 F30F7F85 		movdqu	%xmm0, -2000(%rbp)
+ 24226      30F8FFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 731
+
+
+ 24227 16dec E8000000 		call	KDbgWriterGet at PLT
+ 24227      00
+ 24228 16df1 4885C0   		testq	%rax, %rax
+ 24229 16df4 7479     		je	.L639
+ 24230 16df6 BF030000 		movl	$3, %edi
+ 24230      00
+ 24231 16dfb E8000000 		call	KDbgCondToFlag at PLT
+ 24231      00
+ 24232 16e00 4889C6   		movq	%rax, %rsi
+ 24233 16e03 BF100000 		movl	$16, %edi
+ 24233      00
+ 24234 16e08 E8000000 		call	KDbgTestModConds at PLT
+ 24234      00
+ 24235 16e0d 84C0     		testb	%al, %al
+ 24236 16e0f 745E     		je	.L639
+ 24237 16e11 8B853CF8 		movl	-1988(%rbp), %eax
+ 24237      FFFF
+ 24238 16e17 89C7     		movl	%eax, %edi
+ 24239 16e19 E8E291FE 		call	bswap_32
+ 24239      FF
+ 24240 16e1e 4189C5   		movl	%eax, %r13d
+ 24241 16e21 8B8538F8 		movl	-1992(%rbp), %eax
+ 24241      FFFF
+ 24242 16e27 89C7     		movl	%eax, %edi
+ 24243 16e29 E8D291FE 		call	bswap_32
+ 24243      FF
+ 24244 16e2e 4189C4   		movl	%eax, %r12d
+ 24245 16e31 8B8534F8 		movl	-1996(%rbp), %eax
+ 24245      FFFF
+ 24246 16e37 89C7     		movl	%eax, %edi
+ 24247 16e39 E8C291FE 		call	bswap_32
+ 24247      FF
+ 24248 16e3e 89C3     		movl	%eax, %ebx
+ 24249 16e40 8B8530F8 		movl	-2000(%rbp), %eax
+ 24249      FFFF
+ 24250 16e46 89C7     		movl	%eax, %edi
+ 24251 16e48 E8B391FE 		call	bswap_32
+ 24251      FF
+ 24252 16e4d 4589E9   		movl	%r13d, %r9d
+ 24253 16e50 4589E0   		movl	%r12d, %r8d
+ 24254 16e53 89D9     		movl	%ebx, %ecx
+ 24255 16e55 89C2     		movl	%eax, %edx
+ 24256 16e57 488D3500 		leaq	.LC5(%rip), %rsi
+ 24256      000000
+ 24257 16e5e 488D3D00 		leaq	.LC1(%rip), %rdi
+ 24257      000000
+ 24258 16e65 B8000000 		movl	$0, %eax
+ 24258      00
+ 24259 16e6a E8000000 		call	KDbgMsg at PLT
+ 24259      00
+ 24260              	.L639:
+ 24261 16e6f F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 24261      A0FDFFFF 
+ 24262 16e77 F30F7F85 		movdqu	%xmm0, -592(%rbp)
+ 24262      B0FDFFFF 
+ 24263 16e7f F30F6F85 		movdqu	-592(%rbp), %xmm0
+ 24263      B0FDFFFF 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 732
+
+
+ 24264 16e87 F30F7F85 		movdqu	%xmm0, -560(%rbp)
+ 24264      D0FDFFFF 
+ 24265 16e8f 488D0500 		leaq	KAESBlockCipherVecRijndaelInvSBoxV(%rip), %rax
+ 24265      000000
+ 24266 16e96 488985C8 		movq	%rax, -568(%rbp)
+ 24266      FDFFFF
+ 24267              	.LBE2867:
+ 24268              	.LBB2868:
+ 24269              	.LBB2869:
+ 24270              	.LBB2870:
+ 24271              	.LBB2871:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 24272              		.loc 2 851 0
+ 24273 16e9d 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 24273      00000000 
+ 24274 16ea5 F30F7F85 		movdqu	%xmm0, -528(%rbp)
+ 24274      F0FDFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 24275              		.loc 2 854 0
+ 24276 16ead 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 24276      00000000 
+ 24277 16eb5 F30F6F8D 		movdqu	-560(%rbp), %xmm1
+ 24277      D0FDFFFF 
+ 24278 16ebd F30F7F8D 		movdqu	%xmm1, -448(%rbp)
+ 24278      40FEFFFF 
+ 24279 16ec5 F30F7F85 		movdqu	%xmm0, -464(%rbp)
+ 24279      30FEFFFF 
+ 24280              	.LBB2872:
+ 24281              	.LBB2873:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 24282              		.loc 2 206 0
+ 24283 16ecd F30F6F85 		movdqu	-464(%rbp), %xmm0
+ 24283      30FEFFFF 
+ 24284 16ed5 F30F6F8D 		movdqu	-448(%rbp), %xmm1
+ 24284      40FEFFFF 
+ 24285 16edd 660FDBC1 		pand	%xmm1, %xmm0
+ 24286              	.LBE2873:
+ 24287              	.LBE2872:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 24288              		.loc 2 854 0
+ 24289 16ee1 F30F7F85 		movdqu	%xmm0, -480(%rbp)
+ 24289      20FEFFFF 
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 24290              		.loc 2 862 0
+ 24291 16ee9 660F6F05 		movdqa	vec_10(%rip), %xmm0
+ 24291      00000000 
+ 24292 16ef1 F30F6F8D 		movdqu	-560(%rbp), %xmm1
+ 24292      D0FDFFFF 
+ 24293 16ef9 F30F7F8D 		movdqu	%xmm1, -416(%rbp)
+ 24293      60FEFFFF 
+ 24294 16f01 F30F7F85 		movdqu	%xmm0, -432(%rbp)
+ 24294      50FEFFFF 
+ 24295              	.LBB2874:
+ 24296              		.loc 2 2642 0
+ 24297 16f09 0FB68560 		movzbl	-416(%rbp), %eax
+ 24297      FEFFFF
+ 24298 16f10 0FB69550 		movzbl	-432(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 733
+
+
+ 24298      FEFFFF
+ 24299 16f17 0FB6C0   		movzbl	%al, %eax
+ 24300 16f1a 6689855E 		movw	%ax, -2722(%rbp)
+ 24300      F5FFFF
+ 24301 16f21 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 24301      F5FFFF
+ 24302 16f28 F6F2     		divb	%dl
+ 24303 16f2a 4189C7   		movl	%eax, %r15d
+ 24304 16f2d 0FB68561 		movzbl	-415(%rbp), %eax
+ 24304      FEFFFF
+ 24305 16f34 0FB69551 		movzbl	-431(%rbp), %edx
+ 24305      FEFFFF
+ 24306 16f3b 0FB6C0   		movzbl	%al, %eax
+ 24307 16f3e 6689855E 		movw	%ax, -2722(%rbp)
+ 24307      F5FFFF
+ 24308 16f45 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 24308      F5FFFF
+ 24309 16f4c F6F2     		divb	%dl
+ 24310 16f4e 8885F3F5 		movb	%al, -2573(%rbp)
+ 24310      FFFF
+ 24311 16f54 0FB68562 		movzbl	-414(%rbp), %eax
+ 24311      FEFFFF
+ 24312 16f5b 0FB69552 		movzbl	-430(%rbp), %edx
+ 24312      FEFFFF
+ 24313 16f62 0FB6C0   		movzbl	%al, %eax
+ 24314 16f65 6689855E 		movw	%ax, -2722(%rbp)
+ 24314      F5FFFF
+ 24315 16f6c 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 24315      F5FFFF
+ 24316 16f73 F6F2     		divb	%dl
+ 24317 16f75 8885F2F5 		movb	%al, -2574(%rbp)
+ 24317      FFFF
+ 24318 16f7b 0FB68563 		movzbl	-413(%rbp), %eax
+ 24318      FEFFFF
+ 24319 16f82 0FB69553 		movzbl	-429(%rbp), %edx
+ 24319      FEFFFF
+ 24320 16f89 0FB6C0   		movzbl	%al, %eax
+ 24321 16f8c 6689855E 		movw	%ax, -2722(%rbp)
+ 24321      F5FFFF
+ 24322 16f93 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 24322      F5FFFF
+ 24323 16f9a F6F2     		divb	%dl
+ 24324 16f9c 8885F1F5 		movb	%al, -2575(%rbp)
+ 24324      FFFF
+ 24325 16fa2 0FB68564 		movzbl	-412(%rbp), %eax
+ 24325      FEFFFF
+ 24326 16fa9 0FB69554 		movzbl	-428(%rbp), %edx
+ 24326      FEFFFF
+ 24327 16fb0 0FB6C0   		movzbl	%al, %eax
+ 24328 16fb3 6689855E 		movw	%ax, -2722(%rbp)
+ 24328      F5FFFF
+ 24329 16fba 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 24329      F5FFFF
+ 24330 16fc1 F6F2     		divb	%dl
+ 24331 16fc3 8885F0F5 		movb	%al, -2576(%rbp)
+ 24331      FFFF
+ 24332 16fc9 0FB68565 		movzbl	-411(%rbp), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 734
+
+
+ 24332      FEFFFF
+ 24333 16fd0 0FB69555 		movzbl	-427(%rbp), %edx
+ 24333      FEFFFF
+ 24334 16fd7 0FB6C0   		movzbl	%al, %eax
+ 24335 16fda 6689855E 		movw	%ax, -2722(%rbp)
+ 24335      F5FFFF
+ 24336 16fe1 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 24336      F5FFFF
+ 24337 16fe8 F6F2     		divb	%dl
+ 24338 16fea 4189C1   		movl	%eax, %r9d
+ 24339 16fed 0FB68566 		movzbl	-410(%rbp), %eax
+ 24339      FEFFFF
+ 24340 16ff4 0FB69556 		movzbl	-426(%rbp), %edx
+ 24340      FEFFFF
+ 24341 16ffb 0FB6C0   		movzbl	%al, %eax
+ 24342 16ffe 6689855E 		movw	%ax, -2722(%rbp)
+ 24342      F5FFFF
+ 24343 17005 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 24343      F5FFFF
+ 24344 1700c F6F2     		divb	%dl
+ 24345 1700e 89C7     		movl	%eax, %edi
+ 24346 17010 0FB68567 		movzbl	-409(%rbp), %eax
+ 24346      FEFFFF
+ 24347 17017 0FB69557 		movzbl	-425(%rbp), %edx
+ 24347      FEFFFF
+ 24348 1701e 0FB6C0   		movzbl	%al, %eax
+ 24349 17021 6689855E 		movw	%ax, -2722(%rbp)
+ 24349      F5FFFF
+ 24350 17028 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 24350      F5FFFF
+ 24351 1702f F6F2     		divb	%dl
+ 24352 17031 89C3     		movl	%eax, %ebx
+ 24353 17033 0FB68568 		movzbl	-408(%rbp), %eax
+ 24353      FEFFFF
+ 24354 1703a 0FB69558 		movzbl	-424(%rbp), %edx
+ 24354      FEFFFF
+ 24355 17041 0FB6C0   		movzbl	%al, %eax
+ 24356 17044 6689855E 		movw	%ax, -2722(%rbp)
+ 24356      F5FFFF
+ 24357 1704b 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 24357      F5FFFF
+ 24358 17052 F6F2     		divb	%dl
+ 24359 17054 4189C2   		movl	%eax, %r10d
+ 24360 17057 0FB68569 		movzbl	-407(%rbp), %eax
+ 24360      FEFFFF
+ 24361 1705e 0FB69559 		movzbl	-423(%rbp), %edx
+ 24361      FEFFFF
+ 24362 17065 0FB6C0   		movzbl	%al, %eax
+ 24363 17068 6689855E 		movw	%ax, -2722(%rbp)
+ 24363      F5FFFF
+ 24364 1706f 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 24364      F5FFFF
+ 24365 17076 F6F2     		divb	%dl
+ 24366 17078 4189C3   		movl	%eax, %r11d
+ 24367 1707b 0FB6856A 		movzbl	-406(%rbp), %eax
+ 24367      FEFFFF
+ 24368 17082 0FB6955A 		movzbl	-422(%rbp), %edx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 735
+
+
+ 24368      FEFFFF
+ 24369 17089 0FB6C0   		movzbl	%al, %eax
+ 24370 1708c 6689855E 		movw	%ax, -2722(%rbp)
+ 24370      F5FFFF
+ 24371 17093 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 24371      F5FFFF
+ 24372 1709a F6F2     		divb	%dl
+ 24373 1709c 4189C4   		movl	%eax, %r12d
+ 24374 1709f 0FB6856B 		movzbl	-405(%rbp), %eax
+ 24374      FEFFFF
+ 24375 170a6 0FB6955B 		movzbl	-421(%rbp), %edx
+ 24375      FEFFFF
+ 24376 170ad 0FB6C0   		movzbl	%al, %eax
+ 24377 170b0 6689855E 		movw	%ax, -2722(%rbp)
+ 24377      F5FFFF
+ 24378 170b7 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 24378      F5FFFF
+ 24379 170be F6F2     		divb	%dl
+ 24380 170c0 4189C5   		movl	%eax, %r13d
+ 24381 170c3 0FB6856C 		movzbl	-404(%rbp), %eax
+ 24381      FEFFFF
+ 24382 170ca 0FB6955C 		movzbl	-420(%rbp), %edx
+ 24382      FEFFFF
+ 24383 170d1 0FB6C0   		movzbl	%al, %eax
+ 24384 170d4 6689855E 		movw	%ax, -2722(%rbp)
+ 24384      F5FFFF
+ 24385 170db 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 24385      F5FFFF
+ 24386 170e2 F6F2     		divb	%dl
+ 24387 170e4 4189C6   		movl	%eax, %r14d
+ 24388 170e7 0FB6856D 		movzbl	-403(%rbp), %eax
+ 24388      FEFFFF
+ 24389 170ee 0FB6955D 		movzbl	-419(%rbp), %edx
+ 24389      FEFFFF
+ 24390 170f5 0FB6C0   		movzbl	%al, %eax
+ 24391 170f8 6689855E 		movw	%ax, -2722(%rbp)
+ 24391      F5FFFF
+ 24392 170ff 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 24392      F5FFFF
+ 24393 17106 F6F2     		divb	%dl
+ 24394 17108 4189C0   		movl	%eax, %r8d
+ 24395 1710b 0FB6856E 		movzbl	-402(%rbp), %eax
+ 24395      FEFFFF
+ 24396 17112 0FB6955E 		movzbl	-418(%rbp), %edx
+ 24396      FEFFFF
+ 24397 17119 0FB6C0   		movzbl	%al, %eax
+ 24398 1711c 6689855E 		movw	%ax, -2722(%rbp)
+ 24398      F5FFFF
+ 24399 17123 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 24399      F5FFFF
+ 24400 1712a F6F2     		divb	%dl
+ 24401 1712c 89C6     		movl	%eax, %esi
+ 24402 1712e 0FB6856F 		movzbl	-401(%rbp), %eax
+ 24402      FEFFFF
+ 24403 17135 0FB6955F 		movzbl	-417(%rbp), %edx
+ 24403      FEFFFF
+ 24404 1713c 0FB6C0   		movzbl	%al, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 736
+
+
+ 24405 1713f 6689855E 		movw	%ax, -2722(%rbp)
+ 24405      F5FFFF
+ 24406 17146 0FB7855E 		movzwl	-2722(%rbp), %eax
+ 24406      F5FFFF
+ 24407 1714d F6F2     		divb	%dl
+ 24408 1714f 89C1     		movl	%eax, %ecx
+ 24409              	.LBB2875:
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 24410              		.loc 2 346 0
+ 24411 17151 0FB6D3   		movzbl	%bl, %edx
+ 24412 17154 400FB6C7 		movzbl	%dil, %eax
+ 24413 17158 48C1E208 		salq	$8, %rdx
+ 24414 1715c 4809C2   		orq	%rax, %rdx
+ 24415 1715f 410FB6C1 		movzbl	%r9b, %eax
+ 24416 17163 48C1E208 		salq	$8, %rdx
+ 24417 17167 4809C2   		orq	%rax, %rdx
+ 24418 1716a 0FB685F0 		movzbl	-2576(%rbp), %eax
+ 24418      F5FFFF
+ 24419 17171 48C1E208 		salq	$8, %rdx
+ 24420 17175 4809C2   		orq	%rax, %rdx
+ 24421 17178 0FB685F1 		movzbl	-2575(%rbp), %eax
+ 24421      F5FFFF
+ 24422 1717f 48C1E208 		salq	$8, %rdx
+ 24423 17183 4809C2   		orq	%rax, %rdx
+ 24424 17186 0FB685F2 		movzbl	-2574(%rbp), %eax
+ 24424      F5FFFF
+ 24425 1718d 48C1E208 		salq	$8, %rdx
+ 24426 17191 4809C2   		orq	%rax, %rdx
+ 24427 17194 0FB685F3 		movzbl	-2573(%rbp), %eax
+ 24427      F5FFFF
+ 24428 1719b 48C1E208 		salq	$8, %rdx
+ 24429 1719f 4809C2   		orq	%rax, %rdx
+ 24430 171a2 410FB6C7 		movzbl	%r15b, %eax
+ 24431 171a6 48C1E208 		salq	$8, %rdx
+ 24432 171aa 4809C2   		orq	%rax, %rdx
+ 24433 171ad 0FB6C1   		movzbl	%cl, %eax
+ 24434 171b0 400FB6CE 		movzbl	%sil, %ecx
+ 24435 171b4 48C1E008 		salq	$8, %rax
+ 24436 171b8 4809C8   		orq	%rcx, %rax
+ 24437 171bb 410FB6C8 		movzbl	%r8b, %ecx
+ 24438 171bf 48C1E008 		salq	$8, %rax
+ 24439 171c3 4809C8   		orq	%rcx, %rax
+ 24440 171c6 410FB6CE 		movzbl	%r14b, %ecx
+ 24441 171ca 48C1E008 		salq	$8, %rax
+ 24442 171ce 4809C8   		orq	%rcx, %rax
+ 24443 171d1 410FB6CD 		movzbl	%r13b, %ecx
+ 24444 171d5 48C1E008 		salq	$8, %rax
+ 24445 171d9 4809C8   		orq	%rcx, %rax
+ 24446 171dc 410FB6CC 		movzbl	%r12b, %ecx
+ 24447 171e0 48C1E008 		salq	$8, %rax
+ 24448 171e4 4809C8   		orq	%rcx, %rax
+ 24449 171e7 410FB6CB 		movzbl	%r11b, %ecx
+ 24450 171eb 48C1E008 		salq	$8, %rax
+ 24451 171ef 4809C8   		orq	%rcx, %rax
+ 24452 171f2 410FB6CA 		movzbl	%r10b, %ecx
+ 24453 171f6 48C1E008 		salq	$8, %rax
+ 24454 171fa 4809C8   		orq	%rcx, %rax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 737
+
+
+ 24455 171fd 48899560 		movq	%rdx, -2720(%rbp)
+ 24455      F5FFFF
+ 24456 17204 48898568 		movq	%rax, -2712(%rbp)
+ 24456      F5FFFF
+ 24457 1720b 660F6F85 		movdqa	-2720(%rbp), %xmm0
+ 24457      60F5FFFF 
+ 24458              	.LBE2875:
+ 24459              	.LBE2874:
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 24460              		.loc 2 862 0
+ 24461 17213 F30F7F85 		movdqu	%xmm0, -496(%rbp)
+ 24461      10FEFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 24462              		.loc 2 866 0
+ 24463 1721b C785ECFD 		movl	$0, -532(%rbp)
+ 24463      FFFF0000 
+ 24463      0000
+ 24464 17225 E9860200 		jmp	.L640
+ 24464      00
+ 24465              	.L649:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 24466              		.loc 2 868 0
+ 24467 1722a 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 24467      00000000 
+ 24468 17232 F30F7F85 		movdqu	%xmm0, -384(%rbp)
+ 24468      80FEFFFF 
+ 24469 1723a F30F6F85 		movdqu	-496(%rbp), %xmm0
+ 24469      10FEFFFF 
+ 24470 17242 F30F7F85 		movdqu	%xmm0, -400(%rbp)
+ 24470      70FEFFFF 
+ 24471              	.LBB2876:
+ 24472              	.LBB2877:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 24473              		.loc 2 380 0
+ 24474 1724a F30F6F85 		movdqu	-384(%rbp), %xmm0
+ 24474      80FEFFFF 
+ 24475 17252 F30F7F85 		movdqu	%xmm0, -1968(%rbp)
+ 24475      50F8FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 24476              		.loc 2 381 0
+ 24477 1725a F30F6F85 		movdqu	-400(%rbp), %xmm0
+ 24477      70FEFFFF 
+ 24478 17262 F30F7F85 		movdqu	%xmm0, -1984(%rbp)
+ 24478      40F8FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 24479              		.loc 2 383 0
+ 24480 1726a C7859CFE 		movl	$0, -356(%rbp)
+ 24480      FFFF0000 
+ 24480      0000
+ 24481 17274 EB5C     		jmp	.L641
+ 24482              	.L644:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 24483              		.loc 2 385 0
+ 24484 17276 8B859CFE 		movl	-356(%rbp), %eax
+ 24484      FFFF
+ 24485 1727c 89C0     		mov	%eax, %eax
+ 24486 1727e 0FB68405 		movzbl	-1984(%rbp,%rax), %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 738
+
+
+ 24486      40F8FFFF 
+ 24487 17286 84C0     		testb	%al, %al
+ 24488 17288 7912     		jns	.L642
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 24489              		.loc 2 386 0
+ 24490 1728a 8B859CFE 		movl	-356(%rbp), %eax
+ 24490      FFFF
+ 24491 17290 89C0     		mov	%eax, %eax
+ 24492 17292 C6840560 		movb	$0, -1952(%rbp,%rax)
+ 24492      F8FFFF00 
+ 24493 1729a EB2F     		jmp	.L643
+ 24494              	.L642:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 24495              		.loc 2 388 0
+ 24496 1729c 8B8D9CFE 		movl	-356(%rbp), %ecx
+ 24496      FFFF
+ 24497 172a2 8B859CFE 		movl	-356(%rbp), %eax
+ 24497      FFFF
+ 24498 172a8 89C0     		mov	%eax, %eax
+ 24499 172aa 0FB68405 		movzbl	-1984(%rbp,%rax), %eax
+ 24499      40F8FFFF 
+ 24500 172b2 0FB6C0   		movzbl	%al, %eax
+ 24501 172b5 83E00F   		andl	$15, %eax
+ 24502 172b8 4898     		cltq
+ 24503 172ba 0FB69405 		movzbl	-1968(%rbp,%rax), %edx
+ 24503      50F8FFFF 
+ 24504 172c2 89C8     		mov	%ecx, %eax
+ 24505 172c4 88940560 		movb	%dl, -1952(%rbp,%rax)
+ 24505      F8FFFF
+ 24506              	.L643:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 24507              		.loc 2 383 0
+ 24508 172cb 83859CFE 		addl	$1, -356(%rbp)
+ 24508      FFFF01
+ 24509              	.L641:
+ 24510 172d2 83BD9CFE 		cmpl	$15, -356(%rbp)
+ 24510      FFFF0F
+ 24511 172d9 769B     		jbe	.L644
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 24512              		.loc 2 391 0
+ 24513 172db F30F6F85 		movdqu	-1952(%rbp), %xmm0
+ 24513      60F8FFFF 
+ 24514              	.LBE2877:
+ 24515              	.LBE2876:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 24516              		.loc 2 868 0
+ 24517 172e3 F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 24517      00FEFFFF 
+ 24518 172eb F30F6F85 		movdqu	-480(%rbp), %xmm0
+ 24518      20FEFFFF 
+ 24519 172f3 F30F7F85 		movdqu	%xmm0, -336(%rbp)
+ 24519      B0FEFFFF 
+ 24520 172fb F30F6F85 		movdqu	-512(%rbp), %xmm0
+ 24520      00FEFFFF 
+ 24521 17303 F30F7F85 		movdqu	%xmm0, -352(%rbp)
+ 24521      A0FEFFFF 
+ 24522              	.LBB2878:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 739
+
+
+ 24523              	.LBB2879:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 24524              		.loc 2 234 0
+ 24525 1730b F30F6F85 		movdqu	-352(%rbp), %xmm0
+ 24525      A0FEFFFF 
+ 24526 17313 F30F6F8D 		movdqu	-336(%rbp), %xmm1
+ 24526      B0FEFFFF 
+ 24527 1731b 660FEBC1 		por	%xmm1, %xmm0
+ 24528              	.LBE2879:
+ 24529              	.LBE2878:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 24530              		.loc 2 870 0
+ 24531 1731f F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 24531      00FEFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 24532              		.loc 2 872 0
+ 24533 17327 8B85ECFD 		mov	-532(%rbp), %eax
+ 24533      FFFF
+ 24534 1732d 48C1E004 		salq	$4, %rax
+ 24535 17331 480385C8 		addq	-568(%rbp), %rax
+ 24535      FDFFFF
+ 24536 17338 660F6F00 		movdqa	(%rax), %xmm0
+ 24537 1733c F30F7F85 		movdqu	%xmm0, -304(%rbp)
+ 24537      D0FEFFFF 
+ 24538 17344 F30F6F85 		movdqu	-512(%rbp), %xmm0
+ 24538      00FEFFFF 
+ 24539 1734c F30F7F85 		movdqu	%xmm0, -320(%rbp)
+ 24539      C0FEFFFF 
+ 24540              	.LBB2880:
+ 24541              	.LBB2881:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 24542              		.loc 2 380 0
+ 24543 17354 F30F6F85 		movdqu	-304(%rbp), %xmm0
+ 24543      D0FEFFFF 
+ 24544 1735c F30F7F85 		movdqu	%xmm0, -1920(%rbp)
+ 24544      80F8FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 24545              		.loc 2 381 0
+ 24546 17364 F30F6F85 		movdqu	-320(%rbp), %xmm0
+ 24546      C0FEFFFF 
+ 24547 1736c F30F7F85 		movdqu	%xmm0, -1936(%rbp)
+ 24547      70F8FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 24548              		.loc 2 383 0
+ 24549 17374 C785ECFE 		movl	$0, -276(%rbp)
+ 24549      FFFF0000 
+ 24549      0000
+ 24550 1737e EB5C     		jmp	.L645
+ 24551              	.L648:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 24552              		.loc 2 385 0
+ 24553 17380 8B85ECFE 		movl	-276(%rbp), %eax
+ 24553      FFFF
+ 24554 17386 89C0     		mov	%eax, %eax
+ 24555 17388 0FB68405 		movzbl	-1936(%rbp,%rax), %eax
+ 24555      70F8FFFF 
+ 24556 17390 84C0     		testb	%al, %al
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 740
+
+
+ 24557 17392 7912     		jns	.L646
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 24558              		.loc 2 386 0
+ 24559 17394 8B85ECFE 		movl	-276(%rbp), %eax
+ 24559      FFFF
+ 24560 1739a 89C0     		mov	%eax, %eax
+ 24561 1739c C6840590 		movb	$0, -1904(%rbp,%rax)
+ 24561      F8FFFF00 
+ 24562 173a4 EB2F     		jmp	.L647
+ 24563              	.L646:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 24564              		.loc 2 388 0
+ 24565 173a6 8B8DECFE 		movl	-276(%rbp), %ecx
+ 24565      FFFF
+ 24566 173ac 8B85ECFE 		movl	-276(%rbp), %eax
+ 24566      FFFF
+ 24567 173b2 89C0     		mov	%eax, %eax
+ 24568 173b4 0FB68405 		movzbl	-1936(%rbp,%rax), %eax
+ 24568      70F8FFFF 
+ 24569 173bc 0FB6C0   		movzbl	%al, %eax
+ 24570 173bf 83E00F   		andl	$15, %eax
+ 24571 173c2 4898     		cltq
+ 24572 173c4 0FB69405 		movzbl	-1920(%rbp,%rax), %edx
+ 24572      80F8FFFF 
+ 24573 173cc 89C8     		mov	%ecx, %eax
+ 24574 173ce 88940590 		movb	%dl, -1904(%rbp,%rax)
+ 24574      F8FFFF
+ 24575              	.L647:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 24576              		.loc 2 383 0
+ 24577 173d5 8385ECFE 		addl	$1, -276(%rbp)
+ 24577      FFFF01
+ 24578              	.L645:
+ 24579 173dc 83BDECFE 		cmpl	$15, -276(%rbp)
+ 24579      FFFF0F
+ 24580 173e3 769B     		jbe	.L648
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 24581              		.loc 2 391 0
+ 24582 173e5 F30F6F85 		movdqu	-1904(%rbp), %xmm0
+ 24582      90F8FFFF 
+ 24583              	.LBE2881:
+ 24584              	.LBE2880:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 24585              		.loc 2 872 0
+ 24586 173ed F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 24586      00FEFFFF 
+ 24587 173f5 F30F6F85 		movdqu	-528(%rbp), %xmm0
+ 24587      F0FDFFFF 
+ 24588 173fd F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 24588      00FFFFFF 
+ 24589 17405 F30F6F85 		movdqu	-512(%rbp), %xmm0
+ 24589      00FEFFFF 
+ 24590 1740d F30F7F85 		movdqu	%xmm0, -272(%rbp)
+ 24590      F0FEFFFF 
+ 24591              	.LBB2882:
+ 24592              	.LBB2883:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 741
+
+
+ 24593              		.loc 2 234 0
+ 24594 17415 F30F6F85 		movdqu	-272(%rbp), %xmm0
+ 24594      F0FEFFFF 
+ 24595 1741d F30F6F8D 		movdqu	-256(%rbp), %xmm1
+ 24595      00FFFFFF 
+ 24596 17425 660FEBC1 		por	%xmm1, %xmm0
+ 24597              	.LBE2883:
+ 24598              	.LBE2882:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 24599              		.loc 2 874 0
+ 24600 17429 F30F7F85 		movdqu	%xmm0, -528(%rbp)
+ 24600      F0FDFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 24601              		.loc 2 876 0
+ 24602 17431 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 24602      00000000 
+ 24603 17439 F30F6F8D 		movdqu	-496(%rbp), %xmm1
+ 24603      10FEFFFF 
+ 24604 17441 F30F7F8D 		movdqu	%xmm1, -224(%rbp)
+ 24604      20FFFFFF 
+ 24605 17449 F30F7F85 		movdqu	%xmm0, -240(%rbp)
+ 24605      10FFFFFF 
+ 24606              	.LBB2884:
+ 24607              	.LBB2885:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 24608              		.loc 2 290 0
+ 24609 17451 F30F6F8D 		movdqu	-240(%rbp), %xmm1
+ 24609      10FFFFFF 
+ 24610 17459 F30F6F85 		movdqu	-224(%rbp), %xmm0
+ 24610      20FFFFFF 
+ 24611 17461 660FF8C1 		psubb	%xmm1, %xmm0
+ 24612              	.LBE2885:
+ 24613              	.LBE2884:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 24614              		.loc 2 876 0
+ 24615 17465 F30F7F85 		movdqu	%xmm0, -496(%rbp)
+ 24615      10FEFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 24616              		.loc 2 878 0
+ 24617 1746d 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 24617      00000000 
+ 24618 17475 F30F6F8D 		movdqu	-496(%rbp), %xmm1
+ 24618      10FEFFFF 
+ 24619 1747d F30F7F8D 		movdqu	%xmm1, -192(%rbp)
+ 24619      40FFFFFF 
+ 24620 17485 F30F7F85 		movdqu	%xmm0, -208(%rbp)
+ 24620      30FFFFFF 
+ 24621              	.LBB2886:
+ 24622              	.LBB2887:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 24623              		.loc 2 206 0
+ 24624 1748d F30F6F85 		movdqu	-208(%rbp), %xmm0
+ 24624      30FFFFFF 
+ 24625 17495 F30F6F8D 		movdqu	-192(%rbp), %xmm1
+ 24625      40FFFFFF 
+ 24626 1749d 660FDBC1 		pand	%xmm1, %xmm0
+ 24627              	.LBE2887:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 742
+
+
+ 24628              	.LBE2886:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 24629              		.loc 2 878 0
+ 24630 174a1 F30F7F85 		movdqu	%xmm0, -496(%rbp)
+ 24630      10FEFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 24631              		.loc 2 866 0
+ 24632 174a9 8385ECFD 		addl	$1, -532(%rbp)
+ 24632      FFFF01
+ 24633              	.L640:
+ 24634 174b0 83BDECFD 		cmpl	$15, -532(%rbp)
+ 24634      FFFF0F
+ 24635 174b7 0F866DFD 		jbe	.L649
+ 24635      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 24636              		.loc 2 882 0
+ 24637 174bd F30F6F85 		movdqu	-528(%rbp), %xmm0
+ 24637      F0FDFFFF 
+ 24638              	.LBE2871:
+ 24639              	.LBE2870:
+ 24640              	.LBE2869:
+ 24641              	.LBE2868:
+2243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvSubBytes) (state);
+ 24642              		.loc 2 2243 0
+ 24643 174c5 F30F7F85 		movdqu	%xmm0, -608(%rbp)
+ 24643      A0FDFFFF 
+ 24644              	.LBB2888:
+2245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvSubBy", state);
+ 24645              		.loc 2 2245 0
+ 24646 174cd F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 24646      A0FDFFFF 
+ 24647 174d5 F30F7F85 		movdqu	%xmm0, -2016(%rbp)
+ 24647      20F8FFFF 
+ 24648 174dd E8000000 		call	KDbgWriterGet at PLT
+ 24648      00
+ 24649 174e2 4885C0   		testq	%rax, %rax
+ 24650 174e5 7479     		je	.L651
+ 24651 174e7 BF030000 		movl	$3, %edi
+ 24651      00
+ 24652 174ec E8000000 		call	KDbgCondToFlag at PLT
+ 24652      00
+ 24653 174f1 4889C6   		movq	%rax, %rsi
+ 24654 174f4 BF100000 		movl	$16, %edi
+ 24654      00
+ 24655 174f9 E8000000 		call	KDbgTestModConds at PLT
+ 24655      00
+ 24656 174fe 84C0     		testb	%al, %al
+ 24657 17500 745E     		je	.L651
+ 24658 17502 8B852CF8 		movl	-2004(%rbp), %eax
+ 24658      FFFF
+ 24659 17508 89C7     		movl	%eax, %edi
+ 24660 1750a E8F18AFE 		call	bswap_32
+ 24660      FF
+ 24661 1750f 4189C5   		movl	%eax, %r13d
+ 24662 17512 8B8528F8 		movl	-2008(%rbp), %eax
+ 24662      FFFF
+ 24663 17518 89C7     		movl	%eax, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 743
+
+
+ 24664 1751a E8E18AFE 		call	bswap_32
+ 24664      FF
+ 24665 1751f 4189C4   		movl	%eax, %r12d
+ 24666 17522 8B8524F8 		movl	-2012(%rbp), %eax
+ 24666      FFFF
+ 24667 17528 89C7     		movl	%eax, %edi
+ 24668 1752a E8D18AFE 		call	bswap_32
+ 24668      FF
+ 24669 1752f 89C3     		movl	%eax, %ebx
+ 24670 17531 8B8520F8 		movl	-2016(%rbp), %eax
+ 24670      FFFF
+ 24671 17537 89C7     		movl	%eax, %edi
+ 24672 17539 E8C28AFE 		call	bswap_32
+ 24672      FF
+ 24673 1753e 4589E9   		movl	%r13d, %r9d
+ 24674 17541 4589E0   		movl	%r12d, %r8d
+ 24675 17544 89D9     		movl	%ebx, %ecx
+ 24676 17546 89C2     		movl	%eax, %edx
+ 24677 17548 488D3500 		leaq	.LC12(%rip), %rsi
+ 24677      000000
+ 24678 1754f 488D3D00 		leaq	.LC1(%rip), %rdi
+ 24678      000000
+ 24679 17556 B8000000 		movl	$0, %eax
+ 24679      00
+ 24680 1755b E8000000 		call	KDbgMsg at PLT
+ 24680      00
+ 24681              	.L651:
+ 24682 17560 F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 24682      A0FDFFFF 
+ 24683 17568 F30F7F85 		movdqu	%xmm0, -176(%rbp)
+ 24683      50FFFFFF 
+ 24684              	.LBE2888:
+ 24685              	.LBB2889:
+ 24686              	.LBB2890:
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 24687              		.loc 2 612 0
+ 24688 17570 660F6F05 		movdqa	InvShiftRowTable.6750(%rip), %xmm0
+ 24688      00000000 
+ 24689 17578 F30F6F8D 		movdqu	-176(%rbp), %xmm1
+ 24689      50FFFFFF 
+ 24690 17580 F30F7F8D 		movdqu	%xmm1, -144(%rbp)
+ 24690      70FFFFFF 
+ 24691 17588 F30F7F85 		movdqu	%xmm0, -160(%rbp)
+ 24691      60FFFFFF 
+ 24692              	.LBB2891:
+ 24693              	.LBB2892:
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 24694              		.loc 2 380 0
+ 24695 17590 F30F6F85 		movdqu	-144(%rbp), %xmm0
+ 24695      70FFFFFF 
+ 24696 17598 F30F7F85 		movdqu	%xmm0, -1872(%rbp)
+ 24696      B0F8FFFF 
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 24697              		.loc 2 381 0
+ 24698 175a0 F30F6F85 		movdqu	-160(%rbp), %xmm0
+ 24698      60FFFFFF 
+ 24699 175a8 F30F7F85 		movdqu	%xmm0, -1888(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 744
+
+
+ 24699      A0F8FFFF 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 24700              		.loc 2 383 0
+ 24701 175b0 C7458C00 		movl	$0, -116(%rbp)
+ 24701      000000
+ 24702 175b7 EB4D     		jmp	.L652
+ 24703              	.L655:
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 24704              		.loc 2 385 0
+ 24705 175b9 8B458C   		movl	-116(%rbp), %eax
+ 24706 175bc 89C0     		mov	%eax, %eax
+ 24707 175be 0FB68405 		movzbl	-1888(%rbp,%rax), %eax
+ 24707      A0F8FFFF 
+ 24708 175c6 84C0     		testb	%al, %al
+ 24709 175c8 790F     		jns	.L653
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 24710              		.loc 2 386 0
+ 24711 175ca 8B458C   		movl	-116(%rbp), %eax
+ 24712 175cd 89C0     		mov	%eax, %eax
+ 24713 175cf C68405C0 		movb	$0, -1856(%rbp,%rax)
+ 24713      F8FFFF00 
+ 24714 175d7 EB29     		jmp	.L654
+ 24715              	.L653:
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 24716              		.loc 2 388 0
+ 24717 175d9 8B4D8C   		movl	-116(%rbp), %ecx
+ 24718 175dc 8B458C   		movl	-116(%rbp), %eax
+ 24719 175df 89C0     		mov	%eax, %eax
+ 24720 175e1 0FB68405 		movzbl	-1888(%rbp,%rax), %eax
+ 24720      A0F8FFFF 
+ 24721 175e9 0FB6C0   		movzbl	%al, %eax
+ 24722 175ec 83E00F   		andl	$15, %eax
+ 24723 175ef 4898     		cltq
+ 24724 175f1 0FB69405 		movzbl	-1872(%rbp,%rax), %edx
+ 24724      B0F8FFFF 
+ 24725 175f9 89C8     		mov	%ecx, %eax
+ 24726 175fb 889405C0 		movb	%dl, -1856(%rbp,%rax)
+ 24726      F8FFFF
+ 24727              	.L654:
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 24728              		.loc 2 383 0
+ 24729 17602 83458C01 		addl	$1, -116(%rbp)
+ 24730              	.L652:
+ 24731 17606 837D8C0F 		cmpl	$15, -116(%rbp)
+ 24732 1760a 76AD     		jbe	.L655
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 24733              		.loc 2 391 0
+ 24734 1760c F30F6F85 		movdqu	-1856(%rbp), %xmm0
+ 24734      C0F8FFFF 
+ 24735              	.LBE2892:
+ 24736              	.LBE2891:
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 24737              		.loc 2 612 0
+ 24738 17614 F30F7F85 		movdqu	%xmm0, -176(%rbp)
+ 24738      50FFFFFF 
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 24739              		.loc 2 613 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 745
+
+
+ 24740 1761c F30F6F85 		movdqu	-176(%rbp), %xmm0
+ 24740      50FFFFFF 
+ 24741              	.LBE2890:
+ 24742              	.LBE2889:
+2247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvShiftRows) (state);
+ 24743              		.loc 2 2247 0
+ 24744 17624 F30F7F85 		movdqu	%xmm0, -608(%rbp)
+ 24744      A0FDFFFF 
+ 24745              	.LBB2893:
+2249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvShift", state);
+ 24746              		.loc 2 2249 0
+ 24747 1762c F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 24747      A0FDFFFF 
+ 24748 17634 F30F7F85 		movdqu	%xmm0, -2032(%rbp)
+ 24748      10F8FFFF 
+ 24749 1763c E8000000 		call	KDbgWriterGet at PLT
+ 24749      00
+ 24750 17641 4885C0   		testq	%rax, %rax
+ 24751 17644 7479     		je	.L657
+ 24752 17646 BF030000 		movl	$3, %edi
+ 24752      00
+ 24753 1764b E8000000 		call	KDbgCondToFlag at PLT
+ 24753      00
+ 24754 17650 4889C6   		movq	%rax, %rsi
+ 24755 17653 BF100000 		movl	$16, %edi
+ 24755      00
+ 24756 17658 E8000000 		call	KDbgTestModConds at PLT
+ 24756      00
+ 24757 1765d 84C0     		testb	%al, %al
+ 24758 1765f 745E     		je	.L657
+ 24759 17661 8B851CF8 		movl	-2020(%rbp), %eax
+ 24759      FFFF
+ 24760 17667 89C7     		movl	%eax, %edi
+ 24761 17669 E89289FE 		call	bswap_32
+ 24761      FF
+ 24762 1766e 4189C5   		movl	%eax, %r13d
+ 24763 17671 8B8518F8 		movl	-2024(%rbp), %eax
+ 24763      FFFF
+ 24764 17677 89C7     		movl	%eax, %edi
+ 24765 17679 E88289FE 		call	bswap_32
+ 24765      FF
+ 24766 1767e 4189C4   		movl	%eax, %r12d
+ 24767 17681 8B8514F8 		movl	-2028(%rbp), %eax
+ 24767      FFFF
+ 24768 17687 89C7     		movl	%eax, %edi
+ 24769 17689 E87289FE 		call	bswap_32
+ 24769      FF
+ 24770 1768e 89C3     		movl	%eax, %ebx
+ 24771 17690 8B8510F8 		movl	-2032(%rbp), %eax
+ 24771      FFFF
+ 24772 17696 89C7     		movl	%eax, %edi
+ 24773 17698 E86389FE 		call	bswap_32
+ 24773      FF
+ 24774 1769d 4589E9   		movl	%r13d, %r9d
+ 24775 176a0 4589E0   		movl	%r12d, %r8d
+ 24776 176a3 89D9     		movl	%ebx, %ecx
+ 24777 176a5 89C2     		movl	%eax, %edx
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 746
+
+
+ 24778 176a7 488D3500 		leaq	.LC13(%rip), %rsi
+ 24778      000000
+ 24779 176ae 488D3D00 		leaq	.LC1(%rip), %rdi
+ 24779      000000
+ 24780 176b5 B8000000 		movl	$0, %eax
+ 24780      00
+ 24781 176ba E8000000 		call	KDbgMsg at PLT
+ 24781      00
+ 24782              	.L657:
+ 24783 176bf F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 24783      A0FDFFFF 
+ 24784 176c7 F30F7F45 		movdqu	%xmm0, -96(%rbp)
+ 24784      A0
+ 24785 176cc F30F6F85 		movdqu	-624(%rbp), %xmm0
+ 24785      90FDFFFF 
+ 24786 176d4 F30F7F45 		movdqu	%xmm0, -112(%rbp)
+ 24786      90
+ 24787 176d9 F30F6F45 		movdqu	-96(%rbp), %xmm0
+ 24787      A0
+ 24788 176de F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 24788      C0
+ 24789 176e3 F30F6F45 		movdqu	-112(%rbp), %xmm0
+ 24789      90
+ 24790 176e8 F30F7F45 		movdqu	%xmm0, -80(%rbp)
+ 24790      B0
+ 24791              	.LBE2893:
+ 24792              	.LBB2894:
+ 24793              	.LBB2895:
+ 24794              	.LBB2896:
+ 24795              	.LBB2897:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 24796              		.loc 2 178 0
+ 24797 176ed F30F6F45 		movdqu	-80(%rbp), %xmm0
+ 24797      B0
+ 24798 176f2 F30F6F4D 		movdqu	-64(%rbp), %xmm1
+ 24798      C0
+ 24799 176f7 660FEFC1 		pxor	%xmm1, %xmm0
+ 24800              	.LBE2897:
+ 24801              	.LBE2896:
+ 24802              	.LBE2895:
+ 24803              	.LBE2894:
+2251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 24804              		.loc 2 2251 0
+ 24805 176fb F30F7F85 		movdqu	%xmm0, -608(%rbp)
+ 24805      A0FDFFFF 
+ 24806              	.LBB2898:
+2253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+ 24807              		.loc 2 2253 0
+ 24808 17703 F30F6F85 		movdqu	-624(%rbp), %xmm0
+ 24808      90FDFFFF 
+ 24809 1770b F30F7F85 		movdqu	%xmm0, -2048(%rbp)
+ 24809      00F8FFFF 
+ 24810 17713 E8000000 		call	KDbgWriterGet at PLT
+ 24810      00
+ 24811 17718 4885C0   		testq	%rax, %rax
+ 24812 1771b 7479     		je	.L659
+ 24813 1771d BF030000 		movl	$3, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 747
+
+
+ 24813      00
+ 24814 17722 E8000000 		call	KDbgCondToFlag at PLT
+ 24814      00
+ 24815 17727 4889C6   		movq	%rax, %rsi
+ 24816 1772a BF100000 		movl	$16, %edi
+ 24816      00
+ 24817 1772f E8000000 		call	KDbgTestModConds at PLT
+ 24817      00
+ 24818 17734 84C0     		testb	%al, %al
+ 24819 17736 745E     		je	.L659
+ 24820 17738 8B850CF8 		movl	-2036(%rbp), %eax
+ 24820      FFFF
+ 24821 1773e 89C7     		movl	%eax, %edi
+ 24822 17740 E8BB88FE 		call	bswap_32
+ 24822      FF
+ 24823 17745 4189C5   		movl	%eax, %r13d
+ 24824 17748 8B8508F8 		movl	-2040(%rbp), %eax
+ 24824      FFFF
+ 24825 1774e 89C7     		movl	%eax, %edi
+ 24826 17750 E8AB88FE 		call	bswap_32
+ 24826      FF
+ 24827 17755 4189C4   		movl	%eax, %r12d
+ 24828 17758 8B8504F8 		movl	-2044(%rbp), %eax
+ 24828      FFFF
+ 24829 1775e 89C7     		movl	%eax, %edi
+ 24830 17760 E89B88FE 		call	bswap_32
+ 24830      FF
+ 24831 17765 89C3     		movl	%eax, %ebx
+ 24832 17767 8B8500F8 		movl	-2048(%rbp), %eax
+ 24832      FFFF
+ 24833 1776d 89C7     		movl	%eax, %edi
+ 24834 1776f E88C88FE 		call	bswap_32
+ 24834      FF
+ 24835 17774 4589E9   		movl	%r13d, %r9d
+ 24836 17777 4589E0   		movl	%r12d, %r8d
+ 24837 1777a 89D9     		movl	%ebx, %ecx
+ 24838 1777c 89C2     		movl	%eax, %edx
+ 24839 1777e 488D3500 		leaq	.LC6(%rip), %rsi
+ 24839      000000
+ 24840 17785 488D3D00 		leaq	.LC1(%rip), %rdi
+ 24840      000000
+ 24841 1778c B8000000 		movl	$0, %eax
+ 24841      00
+ 24842 17791 E8000000 		call	KDbgMsg at PLT
+ 24842      00
+ 24843              	.L659:
+ 24844              	.LBE2898:
+ 24845              	.LBB2899:
+2254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("End of Round", state);
+ 24846              		.loc 2 2254 0
+ 24847 17796 F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 24847      A0FDFFFF 
+ 24848 1779e F30F7F85 		movdqu	%xmm0, -2064(%rbp)
+ 24848      F0F7FFFF 
+ 24849 177a6 E8000000 		call	KDbgWriterGet at PLT
+ 24849      00
+ 24850 177ab 4885C0   		testq	%rax, %rax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 748
+
+
+ 24851 177ae 7479     		je	.L661
+ 24852 177b0 BF030000 		movl	$3, %edi
+ 24852      00
+ 24853 177b5 E8000000 		call	KDbgCondToFlag at PLT
+ 24853      00
+ 24854 177ba 4889C6   		movq	%rax, %rsi
+ 24855 177bd BF100000 		movl	$16, %edi
+ 24855      00
+ 24856 177c2 E8000000 		call	KDbgTestModConds at PLT
+ 24856      00
+ 24857 177c7 84C0     		testb	%al, %al
+ 24858 177c9 745E     		je	.L661
+ 24859 177cb 8B85FCF7 		movl	-2052(%rbp), %eax
+ 24859      FFFF
+ 24860 177d1 89C7     		movl	%eax, %edi
+ 24861 177d3 E82888FE 		call	bswap_32
+ 24861      FF
+ 24862 177d8 4189C5   		movl	%eax, %r13d
+ 24863 177db 8B85F8F7 		movl	-2056(%rbp), %eax
+ 24863      FFFF
+ 24864 177e1 89C7     		movl	%eax, %edi
+ 24865 177e3 E81888FE 		call	bswap_32
+ 24865      FF
+ 24866 177e8 4189C4   		movl	%eax, %r12d
+ 24867 177eb 8B85F4F7 		movl	-2060(%rbp), %eax
+ 24867      FFFF
+ 24868 177f1 89C7     		movl	%eax, %edi
+ 24869 177f3 E80888FE 		call	bswap_32
+ 24869      FF
+ 24870 177f8 89C3     		movl	%eax, %ebx
+ 24871 177fa 8B85F0F7 		movl	-2064(%rbp), %eax
+ 24871      FFFF
+ 24872 17800 89C7     		movl	%eax, %edi
+ 24873 17802 E8F987FE 		call	bswap_32
+ 24873      FF
+ 24874 17807 4589E9   		movl	%r13d, %r9d
+ 24875 1780a 4589E0   		movl	%r12d, %r8d
+ 24876 1780d 89D9     		movl	%ebx, %ecx
+ 24877 1780f 89C2     		movl	%eax, %edx
+ 24878 17811 488D3500 		leaq	.LC11(%rip), %rsi
+ 24878      000000
+ 24879 17818 488D3D00 		leaq	.LC1(%rip), %rdi
+ 24879      000000
+ 24880 1781f B8000000 		movl	$0, %eax
+ 24880      00
+ 24881 17824 E8000000 		call	KDbgMsg at PLT
+ 24881      00
+ 24882              	.L661:
+ 24883              	.LBE2899:
+2256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 24884              		.loc 2 2256 0
+ 24885 17829 F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 24885      A0FDFFFF 
+ 24886              	.LBE2866:
+ 24887              	.LBE2865:
+2280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 24888              		.loc 2 2280 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 749
+
+
+ 24889 17831 4881C488 		addq	$2696, %rsp
+ 24889      0A0000
+ 24890 17838 5B       		popq	%rbx
+ 24891 17839 415C     		popq	%r12
+ 24892 1783b 415D     		popq	%r13
+ 24893 1783d 415E     		popq	%r14
+ 24894 1783f 415F     		popq	%r15
+ 24895 17841 C9       		leave
+ 24896 17842 C3       		ret
+ 24897              		.cfi_endproc
+ 24898              	.LFE577:
+ 24899              		.size	KAESBlockCipherVecEqInvCipher, .-KAESBlockCipherVecEqInvCipher
+ 24900              		.section	.rodata
+ 24901              		.type	KAESBlockCipherVecaes_ncbi_name, @object
+ 24902              		.size	KAESBlockCipherVecaes_ncbi_name, 10
+ 24903              	KAESBlockCipherVecaes_ncbi_name:
+ 24904 0460 4145535F 		.string	"AES_CLASS"
+ 24904      434C4153 
+ 24904      5300
+ 24905              		.text
+ 24906              		.type	KAESBlockCipherVecDestroy, @function
+ 24907              	KAESBlockCipherVecDestroy:
+ 24908              	.LFB578:
+2308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 24909              		.loc 2 2308 0
+ 24910              		.cfi_startproc
+ 24911 17843 55       		pushq	%rbp
+ 24912              	.LCFI20:
+ 24913              		.cfi_def_cfa_offset 16
+ 24914 17844 4889E5   		movq	%rsp, %rbp
+ 24915              		.cfi_offset 6, -16
+ 24916              	.LCFI21:
+ 24917              		.cfi_def_cfa_register 6
+ 24918 17847 48897DF8 		movq	%rdi, -8(%rbp)
+2310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 24919              		.loc 2 2310 0
+ 24920 1784b C9       		leave
+ 24921 1784c C3       		ret
+ 24922              		.cfi_endproc
+ 24923              	.LFE578:
+ 24924              		.size	KAESBlockCipherVecDestroy, .-KAESBlockCipherVecDestroy
+ 24925              		.type	KAESBlockCipherVecBlockSize, @function
+ 24926              	KAESBlockCipherVecBlockSize:
+ 24927              	.LFB579:
+2318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 24928              		.loc 2 2318 0
+ 24929              		.cfi_startproc
+ 24930 1784d 55       		pushq	%rbp
+ 24931              	.LCFI22:
+ 24932              		.cfi_def_cfa_offset 16
+ 24933 1784e 4889E5   		movq	%rsp, %rbp
+ 24934              		.cfi_offset 6, -16
+ 24935              	.LCFI23:
+ 24936              		.cfi_def_cfa_register 6
+2319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (uint32_t) sizeof (AESBlock);
+ 24937              		.loc 2 2319 0
+ 24938 17851 B8100000 		movl	$16, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 750
+
+
+ 24938      00
+2320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 24939              		.loc 2 2320 0
+ 24940 17856 C9       		leave
+ 24941 17857 C3       		ret
+ 24942              		.cfi_endproc
+ 24943              	.LFE579:
+ 24944              		.size	KAESBlockCipherVecBlockSize, .-KAESBlockCipherVecBlockSize
+ 24945              		.type	KAESBlockCipherVecKeySize, @function
+ 24946              	KAESBlockCipherVecKeySize:
+ 24947              	.LFB580:
+2333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 24948              		.loc 2 2333 0
+ 24949              		.cfi_startproc
+ 24950 17858 55       		pushq	%rbp
+ 24951              	.LCFI24:
+ 24952              		.cfi_def_cfa_offset 16
+ 24953 17859 4889E5   		movq	%rsp, %rbp
+ 24954              		.cfi_offset 6, -16
+ 24955              	.LCFI25:
+ 24956              		.cfi_def_cfa_register 6
+2334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (uint32_t) sizeof (AESKeySchedule);
+ 24957              		.loc 2 2334 0
+ 24958 1785c B8000100 		movl	$256, %eax
+ 24958      00
+2335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 24959              		.loc 2 2335 0
+ 24960 17861 C9       		leave
+ 24961 17862 C3       		ret
+ 24962              		.cfi_endproc
+ 24963              	.LFE580:
+ 24964              		.size	KAESBlockCipherVecKeySize, .-KAESBlockCipherVecKeySize
+ 24965              		.section	.rodata
+ 24966 046a 00000000 		.align 8
+ 24966      0000
+ 24967              	.LC15:
+ 24968 0470 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c"
+ 24968      652F726F 
+ 24968      6461726D 
+ 24968      65722F73 
+ 24968      72615F73 
+ 24969              		.text
+ 24970              		.type	KAESBlockCipherVecSetEncryptKey, @function
+ 24971              	KAESBlockCipherVecSetEncryptKey:
+ 24972              	.LFB581:
+2347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 24973              		.loc 2 2347 0
+ 24974              		.cfi_startproc
+ 24975 17863 55       		pushq	%rbp
+ 24976              	.LCFI26:
+ 24977              		.cfi_def_cfa_offset 16
+ 24978 17864 4889E5   		movq	%rsp, %rbp
+ 24979              		.cfi_offset 6, -16
+ 24980              	.LCFI27:
+ 24981              		.cfi_def_cfa_register 6
+ 24982 17867 4883EC30 		subq	$48, %rsp
+ 24983 1786b 48897DE8 		movq	%rdi, -24(%rbp)
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 751
+
+
+ 24984 1786f 488975E0 		movq	%rsi, -32(%rbp)
+ 24985 17873 8955DC   		movl	%edx, -36(%rbp)
+2351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rc = 0;
+ 24986              		.loc 2 2351 0
+ 24987 17876 C745F400 		movl	$0, -12(%rbp)
+ 24987      000000
+2352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     key = encrypt_key;
+ 24988              		.loc 2 2352 0
+ 24989 1787d 488B45E8 		movq	-24(%rbp), %rax
+ 24990 17881 488945F8 		movq	%rax, -8(%rbp)
+2354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     switch (user_key_size)
+ 24991              		.loc 2 2354 0
+ 24992 17885 8B45DC   		movl	-36(%rbp), %eax
+ 24993 17888 83F818   		cmpl	$24, %eax
+ 24994 1788b 7430     		je	.L672
+ 24995 1788d 83F820   		cmpl	$32, %eax
+ 24996 17890 744E     		je	.L673
+ 24997 17892 83F810   		cmpl	$16, %eax
+ 24998 17895 756C     		jne	.L676
+ 24999              	.L671:
+2357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         key->number_of_rounds = AES_Nr_128;
+ 25000              		.loc 2 2357 0
+ 25001 17897 488B45F8 		movq	-8(%rbp), %rax
+ 25002 1789b C780F000 		movl	$10, 240(%rax)
+ 25002      00000A00 
+ 25002      0000
+2358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESBCMEMBER(KeyExpansion128) (key->round_keys, (AESByte*)user_key);
+ 25003              		.loc 2 2358 0
+ 25004 178a5 488B55E0 		movq	-32(%rbp), %rdx
+ 25005 178a9 488B45F8 		movq	-8(%rbp), %rax
+ 25006 178ad 4889D6   		movq	%rdx, %rsi
+ 25007 178b0 4889C7   		movq	%rax, %rdi
+ 25008 178b3 E85C87FE 		call	KAESBlockCipherVecKeyExpansion128
+ 25008      FF
+2359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 25009              		.loc 2 2359 0
+ 25010 178b8 E98A0000 		jmp	.L674
+ 25010      00
+ 25011              	.L672:
+2362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         key->number_of_rounds = AES_Nr_192;
+ 25012              		.loc 2 2362 0
+ 25013 178bd 488B45F8 		movq	-8(%rbp), %rax
+ 25014 178c1 C780F000 		movl	$12, 240(%rax)
+ 25014      00000C00 
+ 25014      0000
+2363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESBCMEMBER(KeyExpansion192) (key->round_keys, (AESByte*)user_key);
+ 25015              		.loc 2 2363 0
+ 25016 178cb 488B55E0 		movq	-32(%rbp), %rdx
+ 25017 178cf 488B45F8 		movq	-8(%rbp), %rax
+ 25018 178d3 4889D6   		movq	%rdx, %rsi
+ 25019 178d6 4889C7   		movq	%rax, %rdi
+ 25020 178d9 E84003FF 		call	KAESBlockCipherVecKeyExpansion192
+ 25020      FF
+2364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 25021              		.loc 2 2364 0
+ 25022 178de EB67     		jmp	.L674
+ 25023              	.L673:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 752
+
+
+2367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         key->number_of_rounds = AES_Nr_256;
+ 25024              		.loc 2 2367 0
+ 25025 178e0 488B45F8 		movq	-8(%rbp), %rax
+ 25026 178e4 C780F000 		movl	$14, 240(%rax)
+ 25026      00000E00 
+ 25026      0000
+2368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESBCMEMBER(KeyExpansion256) (key->round_keys, (AESByte*)user_key);
+ 25027              		.loc 2 2368 0
+ 25028 178ee 488B55E0 		movq	-32(%rbp), %rdx
+ 25029 178f2 488B45F8 		movq	-8(%rbp), %rax
+ 25030 178f6 4889D6   		movq	%rdx, %rsi
+ 25031 178f9 4889C7   		movq	%rax, %rdi
+ 25032 178fc E85553FF 		call	KAESBlockCipherVecKeyExpansion256
+ 25032      FF
+2369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 25033              		.loc 2 2369 0
+ 25034 17901 EB44     		jmp	.L674
+ 25035              	.L676:
+2372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         key->number_of_rounds = 0;
+ 25036              		.loc 2 2372 0
+ 25037 17903 488B45F8 		movq	-8(%rbp), %rax
+ 25038 17907 C780F000 		movl	$0, 240(%rax)
+ 25038      00000000 
+ 25038      0000
+2373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         memset (key, 0, sizeof (*key));
+ 25039              		.loc 2 2373 0
+ 25040 17911 488B45F8 		movq	-8(%rbp), %rax
+ 25041 17915 BA000100 		movl	$256, %edx
+ 25041      00
+ 25042 1791a BE000000 		movl	$0, %esi
+ 25042      00
+ 25043 1791f 4889C7   		movq	%rax, %rdi
+ 25044 17922 E8000000 		call	memset at PLT
+ 25044      00
+2374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         rc = RC (rcKrypto, rcBlockCipher, rcUpdating, rcParam, rcInvalid);
+ 25045              		.loc 2 2374 0
+ 25046 17927 B9460900 		movl	$2374, %ecx
+ 25046      00
+ 25047 1792c 488D1500 		leaq	__func__.8464(%rip), %rdx
+ 25047      000000
+ 25048 17933 488D3500 		leaq	.LC15(%rip), %rsi
+ 25048      000000
+ 25049 1793a BFCA8F04 		movl	$-2029744182, %edi
+ 25049      87
+ 25050 1793f E8000000 		call	SetRCFileFuncLine at PLT
+ 25050      00
+ 25051 17944 8945F4   		movl	%eax, -12(%rbp)
+ 25052              	.L674:
+2377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return rc;
+ 25053              		.loc 2 2377 0
+ 25054 17947 8B45F4   		movl	-12(%rbp), %eax
+2378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 25055              		.loc 2 2378 0
+ 25056 1794a C9       		leave
+ 25057 1794b C3       		ret
+ 25058              		.cfi_endproc
+ 25059              	.LFE581:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 753
+
+
+ 25060              		.size	KAESBlockCipherVecSetEncryptKey, .-KAESBlockCipherVecSetEncryptKey
+ 25061              		.type	KAESBlockCipherVecSetDecryptKey, @function
+ 25062              	KAESBlockCipherVecSetDecryptKey:
+ 25063              	.LFB582:
+2391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 25064              		.loc 2 2391 0
+ 25065              		.cfi_startproc
+ 25066 1794c 55       		pushq	%rbp
+ 25067              	.LCFI28:
+ 25068              		.cfi_def_cfa_offset 16
+ 25069 1794d 4889E5   		movq	%rsp, %rbp
+ 25070              		.cfi_offset 6, -16
+ 25071              	.LCFI29:
+ 25072              		.cfi_def_cfa_register 6
+ 25073 17950 4881EC30 		subq	$304, %rsp
+ 25073      010000
+ 25074 17957 4889BDE8 		movq	%rdi, -280(%rbp)
+ 25074      FEFFFF
+ 25075 1795e 4889B5E0 		movq	%rsi, -288(%rbp)
+ 25075      FEFFFF
+ 25076 17965 8995DCFE 		movl	%edx, -292(%rbp)
+ 25076      FFFF
+2395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rc = AESBCMEMBER(SetEncryptKey) (&encrypt_key, user_key, user_key_size);
+ 25077              		.loc 2 2395 0
+ 25078 1796b 8B95DCFE 		movl	-292(%rbp), %edx
+ 25078      FFFF
+ 25079 17971 488B8DE0 		movq	-288(%rbp), %rcx
+ 25079      FEFFFF
+ 25080 17978 488D85F0 		leaq	-272(%rbp), %rax
+ 25080      FEFFFF
+ 25081 1797f 4889CE   		movq	%rcx, %rsi
+ 25082 17982 4889C7   		movq	%rax, %rdi
+ 25083 17985 E8D9FEFF 		call	KAESBlockCipherVecSetEncryptKey
+ 25083      FF
+ 25084 1798a 8945F4   		movl	%eax, -12(%rbp)
+2396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     if (rc == 0)
+ 25085              		.loc 2 2396 0
+ 25086 1798d 837DF400 		cmpl	$0, -12(%rbp)
+ 25087 17991 7577     		jne	.L678
+ 25088              	.LBB2900:
+2400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         key = decrypt_key;
+ 25089              		.loc 2 2400 0
+ 25090 17993 488B85E8 		movq	-280(%rbp), %rax
+ 25090      FEFFFF
+ 25091 1799a 488945F8 		movq	%rax, -8(%rbp)
+2402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         switch (key->number_of_rounds = encrypt_key.number_of_rounds)
+ 25092              		.loc 2 2402 0
+ 25093 1799e 8B55E0   		movl	-32(%rbp), %edx
+ 25094 179a1 488B45F8 		movq	-8(%rbp), %rax
+ 25095 179a5 8990F000 		movl	%edx, 240(%rax)
+ 25095      0000
+ 25096 179ab 488B45F8 		movq	-8(%rbp), %rax
+ 25097 179af 8B80F000 		movl	240(%rax), %eax
+ 25097      0000
+ 25098 179b5 83F80C   		cmpl	$12, %eax
+ 25099 179b8 7422     		je	.L680
+ 25100 179ba 83F80E   		cmpl	$14, %eax
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 754
+
+
+ 25101 179bd 7435     		je	.L681
+ 25102 179bf 83F80A   		cmpl	$10, %eax
+ 25103 179c2 7546     		jne	.L678
+ 25104              	.L679:
+2405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             AESBCMEMBER(EqInvKeyExpansion128) (key->round_keys,
+ 25105              		.loc 2 2405 0
+ 25106 179c4 488B45F8 		movq	-8(%rbp), %rax
+ 25107 179c8 488D95F0 		leaq	-272(%rbp), %rdx
+ 25107      FEFFFF
+ 25108 179cf 4889D6   		movq	%rdx, %rsi
+ 25109 179d2 4889C7   		movq	%rax, %rdi
+ 25110 179d5 E8C8C1FF 		call	KAESBlockCipherVecEqInvKeyExpansion128
+ 25110      FF
+2407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             break;
+ 25111              		.loc 2 2407 0
+ 25112 179da EB2E     		jmp	.L678
+ 25113              	.L680:
+2410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             AESBCMEMBER(EqInvKeyExpansion192) (key->round_keys,
+ 25114              		.loc 2 2410 0
+ 25115 179dc 488B45F8 		movq	-8(%rbp), %rax
+ 25116 179e0 488D95F0 		leaq	-272(%rbp), %rdx
+ 25116      FEFFFF
+ 25117 179e7 4889D6   		movq	%rdx, %rsi
+ 25118 179ea 4889C7   		movq	%rax, %rdi
+ 25119 179ed E8DAC1FF 		call	KAESBlockCipherVecEqInvKeyExpansion192
+ 25119      FF
+2412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             break;
+ 25120              		.loc 2 2412 0
+ 25121 179f2 EB16     		jmp	.L678
+ 25122              	.L681:
+2415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             AESBCMEMBER(EqInvKeyExpansion256) (key->round_keys,
+ 25123              		.loc 2 2415 0
+ 25124 179f4 488B45F8 		movq	-8(%rbp), %rax
+ 25125 179f8 488D95F0 		leaq	-272(%rbp), %rdx
+ 25125      FEFFFF
+ 25126 179ff 4889D6   		movq	%rdx, %rsi
+ 25127 17a02 4889C7   		movq	%rax, %rdi
+ 25128 17a05 E8ECC1FF 		call	KAESBlockCipherVecEqInvKeyExpansion256
+ 25128      FF
+ 25129              	.L678:
+ 25130              	.LBE2900:
+2420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return rc;
+ 25131              		.loc 2 2420 0
+ 25132 17a0a 8B45F4   		movl	-12(%rbp), %eax
+2421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 25133              		.loc 2 2421 0
+ 25134 17a0d C9       		leave
+ 25135 17a0e C3       		ret
+ 25136              		.cfi_endproc
+ 25137              	.LFE582:
+ 25138              		.size	KAESBlockCipherVecSetDecryptKey, .-KAESBlockCipherVecSetDecryptKey
+ 25139              		.section	.rodata
+ 25140              	.LC16:
+ 25141 04a6 6B657900 		.string	"key"
+ 25142              		.text
+ 25143              		.type	KAESBlockCipherVecEncrypt, @function
+ 25144              	KAESBlockCipherVecEncrypt:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 755
+
+
+ 25145              	.LFB583:
+2434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 25146              		.loc 2 2434 0
+ 25147              		.cfi_startproc
+ 25148 17a0f 55       		pushq	%rbp
+ 25149              	.LCFI30:
+ 25150              		.cfi_def_cfa_offset 16
+ 25151 17a10 4889E5   		movq	%rsp, %rbp
+ 25152              		.cfi_offset 6, -16
+ 25153              	.LCFI31:
+ 25154              		.cfi_def_cfa_register 6
+ 25155 17a13 4883EC30 		subq	$48, %rsp
+ 25156 17a17 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 25156      E0
+ 25157 17a1c 48897DD8 		movq	%rdi, -40(%rbp)
+2435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     const AESKeySchedule * key = encrypt_key;
+ 25158              		.loc 2 2435 0
+ 25159 17a20 488B45D8 		movq	-40(%rbp), %rax
+ 25160 17a24 488945F8 		movq	%rax, -8(%rbp)
+2436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     assert (key);
+ 25161              		.loc 2 2436 0
+ 25162 17a28 48837DF8 		cmpq	$0, -8(%rbp)
+ 25162      00
+ 25163 17a2d 751F     		jne	.L684
+ 25164 17a2f 488D0D00 		leaq	__PRETTY_FUNCTION__.8500(%rip), %rcx
+ 25164      000000
+ 25165 17a36 BA840900 		movl	$2436, %edx
+ 25165      00
+ 25166 17a3b 488D3500 		leaq	.LC15(%rip), %rsi
+ 25166      000000
+ 25167 17a42 488D3D00 		leaq	.LC16(%rip), %rdi
+ 25167      000000
+ 25168 17a49 E8000000 		call	__assert_fail at PLT
+ 25168      00
+ 25169              	.L684:
+2438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     switch (key->number_of_rounds)
+ 25170              		.loc 2 2438 0
+ 25171 17a4e 488B45F8 		movq	-8(%rbp), %rax
+ 25172 17a52 8B80F000 		movl	240(%rax), %eax
+ 25172      0000
+ 25173 17a58 83F80C   		cmpl	$12, %eax
+ 25174 17a5b 7436     		je	.L687
+ 25175 17a5d 83F80E   		cmpl	$14, %eax
+ 25176 17a60 744E     		je	.L688
+ 25177 17a62 83F80A   		cmpl	$10, %eax
+ 25178 17a65 740F     		je	.L686
+2441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = vec_00;
+ 25179              		.loc 2 2441 0
+ 25180 17a67 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 25180      00000000 
+ 25181 17a6f 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 25181      E0
+2442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 25182              		.loc 2 2442 0
+ 25183 17a74 EB55     		jmp	.L689
+ 25184              	.L686:
+2445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_128);
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 756
+
+
+ 25185              		.loc 2 2445 0
+ 25186 17a76 488B45F8 		movq	-8(%rbp), %rax
+ 25187 17a7a 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 25187      E0
+ 25188 17a7f BE0A0000 		movl	$10, %esi
+ 25188      00
+ 25189 17a84 4889C7   		movq	%rax, %rdi
+ 25190 17a87 E894C1FF 		call	KAESBlockCipherVecCipher
+ 25190      FF
+ 25191 17a8c 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 25191      E0
+2446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 25192              		.loc 2 2446 0
+ 25193 17a91 EB38     		jmp	.L689
+ 25194              	.L687:
+2449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_192);
+ 25195              		.loc 2 2449 0
+ 25196 17a93 488B45F8 		movq	-8(%rbp), %rax
+ 25197 17a97 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 25197      E0
+ 25198 17a9c BE0C0000 		movl	$12, %esi
+ 25198      00
+ 25199 17aa1 4889C7   		movq	%rax, %rdi
+ 25200 17aa4 E877C1FF 		call	KAESBlockCipherVecCipher
+ 25200      FF
+ 25201 17aa9 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 25201      E0
+2450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 25202              		.loc 2 2450 0
+ 25203 17aae EB1B     		jmp	.L689
+ 25204              	.L688:
+2453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_256);
+ 25205              		.loc 2 2453 0
+ 25206 17ab0 488B45F8 		movq	-8(%rbp), %rax
+ 25207 17ab4 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 25207      E0
+ 25208 17ab9 BE0E0000 		movl	$14, %esi
+ 25208      00
+ 25209 17abe 4889C7   		movq	%rax, %rdi
+ 25210 17ac1 E85AC1FF 		call	KAESBlockCipherVecCipher
+ 25210      FF
+ 25211 17ac6 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 25211      E0
+ 25212              	.L689:
+2457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 25213              		.loc 2 2457 0
+ 25214 17acb 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 25214      E0
+2458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 25215              		.loc 2 2458 0
+ 25216 17ad0 C9       		leave
+ 25217 17ad1 C3       		ret
+ 25218              		.cfi_endproc
+ 25219              	.LFE583:
+ 25220              		.size	KAESBlockCipherVecEncrypt, .-KAESBlockCipherVecEncrypt
+ 25221              		.type	KAESBlockCipherVecDecrypt, @function
+ 25222              	KAESBlockCipherVecDecrypt:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 757
+
+
+ 25223              	.LFB584:
+2470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 25224              		.loc 2 2470 0
+ 25225              		.cfi_startproc
+ 25226 17ad2 55       		pushq	%rbp
+ 25227              	.LCFI32:
+ 25228              		.cfi_def_cfa_offset 16
+ 25229 17ad3 4889E5   		movq	%rsp, %rbp
+ 25230              		.cfi_offset 6, -16
+ 25231              	.LCFI33:
+ 25232              		.cfi_def_cfa_register 6
+ 25233 17ad6 4883EC30 		subq	$48, %rsp
+ 25234 17ada 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 25234      E0
+ 25235 17adf 48897DD8 		movq	%rdi, -40(%rbp)
+2471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     const AESKeySchedule * key = decrypt_key;
+ 25236              		.loc 2 2471 0
+ 25237 17ae3 488B45D8 		movq	-40(%rbp), %rax
+ 25238 17ae7 488945F8 		movq	%rax, -8(%rbp)
+2473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     assert (key);
+ 25239              		.loc 2 2473 0
+ 25240 17aeb 48837DF8 		cmpq	$0, -8(%rbp)
+ 25240      00
+ 25241 17af0 751F     		jne	.L692
+ 25242 17af2 488D0D00 		leaq	__PRETTY_FUNCTION__.8521(%rip), %rcx
+ 25242      000000
+ 25243 17af9 BAA90900 		movl	$2473, %edx
+ 25243      00
+ 25244 17afe 488D3500 		leaq	.LC15(%rip), %rsi
+ 25244      000000
+ 25245 17b05 488D3D00 		leaq	.LC16(%rip), %rdi
+ 25245      000000
+ 25246 17b0c E8000000 		call	__assert_fail at PLT
+ 25246      00
+ 25247              	.L692:
+2475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     switch (key->number_of_rounds)
+ 25248              		.loc 2 2475 0
+ 25249 17b11 488B45F8 		movq	-8(%rbp), %rax
+ 25250 17b15 8B80F000 		movl	240(%rax), %eax
+ 25250      0000
+ 25251 17b1b 83F80C   		cmpl	$12, %eax
+ 25252 17b1e 7436     		je	.L695
+ 25253 17b20 83F80E   		cmpl	$14, %eax
+ 25254 17b23 744E     		je	.L696
+ 25255 17b25 83F80A   		cmpl	$10, %eax
+ 25256 17b28 740F     		je	.L694
+2478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = vec_00; /* for an illegal cipher key schedule just write zeroes */
+ 25257              		.loc 2 2478 0
+ 25258 17b2a 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 25258      00000000 
+ 25259 17b32 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 25259      E0
+2479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 25260              		.loc 2 2479 0
+ 25261 17b37 EB55     		jmp	.L697
+ 25262              	.L694:
+2482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 758
+
+
+ 25263              		.loc 2 2482 0
+ 25264 17b39 488B45F8 		movq	-8(%rbp), %rax
+ 25265 17b3d 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 25265      E0
+ 25266 17b42 BE0A0000 		movl	$10, %esi
+ 25266      00
+ 25267 17b47 4889C7   		movq	%rax, %rdi
+ 25268 17b4a E8C7DDFF 		call	KAESBlockCipherVecEqInvCipher
+ 25268      FF
+ 25269 17b4f 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 25269      E0
+2484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 25270              		.loc 2 2484 0
+ 25271 17b54 EB38     		jmp	.L697
+ 25272              	.L695:
+2487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+ 25273              		.loc 2 2487 0
+ 25274 17b56 488B45F8 		movq	-8(%rbp), %rax
+ 25275 17b5a 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 25275      E0
+ 25276 17b5f BE0C0000 		movl	$12, %esi
+ 25276      00
+ 25277 17b64 4889C7   		movq	%rax, %rdi
+ 25278 17b67 E8AADDFF 		call	KAESBlockCipherVecEqInvCipher
+ 25278      FF
+ 25279 17b6c 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 25279      E0
+2489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 25280              		.loc 2 2489 0
+ 25281 17b71 EB1B     		jmp	.L697
+ 25282              	.L696:
+2492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+ 25283              		.loc 2 2492 0
+ 25284 17b73 488B45F8 		movq	-8(%rbp), %rax
+ 25285 17b77 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 25285      E0
+ 25286 17b7c BE0E0000 		movl	$14, %esi
+ 25286      00
+ 25287 17b81 4889C7   		movq	%rax, %rdi
+ 25288 17b84 E88DDDFF 		call	KAESBlockCipherVecEqInvCipher
+ 25288      FF
+ 25289 17b89 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 25289      E0
+ 25290              	.L697:
+2497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 25291              		.loc 2 2497 0
+ 25292 17b8e 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 25292      E0
+2498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 25293              		.loc 2 2498 0
+ 25294 17b93 C9       		leave
+ 25295 17b94 C3       		ret
+ 25296              		.cfi_endproc
+ 25297              	.LFE584:
+ 25298              		.size	KAESBlockCipherVecDecrypt, .-KAESBlockCipherVecDecrypt
+ 25299              		.section	.rodata
+ 25300 04aa 00000000 		.align 8
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 759
+
+
+ 25300      0000
+ 25301              	.LC17:
+ 25302 04b0 25733A20 		.string	"%s: level %x a %x, b %x c %x d %x\n"
+ 25302      6C657665 
+ 25302      6C202578 
+ 25302      20612025 
+ 25302      782C2062 
+ 25303              	.LC18:
+ 25304 04d3 25733A20 		.string	"%s: passed\n"
+ 25304      70617373 
+ 25304      65640A00 
+ 25305              		.text
+ 25306              		.type	KAESBlockCipherVecProcessorSupport, @function
+ 25307              	KAESBlockCipherVecProcessorSupport:
+ 25308              	.LFB585:
+2509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 25309              		.loc 2 2509 0
+ 25310              		.cfi_startproc
+ 25311 17b95 55       		pushq	%rbp
+ 25312              	.LCFI34:
+ 25313              		.cfi_def_cfa_offset 16
+ 25314 17b96 4889E5   		movq	%rsp, %rbp
+ 25315              		.cfi_offset 6, -16
+ 25316              	.LCFI35:
+ 25317              		.cfi_def_cfa_register 6
+ 25318 17b99 53       		pushq	%rbx
+ 25319 17b9a 4883EC38 		subq	$56, %rsp
+2510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     uint32_t level = 1, a, b, c, d;
+ 25320              		.loc 2 2510 0
+ 25321 17b9e C745D801 		movl	$1, -40(%rbp)
+ 25321      000000
+2511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     bool ret = true;
+ 25322              		.loc 2 2511 0
+ 25323 17ba5 C645EF01 		movb	$1, -17(%rbp)
+2513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __cpuid (level, a, b, c, d);
+ 25324              		.loc 2 2513 0
+ 25325 17ba9 8B45D8   		movl	-40(%rbp), %eax
+ 25326              	#APP
+ 25327              	# 2513 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 25328              		cpuid
+ 25329              		
+ 25330              	# 0 "" 2
+ 25331              	#NO_APP
+ 25332 17bae 8945DC   		movl	%eax, -36(%rbp)
+ 25333 17bb1 895DE0   		movl	%ebx, -32(%rbp)
+ 25334 17bb4 894DE4   		movl	%ecx, -28(%rbp)
+ 25335 17bb7 8955E8   		movl	%edx, -24(%rbp)
+2515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_OBJECT(("%s: level %x a %x, b %x c %x d %x\n",__func__, level, a,b,c,d));
+ 25336              		.loc 2 2515 0
+ 25337              		.cfi_offset 3, -24
+ 25338 17bba E8000000 		call	KDbgWriterGet at PLT
+ 25338      00
+ 25339 17bbf 4885C0   		testq	%rax, %rax
+ 25340 17bc2 744F     		je	.L701
+ 25341 17bc4 BF040000 		movl	$4, %edi
+ 25341      00
+ 25342 17bc9 E8000000 		call	KDbgCondToFlag at PLT
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 760
+
+
+ 25342      00
+ 25343 17bce 4889C6   		movq	%rax, %rsi
+ 25344 17bd1 BF100000 		movl	$16, %edi
+ 25344      00
+ 25345 17bd6 E8000000 		call	KDbgTestModConds at PLT
+ 25345      00
+ 25346 17bdb 84C0     		testb	%al, %al
+ 25347 17bdd 7434     		je	.L701
+ 25348 17bdf 8B75E4   		movl	-28(%rbp), %esi
+ 25349 17be2 8B5DE0   		movl	-32(%rbp), %ebx
+ 25350 17be5 8B55DC   		movl	-36(%rbp), %edx
+ 25351 17be8 8B45D8   		movl	-40(%rbp), %eax
+ 25352 17beb 8B4DE8   		movl	-24(%rbp), %ecx
+ 25353 17bee 890C24   		movl	%ecx, (%rsp)
+ 25354 17bf1 4189F1   		movl	%esi, %r9d
+ 25355 17bf4 4189D8   		movl	%ebx, %r8d
+ 25356 17bf7 89D1     		movl	%edx, %ecx
+ 25357 17bf9 89C2     		movl	%eax, %edx
+ 25358 17bfb 488D3500 		leaq	__func__.8545(%rip), %rsi
+ 25358      000000
+ 25359 17c02 488D3D00 		leaq	.LC17(%rip), %rdi
+ 25359      000000
+ 25360 17c09 B8000000 		movl	$0, %eax
+ 25360      00
+ 25361 17c0e E8000000 		call	KDbgMsg at PLT
+ 25361      00
+ 25362              	.L701:
+2575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_OBJECT(("%s: passed\n",__func__));
+ 25363              		.loc 2 2575 0
+ 25364 17c13 E8000000 		call	KDbgWriterGet at PLT
+ 25364      00
+ 25365 17c18 4885C0   		testq	%rax, %rax
+ 25366 17c1b 7433     		je	.L703
+ 25367 17c1d BF040000 		movl	$4, %edi
+ 25367      00
+ 25368 17c22 E8000000 		call	KDbgCondToFlag at PLT
+ 25368      00
+ 25369 17c27 4889C6   		movq	%rax, %rsi
+ 25370 17c2a BF100000 		movl	$16, %edi
+ 25370      00
+ 25371 17c2f E8000000 		call	KDbgTestModConds at PLT
+ 25371      00
+ 25372 17c34 84C0     		testb	%al, %al
+ 25373 17c36 7418     		je	.L703
+ 25374 17c38 488D3500 		leaq	__func__.8545(%rip), %rsi
+ 25374      000000
+ 25375 17c3f 488D3D00 		leaq	.LC18(%rip), %rdi
+ 25375      000000
+ 25376 17c46 B8000000 		movl	$0, %eax
+ 25376      00
+ 25377 17c4b E8000000 		call	KDbgMsg at PLT
+ 25377      00
+ 25378              	.L703:
+2576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return ret;
+ 25379              		.loc 2 2576 0
+ 25380 17c50 0FB645EF 		movzbl	-17(%rbp), %eax
+2577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 761
+
+
+ 25381              		.loc 2 2577 0
+ 25382 17c54 4883C438 		addq	$56, %rsp
+ 25383 17c58 5B       		popq	%rbx
+ 25384 17c59 C9       		leave
+ 25385 17c5a C3       		ret
+ 25386              		.cfi_endproc
+ 25387              	.LFE585:
+ 25388              		.size	KAESBlockCipherVecProcessorSupport, .-KAESBlockCipherVecProcessorSupport
+ 25389              		.section	.data.rel.ro.local,"aw", at progbits
+ 25390              		.align 32
+ 25391              		.type	KAESBlockCipherVec_vt_, @object
+ 25392              		.size	KAESBlockCipherVec_vt_, 64
+ 25393              	KAESBlockCipherVec_vt_:
+ 25394 0000 01000000 		.long	1
+ 25395 0004 01000000 		.long	1
+ 25396 0008 00000000 		.quad	KAESBlockCipherVecDestroy
+ 25396      00000000 
+ 25397 0010 00000000 		.quad	KAESBlockCipherVecBlockSize
+ 25397      00000000 
+ 25398 0018 00000000 		.quad	KAESBlockCipherVecKeySize
+ 25398      00000000 
+ 25399 0020 00000000 		.quad	KAESBlockCipherVecSetEncryptKey
+ 25399      00000000 
+ 25400 0028 00000000 		.quad	KAESBlockCipherVecSetDecryptKey
+ 25400      00000000 
+ 25401 0030 00000000 		.quad	KAESBlockCipherVecEncrypt
+ 25401      00000000 
+ 25402 0038 00000000 		.quad	KAESBlockCipherVecDecrypt
+ 25402      00000000 
+ 25403              		.section	.rodata
+ 25404              	.LC19:
+ 25405 04df 25733A20 		.string	"%s: %p\n"
+ 25405      25700A00 
+ 25406              		.text
+ 25407              	.globl KAESBlockCipherVecMake
+ 25408              		.type	KAESBlockCipherVecMake, @function
+ 25409              	KAESBlockCipherVecMake:
+ 25410              	.LFB586:
+2618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 25411              		.loc 2 2618 0
+ 25412              		.cfi_startproc
+ 25413 17c5b 55       		pushq	%rbp
+ 25414              	.LCFI36:
+ 25415              		.cfi_def_cfa_offset 16
+ 25416 17c5c 4889E5   		movq	%rsp, %rbp
+ 25417              		.cfi_offset 6, -16
+ 25418              	.LCFI37:
+ 25419              		.cfi_def_cfa_register 6
+ 25420 17c5f 4883EC20 		subq	$32, %rsp
+ 25421 17c63 48897DE8 		movq	%rdi, -24(%rbp)
+2621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_OBJECT(("%s: %p\n",__func__,new_obj));
+ 25422              		.loc 2 2621 0
+ 25423 17c67 E8000000 		call	KDbgWriterGet at PLT
+ 25423      00
+ 25424 17c6c 4885C0   		testq	%rax, %rax
+ 25425 17c6f 743A     		je	.L707
+ 25426 17c71 BF040000 		movl	$4, %edi
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 762
+
+
+ 25426      00
+ 25427 17c76 E8000000 		call	KDbgCondToFlag at PLT
+ 25427      00
+ 25428 17c7b 4889C6   		movq	%rax, %rsi
+ 25429 17c7e BF100000 		movl	$16, %edi
+ 25429      00
+ 25430 17c83 E8000000 		call	KDbgTestModConds at PLT
+ 25430      00
+ 25431 17c88 84C0     		testb	%al, %al
+ 25432 17c8a 741F     		je	.L707
+ 25433 17c8c 488B45E8 		movq	-24(%rbp), %rax
+ 25434 17c90 4889C2   		movq	%rax, %rdx
+ 25435 17c93 488D3500 		leaq	__func__.8570(%rip), %rsi
+ 25435      000000
+ 25436 17c9a 488D3D00 		leaq	.LC19(%rip), %rdi
+ 25436      000000
+ 25437 17ca1 B8000000 		movl	$0, %eax
+ 25437      00
+ 25438 17ca6 E8000000 		call	KDbgMsg at PLT
+ 25438      00
+ 25439              	.L707:
+2624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     if (new_obj == NULL)
+ 25440              		.loc 2 2624 0
+ 25441 17cab 48837DE8 		cmpq	$0, -24(%rbp)
+ 25441      00
+ 25442 17cb0 7522     		jne	.L708
+2625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+ 25443              		.loc 2 2625 0
+ 25444 17cb2 B9410A00 		movl	$2625, %ecx
+ 25444      00
+ 25445 17cb7 488D1500 		leaq	__func__.8570(%rip), %rdx
+ 25445      000000
+ 25446 17cbe 488D3500 		leaq	.LC15(%rip), %rsi
+ 25446      000000
+ 25447 17cc5 BF878F00 		movl	$-2030006393, %edi
+ 25447      87
+ 25448 17cca E8000000 		call	SetRCFileFuncLine at PLT
+ 25448      00
+ 25449 17ccf 8945FC   		movl	%eax, -4(%rbp)
+ 25450 17cd2 EB53     		jmp	.L709
+ 25451              	.L708:
+2629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         *new_obj = NULL;
+ 25452              		.loc 2 2629 0
+ 25453 17cd4 488B45E8 		movq	-24(%rbp), %rax
+ 25454 17cd8 48C70000 		movq	$0, (%rax)
+ 25454      000000
+2632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if ( ! AESBCMEMBER(ProcessorSupport)())
+ 25455              		.loc 2 2632 0
+ 25456 17cdf B8000000 		movl	$0, %eax
+ 25456      00
+ 25457 17ce4 E8ACFEFF 		call	KAESBlockCipherVecProcessorSupport
+ 25457      FF
+ 25458 17ce9 83F001   		xorl	$1, %eax
+ 25459 17cec 84C0     		testb	%al, %al
+ 25460 17cee 7422     		je	.L710
+2633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+ 25461              		.loc 2 2633 0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 763
+
+
+ 25462 17cf0 B9490A00 		movl	$2633, %ecx
+ 25462      00
+ 25463 17cf5 488D1500 		leaq	__func__.8570(%rip), %rdx
+ 25463      000000
+ 25464 17cfc 488D3500 		leaq	.LC15(%rip), %rsi
+ 25464      000000
+ 25465 17d03 BF038500 		movl	$-2030009085, %edi
+ 25465      87
+ 25466 17d08 E8000000 		call	SetRCFileFuncLine at PLT
+ 25466      00
+ 25467 17d0d 8945FC   		movl	%eax, -4(%rbp)
+ 25468 17d10 EB15     		jmp	.L709
+ 25469              	.L710:
+2637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             rc = 0;
+ 25470              		.loc 2 2637 0
+ 25471 17d12 C745FC00 		movl	$0, -4(%rbp)
+ 25471      000000
+2638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             *new_obj = (KBlockCipher*)&(AESBCMEMBER(_vt_));
+ 25472              		.loc 2 2638 0
+ 25473 17d19 488D1500 		leaq	KAESBlockCipherVec_vt_(%rip), %rdx
+ 25473      000000
+ 25474 17d20 488B45E8 		movq	-24(%rbp), %rax
+ 25475 17d24 488910   		movq	%rdx, (%rax)
+ 25476              	.L709:
+2641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return rc;
+ 25477              		.loc 2 2641 0
+ 25478 17d27 8B45FC   		movl	-4(%rbp), %eax
+ 25479              		.loc 2 2642 0
+ 25480 17d2a C9       		leave
+ 25481 17d2b C3       		ret
+ 25482              		.cfi_endproc
+ 25483              	.LFE586:
+ 25484              		.size	KAESBlockCipherVecMake, .-KAESBlockCipherVecMake
+ 25485              		.section	.rodata
+ 25486 04e7 00000000 		.align 16
+ 25486      00000000 
+ 25486      00
+ 25487              		.type	__func__.8570, @object
+ 25488              		.size	__func__.8570, 23
+ 25489              	__func__.8570:
+ 25490 04f0 4B414553 		.string	"KAESBlockCipherVecMake"
+ 25490      426C6F63 
+ 25490      6B436970 
+ 25490      68657256 
+ 25490      65634D61 
+ 25491 0507 00000000 		.align 16
+ 25491      00000000 
+ 25491      00
+ 25492              		.type	__PRETTY_FUNCTION__.8571, @object
+ 25493              		.size	__PRETTY_FUNCTION__.8571, 23
+ 25494              	__PRETTY_FUNCTION__.8571:
+ 25495 0510 4B414553 		.string	"KAESBlockCipherVecMake"
+ 25495      426C6F63 
+ 25495      6B436970 
+ 25495      68657256 
+ 25495      65634D61 
+ 25496 0527 00000000 		.align 32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 764
+
+
+ 25496      00000000 
+ 25496      00000000 
+ 25496      00000000 
+ 25496      00000000 
+ 25497              		.type	__func__.8545, @object
+ 25498              		.size	__func__.8545, 35
+ 25499              	__func__.8545:
+ 25500 0540 4B414553 		.string	"KAESBlockCipherVecProcessorSupport"
+ 25500      426C6F63 
+ 25500      6B436970 
+ 25500      68657256 
+ 25500      65635072 
+ 25501 0563 00000000 		.align 16
+ 25501      00000000 
+ 25501      00000000 
+ 25501      00
+ 25502              		.type	__PRETTY_FUNCTION__.8521, @object
+ 25503              		.size	__PRETTY_FUNCTION__.8521, 26
+ 25504              	__PRETTY_FUNCTION__.8521:
+ 25505 0570 4B414553 		.string	"KAESBlockCipherVecDecrypt"
+ 25505      426C6F63 
+ 25505      6B436970 
+ 25505      68657256 
+ 25505      65634465 
+ 25506 058a 00000000 		.align 16
+ 25506      0000
+ 25507              		.type	__PRETTY_FUNCTION__.8500, @object
+ 25508              		.size	__PRETTY_FUNCTION__.8500, 26
+ 25509              	__PRETTY_FUNCTION__.8500:
+ 25510 0590 4B414553 		.string	"KAESBlockCipherVecEncrypt"
+ 25510      426C6F63 
+ 25510      6B436970 
+ 25510      68657256 
+ 25510      6563456E 
+ 25511 05aa 00000000 		.align 16
+ 25511      0000
+ 25512              		.type	ShiftRowTable.6741, @object
+ 25513              		.size	ShiftRowTable.6741, 16
+ 25514              	ShiftRowTable.6741:
+ 25515 05b0 00       		.byte	0
+ 25516 05b1 05       		.byte	5
+ 25517 05b2 0A       		.byte	10
+ 25518 05b3 0F       		.byte	15
+ 25519 05b4 04       		.byte	4
+ 25520 05b5 09       		.byte	9
+ 25521 05b6 0E       		.byte	14
+ 25522 05b7 03       		.byte	3
+ 25523 05b8 08       		.byte	8
+ 25524 05b9 0D       		.byte	13
+ 25525 05ba 02       		.byte	2
+ 25526 05bb 07       		.byte	7
+ 25527 05bc 0C       		.byte	12
+ 25528 05bd 01       		.byte	1
+ 25529 05be 06       		.byte	6
+ 25530 05bf 0B       		.byte	11
+ 25531              		.align 16
+ 25532              		.type	ShiftRowTable.6768, @object
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 765
+
+
+ 25533              		.size	ShiftRowTable.6768, 16
+ 25534              	ShiftRowTable.6768:
+ 25535 05c0 01       		.byte	1
+ 25536 05c1 02       		.byte	2
+ 25537 05c2 03       		.byte	3
+ 25538 05c3 00       		.byte	0
+ 25539 05c4 05       		.byte	5
+ 25540 05c5 06       		.byte	6
+ 25541 05c6 07       		.byte	7
+ 25542 05c7 04       		.byte	4
+ 25543 05c8 09       		.byte	9
+ 25544 05c9 0A       		.byte	10
+ 25545 05ca 0B       		.byte	11
+ 25546 05cb 08       		.byte	8
+ 25547 05cc 0D       		.byte	13
+ 25548 05cd 0E       		.byte	14
+ 25549 05ce 0F       		.byte	15
+ 25550 05cf 0C       		.byte	12
+ 25551 05d0 00000000 		.align 32
+ 25551      00000000 
+ 25551      00000000 
+ 25551      00000000 
+ 25552              		.type	__func__.8464, @object
+ 25553              		.size	__func__.8464, 32
+ 25554              	__func__.8464:
+ 25555 05e0 4B414553 		.string	"KAESBlockCipherVecSetEncryptKey"
+ 25555      426C6F63 
+ 25555      6B436970 
+ 25555      68657256 
+ 25555      65635365 
+ 25556              		.align 32
+ 25557              		.type	__PRETTY_FUNCTION__.8463, @object
+ 25558              		.size	__PRETTY_FUNCTION__.8463, 32
+ 25559              	__PRETTY_FUNCTION__.8463:
+ 25560 0600 4B414553 		.string	"KAESBlockCipherVecSetEncryptKey"
+ 25560      426C6F63 
+ 25560      6B436970 
+ 25560      68657256 
+ 25560      65635365 
+ 25561              		.align 16
+ 25562              		.type	InvShiftRowTable.6750, @object
+ 25563              		.size	InvShiftRowTable.6750, 16
+ 25564              	InvShiftRowTable.6750:
+ 25565 0620 00       		.byte	0
+ 25566 0621 0D       		.byte	13
+ 25567 0622 0A       		.byte	10
+ 25568 0623 07       		.byte	7
+ 25569 0624 04       		.byte	4
+ 25570 0625 01       		.byte	1
+ 25571 0626 0E       		.byte	14
+ 25572 0627 0B       		.byte	11
+ 25573 0628 08       		.byte	8
+ 25574 0629 05       		.byte	5
+ 25575 062a 02       		.byte	2
+ 25576 062b 0F       		.byte	15
+ 25577 062c 0C       		.byte	12
+ 25578 062d 09       		.byte	9
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 766
+
+
+ 25579 062e 06       		.byte	6
+ 25580 062f 03       		.byte	3
+ 25581              		.text
+ 25582              	.Letext0:
+ 25583              		.section	.debug_loc,"", at progbits
+ 25584              	.Ldebug_loc0:
+ 25585              	.LLST0:
+ 25586 0000 00000000 		.quad	.LFB509-.Ltext0
+ 25586      00000000 
+ 25587 0008 01000000 		.quad	.LCFI0-.Ltext0
+ 25587      00000000 
+ 25588 0010 0200     		.value	0x2
+ 25589 0012 77       		.byte	0x77
+ 25590 0013 08       		.sleb128 8
+ 25591 0014 01000000 		.quad	.LCFI0-.Ltext0
+ 25591      00000000 
+ 25592 001c 04000000 		.quad	.LCFI1-.Ltext0
+ 25592      00000000 
+ 25593 0024 0200     		.value	0x2
+ 25594 0026 77       		.byte	0x77
+ 25595 0027 10       		.sleb128 16
+ 25596 0028 04000000 		.quad	.LCFI1-.Ltext0
+ 25596      00000000 
+ 25597 0030 14000000 		.quad	.LFE509-.Ltext0
+ 25597      00000000 
+ 25598 0038 0200     		.value	0x2
+ 25599 003a 76       		.byte	0x76
+ 25600 003b 10       		.sleb128 16
+ 25601 003c 00000000 		.quad	0x0
+ 25601      00000000 
+ 25602 0044 00000000 		.quad	0x0
+ 25602      00000000 
+ 25603              	.LLST1:
+ 25604 004c 14000000 		.quad	.LFB563-.Ltext0
+ 25604      00000000 
+ 25605 0054 15000000 		.quad	.LCFI2-.Ltext0
+ 25605      00000000 
+ 25606 005c 0200     		.value	0x2
+ 25607 005e 77       		.byte	0x77
+ 25608 005f 08       		.sleb128 8
+ 25609 0060 15000000 		.quad	.LCFI2-.Ltext0
+ 25609      00000000 
+ 25610 0068 18000000 		.quad	.LCFI3-.Ltext0
+ 25610      00000000 
+ 25611 0070 0200     		.value	0x2
+ 25612 0072 77       		.byte	0x77
+ 25613 0073 10       		.sleb128 16
+ 25614 0074 18000000 		.quad	.LCFI3-.Ltext0
+ 25614      00000000 
+ 25615 007c 1E7C0000 		.quad	.LFE563-.Ltext0
+ 25615      00000000 
+ 25616 0084 0200     		.value	0x2
+ 25617 0086 76       		.byte	0x76
+ 25618 0087 10       		.sleb128 16
+ 25619 0088 00000000 		.quad	0x0
+ 25619      00000000 
+ 25620 0090 00000000 		.quad	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 767
+
+
+ 25620      00000000 
+ 25621              	.LLST2:
+ 25622 0098 1E7C0000 		.quad	.LFB564-.Ltext0
+ 25622      00000000 
+ 25623 00a0 1F7C0000 		.quad	.LCFI4-.Ltext0
+ 25623      00000000 
+ 25624 00a8 0200     		.value	0x2
+ 25625 00aa 77       		.byte	0x77
+ 25626 00ab 08       		.sleb128 8
+ 25627 00ac 1F7C0000 		.quad	.LCFI4-.Ltext0
+ 25627      00000000 
+ 25628 00b4 227C0000 		.quad	.LCFI5-.Ltext0
+ 25628      00000000 
+ 25629 00bc 0200     		.value	0x2
+ 25630 00be 77       		.byte	0x77
+ 25631 00bf 10       		.sleb128 16
+ 25632 00c0 227C0000 		.quad	.LCFI5-.Ltext0
+ 25632      00000000 
+ 25633 00c8 56CC0000 		.quad	.LFE564-.Ltext0
+ 25633      00000000 
+ 25634 00d0 0200     		.value	0x2
+ 25635 00d2 76       		.byte	0x76
+ 25636 00d3 10       		.sleb128 16
+ 25637 00d4 00000000 		.quad	0x0
+ 25637      00000000 
+ 25638 00dc 00000000 		.quad	0x0
+ 25638      00000000 
+ 25639              	.LLST3:
+ 25640 00e4 56CC0000 		.quad	.LFB565-.Ltext0
+ 25640      00000000 
+ 25641 00ec 57CC0000 		.quad	.LCFI6-.Ltext0
+ 25641      00000000 
+ 25642 00f4 0200     		.value	0x2
+ 25643 00f6 77       		.byte	0x77
+ 25644 00f7 08       		.sleb128 8
+ 25645 00f8 57CC0000 		.quad	.LCFI6-.Ltext0
+ 25645      00000000 
+ 25646 0100 5ACC0000 		.quad	.LCFI7-.Ltext0
+ 25646      00000000 
+ 25647 0108 0200     		.value	0x2
+ 25648 010a 77       		.byte	0x77
+ 25649 010b 10       		.sleb128 16
+ 25650 010c 5ACC0000 		.quad	.LCFI7-.Ltext0
+ 25650      00000000 
+ 25651 0114 CF340100 		.quad	.LFE565-.Ltext0
+ 25651      00000000 
+ 25652 011c 0200     		.value	0x2
+ 25653 011e 76       		.byte	0x76
+ 25654 011f 10       		.sleb128 16
+ 25655 0120 00000000 		.quad	0x0
+ 25655      00000000 
+ 25656 0128 00000000 		.quad	0x0
+ 25656      00000000 
+ 25657              	.LLST4:
+ 25658 0130 CF340100 		.quad	.LFB566-.Ltext0
+ 25658      00000000 
+ 25659 0138 D0340100 		.quad	.LCFI8-.Ltext0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 768
+
+
+ 25659      00000000 
+ 25660 0140 0200     		.value	0x2
+ 25661 0142 77       		.byte	0x77
+ 25662 0143 08       		.sleb128 8
+ 25663 0144 D0340100 		.quad	.LCFI8-.Ltext0
+ 25663      00000000 
+ 25664 014c D3340100 		.quad	.LCFI9-.Ltext0
+ 25664      00000000 
+ 25665 0154 0200     		.value	0x2
+ 25666 0156 77       		.byte	0x77
+ 25667 0157 10       		.sleb128 16
+ 25668 0158 D3340100 		.quad	.LCFI9-.Ltext0
+ 25668      00000000 
+ 25669 0160 A23B0100 		.quad	.LFE566-.Ltext0
+ 25669      00000000 
+ 25670 0168 0200     		.value	0x2
+ 25671 016a 76       		.byte	0x76
+ 25672 016b 10       		.sleb128 16
+ 25673 016c 00000000 		.quad	0x0
+ 25673      00000000 
+ 25674 0174 00000000 		.quad	0x0
+ 25674      00000000 
+ 25675              	.LLST5:
+ 25676 017c A23B0100 		.quad	.LFB567-.Ltext0
+ 25676      00000000 
+ 25677 0184 A33B0100 		.quad	.LCFI10-.Ltext0
+ 25677      00000000 
+ 25678 018c 0200     		.value	0x2
+ 25679 018e 77       		.byte	0x77
+ 25680 018f 08       		.sleb128 8
+ 25681 0190 A33B0100 		.quad	.LCFI10-.Ltext0
+ 25681      00000000 
+ 25682 0198 A63B0100 		.quad	.LCFI11-.Ltext0
+ 25682      00000000 
+ 25683 01a0 0200     		.value	0x2
+ 25684 01a2 77       		.byte	0x77
+ 25685 01a3 10       		.sleb128 16
+ 25686 01a4 A63B0100 		.quad	.LCFI11-.Ltext0
+ 25686      00000000 
+ 25687 01ac CC3B0100 		.quad	.LFE567-.Ltext0
+ 25687      00000000 
+ 25688 01b4 0200     		.value	0x2
+ 25689 01b6 76       		.byte	0x76
+ 25690 01b7 10       		.sleb128 16
+ 25691 01b8 00000000 		.quad	0x0
+ 25691      00000000 
+ 25692 01c0 00000000 		.quad	0x0
+ 25692      00000000 
+ 25693              	.LLST6:
+ 25694 01c8 CC3B0100 		.quad	.LFB568-.Ltext0
+ 25694      00000000 
+ 25695 01d0 CD3B0100 		.quad	.LCFI12-.Ltext0
+ 25695      00000000 
+ 25696 01d8 0200     		.value	0x2
+ 25697 01da 77       		.byte	0x77
+ 25698 01db 08       		.sleb128 8
+ 25699 01dc CD3B0100 		.quad	.LCFI12-.Ltext0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 769
+
+
+ 25699      00000000 
+ 25700 01e4 D03B0100 		.quad	.LCFI13-.Ltext0
+ 25700      00000000 
+ 25701 01ec 0200     		.value	0x2
+ 25702 01ee 77       		.byte	0x77
+ 25703 01ef 10       		.sleb128 16
+ 25704 01f0 D03B0100 		.quad	.LCFI13-.Ltext0
+ 25704      00000000 
+ 25705 01f8 F63B0100 		.quad	.LFE568-.Ltext0
+ 25705      00000000 
+ 25706 0200 0200     		.value	0x2
+ 25707 0202 76       		.byte	0x76
+ 25708 0203 10       		.sleb128 16
+ 25709 0204 00000000 		.quad	0x0
+ 25709      00000000 
+ 25710 020c 00000000 		.quad	0x0
+ 25710      00000000 
+ 25711              	.LLST7:
+ 25712 0214 F63B0100 		.quad	.LFB569-.Ltext0
+ 25712      00000000 
+ 25713 021c F73B0100 		.quad	.LCFI14-.Ltext0
+ 25713      00000000 
+ 25714 0224 0200     		.value	0x2
+ 25715 0226 77       		.byte	0x77
+ 25716 0227 08       		.sleb128 8
+ 25717 0228 F73B0100 		.quad	.LCFI14-.Ltext0
+ 25717      00000000 
+ 25718 0230 FA3B0100 		.quad	.LCFI15-.Ltext0
+ 25718      00000000 
+ 25719 0238 0200     		.value	0x2
+ 25720 023a 77       		.byte	0x77
+ 25721 023b 10       		.sleb128 16
+ 25722 023c FA3B0100 		.quad	.LCFI15-.Ltext0
+ 25722      00000000 
+ 25723 0244 203C0100 		.quad	.LFE569-.Ltext0
+ 25723      00000000 
+ 25724 024c 0200     		.value	0x2
+ 25725 024e 76       		.byte	0x76
+ 25726 024f 10       		.sleb128 16
+ 25727 0250 00000000 		.quad	0x0
+ 25727      00000000 
+ 25728 0258 00000000 		.quad	0x0
+ 25728      00000000 
+ 25729              	.LLST8:
+ 25730 0260 203C0100 		.quad	.LFB573-.Ltext0
+ 25730      00000000 
+ 25731 0268 213C0100 		.quad	.LCFI16-.Ltext0
+ 25731      00000000 
+ 25732 0270 0200     		.value	0x2
+ 25733 0272 77       		.byte	0x77
+ 25734 0273 08       		.sleb128 8
+ 25735 0274 213C0100 		.quad	.LCFI16-.Ltext0
+ 25735      00000000 
+ 25736 027c 243C0100 		.quad	.LCFI17-.Ltext0
+ 25736      00000000 
+ 25737 0284 0200     		.value	0x2
+ 25738 0286 77       		.byte	0x77
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 770
+
+
+ 25739 0287 10       		.sleb128 16
+ 25740 0288 243C0100 		.quad	.LCFI17-.Ltext0
+ 25740      00000000 
+ 25741 0290 16590100 		.quad	.LFE573-.Ltext0
+ 25741      00000000 
+ 25742 0298 0200     		.value	0x2
+ 25743 029a 76       		.byte	0x76
+ 25744 029b 10       		.sleb128 16
+ 25745 029c 00000000 		.quad	0x0
+ 25745      00000000 
+ 25746 02a4 00000000 		.quad	0x0
+ 25746      00000000 
+ 25747              	.LLST9:
+ 25748 02ac 16590100 		.quad	.LFB577-.Ltext0
+ 25748      00000000 
+ 25749 02b4 17590100 		.quad	.LCFI18-.Ltext0
+ 25749      00000000 
+ 25750 02bc 0200     		.value	0x2
+ 25751 02be 77       		.byte	0x77
+ 25752 02bf 08       		.sleb128 8
+ 25753 02c0 17590100 		.quad	.LCFI18-.Ltext0
+ 25753      00000000 
+ 25754 02c8 1A590100 		.quad	.LCFI19-.Ltext0
+ 25754      00000000 
+ 25755 02d0 0200     		.value	0x2
+ 25756 02d2 77       		.byte	0x77
+ 25757 02d3 10       		.sleb128 16
+ 25758 02d4 1A590100 		.quad	.LCFI19-.Ltext0
+ 25758      00000000 
+ 25759 02dc 43780100 		.quad	.LFE577-.Ltext0
+ 25759      00000000 
+ 25760 02e4 0200     		.value	0x2
+ 25761 02e6 76       		.byte	0x76
+ 25762 02e7 10       		.sleb128 16
+ 25763 02e8 00000000 		.quad	0x0
+ 25763      00000000 
+ 25764 02f0 00000000 		.quad	0x0
+ 25764      00000000 
+ 25765              	.LLST10:
+ 25766 02f8 43780100 		.quad	.LFB578-.Ltext0
+ 25766      00000000 
+ 25767 0300 44780100 		.quad	.LCFI20-.Ltext0
+ 25767      00000000 
+ 25768 0308 0200     		.value	0x2
+ 25769 030a 77       		.byte	0x77
+ 25770 030b 08       		.sleb128 8
+ 25771 030c 44780100 		.quad	.LCFI20-.Ltext0
+ 25771      00000000 
+ 25772 0314 47780100 		.quad	.LCFI21-.Ltext0
+ 25772      00000000 
+ 25773 031c 0200     		.value	0x2
+ 25774 031e 77       		.byte	0x77
+ 25775 031f 10       		.sleb128 16
+ 25776 0320 47780100 		.quad	.LCFI21-.Ltext0
+ 25776      00000000 
+ 25777 0328 4D780100 		.quad	.LFE578-.Ltext0
+ 25777      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 771
+
+
+ 25778 0330 0200     		.value	0x2
+ 25779 0332 76       		.byte	0x76
+ 25780 0333 10       		.sleb128 16
+ 25781 0334 00000000 		.quad	0x0
+ 25781      00000000 
+ 25782 033c 00000000 		.quad	0x0
+ 25782      00000000 
+ 25783              	.LLST11:
+ 25784 0344 4D780100 		.quad	.LFB579-.Ltext0
+ 25784      00000000 
+ 25785 034c 4E780100 		.quad	.LCFI22-.Ltext0
+ 25785      00000000 
+ 25786 0354 0200     		.value	0x2
+ 25787 0356 77       		.byte	0x77
+ 25788 0357 08       		.sleb128 8
+ 25789 0358 4E780100 		.quad	.LCFI22-.Ltext0
+ 25789      00000000 
+ 25790 0360 51780100 		.quad	.LCFI23-.Ltext0
+ 25790      00000000 
+ 25791 0368 0200     		.value	0x2
+ 25792 036a 77       		.byte	0x77
+ 25793 036b 10       		.sleb128 16
+ 25794 036c 51780100 		.quad	.LCFI23-.Ltext0
+ 25794      00000000 
+ 25795 0374 58780100 		.quad	.LFE579-.Ltext0
+ 25795      00000000 
+ 25796 037c 0200     		.value	0x2
+ 25797 037e 76       		.byte	0x76
+ 25798 037f 10       		.sleb128 16
+ 25799 0380 00000000 		.quad	0x0
+ 25799      00000000 
+ 25800 0388 00000000 		.quad	0x0
+ 25800      00000000 
+ 25801              	.LLST12:
+ 25802 0390 58780100 		.quad	.LFB580-.Ltext0
+ 25802      00000000 
+ 25803 0398 59780100 		.quad	.LCFI24-.Ltext0
+ 25803      00000000 
+ 25804 03a0 0200     		.value	0x2
+ 25805 03a2 77       		.byte	0x77
+ 25806 03a3 08       		.sleb128 8
+ 25807 03a4 59780100 		.quad	.LCFI24-.Ltext0
+ 25807      00000000 
+ 25808 03ac 5C780100 		.quad	.LCFI25-.Ltext0
+ 25808      00000000 
+ 25809 03b4 0200     		.value	0x2
+ 25810 03b6 77       		.byte	0x77
+ 25811 03b7 10       		.sleb128 16
+ 25812 03b8 5C780100 		.quad	.LCFI25-.Ltext0
+ 25812      00000000 
+ 25813 03c0 63780100 		.quad	.LFE580-.Ltext0
+ 25813      00000000 
+ 25814 03c8 0200     		.value	0x2
+ 25815 03ca 76       		.byte	0x76
+ 25816 03cb 10       		.sleb128 16
+ 25817 03cc 00000000 		.quad	0x0
+ 25817      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 772
+
+
+ 25818 03d4 00000000 		.quad	0x0
+ 25818      00000000 
+ 25819              	.LLST13:
+ 25820 03dc 63780100 		.quad	.LFB581-.Ltext0
+ 25820      00000000 
+ 25821 03e4 64780100 		.quad	.LCFI26-.Ltext0
+ 25821      00000000 
+ 25822 03ec 0200     		.value	0x2
+ 25823 03ee 77       		.byte	0x77
+ 25824 03ef 08       		.sleb128 8
+ 25825 03f0 64780100 		.quad	.LCFI26-.Ltext0
+ 25825      00000000 
+ 25826 03f8 67780100 		.quad	.LCFI27-.Ltext0
+ 25826      00000000 
+ 25827 0400 0200     		.value	0x2
+ 25828 0402 77       		.byte	0x77
+ 25829 0403 10       		.sleb128 16
+ 25830 0404 67780100 		.quad	.LCFI27-.Ltext0
+ 25830      00000000 
+ 25831 040c 4C790100 		.quad	.LFE581-.Ltext0
+ 25831      00000000 
+ 25832 0414 0200     		.value	0x2
+ 25833 0416 76       		.byte	0x76
+ 25834 0417 10       		.sleb128 16
+ 25835 0418 00000000 		.quad	0x0
+ 25835      00000000 
+ 25836 0420 00000000 		.quad	0x0
+ 25836      00000000 
+ 25837              	.LLST14:
+ 25838 0428 4C790100 		.quad	.LFB582-.Ltext0
+ 25838      00000000 
+ 25839 0430 4D790100 		.quad	.LCFI28-.Ltext0
+ 25839      00000000 
+ 25840 0438 0200     		.value	0x2
+ 25841 043a 77       		.byte	0x77
+ 25842 043b 08       		.sleb128 8
+ 25843 043c 4D790100 		.quad	.LCFI28-.Ltext0
+ 25843      00000000 
+ 25844 0444 50790100 		.quad	.LCFI29-.Ltext0
+ 25844      00000000 
+ 25845 044c 0200     		.value	0x2
+ 25846 044e 77       		.byte	0x77
+ 25847 044f 10       		.sleb128 16
+ 25848 0450 50790100 		.quad	.LCFI29-.Ltext0
+ 25848      00000000 
+ 25849 0458 0F7A0100 		.quad	.LFE582-.Ltext0
+ 25849      00000000 
+ 25850 0460 0200     		.value	0x2
+ 25851 0462 76       		.byte	0x76
+ 25852 0463 10       		.sleb128 16
+ 25853 0464 00000000 		.quad	0x0
+ 25853      00000000 
+ 25854 046c 00000000 		.quad	0x0
+ 25854      00000000 
+ 25855              	.LLST15:
+ 25856 0474 0F7A0100 		.quad	.LFB583-.Ltext0
+ 25856      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 773
+
+
+ 25857 047c 107A0100 		.quad	.LCFI30-.Ltext0
+ 25857      00000000 
+ 25858 0484 0200     		.value	0x2
+ 25859 0486 77       		.byte	0x77
+ 25860 0487 08       		.sleb128 8
+ 25861 0488 107A0100 		.quad	.LCFI30-.Ltext0
+ 25861      00000000 
+ 25862 0490 137A0100 		.quad	.LCFI31-.Ltext0
+ 25862      00000000 
+ 25863 0498 0200     		.value	0x2
+ 25864 049a 77       		.byte	0x77
+ 25865 049b 10       		.sleb128 16
+ 25866 049c 137A0100 		.quad	.LCFI31-.Ltext0
+ 25866      00000000 
+ 25867 04a4 D27A0100 		.quad	.LFE583-.Ltext0
+ 25867      00000000 
+ 25868 04ac 0200     		.value	0x2
+ 25869 04ae 76       		.byte	0x76
+ 25870 04af 10       		.sleb128 16
+ 25871 04b0 00000000 		.quad	0x0
+ 25871      00000000 
+ 25872 04b8 00000000 		.quad	0x0
+ 25872      00000000 
+ 25873              	.LLST16:
+ 25874 04c0 D27A0100 		.quad	.LFB584-.Ltext0
+ 25874      00000000 
+ 25875 04c8 D37A0100 		.quad	.LCFI32-.Ltext0
+ 25875      00000000 
+ 25876 04d0 0200     		.value	0x2
+ 25877 04d2 77       		.byte	0x77
+ 25878 04d3 08       		.sleb128 8
+ 25879 04d4 D37A0100 		.quad	.LCFI32-.Ltext0
+ 25879      00000000 
+ 25880 04dc D67A0100 		.quad	.LCFI33-.Ltext0
+ 25880      00000000 
+ 25881 04e4 0200     		.value	0x2
+ 25882 04e6 77       		.byte	0x77
+ 25883 04e7 10       		.sleb128 16
+ 25884 04e8 D67A0100 		.quad	.LCFI33-.Ltext0
+ 25884      00000000 
+ 25885 04f0 957B0100 		.quad	.LFE584-.Ltext0
+ 25885      00000000 
+ 25886 04f8 0200     		.value	0x2
+ 25887 04fa 76       		.byte	0x76
+ 25888 04fb 10       		.sleb128 16
+ 25889 04fc 00000000 		.quad	0x0
+ 25889      00000000 
+ 25890 0504 00000000 		.quad	0x0
+ 25890      00000000 
+ 25891              	.LLST17:
+ 25892 050c 957B0100 		.quad	.LFB585-.Ltext0
+ 25892      00000000 
+ 25893 0514 967B0100 		.quad	.LCFI34-.Ltext0
+ 25893      00000000 
+ 25894 051c 0200     		.value	0x2
+ 25895 051e 77       		.byte	0x77
+ 25896 051f 08       		.sleb128 8
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 774
+
+
+ 25897 0520 967B0100 		.quad	.LCFI34-.Ltext0
+ 25897      00000000 
+ 25898 0528 997B0100 		.quad	.LCFI35-.Ltext0
+ 25898      00000000 
+ 25899 0530 0200     		.value	0x2
+ 25900 0532 77       		.byte	0x77
+ 25901 0533 10       		.sleb128 16
+ 25902 0534 997B0100 		.quad	.LCFI35-.Ltext0
+ 25902      00000000 
+ 25903 053c 5B7C0100 		.quad	.LFE585-.Ltext0
+ 25903      00000000 
+ 25904 0544 0200     		.value	0x2
+ 25905 0546 76       		.byte	0x76
+ 25906 0547 10       		.sleb128 16
+ 25907 0548 00000000 		.quad	0x0
+ 25907      00000000 
+ 25908 0550 00000000 		.quad	0x0
+ 25908      00000000 
+ 25909              	.LLST18:
+ 25910 0558 5B7C0100 		.quad	.LFB586-.Ltext0
+ 25910      00000000 
+ 25911 0560 5C7C0100 		.quad	.LCFI36-.Ltext0
+ 25911      00000000 
+ 25912 0568 0200     		.value	0x2
+ 25913 056a 77       		.byte	0x77
+ 25914 056b 08       		.sleb128 8
+ 25915 056c 5C7C0100 		.quad	.LCFI36-.Ltext0
+ 25915      00000000 
+ 25916 0574 5F7C0100 		.quad	.LCFI37-.Ltext0
+ 25916      00000000 
+ 25917 057c 0200     		.value	0x2
+ 25918 057e 77       		.byte	0x77
+ 25919 057f 10       		.sleb128 16
+ 25920 0580 5F7C0100 		.quad	.LCFI37-.Ltext0
+ 25920      00000000 
+ 25921 0588 2C7D0100 		.quad	.LFE586-.Ltext0
+ 25921      00000000 
+ 25922 0590 0200     		.value	0x2
+ 25923 0592 76       		.byte	0x76
+ 25924 0593 10       		.sleb128 16
+ 25925 0594 00000000 		.quad	0x0
+ 25925      00000000 
+ 25926 059c 00000000 		.quad	0x0
+ 25926      00000000 
+ 25927              		.file 3 "/usr/include/stdint.h"
+ 25928              		.file 4 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+ 25929              		.file 5 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+ 25930              		.file 6 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/debug.h"
+ 25931              		.file 7 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 25932              		.file 8 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi-priv.h"
+ 25933              		.file 9 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-priv.h"
+ 25934              		.file 10 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+ 25935              		.section	.debug_info
+ 25936 0000 95D50000 		.long	0xd595
+ 25937 0004 0200     		.value	0x2
+ 25938 0006 00000000 		.long	.Ldebug_abbrev0
+ 25939 000a 08       		.byte	0x8
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 775
+
+
+ 25940 000b 01       		.uleb128 0x1
+ 25941 000c 00000000 		.long	.LASF413
+ 25942 0010 01       		.byte	0x1
+ 25943 0011 00000000 		.long	.LASF414
+ 25944 0015 00000000 		.long	.LASF415
+ 25945 0019 00000000 		.quad	.Ltext0
+ 25945      00000000 
+ 25946 0021 00000000 		.quad	.Letext0
+ 25946      00000000 
+ 25947 0029 00000000 		.long	.Ldebug_line0
+ 25948 002d 02       		.uleb128 0x2
+ 25949 002e 01       		.byte	0x1
+ 25950 002f 06       		.byte	0x6
+ 25951 0030 00000000 		.long	.LASF0
+ 25952 0034 02       		.uleb128 0x2
+ 25953 0035 02       		.byte	0x2
+ 25954 0036 05       		.byte	0x5
+ 25955 0037 00000000 		.long	.LASF1
+ 25956 003b 03       		.uleb128 0x3
+ 25957 003c 04       		.byte	0x4
+ 25958 003d 05       		.byte	0x5
+ 25959 003e 696E7400 		.string	"int"
+ 25960 0042 02       		.uleb128 0x2
+ 25961 0043 08       		.byte	0x8
+ 25962 0044 05       		.byte	0x5
+ 25963 0045 00000000 		.long	.LASF2
+ 25964 0049 04       		.uleb128 0x4
+ 25965 004a 00000000 		.long	.LASF5
+ 25966 004e 03       		.byte	0x3
+ 25967 004f 31       		.byte	0x31
+ 25968 0050 54000000 		.long	0x54
+ 25969 0054 02       		.uleb128 0x2
+ 25970 0055 01       		.byte	0x1
+ 25971 0056 08       		.byte	0x8
+ 25972 0057 00000000 		.long	.LASF3
+ 25973 005b 02       		.uleb128 0x2
+ 25974 005c 02       		.byte	0x2
+ 25975 005d 07       		.byte	0x7
+ 25976 005e 00000000 		.long	.LASF4
+ 25977 0062 04       		.uleb128 0x4
+ 25978 0063 00000000 		.long	.LASF6
+ 25979 0067 03       		.byte	0x3
+ 25980 0068 34       		.byte	0x34
+ 25981 0069 6D000000 		.long	0x6d
+ 25982 006d 02       		.uleb128 0x2
+ 25983 006e 04       		.byte	0x4
+ 25984 006f 07       		.byte	0x7
+ 25985 0070 00000000 		.long	.LASF7
+ 25986 0074 04       		.uleb128 0x4
+ 25987 0075 00000000 		.long	.LASF8
+ 25988 0079 03       		.byte	0x3
+ 25989 007a 38       		.byte	0x38
+ 25990 007b 7F000000 		.long	0x7f
+ 25991 007f 02       		.uleb128 0x2
+ 25992 0080 08       		.byte	0x8
+ 25993 0081 07       		.byte	0x7
+ 25994 0082 00000000 		.long	.LASF9
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 776
+
+
+ 25995 0086 04       		.uleb128 0x4
+ 25996 0087 00000000 		.long	.LASF10
+ 25997 008b 04       		.byte	0x4
+ 25998 008c 30       		.byte	0x30
+ 25999 008d 62000000 		.long	0x62
+ 26000 0091 05       		.uleb128 0x5
+ 26001 0092 08       		.byte	0x8
+ 26002 0093 07       		.byte	0x7
+ 26003 0094 02       		.uleb128 0x2
+ 26004 0095 01       		.byte	0x1
+ 26005 0096 06       		.byte	0x6
+ 26006 0097 00000000 		.long	.LASF11
+ 26007 009b 02       		.uleb128 0x2
+ 26008 009c 08       		.byte	0x8
+ 26009 009d 05       		.byte	0x5
+ 26010 009e 00000000 		.long	.LASF12
+ 26011 00a2 02       		.uleb128 0x2
+ 26012 00a3 04       		.byte	0x4
+ 26013 00a4 04       		.byte	0x4
+ 26014 00a5 00000000 		.long	.LASF13
+ 26015 00a9 06       		.uleb128 0x6
+ 26016 00aa 3B000000 		.long	0x3b
+ 26017 00ae 07       		.uleb128 0x7
+ 26018 00af 08       		.byte	0x8
+ 26019 00b0 B4000000 		.long	0xb4
+ 26020 00b4 06       		.uleb128 0x6
+ 26021 00b5 94000000 		.long	0x94
+ 26022 00b9 08       		.uleb128 0x8
+ 26023 00ba 08       		.byte	0x8
+ 26024 00bb 07       		.uleb128 0x7
+ 26025 00bc 08       		.byte	0x8
+ 26026 00bd 94000000 		.long	0x94
+ 26027 00c1 02       		.uleb128 0x2
+ 26028 00c2 08       		.byte	0x8
+ 26029 00c3 07       		.byte	0x7
+ 26030 00c4 00000000 		.long	.LASF14
+ 26031 00c8 09       		.uleb128 0x9
+ 26032 00c9 94000000 		.long	0x94
+ 26033 00cd D8000000 		.long	0xd8
+ 26034 00d1 0A       		.uleb128 0xa
+ 26035 00d2 91000000 		.long	0x91
+ 26036 00d6 1F       		.byte	0x1f
+ 26037 00d7 00       		.byte	0x0
+ 26038 00d8 07       		.uleb128 0x7
+ 26039 00d9 08       		.byte	0x8
+ 26040 00da DE000000 		.long	0xde
+ 26041 00de 0B       		.uleb128 0xb
+ 26042 00df 02       		.uleb128 0x2
+ 26043 00e0 08       		.byte	0x8
+ 26044 00e1 04       		.byte	0x4
+ 26045 00e2 00000000 		.long	.LASF15
+ 26046 00e6 04       		.uleb128 0x4
+ 26047 00e7 00000000 		.long	.LASF16
+ 26048 00eb 05       		.byte	0x5
+ 26049 00ec 26       		.byte	0x26
+ 26050 00ed F1000000 		.long	0xf1
+ 26051 00f1 0C       		.uleb128 0xc
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 777
+
+
+ 26052 00f2 01       		.byte	0x1
+ 26053 00f3 49000000 		.long	0x49
+ 26054 00f7 02010000 		.long	0x102
+ 26055 00fb 0A       		.uleb128 0xa
+ 26056 00fc 91000000 		.long	0x91
+ 26057 0100 0F       		.byte	0xf
+ 26058 0101 00       		.byte	0x0
+ 26059 0102 0D       		.uleb128 0xd
+ 26060 0103 04       		.byte	0x4
+ 26061 0104 06       		.byte	0x6
+ 26062 0105 D6       		.byte	0xd6
+ 26063 0106 83010000 		.long	0x183
+ 26064 010a 0E       		.uleb128 0xe
+ 26065 010b 00000000 		.long	.LASF17
+ 26066 010f 7F       		.sleb128 -1
+ 26067 0110 0E       		.uleb128 0xe
+ 26068 0111 00000000 		.long	.LASF18
+ 26069 0115 00       		.sleb128 0
+ 26070 0116 0E       		.uleb128 0xe
+ 26071 0117 00000000 		.long	.LASF19
+ 26072 011b 01       		.sleb128 1
+ 26073 011c 0E       		.uleb128 0xe
+ 26074 011d 00000000 		.long	.LASF20
+ 26075 0121 02       		.sleb128 2
+ 26076 0122 0E       		.uleb128 0xe
+ 26077 0123 00000000 		.long	.LASF21
+ 26078 0127 03       		.sleb128 3
+ 26079 0128 0E       		.uleb128 0xe
+ 26080 0129 00000000 		.long	.LASF22
+ 26081 012d 04       		.sleb128 4
+ 26082 012e 0E       		.uleb128 0xe
+ 26083 012f 00000000 		.long	.LASF23
+ 26084 0133 05       		.sleb128 5
+ 26085 0134 0E       		.uleb128 0xe
+ 26086 0135 00000000 		.long	.LASF24
+ 26087 0139 06       		.sleb128 6
+ 26088 013a 0E       		.uleb128 0xe
+ 26089 013b 00000000 		.long	.LASF25
+ 26090 013f 07       		.sleb128 7
+ 26091 0140 0E       		.uleb128 0xe
+ 26092 0141 00000000 		.long	.LASF26
+ 26093 0145 08       		.sleb128 8
+ 26094 0146 0E       		.uleb128 0xe
+ 26095 0147 00000000 		.long	.LASF27
+ 26096 014b 09       		.sleb128 9
+ 26097 014c 0E       		.uleb128 0xe
+ 26098 014d 00000000 		.long	.LASF28
+ 26099 0151 0A       		.sleb128 10
+ 26100 0152 0E       		.uleb128 0xe
+ 26101 0153 00000000 		.long	.LASF29
+ 26102 0157 0B       		.sleb128 11
+ 26103 0158 0E       		.uleb128 0xe
+ 26104 0159 00000000 		.long	.LASF30
+ 26105 015d 0C       		.sleb128 12
+ 26106 015e 0E       		.uleb128 0xe
+ 26107 015f 00000000 		.long	.LASF31
+ 26108 0163 0D       		.sleb128 13
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 778
+
+
+ 26109 0164 0E       		.uleb128 0xe
+ 26110 0165 00000000 		.long	.LASF32
+ 26111 0169 0E       		.sleb128 14
+ 26112 016a 0E       		.uleb128 0xe
+ 26113 016b 00000000 		.long	.LASF33
+ 26114 016f 0F       		.sleb128 15
+ 26115 0170 0E       		.uleb128 0xe
+ 26116 0171 00000000 		.long	.LASF34
+ 26117 0175 10       		.sleb128 16
+ 26118 0176 0E       		.uleb128 0xe
+ 26119 0177 00000000 		.long	.LASF35
+ 26120 017b 11       		.sleb128 17
+ 26121 017c 0E       		.uleb128 0xe
+ 26122 017d 00000000 		.long	.LASF36
+ 26123 0181 12       		.sleb128 18
+ 26124 0182 00       		.byte	0x0
+ 26125 0183 0F       		.uleb128 0xf
+ 26126 0184 04       		.byte	0x4
+ 26127 0185 06       		.byte	0x6
+ 26128 0186 6701     		.value	0x167
+ 26129 0188 B1010000 		.long	0x1b1
+ 26130 018c 0E       		.uleb128 0xe
+ 26131 018d 00000000 		.long	.LASF37
+ 26132 0191 00       		.sleb128 0
+ 26133 0192 0E       		.uleb128 0xe
+ 26134 0193 00000000 		.long	.LASF38
+ 26135 0197 01       		.sleb128 1
+ 26136 0198 0E       		.uleb128 0xe
+ 26137 0199 00000000 		.long	.LASF39
+ 26138 019d 02       		.sleb128 2
+ 26139 019e 0E       		.uleb128 0xe
+ 26140 019f 00000000 		.long	.LASF40
+ 26141 01a3 03       		.sleb128 3
+ 26142 01a4 0E       		.uleb128 0xe
+ 26143 01a5 00000000 		.long	.LASF41
+ 26144 01a9 04       		.sleb128 4
+ 26145 01aa 0E       		.uleb128 0xe
+ 26146 01ab 00000000 		.long	.LASF42
+ 26147 01af 05       		.sleb128 5
+ 26148 01b0 00       		.byte	0x0
+ 26149 01b1 04       		.uleb128 0x4
+ 26150 01b2 00000000 		.long	.LASF43
+ 26151 01b6 07       		.byte	0x7
+ 26152 01b7 3B       		.byte	0x3b
+ 26153 01b8 E6000000 		.long	0xe6
+ 26154 01bc 04       		.uleb128 0x4
+ 26155 01bd 00000000 		.long	.LASF44
+ 26156 01c1 07       		.byte	0x7
+ 26157 01c2 43       		.byte	0x43
+ 26158 01c3 C7010000 		.long	0x1c7
+ 26159 01c7 10       		.uleb128 0x10
+ 26160 01c8 00000000 		.long	.LASF44
+ 26161 01cc 08       		.byte	0x8
+ 26162 01cd 07       		.byte	0x7
+ 26163 01ce 43       		.byte	0x43
+ 26164 01cf F0010000 		.long	0x1f0
+ 26165 01d3 11       		.uleb128 0x11
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 779
+
+
+ 26166 01d4 6D616A00 		.string	"maj"
+ 26167 01d8 07       		.byte	0x7
+ 26168 01d9 46       		.byte	0x46
+ 26169 01da 62000000 		.long	0x62
+ 26170 01de 02       		.byte	0x2
+ 26171 01df 23       		.byte	0x23
+ 26172 01e0 00       		.uleb128 0x0
+ 26173 01e1 11       		.uleb128 0x11
+ 26174 01e2 6D696E00 		.string	"min"
+ 26175 01e6 07       		.byte	0x7
+ 26176 01e7 47       		.byte	0x47
+ 26177 01e8 62000000 		.long	0x62
+ 26178 01ec 02       		.byte	0x2
+ 26179 01ed 23       		.byte	0x23
+ 26180 01ee 04       		.uleb128 0x4
+ 26181 01ef 00       		.byte	0x0
+ 26182 01f0 04       		.uleb128 0x4
+ 26183 01f1 00000000 		.long	.LASF45
+ 26184 01f5 07       		.byte	0x7
+ 26185 01f6 52       		.byte	0x52
+ 26186 01f7 FB010000 		.long	0x1fb
+ 26187 01fb 10       		.uleb128 0x10
+ 26188 01fc 00000000 		.long	.LASF45
+ 26189 0200 40       		.byte	0x40
+ 26190 0201 07       		.byte	0x7
+ 26191 0202 52       		.byte	0x52
+ 26192 0203 78020000 		.long	0x278
+ 26193 0207 12       		.uleb128 0x12
+ 26194 0208 00000000 		.long	.LASF46
+ 26195 020c 07       		.byte	0x7
+ 26196 020d 5E       		.byte	0x5e
+ 26197 020e BC010000 		.long	0x1bc
+ 26198 0212 02       		.byte	0x2
+ 26199 0213 23       		.byte	0x23
+ 26200 0214 00       		.uleb128 0x0
+ 26201 0215 12       		.uleb128 0x12
+ 26202 0216 00000000 		.long	.LASF47
+ 26203 021a 07       		.byte	0x7
+ 26204 021b 63       		.byte	0x63
+ 26205 021c BC020000 		.long	0x2bc
+ 26206 0220 02       		.byte	0x2
+ 26207 0221 23       		.byte	0x23
+ 26208 0222 08       		.uleb128 0x8
+ 26209 0223 12       		.uleb128 0x12
+ 26210 0224 00000000 		.long	.LASF48
+ 26211 0228 07       		.byte	0x7
+ 26212 0229 65       		.byte	0x65
+ 26213 022a CD020000 		.long	0x2cd
+ 26214 022e 02       		.byte	0x2
+ 26215 022f 23       		.byte	0x23
+ 26216 0230 10       		.uleb128 0x10
+ 26217 0231 12       		.uleb128 0x12
+ 26218 0232 00000000 		.long	.LASF49
+ 26219 0236 07       		.byte	0x7
+ 26220 0237 67       		.byte	0x67
+ 26221 0238 CD020000 		.long	0x2cd
+ 26222 023c 02       		.byte	0x2
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 780
+
+
+ 26223 023d 23       		.byte	0x23
+ 26224 023e 18       		.uleb128 0x18
+ 26225 023f 12       		.uleb128 0x12
+ 26226 0240 00000000 		.long	.LASF50
+ 26227 0244 07       		.byte	0x7
+ 26228 0245 69       		.byte	0x69
+ 26229 0246 ED020000 		.long	0x2ed
+ 26230 024a 02       		.byte	0x2
+ 26231 024b 23       		.byte	0x23
+ 26232 024c 20       		.uleb128 0x20
+ 26233 024d 12       		.uleb128 0x12
+ 26234 024e 00000000 		.long	.LASF51
+ 26235 0252 07       		.byte	0x7
+ 26236 0253 6D       		.byte	0x6d
+ 26237 0254 ED020000 		.long	0x2ed
+ 26238 0258 02       		.byte	0x2
+ 26239 0259 23       		.byte	0x23
+ 26240 025a 28       		.uleb128 0x28
+ 26241 025b 12       		.uleb128 0x12
+ 26242 025c 00000000 		.long	.LASF52
+ 26243 0260 07       		.byte	0x7
+ 26244 0261 71       		.byte	0x71
+ 26245 0262 09030000 		.long	0x309
+ 26246 0266 02       		.byte	0x2
+ 26247 0267 23       		.byte	0x23
+ 26248 0268 30       		.uleb128 0x30
+ 26249 0269 12       		.uleb128 0x12
+ 26250 026a 00000000 		.long	.LASF53
+ 26251 026e 07       		.byte	0x7
+ 26252 026f 75       		.byte	0x75
+ 26253 0270 09030000 		.long	0x309
+ 26254 0274 02       		.byte	0x2
+ 26255 0275 23       		.byte	0x23
+ 26256 0276 38       		.uleb128 0x38
+ 26257 0277 00       		.byte	0x0
+ 26258 0278 04       		.uleb128 0x4
+ 26259 0279 00000000 		.long	.LASF54
+ 26260 027d 07       		.byte	0x7
+ 26261 027e 53       		.byte	0x53
+ 26262 027f 83020000 		.long	0x283
+ 26263 0283 13       		.uleb128 0x13
+ 26264 0284 00000000 		.long	.LASF54
+ 26265 0288 40       		.byte	0x40
+ 26266 0289 07       		.byte	0x7
+ 26267 028a 53       		.byte	0x53
+ 26268 028b A5020000 		.long	0x2a5
+ 26269 028f 14       		.uleb128 0x14
+ 26270 0290 00000000 		.long	.LASF46
+ 26271 0294 07       		.byte	0x7
+ 26272 0295 7F       		.byte	0x7f
+ 26273 0296 BC010000 		.long	0x1bc
+ 26274 029a 15       		.uleb128 0x15
+ 26275 029b 763100   		.string	"v1"
+ 26276 029e 07       		.byte	0x7
+ 26277 029f 80       		.byte	0x80
+ 26278 02a0 F0010000 		.long	0x1f0
+ 26279 02a4 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 781
+
+
+ 26280 02a5 16       		.uleb128 0x16
+ 26281 02a6 01       		.byte	0x1
+ 26282 02a7 B1020000 		.long	0x2b1
+ 26283 02ab 17       		.uleb128 0x17
+ 26284 02ac B1020000 		.long	0x2b1
+ 26285 02b0 00       		.byte	0x0
+ 26286 02b1 07       		.uleb128 0x7
+ 26287 02b2 08       		.byte	0x8
+ 26288 02b3 B7020000 		.long	0x2b7
+ 26289 02b7 06       		.uleb128 0x6
+ 26290 02b8 78020000 		.long	0x278
+ 26291 02bc 07       		.uleb128 0x7
+ 26292 02bd 08       		.byte	0x8
+ 26293 02be A5020000 		.long	0x2a5
+ 26294 02c2 18       		.uleb128 0x18
+ 26295 02c3 62000000 		.long	0x62
+ 26296 02c7 CD020000 		.long	0x2cd
+ 26297 02cb 19       		.uleb128 0x19
+ 26298 02cc 00       		.byte	0x0
+ 26299 02cd 07       		.uleb128 0x7
+ 26300 02ce 08       		.byte	0x8
+ 26301 02cf C2020000 		.long	0x2c2
+ 26302 02d3 1A       		.uleb128 0x1a
+ 26303 02d4 01       		.byte	0x1
+ 26304 02d5 86000000 		.long	0x86
+ 26305 02d9 ED020000 		.long	0x2ed
+ 26306 02dd 17       		.uleb128 0x17
+ 26307 02de B9000000 		.long	0xb9
+ 26308 02e2 17       		.uleb128 0x17
+ 26309 02e3 AE000000 		.long	0xae
+ 26310 02e7 17       		.uleb128 0x17
+ 26311 02e8 62000000 		.long	0x62
+ 26312 02ec 00       		.byte	0x0
+ 26313 02ed 07       		.uleb128 0x7
+ 26314 02ee 08       		.byte	0x8
+ 26315 02ef D3020000 		.long	0x2d3
+ 26316 02f3 16       		.uleb128 0x16
+ 26317 02f4 01       		.byte	0x1
+ 26318 02f5 09030000 		.long	0x309
+ 26319 02f9 17       		.uleb128 0x17
+ 26320 02fa AE000000 		.long	0xae
+ 26321 02fe 17       		.uleb128 0x17
+ 26322 02ff BB000000 		.long	0xbb
+ 26323 0303 17       		.uleb128 0x17
+ 26324 0304 D8000000 		.long	0xd8
+ 26325 0308 00       		.byte	0x0
+ 26326 0309 07       		.uleb128 0x7
+ 26327 030a 08       		.byte	0x8
+ 26328 030b F3020000 		.long	0x2f3
+ 26329 030f 04       		.uleb128 0x4
+ 26330 0310 00000000 		.long	.LASF55
+ 26331 0314 07       		.byte	0x7
+ 26332 0315 84       		.byte	0x84
+ 26333 0316 1A030000 		.long	0x31a
+ 26334 031a 10       		.uleb128 0x10
+ 26335 031b 00000000 		.long	.LASF55
+ 26336 031f 40       		.byte	0x40
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 782
+
+
+ 26337 0320 07       		.byte	0x7
+ 26338 0321 84       		.byte	0x84
+ 26339 0322 97030000 		.long	0x397
+ 26340 0326 12       		.uleb128 0x12
+ 26341 0327 00000000 		.long	.LASF46
+ 26342 032b 07       		.byte	0x7
+ 26343 032c 90       		.byte	0x90
+ 26344 032d BC010000 		.long	0x1bc
+ 26345 0331 02       		.byte	0x2
+ 26346 0332 23       		.byte	0x23
+ 26347 0333 00       		.uleb128 0x0
+ 26348 0334 12       		.uleb128 0x12
+ 26349 0335 00000000 		.long	.LASF47
+ 26350 0339 07       		.byte	0x7
+ 26351 033a 95       		.byte	0x95
+ 26352 033b DB030000 		.long	0x3db
+ 26353 033f 02       		.byte	0x2
+ 26354 0340 23       		.byte	0x23
+ 26355 0341 08       		.uleb128 0x8
+ 26356 0342 12       		.uleb128 0x12
+ 26357 0343 00000000 		.long	.LASF48
+ 26358 0347 07       		.byte	0x7
+ 26359 0348 97       		.byte	0x97
+ 26360 0349 CD020000 		.long	0x2cd
+ 26361 034d 02       		.byte	0x2
+ 26362 034e 23       		.byte	0x23
+ 26363 034f 10       		.uleb128 0x10
+ 26364 0350 12       		.uleb128 0x12
+ 26365 0351 00000000 		.long	.LASF49
+ 26366 0355 07       		.byte	0x7
+ 26367 0356 99       		.byte	0x99
+ 26368 0357 CD020000 		.long	0x2cd
+ 26369 035b 02       		.byte	0x2
+ 26370 035c 23       		.byte	0x23
+ 26371 035d 18       		.uleb128 0x18
+ 26372 035e 12       		.uleb128 0x12
+ 26373 035f 00000000 		.long	.LASF50
+ 26374 0363 07       		.byte	0x7
+ 26375 0364 9B       		.byte	0x9b
+ 26376 0365 ED020000 		.long	0x2ed
+ 26377 0369 02       		.byte	0x2
+ 26378 036a 23       		.byte	0x23
+ 26379 036b 20       		.uleb128 0x20
+ 26380 036c 12       		.uleb128 0x12
+ 26381 036d 00000000 		.long	.LASF51
+ 26382 0371 07       		.byte	0x7
+ 26383 0372 9F       		.byte	0x9f
+ 26384 0373 ED020000 		.long	0x2ed
+ 26385 0377 02       		.byte	0x2
+ 26386 0378 23       		.byte	0x23
+ 26387 0379 28       		.uleb128 0x28
+ 26388 037a 12       		.uleb128 0x12
+ 26389 037b 00000000 		.long	.LASF52
+ 26390 037f 07       		.byte	0x7
+ 26391 0380 A3       		.byte	0xa3
+ 26392 0381 F6030000 		.long	0x3f6
+ 26393 0385 02       		.byte	0x2
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 783
+
+
+ 26394 0386 23       		.byte	0x23
+ 26395 0387 30       		.uleb128 0x30
+ 26396 0388 12       		.uleb128 0x12
+ 26397 0389 00000000 		.long	.LASF53
+ 26398 038d 07       		.byte	0x7
+ 26399 038e A6       		.byte	0xa6
+ 26400 038f F6030000 		.long	0x3f6
+ 26401 0393 02       		.byte	0x2
+ 26402 0394 23       		.byte	0x23
+ 26403 0395 38       		.uleb128 0x38
+ 26404 0396 00       		.byte	0x0
+ 26405 0397 04       		.uleb128 0x4
+ 26406 0398 00000000 		.long	.LASF56
+ 26407 039c 07       		.byte	0x7
+ 26408 039d 85       		.byte	0x85
+ 26409 039e A2030000 		.long	0x3a2
+ 26410 03a2 13       		.uleb128 0x13
+ 26411 03a3 00000000 		.long	.LASF56
+ 26412 03a7 40       		.byte	0x40
+ 26413 03a8 07       		.byte	0x7
+ 26414 03a9 85       		.byte	0x85
+ 26415 03aa C4030000 		.long	0x3c4
+ 26416 03ae 14       		.uleb128 0x14
+ 26417 03af 00000000 		.long	.LASF46
+ 26418 03b3 07       		.byte	0x7
+ 26419 03b4 AF       		.byte	0xaf
+ 26420 03b5 BC010000 		.long	0x1bc
+ 26421 03b9 15       		.uleb128 0x15
+ 26422 03ba 763100   		.string	"v1"
+ 26423 03bd 07       		.byte	0x7
+ 26424 03be B0       		.byte	0xb0
+ 26425 03bf 0F030000 		.long	0x30f
+ 26426 03c3 00       		.byte	0x0
+ 26427 03c4 16       		.uleb128 0x16
+ 26428 03c5 01       		.byte	0x1
+ 26429 03c6 D0030000 		.long	0x3d0
+ 26430 03ca 17       		.uleb128 0x17
+ 26431 03cb D0030000 		.long	0x3d0
+ 26432 03cf 00       		.byte	0x0
+ 26433 03d0 07       		.uleb128 0x7
+ 26434 03d1 08       		.byte	0x8
+ 26435 03d2 D6030000 		.long	0x3d6
+ 26436 03d6 06       		.uleb128 0x6
+ 26437 03d7 97030000 		.long	0x397
+ 26438 03db 07       		.uleb128 0x7
+ 26439 03dc 08       		.byte	0x8
+ 26440 03dd C4030000 		.long	0x3c4
+ 26441 03e1 1A       		.uleb128 0x1a
+ 26442 03e2 01       		.byte	0x1
+ 26443 03e3 B1010000 		.long	0x1b1
+ 26444 03e7 F6030000 		.long	0x3f6
+ 26445 03eb 17       		.uleb128 0x17
+ 26446 03ec B1010000 		.long	0x1b1
+ 26447 03f0 17       		.uleb128 0x17
+ 26448 03f1 D8000000 		.long	0xd8
+ 26449 03f5 00       		.byte	0x0
+ 26450 03f6 07       		.uleb128 0x7
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 784
+
+
+ 26451 03f7 08       		.byte	0x8
+ 26452 03f8 E1030000 		.long	0x3e1
+ 26453 03fc 04       		.uleb128 0x4
+ 26454 03fd 00000000 		.long	.LASF57
+ 26455 0401 08       		.byte	0x8
+ 26456 0402 9D       		.byte	0x9d
+ 26457 0403 49000000 		.long	0x49
+ 26458 0407 04       		.uleb128 0x4
+ 26459 0408 00000000 		.long	.LASF58
+ 26460 040c 08       		.byte	0x8
+ 26461 040d 9E       		.byte	0x9e
+ 26462 040e 62000000 		.long	0x62
+ 26463 0412 04       		.uleb128 0x4
+ 26464 0413 00000000 		.long	.LASF59
+ 26465 0417 08       		.byte	0x8
+ 26466 0418 9F       		.byte	0x9f
+ 26467 0419 1D040000 		.long	0x41d
+ 26468 041d 13       		.uleb128 0x13
+ 26469 041e 00000000 		.long	.LASF59
+ 26470 0422 04       		.byte	0x4
+ 26471 0423 08       		.byte	0x8
+ 26472 0424 9F       		.byte	0x9f
+ 26473 0425 40040000 		.long	0x440
+ 26474 0429 14       		.uleb128 0x14
+ 26475 042a 00000000 		.long	.LASF60
+ 26476 042e 08       		.byte	0x8
+ 26477 042f A2       		.byte	0xa2
+ 26478 0430 07040000 		.long	0x407
+ 26479 0434 14       		.uleb128 0x14
+ 26480 0435 00000000 		.long	.LASF61
+ 26481 0439 08       		.byte	0x8
+ 26482 043a A3       		.byte	0xa3
+ 26483 043b 40040000 		.long	0x440
+ 26484 043f 00       		.byte	0x0
+ 26485 0440 09       		.uleb128 0x9
+ 26486 0441 FC030000 		.long	0x3fc
+ 26487 0445 50040000 		.long	0x450
+ 26488 0449 0A       		.uleb128 0xa
+ 26489 044a 91000000 		.long	0x91
+ 26490 044e 03       		.byte	0x3
+ 26491 044f 00       		.byte	0x0
+ 26492 0450 09       		.uleb128 0x9
+ 26493 0451 FC030000 		.long	0x3fc
+ 26494 0455 60040000 		.long	0x460
+ 26495 0459 0A       		.uleb128 0xa
+ 26496 045a 91000000 		.long	0x91
+ 26497 045e 0F       		.byte	0xf
+ 26498 045f 00       		.byte	0x0
+ 26499 0460 04       		.uleb128 0x4
+ 26500 0461 00000000 		.long	.LASF62
+ 26501 0465 08       		.byte	0x8
+ 26502 0466 AC       		.byte	0xac
+ 26503 0467 E6000000 		.long	0xe6
+ 26504 046b 04       		.uleb128 0x4
+ 26505 046c 00000000 		.long	.LASF63
+ 26506 0470 08       		.byte	0x8
+ 26507 0471 B0       		.byte	0xb0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 785
+
+
+ 26508 0472 76040000 		.long	0x476
+ 26509 0476 1B       		.uleb128 0x1b
+ 26510 0477 00000000 		.long	.LASF63
+ 26511 047b 0001     		.value	0x100
+ 26512 047d 08       		.byte	0x8
+ 26513 047e B0       		.byte	0xb0
+ 26514 047f A1040000 		.long	0x4a1
+ 26515 0483 12       		.uleb128 0x12
+ 26516 0484 00000000 		.long	.LASF64
+ 26517 0488 08       		.byte	0x8
+ 26518 0489 B3       		.byte	0xb3
+ 26519 048a A1040000 		.long	0x4a1
+ 26520 048e 02       		.byte	0x2
+ 26521 048f 23       		.byte	0x23
+ 26522 0490 00       		.uleb128 0x0
+ 26523 0491 12       		.uleb128 0x12
+ 26524 0492 00000000 		.long	.LASF65
+ 26525 0496 08       		.byte	0x8
+ 26526 0497 B4       		.byte	0xb4
+ 26527 0498 62000000 		.long	0x62
+ 26528 049c 03       		.byte	0x3
+ 26529 049d 23       		.byte	0x23
+ 26530 049e F001     		.uleb128 0xf0
+ 26531 04a0 00       		.byte	0x0
+ 26532 04a1 09       		.uleb128 0x9
+ 26533 04a2 B1010000 		.long	0x1b1
+ 26534 04a6 B1040000 		.long	0x4b1
+ 26535 04aa 0A       		.uleb128 0xa
+ 26536 04ab 91000000 		.long	0x91
+ 26537 04af 0E       		.byte	0xe
+ 26538 04b0 00       		.byte	0x0
+ 26539 04b1 1C       		.uleb128 0x1c
+ 26540 04b2 10       		.byte	0x10
+ 26541 04b3 08       		.byte	0x8
+ 26542 04b4 C0       		.byte	0xc0
+ 26543 04b5 F1040000 		.long	0x4f1
+ 26544 04b9 14       		.uleb128 0x14
+ 26545 04ba 00000000 		.long	.LASF66
+ 26546 04be 08       		.byte	0x8
+ 26547 04bf C1       		.byte	0xc1
+ 26548 04c0 B1010000 		.long	0x1b1
+ 26549 04c4 15       		.uleb128 0x15
+ 26550 04c5 75363400 		.string	"u64"
+ 26551 04c9 08       		.byte	0x8
+ 26552 04ca C2       		.byte	0xc2
+ 26553 04cb F1040000 		.long	0x4f1
+ 26554 04cf 14       		.uleb128 0x14
+ 26555 04d0 00000000 		.long	.LASF67
+ 26556 04d4 08       		.byte	0x8
+ 26557 04d5 C3       		.byte	0xc3
+ 26558 04d6 01050000 		.long	0x501
+ 26559 04da 14       		.uleb128 0x14
+ 26560 04db 00000000 		.long	.LASF61
+ 26561 04df 08       		.byte	0x8
+ 26562 04e0 C4       		.byte	0xc4
+ 26563 04e1 50040000 		.long	0x450
+ 26564 04e5 14       		.uleb128 0x14
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 786
+
+
+ 26565 04e6 00000000 		.long	.LASF68
+ 26566 04ea 08       		.byte	0x8
+ 26567 04eb C5       		.byte	0xc5
+ 26568 04ec 11050000 		.long	0x511
+ 26569 04f0 00       		.byte	0x0
+ 26570 04f1 09       		.uleb128 0x9
+ 26571 04f2 74000000 		.long	0x74
+ 26572 04f6 01050000 		.long	0x501
+ 26573 04fa 0A       		.uleb128 0xa
+ 26574 04fb 91000000 		.long	0x91
+ 26575 04ff 01       		.byte	0x1
+ 26576 0500 00       		.byte	0x0
+ 26577 0501 09       		.uleb128 0x9
+ 26578 0502 07040000 		.long	0x407
+ 26579 0506 11050000 		.long	0x511
+ 26580 050a 0A       		.uleb128 0xa
+ 26581 050b 91000000 		.long	0x91
+ 26582 050f 03       		.byte	0x3
+ 26583 0510 00       		.byte	0x0
+ 26584 0511 09       		.uleb128 0x9
+ 26585 0512 FC030000 		.long	0x3fc
+ 26586 0516 27050000 		.long	0x527
+ 26587 051a 0A       		.uleb128 0xa
+ 26588 051b 91000000 		.long	0x91
+ 26589 051f 03       		.byte	0x3
+ 26590 0520 0A       		.uleb128 0xa
+ 26591 0521 91000000 		.long	0x91
+ 26592 0525 03       		.byte	0x3
+ 26593 0526 00       		.byte	0x0
+ 26594 0527 04       		.uleb128 0x4
+ 26595 0528 00000000 		.long	.LASF69
+ 26596 052c 08       		.byte	0x8
+ 26597 052d C6       		.byte	0xc6
+ 26598 052e B1040000 		.long	0x4b1
+ 26599 0532 04       		.uleb128 0x4
+ 26600 0533 00000000 		.long	.LASF70
+ 26601 0537 09       		.byte	0x9
+ 26602 0538 40       		.byte	0x40
+ 26603 0539 3D050000 		.long	0x53d
+ 26604 053d 13       		.uleb128 0x13
+ 26605 053e 00000000 		.long	.LASF70
+ 26606 0542 40       		.byte	0x40
+ 26607 0543 09       		.byte	0x9
+ 26608 0544 40       		.byte	0x40
+ 26609 0545 60050000 		.long	0x560
+ 26610 0549 14       		.uleb128 0x14
+ 26611 054a 00000000 		.long	.LASF71
+ 26612 054e 09       		.byte	0x9
+ 26613 054f 43       		.byte	0x43
+ 26614 0550 78020000 		.long	0x278
+ 26615 0554 15       		.uleb128 0x15
+ 26616 0555 76656300 		.string	"vec"
+ 26617 0559 09       		.byte	0x9
+ 26618 055a 44       		.byte	0x44
+ 26619 055b 97030000 		.long	0x397
+ 26620 055f 00       		.byte	0x0
+ 26621 0560 1D       		.uleb128 0x1d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 787
+
+
+ 26622 0561 00000000 		.long	.LASF94
+ 26623 0565 04       		.byte	0x4
+ 26624 0566 0A       		.byte	0xa
+ 26625 0567 5A       		.byte	0x5a
+ 26626 0568 F1050000 		.long	0x5f1
+ 26627 056c 0E       		.uleb128 0xe
+ 26628 056d 00000000 		.long	.LASF72
+ 26629 0571 00       		.sleb128 0
+ 26630 0572 0E       		.uleb128 0xe
+ 26631 0573 00000000 		.long	.LASF73
+ 26632 0577 01       		.sleb128 1
+ 26633 0578 0E       		.uleb128 0xe
+ 26634 0579 00000000 		.long	.LASF74
+ 26635 057d 02       		.sleb128 2
+ 26636 057e 0E       		.uleb128 0xe
+ 26637 057f 00000000 		.long	.LASF75
+ 26638 0583 03       		.sleb128 3
+ 26639 0584 0E       		.uleb128 0xe
+ 26640 0585 00000000 		.long	.LASF76
+ 26641 0589 04       		.sleb128 4
+ 26642 058a 0E       		.uleb128 0xe
+ 26643 058b 00000000 		.long	.LASF77
+ 26644 058f 05       		.sleb128 5
+ 26645 0590 0E       		.uleb128 0xe
+ 26646 0591 00000000 		.long	.LASF78
+ 26647 0595 06       		.sleb128 6
+ 26648 0596 0E       		.uleb128 0xe
+ 26649 0597 00000000 		.long	.LASF79
+ 26650 059b 07       		.sleb128 7
+ 26651 059c 0E       		.uleb128 0xe
+ 26652 059d 00000000 		.long	.LASF80
+ 26653 05a1 08       		.sleb128 8
+ 26654 05a2 0E       		.uleb128 0xe
+ 26655 05a3 00000000 		.long	.LASF81
+ 26656 05a7 09       		.sleb128 9
+ 26657 05a8 0E       		.uleb128 0xe
+ 26658 05a9 00000000 		.long	.LASF82
+ 26659 05ad 0A       		.sleb128 10
+ 26660 05ae 0E       		.uleb128 0xe
+ 26661 05af 00000000 		.long	.LASF83
+ 26662 05b3 0B       		.sleb128 11
+ 26663 05b4 0E       		.uleb128 0xe
+ 26664 05b5 00000000 		.long	.LASF84
+ 26665 05b9 0C       		.sleb128 12
+ 26666 05ba 0E       		.uleb128 0xe
+ 26667 05bb 00000000 		.long	.LASF85
+ 26668 05bf 0D       		.sleb128 13
+ 26669 05c0 0E       		.uleb128 0xe
+ 26670 05c1 00000000 		.long	.LASF86
+ 26671 05c5 0E       		.sleb128 14
+ 26672 05c6 0E       		.uleb128 0xe
+ 26673 05c7 00000000 		.long	.LASF87
+ 26674 05cb 0E       		.sleb128 14
+ 26675 05cc 0E       		.uleb128 0xe
+ 26676 05cd 00000000 		.long	.LASF88
+ 26677 05d1 0F       		.sleb128 15
+ 26678 05d2 0E       		.uleb128 0xe
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 788
+
+
+ 26679 05d3 00000000 		.long	.LASF89
+ 26680 05d7 10       		.sleb128 16
+ 26681 05d8 0E       		.uleb128 0xe
+ 26682 05d9 00000000 		.long	.LASF90
+ 26683 05dd 11       		.sleb128 17
+ 26684 05de 0E       		.uleb128 0xe
+ 26685 05df 00000000 		.long	.LASF91
+ 26686 05e3 12       		.sleb128 18
+ 26687 05e4 0E       		.uleb128 0xe
+ 26688 05e5 00000000 		.long	.LASF92
+ 26689 05e9 13       		.sleb128 19
+ 26690 05ea 0E       		.uleb128 0xe
+ 26691 05eb 00000000 		.long	.LASF93
+ 26692 05ef 14       		.sleb128 20
+ 26693 05f0 00       		.byte	0x0
+ 26694 05f1 1D       		.uleb128 0x1d
+ 26695 05f2 00000000 		.long	.LASF95
+ 26696 05f6 04       		.byte	0x4
+ 26697 05f7 0A       		.byte	0xa
+ 26698 05f8 77       		.byte	0x77
+ 26699 05f9 78070000 		.long	0x778
+ 26700 05fd 0E       		.uleb128 0xe
+ 26701 05fe 00000000 		.long	.LASF96
+ 26702 0602 00       		.sleb128 0
+ 26703 0603 0E       		.uleb128 0xe
+ 26704 0604 00000000 		.long	.LASF97
+ 26705 0608 01       		.sleb128 1
+ 26706 0609 0E       		.uleb128 0xe
+ 26707 060a 00000000 		.long	.LASF98
+ 26708 060e 02       		.sleb128 2
+ 26709 060f 0E       		.uleb128 0xe
+ 26710 0610 00000000 		.long	.LASF99
+ 26711 0614 03       		.sleb128 3
+ 26712 0615 0E       		.uleb128 0xe
+ 26713 0616 00000000 		.long	.LASF100
+ 26714 061a 04       		.sleb128 4
+ 26715 061b 0E       		.uleb128 0xe
+ 26716 061c 00000000 		.long	.LASF101
+ 26717 0620 05       		.sleb128 5
+ 26718 0621 0E       		.uleb128 0xe
+ 26719 0622 00000000 		.long	.LASF102
+ 26720 0626 06       		.sleb128 6
+ 26721 0627 0E       		.uleb128 0xe
+ 26722 0628 00000000 		.long	.LASF103
+ 26723 062c 07       		.sleb128 7
+ 26724 062d 0E       		.uleb128 0xe
+ 26725 062e 00000000 		.long	.LASF104
+ 26726 0632 08       		.sleb128 8
+ 26727 0633 0E       		.uleb128 0xe
+ 26728 0634 00000000 		.long	.LASF105
+ 26729 0638 09       		.sleb128 9
+ 26730 0639 0E       		.uleb128 0xe
+ 26731 063a 00000000 		.long	.LASF106
+ 26732 063e 0A       		.sleb128 10
+ 26733 063f 0E       		.uleb128 0xe
+ 26734 0640 00000000 		.long	.LASF107
+ 26735 0644 0B       		.sleb128 11
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 789
+
+
+ 26736 0645 0E       		.uleb128 0xe
+ 26737 0646 00000000 		.long	.LASF108
+ 26738 064a 0C       		.sleb128 12
+ 26739 064b 0E       		.uleb128 0xe
+ 26740 064c 00000000 		.long	.LASF109
+ 26741 0650 0D       		.sleb128 13
+ 26742 0651 0E       		.uleb128 0xe
+ 26743 0652 00000000 		.long	.LASF110
+ 26744 0656 0E       		.sleb128 14
+ 26745 0657 0E       		.uleb128 0xe
+ 26746 0658 00000000 		.long	.LASF111
+ 26747 065c 0F       		.sleb128 15
+ 26748 065d 0E       		.uleb128 0xe
+ 26749 065e 00000000 		.long	.LASF112
+ 26750 0662 10       		.sleb128 16
+ 26751 0663 0E       		.uleb128 0xe
+ 26752 0664 00000000 		.long	.LASF113
+ 26753 0668 11       		.sleb128 17
+ 26754 0669 0E       		.uleb128 0xe
+ 26755 066a 00000000 		.long	.LASF114
+ 26756 066e 12       		.sleb128 18
+ 26757 066f 0E       		.uleb128 0xe
+ 26758 0670 00000000 		.long	.LASF115
+ 26759 0674 13       		.sleb128 19
+ 26760 0675 0E       		.uleb128 0xe
+ 26761 0676 00000000 		.long	.LASF116
+ 26762 067a 14       		.sleb128 20
+ 26763 067b 0E       		.uleb128 0xe
+ 26764 067c 00000000 		.long	.LASF117
+ 26765 0680 15       		.sleb128 21
+ 26766 0681 0E       		.uleb128 0xe
+ 26767 0682 00000000 		.long	.LASF118
+ 26768 0686 16       		.sleb128 22
+ 26769 0687 0E       		.uleb128 0xe
+ 26770 0688 00000000 		.long	.LASF119
+ 26771 068c 17       		.sleb128 23
+ 26772 068d 0E       		.uleb128 0xe
+ 26773 068e 00000000 		.long	.LASF120
+ 26774 0692 18       		.sleb128 24
+ 26775 0693 0E       		.uleb128 0xe
+ 26776 0694 00000000 		.long	.LASF121
+ 26777 0698 19       		.sleb128 25
+ 26778 0699 0E       		.uleb128 0xe
+ 26779 069a 00000000 		.long	.LASF122
+ 26780 069e 1A       		.sleb128 26
+ 26781 069f 0E       		.uleb128 0xe
+ 26782 06a0 00000000 		.long	.LASF123
+ 26783 06a4 1B       		.sleb128 27
+ 26784 06a5 0E       		.uleb128 0xe
+ 26785 06a6 00000000 		.long	.LASF124
+ 26786 06aa 1C       		.sleb128 28
+ 26787 06ab 0E       		.uleb128 0xe
+ 26788 06ac 00000000 		.long	.LASF125
+ 26789 06b0 1D       		.sleb128 29
+ 26790 06b1 0E       		.uleb128 0xe
+ 26791 06b2 00000000 		.long	.LASF126
+ 26792 06b6 1E       		.sleb128 30
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 790
+
+
+ 26793 06b7 0E       		.uleb128 0xe
+ 26794 06b8 00000000 		.long	.LASF127
+ 26795 06bc 1F       		.sleb128 31
+ 26796 06bd 0E       		.uleb128 0xe
+ 26797 06be 00000000 		.long	.LASF128
+ 26798 06c2 20       		.sleb128 32
+ 26799 06c3 0E       		.uleb128 0xe
+ 26800 06c4 00000000 		.long	.LASF129
+ 26801 06c8 21       		.sleb128 33
+ 26802 06c9 0E       		.uleb128 0xe
+ 26803 06ca 00000000 		.long	.LASF130
+ 26804 06ce 22       		.sleb128 34
+ 26805 06cf 0E       		.uleb128 0xe
+ 26806 06d0 00000000 		.long	.LASF131
+ 26807 06d4 23       		.sleb128 35
+ 26808 06d5 0E       		.uleb128 0xe
+ 26809 06d6 00000000 		.long	.LASF132
+ 26810 06da 24       		.sleb128 36
+ 26811 06db 0E       		.uleb128 0xe
+ 26812 06dc 00000000 		.long	.LASF133
+ 26813 06e0 25       		.sleb128 37
+ 26814 06e1 0E       		.uleb128 0xe
+ 26815 06e2 00000000 		.long	.LASF134
+ 26816 06e6 26       		.sleb128 38
+ 26817 06e7 0E       		.uleb128 0xe
+ 26818 06e8 00000000 		.long	.LASF135
+ 26819 06ec 27       		.sleb128 39
+ 26820 06ed 0E       		.uleb128 0xe
+ 26821 06ee 00000000 		.long	.LASF136
+ 26822 06f2 28       		.sleb128 40
+ 26823 06f3 0E       		.uleb128 0xe
+ 26824 06f4 00000000 		.long	.LASF137
+ 26825 06f8 29       		.sleb128 41
+ 26826 06f9 0E       		.uleb128 0xe
+ 26827 06fa 00000000 		.long	.LASF138
+ 26828 06fe 2A       		.sleb128 42
+ 26829 06ff 0E       		.uleb128 0xe
+ 26830 0700 00000000 		.long	.LASF139
+ 26831 0704 2B       		.sleb128 43
+ 26832 0705 0E       		.uleb128 0xe
+ 26833 0706 00000000 		.long	.LASF140
+ 26834 070a 2C       		.sleb128 44
+ 26835 070b 0E       		.uleb128 0xe
+ 26836 070c 00000000 		.long	.LASF141
+ 26837 0710 2D       		.sleb128 45
+ 26838 0711 0E       		.uleb128 0xe
+ 26839 0712 00000000 		.long	.LASF142
+ 26840 0716 2E       		.sleb128 46
+ 26841 0717 0E       		.uleb128 0xe
+ 26842 0718 00000000 		.long	.LASF143
+ 26843 071c 2F       		.sleb128 47
+ 26844 071d 0E       		.uleb128 0xe
+ 26845 071e 00000000 		.long	.LASF144
+ 26846 0722 30       		.sleb128 48
+ 26847 0723 0E       		.uleb128 0xe
+ 26848 0724 00000000 		.long	.LASF145
+ 26849 0728 31       		.sleb128 49
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 791
+
+
+ 26850 0729 0E       		.uleb128 0xe
+ 26851 072a 00000000 		.long	.LASF146
+ 26852 072e 32       		.sleb128 50
+ 26853 072f 0E       		.uleb128 0xe
+ 26854 0730 00000000 		.long	.LASF147
+ 26855 0734 33       		.sleb128 51
+ 26856 0735 0E       		.uleb128 0xe
+ 26857 0736 00000000 		.long	.LASF148
+ 26858 073a 34       		.sleb128 52
+ 26859 073b 0E       		.uleb128 0xe
+ 26860 073c 00000000 		.long	.LASF149
+ 26861 0740 35       		.sleb128 53
+ 26862 0741 0E       		.uleb128 0xe
+ 26863 0742 00000000 		.long	.LASF150
+ 26864 0746 36       		.sleb128 54
+ 26865 0747 0E       		.uleb128 0xe
+ 26866 0748 00000000 		.long	.LASF151
+ 26867 074c 36       		.sleb128 54
+ 26868 074d 0E       		.uleb128 0xe
+ 26869 074e 00000000 		.long	.LASF152
+ 26870 0752 37       		.sleb128 55
+ 26871 0753 0E       		.uleb128 0xe
+ 26872 0754 00000000 		.long	.LASF153
+ 26873 0758 38       		.sleb128 56
+ 26874 0759 0E       		.uleb128 0xe
+ 26875 075a 00000000 		.long	.LASF154
+ 26876 075e 39       		.sleb128 57
+ 26877 075f 0E       		.uleb128 0xe
+ 26878 0760 00000000 		.long	.LASF155
+ 26879 0764 3A       		.sleb128 58
+ 26880 0765 0E       		.uleb128 0xe
+ 26881 0766 00000000 		.long	.LASF156
+ 26882 076a 3B       		.sleb128 59
+ 26883 076b 0E       		.uleb128 0xe
+ 26884 076c 00000000 		.long	.LASF157
+ 26885 0770 3C       		.sleb128 60
+ 26886 0771 0E       		.uleb128 0xe
+ 26887 0772 00000000 		.long	.LASF158
+ 26888 0776 3D       		.sleb128 61
+ 26889 0777 00       		.byte	0x0
+ 26890 0778 1D       		.uleb128 0x1d
+ 26891 0779 00000000 		.long	.LASF159
+ 26892 077d 04       		.byte	0x4
+ 26893 077e 0A       		.byte	0xa
+ 26894 077f BD       		.byte	0xbd
+ 26895 0780 2E090000 		.long	0x92e
+ 26896 0784 0E       		.uleb128 0xe
+ 26897 0785 00000000 		.long	.LASF160
+ 26898 0789 00       		.sleb128 0
+ 26899 078a 0E       		.uleb128 0xe
+ 26900 078b 00000000 		.long	.LASF161
+ 26901 078f 01       		.sleb128 1
+ 26902 0790 0E       		.uleb128 0xe
+ 26903 0791 00000000 		.long	.LASF162
+ 26904 0795 02       		.sleb128 2
+ 26905 0796 0E       		.uleb128 0xe
+ 26906 0797 00000000 		.long	.LASF163
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 792
+
+
+ 26907 079b 03       		.sleb128 3
+ 26908 079c 0E       		.uleb128 0xe
+ 26909 079d 00000000 		.long	.LASF164
+ 26910 07a1 04       		.sleb128 4
+ 26911 07a2 0E       		.uleb128 0xe
+ 26912 07a3 00000000 		.long	.LASF165
+ 26913 07a7 05       		.sleb128 5
+ 26914 07a8 0E       		.uleb128 0xe
+ 26915 07a9 00000000 		.long	.LASF166
+ 26916 07ad 06       		.sleb128 6
+ 26917 07ae 0E       		.uleb128 0xe
+ 26918 07af 00000000 		.long	.LASF167
+ 26919 07b3 07       		.sleb128 7
+ 26920 07b4 0E       		.uleb128 0xe
+ 26921 07b5 00000000 		.long	.LASF168
+ 26922 07b9 08       		.sleb128 8
+ 26923 07ba 0E       		.uleb128 0xe
+ 26924 07bb 00000000 		.long	.LASF169
+ 26925 07bf 09       		.sleb128 9
+ 26926 07c0 0E       		.uleb128 0xe
+ 26927 07c1 00000000 		.long	.LASF170
+ 26928 07c5 0A       		.sleb128 10
+ 26929 07c6 0E       		.uleb128 0xe
+ 26930 07c7 00000000 		.long	.LASF171
+ 26931 07cb 0B       		.sleb128 11
+ 26932 07cc 0E       		.uleb128 0xe
+ 26933 07cd 00000000 		.long	.LASF172
+ 26934 07d1 0C       		.sleb128 12
+ 26935 07d2 0E       		.uleb128 0xe
+ 26936 07d3 00000000 		.long	.LASF173
+ 26937 07d7 0D       		.sleb128 13
+ 26938 07d8 0E       		.uleb128 0xe
+ 26939 07d9 00000000 		.long	.LASF174
+ 26940 07dd 0E       		.sleb128 14
+ 26941 07de 0E       		.uleb128 0xe
+ 26942 07df 00000000 		.long	.LASF175
+ 26943 07e3 0F       		.sleb128 15
+ 26944 07e4 0E       		.uleb128 0xe
+ 26945 07e5 00000000 		.long	.LASF176
+ 26946 07e9 10       		.sleb128 16
+ 26947 07ea 0E       		.uleb128 0xe
+ 26948 07eb 00000000 		.long	.LASF177
+ 26949 07ef 11       		.sleb128 17
+ 26950 07f0 0E       		.uleb128 0xe
+ 26951 07f1 00000000 		.long	.LASF178
+ 26952 07f5 12       		.sleb128 18
+ 26953 07f6 0E       		.uleb128 0xe
+ 26954 07f7 00000000 		.long	.LASF179
+ 26955 07fb 13       		.sleb128 19
+ 26956 07fc 0E       		.uleb128 0xe
+ 26957 07fd 00000000 		.long	.LASF180
+ 26958 0801 14       		.sleb128 20
+ 26959 0802 0E       		.uleb128 0xe
+ 26960 0803 00000000 		.long	.LASF181
+ 26961 0807 15       		.sleb128 21
+ 26962 0808 0E       		.uleb128 0xe
+ 26963 0809 00000000 		.long	.LASF182
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 793
+
+
+ 26964 080d 16       		.sleb128 22
+ 26965 080e 0E       		.uleb128 0xe
+ 26966 080f 00000000 		.long	.LASF183
+ 26967 0813 17       		.sleb128 23
+ 26968 0814 0E       		.uleb128 0xe
+ 26969 0815 00000000 		.long	.LASF184
+ 26970 0819 18       		.sleb128 24
+ 26971 081a 0E       		.uleb128 0xe
+ 26972 081b 00000000 		.long	.LASF185
+ 26973 081f 19       		.sleb128 25
+ 26974 0820 0E       		.uleb128 0xe
+ 26975 0821 00000000 		.long	.LASF186
+ 26976 0825 1A       		.sleb128 26
+ 26977 0826 0E       		.uleb128 0xe
+ 26978 0827 00000000 		.long	.LASF187
+ 26979 082b 1B       		.sleb128 27
+ 26980 082c 0E       		.uleb128 0xe
+ 26981 082d 00000000 		.long	.LASF188
+ 26982 0831 1C       		.sleb128 28
+ 26983 0832 0E       		.uleb128 0xe
+ 26984 0833 00000000 		.long	.LASF189
+ 26985 0837 1D       		.sleb128 29
+ 26986 0838 0E       		.uleb128 0xe
+ 26987 0839 00000000 		.long	.LASF190
+ 26988 083d 1E       		.sleb128 30
+ 26989 083e 0E       		.uleb128 0xe
+ 26990 083f 00000000 		.long	.LASF191
+ 26991 0843 1F       		.sleb128 31
+ 26992 0844 0E       		.uleb128 0xe
+ 26993 0845 00000000 		.long	.LASF192
+ 26994 0849 20       		.sleb128 32
+ 26995 084a 0E       		.uleb128 0xe
+ 26996 084b 00000000 		.long	.LASF193
+ 26997 084f 21       		.sleb128 33
+ 26998 0850 0E       		.uleb128 0xe
+ 26999 0851 00000000 		.long	.LASF194
+ 27000 0855 22       		.sleb128 34
+ 27001 0856 0E       		.uleb128 0xe
+ 27002 0857 00000000 		.long	.LASF195
+ 27003 085b 23       		.sleb128 35
+ 27004 085c 0E       		.uleb128 0xe
+ 27005 085d 00000000 		.long	.LASF196
+ 27006 0861 24       		.sleb128 36
+ 27007 0862 0E       		.uleb128 0xe
+ 27008 0863 00000000 		.long	.LASF197
+ 27009 0867 25       		.sleb128 37
+ 27010 0868 0E       		.uleb128 0xe
+ 27011 0869 00000000 		.long	.LASF198
+ 27012 086d 26       		.sleb128 38
+ 27013 086e 0E       		.uleb128 0xe
+ 27014 086f 00000000 		.long	.LASF199
+ 27015 0873 27       		.sleb128 39
+ 27016 0874 0E       		.uleb128 0xe
+ 27017 0875 00000000 		.long	.LASF200
+ 27018 0879 28       		.sleb128 40
+ 27019 087a 0E       		.uleb128 0xe
+ 27020 087b 00000000 		.long	.LASF201
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 794
+
+
+ 27021 087f 29       		.sleb128 41
+ 27022 0880 0E       		.uleb128 0xe
+ 27023 0881 00000000 		.long	.LASF202
+ 27024 0885 2A       		.sleb128 42
+ 27025 0886 0E       		.uleb128 0xe
+ 27026 0887 00000000 		.long	.LASF203
+ 27027 088b 2B       		.sleb128 43
+ 27028 088c 0E       		.uleb128 0xe
+ 27029 088d 00000000 		.long	.LASF204
+ 27030 0891 2C       		.sleb128 44
+ 27031 0892 0E       		.uleb128 0xe
+ 27032 0893 00000000 		.long	.LASF205
+ 27033 0897 2D       		.sleb128 45
+ 27034 0898 0E       		.uleb128 0xe
+ 27035 0899 00000000 		.long	.LASF206
+ 27036 089d 2E       		.sleb128 46
+ 27037 089e 0E       		.uleb128 0xe
+ 27038 089f 00000000 		.long	.LASF207
+ 27039 08a3 2F       		.sleb128 47
+ 27040 08a4 0E       		.uleb128 0xe
+ 27041 08a5 00000000 		.long	.LASF208
+ 27042 08a9 30       		.sleb128 48
+ 27043 08aa 0E       		.uleb128 0xe
+ 27044 08ab 00000000 		.long	.LASF209
+ 27045 08af 31       		.sleb128 49
+ 27046 08b0 0E       		.uleb128 0xe
+ 27047 08b1 00000000 		.long	.LASF210
+ 27048 08b5 32       		.sleb128 50
+ 27049 08b6 0E       		.uleb128 0xe
+ 27050 08b7 00000000 		.long	.LASF211
+ 27051 08bb 33       		.sleb128 51
+ 27052 08bc 0E       		.uleb128 0xe
+ 27053 08bd 00000000 		.long	.LASF212
+ 27054 08c1 34       		.sleb128 52
+ 27055 08c2 0E       		.uleb128 0xe
+ 27056 08c3 00000000 		.long	.LASF213
+ 27057 08c7 35       		.sleb128 53
+ 27058 08c8 0E       		.uleb128 0xe
+ 27059 08c9 00000000 		.long	.LASF214
+ 27060 08cd 36       		.sleb128 54
+ 27061 08ce 0E       		.uleb128 0xe
+ 27062 08cf 00000000 		.long	.LASF215
+ 27063 08d3 37       		.sleb128 55
+ 27064 08d4 0E       		.uleb128 0xe
+ 27065 08d5 00000000 		.long	.LASF216
+ 27066 08d9 38       		.sleb128 56
+ 27067 08da 0E       		.uleb128 0xe
+ 27068 08db 00000000 		.long	.LASF217
+ 27069 08df 39       		.sleb128 57
+ 27070 08e0 0E       		.uleb128 0xe
+ 27071 08e1 00000000 		.long	.LASF218
+ 27072 08e5 3A       		.sleb128 58
+ 27073 08e6 0E       		.uleb128 0xe
+ 27074 08e7 00000000 		.long	.LASF219
+ 27075 08eb 3A       		.sleb128 58
+ 27076 08ec 0E       		.uleb128 0xe
+ 27077 08ed 00000000 		.long	.LASF220
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 795
+
+
+ 27078 08f1 3B       		.sleb128 59
+ 27079 08f2 0E       		.uleb128 0xe
+ 27080 08f3 00000000 		.long	.LASF221
+ 27081 08f7 3C       		.sleb128 60
+ 27082 08f8 0E       		.uleb128 0xe
+ 27083 08f9 00000000 		.long	.LASF222
+ 27084 08fd 3D       		.sleb128 61
+ 27085 08fe 0E       		.uleb128 0xe
+ 27086 08ff 00000000 		.long	.LASF223
+ 27087 0903 3E       		.sleb128 62
+ 27088 0904 0E       		.uleb128 0xe
+ 27089 0905 00000000 		.long	.LASF224
+ 27090 0909 3F       		.sleb128 63
+ 27091 090a 0E       		.uleb128 0xe
+ 27092 090b 00000000 		.long	.LASF225
+ 27093 090f C000     		.sleb128 64
+ 27094 0911 0E       		.uleb128 0xe
+ 27095 0912 00000000 		.long	.LASF226
+ 27096 0916 C100     		.sleb128 65
+ 27097 0918 0E       		.uleb128 0xe
+ 27098 0919 00000000 		.long	.LASF227
+ 27099 091d C200     		.sleb128 66
+ 27100 091f 0E       		.uleb128 0xe
+ 27101 0920 00000000 		.long	.LASF228
+ 27102 0924 C300     		.sleb128 67
+ 27103 0926 0E       		.uleb128 0xe
+ 27104 0927 00000000 		.long	.LASF229
+ 27105 092b C400     		.sleb128 68
+ 27106 092d 00       		.byte	0x0
+ 27107 092e 1E       		.uleb128 0x1e
+ 27108 092f 00000000 		.long	.LASF230
+ 27109 0933 04       		.byte	0x4
+ 27110 0934 0A       		.byte	0xa
+ 27111 0935 0A01     		.value	0x10a
+ 27112 0937 2D0A0000 		.long	0xa2d
+ 27113 093b 0E       		.uleb128 0xe
+ 27114 093c 00000000 		.long	.LASF231
+ 27115 0940 00       		.sleb128 0
+ 27116 0941 0E       		.uleb128 0xe
+ 27117 0942 00000000 		.long	.LASF232
+ 27118 0946 3D       		.sleb128 61
+ 27119 0947 0E       		.uleb128 0xe
+ 27120 0948 00000000 		.long	.LASF233
+ 27121 094c 3E       		.sleb128 62
+ 27122 094d 0E       		.uleb128 0xe
+ 27123 094e 00000000 		.long	.LASF234
+ 27124 0952 3F       		.sleb128 63
+ 27125 0953 0E       		.uleb128 0xe
+ 27126 0954 00000000 		.long	.LASF235
+ 27127 0958 C000     		.sleb128 64
+ 27128 095a 0E       		.uleb128 0xe
+ 27129 095b 00000000 		.long	.LASF236
+ 27130 095f C100     		.sleb128 65
+ 27131 0961 0E       		.uleb128 0xe
+ 27132 0962 00000000 		.long	.LASF237
+ 27133 0966 C200     		.sleb128 66
+ 27134 0968 0E       		.uleb128 0xe
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 796
+
+
+ 27135 0969 00000000 		.long	.LASF238
+ 27136 096d C300     		.sleb128 67
+ 27137 096f 0E       		.uleb128 0xe
+ 27138 0970 00000000 		.long	.LASF239
+ 27139 0974 C400     		.sleb128 68
+ 27140 0976 0E       		.uleb128 0xe
+ 27141 0977 00000000 		.long	.LASF240
+ 27142 097b C500     		.sleb128 69
+ 27143 097d 0E       		.uleb128 0xe
+ 27144 097e 00000000 		.long	.LASF241
+ 27145 0982 C600     		.sleb128 70
+ 27146 0984 0E       		.uleb128 0xe
+ 27147 0985 00000000 		.long	.LASF242
+ 27148 0989 C700     		.sleb128 71
+ 27149 098b 0E       		.uleb128 0xe
+ 27150 098c 00000000 		.long	.LASF243
+ 27151 0990 C800     		.sleb128 72
+ 27152 0992 0E       		.uleb128 0xe
+ 27153 0993 00000000 		.long	.LASF244
+ 27154 0997 C900     		.sleb128 73
+ 27155 0999 0E       		.uleb128 0xe
+ 27156 099a 00000000 		.long	.LASF245
+ 27157 099e CA00     		.sleb128 74
+ 27158 09a0 0E       		.uleb128 0xe
+ 27159 09a1 00000000 		.long	.LASF246
+ 27160 09a5 CB00     		.sleb128 75
+ 27161 09a7 0E       		.uleb128 0xe
+ 27162 09a8 00000000 		.long	.LASF247
+ 27163 09ac CC00     		.sleb128 76
+ 27164 09ae 0E       		.uleb128 0xe
+ 27165 09af 00000000 		.long	.LASF248
+ 27166 09b3 CD00     		.sleb128 77
+ 27167 09b5 0E       		.uleb128 0xe
+ 27168 09b6 00000000 		.long	.LASF249
+ 27169 09ba CE00     		.sleb128 78
+ 27170 09bc 0E       		.uleb128 0xe
+ 27171 09bd 00000000 		.long	.LASF250
+ 27172 09c1 CF00     		.sleb128 79
+ 27173 09c3 0E       		.uleb128 0xe
+ 27174 09c4 00000000 		.long	.LASF251
+ 27175 09c8 D000     		.sleb128 80
+ 27176 09ca 0E       		.uleb128 0xe
+ 27177 09cb 00000000 		.long	.LASF252
+ 27178 09cf D100     		.sleb128 81
+ 27179 09d1 0E       		.uleb128 0xe
+ 27180 09d2 00000000 		.long	.LASF253
+ 27181 09d6 D100     		.sleb128 81
+ 27182 09d8 0E       		.uleb128 0xe
+ 27183 09d9 00000000 		.long	.LASF254
+ 27184 09dd D200     		.sleb128 82
+ 27185 09df 0E       		.uleb128 0xe
+ 27186 09e0 00000000 		.long	.LASF255
+ 27187 09e4 D300     		.sleb128 83
+ 27188 09e6 0E       		.uleb128 0xe
+ 27189 09e7 00000000 		.long	.LASF256
+ 27190 09eb D400     		.sleb128 84
+ 27191 09ed 0E       		.uleb128 0xe
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 797
+
+
+ 27192 09ee 00000000 		.long	.LASF257
+ 27193 09f2 D500     		.sleb128 85
+ 27194 09f4 0E       		.uleb128 0xe
+ 27195 09f5 00000000 		.long	.LASF258
+ 27196 09f9 D600     		.sleb128 86
+ 27197 09fb 0E       		.uleb128 0xe
+ 27198 09fc 00000000 		.long	.LASF259
+ 27199 0a00 D700     		.sleb128 87
+ 27200 0a02 0E       		.uleb128 0xe
+ 27201 0a03 00000000 		.long	.LASF260
+ 27202 0a07 D800     		.sleb128 88
+ 27203 0a09 0E       		.uleb128 0xe
+ 27204 0a0a 00000000 		.long	.LASF261
+ 27205 0a0e D900     		.sleb128 89
+ 27206 0a10 0E       		.uleb128 0xe
+ 27207 0a11 00000000 		.long	.LASF262
+ 27208 0a15 DA00     		.sleb128 90
+ 27209 0a17 0E       		.uleb128 0xe
+ 27210 0a18 00000000 		.long	.LASF263
+ 27211 0a1c DB00     		.sleb128 91
+ 27212 0a1e 0E       		.uleb128 0xe
+ 27213 0a1f 00000000 		.long	.LASF264
+ 27214 0a23 DC00     		.sleb128 92
+ 27215 0a25 0E       		.uleb128 0xe
+ 27216 0a26 00000000 		.long	.LASF265
+ 27217 0a2a DD00     		.sleb128 93
+ 27218 0a2c 00       		.byte	0x0
+ 27219 0a2d 1E       		.uleb128 0x1e
+ 27220 0a2e 00000000 		.long	.LASF266
+ 27221 0a32 04       		.byte	0x4
+ 27222 0a33 0A       		.byte	0xa
+ 27223 0a34 3401     		.value	0x134
+ 27224 0a36 6D0B0000 		.long	0xb6d
+ 27225 0a3a 0E       		.uleb128 0xe
+ 27226 0a3b 00000000 		.long	.LASF267
+ 27227 0a3f 00       		.sleb128 0
+ 27228 0a40 0E       		.uleb128 0xe
+ 27229 0a41 00000000 		.long	.LASF268
+ 27230 0a45 01       		.sleb128 1
+ 27231 0a46 0E       		.uleb128 0xe
+ 27232 0a47 00000000 		.long	.LASF269
+ 27233 0a4b 02       		.sleb128 2
+ 27234 0a4c 0E       		.uleb128 0xe
+ 27235 0a4d 00000000 		.long	.LASF270
+ 27236 0a51 03       		.sleb128 3
+ 27237 0a52 0E       		.uleb128 0xe
+ 27238 0a53 00000000 		.long	.LASF271
+ 27239 0a57 04       		.sleb128 4
+ 27240 0a58 0E       		.uleb128 0xe
+ 27241 0a59 00000000 		.long	.LASF272
+ 27242 0a5d 05       		.sleb128 5
+ 27243 0a5e 0E       		.uleb128 0xe
+ 27244 0a5f 00000000 		.long	.LASF273
+ 27245 0a63 06       		.sleb128 6
+ 27246 0a64 0E       		.uleb128 0xe
+ 27247 0a65 00000000 		.long	.LASF274
+ 27248 0a69 07       		.sleb128 7
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 798
+
+
+ 27249 0a6a 0E       		.uleb128 0xe
+ 27250 0a6b 00000000 		.long	.LASF275
+ 27251 0a6f 08       		.sleb128 8
+ 27252 0a70 0E       		.uleb128 0xe
+ 27253 0a71 00000000 		.long	.LASF276
+ 27254 0a75 09       		.sleb128 9
+ 27255 0a76 0E       		.uleb128 0xe
+ 27256 0a77 00000000 		.long	.LASF277
+ 27257 0a7b 0A       		.sleb128 10
+ 27258 0a7c 0E       		.uleb128 0xe
+ 27259 0a7d 00000000 		.long	.LASF278
+ 27260 0a81 0B       		.sleb128 11
+ 27261 0a82 0E       		.uleb128 0xe
+ 27262 0a83 00000000 		.long	.LASF279
+ 27263 0a87 0C       		.sleb128 12
+ 27264 0a88 0E       		.uleb128 0xe
+ 27265 0a89 00000000 		.long	.LASF280
+ 27266 0a8d 0D       		.sleb128 13
+ 27267 0a8e 0E       		.uleb128 0xe
+ 27268 0a8f 00000000 		.long	.LASF281
+ 27269 0a93 0E       		.sleb128 14
+ 27270 0a94 0E       		.uleb128 0xe
+ 27271 0a95 00000000 		.long	.LASF282
+ 27272 0a99 0F       		.sleb128 15
+ 27273 0a9a 0E       		.uleb128 0xe
+ 27274 0a9b 00000000 		.long	.LASF283
+ 27275 0a9f 10       		.sleb128 16
+ 27276 0aa0 0E       		.uleb128 0xe
+ 27277 0aa1 00000000 		.long	.LASF284
+ 27278 0aa5 11       		.sleb128 17
+ 27279 0aa6 0E       		.uleb128 0xe
+ 27280 0aa7 00000000 		.long	.LASF285
+ 27281 0aab 12       		.sleb128 18
+ 27282 0aac 0E       		.uleb128 0xe
+ 27283 0aad 00000000 		.long	.LASF286
+ 27284 0ab1 13       		.sleb128 19
+ 27285 0ab2 0E       		.uleb128 0xe
+ 27286 0ab3 00000000 		.long	.LASF287
+ 27287 0ab7 14       		.sleb128 20
+ 27288 0ab8 0E       		.uleb128 0xe
+ 27289 0ab9 00000000 		.long	.LASF288
+ 27290 0abd 15       		.sleb128 21
+ 27291 0abe 0E       		.uleb128 0xe
+ 27292 0abf 00000000 		.long	.LASF289
+ 27293 0ac3 16       		.sleb128 22
+ 27294 0ac4 0E       		.uleb128 0xe
+ 27295 0ac5 00000000 		.long	.LASF290
+ 27296 0ac9 17       		.sleb128 23
+ 27297 0aca 0E       		.uleb128 0xe
+ 27298 0acb 00000000 		.long	.LASF291
+ 27299 0acf 18       		.sleb128 24
+ 27300 0ad0 0E       		.uleb128 0xe
+ 27301 0ad1 00000000 		.long	.LASF292
+ 27302 0ad5 19       		.sleb128 25
+ 27303 0ad6 0E       		.uleb128 0xe
+ 27304 0ad7 00000000 		.long	.LASF293
+ 27305 0adb 1A       		.sleb128 26
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 799
+
+
+ 27306 0adc 0E       		.uleb128 0xe
+ 27307 0add 00000000 		.long	.LASF294
+ 27308 0ae1 1B       		.sleb128 27
+ 27309 0ae2 0E       		.uleb128 0xe
+ 27310 0ae3 00000000 		.long	.LASF295
+ 27311 0ae7 1C       		.sleb128 28
+ 27312 0ae8 0E       		.uleb128 0xe
+ 27313 0ae9 00000000 		.long	.LASF296
+ 27314 0aed 1D       		.sleb128 29
+ 27315 0aee 0E       		.uleb128 0xe
+ 27316 0aef 00000000 		.long	.LASF297
+ 27317 0af3 1E       		.sleb128 30
+ 27318 0af4 0E       		.uleb128 0xe
+ 27319 0af5 00000000 		.long	.LASF298
+ 27320 0af9 1F       		.sleb128 31
+ 27321 0afa 0E       		.uleb128 0xe
+ 27322 0afb 00000000 		.long	.LASF299
+ 27323 0aff 20       		.sleb128 32
+ 27324 0b00 0E       		.uleb128 0xe
+ 27325 0b01 00000000 		.long	.LASF300
+ 27326 0b05 21       		.sleb128 33
+ 27327 0b06 0E       		.uleb128 0xe
+ 27328 0b07 00000000 		.long	.LASF301
+ 27329 0b0b 22       		.sleb128 34
+ 27330 0b0c 0E       		.uleb128 0xe
+ 27331 0b0d 00000000 		.long	.LASF302
+ 27332 0b11 23       		.sleb128 35
+ 27333 0b12 0E       		.uleb128 0xe
+ 27334 0b13 00000000 		.long	.LASF303
+ 27335 0b17 24       		.sleb128 36
+ 27336 0b18 0E       		.uleb128 0xe
+ 27337 0b19 00000000 		.long	.LASF304
+ 27338 0b1d 25       		.sleb128 37
+ 27339 0b1e 0E       		.uleb128 0xe
+ 27340 0b1f 00000000 		.long	.LASF305
+ 27341 0b23 26       		.sleb128 38
+ 27342 0b24 0E       		.uleb128 0xe
+ 27343 0b25 00000000 		.long	.LASF306
+ 27344 0b29 27       		.sleb128 39
+ 27345 0b2a 0E       		.uleb128 0xe
+ 27346 0b2b 00000000 		.long	.LASF307
+ 27347 0b2f 28       		.sleb128 40
+ 27348 0b30 0E       		.uleb128 0xe
+ 27349 0b31 00000000 		.long	.LASF308
+ 27350 0b35 29       		.sleb128 41
+ 27351 0b36 0E       		.uleb128 0xe
+ 27352 0b37 00000000 		.long	.LASF309
+ 27353 0b3b 29       		.sleb128 41
+ 27354 0b3c 0E       		.uleb128 0xe
+ 27355 0b3d 00000000 		.long	.LASF310
+ 27356 0b41 2A       		.sleb128 42
+ 27357 0b42 0E       		.uleb128 0xe
+ 27358 0b43 00000000 		.long	.LASF311
+ 27359 0b47 2B       		.sleb128 43
+ 27360 0b48 0E       		.uleb128 0xe
+ 27361 0b49 00000000 		.long	.LASF312
+ 27362 0b4d 2C       		.sleb128 44
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 800
+
+
+ 27363 0b4e 0E       		.uleb128 0xe
+ 27364 0b4f 00000000 		.long	.LASF313
+ 27365 0b53 2D       		.sleb128 45
+ 27366 0b54 0E       		.uleb128 0xe
+ 27367 0b55 00000000 		.long	.LASF314
+ 27368 0b59 2E       		.sleb128 46
+ 27369 0b5a 0E       		.uleb128 0xe
+ 27370 0b5b 00000000 		.long	.LASF315
+ 27371 0b5f 2F       		.sleb128 47
+ 27372 0b60 0E       		.uleb128 0xe
+ 27373 0b61 00000000 		.long	.LASF316
+ 27374 0b65 30       		.sleb128 48
+ 27375 0b66 0E       		.uleb128 0xe
+ 27376 0b67 00000000 		.long	.LASF317
+ 27377 0b6b 31       		.sleb128 49
+ 27378 0b6c 00       		.byte	0x0
+ 27379 0b6d 1F       		.uleb128 0x1f
+ 27380 0b6e 00000000 		.long	.LASF373
+ 27381 0b72 01       		.byte	0x1
+ 27382 0b73 38       		.byte	0x38
+ 27383 0b74 01       		.byte	0x1
+ 27384 0b75 62000000 		.long	0x62
+ 27385 0b79 00000000 		.quad	.LFB509
+ 27385      00000000 
+ 27386 0b81 00000000 		.quad	.LFE509
+ 27386      00000000 
+ 27387 0b89 00000000 		.long	.LLST0
+ 27388 0b8d AB0B0000 		.long	0xbab
+ 27389 0b91 20       		.uleb128 0x20
+ 27390 0b92 6900     		.string	"i"
+ 27391 0b94 01       		.byte	0x1
+ 27392 0b95 38       		.byte	0x38
+ 27393 0b96 62000000 		.long	0x62
+ 27394 0b9a 02       		.byte	0x2
+ 27395 0b9b 91       		.byte	0x91
+ 27396 0b9c 64       		.sleb128 -28
+ 27397 0b9d 21       		.uleb128 0x21
+ 27398 0b9e 72746E00 		.string	"rtn"
+ 27399 0ba2 01       		.byte	0x1
+ 27400 0ba3 3A       		.byte	0x3a
+ 27401 0ba4 62000000 		.long	0x62
+ 27402 0ba8 01       		.byte	0x1
+ 27403 0ba9 53       		.byte	0x53
+ 27404 0baa 00       		.byte	0x0
+ 27405 0bab 22       		.uleb128 0x22
+ 27406 0bac 00000000 		.long	.LASF318
+ 27407 0bb0 02       		.byte	0x2
+ 27408 0bb1 79       		.byte	0x79
+ 27409 0bb2 01       		.byte	0x1
+ 27410 0bb3 B1010000 		.long	0x1b1
+ 27411 0bb7 03       		.byte	0x3
+ 27412 0bb8 D10B0000 		.long	0xbd1
+ 27413 0bbc 23       		.uleb128 0x23
+ 27414 0bbd 61696E00 		.string	"ain"
+ 27415 0bc1 02       		.byte	0x2
+ 27416 0bc2 79       		.byte	0x79
+ 27417 0bc3 D8000000 		.long	0xd8
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 801
+
+
+ 27418 0bc7 24       		.uleb128 0x24
+ 27419 0bc8 7500     		.string	"u"
+ 27420 0bca 02       		.byte	0x2
+ 27421 0bcb 85       		.byte	0x85
+ 27422 0bcc 27050000 		.long	0x527
+ 27423 0bd0 00       		.byte	0x0
+ 27424 0bd1 25       		.uleb128 0x25
+ 27425 0bd2 00000000 		.long	.LASF319
+ 27426 0bd6 02       		.byte	0x2
+ 27427 0bd7 8606     		.value	0x686
+ 27428 0bd9 01       		.byte	0x1
+ 27429 0bda B1010000 		.long	0x1b1
+ 27430 0bde 03       		.byte	0x3
+ 27431 0bdf 500C0000 		.long	0xc50
+ 27432 0be3 26       		.uleb128 0x26
+ 27433 0be4 00000000 		.long	.LASF66
+ 27434 0be8 02       		.byte	0x2
+ 27435 0be9 8606     		.value	0x686
+ 27436 0beb B1010000 		.long	0x1b1
+ 27437 0bef 26       		.uleb128 0x26
+ 27438 0bf0 00000000 		.long	.LASF320
+ 27439 0bf4 02       		.byte	0x2
+ 27440 0bf5 8606     		.value	0x686
+ 27441 0bf7 A9000000 		.long	0xa9
+ 27442 0bfb 27       		.uleb128 0x27
+ 27443 0bfc 00000000 		.long	.LASF321
+ 27444 0c00 02       		.byte	0x2
+ 27445 0c01 8E06     		.value	0x68e
+ 27446 0c03 B1010000 		.long	0x1b1
+ 27447 0c07 28       		.uleb128 0x28
+ 27448 0c08 746D7000 		.string	"tmp"
+ 27449 0c0c 02       		.byte	0x2
+ 27450 0c0d 8F06     		.value	0x68f
+ 27451 0c0f B1010000 		.long	0x1b1
+ 27452 0c13 29       		.uleb128 0x29
+ 27453 0c14 230C0000 		.long	0xc23
+ 27454 0c18 28       		.uleb128 0x28
+ 27455 0c19 7600     		.string	"v"
+ 27456 0c1b 02       		.byte	0x2
+ 27457 0c1c 9306     		.value	0x693
+ 27458 0c1e 27050000 		.long	0x527
+ 27459 0c22 00       		.byte	0x0
+ 27460 0c23 29       		.uleb128 0x29
+ 27461 0c24 330C0000 		.long	0xc33
+ 27462 0c28 28       		.uleb128 0x28
+ 27463 0c29 7600     		.string	"v"
+ 27464 0c2b 02       		.byte	0x2
+ 27465 0c2c 9506     		.value	0x695
+ 27466 0c2e 27050000 		.long	0x527
+ 27467 0c32 00       		.byte	0x0
+ 27468 0c33 29       		.uleb128 0x29
+ 27469 0c34 430C0000 		.long	0xc43
+ 27470 0c38 28       		.uleb128 0x28
+ 27471 0c39 7600     		.string	"v"
+ 27472 0c3b 02       		.byte	0x2
+ 27473 0c3c 9706     		.value	0x697
+ 27474 0c3e 27050000 		.long	0x527
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 802
+
+
+ 27475 0c42 00       		.byte	0x0
+ 27476 0c43 2A       		.uleb128 0x2a
+ 27477 0c44 28       		.uleb128 0x28
+ 27478 0c45 7600     		.string	"v"
+ 27479 0c47 02       		.byte	0x2
+ 27480 0c48 9906     		.value	0x699
+ 27481 0c4a 27050000 		.long	0x527
+ 27482 0c4e 00       		.byte	0x0
+ 27483 0c4f 00       		.byte	0x0
+ 27484 0c50 25       		.uleb128 0x25
+ 27485 0c51 00000000 		.long	.LASF322
+ 27486 0c55 02       		.byte	0x2
+ 27487 0c56 0402     		.value	0x204
+ 27488 0c58 01       		.byte	0x1
+ 27489 0c59 B1010000 		.long	0x1b1
+ 27490 0c5d 03       		.byte	0x3
+ 27491 0c5e 910C0000 		.long	0xc91
+ 27492 0c62 26       		.uleb128 0x26
+ 27493 0c63 00000000 		.long	.LASF66
+ 27494 0c67 02       		.byte	0x2
+ 27495 0c68 0402     		.value	0x204
+ 27496 0c6a B1010000 		.long	0x1b1
+ 27497 0c6e 26       		.uleb128 0x26
+ 27498 0c6f 00000000 		.long	.LASF323
+ 27499 0c73 02       		.byte	0x2
+ 27500 0c74 0402     		.value	0x204
+ 27501 0c76 07040000 		.long	0x407
+ 27502 0c7a 26       		.uleb128 0x26
+ 27503 0c7b 00000000 		.long	.LASF324
+ 27504 0c7f 02       		.byte	0x2
+ 27505 0c80 0402     		.value	0x204
+ 27506 0c82 A9000000 		.long	0xa9
+ 27507 0c86 28       		.uleb128 0x28
+ 27508 0c87 7500     		.string	"u"
+ 27509 0c89 02       		.byte	0x2
+ 27510 0c8a 0902     		.value	0x209
+ 27511 0c8c 27050000 		.long	0x527
+ 27512 0c90 00       		.byte	0x0
+ 27513 0c91 25       		.uleb128 0x25
+ 27514 0c92 00000000 		.long	.LASF325
+ 27515 0c96 02       		.byte	0x2
+ 27516 0c97 7B03     		.value	0x37b
+ 27517 0c99 01       		.byte	0x1
+ 27518 0c9a B1010000 		.long	0x1b1
+ 27519 0c9e 03       		.byte	0x3
+ 27520 0c9f B00C0000 		.long	0xcb0
+ 27521 0ca3 26       		.uleb128 0x26
+ 27522 0ca4 00000000 		.long	.LASF66
+ 27523 0ca8 02       		.byte	0x2
+ 27524 0ca9 7B03     		.value	0x37b
+ 27525 0cab B1010000 		.long	0x1b1
+ 27526 0caf 00       		.byte	0x0
+ 27527 0cb0 25       		.uleb128 0x25
+ 27528 0cb1 00000000 		.long	.LASF326
+ 27529 0cb5 02       		.byte	0x2
+ 27530 0cb6 4E03     		.value	0x34e
+ 27531 0cb8 01       		.byte	0x1
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 803
+
+
+ 27532 0cb9 B1010000 		.long	0x1b1
+ 27533 0cbd 03       		.byte	0x3
+ 27534 0cbe 140D0000 		.long	0xd14
+ 27535 0cc2 26       		.uleb128 0x26
+ 27536 0cc3 00000000 		.long	.LASF66
+ 27537 0cc7 02       		.byte	0x2
+ 27538 0cc8 4E03     		.value	0x34e
+ 27539 0cca B1010000 		.long	0x1b1
+ 27540 0cce 2B       		.uleb128 0x2b
+ 27541 0ccf 626F7800 		.string	"box"
+ 27542 0cd3 02       		.byte	0x2
+ 27543 0cd4 4E03     		.value	0x34e
+ 27544 0cd6 140D0000 		.long	0xd14
+ 27545 0cda 28       		.uleb128 0x28
+ 27546 0cdb 6C6F00   		.string	"lo"
+ 27547 0cde 02       		.byte	0x2
+ 27548 0cdf 5003     		.value	0x350
+ 27549 0ce1 B1010000 		.long	0x1b1
+ 27550 0ce5 28       		.uleb128 0x28
+ 27551 0ce6 686900   		.string	"hi"
+ 27552 0ce9 02       		.byte	0x2
+ 27553 0cea 5003     		.value	0x350
+ 27554 0cec B1010000 		.long	0x1b1
+ 27555 0cf0 28       		.uleb128 0x28
+ 27556 0cf1 746D7000 		.string	"tmp"
+ 27557 0cf5 02       		.byte	0x2
+ 27558 0cf6 5003     		.value	0x350
+ 27559 0cf8 B1010000 		.long	0x1b1
+ 27560 0cfc 28       		.uleb128 0x28
+ 27561 0cfd 6F757400 		.string	"out"
+ 27562 0d01 02       		.byte	0x2
+ 27563 0d02 5003     		.value	0x350
+ 27564 0d04 B1010000 		.long	0x1b1
+ 27565 0d08 28       		.uleb128 0x28
+ 27566 0d09 697800   		.string	"ix"
+ 27567 0d0c 02       		.byte	0x2
+ 27568 0d0d 5103     		.value	0x351
+ 27569 0d0f 6D000000 		.long	0x6d
+ 27570 0d13 00       		.byte	0x0
+ 27571 0d14 07       		.uleb128 0x7
+ 27572 0d15 08       		.byte	0x8
+ 27573 0d16 1A0D0000 		.long	0xd1a
+ 27574 0d1a 06       		.uleb128 0x6
+ 27575 0d1b B1010000 		.long	0x1b1
+ 27576 0d1f 22       		.uleb128 0x22
+ 27577 0d20 00000000 		.long	.LASF327
+ 27578 0d24 02       		.byte	0x2
+ 27579 0d25 CA       		.byte	0xca
+ 27580 0d26 01       		.byte	0x1
+ 27581 0d27 B1010000 		.long	0x1b1
+ 27582 0d2b 03       		.byte	0x3
+ 27583 0d2c 450D0000 		.long	0xd45
+ 27584 0d30 23       		.uleb128 0x23
+ 27585 0d31 763100   		.string	"v1"
+ 27586 0d34 02       		.byte	0x2
+ 27587 0d35 CA       		.byte	0xca
+ 27588 0d36 B1010000 		.long	0x1b1
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 804
+
+
+ 27589 0d3a 23       		.uleb128 0x23
+ 27590 0d3b 763200   		.string	"v2"
+ 27591 0d3e 02       		.byte	0x2
+ 27592 0d3f CA       		.byte	0xca
+ 27593 0d40 B1010000 		.long	0x1b1
+ 27594 0d44 00       		.byte	0x0
+ 27595 0d45 25       		.uleb128 0x25
+ 27596 0d46 00000000 		.long	.LASF328
+ 27597 0d4a 02       		.byte	0x2
+ 27598 0d4b 5601     		.value	0x156
+ 27599 0d4d 01       		.byte	0x1
+ 27600 0d4e B1010000 		.long	0x1b1
+ 27601 0d52 03       		.byte	0x3
+ 27602 0d53 6E0D0000 		.long	0xd6e
+ 27603 0d57 2B       		.uleb128 0x2b
+ 27604 0d58 763100   		.string	"v1"
+ 27605 0d5b 02       		.byte	0x2
+ 27606 0d5c 5601     		.value	0x156
+ 27607 0d5e B1010000 		.long	0x1b1
+ 27608 0d62 2B       		.uleb128 0x2b
+ 27609 0d63 763200   		.string	"v2"
+ 27610 0d66 02       		.byte	0x2
+ 27611 0d67 5601     		.value	0x156
+ 27612 0d69 B1010000 		.long	0x1b1
+ 27613 0d6d 00       		.byte	0x0
+ 27614 0d6e 25       		.uleb128 0x25
+ 27615 0d6f 00000000 		.long	.LASF329
+ 27616 0d73 02       		.byte	0x2
+ 27617 0d74 7101     		.value	0x171
+ 27618 0d76 01       		.byte	0x1
+ 27619 0d77 B1010000 		.long	0x1b1
+ 27620 0d7b 03       		.byte	0x3
+ 27621 0d7c C70D0000 		.long	0xdc7
+ 27622 0d80 26       		.uleb128 0x26
+ 27623 0d81 00000000 		.long	.LASF330
+ 27624 0d85 02       		.byte	0x2
+ 27625 0d86 7101     		.value	0x171
+ 27626 0d88 B1010000 		.long	0x1b1
+ 27627 0d8c 26       		.uleb128 0x26
+ 27628 0d8d 00000000 		.long	.LASF331
+ 27629 0d91 02       		.byte	0x2
+ 27630 0d92 7101     		.value	0x171
+ 27631 0d94 B1010000 		.long	0x1b1
+ 27632 0d98 28       		.uleb128 0x28
+ 27633 0d99 6F757400 		.string	"out"
+ 27634 0d9d 02       		.byte	0x2
+ 27635 0d9e 7901     		.value	0x179
+ 27636 0da0 27050000 		.long	0x527
+ 27637 0da4 28       		.uleb128 0x28
+ 27638 0da5 696E00   		.string	"in"
+ 27639 0da8 02       		.byte	0x2
+ 27640 0da9 7901     		.value	0x179
+ 27641 0dab 27050000 		.long	0x527
+ 27642 0daf 27       		.uleb128 0x27
+ 27643 0db0 00000000 		.long	.LASF332
+ 27644 0db4 02       		.byte	0x2
+ 27645 0db5 7901     		.value	0x179
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 805
+
+
+ 27646 0db7 27050000 		.long	0x527
+ 27647 0dbb 28       		.uleb128 0x28
+ 27648 0dbc 697800   		.string	"ix"
+ 27649 0dbf 02       		.byte	0x2
+ 27650 0dc0 7A01     		.value	0x17a
+ 27651 0dc2 6D000000 		.long	0x6d
+ 27652 0dc6 00       		.byte	0x0
+ 27653 0dc7 22       		.uleb128 0x22
+ 27654 0dc8 00000000 		.long	.LASF333
+ 27655 0dcc 02       		.byte	0x2
+ 27656 0dcd E6       		.byte	0xe6
+ 27657 0dce 01       		.byte	0x1
+ 27658 0dcf B1010000 		.long	0x1b1
+ 27659 0dd3 03       		.byte	0x3
+ 27660 0dd4 ED0D0000 		.long	0xded
+ 27661 0dd8 23       		.uleb128 0x23
+ 27662 0dd9 763100   		.string	"v1"
+ 27663 0ddc 02       		.byte	0x2
+ 27664 0ddd E6       		.byte	0xe6
+ 27665 0dde B1010000 		.long	0x1b1
+ 27666 0de2 23       		.uleb128 0x23
+ 27667 0de3 763200   		.string	"v2"
+ 27668 0de6 02       		.byte	0x2
+ 27669 0de7 E6       		.byte	0xe6
+ 27670 0de8 B1010000 		.long	0x1b1
+ 27671 0dec 00       		.byte	0x0
+ 27672 0ded 25       		.uleb128 0x25
+ 27673 0dee 00000000 		.long	.LASF334
+ 27674 0df2 02       		.byte	0x2
+ 27675 0df3 1E01     		.value	0x11e
+ 27676 0df5 01       		.byte	0x1
+ 27677 0df6 B1010000 		.long	0x1b1
+ 27678 0dfa 03       		.byte	0x3
+ 27679 0dfb 160E0000 		.long	0xe16
+ 27680 0dff 2B       		.uleb128 0x2b
+ 27681 0e00 763100   		.string	"v1"
+ 27682 0e03 02       		.byte	0x2
+ 27683 0e04 1E01     		.value	0x11e
+ 27684 0e06 B1010000 		.long	0x1b1
+ 27685 0e0a 2B       		.uleb128 0x2b
+ 27686 0e0b 763200   		.string	"v2"
+ 27687 0e0e 02       		.byte	0x2
+ 27688 0e0f 1E01     		.value	0x11e
+ 27689 0e11 B1010000 		.long	0x1b1
+ 27690 0e15 00       		.byte	0x0
+ 27691 0e16 25       		.uleb128 0x25
+ 27692 0e17 00000000 		.long	.LASF335
+ 27693 0e1b 02       		.byte	0x2
+ 27694 0e1c 9502     		.value	0x295
+ 27695 0e1e 01       		.byte	0x1
+ 27696 0e1f B1010000 		.long	0x1b1
+ 27697 0e23 03       		.byte	0x3
+ 27698 0e24 520E0000 		.long	0xe52
+ 27699 0e28 26       		.uleb128 0x26
+ 27700 0e29 00000000 		.long	.LASF66
+ 27701 0e2d 02       		.byte	0x2
+ 27702 0e2e 9502     		.value	0x295
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 806
+
+
+ 27703 0e30 B1010000 		.long	0x1b1
+ 27704 0e34 2C       		.uleb128 0x2c
+ 27705 0e35 00000000 		.long	.LASF336
+ 27706 0e39 02       		.byte	0x2
+ 27707 0e3a 9702     		.value	0x297
+ 27708 0e3c 1A0D0000 		.long	0xd1a
+ 27709 0e40 10       		.byte	0x10
+ 27710 0e41 01       		.byte	0x1
+ 27711 0e42 02       		.byte	0x2
+ 27712 0e43 03       		.byte	0x3
+ 27713 0e44 00       		.byte	0x0
+ 27714 0e45 05       		.byte	0x5
+ 27715 0e46 06       		.byte	0x6
+ 27716 0e47 07       		.byte	0x7
+ 27717 0e48 04       		.byte	0x4
+ 27718 0e49 09       		.byte	0x9
+ 27719 0e4a 0A       		.byte	0xa
+ 27720 0e4b 0B       		.byte	0xb
+ 27721 0e4c 08       		.byte	0x8
+ 27722 0e4d 0D       		.byte	0xd
+ 27723 0e4e 0E       		.byte	0xe
+ 27724 0e4f 0F       		.byte	0xf
+ 27725 0e50 0C       		.byte	0xc
+ 27726 0e51 00       		.byte	0x0
+ 27727 0e52 22       		.uleb128 0x22
+ 27728 0e53 00000000 		.long	.LASF337
+ 27729 0e57 02       		.byte	0x2
+ 27730 0e58 AE       		.byte	0xae
+ 27731 0e59 01       		.byte	0x1
+ 27732 0e5a B1010000 		.long	0x1b1
+ 27733 0e5e 03       		.byte	0x3
+ 27734 0e5f 780E0000 		.long	0xe78
+ 27735 0e63 23       		.uleb128 0x23
+ 27736 0e64 763100   		.string	"v1"
+ 27737 0e67 02       		.byte	0x2
+ 27738 0e68 AE       		.byte	0xae
+ 27739 0e69 B1010000 		.long	0x1b1
+ 27740 0e6d 23       		.uleb128 0x23
+ 27741 0e6e 763200   		.string	"v2"
+ 27742 0e71 02       		.byte	0x2
+ 27743 0e72 AE       		.byte	0xae
+ 27744 0e73 B1010000 		.long	0x1b1
+ 27745 0e77 00       		.byte	0x0
+ 27746 0e78 25       		.uleb128 0x25
+ 27747 0e79 00000000 		.long	.LASF338
+ 27748 0e7d 02       		.byte	0x2
+ 27749 0e7e 4605     		.value	0x546
+ 27750 0e80 01       		.byte	0x1
+ 27751 0e81 B1010000 		.long	0x1b1
+ 27752 0e85 03       		.byte	0x3
+ 27753 0e86 A30E0000 		.long	0xea3
+ 27754 0e8a 26       		.uleb128 0x26
+ 27755 0e8b 00000000 		.long	.LASF66
+ 27756 0e8f 02       		.byte	0x2
+ 27757 0e90 4605     		.value	0x546
+ 27758 0e92 B1010000 		.long	0x1b1
+ 27759 0e96 27       		.uleb128 0x27
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 807
+
+
+ 27760 0e97 00000000 		.long	.LASF339
+ 27761 0e9b 02       		.byte	0x2
+ 27762 0e9c 4B05     		.value	0x54b
+ 27763 0e9e 27050000 		.long	0x527
+ 27764 0ea2 00       		.byte	0x0
+ 27765 0ea3 25       		.uleb128 0x25
+ 27766 0ea4 00000000 		.long	.LASF340
+ 27767 0ea8 02       		.byte	0x2
+ 27768 0ea9 1A06     		.value	0x61a
+ 27769 0eab 01       		.byte	0x1
+ 27770 0eac B1010000 		.long	0x1b1
+ 27771 0eb0 03       		.byte	0x3
+ 27772 0eb1 CE0E0000 		.long	0xece
+ 27773 0eb5 26       		.uleb128 0x26
+ 27774 0eb6 00000000 		.long	.LASF66
+ 27775 0eba 02       		.byte	0x2
+ 27776 0ebb 1A06     		.value	0x61a
+ 27777 0ebd B1010000 		.long	0x1b1
+ 27778 0ec1 27       		.uleb128 0x27
+ 27779 0ec2 00000000 		.long	.LASF341
+ 27780 0ec6 02       		.byte	0x2
+ 27781 0ec7 1D06     		.value	0x61d
+ 27782 0ec9 B1010000 		.long	0x1b1
+ 27783 0ecd 00       		.byte	0x0
+ 27784 0ece 25       		.uleb128 0x25
+ 27785 0ecf 00000000 		.long	.LASF342
+ 27786 0ed3 02       		.byte	0x2
+ 27787 0ed4 FA04     		.value	0x4fa
+ 27788 0ed6 01       		.byte	0x1
+ 27789 0ed7 B1010000 		.long	0x1b1
+ 27790 0edb 03       		.byte	0x3
+ 27791 0edc F90E0000 		.long	0xef9
+ 27792 0ee0 26       		.uleb128 0x26
+ 27793 0ee1 00000000 		.long	.LASF66
+ 27794 0ee5 02       		.byte	0x2
+ 27795 0ee6 FA04     		.value	0x4fa
+ 27796 0ee8 B1010000 		.long	0x1b1
+ 27797 0eec 27       		.uleb128 0x27
+ 27798 0eed 00000000 		.long	.LASF339
+ 27799 0ef1 02       		.byte	0x2
+ 27800 0ef2 0005     		.value	0x500
+ 27801 0ef4 27050000 		.long	0x527
+ 27802 0ef8 00       		.byte	0x0
+ 27803 0ef9 2D       		.uleb128 0x2d
+ 27804 0efa 00000000 		.long	.LASF351
+ 27805 0efe 02       		.byte	0x2
+ 27806 0eff C206     		.value	0x6c2
+ 27807 0f01 01       		.byte	0x1
+ 27808 0f02 00000000 		.quad	.LFB563
+ 27808      00000000 
+ 27809 0f0a 00000000 		.quad	.LFE563
+ 27809      00000000 
+ 27810 0f12 00000000 		.long	.LLST1
+ 27811 0f16 89480000 		.long	0x4889
+ 27812 0f1a 2E       		.uleb128 0x2e
+ 27813 0f1b 00000000 		.long	.LASF64
+ 27814 0f1f 02       		.byte	0x2
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 808
+
+
+ 27815 0f20 C206     		.value	0x6c2
+ 27816 0f22 89480000 		.long	0x4889
+ 27817 0f26 04       		.byte	0x4
+ 27818 0f27 91       		.byte	0x91
+ 27819 0f28 A8B57F   		.sleb128 -9560
+ 27820 0f2b 2F       		.uleb128 0x2f
+ 27821 0f2c 6B657900 		.string	"key"
+ 27822 0f30 02       		.byte	0x2
+ 27823 0f31 C206     		.value	0x6c2
+ 27824 0f33 8F480000 		.long	0x488f
+ 27825 0f37 04       		.byte	0x4
+ 27826 0f38 91       		.byte	0x91
+ 27827 0f39 A0B57F   		.sleb128 -9568
+ 27828 0f3c 30       		.uleb128 0x30
+ 27829 0f3d 00000000 		.long	.LASF66
+ 27830 0f41 02       		.byte	0x2
+ 27831 0f42 C406     		.value	0x6c4
+ 27832 0f44 B1010000 		.long	0x1b1
+ 27833 0f48 03       		.byte	0x3
+ 27834 0f49 91       		.byte	0x91
+ 27835 0f4a 804C     		.sleb128 -6656
+ 27836 0f4c 30       		.uleb128 0x30
+ 27837 0f4d 00000000 		.long	.LASF343
+ 27838 0f51 02       		.byte	0x2
+ 27839 0f52 C506     		.value	0x6c5
+ 27840 0f54 B1010000 		.long	0x1b1
+ 27841 0f58 03       		.byte	0x3
+ 27842 0f59 91       		.byte	0x91
+ 27843 0f5a 904C     		.sleb128 -6640
+ 27844 0f5c 31       		.uleb128 0x31
+ 27845 0f5d AB0B0000 		.long	0xbab
+ 27846 0f61 00000000 		.quad	.LBB444
+ 27846      00000000 
+ 27847 0f69 00000000 		.quad	.LBE444
+ 27847      00000000 
+ 27848 0f71 02       		.byte	0x2
+ 27849 0f72 C706     		.value	0x6c7
+ 27850 0f74 9E0F0000 		.long	0xf9e
+ 27851 0f78 32       		.uleb128 0x32
+ 27852 0f79 BC0B0000 		.long	0xbbc
+ 27853 0f7d 03       		.byte	0x3
+ 27854 0f7e 91       		.byte	0x91
+ 27855 0f7f A04C     		.sleb128 -6624
+ 27856 0f81 33       		.uleb128 0x33
+ 27857 0f82 00000000 		.quad	.LBB445
+ 27857      00000000 
+ 27858 0f8a 00000000 		.quad	.LBE445
+ 27858      00000000 
+ 27859 0f92 34       		.uleb128 0x34
+ 27860 0f93 C70B0000 		.long	0xbc7
+ 27861 0f97 04       		.byte	0x4
+ 27862 0f98 91       		.byte	0x91
+ 27863 0f99 B0B57F   		.sleb128 -9552
+ 27864 0f9c 00       		.byte	0x0
+ 27865 0f9d 00       		.byte	0x0
+ 27866 0f9e 31       		.uleb128 0x31
+ 27867 0f9f D10B0000 		.long	0xbd1
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 809
+
+
+ 27868 0fa3 00000000 		.quad	.LBB446
+ 27868      00000000 
+ 27869 0fab 00000000 		.quad	.LBE446
+ 27869      00000000 
+ 27870 0fb3 02       		.byte	0x2
+ 27871 0fb4 D006     		.value	0x6d0
+ 27872 0fb6 55140000 		.long	0x1455
+ 27873 0fba 32       		.uleb128 0x32
+ 27874 0fbb EF0B0000 		.long	0xbef
+ 27875 0fbf 03       		.byte	0x3
+ 27876 0fc0 91       		.byte	0x91
+ 27877 0fc1 AC4C     		.sleb128 -6612
+ 27878 0fc3 32       		.uleb128 0x32
+ 27879 0fc4 E30B0000 		.long	0xbe3
+ 27880 0fc8 03       		.byte	0x3
+ 27881 0fc9 91       		.byte	0x91
+ 27882 0fca B04C     		.sleb128 -6608
+ 27883 0fcc 33       		.uleb128 0x33
+ 27884 0fcd 00000000 		.quad	.LBB447
+ 27884      00000000 
+ 27885 0fd5 00000000 		.quad	.LBE447
+ 27885      00000000 
+ 27886 0fdd 34       		.uleb128 0x34
+ 27887 0fde FB0B0000 		.long	0xbfb
+ 27888 0fe2 04       		.byte	0x4
+ 27889 0fe3 76       		.byte	0x76
+ 27890 0fe4 C0B07F   		.sleb128 -10176
+ 27891 0fe7 34       		.uleb128 0x34
+ 27892 0fe8 070C0000 		.long	0xc07
+ 27893 0fec 04       		.byte	0x4
+ 27894 0fed 76       		.byte	0x76
+ 27895 0fee B0B07F   		.sleb128 -10192
+ 27896 0ff1 31       		.uleb128 0x31
+ 27897 0ff2 500C0000 		.long	0xc50
+ 27898 0ff6 00000000 		.quad	.LBB448
+ 27898      00000000 
+ 27899 0ffe 00000000 		.quad	.LBE448
+ 27899      00000000 
+ 27900 1006 02       		.byte	0x2
+ 27901 1007 9106     		.value	0x691
+ 27902 1009 45100000 		.long	0x1045
+ 27903 100d 32       		.uleb128 0x32
+ 27904 100e 7A0C0000 		.long	0xc7a
+ 27905 1012 03       		.byte	0x3
+ 27906 1013 91       		.byte	0x91
+ 27907 1014 C84C     		.sleb128 -6584
+ 27908 1016 32       		.uleb128 0x32
+ 27909 1017 6E0C0000 		.long	0xc6e
+ 27910 101b 03       		.byte	0x3
+ 27911 101c 91       		.byte	0x91
+ 27912 101d CC4C     		.sleb128 -6580
+ 27913 101f 32       		.uleb128 0x32
+ 27914 1020 620C0000 		.long	0xc62
+ 27915 1024 03       		.byte	0x3
+ 27916 1025 91       		.byte	0x91
+ 27917 1026 D04C     		.sleb128 -6576
+ 27918 1028 33       		.uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 810
+
+
+ 27919 1029 00000000 		.quad	.LBB449
+ 27919      00000000 
+ 27920 1031 00000000 		.quad	.LBE449
+ 27920      00000000 
+ 27921 1039 34       		.uleb128 0x34
+ 27922 103a 860C0000 		.long	0xc86
+ 27923 103e 04       		.byte	0x4
+ 27924 103f 91       		.byte	0x91
+ 27925 1040 80B67F   		.sleb128 -9472
+ 27926 1043 00       		.byte	0x0
+ 27927 1044 00       		.byte	0x0
+ 27928 1045 31       		.uleb128 0x31
+ 27929 1046 910C0000 		.long	0xc91
+ 27930 104a 00000000 		.quad	.LBB450
+ 27930      00000000 
+ 27931 1052 00000000 		.quad	.LBE450
+ 27931      00000000 
+ 27932 105a 02       		.byte	0x2
+ 27933 105b 9206     		.value	0x692
+ 27934 105d BB120000 		.long	0x12bb
+ 27935 1061 32       		.uleb128 0x32
+ 27936 1062 A30C0000 		.long	0xca3
+ 27937 1066 03       		.byte	0x3
+ 27938 1067 91       		.byte	0x91
+ 27939 1068 E04C     		.sleb128 -6560
+ 27940 106a 35       		.uleb128 0x35
+ 27941 106b B00C0000 		.long	0xcb0
+ 27942 106f 00000000 		.quad	.LBB452
+ 27942      00000000 
+ 27943 1077 00000000 		.quad	.LBE452
+ 27943      00000000 
+ 27944 107f 02       		.byte	0x2
+ 27945 1080 7D03     		.value	0x37d
+ 27946 1082 32       		.uleb128 0x32
+ 27947 1083 CE0C0000 		.long	0xcce
+ 27948 1087 03       		.byte	0x3
+ 27949 1088 91       		.byte	0x91
+ 27950 1089 F84C     		.sleb128 -6536
+ 27951 108b 32       		.uleb128 0x32
+ 27952 108c C20C0000 		.long	0xcc2
+ 27953 1090 03       		.byte	0x3
+ 27954 1091 91       		.byte	0x91
+ 27955 1092 804D     		.sleb128 -6528
+ 27956 1094 33       		.uleb128 0x33
+ 27957 1095 00000000 		.quad	.LBB453
+ 27957      00000000 
+ 27958 109d 00000000 		.quad	.LBE453
+ 27958      00000000 
+ 27959 10a5 34       		.uleb128 0x34
+ 27960 10a6 DA0C0000 		.long	0xcda
+ 27961 10aa 03       		.byte	0x3
+ 27962 10ab 91       		.byte	0x91
+ 27963 10ac D04D     		.sleb128 -6448
+ 27964 10ae 34       		.uleb128 0x34
+ 27965 10af E50C0000 		.long	0xce5
+ 27966 10b3 03       		.byte	0x3
+ 27967 10b4 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 811
+
+
+ 27968 10b5 C04D     		.sleb128 -6464
+ 27969 10b7 34       		.uleb128 0x34
+ 27970 10b8 F00C0000 		.long	0xcf0
+ 27971 10bc 03       		.byte	0x3
+ 27972 10bd 91       		.byte	0x91
+ 27973 10be B04D     		.sleb128 -6480
+ 27974 10c0 34       		.uleb128 0x34
+ 27975 10c1 FC0C0000 		.long	0xcfc
+ 27976 10c5 03       		.byte	0x3
+ 27977 10c6 91       		.byte	0x91
+ 27978 10c7 A04D     		.sleb128 -6496
+ 27979 10c9 34       		.uleb128 0x34
+ 27980 10ca 080D0000 		.long	0xd08
+ 27981 10ce 03       		.byte	0x3
+ 27982 10cf 91       		.byte	0x91
+ 27983 10d0 9C4D     		.sleb128 -6500
+ 27984 10d2 31       		.uleb128 0x31
+ 27985 10d3 1F0D0000 		.long	0xd1f
+ 27986 10d7 00000000 		.quad	.LBB454
+ 27986      00000000 
+ 27987 10df 00000000 		.quad	.LBE454
+ 27987      00000000 
+ 27988 10e7 02       		.byte	0x2
+ 27989 10e8 5603     		.value	0x356
+ 27990 10ea 01110000 		.long	0x1101
+ 27991 10ee 32       		.uleb128 0x32
+ 27992 10ef 3A0D0000 		.long	0xd3a
+ 27993 10f3 03       		.byte	0x3
+ 27994 10f4 91       		.byte	0x91
+ 27995 10f5 E04D     		.sleb128 -6432
+ 27996 10f7 32       		.uleb128 0x32
+ 27997 10f8 300D0000 		.long	0xd30
+ 27998 10fc 03       		.byte	0x3
+ 27999 10fd 91       		.byte	0x91
+ 28000 10fe F04D     		.sleb128 -6416
+ 28001 1100 00       		.byte	0x0
+ 28002 1101 31       		.uleb128 0x31
+ 28003 1102 450D0000 		.long	0xd45
+ 28004 1106 00000000 		.quad	.LBB456
+ 28004      00000000 
+ 28005 110e 00000000 		.quad	.LBE456
+ 28005      00000000 
+ 28006 1116 02       		.byte	0x2
+ 28007 1117 5E03     		.value	0x35e
+ 28008 1119 30110000 		.long	0x1130
+ 28009 111d 32       		.uleb128 0x32
+ 28010 111e 620D0000 		.long	0xd62
+ 28011 1122 03       		.byte	0x3
+ 28012 1123 91       		.byte	0x91
+ 28013 1124 804E     		.sleb128 -6400
+ 28014 1126 32       		.uleb128 0x32
+ 28015 1127 570D0000 		.long	0xd57
+ 28016 112b 03       		.byte	0x3
+ 28017 112c 91       		.byte	0x91
+ 28018 112d 904E     		.sleb128 -6384
+ 28019 112f 00       		.byte	0x0
+ 28020 1130 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 812
+
+
+ 28021 1131 6E0D0000 		.long	0xd6e
+ 28022 1135 00000000 		.quad	.LBB458
+ 28022      00000000 
+ 28023 113d 00000000 		.quad	.LBE458
+ 28023      00000000 
+ 28024 1145 02       		.byte	0x2
+ 28025 1146 6403     		.value	0x364
+ 28026 1148 98110000 		.long	0x1198
+ 28027 114c 32       		.uleb128 0x32
+ 28028 114d 8C0D0000 		.long	0xd8c
+ 28029 1151 03       		.byte	0x3
+ 28030 1152 91       		.byte	0x91
+ 28031 1153 A04E     		.sleb128 -6368
+ 28032 1155 32       		.uleb128 0x32
+ 28033 1156 800D0000 		.long	0xd80
+ 28034 115a 03       		.byte	0x3
+ 28035 115b 91       		.byte	0x91
+ 28036 115c B04E     		.sleb128 -6352
+ 28037 115e 33       		.uleb128 0x33
+ 28038 115f 00000000 		.quad	.LBB459
+ 28038      00000000 
+ 28039 1167 00000000 		.quad	.LBE459
+ 28039      00000000 
+ 28040 116f 34       		.uleb128 0x34
+ 28041 1170 980D0000 		.long	0xd98
+ 28042 1174 04       		.byte	0x4
+ 28043 1175 91       		.byte	0x91
+ 28044 1176 B0B67F   		.sleb128 -9424
+ 28045 1179 34       		.uleb128 0x34
+ 28046 117a A40D0000 		.long	0xda4
+ 28047 117e 04       		.byte	0x4
+ 28048 117f 91       		.byte	0x91
+ 28049 1180 A0B67F   		.sleb128 -9440
+ 28050 1183 34       		.uleb128 0x34
+ 28051 1184 AF0D0000 		.long	0xdaf
+ 28052 1188 04       		.byte	0x4
+ 28053 1189 91       		.byte	0x91
+ 28054 118a 90B67F   		.sleb128 -9456
+ 28055 118d 34       		.uleb128 0x34
+ 28056 118e BB0D0000 		.long	0xdbb
+ 28057 1192 03       		.byte	0x3
+ 28058 1193 91       		.byte	0x91
+ 28059 1194 CC4E     		.sleb128 -6324
+ 28060 1196 00       		.byte	0x0
+ 28061 1197 00       		.byte	0x0
+ 28062 1198 31       		.uleb128 0x31
+ 28063 1199 C70D0000 		.long	0xdc7
+ 28064 119d 00000000 		.quad	.LBB460
+ 28064      00000000 
+ 28065 11a5 00000000 		.quad	.LBE460
+ 28065      00000000 
+ 28066 11ad 02       		.byte	0x2
+ 28067 11ae 6603     		.value	0x366
+ 28068 11b0 C7110000 		.long	0x11c7
+ 28069 11b4 32       		.uleb128 0x32
+ 28070 11b5 E20D0000 		.long	0xde2
+ 28071 11b9 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 813
+
+
+ 28072 11ba 91       		.byte	0x91
+ 28073 11bb D04E     		.sleb128 -6320
+ 28074 11bd 32       		.uleb128 0x32
+ 28075 11be D80D0000 		.long	0xdd8
+ 28076 11c2 03       		.byte	0x3
+ 28077 11c3 91       		.byte	0x91
+ 28078 11c4 E04E     		.sleb128 -6304
+ 28079 11c6 00       		.byte	0x0
+ 28080 11c7 31       		.uleb128 0x31
+ 28081 11c8 6E0D0000 		.long	0xd6e
+ 28082 11cc 00000000 		.quad	.LBB462
+ 28082      00000000 
+ 28083 11d4 00000000 		.quad	.LBE462
+ 28083      00000000 
+ 28084 11dc 02       		.byte	0x2
+ 28085 11dd 6803     		.value	0x368
+ 28086 11df 2F120000 		.long	0x122f
+ 28087 11e3 32       		.uleb128 0x32
+ 28088 11e4 8C0D0000 		.long	0xd8c
+ 28089 11e8 03       		.byte	0x3
+ 28090 11e9 91       		.byte	0x91
+ 28091 11ea F04E     		.sleb128 -6288
+ 28092 11ec 32       		.uleb128 0x32
+ 28093 11ed 800D0000 		.long	0xd80
+ 28094 11f1 03       		.byte	0x3
+ 28095 11f2 91       		.byte	0x91
+ 28096 11f3 804F     		.sleb128 -6272
+ 28097 11f5 33       		.uleb128 0x33
+ 28098 11f6 00000000 		.quad	.LBB463
+ 28098      00000000 
+ 28099 11fe 00000000 		.quad	.LBE463
+ 28099      00000000 
+ 28100 1206 34       		.uleb128 0x34
+ 28101 1207 980D0000 		.long	0xd98
+ 28102 120b 04       		.byte	0x4
+ 28103 120c 91       		.byte	0x91
+ 28104 120d E0B67F   		.sleb128 -9376
+ 28105 1210 34       		.uleb128 0x34
+ 28106 1211 A40D0000 		.long	0xda4
+ 28107 1215 04       		.byte	0x4
+ 28108 1216 91       		.byte	0x91
+ 28109 1217 D0B67F   		.sleb128 -9392
+ 28110 121a 34       		.uleb128 0x34
+ 28111 121b AF0D0000 		.long	0xdaf
+ 28112 121f 04       		.byte	0x4
+ 28113 1220 91       		.byte	0x91
+ 28114 1221 C0B67F   		.sleb128 -9408
+ 28115 1224 34       		.uleb128 0x34
+ 28116 1225 BB0D0000 		.long	0xdbb
+ 28117 1229 03       		.byte	0x3
+ 28118 122a 91       		.byte	0x91
+ 28119 122b 9C4F     		.sleb128 -6244
+ 28120 122d 00       		.byte	0x0
+ 28121 122e 00       		.byte	0x0
+ 28122 122f 31       		.uleb128 0x31
+ 28123 1230 C70D0000 		.long	0xdc7
+ 28124 1234 00000000 		.quad	.LBB464
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 814
+
+
+ 28124      00000000 
+ 28125 123c 00000000 		.quad	.LBE464
+ 28125      00000000 
+ 28126 1244 02       		.byte	0x2
+ 28127 1245 6A03     		.value	0x36a
+ 28128 1247 5E120000 		.long	0x125e
+ 28129 124b 32       		.uleb128 0x32
+ 28130 124c E20D0000 		.long	0xde2
+ 28131 1250 03       		.byte	0x3
+ 28132 1251 91       		.byte	0x91
+ 28133 1252 A04F     		.sleb128 -6240
+ 28134 1254 32       		.uleb128 0x32
+ 28135 1255 D80D0000 		.long	0xdd8
+ 28136 1259 03       		.byte	0x3
+ 28137 125a 91       		.byte	0x91
+ 28138 125b B04F     		.sleb128 -6224
+ 28139 125d 00       		.byte	0x0
+ 28140 125e 31       		.uleb128 0x31
+ 28141 125f ED0D0000 		.long	0xded
+ 28142 1263 00000000 		.quad	.LBB466
+ 28142      00000000 
+ 28143 126b 00000000 		.quad	.LBE466
+ 28143      00000000 
+ 28144 1273 02       		.byte	0x2
+ 28145 1274 6C03     		.value	0x36c
+ 28146 1276 8D120000 		.long	0x128d
+ 28147 127a 32       		.uleb128 0x32
+ 28148 127b 0A0E0000 		.long	0xe0a
+ 28149 127f 03       		.byte	0x3
+ 28150 1280 91       		.byte	0x91
+ 28151 1281 C04F     		.sleb128 -6208
+ 28152 1283 32       		.uleb128 0x32
+ 28153 1284 FF0D0000 		.long	0xdff
+ 28154 1288 03       		.byte	0x3
+ 28155 1289 91       		.byte	0x91
+ 28156 128a D04F     		.sleb128 -6192
+ 28157 128c 00       		.byte	0x0
+ 28158 128d 35       		.uleb128 0x35
+ 28159 128e 1F0D0000 		.long	0xd1f
+ 28160 1292 00000000 		.quad	.LBB468
+ 28160      00000000 
+ 28161 129a 00000000 		.quad	.LBE468
+ 28161      00000000 
+ 28162 12a2 02       		.byte	0x2
+ 28163 12a3 6E03     		.value	0x36e
+ 28164 12a5 32       		.uleb128 0x32
+ 28165 12a6 3A0D0000 		.long	0xd3a
+ 28166 12aa 03       		.byte	0x3
+ 28167 12ab 91       		.byte	0x91
+ 28168 12ac E04F     		.sleb128 -6176
+ 28169 12ae 32       		.uleb128 0x32
+ 28170 12af 300D0000 		.long	0xd30
+ 28171 12b3 03       		.byte	0x3
+ 28172 12b4 91       		.byte	0x91
+ 28173 12b5 F04F     		.sleb128 -6160
+ 28174 12b7 00       		.byte	0x0
+ 28175 12b8 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 815
+
+
+ 28176 12b9 00       		.byte	0x0
+ 28177 12ba 00       		.byte	0x0
+ 28178 12bb 36       		.uleb128 0x36
+ 28179 12bc 00000000 		.quad	.LBB470
+ 28179      00000000 
+ 28180 12c4 00000000 		.quad	.LBE470
+ 28180      00000000 
+ 28181 12cc DB120000 		.long	0x12db
+ 28182 12d0 34       		.uleb128 0x34
+ 28183 12d1 180C0000 		.long	0xc18
+ 28184 12d5 04       		.byte	0x4
+ 28185 12d6 91       		.byte	0x91
+ 28186 12d7 F0B57F   		.sleb128 -9488
+ 28187 12da 00       		.byte	0x0
+ 28188 12db 31       		.uleb128 0x31
+ 28189 12dc 160E0000 		.long	0xe16
+ 28190 12e0 00000000 		.quad	.LBB471
+ 28190      00000000 
+ 28191 12e8 00000000 		.quad	.LBE471
+ 28191      00000000 
+ 28192 12f0 02       		.byte	0x2
+ 28193 12f1 9406     		.value	0x694
+ 28194 12f3 86130000 		.long	0x1386
+ 28195 12f7 32       		.uleb128 0x32
+ 28196 12f8 280E0000 		.long	0xe28
+ 28197 12fc 03       		.byte	0x3
+ 28198 12fd 91       		.byte	0x91
+ 28199 12fe 8050     		.sleb128 -6144
+ 28200 1300 33       		.uleb128 0x33
+ 28201 1301 00000000 		.quad	.LBB472
+ 28201      00000000 
+ 28202 1309 00000000 		.quad	.LBE472
+ 28202      00000000 
+ 28203 1311 34       		.uleb128 0x34
+ 28204 1312 340E0000 		.long	0xe34
+ 28205 1316 09       		.byte	0x9
+ 28206 1317 03       		.byte	0x3
+ 28207 1318 00000000 		.quad	ShiftRowTable.6768
+ 28207      00000000 
+ 28208 1320 35       		.uleb128 0x35
+ 28209 1321 6E0D0000 		.long	0xd6e
+ 28210 1325 00000000 		.quad	.LBB473
+ 28210      00000000 
+ 28211 132d 00000000 		.quad	.LBE473
+ 28211      00000000 
+ 28212 1335 02       		.byte	0x2
+ 28213 1336 9B02     		.value	0x29b
+ 28214 1338 32       		.uleb128 0x32
+ 28215 1339 8C0D0000 		.long	0xd8c
+ 28216 133d 03       		.byte	0x3
+ 28217 133e 91       		.byte	0x91
+ 28218 133f 9050     		.sleb128 -6128
+ 28219 1341 32       		.uleb128 0x32
+ 28220 1342 800D0000 		.long	0xd80
+ 28221 1346 03       		.byte	0x3
+ 28222 1347 91       		.byte	0x91
+ 28223 1348 A050     		.sleb128 -6112
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 816
+
+
+ 28224 134a 33       		.uleb128 0x33
+ 28225 134b 00000000 		.quad	.LBB474
+ 28225      00000000 
+ 28226 1353 00000000 		.quad	.LBE474
+ 28226      00000000 
+ 28227 135b 34       		.uleb128 0x34
+ 28228 135c 980D0000 		.long	0xd98
+ 28229 1360 04       		.byte	0x4
+ 28230 1361 91       		.byte	0x91
+ 28231 1362 90B77F   		.sleb128 -9328
+ 28232 1365 34       		.uleb128 0x34
+ 28233 1366 A40D0000 		.long	0xda4
+ 28234 136a 04       		.byte	0x4
+ 28235 136b 91       		.byte	0x91
+ 28236 136c 80B77F   		.sleb128 -9344
+ 28237 136f 34       		.uleb128 0x34
+ 28238 1370 AF0D0000 		.long	0xdaf
+ 28239 1374 04       		.byte	0x4
+ 28240 1375 91       		.byte	0x91
+ 28241 1376 F0B67F   		.sleb128 -9360
+ 28242 1379 34       		.uleb128 0x34
+ 28243 137a BB0D0000 		.long	0xdbb
+ 28244 137e 03       		.byte	0x3
+ 28245 137f 91       		.byte	0x91
+ 28246 1380 BC50     		.sleb128 -6084
+ 28247 1382 00       		.byte	0x0
+ 28248 1383 00       		.byte	0x0
+ 28249 1384 00       		.byte	0x0
+ 28250 1385 00       		.byte	0x0
+ 28251 1386 36       		.uleb128 0x36
+ 28252 1387 00000000 		.quad	.LBB475
+ 28252      00000000 
+ 28253 138f 00000000 		.quad	.LBE475
+ 28253      00000000 
+ 28254 1397 A6130000 		.long	0x13a6
+ 28255 139b 34       		.uleb128 0x34
+ 28256 139c 280C0000 		.long	0xc28
+ 28257 13a0 04       		.byte	0x4
+ 28258 13a1 91       		.byte	0x91
+ 28259 13a2 E0B57F   		.sleb128 -9504
+ 28260 13a5 00       		.byte	0x0
+ 28261 13a6 31       		.uleb128 0x31
+ 28262 13a7 520E0000 		.long	0xe52
+ 28263 13ab 00000000 		.quad	.LBB476
+ 28263      00000000 
+ 28264 13b3 00000000 		.quad	.LBE476
+ 28264      00000000 
+ 28265 13bb 02       		.byte	0x2
+ 28266 13bc 9606     		.value	0x696
+ 28267 13be D5130000 		.long	0x13d5
+ 28268 13c2 32       		.uleb128 0x32
+ 28269 13c3 6D0E0000 		.long	0xe6d
+ 28270 13c7 03       		.byte	0x3
+ 28271 13c8 91       		.byte	0x91
+ 28272 13c9 C050     		.sleb128 -6080
+ 28273 13cb 32       		.uleb128 0x32
+ 28274 13cc 630E0000 		.long	0xe63
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 817
+
+
+ 28275 13d0 03       		.byte	0x3
+ 28276 13d1 91       		.byte	0x91
+ 28277 13d2 D050     		.sleb128 -6064
+ 28278 13d4 00       		.byte	0x0
+ 28279 13d5 36       		.uleb128 0x36
+ 28280 13d6 00000000 		.quad	.LBB478
+ 28280      00000000 
+ 28281 13de 00000000 		.quad	.LBE478
+ 28281      00000000 
+ 28282 13e6 F5130000 		.long	0x13f5
+ 28283 13ea 34       		.uleb128 0x34
+ 28284 13eb 380C0000 		.long	0xc38
+ 28285 13ef 04       		.byte	0x4
+ 28286 13f0 91       		.byte	0x91
+ 28287 13f1 D0B57F   		.sleb128 -9520
+ 28288 13f4 00       		.byte	0x0
+ 28289 13f5 31       		.uleb128 0x31
+ 28290 13f6 780E0000 		.long	0xe78
+ 28291 13fa 00000000 		.quad	.LBB479
+ 28291      00000000 
+ 28292 1402 00000000 		.quad	.LBE479
+ 28292      00000000 
+ 28293 140a 02       		.byte	0x2
+ 28294 140b 9806     		.value	0x698
+ 28295 140d 37140000 		.long	0x1437
+ 28296 1411 32       		.uleb128 0x32
+ 28297 1412 8A0E0000 		.long	0xe8a
+ 28298 1416 03       		.byte	0x3
+ 28299 1417 91       		.byte	0x91
+ 28300 1418 E050     		.sleb128 -6048
+ 28301 141a 33       		.uleb128 0x33
+ 28302 141b 00000000 		.quad	.LBB480
+ 28302      00000000 
+ 28303 1423 00000000 		.quad	.LBE480
+ 28303      00000000 
+ 28304 142b 34       		.uleb128 0x34
+ 28305 142c 960E0000 		.long	0xe96
+ 28306 1430 04       		.byte	0x4
+ 28307 1431 91       		.byte	0x91
+ 28308 1432 A0B77F   		.sleb128 -9312
+ 28309 1435 00       		.byte	0x0
+ 28310 1436 00       		.byte	0x0
+ 28311 1437 33       		.uleb128 0x33
+ 28312 1438 00000000 		.quad	.LBB481
+ 28312      00000000 
+ 28313 1440 00000000 		.quad	.LBE481
+ 28313      00000000 
+ 28314 1448 34       		.uleb128 0x34
+ 28315 1449 440C0000 		.long	0xc44
+ 28316 144d 04       		.byte	0x4
+ 28317 144e 91       		.byte	0x91
+ 28318 144f C0B57F   		.sleb128 -9536
+ 28319 1452 00       		.byte	0x0
+ 28320 1453 00       		.byte	0x0
+ 28321 1454 00       		.byte	0x0
+ 28322 1455 31       		.uleb128 0x31
+ 28323 1456 A30E0000 		.long	0xea3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 818
+
+
+ 28324 145a 00000000 		.quad	.LBB482
+ 28324      00000000 
+ 28325 1462 00000000 		.quad	.LBE482
+ 28325      00000000 
+ 28326 146a 02       		.byte	0x2
+ 28327 146b D006     		.value	0x6d0
+ 28328 146d 59150000 		.long	0x1559
+ 28329 1471 32       		.uleb128 0x32
+ 28330 1472 B50E0000 		.long	0xeb5
+ 28331 1476 03       		.byte	0x3
+ 28332 1477 91       		.byte	0x91
+ 28333 1478 F050     		.sleb128 -6032
+ 28334 147a 33       		.uleb128 0x33
+ 28335 147b 00000000 		.quad	.LBB483
+ 28335      00000000 
+ 28336 1483 00000000 		.quad	.LBE483
+ 28336      00000000 
+ 28337 148b 34       		.uleb128 0x34
+ 28338 148c C10E0000 		.long	0xec1
+ 28339 1490 04       		.byte	0x4
+ 28340 1491 76       		.byte	0x76
+ 28341 1492 E0B07F   		.sleb128 -10144
+ 28342 1495 31       		.uleb128 0x31
+ 28343 1496 CE0E0000 		.long	0xece
+ 28344 149a 00000000 		.quad	.LBB484
+ 28344      00000000 
+ 28345 14a2 00000000 		.quad	.LBE484
+ 28345      00000000 
+ 28346 14aa 02       		.byte	0x2
+ 28347 14ab 1F06     		.value	0x61f
+ 28348 14ad D7140000 		.long	0x14d7
+ 28349 14b1 32       		.uleb128 0x32
+ 28350 14b2 E00E0000 		.long	0xee0
+ 28351 14b6 03       		.byte	0x3
+ 28352 14b7 91       		.byte	0x91
+ 28353 14b8 8051     		.sleb128 -6016
+ 28354 14ba 33       		.uleb128 0x33
+ 28355 14bb 00000000 		.quad	.LBB485
+ 28355      00000000 
+ 28356 14c3 00000000 		.quad	.LBE485
+ 28356      00000000 
+ 28357 14cb 34       		.uleb128 0x34
+ 28358 14cc EC0E0000 		.long	0xeec
+ 28359 14d0 04       		.byte	0x4
+ 28360 14d1 91       		.byte	0x91
+ 28361 14d2 B0B77F   		.sleb128 -9296
+ 28362 14d5 00       		.byte	0x0
+ 28363 14d6 00       		.byte	0x0
+ 28364 14d7 31       		.uleb128 0x31
+ 28365 14d8 CE0E0000 		.long	0xece
+ 28366 14dc 00000000 		.quad	.LBB486
+ 28366      00000000 
+ 28367 14e4 00000000 		.quad	.LBE486
+ 28367      00000000 
+ 28368 14ec 02       		.byte	0x2
+ 28369 14ed 2006     		.value	0x620
+ 28370 14ef 19150000 		.long	0x1519
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 819
+
+
+ 28371 14f3 32       		.uleb128 0x32
+ 28372 14f4 E00E0000 		.long	0xee0
+ 28373 14f8 03       		.byte	0x3
+ 28374 14f9 91       		.byte	0x91
+ 28375 14fa 9051     		.sleb128 -6000
+ 28376 14fc 33       		.uleb128 0x33
+ 28377 14fd 00000000 		.quad	.LBB487
+ 28377      00000000 
+ 28378 1505 00000000 		.quad	.LBE487
+ 28378      00000000 
+ 28379 150d 34       		.uleb128 0x34
+ 28380 150e EC0E0000 		.long	0xeec
+ 28381 1512 04       		.byte	0x4
+ 28382 1513 91       		.byte	0x91
+ 28383 1514 C0B77F   		.sleb128 -9280
+ 28384 1517 00       		.byte	0x0
+ 28385 1518 00       		.byte	0x0
+ 28386 1519 35       		.uleb128 0x35
+ 28387 151a CE0E0000 		.long	0xece
+ 28388 151e 00000000 		.quad	.LBB488
+ 28388      00000000 
+ 28389 1526 00000000 		.quad	.LBE488
+ 28389      00000000 
+ 28390 152e 02       		.byte	0x2
+ 28391 152f 2106     		.value	0x621
+ 28392 1531 32       		.uleb128 0x32
+ 28393 1532 E00E0000 		.long	0xee0
+ 28394 1536 03       		.byte	0x3
+ 28395 1537 91       		.byte	0x91
+ 28396 1538 A051     		.sleb128 -5984
+ 28397 153a 33       		.uleb128 0x33
+ 28398 153b 00000000 		.quad	.LBB489
+ 28398      00000000 
+ 28399 1543 00000000 		.quad	.LBE489
+ 28399      00000000 
+ 28400 154b 34       		.uleb128 0x34
+ 28401 154c EC0E0000 		.long	0xeec
+ 28402 1550 04       		.byte	0x4
+ 28403 1551 91       		.byte	0x91
+ 28404 1552 D0B77F   		.sleb128 -9264
+ 28405 1555 00       		.byte	0x0
+ 28406 1556 00       		.byte	0x0
+ 28407 1557 00       		.byte	0x0
+ 28408 1558 00       		.byte	0x0
+ 28409 1559 31       		.uleb128 0x31
+ 28410 155a D10B0000 		.long	0xbd1
+ 28411 155e 00000000 		.quad	.LBB490
+ 28411      00000000 
+ 28412 1566 00000000 		.quad	.LBE490
+ 28412      00000000 
+ 28413 156e 02       		.byte	0x2
+ 28414 156f D106     		.value	0x6d1
+ 28415 1571 101A0000 		.long	0x1a10
+ 28416 1575 32       		.uleb128 0x32
+ 28417 1576 EF0B0000 		.long	0xbef
+ 28418 157a 03       		.byte	0x3
+ 28419 157b 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 820
+
+
+ 28420 157c BC51     		.sleb128 -5956
+ 28421 157e 32       		.uleb128 0x32
+ 28422 157f E30B0000 		.long	0xbe3
+ 28423 1583 03       		.byte	0x3
+ 28424 1584 91       		.byte	0x91
+ 28425 1585 C051     		.sleb128 -5952
+ 28426 1587 33       		.uleb128 0x33
+ 28427 1588 00000000 		.quad	.LBB491
+ 28427      00000000 
+ 28428 1590 00000000 		.quad	.LBE491
+ 28428      00000000 
+ 28429 1598 34       		.uleb128 0x34
+ 28430 1599 FB0B0000 		.long	0xbfb
+ 28431 159d 04       		.byte	0x4
+ 28432 159e 76       		.byte	0x76
+ 28433 159f 80B17F   		.sleb128 -10112
+ 28434 15a2 34       		.uleb128 0x34
+ 28435 15a3 070C0000 		.long	0xc07
+ 28436 15a7 04       		.byte	0x4
+ 28437 15a8 76       		.byte	0x76
+ 28438 15a9 F0B07F   		.sleb128 -10128
+ 28439 15ac 31       		.uleb128 0x31
+ 28440 15ad 500C0000 		.long	0xc50
+ 28441 15b1 00000000 		.quad	.LBB492
+ 28441      00000000 
+ 28442 15b9 00000000 		.quad	.LBE492
+ 28442      00000000 
+ 28443 15c1 02       		.byte	0x2
+ 28444 15c2 9106     		.value	0x691
+ 28445 15c4 00160000 		.long	0x1600
+ 28446 15c8 32       		.uleb128 0x32
+ 28447 15c9 7A0C0000 		.long	0xc7a
+ 28448 15cd 03       		.byte	0x3
+ 28449 15ce 91       		.byte	0x91
+ 28450 15cf D851     		.sleb128 -5928
+ 28451 15d1 32       		.uleb128 0x32
+ 28452 15d2 6E0C0000 		.long	0xc6e
+ 28453 15d6 03       		.byte	0x3
+ 28454 15d7 91       		.byte	0x91
+ 28455 15d8 DC51     		.sleb128 -5924
+ 28456 15da 32       		.uleb128 0x32
+ 28457 15db 620C0000 		.long	0xc62
+ 28458 15df 03       		.byte	0x3
+ 28459 15e0 91       		.byte	0x91
+ 28460 15e1 E051     		.sleb128 -5920
+ 28461 15e3 33       		.uleb128 0x33
+ 28462 15e4 00000000 		.quad	.LBB493
+ 28462      00000000 
+ 28463 15ec 00000000 		.quad	.LBE493
+ 28463      00000000 
+ 28464 15f4 34       		.uleb128 0x34
+ 28465 15f5 860C0000 		.long	0xc86
+ 28466 15f9 04       		.byte	0x4
+ 28467 15fa 91       		.byte	0x91
+ 28468 15fb A0B87F   		.sleb128 -9184
+ 28469 15fe 00       		.byte	0x0
+ 28470 15ff 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 821
+
+
+ 28471 1600 31       		.uleb128 0x31
+ 28472 1601 910C0000 		.long	0xc91
+ 28473 1605 00000000 		.quad	.LBB494
+ 28473      00000000 
+ 28474 160d 00000000 		.quad	.LBE494
+ 28474      00000000 
+ 28475 1615 02       		.byte	0x2
+ 28476 1616 9206     		.value	0x692
+ 28477 1618 76180000 		.long	0x1876
+ 28478 161c 32       		.uleb128 0x32
+ 28479 161d A30C0000 		.long	0xca3
+ 28480 1621 03       		.byte	0x3
+ 28481 1622 91       		.byte	0x91
+ 28482 1623 F051     		.sleb128 -5904
+ 28483 1625 35       		.uleb128 0x35
+ 28484 1626 B00C0000 		.long	0xcb0
+ 28485 162a 00000000 		.quad	.LBB496
+ 28485      00000000 
+ 28486 1632 00000000 		.quad	.LBE496
+ 28486      00000000 
+ 28487 163a 02       		.byte	0x2
+ 28488 163b 7D03     		.value	0x37d
+ 28489 163d 32       		.uleb128 0x32
+ 28490 163e CE0C0000 		.long	0xcce
+ 28491 1642 03       		.byte	0x3
+ 28492 1643 91       		.byte	0x91
+ 28493 1644 8852     		.sleb128 -5880
+ 28494 1646 32       		.uleb128 0x32
+ 28495 1647 C20C0000 		.long	0xcc2
+ 28496 164b 03       		.byte	0x3
+ 28497 164c 91       		.byte	0x91
+ 28498 164d 9052     		.sleb128 -5872
+ 28499 164f 33       		.uleb128 0x33
+ 28500 1650 00000000 		.quad	.LBB497
+ 28500      00000000 
+ 28501 1658 00000000 		.quad	.LBE497
+ 28501      00000000 
+ 28502 1660 34       		.uleb128 0x34
+ 28503 1661 DA0C0000 		.long	0xcda
+ 28504 1665 03       		.byte	0x3
+ 28505 1666 91       		.byte	0x91
+ 28506 1667 E052     		.sleb128 -5792
+ 28507 1669 34       		.uleb128 0x34
+ 28508 166a E50C0000 		.long	0xce5
+ 28509 166e 03       		.byte	0x3
+ 28510 166f 91       		.byte	0x91
+ 28511 1670 D052     		.sleb128 -5808
+ 28512 1672 34       		.uleb128 0x34
+ 28513 1673 F00C0000 		.long	0xcf0
+ 28514 1677 03       		.byte	0x3
+ 28515 1678 91       		.byte	0x91
+ 28516 1679 C052     		.sleb128 -5824
+ 28517 167b 34       		.uleb128 0x34
+ 28518 167c FC0C0000 		.long	0xcfc
+ 28519 1680 03       		.byte	0x3
+ 28520 1681 91       		.byte	0x91
+ 28521 1682 B052     		.sleb128 -5840
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 822
+
+
+ 28522 1684 34       		.uleb128 0x34
+ 28523 1685 080D0000 		.long	0xd08
+ 28524 1689 03       		.byte	0x3
+ 28525 168a 91       		.byte	0x91
+ 28526 168b AC52     		.sleb128 -5844
+ 28527 168d 31       		.uleb128 0x31
+ 28528 168e 1F0D0000 		.long	0xd1f
+ 28529 1692 00000000 		.quad	.LBB498
+ 28529      00000000 
+ 28530 169a 00000000 		.quad	.LBE498
+ 28530      00000000 
+ 28531 16a2 02       		.byte	0x2
+ 28532 16a3 5603     		.value	0x356
+ 28533 16a5 BC160000 		.long	0x16bc
+ 28534 16a9 32       		.uleb128 0x32
+ 28535 16aa 3A0D0000 		.long	0xd3a
+ 28536 16ae 03       		.byte	0x3
+ 28537 16af 91       		.byte	0x91
+ 28538 16b0 F052     		.sleb128 -5776
+ 28539 16b2 32       		.uleb128 0x32
+ 28540 16b3 300D0000 		.long	0xd30
+ 28541 16b7 03       		.byte	0x3
+ 28542 16b8 91       		.byte	0x91
+ 28543 16b9 8053     		.sleb128 -5760
+ 28544 16bb 00       		.byte	0x0
+ 28545 16bc 31       		.uleb128 0x31
+ 28546 16bd 450D0000 		.long	0xd45
+ 28547 16c1 00000000 		.quad	.LBB500
+ 28547      00000000 
+ 28548 16c9 00000000 		.quad	.LBE500
+ 28548      00000000 
+ 28549 16d1 02       		.byte	0x2
+ 28550 16d2 5E03     		.value	0x35e
+ 28551 16d4 EB160000 		.long	0x16eb
+ 28552 16d8 32       		.uleb128 0x32
+ 28553 16d9 620D0000 		.long	0xd62
+ 28554 16dd 03       		.byte	0x3
+ 28555 16de 91       		.byte	0x91
+ 28556 16df 9053     		.sleb128 -5744
+ 28557 16e1 32       		.uleb128 0x32
+ 28558 16e2 570D0000 		.long	0xd57
+ 28559 16e6 03       		.byte	0x3
+ 28560 16e7 91       		.byte	0x91
+ 28561 16e8 A053     		.sleb128 -5728
+ 28562 16ea 00       		.byte	0x0
+ 28563 16eb 31       		.uleb128 0x31
+ 28564 16ec 6E0D0000 		.long	0xd6e
+ 28565 16f0 00000000 		.quad	.LBB502
+ 28565      00000000 
+ 28566 16f8 00000000 		.quad	.LBE502
+ 28566      00000000 
+ 28567 1700 02       		.byte	0x2
+ 28568 1701 6403     		.value	0x364
+ 28569 1703 53170000 		.long	0x1753
+ 28570 1707 32       		.uleb128 0x32
+ 28571 1708 8C0D0000 		.long	0xd8c
+ 28572 170c 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 823
+
+
+ 28573 170d 91       		.byte	0x91
+ 28574 170e B053     		.sleb128 -5712
+ 28575 1710 32       		.uleb128 0x32
+ 28576 1711 800D0000 		.long	0xd80
+ 28577 1715 03       		.byte	0x3
+ 28578 1716 91       		.byte	0x91
+ 28579 1717 C053     		.sleb128 -5696
+ 28580 1719 33       		.uleb128 0x33
+ 28581 171a 00000000 		.quad	.LBB503
+ 28581      00000000 
+ 28582 1722 00000000 		.quad	.LBE503
+ 28582      00000000 
+ 28583 172a 34       		.uleb128 0x34
+ 28584 172b 980D0000 		.long	0xd98
+ 28585 172f 04       		.byte	0x4
+ 28586 1730 91       		.byte	0x91
+ 28587 1731 D0B87F   		.sleb128 -9136
+ 28588 1734 34       		.uleb128 0x34
+ 28589 1735 A40D0000 		.long	0xda4
+ 28590 1739 04       		.byte	0x4
+ 28591 173a 91       		.byte	0x91
+ 28592 173b C0B87F   		.sleb128 -9152
+ 28593 173e 34       		.uleb128 0x34
+ 28594 173f AF0D0000 		.long	0xdaf
+ 28595 1743 04       		.byte	0x4
+ 28596 1744 91       		.byte	0x91
+ 28597 1745 B0B87F   		.sleb128 -9168
+ 28598 1748 34       		.uleb128 0x34
+ 28599 1749 BB0D0000 		.long	0xdbb
+ 28600 174d 03       		.byte	0x3
+ 28601 174e 91       		.byte	0x91
+ 28602 174f DC53     		.sleb128 -5668
+ 28603 1751 00       		.byte	0x0
+ 28604 1752 00       		.byte	0x0
+ 28605 1753 31       		.uleb128 0x31
+ 28606 1754 C70D0000 		.long	0xdc7
+ 28607 1758 00000000 		.quad	.LBB504
+ 28607      00000000 
+ 28608 1760 00000000 		.quad	.LBE504
+ 28608      00000000 
+ 28609 1768 02       		.byte	0x2
+ 28610 1769 6603     		.value	0x366
+ 28611 176b 82170000 		.long	0x1782
+ 28612 176f 32       		.uleb128 0x32
+ 28613 1770 E20D0000 		.long	0xde2
+ 28614 1774 03       		.byte	0x3
+ 28615 1775 91       		.byte	0x91
+ 28616 1776 E053     		.sleb128 -5664
+ 28617 1778 32       		.uleb128 0x32
+ 28618 1779 D80D0000 		.long	0xdd8
+ 28619 177d 03       		.byte	0x3
+ 28620 177e 91       		.byte	0x91
+ 28621 177f F053     		.sleb128 -5648
+ 28622 1781 00       		.byte	0x0
+ 28623 1782 31       		.uleb128 0x31
+ 28624 1783 6E0D0000 		.long	0xd6e
+ 28625 1787 00000000 		.quad	.LBB506
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 824
+
+
+ 28625      00000000 
+ 28626 178f 00000000 		.quad	.LBE506
+ 28626      00000000 
+ 28627 1797 02       		.byte	0x2
+ 28628 1798 6803     		.value	0x368
+ 28629 179a EA170000 		.long	0x17ea
+ 28630 179e 32       		.uleb128 0x32
+ 28631 179f 8C0D0000 		.long	0xd8c
+ 28632 17a3 03       		.byte	0x3
+ 28633 17a4 91       		.byte	0x91
+ 28634 17a5 8054     		.sleb128 -5632
+ 28635 17a7 32       		.uleb128 0x32
+ 28636 17a8 800D0000 		.long	0xd80
+ 28637 17ac 03       		.byte	0x3
+ 28638 17ad 91       		.byte	0x91
+ 28639 17ae 9054     		.sleb128 -5616
+ 28640 17b0 33       		.uleb128 0x33
+ 28641 17b1 00000000 		.quad	.LBB507
+ 28641      00000000 
+ 28642 17b9 00000000 		.quad	.LBE507
+ 28642      00000000 
+ 28643 17c1 34       		.uleb128 0x34
+ 28644 17c2 980D0000 		.long	0xd98
+ 28645 17c6 04       		.byte	0x4
+ 28646 17c7 91       		.byte	0x91
+ 28647 17c8 80B97F   		.sleb128 -9088
+ 28648 17cb 34       		.uleb128 0x34
+ 28649 17cc A40D0000 		.long	0xda4
+ 28650 17d0 04       		.byte	0x4
+ 28651 17d1 91       		.byte	0x91
+ 28652 17d2 F0B87F   		.sleb128 -9104
+ 28653 17d5 34       		.uleb128 0x34
+ 28654 17d6 AF0D0000 		.long	0xdaf
+ 28655 17da 04       		.byte	0x4
+ 28656 17db 91       		.byte	0x91
+ 28657 17dc E0B87F   		.sleb128 -9120
+ 28658 17df 34       		.uleb128 0x34
+ 28659 17e0 BB0D0000 		.long	0xdbb
+ 28660 17e4 03       		.byte	0x3
+ 28661 17e5 91       		.byte	0x91
+ 28662 17e6 AC54     		.sleb128 -5588
+ 28663 17e8 00       		.byte	0x0
+ 28664 17e9 00       		.byte	0x0
+ 28665 17ea 31       		.uleb128 0x31
+ 28666 17eb C70D0000 		.long	0xdc7
+ 28667 17ef 00000000 		.quad	.LBB508
+ 28667      00000000 
+ 28668 17f7 00000000 		.quad	.LBE508
+ 28668      00000000 
+ 28669 17ff 02       		.byte	0x2
+ 28670 1800 6A03     		.value	0x36a
+ 28671 1802 19180000 		.long	0x1819
+ 28672 1806 32       		.uleb128 0x32
+ 28673 1807 E20D0000 		.long	0xde2
+ 28674 180b 03       		.byte	0x3
+ 28675 180c 91       		.byte	0x91
+ 28676 180d B054     		.sleb128 -5584
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 825
+
+
+ 28677 180f 32       		.uleb128 0x32
+ 28678 1810 D80D0000 		.long	0xdd8
+ 28679 1814 03       		.byte	0x3
+ 28680 1815 91       		.byte	0x91
+ 28681 1816 C054     		.sleb128 -5568
+ 28682 1818 00       		.byte	0x0
+ 28683 1819 31       		.uleb128 0x31
+ 28684 181a ED0D0000 		.long	0xded
+ 28685 181e 00000000 		.quad	.LBB510
+ 28685      00000000 
+ 28686 1826 00000000 		.quad	.LBE510
+ 28686      00000000 
+ 28687 182e 02       		.byte	0x2
+ 28688 182f 6C03     		.value	0x36c
+ 28689 1831 48180000 		.long	0x1848
+ 28690 1835 32       		.uleb128 0x32
+ 28691 1836 0A0E0000 		.long	0xe0a
+ 28692 183a 03       		.byte	0x3
+ 28693 183b 91       		.byte	0x91
+ 28694 183c D054     		.sleb128 -5552
+ 28695 183e 32       		.uleb128 0x32
+ 28696 183f FF0D0000 		.long	0xdff
+ 28697 1843 03       		.byte	0x3
+ 28698 1844 91       		.byte	0x91
+ 28699 1845 E054     		.sleb128 -5536
+ 28700 1847 00       		.byte	0x0
+ 28701 1848 35       		.uleb128 0x35
+ 28702 1849 1F0D0000 		.long	0xd1f
+ 28703 184d 00000000 		.quad	.LBB512
+ 28703      00000000 
+ 28704 1855 00000000 		.quad	.LBE512
+ 28704      00000000 
+ 28705 185d 02       		.byte	0x2
+ 28706 185e 6E03     		.value	0x36e
+ 28707 1860 32       		.uleb128 0x32
+ 28708 1861 3A0D0000 		.long	0xd3a
+ 28709 1865 03       		.byte	0x3
+ 28710 1866 91       		.byte	0x91
+ 28711 1867 F054     		.sleb128 -5520
+ 28712 1869 32       		.uleb128 0x32
+ 28713 186a 300D0000 		.long	0xd30
+ 28714 186e 03       		.byte	0x3
+ 28715 186f 91       		.byte	0x91
+ 28716 1870 8055     		.sleb128 -5504
+ 28717 1872 00       		.byte	0x0
+ 28718 1873 00       		.byte	0x0
+ 28719 1874 00       		.byte	0x0
+ 28720 1875 00       		.byte	0x0
+ 28721 1876 36       		.uleb128 0x36
+ 28722 1877 00000000 		.quad	.LBB514
+ 28722      00000000 
+ 28723 187f 00000000 		.quad	.LBE514
+ 28723      00000000 
+ 28724 1887 96180000 		.long	0x1896
+ 28725 188b 34       		.uleb128 0x34
+ 28726 188c 180C0000 		.long	0xc18
+ 28727 1890 04       		.byte	0x4
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 826
+
+
+ 28728 1891 91       		.byte	0x91
+ 28729 1892 90B87F   		.sleb128 -9200
+ 28730 1895 00       		.byte	0x0
+ 28731 1896 31       		.uleb128 0x31
+ 28732 1897 160E0000 		.long	0xe16
+ 28733 189b 00000000 		.quad	.LBB515
+ 28733      00000000 
+ 28734 18a3 00000000 		.quad	.LBE515
+ 28734      00000000 
+ 28735 18ab 02       		.byte	0x2
+ 28736 18ac 9406     		.value	0x694
+ 28737 18ae 41190000 		.long	0x1941
+ 28738 18b2 32       		.uleb128 0x32
+ 28739 18b3 280E0000 		.long	0xe28
+ 28740 18b7 03       		.byte	0x3
+ 28741 18b8 91       		.byte	0x91
+ 28742 18b9 9055     		.sleb128 -5488
+ 28743 18bb 33       		.uleb128 0x33
+ 28744 18bc 00000000 		.quad	.LBB516
+ 28744      00000000 
+ 28745 18c4 00000000 		.quad	.LBE516
+ 28745      00000000 
+ 28746 18cc 34       		.uleb128 0x34
+ 28747 18cd 340E0000 		.long	0xe34
+ 28748 18d1 09       		.byte	0x9
+ 28749 18d2 03       		.byte	0x3
+ 28750 18d3 00000000 		.quad	ShiftRowTable.6768
+ 28750      00000000 
+ 28751 18db 35       		.uleb128 0x35
+ 28752 18dc 6E0D0000 		.long	0xd6e
+ 28753 18e0 00000000 		.quad	.LBB517
+ 28753      00000000 
+ 28754 18e8 00000000 		.quad	.LBE517
+ 28754      00000000 
+ 28755 18f0 02       		.byte	0x2
+ 28756 18f1 9B02     		.value	0x29b
+ 28757 18f3 32       		.uleb128 0x32
+ 28758 18f4 8C0D0000 		.long	0xd8c
+ 28759 18f8 03       		.byte	0x3
+ 28760 18f9 91       		.byte	0x91
+ 28761 18fa A055     		.sleb128 -5472
+ 28762 18fc 32       		.uleb128 0x32
+ 28763 18fd 800D0000 		.long	0xd80
+ 28764 1901 03       		.byte	0x3
+ 28765 1902 91       		.byte	0x91
+ 28766 1903 B055     		.sleb128 -5456
+ 28767 1905 33       		.uleb128 0x33
+ 28768 1906 00000000 		.quad	.LBB518
+ 28768      00000000 
+ 28769 190e 00000000 		.quad	.LBE518
+ 28769      00000000 
+ 28770 1916 34       		.uleb128 0x34
+ 28771 1917 980D0000 		.long	0xd98
+ 28772 191b 04       		.byte	0x4
+ 28773 191c 91       		.byte	0x91
+ 28774 191d B0B97F   		.sleb128 -9040
+ 28775 1920 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 827
+
+
+ 28776 1921 A40D0000 		.long	0xda4
+ 28777 1925 04       		.byte	0x4
+ 28778 1926 91       		.byte	0x91
+ 28779 1927 A0B97F   		.sleb128 -9056
+ 28780 192a 34       		.uleb128 0x34
+ 28781 192b AF0D0000 		.long	0xdaf
+ 28782 192f 04       		.byte	0x4
+ 28783 1930 91       		.byte	0x91
+ 28784 1931 90B97F   		.sleb128 -9072
+ 28785 1934 34       		.uleb128 0x34
+ 28786 1935 BB0D0000 		.long	0xdbb
+ 28787 1939 03       		.byte	0x3
+ 28788 193a 91       		.byte	0x91
+ 28789 193b CC55     		.sleb128 -5428
+ 28790 193d 00       		.byte	0x0
+ 28791 193e 00       		.byte	0x0
+ 28792 193f 00       		.byte	0x0
+ 28793 1940 00       		.byte	0x0
+ 28794 1941 36       		.uleb128 0x36
+ 28795 1942 00000000 		.quad	.LBB519
+ 28795      00000000 
+ 28796 194a 00000000 		.quad	.LBE519
+ 28796      00000000 
+ 28797 1952 61190000 		.long	0x1961
+ 28798 1956 34       		.uleb128 0x34
+ 28799 1957 280C0000 		.long	0xc28
+ 28800 195b 04       		.byte	0x4
+ 28801 195c 91       		.byte	0x91
+ 28802 195d 80B87F   		.sleb128 -9216
+ 28803 1960 00       		.byte	0x0
+ 28804 1961 31       		.uleb128 0x31
+ 28805 1962 520E0000 		.long	0xe52
+ 28806 1966 00000000 		.quad	.LBB520
+ 28806      00000000 
+ 28807 196e 00000000 		.quad	.LBE520
+ 28807      00000000 
+ 28808 1976 02       		.byte	0x2
+ 28809 1977 9606     		.value	0x696
+ 28810 1979 90190000 		.long	0x1990
+ 28811 197d 32       		.uleb128 0x32
+ 28812 197e 6D0E0000 		.long	0xe6d
+ 28813 1982 03       		.byte	0x3
+ 28814 1983 91       		.byte	0x91
+ 28815 1984 D055     		.sleb128 -5424
+ 28816 1986 32       		.uleb128 0x32
+ 28817 1987 630E0000 		.long	0xe63
+ 28818 198b 03       		.byte	0x3
+ 28819 198c 91       		.byte	0x91
+ 28820 198d E055     		.sleb128 -5408
+ 28821 198f 00       		.byte	0x0
+ 28822 1990 36       		.uleb128 0x36
+ 28823 1991 00000000 		.quad	.LBB522
+ 28823      00000000 
+ 28824 1999 00000000 		.quad	.LBE522
+ 28824      00000000 
+ 28825 19a1 B0190000 		.long	0x19b0
+ 28826 19a5 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 828
+
+
+ 28827 19a6 380C0000 		.long	0xc38
+ 28828 19aa 04       		.byte	0x4
+ 28829 19ab 91       		.byte	0x91
+ 28830 19ac F0B77F   		.sleb128 -9232
+ 28831 19af 00       		.byte	0x0
+ 28832 19b0 31       		.uleb128 0x31
+ 28833 19b1 780E0000 		.long	0xe78
+ 28834 19b5 00000000 		.quad	.LBB523
+ 28834      00000000 
+ 28835 19bd 00000000 		.quad	.LBE523
+ 28835      00000000 
+ 28836 19c5 02       		.byte	0x2
+ 28837 19c6 9806     		.value	0x698
+ 28838 19c8 F2190000 		.long	0x19f2
+ 28839 19cc 32       		.uleb128 0x32
+ 28840 19cd 8A0E0000 		.long	0xe8a
+ 28841 19d1 03       		.byte	0x3
+ 28842 19d2 91       		.byte	0x91
+ 28843 19d3 F055     		.sleb128 -5392
+ 28844 19d5 33       		.uleb128 0x33
+ 28845 19d6 00000000 		.quad	.LBB524
+ 28845      00000000 
+ 28846 19de 00000000 		.quad	.LBE524
+ 28846      00000000 
+ 28847 19e6 34       		.uleb128 0x34
+ 28848 19e7 960E0000 		.long	0xe96
+ 28849 19eb 04       		.byte	0x4
+ 28850 19ec 91       		.byte	0x91
+ 28851 19ed C0B97F   		.sleb128 -9024
+ 28852 19f0 00       		.byte	0x0
+ 28853 19f1 00       		.byte	0x0
+ 28854 19f2 33       		.uleb128 0x33
+ 28855 19f3 00000000 		.quad	.LBB525
+ 28855      00000000 
+ 28856 19fb 00000000 		.quad	.LBE525
+ 28856      00000000 
+ 28857 1a03 34       		.uleb128 0x34
+ 28858 1a04 440C0000 		.long	0xc44
+ 28859 1a08 04       		.byte	0x4
+ 28860 1a09 91       		.byte	0x91
+ 28861 1a0a E0B77F   		.sleb128 -9248
+ 28862 1a0d 00       		.byte	0x0
+ 28863 1a0e 00       		.byte	0x0
+ 28864 1a0f 00       		.byte	0x0
+ 28865 1a10 31       		.uleb128 0x31
+ 28866 1a11 A30E0000 		.long	0xea3
+ 28867 1a15 00000000 		.quad	.LBB526
+ 28867      00000000 
+ 28868 1a1d 00000000 		.quad	.LBE526
+ 28868      00000000 
+ 28869 1a25 02       		.byte	0x2
+ 28870 1a26 D106     		.value	0x6d1
+ 28871 1a28 141B0000 		.long	0x1b14
+ 28872 1a2c 32       		.uleb128 0x32
+ 28873 1a2d B50E0000 		.long	0xeb5
+ 28874 1a31 03       		.byte	0x3
+ 28875 1a32 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 829
+
+
+ 28876 1a33 8056     		.sleb128 -5376
+ 28877 1a35 33       		.uleb128 0x33
+ 28878 1a36 00000000 		.quad	.LBB527
+ 28878      00000000 
+ 28879 1a3e 00000000 		.quad	.LBE527
+ 28879      00000000 
+ 28880 1a46 34       		.uleb128 0x34
+ 28881 1a47 C10E0000 		.long	0xec1
+ 28882 1a4b 04       		.byte	0x4
+ 28883 1a4c 76       		.byte	0x76
+ 28884 1a4d A0B17F   		.sleb128 -10080
+ 28885 1a50 31       		.uleb128 0x31
+ 28886 1a51 CE0E0000 		.long	0xece
+ 28887 1a55 00000000 		.quad	.LBB528
+ 28887      00000000 
+ 28888 1a5d 00000000 		.quad	.LBE528
+ 28888      00000000 
+ 28889 1a65 02       		.byte	0x2
+ 28890 1a66 1F06     		.value	0x61f
+ 28891 1a68 921A0000 		.long	0x1a92
+ 28892 1a6c 32       		.uleb128 0x32
+ 28893 1a6d E00E0000 		.long	0xee0
+ 28894 1a71 03       		.byte	0x3
+ 28895 1a72 91       		.byte	0x91
+ 28896 1a73 9056     		.sleb128 -5360
+ 28897 1a75 33       		.uleb128 0x33
+ 28898 1a76 00000000 		.quad	.LBB529
+ 28898      00000000 
+ 28899 1a7e 00000000 		.quad	.LBE529
+ 28899      00000000 
+ 28900 1a86 34       		.uleb128 0x34
+ 28901 1a87 EC0E0000 		.long	0xeec
+ 28902 1a8b 04       		.byte	0x4
+ 28903 1a8c 91       		.byte	0x91
+ 28904 1a8d D0B97F   		.sleb128 -9008
+ 28905 1a90 00       		.byte	0x0
+ 28906 1a91 00       		.byte	0x0
+ 28907 1a92 31       		.uleb128 0x31
+ 28908 1a93 CE0E0000 		.long	0xece
+ 28909 1a97 00000000 		.quad	.LBB530
+ 28909      00000000 
+ 28910 1a9f 00000000 		.quad	.LBE530
+ 28910      00000000 
+ 28911 1aa7 02       		.byte	0x2
+ 28912 1aa8 2006     		.value	0x620
+ 28913 1aaa D41A0000 		.long	0x1ad4
+ 28914 1aae 32       		.uleb128 0x32
+ 28915 1aaf E00E0000 		.long	0xee0
+ 28916 1ab3 03       		.byte	0x3
+ 28917 1ab4 91       		.byte	0x91
+ 28918 1ab5 A056     		.sleb128 -5344
+ 28919 1ab7 33       		.uleb128 0x33
+ 28920 1ab8 00000000 		.quad	.LBB531
+ 28920      00000000 
+ 28921 1ac0 00000000 		.quad	.LBE531
+ 28921      00000000 
+ 28922 1ac8 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 830
+
+
+ 28923 1ac9 EC0E0000 		.long	0xeec
+ 28924 1acd 04       		.byte	0x4
+ 28925 1ace 91       		.byte	0x91
+ 28926 1acf E0B97F   		.sleb128 -8992
+ 28927 1ad2 00       		.byte	0x0
+ 28928 1ad3 00       		.byte	0x0
+ 28929 1ad4 35       		.uleb128 0x35
+ 28930 1ad5 CE0E0000 		.long	0xece
+ 28931 1ad9 00000000 		.quad	.LBB532
+ 28931      00000000 
+ 28932 1ae1 00000000 		.quad	.LBE532
+ 28932      00000000 
+ 28933 1ae9 02       		.byte	0x2
+ 28934 1aea 2106     		.value	0x621
+ 28935 1aec 32       		.uleb128 0x32
+ 28936 1aed E00E0000 		.long	0xee0
+ 28937 1af1 03       		.byte	0x3
+ 28938 1af2 91       		.byte	0x91
+ 28939 1af3 B056     		.sleb128 -5328
+ 28940 1af5 33       		.uleb128 0x33
+ 28941 1af6 00000000 		.quad	.LBB533
+ 28941      00000000 
+ 28942 1afe 00000000 		.quad	.LBE533
+ 28942      00000000 
+ 28943 1b06 34       		.uleb128 0x34
+ 28944 1b07 EC0E0000 		.long	0xeec
+ 28945 1b0b 04       		.byte	0x4
+ 28946 1b0c 91       		.byte	0x91
+ 28947 1b0d F0B97F   		.sleb128 -8976
+ 28948 1b10 00       		.byte	0x0
+ 28949 1b11 00       		.byte	0x0
+ 28950 1b12 00       		.byte	0x0
+ 28951 1b13 00       		.byte	0x0
+ 28952 1b14 31       		.uleb128 0x31
+ 28953 1b15 D10B0000 		.long	0xbd1
+ 28954 1b19 00000000 		.quad	.LBB534
+ 28954      00000000 
+ 28955 1b21 00000000 		.quad	.LBE534
+ 28955      00000000 
+ 28956 1b29 02       		.byte	0x2
+ 28957 1b2a D206     		.value	0x6d2
+ 28958 1b2c CB1F0000 		.long	0x1fcb
+ 28959 1b30 32       		.uleb128 0x32
+ 28960 1b31 EF0B0000 		.long	0xbef
+ 28961 1b35 03       		.byte	0x3
+ 28962 1b36 91       		.byte	0x91
+ 28963 1b37 CC56     		.sleb128 -5300
+ 28964 1b39 32       		.uleb128 0x32
+ 28965 1b3a E30B0000 		.long	0xbe3
+ 28966 1b3e 03       		.byte	0x3
+ 28967 1b3f 91       		.byte	0x91
+ 28968 1b40 D056     		.sleb128 -5296
+ 28969 1b42 33       		.uleb128 0x33
+ 28970 1b43 00000000 		.quad	.LBB535
+ 28970      00000000 
+ 28971 1b4b 00000000 		.quad	.LBE535
+ 28971      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 831
+
+
+ 28972 1b53 34       		.uleb128 0x34
+ 28973 1b54 FB0B0000 		.long	0xbfb
+ 28974 1b58 04       		.byte	0x4
+ 28975 1b59 76       		.byte	0x76
+ 28976 1b5a C0B17F   		.sleb128 -10048
+ 28977 1b5d 34       		.uleb128 0x34
+ 28978 1b5e 070C0000 		.long	0xc07
+ 28979 1b62 04       		.byte	0x4
+ 28980 1b63 76       		.byte	0x76
+ 28981 1b64 B0B17F   		.sleb128 -10064
+ 28982 1b67 31       		.uleb128 0x31
+ 28983 1b68 500C0000 		.long	0xc50
+ 28984 1b6c 00000000 		.quad	.LBB536
+ 28984      00000000 
+ 28985 1b74 00000000 		.quad	.LBE536
+ 28985      00000000 
+ 28986 1b7c 02       		.byte	0x2
+ 28987 1b7d 9106     		.value	0x691
+ 28988 1b7f BB1B0000 		.long	0x1bbb
+ 28989 1b83 32       		.uleb128 0x32
+ 28990 1b84 7A0C0000 		.long	0xc7a
+ 28991 1b88 03       		.byte	0x3
+ 28992 1b89 91       		.byte	0x91
+ 28993 1b8a E856     		.sleb128 -5272
+ 28994 1b8c 32       		.uleb128 0x32
+ 28995 1b8d 6E0C0000 		.long	0xc6e
+ 28996 1b91 03       		.byte	0x3
+ 28997 1b92 91       		.byte	0x91
+ 28998 1b93 EC56     		.sleb128 -5268
+ 28999 1b95 32       		.uleb128 0x32
+ 29000 1b96 620C0000 		.long	0xc62
+ 29001 1b9a 03       		.byte	0x3
+ 29002 1b9b 91       		.byte	0x91
+ 29003 1b9c F056     		.sleb128 -5264
+ 29004 1b9e 33       		.uleb128 0x33
+ 29005 1b9f 00000000 		.quad	.LBB537
+ 29005      00000000 
+ 29006 1ba7 00000000 		.quad	.LBE537
+ 29006      00000000 
+ 29007 1baf 34       		.uleb128 0x34
+ 29008 1bb0 860C0000 		.long	0xc86
+ 29009 1bb4 04       		.byte	0x4
+ 29010 1bb5 91       		.byte	0x91
+ 29011 1bb6 C0BA7F   		.sleb128 -8896
+ 29012 1bb9 00       		.byte	0x0
+ 29013 1bba 00       		.byte	0x0
+ 29014 1bbb 31       		.uleb128 0x31
+ 29015 1bbc 910C0000 		.long	0xc91
+ 29016 1bc0 00000000 		.quad	.LBB538
+ 29016      00000000 
+ 29017 1bc8 00000000 		.quad	.LBE538
+ 29017      00000000 
+ 29018 1bd0 02       		.byte	0x2
+ 29019 1bd1 9206     		.value	0x692
+ 29020 1bd3 311E0000 		.long	0x1e31
+ 29021 1bd7 32       		.uleb128 0x32
+ 29022 1bd8 A30C0000 		.long	0xca3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 832
+
+
+ 29023 1bdc 03       		.byte	0x3
+ 29024 1bdd 91       		.byte	0x91
+ 29025 1bde 8057     		.sleb128 -5248
+ 29026 1be0 35       		.uleb128 0x35
+ 29027 1be1 B00C0000 		.long	0xcb0
+ 29028 1be5 00000000 		.quad	.LBB540
+ 29028      00000000 
+ 29029 1bed 00000000 		.quad	.LBE540
+ 29029      00000000 
+ 29030 1bf5 02       		.byte	0x2
+ 29031 1bf6 7D03     		.value	0x37d
+ 29032 1bf8 32       		.uleb128 0x32
+ 29033 1bf9 CE0C0000 		.long	0xcce
+ 29034 1bfd 03       		.byte	0x3
+ 29035 1bfe 91       		.byte	0x91
+ 29036 1bff 9857     		.sleb128 -5224
+ 29037 1c01 32       		.uleb128 0x32
+ 29038 1c02 C20C0000 		.long	0xcc2
+ 29039 1c06 03       		.byte	0x3
+ 29040 1c07 91       		.byte	0x91
+ 29041 1c08 A057     		.sleb128 -5216
+ 29042 1c0a 33       		.uleb128 0x33
+ 29043 1c0b 00000000 		.quad	.LBB541
+ 29043      00000000 
+ 29044 1c13 00000000 		.quad	.LBE541
+ 29044      00000000 
+ 29045 1c1b 34       		.uleb128 0x34
+ 29046 1c1c DA0C0000 		.long	0xcda
+ 29047 1c20 03       		.byte	0x3
+ 29048 1c21 91       		.byte	0x91
+ 29049 1c22 F057     		.sleb128 -5136
+ 29050 1c24 34       		.uleb128 0x34
+ 29051 1c25 E50C0000 		.long	0xce5
+ 29052 1c29 03       		.byte	0x3
+ 29053 1c2a 91       		.byte	0x91
+ 29054 1c2b E057     		.sleb128 -5152
+ 29055 1c2d 34       		.uleb128 0x34
+ 29056 1c2e F00C0000 		.long	0xcf0
+ 29057 1c32 03       		.byte	0x3
+ 29058 1c33 91       		.byte	0x91
+ 29059 1c34 D057     		.sleb128 -5168
+ 29060 1c36 34       		.uleb128 0x34
+ 29061 1c37 FC0C0000 		.long	0xcfc
+ 29062 1c3b 03       		.byte	0x3
+ 29063 1c3c 91       		.byte	0x91
+ 29064 1c3d C057     		.sleb128 -5184
+ 29065 1c3f 34       		.uleb128 0x34
+ 29066 1c40 080D0000 		.long	0xd08
+ 29067 1c44 03       		.byte	0x3
+ 29068 1c45 91       		.byte	0x91
+ 29069 1c46 BC57     		.sleb128 -5188
+ 29070 1c48 31       		.uleb128 0x31
+ 29071 1c49 1F0D0000 		.long	0xd1f
+ 29072 1c4d 00000000 		.quad	.LBB542
+ 29072      00000000 
+ 29073 1c55 00000000 		.quad	.LBE542
+ 29073      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 833
+
+
+ 29074 1c5d 02       		.byte	0x2
+ 29075 1c5e 5603     		.value	0x356
+ 29076 1c60 771C0000 		.long	0x1c77
+ 29077 1c64 32       		.uleb128 0x32
+ 29078 1c65 3A0D0000 		.long	0xd3a
+ 29079 1c69 03       		.byte	0x3
+ 29080 1c6a 91       		.byte	0x91
+ 29081 1c6b 8058     		.sleb128 -5120
+ 29082 1c6d 32       		.uleb128 0x32
+ 29083 1c6e 300D0000 		.long	0xd30
+ 29084 1c72 03       		.byte	0x3
+ 29085 1c73 91       		.byte	0x91
+ 29086 1c74 9058     		.sleb128 -5104
+ 29087 1c76 00       		.byte	0x0
+ 29088 1c77 31       		.uleb128 0x31
+ 29089 1c78 450D0000 		.long	0xd45
+ 29090 1c7c 00000000 		.quad	.LBB544
+ 29090      00000000 
+ 29091 1c84 00000000 		.quad	.LBE544
+ 29091      00000000 
+ 29092 1c8c 02       		.byte	0x2
+ 29093 1c8d 5E03     		.value	0x35e
+ 29094 1c8f A61C0000 		.long	0x1ca6
+ 29095 1c93 32       		.uleb128 0x32
+ 29096 1c94 620D0000 		.long	0xd62
+ 29097 1c98 03       		.byte	0x3
+ 29098 1c99 91       		.byte	0x91
+ 29099 1c9a A058     		.sleb128 -5088
+ 29100 1c9c 32       		.uleb128 0x32
+ 29101 1c9d 570D0000 		.long	0xd57
+ 29102 1ca1 03       		.byte	0x3
+ 29103 1ca2 91       		.byte	0x91
+ 29104 1ca3 B058     		.sleb128 -5072
+ 29105 1ca5 00       		.byte	0x0
+ 29106 1ca6 31       		.uleb128 0x31
+ 29107 1ca7 6E0D0000 		.long	0xd6e
+ 29108 1cab 00000000 		.quad	.LBB546
+ 29108      00000000 
+ 29109 1cb3 00000000 		.quad	.LBE546
+ 29109      00000000 
+ 29110 1cbb 02       		.byte	0x2
+ 29111 1cbc 6403     		.value	0x364
+ 29112 1cbe 0E1D0000 		.long	0x1d0e
+ 29113 1cc2 32       		.uleb128 0x32
+ 29114 1cc3 8C0D0000 		.long	0xd8c
+ 29115 1cc7 03       		.byte	0x3
+ 29116 1cc8 91       		.byte	0x91
+ 29117 1cc9 C058     		.sleb128 -5056
+ 29118 1ccb 32       		.uleb128 0x32
+ 29119 1ccc 800D0000 		.long	0xd80
+ 29120 1cd0 03       		.byte	0x3
+ 29121 1cd1 91       		.byte	0x91
+ 29122 1cd2 D058     		.sleb128 -5040
+ 29123 1cd4 33       		.uleb128 0x33
+ 29124 1cd5 00000000 		.quad	.LBB547
+ 29124      00000000 
+ 29125 1cdd 00000000 		.quad	.LBE547
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 834
+
+
+ 29125      00000000 
+ 29126 1ce5 34       		.uleb128 0x34
+ 29127 1ce6 980D0000 		.long	0xd98
+ 29128 1cea 04       		.byte	0x4
+ 29129 1ceb 91       		.byte	0x91
+ 29130 1cec F0BA7F   		.sleb128 -8848
+ 29131 1cef 34       		.uleb128 0x34
+ 29132 1cf0 A40D0000 		.long	0xda4
+ 29133 1cf4 04       		.byte	0x4
+ 29134 1cf5 91       		.byte	0x91
+ 29135 1cf6 E0BA7F   		.sleb128 -8864
+ 29136 1cf9 34       		.uleb128 0x34
+ 29137 1cfa AF0D0000 		.long	0xdaf
+ 29138 1cfe 04       		.byte	0x4
+ 29139 1cff 91       		.byte	0x91
+ 29140 1d00 D0BA7F   		.sleb128 -8880
+ 29141 1d03 34       		.uleb128 0x34
+ 29142 1d04 BB0D0000 		.long	0xdbb
+ 29143 1d08 03       		.byte	0x3
+ 29144 1d09 91       		.byte	0x91
+ 29145 1d0a EC58     		.sleb128 -5012
+ 29146 1d0c 00       		.byte	0x0
+ 29147 1d0d 00       		.byte	0x0
+ 29148 1d0e 31       		.uleb128 0x31
+ 29149 1d0f C70D0000 		.long	0xdc7
+ 29150 1d13 00000000 		.quad	.LBB548
+ 29150      00000000 
+ 29151 1d1b 00000000 		.quad	.LBE548
+ 29151      00000000 
+ 29152 1d23 02       		.byte	0x2
+ 29153 1d24 6603     		.value	0x366
+ 29154 1d26 3D1D0000 		.long	0x1d3d
+ 29155 1d2a 32       		.uleb128 0x32
+ 29156 1d2b E20D0000 		.long	0xde2
+ 29157 1d2f 03       		.byte	0x3
+ 29158 1d30 91       		.byte	0x91
+ 29159 1d31 F058     		.sleb128 -5008
+ 29160 1d33 32       		.uleb128 0x32
+ 29161 1d34 D80D0000 		.long	0xdd8
+ 29162 1d38 03       		.byte	0x3
+ 29163 1d39 91       		.byte	0x91
+ 29164 1d3a 8059     		.sleb128 -4992
+ 29165 1d3c 00       		.byte	0x0
+ 29166 1d3d 31       		.uleb128 0x31
+ 29167 1d3e 6E0D0000 		.long	0xd6e
+ 29168 1d42 00000000 		.quad	.LBB550
+ 29168      00000000 
+ 29169 1d4a 00000000 		.quad	.LBE550
+ 29169      00000000 
+ 29170 1d52 02       		.byte	0x2
+ 29171 1d53 6803     		.value	0x368
+ 29172 1d55 A51D0000 		.long	0x1da5
+ 29173 1d59 32       		.uleb128 0x32
+ 29174 1d5a 8C0D0000 		.long	0xd8c
+ 29175 1d5e 03       		.byte	0x3
+ 29176 1d5f 91       		.byte	0x91
+ 29177 1d60 9059     		.sleb128 -4976
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 835
+
+
+ 29178 1d62 32       		.uleb128 0x32
+ 29179 1d63 800D0000 		.long	0xd80
+ 29180 1d67 03       		.byte	0x3
+ 29181 1d68 91       		.byte	0x91
+ 29182 1d69 A059     		.sleb128 -4960
+ 29183 1d6b 33       		.uleb128 0x33
+ 29184 1d6c 00000000 		.quad	.LBB551
+ 29184      00000000 
+ 29185 1d74 00000000 		.quad	.LBE551
+ 29185      00000000 
+ 29186 1d7c 34       		.uleb128 0x34
+ 29187 1d7d 980D0000 		.long	0xd98
+ 29188 1d81 04       		.byte	0x4
+ 29189 1d82 91       		.byte	0x91
+ 29190 1d83 A0BB7F   		.sleb128 -8800
+ 29191 1d86 34       		.uleb128 0x34
+ 29192 1d87 A40D0000 		.long	0xda4
+ 29193 1d8b 04       		.byte	0x4
+ 29194 1d8c 91       		.byte	0x91
+ 29195 1d8d 90BB7F   		.sleb128 -8816
+ 29196 1d90 34       		.uleb128 0x34
+ 29197 1d91 AF0D0000 		.long	0xdaf
+ 29198 1d95 04       		.byte	0x4
+ 29199 1d96 91       		.byte	0x91
+ 29200 1d97 80BB7F   		.sleb128 -8832
+ 29201 1d9a 34       		.uleb128 0x34
+ 29202 1d9b BB0D0000 		.long	0xdbb
+ 29203 1d9f 03       		.byte	0x3
+ 29204 1da0 91       		.byte	0x91
+ 29205 1da1 BC59     		.sleb128 -4932
+ 29206 1da3 00       		.byte	0x0
+ 29207 1da4 00       		.byte	0x0
+ 29208 1da5 31       		.uleb128 0x31
+ 29209 1da6 C70D0000 		.long	0xdc7
+ 29210 1daa 00000000 		.quad	.LBB552
+ 29210      00000000 
+ 29211 1db2 00000000 		.quad	.LBE552
+ 29211      00000000 
+ 29212 1dba 02       		.byte	0x2
+ 29213 1dbb 6A03     		.value	0x36a
+ 29214 1dbd D41D0000 		.long	0x1dd4
+ 29215 1dc1 32       		.uleb128 0x32
+ 29216 1dc2 E20D0000 		.long	0xde2
+ 29217 1dc6 03       		.byte	0x3
+ 29218 1dc7 91       		.byte	0x91
+ 29219 1dc8 C059     		.sleb128 -4928
+ 29220 1dca 32       		.uleb128 0x32
+ 29221 1dcb D80D0000 		.long	0xdd8
+ 29222 1dcf 03       		.byte	0x3
+ 29223 1dd0 91       		.byte	0x91
+ 29224 1dd1 D059     		.sleb128 -4912
+ 29225 1dd3 00       		.byte	0x0
+ 29226 1dd4 31       		.uleb128 0x31
+ 29227 1dd5 ED0D0000 		.long	0xded
+ 29228 1dd9 00000000 		.quad	.LBB554
+ 29228      00000000 
+ 29229 1de1 00000000 		.quad	.LBE554
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 836
+
+
+ 29229      00000000 
+ 29230 1de9 02       		.byte	0x2
+ 29231 1dea 6C03     		.value	0x36c
+ 29232 1dec 031E0000 		.long	0x1e03
+ 29233 1df0 32       		.uleb128 0x32
+ 29234 1df1 0A0E0000 		.long	0xe0a
+ 29235 1df5 03       		.byte	0x3
+ 29236 1df6 91       		.byte	0x91
+ 29237 1df7 E059     		.sleb128 -4896
+ 29238 1df9 32       		.uleb128 0x32
+ 29239 1dfa FF0D0000 		.long	0xdff
+ 29240 1dfe 03       		.byte	0x3
+ 29241 1dff 91       		.byte	0x91
+ 29242 1e00 F059     		.sleb128 -4880
+ 29243 1e02 00       		.byte	0x0
+ 29244 1e03 35       		.uleb128 0x35
+ 29245 1e04 1F0D0000 		.long	0xd1f
+ 29246 1e08 00000000 		.quad	.LBB556
+ 29246      00000000 
+ 29247 1e10 00000000 		.quad	.LBE556
+ 29247      00000000 
+ 29248 1e18 02       		.byte	0x2
+ 29249 1e19 6E03     		.value	0x36e
+ 29250 1e1b 32       		.uleb128 0x32
+ 29251 1e1c 3A0D0000 		.long	0xd3a
+ 29252 1e20 03       		.byte	0x3
+ 29253 1e21 91       		.byte	0x91
+ 29254 1e22 805A     		.sleb128 -4864
+ 29255 1e24 32       		.uleb128 0x32
+ 29256 1e25 300D0000 		.long	0xd30
+ 29257 1e29 03       		.byte	0x3
+ 29258 1e2a 91       		.byte	0x91
+ 29259 1e2b 905A     		.sleb128 -4848
+ 29260 1e2d 00       		.byte	0x0
+ 29261 1e2e 00       		.byte	0x0
+ 29262 1e2f 00       		.byte	0x0
+ 29263 1e30 00       		.byte	0x0
+ 29264 1e31 36       		.uleb128 0x36
+ 29265 1e32 00000000 		.quad	.LBB558
+ 29265      00000000 
+ 29266 1e3a 00000000 		.quad	.LBE558
+ 29266      00000000 
+ 29267 1e42 511E0000 		.long	0x1e51
+ 29268 1e46 34       		.uleb128 0x34
+ 29269 1e47 180C0000 		.long	0xc18
+ 29270 1e4b 04       		.byte	0x4
+ 29271 1e4c 91       		.byte	0x91
+ 29272 1e4d B0BA7F   		.sleb128 -8912
+ 29273 1e50 00       		.byte	0x0
+ 29274 1e51 31       		.uleb128 0x31
+ 29275 1e52 160E0000 		.long	0xe16
+ 29276 1e56 00000000 		.quad	.LBB559
+ 29276      00000000 
+ 29277 1e5e 00000000 		.quad	.LBE559
+ 29277      00000000 
+ 29278 1e66 02       		.byte	0x2
+ 29279 1e67 9406     		.value	0x694
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 837
+
+
+ 29280 1e69 FC1E0000 		.long	0x1efc
+ 29281 1e6d 32       		.uleb128 0x32
+ 29282 1e6e 280E0000 		.long	0xe28
+ 29283 1e72 03       		.byte	0x3
+ 29284 1e73 91       		.byte	0x91
+ 29285 1e74 A05A     		.sleb128 -4832
+ 29286 1e76 33       		.uleb128 0x33
+ 29287 1e77 00000000 		.quad	.LBB560
+ 29287      00000000 
+ 29288 1e7f 00000000 		.quad	.LBE560
+ 29288      00000000 
+ 29289 1e87 34       		.uleb128 0x34
+ 29290 1e88 340E0000 		.long	0xe34
+ 29291 1e8c 09       		.byte	0x9
+ 29292 1e8d 03       		.byte	0x3
+ 29293 1e8e 00000000 		.quad	ShiftRowTable.6768
+ 29293      00000000 
+ 29294 1e96 35       		.uleb128 0x35
+ 29295 1e97 6E0D0000 		.long	0xd6e
+ 29296 1e9b 00000000 		.quad	.LBB561
+ 29296      00000000 
+ 29297 1ea3 00000000 		.quad	.LBE561
+ 29297      00000000 
+ 29298 1eab 02       		.byte	0x2
+ 29299 1eac 9B02     		.value	0x29b
+ 29300 1eae 32       		.uleb128 0x32
+ 29301 1eaf 8C0D0000 		.long	0xd8c
+ 29302 1eb3 03       		.byte	0x3
+ 29303 1eb4 91       		.byte	0x91
+ 29304 1eb5 B05A     		.sleb128 -4816
+ 29305 1eb7 32       		.uleb128 0x32
+ 29306 1eb8 800D0000 		.long	0xd80
+ 29307 1ebc 03       		.byte	0x3
+ 29308 1ebd 91       		.byte	0x91
+ 29309 1ebe C05A     		.sleb128 -4800
+ 29310 1ec0 33       		.uleb128 0x33
+ 29311 1ec1 00000000 		.quad	.LBB562
+ 29311      00000000 
+ 29312 1ec9 00000000 		.quad	.LBE562
+ 29312      00000000 
+ 29313 1ed1 34       		.uleb128 0x34
+ 29314 1ed2 980D0000 		.long	0xd98
+ 29315 1ed6 04       		.byte	0x4
+ 29316 1ed7 91       		.byte	0x91
+ 29317 1ed8 D0BB7F   		.sleb128 -8752
+ 29318 1edb 34       		.uleb128 0x34
+ 29319 1edc A40D0000 		.long	0xda4
+ 29320 1ee0 04       		.byte	0x4
+ 29321 1ee1 91       		.byte	0x91
+ 29322 1ee2 C0BB7F   		.sleb128 -8768
+ 29323 1ee5 34       		.uleb128 0x34
+ 29324 1ee6 AF0D0000 		.long	0xdaf
+ 29325 1eea 04       		.byte	0x4
+ 29326 1eeb 91       		.byte	0x91
+ 29327 1eec B0BB7F   		.sleb128 -8784
+ 29328 1eef 34       		.uleb128 0x34
+ 29329 1ef0 BB0D0000 		.long	0xdbb
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 838
+
+
+ 29330 1ef4 03       		.byte	0x3
+ 29331 1ef5 91       		.byte	0x91
+ 29332 1ef6 DC5A     		.sleb128 -4772
+ 29333 1ef8 00       		.byte	0x0
+ 29334 1ef9 00       		.byte	0x0
+ 29335 1efa 00       		.byte	0x0
+ 29336 1efb 00       		.byte	0x0
+ 29337 1efc 36       		.uleb128 0x36
+ 29338 1efd 00000000 		.quad	.LBB563
+ 29338      00000000 
+ 29339 1f05 00000000 		.quad	.LBE563
+ 29339      00000000 
+ 29340 1f0d 1C1F0000 		.long	0x1f1c
+ 29341 1f11 34       		.uleb128 0x34
+ 29342 1f12 280C0000 		.long	0xc28
+ 29343 1f16 04       		.byte	0x4
+ 29344 1f17 91       		.byte	0x91
+ 29345 1f18 A0BA7F   		.sleb128 -8928
+ 29346 1f1b 00       		.byte	0x0
+ 29347 1f1c 31       		.uleb128 0x31
+ 29348 1f1d 520E0000 		.long	0xe52
+ 29349 1f21 00000000 		.quad	.LBB564
+ 29349      00000000 
+ 29350 1f29 00000000 		.quad	.LBE564
+ 29350      00000000 
+ 29351 1f31 02       		.byte	0x2
+ 29352 1f32 9606     		.value	0x696
+ 29353 1f34 4B1F0000 		.long	0x1f4b
+ 29354 1f38 32       		.uleb128 0x32
+ 29355 1f39 6D0E0000 		.long	0xe6d
+ 29356 1f3d 03       		.byte	0x3
+ 29357 1f3e 91       		.byte	0x91
+ 29358 1f3f E05A     		.sleb128 -4768
+ 29359 1f41 32       		.uleb128 0x32
+ 29360 1f42 630E0000 		.long	0xe63
+ 29361 1f46 03       		.byte	0x3
+ 29362 1f47 91       		.byte	0x91
+ 29363 1f48 F05A     		.sleb128 -4752
+ 29364 1f4a 00       		.byte	0x0
+ 29365 1f4b 36       		.uleb128 0x36
+ 29366 1f4c 00000000 		.quad	.LBB566
+ 29366      00000000 
+ 29367 1f54 00000000 		.quad	.LBE566
+ 29367      00000000 
+ 29368 1f5c 6B1F0000 		.long	0x1f6b
+ 29369 1f60 34       		.uleb128 0x34
+ 29370 1f61 380C0000 		.long	0xc38
+ 29371 1f65 04       		.byte	0x4
+ 29372 1f66 91       		.byte	0x91
+ 29373 1f67 90BA7F   		.sleb128 -8944
+ 29374 1f6a 00       		.byte	0x0
+ 29375 1f6b 31       		.uleb128 0x31
+ 29376 1f6c 780E0000 		.long	0xe78
+ 29377 1f70 00000000 		.quad	.LBB567
+ 29377      00000000 
+ 29378 1f78 00000000 		.quad	.LBE567
+ 29378      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 839
+
+
+ 29379 1f80 02       		.byte	0x2
+ 29380 1f81 9806     		.value	0x698
+ 29381 1f83 AD1F0000 		.long	0x1fad
+ 29382 1f87 32       		.uleb128 0x32
+ 29383 1f88 8A0E0000 		.long	0xe8a
+ 29384 1f8c 03       		.byte	0x3
+ 29385 1f8d 91       		.byte	0x91
+ 29386 1f8e 805B     		.sleb128 -4736
+ 29387 1f90 33       		.uleb128 0x33
+ 29388 1f91 00000000 		.quad	.LBB568
+ 29388      00000000 
+ 29389 1f99 00000000 		.quad	.LBE568
+ 29389      00000000 
+ 29390 1fa1 34       		.uleb128 0x34
+ 29391 1fa2 960E0000 		.long	0xe96
+ 29392 1fa6 04       		.byte	0x4
+ 29393 1fa7 91       		.byte	0x91
+ 29394 1fa8 E0BB7F   		.sleb128 -8736
+ 29395 1fab 00       		.byte	0x0
+ 29396 1fac 00       		.byte	0x0
+ 29397 1fad 33       		.uleb128 0x33
+ 29398 1fae 00000000 		.quad	.LBB569
+ 29398      00000000 
+ 29399 1fb6 00000000 		.quad	.LBE569
+ 29399      00000000 
+ 29400 1fbe 34       		.uleb128 0x34
+ 29401 1fbf 440C0000 		.long	0xc44
+ 29402 1fc3 04       		.byte	0x4
+ 29403 1fc4 91       		.byte	0x91
+ 29404 1fc5 80BA7F   		.sleb128 -8960
+ 29405 1fc8 00       		.byte	0x0
+ 29406 1fc9 00       		.byte	0x0
+ 29407 1fca 00       		.byte	0x0
+ 29408 1fcb 31       		.uleb128 0x31
+ 29409 1fcc A30E0000 		.long	0xea3
+ 29410 1fd0 00000000 		.quad	.LBB570
+ 29410      00000000 
+ 29411 1fd8 00000000 		.quad	.LBE570
+ 29411      00000000 
+ 29412 1fe0 02       		.byte	0x2
+ 29413 1fe1 D206     		.value	0x6d2
+ 29414 1fe3 CF200000 		.long	0x20cf
+ 29415 1fe7 32       		.uleb128 0x32
+ 29416 1fe8 B50E0000 		.long	0xeb5
+ 29417 1fec 03       		.byte	0x3
+ 29418 1fed 91       		.byte	0x91
+ 29419 1fee 905B     		.sleb128 -4720
+ 29420 1ff0 33       		.uleb128 0x33
+ 29421 1ff1 00000000 		.quad	.LBB571
+ 29421      00000000 
+ 29422 1ff9 00000000 		.quad	.LBE571
+ 29422      00000000 
+ 29423 2001 34       		.uleb128 0x34
+ 29424 2002 C10E0000 		.long	0xec1
+ 29425 2006 04       		.byte	0x4
+ 29426 2007 76       		.byte	0x76
+ 29427 2008 E0B17F   		.sleb128 -10016
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 840
+
+
+ 29428 200b 31       		.uleb128 0x31
+ 29429 200c CE0E0000 		.long	0xece
+ 29430 2010 00000000 		.quad	.LBB572
+ 29430      00000000 
+ 29431 2018 00000000 		.quad	.LBE572
+ 29431      00000000 
+ 29432 2020 02       		.byte	0x2
+ 29433 2021 1F06     		.value	0x61f
+ 29434 2023 4D200000 		.long	0x204d
+ 29435 2027 32       		.uleb128 0x32
+ 29436 2028 E00E0000 		.long	0xee0
+ 29437 202c 03       		.byte	0x3
+ 29438 202d 91       		.byte	0x91
+ 29439 202e A05B     		.sleb128 -4704
+ 29440 2030 33       		.uleb128 0x33
+ 29441 2031 00000000 		.quad	.LBB573
+ 29441      00000000 
+ 29442 2039 00000000 		.quad	.LBE573
+ 29442      00000000 
+ 29443 2041 34       		.uleb128 0x34
+ 29444 2042 EC0E0000 		.long	0xeec
+ 29445 2046 04       		.byte	0x4
+ 29446 2047 91       		.byte	0x91
+ 29447 2048 F0BB7F   		.sleb128 -8720
+ 29448 204b 00       		.byte	0x0
+ 29449 204c 00       		.byte	0x0
+ 29450 204d 31       		.uleb128 0x31
+ 29451 204e CE0E0000 		.long	0xece
+ 29452 2052 00000000 		.quad	.LBB574
+ 29452      00000000 
+ 29453 205a 00000000 		.quad	.LBE574
+ 29453      00000000 
+ 29454 2062 02       		.byte	0x2
+ 29455 2063 2006     		.value	0x620
+ 29456 2065 8F200000 		.long	0x208f
+ 29457 2069 32       		.uleb128 0x32
+ 29458 206a E00E0000 		.long	0xee0
+ 29459 206e 03       		.byte	0x3
+ 29460 206f 91       		.byte	0x91
+ 29461 2070 B05B     		.sleb128 -4688
+ 29462 2072 33       		.uleb128 0x33
+ 29463 2073 00000000 		.quad	.LBB575
+ 29463      00000000 
+ 29464 207b 00000000 		.quad	.LBE575
+ 29464      00000000 
+ 29465 2083 34       		.uleb128 0x34
+ 29466 2084 EC0E0000 		.long	0xeec
+ 29467 2088 04       		.byte	0x4
+ 29468 2089 91       		.byte	0x91
+ 29469 208a 80BC7F   		.sleb128 -8704
+ 29470 208d 00       		.byte	0x0
+ 29471 208e 00       		.byte	0x0
+ 29472 208f 35       		.uleb128 0x35
+ 29473 2090 CE0E0000 		.long	0xece
+ 29474 2094 00000000 		.quad	.LBB576
+ 29474      00000000 
+ 29475 209c 00000000 		.quad	.LBE576
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 841
+
+
+ 29475      00000000 
+ 29476 20a4 02       		.byte	0x2
+ 29477 20a5 2106     		.value	0x621
+ 29478 20a7 32       		.uleb128 0x32
+ 29479 20a8 E00E0000 		.long	0xee0
+ 29480 20ac 03       		.byte	0x3
+ 29481 20ad 91       		.byte	0x91
+ 29482 20ae C05B     		.sleb128 -4672
+ 29483 20b0 33       		.uleb128 0x33
+ 29484 20b1 00000000 		.quad	.LBB577
+ 29484      00000000 
+ 29485 20b9 00000000 		.quad	.LBE577
+ 29485      00000000 
+ 29486 20c1 34       		.uleb128 0x34
+ 29487 20c2 EC0E0000 		.long	0xeec
+ 29488 20c6 04       		.byte	0x4
+ 29489 20c7 91       		.byte	0x91
+ 29490 20c8 90BC7F   		.sleb128 -8688
+ 29491 20cb 00       		.byte	0x0
+ 29492 20cc 00       		.byte	0x0
+ 29493 20cd 00       		.byte	0x0
+ 29494 20ce 00       		.byte	0x0
+ 29495 20cf 31       		.uleb128 0x31
+ 29496 20d0 D10B0000 		.long	0xbd1
+ 29497 20d4 00000000 		.quad	.LBB578
+ 29497      00000000 
+ 29498 20dc 00000000 		.quad	.LBE578
+ 29498      00000000 
+ 29499 20e4 02       		.byte	0x2
+ 29500 20e5 D306     		.value	0x6d3
+ 29501 20e7 86250000 		.long	0x2586
+ 29502 20eb 32       		.uleb128 0x32
+ 29503 20ec EF0B0000 		.long	0xbef
+ 29504 20f0 03       		.byte	0x3
+ 29505 20f1 91       		.byte	0x91
+ 29506 20f2 DC5B     		.sleb128 -4644
+ 29507 20f4 32       		.uleb128 0x32
+ 29508 20f5 E30B0000 		.long	0xbe3
+ 29509 20f9 03       		.byte	0x3
+ 29510 20fa 91       		.byte	0x91
+ 29511 20fb E05B     		.sleb128 -4640
+ 29512 20fd 33       		.uleb128 0x33
+ 29513 20fe 00000000 		.quad	.LBB579
+ 29513      00000000 
+ 29514 2106 00000000 		.quad	.LBE579
+ 29514      00000000 
+ 29515 210e 34       		.uleb128 0x34
+ 29516 210f FB0B0000 		.long	0xbfb
+ 29517 2113 04       		.byte	0x4
+ 29518 2114 76       		.byte	0x76
+ 29519 2115 80B27F   		.sleb128 -9984
+ 29520 2118 34       		.uleb128 0x34
+ 29521 2119 070C0000 		.long	0xc07
+ 29522 211d 04       		.byte	0x4
+ 29523 211e 76       		.byte	0x76
+ 29524 211f F0B17F   		.sleb128 -10000
+ 29525 2122 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 842
+
+
+ 29526 2123 500C0000 		.long	0xc50
+ 29527 2127 00000000 		.quad	.LBB580
+ 29527      00000000 
+ 29528 212f 00000000 		.quad	.LBE580
+ 29528      00000000 
+ 29529 2137 02       		.byte	0x2
+ 29530 2138 9106     		.value	0x691
+ 29531 213a 76210000 		.long	0x2176
+ 29532 213e 32       		.uleb128 0x32
+ 29533 213f 7A0C0000 		.long	0xc7a
+ 29534 2143 03       		.byte	0x3
+ 29535 2144 91       		.byte	0x91
+ 29536 2145 F85B     		.sleb128 -4616
+ 29537 2147 32       		.uleb128 0x32
+ 29538 2148 6E0C0000 		.long	0xc6e
+ 29539 214c 03       		.byte	0x3
+ 29540 214d 91       		.byte	0x91
+ 29541 214e FC5B     		.sleb128 -4612
+ 29542 2150 32       		.uleb128 0x32
+ 29543 2151 620C0000 		.long	0xc62
+ 29544 2155 03       		.byte	0x3
+ 29545 2156 91       		.byte	0x91
+ 29546 2157 805C     		.sleb128 -4608
+ 29547 2159 33       		.uleb128 0x33
+ 29548 215a 00000000 		.quad	.LBB581
+ 29548      00000000 
+ 29549 2162 00000000 		.quad	.LBE581
+ 29549      00000000 
+ 29550 216a 34       		.uleb128 0x34
+ 29551 216b 860C0000 		.long	0xc86
+ 29552 216f 04       		.byte	0x4
+ 29553 2170 91       		.byte	0x91
+ 29554 2171 E0BC7F   		.sleb128 -8608
+ 29555 2174 00       		.byte	0x0
+ 29556 2175 00       		.byte	0x0
+ 29557 2176 31       		.uleb128 0x31
+ 29558 2177 910C0000 		.long	0xc91
+ 29559 217b 00000000 		.quad	.LBB582
+ 29559      00000000 
+ 29560 2183 00000000 		.quad	.LBE582
+ 29560      00000000 
+ 29561 218b 02       		.byte	0x2
+ 29562 218c 9206     		.value	0x692
+ 29563 218e EC230000 		.long	0x23ec
+ 29564 2192 32       		.uleb128 0x32
+ 29565 2193 A30C0000 		.long	0xca3
+ 29566 2197 03       		.byte	0x3
+ 29567 2198 91       		.byte	0x91
+ 29568 2199 905C     		.sleb128 -4592
+ 29569 219b 35       		.uleb128 0x35
+ 29570 219c B00C0000 		.long	0xcb0
+ 29571 21a0 00000000 		.quad	.LBB584
+ 29571      00000000 
+ 29572 21a8 00000000 		.quad	.LBE584
+ 29572      00000000 
+ 29573 21b0 02       		.byte	0x2
+ 29574 21b1 7D03     		.value	0x37d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 843
+
+
+ 29575 21b3 32       		.uleb128 0x32
+ 29576 21b4 CE0C0000 		.long	0xcce
+ 29577 21b8 03       		.byte	0x3
+ 29578 21b9 91       		.byte	0x91
+ 29579 21ba A85C     		.sleb128 -4568
+ 29580 21bc 32       		.uleb128 0x32
+ 29581 21bd C20C0000 		.long	0xcc2
+ 29582 21c1 03       		.byte	0x3
+ 29583 21c2 91       		.byte	0x91
+ 29584 21c3 B05C     		.sleb128 -4560
+ 29585 21c5 33       		.uleb128 0x33
+ 29586 21c6 00000000 		.quad	.LBB585
+ 29586      00000000 
+ 29587 21ce 00000000 		.quad	.LBE585
+ 29587      00000000 
+ 29588 21d6 34       		.uleb128 0x34
+ 29589 21d7 DA0C0000 		.long	0xcda
+ 29590 21db 03       		.byte	0x3
+ 29591 21dc 91       		.byte	0x91
+ 29592 21dd 805D     		.sleb128 -4480
+ 29593 21df 34       		.uleb128 0x34
+ 29594 21e0 E50C0000 		.long	0xce5
+ 29595 21e4 03       		.byte	0x3
+ 29596 21e5 91       		.byte	0x91
+ 29597 21e6 F05C     		.sleb128 -4496
+ 29598 21e8 34       		.uleb128 0x34
+ 29599 21e9 F00C0000 		.long	0xcf0
+ 29600 21ed 03       		.byte	0x3
+ 29601 21ee 91       		.byte	0x91
+ 29602 21ef E05C     		.sleb128 -4512
+ 29603 21f1 34       		.uleb128 0x34
+ 29604 21f2 FC0C0000 		.long	0xcfc
+ 29605 21f6 03       		.byte	0x3
+ 29606 21f7 91       		.byte	0x91
+ 29607 21f8 D05C     		.sleb128 -4528
+ 29608 21fa 34       		.uleb128 0x34
+ 29609 21fb 080D0000 		.long	0xd08
+ 29610 21ff 03       		.byte	0x3
+ 29611 2200 91       		.byte	0x91
+ 29612 2201 CC5C     		.sleb128 -4532
+ 29613 2203 31       		.uleb128 0x31
+ 29614 2204 1F0D0000 		.long	0xd1f
+ 29615 2208 00000000 		.quad	.LBB586
+ 29615      00000000 
+ 29616 2210 00000000 		.quad	.LBE586
+ 29616      00000000 
+ 29617 2218 02       		.byte	0x2
+ 29618 2219 5603     		.value	0x356
+ 29619 221b 32220000 		.long	0x2232
+ 29620 221f 32       		.uleb128 0x32
+ 29621 2220 3A0D0000 		.long	0xd3a
+ 29622 2224 03       		.byte	0x3
+ 29623 2225 91       		.byte	0x91
+ 29624 2226 905D     		.sleb128 -4464
+ 29625 2228 32       		.uleb128 0x32
+ 29626 2229 300D0000 		.long	0xd30
+ 29627 222d 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 844
+
+
+ 29628 222e 91       		.byte	0x91
+ 29629 222f A05D     		.sleb128 -4448
+ 29630 2231 00       		.byte	0x0
+ 29631 2232 31       		.uleb128 0x31
+ 29632 2233 450D0000 		.long	0xd45
+ 29633 2237 00000000 		.quad	.LBB588
+ 29633      00000000 
+ 29634 223f 00000000 		.quad	.LBE588
+ 29634      00000000 
+ 29635 2247 02       		.byte	0x2
+ 29636 2248 5E03     		.value	0x35e
+ 29637 224a 61220000 		.long	0x2261
+ 29638 224e 32       		.uleb128 0x32
+ 29639 224f 620D0000 		.long	0xd62
+ 29640 2253 03       		.byte	0x3
+ 29641 2254 91       		.byte	0x91
+ 29642 2255 B05D     		.sleb128 -4432
+ 29643 2257 32       		.uleb128 0x32
+ 29644 2258 570D0000 		.long	0xd57
+ 29645 225c 03       		.byte	0x3
+ 29646 225d 91       		.byte	0x91
+ 29647 225e C05D     		.sleb128 -4416
+ 29648 2260 00       		.byte	0x0
+ 29649 2261 31       		.uleb128 0x31
+ 29650 2262 6E0D0000 		.long	0xd6e
+ 29651 2266 00000000 		.quad	.LBB590
+ 29651      00000000 
+ 29652 226e 00000000 		.quad	.LBE590
+ 29652      00000000 
+ 29653 2276 02       		.byte	0x2
+ 29654 2277 6403     		.value	0x364
+ 29655 2279 C9220000 		.long	0x22c9
+ 29656 227d 32       		.uleb128 0x32
+ 29657 227e 8C0D0000 		.long	0xd8c
+ 29658 2282 03       		.byte	0x3
+ 29659 2283 91       		.byte	0x91
+ 29660 2284 D05D     		.sleb128 -4400
+ 29661 2286 32       		.uleb128 0x32
+ 29662 2287 800D0000 		.long	0xd80
+ 29663 228b 03       		.byte	0x3
+ 29664 228c 91       		.byte	0x91
+ 29665 228d E05D     		.sleb128 -4384
+ 29666 228f 33       		.uleb128 0x33
+ 29667 2290 00000000 		.quad	.LBB591
+ 29667      00000000 
+ 29668 2298 00000000 		.quad	.LBE591
+ 29668      00000000 
+ 29669 22a0 34       		.uleb128 0x34
+ 29670 22a1 980D0000 		.long	0xd98
+ 29671 22a5 04       		.byte	0x4
+ 29672 22a6 91       		.byte	0x91
+ 29673 22a7 90BD7F   		.sleb128 -8560
+ 29674 22aa 34       		.uleb128 0x34
+ 29675 22ab A40D0000 		.long	0xda4
+ 29676 22af 04       		.byte	0x4
+ 29677 22b0 91       		.byte	0x91
+ 29678 22b1 80BD7F   		.sleb128 -8576
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 845
+
+
+ 29679 22b4 34       		.uleb128 0x34
+ 29680 22b5 AF0D0000 		.long	0xdaf
+ 29681 22b9 04       		.byte	0x4
+ 29682 22ba 91       		.byte	0x91
+ 29683 22bb F0BC7F   		.sleb128 -8592
+ 29684 22be 34       		.uleb128 0x34
+ 29685 22bf BB0D0000 		.long	0xdbb
+ 29686 22c3 03       		.byte	0x3
+ 29687 22c4 91       		.byte	0x91
+ 29688 22c5 FC5D     		.sleb128 -4356
+ 29689 22c7 00       		.byte	0x0
+ 29690 22c8 00       		.byte	0x0
+ 29691 22c9 31       		.uleb128 0x31
+ 29692 22ca C70D0000 		.long	0xdc7
+ 29693 22ce 00000000 		.quad	.LBB592
+ 29693      00000000 
+ 29694 22d6 00000000 		.quad	.LBE592
+ 29694      00000000 
+ 29695 22de 02       		.byte	0x2
+ 29696 22df 6603     		.value	0x366
+ 29697 22e1 F8220000 		.long	0x22f8
+ 29698 22e5 32       		.uleb128 0x32
+ 29699 22e6 E20D0000 		.long	0xde2
+ 29700 22ea 03       		.byte	0x3
+ 29701 22eb 91       		.byte	0x91
+ 29702 22ec 805E     		.sleb128 -4352
+ 29703 22ee 32       		.uleb128 0x32
+ 29704 22ef D80D0000 		.long	0xdd8
+ 29705 22f3 03       		.byte	0x3
+ 29706 22f4 91       		.byte	0x91
+ 29707 22f5 905E     		.sleb128 -4336
+ 29708 22f7 00       		.byte	0x0
+ 29709 22f8 31       		.uleb128 0x31
+ 29710 22f9 6E0D0000 		.long	0xd6e
+ 29711 22fd 00000000 		.quad	.LBB594
+ 29711      00000000 
+ 29712 2305 00000000 		.quad	.LBE594
+ 29712      00000000 
+ 29713 230d 02       		.byte	0x2
+ 29714 230e 6803     		.value	0x368
+ 29715 2310 60230000 		.long	0x2360
+ 29716 2314 32       		.uleb128 0x32
+ 29717 2315 8C0D0000 		.long	0xd8c
+ 29718 2319 03       		.byte	0x3
+ 29719 231a 91       		.byte	0x91
+ 29720 231b A05E     		.sleb128 -4320
+ 29721 231d 32       		.uleb128 0x32
+ 29722 231e 800D0000 		.long	0xd80
+ 29723 2322 03       		.byte	0x3
+ 29724 2323 91       		.byte	0x91
+ 29725 2324 B05E     		.sleb128 -4304
+ 29726 2326 33       		.uleb128 0x33
+ 29727 2327 00000000 		.quad	.LBB595
+ 29727      00000000 
+ 29728 232f 00000000 		.quad	.LBE595
+ 29728      00000000 
+ 29729 2337 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 846
+
+
+ 29730 2338 980D0000 		.long	0xd98
+ 29731 233c 04       		.byte	0x4
+ 29732 233d 91       		.byte	0x91
+ 29733 233e C0BD7F   		.sleb128 -8512
+ 29734 2341 34       		.uleb128 0x34
+ 29735 2342 A40D0000 		.long	0xda4
+ 29736 2346 04       		.byte	0x4
+ 29737 2347 91       		.byte	0x91
+ 29738 2348 B0BD7F   		.sleb128 -8528
+ 29739 234b 34       		.uleb128 0x34
+ 29740 234c AF0D0000 		.long	0xdaf
+ 29741 2350 04       		.byte	0x4
+ 29742 2351 91       		.byte	0x91
+ 29743 2352 A0BD7F   		.sleb128 -8544
+ 29744 2355 34       		.uleb128 0x34
+ 29745 2356 BB0D0000 		.long	0xdbb
+ 29746 235a 03       		.byte	0x3
+ 29747 235b 91       		.byte	0x91
+ 29748 235c CC5E     		.sleb128 -4276
+ 29749 235e 00       		.byte	0x0
+ 29750 235f 00       		.byte	0x0
+ 29751 2360 31       		.uleb128 0x31
+ 29752 2361 C70D0000 		.long	0xdc7
+ 29753 2365 00000000 		.quad	.LBB596
+ 29753      00000000 
+ 29754 236d 00000000 		.quad	.LBE596
+ 29754      00000000 
+ 29755 2375 02       		.byte	0x2
+ 29756 2376 6A03     		.value	0x36a
+ 29757 2378 8F230000 		.long	0x238f
+ 29758 237c 32       		.uleb128 0x32
+ 29759 237d E20D0000 		.long	0xde2
+ 29760 2381 03       		.byte	0x3
+ 29761 2382 91       		.byte	0x91
+ 29762 2383 D05E     		.sleb128 -4272
+ 29763 2385 32       		.uleb128 0x32
+ 29764 2386 D80D0000 		.long	0xdd8
+ 29765 238a 03       		.byte	0x3
+ 29766 238b 91       		.byte	0x91
+ 29767 238c E05E     		.sleb128 -4256
+ 29768 238e 00       		.byte	0x0
+ 29769 238f 31       		.uleb128 0x31
+ 29770 2390 ED0D0000 		.long	0xded
+ 29771 2394 00000000 		.quad	.LBB598
+ 29771      00000000 
+ 29772 239c 00000000 		.quad	.LBE598
+ 29772      00000000 
+ 29773 23a4 02       		.byte	0x2
+ 29774 23a5 6C03     		.value	0x36c
+ 29775 23a7 BE230000 		.long	0x23be
+ 29776 23ab 32       		.uleb128 0x32
+ 29777 23ac 0A0E0000 		.long	0xe0a
+ 29778 23b0 03       		.byte	0x3
+ 29779 23b1 91       		.byte	0x91
+ 29780 23b2 F05E     		.sleb128 -4240
+ 29781 23b4 32       		.uleb128 0x32
+ 29782 23b5 FF0D0000 		.long	0xdff
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 847
+
+
+ 29783 23b9 03       		.byte	0x3
+ 29784 23ba 91       		.byte	0x91
+ 29785 23bb 805F     		.sleb128 -4224
+ 29786 23bd 00       		.byte	0x0
+ 29787 23be 35       		.uleb128 0x35
+ 29788 23bf 1F0D0000 		.long	0xd1f
+ 29789 23c3 00000000 		.quad	.LBB600
+ 29789      00000000 
+ 29790 23cb 00000000 		.quad	.LBE600
+ 29790      00000000 
+ 29791 23d3 02       		.byte	0x2
+ 29792 23d4 6E03     		.value	0x36e
+ 29793 23d6 32       		.uleb128 0x32
+ 29794 23d7 3A0D0000 		.long	0xd3a
+ 29795 23db 03       		.byte	0x3
+ 29796 23dc 91       		.byte	0x91
+ 29797 23dd 905F     		.sleb128 -4208
+ 29798 23df 32       		.uleb128 0x32
+ 29799 23e0 300D0000 		.long	0xd30
+ 29800 23e4 03       		.byte	0x3
+ 29801 23e5 91       		.byte	0x91
+ 29802 23e6 A05F     		.sleb128 -4192
+ 29803 23e8 00       		.byte	0x0
+ 29804 23e9 00       		.byte	0x0
+ 29805 23ea 00       		.byte	0x0
+ 29806 23eb 00       		.byte	0x0
+ 29807 23ec 36       		.uleb128 0x36
+ 29808 23ed 00000000 		.quad	.LBB602
+ 29808      00000000 
+ 29809 23f5 00000000 		.quad	.LBE602
+ 29809      00000000 
+ 29810 23fd 0C240000 		.long	0x240c
+ 29811 2401 34       		.uleb128 0x34
+ 29812 2402 180C0000 		.long	0xc18
+ 29813 2406 04       		.byte	0x4
+ 29814 2407 91       		.byte	0x91
+ 29815 2408 D0BC7F   		.sleb128 -8624
+ 29816 240b 00       		.byte	0x0
+ 29817 240c 31       		.uleb128 0x31
+ 29818 240d 160E0000 		.long	0xe16
+ 29819 2411 00000000 		.quad	.LBB603
+ 29819      00000000 
+ 29820 2419 00000000 		.quad	.LBE603
+ 29820      00000000 
+ 29821 2421 02       		.byte	0x2
+ 29822 2422 9406     		.value	0x694
+ 29823 2424 B7240000 		.long	0x24b7
+ 29824 2428 32       		.uleb128 0x32
+ 29825 2429 280E0000 		.long	0xe28
+ 29826 242d 03       		.byte	0x3
+ 29827 242e 91       		.byte	0x91
+ 29828 242f B05F     		.sleb128 -4176
+ 29829 2431 33       		.uleb128 0x33
+ 29830 2432 00000000 		.quad	.LBB604
+ 29830      00000000 
+ 29831 243a 00000000 		.quad	.LBE604
+ 29831      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 848
+
+
+ 29832 2442 34       		.uleb128 0x34
+ 29833 2443 340E0000 		.long	0xe34
+ 29834 2447 09       		.byte	0x9
+ 29835 2448 03       		.byte	0x3
+ 29836 2449 00000000 		.quad	ShiftRowTable.6768
+ 29836      00000000 
+ 29837 2451 35       		.uleb128 0x35
+ 29838 2452 6E0D0000 		.long	0xd6e
+ 29839 2456 00000000 		.quad	.LBB605
+ 29839      00000000 
+ 29840 245e 00000000 		.quad	.LBE605
+ 29840      00000000 
+ 29841 2466 02       		.byte	0x2
+ 29842 2467 9B02     		.value	0x29b
+ 29843 2469 32       		.uleb128 0x32
+ 29844 246a 8C0D0000 		.long	0xd8c
+ 29845 246e 03       		.byte	0x3
+ 29846 246f 91       		.byte	0x91
+ 29847 2470 C05F     		.sleb128 -4160
+ 29848 2472 32       		.uleb128 0x32
+ 29849 2473 800D0000 		.long	0xd80
+ 29850 2477 03       		.byte	0x3
+ 29851 2478 91       		.byte	0x91
+ 29852 2479 D05F     		.sleb128 -4144
+ 29853 247b 33       		.uleb128 0x33
+ 29854 247c 00000000 		.quad	.LBB606
+ 29854      00000000 
+ 29855 2484 00000000 		.quad	.LBE606
+ 29855      00000000 
+ 29856 248c 34       		.uleb128 0x34
+ 29857 248d 980D0000 		.long	0xd98
+ 29858 2491 04       		.byte	0x4
+ 29859 2492 91       		.byte	0x91
+ 29860 2493 F0BD7F   		.sleb128 -8464
+ 29861 2496 34       		.uleb128 0x34
+ 29862 2497 A40D0000 		.long	0xda4
+ 29863 249b 04       		.byte	0x4
+ 29864 249c 91       		.byte	0x91
+ 29865 249d E0BD7F   		.sleb128 -8480
+ 29866 24a0 34       		.uleb128 0x34
+ 29867 24a1 AF0D0000 		.long	0xdaf
+ 29868 24a5 04       		.byte	0x4
+ 29869 24a6 91       		.byte	0x91
+ 29870 24a7 D0BD7F   		.sleb128 -8496
+ 29871 24aa 34       		.uleb128 0x34
+ 29872 24ab BB0D0000 		.long	0xdbb
+ 29873 24af 03       		.byte	0x3
+ 29874 24b0 91       		.byte	0x91
+ 29875 24b1 EC5F     		.sleb128 -4116
+ 29876 24b3 00       		.byte	0x0
+ 29877 24b4 00       		.byte	0x0
+ 29878 24b5 00       		.byte	0x0
+ 29879 24b6 00       		.byte	0x0
+ 29880 24b7 36       		.uleb128 0x36
+ 29881 24b8 00000000 		.quad	.LBB607
+ 29881      00000000 
+ 29882 24c0 00000000 		.quad	.LBE607
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 849
+
+
+ 29882      00000000 
+ 29883 24c8 D7240000 		.long	0x24d7
+ 29884 24cc 34       		.uleb128 0x34
+ 29885 24cd 280C0000 		.long	0xc28
+ 29886 24d1 04       		.byte	0x4
+ 29887 24d2 91       		.byte	0x91
+ 29888 24d3 C0BC7F   		.sleb128 -8640
+ 29889 24d6 00       		.byte	0x0
+ 29890 24d7 31       		.uleb128 0x31
+ 29891 24d8 520E0000 		.long	0xe52
+ 29892 24dc 00000000 		.quad	.LBB608
+ 29892      00000000 
+ 29893 24e4 00000000 		.quad	.LBE608
+ 29893      00000000 
+ 29894 24ec 02       		.byte	0x2
+ 29895 24ed 9606     		.value	0x696
+ 29896 24ef 06250000 		.long	0x2506
+ 29897 24f3 32       		.uleb128 0x32
+ 29898 24f4 6D0E0000 		.long	0xe6d
+ 29899 24f8 03       		.byte	0x3
+ 29900 24f9 91       		.byte	0x91
+ 29901 24fa F05F     		.sleb128 -4112
+ 29902 24fc 32       		.uleb128 0x32
+ 29903 24fd 630E0000 		.long	0xe63
+ 29904 2501 03       		.byte	0x3
+ 29905 2502 91       		.byte	0x91
+ 29906 2503 8060     		.sleb128 -4096
+ 29907 2505 00       		.byte	0x0
+ 29908 2506 36       		.uleb128 0x36
+ 29909 2507 00000000 		.quad	.LBB610
+ 29909      00000000 
+ 29910 250f 00000000 		.quad	.LBE610
+ 29910      00000000 
+ 29911 2517 26250000 		.long	0x2526
+ 29912 251b 34       		.uleb128 0x34
+ 29913 251c 380C0000 		.long	0xc38
+ 29914 2520 04       		.byte	0x4
+ 29915 2521 91       		.byte	0x91
+ 29916 2522 B0BC7F   		.sleb128 -8656
+ 29917 2525 00       		.byte	0x0
+ 29918 2526 31       		.uleb128 0x31
+ 29919 2527 780E0000 		.long	0xe78
+ 29920 252b 00000000 		.quad	.LBB611
+ 29920      00000000 
+ 29921 2533 00000000 		.quad	.LBE611
+ 29921      00000000 
+ 29922 253b 02       		.byte	0x2
+ 29923 253c 9806     		.value	0x698
+ 29924 253e 68250000 		.long	0x2568
+ 29925 2542 32       		.uleb128 0x32
+ 29926 2543 8A0E0000 		.long	0xe8a
+ 29927 2547 03       		.byte	0x3
+ 29928 2548 91       		.byte	0x91
+ 29929 2549 9060     		.sleb128 -4080
+ 29930 254b 33       		.uleb128 0x33
+ 29931 254c 00000000 		.quad	.LBB612
+ 29931      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 850
+
+
+ 29932 2554 00000000 		.quad	.LBE612
+ 29932      00000000 
+ 29933 255c 34       		.uleb128 0x34
+ 29934 255d 960E0000 		.long	0xe96
+ 29935 2561 04       		.byte	0x4
+ 29936 2562 91       		.byte	0x91
+ 29937 2563 80BE7F   		.sleb128 -8448
+ 29938 2566 00       		.byte	0x0
+ 29939 2567 00       		.byte	0x0
+ 29940 2568 33       		.uleb128 0x33
+ 29941 2569 00000000 		.quad	.LBB613
+ 29941      00000000 
+ 29942 2571 00000000 		.quad	.LBE613
+ 29942      00000000 
+ 29943 2579 34       		.uleb128 0x34
+ 29944 257a 440C0000 		.long	0xc44
+ 29945 257e 04       		.byte	0x4
+ 29946 257f 91       		.byte	0x91
+ 29947 2580 A0BC7F   		.sleb128 -8672
+ 29948 2583 00       		.byte	0x0
+ 29949 2584 00       		.byte	0x0
+ 29950 2585 00       		.byte	0x0
+ 29951 2586 31       		.uleb128 0x31
+ 29952 2587 A30E0000 		.long	0xea3
+ 29953 258b 00000000 		.quad	.LBB614
+ 29953      00000000 
+ 29954 2593 00000000 		.quad	.LBE614
+ 29954      00000000 
+ 29955 259b 02       		.byte	0x2
+ 29956 259c D306     		.value	0x6d3
+ 29957 259e 8A260000 		.long	0x268a
+ 29958 25a2 32       		.uleb128 0x32
+ 29959 25a3 B50E0000 		.long	0xeb5
+ 29960 25a7 03       		.byte	0x3
+ 29961 25a8 91       		.byte	0x91
+ 29962 25a9 A060     		.sleb128 -4064
+ 29963 25ab 33       		.uleb128 0x33
+ 29964 25ac 00000000 		.quad	.LBB615
+ 29964      00000000 
+ 29965 25b4 00000000 		.quad	.LBE615
+ 29965      00000000 
+ 29966 25bc 34       		.uleb128 0x34
+ 29967 25bd C10E0000 		.long	0xec1
+ 29968 25c1 04       		.byte	0x4
+ 29969 25c2 76       		.byte	0x76
+ 29970 25c3 A0B27F   		.sleb128 -9952
+ 29971 25c6 31       		.uleb128 0x31
+ 29972 25c7 CE0E0000 		.long	0xece
+ 29973 25cb 00000000 		.quad	.LBB616
+ 29973      00000000 
+ 29974 25d3 00000000 		.quad	.LBE616
+ 29974      00000000 
+ 29975 25db 02       		.byte	0x2
+ 29976 25dc 1F06     		.value	0x61f
+ 29977 25de 08260000 		.long	0x2608
+ 29978 25e2 32       		.uleb128 0x32
+ 29979 25e3 E00E0000 		.long	0xee0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 851
+
+
+ 29980 25e7 03       		.byte	0x3
+ 29981 25e8 91       		.byte	0x91
+ 29982 25e9 B060     		.sleb128 -4048
+ 29983 25eb 33       		.uleb128 0x33
+ 29984 25ec 00000000 		.quad	.LBB617
+ 29984      00000000 
+ 29985 25f4 00000000 		.quad	.LBE617
+ 29985      00000000 
+ 29986 25fc 34       		.uleb128 0x34
+ 29987 25fd EC0E0000 		.long	0xeec
+ 29988 2601 04       		.byte	0x4
+ 29989 2602 91       		.byte	0x91
+ 29990 2603 90BE7F   		.sleb128 -8432
+ 29991 2606 00       		.byte	0x0
+ 29992 2607 00       		.byte	0x0
+ 29993 2608 31       		.uleb128 0x31
+ 29994 2609 CE0E0000 		.long	0xece
+ 29995 260d 00000000 		.quad	.LBB618
+ 29995      00000000 
+ 29996 2615 00000000 		.quad	.LBE618
+ 29996      00000000 
+ 29997 261d 02       		.byte	0x2
+ 29998 261e 2006     		.value	0x620
+ 29999 2620 4A260000 		.long	0x264a
+ 30000 2624 32       		.uleb128 0x32
+ 30001 2625 E00E0000 		.long	0xee0
+ 30002 2629 03       		.byte	0x3
+ 30003 262a 91       		.byte	0x91
+ 30004 262b C060     		.sleb128 -4032
+ 30005 262d 33       		.uleb128 0x33
+ 30006 262e 00000000 		.quad	.LBB619
+ 30006      00000000 
+ 30007 2636 00000000 		.quad	.LBE619
+ 30007      00000000 
+ 30008 263e 34       		.uleb128 0x34
+ 30009 263f EC0E0000 		.long	0xeec
+ 30010 2643 04       		.byte	0x4
+ 30011 2644 91       		.byte	0x91
+ 30012 2645 A0BE7F   		.sleb128 -8416
+ 30013 2648 00       		.byte	0x0
+ 30014 2649 00       		.byte	0x0
+ 30015 264a 35       		.uleb128 0x35
+ 30016 264b CE0E0000 		.long	0xece
+ 30017 264f 00000000 		.quad	.LBB620
+ 30017      00000000 
+ 30018 2657 00000000 		.quad	.LBE620
+ 30018      00000000 
+ 30019 265f 02       		.byte	0x2
+ 30020 2660 2106     		.value	0x621
+ 30021 2662 32       		.uleb128 0x32
+ 30022 2663 E00E0000 		.long	0xee0
+ 30023 2667 03       		.byte	0x3
+ 30024 2668 91       		.byte	0x91
+ 30025 2669 D060     		.sleb128 -4016
+ 30026 266b 33       		.uleb128 0x33
+ 30027 266c 00000000 		.quad	.LBB621
+ 30027      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 852
+
+
+ 30028 2674 00000000 		.quad	.LBE621
+ 30028      00000000 
+ 30029 267c 34       		.uleb128 0x34
+ 30030 267d EC0E0000 		.long	0xeec
+ 30031 2681 04       		.byte	0x4
+ 30032 2682 91       		.byte	0x91
+ 30033 2683 B0BE7F   		.sleb128 -8400
+ 30034 2686 00       		.byte	0x0
+ 30035 2687 00       		.byte	0x0
+ 30036 2688 00       		.byte	0x0
+ 30037 2689 00       		.byte	0x0
+ 30038 268a 31       		.uleb128 0x31
+ 30039 268b D10B0000 		.long	0xbd1
+ 30040 268f 00000000 		.quad	.LBB622
+ 30040      00000000 
+ 30041 2697 00000000 		.quad	.LBE622
+ 30041      00000000 
+ 30042 269f 02       		.byte	0x2
+ 30043 26a0 D406     		.value	0x6d4
+ 30044 26a2 3E2B0000 		.long	0x2b3e
+ 30045 26a6 32       		.uleb128 0x32
+ 30046 26a7 EF0B0000 		.long	0xbef
+ 30047 26ab 03       		.byte	0x3
+ 30048 26ac 91       		.byte	0x91
+ 30049 26ad EC60     		.sleb128 -3988
+ 30050 26af 32       		.uleb128 0x32
+ 30051 26b0 E30B0000 		.long	0xbe3
+ 30052 26b4 03       		.byte	0x3
+ 30053 26b5 91       		.byte	0x91
+ 30054 26b6 F060     		.sleb128 -3984
+ 30055 26b8 33       		.uleb128 0x33
+ 30056 26b9 00000000 		.quad	.LBB623
+ 30056      00000000 
+ 30057 26c1 00000000 		.quad	.LBE623
+ 30057      00000000 
+ 30058 26c9 34       		.uleb128 0x34
+ 30059 26ca FB0B0000 		.long	0xbfb
+ 30060 26ce 04       		.byte	0x4
+ 30061 26cf 76       		.byte	0x76
+ 30062 26d0 C0B27F   		.sleb128 -9920
+ 30063 26d3 34       		.uleb128 0x34
+ 30064 26d4 070C0000 		.long	0xc07
+ 30065 26d8 04       		.byte	0x4
+ 30066 26d9 76       		.byte	0x76
+ 30067 26da B0B27F   		.sleb128 -9936
+ 30068 26dd 31       		.uleb128 0x31
+ 30069 26de 500C0000 		.long	0xc50
+ 30070 26e2 00000000 		.quad	.LBB624
+ 30070      00000000 
+ 30071 26ea 00000000 		.quad	.LBE624
+ 30071      00000000 
+ 30072 26f2 02       		.byte	0x2
+ 30073 26f3 9106     		.value	0x691
+ 30074 26f5 31270000 		.long	0x2731
+ 30075 26f9 32       		.uleb128 0x32
+ 30076 26fa 7A0C0000 		.long	0xc7a
+ 30077 26fe 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 853
+
+
+ 30078 26ff 91       		.byte	0x91
+ 30079 2700 8861     		.sleb128 -3960
+ 30080 2702 32       		.uleb128 0x32
+ 30081 2703 6E0C0000 		.long	0xc6e
+ 30082 2707 03       		.byte	0x3
+ 30083 2708 91       		.byte	0x91
+ 30084 2709 8C61     		.sleb128 -3956
+ 30085 270b 32       		.uleb128 0x32
+ 30086 270c 620C0000 		.long	0xc62
+ 30087 2710 03       		.byte	0x3
+ 30088 2711 91       		.byte	0x91
+ 30089 2712 9061     		.sleb128 -3952
+ 30090 2714 33       		.uleb128 0x33
+ 30091 2715 00000000 		.quad	.LBB625
+ 30091      00000000 
+ 30092 271d 00000000 		.quad	.LBE625
+ 30092      00000000 
+ 30093 2725 34       		.uleb128 0x34
+ 30094 2726 860C0000 		.long	0xc86
+ 30095 272a 04       		.byte	0x4
+ 30096 272b 91       		.byte	0x91
+ 30097 272c 80BF7F   		.sleb128 -8320
+ 30098 272f 00       		.byte	0x0
+ 30099 2730 00       		.byte	0x0
+ 30100 2731 31       		.uleb128 0x31
+ 30101 2732 910C0000 		.long	0xc91
+ 30102 2736 00000000 		.quad	.LBB626
+ 30102      00000000 
+ 30103 273e 00000000 		.quad	.LBE626
+ 30103      00000000 
+ 30104 2746 02       		.byte	0x2
+ 30105 2747 9206     		.value	0x692
+ 30106 2749 A7290000 		.long	0x29a7
+ 30107 274d 32       		.uleb128 0x32
+ 30108 274e A30C0000 		.long	0xca3
+ 30109 2752 03       		.byte	0x3
+ 30110 2753 91       		.byte	0x91
+ 30111 2754 A061     		.sleb128 -3936
+ 30112 2756 35       		.uleb128 0x35
+ 30113 2757 B00C0000 		.long	0xcb0
+ 30114 275b 00000000 		.quad	.LBB628
+ 30114      00000000 
+ 30115 2763 00000000 		.quad	.LBE628
+ 30115      00000000 
+ 30116 276b 02       		.byte	0x2
+ 30117 276c 7D03     		.value	0x37d
+ 30118 276e 32       		.uleb128 0x32
+ 30119 276f CE0C0000 		.long	0xcce
+ 30120 2773 03       		.byte	0x3
+ 30121 2774 91       		.byte	0x91
+ 30122 2775 B861     		.sleb128 -3912
+ 30123 2777 32       		.uleb128 0x32
+ 30124 2778 C20C0000 		.long	0xcc2
+ 30125 277c 03       		.byte	0x3
+ 30126 277d 91       		.byte	0x91
+ 30127 277e C061     		.sleb128 -3904
+ 30128 2780 33       		.uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 854
+
+
+ 30129 2781 00000000 		.quad	.LBB629
+ 30129      00000000 
+ 30130 2789 00000000 		.quad	.LBE629
+ 30130      00000000 
+ 30131 2791 34       		.uleb128 0x34
+ 30132 2792 DA0C0000 		.long	0xcda
+ 30133 2796 03       		.byte	0x3
+ 30134 2797 91       		.byte	0x91
+ 30135 2798 9062     		.sleb128 -3824
+ 30136 279a 34       		.uleb128 0x34
+ 30137 279b E50C0000 		.long	0xce5
+ 30138 279f 03       		.byte	0x3
+ 30139 27a0 91       		.byte	0x91
+ 30140 27a1 8062     		.sleb128 -3840
+ 30141 27a3 34       		.uleb128 0x34
+ 30142 27a4 F00C0000 		.long	0xcf0
+ 30143 27a8 03       		.byte	0x3
+ 30144 27a9 91       		.byte	0x91
+ 30145 27aa F061     		.sleb128 -3856
+ 30146 27ac 34       		.uleb128 0x34
+ 30147 27ad FC0C0000 		.long	0xcfc
+ 30148 27b1 03       		.byte	0x3
+ 30149 27b2 91       		.byte	0x91
+ 30150 27b3 E061     		.sleb128 -3872
+ 30151 27b5 34       		.uleb128 0x34
+ 30152 27b6 080D0000 		.long	0xd08
+ 30153 27ba 03       		.byte	0x3
+ 30154 27bb 91       		.byte	0x91
+ 30155 27bc DC61     		.sleb128 -3876
+ 30156 27be 31       		.uleb128 0x31
+ 30157 27bf 1F0D0000 		.long	0xd1f
+ 30158 27c3 00000000 		.quad	.LBB630
+ 30158      00000000 
+ 30159 27cb 00000000 		.quad	.LBE630
+ 30159      00000000 
+ 30160 27d3 02       		.byte	0x2
+ 30161 27d4 5603     		.value	0x356
+ 30162 27d6 ED270000 		.long	0x27ed
+ 30163 27da 32       		.uleb128 0x32
+ 30164 27db 3A0D0000 		.long	0xd3a
+ 30165 27df 03       		.byte	0x3
+ 30166 27e0 91       		.byte	0x91
+ 30167 27e1 A062     		.sleb128 -3808
+ 30168 27e3 32       		.uleb128 0x32
+ 30169 27e4 300D0000 		.long	0xd30
+ 30170 27e8 03       		.byte	0x3
+ 30171 27e9 91       		.byte	0x91
+ 30172 27ea B062     		.sleb128 -3792
+ 30173 27ec 00       		.byte	0x0
+ 30174 27ed 31       		.uleb128 0x31
+ 30175 27ee 450D0000 		.long	0xd45
+ 30176 27f2 00000000 		.quad	.LBB632
+ 30176      00000000 
+ 30177 27fa 00000000 		.quad	.LBE632
+ 30177      00000000 
+ 30178 2802 02       		.byte	0x2
+ 30179 2803 5E03     		.value	0x35e
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 855
+
+
+ 30180 2805 1C280000 		.long	0x281c
+ 30181 2809 32       		.uleb128 0x32
+ 30182 280a 620D0000 		.long	0xd62
+ 30183 280e 03       		.byte	0x3
+ 30184 280f 91       		.byte	0x91
+ 30185 2810 C062     		.sleb128 -3776
+ 30186 2812 32       		.uleb128 0x32
+ 30187 2813 570D0000 		.long	0xd57
+ 30188 2817 03       		.byte	0x3
+ 30189 2818 91       		.byte	0x91
+ 30190 2819 D062     		.sleb128 -3760
+ 30191 281b 00       		.byte	0x0
+ 30192 281c 31       		.uleb128 0x31
+ 30193 281d 6E0D0000 		.long	0xd6e
+ 30194 2821 00000000 		.quad	.LBB634
+ 30194      00000000 
+ 30195 2829 00000000 		.quad	.LBE634
+ 30195      00000000 
+ 30196 2831 02       		.byte	0x2
+ 30197 2832 6403     		.value	0x364
+ 30198 2834 84280000 		.long	0x2884
+ 30199 2838 32       		.uleb128 0x32
+ 30200 2839 8C0D0000 		.long	0xd8c
+ 30201 283d 03       		.byte	0x3
+ 30202 283e 91       		.byte	0x91
+ 30203 283f E062     		.sleb128 -3744
+ 30204 2841 32       		.uleb128 0x32
+ 30205 2842 800D0000 		.long	0xd80
+ 30206 2846 03       		.byte	0x3
+ 30207 2847 91       		.byte	0x91
+ 30208 2848 F062     		.sleb128 -3728
+ 30209 284a 33       		.uleb128 0x33
+ 30210 284b 00000000 		.quad	.LBB635
+ 30210      00000000 
+ 30211 2853 00000000 		.quad	.LBE635
+ 30211      00000000 
+ 30212 285b 34       		.uleb128 0x34
+ 30213 285c 980D0000 		.long	0xd98
+ 30214 2860 04       		.byte	0x4
+ 30215 2861 91       		.byte	0x91
+ 30216 2862 B0BF7F   		.sleb128 -8272
+ 30217 2865 34       		.uleb128 0x34
+ 30218 2866 A40D0000 		.long	0xda4
+ 30219 286a 04       		.byte	0x4
+ 30220 286b 91       		.byte	0x91
+ 30221 286c A0BF7F   		.sleb128 -8288
+ 30222 286f 34       		.uleb128 0x34
+ 30223 2870 AF0D0000 		.long	0xdaf
+ 30224 2874 04       		.byte	0x4
+ 30225 2875 91       		.byte	0x91
+ 30226 2876 90BF7F   		.sleb128 -8304
+ 30227 2879 34       		.uleb128 0x34
+ 30228 287a BB0D0000 		.long	0xdbb
+ 30229 287e 03       		.byte	0x3
+ 30230 287f 91       		.byte	0x91
+ 30231 2880 8C63     		.sleb128 -3700
+ 30232 2882 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 856
+
+
+ 30233 2883 00       		.byte	0x0
+ 30234 2884 31       		.uleb128 0x31
+ 30235 2885 C70D0000 		.long	0xdc7
+ 30236 2889 00000000 		.quad	.LBB636
+ 30236      00000000 
+ 30237 2891 00000000 		.quad	.LBE636
+ 30237      00000000 
+ 30238 2899 02       		.byte	0x2
+ 30239 289a 6603     		.value	0x366
+ 30240 289c B3280000 		.long	0x28b3
+ 30241 28a0 32       		.uleb128 0x32
+ 30242 28a1 E20D0000 		.long	0xde2
+ 30243 28a5 03       		.byte	0x3
+ 30244 28a6 91       		.byte	0x91
+ 30245 28a7 9063     		.sleb128 -3696
+ 30246 28a9 32       		.uleb128 0x32
+ 30247 28aa D80D0000 		.long	0xdd8
+ 30248 28ae 03       		.byte	0x3
+ 30249 28af 91       		.byte	0x91
+ 30250 28b0 A063     		.sleb128 -3680
+ 30251 28b2 00       		.byte	0x0
+ 30252 28b3 31       		.uleb128 0x31
+ 30253 28b4 6E0D0000 		.long	0xd6e
+ 30254 28b8 00000000 		.quad	.LBB638
+ 30254      00000000 
+ 30255 28c0 00000000 		.quad	.LBE638
+ 30255      00000000 
+ 30256 28c8 02       		.byte	0x2
+ 30257 28c9 6803     		.value	0x368
+ 30258 28cb 1B290000 		.long	0x291b
+ 30259 28cf 32       		.uleb128 0x32
+ 30260 28d0 8C0D0000 		.long	0xd8c
+ 30261 28d4 03       		.byte	0x3
+ 30262 28d5 91       		.byte	0x91
+ 30263 28d6 B063     		.sleb128 -3664
+ 30264 28d8 32       		.uleb128 0x32
+ 30265 28d9 800D0000 		.long	0xd80
+ 30266 28dd 03       		.byte	0x3
+ 30267 28de 91       		.byte	0x91
+ 30268 28df C063     		.sleb128 -3648
+ 30269 28e1 33       		.uleb128 0x33
+ 30270 28e2 00000000 		.quad	.LBB639
+ 30270      00000000 
+ 30271 28ea 00000000 		.quad	.LBE639
+ 30271      00000000 
+ 30272 28f2 34       		.uleb128 0x34
+ 30273 28f3 980D0000 		.long	0xd98
+ 30274 28f7 04       		.byte	0x4
+ 30275 28f8 91       		.byte	0x91
+ 30276 28f9 E0BF7F   		.sleb128 -8224
+ 30277 28fc 34       		.uleb128 0x34
+ 30278 28fd A40D0000 		.long	0xda4
+ 30279 2901 04       		.byte	0x4
+ 30280 2902 91       		.byte	0x91
+ 30281 2903 D0BF7F   		.sleb128 -8240
+ 30282 2906 34       		.uleb128 0x34
+ 30283 2907 AF0D0000 		.long	0xdaf
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 857
+
+
+ 30284 290b 04       		.byte	0x4
+ 30285 290c 91       		.byte	0x91
+ 30286 290d C0BF7F   		.sleb128 -8256
+ 30287 2910 34       		.uleb128 0x34
+ 30288 2911 BB0D0000 		.long	0xdbb
+ 30289 2915 03       		.byte	0x3
+ 30290 2916 91       		.byte	0x91
+ 30291 2917 DC63     		.sleb128 -3620
+ 30292 2919 00       		.byte	0x0
+ 30293 291a 00       		.byte	0x0
+ 30294 291b 31       		.uleb128 0x31
+ 30295 291c C70D0000 		.long	0xdc7
+ 30296 2920 00000000 		.quad	.LBB640
+ 30296      00000000 
+ 30297 2928 00000000 		.quad	.LBE640
+ 30297      00000000 
+ 30298 2930 02       		.byte	0x2
+ 30299 2931 6A03     		.value	0x36a
+ 30300 2933 4A290000 		.long	0x294a
+ 30301 2937 32       		.uleb128 0x32
+ 30302 2938 E20D0000 		.long	0xde2
+ 30303 293c 03       		.byte	0x3
+ 30304 293d 91       		.byte	0x91
+ 30305 293e E063     		.sleb128 -3616
+ 30306 2940 32       		.uleb128 0x32
+ 30307 2941 D80D0000 		.long	0xdd8
+ 30308 2945 03       		.byte	0x3
+ 30309 2946 91       		.byte	0x91
+ 30310 2947 F063     		.sleb128 -3600
+ 30311 2949 00       		.byte	0x0
+ 30312 294a 31       		.uleb128 0x31
+ 30313 294b ED0D0000 		.long	0xded
+ 30314 294f 00000000 		.quad	.LBB642
+ 30314      00000000 
+ 30315 2957 00000000 		.quad	.LBE642
+ 30315      00000000 
+ 30316 295f 02       		.byte	0x2
+ 30317 2960 6C03     		.value	0x36c
+ 30318 2962 79290000 		.long	0x2979
+ 30319 2966 32       		.uleb128 0x32
+ 30320 2967 0A0E0000 		.long	0xe0a
+ 30321 296b 03       		.byte	0x3
+ 30322 296c 91       		.byte	0x91
+ 30323 296d 8064     		.sleb128 -3584
+ 30324 296f 32       		.uleb128 0x32
+ 30325 2970 FF0D0000 		.long	0xdff
+ 30326 2974 03       		.byte	0x3
+ 30327 2975 91       		.byte	0x91
+ 30328 2976 9064     		.sleb128 -3568
+ 30329 2978 00       		.byte	0x0
+ 30330 2979 35       		.uleb128 0x35
+ 30331 297a 1F0D0000 		.long	0xd1f
+ 30332 297e 00000000 		.quad	.LBB644
+ 30332      00000000 
+ 30333 2986 00000000 		.quad	.LBE644
+ 30333      00000000 
+ 30334 298e 02       		.byte	0x2
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 858
+
+
+ 30335 298f 6E03     		.value	0x36e
+ 30336 2991 32       		.uleb128 0x32
+ 30337 2992 3A0D0000 		.long	0xd3a
+ 30338 2996 03       		.byte	0x3
+ 30339 2997 91       		.byte	0x91
+ 30340 2998 A064     		.sleb128 -3552
+ 30341 299a 32       		.uleb128 0x32
+ 30342 299b 300D0000 		.long	0xd30
+ 30343 299f 03       		.byte	0x3
+ 30344 29a0 91       		.byte	0x91
+ 30345 29a1 B064     		.sleb128 -3536
+ 30346 29a3 00       		.byte	0x0
+ 30347 29a4 00       		.byte	0x0
+ 30348 29a5 00       		.byte	0x0
+ 30349 29a6 00       		.byte	0x0
+ 30350 29a7 36       		.uleb128 0x36
+ 30351 29a8 00000000 		.quad	.LBB646
+ 30351      00000000 
+ 30352 29b0 00000000 		.quad	.LBE646
+ 30352      00000000 
+ 30353 29b8 C7290000 		.long	0x29c7
+ 30354 29bc 34       		.uleb128 0x34
+ 30355 29bd 180C0000 		.long	0xc18
+ 30356 29c1 04       		.byte	0x4
+ 30357 29c2 91       		.byte	0x91
+ 30358 29c3 F0BE7F   		.sleb128 -8336
+ 30359 29c6 00       		.byte	0x0
+ 30360 29c7 31       		.uleb128 0x31
+ 30361 29c8 160E0000 		.long	0xe16
+ 30362 29cc 00000000 		.quad	.LBB647
+ 30362      00000000 
+ 30363 29d4 00000000 		.quad	.LBE647
+ 30363      00000000 
+ 30364 29dc 02       		.byte	0x2
+ 30365 29dd 9406     		.value	0x694
+ 30366 29df 702A0000 		.long	0x2a70
+ 30367 29e3 32       		.uleb128 0x32
+ 30368 29e4 280E0000 		.long	0xe28
+ 30369 29e8 03       		.byte	0x3
+ 30370 29e9 91       		.byte	0x91
+ 30371 29ea C064     		.sleb128 -3520
+ 30372 29ec 33       		.uleb128 0x33
+ 30373 29ed 00000000 		.quad	.LBB648
+ 30373      00000000 
+ 30374 29f5 00000000 		.quad	.LBE648
+ 30374      00000000 
+ 30375 29fd 34       		.uleb128 0x34
+ 30376 29fe 340E0000 		.long	0xe34
+ 30377 2a02 09       		.byte	0x9
+ 30378 2a03 03       		.byte	0x3
+ 30379 2a04 00000000 		.quad	ShiftRowTable.6768
+ 30379      00000000 
+ 30380 2a0c 35       		.uleb128 0x35
+ 30381 2a0d 6E0D0000 		.long	0xd6e
+ 30382 2a11 00000000 		.quad	.LBB649
+ 30382      00000000 
+ 30383 2a19 00000000 		.quad	.LBE649
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 859
+
+
+ 30383      00000000 
+ 30384 2a21 02       		.byte	0x2
+ 30385 2a22 9B02     		.value	0x29b
+ 30386 2a24 32       		.uleb128 0x32
+ 30387 2a25 8C0D0000 		.long	0xd8c
+ 30388 2a29 03       		.byte	0x3
+ 30389 2a2a 91       		.byte	0x91
+ 30390 2a2b D064     		.sleb128 -3504
+ 30391 2a2d 32       		.uleb128 0x32
+ 30392 2a2e 800D0000 		.long	0xd80
+ 30393 2a32 03       		.byte	0x3
+ 30394 2a33 91       		.byte	0x91
+ 30395 2a34 E064     		.sleb128 -3488
+ 30396 2a36 33       		.uleb128 0x33
+ 30397 2a37 00000000 		.quad	.LBB650
+ 30397      00000000 
+ 30398 2a3f 00000000 		.quad	.LBE650
+ 30398      00000000 
+ 30399 2a47 34       		.uleb128 0x34
+ 30400 2a48 980D0000 		.long	0xd98
+ 30401 2a4c 03       		.byte	0x3
+ 30402 2a4d 91       		.byte	0x91
+ 30403 2a4e 9040     		.sleb128 -8176
+ 30404 2a50 34       		.uleb128 0x34
+ 30405 2a51 A40D0000 		.long	0xda4
+ 30406 2a55 03       		.byte	0x3
+ 30407 2a56 91       		.byte	0x91
+ 30408 2a57 8040     		.sleb128 -8192
+ 30409 2a59 34       		.uleb128 0x34
+ 30410 2a5a AF0D0000 		.long	0xdaf
+ 30411 2a5e 04       		.byte	0x4
+ 30412 2a5f 91       		.byte	0x91
+ 30413 2a60 F0BF7F   		.sleb128 -8208
+ 30414 2a63 34       		.uleb128 0x34
+ 30415 2a64 BB0D0000 		.long	0xdbb
+ 30416 2a68 03       		.byte	0x3
+ 30417 2a69 91       		.byte	0x91
+ 30418 2a6a FC64     		.sleb128 -3460
+ 30419 2a6c 00       		.byte	0x0
+ 30420 2a6d 00       		.byte	0x0
+ 30421 2a6e 00       		.byte	0x0
+ 30422 2a6f 00       		.byte	0x0
+ 30423 2a70 36       		.uleb128 0x36
+ 30424 2a71 00000000 		.quad	.LBB651
+ 30424      00000000 
+ 30425 2a79 00000000 		.quad	.LBE651
+ 30425      00000000 
+ 30426 2a81 902A0000 		.long	0x2a90
+ 30427 2a85 34       		.uleb128 0x34
+ 30428 2a86 280C0000 		.long	0xc28
+ 30429 2a8a 04       		.byte	0x4
+ 30430 2a8b 91       		.byte	0x91
+ 30431 2a8c E0BE7F   		.sleb128 -8352
+ 30432 2a8f 00       		.byte	0x0
+ 30433 2a90 31       		.uleb128 0x31
+ 30434 2a91 520E0000 		.long	0xe52
+ 30435 2a95 00000000 		.quad	.LBB652
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 860
+
+
+ 30435      00000000 
+ 30436 2a9d 00000000 		.quad	.LBE652
+ 30436      00000000 
+ 30437 2aa5 02       		.byte	0x2
+ 30438 2aa6 9606     		.value	0x696
+ 30439 2aa8 BF2A0000 		.long	0x2abf
+ 30440 2aac 32       		.uleb128 0x32
+ 30441 2aad 6D0E0000 		.long	0xe6d
+ 30442 2ab1 03       		.byte	0x3
+ 30443 2ab2 91       		.byte	0x91
+ 30444 2ab3 8065     		.sleb128 -3456
+ 30445 2ab5 32       		.uleb128 0x32
+ 30446 2ab6 630E0000 		.long	0xe63
+ 30447 2aba 03       		.byte	0x3
+ 30448 2abb 91       		.byte	0x91
+ 30449 2abc 9065     		.sleb128 -3440
+ 30450 2abe 00       		.byte	0x0
+ 30451 2abf 36       		.uleb128 0x36
+ 30452 2ac0 00000000 		.quad	.LBB654
+ 30452      00000000 
+ 30453 2ac8 00000000 		.quad	.LBE654
+ 30453      00000000 
+ 30454 2ad0 DF2A0000 		.long	0x2adf
+ 30455 2ad4 34       		.uleb128 0x34
+ 30456 2ad5 380C0000 		.long	0xc38
+ 30457 2ad9 04       		.byte	0x4
+ 30458 2ada 91       		.byte	0x91
+ 30459 2adb D0BE7F   		.sleb128 -8368
+ 30460 2ade 00       		.byte	0x0
+ 30461 2adf 31       		.uleb128 0x31
+ 30462 2ae0 780E0000 		.long	0xe78
+ 30463 2ae4 00000000 		.quad	.LBB655
+ 30463      00000000 
+ 30464 2aec 00000000 		.quad	.LBE655
+ 30464      00000000 
+ 30465 2af4 02       		.byte	0x2
+ 30466 2af5 9806     		.value	0x698
+ 30467 2af7 202B0000 		.long	0x2b20
+ 30468 2afb 32       		.uleb128 0x32
+ 30469 2afc 8A0E0000 		.long	0xe8a
+ 30470 2b00 03       		.byte	0x3
+ 30471 2b01 91       		.byte	0x91
+ 30472 2b02 A065     		.sleb128 -3424
+ 30473 2b04 33       		.uleb128 0x33
+ 30474 2b05 00000000 		.quad	.LBB656
+ 30474      00000000 
+ 30475 2b0d 00000000 		.quad	.LBE656
+ 30475      00000000 
+ 30476 2b15 34       		.uleb128 0x34
+ 30477 2b16 960E0000 		.long	0xe96
+ 30478 2b1a 03       		.byte	0x3
+ 30479 2b1b 91       		.byte	0x91
+ 30480 2b1c A040     		.sleb128 -8160
+ 30481 2b1e 00       		.byte	0x0
+ 30482 2b1f 00       		.byte	0x0
+ 30483 2b20 33       		.uleb128 0x33
+ 30484 2b21 00000000 		.quad	.LBB657
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 861
+
+
+ 30484      00000000 
+ 30485 2b29 00000000 		.quad	.LBE657
+ 30485      00000000 
+ 30486 2b31 34       		.uleb128 0x34
+ 30487 2b32 440C0000 		.long	0xc44
+ 30488 2b36 04       		.byte	0x4
+ 30489 2b37 91       		.byte	0x91
+ 30490 2b38 C0BE7F   		.sleb128 -8384
+ 30491 2b3b 00       		.byte	0x0
+ 30492 2b3c 00       		.byte	0x0
+ 30493 2b3d 00       		.byte	0x0
+ 30494 2b3e 31       		.uleb128 0x31
+ 30495 2b3f A30E0000 		.long	0xea3
+ 30496 2b43 00000000 		.quad	.LBB658
+ 30496      00000000 
+ 30497 2b4b 00000000 		.quad	.LBE658
+ 30497      00000000 
+ 30498 2b53 02       		.byte	0x2
+ 30499 2b54 D406     		.value	0x6d4
+ 30500 2b56 3F2C0000 		.long	0x2c3f
+ 30501 2b5a 32       		.uleb128 0x32
+ 30502 2b5b B50E0000 		.long	0xeb5
+ 30503 2b5f 03       		.byte	0x3
+ 30504 2b60 91       		.byte	0x91
+ 30505 2b61 B065     		.sleb128 -3408
+ 30506 2b63 33       		.uleb128 0x33
+ 30507 2b64 00000000 		.quad	.LBB659
+ 30507      00000000 
+ 30508 2b6c 00000000 		.quad	.LBE659
+ 30508      00000000 
+ 30509 2b74 34       		.uleb128 0x34
+ 30510 2b75 C10E0000 		.long	0xec1
+ 30511 2b79 04       		.byte	0x4
+ 30512 2b7a 76       		.byte	0x76
+ 30513 2b7b E0B27F   		.sleb128 -9888
+ 30514 2b7e 31       		.uleb128 0x31
+ 30515 2b7f CE0E0000 		.long	0xece
+ 30516 2b83 00000000 		.quad	.LBB660
+ 30516      00000000 
+ 30517 2b8b 00000000 		.quad	.LBE660
+ 30517      00000000 
+ 30518 2b93 02       		.byte	0x2
+ 30519 2b94 1F06     		.value	0x61f
+ 30520 2b96 BF2B0000 		.long	0x2bbf
+ 30521 2b9a 32       		.uleb128 0x32
+ 30522 2b9b E00E0000 		.long	0xee0
+ 30523 2b9f 03       		.byte	0x3
+ 30524 2ba0 91       		.byte	0x91
+ 30525 2ba1 C065     		.sleb128 -3392
+ 30526 2ba3 33       		.uleb128 0x33
+ 30527 2ba4 00000000 		.quad	.LBB661
+ 30527      00000000 
+ 30528 2bac 00000000 		.quad	.LBE661
+ 30528      00000000 
+ 30529 2bb4 34       		.uleb128 0x34
+ 30530 2bb5 EC0E0000 		.long	0xeec
+ 30531 2bb9 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 862
+
+
+ 30532 2bba 91       		.byte	0x91
+ 30533 2bbb B040     		.sleb128 -8144
+ 30534 2bbd 00       		.byte	0x0
+ 30535 2bbe 00       		.byte	0x0
+ 30536 2bbf 31       		.uleb128 0x31
+ 30537 2bc0 CE0E0000 		.long	0xece
+ 30538 2bc4 00000000 		.quad	.LBB662
+ 30538      00000000 
+ 30539 2bcc 00000000 		.quad	.LBE662
+ 30539      00000000 
+ 30540 2bd4 02       		.byte	0x2
+ 30541 2bd5 2006     		.value	0x620
+ 30542 2bd7 002C0000 		.long	0x2c00
+ 30543 2bdb 32       		.uleb128 0x32
+ 30544 2bdc E00E0000 		.long	0xee0
+ 30545 2be0 03       		.byte	0x3
+ 30546 2be1 91       		.byte	0x91
+ 30547 2be2 D065     		.sleb128 -3376
+ 30548 2be4 33       		.uleb128 0x33
+ 30549 2be5 00000000 		.quad	.LBB663
+ 30549      00000000 
+ 30550 2bed 00000000 		.quad	.LBE663
+ 30550      00000000 
+ 30551 2bf5 34       		.uleb128 0x34
+ 30552 2bf6 EC0E0000 		.long	0xeec
+ 30553 2bfa 03       		.byte	0x3
+ 30554 2bfb 91       		.byte	0x91
+ 30555 2bfc C040     		.sleb128 -8128
+ 30556 2bfe 00       		.byte	0x0
+ 30557 2bff 00       		.byte	0x0
+ 30558 2c00 35       		.uleb128 0x35
+ 30559 2c01 CE0E0000 		.long	0xece
+ 30560 2c05 00000000 		.quad	.LBB664
+ 30560      00000000 
+ 30561 2c0d 00000000 		.quad	.LBE664
+ 30561      00000000 
+ 30562 2c15 02       		.byte	0x2
+ 30563 2c16 2106     		.value	0x621
+ 30564 2c18 32       		.uleb128 0x32
+ 30565 2c19 E00E0000 		.long	0xee0
+ 30566 2c1d 03       		.byte	0x3
+ 30567 2c1e 91       		.byte	0x91
+ 30568 2c1f E065     		.sleb128 -3360
+ 30569 2c21 33       		.uleb128 0x33
+ 30570 2c22 00000000 		.quad	.LBB665
+ 30570      00000000 
+ 30571 2c2a 00000000 		.quad	.LBE665
+ 30571      00000000 
+ 30572 2c32 34       		.uleb128 0x34
+ 30573 2c33 EC0E0000 		.long	0xeec
+ 30574 2c37 03       		.byte	0x3
+ 30575 2c38 91       		.byte	0x91
+ 30576 2c39 D040     		.sleb128 -8112
+ 30577 2c3b 00       		.byte	0x0
+ 30578 2c3c 00       		.byte	0x0
+ 30579 2c3d 00       		.byte	0x0
+ 30580 2c3e 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 863
+
+
+ 30581 2c3f 31       		.uleb128 0x31
+ 30582 2c40 D10B0000 		.long	0xbd1
+ 30583 2c44 00000000 		.quad	.LBB666
+ 30583      00000000 
+ 30584 2c4c 00000000 		.quad	.LBE666
+ 30584      00000000 
+ 30585 2c54 02       		.byte	0x2
+ 30586 2c55 D506     		.value	0x6d5
+ 30587 2c57 E7300000 		.long	0x30e7
+ 30588 2c5b 32       		.uleb128 0x32
+ 30589 2c5c EF0B0000 		.long	0xbef
+ 30590 2c60 03       		.byte	0x3
+ 30591 2c61 91       		.byte	0x91
+ 30592 2c62 FC65     		.sleb128 -3332
+ 30593 2c64 32       		.uleb128 0x32
+ 30594 2c65 E30B0000 		.long	0xbe3
+ 30595 2c69 03       		.byte	0x3
+ 30596 2c6a 91       		.byte	0x91
+ 30597 2c6b 8066     		.sleb128 -3328
+ 30598 2c6d 33       		.uleb128 0x33
+ 30599 2c6e 00000000 		.quad	.LBB667
+ 30599      00000000 
+ 30600 2c76 00000000 		.quad	.LBE667
+ 30600      00000000 
+ 30601 2c7e 34       		.uleb128 0x34
+ 30602 2c7f FB0B0000 		.long	0xbfb
+ 30603 2c83 04       		.byte	0x4
+ 30604 2c84 76       		.byte	0x76
+ 30605 2c85 80B37F   		.sleb128 -9856
+ 30606 2c88 34       		.uleb128 0x34
+ 30607 2c89 070C0000 		.long	0xc07
+ 30608 2c8d 04       		.byte	0x4
+ 30609 2c8e 76       		.byte	0x76
+ 30610 2c8f F0B27F   		.sleb128 -9872
+ 30611 2c92 31       		.uleb128 0x31
+ 30612 2c93 500C0000 		.long	0xc50
+ 30613 2c97 00000000 		.quad	.LBB668
+ 30613      00000000 
+ 30614 2c9f 00000000 		.quad	.LBE668
+ 30614      00000000 
+ 30615 2ca7 02       		.byte	0x2
+ 30616 2ca8 9106     		.value	0x691
+ 30617 2caa E52C0000 		.long	0x2ce5
+ 30618 2cae 32       		.uleb128 0x32
+ 30619 2caf 7A0C0000 		.long	0xc7a
+ 30620 2cb3 03       		.byte	0x3
+ 30621 2cb4 91       		.byte	0x91
+ 30622 2cb5 9866     		.sleb128 -3304
+ 30623 2cb7 32       		.uleb128 0x32
+ 30624 2cb8 6E0C0000 		.long	0xc6e
+ 30625 2cbc 03       		.byte	0x3
+ 30626 2cbd 91       		.byte	0x91
+ 30627 2cbe 9C66     		.sleb128 -3300
+ 30628 2cc0 32       		.uleb128 0x32
+ 30629 2cc1 620C0000 		.long	0xc62
+ 30630 2cc5 03       		.byte	0x3
+ 30631 2cc6 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 864
+
+
+ 30632 2cc7 A066     		.sleb128 -3296
+ 30633 2cc9 33       		.uleb128 0x33
+ 30634 2cca 00000000 		.quad	.LBB669
+ 30634      00000000 
+ 30635 2cd2 00000000 		.quad	.LBE669
+ 30635      00000000 
+ 30636 2cda 34       		.uleb128 0x34
+ 30637 2cdb 860C0000 		.long	0xc86
+ 30638 2cdf 03       		.byte	0x3
+ 30639 2ce0 91       		.byte	0x91
+ 30640 2ce1 A041     		.sleb128 -8032
+ 30641 2ce3 00       		.byte	0x0
+ 30642 2ce4 00       		.byte	0x0
+ 30643 2ce5 31       		.uleb128 0x31
+ 30644 2ce6 910C0000 		.long	0xc91
+ 30645 2cea 00000000 		.quad	.LBB670
+ 30645      00000000 
+ 30646 2cf2 00000000 		.quad	.LBE670
+ 30646      00000000 
+ 30647 2cfa 02       		.byte	0x2
+ 30648 2cfb 9206     		.value	0x692
+ 30649 2cfd 552F0000 		.long	0x2f55
+ 30650 2d01 32       		.uleb128 0x32
+ 30651 2d02 A30C0000 		.long	0xca3
+ 30652 2d06 03       		.byte	0x3
+ 30653 2d07 91       		.byte	0x91
+ 30654 2d08 B066     		.sleb128 -3280
+ 30655 2d0a 35       		.uleb128 0x35
+ 30656 2d0b B00C0000 		.long	0xcb0
+ 30657 2d0f 00000000 		.quad	.LBB672
+ 30657      00000000 
+ 30658 2d17 00000000 		.quad	.LBE672
+ 30658      00000000 
+ 30659 2d1f 02       		.byte	0x2
+ 30660 2d20 7D03     		.value	0x37d
+ 30661 2d22 32       		.uleb128 0x32
+ 30662 2d23 CE0C0000 		.long	0xcce
+ 30663 2d27 03       		.byte	0x3
+ 30664 2d28 91       		.byte	0x91
+ 30665 2d29 C866     		.sleb128 -3256
+ 30666 2d2b 32       		.uleb128 0x32
+ 30667 2d2c C20C0000 		.long	0xcc2
+ 30668 2d30 03       		.byte	0x3
+ 30669 2d31 91       		.byte	0x91
+ 30670 2d32 D066     		.sleb128 -3248
+ 30671 2d34 33       		.uleb128 0x33
+ 30672 2d35 00000000 		.quad	.LBB673
+ 30672      00000000 
+ 30673 2d3d 00000000 		.quad	.LBE673
+ 30673      00000000 
+ 30674 2d45 34       		.uleb128 0x34
+ 30675 2d46 DA0C0000 		.long	0xcda
+ 30676 2d4a 03       		.byte	0x3
+ 30677 2d4b 91       		.byte	0x91
+ 30678 2d4c A067     		.sleb128 -3168
+ 30679 2d4e 34       		.uleb128 0x34
+ 30680 2d4f E50C0000 		.long	0xce5
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 865
+
+
+ 30681 2d53 03       		.byte	0x3
+ 30682 2d54 91       		.byte	0x91
+ 30683 2d55 9067     		.sleb128 -3184
+ 30684 2d57 34       		.uleb128 0x34
+ 30685 2d58 F00C0000 		.long	0xcf0
+ 30686 2d5c 03       		.byte	0x3
+ 30687 2d5d 91       		.byte	0x91
+ 30688 2d5e 8067     		.sleb128 -3200
+ 30689 2d60 34       		.uleb128 0x34
+ 30690 2d61 FC0C0000 		.long	0xcfc
+ 30691 2d65 03       		.byte	0x3
+ 30692 2d66 91       		.byte	0x91
+ 30693 2d67 F066     		.sleb128 -3216
+ 30694 2d69 34       		.uleb128 0x34
+ 30695 2d6a 080D0000 		.long	0xd08
+ 30696 2d6e 03       		.byte	0x3
+ 30697 2d6f 91       		.byte	0x91
+ 30698 2d70 EC66     		.sleb128 -3220
+ 30699 2d72 31       		.uleb128 0x31
+ 30700 2d73 1F0D0000 		.long	0xd1f
+ 30701 2d77 00000000 		.quad	.LBB674
+ 30701      00000000 
+ 30702 2d7f 00000000 		.quad	.LBE674
+ 30702      00000000 
+ 30703 2d87 02       		.byte	0x2
+ 30704 2d88 5603     		.value	0x356
+ 30705 2d8a A12D0000 		.long	0x2da1
+ 30706 2d8e 32       		.uleb128 0x32
+ 30707 2d8f 3A0D0000 		.long	0xd3a
+ 30708 2d93 03       		.byte	0x3
+ 30709 2d94 91       		.byte	0x91
+ 30710 2d95 B067     		.sleb128 -3152
+ 30711 2d97 32       		.uleb128 0x32
+ 30712 2d98 300D0000 		.long	0xd30
+ 30713 2d9c 03       		.byte	0x3
+ 30714 2d9d 91       		.byte	0x91
+ 30715 2d9e C067     		.sleb128 -3136
+ 30716 2da0 00       		.byte	0x0
+ 30717 2da1 31       		.uleb128 0x31
+ 30718 2da2 450D0000 		.long	0xd45
+ 30719 2da6 00000000 		.quad	.LBB676
+ 30719      00000000 
+ 30720 2dae 00000000 		.quad	.LBE676
+ 30720      00000000 
+ 30721 2db6 02       		.byte	0x2
+ 30722 2db7 5E03     		.value	0x35e
+ 30723 2db9 D02D0000 		.long	0x2dd0
+ 30724 2dbd 32       		.uleb128 0x32
+ 30725 2dbe 620D0000 		.long	0xd62
+ 30726 2dc2 03       		.byte	0x3
+ 30727 2dc3 91       		.byte	0x91
+ 30728 2dc4 D067     		.sleb128 -3120
+ 30729 2dc6 32       		.uleb128 0x32
+ 30730 2dc7 570D0000 		.long	0xd57
+ 30731 2dcb 03       		.byte	0x3
+ 30732 2dcc 91       		.byte	0x91
+ 30733 2dcd E067     		.sleb128 -3104
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 866
+
+
+ 30734 2dcf 00       		.byte	0x0
+ 30735 2dd0 31       		.uleb128 0x31
+ 30736 2dd1 6E0D0000 		.long	0xd6e
+ 30737 2dd5 00000000 		.quad	.LBB678
+ 30737      00000000 
+ 30738 2ddd 00000000 		.quad	.LBE678
+ 30738      00000000 
+ 30739 2de5 02       		.byte	0x2
+ 30740 2de6 6403     		.value	0x364
+ 30741 2de8 352E0000 		.long	0x2e35
+ 30742 2dec 32       		.uleb128 0x32
+ 30743 2ded 8C0D0000 		.long	0xd8c
+ 30744 2df1 03       		.byte	0x3
+ 30745 2df2 91       		.byte	0x91
+ 30746 2df3 F067     		.sleb128 -3088
+ 30747 2df5 32       		.uleb128 0x32
+ 30748 2df6 800D0000 		.long	0xd80
+ 30749 2dfa 03       		.byte	0x3
+ 30750 2dfb 91       		.byte	0x91
+ 30751 2dfc 8068     		.sleb128 -3072
+ 30752 2dfe 33       		.uleb128 0x33
+ 30753 2dff 00000000 		.quad	.LBB679
+ 30753      00000000 
+ 30754 2e07 00000000 		.quad	.LBE679
+ 30754      00000000 
+ 30755 2e0f 34       		.uleb128 0x34
+ 30756 2e10 980D0000 		.long	0xd98
+ 30757 2e14 03       		.byte	0x3
+ 30758 2e15 91       		.byte	0x91
+ 30759 2e16 D041     		.sleb128 -7984
+ 30760 2e18 34       		.uleb128 0x34
+ 30761 2e19 A40D0000 		.long	0xda4
+ 30762 2e1d 03       		.byte	0x3
+ 30763 2e1e 91       		.byte	0x91
+ 30764 2e1f C041     		.sleb128 -8000
+ 30765 2e21 34       		.uleb128 0x34
+ 30766 2e22 AF0D0000 		.long	0xdaf
+ 30767 2e26 03       		.byte	0x3
+ 30768 2e27 91       		.byte	0x91
+ 30769 2e28 B041     		.sleb128 -8016
+ 30770 2e2a 34       		.uleb128 0x34
+ 30771 2e2b BB0D0000 		.long	0xdbb
+ 30772 2e2f 03       		.byte	0x3
+ 30773 2e30 91       		.byte	0x91
+ 30774 2e31 9C68     		.sleb128 -3044
+ 30775 2e33 00       		.byte	0x0
+ 30776 2e34 00       		.byte	0x0
+ 30777 2e35 31       		.uleb128 0x31
+ 30778 2e36 C70D0000 		.long	0xdc7
+ 30779 2e3a 00000000 		.quad	.LBB680
+ 30779      00000000 
+ 30780 2e42 00000000 		.quad	.LBE680
+ 30780      00000000 
+ 30781 2e4a 02       		.byte	0x2
+ 30782 2e4b 6603     		.value	0x366
+ 30783 2e4d 642E0000 		.long	0x2e64
+ 30784 2e51 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 867
+
+
+ 30785 2e52 E20D0000 		.long	0xde2
+ 30786 2e56 03       		.byte	0x3
+ 30787 2e57 91       		.byte	0x91
+ 30788 2e58 A068     		.sleb128 -3040
+ 30789 2e5a 32       		.uleb128 0x32
+ 30790 2e5b D80D0000 		.long	0xdd8
+ 30791 2e5f 03       		.byte	0x3
+ 30792 2e60 91       		.byte	0x91
+ 30793 2e61 B068     		.sleb128 -3024
+ 30794 2e63 00       		.byte	0x0
+ 30795 2e64 31       		.uleb128 0x31
+ 30796 2e65 6E0D0000 		.long	0xd6e
+ 30797 2e69 00000000 		.quad	.LBB682
+ 30797      00000000 
+ 30798 2e71 00000000 		.quad	.LBE682
+ 30798      00000000 
+ 30799 2e79 02       		.byte	0x2
+ 30800 2e7a 6803     		.value	0x368
+ 30801 2e7c C92E0000 		.long	0x2ec9
+ 30802 2e80 32       		.uleb128 0x32
+ 30803 2e81 8C0D0000 		.long	0xd8c
+ 30804 2e85 03       		.byte	0x3
+ 30805 2e86 91       		.byte	0x91
+ 30806 2e87 C068     		.sleb128 -3008
+ 30807 2e89 32       		.uleb128 0x32
+ 30808 2e8a 800D0000 		.long	0xd80
+ 30809 2e8e 03       		.byte	0x3
+ 30810 2e8f 91       		.byte	0x91
+ 30811 2e90 D068     		.sleb128 -2992
+ 30812 2e92 33       		.uleb128 0x33
+ 30813 2e93 00000000 		.quad	.LBB683
+ 30813      00000000 
+ 30814 2e9b 00000000 		.quad	.LBE683
+ 30814      00000000 
+ 30815 2ea3 34       		.uleb128 0x34
+ 30816 2ea4 980D0000 		.long	0xd98
+ 30817 2ea8 03       		.byte	0x3
+ 30818 2ea9 91       		.byte	0x91
+ 30819 2eaa 8042     		.sleb128 -7936
+ 30820 2eac 34       		.uleb128 0x34
+ 30821 2ead A40D0000 		.long	0xda4
+ 30822 2eb1 03       		.byte	0x3
+ 30823 2eb2 91       		.byte	0x91
+ 30824 2eb3 F041     		.sleb128 -7952
+ 30825 2eb5 34       		.uleb128 0x34
+ 30826 2eb6 AF0D0000 		.long	0xdaf
+ 30827 2eba 03       		.byte	0x3
+ 30828 2ebb 91       		.byte	0x91
+ 30829 2ebc E041     		.sleb128 -7968
+ 30830 2ebe 34       		.uleb128 0x34
+ 30831 2ebf BB0D0000 		.long	0xdbb
+ 30832 2ec3 03       		.byte	0x3
+ 30833 2ec4 91       		.byte	0x91
+ 30834 2ec5 EC68     		.sleb128 -2964
+ 30835 2ec7 00       		.byte	0x0
+ 30836 2ec8 00       		.byte	0x0
+ 30837 2ec9 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 868
+
+
+ 30838 2eca C70D0000 		.long	0xdc7
+ 30839 2ece 00000000 		.quad	.LBB684
+ 30839      00000000 
+ 30840 2ed6 00000000 		.quad	.LBE684
+ 30840      00000000 
+ 30841 2ede 02       		.byte	0x2
+ 30842 2edf 6A03     		.value	0x36a
+ 30843 2ee1 F82E0000 		.long	0x2ef8
+ 30844 2ee5 32       		.uleb128 0x32
+ 30845 2ee6 E20D0000 		.long	0xde2
+ 30846 2eea 03       		.byte	0x3
+ 30847 2eeb 91       		.byte	0x91
+ 30848 2eec F068     		.sleb128 -2960
+ 30849 2eee 32       		.uleb128 0x32
+ 30850 2eef D80D0000 		.long	0xdd8
+ 30851 2ef3 03       		.byte	0x3
+ 30852 2ef4 91       		.byte	0x91
+ 30853 2ef5 8069     		.sleb128 -2944
+ 30854 2ef7 00       		.byte	0x0
+ 30855 2ef8 31       		.uleb128 0x31
+ 30856 2ef9 ED0D0000 		.long	0xded
+ 30857 2efd 00000000 		.quad	.LBB686
+ 30857      00000000 
+ 30858 2f05 00000000 		.quad	.LBE686
+ 30858      00000000 
+ 30859 2f0d 02       		.byte	0x2
+ 30860 2f0e 6C03     		.value	0x36c
+ 30861 2f10 272F0000 		.long	0x2f27
+ 30862 2f14 32       		.uleb128 0x32
+ 30863 2f15 0A0E0000 		.long	0xe0a
+ 30864 2f19 03       		.byte	0x3
+ 30865 2f1a 91       		.byte	0x91
+ 30866 2f1b 9069     		.sleb128 -2928
+ 30867 2f1d 32       		.uleb128 0x32
+ 30868 2f1e FF0D0000 		.long	0xdff
+ 30869 2f22 03       		.byte	0x3
+ 30870 2f23 91       		.byte	0x91
+ 30871 2f24 A069     		.sleb128 -2912
+ 30872 2f26 00       		.byte	0x0
+ 30873 2f27 35       		.uleb128 0x35
+ 30874 2f28 1F0D0000 		.long	0xd1f
+ 30875 2f2c 00000000 		.quad	.LBB688
+ 30875      00000000 
+ 30876 2f34 00000000 		.quad	.LBE688
+ 30876      00000000 
+ 30877 2f3c 02       		.byte	0x2
+ 30878 2f3d 6E03     		.value	0x36e
+ 30879 2f3f 32       		.uleb128 0x32
+ 30880 2f40 3A0D0000 		.long	0xd3a
+ 30881 2f44 03       		.byte	0x3
+ 30882 2f45 91       		.byte	0x91
+ 30883 2f46 B069     		.sleb128 -2896
+ 30884 2f48 32       		.uleb128 0x32
+ 30885 2f49 300D0000 		.long	0xd30
+ 30886 2f4d 03       		.byte	0x3
+ 30887 2f4e 91       		.byte	0x91
+ 30888 2f4f C069     		.sleb128 -2880
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 869
+
+
+ 30889 2f51 00       		.byte	0x0
+ 30890 2f52 00       		.byte	0x0
+ 30891 2f53 00       		.byte	0x0
+ 30892 2f54 00       		.byte	0x0
+ 30893 2f55 36       		.uleb128 0x36
+ 30894 2f56 00000000 		.quad	.LBB690
+ 30894      00000000 
+ 30895 2f5e 00000000 		.quad	.LBE690
+ 30895      00000000 
+ 30896 2f66 742F0000 		.long	0x2f74
+ 30897 2f6a 34       		.uleb128 0x34
+ 30898 2f6b 180C0000 		.long	0xc18
+ 30899 2f6f 03       		.byte	0x3
+ 30900 2f70 91       		.byte	0x91
+ 30901 2f71 9041     		.sleb128 -8048
+ 30902 2f73 00       		.byte	0x0
+ 30903 2f74 31       		.uleb128 0x31
+ 30904 2f75 160E0000 		.long	0xe16
+ 30905 2f79 00000000 		.quad	.LBB691
+ 30905      00000000 
+ 30906 2f81 00000000 		.quad	.LBE691
+ 30906      00000000 
+ 30907 2f89 02       		.byte	0x2
+ 30908 2f8a 9406     		.value	0x694
+ 30909 2f8c 1C300000 		.long	0x301c
+ 30910 2f90 32       		.uleb128 0x32
+ 30911 2f91 280E0000 		.long	0xe28
+ 30912 2f95 03       		.byte	0x3
+ 30913 2f96 91       		.byte	0x91
+ 30914 2f97 D069     		.sleb128 -2864
+ 30915 2f99 33       		.uleb128 0x33
+ 30916 2f9a 00000000 		.quad	.LBB692
+ 30916      00000000 
+ 30917 2fa2 00000000 		.quad	.LBE692
+ 30917      00000000 
+ 30918 2faa 34       		.uleb128 0x34
+ 30919 2fab 340E0000 		.long	0xe34
+ 30920 2faf 09       		.byte	0x9
+ 30921 2fb0 03       		.byte	0x3
+ 30922 2fb1 00000000 		.quad	ShiftRowTable.6768
+ 30922      00000000 
+ 30923 2fb9 35       		.uleb128 0x35
+ 30924 2fba 6E0D0000 		.long	0xd6e
+ 30925 2fbe 00000000 		.quad	.LBB693
+ 30925      00000000 
+ 30926 2fc6 00000000 		.quad	.LBE693
+ 30926      00000000 
+ 30927 2fce 02       		.byte	0x2
+ 30928 2fcf 9B02     		.value	0x29b
+ 30929 2fd1 32       		.uleb128 0x32
+ 30930 2fd2 8C0D0000 		.long	0xd8c
+ 30931 2fd6 03       		.byte	0x3
+ 30932 2fd7 91       		.byte	0x91
+ 30933 2fd8 E069     		.sleb128 -2848
+ 30934 2fda 32       		.uleb128 0x32
+ 30935 2fdb 800D0000 		.long	0xd80
+ 30936 2fdf 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 870
+
+
+ 30937 2fe0 91       		.byte	0x91
+ 30938 2fe1 F069     		.sleb128 -2832
+ 30939 2fe3 33       		.uleb128 0x33
+ 30940 2fe4 00000000 		.quad	.LBB694
+ 30940      00000000 
+ 30941 2fec 00000000 		.quad	.LBE694
+ 30941      00000000 
+ 30942 2ff4 34       		.uleb128 0x34
+ 30943 2ff5 980D0000 		.long	0xd98
+ 30944 2ff9 03       		.byte	0x3
+ 30945 2ffa 91       		.byte	0x91
+ 30946 2ffb B042     		.sleb128 -7888
+ 30947 2ffd 34       		.uleb128 0x34
+ 30948 2ffe A40D0000 		.long	0xda4
+ 30949 3002 03       		.byte	0x3
+ 30950 3003 91       		.byte	0x91
+ 30951 3004 A042     		.sleb128 -7904
+ 30952 3006 34       		.uleb128 0x34
+ 30953 3007 AF0D0000 		.long	0xdaf
+ 30954 300b 03       		.byte	0x3
+ 30955 300c 91       		.byte	0x91
+ 30956 300d 9042     		.sleb128 -7920
+ 30957 300f 34       		.uleb128 0x34
+ 30958 3010 BB0D0000 		.long	0xdbb
+ 30959 3014 03       		.byte	0x3
+ 30960 3015 91       		.byte	0x91
+ 30961 3016 8C6A     		.sleb128 -2804
+ 30962 3018 00       		.byte	0x0
+ 30963 3019 00       		.byte	0x0
+ 30964 301a 00       		.byte	0x0
+ 30965 301b 00       		.byte	0x0
+ 30966 301c 36       		.uleb128 0x36
+ 30967 301d 00000000 		.quad	.LBB695
+ 30967      00000000 
+ 30968 3025 00000000 		.quad	.LBE695
+ 30968      00000000 
+ 30969 302d 3B300000 		.long	0x303b
+ 30970 3031 34       		.uleb128 0x34
+ 30971 3032 280C0000 		.long	0xc28
+ 30972 3036 03       		.byte	0x3
+ 30973 3037 91       		.byte	0x91
+ 30974 3038 8041     		.sleb128 -8064
+ 30975 303a 00       		.byte	0x0
+ 30976 303b 31       		.uleb128 0x31
+ 30977 303c 520E0000 		.long	0xe52
+ 30978 3040 00000000 		.quad	.LBB696
+ 30978      00000000 
+ 30979 3048 00000000 		.quad	.LBE696
+ 30979      00000000 
+ 30980 3050 02       		.byte	0x2
+ 30981 3051 9606     		.value	0x696
+ 30982 3053 6A300000 		.long	0x306a
+ 30983 3057 32       		.uleb128 0x32
+ 30984 3058 6D0E0000 		.long	0xe6d
+ 30985 305c 03       		.byte	0x3
+ 30986 305d 91       		.byte	0x91
+ 30987 305e 906A     		.sleb128 -2800
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 871
+
+
+ 30988 3060 32       		.uleb128 0x32
+ 30989 3061 630E0000 		.long	0xe63
+ 30990 3065 03       		.byte	0x3
+ 30991 3066 91       		.byte	0x91
+ 30992 3067 A06A     		.sleb128 -2784
+ 30993 3069 00       		.byte	0x0
+ 30994 306a 36       		.uleb128 0x36
+ 30995 306b 00000000 		.quad	.LBB698
+ 30995      00000000 
+ 30996 3073 00000000 		.quad	.LBE698
+ 30996      00000000 
+ 30997 307b 89300000 		.long	0x3089
+ 30998 307f 34       		.uleb128 0x34
+ 30999 3080 380C0000 		.long	0xc38
+ 31000 3084 03       		.byte	0x3
+ 31001 3085 91       		.byte	0x91
+ 31002 3086 F040     		.sleb128 -8080
+ 31003 3088 00       		.byte	0x0
+ 31004 3089 31       		.uleb128 0x31
+ 31005 308a 780E0000 		.long	0xe78
+ 31006 308e 00000000 		.quad	.LBB699
+ 31006      00000000 
+ 31007 3096 00000000 		.quad	.LBE699
+ 31007      00000000 
+ 31008 309e 02       		.byte	0x2
+ 31009 309f 9806     		.value	0x698
+ 31010 30a1 CA300000 		.long	0x30ca
+ 31011 30a5 32       		.uleb128 0x32
+ 31012 30a6 8A0E0000 		.long	0xe8a
+ 31013 30aa 03       		.byte	0x3
+ 31014 30ab 91       		.byte	0x91
+ 31015 30ac B06A     		.sleb128 -2768
+ 31016 30ae 33       		.uleb128 0x33
+ 31017 30af 00000000 		.quad	.LBB700
+ 31017      00000000 
+ 31018 30b7 00000000 		.quad	.LBE700
+ 31018      00000000 
+ 31019 30bf 34       		.uleb128 0x34
+ 31020 30c0 960E0000 		.long	0xe96
+ 31021 30c4 03       		.byte	0x3
+ 31022 30c5 91       		.byte	0x91
+ 31023 30c6 C042     		.sleb128 -7872
+ 31024 30c8 00       		.byte	0x0
+ 31025 30c9 00       		.byte	0x0
+ 31026 30ca 33       		.uleb128 0x33
+ 31027 30cb 00000000 		.quad	.LBB701
+ 31027      00000000 
+ 31028 30d3 00000000 		.quad	.LBE701
+ 31028      00000000 
+ 31029 30db 34       		.uleb128 0x34
+ 31030 30dc 440C0000 		.long	0xc44
+ 31031 30e0 03       		.byte	0x3
+ 31032 30e1 91       		.byte	0x91
+ 31033 30e2 E040     		.sleb128 -8096
+ 31034 30e4 00       		.byte	0x0
+ 31035 30e5 00       		.byte	0x0
+ 31036 30e6 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 872
+
+
+ 31037 30e7 31       		.uleb128 0x31
+ 31038 30e8 A30E0000 		.long	0xea3
+ 31039 30ec 00000000 		.quad	.LBB702
+ 31039      00000000 
+ 31040 30f4 00000000 		.quad	.LBE702
+ 31040      00000000 
+ 31041 30fc 02       		.byte	0x2
+ 31042 30fd D506     		.value	0x6d5
+ 31043 30ff E8310000 		.long	0x31e8
+ 31044 3103 32       		.uleb128 0x32
+ 31045 3104 B50E0000 		.long	0xeb5
+ 31046 3108 03       		.byte	0x3
+ 31047 3109 91       		.byte	0x91
+ 31048 310a C06A     		.sleb128 -2752
+ 31049 310c 33       		.uleb128 0x33
+ 31050 310d 00000000 		.quad	.LBB703
+ 31050      00000000 
+ 31051 3115 00000000 		.quad	.LBE703
+ 31051      00000000 
+ 31052 311d 34       		.uleb128 0x34
+ 31053 311e C10E0000 		.long	0xec1
+ 31054 3122 04       		.byte	0x4
+ 31055 3123 76       		.byte	0x76
+ 31056 3124 A0B37F   		.sleb128 -9824
+ 31057 3127 31       		.uleb128 0x31
+ 31058 3128 CE0E0000 		.long	0xece
+ 31059 312c 00000000 		.quad	.LBB704
+ 31059      00000000 
+ 31060 3134 00000000 		.quad	.LBE704
+ 31060      00000000 
+ 31061 313c 02       		.byte	0x2
+ 31062 313d 1F06     		.value	0x61f
+ 31063 313f 68310000 		.long	0x3168
+ 31064 3143 32       		.uleb128 0x32
+ 31065 3144 E00E0000 		.long	0xee0
+ 31066 3148 03       		.byte	0x3
+ 31067 3149 91       		.byte	0x91
+ 31068 314a D06A     		.sleb128 -2736
+ 31069 314c 33       		.uleb128 0x33
+ 31070 314d 00000000 		.quad	.LBB705
+ 31070      00000000 
+ 31071 3155 00000000 		.quad	.LBE705
+ 31071      00000000 
+ 31072 315d 34       		.uleb128 0x34
+ 31073 315e EC0E0000 		.long	0xeec
+ 31074 3162 03       		.byte	0x3
+ 31075 3163 91       		.byte	0x91
+ 31076 3164 D042     		.sleb128 -7856
+ 31077 3166 00       		.byte	0x0
+ 31078 3167 00       		.byte	0x0
+ 31079 3168 31       		.uleb128 0x31
+ 31080 3169 CE0E0000 		.long	0xece
+ 31081 316d 00000000 		.quad	.LBB706
+ 31081      00000000 
+ 31082 3175 00000000 		.quad	.LBE706
+ 31082      00000000 
+ 31083 317d 02       		.byte	0x2
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 873
+
+
+ 31084 317e 2006     		.value	0x620
+ 31085 3180 A9310000 		.long	0x31a9
+ 31086 3184 32       		.uleb128 0x32
+ 31087 3185 E00E0000 		.long	0xee0
+ 31088 3189 03       		.byte	0x3
+ 31089 318a 91       		.byte	0x91
+ 31090 318b E06A     		.sleb128 -2720
+ 31091 318d 33       		.uleb128 0x33
+ 31092 318e 00000000 		.quad	.LBB707
+ 31092      00000000 
+ 31093 3196 00000000 		.quad	.LBE707
+ 31093      00000000 
+ 31094 319e 34       		.uleb128 0x34
+ 31095 319f EC0E0000 		.long	0xeec
+ 31096 31a3 03       		.byte	0x3
+ 31097 31a4 91       		.byte	0x91
+ 31098 31a5 E042     		.sleb128 -7840
+ 31099 31a7 00       		.byte	0x0
+ 31100 31a8 00       		.byte	0x0
+ 31101 31a9 35       		.uleb128 0x35
+ 31102 31aa CE0E0000 		.long	0xece
+ 31103 31ae 00000000 		.quad	.LBB708
+ 31103      00000000 
+ 31104 31b6 00000000 		.quad	.LBE708
+ 31104      00000000 
+ 31105 31be 02       		.byte	0x2
+ 31106 31bf 2106     		.value	0x621
+ 31107 31c1 32       		.uleb128 0x32
+ 31108 31c2 E00E0000 		.long	0xee0
+ 31109 31c6 03       		.byte	0x3
+ 31110 31c7 91       		.byte	0x91
+ 31111 31c8 F06A     		.sleb128 -2704
+ 31112 31ca 33       		.uleb128 0x33
+ 31113 31cb 00000000 		.quad	.LBB709
+ 31113      00000000 
+ 31114 31d3 00000000 		.quad	.LBE709
+ 31114      00000000 
+ 31115 31db 34       		.uleb128 0x34
+ 31116 31dc EC0E0000 		.long	0xeec
+ 31117 31e0 03       		.byte	0x3
+ 31118 31e1 91       		.byte	0x91
+ 31119 31e2 F042     		.sleb128 -7824
+ 31120 31e4 00       		.byte	0x0
+ 31121 31e5 00       		.byte	0x0
+ 31122 31e6 00       		.byte	0x0
+ 31123 31e7 00       		.byte	0x0
+ 31124 31e8 31       		.uleb128 0x31
+ 31125 31e9 D10B0000 		.long	0xbd1
+ 31126 31ed 00000000 		.quad	.LBB710
+ 31126      00000000 
+ 31127 31f5 00000000 		.quad	.LBE710
+ 31127      00000000 
+ 31128 31fd 02       		.byte	0x2
+ 31129 31fe D606     		.value	0x6d6
+ 31130 3200 90360000 		.long	0x3690
+ 31131 3204 32       		.uleb128 0x32
+ 31132 3205 EF0B0000 		.long	0xbef
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 874
+
+
+ 31133 3209 03       		.byte	0x3
+ 31134 320a 91       		.byte	0x91
+ 31135 320b 8C6B     		.sleb128 -2676
+ 31136 320d 32       		.uleb128 0x32
+ 31137 320e E30B0000 		.long	0xbe3
+ 31138 3212 03       		.byte	0x3
+ 31139 3213 91       		.byte	0x91
+ 31140 3214 906B     		.sleb128 -2672
+ 31141 3216 33       		.uleb128 0x33
+ 31142 3217 00000000 		.quad	.LBB711
+ 31142      00000000 
+ 31143 321f 00000000 		.quad	.LBE711
+ 31143      00000000 
+ 31144 3227 34       		.uleb128 0x34
+ 31145 3228 FB0B0000 		.long	0xbfb
+ 31146 322c 04       		.byte	0x4
+ 31147 322d 76       		.byte	0x76
+ 31148 322e C0B37F   		.sleb128 -9792
+ 31149 3231 34       		.uleb128 0x34
+ 31150 3232 070C0000 		.long	0xc07
+ 31151 3236 04       		.byte	0x4
+ 31152 3237 76       		.byte	0x76
+ 31153 3238 B0B37F   		.sleb128 -9808
+ 31154 323b 31       		.uleb128 0x31
+ 31155 323c 500C0000 		.long	0xc50
+ 31156 3240 00000000 		.quad	.LBB712
+ 31156      00000000 
+ 31157 3248 00000000 		.quad	.LBE712
+ 31157      00000000 
+ 31158 3250 02       		.byte	0x2
+ 31159 3251 9106     		.value	0x691
+ 31160 3253 8E320000 		.long	0x328e
+ 31161 3257 32       		.uleb128 0x32
+ 31162 3258 7A0C0000 		.long	0xc7a
+ 31163 325c 03       		.byte	0x3
+ 31164 325d 91       		.byte	0x91
+ 31165 325e A86B     		.sleb128 -2648
+ 31166 3260 32       		.uleb128 0x32
+ 31167 3261 6E0C0000 		.long	0xc6e
+ 31168 3265 03       		.byte	0x3
+ 31169 3266 91       		.byte	0x91
+ 31170 3267 AC6B     		.sleb128 -2644
+ 31171 3269 32       		.uleb128 0x32
+ 31172 326a 620C0000 		.long	0xc62
+ 31173 326e 03       		.byte	0x3
+ 31174 326f 91       		.byte	0x91
+ 31175 3270 B06B     		.sleb128 -2640
+ 31176 3272 33       		.uleb128 0x33
+ 31177 3273 00000000 		.quad	.LBB713
+ 31177      00000000 
+ 31178 327b 00000000 		.quad	.LBE713
+ 31178      00000000 
+ 31179 3283 34       		.uleb128 0x34
+ 31180 3284 860C0000 		.long	0xc86
+ 31181 3288 03       		.byte	0x3
+ 31182 3289 91       		.byte	0x91
+ 31183 328a C043     		.sleb128 -7744
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 875
+
+
+ 31184 328c 00       		.byte	0x0
+ 31185 328d 00       		.byte	0x0
+ 31186 328e 31       		.uleb128 0x31
+ 31187 328f 910C0000 		.long	0xc91
+ 31188 3293 00000000 		.quad	.LBB714
+ 31188      00000000 
+ 31189 329b 00000000 		.quad	.LBE714
+ 31189      00000000 
+ 31190 32a3 02       		.byte	0x2
+ 31191 32a4 9206     		.value	0x692
+ 31192 32a6 FE340000 		.long	0x34fe
+ 31193 32aa 32       		.uleb128 0x32
+ 31194 32ab A30C0000 		.long	0xca3
+ 31195 32af 03       		.byte	0x3
+ 31196 32b0 91       		.byte	0x91
+ 31197 32b1 C06B     		.sleb128 -2624
+ 31198 32b3 35       		.uleb128 0x35
+ 31199 32b4 B00C0000 		.long	0xcb0
+ 31200 32b8 00000000 		.quad	.LBB716
+ 31200      00000000 
+ 31201 32c0 00000000 		.quad	.LBE716
+ 31201      00000000 
+ 31202 32c8 02       		.byte	0x2
+ 31203 32c9 7D03     		.value	0x37d
+ 31204 32cb 32       		.uleb128 0x32
+ 31205 32cc CE0C0000 		.long	0xcce
+ 31206 32d0 03       		.byte	0x3
+ 31207 32d1 91       		.byte	0x91
+ 31208 32d2 D86B     		.sleb128 -2600
+ 31209 32d4 32       		.uleb128 0x32
+ 31210 32d5 C20C0000 		.long	0xcc2
+ 31211 32d9 03       		.byte	0x3
+ 31212 32da 91       		.byte	0x91
+ 31213 32db E06B     		.sleb128 -2592
+ 31214 32dd 33       		.uleb128 0x33
+ 31215 32de 00000000 		.quad	.LBB717
+ 31215      00000000 
+ 31216 32e6 00000000 		.quad	.LBE717
+ 31216      00000000 
+ 31217 32ee 34       		.uleb128 0x34
+ 31218 32ef DA0C0000 		.long	0xcda
+ 31219 32f3 03       		.byte	0x3
+ 31220 32f4 91       		.byte	0x91
+ 31221 32f5 B06C     		.sleb128 -2512
+ 31222 32f7 34       		.uleb128 0x34
+ 31223 32f8 E50C0000 		.long	0xce5
+ 31224 32fc 03       		.byte	0x3
+ 31225 32fd 91       		.byte	0x91
+ 31226 32fe A06C     		.sleb128 -2528
+ 31227 3300 34       		.uleb128 0x34
+ 31228 3301 F00C0000 		.long	0xcf0
+ 31229 3305 03       		.byte	0x3
+ 31230 3306 91       		.byte	0x91
+ 31231 3307 906C     		.sleb128 -2544
+ 31232 3309 34       		.uleb128 0x34
+ 31233 330a FC0C0000 		.long	0xcfc
+ 31234 330e 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 876
+
+
+ 31235 330f 91       		.byte	0x91
+ 31236 3310 806C     		.sleb128 -2560
+ 31237 3312 34       		.uleb128 0x34
+ 31238 3313 080D0000 		.long	0xd08
+ 31239 3317 03       		.byte	0x3
+ 31240 3318 91       		.byte	0x91
+ 31241 3319 FC6B     		.sleb128 -2564
+ 31242 331b 31       		.uleb128 0x31
+ 31243 331c 1F0D0000 		.long	0xd1f
+ 31244 3320 00000000 		.quad	.LBB718
+ 31244      00000000 
+ 31245 3328 00000000 		.quad	.LBE718
+ 31245      00000000 
+ 31246 3330 02       		.byte	0x2
+ 31247 3331 5603     		.value	0x356
+ 31248 3333 4A330000 		.long	0x334a
+ 31249 3337 32       		.uleb128 0x32
+ 31250 3338 3A0D0000 		.long	0xd3a
+ 31251 333c 03       		.byte	0x3
+ 31252 333d 91       		.byte	0x91
+ 31253 333e C06C     		.sleb128 -2496
+ 31254 3340 32       		.uleb128 0x32
+ 31255 3341 300D0000 		.long	0xd30
+ 31256 3345 03       		.byte	0x3
+ 31257 3346 91       		.byte	0x91
+ 31258 3347 D06C     		.sleb128 -2480
+ 31259 3349 00       		.byte	0x0
+ 31260 334a 31       		.uleb128 0x31
+ 31261 334b 450D0000 		.long	0xd45
+ 31262 334f 00000000 		.quad	.LBB720
+ 31262      00000000 
+ 31263 3357 00000000 		.quad	.LBE720
+ 31263      00000000 
+ 31264 335f 02       		.byte	0x2
+ 31265 3360 5E03     		.value	0x35e
+ 31266 3362 79330000 		.long	0x3379
+ 31267 3366 32       		.uleb128 0x32
+ 31268 3367 620D0000 		.long	0xd62
+ 31269 336b 03       		.byte	0x3
+ 31270 336c 91       		.byte	0x91
+ 31271 336d E06C     		.sleb128 -2464
+ 31272 336f 32       		.uleb128 0x32
+ 31273 3370 570D0000 		.long	0xd57
+ 31274 3374 03       		.byte	0x3
+ 31275 3375 91       		.byte	0x91
+ 31276 3376 F06C     		.sleb128 -2448
+ 31277 3378 00       		.byte	0x0
+ 31278 3379 31       		.uleb128 0x31
+ 31279 337a 6E0D0000 		.long	0xd6e
+ 31280 337e 00000000 		.quad	.LBB722
+ 31280      00000000 
+ 31281 3386 00000000 		.quad	.LBE722
+ 31281      00000000 
+ 31282 338e 02       		.byte	0x2
+ 31283 338f 6403     		.value	0x364
+ 31284 3391 DE330000 		.long	0x33de
+ 31285 3395 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 877
+
+
+ 31286 3396 8C0D0000 		.long	0xd8c
+ 31287 339a 03       		.byte	0x3
+ 31288 339b 91       		.byte	0x91
+ 31289 339c 806D     		.sleb128 -2432
+ 31290 339e 32       		.uleb128 0x32
+ 31291 339f 800D0000 		.long	0xd80
+ 31292 33a3 03       		.byte	0x3
+ 31293 33a4 91       		.byte	0x91
+ 31294 33a5 906D     		.sleb128 -2416
+ 31295 33a7 33       		.uleb128 0x33
+ 31296 33a8 00000000 		.quad	.LBB723
+ 31296      00000000 
+ 31297 33b0 00000000 		.quad	.LBE723
+ 31297      00000000 
+ 31298 33b8 34       		.uleb128 0x34
+ 31299 33b9 980D0000 		.long	0xd98
+ 31300 33bd 03       		.byte	0x3
+ 31301 33be 91       		.byte	0x91
+ 31302 33bf F043     		.sleb128 -7696
+ 31303 33c1 34       		.uleb128 0x34
+ 31304 33c2 A40D0000 		.long	0xda4
+ 31305 33c6 03       		.byte	0x3
+ 31306 33c7 91       		.byte	0x91
+ 31307 33c8 E043     		.sleb128 -7712
+ 31308 33ca 34       		.uleb128 0x34
+ 31309 33cb AF0D0000 		.long	0xdaf
+ 31310 33cf 03       		.byte	0x3
+ 31311 33d0 91       		.byte	0x91
+ 31312 33d1 D043     		.sleb128 -7728
+ 31313 33d3 34       		.uleb128 0x34
+ 31314 33d4 BB0D0000 		.long	0xdbb
+ 31315 33d8 03       		.byte	0x3
+ 31316 33d9 91       		.byte	0x91
+ 31317 33da AC6D     		.sleb128 -2388
+ 31318 33dc 00       		.byte	0x0
+ 31319 33dd 00       		.byte	0x0
+ 31320 33de 31       		.uleb128 0x31
+ 31321 33df C70D0000 		.long	0xdc7
+ 31322 33e3 00000000 		.quad	.LBB724
+ 31322      00000000 
+ 31323 33eb 00000000 		.quad	.LBE724
+ 31323      00000000 
+ 31324 33f3 02       		.byte	0x2
+ 31325 33f4 6603     		.value	0x366
+ 31326 33f6 0D340000 		.long	0x340d
+ 31327 33fa 32       		.uleb128 0x32
+ 31328 33fb E20D0000 		.long	0xde2
+ 31329 33ff 03       		.byte	0x3
+ 31330 3400 91       		.byte	0x91
+ 31331 3401 B06D     		.sleb128 -2384
+ 31332 3403 32       		.uleb128 0x32
+ 31333 3404 D80D0000 		.long	0xdd8
+ 31334 3408 03       		.byte	0x3
+ 31335 3409 91       		.byte	0x91
+ 31336 340a C06D     		.sleb128 -2368
+ 31337 340c 00       		.byte	0x0
+ 31338 340d 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 878
+
+
+ 31339 340e 6E0D0000 		.long	0xd6e
+ 31340 3412 00000000 		.quad	.LBB726
+ 31340      00000000 
+ 31341 341a 00000000 		.quad	.LBE726
+ 31341      00000000 
+ 31342 3422 02       		.byte	0x2
+ 31343 3423 6803     		.value	0x368
+ 31344 3425 72340000 		.long	0x3472
+ 31345 3429 32       		.uleb128 0x32
+ 31346 342a 8C0D0000 		.long	0xd8c
+ 31347 342e 03       		.byte	0x3
+ 31348 342f 91       		.byte	0x91
+ 31349 3430 D06D     		.sleb128 -2352
+ 31350 3432 32       		.uleb128 0x32
+ 31351 3433 800D0000 		.long	0xd80
+ 31352 3437 03       		.byte	0x3
+ 31353 3438 91       		.byte	0x91
+ 31354 3439 E06D     		.sleb128 -2336
+ 31355 343b 33       		.uleb128 0x33
+ 31356 343c 00000000 		.quad	.LBB727
+ 31356      00000000 
+ 31357 3444 00000000 		.quad	.LBE727
+ 31357      00000000 
+ 31358 344c 34       		.uleb128 0x34
+ 31359 344d 980D0000 		.long	0xd98
+ 31360 3451 03       		.byte	0x3
+ 31361 3452 91       		.byte	0x91
+ 31362 3453 A044     		.sleb128 -7648
+ 31363 3455 34       		.uleb128 0x34
+ 31364 3456 A40D0000 		.long	0xda4
+ 31365 345a 03       		.byte	0x3
+ 31366 345b 91       		.byte	0x91
+ 31367 345c 9044     		.sleb128 -7664
+ 31368 345e 34       		.uleb128 0x34
+ 31369 345f AF0D0000 		.long	0xdaf
+ 31370 3463 03       		.byte	0x3
+ 31371 3464 91       		.byte	0x91
+ 31372 3465 8044     		.sleb128 -7680
+ 31373 3467 34       		.uleb128 0x34
+ 31374 3468 BB0D0000 		.long	0xdbb
+ 31375 346c 03       		.byte	0x3
+ 31376 346d 91       		.byte	0x91
+ 31377 346e FC6D     		.sleb128 -2308
+ 31378 3470 00       		.byte	0x0
+ 31379 3471 00       		.byte	0x0
+ 31380 3472 31       		.uleb128 0x31
+ 31381 3473 C70D0000 		.long	0xdc7
+ 31382 3477 00000000 		.quad	.LBB728
+ 31382      00000000 
+ 31383 347f 00000000 		.quad	.LBE728
+ 31383      00000000 
+ 31384 3487 02       		.byte	0x2
+ 31385 3488 6A03     		.value	0x36a
+ 31386 348a A1340000 		.long	0x34a1
+ 31387 348e 32       		.uleb128 0x32
+ 31388 348f E20D0000 		.long	0xde2
+ 31389 3493 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 879
+
+
+ 31390 3494 91       		.byte	0x91
+ 31391 3495 806E     		.sleb128 -2304
+ 31392 3497 32       		.uleb128 0x32
+ 31393 3498 D80D0000 		.long	0xdd8
+ 31394 349c 03       		.byte	0x3
+ 31395 349d 91       		.byte	0x91
+ 31396 349e 906E     		.sleb128 -2288
+ 31397 34a0 00       		.byte	0x0
+ 31398 34a1 31       		.uleb128 0x31
+ 31399 34a2 ED0D0000 		.long	0xded
+ 31400 34a6 00000000 		.quad	.LBB730
+ 31400      00000000 
+ 31401 34ae 00000000 		.quad	.LBE730
+ 31401      00000000 
+ 31402 34b6 02       		.byte	0x2
+ 31403 34b7 6C03     		.value	0x36c
+ 31404 34b9 D0340000 		.long	0x34d0
+ 31405 34bd 32       		.uleb128 0x32
+ 31406 34be 0A0E0000 		.long	0xe0a
+ 31407 34c2 03       		.byte	0x3
+ 31408 34c3 91       		.byte	0x91
+ 31409 34c4 A06E     		.sleb128 -2272
+ 31410 34c6 32       		.uleb128 0x32
+ 31411 34c7 FF0D0000 		.long	0xdff
+ 31412 34cb 03       		.byte	0x3
+ 31413 34cc 91       		.byte	0x91
+ 31414 34cd B06E     		.sleb128 -2256
+ 31415 34cf 00       		.byte	0x0
+ 31416 34d0 35       		.uleb128 0x35
+ 31417 34d1 1F0D0000 		.long	0xd1f
+ 31418 34d5 00000000 		.quad	.LBB732
+ 31418      00000000 
+ 31419 34dd 00000000 		.quad	.LBE732
+ 31419      00000000 
+ 31420 34e5 02       		.byte	0x2
+ 31421 34e6 6E03     		.value	0x36e
+ 31422 34e8 32       		.uleb128 0x32
+ 31423 34e9 3A0D0000 		.long	0xd3a
+ 31424 34ed 03       		.byte	0x3
+ 31425 34ee 91       		.byte	0x91
+ 31426 34ef C06E     		.sleb128 -2240
+ 31427 34f1 32       		.uleb128 0x32
+ 31428 34f2 300D0000 		.long	0xd30
+ 31429 34f6 03       		.byte	0x3
+ 31430 34f7 91       		.byte	0x91
+ 31431 34f8 D06E     		.sleb128 -2224
+ 31432 34fa 00       		.byte	0x0
+ 31433 34fb 00       		.byte	0x0
+ 31434 34fc 00       		.byte	0x0
+ 31435 34fd 00       		.byte	0x0
+ 31436 34fe 36       		.uleb128 0x36
+ 31437 34ff 00000000 		.quad	.LBB734
+ 31437      00000000 
+ 31438 3507 00000000 		.quad	.LBE734
+ 31438      00000000 
+ 31439 350f 1D350000 		.long	0x351d
+ 31440 3513 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 880
+
+
+ 31441 3514 180C0000 		.long	0xc18
+ 31442 3518 03       		.byte	0x3
+ 31443 3519 91       		.byte	0x91
+ 31444 351a B043     		.sleb128 -7760
+ 31445 351c 00       		.byte	0x0
+ 31446 351d 31       		.uleb128 0x31
+ 31447 351e 160E0000 		.long	0xe16
+ 31448 3522 00000000 		.quad	.LBB735
+ 31448      00000000 
+ 31449 352a 00000000 		.quad	.LBE735
+ 31449      00000000 
+ 31450 3532 02       		.byte	0x2
+ 31451 3533 9406     		.value	0x694
+ 31452 3535 C5350000 		.long	0x35c5
+ 31453 3539 32       		.uleb128 0x32
+ 31454 353a 280E0000 		.long	0xe28
+ 31455 353e 03       		.byte	0x3
+ 31456 353f 91       		.byte	0x91
+ 31457 3540 E06E     		.sleb128 -2208
+ 31458 3542 33       		.uleb128 0x33
+ 31459 3543 00000000 		.quad	.LBB736
+ 31459      00000000 
+ 31460 354b 00000000 		.quad	.LBE736
+ 31460      00000000 
+ 31461 3553 34       		.uleb128 0x34
+ 31462 3554 340E0000 		.long	0xe34
+ 31463 3558 09       		.byte	0x9
+ 31464 3559 03       		.byte	0x3
+ 31465 355a 00000000 		.quad	ShiftRowTable.6768
+ 31465      00000000 
+ 31466 3562 35       		.uleb128 0x35
+ 31467 3563 6E0D0000 		.long	0xd6e
+ 31468 3567 00000000 		.quad	.LBB737
+ 31468      00000000 
+ 31469 356f 00000000 		.quad	.LBE737
+ 31469      00000000 
+ 31470 3577 02       		.byte	0x2
+ 31471 3578 9B02     		.value	0x29b
+ 31472 357a 32       		.uleb128 0x32
+ 31473 357b 8C0D0000 		.long	0xd8c
+ 31474 357f 03       		.byte	0x3
+ 31475 3580 91       		.byte	0x91
+ 31476 3581 F06E     		.sleb128 -2192
+ 31477 3583 32       		.uleb128 0x32
+ 31478 3584 800D0000 		.long	0xd80
+ 31479 3588 03       		.byte	0x3
+ 31480 3589 91       		.byte	0x91
+ 31481 358a 806F     		.sleb128 -2176
+ 31482 358c 33       		.uleb128 0x33
+ 31483 358d 00000000 		.quad	.LBB738
+ 31483      00000000 
+ 31484 3595 00000000 		.quad	.LBE738
+ 31484      00000000 
+ 31485 359d 34       		.uleb128 0x34
+ 31486 359e 980D0000 		.long	0xd98
+ 31487 35a2 03       		.byte	0x3
+ 31488 35a3 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 881
+
+
+ 31489 35a4 D044     		.sleb128 -7600
+ 31490 35a6 34       		.uleb128 0x34
+ 31491 35a7 A40D0000 		.long	0xda4
+ 31492 35ab 03       		.byte	0x3
+ 31493 35ac 91       		.byte	0x91
+ 31494 35ad C044     		.sleb128 -7616
+ 31495 35af 34       		.uleb128 0x34
+ 31496 35b0 AF0D0000 		.long	0xdaf
+ 31497 35b4 03       		.byte	0x3
+ 31498 35b5 91       		.byte	0x91
+ 31499 35b6 B044     		.sleb128 -7632
+ 31500 35b8 34       		.uleb128 0x34
+ 31501 35b9 BB0D0000 		.long	0xdbb
+ 31502 35bd 03       		.byte	0x3
+ 31503 35be 91       		.byte	0x91
+ 31504 35bf 9C6F     		.sleb128 -2148
+ 31505 35c1 00       		.byte	0x0
+ 31506 35c2 00       		.byte	0x0
+ 31507 35c3 00       		.byte	0x0
+ 31508 35c4 00       		.byte	0x0
+ 31509 35c5 36       		.uleb128 0x36
+ 31510 35c6 00000000 		.quad	.LBB739
+ 31510      00000000 
+ 31511 35ce 00000000 		.quad	.LBE739
+ 31511      00000000 
+ 31512 35d6 E4350000 		.long	0x35e4
+ 31513 35da 34       		.uleb128 0x34
+ 31514 35db 280C0000 		.long	0xc28
+ 31515 35df 03       		.byte	0x3
+ 31516 35e0 91       		.byte	0x91
+ 31517 35e1 A043     		.sleb128 -7776
+ 31518 35e3 00       		.byte	0x0
+ 31519 35e4 31       		.uleb128 0x31
+ 31520 35e5 520E0000 		.long	0xe52
+ 31521 35e9 00000000 		.quad	.LBB740
+ 31521      00000000 
+ 31522 35f1 00000000 		.quad	.LBE740
+ 31522      00000000 
+ 31523 35f9 02       		.byte	0x2
+ 31524 35fa 9606     		.value	0x696
+ 31525 35fc 13360000 		.long	0x3613
+ 31526 3600 32       		.uleb128 0x32
+ 31527 3601 6D0E0000 		.long	0xe6d
+ 31528 3605 03       		.byte	0x3
+ 31529 3606 91       		.byte	0x91
+ 31530 3607 A06F     		.sleb128 -2144
+ 31531 3609 32       		.uleb128 0x32
+ 31532 360a 630E0000 		.long	0xe63
+ 31533 360e 03       		.byte	0x3
+ 31534 360f 91       		.byte	0x91
+ 31535 3610 B06F     		.sleb128 -2128
+ 31536 3612 00       		.byte	0x0
+ 31537 3613 36       		.uleb128 0x36
+ 31538 3614 00000000 		.quad	.LBB742
+ 31538      00000000 
+ 31539 361c 00000000 		.quad	.LBE742
+ 31539      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 882
+
+
+ 31540 3624 32360000 		.long	0x3632
+ 31541 3628 34       		.uleb128 0x34
+ 31542 3629 380C0000 		.long	0xc38
+ 31543 362d 03       		.byte	0x3
+ 31544 362e 91       		.byte	0x91
+ 31545 362f 9043     		.sleb128 -7792
+ 31546 3631 00       		.byte	0x0
+ 31547 3632 31       		.uleb128 0x31
+ 31548 3633 780E0000 		.long	0xe78
+ 31549 3637 00000000 		.quad	.LBB743
+ 31549      00000000 
+ 31550 363f 00000000 		.quad	.LBE743
+ 31550      00000000 
+ 31551 3647 02       		.byte	0x2
+ 31552 3648 9806     		.value	0x698
+ 31553 364a 73360000 		.long	0x3673
+ 31554 364e 32       		.uleb128 0x32
+ 31555 364f 8A0E0000 		.long	0xe8a
+ 31556 3653 03       		.byte	0x3
+ 31557 3654 91       		.byte	0x91
+ 31558 3655 C06F     		.sleb128 -2112
+ 31559 3657 33       		.uleb128 0x33
+ 31560 3658 00000000 		.quad	.LBB744
+ 31560      00000000 
+ 31561 3660 00000000 		.quad	.LBE744
+ 31561      00000000 
+ 31562 3668 34       		.uleb128 0x34
+ 31563 3669 960E0000 		.long	0xe96
+ 31564 366d 03       		.byte	0x3
+ 31565 366e 91       		.byte	0x91
+ 31566 366f E044     		.sleb128 -7584
+ 31567 3671 00       		.byte	0x0
+ 31568 3672 00       		.byte	0x0
+ 31569 3673 33       		.uleb128 0x33
+ 31570 3674 00000000 		.quad	.LBB745
+ 31570      00000000 
+ 31571 367c 00000000 		.quad	.LBE745
+ 31571      00000000 
+ 31572 3684 34       		.uleb128 0x34
+ 31573 3685 440C0000 		.long	0xc44
+ 31574 3689 03       		.byte	0x3
+ 31575 368a 91       		.byte	0x91
+ 31576 368b 8043     		.sleb128 -7808
+ 31577 368d 00       		.byte	0x0
+ 31578 368e 00       		.byte	0x0
+ 31579 368f 00       		.byte	0x0
+ 31580 3690 31       		.uleb128 0x31
+ 31581 3691 A30E0000 		.long	0xea3
+ 31582 3695 00000000 		.quad	.LBB746
+ 31582      00000000 
+ 31583 369d 00000000 		.quad	.LBE746
+ 31583      00000000 
+ 31584 36a5 02       		.byte	0x2
+ 31585 36a6 D606     		.value	0x6d6
+ 31586 36a8 91370000 		.long	0x3791
+ 31587 36ac 32       		.uleb128 0x32
+ 31588 36ad B50E0000 		.long	0xeb5
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 883
+
+
+ 31589 36b1 03       		.byte	0x3
+ 31590 36b2 91       		.byte	0x91
+ 31591 36b3 D06F     		.sleb128 -2096
+ 31592 36b5 33       		.uleb128 0x33
+ 31593 36b6 00000000 		.quad	.LBB747
+ 31593      00000000 
+ 31594 36be 00000000 		.quad	.LBE747
+ 31594      00000000 
+ 31595 36c6 34       		.uleb128 0x34
+ 31596 36c7 C10E0000 		.long	0xec1
+ 31597 36cb 04       		.byte	0x4
+ 31598 36cc 76       		.byte	0x76
+ 31599 36cd E0B37F   		.sleb128 -9760
+ 31600 36d0 31       		.uleb128 0x31
+ 31601 36d1 CE0E0000 		.long	0xece
+ 31602 36d5 00000000 		.quad	.LBB748
+ 31602      00000000 
+ 31603 36dd 00000000 		.quad	.LBE748
+ 31603      00000000 
+ 31604 36e5 02       		.byte	0x2
+ 31605 36e6 1F06     		.value	0x61f
+ 31606 36e8 11370000 		.long	0x3711
+ 31607 36ec 32       		.uleb128 0x32
+ 31608 36ed E00E0000 		.long	0xee0
+ 31609 36f1 03       		.byte	0x3
+ 31610 36f2 91       		.byte	0x91
+ 31611 36f3 E06F     		.sleb128 -2080
+ 31612 36f5 33       		.uleb128 0x33
+ 31613 36f6 00000000 		.quad	.LBB749
+ 31613      00000000 
+ 31614 36fe 00000000 		.quad	.LBE749
+ 31614      00000000 
+ 31615 3706 34       		.uleb128 0x34
+ 31616 3707 EC0E0000 		.long	0xeec
+ 31617 370b 03       		.byte	0x3
+ 31618 370c 91       		.byte	0x91
+ 31619 370d F044     		.sleb128 -7568
+ 31620 370f 00       		.byte	0x0
+ 31621 3710 00       		.byte	0x0
+ 31622 3711 31       		.uleb128 0x31
+ 31623 3712 CE0E0000 		.long	0xece
+ 31624 3716 00000000 		.quad	.LBB750
+ 31624      00000000 
+ 31625 371e 00000000 		.quad	.LBE750
+ 31625      00000000 
+ 31626 3726 02       		.byte	0x2
+ 31627 3727 2006     		.value	0x620
+ 31628 3729 52370000 		.long	0x3752
+ 31629 372d 32       		.uleb128 0x32
+ 31630 372e E00E0000 		.long	0xee0
+ 31631 3732 03       		.byte	0x3
+ 31632 3733 91       		.byte	0x91
+ 31633 3734 F06F     		.sleb128 -2064
+ 31634 3736 33       		.uleb128 0x33
+ 31635 3737 00000000 		.quad	.LBB751
+ 31635      00000000 
+ 31636 373f 00000000 		.quad	.LBE751
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 884
+
+
+ 31636      00000000 
+ 31637 3747 34       		.uleb128 0x34
+ 31638 3748 EC0E0000 		.long	0xeec
+ 31639 374c 03       		.byte	0x3
+ 31640 374d 91       		.byte	0x91
+ 31641 374e 8045     		.sleb128 -7552
+ 31642 3750 00       		.byte	0x0
+ 31643 3751 00       		.byte	0x0
+ 31644 3752 35       		.uleb128 0x35
+ 31645 3753 CE0E0000 		.long	0xece
+ 31646 3757 00000000 		.quad	.LBB752
+ 31646      00000000 
+ 31647 375f 00000000 		.quad	.LBE752
+ 31647      00000000 
+ 31648 3767 02       		.byte	0x2
+ 31649 3768 2106     		.value	0x621
+ 31650 376a 32       		.uleb128 0x32
+ 31651 376b E00E0000 		.long	0xee0
+ 31652 376f 03       		.byte	0x3
+ 31653 3770 91       		.byte	0x91
+ 31654 3771 8070     		.sleb128 -2048
+ 31655 3773 33       		.uleb128 0x33
+ 31656 3774 00000000 		.quad	.LBB753
+ 31656      00000000 
+ 31657 377c 00000000 		.quad	.LBE753
+ 31657      00000000 
+ 31658 3784 34       		.uleb128 0x34
+ 31659 3785 EC0E0000 		.long	0xeec
+ 31660 3789 03       		.byte	0x3
+ 31661 378a 91       		.byte	0x91
+ 31662 378b 9045     		.sleb128 -7536
+ 31663 378d 00       		.byte	0x0
+ 31664 378e 00       		.byte	0x0
+ 31665 378f 00       		.byte	0x0
+ 31666 3790 00       		.byte	0x0
+ 31667 3791 31       		.uleb128 0x31
+ 31668 3792 D10B0000 		.long	0xbd1
+ 31669 3796 00000000 		.quad	.LBB754
+ 31669      00000000 
+ 31670 379e 00000000 		.quad	.LBE754
+ 31670      00000000 
+ 31671 37a6 02       		.byte	0x2
+ 31672 37a7 D706     		.value	0x6d7
+ 31673 37a9 393C0000 		.long	0x3c39
+ 31674 37ad 32       		.uleb128 0x32
+ 31675 37ae EF0B0000 		.long	0xbef
+ 31676 37b2 03       		.byte	0x3
+ 31677 37b3 91       		.byte	0x91
+ 31678 37b4 9C70     		.sleb128 -2020
+ 31679 37b6 32       		.uleb128 0x32
+ 31680 37b7 E30B0000 		.long	0xbe3
+ 31681 37bb 03       		.byte	0x3
+ 31682 37bc 91       		.byte	0x91
+ 31683 37bd A070     		.sleb128 -2016
+ 31684 37bf 33       		.uleb128 0x33
+ 31685 37c0 00000000 		.quad	.LBB755
+ 31685      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 885
+
+
+ 31686 37c8 00000000 		.quad	.LBE755
+ 31686      00000000 
+ 31687 37d0 34       		.uleb128 0x34
+ 31688 37d1 FB0B0000 		.long	0xbfb
+ 31689 37d5 04       		.byte	0x4
+ 31690 37d6 76       		.byte	0x76
+ 31691 37d7 80B47F   		.sleb128 -9728
+ 31692 37da 34       		.uleb128 0x34
+ 31693 37db 070C0000 		.long	0xc07
+ 31694 37df 04       		.byte	0x4
+ 31695 37e0 76       		.byte	0x76
+ 31696 37e1 F0B37F   		.sleb128 -9744
+ 31697 37e4 31       		.uleb128 0x31
+ 31698 37e5 500C0000 		.long	0xc50
+ 31699 37e9 00000000 		.quad	.LBB756
+ 31699      00000000 
+ 31700 37f1 00000000 		.quad	.LBE756
+ 31700      00000000 
+ 31701 37f9 02       		.byte	0x2
+ 31702 37fa 9106     		.value	0x691
+ 31703 37fc 37380000 		.long	0x3837
+ 31704 3800 32       		.uleb128 0x32
+ 31705 3801 7A0C0000 		.long	0xc7a
+ 31706 3805 03       		.byte	0x3
+ 31707 3806 91       		.byte	0x91
+ 31708 3807 B870     		.sleb128 -1992
+ 31709 3809 32       		.uleb128 0x32
+ 31710 380a 6E0C0000 		.long	0xc6e
+ 31711 380e 03       		.byte	0x3
+ 31712 380f 91       		.byte	0x91
+ 31713 3810 BC70     		.sleb128 -1988
+ 31714 3812 32       		.uleb128 0x32
+ 31715 3813 620C0000 		.long	0xc62
+ 31716 3817 03       		.byte	0x3
+ 31717 3818 91       		.byte	0x91
+ 31718 3819 C070     		.sleb128 -1984
+ 31719 381b 33       		.uleb128 0x33
+ 31720 381c 00000000 		.quad	.LBB757
+ 31720      00000000 
+ 31721 3824 00000000 		.quad	.LBE757
+ 31721      00000000 
+ 31722 382c 34       		.uleb128 0x34
+ 31723 382d 860C0000 		.long	0xc86
+ 31724 3831 03       		.byte	0x3
+ 31725 3832 91       		.byte	0x91
+ 31726 3833 E045     		.sleb128 -7456
+ 31727 3835 00       		.byte	0x0
+ 31728 3836 00       		.byte	0x0
+ 31729 3837 31       		.uleb128 0x31
+ 31730 3838 910C0000 		.long	0xc91
+ 31731 383c 00000000 		.quad	.LBB758
+ 31731      00000000 
+ 31732 3844 00000000 		.quad	.LBE758
+ 31732      00000000 
+ 31733 384c 02       		.byte	0x2
+ 31734 384d 9206     		.value	0x692
+ 31735 384f A73A0000 		.long	0x3aa7
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 886
+
+
+ 31736 3853 32       		.uleb128 0x32
+ 31737 3854 A30C0000 		.long	0xca3
+ 31738 3858 03       		.byte	0x3
+ 31739 3859 91       		.byte	0x91
+ 31740 385a D070     		.sleb128 -1968
+ 31741 385c 35       		.uleb128 0x35
+ 31742 385d B00C0000 		.long	0xcb0
+ 31743 3861 00000000 		.quad	.LBB760
+ 31743      00000000 
+ 31744 3869 00000000 		.quad	.LBE760
+ 31744      00000000 
+ 31745 3871 02       		.byte	0x2
+ 31746 3872 7D03     		.value	0x37d
+ 31747 3874 32       		.uleb128 0x32
+ 31748 3875 CE0C0000 		.long	0xcce
+ 31749 3879 03       		.byte	0x3
+ 31750 387a 91       		.byte	0x91
+ 31751 387b E870     		.sleb128 -1944
+ 31752 387d 32       		.uleb128 0x32
+ 31753 387e C20C0000 		.long	0xcc2
+ 31754 3882 03       		.byte	0x3
+ 31755 3883 91       		.byte	0x91
+ 31756 3884 F070     		.sleb128 -1936
+ 31757 3886 33       		.uleb128 0x33
+ 31758 3887 00000000 		.quad	.LBB761
+ 31758      00000000 
+ 31759 388f 00000000 		.quad	.LBE761
+ 31759      00000000 
+ 31760 3897 34       		.uleb128 0x34
+ 31761 3898 DA0C0000 		.long	0xcda
+ 31762 389c 03       		.byte	0x3
+ 31763 389d 91       		.byte	0x91
+ 31764 389e C071     		.sleb128 -1856
+ 31765 38a0 34       		.uleb128 0x34
+ 31766 38a1 E50C0000 		.long	0xce5
+ 31767 38a5 03       		.byte	0x3
+ 31768 38a6 91       		.byte	0x91
+ 31769 38a7 B071     		.sleb128 -1872
+ 31770 38a9 34       		.uleb128 0x34
+ 31771 38aa F00C0000 		.long	0xcf0
+ 31772 38ae 03       		.byte	0x3
+ 31773 38af 91       		.byte	0x91
+ 31774 38b0 A071     		.sleb128 -1888
+ 31775 38b2 34       		.uleb128 0x34
+ 31776 38b3 FC0C0000 		.long	0xcfc
+ 31777 38b7 03       		.byte	0x3
+ 31778 38b8 91       		.byte	0x91
+ 31779 38b9 9071     		.sleb128 -1904
+ 31780 38bb 34       		.uleb128 0x34
+ 31781 38bc 080D0000 		.long	0xd08
+ 31782 38c0 03       		.byte	0x3
+ 31783 38c1 91       		.byte	0x91
+ 31784 38c2 8C71     		.sleb128 -1908
+ 31785 38c4 31       		.uleb128 0x31
+ 31786 38c5 1F0D0000 		.long	0xd1f
+ 31787 38c9 00000000 		.quad	.LBB762
+ 31787      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 887
+
+
+ 31788 38d1 00000000 		.quad	.LBE762
+ 31788      00000000 
+ 31789 38d9 02       		.byte	0x2
+ 31790 38da 5603     		.value	0x356
+ 31791 38dc F3380000 		.long	0x38f3
+ 31792 38e0 32       		.uleb128 0x32
+ 31793 38e1 3A0D0000 		.long	0xd3a
+ 31794 38e5 03       		.byte	0x3
+ 31795 38e6 91       		.byte	0x91
+ 31796 38e7 D071     		.sleb128 -1840
+ 31797 38e9 32       		.uleb128 0x32
+ 31798 38ea 300D0000 		.long	0xd30
+ 31799 38ee 03       		.byte	0x3
+ 31800 38ef 91       		.byte	0x91
+ 31801 38f0 E071     		.sleb128 -1824
+ 31802 38f2 00       		.byte	0x0
+ 31803 38f3 31       		.uleb128 0x31
+ 31804 38f4 450D0000 		.long	0xd45
+ 31805 38f8 00000000 		.quad	.LBB764
+ 31805      00000000 
+ 31806 3900 00000000 		.quad	.LBE764
+ 31806      00000000 
+ 31807 3908 02       		.byte	0x2
+ 31808 3909 5E03     		.value	0x35e
+ 31809 390b 22390000 		.long	0x3922
+ 31810 390f 32       		.uleb128 0x32
+ 31811 3910 620D0000 		.long	0xd62
+ 31812 3914 03       		.byte	0x3
+ 31813 3915 91       		.byte	0x91
+ 31814 3916 F071     		.sleb128 -1808
+ 31815 3918 32       		.uleb128 0x32
+ 31816 3919 570D0000 		.long	0xd57
+ 31817 391d 03       		.byte	0x3
+ 31818 391e 91       		.byte	0x91
+ 31819 391f 8072     		.sleb128 -1792
+ 31820 3921 00       		.byte	0x0
+ 31821 3922 31       		.uleb128 0x31
+ 31822 3923 6E0D0000 		.long	0xd6e
+ 31823 3927 00000000 		.quad	.LBB766
+ 31823      00000000 
+ 31824 392f 00000000 		.quad	.LBE766
+ 31824      00000000 
+ 31825 3937 02       		.byte	0x2
+ 31826 3938 6403     		.value	0x364
+ 31827 393a 87390000 		.long	0x3987
+ 31828 393e 32       		.uleb128 0x32
+ 31829 393f 8C0D0000 		.long	0xd8c
+ 31830 3943 03       		.byte	0x3
+ 31831 3944 91       		.byte	0x91
+ 31832 3945 9072     		.sleb128 -1776
+ 31833 3947 32       		.uleb128 0x32
+ 31834 3948 800D0000 		.long	0xd80
+ 31835 394c 03       		.byte	0x3
+ 31836 394d 91       		.byte	0x91
+ 31837 394e A072     		.sleb128 -1760
+ 31838 3950 33       		.uleb128 0x33
+ 31839 3951 00000000 		.quad	.LBB767
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 888
+
+
+ 31839      00000000 
+ 31840 3959 00000000 		.quad	.LBE767
+ 31840      00000000 
+ 31841 3961 34       		.uleb128 0x34
+ 31842 3962 980D0000 		.long	0xd98
+ 31843 3966 03       		.byte	0x3
+ 31844 3967 91       		.byte	0x91
+ 31845 3968 9046     		.sleb128 -7408
+ 31846 396a 34       		.uleb128 0x34
+ 31847 396b A40D0000 		.long	0xda4
+ 31848 396f 03       		.byte	0x3
+ 31849 3970 91       		.byte	0x91
+ 31850 3971 8046     		.sleb128 -7424
+ 31851 3973 34       		.uleb128 0x34
+ 31852 3974 AF0D0000 		.long	0xdaf
+ 31853 3978 03       		.byte	0x3
+ 31854 3979 91       		.byte	0x91
+ 31855 397a F045     		.sleb128 -7440
+ 31856 397c 34       		.uleb128 0x34
+ 31857 397d BB0D0000 		.long	0xdbb
+ 31858 3981 03       		.byte	0x3
+ 31859 3982 91       		.byte	0x91
+ 31860 3983 BC72     		.sleb128 -1732
+ 31861 3985 00       		.byte	0x0
+ 31862 3986 00       		.byte	0x0
+ 31863 3987 31       		.uleb128 0x31
+ 31864 3988 C70D0000 		.long	0xdc7
+ 31865 398c 00000000 		.quad	.LBB768
+ 31865      00000000 
+ 31866 3994 00000000 		.quad	.LBE768
+ 31866      00000000 
+ 31867 399c 02       		.byte	0x2
+ 31868 399d 6603     		.value	0x366
+ 31869 399f B6390000 		.long	0x39b6
+ 31870 39a3 32       		.uleb128 0x32
+ 31871 39a4 E20D0000 		.long	0xde2
+ 31872 39a8 03       		.byte	0x3
+ 31873 39a9 91       		.byte	0x91
+ 31874 39aa C072     		.sleb128 -1728
+ 31875 39ac 32       		.uleb128 0x32
+ 31876 39ad D80D0000 		.long	0xdd8
+ 31877 39b1 03       		.byte	0x3
+ 31878 39b2 91       		.byte	0x91
+ 31879 39b3 D072     		.sleb128 -1712
+ 31880 39b5 00       		.byte	0x0
+ 31881 39b6 31       		.uleb128 0x31
+ 31882 39b7 6E0D0000 		.long	0xd6e
+ 31883 39bb 00000000 		.quad	.LBB770
+ 31883      00000000 
+ 31884 39c3 00000000 		.quad	.LBE770
+ 31884      00000000 
+ 31885 39cb 02       		.byte	0x2
+ 31886 39cc 6803     		.value	0x368
+ 31887 39ce 1B3A0000 		.long	0x3a1b
+ 31888 39d2 32       		.uleb128 0x32
+ 31889 39d3 8C0D0000 		.long	0xd8c
+ 31890 39d7 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 889
+
+
+ 31891 39d8 91       		.byte	0x91
+ 31892 39d9 E072     		.sleb128 -1696
+ 31893 39db 32       		.uleb128 0x32
+ 31894 39dc 800D0000 		.long	0xd80
+ 31895 39e0 03       		.byte	0x3
+ 31896 39e1 91       		.byte	0x91
+ 31897 39e2 F072     		.sleb128 -1680
+ 31898 39e4 33       		.uleb128 0x33
+ 31899 39e5 00000000 		.quad	.LBB771
+ 31899      00000000 
+ 31900 39ed 00000000 		.quad	.LBE771
+ 31900      00000000 
+ 31901 39f5 34       		.uleb128 0x34
+ 31902 39f6 980D0000 		.long	0xd98
+ 31903 39fa 03       		.byte	0x3
+ 31904 39fb 91       		.byte	0x91
+ 31905 39fc C046     		.sleb128 -7360
+ 31906 39fe 34       		.uleb128 0x34
+ 31907 39ff A40D0000 		.long	0xda4
+ 31908 3a03 03       		.byte	0x3
+ 31909 3a04 91       		.byte	0x91
+ 31910 3a05 B046     		.sleb128 -7376
+ 31911 3a07 34       		.uleb128 0x34
+ 31912 3a08 AF0D0000 		.long	0xdaf
+ 31913 3a0c 03       		.byte	0x3
+ 31914 3a0d 91       		.byte	0x91
+ 31915 3a0e A046     		.sleb128 -7392
+ 31916 3a10 34       		.uleb128 0x34
+ 31917 3a11 BB0D0000 		.long	0xdbb
+ 31918 3a15 03       		.byte	0x3
+ 31919 3a16 91       		.byte	0x91
+ 31920 3a17 8C73     		.sleb128 -1652
+ 31921 3a19 00       		.byte	0x0
+ 31922 3a1a 00       		.byte	0x0
+ 31923 3a1b 31       		.uleb128 0x31
+ 31924 3a1c C70D0000 		.long	0xdc7
+ 31925 3a20 00000000 		.quad	.LBB772
+ 31925      00000000 
+ 31926 3a28 00000000 		.quad	.LBE772
+ 31926      00000000 
+ 31927 3a30 02       		.byte	0x2
+ 31928 3a31 6A03     		.value	0x36a
+ 31929 3a33 4A3A0000 		.long	0x3a4a
+ 31930 3a37 32       		.uleb128 0x32
+ 31931 3a38 E20D0000 		.long	0xde2
+ 31932 3a3c 03       		.byte	0x3
+ 31933 3a3d 91       		.byte	0x91
+ 31934 3a3e 9073     		.sleb128 -1648
+ 31935 3a40 32       		.uleb128 0x32
+ 31936 3a41 D80D0000 		.long	0xdd8
+ 31937 3a45 03       		.byte	0x3
+ 31938 3a46 91       		.byte	0x91
+ 31939 3a47 A073     		.sleb128 -1632
+ 31940 3a49 00       		.byte	0x0
+ 31941 3a4a 31       		.uleb128 0x31
+ 31942 3a4b ED0D0000 		.long	0xded
+ 31943 3a4f 00000000 		.quad	.LBB774
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 890
+
+
+ 31943      00000000 
+ 31944 3a57 00000000 		.quad	.LBE774
+ 31944      00000000 
+ 31945 3a5f 02       		.byte	0x2
+ 31946 3a60 6C03     		.value	0x36c
+ 31947 3a62 793A0000 		.long	0x3a79
+ 31948 3a66 32       		.uleb128 0x32
+ 31949 3a67 0A0E0000 		.long	0xe0a
+ 31950 3a6b 03       		.byte	0x3
+ 31951 3a6c 91       		.byte	0x91
+ 31952 3a6d B073     		.sleb128 -1616
+ 31953 3a6f 32       		.uleb128 0x32
+ 31954 3a70 FF0D0000 		.long	0xdff
+ 31955 3a74 03       		.byte	0x3
+ 31956 3a75 91       		.byte	0x91
+ 31957 3a76 C073     		.sleb128 -1600
+ 31958 3a78 00       		.byte	0x0
+ 31959 3a79 35       		.uleb128 0x35
+ 31960 3a7a 1F0D0000 		.long	0xd1f
+ 31961 3a7e 00000000 		.quad	.LBB776
+ 31961      00000000 
+ 31962 3a86 00000000 		.quad	.LBE776
+ 31962      00000000 
+ 31963 3a8e 02       		.byte	0x2
+ 31964 3a8f 6E03     		.value	0x36e
+ 31965 3a91 32       		.uleb128 0x32
+ 31966 3a92 3A0D0000 		.long	0xd3a
+ 31967 3a96 03       		.byte	0x3
+ 31968 3a97 91       		.byte	0x91
+ 31969 3a98 D073     		.sleb128 -1584
+ 31970 3a9a 32       		.uleb128 0x32
+ 31971 3a9b 300D0000 		.long	0xd30
+ 31972 3a9f 03       		.byte	0x3
+ 31973 3aa0 91       		.byte	0x91
+ 31974 3aa1 E073     		.sleb128 -1568
+ 31975 3aa3 00       		.byte	0x0
+ 31976 3aa4 00       		.byte	0x0
+ 31977 3aa5 00       		.byte	0x0
+ 31978 3aa6 00       		.byte	0x0
+ 31979 3aa7 36       		.uleb128 0x36
+ 31980 3aa8 00000000 		.quad	.LBB778
+ 31980      00000000 
+ 31981 3ab0 00000000 		.quad	.LBE778
+ 31981      00000000 
+ 31982 3ab8 C63A0000 		.long	0x3ac6
+ 31983 3abc 34       		.uleb128 0x34
+ 31984 3abd 180C0000 		.long	0xc18
+ 31985 3ac1 03       		.byte	0x3
+ 31986 3ac2 91       		.byte	0x91
+ 31987 3ac3 D045     		.sleb128 -7472
+ 31988 3ac5 00       		.byte	0x0
+ 31989 3ac6 31       		.uleb128 0x31
+ 31990 3ac7 160E0000 		.long	0xe16
+ 31991 3acb 00000000 		.quad	.LBB779
+ 31991      00000000 
+ 31992 3ad3 00000000 		.quad	.LBE779
+ 31992      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 891
+
+
+ 31993 3adb 02       		.byte	0x2
+ 31994 3adc 9406     		.value	0x694
+ 31995 3ade 6E3B0000 		.long	0x3b6e
+ 31996 3ae2 32       		.uleb128 0x32
+ 31997 3ae3 280E0000 		.long	0xe28
+ 31998 3ae7 03       		.byte	0x3
+ 31999 3ae8 91       		.byte	0x91
+ 32000 3ae9 F073     		.sleb128 -1552
+ 32001 3aeb 33       		.uleb128 0x33
+ 32002 3aec 00000000 		.quad	.LBB780
+ 32002      00000000 
+ 32003 3af4 00000000 		.quad	.LBE780
+ 32003      00000000 
+ 32004 3afc 34       		.uleb128 0x34
+ 32005 3afd 340E0000 		.long	0xe34
+ 32006 3b01 09       		.byte	0x9
+ 32007 3b02 03       		.byte	0x3
+ 32008 3b03 00000000 		.quad	ShiftRowTable.6768
+ 32008      00000000 
+ 32009 3b0b 35       		.uleb128 0x35
+ 32010 3b0c 6E0D0000 		.long	0xd6e
+ 32011 3b10 00000000 		.quad	.LBB781
+ 32011      00000000 
+ 32012 3b18 00000000 		.quad	.LBE781
+ 32012      00000000 
+ 32013 3b20 02       		.byte	0x2
+ 32014 3b21 9B02     		.value	0x29b
+ 32015 3b23 32       		.uleb128 0x32
+ 32016 3b24 8C0D0000 		.long	0xd8c
+ 32017 3b28 03       		.byte	0x3
+ 32018 3b29 91       		.byte	0x91
+ 32019 3b2a 8074     		.sleb128 -1536
+ 32020 3b2c 32       		.uleb128 0x32
+ 32021 3b2d 800D0000 		.long	0xd80
+ 32022 3b31 03       		.byte	0x3
+ 32023 3b32 91       		.byte	0x91
+ 32024 3b33 9074     		.sleb128 -1520
+ 32025 3b35 33       		.uleb128 0x33
+ 32026 3b36 00000000 		.quad	.LBB782
+ 32026      00000000 
+ 32027 3b3e 00000000 		.quad	.LBE782
+ 32027      00000000 
+ 32028 3b46 34       		.uleb128 0x34
+ 32029 3b47 980D0000 		.long	0xd98
+ 32030 3b4b 03       		.byte	0x3
+ 32031 3b4c 91       		.byte	0x91
+ 32032 3b4d F046     		.sleb128 -7312
+ 32033 3b4f 34       		.uleb128 0x34
+ 32034 3b50 A40D0000 		.long	0xda4
+ 32035 3b54 03       		.byte	0x3
+ 32036 3b55 91       		.byte	0x91
+ 32037 3b56 E046     		.sleb128 -7328
+ 32038 3b58 34       		.uleb128 0x34
+ 32039 3b59 AF0D0000 		.long	0xdaf
+ 32040 3b5d 03       		.byte	0x3
+ 32041 3b5e 91       		.byte	0x91
+ 32042 3b5f D046     		.sleb128 -7344
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 892
+
+
+ 32043 3b61 34       		.uleb128 0x34
+ 32044 3b62 BB0D0000 		.long	0xdbb
+ 32045 3b66 03       		.byte	0x3
+ 32046 3b67 91       		.byte	0x91
+ 32047 3b68 AC74     		.sleb128 -1492
+ 32048 3b6a 00       		.byte	0x0
+ 32049 3b6b 00       		.byte	0x0
+ 32050 3b6c 00       		.byte	0x0
+ 32051 3b6d 00       		.byte	0x0
+ 32052 3b6e 36       		.uleb128 0x36
+ 32053 3b6f 00000000 		.quad	.LBB783
+ 32053      00000000 
+ 32054 3b77 00000000 		.quad	.LBE783
+ 32054      00000000 
+ 32055 3b7f 8D3B0000 		.long	0x3b8d
+ 32056 3b83 34       		.uleb128 0x34
+ 32057 3b84 280C0000 		.long	0xc28
+ 32058 3b88 03       		.byte	0x3
+ 32059 3b89 91       		.byte	0x91
+ 32060 3b8a C045     		.sleb128 -7488
+ 32061 3b8c 00       		.byte	0x0
+ 32062 3b8d 31       		.uleb128 0x31
+ 32063 3b8e 520E0000 		.long	0xe52
+ 32064 3b92 00000000 		.quad	.LBB784
+ 32064      00000000 
+ 32065 3b9a 00000000 		.quad	.LBE784
+ 32065      00000000 
+ 32066 3ba2 02       		.byte	0x2
+ 32067 3ba3 9606     		.value	0x696
+ 32068 3ba5 BC3B0000 		.long	0x3bbc
+ 32069 3ba9 32       		.uleb128 0x32
+ 32070 3baa 6D0E0000 		.long	0xe6d
+ 32071 3bae 03       		.byte	0x3
+ 32072 3baf 91       		.byte	0x91
+ 32073 3bb0 B074     		.sleb128 -1488
+ 32074 3bb2 32       		.uleb128 0x32
+ 32075 3bb3 630E0000 		.long	0xe63
+ 32076 3bb7 03       		.byte	0x3
+ 32077 3bb8 91       		.byte	0x91
+ 32078 3bb9 C074     		.sleb128 -1472
+ 32079 3bbb 00       		.byte	0x0
+ 32080 3bbc 36       		.uleb128 0x36
+ 32081 3bbd 00000000 		.quad	.LBB786
+ 32081      00000000 
+ 32082 3bc5 00000000 		.quad	.LBE786
+ 32082      00000000 
+ 32083 3bcd DB3B0000 		.long	0x3bdb
+ 32084 3bd1 34       		.uleb128 0x34
+ 32085 3bd2 380C0000 		.long	0xc38
+ 32086 3bd6 03       		.byte	0x3
+ 32087 3bd7 91       		.byte	0x91
+ 32088 3bd8 B045     		.sleb128 -7504
+ 32089 3bda 00       		.byte	0x0
+ 32090 3bdb 31       		.uleb128 0x31
+ 32091 3bdc 780E0000 		.long	0xe78
+ 32092 3be0 00000000 		.quad	.LBB787
+ 32092      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 893
+
+
+ 32093 3be8 00000000 		.quad	.LBE787
+ 32093      00000000 
+ 32094 3bf0 02       		.byte	0x2
+ 32095 3bf1 9806     		.value	0x698
+ 32096 3bf3 1C3C0000 		.long	0x3c1c
+ 32097 3bf7 32       		.uleb128 0x32
+ 32098 3bf8 8A0E0000 		.long	0xe8a
+ 32099 3bfc 03       		.byte	0x3
+ 32100 3bfd 91       		.byte	0x91
+ 32101 3bfe D074     		.sleb128 -1456
+ 32102 3c00 33       		.uleb128 0x33
+ 32103 3c01 00000000 		.quad	.LBB788
+ 32103      00000000 
+ 32104 3c09 00000000 		.quad	.LBE788
+ 32104      00000000 
+ 32105 3c11 34       		.uleb128 0x34
+ 32106 3c12 960E0000 		.long	0xe96
+ 32107 3c16 03       		.byte	0x3
+ 32108 3c17 91       		.byte	0x91
+ 32109 3c18 8047     		.sleb128 -7296
+ 32110 3c1a 00       		.byte	0x0
+ 32111 3c1b 00       		.byte	0x0
+ 32112 3c1c 33       		.uleb128 0x33
+ 32113 3c1d 00000000 		.quad	.LBB789
+ 32113      00000000 
+ 32114 3c25 00000000 		.quad	.LBE789
+ 32114      00000000 
+ 32115 3c2d 34       		.uleb128 0x34
+ 32116 3c2e 440C0000 		.long	0xc44
+ 32117 3c32 03       		.byte	0x3
+ 32118 3c33 91       		.byte	0x91
+ 32119 3c34 A045     		.sleb128 -7520
+ 32120 3c36 00       		.byte	0x0
+ 32121 3c37 00       		.byte	0x0
+ 32122 3c38 00       		.byte	0x0
+ 32123 3c39 31       		.uleb128 0x31
+ 32124 3c3a A30E0000 		.long	0xea3
+ 32125 3c3e 00000000 		.quad	.LBB790
+ 32125      00000000 
+ 32126 3c46 00000000 		.quad	.LBE790
+ 32126      00000000 
+ 32127 3c4e 02       		.byte	0x2
+ 32128 3c4f D706     		.value	0x6d7
+ 32129 3c51 3A3D0000 		.long	0x3d3a
+ 32130 3c55 32       		.uleb128 0x32
+ 32131 3c56 B50E0000 		.long	0xeb5
+ 32132 3c5a 03       		.byte	0x3
+ 32133 3c5b 91       		.byte	0x91
+ 32134 3c5c E074     		.sleb128 -1440
+ 32135 3c5e 33       		.uleb128 0x33
+ 32136 3c5f 00000000 		.quad	.LBB791
+ 32136      00000000 
+ 32137 3c67 00000000 		.quad	.LBE791
+ 32137      00000000 
+ 32138 3c6f 34       		.uleb128 0x34
+ 32139 3c70 C10E0000 		.long	0xec1
+ 32140 3c74 04       		.byte	0x4
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 894
+
+
+ 32141 3c75 76       		.byte	0x76
+ 32142 3c76 A0B47F   		.sleb128 -9696
+ 32143 3c79 31       		.uleb128 0x31
+ 32144 3c7a CE0E0000 		.long	0xece
+ 32145 3c7e 00000000 		.quad	.LBB792
+ 32145      00000000 
+ 32146 3c86 00000000 		.quad	.LBE792
+ 32146      00000000 
+ 32147 3c8e 02       		.byte	0x2
+ 32148 3c8f 1F06     		.value	0x61f
+ 32149 3c91 BA3C0000 		.long	0x3cba
+ 32150 3c95 32       		.uleb128 0x32
+ 32151 3c96 E00E0000 		.long	0xee0
+ 32152 3c9a 03       		.byte	0x3
+ 32153 3c9b 91       		.byte	0x91
+ 32154 3c9c F074     		.sleb128 -1424
+ 32155 3c9e 33       		.uleb128 0x33
+ 32156 3c9f 00000000 		.quad	.LBB793
+ 32156      00000000 
+ 32157 3ca7 00000000 		.quad	.LBE793
+ 32157      00000000 
+ 32158 3caf 34       		.uleb128 0x34
+ 32159 3cb0 EC0E0000 		.long	0xeec
+ 32160 3cb4 03       		.byte	0x3
+ 32161 3cb5 91       		.byte	0x91
+ 32162 3cb6 9047     		.sleb128 -7280
+ 32163 3cb8 00       		.byte	0x0
+ 32164 3cb9 00       		.byte	0x0
+ 32165 3cba 31       		.uleb128 0x31
+ 32166 3cbb CE0E0000 		.long	0xece
+ 32167 3cbf 00000000 		.quad	.LBB794
+ 32167      00000000 
+ 32168 3cc7 00000000 		.quad	.LBE794
+ 32168      00000000 
+ 32169 3ccf 02       		.byte	0x2
+ 32170 3cd0 2006     		.value	0x620
+ 32171 3cd2 FB3C0000 		.long	0x3cfb
+ 32172 3cd6 32       		.uleb128 0x32
+ 32173 3cd7 E00E0000 		.long	0xee0
+ 32174 3cdb 03       		.byte	0x3
+ 32175 3cdc 91       		.byte	0x91
+ 32176 3cdd 8075     		.sleb128 -1408
+ 32177 3cdf 33       		.uleb128 0x33
+ 32178 3ce0 00000000 		.quad	.LBB795
+ 32178      00000000 
+ 32179 3ce8 00000000 		.quad	.LBE795
+ 32179      00000000 
+ 32180 3cf0 34       		.uleb128 0x34
+ 32181 3cf1 EC0E0000 		.long	0xeec
+ 32182 3cf5 03       		.byte	0x3
+ 32183 3cf6 91       		.byte	0x91
+ 32184 3cf7 A047     		.sleb128 -7264
+ 32185 3cf9 00       		.byte	0x0
+ 32186 3cfa 00       		.byte	0x0
+ 32187 3cfb 35       		.uleb128 0x35
+ 32188 3cfc CE0E0000 		.long	0xece
+ 32189 3d00 00000000 		.quad	.LBB796
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 895
+
+
+ 32189      00000000 
+ 32190 3d08 00000000 		.quad	.LBE796
+ 32190      00000000 
+ 32191 3d10 02       		.byte	0x2
+ 32192 3d11 2106     		.value	0x621
+ 32193 3d13 32       		.uleb128 0x32
+ 32194 3d14 E00E0000 		.long	0xee0
+ 32195 3d18 03       		.byte	0x3
+ 32196 3d19 91       		.byte	0x91
+ 32197 3d1a 9075     		.sleb128 -1392
+ 32198 3d1c 33       		.uleb128 0x33
+ 32199 3d1d 00000000 		.quad	.LBB797
+ 32199      00000000 
+ 32200 3d25 00000000 		.quad	.LBE797
+ 32200      00000000 
+ 32201 3d2d 34       		.uleb128 0x34
+ 32202 3d2e EC0E0000 		.long	0xeec
+ 32203 3d32 03       		.byte	0x3
+ 32204 3d33 91       		.byte	0x91
+ 32205 3d34 B047     		.sleb128 -7248
+ 32206 3d36 00       		.byte	0x0
+ 32207 3d37 00       		.byte	0x0
+ 32208 3d38 00       		.byte	0x0
+ 32209 3d39 00       		.byte	0x0
+ 32210 3d3a 31       		.uleb128 0x31
+ 32211 3d3b D10B0000 		.long	0xbd1
+ 32212 3d3f 00000000 		.quad	.LBB798
+ 32212      00000000 
+ 32213 3d47 00000000 		.quad	.LBE798
+ 32213      00000000 
+ 32214 3d4f 02       		.byte	0x2
+ 32215 3d50 D806     		.value	0x6d8
+ 32216 3d52 E2410000 		.long	0x41e2
+ 32217 3d56 32       		.uleb128 0x32
+ 32218 3d57 EF0B0000 		.long	0xbef
+ 32219 3d5b 03       		.byte	0x3
+ 32220 3d5c 91       		.byte	0x91
+ 32221 3d5d AC75     		.sleb128 -1364
+ 32222 3d5f 32       		.uleb128 0x32
+ 32223 3d60 E30B0000 		.long	0xbe3
+ 32224 3d64 03       		.byte	0x3
+ 32225 3d65 91       		.byte	0x91
+ 32226 3d66 B075     		.sleb128 -1360
+ 32227 3d68 33       		.uleb128 0x33
+ 32228 3d69 00000000 		.quad	.LBB799
+ 32228      00000000 
+ 32229 3d71 00000000 		.quad	.LBE799
+ 32229      00000000 
+ 32230 3d79 34       		.uleb128 0x34
+ 32231 3d7a FB0B0000 		.long	0xbfb
+ 32232 3d7e 04       		.byte	0x4
+ 32233 3d7f 76       		.byte	0x76
+ 32234 3d80 C0B47F   		.sleb128 -9664
+ 32235 3d83 34       		.uleb128 0x34
+ 32236 3d84 070C0000 		.long	0xc07
+ 32237 3d88 04       		.byte	0x4
+ 32238 3d89 76       		.byte	0x76
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 896
+
+
+ 32239 3d8a B0B47F   		.sleb128 -9680
+ 32240 3d8d 31       		.uleb128 0x31
+ 32241 3d8e 500C0000 		.long	0xc50
+ 32242 3d92 00000000 		.quad	.LBB800
+ 32242      00000000 
+ 32243 3d9a 00000000 		.quad	.LBE800
+ 32243      00000000 
+ 32244 3da2 02       		.byte	0x2
+ 32245 3da3 9106     		.value	0x691
+ 32246 3da5 E03D0000 		.long	0x3de0
+ 32247 3da9 32       		.uleb128 0x32
+ 32248 3daa 7A0C0000 		.long	0xc7a
+ 32249 3dae 03       		.byte	0x3
+ 32250 3daf 91       		.byte	0x91
+ 32251 3db0 C875     		.sleb128 -1336
+ 32252 3db2 32       		.uleb128 0x32
+ 32253 3db3 6E0C0000 		.long	0xc6e
+ 32254 3db7 03       		.byte	0x3
+ 32255 3db8 91       		.byte	0x91
+ 32256 3db9 CC75     		.sleb128 -1332
+ 32257 3dbb 32       		.uleb128 0x32
+ 32258 3dbc 620C0000 		.long	0xc62
+ 32259 3dc0 03       		.byte	0x3
+ 32260 3dc1 91       		.byte	0x91
+ 32261 3dc2 D075     		.sleb128 -1328
+ 32262 3dc4 33       		.uleb128 0x33
+ 32263 3dc5 00000000 		.quad	.LBB801
+ 32263      00000000 
+ 32264 3dcd 00000000 		.quad	.LBE801
+ 32264      00000000 
+ 32265 3dd5 34       		.uleb128 0x34
+ 32266 3dd6 860C0000 		.long	0xc86
+ 32267 3dda 03       		.byte	0x3
+ 32268 3ddb 91       		.byte	0x91
+ 32269 3ddc 8048     		.sleb128 -7168
+ 32270 3dde 00       		.byte	0x0
+ 32271 3ddf 00       		.byte	0x0
+ 32272 3de0 31       		.uleb128 0x31
+ 32273 3de1 910C0000 		.long	0xc91
+ 32274 3de5 00000000 		.quad	.LBB802
+ 32274      00000000 
+ 32275 3ded 00000000 		.quad	.LBE802
+ 32275      00000000 
+ 32276 3df5 02       		.byte	0x2
+ 32277 3df6 9206     		.value	0x692
+ 32278 3df8 50400000 		.long	0x4050
+ 32279 3dfc 32       		.uleb128 0x32
+ 32280 3dfd A30C0000 		.long	0xca3
+ 32281 3e01 03       		.byte	0x3
+ 32282 3e02 91       		.byte	0x91
+ 32283 3e03 E075     		.sleb128 -1312
+ 32284 3e05 35       		.uleb128 0x35
+ 32285 3e06 B00C0000 		.long	0xcb0
+ 32286 3e0a 00000000 		.quad	.LBB804
+ 32286      00000000 
+ 32287 3e12 00000000 		.quad	.LBE804
+ 32287      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 897
+
+
+ 32288 3e1a 02       		.byte	0x2
+ 32289 3e1b 7D03     		.value	0x37d
+ 32290 3e1d 32       		.uleb128 0x32
+ 32291 3e1e CE0C0000 		.long	0xcce
+ 32292 3e22 03       		.byte	0x3
+ 32293 3e23 91       		.byte	0x91
+ 32294 3e24 F875     		.sleb128 -1288
+ 32295 3e26 32       		.uleb128 0x32
+ 32296 3e27 C20C0000 		.long	0xcc2
+ 32297 3e2b 03       		.byte	0x3
+ 32298 3e2c 91       		.byte	0x91
+ 32299 3e2d 8076     		.sleb128 -1280
+ 32300 3e2f 33       		.uleb128 0x33
+ 32301 3e30 00000000 		.quad	.LBB805
+ 32301      00000000 
+ 32302 3e38 00000000 		.quad	.LBE805
+ 32302      00000000 
+ 32303 3e40 34       		.uleb128 0x34
+ 32304 3e41 DA0C0000 		.long	0xcda
+ 32305 3e45 03       		.byte	0x3
+ 32306 3e46 91       		.byte	0x91
+ 32307 3e47 D076     		.sleb128 -1200
+ 32308 3e49 34       		.uleb128 0x34
+ 32309 3e4a E50C0000 		.long	0xce5
+ 32310 3e4e 03       		.byte	0x3
+ 32311 3e4f 91       		.byte	0x91
+ 32312 3e50 C076     		.sleb128 -1216
+ 32313 3e52 34       		.uleb128 0x34
+ 32314 3e53 F00C0000 		.long	0xcf0
+ 32315 3e57 03       		.byte	0x3
+ 32316 3e58 91       		.byte	0x91
+ 32317 3e59 B076     		.sleb128 -1232
+ 32318 3e5b 34       		.uleb128 0x34
+ 32319 3e5c FC0C0000 		.long	0xcfc
+ 32320 3e60 03       		.byte	0x3
+ 32321 3e61 91       		.byte	0x91
+ 32322 3e62 A076     		.sleb128 -1248
+ 32323 3e64 34       		.uleb128 0x34
+ 32324 3e65 080D0000 		.long	0xd08
+ 32325 3e69 03       		.byte	0x3
+ 32326 3e6a 91       		.byte	0x91
+ 32327 3e6b 9C76     		.sleb128 -1252
+ 32328 3e6d 31       		.uleb128 0x31
+ 32329 3e6e 1F0D0000 		.long	0xd1f
+ 32330 3e72 00000000 		.quad	.LBB806
+ 32330      00000000 
+ 32331 3e7a 00000000 		.quad	.LBE806
+ 32331      00000000 
+ 32332 3e82 02       		.byte	0x2
+ 32333 3e83 5603     		.value	0x356
+ 32334 3e85 9C3E0000 		.long	0x3e9c
+ 32335 3e89 32       		.uleb128 0x32
+ 32336 3e8a 3A0D0000 		.long	0xd3a
+ 32337 3e8e 03       		.byte	0x3
+ 32338 3e8f 91       		.byte	0x91
+ 32339 3e90 E076     		.sleb128 -1184
+ 32340 3e92 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 898
+
+
+ 32341 3e93 300D0000 		.long	0xd30
+ 32342 3e97 03       		.byte	0x3
+ 32343 3e98 91       		.byte	0x91
+ 32344 3e99 F076     		.sleb128 -1168
+ 32345 3e9b 00       		.byte	0x0
+ 32346 3e9c 31       		.uleb128 0x31
+ 32347 3e9d 450D0000 		.long	0xd45
+ 32348 3ea1 00000000 		.quad	.LBB808
+ 32348      00000000 
+ 32349 3ea9 00000000 		.quad	.LBE808
+ 32349      00000000 
+ 32350 3eb1 02       		.byte	0x2
+ 32351 3eb2 5E03     		.value	0x35e
+ 32352 3eb4 CB3E0000 		.long	0x3ecb
+ 32353 3eb8 32       		.uleb128 0x32
+ 32354 3eb9 620D0000 		.long	0xd62
+ 32355 3ebd 03       		.byte	0x3
+ 32356 3ebe 91       		.byte	0x91
+ 32357 3ebf 8077     		.sleb128 -1152
+ 32358 3ec1 32       		.uleb128 0x32
+ 32359 3ec2 570D0000 		.long	0xd57
+ 32360 3ec6 03       		.byte	0x3
+ 32361 3ec7 91       		.byte	0x91
+ 32362 3ec8 9077     		.sleb128 -1136
+ 32363 3eca 00       		.byte	0x0
+ 32364 3ecb 31       		.uleb128 0x31
+ 32365 3ecc 6E0D0000 		.long	0xd6e
+ 32366 3ed0 00000000 		.quad	.LBB810
+ 32366      00000000 
+ 32367 3ed8 00000000 		.quad	.LBE810
+ 32367      00000000 
+ 32368 3ee0 02       		.byte	0x2
+ 32369 3ee1 6403     		.value	0x364
+ 32370 3ee3 303F0000 		.long	0x3f30
+ 32371 3ee7 32       		.uleb128 0x32
+ 32372 3ee8 8C0D0000 		.long	0xd8c
+ 32373 3eec 03       		.byte	0x3
+ 32374 3eed 91       		.byte	0x91
+ 32375 3eee A077     		.sleb128 -1120
+ 32376 3ef0 32       		.uleb128 0x32
+ 32377 3ef1 800D0000 		.long	0xd80
+ 32378 3ef5 03       		.byte	0x3
+ 32379 3ef6 91       		.byte	0x91
+ 32380 3ef7 B077     		.sleb128 -1104
+ 32381 3ef9 33       		.uleb128 0x33
+ 32382 3efa 00000000 		.quad	.LBB811
+ 32382      00000000 
+ 32383 3f02 00000000 		.quad	.LBE811
+ 32383      00000000 
+ 32384 3f0a 34       		.uleb128 0x34
+ 32385 3f0b 980D0000 		.long	0xd98
+ 32386 3f0f 03       		.byte	0x3
+ 32387 3f10 91       		.byte	0x91
+ 32388 3f11 B048     		.sleb128 -7120
+ 32389 3f13 34       		.uleb128 0x34
+ 32390 3f14 A40D0000 		.long	0xda4
+ 32391 3f18 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 899
+
+
+ 32392 3f19 91       		.byte	0x91
+ 32393 3f1a A048     		.sleb128 -7136
+ 32394 3f1c 34       		.uleb128 0x34
+ 32395 3f1d AF0D0000 		.long	0xdaf
+ 32396 3f21 03       		.byte	0x3
+ 32397 3f22 91       		.byte	0x91
+ 32398 3f23 9048     		.sleb128 -7152
+ 32399 3f25 34       		.uleb128 0x34
+ 32400 3f26 BB0D0000 		.long	0xdbb
+ 32401 3f2a 03       		.byte	0x3
+ 32402 3f2b 91       		.byte	0x91
+ 32403 3f2c CC77     		.sleb128 -1076
+ 32404 3f2e 00       		.byte	0x0
+ 32405 3f2f 00       		.byte	0x0
+ 32406 3f30 31       		.uleb128 0x31
+ 32407 3f31 C70D0000 		.long	0xdc7
+ 32408 3f35 00000000 		.quad	.LBB812
+ 32408      00000000 
+ 32409 3f3d 00000000 		.quad	.LBE812
+ 32409      00000000 
+ 32410 3f45 02       		.byte	0x2
+ 32411 3f46 6603     		.value	0x366
+ 32412 3f48 5F3F0000 		.long	0x3f5f
+ 32413 3f4c 32       		.uleb128 0x32
+ 32414 3f4d E20D0000 		.long	0xde2
+ 32415 3f51 03       		.byte	0x3
+ 32416 3f52 91       		.byte	0x91
+ 32417 3f53 D077     		.sleb128 -1072
+ 32418 3f55 32       		.uleb128 0x32
+ 32419 3f56 D80D0000 		.long	0xdd8
+ 32420 3f5a 03       		.byte	0x3
+ 32421 3f5b 91       		.byte	0x91
+ 32422 3f5c E077     		.sleb128 -1056
+ 32423 3f5e 00       		.byte	0x0
+ 32424 3f5f 31       		.uleb128 0x31
+ 32425 3f60 6E0D0000 		.long	0xd6e
+ 32426 3f64 00000000 		.quad	.LBB814
+ 32426      00000000 
+ 32427 3f6c 00000000 		.quad	.LBE814
+ 32427      00000000 
+ 32428 3f74 02       		.byte	0x2
+ 32429 3f75 6803     		.value	0x368
+ 32430 3f77 C43F0000 		.long	0x3fc4
+ 32431 3f7b 32       		.uleb128 0x32
+ 32432 3f7c 8C0D0000 		.long	0xd8c
+ 32433 3f80 03       		.byte	0x3
+ 32434 3f81 91       		.byte	0x91
+ 32435 3f82 F077     		.sleb128 -1040
+ 32436 3f84 32       		.uleb128 0x32
+ 32437 3f85 800D0000 		.long	0xd80
+ 32438 3f89 03       		.byte	0x3
+ 32439 3f8a 91       		.byte	0x91
+ 32440 3f8b 8078     		.sleb128 -1024
+ 32441 3f8d 33       		.uleb128 0x33
+ 32442 3f8e 00000000 		.quad	.LBB815
+ 32442      00000000 
+ 32443 3f96 00000000 		.quad	.LBE815
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 900
+
+
+ 32443      00000000 
+ 32444 3f9e 34       		.uleb128 0x34
+ 32445 3f9f 980D0000 		.long	0xd98
+ 32446 3fa3 03       		.byte	0x3
+ 32447 3fa4 91       		.byte	0x91
+ 32448 3fa5 E048     		.sleb128 -7072
+ 32449 3fa7 34       		.uleb128 0x34
+ 32450 3fa8 A40D0000 		.long	0xda4
+ 32451 3fac 03       		.byte	0x3
+ 32452 3fad 91       		.byte	0x91
+ 32453 3fae D048     		.sleb128 -7088
+ 32454 3fb0 34       		.uleb128 0x34
+ 32455 3fb1 AF0D0000 		.long	0xdaf
+ 32456 3fb5 03       		.byte	0x3
+ 32457 3fb6 91       		.byte	0x91
+ 32458 3fb7 C048     		.sleb128 -7104
+ 32459 3fb9 34       		.uleb128 0x34
+ 32460 3fba BB0D0000 		.long	0xdbb
+ 32461 3fbe 03       		.byte	0x3
+ 32462 3fbf 91       		.byte	0x91
+ 32463 3fc0 9C78     		.sleb128 -996
+ 32464 3fc2 00       		.byte	0x0
+ 32465 3fc3 00       		.byte	0x0
+ 32466 3fc4 31       		.uleb128 0x31
+ 32467 3fc5 C70D0000 		.long	0xdc7
+ 32468 3fc9 00000000 		.quad	.LBB816
+ 32468      00000000 
+ 32469 3fd1 00000000 		.quad	.LBE816
+ 32469      00000000 
+ 32470 3fd9 02       		.byte	0x2
+ 32471 3fda 6A03     		.value	0x36a
+ 32472 3fdc F33F0000 		.long	0x3ff3
+ 32473 3fe0 32       		.uleb128 0x32
+ 32474 3fe1 E20D0000 		.long	0xde2
+ 32475 3fe5 03       		.byte	0x3
+ 32476 3fe6 91       		.byte	0x91
+ 32477 3fe7 A078     		.sleb128 -992
+ 32478 3fe9 32       		.uleb128 0x32
+ 32479 3fea D80D0000 		.long	0xdd8
+ 32480 3fee 03       		.byte	0x3
+ 32481 3fef 91       		.byte	0x91
+ 32482 3ff0 B078     		.sleb128 -976
+ 32483 3ff2 00       		.byte	0x0
+ 32484 3ff3 31       		.uleb128 0x31
+ 32485 3ff4 ED0D0000 		.long	0xded
+ 32486 3ff8 00000000 		.quad	.LBB818
+ 32486      00000000 
+ 32487 4000 00000000 		.quad	.LBE818
+ 32487      00000000 
+ 32488 4008 02       		.byte	0x2
+ 32489 4009 6C03     		.value	0x36c
+ 32490 400b 22400000 		.long	0x4022
+ 32491 400f 32       		.uleb128 0x32
+ 32492 4010 0A0E0000 		.long	0xe0a
+ 32493 4014 03       		.byte	0x3
+ 32494 4015 91       		.byte	0x91
+ 32495 4016 C078     		.sleb128 -960
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 901
+
+
+ 32496 4018 32       		.uleb128 0x32
+ 32497 4019 FF0D0000 		.long	0xdff
+ 32498 401d 03       		.byte	0x3
+ 32499 401e 91       		.byte	0x91
+ 32500 401f D078     		.sleb128 -944
+ 32501 4021 00       		.byte	0x0
+ 32502 4022 35       		.uleb128 0x35
+ 32503 4023 1F0D0000 		.long	0xd1f
+ 32504 4027 00000000 		.quad	.LBB820
+ 32504      00000000 
+ 32505 402f 00000000 		.quad	.LBE820
+ 32505      00000000 
+ 32506 4037 02       		.byte	0x2
+ 32507 4038 6E03     		.value	0x36e
+ 32508 403a 32       		.uleb128 0x32
+ 32509 403b 3A0D0000 		.long	0xd3a
+ 32510 403f 03       		.byte	0x3
+ 32511 4040 91       		.byte	0x91
+ 32512 4041 E078     		.sleb128 -928
+ 32513 4043 32       		.uleb128 0x32
+ 32514 4044 300D0000 		.long	0xd30
+ 32515 4048 03       		.byte	0x3
+ 32516 4049 91       		.byte	0x91
+ 32517 404a F078     		.sleb128 -912
+ 32518 404c 00       		.byte	0x0
+ 32519 404d 00       		.byte	0x0
+ 32520 404e 00       		.byte	0x0
+ 32521 404f 00       		.byte	0x0
+ 32522 4050 36       		.uleb128 0x36
+ 32523 4051 00000000 		.quad	.LBB822
+ 32523      00000000 
+ 32524 4059 00000000 		.quad	.LBE822
+ 32524      00000000 
+ 32525 4061 6F400000 		.long	0x406f
+ 32526 4065 34       		.uleb128 0x34
+ 32527 4066 180C0000 		.long	0xc18
+ 32528 406a 03       		.byte	0x3
+ 32529 406b 91       		.byte	0x91
+ 32530 406c F047     		.sleb128 -7184
+ 32531 406e 00       		.byte	0x0
+ 32532 406f 31       		.uleb128 0x31
+ 32533 4070 160E0000 		.long	0xe16
+ 32534 4074 00000000 		.quad	.LBB823
+ 32534      00000000 
+ 32535 407c 00000000 		.quad	.LBE823
+ 32535      00000000 
+ 32536 4084 02       		.byte	0x2
+ 32537 4085 9406     		.value	0x694
+ 32538 4087 17410000 		.long	0x4117
+ 32539 408b 32       		.uleb128 0x32
+ 32540 408c 280E0000 		.long	0xe28
+ 32541 4090 03       		.byte	0x3
+ 32542 4091 91       		.byte	0x91
+ 32543 4092 8079     		.sleb128 -896
+ 32544 4094 33       		.uleb128 0x33
+ 32545 4095 00000000 		.quad	.LBB824
+ 32545      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 902
+
+
+ 32546 409d 00000000 		.quad	.LBE824
+ 32546      00000000 
+ 32547 40a5 34       		.uleb128 0x34
+ 32548 40a6 340E0000 		.long	0xe34
+ 32549 40aa 09       		.byte	0x9
+ 32550 40ab 03       		.byte	0x3
+ 32551 40ac 00000000 		.quad	ShiftRowTable.6768
+ 32551      00000000 
+ 32552 40b4 35       		.uleb128 0x35
+ 32553 40b5 6E0D0000 		.long	0xd6e
+ 32554 40b9 00000000 		.quad	.LBB825
+ 32554      00000000 
+ 32555 40c1 00000000 		.quad	.LBE825
+ 32555      00000000 
+ 32556 40c9 02       		.byte	0x2
+ 32557 40ca 9B02     		.value	0x29b
+ 32558 40cc 32       		.uleb128 0x32
+ 32559 40cd 8C0D0000 		.long	0xd8c
+ 32560 40d1 03       		.byte	0x3
+ 32561 40d2 91       		.byte	0x91
+ 32562 40d3 9079     		.sleb128 -880
+ 32563 40d5 32       		.uleb128 0x32
+ 32564 40d6 800D0000 		.long	0xd80
+ 32565 40da 03       		.byte	0x3
+ 32566 40db 91       		.byte	0x91
+ 32567 40dc A079     		.sleb128 -864
+ 32568 40de 33       		.uleb128 0x33
+ 32569 40df 00000000 		.quad	.LBB826
+ 32569      00000000 
+ 32570 40e7 00000000 		.quad	.LBE826
+ 32570      00000000 
+ 32571 40ef 34       		.uleb128 0x34
+ 32572 40f0 980D0000 		.long	0xd98
+ 32573 40f4 03       		.byte	0x3
+ 32574 40f5 91       		.byte	0x91
+ 32575 40f6 9049     		.sleb128 -7024
+ 32576 40f8 34       		.uleb128 0x34
+ 32577 40f9 A40D0000 		.long	0xda4
+ 32578 40fd 03       		.byte	0x3
+ 32579 40fe 91       		.byte	0x91
+ 32580 40ff 8049     		.sleb128 -7040
+ 32581 4101 34       		.uleb128 0x34
+ 32582 4102 AF0D0000 		.long	0xdaf
+ 32583 4106 03       		.byte	0x3
+ 32584 4107 91       		.byte	0x91
+ 32585 4108 F048     		.sleb128 -7056
+ 32586 410a 34       		.uleb128 0x34
+ 32587 410b BB0D0000 		.long	0xdbb
+ 32588 410f 03       		.byte	0x3
+ 32589 4110 91       		.byte	0x91
+ 32590 4111 BC79     		.sleb128 -836
+ 32591 4113 00       		.byte	0x0
+ 32592 4114 00       		.byte	0x0
+ 32593 4115 00       		.byte	0x0
+ 32594 4116 00       		.byte	0x0
+ 32595 4117 36       		.uleb128 0x36
+ 32596 4118 00000000 		.quad	.LBB827
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 903
+
+
+ 32596      00000000 
+ 32597 4120 00000000 		.quad	.LBE827
+ 32597      00000000 
+ 32598 4128 36410000 		.long	0x4136
+ 32599 412c 34       		.uleb128 0x34
+ 32600 412d 280C0000 		.long	0xc28
+ 32601 4131 03       		.byte	0x3
+ 32602 4132 91       		.byte	0x91
+ 32603 4133 E047     		.sleb128 -7200
+ 32604 4135 00       		.byte	0x0
+ 32605 4136 31       		.uleb128 0x31
+ 32606 4137 520E0000 		.long	0xe52
+ 32607 413b 00000000 		.quad	.LBB828
+ 32607      00000000 
+ 32608 4143 00000000 		.quad	.LBE828
+ 32608      00000000 
+ 32609 414b 02       		.byte	0x2
+ 32610 414c 9606     		.value	0x696
+ 32611 414e 65410000 		.long	0x4165
+ 32612 4152 32       		.uleb128 0x32
+ 32613 4153 6D0E0000 		.long	0xe6d
+ 32614 4157 03       		.byte	0x3
+ 32615 4158 91       		.byte	0x91
+ 32616 4159 C079     		.sleb128 -832
+ 32617 415b 32       		.uleb128 0x32
+ 32618 415c 630E0000 		.long	0xe63
+ 32619 4160 03       		.byte	0x3
+ 32620 4161 91       		.byte	0x91
+ 32621 4162 D079     		.sleb128 -816
+ 32622 4164 00       		.byte	0x0
+ 32623 4165 36       		.uleb128 0x36
+ 32624 4166 00000000 		.quad	.LBB830
+ 32624      00000000 
+ 32625 416e 00000000 		.quad	.LBE830
+ 32625      00000000 
+ 32626 4176 84410000 		.long	0x4184
+ 32627 417a 34       		.uleb128 0x34
+ 32628 417b 380C0000 		.long	0xc38
+ 32629 417f 03       		.byte	0x3
+ 32630 4180 91       		.byte	0x91
+ 32631 4181 D047     		.sleb128 -7216
+ 32632 4183 00       		.byte	0x0
+ 32633 4184 31       		.uleb128 0x31
+ 32634 4185 780E0000 		.long	0xe78
+ 32635 4189 00000000 		.quad	.LBB831
+ 32635      00000000 
+ 32636 4191 00000000 		.quad	.LBE831
+ 32636      00000000 
+ 32637 4199 02       		.byte	0x2
+ 32638 419a 9806     		.value	0x698
+ 32639 419c C5410000 		.long	0x41c5
+ 32640 41a0 32       		.uleb128 0x32
+ 32641 41a1 8A0E0000 		.long	0xe8a
+ 32642 41a5 03       		.byte	0x3
+ 32643 41a6 91       		.byte	0x91
+ 32644 41a7 E079     		.sleb128 -800
+ 32645 41a9 33       		.uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 904
+
+
+ 32646 41aa 00000000 		.quad	.LBB832
+ 32646      00000000 
+ 32647 41b2 00000000 		.quad	.LBE832
+ 32647      00000000 
+ 32648 41ba 34       		.uleb128 0x34
+ 32649 41bb 960E0000 		.long	0xe96
+ 32650 41bf 03       		.byte	0x3
+ 32651 41c0 91       		.byte	0x91
+ 32652 41c1 A049     		.sleb128 -7008
+ 32653 41c3 00       		.byte	0x0
+ 32654 41c4 00       		.byte	0x0
+ 32655 41c5 33       		.uleb128 0x33
+ 32656 41c6 00000000 		.quad	.LBB833
+ 32656      00000000 
+ 32657 41ce 00000000 		.quad	.LBE833
+ 32657      00000000 
+ 32658 41d6 34       		.uleb128 0x34
+ 32659 41d7 440C0000 		.long	0xc44
+ 32660 41db 03       		.byte	0x3
+ 32661 41dc 91       		.byte	0x91
+ 32662 41dd C047     		.sleb128 -7232
+ 32663 41df 00       		.byte	0x0
+ 32664 41e0 00       		.byte	0x0
+ 32665 41e1 00       		.byte	0x0
+ 32666 41e2 31       		.uleb128 0x31
+ 32667 41e3 A30E0000 		.long	0xea3
+ 32668 41e7 00000000 		.quad	.LBB834
+ 32668      00000000 
+ 32669 41ef 00000000 		.quad	.LBE834
+ 32669      00000000 
+ 32670 41f7 02       		.byte	0x2
+ 32671 41f8 D806     		.value	0x6d8
+ 32672 41fa E3420000 		.long	0x42e3
+ 32673 41fe 32       		.uleb128 0x32
+ 32674 41ff B50E0000 		.long	0xeb5
+ 32675 4203 03       		.byte	0x3
+ 32676 4204 91       		.byte	0x91
+ 32677 4205 F079     		.sleb128 -784
+ 32678 4207 33       		.uleb128 0x33
+ 32679 4208 00000000 		.quad	.LBB835
+ 32679      00000000 
+ 32680 4210 00000000 		.quad	.LBE835
+ 32680      00000000 
+ 32681 4218 34       		.uleb128 0x34
+ 32682 4219 C10E0000 		.long	0xec1
+ 32683 421d 04       		.byte	0x4
+ 32684 421e 76       		.byte	0x76
+ 32685 421f E0B47F   		.sleb128 -9632
+ 32686 4222 31       		.uleb128 0x31
+ 32687 4223 CE0E0000 		.long	0xece
+ 32688 4227 00000000 		.quad	.LBB836
+ 32688      00000000 
+ 32689 422f 00000000 		.quad	.LBE836
+ 32689      00000000 
+ 32690 4237 02       		.byte	0x2
+ 32691 4238 1F06     		.value	0x61f
+ 32692 423a 63420000 		.long	0x4263
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 905
+
+
+ 32693 423e 32       		.uleb128 0x32
+ 32694 423f E00E0000 		.long	0xee0
+ 32695 4243 03       		.byte	0x3
+ 32696 4244 91       		.byte	0x91
+ 32697 4245 807A     		.sleb128 -768
+ 32698 4247 33       		.uleb128 0x33
+ 32699 4248 00000000 		.quad	.LBB837
+ 32699      00000000 
+ 32700 4250 00000000 		.quad	.LBE837
+ 32700      00000000 
+ 32701 4258 34       		.uleb128 0x34
+ 32702 4259 EC0E0000 		.long	0xeec
+ 32703 425d 03       		.byte	0x3
+ 32704 425e 91       		.byte	0x91
+ 32705 425f B049     		.sleb128 -6992
+ 32706 4261 00       		.byte	0x0
+ 32707 4262 00       		.byte	0x0
+ 32708 4263 31       		.uleb128 0x31
+ 32709 4264 CE0E0000 		.long	0xece
+ 32710 4268 00000000 		.quad	.LBB838
+ 32710      00000000 
+ 32711 4270 00000000 		.quad	.LBE838
+ 32711      00000000 
+ 32712 4278 02       		.byte	0x2
+ 32713 4279 2006     		.value	0x620
+ 32714 427b A4420000 		.long	0x42a4
+ 32715 427f 32       		.uleb128 0x32
+ 32716 4280 E00E0000 		.long	0xee0
+ 32717 4284 03       		.byte	0x3
+ 32718 4285 91       		.byte	0x91
+ 32719 4286 907A     		.sleb128 -752
+ 32720 4288 33       		.uleb128 0x33
+ 32721 4289 00000000 		.quad	.LBB839
+ 32721      00000000 
+ 32722 4291 00000000 		.quad	.LBE839
+ 32722      00000000 
+ 32723 4299 34       		.uleb128 0x34
+ 32724 429a EC0E0000 		.long	0xeec
+ 32725 429e 03       		.byte	0x3
+ 32726 429f 91       		.byte	0x91
+ 32727 42a0 C049     		.sleb128 -6976
+ 32728 42a2 00       		.byte	0x0
+ 32729 42a3 00       		.byte	0x0
+ 32730 42a4 35       		.uleb128 0x35
+ 32731 42a5 CE0E0000 		.long	0xece
+ 32732 42a9 00000000 		.quad	.LBB840
+ 32732      00000000 
+ 32733 42b1 00000000 		.quad	.LBE840
+ 32733      00000000 
+ 32734 42b9 02       		.byte	0x2
+ 32735 42ba 2106     		.value	0x621
+ 32736 42bc 32       		.uleb128 0x32
+ 32737 42bd E00E0000 		.long	0xee0
+ 32738 42c1 03       		.byte	0x3
+ 32739 42c2 91       		.byte	0x91
+ 32740 42c3 A07A     		.sleb128 -736
+ 32741 42c5 33       		.uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 906
+
+
+ 32742 42c6 00000000 		.quad	.LBB841
+ 32742      00000000 
+ 32743 42ce 00000000 		.quad	.LBE841
+ 32743      00000000 
+ 32744 42d6 34       		.uleb128 0x34
+ 32745 42d7 EC0E0000 		.long	0xeec
+ 32746 42db 03       		.byte	0x3
+ 32747 42dc 91       		.byte	0x91
+ 32748 42dd D049     		.sleb128 -6960
+ 32749 42df 00       		.byte	0x0
+ 32750 42e0 00       		.byte	0x0
+ 32751 42e1 00       		.byte	0x0
+ 32752 42e2 00       		.byte	0x0
+ 32753 42e3 31       		.uleb128 0x31
+ 32754 42e4 D10B0000 		.long	0xbd1
+ 32755 42e8 00000000 		.quad	.LBB842
+ 32755      00000000 
+ 32756 42f0 00000000 		.quad	.LBE842
+ 32756      00000000 
+ 32757 42f8 02       		.byte	0x2
+ 32758 42f9 D906     		.value	0x6d9
+ 32759 42fb 8B470000 		.long	0x478b
+ 32760 42ff 32       		.uleb128 0x32
+ 32761 4300 EF0B0000 		.long	0xbef
+ 32762 4304 03       		.byte	0x3
+ 32763 4305 91       		.byte	0x91
+ 32764 4306 BC7A     		.sleb128 -708
+ 32765 4308 32       		.uleb128 0x32
+ 32766 4309 E30B0000 		.long	0xbe3
+ 32767 430d 03       		.byte	0x3
+ 32768 430e 91       		.byte	0x91
+ 32769 430f C07A     		.sleb128 -704
+ 32770 4311 33       		.uleb128 0x33
+ 32771 4312 00000000 		.quad	.LBB843
+ 32771      00000000 
+ 32772 431a 00000000 		.quad	.LBE843
+ 32772      00000000 
+ 32773 4322 34       		.uleb128 0x34
+ 32774 4323 FB0B0000 		.long	0xbfb
+ 32775 4327 04       		.byte	0x4
+ 32776 4328 76       		.byte	0x76
+ 32777 4329 80B57F   		.sleb128 -9600
+ 32778 432c 34       		.uleb128 0x34
+ 32779 432d 070C0000 		.long	0xc07
+ 32780 4331 04       		.byte	0x4
+ 32781 4332 76       		.byte	0x76
+ 32782 4333 F0B47F   		.sleb128 -9616
+ 32783 4336 31       		.uleb128 0x31
+ 32784 4337 500C0000 		.long	0xc50
+ 32785 433b 00000000 		.quad	.LBB844
+ 32785      00000000 
+ 32786 4343 00000000 		.quad	.LBE844
+ 32786      00000000 
+ 32787 434b 02       		.byte	0x2
+ 32788 434c 9106     		.value	0x691
+ 32789 434e 89430000 		.long	0x4389
+ 32790 4352 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 907
+
+
+ 32791 4353 7A0C0000 		.long	0xc7a
+ 32792 4357 03       		.byte	0x3
+ 32793 4358 91       		.byte	0x91
+ 32794 4359 D87A     		.sleb128 -680
+ 32795 435b 32       		.uleb128 0x32
+ 32796 435c 6E0C0000 		.long	0xc6e
+ 32797 4360 03       		.byte	0x3
+ 32798 4361 91       		.byte	0x91
+ 32799 4362 DC7A     		.sleb128 -676
+ 32800 4364 32       		.uleb128 0x32
+ 32801 4365 620C0000 		.long	0xc62
+ 32802 4369 03       		.byte	0x3
+ 32803 436a 91       		.byte	0x91
+ 32804 436b E07A     		.sleb128 -672
+ 32805 436d 33       		.uleb128 0x33
+ 32806 436e 00000000 		.quad	.LBB845
+ 32806      00000000 
+ 32807 4376 00000000 		.quad	.LBE845
+ 32807      00000000 
+ 32808 437e 34       		.uleb128 0x34
+ 32809 437f 860C0000 		.long	0xc86
+ 32810 4383 03       		.byte	0x3
+ 32811 4384 91       		.byte	0x91
+ 32812 4385 A04A     		.sleb128 -6880
+ 32813 4387 00       		.byte	0x0
+ 32814 4388 00       		.byte	0x0
+ 32815 4389 31       		.uleb128 0x31
+ 32816 438a 910C0000 		.long	0xc91
+ 32817 438e 00000000 		.quad	.LBB846
+ 32817      00000000 
+ 32818 4396 00000000 		.quad	.LBE846
+ 32818      00000000 
+ 32819 439e 02       		.byte	0x2
+ 32820 439f 9206     		.value	0x692
+ 32821 43a1 F9450000 		.long	0x45f9
+ 32822 43a5 32       		.uleb128 0x32
+ 32823 43a6 A30C0000 		.long	0xca3
+ 32824 43aa 03       		.byte	0x3
+ 32825 43ab 91       		.byte	0x91
+ 32826 43ac F07A     		.sleb128 -656
+ 32827 43ae 35       		.uleb128 0x35
+ 32828 43af B00C0000 		.long	0xcb0
+ 32829 43b3 00000000 		.quad	.LBB848
+ 32829      00000000 
+ 32830 43bb 00000000 		.quad	.LBE848
+ 32830      00000000 
+ 32831 43c3 02       		.byte	0x2
+ 32832 43c4 7D03     		.value	0x37d
+ 32833 43c6 32       		.uleb128 0x32
+ 32834 43c7 CE0C0000 		.long	0xcce
+ 32835 43cb 03       		.byte	0x3
+ 32836 43cc 91       		.byte	0x91
+ 32837 43cd 887B     		.sleb128 -632
+ 32838 43cf 32       		.uleb128 0x32
+ 32839 43d0 C20C0000 		.long	0xcc2
+ 32840 43d4 03       		.byte	0x3
+ 32841 43d5 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 908
+
+
+ 32842 43d6 907B     		.sleb128 -624
+ 32843 43d8 33       		.uleb128 0x33
+ 32844 43d9 00000000 		.quad	.LBB849
+ 32844      00000000 
+ 32845 43e1 00000000 		.quad	.LBE849
+ 32845      00000000 
+ 32846 43e9 34       		.uleb128 0x34
+ 32847 43ea DA0C0000 		.long	0xcda
+ 32848 43ee 03       		.byte	0x3
+ 32849 43ef 91       		.byte	0x91
+ 32850 43f0 E07B     		.sleb128 -544
+ 32851 43f2 34       		.uleb128 0x34
+ 32852 43f3 E50C0000 		.long	0xce5
+ 32853 43f7 03       		.byte	0x3
+ 32854 43f8 91       		.byte	0x91
+ 32855 43f9 D07B     		.sleb128 -560
+ 32856 43fb 34       		.uleb128 0x34
+ 32857 43fc F00C0000 		.long	0xcf0
+ 32858 4400 03       		.byte	0x3
+ 32859 4401 91       		.byte	0x91
+ 32860 4402 C07B     		.sleb128 -576
+ 32861 4404 34       		.uleb128 0x34
+ 32862 4405 FC0C0000 		.long	0xcfc
+ 32863 4409 03       		.byte	0x3
+ 32864 440a 91       		.byte	0x91
+ 32865 440b B07B     		.sleb128 -592
+ 32866 440d 34       		.uleb128 0x34
+ 32867 440e 080D0000 		.long	0xd08
+ 32868 4412 03       		.byte	0x3
+ 32869 4413 91       		.byte	0x91
+ 32870 4414 AC7B     		.sleb128 -596
+ 32871 4416 31       		.uleb128 0x31
+ 32872 4417 1F0D0000 		.long	0xd1f
+ 32873 441b 00000000 		.quad	.LBB850
+ 32873      00000000 
+ 32874 4423 00000000 		.quad	.LBE850
+ 32874      00000000 
+ 32875 442b 02       		.byte	0x2
+ 32876 442c 5603     		.value	0x356
+ 32877 442e 45440000 		.long	0x4445
+ 32878 4432 32       		.uleb128 0x32
+ 32879 4433 3A0D0000 		.long	0xd3a
+ 32880 4437 03       		.byte	0x3
+ 32881 4438 91       		.byte	0x91
+ 32882 4439 F07B     		.sleb128 -528
+ 32883 443b 32       		.uleb128 0x32
+ 32884 443c 300D0000 		.long	0xd30
+ 32885 4440 03       		.byte	0x3
+ 32886 4441 91       		.byte	0x91
+ 32887 4442 807C     		.sleb128 -512
+ 32888 4444 00       		.byte	0x0
+ 32889 4445 31       		.uleb128 0x31
+ 32890 4446 450D0000 		.long	0xd45
+ 32891 444a 00000000 		.quad	.LBB852
+ 32891      00000000 
+ 32892 4452 00000000 		.quad	.LBE852
+ 32892      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 909
+
+
+ 32893 445a 02       		.byte	0x2
+ 32894 445b 5E03     		.value	0x35e
+ 32895 445d 74440000 		.long	0x4474
+ 32896 4461 32       		.uleb128 0x32
+ 32897 4462 620D0000 		.long	0xd62
+ 32898 4466 03       		.byte	0x3
+ 32899 4467 91       		.byte	0x91
+ 32900 4468 907C     		.sleb128 -496
+ 32901 446a 32       		.uleb128 0x32
+ 32902 446b 570D0000 		.long	0xd57
+ 32903 446f 03       		.byte	0x3
+ 32904 4470 91       		.byte	0x91
+ 32905 4471 A07C     		.sleb128 -480
+ 32906 4473 00       		.byte	0x0
+ 32907 4474 31       		.uleb128 0x31
+ 32908 4475 6E0D0000 		.long	0xd6e
+ 32909 4479 00000000 		.quad	.LBB854
+ 32909      00000000 
+ 32910 4481 00000000 		.quad	.LBE854
+ 32910      00000000 
+ 32911 4489 02       		.byte	0x2
+ 32912 448a 6403     		.value	0x364
+ 32913 448c D9440000 		.long	0x44d9
+ 32914 4490 32       		.uleb128 0x32
+ 32915 4491 8C0D0000 		.long	0xd8c
+ 32916 4495 03       		.byte	0x3
+ 32917 4496 91       		.byte	0x91
+ 32918 4497 B07C     		.sleb128 -464
+ 32919 4499 32       		.uleb128 0x32
+ 32920 449a 800D0000 		.long	0xd80
+ 32921 449e 03       		.byte	0x3
+ 32922 449f 91       		.byte	0x91
+ 32923 44a0 C07C     		.sleb128 -448
+ 32924 44a2 33       		.uleb128 0x33
+ 32925 44a3 00000000 		.quad	.LBB855
+ 32925      00000000 
+ 32926 44ab 00000000 		.quad	.LBE855
+ 32926      00000000 
+ 32927 44b3 34       		.uleb128 0x34
+ 32928 44b4 980D0000 		.long	0xd98
+ 32929 44b8 03       		.byte	0x3
+ 32930 44b9 91       		.byte	0x91
+ 32931 44ba D04A     		.sleb128 -6832
+ 32932 44bc 34       		.uleb128 0x34
+ 32933 44bd A40D0000 		.long	0xda4
+ 32934 44c1 03       		.byte	0x3
+ 32935 44c2 91       		.byte	0x91
+ 32936 44c3 C04A     		.sleb128 -6848
+ 32937 44c5 34       		.uleb128 0x34
+ 32938 44c6 AF0D0000 		.long	0xdaf
+ 32939 44ca 03       		.byte	0x3
+ 32940 44cb 91       		.byte	0x91
+ 32941 44cc B04A     		.sleb128 -6864
+ 32942 44ce 34       		.uleb128 0x34
+ 32943 44cf BB0D0000 		.long	0xdbb
+ 32944 44d3 03       		.byte	0x3
+ 32945 44d4 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 910
+
+
+ 32946 44d5 DC7C     		.sleb128 -420
+ 32947 44d7 00       		.byte	0x0
+ 32948 44d8 00       		.byte	0x0
+ 32949 44d9 31       		.uleb128 0x31
+ 32950 44da C70D0000 		.long	0xdc7
+ 32951 44de 00000000 		.quad	.LBB856
+ 32951      00000000 
+ 32952 44e6 00000000 		.quad	.LBE856
+ 32952      00000000 
+ 32953 44ee 02       		.byte	0x2
+ 32954 44ef 6603     		.value	0x366
+ 32955 44f1 08450000 		.long	0x4508
+ 32956 44f5 32       		.uleb128 0x32
+ 32957 44f6 E20D0000 		.long	0xde2
+ 32958 44fa 03       		.byte	0x3
+ 32959 44fb 91       		.byte	0x91
+ 32960 44fc E07C     		.sleb128 -416
+ 32961 44fe 32       		.uleb128 0x32
+ 32962 44ff D80D0000 		.long	0xdd8
+ 32963 4503 03       		.byte	0x3
+ 32964 4504 91       		.byte	0x91
+ 32965 4505 F07C     		.sleb128 -400
+ 32966 4507 00       		.byte	0x0
+ 32967 4508 31       		.uleb128 0x31
+ 32968 4509 6E0D0000 		.long	0xd6e
+ 32969 450d 00000000 		.quad	.LBB858
+ 32969      00000000 
+ 32970 4515 00000000 		.quad	.LBE858
+ 32970      00000000 
+ 32971 451d 02       		.byte	0x2
+ 32972 451e 6803     		.value	0x368
+ 32973 4520 6D450000 		.long	0x456d
+ 32974 4524 32       		.uleb128 0x32
+ 32975 4525 8C0D0000 		.long	0xd8c
+ 32976 4529 03       		.byte	0x3
+ 32977 452a 91       		.byte	0x91
+ 32978 452b 807D     		.sleb128 -384
+ 32979 452d 32       		.uleb128 0x32
+ 32980 452e 800D0000 		.long	0xd80
+ 32981 4532 03       		.byte	0x3
+ 32982 4533 91       		.byte	0x91
+ 32983 4534 907D     		.sleb128 -368
+ 32984 4536 33       		.uleb128 0x33
+ 32985 4537 00000000 		.quad	.LBB859
+ 32985      00000000 
+ 32986 453f 00000000 		.quad	.LBE859
+ 32986      00000000 
+ 32987 4547 34       		.uleb128 0x34
+ 32988 4548 980D0000 		.long	0xd98
+ 32989 454c 03       		.byte	0x3
+ 32990 454d 91       		.byte	0x91
+ 32991 454e 804B     		.sleb128 -6784
+ 32992 4550 34       		.uleb128 0x34
+ 32993 4551 A40D0000 		.long	0xda4
+ 32994 4555 03       		.byte	0x3
+ 32995 4556 91       		.byte	0x91
+ 32996 4557 F04A     		.sleb128 -6800
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 911
+
+
+ 32997 4559 34       		.uleb128 0x34
+ 32998 455a AF0D0000 		.long	0xdaf
+ 32999 455e 03       		.byte	0x3
+ 33000 455f 91       		.byte	0x91
+ 33001 4560 E04A     		.sleb128 -6816
+ 33002 4562 34       		.uleb128 0x34
+ 33003 4563 BB0D0000 		.long	0xdbb
+ 33004 4567 03       		.byte	0x3
+ 33005 4568 91       		.byte	0x91
+ 33006 4569 AC7D     		.sleb128 -340
+ 33007 456b 00       		.byte	0x0
+ 33008 456c 00       		.byte	0x0
+ 33009 456d 31       		.uleb128 0x31
+ 33010 456e C70D0000 		.long	0xdc7
+ 33011 4572 00000000 		.quad	.LBB860
+ 33011      00000000 
+ 33012 457a 00000000 		.quad	.LBE860
+ 33012      00000000 
+ 33013 4582 02       		.byte	0x2
+ 33014 4583 6A03     		.value	0x36a
+ 33015 4585 9C450000 		.long	0x459c
+ 33016 4589 32       		.uleb128 0x32
+ 33017 458a E20D0000 		.long	0xde2
+ 33018 458e 03       		.byte	0x3
+ 33019 458f 91       		.byte	0x91
+ 33020 4590 B07D     		.sleb128 -336
+ 33021 4592 32       		.uleb128 0x32
+ 33022 4593 D80D0000 		.long	0xdd8
+ 33023 4597 03       		.byte	0x3
+ 33024 4598 91       		.byte	0x91
+ 33025 4599 C07D     		.sleb128 -320
+ 33026 459b 00       		.byte	0x0
+ 33027 459c 31       		.uleb128 0x31
+ 33028 459d ED0D0000 		.long	0xded
+ 33029 45a1 00000000 		.quad	.LBB862
+ 33029      00000000 
+ 33030 45a9 00000000 		.quad	.LBE862
+ 33030      00000000 
+ 33031 45b1 02       		.byte	0x2
+ 33032 45b2 6C03     		.value	0x36c
+ 33033 45b4 CB450000 		.long	0x45cb
+ 33034 45b8 32       		.uleb128 0x32
+ 33035 45b9 0A0E0000 		.long	0xe0a
+ 33036 45bd 03       		.byte	0x3
+ 33037 45be 91       		.byte	0x91
+ 33038 45bf D07D     		.sleb128 -304
+ 33039 45c1 32       		.uleb128 0x32
+ 33040 45c2 FF0D0000 		.long	0xdff
+ 33041 45c6 03       		.byte	0x3
+ 33042 45c7 91       		.byte	0x91
+ 33043 45c8 E07D     		.sleb128 -288
+ 33044 45ca 00       		.byte	0x0
+ 33045 45cb 35       		.uleb128 0x35
+ 33046 45cc 1F0D0000 		.long	0xd1f
+ 33047 45d0 00000000 		.quad	.LBB864
+ 33047      00000000 
+ 33048 45d8 00000000 		.quad	.LBE864
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 912
+
+
+ 33048      00000000 
+ 33049 45e0 02       		.byte	0x2
+ 33050 45e1 6E03     		.value	0x36e
+ 33051 45e3 32       		.uleb128 0x32
+ 33052 45e4 3A0D0000 		.long	0xd3a
+ 33053 45e8 03       		.byte	0x3
+ 33054 45e9 91       		.byte	0x91
+ 33055 45ea F07D     		.sleb128 -272
+ 33056 45ec 32       		.uleb128 0x32
+ 33057 45ed 300D0000 		.long	0xd30
+ 33058 45f1 03       		.byte	0x3
+ 33059 45f2 91       		.byte	0x91
+ 33060 45f3 807E     		.sleb128 -256
+ 33061 45f5 00       		.byte	0x0
+ 33062 45f6 00       		.byte	0x0
+ 33063 45f7 00       		.byte	0x0
+ 33064 45f8 00       		.byte	0x0
+ 33065 45f9 36       		.uleb128 0x36
+ 33066 45fa 00000000 		.quad	.LBB866
+ 33066      00000000 
+ 33067 4602 00000000 		.quad	.LBE866
+ 33067      00000000 
+ 33068 460a 18460000 		.long	0x4618
+ 33069 460e 34       		.uleb128 0x34
+ 33070 460f 180C0000 		.long	0xc18
+ 33071 4613 03       		.byte	0x3
+ 33072 4614 91       		.byte	0x91
+ 33073 4615 904A     		.sleb128 -6896
+ 33074 4617 00       		.byte	0x0
+ 33075 4618 31       		.uleb128 0x31
+ 33076 4619 160E0000 		.long	0xe16
+ 33077 461d 00000000 		.quad	.LBB867
+ 33077      00000000 
+ 33078 4625 00000000 		.quad	.LBE867
+ 33078      00000000 
+ 33079 462d 02       		.byte	0x2
+ 33080 462e 9406     		.value	0x694
+ 33081 4630 C0460000 		.long	0x46c0
+ 33082 4634 32       		.uleb128 0x32
+ 33083 4635 280E0000 		.long	0xe28
+ 33084 4639 03       		.byte	0x3
+ 33085 463a 91       		.byte	0x91
+ 33086 463b 907E     		.sleb128 -240
+ 33087 463d 33       		.uleb128 0x33
+ 33088 463e 00000000 		.quad	.LBB868
+ 33088      00000000 
+ 33089 4646 00000000 		.quad	.LBE868
+ 33089      00000000 
+ 33090 464e 34       		.uleb128 0x34
+ 33091 464f 340E0000 		.long	0xe34
+ 33092 4653 09       		.byte	0x9
+ 33093 4654 03       		.byte	0x3
+ 33094 4655 00000000 		.quad	ShiftRowTable.6768
+ 33094      00000000 
+ 33095 465d 35       		.uleb128 0x35
+ 33096 465e 6E0D0000 		.long	0xd6e
+ 33097 4662 00000000 		.quad	.LBB869
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 913
+
+
+ 33097      00000000 
+ 33098 466a 00000000 		.quad	.LBE869
+ 33098      00000000 
+ 33099 4672 02       		.byte	0x2
+ 33100 4673 9B02     		.value	0x29b
+ 33101 4675 32       		.uleb128 0x32
+ 33102 4676 8C0D0000 		.long	0xd8c
+ 33103 467a 03       		.byte	0x3
+ 33104 467b 91       		.byte	0x91
+ 33105 467c A07E     		.sleb128 -224
+ 33106 467e 32       		.uleb128 0x32
+ 33107 467f 800D0000 		.long	0xd80
+ 33108 4683 03       		.byte	0x3
+ 33109 4684 91       		.byte	0x91
+ 33110 4685 B07E     		.sleb128 -208
+ 33111 4687 33       		.uleb128 0x33
+ 33112 4688 00000000 		.quad	.LBB870
+ 33112      00000000 
+ 33113 4690 00000000 		.quad	.LBE870
+ 33113      00000000 
+ 33114 4698 34       		.uleb128 0x34
+ 33115 4699 980D0000 		.long	0xd98
+ 33116 469d 03       		.byte	0x3
+ 33117 469e 91       		.byte	0x91
+ 33118 469f B04B     		.sleb128 -6736
+ 33119 46a1 34       		.uleb128 0x34
+ 33120 46a2 A40D0000 		.long	0xda4
+ 33121 46a6 03       		.byte	0x3
+ 33122 46a7 91       		.byte	0x91
+ 33123 46a8 A04B     		.sleb128 -6752
+ 33124 46aa 34       		.uleb128 0x34
+ 33125 46ab AF0D0000 		.long	0xdaf
+ 33126 46af 03       		.byte	0x3
+ 33127 46b0 91       		.byte	0x91
+ 33128 46b1 904B     		.sleb128 -6768
+ 33129 46b3 34       		.uleb128 0x34
+ 33130 46b4 BB0D0000 		.long	0xdbb
+ 33131 46b8 03       		.byte	0x3
+ 33132 46b9 91       		.byte	0x91
+ 33133 46ba CC7E     		.sleb128 -180
+ 33134 46bc 00       		.byte	0x0
+ 33135 46bd 00       		.byte	0x0
+ 33136 46be 00       		.byte	0x0
+ 33137 46bf 00       		.byte	0x0
+ 33138 46c0 36       		.uleb128 0x36
+ 33139 46c1 00000000 		.quad	.LBB871
+ 33139      00000000 
+ 33140 46c9 00000000 		.quad	.LBE871
+ 33140      00000000 
+ 33141 46d1 DF460000 		.long	0x46df
+ 33142 46d5 34       		.uleb128 0x34
+ 33143 46d6 280C0000 		.long	0xc28
+ 33144 46da 03       		.byte	0x3
+ 33145 46db 91       		.byte	0x91
+ 33146 46dc 804A     		.sleb128 -6912
+ 33147 46de 00       		.byte	0x0
+ 33148 46df 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 914
+
+
+ 33149 46e0 520E0000 		.long	0xe52
+ 33150 46e4 00000000 		.quad	.LBB872
+ 33150      00000000 
+ 33151 46ec 00000000 		.quad	.LBE872
+ 33151      00000000 
+ 33152 46f4 02       		.byte	0x2
+ 33153 46f5 9606     		.value	0x696
+ 33154 46f7 0E470000 		.long	0x470e
+ 33155 46fb 32       		.uleb128 0x32
+ 33156 46fc 6D0E0000 		.long	0xe6d
+ 33157 4700 03       		.byte	0x3
+ 33158 4701 91       		.byte	0x91
+ 33159 4702 D07E     		.sleb128 -176
+ 33160 4704 32       		.uleb128 0x32
+ 33161 4705 630E0000 		.long	0xe63
+ 33162 4709 03       		.byte	0x3
+ 33163 470a 91       		.byte	0x91
+ 33164 470b E07E     		.sleb128 -160
+ 33165 470d 00       		.byte	0x0
+ 33166 470e 36       		.uleb128 0x36
+ 33167 470f 00000000 		.quad	.LBB874
+ 33167      00000000 
+ 33168 4717 00000000 		.quad	.LBE874
+ 33168      00000000 
+ 33169 471f 2D470000 		.long	0x472d
+ 33170 4723 34       		.uleb128 0x34
+ 33171 4724 380C0000 		.long	0xc38
+ 33172 4728 03       		.byte	0x3
+ 33173 4729 91       		.byte	0x91
+ 33174 472a F049     		.sleb128 -6928
+ 33175 472c 00       		.byte	0x0
+ 33176 472d 31       		.uleb128 0x31
+ 33177 472e 780E0000 		.long	0xe78
+ 33178 4732 00000000 		.quad	.LBB875
+ 33178      00000000 
+ 33179 473a 00000000 		.quad	.LBE875
+ 33179      00000000 
+ 33180 4742 02       		.byte	0x2
+ 33181 4743 9806     		.value	0x698
+ 33182 4745 6E470000 		.long	0x476e
+ 33183 4749 32       		.uleb128 0x32
+ 33184 474a 8A0E0000 		.long	0xe8a
+ 33185 474e 03       		.byte	0x3
+ 33186 474f 91       		.byte	0x91
+ 33187 4750 F07E     		.sleb128 -144
+ 33188 4752 33       		.uleb128 0x33
+ 33189 4753 00000000 		.quad	.LBB876
+ 33189      00000000 
+ 33190 475b 00000000 		.quad	.LBE876
+ 33190      00000000 
+ 33191 4763 34       		.uleb128 0x34
+ 33192 4764 960E0000 		.long	0xe96
+ 33193 4768 03       		.byte	0x3
+ 33194 4769 91       		.byte	0x91
+ 33195 476a C04B     		.sleb128 -6720
+ 33196 476c 00       		.byte	0x0
+ 33197 476d 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 915
+
+
+ 33198 476e 33       		.uleb128 0x33
+ 33199 476f 00000000 		.quad	.LBB877
+ 33199      00000000 
+ 33200 4777 00000000 		.quad	.LBE877
+ 33200      00000000 
+ 33201 477f 34       		.uleb128 0x34
+ 33202 4780 440C0000 		.long	0xc44
+ 33203 4784 03       		.byte	0x3
+ 33204 4785 91       		.byte	0x91
+ 33205 4786 E049     		.sleb128 -6944
+ 33206 4788 00       		.byte	0x0
+ 33207 4789 00       		.byte	0x0
+ 33208 478a 00       		.byte	0x0
+ 33209 478b 35       		.uleb128 0x35
+ 33210 478c A30E0000 		.long	0xea3
+ 33211 4790 00000000 		.quad	.LBB878
+ 33211      00000000 
+ 33212 4798 00000000 		.quad	.LBE878
+ 33212      00000000 
+ 33213 47a0 02       		.byte	0x2
+ 33214 47a1 D906     		.value	0x6d9
+ 33215 47a3 32       		.uleb128 0x32
+ 33216 47a4 B50E0000 		.long	0xeb5
+ 33217 47a8 03       		.byte	0x3
+ 33218 47a9 91       		.byte	0x91
+ 33219 47aa 807F     		.sleb128 -128
+ 33220 47ac 33       		.uleb128 0x33
+ 33221 47ad 00000000 		.quad	.LBB879
+ 33221      00000000 
+ 33222 47b5 00000000 		.quad	.LBE879
+ 33222      00000000 
+ 33223 47bd 34       		.uleb128 0x34
+ 33224 47be C10E0000 		.long	0xec1
+ 33225 47c2 04       		.byte	0x4
+ 33226 47c3 76       		.byte	0x76
+ 33227 47c4 A0B57F   		.sleb128 -9568
+ 33228 47c7 31       		.uleb128 0x31
+ 33229 47c8 CE0E0000 		.long	0xece
+ 33230 47cc 00000000 		.quad	.LBB880
+ 33230      00000000 
+ 33231 47d4 00000000 		.quad	.LBE880
+ 33231      00000000 
+ 33232 47dc 02       		.byte	0x2
+ 33233 47dd 1F06     		.value	0x61f
+ 33234 47df 08480000 		.long	0x4808
+ 33235 47e3 32       		.uleb128 0x32
+ 33236 47e4 E00E0000 		.long	0xee0
+ 33237 47e8 03       		.byte	0x3
+ 33238 47e9 91       		.byte	0x91
+ 33239 47ea 907F     		.sleb128 -112
+ 33240 47ec 33       		.uleb128 0x33
+ 33241 47ed 00000000 		.quad	.LBB881
+ 33241      00000000 
+ 33242 47f5 00000000 		.quad	.LBE881
+ 33242      00000000 
+ 33243 47fd 34       		.uleb128 0x34
+ 33244 47fe EC0E0000 		.long	0xeec
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 916
+
+
+ 33245 4802 03       		.byte	0x3
+ 33246 4803 91       		.byte	0x91
+ 33247 4804 D04B     		.sleb128 -6704
+ 33248 4806 00       		.byte	0x0
+ 33249 4807 00       		.byte	0x0
+ 33250 4808 31       		.uleb128 0x31
+ 33251 4809 CE0E0000 		.long	0xece
+ 33252 480d 00000000 		.quad	.LBB882
+ 33252      00000000 
+ 33253 4815 00000000 		.quad	.LBE882
+ 33253      00000000 
+ 33254 481d 02       		.byte	0x2
+ 33255 481e 2006     		.value	0x620
+ 33256 4820 49480000 		.long	0x4849
+ 33257 4824 32       		.uleb128 0x32
+ 33258 4825 E00E0000 		.long	0xee0
+ 33259 4829 03       		.byte	0x3
+ 33260 482a 91       		.byte	0x91
+ 33261 482b A07F     		.sleb128 -96
+ 33262 482d 33       		.uleb128 0x33
+ 33263 482e 00000000 		.quad	.LBB883
+ 33263      00000000 
+ 33264 4836 00000000 		.quad	.LBE883
+ 33264      00000000 
+ 33265 483e 34       		.uleb128 0x34
+ 33266 483f EC0E0000 		.long	0xeec
+ 33267 4843 03       		.byte	0x3
+ 33268 4844 91       		.byte	0x91
+ 33269 4845 E04B     		.sleb128 -6688
+ 33270 4847 00       		.byte	0x0
+ 33271 4848 00       		.byte	0x0
+ 33272 4849 35       		.uleb128 0x35
+ 33273 484a CE0E0000 		.long	0xece
+ 33274 484e 00000000 		.quad	.LBB884
+ 33274      00000000 
+ 33275 4856 00000000 		.quad	.LBE884
+ 33275      00000000 
+ 33276 485e 02       		.byte	0x2
+ 33277 485f 2106     		.value	0x621
+ 33278 4861 32       		.uleb128 0x32
+ 33279 4862 E00E0000 		.long	0xee0
+ 33280 4866 03       		.byte	0x3
+ 33281 4867 91       		.byte	0x91
+ 33282 4868 B07F     		.sleb128 -80
+ 33283 486a 33       		.uleb128 0x33
+ 33284 486b 00000000 		.quad	.LBB885
+ 33284      00000000 
+ 33285 4873 00000000 		.quad	.LBE885
+ 33285      00000000 
+ 33286 487b 34       		.uleb128 0x34
+ 33287 487c EC0E0000 		.long	0xeec
+ 33288 4880 03       		.byte	0x3
+ 33289 4881 91       		.byte	0x91
+ 33290 4882 F04B     		.sleb128 -6672
+ 33291 4884 00       		.byte	0x0
+ 33292 4885 00       		.byte	0x0
+ 33293 4886 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 917
+
+
+ 33294 4887 00       		.byte	0x0
+ 33295 4888 00       		.byte	0x0
+ 33296 4889 07       		.uleb128 0x7
+ 33297 488a 08       		.byte	0x8
+ 33298 488b B1010000 		.long	0x1b1
+ 33299 488f 07       		.uleb128 0x7
+ 33300 4890 08       		.byte	0x8
+ 33301 4891 95480000 		.long	0x4895
+ 33302 4895 06       		.uleb128 0x6
+ 33303 4896 FC030000 		.long	0x3fc
+ 33304 489a 25       		.uleb128 0x25
+ 33305 489b 00000000 		.long	.LASF344
+ 33306 489f 02       		.byte	0x2
+ 33307 48a0 1105     		.value	0x511
+ 33308 48a2 01       		.byte	0x1
+ 33309 48a3 B1010000 		.long	0x1b1
+ 33310 48a7 03       		.byte	0x3
+ 33311 48a8 C5480000 		.long	0x48c5
+ 33312 48ac 26       		.uleb128 0x26
+ 33313 48ad 00000000 		.long	.LASF66
+ 33314 48b1 02       		.byte	0x2
+ 33315 48b2 1105     		.value	0x511
+ 33316 48b4 B1010000 		.long	0x1b1
+ 33317 48b8 27       		.uleb128 0x27
+ 33318 48b9 00000000 		.long	.LASF339
+ 33319 48bd 02       		.byte	0x2
+ 33320 48be 1705     		.value	0x517
+ 33321 48c0 27050000 		.long	0x527
+ 33322 48c4 00       		.byte	0x0
+ 33323 48c5 25       		.uleb128 0x25
+ 33324 48c6 00000000 		.long	.LASF345
+ 33325 48ca 02       		.byte	0x2
+ 33326 48cb 5206     		.value	0x652
+ 33327 48cd 01       		.byte	0x1
+ 33328 48ce B1010000 		.long	0x1b1
+ 33329 48d2 03       		.byte	0x3
+ 33330 48d3 12490000 		.long	0x4912
+ 33331 48d7 26       		.uleb128 0x26
+ 33332 48d8 00000000 		.long	.LASF66
+ 33333 48dc 02       		.byte	0x2
+ 33334 48dd 5206     		.value	0x652
+ 33335 48df B1010000 		.long	0x1b1
+ 33336 48e3 26       		.uleb128 0x26
+ 33337 48e4 00000000 		.long	.LASF320
+ 33338 48e8 02       		.byte	0x2
+ 33339 48e9 5206     		.value	0x652
+ 33340 48eb A9000000 		.long	0xa9
+ 33341 48ef 28       		.uleb128 0x28
+ 33342 48f0 7500     		.string	"u"
+ 33343 48f2 02       		.byte	0x2
+ 33344 48f3 5906     		.value	0x659
+ 33345 48f5 27050000 		.long	0x527
+ 33346 48f9 27       		.uleb128 0x27
+ 33347 48fa 00000000 		.long	.LASF346
+ 33348 48fe 02       		.byte	0x2
+ 33349 48ff 5A06     		.value	0x65a
+ 33350 4901 07040000 		.long	0x407
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 918
+
+
+ 33351 4905 27       		.uleb128 0x27
+ 33352 4906 00000000 		.long	.LASF339
+ 33353 490a 02       		.byte	0x2
+ 33354 490b 5B06     		.value	0x65b
+ 33355 490d 07040000 		.long	0x407
+ 33356 4911 00       		.byte	0x0
+ 33357 4912 25       		.uleb128 0x25
+ 33358 4913 00000000 		.long	.LASF347
+ 33359 4917 02       		.byte	0x2
+ 33360 4918 DF02     		.value	0x2df
+ 33361 491a 01       		.byte	0x1
+ 33362 491b 07040000 		.long	0x407
+ 33363 491f 03       		.byte	0x3
+ 33364 4920 46490000 		.long	0x4946
+ 33365 4924 2B       		.uleb128 0x2b
+ 33366 4925 7700     		.string	"w"
+ 33367 4927 02       		.byte	0x2
+ 33368 4928 DF02     		.value	0x2df
+ 33369 492a 07040000 		.long	0x407
+ 33370 492e 28       		.uleb128 0x28
+ 33371 492f 636F6C00 		.string	"col"
+ 33372 4933 02       		.byte	0x2
+ 33373 4934 E102     		.value	0x2e1
+ 33374 4936 12040000 		.long	0x412
+ 33375 493a 28       		.uleb128 0x28
+ 33376 493b 697800   		.string	"ix"
+ 33377 493e 02       		.byte	0x2
+ 33378 493f E202     		.value	0x2e2
+ 33379 4941 6D000000 		.long	0x6d
+ 33380 4945 00       		.byte	0x0
+ 33381 4946 25       		.uleb128 0x25
+ 33382 4947 00000000 		.long	.LASF348
+ 33383 494b 02       		.byte	0x2
+ 33384 494c AA04     		.value	0x4aa
+ 33385 494e 01       		.byte	0x1
+ 33386 494f 07040000 		.long	0x407
+ 33387 4953 03       		.byte	0x3
+ 33388 4954 63490000 		.long	0x4963
+ 33389 4958 2B       		.uleb128 0x2b
+ 33390 4959 7700     		.string	"w"
+ 33391 495b 02       		.byte	0x2
+ 33392 495c AA04     		.value	0x4aa
+ 33393 495e 07040000 		.long	0x407
+ 33394 4962 00       		.byte	0x0
+ 33395 4963 25       		.uleb128 0x25
+ 33396 4964 00000000 		.long	.LASF349
+ 33397 4968 02       		.byte	0x2
+ 33398 4969 B705     		.value	0x5b7
+ 33399 496b 01       		.byte	0x1
+ 33400 496c B1010000 		.long	0x1b1
+ 33401 4970 03       		.byte	0x3
+ 33402 4971 A0490000 		.long	0x49a0
+ 33403 4975 2B       		.uleb128 0x2b
+ 33404 4976 7700     		.string	"w"
+ 33405 4978 02       		.byte	0x2
+ 33406 4979 B705     		.value	0x5b7
+ 33407 497b B1010000 		.long	0x1b1
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 919
+
+
+ 33408 497f 2B       		.uleb128 0x2b
+ 33409 4980 7800     		.string	"x"
+ 33410 4982 02       		.byte	0x2
+ 33411 4983 B705     		.value	0x5b7
+ 33412 4985 B1010000 		.long	0x1b1
+ 33413 4989 28       		.uleb128 0x28
+ 33414 498a 777700   		.string	"ww"
+ 33415 498d 02       		.byte	0x2
+ 33416 498e BC05     		.value	0x5bc
+ 33417 4990 27050000 		.long	0x527
+ 33418 4994 28       		.uleb128 0x28
+ 33419 4995 787800   		.string	"xx"
+ 33420 4998 02       		.byte	0x2
+ 33421 4999 BD05     		.value	0x5bd
+ 33422 499b 27050000 		.long	0x527
+ 33423 499f 00       		.byte	0x0
+ 33424 49a0 25       		.uleb128 0x25
+ 33425 49a1 00000000 		.long	.LASF350
+ 33426 49a5 02       		.byte	0x2
+ 33427 49a6 D705     		.value	0x5d7
+ 33428 49a8 01       		.byte	0x1
+ 33429 49a9 B1010000 		.long	0x1b1
+ 33430 49ad 03       		.byte	0x3
+ 33431 49ae DD490000 		.long	0x49dd
+ 33432 49b2 2B       		.uleb128 0x2b
+ 33433 49b3 7700     		.string	"w"
+ 33434 49b5 02       		.byte	0x2
+ 33435 49b6 D705     		.value	0x5d7
+ 33436 49b8 B1010000 		.long	0x1b1
+ 33437 49bc 2B       		.uleb128 0x2b
+ 33438 49bd 7800     		.string	"x"
+ 33439 49bf 02       		.byte	0x2
+ 33440 49c0 D705     		.value	0x5d7
+ 33441 49c2 B1010000 		.long	0x1b1
+ 33442 49c6 28       		.uleb128 0x28
+ 33443 49c7 777700   		.string	"ww"
+ 33444 49ca 02       		.byte	0x2
+ 33445 49cb DC05     		.value	0x5dc
+ 33446 49cd 27050000 		.long	0x527
+ 33447 49d1 28       		.uleb128 0x28
+ 33448 49d2 787800   		.string	"xx"
+ 33449 49d5 02       		.byte	0x2
+ 33450 49d6 DD05     		.value	0x5dd
+ 33451 49d8 27050000 		.long	0x527
+ 33452 49dc 00       		.byte	0x0
+ 33453 49dd 2D       		.uleb128 0x2d
+ 33454 49de 00000000 		.long	.LASF352
+ 33455 49e2 02       		.byte	0x2
+ 33456 49e3 E706     		.value	0x6e7
+ 33457 49e5 01       		.byte	0x1
+ 33458 49e6 00000000 		.quad	.LFB564
+ 33458      00000000 
+ 33459 49ee 00000000 		.quad	.LFE564
+ 33459      00000000 
+ 33460 49f6 00000000 		.long	.LLST2
+ 33461 49fa 4E740000 		.long	0x744e
+ 33462 49fe 2E       		.uleb128 0x2e
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 920
+
+
+ 33463 49ff 00000000 		.long	.LASF64
+ 33464 4a03 02       		.byte	0x2
+ 33465 4a04 E706     		.value	0x6e7
+ 33466 4a06 89480000 		.long	0x4889
+ 33467 4a0a 03       		.byte	0x3
+ 33468 4a0b 91       		.byte	0x91
+ 33469 4a0c F84E     		.sleb128 -6280
+ 33470 4a0e 2F       		.uleb128 0x2f
+ 33471 4a0f 6B657900 		.string	"key"
+ 33472 4a13 02       		.byte	0x2
+ 33473 4a14 E706     		.value	0x6e7
+ 33474 4a16 8F480000 		.long	0x488f
+ 33475 4a1a 03       		.byte	0x3
+ 33476 4a1b 91       		.byte	0x91
+ 33477 4a1c F04E     		.sleb128 -6288
+ 33478 4a1e 37       		.uleb128 0x37
+ 33479 4a1f 763000   		.string	"v0"
+ 33480 4a22 02       		.byte	0x2
+ 33481 4a23 EF06     		.value	0x6ef
+ 33482 4a25 B1010000 		.long	0x1b1
+ 33483 4a29 03       		.byte	0x3
+ 33484 4a2a 76       		.byte	0x76
+ 33485 4a2b F04A     		.sleb128 -6800
+ 33486 4a2d 37       		.uleb128 0x37
+ 33487 4a2e 763100   		.string	"v1"
+ 33488 4a31 02       		.byte	0x2
+ 33489 4a32 EF06     		.value	0x6ef
+ 33490 4a34 B1010000 		.long	0x1b1
+ 33491 4a38 03       		.byte	0x3
+ 33492 4a39 76       		.byte	0x76
+ 33493 4a3a 804B     		.sleb128 -6784
+ 33494 4a3c 37       		.uleb128 0x37
+ 33495 4a3d 763200   		.string	"v2"
+ 33496 4a40 02       		.byte	0x2
+ 33497 4a41 EF06     		.value	0x6ef
+ 33498 4a43 B1010000 		.long	0x1b1
+ 33499 4a47 03       		.byte	0x3
+ 33500 4a48 76       		.byte	0x76
+ 33501 4a49 904B     		.sleb128 -6768
+ 33502 4a4b 37       		.uleb128 0x37
+ 33503 4a4c 763300   		.string	"v3"
+ 33504 4a4f 02       		.byte	0x2
+ 33505 4a50 EF06     		.value	0x6ef
+ 33506 4a52 B1010000 		.long	0x1b1
+ 33507 4a56 03       		.byte	0x3
+ 33508 4a57 76       		.byte	0x76
+ 33509 4a58 A04B     		.sleb128 -6752
+ 33510 4a5a 37       		.uleb128 0x37
+ 33511 4a5b 763400   		.string	"v4"
+ 33512 4a5e 02       		.byte	0x2
+ 33513 4a5f EF06     		.value	0x6ef
+ 33514 4a61 B1010000 		.long	0x1b1
+ 33515 4a65 03       		.byte	0x3
+ 33516 4a66 76       		.byte	0x76
+ 33517 4a67 B04B     		.sleb128 -6736
+ 33518 4a69 37       		.uleb128 0x37
+ 33519 4a6a 6B00     		.string	"k"
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 921
+
+
+ 33520 4a6c 02       		.byte	0x2
+ 33521 4a6d F006     		.value	0x6f0
+ 33522 4a6f B1010000 		.long	0x1b1
+ 33523 4a73 03       		.byte	0x3
+ 33524 4a74 76       		.byte	0x76
+ 33525 4a75 C04B     		.sleb128 -6720
+ 33526 4a77 31       		.uleb128 0x31
+ 33527 4a78 AB0B0000 		.long	0xbab
+ 33528 4a7c 00000000 		.quad	.LBB1210
+ 33528      00000000 
+ 33529 4a84 00000000 		.quad	.LBE1210
+ 33529      00000000 
+ 33530 4a8c 02       		.byte	0x2
+ 33531 4a8d F306     		.value	0x6f3
+ 33532 4a8f B84A0000 		.long	0x4ab8
+ 33533 4a93 32       		.uleb128 0x32
+ 33534 4a94 BC0B0000 		.long	0xbbc
+ 33535 4a98 03       		.byte	0x3
+ 33536 4a99 91       		.byte	0x91
+ 33537 4a9a B060     		.sleb128 -4048
+ 33538 4a9c 33       		.uleb128 0x33
+ 33539 4a9d 00000000 		.quad	.LBB1211
+ 33539      00000000 
+ 33540 4aa5 00000000 		.quad	.LBE1211
+ 33540      00000000 
+ 33541 4aad 34       		.uleb128 0x34
+ 33542 4aae C70B0000 		.long	0xbc7
+ 33543 4ab2 03       		.byte	0x3
+ 33544 4ab3 91       		.byte	0x91
+ 33545 4ab4 804F     		.sleb128 -6272
+ 33546 4ab6 00       		.byte	0x0
+ 33547 4ab7 00       		.byte	0x0
+ 33548 4ab8 31       		.uleb128 0x31
+ 33549 4ab9 AB0B0000 		.long	0xbab
+ 33550 4abd 00000000 		.quad	.LBB1212
+ 33550      00000000 
+ 33551 4ac5 00000000 		.quad	.LBE1212
+ 33551      00000000 
+ 33552 4acd 02       		.byte	0x2
+ 33553 4ace F406     		.value	0x6f4
+ 33554 4ad0 F94A0000 		.long	0x4af9
+ 33555 4ad4 32       		.uleb128 0x32
+ 33556 4ad5 BC0B0000 		.long	0xbbc
+ 33557 4ad9 03       		.byte	0x3
+ 33558 4ada 91       		.byte	0x91
+ 33559 4adb B860     		.sleb128 -4040
+ 33560 4add 33       		.uleb128 0x33
+ 33561 4ade 00000000 		.quad	.LBB1213
+ 33561      00000000 
+ 33562 4ae6 00000000 		.quad	.LBE1213
+ 33562      00000000 
+ 33563 4aee 34       		.uleb128 0x34
+ 33564 4aef C70B0000 		.long	0xbc7
+ 33565 4af3 03       		.byte	0x3
+ 33566 4af4 91       		.byte	0x91
+ 33567 4af5 904F     		.sleb128 -6256
+ 33568 4af7 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 922
+
+
+ 33569 4af8 00       		.byte	0x0
+ 33570 4af9 31       		.uleb128 0x31
+ 33571 4afa 9A480000 		.long	0x489a
+ 33572 4afe 00000000 		.quad	.LBB1214
+ 33572      00000000 
+ 33573 4b06 00000000 		.quad	.LBE1214
+ 33573      00000000 
+ 33574 4b0e 02       		.byte	0x2
+ 33575 4b0f F506     		.value	0x6f5
+ 33576 4b11 3A4B0000 		.long	0x4b3a
+ 33577 4b15 32       		.uleb128 0x32
+ 33578 4b16 AC480000 		.long	0x48ac
+ 33579 4b1a 03       		.byte	0x3
+ 33580 4b1b 91       		.byte	0x91
+ 33581 4b1c C060     		.sleb128 -4032
+ 33582 4b1e 33       		.uleb128 0x33
+ 33583 4b1f 00000000 		.quad	.LBB1215
+ 33583      00000000 
+ 33584 4b27 00000000 		.quad	.LBE1215
+ 33584      00000000 
+ 33585 4b2f 34       		.uleb128 0x34
+ 33586 4b30 B8480000 		.long	0x48b8
+ 33587 4b34 03       		.byte	0x3
+ 33588 4b35 91       		.byte	0x91
+ 33589 4b36 A04F     		.sleb128 -6240
+ 33590 4b38 00       		.byte	0x0
+ 33591 4b39 00       		.byte	0x0
+ 33592 4b3a 31       		.uleb128 0x31
+ 33593 4b3b C5480000 		.long	0x48c5
+ 33594 4b3f 00000000 		.quad	.LBB1216
+ 33594      00000000 
+ 33595 4b47 00000000 		.quad	.LBE1216
+ 33595      00000000 
+ 33596 4b4f 02       		.byte	0x2
+ 33597 4b50 FC06     		.value	0x6fc
+ 33598 4b52 024C0000 		.long	0x4c02
+ 33599 4b56 32       		.uleb128 0x32
+ 33600 4b57 E3480000 		.long	0x48e3
+ 33601 4b5b 03       		.byte	0x3
+ 33602 4b5c 91       		.byte	0x91
+ 33603 4b5d DC60     		.sleb128 -4004
+ 33604 4b5f 32       		.uleb128 0x32
+ 33605 4b60 D7480000 		.long	0x48d7
+ 33606 4b64 03       		.byte	0x3
+ 33607 4b65 91       		.byte	0x91
+ 33608 4b66 E060     		.sleb128 -4000
+ 33609 4b68 33       		.uleb128 0x33
+ 33610 4b69 00000000 		.quad	.LBB1217
+ 33610      00000000 
+ 33611 4b71 00000000 		.quad	.LBE1217
+ 33611      00000000 
+ 33612 4b79 34       		.uleb128 0x34
+ 33613 4b7a EF480000 		.long	0x48ef
+ 33614 4b7e 03       		.byte	0x3
+ 33615 4b7f 91       		.byte	0x91
+ 33616 4b80 C04F     		.sleb128 -6208
+ 33617 4b82 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 923
+
+
+ 33618 4b83 F9480000 		.long	0x48f9
+ 33619 4b87 03       		.byte	0x3
+ 33620 4b88 91       		.byte	0x91
+ 33621 4b89 8061     		.sleb128 -3968
+ 33622 4b8b 34       		.uleb128 0x34
+ 33623 4b8c 05490000 		.long	0x4905
+ 33624 4b90 03       		.byte	0x3
+ 33625 4b91 91       		.byte	0x91
+ 33626 4b92 FC60     		.sleb128 -3972
+ 33627 4b94 31       		.uleb128 0x31
+ 33628 4b95 12490000 		.long	0x4912
+ 33629 4b99 00000000 		.quad	.LBB1218
+ 33629      00000000 
+ 33630 4ba1 00000000 		.quad	.LBE1218
+ 33630      00000000 
+ 33631 4ba9 02       		.byte	0x2
+ 33632 4baa 5F06     		.value	0x65f
+ 33633 4bac DE4B0000 		.long	0x4bde
+ 33634 4bb0 32       		.uleb128 0x32
+ 33635 4bb1 24490000 		.long	0x4924
+ 33636 4bb5 03       		.byte	0x3
+ 33637 4bb6 91       		.byte	0x91
+ 33638 4bb7 8461     		.sleb128 -3964
+ 33639 4bb9 33       		.uleb128 0x33
+ 33640 4bba 00000000 		.quad	.LBB1219
+ 33640      00000000 
+ 33641 4bc2 00000000 		.quad	.LBE1219
+ 33641      00000000 
+ 33642 4bca 34       		.uleb128 0x34
+ 33643 4bcb 2E490000 		.long	0x492e
+ 33644 4bcf 03       		.byte	0x3
+ 33645 4bd0 91       		.byte	0x91
+ 33646 4bd1 B04F     		.sleb128 -6224
+ 33647 4bd3 34       		.uleb128 0x34
+ 33648 4bd4 3A490000 		.long	0x493a
+ 33649 4bd8 03       		.byte	0x3
+ 33650 4bd9 91       		.byte	0x91
+ 33651 4bda 8861     		.sleb128 -3960
+ 33652 4bdc 00       		.byte	0x0
+ 33653 4bdd 00       		.byte	0x0
+ 33654 4bde 35       		.uleb128 0x35
+ 33655 4bdf 46490000 		.long	0x4946
+ 33656 4be3 00000000 		.quad	.LBB1220
+ 33656      00000000 
+ 33657 4beb 00000000 		.quad	.LBE1220
+ 33657      00000000 
+ 33658 4bf3 02       		.byte	0x2
+ 33659 4bf4 6006     		.value	0x660
+ 33660 4bf6 32       		.uleb128 0x32
+ 33661 4bf7 58490000 		.long	0x4958
+ 33662 4bfb 03       		.byte	0x3
+ 33663 4bfc 91       		.byte	0x91
+ 33664 4bfd 8C61     		.sleb128 -3956
+ 33665 4bff 00       		.byte	0x0
+ 33666 4c00 00       		.byte	0x0
+ 33667 4c01 00       		.byte	0x0
+ 33668 4c02 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 924
+
+
+ 33669 4c03 A30E0000 		.long	0xea3
+ 33670 4c07 00000000 		.quad	.LBB1222
+ 33670      00000000 
+ 33671 4c0f 00000000 		.quad	.LBE1222
+ 33671      00000000 
+ 33672 4c17 02       		.byte	0x2
+ 33673 4c18 FE06     		.value	0x6fe
+ 33674 4c1a 024D0000 		.long	0x4d02
+ 33675 4c1e 32       		.uleb128 0x32
+ 33676 4c1f B50E0000 		.long	0xeb5
+ 33677 4c23 03       		.byte	0x3
+ 33678 4c24 91       		.byte	0x91
+ 33679 4c25 9061     		.sleb128 -3952
+ 33680 4c27 33       		.uleb128 0x33
+ 33681 4c28 00000000 		.quad	.LBB1223
+ 33681      00000000 
+ 33682 4c30 00000000 		.quad	.LBE1223
+ 33682      00000000 
+ 33683 4c38 34       		.uleb128 0x34
+ 33684 4c39 C10E0000 		.long	0xec1
+ 33685 4c3d 03       		.byte	0x3
+ 33686 4c3e 76       		.byte	0x76
+ 33687 4c3f D04B     		.sleb128 -6704
+ 33688 4c41 31       		.uleb128 0x31
+ 33689 4c42 CE0E0000 		.long	0xece
+ 33690 4c46 00000000 		.quad	.LBB1224
+ 33690      00000000 
+ 33691 4c4e 00000000 		.quad	.LBE1224
+ 33691      00000000 
+ 33692 4c56 02       		.byte	0x2
+ 33693 4c57 1F06     		.value	0x61f
+ 33694 4c59 824C0000 		.long	0x4c82
+ 33695 4c5d 32       		.uleb128 0x32
+ 33696 4c5e E00E0000 		.long	0xee0
+ 33697 4c62 03       		.byte	0x3
+ 33698 4c63 91       		.byte	0x91
+ 33699 4c64 A061     		.sleb128 -3936
+ 33700 4c66 33       		.uleb128 0x33
+ 33701 4c67 00000000 		.quad	.LBB1225
+ 33701      00000000 
+ 33702 4c6f 00000000 		.quad	.LBE1225
+ 33702      00000000 
+ 33703 4c77 34       		.uleb128 0x34
+ 33704 4c78 EC0E0000 		.long	0xeec
+ 33705 4c7c 03       		.byte	0x3
+ 33706 4c7d 91       		.byte	0x91
+ 33707 4c7e D04F     		.sleb128 -6192
+ 33708 4c80 00       		.byte	0x0
+ 33709 4c81 00       		.byte	0x0
+ 33710 4c82 31       		.uleb128 0x31
+ 33711 4c83 CE0E0000 		.long	0xece
+ 33712 4c87 00000000 		.quad	.LBB1226
+ 33712      00000000 
+ 33713 4c8f 00000000 		.quad	.LBE1226
+ 33713      00000000 
+ 33714 4c97 02       		.byte	0x2
+ 33715 4c98 2006     		.value	0x620
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 925
+
+
+ 33716 4c9a C34C0000 		.long	0x4cc3
+ 33717 4c9e 32       		.uleb128 0x32
+ 33718 4c9f E00E0000 		.long	0xee0
+ 33719 4ca3 03       		.byte	0x3
+ 33720 4ca4 91       		.byte	0x91
+ 33721 4ca5 B061     		.sleb128 -3920
+ 33722 4ca7 33       		.uleb128 0x33
+ 33723 4ca8 00000000 		.quad	.LBB1227
+ 33723      00000000 
+ 33724 4cb0 00000000 		.quad	.LBE1227
+ 33724      00000000 
+ 33725 4cb8 34       		.uleb128 0x34
+ 33726 4cb9 EC0E0000 		.long	0xeec
+ 33727 4cbd 03       		.byte	0x3
+ 33728 4cbe 91       		.byte	0x91
+ 33729 4cbf E04F     		.sleb128 -6176
+ 33730 4cc1 00       		.byte	0x0
+ 33731 4cc2 00       		.byte	0x0
+ 33732 4cc3 35       		.uleb128 0x35
+ 33733 4cc4 CE0E0000 		.long	0xece
+ 33734 4cc8 00000000 		.quad	.LBB1228
+ 33734      00000000 
+ 33735 4cd0 00000000 		.quad	.LBE1228
+ 33735      00000000 
+ 33736 4cd8 02       		.byte	0x2
+ 33737 4cd9 2106     		.value	0x621
+ 33738 4cdb 32       		.uleb128 0x32
+ 33739 4cdc E00E0000 		.long	0xee0
+ 33740 4ce0 03       		.byte	0x3
+ 33741 4ce1 91       		.byte	0x91
+ 33742 4ce2 C061     		.sleb128 -3904
+ 33743 4ce4 33       		.uleb128 0x33
+ 33744 4ce5 00000000 		.quad	.LBB1229
+ 33744      00000000 
+ 33745 4ced 00000000 		.quad	.LBE1229
+ 33745      00000000 
+ 33746 4cf5 34       		.uleb128 0x34
+ 33747 4cf6 EC0E0000 		.long	0xeec
+ 33748 4cfa 03       		.byte	0x3
+ 33749 4cfb 91       		.byte	0x91
+ 33750 4cfc F04F     		.sleb128 -6160
+ 33751 4cfe 00       		.byte	0x0
+ 33752 4cff 00       		.byte	0x0
+ 33753 4d00 00       		.byte	0x0
+ 33754 4d01 00       		.byte	0x0
+ 33755 4d02 31       		.uleb128 0x31
+ 33756 4d03 A30E0000 		.long	0xea3
+ 33757 4d07 00000000 		.quad	.LBB1230
+ 33757      00000000 
+ 33758 4d0f 00000000 		.quad	.LBE1230
+ 33758      00000000 
+ 33759 4d17 02       		.byte	0x2
+ 33760 4d18 0007     		.value	0x700
+ 33761 4d1a 024E0000 		.long	0x4e02
+ 33762 4d1e 32       		.uleb128 0x32
+ 33763 4d1f B50E0000 		.long	0xeb5
+ 33764 4d23 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 926
+
+
+ 33765 4d24 91       		.byte	0x91
+ 33766 4d25 D061     		.sleb128 -3888
+ 33767 4d27 33       		.uleb128 0x33
+ 33768 4d28 00000000 		.quad	.LBB1231
+ 33768      00000000 
+ 33769 4d30 00000000 		.quad	.LBE1231
+ 33769      00000000 
+ 33770 4d38 34       		.uleb128 0x34
+ 33771 4d39 C10E0000 		.long	0xec1
+ 33772 4d3d 03       		.byte	0x3
+ 33773 4d3e 76       		.byte	0x76
+ 33774 4d3f E04B     		.sleb128 -6688
+ 33775 4d41 31       		.uleb128 0x31
+ 33776 4d42 CE0E0000 		.long	0xece
+ 33777 4d46 00000000 		.quad	.LBB1232
+ 33777      00000000 
+ 33778 4d4e 00000000 		.quad	.LBE1232
+ 33778      00000000 
+ 33779 4d56 02       		.byte	0x2
+ 33780 4d57 1F06     		.value	0x61f
+ 33781 4d59 824D0000 		.long	0x4d82
+ 33782 4d5d 32       		.uleb128 0x32
+ 33783 4d5e E00E0000 		.long	0xee0
+ 33784 4d62 03       		.byte	0x3
+ 33785 4d63 91       		.byte	0x91
+ 33786 4d64 E061     		.sleb128 -3872
+ 33787 4d66 33       		.uleb128 0x33
+ 33788 4d67 00000000 		.quad	.LBB1233
+ 33788      00000000 
+ 33789 4d6f 00000000 		.quad	.LBE1233
+ 33789      00000000 
+ 33790 4d77 34       		.uleb128 0x34
+ 33791 4d78 EC0E0000 		.long	0xeec
+ 33792 4d7c 03       		.byte	0x3
+ 33793 4d7d 91       		.byte	0x91
+ 33794 4d7e 8050     		.sleb128 -6144
+ 33795 4d80 00       		.byte	0x0
+ 33796 4d81 00       		.byte	0x0
+ 33797 4d82 31       		.uleb128 0x31
+ 33798 4d83 CE0E0000 		.long	0xece
+ 33799 4d87 00000000 		.quad	.LBB1234
+ 33799      00000000 
+ 33800 4d8f 00000000 		.quad	.LBE1234
+ 33800      00000000 
+ 33801 4d97 02       		.byte	0x2
+ 33802 4d98 2006     		.value	0x620
+ 33803 4d9a C34D0000 		.long	0x4dc3
+ 33804 4d9e 32       		.uleb128 0x32
+ 33805 4d9f E00E0000 		.long	0xee0
+ 33806 4da3 03       		.byte	0x3
+ 33807 4da4 91       		.byte	0x91
+ 33808 4da5 F061     		.sleb128 -3856
+ 33809 4da7 33       		.uleb128 0x33
+ 33810 4da8 00000000 		.quad	.LBB1235
+ 33810      00000000 
+ 33811 4db0 00000000 		.quad	.LBE1235
+ 33811      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 927
+
+
+ 33812 4db8 34       		.uleb128 0x34
+ 33813 4db9 EC0E0000 		.long	0xeec
+ 33814 4dbd 03       		.byte	0x3
+ 33815 4dbe 91       		.byte	0x91
+ 33816 4dbf 9050     		.sleb128 -6128
+ 33817 4dc1 00       		.byte	0x0
+ 33818 4dc2 00       		.byte	0x0
+ 33819 4dc3 35       		.uleb128 0x35
+ 33820 4dc4 CE0E0000 		.long	0xece
+ 33821 4dc8 00000000 		.quad	.LBB1236
+ 33821      00000000 
+ 33822 4dd0 00000000 		.quad	.LBE1236
+ 33822      00000000 
+ 33823 4dd8 02       		.byte	0x2
+ 33824 4dd9 2106     		.value	0x621
+ 33825 4ddb 32       		.uleb128 0x32
+ 33826 4ddc E00E0000 		.long	0xee0
+ 33827 4de0 03       		.byte	0x3
+ 33828 4de1 91       		.byte	0x91
+ 33829 4de2 8062     		.sleb128 -3840
+ 33830 4de4 33       		.uleb128 0x33
+ 33831 4de5 00000000 		.quad	.LBB1237
+ 33831      00000000 
+ 33832 4ded 00000000 		.quad	.LBE1237
+ 33832      00000000 
+ 33833 4df5 34       		.uleb128 0x34
+ 33834 4df6 EC0E0000 		.long	0xeec
+ 33835 4dfa 03       		.byte	0x3
+ 33836 4dfb 91       		.byte	0x91
+ 33837 4dfc A050     		.sleb128 -6112
+ 33838 4dfe 00       		.byte	0x0
+ 33839 4dff 00       		.byte	0x0
+ 33840 4e00 00       		.byte	0x0
+ 33841 4e01 00       		.byte	0x0
+ 33842 4e02 31       		.uleb128 0x31
+ 33843 4e03 780E0000 		.long	0xe78
+ 33844 4e07 00000000 		.quad	.LBB1238
+ 33844      00000000 
+ 33845 4e0f 00000000 		.quad	.LBE1238
+ 33845      00000000 
+ 33846 4e17 02       		.byte	0x2
+ 33847 4e18 0107     		.value	0x701
+ 33848 4e1a 434E0000 		.long	0x4e43
+ 33849 4e1e 32       		.uleb128 0x32
+ 33850 4e1f 8A0E0000 		.long	0xe8a
+ 33851 4e23 03       		.byte	0x3
+ 33852 4e24 91       		.byte	0x91
+ 33853 4e25 9062     		.sleb128 -3824
+ 33854 4e27 33       		.uleb128 0x33
+ 33855 4e28 00000000 		.quad	.LBB1239
+ 33855      00000000 
+ 33856 4e30 00000000 		.quad	.LBE1239
+ 33856      00000000 
+ 33857 4e38 34       		.uleb128 0x34
+ 33858 4e39 960E0000 		.long	0xe96
+ 33859 4e3d 03       		.byte	0x3
+ 33860 4e3e 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 928
+
+
+ 33861 4e3f B050     		.sleb128 -6096
+ 33862 4e41 00       		.byte	0x0
+ 33863 4e42 00       		.byte	0x0
+ 33864 4e43 31       		.uleb128 0x31
+ 33865 4e44 63490000 		.long	0x4963
+ 33866 4e48 00000000 		.quad	.LBB1240
+ 33866      00000000 
+ 33867 4e50 00000000 		.quad	.LBE1240
+ 33867      00000000 
+ 33868 4e58 02       		.byte	0x2
+ 33869 4e59 0307     		.value	0x703
+ 33870 4e5b 964E0000 		.long	0x4e96
+ 33871 4e5f 32       		.uleb128 0x32
+ 33872 4e60 7F490000 		.long	0x497f
+ 33873 4e64 03       		.byte	0x3
+ 33874 4e65 91       		.byte	0x91
+ 33875 4e66 A062     		.sleb128 -3808
+ 33876 4e68 32       		.uleb128 0x32
+ 33877 4e69 75490000 		.long	0x4975
+ 33878 4e6d 03       		.byte	0x3
+ 33879 4e6e 91       		.byte	0x91
+ 33880 4e6f B062     		.sleb128 -3792
+ 33881 4e71 33       		.uleb128 0x33
+ 33882 4e72 00000000 		.quad	.LBB1241
+ 33882      00000000 
+ 33883 4e7a 00000000 		.quad	.LBE1241
+ 33883      00000000 
+ 33884 4e82 34       		.uleb128 0x34
+ 33885 4e83 89490000 		.long	0x4989
+ 33886 4e87 03       		.byte	0x3
+ 33887 4e88 91       		.byte	0x91
+ 33888 4e89 D050     		.sleb128 -6064
+ 33889 4e8b 34       		.uleb128 0x34
+ 33890 4e8c 94490000 		.long	0x4994
+ 33891 4e90 03       		.byte	0x3
+ 33892 4e91 91       		.byte	0x91
+ 33893 4e92 C050     		.sleb128 -6080
+ 33894 4e94 00       		.byte	0x0
+ 33895 4e95 00       		.byte	0x0
+ 33896 4e96 31       		.uleb128 0x31
+ 33897 4e97 A0490000 		.long	0x49a0
+ 33898 4e9b 00000000 		.quad	.LBB1242
+ 33898      00000000 
+ 33899 4ea3 00000000 		.quad	.LBE1242
+ 33899      00000000 
+ 33900 4eab 02       		.byte	0x2
+ 33901 4eac 0607     		.value	0x706
+ 33902 4eae E94E0000 		.long	0x4ee9
+ 33903 4eb2 32       		.uleb128 0x32
+ 33904 4eb3 BC490000 		.long	0x49bc
+ 33905 4eb7 03       		.byte	0x3
+ 33906 4eb8 91       		.byte	0x91
+ 33907 4eb9 C062     		.sleb128 -3776
+ 33908 4ebb 32       		.uleb128 0x32
+ 33909 4ebc B2490000 		.long	0x49b2
+ 33910 4ec0 03       		.byte	0x3
+ 33911 4ec1 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 929
+
+
+ 33912 4ec2 D062     		.sleb128 -3760
+ 33913 4ec4 33       		.uleb128 0x33
+ 33914 4ec5 00000000 		.quad	.LBB1243
+ 33914      00000000 
+ 33915 4ecd 00000000 		.quad	.LBE1243
+ 33915      00000000 
+ 33916 4ed5 34       		.uleb128 0x34
+ 33917 4ed6 C6490000 		.long	0x49c6
+ 33918 4eda 03       		.byte	0x3
+ 33919 4edb 91       		.byte	0x91
+ 33920 4edc F050     		.sleb128 -6032
+ 33921 4ede 34       		.uleb128 0x34
+ 33922 4edf D1490000 		.long	0x49d1
+ 33923 4ee3 03       		.byte	0x3
+ 33924 4ee4 91       		.byte	0x91
+ 33925 4ee5 E050     		.sleb128 -6048
+ 33926 4ee7 00       		.byte	0x0
+ 33927 4ee8 00       		.byte	0x0
+ 33928 4ee9 31       		.uleb128 0x31
+ 33929 4eea A30E0000 		.long	0xea3
+ 33930 4eee 00000000 		.quad	.LBB1244
+ 33930      00000000 
+ 33931 4ef6 00000000 		.quad	.LBE1244
+ 33931      00000000 
+ 33932 4efe 02       		.byte	0x2
+ 33933 4eff 0A07     		.value	0x70a
+ 33934 4f01 E94F0000 		.long	0x4fe9
+ 33935 4f05 32       		.uleb128 0x32
+ 33936 4f06 B50E0000 		.long	0xeb5
+ 33937 4f0a 03       		.byte	0x3
+ 33938 4f0b 91       		.byte	0x91
+ 33939 4f0c E062     		.sleb128 -3744
+ 33940 4f0e 33       		.uleb128 0x33
+ 33941 4f0f 00000000 		.quad	.LBB1245
+ 33941      00000000 
+ 33942 4f17 00000000 		.quad	.LBE1245
+ 33942      00000000 
+ 33943 4f1f 34       		.uleb128 0x34
+ 33944 4f20 C10E0000 		.long	0xec1
+ 33945 4f24 03       		.byte	0x3
+ 33946 4f25 76       		.byte	0x76
+ 33947 4f26 F04B     		.sleb128 -6672
+ 33948 4f28 31       		.uleb128 0x31
+ 33949 4f29 CE0E0000 		.long	0xece
+ 33950 4f2d 00000000 		.quad	.LBB1246
+ 33950      00000000 
+ 33951 4f35 00000000 		.quad	.LBE1246
+ 33951      00000000 
+ 33952 4f3d 02       		.byte	0x2
+ 33953 4f3e 1F06     		.value	0x61f
+ 33954 4f40 694F0000 		.long	0x4f69
+ 33955 4f44 32       		.uleb128 0x32
+ 33956 4f45 E00E0000 		.long	0xee0
+ 33957 4f49 03       		.byte	0x3
+ 33958 4f4a 91       		.byte	0x91
+ 33959 4f4b F062     		.sleb128 -3728
+ 33960 4f4d 33       		.uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 930
+
+
+ 33961 4f4e 00000000 		.quad	.LBB1247
+ 33961      00000000 
+ 33962 4f56 00000000 		.quad	.LBE1247
+ 33962      00000000 
+ 33963 4f5e 34       		.uleb128 0x34
+ 33964 4f5f EC0E0000 		.long	0xeec
+ 33965 4f63 03       		.byte	0x3
+ 33966 4f64 91       		.byte	0x91
+ 33967 4f65 8051     		.sleb128 -6016
+ 33968 4f67 00       		.byte	0x0
+ 33969 4f68 00       		.byte	0x0
+ 33970 4f69 31       		.uleb128 0x31
+ 33971 4f6a CE0E0000 		.long	0xece
+ 33972 4f6e 00000000 		.quad	.LBB1248
+ 33972      00000000 
+ 33973 4f76 00000000 		.quad	.LBE1248
+ 33973      00000000 
+ 33974 4f7e 02       		.byte	0x2
+ 33975 4f7f 2006     		.value	0x620
+ 33976 4f81 AA4F0000 		.long	0x4faa
+ 33977 4f85 32       		.uleb128 0x32
+ 33978 4f86 E00E0000 		.long	0xee0
+ 33979 4f8a 03       		.byte	0x3
+ 33980 4f8b 91       		.byte	0x91
+ 33981 4f8c 8063     		.sleb128 -3712
+ 33982 4f8e 33       		.uleb128 0x33
+ 33983 4f8f 00000000 		.quad	.LBB1249
+ 33983      00000000 
+ 33984 4f97 00000000 		.quad	.LBE1249
+ 33984      00000000 
+ 33985 4f9f 34       		.uleb128 0x34
+ 33986 4fa0 EC0E0000 		.long	0xeec
+ 33987 4fa4 03       		.byte	0x3
+ 33988 4fa5 91       		.byte	0x91
+ 33989 4fa6 9051     		.sleb128 -6000
+ 33990 4fa8 00       		.byte	0x0
+ 33991 4fa9 00       		.byte	0x0
+ 33992 4faa 35       		.uleb128 0x35
+ 33993 4fab CE0E0000 		.long	0xece
+ 33994 4faf 00000000 		.quad	.LBB1250
+ 33994      00000000 
+ 33995 4fb7 00000000 		.quad	.LBE1250
+ 33995      00000000 
+ 33996 4fbf 02       		.byte	0x2
+ 33997 4fc0 2106     		.value	0x621
+ 33998 4fc2 32       		.uleb128 0x32
+ 33999 4fc3 E00E0000 		.long	0xee0
+ 34000 4fc7 03       		.byte	0x3
+ 34001 4fc8 91       		.byte	0x91
+ 34002 4fc9 9063     		.sleb128 -3696
+ 34003 4fcb 33       		.uleb128 0x33
+ 34004 4fcc 00000000 		.quad	.LBB1251
+ 34004      00000000 
+ 34005 4fd4 00000000 		.quad	.LBE1251
+ 34005      00000000 
+ 34006 4fdc 34       		.uleb128 0x34
+ 34007 4fdd EC0E0000 		.long	0xeec
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 931
+
+
+ 34008 4fe1 03       		.byte	0x3
+ 34009 4fe2 91       		.byte	0x91
+ 34010 4fe3 A051     		.sleb128 -5984
+ 34011 4fe5 00       		.byte	0x0
+ 34012 4fe6 00       		.byte	0x0
+ 34013 4fe7 00       		.byte	0x0
+ 34014 4fe8 00       		.byte	0x0
+ 34015 4fe9 31       		.uleb128 0x31
+ 34016 4fea A30E0000 		.long	0xea3
+ 34017 4fee 00000000 		.quad	.LBB1252
+ 34017      00000000 
+ 34018 4ff6 00000000 		.quad	.LBE1252
+ 34018      00000000 
+ 34019 4ffe 02       		.byte	0x2
+ 34020 4fff 0B07     		.value	0x70b
+ 34021 5001 E9500000 		.long	0x50e9
+ 34022 5005 32       		.uleb128 0x32
+ 34023 5006 B50E0000 		.long	0xeb5
+ 34024 500a 03       		.byte	0x3
+ 34025 500b 91       		.byte	0x91
+ 34026 500c A063     		.sleb128 -3680
+ 34027 500e 33       		.uleb128 0x33
+ 34028 500f 00000000 		.quad	.LBB1253
+ 34028      00000000 
+ 34029 5017 00000000 		.quad	.LBE1253
+ 34029      00000000 
+ 34030 501f 34       		.uleb128 0x34
+ 34031 5020 C10E0000 		.long	0xec1
+ 34032 5024 03       		.byte	0x3
+ 34033 5025 76       		.byte	0x76
+ 34034 5026 804C     		.sleb128 -6656
+ 34035 5028 31       		.uleb128 0x31
+ 34036 5029 CE0E0000 		.long	0xece
+ 34037 502d 00000000 		.quad	.LBB1254
+ 34037      00000000 
+ 34038 5035 00000000 		.quad	.LBE1254
+ 34038      00000000 
+ 34039 503d 02       		.byte	0x2
+ 34040 503e 1F06     		.value	0x61f
+ 34041 5040 69500000 		.long	0x5069
+ 34042 5044 32       		.uleb128 0x32
+ 34043 5045 E00E0000 		.long	0xee0
+ 34044 5049 03       		.byte	0x3
+ 34045 504a 91       		.byte	0x91
+ 34046 504b B063     		.sleb128 -3664
+ 34047 504d 33       		.uleb128 0x33
+ 34048 504e 00000000 		.quad	.LBB1255
+ 34048      00000000 
+ 34049 5056 00000000 		.quad	.LBE1255
+ 34049      00000000 
+ 34050 505e 34       		.uleb128 0x34
+ 34051 505f EC0E0000 		.long	0xeec
+ 34052 5063 03       		.byte	0x3
+ 34053 5064 91       		.byte	0x91
+ 34054 5065 B051     		.sleb128 -5968
+ 34055 5067 00       		.byte	0x0
+ 34056 5068 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 932
+
+
+ 34057 5069 31       		.uleb128 0x31
+ 34058 506a CE0E0000 		.long	0xece
+ 34059 506e 00000000 		.quad	.LBB1256
+ 34059      00000000 
+ 34060 5076 00000000 		.quad	.LBE1256
+ 34060      00000000 
+ 34061 507e 02       		.byte	0x2
+ 34062 507f 2006     		.value	0x620
+ 34063 5081 AA500000 		.long	0x50aa
+ 34064 5085 32       		.uleb128 0x32
+ 34065 5086 E00E0000 		.long	0xee0
+ 34066 508a 03       		.byte	0x3
+ 34067 508b 91       		.byte	0x91
+ 34068 508c C063     		.sleb128 -3648
+ 34069 508e 33       		.uleb128 0x33
+ 34070 508f 00000000 		.quad	.LBB1257
+ 34070      00000000 
+ 34071 5097 00000000 		.quad	.LBE1257
+ 34071      00000000 
+ 34072 509f 34       		.uleb128 0x34
+ 34073 50a0 EC0E0000 		.long	0xeec
+ 34074 50a4 03       		.byte	0x3
+ 34075 50a5 91       		.byte	0x91
+ 34076 50a6 C051     		.sleb128 -5952
+ 34077 50a8 00       		.byte	0x0
+ 34078 50a9 00       		.byte	0x0
+ 34079 50aa 35       		.uleb128 0x35
+ 34080 50ab CE0E0000 		.long	0xece
+ 34081 50af 00000000 		.quad	.LBB1258
+ 34081      00000000 
+ 34082 50b7 00000000 		.quad	.LBE1258
+ 34082      00000000 
+ 34083 50bf 02       		.byte	0x2
+ 34084 50c0 2106     		.value	0x621
+ 34085 50c2 32       		.uleb128 0x32
+ 34086 50c3 E00E0000 		.long	0xee0
+ 34087 50c7 03       		.byte	0x3
+ 34088 50c8 91       		.byte	0x91
+ 34089 50c9 D063     		.sleb128 -3632
+ 34090 50cb 33       		.uleb128 0x33
+ 34091 50cc 00000000 		.quad	.LBB1259
+ 34091      00000000 
+ 34092 50d4 00000000 		.quad	.LBE1259
+ 34092      00000000 
+ 34093 50dc 34       		.uleb128 0x34
+ 34094 50dd EC0E0000 		.long	0xeec
+ 34095 50e1 03       		.byte	0x3
+ 34096 50e2 91       		.byte	0x91
+ 34097 50e3 D051     		.sleb128 -5936
+ 34098 50e5 00       		.byte	0x0
+ 34099 50e6 00       		.byte	0x0
+ 34100 50e7 00       		.byte	0x0
+ 34101 50e8 00       		.byte	0x0
+ 34102 50e9 31       		.uleb128 0x31
+ 34103 50ea D10B0000 		.long	0xbd1
+ 34104 50ee 00000000 		.quad	.LBB1260
+ 34104      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 933
+
+
+ 34105 50f6 00000000 		.quad	.LBE1260
+ 34105      00000000 
+ 34106 50fe 02       		.byte	0x2
+ 34107 50ff 0C07     		.value	0x70c
+ 34108 5101 8F550000 		.long	0x558f
+ 34109 5105 32       		.uleb128 0x32
+ 34110 5106 EF0B0000 		.long	0xbef
+ 34111 510a 03       		.byte	0x3
+ 34112 510b 91       		.byte	0x91
+ 34113 510c EC63     		.sleb128 -3604
+ 34114 510e 32       		.uleb128 0x32
+ 34115 510f E30B0000 		.long	0xbe3
+ 34116 5113 03       		.byte	0x3
+ 34117 5114 91       		.byte	0x91
+ 34118 5115 F063     		.sleb128 -3600
+ 34119 5117 33       		.uleb128 0x33
+ 34120 5118 00000000 		.quad	.LBB1261
+ 34120      00000000 
+ 34121 5120 00000000 		.quad	.LBE1261
+ 34121      00000000 
+ 34122 5128 34       		.uleb128 0x34
+ 34123 5129 FB0B0000 		.long	0xbfb
+ 34124 512d 03       		.byte	0x3
+ 34125 512e 76       		.byte	0x76
+ 34126 512f A04C     		.sleb128 -6624
+ 34127 5131 34       		.uleb128 0x34
+ 34128 5132 070C0000 		.long	0xc07
+ 34129 5136 03       		.byte	0x3
+ 34130 5137 76       		.byte	0x76
+ 34131 5138 904C     		.sleb128 -6640
+ 34132 513a 31       		.uleb128 0x31
+ 34133 513b 500C0000 		.long	0xc50
+ 34134 513f 00000000 		.quad	.LBB1262
+ 34134      00000000 
+ 34135 5147 00000000 		.quad	.LBE1262
+ 34135      00000000 
+ 34136 514f 02       		.byte	0x2
+ 34137 5150 9106     		.value	0x691
+ 34138 5152 8D510000 		.long	0x518d
+ 34139 5156 32       		.uleb128 0x32
+ 34140 5157 7A0C0000 		.long	0xc7a
+ 34141 515b 03       		.byte	0x3
+ 34142 515c 91       		.byte	0x91
+ 34143 515d 8864     		.sleb128 -3576
+ 34144 515f 32       		.uleb128 0x32
+ 34145 5160 6E0C0000 		.long	0xc6e
+ 34146 5164 03       		.byte	0x3
+ 34147 5165 91       		.byte	0x91
+ 34148 5166 8C64     		.sleb128 -3572
+ 34149 5168 32       		.uleb128 0x32
+ 34150 5169 620C0000 		.long	0xc62
+ 34151 516d 03       		.byte	0x3
+ 34152 516e 91       		.byte	0x91
+ 34153 516f 9064     		.sleb128 -3568
+ 34154 5171 33       		.uleb128 0x33
+ 34155 5172 00000000 		.quad	.LBB1263
+ 34155      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 934
+
+
+ 34156 517a 00000000 		.quad	.LBE1263
+ 34156      00000000 
+ 34157 5182 34       		.uleb128 0x34
+ 34158 5183 860C0000 		.long	0xc86
+ 34159 5187 03       		.byte	0x3
+ 34160 5188 91       		.byte	0x91
+ 34161 5189 A052     		.sleb128 -5856
+ 34162 518b 00       		.byte	0x0
+ 34163 518c 00       		.byte	0x0
+ 34164 518d 31       		.uleb128 0x31
+ 34165 518e 910C0000 		.long	0xc91
+ 34166 5192 00000000 		.quad	.LBB1264
+ 34166      00000000 
+ 34167 519a 00000000 		.quad	.LBE1264
+ 34167      00000000 
+ 34168 51a2 02       		.byte	0x2
+ 34169 51a3 9206     		.value	0x692
+ 34170 51a5 FD530000 		.long	0x53fd
+ 34171 51a9 32       		.uleb128 0x32
+ 34172 51aa A30C0000 		.long	0xca3
+ 34173 51ae 03       		.byte	0x3
+ 34174 51af 91       		.byte	0x91
+ 34175 51b0 A064     		.sleb128 -3552
+ 34176 51b2 35       		.uleb128 0x35
+ 34177 51b3 B00C0000 		.long	0xcb0
+ 34178 51b7 00000000 		.quad	.LBB1266
+ 34178      00000000 
+ 34179 51bf 00000000 		.quad	.LBE1266
+ 34179      00000000 
+ 34180 51c7 02       		.byte	0x2
+ 34181 51c8 7D03     		.value	0x37d
+ 34182 51ca 32       		.uleb128 0x32
+ 34183 51cb CE0C0000 		.long	0xcce
+ 34184 51cf 03       		.byte	0x3
+ 34185 51d0 91       		.byte	0x91
+ 34186 51d1 B864     		.sleb128 -3528
+ 34187 51d3 32       		.uleb128 0x32
+ 34188 51d4 C20C0000 		.long	0xcc2
+ 34189 51d8 03       		.byte	0x3
+ 34190 51d9 91       		.byte	0x91
+ 34191 51da C064     		.sleb128 -3520
+ 34192 51dc 33       		.uleb128 0x33
+ 34193 51dd 00000000 		.quad	.LBB1267
+ 34193      00000000 
+ 34194 51e5 00000000 		.quad	.LBE1267
+ 34194      00000000 
+ 34195 51ed 34       		.uleb128 0x34
+ 34196 51ee DA0C0000 		.long	0xcda
+ 34197 51f2 03       		.byte	0x3
+ 34198 51f3 91       		.byte	0x91
+ 34199 51f4 9065     		.sleb128 -3440
+ 34200 51f6 34       		.uleb128 0x34
+ 34201 51f7 E50C0000 		.long	0xce5
+ 34202 51fb 03       		.byte	0x3
+ 34203 51fc 91       		.byte	0x91
+ 34204 51fd 8065     		.sleb128 -3456
+ 34205 51ff 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 935
+
+
+ 34206 5200 F00C0000 		.long	0xcf0
+ 34207 5204 03       		.byte	0x3
+ 34208 5205 91       		.byte	0x91
+ 34209 5206 F064     		.sleb128 -3472
+ 34210 5208 34       		.uleb128 0x34
+ 34211 5209 FC0C0000 		.long	0xcfc
+ 34212 520d 03       		.byte	0x3
+ 34213 520e 91       		.byte	0x91
+ 34214 520f E064     		.sleb128 -3488
+ 34215 5211 34       		.uleb128 0x34
+ 34216 5212 080D0000 		.long	0xd08
+ 34217 5216 03       		.byte	0x3
+ 34218 5217 91       		.byte	0x91
+ 34219 5218 DC64     		.sleb128 -3492
+ 34220 521a 31       		.uleb128 0x31
+ 34221 521b 1F0D0000 		.long	0xd1f
+ 34222 521f 00000000 		.quad	.LBB1268
+ 34222      00000000 
+ 34223 5227 00000000 		.quad	.LBE1268
+ 34223      00000000 
+ 34224 522f 02       		.byte	0x2
+ 34225 5230 5603     		.value	0x356
+ 34226 5232 49520000 		.long	0x5249
+ 34227 5236 32       		.uleb128 0x32
+ 34228 5237 3A0D0000 		.long	0xd3a
+ 34229 523b 03       		.byte	0x3
+ 34230 523c 91       		.byte	0x91
+ 34231 523d A065     		.sleb128 -3424
+ 34232 523f 32       		.uleb128 0x32
+ 34233 5240 300D0000 		.long	0xd30
+ 34234 5244 03       		.byte	0x3
+ 34235 5245 91       		.byte	0x91
+ 34236 5246 B065     		.sleb128 -3408
+ 34237 5248 00       		.byte	0x0
+ 34238 5249 31       		.uleb128 0x31
+ 34239 524a 450D0000 		.long	0xd45
+ 34240 524e 00000000 		.quad	.LBB1270
+ 34240      00000000 
+ 34241 5256 00000000 		.quad	.LBE1270
+ 34241      00000000 
+ 34242 525e 02       		.byte	0x2
+ 34243 525f 5E03     		.value	0x35e
+ 34244 5261 78520000 		.long	0x5278
+ 34245 5265 32       		.uleb128 0x32
+ 34246 5266 620D0000 		.long	0xd62
+ 34247 526a 03       		.byte	0x3
+ 34248 526b 91       		.byte	0x91
+ 34249 526c C065     		.sleb128 -3392
+ 34250 526e 32       		.uleb128 0x32
+ 34251 526f 570D0000 		.long	0xd57
+ 34252 5273 03       		.byte	0x3
+ 34253 5274 91       		.byte	0x91
+ 34254 5275 D065     		.sleb128 -3376
+ 34255 5277 00       		.byte	0x0
+ 34256 5278 31       		.uleb128 0x31
+ 34257 5279 6E0D0000 		.long	0xd6e
+ 34258 527d 00000000 		.quad	.LBB1272
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 936
+
+
+ 34258      00000000 
+ 34259 5285 00000000 		.quad	.LBE1272
+ 34259      00000000 
+ 34260 528d 02       		.byte	0x2
+ 34261 528e 6403     		.value	0x364
+ 34262 5290 DD520000 		.long	0x52dd
+ 34263 5294 32       		.uleb128 0x32
+ 34264 5295 8C0D0000 		.long	0xd8c
+ 34265 5299 03       		.byte	0x3
+ 34266 529a 91       		.byte	0x91
+ 34267 529b E065     		.sleb128 -3360
+ 34268 529d 32       		.uleb128 0x32
+ 34269 529e 800D0000 		.long	0xd80
+ 34270 52a2 03       		.byte	0x3
+ 34271 52a3 91       		.byte	0x91
+ 34272 52a4 F065     		.sleb128 -3344
+ 34273 52a6 33       		.uleb128 0x33
+ 34274 52a7 00000000 		.quad	.LBB1273
+ 34274      00000000 
+ 34275 52af 00000000 		.quad	.LBE1273
+ 34275      00000000 
+ 34276 52b7 34       		.uleb128 0x34
+ 34277 52b8 980D0000 		.long	0xd98
+ 34278 52bc 03       		.byte	0x3
+ 34279 52bd 91       		.byte	0x91
+ 34280 52be D052     		.sleb128 -5808
+ 34281 52c0 34       		.uleb128 0x34
+ 34282 52c1 A40D0000 		.long	0xda4
+ 34283 52c5 03       		.byte	0x3
+ 34284 52c6 91       		.byte	0x91
+ 34285 52c7 C052     		.sleb128 -5824
+ 34286 52c9 34       		.uleb128 0x34
+ 34287 52ca AF0D0000 		.long	0xdaf
+ 34288 52ce 03       		.byte	0x3
+ 34289 52cf 91       		.byte	0x91
+ 34290 52d0 B052     		.sleb128 -5840
+ 34291 52d2 34       		.uleb128 0x34
+ 34292 52d3 BB0D0000 		.long	0xdbb
+ 34293 52d7 03       		.byte	0x3
+ 34294 52d8 91       		.byte	0x91
+ 34295 52d9 8C66     		.sleb128 -3316
+ 34296 52db 00       		.byte	0x0
+ 34297 52dc 00       		.byte	0x0
+ 34298 52dd 31       		.uleb128 0x31
+ 34299 52de C70D0000 		.long	0xdc7
+ 34300 52e2 00000000 		.quad	.LBB1274
+ 34300      00000000 
+ 34301 52ea 00000000 		.quad	.LBE1274
+ 34301      00000000 
+ 34302 52f2 02       		.byte	0x2
+ 34303 52f3 6603     		.value	0x366
+ 34304 52f5 0C530000 		.long	0x530c
+ 34305 52f9 32       		.uleb128 0x32
+ 34306 52fa E20D0000 		.long	0xde2
+ 34307 52fe 03       		.byte	0x3
+ 34308 52ff 91       		.byte	0x91
+ 34309 5300 9066     		.sleb128 -3312
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 937
+
+
+ 34310 5302 32       		.uleb128 0x32
+ 34311 5303 D80D0000 		.long	0xdd8
+ 34312 5307 03       		.byte	0x3
+ 34313 5308 91       		.byte	0x91
+ 34314 5309 A066     		.sleb128 -3296
+ 34315 530b 00       		.byte	0x0
+ 34316 530c 31       		.uleb128 0x31
+ 34317 530d 6E0D0000 		.long	0xd6e
+ 34318 5311 00000000 		.quad	.LBB1276
+ 34318      00000000 
+ 34319 5319 00000000 		.quad	.LBE1276
+ 34319      00000000 
+ 34320 5321 02       		.byte	0x2
+ 34321 5322 6803     		.value	0x368
+ 34322 5324 71530000 		.long	0x5371
+ 34323 5328 32       		.uleb128 0x32
+ 34324 5329 8C0D0000 		.long	0xd8c
+ 34325 532d 03       		.byte	0x3
+ 34326 532e 91       		.byte	0x91
+ 34327 532f B066     		.sleb128 -3280
+ 34328 5331 32       		.uleb128 0x32
+ 34329 5332 800D0000 		.long	0xd80
+ 34330 5336 03       		.byte	0x3
+ 34331 5337 91       		.byte	0x91
+ 34332 5338 C066     		.sleb128 -3264
+ 34333 533a 33       		.uleb128 0x33
+ 34334 533b 00000000 		.quad	.LBB1277
+ 34334      00000000 
+ 34335 5343 00000000 		.quad	.LBE1277
+ 34335      00000000 
+ 34336 534b 34       		.uleb128 0x34
+ 34337 534c 980D0000 		.long	0xd98
+ 34338 5350 03       		.byte	0x3
+ 34339 5351 91       		.byte	0x91
+ 34340 5352 8053     		.sleb128 -5760
+ 34341 5354 34       		.uleb128 0x34
+ 34342 5355 A40D0000 		.long	0xda4
+ 34343 5359 03       		.byte	0x3
+ 34344 535a 91       		.byte	0x91
+ 34345 535b F052     		.sleb128 -5776
+ 34346 535d 34       		.uleb128 0x34
+ 34347 535e AF0D0000 		.long	0xdaf
+ 34348 5362 03       		.byte	0x3
+ 34349 5363 91       		.byte	0x91
+ 34350 5364 E052     		.sleb128 -5792
+ 34351 5366 34       		.uleb128 0x34
+ 34352 5367 BB0D0000 		.long	0xdbb
+ 34353 536b 03       		.byte	0x3
+ 34354 536c 91       		.byte	0x91
+ 34355 536d DC66     		.sleb128 -3236
+ 34356 536f 00       		.byte	0x0
+ 34357 5370 00       		.byte	0x0
+ 34358 5371 31       		.uleb128 0x31
+ 34359 5372 C70D0000 		.long	0xdc7
+ 34360 5376 00000000 		.quad	.LBB1278
+ 34360      00000000 
+ 34361 537e 00000000 		.quad	.LBE1278
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 938
+
+
+ 34361      00000000 
+ 34362 5386 02       		.byte	0x2
+ 34363 5387 6A03     		.value	0x36a
+ 34364 5389 A0530000 		.long	0x53a0
+ 34365 538d 32       		.uleb128 0x32
+ 34366 538e E20D0000 		.long	0xde2
+ 34367 5392 03       		.byte	0x3
+ 34368 5393 91       		.byte	0x91
+ 34369 5394 E066     		.sleb128 -3232
+ 34370 5396 32       		.uleb128 0x32
+ 34371 5397 D80D0000 		.long	0xdd8
+ 34372 539b 03       		.byte	0x3
+ 34373 539c 91       		.byte	0x91
+ 34374 539d F066     		.sleb128 -3216
+ 34375 539f 00       		.byte	0x0
+ 34376 53a0 31       		.uleb128 0x31
+ 34377 53a1 ED0D0000 		.long	0xded
+ 34378 53a5 00000000 		.quad	.LBB1280
+ 34378      00000000 
+ 34379 53ad 00000000 		.quad	.LBE1280
+ 34379      00000000 
+ 34380 53b5 02       		.byte	0x2
+ 34381 53b6 6C03     		.value	0x36c
+ 34382 53b8 CF530000 		.long	0x53cf
+ 34383 53bc 32       		.uleb128 0x32
+ 34384 53bd 0A0E0000 		.long	0xe0a
+ 34385 53c1 03       		.byte	0x3
+ 34386 53c2 91       		.byte	0x91
+ 34387 53c3 8067     		.sleb128 -3200
+ 34388 53c5 32       		.uleb128 0x32
+ 34389 53c6 FF0D0000 		.long	0xdff
+ 34390 53ca 03       		.byte	0x3
+ 34391 53cb 91       		.byte	0x91
+ 34392 53cc 9067     		.sleb128 -3184
+ 34393 53ce 00       		.byte	0x0
+ 34394 53cf 35       		.uleb128 0x35
+ 34395 53d0 1F0D0000 		.long	0xd1f
+ 34396 53d4 00000000 		.quad	.LBB1282
+ 34396      00000000 
+ 34397 53dc 00000000 		.quad	.LBE1282
+ 34397      00000000 
+ 34398 53e4 02       		.byte	0x2
+ 34399 53e5 6E03     		.value	0x36e
+ 34400 53e7 32       		.uleb128 0x32
+ 34401 53e8 3A0D0000 		.long	0xd3a
+ 34402 53ec 03       		.byte	0x3
+ 34403 53ed 91       		.byte	0x91
+ 34404 53ee A067     		.sleb128 -3168
+ 34405 53f0 32       		.uleb128 0x32
+ 34406 53f1 300D0000 		.long	0xd30
+ 34407 53f5 03       		.byte	0x3
+ 34408 53f6 91       		.byte	0x91
+ 34409 53f7 B067     		.sleb128 -3152
+ 34410 53f9 00       		.byte	0x0
+ 34411 53fa 00       		.byte	0x0
+ 34412 53fb 00       		.byte	0x0
+ 34413 53fc 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 939
+
+
+ 34414 53fd 36       		.uleb128 0x36
+ 34415 53fe 00000000 		.quad	.LBB1284
+ 34415      00000000 
+ 34416 5406 00000000 		.quad	.LBE1284
+ 34416      00000000 
+ 34417 540e 1C540000 		.long	0x541c
+ 34418 5412 34       		.uleb128 0x34
+ 34419 5413 180C0000 		.long	0xc18
+ 34420 5417 03       		.byte	0x3
+ 34421 5418 91       		.byte	0x91
+ 34422 5419 9052     		.sleb128 -5872
+ 34423 541b 00       		.byte	0x0
+ 34424 541c 31       		.uleb128 0x31
+ 34425 541d 160E0000 		.long	0xe16
+ 34426 5421 00000000 		.quad	.LBB1285
+ 34426      00000000 
+ 34427 5429 00000000 		.quad	.LBE1285
+ 34427      00000000 
+ 34428 5431 02       		.byte	0x2
+ 34429 5432 9406     		.value	0x694
+ 34430 5434 C4540000 		.long	0x54c4
+ 34431 5438 32       		.uleb128 0x32
+ 34432 5439 280E0000 		.long	0xe28
+ 34433 543d 03       		.byte	0x3
+ 34434 543e 91       		.byte	0x91
+ 34435 543f C067     		.sleb128 -3136
+ 34436 5441 33       		.uleb128 0x33
+ 34437 5442 00000000 		.quad	.LBB1286
+ 34437      00000000 
+ 34438 544a 00000000 		.quad	.LBE1286
+ 34438      00000000 
+ 34439 5452 34       		.uleb128 0x34
+ 34440 5453 340E0000 		.long	0xe34
+ 34441 5457 09       		.byte	0x9
+ 34442 5458 03       		.byte	0x3
+ 34443 5459 00000000 		.quad	ShiftRowTable.6768
+ 34443      00000000 
+ 34444 5461 35       		.uleb128 0x35
+ 34445 5462 6E0D0000 		.long	0xd6e
+ 34446 5466 00000000 		.quad	.LBB1287
+ 34446      00000000 
+ 34447 546e 00000000 		.quad	.LBE1287
+ 34447      00000000 
+ 34448 5476 02       		.byte	0x2
+ 34449 5477 9B02     		.value	0x29b
+ 34450 5479 32       		.uleb128 0x32
+ 34451 547a 8C0D0000 		.long	0xd8c
+ 34452 547e 03       		.byte	0x3
+ 34453 547f 91       		.byte	0x91
+ 34454 5480 D067     		.sleb128 -3120
+ 34455 5482 32       		.uleb128 0x32
+ 34456 5483 800D0000 		.long	0xd80
+ 34457 5487 03       		.byte	0x3
+ 34458 5488 91       		.byte	0x91
+ 34459 5489 E067     		.sleb128 -3104
+ 34460 548b 33       		.uleb128 0x33
+ 34461 548c 00000000 		.quad	.LBB1288
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 940
+
+
+ 34461      00000000 
+ 34462 5494 00000000 		.quad	.LBE1288
+ 34462      00000000 
+ 34463 549c 34       		.uleb128 0x34
+ 34464 549d 980D0000 		.long	0xd98
+ 34465 54a1 03       		.byte	0x3
+ 34466 54a2 91       		.byte	0x91
+ 34467 54a3 B053     		.sleb128 -5712
+ 34468 54a5 34       		.uleb128 0x34
+ 34469 54a6 A40D0000 		.long	0xda4
+ 34470 54aa 03       		.byte	0x3
+ 34471 54ab 91       		.byte	0x91
+ 34472 54ac A053     		.sleb128 -5728
+ 34473 54ae 34       		.uleb128 0x34
+ 34474 54af AF0D0000 		.long	0xdaf
+ 34475 54b3 03       		.byte	0x3
+ 34476 54b4 91       		.byte	0x91
+ 34477 54b5 9053     		.sleb128 -5744
+ 34478 54b7 34       		.uleb128 0x34
+ 34479 54b8 BB0D0000 		.long	0xdbb
+ 34480 54bc 03       		.byte	0x3
+ 34481 54bd 91       		.byte	0x91
+ 34482 54be FC67     		.sleb128 -3076
+ 34483 54c0 00       		.byte	0x0
+ 34484 54c1 00       		.byte	0x0
+ 34485 54c2 00       		.byte	0x0
+ 34486 54c3 00       		.byte	0x0
+ 34487 54c4 36       		.uleb128 0x36
+ 34488 54c5 00000000 		.quad	.LBB1289
+ 34488      00000000 
+ 34489 54cd 00000000 		.quad	.LBE1289
+ 34489      00000000 
+ 34490 54d5 E3540000 		.long	0x54e3
+ 34491 54d9 34       		.uleb128 0x34
+ 34492 54da 280C0000 		.long	0xc28
+ 34493 54de 03       		.byte	0x3
+ 34494 54df 91       		.byte	0x91
+ 34495 54e0 8052     		.sleb128 -5888
+ 34496 54e2 00       		.byte	0x0
+ 34497 54e3 31       		.uleb128 0x31
+ 34498 54e4 520E0000 		.long	0xe52
+ 34499 54e8 00000000 		.quad	.LBB1290
+ 34499      00000000 
+ 34500 54f0 00000000 		.quad	.LBE1290
+ 34500      00000000 
+ 34501 54f8 02       		.byte	0x2
+ 34502 54f9 9606     		.value	0x696
+ 34503 54fb 12550000 		.long	0x5512
+ 34504 54ff 32       		.uleb128 0x32
+ 34505 5500 6D0E0000 		.long	0xe6d
+ 34506 5504 03       		.byte	0x3
+ 34507 5505 91       		.byte	0x91
+ 34508 5506 8068     		.sleb128 -3072
+ 34509 5508 32       		.uleb128 0x32
+ 34510 5509 630E0000 		.long	0xe63
+ 34511 550d 03       		.byte	0x3
+ 34512 550e 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 941
+
+
+ 34513 550f 9068     		.sleb128 -3056
+ 34514 5511 00       		.byte	0x0
+ 34515 5512 36       		.uleb128 0x36
+ 34516 5513 00000000 		.quad	.LBB1292
+ 34516      00000000 
+ 34517 551b 00000000 		.quad	.LBE1292
+ 34517      00000000 
+ 34518 5523 31550000 		.long	0x5531
+ 34519 5527 34       		.uleb128 0x34
+ 34520 5528 380C0000 		.long	0xc38
+ 34521 552c 03       		.byte	0x3
+ 34522 552d 91       		.byte	0x91
+ 34523 552e F051     		.sleb128 -5904
+ 34524 5530 00       		.byte	0x0
+ 34525 5531 31       		.uleb128 0x31
+ 34526 5532 780E0000 		.long	0xe78
+ 34527 5536 00000000 		.quad	.LBB1293
+ 34527      00000000 
+ 34528 553e 00000000 		.quad	.LBE1293
+ 34528      00000000 
+ 34529 5546 02       		.byte	0x2
+ 34530 5547 9806     		.value	0x698
+ 34531 5549 72550000 		.long	0x5572
+ 34532 554d 32       		.uleb128 0x32
+ 34533 554e 8A0E0000 		.long	0xe8a
+ 34534 5552 03       		.byte	0x3
+ 34535 5553 91       		.byte	0x91
+ 34536 5554 A068     		.sleb128 -3040
+ 34537 5556 33       		.uleb128 0x33
+ 34538 5557 00000000 		.quad	.LBB1294
+ 34538      00000000 
+ 34539 555f 00000000 		.quad	.LBE1294
+ 34539      00000000 
+ 34540 5567 34       		.uleb128 0x34
+ 34541 5568 960E0000 		.long	0xe96
+ 34542 556c 03       		.byte	0x3
+ 34543 556d 91       		.byte	0x91
+ 34544 556e C053     		.sleb128 -5696
+ 34545 5570 00       		.byte	0x0
+ 34546 5571 00       		.byte	0x0
+ 34547 5572 33       		.uleb128 0x33
+ 34548 5573 00000000 		.quad	.LBB1295
+ 34548      00000000 
+ 34549 557b 00000000 		.quad	.LBE1295
+ 34549      00000000 
+ 34550 5583 34       		.uleb128 0x34
+ 34551 5584 440C0000 		.long	0xc44
+ 34552 5588 03       		.byte	0x3
+ 34553 5589 91       		.byte	0x91
+ 34554 558a E051     		.sleb128 -5920
+ 34555 558c 00       		.byte	0x0
+ 34556 558d 00       		.byte	0x0
+ 34557 558e 00       		.byte	0x0
+ 34558 558f 31       		.uleb128 0x31
+ 34559 5590 780E0000 		.long	0xe78
+ 34560 5594 00000000 		.quad	.LBB1296
+ 34560      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 942
+
+
+ 34561 559c 00000000 		.quad	.LBE1296
+ 34561      00000000 
+ 34562 55a4 02       		.byte	0x2
+ 34563 55a5 1007     		.value	0x710
+ 34564 55a7 D0550000 		.long	0x55d0
+ 34565 55ab 32       		.uleb128 0x32
+ 34566 55ac 8A0E0000 		.long	0xe8a
+ 34567 55b0 03       		.byte	0x3
+ 34568 55b1 91       		.byte	0x91
+ 34569 55b2 B068     		.sleb128 -3024
+ 34570 55b4 33       		.uleb128 0x33
+ 34571 55b5 00000000 		.quad	.LBB1297
+ 34571      00000000 
+ 34572 55bd 00000000 		.quad	.LBE1297
+ 34572      00000000 
+ 34573 55c5 34       		.uleb128 0x34
+ 34574 55c6 960E0000 		.long	0xe96
+ 34575 55ca 03       		.byte	0x3
+ 34576 55cb 91       		.byte	0x91
+ 34577 55cc D053     		.sleb128 -5680
+ 34578 55ce 00       		.byte	0x0
+ 34579 55cf 00       		.byte	0x0
+ 34580 55d0 31       		.uleb128 0x31
+ 34581 55d1 C5480000 		.long	0x48c5
+ 34582 55d5 00000000 		.quad	.LBB1298
+ 34582      00000000 
+ 34583 55dd 00000000 		.quad	.LBE1298
+ 34583      00000000 
+ 34584 55e5 02       		.byte	0x2
+ 34585 55e6 1707     		.value	0x717
+ 34586 55e8 98560000 		.long	0x5698
+ 34587 55ec 32       		.uleb128 0x32
+ 34588 55ed E3480000 		.long	0x48e3
+ 34589 55f1 03       		.byte	0x3
+ 34590 55f2 91       		.byte	0x91
+ 34591 55f3 CC68     		.sleb128 -2996
+ 34592 55f5 32       		.uleb128 0x32
+ 34593 55f6 D7480000 		.long	0x48d7
+ 34594 55fa 03       		.byte	0x3
+ 34595 55fb 91       		.byte	0x91
+ 34596 55fc D068     		.sleb128 -2992
+ 34597 55fe 33       		.uleb128 0x33
+ 34598 55ff 00000000 		.quad	.LBB1299
+ 34598      00000000 
+ 34599 5607 00000000 		.quad	.LBE1299
+ 34599      00000000 
+ 34600 560f 34       		.uleb128 0x34
+ 34601 5610 EF480000 		.long	0x48ef
+ 34602 5614 03       		.byte	0x3
+ 34603 5615 91       		.byte	0x91
+ 34604 5616 F053     		.sleb128 -5648
+ 34605 5618 34       		.uleb128 0x34
+ 34606 5619 F9480000 		.long	0x48f9
+ 34607 561d 03       		.byte	0x3
+ 34608 561e 91       		.byte	0x91
+ 34609 561f F068     		.sleb128 -2960
+ 34610 5621 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 943
+
+
+ 34611 5622 05490000 		.long	0x4905
+ 34612 5626 03       		.byte	0x3
+ 34613 5627 91       		.byte	0x91
+ 34614 5628 EC68     		.sleb128 -2964
+ 34615 562a 31       		.uleb128 0x31
+ 34616 562b 12490000 		.long	0x4912
+ 34617 562f 00000000 		.quad	.LBB1300
+ 34617      00000000 
+ 34618 5637 00000000 		.quad	.LBE1300
+ 34618      00000000 
+ 34619 563f 02       		.byte	0x2
+ 34620 5640 5F06     		.value	0x65f
+ 34621 5642 74560000 		.long	0x5674
+ 34622 5646 32       		.uleb128 0x32
+ 34623 5647 24490000 		.long	0x4924
+ 34624 564b 03       		.byte	0x3
+ 34625 564c 91       		.byte	0x91
+ 34626 564d F468     		.sleb128 -2956
+ 34627 564f 33       		.uleb128 0x33
+ 34628 5650 00000000 		.quad	.LBB1301
+ 34628      00000000 
+ 34629 5658 00000000 		.quad	.LBE1301
+ 34629      00000000 
+ 34630 5660 34       		.uleb128 0x34
+ 34631 5661 2E490000 		.long	0x492e
+ 34632 5665 03       		.byte	0x3
+ 34633 5666 91       		.byte	0x91
+ 34634 5667 E053     		.sleb128 -5664
+ 34635 5669 34       		.uleb128 0x34
+ 34636 566a 3A490000 		.long	0x493a
+ 34637 566e 03       		.byte	0x3
+ 34638 566f 91       		.byte	0x91
+ 34639 5670 F868     		.sleb128 -2952
+ 34640 5672 00       		.byte	0x0
+ 34641 5673 00       		.byte	0x0
+ 34642 5674 35       		.uleb128 0x35
+ 34643 5675 46490000 		.long	0x4946
+ 34644 5679 00000000 		.quad	.LBB1302
+ 34644      00000000 
+ 34645 5681 00000000 		.quad	.LBE1302
+ 34645      00000000 
+ 34646 5689 02       		.byte	0x2
+ 34647 568a 6006     		.value	0x660
+ 34648 568c 32       		.uleb128 0x32
+ 34649 568d 58490000 		.long	0x4958
+ 34650 5691 03       		.byte	0x3
+ 34651 5692 91       		.byte	0x91
+ 34652 5693 FC68     		.sleb128 -2948
+ 34653 5695 00       		.byte	0x0
+ 34654 5696 00       		.byte	0x0
+ 34655 5697 00       		.byte	0x0
+ 34656 5698 31       		.uleb128 0x31
+ 34657 5699 A30E0000 		.long	0xea3
+ 34658 569d 00000000 		.quad	.LBB1304
+ 34658      00000000 
+ 34659 56a5 00000000 		.quad	.LBE1304
+ 34659      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 944
+
+
+ 34660 56ad 02       		.byte	0x2
+ 34661 56ae 1907     		.value	0x719
+ 34662 56b0 98570000 		.long	0x5798
+ 34663 56b4 32       		.uleb128 0x32
+ 34664 56b5 B50E0000 		.long	0xeb5
+ 34665 56b9 03       		.byte	0x3
+ 34666 56ba 91       		.byte	0x91
+ 34667 56bb 8069     		.sleb128 -2944
+ 34668 56bd 33       		.uleb128 0x33
+ 34669 56be 00000000 		.quad	.LBB1305
+ 34669      00000000 
+ 34670 56c6 00000000 		.quad	.LBE1305
+ 34670      00000000 
+ 34671 56ce 34       		.uleb128 0x34
+ 34672 56cf C10E0000 		.long	0xec1
+ 34673 56d3 03       		.byte	0x3
+ 34674 56d4 76       		.byte	0x76
+ 34675 56d5 C04C     		.sleb128 -6592
+ 34676 56d7 31       		.uleb128 0x31
+ 34677 56d8 CE0E0000 		.long	0xece
+ 34678 56dc 00000000 		.quad	.LBB1306
+ 34678      00000000 
+ 34679 56e4 00000000 		.quad	.LBE1306
+ 34679      00000000 
+ 34680 56ec 02       		.byte	0x2
+ 34681 56ed 1F06     		.value	0x61f
+ 34682 56ef 18570000 		.long	0x5718
+ 34683 56f3 32       		.uleb128 0x32
+ 34684 56f4 E00E0000 		.long	0xee0
+ 34685 56f8 03       		.byte	0x3
+ 34686 56f9 91       		.byte	0x91
+ 34687 56fa 9069     		.sleb128 -2928
+ 34688 56fc 33       		.uleb128 0x33
+ 34689 56fd 00000000 		.quad	.LBB1307
+ 34689      00000000 
+ 34690 5705 00000000 		.quad	.LBE1307
+ 34690      00000000 
+ 34691 570d 34       		.uleb128 0x34
+ 34692 570e EC0E0000 		.long	0xeec
+ 34693 5712 03       		.byte	0x3
+ 34694 5713 91       		.byte	0x91
+ 34695 5714 8054     		.sleb128 -5632
+ 34696 5716 00       		.byte	0x0
+ 34697 5717 00       		.byte	0x0
+ 34698 5718 31       		.uleb128 0x31
+ 34699 5719 CE0E0000 		.long	0xece
+ 34700 571d 00000000 		.quad	.LBB1308
+ 34700      00000000 
+ 34701 5725 00000000 		.quad	.LBE1308
+ 34701      00000000 
+ 34702 572d 02       		.byte	0x2
+ 34703 572e 2006     		.value	0x620
+ 34704 5730 59570000 		.long	0x5759
+ 34705 5734 32       		.uleb128 0x32
+ 34706 5735 E00E0000 		.long	0xee0
+ 34707 5739 03       		.byte	0x3
+ 34708 573a 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 945
+
+
+ 34709 573b A069     		.sleb128 -2912
+ 34710 573d 33       		.uleb128 0x33
+ 34711 573e 00000000 		.quad	.LBB1309
+ 34711      00000000 
+ 34712 5746 00000000 		.quad	.LBE1309
+ 34712      00000000 
+ 34713 574e 34       		.uleb128 0x34
+ 34714 574f EC0E0000 		.long	0xeec
+ 34715 5753 03       		.byte	0x3
+ 34716 5754 91       		.byte	0x91
+ 34717 5755 9054     		.sleb128 -5616
+ 34718 5757 00       		.byte	0x0
+ 34719 5758 00       		.byte	0x0
+ 34720 5759 35       		.uleb128 0x35
+ 34721 575a CE0E0000 		.long	0xece
+ 34722 575e 00000000 		.quad	.LBB1310
+ 34722      00000000 
+ 34723 5766 00000000 		.quad	.LBE1310
+ 34723      00000000 
+ 34724 576e 02       		.byte	0x2
+ 34725 576f 2106     		.value	0x621
+ 34726 5771 32       		.uleb128 0x32
+ 34727 5772 E00E0000 		.long	0xee0
+ 34728 5776 03       		.byte	0x3
+ 34729 5777 91       		.byte	0x91
+ 34730 5778 B069     		.sleb128 -2896
+ 34731 577a 33       		.uleb128 0x33
+ 34732 577b 00000000 		.quad	.LBB1311
+ 34732      00000000 
+ 34733 5783 00000000 		.quad	.LBE1311
+ 34733      00000000 
+ 34734 578b 34       		.uleb128 0x34
+ 34735 578c EC0E0000 		.long	0xeec
+ 34736 5790 03       		.byte	0x3
+ 34737 5791 91       		.byte	0x91
+ 34738 5792 A054     		.sleb128 -5600
+ 34739 5794 00       		.byte	0x0
+ 34740 5795 00       		.byte	0x0
+ 34741 5796 00       		.byte	0x0
+ 34742 5797 00       		.byte	0x0
+ 34743 5798 31       		.uleb128 0x31
+ 34744 5799 A30E0000 		.long	0xea3
+ 34745 579d 00000000 		.quad	.LBB1312
+ 34745      00000000 
+ 34746 57a5 00000000 		.quad	.LBE1312
+ 34746      00000000 
+ 34747 57ad 02       		.byte	0x2
+ 34748 57ae 1B07     		.value	0x71b
+ 34749 57b0 98580000 		.long	0x5898
+ 34750 57b4 32       		.uleb128 0x32
+ 34751 57b5 B50E0000 		.long	0xeb5
+ 34752 57b9 03       		.byte	0x3
+ 34753 57ba 91       		.byte	0x91
+ 34754 57bb C069     		.sleb128 -2880
+ 34755 57bd 33       		.uleb128 0x33
+ 34756 57be 00000000 		.quad	.LBB1313
+ 34756      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 946
+
+
+ 34757 57c6 00000000 		.quad	.LBE1313
+ 34757      00000000 
+ 34758 57ce 34       		.uleb128 0x34
+ 34759 57cf C10E0000 		.long	0xec1
+ 34760 57d3 03       		.byte	0x3
+ 34761 57d4 76       		.byte	0x76
+ 34762 57d5 D04C     		.sleb128 -6576
+ 34763 57d7 31       		.uleb128 0x31
+ 34764 57d8 CE0E0000 		.long	0xece
+ 34765 57dc 00000000 		.quad	.LBB1314
+ 34765      00000000 
+ 34766 57e4 00000000 		.quad	.LBE1314
+ 34766      00000000 
+ 34767 57ec 02       		.byte	0x2
+ 34768 57ed 1F06     		.value	0x61f
+ 34769 57ef 18580000 		.long	0x5818
+ 34770 57f3 32       		.uleb128 0x32
+ 34771 57f4 E00E0000 		.long	0xee0
+ 34772 57f8 03       		.byte	0x3
+ 34773 57f9 91       		.byte	0x91
+ 34774 57fa D069     		.sleb128 -2864
+ 34775 57fc 33       		.uleb128 0x33
+ 34776 57fd 00000000 		.quad	.LBB1315
+ 34776      00000000 
+ 34777 5805 00000000 		.quad	.LBE1315
+ 34777      00000000 
+ 34778 580d 34       		.uleb128 0x34
+ 34779 580e EC0E0000 		.long	0xeec
+ 34780 5812 03       		.byte	0x3
+ 34781 5813 91       		.byte	0x91
+ 34782 5814 B054     		.sleb128 -5584
+ 34783 5816 00       		.byte	0x0
+ 34784 5817 00       		.byte	0x0
+ 34785 5818 31       		.uleb128 0x31
+ 34786 5819 CE0E0000 		.long	0xece
+ 34787 581d 00000000 		.quad	.LBB1316
+ 34787      00000000 
+ 34788 5825 00000000 		.quad	.LBE1316
+ 34788      00000000 
+ 34789 582d 02       		.byte	0x2
+ 34790 582e 2006     		.value	0x620
+ 34791 5830 59580000 		.long	0x5859
+ 34792 5834 32       		.uleb128 0x32
+ 34793 5835 E00E0000 		.long	0xee0
+ 34794 5839 03       		.byte	0x3
+ 34795 583a 91       		.byte	0x91
+ 34796 583b E069     		.sleb128 -2848
+ 34797 583d 33       		.uleb128 0x33
+ 34798 583e 00000000 		.quad	.LBB1317
+ 34798      00000000 
+ 34799 5846 00000000 		.quad	.LBE1317
+ 34799      00000000 
+ 34800 584e 34       		.uleb128 0x34
+ 34801 584f EC0E0000 		.long	0xeec
+ 34802 5853 03       		.byte	0x3
+ 34803 5854 91       		.byte	0x91
+ 34804 5855 C054     		.sleb128 -5568
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 947
+
+
+ 34805 5857 00       		.byte	0x0
+ 34806 5858 00       		.byte	0x0
+ 34807 5859 35       		.uleb128 0x35
+ 34808 585a CE0E0000 		.long	0xece
+ 34809 585e 00000000 		.quad	.LBB1318
+ 34809      00000000 
+ 34810 5866 00000000 		.quad	.LBE1318
+ 34810      00000000 
+ 34811 586e 02       		.byte	0x2
+ 34812 586f 2106     		.value	0x621
+ 34813 5871 32       		.uleb128 0x32
+ 34814 5872 E00E0000 		.long	0xee0
+ 34815 5876 03       		.byte	0x3
+ 34816 5877 91       		.byte	0x91
+ 34817 5878 F069     		.sleb128 -2832
+ 34818 587a 33       		.uleb128 0x33
+ 34819 587b 00000000 		.quad	.LBB1319
+ 34819      00000000 
+ 34820 5883 00000000 		.quad	.LBE1319
+ 34820      00000000 
+ 34821 588b 34       		.uleb128 0x34
+ 34822 588c EC0E0000 		.long	0xeec
+ 34823 5890 03       		.byte	0x3
+ 34824 5891 91       		.byte	0x91
+ 34825 5892 D054     		.sleb128 -5552
+ 34826 5894 00       		.byte	0x0
+ 34827 5895 00       		.byte	0x0
+ 34828 5896 00       		.byte	0x0
+ 34829 5897 00       		.byte	0x0
+ 34830 5898 31       		.uleb128 0x31
+ 34831 5899 780E0000 		.long	0xe78
+ 34832 589d 00000000 		.quad	.LBB1320
+ 34832      00000000 
+ 34833 58a5 00000000 		.quad	.LBE1320
+ 34833      00000000 
+ 34834 58ad 02       		.byte	0x2
+ 34835 58ae 1C07     		.value	0x71c
+ 34836 58b0 D9580000 		.long	0x58d9
+ 34837 58b4 32       		.uleb128 0x32
+ 34838 58b5 8A0E0000 		.long	0xe8a
+ 34839 58b9 03       		.byte	0x3
+ 34840 58ba 91       		.byte	0x91
+ 34841 58bb 806A     		.sleb128 -2816
+ 34842 58bd 33       		.uleb128 0x33
+ 34843 58be 00000000 		.quad	.LBB1321
+ 34843      00000000 
+ 34844 58c6 00000000 		.quad	.LBE1321
+ 34844      00000000 
+ 34845 58ce 34       		.uleb128 0x34
+ 34846 58cf 960E0000 		.long	0xe96
+ 34847 58d3 03       		.byte	0x3
+ 34848 58d4 91       		.byte	0x91
+ 34849 58d5 E054     		.sleb128 -5536
+ 34850 58d7 00       		.byte	0x0
+ 34851 58d8 00       		.byte	0x0
+ 34852 58d9 31       		.uleb128 0x31
+ 34853 58da 63490000 		.long	0x4963
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 948
+
+
+ 34854 58de 00000000 		.quad	.LBB1322
+ 34854      00000000 
+ 34855 58e6 00000000 		.quad	.LBE1322
+ 34855      00000000 
+ 34856 58ee 02       		.byte	0x2
+ 34857 58ef 1E07     		.value	0x71e
+ 34858 58f1 2C590000 		.long	0x592c
+ 34859 58f5 32       		.uleb128 0x32
+ 34860 58f6 7F490000 		.long	0x497f
+ 34861 58fa 03       		.byte	0x3
+ 34862 58fb 91       		.byte	0x91
+ 34863 58fc 906A     		.sleb128 -2800
+ 34864 58fe 32       		.uleb128 0x32
+ 34865 58ff 75490000 		.long	0x4975
+ 34866 5903 03       		.byte	0x3
+ 34867 5904 91       		.byte	0x91
+ 34868 5905 A06A     		.sleb128 -2784
+ 34869 5907 33       		.uleb128 0x33
+ 34870 5908 00000000 		.quad	.LBB1323
+ 34870      00000000 
+ 34871 5910 00000000 		.quad	.LBE1323
+ 34871      00000000 
+ 34872 5918 34       		.uleb128 0x34
+ 34873 5919 89490000 		.long	0x4989
+ 34874 591d 03       		.byte	0x3
+ 34875 591e 91       		.byte	0x91
+ 34876 591f 8055     		.sleb128 -5504
+ 34877 5921 34       		.uleb128 0x34
+ 34878 5922 94490000 		.long	0x4994
+ 34879 5926 03       		.byte	0x3
+ 34880 5927 91       		.byte	0x91
+ 34881 5928 F054     		.sleb128 -5520
+ 34882 592a 00       		.byte	0x0
+ 34883 592b 00       		.byte	0x0
+ 34884 592c 31       		.uleb128 0x31
+ 34885 592d A0490000 		.long	0x49a0
+ 34886 5931 00000000 		.quad	.LBB1324
+ 34886      00000000 
+ 34887 5939 00000000 		.quad	.LBE1324
+ 34887      00000000 
+ 34888 5941 02       		.byte	0x2
+ 34889 5942 2107     		.value	0x721
+ 34890 5944 7F590000 		.long	0x597f
+ 34891 5948 32       		.uleb128 0x32
+ 34892 5949 BC490000 		.long	0x49bc
+ 34893 594d 03       		.byte	0x3
+ 34894 594e 91       		.byte	0x91
+ 34895 594f B06A     		.sleb128 -2768
+ 34896 5951 32       		.uleb128 0x32
+ 34897 5952 B2490000 		.long	0x49b2
+ 34898 5956 03       		.byte	0x3
+ 34899 5957 91       		.byte	0x91
+ 34900 5958 C06A     		.sleb128 -2752
+ 34901 595a 33       		.uleb128 0x33
+ 34902 595b 00000000 		.quad	.LBB1325
+ 34902      00000000 
+ 34903 5963 00000000 		.quad	.LBE1325
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 949
+
+
+ 34903      00000000 
+ 34904 596b 34       		.uleb128 0x34
+ 34905 596c C6490000 		.long	0x49c6
+ 34906 5970 03       		.byte	0x3
+ 34907 5971 91       		.byte	0x91
+ 34908 5972 A055     		.sleb128 -5472
+ 34909 5974 34       		.uleb128 0x34
+ 34910 5975 D1490000 		.long	0x49d1
+ 34911 5979 03       		.byte	0x3
+ 34912 597a 91       		.byte	0x91
+ 34913 597b 9055     		.sleb128 -5488
+ 34914 597d 00       		.byte	0x0
+ 34915 597e 00       		.byte	0x0
+ 34916 597f 31       		.uleb128 0x31
+ 34917 5980 A30E0000 		.long	0xea3
+ 34918 5984 00000000 		.quad	.LBB1326
+ 34918      00000000 
+ 34919 598c 00000000 		.quad	.LBE1326
+ 34919      00000000 
+ 34920 5994 02       		.byte	0x2
+ 34921 5995 2507     		.value	0x725
+ 34922 5997 7F5A0000 		.long	0x5a7f
+ 34923 599b 32       		.uleb128 0x32
+ 34924 599c B50E0000 		.long	0xeb5
+ 34925 59a0 03       		.byte	0x3
+ 34926 59a1 91       		.byte	0x91
+ 34927 59a2 D06A     		.sleb128 -2736
+ 34928 59a4 33       		.uleb128 0x33
+ 34929 59a5 00000000 		.quad	.LBB1327
+ 34929      00000000 
+ 34930 59ad 00000000 		.quad	.LBE1327
+ 34930      00000000 
+ 34931 59b5 34       		.uleb128 0x34
+ 34932 59b6 C10E0000 		.long	0xec1
+ 34933 59ba 03       		.byte	0x3
+ 34934 59bb 76       		.byte	0x76
+ 34935 59bc E04C     		.sleb128 -6560
+ 34936 59be 31       		.uleb128 0x31
+ 34937 59bf CE0E0000 		.long	0xece
+ 34938 59c3 00000000 		.quad	.LBB1328
+ 34938      00000000 
+ 34939 59cb 00000000 		.quad	.LBE1328
+ 34939      00000000 
+ 34940 59d3 02       		.byte	0x2
+ 34941 59d4 1F06     		.value	0x61f
+ 34942 59d6 FF590000 		.long	0x59ff
+ 34943 59da 32       		.uleb128 0x32
+ 34944 59db E00E0000 		.long	0xee0
+ 34945 59df 03       		.byte	0x3
+ 34946 59e0 91       		.byte	0x91
+ 34947 59e1 E06A     		.sleb128 -2720
+ 34948 59e3 33       		.uleb128 0x33
+ 34949 59e4 00000000 		.quad	.LBB1329
+ 34949      00000000 
+ 34950 59ec 00000000 		.quad	.LBE1329
+ 34950      00000000 
+ 34951 59f4 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 950
+
+
+ 34952 59f5 EC0E0000 		.long	0xeec
+ 34953 59f9 03       		.byte	0x3
+ 34954 59fa 91       		.byte	0x91
+ 34955 59fb B055     		.sleb128 -5456
+ 34956 59fd 00       		.byte	0x0
+ 34957 59fe 00       		.byte	0x0
+ 34958 59ff 31       		.uleb128 0x31
+ 34959 5a00 CE0E0000 		.long	0xece
+ 34960 5a04 00000000 		.quad	.LBB1330
+ 34960      00000000 
+ 34961 5a0c 00000000 		.quad	.LBE1330
+ 34961      00000000 
+ 34962 5a14 02       		.byte	0x2
+ 34963 5a15 2006     		.value	0x620
+ 34964 5a17 405A0000 		.long	0x5a40
+ 34965 5a1b 32       		.uleb128 0x32
+ 34966 5a1c E00E0000 		.long	0xee0
+ 34967 5a20 03       		.byte	0x3
+ 34968 5a21 91       		.byte	0x91
+ 34969 5a22 F06A     		.sleb128 -2704
+ 34970 5a24 33       		.uleb128 0x33
+ 34971 5a25 00000000 		.quad	.LBB1331
+ 34971      00000000 
+ 34972 5a2d 00000000 		.quad	.LBE1331
+ 34972      00000000 
+ 34973 5a35 34       		.uleb128 0x34
+ 34974 5a36 EC0E0000 		.long	0xeec
+ 34975 5a3a 03       		.byte	0x3
+ 34976 5a3b 91       		.byte	0x91
+ 34977 5a3c C055     		.sleb128 -5440
+ 34978 5a3e 00       		.byte	0x0
+ 34979 5a3f 00       		.byte	0x0
+ 34980 5a40 35       		.uleb128 0x35
+ 34981 5a41 CE0E0000 		.long	0xece
+ 34982 5a45 00000000 		.quad	.LBB1332
+ 34982      00000000 
+ 34983 5a4d 00000000 		.quad	.LBE1332
+ 34983      00000000 
+ 34984 5a55 02       		.byte	0x2
+ 34985 5a56 2106     		.value	0x621
+ 34986 5a58 32       		.uleb128 0x32
+ 34987 5a59 E00E0000 		.long	0xee0
+ 34988 5a5d 03       		.byte	0x3
+ 34989 5a5e 91       		.byte	0x91
+ 34990 5a5f 806B     		.sleb128 -2688
+ 34991 5a61 33       		.uleb128 0x33
+ 34992 5a62 00000000 		.quad	.LBB1333
+ 34992      00000000 
+ 34993 5a6a 00000000 		.quad	.LBE1333
+ 34993      00000000 
+ 34994 5a72 34       		.uleb128 0x34
+ 34995 5a73 EC0E0000 		.long	0xeec
+ 34996 5a77 03       		.byte	0x3
+ 34997 5a78 91       		.byte	0x91
+ 34998 5a79 D055     		.sleb128 -5424
+ 34999 5a7b 00       		.byte	0x0
+ 35000 5a7c 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 951
+
+
+ 35001 5a7d 00       		.byte	0x0
+ 35002 5a7e 00       		.byte	0x0
+ 35003 5a7f 31       		.uleb128 0x31
+ 35004 5a80 A30E0000 		.long	0xea3
+ 35005 5a84 00000000 		.quad	.LBB1334
+ 35005      00000000 
+ 35006 5a8c 00000000 		.quad	.LBE1334
+ 35006      00000000 
+ 35007 5a94 02       		.byte	0x2
+ 35008 5a95 2607     		.value	0x726
+ 35009 5a97 7F5B0000 		.long	0x5b7f
+ 35010 5a9b 32       		.uleb128 0x32
+ 35011 5a9c B50E0000 		.long	0xeb5
+ 35012 5aa0 03       		.byte	0x3
+ 35013 5aa1 91       		.byte	0x91
+ 35014 5aa2 906B     		.sleb128 -2672
+ 35015 5aa4 33       		.uleb128 0x33
+ 35016 5aa5 00000000 		.quad	.LBB1335
+ 35016      00000000 
+ 35017 5aad 00000000 		.quad	.LBE1335
+ 35017      00000000 
+ 35018 5ab5 34       		.uleb128 0x34
+ 35019 5ab6 C10E0000 		.long	0xec1
+ 35020 5aba 03       		.byte	0x3
+ 35021 5abb 76       		.byte	0x76
+ 35022 5abc F04C     		.sleb128 -6544
+ 35023 5abe 31       		.uleb128 0x31
+ 35024 5abf CE0E0000 		.long	0xece
+ 35025 5ac3 00000000 		.quad	.LBB1336
+ 35025      00000000 
+ 35026 5acb 00000000 		.quad	.LBE1336
+ 35026      00000000 
+ 35027 5ad3 02       		.byte	0x2
+ 35028 5ad4 1F06     		.value	0x61f
+ 35029 5ad6 FF5A0000 		.long	0x5aff
+ 35030 5ada 32       		.uleb128 0x32
+ 35031 5adb E00E0000 		.long	0xee0
+ 35032 5adf 03       		.byte	0x3
+ 35033 5ae0 91       		.byte	0x91
+ 35034 5ae1 A06B     		.sleb128 -2656
+ 35035 5ae3 33       		.uleb128 0x33
+ 35036 5ae4 00000000 		.quad	.LBB1337
+ 35036      00000000 
+ 35037 5aec 00000000 		.quad	.LBE1337
+ 35037      00000000 
+ 35038 5af4 34       		.uleb128 0x34
+ 35039 5af5 EC0E0000 		.long	0xeec
+ 35040 5af9 03       		.byte	0x3
+ 35041 5afa 91       		.byte	0x91
+ 35042 5afb E055     		.sleb128 -5408
+ 35043 5afd 00       		.byte	0x0
+ 35044 5afe 00       		.byte	0x0
+ 35045 5aff 31       		.uleb128 0x31
+ 35046 5b00 CE0E0000 		.long	0xece
+ 35047 5b04 00000000 		.quad	.LBB1338
+ 35047      00000000 
+ 35048 5b0c 00000000 		.quad	.LBE1338
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 952
+
+
+ 35048      00000000 
+ 35049 5b14 02       		.byte	0x2
+ 35050 5b15 2006     		.value	0x620
+ 35051 5b17 405B0000 		.long	0x5b40
+ 35052 5b1b 32       		.uleb128 0x32
+ 35053 5b1c E00E0000 		.long	0xee0
+ 35054 5b20 03       		.byte	0x3
+ 35055 5b21 91       		.byte	0x91
+ 35056 5b22 B06B     		.sleb128 -2640
+ 35057 5b24 33       		.uleb128 0x33
+ 35058 5b25 00000000 		.quad	.LBB1339
+ 35058      00000000 
+ 35059 5b2d 00000000 		.quad	.LBE1339
+ 35059      00000000 
+ 35060 5b35 34       		.uleb128 0x34
+ 35061 5b36 EC0E0000 		.long	0xeec
+ 35062 5b3a 03       		.byte	0x3
+ 35063 5b3b 91       		.byte	0x91
+ 35064 5b3c F055     		.sleb128 -5392
+ 35065 5b3e 00       		.byte	0x0
+ 35066 5b3f 00       		.byte	0x0
+ 35067 5b40 35       		.uleb128 0x35
+ 35068 5b41 CE0E0000 		.long	0xece
+ 35069 5b45 00000000 		.quad	.LBB1340
+ 35069      00000000 
+ 35070 5b4d 00000000 		.quad	.LBE1340
+ 35070      00000000 
+ 35071 5b55 02       		.byte	0x2
+ 35072 5b56 2106     		.value	0x621
+ 35073 5b58 32       		.uleb128 0x32
+ 35074 5b59 E00E0000 		.long	0xee0
+ 35075 5b5d 03       		.byte	0x3
+ 35076 5b5e 91       		.byte	0x91
+ 35077 5b5f C06B     		.sleb128 -2624
+ 35078 5b61 33       		.uleb128 0x33
+ 35079 5b62 00000000 		.quad	.LBB1341
+ 35079      00000000 
+ 35080 5b6a 00000000 		.quad	.LBE1341
+ 35080      00000000 
+ 35081 5b72 34       		.uleb128 0x34
+ 35082 5b73 EC0E0000 		.long	0xeec
+ 35083 5b77 03       		.byte	0x3
+ 35084 5b78 91       		.byte	0x91
+ 35085 5b79 8056     		.sleb128 -5376
+ 35086 5b7b 00       		.byte	0x0
+ 35087 5b7c 00       		.byte	0x0
+ 35088 5b7d 00       		.byte	0x0
+ 35089 5b7e 00       		.byte	0x0
+ 35090 5b7f 31       		.uleb128 0x31
+ 35091 5b80 D10B0000 		.long	0xbd1
+ 35092 5b84 00000000 		.quad	.LBB1342
+ 35092      00000000 
+ 35093 5b8c 00000000 		.quad	.LBE1342
+ 35093      00000000 
+ 35094 5b94 02       		.byte	0x2
+ 35095 5b95 2707     		.value	0x727
+ 35096 5b97 25600000 		.long	0x6025
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 953
+
+
+ 35097 5b9b 32       		.uleb128 0x32
+ 35098 5b9c EF0B0000 		.long	0xbef
+ 35099 5ba0 03       		.byte	0x3
+ 35100 5ba1 91       		.byte	0x91
+ 35101 5ba2 DC6B     		.sleb128 -2596
+ 35102 5ba4 32       		.uleb128 0x32
+ 35103 5ba5 E30B0000 		.long	0xbe3
+ 35104 5ba9 03       		.byte	0x3
+ 35105 5baa 91       		.byte	0x91
+ 35106 5bab E06B     		.sleb128 -2592
+ 35107 5bad 33       		.uleb128 0x33
+ 35108 5bae 00000000 		.quad	.LBB1343
+ 35108      00000000 
+ 35109 5bb6 00000000 		.quad	.LBE1343
+ 35109      00000000 
+ 35110 5bbe 34       		.uleb128 0x34
+ 35111 5bbf FB0B0000 		.long	0xbfb
+ 35112 5bc3 03       		.byte	0x3
+ 35113 5bc4 76       		.byte	0x76
+ 35114 5bc5 904D     		.sleb128 -6512
+ 35115 5bc7 34       		.uleb128 0x34
+ 35116 5bc8 070C0000 		.long	0xc07
+ 35117 5bcc 03       		.byte	0x3
+ 35118 5bcd 76       		.byte	0x76
+ 35119 5bce 804D     		.sleb128 -6528
+ 35120 5bd0 31       		.uleb128 0x31
+ 35121 5bd1 500C0000 		.long	0xc50
+ 35122 5bd5 00000000 		.quad	.LBB1344
+ 35122      00000000 
+ 35123 5bdd 00000000 		.quad	.LBE1344
+ 35123      00000000 
+ 35124 5be5 02       		.byte	0x2
+ 35125 5be6 9106     		.value	0x691
+ 35126 5be8 235C0000 		.long	0x5c23
+ 35127 5bec 32       		.uleb128 0x32
+ 35128 5bed 7A0C0000 		.long	0xc7a
+ 35129 5bf1 03       		.byte	0x3
+ 35130 5bf2 91       		.byte	0x91
+ 35131 5bf3 F86B     		.sleb128 -2568
+ 35132 5bf5 32       		.uleb128 0x32
+ 35133 5bf6 6E0C0000 		.long	0xc6e
+ 35134 5bfa 03       		.byte	0x3
+ 35135 5bfb 91       		.byte	0x91
+ 35136 5bfc FC6B     		.sleb128 -2564
+ 35137 5bfe 32       		.uleb128 0x32
+ 35138 5bff 620C0000 		.long	0xc62
+ 35139 5c03 03       		.byte	0x3
+ 35140 5c04 91       		.byte	0x91
+ 35141 5c05 806C     		.sleb128 -2560
+ 35142 5c07 33       		.uleb128 0x33
+ 35143 5c08 00000000 		.quad	.LBB1345
+ 35143      00000000 
+ 35144 5c10 00000000 		.quad	.LBE1345
+ 35144      00000000 
+ 35145 5c18 34       		.uleb128 0x34
+ 35146 5c19 860C0000 		.long	0xc86
+ 35147 5c1d 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 954
+
+
+ 35148 5c1e 91       		.byte	0x91
+ 35149 5c1f D056     		.sleb128 -5296
+ 35150 5c21 00       		.byte	0x0
+ 35151 5c22 00       		.byte	0x0
+ 35152 5c23 31       		.uleb128 0x31
+ 35153 5c24 910C0000 		.long	0xc91
+ 35154 5c28 00000000 		.quad	.LBB1346
+ 35154      00000000 
+ 35155 5c30 00000000 		.quad	.LBE1346
+ 35155      00000000 
+ 35156 5c38 02       		.byte	0x2
+ 35157 5c39 9206     		.value	0x692
+ 35158 5c3b 935E0000 		.long	0x5e93
+ 35159 5c3f 32       		.uleb128 0x32
+ 35160 5c40 A30C0000 		.long	0xca3
+ 35161 5c44 03       		.byte	0x3
+ 35162 5c45 91       		.byte	0x91
+ 35163 5c46 906C     		.sleb128 -2544
+ 35164 5c48 35       		.uleb128 0x35
+ 35165 5c49 B00C0000 		.long	0xcb0
+ 35166 5c4d 00000000 		.quad	.LBB1348
+ 35166      00000000 
+ 35167 5c55 00000000 		.quad	.LBE1348
+ 35167      00000000 
+ 35168 5c5d 02       		.byte	0x2
+ 35169 5c5e 7D03     		.value	0x37d
+ 35170 5c60 32       		.uleb128 0x32
+ 35171 5c61 CE0C0000 		.long	0xcce
+ 35172 5c65 03       		.byte	0x3
+ 35173 5c66 91       		.byte	0x91
+ 35174 5c67 A86C     		.sleb128 -2520
+ 35175 5c69 32       		.uleb128 0x32
+ 35176 5c6a C20C0000 		.long	0xcc2
+ 35177 5c6e 03       		.byte	0x3
+ 35178 5c6f 91       		.byte	0x91
+ 35179 5c70 B06C     		.sleb128 -2512
+ 35180 5c72 33       		.uleb128 0x33
+ 35181 5c73 00000000 		.quad	.LBB1349
+ 35181      00000000 
+ 35182 5c7b 00000000 		.quad	.LBE1349
+ 35182      00000000 
+ 35183 5c83 34       		.uleb128 0x34
+ 35184 5c84 DA0C0000 		.long	0xcda
+ 35185 5c88 03       		.byte	0x3
+ 35186 5c89 91       		.byte	0x91
+ 35187 5c8a 806D     		.sleb128 -2432
+ 35188 5c8c 34       		.uleb128 0x34
+ 35189 5c8d E50C0000 		.long	0xce5
+ 35190 5c91 03       		.byte	0x3
+ 35191 5c92 91       		.byte	0x91
+ 35192 5c93 F06C     		.sleb128 -2448
+ 35193 5c95 34       		.uleb128 0x34
+ 35194 5c96 F00C0000 		.long	0xcf0
+ 35195 5c9a 03       		.byte	0x3
+ 35196 5c9b 91       		.byte	0x91
+ 35197 5c9c E06C     		.sleb128 -2464
+ 35198 5c9e 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 955
+
+
+ 35199 5c9f FC0C0000 		.long	0xcfc
+ 35200 5ca3 03       		.byte	0x3
+ 35201 5ca4 91       		.byte	0x91
+ 35202 5ca5 D06C     		.sleb128 -2480
+ 35203 5ca7 34       		.uleb128 0x34
+ 35204 5ca8 080D0000 		.long	0xd08
+ 35205 5cac 03       		.byte	0x3
+ 35206 5cad 91       		.byte	0x91
+ 35207 5cae CC6C     		.sleb128 -2484
+ 35208 5cb0 31       		.uleb128 0x31
+ 35209 5cb1 1F0D0000 		.long	0xd1f
+ 35210 5cb5 00000000 		.quad	.LBB1350
+ 35210      00000000 
+ 35211 5cbd 00000000 		.quad	.LBE1350
+ 35211      00000000 
+ 35212 5cc5 02       		.byte	0x2
+ 35213 5cc6 5603     		.value	0x356
+ 35214 5cc8 DF5C0000 		.long	0x5cdf
+ 35215 5ccc 32       		.uleb128 0x32
+ 35216 5ccd 3A0D0000 		.long	0xd3a
+ 35217 5cd1 03       		.byte	0x3
+ 35218 5cd2 91       		.byte	0x91
+ 35219 5cd3 906D     		.sleb128 -2416
+ 35220 5cd5 32       		.uleb128 0x32
+ 35221 5cd6 300D0000 		.long	0xd30
+ 35222 5cda 03       		.byte	0x3
+ 35223 5cdb 91       		.byte	0x91
+ 35224 5cdc A06D     		.sleb128 -2400
+ 35225 5cde 00       		.byte	0x0
+ 35226 5cdf 31       		.uleb128 0x31
+ 35227 5ce0 450D0000 		.long	0xd45
+ 35228 5ce4 00000000 		.quad	.LBB1352
+ 35228      00000000 
+ 35229 5cec 00000000 		.quad	.LBE1352
+ 35229      00000000 
+ 35230 5cf4 02       		.byte	0x2
+ 35231 5cf5 5E03     		.value	0x35e
+ 35232 5cf7 0E5D0000 		.long	0x5d0e
+ 35233 5cfb 32       		.uleb128 0x32
+ 35234 5cfc 620D0000 		.long	0xd62
+ 35235 5d00 03       		.byte	0x3
+ 35236 5d01 91       		.byte	0x91
+ 35237 5d02 B06D     		.sleb128 -2384
+ 35238 5d04 32       		.uleb128 0x32
+ 35239 5d05 570D0000 		.long	0xd57
+ 35240 5d09 03       		.byte	0x3
+ 35241 5d0a 91       		.byte	0x91
+ 35242 5d0b C06D     		.sleb128 -2368
+ 35243 5d0d 00       		.byte	0x0
+ 35244 5d0e 31       		.uleb128 0x31
+ 35245 5d0f 6E0D0000 		.long	0xd6e
+ 35246 5d13 00000000 		.quad	.LBB1354
+ 35246      00000000 
+ 35247 5d1b 00000000 		.quad	.LBE1354
+ 35247      00000000 
+ 35248 5d23 02       		.byte	0x2
+ 35249 5d24 6403     		.value	0x364
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 956
+
+
+ 35250 5d26 735D0000 		.long	0x5d73
+ 35251 5d2a 32       		.uleb128 0x32
+ 35252 5d2b 8C0D0000 		.long	0xd8c
+ 35253 5d2f 03       		.byte	0x3
+ 35254 5d30 91       		.byte	0x91
+ 35255 5d31 D06D     		.sleb128 -2352
+ 35256 5d33 32       		.uleb128 0x32
+ 35257 5d34 800D0000 		.long	0xd80
+ 35258 5d38 03       		.byte	0x3
+ 35259 5d39 91       		.byte	0x91
+ 35260 5d3a E06D     		.sleb128 -2336
+ 35261 5d3c 33       		.uleb128 0x33
+ 35262 5d3d 00000000 		.quad	.LBB1355
+ 35262      00000000 
+ 35263 5d45 00000000 		.quad	.LBE1355
+ 35263      00000000 
+ 35264 5d4d 34       		.uleb128 0x34
+ 35265 5d4e 980D0000 		.long	0xd98
+ 35266 5d52 03       		.byte	0x3
+ 35267 5d53 91       		.byte	0x91
+ 35268 5d54 8057     		.sleb128 -5248
+ 35269 5d56 34       		.uleb128 0x34
+ 35270 5d57 A40D0000 		.long	0xda4
+ 35271 5d5b 03       		.byte	0x3
+ 35272 5d5c 91       		.byte	0x91
+ 35273 5d5d F056     		.sleb128 -5264
+ 35274 5d5f 34       		.uleb128 0x34
+ 35275 5d60 AF0D0000 		.long	0xdaf
+ 35276 5d64 03       		.byte	0x3
+ 35277 5d65 91       		.byte	0x91
+ 35278 5d66 E056     		.sleb128 -5280
+ 35279 5d68 34       		.uleb128 0x34
+ 35280 5d69 BB0D0000 		.long	0xdbb
+ 35281 5d6d 03       		.byte	0x3
+ 35282 5d6e 91       		.byte	0x91
+ 35283 5d6f FC6D     		.sleb128 -2308
+ 35284 5d71 00       		.byte	0x0
+ 35285 5d72 00       		.byte	0x0
+ 35286 5d73 31       		.uleb128 0x31
+ 35287 5d74 C70D0000 		.long	0xdc7
+ 35288 5d78 00000000 		.quad	.LBB1356
+ 35288      00000000 
+ 35289 5d80 00000000 		.quad	.LBE1356
+ 35289      00000000 
+ 35290 5d88 02       		.byte	0x2
+ 35291 5d89 6603     		.value	0x366
+ 35292 5d8b A25D0000 		.long	0x5da2
+ 35293 5d8f 32       		.uleb128 0x32
+ 35294 5d90 E20D0000 		.long	0xde2
+ 35295 5d94 03       		.byte	0x3
+ 35296 5d95 91       		.byte	0x91
+ 35297 5d96 806E     		.sleb128 -2304
+ 35298 5d98 32       		.uleb128 0x32
+ 35299 5d99 D80D0000 		.long	0xdd8
+ 35300 5d9d 03       		.byte	0x3
+ 35301 5d9e 91       		.byte	0x91
+ 35302 5d9f 906E     		.sleb128 -2288
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 957
+
+
+ 35303 5da1 00       		.byte	0x0
+ 35304 5da2 31       		.uleb128 0x31
+ 35305 5da3 6E0D0000 		.long	0xd6e
+ 35306 5da7 00000000 		.quad	.LBB1358
+ 35306      00000000 
+ 35307 5daf 00000000 		.quad	.LBE1358
+ 35307      00000000 
+ 35308 5db7 02       		.byte	0x2
+ 35309 5db8 6803     		.value	0x368
+ 35310 5dba 075E0000 		.long	0x5e07
+ 35311 5dbe 32       		.uleb128 0x32
+ 35312 5dbf 8C0D0000 		.long	0xd8c
+ 35313 5dc3 03       		.byte	0x3
+ 35314 5dc4 91       		.byte	0x91
+ 35315 5dc5 A06E     		.sleb128 -2272
+ 35316 5dc7 32       		.uleb128 0x32
+ 35317 5dc8 800D0000 		.long	0xd80
+ 35318 5dcc 03       		.byte	0x3
+ 35319 5dcd 91       		.byte	0x91
+ 35320 5dce B06E     		.sleb128 -2256
+ 35321 5dd0 33       		.uleb128 0x33
+ 35322 5dd1 00000000 		.quad	.LBB1359
+ 35322      00000000 
+ 35323 5dd9 00000000 		.quad	.LBE1359
+ 35323      00000000 
+ 35324 5de1 34       		.uleb128 0x34
+ 35325 5de2 980D0000 		.long	0xd98
+ 35326 5de6 03       		.byte	0x3
+ 35327 5de7 91       		.byte	0x91
+ 35328 5de8 B057     		.sleb128 -5200
+ 35329 5dea 34       		.uleb128 0x34
+ 35330 5deb A40D0000 		.long	0xda4
+ 35331 5def 03       		.byte	0x3
+ 35332 5df0 91       		.byte	0x91
+ 35333 5df1 A057     		.sleb128 -5216
+ 35334 5df3 34       		.uleb128 0x34
+ 35335 5df4 AF0D0000 		.long	0xdaf
+ 35336 5df8 03       		.byte	0x3
+ 35337 5df9 91       		.byte	0x91
+ 35338 5dfa 9057     		.sleb128 -5232
+ 35339 5dfc 34       		.uleb128 0x34
+ 35340 5dfd BB0D0000 		.long	0xdbb
+ 35341 5e01 03       		.byte	0x3
+ 35342 5e02 91       		.byte	0x91
+ 35343 5e03 CC6E     		.sleb128 -2228
+ 35344 5e05 00       		.byte	0x0
+ 35345 5e06 00       		.byte	0x0
+ 35346 5e07 31       		.uleb128 0x31
+ 35347 5e08 C70D0000 		.long	0xdc7
+ 35348 5e0c 00000000 		.quad	.LBB1360
+ 35348      00000000 
+ 35349 5e14 00000000 		.quad	.LBE1360
+ 35349      00000000 
+ 35350 5e1c 02       		.byte	0x2
+ 35351 5e1d 6A03     		.value	0x36a
+ 35352 5e1f 365E0000 		.long	0x5e36
+ 35353 5e23 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 958
+
+
+ 35354 5e24 E20D0000 		.long	0xde2
+ 35355 5e28 03       		.byte	0x3
+ 35356 5e29 91       		.byte	0x91
+ 35357 5e2a D06E     		.sleb128 -2224
+ 35358 5e2c 32       		.uleb128 0x32
+ 35359 5e2d D80D0000 		.long	0xdd8
+ 35360 5e31 03       		.byte	0x3
+ 35361 5e32 91       		.byte	0x91
+ 35362 5e33 E06E     		.sleb128 -2208
+ 35363 5e35 00       		.byte	0x0
+ 35364 5e36 31       		.uleb128 0x31
+ 35365 5e37 ED0D0000 		.long	0xded
+ 35366 5e3b 00000000 		.quad	.LBB1362
+ 35366      00000000 
+ 35367 5e43 00000000 		.quad	.LBE1362
+ 35367      00000000 
+ 35368 5e4b 02       		.byte	0x2
+ 35369 5e4c 6C03     		.value	0x36c
+ 35370 5e4e 655E0000 		.long	0x5e65
+ 35371 5e52 32       		.uleb128 0x32
+ 35372 5e53 0A0E0000 		.long	0xe0a
+ 35373 5e57 03       		.byte	0x3
+ 35374 5e58 91       		.byte	0x91
+ 35375 5e59 F06E     		.sleb128 -2192
+ 35376 5e5b 32       		.uleb128 0x32
+ 35377 5e5c FF0D0000 		.long	0xdff
+ 35378 5e60 03       		.byte	0x3
+ 35379 5e61 91       		.byte	0x91
+ 35380 5e62 806F     		.sleb128 -2176
+ 35381 5e64 00       		.byte	0x0
+ 35382 5e65 35       		.uleb128 0x35
+ 35383 5e66 1F0D0000 		.long	0xd1f
+ 35384 5e6a 00000000 		.quad	.LBB1364
+ 35384      00000000 
+ 35385 5e72 00000000 		.quad	.LBE1364
+ 35385      00000000 
+ 35386 5e7a 02       		.byte	0x2
+ 35387 5e7b 6E03     		.value	0x36e
+ 35388 5e7d 32       		.uleb128 0x32
+ 35389 5e7e 3A0D0000 		.long	0xd3a
+ 35390 5e82 03       		.byte	0x3
+ 35391 5e83 91       		.byte	0x91
+ 35392 5e84 906F     		.sleb128 -2160
+ 35393 5e86 32       		.uleb128 0x32
+ 35394 5e87 300D0000 		.long	0xd30
+ 35395 5e8b 03       		.byte	0x3
+ 35396 5e8c 91       		.byte	0x91
+ 35397 5e8d A06F     		.sleb128 -2144
+ 35398 5e8f 00       		.byte	0x0
+ 35399 5e90 00       		.byte	0x0
+ 35400 5e91 00       		.byte	0x0
+ 35401 5e92 00       		.byte	0x0
+ 35402 5e93 36       		.uleb128 0x36
+ 35403 5e94 00000000 		.quad	.LBB1366
+ 35403      00000000 
+ 35404 5e9c 00000000 		.quad	.LBE1366
+ 35404      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 959
+
+
+ 35405 5ea4 B25E0000 		.long	0x5eb2
+ 35406 5ea8 34       		.uleb128 0x34
+ 35407 5ea9 180C0000 		.long	0xc18
+ 35408 5ead 03       		.byte	0x3
+ 35409 5eae 91       		.byte	0x91
+ 35410 5eaf C056     		.sleb128 -5312
+ 35411 5eb1 00       		.byte	0x0
+ 35412 5eb2 31       		.uleb128 0x31
+ 35413 5eb3 160E0000 		.long	0xe16
+ 35414 5eb7 00000000 		.quad	.LBB1367
+ 35414      00000000 
+ 35415 5ebf 00000000 		.quad	.LBE1367
+ 35415      00000000 
+ 35416 5ec7 02       		.byte	0x2
+ 35417 5ec8 9406     		.value	0x694
+ 35418 5eca 5A5F0000 		.long	0x5f5a
+ 35419 5ece 32       		.uleb128 0x32
+ 35420 5ecf 280E0000 		.long	0xe28
+ 35421 5ed3 03       		.byte	0x3
+ 35422 5ed4 91       		.byte	0x91
+ 35423 5ed5 B06F     		.sleb128 -2128
+ 35424 5ed7 33       		.uleb128 0x33
+ 35425 5ed8 00000000 		.quad	.LBB1368
+ 35425      00000000 
+ 35426 5ee0 00000000 		.quad	.LBE1368
+ 35426      00000000 
+ 35427 5ee8 34       		.uleb128 0x34
+ 35428 5ee9 340E0000 		.long	0xe34
+ 35429 5eed 09       		.byte	0x9
+ 35430 5eee 03       		.byte	0x3
+ 35431 5eef 00000000 		.quad	ShiftRowTable.6768
+ 35431      00000000 
+ 35432 5ef7 35       		.uleb128 0x35
+ 35433 5ef8 6E0D0000 		.long	0xd6e
+ 35434 5efc 00000000 		.quad	.LBB1369
+ 35434      00000000 
+ 35435 5f04 00000000 		.quad	.LBE1369
+ 35435      00000000 
+ 35436 5f0c 02       		.byte	0x2
+ 35437 5f0d 9B02     		.value	0x29b
+ 35438 5f0f 32       		.uleb128 0x32
+ 35439 5f10 8C0D0000 		.long	0xd8c
+ 35440 5f14 03       		.byte	0x3
+ 35441 5f15 91       		.byte	0x91
+ 35442 5f16 C06F     		.sleb128 -2112
+ 35443 5f18 32       		.uleb128 0x32
+ 35444 5f19 800D0000 		.long	0xd80
+ 35445 5f1d 03       		.byte	0x3
+ 35446 5f1e 91       		.byte	0x91
+ 35447 5f1f D06F     		.sleb128 -2096
+ 35448 5f21 33       		.uleb128 0x33
+ 35449 5f22 00000000 		.quad	.LBB1370
+ 35449      00000000 
+ 35450 5f2a 00000000 		.quad	.LBE1370
+ 35450      00000000 
+ 35451 5f32 34       		.uleb128 0x34
+ 35452 5f33 980D0000 		.long	0xd98
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 960
+
+
+ 35453 5f37 03       		.byte	0x3
+ 35454 5f38 91       		.byte	0x91
+ 35455 5f39 E057     		.sleb128 -5152
+ 35456 5f3b 34       		.uleb128 0x34
+ 35457 5f3c A40D0000 		.long	0xda4
+ 35458 5f40 03       		.byte	0x3
+ 35459 5f41 91       		.byte	0x91
+ 35460 5f42 D057     		.sleb128 -5168
+ 35461 5f44 34       		.uleb128 0x34
+ 35462 5f45 AF0D0000 		.long	0xdaf
+ 35463 5f49 03       		.byte	0x3
+ 35464 5f4a 91       		.byte	0x91
+ 35465 5f4b C057     		.sleb128 -5184
+ 35466 5f4d 34       		.uleb128 0x34
+ 35467 5f4e BB0D0000 		.long	0xdbb
+ 35468 5f52 03       		.byte	0x3
+ 35469 5f53 91       		.byte	0x91
+ 35470 5f54 EC6F     		.sleb128 -2068
+ 35471 5f56 00       		.byte	0x0
+ 35472 5f57 00       		.byte	0x0
+ 35473 5f58 00       		.byte	0x0
+ 35474 5f59 00       		.byte	0x0
+ 35475 5f5a 36       		.uleb128 0x36
+ 35476 5f5b 00000000 		.quad	.LBB1371
+ 35476      00000000 
+ 35477 5f63 00000000 		.quad	.LBE1371
+ 35477      00000000 
+ 35478 5f6b 795F0000 		.long	0x5f79
+ 35479 5f6f 34       		.uleb128 0x34
+ 35480 5f70 280C0000 		.long	0xc28
+ 35481 5f74 03       		.byte	0x3
+ 35482 5f75 91       		.byte	0x91
+ 35483 5f76 B056     		.sleb128 -5328
+ 35484 5f78 00       		.byte	0x0
+ 35485 5f79 31       		.uleb128 0x31
+ 35486 5f7a 520E0000 		.long	0xe52
+ 35487 5f7e 00000000 		.quad	.LBB1372
+ 35487      00000000 
+ 35488 5f86 00000000 		.quad	.LBE1372
+ 35488      00000000 
+ 35489 5f8e 02       		.byte	0x2
+ 35490 5f8f 9606     		.value	0x696
+ 35491 5f91 A85F0000 		.long	0x5fa8
+ 35492 5f95 32       		.uleb128 0x32
+ 35493 5f96 6D0E0000 		.long	0xe6d
+ 35494 5f9a 03       		.byte	0x3
+ 35495 5f9b 91       		.byte	0x91
+ 35496 5f9c F06F     		.sleb128 -2064
+ 35497 5f9e 32       		.uleb128 0x32
+ 35498 5f9f 630E0000 		.long	0xe63
+ 35499 5fa3 03       		.byte	0x3
+ 35500 5fa4 91       		.byte	0x91
+ 35501 5fa5 8070     		.sleb128 -2048
+ 35502 5fa7 00       		.byte	0x0
+ 35503 5fa8 36       		.uleb128 0x36
+ 35504 5fa9 00000000 		.quad	.LBB1374
+ 35504      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 961
+
+
+ 35505 5fb1 00000000 		.quad	.LBE1374
+ 35505      00000000 
+ 35506 5fb9 C75F0000 		.long	0x5fc7
+ 35507 5fbd 34       		.uleb128 0x34
+ 35508 5fbe 380C0000 		.long	0xc38
+ 35509 5fc2 03       		.byte	0x3
+ 35510 5fc3 91       		.byte	0x91
+ 35511 5fc4 A056     		.sleb128 -5344
+ 35512 5fc6 00       		.byte	0x0
+ 35513 5fc7 31       		.uleb128 0x31
+ 35514 5fc8 780E0000 		.long	0xe78
+ 35515 5fcc 00000000 		.quad	.LBB1375
+ 35515      00000000 
+ 35516 5fd4 00000000 		.quad	.LBE1375
+ 35516      00000000 
+ 35517 5fdc 02       		.byte	0x2
+ 35518 5fdd 9806     		.value	0x698
+ 35519 5fdf 08600000 		.long	0x6008
+ 35520 5fe3 32       		.uleb128 0x32
+ 35521 5fe4 8A0E0000 		.long	0xe8a
+ 35522 5fe8 03       		.byte	0x3
+ 35523 5fe9 91       		.byte	0x91
+ 35524 5fea 9070     		.sleb128 -2032
+ 35525 5fec 33       		.uleb128 0x33
+ 35526 5fed 00000000 		.quad	.LBB1376
+ 35526      00000000 
+ 35527 5ff5 00000000 		.quad	.LBE1376
+ 35527      00000000 
+ 35528 5ffd 34       		.uleb128 0x34
+ 35529 5ffe 960E0000 		.long	0xe96
+ 35530 6002 03       		.byte	0x3
+ 35531 6003 91       		.byte	0x91
+ 35532 6004 F057     		.sleb128 -5136
+ 35533 6006 00       		.byte	0x0
+ 35534 6007 00       		.byte	0x0
+ 35535 6008 33       		.uleb128 0x33
+ 35536 6009 00000000 		.quad	.LBB1377
+ 35536      00000000 
+ 35537 6011 00000000 		.quad	.LBE1377
+ 35537      00000000 
+ 35538 6019 34       		.uleb128 0x34
+ 35539 601a 440C0000 		.long	0xc44
+ 35540 601e 03       		.byte	0x3
+ 35541 601f 91       		.byte	0x91
+ 35542 6020 9056     		.sleb128 -5360
+ 35543 6022 00       		.byte	0x0
+ 35544 6023 00       		.byte	0x0
+ 35545 6024 00       		.byte	0x0
+ 35546 6025 31       		.uleb128 0x31
+ 35547 6026 780E0000 		.long	0xe78
+ 35548 602a 00000000 		.quad	.LBB1378
+ 35548      00000000 
+ 35549 6032 00000000 		.quad	.LBE1378
+ 35549      00000000 
+ 35550 603a 02       		.byte	0x2
+ 35551 603b 2A07     		.value	0x72a
+ 35552 603d 66600000 		.long	0x6066
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 962
+
+
+ 35553 6041 32       		.uleb128 0x32
+ 35554 6042 8A0E0000 		.long	0xe8a
+ 35555 6046 03       		.byte	0x3
+ 35556 6047 91       		.byte	0x91
+ 35557 6048 A070     		.sleb128 -2016
+ 35558 604a 33       		.uleb128 0x33
+ 35559 604b 00000000 		.quad	.LBB1379
+ 35559      00000000 
+ 35560 6053 00000000 		.quad	.LBE1379
+ 35560      00000000 
+ 35561 605b 34       		.uleb128 0x34
+ 35562 605c 960E0000 		.long	0xe96
+ 35563 6060 03       		.byte	0x3
+ 35564 6061 91       		.byte	0x91
+ 35565 6062 8058     		.sleb128 -5120
+ 35566 6064 00       		.byte	0x0
+ 35567 6065 00       		.byte	0x0
+ 35568 6066 31       		.uleb128 0x31
+ 35569 6067 C5480000 		.long	0x48c5
+ 35570 606b 00000000 		.quad	.LBB1380
+ 35570      00000000 
+ 35571 6073 00000000 		.quad	.LBE1380
+ 35571      00000000 
+ 35572 607b 02       		.byte	0x2
+ 35573 607c 3207     		.value	0x732
+ 35574 607e 2E610000 		.long	0x612e
+ 35575 6082 32       		.uleb128 0x32
+ 35576 6083 E3480000 		.long	0x48e3
+ 35577 6087 03       		.byte	0x3
+ 35578 6088 91       		.byte	0x91
+ 35579 6089 BC70     		.sleb128 -1988
+ 35580 608b 32       		.uleb128 0x32
+ 35581 608c D7480000 		.long	0x48d7
+ 35582 6090 03       		.byte	0x3
+ 35583 6091 91       		.byte	0x91
+ 35584 6092 C070     		.sleb128 -1984
+ 35585 6094 33       		.uleb128 0x33
+ 35586 6095 00000000 		.quad	.LBB1381
+ 35586      00000000 
+ 35587 609d 00000000 		.quad	.LBE1381
+ 35587      00000000 
+ 35588 60a5 34       		.uleb128 0x34
+ 35589 60a6 EF480000 		.long	0x48ef
+ 35590 60aa 03       		.byte	0x3
+ 35591 60ab 91       		.byte	0x91
+ 35592 60ac A058     		.sleb128 -5088
+ 35593 60ae 34       		.uleb128 0x34
+ 35594 60af F9480000 		.long	0x48f9
+ 35595 60b3 03       		.byte	0x3
+ 35596 60b4 91       		.byte	0x91
+ 35597 60b5 E070     		.sleb128 -1952
+ 35598 60b7 34       		.uleb128 0x34
+ 35599 60b8 05490000 		.long	0x4905
+ 35600 60bc 03       		.byte	0x3
+ 35601 60bd 91       		.byte	0x91
+ 35602 60be DC70     		.sleb128 -1956
+ 35603 60c0 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 963
+
+
+ 35604 60c1 12490000 		.long	0x4912
+ 35605 60c5 00000000 		.quad	.LBB1382
+ 35605      00000000 
+ 35606 60cd 00000000 		.quad	.LBE1382
+ 35606      00000000 
+ 35607 60d5 02       		.byte	0x2
+ 35608 60d6 5F06     		.value	0x65f
+ 35609 60d8 0A610000 		.long	0x610a
+ 35610 60dc 32       		.uleb128 0x32
+ 35611 60dd 24490000 		.long	0x4924
+ 35612 60e1 03       		.byte	0x3
+ 35613 60e2 91       		.byte	0x91
+ 35614 60e3 E470     		.sleb128 -1948
+ 35615 60e5 33       		.uleb128 0x33
+ 35616 60e6 00000000 		.quad	.LBB1383
+ 35616      00000000 
+ 35617 60ee 00000000 		.quad	.LBE1383
+ 35617      00000000 
+ 35618 60f6 34       		.uleb128 0x34
+ 35619 60f7 2E490000 		.long	0x492e
+ 35620 60fb 03       		.byte	0x3
+ 35621 60fc 91       		.byte	0x91
+ 35622 60fd 9058     		.sleb128 -5104
+ 35623 60ff 34       		.uleb128 0x34
+ 35624 6100 3A490000 		.long	0x493a
+ 35625 6104 03       		.byte	0x3
+ 35626 6105 91       		.byte	0x91
+ 35627 6106 E870     		.sleb128 -1944
+ 35628 6108 00       		.byte	0x0
+ 35629 6109 00       		.byte	0x0
+ 35630 610a 35       		.uleb128 0x35
+ 35631 610b 46490000 		.long	0x4946
+ 35632 610f 00000000 		.quad	.LBB1384
+ 35632      00000000 
+ 35633 6117 00000000 		.quad	.LBE1384
+ 35633      00000000 
+ 35634 611f 02       		.byte	0x2
+ 35635 6120 6006     		.value	0x660
+ 35636 6122 32       		.uleb128 0x32
+ 35637 6123 58490000 		.long	0x4958
+ 35638 6127 03       		.byte	0x3
+ 35639 6128 91       		.byte	0x91
+ 35640 6129 EC70     		.sleb128 -1940
+ 35641 612b 00       		.byte	0x0
+ 35642 612c 00       		.byte	0x0
+ 35643 612d 00       		.byte	0x0
+ 35644 612e 31       		.uleb128 0x31
+ 35645 612f A30E0000 		.long	0xea3
+ 35646 6133 00000000 		.quad	.LBB1386
+ 35646      00000000 
+ 35647 613b 00000000 		.quad	.LBE1386
+ 35647      00000000 
+ 35648 6143 02       		.byte	0x2
+ 35649 6144 3407     		.value	0x734
+ 35650 6146 2E620000 		.long	0x622e
+ 35651 614a 32       		.uleb128 0x32
+ 35652 614b B50E0000 		.long	0xeb5
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 964
+
+
+ 35653 614f 03       		.byte	0x3
+ 35654 6150 91       		.byte	0x91
+ 35655 6151 F070     		.sleb128 -1936
+ 35656 6153 33       		.uleb128 0x33
+ 35657 6154 00000000 		.quad	.LBB1387
+ 35657      00000000 
+ 35658 615c 00000000 		.quad	.LBE1387
+ 35658      00000000 
+ 35659 6164 34       		.uleb128 0x34
+ 35660 6165 C10E0000 		.long	0xec1
+ 35661 6169 03       		.byte	0x3
+ 35662 616a 76       		.byte	0x76
+ 35663 616b B04D     		.sleb128 -6480
+ 35664 616d 31       		.uleb128 0x31
+ 35665 616e CE0E0000 		.long	0xece
+ 35666 6172 00000000 		.quad	.LBB1388
+ 35666      00000000 
+ 35667 617a 00000000 		.quad	.LBE1388
+ 35667      00000000 
+ 35668 6182 02       		.byte	0x2
+ 35669 6183 1F06     		.value	0x61f
+ 35670 6185 AE610000 		.long	0x61ae
+ 35671 6189 32       		.uleb128 0x32
+ 35672 618a E00E0000 		.long	0xee0
+ 35673 618e 03       		.byte	0x3
+ 35674 618f 91       		.byte	0x91
+ 35675 6190 8071     		.sleb128 -1920
+ 35676 6192 33       		.uleb128 0x33
+ 35677 6193 00000000 		.quad	.LBB1389
+ 35677      00000000 
+ 35678 619b 00000000 		.quad	.LBE1389
+ 35678      00000000 
+ 35679 61a3 34       		.uleb128 0x34
+ 35680 61a4 EC0E0000 		.long	0xeec
+ 35681 61a8 03       		.byte	0x3
+ 35682 61a9 91       		.byte	0x91
+ 35683 61aa B058     		.sleb128 -5072
+ 35684 61ac 00       		.byte	0x0
+ 35685 61ad 00       		.byte	0x0
+ 35686 61ae 31       		.uleb128 0x31
+ 35687 61af CE0E0000 		.long	0xece
+ 35688 61b3 00000000 		.quad	.LBB1390
+ 35688      00000000 
+ 35689 61bb 00000000 		.quad	.LBE1390
+ 35689      00000000 
+ 35690 61c3 02       		.byte	0x2
+ 35691 61c4 2006     		.value	0x620
+ 35692 61c6 EF610000 		.long	0x61ef
+ 35693 61ca 32       		.uleb128 0x32
+ 35694 61cb E00E0000 		.long	0xee0
+ 35695 61cf 03       		.byte	0x3
+ 35696 61d0 91       		.byte	0x91
+ 35697 61d1 9071     		.sleb128 -1904
+ 35698 61d3 33       		.uleb128 0x33
+ 35699 61d4 00000000 		.quad	.LBB1391
+ 35699      00000000 
+ 35700 61dc 00000000 		.quad	.LBE1391
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 965
+
+
+ 35700      00000000 
+ 35701 61e4 34       		.uleb128 0x34
+ 35702 61e5 EC0E0000 		.long	0xeec
+ 35703 61e9 03       		.byte	0x3
+ 35704 61ea 91       		.byte	0x91
+ 35705 61eb C058     		.sleb128 -5056
+ 35706 61ed 00       		.byte	0x0
+ 35707 61ee 00       		.byte	0x0
+ 35708 61ef 35       		.uleb128 0x35
+ 35709 61f0 CE0E0000 		.long	0xece
+ 35710 61f4 00000000 		.quad	.LBB1392
+ 35710      00000000 
+ 35711 61fc 00000000 		.quad	.LBE1392
+ 35711      00000000 
+ 35712 6204 02       		.byte	0x2
+ 35713 6205 2106     		.value	0x621
+ 35714 6207 32       		.uleb128 0x32
+ 35715 6208 E00E0000 		.long	0xee0
+ 35716 620c 03       		.byte	0x3
+ 35717 620d 91       		.byte	0x91
+ 35718 620e A071     		.sleb128 -1888
+ 35719 6210 33       		.uleb128 0x33
+ 35720 6211 00000000 		.quad	.LBB1393
+ 35720      00000000 
+ 35721 6219 00000000 		.quad	.LBE1393
+ 35721      00000000 
+ 35722 6221 34       		.uleb128 0x34
+ 35723 6222 EC0E0000 		.long	0xeec
+ 35724 6226 03       		.byte	0x3
+ 35725 6227 91       		.byte	0x91
+ 35726 6228 D058     		.sleb128 -5040
+ 35727 622a 00       		.byte	0x0
+ 35728 622b 00       		.byte	0x0
+ 35729 622c 00       		.byte	0x0
+ 35730 622d 00       		.byte	0x0
+ 35731 622e 31       		.uleb128 0x31
+ 35732 622f A30E0000 		.long	0xea3
+ 35733 6233 00000000 		.quad	.LBB1394
+ 35733      00000000 
+ 35734 623b 00000000 		.quad	.LBE1394
+ 35734      00000000 
+ 35735 6243 02       		.byte	0x2
+ 35736 6244 3607     		.value	0x736
+ 35737 6246 2E630000 		.long	0x632e
+ 35738 624a 32       		.uleb128 0x32
+ 35739 624b B50E0000 		.long	0xeb5
+ 35740 624f 03       		.byte	0x3
+ 35741 6250 91       		.byte	0x91
+ 35742 6251 B071     		.sleb128 -1872
+ 35743 6253 33       		.uleb128 0x33
+ 35744 6254 00000000 		.quad	.LBB1395
+ 35744      00000000 
+ 35745 625c 00000000 		.quad	.LBE1395
+ 35745      00000000 
+ 35746 6264 34       		.uleb128 0x34
+ 35747 6265 C10E0000 		.long	0xec1
+ 35748 6269 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 966
+
+
+ 35749 626a 76       		.byte	0x76
+ 35750 626b C04D     		.sleb128 -6464
+ 35751 626d 31       		.uleb128 0x31
+ 35752 626e CE0E0000 		.long	0xece
+ 35753 6272 00000000 		.quad	.LBB1396
+ 35753      00000000 
+ 35754 627a 00000000 		.quad	.LBE1396
+ 35754      00000000 
+ 35755 6282 02       		.byte	0x2
+ 35756 6283 1F06     		.value	0x61f
+ 35757 6285 AE620000 		.long	0x62ae
+ 35758 6289 32       		.uleb128 0x32
+ 35759 628a E00E0000 		.long	0xee0
+ 35760 628e 03       		.byte	0x3
+ 35761 628f 91       		.byte	0x91
+ 35762 6290 C071     		.sleb128 -1856
+ 35763 6292 33       		.uleb128 0x33
+ 35764 6293 00000000 		.quad	.LBB1397
+ 35764      00000000 
+ 35765 629b 00000000 		.quad	.LBE1397
+ 35765      00000000 
+ 35766 62a3 34       		.uleb128 0x34
+ 35767 62a4 EC0E0000 		.long	0xeec
+ 35768 62a8 03       		.byte	0x3
+ 35769 62a9 91       		.byte	0x91
+ 35770 62aa E058     		.sleb128 -5024
+ 35771 62ac 00       		.byte	0x0
+ 35772 62ad 00       		.byte	0x0
+ 35773 62ae 31       		.uleb128 0x31
+ 35774 62af CE0E0000 		.long	0xece
+ 35775 62b3 00000000 		.quad	.LBB1398
+ 35775      00000000 
+ 35776 62bb 00000000 		.quad	.LBE1398
+ 35776      00000000 
+ 35777 62c3 02       		.byte	0x2
+ 35778 62c4 2006     		.value	0x620
+ 35779 62c6 EF620000 		.long	0x62ef
+ 35780 62ca 32       		.uleb128 0x32
+ 35781 62cb E00E0000 		.long	0xee0
+ 35782 62cf 03       		.byte	0x3
+ 35783 62d0 91       		.byte	0x91
+ 35784 62d1 D071     		.sleb128 -1840
+ 35785 62d3 33       		.uleb128 0x33
+ 35786 62d4 00000000 		.quad	.LBB1399
+ 35786      00000000 
+ 35787 62dc 00000000 		.quad	.LBE1399
+ 35787      00000000 
+ 35788 62e4 34       		.uleb128 0x34
+ 35789 62e5 EC0E0000 		.long	0xeec
+ 35790 62e9 03       		.byte	0x3
+ 35791 62ea 91       		.byte	0x91
+ 35792 62eb F058     		.sleb128 -5008
+ 35793 62ed 00       		.byte	0x0
+ 35794 62ee 00       		.byte	0x0
+ 35795 62ef 35       		.uleb128 0x35
+ 35796 62f0 CE0E0000 		.long	0xece
+ 35797 62f4 00000000 		.quad	.LBB1400
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 967
+
+
+ 35797      00000000 
+ 35798 62fc 00000000 		.quad	.LBE1400
+ 35798      00000000 
+ 35799 6304 02       		.byte	0x2
+ 35800 6305 2106     		.value	0x621
+ 35801 6307 32       		.uleb128 0x32
+ 35802 6308 E00E0000 		.long	0xee0
+ 35803 630c 03       		.byte	0x3
+ 35804 630d 91       		.byte	0x91
+ 35805 630e E071     		.sleb128 -1824
+ 35806 6310 33       		.uleb128 0x33
+ 35807 6311 00000000 		.quad	.LBB1401
+ 35807      00000000 
+ 35808 6319 00000000 		.quad	.LBE1401
+ 35808      00000000 
+ 35809 6321 34       		.uleb128 0x34
+ 35810 6322 EC0E0000 		.long	0xeec
+ 35811 6326 03       		.byte	0x3
+ 35812 6327 91       		.byte	0x91
+ 35813 6328 8059     		.sleb128 -4992
+ 35814 632a 00       		.byte	0x0
+ 35815 632b 00       		.byte	0x0
+ 35816 632c 00       		.byte	0x0
+ 35817 632d 00       		.byte	0x0
+ 35818 632e 31       		.uleb128 0x31
+ 35819 632f 780E0000 		.long	0xe78
+ 35820 6333 00000000 		.quad	.LBB1402
+ 35820      00000000 
+ 35821 633b 00000000 		.quad	.LBE1402
+ 35821      00000000 
+ 35822 6343 02       		.byte	0x2
+ 35823 6344 3707     		.value	0x737
+ 35824 6346 6F630000 		.long	0x636f
+ 35825 634a 32       		.uleb128 0x32
+ 35826 634b 8A0E0000 		.long	0xe8a
+ 35827 634f 03       		.byte	0x3
+ 35828 6350 91       		.byte	0x91
+ 35829 6351 F071     		.sleb128 -1808
+ 35830 6353 33       		.uleb128 0x33
+ 35831 6354 00000000 		.quad	.LBB1403
+ 35831      00000000 
+ 35832 635c 00000000 		.quad	.LBE1403
+ 35832      00000000 
+ 35833 6364 34       		.uleb128 0x34
+ 35834 6365 960E0000 		.long	0xe96
+ 35835 6369 03       		.byte	0x3
+ 35836 636a 91       		.byte	0x91
+ 35837 636b 9059     		.sleb128 -4976
+ 35838 636d 00       		.byte	0x0
+ 35839 636e 00       		.byte	0x0
+ 35840 636f 31       		.uleb128 0x31
+ 35841 6370 63490000 		.long	0x4963
+ 35842 6374 00000000 		.quad	.LBB1404
+ 35842      00000000 
+ 35843 637c 00000000 		.quad	.LBE1404
+ 35843      00000000 
+ 35844 6384 02       		.byte	0x2
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 968
+
+
+ 35845 6385 3907     		.value	0x739
+ 35846 6387 C2630000 		.long	0x63c2
+ 35847 638b 32       		.uleb128 0x32
+ 35848 638c 7F490000 		.long	0x497f
+ 35849 6390 03       		.byte	0x3
+ 35850 6391 91       		.byte	0x91
+ 35851 6392 8072     		.sleb128 -1792
+ 35852 6394 32       		.uleb128 0x32
+ 35853 6395 75490000 		.long	0x4975
+ 35854 6399 03       		.byte	0x3
+ 35855 639a 91       		.byte	0x91
+ 35856 639b 9072     		.sleb128 -1776
+ 35857 639d 33       		.uleb128 0x33
+ 35858 639e 00000000 		.quad	.LBB1405
+ 35858      00000000 
+ 35859 63a6 00000000 		.quad	.LBE1405
+ 35859      00000000 
+ 35860 63ae 34       		.uleb128 0x34
+ 35861 63af 89490000 		.long	0x4989
+ 35862 63b3 03       		.byte	0x3
+ 35863 63b4 91       		.byte	0x91
+ 35864 63b5 B059     		.sleb128 -4944
+ 35865 63b7 34       		.uleb128 0x34
+ 35866 63b8 94490000 		.long	0x4994
+ 35867 63bc 03       		.byte	0x3
+ 35868 63bd 91       		.byte	0x91
+ 35869 63be A059     		.sleb128 -4960
+ 35870 63c0 00       		.byte	0x0
+ 35871 63c1 00       		.byte	0x0
+ 35872 63c2 31       		.uleb128 0x31
+ 35873 63c3 A0490000 		.long	0x49a0
+ 35874 63c7 00000000 		.quad	.LBB1406
+ 35874      00000000 
+ 35875 63cf 00000000 		.quad	.LBE1406
+ 35875      00000000 
+ 35876 63d7 02       		.byte	0x2
+ 35877 63d8 3D07     		.value	0x73d
+ 35878 63da 15640000 		.long	0x6415
+ 35879 63de 32       		.uleb128 0x32
+ 35880 63df BC490000 		.long	0x49bc
+ 35881 63e3 03       		.byte	0x3
+ 35882 63e4 91       		.byte	0x91
+ 35883 63e5 A072     		.sleb128 -1760
+ 35884 63e7 32       		.uleb128 0x32
+ 35885 63e8 B2490000 		.long	0x49b2
+ 35886 63ec 03       		.byte	0x3
+ 35887 63ed 91       		.byte	0x91
+ 35888 63ee B072     		.sleb128 -1744
+ 35889 63f0 33       		.uleb128 0x33
+ 35890 63f1 00000000 		.quad	.LBB1407
+ 35890      00000000 
+ 35891 63f9 00000000 		.quad	.LBE1407
+ 35891      00000000 
+ 35892 6401 34       		.uleb128 0x34
+ 35893 6402 C6490000 		.long	0x49c6
+ 35894 6406 03       		.byte	0x3
+ 35895 6407 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 969
+
+
+ 35896 6408 D059     		.sleb128 -4912
+ 35897 640a 34       		.uleb128 0x34
+ 35898 640b D1490000 		.long	0x49d1
+ 35899 640f 03       		.byte	0x3
+ 35900 6410 91       		.byte	0x91
+ 35901 6411 C059     		.sleb128 -4928
+ 35902 6413 00       		.byte	0x0
+ 35903 6414 00       		.byte	0x0
+ 35904 6415 31       		.uleb128 0x31
+ 35905 6416 A30E0000 		.long	0xea3
+ 35906 641a 00000000 		.quad	.LBB1408
+ 35906      00000000 
+ 35907 6422 00000000 		.quad	.LBE1408
+ 35907      00000000 
+ 35908 642a 02       		.byte	0x2
+ 35909 642b 4007     		.value	0x740
+ 35910 642d 15650000 		.long	0x6515
+ 35911 6431 32       		.uleb128 0x32
+ 35912 6432 B50E0000 		.long	0xeb5
+ 35913 6436 03       		.byte	0x3
+ 35914 6437 91       		.byte	0x91
+ 35915 6438 C072     		.sleb128 -1728
+ 35916 643a 33       		.uleb128 0x33
+ 35917 643b 00000000 		.quad	.LBB1409
+ 35917      00000000 
+ 35918 6443 00000000 		.quad	.LBE1409
+ 35918      00000000 
+ 35919 644b 34       		.uleb128 0x34
+ 35920 644c C10E0000 		.long	0xec1
+ 35921 6450 03       		.byte	0x3
+ 35922 6451 76       		.byte	0x76
+ 35923 6452 D04D     		.sleb128 -6448
+ 35924 6454 31       		.uleb128 0x31
+ 35925 6455 CE0E0000 		.long	0xece
+ 35926 6459 00000000 		.quad	.LBB1410
+ 35926      00000000 
+ 35927 6461 00000000 		.quad	.LBE1410
+ 35927      00000000 
+ 35928 6469 02       		.byte	0x2
+ 35929 646a 1F06     		.value	0x61f
+ 35930 646c 95640000 		.long	0x6495
+ 35931 6470 32       		.uleb128 0x32
+ 35932 6471 E00E0000 		.long	0xee0
+ 35933 6475 03       		.byte	0x3
+ 35934 6476 91       		.byte	0x91
+ 35935 6477 D072     		.sleb128 -1712
+ 35936 6479 33       		.uleb128 0x33
+ 35937 647a 00000000 		.quad	.LBB1411
+ 35937      00000000 
+ 35938 6482 00000000 		.quad	.LBE1411
+ 35938      00000000 
+ 35939 648a 34       		.uleb128 0x34
+ 35940 648b EC0E0000 		.long	0xeec
+ 35941 648f 03       		.byte	0x3
+ 35942 6490 91       		.byte	0x91
+ 35943 6491 E059     		.sleb128 -4896
+ 35944 6493 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 970
+
+
+ 35945 6494 00       		.byte	0x0
+ 35946 6495 31       		.uleb128 0x31
+ 35947 6496 CE0E0000 		.long	0xece
+ 35948 649a 00000000 		.quad	.LBB1412
+ 35948      00000000 
+ 35949 64a2 00000000 		.quad	.LBE1412
+ 35949      00000000 
+ 35950 64aa 02       		.byte	0x2
+ 35951 64ab 2006     		.value	0x620
+ 35952 64ad D6640000 		.long	0x64d6
+ 35953 64b1 32       		.uleb128 0x32
+ 35954 64b2 E00E0000 		.long	0xee0
+ 35955 64b6 03       		.byte	0x3
+ 35956 64b7 91       		.byte	0x91
+ 35957 64b8 E072     		.sleb128 -1696
+ 35958 64ba 33       		.uleb128 0x33
+ 35959 64bb 00000000 		.quad	.LBB1413
+ 35959      00000000 
+ 35960 64c3 00000000 		.quad	.LBE1413
+ 35960      00000000 
+ 35961 64cb 34       		.uleb128 0x34
+ 35962 64cc EC0E0000 		.long	0xeec
+ 35963 64d0 03       		.byte	0x3
+ 35964 64d1 91       		.byte	0x91
+ 35965 64d2 F059     		.sleb128 -4880
+ 35966 64d4 00       		.byte	0x0
+ 35967 64d5 00       		.byte	0x0
+ 35968 64d6 35       		.uleb128 0x35
+ 35969 64d7 CE0E0000 		.long	0xece
+ 35970 64db 00000000 		.quad	.LBB1414
+ 35970      00000000 
+ 35971 64e3 00000000 		.quad	.LBE1414
+ 35971      00000000 
+ 35972 64eb 02       		.byte	0x2
+ 35973 64ec 2106     		.value	0x621
+ 35974 64ee 32       		.uleb128 0x32
+ 35975 64ef E00E0000 		.long	0xee0
+ 35976 64f3 03       		.byte	0x3
+ 35977 64f4 91       		.byte	0x91
+ 35978 64f5 F072     		.sleb128 -1680
+ 35979 64f7 33       		.uleb128 0x33
+ 35980 64f8 00000000 		.quad	.LBB1415
+ 35980      00000000 
+ 35981 6500 00000000 		.quad	.LBE1415
+ 35981      00000000 
+ 35982 6508 34       		.uleb128 0x34
+ 35983 6509 EC0E0000 		.long	0xeec
+ 35984 650d 03       		.byte	0x3
+ 35985 650e 91       		.byte	0x91
+ 35986 650f 805A     		.sleb128 -4864
+ 35987 6511 00       		.byte	0x0
+ 35988 6512 00       		.byte	0x0
+ 35989 6513 00       		.byte	0x0
+ 35990 6514 00       		.byte	0x0
+ 35991 6515 31       		.uleb128 0x31
+ 35992 6516 A30E0000 		.long	0xea3
+ 35993 651a 00000000 		.quad	.LBB1416
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 971
+
+
+ 35993      00000000 
+ 35994 6522 00000000 		.quad	.LBE1416
+ 35994      00000000 
+ 35995 652a 02       		.byte	0x2
+ 35996 652b 4107     		.value	0x741
+ 35997 652d 15660000 		.long	0x6615
+ 35998 6531 32       		.uleb128 0x32
+ 35999 6532 B50E0000 		.long	0xeb5
+ 36000 6536 03       		.byte	0x3
+ 36001 6537 91       		.byte	0x91
+ 36002 6538 8073     		.sleb128 -1664
+ 36003 653a 33       		.uleb128 0x33
+ 36004 653b 00000000 		.quad	.LBB1417
+ 36004      00000000 
+ 36005 6543 00000000 		.quad	.LBE1417
+ 36005      00000000 
+ 36006 654b 34       		.uleb128 0x34
+ 36007 654c C10E0000 		.long	0xec1
+ 36008 6550 03       		.byte	0x3
+ 36009 6551 76       		.byte	0x76
+ 36010 6552 E04D     		.sleb128 -6432
+ 36011 6554 31       		.uleb128 0x31
+ 36012 6555 CE0E0000 		.long	0xece
+ 36013 6559 00000000 		.quad	.LBB1418
+ 36013      00000000 
+ 36014 6561 00000000 		.quad	.LBE1418
+ 36014      00000000 
+ 36015 6569 02       		.byte	0x2
+ 36016 656a 1F06     		.value	0x61f
+ 36017 656c 95650000 		.long	0x6595
+ 36018 6570 32       		.uleb128 0x32
+ 36019 6571 E00E0000 		.long	0xee0
+ 36020 6575 03       		.byte	0x3
+ 36021 6576 91       		.byte	0x91
+ 36022 6577 9073     		.sleb128 -1648
+ 36023 6579 33       		.uleb128 0x33
+ 36024 657a 00000000 		.quad	.LBB1419
+ 36024      00000000 
+ 36025 6582 00000000 		.quad	.LBE1419
+ 36025      00000000 
+ 36026 658a 34       		.uleb128 0x34
+ 36027 658b EC0E0000 		.long	0xeec
+ 36028 658f 03       		.byte	0x3
+ 36029 6590 91       		.byte	0x91
+ 36030 6591 905A     		.sleb128 -4848
+ 36031 6593 00       		.byte	0x0
+ 36032 6594 00       		.byte	0x0
+ 36033 6595 31       		.uleb128 0x31
+ 36034 6596 CE0E0000 		.long	0xece
+ 36035 659a 00000000 		.quad	.LBB1420
+ 36035      00000000 
+ 36036 65a2 00000000 		.quad	.LBE1420
+ 36036      00000000 
+ 36037 65aa 02       		.byte	0x2
+ 36038 65ab 2006     		.value	0x620
+ 36039 65ad D6650000 		.long	0x65d6
+ 36040 65b1 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 972
+
+
+ 36041 65b2 E00E0000 		.long	0xee0
+ 36042 65b6 03       		.byte	0x3
+ 36043 65b7 91       		.byte	0x91
+ 36044 65b8 A073     		.sleb128 -1632
+ 36045 65ba 33       		.uleb128 0x33
+ 36046 65bb 00000000 		.quad	.LBB1421
+ 36046      00000000 
+ 36047 65c3 00000000 		.quad	.LBE1421
+ 36047      00000000 
+ 36048 65cb 34       		.uleb128 0x34
+ 36049 65cc EC0E0000 		.long	0xeec
+ 36050 65d0 03       		.byte	0x3
+ 36051 65d1 91       		.byte	0x91
+ 36052 65d2 A05A     		.sleb128 -4832
+ 36053 65d4 00       		.byte	0x0
+ 36054 65d5 00       		.byte	0x0
+ 36055 65d6 35       		.uleb128 0x35
+ 36056 65d7 CE0E0000 		.long	0xece
+ 36057 65db 00000000 		.quad	.LBB1422
+ 36057      00000000 
+ 36058 65e3 00000000 		.quad	.LBE1422
+ 36058      00000000 
+ 36059 65eb 02       		.byte	0x2
+ 36060 65ec 2106     		.value	0x621
+ 36061 65ee 32       		.uleb128 0x32
+ 36062 65ef E00E0000 		.long	0xee0
+ 36063 65f3 03       		.byte	0x3
+ 36064 65f4 91       		.byte	0x91
+ 36065 65f5 B073     		.sleb128 -1616
+ 36066 65f7 33       		.uleb128 0x33
+ 36067 65f8 00000000 		.quad	.LBB1423
+ 36067      00000000 
+ 36068 6600 00000000 		.quad	.LBE1423
+ 36068      00000000 
+ 36069 6608 34       		.uleb128 0x34
+ 36070 6609 EC0E0000 		.long	0xeec
+ 36071 660d 03       		.byte	0x3
+ 36072 660e 91       		.byte	0x91
+ 36073 660f B05A     		.sleb128 -4816
+ 36074 6611 00       		.byte	0x0
+ 36075 6612 00       		.byte	0x0
+ 36076 6613 00       		.byte	0x0
+ 36077 6614 00       		.byte	0x0
+ 36078 6615 31       		.uleb128 0x31
+ 36079 6616 D10B0000 		.long	0xbd1
+ 36080 661a 00000000 		.quad	.LBB1424
+ 36080      00000000 
+ 36081 6622 00000000 		.quad	.LBE1424
+ 36081      00000000 
+ 36082 662a 02       		.byte	0x2
+ 36083 662b 4207     		.value	0x742
+ 36084 662d BB6A0000 		.long	0x6abb
+ 36085 6631 32       		.uleb128 0x32
+ 36086 6632 EF0B0000 		.long	0xbef
+ 36087 6636 03       		.byte	0x3
+ 36088 6637 91       		.byte	0x91
+ 36089 6638 CC73     		.sleb128 -1588
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 973
+
+
+ 36090 663a 32       		.uleb128 0x32
+ 36091 663b E30B0000 		.long	0xbe3
+ 36092 663f 03       		.byte	0x3
+ 36093 6640 91       		.byte	0x91
+ 36094 6641 D073     		.sleb128 -1584
+ 36095 6643 33       		.uleb128 0x33
+ 36096 6644 00000000 		.quad	.LBB1425
+ 36096      00000000 
+ 36097 664c 00000000 		.quad	.LBE1425
+ 36097      00000000 
+ 36098 6654 34       		.uleb128 0x34
+ 36099 6655 FB0B0000 		.long	0xbfb
+ 36100 6659 03       		.byte	0x3
+ 36101 665a 76       		.byte	0x76
+ 36102 665b 804E     		.sleb128 -6400
+ 36103 665d 34       		.uleb128 0x34
+ 36104 665e 070C0000 		.long	0xc07
+ 36105 6662 03       		.byte	0x3
+ 36106 6663 76       		.byte	0x76
+ 36107 6664 F04D     		.sleb128 -6416
+ 36108 6666 31       		.uleb128 0x31
+ 36109 6667 500C0000 		.long	0xc50
+ 36110 666b 00000000 		.quad	.LBB1426
+ 36110      00000000 
+ 36111 6673 00000000 		.quad	.LBE1426
+ 36111      00000000 
+ 36112 667b 02       		.byte	0x2
+ 36113 667c 9106     		.value	0x691
+ 36114 667e B9660000 		.long	0x66b9
+ 36115 6682 32       		.uleb128 0x32
+ 36116 6683 7A0C0000 		.long	0xc7a
+ 36117 6687 03       		.byte	0x3
+ 36118 6688 91       		.byte	0x91
+ 36119 6689 E873     		.sleb128 -1560
+ 36120 668b 32       		.uleb128 0x32
+ 36121 668c 6E0C0000 		.long	0xc6e
+ 36122 6690 03       		.byte	0x3
+ 36123 6691 91       		.byte	0x91
+ 36124 6692 EC73     		.sleb128 -1556
+ 36125 6694 32       		.uleb128 0x32
+ 36126 6695 620C0000 		.long	0xc62
+ 36127 6699 03       		.byte	0x3
+ 36128 669a 91       		.byte	0x91
+ 36129 669b F073     		.sleb128 -1552
+ 36130 669d 33       		.uleb128 0x33
+ 36131 669e 00000000 		.quad	.LBB1427
+ 36131      00000000 
+ 36132 66a6 00000000 		.quad	.LBE1427
+ 36132      00000000 
+ 36133 66ae 34       		.uleb128 0x34
+ 36134 66af 860C0000 		.long	0xc86
+ 36135 66b3 03       		.byte	0x3
+ 36136 66b4 91       		.byte	0x91
+ 36137 66b5 805B     		.sleb128 -4736
+ 36138 66b7 00       		.byte	0x0
+ 36139 66b8 00       		.byte	0x0
+ 36140 66b9 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 974
+
+
+ 36141 66ba 910C0000 		.long	0xc91
+ 36142 66be 00000000 		.quad	.LBB1428
+ 36142      00000000 
+ 36143 66c6 00000000 		.quad	.LBE1428
+ 36143      00000000 
+ 36144 66ce 02       		.byte	0x2
+ 36145 66cf 9206     		.value	0x692
+ 36146 66d1 29690000 		.long	0x6929
+ 36147 66d5 32       		.uleb128 0x32
+ 36148 66d6 A30C0000 		.long	0xca3
+ 36149 66da 03       		.byte	0x3
+ 36150 66db 91       		.byte	0x91
+ 36151 66dc 8074     		.sleb128 -1536
+ 36152 66de 35       		.uleb128 0x35
+ 36153 66df B00C0000 		.long	0xcb0
+ 36154 66e3 00000000 		.quad	.LBB1430
+ 36154      00000000 
+ 36155 66eb 00000000 		.quad	.LBE1430
+ 36155      00000000 
+ 36156 66f3 02       		.byte	0x2
+ 36157 66f4 7D03     		.value	0x37d
+ 36158 66f6 32       		.uleb128 0x32
+ 36159 66f7 CE0C0000 		.long	0xcce
+ 36160 66fb 03       		.byte	0x3
+ 36161 66fc 91       		.byte	0x91
+ 36162 66fd 9874     		.sleb128 -1512
+ 36163 66ff 32       		.uleb128 0x32
+ 36164 6700 C20C0000 		.long	0xcc2
+ 36165 6704 03       		.byte	0x3
+ 36166 6705 91       		.byte	0x91
+ 36167 6706 A074     		.sleb128 -1504
+ 36168 6708 33       		.uleb128 0x33
+ 36169 6709 00000000 		.quad	.LBB1431
+ 36169      00000000 
+ 36170 6711 00000000 		.quad	.LBE1431
+ 36170      00000000 
+ 36171 6719 34       		.uleb128 0x34
+ 36172 671a DA0C0000 		.long	0xcda
+ 36173 671e 03       		.byte	0x3
+ 36174 671f 91       		.byte	0x91
+ 36175 6720 F074     		.sleb128 -1424
+ 36176 6722 34       		.uleb128 0x34
+ 36177 6723 E50C0000 		.long	0xce5
+ 36178 6727 03       		.byte	0x3
+ 36179 6728 91       		.byte	0x91
+ 36180 6729 E074     		.sleb128 -1440
+ 36181 672b 34       		.uleb128 0x34
+ 36182 672c F00C0000 		.long	0xcf0
+ 36183 6730 03       		.byte	0x3
+ 36184 6731 91       		.byte	0x91
+ 36185 6732 D074     		.sleb128 -1456
+ 36186 6734 34       		.uleb128 0x34
+ 36187 6735 FC0C0000 		.long	0xcfc
+ 36188 6739 03       		.byte	0x3
+ 36189 673a 91       		.byte	0x91
+ 36190 673b C074     		.sleb128 -1472
+ 36191 673d 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 975
+
+
+ 36192 673e 080D0000 		.long	0xd08
+ 36193 6742 03       		.byte	0x3
+ 36194 6743 91       		.byte	0x91
+ 36195 6744 BC74     		.sleb128 -1476
+ 36196 6746 31       		.uleb128 0x31
+ 36197 6747 1F0D0000 		.long	0xd1f
+ 36198 674b 00000000 		.quad	.LBB1432
+ 36198      00000000 
+ 36199 6753 00000000 		.quad	.LBE1432
+ 36199      00000000 
+ 36200 675b 02       		.byte	0x2
+ 36201 675c 5603     		.value	0x356
+ 36202 675e 75670000 		.long	0x6775
+ 36203 6762 32       		.uleb128 0x32
+ 36204 6763 3A0D0000 		.long	0xd3a
+ 36205 6767 03       		.byte	0x3
+ 36206 6768 91       		.byte	0x91
+ 36207 6769 8075     		.sleb128 -1408
+ 36208 676b 32       		.uleb128 0x32
+ 36209 676c 300D0000 		.long	0xd30
+ 36210 6770 03       		.byte	0x3
+ 36211 6771 91       		.byte	0x91
+ 36212 6772 9075     		.sleb128 -1392
+ 36213 6774 00       		.byte	0x0
+ 36214 6775 31       		.uleb128 0x31
+ 36215 6776 450D0000 		.long	0xd45
+ 36216 677a 00000000 		.quad	.LBB1434
+ 36216      00000000 
+ 36217 6782 00000000 		.quad	.LBE1434
+ 36217      00000000 
+ 36218 678a 02       		.byte	0x2
+ 36219 678b 5E03     		.value	0x35e
+ 36220 678d A4670000 		.long	0x67a4
+ 36221 6791 32       		.uleb128 0x32
+ 36222 6792 620D0000 		.long	0xd62
+ 36223 6796 03       		.byte	0x3
+ 36224 6797 91       		.byte	0x91
+ 36225 6798 A075     		.sleb128 -1376
+ 36226 679a 32       		.uleb128 0x32
+ 36227 679b 570D0000 		.long	0xd57
+ 36228 679f 03       		.byte	0x3
+ 36229 67a0 91       		.byte	0x91
+ 36230 67a1 B075     		.sleb128 -1360
+ 36231 67a3 00       		.byte	0x0
+ 36232 67a4 31       		.uleb128 0x31
+ 36233 67a5 6E0D0000 		.long	0xd6e
+ 36234 67a9 00000000 		.quad	.LBB1436
+ 36234      00000000 
+ 36235 67b1 00000000 		.quad	.LBE1436
+ 36235      00000000 
+ 36236 67b9 02       		.byte	0x2
+ 36237 67ba 6403     		.value	0x364
+ 36238 67bc 09680000 		.long	0x6809
+ 36239 67c0 32       		.uleb128 0x32
+ 36240 67c1 8C0D0000 		.long	0xd8c
+ 36241 67c5 03       		.byte	0x3
+ 36242 67c6 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 976
+
+
+ 36243 67c7 C075     		.sleb128 -1344
+ 36244 67c9 32       		.uleb128 0x32
+ 36245 67ca 800D0000 		.long	0xd80
+ 36246 67ce 03       		.byte	0x3
+ 36247 67cf 91       		.byte	0x91
+ 36248 67d0 D075     		.sleb128 -1328
+ 36249 67d2 33       		.uleb128 0x33
+ 36250 67d3 00000000 		.quad	.LBB1437
+ 36250      00000000 
+ 36251 67db 00000000 		.quad	.LBE1437
+ 36251      00000000 
+ 36252 67e3 34       		.uleb128 0x34
+ 36253 67e4 980D0000 		.long	0xd98
+ 36254 67e8 03       		.byte	0x3
+ 36255 67e9 91       		.byte	0x91
+ 36256 67ea B05B     		.sleb128 -4688
+ 36257 67ec 34       		.uleb128 0x34
+ 36258 67ed A40D0000 		.long	0xda4
+ 36259 67f1 03       		.byte	0x3
+ 36260 67f2 91       		.byte	0x91
+ 36261 67f3 A05B     		.sleb128 -4704
+ 36262 67f5 34       		.uleb128 0x34
+ 36263 67f6 AF0D0000 		.long	0xdaf
+ 36264 67fa 03       		.byte	0x3
+ 36265 67fb 91       		.byte	0x91
+ 36266 67fc 905B     		.sleb128 -4720
+ 36267 67fe 34       		.uleb128 0x34
+ 36268 67ff BB0D0000 		.long	0xdbb
+ 36269 6803 03       		.byte	0x3
+ 36270 6804 91       		.byte	0x91
+ 36271 6805 EC75     		.sleb128 -1300
+ 36272 6807 00       		.byte	0x0
+ 36273 6808 00       		.byte	0x0
+ 36274 6809 31       		.uleb128 0x31
+ 36275 680a C70D0000 		.long	0xdc7
+ 36276 680e 00000000 		.quad	.LBB1438
+ 36276      00000000 
+ 36277 6816 00000000 		.quad	.LBE1438
+ 36277      00000000 
+ 36278 681e 02       		.byte	0x2
+ 36279 681f 6603     		.value	0x366
+ 36280 6821 38680000 		.long	0x6838
+ 36281 6825 32       		.uleb128 0x32
+ 36282 6826 E20D0000 		.long	0xde2
+ 36283 682a 03       		.byte	0x3
+ 36284 682b 91       		.byte	0x91
+ 36285 682c F075     		.sleb128 -1296
+ 36286 682e 32       		.uleb128 0x32
+ 36287 682f D80D0000 		.long	0xdd8
+ 36288 6833 03       		.byte	0x3
+ 36289 6834 91       		.byte	0x91
+ 36290 6835 8076     		.sleb128 -1280
+ 36291 6837 00       		.byte	0x0
+ 36292 6838 31       		.uleb128 0x31
+ 36293 6839 6E0D0000 		.long	0xd6e
+ 36294 683d 00000000 		.quad	.LBB1440
+ 36294      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 977
+
+
+ 36295 6845 00000000 		.quad	.LBE1440
+ 36295      00000000 
+ 36296 684d 02       		.byte	0x2
+ 36297 684e 6803     		.value	0x368
+ 36298 6850 9D680000 		.long	0x689d
+ 36299 6854 32       		.uleb128 0x32
+ 36300 6855 8C0D0000 		.long	0xd8c
+ 36301 6859 03       		.byte	0x3
+ 36302 685a 91       		.byte	0x91
+ 36303 685b 9076     		.sleb128 -1264
+ 36304 685d 32       		.uleb128 0x32
+ 36305 685e 800D0000 		.long	0xd80
+ 36306 6862 03       		.byte	0x3
+ 36307 6863 91       		.byte	0x91
+ 36308 6864 A076     		.sleb128 -1248
+ 36309 6866 33       		.uleb128 0x33
+ 36310 6867 00000000 		.quad	.LBB1441
+ 36310      00000000 
+ 36311 686f 00000000 		.quad	.LBE1441
+ 36311      00000000 
+ 36312 6877 34       		.uleb128 0x34
+ 36313 6878 980D0000 		.long	0xd98
+ 36314 687c 03       		.byte	0x3
+ 36315 687d 91       		.byte	0x91
+ 36316 687e E05B     		.sleb128 -4640
+ 36317 6880 34       		.uleb128 0x34
+ 36318 6881 A40D0000 		.long	0xda4
+ 36319 6885 03       		.byte	0x3
+ 36320 6886 91       		.byte	0x91
+ 36321 6887 D05B     		.sleb128 -4656
+ 36322 6889 34       		.uleb128 0x34
+ 36323 688a AF0D0000 		.long	0xdaf
+ 36324 688e 03       		.byte	0x3
+ 36325 688f 91       		.byte	0x91
+ 36326 6890 C05B     		.sleb128 -4672
+ 36327 6892 34       		.uleb128 0x34
+ 36328 6893 BB0D0000 		.long	0xdbb
+ 36329 6897 03       		.byte	0x3
+ 36330 6898 91       		.byte	0x91
+ 36331 6899 BC76     		.sleb128 -1220
+ 36332 689b 00       		.byte	0x0
+ 36333 689c 00       		.byte	0x0
+ 36334 689d 31       		.uleb128 0x31
+ 36335 689e C70D0000 		.long	0xdc7
+ 36336 68a2 00000000 		.quad	.LBB1442
+ 36336      00000000 
+ 36337 68aa 00000000 		.quad	.LBE1442
+ 36337      00000000 
+ 36338 68b2 02       		.byte	0x2
+ 36339 68b3 6A03     		.value	0x36a
+ 36340 68b5 CC680000 		.long	0x68cc
+ 36341 68b9 32       		.uleb128 0x32
+ 36342 68ba E20D0000 		.long	0xde2
+ 36343 68be 03       		.byte	0x3
+ 36344 68bf 91       		.byte	0x91
+ 36345 68c0 C076     		.sleb128 -1216
+ 36346 68c2 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 978
+
+
+ 36347 68c3 D80D0000 		.long	0xdd8
+ 36348 68c7 03       		.byte	0x3
+ 36349 68c8 91       		.byte	0x91
+ 36350 68c9 D076     		.sleb128 -1200
+ 36351 68cb 00       		.byte	0x0
+ 36352 68cc 31       		.uleb128 0x31
+ 36353 68cd ED0D0000 		.long	0xded
+ 36354 68d1 00000000 		.quad	.LBB1444
+ 36354      00000000 
+ 36355 68d9 00000000 		.quad	.LBE1444
+ 36355      00000000 
+ 36356 68e1 02       		.byte	0x2
+ 36357 68e2 6C03     		.value	0x36c
+ 36358 68e4 FB680000 		.long	0x68fb
+ 36359 68e8 32       		.uleb128 0x32
+ 36360 68e9 0A0E0000 		.long	0xe0a
+ 36361 68ed 03       		.byte	0x3
+ 36362 68ee 91       		.byte	0x91
+ 36363 68ef E076     		.sleb128 -1184
+ 36364 68f1 32       		.uleb128 0x32
+ 36365 68f2 FF0D0000 		.long	0xdff
+ 36366 68f6 03       		.byte	0x3
+ 36367 68f7 91       		.byte	0x91
+ 36368 68f8 F076     		.sleb128 -1168
+ 36369 68fa 00       		.byte	0x0
+ 36370 68fb 35       		.uleb128 0x35
+ 36371 68fc 1F0D0000 		.long	0xd1f
+ 36372 6900 00000000 		.quad	.LBB1446
+ 36372      00000000 
+ 36373 6908 00000000 		.quad	.LBE1446
+ 36373      00000000 
+ 36374 6910 02       		.byte	0x2
+ 36375 6911 6E03     		.value	0x36e
+ 36376 6913 32       		.uleb128 0x32
+ 36377 6914 3A0D0000 		.long	0xd3a
+ 36378 6918 03       		.byte	0x3
+ 36379 6919 91       		.byte	0x91
+ 36380 691a 8077     		.sleb128 -1152
+ 36381 691c 32       		.uleb128 0x32
+ 36382 691d 300D0000 		.long	0xd30
+ 36383 6921 03       		.byte	0x3
+ 36384 6922 91       		.byte	0x91
+ 36385 6923 9077     		.sleb128 -1136
+ 36386 6925 00       		.byte	0x0
+ 36387 6926 00       		.byte	0x0
+ 36388 6927 00       		.byte	0x0
+ 36389 6928 00       		.byte	0x0
+ 36390 6929 36       		.uleb128 0x36
+ 36391 692a 00000000 		.quad	.LBB1448
+ 36391      00000000 
+ 36392 6932 00000000 		.quad	.LBE1448
+ 36392      00000000 
+ 36393 693a 48690000 		.long	0x6948
+ 36394 693e 34       		.uleb128 0x34
+ 36395 693f 180C0000 		.long	0xc18
+ 36396 6943 03       		.byte	0x3
+ 36397 6944 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 979
+
+
+ 36398 6945 F05A     		.sleb128 -4752
+ 36399 6947 00       		.byte	0x0
+ 36400 6948 31       		.uleb128 0x31
+ 36401 6949 160E0000 		.long	0xe16
+ 36402 694d 00000000 		.quad	.LBB1449
+ 36402      00000000 
+ 36403 6955 00000000 		.quad	.LBE1449
+ 36403      00000000 
+ 36404 695d 02       		.byte	0x2
+ 36405 695e 9406     		.value	0x694
+ 36406 6960 F0690000 		.long	0x69f0
+ 36407 6964 32       		.uleb128 0x32
+ 36408 6965 280E0000 		.long	0xe28
+ 36409 6969 03       		.byte	0x3
+ 36410 696a 91       		.byte	0x91
+ 36411 696b A077     		.sleb128 -1120
+ 36412 696d 33       		.uleb128 0x33
+ 36413 696e 00000000 		.quad	.LBB1450
+ 36413      00000000 
+ 36414 6976 00000000 		.quad	.LBE1450
+ 36414      00000000 
+ 36415 697e 34       		.uleb128 0x34
+ 36416 697f 340E0000 		.long	0xe34
+ 36417 6983 09       		.byte	0x9
+ 36418 6984 03       		.byte	0x3
+ 36419 6985 00000000 		.quad	ShiftRowTable.6768
+ 36419      00000000 
+ 36420 698d 35       		.uleb128 0x35
+ 36421 698e 6E0D0000 		.long	0xd6e
+ 36422 6992 00000000 		.quad	.LBB1451
+ 36422      00000000 
+ 36423 699a 00000000 		.quad	.LBE1451
+ 36423      00000000 
+ 36424 69a2 02       		.byte	0x2
+ 36425 69a3 9B02     		.value	0x29b
+ 36426 69a5 32       		.uleb128 0x32
+ 36427 69a6 8C0D0000 		.long	0xd8c
+ 36428 69aa 03       		.byte	0x3
+ 36429 69ab 91       		.byte	0x91
+ 36430 69ac B077     		.sleb128 -1104
+ 36431 69ae 32       		.uleb128 0x32
+ 36432 69af 800D0000 		.long	0xd80
+ 36433 69b3 03       		.byte	0x3
+ 36434 69b4 91       		.byte	0x91
+ 36435 69b5 C077     		.sleb128 -1088
+ 36436 69b7 33       		.uleb128 0x33
+ 36437 69b8 00000000 		.quad	.LBB1452
+ 36437      00000000 
+ 36438 69c0 00000000 		.quad	.LBE1452
+ 36438      00000000 
+ 36439 69c8 34       		.uleb128 0x34
+ 36440 69c9 980D0000 		.long	0xd98
+ 36441 69cd 03       		.byte	0x3
+ 36442 69ce 91       		.byte	0x91
+ 36443 69cf 905C     		.sleb128 -4592
+ 36444 69d1 34       		.uleb128 0x34
+ 36445 69d2 A40D0000 		.long	0xda4
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 980
+
+
+ 36446 69d6 03       		.byte	0x3
+ 36447 69d7 91       		.byte	0x91
+ 36448 69d8 805C     		.sleb128 -4608
+ 36449 69da 34       		.uleb128 0x34
+ 36450 69db AF0D0000 		.long	0xdaf
+ 36451 69df 03       		.byte	0x3
+ 36452 69e0 91       		.byte	0x91
+ 36453 69e1 F05B     		.sleb128 -4624
+ 36454 69e3 34       		.uleb128 0x34
+ 36455 69e4 BB0D0000 		.long	0xdbb
+ 36456 69e8 03       		.byte	0x3
+ 36457 69e9 91       		.byte	0x91
+ 36458 69ea DC77     		.sleb128 -1060
+ 36459 69ec 00       		.byte	0x0
+ 36460 69ed 00       		.byte	0x0
+ 36461 69ee 00       		.byte	0x0
+ 36462 69ef 00       		.byte	0x0
+ 36463 69f0 36       		.uleb128 0x36
+ 36464 69f1 00000000 		.quad	.LBB1453
+ 36464      00000000 
+ 36465 69f9 00000000 		.quad	.LBE1453
+ 36465      00000000 
+ 36466 6a01 0F6A0000 		.long	0x6a0f
+ 36467 6a05 34       		.uleb128 0x34
+ 36468 6a06 280C0000 		.long	0xc28
+ 36469 6a0a 03       		.byte	0x3
+ 36470 6a0b 91       		.byte	0x91
+ 36471 6a0c E05A     		.sleb128 -4768
+ 36472 6a0e 00       		.byte	0x0
+ 36473 6a0f 31       		.uleb128 0x31
+ 36474 6a10 520E0000 		.long	0xe52
+ 36475 6a14 00000000 		.quad	.LBB1454
+ 36475      00000000 
+ 36476 6a1c 00000000 		.quad	.LBE1454
+ 36476      00000000 
+ 36477 6a24 02       		.byte	0x2
+ 36478 6a25 9606     		.value	0x696
+ 36479 6a27 3E6A0000 		.long	0x6a3e
+ 36480 6a2b 32       		.uleb128 0x32
+ 36481 6a2c 6D0E0000 		.long	0xe6d
+ 36482 6a30 03       		.byte	0x3
+ 36483 6a31 91       		.byte	0x91
+ 36484 6a32 E077     		.sleb128 -1056
+ 36485 6a34 32       		.uleb128 0x32
+ 36486 6a35 630E0000 		.long	0xe63
+ 36487 6a39 03       		.byte	0x3
+ 36488 6a3a 91       		.byte	0x91
+ 36489 6a3b F077     		.sleb128 -1040
+ 36490 6a3d 00       		.byte	0x0
+ 36491 6a3e 36       		.uleb128 0x36
+ 36492 6a3f 00000000 		.quad	.LBB1456
+ 36492      00000000 
+ 36493 6a47 00000000 		.quad	.LBE1456
+ 36493      00000000 
+ 36494 6a4f 5D6A0000 		.long	0x6a5d
+ 36495 6a53 34       		.uleb128 0x34
+ 36496 6a54 380C0000 		.long	0xc38
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 981
+
+
+ 36497 6a58 03       		.byte	0x3
+ 36498 6a59 91       		.byte	0x91
+ 36499 6a5a D05A     		.sleb128 -4784
+ 36500 6a5c 00       		.byte	0x0
+ 36501 6a5d 31       		.uleb128 0x31
+ 36502 6a5e 780E0000 		.long	0xe78
+ 36503 6a62 00000000 		.quad	.LBB1457
+ 36503      00000000 
+ 36504 6a6a 00000000 		.quad	.LBE1457
+ 36504      00000000 
+ 36505 6a72 02       		.byte	0x2
+ 36506 6a73 9806     		.value	0x698
+ 36507 6a75 9E6A0000 		.long	0x6a9e
+ 36508 6a79 32       		.uleb128 0x32
+ 36509 6a7a 8A0E0000 		.long	0xe8a
+ 36510 6a7e 03       		.byte	0x3
+ 36511 6a7f 91       		.byte	0x91
+ 36512 6a80 8078     		.sleb128 -1024
+ 36513 6a82 33       		.uleb128 0x33
+ 36514 6a83 00000000 		.quad	.LBB1458
+ 36514      00000000 
+ 36515 6a8b 00000000 		.quad	.LBE1458
+ 36515      00000000 
+ 36516 6a93 34       		.uleb128 0x34
+ 36517 6a94 960E0000 		.long	0xe96
+ 36518 6a98 03       		.byte	0x3
+ 36519 6a99 91       		.byte	0x91
+ 36520 6a9a A05C     		.sleb128 -4576
+ 36521 6a9c 00       		.byte	0x0
+ 36522 6a9d 00       		.byte	0x0
+ 36523 6a9e 33       		.uleb128 0x33
+ 36524 6a9f 00000000 		.quad	.LBB1459
+ 36524      00000000 
+ 36525 6aa7 00000000 		.quad	.LBE1459
+ 36525      00000000 
+ 36526 6aaf 34       		.uleb128 0x34
+ 36527 6ab0 440C0000 		.long	0xc44
+ 36528 6ab4 03       		.byte	0x3
+ 36529 6ab5 91       		.byte	0x91
+ 36530 6ab6 C05A     		.sleb128 -4800
+ 36531 6ab8 00       		.byte	0x0
+ 36532 6ab9 00       		.byte	0x0
+ 36533 6aba 00       		.byte	0x0
+ 36534 6abb 31       		.uleb128 0x31
+ 36535 6abc 780E0000 		.long	0xe78
+ 36536 6ac0 00000000 		.quad	.LBB1460
+ 36536      00000000 
+ 36537 6ac8 00000000 		.quad	.LBE1460
+ 36537      00000000 
+ 36538 6ad0 02       		.byte	0x2
+ 36539 6ad1 4507     		.value	0x745
+ 36540 6ad3 FC6A0000 		.long	0x6afc
+ 36541 6ad7 32       		.uleb128 0x32
+ 36542 6ad8 8A0E0000 		.long	0xe8a
+ 36543 6adc 03       		.byte	0x3
+ 36544 6add 91       		.byte	0x91
+ 36545 6ade 9078     		.sleb128 -1008
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 982
+
+
+ 36546 6ae0 33       		.uleb128 0x33
+ 36547 6ae1 00000000 		.quad	.LBB1461
+ 36547      00000000 
+ 36548 6ae9 00000000 		.quad	.LBE1461
+ 36548      00000000 
+ 36549 6af1 34       		.uleb128 0x34
+ 36550 6af2 960E0000 		.long	0xe96
+ 36551 6af6 03       		.byte	0x3
+ 36552 6af7 91       		.byte	0x91
+ 36553 6af8 B05C     		.sleb128 -4560
+ 36554 6afa 00       		.byte	0x0
+ 36555 6afb 00       		.byte	0x0
+ 36556 6afc 31       		.uleb128 0x31
+ 36557 6afd C5480000 		.long	0x48c5
+ 36558 6b01 00000000 		.quad	.LBB1462
+ 36558      00000000 
+ 36559 6b09 00000000 		.quad	.LBE1462
+ 36559      00000000 
+ 36560 6b11 02       		.byte	0x2
+ 36561 6b12 4D07     		.value	0x74d
+ 36562 6b14 C46B0000 		.long	0x6bc4
+ 36563 6b18 32       		.uleb128 0x32
+ 36564 6b19 E3480000 		.long	0x48e3
+ 36565 6b1d 03       		.byte	0x3
+ 36566 6b1e 91       		.byte	0x91
+ 36567 6b1f AC78     		.sleb128 -980
+ 36568 6b21 32       		.uleb128 0x32
+ 36569 6b22 D7480000 		.long	0x48d7
+ 36570 6b26 03       		.byte	0x3
+ 36571 6b27 91       		.byte	0x91
+ 36572 6b28 B078     		.sleb128 -976
+ 36573 6b2a 33       		.uleb128 0x33
+ 36574 6b2b 00000000 		.quad	.LBB1463
+ 36574      00000000 
+ 36575 6b33 00000000 		.quad	.LBE1463
+ 36575      00000000 
+ 36576 6b3b 34       		.uleb128 0x34
+ 36577 6b3c EF480000 		.long	0x48ef
+ 36578 6b40 03       		.byte	0x3
+ 36579 6b41 91       		.byte	0x91
+ 36580 6b42 D05C     		.sleb128 -4528
+ 36581 6b44 34       		.uleb128 0x34
+ 36582 6b45 F9480000 		.long	0x48f9
+ 36583 6b49 03       		.byte	0x3
+ 36584 6b4a 91       		.byte	0x91
+ 36585 6b4b D078     		.sleb128 -944
+ 36586 6b4d 34       		.uleb128 0x34
+ 36587 6b4e 05490000 		.long	0x4905
+ 36588 6b52 03       		.byte	0x3
+ 36589 6b53 91       		.byte	0x91
+ 36590 6b54 CC78     		.sleb128 -948
+ 36591 6b56 31       		.uleb128 0x31
+ 36592 6b57 12490000 		.long	0x4912
+ 36593 6b5b 00000000 		.quad	.LBB1464
+ 36593      00000000 
+ 36594 6b63 00000000 		.quad	.LBE1464
+ 36594      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 983
+
+
+ 36595 6b6b 02       		.byte	0x2
+ 36596 6b6c 5F06     		.value	0x65f
+ 36597 6b6e A06B0000 		.long	0x6ba0
+ 36598 6b72 32       		.uleb128 0x32
+ 36599 6b73 24490000 		.long	0x4924
+ 36600 6b77 03       		.byte	0x3
+ 36601 6b78 91       		.byte	0x91
+ 36602 6b79 D478     		.sleb128 -940
+ 36603 6b7b 33       		.uleb128 0x33
+ 36604 6b7c 00000000 		.quad	.LBB1465
+ 36604      00000000 
+ 36605 6b84 00000000 		.quad	.LBE1465
+ 36605      00000000 
+ 36606 6b8c 34       		.uleb128 0x34
+ 36607 6b8d 2E490000 		.long	0x492e
+ 36608 6b91 03       		.byte	0x3
+ 36609 6b92 91       		.byte	0x91
+ 36610 6b93 C05C     		.sleb128 -4544
+ 36611 6b95 34       		.uleb128 0x34
+ 36612 6b96 3A490000 		.long	0x493a
+ 36613 6b9a 03       		.byte	0x3
+ 36614 6b9b 91       		.byte	0x91
+ 36615 6b9c D878     		.sleb128 -936
+ 36616 6b9e 00       		.byte	0x0
+ 36617 6b9f 00       		.byte	0x0
+ 36618 6ba0 35       		.uleb128 0x35
+ 36619 6ba1 46490000 		.long	0x4946
+ 36620 6ba5 00000000 		.quad	.LBB1466
+ 36620      00000000 
+ 36621 6bad 00000000 		.quad	.LBE1466
+ 36621      00000000 
+ 36622 6bb5 02       		.byte	0x2
+ 36623 6bb6 6006     		.value	0x660
+ 36624 6bb8 32       		.uleb128 0x32
+ 36625 6bb9 58490000 		.long	0x4958
+ 36626 6bbd 03       		.byte	0x3
+ 36627 6bbe 91       		.byte	0x91
+ 36628 6bbf DC78     		.sleb128 -932
+ 36629 6bc1 00       		.byte	0x0
+ 36630 6bc2 00       		.byte	0x0
+ 36631 6bc3 00       		.byte	0x0
+ 36632 6bc4 31       		.uleb128 0x31
+ 36633 6bc5 A30E0000 		.long	0xea3
+ 36634 6bc9 00000000 		.quad	.LBB1468
+ 36634      00000000 
+ 36635 6bd1 00000000 		.quad	.LBE1468
+ 36635      00000000 
+ 36636 6bd9 02       		.byte	0x2
+ 36637 6bda 4F07     		.value	0x74f
+ 36638 6bdc C46C0000 		.long	0x6cc4
+ 36639 6be0 32       		.uleb128 0x32
+ 36640 6be1 B50E0000 		.long	0xeb5
+ 36641 6be5 03       		.byte	0x3
+ 36642 6be6 91       		.byte	0x91
+ 36643 6be7 E078     		.sleb128 -928
+ 36644 6be9 33       		.uleb128 0x33
+ 36645 6bea 00000000 		.quad	.LBB1469
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 984
+
+
+ 36645      00000000 
+ 36646 6bf2 00000000 		.quad	.LBE1469
+ 36646      00000000 
+ 36647 6bfa 34       		.uleb128 0x34
+ 36648 6bfb C10E0000 		.long	0xec1
+ 36649 6bff 03       		.byte	0x3
+ 36650 6c00 76       		.byte	0x76
+ 36651 6c01 A04E     		.sleb128 -6368
+ 36652 6c03 31       		.uleb128 0x31
+ 36653 6c04 CE0E0000 		.long	0xece
+ 36654 6c08 00000000 		.quad	.LBB1470
+ 36654      00000000 
+ 36655 6c10 00000000 		.quad	.LBE1470
+ 36655      00000000 
+ 36656 6c18 02       		.byte	0x2
+ 36657 6c19 1F06     		.value	0x61f
+ 36658 6c1b 446C0000 		.long	0x6c44
+ 36659 6c1f 32       		.uleb128 0x32
+ 36660 6c20 E00E0000 		.long	0xee0
+ 36661 6c24 03       		.byte	0x3
+ 36662 6c25 91       		.byte	0x91
+ 36663 6c26 F078     		.sleb128 -912
+ 36664 6c28 33       		.uleb128 0x33
+ 36665 6c29 00000000 		.quad	.LBB1471
+ 36665      00000000 
+ 36666 6c31 00000000 		.quad	.LBE1471
+ 36666      00000000 
+ 36667 6c39 34       		.uleb128 0x34
+ 36668 6c3a EC0E0000 		.long	0xeec
+ 36669 6c3e 03       		.byte	0x3
+ 36670 6c3f 91       		.byte	0x91
+ 36671 6c40 E05C     		.sleb128 -4512
+ 36672 6c42 00       		.byte	0x0
+ 36673 6c43 00       		.byte	0x0
+ 36674 6c44 31       		.uleb128 0x31
+ 36675 6c45 CE0E0000 		.long	0xece
+ 36676 6c49 00000000 		.quad	.LBB1472
+ 36676      00000000 
+ 36677 6c51 00000000 		.quad	.LBE1472
+ 36677      00000000 
+ 36678 6c59 02       		.byte	0x2
+ 36679 6c5a 2006     		.value	0x620
+ 36680 6c5c 856C0000 		.long	0x6c85
+ 36681 6c60 32       		.uleb128 0x32
+ 36682 6c61 E00E0000 		.long	0xee0
+ 36683 6c65 03       		.byte	0x3
+ 36684 6c66 91       		.byte	0x91
+ 36685 6c67 8079     		.sleb128 -896
+ 36686 6c69 33       		.uleb128 0x33
+ 36687 6c6a 00000000 		.quad	.LBB1473
+ 36687      00000000 
+ 36688 6c72 00000000 		.quad	.LBE1473
+ 36688      00000000 
+ 36689 6c7a 34       		.uleb128 0x34
+ 36690 6c7b EC0E0000 		.long	0xeec
+ 36691 6c7f 03       		.byte	0x3
+ 36692 6c80 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 985
+
+
+ 36693 6c81 F05C     		.sleb128 -4496
+ 36694 6c83 00       		.byte	0x0
+ 36695 6c84 00       		.byte	0x0
+ 36696 6c85 35       		.uleb128 0x35
+ 36697 6c86 CE0E0000 		.long	0xece
+ 36698 6c8a 00000000 		.quad	.LBB1474
+ 36698      00000000 
+ 36699 6c92 00000000 		.quad	.LBE1474
+ 36699      00000000 
+ 36700 6c9a 02       		.byte	0x2
+ 36701 6c9b 2106     		.value	0x621
+ 36702 6c9d 32       		.uleb128 0x32
+ 36703 6c9e E00E0000 		.long	0xee0
+ 36704 6ca2 03       		.byte	0x3
+ 36705 6ca3 91       		.byte	0x91
+ 36706 6ca4 9079     		.sleb128 -880
+ 36707 6ca6 33       		.uleb128 0x33
+ 36708 6ca7 00000000 		.quad	.LBB1475
+ 36708      00000000 
+ 36709 6caf 00000000 		.quad	.LBE1475
+ 36709      00000000 
+ 36710 6cb7 34       		.uleb128 0x34
+ 36711 6cb8 EC0E0000 		.long	0xeec
+ 36712 6cbc 03       		.byte	0x3
+ 36713 6cbd 91       		.byte	0x91
+ 36714 6cbe 805D     		.sleb128 -4480
+ 36715 6cc0 00       		.byte	0x0
+ 36716 6cc1 00       		.byte	0x0
+ 36717 6cc2 00       		.byte	0x0
+ 36718 6cc3 00       		.byte	0x0
+ 36719 6cc4 31       		.uleb128 0x31
+ 36720 6cc5 A30E0000 		.long	0xea3
+ 36721 6cc9 00000000 		.quad	.LBB1476
+ 36721      00000000 
+ 36722 6cd1 00000000 		.quad	.LBE1476
+ 36722      00000000 
+ 36723 6cd9 02       		.byte	0x2
+ 36724 6cda 5007     		.value	0x750
+ 36725 6cdc C46D0000 		.long	0x6dc4
+ 36726 6ce0 32       		.uleb128 0x32
+ 36727 6ce1 B50E0000 		.long	0xeb5
+ 36728 6ce5 03       		.byte	0x3
+ 36729 6ce6 91       		.byte	0x91
+ 36730 6ce7 A079     		.sleb128 -864
+ 36731 6ce9 33       		.uleb128 0x33
+ 36732 6cea 00000000 		.quad	.LBB1477
+ 36732      00000000 
+ 36733 6cf2 00000000 		.quad	.LBE1477
+ 36733      00000000 
+ 36734 6cfa 34       		.uleb128 0x34
+ 36735 6cfb C10E0000 		.long	0xec1
+ 36736 6cff 03       		.byte	0x3
+ 36737 6d00 76       		.byte	0x76
+ 36738 6d01 B04E     		.sleb128 -6352
+ 36739 6d03 31       		.uleb128 0x31
+ 36740 6d04 CE0E0000 		.long	0xece
+ 36741 6d08 00000000 		.quad	.LBB1478
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 986
+
+
+ 36741      00000000 
+ 36742 6d10 00000000 		.quad	.LBE1478
+ 36742      00000000 
+ 36743 6d18 02       		.byte	0x2
+ 36744 6d19 1F06     		.value	0x61f
+ 36745 6d1b 446D0000 		.long	0x6d44
+ 36746 6d1f 32       		.uleb128 0x32
+ 36747 6d20 E00E0000 		.long	0xee0
+ 36748 6d24 03       		.byte	0x3
+ 36749 6d25 91       		.byte	0x91
+ 36750 6d26 B079     		.sleb128 -848
+ 36751 6d28 33       		.uleb128 0x33
+ 36752 6d29 00000000 		.quad	.LBB1479
+ 36752      00000000 
+ 36753 6d31 00000000 		.quad	.LBE1479
+ 36753      00000000 
+ 36754 6d39 34       		.uleb128 0x34
+ 36755 6d3a EC0E0000 		.long	0xeec
+ 36756 6d3e 03       		.byte	0x3
+ 36757 6d3f 91       		.byte	0x91
+ 36758 6d40 905D     		.sleb128 -4464
+ 36759 6d42 00       		.byte	0x0
+ 36760 6d43 00       		.byte	0x0
+ 36761 6d44 31       		.uleb128 0x31
+ 36762 6d45 CE0E0000 		.long	0xece
+ 36763 6d49 00000000 		.quad	.LBB1480
+ 36763      00000000 
+ 36764 6d51 00000000 		.quad	.LBE1480
+ 36764      00000000 
+ 36765 6d59 02       		.byte	0x2
+ 36766 6d5a 2006     		.value	0x620
+ 36767 6d5c 856D0000 		.long	0x6d85
+ 36768 6d60 32       		.uleb128 0x32
+ 36769 6d61 E00E0000 		.long	0xee0
+ 36770 6d65 03       		.byte	0x3
+ 36771 6d66 91       		.byte	0x91
+ 36772 6d67 C079     		.sleb128 -832
+ 36773 6d69 33       		.uleb128 0x33
+ 36774 6d6a 00000000 		.quad	.LBB1481
+ 36774      00000000 
+ 36775 6d72 00000000 		.quad	.LBE1481
+ 36775      00000000 
+ 36776 6d7a 34       		.uleb128 0x34
+ 36777 6d7b EC0E0000 		.long	0xeec
+ 36778 6d7f 03       		.byte	0x3
+ 36779 6d80 91       		.byte	0x91
+ 36780 6d81 A05D     		.sleb128 -4448
+ 36781 6d83 00       		.byte	0x0
+ 36782 6d84 00       		.byte	0x0
+ 36783 6d85 35       		.uleb128 0x35
+ 36784 6d86 CE0E0000 		.long	0xece
+ 36785 6d8a 00000000 		.quad	.LBB1482
+ 36785      00000000 
+ 36786 6d92 00000000 		.quad	.LBE1482
+ 36786      00000000 
+ 36787 6d9a 02       		.byte	0x2
+ 36788 6d9b 2106     		.value	0x621
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 987
+
+
+ 36789 6d9d 32       		.uleb128 0x32
+ 36790 6d9e E00E0000 		.long	0xee0
+ 36791 6da2 03       		.byte	0x3
+ 36792 6da3 91       		.byte	0x91
+ 36793 6da4 D079     		.sleb128 -816
+ 36794 6da6 33       		.uleb128 0x33
+ 36795 6da7 00000000 		.quad	.LBB1483
+ 36795      00000000 
+ 36796 6daf 00000000 		.quad	.LBE1483
+ 36796      00000000 
+ 36797 6db7 34       		.uleb128 0x34
+ 36798 6db8 EC0E0000 		.long	0xeec
+ 36799 6dbc 03       		.byte	0x3
+ 36800 6dbd 91       		.byte	0x91
+ 36801 6dbe B05D     		.sleb128 -4432
+ 36802 6dc0 00       		.byte	0x0
+ 36803 6dc1 00       		.byte	0x0
+ 36804 6dc2 00       		.byte	0x0
+ 36805 6dc3 00       		.byte	0x0
+ 36806 6dc4 31       		.uleb128 0x31
+ 36807 6dc5 780E0000 		.long	0xe78
+ 36808 6dc9 00000000 		.quad	.LBB1484
+ 36808      00000000 
+ 36809 6dd1 00000000 		.quad	.LBE1484
+ 36809      00000000 
+ 36810 6dd9 02       		.byte	0x2
+ 36811 6dda 5207     		.value	0x752
+ 36812 6ddc 056E0000 		.long	0x6e05
+ 36813 6de0 32       		.uleb128 0x32
+ 36814 6de1 8A0E0000 		.long	0xe8a
+ 36815 6de5 03       		.byte	0x3
+ 36816 6de6 91       		.byte	0x91
+ 36817 6de7 E079     		.sleb128 -800
+ 36818 6de9 33       		.uleb128 0x33
+ 36819 6dea 00000000 		.quad	.LBB1485
+ 36819      00000000 
+ 36820 6df2 00000000 		.quad	.LBE1485
+ 36820      00000000 
+ 36821 6dfa 34       		.uleb128 0x34
+ 36822 6dfb 960E0000 		.long	0xe96
+ 36823 6dff 03       		.byte	0x3
+ 36824 6e00 91       		.byte	0x91
+ 36825 6e01 C05D     		.sleb128 -4416
+ 36826 6e03 00       		.byte	0x0
+ 36827 6e04 00       		.byte	0x0
+ 36828 6e05 31       		.uleb128 0x31
+ 36829 6e06 63490000 		.long	0x4963
+ 36830 6e0a 00000000 		.quad	.LBB1486
+ 36830      00000000 
+ 36831 6e12 00000000 		.quad	.LBE1486
+ 36831      00000000 
+ 36832 6e1a 02       		.byte	0x2
+ 36833 6e1b 5407     		.value	0x754
+ 36834 6e1d 586E0000 		.long	0x6e58
+ 36835 6e21 32       		.uleb128 0x32
+ 36836 6e22 7F490000 		.long	0x497f
+ 36837 6e26 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 988
+
+
+ 36838 6e27 91       		.byte	0x91
+ 36839 6e28 F079     		.sleb128 -784
+ 36840 6e2a 32       		.uleb128 0x32
+ 36841 6e2b 75490000 		.long	0x4975
+ 36842 6e2f 03       		.byte	0x3
+ 36843 6e30 91       		.byte	0x91
+ 36844 6e31 807A     		.sleb128 -768
+ 36845 6e33 33       		.uleb128 0x33
+ 36846 6e34 00000000 		.quad	.LBB1487
+ 36846      00000000 
+ 36847 6e3c 00000000 		.quad	.LBE1487
+ 36847      00000000 
+ 36848 6e44 34       		.uleb128 0x34
+ 36849 6e45 89490000 		.long	0x4989
+ 36850 6e49 03       		.byte	0x3
+ 36851 6e4a 91       		.byte	0x91
+ 36852 6e4b E05D     		.sleb128 -4384
+ 36853 6e4d 34       		.uleb128 0x34
+ 36854 6e4e 94490000 		.long	0x4994
+ 36855 6e52 03       		.byte	0x3
+ 36856 6e53 91       		.byte	0x91
+ 36857 6e54 D05D     		.sleb128 -4400
+ 36858 6e56 00       		.byte	0x0
+ 36859 6e57 00       		.byte	0x0
+ 36860 6e58 31       		.uleb128 0x31
+ 36861 6e59 A0490000 		.long	0x49a0
+ 36862 6e5d 00000000 		.quad	.LBB1488
+ 36862      00000000 
+ 36863 6e65 00000000 		.quad	.LBE1488
+ 36863      00000000 
+ 36864 6e6d 02       		.byte	0x2
+ 36865 6e6e 5607     		.value	0x756
+ 36866 6e70 AB6E0000 		.long	0x6eab
+ 36867 6e74 32       		.uleb128 0x32
+ 36868 6e75 BC490000 		.long	0x49bc
+ 36869 6e79 03       		.byte	0x3
+ 36870 6e7a 91       		.byte	0x91
+ 36871 6e7b 907A     		.sleb128 -752
+ 36872 6e7d 32       		.uleb128 0x32
+ 36873 6e7e B2490000 		.long	0x49b2
+ 36874 6e82 03       		.byte	0x3
+ 36875 6e83 91       		.byte	0x91
+ 36876 6e84 A07A     		.sleb128 -736
+ 36877 6e86 33       		.uleb128 0x33
+ 36878 6e87 00000000 		.quad	.LBB1489
+ 36878      00000000 
+ 36879 6e8f 00000000 		.quad	.LBE1489
+ 36879      00000000 
+ 36880 6e97 34       		.uleb128 0x34
+ 36881 6e98 C6490000 		.long	0x49c6
+ 36882 6e9c 03       		.byte	0x3
+ 36883 6e9d 91       		.byte	0x91
+ 36884 6e9e 805E     		.sleb128 -4352
+ 36885 6ea0 34       		.uleb128 0x34
+ 36886 6ea1 D1490000 		.long	0x49d1
+ 36887 6ea5 03       		.byte	0x3
+ 36888 6ea6 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 989
+
+
+ 36889 6ea7 F05D     		.sleb128 -4368
+ 36890 6ea9 00       		.byte	0x0
+ 36891 6eaa 00       		.byte	0x0
+ 36892 6eab 31       		.uleb128 0x31
+ 36893 6eac A30E0000 		.long	0xea3
+ 36894 6eb0 00000000 		.quad	.LBB1490
+ 36894      00000000 
+ 36895 6eb8 00000000 		.quad	.LBE1490
+ 36895      00000000 
+ 36896 6ec0 02       		.byte	0x2
+ 36897 6ec1 5A07     		.value	0x75a
+ 36898 6ec3 AB6F0000 		.long	0x6fab
+ 36899 6ec7 32       		.uleb128 0x32
+ 36900 6ec8 B50E0000 		.long	0xeb5
+ 36901 6ecc 03       		.byte	0x3
+ 36902 6ecd 91       		.byte	0x91
+ 36903 6ece B07A     		.sleb128 -720
+ 36904 6ed0 33       		.uleb128 0x33
+ 36905 6ed1 00000000 		.quad	.LBB1491
+ 36905      00000000 
+ 36906 6ed9 00000000 		.quad	.LBE1491
+ 36906      00000000 
+ 36907 6ee1 34       		.uleb128 0x34
+ 36908 6ee2 C10E0000 		.long	0xec1
+ 36909 6ee6 03       		.byte	0x3
+ 36910 6ee7 76       		.byte	0x76
+ 36911 6ee8 C04E     		.sleb128 -6336
+ 36912 6eea 31       		.uleb128 0x31
+ 36913 6eeb CE0E0000 		.long	0xece
+ 36914 6eef 00000000 		.quad	.LBB1492
+ 36914      00000000 
+ 36915 6ef7 00000000 		.quad	.LBE1492
+ 36915      00000000 
+ 36916 6eff 02       		.byte	0x2
+ 36917 6f00 1F06     		.value	0x61f
+ 36918 6f02 2B6F0000 		.long	0x6f2b
+ 36919 6f06 32       		.uleb128 0x32
+ 36920 6f07 E00E0000 		.long	0xee0
+ 36921 6f0b 03       		.byte	0x3
+ 36922 6f0c 91       		.byte	0x91
+ 36923 6f0d C07A     		.sleb128 -704
+ 36924 6f0f 33       		.uleb128 0x33
+ 36925 6f10 00000000 		.quad	.LBB1493
+ 36925      00000000 
+ 36926 6f18 00000000 		.quad	.LBE1493
+ 36926      00000000 
+ 36927 6f20 34       		.uleb128 0x34
+ 36928 6f21 EC0E0000 		.long	0xeec
+ 36929 6f25 03       		.byte	0x3
+ 36930 6f26 91       		.byte	0x91
+ 36931 6f27 905E     		.sleb128 -4336
+ 36932 6f29 00       		.byte	0x0
+ 36933 6f2a 00       		.byte	0x0
+ 36934 6f2b 31       		.uleb128 0x31
+ 36935 6f2c CE0E0000 		.long	0xece
+ 36936 6f30 00000000 		.quad	.LBB1494
+ 36936      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 990
+
+
+ 36937 6f38 00000000 		.quad	.LBE1494
+ 36937      00000000 
+ 36938 6f40 02       		.byte	0x2
+ 36939 6f41 2006     		.value	0x620
+ 36940 6f43 6C6F0000 		.long	0x6f6c
+ 36941 6f47 32       		.uleb128 0x32
+ 36942 6f48 E00E0000 		.long	0xee0
+ 36943 6f4c 03       		.byte	0x3
+ 36944 6f4d 91       		.byte	0x91
+ 36945 6f4e D07A     		.sleb128 -688
+ 36946 6f50 33       		.uleb128 0x33
+ 36947 6f51 00000000 		.quad	.LBB1495
+ 36947      00000000 
+ 36948 6f59 00000000 		.quad	.LBE1495
+ 36948      00000000 
+ 36949 6f61 34       		.uleb128 0x34
+ 36950 6f62 EC0E0000 		.long	0xeec
+ 36951 6f66 03       		.byte	0x3
+ 36952 6f67 91       		.byte	0x91
+ 36953 6f68 A05E     		.sleb128 -4320
+ 36954 6f6a 00       		.byte	0x0
+ 36955 6f6b 00       		.byte	0x0
+ 36956 6f6c 35       		.uleb128 0x35
+ 36957 6f6d CE0E0000 		.long	0xece
+ 36958 6f71 00000000 		.quad	.LBB1496
+ 36958      00000000 
+ 36959 6f79 00000000 		.quad	.LBE1496
+ 36959      00000000 
+ 36960 6f81 02       		.byte	0x2
+ 36961 6f82 2106     		.value	0x621
+ 36962 6f84 32       		.uleb128 0x32
+ 36963 6f85 E00E0000 		.long	0xee0
+ 36964 6f89 03       		.byte	0x3
+ 36965 6f8a 91       		.byte	0x91
+ 36966 6f8b E07A     		.sleb128 -672
+ 36967 6f8d 33       		.uleb128 0x33
+ 36968 6f8e 00000000 		.quad	.LBB1497
+ 36968      00000000 
+ 36969 6f96 00000000 		.quad	.LBE1497
+ 36969      00000000 
+ 36970 6f9e 34       		.uleb128 0x34
+ 36971 6f9f EC0E0000 		.long	0xeec
+ 36972 6fa3 03       		.byte	0x3
+ 36973 6fa4 91       		.byte	0x91
+ 36974 6fa5 B05E     		.sleb128 -4304
+ 36975 6fa7 00       		.byte	0x0
+ 36976 6fa8 00       		.byte	0x0
+ 36977 6fa9 00       		.byte	0x0
+ 36978 6faa 00       		.byte	0x0
+ 36979 6fab 35       		.uleb128 0x35
+ 36980 6fac D10B0000 		.long	0xbd1
+ 36981 6fb0 00000000 		.quad	.LBB1498
+ 36981      00000000 
+ 36982 6fb8 00000000 		.quad	.LBE1498
+ 36982      00000000 
+ 36983 6fc0 02       		.byte	0x2
+ 36984 6fc1 5B07     		.value	0x75b
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 991
+
+
+ 36985 6fc3 32       		.uleb128 0x32
+ 36986 6fc4 EF0B0000 		.long	0xbef
+ 36987 6fc8 03       		.byte	0x3
+ 36988 6fc9 91       		.byte	0x91
+ 36989 6fca FC7A     		.sleb128 -644
+ 36990 6fcc 32       		.uleb128 0x32
+ 36991 6fcd E30B0000 		.long	0xbe3
+ 36992 6fd1 03       		.byte	0x3
+ 36993 6fd2 91       		.byte	0x91
+ 36994 6fd3 807B     		.sleb128 -640
+ 36995 6fd5 33       		.uleb128 0x33
+ 36996 6fd6 00000000 		.quad	.LBB1499
+ 36996      00000000 
+ 36997 6fde 00000000 		.quad	.LBE1499
+ 36997      00000000 
+ 36998 6fe6 34       		.uleb128 0x34
+ 36999 6fe7 FB0B0000 		.long	0xbfb
+ 37000 6feb 03       		.byte	0x3
+ 37001 6fec 76       		.byte	0x76
+ 37002 6fed E04E     		.sleb128 -6304
+ 37003 6fef 34       		.uleb128 0x34
+ 37004 6ff0 070C0000 		.long	0xc07
+ 37005 6ff4 03       		.byte	0x3
+ 37006 6ff5 76       		.byte	0x76
+ 37007 6ff6 D04E     		.sleb128 -6320
+ 37008 6ff8 31       		.uleb128 0x31
+ 37009 6ff9 500C0000 		.long	0xc50
+ 37010 6ffd 00000000 		.quad	.LBB1500
+ 37010      00000000 
+ 37011 7005 00000000 		.quad	.LBE1500
+ 37011      00000000 
+ 37012 700d 02       		.byte	0x2
+ 37013 700e 9106     		.value	0x691
+ 37014 7010 4B700000 		.long	0x704b
+ 37015 7014 32       		.uleb128 0x32
+ 37016 7015 7A0C0000 		.long	0xc7a
+ 37017 7019 03       		.byte	0x3
+ 37018 701a 91       		.byte	0x91
+ 37019 701b 987B     		.sleb128 -616
+ 37020 701d 32       		.uleb128 0x32
+ 37021 701e 6E0C0000 		.long	0xc6e
+ 37022 7022 03       		.byte	0x3
+ 37023 7023 91       		.byte	0x91
+ 37024 7024 9C7B     		.sleb128 -612
+ 37025 7026 32       		.uleb128 0x32
+ 37026 7027 620C0000 		.long	0xc62
+ 37027 702b 03       		.byte	0x3
+ 37028 702c 91       		.byte	0x91
+ 37029 702d A07B     		.sleb128 -608
+ 37030 702f 33       		.uleb128 0x33
+ 37031 7030 00000000 		.quad	.LBB1501
+ 37031      00000000 
+ 37032 7038 00000000 		.quad	.LBE1501
+ 37032      00000000 
+ 37033 7040 34       		.uleb128 0x34
+ 37034 7041 860C0000 		.long	0xc86
+ 37035 7045 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 992
+
+
+ 37036 7046 91       		.byte	0x91
+ 37037 7047 805F     		.sleb128 -4224
+ 37038 7049 00       		.byte	0x0
+ 37039 704a 00       		.byte	0x0
+ 37040 704b 31       		.uleb128 0x31
+ 37041 704c 910C0000 		.long	0xc91
+ 37042 7050 00000000 		.quad	.LBB1502
+ 37042      00000000 
+ 37043 7058 00000000 		.quad	.LBE1502
+ 37043      00000000 
+ 37044 7060 02       		.byte	0x2
+ 37045 7061 9206     		.value	0x692
+ 37046 7063 BB720000 		.long	0x72bb
+ 37047 7067 32       		.uleb128 0x32
+ 37048 7068 A30C0000 		.long	0xca3
+ 37049 706c 03       		.byte	0x3
+ 37050 706d 91       		.byte	0x91
+ 37051 706e B07B     		.sleb128 -592
+ 37052 7070 35       		.uleb128 0x35
+ 37053 7071 B00C0000 		.long	0xcb0
+ 37054 7075 00000000 		.quad	.LBB1504
+ 37054      00000000 
+ 37055 707d 00000000 		.quad	.LBE1504
+ 37055      00000000 
+ 37056 7085 02       		.byte	0x2
+ 37057 7086 7D03     		.value	0x37d
+ 37058 7088 32       		.uleb128 0x32
+ 37059 7089 CE0C0000 		.long	0xcce
+ 37060 708d 03       		.byte	0x3
+ 37061 708e 91       		.byte	0x91
+ 37062 708f C87B     		.sleb128 -568
+ 37063 7091 32       		.uleb128 0x32
+ 37064 7092 C20C0000 		.long	0xcc2
+ 37065 7096 03       		.byte	0x3
+ 37066 7097 91       		.byte	0x91
+ 37067 7098 D07B     		.sleb128 -560
+ 37068 709a 33       		.uleb128 0x33
+ 37069 709b 00000000 		.quad	.LBB1505
+ 37069      00000000 
+ 37070 70a3 00000000 		.quad	.LBE1505
+ 37070      00000000 
+ 37071 70ab 34       		.uleb128 0x34
+ 37072 70ac DA0C0000 		.long	0xcda
+ 37073 70b0 03       		.byte	0x3
+ 37074 70b1 91       		.byte	0x91
+ 37075 70b2 A07C     		.sleb128 -480
+ 37076 70b4 34       		.uleb128 0x34
+ 37077 70b5 E50C0000 		.long	0xce5
+ 37078 70b9 03       		.byte	0x3
+ 37079 70ba 91       		.byte	0x91
+ 37080 70bb 907C     		.sleb128 -496
+ 37081 70bd 34       		.uleb128 0x34
+ 37082 70be F00C0000 		.long	0xcf0
+ 37083 70c2 03       		.byte	0x3
+ 37084 70c3 91       		.byte	0x91
+ 37085 70c4 807C     		.sleb128 -512
+ 37086 70c6 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 993
+
+
+ 37087 70c7 FC0C0000 		.long	0xcfc
+ 37088 70cb 03       		.byte	0x3
+ 37089 70cc 91       		.byte	0x91
+ 37090 70cd F07B     		.sleb128 -528
+ 37091 70cf 34       		.uleb128 0x34
+ 37092 70d0 080D0000 		.long	0xd08
+ 37093 70d4 03       		.byte	0x3
+ 37094 70d5 91       		.byte	0x91
+ 37095 70d6 EC7B     		.sleb128 -532
+ 37096 70d8 31       		.uleb128 0x31
+ 37097 70d9 1F0D0000 		.long	0xd1f
+ 37098 70dd 00000000 		.quad	.LBB1506
+ 37098      00000000 
+ 37099 70e5 00000000 		.quad	.LBE1506
+ 37099      00000000 
+ 37100 70ed 02       		.byte	0x2
+ 37101 70ee 5603     		.value	0x356
+ 37102 70f0 07710000 		.long	0x7107
+ 37103 70f4 32       		.uleb128 0x32
+ 37104 70f5 3A0D0000 		.long	0xd3a
+ 37105 70f9 03       		.byte	0x3
+ 37106 70fa 91       		.byte	0x91
+ 37107 70fb B07C     		.sleb128 -464
+ 37108 70fd 32       		.uleb128 0x32
+ 37109 70fe 300D0000 		.long	0xd30
+ 37110 7102 03       		.byte	0x3
+ 37111 7103 91       		.byte	0x91
+ 37112 7104 C07C     		.sleb128 -448
+ 37113 7106 00       		.byte	0x0
+ 37114 7107 31       		.uleb128 0x31
+ 37115 7108 450D0000 		.long	0xd45
+ 37116 710c 00000000 		.quad	.LBB1508
+ 37116      00000000 
+ 37117 7114 00000000 		.quad	.LBE1508
+ 37117      00000000 
+ 37118 711c 02       		.byte	0x2
+ 37119 711d 5E03     		.value	0x35e
+ 37120 711f 36710000 		.long	0x7136
+ 37121 7123 32       		.uleb128 0x32
+ 37122 7124 620D0000 		.long	0xd62
+ 37123 7128 03       		.byte	0x3
+ 37124 7129 91       		.byte	0x91
+ 37125 712a D07C     		.sleb128 -432
+ 37126 712c 32       		.uleb128 0x32
+ 37127 712d 570D0000 		.long	0xd57
+ 37128 7131 03       		.byte	0x3
+ 37129 7132 91       		.byte	0x91
+ 37130 7133 E07C     		.sleb128 -416
+ 37131 7135 00       		.byte	0x0
+ 37132 7136 31       		.uleb128 0x31
+ 37133 7137 6E0D0000 		.long	0xd6e
+ 37134 713b 00000000 		.quad	.LBB1510
+ 37134      00000000 
+ 37135 7143 00000000 		.quad	.LBE1510
+ 37135      00000000 
+ 37136 714b 02       		.byte	0x2
+ 37137 714c 6403     		.value	0x364
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 994
+
+
+ 37138 714e 9B710000 		.long	0x719b
+ 37139 7152 32       		.uleb128 0x32
+ 37140 7153 8C0D0000 		.long	0xd8c
+ 37141 7157 03       		.byte	0x3
+ 37142 7158 91       		.byte	0x91
+ 37143 7159 F07C     		.sleb128 -400
+ 37144 715b 32       		.uleb128 0x32
+ 37145 715c 800D0000 		.long	0xd80
+ 37146 7160 03       		.byte	0x3
+ 37147 7161 91       		.byte	0x91
+ 37148 7162 807D     		.sleb128 -384
+ 37149 7164 33       		.uleb128 0x33
+ 37150 7165 00000000 		.quad	.LBB1511
+ 37150      00000000 
+ 37151 716d 00000000 		.quad	.LBE1511
+ 37151      00000000 
+ 37152 7175 34       		.uleb128 0x34
+ 37153 7176 980D0000 		.long	0xd98
+ 37154 717a 03       		.byte	0x3
+ 37155 717b 91       		.byte	0x91
+ 37156 717c B05F     		.sleb128 -4176
+ 37157 717e 34       		.uleb128 0x34
+ 37158 717f A40D0000 		.long	0xda4
+ 37159 7183 03       		.byte	0x3
+ 37160 7184 91       		.byte	0x91
+ 37161 7185 A05F     		.sleb128 -4192
+ 37162 7187 34       		.uleb128 0x34
+ 37163 7188 AF0D0000 		.long	0xdaf
+ 37164 718c 03       		.byte	0x3
+ 37165 718d 91       		.byte	0x91
+ 37166 718e 905F     		.sleb128 -4208
+ 37167 7190 34       		.uleb128 0x34
+ 37168 7191 BB0D0000 		.long	0xdbb
+ 37169 7195 03       		.byte	0x3
+ 37170 7196 91       		.byte	0x91
+ 37171 7197 9C7D     		.sleb128 -356
+ 37172 7199 00       		.byte	0x0
+ 37173 719a 00       		.byte	0x0
+ 37174 719b 31       		.uleb128 0x31
+ 37175 719c C70D0000 		.long	0xdc7
+ 37176 71a0 00000000 		.quad	.LBB1512
+ 37176      00000000 
+ 37177 71a8 00000000 		.quad	.LBE1512
+ 37177      00000000 
+ 37178 71b0 02       		.byte	0x2
+ 37179 71b1 6603     		.value	0x366
+ 37180 71b3 CA710000 		.long	0x71ca
+ 37181 71b7 32       		.uleb128 0x32
+ 37182 71b8 E20D0000 		.long	0xde2
+ 37183 71bc 03       		.byte	0x3
+ 37184 71bd 91       		.byte	0x91
+ 37185 71be A07D     		.sleb128 -352
+ 37186 71c0 32       		.uleb128 0x32
+ 37187 71c1 D80D0000 		.long	0xdd8
+ 37188 71c5 03       		.byte	0x3
+ 37189 71c6 91       		.byte	0x91
+ 37190 71c7 B07D     		.sleb128 -336
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 995
+
+
+ 37191 71c9 00       		.byte	0x0
+ 37192 71ca 31       		.uleb128 0x31
+ 37193 71cb 6E0D0000 		.long	0xd6e
+ 37194 71cf 00000000 		.quad	.LBB1514
+ 37194      00000000 
+ 37195 71d7 00000000 		.quad	.LBE1514
+ 37195      00000000 
+ 37196 71df 02       		.byte	0x2
+ 37197 71e0 6803     		.value	0x368
+ 37198 71e2 2F720000 		.long	0x722f
+ 37199 71e6 32       		.uleb128 0x32
+ 37200 71e7 8C0D0000 		.long	0xd8c
+ 37201 71eb 03       		.byte	0x3
+ 37202 71ec 91       		.byte	0x91
+ 37203 71ed C07D     		.sleb128 -320
+ 37204 71ef 32       		.uleb128 0x32
+ 37205 71f0 800D0000 		.long	0xd80
+ 37206 71f4 03       		.byte	0x3
+ 37207 71f5 91       		.byte	0x91
+ 37208 71f6 D07D     		.sleb128 -304
+ 37209 71f8 33       		.uleb128 0x33
+ 37210 71f9 00000000 		.quad	.LBB1515
+ 37210      00000000 
+ 37211 7201 00000000 		.quad	.LBE1515
+ 37211      00000000 
+ 37212 7209 34       		.uleb128 0x34
+ 37213 720a 980D0000 		.long	0xd98
+ 37214 720e 03       		.byte	0x3
+ 37215 720f 91       		.byte	0x91
+ 37216 7210 E05F     		.sleb128 -4128
+ 37217 7212 34       		.uleb128 0x34
+ 37218 7213 A40D0000 		.long	0xda4
+ 37219 7217 03       		.byte	0x3
+ 37220 7218 91       		.byte	0x91
+ 37221 7219 D05F     		.sleb128 -4144
+ 37222 721b 34       		.uleb128 0x34
+ 37223 721c AF0D0000 		.long	0xdaf
+ 37224 7220 03       		.byte	0x3
+ 37225 7221 91       		.byte	0x91
+ 37226 7222 C05F     		.sleb128 -4160
+ 37227 7224 34       		.uleb128 0x34
+ 37228 7225 BB0D0000 		.long	0xdbb
+ 37229 7229 03       		.byte	0x3
+ 37230 722a 91       		.byte	0x91
+ 37231 722b EC7D     		.sleb128 -276
+ 37232 722d 00       		.byte	0x0
+ 37233 722e 00       		.byte	0x0
+ 37234 722f 31       		.uleb128 0x31
+ 37235 7230 C70D0000 		.long	0xdc7
+ 37236 7234 00000000 		.quad	.LBB1516
+ 37236      00000000 
+ 37237 723c 00000000 		.quad	.LBE1516
+ 37237      00000000 
+ 37238 7244 02       		.byte	0x2
+ 37239 7245 6A03     		.value	0x36a
+ 37240 7247 5E720000 		.long	0x725e
+ 37241 724b 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 996
+
+
+ 37242 724c E20D0000 		.long	0xde2
+ 37243 7250 03       		.byte	0x3
+ 37244 7251 91       		.byte	0x91
+ 37245 7252 F07D     		.sleb128 -272
+ 37246 7254 32       		.uleb128 0x32
+ 37247 7255 D80D0000 		.long	0xdd8
+ 37248 7259 03       		.byte	0x3
+ 37249 725a 91       		.byte	0x91
+ 37250 725b 807E     		.sleb128 -256
+ 37251 725d 00       		.byte	0x0
+ 37252 725e 31       		.uleb128 0x31
+ 37253 725f ED0D0000 		.long	0xded
+ 37254 7263 00000000 		.quad	.LBB1518
+ 37254      00000000 
+ 37255 726b 00000000 		.quad	.LBE1518
+ 37255      00000000 
+ 37256 7273 02       		.byte	0x2
+ 37257 7274 6C03     		.value	0x36c
+ 37258 7276 8D720000 		.long	0x728d
+ 37259 727a 32       		.uleb128 0x32
+ 37260 727b 0A0E0000 		.long	0xe0a
+ 37261 727f 03       		.byte	0x3
+ 37262 7280 91       		.byte	0x91
+ 37263 7281 907E     		.sleb128 -240
+ 37264 7283 32       		.uleb128 0x32
+ 37265 7284 FF0D0000 		.long	0xdff
+ 37266 7288 03       		.byte	0x3
+ 37267 7289 91       		.byte	0x91
+ 37268 728a A07E     		.sleb128 -224
+ 37269 728c 00       		.byte	0x0
+ 37270 728d 35       		.uleb128 0x35
+ 37271 728e 1F0D0000 		.long	0xd1f
+ 37272 7292 00000000 		.quad	.LBB1520
+ 37272      00000000 
+ 37273 729a 00000000 		.quad	.LBE1520
+ 37273      00000000 
+ 37274 72a2 02       		.byte	0x2
+ 37275 72a3 6E03     		.value	0x36e
+ 37276 72a5 32       		.uleb128 0x32
+ 37277 72a6 3A0D0000 		.long	0xd3a
+ 37278 72aa 03       		.byte	0x3
+ 37279 72ab 91       		.byte	0x91
+ 37280 72ac B07E     		.sleb128 -208
+ 37281 72ae 32       		.uleb128 0x32
+ 37282 72af 300D0000 		.long	0xd30
+ 37283 72b3 03       		.byte	0x3
+ 37284 72b4 91       		.byte	0x91
+ 37285 72b5 C07E     		.sleb128 -192
+ 37286 72b7 00       		.byte	0x0
+ 37287 72b8 00       		.byte	0x0
+ 37288 72b9 00       		.byte	0x0
+ 37289 72ba 00       		.byte	0x0
+ 37290 72bb 36       		.uleb128 0x36
+ 37291 72bc 00000000 		.quad	.LBB1522
+ 37291      00000000 
+ 37292 72c4 00000000 		.quad	.LBE1522
+ 37292      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 997
+
+
+ 37293 72cc DA720000 		.long	0x72da
+ 37294 72d0 34       		.uleb128 0x34
+ 37295 72d1 180C0000 		.long	0xc18
+ 37296 72d5 03       		.byte	0x3
+ 37297 72d6 91       		.byte	0x91
+ 37298 72d7 F05E     		.sleb128 -4240
+ 37299 72d9 00       		.byte	0x0
+ 37300 72da 31       		.uleb128 0x31
+ 37301 72db 160E0000 		.long	0xe16
+ 37302 72df 00000000 		.quad	.LBB1523
+ 37302      00000000 
+ 37303 72e7 00000000 		.quad	.LBE1523
+ 37303      00000000 
+ 37304 72ef 02       		.byte	0x2
+ 37305 72f0 9406     		.value	0x694
+ 37306 72f2 82730000 		.long	0x7382
+ 37307 72f6 32       		.uleb128 0x32
+ 37308 72f7 280E0000 		.long	0xe28
+ 37309 72fb 03       		.byte	0x3
+ 37310 72fc 91       		.byte	0x91
+ 37311 72fd D07E     		.sleb128 -176
+ 37312 72ff 33       		.uleb128 0x33
+ 37313 7300 00000000 		.quad	.LBB1524
+ 37313      00000000 
+ 37314 7308 00000000 		.quad	.LBE1524
+ 37314      00000000 
+ 37315 7310 34       		.uleb128 0x34
+ 37316 7311 340E0000 		.long	0xe34
+ 37317 7315 09       		.byte	0x9
+ 37318 7316 03       		.byte	0x3
+ 37319 7317 00000000 		.quad	ShiftRowTable.6768
+ 37319      00000000 
+ 37320 731f 35       		.uleb128 0x35
+ 37321 7320 6E0D0000 		.long	0xd6e
+ 37322 7324 00000000 		.quad	.LBB1525
+ 37322      00000000 
+ 37323 732c 00000000 		.quad	.LBE1525
+ 37323      00000000 
+ 37324 7334 02       		.byte	0x2
+ 37325 7335 9B02     		.value	0x29b
+ 37326 7337 32       		.uleb128 0x32
+ 37327 7338 8C0D0000 		.long	0xd8c
+ 37328 733c 03       		.byte	0x3
+ 37329 733d 91       		.byte	0x91
+ 37330 733e E07E     		.sleb128 -160
+ 37331 7340 32       		.uleb128 0x32
+ 37332 7341 800D0000 		.long	0xd80
+ 37333 7345 03       		.byte	0x3
+ 37334 7346 91       		.byte	0x91
+ 37335 7347 F07E     		.sleb128 -144
+ 37336 7349 33       		.uleb128 0x33
+ 37337 734a 00000000 		.quad	.LBB1526
+ 37337      00000000 
+ 37338 7352 00000000 		.quad	.LBE1526
+ 37338      00000000 
+ 37339 735a 34       		.uleb128 0x34
+ 37340 735b 980D0000 		.long	0xd98
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 998
+
+
+ 37341 735f 03       		.byte	0x3
+ 37342 7360 91       		.byte	0x91
+ 37343 7361 9060     		.sleb128 -4080
+ 37344 7363 34       		.uleb128 0x34
+ 37345 7364 A40D0000 		.long	0xda4
+ 37346 7368 03       		.byte	0x3
+ 37347 7369 91       		.byte	0x91
+ 37348 736a 8060     		.sleb128 -4096
+ 37349 736c 34       		.uleb128 0x34
+ 37350 736d AF0D0000 		.long	0xdaf
+ 37351 7371 03       		.byte	0x3
+ 37352 7372 91       		.byte	0x91
+ 37353 7373 F05F     		.sleb128 -4112
+ 37354 7375 34       		.uleb128 0x34
+ 37355 7376 BB0D0000 		.long	0xdbb
+ 37356 737a 03       		.byte	0x3
+ 37357 737b 91       		.byte	0x91
+ 37358 737c 8C7F     		.sleb128 -116
+ 37359 737e 00       		.byte	0x0
+ 37360 737f 00       		.byte	0x0
+ 37361 7380 00       		.byte	0x0
+ 37362 7381 00       		.byte	0x0
+ 37363 7382 36       		.uleb128 0x36
+ 37364 7383 00000000 		.quad	.LBB1527
+ 37364      00000000 
+ 37365 738b 00000000 		.quad	.LBE1527
+ 37365      00000000 
+ 37366 7393 A1730000 		.long	0x73a1
+ 37367 7397 34       		.uleb128 0x34
+ 37368 7398 280C0000 		.long	0xc28
+ 37369 739c 03       		.byte	0x3
+ 37370 739d 91       		.byte	0x91
+ 37371 739e E05E     		.sleb128 -4256
+ 37372 73a0 00       		.byte	0x0
+ 37373 73a1 31       		.uleb128 0x31
+ 37374 73a2 520E0000 		.long	0xe52
+ 37375 73a6 00000000 		.quad	.LBB1528
+ 37375      00000000 
+ 37376 73ae 00000000 		.quad	.LBE1528
+ 37376      00000000 
+ 37377 73b6 02       		.byte	0x2
+ 37378 73b7 9606     		.value	0x696
+ 37379 73b9 D0730000 		.long	0x73d0
+ 37380 73bd 32       		.uleb128 0x32
+ 37381 73be 6D0E0000 		.long	0xe6d
+ 37382 73c2 03       		.byte	0x3
+ 37383 73c3 91       		.byte	0x91
+ 37384 73c4 907F     		.sleb128 -112
+ 37385 73c6 32       		.uleb128 0x32
+ 37386 73c7 630E0000 		.long	0xe63
+ 37387 73cb 03       		.byte	0x3
+ 37388 73cc 91       		.byte	0x91
+ 37389 73cd A07F     		.sleb128 -96
+ 37390 73cf 00       		.byte	0x0
+ 37391 73d0 36       		.uleb128 0x36
+ 37392 73d1 00000000 		.quad	.LBB1530
+ 37392      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 999
+
+
+ 37393 73d9 00000000 		.quad	.LBE1530
+ 37393      00000000 
+ 37394 73e1 EF730000 		.long	0x73ef
+ 37395 73e5 34       		.uleb128 0x34
+ 37396 73e6 380C0000 		.long	0xc38
+ 37397 73ea 03       		.byte	0x3
+ 37398 73eb 91       		.byte	0x91
+ 37399 73ec D05E     		.sleb128 -4272
+ 37400 73ee 00       		.byte	0x0
+ 37401 73ef 31       		.uleb128 0x31
+ 37402 73f0 780E0000 		.long	0xe78
+ 37403 73f4 00000000 		.quad	.LBB1531
+ 37403      00000000 
+ 37404 73fc 00000000 		.quad	.LBE1531
+ 37404      00000000 
+ 37405 7404 02       		.byte	0x2
+ 37406 7405 9806     		.value	0x698
+ 37407 7407 30740000 		.long	0x7430
+ 37408 740b 32       		.uleb128 0x32
+ 37409 740c 8A0E0000 		.long	0xe8a
+ 37410 7410 03       		.byte	0x3
+ 37411 7411 91       		.byte	0x91
+ 37412 7412 B07F     		.sleb128 -80
+ 37413 7414 33       		.uleb128 0x33
+ 37414 7415 00000000 		.quad	.LBB1532
+ 37414      00000000 
+ 37415 741d 00000000 		.quad	.LBE1532
+ 37415      00000000 
+ 37416 7425 34       		.uleb128 0x34
+ 37417 7426 960E0000 		.long	0xe96
+ 37418 742a 03       		.byte	0x3
+ 37419 742b 91       		.byte	0x91
+ 37420 742c A060     		.sleb128 -4064
+ 37421 742e 00       		.byte	0x0
+ 37422 742f 00       		.byte	0x0
+ 37423 7430 33       		.uleb128 0x33
+ 37424 7431 00000000 		.quad	.LBB1533
+ 37424      00000000 
+ 37425 7439 00000000 		.quad	.LBE1533
+ 37425      00000000 
+ 37426 7441 34       		.uleb128 0x34
+ 37427 7442 440C0000 		.long	0xc44
+ 37428 7446 03       		.byte	0x3
+ 37429 7447 91       		.byte	0x91
+ 37430 7448 C05E     		.sleb128 -4288
+ 37431 744a 00       		.byte	0x0
+ 37432 744b 00       		.byte	0x0
+ 37433 744c 00       		.byte	0x0
+ 37434 744d 00       		.byte	0x0
+ 37435 744e 25       		.uleb128 0x25
+ 37436 744f 00000000 		.long	.LASF353
+ 37437 7453 02       		.byte	0x2
+ 37438 7454 6E06     		.value	0x66e
+ 37439 7456 01       		.byte	0x1
+ 37440 7457 B1010000 		.long	0x1b1
+ 37441 745b 03       		.byte	0x3
+ 37442 745c 83740000 		.long	0x7483
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1000
+
+
+ 37443 7460 26       		.uleb128 0x26
+ 37444 7461 00000000 		.long	.LASF66
+ 37445 7465 02       		.byte	0x2
+ 37446 7466 6E06     		.value	0x66e
+ 37447 7468 B1010000 		.long	0x1b1
+ 37448 746c 28       		.uleb128 0x28
+ 37449 746d 7500     		.string	"u"
+ 37450 746f 02       		.byte	0x2
+ 37451 7470 7506     		.value	0x675
+ 37452 7472 27050000 		.long	0x527
+ 37453 7476 27       		.uleb128 0x27
+ 37454 7477 00000000 		.long	.LASF339
+ 37455 747b 02       		.byte	0x2
+ 37456 747c 7606     		.value	0x676
+ 37457 747e 07040000 		.long	0x407
+ 37458 7482 00       		.byte	0x0
+ 37459 7483 2D       		.uleb128 0x2d
+ 37460 7484 00000000 		.long	.LASF354
+ 37461 7488 02       		.byte	0x2
+ 37462 7489 6F07     		.value	0x76f
+ 37463 748b 01       		.byte	0x1
+ 37464 748c 00000000 		.quad	.LFB565
+ 37464      00000000 
+ 37465 7494 00000000 		.quad	.LFE565
+ 37465      00000000 
+ 37466 749c 00000000 		.long	.LLST3
+ 37467 74a0 DCA80000 		.long	0xa8dc
+ 37468 74a4 2E       		.uleb128 0x2e
+ 37469 74a5 00000000 		.long	.LASF64
+ 37470 74a9 02       		.byte	0x2
+ 37471 74aa 6F07     		.value	0x76f
+ 37472 74ac 89480000 		.long	0x4889
+ 37473 74b0 04       		.byte	0x4
+ 37474 74b1 91       		.byte	0x91
+ 37475 74b2 C8BF7F   		.sleb128 -8248
+ 37476 74b5 2F       		.uleb128 0x2f
+ 37477 74b6 6B657900 		.string	"key"
+ 37478 74ba 02       		.byte	0x2
+ 37479 74bb 6F07     		.value	0x76f
+ 37480 74bd 8F480000 		.long	0x488f
+ 37481 74c1 04       		.byte	0x4
+ 37482 74c2 91       		.byte	0x91
+ 37483 74c3 C0BF7F   		.sleb128 -8256
+ 37484 74c6 37       		.uleb128 0x37
+ 37485 74c7 763000   		.string	"v0"
+ 37486 74ca 02       		.byte	0x2
+ 37487 74cb 7107     		.value	0x771
+ 37488 74cd B1010000 		.long	0x1b1
+ 37489 74d1 03       		.byte	0x3
+ 37490 74d2 91       		.byte	0x91
+ 37491 74d3 B053     		.sleb128 -5712
+ 37492 74d5 37       		.uleb128 0x37
+ 37493 74d6 763100   		.string	"v1"
+ 37494 74d9 02       		.byte	0x2
+ 37495 74da 7107     		.value	0x771
+ 37496 74dc B1010000 		.long	0x1b1
+ 37497 74e0 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1001
+
+
+ 37498 74e1 91       		.byte	0x91
+ 37499 74e2 C053     		.sleb128 -5696
+ 37500 74e4 37       		.uleb128 0x37
+ 37501 74e5 6B00     		.string	"k"
+ 37502 74e7 02       		.byte	0x2
+ 37503 74e8 7207     		.value	0x772
+ 37504 74ea B1010000 		.long	0x1b1
+ 37505 74ee 03       		.byte	0x3
+ 37506 74ef 91       		.byte	0x91
+ 37507 74f0 D053     		.sleb128 -5680
+ 37508 74f2 31       		.uleb128 0x31
+ 37509 74f3 AB0B0000 		.long	0xbab
+ 37510 74f7 00000000 		.quad	.LBB1944
+ 37510      00000000 
+ 37511 74ff 00000000 		.quad	.LBE1944
+ 37511      00000000 
+ 37512 7507 02       		.byte	0x2
+ 37513 7508 7407     		.value	0x774
+ 37514 750a 34750000 		.long	0x7534
+ 37515 750e 32       		.uleb128 0x32
+ 37516 750f BC0B0000 		.long	0xbbc
+ 37517 7513 03       		.byte	0x3
+ 37518 7514 91       		.byte	0x91
+ 37519 7515 E853     		.sleb128 -5656
+ 37520 7517 33       		.uleb128 0x33
+ 37521 7518 00000000 		.quad	.LBB1945
+ 37521      00000000 
+ 37522 7520 00000000 		.quad	.LBE1945
+ 37522      00000000 
+ 37523 7528 34       		.uleb128 0x34
+ 37524 7529 C70B0000 		.long	0xbc7
+ 37525 752d 04       		.byte	0x4
+ 37526 752e 91       		.byte	0x91
+ 37527 752f D0BF7F   		.sleb128 -8240
+ 37528 7532 00       		.byte	0x0
+ 37529 7533 00       		.byte	0x0
+ 37530 7534 31       		.uleb128 0x31
+ 37531 7535 AB0B0000 		.long	0xbab
+ 37532 7539 00000000 		.quad	.LBB1946
+ 37532      00000000 
+ 37533 7541 00000000 		.quad	.LBE1946
+ 37533      00000000 
+ 37534 7549 02       		.byte	0x2
+ 37535 754a 7507     		.value	0x775
+ 37536 754c 76750000 		.long	0x7576
+ 37537 7550 32       		.uleb128 0x32
+ 37538 7551 BC0B0000 		.long	0xbbc
+ 37539 7555 03       		.byte	0x3
+ 37540 7556 91       		.byte	0x91
+ 37541 7557 F053     		.sleb128 -5648
+ 37542 7559 33       		.uleb128 0x33
+ 37543 755a 00000000 		.quad	.LBB1947
+ 37543      00000000 
+ 37544 7562 00000000 		.quad	.LBE1947
+ 37544      00000000 
+ 37545 756a 34       		.uleb128 0x34
+ 37546 756b C70B0000 		.long	0xbc7
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1002
+
+
+ 37547 756f 04       		.byte	0x4
+ 37548 7570 91       		.byte	0x91
+ 37549 7571 E0BF7F   		.sleb128 -8224
+ 37550 7574 00       		.byte	0x0
+ 37551 7575 00       		.byte	0x0
+ 37552 7576 31       		.uleb128 0x31
+ 37553 7577 D10B0000 		.long	0xbd1
+ 37554 757b 00000000 		.quad	.LBB1948
+ 37554      00000000 
+ 37555 7583 00000000 		.quad	.LBE1948
+ 37555      00000000 
+ 37556 758b 02       		.byte	0x2
+ 37557 758c 8607     		.value	0x786
+ 37558 758e 1F7A0000 		.long	0x7a1f
+ 37559 7592 32       		.uleb128 0x32
+ 37560 7593 EF0B0000 		.long	0xbef
+ 37561 7597 03       		.byte	0x3
+ 37562 7598 91       		.byte	0x91
+ 37563 7599 FC53     		.sleb128 -5636
+ 37564 759b 32       		.uleb128 0x32
+ 37565 759c E30B0000 		.long	0xbe3
+ 37566 75a0 03       		.byte	0x3
+ 37567 75a1 91       		.byte	0x91
+ 37568 75a2 8054     		.sleb128 -5632
+ 37569 75a4 33       		.uleb128 0x33
+ 37570 75a5 00000000 		.quad	.LBB1949
+ 37570      00000000 
+ 37571 75ad 00000000 		.quad	.LBE1949
+ 37571      00000000 
+ 37572 75b5 34       		.uleb128 0x34
+ 37573 75b6 FB0B0000 		.long	0xbfb
+ 37574 75ba 04       		.byte	0x4
+ 37575 75bb 76       		.byte	0x76
+ 37576 75bc C0BB7F   		.sleb128 -8768
+ 37577 75bf 34       		.uleb128 0x34
+ 37578 75c0 070C0000 		.long	0xc07
+ 37579 75c4 04       		.byte	0x4
+ 37580 75c5 76       		.byte	0x76
+ 37581 75c6 B0BB7F   		.sleb128 -8784
+ 37582 75c9 31       		.uleb128 0x31
+ 37583 75ca 500C0000 		.long	0xc50
+ 37584 75ce 00000000 		.quad	.LBB1950
+ 37584      00000000 
+ 37585 75d6 00000000 		.quad	.LBE1950
+ 37585      00000000 
+ 37586 75de 02       		.byte	0x2
+ 37587 75df 9106     		.value	0x691
+ 37588 75e1 1C760000 		.long	0x761c
+ 37589 75e5 32       		.uleb128 0x32
+ 37590 75e6 7A0C0000 		.long	0xc7a
+ 37591 75ea 03       		.byte	0x3
+ 37592 75eb 91       		.byte	0x91
+ 37593 75ec 9854     		.sleb128 -5608
+ 37594 75ee 32       		.uleb128 0x32
+ 37595 75ef 6E0C0000 		.long	0xc6e
+ 37596 75f3 03       		.byte	0x3
+ 37597 75f4 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1003
+
+
+ 37598 75f5 9C54     		.sleb128 -5604
+ 37599 75f7 32       		.uleb128 0x32
+ 37600 75f8 620C0000 		.long	0xc62
+ 37601 75fc 03       		.byte	0x3
+ 37602 75fd 91       		.byte	0x91
+ 37603 75fe A054     		.sleb128 -5600
+ 37604 7600 33       		.uleb128 0x33
+ 37605 7601 00000000 		.quad	.LBB1951
+ 37605      00000000 
+ 37606 7609 00000000 		.quad	.LBE1951
+ 37606      00000000 
+ 37607 7611 34       		.uleb128 0x34
+ 37608 7612 860C0000 		.long	0xc86
+ 37609 7616 03       		.byte	0x3
+ 37610 7617 91       		.byte	0x91
+ 37611 7618 B040     		.sleb128 -8144
+ 37612 761a 00       		.byte	0x0
+ 37613 761b 00       		.byte	0x0
+ 37614 761c 31       		.uleb128 0x31
+ 37615 761d 910C0000 		.long	0xc91
+ 37616 7621 00000000 		.quad	.LBB1952
+ 37616      00000000 
+ 37617 7629 00000000 		.quad	.LBE1952
+ 37617      00000000 
+ 37618 7631 02       		.byte	0x2
+ 37619 7632 9206     		.value	0x692
+ 37620 7634 8C780000 		.long	0x788c
+ 37621 7638 32       		.uleb128 0x32
+ 37622 7639 A30C0000 		.long	0xca3
+ 37623 763d 03       		.byte	0x3
+ 37624 763e 91       		.byte	0x91
+ 37625 763f B054     		.sleb128 -5584
+ 37626 7641 35       		.uleb128 0x35
+ 37627 7642 B00C0000 		.long	0xcb0
+ 37628 7646 00000000 		.quad	.LBB1954
+ 37628      00000000 
+ 37629 764e 00000000 		.quad	.LBE1954
+ 37629      00000000 
+ 37630 7656 02       		.byte	0x2
+ 37631 7657 7D03     		.value	0x37d
+ 37632 7659 32       		.uleb128 0x32
+ 37633 765a CE0C0000 		.long	0xcce
+ 37634 765e 03       		.byte	0x3
+ 37635 765f 91       		.byte	0x91
+ 37636 7660 C854     		.sleb128 -5560
+ 37637 7662 32       		.uleb128 0x32
+ 37638 7663 C20C0000 		.long	0xcc2
+ 37639 7667 03       		.byte	0x3
+ 37640 7668 91       		.byte	0x91
+ 37641 7669 D054     		.sleb128 -5552
+ 37642 766b 33       		.uleb128 0x33
+ 37643 766c 00000000 		.quad	.LBB1955
+ 37643      00000000 
+ 37644 7674 00000000 		.quad	.LBE1955
+ 37644      00000000 
+ 37645 767c 34       		.uleb128 0x34
+ 37646 767d DA0C0000 		.long	0xcda
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1004
+
+
+ 37647 7681 03       		.byte	0x3
+ 37648 7682 91       		.byte	0x91
+ 37649 7683 A055     		.sleb128 -5472
+ 37650 7685 34       		.uleb128 0x34
+ 37651 7686 E50C0000 		.long	0xce5
+ 37652 768a 03       		.byte	0x3
+ 37653 768b 91       		.byte	0x91
+ 37654 768c 9055     		.sleb128 -5488
+ 37655 768e 34       		.uleb128 0x34
+ 37656 768f F00C0000 		.long	0xcf0
+ 37657 7693 03       		.byte	0x3
+ 37658 7694 91       		.byte	0x91
+ 37659 7695 8055     		.sleb128 -5504
+ 37660 7697 34       		.uleb128 0x34
+ 37661 7698 FC0C0000 		.long	0xcfc
+ 37662 769c 03       		.byte	0x3
+ 37663 769d 91       		.byte	0x91
+ 37664 769e F054     		.sleb128 -5520
+ 37665 76a0 34       		.uleb128 0x34
+ 37666 76a1 080D0000 		.long	0xd08
+ 37667 76a5 03       		.byte	0x3
+ 37668 76a6 91       		.byte	0x91
+ 37669 76a7 EC54     		.sleb128 -5524
+ 37670 76a9 31       		.uleb128 0x31
+ 37671 76aa 1F0D0000 		.long	0xd1f
+ 37672 76ae 00000000 		.quad	.LBB1956
+ 37672      00000000 
+ 37673 76b6 00000000 		.quad	.LBE1956
+ 37673      00000000 
+ 37674 76be 02       		.byte	0x2
+ 37675 76bf 5603     		.value	0x356
+ 37676 76c1 D8760000 		.long	0x76d8
+ 37677 76c5 32       		.uleb128 0x32
+ 37678 76c6 3A0D0000 		.long	0xd3a
+ 37679 76ca 03       		.byte	0x3
+ 37680 76cb 91       		.byte	0x91
+ 37681 76cc B055     		.sleb128 -5456
+ 37682 76ce 32       		.uleb128 0x32
+ 37683 76cf 300D0000 		.long	0xd30
+ 37684 76d3 03       		.byte	0x3
+ 37685 76d4 91       		.byte	0x91
+ 37686 76d5 C055     		.sleb128 -5440
+ 37687 76d7 00       		.byte	0x0
+ 37688 76d8 31       		.uleb128 0x31
+ 37689 76d9 450D0000 		.long	0xd45
+ 37690 76dd 00000000 		.quad	.LBB1958
+ 37690      00000000 
+ 37691 76e5 00000000 		.quad	.LBE1958
+ 37691      00000000 
+ 37692 76ed 02       		.byte	0x2
+ 37693 76ee 5E03     		.value	0x35e
+ 37694 76f0 07770000 		.long	0x7707
+ 37695 76f4 32       		.uleb128 0x32
+ 37696 76f5 620D0000 		.long	0xd62
+ 37697 76f9 03       		.byte	0x3
+ 37698 76fa 91       		.byte	0x91
+ 37699 76fb D055     		.sleb128 -5424
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1005
+
+
+ 37700 76fd 32       		.uleb128 0x32
+ 37701 76fe 570D0000 		.long	0xd57
+ 37702 7702 03       		.byte	0x3
+ 37703 7703 91       		.byte	0x91
+ 37704 7704 E055     		.sleb128 -5408
+ 37705 7706 00       		.byte	0x0
+ 37706 7707 31       		.uleb128 0x31
+ 37707 7708 6E0D0000 		.long	0xd6e
+ 37708 770c 00000000 		.quad	.LBB1960
+ 37708      00000000 
+ 37709 7714 00000000 		.quad	.LBE1960
+ 37709      00000000 
+ 37710 771c 02       		.byte	0x2
+ 37711 771d 6403     		.value	0x364
+ 37712 771f 6C770000 		.long	0x776c
+ 37713 7723 32       		.uleb128 0x32
+ 37714 7724 8C0D0000 		.long	0xd8c
+ 37715 7728 03       		.byte	0x3
+ 37716 7729 91       		.byte	0x91
+ 37717 772a F055     		.sleb128 -5392
+ 37718 772c 32       		.uleb128 0x32
+ 37719 772d 800D0000 		.long	0xd80
+ 37720 7731 03       		.byte	0x3
+ 37721 7732 91       		.byte	0x91
+ 37722 7733 8056     		.sleb128 -5376
+ 37723 7735 33       		.uleb128 0x33
+ 37724 7736 00000000 		.quad	.LBB1961
+ 37724      00000000 
+ 37725 773e 00000000 		.quad	.LBE1961
+ 37725      00000000 
+ 37726 7746 34       		.uleb128 0x34
+ 37727 7747 980D0000 		.long	0xd98
+ 37728 774b 03       		.byte	0x3
+ 37729 774c 91       		.byte	0x91
+ 37730 774d E040     		.sleb128 -8096
+ 37731 774f 34       		.uleb128 0x34
+ 37732 7750 A40D0000 		.long	0xda4
+ 37733 7754 03       		.byte	0x3
+ 37734 7755 91       		.byte	0x91
+ 37735 7756 D040     		.sleb128 -8112
+ 37736 7758 34       		.uleb128 0x34
+ 37737 7759 AF0D0000 		.long	0xdaf
+ 37738 775d 03       		.byte	0x3
+ 37739 775e 91       		.byte	0x91
+ 37740 775f C040     		.sleb128 -8128
+ 37741 7761 34       		.uleb128 0x34
+ 37742 7762 BB0D0000 		.long	0xdbb
+ 37743 7766 03       		.byte	0x3
+ 37744 7767 91       		.byte	0x91
+ 37745 7768 9C56     		.sleb128 -5348
+ 37746 776a 00       		.byte	0x0
+ 37747 776b 00       		.byte	0x0
+ 37748 776c 31       		.uleb128 0x31
+ 37749 776d C70D0000 		.long	0xdc7
+ 37750 7771 00000000 		.quad	.LBB1962
+ 37750      00000000 
+ 37751 7779 00000000 		.quad	.LBE1962
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1006
+
+
+ 37751      00000000 
+ 37752 7781 02       		.byte	0x2
+ 37753 7782 6603     		.value	0x366
+ 37754 7784 9B770000 		.long	0x779b
+ 37755 7788 32       		.uleb128 0x32
+ 37756 7789 E20D0000 		.long	0xde2
+ 37757 778d 03       		.byte	0x3
+ 37758 778e 91       		.byte	0x91
+ 37759 778f A056     		.sleb128 -5344
+ 37760 7791 32       		.uleb128 0x32
+ 37761 7792 D80D0000 		.long	0xdd8
+ 37762 7796 03       		.byte	0x3
+ 37763 7797 91       		.byte	0x91
+ 37764 7798 B056     		.sleb128 -5328
+ 37765 779a 00       		.byte	0x0
+ 37766 779b 31       		.uleb128 0x31
+ 37767 779c 6E0D0000 		.long	0xd6e
+ 37768 77a0 00000000 		.quad	.LBB1964
+ 37768      00000000 
+ 37769 77a8 00000000 		.quad	.LBE1964
+ 37769      00000000 
+ 37770 77b0 02       		.byte	0x2
+ 37771 77b1 6803     		.value	0x368
+ 37772 77b3 00780000 		.long	0x7800
+ 37773 77b7 32       		.uleb128 0x32
+ 37774 77b8 8C0D0000 		.long	0xd8c
+ 37775 77bc 03       		.byte	0x3
+ 37776 77bd 91       		.byte	0x91
+ 37777 77be C056     		.sleb128 -5312
+ 37778 77c0 32       		.uleb128 0x32
+ 37779 77c1 800D0000 		.long	0xd80
+ 37780 77c5 03       		.byte	0x3
+ 37781 77c6 91       		.byte	0x91
+ 37782 77c7 D056     		.sleb128 -5296
+ 37783 77c9 33       		.uleb128 0x33
+ 37784 77ca 00000000 		.quad	.LBB1965
+ 37784      00000000 
+ 37785 77d2 00000000 		.quad	.LBE1965
+ 37785      00000000 
+ 37786 77da 34       		.uleb128 0x34
+ 37787 77db 980D0000 		.long	0xd98
+ 37788 77df 03       		.byte	0x3
+ 37789 77e0 91       		.byte	0x91
+ 37790 77e1 9041     		.sleb128 -8048
+ 37791 77e3 34       		.uleb128 0x34
+ 37792 77e4 A40D0000 		.long	0xda4
+ 37793 77e8 03       		.byte	0x3
+ 37794 77e9 91       		.byte	0x91
+ 37795 77ea 8041     		.sleb128 -8064
+ 37796 77ec 34       		.uleb128 0x34
+ 37797 77ed AF0D0000 		.long	0xdaf
+ 37798 77f1 03       		.byte	0x3
+ 37799 77f2 91       		.byte	0x91
+ 37800 77f3 F040     		.sleb128 -8080
+ 37801 77f5 34       		.uleb128 0x34
+ 37802 77f6 BB0D0000 		.long	0xdbb
+ 37803 77fa 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1007
+
+
+ 37804 77fb 91       		.byte	0x91
+ 37805 77fc EC56     		.sleb128 -5268
+ 37806 77fe 00       		.byte	0x0
+ 37807 77ff 00       		.byte	0x0
+ 37808 7800 31       		.uleb128 0x31
+ 37809 7801 C70D0000 		.long	0xdc7
+ 37810 7805 00000000 		.quad	.LBB1966
+ 37810      00000000 
+ 37811 780d 00000000 		.quad	.LBE1966
+ 37811      00000000 
+ 37812 7815 02       		.byte	0x2
+ 37813 7816 6A03     		.value	0x36a
+ 37814 7818 2F780000 		.long	0x782f
+ 37815 781c 32       		.uleb128 0x32
+ 37816 781d E20D0000 		.long	0xde2
+ 37817 7821 03       		.byte	0x3
+ 37818 7822 91       		.byte	0x91
+ 37819 7823 F056     		.sleb128 -5264
+ 37820 7825 32       		.uleb128 0x32
+ 37821 7826 D80D0000 		.long	0xdd8
+ 37822 782a 03       		.byte	0x3
+ 37823 782b 91       		.byte	0x91
+ 37824 782c 8057     		.sleb128 -5248
+ 37825 782e 00       		.byte	0x0
+ 37826 782f 31       		.uleb128 0x31
+ 37827 7830 ED0D0000 		.long	0xded
+ 37828 7834 00000000 		.quad	.LBB1968
+ 37828      00000000 
+ 37829 783c 00000000 		.quad	.LBE1968
+ 37829      00000000 
+ 37830 7844 02       		.byte	0x2
+ 37831 7845 6C03     		.value	0x36c
+ 37832 7847 5E780000 		.long	0x785e
+ 37833 784b 32       		.uleb128 0x32
+ 37834 784c 0A0E0000 		.long	0xe0a
+ 37835 7850 03       		.byte	0x3
+ 37836 7851 91       		.byte	0x91
+ 37837 7852 9057     		.sleb128 -5232
+ 37838 7854 32       		.uleb128 0x32
+ 37839 7855 FF0D0000 		.long	0xdff
+ 37840 7859 03       		.byte	0x3
+ 37841 785a 91       		.byte	0x91
+ 37842 785b A057     		.sleb128 -5216
+ 37843 785d 00       		.byte	0x0
+ 37844 785e 35       		.uleb128 0x35
+ 37845 785f 1F0D0000 		.long	0xd1f
+ 37846 7863 00000000 		.quad	.LBB1970
+ 37846      00000000 
+ 37847 786b 00000000 		.quad	.LBE1970
+ 37847      00000000 
+ 37848 7873 02       		.byte	0x2
+ 37849 7874 6E03     		.value	0x36e
+ 37850 7876 32       		.uleb128 0x32
+ 37851 7877 3A0D0000 		.long	0xd3a
+ 37852 787b 03       		.byte	0x3
+ 37853 787c 91       		.byte	0x91
+ 37854 787d B057     		.sleb128 -5200
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1008
+
+
+ 37855 787f 32       		.uleb128 0x32
+ 37856 7880 300D0000 		.long	0xd30
+ 37857 7884 03       		.byte	0x3
+ 37858 7885 91       		.byte	0x91
+ 37859 7886 C057     		.sleb128 -5184
+ 37860 7888 00       		.byte	0x0
+ 37861 7889 00       		.byte	0x0
+ 37862 788a 00       		.byte	0x0
+ 37863 788b 00       		.byte	0x0
+ 37864 788c 36       		.uleb128 0x36
+ 37865 788d 00000000 		.quad	.LBB1972
+ 37865      00000000 
+ 37866 7895 00000000 		.quad	.LBE1972
+ 37866      00000000 
+ 37867 789d AB780000 		.long	0x78ab
+ 37868 78a1 34       		.uleb128 0x34
+ 37869 78a2 180C0000 		.long	0xc18
+ 37870 78a6 03       		.byte	0x3
+ 37871 78a7 91       		.byte	0x91
+ 37872 78a8 A040     		.sleb128 -8160
+ 37873 78aa 00       		.byte	0x0
+ 37874 78ab 31       		.uleb128 0x31
+ 37875 78ac 160E0000 		.long	0xe16
+ 37876 78b0 00000000 		.quad	.LBB1973
+ 37876      00000000 
+ 37877 78b8 00000000 		.quad	.LBE1973
+ 37877      00000000 
+ 37878 78c0 02       		.byte	0x2
+ 37879 78c1 9406     		.value	0x694
+ 37880 78c3 53790000 		.long	0x7953
+ 37881 78c7 32       		.uleb128 0x32
+ 37882 78c8 280E0000 		.long	0xe28
+ 37883 78cc 03       		.byte	0x3
+ 37884 78cd 91       		.byte	0x91
+ 37885 78ce D057     		.sleb128 -5168
+ 37886 78d0 33       		.uleb128 0x33
+ 37887 78d1 00000000 		.quad	.LBB1974
+ 37887      00000000 
+ 37888 78d9 00000000 		.quad	.LBE1974
+ 37888      00000000 
+ 37889 78e1 34       		.uleb128 0x34
+ 37890 78e2 340E0000 		.long	0xe34
+ 37891 78e6 09       		.byte	0x9
+ 37892 78e7 03       		.byte	0x3
+ 37893 78e8 00000000 		.quad	ShiftRowTable.6768
+ 37893      00000000 
+ 37894 78f0 35       		.uleb128 0x35
+ 37895 78f1 6E0D0000 		.long	0xd6e
+ 37896 78f5 00000000 		.quad	.LBB1975
+ 37896      00000000 
+ 37897 78fd 00000000 		.quad	.LBE1975
+ 37897      00000000 
+ 37898 7905 02       		.byte	0x2
+ 37899 7906 9B02     		.value	0x29b
+ 37900 7908 32       		.uleb128 0x32
+ 37901 7909 8C0D0000 		.long	0xd8c
+ 37902 790d 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1009
+
+
+ 37903 790e 91       		.byte	0x91
+ 37904 790f E057     		.sleb128 -5152
+ 37905 7911 32       		.uleb128 0x32
+ 37906 7912 800D0000 		.long	0xd80
+ 37907 7916 03       		.byte	0x3
+ 37908 7917 91       		.byte	0x91
+ 37909 7918 F057     		.sleb128 -5136
+ 37910 791a 33       		.uleb128 0x33
+ 37911 791b 00000000 		.quad	.LBB1976
+ 37911      00000000 
+ 37912 7923 00000000 		.quad	.LBE1976
+ 37912      00000000 
+ 37913 792b 34       		.uleb128 0x34
+ 37914 792c 980D0000 		.long	0xd98
+ 37915 7930 03       		.byte	0x3
+ 37916 7931 91       		.byte	0x91
+ 37917 7932 C041     		.sleb128 -8000
+ 37918 7934 34       		.uleb128 0x34
+ 37919 7935 A40D0000 		.long	0xda4
+ 37920 7939 03       		.byte	0x3
+ 37921 793a 91       		.byte	0x91
+ 37922 793b B041     		.sleb128 -8016
+ 37923 793d 34       		.uleb128 0x34
+ 37924 793e AF0D0000 		.long	0xdaf
+ 37925 7942 03       		.byte	0x3
+ 37926 7943 91       		.byte	0x91
+ 37927 7944 A041     		.sleb128 -8032
+ 37928 7946 34       		.uleb128 0x34
+ 37929 7947 BB0D0000 		.long	0xdbb
+ 37930 794b 03       		.byte	0x3
+ 37931 794c 91       		.byte	0x91
+ 37932 794d 8C58     		.sleb128 -5108
+ 37933 794f 00       		.byte	0x0
+ 37934 7950 00       		.byte	0x0
+ 37935 7951 00       		.byte	0x0
+ 37936 7952 00       		.byte	0x0
+ 37937 7953 36       		.uleb128 0x36
+ 37938 7954 00000000 		.quad	.LBB1977
+ 37938      00000000 
+ 37939 795c 00000000 		.quad	.LBE1977
+ 37939      00000000 
+ 37940 7964 72790000 		.long	0x7972
+ 37941 7968 34       		.uleb128 0x34
+ 37942 7969 280C0000 		.long	0xc28
+ 37943 796d 03       		.byte	0x3
+ 37944 796e 91       		.byte	0x91
+ 37945 796f 9040     		.sleb128 -8176
+ 37946 7971 00       		.byte	0x0
+ 37947 7972 31       		.uleb128 0x31
+ 37948 7973 520E0000 		.long	0xe52
+ 37949 7977 00000000 		.quad	.LBB1978
+ 37949      00000000 
+ 37950 797f 00000000 		.quad	.LBE1978
+ 37950      00000000 
+ 37951 7987 02       		.byte	0x2
+ 37952 7988 9606     		.value	0x696
+ 37953 798a A1790000 		.long	0x79a1
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1010
+
+
+ 37954 798e 32       		.uleb128 0x32
+ 37955 798f 6D0E0000 		.long	0xe6d
+ 37956 7993 03       		.byte	0x3
+ 37957 7994 91       		.byte	0x91
+ 37958 7995 9058     		.sleb128 -5104
+ 37959 7997 32       		.uleb128 0x32
+ 37960 7998 630E0000 		.long	0xe63
+ 37961 799c 03       		.byte	0x3
+ 37962 799d 91       		.byte	0x91
+ 37963 799e A058     		.sleb128 -5088
+ 37964 79a0 00       		.byte	0x0
+ 37965 79a1 36       		.uleb128 0x36
+ 37966 79a2 00000000 		.quad	.LBB1980
+ 37966      00000000 
+ 37967 79aa 00000000 		.quad	.LBE1980
+ 37967      00000000 
+ 37968 79b2 C0790000 		.long	0x79c0
+ 37969 79b6 34       		.uleb128 0x34
+ 37970 79b7 380C0000 		.long	0xc38
+ 37971 79bb 03       		.byte	0x3
+ 37972 79bc 91       		.byte	0x91
+ 37973 79bd 8040     		.sleb128 -8192
+ 37974 79bf 00       		.byte	0x0
+ 37975 79c0 31       		.uleb128 0x31
+ 37976 79c1 780E0000 		.long	0xe78
+ 37977 79c5 00000000 		.quad	.LBB1981
+ 37977      00000000 
+ 37978 79cd 00000000 		.quad	.LBE1981
+ 37978      00000000 
+ 37979 79d5 02       		.byte	0x2
+ 37980 79d6 9806     		.value	0x698
+ 37981 79d8 017A0000 		.long	0x7a01
+ 37982 79dc 32       		.uleb128 0x32
+ 37983 79dd 8A0E0000 		.long	0xe8a
+ 37984 79e1 03       		.byte	0x3
+ 37985 79e2 91       		.byte	0x91
+ 37986 79e3 B058     		.sleb128 -5072
+ 37987 79e5 33       		.uleb128 0x33
+ 37988 79e6 00000000 		.quad	.LBB1982
+ 37988      00000000 
+ 37989 79ee 00000000 		.quad	.LBE1982
+ 37989      00000000 
+ 37990 79f6 34       		.uleb128 0x34
+ 37991 79f7 960E0000 		.long	0xe96
+ 37992 79fb 03       		.byte	0x3
+ 37993 79fc 91       		.byte	0x91
+ 37994 79fd D041     		.sleb128 -7984
+ 37995 79ff 00       		.byte	0x0
+ 37996 7a00 00       		.byte	0x0
+ 37997 7a01 33       		.uleb128 0x33
+ 37998 7a02 00000000 		.quad	.LBB1983
+ 37998      00000000 
+ 37999 7a0a 00000000 		.quad	.LBE1983
+ 37999      00000000 
+ 38000 7a12 34       		.uleb128 0x34
+ 38001 7a13 440C0000 		.long	0xc44
+ 38002 7a17 04       		.byte	0x4
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1011
+
+
+ 38003 7a18 91       		.byte	0x91
+ 38004 7a19 F0BF7F   		.sleb128 -8208
+ 38005 7a1c 00       		.byte	0x0
+ 38006 7a1d 00       		.byte	0x0
+ 38007 7a1e 00       		.byte	0x0
+ 38008 7a1f 31       		.uleb128 0x31
+ 38009 7a20 A30E0000 		.long	0xea3
+ 38010 7a24 00000000 		.quad	.LBB1984
+ 38010      00000000 
+ 38011 7a2c 00000000 		.quad	.LBE1984
+ 38011      00000000 
+ 38012 7a34 02       		.byte	0x2
+ 38013 7a35 8607     		.value	0x786
+ 38014 7a37 207B0000 		.long	0x7b20
+ 38015 7a3b 32       		.uleb128 0x32
+ 38016 7a3c B50E0000 		.long	0xeb5
+ 38017 7a40 03       		.byte	0x3
+ 38018 7a41 91       		.byte	0x91
+ 38019 7a42 C058     		.sleb128 -5056
+ 38020 7a44 33       		.uleb128 0x33
+ 38021 7a45 00000000 		.quad	.LBB1985
+ 38021      00000000 
+ 38022 7a4d 00000000 		.quad	.LBE1985
+ 38022      00000000 
+ 38023 7a55 34       		.uleb128 0x34
+ 38024 7a56 C10E0000 		.long	0xec1
+ 38025 7a5a 04       		.byte	0x4
+ 38026 7a5b 76       		.byte	0x76
+ 38027 7a5c E0BB7F   		.sleb128 -8736
+ 38028 7a5f 31       		.uleb128 0x31
+ 38029 7a60 CE0E0000 		.long	0xece
+ 38030 7a64 00000000 		.quad	.LBB1986
+ 38030      00000000 
+ 38031 7a6c 00000000 		.quad	.LBE1986
+ 38031      00000000 
+ 38032 7a74 02       		.byte	0x2
+ 38033 7a75 1F06     		.value	0x61f
+ 38034 7a77 A07A0000 		.long	0x7aa0
+ 38035 7a7b 32       		.uleb128 0x32
+ 38036 7a7c E00E0000 		.long	0xee0
+ 38037 7a80 03       		.byte	0x3
+ 38038 7a81 91       		.byte	0x91
+ 38039 7a82 D058     		.sleb128 -5040
+ 38040 7a84 33       		.uleb128 0x33
+ 38041 7a85 00000000 		.quad	.LBB1987
+ 38041      00000000 
+ 38042 7a8d 00000000 		.quad	.LBE1987
+ 38042      00000000 
+ 38043 7a95 34       		.uleb128 0x34
+ 38044 7a96 EC0E0000 		.long	0xeec
+ 38045 7a9a 03       		.byte	0x3
+ 38046 7a9b 91       		.byte	0x91
+ 38047 7a9c E041     		.sleb128 -7968
+ 38048 7a9e 00       		.byte	0x0
+ 38049 7a9f 00       		.byte	0x0
+ 38050 7aa0 31       		.uleb128 0x31
+ 38051 7aa1 CE0E0000 		.long	0xece
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1012
+
+
+ 38052 7aa5 00000000 		.quad	.LBB1988
+ 38052      00000000 
+ 38053 7aad 00000000 		.quad	.LBE1988
+ 38053      00000000 
+ 38054 7ab5 02       		.byte	0x2
+ 38055 7ab6 2006     		.value	0x620
+ 38056 7ab8 E17A0000 		.long	0x7ae1
+ 38057 7abc 32       		.uleb128 0x32
+ 38058 7abd E00E0000 		.long	0xee0
+ 38059 7ac1 03       		.byte	0x3
+ 38060 7ac2 91       		.byte	0x91
+ 38061 7ac3 E058     		.sleb128 -5024
+ 38062 7ac5 33       		.uleb128 0x33
+ 38063 7ac6 00000000 		.quad	.LBB1989
+ 38063      00000000 
+ 38064 7ace 00000000 		.quad	.LBE1989
+ 38064      00000000 
+ 38065 7ad6 34       		.uleb128 0x34
+ 38066 7ad7 EC0E0000 		.long	0xeec
+ 38067 7adb 03       		.byte	0x3
+ 38068 7adc 91       		.byte	0x91
+ 38069 7add F041     		.sleb128 -7952
+ 38070 7adf 00       		.byte	0x0
+ 38071 7ae0 00       		.byte	0x0
+ 38072 7ae1 35       		.uleb128 0x35
+ 38073 7ae2 CE0E0000 		.long	0xece
+ 38074 7ae6 00000000 		.quad	.LBB1990
+ 38074      00000000 
+ 38075 7aee 00000000 		.quad	.LBE1990
+ 38075      00000000 
+ 38076 7af6 02       		.byte	0x2
+ 38077 7af7 2106     		.value	0x621
+ 38078 7af9 32       		.uleb128 0x32
+ 38079 7afa E00E0000 		.long	0xee0
+ 38080 7afe 03       		.byte	0x3
+ 38081 7aff 91       		.byte	0x91
+ 38082 7b00 F058     		.sleb128 -5008
+ 38083 7b02 33       		.uleb128 0x33
+ 38084 7b03 00000000 		.quad	.LBB1991
+ 38084      00000000 
+ 38085 7b0b 00000000 		.quad	.LBE1991
+ 38085      00000000 
+ 38086 7b13 34       		.uleb128 0x34
+ 38087 7b14 EC0E0000 		.long	0xeec
+ 38088 7b18 03       		.byte	0x3
+ 38089 7b19 91       		.byte	0x91
+ 38090 7b1a 8042     		.sleb128 -7936
+ 38091 7b1c 00       		.byte	0x0
+ 38092 7b1d 00       		.byte	0x0
+ 38093 7b1e 00       		.byte	0x0
+ 38094 7b1f 00       		.byte	0x0
+ 38095 7b20 31       		.uleb128 0x31
+ 38096 7b21 520E0000 		.long	0xe52
+ 38097 7b25 00000000 		.quad	.LBB1992
+ 38097      00000000 
+ 38098 7b2d 00000000 		.quad	.LBE1992
+ 38098      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1013
+
+
+ 38099 7b35 02       		.byte	0x2
+ 38100 7b36 8607     		.value	0x786
+ 38101 7b38 4F7B0000 		.long	0x7b4f
+ 38102 7b3c 32       		.uleb128 0x32
+ 38103 7b3d 6D0E0000 		.long	0xe6d
+ 38104 7b41 03       		.byte	0x3
+ 38105 7b42 91       		.byte	0x91
+ 38106 7b43 8059     		.sleb128 -4992
+ 38107 7b45 32       		.uleb128 0x32
+ 38108 7b46 630E0000 		.long	0xe63
+ 38109 7b4a 03       		.byte	0x3
+ 38110 7b4b 91       		.byte	0x91
+ 38111 7b4c 9059     		.sleb128 -4976
+ 38112 7b4e 00       		.byte	0x0
+ 38113 7b4f 31       		.uleb128 0x31
+ 38114 7b50 4E740000 		.long	0x744e
+ 38115 7b54 00000000 		.quad	.LBB1994
+ 38115      00000000 
+ 38116 7b5c 00000000 		.quad	.LBE1994
+ 38116      00000000 
+ 38117 7b64 02       		.byte	0x2
+ 38118 7b65 8707     		.value	0x787
+ 38119 7b67 DF7B0000 		.long	0x7bdf
+ 38120 7b6b 32       		.uleb128 0x32
+ 38121 7b6c 60740000 		.long	0x7460
+ 38122 7b70 03       		.byte	0x3
+ 38123 7b71 91       		.byte	0x91
+ 38124 7b72 A059     		.sleb128 -4960
+ 38125 7b74 33       		.uleb128 0x33
+ 38126 7b75 00000000 		.quad	.LBB1995
+ 38126      00000000 
+ 38127 7b7d 00000000 		.quad	.LBE1995
+ 38127      00000000 
+ 38128 7b85 34       		.uleb128 0x34
+ 38129 7b86 6C740000 		.long	0x746c
+ 38130 7b8a 03       		.byte	0x3
+ 38131 7b8b 91       		.byte	0x91
+ 38132 7b8c A042     		.sleb128 -7904
+ 38133 7b8e 34       		.uleb128 0x34
+ 38134 7b8f 76740000 		.long	0x7476
+ 38135 7b93 03       		.byte	0x3
+ 38136 7b94 91       		.byte	0x91
+ 38137 7b95 B459     		.sleb128 -4940
+ 38138 7b97 35       		.uleb128 0x35
+ 38139 7b98 12490000 		.long	0x4912
+ 38140 7b9c 00000000 		.quad	.LBB1996
+ 38140      00000000 
+ 38141 7ba4 00000000 		.quad	.LBE1996
+ 38141      00000000 
+ 38142 7bac 02       		.byte	0x2
+ 38143 7bad 7906     		.value	0x679
+ 38144 7baf 32       		.uleb128 0x32
+ 38145 7bb0 24490000 		.long	0x4924
+ 38146 7bb4 03       		.byte	0x3
+ 38147 7bb5 91       		.byte	0x91
+ 38148 7bb6 B859     		.sleb128 -4936
+ 38149 7bb8 33       		.uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1014
+
+
+ 38150 7bb9 00000000 		.quad	.LBB1997
+ 38150      00000000 
+ 38151 7bc1 00000000 		.quad	.LBE1997
+ 38151      00000000 
+ 38152 7bc9 34       		.uleb128 0x34
+ 38153 7bca 2E490000 		.long	0x492e
+ 38154 7bce 03       		.byte	0x3
+ 38155 7bcf 91       		.byte	0x91
+ 38156 7bd0 9042     		.sleb128 -7920
+ 38157 7bd2 34       		.uleb128 0x34
+ 38158 7bd3 3A490000 		.long	0x493a
+ 38159 7bd7 03       		.byte	0x3
+ 38160 7bd8 91       		.byte	0x91
+ 38161 7bd9 BC59     		.sleb128 -4932
+ 38162 7bdb 00       		.byte	0x0
+ 38163 7bdc 00       		.byte	0x0
+ 38164 7bdd 00       		.byte	0x0
+ 38165 7bde 00       		.byte	0x0
+ 38166 7bdf 31       		.uleb128 0x31
+ 38167 7be0 A30E0000 		.long	0xea3
+ 38168 7be4 00000000 		.quad	.LBB1998
+ 38168      00000000 
+ 38169 7bec 00000000 		.quad	.LBE1998
+ 38169      00000000 
+ 38170 7bf4 02       		.byte	0x2
+ 38171 7bf5 8707     		.value	0x787
+ 38172 7bf7 E07C0000 		.long	0x7ce0
+ 38173 7bfb 32       		.uleb128 0x32
+ 38174 7bfc B50E0000 		.long	0xeb5
+ 38175 7c00 03       		.byte	0x3
+ 38176 7c01 91       		.byte	0x91
+ 38177 7c02 C059     		.sleb128 -4928
+ 38178 7c04 33       		.uleb128 0x33
+ 38179 7c05 00000000 		.quad	.LBB1999
+ 38179      00000000 
+ 38180 7c0d 00000000 		.quad	.LBE1999
+ 38180      00000000 
+ 38181 7c15 34       		.uleb128 0x34
+ 38182 7c16 C10E0000 		.long	0xec1
+ 38183 7c1a 04       		.byte	0x4
+ 38184 7c1b 76       		.byte	0x76
+ 38185 7c1c F0BB7F   		.sleb128 -8720
+ 38186 7c1f 31       		.uleb128 0x31
+ 38187 7c20 CE0E0000 		.long	0xece
+ 38188 7c24 00000000 		.quad	.LBB2000
+ 38188      00000000 
+ 38189 7c2c 00000000 		.quad	.LBE2000
+ 38189      00000000 
+ 38190 7c34 02       		.byte	0x2
+ 38191 7c35 1F06     		.value	0x61f
+ 38192 7c37 607C0000 		.long	0x7c60
+ 38193 7c3b 32       		.uleb128 0x32
+ 38194 7c3c E00E0000 		.long	0xee0
+ 38195 7c40 03       		.byte	0x3
+ 38196 7c41 91       		.byte	0x91
+ 38197 7c42 D059     		.sleb128 -4912
+ 38198 7c44 33       		.uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1015
+
+
+ 38199 7c45 00000000 		.quad	.LBB2001
+ 38199      00000000 
+ 38200 7c4d 00000000 		.quad	.LBE2001
+ 38200      00000000 
+ 38201 7c55 34       		.uleb128 0x34
+ 38202 7c56 EC0E0000 		.long	0xeec
+ 38203 7c5a 03       		.byte	0x3
+ 38204 7c5b 91       		.byte	0x91
+ 38205 7c5c B042     		.sleb128 -7888
+ 38206 7c5e 00       		.byte	0x0
+ 38207 7c5f 00       		.byte	0x0
+ 38208 7c60 31       		.uleb128 0x31
+ 38209 7c61 CE0E0000 		.long	0xece
+ 38210 7c65 00000000 		.quad	.LBB2002
+ 38210      00000000 
+ 38211 7c6d 00000000 		.quad	.LBE2002
+ 38211      00000000 
+ 38212 7c75 02       		.byte	0x2
+ 38213 7c76 2006     		.value	0x620
+ 38214 7c78 A17C0000 		.long	0x7ca1
+ 38215 7c7c 32       		.uleb128 0x32
+ 38216 7c7d E00E0000 		.long	0xee0
+ 38217 7c81 03       		.byte	0x3
+ 38218 7c82 91       		.byte	0x91
+ 38219 7c83 E059     		.sleb128 -4896
+ 38220 7c85 33       		.uleb128 0x33
+ 38221 7c86 00000000 		.quad	.LBB2003
+ 38221      00000000 
+ 38222 7c8e 00000000 		.quad	.LBE2003
+ 38222      00000000 
+ 38223 7c96 34       		.uleb128 0x34
+ 38224 7c97 EC0E0000 		.long	0xeec
+ 38225 7c9b 03       		.byte	0x3
+ 38226 7c9c 91       		.byte	0x91
+ 38227 7c9d C042     		.sleb128 -7872
+ 38228 7c9f 00       		.byte	0x0
+ 38229 7ca0 00       		.byte	0x0
+ 38230 7ca1 35       		.uleb128 0x35
+ 38231 7ca2 CE0E0000 		.long	0xece
+ 38232 7ca6 00000000 		.quad	.LBB2004
+ 38232      00000000 
+ 38233 7cae 00000000 		.quad	.LBE2004
+ 38233      00000000 
+ 38234 7cb6 02       		.byte	0x2
+ 38235 7cb7 2106     		.value	0x621
+ 38236 7cb9 32       		.uleb128 0x32
+ 38237 7cba E00E0000 		.long	0xee0
+ 38238 7cbe 03       		.byte	0x3
+ 38239 7cbf 91       		.byte	0x91
+ 38240 7cc0 F059     		.sleb128 -4880
+ 38241 7cc2 33       		.uleb128 0x33
+ 38242 7cc3 00000000 		.quad	.LBB2005
+ 38242      00000000 
+ 38243 7ccb 00000000 		.quad	.LBE2005
+ 38243      00000000 
+ 38244 7cd3 34       		.uleb128 0x34
+ 38245 7cd4 EC0E0000 		.long	0xeec
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1016
+
+
+ 38246 7cd8 03       		.byte	0x3
+ 38247 7cd9 91       		.byte	0x91
+ 38248 7cda D042     		.sleb128 -7856
+ 38249 7cdc 00       		.byte	0x0
+ 38250 7cdd 00       		.byte	0x0
+ 38251 7cde 00       		.byte	0x0
+ 38252 7cdf 00       		.byte	0x0
+ 38253 7ce0 31       		.uleb128 0x31
+ 38254 7ce1 520E0000 		.long	0xe52
+ 38255 7ce5 00000000 		.quad	.LBB2006
+ 38255      00000000 
+ 38256 7ced 00000000 		.quad	.LBE2006
+ 38256      00000000 
+ 38257 7cf5 02       		.byte	0x2
+ 38258 7cf6 8707     		.value	0x787
+ 38259 7cf8 0F7D0000 		.long	0x7d0f
+ 38260 7cfc 32       		.uleb128 0x32
+ 38261 7cfd 6D0E0000 		.long	0xe6d
+ 38262 7d01 03       		.byte	0x3
+ 38263 7d02 91       		.byte	0x91
+ 38264 7d03 805A     		.sleb128 -4864
+ 38265 7d05 32       		.uleb128 0x32
+ 38266 7d06 630E0000 		.long	0xe63
+ 38267 7d0a 03       		.byte	0x3
+ 38268 7d0b 91       		.byte	0x91
+ 38269 7d0c 905A     		.sleb128 -4848
+ 38270 7d0e 00       		.byte	0x0
+ 38271 7d0f 31       		.uleb128 0x31
+ 38272 7d10 D10B0000 		.long	0xbd1
+ 38273 7d14 00000000 		.quad	.LBB2008
+ 38273      00000000 
+ 38274 7d1c 00000000 		.quad	.LBE2008
+ 38274      00000000 
+ 38275 7d24 02       		.byte	0x2
+ 38276 7d25 8807     		.value	0x788
+ 38277 7d27 B7810000 		.long	0x81b7
+ 38278 7d2b 32       		.uleb128 0x32
+ 38279 7d2c EF0B0000 		.long	0xbef
+ 38280 7d30 03       		.byte	0x3
+ 38281 7d31 91       		.byte	0x91
+ 38282 7d32 AC5A     		.sleb128 -4820
+ 38283 7d34 32       		.uleb128 0x32
+ 38284 7d35 E30B0000 		.long	0xbe3
+ 38285 7d39 03       		.byte	0x3
+ 38286 7d3a 91       		.byte	0x91
+ 38287 7d3b B05A     		.sleb128 -4816
+ 38288 7d3d 33       		.uleb128 0x33
+ 38289 7d3e 00000000 		.quad	.LBB2009
+ 38289      00000000 
+ 38290 7d46 00000000 		.quad	.LBE2009
+ 38290      00000000 
+ 38291 7d4e 34       		.uleb128 0x34
+ 38292 7d4f FB0B0000 		.long	0xbfb
+ 38293 7d53 04       		.byte	0x4
+ 38294 7d54 76       		.byte	0x76
+ 38295 7d55 90BC7F   		.sleb128 -8688
+ 38296 7d58 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1017
+
+
+ 38297 7d59 070C0000 		.long	0xc07
+ 38298 7d5d 04       		.byte	0x4
+ 38299 7d5e 76       		.byte	0x76
+ 38300 7d5f 80BC7F   		.sleb128 -8704
+ 38301 7d62 31       		.uleb128 0x31
+ 38302 7d63 500C0000 		.long	0xc50
+ 38303 7d67 00000000 		.quad	.LBB2010
+ 38303      00000000 
+ 38304 7d6f 00000000 		.quad	.LBE2010
+ 38304      00000000 
+ 38305 7d77 02       		.byte	0x2
+ 38306 7d78 9106     		.value	0x691
+ 38307 7d7a B57D0000 		.long	0x7db5
+ 38308 7d7e 32       		.uleb128 0x32
+ 38309 7d7f 7A0C0000 		.long	0xc7a
+ 38310 7d83 03       		.byte	0x3
+ 38311 7d84 91       		.byte	0x91
+ 38312 7d85 C85A     		.sleb128 -4792
+ 38313 7d87 32       		.uleb128 0x32
+ 38314 7d88 6E0C0000 		.long	0xc6e
+ 38315 7d8c 03       		.byte	0x3
+ 38316 7d8d 91       		.byte	0x91
+ 38317 7d8e CC5A     		.sleb128 -4788
+ 38318 7d90 32       		.uleb128 0x32
+ 38319 7d91 620C0000 		.long	0xc62
+ 38320 7d95 03       		.byte	0x3
+ 38321 7d96 91       		.byte	0x91
+ 38322 7d97 D05A     		.sleb128 -4784
+ 38323 7d99 33       		.uleb128 0x33
+ 38324 7d9a 00000000 		.quad	.LBB2011
+ 38324      00000000 
+ 38325 7da2 00000000 		.quad	.LBE2011
+ 38325      00000000 
+ 38326 7daa 34       		.uleb128 0x34
+ 38327 7dab 860C0000 		.long	0xc86
+ 38328 7daf 03       		.byte	0x3
+ 38329 7db0 91       		.byte	0x91
+ 38330 7db1 A043     		.sleb128 -7776
+ 38331 7db3 00       		.byte	0x0
+ 38332 7db4 00       		.byte	0x0
+ 38333 7db5 31       		.uleb128 0x31
+ 38334 7db6 910C0000 		.long	0xc91
+ 38335 7dba 00000000 		.quad	.LBB2012
+ 38335      00000000 
+ 38336 7dc2 00000000 		.quad	.LBE2012
+ 38336      00000000 
+ 38337 7dca 02       		.byte	0x2
+ 38338 7dcb 9206     		.value	0x692
+ 38339 7dcd 25800000 		.long	0x8025
+ 38340 7dd1 32       		.uleb128 0x32
+ 38341 7dd2 A30C0000 		.long	0xca3
+ 38342 7dd6 03       		.byte	0x3
+ 38343 7dd7 91       		.byte	0x91
+ 38344 7dd8 E05A     		.sleb128 -4768
+ 38345 7dda 35       		.uleb128 0x35
+ 38346 7ddb B00C0000 		.long	0xcb0
+ 38347 7ddf 00000000 		.quad	.LBB2014
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1018
+
+
+ 38347      00000000 
+ 38348 7de7 00000000 		.quad	.LBE2014
+ 38348      00000000 
+ 38349 7def 02       		.byte	0x2
+ 38350 7df0 7D03     		.value	0x37d
+ 38351 7df2 32       		.uleb128 0x32
+ 38352 7df3 CE0C0000 		.long	0xcce
+ 38353 7df7 03       		.byte	0x3
+ 38354 7df8 91       		.byte	0x91
+ 38355 7df9 F85A     		.sleb128 -4744
+ 38356 7dfb 32       		.uleb128 0x32
+ 38357 7dfc C20C0000 		.long	0xcc2
+ 38358 7e00 03       		.byte	0x3
+ 38359 7e01 91       		.byte	0x91
+ 38360 7e02 805B     		.sleb128 -4736
+ 38361 7e04 33       		.uleb128 0x33
+ 38362 7e05 00000000 		.quad	.LBB2015
+ 38362      00000000 
+ 38363 7e0d 00000000 		.quad	.LBE2015
+ 38363      00000000 
+ 38364 7e15 34       		.uleb128 0x34
+ 38365 7e16 DA0C0000 		.long	0xcda
+ 38366 7e1a 03       		.byte	0x3
+ 38367 7e1b 91       		.byte	0x91
+ 38368 7e1c D05B     		.sleb128 -4656
+ 38369 7e1e 34       		.uleb128 0x34
+ 38370 7e1f E50C0000 		.long	0xce5
+ 38371 7e23 03       		.byte	0x3
+ 38372 7e24 91       		.byte	0x91
+ 38373 7e25 C05B     		.sleb128 -4672
+ 38374 7e27 34       		.uleb128 0x34
+ 38375 7e28 F00C0000 		.long	0xcf0
+ 38376 7e2c 03       		.byte	0x3
+ 38377 7e2d 91       		.byte	0x91
+ 38378 7e2e B05B     		.sleb128 -4688
+ 38379 7e30 34       		.uleb128 0x34
+ 38380 7e31 FC0C0000 		.long	0xcfc
+ 38381 7e35 03       		.byte	0x3
+ 38382 7e36 91       		.byte	0x91
+ 38383 7e37 A05B     		.sleb128 -4704
+ 38384 7e39 34       		.uleb128 0x34
+ 38385 7e3a 080D0000 		.long	0xd08
+ 38386 7e3e 03       		.byte	0x3
+ 38387 7e3f 91       		.byte	0x91
+ 38388 7e40 9C5B     		.sleb128 -4708
+ 38389 7e42 31       		.uleb128 0x31
+ 38390 7e43 1F0D0000 		.long	0xd1f
+ 38391 7e47 00000000 		.quad	.LBB2016
+ 38391      00000000 
+ 38392 7e4f 00000000 		.quad	.LBE2016
+ 38392      00000000 
+ 38393 7e57 02       		.byte	0x2
+ 38394 7e58 5603     		.value	0x356
+ 38395 7e5a 717E0000 		.long	0x7e71
+ 38396 7e5e 32       		.uleb128 0x32
+ 38397 7e5f 3A0D0000 		.long	0xd3a
+ 38398 7e63 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1019
+
+
+ 38399 7e64 91       		.byte	0x91
+ 38400 7e65 E05B     		.sleb128 -4640
+ 38401 7e67 32       		.uleb128 0x32
+ 38402 7e68 300D0000 		.long	0xd30
+ 38403 7e6c 03       		.byte	0x3
+ 38404 7e6d 91       		.byte	0x91
+ 38405 7e6e F05B     		.sleb128 -4624
+ 38406 7e70 00       		.byte	0x0
+ 38407 7e71 31       		.uleb128 0x31
+ 38408 7e72 450D0000 		.long	0xd45
+ 38409 7e76 00000000 		.quad	.LBB2018
+ 38409      00000000 
+ 38410 7e7e 00000000 		.quad	.LBE2018
+ 38410      00000000 
+ 38411 7e86 02       		.byte	0x2
+ 38412 7e87 5E03     		.value	0x35e
+ 38413 7e89 A07E0000 		.long	0x7ea0
+ 38414 7e8d 32       		.uleb128 0x32
+ 38415 7e8e 620D0000 		.long	0xd62
+ 38416 7e92 03       		.byte	0x3
+ 38417 7e93 91       		.byte	0x91
+ 38418 7e94 805C     		.sleb128 -4608
+ 38419 7e96 32       		.uleb128 0x32
+ 38420 7e97 570D0000 		.long	0xd57
+ 38421 7e9b 03       		.byte	0x3
+ 38422 7e9c 91       		.byte	0x91
+ 38423 7e9d 905C     		.sleb128 -4592
+ 38424 7e9f 00       		.byte	0x0
+ 38425 7ea0 31       		.uleb128 0x31
+ 38426 7ea1 6E0D0000 		.long	0xd6e
+ 38427 7ea5 00000000 		.quad	.LBB2020
+ 38427      00000000 
+ 38428 7ead 00000000 		.quad	.LBE2020
+ 38428      00000000 
+ 38429 7eb5 02       		.byte	0x2
+ 38430 7eb6 6403     		.value	0x364
+ 38431 7eb8 057F0000 		.long	0x7f05
+ 38432 7ebc 32       		.uleb128 0x32
+ 38433 7ebd 8C0D0000 		.long	0xd8c
+ 38434 7ec1 03       		.byte	0x3
+ 38435 7ec2 91       		.byte	0x91
+ 38436 7ec3 A05C     		.sleb128 -4576
+ 38437 7ec5 32       		.uleb128 0x32
+ 38438 7ec6 800D0000 		.long	0xd80
+ 38439 7eca 03       		.byte	0x3
+ 38440 7ecb 91       		.byte	0x91
+ 38441 7ecc B05C     		.sleb128 -4560
+ 38442 7ece 33       		.uleb128 0x33
+ 38443 7ecf 00000000 		.quad	.LBB2021
+ 38443      00000000 
+ 38444 7ed7 00000000 		.quad	.LBE2021
+ 38444      00000000 
+ 38445 7edf 34       		.uleb128 0x34
+ 38446 7ee0 980D0000 		.long	0xd98
+ 38447 7ee4 03       		.byte	0x3
+ 38448 7ee5 91       		.byte	0x91
+ 38449 7ee6 D043     		.sleb128 -7728
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1020
+
+
+ 38450 7ee8 34       		.uleb128 0x34
+ 38451 7ee9 A40D0000 		.long	0xda4
+ 38452 7eed 03       		.byte	0x3
+ 38453 7eee 91       		.byte	0x91
+ 38454 7eef C043     		.sleb128 -7744
+ 38455 7ef1 34       		.uleb128 0x34
+ 38456 7ef2 AF0D0000 		.long	0xdaf
+ 38457 7ef6 03       		.byte	0x3
+ 38458 7ef7 91       		.byte	0x91
+ 38459 7ef8 B043     		.sleb128 -7760
+ 38460 7efa 34       		.uleb128 0x34
+ 38461 7efb BB0D0000 		.long	0xdbb
+ 38462 7eff 03       		.byte	0x3
+ 38463 7f00 91       		.byte	0x91
+ 38464 7f01 CC5C     		.sleb128 -4532
+ 38465 7f03 00       		.byte	0x0
+ 38466 7f04 00       		.byte	0x0
+ 38467 7f05 31       		.uleb128 0x31
+ 38468 7f06 C70D0000 		.long	0xdc7
+ 38469 7f0a 00000000 		.quad	.LBB2022
+ 38469      00000000 
+ 38470 7f12 00000000 		.quad	.LBE2022
+ 38470      00000000 
+ 38471 7f1a 02       		.byte	0x2
+ 38472 7f1b 6603     		.value	0x366
+ 38473 7f1d 347F0000 		.long	0x7f34
+ 38474 7f21 32       		.uleb128 0x32
+ 38475 7f22 E20D0000 		.long	0xde2
+ 38476 7f26 03       		.byte	0x3
+ 38477 7f27 91       		.byte	0x91
+ 38478 7f28 D05C     		.sleb128 -4528
+ 38479 7f2a 32       		.uleb128 0x32
+ 38480 7f2b D80D0000 		.long	0xdd8
+ 38481 7f2f 03       		.byte	0x3
+ 38482 7f30 91       		.byte	0x91
+ 38483 7f31 E05C     		.sleb128 -4512
+ 38484 7f33 00       		.byte	0x0
+ 38485 7f34 31       		.uleb128 0x31
+ 38486 7f35 6E0D0000 		.long	0xd6e
+ 38487 7f39 00000000 		.quad	.LBB2024
+ 38487      00000000 
+ 38488 7f41 00000000 		.quad	.LBE2024
+ 38488      00000000 
+ 38489 7f49 02       		.byte	0x2
+ 38490 7f4a 6803     		.value	0x368
+ 38491 7f4c 997F0000 		.long	0x7f99
+ 38492 7f50 32       		.uleb128 0x32
+ 38493 7f51 8C0D0000 		.long	0xd8c
+ 38494 7f55 03       		.byte	0x3
+ 38495 7f56 91       		.byte	0x91
+ 38496 7f57 F05C     		.sleb128 -4496
+ 38497 7f59 32       		.uleb128 0x32
+ 38498 7f5a 800D0000 		.long	0xd80
+ 38499 7f5e 03       		.byte	0x3
+ 38500 7f5f 91       		.byte	0x91
+ 38501 7f60 805D     		.sleb128 -4480
+ 38502 7f62 33       		.uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1021
+
+
+ 38503 7f63 00000000 		.quad	.LBB2025
+ 38503      00000000 
+ 38504 7f6b 00000000 		.quad	.LBE2025
+ 38504      00000000 
+ 38505 7f73 34       		.uleb128 0x34
+ 38506 7f74 980D0000 		.long	0xd98
+ 38507 7f78 03       		.byte	0x3
+ 38508 7f79 91       		.byte	0x91
+ 38509 7f7a 8044     		.sleb128 -7680
+ 38510 7f7c 34       		.uleb128 0x34
+ 38511 7f7d A40D0000 		.long	0xda4
+ 38512 7f81 03       		.byte	0x3
+ 38513 7f82 91       		.byte	0x91
+ 38514 7f83 F043     		.sleb128 -7696
+ 38515 7f85 34       		.uleb128 0x34
+ 38516 7f86 AF0D0000 		.long	0xdaf
+ 38517 7f8a 03       		.byte	0x3
+ 38518 7f8b 91       		.byte	0x91
+ 38519 7f8c E043     		.sleb128 -7712
+ 38520 7f8e 34       		.uleb128 0x34
+ 38521 7f8f BB0D0000 		.long	0xdbb
+ 38522 7f93 03       		.byte	0x3
+ 38523 7f94 91       		.byte	0x91
+ 38524 7f95 9C5D     		.sleb128 -4452
+ 38525 7f97 00       		.byte	0x0
+ 38526 7f98 00       		.byte	0x0
+ 38527 7f99 31       		.uleb128 0x31
+ 38528 7f9a C70D0000 		.long	0xdc7
+ 38529 7f9e 00000000 		.quad	.LBB2026
+ 38529      00000000 
+ 38530 7fa6 00000000 		.quad	.LBE2026
+ 38530      00000000 
+ 38531 7fae 02       		.byte	0x2
+ 38532 7faf 6A03     		.value	0x36a
+ 38533 7fb1 C87F0000 		.long	0x7fc8
+ 38534 7fb5 32       		.uleb128 0x32
+ 38535 7fb6 E20D0000 		.long	0xde2
+ 38536 7fba 03       		.byte	0x3
+ 38537 7fbb 91       		.byte	0x91
+ 38538 7fbc A05D     		.sleb128 -4448
+ 38539 7fbe 32       		.uleb128 0x32
+ 38540 7fbf D80D0000 		.long	0xdd8
+ 38541 7fc3 03       		.byte	0x3
+ 38542 7fc4 91       		.byte	0x91
+ 38543 7fc5 B05D     		.sleb128 -4432
+ 38544 7fc7 00       		.byte	0x0
+ 38545 7fc8 31       		.uleb128 0x31
+ 38546 7fc9 ED0D0000 		.long	0xded
+ 38547 7fcd 00000000 		.quad	.LBB2028
+ 38547      00000000 
+ 38548 7fd5 00000000 		.quad	.LBE2028
+ 38548      00000000 
+ 38549 7fdd 02       		.byte	0x2
+ 38550 7fde 6C03     		.value	0x36c
+ 38551 7fe0 F77F0000 		.long	0x7ff7
+ 38552 7fe4 32       		.uleb128 0x32
+ 38553 7fe5 0A0E0000 		.long	0xe0a
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1022
+
+
+ 38554 7fe9 03       		.byte	0x3
+ 38555 7fea 91       		.byte	0x91
+ 38556 7feb C05D     		.sleb128 -4416
+ 38557 7fed 32       		.uleb128 0x32
+ 38558 7fee FF0D0000 		.long	0xdff
+ 38559 7ff2 03       		.byte	0x3
+ 38560 7ff3 91       		.byte	0x91
+ 38561 7ff4 D05D     		.sleb128 -4400
+ 38562 7ff6 00       		.byte	0x0
+ 38563 7ff7 35       		.uleb128 0x35
+ 38564 7ff8 1F0D0000 		.long	0xd1f
+ 38565 7ffc 00000000 		.quad	.LBB2030
+ 38565      00000000 
+ 38566 8004 00000000 		.quad	.LBE2030
+ 38566      00000000 
+ 38567 800c 02       		.byte	0x2
+ 38568 800d 6E03     		.value	0x36e
+ 38569 800f 32       		.uleb128 0x32
+ 38570 8010 3A0D0000 		.long	0xd3a
+ 38571 8014 03       		.byte	0x3
+ 38572 8015 91       		.byte	0x91
+ 38573 8016 E05D     		.sleb128 -4384
+ 38574 8018 32       		.uleb128 0x32
+ 38575 8019 300D0000 		.long	0xd30
+ 38576 801d 03       		.byte	0x3
+ 38577 801e 91       		.byte	0x91
+ 38578 801f F05D     		.sleb128 -4368
+ 38579 8021 00       		.byte	0x0
+ 38580 8022 00       		.byte	0x0
+ 38581 8023 00       		.byte	0x0
+ 38582 8024 00       		.byte	0x0
+ 38583 8025 36       		.uleb128 0x36
+ 38584 8026 00000000 		.quad	.LBB2032
+ 38584      00000000 
+ 38585 802e 00000000 		.quad	.LBE2032
+ 38585      00000000 
+ 38586 8036 44800000 		.long	0x8044
+ 38587 803a 34       		.uleb128 0x34
+ 38588 803b 180C0000 		.long	0xc18
+ 38589 803f 03       		.byte	0x3
+ 38590 8040 91       		.byte	0x91
+ 38591 8041 9043     		.sleb128 -7792
+ 38592 8043 00       		.byte	0x0
+ 38593 8044 31       		.uleb128 0x31
+ 38594 8045 160E0000 		.long	0xe16
+ 38595 8049 00000000 		.quad	.LBB2033
+ 38595      00000000 
+ 38596 8051 00000000 		.quad	.LBE2033
+ 38596      00000000 
+ 38597 8059 02       		.byte	0x2
+ 38598 805a 9406     		.value	0x694
+ 38599 805c EC800000 		.long	0x80ec
+ 38600 8060 32       		.uleb128 0x32
+ 38601 8061 280E0000 		.long	0xe28
+ 38602 8065 03       		.byte	0x3
+ 38603 8066 91       		.byte	0x91
+ 38604 8067 805E     		.sleb128 -4352
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1023
+
+
+ 38605 8069 33       		.uleb128 0x33
+ 38606 806a 00000000 		.quad	.LBB2034
+ 38606      00000000 
+ 38607 8072 00000000 		.quad	.LBE2034
+ 38607      00000000 
+ 38608 807a 34       		.uleb128 0x34
+ 38609 807b 340E0000 		.long	0xe34
+ 38610 807f 09       		.byte	0x9
+ 38611 8080 03       		.byte	0x3
+ 38612 8081 00000000 		.quad	ShiftRowTable.6768
+ 38612      00000000 
+ 38613 8089 35       		.uleb128 0x35
+ 38614 808a 6E0D0000 		.long	0xd6e
+ 38615 808e 00000000 		.quad	.LBB2035
+ 38615      00000000 
+ 38616 8096 00000000 		.quad	.LBE2035
+ 38616      00000000 
+ 38617 809e 02       		.byte	0x2
+ 38618 809f 9B02     		.value	0x29b
+ 38619 80a1 32       		.uleb128 0x32
+ 38620 80a2 8C0D0000 		.long	0xd8c
+ 38621 80a6 03       		.byte	0x3
+ 38622 80a7 91       		.byte	0x91
+ 38623 80a8 905E     		.sleb128 -4336
+ 38624 80aa 32       		.uleb128 0x32
+ 38625 80ab 800D0000 		.long	0xd80
+ 38626 80af 03       		.byte	0x3
+ 38627 80b0 91       		.byte	0x91
+ 38628 80b1 A05E     		.sleb128 -4320
+ 38629 80b3 33       		.uleb128 0x33
+ 38630 80b4 00000000 		.quad	.LBB2036
+ 38630      00000000 
+ 38631 80bc 00000000 		.quad	.LBE2036
+ 38631      00000000 
+ 38632 80c4 34       		.uleb128 0x34
+ 38633 80c5 980D0000 		.long	0xd98
+ 38634 80c9 03       		.byte	0x3
+ 38635 80ca 91       		.byte	0x91
+ 38636 80cb B044     		.sleb128 -7632
+ 38637 80cd 34       		.uleb128 0x34
+ 38638 80ce A40D0000 		.long	0xda4
+ 38639 80d2 03       		.byte	0x3
+ 38640 80d3 91       		.byte	0x91
+ 38641 80d4 A044     		.sleb128 -7648
+ 38642 80d6 34       		.uleb128 0x34
+ 38643 80d7 AF0D0000 		.long	0xdaf
+ 38644 80db 03       		.byte	0x3
+ 38645 80dc 91       		.byte	0x91
+ 38646 80dd 9044     		.sleb128 -7664
+ 38647 80df 34       		.uleb128 0x34
+ 38648 80e0 BB0D0000 		.long	0xdbb
+ 38649 80e4 03       		.byte	0x3
+ 38650 80e5 91       		.byte	0x91
+ 38651 80e6 BC5E     		.sleb128 -4292
+ 38652 80e8 00       		.byte	0x0
+ 38653 80e9 00       		.byte	0x0
+ 38654 80ea 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1024
+
+
+ 38655 80eb 00       		.byte	0x0
+ 38656 80ec 36       		.uleb128 0x36
+ 38657 80ed 00000000 		.quad	.LBB2037
+ 38657      00000000 
+ 38658 80f5 00000000 		.quad	.LBE2037
+ 38658      00000000 
+ 38659 80fd 0B810000 		.long	0x810b
+ 38660 8101 34       		.uleb128 0x34
+ 38661 8102 280C0000 		.long	0xc28
+ 38662 8106 03       		.byte	0x3
+ 38663 8107 91       		.byte	0x91
+ 38664 8108 8043     		.sleb128 -7808
+ 38665 810a 00       		.byte	0x0
+ 38666 810b 31       		.uleb128 0x31
+ 38667 810c 520E0000 		.long	0xe52
+ 38668 8110 00000000 		.quad	.LBB2038
+ 38668      00000000 
+ 38669 8118 00000000 		.quad	.LBE2038
+ 38669      00000000 
+ 38670 8120 02       		.byte	0x2
+ 38671 8121 9606     		.value	0x696
+ 38672 8123 3A810000 		.long	0x813a
+ 38673 8127 32       		.uleb128 0x32
+ 38674 8128 6D0E0000 		.long	0xe6d
+ 38675 812c 03       		.byte	0x3
+ 38676 812d 91       		.byte	0x91
+ 38677 812e C05E     		.sleb128 -4288
+ 38678 8130 32       		.uleb128 0x32
+ 38679 8131 630E0000 		.long	0xe63
+ 38680 8135 03       		.byte	0x3
+ 38681 8136 91       		.byte	0x91
+ 38682 8137 D05E     		.sleb128 -4272
+ 38683 8139 00       		.byte	0x0
+ 38684 813a 36       		.uleb128 0x36
+ 38685 813b 00000000 		.quad	.LBB2040
+ 38685      00000000 
+ 38686 8143 00000000 		.quad	.LBE2040
+ 38686      00000000 
+ 38687 814b 59810000 		.long	0x8159
+ 38688 814f 34       		.uleb128 0x34
+ 38689 8150 380C0000 		.long	0xc38
+ 38690 8154 03       		.byte	0x3
+ 38691 8155 91       		.byte	0x91
+ 38692 8156 F042     		.sleb128 -7824
+ 38693 8158 00       		.byte	0x0
+ 38694 8159 31       		.uleb128 0x31
+ 38695 815a 780E0000 		.long	0xe78
+ 38696 815e 00000000 		.quad	.LBB2041
+ 38696      00000000 
+ 38697 8166 00000000 		.quad	.LBE2041
+ 38697      00000000 
+ 38698 816e 02       		.byte	0x2
+ 38699 816f 9806     		.value	0x698
+ 38700 8171 9A810000 		.long	0x819a
+ 38701 8175 32       		.uleb128 0x32
+ 38702 8176 8A0E0000 		.long	0xe8a
+ 38703 817a 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1025
+
+
+ 38704 817b 91       		.byte	0x91
+ 38705 817c E05E     		.sleb128 -4256
+ 38706 817e 33       		.uleb128 0x33
+ 38707 817f 00000000 		.quad	.LBB2042
+ 38707      00000000 
+ 38708 8187 00000000 		.quad	.LBE2042
+ 38708      00000000 
+ 38709 818f 34       		.uleb128 0x34
+ 38710 8190 960E0000 		.long	0xe96
+ 38711 8194 03       		.byte	0x3
+ 38712 8195 91       		.byte	0x91
+ 38713 8196 C044     		.sleb128 -7616
+ 38714 8198 00       		.byte	0x0
+ 38715 8199 00       		.byte	0x0
+ 38716 819a 33       		.uleb128 0x33
+ 38717 819b 00000000 		.quad	.LBB2043
+ 38717      00000000 
+ 38718 81a3 00000000 		.quad	.LBE2043
+ 38718      00000000 
+ 38719 81ab 34       		.uleb128 0x34
+ 38720 81ac 440C0000 		.long	0xc44
+ 38721 81b0 03       		.byte	0x3
+ 38722 81b1 91       		.byte	0x91
+ 38723 81b2 E042     		.sleb128 -7840
+ 38724 81b4 00       		.byte	0x0
+ 38725 81b5 00       		.byte	0x0
+ 38726 81b6 00       		.byte	0x0
+ 38727 81b7 31       		.uleb128 0x31
+ 38728 81b8 A30E0000 		.long	0xea3
+ 38729 81bc 00000000 		.quad	.LBB2044
+ 38729      00000000 
+ 38730 81c4 00000000 		.quad	.LBE2044
+ 38730      00000000 
+ 38731 81cc 02       		.byte	0x2
+ 38732 81cd 8807     		.value	0x788
+ 38733 81cf B8820000 		.long	0x82b8
+ 38734 81d3 32       		.uleb128 0x32
+ 38735 81d4 B50E0000 		.long	0xeb5
+ 38736 81d8 03       		.byte	0x3
+ 38737 81d9 91       		.byte	0x91
+ 38738 81da F05E     		.sleb128 -4240
+ 38739 81dc 33       		.uleb128 0x33
+ 38740 81dd 00000000 		.quad	.LBB2045
+ 38740      00000000 
+ 38741 81e5 00000000 		.quad	.LBE2045
+ 38741      00000000 
+ 38742 81ed 34       		.uleb128 0x34
+ 38743 81ee C10E0000 		.long	0xec1
+ 38744 81f2 04       		.byte	0x4
+ 38745 81f3 76       		.byte	0x76
+ 38746 81f4 B0BC7F   		.sleb128 -8656
+ 38747 81f7 31       		.uleb128 0x31
+ 38748 81f8 CE0E0000 		.long	0xece
+ 38749 81fc 00000000 		.quad	.LBB2046
+ 38749      00000000 
+ 38750 8204 00000000 		.quad	.LBE2046
+ 38750      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1026
+
+
+ 38751 820c 02       		.byte	0x2
+ 38752 820d 1F06     		.value	0x61f
+ 38753 820f 38820000 		.long	0x8238
+ 38754 8213 32       		.uleb128 0x32
+ 38755 8214 E00E0000 		.long	0xee0
+ 38756 8218 03       		.byte	0x3
+ 38757 8219 91       		.byte	0x91
+ 38758 821a 805F     		.sleb128 -4224
+ 38759 821c 33       		.uleb128 0x33
+ 38760 821d 00000000 		.quad	.LBB2047
+ 38760      00000000 
+ 38761 8225 00000000 		.quad	.LBE2047
+ 38761      00000000 
+ 38762 822d 34       		.uleb128 0x34
+ 38763 822e EC0E0000 		.long	0xeec
+ 38764 8232 03       		.byte	0x3
+ 38765 8233 91       		.byte	0x91
+ 38766 8234 D044     		.sleb128 -7600
+ 38767 8236 00       		.byte	0x0
+ 38768 8237 00       		.byte	0x0
+ 38769 8238 31       		.uleb128 0x31
+ 38770 8239 CE0E0000 		.long	0xece
+ 38771 823d 00000000 		.quad	.LBB2048
+ 38771      00000000 
+ 38772 8245 00000000 		.quad	.LBE2048
+ 38772      00000000 
+ 38773 824d 02       		.byte	0x2
+ 38774 824e 2006     		.value	0x620
+ 38775 8250 79820000 		.long	0x8279
+ 38776 8254 32       		.uleb128 0x32
+ 38777 8255 E00E0000 		.long	0xee0
+ 38778 8259 03       		.byte	0x3
+ 38779 825a 91       		.byte	0x91
+ 38780 825b 905F     		.sleb128 -4208
+ 38781 825d 33       		.uleb128 0x33
+ 38782 825e 00000000 		.quad	.LBB2049
+ 38782      00000000 
+ 38783 8266 00000000 		.quad	.LBE2049
+ 38783      00000000 
+ 38784 826e 34       		.uleb128 0x34
+ 38785 826f EC0E0000 		.long	0xeec
+ 38786 8273 03       		.byte	0x3
+ 38787 8274 91       		.byte	0x91
+ 38788 8275 E044     		.sleb128 -7584
+ 38789 8277 00       		.byte	0x0
+ 38790 8278 00       		.byte	0x0
+ 38791 8279 35       		.uleb128 0x35
+ 38792 827a CE0E0000 		.long	0xece
+ 38793 827e 00000000 		.quad	.LBB2050
+ 38793      00000000 
+ 38794 8286 00000000 		.quad	.LBE2050
+ 38794      00000000 
+ 38795 828e 02       		.byte	0x2
+ 38796 828f 2106     		.value	0x621
+ 38797 8291 32       		.uleb128 0x32
+ 38798 8292 E00E0000 		.long	0xee0
+ 38799 8296 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1027
+
+
+ 38800 8297 91       		.byte	0x91
+ 38801 8298 A05F     		.sleb128 -4192
+ 38802 829a 33       		.uleb128 0x33
+ 38803 829b 00000000 		.quad	.LBB2051
+ 38803      00000000 
+ 38804 82a3 00000000 		.quad	.LBE2051
+ 38804      00000000 
+ 38805 82ab 34       		.uleb128 0x34
+ 38806 82ac EC0E0000 		.long	0xeec
+ 38807 82b0 03       		.byte	0x3
+ 38808 82b1 91       		.byte	0x91
+ 38809 82b2 F044     		.sleb128 -7568
+ 38810 82b4 00       		.byte	0x0
+ 38811 82b5 00       		.byte	0x0
+ 38812 82b6 00       		.byte	0x0
+ 38813 82b7 00       		.byte	0x0
+ 38814 82b8 31       		.uleb128 0x31
+ 38815 82b9 520E0000 		.long	0xe52
+ 38816 82bd 00000000 		.quad	.LBB2052
+ 38816      00000000 
+ 38817 82c5 00000000 		.quad	.LBE2052
+ 38817      00000000 
+ 38818 82cd 02       		.byte	0x2
+ 38819 82ce 8807     		.value	0x788
+ 38820 82d0 E7820000 		.long	0x82e7
+ 38821 82d4 32       		.uleb128 0x32
+ 38822 82d5 6D0E0000 		.long	0xe6d
+ 38823 82d9 03       		.byte	0x3
+ 38824 82da 91       		.byte	0x91
+ 38825 82db B05F     		.sleb128 -4176
+ 38826 82dd 32       		.uleb128 0x32
+ 38827 82de 630E0000 		.long	0xe63
+ 38828 82e2 03       		.byte	0x3
+ 38829 82e3 91       		.byte	0x91
+ 38830 82e4 C05F     		.sleb128 -4160
+ 38831 82e6 00       		.byte	0x0
+ 38832 82e7 31       		.uleb128 0x31
+ 38833 82e8 4E740000 		.long	0x744e
+ 38834 82ec 00000000 		.quad	.LBB2054
+ 38834      00000000 
+ 38835 82f4 00000000 		.quad	.LBE2054
+ 38835      00000000 
+ 38836 82fc 02       		.byte	0x2
+ 38837 82fd 8907     		.value	0x789
+ 38838 82ff 77830000 		.long	0x8377
+ 38839 8303 32       		.uleb128 0x32
+ 38840 8304 60740000 		.long	0x7460
+ 38841 8308 03       		.byte	0x3
+ 38842 8309 91       		.byte	0x91
+ 38843 830a D05F     		.sleb128 -4144
+ 38844 830c 33       		.uleb128 0x33
+ 38845 830d 00000000 		.quad	.LBB2055
+ 38845      00000000 
+ 38846 8315 00000000 		.quad	.LBE2055
+ 38846      00000000 
+ 38847 831d 34       		.uleb128 0x34
+ 38848 831e 6C740000 		.long	0x746c
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1028
+
+
+ 38849 8322 03       		.byte	0x3
+ 38850 8323 91       		.byte	0x91
+ 38851 8324 9045     		.sleb128 -7536
+ 38852 8326 34       		.uleb128 0x34
+ 38853 8327 76740000 		.long	0x7476
+ 38854 832b 03       		.byte	0x3
+ 38855 832c 91       		.byte	0x91
+ 38856 832d E45F     		.sleb128 -4124
+ 38857 832f 35       		.uleb128 0x35
+ 38858 8330 12490000 		.long	0x4912
+ 38859 8334 00000000 		.quad	.LBB2056
+ 38859      00000000 
+ 38860 833c 00000000 		.quad	.LBE2056
+ 38860      00000000 
+ 38861 8344 02       		.byte	0x2
+ 38862 8345 7906     		.value	0x679
+ 38863 8347 32       		.uleb128 0x32
+ 38864 8348 24490000 		.long	0x4924
+ 38865 834c 03       		.byte	0x3
+ 38866 834d 91       		.byte	0x91
+ 38867 834e E85F     		.sleb128 -4120
+ 38868 8350 33       		.uleb128 0x33
+ 38869 8351 00000000 		.quad	.LBB2057
+ 38869      00000000 
+ 38870 8359 00000000 		.quad	.LBE2057
+ 38870      00000000 
+ 38871 8361 34       		.uleb128 0x34
+ 38872 8362 2E490000 		.long	0x492e
+ 38873 8366 03       		.byte	0x3
+ 38874 8367 91       		.byte	0x91
+ 38875 8368 8045     		.sleb128 -7552
+ 38876 836a 34       		.uleb128 0x34
+ 38877 836b 3A490000 		.long	0x493a
+ 38878 836f 03       		.byte	0x3
+ 38879 8370 91       		.byte	0x91
+ 38880 8371 EC5F     		.sleb128 -4116
+ 38881 8373 00       		.byte	0x0
+ 38882 8374 00       		.byte	0x0
+ 38883 8375 00       		.byte	0x0
+ 38884 8376 00       		.byte	0x0
+ 38885 8377 31       		.uleb128 0x31
+ 38886 8378 A30E0000 		.long	0xea3
+ 38887 837c 00000000 		.quad	.LBB2058
+ 38887      00000000 
+ 38888 8384 00000000 		.quad	.LBE2058
+ 38888      00000000 
+ 38889 838c 02       		.byte	0x2
+ 38890 838d 8907     		.value	0x789
+ 38891 838f 78840000 		.long	0x8478
+ 38892 8393 32       		.uleb128 0x32
+ 38893 8394 B50E0000 		.long	0xeb5
+ 38894 8398 03       		.byte	0x3
+ 38895 8399 91       		.byte	0x91
+ 38896 839a F05F     		.sleb128 -4112
+ 38897 839c 33       		.uleb128 0x33
+ 38898 839d 00000000 		.quad	.LBB2059
+ 38898      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1029
+
+
+ 38899 83a5 00000000 		.quad	.LBE2059
+ 38899      00000000 
+ 38900 83ad 34       		.uleb128 0x34
+ 38901 83ae C10E0000 		.long	0xec1
+ 38902 83b2 04       		.byte	0x4
+ 38903 83b3 76       		.byte	0x76
+ 38904 83b4 C0BC7F   		.sleb128 -8640
+ 38905 83b7 31       		.uleb128 0x31
+ 38906 83b8 CE0E0000 		.long	0xece
+ 38907 83bc 00000000 		.quad	.LBB2060
+ 38907      00000000 
+ 38908 83c4 00000000 		.quad	.LBE2060
+ 38908      00000000 
+ 38909 83cc 02       		.byte	0x2
+ 38910 83cd 1F06     		.value	0x61f
+ 38911 83cf F8830000 		.long	0x83f8
+ 38912 83d3 32       		.uleb128 0x32
+ 38913 83d4 E00E0000 		.long	0xee0
+ 38914 83d8 03       		.byte	0x3
+ 38915 83d9 91       		.byte	0x91
+ 38916 83da 8060     		.sleb128 -4096
+ 38917 83dc 33       		.uleb128 0x33
+ 38918 83dd 00000000 		.quad	.LBB2061
+ 38918      00000000 
+ 38919 83e5 00000000 		.quad	.LBE2061
+ 38919      00000000 
+ 38920 83ed 34       		.uleb128 0x34
+ 38921 83ee EC0E0000 		.long	0xeec
+ 38922 83f2 03       		.byte	0x3
+ 38923 83f3 91       		.byte	0x91
+ 38924 83f4 A045     		.sleb128 -7520
+ 38925 83f6 00       		.byte	0x0
+ 38926 83f7 00       		.byte	0x0
+ 38927 83f8 31       		.uleb128 0x31
+ 38928 83f9 CE0E0000 		.long	0xece
+ 38929 83fd 00000000 		.quad	.LBB2062
+ 38929      00000000 
+ 38930 8405 00000000 		.quad	.LBE2062
+ 38930      00000000 
+ 38931 840d 02       		.byte	0x2
+ 38932 840e 2006     		.value	0x620
+ 38933 8410 39840000 		.long	0x8439
+ 38934 8414 32       		.uleb128 0x32
+ 38935 8415 E00E0000 		.long	0xee0
+ 38936 8419 03       		.byte	0x3
+ 38937 841a 91       		.byte	0x91
+ 38938 841b 9060     		.sleb128 -4080
+ 38939 841d 33       		.uleb128 0x33
+ 38940 841e 00000000 		.quad	.LBB2063
+ 38940      00000000 
+ 38941 8426 00000000 		.quad	.LBE2063
+ 38941      00000000 
+ 38942 842e 34       		.uleb128 0x34
+ 38943 842f EC0E0000 		.long	0xeec
+ 38944 8433 03       		.byte	0x3
+ 38945 8434 91       		.byte	0x91
+ 38946 8435 B045     		.sleb128 -7504
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1030
+
+
+ 38947 8437 00       		.byte	0x0
+ 38948 8438 00       		.byte	0x0
+ 38949 8439 35       		.uleb128 0x35
+ 38950 843a CE0E0000 		.long	0xece
+ 38951 843e 00000000 		.quad	.LBB2064
+ 38951      00000000 
+ 38952 8446 00000000 		.quad	.LBE2064
+ 38952      00000000 
+ 38953 844e 02       		.byte	0x2
+ 38954 844f 2106     		.value	0x621
+ 38955 8451 32       		.uleb128 0x32
+ 38956 8452 E00E0000 		.long	0xee0
+ 38957 8456 03       		.byte	0x3
+ 38958 8457 91       		.byte	0x91
+ 38959 8458 A060     		.sleb128 -4064
+ 38960 845a 33       		.uleb128 0x33
+ 38961 845b 00000000 		.quad	.LBB2065
+ 38961      00000000 
+ 38962 8463 00000000 		.quad	.LBE2065
+ 38962      00000000 
+ 38963 846b 34       		.uleb128 0x34
+ 38964 846c EC0E0000 		.long	0xeec
+ 38965 8470 03       		.byte	0x3
+ 38966 8471 91       		.byte	0x91
+ 38967 8472 C045     		.sleb128 -7488
+ 38968 8474 00       		.byte	0x0
+ 38969 8475 00       		.byte	0x0
+ 38970 8476 00       		.byte	0x0
+ 38971 8477 00       		.byte	0x0
+ 38972 8478 31       		.uleb128 0x31
+ 38973 8479 520E0000 		.long	0xe52
+ 38974 847d 00000000 		.quad	.LBB2066
+ 38974      00000000 
+ 38975 8485 00000000 		.quad	.LBE2066
+ 38975      00000000 
+ 38976 848d 02       		.byte	0x2
+ 38977 848e 8907     		.value	0x789
+ 38978 8490 A7840000 		.long	0x84a7
+ 38979 8494 32       		.uleb128 0x32
+ 38980 8495 6D0E0000 		.long	0xe6d
+ 38981 8499 03       		.byte	0x3
+ 38982 849a 91       		.byte	0x91
+ 38983 849b B060     		.sleb128 -4048
+ 38984 849d 32       		.uleb128 0x32
+ 38985 849e 630E0000 		.long	0xe63
+ 38986 84a2 03       		.byte	0x3
+ 38987 84a3 91       		.byte	0x91
+ 38988 84a4 C060     		.sleb128 -4032
+ 38989 84a6 00       		.byte	0x0
+ 38990 84a7 31       		.uleb128 0x31
+ 38991 84a8 D10B0000 		.long	0xbd1
+ 38992 84ac 00000000 		.quad	.LBB2068
+ 38992      00000000 
+ 38993 84b4 00000000 		.quad	.LBE2068
+ 38993      00000000 
+ 38994 84bc 02       		.byte	0x2
+ 38995 84bd 8A07     		.value	0x78a
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1031
+
+
+ 38996 84bf 4F890000 		.long	0x894f
+ 38997 84c3 32       		.uleb128 0x32
+ 38998 84c4 EF0B0000 		.long	0xbef
+ 38999 84c8 03       		.byte	0x3
+ 39000 84c9 91       		.byte	0x91
+ 39001 84ca DC60     		.sleb128 -4004
+ 39002 84cc 32       		.uleb128 0x32
+ 39003 84cd E30B0000 		.long	0xbe3
+ 39004 84d1 03       		.byte	0x3
+ 39005 84d2 91       		.byte	0x91
+ 39006 84d3 E060     		.sleb128 -4000
+ 39007 84d5 33       		.uleb128 0x33
+ 39008 84d6 00000000 		.quad	.LBB2069
+ 39008      00000000 
+ 39009 84de 00000000 		.quad	.LBE2069
+ 39009      00000000 
+ 39010 84e6 34       		.uleb128 0x34
+ 39011 84e7 FB0B0000 		.long	0xbfb
+ 39012 84eb 04       		.byte	0x4
+ 39013 84ec 76       		.byte	0x76
+ 39014 84ed E0BC7F   		.sleb128 -8608
+ 39015 84f0 34       		.uleb128 0x34
+ 39016 84f1 070C0000 		.long	0xc07
+ 39017 84f5 04       		.byte	0x4
+ 39018 84f6 76       		.byte	0x76
+ 39019 84f7 D0BC7F   		.sleb128 -8624
+ 39020 84fa 31       		.uleb128 0x31
+ 39021 84fb 500C0000 		.long	0xc50
+ 39022 84ff 00000000 		.quad	.LBB2070
+ 39022      00000000 
+ 39023 8507 00000000 		.quad	.LBE2070
+ 39023      00000000 
+ 39024 850f 02       		.byte	0x2
+ 39025 8510 9106     		.value	0x691
+ 39026 8512 4D850000 		.long	0x854d
+ 39027 8516 32       		.uleb128 0x32
+ 39028 8517 7A0C0000 		.long	0xc7a
+ 39029 851b 03       		.byte	0x3
+ 39030 851c 91       		.byte	0x91
+ 39031 851d F860     		.sleb128 -3976
+ 39032 851f 32       		.uleb128 0x32
+ 39033 8520 6E0C0000 		.long	0xc6e
+ 39034 8524 03       		.byte	0x3
+ 39035 8525 91       		.byte	0x91
+ 39036 8526 FC60     		.sleb128 -3972
+ 39037 8528 32       		.uleb128 0x32
+ 39038 8529 620C0000 		.long	0xc62
+ 39039 852d 03       		.byte	0x3
+ 39040 852e 91       		.byte	0x91
+ 39041 852f 8061     		.sleb128 -3968
+ 39042 8531 33       		.uleb128 0x33
+ 39043 8532 00000000 		.quad	.LBB2071
+ 39043      00000000 
+ 39044 853a 00000000 		.quad	.LBE2071
+ 39044      00000000 
+ 39045 8542 34       		.uleb128 0x34
+ 39046 8543 860C0000 		.long	0xc86
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1032
+
+
+ 39047 8547 03       		.byte	0x3
+ 39048 8548 91       		.byte	0x91
+ 39049 8549 9046     		.sleb128 -7408
+ 39050 854b 00       		.byte	0x0
+ 39051 854c 00       		.byte	0x0
+ 39052 854d 31       		.uleb128 0x31
+ 39053 854e 910C0000 		.long	0xc91
+ 39054 8552 00000000 		.quad	.LBB2072
+ 39054      00000000 
+ 39055 855a 00000000 		.quad	.LBE2072
+ 39055      00000000 
+ 39056 8562 02       		.byte	0x2
+ 39057 8563 9206     		.value	0x692
+ 39058 8565 BD870000 		.long	0x87bd
+ 39059 8569 32       		.uleb128 0x32
+ 39060 856a A30C0000 		.long	0xca3
+ 39061 856e 03       		.byte	0x3
+ 39062 856f 91       		.byte	0x91
+ 39063 8570 9061     		.sleb128 -3952
+ 39064 8572 35       		.uleb128 0x35
+ 39065 8573 B00C0000 		.long	0xcb0
+ 39066 8577 00000000 		.quad	.LBB2074
+ 39066      00000000 
+ 39067 857f 00000000 		.quad	.LBE2074
+ 39067      00000000 
+ 39068 8587 02       		.byte	0x2
+ 39069 8588 7D03     		.value	0x37d
+ 39070 858a 32       		.uleb128 0x32
+ 39071 858b CE0C0000 		.long	0xcce
+ 39072 858f 03       		.byte	0x3
+ 39073 8590 91       		.byte	0x91
+ 39074 8591 A861     		.sleb128 -3928
+ 39075 8593 32       		.uleb128 0x32
+ 39076 8594 C20C0000 		.long	0xcc2
+ 39077 8598 03       		.byte	0x3
+ 39078 8599 91       		.byte	0x91
+ 39079 859a B061     		.sleb128 -3920
+ 39080 859c 33       		.uleb128 0x33
+ 39081 859d 00000000 		.quad	.LBB2075
+ 39081      00000000 
+ 39082 85a5 00000000 		.quad	.LBE2075
+ 39082      00000000 
+ 39083 85ad 34       		.uleb128 0x34
+ 39084 85ae DA0C0000 		.long	0xcda
+ 39085 85b2 03       		.byte	0x3
+ 39086 85b3 91       		.byte	0x91
+ 39087 85b4 8062     		.sleb128 -3840
+ 39088 85b6 34       		.uleb128 0x34
+ 39089 85b7 E50C0000 		.long	0xce5
+ 39090 85bb 03       		.byte	0x3
+ 39091 85bc 91       		.byte	0x91
+ 39092 85bd F061     		.sleb128 -3856
+ 39093 85bf 34       		.uleb128 0x34
+ 39094 85c0 F00C0000 		.long	0xcf0
+ 39095 85c4 03       		.byte	0x3
+ 39096 85c5 91       		.byte	0x91
+ 39097 85c6 E061     		.sleb128 -3872
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1033
+
+
+ 39098 85c8 34       		.uleb128 0x34
+ 39099 85c9 FC0C0000 		.long	0xcfc
+ 39100 85cd 03       		.byte	0x3
+ 39101 85ce 91       		.byte	0x91
+ 39102 85cf D061     		.sleb128 -3888
+ 39103 85d1 34       		.uleb128 0x34
+ 39104 85d2 080D0000 		.long	0xd08
+ 39105 85d6 03       		.byte	0x3
+ 39106 85d7 91       		.byte	0x91
+ 39107 85d8 CC61     		.sleb128 -3892
+ 39108 85da 31       		.uleb128 0x31
+ 39109 85db 1F0D0000 		.long	0xd1f
+ 39110 85df 00000000 		.quad	.LBB2076
+ 39110      00000000 
+ 39111 85e7 00000000 		.quad	.LBE2076
+ 39111      00000000 
+ 39112 85ef 02       		.byte	0x2
+ 39113 85f0 5603     		.value	0x356
+ 39114 85f2 09860000 		.long	0x8609
+ 39115 85f6 32       		.uleb128 0x32
+ 39116 85f7 3A0D0000 		.long	0xd3a
+ 39117 85fb 03       		.byte	0x3
+ 39118 85fc 91       		.byte	0x91
+ 39119 85fd 9062     		.sleb128 -3824
+ 39120 85ff 32       		.uleb128 0x32
+ 39121 8600 300D0000 		.long	0xd30
+ 39122 8604 03       		.byte	0x3
+ 39123 8605 91       		.byte	0x91
+ 39124 8606 A062     		.sleb128 -3808
+ 39125 8608 00       		.byte	0x0
+ 39126 8609 31       		.uleb128 0x31
+ 39127 860a 450D0000 		.long	0xd45
+ 39128 860e 00000000 		.quad	.LBB2078
+ 39128      00000000 
+ 39129 8616 00000000 		.quad	.LBE2078
+ 39129      00000000 
+ 39130 861e 02       		.byte	0x2
+ 39131 861f 5E03     		.value	0x35e
+ 39132 8621 38860000 		.long	0x8638
+ 39133 8625 32       		.uleb128 0x32
+ 39134 8626 620D0000 		.long	0xd62
+ 39135 862a 03       		.byte	0x3
+ 39136 862b 91       		.byte	0x91
+ 39137 862c B062     		.sleb128 -3792
+ 39138 862e 32       		.uleb128 0x32
+ 39139 862f 570D0000 		.long	0xd57
+ 39140 8633 03       		.byte	0x3
+ 39141 8634 91       		.byte	0x91
+ 39142 8635 C062     		.sleb128 -3776
+ 39143 8637 00       		.byte	0x0
+ 39144 8638 31       		.uleb128 0x31
+ 39145 8639 6E0D0000 		.long	0xd6e
+ 39146 863d 00000000 		.quad	.LBB2080
+ 39146      00000000 
+ 39147 8645 00000000 		.quad	.LBE2080
+ 39147      00000000 
+ 39148 864d 02       		.byte	0x2
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1034
+
+
+ 39149 864e 6403     		.value	0x364
+ 39150 8650 9D860000 		.long	0x869d
+ 39151 8654 32       		.uleb128 0x32
+ 39152 8655 8C0D0000 		.long	0xd8c
+ 39153 8659 03       		.byte	0x3
+ 39154 865a 91       		.byte	0x91
+ 39155 865b D062     		.sleb128 -3760
+ 39156 865d 32       		.uleb128 0x32
+ 39157 865e 800D0000 		.long	0xd80
+ 39158 8662 03       		.byte	0x3
+ 39159 8663 91       		.byte	0x91
+ 39160 8664 E062     		.sleb128 -3744
+ 39161 8666 33       		.uleb128 0x33
+ 39162 8667 00000000 		.quad	.LBB2081
+ 39162      00000000 
+ 39163 866f 00000000 		.quad	.LBE2081
+ 39163      00000000 
+ 39164 8677 34       		.uleb128 0x34
+ 39165 8678 980D0000 		.long	0xd98
+ 39166 867c 03       		.byte	0x3
+ 39167 867d 91       		.byte	0x91
+ 39168 867e C046     		.sleb128 -7360
+ 39169 8680 34       		.uleb128 0x34
+ 39170 8681 A40D0000 		.long	0xda4
+ 39171 8685 03       		.byte	0x3
+ 39172 8686 91       		.byte	0x91
+ 39173 8687 B046     		.sleb128 -7376
+ 39174 8689 34       		.uleb128 0x34
+ 39175 868a AF0D0000 		.long	0xdaf
+ 39176 868e 03       		.byte	0x3
+ 39177 868f 91       		.byte	0x91
+ 39178 8690 A046     		.sleb128 -7392
+ 39179 8692 34       		.uleb128 0x34
+ 39180 8693 BB0D0000 		.long	0xdbb
+ 39181 8697 03       		.byte	0x3
+ 39182 8698 91       		.byte	0x91
+ 39183 8699 FC62     		.sleb128 -3716
+ 39184 869b 00       		.byte	0x0
+ 39185 869c 00       		.byte	0x0
+ 39186 869d 31       		.uleb128 0x31
+ 39187 869e C70D0000 		.long	0xdc7
+ 39188 86a2 00000000 		.quad	.LBB2082
+ 39188      00000000 
+ 39189 86aa 00000000 		.quad	.LBE2082
+ 39189      00000000 
+ 39190 86b2 02       		.byte	0x2
+ 39191 86b3 6603     		.value	0x366
+ 39192 86b5 CC860000 		.long	0x86cc
+ 39193 86b9 32       		.uleb128 0x32
+ 39194 86ba E20D0000 		.long	0xde2
+ 39195 86be 03       		.byte	0x3
+ 39196 86bf 91       		.byte	0x91
+ 39197 86c0 8063     		.sleb128 -3712
+ 39198 86c2 32       		.uleb128 0x32
+ 39199 86c3 D80D0000 		.long	0xdd8
+ 39200 86c7 03       		.byte	0x3
+ 39201 86c8 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1035
+
+
+ 39202 86c9 9063     		.sleb128 -3696
+ 39203 86cb 00       		.byte	0x0
+ 39204 86cc 31       		.uleb128 0x31
+ 39205 86cd 6E0D0000 		.long	0xd6e
+ 39206 86d1 00000000 		.quad	.LBB2084
+ 39206      00000000 
+ 39207 86d9 00000000 		.quad	.LBE2084
+ 39207      00000000 
+ 39208 86e1 02       		.byte	0x2
+ 39209 86e2 6803     		.value	0x368
+ 39210 86e4 31870000 		.long	0x8731
+ 39211 86e8 32       		.uleb128 0x32
+ 39212 86e9 8C0D0000 		.long	0xd8c
+ 39213 86ed 03       		.byte	0x3
+ 39214 86ee 91       		.byte	0x91
+ 39215 86ef A063     		.sleb128 -3680
+ 39216 86f1 32       		.uleb128 0x32
+ 39217 86f2 800D0000 		.long	0xd80
+ 39218 86f6 03       		.byte	0x3
+ 39219 86f7 91       		.byte	0x91
+ 39220 86f8 B063     		.sleb128 -3664
+ 39221 86fa 33       		.uleb128 0x33
+ 39222 86fb 00000000 		.quad	.LBB2085
+ 39222      00000000 
+ 39223 8703 00000000 		.quad	.LBE2085
+ 39223      00000000 
+ 39224 870b 34       		.uleb128 0x34
+ 39225 870c 980D0000 		.long	0xd98
+ 39226 8710 03       		.byte	0x3
+ 39227 8711 91       		.byte	0x91
+ 39228 8712 F046     		.sleb128 -7312
+ 39229 8714 34       		.uleb128 0x34
+ 39230 8715 A40D0000 		.long	0xda4
+ 39231 8719 03       		.byte	0x3
+ 39232 871a 91       		.byte	0x91
+ 39233 871b E046     		.sleb128 -7328
+ 39234 871d 34       		.uleb128 0x34
+ 39235 871e AF0D0000 		.long	0xdaf
+ 39236 8722 03       		.byte	0x3
+ 39237 8723 91       		.byte	0x91
+ 39238 8724 D046     		.sleb128 -7344
+ 39239 8726 34       		.uleb128 0x34
+ 39240 8727 BB0D0000 		.long	0xdbb
+ 39241 872b 03       		.byte	0x3
+ 39242 872c 91       		.byte	0x91
+ 39243 872d CC63     		.sleb128 -3636
+ 39244 872f 00       		.byte	0x0
+ 39245 8730 00       		.byte	0x0
+ 39246 8731 31       		.uleb128 0x31
+ 39247 8732 C70D0000 		.long	0xdc7
+ 39248 8736 00000000 		.quad	.LBB2086
+ 39248      00000000 
+ 39249 873e 00000000 		.quad	.LBE2086
+ 39249      00000000 
+ 39250 8746 02       		.byte	0x2
+ 39251 8747 6A03     		.value	0x36a
+ 39252 8749 60870000 		.long	0x8760
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1036
+
+
+ 39253 874d 32       		.uleb128 0x32
+ 39254 874e E20D0000 		.long	0xde2
+ 39255 8752 03       		.byte	0x3
+ 39256 8753 91       		.byte	0x91
+ 39257 8754 D063     		.sleb128 -3632
+ 39258 8756 32       		.uleb128 0x32
+ 39259 8757 D80D0000 		.long	0xdd8
+ 39260 875b 03       		.byte	0x3
+ 39261 875c 91       		.byte	0x91
+ 39262 875d E063     		.sleb128 -3616
+ 39263 875f 00       		.byte	0x0
+ 39264 8760 31       		.uleb128 0x31
+ 39265 8761 ED0D0000 		.long	0xded
+ 39266 8765 00000000 		.quad	.LBB2088
+ 39266      00000000 
+ 39267 876d 00000000 		.quad	.LBE2088
+ 39267      00000000 
+ 39268 8775 02       		.byte	0x2
+ 39269 8776 6C03     		.value	0x36c
+ 39270 8778 8F870000 		.long	0x878f
+ 39271 877c 32       		.uleb128 0x32
+ 39272 877d 0A0E0000 		.long	0xe0a
+ 39273 8781 03       		.byte	0x3
+ 39274 8782 91       		.byte	0x91
+ 39275 8783 F063     		.sleb128 -3600
+ 39276 8785 32       		.uleb128 0x32
+ 39277 8786 FF0D0000 		.long	0xdff
+ 39278 878a 03       		.byte	0x3
+ 39279 878b 91       		.byte	0x91
+ 39280 878c 8064     		.sleb128 -3584
+ 39281 878e 00       		.byte	0x0
+ 39282 878f 35       		.uleb128 0x35
+ 39283 8790 1F0D0000 		.long	0xd1f
+ 39284 8794 00000000 		.quad	.LBB2090
+ 39284      00000000 
+ 39285 879c 00000000 		.quad	.LBE2090
+ 39285      00000000 
+ 39286 87a4 02       		.byte	0x2
+ 39287 87a5 6E03     		.value	0x36e
+ 39288 87a7 32       		.uleb128 0x32
+ 39289 87a8 3A0D0000 		.long	0xd3a
+ 39290 87ac 03       		.byte	0x3
+ 39291 87ad 91       		.byte	0x91
+ 39292 87ae 9064     		.sleb128 -3568
+ 39293 87b0 32       		.uleb128 0x32
+ 39294 87b1 300D0000 		.long	0xd30
+ 39295 87b5 03       		.byte	0x3
+ 39296 87b6 91       		.byte	0x91
+ 39297 87b7 A064     		.sleb128 -3552
+ 39298 87b9 00       		.byte	0x0
+ 39299 87ba 00       		.byte	0x0
+ 39300 87bb 00       		.byte	0x0
+ 39301 87bc 00       		.byte	0x0
+ 39302 87bd 36       		.uleb128 0x36
+ 39303 87be 00000000 		.quad	.LBB2092
+ 39303      00000000 
+ 39304 87c6 00000000 		.quad	.LBE2092
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1037
+
+
+ 39304      00000000 
+ 39305 87ce DC870000 		.long	0x87dc
+ 39306 87d2 34       		.uleb128 0x34
+ 39307 87d3 180C0000 		.long	0xc18
+ 39308 87d7 03       		.byte	0x3
+ 39309 87d8 91       		.byte	0x91
+ 39310 87d9 8046     		.sleb128 -7424
+ 39311 87db 00       		.byte	0x0
+ 39312 87dc 31       		.uleb128 0x31
+ 39313 87dd 160E0000 		.long	0xe16
+ 39314 87e1 00000000 		.quad	.LBB2093
+ 39314      00000000 
+ 39315 87e9 00000000 		.quad	.LBE2093
+ 39315      00000000 
+ 39316 87f1 02       		.byte	0x2
+ 39317 87f2 9406     		.value	0x694
+ 39318 87f4 84880000 		.long	0x8884
+ 39319 87f8 32       		.uleb128 0x32
+ 39320 87f9 280E0000 		.long	0xe28
+ 39321 87fd 03       		.byte	0x3
+ 39322 87fe 91       		.byte	0x91
+ 39323 87ff B064     		.sleb128 -3536
+ 39324 8801 33       		.uleb128 0x33
+ 39325 8802 00000000 		.quad	.LBB2094
+ 39325      00000000 
+ 39326 880a 00000000 		.quad	.LBE2094
+ 39326      00000000 
+ 39327 8812 34       		.uleb128 0x34
+ 39328 8813 340E0000 		.long	0xe34
+ 39329 8817 09       		.byte	0x9
+ 39330 8818 03       		.byte	0x3
+ 39331 8819 00000000 		.quad	ShiftRowTable.6768
+ 39331      00000000 
+ 39332 8821 35       		.uleb128 0x35
+ 39333 8822 6E0D0000 		.long	0xd6e
+ 39334 8826 00000000 		.quad	.LBB2095
+ 39334      00000000 
+ 39335 882e 00000000 		.quad	.LBE2095
+ 39335      00000000 
+ 39336 8836 02       		.byte	0x2
+ 39337 8837 9B02     		.value	0x29b
+ 39338 8839 32       		.uleb128 0x32
+ 39339 883a 8C0D0000 		.long	0xd8c
+ 39340 883e 03       		.byte	0x3
+ 39341 883f 91       		.byte	0x91
+ 39342 8840 C064     		.sleb128 -3520
+ 39343 8842 32       		.uleb128 0x32
+ 39344 8843 800D0000 		.long	0xd80
+ 39345 8847 03       		.byte	0x3
+ 39346 8848 91       		.byte	0x91
+ 39347 8849 D064     		.sleb128 -3504
+ 39348 884b 33       		.uleb128 0x33
+ 39349 884c 00000000 		.quad	.LBB2096
+ 39349      00000000 
+ 39350 8854 00000000 		.quad	.LBE2096
+ 39350      00000000 
+ 39351 885c 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1038
+
+
+ 39352 885d 980D0000 		.long	0xd98
+ 39353 8861 03       		.byte	0x3
+ 39354 8862 91       		.byte	0x91
+ 39355 8863 A047     		.sleb128 -7264
+ 39356 8865 34       		.uleb128 0x34
+ 39357 8866 A40D0000 		.long	0xda4
+ 39358 886a 03       		.byte	0x3
+ 39359 886b 91       		.byte	0x91
+ 39360 886c 9047     		.sleb128 -7280
+ 39361 886e 34       		.uleb128 0x34
+ 39362 886f AF0D0000 		.long	0xdaf
+ 39363 8873 03       		.byte	0x3
+ 39364 8874 91       		.byte	0x91
+ 39365 8875 8047     		.sleb128 -7296
+ 39366 8877 34       		.uleb128 0x34
+ 39367 8878 BB0D0000 		.long	0xdbb
+ 39368 887c 03       		.byte	0x3
+ 39369 887d 91       		.byte	0x91
+ 39370 887e EC64     		.sleb128 -3476
+ 39371 8880 00       		.byte	0x0
+ 39372 8881 00       		.byte	0x0
+ 39373 8882 00       		.byte	0x0
+ 39374 8883 00       		.byte	0x0
+ 39375 8884 36       		.uleb128 0x36
+ 39376 8885 00000000 		.quad	.LBB2097
+ 39376      00000000 
+ 39377 888d 00000000 		.quad	.LBE2097
+ 39377      00000000 
+ 39378 8895 A3880000 		.long	0x88a3
+ 39379 8899 34       		.uleb128 0x34
+ 39380 889a 280C0000 		.long	0xc28
+ 39381 889e 03       		.byte	0x3
+ 39382 889f 91       		.byte	0x91
+ 39383 88a0 F045     		.sleb128 -7440
+ 39384 88a2 00       		.byte	0x0
+ 39385 88a3 31       		.uleb128 0x31
+ 39386 88a4 520E0000 		.long	0xe52
+ 39387 88a8 00000000 		.quad	.LBB2098
+ 39387      00000000 
+ 39388 88b0 00000000 		.quad	.LBE2098
+ 39388      00000000 
+ 39389 88b8 02       		.byte	0x2
+ 39390 88b9 9606     		.value	0x696
+ 39391 88bb D2880000 		.long	0x88d2
+ 39392 88bf 32       		.uleb128 0x32
+ 39393 88c0 6D0E0000 		.long	0xe6d
+ 39394 88c4 03       		.byte	0x3
+ 39395 88c5 91       		.byte	0x91
+ 39396 88c6 F064     		.sleb128 -3472
+ 39397 88c8 32       		.uleb128 0x32
+ 39398 88c9 630E0000 		.long	0xe63
+ 39399 88cd 03       		.byte	0x3
+ 39400 88ce 91       		.byte	0x91
+ 39401 88cf 8065     		.sleb128 -3456
+ 39402 88d1 00       		.byte	0x0
+ 39403 88d2 36       		.uleb128 0x36
+ 39404 88d3 00000000 		.quad	.LBB2100
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1039
+
+
+ 39404      00000000 
+ 39405 88db 00000000 		.quad	.LBE2100
+ 39405      00000000 
+ 39406 88e3 F1880000 		.long	0x88f1
+ 39407 88e7 34       		.uleb128 0x34
+ 39408 88e8 380C0000 		.long	0xc38
+ 39409 88ec 03       		.byte	0x3
+ 39410 88ed 91       		.byte	0x91
+ 39411 88ee E045     		.sleb128 -7456
+ 39412 88f0 00       		.byte	0x0
+ 39413 88f1 31       		.uleb128 0x31
+ 39414 88f2 780E0000 		.long	0xe78
+ 39415 88f6 00000000 		.quad	.LBB2101
+ 39415      00000000 
+ 39416 88fe 00000000 		.quad	.LBE2101
+ 39416      00000000 
+ 39417 8906 02       		.byte	0x2
+ 39418 8907 9806     		.value	0x698
+ 39419 8909 32890000 		.long	0x8932
+ 39420 890d 32       		.uleb128 0x32
+ 39421 890e 8A0E0000 		.long	0xe8a
+ 39422 8912 03       		.byte	0x3
+ 39423 8913 91       		.byte	0x91
+ 39424 8914 9065     		.sleb128 -3440
+ 39425 8916 33       		.uleb128 0x33
+ 39426 8917 00000000 		.quad	.LBB2102
+ 39426      00000000 
+ 39427 891f 00000000 		.quad	.LBE2102
+ 39427      00000000 
+ 39428 8927 34       		.uleb128 0x34
+ 39429 8928 960E0000 		.long	0xe96
+ 39430 892c 03       		.byte	0x3
+ 39431 892d 91       		.byte	0x91
+ 39432 892e B047     		.sleb128 -7248
+ 39433 8930 00       		.byte	0x0
+ 39434 8931 00       		.byte	0x0
+ 39435 8932 33       		.uleb128 0x33
+ 39436 8933 00000000 		.quad	.LBB2103
+ 39436      00000000 
+ 39437 893b 00000000 		.quad	.LBE2103
+ 39437      00000000 
+ 39438 8943 34       		.uleb128 0x34
+ 39439 8944 440C0000 		.long	0xc44
+ 39440 8948 03       		.byte	0x3
+ 39441 8949 91       		.byte	0x91
+ 39442 894a D045     		.sleb128 -7472
+ 39443 894c 00       		.byte	0x0
+ 39444 894d 00       		.byte	0x0
+ 39445 894e 00       		.byte	0x0
+ 39446 894f 31       		.uleb128 0x31
+ 39447 8950 A30E0000 		.long	0xea3
+ 39448 8954 00000000 		.quad	.LBB2104
+ 39448      00000000 
+ 39449 895c 00000000 		.quad	.LBE2104
+ 39449      00000000 
+ 39450 8964 02       		.byte	0x2
+ 39451 8965 8A07     		.value	0x78a
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1040
+
+
+ 39452 8967 508A0000 		.long	0x8a50
+ 39453 896b 32       		.uleb128 0x32
+ 39454 896c B50E0000 		.long	0xeb5
+ 39455 8970 03       		.byte	0x3
+ 39456 8971 91       		.byte	0x91
+ 39457 8972 A065     		.sleb128 -3424
+ 39458 8974 33       		.uleb128 0x33
+ 39459 8975 00000000 		.quad	.LBB2105
+ 39459      00000000 
+ 39460 897d 00000000 		.quad	.LBE2105
+ 39460      00000000 
+ 39461 8985 34       		.uleb128 0x34
+ 39462 8986 C10E0000 		.long	0xec1
+ 39463 898a 04       		.byte	0x4
+ 39464 898b 76       		.byte	0x76
+ 39465 898c 80BD7F   		.sleb128 -8576
+ 39466 898f 31       		.uleb128 0x31
+ 39467 8990 CE0E0000 		.long	0xece
+ 39468 8994 00000000 		.quad	.LBB2106
+ 39468      00000000 
+ 39469 899c 00000000 		.quad	.LBE2106
+ 39469      00000000 
+ 39470 89a4 02       		.byte	0x2
+ 39471 89a5 1F06     		.value	0x61f
+ 39472 89a7 D0890000 		.long	0x89d0
+ 39473 89ab 32       		.uleb128 0x32
+ 39474 89ac E00E0000 		.long	0xee0
+ 39475 89b0 03       		.byte	0x3
+ 39476 89b1 91       		.byte	0x91
+ 39477 89b2 B065     		.sleb128 -3408
+ 39478 89b4 33       		.uleb128 0x33
+ 39479 89b5 00000000 		.quad	.LBB2107
+ 39479      00000000 
+ 39480 89bd 00000000 		.quad	.LBE2107
+ 39480      00000000 
+ 39481 89c5 34       		.uleb128 0x34
+ 39482 89c6 EC0E0000 		.long	0xeec
+ 39483 89ca 03       		.byte	0x3
+ 39484 89cb 91       		.byte	0x91
+ 39485 89cc C047     		.sleb128 -7232
+ 39486 89ce 00       		.byte	0x0
+ 39487 89cf 00       		.byte	0x0
+ 39488 89d0 31       		.uleb128 0x31
+ 39489 89d1 CE0E0000 		.long	0xece
+ 39490 89d5 00000000 		.quad	.LBB2108
+ 39490      00000000 
+ 39491 89dd 00000000 		.quad	.LBE2108
+ 39491      00000000 
+ 39492 89e5 02       		.byte	0x2
+ 39493 89e6 2006     		.value	0x620
+ 39494 89e8 118A0000 		.long	0x8a11
+ 39495 89ec 32       		.uleb128 0x32
+ 39496 89ed E00E0000 		.long	0xee0
+ 39497 89f1 03       		.byte	0x3
+ 39498 89f2 91       		.byte	0x91
+ 39499 89f3 C065     		.sleb128 -3392
+ 39500 89f5 33       		.uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1041
+
+
+ 39501 89f6 00000000 		.quad	.LBB2109
+ 39501      00000000 
+ 39502 89fe 00000000 		.quad	.LBE2109
+ 39502      00000000 
+ 39503 8a06 34       		.uleb128 0x34
+ 39504 8a07 EC0E0000 		.long	0xeec
+ 39505 8a0b 03       		.byte	0x3
+ 39506 8a0c 91       		.byte	0x91
+ 39507 8a0d D047     		.sleb128 -7216
+ 39508 8a0f 00       		.byte	0x0
+ 39509 8a10 00       		.byte	0x0
+ 39510 8a11 35       		.uleb128 0x35
+ 39511 8a12 CE0E0000 		.long	0xece
+ 39512 8a16 00000000 		.quad	.LBB2110
+ 39512      00000000 
+ 39513 8a1e 00000000 		.quad	.LBE2110
+ 39513      00000000 
+ 39514 8a26 02       		.byte	0x2
+ 39515 8a27 2106     		.value	0x621
+ 39516 8a29 32       		.uleb128 0x32
+ 39517 8a2a E00E0000 		.long	0xee0
+ 39518 8a2e 03       		.byte	0x3
+ 39519 8a2f 91       		.byte	0x91
+ 39520 8a30 D065     		.sleb128 -3376
+ 39521 8a32 33       		.uleb128 0x33
+ 39522 8a33 00000000 		.quad	.LBB2111
+ 39522      00000000 
+ 39523 8a3b 00000000 		.quad	.LBE2111
+ 39523      00000000 
+ 39524 8a43 34       		.uleb128 0x34
+ 39525 8a44 EC0E0000 		.long	0xeec
+ 39526 8a48 03       		.byte	0x3
+ 39527 8a49 91       		.byte	0x91
+ 39528 8a4a E047     		.sleb128 -7200
+ 39529 8a4c 00       		.byte	0x0
+ 39530 8a4d 00       		.byte	0x0
+ 39531 8a4e 00       		.byte	0x0
+ 39532 8a4f 00       		.byte	0x0
+ 39533 8a50 31       		.uleb128 0x31
+ 39534 8a51 520E0000 		.long	0xe52
+ 39535 8a55 00000000 		.quad	.LBB2112
+ 39535      00000000 
+ 39536 8a5d 00000000 		.quad	.LBE2112
+ 39536      00000000 
+ 39537 8a65 02       		.byte	0x2
+ 39538 8a66 8A07     		.value	0x78a
+ 39539 8a68 7F8A0000 		.long	0x8a7f
+ 39540 8a6c 32       		.uleb128 0x32
+ 39541 8a6d 6D0E0000 		.long	0xe6d
+ 39542 8a71 03       		.byte	0x3
+ 39543 8a72 91       		.byte	0x91
+ 39544 8a73 E065     		.sleb128 -3360
+ 39545 8a75 32       		.uleb128 0x32
+ 39546 8a76 630E0000 		.long	0xe63
+ 39547 8a7a 03       		.byte	0x3
+ 39548 8a7b 91       		.byte	0x91
+ 39549 8a7c F065     		.sleb128 -3344
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1042
+
+
+ 39550 8a7e 00       		.byte	0x0
+ 39551 8a7f 31       		.uleb128 0x31
+ 39552 8a80 4E740000 		.long	0x744e
+ 39553 8a84 00000000 		.quad	.LBB2114
+ 39553      00000000 
+ 39554 8a8c 00000000 		.quad	.LBE2114
+ 39554      00000000 
+ 39555 8a94 02       		.byte	0x2
+ 39556 8a95 8B07     		.value	0x78b
+ 39557 8a97 0F8B0000 		.long	0x8b0f
+ 39558 8a9b 32       		.uleb128 0x32
+ 39559 8a9c 60740000 		.long	0x7460
+ 39560 8aa0 03       		.byte	0x3
+ 39561 8aa1 91       		.byte	0x91
+ 39562 8aa2 8066     		.sleb128 -3328
+ 39563 8aa4 33       		.uleb128 0x33
+ 39564 8aa5 00000000 		.quad	.LBB2115
+ 39564      00000000 
+ 39565 8aad 00000000 		.quad	.LBE2115
+ 39565      00000000 
+ 39566 8ab5 34       		.uleb128 0x34
+ 39567 8ab6 6C740000 		.long	0x746c
+ 39568 8aba 03       		.byte	0x3
+ 39569 8abb 91       		.byte	0x91
+ 39570 8abc 8048     		.sleb128 -7168
+ 39571 8abe 34       		.uleb128 0x34
+ 39572 8abf 76740000 		.long	0x7476
+ 39573 8ac3 03       		.byte	0x3
+ 39574 8ac4 91       		.byte	0x91
+ 39575 8ac5 9466     		.sleb128 -3308
+ 39576 8ac7 35       		.uleb128 0x35
+ 39577 8ac8 12490000 		.long	0x4912
+ 39578 8acc 00000000 		.quad	.LBB2116
+ 39578      00000000 
+ 39579 8ad4 00000000 		.quad	.LBE2116
+ 39579      00000000 
+ 39580 8adc 02       		.byte	0x2
+ 39581 8add 7906     		.value	0x679
+ 39582 8adf 32       		.uleb128 0x32
+ 39583 8ae0 24490000 		.long	0x4924
+ 39584 8ae4 03       		.byte	0x3
+ 39585 8ae5 91       		.byte	0x91
+ 39586 8ae6 9866     		.sleb128 -3304
+ 39587 8ae8 33       		.uleb128 0x33
+ 39588 8ae9 00000000 		.quad	.LBB2117
+ 39588      00000000 
+ 39589 8af1 00000000 		.quad	.LBE2117
+ 39589      00000000 
+ 39590 8af9 34       		.uleb128 0x34
+ 39591 8afa 2E490000 		.long	0x492e
+ 39592 8afe 03       		.byte	0x3
+ 39593 8aff 91       		.byte	0x91
+ 39594 8b00 F047     		.sleb128 -7184
+ 39595 8b02 34       		.uleb128 0x34
+ 39596 8b03 3A490000 		.long	0x493a
+ 39597 8b07 03       		.byte	0x3
+ 39598 8b08 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1043
+
+
+ 39599 8b09 9C66     		.sleb128 -3300
+ 39600 8b0b 00       		.byte	0x0
+ 39601 8b0c 00       		.byte	0x0
+ 39602 8b0d 00       		.byte	0x0
+ 39603 8b0e 00       		.byte	0x0
+ 39604 8b0f 31       		.uleb128 0x31
+ 39605 8b10 A30E0000 		.long	0xea3
+ 39606 8b14 00000000 		.quad	.LBB2118
+ 39606      00000000 
+ 39607 8b1c 00000000 		.quad	.LBE2118
+ 39607      00000000 
+ 39608 8b24 02       		.byte	0x2
+ 39609 8b25 8B07     		.value	0x78b
+ 39610 8b27 108C0000 		.long	0x8c10
+ 39611 8b2b 32       		.uleb128 0x32
+ 39612 8b2c B50E0000 		.long	0xeb5
+ 39613 8b30 03       		.byte	0x3
+ 39614 8b31 91       		.byte	0x91
+ 39615 8b32 A066     		.sleb128 -3296
+ 39616 8b34 33       		.uleb128 0x33
+ 39617 8b35 00000000 		.quad	.LBB2119
+ 39617      00000000 
+ 39618 8b3d 00000000 		.quad	.LBE2119
+ 39618      00000000 
+ 39619 8b45 34       		.uleb128 0x34
+ 39620 8b46 C10E0000 		.long	0xec1
+ 39621 8b4a 04       		.byte	0x4
+ 39622 8b4b 76       		.byte	0x76
+ 39623 8b4c 90BD7F   		.sleb128 -8560
+ 39624 8b4f 31       		.uleb128 0x31
+ 39625 8b50 CE0E0000 		.long	0xece
+ 39626 8b54 00000000 		.quad	.LBB2120
+ 39626      00000000 
+ 39627 8b5c 00000000 		.quad	.LBE2120
+ 39627      00000000 
+ 39628 8b64 02       		.byte	0x2
+ 39629 8b65 1F06     		.value	0x61f
+ 39630 8b67 908B0000 		.long	0x8b90
+ 39631 8b6b 32       		.uleb128 0x32
+ 39632 8b6c E00E0000 		.long	0xee0
+ 39633 8b70 03       		.byte	0x3
+ 39634 8b71 91       		.byte	0x91
+ 39635 8b72 B066     		.sleb128 -3280
+ 39636 8b74 33       		.uleb128 0x33
+ 39637 8b75 00000000 		.quad	.LBB2121
+ 39637      00000000 
+ 39638 8b7d 00000000 		.quad	.LBE2121
+ 39638      00000000 
+ 39639 8b85 34       		.uleb128 0x34
+ 39640 8b86 EC0E0000 		.long	0xeec
+ 39641 8b8a 03       		.byte	0x3
+ 39642 8b8b 91       		.byte	0x91
+ 39643 8b8c 9048     		.sleb128 -7152
+ 39644 8b8e 00       		.byte	0x0
+ 39645 8b8f 00       		.byte	0x0
+ 39646 8b90 31       		.uleb128 0x31
+ 39647 8b91 CE0E0000 		.long	0xece
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1044
+
+
+ 39648 8b95 00000000 		.quad	.LBB2122
+ 39648      00000000 
+ 39649 8b9d 00000000 		.quad	.LBE2122
+ 39649      00000000 
+ 39650 8ba5 02       		.byte	0x2
+ 39651 8ba6 2006     		.value	0x620
+ 39652 8ba8 D18B0000 		.long	0x8bd1
+ 39653 8bac 32       		.uleb128 0x32
+ 39654 8bad E00E0000 		.long	0xee0
+ 39655 8bb1 03       		.byte	0x3
+ 39656 8bb2 91       		.byte	0x91
+ 39657 8bb3 C066     		.sleb128 -3264
+ 39658 8bb5 33       		.uleb128 0x33
+ 39659 8bb6 00000000 		.quad	.LBB2123
+ 39659      00000000 
+ 39660 8bbe 00000000 		.quad	.LBE2123
+ 39660      00000000 
+ 39661 8bc6 34       		.uleb128 0x34
+ 39662 8bc7 EC0E0000 		.long	0xeec
+ 39663 8bcb 03       		.byte	0x3
+ 39664 8bcc 91       		.byte	0x91
+ 39665 8bcd A048     		.sleb128 -7136
+ 39666 8bcf 00       		.byte	0x0
+ 39667 8bd0 00       		.byte	0x0
+ 39668 8bd1 35       		.uleb128 0x35
+ 39669 8bd2 CE0E0000 		.long	0xece
+ 39670 8bd6 00000000 		.quad	.LBB2124
+ 39670      00000000 
+ 39671 8bde 00000000 		.quad	.LBE2124
+ 39671      00000000 
+ 39672 8be6 02       		.byte	0x2
+ 39673 8be7 2106     		.value	0x621
+ 39674 8be9 32       		.uleb128 0x32
+ 39675 8bea E00E0000 		.long	0xee0
+ 39676 8bee 03       		.byte	0x3
+ 39677 8bef 91       		.byte	0x91
+ 39678 8bf0 D066     		.sleb128 -3248
+ 39679 8bf2 33       		.uleb128 0x33
+ 39680 8bf3 00000000 		.quad	.LBB2125
+ 39680      00000000 
+ 39681 8bfb 00000000 		.quad	.LBE2125
+ 39681      00000000 
+ 39682 8c03 34       		.uleb128 0x34
+ 39683 8c04 EC0E0000 		.long	0xeec
+ 39684 8c08 03       		.byte	0x3
+ 39685 8c09 91       		.byte	0x91
+ 39686 8c0a B048     		.sleb128 -7120
+ 39687 8c0c 00       		.byte	0x0
+ 39688 8c0d 00       		.byte	0x0
+ 39689 8c0e 00       		.byte	0x0
+ 39690 8c0f 00       		.byte	0x0
+ 39691 8c10 31       		.uleb128 0x31
+ 39692 8c11 520E0000 		.long	0xe52
+ 39693 8c15 00000000 		.quad	.LBB2126
+ 39693      00000000 
+ 39694 8c1d 00000000 		.quad	.LBE2126
+ 39694      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1045
+
+
+ 39695 8c25 02       		.byte	0x2
+ 39696 8c26 8B07     		.value	0x78b
+ 39697 8c28 3F8C0000 		.long	0x8c3f
+ 39698 8c2c 32       		.uleb128 0x32
+ 39699 8c2d 6D0E0000 		.long	0xe6d
+ 39700 8c31 03       		.byte	0x3
+ 39701 8c32 91       		.byte	0x91
+ 39702 8c33 E066     		.sleb128 -3232
+ 39703 8c35 32       		.uleb128 0x32
+ 39704 8c36 630E0000 		.long	0xe63
+ 39705 8c3a 03       		.byte	0x3
+ 39706 8c3b 91       		.byte	0x91
+ 39707 8c3c F066     		.sleb128 -3216
+ 39708 8c3e 00       		.byte	0x0
+ 39709 8c3f 31       		.uleb128 0x31
+ 39710 8c40 D10B0000 		.long	0xbd1
+ 39711 8c44 00000000 		.quad	.LBB2128
+ 39711      00000000 
+ 39712 8c4c 00000000 		.quad	.LBE2128
+ 39712      00000000 
+ 39713 8c54 02       		.byte	0x2
+ 39714 8c55 8C07     		.value	0x78c
+ 39715 8c57 E7900000 		.long	0x90e7
+ 39716 8c5b 32       		.uleb128 0x32
+ 39717 8c5c EF0B0000 		.long	0xbef
+ 39718 8c60 03       		.byte	0x3
+ 39719 8c61 91       		.byte	0x91
+ 39720 8c62 8C67     		.sleb128 -3188
+ 39721 8c64 32       		.uleb128 0x32
+ 39722 8c65 E30B0000 		.long	0xbe3
+ 39723 8c69 03       		.byte	0x3
+ 39724 8c6a 91       		.byte	0x91
+ 39725 8c6b 9067     		.sleb128 -3184
+ 39726 8c6d 33       		.uleb128 0x33
+ 39727 8c6e 00000000 		.quad	.LBB2129
+ 39727      00000000 
+ 39728 8c76 00000000 		.quad	.LBE2129
+ 39728      00000000 
+ 39729 8c7e 34       		.uleb128 0x34
+ 39730 8c7f FB0B0000 		.long	0xbfb
+ 39731 8c83 04       		.byte	0x4
+ 39732 8c84 76       		.byte	0x76
+ 39733 8c85 B0BD7F   		.sleb128 -8528
+ 39734 8c88 34       		.uleb128 0x34
+ 39735 8c89 070C0000 		.long	0xc07
+ 39736 8c8d 04       		.byte	0x4
+ 39737 8c8e 76       		.byte	0x76
+ 39738 8c8f A0BD7F   		.sleb128 -8544
+ 39739 8c92 31       		.uleb128 0x31
+ 39740 8c93 500C0000 		.long	0xc50
+ 39741 8c97 00000000 		.quad	.LBB2130
+ 39741      00000000 
+ 39742 8c9f 00000000 		.quad	.LBE2130
+ 39742      00000000 
+ 39743 8ca7 02       		.byte	0x2
+ 39744 8ca8 9106     		.value	0x691
+ 39745 8caa E58C0000 		.long	0x8ce5
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1046
+
+
+ 39746 8cae 32       		.uleb128 0x32
+ 39747 8caf 7A0C0000 		.long	0xc7a
+ 39748 8cb3 03       		.byte	0x3
+ 39749 8cb4 91       		.byte	0x91
+ 39750 8cb5 A867     		.sleb128 -3160
+ 39751 8cb7 32       		.uleb128 0x32
+ 39752 8cb8 6E0C0000 		.long	0xc6e
+ 39753 8cbc 03       		.byte	0x3
+ 39754 8cbd 91       		.byte	0x91
+ 39755 8cbe AC67     		.sleb128 -3156
+ 39756 8cc0 32       		.uleb128 0x32
+ 39757 8cc1 620C0000 		.long	0xc62
+ 39758 8cc5 03       		.byte	0x3
+ 39759 8cc6 91       		.byte	0x91
+ 39760 8cc7 B067     		.sleb128 -3152
+ 39761 8cc9 33       		.uleb128 0x33
+ 39762 8cca 00000000 		.quad	.LBB2131
+ 39762      00000000 
+ 39763 8cd2 00000000 		.quad	.LBE2131
+ 39763      00000000 
+ 39764 8cda 34       		.uleb128 0x34
+ 39765 8cdb 860C0000 		.long	0xc86
+ 39766 8cdf 03       		.byte	0x3
+ 39767 8ce0 91       		.byte	0x91
+ 39768 8ce1 8049     		.sleb128 -7040
+ 39769 8ce3 00       		.byte	0x0
+ 39770 8ce4 00       		.byte	0x0
+ 39771 8ce5 31       		.uleb128 0x31
+ 39772 8ce6 910C0000 		.long	0xc91
+ 39773 8cea 00000000 		.quad	.LBB2132
+ 39773      00000000 
+ 39774 8cf2 00000000 		.quad	.LBE2132
+ 39774      00000000 
+ 39775 8cfa 02       		.byte	0x2
+ 39776 8cfb 9206     		.value	0x692
+ 39777 8cfd 558F0000 		.long	0x8f55
+ 39778 8d01 32       		.uleb128 0x32
+ 39779 8d02 A30C0000 		.long	0xca3
+ 39780 8d06 03       		.byte	0x3
+ 39781 8d07 91       		.byte	0x91
+ 39782 8d08 C067     		.sleb128 -3136
+ 39783 8d0a 35       		.uleb128 0x35
+ 39784 8d0b B00C0000 		.long	0xcb0
+ 39785 8d0f 00000000 		.quad	.LBB2134
+ 39785      00000000 
+ 39786 8d17 00000000 		.quad	.LBE2134
+ 39786      00000000 
+ 39787 8d1f 02       		.byte	0x2
+ 39788 8d20 7D03     		.value	0x37d
+ 39789 8d22 32       		.uleb128 0x32
+ 39790 8d23 CE0C0000 		.long	0xcce
+ 39791 8d27 03       		.byte	0x3
+ 39792 8d28 91       		.byte	0x91
+ 39793 8d29 D867     		.sleb128 -3112
+ 39794 8d2b 32       		.uleb128 0x32
+ 39795 8d2c C20C0000 		.long	0xcc2
+ 39796 8d30 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1047
+
+
+ 39797 8d31 91       		.byte	0x91
+ 39798 8d32 E067     		.sleb128 -3104
+ 39799 8d34 33       		.uleb128 0x33
+ 39800 8d35 00000000 		.quad	.LBB2135
+ 39800      00000000 
+ 39801 8d3d 00000000 		.quad	.LBE2135
+ 39801      00000000 
+ 39802 8d45 34       		.uleb128 0x34
+ 39803 8d46 DA0C0000 		.long	0xcda
+ 39804 8d4a 03       		.byte	0x3
+ 39805 8d4b 91       		.byte	0x91
+ 39806 8d4c B068     		.sleb128 -3024
+ 39807 8d4e 34       		.uleb128 0x34
+ 39808 8d4f E50C0000 		.long	0xce5
+ 39809 8d53 03       		.byte	0x3
+ 39810 8d54 91       		.byte	0x91
+ 39811 8d55 A068     		.sleb128 -3040
+ 39812 8d57 34       		.uleb128 0x34
+ 39813 8d58 F00C0000 		.long	0xcf0
+ 39814 8d5c 03       		.byte	0x3
+ 39815 8d5d 91       		.byte	0x91
+ 39816 8d5e 9068     		.sleb128 -3056
+ 39817 8d60 34       		.uleb128 0x34
+ 39818 8d61 FC0C0000 		.long	0xcfc
+ 39819 8d65 03       		.byte	0x3
+ 39820 8d66 91       		.byte	0x91
+ 39821 8d67 8068     		.sleb128 -3072
+ 39822 8d69 34       		.uleb128 0x34
+ 39823 8d6a 080D0000 		.long	0xd08
+ 39824 8d6e 03       		.byte	0x3
+ 39825 8d6f 91       		.byte	0x91
+ 39826 8d70 FC67     		.sleb128 -3076
+ 39827 8d72 31       		.uleb128 0x31
+ 39828 8d73 1F0D0000 		.long	0xd1f
+ 39829 8d77 00000000 		.quad	.LBB2136
+ 39829      00000000 
+ 39830 8d7f 00000000 		.quad	.LBE2136
+ 39830      00000000 
+ 39831 8d87 02       		.byte	0x2
+ 39832 8d88 5603     		.value	0x356
+ 39833 8d8a A18D0000 		.long	0x8da1
+ 39834 8d8e 32       		.uleb128 0x32
+ 39835 8d8f 3A0D0000 		.long	0xd3a
+ 39836 8d93 03       		.byte	0x3
+ 39837 8d94 91       		.byte	0x91
+ 39838 8d95 C068     		.sleb128 -3008
+ 39839 8d97 32       		.uleb128 0x32
+ 39840 8d98 300D0000 		.long	0xd30
+ 39841 8d9c 03       		.byte	0x3
+ 39842 8d9d 91       		.byte	0x91
+ 39843 8d9e D068     		.sleb128 -2992
+ 39844 8da0 00       		.byte	0x0
+ 39845 8da1 31       		.uleb128 0x31
+ 39846 8da2 450D0000 		.long	0xd45
+ 39847 8da6 00000000 		.quad	.LBB2138
+ 39847      00000000 
+ 39848 8dae 00000000 		.quad	.LBE2138
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1048
+
+
+ 39848      00000000 
+ 39849 8db6 02       		.byte	0x2
+ 39850 8db7 5E03     		.value	0x35e
+ 39851 8db9 D08D0000 		.long	0x8dd0
+ 39852 8dbd 32       		.uleb128 0x32
+ 39853 8dbe 620D0000 		.long	0xd62
+ 39854 8dc2 03       		.byte	0x3
+ 39855 8dc3 91       		.byte	0x91
+ 39856 8dc4 E068     		.sleb128 -2976
+ 39857 8dc6 32       		.uleb128 0x32
+ 39858 8dc7 570D0000 		.long	0xd57
+ 39859 8dcb 03       		.byte	0x3
+ 39860 8dcc 91       		.byte	0x91
+ 39861 8dcd F068     		.sleb128 -2960
+ 39862 8dcf 00       		.byte	0x0
+ 39863 8dd0 31       		.uleb128 0x31
+ 39864 8dd1 6E0D0000 		.long	0xd6e
+ 39865 8dd5 00000000 		.quad	.LBB2140
+ 39865      00000000 
+ 39866 8ddd 00000000 		.quad	.LBE2140
+ 39866      00000000 
+ 39867 8de5 02       		.byte	0x2
+ 39868 8de6 6403     		.value	0x364
+ 39869 8de8 358E0000 		.long	0x8e35
+ 39870 8dec 32       		.uleb128 0x32
+ 39871 8ded 8C0D0000 		.long	0xd8c
+ 39872 8df1 03       		.byte	0x3
+ 39873 8df2 91       		.byte	0x91
+ 39874 8df3 8069     		.sleb128 -2944
+ 39875 8df5 32       		.uleb128 0x32
+ 39876 8df6 800D0000 		.long	0xd80
+ 39877 8dfa 03       		.byte	0x3
+ 39878 8dfb 91       		.byte	0x91
+ 39879 8dfc 9069     		.sleb128 -2928
+ 39880 8dfe 33       		.uleb128 0x33
+ 39881 8dff 00000000 		.quad	.LBB2141
+ 39881      00000000 
+ 39882 8e07 00000000 		.quad	.LBE2141
+ 39882      00000000 
+ 39883 8e0f 34       		.uleb128 0x34
+ 39884 8e10 980D0000 		.long	0xd98
+ 39885 8e14 03       		.byte	0x3
+ 39886 8e15 91       		.byte	0x91
+ 39887 8e16 B049     		.sleb128 -6992
+ 39888 8e18 34       		.uleb128 0x34
+ 39889 8e19 A40D0000 		.long	0xda4
+ 39890 8e1d 03       		.byte	0x3
+ 39891 8e1e 91       		.byte	0x91
+ 39892 8e1f A049     		.sleb128 -7008
+ 39893 8e21 34       		.uleb128 0x34
+ 39894 8e22 AF0D0000 		.long	0xdaf
+ 39895 8e26 03       		.byte	0x3
+ 39896 8e27 91       		.byte	0x91
+ 39897 8e28 9049     		.sleb128 -7024
+ 39898 8e2a 34       		.uleb128 0x34
+ 39899 8e2b BB0D0000 		.long	0xdbb
+ 39900 8e2f 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1049
+
+
+ 39901 8e30 91       		.byte	0x91
+ 39902 8e31 AC69     		.sleb128 -2900
+ 39903 8e33 00       		.byte	0x0
+ 39904 8e34 00       		.byte	0x0
+ 39905 8e35 31       		.uleb128 0x31
+ 39906 8e36 C70D0000 		.long	0xdc7
+ 39907 8e3a 00000000 		.quad	.LBB2142
+ 39907      00000000 
+ 39908 8e42 00000000 		.quad	.LBE2142
+ 39908      00000000 
+ 39909 8e4a 02       		.byte	0x2
+ 39910 8e4b 6603     		.value	0x366
+ 39911 8e4d 648E0000 		.long	0x8e64
+ 39912 8e51 32       		.uleb128 0x32
+ 39913 8e52 E20D0000 		.long	0xde2
+ 39914 8e56 03       		.byte	0x3
+ 39915 8e57 91       		.byte	0x91
+ 39916 8e58 B069     		.sleb128 -2896
+ 39917 8e5a 32       		.uleb128 0x32
+ 39918 8e5b D80D0000 		.long	0xdd8
+ 39919 8e5f 03       		.byte	0x3
+ 39920 8e60 91       		.byte	0x91
+ 39921 8e61 C069     		.sleb128 -2880
+ 39922 8e63 00       		.byte	0x0
+ 39923 8e64 31       		.uleb128 0x31
+ 39924 8e65 6E0D0000 		.long	0xd6e
+ 39925 8e69 00000000 		.quad	.LBB2144
+ 39925      00000000 
+ 39926 8e71 00000000 		.quad	.LBE2144
+ 39926      00000000 
+ 39927 8e79 02       		.byte	0x2
+ 39928 8e7a 6803     		.value	0x368
+ 39929 8e7c C98E0000 		.long	0x8ec9
+ 39930 8e80 32       		.uleb128 0x32
+ 39931 8e81 8C0D0000 		.long	0xd8c
+ 39932 8e85 03       		.byte	0x3
+ 39933 8e86 91       		.byte	0x91
+ 39934 8e87 D069     		.sleb128 -2864
+ 39935 8e89 32       		.uleb128 0x32
+ 39936 8e8a 800D0000 		.long	0xd80
+ 39937 8e8e 03       		.byte	0x3
+ 39938 8e8f 91       		.byte	0x91
+ 39939 8e90 E069     		.sleb128 -2848
+ 39940 8e92 33       		.uleb128 0x33
+ 39941 8e93 00000000 		.quad	.LBB2145
+ 39941      00000000 
+ 39942 8e9b 00000000 		.quad	.LBE2145
+ 39942      00000000 
+ 39943 8ea3 34       		.uleb128 0x34
+ 39944 8ea4 980D0000 		.long	0xd98
+ 39945 8ea8 03       		.byte	0x3
+ 39946 8ea9 91       		.byte	0x91
+ 39947 8eaa E049     		.sleb128 -6944
+ 39948 8eac 34       		.uleb128 0x34
+ 39949 8ead A40D0000 		.long	0xda4
+ 39950 8eb1 03       		.byte	0x3
+ 39951 8eb2 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1050
+
+
+ 39952 8eb3 D049     		.sleb128 -6960
+ 39953 8eb5 34       		.uleb128 0x34
+ 39954 8eb6 AF0D0000 		.long	0xdaf
+ 39955 8eba 03       		.byte	0x3
+ 39956 8ebb 91       		.byte	0x91
+ 39957 8ebc C049     		.sleb128 -6976
+ 39958 8ebe 34       		.uleb128 0x34
+ 39959 8ebf BB0D0000 		.long	0xdbb
+ 39960 8ec3 03       		.byte	0x3
+ 39961 8ec4 91       		.byte	0x91
+ 39962 8ec5 FC69     		.sleb128 -2820
+ 39963 8ec7 00       		.byte	0x0
+ 39964 8ec8 00       		.byte	0x0
+ 39965 8ec9 31       		.uleb128 0x31
+ 39966 8eca C70D0000 		.long	0xdc7
+ 39967 8ece 00000000 		.quad	.LBB2146
+ 39967      00000000 
+ 39968 8ed6 00000000 		.quad	.LBE2146
+ 39968      00000000 
+ 39969 8ede 02       		.byte	0x2
+ 39970 8edf 6A03     		.value	0x36a
+ 39971 8ee1 F88E0000 		.long	0x8ef8
+ 39972 8ee5 32       		.uleb128 0x32
+ 39973 8ee6 E20D0000 		.long	0xde2
+ 39974 8eea 03       		.byte	0x3
+ 39975 8eeb 91       		.byte	0x91
+ 39976 8eec 806A     		.sleb128 -2816
+ 39977 8eee 32       		.uleb128 0x32
+ 39978 8eef D80D0000 		.long	0xdd8
+ 39979 8ef3 03       		.byte	0x3
+ 39980 8ef4 91       		.byte	0x91
+ 39981 8ef5 906A     		.sleb128 -2800
+ 39982 8ef7 00       		.byte	0x0
+ 39983 8ef8 31       		.uleb128 0x31
+ 39984 8ef9 ED0D0000 		.long	0xded
+ 39985 8efd 00000000 		.quad	.LBB2148
+ 39985      00000000 
+ 39986 8f05 00000000 		.quad	.LBE2148
+ 39986      00000000 
+ 39987 8f0d 02       		.byte	0x2
+ 39988 8f0e 6C03     		.value	0x36c
+ 39989 8f10 278F0000 		.long	0x8f27
+ 39990 8f14 32       		.uleb128 0x32
+ 39991 8f15 0A0E0000 		.long	0xe0a
+ 39992 8f19 03       		.byte	0x3
+ 39993 8f1a 91       		.byte	0x91
+ 39994 8f1b A06A     		.sleb128 -2784
+ 39995 8f1d 32       		.uleb128 0x32
+ 39996 8f1e FF0D0000 		.long	0xdff
+ 39997 8f22 03       		.byte	0x3
+ 39998 8f23 91       		.byte	0x91
+ 39999 8f24 B06A     		.sleb128 -2768
+ 40000 8f26 00       		.byte	0x0
+ 40001 8f27 35       		.uleb128 0x35
+ 40002 8f28 1F0D0000 		.long	0xd1f
+ 40003 8f2c 00000000 		.quad	.LBB2150
+ 40003      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1051
+
+
+ 40004 8f34 00000000 		.quad	.LBE2150
+ 40004      00000000 
+ 40005 8f3c 02       		.byte	0x2
+ 40006 8f3d 6E03     		.value	0x36e
+ 40007 8f3f 32       		.uleb128 0x32
+ 40008 8f40 3A0D0000 		.long	0xd3a
+ 40009 8f44 03       		.byte	0x3
+ 40010 8f45 91       		.byte	0x91
+ 40011 8f46 C06A     		.sleb128 -2752
+ 40012 8f48 32       		.uleb128 0x32
+ 40013 8f49 300D0000 		.long	0xd30
+ 40014 8f4d 03       		.byte	0x3
+ 40015 8f4e 91       		.byte	0x91
+ 40016 8f4f D06A     		.sleb128 -2736
+ 40017 8f51 00       		.byte	0x0
+ 40018 8f52 00       		.byte	0x0
+ 40019 8f53 00       		.byte	0x0
+ 40020 8f54 00       		.byte	0x0
+ 40021 8f55 36       		.uleb128 0x36
+ 40022 8f56 00000000 		.quad	.LBB2152
+ 40022      00000000 
+ 40023 8f5e 00000000 		.quad	.LBE2152
+ 40023      00000000 
+ 40024 8f66 748F0000 		.long	0x8f74
+ 40025 8f6a 34       		.uleb128 0x34
+ 40026 8f6b 180C0000 		.long	0xc18
+ 40027 8f6f 03       		.byte	0x3
+ 40028 8f70 91       		.byte	0x91
+ 40029 8f71 F048     		.sleb128 -7056
+ 40030 8f73 00       		.byte	0x0
+ 40031 8f74 31       		.uleb128 0x31
+ 40032 8f75 160E0000 		.long	0xe16
+ 40033 8f79 00000000 		.quad	.LBB2153
+ 40033      00000000 
+ 40034 8f81 00000000 		.quad	.LBE2153
+ 40034      00000000 
+ 40035 8f89 02       		.byte	0x2
+ 40036 8f8a 9406     		.value	0x694
+ 40037 8f8c 1C900000 		.long	0x901c
+ 40038 8f90 32       		.uleb128 0x32
+ 40039 8f91 280E0000 		.long	0xe28
+ 40040 8f95 03       		.byte	0x3
+ 40041 8f96 91       		.byte	0x91
+ 40042 8f97 E06A     		.sleb128 -2720
+ 40043 8f99 33       		.uleb128 0x33
+ 40044 8f9a 00000000 		.quad	.LBB2154
+ 40044      00000000 
+ 40045 8fa2 00000000 		.quad	.LBE2154
+ 40045      00000000 
+ 40046 8faa 34       		.uleb128 0x34
+ 40047 8fab 340E0000 		.long	0xe34
+ 40048 8faf 09       		.byte	0x9
+ 40049 8fb0 03       		.byte	0x3
+ 40050 8fb1 00000000 		.quad	ShiftRowTable.6768
+ 40050      00000000 
+ 40051 8fb9 35       		.uleb128 0x35
+ 40052 8fba 6E0D0000 		.long	0xd6e
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1052
+
+
+ 40053 8fbe 00000000 		.quad	.LBB2155
+ 40053      00000000 
+ 40054 8fc6 00000000 		.quad	.LBE2155
+ 40054      00000000 
+ 40055 8fce 02       		.byte	0x2
+ 40056 8fcf 9B02     		.value	0x29b
+ 40057 8fd1 32       		.uleb128 0x32
+ 40058 8fd2 8C0D0000 		.long	0xd8c
+ 40059 8fd6 03       		.byte	0x3
+ 40060 8fd7 91       		.byte	0x91
+ 40061 8fd8 F06A     		.sleb128 -2704
+ 40062 8fda 32       		.uleb128 0x32
+ 40063 8fdb 800D0000 		.long	0xd80
+ 40064 8fdf 03       		.byte	0x3
+ 40065 8fe0 91       		.byte	0x91
+ 40066 8fe1 806B     		.sleb128 -2688
+ 40067 8fe3 33       		.uleb128 0x33
+ 40068 8fe4 00000000 		.quad	.LBB2156
+ 40068      00000000 
+ 40069 8fec 00000000 		.quad	.LBE2156
+ 40069      00000000 
+ 40070 8ff4 34       		.uleb128 0x34
+ 40071 8ff5 980D0000 		.long	0xd98
+ 40072 8ff9 03       		.byte	0x3
+ 40073 8ffa 91       		.byte	0x91
+ 40074 8ffb 904A     		.sleb128 -6896
+ 40075 8ffd 34       		.uleb128 0x34
+ 40076 8ffe A40D0000 		.long	0xda4
+ 40077 9002 03       		.byte	0x3
+ 40078 9003 91       		.byte	0x91
+ 40079 9004 804A     		.sleb128 -6912
+ 40080 9006 34       		.uleb128 0x34
+ 40081 9007 AF0D0000 		.long	0xdaf
+ 40082 900b 03       		.byte	0x3
+ 40083 900c 91       		.byte	0x91
+ 40084 900d F049     		.sleb128 -6928
+ 40085 900f 34       		.uleb128 0x34
+ 40086 9010 BB0D0000 		.long	0xdbb
+ 40087 9014 03       		.byte	0x3
+ 40088 9015 91       		.byte	0x91
+ 40089 9016 9C6B     		.sleb128 -2660
+ 40090 9018 00       		.byte	0x0
+ 40091 9019 00       		.byte	0x0
+ 40092 901a 00       		.byte	0x0
+ 40093 901b 00       		.byte	0x0
+ 40094 901c 36       		.uleb128 0x36
+ 40095 901d 00000000 		.quad	.LBB2157
+ 40095      00000000 
+ 40096 9025 00000000 		.quad	.LBE2157
+ 40096      00000000 
+ 40097 902d 3B900000 		.long	0x903b
+ 40098 9031 34       		.uleb128 0x34
+ 40099 9032 280C0000 		.long	0xc28
+ 40100 9036 03       		.byte	0x3
+ 40101 9037 91       		.byte	0x91
+ 40102 9038 E048     		.sleb128 -7072
+ 40103 903a 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1053
+
+
+ 40104 903b 31       		.uleb128 0x31
+ 40105 903c 520E0000 		.long	0xe52
+ 40106 9040 00000000 		.quad	.LBB2158
+ 40106      00000000 
+ 40107 9048 00000000 		.quad	.LBE2158
+ 40107      00000000 
+ 40108 9050 02       		.byte	0x2
+ 40109 9051 9606     		.value	0x696
+ 40110 9053 6A900000 		.long	0x906a
+ 40111 9057 32       		.uleb128 0x32
+ 40112 9058 6D0E0000 		.long	0xe6d
+ 40113 905c 03       		.byte	0x3
+ 40114 905d 91       		.byte	0x91
+ 40115 905e A06B     		.sleb128 -2656
+ 40116 9060 32       		.uleb128 0x32
+ 40117 9061 630E0000 		.long	0xe63
+ 40118 9065 03       		.byte	0x3
+ 40119 9066 91       		.byte	0x91
+ 40120 9067 B06B     		.sleb128 -2640
+ 40121 9069 00       		.byte	0x0
+ 40122 906a 36       		.uleb128 0x36
+ 40123 906b 00000000 		.quad	.LBB2160
+ 40123      00000000 
+ 40124 9073 00000000 		.quad	.LBE2160
+ 40124      00000000 
+ 40125 907b 89900000 		.long	0x9089
+ 40126 907f 34       		.uleb128 0x34
+ 40127 9080 380C0000 		.long	0xc38
+ 40128 9084 03       		.byte	0x3
+ 40129 9085 91       		.byte	0x91
+ 40130 9086 D048     		.sleb128 -7088
+ 40131 9088 00       		.byte	0x0
+ 40132 9089 31       		.uleb128 0x31
+ 40133 908a 780E0000 		.long	0xe78
+ 40134 908e 00000000 		.quad	.LBB2161
+ 40134      00000000 
+ 40135 9096 00000000 		.quad	.LBE2161
+ 40135      00000000 
+ 40136 909e 02       		.byte	0x2
+ 40137 909f 9806     		.value	0x698
+ 40138 90a1 CA900000 		.long	0x90ca
+ 40139 90a5 32       		.uleb128 0x32
+ 40140 90a6 8A0E0000 		.long	0xe8a
+ 40141 90aa 03       		.byte	0x3
+ 40142 90ab 91       		.byte	0x91
+ 40143 90ac C06B     		.sleb128 -2624
+ 40144 90ae 33       		.uleb128 0x33
+ 40145 90af 00000000 		.quad	.LBB2162
+ 40145      00000000 
+ 40146 90b7 00000000 		.quad	.LBE2162
+ 40146      00000000 
+ 40147 90bf 34       		.uleb128 0x34
+ 40148 90c0 960E0000 		.long	0xe96
+ 40149 90c4 03       		.byte	0x3
+ 40150 90c5 91       		.byte	0x91
+ 40151 90c6 A04A     		.sleb128 -6880
+ 40152 90c8 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1054
+
+
+ 40153 90c9 00       		.byte	0x0
+ 40154 90ca 33       		.uleb128 0x33
+ 40155 90cb 00000000 		.quad	.LBB2163
+ 40155      00000000 
+ 40156 90d3 00000000 		.quad	.LBE2163
+ 40156      00000000 
+ 40157 90db 34       		.uleb128 0x34
+ 40158 90dc 440C0000 		.long	0xc44
+ 40159 90e0 03       		.byte	0x3
+ 40160 90e1 91       		.byte	0x91
+ 40161 90e2 C048     		.sleb128 -7104
+ 40162 90e4 00       		.byte	0x0
+ 40163 90e5 00       		.byte	0x0
+ 40164 90e6 00       		.byte	0x0
+ 40165 90e7 31       		.uleb128 0x31
+ 40166 90e8 A30E0000 		.long	0xea3
+ 40167 90ec 00000000 		.quad	.LBB2164
+ 40167      00000000 
+ 40168 90f4 00000000 		.quad	.LBE2164
+ 40168      00000000 
+ 40169 90fc 02       		.byte	0x2
+ 40170 90fd 8C07     		.value	0x78c
+ 40171 90ff E8910000 		.long	0x91e8
+ 40172 9103 32       		.uleb128 0x32
+ 40173 9104 B50E0000 		.long	0xeb5
+ 40174 9108 03       		.byte	0x3
+ 40175 9109 91       		.byte	0x91
+ 40176 910a D06B     		.sleb128 -2608
+ 40177 910c 33       		.uleb128 0x33
+ 40178 910d 00000000 		.quad	.LBB2165
+ 40178      00000000 
+ 40179 9115 00000000 		.quad	.LBE2165
+ 40179      00000000 
+ 40180 911d 34       		.uleb128 0x34
+ 40181 911e C10E0000 		.long	0xec1
+ 40182 9122 04       		.byte	0x4
+ 40183 9123 76       		.byte	0x76
+ 40184 9124 D0BD7F   		.sleb128 -8496
+ 40185 9127 31       		.uleb128 0x31
+ 40186 9128 CE0E0000 		.long	0xece
+ 40187 912c 00000000 		.quad	.LBB2166
+ 40187      00000000 
+ 40188 9134 00000000 		.quad	.LBE2166
+ 40188      00000000 
+ 40189 913c 02       		.byte	0x2
+ 40190 913d 1F06     		.value	0x61f
+ 40191 913f 68910000 		.long	0x9168
+ 40192 9143 32       		.uleb128 0x32
+ 40193 9144 E00E0000 		.long	0xee0
+ 40194 9148 03       		.byte	0x3
+ 40195 9149 91       		.byte	0x91
+ 40196 914a E06B     		.sleb128 -2592
+ 40197 914c 33       		.uleb128 0x33
+ 40198 914d 00000000 		.quad	.LBB2167
+ 40198      00000000 
+ 40199 9155 00000000 		.quad	.LBE2167
+ 40199      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1055
+
+
+ 40200 915d 34       		.uleb128 0x34
+ 40201 915e EC0E0000 		.long	0xeec
+ 40202 9162 03       		.byte	0x3
+ 40203 9163 91       		.byte	0x91
+ 40204 9164 B04A     		.sleb128 -6864
+ 40205 9166 00       		.byte	0x0
+ 40206 9167 00       		.byte	0x0
+ 40207 9168 31       		.uleb128 0x31
+ 40208 9169 CE0E0000 		.long	0xece
+ 40209 916d 00000000 		.quad	.LBB2168
+ 40209      00000000 
+ 40210 9175 00000000 		.quad	.LBE2168
+ 40210      00000000 
+ 40211 917d 02       		.byte	0x2
+ 40212 917e 2006     		.value	0x620
+ 40213 9180 A9910000 		.long	0x91a9
+ 40214 9184 32       		.uleb128 0x32
+ 40215 9185 E00E0000 		.long	0xee0
+ 40216 9189 03       		.byte	0x3
+ 40217 918a 91       		.byte	0x91
+ 40218 918b F06B     		.sleb128 -2576
+ 40219 918d 33       		.uleb128 0x33
+ 40220 918e 00000000 		.quad	.LBB2169
+ 40220      00000000 
+ 40221 9196 00000000 		.quad	.LBE2169
+ 40221      00000000 
+ 40222 919e 34       		.uleb128 0x34
+ 40223 919f EC0E0000 		.long	0xeec
+ 40224 91a3 03       		.byte	0x3
+ 40225 91a4 91       		.byte	0x91
+ 40226 91a5 C04A     		.sleb128 -6848
+ 40227 91a7 00       		.byte	0x0
+ 40228 91a8 00       		.byte	0x0
+ 40229 91a9 35       		.uleb128 0x35
+ 40230 91aa CE0E0000 		.long	0xece
+ 40231 91ae 00000000 		.quad	.LBB2170
+ 40231      00000000 
+ 40232 91b6 00000000 		.quad	.LBE2170
+ 40232      00000000 
+ 40233 91be 02       		.byte	0x2
+ 40234 91bf 2106     		.value	0x621
+ 40235 91c1 32       		.uleb128 0x32
+ 40236 91c2 E00E0000 		.long	0xee0
+ 40237 91c6 03       		.byte	0x3
+ 40238 91c7 91       		.byte	0x91
+ 40239 91c8 806C     		.sleb128 -2560
+ 40240 91ca 33       		.uleb128 0x33
+ 40241 91cb 00000000 		.quad	.LBB2171
+ 40241      00000000 
+ 40242 91d3 00000000 		.quad	.LBE2171
+ 40242      00000000 
+ 40243 91db 34       		.uleb128 0x34
+ 40244 91dc EC0E0000 		.long	0xeec
+ 40245 91e0 03       		.byte	0x3
+ 40246 91e1 91       		.byte	0x91
+ 40247 91e2 D04A     		.sleb128 -6832
+ 40248 91e4 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1056
+
+
+ 40249 91e5 00       		.byte	0x0
+ 40250 91e6 00       		.byte	0x0
+ 40251 91e7 00       		.byte	0x0
+ 40252 91e8 31       		.uleb128 0x31
+ 40253 91e9 520E0000 		.long	0xe52
+ 40254 91ed 00000000 		.quad	.LBB2172
+ 40254      00000000 
+ 40255 91f5 00000000 		.quad	.LBE2172
+ 40255      00000000 
+ 40256 91fd 02       		.byte	0x2
+ 40257 91fe 8C07     		.value	0x78c
+ 40258 9200 17920000 		.long	0x9217
+ 40259 9204 32       		.uleb128 0x32
+ 40260 9205 6D0E0000 		.long	0xe6d
+ 40261 9209 03       		.byte	0x3
+ 40262 920a 91       		.byte	0x91
+ 40263 920b 906C     		.sleb128 -2544
+ 40264 920d 32       		.uleb128 0x32
+ 40265 920e 630E0000 		.long	0xe63
+ 40266 9212 03       		.byte	0x3
+ 40267 9213 91       		.byte	0x91
+ 40268 9214 A06C     		.sleb128 -2528
+ 40269 9216 00       		.byte	0x0
+ 40270 9217 31       		.uleb128 0x31
+ 40271 9218 4E740000 		.long	0x744e
+ 40272 921c 00000000 		.quad	.LBB2174
+ 40272      00000000 
+ 40273 9224 00000000 		.quad	.LBE2174
+ 40273      00000000 
+ 40274 922c 02       		.byte	0x2
+ 40275 922d 8D07     		.value	0x78d
+ 40276 922f A7920000 		.long	0x92a7
+ 40277 9233 32       		.uleb128 0x32
+ 40278 9234 60740000 		.long	0x7460
+ 40279 9238 03       		.byte	0x3
+ 40280 9239 91       		.byte	0x91
+ 40281 923a B06C     		.sleb128 -2512
+ 40282 923c 33       		.uleb128 0x33
+ 40283 923d 00000000 		.quad	.LBB2175
+ 40283      00000000 
+ 40284 9245 00000000 		.quad	.LBE2175
+ 40284      00000000 
+ 40285 924d 34       		.uleb128 0x34
+ 40286 924e 6C740000 		.long	0x746c
+ 40287 9252 03       		.byte	0x3
+ 40288 9253 91       		.byte	0x91
+ 40289 9254 F04A     		.sleb128 -6800
+ 40290 9256 34       		.uleb128 0x34
+ 40291 9257 76740000 		.long	0x7476
+ 40292 925b 03       		.byte	0x3
+ 40293 925c 91       		.byte	0x91
+ 40294 925d C46C     		.sleb128 -2492
+ 40295 925f 35       		.uleb128 0x35
+ 40296 9260 12490000 		.long	0x4912
+ 40297 9264 00000000 		.quad	.LBB2176
+ 40297      00000000 
+ 40298 926c 00000000 		.quad	.LBE2176
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1057
+
+
+ 40298      00000000 
+ 40299 9274 02       		.byte	0x2
+ 40300 9275 7906     		.value	0x679
+ 40301 9277 32       		.uleb128 0x32
+ 40302 9278 24490000 		.long	0x4924
+ 40303 927c 03       		.byte	0x3
+ 40304 927d 91       		.byte	0x91
+ 40305 927e C86C     		.sleb128 -2488
+ 40306 9280 33       		.uleb128 0x33
+ 40307 9281 00000000 		.quad	.LBB2177
+ 40307      00000000 
+ 40308 9289 00000000 		.quad	.LBE2177
+ 40308      00000000 
+ 40309 9291 34       		.uleb128 0x34
+ 40310 9292 2E490000 		.long	0x492e
+ 40311 9296 03       		.byte	0x3
+ 40312 9297 91       		.byte	0x91
+ 40313 9298 E04A     		.sleb128 -6816
+ 40314 929a 34       		.uleb128 0x34
+ 40315 929b 3A490000 		.long	0x493a
+ 40316 929f 03       		.byte	0x3
+ 40317 92a0 91       		.byte	0x91
+ 40318 92a1 CC6C     		.sleb128 -2484
+ 40319 92a3 00       		.byte	0x0
+ 40320 92a4 00       		.byte	0x0
+ 40321 92a5 00       		.byte	0x0
+ 40322 92a6 00       		.byte	0x0
+ 40323 92a7 31       		.uleb128 0x31
+ 40324 92a8 A30E0000 		.long	0xea3
+ 40325 92ac 00000000 		.quad	.LBB2178
+ 40325      00000000 
+ 40326 92b4 00000000 		.quad	.LBE2178
+ 40326      00000000 
+ 40327 92bc 02       		.byte	0x2
+ 40328 92bd 8D07     		.value	0x78d
+ 40329 92bf A8930000 		.long	0x93a8
+ 40330 92c3 32       		.uleb128 0x32
+ 40331 92c4 B50E0000 		.long	0xeb5
+ 40332 92c8 03       		.byte	0x3
+ 40333 92c9 91       		.byte	0x91
+ 40334 92ca D06C     		.sleb128 -2480
+ 40335 92cc 33       		.uleb128 0x33
+ 40336 92cd 00000000 		.quad	.LBB2179
+ 40336      00000000 
+ 40337 92d5 00000000 		.quad	.LBE2179
+ 40337      00000000 
+ 40338 92dd 34       		.uleb128 0x34
+ 40339 92de C10E0000 		.long	0xec1
+ 40340 92e2 04       		.byte	0x4
+ 40341 92e3 76       		.byte	0x76
+ 40342 92e4 E0BD7F   		.sleb128 -8480
+ 40343 92e7 31       		.uleb128 0x31
+ 40344 92e8 CE0E0000 		.long	0xece
+ 40345 92ec 00000000 		.quad	.LBB2180
+ 40345      00000000 
+ 40346 92f4 00000000 		.quad	.LBE2180
+ 40346      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1058
+
+
+ 40347 92fc 02       		.byte	0x2
+ 40348 92fd 1F06     		.value	0x61f
+ 40349 92ff 28930000 		.long	0x9328
+ 40350 9303 32       		.uleb128 0x32
+ 40351 9304 E00E0000 		.long	0xee0
+ 40352 9308 03       		.byte	0x3
+ 40353 9309 91       		.byte	0x91
+ 40354 930a E06C     		.sleb128 -2464
+ 40355 930c 33       		.uleb128 0x33
+ 40356 930d 00000000 		.quad	.LBB2181
+ 40356      00000000 
+ 40357 9315 00000000 		.quad	.LBE2181
+ 40357      00000000 
+ 40358 931d 34       		.uleb128 0x34
+ 40359 931e EC0E0000 		.long	0xeec
+ 40360 9322 03       		.byte	0x3
+ 40361 9323 91       		.byte	0x91
+ 40362 9324 804B     		.sleb128 -6784
+ 40363 9326 00       		.byte	0x0
+ 40364 9327 00       		.byte	0x0
+ 40365 9328 31       		.uleb128 0x31
+ 40366 9329 CE0E0000 		.long	0xece
+ 40367 932d 00000000 		.quad	.LBB2182
+ 40367      00000000 
+ 40368 9335 00000000 		.quad	.LBE2182
+ 40368      00000000 
+ 40369 933d 02       		.byte	0x2
+ 40370 933e 2006     		.value	0x620
+ 40371 9340 69930000 		.long	0x9369
+ 40372 9344 32       		.uleb128 0x32
+ 40373 9345 E00E0000 		.long	0xee0
+ 40374 9349 03       		.byte	0x3
+ 40375 934a 91       		.byte	0x91
+ 40376 934b F06C     		.sleb128 -2448
+ 40377 934d 33       		.uleb128 0x33
+ 40378 934e 00000000 		.quad	.LBB2183
+ 40378      00000000 
+ 40379 9356 00000000 		.quad	.LBE2183
+ 40379      00000000 
+ 40380 935e 34       		.uleb128 0x34
+ 40381 935f EC0E0000 		.long	0xeec
+ 40382 9363 03       		.byte	0x3
+ 40383 9364 91       		.byte	0x91
+ 40384 9365 904B     		.sleb128 -6768
+ 40385 9367 00       		.byte	0x0
+ 40386 9368 00       		.byte	0x0
+ 40387 9369 35       		.uleb128 0x35
+ 40388 936a CE0E0000 		.long	0xece
+ 40389 936e 00000000 		.quad	.LBB2184
+ 40389      00000000 
+ 40390 9376 00000000 		.quad	.LBE2184
+ 40390      00000000 
+ 40391 937e 02       		.byte	0x2
+ 40392 937f 2106     		.value	0x621
+ 40393 9381 32       		.uleb128 0x32
+ 40394 9382 E00E0000 		.long	0xee0
+ 40395 9386 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1059
+
+
+ 40396 9387 91       		.byte	0x91
+ 40397 9388 806D     		.sleb128 -2432
+ 40398 938a 33       		.uleb128 0x33
+ 40399 938b 00000000 		.quad	.LBB2185
+ 40399      00000000 
+ 40400 9393 00000000 		.quad	.LBE2185
+ 40400      00000000 
+ 40401 939b 34       		.uleb128 0x34
+ 40402 939c EC0E0000 		.long	0xeec
+ 40403 93a0 03       		.byte	0x3
+ 40404 93a1 91       		.byte	0x91
+ 40405 93a2 A04B     		.sleb128 -6752
+ 40406 93a4 00       		.byte	0x0
+ 40407 93a5 00       		.byte	0x0
+ 40408 93a6 00       		.byte	0x0
+ 40409 93a7 00       		.byte	0x0
+ 40410 93a8 31       		.uleb128 0x31
+ 40411 93a9 520E0000 		.long	0xe52
+ 40412 93ad 00000000 		.quad	.LBB2186
+ 40412      00000000 
+ 40413 93b5 00000000 		.quad	.LBE2186
+ 40413      00000000 
+ 40414 93bd 02       		.byte	0x2
+ 40415 93be 8D07     		.value	0x78d
+ 40416 93c0 D7930000 		.long	0x93d7
+ 40417 93c4 32       		.uleb128 0x32
+ 40418 93c5 6D0E0000 		.long	0xe6d
+ 40419 93c9 03       		.byte	0x3
+ 40420 93ca 91       		.byte	0x91
+ 40421 93cb 906D     		.sleb128 -2416
+ 40422 93cd 32       		.uleb128 0x32
+ 40423 93ce 630E0000 		.long	0xe63
+ 40424 93d2 03       		.byte	0x3
+ 40425 93d3 91       		.byte	0x91
+ 40426 93d4 A06D     		.sleb128 -2400
+ 40427 93d6 00       		.byte	0x0
+ 40428 93d7 31       		.uleb128 0x31
+ 40429 93d8 D10B0000 		.long	0xbd1
+ 40430 93dc 00000000 		.quad	.LBB2188
+ 40430      00000000 
+ 40431 93e4 00000000 		.quad	.LBE2188
+ 40431      00000000 
+ 40432 93ec 02       		.byte	0x2
+ 40433 93ed 8E07     		.value	0x78e
+ 40434 93ef 7F980000 		.long	0x987f
+ 40435 93f3 32       		.uleb128 0x32
+ 40436 93f4 EF0B0000 		.long	0xbef
+ 40437 93f8 03       		.byte	0x3
+ 40438 93f9 91       		.byte	0x91
+ 40439 93fa BC6D     		.sleb128 -2372
+ 40440 93fc 32       		.uleb128 0x32
+ 40441 93fd E30B0000 		.long	0xbe3
+ 40442 9401 03       		.byte	0x3
+ 40443 9402 91       		.byte	0x91
+ 40444 9403 C06D     		.sleb128 -2368
+ 40445 9405 33       		.uleb128 0x33
+ 40446 9406 00000000 		.quad	.LBB2189
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1060
+
+
+ 40446      00000000 
+ 40447 940e 00000000 		.quad	.LBE2189
+ 40447      00000000 
+ 40448 9416 34       		.uleb128 0x34
+ 40449 9417 FB0B0000 		.long	0xbfb
+ 40450 941b 04       		.byte	0x4
+ 40451 941c 76       		.byte	0x76
+ 40452 941d 80BE7F   		.sleb128 -8448
+ 40453 9420 34       		.uleb128 0x34
+ 40454 9421 070C0000 		.long	0xc07
+ 40455 9425 04       		.byte	0x4
+ 40456 9426 76       		.byte	0x76
+ 40457 9427 F0BD7F   		.sleb128 -8464
+ 40458 942a 31       		.uleb128 0x31
+ 40459 942b 500C0000 		.long	0xc50
+ 40460 942f 00000000 		.quad	.LBB2190
+ 40460      00000000 
+ 40461 9437 00000000 		.quad	.LBE2190
+ 40461      00000000 
+ 40462 943f 02       		.byte	0x2
+ 40463 9440 9106     		.value	0x691
+ 40464 9442 7D940000 		.long	0x947d
+ 40465 9446 32       		.uleb128 0x32
+ 40466 9447 7A0C0000 		.long	0xc7a
+ 40467 944b 03       		.byte	0x3
+ 40468 944c 91       		.byte	0x91
+ 40469 944d D86D     		.sleb128 -2344
+ 40470 944f 32       		.uleb128 0x32
+ 40471 9450 6E0C0000 		.long	0xc6e
+ 40472 9454 03       		.byte	0x3
+ 40473 9455 91       		.byte	0x91
+ 40474 9456 DC6D     		.sleb128 -2340
+ 40475 9458 32       		.uleb128 0x32
+ 40476 9459 620C0000 		.long	0xc62
+ 40477 945d 03       		.byte	0x3
+ 40478 945e 91       		.byte	0x91
+ 40479 945f E06D     		.sleb128 -2336
+ 40480 9461 33       		.uleb128 0x33
+ 40481 9462 00000000 		.quad	.LBB2191
+ 40481      00000000 
+ 40482 946a 00000000 		.quad	.LBE2191
+ 40482      00000000 
+ 40483 9472 34       		.uleb128 0x34
+ 40484 9473 860C0000 		.long	0xc86
+ 40485 9477 03       		.byte	0x3
+ 40486 9478 91       		.byte	0x91
+ 40487 9479 F04B     		.sleb128 -6672
+ 40488 947b 00       		.byte	0x0
+ 40489 947c 00       		.byte	0x0
+ 40490 947d 31       		.uleb128 0x31
+ 40491 947e 910C0000 		.long	0xc91
+ 40492 9482 00000000 		.quad	.LBB2192
+ 40492      00000000 
+ 40493 948a 00000000 		.quad	.LBE2192
+ 40493      00000000 
+ 40494 9492 02       		.byte	0x2
+ 40495 9493 9206     		.value	0x692
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1061
+
+
+ 40496 9495 ED960000 		.long	0x96ed
+ 40497 9499 32       		.uleb128 0x32
+ 40498 949a A30C0000 		.long	0xca3
+ 40499 949e 03       		.byte	0x3
+ 40500 949f 91       		.byte	0x91
+ 40501 94a0 F06D     		.sleb128 -2320
+ 40502 94a2 35       		.uleb128 0x35
+ 40503 94a3 B00C0000 		.long	0xcb0
+ 40504 94a7 00000000 		.quad	.LBB2194
+ 40504      00000000 
+ 40505 94af 00000000 		.quad	.LBE2194
+ 40505      00000000 
+ 40506 94b7 02       		.byte	0x2
+ 40507 94b8 7D03     		.value	0x37d
+ 40508 94ba 32       		.uleb128 0x32
+ 40509 94bb CE0C0000 		.long	0xcce
+ 40510 94bf 03       		.byte	0x3
+ 40511 94c0 91       		.byte	0x91
+ 40512 94c1 886E     		.sleb128 -2296
+ 40513 94c3 32       		.uleb128 0x32
+ 40514 94c4 C20C0000 		.long	0xcc2
+ 40515 94c8 03       		.byte	0x3
+ 40516 94c9 91       		.byte	0x91
+ 40517 94ca 906E     		.sleb128 -2288
+ 40518 94cc 33       		.uleb128 0x33
+ 40519 94cd 00000000 		.quad	.LBB2195
+ 40519      00000000 
+ 40520 94d5 00000000 		.quad	.LBE2195
+ 40520      00000000 
+ 40521 94dd 34       		.uleb128 0x34
+ 40522 94de DA0C0000 		.long	0xcda
+ 40523 94e2 03       		.byte	0x3
+ 40524 94e3 91       		.byte	0x91
+ 40525 94e4 E06E     		.sleb128 -2208
+ 40526 94e6 34       		.uleb128 0x34
+ 40527 94e7 E50C0000 		.long	0xce5
+ 40528 94eb 03       		.byte	0x3
+ 40529 94ec 91       		.byte	0x91
+ 40530 94ed D06E     		.sleb128 -2224
+ 40531 94ef 34       		.uleb128 0x34
+ 40532 94f0 F00C0000 		.long	0xcf0
+ 40533 94f4 03       		.byte	0x3
+ 40534 94f5 91       		.byte	0x91
+ 40535 94f6 C06E     		.sleb128 -2240
+ 40536 94f8 34       		.uleb128 0x34
+ 40537 94f9 FC0C0000 		.long	0xcfc
+ 40538 94fd 03       		.byte	0x3
+ 40539 94fe 91       		.byte	0x91
+ 40540 94ff B06E     		.sleb128 -2256
+ 40541 9501 34       		.uleb128 0x34
+ 40542 9502 080D0000 		.long	0xd08
+ 40543 9506 03       		.byte	0x3
+ 40544 9507 91       		.byte	0x91
+ 40545 9508 AC6E     		.sleb128 -2260
+ 40546 950a 31       		.uleb128 0x31
+ 40547 950b 1F0D0000 		.long	0xd1f
+ 40548 950f 00000000 		.quad	.LBB2196
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1062
+
+
+ 40548      00000000 
+ 40549 9517 00000000 		.quad	.LBE2196
+ 40549      00000000 
+ 40550 951f 02       		.byte	0x2
+ 40551 9520 5603     		.value	0x356
+ 40552 9522 39950000 		.long	0x9539
+ 40553 9526 32       		.uleb128 0x32
+ 40554 9527 3A0D0000 		.long	0xd3a
+ 40555 952b 03       		.byte	0x3
+ 40556 952c 91       		.byte	0x91
+ 40557 952d F06E     		.sleb128 -2192
+ 40558 952f 32       		.uleb128 0x32
+ 40559 9530 300D0000 		.long	0xd30
+ 40560 9534 03       		.byte	0x3
+ 40561 9535 91       		.byte	0x91
+ 40562 9536 806F     		.sleb128 -2176
+ 40563 9538 00       		.byte	0x0
+ 40564 9539 31       		.uleb128 0x31
+ 40565 953a 450D0000 		.long	0xd45
+ 40566 953e 00000000 		.quad	.LBB2198
+ 40566      00000000 
+ 40567 9546 00000000 		.quad	.LBE2198
+ 40567      00000000 
+ 40568 954e 02       		.byte	0x2
+ 40569 954f 5E03     		.value	0x35e
+ 40570 9551 68950000 		.long	0x9568
+ 40571 9555 32       		.uleb128 0x32
+ 40572 9556 620D0000 		.long	0xd62
+ 40573 955a 03       		.byte	0x3
+ 40574 955b 91       		.byte	0x91
+ 40575 955c 906F     		.sleb128 -2160
+ 40576 955e 32       		.uleb128 0x32
+ 40577 955f 570D0000 		.long	0xd57
+ 40578 9563 03       		.byte	0x3
+ 40579 9564 91       		.byte	0x91
+ 40580 9565 A06F     		.sleb128 -2144
+ 40581 9567 00       		.byte	0x0
+ 40582 9568 31       		.uleb128 0x31
+ 40583 9569 6E0D0000 		.long	0xd6e
+ 40584 956d 00000000 		.quad	.LBB2200
+ 40584      00000000 
+ 40585 9575 00000000 		.quad	.LBE2200
+ 40585      00000000 
+ 40586 957d 02       		.byte	0x2
+ 40587 957e 6403     		.value	0x364
+ 40588 9580 CD950000 		.long	0x95cd
+ 40589 9584 32       		.uleb128 0x32
+ 40590 9585 8C0D0000 		.long	0xd8c
+ 40591 9589 03       		.byte	0x3
+ 40592 958a 91       		.byte	0x91
+ 40593 958b B06F     		.sleb128 -2128
+ 40594 958d 32       		.uleb128 0x32
+ 40595 958e 800D0000 		.long	0xd80
+ 40596 9592 03       		.byte	0x3
+ 40597 9593 91       		.byte	0x91
+ 40598 9594 C06F     		.sleb128 -2112
+ 40599 9596 33       		.uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1063
+
+
+ 40600 9597 00000000 		.quad	.LBB2201
+ 40600      00000000 
+ 40601 959f 00000000 		.quad	.LBE2201
+ 40601      00000000 
+ 40602 95a7 34       		.uleb128 0x34
+ 40603 95a8 980D0000 		.long	0xd98
+ 40604 95ac 03       		.byte	0x3
+ 40605 95ad 91       		.byte	0x91
+ 40606 95ae A04C     		.sleb128 -6624
+ 40607 95b0 34       		.uleb128 0x34
+ 40608 95b1 A40D0000 		.long	0xda4
+ 40609 95b5 03       		.byte	0x3
+ 40610 95b6 91       		.byte	0x91
+ 40611 95b7 904C     		.sleb128 -6640
+ 40612 95b9 34       		.uleb128 0x34
+ 40613 95ba AF0D0000 		.long	0xdaf
+ 40614 95be 03       		.byte	0x3
+ 40615 95bf 91       		.byte	0x91
+ 40616 95c0 804C     		.sleb128 -6656
+ 40617 95c2 34       		.uleb128 0x34
+ 40618 95c3 BB0D0000 		.long	0xdbb
+ 40619 95c7 03       		.byte	0x3
+ 40620 95c8 91       		.byte	0x91
+ 40621 95c9 DC6F     		.sleb128 -2084
+ 40622 95cb 00       		.byte	0x0
+ 40623 95cc 00       		.byte	0x0
+ 40624 95cd 31       		.uleb128 0x31
+ 40625 95ce C70D0000 		.long	0xdc7
+ 40626 95d2 00000000 		.quad	.LBB2202
+ 40626      00000000 
+ 40627 95da 00000000 		.quad	.LBE2202
+ 40627      00000000 
+ 40628 95e2 02       		.byte	0x2
+ 40629 95e3 6603     		.value	0x366
+ 40630 95e5 FC950000 		.long	0x95fc
+ 40631 95e9 32       		.uleb128 0x32
+ 40632 95ea E20D0000 		.long	0xde2
+ 40633 95ee 03       		.byte	0x3
+ 40634 95ef 91       		.byte	0x91
+ 40635 95f0 E06F     		.sleb128 -2080
+ 40636 95f2 32       		.uleb128 0x32
+ 40637 95f3 D80D0000 		.long	0xdd8
+ 40638 95f7 03       		.byte	0x3
+ 40639 95f8 91       		.byte	0x91
+ 40640 95f9 F06F     		.sleb128 -2064
+ 40641 95fb 00       		.byte	0x0
+ 40642 95fc 31       		.uleb128 0x31
+ 40643 95fd 6E0D0000 		.long	0xd6e
+ 40644 9601 00000000 		.quad	.LBB2204
+ 40644      00000000 
+ 40645 9609 00000000 		.quad	.LBE2204
+ 40645      00000000 
+ 40646 9611 02       		.byte	0x2
+ 40647 9612 6803     		.value	0x368
+ 40648 9614 61960000 		.long	0x9661
+ 40649 9618 32       		.uleb128 0x32
+ 40650 9619 8C0D0000 		.long	0xd8c
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1064
+
+
+ 40651 961d 03       		.byte	0x3
+ 40652 961e 91       		.byte	0x91
+ 40653 961f 8070     		.sleb128 -2048
+ 40654 9621 32       		.uleb128 0x32
+ 40655 9622 800D0000 		.long	0xd80
+ 40656 9626 03       		.byte	0x3
+ 40657 9627 91       		.byte	0x91
+ 40658 9628 9070     		.sleb128 -2032
+ 40659 962a 33       		.uleb128 0x33
+ 40660 962b 00000000 		.quad	.LBB2205
+ 40660      00000000 
+ 40661 9633 00000000 		.quad	.LBE2205
+ 40661      00000000 
+ 40662 963b 34       		.uleb128 0x34
+ 40663 963c 980D0000 		.long	0xd98
+ 40664 9640 03       		.byte	0x3
+ 40665 9641 91       		.byte	0x91
+ 40666 9642 D04C     		.sleb128 -6576
+ 40667 9644 34       		.uleb128 0x34
+ 40668 9645 A40D0000 		.long	0xda4
+ 40669 9649 03       		.byte	0x3
+ 40670 964a 91       		.byte	0x91
+ 40671 964b C04C     		.sleb128 -6592
+ 40672 964d 34       		.uleb128 0x34
+ 40673 964e AF0D0000 		.long	0xdaf
+ 40674 9652 03       		.byte	0x3
+ 40675 9653 91       		.byte	0x91
+ 40676 9654 B04C     		.sleb128 -6608
+ 40677 9656 34       		.uleb128 0x34
+ 40678 9657 BB0D0000 		.long	0xdbb
+ 40679 965b 03       		.byte	0x3
+ 40680 965c 91       		.byte	0x91
+ 40681 965d AC70     		.sleb128 -2004
+ 40682 965f 00       		.byte	0x0
+ 40683 9660 00       		.byte	0x0
+ 40684 9661 31       		.uleb128 0x31
+ 40685 9662 C70D0000 		.long	0xdc7
+ 40686 9666 00000000 		.quad	.LBB2206
+ 40686      00000000 
+ 40687 966e 00000000 		.quad	.LBE2206
+ 40687      00000000 
+ 40688 9676 02       		.byte	0x2
+ 40689 9677 6A03     		.value	0x36a
+ 40690 9679 90960000 		.long	0x9690
+ 40691 967d 32       		.uleb128 0x32
+ 40692 967e E20D0000 		.long	0xde2
+ 40693 9682 03       		.byte	0x3
+ 40694 9683 91       		.byte	0x91
+ 40695 9684 B070     		.sleb128 -2000
+ 40696 9686 32       		.uleb128 0x32
+ 40697 9687 D80D0000 		.long	0xdd8
+ 40698 968b 03       		.byte	0x3
+ 40699 968c 91       		.byte	0x91
+ 40700 968d C070     		.sleb128 -1984
+ 40701 968f 00       		.byte	0x0
+ 40702 9690 31       		.uleb128 0x31
+ 40703 9691 ED0D0000 		.long	0xded
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1065
+
+
+ 40704 9695 00000000 		.quad	.LBB2208
+ 40704      00000000 
+ 40705 969d 00000000 		.quad	.LBE2208
+ 40705      00000000 
+ 40706 96a5 02       		.byte	0x2
+ 40707 96a6 6C03     		.value	0x36c
+ 40708 96a8 BF960000 		.long	0x96bf
+ 40709 96ac 32       		.uleb128 0x32
+ 40710 96ad 0A0E0000 		.long	0xe0a
+ 40711 96b1 03       		.byte	0x3
+ 40712 96b2 91       		.byte	0x91
+ 40713 96b3 D070     		.sleb128 -1968
+ 40714 96b5 32       		.uleb128 0x32
+ 40715 96b6 FF0D0000 		.long	0xdff
+ 40716 96ba 03       		.byte	0x3
+ 40717 96bb 91       		.byte	0x91
+ 40718 96bc E070     		.sleb128 -1952
+ 40719 96be 00       		.byte	0x0
+ 40720 96bf 35       		.uleb128 0x35
+ 40721 96c0 1F0D0000 		.long	0xd1f
+ 40722 96c4 00000000 		.quad	.LBB2210
+ 40722      00000000 
+ 40723 96cc 00000000 		.quad	.LBE2210
+ 40723      00000000 
+ 40724 96d4 02       		.byte	0x2
+ 40725 96d5 6E03     		.value	0x36e
+ 40726 96d7 32       		.uleb128 0x32
+ 40727 96d8 3A0D0000 		.long	0xd3a
+ 40728 96dc 03       		.byte	0x3
+ 40729 96dd 91       		.byte	0x91
+ 40730 96de F070     		.sleb128 -1936
+ 40731 96e0 32       		.uleb128 0x32
+ 40732 96e1 300D0000 		.long	0xd30
+ 40733 96e5 03       		.byte	0x3
+ 40734 96e6 91       		.byte	0x91
+ 40735 96e7 8071     		.sleb128 -1920
+ 40736 96e9 00       		.byte	0x0
+ 40737 96ea 00       		.byte	0x0
+ 40738 96eb 00       		.byte	0x0
+ 40739 96ec 00       		.byte	0x0
+ 40740 96ed 36       		.uleb128 0x36
+ 40741 96ee 00000000 		.quad	.LBB2212
+ 40741      00000000 
+ 40742 96f6 00000000 		.quad	.LBE2212
+ 40742      00000000 
+ 40743 96fe 0C970000 		.long	0x970c
+ 40744 9702 34       		.uleb128 0x34
+ 40745 9703 180C0000 		.long	0xc18
+ 40746 9707 03       		.byte	0x3
+ 40747 9708 91       		.byte	0x91
+ 40748 9709 E04B     		.sleb128 -6688
+ 40749 970b 00       		.byte	0x0
+ 40750 970c 31       		.uleb128 0x31
+ 40751 970d 160E0000 		.long	0xe16
+ 40752 9711 00000000 		.quad	.LBB2213
+ 40752      00000000 
+ 40753 9719 00000000 		.quad	.LBE2213
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1066
+
+
+ 40753      00000000 
+ 40754 9721 02       		.byte	0x2
+ 40755 9722 9406     		.value	0x694
+ 40756 9724 B4970000 		.long	0x97b4
+ 40757 9728 32       		.uleb128 0x32
+ 40758 9729 280E0000 		.long	0xe28
+ 40759 972d 03       		.byte	0x3
+ 40760 972e 91       		.byte	0x91
+ 40761 972f 9071     		.sleb128 -1904
+ 40762 9731 33       		.uleb128 0x33
+ 40763 9732 00000000 		.quad	.LBB2214
+ 40763      00000000 
+ 40764 973a 00000000 		.quad	.LBE2214
+ 40764      00000000 
+ 40765 9742 34       		.uleb128 0x34
+ 40766 9743 340E0000 		.long	0xe34
+ 40767 9747 09       		.byte	0x9
+ 40768 9748 03       		.byte	0x3
+ 40769 9749 00000000 		.quad	ShiftRowTable.6768
+ 40769      00000000 
+ 40770 9751 35       		.uleb128 0x35
+ 40771 9752 6E0D0000 		.long	0xd6e
+ 40772 9756 00000000 		.quad	.LBB2215
+ 40772      00000000 
+ 40773 975e 00000000 		.quad	.LBE2215
+ 40773      00000000 
+ 40774 9766 02       		.byte	0x2
+ 40775 9767 9B02     		.value	0x29b
+ 40776 9769 32       		.uleb128 0x32
+ 40777 976a 8C0D0000 		.long	0xd8c
+ 40778 976e 03       		.byte	0x3
+ 40779 976f 91       		.byte	0x91
+ 40780 9770 A071     		.sleb128 -1888
+ 40781 9772 32       		.uleb128 0x32
+ 40782 9773 800D0000 		.long	0xd80
+ 40783 9777 03       		.byte	0x3
+ 40784 9778 91       		.byte	0x91
+ 40785 9779 B071     		.sleb128 -1872
+ 40786 977b 33       		.uleb128 0x33
+ 40787 977c 00000000 		.quad	.LBB2216
+ 40787      00000000 
+ 40788 9784 00000000 		.quad	.LBE2216
+ 40788      00000000 
+ 40789 978c 34       		.uleb128 0x34
+ 40790 978d 980D0000 		.long	0xd98
+ 40791 9791 03       		.byte	0x3
+ 40792 9792 91       		.byte	0x91
+ 40793 9793 804D     		.sleb128 -6528
+ 40794 9795 34       		.uleb128 0x34
+ 40795 9796 A40D0000 		.long	0xda4
+ 40796 979a 03       		.byte	0x3
+ 40797 979b 91       		.byte	0x91
+ 40798 979c F04C     		.sleb128 -6544
+ 40799 979e 34       		.uleb128 0x34
+ 40800 979f AF0D0000 		.long	0xdaf
+ 40801 97a3 03       		.byte	0x3
+ 40802 97a4 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1067
+
+
+ 40803 97a5 E04C     		.sleb128 -6560
+ 40804 97a7 34       		.uleb128 0x34
+ 40805 97a8 BB0D0000 		.long	0xdbb
+ 40806 97ac 03       		.byte	0x3
+ 40807 97ad 91       		.byte	0x91
+ 40808 97ae CC71     		.sleb128 -1844
+ 40809 97b0 00       		.byte	0x0
+ 40810 97b1 00       		.byte	0x0
+ 40811 97b2 00       		.byte	0x0
+ 40812 97b3 00       		.byte	0x0
+ 40813 97b4 36       		.uleb128 0x36
+ 40814 97b5 00000000 		.quad	.LBB2217
+ 40814      00000000 
+ 40815 97bd 00000000 		.quad	.LBE2217
+ 40815      00000000 
+ 40816 97c5 D3970000 		.long	0x97d3
+ 40817 97c9 34       		.uleb128 0x34
+ 40818 97ca 280C0000 		.long	0xc28
+ 40819 97ce 03       		.byte	0x3
+ 40820 97cf 91       		.byte	0x91
+ 40821 97d0 D04B     		.sleb128 -6704
+ 40822 97d2 00       		.byte	0x0
+ 40823 97d3 31       		.uleb128 0x31
+ 40824 97d4 520E0000 		.long	0xe52
+ 40825 97d8 00000000 		.quad	.LBB2218
+ 40825      00000000 
+ 40826 97e0 00000000 		.quad	.LBE2218
+ 40826      00000000 
+ 40827 97e8 02       		.byte	0x2
+ 40828 97e9 9606     		.value	0x696
+ 40829 97eb 02980000 		.long	0x9802
+ 40830 97ef 32       		.uleb128 0x32
+ 40831 97f0 6D0E0000 		.long	0xe6d
+ 40832 97f4 03       		.byte	0x3
+ 40833 97f5 91       		.byte	0x91
+ 40834 97f6 D071     		.sleb128 -1840
+ 40835 97f8 32       		.uleb128 0x32
+ 40836 97f9 630E0000 		.long	0xe63
+ 40837 97fd 03       		.byte	0x3
+ 40838 97fe 91       		.byte	0x91
+ 40839 97ff E071     		.sleb128 -1824
+ 40840 9801 00       		.byte	0x0
+ 40841 9802 36       		.uleb128 0x36
+ 40842 9803 00000000 		.quad	.LBB2220
+ 40842      00000000 
+ 40843 980b 00000000 		.quad	.LBE2220
+ 40843      00000000 
+ 40844 9813 21980000 		.long	0x9821
+ 40845 9817 34       		.uleb128 0x34
+ 40846 9818 380C0000 		.long	0xc38
+ 40847 981c 03       		.byte	0x3
+ 40848 981d 91       		.byte	0x91
+ 40849 981e C04B     		.sleb128 -6720
+ 40850 9820 00       		.byte	0x0
+ 40851 9821 31       		.uleb128 0x31
+ 40852 9822 780E0000 		.long	0xe78
+ 40853 9826 00000000 		.quad	.LBB2221
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1068
+
+
+ 40853      00000000 
+ 40854 982e 00000000 		.quad	.LBE2221
+ 40854      00000000 
+ 40855 9836 02       		.byte	0x2
+ 40856 9837 9806     		.value	0x698
+ 40857 9839 62980000 		.long	0x9862
+ 40858 983d 32       		.uleb128 0x32
+ 40859 983e 8A0E0000 		.long	0xe8a
+ 40860 9842 03       		.byte	0x3
+ 40861 9843 91       		.byte	0x91
+ 40862 9844 F071     		.sleb128 -1808
+ 40863 9846 33       		.uleb128 0x33
+ 40864 9847 00000000 		.quad	.LBB2222
+ 40864      00000000 
+ 40865 984f 00000000 		.quad	.LBE2222
+ 40865      00000000 
+ 40866 9857 34       		.uleb128 0x34
+ 40867 9858 960E0000 		.long	0xe96
+ 40868 985c 03       		.byte	0x3
+ 40869 985d 91       		.byte	0x91
+ 40870 985e 904D     		.sleb128 -6512
+ 40871 9860 00       		.byte	0x0
+ 40872 9861 00       		.byte	0x0
+ 40873 9862 33       		.uleb128 0x33
+ 40874 9863 00000000 		.quad	.LBB2223
+ 40874      00000000 
+ 40875 986b 00000000 		.quad	.LBE2223
+ 40875      00000000 
+ 40876 9873 34       		.uleb128 0x34
+ 40877 9874 440C0000 		.long	0xc44
+ 40878 9878 03       		.byte	0x3
+ 40879 9879 91       		.byte	0x91
+ 40880 987a B04B     		.sleb128 -6736
+ 40881 987c 00       		.byte	0x0
+ 40882 987d 00       		.byte	0x0
+ 40883 987e 00       		.byte	0x0
+ 40884 987f 31       		.uleb128 0x31
+ 40885 9880 A30E0000 		.long	0xea3
+ 40886 9884 00000000 		.quad	.LBB2224
+ 40886      00000000 
+ 40887 988c 00000000 		.quad	.LBE2224
+ 40887      00000000 
+ 40888 9894 02       		.byte	0x2
+ 40889 9895 8E07     		.value	0x78e
+ 40890 9897 80990000 		.long	0x9980
+ 40891 989b 32       		.uleb128 0x32
+ 40892 989c B50E0000 		.long	0xeb5
+ 40893 98a0 03       		.byte	0x3
+ 40894 98a1 91       		.byte	0x91
+ 40895 98a2 8072     		.sleb128 -1792
+ 40896 98a4 33       		.uleb128 0x33
+ 40897 98a5 00000000 		.quad	.LBB2225
+ 40897      00000000 
+ 40898 98ad 00000000 		.quad	.LBE2225
+ 40898      00000000 
+ 40899 98b5 34       		.uleb128 0x34
+ 40900 98b6 C10E0000 		.long	0xec1
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1069
+
+
+ 40901 98ba 04       		.byte	0x4
+ 40902 98bb 76       		.byte	0x76
+ 40903 98bc A0BE7F   		.sleb128 -8416
+ 40904 98bf 31       		.uleb128 0x31
+ 40905 98c0 CE0E0000 		.long	0xece
+ 40906 98c4 00000000 		.quad	.LBB2226
+ 40906      00000000 
+ 40907 98cc 00000000 		.quad	.LBE2226
+ 40907      00000000 
+ 40908 98d4 02       		.byte	0x2
+ 40909 98d5 1F06     		.value	0x61f
+ 40910 98d7 00990000 		.long	0x9900
+ 40911 98db 32       		.uleb128 0x32
+ 40912 98dc E00E0000 		.long	0xee0
+ 40913 98e0 03       		.byte	0x3
+ 40914 98e1 91       		.byte	0x91
+ 40915 98e2 9072     		.sleb128 -1776
+ 40916 98e4 33       		.uleb128 0x33
+ 40917 98e5 00000000 		.quad	.LBB2227
+ 40917      00000000 
+ 40918 98ed 00000000 		.quad	.LBE2227
+ 40918      00000000 
+ 40919 98f5 34       		.uleb128 0x34
+ 40920 98f6 EC0E0000 		.long	0xeec
+ 40921 98fa 03       		.byte	0x3
+ 40922 98fb 91       		.byte	0x91
+ 40923 98fc A04D     		.sleb128 -6496
+ 40924 98fe 00       		.byte	0x0
+ 40925 98ff 00       		.byte	0x0
+ 40926 9900 31       		.uleb128 0x31
+ 40927 9901 CE0E0000 		.long	0xece
+ 40928 9905 00000000 		.quad	.LBB2228
+ 40928      00000000 
+ 40929 990d 00000000 		.quad	.LBE2228
+ 40929      00000000 
+ 40930 9915 02       		.byte	0x2
+ 40931 9916 2006     		.value	0x620
+ 40932 9918 41990000 		.long	0x9941
+ 40933 991c 32       		.uleb128 0x32
+ 40934 991d E00E0000 		.long	0xee0
+ 40935 9921 03       		.byte	0x3
+ 40936 9922 91       		.byte	0x91
+ 40937 9923 A072     		.sleb128 -1760
+ 40938 9925 33       		.uleb128 0x33
+ 40939 9926 00000000 		.quad	.LBB2229
+ 40939      00000000 
+ 40940 992e 00000000 		.quad	.LBE2229
+ 40940      00000000 
+ 40941 9936 34       		.uleb128 0x34
+ 40942 9937 EC0E0000 		.long	0xeec
+ 40943 993b 03       		.byte	0x3
+ 40944 993c 91       		.byte	0x91
+ 40945 993d B04D     		.sleb128 -6480
+ 40946 993f 00       		.byte	0x0
+ 40947 9940 00       		.byte	0x0
+ 40948 9941 35       		.uleb128 0x35
+ 40949 9942 CE0E0000 		.long	0xece
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1070
+
+
+ 40950 9946 00000000 		.quad	.LBB2230
+ 40950      00000000 
+ 40951 994e 00000000 		.quad	.LBE2230
+ 40951      00000000 
+ 40952 9956 02       		.byte	0x2
+ 40953 9957 2106     		.value	0x621
+ 40954 9959 32       		.uleb128 0x32
+ 40955 995a E00E0000 		.long	0xee0
+ 40956 995e 03       		.byte	0x3
+ 40957 995f 91       		.byte	0x91
+ 40958 9960 B072     		.sleb128 -1744
+ 40959 9962 33       		.uleb128 0x33
+ 40960 9963 00000000 		.quad	.LBB2231
+ 40960      00000000 
+ 40961 996b 00000000 		.quad	.LBE2231
+ 40961      00000000 
+ 40962 9973 34       		.uleb128 0x34
+ 40963 9974 EC0E0000 		.long	0xeec
+ 40964 9978 03       		.byte	0x3
+ 40965 9979 91       		.byte	0x91
+ 40966 997a C04D     		.sleb128 -6464
+ 40967 997c 00       		.byte	0x0
+ 40968 997d 00       		.byte	0x0
+ 40969 997e 00       		.byte	0x0
+ 40970 997f 00       		.byte	0x0
+ 40971 9980 31       		.uleb128 0x31
+ 40972 9981 520E0000 		.long	0xe52
+ 40973 9985 00000000 		.quad	.LBB2232
+ 40973      00000000 
+ 40974 998d 00000000 		.quad	.LBE2232
+ 40974      00000000 
+ 40975 9995 02       		.byte	0x2
+ 40976 9996 8E07     		.value	0x78e
+ 40977 9998 AF990000 		.long	0x99af
+ 40978 999c 32       		.uleb128 0x32
+ 40979 999d 6D0E0000 		.long	0xe6d
+ 40980 99a1 03       		.byte	0x3
+ 40981 99a2 91       		.byte	0x91
+ 40982 99a3 C072     		.sleb128 -1728
+ 40983 99a5 32       		.uleb128 0x32
+ 40984 99a6 630E0000 		.long	0xe63
+ 40985 99aa 03       		.byte	0x3
+ 40986 99ab 91       		.byte	0x91
+ 40987 99ac D072     		.sleb128 -1712
+ 40988 99ae 00       		.byte	0x0
+ 40989 99af 31       		.uleb128 0x31
+ 40990 99b0 4E740000 		.long	0x744e
+ 40991 99b4 00000000 		.quad	.LBB2234
+ 40991      00000000 
+ 40992 99bc 00000000 		.quad	.LBE2234
+ 40992      00000000 
+ 40993 99c4 02       		.byte	0x2
+ 40994 99c5 8F07     		.value	0x78f
+ 40995 99c7 3F9A0000 		.long	0x9a3f
+ 40996 99cb 32       		.uleb128 0x32
+ 40997 99cc 60740000 		.long	0x7460
+ 40998 99d0 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1071
+
+
+ 40999 99d1 91       		.byte	0x91
+ 41000 99d2 E072     		.sleb128 -1696
+ 41001 99d4 33       		.uleb128 0x33
+ 41002 99d5 00000000 		.quad	.LBB2235
+ 41002      00000000 
+ 41003 99dd 00000000 		.quad	.LBE2235
+ 41003      00000000 
+ 41004 99e5 34       		.uleb128 0x34
+ 41005 99e6 6C740000 		.long	0x746c
+ 41006 99ea 03       		.byte	0x3
+ 41007 99eb 91       		.byte	0x91
+ 41008 99ec E04D     		.sleb128 -6432
+ 41009 99ee 34       		.uleb128 0x34
+ 41010 99ef 76740000 		.long	0x7476
+ 41011 99f3 03       		.byte	0x3
+ 41012 99f4 91       		.byte	0x91
+ 41013 99f5 F472     		.sleb128 -1676
+ 41014 99f7 35       		.uleb128 0x35
+ 41015 99f8 12490000 		.long	0x4912
+ 41016 99fc 00000000 		.quad	.LBB2236
+ 41016      00000000 
+ 41017 9a04 00000000 		.quad	.LBE2236
+ 41017      00000000 
+ 41018 9a0c 02       		.byte	0x2
+ 41019 9a0d 7906     		.value	0x679
+ 41020 9a0f 32       		.uleb128 0x32
+ 41021 9a10 24490000 		.long	0x4924
+ 41022 9a14 03       		.byte	0x3
+ 41023 9a15 91       		.byte	0x91
+ 41024 9a16 F872     		.sleb128 -1672
+ 41025 9a18 33       		.uleb128 0x33
+ 41026 9a19 00000000 		.quad	.LBB2237
+ 41026      00000000 
+ 41027 9a21 00000000 		.quad	.LBE2237
+ 41027      00000000 
+ 41028 9a29 34       		.uleb128 0x34
+ 41029 9a2a 2E490000 		.long	0x492e
+ 41030 9a2e 03       		.byte	0x3
+ 41031 9a2f 91       		.byte	0x91
+ 41032 9a30 D04D     		.sleb128 -6448
+ 41033 9a32 34       		.uleb128 0x34
+ 41034 9a33 3A490000 		.long	0x493a
+ 41035 9a37 03       		.byte	0x3
+ 41036 9a38 91       		.byte	0x91
+ 41037 9a39 FC72     		.sleb128 -1668
+ 41038 9a3b 00       		.byte	0x0
+ 41039 9a3c 00       		.byte	0x0
+ 41040 9a3d 00       		.byte	0x0
+ 41041 9a3e 00       		.byte	0x0
+ 41042 9a3f 31       		.uleb128 0x31
+ 41043 9a40 A30E0000 		.long	0xea3
+ 41044 9a44 00000000 		.quad	.LBB2238
+ 41044      00000000 
+ 41045 9a4c 00000000 		.quad	.LBE2238
+ 41045      00000000 
+ 41046 9a54 02       		.byte	0x2
+ 41047 9a55 8F07     		.value	0x78f
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1072
+
+
+ 41048 9a57 409B0000 		.long	0x9b40
+ 41049 9a5b 32       		.uleb128 0x32
+ 41050 9a5c B50E0000 		.long	0xeb5
+ 41051 9a60 03       		.byte	0x3
+ 41052 9a61 91       		.byte	0x91
+ 41053 9a62 8073     		.sleb128 -1664
+ 41054 9a64 33       		.uleb128 0x33
+ 41055 9a65 00000000 		.quad	.LBB2239
+ 41055      00000000 
+ 41056 9a6d 00000000 		.quad	.LBE2239
+ 41056      00000000 
+ 41057 9a75 34       		.uleb128 0x34
+ 41058 9a76 C10E0000 		.long	0xec1
+ 41059 9a7a 04       		.byte	0x4
+ 41060 9a7b 76       		.byte	0x76
+ 41061 9a7c B0BE7F   		.sleb128 -8400
+ 41062 9a7f 31       		.uleb128 0x31
+ 41063 9a80 CE0E0000 		.long	0xece
+ 41064 9a84 00000000 		.quad	.LBB2240
+ 41064      00000000 
+ 41065 9a8c 00000000 		.quad	.LBE2240
+ 41065      00000000 
+ 41066 9a94 02       		.byte	0x2
+ 41067 9a95 1F06     		.value	0x61f
+ 41068 9a97 C09A0000 		.long	0x9ac0
+ 41069 9a9b 32       		.uleb128 0x32
+ 41070 9a9c E00E0000 		.long	0xee0
+ 41071 9aa0 03       		.byte	0x3
+ 41072 9aa1 91       		.byte	0x91
+ 41073 9aa2 9073     		.sleb128 -1648
+ 41074 9aa4 33       		.uleb128 0x33
+ 41075 9aa5 00000000 		.quad	.LBB2241
+ 41075      00000000 
+ 41076 9aad 00000000 		.quad	.LBE2241
+ 41076      00000000 
+ 41077 9ab5 34       		.uleb128 0x34
+ 41078 9ab6 EC0E0000 		.long	0xeec
+ 41079 9aba 03       		.byte	0x3
+ 41080 9abb 91       		.byte	0x91
+ 41081 9abc F04D     		.sleb128 -6416
+ 41082 9abe 00       		.byte	0x0
+ 41083 9abf 00       		.byte	0x0
+ 41084 9ac0 31       		.uleb128 0x31
+ 41085 9ac1 CE0E0000 		.long	0xece
+ 41086 9ac5 00000000 		.quad	.LBB2242
+ 41086      00000000 
+ 41087 9acd 00000000 		.quad	.LBE2242
+ 41087      00000000 
+ 41088 9ad5 02       		.byte	0x2
+ 41089 9ad6 2006     		.value	0x620
+ 41090 9ad8 019B0000 		.long	0x9b01
+ 41091 9adc 32       		.uleb128 0x32
+ 41092 9add E00E0000 		.long	0xee0
+ 41093 9ae1 03       		.byte	0x3
+ 41094 9ae2 91       		.byte	0x91
+ 41095 9ae3 A073     		.sleb128 -1632
+ 41096 9ae5 33       		.uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1073
+
+
+ 41097 9ae6 00000000 		.quad	.LBB2243
+ 41097      00000000 
+ 41098 9aee 00000000 		.quad	.LBE2243
+ 41098      00000000 
+ 41099 9af6 34       		.uleb128 0x34
+ 41100 9af7 EC0E0000 		.long	0xeec
+ 41101 9afb 03       		.byte	0x3
+ 41102 9afc 91       		.byte	0x91
+ 41103 9afd 804E     		.sleb128 -6400
+ 41104 9aff 00       		.byte	0x0
+ 41105 9b00 00       		.byte	0x0
+ 41106 9b01 35       		.uleb128 0x35
+ 41107 9b02 CE0E0000 		.long	0xece
+ 41108 9b06 00000000 		.quad	.LBB2244
+ 41108      00000000 
+ 41109 9b0e 00000000 		.quad	.LBE2244
+ 41109      00000000 
+ 41110 9b16 02       		.byte	0x2
+ 41111 9b17 2106     		.value	0x621
+ 41112 9b19 32       		.uleb128 0x32
+ 41113 9b1a E00E0000 		.long	0xee0
+ 41114 9b1e 03       		.byte	0x3
+ 41115 9b1f 91       		.byte	0x91
+ 41116 9b20 B073     		.sleb128 -1616
+ 41117 9b22 33       		.uleb128 0x33
+ 41118 9b23 00000000 		.quad	.LBB2245
+ 41118      00000000 
+ 41119 9b2b 00000000 		.quad	.LBE2245
+ 41119      00000000 
+ 41120 9b33 34       		.uleb128 0x34
+ 41121 9b34 EC0E0000 		.long	0xeec
+ 41122 9b38 03       		.byte	0x3
+ 41123 9b39 91       		.byte	0x91
+ 41124 9b3a 904E     		.sleb128 -6384
+ 41125 9b3c 00       		.byte	0x0
+ 41126 9b3d 00       		.byte	0x0
+ 41127 9b3e 00       		.byte	0x0
+ 41128 9b3f 00       		.byte	0x0
+ 41129 9b40 31       		.uleb128 0x31
+ 41130 9b41 520E0000 		.long	0xe52
+ 41131 9b45 00000000 		.quad	.LBB2246
+ 41131      00000000 
+ 41132 9b4d 00000000 		.quad	.LBE2246
+ 41132      00000000 
+ 41133 9b55 02       		.byte	0x2
+ 41134 9b56 8F07     		.value	0x78f
+ 41135 9b58 6F9B0000 		.long	0x9b6f
+ 41136 9b5c 32       		.uleb128 0x32
+ 41137 9b5d 6D0E0000 		.long	0xe6d
+ 41138 9b61 03       		.byte	0x3
+ 41139 9b62 91       		.byte	0x91
+ 41140 9b63 C073     		.sleb128 -1600
+ 41141 9b65 32       		.uleb128 0x32
+ 41142 9b66 630E0000 		.long	0xe63
+ 41143 9b6a 03       		.byte	0x3
+ 41144 9b6b 91       		.byte	0x91
+ 41145 9b6c D073     		.sleb128 -1584
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1074
+
+
+ 41146 9b6e 00       		.byte	0x0
+ 41147 9b6f 31       		.uleb128 0x31
+ 41148 9b70 D10B0000 		.long	0xbd1
+ 41149 9b74 00000000 		.quad	.LBB2248
+ 41149      00000000 
+ 41150 9b7c 00000000 		.quad	.LBE2248
+ 41150      00000000 
+ 41151 9b84 02       		.byte	0x2
+ 41152 9b85 9007     		.value	0x790
+ 41153 9b87 17A00000 		.long	0xa017
+ 41154 9b8b 32       		.uleb128 0x32
+ 41155 9b8c EF0B0000 		.long	0xbef
+ 41156 9b90 03       		.byte	0x3
+ 41157 9b91 91       		.byte	0x91
+ 41158 9b92 EC73     		.sleb128 -1556
+ 41159 9b94 32       		.uleb128 0x32
+ 41160 9b95 E30B0000 		.long	0xbe3
+ 41161 9b99 03       		.byte	0x3
+ 41162 9b9a 91       		.byte	0x91
+ 41163 9b9b F073     		.sleb128 -1552
+ 41164 9b9d 33       		.uleb128 0x33
+ 41165 9b9e 00000000 		.quad	.LBB2249
+ 41165      00000000 
+ 41166 9ba6 00000000 		.quad	.LBE2249
+ 41166      00000000 
+ 41167 9bae 34       		.uleb128 0x34
+ 41168 9baf FB0B0000 		.long	0xbfb
+ 41169 9bb3 04       		.byte	0x4
+ 41170 9bb4 76       		.byte	0x76
+ 41171 9bb5 D0BE7F   		.sleb128 -8368
+ 41172 9bb8 34       		.uleb128 0x34
+ 41173 9bb9 070C0000 		.long	0xc07
+ 41174 9bbd 04       		.byte	0x4
+ 41175 9bbe 76       		.byte	0x76
+ 41176 9bbf C0BE7F   		.sleb128 -8384
+ 41177 9bc2 31       		.uleb128 0x31
+ 41178 9bc3 500C0000 		.long	0xc50
+ 41179 9bc7 00000000 		.quad	.LBB2250
+ 41179      00000000 
+ 41180 9bcf 00000000 		.quad	.LBE2250
+ 41180      00000000 
+ 41181 9bd7 02       		.byte	0x2
+ 41182 9bd8 9106     		.value	0x691
+ 41183 9bda 159C0000 		.long	0x9c15
+ 41184 9bde 32       		.uleb128 0x32
+ 41185 9bdf 7A0C0000 		.long	0xc7a
+ 41186 9be3 03       		.byte	0x3
+ 41187 9be4 91       		.byte	0x91
+ 41188 9be5 8874     		.sleb128 -1528
+ 41189 9be7 32       		.uleb128 0x32
+ 41190 9be8 6E0C0000 		.long	0xc6e
+ 41191 9bec 03       		.byte	0x3
+ 41192 9bed 91       		.byte	0x91
+ 41193 9bee 8C74     		.sleb128 -1524
+ 41194 9bf0 32       		.uleb128 0x32
+ 41195 9bf1 620C0000 		.long	0xc62
+ 41196 9bf5 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1075
+
+
+ 41197 9bf6 91       		.byte	0x91
+ 41198 9bf7 9074     		.sleb128 -1520
+ 41199 9bf9 33       		.uleb128 0x33
+ 41200 9bfa 00000000 		.quad	.LBB2251
+ 41200      00000000 
+ 41201 9c02 00000000 		.quad	.LBE2251
+ 41201      00000000 
+ 41202 9c0a 34       		.uleb128 0x34
+ 41203 9c0b 860C0000 		.long	0xc86
+ 41204 9c0f 03       		.byte	0x3
+ 41205 9c10 91       		.byte	0x91
+ 41206 9c11 E04E     		.sleb128 -6304
+ 41207 9c13 00       		.byte	0x0
+ 41208 9c14 00       		.byte	0x0
+ 41209 9c15 31       		.uleb128 0x31
+ 41210 9c16 910C0000 		.long	0xc91
+ 41211 9c1a 00000000 		.quad	.LBB2252
+ 41211      00000000 
+ 41212 9c22 00000000 		.quad	.LBE2252
+ 41212      00000000 
+ 41213 9c2a 02       		.byte	0x2
+ 41214 9c2b 9206     		.value	0x692
+ 41215 9c2d 859E0000 		.long	0x9e85
+ 41216 9c31 32       		.uleb128 0x32
+ 41217 9c32 A30C0000 		.long	0xca3
+ 41218 9c36 03       		.byte	0x3
+ 41219 9c37 91       		.byte	0x91
+ 41220 9c38 A074     		.sleb128 -1504
+ 41221 9c3a 35       		.uleb128 0x35
+ 41222 9c3b B00C0000 		.long	0xcb0
+ 41223 9c3f 00000000 		.quad	.LBB2254
+ 41223      00000000 
+ 41224 9c47 00000000 		.quad	.LBE2254
+ 41224      00000000 
+ 41225 9c4f 02       		.byte	0x2
+ 41226 9c50 7D03     		.value	0x37d
+ 41227 9c52 32       		.uleb128 0x32
+ 41228 9c53 CE0C0000 		.long	0xcce
+ 41229 9c57 03       		.byte	0x3
+ 41230 9c58 91       		.byte	0x91
+ 41231 9c59 B874     		.sleb128 -1480
+ 41232 9c5b 32       		.uleb128 0x32
+ 41233 9c5c C20C0000 		.long	0xcc2
+ 41234 9c60 03       		.byte	0x3
+ 41235 9c61 91       		.byte	0x91
+ 41236 9c62 C074     		.sleb128 -1472
+ 41237 9c64 33       		.uleb128 0x33
+ 41238 9c65 00000000 		.quad	.LBB2255
+ 41238      00000000 
+ 41239 9c6d 00000000 		.quad	.LBE2255
+ 41239      00000000 
+ 41240 9c75 34       		.uleb128 0x34
+ 41241 9c76 DA0C0000 		.long	0xcda
+ 41242 9c7a 03       		.byte	0x3
+ 41243 9c7b 91       		.byte	0x91
+ 41244 9c7c 9075     		.sleb128 -1392
+ 41245 9c7e 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1076
+
+
+ 41246 9c7f E50C0000 		.long	0xce5
+ 41247 9c83 03       		.byte	0x3
+ 41248 9c84 91       		.byte	0x91
+ 41249 9c85 8075     		.sleb128 -1408
+ 41250 9c87 34       		.uleb128 0x34
+ 41251 9c88 F00C0000 		.long	0xcf0
+ 41252 9c8c 03       		.byte	0x3
+ 41253 9c8d 91       		.byte	0x91
+ 41254 9c8e F074     		.sleb128 -1424
+ 41255 9c90 34       		.uleb128 0x34
+ 41256 9c91 FC0C0000 		.long	0xcfc
+ 41257 9c95 03       		.byte	0x3
+ 41258 9c96 91       		.byte	0x91
+ 41259 9c97 E074     		.sleb128 -1440
+ 41260 9c99 34       		.uleb128 0x34
+ 41261 9c9a 080D0000 		.long	0xd08
+ 41262 9c9e 03       		.byte	0x3
+ 41263 9c9f 91       		.byte	0x91
+ 41264 9ca0 DC74     		.sleb128 -1444
+ 41265 9ca2 31       		.uleb128 0x31
+ 41266 9ca3 1F0D0000 		.long	0xd1f
+ 41267 9ca7 00000000 		.quad	.LBB2256
+ 41267      00000000 
+ 41268 9caf 00000000 		.quad	.LBE2256
+ 41268      00000000 
+ 41269 9cb7 02       		.byte	0x2
+ 41270 9cb8 5603     		.value	0x356
+ 41271 9cba D19C0000 		.long	0x9cd1
+ 41272 9cbe 32       		.uleb128 0x32
+ 41273 9cbf 3A0D0000 		.long	0xd3a
+ 41274 9cc3 03       		.byte	0x3
+ 41275 9cc4 91       		.byte	0x91
+ 41276 9cc5 A075     		.sleb128 -1376
+ 41277 9cc7 32       		.uleb128 0x32
+ 41278 9cc8 300D0000 		.long	0xd30
+ 41279 9ccc 03       		.byte	0x3
+ 41280 9ccd 91       		.byte	0x91
+ 41281 9cce B075     		.sleb128 -1360
+ 41282 9cd0 00       		.byte	0x0
+ 41283 9cd1 31       		.uleb128 0x31
+ 41284 9cd2 450D0000 		.long	0xd45
+ 41285 9cd6 00000000 		.quad	.LBB2258
+ 41285      00000000 
+ 41286 9cde 00000000 		.quad	.LBE2258
+ 41286      00000000 
+ 41287 9ce6 02       		.byte	0x2
+ 41288 9ce7 5E03     		.value	0x35e
+ 41289 9ce9 009D0000 		.long	0x9d00
+ 41290 9ced 32       		.uleb128 0x32
+ 41291 9cee 620D0000 		.long	0xd62
+ 41292 9cf2 03       		.byte	0x3
+ 41293 9cf3 91       		.byte	0x91
+ 41294 9cf4 C075     		.sleb128 -1344
+ 41295 9cf6 32       		.uleb128 0x32
+ 41296 9cf7 570D0000 		.long	0xd57
+ 41297 9cfb 03       		.byte	0x3
+ 41298 9cfc 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1077
+
+
+ 41299 9cfd D075     		.sleb128 -1328
+ 41300 9cff 00       		.byte	0x0
+ 41301 9d00 31       		.uleb128 0x31
+ 41302 9d01 6E0D0000 		.long	0xd6e
+ 41303 9d05 00000000 		.quad	.LBB2260
+ 41303      00000000 
+ 41304 9d0d 00000000 		.quad	.LBE2260
+ 41304      00000000 
+ 41305 9d15 02       		.byte	0x2
+ 41306 9d16 6403     		.value	0x364
+ 41307 9d18 659D0000 		.long	0x9d65
+ 41308 9d1c 32       		.uleb128 0x32
+ 41309 9d1d 8C0D0000 		.long	0xd8c
+ 41310 9d21 03       		.byte	0x3
+ 41311 9d22 91       		.byte	0x91
+ 41312 9d23 E075     		.sleb128 -1312
+ 41313 9d25 32       		.uleb128 0x32
+ 41314 9d26 800D0000 		.long	0xd80
+ 41315 9d2a 03       		.byte	0x3
+ 41316 9d2b 91       		.byte	0x91
+ 41317 9d2c F075     		.sleb128 -1296
+ 41318 9d2e 33       		.uleb128 0x33
+ 41319 9d2f 00000000 		.quad	.LBB2261
+ 41319      00000000 
+ 41320 9d37 00000000 		.quad	.LBE2261
+ 41320      00000000 
+ 41321 9d3f 34       		.uleb128 0x34
+ 41322 9d40 980D0000 		.long	0xd98
+ 41323 9d44 03       		.byte	0x3
+ 41324 9d45 91       		.byte	0x91
+ 41325 9d46 904F     		.sleb128 -6256
+ 41326 9d48 34       		.uleb128 0x34
+ 41327 9d49 A40D0000 		.long	0xda4
+ 41328 9d4d 03       		.byte	0x3
+ 41329 9d4e 91       		.byte	0x91
+ 41330 9d4f 804F     		.sleb128 -6272
+ 41331 9d51 34       		.uleb128 0x34
+ 41332 9d52 AF0D0000 		.long	0xdaf
+ 41333 9d56 03       		.byte	0x3
+ 41334 9d57 91       		.byte	0x91
+ 41335 9d58 F04E     		.sleb128 -6288
+ 41336 9d5a 34       		.uleb128 0x34
+ 41337 9d5b BB0D0000 		.long	0xdbb
+ 41338 9d5f 03       		.byte	0x3
+ 41339 9d60 91       		.byte	0x91
+ 41340 9d61 8C76     		.sleb128 -1268
+ 41341 9d63 00       		.byte	0x0
+ 41342 9d64 00       		.byte	0x0
+ 41343 9d65 31       		.uleb128 0x31
+ 41344 9d66 C70D0000 		.long	0xdc7
+ 41345 9d6a 00000000 		.quad	.LBB2262
+ 41345      00000000 
+ 41346 9d72 00000000 		.quad	.LBE2262
+ 41346      00000000 
+ 41347 9d7a 02       		.byte	0x2
+ 41348 9d7b 6603     		.value	0x366
+ 41349 9d7d 949D0000 		.long	0x9d94
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1078
+
+
+ 41350 9d81 32       		.uleb128 0x32
+ 41351 9d82 E20D0000 		.long	0xde2
+ 41352 9d86 03       		.byte	0x3
+ 41353 9d87 91       		.byte	0x91
+ 41354 9d88 9076     		.sleb128 -1264
+ 41355 9d8a 32       		.uleb128 0x32
+ 41356 9d8b D80D0000 		.long	0xdd8
+ 41357 9d8f 03       		.byte	0x3
+ 41358 9d90 91       		.byte	0x91
+ 41359 9d91 A076     		.sleb128 -1248
+ 41360 9d93 00       		.byte	0x0
+ 41361 9d94 31       		.uleb128 0x31
+ 41362 9d95 6E0D0000 		.long	0xd6e
+ 41363 9d99 00000000 		.quad	.LBB2264
+ 41363      00000000 
+ 41364 9da1 00000000 		.quad	.LBE2264
+ 41364      00000000 
+ 41365 9da9 02       		.byte	0x2
+ 41366 9daa 6803     		.value	0x368
+ 41367 9dac F99D0000 		.long	0x9df9
+ 41368 9db0 32       		.uleb128 0x32
+ 41369 9db1 8C0D0000 		.long	0xd8c
+ 41370 9db5 03       		.byte	0x3
+ 41371 9db6 91       		.byte	0x91
+ 41372 9db7 B076     		.sleb128 -1232
+ 41373 9db9 32       		.uleb128 0x32
+ 41374 9dba 800D0000 		.long	0xd80
+ 41375 9dbe 03       		.byte	0x3
+ 41376 9dbf 91       		.byte	0x91
+ 41377 9dc0 C076     		.sleb128 -1216
+ 41378 9dc2 33       		.uleb128 0x33
+ 41379 9dc3 00000000 		.quad	.LBB2265
+ 41379      00000000 
+ 41380 9dcb 00000000 		.quad	.LBE2265
+ 41380      00000000 
+ 41381 9dd3 34       		.uleb128 0x34
+ 41382 9dd4 980D0000 		.long	0xd98
+ 41383 9dd8 03       		.byte	0x3
+ 41384 9dd9 91       		.byte	0x91
+ 41385 9dda C04F     		.sleb128 -6208
+ 41386 9ddc 34       		.uleb128 0x34
+ 41387 9ddd A40D0000 		.long	0xda4
+ 41388 9de1 03       		.byte	0x3
+ 41389 9de2 91       		.byte	0x91
+ 41390 9de3 B04F     		.sleb128 -6224
+ 41391 9de5 34       		.uleb128 0x34
+ 41392 9de6 AF0D0000 		.long	0xdaf
+ 41393 9dea 03       		.byte	0x3
+ 41394 9deb 91       		.byte	0x91
+ 41395 9dec A04F     		.sleb128 -6240
+ 41396 9dee 34       		.uleb128 0x34
+ 41397 9def BB0D0000 		.long	0xdbb
+ 41398 9df3 03       		.byte	0x3
+ 41399 9df4 91       		.byte	0x91
+ 41400 9df5 DC76     		.sleb128 -1188
+ 41401 9df7 00       		.byte	0x0
+ 41402 9df8 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1079
+
+
+ 41403 9df9 31       		.uleb128 0x31
+ 41404 9dfa C70D0000 		.long	0xdc7
+ 41405 9dfe 00000000 		.quad	.LBB2266
+ 41405      00000000 
+ 41406 9e06 00000000 		.quad	.LBE2266
+ 41406      00000000 
+ 41407 9e0e 02       		.byte	0x2
+ 41408 9e0f 6A03     		.value	0x36a
+ 41409 9e11 289E0000 		.long	0x9e28
+ 41410 9e15 32       		.uleb128 0x32
+ 41411 9e16 E20D0000 		.long	0xde2
+ 41412 9e1a 03       		.byte	0x3
+ 41413 9e1b 91       		.byte	0x91
+ 41414 9e1c E076     		.sleb128 -1184
+ 41415 9e1e 32       		.uleb128 0x32
+ 41416 9e1f D80D0000 		.long	0xdd8
+ 41417 9e23 03       		.byte	0x3
+ 41418 9e24 91       		.byte	0x91
+ 41419 9e25 F076     		.sleb128 -1168
+ 41420 9e27 00       		.byte	0x0
+ 41421 9e28 31       		.uleb128 0x31
+ 41422 9e29 ED0D0000 		.long	0xded
+ 41423 9e2d 00000000 		.quad	.LBB2268
+ 41423      00000000 
+ 41424 9e35 00000000 		.quad	.LBE2268
+ 41424      00000000 
+ 41425 9e3d 02       		.byte	0x2
+ 41426 9e3e 6C03     		.value	0x36c
+ 41427 9e40 579E0000 		.long	0x9e57
+ 41428 9e44 32       		.uleb128 0x32
+ 41429 9e45 0A0E0000 		.long	0xe0a
+ 41430 9e49 03       		.byte	0x3
+ 41431 9e4a 91       		.byte	0x91
+ 41432 9e4b 8077     		.sleb128 -1152
+ 41433 9e4d 32       		.uleb128 0x32
+ 41434 9e4e FF0D0000 		.long	0xdff
+ 41435 9e52 03       		.byte	0x3
+ 41436 9e53 91       		.byte	0x91
+ 41437 9e54 9077     		.sleb128 -1136
+ 41438 9e56 00       		.byte	0x0
+ 41439 9e57 35       		.uleb128 0x35
+ 41440 9e58 1F0D0000 		.long	0xd1f
+ 41441 9e5c 00000000 		.quad	.LBB2270
+ 41441      00000000 
+ 41442 9e64 00000000 		.quad	.LBE2270
+ 41442      00000000 
+ 41443 9e6c 02       		.byte	0x2
+ 41444 9e6d 6E03     		.value	0x36e
+ 41445 9e6f 32       		.uleb128 0x32
+ 41446 9e70 3A0D0000 		.long	0xd3a
+ 41447 9e74 03       		.byte	0x3
+ 41448 9e75 91       		.byte	0x91
+ 41449 9e76 A077     		.sleb128 -1120
+ 41450 9e78 32       		.uleb128 0x32
+ 41451 9e79 300D0000 		.long	0xd30
+ 41452 9e7d 03       		.byte	0x3
+ 41453 9e7e 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1080
+
+
+ 41454 9e7f B077     		.sleb128 -1104
+ 41455 9e81 00       		.byte	0x0
+ 41456 9e82 00       		.byte	0x0
+ 41457 9e83 00       		.byte	0x0
+ 41458 9e84 00       		.byte	0x0
+ 41459 9e85 36       		.uleb128 0x36
+ 41460 9e86 00000000 		.quad	.LBB2272
+ 41460      00000000 
+ 41461 9e8e 00000000 		.quad	.LBE2272
+ 41461      00000000 
+ 41462 9e96 A49E0000 		.long	0x9ea4
+ 41463 9e9a 34       		.uleb128 0x34
+ 41464 9e9b 180C0000 		.long	0xc18
+ 41465 9e9f 03       		.byte	0x3
+ 41466 9ea0 91       		.byte	0x91
+ 41467 9ea1 D04E     		.sleb128 -6320
+ 41468 9ea3 00       		.byte	0x0
+ 41469 9ea4 31       		.uleb128 0x31
+ 41470 9ea5 160E0000 		.long	0xe16
+ 41471 9ea9 00000000 		.quad	.LBB2273
+ 41471      00000000 
+ 41472 9eb1 00000000 		.quad	.LBE2273
+ 41472      00000000 
+ 41473 9eb9 02       		.byte	0x2
+ 41474 9eba 9406     		.value	0x694
+ 41475 9ebc 4C9F0000 		.long	0x9f4c
+ 41476 9ec0 32       		.uleb128 0x32
+ 41477 9ec1 280E0000 		.long	0xe28
+ 41478 9ec5 03       		.byte	0x3
+ 41479 9ec6 91       		.byte	0x91
+ 41480 9ec7 C077     		.sleb128 -1088
+ 41481 9ec9 33       		.uleb128 0x33
+ 41482 9eca 00000000 		.quad	.LBB2274
+ 41482      00000000 
+ 41483 9ed2 00000000 		.quad	.LBE2274
+ 41483      00000000 
+ 41484 9eda 34       		.uleb128 0x34
+ 41485 9edb 340E0000 		.long	0xe34
+ 41486 9edf 09       		.byte	0x9
+ 41487 9ee0 03       		.byte	0x3
+ 41488 9ee1 00000000 		.quad	ShiftRowTable.6768
+ 41488      00000000 
+ 41489 9ee9 35       		.uleb128 0x35
+ 41490 9eea 6E0D0000 		.long	0xd6e
+ 41491 9eee 00000000 		.quad	.LBB2275
+ 41491      00000000 
+ 41492 9ef6 00000000 		.quad	.LBE2275
+ 41492      00000000 
+ 41493 9efe 02       		.byte	0x2
+ 41494 9eff 9B02     		.value	0x29b
+ 41495 9f01 32       		.uleb128 0x32
+ 41496 9f02 8C0D0000 		.long	0xd8c
+ 41497 9f06 03       		.byte	0x3
+ 41498 9f07 91       		.byte	0x91
+ 41499 9f08 D077     		.sleb128 -1072
+ 41500 9f0a 32       		.uleb128 0x32
+ 41501 9f0b 800D0000 		.long	0xd80
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1081
+
+
+ 41502 9f0f 03       		.byte	0x3
+ 41503 9f10 91       		.byte	0x91
+ 41504 9f11 E077     		.sleb128 -1056
+ 41505 9f13 33       		.uleb128 0x33
+ 41506 9f14 00000000 		.quad	.LBB2276
+ 41506      00000000 
+ 41507 9f1c 00000000 		.quad	.LBE2276
+ 41507      00000000 
+ 41508 9f24 34       		.uleb128 0x34
+ 41509 9f25 980D0000 		.long	0xd98
+ 41510 9f29 03       		.byte	0x3
+ 41511 9f2a 91       		.byte	0x91
+ 41512 9f2b F04F     		.sleb128 -6160
+ 41513 9f2d 34       		.uleb128 0x34
+ 41514 9f2e A40D0000 		.long	0xda4
+ 41515 9f32 03       		.byte	0x3
+ 41516 9f33 91       		.byte	0x91
+ 41517 9f34 E04F     		.sleb128 -6176
+ 41518 9f36 34       		.uleb128 0x34
+ 41519 9f37 AF0D0000 		.long	0xdaf
+ 41520 9f3b 03       		.byte	0x3
+ 41521 9f3c 91       		.byte	0x91
+ 41522 9f3d D04F     		.sleb128 -6192
+ 41523 9f3f 34       		.uleb128 0x34
+ 41524 9f40 BB0D0000 		.long	0xdbb
+ 41525 9f44 03       		.byte	0x3
+ 41526 9f45 91       		.byte	0x91
+ 41527 9f46 FC77     		.sleb128 -1028
+ 41528 9f48 00       		.byte	0x0
+ 41529 9f49 00       		.byte	0x0
+ 41530 9f4a 00       		.byte	0x0
+ 41531 9f4b 00       		.byte	0x0
+ 41532 9f4c 36       		.uleb128 0x36
+ 41533 9f4d 00000000 		.quad	.LBB2277
+ 41533      00000000 
+ 41534 9f55 00000000 		.quad	.LBE2277
+ 41534      00000000 
+ 41535 9f5d 6B9F0000 		.long	0x9f6b
+ 41536 9f61 34       		.uleb128 0x34
+ 41537 9f62 280C0000 		.long	0xc28
+ 41538 9f66 03       		.byte	0x3
+ 41539 9f67 91       		.byte	0x91
+ 41540 9f68 C04E     		.sleb128 -6336
+ 41541 9f6a 00       		.byte	0x0
+ 41542 9f6b 31       		.uleb128 0x31
+ 41543 9f6c 520E0000 		.long	0xe52
+ 41544 9f70 00000000 		.quad	.LBB2278
+ 41544      00000000 
+ 41545 9f78 00000000 		.quad	.LBE2278
+ 41545      00000000 
+ 41546 9f80 02       		.byte	0x2
+ 41547 9f81 9606     		.value	0x696
+ 41548 9f83 9A9F0000 		.long	0x9f9a
+ 41549 9f87 32       		.uleb128 0x32
+ 41550 9f88 6D0E0000 		.long	0xe6d
+ 41551 9f8c 03       		.byte	0x3
+ 41552 9f8d 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1082
+
+
+ 41553 9f8e 8078     		.sleb128 -1024
+ 41554 9f90 32       		.uleb128 0x32
+ 41555 9f91 630E0000 		.long	0xe63
+ 41556 9f95 03       		.byte	0x3
+ 41557 9f96 91       		.byte	0x91
+ 41558 9f97 9078     		.sleb128 -1008
+ 41559 9f99 00       		.byte	0x0
+ 41560 9f9a 36       		.uleb128 0x36
+ 41561 9f9b 00000000 		.quad	.LBB2280
+ 41561      00000000 
+ 41562 9fa3 00000000 		.quad	.LBE2280
+ 41562      00000000 
+ 41563 9fab B99F0000 		.long	0x9fb9
+ 41564 9faf 34       		.uleb128 0x34
+ 41565 9fb0 380C0000 		.long	0xc38
+ 41566 9fb4 03       		.byte	0x3
+ 41567 9fb5 91       		.byte	0x91
+ 41568 9fb6 B04E     		.sleb128 -6352
+ 41569 9fb8 00       		.byte	0x0
+ 41570 9fb9 31       		.uleb128 0x31
+ 41571 9fba 780E0000 		.long	0xe78
+ 41572 9fbe 00000000 		.quad	.LBB2281
+ 41572      00000000 
+ 41573 9fc6 00000000 		.quad	.LBE2281
+ 41573      00000000 
+ 41574 9fce 02       		.byte	0x2
+ 41575 9fcf 9806     		.value	0x698
+ 41576 9fd1 FA9F0000 		.long	0x9ffa
+ 41577 9fd5 32       		.uleb128 0x32
+ 41578 9fd6 8A0E0000 		.long	0xe8a
+ 41579 9fda 03       		.byte	0x3
+ 41580 9fdb 91       		.byte	0x91
+ 41581 9fdc A078     		.sleb128 -992
+ 41582 9fde 33       		.uleb128 0x33
+ 41583 9fdf 00000000 		.quad	.LBB2282
+ 41583      00000000 
+ 41584 9fe7 00000000 		.quad	.LBE2282
+ 41584      00000000 
+ 41585 9fef 34       		.uleb128 0x34
+ 41586 9ff0 960E0000 		.long	0xe96
+ 41587 9ff4 03       		.byte	0x3
+ 41588 9ff5 91       		.byte	0x91
+ 41589 9ff6 8050     		.sleb128 -6144
+ 41590 9ff8 00       		.byte	0x0
+ 41591 9ff9 00       		.byte	0x0
+ 41592 9ffa 33       		.uleb128 0x33
+ 41593 9ffb 00000000 		.quad	.LBB2283
+ 41593      00000000 
+ 41594 a003 00000000 		.quad	.LBE2283
+ 41594      00000000 
+ 41595 a00b 34       		.uleb128 0x34
+ 41596 a00c 440C0000 		.long	0xc44
+ 41597 a010 03       		.byte	0x3
+ 41598 a011 91       		.byte	0x91
+ 41599 a012 A04E     		.sleb128 -6368
+ 41600 a014 00       		.byte	0x0
+ 41601 a015 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1083
+
+
+ 41602 a016 00       		.byte	0x0
+ 41603 a017 31       		.uleb128 0x31
+ 41604 a018 A30E0000 		.long	0xea3
+ 41605 a01c 00000000 		.quad	.LBB2284
+ 41605      00000000 
+ 41606 a024 00000000 		.quad	.LBE2284
+ 41606      00000000 
+ 41607 a02c 02       		.byte	0x2
+ 41608 a02d 9007     		.value	0x790
+ 41609 a02f 18A10000 		.long	0xa118
+ 41610 a033 32       		.uleb128 0x32
+ 41611 a034 B50E0000 		.long	0xeb5
+ 41612 a038 03       		.byte	0x3
+ 41613 a039 91       		.byte	0x91
+ 41614 a03a B078     		.sleb128 -976
+ 41615 a03c 33       		.uleb128 0x33
+ 41616 a03d 00000000 		.quad	.LBB2285
+ 41616      00000000 
+ 41617 a045 00000000 		.quad	.LBE2285
+ 41617      00000000 
+ 41618 a04d 34       		.uleb128 0x34
+ 41619 a04e C10E0000 		.long	0xec1
+ 41620 a052 04       		.byte	0x4
+ 41621 a053 76       		.byte	0x76
+ 41622 a054 F0BE7F   		.sleb128 -8336
+ 41623 a057 31       		.uleb128 0x31
+ 41624 a058 CE0E0000 		.long	0xece
+ 41625 a05c 00000000 		.quad	.LBB2286
+ 41625      00000000 
+ 41626 a064 00000000 		.quad	.LBE2286
+ 41626      00000000 
+ 41627 a06c 02       		.byte	0x2
+ 41628 a06d 1F06     		.value	0x61f
+ 41629 a06f 98A00000 		.long	0xa098
+ 41630 a073 32       		.uleb128 0x32
+ 41631 a074 E00E0000 		.long	0xee0
+ 41632 a078 03       		.byte	0x3
+ 41633 a079 91       		.byte	0x91
+ 41634 a07a C078     		.sleb128 -960
+ 41635 a07c 33       		.uleb128 0x33
+ 41636 a07d 00000000 		.quad	.LBB2287
+ 41636      00000000 
+ 41637 a085 00000000 		.quad	.LBE2287
+ 41637      00000000 
+ 41638 a08d 34       		.uleb128 0x34
+ 41639 a08e EC0E0000 		.long	0xeec
+ 41640 a092 03       		.byte	0x3
+ 41641 a093 91       		.byte	0x91
+ 41642 a094 9050     		.sleb128 -6128
+ 41643 a096 00       		.byte	0x0
+ 41644 a097 00       		.byte	0x0
+ 41645 a098 31       		.uleb128 0x31
+ 41646 a099 CE0E0000 		.long	0xece
+ 41647 a09d 00000000 		.quad	.LBB2288
+ 41647      00000000 
+ 41648 a0a5 00000000 		.quad	.LBE2288
+ 41648      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1084
+
+
+ 41649 a0ad 02       		.byte	0x2
+ 41650 a0ae 2006     		.value	0x620
+ 41651 a0b0 D9A00000 		.long	0xa0d9
+ 41652 a0b4 32       		.uleb128 0x32
+ 41653 a0b5 E00E0000 		.long	0xee0
+ 41654 a0b9 03       		.byte	0x3
+ 41655 a0ba 91       		.byte	0x91
+ 41656 a0bb D078     		.sleb128 -944
+ 41657 a0bd 33       		.uleb128 0x33
+ 41658 a0be 00000000 		.quad	.LBB2289
+ 41658      00000000 
+ 41659 a0c6 00000000 		.quad	.LBE2289
+ 41659      00000000 
+ 41660 a0ce 34       		.uleb128 0x34
+ 41661 a0cf EC0E0000 		.long	0xeec
+ 41662 a0d3 03       		.byte	0x3
+ 41663 a0d4 91       		.byte	0x91
+ 41664 a0d5 A050     		.sleb128 -6112
+ 41665 a0d7 00       		.byte	0x0
+ 41666 a0d8 00       		.byte	0x0
+ 41667 a0d9 35       		.uleb128 0x35
+ 41668 a0da CE0E0000 		.long	0xece
+ 41669 a0de 00000000 		.quad	.LBB2290
+ 41669      00000000 
+ 41670 a0e6 00000000 		.quad	.LBE2290
+ 41670      00000000 
+ 41671 a0ee 02       		.byte	0x2
+ 41672 a0ef 2106     		.value	0x621
+ 41673 a0f1 32       		.uleb128 0x32
+ 41674 a0f2 E00E0000 		.long	0xee0
+ 41675 a0f6 03       		.byte	0x3
+ 41676 a0f7 91       		.byte	0x91
+ 41677 a0f8 E078     		.sleb128 -928
+ 41678 a0fa 33       		.uleb128 0x33
+ 41679 a0fb 00000000 		.quad	.LBB2291
+ 41679      00000000 
+ 41680 a103 00000000 		.quad	.LBE2291
+ 41680      00000000 
+ 41681 a10b 34       		.uleb128 0x34
+ 41682 a10c EC0E0000 		.long	0xeec
+ 41683 a110 03       		.byte	0x3
+ 41684 a111 91       		.byte	0x91
+ 41685 a112 B050     		.sleb128 -6096
+ 41686 a114 00       		.byte	0x0
+ 41687 a115 00       		.byte	0x0
+ 41688 a116 00       		.byte	0x0
+ 41689 a117 00       		.byte	0x0
+ 41690 a118 31       		.uleb128 0x31
+ 41691 a119 520E0000 		.long	0xe52
+ 41692 a11d 00000000 		.quad	.LBB2292
+ 41692      00000000 
+ 41693 a125 00000000 		.quad	.LBE2292
+ 41693      00000000 
+ 41694 a12d 02       		.byte	0x2
+ 41695 a12e 9007     		.value	0x790
+ 41696 a130 47A10000 		.long	0xa147
+ 41697 a134 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1085
+
+
+ 41698 a135 6D0E0000 		.long	0xe6d
+ 41699 a139 03       		.byte	0x3
+ 41700 a13a 91       		.byte	0x91
+ 41701 a13b F078     		.sleb128 -912
+ 41702 a13d 32       		.uleb128 0x32
+ 41703 a13e 630E0000 		.long	0xe63
+ 41704 a142 03       		.byte	0x3
+ 41705 a143 91       		.byte	0x91
+ 41706 a144 8079     		.sleb128 -896
+ 41707 a146 00       		.byte	0x0
+ 41708 a147 31       		.uleb128 0x31
+ 41709 a148 4E740000 		.long	0x744e
+ 41710 a14c 00000000 		.quad	.LBB2294
+ 41710      00000000 
+ 41711 a154 00000000 		.quad	.LBE2294
+ 41711      00000000 
+ 41712 a15c 02       		.byte	0x2
+ 41713 a15d 9107     		.value	0x791
+ 41714 a15f D7A10000 		.long	0xa1d7
+ 41715 a163 32       		.uleb128 0x32
+ 41716 a164 60740000 		.long	0x7460
+ 41717 a168 03       		.byte	0x3
+ 41718 a169 91       		.byte	0x91
+ 41719 a16a 9079     		.sleb128 -880
+ 41720 a16c 33       		.uleb128 0x33
+ 41721 a16d 00000000 		.quad	.LBB2295
+ 41721      00000000 
+ 41722 a175 00000000 		.quad	.LBE2295
+ 41722      00000000 
+ 41723 a17d 34       		.uleb128 0x34
+ 41724 a17e 6C740000 		.long	0x746c
+ 41725 a182 03       		.byte	0x3
+ 41726 a183 91       		.byte	0x91
+ 41727 a184 D050     		.sleb128 -6064
+ 41728 a186 34       		.uleb128 0x34
+ 41729 a187 76740000 		.long	0x7476
+ 41730 a18b 03       		.byte	0x3
+ 41731 a18c 91       		.byte	0x91
+ 41732 a18d A479     		.sleb128 -860
+ 41733 a18f 35       		.uleb128 0x35
+ 41734 a190 12490000 		.long	0x4912
+ 41735 a194 00000000 		.quad	.LBB2296
+ 41735      00000000 
+ 41736 a19c 00000000 		.quad	.LBE2296
+ 41736      00000000 
+ 41737 a1a4 02       		.byte	0x2
+ 41738 a1a5 7906     		.value	0x679
+ 41739 a1a7 32       		.uleb128 0x32
+ 41740 a1a8 24490000 		.long	0x4924
+ 41741 a1ac 03       		.byte	0x3
+ 41742 a1ad 91       		.byte	0x91
+ 41743 a1ae A879     		.sleb128 -856
+ 41744 a1b0 33       		.uleb128 0x33
+ 41745 a1b1 00000000 		.quad	.LBB2297
+ 41745      00000000 
+ 41746 a1b9 00000000 		.quad	.LBE2297
+ 41746      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1086
+
+
+ 41747 a1c1 34       		.uleb128 0x34
+ 41748 a1c2 2E490000 		.long	0x492e
+ 41749 a1c6 03       		.byte	0x3
+ 41750 a1c7 91       		.byte	0x91
+ 41751 a1c8 C050     		.sleb128 -6080
+ 41752 a1ca 34       		.uleb128 0x34
+ 41753 a1cb 3A490000 		.long	0x493a
+ 41754 a1cf 03       		.byte	0x3
+ 41755 a1d0 91       		.byte	0x91
+ 41756 a1d1 AC79     		.sleb128 -852
+ 41757 a1d3 00       		.byte	0x0
+ 41758 a1d4 00       		.byte	0x0
+ 41759 a1d5 00       		.byte	0x0
+ 41760 a1d6 00       		.byte	0x0
+ 41761 a1d7 31       		.uleb128 0x31
+ 41762 a1d8 A30E0000 		.long	0xea3
+ 41763 a1dc 00000000 		.quad	.LBB2298
+ 41763      00000000 
+ 41764 a1e4 00000000 		.quad	.LBE2298
+ 41764      00000000 
+ 41765 a1ec 02       		.byte	0x2
+ 41766 a1ed 9107     		.value	0x791
+ 41767 a1ef D8A20000 		.long	0xa2d8
+ 41768 a1f3 32       		.uleb128 0x32
+ 41769 a1f4 B50E0000 		.long	0xeb5
+ 41770 a1f8 03       		.byte	0x3
+ 41771 a1f9 91       		.byte	0x91
+ 41772 a1fa B079     		.sleb128 -848
+ 41773 a1fc 33       		.uleb128 0x33
+ 41774 a1fd 00000000 		.quad	.LBB2299
+ 41774      00000000 
+ 41775 a205 00000000 		.quad	.LBE2299
+ 41775      00000000 
+ 41776 a20d 34       		.uleb128 0x34
+ 41777 a20e C10E0000 		.long	0xec1
+ 41778 a212 04       		.byte	0x4
+ 41779 a213 76       		.byte	0x76
+ 41780 a214 80BF7F   		.sleb128 -8320
+ 41781 a217 31       		.uleb128 0x31
+ 41782 a218 CE0E0000 		.long	0xece
+ 41783 a21c 00000000 		.quad	.LBB2300
+ 41783      00000000 
+ 41784 a224 00000000 		.quad	.LBE2300
+ 41784      00000000 
+ 41785 a22c 02       		.byte	0x2
+ 41786 a22d 1F06     		.value	0x61f
+ 41787 a22f 58A20000 		.long	0xa258
+ 41788 a233 32       		.uleb128 0x32
+ 41789 a234 E00E0000 		.long	0xee0
+ 41790 a238 03       		.byte	0x3
+ 41791 a239 91       		.byte	0x91
+ 41792 a23a C079     		.sleb128 -832
+ 41793 a23c 33       		.uleb128 0x33
+ 41794 a23d 00000000 		.quad	.LBB2301
+ 41794      00000000 
+ 41795 a245 00000000 		.quad	.LBE2301
+ 41795      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1087
+
+
+ 41796 a24d 34       		.uleb128 0x34
+ 41797 a24e EC0E0000 		.long	0xeec
+ 41798 a252 03       		.byte	0x3
+ 41799 a253 91       		.byte	0x91
+ 41800 a254 E050     		.sleb128 -6048
+ 41801 a256 00       		.byte	0x0
+ 41802 a257 00       		.byte	0x0
+ 41803 a258 31       		.uleb128 0x31
+ 41804 a259 CE0E0000 		.long	0xece
+ 41805 a25d 00000000 		.quad	.LBB2302
+ 41805      00000000 
+ 41806 a265 00000000 		.quad	.LBE2302
+ 41806      00000000 
+ 41807 a26d 02       		.byte	0x2
+ 41808 a26e 2006     		.value	0x620
+ 41809 a270 99A20000 		.long	0xa299
+ 41810 a274 32       		.uleb128 0x32
+ 41811 a275 E00E0000 		.long	0xee0
+ 41812 a279 03       		.byte	0x3
+ 41813 a27a 91       		.byte	0x91
+ 41814 a27b D079     		.sleb128 -816
+ 41815 a27d 33       		.uleb128 0x33
+ 41816 a27e 00000000 		.quad	.LBB2303
+ 41816      00000000 
+ 41817 a286 00000000 		.quad	.LBE2303
+ 41817      00000000 
+ 41818 a28e 34       		.uleb128 0x34
+ 41819 a28f EC0E0000 		.long	0xeec
+ 41820 a293 03       		.byte	0x3
+ 41821 a294 91       		.byte	0x91
+ 41822 a295 F050     		.sleb128 -6032
+ 41823 a297 00       		.byte	0x0
+ 41824 a298 00       		.byte	0x0
+ 41825 a299 35       		.uleb128 0x35
+ 41826 a29a CE0E0000 		.long	0xece
+ 41827 a29e 00000000 		.quad	.LBB2304
+ 41827      00000000 
+ 41828 a2a6 00000000 		.quad	.LBE2304
+ 41828      00000000 
+ 41829 a2ae 02       		.byte	0x2
+ 41830 a2af 2106     		.value	0x621
+ 41831 a2b1 32       		.uleb128 0x32
+ 41832 a2b2 E00E0000 		.long	0xee0
+ 41833 a2b6 03       		.byte	0x3
+ 41834 a2b7 91       		.byte	0x91
+ 41835 a2b8 E079     		.sleb128 -800
+ 41836 a2ba 33       		.uleb128 0x33
+ 41837 a2bb 00000000 		.quad	.LBB2305
+ 41837      00000000 
+ 41838 a2c3 00000000 		.quad	.LBE2305
+ 41838      00000000 
+ 41839 a2cb 34       		.uleb128 0x34
+ 41840 a2cc EC0E0000 		.long	0xeec
+ 41841 a2d0 03       		.byte	0x3
+ 41842 a2d1 91       		.byte	0x91
+ 41843 a2d2 8051     		.sleb128 -6016
+ 41844 a2d4 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1088
+
+
+ 41845 a2d5 00       		.byte	0x0
+ 41846 a2d6 00       		.byte	0x0
+ 41847 a2d7 00       		.byte	0x0
+ 41848 a2d8 31       		.uleb128 0x31
+ 41849 a2d9 520E0000 		.long	0xe52
+ 41850 a2dd 00000000 		.quad	.LBB2306
+ 41850      00000000 
+ 41851 a2e5 00000000 		.quad	.LBE2306
+ 41851      00000000 
+ 41852 a2ed 02       		.byte	0x2
+ 41853 a2ee 9107     		.value	0x791
+ 41854 a2f0 07A30000 		.long	0xa307
+ 41855 a2f4 32       		.uleb128 0x32
+ 41856 a2f5 6D0E0000 		.long	0xe6d
+ 41857 a2f9 03       		.byte	0x3
+ 41858 a2fa 91       		.byte	0x91
+ 41859 a2fb F079     		.sleb128 -784
+ 41860 a2fd 32       		.uleb128 0x32
+ 41861 a2fe 630E0000 		.long	0xe63
+ 41862 a302 03       		.byte	0x3
+ 41863 a303 91       		.byte	0x91
+ 41864 a304 807A     		.sleb128 -768
+ 41865 a306 00       		.byte	0x0
+ 41866 a307 31       		.uleb128 0x31
+ 41867 a308 D10B0000 		.long	0xbd1
+ 41868 a30c 00000000 		.quad	.LBB2308
+ 41868      00000000 
+ 41869 a314 00000000 		.quad	.LBE2308
+ 41869      00000000 
+ 41870 a31c 02       		.byte	0x2
+ 41871 a31d 9207     		.value	0x792
+ 41872 a31f AFA70000 		.long	0xa7af
+ 41873 a323 32       		.uleb128 0x32
+ 41874 a324 EF0B0000 		.long	0xbef
+ 41875 a328 03       		.byte	0x3
+ 41876 a329 91       		.byte	0x91
+ 41877 a32a 9C7A     		.sleb128 -740
+ 41878 a32c 32       		.uleb128 0x32
+ 41879 a32d E30B0000 		.long	0xbe3
+ 41880 a331 03       		.byte	0x3
+ 41881 a332 91       		.byte	0x91
+ 41882 a333 A07A     		.sleb128 -736
+ 41883 a335 33       		.uleb128 0x33
+ 41884 a336 00000000 		.quad	.LBB2309
+ 41884      00000000 
+ 41885 a33e 00000000 		.quad	.LBE2309
+ 41885      00000000 
+ 41886 a346 34       		.uleb128 0x34
+ 41887 a347 FB0B0000 		.long	0xbfb
+ 41888 a34b 04       		.byte	0x4
+ 41889 a34c 76       		.byte	0x76
+ 41890 a34d A0BF7F   		.sleb128 -8288
+ 41891 a350 34       		.uleb128 0x34
+ 41892 a351 070C0000 		.long	0xc07
+ 41893 a355 04       		.byte	0x4
+ 41894 a356 76       		.byte	0x76
+ 41895 a357 90BF7F   		.sleb128 -8304
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1089
+
+
+ 41896 a35a 31       		.uleb128 0x31
+ 41897 a35b 500C0000 		.long	0xc50
+ 41898 a35f 00000000 		.quad	.LBB2310
+ 41898      00000000 
+ 41899 a367 00000000 		.quad	.LBE2310
+ 41899      00000000 
+ 41900 a36f 02       		.byte	0x2
+ 41901 a370 9106     		.value	0x691
+ 41902 a372 ADA30000 		.long	0xa3ad
+ 41903 a376 32       		.uleb128 0x32
+ 41904 a377 7A0C0000 		.long	0xc7a
+ 41905 a37b 03       		.byte	0x3
+ 41906 a37c 91       		.byte	0x91
+ 41907 a37d B87A     		.sleb128 -712
+ 41908 a37f 32       		.uleb128 0x32
+ 41909 a380 6E0C0000 		.long	0xc6e
+ 41910 a384 03       		.byte	0x3
+ 41911 a385 91       		.byte	0x91
+ 41912 a386 BC7A     		.sleb128 -708
+ 41913 a388 32       		.uleb128 0x32
+ 41914 a389 620C0000 		.long	0xc62
+ 41915 a38d 03       		.byte	0x3
+ 41916 a38e 91       		.byte	0x91
+ 41917 a38f C07A     		.sleb128 -704
+ 41918 a391 33       		.uleb128 0x33
+ 41919 a392 00000000 		.quad	.LBB2311
+ 41919      00000000 
+ 41920 a39a 00000000 		.quad	.LBE2311
+ 41920      00000000 
+ 41921 a3a2 34       		.uleb128 0x34
+ 41922 a3a3 860C0000 		.long	0xc86
+ 41923 a3a7 03       		.byte	0x3
+ 41924 a3a8 91       		.byte	0x91
+ 41925 a3a9 D051     		.sleb128 -5936
+ 41926 a3ab 00       		.byte	0x0
+ 41927 a3ac 00       		.byte	0x0
+ 41928 a3ad 31       		.uleb128 0x31
+ 41929 a3ae 910C0000 		.long	0xc91
+ 41930 a3b2 00000000 		.quad	.LBB2312
+ 41930      00000000 
+ 41931 a3ba 00000000 		.quad	.LBE2312
+ 41931      00000000 
+ 41932 a3c2 02       		.byte	0x2
+ 41933 a3c3 9206     		.value	0x692
+ 41934 a3c5 1DA60000 		.long	0xa61d
+ 41935 a3c9 32       		.uleb128 0x32
+ 41936 a3ca A30C0000 		.long	0xca3
+ 41937 a3ce 03       		.byte	0x3
+ 41938 a3cf 91       		.byte	0x91
+ 41939 a3d0 D07A     		.sleb128 -688
+ 41940 a3d2 35       		.uleb128 0x35
+ 41941 a3d3 B00C0000 		.long	0xcb0
+ 41942 a3d7 00000000 		.quad	.LBB2314
+ 41942      00000000 
+ 41943 a3df 00000000 		.quad	.LBE2314
+ 41943      00000000 
+ 41944 a3e7 02       		.byte	0x2
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1090
+
+
+ 41945 a3e8 7D03     		.value	0x37d
+ 41946 a3ea 32       		.uleb128 0x32
+ 41947 a3eb CE0C0000 		.long	0xcce
+ 41948 a3ef 03       		.byte	0x3
+ 41949 a3f0 91       		.byte	0x91
+ 41950 a3f1 E87A     		.sleb128 -664
+ 41951 a3f3 32       		.uleb128 0x32
+ 41952 a3f4 C20C0000 		.long	0xcc2
+ 41953 a3f8 03       		.byte	0x3
+ 41954 a3f9 91       		.byte	0x91
+ 41955 a3fa F07A     		.sleb128 -656
+ 41956 a3fc 33       		.uleb128 0x33
+ 41957 a3fd 00000000 		.quad	.LBB2315
+ 41957      00000000 
+ 41958 a405 00000000 		.quad	.LBE2315
+ 41958      00000000 
+ 41959 a40d 34       		.uleb128 0x34
+ 41960 a40e DA0C0000 		.long	0xcda
+ 41961 a412 03       		.byte	0x3
+ 41962 a413 91       		.byte	0x91
+ 41963 a414 C07B     		.sleb128 -576
+ 41964 a416 34       		.uleb128 0x34
+ 41965 a417 E50C0000 		.long	0xce5
+ 41966 a41b 03       		.byte	0x3
+ 41967 a41c 91       		.byte	0x91
+ 41968 a41d B07B     		.sleb128 -592
+ 41969 a41f 34       		.uleb128 0x34
+ 41970 a420 F00C0000 		.long	0xcf0
+ 41971 a424 03       		.byte	0x3
+ 41972 a425 91       		.byte	0x91
+ 41973 a426 A07B     		.sleb128 -608
+ 41974 a428 34       		.uleb128 0x34
+ 41975 a429 FC0C0000 		.long	0xcfc
+ 41976 a42d 03       		.byte	0x3
+ 41977 a42e 91       		.byte	0x91
+ 41978 a42f 907B     		.sleb128 -624
+ 41979 a431 34       		.uleb128 0x34
+ 41980 a432 080D0000 		.long	0xd08
+ 41981 a436 03       		.byte	0x3
+ 41982 a437 91       		.byte	0x91
+ 41983 a438 8C7B     		.sleb128 -628
+ 41984 a43a 31       		.uleb128 0x31
+ 41985 a43b 1F0D0000 		.long	0xd1f
+ 41986 a43f 00000000 		.quad	.LBB2316
+ 41986      00000000 
+ 41987 a447 00000000 		.quad	.LBE2316
+ 41987      00000000 
+ 41988 a44f 02       		.byte	0x2
+ 41989 a450 5603     		.value	0x356
+ 41990 a452 69A40000 		.long	0xa469
+ 41991 a456 32       		.uleb128 0x32
+ 41992 a457 3A0D0000 		.long	0xd3a
+ 41993 a45b 03       		.byte	0x3
+ 41994 a45c 91       		.byte	0x91
+ 41995 a45d D07B     		.sleb128 -560
+ 41996 a45f 32       		.uleb128 0x32
+ 41997 a460 300D0000 		.long	0xd30
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1091
+
+
+ 41998 a464 03       		.byte	0x3
+ 41999 a465 91       		.byte	0x91
+ 42000 a466 E07B     		.sleb128 -544
+ 42001 a468 00       		.byte	0x0
+ 42002 a469 31       		.uleb128 0x31
+ 42003 a46a 450D0000 		.long	0xd45
+ 42004 a46e 00000000 		.quad	.LBB2318
+ 42004      00000000 
+ 42005 a476 00000000 		.quad	.LBE2318
+ 42005      00000000 
+ 42006 a47e 02       		.byte	0x2
+ 42007 a47f 5E03     		.value	0x35e
+ 42008 a481 98A40000 		.long	0xa498
+ 42009 a485 32       		.uleb128 0x32
+ 42010 a486 620D0000 		.long	0xd62
+ 42011 a48a 03       		.byte	0x3
+ 42012 a48b 91       		.byte	0x91
+ 42013 a48c F07B     		.sleb128 -528
+ 42014 a48e 32       		.uleb128 0x32
+ 42015 a48f 570D0000 		.long	0xd57
+ 42016 a493 03       		.byte	0x3
+ 42017 a494 91       		.byte	0x91
+ 42018 a495 807C     		.sleb128 -512
+ 42019 a497 00       		.byte	0x0
+ 42020 a498 31       		.uleb128 0x31
+ 42021 a499 6E0D0000 		.long	0xd6e
+ 42022 a49d 00000000 		.quad	.LBB2320
+ 42022      00000000 
+ 42023 a4a5 00000000 		.quad	.LBE2320
+ 42023      00000000 
+ 42024 a4ad 02       		.byte	0x2
+ 42025 a4ae 6403     		.value	0x364
+ 42026 a4b0 FDA40000 		.long	0xa4fd
+ 42027 a4b4 32       		.uleb128 0x32
+ 42028 a4b5 8C0D0000 		.long	0xd8c
+ 42029 a4b9 03       		.byte	0x3
+ 42030 a4ba 91       		.byte	0x91
+ 42031 a4bb 907C     		.sleb128 -496
+ 42032 a4bd 32       		.uleb128 0x32
+ 42033 a4be 800D0000 		.long	0xd80
+ 42034 a4c2 03       		.byte	0x3
+ 42035 a4c3 91       		.byte	0x91
+ 42036 a4c4 A07C     		.sleb128 -480
+ 42037 a4c6 33       		.uleb128 0x33
+ 42038 a4c7 00000000 		.quad	.LBB2321
+ 42038      00000000 
+ 42039 a4cf 00000000 		.quad	.LBE2321
+ 42039      00000000 
+ 42040 a4d7 34       		.uleb128 0x34
+ 42041 a4d8 980D0000 		.long	0xd98
+ 42042 a4dc 03       		.byte	0x3
+ 42043 a4dd 91       		.byte	0x91
+ 42044 a4de 8052     		.sleb128 -5888
+ 42045 a4e0 34       		.uleb128 0x34
+ 42046 a4e1 A40D0000 		.long	0xda4
+ 42047 a4e5 03       		.byte	0x3
+ 42048 a4e6 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1092
+
+
+ 42049 a4e7 F051     		.sleb128 -5904
+ 42050 a4e9 34       		.uleb128 0x34
+ 42051 a4ea AF0D0000 		.long	0xdaf
+ 42052 a4ee 03       		.byte	0x3
+ 42053 a4ef 91       		.byte	0x91
+ 42054 a4f0 E051     		.sleb128 -5920
+ 42055 a4f2 34       		.uleb128 0x34
+ 42056 a4f3 BB0D0000 		.long	0xdbb
+ 42057 a4f7 03       		.byte	0x3
+ 42058 a4f8 91       		.byte	0x91
+ 42059 a4f9 BC7C     		.sleb128 -452
+ 42060 a4fb 00       		.byte	0x0
+ 42061 a4fc 00       		.byte	0x0
+ 42062 a4fd 31       		.uleb128 0x31
+ 42063 a4fe C70D0000 		.long	0xdc7
+ 42064 a502 00000000 		.quad	.LBB2322
+ 42064      00000000 
+ 42065 a50a 00000000 		.quad	.LBE2322
+ 42065      00000000 
+ 42066 a512 02       		.byte	0x2
+ 42067 a513 6603     		.value	0x366
+ 42068 a515 2CA50000 		.long	0xa52c
+ 42069 a519 32       		.uleb128 0x32
+ 42070 a51a E20D0000 		.long	0xde2
+ 42071 a51e 03       		.byte	0x3
+ 42072 a51f 91       		.byte	0x91
+ 42073 a520 C07C     		.sleb128 -448
+ 42074 a522 32       		.uleb128 0x32
+ 42075 a523 D80D0000 		.long	0xdd8
+ 42076 a527 03       		.byte	0x3
+ 42077 a528 91       		.byte	0x91
+ 42078 a529 D07C     		.sleb128 -432
+ 42079 a52b 00       		.byte	0x0
+ 42080 a52c 31       		.uleb128 0x31
+ 42081 a52d 6E0D0000 		.long	0xd6e
+ 42082 a531 00000000 		.quad	.LBB2324
+ 42082      00000000 
+ 42083 a539 00000000 		.quad	.LBE2324
+ 42083      00000000 
+ 42084 a541 02       		.byte	0x2
+ 42085 a542 6803     		.value	0x368
+ 42086 a544 91A50000 		.long	0xa591
+ 42087 a548 32       		.uleb128 0x32
+ 42088 a549 8C0D0000 		.long	0xd8c
+ 42089 a54d 03       		.byte	0x3
+ 42090 a54e 91       		.byte	0x91
+ 42091 a54f E07C     		.sleb128 -416
+ 42092 a551 32       		.uleb128 0x32
+ 42093 a552 800D0000 		.long	0xd80
+ 42094 a556 03       		.byte	0x3
+ 42095 a557 91       		.byte	0x91
+ 42096 a558 F07C     		.sleb128 -400
+ 42097 a55a 33       		.uleb128 0x33
+ 42098 a55b 00000000 		.quad	.LBB2325
+ 42098      00000000 
+ 42099 a563 00000000 		.quad	.LBE2325
+ 42099      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1093
+
+
+ 42100 a56b 34       		.uleb128 0x34
+ 42101 a56c 980D0000 		.long	0xd98
+ 42102 a570 03       		.byte	0x3
+ 42103 a571 91       		.byte	0x91
+ 42104 a572 B052     		.sleb128 -5840
+ 42105 a574 34       		.uleb128 0x34
+ 42106 a575 A40D0000 		.long	0xda4
+ 42107 a579 03       		.byte	0x3
+ 42108 a57a 91       		.byte	0x91
+ 42109 a57b A052     		.sleb128 -5856
+ 42110 a57d 34       		.uleb128 0x34
+ 42111 a57e AF0D0000 		.long	0xdaf
+ 42112 a582 03       		.byte	0x3
+ 42113 a583 91       		.byte	0x91
+ 42114 a584 9052     		.sleb128 -5872
+ 42115 a586 34       		.uleb128 0x34
+ 42116 a587 BB0D0000 		.long	0xdbb
+ 42117 a58b 03       		.byte	0x3
+ 42118 a58c 91       		.byte	0x91
+ 42119 a58d 8C7D     		.sleb128 -372
+ 42120 a58f 00       		.byte	0x0
+ 42121 a590 00       		.byte	0x0
+ 42122 a591 31       		.uleb128 0x31
+ 42123 a592 C70D0000 		.long	0xdc7
+ 42124 a596 00000000 		.quad	.LBB2326
+ 42124      00000000 
+ 42125 a59e 00000000 		.quad	.LBE2326
+ 42125      00000000 
+ 42126 a5a6 02       		.byte	0x2
+ 42127 a5a7 6A03     		.value	0x36a
+ 42128 a5a9 C0A50000 		.long	0xa5c0
+ 42129 a5ad 32       		.uleb128 0x32
+ 42130 a5ae E20D0000 		.long	0xde2
+ 42131 a5b2 03       		.byte	0x3
+ 42132 a5b3 91       		.byte	0x91
+ 42133 a5b4 907D     		.sleb128 -368
+ 42134 a5b6 32       		.uleb128 0x32
+ 42135 a5b7 D80D0000 		.long	0xdd8
+ 42136 a5bb 03       		.byte	0x3
+ 42137 a5bc 91       		.byte	0x91
+ 42138 a5bd A07D     		.sleb128 -352
+ 42139 a5bf 00       		.byte	0x0
+ 42140 a5c0 31       		.uleb128 0x31
+ 42141 a5c1 ED0D0000 		.long	0xded
+ 42142 a5c5 00000000 		.quad	.LBB2328
+ 42142      00000000 
+ 42143 a5cd 00000000 		.quad	.LBE2328
+ 42143      00000000 
+ 42144 a5d5 02       		.byte	0x2
+ 42145 a5d6 6C03     		.value	0x36c
+ 42146 a5d8 EFA50000 		.long	0xa5ef
+ 42147 a5dc 32       		.uleb128 0x32
+ 42148 a5dd 0A0E0000 		.long	0xe0a
+ 42149 a5e1 03       		.byte	0x3
+ 42150 a5e2 91       		.byte	0x91
+ 42151 a5e3 B07D     		.sleb128 -336
+ 42152 a5e5 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1094
+
+
+ 42153 a5e6 FF0D0000 		.long	0xdff
+ 42154 a5ea 03       		.byte	0x3
+ 42155 a5eb 91       		.byte	0x91
+ 42156 a5ec C07D     		.sleb128 -320
+ 42157 a5ee 00       		.byte	0x0
+ 42158 a5ef 35       		.uleb128 0x35
+ 42159 a5f0 1F0D0000 		.long	0xd1f
+ 42160 a5f4 00000000 		.quad	.LBB2330
+ 42160      00000000 
+ 42161 a5fc 00000000 		.quad	.LBE2330
+ 42161      00000000 
+ 42162 a604 02       		.byte	0x2
+ 42163 a605 6E03     		.value	0x36e
+ 42164 a607 32       		.uleb128 0x32
+ 42165 a608 3A0D0000 		.long	0xd3a
+ 42166 a60c 03       		.byte	0x3
+ 42167 a60d 91       		.byte	0x91
+ 42168 a60e D07D     		.sleb128 -304
+ 42169 a610 32       		.uleb128 0x32
+ 42170 a611 300D0000 		.long	0xd30
+ 42171 a615 03       		.byte	0x3
+ 42172 a616 91       		.byte	0x91
+ 42173 a617 E07D     		.sleb128 -288
+ 42174 a619 00       		.byte	0x0
+ 42175 a61a 00       		.byte	0x0
+ 42176 a61b 00       		.byte	0x0
+ 42177 a61c 00       		.byte	0x0
+ 42178 a61d 36       		.uleb128 0x36
+ 42179 a61e 00000000 		.quad	.LBB2332
+ 42179      00000000 
+ 42180 a626 00000000 		.quad	.LBE2332
+ 42180      00000000 
+ 42181 a62e 3CA60000 		.long	0xa63c
+ 42182 a632 34       		.uleb128 0x34
+ 42183 a633 180C0000 		.long	0xc18
+ 42184 a637 03       		.byte	0x3
+ 42185 a638 91       		.byte	0x91
+ 42186 a639 C051     		.sleb128 -5952
+ 42187 a63b 00       		.byte	0x0
+ 42188 a63c 31       		.uleb128 0x31
+ 42189 a63d 160E0000 		.long	0xe16
+ 42190 a641 00000000 		.quad	.LBB2333
+ 42190      00000000 
+ 42191 a649 00000000 		.quad	.LBE2333
+ 42191      00000000 
+ 42192 a651 02       		.byte	0x2
+ 42193 a652 9406     		.value	0x694
+ 42194 a654 E4A60000 		.long	0xa6e4
+ 42195 a658 32       		.uleb128 0x32
+ 42196 a659 280E0000 		.long	0xe28
+ 42197 a65d 03       		.byte	0x3
+ 42198 a65e 91       		.byte	0x91
+ 42199 a65f F07D     		.sleb128 -272
+ 42200 a661 33       		.uleb128 0x33
+ 42201 a662 00000000 		.quad	.LBB2334
+ 42201      00000000 
+ 42202 a66a 00000000 		.quad	.LBE2334
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1095
+
+
+ 42202      00000000 
+ 42203 a672 34       		.uleb128 0x34
+ 42204 a673 340E0000 		.long	0xe34
+ 42205 a677 09       		.byte	0x9
+ 42206 a678 03       		.byte	0x3
+ 42207 a679 00000000 		.quad	ShiftRowTable.6768
+ 42207      00000000 
+ 42208 a681 35       		.uleb128 0x35
+ 42209 a682 6E0D0000 		.long	0xd6e
+ 42210 a686 00000000 		.quad	.LBB2335
+ 42210      00000000 
+ 42211 a68e 00000000 		.quad	.LBE2335
+ 42211      00000000 
+ 42212 a696 02       		.byte	0x2
+ 42213 a697 9B02     		.value	0x29b
+ 42214 a699 32       		.uleb128 0x32
+ 42215 a69a 8C0D0000 		.long	0xd8c
+ 42216 a69e 03       		.byte	0x3
+ 42217 a69f 91       		.byte	0x91
+ 42218 a6a0 807E     		.sleb128 -256
+ 42219 a6a2 32       		.uleb128 0x32
+ 42220 a6a3 800D0000 		.long	0xd80
+ 42221 a6a7 03       		.byte	0x3
+ 42222 a6a8 91       		.byte	0x91
+ 42223 a6a9 907E     		.sleb128 -240
+ 42224 a6ab 33       		.uleb128 0x33
+ 42225 a6ac 00000000 		.quad	.LBB2336
+ 42225      00000000 
+ 42226 a6b4 00000000 		.quad	.LBE2336
+ 42226      00000000 
+ 42227 a6bc 34       		.uleb128 0x34
+ 42228 a6bd 980D0000 		.long	0xd98
+ 42229 a6c1 03       		.byte	0x3
+ 42230 a6c2 91       		.byte	0x91
+ 42231 a6c3 E052     		.sleb128 -5792
+ 42232 a6c5 34       		.uleb128 0x34
+ 42233 a6c6 A40D0000 		.long	0xda4
+ 42234 a6ca 03       		.byte	0x3
+ 42235 a6cb 91       		.byte	0x91
+ 42236 a6cc D052     		.sleb128 -5808
+ 42237 a6ce 34       		.uleb128 0x34
+ 42238 a6cf AF0D0000 		.long	0xdaf
+ 42239 a6d3 03       		.byte	0x3
+ 42240 a6d4 91       		.byte	0x91
+ 42241 a6d5 C052     		.sleb128 -5824
+ 42242 a6d7 34       		.uleb128 0x34
+ 42243 a6d8 BB0D0000 		.long	0xdbb
+ 42244 a6dc 03       		.byte	0x3
+ 42245 a6dd 91       		.byte	0x91
+ 42246 a6de AC7E     		.sleb128 -212
+ 42247 a6e0 00       		.byte	0x0
+ 42248 a6e1 00       		.byte	0x0
+ 42249 a6e2 00       		.byte	0x0
+ 42250 a6e3 00       		.byte	0x0
+ 42251 a6e4 36       		.uleb128 0x36
+ 42252 a6e5 00000000 		.quad	.LBB2337
+ 42252      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1096
+
+
+ 42253 a6ed 00000000 		.quad	.LBE2337
+ 42253      00000000 
+ 42254 a6f5 03A70000 		.long	0xa703
+ 42255 a6f9 34       		.uleb128 0x34
+ 42256 a6fa 280C0000 		.long	0xc28
+ 42257 a6fe 03       		.byte	0x3
+ 42258 a6ff 91       		.byte	0x91
+ 42259 a700 B051     		.sleb128 -5968
+ 42260 a702 00       		.byte	0x0
+ 42261 a703 31       		.uleb128 0x31
+ 42262 a704 520E0000 		.long	0xe52
+ 42263 a708 00000000 		.quad	.LBB2338
+ 42263      00000000 
+ 42264 a710 00000000 		.quad	.LBE2338
+ 42264      00000000 
+ 42265 a718 02       		.byte	0x2
+ 42266 a719 9606     		.value	0x696
+ 42267 a71b 32A70000 		.long	0xa732
+ 42268 a71f 32       		.uleb128 0x32
+ 42269 a720 6D0E0000 		.long	0xe6d
+ 42270 a724 03       		.byte	0x3
+ 42271 a725 91       		.byte	0x91
+ 42272 a726 B07E     		.sleb128 -208
+ 42273 a728 32       		.uleb128 0x32
+ 42274 a729 630E0000 		.long	0xe63
+ 42275 a72d 03       		.byte	0x3
+ 42276 a72e 91       		.byte	0x91
+ 42277 a72f C07E     		.sleb128 -192
+ 42278 a731 00       		.byte	0x0
+ 42279 a732 36       		.uleb128 0x36
+ 42280 a733 00000000 		.quad	.LBB2340
+ 42280      00000000 
+ 42281 a73b 00000000 		.quad	.LBE2340
+ 42281      00000000 
+ 42282 a743 51A70000 		.long	0xa751
+ 42283 a747 34       		.uleb128 0x34
+ 42284 a748 380C0000 		.long	0xc38
+ 42285 a74c 03       		.byte	0x3
+ 42286 a74d 91       		.byte	0x91
+ 42287 a74e A051     		.sleb128 -5984
+ 42288 a750 00       		.byte	0x0
+ 42289 a751 31       		.uleb128 0x31
+ 42290 a752 780E0000 		.long	0xe78
+ 42291 a756 00000000 		.quad	.LBB2341
+ 42291      00000000 
+ 42292 a75e 00000000 		.quad	.LBE2341
+ 42292      00000000 
+ 42293 a766 02       		.byte	0x2
+ 42294 a767 9806     		.value	0x698
+ 42295 a769 92A70000 		.long	0xa792
+ 42296 a76d 32       		.uleb128 0x32
+ 42297 a76e 8A0E0000 		.long	0xe8a
+ 42298 a772 03       		.byte	0x3
+ 42299 a773 91       		.byte	0x91
+ 42300 a774 D07E     		.sleb128 -176
+ 42301 a776 33       		.uleb128 0x33
+ 42302 a777 00000000 		.quad	.LBB2342
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1097
+
+
+ 42302      00000000 
+ 42303 a77f 00000000 		.quad	.LBE2342
+ 42303      00000000 
+ 42304 a787 34       		.uleb128 0x34
+ 42305 a788 960E0000 		.long	0xe96
+ 42306 a78c 03       		.byte	0x3
+ 42307 a78d 91       		.byte	0x91
+ 42308 a78e F052     		.sleb128 -5776
+ 42309 a790 00       		.byte	0x0
+ 42310 a791 00       		.byte	0x0
+ 42311 a792 33       		.uleb128 0x33
+ 42312 a793 00000000 		.quad	.LBB2343
+ 42312      00000000 
+ 42313 a79b 00000000 		.quad	.LBE2343
+ 42313      00000000 
+ 42314 a7a3 34       		.uleb128 0x34
+ 42315 a7a4 440C0000 		.long	0xc44
+ 42316 a7a8 03       		.byte	0x3
+ 42317 a7a9 91       		.byte	0x91
+ 42318 a7aa 9051     		.sleb128 -6000
+ 42319 a7ac 00       		.byte	0x0
+ 42320 a7ad 00       		.byte	0x0
+ 42321 a7ae 00       		.byte	0x0
+ 42322 a7af 31       		.uleb128 0x31
+ 42323 a7b0 A30E0000 		.long	0xea3
+ 42324 a7b4 00000000 		.quad	.LBB2344
+ 42324      00000000 
+ 42325 a7bc 00000000 		.quad	.LBE2344
+ 42325      00000000 
+ 42326 a7c4 02       		.byte	0x2
+ 42327 a7c5 9207     		.value	0x792
+ 42328 a7c7 B0A80000 		.long	0xa8b0
+ 42329 a7cb 32       		.uleb128 0x32
+ 42330 a7cc B50E0000 		.long	0xeb5
+ 42331 a7d0 03       		.byte	0x3
+ 42332 a7d1 91       		.byte	0x91
+ 42333 a7d2 E07E     		.sleb128 -160
+ 42334 a7d4 33       		.uleb128 0x33
+ 42335 a7d5 00000000 		.quad	.LBB2345
+ 42335      00000000 
+ 42336 a7dd 00000000 		.quad	.LBE2345
+ 42336      00000000 
+ 42337 a7e5 34       		.uleb128 0x34
+ 42338 a7e6 C10E0000 		.long	0xec1
+ 42339 a7ea 04       		.byte	0x4
+ 42340 a7eb 76       		.byte	0x76
+ 42341 a7ec C0BF7F   		.sleb128 -8256
+ 42342 a7ef 31       		.uleb128 0x31
+ 42343 a7f0 CE0E0000 		.long	0xece
+ 42344 a7f4 00000000 		.quad	.LBB2346
+ 42344      00000000 
+ 42345 a7fc 00000000 		.quad	.LBE2346
+ 42345      00000000 
+ 42346 a804 02       		.byte	0x2
+ 42347 a805 1F06     		.value	0x61f
+ 42348 a807 30A80000 		.long	0xa830
+ 42349 a80b 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1098
+
+
+ 42350 a80c E00E0000 		.long	0xee0
+ 42351 a810 03       		.byte	0x3
+ 42352 a811 91       		.byte	0x91
+ 42353 a812 F07E     		.sleb128 -144
+ 42354 a814 33       		.uleb128 0x33
+ 42355 a815 00000000 		.quad	.LBB2347
+ 42355      00000000 
+ 42356 a81d 00000000 		.quad	.LBE2347
+ 42356      00000000 
+ 42357 a825 34       		.uleb128 0x34
+ 42358 a826 EC0E0000 		.long	0xeec
+ 42359 a82a 03       		.byte	0x3
+ 42360 a82b 91       		.byte	0x91
+ 42361 a82c 8053     		.sleb128 -5760
+ 42362 a82e 00       		.byte	0x0
+ 42363 a82f 00       		.byte	0x0
+ 42364 a830 31       		.uleb128 0x31
+ 42365 a831 CE0E0000 		.long	0xece
+ 42366 a835 00000000 		.quad	.LBB2348
+ 42366      00000000 
+ 42367 a83d 00000000 		.quad	.LBE2348
+ 42367      00000000 
+ 42368 a845 02       		.byte	0x2
+ 42369 a846 2006     		.value	0x620
+ 42370 a848 71A80000 		.long	0xa871
+ 42371 a84c 32       		.uleb128 0x32
+ 42372 a84d E00E0000 		.long	0xee0
+ 42373 a851 03       		.byte	0x3
+ 42374 a852 91       		.byte	0x91
+ 42375 a853 807F     		.sleb128 -128
+ 42376 a855 33       		.uleb128 0x33
+ 42377 a856 00000000 		.quad	.LBB2349
+ 42377      00000000 
+ 42378 a85e 00000000 		.quad	.LBE2349
+ 42378      00000000 
+ 42379 a866 34       		.uleb128 0x34
+ 42380 a867 EC0E0000 		.long	0xeec
+ 42381 a86b 03       		.byte	0x3
+ 42382 a86c 91       		.byte	0x91
+ 42383 a86d 9053     		.sleb128 -5744
+ 42384 a86f 00       		.byte	0x0
+ 42385 a870 00       		.byte	0x0
+ 42386 a871 35       		.uleb128 0x35
+ 42387 a872 CE0E0000 		.long	0xece
+ 42388 a876 00000000 		.quad	.LBB2350
+ 42388      00000000 
+ 42389 a87e 00000000 		.quad	.LBE2350
+ 42389      00000000 
+ 42390 a886 02       		.byte	0x2
+ 42391 a887 2106     		.value	0x621
+ 42392 a889 32       		.uleb128 0x32
+ 42393 a88a E00E0000 		.long	0xee0
+ 42394 a88e 03       		.byte	0x3
+ 42395 a88f 91       		.byte	0x91
+ 42396 a890 907F     		.sleb128 -112
+ 42397 a892 33       		.uleb128 0x33
+ 42398 a893 00000000 		.quad	.LBB2351
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1099
+
+
+ 42398      00000000 
+ 42399 a89b 00000000 		.quad	.LBE2351
+ 42399      00000000 
+ 42400 a8a3 34       		.uleb128 0x34
+ 42401 a8a4 EC0E0000 		.long	0xeec
+ 42402 a8a8 03       		.byte	0x3
+ 42403 a8a9 91       		.byte	0x91
+ 42404 a8aa A053     		.sleb128 -5728
+ 42405 a8ac 00       		.byte	0x0
+ 42406 a8ad 00       		.byte	0x0
+ 42407 a8ae 00       		.byte	0x0
+ 42408 a8af 00       		.byte	0x0
+ 42409 a8b0 35       		.uleb128 0x35
+ 42410 a8b1 520E0000 		.long	0xe52
+ 42411 a8b5 00000000 		.quad	.LBB2352
+ 42411      00000000 
+ 42412 a8bd 00000000 		.quad	.LBE2352
+ 42412      00000000 
+ 42413 a8c5 02       		.byte	0x2
+ 42414 a8c6 9207     		.value	0x792
+ 42415 a8c8 32       		.uleb128 0x32
+ 42416 a8c9 6D0E0000 		.long	0xe6d
+ 42417 a8cd 03       		.byte	0x3
+ 42418 a8ce 91       		.byte	0x91
+ 42419 a8cf A07F     		.sleb128 -96
+ 42420 a8d1 32       		.uleb128 0x32
+ 42421 a8d2 630E0000 		.long	0xe63
+ 42422 a8d6 03       		.byte	0x3
+ 42423 a8d7 91       		.byte	0x91
+ 42424 a8d8 B07F     		.sleb128 -80
+ 42425 a8da 00       		.byte	0x0
+ 42426 a8db 00       		.byte	0x0
+ 42427 a8dc 25       		.uleb128 0x25
+ 42428 a8dd 00000000 		.long	.LASF355
+ 42429 a8e1 02       		.byte	0x2
+ 42430 a8e2 4B04     		.value	0x44b
+ 42431 a8e4 01       		.byte	0x1
+ 42432 a8e5 B1010000 		.long	0x1b1
+ 42433 a8e9 03       		.byte	0x3
+ 42434 a8ea 6EA90000 		.long	0xa96e
+ 42435 a8ee 26       		.uleb128 0x26
+ 42436 a8ef 00000000 		.long	.LASF66
+ 42437 a8f3 02       		.byte	0x2
+ 42438 a8f4 4B04     		.value	0x44b
+ 42439 a8f6 B1010000 		.long	0x1b1
+ 42440 a8fa 28       		.uleb128 0x28
+ 42441 a8fb 723100   		.string	"r1"
+ 42442 a8fe 02       		.byte	0x2
+ 42443 a8ff 5004     		.value	0x450
+ 42444 a901 B1010000 		.long	0x1b1
+ 42445 a905 28       		.uleb128 0x28
+ 42446 a906 723200   		.string	"r2"
+ 42447 a909 02       		.byte	0x2
+ 42448 a90a 5004     		.value	0x450
+ 42449 a90c B1010000 		.long	0x1b1
+ 42450 a910 28       		.uleb128 0x28
+ 42451 a911 723300   		.string	"r3"
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1100
+
+
+ 42452 a914 02       		.byte	0x2
+ 42453 a915 5004     		.value	0x450
+ 42454 a917 B1010000 		.long	0x1b1
+ 42455 a91b 28       		.uleb128 0x28
+ 42456 a91c 663200   		.string	"f2"
+ 42457 a91f 02       		.byte	0x2
+ 42458 a920 5004     		.value	0x450
+ 42459 a922 B1010000 		.long	0x1b1
+ 42460 a926 28       		.uleb128 0x28
+ 42461 a927 663400   		.string	"f4"
+ 42462 a92a 02       		.byte	0x2
+ 42463 a92b 5004     		.value	0x450
+ 42464 a92d B1010000 		.long	0x1b1
+ 42465 a931 28       		.uleb128 0x28
+ 42466 a932 663800   		.string	"f8"
+ 42467 a935 02       		.byte	0x2
+ 42468 a936 5004     		.value	0x450
+ 42469 a938 B1010000 		.long	0x1b1
+ 42470 a93c 2A       		.uleb128 0x2a
+ 42471 a93d 28       		.uleb128 0x28
+ 42472 a93e 66753200 		.string	"fu2"
+ 42473 a942 02       		.byte	0x2
+ 42474 a943 6304     		.value	0x463
+ 42475 a945 27050000 		.long	0x527
+ 42476 a949 28       		.uleb128 0x28
+ 42477 a94a 66753400 		.string	"fu4"
+ 42478 a94e 02       		.byte	0x2
+ 42479 a94f 6304     		.value	0x463
+ 42480 a951 27050000 		.long	0x527
+ 42481 a955 28       		.uleb128 0x28
+ 42482 a956 66753800 		.string	"fu8"
+ 42483 a95a 02       		.byte	0x2
+ 42484 a95b 6304     		.value	0x463
+ 42485 a95d 27050000 		.long	0x527
+ 42486 a961 28       		.uleb128 0x28
+ 42487 a962 697800   		.string	"ix"
+ 42488 a965 02       		.byte	0x2
+ 42489 a966 6404     		.value	0x464
+ 42490 a968 6D000000 		.long	0x6d
+ 42491 a96c 00       		.byte	0x0
+ 42492 a96d 00       		.byte	0x0
+ 42493 a96e 25       		.uleb128 0x25
+ 42494 a96f 00000000 		.long	.LASF356
+ 42495 a973 02       		.byte	0x2
+ 42496 a974 F203     		.value	0x3f2
+ 42497 a976 01       		.byte	0x1
+ 42498 a977 FC030000 		.long	0x3fc
+ 42499 a97b 03       		.byte	0x3
+ 42500 a97c 8BA90000 		.long	0xa98b
+ 42501 a980 2B       		.uleb128 0x2b
+ 42502 a981 6200     		.string	"b"
+ 42503 a983 02       		.byte	0x2
+ 42504 a984 F203     		.value	0x3f2
+ 42505 a986 FC030000 		.long	0x3fc
+ 42506 a98a 00       		.byte	0x0
+ 42507 a98b 25       		.uleb128 0x25
+ 42508 a98c 00000000 		.long	.LASF357
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1101
+
+
+ 42509 a990 02       		.byte	0x2
+ 42510 a991 E703     		.value	0x3e7
+ 42511 a993 01       		.byte	0x1
+ 42512 a994 FC030000 		.long	0x3fc
+ 42513 a998 03       		.byte	0x3
+ 42514 a999 A8A90000 		.long	0xa9a8
+ 42515 a99d 2B       		.uleb128 0x2b
+ 42516 a99e 7800     		.string	"x"
+ 42517 a9a0 02       		.byte	0x2
+ 42518 a9a1 E703     		.value	0x3e7
+ 42519 a9a3 49000000 		.long	0x49
+ 42520 a9a7 00       		.byte	0x0
+ 42521 a9a8 25       		.uleb128 0x25
+ 42522 a9a9 00000000 		.long	.LASF358
+ 42523 a9ad 02       		.byte	0x2
+ 42524 a9ae FD03     		.value	0x3fd
+ 42525 a9b0 01       		.byte	0x1
+ 42526 a9b1 FC030000 		.long	0x3fc
+ 42527 a9b5 03       		.byte	0x3
+ 42528 a9b6 C5A90000 		.long	0xa9c5
+ 42529 a9ba 2B       		.uleb128 0x2b
+ 42530 a9bb 6200     		.string	"b"
+ 42531 a9bd 02       		.byte	0x2
+ 42532 a9be FD03     		.value	0x3fd
+ 42533 a9c0 FC030000 		.long	0x3fc
+ 42534 a9c4 00       		.byte	0x0
+ 42535 a9c5 25       		.uleb128 0x25
+ 42536 a9c6 00000000 		.long	.LASF359
+ 42537 a9ca 02       		.byte	0x2
+ 42538 a9cb 0804     		.value	0x408
+ 42539 a9cd 01       		.byte	0x1
+ 42540 a9ce FC030000 		.long	0x3fc
+ 42541 a9d2 03       		.byte	0x3
+ 42542 a9d3 E2A90000 		.long	0xa9e2
+ 42543 a9d7 2B       		.uleb128 0x2b
+ 42544 a9d8 6200     		.string	"b"
+ 42545 a9da 02       		.byte	0x2
+ 42546 a9db 0804     		.value	0x408
+ 42547 a9dd FC030000 		.long	0x3fc
+ 42548 a9e1 00       		.byte	0x0
+ 42549 a9e2 2D       		.uleb128 0x2d
+ 42550 a9e3 00000000 		.long	.LASF360
+ 42551 a9e7 02       		.byte	0x2
+ 42552 a9e8 9E07     		.value	0x79e
+ 42553 a9ea 01       		.byte	0x1
+ 42554 a9eb 00000000 		.quad	.LFB566
+ 42554      00000000 
+ 42555 a9f3 00000000 		.quad	.LFE566
+ 42555      00000000 
+ 42556 a9fb 00000000 		.long	.LLST4
+ 42557 a9ff 30AF0000 		.long	0xaf30
+ 42558 aa03 2F       		.uleb128 0x2f
+ 42559 aa04 7200     		.string	"r"
+ 42560 aa06 02       		.byte	0x2
+ 42561 aa07 9E07     		.value	0x79e
+ 42562 aa09 89480000 		.long	0x4889
+ 42563 aa0d 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1102
+
+
+ 42564 aa0e 91       		.byte	0x91
+ 42565 aa0f 987A     		.sleb128 -744
+ 42566 aa11 2F       		.uleb128 0x2f
+ 42567 aa12 647200   		.string	"dr"
+ 42568 aa15 02       		.byte	0x2
+ 42569 aa16 9E07     		.value	0x79e
+ 42570 aa18 140D0000 		.long	0xd14
+ 42571 aa1c 03       		.byte	0x3
+ 42572 aa1d 91       		.byte	0x91
+ 42573 aa1e 907A     		.sleb128 -752
+ 42574 aa20 2F       		.uleb128 0x2f
+ 42575 aa21 4E7200   		.string	"Nr"
+ 42576 aa24 02       		.byte	0x2
+ 42577 aa25 9E07     		.value	0x79e
+ 42578 aa27 6D000000 		.long	0x6d
+ 42579 aa2b 03       		.byte	0x3
+ 42580 aa2c 91       		.byte	0x91
+ 42581 aa2d 8C7A     		.sleb128 -756
+ 42582 aa2f 37       		.uleb128 0x37
+ 42583 aa30 697800   		.string	"ix"
+ 42584 aa33 02       		.byte	0x2
+ 42585 aa34 A007     		.value	0x7a0
+ 42586 aa36 6D000000 		.long	0x6d
+ 42587 aa3a 03       		.byte	0x3
+ 42588 aa3b 91       		.byte	0x91
+ 42589 aa3c E87B     		.sleb128 -536
+ 42590 aa3e 37       		.uleb128 0x37
+ 42591 aa3f 6A7800   		.string	"jx"
+ 42592 aa42 02       		.byte	0x2
+ 42593 aa43 A007     		.value	0x7a0
+ 42594 aa45 6D000000 		.long	0x6d
+ 42595 aa49 03       		.byte	0x3
+ 42596 aa4a 91       		.byte	0x91
+ 42597 aa4b EC7B     		.sleb128 -532
+ 42598 aa4d 35       		.uleb128 0x35
+ 42599 aa4e DCA80000 		.long	0xa8dc
+ 42600 aa52 00000000 		.quad	.LBB2397
+ 42600      00000000 
+ 42601 aa5a 00000000 		.quad	.LBE2397
+ 42601      00000000 
+ 42602 aa62 02       		.byte	0x2
+ 42603 aa63 A607     		.value	0x7a6
+ 42604 aa65 32       		.uleb128 0x32
+ 42605 aa66 EEA80000 		.long	0xa8ee
+ 42606 aa6a 03       		.byte	0x3
+ 42607 aa6b 91       		.byte	0x91
+ 42608 aa6c F07B     		.sleb128 -528
+ 42609 aa6e 33       		.uleb128 0x33
+ 42610 aa6f 00000000 		.quad	.LBB2398
+ 42610      00000000 
+ 42611 aa77 00000000 		.quad	.LBE2398
+ 42611      00000000 
+ 42612 aa7f 34       		.uleb128 0x34
+ 42613 aa80 FAA80000 		.long	0xa8fa
+ 42614 aa84 03       		.byte	0x3
+ 42615 aa85 76       		.byte	0x76
+ 42616 aa86 807A     		.sleb128 -768
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1103
+
+
+ 42617 aa88 34       		.uleb128 0x34
+ 42618 aa89 05A90000 		.long	0xa905
+ 42619 aa8d 03       		.byte	0x3
+ 42620 aa8e 76       		.byte	0x76
+ 42621 aa8f F079     		.sleb128 -784
+ 42622 aa91 34       		.uleb128 0x34
+ 42623 aa92 10A90000 		.long	0xa910
+ 42624 aa96 03       		.byte	0x3
+ 42625 aa97 76       		.byte	0x76
+ 42626 aa98 E079     		.sleb128 -800
+ 42627 aa9a 34       		.uleb128 0x34
+ 42628 aa9b 1BA90000 		.long	0xa91b
+ 42629 aa9f 03       		.byte	0x3
+ 42630 aaa0 76       		.byte	0x76
+ 42631 aaa1 D079     		.sleb128 -816
+ 42632 aaa3 34       		.uleb128 0x34
+ 42633 aaa4 26A90000 		.long	0xa926
+ 42634 aaa8 03       		.byte	0x3
+ 42635 aaa9 76       		.byte	0x76
+ 42636 aaaa C079     		.sleb128 -832
+ 42637 aaac 34       		.uleb128 0x34
+ 42638 aaad 31A90000 		.long	0xa931
+ 42639 aab1 03       		.byte	0x3
+ 42640 aab2 76       		.byte	0x76
+ 42641 aab3 B079     		.sleb128 -848
+ 42642 aab5 31       		.uleb128 0x31
+ 42643 aab6 160E0000 		.long	0xe16
+ 42644 aaba 00000000 		.quad	.LBB2399
+ 42644      00000000 
+ 42645 aac2 00000000 		.quad	.LBE2399
+ 42645      00000000 
+ 42646 aaca 02       		.byte	0x2
+ 42647 aacb 5204     		.value	0x452
+ 42648 aacd 5DAB0000 		.long	0xab5d
+ 42649 aad1 32       		.uleb128 0x32
+ 42650 aad2 280E0000 		.long	0xe28
+ 42651 aad6 03       		.byte	0x3
+ 42652 aad7 91       		.byte	0x91
+ 42653 aad8 907C     		.sleb128 -496
+ 42654 aada 33       		.uleb128 0x33
+ 42655 aadb 00000000 		.quad	.LBB2400
+ 42655      00000000 
+ 42656 aae3 00000000 		.quad	.LBE2400
+ 42656      00000000 
+ 42657 aaeb 34       		.uleb128 0x34
+ 42658 aaec 340E0000 		.long	0xe34
+ 42659 aaf0 09       		.byte	0x9
+ 42660 aaf1 03       		.byte	0x3
+ 42661 aaf2 00000000 		.quad	ShiftRowTable.6768
+ 42661      00000000 
+ 42662 aafa 35       		.uleb128 0x35
+ 42663 aafb 6E0D0000 		.long	0xd6e
+ 42664 aaff 00000000 		.quad	.LBB2401
+ 42664      00000000 
+ 42665 ab07 00000000 		.quad	.LBE2401
+ 42665      00000000 
+ 42666 ab0f 02       		.byte	0x2
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1104
+
+
+ 42667 ab10 9B02     		.value	0x29b
+ 42668 ab12 32       		.uleb128 0x32
+ 42669 ab13 8C0D0000 		.long	0xd8c
+ 42670 ab17 03       		.byte	0x3
+ 42671 ab18 91       		.byte	0x91
+ 42672 ab19 A07C     		.sleb128 -480
+ 42673 ab1b 32       		.uleb128 0x32
+ 42674 ab1c 800D0000 		.long	0xd80
+ 42675 ab20 03       		.byte	0x3
+ 42676 ab21 91       		.byte	0x91
+ 42677 ab22 B07C     		.sleb128 -464
+ 42678 ab24 33       		.uleb128 0x33
+ 42679 ab25 00000000 		.quad	.LBB2402
+ 42679      00000000 
+ 42680 ab2d 00000000 		.quad	.LBE2402
+ 42680      00000000 
+ 42681 ab35 34       		.uleb128 0x34
+ 42682 ab36 980D0000 		.long	0xd98
+ 42683 ab3a 03       		.byte	0x3
+ 42684 ab3b 91       		.byte	0x91
+ 42685 ab3c F07A     		.sleb128 -656
+ 42686 ab3e 34       		.uleb128 0x34
+ 42687 ab3f A40D0000 		.long	0xda4
+ 42688 ab43 03       		.byte	0x3
+ 42689 ab44 91       		.byte	0x91
+ 42690 ab45 E07A     		.sleb128 -672
+ 42691 ab47 34       		.uleb128 0x34
+ 42692 ab48 AF0D0000 		.long	0xdaf
+ 42693 ab4c 03       		.byte	0x3
+ 42694 ab4d 91       		.byte	0x91
+ 42695 ab4e D07A     		.sleb128 -688
+ 42696 ab50 34       		.uleb128 0x34
+ 42697 ab51 BB0D0000 		.long	0xdbb
+ 42698 ab55 03       		.byte	0x3
+ 42699 ab56 91       		.byte	0x91
+ 42700 ab57 CC7C     		.sleb128 -436
+ 42701 ab59 00       		.byte	0x0
+ 42702 ab5a 00       		.byte	0x0
+ 42703 ab5b 00       		.byte	0x0
+ 42704 ab5c 00       		.byte	0x0
+ 42705 ab5d 31       		.uleb128 0x31
+ 42706 ab5e 160E0000 		.long	0xe16
+ 42707 ab62 00000000 		.quad	.LBB2403
+ 42707      00000000 
+ 42708 ab6a 00000000 		.quad	.LBE2403
+ 42708      00000000 
+ 42709 ab72 02       		.byte	0x2
+ 42710 ab73 5304     		.value	0x453
+ 42711 ab75 05AC0000 		.long	0xac05
+ 42712 ab79 32       		.uleb128 0x32
+ 42713 ab7a 280E0000 		.long	0xe28
+ 42714 ab7e 03       		.byte	0x3
+ 42715 ab7f 91       		.byte	0x91
+ 42716 ab80 D07C     		.sleb128 -432
+ 42717 ab82 33       		.uleb128 0x33
+ 42718 ab83 00000000 		.quad	.LBB2404
+ 42718      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1105
+
+
+ 42719 ab8b 00000000 		.quad	.LBE2404
+ 42719      00000000 
+ 42720 ab93 34       		.uleb128 0x34
+ 42721 ab94 340E0000 		.long	0xe34
+ 42722 ab98 09       		.byte	0x9
+ 42723 ab99 03       		.byte	0x3
+ 42724 ab9a 00000000 		.quad	ShiftRowTable.6768
+ 42724      00000000 
+ 42725 aba2 35       		.uleb128 0x35
+ 42726 aba3 6E0D0000 		.long	0xd6e
+ 42727 aba7 00000000 		.quad	.LBB2405
+ 42727      00000000 
+ 42728 abaf 00000000 		.quad	.LBE2405
+ 42728      00000000 
+ 42729 abb7 02       		.byte	0x2
+ 42730 abb8 9B02     		.value	0x29b
+ 42731 abba 32       		.uleb128 0x32
+ 42732 abbb 8C0D0000 		.long	0xd8c
+ 42733 abbf 03       		.byte	0x3
+ 42734 abc0 91       		.byte	0x91
+ 42735 abc1 E07C     		.sleb128 -416
+ 42736 abc3 32       		.uleb128 0x32
+ 42737 abc4 800D0000 		.long	0xd80
+ 42738 abc8 03       		.byte	0x3
+ 42739 abc9 91       		.byte	0x91
+ 42740 abca F07C     		.sleb128 -400
+ 42741 abcc 33       		.uleb128 0x33
+ 42742 abcd 00000000 		.quad	.LBB2406
+ 42742      00000000 
+ 42743 abd5 00000000 		.quad	.LBE2406
+ 42743      00000000 
+ 42744 abdd 34       		.uleb128 0x34
+ 42745 abde 980D0000 		.long	0xd98
+ 42746 abe2 03       		.byte	0x3
+ 42747 abe3 91       		.byte	0x91
+ 42748 abe4 A07B     		.sleb128 -608
+ 42749 abe6 34       		.uleb128 0x34
+ 42750 abe7 A40D0000 		.long	0xda4
+ 42751 abeb 03       		.byte	0x3
+ 42752 abec 91       		.byte	0x91
+ 42753 abed 907B     		.sleb128 -624
+ 42754 abef 34       		.uleb128 0x34
+ 42755 abf0 AF0D0000 		.long	0xdaf
+ 42756 abf4 03       		.byte	0x3
+ 42757 abf5 91       		.byte	0x91
+ 42758 abf6 807B     		.sleb128 -640
+ 42759 abf8 34       		.uleb128 0x34
+ 42760 abf9 BB0D0000 		.long	0xdbb
+ 42761 abfd 03       		.byte	0x3
+ 42762 abfe 91       		.byte	0x91
+ 42763 abff 8C7D     		.sleb128 -372
+ 42764 ac01 00       		.byte	0x0
+ 42765 ac02 00       		.byte	0x0
+ 42766 ac03 00       		.byte	0x0
+ 42767 ac04 00       		.byte	0x0
+ 42768 ac05 31       		.uleb128 0x31
+ 42769 ac06 160E0000 		.long	0xe16
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1106
+
+
+ 42770 ac0a 00000000 		.quad	.LBB2407
+ 42770      00000000 
+ 42771 ac12 00000000 		.quad	.LBE2407
+ 42771      00000000 
+ 42772 ac1a 02       		.byte	0x2
+ 42773 ac1b 5404     		.value	0x454
+ 42774 ac1d ADAC0000 		.long	0xacad
+ 42775 ac21 32       		.uleb128 0x32
+ 42776 ac22 280E0000 		.long	0xe28
+ 42777 ac26 03       		.byte	0x3
+ 42778 ac27 91       		.byte	0x91
+ 42779 ac28 907D     		.sleb128 -368
+ 42780 ac2a 33       		.uleb128 0x33
+ 42781 ac2b 00000000 		.quad	.LBB2408
+ 42781      00000000 
+ 42782 ac33 00000000 		.quad	.LBE2408
+ 42782      00000000 
+ 42783 ac3b 34       		.uleb128 0x34
+ 42784 ac3c 340E0000 		.long	0xe34
+ 42785 ac40 09       		.byte	0x9
+ 42786 ac41 03       		.byte	0x3
+ 42787 ac42 00000000 		.quad	ShiftRowTable.6768
+ 42787      00000000 
+ 42788 ac4a 35       		.uleb128 0x35
+ 42789 ac4b 6E0D0000 		.long	0xd6e
+ 42790 ac4f 00000000 		.quad	.LBB2409
+ 42790      00000000 
+ 42791 ac57 00000000 		.quad	.LBE2409
+ 42791      00000000 
+ 42792 ac5f 02       		.byte	0x2
+ 42793 ac60 9B02     		.value	0x29b
+ 42794 ac62 32       		.uleb128 0x32
+ 42795 ac63 8C0D0000 		.long	0xd8c
+ 42796 ac67 03       		.byte	0x3
+ 42797 ac68 91       		.byte	0x91
+ 42798 ac69 A07D     		.sleb128 -352
+ 42799 ac6b 32       		.uleb128 0x32
+ 42800 ac6c 800D0000 		.long	0xd80
+ 42801 ac70 03       		.byte	0x3
+ 42802 ac71 91       		.byte	0x91
+ 42803 ac72 B07D     		.sleb128 -336
+ 42804 ac74 33       		.uleb128 0x33
+ 42805 ac75 00000000 		.quad	.LBB2410
+ 42805      00000000 
+ 42806 ac7d 00000000 		.quad	.LBE2410
+ 42806      00000000 
+ 42807 ac85 34       		.uleb128 0x34
+ 42808 ac86 980D0000 		.long	0xd98
+ 42809 ac8a 03       		.byte	0x3
+ 42810 ac8b 91       		.byte	0x91
+ 42811 ac8c D07B     		.sleb128 -560
+ 42812 ac8e 34       		.uleb128 0x34
+ 42813 ac8f A40D0000 		.long	0xda4
+ 42814 ac93 03       		.byte	0x3
+ 42815 ac94 91       		.byte	0x91
+ 42816 ac95 C07B     		.sleb128 -576
+ 42817 ac97 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1107
+
+
+ 42818 ac98 AF0D0000 		.long	0xdaf
+ 42819 ac9c 03       		.byte	0x3
+ 42820 ac9d 91       		.byte	0x91
+ 42821 ac9e B07B     		.sleb128 -592
+ 42822 aca0 34       		.uleb128 0x34
+ 42823 aca1 BB0D0000 		.long	0xdbb
+ 42824 aca5 03       		.byte	0x3
+ 42825 aca6 91       		.byte	0x91
+ 42826 aca7 CC7D     		.sleb128 -308
+ 42827 aca9 00       		.byte	0x0
+ 42828 acaa 00       		.byte	0x0
+ 42829 acab 00       		.byte	0x0
+ 42830 acac 00       		.byte	0x0
+ 42831 acad 31       		.uleb128 0x31
+ 42832 acae 520E0000 		.long	0xe52
+ 42833 acb2 00000000 		.quad	.LBB2411
+ 42833      00000000 
+ 42834 acba 00000000 		.quad	.LBE2411
+ 42834      00000000 
+ 42835 acc2 02       		.byte	0x2
+ 42836 acc3 5604     		.value	0x456
+ 42837 acc5 DCAC0000 		.long	0xacdc
+ 42838 acc9 32       		.uleb128 0x32
+ 42839 acca 6D0E0000 		.long	0xe6d
+ 42840 acce 03       		.byte	0x3
+ 42841 accf 91       		.byte	0x91
+ 42842 acd0 D07D     		.sleb128 -304
+ 42843 acd2 32       		.uleb128 0x32
+ 42844 acd3 630E0000 		.long	0xe63
+ 42845 acd7 03       		.byte	0x3
+ 42846 acd8 91       		.byte	0x91
+ 42847 acd9 E07D     		.sleb128 -288
+ 42848 acdb 00       		.byte	0x0
+ 42849 acdc 31       		.uleb128 0x31
+ 42850 acdd 520E0000 		.long	0xe52
+ 42851 ace1 00000000 		.quad	.LBB2413
+ 42851      00000000 
+ 42852 ace9 00000000 		.quad	.LBE2413
+ 42852      00000000 
+ 42853 acf1 02       		.byte	0x2
+ 42854 acf2 5704     		.value	0x457
+ 42855 acf4 0BAD0000 		.long	0xad0b
+ 42856 acf8 32       		.uleb128 0x32
+ 42857 acf9 6D0E0000 		.long	0xe6d
+ 42858 acfd 03       		.byte	0x3
+ 42859 acfe 91       		.byte	0x91
+ 42860 acff F07D     		.sleb128 -272
+ 42861 ad01 32       		.uleb128 0x32
+ 42862 ad02 630E0000 		.long	0xe63
+ 42863 ad06 03       		.byte	0x3
+ 42864 ad07 91       		.byte	0x91
+ 42865 ad08 807E     		.sleb128 -256
+ 42866 ad0a 00       		.byte	0x0
+ 42867 ad0b 31       		.uleb128 0x31
+ 42868 ad0c 520E0000 		.long	0xe52
+ 42869 ad10 00000000 		.quad	.LBB2415
+ 42869      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1108
+
+
+ 42870 ad18 00000000 		.quad	.LBE2415
+ 42870      00000000 
+ 42871 ad20 02       		.byte	0x2
+ 42872 ad21 5804     		.value	0x458
+ 42873 ad23 3AAD0000 		.long	0xad3a
+ 42874 ad27 32       		.uleb128 0x32
+ 42875 ad28 6D0E0000 		.long	0xe6d
+ 42876 ad2c 03       		.byte	0x3
+ 42877 ad2d 91       		.byte	0x91
+ 42878 ad2e 907E     		.sleb128 -240
+ 42879 ad30 32       		.uleb128 0x32
+ 42880 ad31 630E0000 		.long	0xe63
+ 42881 ad35 03       		.byte	0x3
+ 42882 ad36 91       		.byte	0x91
+ 42883 ad37 A07E     		.sleb128 -224
+ 42884 ad39 00       		.byte	0x0
+ 42885 ad3a 31       		.uleb128 0x31
+ 42886 ad3b 520E0000 		.long	0xe52
+ 42887 ad3f 00000000 		.quad	.LBB2417
+ 42887      00000000 
+ 42888 ad47 00000000 		.quad	.LBE2417
+ 42888      00000000 
+ 42889 ad4f 02       		.byte	0x2
+ 42890 ad50 5904     		.value	0x459
+ 42891 ad52 69AD0000 		.long	0xad69
+ 42892 ad56 32       		.uleb128 0x32
+ 42893 ad57 6D0E0000 		.long	0xe6d
+ 42894 ad5b 03       		.byte	0x3
+ 42895 ad5c 91       		.byte	0x91
+ 42896 ad5d B07E     		.sleb128 -208
+ 42897 ad5f 32       		.uleb128 0x32
+ 42898 ad60 630E0000 		.long	0xe63
+ 42899 ad64 03       		.byte	0x3
+ 42900 ad65 91       		.byte	0x91
+ 42901 ad66 C07E     		.sleb128 -192
+ 42902 ad68 00       		.byte	0x0
+ 42903 ad69 31       		.uleb128 0x31
+ 42904 ad6a 520E0000 		.long	0xe52
+ 42905 ad6e 00000000 		.quad	.LBB2419
+ 42905      00000000 
+ 42906 ad76 00000000 		.quad	.LBE2419
+ 42906      00000000 
+ 42907 ad7e 02       		.byte	0x2
+ 42908 ad7f 5A04     		.value	0x45a
+ 42909 ad81 98AD0000 		.long	0xad98
+ 42910 ad85 32       		.uleb128 0x32
+ 42911 ad86 6D0E0000 		.long	0xe6d
+ 42912 ad8a 03       		.byte	0x3
+ 42913 ad8b 91       		.byte	0x91
+ 42914 ad8c D07E     		.sleb128 -176
+ 42915 ad8e 32       		.uleb128 0x32
+ 42916 ad8f 630E0000 		.long	0xe63
+ 42917 ad93 03       		.byte	0x3
+ 42918 ad94 91       		.byte	0x91
+ 42919 ad95 E07E     		.sleb128 -160
+ 42920 ad97 00       		.byte	0x0
+ 42921 ad98 36       		.uleb128 0x36
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1109
+
+
+ 42922 ad99 00000000 		.quad	.LBB2421
+ 42922      00000000 
+ 42923 ada1 00000000 		.quad	.LBE2421
+ 42923      00000000 
+ 42924 ada9 A6AE0000 		.long	0xaea6
+ 42925 adad 34       		.uleb128 0x34
+ 42926 adae 3DA90000 		.long	0xa93d
+ 42927 adb2 03       		.byte	0x3
+ 42928 adb3 91       		.byte	0x91
+ 42929 adb4 C07A     		.sleb128 -704
+ 42930 adb6 34       		.uleb128 0x34
+ 42931 adb7 49A90000 		.long	0xa949
+ 42932 adbb 03       		.byte	0x3
+ 42933 adbc 91       		.byte	0x91
+ 42934 adbd B07A     		.sleb128 -720
+ 42935 adbf 34       		.uleb128 0x34
+ 42936 adc0 55A90000 		.long	0xa955
+ 42937 adc4 03       		.byte	0x3
+ 42938 adc5 91       		.byte	0x91
+ 42939 adc6 A07A     		.sleb128 -736
+ 42940 adc8 34       		.uleb128 0x34
+ 42941 adc9 61A90000 		.long	0xa961
+ 42942 adcd 03       		.byte	0x3
+ 42943 adce 91       		.byte	0x91
+ 42944 adcf 8C7C     		.sleb128 -500
+ 42945 add1 31       		.uleb128 0x31
+ 42946 add2 6EA90000 		.long	0xa96e
+ 42947 add6 00000000 		.quad	.LBB2422
+ 42947      00000000 
+ 42948 adde 00000000 		.quad	.LBE2422
+ 42948      00000000 
+ 42949 ade6 02       		.byte	0x2
+ 42950 ade7 6C04     		.value	0x46c
+ 42951 ade9 19AE0000 		.long	0xae19
+ 42952 aded 32       		.uleb128 0x32
+ 42953 adee 80A90000 		.long	0xa980
+ 42954 adf2 03       		.byte	0x3
+ 42955 adf3 91       		.byte	0x91
+ 42956 adf4 FA7E     		.sleb128 -134
+ 42957 adf6 35       		.uleb128 0x35
+ 42958 adf7 8BA90000 		.long	0xa98b
+ 42959 adfb 00000000 		.quad	.LBB2424
+ 42959      00000000 
+ 42960 ae03 00000000 		.quad	.LBE2424
+ 42960      00000000 
+ 42961 ae0b 02       		.byte	0x2
+ 42962 ae0c F403     		.value	0x3f4
+ 42963 ae0e 32       		.uleb128 0x32
+ 42964 ae0f 9DA90000 		.long	0xa99d
+ 42965 ae13 03       		.byte	0x3
+ 42966 ae14 91       		.byte	0x91
+ 42967 ae15 FB7E     		.sleb128 -133
+ 42968 ae17 00       		.byte	0x0
+ 42969 ae18 00       		.byte	0x0
+ 42970 ae19 31       		.uleb128 0x31
+ 42971 ae1a A8A90000 		.long	0xa9a8
+ 42972 ae1e 00000000 		.quad	.LBB2426
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1110
+
+
+ 42972      00000000 
+ 42973 ae26 00000000 		.quad	.LBE2426
+ 42973      00000000 
+ 42974 ae2e 02       		.byte	0x2
+ 42975 ae2f 6D04     		.value	0x46d
+ 42976 ae31 61AE0000 		.long	0xae61
+ 42977 ae35 32       		.uleb128 0x32
+ 42978 ae36 BAA90000 		.long	0xa9ba
+ 42979 ae3a 03       		.byte	0x3
+ 42980 ae3b 91       		.byte	0x91
+ 42981 ae3c FC7E     		.sleb128 -132
+ 42982 ae3e 35       		.uleb128 0x35
+ 42983 ae3f 8BA90000 		.long	0xa98b
+ 42984 ae43 00000000 		.quad	.LBB2428
+ 42984      00000000 
+ 42985 ae4b 00000000 		.quad	.LBE2428
+ 42985      00000000 
+ 42986 ae53 02       		.byte	0x2
+ 42987 ae54 FF03     		.value	0x3ff
+ 42988 ae56 32       		.uleb128 0x32
+ 42989 ae57 9DA90000 		.long	0xa99d
+ 42990 ae5b 03       		.byte	0x3
+ 42991 ae5c 91       		.byte	0x91
+ 42992 ae5d FD7E     		.sleb128 -131
+ 42993 ae5f 00       		.byte	0x0
+ 42994 ae60 00       		.byte	0x0
+ 42995 ae61 35       		.uleb128 0x35
+ 42996 ae62 C5A90000 		.long	0xa9c5
+ 42997 ae66 00000000 		.quad	.LBB2430
+ 42997      00000000 
+ 42998 ae6e 00000000 		.quad	.LBE2430
+ 42998      00000000 
+ 42999 ae76 02       		.byte	0x2
+ 43000 ae77 6E04     		.value	0x46e
+ 43001 ae79 32       		.uleb128 0x32
+ 43002 ae7a D7A90000 		.long	0xa9d7
+ 43003 ae7e 03       		.byte	0x3
+ 43004 ae7f 91       		.byte	0x91
+ 43005 ae80 FE7E     		.sleb128 -130
+ 43006 ae82 35       		.uleb128 0x35
+ 43007 ae83 8BA90000 		.long	0xa98b
+ 43008 ae87 00000000 		.quad	.LBB2432
+ 43008      00000000 
+ 43009 ae8f 00000000 		.quad	.LBE2432
+ 43009      00000000 
+ 43010 ae97 02       		.byte	0x2
+ 43011 ae98 0A04     		.value	0x40a
+ 43012 ae9a 32       		.uleb128 0x32
+ 43013 ae9b 9DA90000 		.long	0xa99d
+ 43014 ae9f 03       		.byte	0x3
+ 43015 aea0 91       		.byte	0x91
+ 43016 aea1 FF7E     		.sleb128 -129
+ 43017 aea3 00       		.byte	0x0
+ 43018 aea4 00       		.byte	0x0
+ 43019 aea5 00       		.byte	0x0
+ 43020 aea6 31       		.uleb128 0x31
+ 43021 aea7 520E0000 		.long	0xe52
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1111
+
+
+ 43022 aeab 00000000 		.quad	.LBB2434
+ 43022      00000000 
+ 43023 aeb3 00000000 		.quad	.LBE2434
+ 43023      00000000 
+ 43024 aebb 02       		.byte	0x2
+ 43025 aebc 7604     		.value	0x476
+ 43026 aebe D5AE0000 		.long	0xaed5
+ 43027 aec2 32       		.uleb128 0x32
+ 43028 aec3 6D0E0000 		.long	0xe6d
+ 43029 aec7 03       		.byte	0x3
+ 43030 aec8 91       		.byte	0x91
+ 43031 aec9 807F     		.sleb128 -128
+ 43032 aecb 32       		.uleb128 0x32
+ 43033 aecc 630E0000 		.long	0xe63
+ 43034 aed0 03       		.byte	0x3
+ 43035 aed1 91       		.byte	0x91
+ 43036 aed2 907F     		.sleb128 -112
+ 43037 aed4 00       		.byte	0x0
+ 43038 aed5 31       		.uleb128 0x31
+ 43039 aed6 520E0000 		.long	0xe52
+ 43040 aeda 00000000 		.quad	.LBB2436
+ 43040      00000000 
+ 43041 aee2 00000000 		.quad	.LBE2436
+ 43041      00000000 
+ 43042 aeea 02       		.byte	0x2
+ 43043 aeeb 7704     		.value	0x477
+ 43044 aeed 04AF0000 		.long	0xaf04
+ 43045 aef1 32       		.uleb128 0x32
+ 43046 aef2 6D0E0000 		.long	0xe6d
+ 43047 aef6 03       		.byte	0x3
+ 43048 aef7 91       		.byte	0x91
+ 43049 aef8 A07F     		.sleb128 -96
+ 43050 aefa 32       		.uleb128 0x32
+ 43051 aefb 630E0000 		.long	0xe63
+ 43052 aeff 03       		.byte	0x3
+ 43053 af00 91       		.byte	0x91
+ 43054 af01 B07F     		.sleb128 -80
+ 43055 af03 00       		.byte	0x0
+ 43056 af04 35       		.uleb128 0x35
+ 43057 af05 520E0000 		.long	0xe52
+ 43058 af09 00000000 		.quad	.LBB2438
+ 43058      00000000 
+ 43059 af11 00000000 		.quad	.LBE2438
+ 43059      00000000 
+ 43060 af19 02       		.byte	0x2
+ 43061 af1a 7804     		.value	0x478
+ 43062 af1c 32       		.uleb128 0x32
+ 43063 af1d 6D0E0000 		.long	0xe6d
+ 43064 af21 02       		.byte	0x2
+ 43065 af22 91       		.byte	0x91
+ 43066 af23 40       		.sleb128 -64
+ 43067 af24 32       		.uleb128 0x32
+ 43068 af25 630E0000 		.long	0xe63
+ 43069 af29 02       		.byte	0x2
+ 43070 af2a 91       		.byte	0x91
+ 43071 af2b 50       		.sleb128 -48
+ 43072 af2c 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1112
+
+
+ 43073 af2d 00       		.byte	0x0
+ 43074 af2e 00       		.byte	0x0
+ 43075 af2f 00       		.byte	0x0
+ 43076 af30 2D       		.uleb128 0x2d
+ 43077 af31 00000000 		.long	.LASF361
+ 43078 af35 02       		.byte	0x2
+ 43079 af36 AC07     		.value	0x7ac
+ 43080 af38 01       		.byte	0x1
+ 43081 af39 00000000 		.quad	.LFB567
+ 43081      00000000 
+ 43082 af41 00000000 		.quad	.LFE567
+ 43082      00000000 
+ 43083 af49 00000000 		.long	.LLST5
+ 43084 af4d 6DAF0000 		.long	0xaf6d
+ 43085 af51 2F       		.uleb128 0x2f
+ 43086 af52 7700     		.string	"w"
+ 43087 af54 02       		.byte	0x2
+ 43088 af55 AC07     		.value	0x7ac
+ 43089 af57 89480000 		.long	0x4889
+ 43090 af5b 02       		.byte	0x2
+ 43091 af5c 91       		.byte	0x91
+ 43092 af5d 68       		.sleb128 -24
+ 43093 af5e 2F       		.uleb128 0x2f
+ 43094 af5f 6B7700   		.string	"kw"
+ 43095 af62 02       		.byte	0x2
+ 43096 af63 AC07     		.value	0x7ac
+ 43097 af65 140D0000 		.long	0xd14
+ 43098 af69 02       		.byte	0x2
+ 43099 af6a 91       		.byte	0x91
+ 43100 af6b 60       		.sleb128 -32
+ 43101 af6c 00       		.byte	0x0
+ 43102 af6d 2D       		.uleb128 0x2d
+ 43103 af6e 00000000 		.long	.LASF362
+ 43104 af72 02       		.byte	0x2
+ 43105 af73 B307     		.value	0x7b3
+ 43106 af75 01       		.byte	0x1
+ 43107 af76 00000000 		.quad	.LFB568
+ 43107      00000000 
+ 43108 af7e 00000000 		.quad	.LFE568
+ 43108      00000000 
+ 43109 af86 00000000 		.long	.LLST6
+ 43110 af8a AAAF0000 		.long	0xafaa
+ 43111 af8e 2F       		.uleb128 0x2f
+ 43112 af8f 7700     		.string	"w"
+ 43113 af91 02       		.byte	0x2
+ 43114 af92 B307     		.value	0x7b3
+ 43115 af94 89480000 		.long	0x4889
+ 43116 af98 02       		.byte	0x2
+ 43117 af99 91       		.byte	0x91
+ 43118 af9a 68       		.sleb128 -24
+ 43119 af9b 2F       		.uleb128 0x2f
+ 43120 af9c 6B7700   		.string	"kw"
+ 43121 af9f 02       		.byte	0x2
+ 43122 afa0 B307     		.value	0x7b3
+ 43123 afa2 140D0000 		.long	0xd14
+ 43124 afa6 02       		.byte	0x2
+ 43125 afa7 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1113
+
+
+ 43126 afa8 60       		.sleb128 -32
+ 43127 afa9 00       		.byte	0x0
+ 43128 afaa 2D       		.uleb128 0x2d
+ 43129 afab 00000000 		.long	.LASF363
+ 43130 afaf 02       		.byte	0x2
+ 43131 afb0 BA07     		.value	0x7ba
+ 43132 afb2 01       		.byte	0x1
+ 43133 afb3 00000000 		.quad	.LFB569
+ 43133      00000000 
+ 43134 afbb 00000000 		.quad	.LFE569
+ 43134      00000000 
+ 43135 afc3 00000000 		.long	.LLST7
+ 43136 afc7 E7AF0000 		.long	0xafe7
+ 43137 afcb 2F       		.uleb128 0x2f
+ 43138 afcc 7700     		.string	"w"
+ 43139 afce 02       		.byte	0x2
+ 43140 afcf BA07     		.value	0x7ba
+ 43141 afd1 89480000 		.long	0x4889
+ 43142 afd5 02       		.byte	0x2
+ 43143 afd6 91       		.byte	0x91
+ 43144 afd7 68       		.sleb128 -24
+ 43145 afd8 2F       		.uleb128 0x2f
+ 43146 afd9 6B7700   		.string	"kw"
+ 43147 afdc 02       		.byte	0x2
+ 43148 afdd BA07     		.value	0x7ba
+ 43149 afdf 140D0000 		.long	0xd14
+ 43150 afe3 02       		.byte	0x2
+ 43151 afe4 91       		.byte	0x91
+ 43152 afe5 60       		.sleb128 -32
+ 43153 afe6 00       		.byte	0x0
+ 43154 afe7 25       		.uleb128 0x25
+ 43155 afe8 00000000 		.long	.LASF364
+ 43156 afec 02       		.byte	0x2
+ 43157 afed C807     		.value	0x7c8
+ 43158 afef 01       		.byte	0x1
+ 43159 aff0 B1010000 		.long	0x1b1
+ 43160 aff4 03       		.byte	0x3
+ 43161 aff5 3EB00000 		.long	0xb03e
+ 43162 aff9 26       		.uleb128 0x26
+ 43163 affa 00000000 		.long	.LASF66
+ 43164 affe 02       		.byte	0x2
+ 43165 afff C807     		.value	0x7c8
+ 43166 b001 B1010000 		.long	0x1b1
+ 43167 b005 26       		.uleb128 0x26
+ 43168 b006 00000000 		.long	.LASF64
+ 43169 b00a 02       		.byte	0x2
+ 43170 b00b C807     		.value	0x7c8
+ 43171 b00d 1A0D0000 		.long	0xd1a
+ 43172 b011 29       		.uleb128 0x29
+ 43173 b012 21B00000 		.long	0xb021
+ 43174 b016 28       		.uleb128 0x28
+ 43175 b017 7600     		.string	"v"
+ 43176 b019 02       		.byte	0x2
+ 43177 b01a CA07     		.value	0x7ca
+ 43178 b01c 27050000 		.long	0x527
+ 43179 b020 00       		.byte	0x0
+ 43180 b021 29       		.uleb128 0x29
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1114
+
+
+ 43181 b022 31B00000 		.long	0xb031
+ 43182 b026 28       		.uleb128 0x28
+ 43183 b027 7600     		.string	"v"
+ 43184 b029 02       		.byte	0x2
+ 43185 b02a CC07     		.value	0x7cc
+ 43186 b02c 27050000 		.long	0x527
+ 43187 b030 00       		.byte	0x0
+ 43188 b031 2A       		.uleb128 0x2a
+ 43189 b032 28       		.uleb128 0x28
+ 43190 b033 7600     		.string	"v"
+ 43191 b035 02       		.byte	0x2
+ 43192 b036 D007     		.value	0x7d0
+ 43193 b038 27050000 		.long	0x527
+ 43194 b03c 00       		.byte	0x0
+ 43195 b03d 00       		.byte	0x0
+ 43196 b03e 25       		.uleb128 0x25
+ 43197 b03f 00000000 		.long	.LASF365
+ 43198 b043 02       		.byte	0x2
+ 43199 b044 2102     		.value	0x221
+ 43200 b046 01       		.byte	0x1
+ 43201 b047 B1010000 		.long	0x1b1
+ 43202 b04b 03       		.byte	0x3
+ 43203 b04c 69B00000 		.long	0xb069
+ 43204 b050 26       		.uleb128 0x26
+ 43205 b051 00000000 		.long	.LASF66
+ 43206 b055 02       		.byte	0x2
+ 43207 b056 2102     		.value	0x221
+ 43208 b058 B1010000 		.long	0x1b1
+ 43209 b05c 26       		.uleb128 0x26
+ 43210 b05d 00000000 		.long	.LASF366
+ 43211 b061 02       		.byte	0x2
+ 43212 b062 2102     		.value	0x221
+ 43213 b064 B1010000 		.long	0x1b1
+ 43214 b068 00       		.byte	0x0
+ 43215 b069 25       		.uleb128 0x25
+ 43216 b06a 00000000 		.long	.LASF367
+ 43217 b06e 02       		.byte	0x2
+ 43218 b06f DC07     		.value	0x7dc
+ 43219 b071 01       		.byte	0x1
+ 43220 b072 B1010000 		.long	0x1b1
+ 43221 b076 03       		.byte	0x3
+ 43222 b077 08B10000 		.long	0xb108
+ 43223 b07b 26       		.uleb128 0x26
+ 43224 b07c 00000000 		.long	.LASF66
+ 43225 b080 02       		.byte	0x2
+ 43226 b081 DC07     		.value	0x7dc
+ 43227 b083 B1010000 		.long	0x1b1
+ 43228 b087 26       		.uleb128 0x26
+ 43229 b088 00000000 		.long	.LASF64
+ 43230 b08c 02       		.byte	0x2
+ 43231 b08d DD07     		.value	0x7dd
+ 43232 b08f 1A0D0000 		.long	0xd1a
+ 43233 b093 27       		.uleb128 0x27
+ 43234 b094 00000000 		.long	.LASF368
+ 43235 b098 02       		.byte	0x2
+ 43236 b099 E007     		.value	0x7e0
+ 43237 b09b B1010000 		.long	0x1b1
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1115
+
+
+ 43238 b09f 27       		.uleb128 0x27
+ 43239 b0a0 00000000 		.long	.LASF369
+ 43240 b0a4 02       		.byte	0x2
+ 43241 b0a5 E107     		.value	0x7e1
+ 43242 b0a7 B1010000 		.long	0x1b1
+ 43243 b0ab 29       		.uleb128 0x29
+ 43244 b0ac BBB00000 		.long	0xb0bb
+ 43245 b0b0 28       		.uleb128 0x28
+ 43246 b0b1 7600     		.string	"v"
+ 43247 b0b3 02       		.byte	0x2
+ 43248 b0b4 E607     		.value	0x7e6
+ 43249 b0b6 27050000 		.long	0x527
+ 43250 b0ba 00       		.byte	0x0
+ 43251 b0bb 29       		.uleb128 0x29
+ 43252 b0bc CBB00000 		.long	0xb0cb
+ 43253 b0c0 28       		.uleb128 0x28
+ 43254 b0c1 7600     		.string	"v"
+ 43255 b0c3 02       		.byte	0x2
+ 43256 b0c4 EF07     		.value	0x7ef
+ 43257 b0c6 27050000 		.long	0x527
+ 43258 b0ca 00       		.byte	0x0
+ 43259 b0cb 29       		.uleb128 0x29
+ 43260 b0cc DBB00000 		.long	0xb0db
+ 43261 b0d0 28       		.uleb128 0x28
+ 43262 b0d1 7600     		.string	"v"
+ 43263 b0d3 02       		.byte	0x2
+ 43264 b0d4 F307     		.value	0x7f3
+ 43265 b0d6 27050000 		.long	0x527
+ 43266 b0da 00       		.byte	0x0
+ 43267 b0db 29       		.uleb128 0x29
+ 43268 b0dc EBB00000 		.long	0xb0eb
+ 43269 b0e0 28       		.uleb128 0x28
+ 43270 b0e1 7600     		.string	"v"
+ 43271 b0e3 02       		.byte	0x2
+ 43272 b0e4 F807     		.value	0x7f8
+ 43273 b0e6 27050000 		.long	0x527
+ 43274 b0ea 00       		.byte	0x0
+ 43275 b0eb 29       		.uleb128 0x29
+ 43276 b0ec FBB00000 		.long	0xb0fb
+ 43277 b0f0 28       		.uleb128 0x28
+ 43278 b0f1 7600     		.string	"v"
+ 43279 b0f3 02       		.byte	0x2
+ 43280 b0f4 FC07     		.value	0x7fc
+ 43281 b0f6 27050000 		.long	0x527
+ 43282 b0fa 00       		.byte	0x0
+ 43283 b0fb 2A       		.uleb128 0x2a
+ 43284 b0fc 28       		.uleb128 0x28
+ 43285 b0fd 7600     		.string	"v"
+ 43286 b0ff 02       		.byte	0x2
+ 43287 b100 FD07     		.value	0x7fd
+ 43288 b102 27050000 		.long	0x527
+ 43289 b106 00       		.byte	0x0
+ 43290 b107 00       		.byte	0x0
+ 43291 b108 25       		.uleb128 0x25
+ 43292 b109 00000000 		.long	.LASF370
+ 43293 b10d 02       		.byte	0x2
+ 43294 b10e 3E02     		.value	0x23e
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1116
+
+
+ 43295 b110 01       		.byte	0x1
+ 43296 b111 B1010000 		.long	0x1b1
+ 43297 b115 03       		.byte	0x3
+ 43298 b116 44B10000 		.long	0xb144
+ 43299 b11a 26       		.uleb128 0x26
+ 43300 b11b 00000000 		.long	.LASF66
+ 43301 b11f 02       		.byte	0x2
+ 43302 b120 3E02     		.value	0x23e
+ 43303 b122 B1010000 		.long	0x1b1
+ 43304 b126 2C       		.uleb128 0x2c
+ 43305 b127 00000000 		.long	.LASF336
+ 43306 b12b 02       		.byte	0x2
+ 43307 b12c 4102     		.value	0x241
+ 43308 b12e 1A0D0000 		.long	0xd1a
+ 43309 b132 10       		.byte	0x10
+ 43310 b133 00       		.byte	0x0
+ 43311 b134 05       		.byte	0x5
+ 43312 b135 0A       		.byte	0xa
+ 43313 b136 0F       		.byte	0xf
+ 43314 b137 04       		.byte	0x4
+ 43315 b138 09       		.byte	0x9
+ 43316 b139 0E       		.byte	0xe
+ 43317 b13a 03       		.byte	0x3
+ 43318 b13b 08       		.byte	0x8
+ 43319 b13c 0D       		.byte	0xd
+ 43320 b13d 02       		.byte	0x2
+ 43321 b13e 07       		.byte	0x7
+ 43322 b13f 0C       		.byte	0xc
+ 43323 b140 01       		.byte	0x1
+ 43324 b141 06       		.byte	0x6
+ 43325 b142 0B       		.byte	0xb
+ 43326 b143 00       		.byte	0x0
+ 43327 b144 25       		.uleb128 0x25
+ 43328 b145 00000000 		.long	.LASF371
+ 43329 b149 02       		.byte	0x2
+ 43330 b14a 1304     		.value	0x413
+ 43331 b14c 01       		.byte	0x1
+ 43332 b14d B1010000 		.long	0x1b1
+ 43333 b151 03       		.byte	0x3
+ 43334 b152 A8B10000 		.long	0xb1a8
+ 43335 b156 26       		.uleb128 0x26
+ 43336 b157 00000000 		.long	.LASF66
+ 43337 b15b 02       		.byte	0x2
+ 43338 b15c 1304     		.value	0x413
+ 43339 b15e B1010000 		.long	0x1b1
+ 43340 b162 28       		.uleb128 0x28
+ 43341 b163 633000   		.string	"c0"
+ 43342 b166 02       		.byte	0x2
+ 43343 b167 1504     		.value	0x415
+ 43344 b169 B1010000 		.long	0x1b1
+ 43345 b16d 28       		.uleb128 0x28
+ 43346 b16e 633100   		.string	"c1"
+ 43347 b171 02       		.byte	0x2
+ 43348 b172 1504     		.value	0x415
+ 43349 b174 B1010000 		.long	0x1b1
+ 43350 b178 28       		.uleb128 0x28
+ 43351 b179 633200   		.string	"c2"
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1117
+
+
+ 43352 b17c 02       		.byte	0x2
+ 43353 b17d 1504     		.value	0x415
+ 43354 b17f B1010000 		.long	0x1b1
+ 43355 b183 28       		.uleb128 0x28
+ 43356 b184 633300   		.string	"c3"
+ 43357 b187 02       		.byte	0x2
+ 43358 b188 1504     		.value	0x415
+ 43359 b18a B1010000 		.long	0x1b1
+ 43360 b18e 2A       		.uleb128 0x2a
+ 43361 b18f 28       		.uleb128 0x28
+ 43362 b190 746D7000 		.string	"tmp"
+ 43363 b194 02       		.byte	0x2
+ 43364 b195 2104     		.value	0x421
+ 43365 b197 27050000 		.long	0x527
+ 43366 b19b 28       		.uleb128 0x28
+ 43367 b19c 697800   		.string	"ix"
+ 43368 b19f 02       		.byte	0x2
+ 43369 b1a0 2204     		.value	0x422
+ 43370 b1a2 6D000000 		.long	0x6d
+ 43371 b1a6 00       		.byte	0x0
+ 43372 b1a7 00       		.byte	0x0
+ 43373 b1a8 25       		.uleb128 0x25
+ 43374 b1a9 00000000 		.long	.LASF372
+ 43375 b1ad 02       		.byte	0x2
+ 43376 b1ae 0808     		.value	0x808
+ 43377 b1b0 01       		.byte	0x1
+ 43378 b1b1 B1010000 		.long	0x1b1
+ 43379 b1b5 03       		.byte	0x3
+ 43380 b1b6 1FB20000 		.long	0xb21f
+ 43381 b1ba 26       		.uleb128 0x26
+ 43382 b1bb 00000000 		.long	.LASF66
+ 43383 b1bf 02       		.byte	0x2
+ 43384 b1c0 0808     		.value	0x808
+ 43385 b1c2 B1010000 		.long	0x1b1
+ 43386 b1c6 26       		.uleb128 0x26
+ 43387 b1c7 00000000 		.long	.LASF64
+ 43388 b1cb 02       		.byte	0x2
+ 43389 b1cc 0808     		.value	0x808
+ 43390 b1ce B1010000 		.long	0x1b1
+ 43391 b1d2 29       		.uleb128 0x29
+ 43392 b1d3 E2B10000 		.long	0xb1e2
+ 43393 b1d7 28       		.uleb128 0x28
+ 43394 b1d8 7600     		.string	"v"
+ 43395 b1da 02       		.byte	0x2
+ 43396 b1db 0A08     		.value	0x80a
+ 43397 b1dd 27050000 		.long	0x527
+ 43398 b1e1 00       		.byte	0x0
+ 43399 b1e2 29       		.uleb128 0x29
+ 43400 b1e3 F2B10000 		.long	0xb1f2
+ 43401 b1e7 28       		.uleb128 0x28
+ 43402 b1e8 7600     		.string	"v"
+ 43403 b1ea 02       		.byte	0x2
+ 43404 b1eb 1108     		.value	0x811
+ 43405 b1ed 27050000 		.long	0x527
+ 43406 b1f1 00       		.byte	0x0
+ 43407 b1f2 29       		.uleb128 0x29
+ 43408 b1f3 02B20000 		.long	0xb202
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1118
+
+
+ 43409 b1f7 28       		.uleb128 0x28
+ 43410 b1f8 7600     		.string	"v"
+ 43411 b1fa 02       		.byte	0x2
+ 43412 b1fb 1508     		.value	0x815
+ 43413 b1fd 27050000 		.long	0x527
+ 43414 b201 00       		.byte	0x0
+ 43415 b202 29       		.uleb128 0x29
+ 43416 b203 12B20000 		.long	0xb212
+ 43417 b207 28       		.uleb128 0x28
+ 43418 b208 7600     		.string	"v"
+ 43419 b20a 02       		.byte	0x2
+ 43420 b20b 1908     		.value	0x819
+ 43421 b20d 27050000 		.long	0x527
+ 43422 b211 00       		.byte	0x0
+ 43423 b212 2A       		.uleb128 0x2a
+ 43424 b213 28       		.uleb128 0x28
+ 43425 b214 7600     		.string	"v"
+ 43426 b216 02       		.byte	0x2
+ 43427 b217 1A08     		.value	0x81a
+ 43428 b219 27050000 		.long	0x527
+ 43429 b21d 00       		.byte	0x0
+ 43430 b21e 00       		.byte	0x0
+ 43431 b21f 38       		.uleb128 0x38
+ 43432 b220 00000000 		.long	.LASF374
+ 43433 b224 02       		.byte	0x2
+ 43434 b225 2C08     		.value	0x82c
+ 43435 b227 01       		.byte	0x1
+ 43436 b228 B1010000 		.long	0x1b1
+ 43437 b22c 00000000 		.quad	.LFB573
+ 43437      00000000 
+ 43438 b234 00000000 		.quad	.LFE573
+ 43438      00000000 
+ 43439 b23c 00000000 		.long	.LLST8
+ 43440 b240 8CBF0000 		.long	0xbf8c
+ 43441 b244 2E       		.uleb128 0x2e
+ 43442 b245 00000000 		.long	.LASF66
+ 43443 b249 02       		.byte	0x2
+ 43444 b24a 2C08     		.value	0x82c
+ 43445 b24c B1010000 		.long	0x1b1
+ 43446 b250 03       		.byte	0x3
+ 43447 b251 91       		.byte	0x91
+ 43448 b252 906D     		.sleb128 -2416
+ 43449 b254 2F       		.uleb128 0x2f
+ 43450 b255 6B657900 		.string	"key"
+ 43451 b259 02       		.byte	0x2
+ 43452 b25a 2C08     		.value	0x82c
+ 43453 b25c 140D0000 		.long	0xd14
+ 43454 b260 03       		.byte	0x3
+ 43455 b261 91       		.byte	0x91
+ 43456 b262 886D     		.sleb128 -2424
+ 43457 b264 2F       		.uleb128 0x2f
+ 43458 b265 4E7200   		.string	"Nr"
+ 43459 b268 02       		.byte	0x2
+ 43460 b269 2D08     		.value	0x82d
+ 43461 b26b 6D000000 		.long	0x6d
+ 43462 b26f 03       		.byte	0x3
+ 43463 b270 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1119
+
+
+ 43464 b271 846D     		.sleb128 -2428
+ 43465 b273 37       		.uleb128 0x37
+ 43466 b274 697800   		.string	"ix"
+ 43467 b277 02       		.byte	0x2
+ 43468 b278 2F08     		.value	0x82f
+ 43469 b27a 6D000000 		.long	0x6d
+ 43470 b27e 03       		.byte	0x3
+ 43471 b27f 91       		.byte	0x91
+ 43472 b280 CC72     		.sleb128 -1716
+ 43473 b282 31       		.uleb128 0x31
+ 43474 b283 E7AF0000 		.long	0xafe7
+ 43475 b287 00000000 		.quad	.LBB2547
+ 43475      00000000 
+ 43476 b28f 00000000 		.quad	.LBE2547
+ 43476      00000000 
+ 43477 b297 02       		.byte	0x2
+ 43478 b298 3108     		.value	0x831
+ 43479 b29a 64B30000 		.long	0xb364
+ 43480 b29e 32       		.uleb128 0x32
+ 43481 b29f 05B00000 		.long	0xb005
+ 43482 b2a3 03       		.byte	0x3
+ 43483 b2a4 91       		.byte	0x91
+ 43484 b2a5 D072     		.sleb128 -1712
+ 43485 b2a7 32       		.uleb128 0x32
+ 43486 b2a8 F9AF0000 		.long	0xaff9
+ 43487 b2ac 03       		.byte	0x3
+ 43488 b2ad 91       		.byte	0x91
+ 43489 b2ae E072     		.sleb128 -1696
+ 43490 b2b0 36       		.uleb128 0x36
+ 43491 b2b1 00000000 		.quad	.LBB2549
+ 43491      00000000 
+ 43492 b2b9 00000000 		.quad	.LBE2549
+ 43492      00000000 
+ 43493 b2c1 CFB20000 		.long	0xb2cf
+ 43494 b2c5 34       		.uleb128 0x34
+ 43495 b2c6 16B00000 		.long	0xb016
+ 43496 b2ca 03       		.byte	0x3
+ 43497 b2cb 91       		.byte	0x91
+ 43498 b2cc C06D     		.sleb128 -2368
+ 43499 b2ce 00       		.byte	0x0
+ 43500 b2cf 36       		.uleb128 0x36
+ 43501 b2d0 00000000 		.quad	.LBB2550
+ 43501      00000000 
+ 43502 b2d8 00000000 		.quad	.LBE2550
+ 43502      00000000 
+ 43503 b2e0 EEB20000 		.long	0xb2ee
+ 43504 b2e4 34       		.uleb128 0x34
+ 43505 b2e5 26B00000 		.long	0xb026
+ 43506 b2e9 03       		.byte	0x3
+ 43507 b2ea 91       		.byte	0x91
+ 43508 b2eb B06D     		.sleb128 -2384
+ 43509 b2ed 00       		.byte	0x0
+ 43510 b2ee 31       		.uleb128 0x31
+ 43511 b2ef 3EB00000 		.long	0xb03e
+ 43512 b2f3 00000000 		.quad	.LBB2551
+ 43512      00000000 
+ 43513 b2fb 00000000 		.quad	.LBE2551
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1120
+
+
+ 43513      00000000 
+ 43514 b303 02       		.byte	0x2
+ 43515 b304 CE07     		.value	0x7ce
+ 43516 b306 48B30000 		.long	0xb348
+ 43517 b30a 32       		.uleb128 0x32
+ 43518 b30b 5CB00000 		.long	0xb05c
+ 43519 b30f 03       		.byte	0x3
+ 43520 b310 91       		.byte	0x91
+ 43521 b311 F072     		.sleb128 -1680
+ 43522 b313 32       		.uleb128 0x32
+ 43523 b314 50B00000 		.long	0xb050
+ 43524 b318 03       		.byte	0x3
+ 43525 b319 91       		.byte	0x91
+ 43526 b31a 8073     		.sleb128 -1664
+ 43527 b31c 35       		.uleb128 0x35
+ 43528 b31d 520E0000 		.long	0xe52
+ 43529 b321 00000000 		.quad	.LBB2553
+ 43529      00000000 
+ 43530 b329 00000000 		.quad	.LBE2553
+ 43530      00000000 
+ 43531 b331 02       		.byte	0x2
+ 43532 b332 2302     		.value	0x223
+ 43533 b334 32       		.uleb128 0x32
+ 43534 b335 6D0E0000 		.long	0xe6d
+ 43535 b339 03       		.byte	0x3
+ 43536 b33a 91       		.byte	0x91
+ 43537 b33b 9073     		.sleb128 -1648
+ 43538 b33d 32       		.uleb128 0x32
+ 43539 b33e 630E0000 		.long	0xe63
+ 43540 b342 03       		.byte	0x3
+ 43541 b343 91       		.byte	0x91
+ 43542 b344 A073     		.sleb128 -1632
+ 43543 b346 00       		.byte	0x0
+ 43544 b347 00       		.byte	0x0
+ 43545 b348 33       		.uleb128 0x33
+ 43546 b349 00000000 		.quad	.LBB2555
+ 43546      00000000 
+ 43547 b351 00000000 		.quad	.LBE2555
+ 43547      00000000 
+ 43548 b359 34       		.uleb128 0x34
+ 43549 b35a 32B00000 		.long	0xb032
+ 43550 b35e 03       		.byte	0x3
+ 43551 b35f 91       		.byte	0x91
+ 43552 b360 A06D     		.sleb128 -2400
+ 43553 b362 00       		.byte	0x0
+ 43554 b363 00       		.byte	0x0
+ 43555 b364 31       		.uleb128 0x31
+ 43556 b365 69B00000 		.long	0xb069
+ 43557 b369 00000000 		.quad	.LBB2556
+ 43557      00000000 
+ 43558 b371 00000000 		.quad	.LBE2556
+ 43558      00000000 
+ 43559 b379 02       		.byte	0x2
+ 43560 b37a 3408     		.value	0x834
+ 43561 b37c 57BB0000 		.long	0xbb57
+ 43562 b380 32       		.uleb128 0x32
+ 43563 b381 87B00000 		.long	0xb087
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1121
+
+
+ 43564 b385 03       		.byte	0x3
+ 43565 b386 91       		.byte	0x91
+ 43566 b387 B073     		.sleb128 -1616
+ 43567 b389 32       		.uleb128 0x32
+ 43568 b38a 7BB00000 		.long	0xb07b
+ 43569 b38e 03       		.byte	0x3
+ 43570 b38f 91       		.byte	0x91
+ 43571 b390 C073     		.sleb128 -1600
+ 43572 b392 33       		.uleb128 0x33
+ 43573 b393 00000000 		.quad	.LBB2557
+ 43573      00000000 
+ 43574 b39b 00000000 		.quad	.LBE2557
+ 43574      00000000 
+ 43575 b3a3 34       		.uleb128 0x34
+ 43576 b3a4 93B00000 		.long	0xb093
+ 43577 b3a8 03       		.byte	0x3
+ 43578 b3a9 91       		.byte	0x91
+ 43579 b3aa E073     		.sleb128 -1568
+ 43580 b3ac 34       		.uleb128 0x34
+ 43581 b3ad 9FB00000 		.long	0xb09f
+ 43582 b3b1 03       		.byte	0x3
+ 43583 b3b2 91       		.byte	0x91
+ 43584 b3b3 D073     		.sleb128 -1584
+ 43585 b3b5 36       		.uleb128 0x36
+ 43586 b3b6 00000000 		.quad	.LBB2558
+ 43586      00000000 
+ 43587 b3be 00000000 		.quad	.LBE2558
+ 43587      00000000 
+ 43588 b3c6 D4B30000 		.long	0xb3d4
+ 43589 b3ca 34       		.uleb128 0x34
+ 43590 b3cb B0B00000 		.long	0xb0b0
+ 43591 b3cf 03       		.byte	0x3
+ 43592 b3d0 91       		.byte	0x91
+ 43593 b3d1 A06E     		.sleb128 -2272
+ 43594 b3d3 00       		.byte	0x0
+ 43595 b3d4 31       		.uleb128 0x31
+ 43596 b3d5 910C0000 		.long	0xc91
+ 43597 b3d9 00000000 		.quad	.LBB2559
+ 43597      00000000 
+ 43598 b3e1 00000000 		.quad	.LBE2559
+ 43598      00000000 
+ 43599 b3e9 02       		.byte	0x2
+ 43600 b3ea ED07     		.value	0x7ed
+ 43601 b3ec 44B60000 		.long	0xb644
+ 43602 b3f0 32       		.uleb128 0x32
+ 43603 b3f1 A30C0000 		.long	0xca3
+ 43604 b3f5 03       		.byte	0x3
+ 43605 b3f6 91       		.byte	0x91
+ 43606 b3f7 F073     		.sleb128 -1552
+ 43607 b3f9 35       		.uleb128 0x35
+ 43608 b3fa B00C0000 		.long	0xcb0
+ 43609 b3fe 00000000 		.quad	.LBB2561
+ 43609      00000000 
+ 43610 b406 00000000 		.quad	.LBE2561
+ 43610      00000000 
+ 43611 b40e 02       		.byte	0x2
+ 43612 b40f 7D03     		.value	0x37d
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1122
+
+
+ 43613 b411 32       		.uleb128 0x32
+ 43614 b412 CE0C0000 		.long	0xcce
+ 43615 b416 03       		.byte	0x3
+ 43616 b417 91       		.byte	0x91
+ 43617 b418 8874     		.sleb128 -1528
+ 43618 b41a 32       		.uleb128 0x32
+ 43619 b41b C20C0000 		.long	0xcc2
+ 43620 b41f 03       		.byte	0x3
+ 43621 b420 91       		.byte	0x91
+ 43622 b421 9074     		.sleb128 -1520
+ 43623 b423 33       		.uleb128 0x33
+ 43624 b424 00000000 		.quad	.LBB2562
+ 43624      00000000 
+ 43625 b42c 00000000 		.quad	.LBE2562
+ 43625      00000000 
+ 43626 b434 34       		.uleb128 0x34
+ 43627 b435 DA0C0000 		.long	0xcda
+ 43628 b439 03       		.byte	0x3
+ 43629 b43a 91       		.byte	0x91
+ 43630 b43b E074     		.sleb128 -1440
+ 43631 b43d 34       		.uleb128 0x34
+ 43632 b43e E50C0000 		.long	0xce5
+ 43633 b442 03       		.byte	0x3
+ 43634 b443 91       		.byte	0x91
+ 43635 b444 D074     		.sleb128 -1456
+ 43636 b446 34       		.uleb128 0x34
+ 43637 b447 F00C0000 		.long	0xcf0
+ 43638 b44b 03       		.byte	0x3
+ 43639 b44c 91       		.byte	0x91
+ 43640 b44d C074     		.sleb128 -1472
+ 43641 b44f 34       		.uleb128 0x34
+ 43642 b450 FC0C0000 		.long	0xcfc
+ 43643 b454 03       		.byte	0x3
+ 43644 b455 91       		.byte	0x91
+ 43645 b456 B074     		.sleb128 -1488
+ 43646 b458 34       		.uleb128 0x34
+ 43647 b459 080D0000 		.long	0xd08
+ 43648 b45d 03       		.byte	0x3
+ 43649 b45e 91       		.byte	0x91
+ 43650 b45f AC74     		.sleb128 -1492
+ 43651 b461 31       		.uleb128 0x31
+ 43652 b462 1F0D0000 		.long	0xd1f
+ 43653 b466 00000000 		.quad	.LBB2563
+ 43653      00000000 
+ 43654 b46e 00000000 		.quad	.LBE2563
+ 43654      00000000 
+ 43655 b476 02       		.byte	0x2
+ 43656 b477 5603     		.value	0x356
+ 43657 b479 90B40000 		.long	0xb490
+ 43658 b47d 32       		.uleb128 0x32
+ 43659 b47e 3A0D0000 		.long	0xd3a
+ 43660 b482 03       		.byte	0x3
+ 43661 b483 91       		.byte	0x91
+ 43662 b484 F074     		.sleb128 -1424
+ 43663 b486 32       		.uleb128 0x32
+ 43664 b487 300D0000 		.long	0xd30
+ 43665 b48b 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1123
+
+
+ 43666 b48c 91       		.byte	0x91
+ 43667 b48d 8075     		.sleb128 -1408
+ 43668 b48f 00       		.byte	0x0
+ 43669 b490 31       		.uleb128 0x31
+ 43670 b491 450D0000 		.long	0xd45
+ 43671 b495 00000000 		.quad	.LBB2565
+ 43671      00000000 
+ 43672 b49d 00000000 		.quad	.LBE2565
+ 43672      00000000 
+ 43673 b4a5 02       		.byte	0x2
+ 43674 b4a6 5E03     		.value	0x35e
+ 43675 b4a8 BFB40000 		.long	0xb4bf
+ 43676 b4ac 32       		.uleb128 0x32
+ 43677 b4ad 620D0000 		.long	0xd62
+ 43678 b4b1 03       		.byte	0x3
+ 43679 b4b2 91       		.byte	0x91
+ 43680 b4b3 9075     		.sleb128 -1392
+ 43681 b4b5 32       		.uleb128 0x32
+ 43682 b4b6 570D0000 		.long	0xd57
+ 43683 b4ba 03       		.byte	0x3
+ 43684 b4bb 91       		.byte	0x91
+ 43685 b4bc A075     		.sleb128 -1376
+ 43686 b4be 00       		.byte	0x0
+ 43687 b4bf 31       		.uleb128 0x31
+ 43688 b4c0 6E0D0000 		.long	0xd6e
+ 43689 b4c4 00000000 		.quad	.LBB2567
+ 43689      00000000 
+ 43690 b4cc 00000000 		.quad	.LBE2567
+ 43690      00000000 
+ 43691 b4d4 02       		.byte	0x2
+ 43692 b4d5 6403     		.value	0x364
+ 43693 b4d7 24B50000 		.long	0xb524
+ 43694 b4db 32       		.uleb128 0x32
+ 43695 b4dc 8C0D0000 		.long	0xd8c
+ 43696 b4e0 03       		.byte	0x3
+ 43697 b4e1 91       		.byte	0x91
+ 43698 b4e2 B075     		.sleb128 -1360
+ 43699 b4e4 32       		.uleb128 0x32
+ 43700 b4e5 800D0000 		.long	0xd80
+ 43701 b4e9 03       		.byte	0x3
+ 43702 b4ea 91       		.byte	0x91
+ 43703 b4eb C075     		.sleb128 -1344
+ 43704 b4ed 33       		.uleb128 0x33
+ 43705 b4ee 00000000 		.quad	.LBB2568
+ 43705      00000000 
+ 43706 b4f6 00000000 		.quad	.LBE2568
+ 43706      00000000 
+ 43707 b4fe 34       		.uleb128 0x34
+ 43708 b4ff 980D0000 		.long	0xd98
+ 43709 b503 03       		.byte	0x3
+ 43710 b504 91       		.byte	0x91
+ 43711 b505 D06E     		.sleb128 -2224
+ 43712 b507 34       		.uleb128 0x34
+ 43713 b508 A40D0000 		.long	0xda4
+ 43714 b50c 03       		.byte	0x3
+ 43715 b50d 91       		.byte	0x91
+ 43716 b50e C06E     		.sleb128 -2240
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1124
+
+
+ 43717 b510 34       		.uleb128 0x34
+ 43718 b511 AF0D0000 		.long	0xdaf
+ 43719 b515 03       		.byte	0x3
+ 43720 b516 91       		.byte	0x91
+ 43721 b517 B06E     		.sleb128 -2256
+ 43722 b519 34       		.uleb128 0x34
+ 43723 b51a BB0D0000 		.long	0xdbb
+ 43724 b51e 03       		.byte	0x3
+ 43725 b51f 91       		.byte	0x91
+ 43726 b520 DC75     		.sleb128 -1316
+ 43727 b522 00       		.byte	0x0
+ 43728 b523 00       		.byte	0x0
+ 43729 b524 31       		.uleb128 0x31
+ 43730 b525 C70D0000 		.long	0xdc7
+ 43731 b529 00000000 		.quad	.LBB2569
+ 43731      00000000 
+ 43732 b531 00000000 		.quad	.LBE2569
+ 43732      00000000 
+ 43733 b539 02       		.byte	0x2
+ 43734 b53a 6603     		.value	0x366
+ 43735 b53c 53B50000 		.long	0xb553
+ 43736 b540 32       		.uleb128 0x32
+ 43737 b541 E20D0000 		.long	0xde2
+ 43738 b545 03       		.byte	0x3
+ 43739 b546 91       		.byte	0x91
+ 43740 b547 E075     		.sleb128 -1312
+ 43741 b549 32       		.uleb128 0x32
+ 43742 b54a D80D0000 		.long	0xdd8
+ 43743 b54e 03       		.byte	0x3
+ 43744 b54f 91       		.byte	0x91
+ 43745 b550 F075     		.sleb128 -1296
+ 43746 b552 00       		.byte	0x0
+ 43747 b553 31       		.uleb128 0x31
+ 43748 b554 6E0D0000 		.long	0xd6e
+ 43749 b558 00000000 		.quad	.LBB2571
+ 43749      00000000 
+ 43750 b560 00000000 		.quad	.LBE2571
+ 43750      00000000 
+ 43751 b568 02       		.byte	0x2
+ 43752 b569 6803     		.value	0x368
+ 43753 b56b B8B50000 		.long	0xb5b8
+ 43754 b56f 32       		.uleb128 0x32
+ 43755 b570 8C0D0000 		.long	0xd8c
+ 43756 b574 03       		.byte	0x3
+ 43757 b575 91       		.byte	0x91
+ 43758 b576 8076     		.sleb128 -1280
+ 43759 b578 32       		.uleb128 0x32
+ 43760 b579 800D0000 		.long	0xd80
+ 43761 b57d 03       		.byte	0x3
+ 43762 b57e 91       		.byte	0x91
+ 43763 b57f 9076     		.sleb128 -1264
+ 43764 b581 33       		.uleb128 0x33
+ 43765 b582 00000000 		.quad	.LBB2572
+ 43765      00000000 
+ 43766 b58a 00000000 		.quad	.LBE2572
+ 43766      00000000 
+ 43767 b592 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1125
+
+
+ 43768 b593 980D0000 		.long	0xd98
+ 43769 b597 03       		.byte	0x3
+ 43770 b598 91       		.byte	0x91
+ 43771 b599 806F     		.sleb128 -2176
+ 43772 b59b 34       		.uleb128 0x34
+ 43773 b59c A40D0000 		.long	0xda4
+ 43774 b5a0 03       		.byte	0x3
+ 43775 b5a1 91       		.byte	0x91
+ 43776 b5a2 F06E     		.sleb128 -2192
+ 43777 b5a4 34       		.uleb128 0x34
+ 43778 b5a5 AF0D0000 		.long	0xdaf
+ 43779 b5a9 03       		.byte	0x3
+ 43780 b5aa 91       		.byte	0x91
+ 43781 b5ab E06E     		.sleb128 -2208
+ 43782 b5ad 34       		.uleb128 0x34
+ 43783 b5ae BB0D0000 		.long	0xdbb
+ 43784 b5b2 03       		.byte	0x3
+ 43785 b5b3 91       		.byte	0x91
+ 43786 b5b4 AC76     		.sleb128 -1236
+ 43787 b5b6 00       		.byte	0x0
+ 43788 b5b7 00       		.byte	0x0
+ 43789 b5b8 31       		.uleb128 0x31
+ 43790 b5b9 C70D0000 		.long	0xdc7
+ 43791 b5bd 00000000 		.quad	.LBB2573
+ 43791      00000000 
+ 43792 b5c5 00000000 		.quad	.LBE2573
+ 43792      00000000 
+ 43793 b5cd 02       		.byte	0x2
+ 43794 b5ce 6A03     		.value	0x36a
+ 43795 b5d0 E7B50000 		.long	0xb5e7
+ 43796 b5d4 32       		.uleb128 0x32
+ 43797 b5d5 E20D0000 		.long	0xde2
+ 43798 b5d9 03       		.byte	0x3
+ 43799 b5da 91       		.byte	0x91
+ 43800 b5db B076     		.sleb128 -1232
+ 43801 b5dd 32       		.uleb128 0x32
+ 43802 b5de D80D0000 		.long	0xdd8
+ 43803 b5e2 03       		.byte	0x3
+ 43804 b5e3 91       		.byte	0x91
+ 43805 b5e4 C076     		.sleb128 -1216
+ 43806 b5e6 00       		.byte	0x0
+ 43807 b5e7 31       		.uleb128 0x31
+ 43808 b5e8 ED0D0000 		.long	0xded
+ 43809 b5ec 00000000 		.quad	.LBB2575
+ 43809      00000000 
+ 43810 b5f4 00000000 		.quad	.LBE2575
+ 43810      00000000 
+ 43811 b5fc 02       		.byte	0x2
+ 43812 b5fd 6C03     		.value	0x36c
+ 43813 b5ff 16B60000 		.long	0xb616
+ 43814 b603 32       		.uleb128 0x32
+ 43815 b604 0A0E0000 		.long	0xe0a
+ 43816 b608 03       		.byte	0x3
+ 43817 b609 91       		.byte	0x91
+ 43818 b60a D076     		.sleb128 -1200
+ 43819 b60c 32       		.uleb128 0x32
+ 43820 b60d FF0D0000 		.long	0xdff
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1126
+
+
+ 43821 b611 03       		.byte	0x3
+ 43822 b612 91       		.byte	0x91
+ 43823 b613 E076     		.sleb128 -1184
+ 43824 b615 00       		.byte	0x0
+ 43825 b616 35       		.uleb128 0x35
+ 43826 b617 1F0D0000 		.long	0xd1f
+ 43827 b61b 00000000 		.quad	.LBB2577
+ 43827      00000000 
+ 43828 b623 00000000 		.quad	.LBE2577
+ 43828      00000000 
+ 43829 b62b 02       		.byte	0x2
+ 43830 b62c 6E03     		.value	0x36e
+ 43831 b62e 32       		.uleb128 0x32
+ 43832 b62f 3A0D0000 		.long	0xd3a
+ 43833 b633 03       		.byte	0x3
+ 43834 b634 91       		.byte	0x91
+ 43835 b635 F076     		.sleb128 -1168
+ 43836 b637 32       		.uleb128 0x32
+ 43837 b638 300D0000 		.long	0xd30
+ 43838 b63c 03       		.byte	0x3
+ 43839 b63d 91       		.byte	0x91
+ 43840 b63e 8077     		.sleb128 -1152
+ 43841 b640 00       		.byte	0x0
+ 43842 b641 00       		.byte	0x0
+ 43843 b642 00       		.byte	0x0
+ 43844 b643 00       		.byte	0x0
+ 43845 b644 36       		.uleb128 0x36
+ 43846 b645 00000000 		.quad	.LBB2579
+ 43846      00000000 
+ 43847 b64d 00000000 		.quad	.LBE2579
+ 43847      00000000 
+ 43848 b655 63B60000 		.long	0xb663
+ 43849 b659 34       		.uleb128 0x34
+ 43850 b65a C0B00000 		.long	0xb0c0
+ 43851 b65e 03       		.byte	0x3
+ 43852 b65f 91       		.byte	0x91
+ 43853 b660 906E     		.sleb128 -2288
+ 43854 b662 00       		.byte	0x0
+ 43855 b663 31       		.uleb128 0x31
+ 43856 b664 08B10000 		.long	0xb108
+ 43857 b668 00000000 		.quad	.LBB2580
+ 43857      00000000 
+ 43858 b670 00000000 		.quad	.LBE2580
+ 43858      00000000 
+ 43859 b678 02       		.byte	0x2
+ 43860 b679 F107     		.value	0x7f1
+ 43861 b67b 0BB70000 		.long	0xb70b
+ 43862 b67f 32       		.uleb128 0x32
+ 43863 b680 1AB10000 		.long	0xb11a
+ 43864 b684 03       		.byte	0x3
+ 43865 b685 91       		.byte	0x91
+ 43866 b686 9077     		.sleb128 -1136
+ 43867 b688 33       		.uleb128 0x33
+ 43868 b689 00000000 		.quad	.LBB2581
+ 43868      00000000 
+ 43869 b691 00000000 		.quad	.LBE2581
+ 43869      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1127
+
+
+ 43870 b699 34       		.uleb128 0x34
+ 43871 b69a 26B10000 		.long	0xb126
+ 43872 b69e 09       		.byte	0x9
+ 43873 b69f 03       		.byte	0x3
+ 43874 b6a0 00000000 		.quad	ShiftRowTable.6741
+ 43874      00000000 
+ 43875 b6a8 35       		.uleb128 0x35
+ 43876 b6a9 6E0D0000 		.long	0xd6e
+ 43877 b6ad 00000000 		.quad	.LBB2582
+ 43877      00000000 
+ 43878 b6b5 00000000 		.quad	.LBE2582
+ 43878      00000000 
+ 43879 b6bd 02       		.byte	0x2
+ 43880 b6be 4502     		.value	0x245
+ 43881 b6c0 32       		.uleb128 0x32
+ 43882 b6c1 8C0D0000 		.long	0xd8c
+ 43883 b6c5 03       		.byte	0x3
+ 43884 b6c6 91       		.byte	0x91
+ 43885 b6c7 A077     		.sleb128 -1120
+ 43886 b6c9 32       		.uleb128 0x32
+ 43887 b6ca 800D0000 		.long	0xd80
+ 43888 b6ce 03       		.byte	0x3
+ 43889 b6cf 91       		.byte	0x91
+ 43890 b6d0 B077     		.sleb128 -1104
+ 43891 b6d2 33       		.uleb128 0x33
+ 43892 b6d3 00000000 		.quad	.LBB2583
+ 43892      00000000 
+ 43893 b6db 00000000 		.quad	.LBE2583
+ 43893      00000000 
+ 43894 b6e3 34       		.uleb128 0x34
+ 43895 b6e4 980D0000 		.long	0xd98
+ 43896 b6e8 03       		.byte	0x3
+ 43897 b6e9 91       		.byte	0x91
+ 43898 b6ea B06F     		.sleb128 -2128
+ 43899 b6ec 34       		.uleb128 0x34
+ 43900 b6ed A40D0000 		.long	0xda4
+ 43901 b6f1 03       		.byte	0x3
+ 43902 b6f2 91       		.byte	0x91
+ 43903 b6f3 A06F     		.sleb128 -2144
+ 43904 b6f5 34       		.uleb128 0x34
+ 43905 b6f6 AF0D0000 		.long	0xdaf
+ 43906 b6fa 03       		.byte	0x3
+ 43907 b6fb 91       		.byte	0x91
+ 43908 b6fc 906F     		.sleb128 -2160
+ 43909 b6fe 34       		.uleb128 0x34
+ 43910 b6ff BB0D0000 		.long	0xdbb
+ 43911 b703 03       		.byte	0x3
+ 43912 b704 91       		.byte	0x91
+ 43913 b705 CC77     		.sleb128 -1076
+ 43914 b707 00       		.byte	0x0
+ 43915 b708 00       		.byte	0x0
+ 43916 b709 00       		.byte	0x0
+ 43917 b70a 00       		.byte	0x0
+ 43918 b70b 36       		.uleb128 0x36
+ 43919 b70c 00000000 		.quad	.LBB2584
+ 43919      00000000 
+ 43920 b714 00000000 		.quad	.LBE2584
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1128
+
+
+ 43920      00000000 
+ 43921 b71c 2AB70000 		.long	0xb72a
+ 43922 b720 34       		.uleb128 0x34
+ 43923 b721 D0B00000 		.long	0xb0d0
+ 43924 b725 03       		.byte	0x3
+ 43925 b726 91       		.byte	0x91
+ 43926 b727 806E     		.sleb128 -2304
+ 43927 b729 00       		.byte	0x0
+ 43928 b72a 31       		.uleb128 0x31
+ 43929 b72b 44B10000 		.long	0xb144
+ 43930 b72f 00000000 		.quad	.LBB2585
+ 43930      00000000 
+ 43931 b737 00000000 		.quad	.LBE2585
+ 43931      00000000 
+ 43932 b73f 02       		.byte	0x2
+ 43933 b740 F507     		.value	0x7f5
+ 43934 b742 A2BA0000 		.long	0xbaa2
+ 43935 b746 32       		.uleb128 0x32
+ 43936 b747 56B10000 		.long	0xb156
+ 43937 b74b 03       		.byte	0x3
+ 43938 b74c 91       		.byte	0x91
+ 43939 b74d D077     		.sleb128 -1072
+ 43940 b74f 33       		.uleb128 0x33
+ 43941 b750 00000000 		.quad	.LBB2586
+ 43941      00000000 
+ 43942 b758 00000000 		.quad	.LBE2586
+ 43942      00000000 
+ 43943 b760 34       		.uleb128 0x34
+ 43944 b761 62B10000 		.long	0xb162
+ 43945 b765 03       		.byte	0x3
+ 43946 b766 76       		.byte	0x76
+ 43947 b767 806D     		.sleb128 -2432
+ 43948 b769 34       		.uleb128 0x34
+ 43949 b76a 6DB10000 		.long	0xb16d
+ 43950 b76e 03       		.byte	0x3
+ 43951 b76f 76       		.byte	0x76
+ 43952 b770 F06C     		.sleb128 -2448
+ 43953 b772 34       		.uleb128 0x34
+ 43954 b773 78B10000 		.long	0xb178
+ 43955 b777 03       		.byte	0x3
+ 43956 b778 76       		.byte	0x76
+ 43957 b779 E06C     		.sleb128 -2464
+ 43958 b77b 34       		.uleb128 0x34
+ 43959 b77c 83B10000 		.long	0xb183
+ 43960 b780 03       		.byte	0x3
+ 43961 b781 76       		.byte	0x76
+ 43962 b782 D06C     		.sleb128 -2480
+ 43963 b784 31       		.uleb128 0x31
+ 43964 b785 160E0000 		.long	0xe16
+ 43965 b789 00000000 		.quad	.LBB2587
+ 43965      00000000 
+ 43966 b791 00000000 		.quad	.LBE2587
+ 43966      00000000 
+ 43967 b799 02       		.byte	0x2
+ 43968 b79a 1704     		.value	0x417
+ 43969 b79c 2CB80000 		.long	0xb82c
+ 43970 b7a0 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1129
+
+
+ 43971 b7a1 280E0000 		.long	0xe28
+ 43972 b7a5 03       		.byte	0x3
+ 43973 b7a6 91       		.byte	0x91
+ 43974 b7a7 F077     		.sleb128 -1040
+ 43975 b7a9 33       		.uleb128 0x33
+ 43976 b7aa 00000000 		.quad	.LBB2588
+ 43976      00000000 
+ 43977 b7b2 00000000 		.quad	.LBE2588
+ 43977      00000000 
+ 43978 b7ba 34       		.uleb128 0x34
+ 43979 b7bb 340E0000 		.long	0xe34
+ 43980 b7bf 09       		.byte	0x9
+ 43981 b7c0 03       		.byte	0x3
+ 43982 b7c1 00000000 		.quad	ShiftRowTable.6768
+ 43982      00000000 
+ 43983 b7c9 35       		.uleb128 0x35
+ 43984 b7ca 6E0D0000 		.long	0xd6e
+ 43985 b7ce 00000000 		.quad	.LBB2589
+ 43985      00000000 
+ 43986 b7d6 00000000 		.quad	.LBE2589
+ 43986      00000000 
+ 43987 b7de 02       		.byte	0x2
+ 43988 b7df 9B02     		.value	0x29b
+ 43989 b7e1 32       		.uleb128 0x32
+ 43990 b7e2 8C0D0000 		.long	0xd8c
+ 43991 b7e6 03       		.byte	0x3
+ 43992 b7e7 91       		.byte	0x91
+ 43993 b7e8 8078     		.sleb128 -1024
+ 43994 b7ea 32       		.uleb128 0x32
+ 43995 b7eb 800D0000 		.long	0xd80
+ 43996 b7ef 03       		.byte	0x3
+ 43997 b7f0 91       		.byte	0x91
+ 43998 b7f1 9078     		.sleb128 -1008
+ 43999 b7f3 33       		.uleb128 0x33
+ 44000 b7f4 00000000 		.quad	.LBB2590
+ 44000      00000000 
+ 44001 b7fc 00000000 		.quad	.LBE2590
+ 44001      00000000 
+ 44002 b804 34       		.uleb128 0x34
+ 44003 b805 980D0000 		.long	0xd98
+ 44004 b809 03       		.byte	0x3
+ 44005 b80a 91       		.byte	0x91
+ 44006 b80b F06F     		.sleb128 -2064
+ 44007 b80d 34       		.uleb128 0x34
+ 44008 b80e A40D0000 		.long	0xda4
+ 44009 b812 03       		.byte	0x3
+ 44010 b813 91       		.byte	0x91
+ 44011 b814 E06F     		.sleb128 -2080
+ 44012 b816 34       		.uleb128 0x34
+ 44013 b817 AF0D0000 		.long	0xdaf
+ 44014 b81b 03       		.byte	0x3
+ 44015 b81c 91       		.byte	0x91
+ 44016 b81d D06F     		.sleb128 -2096
+ 44017 b81f 34       		.uleb128 0x34
+ 44018 b820 BB0D0000 		.long	0xdbb
+ 44019 b824 03       		.byte	0x3
+ 44020 b825 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1130
+
+
+ 44021 b826 AC78     		.sleb128 -980
+ 44022 b828 00       		.byte	0x0
+ 44023 b829 00       		.byte	0x0
+ 44024 b82a 00       		.byte	0x0
+ 44025 b82b 00       		.byte	0x0
+ 44026 b82c 31       		.uleb128 0x31
+ 44027 b82d 160E0000 		.long	0xe16
+ 44028 b831 00000000 		.quad	.LBB2591
+ 44028      00000000 
+ 44029 b839 00000000 		.quad	.LBE2591
+ 44029      00000000 
+ 44030 b841 02       		.byte	0x2
+ 44031 b842 1804     		.value	0x418
+ 44032 b844 D4B80000 		.long	0xb8d4
+ 44033 b848 32       		.uleb128 0x32
+ 44034 b849 280E0000 		.long	0xe28
+ 44035 b84d 03       		.byte	0x3
+ 44036 b84e 91       		.byte	0x91
+ 44037 b84f B078     		.sleb128 -976
+ 44038 b851 33       		.uleb128 0x33
+ 44039 b852 00000000 		.quad	.LBB2592
+ 44039      00000000 
+ 44040 b85a 00000000 		.quad	.LBE2592
+ 44040      00000000 
+ 44041 b862 34       		.uleb128 0x34
+ 44042 b863 340E0000 		.long	0xe34
+ 44043 b867 09       		.byte	0x9
+ 44044 b868 03       		.byte	0x3
+ 44045 b869 00000000 		.quad	ShiftRowTable.6768
+ 44045      00000000 
+ 44046 b871 35       		.uleb128 0x35
+ 44047 b872 6E0D0000 		.long	0xd6e
+ 44048 b876 00000000 		.quad	.LBB2593
+ 44048      00000000 
+ 44049 b87e 00000000 		.quad	.LBE2593
+ 44049      00000000 
+ 44050 b886 02       		.byte	0x2
+ 44051 b887 9B02     		.value	0x29b
+ 44052 b889 32       		.uleb128 0x32
+ 44053 b88a 8C0D0000 		.long	0xd8c
+ 44054 b88e 03       		.byte	0x3
+ 44055 b88f 91       		.byte	0x91
+ 44056 b890 C078     		.sleb128 -960
+ 44057 b892 32       		.uleb128 0x32
+ 44058 b893 800D0000 		.long	0xd80
+ 44059 b897 03       		.byte	0x3
+ 44060 b898 91       		.byte	0x91
+ 44061 b899 D078     		.sleb128 -944
+ 44062 b89b 33       		.uleb128 0x33
+ 44063 b89c 00000000 		.quad	.LBB2594
+ 44063      00000000 
+ 44064 b8a4 00000000 		.quad	.LBE2594
+ 44064      00000000 
+ 44065 b8ac 34       		.uleb128 0x34
+ 44066 b8ad 980D0000 		.long	0xd98
+ 44067 b8b1 03       		.byte	0x3
+ 44068 b8b2 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1131
+
+
+ 44069 b8b3 A070     		.sleb128 -2016
+ 44070 b8b5 34       		.uleb128 0x34
+ 44071 b8b6 A40D0000 		.long	0xda4
+ 44072 b8ba 03       		.byte	0x3
+ 44073 b8bb 91       		.byte	0x91
+ 44074 b8bc 9070     		.sleb128 -2032
+ 44075 b8be 34       		.uleb128 0x34
+ 44076 b8bf AF0D0000 		.long	0xdaf
+ 44077 b8c3 03       		.byte	0x3
+ 44078 b8c4 91       		.byte	0x91
+ 44079 b8c5 8070     		.sleb128 -2048
+ 44080 b8c7 34       		.uleb128 0x34
+ 44081 b8c8 BB0D0000 		.long	0xdbb
+ 44082 b8cc 03       		.byte	0x3
+ 44083 b8cd 91       		.byte	0x91
+ 44084 b8ce EC78     		.sleb128 -916
+ 44085 b8d0 00       		.byte	0x0
+ 44086 b8d1 00       		.byte	0x0
+ 44087 b8d2 00       		.byte	0x0
+ 44088 b8d3 00       		.byte	0x0
+ 44089 b8d4 31       		.uleb128 0x31
+ 44090 b8d5 160E0000 		.long	0xe16
+ 44091 b8d9 00000000 		.quad	.LBB2595
+ 44091      00000000 
+ 44092 b8e1 00000000 		.quad	.LBE2595
+ 44092      00000000 
+ 44093 b8e9 02       		.byte	0x2
+ 44094 b8ea 1904     		.value	0x419
+ 44095 b8ec 7CB90000 		.long	0xb97c
+ 44096 b8f0 32       		.uleb128 0x32
+ 44097 b8f1 280E0000 		.long	0xe28
+ 44098 b8f5 03       		.byte	0x3
+ 44099 b8f6 91       		.byte	0x91
+ 44100 b8f7 F078     		.sleb128 -912
+ 44101 b8f9 33       		.uleb128 0x33
+ 44102 b8fa 00000000 		.quad	.LBB2596
+ 44102      00000000 
+ 44103 b902 00000000 		.quad	.LBE2596
+ 44103      00000000 
+ 44104 b90a 34       		.uleb128 0x34
+ 44105 b90b 340E0000 		.long	0xe34
+ 44106 b90f 09       		.byte	0x9
+ 44107 b910 03       		.byte	0x3
+ 44108 b911 00000000 		.quad	ShiftRowTable.6768
+ 44108      00000000 
+ 44109 b919 35       		.uleb128 0x35
+ 44110 b91a 6E0D0000 		.long	0xd6e
+ 44111 b91e 00000000 		.quad	.LBB2597
+ 44111      00000000 
+ 44112 b926 00000000 		.quad	.LBE2597
+ 44112      00000000 
+ 44113 b92e 02       		.byte	0x2
+ 44114 b92f 9B02     		.value	0x29b
+ 44115 b931 32       		.uleb128 0x32
+ 44116 b932 8C0D0000 		.long	0xd8c
+ 44117 b936 03       		.byte	0x3
+ 44118 b937 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1132
+
+
+ 44119 b938 8079     		.sleb128 -896
+ 44120 b93a 32       		.uleb128 0x32
+ 44121 b93b 800D0000 		.long	0xd80
+ 44122 b93f 03       		.byte	0x3
+ 44123 b940 91       		.byte	0x91
+ 44124 b941 9079     		.sleb128 -880
+ 44125 b943 33       		.uleb128 0x33
+ 44126 b944 00000000 		.quad	.LBB2598
+ 44126      00000000 
+ 44127 b94c 00000000 		.quad	.LBE2598
+ 44127      00000000 
+ 44128 b954 34       		.uleb128 0x34
+ 44129 b955 980D0000 		.long	0xd98
+ 44130 b959 03       		.byte	0x3
+ 44131 b95a 91       		.byte	0x91
+ 44132 b95b D070     		.sleb128 -1968
+ 44133 b95d 34       		.uleb128 0x34
+ 44134 b95e A40D0000 		.long	0xda4
+ 44135 b962 03       		.byte	0x3
+ 44136 b963 91       		.byte	0x91
+ 44137 b964 C070     		.sleb128 -1984
+ 44138 b966 34       		.uleb128 0x34
+ 44139 b967 AF0D0000 		.long	0xdaf
+ 44140 b96b 03       		.byte	0x3
+ 44141 b96c 91       		.byte	0x91
+ 44142 b96d B070     		.sleb128 -2000
+ 44143 b96f 34       		.uleb128 0x34
+ 44144 b970 BB0D0000 		.long	0xdbb
+ 44145 b974 03       		.byte	0x3
+ 44146 b975 91       		.byte	0x91
+ 44147 b976 AC79     		.sleb128 -852
+ 44148 b978 00       		.byte	0x0
+ 44149 b979 00       		.byte	0x0
+ 44150 b97a 00       		.byte	0x0
+ 44151 b97b 00       		.byte	0x0
+ 44152 b97c 31       		.uleb128 0x31
+ 44153 b97d 520E0000 		.long	0xe52
+ 44154 b981 00000000 		.quad	.LBB2599
+ 44154      00000000 
+ 44155 b989 00000000 		.quad	.LBE2599
+ 44155      00000000 
+ 44156 b991 02       		.byte	0x2
+ 44157 b992 1A04     		.value	0x41a
+ 44158 b994 ABB90000 		.long	0xb9ab
+ 44159 b998 32       		.uleb128 0x32
+ 44160 b999 6D0E0000 		.long	0xe6d
+ 44161 b99d 03       		.byte	0x3
+ 44162 b99e 91       		.byte	0x91
+ 44163 b99f B079     		.sleb128 -848
+ 44164 b9a1 32       		.uleb128 0x32
+ 44165 b9a2 630E0000 		.long	0xe63
+ 44166 b9a6 03       		.byte	0x3
+ 44167 b9a7 91       		.byte	0x91
+ 44168 b9a8 C079     		.sleb128 -832
+ 44169 b9aa 00       		.byte	0x0
+ 44170 b9ab 36       		.uleb128 0x36
+ 44171 b9ac 00000000 		.quad	.LBB2601
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1133
+
+
+ 44171      00000000 
+ 44172 b9b4 00000000 		.quad	.LBE2601
+ 44172      00000000 
+ 44173 b9bc 17BA0000 		.long	0xba17
+ 44174 b9c0 34       		.uleb128 0x34
+ 44175 b9c1 8FB10000 		.long	0xb18f
+ 44176 b9c5 03       		.byte	0x3
+ 44177 b9c6 91       		.byte	0x91
+ 44178 b9c7 C06F     		.sleb128 -2112
+ 44179 b9c9 34       		.uleb128 0x34
+ 44180 b9ca 9BB10000 		.long	0xb19b
+ 44181 b9ce 03       		.byte	0x3
+ 44182 b9cf 91       		.byte	0x91
+ 44183 b9d0 EC77     		.sleb128 -1044
+ 44184 b9d2 35       		.uleb128 0x35
+ 44185 b9d3 6EA90000 		.long	0xa96e
+ 44186 b9d7 00000000 		.quad	.LBB2602
+ 44186      00000000 
+ 44187 b9df 00000000 		.quad	.LBE2602
+ 44187      00000000 
+ 44188 b9e7 02       		.byte	0x2
+ 44189 b9e8 2704     		.value	0x427
+ 44190 b9ea 32       		.uleb128 0x32
+ 44191 b9eb 80A90000 		.long	0xa980
+ 44192 b9ef 03       		.byte	0x3
+ 44193 b9f0 91       		.byte	0x91
+ 44194 b9f1 DE79     		.sleb128 -802
+ 44195 b9f3 35       		.uleb128 0x35
+ 44196 b9f4 8BA90000 		.long	0xa98b
+ 44197 b9f8 00000000 		.quad	.LBB2604
+ 44197      00000000 
+ 44198 ba00 00000000 		.quad	.LBE2604
+ 44198      00000000 
+ 44199 ba08 02       		.byte	0x2
+ 44200 ba09 F403     		.value	0x3f4
+ 44201 ba0b 32       		.uleb128 0x32
+ 44202 ba0c 9DA90000 		.long	0xa99d
+ 44203 ba10 03       		.byte	0x3
+ 44204 ba11 91       		.byte	0x91
+ 44205 ba12 DF79     		.sleb128 -801
+ 44206 ba14 00       		.byte	0x0
+ 44207 ba15 00       		.byte	0x0
+ 44208 ba16 00       		.byte	0x0
+ 44209 ba17 31       		.uleb128 0x31
+ 44210 ba18 520E0000 		.long	0xe52
+ 44211 ba1c 00000000 		.quad	.LBB2606
+ 44211      00000000 
+ 44212 ba24 00000000 		.quad	.LBE2606
+ 44212      00000000 
+ 44213 ba2c 02       		.byte	0x2
+ 44214 ba2d 2B04     		.value	0x42b
+ 44215 ba2f 46BA0000 		.long	0xba46
+ 44216 ba33 32       		.uleb128 0x32
+ 44217 ba34 6D0E0000 		.long	0xe6d
+ 44218 ba38 03       		.byte	0x3
+ 44219 ba39 91       		.byte	0x91
+ 44220 ba3a E079     		.sleb128 -800
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1134
+
+
+ 44221 ba3c 32       		.uleb128 0x32
+ 44222 ba3d 630E0000 		.long	0xe63
+ 44223 ba41 03       		.byte	0x3
+ 44224 ba42 91       		.byte	0x91
+ 44225 ba43 F079     		.sleb128 -784
+ 44226 ba45 00       		.byte	0x0
+ 44227 ba46 31       		.uleb128 0x31
+ 44228 ba47 520E0000 		.long	0xe52
+ 44229 ba4b 00000000 		.quad	.LBB2608
+ 44229      00000000 
+ 44230 ba53 00000000 		.quad	.LBE2608
+ 44230      00000000 
+ 44231 ba5b 02       		.byte	0x2
+ 44232 ba5c 2C04     		.value	0x42c
+ 44233 ba5e 75BA0000 		.long	0xba75
+ 44234 ba62 32       		.uleb128 0x32
+ 44235 ba63 6D0E0000 		.long	0xe6d
+ 44236 ba67 03       		.byte	0x3
+ 44237 ba68 91       		.byte	0x91
+ 44238 ba69 807A     		.sleb128 -768
+ 44239 ba6b 32       		.uleb128 0x32
+ 44240 ba6c 630E0000 		.long	0xe63
+ 44241 ba70 03       		.byte	0x3
+ 44242 ba71 91       		.byte	0x91
+ 44243 ba72 907A     		.sleb128 -752
+ 44244 ba74 00       		.byte	0x0
+ 44245 ba75 35       		.uleb128 0x35
+ 44246 ba76 520E0000 		.long	0xe52
+ 44247 ba7a 00000000 		.quad	.LBB2610
+ 44247      00000000 
+ 44248 ba82 00000000 		.quad	.LBE2610
+ 44248      00000000 
+ 44249 ba8a 02       		.byte	0x2
+ 44250 ba8b 2D04     		.value	0x42d
+ 44251 ba8d 32       		.uleb128 0x32
+ 44252 ba8e 6D0E0000 		.long	0xe6d
+ 44253 ba92 03       		.byte	0x3
+ 44254 ba93 91       		.byte	0x91
+ 44255 ba94 A07A     		.sleb128 -736
+ 44256 ba96 32       		.uleb128 0x32
+ 44257 ba97 630E0000 		.long	0xe63
+ 44258 ba9b 03       		.byte	0x3
+ 44259 ba9c 91       		.byte	0x91
+ 44260 ba9d B07A     		.sleb128 -720
+ 44261 ba9f 00       		.byte	0x0
+ 44262 baa0 00       		.byte	0x0
+ 44263 baa1 00       		.byte	0x0
+ 44264 baa2 36       		.uleb128 0x36
+ 44265 baa3 00000000 		.quad	.LBB2612
+ 44265      00000000 
+ 44266 baab 00000000 		.quad	.LBE2612
+ 44266      00000000 
+ 44267 bab3 C1BA0000 		.long	0xbac1
+ 44268 bab7 34       		.uleb128 0x34
+ 44269 bab8 E0B00000 		.long	0xb0e0
+ 44270 babc 03       		.byte	0x3
+ 44271 babd 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1135
+
+
+ 44272 babe F06D     		.sleb128 -2320
+ 44273 bac0 00       		.byte	0x0
+ 44274 bac1 31       		.uleb128 0x31
+ 44275 bac2 3EB00000 		.long	0xb03e
+ 44276 bac6 00000000 		.quad	.LBB2613
+ 44276      00000000 
+ 44277 bace 00000000 		.quad	.LBE2613
+ 44277      00000000 
+ 44278 bad6 02       		.byte	0x2
+ 44279 bad7 FA07     		.value	0x7fa
+ 44280 bad9 1BBB0000 		.long	0xbb1b
+ 44281 badd 32       		.uleb128 0x32
+ 44282 bade 5CB00000 		.long	0xb05c
+ 44283 bae2 03       		.byte	0x3
+ 44284 bae3 91       		.byte	0x91
+ 44285 bae4 C07A     		.sleb128 -704
+ 44286 bae6 32       		.uleb128 0x32
+ 44287 bae7 50B00000 		.long	0xb050
+ 44288 baeb 03       		.byte	0x3
+ 44289 baec 91       		.byte	0x91
+ 44290 baed D07A     		.sleb128 -688
+ 44291 baef 35       		.uleb128 0x35
+ 44292 baf0 520E0000 		.long	0xe52
+ 44293 baf4 00000000 		.quad	.LBB2615
+ 44293      00000000 
+ 44294 bafc 00000000 		.quad	.LBE2615
+ 44294      00000000 
+ 44295 bb04 02       		.byte	0x2
+ 44296 bb05 2302     		.value	0x223
+ 44297 bb07 32       		.uleb128 0x32
+ 44298 bb08 6D0E0000 		.long	0xe6d
+ 44299 bb0c 03       		.byte	0x3
+ 44300 bb0d 91       		.byte	0x91
+ 44301 bb0e E07A     		.sleb128 -672
+ 44302 bb10 32       		.uleb128 0x32
+ 44303 bb11 630E0000 		.long	0xe63
+ 44304 bb15 03       		.byte	0x3
+ 44305 bb16 91       		.byte	0x91
+ 44306 bb17 F07A     		.sleb128 -656
+ 44307 bb19 00       		.byte	0x0
+ 44308 bb1a 00       		.byte	0x0
+ 44309 bb1b 36       		.uleb128 0x36
+ 44310 bb1c 00000000 		.quad	.LBB2617
+ 44310      00000000 
+ 44311 bb24 00000000 		.quad	.LBE2617
+ 44311      00000000 
+ 44312 bb2c 3ABB0000 		.long	0xbb3a
+ 44313 bb30 34       		.uleb128 0x34
+ 44314 bb31 F0B00000 		.long	0xb0f0
+ 44315 bb35 03       		.byte	0x3
+ 44316 bb36 91       		.byte	0x91
+ 44317 bb37 E06D     		.sleb128 -2336
+ 44318 bb39 00       		.byte	0x0
+ 44319 bb3a 33       		.uleb128 0x33
+ 44320 bb3b 00000000 		.quad	.LBB2618
+ 44320      00000000 
+ 44321 bb43 00000000 		.quad	.LBE2618
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1136
+
+
+ 44321      00000000 
+ 44322 bb4b 34       		.uleb128 0x34
+ 44323 bb4c FCB00000 		.long	0xb0fc
+ 44324 bb50 03       		.byte	0x3
+ 44325 bb51 91       		.byte	0x91
+ 44326 bb52 D06D     		.sleb128 -2352
+ 44327 bb54 00       		.byte	0x0
+ 44328 bb55 00       		.byte	0x0
+ 44329 bb56 00       		.byte	0x0
+ 44330 bb57 35       		.uleb128 0x35
+ 44331 bb58 A8B10000 		.long	0xb1a8
+ 44332 bb5c 00000000 		.quad	.LBB2619
+ 44332      00000000 
+ 44333 bb64 00000000 		.quad	.LBE2619
+ 44333      00000000 
+ 44334 bb6c 02       		.byte	0x2
+ 44335 bb6d 3608     		.value	0x836
+ 44336 bb6f 32       		.uleb128 0x32
+ 44337 bb70 C6B10000 		.long	0xb1c6
+ 44338 bb74 03       		.byte	0x3
+ 44339 bb75 91       		.byte	0x91
+ 44340 bb76 807B     		.sleb128 -640
+ 44341 bb78 32       		.uleb128 0x32
+ 44342 bb79 BAB10000 		.long	0xb1ba
+ 44343 bb7d 03       		.byte	0x3
+ 44344 bb7e 91       		.byte	0x91
+ 44345 bb7f 907B     		.sleb128 -624
+ 44346 bb81 36       		.uleb128 0x36
+ 44347 bb82 00000000 		.quad	.LBB2621
+ 44347      00000000 
+ 44348 bb8a 00000000 		.quad	.LBE2621
+ 44348      00000000 
+ 44349 bb92 A0BB0000 		.long	0xbba0
+ 44350 bb96 34       		.uleb128 0x34
+ 44351 bb97 D7B10000 		.long	0xb1d7
+ 44352 bb9b 03       		.byte	0x3
+ 44353 bb9c 91       		.byte	0x91
+ 44354 bb9d A071     		.sleb128 -1888
+ 44355 bb9f 00       		.byte	0x0
+ 44356 bba0 31       		.uleb128 0x31
+ 44357 bba1 910C0000 		.long	0xc91
+ 44358 bba5 00000000 		.quad	.LBB2622
+ 44358      00000000 
+ 44359 bbad 00000000 		.quad	.LBE2622
+ 44359      00000000 
+ 44360 bbb5 02       		.byte	0x2
+ 44361 bbb6 0F08     		.value	0x80f
+ 44362 bbb8 10BE0000 		.long	0xbe10
+ 44363 bbbc 32       		.uleb128 0x32
+ 44364 bbbd A30C0000 		.long	0xca3
+ 44365 bbc1 03       		.byte	0x3
+ 44366 bbc2 91       		.byte	0x91
+ 44367 bbc3 A07B     		.sleb128 -608
+ 44368 bbc5 35       		.uleb128 0x35
+ 44369 bbc6 B00C0000 		.long	0xcb0
+ 44370 bbca 00000000 		.quad	.LBB2624
+ 44370      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1137
+
+
+ 44371 bbd2 00000000 		.quad	.LBE2624
+ 44371      00000000 
+ 44372 bbda 02       		.byte	0x2
+ 44373 bbdb 7D03     		.value	0x37d
+ 44374 bbdd 32       		.uleb128 0x32
+ 44375 bbde CE0C0000 		.long	0xcce
+ 44376 bbe2 03       		.byte	0x3
+ 44377 bbe3 91       		.byte	0x91
+ 44378 bbe4 B87B     		.sleb128 -584
+ 44379 bbe6 32       		.uleb128 0x32
+ 44380 bbe7 C20C0000 		.long	0xcc2
+ 44381 bbeb 03       		.byte	0x3
+ 44382 bbec 91       		.byte	0x91
+ 44383 bbed C07B     		.sleb128 -576
+ 44384 bbef 33       		.uleb128 0x33
+ 44385 bbf0 00000000 		.quad	.LBB2625
+ 44385      00000000 
+ 44386 bbf8 00000000 		.quad	.LBE2625
+ 44386      00000000 
+ 44387 bc00 34       		.uleb128 0x34
+ 44388 bc01 DA0C0000 		.long	0xcda
+ 44389 bc05 03       		.byte	0x3
+ 44390 bc06 91       		.byte	0x91
+ 44391 bc07 907C     		.sleb128 -496
+ 44392 bc09 34       		.uleb128 0x34
+ 44393 bc0a E50C0000 		.long	0xce5
+ 44394 bc0e 03       		.byte	0x3
+ 44395 bc0f 91       		.byte	0x91
+ 44396 bc10 807C     		.sleb128 -512
+ 44397 bc12 34       		.uleb128 0x34
+ 44398 bc13 F00C0000 		.long	0xcf0
+ 44399 bc17 03       		.byte	0x3
+ 44400 bc18 91       		.byte	0x91
+ 44401 bc19 F07B     		.sleb128 -528
+ 44402 bc1b 34       		.uleb128 0x34
+ 44403 bc1c FC0C0000 		.long	0xcfc
+ 44404 bc20 03       		.byte	0x3
+ 44405 bc21 91       		.byte	0x91
+ 44406 bc22 E07B     		.sleb128 -544
+ 44407 bc24 34       		.uleb128 0x34
+ 44408 bc25 080D0000 		.long	0xd08
+ 44409 bc29 03       		.byte	0x3
+ 44410 bc2a 91       		.byte	0x91
+ 44411 bc2b DC7B     		.sleb128 -548
+ 44412 bc2d 31       		.uleb128 0x31
+ 44413 bc2e 1F0D0000 		.long	0xd1f
+ 44414 bc32 00000000 		.quad	.LBB2626
+ 44414      00000000 
+ 44415 bc3a 00000000 		.quad	.LBE2626
+ 44415      00000000 
+ 44416 bc42 02       		.byte	0x2
+ 44417 bc43 5603     		.value	0x356
+ 44418 bc45 5CBC0000 		.long	0xbc5c
+ 44419 bc49 32       		.uleb128 0x32
+ 44420 bc4a 3A0D0000 		.long	0xd3a
+ 44421 bc4e 03       		.byte	0x3
+ 44422 bc4f 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1138
+
+
+ 44423 bc50 A07C     		.sleb128 -480
+ 44424 bc52 32       		.uleb128 0x32
+ 44425 bc53 300D0000 		.long	0xd30
+ 44426 bc57 03       		.byte	0x3
+ 44427 bc58 91       		.byte	0x91
+ 44428 bc59 B07C     		.sleb128 -464
+ 44429 bc5b 00       		.byte	0x0
+ 44430 bc5c 31       		.uleb128 0x31
+ 44431 bc5d 450D0000 		.long	0xd45
+ 44432 bc61 00000000 		.quad	.LBB2628
+ 44432      00000000 
+ 44433 bc69 00000000 		.quad	.LBE2628
+ 44433      00000000 
+ 44434 bc71 02       		.byte	0x2
+ 44435 bc72 5E03     		.value	0x35e
+ 44436 bc74 8BBC0000 		.long	0xbc8b
+ 44437 bc78 32       		.uleb128 0x32
+ 44438 bc79 620D0000 		.long	0xd62
+ 44439 bc7d 03       		.byte	0x3
+ 44440 bc7e 91       		.byte	0x91
+ 44441 bc7f C07C     		.sleb128 -448
+ 44442 bc81 32       		.uleb128 0x32
+ 44443 bc82 570D0000 		.long	0xd57
+ 44444 bc86 03       		.byte	0x3
+ 44445 bc87 91       		.byte	0x91
+ 44446 bc88 D07C     		.sleb128 -432
+ 44447 bc8a 00       		.byte	0x0
+ 44448 bc8b 31       		.uleb128 0x31
+ 44449 bc8c 6E0D0000 		.long	0xd6e
+ 44450 bc90 00000000 		.quad	.LBB2630
+ 44450      00000000 
+ 44451 bc98 00000000 		.quad	.LBE2630
+ 44451      00000000 
+ 44452 bca0 02       		.byte	0x2
+ 44453 bca1 6403     		.value	0x364
+ 44454 bca3 F0BC0000 		.long	0xbcf0
+ 44455 bca7 32       		.uleb128 0x32
+ 44456 bca8 8C0D0000 		.long	0xd8c
+ 44457 bcac 03       		.byte	0x3
+ 44458 bcad 91       		.byte	0x91
+ 44459 bcae E07C     		.sleb128 -416
+ 44460 bcb0 32       		.uleb128 0x32
+ 44461 bcb1 800D0000 		.long	0xd80
+ 44462 bcb5 03       		.byte	0x3
+ 44463 bcb6 91       		.byte	0x91
+ 44464 bcb7 F07C     		.sleb128 -400
+ 44465 bcb9 33       		.uleb128 0x33
+ 44466 bcba 00000000 		.quad	.LBB2631
+ 44466      00000000 
+ 44467 bcc2 00000000 		.quad	.LBE2631
+ 44467      00000000 
+ 44468 bcca 34       		.uleb128 0x34
+ 44469 bccb 980D0000 		.long	0xd98
+ 44470 bccf 03       		.byte	0x3
+ 44471 bcd0 91       		.byte	0x91
+ 44472 bcd1 D071     		.sleb128 -1840
+ 44473 bcd3 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1139
+
+
+ 44474 bcd4 A40D0000 		.long	0xda4
+ 44475 bcd8 03       		.byte	0x3
+ 44476 bcd9 91       		.byte	0x91
+ 44477 bcda C071     		.sleb128 -1856
+ 44478 bcdc 34       		.uleb128 0x34
+ 44479 bcdd AF0D0000 		.long	0xdaf
+ 44480 bce1 03       		.byte	0x3
+ 44481 bce2 91       		.byte	0x91
+ 44482 bce3 B071     		.sleb128 -1872
+ 44483 bce5 34       		.uleb128 0x34
+ 44484 bce6 BB0D0000 		.long	0xdbb
+ 44485 bcea 03       		.byte	0x3
+ 44486 bceb 91       		.byte	0x91
+ 44487 bcec 8C7D     		.sleb128 -372
+ 44488 bcee 00       		.byte	0x0
+ 44489 bcef 00       		.byte	0x0
+ 44490 bcf0 31       		.uleb128 0x31
+ 44491 bcf1 C70D0000 		.long	0xdc7
+ 44492 bcf5 00000000 		.quad	.LBB2632
+ 44492      00000000 
+ 44493 bcfd 00000000 		.quad	.LBE2632
+ 44493      00000000 
+ 44494 bd05 02       		.byte	0x2
+ 44495 bd06 6603     		.value	0x366
+ 44496 bd08 1FBD0000 		.long	0xbd1f
+ 44497 bd0c 32       		.uleb128 0x32
+ 44498 bd0d E20D0000 		.long	0xde2
+ 44499 bd11 03       		.byte	0x3
+ 44500 bd12 91       		.byte	0x91
+ 44501 bd13 907D     		.sleb128 -368
+ 44502 bd15 32       		.uleb128 0x32
+ 44503 bd16 D80D0000 		.long	0xdd8
+ 44504 bd1a 03       		.byte	0x3
+ 44505 bd1b 91       		.byte	0x91
+ 44506 bd1c A07D     		.sleb128 -352
+ 44507 bd1e 00       		.byte	0x0
+ 44508 bd1f 31       		.uleb128 0x31
+ 44509 bd20 6E0D0000 		.long	0xd6e
+ 44510 bd24 00000000 		.quad	.LBB2634
+ 44510      00000000 
+ 44511 bd2c 00000000 		.quad	.LBE2634
+ 44511      00000000 
+ 44512 bd34 02       		.byte	0x2
+ 44513 bd35 6803     		.value	0x368
+ 44514 bd37 84BD0000 		.long	0xbd84
+ 44515 bd3b 32       		.uleb128 0x32
+ 44516 bd3c 8C0D0000 		.long	0xd8c
+ 44517 bd40 03       		.byte	0x3
+ 44518 bd41 91       		.byte	0x91
+ 44519 bd42 B07D     		.sleb128 -336
+ 44520 bd44 32       		.uleb128 0x32
+ 44521 bd45 800D0000 		.long	0xd80
+ 44522 bd49 03       		.byte	0x3
+ 44523 bd4a 91       		.byte	0x91
+ 44524 bd4b C07D     		.sleb128 -320
+ 44525 bd4d 33       		.uleb128 0x33
+ 44526 bd4e 00000000 		.quad	.LBB2635
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1140
+
+
+ 44526      00000000 
+ 44527 bd56 00000000 		.quad	.LBE2635
+ 44527      00000000 
+ 44528 bd5e 34       		.uleb128 0x34
+ 44529 bd5f 980D0000 		.long	0xd98
+ 44530 bd63 03       		.byte	0x3
+ 44531 bd64 91       		.byte	0x91
+ 44532 bd65 8072     		.sleb128 -1792
+ 44533 bd67 34       		.uleb128 0x34
+ 44534 bd68 A40D0000 		.long	0xda4
+ 44535 bd6c 03       		.byte	0x3
+ 44536 bd6d 91       		.byte	0x91
+ 44537 bd6e F071     		.sleb128 -1808
+ 44538 bd70 34       		.uleb128 0x34
+ 44539 bd71 AF0D0000 		.long	0xdaf
+ 44540 bd75 03       		.byte	0x3
+ 44541 bd76 91       		.byte	0x91
+ 44542 bd77 E071     		.sleb128 -1824
+ 44543 bd79 34       		.uleb128 0x34
+ 44544 bd7a BB0D0000 		.long	0xdbb
+ 44545 bd7e 03       		.byte	0x3
+ 44546 bd7f 91       		.byte	0x91
+ 44547 bd80 DC7D     		.sleb128 -292
+ 44548 bd82 00       		.byte	0x0
+ 44549 bd83 00       		.byte	0x0
+ 44550 bd84 31       		.uleb128 0x31
+ 44551 bd85 C70D0000 		.long	0xdc7
+ 44552 bd89 00000000 		.quad	.LBB2636
+ 44552      00000000 
+ 44553 bd91 00000000 		.quad	.LBE2636
+ 44553      00000000 
+ 44554 bd99 02       		.byte	0x2
+ 44555 bd9a 6A03     		.value	0x36a
+ 44556 bd9c B3BD0000 		.long	0xbdb3
+ 44557 bda0 32       		.uleb128 0x32
+ 44558 bda1 E20D0000 		.long	0xde2
+ 44559 bda5 03       		.byte	0x3
+ 44560 bda6 91       		.byte	0x91
+ 44561 bda7 E07D     		.sleb128 -288
+ 44562 bda9 32       		.uleb128 0x32
+ 44563 bdaa D80D0000 		.long	0xdd8
+ 44564 bdae 03       		.byte	0x3
+ 44565 bdaf 91       		.byte	0x91
+ 44566 bdb0 F07D     		.sleb128 -272
+ 44567 bdb2 00       		.byte	0x0
+ 44568 bdb3 31       		.uleb128 0x31
+ 44569 bdb4 ED0D0000 		.long	0xded
+ 44570 bdb8 00000000 		.quad	.LBB2638
+ 44570      00000000 
+ 44571 bdc0 00000000 		.quad	.LBE2638
+ 44571      00000000 
+ 44572 bdc8 02       		.byte	0x2
+ 44573 bdc9 6C03     		.value	0x36c
+ 44574 bdcb E2BD0000 		.long	0xbde2
+ 44575 bdcf 32       		.uleb128 0x32
+ 44576 bdd0 0A0E0000 		.long	0xe0a
+ 44577 bdd4 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1141
+
+
+ 44578 bdd5 91       		.byte	0x91
+ 44579 bdd6 807E     		.sleb128 -256
+ 44580 bdd8 32       		.uleb128 0x32
+ 44581 bdd9 FF0D0000 		.long	0xdff
+ 44582 bddd 03       		.byte	0x3
+ 44583 bdde 91       		.byte	0x91
+ 44584 bddf 907E     		.sleb128 -240
+ 44585 bde1 00       		.byte	0x0
+ 44586 bde2 35       		.uleb128 0x35
+ 44587 bde3 1F0D0000 		.long	0xd1f
+ 44588 bde7 00000000 		.quad	.LBB2640
+ 44588      00000000 
+ 44589 bdef 00000000 		.quad	.LBE2640
+ 44589      00000000 
+ 44590 bdf7 02       		.byte	0x2
+ 44591 bdf8 6E03     		.value	0x36e
+ 44592 bdfa 32       		.uleb128 0x32
+ 44593 bdfb 3A0D0000 		.long	0xd3a
+ 44594 bdff 03       		.byte	0x3
+ 44595 be00 91       		.byte	0x91
+ 44596 be01 A07E     		.sleb128 -224
+ 44597 be03 32       		.uleb128 0x32
+ 44598 be04 300D0000 		.long	0xd30
+ 44599 be08 03       		.byte	0x3
+ 44600 be09 91       		.byte	0x91
+ 44601 be0a B07E     		.sleb128 -208
+ 44602 be0c 00       		.byte	0x0
+ 44603 be0d 00       		.byte	0x0
+ 44604 be0e 00       		.byte	0x0
+ 44605 be0f 00       		.byte	0x0
+ 44606 be10 36       		.uleb128 0x36
+ 44607 be11 00000000 		.quad	.LBB2642
+ 44607      00000000 
+ 44608 be19 00000000 		.quad	.LBE2642
+ 44608      00000000 
+ 44609 be21 2FBE0000 		.long	0xbe2f
+ 44610 be25 34       		.uleb128 0x34
+ 44611 be26 E7B10000 		.long	0xb1e7
+ 44612 be2a 03       		.byte	0x3
+ 44613 be2b 91       		.byte	0x91
+ 44614 be2c 9071     		.sleb128 -1904
+ 44615 be2e 00       		.byte	0x0
+ 44616 be2f 31       		.uleb128 0x31
+ 44617 be30 08B10000 		.long	0xb108
+ 44618 be34 00000000 		.quad	.LBB2643
+ 44618      00000000 
+ 44619 be3c 00000000 		.quad	.LBE2643
+ 44619      00000000 
+ 44620 be44 02       		.byte	0x2
+ 44621 be45 1308     		.value	0x813
+ 44622 be47 D7BE0000 		.long	0xbed7
+ 44623 be4b 32       		.uleb128 0x32
+ 44624 be4c 1AB10000 		.long	0xb11a
+ 44625 be50 03       		.byte	0x3
+ 44626 be51 91       		.byte	0x91
+ 44627 be52 C07E     		.sleb128 -192
+ 44628 be54 33       		.uleb128 0x33
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1142
+
+
+ 44629 be55 00000000 		.quad	.LBB2644
+ 44629      00000000 
+ 44630 be5d 00000000 		.quad	.LBE2644
+ 44630      00000000 
+ 44631 be65 34       		.uleb128 0x34
+ 44632 be66 26B10000 		.long	0xb126
+ 44633 be6a 09       		.byte	0x9
+ 44634 be6b 03       		.byte	0x3
+ 44635 be6c 00000000 		.quad	ShiftRowTable.6741
+ 44635      00000000 
+ 44636 be74 35       		.uleb128 0x35
+ 44637 be75 6E0D0000 		.long	0xd6e
+ 44638 be79 00000000 		.quad	.LBB2645
+ 44638      00000000 
+ 44639 be81 00000000 		.quad	.LBE2645
+ 44639      00000000 
+ 44640 be89 02       		.byte	0x2
+ 44641 be8a 4502     		.value	0x245
+ 44642 be8c 32       		.uleb128 0x32
+ 44643 be8d 8C0D0000 		.long	0xd8c
+ 44644 be91 03       		.byte	0x3
+ 44645 be92 91       		.byte	0x91
+ 44646 be93 D07E     		.sleb128 -176
+ 44647 be95 32       		.uleb128 0x32
+ 44648 be96 800D0000 		.long	0xd80
+ 44649 be9a 03       		.byte	0x3
+ 44650 be9b 91       		.byte	0x91
+ 44651 be9c E07E     		.sleb128 -160
+ 44652 be9e 33       		.uleb128 0x33
+ 44653 be9f 00000000 		.quad	.LBB2646
+ 44653      00000000 
+ 44654 bea7 00000000 		.quad	.LBE2646
+ 44654      00000000 
+ 44655 beaf 34       		.uleb128 0x34
+ 44656 beb0 980D0000 		.long	0xd98
+ 44657 beb4 03       		.byte	0x3
+ 44658 beb5 91       		.byte	0x91
+ 44659 beb6 B072     		.sleb128 -1744
+ 44660 beb8 34       		.uleb128 0x34
+ 44661 beb9 A40D0000 		.long	0xda4
+ 44662 bebd 03       		.byte	0x3
+ 44663 bebe 91       		.byte	0x91
+ 44664 bebf A072     		.sleb128 -1760
+ 44665 bec1 34       		.uleb128 0x34
+ 44666 bec2 AF0D0000 		.long	0xdaf
+ 44667 bec6 03       		.byte	0x3
+ 44668 bec7 91       		.byte	0x91
+ 44669 bec8 9072     		.sleb128 -1776
+ 44670 beca 34       		.uleb128 0x34
+ 44671 becb BB0D0000 		.long	0xdbb
+ 44672 becf 03       		.byte	0x3
+ 44673 bed0 91       		.byte	0x91
+ 44674 bed1 FC7E     		.sleb128 -132
+ 44675 bed3 00       		.byte	0x0
+ 44676 bed4 00       		.byte	0x0
+ 44677 bed5 00       		.byte	0x0
+ 44678 bed6 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1143
+
+
+ 44679 bed7 36       		.uleb128 0x36
+ 44680 bed8 00000000 		.quad	.LBB2647
+ 44680      00000000 
+ 44681 bee0 00000000 		.quad	.LBE2647
+ 44681      00000000 
+ 44682 bee8 F6BE0000 		.long	0xbef6
+ 44683 beec 34       		.uleb128 0x34
+ 44684 beed F7B10000 		.long	0xb1f7
+ 44685 bef1 03       		.byte	0x3
+ 44686 bef2 91       		.byte	0x91
+ 44687 bef3 8071     		.sleb128 -1920
+ 44688 bef5 00       		.byte	0x0
+ 44689 bef6 31       		.uleb128 0x31
+ 44690 bef7 3EB00000 		.long	0xb03e
+ 44691 befb 00000000 		.quad	.LBB2648
+ 44691      00000000 
+ 44692 bf03 00000000 		.quad	.LBE2648
+ 44692      00000000 
+ 44693 bf0b 02       		.byte	0x2
+ 44694 bf0c 1708     		.value	0x817
+ 44695 bf0e 50BF0000 		.long	0xbf50
+ 44696 bf12 32       		.uleb128 0x32
+ 44697 bf13 5CB00000 		.long	0xb05c
+ 44698 bf17 03       		.byte	0x3
+ 44699 bf18 91       		.byte	0x91
+ 44700 bf19 807F     		.sleb128 -128
+ 44701 bf1b 32       		.uleb128 0x32
+ 44702 bf1c 50B00000 		.long	0xb050
+ 44703 bf20 03       		.byte	0x3
+ 44704 bf21 91       		.byte	0x91
+ 44705 bf22 907F     		.sleb128 -112
+ 44706 bf24 35       		.uleb128 0x35
+ 44707 bf25 520E0000 		.long	0xe52
+ 44708 bf29 00000000 		.quad	.LBB2650
+ 44708      00000000 
+ 44709 bf31 00000000 		.quad	.LBE2650
+ 44709      00000000 
+ 44710 bf39 02       		.byte	0x2
+ 44711 bf3a 2302     		.value	0x223
+ 44712 bf3c 32       		.uleb128 0x32
+ 44713 bf3d 6D0E0000 		.long	0xe6d
+ 44714 bf41 03       		.byte	0x3
+ 44715 bf42 91       		.byte	0x91
+ 44716 bf43 A07F     		.sleb128 -96
+ 44717 bf45 32       		.uleb128 0x32
+ 44718 bf46 630E0000 		.long	0xe63
+ 44719 bf4a 03       		.byte	0x3
+ 44720 bf4b 91       		.byte	0x91
+ 44721 bf4c B07F     		.sleb128 -80
+ 44722 bf4e 00       		.byte	0x0
+ 44723 bf4f 00       		.byte	0x0
+ 44724 bf50 36       		.uleb128 0x36
+ 44725 bf51 00000000 		.quad	.LBB2652
+ 44725      00000000 
+ 44726 bf59 00000000 		.quad	.LBE2652
+ 44726      00000000 
+ 44727 bf61 6FBF0000 		.long	0xbf6f
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1144
+
+
+ 44728 bf65 34       		.uleb128 0x34
+ 44729 bf66 07B20000 		.long	0xb207
+ 44730 bf6a 03       		.byte	0x3
+ 44731 bf6b 91       		.byte	0x91
+ 44732 bf6c F070     		.sleb128 -1936
+ 44733 bf6e 00       		.byte	0x0
+ 44734 bf6f 33       		.uleb128 0x33
+ 44735 bf70 00000000 		.quad	.LBB2653
+ 44735      00000000 
+ 44736 bf78 00000000 		.quad	.LBE2653
+ 44736      00000000 
+ 44737 bf80 34       		.uleb128 0x34
+ 44738 bf81 13B20000 		.long	0xb213
+ 44739 bf85 03       		.byte	0x3
+ 44740 bf86 91       		.byte	0x91
+ 44741 bf87 E070     		.sleb128 -1952
+ 44742 bf89 00       		.byte	0x0
+ 44743 bf8a 00       		.byte	0x0
+ 44744 bf8b 00       		.byte	0x0
+ 44745 bf8c 25       		.uleb128 0x25
+ 44746 bf8d 00000000 		.long	.LASF375
+ 44747 bf91 02       		.byte	0x2
+ 44748 bf92 5308     		.value	0x853
+ 44749 bf94 01       		.byte	0x1
+ 44750 bf95 B1010000 		.long	0x1b1
+ 44751 bf99 03       		.byte	0x3
+ 44752 bf9a E3BF0000 		.long	0xbfe3
+ 44753 bf9e 26       		.uleb128 0x26
+ 44754 bf9f 00000000 		.long	.LASF66
+ 44755 bfa3 02       		.byte	0x2
+ 44756 bfa4 5308     		.value	0x853
+ 44757 bfa6 B1010000 		.long	0x1b1
+ 44758 bfaa 26       		.uleb128 0x26
+ 44759 bfab 00000000 		.long	.LASF64
+ 44760 bfaf 02       		.byte	0x2
+ 44761 bfb0 5308     		.value	0x853
+ 44762 bfb2 B1010000 		.long	0x1b1
+ 44763 bfb6 29       		.uleb128 0x29
+ 44764 bfb7 C6BF0000 		.long	0xbfc6
+ 44765 bfbb 28       		.uleb128 0x28
+ 44766 bfbc 7600     		.string	"v"
+ 44767 bfbe 02       		.byte	0x2
+ 44768 bfbf 5508     		.value	0x855
+ 44769 bfc1 27050000 		.long	0x527
+ 44770 bfc5 00       		.byte	0x0
+ 44771 bfc6 29       		.uleb128 0x29
+ 44772 bfc7 D6BF0000 		.long	0xbfd6
+ 44773 bfcb 28       		.uleb128 0x28
+ 44774 bfcc 7600     		.string	"v"
+ 44775 bfce 02       		.byte	0x2
+ 44776 bfcf 5908     		.value	0x859
+ 44777 bfd1 27050000 		.long	0x527
+ 44778 bfd5 00       		.byte	0x0
+ 44779 bfd6 2A       		.uleb128 0x2a
+ 44780 bfd7 28       		.uleb128 0x28
+ 44781 bfd8 7600     		.string	"v"
+ 44782 bfda 02       		.byte	0x2
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1145
+
+
+ 44783 bfdb 5A08     		.value	0x85a
+ 44784 bfdd 27050000 		.long	0x527
+ 44785 bfe1 00       		.byte	0x0
+ 44786 bfe2 00       		.byte	0x0
+ 44787 bfe3 25       		.uleb128 0x25
+ 44788 bfe4 00000000 		.long	.LASF376
+ 44789 bfe8 02       		.byte	0x2
+ 44790 bfe9 7008     		.value	0x870
+ 44791 bfeb 01       		.byte	0x1
+ 44792 bfec B1010000 		.long	0x1b1
+ 44793 bff0 03       		.byte	0x3
+ 44794 bff1 82C00000 		.long	0xc082
+ 44795 bff5 26       		.uleb128 0x26
+ 44796 bff6 00000000 		.long	.LASF66
+ 44797 bffa 02       		.byte	0x2
+ 44798 bffb 7008     		.value	0x870
+ 44799 bffd B1010000 		.long	0x1b1
+ 44800 c001 26       		.uleb128 0x26
+ 44801 c002 00000000 		.long	.LASF64
+ 44802 c006 02       		.byte	0x2
+ 44803 c007 7108     		.value	0x871
+ 44804 c009 B1010000 		.long	0x1b1
+ 44805 c00d 27       		.uleb128 0x27
+ 44806 c00e 00000000 		.long	.LASF368
+ 44807 c012 02       		.byte	0x2
+ 44808 c013 7408     		.value	0x874
+ 44809 c015 B1010000 		.long	0x1b1
+ 44810 c019 27       		.uleb128 0x27
+ 44811 c01a 00000000 		.long	.LASF369
+ 44812 c01e 02       		.byte	0x2
+ 44813 c01f 7508     		.value	0x875
+ 44814 c021 B1010000 		.long	0x1b1
+ 44815 c025 29       		.uleb128 0x29
+ 44816 c026 35C00000 		.long	0xc035
+ 44817 c02a 28       		.uleb128 0x28
+ 44818 c02b 7600     		.string	"v"
+ 44819 c02d 02       		.byte	0x2
+ 44820 c02e 7B08     		.value	0x87b
+ 44821 c030 27050000 		.long	0x527
+ 44822 c034 00       		.byte	0x0
+ 44823 c035 29       		.uleb128 0x29
+ 44824 c036 45C00000 		.long	0xc045
+ 44825 c03a 28       		.uleb128 0x28
+ 44826 c03b 7600     		.string	"v"
+ 44827 c03d 02       		.byte	0x2
+ 44828 c03e 8E08     		.value	0x88e
+ 44829 c040 27050000 		.long	0x527
+ 44830 c044 00       		.byte	0x0
+ 44831 c045 29       		.uleb128 0x29
+ 44832 c046 55C00000 		.long	0xc055
+ 44833 c04a 28       		.uleb128 0x28
+ 44834 c04b 7600     		.string	"v"
+ 44835 c04d 02       		.byte	0x2
+ 44836 c04e 9608     		.value	0x896
+ 44837 c050 27050000 		.long	0x527
+ 44838 c054 00       		.byte	0x0
+ 44839 c055 29       		.uleb128 0x29
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1146
+
+
+ 44840 c056 65C00000 		.long	0xc065
+ 44841 c05a 28       		.uleb128 0x28
+ 44842 c05b 7600     		.string	"v"
+ 44843 c05d 02       		.byte	0x2
+ 44844 c05e 9E08     		.value	0x89e
+ 44845 c060 27050000 		.long	0x527
+ 44846 c064 00       		.byte	0x0
+ 44847 c065 29       		.uleb128 0x29
+ 44848 c066 75C00000 		.long	0xc075
+ 44849 c06a 28       		.uleb128 0x28
+ 44850 c06b 7600     		.string	"v"
+ 44851 c06d 02       		.byte	0x2
+ 44852 c06e A708     		.value	0x8a7
+ 44853 c070 27050000 		.long	0x527
+ 44854 c074 00       		.byte	0x0
+ 44855 c075 2A       		.uleb128 0x2a
+ 44856 c076 28       		.uleb128 0x28
+ 44857 c077 7600     		.string	"v"
+ 44858 c079 02       		.byte	0x2
+ 44859 c07a A908     		.value	0x8a9
+ 44860 c07c 27050000 		.long	0x527
+ 44861 c080 00       		.byte	0x0
+ 44862 c081 00       		.byte	0x0
+ 44863 c082 25       		.uleb128 0x25
+ 44864 c083 00000000 		.long	.LASF377
+ 44865 c087 02       		.byte	0x2
+ 44866 c088 8603     		.value	0x386
+ 44867 c08a 01       		.byte	0x1
+ 44868 c08b B1010000 		.long	0x1b1
+ 44869 c08f 03       		.byte	0x3
+ 44870 c090 A1C00000 		.long	0xc0a1
+ 44871 c094 26       		.uleb128 0x26
+ 44872 c095 00000000 		.long	.LASF66
+ 44873 c099 02       		.byte	0x2
+ 44874 c09a 8603     		.value	0x386
+ 44875 c09c B1010000 		.long	0x1b1
+ 44876 c0a0 00       		.byte	0x0
+ 44877 c0a1 25       		.uleb128 0x25
+ 44878 c0a2 00000000 		.long	.LASF378
+ 44879 c0a6 02       		.byte	0x2
+ 44880 c0a7 5E02     		.value	0x25e
+ 44881 c0a9 01       		.byte	0x1
+ 44882 c0aa B1010000 		.long	0x1b1
+ 44883 c0ae 03       		.byte	0x3
+ 44884 c0af DDC00000 		.long	0xc0dd
+ 44885 c0b3 26       		.uleb128 0x26
+ 44886 c0b4 00000000 		.long	.LASF66
+ 44887 c0b8 02       		.byte	0x2
+ 44888 c0b9 5E02     		.value	0x25e
+ 44889 c0bb B1010000 		.long	0x1b1
+ 44890 c0bf 2C       		.uleb128 0x2c
+ 44891 c0c0 00000000 		.long	.LASF379
+ 44892 c0c4 02       		.byte	0x2
+ 44893 c0c5 6002     		.value	0x260
+ 44894 c0c7 DDC00000 		.long	0xc0dd
+ 44895 c0cb 10       		.byte	0x10
+ 44896 c0cc 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1147
+
+
+ 44897 c0cd 0D       		.byte	0xd
+ 44898 c0ce 0A       		.byte	0xa
+ 44899 c0cf 07       		.byte	0x7
+ 44900 c0d0 04       		.byte	0x4
+ 44901 c0d1 01       		.byte	0x1
+ 44902 c0d2 0E       		.byte	0xe
+ 44903 c0d3 0B       		.byte	0xb
+ 44904 c0d4 08       		.byte	0x8
+ 44905 c0d5 05       		.byte	0x5
+ 44906 c0d6 02       		.byte	0x2
+ 44907 c0d7 0F       		.byte	0xf
+ 44908 c0d8 0C       		.byte	0xc
+ 44909 c0d9 09       		.byte	0x9
+ 44910 c0da 06       		.byte	0x6
+ 44911 c0db 03       		.byte	0x3
+ 44912 c0dc 00       		.byte	0x0
+ 44913 c0dd 06       		.uleb128 0x6
+ 44914 c0de 60040000 		.long	0x460
+ 44915 c0e2 25       		.uleb128 0x25
+ 44916 c0e3 00000000 		.long	.LASF380
+ 44917 c0e7 02       		.byte	0x2
+ 44918 c0e8 BA08     		.value	0x8ba
+ 44919 c0ea 01       		.byte	0x1
+ 44920 c0eb B1010000 		.long	0x1b1
+ 44921 c0ef 03       		.byte	0x3
+ 44922 c0f0 59C10000 		.long	0xc159
+ 44923 c0f4 26       		.uleb128 0x26
+ 44924 c0f5 00000000 		.long	.LASF66
+ 44925 c0f9 02       		.byte	0x2
+ 44926 c0fa BA08     		.value	0x8ba
+ 44927 c0fc B1010000 		.long	0x1b1
+ 44928 c100 26       		.uleb128 0x26
+ 44929 c101 00000000 		.long	.LASF64
+ 44930 c105 02       		.byte	0x2
+ 44931 c106 BB08     		.value	0x8bb
+ 44932 c108 B1010000 		.long	0x1b1
+ 44933 c10c 29       		.uleb128 0x29
+ 44934 c10d 1CC10000 		.long	0xc11c
+ 44935 c111 28       		.uleb128 0x28
+ 44936 c112 7600     		.string	"v"
+ 44937 c114 02       		.byte	0x2
+ 44938 c115 BD08     		.value	0x8bd
+ 44939 c117 27050000 		.long	0x527
+ 44940 c11b 00       		.byte	0x0
+ 44941 c11c 29       		.uleb128 0x29
+ 44942 c11d 2CC10000 		.long	0xc12c
+ 44943 c121 28       		.uleb128 0x28
+ 44944 c122 7600     		.string	"v"
+ 44945 c124 02       		.byte	0x2
+ 44946 c125 C508     		.value	0x8c5
+ 44947 c127 27050000 		.long	0x527
+ 44948 c12b 00       		.byte	0x0
+ 44949 c12c 29       		.uleb128 0x29
+ 44950 c12d 3CC10000 		.long	0xc13c
+ 44951 c131 28       		.uleb128 0x28
+ 44952 c132 7600     		.string	"v"
+ 44953 c134 02       		.byte	0x2
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1148
+
+
+ 44954 c135 C908     		.value	0x8c9
+ 44955 c137 27050000 		.long	0x527
+ 44956 c13b 00       		.byte	0x0
+ 44957 c13c 29       		.uleb128 0x29
+ 44958 c13d 4CC10000 		.long	0xc14c
+ 44959 c141 28       		.uleb128 0x28
+ 44960 c142 7600     		.string	"v"
+ 44961 c144 02       		.byte	0x2
+ 44962 c145 CD08     		.value	0x8cd
+ 44963 c147 27050000 		.long	0x527
+ 44964 c14b 00       		.byte	0x0
+ 44965 c14c 2A       		.uleb128 0x2a
+ 44966 c14d 28       		.uleb128 0x28
+ 44967 c14e 7600     		.string	"v"
+ 44968 c150 02       		.byte	0x2
+ 44969 c151 CE08     		.value	0x8ce
+ 44970 c153 27050000 		.long	0x527
+ 44971 c157 00       		.byte	0x0
+ 44972 c158 00       		.byte	0x0
+ 44973 c159 38       		.uleb128 0x38
+ 44974 c15a 00000000 		.long	.LASF381
+ 44975 c15e 02       		.byte	0x2
+ 44976 c15f DD08     		.value	0x8dd
+ 44977 c161 01       		.byte	0x1
+ 44978 c162 B1010000 		.long	0x1b1
+ 44979 c166 00000000 		.quad	.LFB577
+ 44979      00000000 
+ 44980 c16e 00000000 		.quad	.LFE577
+ 44980      00000000 
+ 44981 c176 00000000 		.long	.LLST9
+ 44982 c17a 36D00000 		.long	0xd036
+ 44983 c17e 2E       		.uleb128 0x2e
+ 44984 c17f 00000000 		.long	.LASF66
+ 44985 c183 02       		.byte	0x2
+ 44986 c184 DD08     		.value	0x8dd
+ 44987 c186 B1010000 		.long	0x1b1
+ 44988 c18a 03       		.byte	0x3
+ 44989 c18b 91       		.byte	0x91
+ 44990 c18c F06B     		.sleb128 -2576
+ 44991 c18e 2F       		.uleb128 0x2f
+ 44992 c18f 6B657900 		.string	"key"
+ 44993 c193 02       		.byte	0x2
+ 44994 c194 DD08     		.value	0x8dd
+ 44995 c196 140D0000 		.long	0xd14
+ 44996 c19a 03       		.byte	0x3
+ 44997 c19b 91       		.byte	0x91
+ 44998 c19c E86B     		.sleb128 -2584
+ 44999 c19e 2F       		.uleb128 0x2f
+ 45000 c19f 4E7200   		.string	"Nr"
+ 45001 c1a2 02       		.byte	0x2
+ 45002 c1a3 DE08     		.value	0x8de
+ 45003 c1a5 6D000000 		.long	0x6d
+ 45004 c1a9 03       		.byte	0x3
+ 45005 c1aa 91       		.byte	0x91
+ 45006 c1ab E46B     		.sleb128 -2588
+ 45007 c1ad 37       		.uleb128 0x37
+ 45008 c1ae 697800   		.string	"ix"
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1149
+
+
+ 45009 c1b1 02       		.byte	0x2
+ 45010 c1b2 E008     		.value	0x8e0
+ 45011 c1b4 6D000000 		.long	0x6d
+ 45012 c1b8 03       		.byte	0x3
+ 45013 c1b9 91       		.byte	0x91
+ 45014 c1ba CC71     		.sleb128 -1844
+ 45015 c1bc 31       		.uleb128 0x31
+ 45016 c1bd 8CBF0000 		.long	0xbf8c
+ 45017 c1c1 00000000 		.quad	.LBB2777
+ 45017      00000000 
+ 45018 c1c9 00000000 		.quad	.LBE2777
+ 45018      00000000 
+ 45019 c1d1 02       		.byte	0x2
+ 45020 c1d2 E208     		.value	0x8e2
+ 45021 c1d4 9EC20000 		.long	0xc29e
+ 45022 c1d8 32       		.uleb128 0x32
+ 45023 c1d9 AABF0000 		.long	0xbfaa
+ 45024 c1dd 03       		.byte	0x3
+ 45025 c1de 91       		.byte	0x91
+ 45026 c1df D071     		.sleb128 -1840
+ 45027 c1e1 32       		.uleb128 0x32
+ 45028 c1e2 9EBF0000 		.long	0xbf9e
+ 45029 c1e6 03       		.byte	0x3
+ 45030 c1e7 91       		.byte	0x91
+ 45031 c1e8 E071     		.sleb128 -1824
+ 45032 c1ea 36       		.uleb128 0x36
+ 45033 c1eb 00000000 		.quad	.LBB2779
+ 45033      00000000 
+ 45034 c1f3 00000000 		.quad	.LBE2779
+ 45034      00000000 
+ 45035 c1fb 09C20000 		.long	0xc209
+ 45036 c1ff 34       		.uleb128 0x34
+ 45037 c200 BBBF0000 		.long	0xbfbb
+ 45038 c204 03       		.byte	0x3
+ 45039 c205 91       		.byte	0x91
+ 45040 c206 A06C     		.sleb128 -2528
+ 45041 c208 00       		.byte	0x0
+ 45042 c209 31       		.uleb128 0x31
+ 45043 c20a 3EB00000 		.long	0xb03e
+ 45044 c20e 00000000 		.quad	.LBB2780
+ 45044      00000000 
+ 45045 c216 00000000 		.quad	.LBE2780
+ 45045      00000000 
+ 45046 c21e 02       		.byte	0x2
+ 45047 c21f 5708     		.value	0x857
+ 45048 c221 63C20000 		.long	0xc263
+ 45049 c225 32       		.uleb128 0x32
+ 45050 c226 5CB00000 		.long	0xb05c
+ 45051 c22a 03       		.byte	0x3
+ 45052 c22b 91       		.byte	0x91
+ 45053 c22c F071     		.sleb128 -1808
+ 45054 c22e 32       		.uleb128 0x32
+ 45055 c22f 50B00000 		.long	0xb050
+ 45056 c233 03       		.byte	0x3
+ 45057 c234 91       		.byte	0x91
+ 45058 c235 8072     		.sleb128 -1792
+ 45059 c237 35       		.uleb128 0x35
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1150
+
+
+ 45060 c238 520E0000 		.long	0xe52
+ 45061 c23c 00000000 		.quad	.LBB2782
+ 45061      00000000 
+ 45062 c244 00000000 		.quad	.LBE2782
+ 45062      00000000 
+ 45063 c24c 02       		.byte	0x2
+ 45064 c24d 2302     		.value	0x223
+ 45065 c24f 32       		.uleb128 0x32
+ 45066 c250 6D0E0000 		.long	0xe6d
+ 45067 c254 03       		.byte	0x3
+ 45068 c255 91       		.byte	0x91
+ 45069 c256 9072     		.sleb128 -1776
+ 45070 c258 32       		.uleb128 0x32
+ 45071 c259 630E0000 		.long	0xe63
+ 45072 c25d 03       		.byte	0x3
+ 45073 c25e 91       		.byte	0x91
+ 45074 c25f A072     		.sleb128 -1760
+ 45075 c261 00       		.byte	0x0
+ 45076 c262 00       		.byte	0x0
+ 45077 c263 36       		.uleb128 0x36
+ 45078 c264 00000000 		.quad	.LBB2784
+ 45078      00000000 
+ 45079 c26c 00000000 		.quad	.LBE2784
+ 45079      00000000 
+ 45080 c274 82C20000 		.long	0xc282
+ 45081 c278 34       		.uleb128 0x34
+ 45082 c279 CBBF0000 		.long	0xbfcb
+ 45083 c27d 03       		.byte	0x3
+ 45084 c27e 91       		.byte	0x91
+ 45085 c27f 906C     		.sleb128 -2544
+ 45086 c281 00       		.byte	0x0
+ 45087 c282 33       		.uleb128 0x33
+ 45088 c283 00000000 		.quad	.LBB2785
+ 45088      00000000 
+ 45089 c28b 00000000 		.quad	.LBE2785
+ 45089      00000000 
+ 45090 c293 34       		.uleb128 0x34
+ 45091 c294 D7BF0000 		.long	0xbfd7
+ 45092 c298 03       		.byte	0x3
+ 45093 c299 91       		.byte	0x91
+ 45094 c29a 806C     		.sleb128 -2560
+ 45095 c29c 00       		.byte	0x0
+ 45096 c29d 00       		.byte	0x0
+ 45097 c29e 31       		.uleb128 0x31
+ 45098 c29f E3BF0000 		.long	0xbfe3
+ 45099 c2a3 00000000 		.quad	.LBB2786
+ 45099      00000000 
+ 45100 c2ab 00000000 		.quad	.LBE2786
+ 45100      00000000 
+ 45101 c2b3 02       		.byte	0x2
+ 45102 c2b4 E508     		.value	0x8e5
+ 45103 c2b6 01CC0000 		.long	0xcc01
+ 45104 c2ba 32       		.uleb128 0x32
+ 45105 c2bb 01C00000 		.long	0xc001
+ 45106 c2bf 03       		.byte	0x3
+ 45107 c2c0 91       		.byte	0x91
+ 45108 c2c1 B072     		.sleb128 -1744
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1151
+
+
+ 45109 c2c3 32       		.uleb128 0x32
+ 45110 c2c4 F5BF0000 		.long	0xbff5
+ 45111 c2c8 03       		.byte	0x3
+ 45112 c2c9 91       		.byte	0x91
+ 45113 c2ca C072     		.sleb128 -1728
+ 45114 c2cc 33       		.uleb128 0x33
+ 45115 c2cd 00000000 		.quad	.LBB2787
+ 45115      00000000 
+ 45116 c2d5 00000000 		.quad	.LBE2787
+ 45116      00000000 
+ 45117 c2dd 34       		.uleb128 0x34
+ 45118 c2de 0DC00000 		.long	0xc00d
+ 45119 c2e2 03       		.byte	0x3
+ 45120 c2e3 91       		.byte	0x91
+ 45121 c2e4 E072     		.sleb128 -1696
+ 45122 c2e6 34       		.uleb128 0x34
+ 45123 c2e7 19C00000 		.long	0xc019
+ 45124 c2eb 03       		.byte	0x3
+ 45125 c2ec 91       		.byte	0x91
+ 45126 c2ed D072     		.sleb128 -1712
+ 45127 c2ef 36       		.uleb128 0x36
+ 45128 c2f0 00000000 		.quad	.LBB2788
+ 45128      00000000 
+ 45129 c2f8 00000000 		.quad	.LBE2788
+ 45129      00000000 
+ 45130 c300 0EC30000 		.long	0xc30e
+ 45131 c304 34       		.uleb128 0x34
+ 45132 c305 2AC00000 		.long	0xc02a
+ 45133 c309 03       		.byte	0x3
+ 45134 c30a 91       		.byte	0x91
+ 45135 c30b 806D     		.sleb128 -2432
+ 45136 c30d 00       		.byte	0x0
+ 45137 c30e 31       		.uleb128 0x31
+ 45138 c30f 82C00000 		.long	0xc082
+ 45139 c313 00000000 		.quad	.LBB2789
+ 45139      00000000 
+ 45140 c31b 00000000 		.quad	.LBE2789
+ 45140      00000000 
+ 45141 c323 02       		.byte	0x2
+ 45142 c324 8908     		.value	0x889
+ 45143 c326 7EC50000 		.long	0xc57e
+ 45144 c32a 32       		.uleb128 0x32
+ 45145 c32b 94C00000 		.long	0xc094
+ 45146 c32f 03       		.byte	0x3
+ 45147 c330 91       		.byte	0x91
+ 45148 c331 F072     		.sleb128 -1680
+ 45149 c333 35       		.uleb128 0x35
+ 45150 c334 B00C0000 		.long	0xcb0
+ 45151 c338 00000000 		.quad	.LBB2791
+ 45151      00000000 
+ 45152 c340 00000000 		.quad	.LBE2791
+ 45152      00000000 
+ 45153 c348 02       		.byte	0x2
+ 45154 c349 8803     		.value	0x388
+ 45155 c34b 32       		.uleb128 0x32
+ 45156 c34c CE0C0000 		.long	0xcce
+ 45157 c350 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1152
+
+
+ 45158 c351 91       		.byte	0x91
+ 45159 c352 8873     		.sleb128 -1656
+ 45160 c354 32       		.uleb128 0x32
+ 45161 c355 C20C0000 		.long	0xcc2
+ 45162 c359 03       		.byte	0x3
+ 45163 c35a 91       		.byte	0x91
+ 45164 c35b 9073     		.sleb128 -1648
+ 45165 c35d 33       		.uleb128 0x33
+ 45166 c35e 00000000 		.quad	.LBB2792
+ 45166      00000000 
+ 45167 c366 00000000 		.quad	.LBE2792
+ 45167      00000000 
+ 45168 c36e 34       		.uleb128 0x34
+ 45169 c36f DA0C0000 		.long	0xcda
+ 45170 c373 03       		.byte	0x3
+ 45171 c374 91       		.byte	0x91
+ 45172 c375 E073     		.sleb128 -1568
+ 45173 c377 34       		.uleb128 0x34
+ 45174 c378 E50C0000 		.long	0xce5
+ 45175 c37c 03       		.byte	0x3
+ 45176 c37d 91       		.byte	0x91
+ 45177 c37e D073     		.sleb128 -1584
+ 45178 c380 34       		.uleb128 0x34
+ 45179 c381 F00C0000 		.long	0xcf0
+ 45180 c385 03       		.byte	0x3
+ 45181 c386 91       		.byte	0x91
+ 45182 c387 C073     		.sleb128 -1600
+ 45183 c389 34       		.uleb128 0x34
+ 45184 c38a FC0C0000 		.long	0xcfc
+ 45185 c38e 03       		.byte	0x3
+ 45186 c38f 91       		.byte	0x91
+ 45187 c390 B073     		.sleb128 -1616
+ 45188 c392 34       		.uleb128 0x34
+ 45189 c393 080D0000 		.long	0xd08
+ 45190 c397 03       		.byte	0x3
+ 45191 c398 91       		.byte	0x91
+ 45192 c399 AC73     		.sleb128 -1620
+ 45193 c39b 31       		.uleb128 0x31
+ 45194 c39c 1F0D0000 		.long	0xd1f
+ 45195 c3a0 00000000 		.quad	.LBB2793
+ 45195      00000000 
+ 45196 c3a8 00000000 		.quad	.LBE2793
+ 45196      00000000 
+ 45197 c3b0 02       		.byte	0x2
+ 45198 c3b1 5603     		.value	0x356
+ 45199 c3b3 CAC30000 		.long	0xc3ca
+ 45200 c3b7 32       		.uleb128 0x32
+ 45201 c3b8 3A0D0000 		.long	0xd3a
+ 45202 c3bc 03       		.byte	0x3
+ 45203 c3bd 91       		.byte	0x91
+ 45204 c3be F073     		.sleb128 -1552
+ 45205 c3c0 32       		.uleb128 0x32
+ 45206 c3c1 300D0000 		.long	0xd30
+ 45207 c3c5 03       		.byte	0x3
+ 45208 c3c6 91       		.byte	0x91
+ 45209 c3c7 8074     		.sleb128 -1536
+ 45210 c3c9 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1153
+
+
+ 45211 c3ca 31       		.uleb128 0x31
+ 45212 c3cb 450D0000 		.long	0xd45
+ 45213 c3cf 00000000 		.quad	.LBB2795
+ 45213      00000000 
+ 45214 c3d7 00000000 		.quad	.LBE2795
+ 45214      00000000 
+ 45215 c3df 02       		.byte	0x2
+ 45216 c3e0 5E03     		.value	0x35e
+ 45217 c3e2 F9C30000 		.long	0xc3f9
+ 45218 c3e6 32       		.uleb128 0x32
+ 45219 c3e7 620D0000 		.long	0xd62
+ 45220 c3eb 03       		.byte	0x3
+ 45221 c3ec 91       		.byte	0x91
+ 45222 c3ed 9074     		.sleb128 -1520
+ 45223 c3ef 32       		.uleb128 0x32
+ 45224 c3f0 570D0000 		.long	0xd57
+ 45225 c3f4 03       		.byte	0x3
+ 45226 c3f5 91       		.byte	0x91
+ 45227 c3f6 A074     		.sleb128 -1504
+ 45228 c3f8 00       		.byte	0x0
+ 45229 c3f9 31       		.uleb128 0x31
+ 45230 c3fa 6E0D0000 		.long	0xd6e
+ 45231 c3fe 00000000 		.quad	.LBB2797
+ 45231      00000000 
+ 45232 c406 00000000 		.quad	.LBE2797
+ 45232      00000000 
+ 45233 c40e 02       		.byte	0x2
+ 45234 c40f 6403     		.value	0x364
+ 45235 c411 5EC40000 		.long	0xc45e
+ 45236 c415 32       		.uleb128 0x32
+ 45237 c416 8C0D0000 		.long	0xd8c
+ 45238 c41a 03       		.byte	0x3
+ 45239 c41b 91       		.byte	0x91
+ 45240 c41c B074     		.sleb128 -1488
+ 45241 c41e 32       		.uleb128 0x32
+ 45242 c41f 800D0000 		.long	0xd80
+ 45243 c423 03       		.byte	0x3
+ 45244 c424 91       		.byte	0x91
+ 45245 c425 C074     		.sleb128 -1472
+ 45246 c427 33       		.uleb128 0x33
+ 45247 c428 00000000 		.quad	.LBB2798
+ 45247      00000000 
+ 45248 c430 00000000 		.quad	.LBE2798
+ 45248      00000000 
+ 45249 c438 34       		.uleb128 0x34
+ 45250 c439 980D0000 		.long	0xd98
+ 45251 c43d 03       		.byte	0x3
+ 45252 c43e 91       		.byte	0x91
+ 45253 c43f B06D     		.sleb128 -2384
+ 45254 c441 34       		.uleb128 0x34
+ 45255 c442 A40D0000 		.long	0xda4
+ 45256 c446 03       		.byte	0x3
+ 45257 c447 91       		.byte	0x91
+ 45258 c448 A06D     		.sleb128 -2400
+ 45259 c44a 34       		.uleb128 0x34
+ 45260 c44b AF0D0000 		.long	0xdaf
+ 45261 c44f 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1154
+
+
+ 45262 c450 91       		.byte	0x91
+ 45263 c451 906D     		.sleb128 -2416
+ 45264 c453 34       		.uleb128 0x34
+ 45265 c454 BB0D0000 		.long	0xdbb
+ 45266 c458 03       		.byte	0x3
+ 45267 c459 91       		.byte	0x91
+ 45268 c45a DC74     		.sleb128 -1444
+ 45269 c45c 00       		.byte	0x0
+ 45270 c45d 00       		.byte	0x0
+ 45271 c45e 31       		.uleb128 0x31
+ 45272 c45f C70D0000 		.long	0xdc7
+ 45273 c463 00000000 		.quad	.LBB2799
+ 45273      00000000 
+ 45274 c46b 00000000 		.quad	.LBE2799
+ 45274      00000000 
+ 45275 c473 02       		.byte	0x2
+ 45276 c474 6603     		.value	0x366
+ 45277 c476 8DC40000 		.long	0xc48d
+ 45278 c47a 32       		.uleb128 0x32
+ 45279 c47b E20D0000 		.long	0xde2
+ 45280 c47f 03       		.byte	0x3
+ 45281 c480 91       		.byte	0x91
+ 45282 c481 E074     		.sleb128 -1440
+ 45283 c483 32       		.uleb128 0x32
+ 45284 c484 D80D0000 		.long	0xdd8
+ 45285 c488 03       		.byte	0x3
+ 45286 c489 91       		.byte	0x91
+ 45287 c48a F074     		.sleb128 -1424
+ 45288 c48c 00       		.byte	0x0
+ 45289 c48d 31       		.uleb128 0x31
+ 45290 c48e 6E0D0000 		.long	0xd6e
+ 45291 c492 00000000 		.quad	.LBB2801
+ 45291      00000000 
+ 45292 c49a 00000000 		.quad	.LBE2801
+ 45292      00000000 
+ 45293 c4a2 02       		.byte	0x2
+ 45294 c4a3 6803     		.value	0x368
+ 45295 c4a5 F2C40000 		.long	0xc4f2
+ 45296 c4a9 32       		.uleb128 0x32
+ 45297 c4aa 8C0D0000 		.long	0xd8c
+ 45298 c4ae 03       		.byte	0x3
+ 45299 c4af 91       		.byte	0x91
+ 45300 c4b0 8075     		.sleb128 -1408
+ 45301 c4b2 32       		.uleb128 0x32
+ 45302 c4b3 800D0000 		.long	0xd80
+ 45303 c4b7 03       		.byte	0x3
+ 45304 c4b8 91       		.byte	0x91
+ 45305 c4b9 9075     		.sleb128 -1392
+ 45306 c4bb 33       		.uleb128 0x33
+ 45307 c4bc 00000000 		.quad	.LBB2802
+ 45307      00000000 
+ 45308 c4c4 00000000 		.quad	.LBE2802
+ 45308      00000000 
+ 45309 c4cc 34       		.uleb128 0x34
+ 45310 c4cd 980D0000 		.long	0xd98
+ 45311 c4d1 03       		.byte	0x3
+ 45312 c4d2 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1155
+
+
+ 45313 c4d3 E06D     		.sleb128 -2336
+ 45314 c4d5 34       		.uleb128 0x34
+ 45315 c4d6 A40D0000 		.long	0xda4
+ 45316 c4da 03       		.byte	0x3
+ 45317 c4db 91       		.byte	0x91
+ 45318 c4dc D06D     		.sleb128 -2352
+ 45319 c4de 34       		.uleb128 0x34
+ 45320 c4df AF0D0000 		.long	0xdaf
+ 45321 c4e3 03       		.byte	0x3
+ 45322 c4e4 91       		.byte	0x91
+ 45323 c4e5 C06D     		.sleb128 -2368
+ 45324 c4e7 34       		.uleb128 0x34
+ 45325 c4e8 BB0D0000 		.long	0xdbb
+ 45326 c4ec 03       		.byte	0x3
+ 45327 c4ed 91       		.byte	0x91
+ 45328 c4ee AC75     		.sleb128 -1364
+ 45329 c4f0 00       		.byte	0x0
+ 45330 c4f1 00       		.byte	0x0
+ 45331 c4f2 31       		.uleb128 0x31
+ 45332 c4f3 C70D0000 		.long	0xdc7
+ 45333 c4f7 00000000 		.quad	.LBB2803
+ 45333      00000000 
+ 45334 c4ff 00000000 		.quad	.LBE2803
+ 45334      00000000 
+ 45335 c507 02       		.byte	0x2
+ 45336 c508 6A03     		.value	0x36a
+ 45337 c50a 21C50000 		.long	0xc521
+ 45338 c50e 32       		.uleb128 0x32
+ 45339 c50f E20D0000 		.long	0xde2
+ 45340 c513 03       		.byte	0x3
+ 45341 c514 91       		.byte	0x91
+ 45342 c515 B075     		.sleb128 -1360
+ 45343 c517 32       		.uleb128 0x32
+ 45344 c518 D80D0000 		.long	0xdd8
+ 45345 c51c 03       		.byte	0x3
+ 45346 c51d 91       		.byte	0x91
+ 45347 c51e C075     		.sleb128 -1344
+ 45348 c520 00       		.byte	0x0
+ 45349 c521 31       		.uleb128 0x31
+ 45350 c522 ED0D0000 		.long	0xded
+ 45351 c526 00000000 		.quad	.LBB2805
+ 45351      00000000 
+ 45352 c52e 00000000 		.quad	.LBE2805
+ 45352      00000000 
+ 45353 c536 02       		.byte	0x2
+ 45354 c537 6C03     		.value	0x36c
+ 45355 c539 50C50000 		.long	0xc550
+ 45356 c53d 32       		.uleb128 0x32
+ 45357 c53e 0A0E0000 		.long	0xe0a
+ 45358 c542 03       		.byte	0x3
+ 45359 c543 91       		.byte	0x91
+ 45360 c544 D075     		.sleb128 -1328
+ 45361 c546 32       		.uleb128 0x32
+ 45362 c547 FF0D0000 		.long	0xdff
+ 45363 c54b 03       		.byte	0x3
+ 45364 c54c 91       		.byte	0x91
+ 45365 c54d E075     		.sleb128 -1312
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1156
+
+
+ 45366 c54f 00       		.byte	0x0
+ 45367 c550 35       		.uleb128 0x35
+ 45368 c551 1F0D0000 		.long	0xd1f
+ 45369 c555 00000000 		.quad	.LBB2807
+ 45369      00000000 
+ 45370 c55d 00000000 		.quad	.LBE2807
+ 45370      00000000 
+ 45371 c565 02       		.byte	0x2
+ 45372 c566 6E03     		.value	0x36e
+ 45373 c568 32       		.uleb128 0x32
+ 45374 c569 3A0D0000 		.long	0xd3a
+ 45375 c56d 03       		.byte	0x3
+ 45376 c56e 91       		.byte	0x91
+ 45377 c56f F075     		.sleb128 -1296
+ 45378 c571 32       		.uleb128 0x32
+ 45379 c572 300D0000 		.long	0xd30
+ 45380 c576 03       		.byte	0x3
+ 45381 c577 91       		.byte	0x91
+ 45382 c578 8076     		.sleb128 -1280
+ 45383 c57a 00       		.byte	0x0
+ 45384 c57b 00       		.byte	0x0
+ 45385 c57c 00       		.byte	0x0
+ 45386 c57d 00       		.byte	0x0
+ 45387 c57e 36       		.uleb128 0x36
+ 45388 c57f 00000000 		.quad	.LBB2809
+ 45388      00000000 
+ 45389 c587 00000000 		.quad	.LBE2809
+ 45389      00000000 
+ 45390 c58f 9DC50000 		.long	0xc59d
+ 45391 c593 34       		.uleb128 0x34
+ 45392 c594 3AC00000 		.long	0xc03a
+ 45393 c598 03       		.byte	0x3
+ 45394 c599 91       		.byte	0x91
+ 45395 c59a F06C     		.sleb128 -2448
+ 45396 c59c 00       		.byte	0x0
+ 45397 c59d 31       		.uleb128 0x31
+ 45398 c59e A1C00000 		.long	0xc0a1
+ 45399 c5a2 00000000 		.quad	.LBB2810
+ 45399      00000000 
+ 45400 c5aa 00000000 		.quad	.LBE2810
+ 45400      00000000 
+ 45401 c5b2 02       		.byte	0x2
+ 45402 c5b3 9108     		.value	0x891
+ 45403 c5b5 45C60000 		.long	0xc645
+ 45404 c5b9 32       		.uleb128 0x32
+ 45405 c5ba B3C00000 		.long	0xc0b3
+ 45406 c5be 03       		.byte	0x3
+ 45407 c5bf 91       		.byte	0x91
+ 45408 c5c0 9076     		.sleb128 -1264
+ 45409 c5c2 33       		.uleb128 0x33
+ 45410 c5c3 00000000 		.quad	.LBB2811
+ 45410      00000000 
+ 45411 c5cb 00000000 		.quad	.LBE2811
+ 45411      00000000 
+ 45412 c5d3 34       		.uleb128 0x34
+ 45413 c5d4 BFC00000 		.long	0xc0bf
+ 45414 c5d8 09       		.byte	0x9
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1157
+
+
+ 45415 c5d9 03       		.byte	0x3
+ 45416 c5da 00000000 		.quad	InvShiftRowTable.6750
+ 45416      00000000 
+ 45417 c5e2 35       		.uleb128 0x35
+ 45418 c5e3 6E0D0000 		.long	0xd6e
+ 45419 c5e7 00000000 		.quad	.LBB2812
+ 45419      00000000 
+ 45420 c5ef 00000000 		.quad	.LBE2812
+ 45420      00000000 
+ 45421 c5f7 02       		.byte	0x2
+ 45422 c5f8 6402     		.value	0x264
+ 45423 c5fa 32       		.uleb128 0x32
+ 45424 c5fb 8C0D0000 		.long	0xd8c
+ 45425 c5ff 03       		.byte	0x3
+ 45426 c600 91       		.byte	0x91
+ 45427 c601 A076     		.sleb128 -1248
+ 45428 c603 32       		.uleb128 0x32
+ 45429 c604 800D0000 		.long	0xd80
+ 45430 c608 03       		.byte	0x3
+ 45431 c609 91       		.byte	0x91
+ 45432 c60a B076     		.sleb128 -1232
+ 45433 c60c 33       		.uleb128 0x33
+ 45434 c60d 00000000 		.quad	.LBB2813
+ 45434      00000000 
+ 45435 c615 00000000 		.quad	.LBE2813
+ 45435      00000000 
+ 45436 c61d 34       		.uleb128 0x34
+ 45437 c61e 980D0000 		.long	0xd98
+ 45438 c622 03       		.byte	0x3
+ 45439 c623 91       		.byte	0x91
+ 45440 c624 906E     		.sleb128 -2288
+ 45441 c626 34       		.uleb128 0x34
+ 45442 c627 A40D0000 		.long	0xda4
+ 45443 c62b 03       		.byte	0x3
+ 45444 c62c 91       		.byte	0x91
+ 45445 c62d 806E     		.sleb128 -2304
+ 45446 c62f 34       		.uleb128 0x34
+ 45447 c630 AF0D0000 		.long	0xdaf
+ 45448 c634 03       		.byte	0x3
+ 45449 c635 91       		.byte	0x91
+ 45450 c636 F06D     		.sleb128 -2320
+ 45451 c638 34       		.uleb128 0x34
+ 45452 c639 BB0D0000 		.long	0xdbb
+ 45453 c63d 03       		.byte	0x3
+ 45454 c63e 91       		.byte	0x91
+ 45455 c63f CC76     		.sleb128 -1204
+ 45456 c641 00       		.byte	0x0
+ 45457 c642 00       		.byte	0x0
+ 45458 c643 00       		.byte	0x0
+ 45459 c644 00       		.byte	0x0
+ 45460 c645 36       		.uleb128 0x36
+ 45461 c646 00000000 		.quad	.LBB2814
+ 45461      00000000 
+ 45462 c64e 00000000 		.quad	.LBE2814
+ 45462      00000000 
+ 45463 c656 64C60000 		.long	0xc664
+ 45464 c65a 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1158
+
+
+ 45465 c65b 4AC00000 		.long	0xc04a
+ 45466 c65f 03       		.byte	0x3
+ 45467 c660 91       		.byte	0x91
+ 45468 c661 E06C     		.sleb128 -2464
+ 45469 c663 00       		.byte	0x0
+ 45470 c664 31       		.uleb128 0x31
+ 45471 c665 DCA80000 		.long	0xa8dc
+ 45472 c669 00000000 		.quad	.LBB2815
+ 45472      00000000 
+ 45473 c671 00000000 		.quad	.LBE2815
+ 45473      00000000 
+ 45474 c679 02       		.byte	0x2
+ 45475 c67a 9908     		.value	0x899
+ 45476 c67c 4CCB0000 		.long	0xcb4c
+ 45477 c680 32       		.uleb128 0x32
+ 45478 c681 EEA80000 		.long	0xa8ee
+ 45479 c685 03       		.byte	0x3
+ 45480 c686 91       		.byte	0x91
+ 45481 c687 D076     		.sleb128 -1200
+ 45482 c689 33       		.uleb128 0x33
+ 45483 c68a 00000000 		.quad	.LBB2816
+ 45483      00000000 
+ 45484 c692 00000000 		.quad	.LBE2816
+ 45484      00000000 
+ 45485 c69a 34       		.uleb128 0x34
+ 45486 c69b FAA80000 		.long	0xa8fa
+ 45487 c69f 03       		.byte	0x3
+ 45488 c6a0 76       		.byte	0x76
+ 45489 c6a1 E06B     		.sleb128 -2592
+ 45490 c6a3 34       		.uleb128 0x34
+ 45491 c6a4 05A90000 		.long	0xa905
+ 45492 c6a8 03       		.byte	0x3
+ 45493 c6a9 76       		.byte	0x76
+ 45494 c6aa D06B     		.sleb128 -2608
+ 45495 c6ac 34       		.uleb128 0x34
+ 45496 c6ad 10A90000 		.long	0xa910
+ 45497 c6b1 03       		.byte	0x3
+ 45498 c6b2 76       		.byte	0x76
+ 45499 c6b3 C06B     		.sleb128 -2624
+ 45500 c6b5 34       		.uleb128 0x34
+ 45501 c6b6 1BA90000 		.long	0xa91b
+ 45502 c6ba 03       		.byte	0x3
+ 45503 c6bb 76       		.byte	0x76
+ 45504 c6bc B06B     		.sleb128 -2640
+ 45505 c6be 34       		.uleb128 0x34
+ 45506 c6bf 26A90000 		.long	0xa926
+ 45507 c6c3 03       		.byte	0x3
+ 45508 c6c4 76       		.byte	0x76
+ 45509 c6c5 A06B     		.sleb128 -2656
+ 45510 c6c7 34       		.uleb128 0x34
+ 45511 c6c8 31A90000 		.long	0xa931
+ 45512 c6cc 03       		.byte	0x3
+ 45513 c6cd 76       		.byte	0x76
+ 45514 c6ce 906B     		.sleb128 -2672
+ 45515 c6d0 31       		.uleb128 0x31
+ 45516 c6d1 160E0000 		.long	0xe16
+ 45517 c6d5 00000000 		.quad	.LBB2817
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1159
+
+
+ 45517      00000000 
+ 45518 c6dd 00000000 		.quad	.LBE2817
+ 45518      00000000 
+ 45519 c6e5 02       		.byte	0x2
+ 45520 c6e6 5204     		.value	0x452
+ 45521 c6e8 78C70000 		.long	0xc778
+ 45522 c6ec 32       		.uleb128 0x32
+ 45523 c6ed 280E0000 		.long	0xe28
+ 45524 c6f1 03       		.byte	0x3
+ 45525 c6f2 91       		.byte	0x91
+ 45526 c6f3 F076     		.sleb128 -1168
+ 45527 c6f5 33       		.uleb128 0x33
+ 45528 c6f6 00000000 		.quad	.LBB2818
+ 45528      00000000 
+ 45529 c6fe 00000000 		.quad	.LBE2818
+ 45529      00000000 
+ 45530 c706 34       		.uleb128 0x34
+ 45531 c707 340E0000 		.long	0xe34
+ 45532 c70b 09       		.byte	0x9
+ 45533 c70c 03       		.byte	0x3
+ 45534 c70d 00000000 		.quad	ShiftRowTable.6768
+ 45534      00000000 
+ 45535 c715 35       		.uleb128 0x35
+ 45536 c716 6E0D0000 		.long	0xd6e
+ 45537 c71a 00000000 		.quad	.LBB2819
+ 45537      00000000 
+ 45538 c722 00000000 		.quad	.LBE2819
+ 45538      00000000 
+ 45539 c72a 02       		.byte	0x2
+ 45540 c72b 9B02     		.value	0x29b
+ 45541 c72d 32       		.uleb128 0x32
+ 45542 c72e 8C0D0000 		.long	0xd8c
+ 45543 c732 03       		.byte	0x3
+ 45544 c733 91       		.byte	0x91
+ 45545 c734 8077     		.sleb128 -1152
+ 45546 c736 32       		.uleb128 0x32
+ 45547 c737 800D0000 		.long	0xd80
+ 45548 c73b 03       		.byte	0x3
+ 45549 c73c 91       		.byte	0x91
+ 45550 c73d 9077     		.sleb128 -1136
+ 45551 c73f 33       		.uleb128 0x33
+ 45552 c740 00000000 		.quad	.LBB2820
+ 45552      00000000 
+ 45553 c748 00000000 		.quad	.LBE2820
+ 45553      00000000 
+ 45554 c750 34       		.uleb128 0x34
+ 45555 c751 980D0000 		.long	0xd98
+ 45556 c755 03       		.byte	0x3
+ 45557 c756 91       		.byte	0x91
+ 45558 c757 F06E     		.sleb128 -2192
+ 45559 c759 34       		.uleb128 0x34
+ 45560 c75a A40D0000 		.long	0xda4
+ 45561 c75e 03       		.byte	0x3
+ 45562 c75f 91       		.byte	0x91
+ 45563 c760 E06E     		.sleb128 -2208
+ 45564 c762 34       		.uleb128 0x34
+ 45565 c763 AF0D0000 		.long	0xdaf
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1160
+
+
+ 45566 c767 03       		.byte	0x3
+ 45567 c768 91       		.byte	0x91
+ 45568 c769 D06E     		.sleb128 -2224
+ 45569 c76b 34       		.uleb128 0x34
+ 45570 c76c BB0D0000 		.long	0xdbb
+ 45571 c770 03       		.byte	0x3
+ 45572 c771 91       		.byte	0x91
+ 45573 c772 AC77     		.sleb128 -1108
+ 45574 c774 00       		.byte	0x0
+ 45575 c775 00       		.byte	0x0
+ 45576 c776 00       		.byte	0x0
+ 45577 c777 00       		.byte	0x0
+ 45578 c778 31       		.uleb128 0x31
+ 45579 c779 160E0000 		.long	0xe16
+ 45580 c77d 00000000 		.quad	.LBB2821
+ 45580      00000000 
+ 45581 c785 00000000 		.quad	.LBE2821
+ 45581      00000000 
+ 45582 c78d 02       		.byte	0x2
+ 45583 c78e 5304     		.value	0x453
+ 45584 c790 20C80000 		.long	0xc820
+ 45585 c794 32       		.uleb128 0x32
+ 45586 c795 280E0000 		.long	0xe28
+ 45587 c799 03       		.byte	0x3
+ 45588 c79a 91       		.byte	0x91
+ 45589 c79b B077     		.sleb128 -1104
+ 45590 c79d 33       		.uleb128 0x33
+ 45591 c79e 00000000 		.quad	.LBB2822
+ 45591      00000000 
+ 45592 c7a6 00000000 		.quad	.LBE2822
+ 45592      00000000 
+ 45593 c7ae 34       		.uleb128 0x34
+ 45594 c7af 340E0000 		.long	0xe34
+ 45595 c7b3 09       		.byte	0x9
+ 45596 c7b4 03       		.byte	0x3
+ 45597 c7b5 00000000 		.quad	ShiftRowTable.6768
+ 45597      00000000 
+ 45598 c7bd 35       		.uleb128 0x35
+ 45599 c7be 6E0D0000 		.long	0xd6e
+ 45600 c7c2 00000000 		.quad	.LBB2823
+ 45600      00000000 
+ 45601 c7ca 00000000 		.quad	.LBE2823
+ 45601      00000000 
+ 45602 c7d2 02       		.byte	0x2
+ 45603 c7d3 9B02     		.value	0x29b
+ 45604 c7d5 32       		.uleb128 0x32
+ 45605 c7d6 8C0D0000 		.long	0xd8c
+ 45606 c7da 03       		.byte	0x3
+ 45607 c7db 91       		.byte	0x91
+ 45608 c7dc C077     		.sleb128 -1088
+ 45609 c7de 32       		.uleb128 0x32
+ 45610 c7df 800D0000 		.long	0xd80
+ 45611 c7e3 03       		.byte	0x3
+ 45612 c7e4 91       		.byte	0x91
+ 45613 c7e5 D077     		.sleb128 -1072
+ 45614 c7e7 33       		.uleb128 0x33
+ 45615 c7e8 00000000 		.quad	.LBB2824
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1161
+
+
+ 45615      00000000 
+ 45616 c7f0 00000000 		.quad	.LBE2824
+ 45616      00000000 
+ 45617 c7f8 34       		.uleb128 0x34
+ 45618 c7f9 980D0000 		.long	0xd98
+ 45619 c7fd 03       		.byte	0x3
+ 45620 c7fe 91       		.byte	0x91
+ 45621 c7ff A06F     		.sleb128 -2144
+ 45622 c801 34       		.uleb128 0x34
+ 45623 c802 A40D0000 		.long	0xda4
+ 45624 c806 03       		.byte	0x3
+ 45625 c807 91       		.byte	0x91
+ 45626 c808 906F     		.sleb128 -2160
+ 45627 c80a 34       		.uleb128 0x34
+ 45628 c80b AF0D0000 		.long	0xdaf
+ 45629 c80f 03       		.byte	0x3
+ 45630 c810 91       		.byte	0x91
+ 45631 c811 806F     		.sleb128 -2176
+ 45632 c813 34       		.uleb128 0x34
+ 45633 c814 BB0D0000 		.long	0xdbb
+ 45634 c818 03       		.byte	0x3
+ 45635 c819 91       		.byte	0x91
+ 45636 c81a EC77     		.sleb128 -1044
+ 45637 c81c 00       		.byte	0x0
+ 45638 c81d 00       		.byte	0x0
+ 45639 c81e 00       		.byte	0x0
+ 45640 c81f 00       		.byte	0x0
+ 45641 c820 31       		.uleb128 0x31
+ 45642 c821 160E0000 		.long	0xe16
+ 45643 c825 00000000 		.quad	.LBB2825
+ 45643      00000000 
+ 45644 c82d 00000000 		.quad	.LBE2825
+ 45644      00000000 
+ 45645 c835 02       		.byte	0x2
+ 45646 c836 5404     		.value	0x454
+ 45647 c838 C8C80000 		.long	0xc8c8
+ 45648 c83c 32       		.uleb128 0x32
+ 45649 c83d 280E0000 		.long	0xe28
+ 45650 c841 03       		.byte	0x3
+ 45651 c842 91       		.byte	0x91
+ 45652 c843 F077     		.sleb128 -1040
+ 45653 c845 33       		.uleb128 0x33
+ 45654 c846 00000000 		.quad	.LBB2826
+ 45654      00000000 
+ 45655 c84e 00000000 		.quad	.LBE2826
+ 45655      00000000 
+ 45656 c856 34       		.uleb128 0x34
+ 45657 c857 340E0000 		.long	0xe34
+ 45658 c85b 09       		.byte	0x9
+ 45659 c85c 03       		.byte	0x3
+ 45660 c85d 00000000 		.quad	ShiftRowTable.6768
+ 45660      00000000 
+ 45661 c865 35       		.uleb128 0x35
+ 45662 c866 6E0D0000 		.long	0xd6e
+ 45663 c86a 00000000 		.quad	.LBB2827
+ 45663      00000000 
+ 45664 c872 00000000 		.quad	.LBE2827
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1162
+
+
+ 45664      00000000 
+ 45665 c87a 02       		.byte	0x2
+ 45666 c87b 9B02     		.value	0x29b
+ 45667 c87d 32       		.uleb128 0x32
+ 45668 c87e 8C0D0000 		.long	0xd8c
+ 45669 c882 03       		.byte	0x3
+ 45670 c883 91       		.byte	0x91
+ 45671 c884 8078     		.sleb128 -1024
+ 45672 c886 32       		.uleb128 0x32
+ 45673 c887 800D0000 		.long	0xd80
+ 45674 c88b 03       		.byte	0x3
+ 45675 c88c 91       		.byte	0x91
+ 45676 c88d 9078     		.sleb128 -1008
+ 45677 c88f 33       		.uleb128 0x33
+ 45678 c890 00000000 		.quad	.LBB2828
+ 45678      00000000 
+ 45679 c898 00000000 		.quad	.LBE2828
+ 45679      00000000 
+ 45680 c8a0 34       		.uleb128 0x34
+ 45681 c8a1 980D0000 		.long	0xd98
+ 45682 c8a5 03       		.byte	0x3
+ 45683 c8a6 91       		.byte	0x91
+ 45684 c8a7 D06F     		.sleb128 -2096
+ 45685 c8a9 34       		.uleb128 0x34
+ 45686 c8aa A40D0000 		.long	0xda4
+ 45687 c8ae 03       		.byte	0x3
+ 45688 c8af 91       		.byte	0x91
+ 45689 c8b0 C06F     		.sleb128 -2112
+ 45690 c8b2 34       		.uleb128 0x34
+ 45691 c8b3 AF0D0000 		.long	0xdaf
+ 45692 c8b7 03       		.byte	0x3
+ 45693 c8b8 91       		.byte	0x91
+ 45694 c8b9 B06F     		.sleb128 -2128
+ 45695 c8bb 34       		.uleb128 0x34
+ 45696 c8bc BB0D0000 		.long	0xdbb
+ 45697 c8c0 03       		.byte	0x3
+ 45698 c8c1 91       		.byte	0x91
+ 45699 c8c2 AC78     		.sleb128 -980
+ 45700 c8c4 00       		.byte	0x0
+ 45701 c8c5 00       		.byte	0x0
+ 45702 c8c6 00       		.byte	0x0
+ 45703 c8c7 00       		.byte	0x0
+ 45704 c8c8 31       		.uleb128 0x31
+ 45705 c8c9 520E0000 		.long	0xe52
+ 45706 c8cd 00000000 		.quad	.LBB2829
+ 45706      00000000 
+ 45707 c8d5 00000000 		.quad	.LBE2829
+ 45707      00000000 
+ 45708 c8dd 02       		.byte	0x2
+ 45709 c8de 5604     		.value	0x456
+ 45710 c8e0 F7C80000 		.long	0xc8f7
+ 45711 c8e4 32       		.uleb128 0x32
+ 45712 c8e5 6D0E0000 		.long	0xe6d
+ 45713 c8e9 03       		.byte	0x3
+ 45714 c8ea 91       		.byte	0x91
+ 45715 c8eb B078     		.sleb128 -976
+ 45716 c8ed 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1163
+
+
+ 45717 c8ee 630E0000 		.long	0xe63
+ 45718 c8f2 03       		.byte	0x3
+ 45719 c8f3 91       		.byte	0x91
+ 45720 c8f4 C078     		.sleb128 -960
+ 45721 c8f6 00       		.byte	0x0
+ 45722 c8f7 31       		.uleb128 0x31
+ 45723 c8f8 520E0000 		.long	0xe52
+ 45724 c8fc 00000000 		.quad	.LBB2831
+ 45724      00000000 
+ 45725 c904 00000000 		.quad	.LBE2831
+ 45725      00000000 
+ 45726 c90c 02       		.byte	0x2
+ 45727 c90d 5704     		.value	0x457
+ 45728 c90f 26C90000 		.long	0xc926
+ 45729 c913 32       		.uleb128 0x32
+ 45730 c914 6D0E0000 		.long	0xe6d
+ 45731 c918 03       		.byte	0x3
+ 45732 c919 91       		.byte	0x91
+ 45733 c91a D078     		.sleb128 -944
+ 45734 c91c 32       		.uleb128 0x32
+ 45735 c91d 630E0000 		.long	0xe63
+ 45736 c921 03       		.byte	0x3
+ 45737 c922 91       		.byte	0x91
+ 45738 c923 E078     		.sleb128 -928
+ 45739 c925 00       		.byte	0x0
+ 45740 c926 31       		.uleb128 0x31
+ 45741 c927 520E0000 		.long	0xe52
+ 45742 c92b 00000000 		.quad	.LBB2833
+ 45742      00000000 
+ 45743 c933 00000000 		.quad	.LBE2833
+ 45743      00000000 
+ 45744 c93b 02       		.byte	0x2
+ 45745 c93c 5804     		.value	0x458
+ 45746 c93e 55C90000 		.long	0xc955
+ 45747 c942 32       		.uleb128 0x32
+ 45748 c943 6D0E0000 		.long	0xe6d
+ 45749 c947 03       		.byte	0x3
+ 45750 c948 91       		.byte	0x91
+ 45751 c949 F078     		.sleb128 -912
+ 45752 c94b 32       		.uleb128 0x32
+ 45753 c94c 630E0000 		.long	0xe63
+ 45754 c950 03       		.byte	0x3
+ 45755 c951 91       		.byte	0x91
+ 45756 c952 8079     		.sleb128 -896
+ 45757 c954 00       		.byte	0x0
+ 45758 c955 31       		.uleb128 0x31
+ 45759 c956 520E0000 		.long	0xe52
+ 45760 c95a 00000000 		.quad	.LBB2835
+ 45760      00000000 
+ 45761 c962 00000000 		.quad	.LBE2835
+ 45761      00000000 
+ 45762 c96a 02       		.byte	0x2
+ 45763 c96b 5904     		.value	0x459
+ 45764 c96d 84C90000 		.long	0xc984
+ 45765 c971 32       		.uleb128 0x32
+ 45766 c972 6D0E0000 		.long	0xe6d
+ 45767 c976 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1164
+
+
+ 45768 c977 91       		.byte	0x91
+ 45769 c978 9079     		.sleb128 -880
+ 45770 c97a 32       		.uleb128 0x32
+ 45771 c97b 630E0000 		.long	0xe63
+ 45772 c97f 03       		.byte	0x3
+ 45773 c980 91       		.byte	0x91
+ 45774 c981 A079     		.sleb128 -864
+ 45775 c983 00       		.byte	0x0
+ 45776 c984 31       		.uleb128 0x31
+ 45777 c985 520E0000 		.long	0xe52
+ 45778 c989 00000000 		.quad	.LBB2837
+ 45778      00000000 
+ 45779 c991 00000000 		.quad	.LBE2837
+ 45779      00000000 
+ 45780 c999 02       		.byte	0x2
+ 45781 c99a 5A04     		.value	0x45a
+ 45782 c99c B3C90000 		.long	0xc9b3
+ 45783 c9a0 32       		.uleb128 0x32
+ 45784 c9a1 6D0E0000 		.long	0xe6d
+ 45785 c9a5 03       		.byte	0x3
+ 45786 c9a6 91       		.byte	0x91
+ 45787 c9a7 B079     		.sleb128 -848
+ 45788 c9a9 32       		.uleb128 0x32
+ 45789 c9aa 630E0000 		.long	0xe63
+ 45790 c9ae 03       		.byte	0x3
+ 45791 c9af 91       		.byte	0x91
+ 45792 c9b0 C079     		.sleb128 -832
+ 45793 c9b2 00       		.byte	0x0
+ 45794 c9b3 36       		.uleb128 0x36
+ 45795 c9b4 00000000 		.quad	.LBB2839
+ 45795      00000000 
+ 45796 c9bc 00000000 		.quad	.LBE2839
+ 45796      00000000 
+ 45797 c9c4 C1CA0000 		.long	0xcac1
+ 45798 c9c8 34       		.uleb128 0x34
+ 45799 c9c9 3DA90000 		.long	0xa93d
+ 45800 c9cd 03       		.byte	0x3
+ 45801 c9ce 91       		.byte	0x91
+ 45802 c9cf C06E     		.sleb128 -2240
+ 45803 c9d1 34       		.uleb128 0x34
+ 45804 c9d2 49A90000 		.long	0xa949
+ 45805 c9d6 03       		.byte	0x3
+ 45806 c9d7 91       		.byte	0x91
+ 45807 c9d8 B06E     		.sleb128 -2256
+ 45808 c9da 34       		.uleb128 0x34
+ 45809 c9db 55A90000 		.long	0xa955
+ 45810 c9df 03       		.byte	0x3
+ 45811 c9e0 91       		.byte	0x91
+ 45812 c9e1 A06E     		.sleb128 -2272
+ 45813 c9e3 34       		.uleb128 0x34
+ 45814 c9e4 61A90000 		.long	0xa961
+ 45815 c9e8 03       		.byte	0x3
+ 45816 c9e9 91       		.byte	0x91
+ 45817 c9ea EC76     		.sleb128 -1172
+ 45818 c9ec 31       		.uleb128 0x31
+ 45819 c9ed 6EA90000 		.long	0xa96e
+ 45820 c9f1 00000000 		.quad	.LBB2840
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1165
+
+
+ 45820      00000000 
+ 45821 c9f9 00000000 		.quad	.LBE2840
+ 45821      00000000 
+ 45822 ca01 02       		.byte	0x2
+ 45823 ca02 6C04     		.value	0x46c
+ 45824 ca04 34CA0000 		.long	0xca34
+ 45825 ca08 32       		.uleb128 0x32
+ 45826 ca09 80A90000 		.long	0xa980
+ 45827 ca0d 03       		.byte	0x3
+ 45828 ca0e 91       		.byte	0x91
+ 45829 ca0f DA79     		.sleb128 -806
+ 45830 ca11 35       		.uleb128 0x35
+ 45831 ca12 8BA90000 		.long	0xa98b
+ 45832 ca16 00000000 		.quad	.LBB2842
+ 45832      00000000 
+ 45833 ca1e 00000000 		.quad	.LBE2842
+ 45833      00000000 
+ 45834 ca26 02       		.byte	0x2
+ 45835 ca27 F403     		.value	0x3f4
+ 45836 ca29 32       		.uleb128 0x32
+ 45837 ca2a 9DA90000 		.long	0xa99d
+ 45838 ca2e 03       		.byte	0x3
+ 45839 ca2f 91       		.byte	0x91
+ 45840 ca30 DB79     		.sleb128 -805
+ 45841 ca32 00       		.byte	0x0
+ 45842 ca33 00       		.byte	0x0
+ 45843 ca34 31       		.uleb128 0x31
+ 45844 ca35 A8A90000 		.long	0xa9a8
+ 45845 ca39 00000000 		.quad	.LBB2844
+ 45845      00000000 
+ 45846 ca41 00000000 		.quad	.LBE2844
+ 45846      00000000 
+ 45847 ca49 02       		.byte	0x2
+ 45848 ca4a 6D04     		.value	0x46d
+ 45849 ca4c 7CCA0000 		.long	0xca7c
+ 45850 ca50 32       		.uleb128 0x32
+ 45851 ca51 BAA90000 		.long	0xa9ba
+ 45852 ca55 03       		.byte	0x3
+ 45853 ca56 91       		.byte	0x91
+ 45854 ca57 DC79     		.sleb128 -804
+ 45855 ca59 35       		.uleb128 0x35
+ 45856 ca5a 8BA90000 		.long	0xa98b
+ 45857 ca5e 00000000 		.quad	.LBB2846
+ 45857      00000000 
+ 45858 ca66 00000000 		.quad	.LBE2846
+ 45858      00000000 
+ 45859 ca6e 02       		.byte	0x2
+ 45860 ca6f FF03     		.value	0x3ff
+ 45861 ca71 32       		.uleb128 0x32
+ 45862 ca72 9DA90000 		.long	0xa99d
+ 45863 ca76 03       		.byte	0x3
+ 45864 ca77 91       		.byte	0x91
+ 45865 ca78 DD79     		.sleb128 -803
+ 45866 ca7a 00       		.byte	0x0
+ 45867 ca7b 00       		.byte	0x0
+ 45868 ca7c 35       		.uleb128 0x35
+ 45869 ca7d C5A90000 		.long	0xa9c5
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1166
+
+
+ 45870 ca81 00000000 		.quad	.LBB2848
+ 45870      00000000 
+ 45871 ca89 00000000 		.quad	.LBE2848
+ 45871      00000000 
+ 45872 ca91 02       		.byte	0x2
+ 45873 ca92 6E04     		.value	0x46e
+ 45874 ca94 32       		.uleb128 0x32
+ 45875 ca95 D7A90000 		.long	0xa9d7
+ 45876 ca99 03       		.byte	0x3
+ 45877 ca9a 91       		.byte	0x91
+ 45878 ca9b DE79     		.sleb128 -802
+ 45879 ca9d 35       		.uleb128 0x35
+ 45880 ca9e 8BA90000 		.long	0xa98b
+ 45881 caa2 00000000 		.quad	.LBB2850
+ 45881      00000000 
+ 45882 caaa 00000000 		.quad	.LBE2850
+ 45882      00000000 
+ 45883 cab2 02       		.byte	0x2
+ 45884 cab3 0A04     		.value	0x40a
+ 45885 cab5 32       		.uleb128 0x32
+ 45886 cab6 9DA90000 		.long	0xa99d
+ 45887 caba 03       		.byte	0x3
+ 45888 cabb 91       		.byte	0x91
+ 45889 cabc DF79     		.sleb128 -801
+ 45890 cabe 00       		.byte	0x0
+ 45891 cabf 00       		.byte	0x0
+ 45892 cac0 00       		.byte	0x0
+ 45893 cac1 31       		.uleb128 0x31
+ 45894 cac2 520E0000 		.long	0xe52
+ 45895 cac6 00000000 		.quad	.LBB2852
+ 45895      00000000 
+ 45896 cace 00000000 		.quad	.LBE2852
+ 45896      00000000 
+ 45897 cad6 02       		.byte	0x2
+ 45898 cad7 7604     		.value	0x476
+ 45899 cad9 F0CA0000 		.long	0xcaf0
+ 45900 cadd 32       		.uleb128 0x32
+ 45901 cade 6D0E0000 		.long	0xe6d
+ 45902 cae2 03       		.byte	0x3
+ 45903 cae3 91       		.byte	0x91
+ 45904 cae4 E079     		.sleb128 -800
+ 45905 cae6 32       		.uleb128 0x32
+ 45906 cae7 630E0000 		.long	0xe63
+ 45907 caeb 03       		.byte	0x3
+ 45908 caec 91       		.byte	0x91
+ 45909 caed F079     		.sleb128 -784
+ 45910 caef 00       		.byte	0x0
+ 45911 caf0 31       		.uleb128 0x31
+ 45912 caf1 520E0000 		.long	0xe52
+ 45913 caf5 00000000 		.quad	.LBB2854
+ 45913      00000000 
+ 45914 cafd 00000000 		.quad	.LBE2854
+ 45914      00000000 
+ 45915 cb05 02       		.byte	0x2
+ 45916 cb06 7704     		.value	0x477
+ 45917 cb08 1FCB0000 		.long	0xcb1f
+ 45918 cb0c 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1167
+
+
+ 45919 cb0d 6D0E0000 		.long	0xe6d
+ 45920 cb11 03       		.byte	0x3
+ 45921 cb12 91       		.byte	0x91
+ 45922 cb13 807A     		.sleb128 -768
+ 45923 cb15 32       		.uleb128 0x32
+ 45924 cb16 630E0000 		.long	0xe63
+ 45925 cb1a 03       		.byte	0x3
+ 45926 cb1b 91       		.byte	0x91
+ 45927 cb1c 907A     		.sleb128 -752
+ 45928 cb1e 00       		.byte	0x0
+ 45929 cb1f 35       		.uleb128 0x35
+ 45930 cb20 520E0000 		.long	0xe52
+ 45931 cb24 00000000 		.quad	.LBB2856
+ 45931      00000000 
+ 45932 cb2c 00000000 		.quad	.LBE2856
+ 45932      00000000 
+ 45933 cb34 02       		.byte	0x2
+ 45934 cb35 7804     		.value	0x478
+ 45935 cb37 32       		.uleb128 0x32
+ 45936 cb38 6D0E0000 		.long	0xe6d
+ 45937 cb3c 03       		.byte	0x3
+ 45938 cb3d 91       		.byte	0x91
+ 45939 cb3e A07A     		.sleb128 -736
+ 45940 cb40 32       		.uleb128 0x32
+ 45941 cb41 630E0000 		.long	0xe63
+ 45942 cb45 03       		.byte	0x3
+ 45943 cb46 91       		.byte	0x91
+ 45944 cb47 B07A     		.sleb128 -720
+ 45945 cb49 00       		.byte	0x0
+ 45946 cb4a 00       		.byte	0x0
+ 45947 cb4b 00       		.byte	0x0
+ 45948 cb4c 36       		.uleb128 0x36
+ 45949 cb4d 00000000 		.quad	.LBB2858
+ 45949      00000000 
+ 45950 cb55 00000000 		.quad	.LBE2858
+ 45950      00000000 
+ 45951 cb5d 6BCB0000 		.long	0xcb6b
+ 45952 cb61 34       		.uleb128 0x34
+ 45953 cb62 5AC00000 		.long	0xc05a
+ 45954 cb66 03       		.byte	0x3
+ 45955 cb67 91       		.byte	0x91
+ 45956 cb68 D06C     		.sleb128 -2480
+ 45957 cb6a 00       		.byte	0x0
+ 45958 cb6b 31       		.uleb128 0x31
+ 45959 cb6c 3EB00000 		.long	0xb03e
+ 45960 cb70 00000000 		.quad	.LBB2859
+ 45960      00000000 
+ 45961 cb78 00000000 		.quad	.LBE2859
+ 45961      00000000 
+ 45962 cb80 02       		.byte	0x2
+ 45963 cb81 A108     		.value	0x8a1
+ 45964 cb83 C5CB0000 		.long	0xcbc5
+ 45965 cb87 32       		.uleb128 0x32
+ 45966 cb88 5CB00000 		.long	0xb05c
+ 45967 cb8c 03       		.byte	0x3
+ 45968 cb8d 91       		.byte	0x91
+ 45969 cb8e C07A     		.sleb128 -704
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1168
+
+
+ 45970 cb90 32       		.uleb128 0x32
+ 45971 cb91 50B00000 		.long	0xb050
+ 45972 cb95 03       		.byte	0x3
+ 45973 cb96 91       		.byte	0x91
+ 45974 cb97 D07A     		.sleb128 -688
+ 45975 cb99 35       		.uleb128 0x35
+ 45976 cb9a 520E0000 		.long	0xe52
+ 45977 cb9e 00000000 		.quad	.LBB2861
+ 45977      00000000 
+ 45978 cba6 00000000 		.quad	.LBE2861
+ 45978      00000000 
+ 45979 cbae 02       		.byte	0x2
+ 45980 cbaf 2302     		.value	0x223
+ 45981 cbb1 32       		.uleb128 0x32
+ 45982 cbb2 6D0E0000 		.long	0xe6d
+ 45983 cbb6 03       		.byte	0x3
+ 45984 cbb7 91       		.byte	0x91
+ 45985 cbb8 E07A     		.sleb128 -672
+ 45986 cbba 32       		.uleb128 0x32
+ 45987 cbbb 630E0000 		.long	0xe63
+ 45988 cbbf 03       		.byte	0x3
+ 45989 cbc0 91       		.byte	0x91
+ 45990 cbc1 F07A     		.sleb128 -656
+ 45991 cbc3 00       		.byte	0x0
+ 45992 cbc4 00       		.byte	0x0
+ 45993 cbc5 36       		.uleb128 0x36
+ 45994 cbc6 00000000 		.quad	.LBB2863
+ 45994      00000000 
+ 45995 cbce 00000000 		.quad	.LBE2863
+ 45995      00000000 
+ 45996 cbd6 E4CB0000 		.long	0xcbe4
+ 45997 cbda 34       		.uleb128 0x34
+ 45998 cbdb 6AC00000 		.long	0xc06a
+ 45999 cbdf 03       		.byte	0x3
+ 46000 cbe0 91       		.byte	0x91
+ 46001 cbe1 C06C     		.sleb128 -2496
+ 46002 cbe3 00       		.byte	0x0
+ 46003 cbe4 33       		.uleb128 0x33
+ 46004 cbe5 00000000 		.quad	.LBB2864
+ 46004      00000000 
+ 46005 cbed 00000000 		.quad	.LBE2864
+ 46005      00000000 
+ 46006 cbf5 34       		.uleb128 0x34
+ 46007 cbf6 76C00000 		.long	0xc076
+ 46008 cbfa 03       		.byte	0x3
+ 46009 cbfb 91       		.byte	0x91
+ 46010 cbfc B06C     		.sleb128 -2512
+ 46011 cbfe 00       		.byte	0x0
+ 46012 cbff 00       		.byte	0x0
+ 46013 cc00 00       		.byte	0x0
+ 46014 cc01 35       		.uleb128 0x35
+ 46015 cc02 E2C00000 		.long	0xc0e2
+ 46016 cc06 00000000 		.quad	.LBB2865
+ 46016      00000000 
+ 46017 cc0e 00000000 		.quad	.LBE2865
+ 46017      00000000 
+ 46018 cc16 02       		.byte	0x2
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1169
+
+
+ 46019 cc17 E708     		.value	0x8e7
+ 46020 cc19 32       		.uleb128 0x32
+ 46021 cc1a 00C10000 		.long	0xc100
+ 46022 cc1e 03       		.byte	0x3
+ 46023 cc1f 91       		.byte	0x91
+ 46024 cc20 807B     		.sleb128 -640
+ 46025 cc22 32       		.uleb128 0x32
+ 46026 cc23 F4C00000 		.long	0xc0f4
+ 46027 cc27 03       		.byte	0x3
+ 46028 cc28 91       		.byte	0x91
+ 46029 cc29 907B     		.sleb128 -624
+ 46030 cc2b 36       		.uleb128 0x36
+ 46031 cc2c 00000000 		.quad	.LBB2867
+ 46031      00000000 
+ 46032 cc34 00000000 		.quad	.LBE2867
+ 46032      00000000 
+ 46033 cc3c 4ACC0000 		.long	0xcc4a
+ 46034 cc40 34       		.uleb128 0x34
+ 46035 cc41 11C10000 		.long	0xc111
+ 46036 cc45 03       		.byte	0x3
+ 46037 cc46 91       		.byte	0x91
+ 46038 cc47 A070     		.sleb128 -2016
+ 46039 cc49 00       		.byte	0x0
+ 46040 cc4a 31       		.uleb128 0x31
+ 46041 cc4b 82C00000 		.long	0xc082
+ 46042 cc4f 00000000 		.quad	.LBB2868
+ 46042      00000000 
+ 46043 cc57 00000000 		.quad	.LBE2868
+ 46043      00000000 
+ 46044 cc5f 02       		.byte	0x2
+ 46045 cc60 C308     		.value	0x8c3
+ 46046 cc62 BACE0000 		.long	0xceba
+ 46047 cc66 32       		.uleb128 0x32
+ 46048 cc67 94C00000 		.long	0xc094
+ 46049 cc6b 03       		.byte	0x3
+ 46050 cc6c 91       		.byte	0x91
+ 46051 cc6d A07B     		.sleb128 -608
+ 46052 cc6f 35       		.uleb128 0x35
+ 46053 cc70 B00C0000 		.long	0xcb0
+ 46054 cc74 00000000 		.quad	.LBB2870
+ 46054      00000000 
+ 46055 cc7c 00000000 		.quad	.LBE2870
+ 46055      00000000 
+ 46056 cc84 02       		.byte	0x2
+ 46057 cc85 8803     		.value	0x388
+ 46058 cc87 32       		.uleb128 0x32
+ 46059 cc88 CE0C0000 		.long	0xcce
+ 46060 cc8c 03       		.byte	0x3
+ 46061 cc8d 91       		.byte	0x91
+ 46062 cc8e B87B     		.sleb128 -584
+ 46063 cc90 32       		.uleb128 0x32
+ 46064 cc91 C20C0000 		.long	0xcc2
+ 46065 cc95 03       		.byte	0x3
+ 46066 cc96 91       		.byte	0x91
+ 46067 cc97 C07B     		.sleb128 -576
+ 46068 cc99 33       		.uleb128 0x33
+ 46069 cc9a 00000000 		.quad	.LBB2871
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1170
+
+
+ 46069      00000000 
+ 46070 cca2 00000000 		.quad	.LBE2871
+ 46070      00000000 
+ 46071 ccaa 34       		.uleb128 0x34
+ 46072 ccab DA0C0000 		.long	0xcda
+ 46073 ccaf 03       		.byte	0x3
+ 46074 ccb0 91       		.byte	0x91
+ 46075 ccb1 907C     		.sleb128 -496
+ 46076 ccb3 34       		.uleb128 0x34
+ 46077 ccb4 E50C0000 		.long	0xce5
+ 46078 ccb8 03       		.byte	0x3
+ 46079 ccb9 91       		.byte	0x91
+ 46080 ccba 807C     		.sleb128 -512
+ 46081 ccbc 34       		.uleb128 0x34
+ 46082 ccbd F00C0000 		.long	0xcf0
+ 46083 ccc1 03       		.byte	0x3
+ 46084 ccc2 91       		.byte	0x91
+ 46085 ccc3 F07B     		.sleb128 -528
+ 46086 ccc5 34       		.uleb128 0x34
+ 46087 ccc6 FC0C0000 		.long	0xcfc
+ 46088 ccca 03       		.byte	0x3
+ 46089 cccb 91       		.byte	0x91
+ 46090 cccc E07B     		.sleb128 -544
+ 46091 ccce 34       		.uleb128 0x34
+ 46092 cccf 080D0000 		.long	0xd08
+ 46093 ccd3 03       		.byte	0x3
+ 46094 ccd4 91       		.byte	0x91
+ 46095 ccd5 DC7B     		.sleb128 -548
+ 46096 ccd7 31       		.uleb128 0x31
+ 46097 ccd8 1F0D0000 		.long	0xd1f
+ 46098 ccdc 00000000 		.quad	.LBB2872
+ 46098      00000000 
+ 46099 cce4 00000000 		.quad	.LBE2872
+ 46099      00000000 
+ 46100 ccec 02       		.byte	0x2
+ 46101 cced 5603     		.value	0x356
+ 46102 ccef 06CD0000 		.long	0xcd06
+ 46103 ccf3 32       		.uleb128 0x32
+ 46104 ccf4 3A0D0000 		.long	0xd3a
+ 46105 ccf8 03       		.byte	0x3
+ 46106 ccf9 91       		.byte	0x91
+ 46107 ccfa A07C     		.sleb128 -480
+ 46108 ccfc 32       		.uleb128 0x32
+ 46109 ccfd 300D0000 		.long	0xd30
+ 46110 cd01 03       		.byte	0x3
+ 46111 cd02 91       		.byte	0x91
+ 46112 cd03 B07C     		.sleb128 -464
+ 46113 cd05 00       		.byte	0x0
+ 46114 cd06 31       		.uleb128 0x31
+ 46115 cd07 450D0000 		.long	0xd45
+ 46116 cd0b 00000000 		.quad	.LBB2874
+ 46116      00000000 
+ 46117 cd13 00000000 		.quad	.LBE2874
+ 46117      00000000 
+ 46118 cd1b 02       		.byte	0x2
+ 46119 cd1c 5E03     		.value	0x35e
+ 46120 cd1e 35CD0000 		.long	0xcd35
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1171
+
+
+ 46121 cd22 32       		.uleb128 0x32
+ 46122 cd23 620D0000 		.long	0xd62
+ 46123 cd27 03       		.byte	0x3
+ 46124 cd28 91       		.byte	0x91
+ 46125 cd29 C07C     		.sleb128 -448
+ 46126 cd2b 32       		.uleb128 0x32
+ 46127 cd2c 570D0000 		.long	0xd57
+ 46128 cd30 03       		.byte	0x3
+ 46129 cd31 91       		.byte	0x91
+ 46130 cd32 D07C     		.sleb128 -432
+ 46131 cd34 00       		.byte	0x0
+ 46132 cd35 31       		.uleb128 0x31
+ 46133 cd36 6E0D0000 		.long	0xd6e
+ 46134 cd3a 00000000 		.quad	.LBB2876
+ 46134      00000000 
+ 46135 cd42 00000000 		.quad	.LBE2876
+ 46135      00000000 
+ 46136 cd4a 02       		.byte	0x2
+ 46137 cd4b 6403     		.value	0x364
+ 46138 cd4d 9ACD0000 		.long	0xcd9a
+ 46139 cd51 32       		.uleb128 0x32
+ 46140 cd52 8C0D0000 		.long	0xd8c
+ 46141 cd56 03       		.byte	0x3
+ 46142 cd57 91       		.byte	0x91
+ 46143 cd58 E07C     		.sleb128 -416
+ 46144 cd5a 32       		.uleb128 0x32
+ 46145 cd5b 800D0000 		.long	0xd80
+ 46146 cd5f 03       		.byte	0x3
+ 46147 cd60 91       		.byte	0x91
+ 46148 cd61 F07C     		.sleb128 -400
+ 46149 cd63 33       		.uleb128 0x33
+ 46150 cd64 00000000 		.quad	.LBB2877
+ 46150      00000000 
+ 46151 cd6c 00000000 		.quad	.LBE2877
+ 46151      00000000 
+ 46152 cd74 34       		.uleb128 0x34
+ 46153 cd75 980D0000 		.long	0xd98
+ 46154 cd79 03       		.byte	0x3
+ 46155 cd7a 91       		.byte	0x91
+ 46156 cd7b D070     		.sleb128 -1968
+ 46157 cd7d 34       		.uleb128 0x34
+ 46158 cd7e A40D0000 		.long	0xda4
+ 46159 cd82 03       		.byte	0x3
+ 46160 cd83 91       		.byte	0x91
+ 46161 cd84 C070     		.sleb128 -1984
+ 46162 cd86 34       		.uleb128 0x34
+ 46163 cd87 AF0D0000 		.long	0xdaf
+ 46164 cd8b 03       		.byte	0x3
+ 46165 cd8c 91       		.byte	0x91
+ 46166 cd8d B070     		.sleb128 -2000
+ 46167 cd8f 34       		.uleb128 0x34
+ 46168 cd90 BB0D0000 		.long	0xdbb
+ 46169 cd94 03       		.byte	0x3
+ 46170 cd95 91       		.byte	0x91
+ 46171 cd96 8C7D     		.sleb128 -372
+ 46172 cd98 00       		.byte	0x0
+ 46173 cd99 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1172
+
+
+ 46174 cd9a 31       		.uleb128 0x31
+ 46175 cd9b C70D0000 		.long	0xdc7
+ 46176 cd9f 00000000 		.quad	.LBB2878
+ 46176      00000000 
+ 46177 cda7 00000000 		.quad	.LBE2878
+ 46177      00000000 
+ 46178 cdaf 02       		.byte	0x2
+ 46179 cdb0 6603     		.value	0x366
+ 46180 cdb2 C9CD0000 		.long	0xcdc9
+ 46181 cdb6 32       		.uleb128 0x32
+ 46182 cdb7 E20D0000 		.long	0xde2
+ 46183 cdbb 03       		.byte	0x3
+ 46184 cdbc 91       		.byte	0x91
+ 46185 cdbd 907D     		.sleb128 -368
+ 46186 cdbf 32       		.uleb128 0x32
+ 46187 cdc0 D80D0000 		.long	0xdd8
+ 46188 cdc4 03       		.byte	0x3
+ 46189 cdc5 91       		.byte	0x91
+ 46190 cdc6 A07D     		.sleb128 -352
+ 46191 cdc8 00       		.byte	0x0
+ 46192 cdc9 31       		.uleb128 0x31
+ 46193 cdca 6E0D0000 		.long	0xd6e
+ 46194 cdce 00000000 		.quad	.LBB2880
+ 46194      00000000 
+ 46195 cdd6 00000000 		.quad	.LBE2880
+ 46195      00000000 
+ 46196 cdde 02       		.byte	0x2
+ 46197 cddf 6803     		.value	0x368
+ 46198 cde1 2ECE0000 		.long	0xce2e
+ 46199 cde5 32       		.uleb128 0x32
+ 46200 cde6 8C0D0000 		.long	0xd8c
+ 46201 cdea 03       		.byte	0x3
+ 46202 cdeb 91       		.byte	0x91
+ 46203 cdec B07D     		.sleb128 -336
+ 46204 cdee 32       		.uleb128 0x32
+ 46205 cdef 800D0000 		.long	0xd80
+ 46206 cdf3 03       		.byte	0x3
+ 46207 cdf4 91       		.byte	0x91
+ 46208 cdf5 C07D     		.sleb128 -320
+ 46209 cdf7 33       		.uleb128 0x33
+ 46210 cdf8 00000000 		.quad	.LBB2881
+ 46210      00000000 
+ 46211 ce00 00000000 		.quad	.LBE2881
+ 46211      00000000 
+ 46212 ce08 34       		.uleb128 0x34
+ 46213 ce09 980D0000 		.long	0xd98
+ 46214 ce0d 03       		.byte	0x3
+ 46215 ce0e 91       		.byte	0x91
+ 46216 ce0f 8071     		.sleb128 -1920
+ 46217 ce11 34       		.uleb128 0x34
+ 46218 ce12 A40D0000 		.long	0xda4
+ 46219 ce16 03       		.byte	0x3
+ 46220 ce17 91       		.byte	0x91
+ 46221 ce18 F070     		.sleb128 -1936
+ 46222 ce1a 34       		.uleb128 0x34
+ 46223 ce1b AF0D0000 		.long	0xdaf
+ 46224 ce1f 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1173
+
+
+ 46225 ce20 91       		.byte	0x91
+ 46226 ce21 E070     		.sleb128 -1952
+ 46227 ce23 34       		.uleb128 0x34
+ 46228 ce24 BB0D0000 		.long	0xdbb
+ 46229 ce28 03       		.byte	0x3
+ 46230 ce29 91       		.byte	0x91
+ 46231 ce2a DC7D     		.sleb128 -292
+ 46232 ce2c 00       		.byte	0x0
+ 46233 ce2d 00       		.byte	0x0
+ 46234 ce2e 31       		.uleb128 0x31
+ 46235 ce2f C70D0000 		.long	0xdc7
+ 46236 ce33 00000000 		.quad	.LBB2882
+ 46236      00000000 
+ 46237 ce3b 00000000 		.quad	.LBE2882
+ 46237      00000000 
+ 46238 ce43 02       		.byte	0x2
+ 46239 ce44 6A03     		.value	0x36a
+ 46240 ce46 5DCE0000 		.long	0xce5d
+ 46241 ce4a 32       		.uleb128 0x32
+ 46242 ce4b E20D0000 		.long	0xde2
+ 46243 ce4f 03       		.byte	0x3
+ 46244 ce50 91       		.byte	0x91
+ 46245 ce51 E07D     		.sleb128 -288
+ 46246 ce53 32       		.uleb128 0x32
+ 46247 ce54 D80D0000 		.long	0xdd8
+ 46248 ce58 03       		.byte	0x3
+ 46249 ce59 91       		.byte	0x91
+ 46250 ce5a F07D     		.sleb128 -272
+ 46251 ce5c 00       		.byte	0x0
+ 46252 ce5d 31       		.uleb128 0x31
+ 46253 ce5e ED0D0000 		.long	0xded
+ 46254 ce62 00000000 		.quad	.LBB2884
+ 46254      00000000 
+ 46255 ce6a 00000000 		.quad	.LBE2884
+ 46255      00000000 
+ 46256 ce72 02       		.byte	0x2
+ 46257 ce73 6C03     		.value	0x36c
+ 46258 ce75 8CCE0000 		.long	0xce8c
+ 46259 ce79 32       		.uleb128 0x32
+ 46260 ce7a 0A0E0000 		.long	0xe0a
+ 46261 ce7e 03       		.byte	0x3
+ 46262 ce7f 91       		.byte	0x91
+ 46263 ce80 807E     		.sleb128 -256
+ 46264 ce82 32       		.uleb128 0x32
+ 46265 ce83 FF0D0000 		.long	0xdff
+ 46266 ce87 03       		.byte	0x3
+ 46267 ce88 91       		.byte	0x91
+ 46268 ce89 907E     		.sleb128 -240
+ 46269 ce8b 00       		.byte	0x0
+ 46270 ce8c 35       		.uleb128 0x35
+ 46271 ce8d 1F0D0000 		.long	0xd1f
+ 46272 ce91 00000000 		.quad	.LBB2886
+ 46272      00000000 
+ 46273 ce99 00000000 		.quad	.LBE2886
+ 46273      00000000 
+ 46274 cea1 02       		.byte	0x2
+ 46275 cea2 6E03     		.value	0x36e
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1174
+
+
+ 46276 cea4 32       		.uleb128 0x32
+ 46277 cea5 3A0D0000 		.long	0xd3a
+ 46278 cea9 03       		.byte	0x3
+ 46279 ceaa 91       		.byte	0x91
+ 46280 ceab A07E     		.sleb128 -224
+ 46281 cead 32       		.uleb128 0x32
+ 46282 ceae 300D0000 		.long	0xd30
+ 46283 ceb2 03       		.byte	0x3
+ 46284 ceb3 91       		.byte	0x91
+ 46285 ceb4 B07E     		.sleb128 -208
+ 46286 ceb6 00       		.byte	0x0
+ 46287 ceb7 00       		.byte	0x0
+ 46288 ceb8 00       		.byte	0x0
+ 46289 ceb9 00       		.byte	0x0
+ 46290 ceba 36       		.uleb128 0x36
+ 46291 cebb 00000000 		.quad	.LBB2888
+ 46291      00000000 
+ 46292 cec3 00000000 		.quad	.LBE2888
+ 46292      00000000 
+ 46293 cecb D9CE0000 		.long	0xced9
+ 46294 cecf 34       		.uleb128 0x34
+ 46295 ced0 21C10000 		.long	0xc121
+ 46296 ced4 03       		.byte	0x3
+ 46297 ced5 91       		.byte	0x91
+ 46298 ced6 9070     		.sleb128 -2032
+ 46299 ced8 00       		.byte	0x0
+ 46300 ced9 31       		.uleb128 0x31
+ 46301 ceda A1C00000 		.long	0xc0a1
+ 46302 cede 00000000 		.quad	.LBB2889
+ 46302      00000000 
+ 46303 cee6 00000000 		.quad	.LBE2889
+ 46303      00000000 
+ 46304 ceee 02       		.byte	0x2
+ 46305 ceef C708     		.value	0x8c7
+ 46306 cef1 81CF0000 		.long	0xcf81
+ 46307 cef5 32       		.uleb128 0x32
+ 46308 cef6 B3C00000 		.long	0xc0b3
+ 46309 cefa 03       		.byte	0x3
+ 46310 cefb 91       		.byte	0x91
+ 46311 cefc C07E     		.sleb128 -192
+ 46312 cefe 33       		.uleb128 0x33
+ 46313 ceff 00000000 		.quad	.LBB2890
+ 46313      00000000 
+ 46314 cf07 00000000 		.quad	.LBE2890
+ 46314      00000000 
+ 46315 cf0f 34       		.uleb128 0x34
+ 46316 cf10 BFC00000 		.long	0xc0bf
+ 46317 cf14 09       		.byte	0x9
+ 46318 cf15 03       		.byte	0x3
+ 46319 cf16 00000000 		.quad	InvShiftRowTable.6750
+ 46319      00000000 
+ 46320 cf1e 35       		.uleb128 0x35
+ 46321 cf1f 6E0D0000 		.long	0xd6e
+ 46322 cf23 00000000 		.quad	.LBB2891
+ 46322      00000000 
+ 46323 cf2b 00000000 		.quad	.LBE2891
+ 46323      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1175
+
+
+ 46324 cf33 02       		.byte	0x2
+ 46325 cf34 6402     		.value	0x264
+ 46326 cf36 32       		.uleb128 0x32
+ 46327 cf37 8C0D0000 		.long	0xd8c
+ 46328 cf3b 03       		.byte	0x3
+ 46329 cf3c 91       		.byte	0x91
+ 46330 cf3d D07E     		.sleb128 -176
+ 46331 cf3f 32       		.uleb128 0x32
+ 46332 cf40 800D0000 		.long	0xd80
+ 46333 cf44 03       		.byte	0x3
+ 46334 cf45 91       		.byte	0x91
+ 46335 cf46 E07E     		.sleb128 -160
+ 46336 cf48 33       		.uleb128 0x33
+ 46337 cf49 00000000 		.quad	.LBB2892
+ 46337      00000000 
+ 46338 cf51 00000000 		.quad	.LBE2892
+ 46338      00000000 
+ 46339 cf59 34       		.uleb128 0x34
+ 46340 cf5a 980D0000 		.long	0xd98
+ 46341 cf5e 03       		.byte	0x3
+ 46342 cf5f 91       		.byte	0x91
+ 46343 cf60 B071     		.sleb128 -1872
+ 46344 cf62 34       		.uleb128 0x34
+ 46345 cf63 A40D0000 		.long	0xda4
+ 46346 cf67 03       		.byte	0x3
+ 46347 cf68 91       		.byte	0x91
+ 46348 cf69 A071     		.sleb128 -1888
+ 46349 cf6b 34       		.uleb128 0x34
+ 46350 cf6c AF0D0000 		.long	0xdaf
+ 46351 cf70 03       		.byte	0x3
+ 46352 cf71 91       		.byte	0x91
+ 46353 cf72 9071     		.sleb128 -1904
+ 46354 cf74 34       		.uleb128 0x34
+ 46355 cf75 BB0D0000 		.long	0xdbb
+ 46356 cf79 03       		.byte	0x3
+ 46357 cf7a 91       		.byte	0x91
+ 46358 cf7b FC7E     		.sleb128 -132
+ 46359 cf7d 00       		.byte	0x0
+ 46360 cf7e 00       		.byte	0x0
+ 46361 cf7f 00       		.byte	0x0
+ 46362 cf80 00       		.byte	0x0
+ 46363 cf81 36       		.uleb128 0x36
+ 46364 cf82 00000000 		.quad	.LBB2893
+ 46364      00000000 
+ 46365 cf8a 00000000 		.quad	.LBE2893
+ 46365      00000000 
+ 46366 cf92 A0CF0000 		.long	0xcfa0
+ 46367 cf96 34       		.uleb128 0x34
+ 46368 cf97 31C10000 		.long	0xc131
+ 46369 cf9b 03       		.byte	0x3
+ 46370 cf9c 91       		.byte	0x91
+ 46371 cf9d 8070     		.sleb128 -2048
+ 46372 cf9f 00       		.byte	0x0
+ 46373 cfa0 31       		.uleb128 0x31
+ 46374 cfa1 3EB00000 		.long	0xb03e
+ 46375 cfa5 00000000 		.quad	.LBB2894
+ 46375      00000000 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1176
+
+
+ 46376 cfad 00000000 		.quad	.LBE2894
+ 46376      00000000 
+ 46377 cfb5 02       		.byte	0x2
+ 46378 cfb6 CB08     		.value	0x8cb
+ 46379 cfb8 FACF0000 		.long	0xcffa
+ 46380 cfbc 32       		.uleb128 0x32
+ 46381 cfbd 5CB00000 		.long	0xb05c
+ 46382 cfc1 03       		.byte	0x3
+ 46383 cfc2 91       		.byte	0x91
+ 46384 cfc3 807F     		.sleb128 -128
+ 46385 cfc5 32       		.uleb128 0x32
+ 46386 cfc6 50B00000 		.long	0xb050
+ 46387 cfca 03       		.byte	0x3
+ 46388 cfcb 91       		.byte	0x91
+ 46389 cfcc 907F     		.sleb128 -112
+ 46390 cfce 35       		.uleb128 0x35
+ 46391 cfcf 520E0000 		.long	0xe52
+ 46392 cfd3 00000000 		.quad	.LBB2896
+ 46392      00000000 
+ 46393 cfdb 00000000 		.quad	.LBE2896
+ 46393      00000000 
+ 46394 cfe3 02       		.byte	0x2
+ 46395 cfe4 2302     		.value	0x223
+ 46396 cfe6 32       		.uleb128 0x32
+ 46397 cfe7 6D0E0000 		.long	0xe6d
+ 46398 cfeb 03       		.byte	0x3
+ 46399 cfec 91       		.byte	0x91
+ 46400 cfed A07F     		.sleb128 -96
+ 46401 cfef 32       		.uleb128 0x32
+ 46402 cff0 630E0000 		.long	0xe63
+ 46403 cff4 03       		.byte	0x3
+ 46404 cff5 91       		.byte	0x91
+ 46405 cff6 B07F     		.sleb128 -80
+ 46406 cff8 00       		.byte	0x0
+ 46407 cff9 00       		.byte	0x0
+ 46408 cffa 36       		.uleb128 0x36
+ 46409 cffb 00000000 		.quad	.LBB2898
+ 46409      00000000 
+ 46410 d003 00000000 		.quad	.LBE2898
+ 46410      00000000 
+ 46411 d00b 19D00000 		.long	0xd019
+ 46412 d00f 34       		.uleb128 0x34
+ 46413 d010 41C10000 		.long	0xc141
+ 46414 d014 03       		.byte	0x3
+ 46415 d015 91       		.byte	0x91
+ 46416 d016 F06F     		.sleb128 -2064
+ 46417 d018 00       		.byte	0x0
+ 46418 d019 33       		.uleb128 0x33
+ 46419 d01a 00000000 		.quad	.LBB2899
+ 46419      00000000 
+ 46420 d022 00000000 		.quad	.LBE2899
+ 46420      00000000 
+ 46421 d02a 34       		.uleb128 0x34
+ 46422 d02b 4DC10000 		.long	0xc14d
+ 46423 d02f 03       		.byte	0x3
+ 46424 d030 91       		.byte	0x91
+ 46425 d031 E06F     		.sleb128 -2080
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1177
+
+
+ 46426 d033 00       		.byte	0x0
+ 46427 d034 00       		.byte	0x0
+ 46428 d035 00       		.byte	0x0
+ 46429 d036 2D       		.uleb128 0x2d
+ 46430 d037 00000000 		.long	.LASF382
+ 46431 d03b 02       		.byte	0x2
+ 46432 d03c 0309     		.value	0x903
+ 46433 d03e 01       		.byte	0x1
+ 46434 d03f 00000000 		.quad	.LFB578
+ 46434      00000000 
+ 46435 d047 00000000 		.quad	.LFE578
+ 46435      00000000 
+ 46436 d04f 00000000 		.long	.LLST10
+ 46437 d053 67D00000 		.long	0xd067
+ 46438 d057 2E       		.uleb128 0x2e
+ 46439 d058 00000000 		.long	.LASF383
+ 46440 d05c 02       		.byte	0x2
+ 46441 d05d 0309     		.value	0x903
+ 46442 d05f D0030000 		.long	0x3d0
+ 46443 d063 02       		.byte	0x2
+ 46444 d064 91       		.byte	0x91
+ 46445 d065 68       		.sleb128 -24
+ 46446 d066 00       		.byte	0x0
+ 46447 d067 39       		.uleb128 0x39
+ 46448 d068 00000000 		.long	.LASF384
+ 46449 d06c 02       		.byte	0x2
+ 46450 d06d 0D09     		.value	0x90d
+ 46451 d06f 62000000 		.long	0x62
+ 46452 d073 00000000 		.quad	.LFB579
+ 46452      00000000 
+ 46453 d07b 00000000 		.quad	.LFE579
+ 46453      00000000 
+ 46454 d083 00000000 		.long	.LLST11
+ 46455 d087 39       		.uleb128 0x39
+ 46456 d088 00000000 		.long	.LASF385
+ 46457 d08c 02       		.byte	0x2
+ 46458 d08d 1C09     		.value	0x91c
+ 46459 d08f 62000000 		.long	0x62
+ 46460 d093 00000000 		.quad	.LFB580
+ 46460      00000000 
+ 46461 d09b 00000000 		.quad	.LFE580
+ 46461      00000000 
+ 46462 d0a3 00000000 		.long	.LLST12
+ 46463 d0a7 38       		.uleb128 0x38
+ 46464 d0a8 00000000 		.long	.LASF386
+ 46465 d0ac 02       		.byte	0x2
+ 46466 d0ad 2909     		.value	0x929
+ 46467 d0af 01       		.byte	0x1
+ 46468 d0b0 86000000 		.long	0x86
+ 46469 d0b4 00000000 		.quad	.LFB581
+ 46469      00000000 
+ 46470 d0bc 00000000 		.quad	.LFE581
+ 46470      00000000 
+ 46471 d0c4 00000000 		.long	.LLST13
+ 46472 d0c8 3FD10000 		.long	0xd13f
+ 46473 d0cc 2E       		.uleb128 0x2e
+ 46474 d0cd 00000000 		.long	.LASF387
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1178
+
+
+ 46475 d0d1 02       		.byte	0x2
+ 46476 d0d2 2909     		.value	0x929
+ 46477 d0d4 B9000000 		.long	0xb9
+ 46478 d0d8 02       		.byte	0x2
+ 46479 d0d9 91       		.byte	0x91
+ 46480 d0da 58       		.sleb128 -40
+ 46481 d0db 2E       		.uleb128 0x2e
+ 46482 d0dc 00000000 		.long	.LASF388
+ 46483 d0e0 02       		.byte	0x2
+ 46484 d0e1 2909     		.value	0x929
+ 46485 d0e3 AE000000 		.long	0xae
+ 46486 d0e7 02       		.byte	0x2
+ 46487 d0e8 91       		.byte	0x91
+ 46488 d0e9 50       		.sleb128 -48
+ 46489 d0ea 2E       		.uleb128 0x2e
+ 46490 d0eb 00000000 		.long	.LASF389
+ 46491 d0ef 02       		.byte	0x2
+ 46492 d0f0 2A09     		.value	0x92a
+ 46493 d0f2 62000000 		.long	0x62
+ 46494 d0f6 02       		.byte	0x2
+ 46495 d0f7 91       		.byte	0x91
+ 46496 d0f8 4C       		.sleb128 -52
+ 46497 d0f9 37       		.uleb128 0x37
+ 46498 d0fa 726300   		.string	"rc"
+ 46499 d0fd 02       		.byte	0x2
+ 46500 d0fe 2C09     		.value	0x92c
+ 46501 d100 86000000 		.long	0x86
+ 46502 d104 02       		.byte	0x2
+ 46503 d105 91       		.byte	0x91
+ 46504 d106 64       		.sleb128 -28
+ 46505 d107 37       		.uleb128 0x37
+ 46506 d108 6B657900 		.string	"key"
+ 46507 d10c 02       		.byte	0x2
+ 46508 d10d 2D09     		.value	0x92d
+ 46509 d10f 3FD10000 		.long	0xd13f
+ 46510 d113 02       		.byte	0x2
+ 46511 d114 91       		.byte	0x91
+ 46512 d115 68       		.sleb128 -24
+ 46513 d116 3A       		.uleb128 0x3a
+ 46514 d117 00000000 		.long	.LASF390
+ 46515 d11b 45D10000 		.long	0xd145
+ 46516 d11f 01       		.byte	0x1
+ 46517 d120 09       		.byte	0x9
+ 46518 d121 03       		.byte	0x3
+ 46519 d122 00000000 		.quad	__PRETTY_FUNCTION__.8463
+ 46519      00000000 
+ 46520 d12a 3A       		.uleb128 0x3a
+ 46521 d12b 00000000 		.long	.LASF391
+ 46522 d12f 4AD10000 		.long	0xd14a
+ 46523 d133 01       		.byte	0x1
+ 46524 d134 09       		.byte	0x9
+ 46525 d135 03       		.byte	0x3
+ 46526 d136 00000000 		.quad	__func__.8464
+ 46526      00000000 
+ 46527 d13e 00       		.byte	0x0
+ 46528 d13f 07       		.uleb128 0x7
+ 46529 d140 08       		.byte	0x8
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1179
+
+
+ 46530 d141 6B040000 		.long	0x46b
+ 46531 d145 06       		.uleb128 0x6
+ 46532 d146 C8000000 		.long	0xc8
+ 46533 d14a 06       		.uleb128 0x6
+ 46534 d14b C8000000 		.long	0xc8
+ 46535 d14f 38       		.uleb128 0x38
+ 46536 d150 00000000 		.long	.LASF392
+ 46537 d154 02       		.byte	0x2
+ 46538 d155 5409     		.value	0x954
+ 46539 d157 01       		.byte	0x1
+ 46540 d158 86000000 		.long	0x86
+ 46541 d15c 00000000 		.quad	.LFB582
+ 46541      00000000 
+ 46542 d164 00000000 		.quad	.LFE582
+ 46542      00000000 
+ 46543 d16c 00000000 		.long	.LLST14
+ 46544 d170 E4D10000 		.long	0xd1e4
+ 46545 d174 2E       		.uleb128 0x2e
+ 46546 d175 00000000 		.long	.LASF393
+ 46547 d179 02       		.byte	0x2
+ 46548 d17a 5409     		.value	0x954
+ 46549 d17c B9000000 		.long	0xb9
+ 46550 d180 03       		.byte	0x3
+ 46551 d181 91       		.byte	0x91
+ 46552 d182 D87D     		.sleb128 -296
+ 46553 d184 2E       		.uleb128 0x2e
+ 46554 d185 00000000 		.long	.LASF388
+ 46555 d189 02       		.byte	0x2
+ 46556 d18a 5509     		.value	0x955
+ 46557 d18c AE000000 		.long	0xae
+ 46558 d190 03       		.byte	0x3
+ 46559 d191 91       		.byte	0x91
+ 46560 d192 D07D     		.sleb128 -304
+ 46561 d194 2E       		.uleb128 0x2e
+ 46562 d195 00000000 		.long	.LASF389
+ 46563 d199 02       		.byte	0x2
+ 46564 d19a 5609     		.value	0x956
+ 46565 d19c 62000000 		.long	0x62
+ 46566 d1a0 03       		.byte	0x3
+ 46567 d1a1 91       		.byte	0x91
+ 46568 d1a2 CC7D     		.sleb128 -308
+ 46569 d1a4 30       		.uleb128 0x30
+ 46570 d1a5 00000000 		.long	.LASF387
+ 46571 d1a9 02       		.byte	0x2
+ 46572 d1aa 5809     		.value	0x958
+ 46573 d1ac 6B040000 		.long	0x46b
+ 46574 d1b0 03       		.byte	0x3
+ 46575 d1b1 91       		.byte	0x91
+ 46576 d1b2 E07D     		.sleb128 -288
+ 46577 d1b4 37       		.uleb128 0x37
+ 46578 d1b5 726300   		.string	"rc"
+ 46579 d1b8 02       		.byte	0x2
+ 46580 d1b9 5909     		.value	0x959
+ 46581 d1bb 86000000 		.long	0x86
+ 46582 d1bf 02       		.byte	0x2
+ 46583 d1c0 91       		.byte	0x91
+ 46584 d1c1 64       		.sleb128 -28
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1180
+
+
+ 46585 d1c2 33       		.uleb128 0x33
+ 46586 d1c3 00000000 		.quad	.LBB2900
+ 46586      00000000 
+ 46587 d1cb 00000000 		.quad	.LBE2900
+ 46587      00000000 
+ 46588 d1d3 37       		.uleb128 0x37
+ 46589 d1d4 6B657900 		.string	"key"
+ 46590 d1d8 02       		.byte	0x2
+ 46591 d1d9 5E09     		.value	0x95e
+ 46592 d1db 3FD10000 		.long	0xd13f
+ 46593 d1df 02       		.byte	0x2
+ 46594 d1e0 91       		.byte	0x91
+ 46595 d1e1 68       		.sleb128 -24
+ 46596 d1e2 00       		.byte	0x0
+ 46597 d1e3 00       		.byte	0x0
+ 46598 d1e4 38       		.uleb128 0x38
+ 46599 d1e5 00000000 		.long	.LASF394
+ 46600 d1e9 02       		.byte	0x2
+ 46601 d1ea 8009     		.value	0x980
+ 46602 d1ec 01       		.byte	0x1
+ 46603 d1ed B1010000 		.long	0x1b1
+ 46604 d1f1 00000000 		.quad	.LFB583
+ 46604      00000000 
+ 46605 d1f9 00000000 		.quad	.LFE583
+ 46605      00000000 
+ 46606 d201 00000000 		.long	.LLST15
+ 46607 d205 4BD20000 		.long	0xd24b
+ 46608 d209 2E       		.uleb128 0x2e
+ 46609 d20a 00000000 		.long	.LASF66
+ 46610 d20e 02       		.byte	0x2
+ 46611 d20f 8009     		.value	0x980
+ 46612 d211 B1010000 		.long	0x1b1
+ 46613 d215 02       		.byte	0x2
+ 46614 d216 91       		.byte	0x91
+ 46615 d217 50       		.sleb128 -48
+ 46616 d218 2E       		.uleb128 0x2e
+ 46617 d219 00000000 		.long	.LASF387
+ 46618 d21d 02       		.byte	0x2
+ 46619 d21e 8109     		.value	0x981
+ 46620 d220 D8000000 		.long	0xd8
+ 46621 d224 02       		.byte	0x2
+ 46622 d225 91       		.byte	0x91
+ 46623 d226 48       		.sleb128 -56
+ 46624 d227 37       		.uleb128 0x37
+ 46625 d228 6B657900 		.string	"key"
+ 46626 d22c 02       		.byte	0x2
+ 46627 d22d 8309     		.value	0x983
+ 46628 d22f 4BD20000 		.long	0xd24b
+ 46629 d233 02       		.byte	0x2
+ 46630 d234 91       		.byte	0x91
+ 46631 d235 68       		.sleb128 -24
+ 46632 d236 3A       		.uleb128 0x3a
+ 46633 d237 00000000 		.long	.LASF390
+ 46634 d23b 66D20000 		.long	0xd266
+ 46635 d23f 01       		.byte	0x1
+ 46636 d240 09       		.byte	0x9
+ 46637 d241 03       		.byte	0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1181
+
+
+ 46638 d242 00000000 		.quad	__PRETTY_FUNCTION__.8500
+ 46638      00000000 
+ 46639 d24a 00       		.byte	0x0
+ 46640 d24b 07       		.uleb128 0x7
+ 46641 d24c 08       		.byte	0x8
+ 46642 d24d 51D20000 		.long	0xd251
+ 46643 d251 06       		.uleb128 0x6
+ 46644 d252 6B040000 		.long	0x46b
+ 46645 d256 09       		.uleb128 0x9
+ 46646 d257 94000000 		.long	0x94
+ 46647 d25b 66D20000 		.long	0xd266
+ 46648 d25f 0A       		.uleb128 0xa
+ 46649 d260 91000000 		.long	0x91
+ 46650 d264 19       		.byte	0x19
+ 46651 d265 00       		.byte	0x0
+ 46652 d266 06       		.uleb128 0x6
+ 46653 d267 56D20000 		.long	0xd256
+ 46654 d26b 38       		.uleb128 0x38
+ 46655 d26c 00000000 		.long	.LASF395
+ 46656 d270 02       		.byte	0x2
+ 46657 d271 A409     		.value	0x9a4
+ 46658 d273 01       		.byte	0x1
+ 46659 d274 B1010000 		.long	0x1b1
+ 46660 d278 00000000 		.quad	.LFB584
+ 46660      00000000 
+ 46661 d280 00000000 		.quad	.LFE584
+ 46661      00000000 
+ 46662 d288 00000000 		.long	.LLST16
+ 46663 d28c D2D20000 		.long	0xd2d2
+ 46664 d290 2E       		.uleb128 0x2e
+ 46665 d291 00000000 		.long	.LASF66
+ 46666 d295 02       		.byte	0x2
+ 46667 d296 A409     		.value	0x9a4
+ 46668 d298 B1010000 		.long	0x1b1
+ 46669 d29c 02       		.byte	0x2
+ 46670 d29d 91       		.byte	0x91
+ 46671 d29e 50       		.sleb128 -48
+ 46672 d29f 2E       		.uleb128 0x2e
+ 46673 d2a0 00000000 		.long	.LASF393
+ 46674 d2a4 02       		.byte	0x2
+ 46675 d2a5 A509     		.value	0x9a5
+ 46676 d2a7 D8000000 		.long	0xd8
+ 46677 d2ab 02       		.byte	0x2
+ 46678 d2ac 91       		.byte	0x91
+ 46679 d2ad 48       		.sleb128 -56
+ 46680 d2ae 37       		.uleb128 0x37
+ 46681 d2af 6B657900 		.string	"key"
+ 46682 d2b3 02       		.byte	0x2
+ 46683 d2b4 A709     		.value	0x9a7
+ 46684 d2b6 4BD20000 		.long	0xd24b
+ 46685 d2ba 02       		.byte	0x2
+ 46686 d2bb 91       		.byte	0x91
+ 46687 d2bc 68       		.sleb128 -24
+ 46688 d2bd 3A       		.uleb128 0x3a
+ 46689 d2be 00000000 		.long	.LASF390
+ 46690 d2c2 D2D20000 		.long	0xd2d2
+ 46691 d2c6 01       		.byte	0x1
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1182
+
+
+ 46692 d2c7 09       		.byte	0x9
+ 46693 d2c8 03       		.byte	0x3
+ 46694 d2c9 00000000 		.quad	__PRETTY_FUNCTION__.8521
+ 46694      00000000 
+ 46695 d2d1 00       		.byte	0x0
+ 46696 d2d2 06       		.uleb128 0x6
+ 46697 d2d3 56D20000 		.long	0xd256
+ 46698 d2d7 3B       		.uleb128 0x3b
+ 46699 d2d8 00000000 		.long	.LASF396
+ 46700 d2dc 02       		.byte	0x2
+ 46701 d2dd CC09     		.value	0x9cc
+ 46702 d2df 62D30000 		.long	0xd362
+ 46703 d2e3 00000000 		.quad	.LFB585
+ 46703      00000000 
+ 46704 d2eb 00000000 		.quad	.LFE585
+ 46704      00000000 
+ 46705 d2f3 00000000 		.long	.LLST17
+ 46706 d2f7 62D30000 		.long	0xd362
+ 46707 d2fb 30       		.uleb128 0x30
+ 46708 d2fc 00000000 		.long	.LASF397
+ 46709 d300 02       		.byte	0x2
+ 46710 d301 CE09     		.value	0x9ce
+ 46711 d303 62000000 		.long	0x62
+ 46712 d307 02       		.byte	0x2
+ 46713 d308 91       		.byte	0x91
+ 46714 d309 48       		.sleb128 -56
+ 46715 d30a 37       		.uleb128 0x37
+ 46716 d30b 6100     		.string	"a"
+ 46717 d30d 02       		.byte	0x2
+ 46718 d30e CE09     		.value	0x9ce
+ 46719 d310 62000000 		.long	0x62
+ 46720 d314 02       		.byte	0x2
+ 46721 d315 91       		.byte	0x91
+ 46722 d316 4C       		.sleb128 -52
+ 46723 d317 37       		.uleb128 0x37
+ 46724 d318 6200     		.string	"b"
+ 46725 d31a 02       		.byte	0x2
+ 46726 d31b CE09     		.value	0x9ce
+ 46727 d31d 62000000 		.long	0x62
+ 46728 d321 02       		.byte	0x2
+ 46729 d322 91       		.byte	0x91
+ 46730 d323 50       		.sleb128 -48
+ 46731 d324 37       		.uleb128 0x37
+ 46732 d325 6300     		.string	"c"
+ 46733 d327 02       		.byte	0x2
+ 46734 d328 CE09     		.value	0x9ce
+ 46735 d32a 62000000 		.long	0x62
+ 46736 d32e 02       		.byte	0x2
+ 46737 d32f 91       		.byte	0x91
+ 46738 d330 54       		.sleb128 -44
+ 46739 d331 37       		.uleb128 0x37
+ 46740 d332 6400     		.string	"d"
+ 46741 d334 02       		.byte	0x2
+ 46742 d335 CE09     		.value	0x9ce
+ 46743 d337 62000000 		.long	0x62
+ 46744 d33b 02       		.byte	0x2
+ 46745 d33c 91       		.byte	0x91
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1183
+
+
+ 46746 d33d 58       		.sleb128 -40
+ 46747 d33e 37       		.uleb128 0x37
+ 46748 d33f 72657400 		.string	"ret"
+ 46749 d343 02       		.byte	0x2
+ 46750 d344 CF09     		.value	0x9cf
+ 46751 d346 62D30000 		.long	0xd362
+ 46752 d34a 02       		.byte	0x2
+ 46753 d34b 91       		.byte	0x91
+ 46754 d34c 5F       		.sleb128 -33
+ 46755 d34d 3A       		.uleb128 0x3a
+ 46756 d34e 00000000 		.long	.LASF391
+ 46757 d352 79D30000 		.long	0xd379
+ 46758 d356 01       		.byte	0x1
+ 46759 d357 09       		.byte	0x9
+ 46760 d358 03       		.byte	0x3
+ 46761 d359 00000000 		.quad	__func__.8545
+ 46761      00000000 
+ 46762 d361 00       		.byte	0x0
+ 46763 d362 02       		.uleb128 0x2
+ 46764 d363 01       		.byte	0x1
+ 46765 d364 02       		.byte	0x2
+ 46766 d365 00000000 		.long	.LASF398
+ 46767 d369 09       		.uleb128 0x9
+ 46768 d36a 94000000 		.long	0x94
+ 46769 d36e 79D30000 		.long	0xd379
+ 46770 d372 0A       		.uleb128 0xa
+ 46771 d373 91000000 		.long	0x91
+ 46772 d377 22       		.byte	0x22
+ 46773 d378 00       		.byte	0x0
+ 46774 d379 06       		.uleb128 0x6
+ 46775 d37a 69D30000 		.long	0xd369
+ 46776 d37e 3C       		.uleb128 0x3c
+ 46777 d37f 01       		.byte	0x1
+ 46778 d380 00000000 		.long	.LASF416
+ 46779 d384 02       		.byte	0x2
+ 46780 d385 390A     		.value	0xa39
+ 46781 d387 01       		.byte	0x1
+ 46782 d388 86000000 		.long	0x86
+ 46783 d38c 00000000 		.quad	.LFB586
+ 46783      00000000 
+ 46784 d394 00000000 		.quad	.LFE586
+ 46784      00000000 
+ 46785 d39c 00000000 		.long	.LLST18
+ 46786 d3a0 EAD30000 		.long	0xd3ea
+ 46787 d3a4 2E       		.uleb128 0x2e
+ 46788 d3a5 00000000 		.long	.LASF399
+ 46789 d3a9 02       		.byte	0x2
+ 46790 d3aa 390A     		.value	0xa39
+ 46791 d3ac EAD30000 		.long	0xd3ea
+ 46792 d3b0 02       		.byte	0x2
+ 46793 d3b1 91       		.byte	0x91
+ 46794 d3b2 58       		.sleb128 -40
+ 46795 d3b3 37       		.uleb128 0x37
+ 46796 d3b4 726300   		.string	"rc"
+ 46797 d3b7 02       		.byte	0x2
+ 46798 d3b8 3B0A     		.value	0xa3b
+ 46799 d3ba 86000000 		.long	0x86
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1184
+
+
+ 46800 d3be 02       		.byte	0x2
+ 46801 d3bf 91       		.byte	0x91
+ 46802 d3c0 6C       		.sleb128 -20
+ 46803 d3c1 3A       		.uleb128 0x3a
+ 46804 d3c2 00000000 		.long	.LASF391
+ 46805 d3c6 06D40000 		.long	0xd406
+ 46806 d3ca 01       		.byte	0x1
+ 46807 d3cb 09       		.byte	0x9
+ 46808 d3cc 03       		.byte	0x3
+ 46809 d3cd 00000000 		.quad	__func__.8570
+ 46809      00000000 
+ 46810 d3d5 3A       		.uleb128 0x3a
+ 46811 d3d6 00000000 		.long	.LASF390
+ 46812 d3da 0BD40000 		.long	0xd40b
+ 46813 d3de 01       		.byte	0x1
+ 46814 d3df 09       		.byte	0x9
+ 46815 d3e0 03       		.byte	0x3
+ 46816 d3e1 00000000 		.quad	__PRETTY_FUNCTION__.8571
+ 46816      00000000 
+ 46817 d3e9 00       		.byte	0x0
+ 46818 d3ea 07       		.uleb128 0x7
+ 46819 d3eb 08       		.byte	0x8
+ 46820 d3ec F0D30000 		.long	0xd3f0
+ 46821 d3f0 07       		.uleb128 0x7
+ 46822 d3f1 08       		.byte	0x8
+ 46823 d3f2 32050000 		.long	0x532
+ 46824 d3f6 09       		.uleb128 0x9
+ 46825 d3f7 94000000 		.long	0x94
+ 46826 d3fb 06D40000 		.long	0xd406
+ 46827 d3ff 0A       		.uleb128 0xa
+ 46828 d400 91000000 		.long	0x91
+ 46829 d404 16       		.byte	0x16
+ 46830 d405 00       		.byte	0x0
+ 46831 d406 06       		.uleb128 0x6
+ 46832 d407 F6D30000 		.long	0xd3f6
+ 46833 d40b 06       		.uleb128 0x6
+ 46834 d40c F6D30000 		.long	0xd3f6
+ 46835 d410 3D       		.uleb128 0x3d
+ 46836 d411 00000000 		.long	.LASF400
+ 46837 d415 02       		.byte	0x2
+ 46838 d416 53       		.byte	0x53
+ 46839 d417 1A0D0000 		.long	0xd1a
+ 46840 d41b 09       		.byte	0x9
+ 46841 d41c 03       		.byte	0x3
+ 46842 d41d 00000000 		.quad	vec_00
+ 46842      00000000 
+ 46843 d425 3D       		.uleb128 0x3d
+ 46844 d426 00000000 		.long	.LASF401
+ 46845 d42a 02       		.byte	0x2
+ 46846 d42b 57       		.byte	0x57
+ 46847 d42c 1A0D0000 		.long	0xd1a
+ 46848 d430 09       		.byte	0x9
+ 46849 d431 03       		.byte	0x3
+ 46850 d432 00000000 		.quad	vec_01
+ 46850      00000000 
+ 46851 d43a 3D       		.uleb128 0x3d
+ 46852 d43b 00000000 		.long	.LASF402
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1185
+
+
+ 46853 d43f 02       		.byte	0x2
+ 46854 d440 5B       		.byte	0x5b
+ 46855 d441 1A0D0000 		.long	0xd1a
+ 46856 d445 09       		.byte	0x9
+ 46857 d446 03       		.byte	0x3
+ 46858 d447 00000000 		.quad	vec_0F
+ 46858      00000000 
+ 46859 d44f 3D       		.uleb128 0x3d
+ 46860 d450 00000000 		.long	.LASF403
+ 46861 d454 02       		.byte	0x2
+ 46862 d455 5F       		.byte	0x5f
+ 46863 d456 1A0D0000 		.long	0xd1a
+ 46864 d45a 09       		.byte	0x9
+ 46865 d45b 03       		.byte	0x3
+ 46866 d45c 00000000 		.quad	vec_10
+ 46866      00000000 
+ 46867 d464 09       		.uleb128 0x9
+ 46868 d465 FC030000 		.long	0x3fc
+ 46869 d469 74D40000 		.long	0xd474
+ 46870 d46d 0A       		.uleb128 0xa
+ 46871 d46e 91000000 		.long	0x91
+ 46872 d472 FF       		.byte	0xff
+ 46873 d473 00       		.byte	0x0
+ 46874 d474 30       		.uleb128 0x30
+ 46875 d475 00000000 		.long	.LASF404
+ 46876 d479 02       		.byte	0x2
+ 46877 d47a AA02     		.value	0x2aa
+ 46878 d47c 8AD40000 		.long	0xd48a
+ 46879 d480 09       		.byte	0x9
+ 46880 d481 03       		.byte	0x3
+ 46881 d482 00000000 		.quad	KAESBlockCipherVecRijndaelSBox
+ 46881      00000000 
+ 46882 d48a 06       		.uleb128 0x6
+ 46883 d48b 64D40000 		.long	0xd464
+ 46884 d48f 09       		.uleb128 0x9
+ 46885 d490 B1010000 		.long	0x1b1
+ 46886 d494 9FD40000 		.long	0xd49f
+ 46887 d498 0A       		.uleb128 0xa
+ 46888 d499 91000000 		.long	0x91
+ 46889 d49d 0F       		.byte	0xf
+ 46890 d49e 00       		.byte	0x0
+ 46891 d49f 30       		.uleb128 0x30
+ 46892 d4a0 00000000 		.long	.LASF405
+ 46893 d4a4 02       		.byte	0x2
+ 46894 d4a5 1903     		.value	0x319
+ 46895 d4a7 B5D40000 		.long	0xd4b5
+ 46896 d4ab 09       		.byte	0x9
+ 46897 d4ac 03       		.byte	0x3
+ 46898 d4ad 00000000 		.quad	KAESBlockCipherVecRijndaelSBoxV
+ 46898      00000000 
+ 46899 d4b5 06       		.uleb128 0x6
+ 46900 d4b6 8FD40000 		.long	0xd48f
+ 46901 d4ba 30       		.uleb128 0x30
+ 46902 d4bb 00000000 		.long	.LASF406
+ 46903 d4bf 02       		.byte	0x2
+ 46904 d4c0 2F03     		.value	0x32f
+ 46905 d4c2 D0D40000 		.long	0xd4d0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1186
+
+
+ 46906 d4c6 09       		.byte	0x9
+ 46907 d4c7 03       		.byte	0x3
+ 46908 d4c8 00000000 		.quad	KAESBlockCipherVecRijndaelInvSBoxV
+ 46908      00000000 
+ 46909 d4d0 06       		.uleb128 0x6
+ 46910 d4d1 8FD40000 		.long	0xd48f
+ 46911 d4d5 30       		.uleb128 0x30
+ 46912 d4d6 00000000 		.long	.LASF407
+ 46913 d4da 02       		.byte	0x2
+ 46914 d4db 4603     		.value	0x346
+ 46915 d4dd 1A0D0000 		.long	0xd1a
+ 46916 d4e1 09       		.byte	0x9
+ 46917 d4e2 03       		.byte	0x3
+ 46918 d4e3 00000000 		.quad	lo_filter
+ 46918      00000000 
+ 46919 d4eb 30       		.uleb128 0x30
+ 46920 d4ec 00000000 		.long	.LASF408
+ 46921 d4f0 02       		.byte	0x2
+ 46922 d4f1 9703     		.value	0x397
+ 46923 d4f3 1A0D0000 		.long	0xd1a
+ 46924 d4f7 09       		.byte	0x9
+ 46925 d4f8 03       		.byte	0x3
+ 46926 d4f9 00000000 		.quad	FF_tab
+ 46926      00000000 
+ 46927 d501 09       		.uleb128 0x9
+ 46928 d502 FC030000 		.long	0x3fc
+ 46929 d506 11D50000 		.long	0xd511
+ 46930 d50a 0A       		.uleb128 0xa
+ 46931 d50b 91000000 		.long	0x91
+ 46932 d50f 07       		.byte	0x7
+ 46933 d510 00       		.byte	0x0
+ 46934 d511 30       		.uleb128 0x30
+ 46935 d512 00000000 		.long	.LASF409
+ 46936 d516 02       		.byte	0x2
+ 46937 d517 DF03     		.value	0x3df
+ 46938 d519 01D50000 		.long	0xd501
+ 46939 d51d 09       		.byte	0x9
+ 46940 d51e 03       		.byte	0x3
+ 46941 d51f 00000000 		.quad	KAESBlockCipherVecFFtable
+ 46941      00000000 
+ 46942 d527 09       		.uleb128 0x9
+ 46943 d528 07040000 		.long	0x407
+ 46944 d52c 37D50000 		.long	0xd537
+ 46945 d530 0A       		.uleb128 0xa
+ 46946 d531 91000000 		.long	0x91
+ 46947 d535 09       		.byte	0x9
+ 46948 d536 00       		.byte	0x0
+ 46949 d537 30       		.uleb128 0x30
+ 46950 d538 00000000 		.long	.LASF410
+ 46951 d53c 02       		.byte	0x2
+ 46952 d53d 9E04     		.value	0x49e
+ 46953 d53f 4DD50000 		.long	0xd54d
+ 46954 d543 09       		.byte	0x9
+ 46955 d544 03       		.byte	0x3
+ 46956 d545 00000000 		.quad	KAESBlockCipherVecRcon
+ 46956      00000000 
+ 46957 d54d 06       		.uleb128 0x6
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1187
+
+
+ 46958 d54e 27D50000 		.long	0xd527
+ 46959 d552 09       		.uleb128 0x9
+ 46960 d553 94000000 		.long	0x94
+ 46961 d557 62D50000 		.long	0xd562
+ 46962 d55b 0A       		.uleb128 0xa
+ 46963 d55c 91000000 		.long	0x91
+ 46964 d560 09       		.byte	0x9
+ 46965 d561 00       		.byte	0x0
+ 46966 d562 30       		.uleb128 0x30
+ 46967 d563 00000000 		.long	.LASF411
+ 46968 d567 02       		.byte	0x2
+ 46969 d568 F708     		.value	0x8f7
+ 46970 d56a 78D50000 		.long	0xd578
+ 46971 d56e 09       		.byte	0x9
+ 46972 d56f 03       		.byte	0x3
+ 46973 d570 00000000 		.quad	KAESBlockCipherVecaes_ncbi_name
+ 46973      00000000 
+ 46974 d578 06       		.uleb128 0x6
+ 46975 d579 52D50000 		.long	0xd552
+ 46976 d57d 30       		.uleb128 0x30
+ 46977 d57e 00000000 		.long	.LASF412
+ 46978 d582 02       		.byte	0x2
+ 46979 d583 240A     		.value	0xa24
+ 46980 d585 93D50000 		.long	0xd593
+ 46981 d589 09       		.byte	0x9
+ 46982 d58a 03       		.byte	0x3
+ 46983 d58b 00000000 		.quad	KAESBlockCipherVec_vt_
+ 46983      00000000 
+ 46984 d593 06       		.uleb128 0x6
+ 46985 d594 0F030000 		.long	0x30f
+ 46986 d598 00       		.byte	0x0
+ 46987              		.section	.debug_abbrev
+ 46988 0000 01       		.uleb128 0x1
+ 46989 0001 11       		.uleb128 0x11
+ 46990 0002 01       		.byte	0x1
+ 46991 0003 25       		.uleb128 0x25
+ 46992 0004 0E       		.uleb128 0xe
+ 46993 0005 13       		.uleb128 0x13
+ 46994 0006 0B       		.uleb128 0xb
+ 46995 0007 03       		.uleb128 0x3
+ 46996 0008 0E       		.uleb128 0xe
+ 46997 0009 1B       		.uleb128 0x1b
+ 46998 000a 0E       		.uleb128 0xe
+ 46999 000b 11       		.uleb128 0x11
+ 47000 000c 01       		.uleb128 0x1
+ 47001 000d 12       		.uleb128 0x12
+ 47002 000e 01       		.uleb128 0x1
+ 47003 000f 10       		.uleb128 0x10
+ 47004 0010 06       		.uleb128 0x6
+ 47005 0011 00       		.byte	0x0
+ 47006 0012 00       		.byte	0x0
+ 47007 0013 02       		.uleb128 0x2
+ 47008 0014 24       		.uleb128 0x24
+ 47009 0015 00       		.byte	0x0
+ 47010 0016 0B       		.uleb128 0xb
+ 47011 0017 0B       		.uleb128 0xb
+ 47012 0018 3E       		.uleb128 0x3e
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1188
+
+
+ 47013 0019 0B       		.uleb128 0xb
+ 47014 001a 03       		.uleb128 0x3
+ 47015 001b 0E       		.uleb128 0xe
+ 47016 001c 00       		.byte	0x0
+ 47017 001d 00       		.byte	0x0
+ 47018 001e 03       		.uleb128 0x3
+ 47019 001f 24       		.uleb128 0x24
+ 47020 0020 00       		.byte	0x0
+ 47021 0021 0B       		.uleb128 0xb
+ 47022 0022 0B       		.uleb128 0xb
+ 47023 0023 3E       		.uleb128 0x3e
+ 47024 0024 0B       		.uleb128 0xb
+ 47025 0025 03       		.uleb128 0x3
+ 47026 0026 08       		.uleb128 0x8
+ 47027 0027 00       		.byte	0x0
+ 47028 0028 00       		.byte	0x0
+ 47029 0029 04       		.uleb128 0x4
+ 47030 002a 16       		.uleb128 0x16
+ 47031 002b 00       		.byte	0x0
+ 47032 002c 03       		.uleb128 0x3
+ 47033 002d 0E       		.uleb128 0xe
+ 47034 002e 3A       		.uleb128 0x3a
+ 47035 002f 0B       		.uleb128 0xb
+ 47036 0030 3B       		.uleb128 0x3b
+ 47037 0031 0B       		.uleb128 0xb
+ 47038 0032 49       		.uleb128 0x49
+ 47039 0033 13       		.uleb128 0x13
+ 47040 0034 00       		.byte	0x0
+ 47041 0035 00       		.byte	0x0
+ 47042 0036 05       		.uleb128 0x5
+ 47043 0037 24       		.uleb128 0x24
+ 47044 0038 00       		.byte	0x0
+ 47045 0039 0B       		.uleb128 0xb
+ 47046 003a 0B       		.uleb128 0xb
+ 47047 003b 3E       		.uleb128 0x3e
+ 47048 003c 0B       		.uleb128 0xb
+ 47049 003d 00       		.byte	0x0
+ 47050 003e 00       		.byte	0x0
+ 47051 003f 06       		.uleb128 0x6
+ 47052 0040 26       		.uleb128 0x26
+ 47053 0041 00       		.byte	0x0
+ 47054 0042 49       		.uleb128 0x49
+ 47055 0043 13       		.uleb128 0x13
+ 47056 0044 00       		.byte	0x0
+ 47057 0045 00       		.byte	0x0
+ 47058 0046 07       		.uleb128 0x7
+ 47059 0047 0F       		.uleb128 0xf
+ 47060 0048 00       		.byte	0x0
+ 47061 0049 0B       		.uleb128 0xb
+ 47062 004a 0B       		.uleb128 0xb
+ 47063 004b 49       		.uleb128 0x49
+ 47064 004c 13       		.uleb128 0x13
+ 47065 004d 00       		.byte	0x0
+ 47066 004e 00       		.byte	0x0
+ 47067 004f 08       		.uleb128 0x8
+ 47068 0050 0F       		.uleb128 0xf
+ 47069 0051 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1189
+
+
+ 47070 0052 0B       		.uleb128 0xb
+ 47071 0053 0B       		.uleb128 0xb
+ 47072 0054 00       		.byte	0x0
+ 47073 0055 00       		.byte	0x0
+ 47074 0056 09       		.uleb128 0x9
+ 47075 0057 01       		.uleb128 0x1
+ 47076 0058 01       		.byte	0x1
+ 47077 0059 49       		.uleb128 0x49
+ 47078 005a 13       		.uleb128 0x13
+ 47079 005b 01       		.uleb128 0x1
+ 47080 005c 13       		.uleb128 0x13
+ 47081 005d 00       		.byte	0x0
+ 47082 005e 00       		.byte	0x0
+ 47083 005f 0A       		.uleb128 0xa
+ 47084 0060 21       		.uleb128 0x21
+ 47085 0061 00       		.byte	0x0
+ 47086 0062 49       		.uleb128 0x49
+ 47087 0063 13       		.uleb128 0x13
+ 47088 0064 2F       		.uleb128 0x2f
+ 47089 0065 0B       		.uleb128 0xb
+ 47090 0066 00       		.byte	0x0
+ 47091 0067 00       		.byte	0x0
+ 47092 0068 0B       		.uleb128 0xb
+ 47093 0069 26       		.uleb128 0x26
+ 47094 006a 00       		.byte	0x0
+ 47095 006b 00       		.byte	0x0
+ 47096 006c 00       		.byte	0x0
+ 47097 006d 0C       		.uleb128 0xc
+ 47098 006e 01       		.uleb128 0x1
+ 47099 006f 01       		.byte	0x1
+ 47100 0070 8742     		.uleb128 0x2107
+ 47101 0072 0C       		.uleb128 0xc
+ 47102 0073 49       		.uleb128 0x49
+ 47103 0074 13       		.uleb128 0x13
+ 47104 0075 01       		.uleb128 0x1
+ 47105 0076 13       		.uleb128 0x13
+ 47106 0077 00       		.byte	0x0
+ 47107 0078 00       		.byte	0x0
+ 47108 0079 0D       		.uleb128 0xd
+ 47109 007a 04       		.uleb128 0x4
+ 47110 007b 01       		.byte	0x1
+ 47111 007c 0B       		.uleb128 0xb
+ 47112 007d 0B       		.uleb128 0xb
+ 47113 007e 3A       		.uleb128 0x3a
+ 47114 007f 0B       		.uleb128 0xb
+ 47115 0080 3B       		.uleb128 0x3b
+ 47116 0081 0B       		.uleb128 0xb
+ 47117 0082 01       		.uleb128 0x1
+ 47118 0083 13       		.uleb128 0x13
+ 47119 0084 00       		.byte	0x0
+ 47120 0085 00       		.byte	0x0
+ 47121 0086 0E       		.uleb128 0xe
+ 47122 0087 28       		.uleb128 0x28
+ 47123 0088 00       		.byte	0x0
+ 47124 0089 03       		.uleb128 0x3
+ 47125 008a 0E       		.uleb128 0xe
+ 47126 008b 1C       		.uleb128 0x1c
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1190
+
+
+ 47127 008c 0D       		.uleb128 0xd
+ 47128 008d 00       		.byte	0x0
+ 47129 008e 00       		.byte	0x0
+ 47130 008f 0F       		.uleb128 0xf
+ 47131 0090 04       		.uleb128 0x4
+ 47132 0091 01       		.byte	0x1
+ 47133 0092 0B       		.uleb128 0xb
+ 47134 0093 0B       		.uleb128 0xb
+ 47135 0094 3A       		.uleb128 0x3a
+ 47136 0095 0B       		.uleb128 0xb
+ 47137 0096 3B       		.uleb128 0x3b
+ 47138 0097 05       		.uleb128 0x5
+ 47139 0098 01       		.uleb128 0x1
+ 47140 0099 13       		.uleb128 0x13
+ 47141 009a 00       		.byte	0x0
+ 47142 009b 00       		.byte	0x0
+ 47143 009c 10       		.uleb128 0x10
+ 47144 009d 13       		.uleb128 0x13
+ 47145 009e 01       		.byte	0x1
+ 47146 009f 03       		.uleb128 0x3
+ 47147 00a0 0E       		.uleb128 0xe
+ 47148 00a1 0B       		.uleb128 0xb
+ 47149 00a2 0B       		.uleb128 0xb
+ 47150 00a3 3A       		.uleb128 0x3a
+ 47151 00a4 0B       		.uleb128 0xb
+ 47152 00a5 3B       		.uleb128 0x3b
+ 47153 00a6 0B       		.uleb128 0xb
+ 47154 00a7 01       		.uleb128 0x1
+ 47155 00a8 13       		.uleb128 0x13
+ 47156 00a9 00       		.byte	0x0
+ 47157 00aa 00       		.byte	0x0
+ 47158 00ab 11       		.uleb128 0x11
+ 47159 00ac 0D       		.uleb128 0xd
+ 47160 00ad 00       		.byte	0x0
+ 47161 00ae 03       		.uleb128 0x3
+ 47162 00af 08       		.uleb128 0x8
+ 47163 00b0 3A       		.uleb128 0x3a
+ 47164 00b1 0B       		.uleb128 0xb
+ 47165 00b2 3B       		.uleb128 0x3b
+ 47166 00b3 0B       		.uleb128 0xb
+ 47167 00b4 49       		.uleb128 0x49
+ 47168 00b5 13       		.uleb128 0x13
+ 47169 00b6 38       		.uleb128 0x38
+ 47170 00b7 0A       		.uleb128 0xa
+ 47171 00b8 00       		.byte	0x0
+ 47172 00b9 00       		.byte	0x0
+ 47173 00ba 12       		.uleb128 0x12
+ 47174 00bb 0D       		.uleb128 0xd
+ 47175 00bc 00       		.byte	0x0
+ 47176 00bd 03       		.uleb128 0x3
+ 47177 00be 0E       		.uleb128 0xe
+ 47178 00bf 3A       		.uleb128 0x3a
+ 47179 00c0 0B       		.uleb128 0xb
+ 47180 00c1 3B       		.uleb128 0x3b
+ 47181 00c2 0B       		.uleb128 0xb
+ 47182 00c3 49       		.uleb128 0x49
+ 47183 00c4 13       		.uleb128 0x13
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1191
+
+
+ 47184 00c5 38       		.uleb128 0x38
+ 47185 00c6 0A       		.uleb128 0xa
+ 47186 00c7 00       		.byte	0x0
+ 47187 00c8 00       		.byte	0x0
+ 47188 00c9 13       		.uleb128 0x13
+ 47189 00ca 17       		.uleb128 0x17
+ 47190 00cb 01       		.byte	0x1
+ 47191 00cc 03       		.uleb128 0x3
+ 47192 00cd 0E       		.uleb128 0xe
+ 47193 00ce 0B       		.uleb128 0xb
+ 47194 00cf 0B       		.uleb128 0xb
+ 47195 00d0 3A       		.uleb128 0x3a
+ 47196 00d1 0B       		.uleb128 0xb
+ 47197 00d2 3B       		.uleb128 0x3b
+ 47198 00d3 0B       		.uleb128 0xb
+ 47199 00d4 01       		.uleb128 0x1
+ 47200 00d5 13       		.uleb128 0x13
+ 47201 00d6 00       		.byte	0x0
+ 47202 00d7 00       		.byte	0x0
+ 47203 00d8 14       		.uleb128 0x14
+ 47204 00d9 0D       		.uleb128 0xd
+ 47205 00da 00       		.byte	0x0
+ 47206 00db 03       		.uleb128 0x3
+ 47207 00dc 0E       		.uleb128 0xe
+ 47208 00dd 3A       		.uleb128 0x3a
+ 47209 00de 0B       		.uleb128 0xb
+ 47210 00df 3B       		.uleb128 0x3b
+ 47211 00e0 0B       		.uleb128 0xb
+ 47212 00e1 49       		.uleb128 0x49
+ 47213 00e2 13       		.uleb128 0x13
+ 47214 00e3 00       		.byte	0x0
+ 47215 00e4 00       		.byte	0x0
+ 47216 00e5 15       		.uleb128 0x15
+ 47217 00e6 0D       		.uleb128 0xd
+ 47218 00e7 00       		.byte	0x0
+ 47219 00e8 03       		.uleb128 0x3
+ 47220 00e9 08       		.uleb128 0x8
+ 47221 00ea 3A       		.uleb128 0x3a
+ 47222 00eb 0B       		.uleb128 0xb
+ 47223 00ec 3B       		.uleb128 0x3b
+ 47224 00ed 0B       		.uleb128 0xb
+ 47225 00ee 49       		.uleb128 0x49
+ 47226 00ef 13       		.uleb128 0x13
+ 47227 00f0 00       		.byte	0x0
+ 47228 00f1 00       		.byte	0x0
+ 47229 00f2 16       		.uleb128 0x16
+ 47230 00f3 15       		.uleb128 0x15
+ 47231 00f4 01       		.byte	0x1
+ 47232 00f5 27       		.uleb128 0x27
+ 47233 00f6 0C       		.uleb128 0xc
+ 47234 00f7 01       		.uleb128 0x1
+ 47235 00f8 13       		.uleb128 0x13
+ 47236 00f9 00       		.byte	0x0
+ 47237 00fa 00       		.byte	0x0
+ 47238 00fb 17       		.uleb128 0x17
+ 47239 00fc 05       		.uleb128 0x5
+ 47240 00fd 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1192
+
+
+ 47241 00fe 49       		.uleb128 0x49
+ 47242 00ff 13       		.uleb128 0x13
+ 47243 0100 00       		.byte	0x0
+ 47244 0101 00       		.byte	0x0
+ 47245 0102 18       		.uleb128 0x18
+ 47246 0103 15       		.uleb128 0x15
+ 47247 0104 01       		.byte	0x1
+ 47248 0105 49       		.uleb128 0x49
+ 47249 0106 13       		.uleb128 0x13
+ 47250 0107 01       		.uleb128 0x1
+ 47251 0108 13       		.uleb128 0x13
+ 47252 0109 00       		.byte	0x0
+ 47253 010a 00       		.byte	0x0
+ 47254 010b 19       		.uleb128 0x19
+ 47255 010c 18       		.uleb128 0x18
+ 47256 010d 00       		.byte	0x0
+ 47257 010e 00       		.byte	0x0
+ 47258 010f 00       		.byte	0x0
+ 47259 0110 1A       		.uleb128 0x1a
+ 47260 0111 15       		.uleb128 0x15
+ 47261 0112 01       		.byte	0x1
+ 47262 0113 27       		.uleb128 0x27
+ 47263 0114 0C       		.uleb128 0xc
+ 47264 0115 49       		.uleb128 0x49
+ 47265 0116 13       		.uleb128 0x13
+ 47266 0117 01       		.uleb128 0x1
+ 47267 0118 13       		.uleb128 0x13
+ 47268 0119 00       		.byte	0x0
+ 47269 011a 00       		.byte	0x0
+ 47270 011b 1B       		.uleb128 0x1b
+ 47271 011c 13       		.uleb128 0x13
+ 47272 011d 01       		.byte	0x1
+ 47273 011e 03       		.uleb128 0x3
+ 47274 011f 0E       		.uleb128 0xe
+ 47275 0120 0B       		.uleb128 0xb
+ 47276 0121 05       		.uleb128 0x5
+ 47277 0122 3A       		.uleb128 0x3a
+ 47278 0123 0B       		.uleb128 0xb
+ 47279 0124 3B       		.uleb128 0x3b
+ 47280 0125 0B       		.uleb128 0xb
+ 47281 0126 01       		.uleb128 0x1
+ 47282 0127 13       		.uleb128 0x13
+ 47283 0128 00       		.byte	0x0
+ 47284 0129 00       		.byte	0x0
+ 47285 012a 1C       		.uleb128 0x1c
+ 47286 012b 17       		.uleb128 0x17
+ 47287 012c 01       		.byte	0x1
+ 47288 012d 0B       		.uleb128 0xb
+ 47289 012e 0B       		.uleb128 0xb
+ 47290 012f 3A       		.uleb128 0x3a
+ 47291 0130 0B       		.uleb128 0xb
+ 47292 0131 3B       		.uleb128 0x3b
+ 47293 0132 0B       		.uleb128 0xb
+ 47294 0133 01       		.uleb128 0x1
+ 47295 0134 13       		.uleb128 0x13
+ 47296 0135 00       		.byte	0x0
+ 47297 0136 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1193
+
+
+ 47298 0137 1D       		.uleb128 0x1d
+ 47299 0138 04       		.uleb128 0x4
+ 47300 0139 01       		.byte	0x1
+ 47301 013a 03       		.uleb128 0x3
+ 47302 013b 0E       		.uleb128 0xe
+ 47303 013c 0B       		.uleb128 0xb
+ 47304 013d 0B       		.uleb128 0xb
+ 47305 013e 3A       		.uleb128 0x3a
+ 47306 013f 0B       		.uleb128 0xb
+ 47307 0140 3B       		.uleb128 0x3b
+ 47308 0141 0B       		.uleb128 0xb
+ 47309 0142 01       		.uleb128 0x1
+ 47310 0143 13       		.uleb128 0x13
+ 47311 0144 00       		.byte	0x0
+ 47312 0145 00       		.byte	0x0
+ 47313 0146 1E       		.uleb128 0x1e
+ 47314 0147 04       		.uleb128 0x4
+ 47315 0148 01       		.byte	0x1
+ 47316 0149 03       		.uleb128 0x3
+ 47317 014a 0E       		.uleb128 0xe
+ 47318 014b 0B       		.uleb128 0xb
+ 47319 014c 0B       		.uleb128 0xb
+ 47320 014d 3A       		.uleb128 0x3a
+ 47321 014e 0B       		.uleb128 0xb
+ 47322 014f 3B       		.uleb128 0x3b
+ 47323 0150 05       		.uleb128 0x5
+ 47324 0151 01       		.uleb128 0x1
+ 47325 0152 13       		.uleb128 0x13
+ 47326 0153 00       		.byte	0x0
+ 47327 0154 00       		.byte	0x0
+ 47328 0155 1F       		.uleb128 0x1f
+ 47329 0156 2E       		.uleb128 0x2e
+ 47330 0157 01       		.byte	0x1
+ 47331 0158 03       		.uleb128 0x3
+ 47332 0159 0E       		.uleb128 0xe
+ 47333 015a 3A       		.uleb128 0x3a
+ 47334 015b 0B       		.uleb128 0xb
+ 47335 015c 3B       		.uleb128 0x3b
+ 47336 015d 0B       		.uleb128 0xb
+ 47337 015e 27       		.uleb128 0x27
+ 47338 015f 0C       		.uleb128 0xc
+ 47339 0160 49       		.uleb128 0x49
+ 47340 0161 13       		.uleb128 0x13
+ 47341 0162 11       		.uleb128 0x11
+ 47342 0163 01       		.uleb128 0x1
+ 47343 0164 12       		.uleb128 0x12
+ 47344 0165 01       		.uleb128 0x1
+ 47345 0166 40       		.uleb128 0x40
+ 47346 0167 06       		.uleb128 0x6
+ 47347 0168 01       		.uleb128 0x1
+ 47348 0169 13       		.uleb128 0x13
+ 47349 016a 00       		.byte	0x0
+ 47350 016b 00       		.byte	0x0
+ 47351 016c 20       		.uleb128 0x20
+ 47352 016d 05       		.uleb128 0x5
+ 47353 016e 00       		.byte	0x0
+ 47354 016f 03       		.uleb128 0x3
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1194
+
+
+ 47355 0170 08       		.uleb128 0x8
+ 47356 0171 3A       		.uleb128 0x3a
+ 47357 0172 0B       		.uleb128 0xb
+ 47358 0173 3B       		.uleb128 0x3b
+ 47359 0174 0B       		.uleb128 0xb
+ 47360 0175 49       		.uleb128 0x49
+ 47361 0176 13       		.uleb128 0x13
+ 47362 0177 02       		.uleb128 0x2
+ 47363 0178 0A       		.uleb128 0xa
+ 47364 0179 00       		.byte	0x0
+ 47365 017a 00       		.byte	0x0
+ 47366 017b 21       		.uleb128 0x21
+ 47367 017c 34       		.uleb128 0x34
+ 47368 017d 00       		.byte	0x0
+ 47369 017e 03       		.uleb128 0x3
+ 47370 017f 08       		.uleb128 0x8
+ 47371 0180 3A       		.uleb128 0x3a
+ 47372 0181 0B       		.uleb128 0xb
+ 47373 0182 3B       		.uleb128 0x3b
+ 47374 0183 0B       		.uleb128 0xb
+ 47375 0184 49       		.uleb128 0x49
+ 47376 0185 13       		.uleb128 0x13
+ 47377 0186 02       		.uleb128 0x2
+ 47378 0187 0A       		.uleb128 0xa
+ 47379 0188 00       		.byte	0x0
+ 47380 0189 00       		.byte	0x0
+ 47381 018a 22       		.uleb128 0x22
+ 47382 018b 2E       		.uleb128 0x2e
+ 47383 018c 01       		.byte	0x1
+ 47384 018d 03       		.uleb128 0x3
+ 47385 018e 0E       		.uleb128 0xe
+ 47386 018f 3A       		.uleb128 0x3a
+ 47387 0190 0B       		.uleb128 0xb
+ 47388 0191 3B       		.uleb128 0x3b
+ 47389 0192 0B       		.uleb128 0xb
+ 47390 0193 27       		.uleb128 0x27
+ 47391 0194 0C       		.uleb128 0xc
+ 47392 0195 49       		.uleb128 0x49
+ 47393 0196 13       		.uleb128 0x13
+ 47394 0197 20       		.uleb128 0x20
+ 47395 0198 0B       		.uleb128 0xb
+ 47396 0199 01       		.uleb128 0x1
+ 47397 019a 13       		.uleb128 0x13
+ 47398 019b 00       		.byte	0x0
+ 47399 019c 00       		.byte	0x0
+ 47400 019d 23       		.uleb128 0x23
+ 47401 019e 05       		.uleb128 0x5
+ 47402 019f 00       		.byte	0x0
+ 47403 01a0 03       		.uleb128 0x3
+ 47404 01a1 08       		.uleb128 0x8
+ 47405 01a2 3A       		.uleb128 0x3a
+ 47406 01a3 0B       		.uleb128 0xb
+ 47407 01a4 3B       		.uleb128 0x3b
+ 47408 01a5 0B       		.uleb128 0xb
+ 47409 01a6 49       		.uleb128 0x49
+ 47410 01a7 13       		.uleb128 0x13
+ 47411 01a8 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1195
+
+
+ 47412 01a9 00       		.byte	0x0
+ 47413 01aa 24       		.uleb128 0x24
+ 47414 01ab 34       		.uleb128 0x34
+ 47415 01ac 00       		.byte	0x0
+ 47416 01ad 03       		.uleb128 0x3
+ 47417 01ae 08       		.uleb128 0x8
+ 47418 01af 3A       		.uleb128 0x3a
+ 47419 01b0 0B       		.uleb128 0xb
+ 47420 01b1 3B       		.uleb128 0x3b
+ 47421 01b2 0B       		.uleb128 0xb
+ 47422 01b3 49       		.uleb128 0x49
+ 47423 01b4 13       		.uleb128 0x13
+ 47424 01b5 00       		.byte	0x0
+ 47425 01b6 00       		.byte	0x0
+ 47426 01b7 25       		.uleb128 0x25
+ 47427 01b8 2E       		.uleb128 0x2e
+ 47428 01b9 01       		.byte	0x1
+ 47429 01ba 03       		.uleb128 0x3
+ 47430 01bb 0E       		.uleb128 0xe
+ 47431 01bc 3A       		.uleb128 0x3a
+ 47432 01bd 0B       		.uleb128 0xb
+ 47433 01be 3B       		.uleb128 0x3b
+ 47434 01bf 05       		.uleb128 0x5
+ 47435 01c0 27       		.uleb128 0x27
+ 47436 01c1 0C       		.uleb128 0xc
+ 47437 01c2 49       		.uleb128 0x49
+ 47438 01c3 13       		.uleb128 0x13
+ 47439 01c4 20       		.uleb128 0x20
+ 47440 01c5 0B       		.uleb128 0xb
+ 47441 01c6 01       		.uleb128 0x1
+ 47442 01c7 13       		.uleb128 0x13
+ 47443 01c8 00       		.byte	0x0
+ 47444 01c9 00       		.byte	0x0
+ 47445 01ca 26       		.uleb128 0x26
+ 47446 01cb 05       		.uleb128 0x5
+ 47447 01cc 00       		.byte	0x0
+ 47448 01cd 03       		.uleb128 0x3
+ 47449 01ce 0E       		.uleb128 0xe
+ 47450 01cf 3A       		.uleb128 0x3a
+ 47451 01d0 0B       		.uleb128 0xb
+ 47452 01d1 3B       		.uleb128 0x3b
+ 47453 01d2 05       		.uleb128 0x5
+ 47454 01d3 49       		.uleb128 0x49
+ 47455 01d4 13       		.uleb128 0x13
+ 47456 01d5 00       		.byte	0x0
+ 47457 01d6 00       		.byte	0x0
+ 47458 01d7 27       		.uleb128 0x27
+ 47459 01d8 34       		.uleb128 0x34
+ 47460 01d9 00       		.byte	0x0
+ 47461 01da 03       		.uleb128 0x3
+ 47462 01db 0E       		.uleb128 0xe
+ 47463 01dc 3A       		.uleb128 0x3a
+ 47464 01dd 0B       		.uleb128 0xb
+ 47465 01de 3B       		.uleb128 0x3b
+ 47466 01df 05       		.uleb128 0x5
+ 47467 01e0 49       		.uleb128 0x49
+ 47468 01e1 13       		.uleb128 0x13
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1196
+
+
+ 47469 01e2 00       		.byte	0x0
+ 47470 01e3 00       		.byte	0x0
+ 47471 01e4 28       		.uleb128 0x28
+ 47472 01e5 34       		.uleb128 0x34
+ 47473 01e6 00       		.byte	0x0
+ 47474 01e7 03       		.uleb128 0x3
+ 47475 01e8 08       		.uleb128 0x8
+ 47476 01e9 3A       		.uleb128 0x3a
+ 47477 01ea 0B       		.uleb128 0xb
+ 47478 01eb 3B       		.uleb128 0x3b
+ 47479 01ec 05       		.uleb128 0x5
+ 47480 01ed 49       		.uleb128 0x49
+ 47481 01ee 13       		.uleb128 0x13
+ 47482 01ef 00       		.byte	0x0
+ 47483 01f0 00       		.byte	0x0
+ 47484 01f1 29       		.uleb128 0x29
+ 47485 01f2 0B       		.uleb128 0xb
+ 47486 01f3 01       		.byte	0x1
+ 47487 01f4 01       		.uleb128 0x1
+ 47488 01f5 13       		.uleb128 0x13
+ 47489 01f6 00       		.byte	0x0
+ 47490 01f7 00       		.byte	0x0
+ 47491 01f8 2A       		.uleb128 0x2a
+ 47492 01f9 0B       		.uleb128 0xb
+ 47493 01fa 01       		.byte	0x1
+ 47494 01fb 00       		.byte	0x0
+ 47495 01fc 00       		.byte	0x0
+ 47496 01fd 2B       		.uleb128 0x2b
+ 47497 01fe 05       		.uleb128 0x5
+ 47498 01ff 00       		.byte	0x0
+ 47499 0200 03       		.uleb128 0x3
+ 47500 0201 08       		.uleb128 0x8
+ 47501 0202 3A       		.uleb128 0x3a
+ 47502 0203 0B       		.uleb128 0xb
+ 47503 0204 3B       		.uleb128 0x3b
+ 47504 0205 05       		.uleb128 0x5
+ 47505 0206 49       		.uleb128 0x49
+ 47506 0207 13       		.uleb128 0x13
+ 47507 0208 00       		.byte	0x0
+ 47508 0209 00       		.byte	0x0
+ 47509 020a 2C       		.uleb128 0x2c
+ 47510 020b 34       		.uleb128 0x34
+ 47511 020c 00       		.byte	0x0
+ 47512 020d 03       		.uleb128 0x3
+ 47513 020e 0E       		.uleb128 0xe
+ 47514 020f 3A       		.uleb128 0x3a
+ 47515 0210 0B       		.uleb128 0xb
+ 47516 0211 3B       		.uleb128 0x3b
+ 47517 0212 05       		.uleb128 0x5
+ 47518 0213 49       		.uleb128 0x49
+ 47519 0214 13       		.uleb128 0x13
+ 47520 0215 1C       		.uleb128 0x1c
+ 47521 0216 0A       		.uleb128 0xa
+ 47522 0217 00       		.byte	0x0
+ 47523 0218 00       		.byte	0x0
+ 47524 0219 2D       		.uleb128 0x2d
+ 47525 021a 2E       		.uleb128 0x2e
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1197
+
+
+ 47526 021b 01       		.byte	0x1
+ 47527 021c 03       		.uleb128 0x3
+ 47528 021d 0E       		.uleb128 0xe
+ 47529 021e 3A       		.uleb128 0x3a
+ 47530 021f 0B       		.uleb128 0xb
+ 47531 0220 3B       		.uleb128 0x3b
+ 47532 0221 05       		.uleb128 0x5
+ 47533 0222 27       		.uleb128 0x27
+ 47534 0223 0C       		.uleb128 0xc
+ 47535 0224 11       		.uleb128 0x11
+ 47536 0225 01       		.uleb128 0x1
+ 47537 0226 12       		.uleb128 0x12
+ 47538 0227 01       		.uleb128 0x1
+ 47539 0228 40       		.uleb128 0x40
+ 47540 0229 06       		.uleb128 0x6
+ 47541 022a 01       		.uleb128 0x1
+ 47542 022b 13       		.uleb128 0x13
+ 47543 022c 00       		.byte	0x0
+ 47544 022d 00       		.byte	0x0
+ 47545 022e 2E       		.uleb128 0x2e
+ 47546 022f 05       		.uleb128 0x5
+ 47547 0230 00       		.byte	0x0
+ 47548 0231 03       		.uleb128 0x3
+ 47549 0232 0E       		.uleb128 0xe
+ 47550 0233 3A       		.uleb128 0x3a
+ 47551 0234 0B       		.uleb128 0xb
+ 47552 0235 3B       		.uleb128 0x3b
+ 47553 0236 05       		.uleb128 0x5
+ 47554 0237 49       		.uleb128 0x49
+ 47555 0238 13       		.uleb128 0x13
+ 47556 0239 02       		.uleb128 0x2
+ 47557 023a 0A       		.uleb128 0xa
+ 47558 023b 00       		.byte	0x0
+ 47559 023c 00       		.byte	0x0
+ 47560 023d 2F       		.uleb128 0x2f
+ 47561 023e 05       		.uleb128 0x5
+ 47562 023f 00       		.byte	0x0
+ 47563 0240 03       		.uleb128 0x3
+ 47564 0241 08       		.uleb128 0x8
+ 47565 0242 3A       		.uleb128 0x3a
+ 47566 0243 0B       		.uleb128 0xb
+ 47567 0244 3B       		.uleb128 0x3b
+ 47568 0245 05       		.uleb128 0x5
+ 47569 0246 49       		.uleb128 0x49
+ 47570 0247 13       		.uleb128 0x13
+ 47571 0248 02       		.uleb128 0x2
+ 47572 0249 0A       		.uleb128 0xa
+ 47573 024a 00       		.byte	0x0
+ 47574 024b 00       		.byte	0x0
+ 47575 024c 30       		.uleb128 0x30
+ 47576 024d 34       		.uleb128 0x34
+ 47577 024e 00       		.byte	0x0
+ 47578 024f 03       		.uleb128 0x3
+ 47579 0250 0E       		.uleb128 0xe
+ 47580 0251 3A       		.uleb128 0x3a
+ 47581 0252 0B       		.uleb128 0xb
+ 47582 0253 3B       		.uleb128 0x3b
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1198
+
+
+ 47583 0254 05       		.uleb128 0x5
+ 47584 0255 49       		.uleb128 0x49
+ 47585 0256 13       		.uleb128 0x13
+ 47586 0257 02       		.uleb128 0x2
+ 47587 0258 0A       		.uleb128 0xa
+ 47588 0259 00       		.byte	0x0
+ 47589 025a 00       		.byte	0x0
+ 47590 025b 31       		.uleb128 0x31
+ 47591 025c 1D       		.uleb128 0x1d
+ 47592 025d 01       		.byte	0x1
+ 47593 025e 31       		.uleb128 0x31
+ 47594 025f 13       		.uleb128 0x13
+ 47595 0260 11       		.uleb128 0x11
+ 47596 0261 01       		.uleb128 0x1
+ 47597 0262 12       		.uleb128 0x12
+ 47598 0263 01       		.uleb128 0x1
+ 47599 0264 58       		.uleb128 0x58
+ 47600 0265 0B       		.uleb128 0xb
+ 47601 0266 59       		.uleb128 0x59
+ 47602 0267 05       		.uleb128 0x5
+ 47603 0268 01       		.uleb128 0x1
+ 47604 0269 13       		.uleb128 0x13
+ 47605 026a 00       		.byte	0x0
+ 47606 026b 00       		.byte	0x0
+ 47607 026c 32       		.uleb128 0x32
+ 47608 026d 05       		.uleb128 0x5
+ 47609 026e 00       		.byte	0x0
+ 47610 026f 31       		.uleb128 0x31
+ 47611 0270 13       		.uleb128 0x13
+ 47612 0271 02       		.uleb128 0x2
+ 47613 0272 0A       		.uleb128 0xa
+ 47614 0273 00       		.byte	0x0
+ 47615 0274 00       		.byte	0x0
+ 47616 0275 33       		.uleb128 0x33
+ 47617 0276 0B       		.uleb128 0xb
+ 47618 0277 01       		.byte	0x1
+ 47619 0278 11       		.uleb128 0x11
+ 47620 0279 01       		.uleb128 0x1
+ 47621 027a 12       		.uleb128 0x12
+ 47622 027b 01       		.uleb128 0x1
+ 47623 027c 00       		.byte	0x0
+ 47624 027d 00       		.byte	0x0
+ 47625 027e 34       		.uleb128 0x34
+ 47626 027f 34       		.uleb128 0x34
+ 47627 0280 00       		.byte	0x0
+ 47628 0281 31       		.uleb128 0x31
+ 47629 0282 13       		.uleb128 0x13
+ 47630 0283 02       		.uleb128 0x2
+ 47631 0284 0A       		.uleb128 0xa
+ 47632 0285 00       		.byte	0x0
+ 47633 0286 00       		.byte	0x0
+ 47634 0287 35       		.uleb128 0x35
+ 47635 0288 1D       		.uleb128 0x1d
+ 47636 0289 01       		.byte	0x1
+ 47637 028a 31       		.uleb128 0x31
+ 47638 028b 13       		.uleb128 0x13
+ 47639 028c 11       		.uleb128 0x11
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1199
+
+
+ 47640 028d 01       		.uleb128 0x1
+ 47641 028e 12       		.uleb128 0x12
+ 47642 028f 01       		.uleb128 0x1
+ 47643 0290 58       		.uleb128 0x58
+ 47644 0291 0B       		.uleb128 0xb
+ 47645 0292 59       		.uleb128 0x59
+ 47646 0293 05       		.uleb128 0x5
+ 47647 0294 00       		.byte	0x0
+ 47648 0295 00       		.byte	0x0
+ 47649 0296 36       		.uleb128 0x36
+ 47650 0297 0B       		.uleb128 0xb
+ 47651 0298 01       		.byte	0x1
+ 47652 0299 11       		.uleb128 0x11
+ 47653 029a 01       		.uleb128 0x1
+ 47654 029b 12       		.uleb128 0x12
+ 47655 029c 01       		.uleb128 0x1
+ 47656 029d 01       		.uleb128 0x1
+ 47657 029e 13       		.uleb128 0x13
+ 47658 029f 00       		.byte	0x0
+ 47659 02a0 00       		.byte	0x0
+ 47660 02a1 37       		.uleb128 0x37
+ 47661 02a2 34       		.uleb128 0x34
+ 47662 02a3 00       		.byte	0x0
+ 47663 02a4 03       		.uleb128 0x3
+ 47664 02a5 08       		.uleb128 0x8
+ 47665 02a6 3A       		.uleb128 0x3a
+ 47666 02a7 0B       		.uleb128 0xb
+ 47667 02a8 3B       		.uleb128 0x3b
+ 47668 02a9 05       		.uleb128 0x5
+ 47669 02aa 49       		.uleb128 0x49
+ 47670 02ab 13       		.uleb128 0x13
+ 47671 02ac 02       		.uleb128 0x2
+ 47672 02ad 0A       		.uleb128 0xa
+ 47673 02ae 00       		.byte	0x0
+ 47674 02af 00       		.byte	0x0
+ 47675 02b0 38       		.uleb128 0x38
+ 47676 02b1 2E       		.uleb128 0x2e
+ 47677 02b2 01       		.byte	0x1
+ 47678 02b3 03       		.uleb128 0x3
+ 47679 02b4 0E       		.uleb128 0xe
+ 47680 02b5 3A       		.uleb128 0x3a
+ 47681 02b6 0B       		.uleb128 0xb
+ 47682 02b7 3B       		.uleb128 0x3b
+ 47683 02b8 05       		.uleb128 0x5
+ 47684 02b9 27       		.uleb128 0x27
+ 47685 02ba 0C       		.uleb128 0xc
+ 47686 02bb 49       		.uleb128 0x49
+ 47687 02bc 13       		.uleb128 0x13
+ 47688 02bd 11       		.uleb128 0x11
+ 47689 02be 01       		.uleb128 0x1
+ 47690 02bf 12       		.uleb128 0x12
+ 47691 02c0 01       		.uleb128 0x1
+ 47692 02c1 40       		.uleb128 0x40
+ 47693 02c2 06       		.uleb128 0x6
+ 47694 02c3 01       		.uleb128 0x1
+ 47695 02c4 13       		.uleb128 0x13
+ 47696 02c5 00       		.byte	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1200
+
+
+ 47697 02c6 00       		.byte	0x0
+ 47698 02c7 39       		.uleb128 0x39
+ 47699 02c8 2E       		.uleb128 0x2e
+ 47700 02c9 00       		.byte	0x0
+ 47701 02ca 03       		.uleb128 0x3
+ 47702 02cb 0E       		.uleb128 0xe
+ 47703 02cc 3A       		.uleb128 0x3a
+ 47704 02cd 0B       		.uleb128 0xb
+ 47705 02ce 3B       		.uleb128 0x3b
+ 47706 02cf 05       		.uleb128 0x5
+ 47707 02d0 49       		.uleb128 0x49
+ 47708 02d1 13       		.uleb128 0x13
+ 47709 02d2 11       		.uleb128 0x11
+ 47710 02d3 01       		.uleb128 0x1
+ 47711 02d4 12       		.uleb128 0x12
+ 47712 02d5 01       		.uleb128 0x1
+ 47713 02d6 40       		.uleb128 0x40
+ 47714 02d7 06       		.uleb128 0x6
+ 47715 02d8 00       		.byte	0x0
+ 47716 02d9 00       		.byte	0x0
+ 47717 02da 3A       		.uleb128 0x3a
+ 47718 02db 34       		.uleb128 0x34
+ 47719 02dc 00       		.byte	0x0
+ 47720 02dd 03       		.uleb128 0x3
+ 47721 02de 0E       		.uleb128 0xe
+ 47722 02df 49       		.uleb128 0x49
+ 47723 02e0 13       		.uleb128 0x13
+ 47724 02e1 34       		.uleb128 0x34
+ 47725 02e2 0C       		.uleb128 0xc
+ 47726 02e3 02       		.uleb128 0x2
+ 47727 02e4 0A       		.uleb128 0xa
+ 47728 02e5 00       		.byte	0x0
+ 47729 02e6 00       		.byte	0x0
+ 47730 02e7 3B       		.uleb128 0x3b
+ 47731 02e8 2E       		.uleb128 0x2e
+ 47732 02e9 01       		.byte	0x1
+ 47733 02ea 03       		.uleb128 0x3
+ 47734 02eb 0E       		.uleb128 0xe
+ 47735 02ec 3A       		.uleb128 0x3a
+ 47736 02ed 0B       		.uleb128 0xb
+ 47737 02ee 3B       		.uleb128 0x3b
+ 47738 02ef 05       		.uleb128 0x5
+ 47739 02f0 49       		.uleb128 0x49
+ 47740 02f1 13       		.uleb128 0x13
+ 47741 02f2 11       		.uleb128 0x11
+ 47742 02f3 01       		.uleb128 0x1
+ 47743 02f4 12       		.uleb128 0x12
+ 47744 02f5 01       		.uleb128 0x1
+ 47745 02f6 40       		.uleb128 0x40
+ 47746 02f7 06       		.uleb128 0x6
+ 47747 02f8 01       		.uleb128 0x1
+ 47748 02f9 13       		.uleb128 0x13
+ 47749 02fa 00       		.byte	0x0
+ 47750 02fb 00       		.byte	0x0
+ 47751 02fc 3C       		.uleb128 0x3c
+ 47752 02fd 2E       		.uleb128 0x2e
+ 47753 02fe 01       		.byte	0x1
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1201
+
+
+ 47754 02ff 3F       		.uleb128 0x3f
+ 47755 0300 0C       		.uleb128 0xc
+ 47756 0301 03       		.uleb128 0x3
+ 47757 0302 0E       		.uleb128 0xe
+ 47758 0303 3A       		.uleb128 0x3a
+ 47759 0304 0B       		.uleb128 0xb
+ 47760 0305 3B       		.uleb128 0x3b
+ 47761 0306 05       		.uleb128 0x5
+ 47762 0307 27       		.uleb128 0x27
+ 47763 0308 0C       		.uleb128 0xc
+ 47764 0309 49       		.uleb128 0x49
+ 47765 030a 13       		.uleb128 0x13
+ 47766 030b 11       		.uleb128 0x11
+ 47767 030c 01       		.uleb128 0x1
+ 47768 030d 12       		.uleb128 0x12
+ 47769 030e 01       		.uleb128 0x1
+ 47770 030f 40       		.uleb128 0x40
+ 47771 0310 06       		.uleb128 0x6
+ 47772 0311 01       		.uleb128 0x1
+ 47773 0312 13       		.uleb128 0x13
+ 47774 0313 00       		.byte	0x0
+ 47775 0314 00       		.byte	0x0
+ 47776 0315 3D       		.uleb128 0x3d
+ 47777 0316 34       		.uleb128 0x34
+ 47778 0317 00       		.byte	0x0
+ 47779 0318 03       		.uleb128 0x3
+ 47780 0319 0E       		.uleb128 0xe
+ 47781 031a 3A       		.uleb128 0x3a
+ 47782 031b 0B       		.uleb128 0xb
+ 47783 031c 3B       		.uleb128 0x3b
+ 47784 031d 0B       		.uleb128 0xb
+ 47785 031e 49       		.uleb128 0x49
+ 47786 031f 13       		.uleb128 0x13
+ 47787 0320 02       		.uleb128 0x2
+ 47788 0321 0A       		.uleb128 0xa
+ 47789 0322 00       		.byte	0x0
+ 47790 0323 00       		.byte	0x0
+ 47791 0324 00       		.byte	0x0
+ 47792              		.section	.debug_pubnames,"", at progbits
+ 47793 0000 29000000 		.long	0x29
+ 47794 0004 0200     		.value	0x2
+ 47795 0006 00000000 		.long	.Ldebug_info0
+ 47796 000a 99D50000 		.long	0xd599
+ 47797 000e 7ED30000 		.long	0xd37e
+ 47798 0012 4B414553 		.string	"KAESBlockCipherVecMake"
+ 47798      426C6F63 
+ 47798      6B436970 
+ 47798      68657256 
+ 47798      65634D61 
+ 47799 0029 00000000 		.long	0x0
+ 47800              		.section	.debug_aranges,"", at progbits
+ 47801 0000 2C000000 		.long	0x2c
+ 47802 0004 0200     		.value	0x2
+ 47803 0006 00000000 		.long	.Ldebug_info0
+ 47804 000a 08       		.byte	0x8
+ 47805 000b 00       		.byte	0x0
+ 47806 000c 0000     		.value	0x0
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1202
+
+
+ 47807 000e 0000     		.value	0x0
+ 47808 0010 00000000 		.quad	.Ltext0
+ 47808      00000000 
+ 47809 0018 2C7D0100 		.quad	.Letext0-.Ltext0
+ 47809      00000000 
+ 47810 0020 00000000 		.quad	0x0
+ 47810      00000000 
+ 47811 0028 00000000 		.quad	0x0
+ 47811      00000000 
+ 47812              		.section	.debug_str,"MS", at progbits,1
+ 47813              	.LASF69:
+ 47814 0000 43697068 		.string	"CipherVec_AES_u"
+ 47814      65725665 
+ 47814      635F4145 
+ 47814      535F7500 
+ 47815              	.LASF287:
+ 47816 0010 7263496E 		.string	"rcInsufficient"
+ 47816      73756666 
+ 47816      69636965 
+ 47816      6E7400
+ 47817              	.LASF304:
+ 47818 001f 72634475 		.string	"rcDuplicate"
+ 47818      706C6963 
+ 47818      61746500 
+ 47819              	.LASF349:
+ 47820 002b 4B414553 		.string	"KAESBlockCipherVecStateMerge1"
+ 47820      426C6F63 
+ 47820      6B436970 
+ 47820      68657256 
+ 47820      65635374 
+ 47821              	.LASF107:
+ 47822 0049 7263436F 		.string	"rcCondition"
+ 47822      6E646974 
+ 47822      696F6E00 
+ 47823              	.LASF221:
+ 47824 0055 7263456E 		.string	"rcEncrypting"
+ 47824      63727970 
+ 47824      74696E67 
+ 47824      00
+ 47825              	.LASF334:
+ 47826 0062 4B414553 		.string	"KAESBlockCipherVecVecSub"
+ 47826      426C6F63 
+ 47826      6B436970 
+ 47826      68657256 
+ 47826      65635665 
+ 47827              	.LASF360:
+ 47828 007b 4B414553 		.string	"KAESBlockCipherVecEqInvKeyExpansion"
+ 47828      426C6F63 
+ 47828      6B436970 
+ 47828      68657256 
+ 47828      65634571 
+ 47829              	.LASF180:
+ 47830 009f 72634F70 		.string	"rcOpening"
+ 47830      656E696E 
+ 47830      6700
+ 47831              	.LASF188:
+ 47832 00a9 72635065 		.string	"rcPersisting"
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1203
+
+
+ 47832      72736973 
+ 47832      74696E67 
+ 47832      00
+ 47833              	.LASF226:
+ 47834 00b6 72635365 		.string	"rcSending"
+ 47834      6E64696E 
+ 47834      6700
+ 47835              	.LASF220:
+ 47836 00c0 72634170 		.string	"rcAppending"
+ 47836      70656E64 
+ 47836      696E6700 
+ 47837              	.LASF206:
+ 47838 00cc 72635369 		.string	"rcSignaling"
+ 47838      676E616C 
+ 47838      696E6700 
+ 47839              	.LASF19:
+ 47840 00d8 4442475F 		.string	"DBG_BLAST"
+ 47840      424C4153 
+ 47840      5400
+ 47841              	.LASF262:
+ 47842 00e2 72635369 		.string	"rcSignalSet"
+ 47842      676E616C 
+ 47842      53657400 
+ 47843              	.LASF208:
+ 47844 00ee 72634174 		.string	"rcAttaching"
+ 47844      74616368 
+ 47844      696E6700 
+ 47845              	.LASF140:
+ 47846 00fa 72635461 		.string	"rcTable"
+ 47846      626C6500 
+ 47847              	.LASF374:
+ 47848 0102 4B414553 		.string	"KAESBlockCipherVecCipher"
+ 47848      426C6F63 
+ 47848      6B436970 
+ 47848      68657256 
+ 47848      65634369 
+ 47849              	.LASF407:
+ 47850 011b 6C6F5F66 		.string	"lo_filter"
+ 47850      696C7465 
+ 47850      7200
+ 47851              	.LASF104:
+ 47852 0125 72634275 		.string	"rcBuffer"
+ 47852      66666572 
+ 47852      00
+ 47853              	.LASF236:
+ 47854 012e 72634D65 		.string	"rcMemory"
+ 47854      6D6F7279 
+ 47854      00
+ 47855              	.LASF169:
+ 47856 0137 72634C6F 		.string	"rcLocking"
+ 47856      636B696E 
+ 47856      6700
+ 47857              	.LASF204:
+ 47858 0141 72635061 		.string	"rcParsing"
+ 47858      7273696E 
+ 47858      6700
+ 47859              	.LASF233:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1204
+
+
+ 47860 014b 72635365 		.string	"rcSelf"
+ 47860      6C6600
+ 47861              	.LASF126:
+ 47862 0152 72634D65 		.string	"rcMetadata"
+ 47862      74616461 
+ 47862      746100
+ 47863              	.LASF249:
+ 47864 015d 72634172 		.string	"rcArcHardLink"
+ 47864      63486172 
+ 47864      644C696E 
+ 47864      6B00
+ 47865              	.LASF386:
+ 47866 016b 4B414553 		.string	"KAESBlockCipherVecSetEncryptKey"
+ 47866      426C6F63 
+ 47866      6B436970 
+ 47866      68657256 
+ 47866      65635365 
+ 47867              	.LASF75:
+ 47868 018b 7263436F 		.string	"rcCont"
+ 47868      6E7400
+ 47869              	.LASF257:
+ 47870 0192 72634368 		.string	"rcChecksum"
+ 47870      65636B73 
+ 47870      756D00
+ 47871              	.LASF391:
+ 47872 019d 5F5F6675 		.string	"__func__"
+ 47872      6E635F5F 
+ 47872      00
+ 47873              	.LASF301:
+ 47874 01a6 7263546F 		.string	"rcTooShort"
+ 47874      6F53686F 
+ 47874      727400
+ 47875              	.LASF131:
+ 47876 01b1 72635061 		.string	"rcPagemap"
+ 47876      67656D61 
+ 47876      7000
+ 47877              	.LASF83:
+ 47878 01bb 72634170 		.string	"rcApp"
+ 47878      7000
+ 47879              	.LASF114:
+ 47880 01c1 72634669 		.string	"rcFileDesc"
+ 47880      6C654465 
+ 47880      736300
+ 47881              	.LASF253:
+ 47882 01cc 72634974 		.string	"rcItem"
+ 47882      656D00
+ 47883              	.LASF354:
+ 47884 01d3 4B414553 		.string	"KAESBlockCipherVecKeyExpansion256"
+ 47884      426C6F63 
+ 47884      6B436970 
+ 47884      68657256 
+ 47884      65634B65 
+ 47885              	.LASF145:
+ 47886 01f5 72635472 		.string	"rcTrie"
+ 47886      696500
+ 47887              	.LASF86:
+ 47888 01fc 72634C61 		.string	"rcLastModule_v1_0"
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1205
+
+
+ 47888      73744D6F 
+ 47888      64756C65 
+ 47888      5F76315F 
+ 47888      3000
+ 47889              	.LASF66:
+ 47890 020e 73746174 		.string	"state"
+ 47890      6500
+ 47891              	.LASF355:
+ 47892 0214 4B414553 		.string	"KAESBlockCipherVecInvMixColumns"
+ 47892      426C6F63 
+ 47892      6B436970 
+ 47892      68657256 
+ 47892      6563496E 
+ 47893              	.LASF244:
+ 47894 0234 72634279 		.string	"rcByteOrder"
+ 47894      74654F72 
+ 47894      64657200 
+ 47895              	.LASF63:
+ 47896 0240 4145534B 		.string	"AESKeySchedule"
+ 47896      65795363 
+ 47896      68656475 
+ 47896      6C6500
+ 47897              	.LASF64:
+ 47898 024f 726F756E 		.string	"round_keys"
+ 47898      645F6B65 
+ 47898      797300
+ 47899              	.LASF162:
+ 47900 025a 7263436F 		.string	"rcConstructing"
+ 47900      6E737472 
+ 47900      75637469 
+ 47900      6E6700
+ 47901              	.LASF10:
+ 47902 0269 72635F74 		.string	"rc_t"
+ 47902      00
+ 47903              	.LASF238:
+ 47904 026e 7263466F 		.string	"rcFormat"
+ 47904      726D6174 
+ 47904      00
+ 47905              	.LASF296:
+ 47906 0277 7263556E 		.string	"rcUnauthorized"
+ 47906      61757468 
+ 47906      6F72697A 
+ 47906      656400
+ 47907              	.LASF335:
+ 47908 0286 4B414553 		.string	"KAESBlockCipherVecRotBytesLeft"
+ 47908      426C6F63 
+ 47908      6B436970 
+ 47908      68657256 
+ 47908      6563526F 
+ 47909              	.LASF368:
+ 47910 02a5 6D737461 		.string	"mstate"
+ 47910      746500
+ 47911              	.LASF176:
+ 47912 02ac 72635265 		.string	"rcRemoving"
+ 47912      6D6F7669 
+ 47912      6E6700
+ 47913              	.LASF89:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1206
+
+
+ 47914 02b7 72634B72 		.string	"rcKrypto"
+ 47914      7970746F 
+ 47914      00
+ 47915              	.LASF167:
+ 47916 02c0 72635669 		.string	"rcVisiting"
+ 47916      73697469 
+ 47916      6E6700
+ 47917              	.LASF97:
+ 47918 02cb 72634172 		.string	"rcArc"
+ 47918      6300
+ 47919              	.LASF72:
+ 47920 02d1 72634578 		.string	"rcExe"
+ 47920      6500
+ 47921              	.LASF302:
+ 47922 02d7 7263546F 		.string	"rcTooLong"
+ 47922      6F4C6F6E 
+ 47922      6700
+ 47923              	.LASF230:
+ 47924 02e1 52434F62 		.string	"RCObject"
+ 47924      6A656374 
+ 47924      00
+ 47925              	.LASF240:
+ 47926 02ea 7263496E 		.string	"rcInterface"
+ 47926      74657266 
+ 47926      61636500 
+ 47927              	.LASF409:
+ 47928 02f6 4B414553 		.string	"KAESBlockCipherVecFFtable"
+ 47928      426C6F63 
+ 47928      6B436970 
+ 47928      68657256 
+ 47928      65634646 
+ 47929              	.LASF168:
+ 47930 0310 72635265 		.string	"rcResolving"
+ 47930      736F6C76 
+ 47930      696E6700 
+ 47931              	.LASF110:
+ 47932 031c 72634469 		.string	"rcDirectory"
+ 47932      72656374 
+ 47932      6F727900 
+ 47933              	.LASF2:
+ 47934 0328 6C6F6E67 		.string	"long int"
+ 47934      20696E74 
+ 47934      00
+ 47935              	.LASF58:
+ 47936 0331 41455357 		.string	"AESWord"
+ 47936      6F726400 
+ 47937              	.LASF198:
+ 47938 0339 72635661 		.string	"rcValidating"
+ 47938      6C696461 
+ 47938      74696E67 
+ 47938      00
+ 47939              	.LASF327:
+ 47940 0346 4B414553 		.string	"KAESBlockCipherVecVecAnd"
+ 47940      426C6F63 
+ 47940      6B436970 
+ 47940      68657256 
+ 47940      65635665 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1207
+
+
+ 47941              	.LASF100:
+ 47942 035f 72634172 		.string	"rcArgv"
+ 47942      677600
+ 47943              	.LASF76:
+ 47944 0366 72634353 		.string	"rcCS"
+ 47944      00
+ 47945              	.LASF157:
+ 47946 036b 72635572 		.string	"rcUri"
+ 47946      6900
+ 47947              	.LASF179:
+ 47948 0371 72634372 		.string	"rcCreating"
+ 47948      65617469 
+ 47948      6E6700
+ 47949              	.LASF343:
+ 47950 037c 6B676173 		.string	"kgastate"
+ 47950      74617465 
+ 47950      00
+ 47951              	.LASF337:
+ 47952 0385 4B414553 		.string	"KAESBlockCipherVecVecXor"
+ 47952      426C6F63 
+ 47952      6B436970 
+ 47952      68657256 
+ 47952      65635665 
+ 47953              	.LASF52:
+ 47954 039e 656E6372 		.string	"encrypt"
+ 47954      79707400 
+ 47955              	.LASF405:
+ 47956 03a6 4B414553 		.string	"KAESBlockCipherVecRijndaelSBoxV"
+ 47956      426C6F63 
+ 47956      6B436970 
+ 47956      68657256 
+ 47956      65635269 
+ 47957              	.LASF16:
+ 47958 03c6 76313238 		.string	"v128_u8_t"
+ 47958      5F75385F 
+ 47958      7400
+ 47959              	.LASF24:
+ 47960 03d0 4442475F 		.string	"DBG_XML"
+ 47960      584D4C00 
+ 47961              	.LASF341:
+ 47962 03d8 73686966 		.string	"shift"
+ 47962      7400
+ 47963              	.LASF36:
+ 47964 03de 4442475F 		.string	"DBG_MOD_COUNT"
+ 47964      4D4F445F 
+ 47964      434F554E 
+ 47964      5400
+ 47965              	.LASF81:
+ 47966 03ec 72634442 		.string	"rcDB"
+ 47966      00
+ 47967              	.LASF375:
+ 47968 03f1 4B414553 		.string	"KAESBlockCipherVecEqInvFirstRound"
+ 47968      426C6F63 
+ 47968      6B436970 
+ 47968      68657256 
+ 47968      65634571 
+ 47969              	.LASF259:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1208
+
+
+ 47970 0413 7263436F 		.string	"rcConnection"
+ 47970      6E6E6563 
+ 47970      74696F6E 
+ 47970      00
+ 47971              	.LASF127:
+ 47972 0420 72634D67 		.string	"rcMgr"
+ 47972      7200
+ 47973              	.LASF289:
+ 47974 0426 72635669 		.string	"rcViolated"
+ 47974      6F6C6174 
+ 47974      656400
+ 47975              	.LASF364:
+ 47976 0431 4B414553 		.string	"KAESBlockCipherVecFirstRound"
+ 47976      426C6F63 
+ 47976      6B436970 
+ 47976      68657256 
+ 47976      65634669 
+ 47977              	.LASF222:
+ 47978 044e 72634465 		.string	"rcDecrypting"
+ 47978      63727970 
+ 47978      74696E67 
+ 47978      00
+ 47979              	.LASF0:
+ 47980 045b 7369676E 		.string	"signed char"
+ 47980      65642063 
+ 47980      68617200 
+ 47981              	.LASF5:
+ 47982 0467 75696E74 		.string	"uint8_t"
+ 47982      385F7400 
+ 47983              	.LASF105:
+ 47984 046f 72634368 		.string	"rcChar"
+ 47984      617200
+ 47985              	.LASF90:
+ 47986 0476 72635244 		.string	"rcRDBMS"
+ 47986      424D5300 
+ 47987              	.LASF379:
+ 47988 047e 496E7653 		.string	"InvShiftRowTable"
+ 47988      68696674 
+ 47988      526F7754 
+ 47988      61626C65 
+ 47988      00
+ 47989              	.LASF199:
+ 47990 048f 72634578 		.string	"rcExecuting"
+ 47990      65637574 
+ 47990      696E6700 
+ 47991              	.LASF390:
+ 47992 049b 5F5F5052 		.string	"__PRETTY_FUNCTION__"
+ 47992      45545459 
+ 47992      5F46554E 
+ 47992      4354494F 
+ 47992      4E5F5F00 
+ 47993              	.LASF17:
+ 47994 04af 4442475F 		.string	"DBG_MOD_NOT_FOUND"
+ 47994      4D4F445F 
+ 47994      4E4F545F 
+ 47994      464F554E 
+ 47994      4400
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1209
+
+
+ 47995              	.LASF323:
+ 47996 04c1 636F6C75 		.string	"column"
+ 47996      6D6E00
+ 47997              	.LASF186:
+ 47998 04c8 72635265 		.string	"rcReverting"
+ 47998      76657274 
+ 47998      696E6700 
+ 47999              	.LASF102:
+ 48000 04d4 72634261 		.string	"rcBarrier"
+ 48000      72726965 
+ 48000      7200
+ 48001              	.LASF286:
+ 48002 04de 72634578 		.string	"rcExhausted"
+ 48002      68617573 
+ 48002      74656400 
+ 48003              	.LASF3:
+ 48004 04ea 756E7369 		.string	"unsigned char"
+ 48004      676E6564 
+ 48004      20636861 
+ 48004      7200
+ 48005              	.LASF159:
+ 48006 04f8 5243436F 		.string	"RCContext"
+ 48006      6E746578 
+ 48006      7400
+ 48007              	.LASF122:
+ 48008 0502 72634C6F 		.string	"rcLock"
+ 48008      636B00
+ 48009              	.LASF275:
+ 48010 0509 72634261 		.string	"rcBadVersion"
+ 48010      64566572 
+ 48010      73696F6E 
+ 48010      00
+ 48011              	.LASF276:
+ 48012 0516 72634465 		.string	"rcDestroyed"
+ 48012      7374726F 
+ 48012      79656400 
+ 48013              	.LASF139:
+ 48014 0522 72635374 		.string	"rcString"
+ 48014      72696E67 
+ 48014      00
+ 48015              	.LASF101:
+ 48016 052b 72634174 		.string	"rcAttr"
+ 48016      747200
+ 48017              	.LASF123:
+ 48018 0532 72634C6F 		.string	"rcLog"
+ 48018      6700
+ 48019              	.LASF399:
+ 48020 0538 6E65775F 		.string	"new_obj"
+ 48020      6F626A00 
+ 48021              	.LASF20:
+ 48022 0540 4442475F 		.string	"DBG_KDB"
+ 48022      4B444200 
+ 48023              	.LASF227:
+ 48024 0548 72635072 		.string	"rcProcessing"
+ 48024      6F636573 
+ 48024      73696E67 
+ 48024      00
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1210
+
+
+ 48025              	.LASF77:
+ 48026 0555 72634646 		.string	"rcFF"
+ 48026      00
+ 48027              	.LASF398:
+ 48028 055a 5F426F6F 		.string	"_Bool"
+ 48028      6C00
+ 48029              	.LASF78:
+ 48030 0560 72634653 		.string	"rcFS"
+ 48030      00
+ 48031              	.LASF61:
+ 48032 0565 62797465 		.string	"bytes"
+ 48032      7300
+ 48033              	.LASF165:
+ 48034 056b 72634163 		.string	"rcAccessing"
+ 48034      63657373 
+ 48034      696E6700 
+ 48035              	.LASF283:
+ 48036 0577 7263496E 		.string	"rcInterrupted"
+ 48036      74657272 
+ 48036      75707465 
+ 48036      6400
+ 48037              	.LASF291:
+ 48038 0585 72634E6F 		.string	"rcNotFound"
+ 48038      74466F75 
+ 48038      6E6400
+ 48039              	.LASF336:
+ 48040 0590 53686966 		.string	"ShiftRowTable"
+ 48040      74526F77 
+ 48040      5461626C 
+ 48040      6500
+ 48041              	.LASF11:
+ 48042 059e 63686172 		.string	"char"
+ 48042      00
+ 48043              	.LASF129:
+ 48044 05a3 72634E6F 		.string	"rcNode"
+ 48044      646500
+ 48045              	.LASF367:
+ 48046 05aa 4B414553 		.string	"KAESBlockCipherVecMiddleRound"
+ 48046      426C6F63 
+ 48046      6B436970 
+ 48046      68657256 
+ 48046      65634D69 
+ 48047              	.LASF34:
+ 48048 05c8 4442475F 		.string	"DBG_AES"
+ 48048      41455300 
+ 48049              	.LASF260:
+ 48050 05d0 72634572 		.string	"rcError"
+ 48050      726F7200 
+ 48051              	.LASF346:
+ 48052 05d8 72636F6E 		.string	"rconw"
+ 48052      7700
+ 48053              	.LASF348:
+ 48054 05de 4B414553 		.string	"KAESBlockCipherVecRotWord"
+ 48054      426C6F63 
+ 48054      6B436970 
+ 48054      68657256 
+ 48054      6563526F 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1211
+
+
+ 48055              	.LASF177:
+ 48056 05f8 7263436C 		.string	"rcClearing"
+ 48056      65617269 
+ 48056      6E6700
+ 48057              	.LASF235:
+ 48058 0603 72634F66 		.string	"rcOffset"
+ 48058      66736574 
+ 48058      00
+ 48059              	.LASF181:
+ 48060 060c 7263436C 		.string	"rcClosing"
+ 48060      6F73696E 
+ 48060      6700
+ 48061              	.LASF113:
+ 48062 0616 72634669 		.string	"rcFile"
+ 48062      6C6500
+ 48063              	.LASF142:
+ 48064 061d 72635469 		.string	"rcTimeout"
+ 48064      6D656F75 
+ 48064      7400
+ 48065              	.LASF130:
+ 48066 0627 72634E75 		.string	"rcNumeral"
+ 48066      6D657261 
+ 48066      6C00
+ 48067              	.LASF207:
+ 48068 0631 72635761 		.string	"rcWaiting"
+ 48068      6974696E 
+ 48068      6700
+ 48069              	.LASF366:
+ 48070 063b 726F756E 		.string	"round_key"
+ 48070      645F6B65 
+ 48070      7900
+ 48071              	.LASF211:
+ 48072 0645 72634650 		.string	"rcFPCoding"
+ 48072      436F6469 
+ 48072      6E6700
+ 48073              	.LASF344:
+ 48074 0650 4B414553 		.string	"KAESBlockCipherVecStateShiftRight64"
+ 48074      426C6F63 
+ 48074      6B436970 
+ 48074      68657256 
+ 48074      65635374 
+ 48075              	.LASF263:
+ 48076 0674 72635369 		.string	"rcSize"
+ 48076      7A6500
+ 48077              	.LASF248:
+ 48078 067b 72634469 		.string	"rcDirEntry"
+ 48078      72456E74 
+ 48078      727900
+ 48079              	.LASF200:
+ 48080 0686 72634875 		.string	"rcHuffmanCoding"
+ 48080      66666D61 
+ 48080      6E436F64 
+ 48080      696E6700 
+ 48081              	.LASF29:
+ 48082 0696 4442475F 		.string	"DBG_KFG"
+ 48082      4B464700 
+ 48083              	.LASF67:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1212
+
+
+ 48084 069e 636F6C75 		.string	"columns"
+ 48084      6D6E7300 
+ 48085              	.LASF281:
+ 48086 06a6 72634275 		.string	"rcBusy"
+ 48086      737900
+ 48087              	.LASF26:
+ 48088 06ad 4442475F 		.string	"DBG_SRA"
+ 48088      53524100 
+ 48089              	.LASF239:
+ 48090 06b5 72635472 		.string	"rcTransfer"
+ 48090      616E7366 
+ 48090      657200
+ 48091              	.LASF23:
+ 48092 06c0 4442475F 		.string	"DBG_KFS"
+ 48092      4B465300 
+ 48093              	.LASF194:
+ 48094 06c8 72635061 		.string	"rcPacking"
+ 48094      636B696E 
+ 48094      6700
+ 48095              	.LASF190:
+ 48096 06d2 7263436F 		.string	"rcCopying"
+ 48096      7079696E 
+ 48096      6700
+ 48097              	.LASF416:
+ 48098 06dc 4B414553 		.string	"KAESBlockCipherVecMake"
+ 48098      426C6F63 
+ 48098      6B436970 
+ 48098      68657256 
+ 48098      65634D61 
+ 48099              	.LASF197:
+ 48100 06f3 72634465 		.string	"rcDecoding"
+ 48100      636F6469 
+ 48100      6E6700
+ 48101              	.LASF170:
+ 48102 06fe 7263556E 		.string	"rcUnlocking"
+ 48102      6C6F636B 
+ 48102      696E6700 
+ 48103              	.LASF356:
+ 48104 070a 4B414553 		.string	"KAESBlockCipherVecFFmul02"
+ 48104      426C6F63 
+ 48104      6B436970 
+ 48104      68657256 
+ 48104      65634646 
+ 48105              	.LASF55:
+ 48106 0724 4B426C6F 		.string	"KBlockCipherVec_vt_v1"
+ 48106      636B4369 
+ 48106      70686572 
+ 48106      5665635F 
+ 48106      76745F76 
+ 48107              	.LASF22:
+ 48108 073a 4442475F 		.string	"DBG_LEGREF"
+ 48108      4C454752 
+ 48108      454600
+ 48109              	.LASF359:
+ 48110 0745 4B414553 		.string	"KAESBlockCipherVecFFmul08"
+ 48110      426C6F63 
+ 48110      6B436970 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1213
+
+
+ 48110      68657256 
+ 48110      65634646 
+ 48111              	.LASF171:
+ 48112 075f 72635265 		.string	"rcRenaming"
+ 48112      6E616D69 
+ 48112      6E6700
+ 48113              	.LASF388:
+ 48114 076a 75736572 		.string	"user_key"
+ 48114      5F6B6579 
+ 48114      00
+ 48115              	.LASF395:
+ 48116 0773 4B414553 		.string	"KAESBlockCipherVecDecrypt"
+ 48116      426C6F63 
+ 48116      6B436970 
+ 48116      68657256 
+ 48116      65634465 
+ 48117              	.LASF241:
+ 48118 078d 72634964 		.string	"rcId"
+ 48118      00
+ 48119              	.LASF154:
+ 48120 0792 7263436D 		.string	"rcCmd"
+ 48120      6400
+ 48121              	.LASF32:
+ 48122 0798 4442475F 		.string	"DBG_LOADLIB"
+ 48122      4C4F4144 
+ 48122      4C494200 
+ 48123              	.LASF350:
+ 48124 07a4 4B414553 		.string	"KAESBlockCipherVecStateMerge2"
+ 48124      426C6F63 
+ 48124      6B436970 
+ 48124      68657256 
+ 48124      65635374 
+ 48125              	.LASF293:
+ 48126 07c2 7263556E 		.string	"rcUnlocked"
+ 48126      6C6F636B 
+ 48126      656400
+ 48127              	.LASF94:
+ 48128 07cd 52434D6F 		.string	"RCModule"
+ 48128      64756C65 
+ 48128      00
+ 48129              	.LASF255:
+ 48130 07d6 7263456E 		.string	"rcEncryption"
+ 48130      63727970 
+ 48130      74696F6E 
+ 48130      00
+ 48131              	.LASF290:
+ 48132 07e3 72634578 		.string	"rcExists"
+ 48132      69737473 
+ 48132      00
+ 48133              	.LASF43:
+ 48134 07ec 43697068 		.string	"CipherVec"
+ 48134      65725665 
+ 48134      6300
+ 48135              	.LASF396:
+ 48136 07f6 4B414553 		.string	"KAESBlockCipherVecProcessorSupport"
+ 48136      426C6F63 
+ 48136      6B436970 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1214
+
+
+ 48136      68657256 
+ 48136      65635072 
+ 48137              	.LASF309:
+ 48138 0819 72634F70 		.string	"rcOpen"
+ 48138      656E00
+ 48139              	.LASF295:
+ 48140 0820 72634465 		.string	"rcDeadlock"
+ 48140      61646C6F 
+ 48140      636B00
+ 48141              	.LASF340:
+ 48142 082b 4B414553 		.string	"KAESBlockCipherVecShiftXorColumns"
+ 48142      426C6F63 
+ 48142      6B436970 
+ 48142      68657256 
+ 48142      65635368 
+ 48143              	.LASF232:
+ 48144 084d 72634C69 		.string	"rcLink"
+ 48144      6E6B00
+ 48145              	.LASF219:
+ 48146 0854 7263466C 		.string	"rcFlushing"
+ 48146      75736869 
+ 48146      6E6700
+ 48147              	.LASF267:
+ 48148 085f 72634E6F 		.string	"rcNoErr"
+ 48148      45727200 
+ 48149              	.LASF400:
+ 48150 0867 7665635F 		.string	"vec_00"
+ 48150      303000
+ 48151              	.LASF401:
+ 48152 086e 7665635F 		.string	"vec_01"
+ 48152      303100
+ 48153              	.LASF246:
+ 48154 0875 72635461 		.string	"rcTag"
+ 48154      6700
+ 48155              	.LASF28:
+ 48156 087b 4442475F 		.string	"DBG_ALIGN"
+ 48156      414C4947 
+ 48156      4E00
+ 48157              	.LASF210:
+ 48158 0885 72634C6F 		.string	"rcLogging"
+ 48158      6767696E 
+ 48158      6700
+ 48159              	.LASF410:
+ 48160 088f 4B414553 		.string	"KAESBlockCipherVecRcon"
+ 48160      426C6F63 
+ 48160      6B436970 
+ 48160      68657256 
+ 48160      65635263 
+ 48161              	.LASF303:
+ 48162 08a6 7263546F 		.string	"rcTooBig"
+ 48162      6F426967 
+ 48162      00
+ 48163              	.LASF381:
+ 48164 08af 4B414553 		.string	"KAESBlockCipherVecEqInvCipher"
+ 48164      426C6F63 
+ 48164      6B436970 
+ 48164      68657256 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1215
+
+
+ 48164      65634571 
+ 48165              	.LASF147:
+ 48166 08cd 72635665 		.string	"rcVector"
+ 48166      63746F72 
+ 48166      00
+ 48167              	.LASF182:
+ 48168 08d6 72635265 		.string	"rcResizing"
+ 48168      73697A69 
+ 48168      6E6700
+ 48169              	.LASF156:
+ 48170 08e1 72635175 		.string	"rcQuery"
+ 48170      65727900 
+ 48171              	.LASF378:
+ 48172 08e9 4B414553 		.string	"KAESBlockCipherVecInvShiftRows"
+ 48172      426C6F63 
+ 48172      6B436970 
+ 48172      68657256 
+ 48172      6563496E 
+ 48173              	.LASF9:
+ 48174 0908 6C6F6E67 		.string	"long unsigned int"
+ 48174      20756E73 
+ 48174      69676E65 
+ 48174      6420696E 
+ 48174      7400
+ 48175              	.LASF288:
+ 48176 091a 72634578 		.string	"rcExcessive"
+ 48176      63657373 
+ 48176      69766500 
+ 48177              	.LASF216:
+ 48178 0926 72634576 		.string	"rcEvaluating"
+ 48178      616C7561 
+ 48178      74696E67 
+ 48178      00
+ 48179              	.LASF153:
+ 48180 0933 7263526E 		.string	"rcRng"
+ 48180      6700
+ 48181              	.LASF161:
+ 48182 0939 72634361 		.string	"rcCasting"
+ 48182      7374696E 
+ 48182      6700
+ 48183              	.LASF383:
+ 48184 0943 73656C66 		.string	"self"
+ 48184      00
+ 48185              	.LASF121:
+ 48186 0948 72634974 		.string	"rcIterator"
+ 48186      65726174 
+ 48186      6F7200
+ 48187              	.LASF365:
+ 48188 0953 4B414553 		.string	"KAESBlockCipherVecAddRoundKey"
+ 48188      426C6F63 
+ 48188      6B436970 
+ 48188      68657256 
+ 48188      65634164 
+ 48189              	.LASF56:
+ 48190 0971 4B426C6F 		.string	"KBlockCipherVec"
+ 48190      636B4369 
+ 48190      70686572 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1216
+
+
+ 48190      56656300 
+ 48191              	.LASF403:
+ 48192 0981 7665635F 		.string	"vec_10"
+ 48192      313000
+ 48193              	.LASF138:
+ 48194 0988 72635374 		.string	"rcStorage"
+ 48194      6F726167 
+ 48194      6500
+ 48195              	.LASF324:
+ 48196 0992 77686963 		.string	"which"
+ 48196      6800
+ 48197              	.LASF382:
+ 48198 0998 4B414553 		.string	"KAESBlockCipherVecDestroy"
+ 48198      426C6F63 
+ 48198      6B436970 
+ 48198      68657256 
+ 48198      65634465 
+ 48199              	.LASF305:
+ 48200 09b2 72634F75 		.string	"rcOutOfKDirectory"
+ 48200      744F664B 
+ 48200      44697265 
+ 48200      63746F72 
+ 48200      7900
+ 48201              	.LASF347:
+ 48202 09c4 4B414553 		.string	"KAESBlockCipherVecSubWord"
+ 48202      426C6F63 
+ 48202      6B436970 
+ 48202      68657256 
+ 48202      65635375 
+ 48203              	.LASF250:
+ 48204 09de 7263526F 		.string	"rcRow"
+ 48204      7700
+ 48205              	.LASF25:
+ 48206 09e4 4442475F 		.string	"DBG_VDB"
+ 48206      56444200 
+ 48207              	.LASF150:
+ 48208 09ec 72634C61 		.string	"rcLastTarget_v1_0"
+ 48208      73745461 
+ 48208      72676574 
+ 48208      5F76315F 
+ 48208      3000
+ 48209              	.LASF158:
+ 48210 09fe 72634C61 		.string	"rcLastTarget_v1_1"
+ 48210      73745461 
+ 48210      72676574 
+ 48210      5F76315F 
+ 48210      3100
+ 48211              	.LASF137:
+ 48212 0a10 72635365 		.string	"rcSemaphore"
+ 48212      6D617068 
+ 48212      6F726500 
+ 48213              	.LASF282:
+ 48214 0a1c 7263496E 		.string	"rcIncomplete"
+ 48214      636F6D70 
+ 48214      6C657465 
+ 48214      00
+ 48215              	.LASF311:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1217
+
+
+ 48216 0a29 72634E6F 		.string	"rcNotOpen"
+ 48216      744F7065 
+ 48216      6E00
+ 48217              	.LASF120:
+ 48218 0a33 7263496E 		.string	"rcIndex"
+ 48218      64657800 
+ 48219              	.LASF27:
+ 48220 0a3b 4442475F 		.string	"DBG_XARC"
+ 48220      58415243 
+ 48220      00
+ 48221              	.LASF413:
+ 48222 0a44 474E5520 		.string	"GNU C 4.4.2"
+ 48222      4320342E 
+ 48222      342E3200 
+ 48223              	.LASF73:
+ 48224 0a50 72635275 		.string	"rcRuntime"
+ 48224      6E74696D 
+ 48224      6500
+ 48225              	.LASF112:
+ 48226 0a5a 7263586D 		.string	"rcXmlDoc"
+ 48226      6C446F63 
+ 48226      00
+ 48227              	.LASF332:
+ 48228 0a63 67617465 		.string	"gate"
+ 48228      00
+ 48229              	.LASF12:
+ 48230 0a68 6C6F6E67 		.string	"long long int"
+ 48230      206C6F6E 
+ 48230      6720696E 
+ 48230      7400
+ 48231              	.LASF193:
+ 48232 0a76 7263506F 		.string	"rcPositioning"
+ 48232      73697469 
+ 48232      6F6E696E 
+ 48232      6700
+ 48233              	.LASF134:
+ 48234 0a84 72635175 		.string	"rcQueue"
+ 48234      65756500 
+ 48235              	.LASF209:
+ 48236 0a8c 72634465 		.string	"rcDetaching"
+ 48236      74616368 
+ 48236      696E6700 
+ 48237              	.LASF124:
+ 48238 0a98 72634D44 		.string	"rcMD5SumFmt"
+ 48238      3553756D 
+ 48238      466D7400 
+ 48239              	.LASF175:
+ 48240 0aa4 7263496E 		.string	"rcInserting"
+ 48240      73657274 
+ 48240      696E6700 
+ 48241              	.LASF223:
+ 48242 0ab0 7263436F 		.string	"rcComparing"
+ 48242      6D706172 
+ 48242      696E6700 
+ 48243              	.LASF285:
+ 48244 0abc 7263456D 		.string	"rcEmpty"
+ 48244      70747900 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1218
+
+
+ 48245              	.LASF117:
+ 48246 0ac4 7263466F 		.string	"rcFormatter"
+ 48246      726D6174 
+ 48246      74657200 
+ 48247              	.LASF369:
+ 48248 0ad0 6D726F75 		.string	"mround_keys"
+ 48248      6E645F6B 
+ 48248      65797300 
+ 48249              	.LASF15:
+ 48250 0adc 646F7562 		.string	"double"
+ 48250      6C6500
+ 48251              	.LASF202:
+ 48252 0ae3 72635265 		.string	"rcRegistering"
+ 48252      67697374 
+ 48252      6572696E 
+ 48252      6700
+ 48253              	.LASF91:
+ 48254 0af1 72634E53 		.string	"rcNS"
+ 48254      00
+ 48255              	.LASF234:
+ 48256 0af6 72635061 		.string	"rcParam"
+ 48256      72616D00 
+ 48257              	.LASF95:
+ 48258 0afe 52435461 		.string	"RCTarget"
+ 48258      72676574 
+ 48258      00
+ 48259              	.LASF370:
+ 48260 0b07 4B414553 		.string	"KAESBlockCipherVecShiftRows"
+ 48260      426C6F63 
+ 48260      6B436970 
+ 48260      68657256 
+ 48260      65635368 
+ 48261              	.LASF41:
+ 48262 0b23 4442475F 		.string	"DBG_AES_OBJECT"
+ 48262      4145535F 
+ 48262      4F424A45 
+ 48262      435400
+ 48263              	.LASF331:
+ 48264 0b32 6D61736B 		.string	"mask"
+ 48264      00
+ 48265              	.LASF256:
+ 48266 0b37 72634372 		.string	"rcCrc"
+ 48266      6300
+ 48267              	.LASF373:
+ 48268 0b3d 62737761 		.string	"bswap_32"
+ 48268      705F3332 
+ 48268      00
+ 48269              	.LASF31:
+ 48270 0b46 4442475F 		.string	"DBG_SEARCH"
+ 48270      53454152 
+ 48270      434800
+ 48271              	.LASF84:
+ 48272 0b51 7263584D 		.string	"rcXML"
+ 48272      4C00
+ 48273              	.LASF361:
+ 48274 0b57 4B414553 		.string	"KAESBlockCipherVecEqInvKeyExpansion128"
+ 48274      426C6F63 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1219
+
+
+ 48274      6B436970 
+ 48274      68657256 
+ 48274      65634571 
+ 48275              	.LASF33:
+ 48276 0b7e 4442475F 		.string	"DBG_VFS"
+ 48276      56465300 
+ 48277              	.LASF37:
+ 48278 0b86 4442475F 		.string	"DBG_AES_KEYEXP"
+ 48278      4145535F 
+ 48278      4B455945 
+ 48278      585000
+ 48279              	.LASF414:
+ 48280 0b95 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c"
+ 48280      652F726F 
+ 48280      6461726D 
+ 48280      65722F73 
+ 48280      72615F73 
+ 48281              	.LASF13:
+ 48282 0bcb 666C6F61 		.string	"float"
+ 48282      7400
+ 48283              	.LASF178:
+ 48284 0bd1 72635570 		.string	"rcUpdating"
+ 48284      64617469 
+ 48284      6E6700
+ 48285              	.LASF384:
+ 48286 0bdc 4B414553 		.string	"KAESBlockCipherVecBlockSize"
+ 48286      426C6F63 
+ 48286      6B436970 
+ 48286      68657256 
+ 48286      6563426C 
+ 48287              	.LASF205:
+ 48288 0bf8 7263436F 		.string	"rcConverting"
+ 48288      6E766572 
+ 48288      74696E67 
+ 48288      00
+ 48289              	.LASF191:
+ 48290 0c05 7263436F 		.string	"rcConcatenating"
+ 48290      6E636174 
+ 48290      656E6174 
+ 48290      696E6700 
+ 48291              	.LASF70:
+ 48292 0c15 4B426C6F 		.string	"KBlockCipher"
+ 48292      636B4369 
+ 48292      70686572 
+ 48292      00
+ 48293              	.LASF148:
+ 48294 0c22 72634479 		.string	"rcDylib"
+ 48294      6C696200 
+ 48295              	.LASF297:
+ 48296 0c2a 72635265 		.string	"rcReadonly"
+ 48296      61646F6E 
+ 48296      6C7900
+ 48297              	.LASF392:
+ 48298 0c35 4B414553 		.string	"KAESBlockCipherVecSetDecryptKey"
+ 48298      426C6F63 
+ 48298      6B436970 
+ 48298      68657256 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1220
+
+
+ 48298      65635365 
+ 48299              	.LASF7:
+ 48300 0c55 756E7369 		.string	"unsigned int"
+ 48300      676E6564 
+ 48300      20696E74 
+ 48300      00
+ 48301              	.LASF68:
+ 48302 0c62 67726964 		.string	"grid"
+ 48302      00
+ 48303              	.LASF40:
+ 48304 0c67 4442475F 		.string	"DBG_AES_INVCIPHER"
+ 48304      4145535F 
+ 48304      494E5643 
+ 48304      49504845 
+ 48304      5200
+ 48305              	.LASF298:
+ 48306 0c79 72635772 		.string	"rcWriteonly"
+ 48306      6974656F 
+ 48306      6E6C7900 
+ 48307              	.LASF358:
+ 48308 0c85 4B414553 		.string	"KAESBlockCipherVecFFmul04"
+ 48308      426C6F63 
+ 48308      6B436970 
+ 48308      68657256 
+ 48308      65634646 
+ 48309              	.LASF292:
+ 48310 0c9f 72634C6F 		.string	"rcLocked"
+ 48310      636B6564 
+ 48310      00
+ 48311              	.LASF174:
+ 48312 0ca8 72635072 		.string	"rcProjecting"
+ 48312      6F6A6563 
+ 48312      74696E67 
+ 48312      00
+ 48313              	.LASF79:
+ 48314 0cb5 72635053 		.string	"rcPS"
+ 48314      00
+ 48315              	.LASF264:
+ 48316 0cba 72635265 		.string	"rcRefcount"
+ 48316      66636F75 
+ 48316      6E7400
+ 48317              	.LASF99:
+ 48318 0cc5 7263546F 		.string	"rcTocEntry"
+ 48318      63456E74 
+ 48318      727900
+ 48319              	.LASF254:
+ 48320 0cd0 72634D6F 		.string	"rcMode"
+ 48320      646500
+ 48321              	.LASF313:
+ 48322 0cd7 7263556E 		.string	"rcUnequal"
+ 48322      65717561 
+ 48322      6C00
+ 48323              	.LASF294:
+ 48324 0ce1 72634465 		.string	"rcDetached"
+ 48324      74616368 
+ 48324      656400
+ 48325              	.LASF300:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1221
+
+
+ 48326 0cec 7263496E 		.string	"rcInPlaceNotAllowed"
+ 48326      506C6163 
+ 48326      654E6F74 
+ 48326      416C6C6F 
+ 48326      77656400 
+ 48327              	.LASF242:
+ 48328 0d00 72635261 		.string	"rcRange"
+ 48328      6E676500 
+ 48329              	.LASF415:
+ 48330 0d08 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 48330      652F726F 
+ 48330      6461726D 
+ 48330      65722F73 
+ 48330      72615F73 
+ 48331              	.LASF328:
+ 48332 0d50 4B414553 		.string	"KAESBlockCipherVecVecDiv"
+ 48332      426C6F63 
+ 48332      6B436970 
+ 48332      68657256 
+ 48332      65635665 
+ 48333              	.LASF252:
+ 48334 0d69 72634C61 		.string	"rcLastObject_v1_0"
+ 48334      73744F62 
+ 48334      6A656374 
+ 48334      5F76315F 
+ 48334      3000
+ 48335              	.LASF265:
+ 48336 0d7b 72634C61 		.string	"rcLastObject_v1_1"
+ 48336      73744F62 
+ 48336      6A656374 
+ 48336      5F76315F 
+ 48336      3100
+ 48337              	.LASF371:
+ 48338 0d8d 4B414553 		.string	"KAESBlockCipherVecMixColumns"
+ 48338      426C6F63 
+ 48338      6B436970 
+ 48338      68657256 
+ 48338      65634D69 
+ 48339              	.LASF329:
+ 48340 0daa 4B414553 		.string	"KAESBlockCipherVecPackShuffleBytes"
+ 48340      426C6F63 
+ 48340      6B436970 
+ 48340      68657256 
+ 48340      65635061 
+ 48341              	.LASF218:
+ 48342 0dcd 72634C61 		.string	"rcLastContext_v1_0"
+ 48342      7374436F 
+ 48342      6E746578 
+ 48342      745F7631 
+ 48342      5F3000
+ 48343              	.LASF229:
+ 48344 0de0 72634C61 		.string	"rcLastContext_v1_1"
+ 48344      7374436F 
+ 48344      6E746578 
+ 48344      745F7631 
+ 48344      5F3100
+ 48345              	.LASF320:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1222
+
+
+ 48346 0df3 72636F6E 		.string	"rcon"
+ 48346      00
+ 48347              	.LASF363:
+ 48348 0df8 4B414553 		.string	"KAESBlockCipherVecEqInvKeyExpansion256"
+ 48348      426C6F63 
+ 48348      6B436970 
+ 48348      68657256 
+ 48348      65634571 
+ 48349              	.LASF125:
+ 48350 0e1f 72634D65 		.string	"rcMemMap"
+ 48350      6D4D6170 
+ 48350      00
+ 48351              	.LASF57:
+ 48352 0e28 41455342 		.string	"AESByte"
+ 48352      79746500 
+ 48353              	.LASF149:
+ 48354 0e30 72634578 		.string	"rcExpression"
+ 48354      70726573 
+ 48354      73696F6E 
+ 48354      00
+ 48355              	.LASF195:
+ 48356 0e3d 7263556E 		.string	"rcUnpacking"
+ 48356      7061636B 
+ 48356      696E6700 
+ 48357              	.LASF111:
+ 48358 0e49 7263446F 		.string	"rcDoc"
+ 48358      6300
+ 48359              	.LASF18:
+ 48360 0e4f 4442475F 		.string	"DBG_APP"
+ 48360      41505000 
+ 48361              	.LASF212:
+ 48362 0e57 72634D75 		.string	"rcMultiplexing"
+ 48362      6C746970 
+ 48362      6C657869 
+ 48362      6E6700
+ 48363              	.LASF214:
+ 48364 0e66 72635365 		.string	"rcSearching"
+ 48364      61726368 
+ 48364      696E6700 
+ 48365              	.LASF408:
+ 48366 0e72 46465F74 		.string	"FF_tab"
+ 48366      616200
+ 48367              	.LASF314:
+ 48368 0e79 72634661 		.string	"rcFailed"
+ 48368      696C6564 
+ 48368      00
+ 48369              	.LASF39:
+ 48370 0e82 4442475F 		.string	"DBG_AES_INVKEYEXP"
+ 48370      4145535F 
+ 48370      494E564B 
+ 48370      45594558 
+ 48370      5000
+ 48371              	.LASF357:
+ 48372 0e94 4B414553 		.string	"KAESBlockCipherVecFFtab"
+ 48372      426C6F63 
+ 48372      6B436970 
+ 48372      68657256 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1223
+
+
+ 48372      65634646 
+ 48373              	.LASF118:
+ 48374 0eac 72634675 		.string	"rcFunctParam"
+ 48374      6E637450 
+ 48374      6172616D 
+ 48374      00
+ 48375              	.LASF279:
+ 48376 0eb9 7263496E 		.string	"rcIncorrect"
+ 48376      636F7272 
+ 48376      65637400 
+ 48377              	.LASF60:
+ 48378 0ec5 776F7264 		.string	"word"
+ 48378      00
+ 48379              	.LASF228:
+ 48380 0eca 72634964 		.string	"rcIdentifying"
+ 48380      656E7469 
+ 48380      6679696E 
+ 48380      6700
+ 48381              	.LASF243:
+ 48382 0ed8 7263436F 		.string	"rcConstraint"
+ 48382      6E737472 
+ 48382      61696E74 
+ 48382      00
+ 48383              	.LASF269:
+ 48384 0ee5 7263556E 		.string	"rcUnknown"
+ 48384      6B6E6F77 
+ 48384      6E00
+ 48385              	.LASF108:
+ 48386 0eef 72634375 		.string	"rcCursor"
+ 48386      72736F72 
+ 48386      00
+ 48387              	.LASF266:
+ 48388 0ef8 52435374 		.string	"RCState"
+ 48388      61746500 
+ 48389              	.LASF54:
+ 48390 0f00 4B426C6F 		.string	"KBlockCipherByte"
+ 48390      636B4369 
+ 48390      70686572 
+ 48390      42797465 
+ 48390      00
+ 48391              	.LASF45:
+ 48392 0f11 4B426C6F 		.string	"KBlockCipherByte_vt_v1"
+ 48392      636B4369 
+ 48392      70686572 
+ 48392      42797465 
+ 48392      5F76745F 
+ 48393              	.LASF306:
+ 48394 0f28 72634967 		.string	"rcIgnored"
+ 48394      6E6F7265 
+ 48394      6400
+ 48395              	.LASF164:
+ 48396 0f32 72635265 		.string	"rcReleasing"
+ 48396      6C656173 
+ 48396      696E6700 
+ 48397              	.LASF87:
+ 48398 0f3e 72634B46 		.string	"rcKFG"
+ 48398      4700
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1224
+
+
+ 48399              	.LASF245:
+ 48400 0f44 72634D65 		.string	"rcMessage"
+ 48400      73736167 
+ 48400      6500
+ 48401              	.LASF192:
+ 48402 0f4e 7263466F 		.string	"rcFormatting"
+ 48402      726D6174 
+ 48402      74696E67 
+ 48402      00
+ 48403              	.LASF85:
+ 48404 0f5b 72635352 		.string	"rcSRA"
+ 48404      4100
+ 48405              	.LASF261:
+ 48406 0f61 7263456E 		.string	"rcEnvironment"
+ 48406      7669726F 
+ 48406      6E6D656E 
+ 48406      7400
+ 48407              	.LASF14:
+ 48408 0f6f 6C6F6E67 		.string	"long long unsigned int"
+ 48408      206C6F6E 
+ 48408      6720756E 
+ 48408      7369676E 
+ 48408      65642069 
+ 48409              	.LASF47:
+ 48410 0f86 64657374 		.string	"destroy"
+ 48410      726F7900 
+ 48411              	.LASF143:
+ 48412 0f8e 7263546F 		.string	"rcToken"
+ 48412      6B656E00 
+ 48413              	.LASF203:
+ 48414 0f96 7263546F 		.string	"rcTokenizing"
+ 48414      6B656E69 
+ 48414      7A696E67 
+ 48414      00
+ 48415              	.LASF21:
+ 48416 0fa3 4442475F 		.string	"DBG_REF"
+ 48416      52454600 
+ 48417              	.LASF404:
+ 48418 0fab 4B414553 		.string	"KAESBlockCipherVecRijndaelSBox"
+ 48418      426C6F63 
+ 48418      6B436970 
+ 48418      68657256 
+ 48418      65635269 
+ 48419              	.LASF184:
+ 48420 0fca 72635772 		.string	"rcWriting"
+ 48420      6974696E 
+ 48420      6700
+ 48421              	.LASF160:
+ 48422 0fd4 7263416C 		.string	"rcAllocating"
+ 48422      6C6F6361 
+ 48422      74696E67 
+ 48422      00
+ 48423              	.LASF146:
+ 48424 0fe1 72635479 		.string	"rcType"
+ 48424      706500
+ 48425              	.LASF342:
+ 48426 0fe8 4B414553 		.string	"KAESBlockCipherVecStateShiftLeft32"
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1225
+
+
+ 48426      426C6F63 
+ 48426      6B436970 
+ 48426      68657256 
+ 48426      65635374 
+ 48427              	.LASF247:
+ 48428 100b 72635265 		.string	"rcResources"
+ 48428      736F7572 
+ 48428      63657300 
+ 48429              	.LASF128:
+ 48430 1017 72634E61 		.string	"rcNamelist"
+ 48430      6D656C69 
+ 48430      737400
+ 48431              	.LASF338:
+ 48432 1022 4B414553 		.string	"KAESBlockCipherVecStateDupColumn3"
+ 48432      426C6F63 
+ 48432      6B436970 
+ 48432      68657256 
+ 48432      65635374 
+ 48433              	.LASF380:
+ 48434 1044 4B414553 		.string	"KAESBlockCipherVecEqInvLastRound"
+ 48434      426C6F63 
+ 48434      6B436970 
+ 48434      68657256 
+ 48434      65634571 
+ 48435              	.LASF312:
+ 48436 1065 7263556E 		.string	"rcUndefined"
+ 48436      64656669 
+ 48436      6E656400 
+ 48437              	.LASF280:
+ 48438 1071 7263496E 		.string	"rcInconsistent"
+ 48438      636F6E73 
+ 48438      69737465 
+ 48438      6E7400
+ 48439              	.LASF385:
+ 48440 1080 4B414553 		.string	"KAESBlockCipherVecKeySize"
+ 48440      426C6F63 
+ 48440      6B436970 
+ 48440      68657256 
+ 48440      65634B65 
+ 48441              	.LASF225:
+ 48442 109a 72635265 		.string	"rcRetrieving"
+ 48442      74726965 
+ 48442      76696E67 
+ 48442      00
+ 48443              	.LASF387:
+ 48444 10a7 656E6372 		.string	"encrypt_key"
+ 48444      7970745F 
+ 48444      6B657900 
+ 48445              	.LASF53:
+ 48446 10b3 64656372 		.string	"decrypt"
+ 48446      79707400 
+ 48447              	.LASF46:
+ 48448 10bb 76657273 		.string	"version"
+ 48448      696F6E00 
+ 48449              	.LASF237:
+ 48450 10c3 72634E61 		.string	"rcName"
+ 48450      6D6500
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1226
+
+
+ 48451              	.LASF406:
+ 48452 10ca 4B414553 		.string	"KAESBlockCipherVecRijndaelInvSBoxV"
+ 48452      426C6F63 
+ 48452      6B436970 
+ 48452      68657256 
+ 48452      65635269 
+ 48453              	.LASF274:
+ 48454 10ed 72634E75 		.string	"rcNull"
+ 48454      6C6C00
+ 48455              	.LASF196:
+ 48456 10f4 7263456E 		.string	"rcEncoding"
+ 48456      636F6469 
+ 48456      6E6700
+ 48457              	.LASF115:
+ 48458 10ff 72634669 		.string	"rcFileFormat"
+ 48458      6C65466F 
+ 48458      726D6174 
+ 48458      00
+ 48459              	.LASF152:
+ 48460 110c 7263456E 		.string	"rcEncryptionKey"
+ 48460      63727970 
+ 48460      74696F6E 
+ 48460      4B657900 
+ 48461              	.LASF217:
+ 48462 111c 7263496E 		.string	"rcInflating"
+ 48462      666C6174 
+ 48462      696E6700 
+ 48463              	.LASF299:
+ 48464 1128 72634E6F 		.string	"rcNoPerm"
+ 48464      5065726D 
+ 48464      00
+ 48465              	.LASF330:
+ 48466 1131 64657374 		.string	"dest"
+ 48466      00
+ 48467              	.LASF372:
+ 48468 1136 4B414553 		.string	"KAESBlockCipherVecLastRound"
+ 48468      426C6F63 
+ 48468      6B436970 
+ 48468      68657256 
+ 48468      65634C61 
+ 48469              	.LASF362:
+ 48470 1152 4B414553 		.string	"KAESBlockCipherVecEqInvKeyExpansion192"
+ 48470      426C6F63 
+ 48470      6B436970 
+ 48470      68657256 
+ 48470      65634571 
+ 48471              	.LASF187:
+ 48472 1179 72635265 		.string	"rcResetting"
+ 48472      73657474 
+ 48472      696E6700 
+ 48473              	.LASF48:
+ 48474 1185 626C6F63 		.string	"block_size"
+ 48474      6B5F7369 
+ 48474      7A6500
+ 48475              	.LASF135:
+ 48476 1190 72635257 		.string	"rcRWLock"
+ 48476      4C6F636B 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1227
+
+
+ 48476      00
+ 48477              	.LASF166:
+ 48478 1199 72634C69 		.string	"rcListing"
+ 48478      7374696E 
+ 48478      6700
+ 48479              	.LASF351:
+ 48480 11a3 4B414553 		.string	"KAESBlockCipherVecKeyExpansion128"
+ 48480      426C6F63 
+ 48480      6B436970 
+ 48480      68657256 
+ 48480      65634B65 
+ 48481              	.LASF402:
+ 48482 11c5 7665635F 		.string	"vec_0F"
+ 48482      304600
+ 48483              	.LASF116:
+ 48484 11cc 72634675 		.string	"rcFunction"
+ 48484      6E637469 
+ 48484      6F6E00
+ 48485              	.LASF38:
+ 48486 11d7 4442475F 		.string	"DBG_AES_CIPHER"
+ 48486      4145535F 
+ 48486      43495048 
+ 48486      455200
+ 48487              	.LASF272:
+ 48488 11e6 7263556E 		.string	"rcUnrecognized"
+ 48488      7265636F 
+ 48488      676E697A 
+ 48488      656400
+ 48489              	.LASF65:
+ 48490 11f5 6E756D62 		.string	"number_of_rounds"
+ 48490      65725F6F 
+ 48490      665F726F 
+ 48490      756E6473 
+ 48490      00
+ 48491              	.LASF88:
+ 48492 1206 7263416C 		.string	"rcAlign"
+ 48492      69676E00 
+ 48493              	.LASF151:
+ 48494 120e 72635072 		.string	"rcProduction"
+ 48494      6F647563 
+ 48494      74696F6E 
+ 48494      00
+ 48495              	.LASF93:
+ 48496 121b 72634C61 		.string	"rcLastModule_v1_1"
+ 48496      73744D6F 
+ 48496      64756C65 
+ 48496      5F76315F 
+ 48496      3100
+ 48497              	.LASF376:
+ 48498 122d 4B414553 		.string	"KAESBlockCipherVecEqInvMiddleRound"
+ 48498      426C6F63 
+ 48498      6B436970 
+ 48498      68657256 
+ 48498      65634571 
+ 48499              	.LASF141:
+ 48500 1250 72635468 		.string	"rcThread"
+ 48500      72656164 
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1228
+
+
+ 48500      00
+ 48501              	.LASF189:
+ 48502 1259 72634672 		.string	"rcFreezing"
+ 48502      65657A69 
+ 48502      6E6700
+ 48503              	.LASF51:
+ 48504 1264 7365745F 		.string	"set_decrypt_key"
+ 48504      64656372 
+ 48504      7970745F 
+ 48504      6B657900 
+ 48505              	.LASF71:
+ 48506 1274 62797465 		.string	"byte"
+ 48506      00
+ 48507              	.LASF44:
+ 48508 1279 4B426C6F 		.string	"KBlockCipher_vt"
+ 48508      636B4369 
+ 48508      70686572 
+ 48508      5F767400 
+ 48509              	.LASF393:
+ 48510 1289 64656372 		.string	"decrypt_key"
+ 48510      7970745F 
+ 48510      6B657900 
+ 48511              	.LASF258:
+ 48512 1295 72635365 		.string	"rcSeed"
+ 48512      656400
+ 48513              	.LASF333:
+ 48514 129c 4B414553 		.string	"KAESBlockCipherVecVecOr"
+ 48514      426C6F63 
+ 48514      6B436970 
+ 48514      68657256 
+ 48514      65635665 
+ 48515              	.LASF215:
+ 48516 12b4 72634C6F 		.string	"rcLoading"
+ 48516      6164696E 
+ 48516      6700
+ 48517              	.LASF1:
+ 48518 12be 73686F72 		.string	"short int"
+ 48518      7420696E 
+ 48518      7400
+ 48519              	.LASF8:
+ 48520 12c8 75696E74 		.string	"uint64_t"
+ 48520      36345F74 
+ 48520      00
+ 48521              	.LASF308:
+ 48522 12d1 72634C61 		.string	"rcLastState_v1_0"
+ 48522      73745374 
+ 48522      6174655F 
+ 48522      76315F30 
+ 48522      00
+ 48523              	.LASF317:
+ 48524 12e2 72634C61 		.string	"rcLastState_v1_1"
+ 48524      73745374 
+ 48524      6174655F 
+ 48524      76315F31 
+ 48524      00
+ 48525              	.LASF82:
+ 48526 12f3 72635644 		.string	"rcVDB"
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1229
+
+
+ 48526      4200
+ 48527              	.LASF345:
+ 48528 12f9 4B414553 		.string	"KAESBlockCipherVecAesKeyGenAssistColumn1"
+ 48528      426C6F63 
+ 48528      6B436970 
+ 48528      68657256 
+ 48528      65634165 
+ 48529              	.LASF353:
+ 48530 1322 4B414553 		.string	"KAESBlockCipherVecAesKeyGenAssistColumn2"
+ 48530      426C6F63 
+ 48530      6B436970 
+ 48530      68657256 
+ 48530      65634165 
+ 48531              	.LASF319:
+ 48532 134b 4B414553 		.string	"KAESBlockCipherVecAesKeyGenAssistColumn3"
+ 48532      426C6F63 
+ 48532      6B436970 
+ 48532      68657256 
+ 48532      65634165 
+ 48533              	.LASF50:
+ 48534 1374 7365745F 		.string	"set_encrypt_key"
+ 48534      656E6372 
+ 48534      7970745F 
+ 48534      6B657900 
+ 48535              	.LASF80:
+ 48536 1384 72635846 		.string	"rcXF"
+ 48536      00
+ 48537              	.LASF321:
+ 48538 1389 7672636F 		.string	"vrcon"
+ 48538      6E00
+ 48539              	.LASF322:
+ 48540 138f 4B414553 		.string	"KAESBlockCipherVecSetColumn"
+ 48540      426C6F63 
+ 48540      6B436970 
+ 48540      68657256 
+ 48540      65635365 
+ 48541              	.LASF163:
+ 48542 13ab 72634465 		.string	"rcDestroying"
+ 48542      7374726F 
+ 48542      79696E67 
+ 48542      00
+ 48543              	.LASF268:
+ 48544 13b8 7263446F 		.string	"rcDone"
+ 48544      6E6500
+ 48545              	.LASF98:
+ 48546 13bf 7263546F 		.string	"rcToc"
+ 48546      6300
+ 48547              	.LASF62:
+ 48548 13c5 43697068 		.string	"CipherVecByte"
+ 48548      65725665 
+ 48548      63427974 
+ 48548      6500
+ 48549              	.LASF172:
+ 48550 13d3 7263416C 		.string	"rcAliasing"
+ 48550      69617369 
+ 48550      6E6700
+ 48551              	.LASF133:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1230
+
+
+ 48552 13de 72635072 		.string	"rcProcess"
+ 48552      6F636573 
+ 48552      7300
+ 48553              	.LASF231:
+ 48554 13e8 72634E6F 		.string	"rcNoObj"
+ 48554      4F626A00 
+ 48555              	.LASF270:
+ 48556 13f0 7263556E 		.string	"rcUnsupported"
+ 48556      73757070 
+ 48556      6F727465 
+ 48556      6400
+ 48557              	.LASF106:
+ 48558 13fe 7263436F 		.string	"rcColumn"
+ 48558      6C756D6E 
+ 48558      00
+ 48559              	.LASF271:
+ 48560 1407 7263556E 		.string	"rcUnexpected"
+ 48560      65787065 
+ 48560      63746564 
+ 48560      00
+ 48561              	.LASF411:
+ 48562 1414 4B414553 		.string	"KAESBlockCipherVecaes_ncbi_name"
+ 48562      426C6F63 
+ 48562      6B436970 
+ 48562      68657256 
+ 48562      65636165 
+ 48563              	.LASF6:
+ 48564 1434 75696E74 		.string	"uint32_t"
+ 48564      33325F74 
+ 48564      00
+ 48565              	.LASF92:
+ 48566 143d 72635646 		.string	"rcVFS"
+ 48566      5300
+ 48567              	.LASF30:
+ 48568 1443 4442475F 		.string	"DBG_KRYPTO"
+ 48568      4B525950 
+ 48568      544F00
+ 48569              	.LASF42:
+ 48570 144e 4442475F 		.string	"DBG_AES_COUNT"
+ 48570      4145535F 
+ 48570      434F554E 
+ 48570      5400
+ 48571              	.LASF59:
+ 48572 145c 41455343 		.string	"AESColumn"
+ 48572      6F6C756D 
+ 48572      6E00
+ 48573              	.LASF397:
+ 48574 1466 6C657665 		.string	"level"
+ 48574      6C00
+ 48575              	.LASF316:
+ 48576 146c 72635772 		.string	"rcWrongType"
+ 48576      6F6E6754 
+ 48576      79706500 
+ 48577              	.LASF251:
+ 48578 1478 72634C69 		.string	"rcLibrary"
+ 48578      62726172 
+ 48578      7900
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1231
+
+
+ 48579              	.LASF284:
+ 48580 1482 72634361 		.string	"rcCanceled"
+ 48580      6E63656C 
+ 48580      656400
+ 48581              	.LASF155:
+ 48582 148d 72634461 		.string	"rcData"
+ 48582      746100
+ 48583              	.LASF394:
+ 48584 1494 4B414553 		.string	"KAESBlockCipherVecEncrypt"
+ 48584      426C6F63 
+ 48584      6B436970 
+ 48584      68657256 
+ 48584      6563456E 
+ 48585              	.LASF119:
+ 48586 14ae 72634865 		.string	"rcHeader"
+ 48586      61646572 
+ 48586      00
+ 48587              	.LASF4:
+ 48588 14b7 73686F72 		.string	"short unsigned int"
+ 48588      7420756E 
+ 48588      7369676E 
+ 48588      65642069 
+ 48588      6E7400
+ 48589              	.LASF325:
+ 48590 14ca 4B414553 		.string	"KAESBlockCipherVecSubBytes"
+ 48590      426C6F63 
+ 48590      6B436970 
+ 48590      68657256 
+ 48590      65635375 
+ 48591              	.LASF109:
+ 48592 14e5 72634461 		.string	"rcDatabase"
+ 48592      74616261 
+ 48592      736500
+ 48593              	.LASF185:
+ 48594 14f0 7263436F 		.string	"rcCommitting"
+ 48594      6D6D6974 
+ 48594      74696E67 
+ 48594      00
+ 48595              	.LASF213:
+ 48596 14fd 7263436C 		.string	"rcClassifying"
+ 48596      61737369 
+ 48596      6679696E 
+ 48596      6700
+ 48597              	.LASF144:
+ 48598 150b 72635472 		.string	"rcTree"
+ 48598      656500
+ 48599              	.LASF35:
+ 48600 1512 4442475F 		.string	"DBG_ARGS"
+ 48600      41524753 
+ 48600      00
+ 48601              	.LASF173:
+ 48602 151b 72635365 		.string	"rcSelecting"
+ 48602      6C656374 
+ 48602      696E6700 
+ 48603              	.LASF74:
+ 48604 1527 72635465 		.string	"rcText"
+ 48604      787400
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1232
+
+
+ 48605              	.LASF310:
+ 48606 152e 72634F75 		.string	"rcOutoforder"
+ 48606      746F666F 
+ 48606      72646572 
+ 48606      00
+ 48607              	.LASF412:
+ 48608 153b 4B414553 		.string	"KAESBlockCipherVec_vt_"
+ 48608      426C6F63 
+ 48608      6B436970 
+ 48608      68657256 
+ 48608      65635F76 
+ 48609              	.LASF277:
+ 48610 1552 7263496E 		.string	"rcInvalid"
+ 48610      76616C69 
+ 48610      6400
+ 48611              	.LASF389:
+ 48612 155c 75736572 		.string	"user_key_size"
+ 48612      5F6B6579 
+ 48612      5F73697A 
+ 48612      6500
+ 48613              	.LASF224:
+ 48614 156a 7263496E 		.string	"rcInitializing"
+ 48614      69746961 
+ 48614      6C697A69 
+ 48614      6E6700
+ 48615              	.LASF377:
+ 48616 1579 4B414553 		.string	"KAESBlockCipherVecInvSubBytes"
+ 48616      426C6F63 
+ 48616      6B436970 
+ 48616      68657256 
+ 48616      6563496E 
+ 48617              	.LASF103:
+ 48618 1597 7263426C 		.string	"rcBlob"
+ 48618      6F6200
+ 48619              	.LASF339:
+ 48620 159e 74656D70 		.string	"temp"
+ 48620      00
+ 48621              	.LASF201:
+ 48622 15a3 72635265 		.string	"rcReindexing"
+ 48622      696E6465 
+ 48622      78696E67 
+ 48622      00
+ 48623              	.LASF318:
+ 48624 15b0 4B414553 		.string	"KAESBlockCipherVecStateIn"
+ 48624      426C6F63 
+ 48624      6B436970 
+ 48624      68657256 
+ 48624      65635374 
+ 48625              	.LASF96:
+ 48626 15ca 72634E6F 		.string	"rcNoTarg"
+ 48626      54617267 
+ 48626      00
+ 48627              	.LASF278:
+ 48628 15d3 7263436F 		.string	"rcCorrupt"
+ 48628      72727570 
+ 48628      7400
+ 48629              	.LASF307:
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1233
+
+
+ 48630 15dd 72634F75 		.string	"rcOutofrange"
+ 48630      746F6672 
+ 48630      616E6765 
+ 48630      00
+ 48631              	.LASF136:
+ 48632 15ea 72635363 		.string	"rcSchema"
+ 48632      68656D61 
+ 48632      00
+ 48633              	.LASF326:
+ 48634 15f3 4B414553 		.string	"KAESBlockCipherVecSubBytesInt"
+ 48634      426C6F63 
+ 48634      6B436970 
+ 48634      68657256 
+ 48634      65635375 
+ 48635              	.LASF132:
+ 48636 1611 72635061 		.string	"rcPath"
+ 48636      746800
+ 48637              	.LASF183:
+ 48638 1618 72635265 		.string	"rcReading"
+ 48638      6164696E 
+ 48638      6700
+ 48639              	.LASF49:
+ 48640 1622 6B65795F 		.string	"key_size"
+ 48640      73697A65 
+ 48640      00
+ 48641              	.LASF315:
+ 48642 162b 72634E6F 		.string	"rcNotAvailable"
+ 48642      74417661 
+ 48642      696C6162 
+ 48642      6C6500
+ 48643              	.LASF352:
+ 48644 163a 4B414553 		.string	"KAESBlockCipherVecKeyExpansion192"
+ 48644      426C6F63 
+ 48644      6B436970 
+ 48644      68657256 
+ 48644      65634B65 
+ 48645              	.LASF273:
+ 48646 165c 7263416D 		.string	"rcAmbiguous"
+ 48646      62696775 
+ 48646      6F757300 
+ 48647              		.ident	"GCC: (GNU) 4.4.2"
+ 48648              		.section	.note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/ccMa7HLZ.s 			page 1234
+
+
+DEFINED SYMBOLS
+                            *ABS*:0000000000000000 aes-ncbi.c
+     /tmp/ccMa7HLZ.s:11     .text:0000000000000000 bswap_32
+     /tmp/ccMa7HLZ.s:47     .rodata:0000000000000000 vec_00
+     /tmp/ccMa7HLZ.s:52     .rodata:0000000000000010 vec_01
+     /tmp/ccMa7HLZ.s:72     .rodata:0000000000000020 vec_0F
+     /tmp/ccMa7HLZ.s:92     .rodata:0000000000000030 vec_10
+     /tmp/ccMa7HLZ.s:112    .rodata:0000000000000040 KAESBlockCipherVecRijndaelSBox
+     /tmp/ccMa7HLZ.s:372    .rodata:0000000000000140 KAESBlockCipherVecRijndaelSBoxV
+     /tmp/ccMa7HLZ.s:632    .rodata:0000000000000240 KAESBlockCipherVecRijndaelInvSBoxV
+     /tmp/ccMa7HLZ.s:892    .rodata:0000000000000340 lo_filter
+     /tmp/ccMa7HLZ.s:912    .rodata:0000000000000350 FF_tab
+     /tmp/ccMa7HLZ.s:932    .data:0000000000000000 KAESBlockCipherVecFFtable
+     /tmp/ccMa7HLZ.s:945    .rodata:0000000000000360 KAESBlockCipherVecRcon
+     /tmp/ccMa7HLZ.s:968    .text:0000000000000014 KAESBlockCipherVecKeyExpansion128
+     /tmp/ccMa7HLZ.s:25534  .rodata:00000000000005c0 ShiftRowTable.6768
+     /tmp/ccMa7HLZ.s:8748   .text:0000000000007c1e KAESBlockCipherVecKeyExpansion192
+     /tmp/ccMa7HLZ.s:13764  .text:000000000000cc56 KAESBlockCipherVecKeyExpansion256
+     /tmp/ccMa7HLZ.s:20329  .text:00000000000134cf KAESBlockCipherVecEqInvKeyExpansion
+     /tmp/ccMa7HLZ.s:20835  .text:0000000000013ba2 KAESBlockCipherVecEqInvKeyExpansion128
+     /tmp/ccMa7HLZ.s:20863  .text:0000000000013bcc KAESBlockCipherVecEqInvKeyExpansion192
+     /tmp/ccMa7HLZ.s:20891  .text:0000000000013bf6 KAESBlockCipherVecEqInvKeyExpansion256
+     /tmp/ccMa7HLZ.s:20935  .text:0000000000013c20 KAESBlockCipherVecCipher
+     /tmp/ccMa7HLZ.s:25514  .rodata:00000000000005b0 ShiftRowTable.6741
+     /tmp/ccMa7HLZ.s:22848  .text:0000000000015916 KAESBlockCipherVecEqInvCipher
+     /tmp/ccMa7HLZ.s:25564  .rodata:0000000000000620 InvShiftRowTable.6750
+     /tmp/ccMa7HLZ.s:24903  .rodata:0000000000000460 KAESBlockCipherVecaes_ncbi_name
+     /tmp/ccMa7HLZ.s:24907  .text:0000000000017843 KAESBlockCipherVecDestroy
+     /tmp/ccMa7HLZ.s:24926  .text:000000000001784d KAESBlockCipherVecBlockSize
+     /tmp/ccMa7HLZ.s:24946  .text:0000000000017858 KAESBlockCipherVecKeySize
+     /tmp/ccMa7HLZ.s:24971  .text:0000000000017863 KAESBlockCipherVecSetEncryptKey
+     /tmp/ccMa7HLZ.s:25554  .rodata:00000000000005e0 __func__.8464
+     /tmp/ccMa7HLZ.s:25062  .text:000000000001794c KAESBlockCipherVecSetDecryptKey
+     /tmp/ccMa7HLZ.s:25144  .text:0000000000017a0f KAESBlockCipherVecEncrypt
+     /tmp/ccMa7HLZ.s:25509  .rodata:0000000000000590 __PRETTY_FUNCTION__.8500
+     /tmp/ccMa7HLZ.s:25222  .text:0000000000017ad2 KAESBlockCipherVecDecrypt
+     /tmp/ccMa7HLZ.s:25504  .rodata:0000000000000570 __PRETTY_FUNCTION__.8521
+     /tmp/ccMa7HLZ.s:25307  .text:0000000000017b95 KAESBlockCipherVecProcessorSupport
+     /tmp/ccMa7HLZ.s:25499  .rodata:0000000000000540 __func__.8545
+     /tmp/ccMa7HLZ.s:25393  .data.rel.ro.local:0000000000000000 KAESBlockCipherVec_vt_
+     /tmp/ccMa7HLZ.s:25409  .text:0000000000017c5b KAESBlockCipherVecMake
+     /tmp/ccMa7HLZ.s:25489  .rodata:00000000000004f0 __func__.8570
+     /tmp/ccMa7HLZ.s:25494  .rodata:0000000000000510 __PRETTY_FUNCTION__.8571
+     /tmp/ccMa7HLZ.s:25559  .rodata:0000000000000600 __PRETTY_FUNCTION__.8463
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+memmove
+KDbgWriterGet
+KDbgCondToFlag
+KDbgTestModConds
+KDbgMsg
+memset
+SetRCFileFuncLine
+__assert_fail
diff --git a/libs/krypto/aes-ncbi.vecreg.pic.o.list b/libs/krypto/aes-ncbi.vecreg.pic.o.list
new file mode 100644
index 0000000..9088ee6
--- /dev/null
+++ b/libs/krypto/aes-ncbi.vecreg.pic.o.list
@@ -0,0 +1,75192 @@
+GAS LISTING /tmp/ccjbMjHD.s 			page 1
+
+
+   1              		.file	"aes-ncbi.c"
+   2              		.section	.debug_abbrev,"", at progbits
+   3              	.Ldebug_abbrev0:
+   4              		.section	.debug_info,"", at progbits
+   5              	.Ldebug_info0:
+   6              		.section	.debug_line,"", at progbits
+   7              	.Ldebug_line0:
+   8 0000 A62A0000 		.text
+   8      02007101 
+   8      00000101 
+   8      FB0E0D00 
+   8      01010101 
+   9              	.Ltext0:
+  10              		.type	bswap_32, @function
+  11              	bswap_32:
+  12              	.LFB591:
+  13              		.file 1 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h"
+   1:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** /*===========================================================================
+   2:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+   3:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *                            PUBLIC DOMAIN NOTICE
+   4:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *               National Center for Biotechnology Information
+   5:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+   6:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  This software/database is a "United States Government Work" under the
+   7:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  terms of the United States Copyright Act.  It was written as part of
+   8:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  the author's official duties as a United States Government employee and
+   9:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  thus cannot be copyrighted.  This software/database is freely available
+  10:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  to the public for use. The National Library of Medicine and the U.S.
+  11:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  Government have not placed any restriction on its use or reproduction.
+  12:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+  13:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  Although all reasonable efforts have been taken to ensure the accuracy
+  14:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  and reliability of the software and data, the NLM and the U.S.
+  15:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  Government do not and cannot warrant the performance or results that
+  16:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  may be obtained by using this software or data. The NLM and the U.S.
+  17:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  Government disclaim all warranties, express or implied, including
+  18:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  warranties of performance, merchantability or fitness for any particular
+  19:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  purpose.
+  20:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+  21:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *  Please cite the author in any work or product based on this material.
+  22:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+  23:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** * ===========================================================================
+  24:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** *
+  25:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** */
+  26:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** 
+  27:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #ifndef _h_byteswap_
+  28:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #define _h_byteswap_
+  29:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** 
+  30:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #ifdef _BYTESWAP_H
+  31:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #warning "GNU byteswap.h being used"
+  32:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #else
+  33:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #define _BYTESWAP_H	1234
+  34:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** 
+  35:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #include <stdint.h>
+  36:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** 
+  37:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #ifdef __cplusplus
+  38:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** extern "C" {
+  39:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** #endif
+  40:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 2
+
+
+  41:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** /* perform single instruction byte swap */
+  42:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** static __inline__ uint16_t bswap_16 ( uint16_t i )
+  43:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** {
+  44:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     register uint16_t rtn;
+  45:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     __asm__
+  46:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     (
+  47:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         "rorw $8, %w0"
+  48:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         : "=r" ( rtn )
+  49:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         : "0" ( i )
+  50:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         : "cc"
+  51:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     );
+  52:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     return rtn;
+  53:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** }
+  54:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** 
+  55:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** /* perform single instruction byte swap */
+  56:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** static __inline__ uint32_t bswap_32 ( uint32_t i )
+  57:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** {
+  14              		.loc 1 57 0
+  15              		.cfi_startproc
+  16 0000 55       		pushq	%rbp
+  17              	.LCFI0:
+  18              		.cfi_def_cfa_offset 16
+  19 0001 4889E5   		movq	%rsp, %rbp
+  20              		.cfi_offset 6, -16
+  21              	.LCFI1:
+  22              		.cfi_def_cfa_register 6
+  23 0004 53       		pushq	%rbx
+  24 0005 897DF4   		movl	%edi, -12(%rbp)
+  58:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     register uint32_t rtn;
+  59:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     __asm__
+  25              		.loc 1 59 0
+  26 0008 8B45F4   		movl	-12(%rbp), %eax
+  27 000b 89C3     		movl	%eax, %ebx
+  28              		.cfi_offset 3, -24
+  29              	#APP
+  30              	# 59 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h" 1
+  60              	    (
+  61:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         "bswap %0"
+  62:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         : "=r" ( rtn )
+  63:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         : "0" ( i )
+  64:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****         : "cc"
+  65:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     );
+  66:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h ****     return rtn;
+  31              		bswap %ebx
+  32              	# 0 "" 2
+  33              		.loc 1 66 0
+  34              	#NO_APP
+  35 000f 89D8     		movl	%ebx, %eax
+  67:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/byteswap.h **** }
+  36              		.loc 1 67 0
+  37 0011 5B       		popq	%rbx
+  38 0012 C9       		leave
+  39 0013 C3       		ret
+  40              		.cfi_endproc
+  41              	.LFE591:
+  42              		.size	bswap_32, .-bswap_32
+  43              		.section	.rodata
+
GAS LISTING /tmp/ccjbMjHD.s 			page 3
+
+
+  44              		.align 16
+  45              		.type	vec_00, @object
+  46              		.size	vec_00, 16
+  47              	vec_00:
+  48 0000 00000000 		.zero	16
+  48      00000000 
+  48      00000000 
+  48      00000000 
+  49              		.align 16
+  50              		.type	vec_01, @object
+  51              		.size	vec_01, 16
+  52              	vec_01:
+  53 0010 01       		.byte	1
+  54 0011 01       		.byte	1
+  55 0012 01       		.byte	1
+  56 0013 01       		.byte	1
+  57 0014 01       		.byte	1
+  58 0015 01       		.byte	1
+  59 0016 01       		.byte	1
+  60 0017 01       		.byte	1
+  61 0018 01       		.byte	1
+  62 0019 01       		.byte	1
+  63 001a 01       		.byte	1
+  64 001b 01       		.byte	1
+  65 001c 01       		.byte	1
+  66 001d 01       		.byte	1
+  67 001e 01       		.byte	1
+  68 001f 01       		.byte	1
+  69              		.align 16
+  70              		.type	vec_0F, @object
+  71              		.size	vec_0F, 16
+  72              	vec_0F:
+  73 0020 0F       		.byte	15
+  74 0021 0F       		.byte	15
+  75 0022 0F       		.byte	15
+  76 0023 0F       		.byte	15
+  77 0024 0F       		.byte	15
+  78 0025 0F       		.byte	15
+  79 0026 0F       		.byte	15
+  80 0027 0F       		.byte	15
+  81 0028 0F       		.byte	15
+  82 0029 0F       		.byte	15
+  83 002a 0F       		.byte	15
+  84 002b 0F       		.byte	15
+  85 002c 0F       		.byte	15
+  86 002d 0F       		.byte	15
+  87 002e 0F       		.byte	15
+  88 002f 0F       		.byte	15
+  89              		.align 16
+  90              		.type	vec_10, @object
+  91              		.size	vec_10, 16
+  92              	vec_10:
+  93 0030 10       		.byte	16
+  94 0031 10       		.byte	16
+  95 0032 10       		.byte	16
+  96 0033 10       		.byte	16
+  97 0034 10       		.byte	16
+
GAS LISTING /tmp/ccjbMjHD.s 			page 4
+
+
+  98 0035 10       		.byte	16
+  99 0036 10       		.byte	16
+ 100 0037 10       		.byte	16
+ 101 0038 10       		.byte	16
+ 102 0039 10       		.byte	16
+ 103 003a 10       		.byte	16
+ 104 003b 10       		.byte	16
+ 105 003c 10       		.byte	16
+ 106 003d 10       		.byte	16
+ 107 003e 10       		.byte	16
+ 108 003f 10       		.byte	16
+ 109              		.align 32
+ 110              		.type	KAESBlockCipherVecRegRijndaelSBox, @object
+ 111              		.size	KAESBlockCipherVecRegRijndaelSBox, 256
+ 112              	KAESBlockCipherVecRegRijndaelSBox:
+ 113 0040 63       		.byte	99
+ 114 0041 7C       		.byte	124
+ 115 0042 77       		.byte	119
+ 116 0043 7B       		.byte	123
+ 117 0044 F2       		.byte	-14
+ 118 0045 6B       		.byte	107
+ 119 0046 6F       		.byte	111
+ 120 0047 C5       		.byte	-59
+ 121 0048 30       		.byte	48
+ 122 0049 01       		.byte	1
+ 123 004a 67       		.byte	103
+ 124 004b 2B       		.byte	43
+ 125 004c FE       		.byte	-2
+ 126 004d D7       		.byte	-41
+ 127 004e AB       		.byte	-85
+ 128 004f 76       		.byte	118
+ 129 0050 CA       		.byte	-54
+ 130 0051 82       		.byte	-126
+ 131 0052 C9       		.byte	-55
+ 132 0053 7D       		.byte	125
+ 133 0054 FA       		.byte	-6
+ 134 0055 59       		.byte	89
+ 135 0056 47       		.byte	71
+ 136 0057 F0       		.byte	-16
+ 137 0058 AD       		.byte	-83
+ 138 0059 D4       		.byte	-44
+ 139 005a A2       		.byte	-94
+ 140 005b AF       		.byte	-81
+ 141 005c 9C       		.byte	-100
+ 142 005d A4       		.byte	-92
+ 143 005e 72       		.byte	114
+ 144 005f C0       		.byte	-64
+ 145 0060 B7       		.byte	-73
+ 146 0061 FD       		.byte	-3
+ 147 0062 93       		.byte	-109
+ 148 0063 26       		.byte	38
+ 149 0064 36       		.byte	54
+ 150 0065 3F       		.byte	63
+ 151 0066 F7       		.byte	-9
+ 152 0067 CC       		.byte	-52
+ 153 0068 34       		.byte	52
+ 154 0069 A5       		.byte	-91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 5
+
+
+ 155 006a E5       		.byte	-27
+ 156 006b F1       		.byte	-15
+ 157 006c 71       		.byte	113
+ 158 006d D8       		.byte	-40
+ 159 006e 31       		.byte	49
+ 160 006f 15       		.byte	21
+ 161 0070 04       		.byte	4
+ 162 0071 C7       		.byte	-57
+ 163 0072 23       		.byte	35
+ 164 0073 C3       		.byte	-61
+ 165 0074 18       		.byte	24
+ 166 0075 96       		.byte	-106
+ 167 0076 05       		.byte	5
+ 168 0077 9A       		.byte	-102
+ 169 0078 07       		.byte	7
+ 170 0079 12       		.byte	18
+ 171 007a 80       		.byte	-128
+ 172 007b E2       		.byte	-30
+ 173 007c EB       		.byte	-21
+ 174 007d 27       		.byte	39
+ 175 007e B2       		.byte	-78
+ 176 007f 75       		.byte	117
+ 177 0080 09       		.byte	9
+ 178 0081 83       		.byte	-125
+ 179 0082 2C       		.byte	44
+ 180 0083 1A       		.byte	26
+ 181 0084 1B       		.byte	27
+ 182 0085 6E       		.byte	110
+ 183 0086 5A       		.byte	90
+ 184 0087 A0       		.byte	-96
+ 185 0088 52       		.byte	82
+ 186 0089 3B       		.byte	59
+ 187 008a D6       		.byte	-42
+ 188 008b B3       		.byte	-77
+ 189 008c 29       		.byte	41
+ 190 008d E3       		.byte	-29
+ 191 008e 2F       		.byte	47
+ 192 008f 84       		.byte	-124
+ 193 0090 53       		.byte	83
+ 194 0091 D1       		.byte	-47
+ 195 0092 00       		.byte	0
+ 196 0093 ED       		.byte	-19
+ 197 0094 20       		.byte	32
+ 198 0095 FC       		.byte	-4
+ 199 0096 B1       		.byte	-79
+ 200 0097 5B       		.byte	91
+ 201 0098 6A       		.byte	106
+ 202 0099 CB       		.byte	-53
+ 203 009a BE       		.byte	-66
+ 204 009b 39       		.byte	57
+ 205 009c 4A       		.byte	74
+ 206 009d 4C       		.byte	76
+ 207 009e 58       		.byte	88
+ 208 009f CF       		.byte	-49
+ 209 00a0 D0       		.byte	-48
+ 210 00a1 EF       		.byte	-17
+ 211 00a2 AA       		.byte	-86
+
GAS LISTING /tmp/ccjbMjHD.s 			page 6
+
+
+ 212 00a3 FB       		.byte	-5
+ 213 00a4 43       		.byte	67
+ 214 00a5 4D       		.byte	77
+ 215 00a6 33       		.byte	51
+ 216 00a7 85       		.byte	-123
+ 217 00a8 45       		.byte	69
+ 218 00a9 F9       		.byte	-7
+ 219 00aa 02       		.byte	2
+ 220 00ab 7F       		.byte	127
+ 221 00ac 50       		.byte	80
+ 222 00ad 3C       		.byte	60
+ 223 00ae 9F       		.byte	-97
+ 224 00af A8       		.byte	-88
+ 225 00b0 51       		.byte	81
+ 226 00b1 A3       		.byte	-93
+ 227 00b2 40       		.byte	64
+ 228 00b3 8F       		.byte	-113
+ 229 00b4 92       		.byte	-110
+ 230 00b5 9D       		.byte	-99
+ 231 00b6 38       		.byte	56
+ 232 00b7 F5       		.byte	-11
+ 233 00b8 BC       		.byte	-68
+ 234 00b9 B6       		.byte	-74
+ 235 00ba DA       		.byte	-38
+ 236 00bb 21       		.byte	33
+ 237 00bc 10       		.byte	16
+ 238 00bd FF       		.byte	-1
+ 239 00be F3       		.byte	-13
+ 240 00bf D2       		.byte	-46
+ 241 00c0 CD       		.byte	-51
+ 242 00c1 0C       		.byte	12
+ 243 00c2 13       		.byte	19
+ 244 00c3 EC       		.byte	-20
+ 245 00c4 5F       		.byte	95
+ 246 00c5 97       		.byte	-105
+ 247 00c6 44       		.byte	68
+ 248 00c7 17       		.byte	23
+ 249 00c8 C4       		.byte	-60
+ 250 00c9 A7       		.byte	-89
+ 251 00ca 7E       		.byte	126
+ 252 00cb 3D       		.byte	61
+ 253 00cc 64       		.byte	100
+ 254 00cd 5D       		.byte	93
+ 255 00ce 19       		.byte	25
+ 256 00cf 73       		.byte	115
+ 257 00d0 60       		.byte	96
+ 258 00d1 81       		.byte	-127
+ 259 00d2 4F       		.byte	79
+ 260 00d3 DC       		.byte	-36
+ 261 00d4 22       		.byte	34
+ 262 00d5 2A       		.byte	42
+ 263 00d6 90       		.byte	-112
+ 264 00d7 88       		.byte	-120
+ 265 00d8 46       		.byte	70
+ 266 00d9 EE       		.byte	-18
+ 267 00da B8       		.byte	-72
+ 268 00db 14       		.byte	20
+
GAS LISTING /tmp/ccjbMjHD.s 			page 7
+
+
+ 269 00dc DE       		.byte	-34
+ 270 00dd 5E       		.byte	94
+ 271 00de 0B       		.byte	11
+ 272 00df DB       		.byte	-37
+ 273 00e0 E0       		.byte	-32
+ 274 00e1 32       		.byte	50
+ 275 00e2 3A       		.byte	58
+ 276 00e3 0A       		.byte	10
+ 277 00e4 49       		.byte	73
+ 278 00e5 06       		.byte	6
+ 279 00e6 24       		.byte	36
+ 280 00e7 5C       		.byte	92
+ 281 00e8 C2       		.byte	-62
+ 282 00e9 D3       		.byte	-45
+ 283 00ea AC       		.byte	-84
+ 284 00eb 62       		.byte	98
+ 285 00ec 91       		.byte	-111
+ 286 00ed 95       		.byte	-107
+ 287 00ee E4       		.byte	-28
+ 288 00ef 79       		.byte	121
+ 289 00f0 E7       		.byte	-25
+ 290 00f1 C8       		.byte	-56
+ 291 00f2 37       		.byte	55
+ 292 00f3 6D       		.byte	109
+ 293 00f4 8D       		.byte	-115
+ 294 00f5 D5       		.byte	-43
+ 295 00f6 4E       		.byte	78
+ 296 00f7 A9       		.byte	-87
+ 297 00f8 6C       		.byte	108
+ 298 00f9 56       		.byte	86
+ 299 00fa F4       		.byte	-12
+ 300 00fb EA       		.byte	-22
+ 301 00fc 65       		.byte	101
+ 302 00fd 7A       		.byte	122
+ 303 00fe AE       		.byte	-82
+ 304 00ff 08       		.byte	8
+ 305 0100 BA       		.byte	-70
+ 306 0101 78       		.byte	120
+ 307 0102 25       		.byte	37
+ 308 0103 2E       		.byte	46
+ 309 0104 1C       		.byte	28
+ 310 0105 A6       		.byte	-90
+ 311 0106 B4       		.byte	-76
+ 312 0107 C6       		.byte	-58
+ 313 0108 E8       		.byte	-24
+ 314 0109 DD       		.byte	-35
+ 315 010a 74       		.byte	116
+ 316 010b 1F       		.byte	31
+ 317 010c 4B       		.byte	75
+ 318 010d BD       		.byte	-67
+ 319 010e 8B       		.byte	-117
+ 320 010f 8A       		.byte	-118
+ 321 0110 70       		.byte	112
+ 322 0111 3E       		.byte	62
+ 323 0112 B5       		.byte	-75
+ 324 0113 66       		.byte	102
+ 325 0114 48       		.byte	72
+
GAS LISTING /tmp/ccjbMjHD.s 			page 8
+
+
+ 326 0115 03       		.byte	3
+ 327 0116 F6       		.byte	-10
+ 328 0117 0E       		.byte	14
+ 329 0118 61       		.byte	97
+ 330 0119 35       		.byte	53
+ 331 011a 57       		.byte	87
+ 332 011b B9       		.byte	-71
+ 333 011c 86       		.byte	-122
+ 334 011d C1       		.byte	-63
+ 335 011e 1D       		.byte	29
+ 336 011f 9E       		.byte	-98
+ 337 0120 E1       		.byte	-31
+ 338 0121 F8       		.byte	-8
+ 339 0122 98       		.byte	-104
+ 340 0123 11       		.byte	17
+ 341 0124 69       		.byte	105
+ 342 0125 D9       		.byte	-39
+ 343 0126 8E       		.byte	-114
+ 344 0127 94       		.byte	-108
+ 345 0128 9B       		.byte	-101
+ 346 0129 1E       		.byte	30
+ 347 012a 87       		.byte	-121
+ 348 012b E9       		.byte	-23
+ 349 012c CE       		.byte	-50
+ 350 012d 55       		.byte	85
+ 351 012e 28       		.byte	40
+ 352 012f DF       		.byte	-33
+ 353 0130 8C       		.byte	-116
+ 354 0131 A1       		.byte	-95
+ 355 0132 89       		.byte	-119
+ 356 0133 0D       		.byte	13
+ 357 0134 BF       		.byte	-65
+ 358 0135 E6       		.byte	-26
+ 359 0136 42       		.byte	66
+ 360 0137 68       		.byte	104
+ 361 0138 41       		.byte	65
+ 362 0139 99       		.byte	-103
+ 363 013a 2D       		.byte	45
+ 364 013b 0F       		.byte	15
+ 365 013c B0       		.byte	-80
+ 366 013d 54       		.byte	84
+ 367 013e BB       		.byte	-69
+ 368 013f 16       		.byte	22
+ 369              		.align 32
+ 370              		.type	KAESBlockCipherVecRegRijndaelSBoxV, @object
+ 371              		.size	KAESBlockCipherVecRegRijndaelSBoxV, 256
+ 372              	KAESBlockCipherVecRegRijndaelSBoxV:
+ 373 0140 63       		.byte	99
+ 374 0141 7C       		.byte	124
+ 375 0142 77       		.byte	119
+ 376 0143 7B       		.byte	123
+ 377 0144 F2       		.byte	-14
+ 378 0145 6B       		.byte	107
+ 379 0146 6F       		.byte	111
+ 380 0147 C5       		.byte	-59
+ 381 0148 30       		.byte	48
+ 382 0149 01       		.byte	1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 9
+
+
+ 383 014a 67       		.byte	103
+ 384 014b 2B       		.byte	43
+ 385 014c FE       		.byte	-2
+ 386 014d D7       		.byte	-41
+ 387 014e AB       		.byte	-85
+ 388 014f 76       		.byte	118
+ 389 0150 CA       		.byte	-54
+ 390 0151 82       		.byte	-126
+ 391 0152 C9       		.byte	-55
+ 392 0153 7D       		.byte	125
+ 393 0154 FA       		.byte	-6
+ 394 0155 59       		.byte	89
+ 395 0156 47       		.byte	71
+ 396 0157 F0       		.byte	-16
+ 397 0158 AD       		.byte	-83
+ 398 0159 D4       		.byte	-44
+ 399 015a A2       		.byte	-94
+ 400 015b AF       		.byte	-81
+ 401 015c 9C       		.byte	-100
+ 402 015d A4       		.byte	-92
+ 403 015e 72       		.byte	114
+ 404 015f C0       		.byte	-64
+ 405 0160 B7       		.byte	-73
+ 406 0161 FD       		.byte	-3
+ 407 0162 93       		.byte	-109
+ 408 0163 26       		.byte	38
+ 409 0164 36       		.byte	54
+ 410 0165 3F       		.byte	63
+ 411 0166 F7       		.byte	-9
+ 412 0167 CC       		.byte	-52
+ 413 0168 34       		.byte	52
+ 414 0169 A5       		.byte	-91
+ 415 016a E5       		.byte	-27
+ 416 016b F1       		.byte	-15
+ 417 016c 71       		.byte	113
+ 418 016d D8       		.byte	-40
+ 419 016e 31       		.byte	49
+ 420 016f 15       		.byte	21
+ 421 0170 04       		.byte	4
+ 422 0171 C7       		.byte	-57
+ 423 0172 23       		.byte	35
+ 424 0173 C3       		.byte	-61
+ 425 0174 18       		.byte	24
+ 426 0175 96       		.byte	-106
+ 427 0176 05       		.byte	5
+ 428 0177 9A       		.byte	-102
+ 429 0178 07       		.byte	7
+ 430 0179 12       		.byte	18
+ 431 017a 80       		.byte	-128
+ 432 017b E2       		.byte	-30
+ 433 017c EB       		.byte	-21
+ 434 017d 27       		.byte	39
+ 435 017e B2       		.byte	-78
+ 436 017f 75       		.byte	117
+ 437 0180 09       		.byte	9
+ 438 0181 83       		.byte	-125
+ 439 0182 2C       		.byte	44
+
GAS LISTING /tmp/ccjbMjHD.s 			page 10
+
+
+ 440 0183 1A       		.byte	26
+ 441 0184 1B       		.byte	27
+ 442 0185 6E       		.byte	110
+ 443 0186 5A       		.byte	90
+ 444 0187 A0       		.byte	-96
+ 445 0188 52       		.byte	82
+ 446 0189 3B       		.byte	59
+ 447 018a D6       		.byte	-42
+ 448 018b B3       		.byte	-77
+ 449 018c 29       		.byte	41
+ 450 018d E3       		.byte	-29
+ 451 018e 2F       		.byte	47
+ 452 018f 84       		.byte	-124
+ 453 0190 53       		.byte	83
+ 454 0191 D1       		.byte	-47
+ 455 0192 00       		.byte	0
+ 456 0193 ED       		.byte	-19
+ 457 0194 20       		.byte	32
+ 458 0195 FC       		.byte	-4
+ 459 0196 B1       		.byte	-79
+ 460 0197 5B       		.byte	91
+ 461 0198 6A       		.byte	106
+ 462 0199 CB       		.byte	-53
+ 463 019a BE       		.byte	-66
+ 464 019b 39       		.byte	57
+ 465 019c 4A       		.byte	74
+ 466 019d 4C       		.byte	76
+ 467 019e 58       		.byte	88
+ 468 019f CF       		.byte	-49
+ 469 01a0 D0       		.byte	-48
+ 470 01a1 EF       		.byte	-17
+ 471 01a2 AA       		.byte	-86
+ 472 01a3 FB       		.byte	-5
+ 473 01a4 43       		.byte	67
+ 474 01a5 4D       		.byte	77
+ 475 01a6 33       		.byte	51
+ 476 01a7 85       		.byte	-123
+ 477 01a8 45       		.byte	69
+ 478 01a9 F9       		.byte	-7
+ 479 01aa 02       		.byte	2
+ 480 01ab 7F       		.byte	127
+ 481 01ac 50       		.byte	80
+ 482 01ad 3C       		.byte	60
+ 483 01ae 9F       		.byte	-97
+ 484 01af A8       		.byte	-88
+ 485 01b0 51       		.byte	81
+ 486 01b1 A3       		.byte	-93
+ 487 01b2 40       		.byte	64
+ 488 01b3 8F       		.byte	-113
+ 489 01b4 92       		.byte	-110
+ 490 01b5 9D       		.byte	-99
+ 491 01b6 38       		.byte	56
+ 492 01b7 F5       		.byte	-11
+ 493 01b8 BC       		.byte	-68
+ 494 01b9 B6       		.byte	-74
+ 495 01ba DA       		.byte	-38
+ 496 01bb 21       		.byte	33
+
GAS LISTING /tmp/ccjbMjHD.s 			page 11
+
+
+ 497 01bc 10       		.byte	16
+ 498 01bd FF       		.byte	-1
+ 499 01be F3       		.byte	-13
+ 500 01bf D2       		.byte	-46
+ 501 01c0 CD       		.byte	-51
+ 502 01c1 0C       		.byte	12
+ 503 01c2 13       		.byte	19
+ 504 01c3 EC       		.byte	-20
+ 505 01c4 5F       		.byte	95
+ 506 01c5 97       		.byte	-105
+ 507 01c6 44       		.byte	68
+ 508 01c7 17       		.byte	23
+ 509 01c8 C4       		.byte	-60
+ 510 01c9 A7       		.byte	-89
+ 511 01ca 7E       		.byte	126
+ 512 01cb 3D       		.byte	61
+ 513 01cc 64       		.byte	100
+ 514 01cd 5D       		.byte	93
+ 515 01ce 19       		.byte	25
+ 516 01cf 73       		.byte	115
+ 517 01d0 60       		.byte	96
+ 518 01d1 81       		.byte	-127
+ 519 01d2 4F       		.byte	79
+ 520 01d3 DC       		.byte	-36
+ 521 01d4 22       		.byte	34
+ 522 01d5 2A       		.byte	42
+ 523 01d6 90       		.byte	-112
+ 524 01d7 88       		.byte	-120
+ 525 01d8 46       		.byte	70
+ 526 01d9 EE       		.byte	-18
+ 527 01da B8       		.byte	-72
+ 528 01db 14       		.byte	20
+ 529 01dc DE       		.byte	-34
+ 530 01dd 5E       		.byte	94
+ 531 01de 0B       		.byte	11
+ 532 01df DB       		.byte	-37
+ 533 01e0 E0       		.byte	-32
+ 534 01e1 32       		.byte	50
+ 535 01e2 3A       		.byte	58
+ 536 01e3 0A       		.byte	10
+ 537 01e4 49       		.byte	73
+ 538 01e5 06       		.byte	6
+ 539 01e6 24       		.byte	36
+ 540 01e7 5C       		.byte	92
+ 541 01e8 C2       		.byte	-62
+ 542 01e9 D3       		.byte	-45
+ 543 01ea AC       		.byte	-84
+ 544 01eb 62       		.byte	98
+ 545 01ec 91       		.byte	-111
+ 546 01ed 95       		.byte	-107
+ 547 01ee E4       		.byte	-28
+ 548 01ef 79       		.byte	121
+ 549 01f0 E7       		.byte	-25
+ 550 01f1 C8       		.byte	-56
+ 551 01f2 37       		.byte	55
+ 552 01f3 6D       		.byte	109
+ 553 01f4 8D       		.byte	-115
+
GAS LISTING /tmp/ccjbMjHD.s 			page 12
+
+
+ 554 01f5 D5       		.byte	-43
+ 555 01f6 4E       		.byte	78
+ 556 01f7 A9       		.byte	-87
+ 557 01f8 6C       		.byte	108
+ 558 01f9 56       		.byte	86
+ 559 01fa F4       		.byte	-12
+ 560 01fb EA       		.byte	-22
+ 561 01fc 65       		.byte	101
+ 562 01fd 7A       		.byte	122
+ 563 01fe AE       		.byte	-82
+ 564 01ff 08       		.byte	8
+ 565 0200 BA       		.byte	-70
+ 566 0201 78       		.byte	120
+ 567 0202 25       		.byte	37
+ 568 0203 2E       		.byte	46
+ 569 0204 1C       		.byte	28
+ 570 0205 A6       		.byte	-90
+ 571 0206 B4       		.byte	-76
+ 572 0207 C6       		.byte	-58
+ 573 0208 E8       		.byte	-24
+ 574 0209 DD       		.byte	-35
+ 575 020a 74       		.byte	116
+ 576 020b 1F       		.byte	31
+ 577 020c 4B       		.byte	75
+ 578 020d BD       		.byte	-67
+ 579 020e 8B       		.byte	-117
+ 580 020f 8A       		.byte	-118
+ 581 0210 70       		.byte	112
+ 582 0211 3E       		.byte	62
+ 583 0212 B5       		.byte	-75
+ 584 0213 66       		.byte	102
+ 585 0214 48       		.byte	72
+ 586 0215 03       		.byte	3
+ 587 0216 F6       		.byte	-10
+ 588 0217 0E       		.byte	14
+ 589 0218 61       		.byte	97
+ 590 0219 35       		.byte	53
+ 591 021a 57       		.byte	87
+ 592 021b B9       		.byte	-71
+ 593 021c 86       		.byte	-122
+ 594 021d C1       		.byte	-63
+ 595 021e 1D       		.byte	29
+ 596 021f 9E       		.byte	-98
+ 597 0220 E1       		.byte	-31
+ 598 0221 F8       		.byte	-8
+ 599 0222 98       		.byte	-104
+ 600 0223 11       		.byte	17
+ 601 0224 69       		.byte	105
+ 602 0225 D9       		.byte	-39
+ 603 0226 8E       		.byte	-114
+ 604 0227 94       		.byte	-108
+ 605 0228 9B       		.byte	-101
+ 606 0229 1E       		.byte	30
+ 607 022a 87       		.byte	-121
+ 608 022b E9       		.byte	-23
+ 609 022c CE       		.byte	-50
+ 610 022d 55       		.byte	85
+
GAS LISTING /tmp/ccjbMjHD.s 			page 13
+
+
+ 611 022e 28       		.byte	40
+ 612 022f DF       		.byte	-33
+ 613 0230 8C       		.byte	-116
+ 614 0231 A1       		.byte	-95
+ 615 0232 89       		.byte	-119
+ 616 0233 0D       		.byte	13
+ 617 0234 BF       		.byte	-65
+ 618 0235 E6       		.byte	-26
+ 619 0236 42       		.byte	66
+ 620 0237 68       		.byte	104
+ 621 0238 41       		.byte	65
+ 622 0239 99       		.byte	-103
+ 623 023a 2D       		.byte	45
+ 624 023b 0F       		.byte	15
+ 625 023c B0       		.byte	-80
+ 626 023d 54       		.byte	84
+ 627 023e BB       		.byte	-69
+ 628 023f 16       		.byte	22
+ 629              		.align 32
+ 630              		.type	KAESBlockCipherVecRegRijndaelInvSBoxV, @object
+ 631              		.size	KAESBlockCipherVecRegRijndaelInvSBoxV, 256
+ 632              	KAESBlockCipherVecRegRijndaelInvSBoxV:
+ 633 0240 52       		.byte	82
+ 634 0241 09       		.byte	9
+ 635 0242 6A       		.byte	106
+ 636 0243 D5       		.byte	-43
+ 637 0244 30       		.byte	48
+ 638 0245 36       		.byte	54
+ 639 0246 A5       		.byte	-91
+ 640 0247 38       		.byte	56
+ 641 0248 BF       		.byte	-65
+ 642 0249 40       		.byte	64
+ 643 024a A3       		.byte	-93
+ 644 024b 9E       		.byte	-98
+ 645 024c 81       		.byte	-127
+ 646 024d F3       		.byte	-13
+ 647 024e D7       		.byte	-41
+ 648 024f FB       		.byte	-5
+ 649 0250 7C       		.byte	124
+ 650 0251 E3       		.byte	-29
+ 651 0252 39       		.byte	57
+ 652 0253 82       		.byte	-126
+ 653 0254 9B       		.byte	-101
+ 654 0255 2F       		.byte	47
+ 655 0256 FF       		.byte	-1
+ 656 0257 87       		.byte	-121
+ 657 0258 34       		.byte	52
+ 658 0259 8E       		.byte	-114
+ 659 025a 43       		.byte	67
+ 660 025b 44       		.byte	68
+ 661 025c C4       		.byte	-60
+ 662 025d DE       		.byte	-34
+ 663 025e E9       		.byte	-23
+ 664 025f CB       		.byte	-53
+ 665 0260 54       		.byte	84
+ 666 0261 7B       		.byte	123
+ 667 0262 94       		.byte	-108
+
GAS LISTING /tmp/ccjbMjHD.s 			page 14
+
+
+ 668 0263 32       		.byte	50
+ 669 0264 A6       		.byte	-90
+ 670 0265 C2       		.byte	-62
+ 671 0266 23       		.byte	35
+ 672 0267 3D       		.byte	61
+ 673 0268 EE       		.byte	-18
+ 674 0269 4C       		.byte	76
+ 675 026a 95       		.byte	-107
+ 676 026b 0B       		.byte	11
+ 677 026c 42       		.byte	66
+ 678 026d FA       		.byte	-6
+ 679 026e C3       		.byte	-61
+ 680 026f 4E       		.byte	78
+ 681 0270 08       		.byte	8
+ 682 0271 2E       		.byte	46
+ 683 0272 A1       		.byte	-95
+ 684 0273 66       		.byte	102
+ 685 0274 28       		.byte	40
+ 686 0275 D9       		.byte	-39
+ 687 0276 24       		.byte	36
+ 688 0277 B2       		.byte	-78
+ 689 0278 76       		.byte	118
+ 690 0279 5B       		.byte	91
+ 691 027a A2       		.byte	-94
+ 692 027b 49       		.byte	73
+ 693 027c 6D       		.byte	109
+ 694 027d 8B       		.byte	-117
+ 695 027e D1       		.byte	-47
+ 696 027f 25       		.byte	37
+ 697 0280 72       		.byte	114
+ 698 0281 F8       		.byte	-8
+ 699 0282 F6       		.byte	-10
+ 700 0283 64       		.byte	100
+ 701 0284 86       		.byte	-122
+ 702 0285 68       		.byte	104
+ 703 0286 98       		.byte	-104
+ 704 0287 16       		.byte	22
+ 705 0288 D4       		.byte	-44
+ 706 0289 A4       		.byte	-92
+ 707 028a 5C       		.byte	92
+ 708 028b CC       		.byte	-52
+ 709 028c 5D       		.byte	93
+ 710 028d 65       		.byte	101
+ 711 028e B6       		.byte	-74
+ 712 028f 92       		.byte	-110
+ 713 0290 6C       		.byte	108
+ 714 0291 70       		.byte	112
+ 715 0292 48       		.byte	72
+ 716 0293 50       		.byte	80
+ 717 0294 FD       		.byte	-3
+ 718 0295 ED       		.byte	-19
+ 719 0296 B9       		.byte	-71
+ 720 0297 DA       		.byte	-38
+ 721 0298 5E       		.byte	94
+ 722 0299 15       		.byte	21
+ 723 029a 46       		.byte	70
+ 724 029b 57       		.byte	87
+
GAS LISTING /tmp/ccjbMjHD.s 			page 15
+
+
+ 725 029c A7       		.byte	-89
+ 726 029d 8D       		.byte	-115
+ 727 029e 9D       		.byte	-99
+ 728 029f 84       		.byte	-124
+ 729 02a0 90       		.byte	-112
+ 730 02a1 D8       		.byte	-40
+ 731 02a2 AB       		.byte	-85
+ 732 02a3 00       		.byte	0
+ 733 02a4 8C       		.byte	-116
+ 734 02a5 BC       		.byte	-68
+ 735 02a6 D3       		.byte	-45
+ 736 02a7 0A       		.byte	10
+ 737 02a8 F7       		.byte	-9
+ 738 02a9 E4       		.byte	-28
+ 739 02aa 58       		.byte	88
+ 740 02ab 05       		.byte	5
+ 741 02ac B8       		.byte	-72
+ 742 02ad B3       		.byte	-77
+ 743 02ae 45       		.byte	69
+ 744 02af 06       		.byte	6
+ 745 02b0 D0       		.byte	-48
+ 746 02b1 2C       		.byte	44
+ 747 02b2 1E       		.byte	30
+ 748 02b3 8F       		.byte	-113
+ 749 02b4 CA       		.byte	-54
+ 750 02b5 3F       		.byte	63
+ 751 02b6 0F       		.byte	15
+ 752 02b7 02       		.byte	2
+ 753 02b8 C1       		.byte	-63
+ 754 02b9 AF       		.byte	-81
+ 755 02ba BD       		.byte	-67
+ 756 02bb 03       		.byte	3
+ 757 02bc 01       		.byte	1
+ 758 02bd 13       		.byte	19
+ 759 02be 8A       		.byte	-118
+ 760 02bf 6B       		.byte	107
+ 761 02c0 3A       		.byte	58
+ 762 02c1 91       		.byte	-111
+ 763 02c2 11       		.byte	17
+ 764 02c3 41       		.byte	65
+ 765 02c4 4F       		.byte	79
+ 766 02c5 67       		.byte	103
+ 767 02c6 DC       		.byte	-36
+ 768 02c7 EA       		.byte	-22
+ 769 02c8 97       		.byte	-105
+ 770 02c9 F2       		.byte	-14
+ 771 02ca CF       		.byte	-49
+ 772 02cb CE       		.byte	-50
+ 773 02cc F0       		.byte	-16
+ 774 02cd B4       		.byte	-76
+ 775 02ce E6       		.byte	-26
+ 776 02cf 73       		.byte	115
+ 777 02d0 96       		.byte	-106
+ 778 02d1 AC       		.byte	-84
+ 779 02d2 74       		.byte	116
+ 780 02d3 22       		.byte	34
+ 781 02d4 E7       		.byte	-25
+
GAS LISTING /tmp/ccjbMjHD.s 			page 16
+
+
+ 782 02d5 AD       		.byte	-83
+ 783 02d6 35       		.byte	53
+ 784 02d7 85       		.byte	-123
+ 785 02d8 E2       		.byte	-30
+ 786 02d9 F9       		.byte	-7
+ 787 02da 37       		.byte	55
+ 788 02db E8       		.byte	-24
+ 789 02dc 1C       		.byte	28
+ 790 02dd 75       		.byte	117
+ 791 02de DF       		.byte	-33
+ 792 02df 6E       		.byte	110
+ 793 02e0 47       		.byte	71
+ 794 02e1 F1       		.byte	-15
+ 795 02e2 1A       		.byte	26
+ 796 02e3 71       		.byte	113
+ 797 02e4 1D       		.byte	29
+ 798 02e5 29       		.byte	41
+ 799 02e6 C5       		.byte	-59
+ 800 02e7 89       		.byte	-119
+ 801 02e8 6F       		.byte	111
+ 802 02e9 B7       		.byte	-73
+ 803 02ea 62       		.byte	98
+ 804 02eb 0E       		.byte	14
+ 805 02ec AA       		.byte	-86
+ 806 02ed 18       		.byte	24
+ 807 02ee BE       		.byte	-66
+ 808 02ef 1B       		.byte	27
+ 809 02f0 FC       		.byte	-4
+ 810 02f1 56       		.byte	86
+ 811 02f2 3E       		.byte	62
+ 812 02f3 4B       		.byte	75
+ 813 02f4 C6       		.byte	-58
+ 814 02f5 D2       		.byte	-46
+ 815 02f6 79       		.byte	121
+ 816 02f7 20       		.byte	32
+ 817 02f8 9A       		.byte	-102
+ 818 02f9 DB       		.byte	-37
+ 819 02fa C0       		.byte	-64
+ 820 02fb FE       		.byte	-2
+ 821 02fc 78       		.byte	120
+ 822 02fd CD       		.byte	-51
+ 823 02fe 5A       		.byte	90
+ 824 02ff F4       		.byte	-12
+ 825 0300 1F       		.byte	31
+ 826 0301 DD       		.byte	-35
+ 827 0302 A8       		.byte	-88
+ 828 0303 33       		.byte	51
+ 829 0304 88       		.byte	-120
+ 830 0305 07       		.byte	7
+ 831 0306 C7       		.byte	-57
+ 832 0307 31       		.byte	49
+ 833 0308 B1       		.byte	-79
+ 834 0309 12       		.byte	18
+ 835 030a 10       		.byte	16
+ 836 030b 59       		.byte	89
+ 837 030c 27       		.byte	39
+ 838 030d 80       		.byte	-128
+
GAS LISTING /tmp/ccjbMjHD.s 			page 17
+
+
+ 839 030e EC       		.byte	-20
+ 840 030f 5F       		.byte	95
+ 841 0310 60       		.byte	96
+ 842 0311 51       		.byte	81
+ 843 0312 7F       		.byte	127
+ 844 0313 A9       		.byte	-87
+ 845 0314 19       		.byte	25
+ 846 0315 B5       		.byte	-75
+ 847 0316 4A       		.byte	74
+ 848 0317 0D       		.byte	13
+ 849 0318 2D       		.byte	45
+ 850 0319 E5       		.byte	-27
+ 851 031a 7A       		.byte	122
+ 852 031b 9F       		.byte	-97
+ 853 031c 93       		.byte	-109
+ 854 031d C9       		.byte	-55
+ 855 031e 9C       		.byte	-100
+ 856 031f EF       		.byte	-17
+ 857 0320 A0       		.byte	-96
+ 858 0321 E0       		.byte	-32
+ 859 0322 3B       		.byte	59
+ 860 0323 4D       		.byte	77
+ 861 0324 AE       		.byte	-82
+ 862 0325 2A       		.byte	42
+ 863 0326 F5       		.byte	-11
+ 864 0327 B0       		.byte	-80
+ 865 0328 C8       		.byte	-56
+ 866 0329 EB       		.byte	-21
+ 867 032a BB       		.byte	-69
+ 868 032b 3C       		.byte	60
+ 869 032c 83       		.byte	-125
+ 870 032d 53       		.byte	83
+ 871 032e 99       		.byte	-103
+ 872 032f 61       		.byte	97
+ 873 0330 17       		.byte	23
+ 874 0331 2B       		.byte	43
+ 875 0332 04       		.byte	4
+ 876 0333 7E       		.byte	126
+ 877 0334 BA       		.byte	-70
+ 878 0335 77       		.byte	119
+ 879 0336 D6       		.byte	-42
+ 880 0337 26       		.byte	38
+ 881 0338 E1       		.byte	-31
+ 882 0339 69       		.byte	105
+ 883 033a 14       		.byte	20
+ 884 033b 63       		.byte	99
+ 885 033c 55       		.byte	85
+ 886 033d 21       		.byte	33
+ 887 033e 0C       		.byte	12
+ 888 033f 7D       		.byte	125
+ 889              		.align 16
+ 890              		.type	lo_filter, @object
+ 891              		.size	lo_filter, 16
+ 892              	lo_filter:
+ 893 0340 00       		.byte	0
+ 894 0341 FF       		.byte	-1
+ 895 0342 FF       		.byte	-1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 18
+
+
+ 896 0343 FF       		.byte	-1
+ 897 0344 FF       		.byte	-1
+ 898 0345 FF       		.byte	-1
+ 899 0346 FF       		.byte	-1
+ 900 0347 FF       		.byte	-1
+ 901 0348 FF       		.byte	-1
+ 902 0349 FF       		.byte	-1
+ 903 034a FF       		.byte	-1
+ 904 034b FF       		.byte	-1
+ 905 034c FF       		.byte	-1
+ 906 034d FF       		.byte	-1
+ 907 034e FF       		.byte	-1
+ 908 034f FF       		.byte	-1
+ 909              		.align 16
+ 910              		.type	FF_tab, @object
+ 911              		.size	FF_tab, 16
+ 912              	FF_tab:
+ 913 0350 00       		.byte	0
+ 914 0351 1B       		.byte	27
+ 915 0352 36       		.byte	54
+ 916 0353 2D       		.byte	45
+ 917 0354 6C       		.byte	108
+ 918 0355 77       		.byte	119
+ 919 0356 5A       		.byte	90
+ 920 0357 41       		.byte	65
+ 921 0358 00       		.byte	0
+ 922 0359 00       		.byte	0
+ 923 035a 00       		.byte	0
+ 924 035b 00       		.byte	0
+ 925 035c 00       		.byte	0
+ 926 035d 00       		.byte	0
+ 927 035e 00       		.byte	0
+ 928 035f 00       		.byte	0
+ 929              		.data
+ 930              		.type	KAESBlockCipherVecRegFFtable, @object
+ 931              		.size	KAESBlockCipherVecRegFFtable, 8
+ 932              	KAESBlockCipherVecRegFFtable:
+ 933 0000 00       		.byte	0
+ 934 0001 1B       		.byte	27
+ 935 0002 36       		.byte	54
+ 936 0003 2D       		.byte	45
+ 937 0004 6C       		.byte	108
+ 938 0005 77       		.byte	119
+ 939 0006 5A       		.byte	90
+ 940 0007 41       		.byte	65
+ 941              		.section	.rodata
+ 942              		.align 32
+ 943              		.type	KAESBlockCipherVecRegRcon, @object
+ 944              		.size	KAESBlockCipherVecRegRcon, 40
+ 945              	KAESBlockCipherVecRegRcon:
+ 946 0360 01000000 		.long	1
+ 947 0364 02000000 		.long	2
+ 948 0368 04000000 		.long	4
+ 949 036c 08000000 		.long	8
+ 950 0370 10000000 		.long	16
+ 951 0374 20000000 		.long	32
+ 952 0378 40000000 		.long	64
+
GAS LISTING /tmp/ccjbMjHD.s 			page 19
+
+
+ 953 037c 80000000 		.long	128
+ 954 0380 1B000000 		.long	27
+ 955 0384 36000000 		.long	54
+ 956              	.LC0:
+ 957 0388 53756242 		.string	"SubBytes"
+ 957      79746573 
+ 957      00
+ 958              	.LC1:
+ 959 0391 25733A09 		.string	"%s:\t%0.8x %0.8x %0.8x %0.8x\n"
+ 959      25302E38 
+ 959      78202530 
+ 959      2E387820 
+ 959      25302E38 
+ 960              	.LC2:
+ 961 03ae 526F7442 		.string	"RotBytesLeft"
+ 961      79746573 
+ 961      4C656674 
+ 961      00
+ 962              	.LC3:
+ 963 03bb 56656358 		.string	"VecXor"
+ 963      6F7200
+ 964              	.LC4:
+ 965 03c2 53746174 		.string	"StateDupColumn3"
+ 965      65447570 
+ 965      436F6C75 
+ 965      6D6E3300 
+ 966              		.text
+ 967              		.type	KAESBlockCipherVecRegKeyExpansion128, @function
+ 968              	KAESBlockCipherVecRegKeyExpansion128:
+ 969              	.LFB645:
+ 970              		.file 2 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c"
+   1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*===========================================================================
+   2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+   3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *                            PUBLIC DOMAIN NOTICE
+   4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *               National Center for Biotechnology Information
+   5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+   6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  This software/database is a "United States Government Work" under the
+   7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  terms of the United States Copyright Act.  It was written as part of
+   8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  the author's official duties as a United States Government employee and
+   9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  thus cannot be copyrighted.  This software/database is freely available
+  10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  to the public for use. The National Library of Medicine and the U.S.
+  11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  Government have not placed any restriction on its use or reproduction.
+  12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  Although all reasonable efforts have been taken to ensure the accuracy
+  14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  and reliability of the software and data, the NLM and the U.S.
+  15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  Government do not and cannot warrant the performance or results that
+  16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  may be obtained by using this software or data. The NLM and the U.S.
+  17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  Government disclaim all warranties, express or implied, including
+  18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  warranties of performance, merchantability or fitness for any particular
+  19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  purpose.
+  20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  Please cite the author in any work or product based on this material.
+  22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * ===========================================================================
+  24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+  25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 20
+
+
+  27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <krypto/extern.h>
+  28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "ncbi-priv.h"
+  30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "aes-ncbi-priv.h"
+  31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "cipher-priv.h"
+  32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "blockcipher-priv.h"
+  33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <klib/debug.h>
+  35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <klib/out.h>
+  36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <klib/rc.h>
+  37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <byteswap.h>
+  40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <string.h>
+  41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <stdint.h>
+  42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <stdlib.h>
+  43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <assert.h>
+  44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <sysalloc.h>
+  45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+  47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <cpuid.h>
+  48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+  49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VECREG
+  51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include <v128.h>
+  52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+  53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+  55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * This implements the AES cipher as defined by FIPS-197 from NIST
+  56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  
+  57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Notes on implmentation:
+  58:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  59:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * NOTE:
+  60:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Byte ordering in AES is not critical but unllike the original implmentation
+  61:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * bytes are not re-ordered to a big endian order upon reading them in and this
+  62:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * code will expect to run on an Intel/AMD type processor and might have issues
+  63:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * on some big endian processors.
+  64:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  65:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * NOTE:
+  66:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Many functions are written as static inline functions to
+  67:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * facilitate GCC type assembly language optimization on various processors
+  68:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  69:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * NOTE:
+  70:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * This implements the Equivalent Inverse Cipher not the Inverse Cipher.  In
+  71:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * general functions will match those defined in the FIPS-197 document where they
+  72:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * do not get optimized away for Intel/AMD XMM registers and AES-NI instructions.
+  73:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+  74:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * NOTE:
+  75:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * C-99 types are used for specific sized types.  An unaddornded unsigned type
+  76:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * is used for many index type variables to allow the compiler choice in
+  77:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * size where size does not matter very much.  As these index variables do
+  78:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * not go above 16 any size would do but the compiler can choose the size most
+  79:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * suited for array subscripting.
+  80:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+  81:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  82:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+  83:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_00 =  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
GAS LISTING /tmp/ccjbMjHD.s 			page 21
+
+
+  84:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+  85:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  86:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+  87:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_01 =  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+  88:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                       0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+  89:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  90:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+  91:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_0F =  { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
+  92:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                       0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F };
+  93:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  94:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+  95:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec vec_10 =  { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+  96:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                       0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 };
+  97:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  98:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+  99:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * These functions implment the Advanced Encryption Standard AES as defined
+ 102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * in the FIPS (Federal Information Processing Standars Publication 197
+ 103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Of Nevember 26, 2001.
+ 104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.1
+ 108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Read a blocks worth of bytes into an CipherVec
+ 112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * With vector registers it is a single instruction, without them it
+ 114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * is a memmove call
+ 115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateIn) (const void * ain)
+ 118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateIn) (const void * ain)
+ 122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec vec;
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __asm__ (
+ 127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         "movdqu (%[a]),%[s]" : [s] "=x" (vec) : [a] "D" (ain)
+ 128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         );
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vec;
+ 130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     memmove (&u.bytes, ain, sizeof (u));
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 22
+
+
+ 141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Write a block's worth of bytes out from an CipherVec
+ 143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * With vector registers it is a single instruction, without them it
+ 145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * is a memmove call
+ 146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(StateOut) (const CipherVec vec, void * rout)
+ 149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(StateOut) (const CipherVec vec, void * rout)
+ 153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec rvec = vec;
+ 157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __asm__ (
+ 158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         "movdqu %[s],(%[a])" : : [s] "x" (rvec), [a] "D" (rout)
+ 159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         );
+ 160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     memmove (rout, &vec, sizeof (vec));
+ 164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecXor) (CipherVec v1, CipherVec v2)
+ 171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecXor) (CipherVec v1, CipherVec v2)
+ 175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] ^= u2.columns[ix];
+ 190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 23
+
+
+ 198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAnd) (CipherVec v1, CipherVec v2)
+ 199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAnd) (CipherVec v1, CipherVec v2)
+ 203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] &= u2.columns[ix];
+ 218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecOr) (CipherVec v1, CipherVec v2)
+ 227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecOr) (CipherVec v1, CipherVec v2)
+ 231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] |= u2.columns[ix];
+ 246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAdd) (CipherVec v1, CipherVec v2)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 24
+
+
+ 255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecAdd) (CipherVec v1, CipherVec v2)
+ 259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 + v2;
+ 263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] += u2.columns[ix];
+ 274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSub) (CipherVec v1, CipherVec v2)
+ 283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSub) (CipherVec v1, CipherVec v2)
+ 287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] -= u2.columns[ix];
+ 302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecMul) (CipherVec v1, CipherVec v2)
+ 311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+
GAS LISTING /tmp/ccjbMjHD.s 			page 25
+
+
+ 312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecMul) (CipherVec v1, CipherVec v2)
+ 315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 * v2;
+ 319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] *= u2.columns[ix];
+ 330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecDiv) (CipherVec v1, CipherVec v2)
+ 339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecDiv) (CipherVec v1, CipherVec v2)
+ 343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+ 345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 / v2;
+ 347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u1, u2; /* state and key not countries :) */
+ 351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u1.state = v1;
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u2.state = v2;
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < AES_Nb; ++ix)
+ 357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u1.columns[ix] /= u2.columns[ix];
+ 358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u1.state;
+ 360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(PackShuffleBytes) (CipherVec dest, CipherVec mask)
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 26
+
+
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(PackShuffleBytes) (CipherVec dest, CipherVec mask)
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_PSHUFB128 (dest, mask);
+ 374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u out, in, gate;
+ 378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = dest;
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     gate.state = mask;
+ 382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof dest; ++ix)
+ 384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if (gate.bytes[ix] & 0x80)
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = 0;
+ 387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         else
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             out.bytes[ix] = in.bytes[gate.bytes[ix] & 0x0F];
+ 389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+ 390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+ 392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSLLBI) (CipherVec v, const int k)
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSLLBI) (CipherVec v, const int k)
+ 403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVec sl_mask [9] = 
+ 406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+ 407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
+ 409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
+ 410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE },
+ 411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
+ 412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC },
+ 413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8,
+ 414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8 },
+ 415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0 },
+ 417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0 },
+ 419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
+ 420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0 },
+ 421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 },
+ 423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ 425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         };
+
GAS LISTING /tmp/ccjbMjHD.s 			page 27
+
+
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec vv = v;
+ 427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     assert (k <= 8);
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("mask", sl_mask[k]); */
+ 432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("v 1", vv); */
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = op_PSLLDI128 (vv, k);
+ 434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("v 2", vv); */
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("v 3", vv); */
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vv;
+ 438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u vv; /* state and key not countries :) */
+ 442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv.state = v;
+ 445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (v); ++ix)
+ 447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+ 448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         KOutMsg ("SLLBI %d %x ", k, vv.bytes[ix]);
+ 449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         vv.bytes[ix] <<= k;
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         KOutMsg ("%x\n", vv.bytes[ix]);
+ 451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+ 452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vv.state;
+ 453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSRLBI) (CipherVec v, const int k)
+ 460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(VecSRLBI) (CipherVec v, const int k)
+ 464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVec sr_mask [9] = 
+ 467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
+ 471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F },
+ 472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F },
+ 474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
+ 475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F },
+ 476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
+ 477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F },
+ 478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07 },
+ 480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+ 481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 },
+ 482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+
GAS LISTING /tmp/ccjbMjHD.s 			page 28
+
+
+ 483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 },
+ 484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****               0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
+ 486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         };
+ 487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = op_PSRLDI128 (v, k);
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v;
+ 491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u vv; /* state and key not countries :) */
+ 495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv.state = v;
+ 498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (v); ++ix)
+ 500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         KOutMsg ("SRLBI %d %x ", k, vv.bytes[ix]);
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         vv.bytes[ix] >>= k;
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         KOutMsg ("%x\n", vv.bytes[ix]);
+ 504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+ 505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vv.state;
+ 506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SetColumn) (CipherVec state, AESWord column, const int which)
+ 513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 514:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SetColumn) (CipherVec state, AESWord column, const int which)
+ 517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [which] = column;
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = u.state;
+ 525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.1.4
+ 532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * The AddRoundKey transformation is a sinple exclusive or of all 128 bits
+ 534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * in the current block against a round key.  This operation is used in all
+ 535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Cipher and EqInvCipher rounds
+ 536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * With vector types it is a single operation that with vector registers is
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * a single op-code.
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+
GAS LISTING /tmp/ccjbMjHD.s 			page 29
+
+
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AddRoundKey) (CipherVec state, CipherVec round_key)
+ 542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AddRoundKey) (CipherVec state, CipherVec round_key)
+ 546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(VecXor) (state, round_key);
+ 548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.1.2
+ 553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS 197 describes the state in column major format
+ 555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * while C and assembly programmers tend to think in row major
+ 556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * The byte order is 0,1,2,3,,...F as shown in the first diagram.
+ 557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *  ShiftRows() is defined as leaving this state
+ 559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 0 | 4 | 8 | C |     | 0 | 4 | 8 | C |
+ 561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 1 | 5 | 9 | D |     | 5 | 9 | D | 1 |
+ 563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 2 | 6 | A | E |     | A | E | 2 | 6 |
+ 565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 3 | 7 | B | F |     | F | 3 | 7 | B |
+ 567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftRows) (CipherVec state)
+ 571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftRows) (CipherVec state)
+ 575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec ShiftRowTable
+ 578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /*   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
+ 579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     = {  0,  5, 10, 15,  4,  9, 14,  3,  8, 13,  2,  7, 12,  1,  6, 11 };
+ 580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.3.1
+ 588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * InvShiftRows() is defined as leaving this state
+ 590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 0 | 4 | 8 | C |     | 0 | 4 | 8 | C |
+ 592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 1 | 5 | 9 | D |     | D | 1 | 5 | 9 |
+ 594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 2 | 6 | A | E |     | A | E | 2 | 6 |
+ 596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+
GAS LISTING /tmp/ccjbMjHD.s 			page 30
+
+
+ 597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 3 | 7 | B | F |     | 7 | B | F | 3 |
+ 598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvShiftRows) (CipherVec state)
+ 602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvShiftRows) (CipherVec state)
+ 607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVecByte InvShiftRowTable
+ 609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         /*   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
+ 610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         = {  0, 13, 10,  7,  4,  1, 14, 11,  8,  5,  2, 15, 12,  9,  6,  3 };
+ 611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 0 | 4 | 8 | C |     | 3 | 7 | B | F |
+ 620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 1 | 5 | 9 | D |     | 0 | 4 | 8 | C |
+ 622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 2 | 6 | A | E |     | 1 | 5 | 9 | D |
+ 624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 3 | 7 | B | F |     | 2 | 6 | A | E |
+ 626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesRight) (CipherVec state)
+ 630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesRight) (CipherVec state)
+ 634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec ShiftRowTable
+ 637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /*   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
+ 638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     = {  3,  0,  1,  2,  7,  4,  5,  6, 11,  8,  9, 10, 15, 12, 13, 14 };
+ 639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 643:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 644:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 645:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 646:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 647:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 0 | 4 | 8 | C |     | 1 | 5 | B | D |
+ 648:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 1 | 5 | 9 | D |     | 2 | 6 | 8 | E |
+ 650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 651:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 2 | 6 | A | E |     | 3 | 7 | 9 | F |
+ 652:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 653:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * | 3 | 7 | B | F |     | 0 | 4 | 8 | C |
+
GAS LISTING /tmp/ccjbMjHD.s 			page 31
+
+
+ 654:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * +---+---+---+---+     +---+---+---+---+
+ 655:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesLeft) (CipherVec state)
+ 658:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 661:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RotBytesLeft) (CipherVec state)
+ 662:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 663:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVec ShiftRowTable
+ 664:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         /*   0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
+ 665:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         = {  1,  2,  3,  0,  5,  6,  7,  4,  9, 10, 11,  8, 13, 14, 15, 12 };
+ 666:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 669:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 670:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 671:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 672:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.1.1
+ 674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 675:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 676:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 677:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 678:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * SubBytes replaces each byte in a state with a specific byte value from
+ 679:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * A Rijndael Substitution box
+ 680:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const 
+ 682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(RijndaelSBox)[256] = 
+ 683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*        -0    -1    -2    -3    -4    -5    -6    -7    -8    -9    -A    -B    -C    -D    -E   
+ 685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0- */ 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 
+ 686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 1- */ 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 
+ 687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 2- */ 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 
+ 688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 3- */ 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 
+ 689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 4- */ 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 
+ 690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 5- */ 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 
+ 691:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 6- */ 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 
+ 692:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 7- */ 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 
+ 693:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 8- */ 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 
+ 694:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 9- */ 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 
+ 695:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* A- */ 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 
+ 696:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* B- */ 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 
+ 697:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* C- */ 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 
+ 698:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* D- */ 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 
+ 699:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* E- */ 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 
+ 700:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* F- */ 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 
+ 701:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 702:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 703:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 704:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if 0
+ 705:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 706:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ 707:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 708:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 709:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 710:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 32
+
+
+ 711:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 712:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+ 713:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 714:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 715:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 716:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 717:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (u.bytes); ++ix)
+ 718:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+ 719:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u.bytes[ix] = AESBCMEMBER(RijndaelSBox)[u.bytes[ix]];
+ 720:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+ 721:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 722:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 723:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 724:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 725:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 726:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 727:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * SubWord performs the same operation as SubBytes but on
+ 728:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * the four bytes of a column and not a whole state
+ 729:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 730:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 731:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(SubWord) (AESWord w)
+ 732:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 733:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 734:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 735:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(SubWord) (AESWord w)
+ 736:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 737:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESColumn col;
+ 738:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 739:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if 0
+ 747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * InvSubBytes replaces each byte in a state with a specific byte value from
+ 749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * an Inversze Rijndael Substitution box.  That is InvSubBytes undoes SubBytes
+ 750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const 
+ 752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint8_t AESBCMEMBER(RijndaelInvSBox)[256] = 
+ 753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 754:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*        -0    -1    -2    -3    -4    -5    -6    -7    -8    -9    -A    -B    -C    -D    -E   
+ 755:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 0- */ 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 
+ 756:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 1- */ 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 
+ 757:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 2- */ 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 
+ 758:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 3- */ 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 
+ 759:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 4- */ 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 
+ 760:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 5- */ 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 
+ 761:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 6- */ 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 
+ 762:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 7- */ 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 
+ 763:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 8- */ 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 
+ 764:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 9- */ 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 
+ 765:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* A- */ 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 
+ 766:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* B- */ 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 
+ 767:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* C- */ 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 33
+
+
+ 768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* D- */ 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 
+ 769:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* E- */ 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 
+ 770:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* F- */ 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 
+ 771:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 772:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 773:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 774:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 775:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 776:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 777:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 778:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 779:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 781:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+ 782:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 783:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 784:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 785:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (u.bytes); ++ix)
+ 786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         u.bytes[ix] = AESBCMEMBER(RijndaelInvSBox)[u.bytes[ix]];
+ 787:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 789:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 790:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 791:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 792:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RijndaelSBoxV)[16] = 
+ 794:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 795:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     -0    -1    -2    -3    -4    -5    -6    -7    -8    -9    -A    -B    -C    -D    -E    -F
+ 796:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x7
+ 797:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC
+ 798:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x1
+ 799:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x7
+ 800:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x8
+ 801:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xC
+ 802:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA
+ 803:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD
+ 804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x7
+ 805:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xD
+ 806:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x7
+ 807:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x0
+ 808:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8
+ 809:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9
+ 810:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xD
+ 811:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x1
+ 812:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 813:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 814:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 815:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(RijndaelInvSBoxV)[16] = 
+ 816:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 817:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     -0    -1    -2    -3    -4    -5    -6    -7    -8    -9    -A    -B    -C    -D    -E    -F
+ 818:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xF
+ 819:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xC
+ 820:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4
+ 821:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x2
+ 822:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x9
+ 823:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x8
+ 824:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 34
+
+
+ 825:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6
+ 826:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x7
+ 827:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6
+ 828:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1
+ 829:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF
+ 830:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5
+ 831:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xE
+ 832:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x6
+ 833:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7
+ 834:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+ 835:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 836:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 837:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+ 838:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec lo_filter = { 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 839:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                         0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
+ 840:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 841:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 842:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytesInt) (CipherVec state, const CipherVec box [16])
+ 843:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 844:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 845:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 846:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytesInt) (CipherVec state, const CipherVec box [16])
+ 847:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 848:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec lo, hi, tmp, out;
+ 849:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+ 850:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 852:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 853:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("state", state); */
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 855:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("lo", lo); */
+ 856:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 858:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 860:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 861:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+ 862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecDiv) (state, vec_10);
+ 863:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 864:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+ 865:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 867:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 869:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*         DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 871:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*         DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 873:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*         DEBUG_CIPHER_VECTOR ("tmp", tmp); */
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 875:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*         DEBUG_CIPHER_VECTOR ("out", out); */
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 877:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*         DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 879:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*         DEBUG_CIPHER_VECTOR ("hi", hi); */
+ 880:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+ 881:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*     DEBUG_CIPHER_VECTOR ("out", out); */
+
GAS LISTING /tmp/ccjbMjHD.s 			page 35
+
+
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 883:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 884:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 885:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 886:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 887:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ 888:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 889:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 890:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 891:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(SubBytes) (CipherVec state)
+ 892:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 893:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(SubBytesInt) (state, AESBCMEMBER(RijndaelSBoxV));
+ 894:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 895:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 896:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 897:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 898:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 899:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 900:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 901:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 902:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvSubBytes) (CipherVec state)
+ 903:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 904:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(SubBytesInt) (state, AESBCMEMBER(RijndaelInvSBoxV));
+ 905:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 906:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 907:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 908:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+ 909:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.1.3
+ 910:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 911:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 912:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+ 913:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * there are no psllb or psrlb instructions so shift words not bytes
+ 914:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * and then cut off bits that would have been zeroed if there were
+ 915:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * such instructions
+ 916:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+ 917:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * 
+ 918:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+ 919:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const CipherVec FF_tab = 
+ 920:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** { 0x00, 0x1B, 0x36, 0x2D, 0x6C, 0x77, 0x5A, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ 921:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 922:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 923:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul) (register CipherVec state, const int bits)
+ 924:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 925:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 926:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 927:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul) (register CipherVec state, const int bits)
+ 928:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 929:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec sl, sr;
+ 930:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 931:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     assert (bits <= 8);
+ 932:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("sr", sr);
+ 936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ 937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("sl", sl);
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+
GAS LISTING /tmp/ccjbMjHD.s 			page 36
+
+
+ 939:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(VecXor)(sl, sr);
+ 940:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 941:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 942:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 943:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 944:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_02) (CipherVec state)
+ 945:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 946:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 947:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 948:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_02) (register CipherVec state)
+ 949:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 950:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 951:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 952:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state =  AESBCMEMBER(FF_mul) (state, 1);
+ 953:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 954:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 955:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 956:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 957:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 958:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 959:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 960:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_04) (CipherVec state)
+ 961:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 962:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 963:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 964:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_04) (CipherVec state)
+ 965:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 966:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 967:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 968:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state =  AESBCMEMBER(FF_mul) (state, 2);
+ 969:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 970:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 971:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 972:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 973:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 974:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 975:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 976:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_08) (CipherVec state)
+ 977:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 978:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 979:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+ 980:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FF_mul_08) (CipherVec state)
+ 981:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 982:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 983:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 984:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state =  AESBCMEMBER(FF_mul) (state, 3);
+ 985:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 986:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 987:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 988:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 989:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 990:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 991:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static AESByte AESBCMEMBER(FFtable)[] = { 0x00, 0x1b, 0x36, 0x2d, 0x6c, 0x77, 0x5a, 0x41 };
+ 992:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 993:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 994:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 995:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFtab) (uint8_t x)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 37
+
+
+ 996:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+ 997:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+ 998:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+ 999:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFtab) (uint8_t x)
+1000:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(FFtable)[x];
+1002:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1003:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1004:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1005:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1006:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul02) (AESByte b)
+1007:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1008:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1009:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1010:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul02) (AESByte b)
+1011:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 1) ^ AESBCMEMBER(FFtab)(b >> 7);
+1013:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1014:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1015:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1016:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1017:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul04) (AESByte b)
+1018:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1019:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1020:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1021:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul04) (AESByte b)
+1022:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1023:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 2) ^ AESBCMEMBER(FFtab)(b >> 6);
+1024:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1025:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1026:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1027:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1028:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul08) (AESByte b)
+1029:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1030:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1031:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1032:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESByte AESBCMEMBER(FFmul08) (AESByte b)
+1033:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1034:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (b << 3) ^ AESBCMEMBER(FFtab)(b >> 5);
+1035:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1036:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1037:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1038:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1039:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MixColumns) (CipherVec state)
+1040:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1041:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1042:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1043:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MixColumns) (CipherVec state)
+1044:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1045:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec c0, c1, c2, c3;
+1046:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     
+1047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c1 = AESBCMEMBER(RotBytesLeft) (state);
+1048:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c2 = AESBCMEMBER(RotBytesLeft) (c1);
+1049:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c3 = AESBCMEMBER(RotBytesLeft) (c2);
+1050:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c0 = AESBCMEMBER(VecXor) (state, c1);
+1051:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1052:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 38
+
+
+1053:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1054:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c0 = AESBCMEMBER(FF_mul_02) (c0);
+1055:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1056:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+1057:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         CipherVec_AES_u tmp;
+1058:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         unsigned ix;
+1059:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1060:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp.state = c0;
+1061:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     
+1062:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         for (ix = 0; ix < sizeof tmp; ++ix)
+1063:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             tmp.bytes[ix] = AESBCMEMBER(FFmul02)(tmp.bytes[ix]);
+1064:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         c0 = tmp.state;
+1065:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+1066:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1067:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c1 = AESBCMEMBER(VecXor) (c1, c2);
+1068:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c1 = AESBCMEMBER(VecXor) (c1, c3);
+1069:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c1 = AESBCMEMBER(VecXor) (c1, c0);
+1070:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1071:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return c1;
+1072:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* obsoleted 
+1073:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u in, out;
+1074:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+1075:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1076:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = state;
+1077:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1078:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (out.bytes); ix += 4)
+1079:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+1080:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         unsigned const s0 = in.bytes[ix + 0];
+1081:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         unsigned const s1 = in.bytes[ix + 1];
+1082:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         unsigned const s2 = in.bytes[ix + 2];
+1083:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         unsigned const s3 = in.bytes[ix + 3];
+1084:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1085:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 0] =      s1 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s0 ^ s1);
+1086:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 1] = s0      ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s1 ^ s2);
+1087:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 2] = s0 ^ s1      ^ s3 ^ AESBCMEMBER(FFmul02)(s2 ^ s3);
+1088:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 3] = s0 ^ s1 ^ s2      ^ AESBCMEMBER(FFmul02)(s3 ^ s0);
+1089:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+1090:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+1091:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1092:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1093:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1094:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1095:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvMixColumns) (CipherVec state)
+1096:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1097:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1098:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1099:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(InvMixColumns) (CipherVec state)
+1100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+1102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_AESIMC (state);
+1103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec r1, r2, r3, f2, f4, f8;
+1105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r1 = AESBCMEMBER(RotBytesLeft) (state);
+1107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r2 = AESBCMEMBER(RotBytesLeft) (r1);
+1108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r3 = AESBCMEMBER(RotBytesLeft) (r2);        
+1109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 39
+
+
+1110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f4 = AESBCMEMBER(VecXor) (state, r2);
+1111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f2 = AESBCMEMBER(VecXor) (state, r1);
+1112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f8 = AESBCMEMBER(VecXor) (r2, r3);
+1113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (f8, r1);
+1114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f8 = AESBCMEMBER(VecXor) (f8, f2);
+1115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f2 = AESBCMEMBER(FF_mul) (f2,1);
+1119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f4 = AESBCMEMBER(FF_mul) (f4,2);
+1120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f8 = AESBCMEMBER(FF_mul) (f8,3);
+1121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+1123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         CipherVec_AES_u fu2, fu4, fu8;
+1124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         unsigned ix;
+1125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         fu2.state = f2;
+1127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         fu4.state = f4;
+1128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         fu8.state = f8;
+1129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         for (ix = 0; ix < sizeof fu2; ++ix)
+1131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+1132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu2.bytes[ix] = AESBCMEMBER(FFmul02)(fu2.bytes[ix]);
+1133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu4.bytes[ix] = AESBCMEMBER(FFmul04)(fu4.bytes[ix]);
+1134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             fu8.bytes[ix] = AESBCMEMBER(FFmul08)(fu8.bytes[ix]);
+1135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         }
+1136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         f2 = fu2.state;
+1137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         f4 = fu4.state;
+1138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         f8 = fu8.state;
+1139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+1140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f2);
+1143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f4);
+1144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f8);
+1145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+1149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u in, out;
+1151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix;
+1152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = state;
+1154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (out.bytes); ix += AES_Nb)
+1156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+1157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESWord s0 = in.bytes[ix + 0];
+1158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESWord s1 = in.bytes[ix + 1];
+1159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESWord s2 = in.bytes[ix + 2];
+1160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESWord s3 = in.bytes[ix + 3];
+1161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESWord p, q;
+1162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         q =     AESBCMEMBER(FFmul08)(s0 ^ s1 ^ s2 ^ s3);
+1164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         p = q ^ AESBCMEMBER(FFmul04)(s0 ^ s2);
+1165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         q = q ^ AESBCMEMBER(FFmul04)(s1 ^ s3);
+1166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 40
+
+
+1167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 0] =      s1 ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s0 ^ s1) ^ p;
+1168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 1] = s0      ^ s2 ^ s3 ^ AESBCMEMBER(FFmul02)(s1 ^ s2) ^ q;
+1169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 2] = s0 ^ s1      ^ s3 ^ AESBCMEMBER(FFmul02)(s2 ^ s3) ^ p;
+1170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out.bytes[ix + 3] = s0 ^ s1 ^ s2      ^ AESBCMEMBER(FFmul02)(s3 ^ s0) ^ q;
+1171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+1172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+1174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+1179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * FIPS-197 5.2
+1180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+1182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(Rcon)[] = {
+1183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     0x00000001, 0x00000002, 0x00000004, 0x00000008,
+1184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     0x00000010, 0x00000020, 0x00000040, 0x00000080,
+1185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     0x0000001B, 0x00000036
+1186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+1187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(RotWord) (AESWord w)
+1191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(RotWord) (AESWord w)
+1195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (w >> 8) | (w << 24);
+1197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(GetWord) (const AESByte * pointer)
+1202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** AESWord AESBCMEMBER(GetWord) (const AESByte * pointer)
+1206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /*
+1208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * not portable to architectures which require aligned multibyte reads
+1209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * but as this only runs on Intel at this point it is fine for now
+1210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      */
+1211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return *(AESWord*)pointer;
+1212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion) (CipherVec * r, const AESByte * key, unsigned Nr, unsigned Nk)
+1218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord * w = (AESWord*)r;
+1220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     const AESWord * pRcon;
+1221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix, limit;
+1222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord temp;
+1223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 41
+
+
+1224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_KEYEXP(("%s (w (%p), key (%p), Nr (%u) Nk (%u))\n", __func__, w, key, Nr, Nk));
+1226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < Nk; ++ix)
+1228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+1229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_KEYEXP(("i (dec): %u\n", ix));
+1230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         temp = AESBCMEMBER(GetWord) (key+(ix*4));
+1231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         w[ix] = temp;
+1232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_KEYEXP(("kw[%i]: %0.8x\n", ix, temp));
+1233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+1234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     limit = AES_Nb * (Nr + 1);
+1236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     pRcon = AESBCMEMBER(Rcon);
+1237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_KEYEXP(("Nk (%u) Nr (%u) limit (%u)\n", Nk, Nr, limit));
+1238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         
+1239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (; ix < limit; ++ix)
+1240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+1241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_KEYEXP(("i (dec): %u %u\n", ix, limit));
+1243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         /* temp should already be set */
+1245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_KEYEXP(("temp: %0.8x\n", temp));
+1246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if ((ix % Nk) == 0)
+1247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+1248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             temp = AESBCMEMBER(RotWord)(temp);
+1249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             DEBUG_KEYEXP(("after RotWord: %0.8x \n", temp));
+1250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             temp = AESBCMEMBER(SubWord) (temp);
+1251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             DEBUG_KEYEXP(("after SubWord: %0.8x \n", temp));
+1252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             DEBUG_KEYEXP(("Rcon [i/Nk]: %0.8x\n", *pRcon));
+1253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             temp ^= *pRcon++;
+1254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             DEBUG_KEYEXP(("after XOR with Rcon: %0.8x \n", temp));
+1255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         }
+1256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         else if ((Nk > 6) && ((ix % Nk) == 4))
+1257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+1258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             temp = AESBCMEMBER(SubWord) (temp);
+1259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             DEBUG_KEYEXP(("after SubWord: %0.8x \n", temp));
+1260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         }
+1261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_KEYEXP(("w[i-Nk]: %0.8x\n", w[ix-Nk]));
+1262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         temp ^= w [ix - Nk];
+1263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_KEYEXP(("kw[ix]: %0.8x\n", temp));
+1264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         w [ix] = temp;
+1265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+1266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft32) (CipherVec state)
+1271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft32) (CipherVec state)
+1275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVec mask = { 0xFF, 0xFF, 0xFF, 0xFF, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+1279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+
GAS LISTING /tmp/ccjbMjHD.s 			page 42
+
+
+1281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+1284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+1285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+1286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+1287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftRight64) (CipherVec state)
+1294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftRight64) (CipherVec state)
+1298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVec mask = { 8, 9, 10, 11, 12, 13, 14, 15, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF
+1301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+1302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[2];
+1307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+1308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = 0;
+1309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = 0;
+1310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft64) (CipherVec state)
+1317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateShiftLeft64) (CipherVec state)
+1321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     static const CipherVec mask = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0, 1, 2, 3, 4, 
+1324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+1325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+1330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+1331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+1332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = 0;
+1333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 43
+
+
+1338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W3:W3:W3:W3
+1344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn3) (CipherVec state)
+1347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn3) (CipherVec state)
+1351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_PSHUFD128 (state,0xFF);
+1354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[3];
+1359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[3];
+1360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[3];
+1361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W2:W2:W2:W2
+1372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn2) (CipherVec state)
+1375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn2) (CipherVec state)
+1379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_PSHUFD128 (state,0xAA);
+1382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[2];
+1387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[2];
+1388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[2];
+1389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+
GAS LISTING /tmp/ccjbMjHD.s 			page 44
+
+
+1395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W2:W2:W2:W2
+1400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn1) (CipherVec state)
+1403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn1) (CipherVec state)
+1407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_PSHUFD128 (state,0x55);
+1410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[1];
+1415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[1];
+1416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[0] = temp.columns[1];
+1417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W0:W0:W0
+1428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn0) (CipherVec state)
+1431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateDupColumn0) (CipherVec state)
+1435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_VEC_REG)
+1437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_PSHUFD128 (state,0x00);
+1438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] = temp.columns[0];
+1443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] = temp.columns[0];
+1444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] = temp.columns[0];
+1445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+
GAS LISTING /tmp/ccjbMjHD.s 			page 45
+
+
+1452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     X0:X1:X2:X3
+1454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:X0:X1
+1457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge1) (CipherVec w, CipherVec x)
+1460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge1) (CipherVec w, CipherVec x)
+1464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_SHUFPD (w, x, 0x00);
+1467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u ww;
+1469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u xx;
+1470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.state = w;
+1472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     xx.state = x;
+1473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[2] = xx.columns[0];
+1475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[3] = xx.columns[1];
+1476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return ww.state;
+1478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     X0:X1:X2:X3
+1486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     X2:X3:W0:W1
+1489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge2) (CipherVec w, CipherVec x)
+1492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge2) (CipherVec w, CipherVec x)
+1496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_SHUFPD (w, x, 0x01);
+1499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u ww;
+1501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u xx;
+1502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.state = w;
+1504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     xx.state = x;
+1505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[0] = ww.columns[2];
+1507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[1] = ww.columns[3];
+1508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[2] = xx.columns[0];
+
GAS LISTING /tmp/ccjbMjHD.s 			page 46
+
+
+1509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ww.columns[3] = xx.columns[1];
+1510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return ww.state;
+1512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1514:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     X0:X1:X2:X3
+1520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     X2:X3:W0:W1
+1523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge3) (CipherVec v0, CipherVec v1)
+1526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(StateMerge3) (CipherVec v0, CipherVec v1)
+1530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+1532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_SHUFPD (v0, v1, 0x02);
+1533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u t0;
+1535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u t1;
+1536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     t0.state = v0;
+1538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     t1.state = v1;
+1539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     t0.columns[2] = t0.columns[0];
+1541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     t0.columns[3] = t0.columns[1];
+1542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     t0.columns[0] = t1.columns[2];
+1543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     t0.columns[1] = t1.columns[3];
+1544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return t0.state;
+1546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * incoming vector in words
+1552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W1:W2:W3
+1553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+1554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * output vector in words
+1555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *     W0:W0^W1:W0^W1^W2:W0^W1^W2^W3
+1556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftXorColumns) (CipherVec state)
+1559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(ShiftXorColumns) (CipherVec state)
+1563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+
GAS LISTING /tmp/ccjbMjHD.s 			page 47
+
+
+1566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+1570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+1572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u temp;
+1574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.state = state;
+1576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[1] ^= temp.columns[0];
+1578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[2] ^= temp.columns[1];
+1579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp.columns[3] ^= temp.columns[2];
+1580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return temp.state;
+1582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssist) (register CipherVec state, const int rcon)
+1588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssist) (register CipherVec state, const int rcon)
+1592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return op_AESKEYGENASSIST (state, rcon);
+1595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u in;
+1597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u out;
+1598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord rconw;
+1599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rconw = (AESWord)(AESByte)rcon;
+1601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     in.state = state;
+1602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out.columns[0] = AESBCMEMBER(SubWord)(in.columns[1]);
+1604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out.columns[1] = AESBCMEMBER(RotWord)(out.columns[0]) ^ rconw;
+1605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out.columns[2] = AESBCMEMBER(SubWord)(in.columns[3]);
+1606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out.columns[3] = AESBCMEMBER(RotWord)(out.columns[2]) ^ rconw;
+1607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out.state;
+1609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn1) (register CipherVec state, const int rcon)
+1615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn1) (register CipherVec state, const int rcon)
+1619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+1622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+
GAS LISTING /tmp/ccjbMjHD.s 			page 48
+
+
+1623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return  AESBCMEMBER(StateDupColumn1) (tmp);
+1624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+1626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord rconw;
+1627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord temp;
+1628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rconw = (AESWord)(AESByte)rcon;
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[1]);
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(RotWord)(temp);
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp ^= rconw;
+1634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+1637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn2) (register CipherVec state)
+1643:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1644:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1645:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1646:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn2) (register CipherVec state)
+1647:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1648:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+1650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, 0);
+1651:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return  AESBCMEMBER(StateDupColumn2) (tmp);
+1652:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1653:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+1654:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord temp;
+1655:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+1658:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+1661:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1662:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1663:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1664:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1665:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1666:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn3) (register CipherVec state, const int rcon)
+1667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1669:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1670:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(AesKeyGenAssistColumn3) (register CipherVec state, const int rcon)
+1671:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1672:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if (USE_AES_NI)
+1673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp = state;
+1674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = op_AESKEYGENASSIST (tmp, rcon);
+1675:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return  AESBCMEMBER(StateDupColumn3) (tmp);
+1676:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1677:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1678:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec vrcon;
+1679:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp;
+
GAS LISTING /tmp/ccjbMjHD.s 			page 49
+
+
+1680:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+1691:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1692:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1693:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1694:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #elif USE_VEC && 1
+1695:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec tmp;
+1696:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+1697:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     
+1698:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [3] = rcon;
+1699:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1700:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+1701:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+1702:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+1703:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+1704:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, u.state);
+1705:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+1706:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+1707:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+1708:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+1709:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1710:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1711:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec_AES_u u;
+1712:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord rconw;
+1713:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESWord temp;
+1714:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1715:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rconw = (AESWord)(AESByte)rcon;
+1716:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+1717:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+1718:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(RotWord)(temp);
+1719:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp ^= rconw;
+1720:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1721:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+1722:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+1723:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1724:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** */
+1725:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1726:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1727:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1728:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+1729:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1730:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion128) (CipherVec * round_keys, const AESByte * key)
+1731:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 971              		.loc 2 1731 0
+ 972              		.cfi_startproc
+ 973 0014 55       		pushq	%rbp
+ 974              	.LCFI2:
+ 975              		.cfi_def_cfa_offset 16
+
GAS LISTING /tmp/ccjbMjHD.s 			page 50
+
+
+ 976 0015 4889E5   		movq	%rsp, %rbp
+ 977              		.cfi_offset 6, -16
+ 978              	.LCFI3:
+ 979              		.cfi_def_cfa_register 6
+ 980 0018 4155     		pushq	%r13
+ 981 001a 4154     		pushq	%r12
+ 982 001c 53       		pushq	%rbx
+ 983 001d 4881EC68 		subq	$11112, %rsp
+ 983      2B0000
+ 984 0024 4889BD78 		movq	%rdi, -10632(%rbp)
+ 984      D6FFFF
+ 985 002b 4889B570 		movq	%rsi, -10640(%rbp)
+ 985      D6FFFF
+ 986              		.loc 2 1731 0
+ 987 0032 488B8570 		movq	-10640(%rbp), %rax
+ 987      D6FFFF
+ 988 0039 48898520 		movq	%rax, -9952(%rbp)
+ 988      D9FFFF
+ 989              	.LBB684:
+ 990              	.LBB685:
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __asm__ (
+ 991              		.loc 2 126 0
+ 992 0040 488B8520 		movq	-9952(%rbp), %rax
+ 992      D9FFFF
+ 993 0047 4889C7   		movq	%rax, %rdi
+ 994              	#APP
+ 995              	# 126 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 996              		movdqu (%rdi),%xmm0
+ 997              	# 0 "" 2
+ 998              	#NO_APP
+ 999 004e 660F7F85 		movdqa	%xmm0, -11136(%rbp)
+ 999      80D4FFFF 
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vec;
+ 1000              		.loc 2 129 0
+ 1001 0056 660F6F85 		movdqa	-11136(%rbp), %xmm0
+ 1001      80D4FFFF 
+ 1002              	.LBE685:
+ 1003              	.LBE684:
+1732:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec state;
+1733:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec kgastate;
+1734:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1735:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(StateIn) (key);
+ 1004              		.loc 2 1735 0
+ 1005 005e F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+ 1005      00D9FFFF 
+1736:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[0] = state;
+ 1006              		.loc 2 1736 0
+ 1007 0066 488B8578 		movq	-10632(%rbp), %rax
+ 1007      D6FFFF
+ 1008 006d F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 1008      00D9FFFF 
+ 1009 0075 F30F7F00 		movdqu	%xmm0, (%rax)
+ 1010 0079 F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 1010      00D9FFFF 
+ 1011 0081 F30F7F85 		movdqu	%xmm0, -9936(%rbp)
+ 1011      30D9FFFF 
+ 1012              	.LBB686:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 51
+
+
+ 1013              	.LBB687:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 1014              		.loc 2 1681 0
+ 1015 0089 B8010000 		movl	$1, %eax
+ 1015      00
+ 1016 008e 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 1016      00000000 
+ 1017 0096 F30F7F85 		movdqu	%xmm0, -9904(%rbp)
+ 1017      50D9FFFF 
+ 1018 009e 89854CD9 		movl	%eax, -9908(%rbp)
+ 1018      FFFF
+ 1019 00a4 F30F6F85 		movdqu	-9904(%rbp), %xmm0
+ 1019      50D9FFFF 
+ 1020 00ac F30F7F85 		movdqu	%xmm0, -9872(%rbp)
+ 1020      70D9FFFF 
+ 1021 00b4 8B854CD9 		movl	-9908(%rbp), %eax
+ 1021      FFFF
+ 1022 00ba 89856CD9 		movl	%eax, -9876(%rbp)
+ 1022      FFFF
+ 1023              	.LBB688:
+ 1024              	.LBB689:
+ 1025              	.LBB690:
+ 1026              	.LBB691:
+ 1027              		.file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+   1:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*===========================================================================
+   2:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+   3:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *                            PUBLIC DOMAIN NOTICE
+   4:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *               National Center for Biotechnology Information
+   5:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+   6:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  This software/database is a "United States Government Work" under the
+   7:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  terms of the United States Copyright Act.  It was written as part of
+   8:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  the author's official duties as a United States Government employee and
+   9:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  thus cannot be copyrighted.  This software/database is freely available
+  10:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  to the public for use. The National Library of Medicine and the U.S.
+  11:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  Government have not placed any restriction on its use or reproduction.
+  12:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+  13:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  Although all reasonable efforts have been taken to ensure the accuracy
+  14:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  and reliability of the software and data, the NLM and the U.S.
+  15:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  Government do not and cannot warrant the performance or results that
+  16:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  may be obtained by using this software or data. The NLM and the U.S.
+  17:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  Government disclaim all warranties, express or implied, including
+  18:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  warranties of performance, merchantability or fitness for any particular
+  19:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  purpose.
+  20:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+  21:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *  Please cite the author in any work or product based on this material.
+  22:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+  23:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** * ===========================================================================
+  24:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** *
+  25:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+  26:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+  27:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifndef _h_v128_
+  28:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #define _h_v128_
+  29:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+  30:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #include <stdint.h>
+  31:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #include <x86intrin.h>
+  32:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+  33:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __cplusplus
+
GAS LISTING /tmp/ccjbMjHD.s 			page 52
+
+
+  34:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** extern "C" {
+  35:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+  36:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+  37:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef int8_t   v128_i8_t  __attribute__ ((vector_size (16),__may_alias__));
+  38:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef uint8_t  v128_u8_t  __attribute__ ((vector_size (16),__may_alias__));
+  39:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef int16_t  v128_i16_t __attribute__ ((vector_size (16),__may_alias__));
+  40:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef int32_t  v128_i32_t __attribute__ ((vector_size (16),__may_alias__));
+  41:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef int64_t  v128_i64_t __attribute__ ((vector_size (16),__may_alias__));
+  42:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef uint16_t v128_u16_t __attribute__ ((vector_size (16),__may_alias__));
+  43:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef uint32_t v128_u32_t __attribute__ ((vector_size (16),__may_alias__));
+  44:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef uint64_t v128_u64_t __attribute__ ((vector_size (16),__may_alias__));
+  45:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef float    v128_f_t   __attribute__ ((vector_size (16),__may_alias__));
+  46:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef double   v128_d_t   __attribute__ ((vector_size (16),__may_alias__));
+  47:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+  48:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* NOTE:
+  49:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  * these types are to hide perceived flaws in the Intel/GCC code
+  50:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  * don't use them outside of this file.  uint8_t, int8_t and int64_t all
+  51:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  * fail to compile so the above types can't be used within this file in some 
+  52:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  * places.
+  53:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  */
+  54:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef char          v128_c_t   __attribute__ ((vector_size (16),__may_alias__));
+  55:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** typedef long long int v128_lli_t __attribute__ ((vector_size (16),__may_alias__));
+  56:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+  57:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+  58:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #if USE_VEC_REG
+  59:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+  60:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* SSE
+  61:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****   movss
+  62:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****   movaps
+  63:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****   movups
+  64:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****   movlps
+  65:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****   movhps
+  66:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****   movlhps
+  67:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****   movhlps
+  68:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+  69:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+  70:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __MMX__
+  71:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* MMX
+  72:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_paddb (v8qi, v8qi)
+  73:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_paddw (v4hi, v4hi)
+  74:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_paddd (v2si, v2si)
+  75:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_psubb (v8qi, v8qi)
+  76:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_psubw (v4hi, v4hi)
+  77:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_psubd (v2si, v2si)
+  78:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_paddsb (v8qi, v8qi)
+  79:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_paddsw (v4hi, v4hi)
+  80:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_psubsb (v8qi, v8qi)
+  81:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_psubsw (v4hi, v4hi)
+  82:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_paddusb (v8qi, v8qi)
+  83:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_paddusw (v4hi, v4hi)
+  84:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_psubusb (v8qi, v8qi)
+  85:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_psubusw (v4hi, v4hi)
+  86:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_pmullw (v4hi, v4hi)
+  87:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
+  88:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    di __builtin_ia32_pand (di, di)
+  89:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    di __builtin_ia32_pandn (di,di)
+  90:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    di __builtin_ia32_por (di, di)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 53
+
+
+  91:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    di __builtin_ia32_pxor (di, di)
+  92:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
+  93:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
+  94:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_pcmpeqd (v2si, v2si)
+  95:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
+  96:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
+  97:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_pcmpgtd (v2si, v2si)
+  98:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
+  99:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
+ 100:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_punpckhdq (v2si, v2si)
+ 101:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
+ 102:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
+ 103:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_punpckldq (v2si, v2si)
+ 104:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_packsswb (v4hi, v4hi)
+ 105:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_packssdw (v2si, v2si)
+ 106:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_packuswb (v4hi, v4hi)
+ 107:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      
+ 108:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_psllw (v4hi, v4hi)
+ 109:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_pslld (v2si, v2si)
+ 110:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v1di __builtin_ia32_psllq (v1di, v1di)
+ 111:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_psrlw (v4hi, v4hi)
+ 112:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_psrld (v2si, v2si)
+ 113:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v1di __builtin_ia32_psrlq (v1di, v1di)
+ 114:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_psraw (v4hi, v4hi)
+ 115:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_psrad (v2si, v2si)
+ 116:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_psllwi (v4hi, int)
+ 117:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_pslldi (v2si, int)
+ 118:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v1di __builtin_ia32_psllqi (v1di, int)
+ 119:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_psrlwi (v4hi, int)
+ 120:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_psrldi (v2si, int)
+ 121:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v1di __builtin_ia32_psrlqi (v1di, int)
+ 122:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_psrawi (v4hi, int)
+ 123:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_psradi (v2si, int)
+ 124:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 125:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 127:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSE__
+ 128:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* SSE
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
+ 130:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_pavgb (v8qi, v8qi)
+ 131:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_pavgw (v4hi, v4hi)
+ 132:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v1di __builtin_ia32_psadbw (v8qi, v8qi)
+ 133:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v8qi __builtin_ia32_pminub (v8qi, v8qi)
+ 136:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_pminsw (v4hi, v4hi)
+ 137:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_pextrw (v4hi, int)
+ 138:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4hi __builtin_ia32_pinsrw (v4hi, int, int)
+ 139:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_pmovmskb (v8qi)
+ 140:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
+ 141:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    void __builtin_ia32_movntq (di *, di)
+ 142:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    void __builtin_ia32_sfence (void)
+ 143:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 144:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_comieq (v4sf, v4sf)
+ 145:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_comineq (v4sf, v4sf)
+ 146:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_comilt (v4sf, v4sf)
+ 147:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_comile (v4sf, v4sf)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 54
+
+
+ 148:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_comigt (v4sf, v4sf)
+ 149:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_comige (v4sf, v4sf)
+ 150:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_ucomieq (v4sf, v4sf)
+ 151:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_ucomineq (v4sf, v4sf)
+ 152:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_ucomilt (v4sf, v4sf)
+ 153:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_ucomile (v4sf, v4sf)
+ 154:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_ucomigt (v4sf, v4sf)
+ 155:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_ucomige (v4sf, v4sf)
+ 156:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_addps (v4sf, v4sf)
+ 157:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_subps (v4sf, v4sf)
+ 158:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_mulps (v4sf, v4sf)
+ 159:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_divps (v4sf, v4sf)
+ 160:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_addss (v4sf, v4sf)
+ 161:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_subss (v4sf, v4sf)
+ 162:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_mulss (v4sf, v4sf)
+ 163:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_divss (v4sf, v4sf)
+ 164:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
+ 165:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpltps (v4sf, v4sf)
+ 166:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpleps (v4sf, v4sf)
+ 167:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
+ 168:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
+ 169:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
+ 170:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
+ 171:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
+ 172:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
+ 173:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
+ 174:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
+ 175:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpordps (v4sf, v4sf)
+ 176:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
+ 177:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpltss (v4sf, v4sf)
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpless (v4sf, v4sf)
+ 179:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
+ 180:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
+ 181:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
+ 182:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpnless (v4sf, v4sf)
+ 183:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4si __builtin_ia32_cmpordss (v4sf, v4sf)
+ 184:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_maxps (v4sf, v4sf)
+ 185:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_maxss (v4sf, v4sf)
+ 186:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_minps (v4sf, v4sf)
+ 187:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_minss (v4sf, v4sf)
+ 188:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_andps (v4sf, v4sf)
+ 189:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_andnps (v4sf, v4sf)
+ 190:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_orps (v4sf, v4sf)
+ 191:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_xorps (v4sf, v4sf)
+ 192:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_movss (v4sf, v4sf)
+ 193:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_movhlps (v4sf, v4sf)
+ 194:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_movlhps (v4sf, v4sf)
+ 195:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
+ 196:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
+ 197:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
+ 198:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
+ 199:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_cvtps2pi (v4sf)
+ 200:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_cvtss2si (v4sf)
+ 201:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v2si __builtin_ia32_cvttps2pi (v4sf)
+ 202:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_cvttss2si (v4sf)
+ 203:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_rcpps (v4sf)
+ 204:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_rsqrtps (v4sf)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 55
+
+
+ 205:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_sqrtps (v4sf)
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_rcpss (v4sf)
+ 207:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_rsqrtss (v4sf)
+ 208:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_sqrtss (v4sf)
+ 209:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
+ 210:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 211:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 212:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_SHUFPS ( v128_u8_t vin1, v128_u8_t vin2, const int mask )
+ 213:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     __attribute__ ((always_inline));
+ 214:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 215:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 216:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_SHUFPS (v128_u8_t vin1, v128_u8_t vin2, const int mask)
+ 217:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 218:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return ( v128_u8_t ) __builtin_ia32_shufps ((v128_f_t)vin1, (v128_f_t)vin2, mask);
+ 219:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 220:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 221:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  /*
+ 222:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    void __builtin_ia32_movntps (float *, v4sf)
+ 223:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****    int __builtin_ia32_movmskps (v4sf)
+ 224:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 225:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_loadaps (float *)
+ 226:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movaps machine instruction as a load from memory. 
+ 227:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storeaps (float *, v4sf)
+ 228:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movaps machine instruction as a store to memory. 
+ 229:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_loadups (float *)
+ 230:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movups machine instruction as a load from memory. 
+ 231:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storeups (float *, v4sf)
+ 232:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movups machine instruction as a store to memory. 
+ 233:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_loadsss (float *)
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movss machine instruction as a load from memory. 
+ 235:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storess (float *, v4sf)
+ 236:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movss machine instruction as a store to memory. 
+ 237:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_loadhps (v4sf, const v2sf *)
+ 238:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movhps machine instruction as a load from memory. 
+ 239:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_loadlps (v4sf, const v2sf *)
+ 240:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movlps machine instruction as a load from memory 
+ 241:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storehps (v2sf *, v4sf)
+ 242:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movhps machine instruction as a store to memory. 
+ 243:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** void __builtin_ia32_storelps (v2sf *, v4sf)
+ 244:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the movlps machine instruction as a store to memory.
+ 245:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 246:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 247:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 248:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSE2__
+ 249:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* sse2
+ 250:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_comisdeq (v2df, v2df)
+ 251:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_comisdlt (v2df, v2df)
+ 252:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_comisdle (v2df, v2df)
+ 253:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_comisdgt (v2df, v2df)
+ 254:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_comisdge (v2df, v2df)
+ 255:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_comisdneq (v2df, v2df)
+ 256:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ucomisdeq (v2df, v2df)
+ 257:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ucomisdlt (v2df, v2df)
+ 258:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ucomisdle (v2df, v2df)
+ 259:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ucomisdgt (v2df, v2df)
+ 260:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ucomisdge (v2df, v2df)
+ 261:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ucomisdneq (v2df, v2df)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 56
+
+
+ 262:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpeqpd (v2df, v2df)
+ 263:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpltpd (v2df, v2df)
+ 264:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmplepd (v2df, v2df)
+ 265:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpgtpd (v2df, v2df)
+ 266:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpgepd (v2df, v2df)
+ 267:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpunordpd (v2df, v2df)
+ 268:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpneqpd (v2df, v2df)
+ 269:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpnltpd (v2df, v2df)
+ 270:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpnlepd (v2df, v2df)
+ 271:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpngtpd (v2df, v2df)
+ 272:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpngepd (v2df, v2df)
+ 273:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpordpd (v2df, v2df)
+ 274:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpeqsd (v2df, v2df)
+ 275:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpltsd (v2df, v2df)
+ 276:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmplesd (v2df, v2df)
+ 277:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpunordsd (v2df, v2df)
+ 278:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpneqsd (v2df, v2df)
+ 279:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpnltsd (v2df, v2df)
+ 280:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpnlesd (v2df, v2df)
+ 281:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cmpordsd (v2df, v2df)
+ 282:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_paddq (v2di, v2di)
+ 283:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_psubq (v2di, v2di)
+ 284:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_addpd (v2df, v2df)
+ 285:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_subpd (v2df, v2df)
+ 286:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_mulpd (v2df, v2df)
+ 287:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_divpd (v2df, v2df)
+ 288:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_addsd (v2df, v2df)
+ 289:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_subsd (v2df, v2df)
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_mulsd (v2df, v2df)
+ 291:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_divsd (v2df, v2df)
+ 292:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_minpd (v2df, v2df)
+ 293:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_maxpd (v2df, v2df)
+ 294:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_minsd (v2df, v2df)
+ 295:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_maxsd (v2df, v2df)
+ 296:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_andpd (v2df, v2df)
+ 297:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_andnpd (v2df, v2df)
+ 298:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_orpd (v2df, v2df)
+ 299:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_xorpd (v2df, v2df)
+ 300:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_movsd (v2df, v2df)
+ 301:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_unpckhpd (v2df, v2df)
+ 302:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_unpcklpd (v2df, v2df)
+ 303:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
+ 304:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
+ 305:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_paddd128 (v4si, v4si)
+ 306:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_paddq128 (v2di, v2di)
+ 307:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
+ 308:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
+ 309:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_psubd128 (v4si, v4si)
+ 310:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_psubq128 (v2di, v2di)
+ 311:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
+ 312:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
+ 313:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pand128 (v2di, v2di)
+ 314:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pandn128 (v2di, v2di)
+ 315:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_por128 (v2di, v2di)
+ 316:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pxor128 (v2di, v2di)
+ 317:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
+ 318:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 57
+
+
+ 319:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
+ 320:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
+ 321:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
+ 322:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
+ 323:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
+ 324:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
+ 325:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
+ 326:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
+ 327:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
+ 328:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
+ 329:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
+ 330:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
+ 331:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
+ 332:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
+ 333:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
+ 334:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
+ 335:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_punpckldq128 (v4si, v4si)
+ 336:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
+ 337:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_packsswb128 (v8hi, v8hi)
+ 338:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_packssdw128 (v4si, v4si)
+ 339:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_packuswb128 (v8hi, v8hi)
+ 340:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
+ 341:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_maskmovdqu (v16qi, v16qi)
+ 342:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_loadupd (double *)
+ 343:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_storeupd (double *, v2df)
+ 344:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_loadhpd (v2df, double const *)
+ 345:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_loadlpd (v2df, double const *)
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_movmskpd (v2df)
+ 347:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_pmovmskb128 (v16qi)
+ 348:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_movnti (int *, int)
+ 349:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_movntpd (double *, v2df)
+ 350:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_movntdq (v2df *, v2df)
+ 351:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pshufd (v4si, int)
+ 352:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pshuflw (v8hi, int)
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pshufhw (v8hi, int)
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_sqrtpd (v2df)
+ 356:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_sqrtsd (v2df)
+ 357:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_shufpd (v2df, v2df, int)
+ 358:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 359:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 360:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_SHUFPD (v128_u8_t vin1, v128_u8_t vin2, const int mask)
+ 361:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     __attribute__ ((always_inline));
+ 362:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 363:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 364:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_SHUFPD (v128_u8_t vin1, v128_u8_t vin2, const int mask)
+ 365:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 367:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 368:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cvtdq2pd (v4si)
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_cvtdq2ps (v4si)
+ 372:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_cvtpd2dq (v2df)
+ 373:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2si __builtin_ia32_cvtpd2pi (v2df)
+ 374:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_cvtpd2ps (v2df)
+ 375:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_cvttpd2dq (v2df)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 58
+
+
+ 376:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2si __builtin_ia32_cvttpd2pi (v2df)
+ 377:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cvtpi2pd (v2si)
+ 378:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_cvtsd2si (v2df)
+ 379:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_cvttsd2si (v2df)
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      long long __builtin_ia32_cvtsd2si64 (v2df)
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      long long __builtin_ia32_cvttsd2si64 (v2df)
+ 382:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_cvtps2dq (v4sf)
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cvtps2pd (v4sf)
+ 384:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_cvttps2dq (v4sf)
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cvtsi2sd (v2df, int)
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cvtsi642sd (v2df, long long)
+ 387:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
+ 389:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_clflush (const void *)
+ 390:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_lfence (void)
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_mfence (void)
+ 392:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_loaddqu (const char *)
+ 393:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_storedqu (char *, v16qi)
+ 394:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v1di __builtin_ia32_pmuludq (v2si, v2si)
+ 395:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pmuludq128 (v4si, v4si)
+ 396:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_psllw128 (v8hi, v8hi)
+ 397:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pslld128 (v4si, v4si)
+ 398:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_psllq128 (v2di, v2di)
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_psrlw128 (v8hi, v8hi)
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_psrld128 (v4si, v4si)
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_psrlq128 (v2di, v2di)
+ 402:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_psraw128 (v8hi, v8hi)
+ 403:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_psrad128 (v4si, v4si)
+ 404:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pslldqi128 (v2di, int)
+ 405:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_psllwi128 (v8hi, int)
+ 406:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pslldi128 (v4si, int)
+ 407:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 408:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 409:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 410:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSLLDI128 ( v128_u8_t vin, const int bit_count )
+ 411:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     __attribute__ ((always_inline));
+ 412:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 413:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 414:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSLLDI128 (v128_u8_t vin, const int bit_count)
+ 415:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pslldi128 ((v128_i32_t)vin, bit_count);
+ 417:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 418:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 419:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*
+ 420:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_psllqi128 (v2di, int)
+ 421:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_psrldqi128 (v2di, int)
+ 422:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_psrlwi128 (v8hi, int)
+ 423:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_psrldi128 (v4si, int)
+ 424:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 425:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 427:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSRLDI128 ( v128_u8_t vin, const int bit_count )
+ 428:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     __attribute__ ((always_inline));
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSRLDI128 (v128_u8_t vin, const int bit_count)
+ 432:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+
GAS LISTING /tmp/ccjbMjHD.s 			page 59
+
+
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 434:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 436:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /*
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_psrlqi128 (v2di, int)
+ 438:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_psrawi128 (v8hi, int)
+ 439:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_psradi128 (v4si, int)
+ 440:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
+ 441:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_movq128 (v2di)
+ 442:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 443:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 444:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSHUFD128 ( v128_u8_t vin, const int mask )
+ 445:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     __attribute__ ((always_inline));
+ 446:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      
+ 447:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 448:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSHUFD128 (v128_u8_t vin, const int mask)
+ 449:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 451:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 452:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 453:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 454:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSE3__
+ 455:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* sse3
+ 456:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_addsubpd (v2df, v2df)
+ 457:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_addsubps (v4sf, v4sf)
+ 458:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_haddpd (v2df, v2df)
+ 459:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_haddps (v4sf, v4sf)
+ 460:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_hsubpd (v2df, v2df)
+ 461:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_hsubps (v4sf, v4sf)
+ 462:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_lddqu (char const *)
+ 463:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
+ 464:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_movddup (v2df)
+ 465:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_movshdup (v4sf)
+ 466:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_movsldup (v4sf)
+ 467:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      void __builtin_ia32_mwait (unsigned int, unsigned int)
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v2df __builtin_ia32_loadddup (double const *)
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 471:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 472:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 473:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 474:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 475:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSSE3__
+ 476:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 477:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* ssse3
+ 478:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  *
+ 479:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  * The following built-in functions are available when -mssse3 is used. All of
+ 480:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  * them generate the machine instruction that is part of the name with MMX
+ 481:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  * registers.
+ 482:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  *
+ 483:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  * 
+ 484:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2si __builtin_ia32_phaddd (v2si, v2si)
+ 485:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4hi __builtin_ia32_phaddw (v4hi, v4hi)
+ 486:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4hi __builtin_ia32_phaddsw (v4hi, v4hi)
+ 487:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2si __builtin_ia32_phsubd (v2si, v2si)
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4hi __builtin_ia32_phsubw (v4hi, v4hi)
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4hi __builtin_ia32_phsubsw (v4hi, v4hi)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 60
+
+
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4hi __builtin_ia32_pmaddubsw (v8qi, v8qi)
+ 491:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4hi __builtin_ia32_pmulhrsw (v4hi, v4hi)
+ 492:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8qi __builtin_ia32_pshufb (v8qi, v8qi)
+ 493:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8qi __builtin_ia32_psignb (v8qi, v8qi)
+ 494:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2si __builtin_ia32_psignd (v2si, v2si)
+ 495:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4hi __builtin_ia32_psignw (v4hi, v4hi)
+ 496:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v1di __builtin_ia32_palignr (v1di, v1di, int)
+ 497:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8qi __builtin_ia32_pabsb (v8qi)
+ 498:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2si __builtin_ia32_pabsd (v2si)
+ 499:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4hi __builtin_ia32_pabsw (v4hi)
+ 500:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are available when -mssse3 is used.
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** All of them generate the machine instruction that is part of the name
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** with SSE registers.
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 504:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_phaddd128 (v4si, v4si)
+ 505:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_phaddw128 (v8hi, v8hi)
+ 506:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_phaddsw128 (v8hi, v8hi)
+ 507:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_phsubd128 (v4si, v4si)
+ 508:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_phsubw128 (v8hi, v8hi)
+ 509:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_phsubsw128 (v8hi, v8hi)
+ 510:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pmaddubsw128 (v16qi, v16qi)
+ 511:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pmulhrsw128 (v8hi, v8hi)
+ 512:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** +    v16qi __builtin_ia32_pshufb128 (v16qi, v16qi)
+ 513:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_psignb128 (v16qi, v16qi)
+ 514:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_psignd128 (v4si, v4si)
+ 515:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_psignw128 (v8hi, v8hi)
+ 516:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_palignr128 (v2di, v2di, int)
+ 517:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_pabsb128 (v16qi)
+ 518:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pabsd128 (v4si)
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pabsw128 (v8hi)
+ 520:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****  */
+ 521:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSHUFB128 (register v128_u8_t vin, register const v128_u8_t vtab)
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     __attribute__ ((always_inline));
+ 525:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 527:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PSHUFB128 (register v128_u8_t vin, register const v128_u8_t vtab)
+ 528:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 530:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** }
+ 531:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #endif
+ 532:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 533:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** #ifdef __SSE4_1__
+ 534:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** /* sse4.1
+ 535:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are available when -msse4.1 is used.
+ 536:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** All of them generate the machine instruction that is part of the name.
+ 537:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_blendpd (v2df, v2df, const int)
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_blendps (v4sf, v4sf, const int)
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_blendvpd (v2df, v2df, v2df)
+ 541:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_blendvps (v4sf, v4sf, v4sf)
+ 542:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_dppd (v2df, v2df, const int)
+ 543:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_dpps (v4sf, v4sf, const int)
+ 544:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_insertps128 (v4sf, v4sf, const int)
+ 545:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_movntdqa (v2di *);
+ 546:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_mpsadbw128 (v16qi, v16qi, const int)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 61
+
+
+ 547:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_packusdw128 (v4si, v4si)
+ 548:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_pblendvb128 (v16qi, v16qi, v16qi)
+ 549:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pblendw128 (v8hi, v8hi, const int)
+ 550:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pcmpeqq (v2di, v2di)
+ 551:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_phminposuw128 (v8hi)
+ 552:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_pmaxsb128 (v16qi, v16qi)
+ 553:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pmaxsd128 (v4si, v4si)
+ 554:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pmaxud128 (v4si, v4si)
+ 555:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pmaxuw128 (v8hi, v8hi)
+ 556:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v16qi __builtin_ia32_pminsb128 (v16qi, v16qi)
+ 557:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pminsd128 (v4si, v4si)
+ 558:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pminud128 (v4si, v4si)
+ 559:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pminuw128 (v8hi, v8hi)
+ 560:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pmovsxbd128 (v16qi)
+ 561:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pmovsxbq128 (v16qi)
+ 562:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pmovsxbw128 (v16qi)
+ 563:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pmovsxdq128 (v4si)
+ 564:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pmovsxwd128 (v8hi)
+ 565:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pmovsxwq128 (v8hi)
+ 566:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pmovzxbd128 (v16qi)
+ 567:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pmovzxbq128 (v16qi)
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v8hi __builtin_ia32_pmovzxbw128 (v16qi)
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pmovzxdq128 (v4si)
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pmovzxwd128 (v8hi)
+ 571:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pmovzxwq128 (v8hi)
+ 572:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2di __builtin_ia32_pmuldq128 (v4si, v4si)
+ 573:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4si __builtin_ia32_pmulld128 (v4si, v4si)
+ 574:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ptestc128 (v2di, v2di)
+ 575:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ptestnzc128 (v2di, v2di)
+ 576:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      int __builtin_ia32_ptestz128 (v2di, v2di)
+ 577:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_roundpd (v2df, const int)
+ 578:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_roundps (v4sf, const int)
+ 579:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v2df __builtin_ia32_roundsd (v2df, v2df, const int)
+ 580:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****      v4sf __builtin_ia32_roundss (v4sf, v4sf, const int)
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** The following built-in functions are available when -msse4.1 is used.
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** 
+ 583:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4sf __builtin_ia32_vec_set_v4sf (v4sf, float, const int)
+ 584:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the insertps machine instruction. 
+ 585:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** int __builtin_ia32_vec_ext_v16qi (v16qi, const int)
+ 586:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the pextrb machine instruction. 
+ 587:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v16qi __builtin_ia32_vec_set_v16qi (v16qi, int, const int)
+ 588:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the pinsrb machine instruction. 
+ 589:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v4si __builtin_ia32_vec_set_v4si (v4si, int, const int)
+ 590:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** Generates the pinsrd machine instruction. 
+ 591:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** */
+ 592:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 593:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PINSRUD (register v128_u8_t vin, uint32_t ii, const int off)
+ 594:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     __attribute__ ((always_inline));
+ 595:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** static __inline__
+ 596:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** v128_u8_t op_PINSRUD (register v128_u8_t vin, uint32_t ii, const int off)
+ 597:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h **** {
+ 598:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_vec_set_v4si ((v128_i32_t)vin, ii, off);
+ 1028              		.loc 3 598 0
+ 1029 00c0 8B856CD9 		movl	-9876(%rbp), %eax
+ 1029      FFFF
+ 1030 00c6 F30F6F85 		movdqu	-9872(%rbp), %xmm0
+ 1030      70D9FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 62
+
+
+ 1031 00ce 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 1031      C003
+ 1032              	.LBE691:
+ 1033              	.LBE690:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 1034              		.loc 2 519 0
+ 1035 00d4 F30F7F85 		movdqu	%xmm0, -9904(%rbp)
+ 1035      50D9FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 1036              		.loc 2 526 0
+ 1037 00dc F30F6F85 		movdqu	-9904(%rbp), %xmm0
+ 1037      50D9FFFF 
+ 1038              	.LBE689:
+ 1039              	.LBE688:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 1040              		.loc 2 1681 0
+ 1041 00e4 660F7F85 		movdqa	%xmm0, -11104(%rbp)
+ 1041      A0D4FFFF 
+ 1042 00ec F30F6F85 		movdqu	-9936(%rbp), %xmm0
+ 1042      30D9FFFF 
+ 1043 00f4 F30F7F85 		movdqu	%xmm0, -9856(%rbp)
+ 1043      80D9FFFF 
+ 1044 00fc F30F6F85 		movdqu	-9856(%rbp), %xmm0
+ 1044      80D9FFFF 
+ 1045 0104 F30F7F85 		movdqu	%xmm0, -9824(%rbp)
+ 1045      A0D9FFFF 
+ 1046 010c 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 1046      000000
+ 1047 0113 48898598 		movq	%rax, -9832(%rbp)
+ 1047      D9FFFF
+ 1048              	.LBB692:
+ 1049              	.LBB693:
+ 1050              	.LBB694:
+ 1051              	.LBB695:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 1052              		.loc 2 851 0
+ 1053 011a 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 1053      00000000 
+ 1054 0122 F30F7F85 		movdqu	%xmm0, -9792(%rbp)
+ 1054      C0D9FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 1055              		.loc 2 854 0
+ 1056 012a 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 1056      00000000 
+ 1057 0132 F30F6F8D 		movdqu	-9824(%rbp), %xmm1
+ 1057      A0D9FFFF 
+ 1058 013a F30F7F8D 		movdqu	%xmm1, -9712(%rbp)
+ 1058      10DAFFFF 
+ 1059 0142 F30F7F85 		movdqu	%xmm0, -9728(%rbp)
+ 1059      00DAFFFF 
+ 1060              	.LBB696:
+ 1061              	.LBB697:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 1062              		.loc 2 206 0
+ 1063 014a F30F6F85 		movdqu	-9728(%rbp), %xmm0
+ 1063      00DAFFFF 
+ 1064 0152 F30F6F8D 		movdqu	-9712(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 63
+
+
+ 1064      10DAFFFF 
+ 1065 015a 660FDBC1 		pand	%xmm1, %xmm0
+ 1066              	.LBE697:
+ 1067              	.LBE696:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 1068              		.loc 2 854 0
+ 1069 015e F30F7F85 		movdqu	%xmm0, -9744(%rbp)
+ 1069      F0D9FFFF 
+ 1070 0166 F30F6F85 		movdqu	-9824(%rbp), %xmm0
+ 1070      A0D9FFFF 
+ 1071 016e F30F7F85 		movdqu	%xmm0, -9680(%rbp)
+ 1071      30DAFFFF 
+ 1072              	.LBB698:
+ 1073              	.LBB699:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 1074              		.loc 3 433 0
+ 1075 0176 F30F6F85 		movdqu	-9680(%rbp), %xmm0
+ 1075      30DAFFFF 
+ 1076 017e 660F72D0 		psrld	$4, %xmm0
+ 1076      04
+ 1077              	.LBE699:
+ 1078              	.LBE698:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 1079              		.loc 2 857 0
+ 1080 0183 F30F7F85 		movdqu	%xmm0, -9760(%rbp)
+ 1080      E0D9FFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 1081              		.loc 2 859 0
+ 1082 018b 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 1082      00000000 
+ 1083 0193 F30F6F8D 		movdqu	-9760(%rbp), %xmm1
+ 1083      E0D9FFFF 
+ 1084 019b F30F7F8D 		movdqu	%xmm1, -9648(%rbp)
+ 1084      50DAFFFF 
+ 1085 01a3 F30F7F85 		movdqu	%xmm0, -9664(%rbp)
+ 1085      40DAFFFF 
+ 1086              	.LBB700:
+ 1087              	.LBB701:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 1088              		.loc 2 206 0
+ 1089 01ab F30F6F85 		movdqu	-9664(%rbp), %xmm0
+ 1089      40DAFFFF 
+ 1090 01b3 F30F6F8D 		movdqu	-9648(%rbp), %xmm1
+ 1090      50DAFFFF 
+ 1091 01bb 660FDBC1 		pand	%xmm1, %xmm0
+ 1092              	.LBE701:
+ 1093              	.LBE700:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 1094              		.loc 2 859 0
+ 1095 01bf F30F7F85 		movdqu	%xmm0, -9760(%rbp)
+ 1095      E0D9FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 1096              		.loc 2 866 0
+ 1097 01c7 C785BCD9 		movl	$0, -9796(%rbp)
+ 1097      FFFF0000 
+ 1097      0000
+ 1098 01d1 E9BE0100 		jmp	.L4
+
GAS LISTING /tmp/ccjbMjHD.s 			page 64
+
+
+ 1098      00
+ 1099              		.cfi_offset 3, -40
+ 1100              		.cfi_offset 12, -32
+ 1101              		.cfi_offset 13, -24
+ 1102              	.L5:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 1103              		.loc 2 868 0
+ 1104 01d6 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 1104      00000000 
+ 1105 01de F30F7F85 		movdqu	%xmm0, -9616(%rbp)
+ 1105      70DAFFFF 
+ 1106 01e6 F30F6F85 		movdqu	-9760(%rbp), %xmm0
+ 1106      E0D9FFFF 
+ 1107 01ee F30F7F85 		movdqu	%xmm0, -9632(%rbp)
+ 1107      60DAFFFF 
+ 1108 01f6 F30F6F85 		movdqu	-9616(%rbp), %xmm0
+ 1108      70DAFFFF 
+ 1109 01fe F30F7F85 		movdqu	%xmm0, -9584(%rbp)
+ 1109      90DAFFFF 
+ 1110 0206 F30F6F85 		movdqu	-9632(%rbp), %xmm0
+ 1110      60DAFFFF 
+ 1111 020e F30F7F85 		movdqu	%xmm0, -9600(%rbp)
+ 1111      80DAFFFF 
+ 1112              	.LBB702:
+ 1113              	.LBB703:
+ 1114              	.LBB704:
+ 1115              	.LBB705:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1116              		.loc 3 529 0
+ 1117 0216 F30F6F8D 		movdqu	-9600(%rbp), %xmm1
+ 1117      80DAFFFF 
+ 1118 021e F30F6F85 		movdqu	-9584(%rbp), %xmm0
+ 1118      90DAFFFF 
+ 1119 0226 660F3800 		pshufb	%xmm1, %xmm0
+ 1119      C1
+ 1120              	.LBE705:
+ 1121              	.LBE704:
+ 1122              	.LBE703:
+ 1123              	.LBE702:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 1124              		.loc 2 868 0
+ 1125 022b F30F7F85 		movdqu	%xmm0, -9776(%rbp)
+ 1125      D0D9FFFF 
+ 1126 0233 F30F6F85 		movdqu	-9744(%rbp), %xmm0
+ 1126      F0D9FFFF 
+ 1127 023b F30F7F85 		movdqu	%xmm0, -9552(%rbp)
+ 1127      B0DAFFFF 
+ 1128 0243 F30F6F85 		movdqu	-9776(%rbp), %xmm0
+ 1128      D0D9FFFF 
+ 1129 024b F30F7F85 		movdqu	%xmm0, -9568(%rbp)
+ 1129      A0DAFFFF 
+ 1130              	.LBB706:
+ 1131              	.LBB707:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 1132              		.loc 2 234 0
+ 1133 0253 F30F6F85 		movdqu	-9568(%rbp), %xmm0
+ 1133      A0DAFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 65
+
+
+ 1134 025b F30F6F8D 		movdqu	-9552(%rbp), %xmm1
+ 1134      B0DAFFFF 
+ 1135 0263 660FEBC1 		por	%xmm1, %xmm0
+ 1136              	.LBE707:
+ 1137              	.LBE706:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 1138              		.loc 2 870 0
+ 1139 0267 F30F7F85 		movdqu	%xmm0, -9776(%rbp)
+ 1139      D0D9FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 1140              		.loc 2 872 0
+ 1141 026f 8B85BCD9 		mov	-9796(%rbp), %eax
+ 1141      FFFF
+ 1142 0275 48C1E004 		salq	$4, %rax
+ 1143 0279 48038598 		addq	-9832(%rbp), %rax
+ 1143      D9FFFF
+ 1144 0280 660F6F00 		movdqa	(%rax), %xmm0
+ 1145 0284 F30F7F85 		movdqu	%xmm0, -9520(%rbp)
+ 1145      D0DAFFFF 
+ 1146 028c F30F6F85 		movdqu	-9776(%rbp), %xmm0
+ 1146      D0D9FFFF 
+ 1147 0294 F30F7F85 		movdqu	%xmm0, -9536(%rbp)
+ 1147      C0DAFFFF 
+ 1148 029c F30F6F85 		movdqu	-9520(%rbp), %xmm0
+ 1148      D0DAFFFF 
+ 1149 02a4 F30F7F85 		movdqu	%xmm0, -9488(%rbp)
+ 1149      F0DAFFFF 
+ 1150 02ac F30F6F85 		movdqu	-9536(%rbp), %xmm0
+ 1150      C0DAFFFF 
+ 1151 02b4 F30F7F85 		movdqu	%xmm0, -9504(%rbp)
+ 1151      E0DAFFFF 
+ 1152              	.LBB708:
+ 1153              	.LBB709:
+ 1154              	.LBB710:
+ 1155              	.LBB711:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1156              		.loc 3 529 0
+ 1157 02bc F30F6F8D 		movdqu	-9504(%rbp), %xmm1
+ 1157      E0DAFFFF 
+ 1158 02c4 F30F6F85 		movdqu	-9488(%rbp), %xmm0
+ 1158      F0DAFFFF 
+ 1159 02cc 660F3800 		pshufb	%xmm1, %xmm0
+ 1159      C1
+ 1160              	.LBE711:
+ 1161              	.LBE710:
+ 1162              	.LBE709:
+ 1163              	.LBE708:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 1164              		.loc 2 872 0
+ 1165 02d1 F30F7F85 		movdqu	%xmm0, -9776(%rbp)
+ 1165      D0D9FFFF 
+ 1166 02d9 F30F6F85 		movdqu	-9792(%rbp), %xmm0
+ 1166      C0D9FFFF 
+ 1167 02e1 F30F7F85 		movdqu	%xmm0, -9456(%rbp)
+ 1167      10DBFFFF 
+ 1168 02e9 F30F6F85 		movdqu	-9776(%rbp), %xmm0
+ 1168      D0D9FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 66
+
+
+ 1169 02f1 F30F7F85 		movdqu	%xmm0, -9472(%rbp)
+ 1169      00DBFFFF 
+ 1170              	.LBB712:
+ 1171              	.LBB713:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 1172              		.loc 2 234 0
+ 1173 02f9 F30F6F85 		movdqu	-9472(%rbp), %xmm0
+ 1173      00DBFFFF 
+ 1174 0301 F30F6F8D 		movdqu	-9456(%rbp), %xmm1
+ 1174      10DBFFFF 
+ 1175 0309 660FEBC1 		por	%xmm1, %xmm0
+ 1176              	.LBE713:
+ 1177              	.LBE712:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 1178              		.loc 2 874 0
+ 1179 030d F30F7F85 		movdqu	%xmm0, -9792(%rbp)
+ 1179      C0D9FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 1180              		.loc 2 876 0
+ 1181 0315 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 1181      00000000 
+ 1182 031d F30F6F8D 		movdqu	-9760(%rbp), %xmm1
+ 1182      E0D9FFFF 
+ 1183 0325 F30F7F8D 		movdqu	%xmm1, -9424(%rbp)
+ 1183      30DBFFFF 
+ 1184 032d F30F7F85 		movdqu	%xmm0, -9440(%rbp)
+ 1184      20DBFFFF 
+ 1185              	.LBB714:
+ 1186              	.LBB715:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 1187              		.loc 2 290 0
+ 1188 0335 F30F6F8D 		movdqu	-9440(%rbp), %xmm1
+ 1188      20DBFFFF 
+ 1189 033d F30F6F85 		movdqu	-9424(%rbp), %xmm0
+ 1189      30DBFFFF 
+ 1190 0345 660FF8C1 		psubb	%xmm1, %xmm0
+ 1191              	.LBE715:
+ 1192              	.LBE714:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 1193              		.loc 2 876 0
+ 1194 0349 F30F7F85 		movdqu	%xmm0, -9760(%rbp)
+ 1194      E0D9FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 1195              		.loc 2 878 0
+ 1196 0351 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 1196      00000000 
+ 1197 0359 F30F6F8D 		movdqu	-9760(%rbp), %xmm1
+ 1197      E0D9FFFF 
+ 1198 0361 F30F7F8D 		movdqu	%xmm1, -9392(%rbp)
+ 1198      50DBFFFF 
+ 1199 0369 F30F7F85 		movdqu	%xmm0, -9408(%rbp)
+ 1199      40DBFFFF 
+ 1200              	.LBB716:
+ 1201              	.LBB717:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 1202              		.loc 2 206 0
+ 1203 0371 F30F6F85 		movdqu	-9408(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 67
+
+
+ 1203      40DBFFFF 
+ 1204 0379 F30F6F8D 		movdqu	-9392(%rbp), %xmm1
+ 1204      50DBFFFF 
+ 1205 0381 660FDBC1 		pand	%xmm1, %xmm0
+ 1206              	.LBE717:
+ 1207              	.LBE716:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 1208              		.loc 2 878 0
+ 1209 0385 F30F7F85 		movdqu	%xmm0, -9760(%rbp)
+ 1209      E0D9FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 1210              		.loc 2 866 0
+ 1211 038d 8385BCD9 		addl	$1, -9796(%rbp)
+ 1211      FFFF01
+ 1212              	.L4:
+ 1213 0394 83BDBCD9 		cmpl	$15, -9796(%rbp)
+ 1213      FFFF0F
+ 1214 039b 0F8635FE 		jbe	.L5
+ 1214      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 1215              		.loc 2 882 0
+ 1216 03a1 F30F6F85 		movdqu	-9792(%rbp), %xmm0
+ 1216      C0D9FFFF 
+ 1217              	.LBE695:
+ 1218              	.LBE694:
+ 1219              	.LBE693:
+ 1220              	.LBE692:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 1221              		.loc 2 1682 0
+ 1222 03a9 660F7F85 		movdqa	%xmm0, -11120(%rbp)
+ 1222      90D4FFFF 
+ 1223              	.LBB718:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 1224              		.loc 2 1683 0
+ 1225 03b1 660F6F85 		movdqa	-11120(%rbp), %xmm0
+ 1225      90D4FFFF 
+ 1226 03b9 F30F7F85 		movdqu	%xmm0, -10576(%rbp)
+ 1226      B0D6FFFF 
+ 1227 03c1 E8000000 		call	KDbgWriterGet at PLT
+ 1227      00
+ 1228 03c6 4885C0   		testq	%rax, %rax
+ 1229 03c9 7479     		je	.L7
+ 1230 03cb BF010000 		movl	$1, %edi
+ 1230      00
+ 1231 03d0 E8000000 		call	KDbgCondToFlag at PLT
+ 1231      00
+ 1232 03d5 4889C6   		movq	%rax, %rsi
+ 1233 03d8 BF100000 		movl	$16, %edi
+ 1233      00
+ 1234 03dd E8000000 		call	KDbgTestModConds at PLT
+ 1234      00
+ 1235 03e2 84C0     		testb	%al, %al
+ 1236 03e4 745E     		je	.L7
+ 1237 03e6 8B85BCD6 		movl	-10564(%rbp), %eax
+ 1237      FFFF
+ 1238 03ec 89C7     		movl	%eax, %edi
+ 1239 03ee E80DFCFF 		call	bswap_32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 68
+
+
+ 1239      FF
+ 1240 03f3 4189C5   		movl	%eax, %r13d
+ 1241 03f6 8B85B8D6 		movl	-10568(%rbp), %eax
+ 1241      FFFF
+ 1242 03fc 89C7     		movl	%eax, %edi
+ 1243 03fe E8FDFBFF 		call	bswap_32
+ 1243      FF
+ 1244 0403 4189C4   		movl	%eax, %r12d
+ 1245 0406 8B85B4D6 		movl	-10572(%rbp), %eax
+ 1245      FFFF
+ 1246 040c 89C7     		movl	%eax, %edi
+ 1247 040e E8EDFBFF 		call	bswap_32
+ 1247      FF
+ 1248 0413 89C3     		movl	%eax, %ebx
+ 1249 0415 8B85B0D6 		movl	-10576(%rbp), %eax
+ 1249      FFFF
+ 1250 041b 89C7     		movl	%eax, %edi
+ 1251 041d E8DEFBFF 		call	bswap_32
+ 1251      FF
+ 1252 0422 4589E9   		movl	%r13d, %r9d
+ 1253 0425 4589E0   		movl	%r12d, %r8d
+ 1254 0428 89D9     		movl	%ebx, %ecx
+ 1255 042a 89C2     		movl	%eax, %edx
+ 1256 042c 488D3500 		leaq	.LC0(%rip), %rsi
+ 1256      000000
+ 1257 0433 488D3D00 		leaq	.LC1(%rip), %rdi
+ 1257      000000
+ 1258 043a B8000000 		movl	$0, %eax
+ 1258      00
+ 1259 043f E8000000 		call	KDbgMsg at PLT
+ 1259      00
+ 1260              	.L7:
+ 1261 0444 660F6F85 		movdqa	-11120(%rbp), %xmm0
+ 1261      90D4FFFF 
+ 1262 044c F30F7F85 		movdqu	%xmm0, -9376(%rbp)
+ 1262      60DBFFFF 
+ 1263              	.LBE718:
+ 1264              	.LBB719:
+ 1265              	.LBB720:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 1266              		.loc 2 667 0
+ 1267 0454 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 1267      00000000 
+ 1268 045c F30F6F8D 		movdqu	-9376(%rbp), %xmm1
+ 1268      60DBFFFF 
+ 1269 0464 F30F7F8D 		movdqu	%xmm1, -9344(%rbp)
+ 1269      80DBFFFF 
+ 1270 046c F30F7F85 		movdqu	%xmm0, -9360(%rbp)
+ 1270      70DBFFFF 
+ 1271 0474 F30F6F85 		movdqu	-9344(%rbp), %xmm0
+ 1271      80DBFFFF 
+ 1272 047c F30F7F85 		movdqu	%xmm0, -9312(%rbp)
+ 1272      A0DBFFFF 
+ 1273 0484 F30F6F85 		movdqu	-9360(%rbp), %xmm0
+ 1273      70DBFFFF 
+ 1274 048c F30F7F85 		movdqu	%xmm0, -9328(%rbp)
+ 1274      90DBFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 69
+
+
+ 1275              	.LBB721:
+ 1276              	.LBB722:
+ 1277              	.LBB723:
+ 1278              	.LBB724:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1279              		.loc 3 529 0
+ 1280 0494 F30F6F8D 		movdqu	-9328(%rbp), %xmm1
+ 1280      90DBFFFF 
+ 1281 049c F30F6F85 		movdqu	-9312(%rbp), %xmm0
+ 1281      A0DBFFFF 
+ 1282 04a4 660F3800 		pshufb	%xmm1, %xmm0
+ 1282      C1
+ 1283              	.LBE724:
+ 1284              	.LBE723:
+ 1285              	.LBE722:
+ 1286              	.LBE721:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 1287              		.loc 2 667 0
+ 1288 04a9 F30F7F85 		movdqu	%xmm0, -9376(%rbp)
+ 1288      60DBFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 1289              		.loc 2 668 0
+ 1290 04b1 F30F6F85 		movdqu	-9376(%rbp), %xmm0
+ 1290      60DBFFFF 
+ 1291              	.LBE720:
+ 1292              	.LBE719:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 1293              		.loc 2 1684 0
+ 1294 04b9 660F7F85 		movdqa	%xmm0, -11120(%rbp)
+ 1294      90D4FFFF 
+ 1295              	.LBB725:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 1296              		.loc 2 1685 0
+ 1297 04c1 660F6F85 		movdqa	-11120(%rbp), %xmm0
+ 1297      90D4FFFF 
+ 1298 04c9 F30F7F85 		movdqu	%xmm0, -10592(%rbp)
+ 1298      A0D6FFFF 
+ 1299 04d1 E8000000 		call	KDbgWriterGet at PLT
+ 1299      00
+ 1300 04d6 4885C0   		testq	%rax, %rax
+ 1301 04d9 7479     		je	.L9
+ 1302 04db BF010000 		movl	$1, %edi
+ 1302      00
+ 1303 04e0 E8000000 		call	KDbgCondToFlag at PLT
+ 1303      00
+ 1304 04e5 4889C6   		movq	%rax, %rsi
+ 1305 04e8 BF100000 		movl	$16, %edi
+ 1305      00
+ 1306 04ed E8000000 		call	KDbgTestModConds at PLT
+ 1306      00
+ 1307 04f2 84C0     		testb	%al, %al
+ 1308 04f4 745E     		je	.L9
+ 1309 04f6 8B85ACD6 		movl	-10580(%rbp), %eax
+ 1309      FFFF
+ 1310 04fc 89C7     		movl	%eax, %edi
+ 1311 04fe E8FDFAFF 		call	bswap_32
+ 1311      FF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 70
+
+
+ 1312 0503 4189C5   		movl	%eax, %r13d
+ 1313 0506 8B85A8D6 		movl	-10584(%rbp), %eax
+ 1313      FFFF
+ 1314 050c 89C7     		movl	%eax, %edi
+ 1315 050e E8EDFAFF 		call	bswap_32
+ 1315      FF
+ 1316 0513 4189C4   		movl	%eax, %r12d
+ 1317 0516 8B85A4D6 		movl	-10588(%rbp), %eax
+ 1317      FFFF
+ 1318 051c 89C7     		movl	%eax, %edi
+ 1319 051e E8DDFAFF 		call	bswap_32
+ 1319      FF
+ 1320 0523 89C3     		movl	%eax, %ebx
+ 1321 0525 8B85A0D6 		movl	-10592(%rbp), %eax
+ 1321      FFFF
+ 1322 052b 89C7     		movl	%eax, %edi
+ 1323 052d E8CEFAFF 		call	bswap_32
+ 1323      FF
+ 1324 0532 4589E9   		movl	%r13d, %r9d
+ 1325 0535 4589E0   		movl	%r12d, %r8d
+ 1326 0538 89D9     		movl	%ebx, %ecx
+ 1327 053a 89C2     		movl	%eax, %edx
+ 1328 053c 488D3500 		leaq	.LC2(%rip), %rsi
+ 1328      000000
+ 1329 0543 488D3D00 		leaq	.LC1(%rip), %rdi
+ 1329      000000
+ 1330 054a B8000000 		movl	$0, %eax
+ 1330      00
+ 1331 054f E8000000 		call	KDbgMsg at PLT
+ 1331      00
+ 1332              	.L9:
+ 1333 0554 660F6F85 		movdqa	-11120(%rbp), %xmm0
+ 1333      90D4FFFF 
+ 1334 055c F30F7F85 		movdqu	%xmm0, -9280(%rbp)
+ 1334      C0DBFFFF 
+ 1335 0564 660F6F85 		movdqa	-11104(%rbp), %xmm0
+ 1335      A0D4FFFF 
+ 1336 056c F30F7F85 		movdqu	%xmm0, -9296(%rbp)
+ 1336      B0DBFFFF 
+ 1337              	.LBE725:
+ 1338              	.LBB726:
+ 1339              	.LBB727:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 1340              		.loc 2 178 0
+ 1341 0574 F30F6F85 		movdqu	-9296(%rbp), %xmm0
+ 1341      B0DBFFFF 
+ 1342 057c F30F6F8D 		movdqu	-9280(%rbp), %xmm1
+ 1342      C0DBFFFF 
+ 1343 0584 660FEFC1 		pxor	%xmm1, %xmm0
+ 1344              	.LBE727:
+ 1345              	.LBE726:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 1346              		.loc 2 1686 0
+ 1347 0588 660F7F85 		movdqa	%xmm0, -11120(%rbp)
+ 1347      90D4FFFF 
+ 1348              	.LBB728:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+
GAS LISTING /tmp/ccjbMjHD.s 			page 71
+
+
+ 1349              		.loc 2 1687 0
+ 1350 0590 660F6F85 		movdqa	-11120(%rbp), %xmm0
+ 1350      90D4FFFF 
+ 1351 0598 F30F7F85 		movdqu	%xmm0, -10608(%rbp)
+ 1351      90D6FFFF 
+ 1352 05a0 E8000000 		call	KDbgWriterGet at PLT
+ 1352      00
+ 1353 05a5 4885C0   		testq	%rax, %rax
+ 1354 05a8 7479     		je	.L11
+ 1355 05aa BF010000 		movl	$1, %edi
+ 1355      00
+ 1356 05af E8000000 		call	KDbgCondToFlag at PLT
+ 1356      00
+ 1357 05b4 4889C6   		movq	%rax, %rsi
+ 1358 05b7 BF100000 		movl	$16, %edi
+ 1358      00
+ 1359 05bc E8000000 		call	KDbgTestModConds at PLT
+ 1359      00
+ 1360 05c1 84C0     		testb	%al, %al
+ 1361 05c3 745E     		je	.L11
+ 1362 05c5 8B859CD6 		movl	-10596(%rbp), %eax
+ 1362      FFFF
+ 1363 05cb 89C7     		movl	%eax, %edi
+ 1364 05cd E82EFAFF 		call	bswap_32
+ 1364      FF
+ 1365 05d2 4189C5   		movl	%eax, %r13d
+ 1366 05d5 8B8598D6 		movl	-10600(%rbp), %eax
+ 1366      FFFF
+ 1367 05db 89C7     		movl	%eax, %edi
+ 1368 05dd E81EFAFF 		call	bswap_32
+ 1368      FF
+ 1369 05e2 4189C4   		movl	%eax, %r12d
+ 1370 05e5 8B8594D6 		movl	-10604(%rbp), %eax
+ 1370      FFFF
+ 1371 05eb 89C7     		movl	%eax, %edi
+ 1372 05ed E80EFAFF 		call	bswap_32
+ 1372      FF
+ 1373 05f2 89C3     		movl	%eax, %ebx
+ 1374 05f4 8B8590D6 		movl	-10608(%rbp), %eax
+ 1374      FFFF
+ 1375 05fa 89C7     		movl	%eax, %edi
+ 1376 05fc E8FFF9FF 		call	bswap_32
+ 1376      FF
+ 1377 0601 4589E9   		movl	%r13d, %r9d
+ 1378 0604 4589E0   		movl	%r12d, %r8d
+ 1379 0607 89D9     		movl	%ebx, %ecx
+ 1380 0609 89C2     		movl	%eax, %edx
+ 1381 060b 488D3500 		leaq	.LC3(%rip), %rsi
+ 1381      000000
+ 1382 0612 488D3D00 		leaq	.LC1(%rip), %rdi
+ 1382      000000
+ 1383 0619 B8000000 		movl	$0, %eax
+ 1383      00
+ 1384 061e E8000000 		call	KDbgMsg at PLT
+ 1384      00
+ 1385              	.L11:
+ 1386 0623 660F6F85 		movdqa	-11120(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 72
+
+
+ 1386      90D4FFFF 
+ 1387 062b F30F7F85 		movdqu	%xmm0, -9264(%rbp)
+ 1387      D0DBFFFF 
+ 1388 0633 F30F6F85 		movdqu	-9264(%rbp), %xmm0
+ 1388      D0DBFFFF 
+ 1389 063b F30F7F85 		movdqu	%xmm0, -9232(%rbp)
+ 1389      F0DBFFFF 
+ 1390              	.LBE728:
+ 1391              	.LBB729:
+ 1392              	.LBB730:
+ 1393              	.LBB731:
+ 1394              	.LBB732:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 1395              		.loc 3 450 0
+ 1396 0643 F30F6F85 		movdqu	-9232(%rbp), %xmm0
+ 1396      F0DBFFFF 
+ 1397 064b 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 1397      FF
+ 1398              	.LBE732:
+ 1399              	.LBE731:
+ 1400              	.LBE730:
+ 1401              	.LBE729:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 1402              		.loc 2 1688 0
+ 1403 0650 660F7F85 		movdqa	%xmm0, -11120(%rbp)
+ 1403      90D4FFFF 
+ 1404              	.LBB733:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 1405              		.loc 2 1689 0
+ 1406 0658 660F6F85 		movdqa	-11120(%rbp), %xmm0
+ 1406      90D4FFFF 
+ 1407 0660 F30F7F85 		movdqu	%xmm0, -10624(%rbp)
+ 1407      80D6FFFF 
+ 1408 0668 E8000000 		call	KDbgWriterGet at PLT
+ 1408      00
+ 1409 066d 4885C0   		testq	%rax, %rax
+ 1410 0670 7479     		je	.L13
+ 1411 0672 BF010000 		movl	$1, %edi
+ 1411      00
+ 1412 0677 E8000000 		call	KDbgCondToFlag at PLT
+ 1412      00
+ 1413 067c 4889C6   		movq	%rax, %rsi
+ 1414 067f BF100000 		movl	$16, %edi
+ 1414      00
+ 1415 0684 E8000000 		call	KDbgTestModConds at PLT
+ 1415      00
+ 1416 0689 84C0     		testb	%al, %al
+ 1417 068b 745E     		je	.L13
+ 1418 068d 8B858CD6 		movl	-10612(%rbp), %eax
+ 1418      FFFF
+ 1419 0693 89C7     		movl	%eax, %edi
+ 1420 0695 E866F9FF 		call	bswap_32
+ 1420      FF
+ 1421 069a 4189C5   		movl	%eax, %r13d
+ 1422 069d 8B8588D6 		movl	-10616(%rbp), %eax
+ 1422      FFFF
+ 1423 06a3 89C7     		movl	%eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 73
+
+
+ 1424 06a5 E856F9FF 		call	bswap_32
+ 1424      FF
+ 1425 06aa 4189C4   		movl	%eax, %r12d
+ 1426 06ad 8B8584D6 		movl	-10620(%rbp), %eax
+ 1426      FFFF
+ 1427 06b3 89C7     		movl	%eax, %edi
+ 1428 06b5 E846F9FF 		call	bswap_32
+ 1428      FF
+ 1429 06ba 89C3     		movl	%eax, %ebx
+ 1430 06bc 8B8580D6 		movl	-10624(%rbp), %eax
+ 1430      FFFF
+ 1431 06c2 89C7     		movl	%eax, %edi
+ 1432 06c4 E837F9FF 		call	bswap_32
+ 1432      FF
+ 1433 06c9 4589E9   		movl	%r13d, %r9d
+ 1434 06cc 4589E0   		movl	%r12d, %r8d
+ 1435 06cf 89D9     		movl	%ebx, %ecx
+ 1436 06d1 89C2     		movl	%eax, %edx
+ 1437 06d3 488D3500 		leaq	.LC4(%rip), %rsi
+ 1437      000000
+ 1438 06da 488D3D00 		leaq	.LC1(%rip), %rdi
+ 1438      000000
+ 1439 06e1 B8000000 		movl	$0, %eax
+ 1439      00
+ 1440 06e6 E8000000 		call	KDbgMsg at PLT
+ 1440      00
+ 1441              	.L13:
+ 1442              	.LBE733:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 1443              		.loc 2 1690 0
+ 1444 06eb 660F6F85 		movdqa	-11120(%rbp), %xmm0
+ 1444      90D4FFFF 
+ 1445              	.LBE687:
+ 1446              	.LBE686:
+1737:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1738:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #define KE128(rcon,offset) \
+1739:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     kgastate = AESBCMEMBER(AesKeyGenAssistColumn3) (state, rcon); \
+1740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(ShiftXorColumns) (state); \
+1741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= kgastate; \
+1742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[offset] = state
+1743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x01,1);
+ 1447              		.loc 2 1744 0
+ 1448 06f3 F30F7F85 		movdqu	%xmm0, -9968(%rbp)
+ 1448      10D9FFFF 
+ 1449 06fb F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 1449      00D9FFFF 
+ 1450 0703 F30F7F85 		movdqu	%xmm0, -9216(%rbp)
+ 1450      00DCFFFF 
+ 1451              	.LBB734:
+ 1452              	.LBB735:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 1453              		.loc 2 1565 0
+ 1454 070b F30F6F85 		movdqu	-9216(%rbp), %xmm0
+ 1454      00DCFFFF 
+ 1455 0713 660F7F85 		movdqa	%xmm0, -11088(%rbp)
+ 1455      B0D4FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 74
+
+
+ 1456 071b 660F6F85 		movdqa	-11088(%rbp), %xmm0
+ 1456      B0D4FFFF 
+ 1457 0723 F30F7F85 		movdqu	%xmm0, -9200(%rbp)
+ 1457      10DCFFFF 
+ 1458              	.LBB736:
+ 1459              	.LBB737:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1460              		.loc 2 1278 0
+ 1461 072b 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 1461      00000000 
+ 1462 0733 F30F6F8D 		movdqu	-9200(%rbp), %xmm1
+ 1462      10DCFFFF 
+ 1463 073b F30F7F8D 		movdqu	%xmm1, -9168(%rbp)
+ 1463      30DCFFFF 
+ 1464 0743 F30F7F85 		movdqu	%xmm0, -9184(%rbp)
+ 1464      20DCFFFF 
+ 1465 074b F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 1465      30DCFFFF 
+ 1466 0753 F30F7F85 		movdqu	%xmm0, -9136(%rbp)
+ 1466      50DCFFFF 
+ 1467 075b F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 1467      20DCFFFF 
+ 1468 0763 F30F7F85 		movdqu	%xmm0, -9152(%rbp)
+ 1468      40DCFFFF 
+ 1469              	.LBB738:
+ 1470              	.LBB739:
+ 1471              	.LBB740:
+ 1472              	.LBB741:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1473              		.loc 3 529 0
+ 1474 076b F30F6F8D 		movdqu	-9152(%rbp), %xmm1
+ 1474      40DCFFFF 
+ 1475 0773 F30F6F85 		movdqu	-9136(%rbp), %xmm0
+ 1475      50DCFFFF 
+ 1476 077b 660F3800 		pshufb	%xmm1, %xmm0
+ 1476      C1
+ 1477              	.LBE741:
+ 1478              	.LBE740:
+ 1479              	.LBE739:
+ 1480              	.LBE738:
+ 1481              	.LBE737:
+ 1482              	.LBE736:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1483              		.loc 2 1567 0
+ 1484 0780 660F7F85 		movdqa	%xmm0, -11088(%rbp)
+ 1484      B0D4FFFF 
+ 1485 0788 660F6F85 		movdqa	-11088(%rbp), %xmm0
+ 1485      B0D4FFFF 
+ 1486 0790 660FEF85 		pxor	-9216(%rbp), %xmm0
+ 1486      00DCFFFF 
+ 1487 0798 F30F7F85 		movdqu	%xmm0, -9216(%rbp)
+ 1487      00DCFFFF 
+ 1488 07a0 660F6F85 		movdqa	-11088(%rbp), %xmm0
+ 1488      B0D4FFFF 
+ 1489 07a8 F30F7F85 		movdqu	%xmm0, -9120(%rbp)
+ 1489      60DCFFFF 
+ 1490              	.LBB742:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 75
+
+
+ 1491              	.LBB743:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1492              		.loc 2 1278 0
+ 1493 07b0 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 1493      00000000 
+ 1494 07b8 F30F6F8D 		movdqu	-9120(%rbp), %xmm1
+ 1494      60DCFFFF 
+ 1495 07c0 F30F7F8D 		movdqu	%xmm1, -9088(%rbp)
+ 1495      80DCFFFF 
+ 1496 07c8 F30F7F85 		movdqu	%xmm0, -9104(%rbp)
+ 1496      70DCFFFF 
+ 1497 07d0 F30F6F85 		movdqu	-9088(%rbp), %xmm0
+ 1497      80DCFFFF 
+ 1498 07d8 F30F7F85 		movdqu	%xmm0, -9056(%rbp)
+ 1498      A0DCFFFF 
+ 1499 07e0 F30F6F85 		movdqu	-9104(%rbp), %xmm0
+ 1499      70DCFFFF 
+ 1500 07e8 F30F7F85 		movdqu	%xmm0, -9072(%rbp)
+ 1500      90DCFFFF 
+ 1501              	.LBB744:
+ 1502              	.LBB745:
+ 1503              	.LBB746:
+ 1504              	.LBB747:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1505              		.loc 3 529 0
+ 1506 07f0 F30F6F8D 		movdqu	-9072(%rbp), %xmm1
+ 1506      90DCFFFF 
+ 1507 07f8 F30F6F85 		movdqu	-9056(%rbp), %xmm0
+ 1507      A0DCFFFF 
+ 1508 0800 660F3800 		pshufb	%xmm1, %xmm0
+ 1508      C1
+ 1509              	.LBE747:
+ 1510              	.LBE746:
+ 1511              	.LBE745:
+ 1512              	.LBE744:
+ 1513              	.LBE743:
+ 1514              	.LBE742:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1515              		.loc 2 1568 0
+ 1516 0805 660F7F85 		movdqa	%xmm0, -11088(%rbp)
+ 1516      B0D4FFFF 
+ 1517 080d 660F6F85 		movdqa	-11088(%rbp), %xmm0
+ 1517      B0D4FFFF 
+ 1518 0815 660FEF85 		pxor	-9216(%rbp), %xmm0
+ 1518      00DCFFFF 
+ 1519 081d F30F7F85 		movdqu	%xmm0, -9216(%rbp)
+ 1519      00DCFFFF 
+ 1520 0825 660F6F85 		movdqa	-11088(%rbp), %xmm0
+ 1520      B0D4FFFF 
+ 1521 082d F30F7F85 		movdqu	%xmm0, -9040(%rbp)
+ 1521      B0DCFFFF 
+ 1522              	.LBB748:
+ 1523              	.LBB749:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 1524              		.loc 2 1278 0
+ 1525 0835 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 1525      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 76
+
+
+ 1526 083d F30F6F8D 		movdqu	-9040(%rbp), %xmm1
+ 1526      B0DCFFFF 
+ 1527 0845 F30F7F8D 		movdqu	%xmm1, -9008(%rbp)
+ 1527      D0DCFFFF 
+ 1528 084d F30F7F85 		movdqu	%xmm0, -9024(%rbp)
+ 1528      C0DCFFFF 
+ 1529 0855 F30F6F85 		movdqu	-9008(%rbp), %xmm0
+ 1529      D0DCFFFF 
+ 1530 085d F30F7F85 		movdqu	%xmm0, -8976(%rbp)
+ 1530      F0DCFFFF 
+ 1531 0865 F30F6F85 		movdqu	-9024(%rbp), %xmm0
+ 1531      C0DCFFFF 
+ 1532 086d F30F7F85 		movdqu	%xmm0, -8992(%rbp)
+ 1532      E0DCFFFF 
+ 1533              	.LBB750:
+ 1534              	.LBB751:
+ 1535              	.LBB752:
+ 1536              	.LBB753:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1537              		.loc 3 529 0
+ 1538 0875 F30F6F8D 		movdqu	-8992(%rbp), %xmm1
+ 1538      E0DCFFFF 
+ 1539 087d F30F6F85 		movdqu	-8976(%rbp), %xmm0
+ 1539      F0DCFFFF 
+ 1540 0885 660F3800 		pshufb	%xmm1, %xmm0
+ 1540      C1
+ 1541              	.LBE753:
+ 1542              	.LBE752:
+ 1543              	.LBE751:
+ 1544              	.LBE750:
+ 1545              	.LBE749:
+ 1546              	.LBE748:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 1547              		.loc 2 1569 0
+ 1548 088a 660F7F85 		movdqa	%xmm0, -11088(%rbp)
+ 1548      B0D4FFFF 
+ 1549 0892 660F6F85 		movdqa	-11088(%rbp), %xmm0
+ 1549      B0D4FFFF 
+ 1550 089a 660FEF85 		pxor	-9216(%rbp), %xmm0
+ 1550      00DCFFFF 
+ 1551 08a2 F30F7F85 		movdqu	%xmm0, -9216(%rbp)
+ 1551      00DCFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 1552              		.loc 2 1571 0
+ 1553 08aa F30F6F85 		movdqu	-9216(%rbp), %xmm0
+ 1553      00DCFFFF 
+ 1554              	.LBE735:
+ 1555              	.LBE734:
+ 1556              		.loc 2 1744 0
+ 1557 08b2 F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+ 1557      00D9FFFF 
+ 1558 08ba F30F6F85 		movdqu	-9968(%rbp), %xmm0
+ 1558      10D9FFFF 
+ 1559 08c2 F30F6F8D 		movdqu	-9984(%rbp), %xmm1
+ 1559      00D9FFFF 
+ 1560 08ca 660FEFC1 		pxor	%xmm1, %xmm0
+ 1561 08ce F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 77
+
+
+ 1561      00D9FFFF 
+ 1562 08d6 488B8578 		movq	-10632(%rbp), %rax
+ 1562      D6FFFF
+ 1563 08dd 4883C010 		addq	$16, %rax
+ 1564 08e1 F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 1564      00D9FFFF 
+ 1565 08e9 F30F7F00 		movdqu	%xmm0, (%rax)
+ 1566 08ed F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 1566      00D9FFFF 
+ 1567 08f5 F30F7F85 		movdqu	%xmm0, -8944(%rbp)
+ 1567      10DDFFFF 
+ 1568              	.LBB754:
+ 1569              	.LBB755:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 1570              		.loc 2 1681 0
+ 1571 08fd B8020000 		movl	$2, %eax
+ 1571      00
+ 1572 0902 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 1572      00000000 
+ 1573 090a F30F7F85 		movdqu	%xmm0, -8912(%rbp)
+ 1573      30DDFFFF 
+ 1574 0912 89852CDD 		movl	%eax, -8916(%rbp)
+ 1574      FFFF
+ 1575 0918 F30F6F85 		movdqu	-8912(%rbp), %xmm0
+ 1575      30DDFFFF 
+ 1576 0920 F30F7F85 		movdqu	%xmm0, -8880(%rbp)
+ 1576      50DDFFFF 
+ 1577 0928 8B852CDD 		movl	-8916(%rbp), %eax
+ 1577      FFFF
+ 1578 092e 89854CDD 		movl	%eax, -8884(%rbp)
+ 1578      FFFF
+ 1579              	.LBB756:
+ 1580              	.LBB757:
+ 1581              	.LBB758:
+ 1582              	.LBB759:
+ 1583              		.loc 3 598 0
+ 1584 0934 8B854CDD 		movl	-8884(%rbp), %eax
+ 1584      FFFF
+ 1585 093a F30F6F85 		movdqu	-8880(%rbp), %xmm0
+ 1585      50DDFFFF 
+ 1586 0942 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 1586      C003
+ 1587              	.LBE759:
+ 1588              	.LBE758:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 1589              		.loc 2 519 0
+ 1590 0948 F30F7F85 		movdqu	%xmm0, -8912(%rbp)
+ 1590      30DDFFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 1591              		.loc 2 526 0
+ 1592 0950 F30F6F85 		movdqu	-8912(%rbp), %xmm0
+ 1592      30DDFFFF 
+ 1593              	.LBE757:
+ 1594              	.LBE756:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 1595              		.loc 2 1681 0
+ 1596 0958 660F7F85 		movdqa	%xmm0, -11056(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 78
+
+
+ 1596      D0D4FFFF 
+ 1597 0960 F30F6F85 		movdqu	-8944(%rbp), %xmm0
+ 1597      10DDFFFF 
+ 1598 0968 F30F7F85 		movdqu	%xmm0, -8864(%rbp)
+ 1598      60DDFFFF 
+ 1599 0970 F30F6F85 		movdqu	-8864(%rbp), %xmm0
+ 1599      60DDFFFF 
+ 1600 0978 F30F7F85 		movdqu	%xmm0, -8832(%rbp)
+ 1600      80DDFFFF 
+ 1601 0980 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 1601      000000
+ 1602 0987 48898578 		movq	%rax, -8840(%rbp)
+ 1602      DDFFFF
+ 1603              	.LBB760:
+ 1604              	.LBB761:
+ 1605              	.LBB762:
+ 1606              	.LBB763:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 1607              		.loc 2 851 0
+ 1608 098e 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 1608      00000000 
+ 1609 0996 F30F7F85 		movdqu	%xmm0, -8800(%rbp)
+ 1609      A0DDFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 1610              		.loc 2 854 0
+ 1611 099e 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 1611      00000000 
+ 1612 09a6 F30F6F8D 		movdqu	-8832(%rbp), %xmm1
+ 1612      80DDFFFF 
+ 1613 09ae F30F7F8D 		movdqu	%xmm1, -8720(%rbp)
+ 1613      F0DDFFFF 
+ 1614 09b6 F30F7F85 		movdqu	%xmm0, -8736(%rbp)
+ 1614      E0DDFFFF 
+ 1615              	.LBB764:
+ 1616              	.LBB765:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 1617              		.loc 2 206 0
+ 1618 09be F30F6F85 		movdqu	-8736(%rbp), %xmm0
+ 1618      E0DDFFFF 
+ 1619 09c6 F30F6F8D 		movdqu	-8720(%rbp), %xmm1
+ 1619      F0DDFFFF 
+ 1620 09ce 660FDBC1 		pand	%xmm1, %xmm0
+ 1621              	.LBE765:
+ 1622              	.LBE764:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 1623              		.loc 2 854 0
+ 1624 09d2 F30F7F85 		movdqu	%xmm0, -8752(%rbp)
+ 1624      D0DDFFFF 
+ 1625 09da F30F6F85 		movdqu	-8832(%rbp), %xmm0
+ 1625      80DDFFFF 
+ 1626 09e2 F30F7F85 		movdqu	%xmm0, -8688(%rbp)
+ 1626      10DEFFFF 
+ 1627              	.LBB766:
+ 1628              	.LBB767:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 1629              		.loc 3 433 0
+ 1630 09ea F30F6F85 		movdqu	-8688(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 79
+
+
+ 1630      10DEFFFF 
+ 1631 09f2 660F72D0 		psrld	$4, %xmm0
+ 1631      04
+ 1632              	.LBE767:
+ 1633              	.LBE766:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 1634              		.loc 2 857 0
+ 1635 09f7 F30F7F85 		movdqu	%xmm0, -8768(%rbp)
+ 1635      C0DDFFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 1636              		.loc 2 859 0
+ 1637 09ff 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 1637      00000000 
+ 1638 0a07 F30F6F8D 		movdqu	-8768(%rbp), %xmm1
+ 1638      C0DDFFFF 
+ 1639 0a0f F30F7F8D 		movdqu	%xmm1, -8656(%rbp)
+ 1639      30DEFFFF 
+ 1640 0a17 F30F7F85 		movdqu	%xmm0, -8672(%rbp)
+ 1640      20DEFFFF 
+ 1641              	.LBB768:
+ 1642              	.LBB769:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 1643              		.loc 2 206 0
+ 1644 0a1f F30F6F85 		movdqu	-8672(%rbp), %xmm0
+ 1644      20DEFFFF 
+ 1645 0a27 F30F6F8D 		movdqu	-8656(%rbp), %xmm1
+ 1645      30DEFFFF 
+ 1646 0a2f 660FDBC1 		pand	%xmm1, %xmm0
+ 1647              	.LBE769:
+ 1648              	.LBE768:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 1649              		.loc 2 859 0
+ 1650 0a33 F30F7F85 		movdqu	%xmm0, -8768(%rbp)
+ 1650      C0DDFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 1651              		.loc 2 866 0
+ 1652 0a3b C7859CDD 		movl	$0, -8804(%rbp)
+ 1652      FFFF0000 
+ 1652      0000
+ 1653 0a45 E9BE0100 		jmp	.L14
+ 1653      00
+ 1654              	.L15:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 1655              		.loc 2 868 0
+ 1656 0a4a 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 1656      00000000 
+ 1657 0a52 F30F7F85 		movdqu	%xmm0, -8624(%rbp)
+ 1657      50DEFFFF 
+ 1658 0a5a F30F6F85 		movdqu	-8768(%rbp), %xmm0
+ 1658      C0DDFFFF 
+ 1659 0a62 F30F7F85 		movdqu	%xmm0, -8640(%rbp)
+ 1659      40DEFFFF 
+ 1660 0a6a F30F6F85 		movdqu	-8624(%rbp), %xmm0
+ 1660      50DEFFFF 
+ 1661 0a72 F30F7F85 		movdqu	%xmm0, -8592(%rbp)
+ 1661      70DEFFFF 
+ 1662 0a7a F30F6F85 		movdqu	-8640(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 80
+
+
+ 1662      40DEFFFF 
+ 1663 0a82 F30F7F85 		movdqu	%xmm0, -8608(%rbp)
+ 1663      60DEFFFF 
+ 1664              	.LBB770:
+ 1665              	.LBB771:
+ 1666              	.LBB772:
+ 1667              	.LBB773:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1668              		.loc 3 529 0
+ 1669 0a8a F30F6F8D 		movdqu	-8608(%rbp), %xmm1
+ 1669      60DEFFFF 
+ 1670 0a92 F30F6F85 		movdqu	-8592(%rbp), %xmm0
+ 1670      70DEFFFF 
+ 1671 0a9a 660F3800 		pshufb	%xmm1, %xmm0
+ 1671      C1
+ 1672              	.LBE773:
+ 1673              	.LBE772:
+ 1674              	.LBE771:
+ 1675              	.LBE770:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 1676              		.loc 2 868 0
+ 1677 0a9f F30F7F85 		movdqu	%xmm0, -8784(%rbp)
+ 1677      B0DDFFFF 
+ 1678 0aa7 F30F6F85 		movdqu	-8752(%rbp), %xmm0
+ 1678      D0DDFFFF 
+ 1679 0aaf F30F7F85 		movdqu	%xmm0, -8560(%rbp)
+ 1679      90DEFFFF 
+ 1680 0ab7 F30F6F85 		movdqu	-8784(%rbp), %xmm0
+ 1680      B0DDFFFF 
+ 1681 0abf F30F7F85 		movdqu	%xmm0, -8576(%rbp)
+ 1681      80DEFFFF 
+ 1682              	.LBB774:
+ 1683              	.LBB775:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 1684              		.loc 2 234 0
+ 1685 0ac7 F30F6F85 		movdqu	-8576(%rbp), %xmm0
+ 1685      80DEFFFF 
+ 1686 0acf F30F6F8D 		movdqu	-8560(%rbp), %xmm1
+ 1686      90DEFFFF 
+ 1687 0ad7 660FEBC1 		por	%xmm1, %xmm0
+ 1688              	.LBE775:
+ 1689              	.LBE774:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 1690              		.loc 2 870 0
+ 1691 0adb F30F7F85 		movdqu	%xmm0, -8784(%rbp)
+ 1691      B0DDFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 1692              		.loc 2 872 0
+ 1693 0ae3 8B859CDD 		mov	-8804(%rbp), %eax
+ 1693      FFFF
+ 1694 0ae9 48C1E004 		salq	$4, %rax
+ 1695 0aed 48038578 		addq	-8840(%rbp), %rax
+ 1695      DDFFFF
+ 1696 0af4 660F6F00 		movdqa	(%rax), %xmm0
+ 1697 0af8 F30F7F85 		movdqu	%xmm0, -8528(%rbp)
+ 1697      B0DEFFFF 
+ 1698 0b00 F30F6F85 		movdqu	-8784(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 81
+
+
+ 1698      B0DDFFFF 
+ 1699 0b08 F30F7F85 		movdqu	%xmm0, -8544(%rbp)
+ 1699      A0DEFFFF 
+ 1700 0b10 F30F6F85 		movdqu	-8528(%rbp), %xmm0
+ 1700      B0DEFFFF 
+ 1701 0b18 F30F7F85 		movdqu	%xmm0, -8496(%rbp)
+ 1701      D0DEFFFF 
+ 1702 0b20 F30F6F85 		movdqu	-8544(%rbp), %xmm0
+ 1702      A0DEFFFF 
+ 1703 0b28 F30F7F85 		movdqu	%xmm0, -8512(%rbp)
+ 1703      C0DEFFFF 
+ 1704              	.LBB776:
+ 1705              	.LBB777:
+ 1706              	.LBB778:
+ 1707              	.LBB779:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1708              		.loc 3 529 0
+ 1709 0b30 F30F6F8D 		movdqu	-8512(%rbp), %xmm1
+ 1709      C0DEFFFF 
+ 1710 0b38 F30F6F85 		movdqu	-8496(%rbp), %xmm0
+ 1710      D0DEFFFF 
+ 1711 0b40 660F3800 		pshufb	%xmm1, %xmm0
+ 1711      C1
+ 1712              	.LBE779:
+ 1713              	.LBE778:
+ 1714              	.LBE777:
+ 1715              	.LBE776:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 1716              		.loc 2 872 0
+ 1717 0b45 F30F7F85 		movdqu	%xmm0, -8784(%rbp)
+ 1717      B0DDFFFF 
+ 1718 0b4d F30F6F85 		movdqu	-8800(%rbp), %xmm0
+ 1718      A0DDFFFF 
+ 1719 0b55 F30F7F85 		movdqu	%xmm0, -8464(%rbp)
+ 1719      F0DEFFFF 
+ 1720 0b5d F30F6F85 		movdqu	-8784(%rbp), %xmm0
+ 1720      B0DDFFFF 
+ 1721 0b65 F30F7F85 		movdqu	%xmm0, -8480(%rbp)
+ 1721      E0DEFFFF 
+ 1722              	.LBB780:
+ 1723              	.LBB781:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 1724              		.loc 2 234 0
+ 1725 0b6d F30F6F85 		movdqu	-8480(%rbp), %xmm0
+ 1725      E0DEFFFF 
+ 1726 0b75 F30F6F8D 		movdqu	-8464(%rbp), %xmm1
+ 1726      F0DEFFFF 
+ 1727 0b7d 660FEBC1 		por	%xmm1, %xmm0
+ 1728              	.LBE781:
+ 1729              	.LBE780:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 1730              		.loc 2 874 0
+ 1731 0b81 F30F7F85 		movdqu	%xmm0, -8800(%rbp)
+ 1731      A0DDFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 1732              		.loc 2 876 0
+ 1733 0b89 660F6F05 		movdqa	vec_01(%rip), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 82
+
+
+ 1733      00000000 
+ 1734 0b91 F30F6F8D 		movdqu	-8768(%rbp), %xmm1
+ 1734      C0DDFFFF 
+ 1735 0b99 F30F7F8D 		movdqu	%xmm1, -8432(%rbp)
+ 1735      10DFFFFF 
+ 1736 0ba1 F30F7F85 		movdqu	%xmm0, -8448(%rbp)
+ 1736      00DFFFFF 
+ 1737              	.LBB782:
+ 1738              	.LBB783:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 1739              		.loc 2 290 0
+ 1740 0ba9 F30F6F8D 		movdqu	-8448(%rbp), %xmm1
+ 1740      00DFFFFF 
+ 1741 0bb1 F30F6F85 		movdqu	-8432(%rbp), %xmm0
+ 1741      10DFFFFF 
+ 1742 0bb9 660FF8C1 		psubb	%xmm1, %xmm0
+ 1743              	.LBE783:
+ 1744              	.LBE782:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 1745              		.loc 2 876 0
+ 1746 0bbd F30F7F85 		movdqu	%xmm0, -8768(%rbp)
+ 1746      C0DDFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 1747              		.loc 2 878 0
+ 1748 0bc5 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 1748      00000000 
+ 1749 0bcd F30F6F8D 		movdqu	-8768(%rbp), %xmm1
+ 1749      C0DDFFFF 
+ 1750 0bd5 F30F7F8D 		movdqu	%xmm1, -8400(%rbp)
+ 1750      30DFFFFF 
+ 1751 0bdd F30F7F85 		movdqu	%xmm0, -8416(%rbp)
+ 1751      20DFFFFF 
+ 1752              	.LBB784:
+ 1753              	.LBB785:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 1754              		.loc 2 206 0
+ 1755 0be5 F30F6F85 		movdqu	-8416(%rbp), %xmm0
+ 1755      20DFFFFF 
+ 1756 0bed F30F6F8D 		movdqu	-8400(%rbp), %xmm1
+ 1756      30DFFFFF 
+ 1757 0bf5 660FDBC1 		pand	%xmm1, %xmm0
+ 1758              	.LBE785:
+ 1759              	.LBE784:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 1760              		.loc 2 878 0
+ 1761 0bf9 F30F7F85 		movdqu	%xmm0, -8768(%rbp)
+ 1761      C0DDFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 1762              		.loc 2 866 0
+ 1763 0c01 83859CDD 		addl	$1, -8804(%rbp)
+ 1763      FFFF01
+ 1764              	.L14:
+ 1765 0c08 83BD9CDD 		cmpl	$15, -8804(%rbp)
+ 1765      FFFF0F
+ 1766 0c0f 0F8635FE 		jbe	.L15
+ 1766      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+
GAS LISTING /tmp/ccjbMjHD.s 			page 83
+
+
+ 1767              		.loc 2 882 0
+ 1768 0c15 F30F6F85 		movdqu	-8800(%rbp), %xmm0
+ 1768      A0DDFFFF 
+ 1769              	.LBE763:
+ 1770              	.LBE762:
+ 1771              	.LBE761:
+ 1772              	.LBE760:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 1773              		.loc 2 1682 0
+ 1774 0c1d 660F7F85 		movdqa	%xmm0, -11072(%rbp)
+ 1774      C0D4FFFF 
+ 1775              	.LBB786:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 1776              		.loc 2 1683 0
+ 1777 0c25 660F6F85 		movdqa	-11072(%rbp), %xmm0
+ 1777      C0D4FFFF 
+ 1778 0c2d F30F7F85 		movdqu	%xmm0, -10512(%rbp)
+ 1778      F0D6FFFF 
+ 1779 0c35 E8000000 		call	KDbgWriterGet at PLT
+ 1779      00
+ 1780 0c3a 4885C0   		testq	%rax, %rax
+ 1781 0c3d 7479     		je	.L17
+ 1782 0c3f BF010000 		movl	$1, %edi
+ 1782      00
+ 1783 0c44 E8000000 		call	KDbgCondToFlag at PLT
+ 1783      00
+ 1784 0c49 4889C6   		movq	%rax, %rsi
+ 1785 0c4c BF100000 		movl	$16, %edi
+ 1785      00
+ 1786 0c51 E8000000 		call	KDbgTestModConds at PLT
+ 1786      00
+ 1787 0c56 84C0     		testb	%al, %al
+ 1788 0c58 745E     		je	.L17
+ 1789 0c5a 8B85FCD6 		movl	-10500(%rbp), %eax
+ 1789      FFFF
+ 1790 0c60 89C7     		movl	%eax, %edi
+ 1791 0c62 E899F3FF 		call	bswap_32
+ 1791      FF
+ 1792 0c67 4189C5   		movl	%eax, %r13d
+ 1793 0c6a 8B85F8D6 		movl	-10504(%rbp), %eax
+ 1793      FFFF
+ 1794 0c70 89C7     		movl	%eax, %edi
+ 1795 0c72 E889F3FF 		call	bswap_32
+ 1795      FF
+ 1796 0c77 4189C4   		movl	%eax, %r12d
+ 1797 0c7a 8B85F4D6 		movl	-10508(%rbp), %eax
+ 1797      FFFF
+ 1798 0c80 89C7     		movl	%eax, %edi
+ 1799 0c82 E879F3FF 		call	bswap_32
+ 1799      FF
+ 1800 0c87 89C3     		movl	%eax, %ebx
+ 1801 0c89 8B85F0D6 		movl	-10512(%rbp), %eax
+ 1801      FFFF
+ 1802 0c8f 89C7     		movl	%eax, %edi
+ 1803 0c91 E86AF3FF 		call	bswap_32
+ 1803      FF
+ 1804 0c96 4589E9   		movl	%r13d, %r9d
+
GAS LISTING /tmp/ccjbMjHD.s 			page 84
+
+
+ 1805 0c99 4589E0   		movl	%r12d, %r8d
+ 1806 0c9c 89D9     		movl	%ebx, %ecx
+ 1807 0c9e 89C2     		movl	%eax, %edx
+ 1808 0ca0 488D3500 		leaq	.LC0(%rip), %rsi
+ 1808      000000
+ 1809 0ca7 488D3D00 		leaq	.LC1(%rip), %rdi
+ 1809      000000
+ 1810 0cae B8000000 		movl	$0, %eax
+ 1810      00
+ 1811 0cb3 E8000000 		call	KDbgMsg at PLT
+ 1811      00
+ 1812              	.L17:
+ 1813 0cb8 660F6F85 		movdqa	-11072(%rbp), %xmm0
+ 1813      C0D4FFFF 
+ 1814 0cc0 F30F7F85 		movdqu	%xmm0, -8384(%rbp)
+ 1814      40DFFFFF 
+ 1815              	.LBE786:
+ 1816              	.LBB787:
+ 1817              	.LBB788:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 1818              		.loc 2 667 0
+ 1819 0cc8 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 1819      00000000 
+ 1820 0cd0 F30F6F8D 		movdqu	-8384(%rbp), %xmm1
+ 1820      40DFFFFF 
+ 1821 0cd8 F30F7F8D 		movdqu	%xmm1, -8352(%rbp)
+ 1821      60DFFFFF 
+ 1822 0ce0 F30F7F85 		movdqu	%xmm0, -8368(%rbp)
+ 1822      50DFFFFF 
+ 1823 0ce8 F30F6F85 		movdqu	-8352(%rbp), %xmm0
+ 1823      60DFFFFF 
+ 1824 0cf0 F30F7F85 		movdqu	%xmm0, -8320(%rbp)
+ 1824      80DFFFFF 
+ 1825 0cf8 F30F6F85 		movdqu	-8368(%rbp), %xmm0
+ 1825      50DFFFFF 
+ 1826 0d00 F30F7F85 		movdqu	%xmm0, -8336(%rbp)
+ 1826      70DFFFFF 
+ 1827              	.LBB789:
+ 1828              	.LBB790:
+ 1829              	.LBB791:
+ 1830              	.LBB792:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 1831              		.loc 3 529 0
+ 1832 0d08 F30F6F8D 		movdqu	-8336(%rbp), %xmm1
+ 1832      70DFFFFF 
+ 1833 0d10 F30F6F85 		movdqu	-8320(%rbp), %xmm0
+ 1833      80DFFFFF 
+ 1834 0d18 660F3800 		pshufb	%xmm1, %xmm0
+ 1834      C1
+ 1835              	.LBE792:
+ 1836              	.LBE791:
+ 1837              	.LBE790:
+ 1838              	.LBE789:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 1839              		.loc 2 667 0
+ 1840 0d1d F30F7F85 		movdqu	%xmm0, -8384(%rbp)
+ 1840      40DFFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 85
+
+
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 1841              		.loc 2 668 0
+ 1842 0d25 F30F6F85 		movdqu	-8384(%rbp), %xmm0
+ 1842      40DFFFFF 
+ 1843              	.LBE788:
+ 1844              	.LBE787:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 1845              		.loc 2 1684 0
+ 1846 0d2d 660F7F85 		movdqa	%xmm0, -11072(%rbp)
+ 1846      C0D4FFFF 
+ 1847              	.LBB793:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 1848              		.loc 2 1685 0
+ 1849 0d35 660F6F85 		movdqa	-11072(%rbp), %xmm0
+ 1849      C0D4FFFF 
+ 1850 0d3d F30F7F85 		movdqu	%xmm0, -10528(%rbp)
+ 1850      E0D6FFFF 
+ 1851 0d45 E8000000 		call	KDbgWriterGet at PLT
+ 1851      00
+ 1852 0d4a 4885C0   		testq	%rax, %rax
+ 1853 0d4d 7479     		je	.L19
+ 1854 0d4f BF010000 		movl	$1, %edi
+ 1854      00
+ 1855 0d54 E8000000 		call	KDbgCondToFlag at PLT
+ 1855      00
+ 1856 0d59 4889C6   		movq	%rax, %rsi
+ 1857 0d5c BF100000 		movl	$16, %edi
+ 1857      00
+ 1858 0d61 E8000000 		call	KDbgTestModConds at PLT
+ 1858      00
+ 1859 0d66 84C0     		testb	%al, %al
+ 1860 0d68 745E     		je	.L19
+ 1861 0d6a 8B85ECD6 		movl	-10516(%rbp), %eax
+ 1861      FFFF
+ 1862 0d70 89C7     		movl	%eax, %edi
+ 1863 0d72 E889F2FF 		call	bswap_32
+ 1863      FF
+ 1864 0d77 4189C5   		movl	%eax, %r13d
+ 1865 0d7a 8B85E8D6 		movl	-10520(%rbp), %eax
+ 1865      FFFF
+ 1866 0d80 89C7     		movl	%eax, %edi
+ 1867 0d82 E879F2FF 		call	bswap_32
+ 1867      FF
+ 1868 0d87 4189C4   		movl	%eax, %r12d
+ 1869 0d8a 8B85E4D6 		movl	-10524(%rbp), %eax
+ 1869      FFFF
+ 1870 0d90 89C7     		movl	%eax, %edi
+ 1871 0d92 E869F2FF 		call	bswap_32
+ 1871      FF
+ 1872 0d97 89C3     		movl	%eax, %ebx
+ 1873 0d99 8B85E0D6 		movl	-10528(%rbp), %eax
+ 1873      FFFF
+ 1874 0d9f 89C7     		movl	%eax, %edi
+ 1875 0da1 E85AF2FF 		call	bswap_32
+ 1875      FF
+ 1876 0da6 4589E9   		movl	%r13d, %r9d
+ 1877 0da9 4589E0   		movl	%r12d, %r8d
+
GAS LISTING /tmp/ccjbMjHD.s 			page 86
+
+
+ 1878 0dac 89D9     		movl	%ebx, %ecx
+ 1879 0dae 89C2     		movl	%eax, %edx
+ 1880 0db0 488D3500 		leaq	.LC2(%rip), %rsi
+ 1880      000000
+ 1881 0db7 488D3D00 		leaq	.LC1(%rip), %rdi
+ 1881      000000
+ 1882 0dbe B8000000 		movl	$0, %eax
+ 1882      00
+ 1883 0dc3 E8000000 		call	KDbgMsg at PLT
+ 1883      00
+ 1884              	.L19:
+ 1885 0dc8 660F6F85 		movdqa	-11072(%rbp), %xmm0
+ 1885      C0D4FFFF 
+ 1886 0dd0 F30F7F85 		movdqu	%xmm0, -8288(%rbp)
+ 1886      A0DFFFFF 
+ 1887 0dd8 660F6F85 		movdqa	-11056(%rbp), %xmm0
+ 1887      D0D4FFFF 
+ 1888 0de0 F30F7F85 		movdqu	%xmm0, -8304(%rbp)
+ 1888      90DFFFFF 
+ 1889              	.LBE793:
+ 1890              	.LBB794:
+ 1891              	.LBB795:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 1892              		.loc 2 178 0
+ 1893 0de8 F30F6F85 		movdqu	-8304(%rbp), %xmm0
+ 1893      90DFFFFF 
+ 1894 0df0 F30F6F8D 		movdqu	-8288(%rbp), %xmm1
+ 1894      A0DFFFFF 
+ 1895 0df8 660FEFC1 		pxor	%xmm1, %xmm0
+ 1896              	.LBE795:
+ 1897              	.LBE794:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 1898              		.loc 2 1686 0
+ 1899 0dfc 660F7F85 		movdqa	%xmm0, -11072(%rbp)
+ 1899      C0D4FFFF 
+ 1900              	.LBB796:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 1901              		.loc 2 1687 0
+ 1902 0e04 660F6F85 		movdqa	-11072(%rbp), %xmm0
+ 1902      C0D4FFFF 
+ 1903 0e0c F30F7F85 		movdqu	%xmm0, -10544(%rbp)
+ 1903      D0D6FFFF 
+ 1904 0e14 E8000000 		call	KDbgWriterGet at PLT
+ 1904      00
+ 1905 0e19 4885C0   		testq	%rax, %rax
+ 1906 0e1c 7479     		je	.L21
+ 1907 0e1e BF010000 		movl	$1, %edi
+ 1907      00
+ 1908 0e23 E8000000 		call	KDbgCondToFlag at PLT
+ 1908      00
+ 1909 0e28 4889C6   		movq	%rax, %rsi
+ 1910 0e2b BF100000 		movl	$16, %edi
+ 1910      00
+ 1911 0e30 E8000000 		call	KDbgTestModConds at PLT
+ 1911      00
+ 1912 0e35 84C0     		testb	%al, %al
+ 1913 0e37 745E     		je	.L21
+
GAS LISTING /tmp/ccjbMjHD.s 			page 87
+
+
+ 1914 0e39 8B85DCD6 		movl	-10532(%rbp), %eax
+ 1914      FFFF
+ 1915 0e3f 89C7     		movl	%eax, %edi
+ 1916 0e41 E8BAF1FF 		call	bswap_32
+ 1916      FF
+ 1917 0e46 4189C5   		movl	%eax, %r13d
+ 1918 0e49 8B85D8D6 		movl	-10536(%rbp), %eax
+ 1918      FFFF
+ 1919 0e4f 89C7     		movl	%eax, %edi
+ 1920 0e51 E8AAF1FF 		call	bswap_32
+ 1920      FF
+ 1921 0e56 4189C4   		movl	%eax, %r12d
+ 1922 0e59 8B85D4D6 		movl	-10540(%rbp), %eax
+ 1922      FFFF
+ 1923 0e5f 89C7     		movl	%eax, %edi
+ 1924 0e61 E89AF1FF 		call	bswap_32
+ 1924      FF
+ 1925 0e66 89C3     		movl	%eax, %ebx
+ 1926 0e68 8B85D0D6 		movl	-10544(%rbp), %eax
+ 1926      FFFF
+ 1927 0e6e 89C7     		movl	%eax, %edi
+ 1928 0e70 E88BF1FF 		call	bswap_32
+ 1928      FF
+ 1929 0e75 4589E9   		movl	%r13d, %r9d
+ 1930 0e78 4589E0   		movl	%r12d, %r8d
+ 1931 0e7b 89D9     		movl	%ebx, %ecx
+ 1932 0e7d 89C2     		movl	%eax, %edx
+ 1933 0e7f 488D3500 		leaq	.LC3(%rip), %rsi
+ 1933      000000
+ 1934 0e86 488D3D00 		leaq	.LC1(%rip), %rdi
+ 1934      000000
+ 1935 0e8d B8000000 		movl	$0, %eax
+ 1935      00
+ 1936 0e92 E8000000 		call	KDbgMsg at PLT
+ 1936      00
+ 1937              	.L21:
+ 1938 0e97 660F6F85 		movdqa	-11072(%rbp), %xmm0
+ 1938      C0D4FFFF 
+ 1939 0e9f F30F7F85 		movdqu	%xmm0, -8272(%rbp)
+ 1939      B0DFFFFF 
+ 1940 0ea7 F30F6F85 		movdqu	-8272(%rbp), %xmm0
+ 1940      B0DFFFFF 
+ 1941 0eaf F30F7F85 		movdqu	%xmm0, -8240(%rbp)
+ 1941      D0DFFFFF 
+ 1942              	.LBE796:
+ 1943              	.LBB797:
+ 1944              	.LBB798:
+ 1945              	.LBB799:
+ 1946              	.LBB800:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 1947              		.loc 3 450 0
+ 1948 0eb7 F30F6F85 		movdqu	-8240(%rbp), %xmm0
+ 1948      D0DFFFFF 
+ 1949 0ebf 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 1949      FF
+ 1950              	.LBE800:
+ 1951              	.LBE799:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 88
+
+
+ 1952              	.LBE798:
+ 1953              	.LBE797:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 1954              		.loc 2 1688 0
+ 1955 0ec4 660F7F85 		movdqa	%xmm0, -11072(%rbp)
+ 1955      C0D4FFFF 
+ 1956              	.LBB801:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 1957              		.loc 2 1689 0
+ 1958 0ecc 660F6F85 		movdqa	-11072(%rbp), %xmm0
+ 1958      C0D4FFFF 
+ 1959 0ed4 F30F7F85 		movdqu	%xmm0, -10560(%rbp)
+ 1959      C0D6FFFF 
+ 1960 0edc E8000000 		call	KDbgWriterGet at PLT
+ 1960      00
+ 1961 0ee1 4885C0   		testq	%rax, %rax
+ 1962 0ee4 7479     		je	.L23
+ 1963 0ee6 BF010000 		movl	$1, %edi
+ 1963      00
+ 1964 0eeb E8000000 		call	KDbgCondToFlag at PLT
+ 1964      00
+ 1965 0ef0 4889C6   		movq	%rax, %rsi
+ 1966 0ef3 BF100000 		movl	$16, %edi
+ 1966      00
+ 1967 0ef8 E8000000 		call	KDbgTestModConds at PLT
+ 1967      00
+ 1968 0efd 84C0     		testb	%al, %al
+ 1969 0eff 745E     		je	.L23
+ 1970 0f01 8B85CCD6 		movl	-10548(%rbp), %eax
+ 1970      FFFF
+ 1971 0f07 89C7     		movl	%eax, %edi
+ 1972 0f09 E8F2F0FF 		call	bswap_32
+ 1972      FF
+ 1973 0f0e 4189C5   		movl	%eax, %r13d
+ 1974 0f11 8B85C8D6 		movl	-10552(%rbp), %eax
+ 1974      FFFF
+ 1975 0f17 89C7     		movl	%eax, %edi
+ 1976 0f19 E8E2F0FF 		call	bswap_32
+ 1976      FF
+ 1977 0f1e 4189C4   		movl	%eax, %r12d
+ 1978 0f21 8B85C4D6 		movl	-10556(%rbp), %eax
+ 1978      FFFF
+ 1979 0f27 89C7     		movl	%eax, %edi
+ 1980 0f29 E8D2F0FF 		call	bswap_32
+ 1980      FF
+ 1981 0f2e 89C3     		movl	%eax, %ebx
+ 1982 0f30 8B85C0D6 		movl	-10560(%rbp), %eax
+ 1982      FFFF
+ 1983 0f36 89C7     		movl	%eax, %edi
+ 1984 0f38 E8C3F0FF 		call	bswap_32
+ 1984      FF
+ 1985 0f3d 4589E9   		movl	%r13d, %r9d
+ 1986 0f40 4589E0   		movl	%r12d, %r8d
+ 1987 0f43 89D9     		movl	%ebx, %ecx
+ 1988 0f45 89C2     		movl	%eax, %edx
+ 1989 0f47 488D3500 		leaq	.LC4(%rip), %rsi
+ 1989      000000
+
GAS LISTING /tmp/ccjbMjHD.s 			page 89
+
+
+ 1990 0f4e 488D3D00 		leaq	.LC1(%rip), %rdi
+ 1990      000000
+ 1991 0f55 B8000000 		movl	$0, %eax
+ 1991      00
+ 1992 0f5a E8000000 		call	KDbgMsg at PLT
+ 1992      00
+ 1993              	.L23:
+ 1994              	.LBE801:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 1995              		.loc 2 1690 0
+ 1996 0f5f 660F6F85 		movdqa	-11072(%rbp), %xmm0
+ 1996      C0D4FFFF 
+ 1997              	.LBE755:
+ 1998              	.LBE754:
+1745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x02,2);
+ 1999              		.loc 2 1745 0
+ 2000 0f67 F30F7F85 		movdqu	%xmm0, -9968(%rbp)
+ 2000      10D9FFFF 
+ 2001 0f6f F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 2001      00D9FFFF 
+ 2002 0f77 F30F7F85 		movdqu	%xmm0, -8224(%rbp)
+ 2002      E0DFFFFF 
+ 2003              	.LBB802:
+ 2004              	.LBB803:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 2005              		.loc 2 1565 0
+ 2006 0f7f F30F6F85 		movdqu	-8224(%rbp), %xmm0
+ 2006      E0DFFFFF 
+ 2007 0f87 660F7F85 		movdqa	%xmm0, -11040(%rbp)
+ 2007      E0D4FFFF 
+ 2008 0f8f 660F6F85 		movdqa	-11040(%rbp), %xmm0
+ 2008      E0D4FFFF 
+ 2009 0f97 F30F7F85 		movdqu	%xmm0, -8208(%rbp)
+ 2009      F0DFFFFF 
+ 2010              	.LBB804:
+ 2011              	.LBB805:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2012              		.loc 2 1278 0
+ 2013 0f9f 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 2013      00000000 
+ 2014 0fa7 F30F6F8D 		movdqu	-8208(%rbp), %xmm1
+ 2014      F0DFFFFF 
+ 2015 0faf F30F7F8D 		movdqu	%xmm1, -8176(%rbp)
+ 2015      10E0FFFF 
+ 2016 0fb7 F30F7F85 		movdqu	%xmm0, -8192(%rbp)
+ 2016      00E0FFFF 
+ 2017 0fbf F30F6F85 		movdqu	-8176(%rbp), %xmm0
+ 2017      10E0FFFF 
+ 2018 0fc7 F30F7F85 		movdqu	%xmm0, -8144(%rbp)
+ 2018      30E0FFFF 
+ 2019 0fcf F30F6F85 		movdqu	-8192(%rbp), %xmm0
+ 2019      00E0FFFF 
+ 2020 0fd7 F30F7F85 		movdqu	%xmm0, -8160(%rbp)
+ 2020      20E0FFFF 
+ 2021              	.LBB806:
+ 2022              	.LBB807:
+ 2023              	.LBB808:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 90
+
+
+ 2024              	.LBB809:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2025              		.loc 3 529 0
+ 2026 0fdf F30F6F8D 		movdqu	-8160(%rbp), %xmm1
+ 2026      20E0FFFF 
+ 2027 0fe7 F30F6F85 		movdqu	-8144(%rbp), %xmm0
+ 2027      30E0FFFF 
+ 2028 0fef 660F3800 		pshufb	%xmm1, %xmm0
+ 2028      C1
+ 2029              	.LBE809:
+ 2030              	.LBE808:
+ 2031              	.LBE807:
+ 2032              	.LBE806:
+ 2033              	.LBE805:
+ 2034              	.LBE804:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2035              		.loc 2 1567 0
+ 2036 0ff4 660F7F85 		movdqa	%xmm0, -11040(%rbp)
+ 2036      E0D4FFFF 
+ 2037 0ffc 660F6F85 		movdqa	-11040(%rbp), %xmm0
+ 2037      E0D4FFFF 
+ 2038 1004 660FEF85 		pxor	-8224(%rbp), %xmm0
+ 2038      E0DFFFFF 
+ 2039 100c F30F7F85 		movdqu	%xmm0, -8224(%rbp)
+ 2039      E0DFFFFF 
+ 2040 1014 660F6F85 		movdqa	-11040(%rbp), %xmm0
+ 2040      E0D4FFFF 
+ 2041 101c F30F7F85 		movdqu	%xmm0, -8128(%rbp)
+ 2041      40E0FFFF 
+ 2042              	.LBB810:
+ 2043              	.LBB811:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2044              		.loc 2 1278 0
+ 2045 1024 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 2045      00000000 
+ 2046 102c F30F6F8D 		movdqu	-8128(%rbp), %xmm1
+ 2046      40E0FFFF 
+ 2047 1034 F30F7F8D 		movdqu	%xmm1, -8096(%rbp)
+ 2047      60E0FFFF 
+ 2048 103c F30F7F85 		movdqu	%xmm0, -8112(%rbp)
+ 2048      50E0FFFF 
+ 2049 1044 F30F6F85 		movdqu	-8096(%rbp), %xmm0
+ 2049      60E0FFFF 
+ 2050 104c F30F7F85 		movdqu	%xmm0, -8064(%rbp)
+ 2050      80E0FFFF 
+ 2051 1054 F30F6F85 		movdqu	-8112(%rbp), %xmm0
+ 2051      50E0FFFF 
+ 2052 105c F30F7F85 		movdqu	%xmm0, -8080(%rbp)
+ 2052      70E0FFFF 
+ 2053              	.LBB812:
+ 2054              	.LBB813:
+ 2055              	.LBB814:
+ 2056              	.LBB815:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2057              		.loc 3 529 0
+ 2058 1064 F30F6F8D 		movdqu	-8080(%rbp), %xmm1
+ 2058      70E0FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 91
+
+
+ 2059 106c F30F6F85 		movdqu	-8064(%rbp), %xmm0
+ 2059      80E0FFFF 
+ 2060 1074 660F3800 		pshufb	%xmm1, %xmm0
+ 2060      C1
+ 2061              	.LBE815:
+ 2062              	.LBE814:
+ 2063              	.LBE813:
+ 2064              	.LBE812:
+ 2065              	.LBE811:
+ 2066              	.LBE810:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2067              		.loc 2 1568 0
+ 2068 1079 660F7F85 		movdqa	%xmm0, -11040(%rbp)
+ 2068      E0D4FFFF 
+ 2069 1081 660F6F85 		movdqa	-11040(%rbp), %xmm0
+ 2069      E0D4FFFF 
+ 2070 1089 660FEF85 		pxor	-8224(%rbp), %xmm0
+ 2070      E0DFFFFF 
+ 2071 1091 F30F7F85 		movdqu	%xmm0, -8224(%rbp)
+ 2071      E0DFFFFF 
+ 2072 1099 660F6F85 		movdqa	-11040(%rbp), %xmm0
+ 2072      E0D4FFFF 
+ 2073 10a1 F30F7F85 		movdqu	%xmm0, -8048(%rbp)
+ 2073      90E0FFFF 
+ 2074              	.LBB816:
+ 2075              	.LBB817:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2076              		.loc 2 1278 0
+ 2077 10a9 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 2077      00000000 
+ 2078 10b1 F30F6F8D 		movdqu	-8048(%rbp), %xmm1
+ 2078      90E0FFFF 
+ 2079 10b9 F30F7F8D 		movdqu	%xmm1, -8016(%rbp)
+ 2079      B0E0FFFF 
+ 2080 10c1 F30F7F85 		movdqu	%xmm0, -8032(%rbp)
+ 2080      A0E0FFFF 
+ 2081 10c9 F30F6F85 		movdqu	-8016(%rbp), %xmm0
+ 2081      B0E0FFFF 
+ 2082 10d1 F30F7F85 		movdqu	%xmm0, -7984(%rbp)
+ 2082      D0E0FFFF 
+ 2083 10d9 F30F6F85 		movdqu	-8032(%rbp), %xmm0
+ 2083      A0E0FFFF 
+ 2084 10e1 F30F7F85 		movdqu	%xmm0, -8000(%rbp)
+ 2084      C0E0FFFF 
+ 2085              	.LBB818:
+ 2086              	.LBB819:
+ 2087              	.LBB820:
+ 2088              	.LBB821:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2089              		.loc 3 529 0
+ 2090 10e9 F30F6F8D 		movdqu	-8000(%rbp), %xmm1
+ 2090      C0E0FFFF 
+ 2091 10f1 F30F6F85 		movdqu	-7984(%rbp), %xmm0
+ 2091      D0E0FFFF 
+ 2092 10f9 660F3800 		pshufb	%xmm1, %xmm0
+ 2092      C1
+ 2093              	.LBE821:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 92
+
+
+ 2094              	.LBE820:
+ 2095              	.LBE819:
+ 2096              	.LBE818:
+ 2097              	.LBE817:
+ 2098              	.LBE816:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2099              		.loc 2 1569 0
+ 2100 10fe 660F7F85 		movdqa	%xmm0, -11040(%rbp)
+ 2100      E0D4FFFF 
+ 2101 1106 660F6F85 		movdqa	-11040(%rbp), %xmm0
+ 2101      E0D4FFFF 
+ 2102 110e 660FEF85 		pxor	-8224(%rbp), %xmm0
+ 2102      E0DFFFFF 
+ 2103 1116 F30F7F85 		movdqu	%xmm0, -8224(%rbp)
+ 2103      E0DFFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 2104              		.loc 2 1571 0
+ 2105 111e F30F6F85 		movdqu	-8224(%rbp), %xmm0
+ 2105      E0DFFFFF 
+ 2106              	.LBE803:
+ 2107              	.LBE802:
+ 2108              		.loc 2 1745 0
+ 2109 1126 F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+ 2109      00D9FFFF 
+ 2110 112e F30F6F85 		movdqu	-9968(%rbp), %xmm0
+ 2110      10D9FFFF 
+ 2111 1136 F30F6F8D 		movdqu	-9984(%rbp), %xmm1
+ 2111      00D9FFFF 
+ 2112 113e 660FEFC1 		pxor	%xmm1, %xmm0
+ 2113 1142 F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+ 2113      00D9FFFF 
+ 2114 114a 488B8578 		movq	-10632(%rbp), %rax
+ 2114      D6FFFF
+ 2115 1151 4883C020 		addq	$32, %rax
+ 2116 1155 F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 2116      00D9FFFF 
+ 2117 115d F30F7F00 		movdqu	%xmm0, (%rax)
+ 2118 1161 F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 2118      00D9FFFF 
+ 2119 1169 F30F7F85 		movdqu	%xmm0, -7952(%rbp)
+ 2119      F0E0FFFF 
+ 2120              	.LBB822:
+ 2121              	.LBB823:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 2122              		.loc 2 1681 0
+ 2123 1171 B8040000 		movl	$4, %eax
+ 2123      00
+ 2124 1176 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 2124      00000000 
+ 2125 117e F30F7F85 		movdqu	%xmm0, -7920(%rbp)
+ 2125      10E1FFFF 
+ 2126 1186 89850CE1 		movl	%eax, -7924(%rbp)
+ 2126      FFFF
+ 2127 118c F30F6F85 		movdqu	-7920(%rbp), %xmm0
+ 2127      10E1FFFF 
+ 2128 1194 F30F7F85 		movdqu	%xmm0, -7888(%rbp)
+ 2128      30E1FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 93
+
+
+ 2129 119c 8B850CE1 		movl	-7924(%rbp), %eax
+ 2129      FFFF
+ 2130 11a2 89852CE1 		movl	%eax, -7892(%rbp)
+ 2130      FFFF
+ 2131              	.LBB824:
+ 2132              	.LBB825:
+ 2133              	.LBB826:
+ 2134              	.LBB827:
+ 2135              		.loc 3 598 0
+ 2136 11a8 8B852CE1 		movl	-7892(%rbp), %eax
+ 2136      FFFF
+ 2137 11ae F30F6F85 		movdqu	-7888(%rbp), %xmm0
+ 2137      30E1FFFF 
+ 2138 11b6 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 2138      C003
+ 2139              	.LBE827:
+ 2140              	.LBE826:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 2141              		.loc 2 519 0
+ 2142 11bc F30F7F85 		movdqu	%xmm0, -7920(%rbp)
+ 2142      10E1FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 2143              		.loc 2 526 0
+ 2144 11c4 F30F6F85 		movdqu	-7920(%rbp), %xmm0
+ 2144      10E1FFFF 
+ 2145              	.LBE825:
+ 2146              	.LBE824:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 2147              		.loc 2 1681 0
+ 2148 11cc 660F7F85 		movdqa	%xmm0, -11008(%rbp)
+ 2148      00D5FFFF 
+ 2149 11d4 F30F6F85 		movdqu	-7952(%rbp), %xmm0
+ 2149      F0E0FFFF 
+ 2150 11dc F30F7F85 		movdqu	%xmm0, -7872(%rbp)
+ 2150      40E1FFFF 
+ 2151 11e4 F30F6F85 		movdqu	-7872(%rbp), %xmm0
+ 2151      40E1FFFF 
+ 2152 11ec F30F7F85 		movdqu	%xmm0, -7840(%rbp)
+ 2152      60E1FFFF 
+ 2153 11f4 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 2153      000000
+ 2154 11fb 48898558 		movq	%rax, -7848(%rbp)
+ 2154      E1FFFF
+ 2155              	.LBB828:
+ 2156              	.LBB829:
+ 2157              	.LBB830:
+ 2158              	.LBB831:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 2159              		.loc 2 851 0
+ 2160 1202 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 2160      00000000 
+ 2161 120a F30F7F85 		movdqu	%xmm0, -7808(%rbp)
+ 2161      80E1FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 2162              		.loc 2 854 0
+ 2163 1212 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 2163      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 94
+
+
+ 2164 121a F30F6F8D 		movdqu	-7840(%rbp), %xmm1
+ 2164      60E1FFFF 
+ 2165 1222 F30F7F8D 		movdqu	%xmm1, -7728(%rbp)
+ 2165      D0E1FFFF 
+ 2166 122a F30F7F85 		movdqu	%xmm0, -7744(%rbp)
+ 2166      C0E1FFFF 
+ 2167              	.LBB832:
+ 2168              	.LBB833:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 2169              		.loc 2 206 0
+ 2170 1232 F30F6F85 		movdqu	-7744(%rbp), %xmm0
+ 2170      C0E1FFFF 
+ 2171 123a F30F6F8D 		movdqu	-7728(%rbp), %xmm1
+ 2171      D0E1FFFF 
+ 2172 1242 660FDBC1 		pand	%xmm1, %xmm0
+ 2173              	.LBE833:
+ 2174              	.LBE832:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 2175              		.loc 2 854 0
+ 2176 1246 F30F7F85 		movdqu	%xmm0, -7760(%rbp)
+ 2176      B0E1FFFF 
+ 2177 124e F30F6F85 		movdqu	-7840(%rbp), %xmm0
+ 2177      60E1FFFF 
+ 2178 1256 F30F7F85 		movdqu	%xmm0, -7696(%rbp)
+ 2178      F0E1FFFF 
+ 2179              	.LBB834:
+ 2180              	.LBB835:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 2181              		.loc 3 433 0
+ 2182 125e F30F6F85 		movdqu	-7696(%rbp), %xmm0
+ 2182      F0E1FFFF 
+ 2183 1266 660F72D0 		psrld	$4, %xmm0
+ 2183      04
+ 2184              	.LBE835:
+ 2185              	.LBE834:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 2186              		.loc 2 857 0
+ 2187 126b F30F7F85 		movdqu	%xmm0, -7776(%rbp)
+ 2187      A0E1FFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2188              		.loc 2 859 0
+ 2189 1273 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 2189      00000000 
+ 2190 127b F30F6F8D 		movdqu	-7776(%rbp), %xmm1
+ 2190      A0E1FFFF 
+ 2191 1283 F30F7F8D 		movdqu	%xmm1, -7664(%rbp)
+ 2191      10E2FFFF 
+ 2192 128b F30F7F85 		movdqu	%xmm0, -7680(%rbp)
+ 2192      00E2FFFF 
+ 2193              	.LBB836:
+ 2194              	.LBB837:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 2195              		.loc 2 206 0
+ 2196 1293 F30F6F85 		movdqu	-7680(%rbp), %xmm0
+ 2196      00E2FFFF 
+ 2197 129b F30F6F8D 		movdqu	-7664(%rbp), %xmm1
+ 2197      10E2FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 95
+
+
+ 2198 12a3 660FDBC1 		pand	%xmm1, %xmm0
+ 2199              	.LBE837:
+ 2200              	.LBE836:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2201              		.loc 2 859 0
+ 2202 12a7 F30F7F85 		movdqu	%xmm0, -7776(%rbp)
+ 2202      A0E1FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 2203              		.loc 2 866 0
+ 2204 12af C7857CE1 		movl	$0, -7812(%rbp)
+ 2204      FFFF0000 
+ 2204      0000
+ 2205 12b9 E9BE0100 		jmp	.L24
+ 2205      00
+ 2206              	.L25:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 2207              		.loc 2 868 0
+ 2208 12be 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 2208      00000000 
+ 2209 12c6 F30F7F85 		movdqu	%xmm0, -7632(%rbp)
+ 2209      30E2FFFF 
+ 2210 12ce F30F6F85 		movdqu	-7776(%rbp), %xmm0
+ 2210      A0E1FFFF 
+ 2211 12d6 F30F7F85 		movdqu	%xmm0, -7648(%rbp)
+ 2211      20E2FFFF 
+ 2212 12de F30F6F85 		movdqu	-7632(%rbp), %xmm0
+ 2212      30E2FFFF 
+ 2213 12e6 F30F7F85 		movdqu	%xmm0, -7600(%rbp)
+ 2213      50E2FFFF 
+ 2214 12ee F30F6F85 		movdqu	-7648(%rbp), %xmm0
+ 2214      20E2FFFF 
+ 2215 12f6 F30F7F85 		movdqu	%xmm0, -7616(%rbp)
+ 2215      40E2FFFF 
+ 2216              	.LBB838:
+ 2217              	.LBB839:
+ 2218              	.LBB840:
+ 2219              	.LBB841:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2220              		.loc 3 529 0
+ 2221 12fe F30F6F8D 		movdqu	-7616(%rbp), %xmm1
+ 2221      40E2FFFF 
+ 2222 1306 F30F6F85 		movdqu	-7600(%rbp), %xmm0
+ 2222      50E2FFFF 
+ 2223 130e 660F3800 		pshufb	%xmm1, %xmm0
+ 2223      C1
+ 2224              	.LBE841:
+ 2225              	.LBE840:
+ 2226              	.LBE839:
+ 2227              	.LBE838:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 2228              		.loc 2 868 0
+ 2229 1313 F30F7F85 		movdqu	%xmm0, -7792(%rbp)
+ 2229      90E1FFFF 
+ 2230 131b F30F6F85 		movdqu	-7760(%rbp), %xmm0
+ 2230      B0E1FFFF 
+ 2231 1323 F30F7F85 		movdqu	%xmm0, -7568(%rbp)
+ 2231      70E2FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 96
+
+
+ 2232 132b F30F6F85 		movdqu	-7792(%rbp), %xmm0
+ 2232      90E1FFFF 
+ 2233 1333 F30F7F85 		movdqu	%xmm0, -7584(%rbp)
+ 2233      60E2FFFF 
+ 2234              	.LBB842:
+ 2235              	.LBB843:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 2236              		.loc 2 234 0
+ 2237 133b F30F6F85 		movdqu	-7584(%rbp), %xmm0
+ 2237      60E2FFFF 
+ 2238 1343 F30F6F8D 		movdqu	-7568(%rbp), %xmm1
+ 2238      70E2FFFF 
+ 2239 134b 660FEBC1 		por	%xmm1, %xmm0
+ 2240              	.LBE843:
+ 2241              	.LBE842:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 2242              		.loc 2 870 0
+ 2243 134f F30F7F85 		movdqu	%xmm0, -7792(%rbp)
+ 2243      90E1FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 2244              		.loc 2 872 0
+ 2245 1357 8B857CE1 		mov	-7812(%rbp), %eax
+ 2245      FFFF
+ 2246 135d 48C1E004 		salq	$4, %rax
+ 2247 1361 48038558 		addq	-7848(%rbp), %rax
+ 2247      E1FFFF
+ 2248 1368 660F6F00 		movdqa	(%rax), %xmm0
+ 2249 136c F30F7F85 		movdqu	%xmm0, -7536(%rbp)
+ 2249      90E2FFFF 
+ 2250 1374 F30F6F85 		movdqu	-7792(%rbp), %xmm0
+ 2250      90E1FFFF 
+ 2251 137c F30F7F85 		movdqu	%xmm0, -7552(%rbp)
+ 2251      80E2FFFF 
+ 2252 1384 F30F6F85 		movdqu	-7536(%rbp), %xmm0
+ 2252      90E2FFFF 
+ 2253 138c F30F7F85 		movdqu	%xmm0, -7504(%rbp)
+ 2253      B0E2FFFF 
+ 2254 1394 F30F6F85 		movdqu	-7552(%rbp), %xmm0
+ 2254      80E2FFFF 
+ 2255 139c F30F7F85 		movdqu	%xmm0, -7520(%rbp)
+ 2255      A0E2FFFF 
+ 2256              	.LBB844:
+ 2257              	.LBB845:
+ 2258              	.LBB846:
+ 2259              	.LBB847:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2260              		.loc 3 529 0
+ 2261 13a4 F30F6F8D 		movdqu	-7520(%rbp), %xmm1
+ 2261      A0E2FFFF 
+ 2262 13ac F30F6F85 		movdqu	-7504(%rbp), %xmm0
+ 2262      B0E2FFFF 
+ 2263 13b4 660F3800 		pshufb	%xmm1, %xmm0
+ 2263      C1
+ 2264              	.LBE847:
+ 2265              	.LBE846:
+ 2266              	.LBE845:
+ 2267              	.LBE844:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 97
+
+
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 2268              		.loc 2 872 0
+ 2269 13b9 F30F7F85 		movdqu	%xmm0, -7792(%rbp)
+ 2269      90E1FFFF 
+ 2270 13c1 F30F6F85 		movdqu	-7808(%rbp), %xmm0
+ 2270      80E1FFFF 
+ 2271 13c9 F30F7F85 		movdqu	%xmm0, -7472(%rbp)
+ 2271      D0E2FFFF 
+ 2272 13d1 F30F6F85 		movdqu	-7792(%rbp), %xmm0
+ 2272      90E1FFFF 
+ 2273 13d9 F30F7F85 		movdqu	%xmm0, -7488(%rbp)
+ 2273      C0E2FFFF 
+ 2274              	.LBB848:
+ 2275              	.LBB849:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 2276              		.loc 2 234 0
+ 2277 13e1 F30F6F85 		movdqu	-7488(%rbp), %xmm0
+ 2277      C0E2FFFF 
+ 2278 13e9 F30F6F8D 		movdqu	-7472(%rbp), %xmm1
+ 2278      D0E2FFFF 
+ 2279 13f1 660FEBC1 		por	%xmm1, %xmm0
+ 2280              	.LBE849:
+ 2281              	.LBE848:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 2282              		.loc 2 874 0
+ 2283 13f5 F30F7F85 		movdqu	%xmm0, -7808(%rbp)
+ 2283      80E1FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 2284              		.loc 2 876 0
+ 2285 13fd 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 2285      00000000 
+ 2286 1405 F30F6F8D 		movdqu	-7776(%rbp), %xmm1
+ 2286      A0E1FFFF 
+ 2287 140d F30F7F8D 		movdqu	%xmm1, -7440(%rbp)
+ 2287      F0E2FFFF 
+ 2288 1415 F30F7F85 		movdqu	%xmm0, -7456(%rbp)
+ 2288      E0E2FFFF 
+ 2289              	.LBB850:
+ 2290              	.LBB851:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 2291              		.loc 2 290 0
+ 2292 141d F30F6F8D 		movdqu	-7456(%rbp), %xmm1
+ 2292      E0E2FFFF 
+ 2293 1425 F30F6F85 		movdqu	-7440(%rbp), %xmm0
+ 2293      F0E2FFFF 
+ 2294 142d 660FF8C1 		psubb	%xmm1, %xmm0
+ 2295              	.LBE851:
+ 2296              	.LBE850:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 2297              		.loc 2 876 0
+ 2298 1431 F30F7F85 		movdqu	%xmm0, -7776(%rbp)
+ 2298      A0E1FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2299              		.loc 2 878 0
+ 2300 1439 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 2300      00000000 
+ 2301 1441 F30F6F8D 		movdqu	-7776(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 98
+
+
+ 2301      A0E1FFFF 
+ 2302 1449 F30F7F8D 		movdqu	%xmm1, -7408(%rbp)
+ 2302      10E3FFFF 
+ 2303 1451 F30F7F85 		movdqu	%xmm0, -7424(%rbp)
+ 2303      00E3FFFF 
+ 2304              	.LBB852:
+ 2305              	.LBB853:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 2306              		.loc 2 206 0
+ 2307 1459 F30F6F85 		movdqu	-7424(%rbp), %xmm0
+ 2307      00E3FFFF 
+ 2308 1461 F30F6F8D 		movdqu	-7408(%rbp), %xmm1
+ 2308      10E3FFFF 
+ 2309 1469 660FDBC1 		pand	%xmm1, %xmm0
+ 2310              	.LBE853:
+ 2311              	.LBE852:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2312              		.loc 2 878 0
+ 2313 146d F30F7F85 		movdqu	%xmm0, -7776(%rbp)
+ 2313      A0E1FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 2314              		.loc 2 866 0
+ 2315 1475 83857CE1 		addl	$1, -7812(%rbp)
+ 2315      FFFF01
+ 2316              	.L24:
+ 2317 147c 83BD7CE1 		cmpl	$15, -7812(%rbp)
+ 2317      FFFF0F
+ 2318 1483 0F8635FE 		jbe	.L25
+ 2318      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 2319              		.loc 2 882 0
+ 2320 1489 F30F6F85 		movdqu	-7808(%rbp), %xmm0
+ 2320      80E1FFFF 
+ 2321              	.LBE831:
+ 2322              	.LBE830:
+ 2323              	.LBE829:
+ 2324              	.LBE828:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 2325              		.loc 2 1682 0
+ 2326 1491 660F7F85 		movdqa	%xmm0, -11024(%rbp)
+ 2326      F0D4FFFF 
+ 2327              	.LBB854:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 2328              		.loc 2 1683 0
+ 2329 1499 660F6F85 		movdqa	-11024(%rbp), %xmm0
+ 2329      F0D4FFFF 
+ 2330 14a1 F30F7F85 		movdqu	%xmm0, -10448(%rbp)
+ 2330      30D7FFFF 
+ 2331 14a9 E8000000 		call	KDbgWriterGet at PLT
+ 2331      00
+ 2332 14ae 4885C0   		testq	%rax, %rax
+ 2333 14b1 7479     		je	.L27
+ 2334 14b3 BF010000 		movl	$1, %edi
+ 2334      00
+ 2335 14b8 E8000000 		call	KDbgCondToFlag at PLT
+ 2335      00
+ 2336 14bd 4889C6   		movq	%rax, %rsi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 99
+
+
+ 2337 14c0 BF100000 		movl	$16, %edi
+ 2337      00
+ 2338 14c5 E8000000 		call	KDbgTestModConds at PLT
+ 2338      00
+ 2339 14ca 84C0     		testb	%al, %al
+ 2340 14cc 745E     		je	.L27
+ 2341 14ce 8B853CD7 		movl	-10436(%rbp), %eax
+ 2341      FFFF
+ 2342 14d4 89C7     		movl	%eax, %edi
+ 2343 14d6 E825EBFF 		call	bswap_32
+ 2343      FF
+ 2344 14db 4189C5   		movl	%eax, %r13d
+ 2345 14de 8B8538D7 		movl	-10440(%rbp), %eax
+ 2345      FFFF
+ 2346 14e4 89C7     		movl	%eax, %edi
+ 2347 14e6 E815EBFF 		call	bswap_32
+ 2347      FF
+ 2348 14eb 4189C4   		movl	%eax, %r12d
+ 2349 14ee 8B8534D7 		movl	-10444(%rbp), %eax
+ 2349      FFFF
+ 2350 14f4 89C7     		movl	%eax, %edi
+ 2351 14f6 E805EBFF 		call	bswap_32
+ 2351      FF
+ 2352 14fb 89C3     		movl	%eax, %ebx
+ 2353 14fd 8B8530D7 		movl	-10448(%rbp), %eax
+ 2353      FFFF
+ 2354 1503 89C7     		movl	%eax, %edi
+ 2355 1505 E8F6EAFF 		call	bswap_32
+ 2355      FF
+ 2356 150a 4589E9   		movl	%r13d, %r9d
+ 2357 150d 4589E0   		movl	%r12d, %r8d
+ 2358 1510 89D9     		movl	%ebx, %ecx
+ 2359 1512 89C2     		movl	%eax, %edx
+ 2360 1514 488D3500 		leaq	.LC0(%rip), %rsi
+ 2360      000000
+ 2361 151b 488D3D00 		leaq	.LC1(%rip), %rdi
+ 2361      000000
+ 2362 1522 B8000000 		movl	$0, %eax
+ 2362      00
+ 2363 1527 E8000000 		call	KDbgMsg at PLT
+ 2363      00
+ 2364              	.L27:
+ 2365 152c 660F6F85 		movdqa	-11024(%rbp), %xmm0
+ 2365      F0D4FFFF 
+ 2366 1534 F30F7F85 		movdqu	%xmm0, -7392(%rbp)
+ 2366      20E3FFFF 
+ 2367              	.LBE854:
+ 2368              	.LBB855:
+ 2369              	.LBB856:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 2370              		.loc 2 667 0
+ 2371 153c 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 2371      00000000 
+ 2372 1544 F30F6F8D 		movdqu	-7392(%rbp), %xmm1
+ 2372      20E3FFFF 
+ 2373 154c F30F7F8D 		movdqu	%xmm1, -7360(%rbp)
+ 2373      40E3FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 100
+
+
+ 2374 1554 F30F7F85 		movdqu	%xmm0, -7376(%rbp)
+ 2374      30E3FFFF 
+ 2375 155c F30F6F85 		movdqu	-7360(%rbp), %xmm0
+ 2375      40E3FFFF 
+ 2376 1564 F30F7F85 		movdqu	%xmm0, -7328(%rbp)
+ 2376      60E3FFFF 
+ 2377 156c F30F6F85 		movdqu	-7376(%rbp), %xmm0
+ 2377      30E3FFFF 
+ 2378 1574 F30F7F85 		movdqu	%xmm0, -7344(%rbp)
+ 2378      50E3FFFF 
+ 2379              	.LBB857:
+ 2380              	.LBB858:
+ 2381              	.LBB859:
+ 2382              	.LBB860:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2383              		.loc 3 529 0
+ 2384 157c F30F6F8D 		movdqu	-7344(%rbp), %xmm1
+ 2384      50E3FFFF 
+ 2385 1584 F30F6F85 		movdqu	-7328(%rbp), %xmm0
+ 2385      60E3FFFF 
+ 2386 158c 660F3800 		pshufb	%xmm1, %xmm0
+ 2386      C1
+ 2387              	.LBE860:
+ 2388              	.LBE859:
+ 2389              	.LBE858:
+ 2390              	.LBE857:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 2391              		.loc 2 667 0
+ 2392 1591 F30F7F85 		movdqu	%xmm0, -7392(%rbp)
+ 2392      20E3FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 2393              		.loc 2 668 0
+ 2394 1599 F30F6F85 		movdqu	-7392(%rbp), %xmm0
+ 2394      20E3FFFF 
+ 2395              	.LBE856:
+ 2396              	.LBE855:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 2397              		.loc 2 1684 0
+ 2398 15a1 660F7F85 		movdqa	%xmm0, -11024(%rbp)
+ 2398      F0D4FFFF 
+ 2399              	.LBB861:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 2400              		.loc 2 1685 0
+ 2401 15a9 660F6F85 		movdqa	-11024(%rbp), %xmm0
+ 2401      F0D4FFFF 
+ 2402 15b1 F30F7F85 		movdqu	%xmm0, -10464(%rbp)
+ 2402      20D7FFFF 
+ 2403 15b9 E8000000 		call	KDbgWriterGet at PLT
+ 2403      00
+ 2404 15be 4885C0   		testq	%rax, %rax
+ 2405 15c1 7479     		je	.L29
+ 2406 15c3 BF010000 		movl	$1, %edi
+ 2406      00
+ 2407 15c8 E8000000 		call	KDbgCondToFlag at PLT
+ 2407      00
+ 2408 15cd 4889C6   		movq	%rax, %rsi
+ 2409 15d0 BF100000 		movl	$16, %edi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 101
+
+
+ 2409      00
+ 2410 15d5 E8000000 		call	KDbgTestModConds at PLT
+ 2410      00
+ 2411 15da 84C0     		testb	%al, %al
+ 2412 15dc 745E     		je	.L29
+ 2413 15de 8B852CD7 		movl	-10452(%rbp), %eax
+ 2413      FFFF
+ 2414 15e4 89C7     		movl	%eax, %edi
+ 2415 15e6 E815EAFF 		call	bswap_32
+ 2415      FF
+ 2416 15eb 4189C5   		movl	%eax, %r13d
+ 2417 15ee 8B8528D7 		movl	-10456(%rbp), %eax
+ 2417      FFFF
+ 2418 15f4 89C7     		movl	%eax, %edi
+ 2419 15f6 E805EAFF 		call	bswap_32
+ 2419      FF
+ 2420 15fb 4189C4   		movl	%eax, %r12d
+ 2421 15fe 8B8524D7 		movl	-10460(%rbp), %eax
+ 2421      FFFF
+ 2422 1604 89C7     		movl	%eax, %edi
+ 2423 1606 E8F5E9FF 		call	bswap_32
+ 2423      FF
+ 2424 160b 89C3     		movl	%eax, %ebx
+ 2425 160d 8B8520D7 		movl	-10464(%rbp), %eax
+ 2425      FFFF
+ 2426 1613 89C7     		movl	%eax, %edi
+ 2427 1615 E8E6E9FF 		call	bswap_32
+ 2427      FF
+ 2428 161a 4589E9   		movl	%r13d, %r9d
+ 2429 161d 4589E0   		movl	%r12d, %r8d
+ 2430 1620 89D9     		movl	%ebx, %ecx
+ 2431 1622 89C2     		movl	%eax, %edx
+ 2432 1624 488D3500 		leaq	.LC2(%rip), %rsi
+ 2432      000000
+ 2433 162b 488D3D00 		leaq	.LC1(%rip), %rdi
+ 2433      000000
+ 2434 1632 B8000000 		movl	$0, %eax
+ 2434      00
+ 2435 1637 E8000000 		call	KDbgMsg at PLT
+ 2435      00
+ 2436              	.L29:
+ 2437 163c 660F6F85 		movdqa	-11024(%rbp), %xmm0
+ 2437      F0D4FFFF 
+ 2438 1644 F30F7F85 		movdqu	%xmm0, -7296(%rbp)
+ 2438      80E3FFFF 
+ 2439 164c 660F6F85 		movdqa	-11008(%rbp), %xmm0
+ 2439      00D5FFFF 
+ 2440 1654 F30F7F85 		movdqu	%xmm0, -7312(%rbp)
+ 2440      70E3FFFF 
+ 2441              	.LBE861:
+ 2442              	.LBB862:
+ 2443              	.LBB863:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 2444              		.loc 2 178 0
+ 2445 165c F30F6F85 		movdqu	-7312(%rbp), %xmm0
+ 2445      70E3FFFF 
+ 2446 1664 F30F6F8D 		movdqu	-7296(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 102
+
+
+ 2446      80E3FFFF 
+ 2447 166c 660FEFC1 		pxor	%xmm1, %xmm0
+ 2448              	.LBE863:
+ 2449              	.LBE862:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 2450              		.loc 2 1686 0
+ 2451 1670 660F7F85 		movdqa	%xmm0, -11024(%rbp)
+ 2451      F0D4FFFF 
+ 2452              	.LBB864:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 2453              		.loc 2 1687 0
+ 2454 1678 660F6F85 		movdqa	-11024(%rbp), %xmm0
+ 2454      F0D4FFFF 
+ 2455 1680 F30F7F85 		movdqu	%xmm0, -10480(%rbp)
+ 2455      10D7FFFF 
+ 2456 1688 E8000000 		call	KDbgWriterGet at PLT
+ 2456      00
+ 2457 168d 4885C0   		testq	%rax, %rax
+ 2458 1690 7479     		je	.L31
+ 2459 1692 BF010000 		movl	$1, %edi
+ 2459      00
+ 2460 1697 E8000000 		call	KDbgCondToFlag at PLT
+ 2460      00
+ 2461 169c 4889C6   		movq	%rax, %rsi
+ 2462 169f BF100000 		movl	$16, %edi
+ 2462      00
+ 2463 16a4 E8000000 		call	KDbgTestModConds at PLT
+ 2463      00
+ 2464 16a9 84C0     		testb	%al, %al
+ 2465 16ab 745E     		je	.L31
+ 2466 16ad 8B851CD7 		movl	-10468(%rbp), %eax
+ 2466      FFFF
+ 2467 16b3 89C7     		movl	%eax, %edi
+ 2468 16b5 E846E9FF 		call	bswap_32
+ 2468      FF
+ 2469 16ba 4189C5   		movl	%eax, %r13d
+ 2470 16bd 8B8518D7 		movl	-10472(%rbp), %eax
+ 2470      FFFF
+ 2471 16c3 89C7     		movl	%eax, %edi
+ 2472 16c5 E836E9FF 		call	bswap_32
+ 2472      FF
+ 2473 16ca 4189C4   		movl	%eax, %r12d
+ 2474 16cd 8B8514D7 		movl	-10476(%rbp), %eax
+ 2474      FFFF
+ 2475 16d3 89C7     		movl	%eax, %edi
+ 2476 16d5 E826E9FF 		call	bswap_32
+ 2476      FF
+ 2477 16da 89C3     		movl	%eax, %ebx
+ 2478 16dc 8B8510D7 		movl	-10480(%rbp), %eax
+ 2478      FFFF
+ 2479 16e2 89C7     		movl	%eax, %edi
+ 2480 16e4 E817E9FF 		call	bswap_32
+ 2480      FF
+ 2481 16e9 4589E9   		movl	%r13d, %r9d
+ 2482 16ec 4589E0   		movl	%r12d, %r8d
+ 2483 16ef 89D9     		movl	%ebx, %ecx
+ 2484 16f1 89C2     		movl	%eax, %edx
+
GAS LISTING /tmp/ccjbMjHD.s 			page 103
+
+
+ 2485 16f3 488D3500 		leaq	.LC3(%rip), %rsi
+ 2485      000000
+ 2486 16fa 488D3D00 		leaq	.LC1(%rip), %rdi
+ 2486      000000
+ 2487 1701 B8000000 		movl	$0, %eax
+ 2487      00
+ 2488 1706 E8000000 		call	KDbgMsg at PLT
+ 2488      00
+ 2489              	.L31:
+ 2490 170b 660F6F85 		movdqa	-11024(%rbp), %xmm0
+ 2490      F0D4FFFF 
+ 2491 1713 F30F7F85 		movdqu	%xmm0, -7280(%rbp)
+ 2491      90E3FFFF 
+ 2492 171b F30F6F85 		movdqu	-7280(%rbp), %xmm0
+ 2492      90E3FFFF 
+ 2493 1723 F30F7F85 		movdqu	%xmm0, -7248(%rbp)
+ 2493      B0E3FFFF 
+ 2494              	.LBE864:
+ 2495              	.LBB865:
+ 2496              	.LBB866:
+ 2497              	.LBB867:
+ 2498              	.LBB868:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 2499              		.loc 3 450 0
+ 2500 172b F30F6F85 		movdqu	-7248(%rbp), %xmm0
+ 2500      B0E3FFFF 
+ 2501 1733 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 2501      FF
+ 2502              	.LBE868:
+ 2503              	.LBE867:
+ 2504              	.LBE866:
+ 2505              	.LBE865:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 2506              		.loc 2 1688 0
+ 2507 1738 660F7F85 		movdqa	%xmm0, -11024(%rbp)
+ 2507      F0D4FFFF 
+ 2508              	.LBB869:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 2509              		.loc 2 1689 0
+ 2510 1740 660F6F85 		movdqa	-11024(%rbp), %xmm0
+ 2510      F0D4FFFF 
+ 2511 1748 F30F7F85 		movdqu	%xmm0, -10496(%rbp)
+ 2511      00D7FFFF 
+ 2512 1750 E8000000 		call	KDbgWriterGet at PLT
+ 2512      00
+ 2513 1755 4885C0   		testq	%rax, %rax
+ 2514 1758 7479     		je	.L33
+ 2515 175a BF010000 		movl	$1, %edi
+ 2515      00
+ 2516 175f E8000000 		call	KDbgCondToFlag at PLT
+ 2516      00
+ 2517 1764 4889C6   		movq	%rax, %rsi
+ 2518 1767 BF100000 		movl	$16, %edi
+ 2518      00
+ 2519 176c E8000000 		call	KDbgTestModConds at PLT
+ 2519      00
+ 2520 1771 84C0     		testb	%al, %al
+
GAS LISTING /tmp/ccjbMjHD.s 			page 104
+
+
+ 2521 1773 745E     		je	.L33
+ 2522 1775 8B850CD7 		movl	-10484(%rbp), %eax
+ 2522      FFFF
+ 2523 177b 89C7     		movl	%eax, %edi
+ 2524 177d E87EE8FF 		call	bswap_32
+ 2524      FF
+ 2525 1782 4189C5   		movl	%eax, %r13d
+ 2526 1785 8B8508D7 		movl	-10488(%rbp), %eax
+ 2526      FFFF
+ 2527 178b 89C7     		movl	%eax, %edi
+ 2528 178d E86EE8FF 		call	bswap_32
+ 2528      FF
+ 2529 1792 4189C4   		movl	%eax, %r12d
+ 2530 1795 8B8504D7 		movl	-10492(%rbp), %eax
+ 2530      FFFF
+ 2531 179b 89C7     		movl	%eax, %edi
+ 2532 179d E85EE8FF 		call	bswap_32
+ 2532      FF
+ 2533 17a2 89C3     		movl	%eax, %ebx
+ 2534 17a4 8B8500D7 		movl	-10496(%rbp), %eax
+ 2534      FFFF
+ 2535 17aa 89C7     		movl	%eax, %edi
+ 2536 17ac E84FE8FF 		call	bswap_32
+ 2536      FF
+ 2537 17b1 4589E9   		movl	%r13d, %r9d
+ 2538 17b4 4589E0   		movl	%r12d, %r8d
+ 2539 17b7 89D9     		movl	%ebx, %ecx
+ 2540 17b9 89C2     		movl	%eax, %edx
+ 2541 17bb 488D3500 		leaq	.LC4(%rip), %rsi
+ 2541      000000
+ 2542 17c2 488D3D00 		leaq	.LC1(%rip), %rdi
+ 2542      000000
+ 2543 17c9 B8000000 		movl	$0, %eax
+ 2543      00
+ 2544 17ce E8000000 		call	KDbgMsg at PLT
+ 2544      00
+ 2545              	.L33:
+ 2546              	.LBE869:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 2547              		.loc 2 1690 0
+ 2548 17d3 660F6F85 		movdqa	-11024(%rbp), %xmm0
+ 2548      F0D4FFFF 
+ 2549              	.LBE823:
+ 2550              	.LBE822:
+1746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x04,3);
+ 2551              		.loc 2 1746 0
+ 2552 17db F30F7F85 		movdqu	%xmm0, -9968(%rbp)
+ 2552      10D9FFFF 
+ 2553 17e3 F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 2553      00D9FFFF 
+ 2554 17eb F30F7F85 		movdqu	%xmm0, -7232(%rbp)
+ 2554      C0E3FFFF 
+ 2555              	.LBB870:
+ 2556              	.LBB871:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 2557              		.loc 2 1565 0
+ 2558 17f3 F30F6F85 		movdqu	-7232(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 105
+
+
+ 2558      C0E3FFFF 
+ 2559 17fb 660F7F85 		movdqa	%xmm0, -10992(%rbp)
+ 2559      10D5FFFF 
+ 2560 1803 660F6F85 		movdqa	-10992(%rbp), %xmm0
+ 2560      10D5FFFF 
+ 2561 180b F30F7F85 		movdqu	%xmm0, -7216(%rbp)
+ 2561      D0E3FFFF 
+ 2562              	.LBB872:
+ 2563              	.LBB873:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2564              		.loc 2 1278 0
+ 2565 1813 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 2565      00000000 
+ 2566 181b F30F6F8D 		movdqu	-7216(%rbp), %xmm1
+ 2566      D0E3FFFF 
+ 2567 1823 F30F7F8D 		movdqu	%xmm1, -7184(%rbp)
+ 2567      F0E3FFFF 
+ 2568 182b F30F7F85 		movdqu	%xmm0, -7200(%rbp)
+ 2568      E0E3FFFF 
+ 2569 1833 F30F6F85 		movdqu	-7184(%rbp), %xmm0
+ 2569      F0E3FFFF 
+ 2570 183b F30F7F85 		movdqu	%xmm0, -7152(%rbp)
+ 2570      10E4FFFF 
+ 2571 1843 F30F6F85 		movdqu	-7200(%rbp), %xmm0
+ 2571      E0E3FFFF 
+ 2572 184b F30F7F85 		movdqu	%xmm0, -7168(%rbp)
+ 2572      00E4FFFF 
+ 2573              	.LBB874:
+ 2574              	.LBB875:
+ 2575              	.LBB876:
+ 2576              	.LBB877:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2577              		.loc 3 529 0
+ 2578 1853 F30F6F8D 		movdqu	-7168(%rbp), %xmm1
+ 2578      00E4FFFF 
+ 2579 185b F30F6F85 		movdqu	-7152(%rbp), %xmm0
+ 2579      10E4FFFF 
+ 2580 1863 660F3800 		pshufb	%xmm1, %xmm0
+ 2580      C1
+ 2581              	.LBE877:
+ 2582              	.LBE876:
+ 2583              	.LBE875:
+ 2584              	.LBE874:
+ 2585              	.LBE873:
+ 2586              	.LBE872:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2587              		.loc 2 1567 0
+ 2588 1868 660F7F85 		movdqa	%xmm0, -10992(%rbp)
+ 2588      10D5FFFF 
+ 2589 1870 660F6F85 		movdqa	-10992(%rbp), %xmm0
+ 2589      10D5FFFF 
+ 2590 1878 660FEF85 		pxor	-7232(%rbp), %xmm0
+ 2590      C0E3FFFF 
+ 2591 1880 F30F7F85 		movdqu	%xmm0, -7232(%rbp)
+ 2591      C0E3FFFF 
+ 2592 1888 660F6F85 		movdqa	-10992(%rbp), %xmm0
+ 2592      10D5FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 106
+
+
+ 2593 1890 F30F7F85 		movdqu	%xmm0, -7136(%rbp)
+ 2593      20E4FFFF 
+ 2594              	.LBB878:
+ 2595              	.LBB879:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 2596              		.loc 2 1278 0
+ 2597 1898 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 2597      00000000 
+ 2598 18a0 F30F6F8D 		movdqu	-7136(%rbp), %xmm1
+ 2598      20E4FFFF 
+ 2599 18a8 F30F7F8D 		movdqu	%xmm1, -7104(%rbp)
+ 2599      40E4FFFF 
+ 2600 18b0 F30F7F85 		movdqu	%xmm0, -7120(%rbp)
+ 2600      30E4FFFF 
+ 2601 18b8 F30F6F85 		movdqu	-7104(%rbp), %xmm0
+ 2601      40E4FFFF 
+ 2602 18c0 F30F7F85 		movdqu	%xmm0, -7072(%rbp)
+ 2602      60E4FFFF 
+ 2603 18c8 F30F6F85 		movdqu	-7120(%rbp), %xmm0
+ 2603      30E4FFFF 
+ 2604 18d0 F30F7F85 		movdqu	%xmm0, -7088(%rbp)
+ 2604      50E4FFFF 
+ 2605              	.LBB880:
+ 2606              	.LBB881:
+ 2607              	.LBB882:
+ 2608              	.LBB883:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2609              		.loc 3 529 0
+ 2610 18d8 F30F6F8D 		movdqu	-7088(%rbp), %xmm1
+ 2610      50E4FFFF 
+ 2611 18e0 F30F6F85 		movdqu	-7072(%rbp), %xmm0
+ 2611      60E4FFFF 
+ 2612 18e8 660F3800 		pshufb	%xmm1, %xmm0
+ 2612      C1
+ 2613              	.LBE883:
+ 2614              	.LBE882:
+ 2615              	.LBE881:
+ 2616              	.LBE880:
+ 2617              	.LBE879:
+ 2618              	.LBE878:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2619              		.loc 2 1568 0
+ 2620 18ed 660F7F85 		movdqa	%xmm0, -10992(%rbp)
+ 2620      10D5FFFF 
+ 2621 18f5 660F6F85 		movdqa	-10992(%rbp), %xmm0
+ 2621      10D5FFFF 
+ 2622 18fd 660FEF85 		pxor	-7232(%rbp), %xmm0
+ 2622      C0E3FFFF 
+ 2623 1905 F30F7F85 		movdqu	%xmm0, -7232(%rbp)
+ 2623      C0E3FFFF 
+ 2624 190d 660F6F85 		movdqa	-10992(%rbp), %xmm0
+ 2624      10D5FFFF 
+ 2625 1915 F30F7F85 		movdqu	%xmm0, -7056(%rbp)
+ 2625      70E4FFFF 
+ 2626              	.LBB884:
+ 2627              	.LBB885:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+
GAS LISTING /tmp/ccjbMjHD.s 			page 107
+
+
+ 2628              		.loc 2 1278 0
+ 2629 191d 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 2629      00000000 
+ 2630 1925 F30F6F8D 		movdqu	-7056(%rbp), %xmm1
+ 2630      70E4FFFF 
+ 2631 192d F30F7F8D 		movdqu	%xmm1, -7024(%rbp)
+ 2631      90E4FFFF 
+ 2632 1935 F30F7F85 		movdqu	%xmm0, -7040(%rbp)
+ 2632      80E4FFFF 
+ 2633 193d F30F6F85 		movdqu	-7024(%rbp), %xmm0
+ 2633      90E4FFFF 
+ 2634 1945 F30F7F85 		movdqu	%xmm0, -6992(%rbp)
+ 2634      B0E4FFFF 
+ 2635 194d F30F6F85 		movdqu	-7040(%rbp), %xmm0
+ 2635      80E4FFFF 
+ 2636 1955 F30F7F85 		movdqu	%xmm0, -7008(%rbp)
+ 2636      A0E4FFFF 
+ 2637              	.LBB886:
+ 2638              	.LBB887:
+ 2639              	.LBB888:
+ 2640              	.LBB889:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2641              		.loc 3 529 0
+ 2642 195d F30F6F8D 		movdqu	-7008(%rbp), %xmm1
+ 2642      A0E4FFFF 
+ 2643 1965 F30F6F85 		movdqu	-6992(%rbp), %xmm0
+ 2643      B0E4FFFF 
+ 2644 196d 660F3800 		pshufb	%xmm1, %xmm0
+ 2644      C1
+ 2645              	.LBE889:
+ 2646              	.LBE888:
+ 2647              	.LBE887:
+ 2648              	.LBE886:
+ 2649              	.LBE885:
+ 2650              	.LBE884:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 2651              		.loc 2 1569 0
+ 2652 1972 660F7F85 		movdqa	%xmm0, -10992(%rbp)
+ 2652      10D5FFFF 
+ 2653 197a 660F6F85 		movdqa	-10992(%rbp), %xmm0
+ 2653      10D5FFFF 
+ 2654 1982 660FEF85 		pxor	-7232(%rbp), %xmm0
+ 2654      C0E3FFFF 
+ 2655 198a F30F7F85 		movdqu	%xmm0, -7232(%rbp)
+ 2655      C0E3FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 2656              		.loc 2 1571 0
+ 2657 1992 F30F6F85 		movdqu	-7232(%rbp), %xmm0
+ 2657      C0E3FFFF 
+ 2658              	.LBE871:
+ 2659              	.LBE870:
+ 2660              		.loc 2 1746 0
+ 2661 199a F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+ 2661      00D9FFFF 
+ 2662 19a2 F30F6F85 		movdqu	-9968(%rbp), %xmm0
+ 2662      10D9FFFF 
+ 2663 19aa F30F6F8D 		movdqu	-9984(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 108
+
+
+ 2663      00D9FFFF 
+ 2664 19b2 660FEFC1 		pxor	%xmm1, %xmm0
+ 2665 19b6 F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+ 2665      00D9FFFF 
+ 2666 19be 488B8578 		movq	-10632(%rbp), %rax
+ 2666      D6FFFF
+ 2667 19c5 4883C030 		addq	$48, %rax
+ 2668 19c9 F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 2668      00D9FFFF 
+ 2669 19d1 F30F7F00 		movdqu	%xmm0, (%rax)
+ 2670 19d5 F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 2670      00D9FFFF 
+ 2671 19dd F30F7F85 		movdqu	%xmm0, -6960(%rbp)
+ 2671      D0E4FFFF 
+ 2672              	.LBB890:
+ 2673              	.LBB891:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 2674              		.loc 2 1681 0
+ 2675 19e5 B8080000 		movl	$8, %eax
+ 2675      00
+ 2676 19ea 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 2676      00000000 
+ 2677 19f2 F30F7F85 		movdqu	%xmm0, -6928(%rbp)
+ 2677      F0E4FFFF 
+ 2678 19fa 8985ECE4 		movl	%eax, -6932(%rbp)
+ 2678      FFFF
+ 2679 1a00 F30F6F85 		movdqu	-6928(%rbp), %xmm0
+ 2679      F0E4FFFF 
+ 2680 1a08 F30F7F85 		movdqu	%xmm0, -6896(%rbp)
+ 2680      10E5FFFF 
+ 2681 1a10 8B85ECE4 		movl	-6932(%rbp), %eax
+ 2681      FFFF
+ 2682 1a16 89850CE5 		movl	%eax, -6900(%rbp)
+ 2682      FFFF
+ 2683              	.LBB892:
+ 2684              	.LBB893:
+ 2685              	.LBB894:
+ 2686              	.LBB895:
+ 2687              		.loc 3 598 0
+ 2688 1a1c 8B850CE5 		movl	-6900(%rbp), %eax
+ 2688      FFFF
+ 2689 1a22 F30F6F85 		movdqu	-6896(%rbp), %xmm0
+ 2689      10E5FFFF 
+ 2690 1a2a 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 2690      C003
+ 2691              	.LBE895:
+ 2692              	.LBE894:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 2693              		.loc 2 519 0
+ 2694 1a30 F30F7F85 		movdqu	%xmm0, -6928(%rbp)
+ 2694      F0E4FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 2695              		.loc 2 526 0
+ 2696 1a38 F30F6F85 		movdqu	-6928(%rbp), %xmm0
+ 2696      F0E4FFFF 
+ 2697              	.LBE893:
+ 2698              	.LBE892:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 109
+
+
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 2699              		.loc 2 1681 0
+ 2700 1a40 660F7F85 		movdqa	%xmm0, -10960(%rbp)
+ 2700      30D5FFFF 
+ 2701 1a48 F30F6F85 		movdqu	-6960(%rbp), %xmm0
+ 2701      D0E4FFFF 
+ 2702 1a50 F30F7F85 		movdqu	%xmm0, -6880(%rbp)
+ 2702      20E5FFFF 
+ 2703 1a58 F30F6F85 		movdqu	-6880(%rbp), %xmm0
+ 2703      20E5FFFF 
+ 2704 1a60 F30F7F85 		movdqu	%xmm0, -6848(%rbp)
+ 2704      40E5FFFF 
+ 2705 1a68 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 2705      000000
+ 2706 1a6f 48898538 		movq	%rax, -6856(%rbp)
+ 2706      E5FFFF
+ 2707              	.LBB896:
+ 2708              	.LBB897:
+ 2709              	.LBB898:
+ 2710              	.LBB899:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 2711              		.loc 2 851 0
+ 2712 1a76 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 2712      00000000 
+ 2713 1a7e F30F7F85 		movdqu	%xmm0, -6816(%rbp)
+ 2713      60E5FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 2714              		.loc 2 854 0
+ 2715 1a86 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 2715      00000000 
+ 2716 1a8e F30F6F8D 		movdqu	-6848(%rbp), %xmm1
+ 2716      40E5FFFF 
+ 2717 1a96 F30F7F8D 		movdqu	%xmm1, -6736(%rbp)
+ 2717      B0E5FFFF 
+ 2718 1a9e F30F7F85 		movdqu	%xmm0, -6752(%rbp)
+ 2718      A0E5FFFF 
+ 2719              	.LBB900:
+ 2720              	.LBB901:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 2721              		.loc 2 206 0
+ 2722 1aa6 F30F6F85 		movdqu	-6752(%rbp), %xmm0
+ 2722      A0E5FFFF 
+ 2723 1aae F30F6F8D 		movdqu	-6736(%rbp), %xmm1
+ 2723      B0E5FFFF 
+ 2724 1ab6 660FDBC1 		pand	%xmm1, %xmm0
+ 2725              	.LBE901:
+ 2726              	.LBE900:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 2727              		.loc 2 854 0
+ 2728 1aba F30F7F85 		movdqu	%xmm0, -6768(%rbp)
+ 2728      90E5FFFF 
+ 2729 1ac2 F30F6F85 		movdqu	-6848(%rbp), %xmm0
+ 2729      40E5FFFF 
+ 2730 1aca F30F7F85 		movdqu	%xmm0, -6704(%rbp)
+ 2730      D0E5FFFF 
+ 2731              	.LBB902:
+ 2732              	.LBB903:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 110
+
+
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 2733              		.loc 3 433 0
+ 2734 1ad2 F30F6F85 		movdqu	-6704(%rbp), %xmm0
+ 2734      D0E5FFFF 
+ 2735 1ada 660F72D0 		psrld	$4, %xmm0
+ 2735      04
+ 2736              	.LBE903:
+ 2737              	.LBE902:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 2738              		.loc 2 857 0
+ 2739 1adf F30F7F85 		movdqu	%xmm0, -6784(%rbp)
+ 2739      80E5FFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2740              		.loc 2 859 0
+ 2741 1ae7 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 2741      00000000 
+ 2742 1aef F30F6F8D 		movdqu	-6784(%rbp), %xmm1
+ 2742      80E5FFFF 
+ 2743 1af7 F30F7F8D 		movdqu	%xmm1, -6672(%rbp)
+ 2743      F0E5FFFF 
+ 2744 1aff F30F7F85 		movdqu	%xmm0, -6688(%rbp)
+ 2744      E0E5FFFF 
+ 2745              	.LBB904:
+ 2746              	.LBB905:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 2747              		.loc 2 206 0
+ 2748 1b07 F30F6F85 		movdqu	-6688(%rbp), %xmm0
+ 2748      E0E5FFFF 
+ 2749 1b0f F30F6F8D 		movdqu	-6672(%rbp), %xmm1
+ 2749      F0E5FFFF 
+ 2750 1b17 660FDBC1 		pand	%xmm1, %xmm0
+ 2751              	.LBE905:
+ 2752              	.LBE904:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2753              		.loc 2 859 0
+ 2754 1b1b F30F7F85 		movdqu	%xmm0, -6784(%rbp)
+ 2754      80E5FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 2755              		.loc 2 866 0
+ 2756 1b23 C7855CE5 		movl	$0, -6820(%rbp)
+ 2756      FFFF0000 
+ 2756      0000
+ 2757 1b2d E9BE0100 		jmp	.L34
+ 2757      00
+ 2758              	.L35:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 2759              		.loc 2 868 0
+ 2760 1b32 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 2760      00000000 
+ 2761 1b3a F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 2761      10E6FFFF 
+ 2762 1b42 F30F6F85 		movdqu	-6784(%rbp), %xmm0
+ 2762      80E5FFFF 
+ 2763 1b4a F30F7F85 		movdqu	%xmm0, -6656(%rbp)
+ 2763      00E6FFFF 
+ 2764 1b52 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 2764      10E6FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 111
+
+
+ 2765 1b5a F30F7F85 		movdqu	%xmm0, -6608(%rbp)
+ 2765      30E6FFFF 
+ 2766 1b62 F30F6F85 		movdqu	-6656(%rbp), %xmm0
+ 2766      00E6FFFF 
+ 2767 1b6a F30F7F85 		movdqu	%xmm0, -6624(%rbp)
+ 2767      20E6FFFF 
+ 2768              	.LBB906:
+ 2769              	.LBB907:
+ 2770              	.LBB908:
+ 2771              	.LBB909:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2772              		.loc 3 529 0
+ 2773 1b72 F30F6F8D 		movdqu	-6624(%rbp), %xmm1
+ 2773      20E6FFFF 
+ 2774 1b7a F30F6F85 		movdqu	-6608(%rbp), %xmm0
+ 2774      30E6FFFF 
+ 2775 1b82 660F3800 		pshufb	%xmm1, %xmm0
+ 2775      C1
+ 2776              	.LBE909:
+ 2777              	.LBE908:
+ 2778              	.LBE907:
+ 2779              	.LBE906:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 2780              		.loc 2 868 0
+ 2781 1b87 F30F7F85 		movdqu	%xmm0, -6800(%rbp)
+ 2781      70E5FFFF 
+ 2782 1b8f F30F6F85 		movdqu	-6768(%rbp), %xmm0
+ 2782      90E5FFFF 
+ 2783 1b97 F30F7F85 		movdqu	%xmm0, -6576(%rbp)
+ 2783      50E6FFFF 
+ 2784 1b9f F30F6F85 		movdqu	-6800(%rbp), %xmm0
+ 2784      70E5FFFF 
+ 2785 1ba7 F30F7F85 		movdqu	%xmm0, -6592(%rbp)
+ 2785      40E6FFFF 
+ 2786              	.LBB910:
+ 2787              	.LBB911:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 2788              		.loc 2 234 0
+ 2789 1baf F30F6F85 		movdqu	-6592(%rbp), %xmm0
+ 2789      40E6FFFF 
+ 2790 1bb7 F30F6F8D 		movdqu	-6576(%rbp), %xmm1
+ 2790      50E6FFFF 
+ 2791 1bbf 660FEBC1 		por	%xmm1, %xmm0
+ 2792              	.LBE911:
+ 2793              	.LBE910:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 2794              		.loc 2 870 0
+ 2795 1bc3 F30F7F85 		movdqu	%xmm0, -6800(%rbp)
+ 2795      70E5FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 2796              		.loc 2 872 0
+ 2797 1bcb 8B855CE5 		mov	-6820(%rbp), %eax
+ 2797      FFFF
+ 2798 1bd1 48C1E004 		salq	$4, %rax
+ 2799 1bd5 48038538 		addq	-6856(%rbp), %rax
+ 2799      E5FFFF
+ 2800 1bdc 660F6F00 		movdqa	(%rax), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 112
+
+
+ 2801 1be0 F30F7F85 		movdqu	%xmm0, -6544(%rbp)
+ 2801      70E6FFFF 
+ 2802 1be8 F30F6F85 		movdqu	-6800(%rbp), %xmm0
+ 2802      70E5FFFF 
+ 2803 1bf0 F30F7F85 		movdqu	%xmm0, -6560(%rbp)
+ 2803      60E6FFFF 
+ 2804 1bf8 F30F6F85 		movdqu	-6544(%rbp), %xmm0
+ 2804      70E6FFFF 
+ 2805 1c00 F30F7F85 		movdqu	%xmm0, -6512(%rbp)
+ 2805      90E6FFFF 
+ 2806 1c08 F30F6F85 		movdqu	-6560(%rbp), %xmm0
+ 2806      60E6FFFF 
+ 2807 1c10 F30F7F85 		movdqu	%xmm0, -6528(%rbp)
+ 2807      80E6FFFF 
+ 2808              	.LBB912:
+ 2809              	.LBB913:
+ 2810              	.LBB914:
+ 2811              	.LBB915:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2812              		.loc 3 529 0
+ 2813 1c18 F30F6F8D 		movdqu	-6528(%rbp), %xmm1
+ 2813      80E6FFFF 
+ 2814 1c20 F30F6F85 		movdqu	-6512(%rbp), %xmm0
+ 2814      90E6FFFF 
+ 2815 1c28 660F3800 		pshufb	%xmm1, %xmm0
+ 2815      C1
+ 2816              	.LBE915:
+ 2817              	.LBE914:
+ 2818              	.LBE913:
+ 2819              	.LBE912:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 2820              		.loc 2 872 0
+ 2821 1c2d F30F7F85 		movdqu	%xmm0, -6800(%rbp)
+ 2821      70E5FFFF 
+ 2822 1c35 F30F6F85 		movdqu	-6816(%rbp), %xmm0
+ 2822      60E5FFFF 
+ 2823 1c3d F30F7F85 		movdqu	%xmm0, -6480(%rbp)
+ 2823      B0E6FFFF 
+ 2824 1c45 F30F6F85 		movdqu	-6800(%rbp), %xmm0
+ 2824      70E5FFFF 
+ 2825 1c4d F30F7F85 		movdqu	%xmm0, -6496(%rbp)
+ 2825      A0E6FFFF 
+ 2826              	.LBB916:
+ 2827              	.LBB917:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 2828              		.loc 2 234 0
+ 2829 1c55 F30F6F85 		movdqu	-6496(%rbp), %xmm0
+ 2829      A0E6FFFF 
+ 2830 1c5d F30F6F8D 		movdqu	-6480(%rbp), %xmm1
+ 2830      B0E6FFFF 
+ 2831 1c65 660FEBC1 		por	%xmm1, %xmm0
+ 2832              	.LBE917:
+ 2833              	.LBE916:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 2834              		.loc 2 874 0
+ 2835 1c69 F30F7F85 		movdqu	%xmm0, -6816(%rbp)
+ 2835      60E5FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 113
+
+
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 2836              		.loc 2 876 0
+ 2837 1c71 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 2837      00000000 
+ 2838 1c79 F30F6F8D 		movdqu	-6784(%rbp), %xmm1
+ 2838      80E5FFFF 
+ 2839 1c81 F30F7F8D 		movdqu	%xmm1, -6448(%rbp)
+ 2839      D0E6FFFF 
+ 2840 1c89 F30F7F85 		movdqu	%xmm0, -6464(%rbp)
+ 2840      C0E6FFFF 
+ 2841              	.LBB918:
+ 2842              	.LBB919:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 2843              		.loc 2 290 0
+ 2844 1c91 F30F6F8D 		movdqu	-6464(%rbp), %xmm1
+ 2844      C0E6FFFF 
+ 2845 1c99 F30F6F85 		movdqu	-6448(%rbp), %xmm0
+ 2845      D0E6FFFF 
+ 2846 1ca1 660FF8C1 		psubb	%xmm1, %xmm0
+ 2847              	.LBE919:
+ 2848              	.LBE918:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 2849              		.loc 2 876 0
+ 2850 1ca5 F30F7F85 		movdqu	%xmm0, -6784(%rbp)
+ 2850      80E5FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2851              		.loc 2 878 0
+ 2852 1cad 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 2852      00000000 
+ 2853 1cb5 F30F6F8D 		movdqu	-6784(%rbp), %xmm1
+ 2853      80E5FFFF 
+ 2854 1cbd F30F7F8D 		movdqu	%xmm1, -6416(%rbp)
+ 2854      F0E6FFFF 
+ 2855 1cc5 F30F7F85 		movdqu	%xmm0, -6432(%rbp)
+ 2855      E0E6FFFF 
+ 2856              	.LBB920:
+ 2857              	.LBB921:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 2858              		.loc 2 206 0
+ 2859 1ccd F30F6F85 		movdqu	-6432(%rbp), %xmm0
+ 2859      E0E6FFFF 
+ 2860 1cd5 F30F6F8D 		movdqu	-6416(%rbp), %xmm1
+ 2860      F0E6FFFF 
+ 2861 1cdd 660FDBC1 		pand	%xmm1, %xmm0
+ 2862              	.LBE921:
+ 2863              	.LBE920:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 2864              		.loc 2 878 0
+ 2865 1ce1 F30F7F85 		movdqu	%xmm0, -6784(%rbp)
+ 2865      80E5FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 2866              		.loc 2 866 0
+ 2867 1ce9 83855CE5 		addl	$1, -6820(%rbp)
+ 2867      FFFF01
+ 2868              	.L34:
+ 2869 1cf0 83BD5CE5 		cmpl	$15, -6820(%rbp)
+ 2869      FFFF0F
+
GAS LISTING /tmp/ccjbMjHD.s 			page 114
+
+
+ 2870 1cf7 0F8635FE 		jbe	.L35
+ 2870      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 2871              		.loc 2 882 0
+ 2872 1cfd F30F6F85 		movdqu	-6816(%rbp), %xmm0
+ 2872      60E5FFFF 
+ 2873              	.LBE899:
+ 2874              	.LBE898:
+ 2875              	.LBE897:
+ 2876              	.LBE896:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 2877              		.loc 2 1682 0
+ 2878 1d05 660F7F85 		movdqa	%xmm0, -10976(%rbp)
+ 2878      20D5FFFF 
+ 2879              	.LBB922:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 2880              		.loc 2 1683 0
+ 2881 1d0d 660F6F85 		movdqa	-10976(%rbp), %xmm0
+ 2881      20D5FFFF 
+ 2882 1d15 F30F7F85 		movdqu	%xmm0, -10384(%rbp)
+ 2882      70D7FFFF 
+ 2883 1d1d E8000000 		call	KDbgWriterGet at PLT
+ 2883      00
+ 2884 1d22 4885C0   		testq	%rax, %rax
+ 2885 1d25 7479     		je	.L37
+ 2886 1d27 BF010000 		movl	$1, %edi
+ 2886      00
+ 2887 1d2c E8000000 		call	KDbgCondToFlag at PLT
+ 2887      00
+ 2888 1d31 4889C6   		movq	%rax, %rsi
+ 2889 1d34 BF100000 		movl	$16, %edi
+ 2889      00
+ 2890 1d39 E8000000 		call	KDbgTestModConds at PLT
+ 2890      00
+ 2891 1d3e 84C0     		testb	%al, %al
+ 2892 1d40 745E     		je	.L37
+ 2893 1d42 8B857CD7 		movl	-10372(%rbp), %eax
+ 2893      FFFF
+ 2894 1d48 89C7     		movl	%eax, %edi
+ 2895 1d4a E8B1E2FF 		call	bswap_32
+ 2895      FF
+ 2896 1d4f 4189C5   		movl	%eax, %r13d
+ 2897 1d52 8B8578D7 		movl	-10376(%rbp), %eax
+ 2897      FFFF
+ 2898 1d58 89C7     		movl	%eax, %edi
+ 2899 1d5a E8A1E2FF 		call	bswap_32
+ 2899      FF
+ 2900 1d5f 4189C4   		movl	%eax, %r12d
+ 2901 1d62 8B8574D7 		movl	-10380(%rbp), %eax
+ 2901      FFFF
+ 2902 1d68 89C7     		movl	%eax, %edi
+ 2903 1d6a E891E2FF 		call	bswap_32
+ 2903      FF
+ 2904 1d6f 89C3     		movl	%eax, %ebx
+ 2905 1d71 8B8570D7 		movl	-10384(%rbp), %eax
+ 2905      FFFF
+ 2906 1d77 89C7     		movl	%eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 115
+
+
+ 2907 1d79 E882E2FF 		call	bswap_32
+ 2907      FF
+ 2908 1d7e 4589E9   		movl	%r13d, %r9d
+ 2909 1d81 4589E0   		movl	%r12d, %r8d
+ 2910 1d84 89D9     		movl	%ebx, %ecx
+ 2911 1d86 89C2     		movl	%eax, %edx
+ 2912 1d88 488D3500 		leaq	.LC0(%rip), %rsi
+ 2912      000000
+ 2913 1d8f 488D3D00 		leaq	.LC1(%rip), %rdi
+ 2913      000000
+ 2914 1d96 B8000000 		movl	$0, %eax
+ 2914      00
+ 2915 1d9b E8000000 		call	KDbgMsg at PLT
+ 2915      00
+ 2916              	.L37:
+ 2917 1da0 660F6F85 		movdqa	-10976(%rbp), %xmm0
+ 2917      20D5FFFF 
+ 2918 1da8 F30F7F85 		movdqu	%xmm0, -6400(%rbp)
+ 2918      00E7FFFF 
+ 2919              	.LBE922:
+ 2920              	.LBB923:
+ 2921              	.LBB924:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 2922              		.loc 2 667 0
+ 2923 1db0 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 2923      00000000 
+ 2924 1db8 F30F6F8D 		movdqu	-6400(%rbp), %xmm1
+ 2924      00E7FFFF 
+ 2925 1dc0 F30F7F8D 		movdqu	%xmm1, -6368(%rbp)
+ 2925      20E7FFFF 
+ 2926 1dc8 F30F7F85 		movdqu	%xmm0, -6384(%rbp)
+ 2926      10E7FFFF 
+ 2927 1dd0 F30F6F85 		movdqu	-6368(%rbp), %xmm0
+ 2927      20E7FFFF 
+ 2928 1dd8 F30F7F85 		movdqu	%xmm0, -6336(%rbp)
+ 2928      40E7FFFF 
+ 2929 1de0 F30F6F85 		movdqu	-6384(%rbp), %xmm0
+ 2929      10E7FFFF 
+ 2930 1de8 F30F7F85 		movdqu	%xmm0, -6352(%rbp)
+ 2930      30E7FFFF 
+ 2931              	.LBB925:
+ 2932              	.LBB926:
+ 2933              	.LBB927:
+ 2934              	.LBB928:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 2935              		.loc 3 529 0
+ 2936 1df0 F30F6F8D 		movdqu	-6352(%rbp), %xmm1
+ 2936      30E7FFFF 
+ 2937 1df8 F30F6F85 		movdqu	-6336(%rbp), %xmm0
+ 2937      40E7FFFF 
+ 2938 1e00 660F3800 		pshufb	%xmm1, %xmm0
+ 2938      C1
+ 2939              	.LBE928:
+ 2940              	.LBE927:
+ 2941              	.LBE926:
+ 2942              	.LBE925:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+
GAS LISTING /tmp/ccjbMjHD.s 			page 116
+
+
+ 2943              		.loc 2 667 0
+ 2944 1e05 F30F7F85 		movdqu	%xmm0, -6400(%rbp)
+ 2944      00E7FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 2945              		.loc 2 668 0
+ 2946 1e0d F30F6F85 		movdqu	-6400(%rbp), %xmm0
+ 2946      00E7FFFF 
+ 2947              	.LBE924:
+ 2948              	.LBE923:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 2949              		.loc 2 1684 0
+ 2950 1e15 660F7F85 		movdqa	%xmm0, -10976(%rbp)
+ 2950      20D5FFFF 
+ 2951              	.LBB929:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 2952              		.loc 2 1685 0
+ 2953 1e1d 660F6F85 		movdqa	-10976(%rbp), %xmm0
+ 2953      20D5FFFF 
+ 2954 1e25 F30F7F85 		movdqu	%xmm0, -10400(%rbp)
+ 2954      60D7FFFF 
+ 2955 1e2d E8000000 		call	KDbgWriterGet at PLT
+ 2955      00
+ 2956 1e32 4885C0   		testq	%rax, %rax
+ 2957 1e35 7479     		je	.L39
+ 2958 1e37 BF010000 		movl	$1, %edi
+ 2958      00
+ 2959 1e3c E8000000 		call	KDbgCondToFlag at PLT
+ 2959      00
+ 2960 1e41 4889C6   		movq	%rax, %rsi
+ 2961 1e44 BF100000 		movl	$16, %edi
+ 2961      00
+ 2962 1e49 E8000000 		call	KDbgTestModConds at PLT
+ 2962      00
+ 2963 1e4e 84C0     		testb	%al, %al
+ 2964 1e50 745E     		je	.L39
+ 2965 1e52 8B856CD7 		movl	-10388(%rbp), %eax
+ 2965      FFFF
+ 2966 1e58 89C7     		movl	%eax, %edi
+ 2967 1e5a E8A1E1FF 		call	bswap_32
+ 2967      FF
+ 2968 1e5f 4189C5   		movl	%eax, %r13d
+ 2969 1e62 8B8568D7 		movl	-10392(%rbp), %eax
+ 2969      FFFF
+ 2970 1e68 89C7     		movl	%eax, %edi
+ 2971 1e6a E891E1FF 		call	bswap_32
+ 2971      FF
+ 2972 1e6f 4189C4   		movl	%eax, %r12d
+ 2973 1e72 8B8564D7 		movl	-10396(%rbp), %eax
+ 2973      FFFF
+ 2974 1e78 89C7     		movl	%eax, %edi
+ 2975 1e7a E881E1FF 		call	bswap_32
+ 2975      FF
+ 2976 1e7f 89C3     		movl	%eax, %ebx
+ 2977 1e81 8B8560D7 		movl	-10400(%rbp), %eax
+ 2977      FFFF
+ 2978 1e87 89C7     		movl	%eax, %edi
+ 2979 1e89 E872E1FF 		call	bswap_32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 117
+
+
+ 2979      FF
+ 2980 1e8e 4589E9   		movl	%r13d, %r9d
+ 2981 1e91 4589E0   		movl	%r12d, %r8d
+ 2982 1e94 89D9     		movl	%ebx, %ecx
+ 2983 1e96 89C2     		movl	%eax, %edx
+ 2984 1e98 488D3500 		leaq	.LC2(%rip), %rsi
+ 2984      000000
+ 2985 1e9f 488D3D00 		leaq	.LC1(%rip), %rdi
+ 2985      000000
+ 2986 1ea6 B8000000 		movl	$0, %eax
+ 2986      00
+ 2987 1eab E8000000 		call	KDbgMsg at PLT
+ 2987      00
+ 2988              	.L39:
+ 2989 1eb0 660F6F85 		movdqa	-10976(%rbp), %xmm0
+ 2989      20D5FFFF 
+ 2990 1eb8 F30F7F85 		movdqu	%xmm0, -6304(%rbp)
+ 2990      60E7FFFF 
+ 2991 1ec0 660F6F85 		movdqa	-10960(%rbp), %xmm0
+ 2991      30D5FFFF 
+ 2992 1ec8 F30F7F85 		movdqu	%xmm0, -6320(%rbp)
+ 2992      50E7FFFF 
+ 2993              	.LBE929:
+ 2994              	.LBB930:
+ 2995              	.LBB931:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 2996              		.loc 2 178 0
+ 2997 1ed0 F30F6F85 		movdqu	-6320(%rbp), %xmm0
+ 2997      50E7FFFF 
+ 2998 1ed8 F30F6F8D 		movdqu	-6304(%rbp), %xmm1
+ 2998      60E7FFFF 
+ 2999 1ee0 660FEFC1 		pxor	%xmm1, %xmm0
+ 3000              	.LBE931:
+ 3001              	.LBE930:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 3002              		.loc 2 1686 0
+ 3003 1ee4 660F7F85 		movdqa	%xmm0, -10976(%rbp)
+ 3003      20D5FFFF 
+ 3004              	.LBB932:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 3005              		.loc 2 1687 0
+ 3006 1eec 660F6F85 		movdqa	-10976(%rbp), %xmm0
+ 3006      20D5FFFF 
+ 3007 1ef4 F30F7F85 		movdqu	%xmm0, -10416(%rbp)
+ 3007      50D7FFFF 
+ 3008 1efc E8000000 		call	KDbgWriterGet at PLT
+ 3008      00
+ 3009 1f01 4885C0   		testq	%rax, %rax
+ 3010 1f04 7479     		je	.L41
+ 3011 1f06 BF010000 		movl	$1, %edi
+ 3011      00
+ 3012 1f0b E8000000 		call	KDbgCondToFlag at PLT
+ 3012      00
+ 3013 1f10 4889C6   		movq	%rax, %rsi
+ 3014 1f13 BF100000 		movl	$16, %edi
+ 3014      00
+ 3015 1f18 E8000000 		call	KDbgTestModConds at PLT
+
GAS LISTING /tmp/ccjbMjHD.s 			page 118
+
+
+ 3015      00
+ 3016 1f1d 84C0     		testb	%al, %al
+ 3017 1f1f 745E     		je	.L41
+ 3018 1f21 8B855CD7 		movl	-10404(%rbp), %eax
+ 3018      FFFF
+ 3019 1f27 89C7     		movl	%eax, %edi
+ 3020 1f29 E8D2E0FF 		call	bswap_32
+ 3020      FF
+ 3021 1f2e 4189C5   		movl	%eax, %r13d
+ 3022 1f31 8B8558D7 		movl	-10408(%rbp), %eax
+ 3022      FFFF
+ 3023 1f37 89C7     		movl	%eax, %edi
+ 3024 1f39 E8C2E0FF 		call	bswap_32
+ 3024      FF
+ 3025 1f3e 4189C4   		movl	%eax, %r12d
+ 3026 1f41 8B8554D7 		movl	-10412(%rbp), %eax
+ 3026      FFFF
+ 3027 1f47 89C7     		movl	%eax, %edi
+ 3028 1f49 E8B2E0FF 		call	bswap_32
+ 3028      FF
+ 3029 1f4e 89C3     		movl	%eax, %ebx
+ 3030 1f50 8B8550D7 		movl	-10416(%rbp), %eax
+ 3030      FFFF
+ 3031 1f56 89C7     		movl	%eax, %edi
+ 3032 1f58 E8A3E0FF 		call	bswap_32
+ 3032      FF
+ 3033 1f5d 4589E9   		movl	%r13d, %r9d
+ 3034 1f60 4589E0   		movl	%r12d, %r8d
+ 3035 1f63 89D9     		movl	%ebx, %ecx
+ 3036 1f65 89C2     		movl	%eax, %edx
+ 3037 1f67 488D3500 		leaq	.LC3(%rip), %rsi
+ 3037      000000
+ 3038 1f6e 488D3D00 		leaq	.LC1(%rip), %rdi
+ 3038      000000
+ 3039 1f75 B8000000 		movl	$0, %eax
+ 3039      00
+ 3040 1f7a E8000000 		call	KDbgMsg at PLT
+ 3040      00
+ 3041              	.L41:
+ 3042 1f7f 660F6F85 		movdqa	-10976(%rbp), %xmm0
+ 3042      20D5FFFF 
+ 3043 1f87 F30F7F85 		movdqu	%xmm0, -6288(%rbp)
+ 3043      70E7FFFF 
+ 3044 1f8f F30F6F85 		movdqu	-6288(%rbp), %xmm0
+ 3044      70E7FFFF 
+ 3045 1f97 F30F7F85 		movdqu	%xmm0, -6256(%rbp)
+ 3045      90E7FFFF 
+ 3046              	.LBE932:
+ 3047              	.LBB933:
+ 3048              	.LBB934:
+ 3049              	.LBB935:
+ 3050              	.LBB936:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 3051              		.loc 3 450 0
+ 3052 1f9f F30F6F85 		movdqu	-6256(%rbp), %xmm0
+ 3052      90E7FFFF 
+ 3053 1fa7 660F70C0 		pshufd	$255, %xmm0, %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 119
+
+
+ 3053      FF
+ 3054              	.LBE936:
+ 3055              	.LBE935:
+ 3056              	.LBE934:
+ 3057              	.LBE933:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 3058              		.loc 2 1688 0
+ 3059 1fac 660F7F85 		movdqa	%xmm0, -10976(%rbp)
+ 3059      20D5FFFF 
+ 3060              	.LBB937:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 3061              		.loc 2 1689 0
+ 3062 1fb4 660F6F85 		movdqa	-10976(%rbp), %xmm0
+ 3062      20D5FFFF 
+ 3063 1fbc F30F7F85 		movdqu	%xmm0, -10432(%rbp)
+ 3063      40D7FFFF 
+ 3064 1fc4 E8000000 		call	KDbgWriterGet at PLT
+ 3064      00
+ 3065 1fc9 4885C0   		testq	%rax, %rax
+ 3066 1fcc 7479     		je	.L43
+ 3067 1fce BF010000 		movl	$1, %edi
+ 3067      00
+ 3068 1fd3 E8000000 		call	KDbgCondToFlag at PLT
+ 3068      00
+ 3069 1fd8 4889C6   		movq	%rax, %rsi
+ 3070 1fdb BF100000 		movl	$16, %edi
+ 3070      00
+ 3071 1fe0 E8000000 		call	KDbgTestModConds at PLT
+ 3071      00
+ 3072 1fe5 84C0     		testb	%al, %al
+ 3073 1fe7 745E     		je	.L43
+ 3074 1fe9 8B854CD7 		movl	-10420(%rbp), %eax
+ 3074      FFFF
+ 3075 1fef 89C7     		movl	%eax, %edi
+ 3076 1ff1 E80AE0FF 		call	bswap_32
+ 3076      FF
+ 3077 1ff6 4189C5   		movl	%eax, %r13d
+ 3078 1ff9 8B8548D7 		movl	-10424(%rbp), %eax
+ 3078      FFFF
+ 3079 1fff 89C7     		movl	%eax, %edi
+ 3080 2001 E8FADFFF 		call	bswap_32
+ 3080      FF
+ 3081 2006 4189C4   		movl	%eax, %r12d
+ 3082 2009 8B8544D7 		movl	-10428(%rbp), %eax
+ 3082      FFFF
+ 3083 200f 89C7     		movl	%eax, %edi
+ 3084 2011 E8EADFFF 		call	bswap_32
+ 3084      FF
+ 3085 2016 89C3     		movl	%eax, %ebx
+ 3086 2018 8B8540D7 		movl	-10432(%rbp), %eax
+ 3086      FFFF
+ 3087 201e 89C7     		movl	%eax, %edi
+ 3088 2020 E8DBDFFF 		call	bswap_32
+ 3088      FF
+ 3089 2025 4589E9   		movl	%r13d, %r9d
+ 3090 2028 4589E0   		movl	%r12d, %r8d
+ 3091 202b 89D9     		movl	%ebx, %ecx
+
GAS LISTING /tmp/ccjbMjHD.s 			page 120
+
+
+ 3092 202d 89C2     		movl	%eax, %edx
+ 3093 202f 488D3500 		leaq	.LC4(%rip), %rsi
+ 3093      000000
+ 3094 2036 488D3D00 		leaq	.LC1(%rip), %rdi
+ 3094      000000
+ 3095 203d B8000000 		movl	$0, %eax
+ 3095      00
+ 3096 2042 E8000000 		call	KDbgMsg at PLT
+ 3096      00
+ 3097              	.L43:
+ 3098              	.LBE937:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 3099              		.loc 2 1690 0
+ 3100 2047 660F6F85 		movdqa	-10976(%rbp), %xmm0
+ 3100      20D5FFFF 
+ 3101              	.LBE891:
+ 3102              	.LBE890:
+1747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x08,4);
+ 3103              		.loc 2 1747 0
+ 3104 204f F30F7F85 		movdqu	%xmm0, -9968(%rbp)
+ 3104      10D9FFFF 
+ 3105 2057 F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 3105      00D9FFFF 
+ 3106 205f F30F7F85 		movdqu	%xmm0, -6240(%rbp)
+ 3106      A0E7FFFF 
+ 3107              	.LBB938:
+ 3108              	.LBB939:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 3109              		.loc 2 1565 0
+ 3110 2067 F30F6F85 		movdqu	-6240(%rbp), %xmm0
+ 3110      A0E7FFFF 
+ 3111 206f 660F7F85 		movdqa	%xmm0, -10944(%rbp)
+ 3111      40D5FFFF 
+ 3112 2077 660F6F85 		movdqa	-10944(%rbp), %xmm0
+ 3112      40D5FFFF 
+ 3113 207f F30F7F85 		movdqu	%xmm0, -6224(%rbp)
+ 3113      B0E7FFFF 
+ 3114              	.LBB940:
+ 3115              	.LBB941:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3116              		.loc 2 1278 0
+ 3117 2087 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 3117      00000000 
+ 3118 208f F30F6F8D 		movdqu	-6224(%rbp), %xmm1
+ 3118      B0E7FFFF 
+ 3119 2097 F30F7F8D 		movdqu	%xmm1, -6192(%rbp)
+ 3119      D0E7FFFF 
+ 3120 209f F30F7F85 		movdqu	%xmm0, -6208(%rbp)
+ 3120      C0E7FFFF 
+ 3121 20a7 F30F6F85 		movdqu	-6192(%rbp), %xmm0
+ 3121      D0E7FFFF 
+ 3122 20af F30F7F85 		movdqu	%xmm0, -6160(%rbp)
+ 3122      F0E7FFFF 
+ 3123 20b7 F30F6F85 		movdqu	-6208(%rbp), %xmm0
+ 3123      C0E7FFFF 
+ 3124 20bf F30F7F85 		movdqu	%xmm0, -6176(%rbp)
+ 3124      E0E7FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 121
+
+
+ 3125              	.LBB942:
+ 3126              	.LBB943:
+ 3127              	.LBB944:
+ 3128              	.LBB945:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3129              		.loc 3 529 0
+ 3130 20c7 F30F6F8D 		movdqu	-6176(%rbp), %xmm1
+ 3130      E0E7FFFF 
+ 3131 20cf F30F6F85 		movdqu	-6160(%rbp), %xmm0
+ 3131      F0E7FFFF 
+ 3132 20d7 660F3800 		pshufb	%xmm1, %xmm0
+ 3132      C1
+ 3133              	.LBE945:
+ 3134              	.LBE944:
+ 3135              	.LBE943:
+ 3136              	.LBE942:
+ 3137              	.LBE941:
+ 3138              	.LBE940:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3139              		.loc 2 1567 0
+ 3140 20dc 660F7F85 		movdqa	%xmm0, -10944(%rbp)
+ 3140      40D5FFFF 
+ 3141 20e4 660F6F85 		movdqa	-10944(%rbp), %xmm0
+ 3141      40D5FFFF 
+ 3142 20ec 660FEF85 		pxor	-6240(%rbp), %xmm0
+ 3142      A0E7FFFF 
+ 3143 20f4 F30F7F85 		movdqu	%xmm0, -6240(%rbp)
+ 3143      A0E7FFFF 
+ 3144 20fc 660F6F85 		movdqa	-10944(%rbp), %xmm0
+ 3144      40D5FFFF 
+ 3145 2104 F30F7F85 		movdqu	%xmm0, -6144(%rbp)
+ 3145      00E8FFFF 
+ 3146              	.LBB946:
+ 3147              	.LBB947:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3148              		.loc 2 1278 0
+ 3149 210c 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 3149      00000000 
+ 3150 2114 F30F6F8D 		movdqu	-6144(%rbp), %xmm1
+ 3150      00E8FFFF 
+ 3151 211c F30F7F8D 		movdqu	%xmm1, -6112(%rbp)
+ 3151      20E8FFFF 
+ 3152 2124 F30F7F85 		movdqu	%xmm0, -6128(%rbp)
+ 3152      10E8FFFF 
+ 3153 212c F30F6F85 		movdqu	-6112(%rbp), %xmm0
+ 3153      20E8FFFF 
+ 3154 2134 F30F7F85 		movdqu	%xmm0, -6080(%rbp)
+ 3154      40E8FFFF 
+ 3155 213c F30F6F85 		movdqu	-6128(%rbp), %xmm0
+ 3155      10E8FFFF 
+ 3156 2144 F30F7F85 		movdqu	%xmm0, -6096(%rbp)
+ 3156      30E8FFFF 
+ 3157              	.LBB948:
+ 3158              	.LBB949:
+ 3159              	.LBB950:
+ 3160              	.LBB951:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+
GAS LISTING /tmp/ccjbMjHD.s 			page 122
+
+
+ 3161              		.loc 3 529 0
+ 3162 214c F30F6F8D 		movdqu	-6096(%rbp), %xmm1
+ 3162      30E8FFFF 
+ 3163 2154 F30F6F85 		movdqu	-6080(%rbp), %xmm0
+ 3163      40E8FFFF 
+ 3164 215c 660F3800 		pshufb	%xmm1, %xmm0
+ 3164      C1
+ 3165              	.LBE951:
+ 3166              	.LBE950:
+ 3167              	.LBE949:
+ 3168              	.LBE948:
+ 3169              	.LBE947:
+ 3170              	.LBE946:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3171              		.loc 2 1568 0
+ 3172 2161 660F7F85 		movdqa	%xmm0, -10944(%rbp)
+ 3172      40D5FFFF 
+ 3173 2169 660F6F85 		movdqa	-10944(%rbp), %xmm0
+ 3173      40D5FFFF 
+ 3174 2171 660FEF85 		pxor	-6240(%rbp), %xmm0
+ 3174      A0E7FFFF 
+ 3175 2179 F30F7F85 		movdqu	%xmm0, -6240(%rbp)
+ 3175      A0E7FFFF 
+ 3176 2181 660F6F85 		movdqa	-10944(%rbp), %xmm0
+ 3176      40D5FFFF 
+ 3177 2189 F30F7F85 		movdqu	%xmm0, -6064(%rbp)
+ 3177      50E8FFFF 
+ 3178              	.LBB952:
+ 3179              	.LBB953:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3180              		.loc 2 1278 0
+ 3181 2191 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 3181      00000000 
+ 3182 2199 F30F6F8D 		movdqu	-6064(%rbp), %xmm1
+ 3182      50E8FFFF 
+ 3183 21a1 F30F7F8D 		movdqu	%xmm1, -6032(%rbp)
+ 3183      70E8FFFF 
+ 3184 21a9 F30F7F85 		movdqu	%xmm0, -6048(%rbp)
+ 3184      60E8FFFF 
+ 3185 21b1 F30F6F85 		movdqu	-6032(%rbp), %xmm0
+ 3185      70E8FFFF 
+ 3186 21b9 F30F7F85 		movdqu	%xmm0, -6000(%rbp)
+ 3186      90E8FFFF 
+ 3187 21c1 F30F6F85 		movdqu	-6048(%rbp), %xmm0
+ 3187      60E8FFFF 
+ 3188 21c9 F30F7F85 		movdqu	%xmm0, -6016(%rbp)
+ 3188      80E8FFFF 
+ 3189              	.LBB954:
+ 3190              	.LBB955:
+ 3191              	.LBB956:
+ 3192              	.LBB957:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3193              		.loc 3 529 0
+ 3194 21d1 F30F6F8D 		movdqu	-6016(%rbp), %xmm1
+ 3194      80E8FFFF 
+ 3195 21d9 F30F6F85 		movdqu	-6000(%rbp), %xmm0
+ 3195      90E8FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 123
+
+
+ 3196 21e1 660F3800 		pshufb	%xmm1, %xmm0
+ 3196      C1
+ 3197              	.LBE957:
+ 3198              	.LBE956:
+ 3199              	.LBE955:
+ 3200              	.LBE954:
+ 3201              	.LBE953:
+ 3202              	.LBE952:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3203              		.loc 2 1569 0
+ 3204 21e6 660F7F85 		movdqa	%xmm0, -10944(%rbp)
+ 3204      40D5FFFF 
+ 3205 21ee 660F6F85 		movdqa	-10944(%rbp), %xmm0
+ 3205      40D5FFFF 
+ 3206 21f6 660FEF85 		pxor	-6240(%rbp), %xmm0
+ 3206      A0E7FFFF 
+ 3207 21fe F30F7F85 		movdqu	%xmm0, -6240(%rbp)
+ 3207      A0E7FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 3208              		.loc 2 1571 0
+ 3209 2206 F30F6F85 		movdqu	-6240(%rbp), %xmm0
+ 3209      A0E7FFFF 
+ 3210              	.LBE939:
+ 3211              	.LBE938:
+ 3212              		.loc 2 1747 0
+ 3213 220e F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+ 3213      00D9FFFF 
+ 3214 2216 F30F6F85 		movdqu	-9968(%rbp), %xmm0
+ 3214      10D9FFFF 
+ 3215 221e F30F6F8D 		movdqu	-9984(%rbp), %xmm1
+ 3215      00D9FFFF 
+ 3216 2226 660FEFC1 		pxor	%xmm1, %xmm0
+ 3217 222a F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+ 3217      00D9FFFF 
+ 3218 2232 488B8578 		movq	-10632(%rbp), %rax
+ 3218      D6FFFF
+ 3219 2239 4883C040 		addq	$64, %rax
+ 3220 223d F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 3220      00D9FFFF 
+ 3221 2245 F30F7F00 		movdqu	%xmm0, (%rax)
+ 3222 2249 F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 3222      00D9FFFF 
+ 3223 2251 F30F7F85 		movdqu	%xmm0, -5968(%rbp)
+ 3223      B0E8FFFF 
+ 3224              	.LBB958:
+ 3225              	.LBB959:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 3226              		.loc 2 1681 0
+ 3227 2259 B8100000 		movl	$16, %eax
+ 3227      00
+ 3228 225e 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 3228      00000000 
+ 3229 2266 F30F7F85 		movdqu	%xmm0, -5936(%rbp)
+ 3229      D0E8FFFF 
+ 3230 226e 8985CCE8 		movl	%eax, -5940(%rbp)
+ 3230      FFFF
+ 3231 2274 F30F6F85 		movdqu	-5936(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 124
+
+
+ 3231      D0E8FFFF 
+ 3232 227c F30F7F85 		movdqu	%xmm0, -5904(%rbp)
+ 3232      F0E8FFFF 
+ 3233 2284 8B85CCE8 		movl	-5940(%rbp), %eax
+ 3233      FFFF
+ 3234 228a 8985ECE8 		movl	%eax, -5908(%rbp)
+ 3234      FFFF
+ 3235              	.LBB960:
+ 3236              	.LBB961:
+ 3237              	.LBB962:
+ 3238              	.LBB963:
+ 3239              		.loc 3 598 0
+ 3240 2290 8B85ECE8 		movl	-5908(%rbp), %eax
+ 3240      FFFF
+ 3241 2296 F30F6F85 		movdqu	-5904(%rbp), %xmm0
+ 3241      F0E8FFFF 
+ 3242 229e 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 3242      C003
+ 3243              	.LBE963:
+ 3244              	.LBE962:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 3245              		.loc 2 519 0
+ 3246 22a4 F30F7F85 		movdqu	%xmm0, -5936(%rbp)
+ 3246      D0E8FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 3247              		.loc 2 526 0
+ 3248 22ac F30F6F85 		movdqu	-5936(%rbp), %xmm0
+ 3248      D0E8FFFF 
+ 3249              	.LBE961:
+ 3250              	.LBE960:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 3251              		.loc 2 1681 0
+ 3252 22b4 660F7F85 		movdqa	%xmm0, -10912(%rbp)
+ 3252      60D5FFFF 
+ 3253 22bc F30F6F85 		movdqu	-5968(%rbp), %xmm0
+ 3253      B0E8FFFF 
+ 3254 22c4 F30F7F85 		movdqu	%xmm0, -5888(%rbp)
+ 3254      00E9FFFF 
+ 3255 22cc F30F6F85 		movdqu	-5888(%rbp), %xmm0
+ 3255      00E9FFFF 
+ 3256 22d4 F30F7F85 		movdqu	%xmm0, -5856(%rbp)
+ 3256      20E9FFFF 
+ 3257 22dc 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 3257      000000
+ 3258 22e3 48898518 		movq	%rax, -5864(%rbp)
+ 3258      E9FFFF
+ 3259              	.LBB964:
+ 3260              	.LBB965:
+ 3261              	.LBB966:
+ 3262              	.LBB967:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 3263              		.loc 2 851 0
+ 3264 22ea 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 3264      00000000 
+ 3265 22f2 F30F7F85 		movdqu	%xmm0, -5824(%rbp)
+ 3265      40E9FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+
GAS LISTING /tmp/ccjbMjHD.s 			page 125
+
+
+ 3266              		.loc 2 854 0
+ 3267 22fa 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 3267      00000000 
+ 3268 2302 F30F6F8D 		movdqu	-5856(%rbp), %xmm1
+ 3268      20E9FFFF 
+ 3269 230a F30F7F8D 		movdqu	%xmm1, -5744(%rbp)
+ 3269      90E9FFFF 
+ 3270 2312 F30F7F85 		movdqu	%xmm0, -5760(%rbp)
+ 3270      80E9FFFF 
+ 3271              	.LBB968:
+ 3272              	.LBB969:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 3273              		.loc 2 206 0
+ 3274 231a F30F6F85 		movdqu	-5760(%rbp), %xmm0
+ 3274      80E9FFFF 
+ 3275 2322 F30F6F8D 		movdqu	-5744(%rbp), %xmm1
+ 3275      90E9FFFF 
+ 3276 232a 660FDBC1 		pand	%xmm1, %xmm0
+ 3277              	.LBE969:
+ 3278              	.LBE968:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 3279              		.loc 2 854 0
+ 3280 232e F30F7F85 		movdqu	%xmm0, -5776(%rbp)
+ 3280      70E9FFFF 
+ 3281 2336 F30F6F85 		movdqu	-5856(%rbp), %xmm0
+ 3281      20E9FFFF 
+ 3282 233e F30F7F85 		movdqu	%xmm0, -5712(%rbp)
+ 3282      B0E9FFFF 
+ 3283              	.LBB970:
+ 3284              	.LBB971:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 3285              		.loc 3 433 0
+ 3286 2346 F30F6F85 		movdqu	-5712(%rbp), %xmm0
+ 3286      B0E9FFFF 
+ 3287 234e 660F72D0 		psrld	$4, %xmm0
+ 3287      04
+ 3288              	.LBE971:
+ 3289              	.LBE970:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 3290              		.loc 2 857 0
+ 3291 2353 F30F7F85 		movdqu	%xmm0, -5792(%rbp)
+ 3291      60E9FFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 3292              		.loc 2 859 0
+ 3293 235b 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 3293      00000000 
+ 3294 2363 F30F6F8D 		movdqu	-5792(%rbp), %xmm1
+ 3294      60E9FFFF 
+ 3295 236b F30F7F8D 		movdqu	%xmm1, -5680(%rbp)
+ 3295      D0E9FFFF 
+ 3296 2373 F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 3296      C0E9FFFF 
+ 3297              	.LBB972:
+ 3298              	.LBB973:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 3299              		.loc 2 206 0
+ 3300 237b F30F6F85 		movdqu	-5696(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 126
+
+
+ 3300      C0E9FFFF 
+ 3301 2383 F30F6F8D 		movdqu	-5680(%rbp), %xmm1
+ 3301      D0E9FFFF 
+ 3302 238b 660FDBC1 		pand	%xmm1, %xmm0
+ 3303              	.LBE973:
+ 3304              	.LBE972:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 3305              		.loc 2 859 0
+ 3306 238f F30F7F85 		movdqu	%xmm0, -5792(%rbp)
+ 3306      60E9FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 3307              		.loc 2 866 0
+ 3308 2397 C7853CE9 		movl	$0, -5828(%rbp)
+ 3308      FFFF0000 
+ 3308      0000
+ 3309 23a1 E9BE0100 		jmp	.L44
+ 3309      00
+ 3310              	.L45:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 3311              		.loc 2 868 0
+ 3312 23a6 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 3312      00000000 
+ 3313 23ae F30F7F85 		movdqu	%xmm0, -5648(%rbp)
+ 3313      F0E9FFFF 
+ 3314 23b6 F30F6F85 		movdqu	-5792(%rbp), %xmm0
+ 3314      60E9FFFF 
+ 3315 23be F30F7F85 		movdqu	%xmm0, -5664(%rbp)
+ 3315      E0E9FFFF 
+ 3316 23c6 F30F6F85 		movdqu	-5648(%rbp), %xmm0
+ 3316      F0E9FFFF 
+ 3317 23ce F30F7F85 		movdqu	%xmm0, -5616(%rbp)
+ 3317      10EAFFFF 
+ 3318 23d6 F30F6F85 		movdqu	-5664(%rbp), %xmm0
+ 3318      E0E9FFFF 
+ 3319 23de F30F7F85 		movdqu	%xmm0, -5632(%rbp)
+ 3319      00EAFFFF 
+ 3320              	.LBB974:
+ 3321              	.LBB975:
+ 3322              	.LBB976:
+ 3323              	.LBB977:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3324              		.loc 3 529 0
+ 3325 23e6 F30F6F8D 		movdqu	-5632(%rbp), %xmm1
+ 3325      00EAFFFF 
+ 3326 23ee F30F6F85 		movdqu	-5616(%rbp), %xmm0
+ 3326      10EAFFFF 
+ 3327 23f6 660F3800 		pshufb	%xmm1, %xmm0
+ 3327      C1
+ 3328              	.LBE977:
+ 3329              	.LBE976:
+ 3330              	.LBE975:
+ 3331              	.LBE974:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 3332              		.loc 2 868 0
+ 3333 23fb F30F7F85 		movdqu	%xmm0, -5808(%rbp)
+ 3333      50E9FFFF 
+ 3334 2403 F30F6F85 		movdqu	-5776(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 127
+
+
+ 3334      70E9FFFF 
+ 3335 240b F30F7F85 		movdqu	%xmm0, -5584(%rbp)
+ 3335      30EAFFFF 
+ 3336 2413 F30F6F85 		movdqu	-5808(%rbp), %xmm0
+ 3336      50E9FFFF 
+ 3337 241b F30F7F85 		movdqu	%xmm0, -5600(%rbp)
+ 3337      20EAFFFF 
+ 3338              	.LBB978:
+ 3339              	.LBB979:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 3340              		.loc 2 234 0
+ 3341 2423 F30F6F85 		movdqu	-5600(%rbp), %xmm0
+ 3341      20EAFFFF 
+ 3342 242b F30F6F8D 		movdqu	-5584(%rbp), %xmm1
+ 3342      30EAFFFF 
+ 3343 2433 660FEBC1 		por	%xmm1, %xmm0
+ 3344              	.LBE979:
+ 3345              	.LBE978:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 3346              		.loc 2 870 0
+ 3347 2437 F30F7F85 		movdqu	%xmm0, -5808(%rbp)
+ 3347      50E9FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 3348              		.loc 2 872 0
+ 3349 243f 8B853CE9 		mov	-5828(%rbp), %eax
+ 3349      FFFF
+ 3350 2445 48C1E004 		salq	$4, %rax
+ 3351 2449 48038518 		addq	-5864(%rbp), %rax
+ 3351      E9FFFF
+ 3352 2450 660F6F00 		movdqa	(%rax), %xmm0
+ 3353 2454 F30F7F85 		movdqu	%xmm0, -5552(%rbp)
+ 3353      50EAFFFF 
+ 3354 245c F30F6F85 		movdqu	-5808(%rbp), %xmm0
+ 3354      50E9FFFF 
+ 3355 2464 F30F7F85 		movdqu	%xmm0, -5568(%rbp)
+ 3355      40EAFFFF 
+ 3356 246c F30F6F85 		movdqu	-5552(%rbp), %xmm0
+ 3356      50EAFFFF 
+ 3357 2474 F30F7F85 		movdqu	%xmm0, -5520(%rbp)
+ 3357      70EAFFFF 
+ 3358 247c F30F6F85 		movdqu	-5568(%rbp), %xmm0
+ 3358      40EAFFFF 
+ 3359 2484 F30F7F85 		movdqu	%xmm0, -5536(%rbp)
+ 3359      60EAFFFF 
+ 3360              	.LBB980:
+ 3361              	.LBB981:
+ 3362              	.LBB982:
+ 3363              	.LBB983:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3364              		.loc 3 529 0
+ 3365 248c F30F6F8D 		movdqu	-5536(%rbp), %xmm1
+ 3365      60EAFFFF 
+ 3366 2494 F30F6F85 		movdqu	-5520(%rbp), %xmm0
+ 3366      70EAFFFF 
+ 3367 249c 660F3800 		pshufb	%xmm1, %xmm0
+ 3367      C1
+ 3368              	.LBE983:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 128
+
+
+ 3369              	.LBE982:
+ 3370              	.LBE981:
+ 3371              	.LBE980:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 3372              		.loc 2 872 0
+ 3373 24a1 F30F7F85 		movdqu	%xmm0, -5808(%rbp)
+ 3373      50E9FFFF 
+ 3374 24a9 F30F6F85 		movdqu	-5824(%rbp), %xmm0
+ 3374      40E9FFFF 
+ 3375 24b1 F30F7F85 		movdqu	%xmm0, -5488(%rbp)
+ 3375      90EAFFFF 
+ 3376 24b9 F30F6F85 		movdqu	-5808(%rbp), %xmm0
+ 3376      50E9FFFF 
+ 3377 24c1 F30F7F85 		movdqu	%xmm0, -5504(%rbp)
+ 3377      80EAFFFF 
+ 3378              	.LBB984:
+ 3379              	.LBB985:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 3380              		.loc 2 234 0
+ 3381 24c9 F30F6F85 		movdqu	-5504(%rbp), %xmm0
+ 3381      80EAFFFF 
+ 3382 24d1 F30F6F8D 		movdqu	-5488(%rbp), %xmm1
+ 3382      90EAFFFF 
+ 3383 24d9 660FEBC1 		por	%xmm1, %xmm0
+ 3384              	.LBE985:
+ 3385              	.LBE984:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 3386              		.loc 2 874 0
+ 3387 24dd F30F7F85 		movdqu	%xmm0, -5824(%rbp)
+ 3387      40E9FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 3388              		.loc 2 876 0
+ 3389 24e5 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 3389      00000000 
+ 3390 24ed F30F6F8D 		movdqu	-5792(%rbp), %xmm1
+ 3390      60E9FFFF 
+ 3391 24f5 F30F7F8D 		movdqu	%xmm1, -5456(%rbp)
+ 3391      B0EAFFFF 
+ 3392 24fd F30F7F85 		movdqu	%xmm0, -5472(%rbp)
+ 3392      A0EAFFFF 
+ 3393              	.LBB986:
+ 3394              	.LBB987:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 3395              		.loc 2 290 0
+ 3396 2505 F30F6F8D 		movdqu	-5472(%rbp), %xmm1
+ 3396      A0EAFFFF 
+ 3397 250d F30F6F85 		movdqu	-5456(%rbp), %xmm0
+ 3397      B0EAFFFF 
+ 3398 2515 660FF8C1 		psubb	%xmm1, %xmm0
+ 3399              	.LBE987:
+ 3400              	.LBE986:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 3401              		.loc 2 876 0
+ 3402 2519 F30F7F85 		movdqu	%xmm0, -5792(%rbp)
+ 3402      60E9FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 3403              		.loc 2 878 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 129
+
+
+ 3404 2521 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 3404      00000000 
+ 3405 2529 F30F6F8D 		movdqu	-5792(%rbp), %xmm1
+ 3405      60E9FFFF 
+ 3406 2531 F30F7F8D 		movdqu	%xmm1, -5424(%rbp)
+ 3406      D0EAFFFF 
+ 3407 2539 F30F7F85 		movdqu	%xmm0, -5440(%rbp)
+ 3407      C0EAFFFF 
+ 3408              	.LBB988:
+ 3409              	.LBB989:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 3410              		.loc 2 206 0
+ 3411 2541 F30F6F85 		movdqu	-5440(%rbp), %xmm0
+ 3411      C0EAFFFF 
+ 3412 2549 F30F6F8D 		movdqu	-5424(%rbp), %xmm1
+ 3412      D0EAFFFF 
+ 3413 2551 660FDBC1 		pand	%xmm1, %xmm0
+ 3414              	.LBE989:
+ 3415              	.LBE988:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 3416              		.loc 2 878 0
+ 3417 2555 F30F7F85 		movdqu	%xmm0, -5792(%rbp)
+ 3417      60E9FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 3418              		.loc 2 866 0
+ 3419 255d 83853CE9 		addl	$1, -5828(%rbp)
+ 3419      FFFF01
+ 3420              	.L44:
+ 3421 2564 83BD3CE9 		cmpl	$15, -5828(%rbp)
+ 3421      FFFF0F
+ 3422 256b 0F8635FE 		jbe	.L45
+ 3422      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 3423              		.loc 2 882 0
+ 3424 2571 F30F6F85 		movdqu	-5824(%rbp), %xmm0
+ 3424      40E9FFFF 
+ 3425              	.LBE967:
+ 3426              	.LBE966:
+ 3427              	.LBE965:
+ 3428              	.LBE964:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 3429              		.loc 2 1682 0
+ 3430 2579 660F7F85 		movdqa	%xmm0, -10928(%rbp)
+ 3430      50D5FFFF 
+ 3431              	.LBB990:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 3432              		.loc 2 1683 0
+ 3433 2581 660F6F85 		movdqa	-10928(%rbp), %xmm0
+ 3433      50D5FFFF 
+ 3434 2589 F30F7F85 		movdqu	%xmm0, -10320(%rbp)
+ 3434      B0D7FFFF 
+ 3435 2591 E8000000 		call	KDbgWriterGet at PLT
+ 3435      00
+ 3436 2596 4885C0   		testq	%rax, %rax
+ 3437 2599 7479     		je	.L47
+ 3438 259b BF010000 		movl	$1, %edi
+ 3438      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 130
+
+
+ 3439 25a0 E8000000 		call	KDbgCondToFlag at PLT
+ 3439      00
+ 3440 25a5 4889C6   		movq	%rax, %rsi
+ 3441 25a8 BF100000 		movl	$16, %edi
+ 3441      00
+ 3442 25ad E8000000 		call	KDbgTestModConds at PLT
+ 3442      00
+ 3443 25b2 84C0     		testb	%al, %al
+ 3444 25b4 745E     		je	.L47
+ 3445 25b6 8B85BCD7 		movl	-10308(%rbp), %eax
+ 3445      FFFF
+ 3446 25bc 89C7     		movl	%eax, %edi
+ 3447 25be E83DDAFF 		call	bswap_32
+ 3447      FF
+ 3448 25c3 4189C5   		movl	%eax, %r13d
+ 3449 25c6 8B85B8D7 		movl	-10312(%rbp), %eax
+ 3449      FFFF
+ 3450 25cc 89C7     		movl	%eax, %edi
+ 3451 25ce E82DDAFF 		call	bswap_32
+ 3451      FF
+ 3452 25d3 4189C4   		movl	%eax, %r12d
+ 3453 25d6 8B85B4D7 		movl	-10316(%rbp), %eax
+ 3453      FFFF
+ 3454 25dc 89C7     		movl	%eax, %edi
+ 3455 25de E81DDAFF 		call	bswap_32
+ 3455      FF
+ 3456 25e3 89C3     		movl	%eax, %ebx
+ 3457 25e5 8B85B0D7 		movl	-10320(%rbp), %eax
+ 3457      FFFF
+ 3458 25eb 89C7     		movl	%eax, %edi
+ 3459 25ed E80EDAFF 		call	bswap_32
+ 3459      FF
+ 3460 25f2 4589E9   		movl	%r13d, %r9d
+ 3461 25f5 4589E0   		movl	%r12d, %r8d
+ 3462 25f8 89D9     		movl	%ebx, %ecx
+ 3463 25fa 89C2     		movl	%eax, %edx
+ 3464 25fc 488D3500 		leaq	.LC0(%rip), %rsi
+ 3464      000000
+ 3465 2603 488D3D00 		leaq	.LC1(%rip), %rdi
+ 3465      000000
+ 3466 260a B8000000 		movl	$0, %eax
+ 3466      00
+ 3467 260f E8000000 		call	KDbgMsg at PLT
+ 3467      00
+ 3468              	.L47:
+ 3469 2614 660F6F85 		movdqa	-10928(%rbp), %xmm0
+ 3469      50D5FFFF 
+ 3470 261c F30F7F85 		movdqu	%xmm0, -5408(%rbp)
+ 3470      E0EAFFFF 
+ 3471              	.LBE990:
+ 3472              	.LBB991:
+ 3473              	.LBB992:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 3474              		.loc 2 667 0
+ 3475 2624 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 3475      00000000 
+ 3476 262c F30F6F8D 		movdqu	-5408(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 131
+
+
+ 3476      E0EAFFFF 
+ 3477 2634 F30F7F8D 		movdqu	%xmm1, -5376(%rbp)
+ 3477      00EBFFFF 
+ 3478 263c F30F7F85 		movdqu	%xmm0, -5392(%rbp)
+ 3478      F0EAFFFF 
+ 3479 2644 F30F6F85 		movdqu	-5376(%rbp), %xmm0
+ 3479      00EBFFFF 
+ 3480 264c F30F7F85 		movdqu	%xmm0, -5344(%rbp)
+ 3480      20EBFFFF 
+ 3481 2654 F30F6F85 		movdqu	-5392(%rbp), %xmm0
+ 3481      F0EAFFFF 
+ 3482 265c F30F7F85 		movdqu	%xmm0, -5360(%rbp)
+ 3482      10EBFFFF 
+ 3483              	.LBB993:
+ 3484              	.LBB994:
+ 3485              	.LBB995:
+ 3486              	.LBB996:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3487              		.loc 3 529 0
+ 3488 2664 F30F6F8D 		movdqu	-5360(%rbp), %xmm1
+ 3488      10EBFFFF 
+ 3489 266c F30F6F85 		movdqu	-5344(%rbp), %xmm0
+ 3489      20EBFFFF 
+ 3490 2674 660F3800 		pshufb	%xmm1, %xmm0
+ 3490      C1
+ 3491              	.LBE996:
+ 3492              	.LBE995:
+ 3493              	.LBE994:
+ 3494              	.LBE993:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 3495              		.loc 2 667 0
+ 3496 2679 F30F7F85 		movdqu	%xmm0, -5408(%rbp)
+ 3496      E0EAFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 3497              		.loc 2 668 0
+ 3498 2681 F30F6F85 		movdqu	-5408(%rbp), %xmm0
+ 3498      E0EAFFFF 
+ 3499              	.LBE992:
+ 3500              	.LBE991:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 3501              		.loc 2 1684 0
+ 3502 2689 660F7F85 		movdqa	%xmm0, -10928(%rbp)
+ 3502      50D5FFFF 
+ 3503              	.LBB997:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 3504              		.loc 2 1685 0
+ 3505 2691 660F6F85 		movdqa	-10928(%rbp), %xmm0
+ 3505      50D5FFFF 
+ 3506 2699 F30F7F85 		movdqu	%xmm0, -10336(%rbp)
+ 3506      A0D7FFFF 
+ 3507 26a1 E8000000 		call	KDbgWriterGet at PLT
+ 3507      00
+ 3508 26a6 4885C0   		testq	%rax, %rax
+ 3509 26a9 7479     		je	.L49
+ 3510 26ab BF010000 		movl	$1, %edi
+ 3510      00
+ 3511 26b0 E8000000 		call	KDbgCondToFlag at PLT
+
GAS LISTING /tmp/ccjbMjHD.s 			page 132
+
+
+ 3511      00
+ 3512 26b5 4889C6   		movq	%rax, %rsi
+ 3513 26b8 BF100000 		movl	$16, %edi
+ 3513      00
+ 3514 26bd E8000000 		call	KDbgTestModConds at PLT
+ 3514      00
+ 3515 26c2 84C0     		testb	%al, %al
+ 3516 26c4 745E     		je	.L49
+ 3517 26c6 8B85ACD7 		movl	-10324(%rbp), %eax
+ 3517      FFFF
+ 3518 26cc 89C7     		movl	%eax, %edi
+ 3519 26ce E82DD9FF 		call	bswap_32
+ 3519      FF
+ 3520 26d3 4189C5   		movl	%eax, %r13d
+ 3521 26d6 8B85A8D7 		movl	-10328(%rbp), %eax
+ 3521      FFFF
+ 3522 26dc 89C7     		movl	%eax, %edi
+ 3523 26de E81DD9FF 		call	bswap_32
+ 3523      FF
+ 3524 26e3 4189C4   		movl	%eax, %r12d
+ 3525 26e6 8B85A4D7 		movl	-10332(%rbp), %eax
+ 3525      FFFF
+ 3526 26ec 89C7     		movl	%eax, %edi
+ 3527 26ee E80DD9FF 		call	bswap_32
+ 3527      FF
+ 3528 26f3 89C3     		movl	%eax, %ebx
+ 3529 26f5 8B85A0D7 		movl	-10336(%rbp), %eax
+ 3529      FFFF
+ 3530 26fb 89C7     		movl	%eax, %edi
+ 3531 26fd E8FED8FF 		call	bswap_32
+ 3531      FF
+ 3532 2702 4589E9   		movl	%r13d, %r9d
+ 3533 2705 4589E0   		movl	%r12d, %r8d
+ 3534 2708 89D9     		movl	%ebx, %ecx
+ 3535 270a 89C2     		movl	%eax, %edx
+ 3536 270c 488D3500 		leaq	.LC2(%rip), %rsi
+ 3536      000000
+ 3537 2713 488D3D00 		leaq	.LC1(%rip), %rdi
+ 3537      000000
+ 3538 271a B8000000 		movl	$0, %eax
+ 3538      00
+ 3539 271f E8000000 		call	KDbgMsg at PLT
+ 3539      00
+ 3540              	.L49:
+ 3541 2724 660F6F85 		movdqa	-10928(%rbp), %xmm0
+ 3541      50D5FFFF 
+ 3542 272c F30F7F85 		movdqu	%xmm0, -5312(%rbp)
+ 3542      40EBFFFF 
+ 3543 2734 660F6F85 		movdqa	-10912(%rbp), %xmm0
+ 3543      60D5FFFF 
+ 3544 273c F30F7F85 		movdqu	%xmm0, -5328(%rbp)
+ 3544      30EBFFFF 
+ 3545              	.LBE997:
+ 3546              	.LBB998:
+ 3547              	.LBB999:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 3548              		.loc 2 178 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 133
+
+
+ 3549 2744 F30F6F85 		movdqu	-5328(%rbp), %xmm0
+ 3549      30EBFFFF 
+ 3550 274c F30F6F8D 		movdqu	-5312(%rbp), %xmm1
+ 3550      40EBFFFF 
+ 3551 2754 660FEFC1 		pxor	%xmm1, %xmm0
+ 3552              	.LBE999:
+ 3553              	.LBE998:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 3554              		.loc 2 1686 0
+ 3555 2758 660F7F85 		movdqa	%xmm0, -10928(%rbp)
+ 3555      50D5FFFF 
+ 3556              	.LBB1000:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 3557              		.loc 2 1687 0
+ 3558 2760 660F6F85 		movdqa	-10928(%rbp), %xmm0
+ 3558      50D5FFFF 
+ 3559 2768 F30F7F85 		movdqu	%xmm0, -10352(%rbp)
+ 3559      90D7FFFF 
+ 3560 2770 E8000000 		call	KDbgWriterGet at PLT
+ 3560      00
+ 3561 2775 4885C0   		testq	%rax, %rax
+ 3562 2778 7479     		je	.L51
+ 3563 277a BF010000 		movl	$1, %edi
+ 3563      00
+ 3564 277f E8000000 		call	KDbgCondToFlag at PLT
+ 3564      00
+ 3565 2784 4889C6   		movq	%rax, %rsi
+ 3566 2787 BF100000 		movl	$16, %edi
+ 3566      00
+ 3567 278c E8000000 		call	KDbgTestModConds at PLT
+ 3567      00
+ 3568 2791 84C0     		testb	%al, %al
+ 3569 2793 745E     		je	.L51
+ 3570 2795 8B859CD7 		movl	-10340(%rbp), %eax
+ 3570      FFFF
+ 3571 279b 89C7     		movl	%eax, %edi
+ 3572 279d E85ED8FF 		call	bswap_32
+ 3572      FF
+ 3573 27a2 4189C5   		movl	%eax, %r13d
+ 3574 27a5 8B8598D7 		movl	-10344(%rbp), %eax
+ 3574      FFFF
+ 3575 27ab 89C7     		movl	%eax, %edi
+ 3576 27ad E84ED8FF 		call	bswap_32
+ 3576      FF
+ 3577 27b2 4189C4   		movl	%eax, %r12d
+ 3578 27b5 8B8594D7 		movl	-10348(%rbp), %eax
+ 3578      FFFF
+ 3579 27bb 89C7     		movl	%eax, %edi
+ 3580 27bd E83ED8FF 		call	bswap_32
+ 3580      FF
+ 3581 27c2 89C3     		movl	%eax, %ebx
+ 3582 27c4 8B8590D7 		movl	-10352(%rbp), %eax
+ 3582      FFFF
+ 3583 27ca 89C7     		movl	%eax, %edi
+ 3584 27cc E82FD8FF 		call	bswap_32
+ 3584      FF
+ 3585 27d1 4589E9   		movl	%r13d, %r9d
+
GAS LISTING /tmp/ccjbMjHD.s 			page 134
+
+
+ 3586 27d4 4589E0   		movl	%r12d, %r8d
+ 3587 27d7 89D9     		movl	%ebx, %ecx
+ 3588 27d9 89C2     		movl	%eax, %edx
+ 3589 27db 488D3500 		leaq	.LC3(%rip), %rsi
+ 3589      000000
+ 3590 27e2 488D3D00 		leaq	.LC1(%rip), %rdi
+ 3590      000000
+ 3591 27e9 B8000000 		movl	$0, %eax
+ 3591      00
+ 3592 27ee E8000000 		call	KDbgMsg at PLT
+ 3592      00
+ 3593              	.L51:
+ 3594 27f3 660F6F85 		movdqa	-10928(%rbp), %xmm0
+ 3594      50D5FFFF 
+ 3595 27fb F30F7F85 		movdqu	%xmm0, -5296(%rbp)
+ 3595      50EBFFFF 
+ 3596 2803 F30F6F85 		movdqu	-5296(%rbp), %xmm0
+ 3596      50EBFFFF 
+ 3597 280b F30F7F85 		movdqu	%xmm0, -5264(%rbp)
+ 3597      70EBFFFF 
+ 3598              	.LBE1000:
+ 3599              	.LBB1001:
+ 3600              	.LBB1002:
+ 3601              	.LBB1003:
+ 3602              	.LBB1004:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 3603              		.loc 3 450 0
+ 3604 2813 F30F6F85 		movdqu	-5264(%rbp), %xmm0
+ 3604      70EBFFFF 
+ 3605 281b 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 3605      FF
+ 3606              	.LBE1004:
+ 3607              	.LBE1003:
+ 3608              	.LBE1002:
+ 3609              	.LBE1001:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 3610              		.loc 2 1688 0
+ 3611 2820 660F7F85 		movdqa	%xmm0, -10928(%rbp)
+ 3611      50D5FFFF 
+ 3612              	.LBB1005:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 3613              		.loc 2 1689 0
+ 3614 2828 660F6F85 		movdqa	-10928(%rbp), %xmm0
+ 3614      50D5FFFF 
+ 3615 2830 F30F7F85 		movdqu	%xmm0, -10368(%rbp)
+ 3615      80D7FFFF 
+ 3616 2838 E8000000 		call	KDbgWriterGet at PLT
+ 3616      00
+ 3617 283d 4885C0   		testq	%rax, %rax
+ 3618 2840 7479     		je	.L53
+ 3619 2842 BF010000 		movl	$1, %edi
+ 3619      00
+ 3620 2847 E8000000 		call	KDbgCondToFlag at PLT
+ 3620      00
+ 3621 284c 4889C6   		movq	%rax, %rsi
+ 3622 284f BF100000 		movl	$16, %edi
+ 3622      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 135
+
+
+ 3623 2854 E8000000 		call	KDbgTestModConds at PLT
+ 3623      00
+ 3624 2859 84C0     		testb	%al, %al
+ 3625 285b 745E     		je	.L53
+ 3626 285d 8B858CD7 		movl	-10356(%rbp), %eax
+ 3626      FFFF
+ 3627 2863 89C7     		movl	%eax, %edi
+ 3628 2865 E896D7FF 		call	bswap_32
+ 3628      FF
+ 3629 286a 4189C5   		movl	%eax, %r13d
+ 3630 286d 8B8588D7 		movl	-10360(%rbp), %eax
+ 3630      FFFF
+ 3631 2873 89C7     		movl	%eax, %edi
+ 3632 2875 E886D7FF 		call	bswap_32
+ 3632      FF
+ 3633 287a 4189C4   		movl	%eax, %r12d
+ 3634 287d 8B8584D7 		movl	-10364(%rbp), %eax
+ 3634      FFFF
+ 3635 2883 89C7     		movl	%eax, %edi
+ 3636 2885 E876D7FF 		call	bswap_32
+ 3636      FF
+ 3637 288a 89C3     		movl	%eax, %ebx
+ 3638 288c 8B8580D7 		movl	-10368(%rbp), %eax
+ 3638      FFFF
+ 3639 2892 89C7     		movl	%eax, %edi
+ 3640 2894 E867D7FF 		call	bswap_32
+ 3640      FF
+ 3641 2899 4589E9   		movl	%r13d, %r9d
+ 3642 289c 4589E0   		movl	%r12d, %r8d
+ 3643 289f 89D9     		movl	%ebx, %ecx
+ 3644 28a1 89C2     		movl	%eax, %edx
+ 3645 28a3 488D3500 		leaq	.LC4(%rip), %rsi
+ 3645      000000
+ 3646 28aa 488D3D00 		leaq	.LC1(%rip), %rdi
+ 3646      000000
+ 3647 28b1 B8000000 		movl	$0, %eax
+ 3647      00
+ 3648 28b6 E8000000 		call	KDbgMsg at PLT
+ 3648      00
+ 3649              	.L53:
+ 3650              	.LBE1005:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 3651              		.loc 2 1690 0
+ 3652 28bb 660F6F85 		movdqa	-10928(%rbp), %xmm0
+ 3652      50D5FFFF 
+ 3653              	.LBE959:
+ 3654              	.LBE958:
+1748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x10,5);
+ 3655              		.loc 2 1748 0
+ 3656 28c3 F30F7F85 		movdqu	%xmm0, -9968(%rbp)
+ 3656      10D9FFFF 
+ 3657 28cb F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 3657      00D9FFFF 
+ 3658 28d3 F30F7F85 		movdqu	%xmm0, -5248(%rbp)
+ 3658      80EBFFFF 
+ 3659              	.LBB1006:
+ 3660              	.LBB1007:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 136
+
+
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 3661              		.loc 2 1565 0
+ 3662 28db F30F6F85 		movdqu	-5248(%rbp), %xmm0
+ 3662      80EBFFFF 
+ 3663 28e3 660F7F85 		movdqa	%xmm0, -10896(%rbp)
+ 3663      70D5FFFF 
+ 3664 28eb 660F6F85 		movdqa	-10896(%rbp), %xmm0
+ 3664      70D5FFFF 
+ 3665 28f3 F30F7F85 		movdqu	%xmm0, -5232(%rbp)
+ 3665      90EBFFFF 
+ 3666              	.LBB1008:
+ 3667              	.LBB1009:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3668              		.loc 2 1278 0
+ 3669 28fb 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 3669      00000000 
+ 3670 2903 F30F6F8D 		movdqu	-5232(%rbp), %xmm1
+ 3670      90EBFFFF 
+ 3671 290b F30F7F8D 		movdqu	%xmm1, -5200(%rbp)
+ 3671      B0EBFFFF 
+ 3672 2913 F30F7F85 		movdqu	%xmm0, -5216(%rbp)
+ 3672      A0EBFFFF 
+ 3673 291b F30F6F85 		movdqu	-5200(%rbp), %xmm0
+ 3673      B0EBFFFF 
+ 3674 2923 F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 3674      D0EBFFFF 
+ 3675 292b F30F6F85 		movdqu	-5216(%rbp), %xmm0
+ 3675      A0EBFFFF 
+ 3676 2933 F30F7F85 		movdqu	%xmm0, -5184(%rbp)
+ 3676      C0EBFFFF 
+ 3677              	.LBB1010:
+ 3678              	.LBB1011:
+ 3679              	.LBB1012:
+ 3680              	.LBB1013:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3681              		.loc 3 529 0
+ 3682 293b F30F6F8D 		movdqu	-5184(%rbp), %xmm1
+ 3682      C0EBFFFF 
+ 3683 2943 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 3683      D0EBFFFF 
+ 3684 294b 660F3800 		pshufb	%xmm1, %xmm0
+ 3684      C1
+ 3685              	.LBE1013:
+ 3686              	.LBE1012:
+ 3687              	.LBE1011:
+ 3688              	.LBE1010:
+ 3689              	.LBE1009:
+ 3690              	.LBE1008:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3691              		.loc 2 1567 0
+ 3692 2950 660F7F85 		movdqa	%xmm0, -10896(%rbp)
+ 3692      70D5FFFF 
+ 3693 2958 660F6F85 		movdqa	-10896(%rbp), %xmm0
+ 3693      70D5FFFF 
+ 3694 2960 660FEF85 		pxor	-5248(%rbp), %xmm0
+ 3694      80EBFFFF 
+ 3695 2968 F30F7F85 		movdqu	%xmm0, -5248(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 137
+
+
+ 3695      80EBFFFF 
+ 3696 2970 660F6F85 		movdqa	-10896(%rbp), %xmm0
+ 3696      70D5FFFF 
+ 3697 2978 F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 3697      E0EBFFFF 
+ 3698              	.LBB1014:
+ 3699              	.LBB1015:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3700              		.loc 2 1278 0
+ 3701 2980 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 3701      00000000 
+ 3702 2988 F30F6F8D 		movdqu	-5152(%rbp), %xmm1
+ 3702      E0EBFFFF 
+ 3703 2990 F30F7F8D 		movdqu	%xmm1, -5120(%rbp)
+ 3703      00ECFFFF 
+ 3704 2998 F30F7F85 		movdqu	%xmm0, -5136(%rbp)
+ 3704      F0EBFFFF 
+ 3705 29a0 F30F6F85 		movdqu	-5120(%rbp), %xmm0
+ 3705      00ECFFFF 
+ 3706 29a8 F30F7F85 		movdqu	%xmm0, -5088(%rbp)
+ 3706      20ECFFFF 
+ 3707 29b0 F30F6F85 		movdqu	-5136(%rbp), %xmm0
+ 3707      F0EBFFFF 
+ 3708 29b8 F30F7F85 		movdqu	%xmm0, -5104(%rbp)
+ 3708      10ECFFFF 
+ 3709              	.LBB1016:
+ 3710              	.LBB1017:
+ 3711              	.LBB1018:
+ 3712              	.LBB1019:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3713              		.loc 3 529 0
+ 3714 29c0 F30F6F8D 		movdqu	-5104(%rbp), %xmm1
+ 3714      10ECFFFF 
+ 3715 29c8 F30F6F85 		movdqu	-5088(%rbp), %xmm0
+ 3715      20ECFFFF 
+ 3716 29d0 660F3800 		pshufb	%xmm1, %xmm0
+ 3716      C1
+ 3717              	.LBE1019:
+ 3718              	.LBE1018:
+ 3719              	.LBE1017:
+ 3720              	.LBE1016:
+ 3721              	.LBE1015:
+ 3722              	.LBE1014:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3723              		.loc 2 1568 0
+ 3724 29d5 660F7F85 		movdqa	%xmm0, -10896(%rbp)
+ 3724      70D5FFFF 
+ 3725 29dd 660F6F85 		movdqa	-10896(%rbp), %xmm0
+ 3725      70D5FFFF 
+ 3726 29e5 660FEF85 		pxor	-5248(%rbp), %xmm0
+ 3726      80EBFFFF 
+ 3727 29ed F30F7F85 		movdqu	%xmm0, -5248(%rbp)
+ 3727      80EBFFFF 
+ 3728 29f5 660F6F85 		movdqa	-10896(%rbp), %xmm0
+ 3728      70D5FFFF 
+ 3729 29fd F30F7F85 		movdqu	%xmm0, -5072(%rbp)
+ 3729      30ECFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 138
+
+
+ 3730              	.LBB1020:
+ 3731              	.LBB1021:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 3732              		.loc 2 1278 0
+ 3733 2a05 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 3733      00000000 
+ 3734 2a0d F30F6F8D 		movdqu	-5072(%rbp), %xmm1
+ 3734      30ECFFFF 
+ 3735 2a15 F30F7F8D 		movdqu	%xmm1, -5040(%rbp)
+ 3735      50ECFFFF 
+ 3736 2a1d F30F7F85 		movdqu	%xmm0, -5056(%rbp)
+ 3736      40ECFFFF 
+ 3737 2a25 F30F6F85 		movdqu	-5040(%rbp), %xmm0
+ 3737      50ECFFFF 
+ 3738 2a2d F30F7F85 		movdqu	%xmm0, -5008(%rbp)
+ 3738      70ECFFFF 
+ 3739 2a35 F30F6F85 		movdqu	-5056(%rbp), %xmm0
+ 3739      40ECFFFF 
+ 3740 2a3d F30F7F85 		movdqu	%xmm0, -5024(%rbp)
+ 3740      60ECFFFF 
+ 3741              	.LBB1022:
+ 3742              	.LBB1023:
+ 3743              	.LBB1024:
+ 3744              	.LBB1025:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3745              		.loc 3 529 0
+ 3746 2a45 F30F6F8D 		movdqu	-5024(%rbp), %xmm1
+ 3746      60ECFFFF 
+ 3747 2a4d F30F6F85 		movdqu	-5008(%rbp), %xmm0
+ 3747      70ECFFFF 
+ 3748 2a55 660F3800 		pshufb	%xmm1, %xmm0
+ 3748      C1
+ 3749              	.LBE1025:
+ 3750              	.LBE1024:
+ 3751              	.LBE1023:
+ 3752              	.LBE1022:
+ 3753              	.LBE1021:
+ 3754              	.LBE1020:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 3755              		.loc 2 1569 0
+ 3756 2a5a 660F7F85 		movdqa	%xmm0, -10896(%rbp)
+ 3756      70D5FFFF 
+ 3757 2a62 660F6F85 		movdqa	-10896(%rbp), %xmm0
+ 3757      70D5FFFF 
+ 3758 2a6a 660FEF85 		pxor	-5248(%rbp), %xmm0
+ 3758      80EBFFFF 
+ 3759 2a72 F30F7F85 		movdqu	%xmm0, -5248(%rbp)
+ 3759      80EBFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 3760              		.loc 2 1571 0
+ 3761 2a7a F30F6F85 		movdqu	-5248(%rbp), %xmm0
+ 3761      80EBFFFF 
+ 3762              	.LBE1007:
+ 3763              	.LBE1006:
+ 3764              		.loc 2 1748 0
+ 3765 2a82 F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+ 3765      00D9FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 139
+
+
+ 3766 2a8a F30F6F85 		movdqu	-9968(%rbp), %xmm0
+ 3766      10D9FFFF 
+ 3767 2a92 F30F6F8D 		movdqu	-9984(%rbp), %xmm1
+ 3767      00D9FFFF 
+ 3768 2a9a 660FEFC1 		pxor	%xmm1, %xmm0
+ 3769 2a9e F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+ 3769      00D9FFFF 
+ 3770 2aa6 488B8578 		movq	-10632(%rbp), %rax
+ 3770      D6FFFF
+ 3771 2aad 4883C050 		addq	$80, %rax
+ 3772 2ab1 F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 3772      00D9FFFF 
+ 3773 2ab9 F30F7F00 		movdqu	%xmm0, (%rax)
+ 3774 2abd F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 3774      00D9FFFF 
+ 3775 2ac5 F30F7F85 		movdqu	%xmm0, -4976(%rbp)
+ 3775      90ECFFFF 
+ 3776              	.LBB1026:
+ 3777              	.LBB1027:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 3778              		.loc 2 1681 0
+ 3779 2acd B8200000 		movl	$32, %eax
+ 3779      00
+ 3780 2ad2 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 3780      00000000 
+ 3781 2ada F30F7F85 		movdqu	%xmm0, -4944(%rbp)
+ 3781      B0ECFFFF 
+ 3782 2ae2 8985ACEC 		movl	%eax, -4948(%rbp)
+ 3782      FFFF
+ 3783 2ae8 F30F6F85 		movdqu	-4944(%rbp), %xmm0
+ 3783      B0ECFFFF 
+ 3784 2af0 F30F7F85 		movdqu	%xmm0, -4912(%rbp)
+ 3784      D0ECFFFF 
+ 3785 2af8 8B85ACEC 		movl	-4948(%rbp), %eax
+ 3785      FFFF
+ 3786 2afe 8985CCEC 		movl	%eax, -4916(%rbp)
+ 3786      FFFF
+ 3787              	.LBB1028:
+ 3788              	.LBB1029:
+ 3789              	.LBB1030:
+ 3790              	.LBB1031:
+ 3791              		.loc 3 598 0
+ 3792 2b04 8B85CCEC 		movl	-4916(%rbp), %eax
+ 3792      FFFF
+ 3793 2b0a F30F6F85 		movdqu	-4912(%rbp), %xmm0
+ 3793      D0ECFFFF 
+ 3794 2b12 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 3794      C003
+ 3795              	.LBE1031:
+ 3796              	.LBE1030:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 3797              		.loc 2 519 0
+ 3798 2b18 F30F7F85 		movdqu	%xmm0, -4944(%rbp)
+ 3798      B0ECFFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 3799              		.loc 2 526 0
+ 3800 2b20 F30F6F85 		movdqu	-4944(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 140
+
+
+ 3800      B0ECFFFF 
+ 3801              	.LBE1029:
+ 3802              	.LBE1028:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 3803              		.loc 2 1681 0
+ 3804 2b28 660F7F85 		movdqa	%xmm0, -10864(%rbp)
+ 3804      90D5FFFF 
+ 3805 2b30 F30F6F85 		movdqu	-4976(%rbp), %xmm0
+ 3805      90ECFFFF 
+ 3806 2b38 F30F7F85 		movdqu	%xmm0, -4896(%rbp)
+ 3806      E0ECFFFF 
+ 3807 2b40 F30F6F85 		movdqu	-4896(%rbp), %xmm0
+ 3807      E0ECFFFF 
+ 3808 2b48 F30F7F85 		movdqu	%xmm0, -4864(%rbp)
+ 3808      00EDFFFF 
+ 3809 2b50 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 3809      000000
+ 3810 2b57 488985F8 		movq	%rax, -4872(%rbp)
+ 3810      ECFFFF
+ 3811              	.LBB1032:
+ 3812              	.LBB1033:
+ 3813              	.LBB1034:
+ 3814              	.LBB1035:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 3815              		.loc 2 851 0
+ 3816 2b5e 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 3816      00000000 
+ 3817 2b66 F30F7F85 		movdqu	%xmm0, -4832(%rbp)
+ 3817      20EDFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 3818              		.loc 2 854 0
+ 3819 2b6e 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 3819      00000000 
+ 3820 2b76 F30F6F8D 		movdqu	-4864(%rbp), %xmm1
+ 3820      00EDFFFF 
+ 3821 2b7e F30F7F8D 		movdqu	%xmm1, -4752(%rbp)
+ 3821      70EDFFFF 
+ 3822 2b86 F30F7F85 		movdqu	%xmm0, -4768(%rbp)
+ 3822      60EDFFFF 
+ 3823              	.LBB1036:
+ 3824              	.LBB1037:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 3825              		.loc 2 206 0
+ 3826 2b8e F30F6F85 		movdqu	-4768(%rbp), %xmm0
+ 3826      60EDFFFF 
+ 3827 2b96 F30F6F8D 		movdqu	-4752(%rbp), %xmm1
+ 3827      70EDFFFF 
+ 3828 2b9e 660FDBC1 		pand	%xmm1, %xmm0
+ 3829              	.LBE1037:
+ 3830              	.LBE1036:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 3831              		.loc 2 854 0
+ 3832 2ba2 F30F7F85 		movdqu	%xmm0, -4784(%rbp)
+ 3832      50EDFFFF 
+ 3833 2baa F30F6F85 		movdqu	-4864(%rbp), %xmm0
+ 3833      00EDFFFF 
+ 3834 2bb2 F30F7F85 		movdqu	%xmm0, -4720(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 141
+
+
+ 3834      90EDFFFF 
+ 3835              	.LBB1038:
+ 3836              	.LBB1039:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 3837              		.loc 3 433 0
+ 3838 2bba F30F6F85 		movdqu	-4720(%rbp), %xmm0
+ 3838      90EDFFFF 
+ 3839 2bc2 660F72D0 		psrld	$4, %xmm0
+ 3839      04
+ 3840              	.LBE1039:
+ 3841              	.LBE1038:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 3842              		.loc 2 857 0
+ 3843 2bc7 F30F7F85 		movdqu	%xmm0, -4800(%rbp)
+ 3843      40EDFFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 3844              		.loc 2 859 0
+ 3845 2bcf 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 3845      00000000 
+ 3846 2bd7 F30F6F8D 		movdqu	-4800(%rbp), %xmm1
+ 3846      40EDFFFF 
+ 3847 2bdf F30F7F8D 		movdqu	%xmm1, -4688(%rbp)
+ 3847      B0EDFFFF 
+ 3848 2be7 F30F7F85 		movdqu	%xmm0, -4704(%rbp)
+ 3848      A0EDFFFF 
+ 3849              	.LBB1040:
+ 3850              	.LBB1041:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 3851              		.loc 2 206 0
+ 3852 2bef F30F6F85 		movdqu	-4704(%rbp), %xmm0
+ 3852      A0EDFFFF 
+ 3853 2bf7 F30F6F8D 		movdqu	-4688(%rbp), %xmm1
+ 3853      B0EDFFFF 
+ 3854 2bff 660FDBC1 		pand	%xmm1, %xmm0
+ 3855              	.LBE1041:
+ 3856              	.LBE1040:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 3857              		.loc 2 859 0
+ 3858 2c03 F30F7F85 		movdqu	%xmm0, -4800(%rbp)
+ 3858      40EDFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 3859              		.loc 2 866 0
+ 3860 2c0b C7851CED 		movl	$0, -4836(%rbp)
+ 3860      FFFF0000 
+ 3860      0000
+ 3861 2c15 E9BE0100 		jmp	.L54
+ 3861      00
+ 3862              	.L55:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 3863              		.loc 2 868 0
+ 3864 2c1a 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 3864      00000000 
+ 3865 2c22 F30F7F85 		movdqu	%xmm0, -4656(%rbp)
+ 3865      D0EDFFFF 
+ 3866 2c2a F30F6F85 		movdqu	-4800(%rbp), %xmm0
+ 3866      40EDFFFF 
+ 3867 2c32 F30F7F85 		movdqu	%xmm0, -4672(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 142
+
+
+ 3867      C0EDFFFF 
+ 3868 2c3a F30F6F85 		movdqu	-4656(%rbp), %xmm0
+ 3868      D0EDFFFF 
+ 3869 2c42 F30F7F85 		movdqu	%xmm0, -4624(%rbp)
+ 3869      F0EDFFFF 
+ 3870 2c4a F30F6F85 		movdqu	-4672(%rbp), %xmm0
+ 3870      C0EDFFFF 
+ 3871 2c52 F30F7F85 		movdqu	%xmm0, -4640(%rbp)
+ 3871      E0EDFFFF 
+ 3872              	.LBB1042:
+ 3873              	.LBB1043:
+ 3874              	.LBB1044:
+ 3875              	.LBB1045:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3876              		.loc 3 529 0
+ 3877 2c5a F30F6F8D 		movdqu	-4640(%rbp), %xmm1
+ 3877      E0EDFFFF 
+ 3878 2c62 F30F6F85 		movdqu	-4624(%rbp), %xmm0
+ 3878      F0EDFFFF 
+ 3879 2c6a 660F3800 		pshufb	%xmm1, %xmm0
+ 3879      C1
+ 3880              	.LBE1045:
+ 3881              	.LBE1044:
+ 3882              	.LBE1043:
+ 3883              	.LBE1042:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 3884              		.loc 2 868 0
+ 3885 2c6f F30F7F85 		movdqu	%xmm0, -4816(%rbp)
+ 3885      30EDFFFF 
+ 3886 2c77 F30F6F85 		movdqu	-4784(%rbp), %xmm0
+ 3886      50EDFFFF 
+ 3887 2c7f F30F7F85 		movdqu	%xmm0, -4592(%rbp)
+ 3887      10EEFFFF 
+ 3888 2c87 F30F6F85 		movdqu	-4816(%rbp), %xmm0
+ 3888      30EDFFFF 
+ 3889 2c8f F30F7F85 		movdqu	%xmm0, -4608(%rbp)
+ 3889      00EEFFFF 
+ 3890              	.LBB1046:
+ 3891              	.LBB1047:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 3892              		.loc 2 234 0
+ 3893 2c97 F30F6F85 		movdqu	-4608(%rbp), %xmm0
+ 3893      00EEFFFF 
+ 3894 2c9f F30F6F8D 		movdqu	-4592(%rbp), %xmm1
+ 3894      10EEFFFF 
+ 3895 2ca7 660FEBC1 		por	%xmm1, %xmm0
+ 3896              	.LBE1047:
+ 3897              	.LBE1046:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 3898              		.loc 2 870 0
+ 3899 2cab F30F7F85 		movdqu	%xmm0, -4816(%rbp)
+ 3899      30EDFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 3900              		.loc 2 872 0
+ 3901 2cb3 8B851CED 		mov	-4836(%rbp), %eax
+ 3901      FFFF
+ 3902 2cb9 48C1E004 		salq	$4, %rax
+
GAS LISTING /tmp/ccjbMjHD.s 			page 143
+
+
+ 3903 2cbd 480385F8 		addq	-4872(%rbp), %rax
+ 3903      ECFFFF
+ 3904 2cc4 660F6F00 		movdqa	(%rax), %xmm0
+ 3905 2cc8 F30F7F85 		movdqu	%xmm0, -4560(%rbp)
+ 3905      30EEFFFF 
+ 3906 2cd0 F30F6F85 		movdqu	-4816(%rbp), %xmm0
+ 3906      30EDFFFF 
+ 3907 2cd8 F30F7F85 		movdqu	%xmm0, -4576(%rbp)
+ 3907      20EEFFFF 
+ 3908 2ce0 F30F6F85 		movdqu	-4560(%rbp), %xmm0
+ 3908      30EEFFFF 
+ 3909 2ce8 F30F7F85 		movdqu	%xmm0, -4528(%rbp)
+ 3909      50EEFFFF 
+ 3910 2cf0 F30F6F85 		movdqu	-4576(%rbp), %xmm0
+ 3910      20EEFFFF 
+ 3911 2cf8 F30F7F85 		movdqu	%xmm0, -4544(%rbp)
+ 3911      40EEFFFF 
+ 3912              	.LBB1048:
+ 3913              	.LBB1049:
+ 3914              	.LBB1050:
+ 3915              	.LBB1051:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 3916              		.loc 3 529 0
+ 3917 2d00 F30F6F8D 		movdqu	-4544(%rbp), %xmm1
+ 3917      40EEFFFF 
+ 3918 2d08 F30F6F85 		movdqu	-4528(%rbp), %xmm0
+ 3918      50EEFFFF 
+ 3919 2d10 660F3800 		pshufb	%xmm1, %xmm0
+ 3919      C1
+ 3920              	.LBE1051:
+ 3921              	.LBE1050:
+ 3922              	.LBE1049:
+ 3923              	.LBE1048:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 3924              		.loc 2 872 0
+ 3925 2d15 F30F7F85 		movdqu	%xmm0, -4816(%rbp)
+ 3925      30EDFFFF 
+ 3926 2d1d F30F6F85 		movdqu	-4832(%rbp), %xmm0
+ 3926      20EDFFFF 
+ 3927 2d25 F30F7F85 		movdqu	%xmm0, -4496(%rbp)
+ 3927      70EEFFFF 
+ 3928 2d2d F30F6F85 		movdqu	-4816(%rbp), %xmm0
+ 3928      30EDFFFF 
+ 3929 2d35 F30F7F85 		movdqu	%xmm0, -4512(%rbp)
+ 3929      60EEFFFF 
+ 3930              	.LBB1052:
+ 3931              	.LBB1053:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 3932              		.loc 2 234 0
+ 3933 2d3d F30F6F85 		movdqu	-4512(%rbp), %xmm0
+ 3933      60EEFFFF 
+ 3934 2d45 F30F6F8D 		movdqu	-4496(%rbp), %xmm1
+ 3934      70EEFFFF 
+ 3935 2d4d 660FEBC1 		por	%xmm1, %xmm0
+ 3936              	.LBE1053:
+ 3937              	.LBE1052:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+
GAS LISTING /tmp/ccjbMjHD.s 			page 144
+
+
+ 3938              		.loc 2 874 0
+ 3939 2d51 F30F7F85 		movdqu	%xmm0, -4832(%rbp)
+ 3939      20EDFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 3940              		.loc 2 876 0
+ 3941 2d59 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 3941      00000000 
+ 3942 2d61 F30F6F8D 		movdqu	-4800(%rbp), %xmm1
+ 3942      40EDFFFF 
+ 3943 2d69 F30F7F8D 		movdqu	%xmm1, -4464(%rbp)
+ 3943      90EEFFFF 
+ 3944 2d71 F30F7F85 		movdqu	%xmm0, -4480(%rbp)
+ 3944      80EEFFFF 
+ 3945              	.LBB1054:
+ 3946              	.LBB1055:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 3947              		.loc 2 290 0
+ 3948 2d79 F30F6F8D 		movdqu	-4480(%rbp), %xmm1
+ 3948      80EEFFFF 
+ 3949 2d81 F30F6F85 		movdqu	-4464(%rbp), %xmm0
+ 3949      90EEFFFF 
+ 3950 2d89 660FF8C1 		psubb	%xmm1, %xmm0
+ 3951              	.LBE1055:
+ 3952              	.LBE1054:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 3953              		.loc 2 876 0
+ 3954 2d8d F30F7F85 		movdqu	%xmm0, -4800(%rbp)
+ 3954      40EDFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 3955              		.loc 2 878 0
+ 3956 2d95 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 3956      00000000 
+ 3957 2d9d F30F6F8D 		movdqu	-4800(%rbp), %xmm1
+ 3957      40EDFFFF 
+ 3958 2da5 F30F7F8D 		movdqu	%xmm1, -4432(%rbp)
+ 3958      B0EEFFFF 
+ 3959 2dad F30F7F85 		movdqu	%xmm0, -4448(%rbp)
+ 3959      A0EEFFFF 
+ 3960              	.LBB1056:
+ 3961              	.LBB1057:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 3962              		.loc 2 206 0
+ 3963 2db5 F30F6F85 		movdqu	-4448(%rbp), %xmm0
+ 3963      A0EEFFFF 
+ 3964 2dbd F30F6F8D 		movdqu	-4432(%rbp), %xmm1
+ 3964      B0EEFFFF 
+ 3965 2dc5 660FDBC1 		pand	%xmm1, %xmm0
+ 3966              	.LBE1057:
+ 3967              	.LBE1056:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 3968              		.loc 2 878 0
+ 3969 2dc9 F30F7F85 		movdqu	%xmm0, -4800(%rbp)
+ 3969      40EDFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 3970              		.loc 2 866 0
+ 3971 2dd1 83851CED 		addl	$1, -4836(%rbp)
+ 3971      FFFF01
+
GAS LISTING /tmp/ccjbMjHD.s 			page 145
+
+
+ 3972              	.L54:
+ 3973 2dd8 83BD1CED 		cmpl	$15, -4836(%rbp)
+ 3973      FFFF0F
+ 3974 2ddf 0F8635FE 		jbe	.L55
+ 3974      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 3975              		.loc 2 882 0
+ 3976 2de5 F30F6F85 		movdqu	-4832(%rbp), %xmm0
+ 3976      20EDFFFF 
+ 3977              	.LBE1035:
+ 3978              	.LBE1034:
+ 3979              	.LBE1033:
+ 3980              	.LBE1032:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 3981              		.loc 2 1682 0
+ 3982 2ded 660F7F85 		movdqa	%xmm0, -10880(%rbp)
+ 3982      80D5FFFF 
+ 3983              	.LBB1058:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 3984              		.loc 2 1683 0
+ 3985 2df5 660F6F85 		movdqa	-10880(%rbp), %xmm0
+ 3985      80D5FFFF 
+ 3986 2dfd F30F7F85 		movdqu	%xmm0, -10256(%rbp)
+ 3986      F0D7FFFF 
+ 3987 2e05 E8000000 		call	KDbgWriterGet at PLT
+ 3987      00
+ 3988 2e0a 4885C0   		testq	%rax, %rax
+ 3989 2e0d 7479     		je	.L57
+ 3990 2e0f BF010000 		movl	$1, %edi
+ 3990      00
+ 3991 2e14 E8000000 		call	KDbgCondToFlag at PLT
+ 3991      00
+ 3992 2e19 4889C6   		movq	%rax, %rsi
+ 3993 2e1c BF100000 		movl	$16, %edi
+ 3993      00
+ 3994 2e21 E8000000 		call	KDbgTestModConds at PLT
+ 3994      00
+ 3995 2e26 84C0     		testb	%al, %al
+ 3996 2e28 745E     		je	.L57
+ 3997 2e2a 8B85FCD7 		movl	-10244(%rbp), %eax
+ 3997      FFFF
+ 3998 2e30 89C7     		movl	%eax, %edi
+ 3999 2e32 E8C9D1FF 		call	bswap_32
+ 3999      FF
+ 4000 2e37 4189C5   		movl	%eax, %r13d
+ 4001 2e3a 8B85F8D7 		movl	-10248(%rbp), %eax
+ 4001      FFFF
+ 4002 2e40 89C7     		movl	%eax, %edi
+ 4003 2e42 E8B9D1FF 		call	bswap_32
+ 4003      FF
+ 4004 2e47 4189C4   		movl	%eax, %r12d
+ 4005 2e4a 8B85F4D7 		movl	-10252(%rbp), %eax
+ 4005      FFFF
+ 4006 2e50 89C7     		movl	%eax, %edi
+ 4007 2e52 E8A9D1FF 		call	bswap_32
+ 4007      FF
+ 4008 2e57 89C3     		movl	%eax, %ebx
+
GAS LISTING /tmp/ccjbMjHD.s 			page 146
+
+
+ 4009 2e59 8B85F0D7 		movl	-10256(%rbp), %eax
+ 4009      FFFF
+ 4010 2e5f 89C7     		movl	%eax, %edi
+ 4011 2e61 E89AD1FF 		call	bswap_32
+ 4011      FF
+ 4012 2e66 4589E9   		movl	%r13d, %r9d
+ 4013 2e69 4589E0   		movl	%r12d, %r8d
+ 4014 2e6c 89D9     		movl	%ebx, %ecx
+ 4015 2e6e 89C2     		movl	%eax, %edx
+ 4016 2e70 488D3500 		leaq	.LC0(%rip), %rsi
+ 4016      000000
+ 4017 2e77 488D3D00 		leaq	.LC1(%rip), %rdi
+ 4017      000000
+ 4018 2e7e B8000000 		movl	$0, %eax
+ 4018      00
+ 4019 2e83 E8000000 		call	KDbgMsg at PLT
+ 4019      00
+ 4020              	.L57:
+ 4021 2e88 660F6F85 		movdqa	-10880(%rbp), %xmm0
+ 4021      80D5FFFF 
+ 4022 2e90 F30F7F85 		movdqu	%xmm0, -4416(%rbp)
+ 4022      C0EEFFFF 
+ 4023              	.LBE1058:
+ 4024              	.LBB1059:
+ 4025              	.LBB1060:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 4026              		.loc 2 667 0
+ 4027 2e98 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 4027      00000000 
+ 4028 2ea0 F30F6F8D 		movdqu	-4416(%rbp), %xmm1
+ 4028      C0EEFFFF 
+ 4029 2ea8 F30F7F8D 		movdqu	%xmm1, -4384(%rbp)
+ 4029      E0EEFFFF 
+ 4030 2eb0 F30F7F85 		movdqu	%xmm0, -4400(%rbp)
+ 4030      D0EEFFFF 
+ 4031 2eb8 F30F6F85 		movdqu	-4384(%rbp), %xmm0
+ 4031      E0EEFFFF 
+ 4032 2ec0 F30F7F85 		movdqu	%xmm0, -4352(%rbp)
+ 4032      00EFFFFF 
+ 4033 2ec8 F30F6F85 		movdqu	-4400(%rbp), %xmm0
+ 4033      D0EEFFFF 
+ 4034 2ed0 F30F7F85 		movdqu	%xmm0, -4368(%rbp)
+ 4034      F0EEFFFF 
+ 4035              	.LBB1061:
+ 4036              	.LBB1062:
+ 4037              	.LBB1063:
+ 4038              	.LBB1064:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4039              		.loc 3 529 0
+ 4040 2ed8 F30F6F8D 		movdqu	-4368(%rbp), %xmm1
+ 4040      F0EEFFFF 
+ 4041 2ee0 F30F6F85 		movdqu	-4352(%rbp), %xmm0
+ 4041      00EFFFFF 
+ 4042 2ee8 660F3800 		pshufb	%xmm1, %xmm0
+ 4042      C1
+ 4043              	.LBE1064:
+ 4044              	.LBE1063:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 147
+
+
+ 4045              	.LBE1062:
+ 4046              	.LBE1061:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 4047              		.loc 2 667 0
+ 4048 2eed F30F7F85 		movdqu	%xmm0, -4416(%rbp)
+ 4048      C0EEFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 4049              		.loc 2 668 0
+ 4050 2ef5 F30F6F85 		movdqu	-4416(%rbp), %xmm0
+ 4050      C0EEFFFF 
+ 4051              	.LBE1060:
+ 4052              	.LBE1059:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 4053              		.loc 2 1684 0
+ 4054 2efd 660F7F85 		movdqa	%xmm0, -10880(%rbp)
+ 4054      80D5FFFF 
+ 4055              	.LBB1065:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 4056              		.loc 2 1685 0
+ 4057 2f05 660F6F85 		movdqa	-10880(%rbp), %xmm0
+ 4057      80D5FFFF 
+ 4058 2f0d F30F7F85 		movdqu	%xmm0, -10272(%rbp)
+ 4058      E0D7FFFF 
+ 4059 2f15 E8000000 		call	KDbgWriterGet at PLT
+ 4059      00
+ 4060 2f1a 4885C0   		testq	%rax, %rax
+ 4061 2f1d 7479     		je	.L59
+ 4062 2f1f BF010000 		movl	$1, %edi
+ 4062      00
+ 4063 2f24 E8000000 		call	KDbgCondToFlag at PLT
+ 4063      00
+ 4064 2f29 4889C6   		movq	%rax, %rsi
+ 4065 2f2c BF100000 		movl	$16, %edi
+ 4065      00
+ 4066 2f31 E8000000 		call	KDbgTestModConds at PLT
+ 4066      00
+ 4067 2f36 84C0     		testb	%al, %al
+ 4068 2f38 745E     		je	.L59
+ 4069 2f3a 8B85ECD7 		movl	-10260(%rbp), %eax
+ 4069      FFFF
+ 4070 2f40 89C7     		movl	%eax, %edi
+ 4071 2f42 E8B9D0FF 		call	bswap_32
+ 4071      FF
+ 4072 2f47 4189C5   		movl	%eax, %r13d
+ 4073 2f4a 8B85E8D7 		movl	-10264(%rbp), %eax
+ 4073      FFFF
+ 4074 2f50 89C7     		movl	%eax, %edi
+ 4075 2f52 E8A9D0FF 		call	bswap_32
+ 4075      FF
+ 4076 2f57 4189C4   		movl	%eax, %r12d
+ 4077 2f5a 8B85E4D7 		movl	-10268(%rbp), %eax
+ 4077      FFFF
+ 4078 2f60 89C7     		movl	%eax, %edi
+ 4079 2f62 E899D0FF 		call	bswap_32
+ 4079      FF
+ 4080 2f67 89C3     		movl	%eax, %ebx
+ 4081 2f69 8B85E0D7 		movl	-10272(%rbp), %eax
+
GAS LISTING /tmp/ccjbMjHD.s 			page 148
+
+
+ 4081      FFFF
+ 4082 2f6f 89C7     		movl	%eax, %edi
+ 4083 2f71 E88AD0FF 		call	bswap_32
+ 4083      FF
+ 4084 2f76 4589E9   		movl	%r13d, %r9d
+ 4085 2f79 4589E0   		movl	%r12d, %r8d
+ 4086 2f7c 89D9     		movl	%ebx, %ecx
+ 4087 2f7e 89C2     		movl	%eax, %edx
+ 4088 2f80 488D3500 		leaq	.LC2(%rip), %rsi
+ 4088      000000
+ 4089 2f87 488D3D00 		leaq	.LC1(%rip), %rdi
+ 4089      000000
+ 4090 2f8e B8000000 		movl	$0, %eax
+ 4090      00
+ 4091 2f93 E8000000 		call	KDbgMsg at PLT
+ 4091      00
+ 4092              	.L59:
+ 4093 2f98 660F6F85 		movdqa	-10880(%rbp), %xmm0
+ 4093      80D5FFFF 
+ 4094 2fa0 F30F7F85 		movdqu	%xmm0, -4320(%rbp)
+ 4094      20EFFFFF 
+ 4095 2fa8 660F6F85 		movdqa	-10864(%rbp), %xmm0
+ 4095      90D5FFFF 
+ 4096 2fb0 F30F7F85 		movdqu	%xmm0, -4336(%rbp)
+ 4096      10EFFFFF 
+ 4097              	.LBE1065:
+ 4098              	.LBB1066:
+ 4099              	.LBB1067:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 4100              		.loc 2 178 0
+ 4101 2fb8 F30F6F85 		movdqu	-4336(%rbp), %xmm0
+ 4101      10EFFFFF 
+ 4102 2fc0 F30F6F8D 		movdqu	-4320(%rbp), %xmm1
+ 4102      20EFFFFF 
+ 4103 2fc8 660FEFC1 		pxor	%xmm1, %xmm0
+ 4104              	.LBE1067:
+ 4105              	.LBE1066:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 4106              		.loc 2 1686 0
+ 4107 2fcc 660F7F85 		movdqa	%xmm0, -10880(%rbp)
+ 4107      80D5FFFF 
+ 4108              	.LBB1068:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 4109              		.loc 2 1687 0
+ 4110 2fd4 660F6F85 		movdqa	-10880(%rbp), %xmm0
+ 4110      80D5FFFF 
+ 4111 2fdc F30F7F85 		movdqu	%xmm0, -10288(%rbp)
+ 4111      D0D7FFFF 
+ 4112 2fe4 E8000000 		call	KDbgWriterGet at PLT
+ 4112      00
+ 4113 2fe9 4885C0   		testq	%rax, %rax
+ 4114 2fec 7479     		je	.L61
+ 4115 2fee BF010000 		movl	$1, %edi
+ 4115      00
+ 4116 2ff3 E8000000 		call	KDbgCondToFlag at PLT
+ 4116      00
+ 4117 2ff8 4889C6   		movq	%rax, %rsi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 149
+
+
+ 4118 2ffb BF100000 		movl	$16, %edi
+ 4118      00
+ 4119 3000 E8000000 		call	KDbgTestModConds at PLT
+ 4119      00
+ 4120 3005 84C0     		testb	%al, %al
+ 4121 3007 745E     		je	.L61
+ 4122 3009 8B85DCD7 		movl	-10276(%rbp), %eax
+ 4122      FFFF
+ 4123 300f 89C7     		movl	%eax, %edi
+ 4124 3011 E8EACFFF 		call	bswap_32
+ 4124      FF
+ 4125 3016 4189C5   		movl	%eax, %r13d
+ 4126 3019 8B85D8D7 		movl	-10280(%rbp), %eax
+ 4126      FFFF
+ 4127 301f 89C7     		movl	%eax, %edi
+ 4128 3021 E8DACFFF 		call	bswap_32
+ 4128      FF
+ 4129 3026 4189C4   		movl	%eax, %r12d
+ 4130 3029 8B85D4D7 		movl	-10284(%rbp), %eax
+ 4130      FFFF
+ 4131 302f 89C7     		movl	%eax, %edi
+ 4132 3031 E8CACFFF 		call	bswap_32
+ 4132      FF
+ 4133 3036 89C3     		movl	%eax, %ebx
+ 4134 3038 8B85D0D7 		movl	-10288(%rbp), %eax
+ 4134      FFFF
+ 4135 303e 89C7     		movl	%eax, %edi
+ 4136 3040 E8BBCFFF 		call	bswap_32
+ 4136      FF
+ 4137 3045 4589E9   		movl	%r13d, %r9d
+ 4138 3048 4589E0   		movl	%r12d, %r8d
+ 4139 304b 89D9     		movl	%ebx, %ecx
+ 4140 304d 89C2     		movl	%eax, %edx
+ 4141 304f 488D3500 		leaq	.LC3(%rip), %rsi
+ 4141      000000
+ 4142 3056 488D3D00 		leaq	.LC1(%rip), %rdi
+ 4142      000000
+ 4143 305d B8000000 		movl	$0, %eax
+ 4143      00
+ 4144 3062 E8000000 		call	KDbgMsg at PLT
+ 4144      00
+ 4145              	.L61:
+ 4146 3067 660F6F85 		movdqa	-10880(%rbp), %xmm0
+ 4146      80D5FFFF 
+ 4147 306f F30F7F85 		movdqu	%xmm0, -4304(%rbp)
+ 4147      30EFFFFF 
+ 4148 3077 F30F6F85 		movdqu	-4304(%rbp), %xmm0
+ 4148      30EFFFFF 
+ 4149 307f F30F7F85 		movdqu	%xmm0, -4272(%rbp)
+ 4149      50EFFFFF 
+ 4150              	.LBE1068:
+ 4151              	.LBB1069:
+ 4152              	.LBB1070:
+ 4153              	.LBB1071:
+ 4154              	.LBB1072:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 4155              		.loc 3 450 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 150
+
+
+ 4156 3087 F30F6F85 		movdqu	-4272(%rbp), %xmm0
+ 4156      50EFFFFF 
+ 4157 308f 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 4157      FF
+ 4158              	.LBE1072:
+ 4159              	.LBE1071:
+ 4160              	.LBE1070:
+ 4161              	.LBE1069:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 4162              		.loc 2 1688 0
+ 4163 3094 660F7F85 		movdqa	%xmm0, -10880(%rbp)
+ 4163      80D5FFFF 
+ 4164              	.LBB1073:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 4165              		.loc 2 1689 0
+ 4166 309c 660F6F85 		movdqa	-10880(%rbp), %xmm0
+ 4166      80D5FFFF 
+ 4167 30a4 F30F7F85 		movdqu	%xmm0, -10304(%rbp)
+ 4167      C0D7FFFF 
+ 4168 30ac E8000000 		call	KDbgWriterGet at PLT
+ 4168      00
+ 4169 30b1 4885C0   		testq	%rax, %rax
+ 4170 30b4 7479     		je	.L63
+ 4171 30b6 BF010000 		movl	$1, %edi
+ 4171      00
+ 4172 30bb E8000000 		call	KDbgCondToFlag at PLT
+ 4172      00
+ 4173 30c0 4889C6   		movq	%rax, %rsi
+ 4174 30c3 BF100000 		movl	$16, %edi
+ 4174      00
+ 4175 30c8 E8000000 		call	KDbgTestModConds at PLT
+ 4175      00
+ 4176 30cd 84C0     		testb	%al, %al
+ 4177 30cf 745E     		je	.L63
+ 4178 30d1 8B85CCD7 		movl	-10292(%rbp), %eax
+ 4178      FFFF
+ 4179 30d7 89C7     		movl	%eax, %edi
+ 4180 30d9 E822CFFF 		call	bswap_32
+ 4180      FF
+ 4181 30de 4189C5   		movl	%eax, %r13d
+ 4182 30e1 8B85C8D7 		movl	-10296(%rbp), %eax
+ 4182      FFFF
+ 4183 30e7 89C7     		movl	%eax, %edi
+ 4184 30e9 E812CFFF 		call	bswap_32
+ 4184      FF
+ 4185 30ee 4189C4   		movl	%eax, %r12d
+ 4186 30f1 8B85C4D7 		movl	-10300(%rbp), %eax
+ 4186      FFFF
+ 4187 30f7 89C7     		movl	%eax, %edi
+ 4188 30f9 E802CFFF 		call	bswap_32
+ 4188      FF
+ 4189 30fe 89C3     		movl	%eax, %ebx
+ 4190 3100 8B85C0D7 		movl	-10304(%rbp), %eax
+ 4190      FFFF
+ 4191 3106 89C7     		movl	%eax, %edi
+ 4192 3108 E8F3CEFF 		call	bswap_32
+ 4192      FF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 151
+
+
+ 4193 310d 4589E9   		movl	%r13d, %r9d
+ 4194 3110 4589E0   		movl	%r12d, %r8d
+ 4195 3113 89D9     		movl	%ebx, %ecx
+ 4196 3115 89C2     		movl	%eax, %edx
+ 4197 3117 488D3500 		leaq	.LC4(%rip), %rsi
+ 4197      000000
+ 4198 311e 488D3D00 		leaq	.LC1(%rip), %rdi
+ 4198      000000
+ 4199 3125 B8000000 		movl	$0, %eax
+ 4199      00
+ 4200 312a E8000000 		call	KDbgMsg at PLT
+ 4200      00
+ 4201              	.L63:
+ 4202              	.LBE1073:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 4203              		.loc 2 1690 0
+ 4204 312f 660F6F85 		movdqa	-10880(%rbp), %xmm0
+ 4204      80D5FFFF 
+ 4205              	.LBE1027:
+ 4206              	.LBE1026:
+1749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x20,6);
+ 4207              		.loc 2 1749 0
+ 4208 3137 F30F7F85 		movdqu	%xmm0, -9968(%rbp)
+ 4208      10D9FFFF 
+ 4209 313f F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 4209      00D9FFFF 
+ 4210 3147 F30F7F85 		movdqu	%xmm0, -4256(%rbp)
+ 4210      60EFFFFF 
+ 4211              	.LBB1074:
+ 4212              	.LBB1075:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 4213              		.loc 2 1565 0
+ 4214 314f F30F6F85 		movdqu	-4256(%rbp), %xmm0
+ 4214      60EFFFFF 
+ 4215 3157 660F7F85 		movdqa	%xmm0, -10848(%rbp)
+ 4215      A0D5FFFF 
+ 4216 315f 660F6F85 		movdqa	-10848(%rbp), %xmm0
+ 4216      A0D5FFFF 
+ 4217 3167 F30F7F85 		movdqu	%xmm0, -4240(%rbp)
+ 4217      70EFFFFF 
+ 4218              	.LBB1076:
+ 4219              	.LBB1077:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4220              		.loc 2 1278 0
+ 4221 316f 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 4221      00000000 
+ 4222 3177 F30F6F8D 		movdqu	-4240(%rbp), %xmm1
+ 4222      70EFFFFF 
+ 4223 317f F30F7F8D 		movdqu	%xmm1, -4208(%rbp)
+ 4223      90EFFFFF 
+ 4224 3187 F30F7F85 		movdqu	%xmm0, -4224(%rbp)
+ 4224      80EFFFFF 
+ 4225 318f F30F6F85 		movdqu	-4208(%rbp), %xmm0
+ 4225      90EFFFFF 
+ 4226 3197 F30F7F85 		movdqu	%xmm0, -4176(%rbp)
+ 4226      B0EFFFFF 
+ 4227 319f F30F6F85 		movdqu	-4224(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 152
+
+
+ 4227      80EFFFFF 
+ 4228 31a7 F30F7F85 		movdqu	%xmm0, -4192(%rbp)
+ 4228      A0EFFFFF 
+ 4229              	.LBB1078:
+ 4230              	.LBB1079:
+ 4231              	.LBB1080:
+ 4232              	.LBB1081:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4233              		.loc 3 529 0
+ 4234 31af F30F6F8D 		movdqu	-4192(%rbp), %xmm1
+ 4234      A0EFFFFF 
+ 4235 31b7 F30F6F85 		movdqu	-4176(%rbp), %xmm0
+ 4235      B0EFFFFF 
+ 4236 31bf 660F3800 		pshufb	%xmm1, %xmm0
+ 4236      C1
+ 4237              	.LBE1081:
+ 4238              	.LBE1080:
+ 4239              	.LBE1079:
+ 4240              	.LBE1078:
+ 4241              	.LBE1077:
+ 4242              	.LBE1076:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4243              		.loc 2 1567 0
+ 4244 31c4 660F7F85 		movdqa	%xmm0, -10848(%rbp)
+ 4244      A0D5FFFF 
+ 4245 31cc 660F6F85 		movdqa	-10848(%rbp), %xmm0
+ 4245      A0D5FFFF 
+ 4246 31d4 660FEF85 		pxor	-4256(%rbp), %xmm0
+ 4246      60EFFFFF 
+ 4247 31dc F30F7F85 		movdqu	%xmm0, -4256(%rbp)
+ 4247      60EFFFFF 
+ 4248 31e4 660F6F85 		movdqa	-10848(%rbp), %xmm0
+ 4248      A0D5FFFF 
+ 4249 31ec F30F7F85 		movdqu	%xmm0, -4160(%rbp)
+ 4249      C0EFFFFF 
+ 4250              	.LBB1082:
+ 4251              	.LBB1083:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4252              		.loc 2 1278 0
+ 4253 31f4 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 4253      00000000 
+ 4254 31fc F30F6F8D 		movdqu	-4160(%rbp), %xmm1
+ 4254      C0EFFFFF 
+ 4255 3204 F30F7F8D 		movdqu	%xmm1, -4128(%rbp)
+ 4255      E0EFFFFF 
+ 4256 320c F30F7F85 		movdqu	%xmm0, -4144(%rbp)
+ 4256      D0EFFFFF 
+ 4257 3214 F30F6F85 		movdqu	-4128(%rbp), %xmm0
+ 4257      E0EFFFFF 
+ 4258 321c F30F7F85 		movdqu	%xmm0, -4096(%rbp)
+ 4258      00F0FFFF 
+ 4259 3224 F30F6F85 		movdqu	-4144(%rbp), %xmm0
+ 4259      D0EFFFFF 
+ 4260 322c F30F7F85 		movdqu	%xmm0, -4112(%rbp)
+ 4260      F0EFFFFF 
+ 4261              	.LBB1084:
+ 4262              	.LBB1085:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 153
+
+
+ 4263              	.LBB1086:
+ 4264              	.LBB1087:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4265              		.loc 3 529 0
+ 4266 3234 F30F6F8D 		movdqu	-4112(%rbp), %xmm1
+ 4266      F0EFFFFF 
+ 4267 323c F30F6F85 		movdqu	-4096(%rbp), %xmm0
+ 4267      00F0FFFF 
+ 4268 3244 660F3800 		pshufb	%xmm1, %xmm0
+ 4268      C1
+ 4269              	.LBE1087:
+ 4270              	.LBE1086:
+ 4271              	.LBE1085:
+ 4272              	.LBE1084:
+ 4273              	.LBE1083:
+ 4274              	.LBE1082:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4275              		.loc 2 1568 0
+ 4276 3249 660F7F85 		movdqa	%xmm0, -10848(%rbp)
+ 4276      A0D5FFFF 
+ 4277 3251 660F6F85 		movdqa	-10848(%rbp), %xmm0
+ 4277      A0D5FFFF 
+ 4278 3259 660FEF85 		pxor	-4256(%rbp), %xmm0
+ 4278      60EFFFFF 
+ 4279 3261 F30F7F85 		movdqu	%xmm0, -4256(%rbp)
+ 4279      60EFFFFF 
+ 4280 3269 660F6F85 		movdqa	-10848(%rbp), %xmm0
+ 4280      A0D5FFFF 
+ 4281 3271 F30F7F85 		movdqu	%xmm0, -4080(%rbp)
+ 4281      10F0FFFF 
+ 4282              	.LBB1088:
+ 4283              	.LBB1089:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4284              		.loc 2 1278 0
+ 4285 3279 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 4285      00000000 
+ 4286 3281 F30F6F8D 		movdqu	-4080(%rbp), %xmm1
+ 4286      10F0FFFF 
+ 4287 3289 F30F7F8D 		movdqu	%xmm1, -4048(%rbp)
+ 4287      30F0FFFF 
+ 4288 3291 F30F7F85 		movdqu	%xmm0, -4064(%rbp)
+ 4288      20F0FFFF 
+ 4289 3299 F30F6F85 		movdqu	-4048(%rbp), %xmm0
+ 4289      30F0FFFF 
+ 4290 32a1 F30F7F85 		movdqu	%xmm0, -4016(%rbp)
+ 4290      50F0FFFF 
+ 4291 32a9 F30F6F85 		movdqu	-4064(%rbp), %xmm0
+ 4291      20F0FFFF 
+ 4292 32b1 F30F7F85 		movdqu	%xmm0, -4032(%rbp)
+ 4292      40F0FFFF 
+ 4293              	.LBB1090:
+ 4294              	.LBB1091:
+ 4295              	.LBB1092:
+ 4296              	.LBB1093:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4297              		.loc 3 529 0
+ 4298 32b9 F30F6F8D 		movdqu	-4032(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 154
+
+
+ 4298      40F0FFFF 
+ 4299 32c1 F30F6F85 		movdqu	-4016(%rbp), %xmm0
+ 4299      50F0FFFF 
+ 4300 32c9 660F3800 		pshufb	%xmm1, %xmm0
+ 4300      C1
+ 4301              	.LBE1093:
+ 4302              	.LBE1092:
+ 4303              	.LBE1091:
+ 4304              	.LBE1090:
+ 4305              	.LBE1089:
+ 4306              	.LBE1088:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4307              		.loc 2 1569 0
+ 4308 32ce 660F7F85 		movdqa	%xmm0, -10848(%rbp)
+ 4308      A0D5FFFF 
+ 4309 32d6 660F6F85 		movdqa	-10848(%rbp), %xmm0
+ 4309      A0D5FFFF 
+ 4310 32de 660FEF85 		pxor	-4256(%rbp), %xmm0
+ 4310      60EFFFFF 
+ 4311 32e6 F30F7F85 		movdqu	%xmm0, -4256(%rbp)
+ 4311      60EFFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 4312              		.loc 2 1571 0
+ 4313 32ee F30F6F85 		movdqu	-4256(%rbp), %xmm0
+ 4313      60EFFFFF 
+ 4314              	.LBE1075:
+ 4315              	.LBE1074:
+ 4316              		.loc 2 1749 0
+ 4317 32f6 F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+ 4317      00D9FFFF 
+ 4318 32fe F30F6F85 		movdqu	-9968(%rbp), %xmm0
+ 4318      10D9FFFF 
+ 4319 3306 F30F6F8D 		movdqu	-9984(%rbp), %xmm1
+ 4319      00D9FFFF 
+ 4320 330e 660FEFC1 		pxor	%xmm1, %xmm0
+ 4321 3312 F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+ 4321      00D9FFFF 
+ 4322 331a 488B8578 		movq	-10632(%rbp), %rax
+ 4322      D6FFFF
+ 4323 3321 4883C060 		addq	$96, %rax
+ 4324 3325 F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 4324      00D9FFFF 
+ 4325 332d F30F7F00 		movdqu	%xmm0, (%rax)
+ 4326 3331 F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 4326      00D9FFFF 
+ 4327 3339 F30F7F85 		movdqu	%xmm0, -3984(%rbp)
+ 4327      70F0FFFF 
+ 4328              	.LBB1094:
+ 4329              	.LBB1095:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 4330              		.loc 2 1681 0
+ 4331 3341 B8400000 		movl	$64, %eax
+ 4331      00
+ 4332 3346 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 4332      00000000 
+ 4333 334e F30F7F85 		movdqu	%xmm0, -3952(%rbp)
+ 4333      90F0FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 155
+
+
+ 4334 3356 89858CF0 		movl	%eax, -3956(%rbp)
+ 4334      FFFF
+ 4335 335c F30F6F85 		movdqu	-3952(%rbp), %xmm0
+ 4335      90F0FFFF 
+ 4336 3364 F30F7F85 		movdqu	%xmm0, -3920(%rbp)
+ 4336      B0F0FFFF 
+ 4337 336c 8B858CF0 		movl	-3956(%rbp), %eax
+ 4337      FFFF
+ 4338 3372 8985ACF0 		movl	%eax, -3924(%rbp)
+ 4338      FFFF
+ 4339              	.LBB1096:
+ 4340              	.LBB1097:
+ 4341              	.LBB1098:
+ 4342              	.LBB1099:
+ 4343              		.loc 3 598 0
+ 4344 3378 8B85ACF0 		movl	-3924(%rbp), %eax
+ 4344      FFFF
+ 4345 337e F30F6F85 		movdqu	-3920(%rbp), %xmm0
+ 4345      B0F0FFFF 
+ 4346 3386 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 4346      C003
+ 4347              	.LBE1099:
+ 4348              	.LBE1098:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 4349              		.loc 2 519 0
+ 4350 338c F30F7F85 		movdqu	%xmm0, -3952(%rbp)
+ 4350      90F0FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 4351              		.loc 2 526 0
+ 4352 3394 F30F6F85 		movdqu	-3952(%rbp), %xmm0
+ 4352      90F0FFFF 
+ 4353              	.LBE1097:
+ 4354              	.LBE1096:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 4355              		.loc 2 1681 0
+ 4356 339c 660F7F85 		movdqa	%xmm0, -10816(%rbp)
+ 4356      C0D5FFFF 
+ 4357 33a4 F30F6F85 		movdqu	-3984(%rbp), %xmm0
+ 4357      70F0FFFF 
+ 4358 33ac F30F7F85 		movdqu	%xmm0, -3904(%rbp)
+ 4358      C0F0FFFF 
+ 4359 33b4 F30F6F85 		movdqu	-3904(%rbp), %xmm0
+ 4359      C0F0FFFF 
+ 4360 33bc F30F7F85 		movdqu	%xmm0, -3872(%rbp)
+ 4360      E0F0FFFF 
+ 4361 33c4 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 4361      000000
+ 4362 33cb 488985D8 		movq	%rax, -3880(%rbp)
+ 4362      F0FFFF
+ 4363              	.LBB1100:
+ 4364              	.LBB1101:
+ 4365              	.LBB1102:
+ 4366              	.LBB1103:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 4367              		.loc 2 851 0
+ 4368 33d2 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 4368      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 156
+
+
+ 4369 33da F30F7F85 		movdqu	%xmm0, -3840(%rbp)
+ 4369      00F1FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 4370              		.loc 2 854 0
+ 4371 33e2 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 4371      00000000 
+ 4372 33ea F30F6F8D 		movdqu	-3872(%rbp), %xmm1
+ 4372      E0F0FFFF 
+ 4373 33f2 F30F7F8D 		movdqu	%xmm1, -3760(%rbp)
+ 4373      50F1FFFF 
+ 4374 33fa F30F7F85 		movdqu	%xmm0, -3776(%rbp)
+ 4374      40F1FFFF 
+ 4375              	.LBB1104:
+ 4376              	.LBB1105:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 4377              		.loc 2 206 0
+ 4378 3402 F30F6F85 		movdqu	-3776(%rbp), %xmm0
+ 4378      40F1FFFF 
+ 4379 340a F30F6F8D 		movdqu	-3760(%rbp), %xmm1
+ 4379      50F1FFFF 
+ 4380 3412 660FDBC1 		pand	%xmm1, %xmm0
+ 4381              	.LBE1105:
+ 4382              	.LBE1104:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 4383              		.loc 2 854 0
+ 4384 3416 F30F7F85 		movdqu	%xmm0, -3792(%rbp)
+ 4384      30F1FFFF 
+ 4385 341e F30F6F85 		movdqu	-3872(%rbp), %xmm0
+ 4385      E0F0FFFF 
+ 4386 3426 F30F7F85 		movdqu	%xmm0, -3728(%rbp)
+ 4386      70F1FFFF 
+ 4387              	.LBB1106:
+ 4388              	.LBB1107:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 4389              		.loc 3 433 0
+ 4390 342e F30F6F85 		movdqu	-3728(%rbp), %xmm0
+ 4390      70F1FFFF 
+ 4391 3436 660F72D0 		psrld	$4, %xmm0
+ 4391      04
+ 4392              	.LBE1107:
+ 4393              	.LBE1106:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 4394              		.loc 2 857 0
+ 4395 343b F30F7F85 		movdqu	%xmm0, -3808(%rbp)
+ 4395      20F1FFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 4396              		.loc 2 859 0
+ 4397 3443 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 4397      00000000 
+ 4398 344b F30F6F8D 		movdqu	-3808(%rbp), %xmm1
+ 4398      20F1FFFF 
+ 4399 3453 F30F7F8D 		movdqu	%xmm1, -3696(%rbp)
+ 4399      90F1FFFF 
+ 4400 345b F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 4400      80F1FFFF 
+ 4401              	.LBB1108:
+ 4402              	.LBB1109:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 157
+
+
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 4403              		.loc 2 206 0
+ 4404 3463 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 4404      80F1FFFF 
+ 4405 346b F30F6F8D 		movdqu	-3696(%rbp), %xmm1
+ 4405      90F1FFFF 
+ 4406 3473 660FDBC1 		pand	%xmm1, %xmm0
+ 4407              	.LBE1109:
+ 4408              	.LBE1108:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 4409              		.loc 2 859 0
+ 4410 3477 F30F7F85 		movdqu	%xmm0, -3808(%rbp)
+ 4410      20F1FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 4411              		.loc 2 866 0
+ 4412 347f C785FCF0 		movl	$0, -3844(%rbp)
+ 4412      FFFF0000 
+ 4412      0000
+ 4413 3489 E9BE0100 		jmp	.L64
+ 4413      00
+ 4414              	.L65:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 4415              		.loc 2 868 0
+ 4416 348e 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 4416      00000000 
+ 4417 3496 F30F7F85 		movdqu	%xmm0, -3664(%rbp)
+ 4417      B0F1FFFF 
+ 4418 349e F30F6F85 		movdqu	-3808(%rbp), %xmm0
+ 4418      20F1FFFF 
+ 4419 34a6 F30F7F85 		movdqu	%xmm0, -3680(%rbp)
+ 4419      A0F1FFFF 
+ 4420 34ae F30F6F85 		movdqu	-3664(%rbp), %xmm0
+ 4420      B0F1FFFF 
+ 4421 34b6 F30F7F85 		movdqu	%xmm0, -3632(%rbp)
+ 4421      D0F1FFFF 
+ 4422 34be F30F6F85 		movdqu	-3680(%rbp), %xmm0
+ 4422      A0F1FFFF 
+ 4423 34c6 F30F7F85 		movdqu	%xmm0, -3648(%rbp)
+ 4423      C0F1FFFF 
+ 4424              	.LBB1110:
+ 4425              	.LBB1111:
+ 4426              	.LBB1112:
+ 4427              	.LBB1113:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4428              		.loc 3 529 0
+ 4429 34ce F30F6F8D 		movdqu	-3648(%rbp), %xmm1
+ 4429      C0F1FFFF 
+ 4430 34d6 F30F6F85 		movdqu	-3632(%rbp), %xmm0
+ 4430      D0F1FFFF 
+ 4431 34de 660F3800 		pshufb	%xmm1, %xmm0
+ 4431      C1
+ 4432              	.LBE1113:
+ 4433              	.LBE1112:
+ 4434              	.LBE1111:
+ 4435              	.LBE1110:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 4436              		.loc 2 868 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 158
+
+
+ 4437 34e3 F30F7F85 		movdqu	%xmm0, -3824(%rbp)
+ 4437      10F1FFFF 
+ 4438 34eb F30F6F85 		movdqu	-3792(%rbp), %xmm0
+ 4438      30F1FFFF 
+ 4439 34f3 F30F7F85 		movdqu	%xmm0, -3600(%rbp)
+ 4439      F0F1FFFF 
+ 4440 34fb F30F6F85 		movdqu	-3824(%rbp), %xmm0
+ 4440      10F1FFFF 
+ 4441 3503 F30F7F85 		movdqu	%xmm0, -3616(%rbp)
+ 4441      E0F1FFFF 
+ 4442              	.LBB1114:
+ 4443              	.LBB1115:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 4444              		.loc 2 234 0
+ 4445 350b F30F6F85 		movdqu	-3616(%rbp), %xmm0
+ 4445      E0F1FFFF 
+ 4446 3513 F30F6F8D 		movdqu	-3600(%rbp), %xmm1
+ 4446      F0F1FFFF 
+ 4447 351b 660FEBC1 		por	%xmm1, %xmm0
+ 4448              	.LBE1115:
+ 4449              	.LBE1114:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 4450              		.loc 2 870 0
+ 4451 351f F30F7F85 		movdqu	%xmm0, -3824(%rbp)
+ 4451      10F1FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 4452              		.loc 2 872 0
+ 4453 3527 8B85FCF0 		mov	-3844(%rbp), %eax
+ 4453      FFFF
+ 4454 352d 48C1E004 		salq	$4, %rax
+ 4455 3531 480385D8 		addq	-3880(%rbp), %rax
+ 4455      F0FFFF
+ 4456 3538 660F6F00 		movdqa	(%rax), %xmm0
+ 4457 353c F30F7F85 		movdqu	%xmm0, -3568(%rbp)
+ 4457      10F2FFFF 
+ 4458 3544 F30F6F85 		movdqu	-3824(%rbp), %xmm0
+ 4458      10F1FFFF 
+ 4459 354c F30F7F85 		movdqu	%xmm0, -3584(%rbp)
+ 4459      00F2FFFF 
+ 4460 3554 F30F6F85 		movdqu	-3568(%rbp), %xmm0
+ 4460      10F2FFFF 
+ 4461 355c F30F7F85 		movdqu	%xmm0, -3536(%rbp)
+ 4461      30F2FFFF 
+ 4462 3564 F30F6F85 		movdqu	-3584(%rbp), %xmm0
+ 4462      00F2FFFF 
+ 4463 356c F30F7F85 		movdqu	%xmm0, -3552(%rbp)
+ 4463      20F2FFFF 
+ 4464              	.LBB1116:
+ 4465              	.LBB1117:
+ 4466              	.LBB1118:
+ 4467              	.LBB1119:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4468              		.loc 3 529 0
+ 4469 3574 F30F6F8D 		movdqu	-3552(%rbp), %xmm1
+ 4469      20F2FFFF 
+ 4470 357c F30F6F85 		movdqu	-3536(%rbp), %xmm0
+ 4470      30F2FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 159
+
+
+ 4471 3584 660F3800 		pshufb	%xmm1, %xmm0
+ 4471      C1
+ 4472              	.LBE1119:
+ 4473              	.LBE1118:
+ 4474              	.LBE1117:
+ 4475              	.LBE1116:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 4476              		.loc 2 872 0
+ 4477 3589 F30F7F85 		movdqu	%xmm0, -3824(%rbp)
+ 4477      10F1FFFF 
+ 4478 3591 F30F6F85 		movdqu	-3840(%rbp), %xmm0
+ 4478      00F1FFFF 
+ 4479 3599 F30F7F85 		movdqu	%xmm0, -3504(%rbp)
+ 4479      50F2FFFF 
+ 4480 35a1 F30F6F85 		movdqu	-3824(%rbp), %xmm0
+ 4480      10F1FFFF 
+ 4481 35a9 F30F7F85 		movdqu	%xmm0, -3520(%rbp)
+ 4481      40F2FFFF 
+ 4482              	.LBB1120:
+ 4483              	.LBB1121:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 4484              		.loc 2 234 0
+ 4485 35b1 F30F6F85 		movdqu	-3520(%rbp), %xmm0
+ 4485      40F2FFFF 
+ 4486 35b9 F30F6F8D 		movdqu	-3504(%rbp), %xmm1
+ 4486      50F2FFFF 
+ 4487 35c1 660FEBC1 		por	%xmm1, %xmm0
+ 4488              	.LBE1121:
+ 4489              	.LBE1120:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 4490              		.loc 2 874 0
+ 4491 35c5 F30F7F85 		movdqu	%xmm0, -3840(%rbp)
+ 4491      00F1FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 4492              		.loc 2 876 0
+ 4493 35cd 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 4493      00000000 
+ 4494 35d5 F30F6F8D 		movdqu	-3808(%rbp), %xmm1
+ 4494      20F1FFFF 
+ 4495 35dd F30F7F8D 		movdqu	%xmm1, -3472(%rbp)
+ 4495      70F2FFFF 
+ 4496 35e5 F30F7F85 		movdqu	%xmm0, -3488(%rbp)
+ 4496      60F2FFFF 
+ 4497              	.LBB1122:
+ 4498              	.LBB1123:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 4499              		.loc 2 290 0
+ 4500 35ed F30F6F8D 		movdqu	-3488(%rbp), %xmm1
+ 4500      60F2FFFF 
+ 4501 35f5 F30F6F85 		movdqu	-3472(%rbp), %xmm0
+ 4501      70F2FFFF 
+ 4502 35fd 660FF8C1 		psubb	%xmm1, %xmm0
+ 4503              	.LBE1123:
+ 4504              	.LBE1122:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 4505              		.loc 2 876 0
+ 4506 3601 F30F7F85 		movdqu	%xmm0, -3808(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 160
+
+
+ 4506      20F1FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 4507              		.loc 2 878 0
+ 4508 3609 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 4508      00000000 
+ 4509 3611 F30F6F8D 		movdqu	-3808(%rbp), %xmm1
+ 4509      20F1FFFF 
+ 4510 3619 F30F7F8D 		movdqu	%xmm1, -3440(%rbp)
+ 4510      90F2FFFF 
+ 4511 3621 F30F7F85 		movdqu	%xmm0, -3456(%rbp)
+ 4511      80F2FFFF 
+ 4512              	.LBB1124:
+ 4513              	.LBB1125:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 4514              		.loc 2 206 0
+ 4515 3629 F30F6F85 		movdqu	-3456(%rbp), %xmm0
+ 4515      80F2FFFF 
+ 4516 3631 F30F6F8D 		movdqu	-3440(%rbp), %xmm1
+ 4516      90F2FFFF 
+ 4517 3639 660FDBC1 		pand	%xmm1, %xmm0
+ 4518              	.LBE1125:
+ 4519              	.LBE1124:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 4520              		.loc 2 878 0
+ 4521 363d F30F7F85 		movdqu	%xmm0, -3808(%rbp)
+ 4521      20F1FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 4522              		.loc 2 866 0
+ 4523 3645 8385FCF0 		addl	$1, -3844(%rbp)
+ 4523      FFFF01
+ 4524              	.L64:
+ 4525 364c 83BDFCF0 		cmpl	$15, -3844(%rbp)
+ 4525      FFFF0F
+ 4526 3653 0F8635FE 		jbe	.L65
+ 4526      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 4527              		.loc 2 882 0
+ 4528 3659 F30F6F85 		movdqu	-3840(%rbp), %xmm0
+ 4528      00F1FFFF 
+ 4529              	.LBE1103:
+ 4530              	.LBE1102:
+ 4531              	.LBE1101:
+ 4532              	.LBE1100:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 4533              		.loc 2 1682 0
+ 4534 3661 660F7F85 		movdqa	%xmm0, -10832(%rbp)
+ 4534      B0D5FFFF 
+ 4535              	.LBB1126:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 4536              		.loc 2 1683 0
+ 4537 3669 660F6F85 		movdqa	-10832(%rbp), %xmm0
+ 4537      B0D5FFFF 
+ 4538 3671 F30F7F85 		movdqu	%xmm0, -10192(%rbp)
+ 4538      30D8FFFF 
+ 4539 3679 E8000000 		call	KDbgWriterGet at PLT
+ 4539      00
+ 4540 367e 4885C0   		testq	%rax, %rax
+
GAS LISTING /tmp/ccjbMjHD.s 			page 161
+
+
+ 4541 3681 7479     		je	.L67
+ 4542 3683 BF010000 		movl	$1, %edi
+ 4542      00
+ 4543 3688 E8000000 		call	KDbgCondToFlag at PLT
+ 4543      00
+ 4544 368d 4889C6   		movq	%rax, %rsi
+ 4545 3690 BF100000 		movl	$16, %edi
+ 4545      00
+ 4546 3695 E8000000 		call	KDbgTestModConds at PLT
+ 4546      00
+ 4547 369a 84C0     		testb	%al, %al
+ 4548 369c 745E     		je	.L67
+ 4549 369e 8B853CD8 		movl	-10180(%rbp), %eax
+ 4549      FFFF
+ 4550 36a4 89C7     		movl	%eax, %edi
+ 4551 36a6 E855C9FF 		call	bswap_32
+ 4551      FF
+ 4552 36ab 4189C5   		movl	%eax, %r13d
+ 4553 36ae 8B8538D8 		movl	-10184(%rbp), %eax
+ 4553      FFFF
+ 4554 36b4 89C7     		movl	%eax, %edi
+ 4555 36b6 E845C9FF 		call	bswap_32
+ 4555      FF
+ 4556 36bb 4189C4   		movl	%eax, %r12d
+ 4557 36be 8B8534D8 		movl	-10188(%rbp), %eax
+ 4557      FFFF
+ 4558 36c4 89C7     		movl	%eax, %edi
+ 4559 36c6 E835C9FF 		call	bswap_32
+ 4559      FF
+ 4560 36cb 89C3     		movl	%eax, %ebx
+ 4561 36cd 8B8530D8 		movl	-10192(%rbp), %eax
+ 4561      FFFF
+ 4562 36d3 89C7     		movl	%eax, %edi
+ 4563 36d5 E826C9FF 		call	bswap_32
+ 4563      FF
+ 4564 36da 4589E9   		movl	%r13d, %r9d
+ 4565 36dd 4589E0   		movl	%r12d, %r8d
+ 4566 36e0 89D9     		movl	%ebx, %ecx
+ 4567 36e2 89C2     		movl	%eax, %edx
+ 4568 36e4 488D3500 		leaq	.LC0(%rip), %rsi
+ 4568      000000
+ 4569 36eb 488D3D00 		leaq	.LC1(%rip), %rdi
+ 4569      000000
+ 4570 36f2 B8000000 		movl	$0, %eax
+ 4570      00
+ 4571 36f7 E8000000 		call	KDbgMsg at PLT
+ 4571      00
+ 4572              	.L67:
+ 4573 36fc 660F6F85 		movdqa	-10832(%rbp), %xmm0
+ 4573      B0D5FFFF 
+ 4574 3704 F30F7F85 		movdqu	%xmm0, -3424(%rbp)
+ 4574      A0F2FFFF 
+ 4575              	.LBE1126:
+ 4576              	.LBB1127:
+ 4577              	.LBB1128:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 4578              		.loc 2 667 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 162
+
+
+ 4579 370c 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 4579      00000000 
+ 4580 3714 F30F6F8D 		movdqu	-3424(%rbp), %xmm1
+ 4580      A0F2FFFF 
+ 4581 371c F30F7F8D 		movdqu	%xmm1, -3392(%rbp)
+ 4581      C0F2FFFF 
+ 4582 3724 F30F7F85 		movdqu	%xmm0, -3408(%rbp)
+ 4582      B0F2FFFF 
+ 4583 372c F30F6F85 		movdqu	-3392(%rbp), %xmm0
+ 4583      C0F2FFFF 
+ 4584 3734 F30F7F85 		movdqu	%xmm0, -3360(%rbp)
+ 4584      E0F2FFFF 
+ 4585 373c F30F6F85 		movdqu	-3408(%rbp), %xmm0
+ 4585      B0F2FFFF 
+ 4586 3744 F30F7F85 		movdqu	%xmm0, -3376(%rbp)
+ 4586      D0F2FFFF 
+ 4587              	.LBB1129:
+ 4588              	.LBB1130:
+ 4589              	.LBB1131:
+ 4590              	.LBB1132:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4591              		.loc 3 529 0
+ 4592 374c F30F6F8D 		movdqu	-3376(%rbp), %xmm1
+ 4592      D0F2FFFF 
+ 4593 3754 F30F6F85 		movdqu	-3360(%rbp), %xmm0
+ 4593      E0F2FFFF 
+ 4594 375c 660F3800 		pshufb	%xmm1, %xmm0
+ 4594      C1
+ 4595              	.LBE1132:
+ 4596              	.LBE1131:
+ 4597              	.LBE1130:
+ 4598              	.LBE1129:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 4599              		.loc 2 667 0
+ 4600 3761 F30F7F85 		movdqu	%xmm0, -3424(%rbp)
+ 4600      A0F2FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 4601              		.loc 2 668 0
+ 4602 3769 F30F6F85 		movdqu	-3424(%rbp), %xmm0
+ 4602      A0F2FFFF 
+ 4603              	.LBE1128:
+ 4604              	.LBE1127:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 4605              		.loc 2 1684 0
+ 4606 3771 660F7F85 		movdqa	%xmm0, -10832(%rbp)
+ 4606      B0D5FFFF 
+ 4607              	.LBB1133:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 4608              		.loc 2 1685 0
+ 4609 3779 660F6F85 		movdqa	-10832(%rbp), %xmm0
+ 4609      B0D5FFFF 
+ 4610 3781 F30F7F85 		movdqu	%xmm0, -10208(%rbp)
+ 4610      20D8FFFF 
+ 4611 3789 E8000000 		call	KDbgWriterGet at PLT
+ 4611      00
+ 4612 378e 4885C0   		testq	%rax, %rax
+ 4613 3791 7479     		je	.L69
+
GAS LISTING /tmp/ccjbMjHD.s 			page 163
+
+
+ 4614 3793 BF010000 		movl	$1, %edi
+ 4614      00
+ 4615 3798 E8000000 		call	KDbgCondToFlag at PLT
+ 4615      00
+ 4616 379d 4889C6   		movq	%rax, %rsi
+ 4617 37a0 BF100000 		movl	$16, %edi
+ 4617      00
+ 4618 37a5 E8000000 		call	KDbgTestModConds at PLT
+ 4618      00
+ 4619 37aa 84C0     		testb	%al, %al
+ 4620 37ac 745E     		je	.L69
+ 4621 37ae 8B852CD8 		movl	-10196(%rbp), %eax
+ 4621      FFFF
+ 4622 37b4 89C7     		movl	%eax, %edi
+ 4623 37b6 E845C8FF 		call	bswap_32
+ 4623      FF
+ 4624 37bb 4189C5   		movl	%eax, %r13d
+ 4625 37be 8B8528D8 		movl	-10200(%rbp), %eax
+ 4625      FFFF
+ 4626 37c4 89C7     		movl	%eax, %edi
+ 4627 37c6 E835C8FF 		call	bswap_32
+ 4627      FF
+ 4628 37cb 4189C4   		movl	%eax, %r12d
+ 4629 37ce 8B8524D8 		movl	-10204(%rbp), %eax
+ 4629      FFFF
+ 4630 37d4 89C7     		movl	%eax, %edi
+ 4631 37d6 E825C8FF 		call	bswap_32
+ 4631      FF
+ 4632 37db 89C3     		movl	%eax, %ebx
+ 4633 37dd 8B8520D8 		movl	-10208(%rbp), %eax
+ 4633      FFFF
+ 4634 37e3 89C7     		movl	%eax, %edi
+ 4635 37e5 E816C8FF 		call	bswap_32
+ 4635      FF
+ 4636 37ea 4589E9   		movl	%r13d, %r9d
+ 4637 37ed 4589E0   		movl	%r12d, %r8d
+ 4638 37f0 89D9     		movl	%ebx, %ecx
+ 4639 37f2 89C2     		movl	%eax, %edx
+ 4640 37f4 488D3500 		leaq	.LC2(%rip), %rsi
+ 4640      000000
+ 4641 37fb 488D3D00 		leaq	.LC1(%rip), %rdi
+ 4641      000000
+ 4642 3802 B8000000 		movl	$0, %eax
+ 4642      00
+ 4643 3807 E8000000 		call	KDbgMsg at PLT
+ 4643      00
+ 4644              	.L69:
+ 4645 380c 660F6F85 		movdqa	-10832(%rbp), %xmm0
+ 4645      B0D5FFFF 
+ 4646 3814 F30F7F85 		movdqu	%xmm0, -3328(%rbp)
+ 4646      00F3FFFF 
+ 4647 381c 660F6F85 		movdqa	-10816(%rbp), %xmm0
+ 4647      C0D5FFFF 
+ 4648 3824 F30F7F85 		movdqu	%xmm0, -3344(%rbp)
+ 4648      F0F2FFFF 
+ 4649              	.LBE1133:
+ 4650              	.LBB1134:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 164
+
+
+ 4651              	.LBB1135:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 4652              		.loc 2 178 0
+ 4653 382c F30F6F85 		movdqu	-3344(%rbp), %xmm0
+ 4653      F0F2FFFF 
+ 4654 3834 F30F6F8D 		movdqu	-3328(%rbp), %xmm1
+ 4654      00F3FFFF 
+ 4655 383c 660FEFC1 		pxor	%xmm1, %xmm0
+ 4656              	.LBE1135:
+ 4657              	.LBE1134:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 4658              		.loc 2 1686 0
+ 4659 3840 660F7F85 		movdqa	%xmm0, -10832(%rbp)
+ 4659      B0D5FFFF 
+ 4660              	.LBB1136:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 4661              		.loc 2 1687 0
+ 4662 3848 660F6F85 		movdqa	-10832(%rbp), %xmm0
+ 4662      B0D5FFFF 
+ 4663 3850 F30F7F85 		movdqu	%xmm0, -10224(%rbp)
+ 4663      10D8FFFF 
+ 4664 3858 E8000000 		call	KDbgWriterGet at PLT
+ 4664      00
+ 4665 385d 4885C0   		testq	%rax, %rax
+ 4666 3860 7479     		je	.L71
+ 4667 3862 BF010000 		movl	$1, %edi
+ 4667      00
+ 4668 3867 E8000000 		call	KDbgCondToFlag at PLT
+ 4668      00
+ 4669 386c 4889C6   		movq	%rax, %rsi
+ 4670 386f BF100000 		movl	$16, %edi
+ 4670      00
+ 4671 3874 E8000000 		call	KDbgTestModConds at PLT
+ 4671      00
+ 4672 3879 84C0     		testb	%al, %al
+ 4673 387b 745E     		je	.L71
+ 4674 387d 8B851CD8 		movl	-10212(%rbp), %eax
+ 4674      FFFF
+ 4675 3883 89C7     		movl	%eax, %edi
+ 4676 3885 E876C7FF 		call	bswap_32
+ 4676      FF
+ 4677 388a 4189C5   		movl	%eax, %r13d
+ 4678 388d 8B8518D8 		movl	-10216(%rbp), %eax
+ 4678      FFFF
+ 4679 3893 89C7     		movl	%eax, %edi
+ 4680 3895 E866C7FF 		call	bswap_32
+ 4680      FF
+ 4681 389a 4189C4   		movl	%eax, %r12d
+ 4682 389d 8B8514D8 		movl	-10220(%rbp), %eax
+ 4682      FFFF
+ 4683 38a3 89C7     		movl	%eax, %edi
+ 4684 38a5 E856C7FF 		call	bswap_32
+ 4684      FF
+ 4685 38aa 89C3     		movl	%eax, %ebx
+ 4686 38ac 8B8510D8 		movl	-10224(%rbp), %eax
+ 4686      FFFF
+ 4687 38b2 89C7     		movl	%eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 165
+
+
+ 4688 38b4 E847C7FF 		call	bswap_32
+ 4688      FF
+ 4689 38b9 4589E9   		movl	%r13d, %r9d
+ 4690 38bc 4589E0   		movl	%r12d, %r8d
+ 4691 38bf 89D9     		movl	%ebx, %ecx
+ 4692 38c1 89C2     		movl	%eax, %edx
+ 4693 38c3 488D3500 		leaq	.LC3(%rip), %rsi
+ 4693      000000
+ 4694 38ca 488D3D00 		leaq	.LC1(%rip), %rdi
+ 4694      000000
+ 4695 38d1 B8000000 		movl	$0, %eax
+ 4695      00
+ 4696 38d6 E8000000 		call	KDbgMsg at PLT
+ 4696      00
+ 4697              	.L71:
+ 4698 38db 660F6F85 		movdqa	-10832(%rbp), %xmm0
+ 4698      B0D5FFFF 
+ 4699 38e3 F30F7F85 		movdqu	%xmm0, -3312(%rbp)
+ 4699      10F3FFFF 
+ 4700 38eb F30F6F85 		movdqu	-3312(%rbp), %xmm0
+ 4700      10F3FFFF 
+ 4701 38f3 F30F7F85 		movdqu	%xmm0, -3280(%rbp)
+ 4701      30F3FFFF 
+ 4702              	.LBE1136:
+ 4703              	.LBB1137:
+ 4704              	.LBB1138:
+ 4705              	.LBB1139:
+ 4706              	.LBB1140:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 4707              		.loc 3 450 0
+ 4708 38fb F30F6F85 		movdqu	-3280(%rbp), %xmm0
+ 4708      30F3FFFF 
+ 4709 3903 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 4709      FF
+ 4710              	.LBE1140:
+ 4711              	.LBE1139:
+ 4712              	.LBE1138:
+ 4713              	.LBE1137:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 4714              		.loc 2 1688 0
+ 4715 3908 660F7F85 		movdqa	%xmm0, -10832(%rbp)
+ 4715      B0D5FFFF 
+ 4716              	.LBB1141:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 4717              		.loc 2 1689 0
+ 4718 3910 660F6F85 		movdqa	-10832(%rbp), %xmm0
+ 4718      B0D5FFFF 
+ 4719 3918 F30F7F85 		movdqu	%xmm0, -10240(%rbp)
+ 4719      00D8FFFF 
+ 4720 3920 E8000000 		call	KDbgWriterGet at PLT
+ 4720      00
+ 4721 3925 4885C0   		testq	%rax, %rax
+ 4722 3928 7479     		je	.L73
+ 4723 392a BF010000 		movl	$1, %edi
+ 4723      00
+ 4724 392f E8000000 		call	KDbgCondToFlag at PLT
+ 4724      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 166
+
+
+ 4725 3934 4889C6   		movq	%rax, %rsi
+ 4726 3937 BF100000 		movl	$16, %edi
+ 4726      00
+ 4727 393c E8000000 		call	KDbgTestModConds at PLT
+ 4727      00
+ 4728 3941 84C0     		testb	%al, %al
+ 4729 3943 745E     		je	.L73
+ 4730 3945 8B850CD8 		movl	-10228(%rbp), %eax
+ 4730      FFFF
+ 4731 394b 89C7     		movl	%eax, %edi
+ 4732 394d E8AEC6FF 		call	bswap_32
+ 4732      FF
+ 4733 3952 4189C5   		movl	%eax, %r13d
+ 4734 3955 8B8508D8 		movl	-10232(%rbp), %eax
+ 4734      FFFF
+ 4735 395b 89C7     		movl	%eax, %edi
+ 4736 395d E89EC6FF 		call	bswap_32
+ 4736      FF
+ 4737 3962 4189C4   		movl	%eax, %r12d
+ 4738 3965 8B8504D8 		movl	-10236(%rbp), %eax
+ 4738      FFFF
+ 4739 396b 89C7     		movl	%eax, %edi
+ 4740 396d E88EC6FF 		call	bswap_32
+ 4740      FF
+ 4741 3972 89C3     		movl	%eax, %ebx
+ 4742 3974 8B8500D8 		movl	-10240(%rbp), %eax
+ 4742      FFFF
+ 4743 397a 89C7     		movl	%eax, %edi
+ 4744 397c E87FC6FF 		call	bswap_32
+ 4744      FF
+ 4745 3981 4589E9   		movl	%r13d, %r9d
+ 4746 3984 4589E0   		movl	%r12d, %r8d
+ 4747 3987 89D9     		movl	%ebx, %ecx
+ 4748 3989 89C2     		movl	%eax, %edx
+ 4749 398b 488D3500 		leaq	.LC4(%rip), %rsi
+ 4749      000000
+ 4750 3992 488D3D00 		leaq	.LC1(%rip), %rdi
+ 4750      000000
+ 4751 3999 B8000000 		movl	$0, %eax
+ 4751      00
+ 4752 399e E8000000 		call	KDbgMsg at PLT
+ 4752      00
+ 4753              	.L73:
+ 4754              	.LBE1141:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 4755              		.loc 2 1690 0
+ 4756 39a3 660F6F85 		movdqa	-10832(%rbp), %xmm0
+ 4756      B0D5FFFF 
+ 4757              	.LBE1095:
+ 4758              	.LBE1094:
+1750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x40,7);
+ 4759              		.loc 2 1750 0
+ 4760 39ab F30F7F85 		movdqu	%xmm0, -9968(%rbp)
+ 4760      10D9FFFF 
+ 4761 39b3 F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 4761      00D9FFFF 
+ 4762 39bb F30F7F85 		movdqu	%xmm0, -3264(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 167
+
+
+ 4762      40F3FFFF 
+ 4763              	.LBB1142:
+ 4764              	.LBB1143:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 4765              		.loc 2 1565 0
+ 4766 39c3 F30F6F85 		movdqu	-3264(%rbp), %xmm0
+ 4766      40F3FFFF 
+ 4767 39cb 660F7F85 		movdqa	%xmm0, -10800(%rbp)
+ 4767      D0D5FFFF 
+ 4768 39d3 660F6F85 		movdqa	-10800(%rbp), %xmm0
+ 4768      D0D5FFFF 
+ 4769 39db F30F7F85 		movdqu	%xmm0, -3248(%rbp)
+ 4769      50F3FFFF 
+ 4770              	.LBB1144:
+ 4771              	.LBB1145:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4772              		.loc 2 1278 0
+ 4773 39e3 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 4773      00000000 
+ 4774 39eb F30F6F8D 		movdqu	-3248(%rbp), %xmm1
+ 4774      50F3FFFF 
+ 4775 39f3 F30F7F8D 		movdqu	%xmm1, -3216(%rbp)
+ 4775      70F3FFFF 
+ 4776 39fb F30F7F85 		movdqu	%xmm0, -3232(%rbp)
+ 4776      60F3FFFF 
+ 4777 3a03 F30F6F85 		movdqu	-3216(%rbp), %xmm0
+ 4777      70F3FFFF 
+ 4778 3a0b F30F7F85 		movdqu	%xmm0, -3184(%rbp)
+ 4778      90F3FFFF 
+ 4779 3a13 F30F6F85 		movdqu	-3232(%rbp), %xmm0
+ 4779      60F3FFFF 
+ 4780 3a1b F30F7F85 		movdqu	%xmm0, -3200(%rbp)
+ 4780      80F3FFFF 
+ 4781              	.LBB1146:
+ 4782              	.LBB1147:
+ 4783              	.LBB1148:
+ 4784              	.LBB1149:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4785              		.loc 3 529 0
+ 4786 3a23 F30F6F8D 		movdqu	-3200(%rbp), %xmm1
+ 4786      80F3FFFF 
+ 4787 3a2b F30F6F85 		movdqu	-3184(%rbp), %xmm0
+ 4787      90F3FFFF 
+ 4788 3a33 660F3800 		pshufb	%xmm1, %xmm0
+ 4788      C1
+ 4789              	.LBE1149:
+ 4790              	.LBE1148:
+ 4791              	.LBE1147:
+ 4792              	.LBE1146:
+ 4793              	.LBE1145:
+ 4794              	.LBE1144:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4795              		.loc 2 1567 0
+ 4796 3a38 660F7F85 		movdqa	%xmm0, -10800(%rbp)
+ 4796      D0D5FFFF 
+ 4797 3a40 660F6F85 		movdqa	-10800(%rbp), %xmm0
+ 4797      D0D5FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 168
+
+
+ 4798 3a48 660FEF85 		pxor	-3264(%rbp), %xmm0
+ 4798      40F3FFFF 
+ 4799 3a50 F30F7F85 		movdqu	%xmm0, -3264(%rbp)
+ 4799      40F3FFFF 
+ 4800 3a58 660F6F85 		movdqa	-10800(%rbp), %xmm0
+ 4800      D0D5FFFF 
+ 4801 3a60 F30F7F85 		movdqu	%xmm0, -3168(%rbp)
+ 4801      A0F3FFFF 
+ 4802              	.LBB1150:
+ 4803              	.LBB1151:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4804              		.loc 2 1278 0
+ 4805 3a68 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 4805      00000000 
+ 4806 3a70 F30F6F8D 		movdqu	-3168(%rbp), %xmm1
+ 4806      A0F3FFFF 
+ 4807 3a78 F30F7F8D 		movdqu	%xmm1, -3136(%rbp)
+ 4807      C0F3FFFF 
+ 4808 3a80 F30F7F85 		movdqu	%xmm0, -3152(%rbp)
+ 4808      B0F3FFFF 
+ 4809 3a88 F30F6F85 		movdqu	-3136(%rbp), %xmm0
+ 4809      C0F3FFFF 
+ 4810 3a90 F30F7F85 		movdqu	%xmm0, -3104(%rbp)
+ 4810      E0F3FFFF 
+ 4811 3a98 F30F6F85 		movdqu	-3152(%rbp), %xmm0
+ 4811      B0F3FFFF 
+ 4812 3aa0 F30F7F85 		movdqu	%xmm0, -3120(%rbp)
+ 4812      D0F3FFFF 
+ 4813              	.LBB1152:
+ 4814              	.LBB1153:
+ 4815              	.LBB1154:
+ 4816              	.LBB1155:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4817              		.loc 3 529 0
+ 4818 3aa8 F30F6F8D 		movdqu	-3120(%rbp), %xmm1
+ 4818      D0F3FFFF 
+ 4819 3ab0 F30F6F85 		movdqu	-3104(%rbp), %xmm0
+ 4819      E0F3FFFF 
+ 4820 3ab8 660F3800 		pshufb	%xmm1, %xmm0
+ 4820      C1
+ 4821              	.LBE1155:
+ 4822              	.LBE1154:
+ 4823              	.LBE1153:
+ 4824              	.LBE1152:
+ 4825              	.LBE1151:
+ 4826              	.LBE1150:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4827              		.loc 2 1568 0
+ 4828 3abd 660F7F85 		movdqa	%xmm0, -10800(%rbp)
+ 4828      D0D5FFFF 
+ 4829 3ac5 660F6F85 		movdqa	-10800(%rbp), %xmm0
+ 4829      D0D5FFFF 
+ 4830 3acd 660FEF85 		pxor	-3264(%rbp), %xmm0
+ 4830      40F3FFFF 
+ 4831 3ad5 F30F7F85 		movdqu	%xmm0, -3264(%rbp)
+ 4831      40F3FFFF 
+ 4832 3add 660F6F85 		movdqa	-10800(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 169
+
+
+ 4832      D0D5FFFF 
+ 4833 3ae5 F30F7F85 		movdqu	%xmm0, -3088(%rbp)
+ 4833      F0F3FFFF 
+ 4834              	.LBB1156:
+ 4835              	.LBB1157:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 4836              		.loc 2 1278 0
+ 4837 3aed 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 4837      00000000 
+ 4838 3af5 F30F6F8D 		movdqu	-3088(%rbp), %xmm1
+ 4838      F0F3FFFF 
+ 4839 3afd F30F7F8D 		movdqu	%xmm1, -3056(%rbp)
+ 4839      10F4FFFF 
+ 4840 3b05 F30F7F85 		movdqu	%xmm0, -3072(%rbp)
+ 4840      00F4FFFF 
+ 4841 3b0d F30F6F85 		movdqu	-3056(%rbp), %xmm0
+ 4841      10F4FFFF 
+ 4842 3b15 F30F7F85 		movdqu	%xmm0, -3024(%rbp)
+ 4842      30F4FFFF 
+ 4843 3b1d F30F6F85 		movdqu	-3072(%rbp), %xmm0
+ 4843      00F4FFFF 
+ 4844 3b25 F30F7F85 		movdqu	%xmm0, -3040(%rbp)
+ 4844      20F4FFFF 
+ 4845              	.LBB1158:
+ 4846              	.LBB1159:
+ 4847              	.LBB1160:
+ 4848              	.LBB1161:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4849              		.loc 3 529 0
+ 4850 3b2d F30F6F8D 		movdqu	-3040(%rbp), %xmm1
+ 4850      20F4FFFF 
+ 4851 3b35 F30F6F85 		movdqu	-3024(%rbp), %xmm0
+ 4851      30F4FFFF 
+ 4852 3b3d 660F3800 		pshufb	%xmm1, %xmm0
+ 4852      C1
+ 4853              	.LBE1161:
+ 4854              	.LBE1160:
+ 4855              	.LBE1159:
+ 4856              	.LBE1158:
+ 4857              	.LBE1157:
+ 4858              	.LBE1156:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 4859              		.loc 2 1569 0
+ 4860 3b42 660F7F85 		movdqa	%xmm0, -10800(%rbp)
+ 4860      D0D5FFFF 
+ 4861 3b4a 660F6F85 		movdqa	-10800(%rbp), %xmm0
+ 4861      D0D5FFFF 
+ 4862 3b52 660FEF85 		pxor	-3264(%rbp), %xmm0
+ 4862      40F3FFFF 
+ 4863 3b5a F30F7F85 		movdqu	%xmm0, -3264(%rbp)
+ 4863      40F3FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 4864              		.loc 2 1571 0
+ 4865 3b62 F30F6F85 		movdqu	-3264(%rbp), %xmm0
+ 4865      40F3FFFF 
+ 4866              	.LBE1143:
+ 4867              	.LBE1142:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 170
+
+
+ 4868              		.loc 2 1750 0
+ 4869 3b6a F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+ 4869      00D9FFFF 
+ 4870 3b72 F30F6F85 		movdqu	-9968(%rbp), %xmm0
+ 4870      10D9FFFF 
+ 4871 3b7a F30F6F8D 		movdqu	-9984(%rbp), %xmm1
+ 4871      00D9FFFF 
+ 4872 3b82 660FEFC1 		pxor	%xmm1, %xmm0
+ 4873 3b86 F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+ 4873      00D9FFFF 
+ 4874 3b8e 488B8578 		movq	-10632(%rbp), %rax
+ 4874      D6FFFF
+ 4875 3b95 4883C070 		addq	$112, %rax
+ 4876 3b99 F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 4876      00D9FFFF 
+ 4877 3ba1 F30F7F00 		movdqu	%xmm0, (%rax)
+ 4878 3ba5 F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 4878      00D9FFFF 
+ 4879 3bad F30F7F85 		movdqu	%xmm0, -2992(%rbp)
+ 4879      50F4FFFF 
+ 4880              	.LBB1162:
+ 4881              	.LBB1163:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 4882              		.loc 2 1681 0
+ 4883 3bb5 B8800000 		movl	$128, %eax
+ 4883      00
+ 4884 3bba 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 4884      00000000 
+ 4885 3bc2 F30F7F85 		movdqu	%xmm0, -2960(%rbp)
+ 4885      70F4FFFF 
+ 4886 3bca 89856CF4 		movl	%eax, -2964(%rbp)
+ 4886      FFFF
+ 4887 3bd0 F30F6F85 		movdqu	-2960(%rbp), %xmm0
+ 4887      70F4FFFF 
+ 4888 3bd8 F30F7F85 		movdqu	%xmm0, -2928(%rbp)
+ 4888      90F4FFFF 
+ 4889 3be0 8B856CF4 		movl	-2964(%rbp), %eax
+ 4889      FFFF
+ 4890 3be6 89858CF4 		movl	%eax, -2932(%rbp)
+ 4890      FFFF
+ 4891              	.LBB1164:
+ 4892              	.LBB1165:
+ 4893              	.LBB1166:
+ 4894              	.LBB1167:
+ 4895              		.loc 3 598 0
+ 4896 3bec 8B858CF4 		movl	-2932(%rbp), %eax
+ 4896      FFFF
+ 4897 3bf2 F30F6F85 		movdqu	-2928(%rbp), %xmm0
+ 4897      90F4FFFF 
+ 4898 3bfa 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 4898      C003
+ 4899              	.LBE1167:
+ 4900              	.LBE1166:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 4901              		.loc 2 519 0
+ 4902 3c00 F30F7F85 		movdqu	%xmm0, -2960(%rbp)
+ 4902      70F4FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 171
+
+
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 4903              		.loc 2 526 0
+ 4904 3c08 F30F6F85 		movdqu	-2960(%rbp), %xmm0
+ 4904      70F4FFFF 
+ 4905              	.LBE1165:
+ 4906              	.LBE1164:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 4907              		.loc 2 1681 0
+ 4908 3c10 660F7F85 		movdqa	%xmm0, -10768(%rbp)
+ 4908      F0D5FFFF 
+ 4909 3c18 F30F6F85 		movdqu	-2992(%rbp), %xmm0
+ 4909      50F4FFFF 
+ 4910 3c20 F30F7F85 		movdqu	%xmm0, -2912(%rbp)
+ 4910      A0F4FFFF 
+ 4911 3c28 F30F6F85 		movdqu	-2912(%rbp), %xmm0
+ 4911      A0F4FFFF 
+ 4912 3c30 F30F7F85 		movdqu	%xmm0, -2880(%rbp)
+ 4912      C0F4FFFF 
+ 4913 3c38 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 4913      000000
+ 4914 3c3f 488985B8 		movq	%rax, -2888(%rbp)
+ 4914      F4FFFF
+ 4915              	.LBB1168:
+ 4916              	.LBB1169:
+ 4917              	.LBB1170:
+ 4918              	.LBB1171:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 4919              		.loc 2 851 0
+ 4920 3c46 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 4920      00000000 
+ 4921 3c4e F30F7F85 		movdqu	%xmm0, -2848(%rbp)
+ 4921      E0F4FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 4922              		.loc 2 854 0
+ 4923 3c56 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 4923      00000000 
+ 4924 3c5e F30F6F8D 		movdqu	-2880(%rbp), %xmm1
+ 4924      C0F4FFFF 
+ 4925 3c66 F30F7F8D 		movdqu	%xmm1, -2768(%rbp)
+ 4925      30F5FFFF 
+ 4926 3c6e F30F7F85 		movdqu	%xmm0, -2784(%rbp)
+ 4926      20F5FFFF 
+ 4927              	.LBB1172:
+ 4928              	.LBB1173:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 4929              		.loc 2 206 0
+ 4930 3c76 F30F6F85 		movdqu	-2784(%rbp), %xmm0
+ 4930      20F5FFFF 
+ 4931 3c7e F30F6F8D 		movdqu	-2768(%rbp), %xmm1
+ 4931      30F5FFFF 
+ 4932 3c86 660FDBC1 		pand	%xmm1, %xmm0
+ 4933              	.LBE1173:
+ 4934              	.LBE1172:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 4935              		.loc 2 854 0
+ 4936 3c8a F30F7F85 		movdqu	%xmm0, -2800(%rbp)
+ 4936      10F5FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 172
+
+
+ 4937 3c92 F30F6F85 		movdqu	-2880(%rbp), %xmm0
+ 4937      C0F4FFFF 
+ 4938 3c9a F30F7F85 		movdqu	%xmm0, -2736(%rbp)
+ 4938      50F5FFFF 
+ 4939              	.LBB1174:
+ 4940              	.LBB1175:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 4941              		.loc 3 433 0
+ 4942 3ca2 F30F6F85 		movdqu	-2736(%rbp), %xmm0
+ 4942      50F5FFFF 
+ 4943 3caa 660F72D0 		psrld	$4, %xmm0
+ 4943      04
+ 4944              	.LBE1175:
+ 4945              	.LBE1174:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 4946              		.loc 2 857 0
+ 4947 3caf F30F7F85 		movdqu	%xmm0, -2816(%rbp)
+ 4947      00F5FFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 4948              		.loc 2 859 0
+ 4949 3cb7 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 4949      00000000 
+ 4950 3cbf F30F6F8D 		movdqu	-2816(%rbp), %xmm1
+ 4950      00F5FFFF 
+ 4951 3cc7 F30F7F8D 		movdqu	%xmm1, -2704(%rbp)
+ 4951      70F5FFFF 
+ 4952 3ccf F30F7F85 		movdqu	%xmm0, -2720(%rbp)
+ 4952      60F5FFFF 
+ 4953              	.LBB1176:
+ 4954              	.LBB1177:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 4955              		.loc 2 206 0
+ 4956 3cd7 F30F6F85 		movdqu	-2720(%rbp), %xmm0
+ 4956      60F5FFFF 
+ 4957 3cdf F30F6F8D 		movdqu	-2704(%rbp), %xmm1
+ 4957      70F5FFFF 
+ 4958 3ce7 660FDBC1 		pand	%xmm1, %xmm0
+ 4959              	.LBE1177:
+ 4960              	.LBE1176:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 4961              		.loc 2 859 0
+ 4962 3ceb F30F7F85 		movdqu	%xmm0, -2816(%rbp)
+ 4962      00F5FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 4963              		.loc 2 866 0
+ 4964 3cf3 C785DCF4 		movl	$0, -2852(%rbp)
+ 4964      FFFF0000 
+ 4964      0000
+ 4965 3cfd E9BE0100 		jmp	.L74
+ 4965      00
+ 4966              	.L75:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 4967              		.loc 2 868 0
+ 4968 3d02 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 4968      00000000 
+ 4969 3d0a F30F7F85 		movdqu	%xmm0, -2672(%rbp)
+ 4969      90F5FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 173
+
+
+ 4970 3d12 F30F6F85 		movdqu	-2816(%rbp), %xmm0
+ 4970      00F5FFFF 
+ 4971 3d1a F30F7F85 		movdqu	%xmm0, -2688(%rbp)
+ 4971      80F5FFFF 
+ 4972 3d22 F30F6F85 		movdqu	-2672(%rbp), %xmm0
+ 4972      90F5FFFF 
+ 4973 3d2a F30F7F85 		movdqu	%xmm0, -2640(%rbp)
+ 4973      B0F5FFFF 
+ 4974 3d32 F30F6F85 		movdqu	-2688(%rbp), %xmm0
+ 4974      80F5FFFF 
+ 4975 3d3a F30F7F85 		movdqu	%xmm0, -2656(%rbp)
+ 4975      A0F5FFFF 
+ 4976              	.LBB1178:
+ 4977              	.LBB1179:
+ 4978              	.LBB1180:
+ 4979              	.LBB1181:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 4980              		.loc 3 529 0
+ 4981 3d42 F30F6F8D 		movdqu	-2656(%rbp), %xmm1
+ 4981      A0F5FFFF 
+ 4982 3d4a F30F6F85 		movdqu	-2640(%rbp), %xmm0
+ 4982      B0F5FFFF 
+ 4983 3d52 660F3800 		pshufb	%xmm1, %xmm0
+ 4983      C1
+ 4984              	.LBE1181:
+ 4985              	.LBE1180:
+ 4986              	.LBE1179:
+ 4987              	.LBE1178:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 4988              		.loc 2 868 0
+ 4989 3d57 F30F7F85 		movdqu	%xmm0, -2832(%rbp)
+ 4989      F0F4FFFF 
+ 4990 3d5f F30F6F85 		movdqu	-2800(%rbp), %xmm0
+ 4990      10F5FFFF 
+ 4991 3d67 F30F7F85 		movdqu	%xmm0, -2608(%rbp)
+ 4991      D0F5FFFF 
+ 4992 3d6f F30F6F85 		movdqu	-2832(%rbp), %xmm0
+ 4992      F0F4FFFF 
+ 4993 3d77 F30F7F85 		movdqu	%xmm0, -2624(%rbp)
+ 4993      C0F5FFFF 
+ 4994              	.LBB1182:
+ 4995              	.LBB1183:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 4996              		.loc 2 234 0
+ 4997 3d7f F30F6F85 		movdqu	-2624(%rbp), %xmm0
+ 4997      C0F5FFFF 
+ 4998 3d87 F30F6F8D 		movdqu	-2608(%rbp), %xmm1
+ 4998      D0F5FFFF 
+ 4999 3d8f 660FEBC1 		por	%xmm1, %xmm0
+ 5000              	.LBE1183:
+ 5001              	.LBE1182:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 5002              		.loc 2 870 0
+ 5003 3d93 F30F7F85 		movdqu	%xmm0, -2832(%rbp)
+ 5003      F0F4FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 5004              		.loc 2 872 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 174
+
+
+ 5005 3d9b 8B85DCF4 		mov	-2852(%rbp), %eax
+ 5005      FFFF
+ 5006 3da1 48C1E004 		salq	$4, %rax
+ 5007 3da5 480385B8 		addq	-2888(%rbp), %rax
+ 5007      F4FFFF
+ 5008 3dac 660F6F00 		movdqa	(%rax), %xmm0
+ 5009 3db0 F30F7F85 		movdqu	%xmm0, -2576(%rbp)
+ 5009      F0F5FFFF 
+ 5010 3db8 F30F6F85 		movdqu	-2832(%rbp), %xmm0
+ 5010      F0F4FFFF 
+ 5011 3dc0 F30F7F85 		movdqu	%xmm0, -2592(%rbp)
+ 5011      E0F5FFFF 
+ 5012 3dc8 F30F6F85 		movdqu	-2576(%rbp), %xmm0
+ 5012      F0F5FFFF 
+ 5013 3dd0 F30F7F85 		movdqu	%xmm0, -2544(%rbp)
+ 5013      10F6FFFF 
+ 5014 3dd8 F30F6F85 		movdqu	-2592(%rbp), %xmm0
+ 5014      E0F5FFFF 
+ 5015 3de0 F30F7F85 		movdqu	%xmm0, -2560(%rbp)
+ 5015      00F6FFFF 
+ 5016              	.LBB1184:
+ 5017              	.LBB1185:
+ 5018              	.LBB1186:
+ 5019              	.LBB1187:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5020              		.loc 3 529 0
+ 5021 3de8 F30F6F8D 		movdqu	-2560(%rbp), %xmm1
+ 5021      00F6FFFF 
+ 5022 3df0 F30F6F85 		movdqu	-2544(%rbp), %xmm0
+ 5022      10F6FFFF 
+ 5023 3df8 660F3800 		pshufb	%xmm1, %xmm0
+ 5023      C1
+ 5024              	.LBE1187:
+ 5025              	.LBE1186:
+ 5026              	.LBE1185:
+ 5027              	.LBE1184:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 5028              		.loc 2 872 0
+ 5029 3dfd F30F7F85 		movdqu	%xmm0, -2832(%rbp)
+ 5029      F0F4FFFF 
+ 5030 3e05 F30F6F85 		movdqu	-2848(%rbp), %xmm0
+ 5030      E0F4FFFF 
+ 5031 3e0d F30F7F85 		movdqu	%xmm0, -2512(%rbp)
+ 5031      30F6FFFF 
+ 5032 3e15 F30F6F85 		movdqu	-2832(%rbp), %xmm0
+ 5032      F0F4FFFF 
+ 5033 3e1d F30F7F85 		movdqu	%xmm0, -2528(%rbp)
+ 5033      20F6FFFF 
+ 5034              	.LBB1188:
+ 5035              	.LBB1189:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 5036              		.loc 2 234 0
+ 5037 3e25 F30F6F85 		movdqu	-2528(%rbp), %xmm0
+ 5037      20F6FFFF 
+ 5038 3e2d F30F6F8D 		movdqu	-2512(%rbp), %xmm1
+ 5038      30F6FFFF 
+ 5039 3e35 660FEBC1 		por	%xmm1, %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 175
+
+
+ 5040              	.LBE1189:
+ 5041              	.LBE1188:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 5042              		.loc 2 874 0
+ 5043 3e39 F30F7F85 		movdqu	%xmm0, -2848(%rbp)
+ 5043      E0F4FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 5044              		.loc 2 876 0
+ 5045 3e41 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 5045      00000000 
+ 5046 3e49 F30F6F8D 		movdqu	-2816(%rbp), %xmm1
+ 5046      00F5FFFF 
+ 5047 3e51 F30F7F8D 		movdqu	%xmm1, -2480(%rbp)
+ 5047      50F6FFFF 
+ 5048 3e59 F30F7F85 		movdqu	%xmm0, -2496(%rbp)
+ 5048      40F6FFFF 
+ 5049              	.LBB1190:
+ 5050              	.LBB1191:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 5051              		.loc 2 290 0
+ 5052 3e61 F30F6F8D 		movdqu	-2496(%rbp), %xmm1
+ 5052      40F6FFFF 
+ 5053 3e69 F30F6F85 		movdqu	-2480(%rbp), %xmm0
+ 5053      50F6FFFF 
+ 5054 3e71 660FF8C1 		psubb	%xmm1, %xmm0
+ 5055              	.LBE1191:
+ 5056              	.LBE1190:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 5057              		.loc 2 876 0
+ 5058 3e75 F30F7F85 		movdqu	%xmm0, -2816(%rbp)
+ 5058      00F5FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 5059              		.loc 2 878 0
+ 5060 3e7d 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 5060      00000000 
+ 5061 3e85 F30F6F8D 		movdqu	-2816(%rbp), %xmm1
+ 5061      00F5FFFF 
+ 5062 3e8d F30F7F8D 		movdqu	%xmm1, -2448(%rbp)
+ 5062      70F6FFFF 
+ 5063 3e95 F30F7F85 		movdqu	%xmm0, -2464(%rbp)
+ 5063      60F6FFFF 
+ 5064              	.LBB1192:
+ 5065              	.LBB1193:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 5066              		.loc 2 206 0
+ 5067 3e9d F30F6F85 		movdqu	-2464(%rbp), %xmm0
+ 5067      60F6FFFF 
+ 5068 3ea5 F30F6F8D 		movdqu	-2448(%rbp), %xmm1
+ 5068      70F6FFFF 
+ 5069 3ead 660FDBC1 		pand	%xmm1, %xmm0
+ 5070              	.LBE1193:
+ 5071              	.LBE1192:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 5072              		.loc 2 878 0
+ 5073 3eb1 F30F7F85 		movdqu	%xmm0, -2816(%rbp)
+ 5073      00F5FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 176
+
+
+ 5074              		.loc 2 866 0
+ 5075 3eb9 8385DCF4 		addl	$1, -2852(%rbp)
+ 5075      FFFF01
+ 5076              	.L74:
+ 5077 3ec0 83BDDCF4 		cmpl	$15, -2852(%rbp)
+ 5077      FFFF0F
+ 5078 3ec7 0F8635FE 		jbe	.L75
+ 5078      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 5079              		.loc 2 882 0
+ 5080 3ecd F30F6F85 		movdqu	-2848(%rbp), %xmm0
+ 5080      E0F4FFFF 
+ 5081              	.LBE1171:
+ 5082              	.LBE1170:
+ 5083              	.LBE1169:
+ 5084              	.LBE1168:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 5085              		.loc 2 1682 0
+ 5086 3ed5 660F7F85 		movdqa	%xmm0, -10784(%rbp)
+ 5086      E0D5FFFF 
+ 5087              	.LBB1194:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 5088              		.loc 2 1683 0
+ 5089 3edd 660F6F85 		movdqa	-10784(%rbp), %xmm0
+ 5089      E0D5FFFF 
+ 5090 3ee5 F30F7F85 		movdqu	%xmm0, -10128(%rbp)
+ 5090      70D8FFFF 
+ 5091 3eed E8000000 		call	KDbgWriterGet at PLT
+ 5091      00
+ 5092 3ef2 4885C0   		testq	%rax, %rax
+ 5093 3ef5 7479     		je	.L77
+ 5094 3ef7 BF010000 		movl	$1, %edi
+ 5094      00
+ 5095 3efc E8000000 		call	KDbgCondToFlag at PLT
+ 5095      00
+ 5096 3f01 4889C6   		movq	%rax, %rsi
+ 5097 3f04 BF100000 		movl	$16, %edi
+ 5097      00
+ 5098 3f09 E8000000 		call	KDbgTestModConds at PLT
+ 5098      00
+ 5099 3f0e 84C0     		testb	%al, %al
+ 5100 3f10 745E     		je	.L77
+ 5101 3f12 8B857CD8 		movl	-10116(%rbp), %eax
+ 5101      FFFF
+ 5102 3f18 89C7     		movl	%eax, %edi
+ 5103 3f1a E8E1C0FF 		call	bswap_32
+ 5103      FF
+ 5104 3f1f 4189C5   		movl	%eax, %r13d
+ 5105 3f22 8B8578D8 		movl	-10120(%rbp), %eax
+ 5105      FFFF
+ 5106 3f28 89C7     		movl	%eax, %edi
+ 5107 3f2a E8D1C0FF 		call	bswap_32
+ 5107      FF
+ 5108 3f2f 4189C4   		movl	%eax, %r12d
+ 5109 3f32 8B8574D8 		movl	-10124(%rbp), %eax
+ 5109      FFFF
+ 5110 3f38 89C7     		movl	%eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 177
+
+
+ 5111 3f3a E8C1C0FF 		call	bswap_32
+ 5111      FF
+ 5112 3f3f 89C3     		movl	%eax, %ebx
+ 5113 3f41 8B8570D8 		movl	-10128(%rbp), %eax
+ 5113      FFFF
+ 5114 3f47 89C7     		movl	%eax, %edi
+ 5115 3f49 E8B2C0FF 		call	bswap_32
+ 5115      FF
+ 5116 3f4e 4589E9   		movl	%r13d, %r9d
+ 5117 3f51 4589E0   		movl	%r12d, %r8d
+ 5118 3f54 89D9     		movl	%ebx, %ecx
+ 5119 3f56 89C2     		movl	%eax, %edx
+ 5120 3f58 488D3500 		leaq	.LC0(%rip), %rsi
+ 5120      000000
+ 5121 3f5f 488D3D00 		leaq	.LC1(%rip), %rdi
+ 5121      000000
+ 5122 3f66 B8000000 		movl	$0, %eax
+ 5122      00
+ 5123 3f6b E8000000 		call	KDbgMsg at PLT
+ 5123      00
+ 5124              	.L77:
+ 5125 3f70 660F6F85 		movdqa	-10784(%rbp), %xmm0
+ 5125      E0D5FFFF 
+ 5126 3f78 F30F7F85 		movdqu	%xmm0, -2432(%rbp)
+ 5126      80F6FFFF 
+ 5127              	.LBE1194:
+ 5128              	.LBB1195:
+ 5129              	.LBB1196:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 5130              		.loc 2 667 0
+ 5131 3f80 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 5131      00000000 
+ 5132 3f88 F30F6F8D 		movdqu	-2432(%rbp), %xmm1
+ 5132      80F6FFFF 
+ 5133 3f90 F30F7F8D 		movdqu	%xmm1, -2400(%rbp)
+ 5133      A0F6FFFF 
+ 5134 3f98 F30F7F85 		movdqu	%xmm0, -2416(%rbp)
+ 5134      90F6FFFF 
+ 5135 3fa0 F30F6F85 		movdqu	-2400(%rbp), %xmm0
+ 5135      A0F6FFFF 
+ 5136 3fa8 F30F7F85 		movdqu	%xmm0, -2368(%rbp)
+ 5136      C0F6FFFF 
+ 5137 3fb0 F30F6F85 		movdqu	-2416(%rbp), %xmm0
+ 5137      90F6FFFF 
+ 5138 3fb8 F30F7F85 		movdqu	%xmm0, -2384(%rbp)
+ 5138      B0F6FFFF 
+ 5139              	.LBB1197:
+ 5140              	.LBB1198:
+ 5141              	.LBB1199:
+ 5142              	.LBB1200:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5143              		.loc 3 529 0
+ 5144 3fc0 F30F6F8D 		movdqu	-2384(%rbp), %xmm1
+ 5144      B0F6FFFF 
+ 5145 3fc8 F30F6F85 		movdqu	-2368(%rbp), %xmm0
+ 5145      C0F6FFFF 
+ 5146 3fd0 660F3800 		pshufb	%xmm1, %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 178
+
+
+ 5146      C1
+ 5147              	.LBE1200:
+ 5148              	.LBE1199:
+ 5149              	.LBE1198:
+ 5150              	.LBE1197:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 5151              		.loc 2 667 0
+ 5152 3fd5 F30F7F85 		movdqu	%xmm0, -2432(%rbp)
+ 5152      80F6FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 5153              		.loc 2 668 0
+ 5154 3fdd F30F6F85 		movdqu	-2432(%rbp), %xmm0
+ 5154      80F6FFFF 
+ 5155              	.LBE1196:
+ 5156              	.LBE1195:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 5157              		.loc 2 1684 0
+ 5158 3fe5 660F7F85 		movdqa	%xmm0, -10784(%rbp)
+ 5158      E0D5FFFF 
+ 5159              	.LBB1201:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 5160              		.loc 2 1685 0
+ 5161 3fed 660F6F85 		movdqa	-10784(%rbp), %xmm0
+ 5161      E0D5FFFF 
+ 5162 3ff5 F30F7F85 		movdqu	%xmm0, -10144(%rbp)
+ 5162      60D8FFFF 
+ 5163 3ffd E8000000 		call	KDbgWriterGet at PLT
+ 5163      00
+ 5164 4002 4885C0   		testq	%rax, %rax
+ 5165 4005 7479     		je	.L79
+ 5166 4007 BF010000 		movl	$1, %edi
+ 5166      00
+ 5167 400c E8000000 		call	KDbgCondToFlag at PLT
+ 5167      00
+ 5168 4011 4889C6   		movq	%rax, %rsi
+ 5169 4014 BF100000 		movl	$16, %edi
+ 5169      00
+ 5170 4019 E8000000 		call	KDbgTestModConds at PLT
+ 5170      00
+ 5171 401e 84C0     		testb	%al, %al
+ 5172 4020 745E     		je	.L79
+ 5173 4022 8B856CD8 		movl	-10132(%rbp), %eax
+ 5173      FFFF
+ 5174 4028 89C7     		movl	%eax, %edi
+ 5175 402a E8D1BFFF 		call	bswap_32
+ 5175      FF
+ 5176 402f 4189C5   		movl	%eax, %r13d
+ 5177 4032 8B8568D8 		movl	-10136(%rbp), %eax
+ 5177      FFFF
+ 5178 4038 89C7     		movl	%eax, %edi
+ 5179 403a E8C1BFFF 		call	bswap_32
+ 5179      FF
+ 5180 403f 4189C4   		movl	%eax, %r12d
+ 5181 4042 8B8564D8 		movl	-10140(%rbp), %eax
+ 5181      FFFF
+ 5182 4048 89C7     		movl	%eax, %edi
+ 5183 404a E8B1BFFF 		call	bswap_32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 179
+
+
+ 5183      FF
+ 5184 404f 89C3     		movl	%eax, %ebx
+ 5185 4051 8B8560D8 		movl	-10144(%rbp), %eax
+ 5185      FFFF
+ 5186 4057 89C7     		movl	%eax, %edi
+ 5187 4059 E8A2BFFF 		call	bswap_32
+ 5187      FF
+ 5188 405e 4589E9   		movl	%r13d, %r9d
+ 5189 4061 4589E0   		movl	%r12d, %r8d
+ 5190 4064 89D9     		movl	%ebx, %ecx
+ 5191 4066 89C2     		movl	%eax, %edx
+ 5192 4068 488D3500 		leaq	.LC2(%rip), %rsi
+ 5192      000000
+ 5193 406f 488D3D00 		leaq	.LC1(%rip), %rdi
+ 5193      000000
+ 5194 4076 B8000000 		movl	$0, %eax
+ 5194      00
+ 5195 407b E8000000 		call	KDbgMsg at PLT
+ 5195      00
+ 5196              	.L79:
+ 5197 4080 660F6F85 		movdqa	-10784(%rbp), %xmm0
+ 5197      E0D5FFFF 
+ 5198 4088 F30F7F85 		movdqu	%xmm0, -2336(%rbp)
+ 5198      E0F6FFFF 
+ 5199 4090 660F6F85 		movdqa	-10768(%rbp), %xmm0
+ 5199      F0D5FFFF 
+ 5200 4098 F30F7F85 		movdqu	%xmm0, -2352(%rbp)
+ 5200      D0F6FFFF 
+ 5201              	.LBE1201:
+ 5202              	.LBB1202:
+ 5203              	.LBB1203:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 5204              		.loc 2 178 0
+ 5205 40a0 F30F6F85 		movdqu	-2352(%rbp), %xmm0
+ 5205      D0F6FFFF 
+ 5206 40a8 F30F6F8D 		movdqu	-2336(%rbp), %xmm1
+ 5206      E0F6FFFF 
+ 5207 40b0 660FEFC1 		pxor	%xmm1, %xmm0
+ 5208              	.LBE1203:
+ 5209              	.LBE1202:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 5210              		.loc 2 1686 0
+ 5211 40b4 660F7F85 		movdqa	%xmm0, -10784(%rbp)
+ 5211      E0D5FFFF 
+ 5212              	.LBB1204:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 5213              		.loc 2 1687 0
+ 5214 40bc 660F6F85 		movdqa	-10784(%rbp), %xmm0
+ 5214      E0D5FFFF 
+ 5215 40c4 F30F7F85 		movdqu	%xmm0, -10160(%rbp)
+ 5215      50D8FFFF 
+ 5216 40cc E8000000 		call	KDbgWriterGet at PLT
+ 5216      00
+ 5217 40d1 4885C0   		testq	%rax, %rax
+ 5218 40d4 7479     		je	.L81
+ 5219 40d6 BF010000 		movl	$1, %edi
+ 5219      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 180
+
+
+ 5220 40db E8000000 		call	KDbgCondToFlag at PLT
+ 5220      00
+ 5221 40e0 4889C6   		movq	%rax, %rsi
+ 5222 40e3 BF100000 		movl	$16, %edi
+ 5222      00
+ 5223 40e8 E8000000 		call	KDbgTestModConds at PLT
+ 5223      00
+ 5224 40ed 84C0     		testb	%al, %al
+ 5225 40ef 745E     		je	.L81
+ 5226 40f1 8B855CD8 		movl	-10148(%rbp), %eax
+ 5226      FFFF
+ 5227 40f7 89C7     		movl	%eax, %edi
+ 5228 40f9 E802BFFF 		call	bswap_32
+ 5228      FF
+ 5229 40fe 4189C5   		movl	%eax, %r13d
+ 5230 4101 8B8558D8 		movl	-10152(%rbp), %eax
+ 5230      FFFF
+ 5231 4107 89C7     		movl	%eax, %edi
+ 5232 4109 E8F2BEFF 		call	bswap_32
+ 5232      FF
+ 5233 410e 4189C4   		movl	%eax, %r12d
+ 5234 4111 8B8554D8 		movl	-10156(%rbp), %eax
+ 5234      FFFF
+ 5235 4117 89C7     		movl	%eax, %edi
+ 5236 4119 E8E2BEFF 		call	bswap_32
+ 5236      FF
+ 5237 411e 89C3     		movl	%eax, %ebx
+ 5238 4120 8B8550D8 		movl	-10160(%rbp), %eax
+ 5238      FFFF
+ 5239 4126 89C7     		movl	%eax, %edi
+ 5240 4128 E8D3BEFF 		call	bswap_32
+ 5240      FF
+ 5241 412d 4589E9   		movl	%r13d, %r9d
+ 5242 4130 4589E0   		movl	%r12d, %r8d
+ 5243 4133 89D9     		movl	%ebx, %ecx
+ 5244 4135 89C2     		movl	%eax, %edx
+ 5245 4137 488D3500 		leaq	.LC3(%rip), %rsi
+ 5245      000000
+ 5246 413e 488D3D00 		leaq	.LC1(%rip), %rdi
+ 5246      000000
+ 5247 4145 B8000000 		movl	$0, %eax
+ 5247      00
+ 5248 414a E8000000 		call	KDbgMsg at PLT
+ 5248      00
+ 5249              	.L81:
+ 5250 414f 660F6F85 		movdqa	-10784(%rbp), %xmm0
+ 5250      E0D5FFFF 
+ 5251 4157 F30F7F85 		movdqu	%xmm0, -2320(%rbp)
+ 5251      F0F6FFFF 
+ 5252 415f F30F6F85 		movdqu	-2320(%rbp), %xmm0
+ 5252      F0F6FFFF 
+ 5253 4167 F30F7F85 		movdqu	%xmm0, -2288(%rbp)
+ 5253      10F7FFFF 
+ 5254              	.LBE1204:
+ 5255              	.LBB1205:
+ 5256              	.LBB1206:
+ 5257              	.LBB1207:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 181
+
+
+ 5258              	.LBB1208:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 5259              		.loc 3 450 0
+ 5260 416f F30F6F85 		movdqu	-2288(%rbp), %xmm0
+ 5260      10F7FFFF 
+ 5261 4177 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 5261      FF
+ 5262              	.LBE1208:
+ 5263              	.LBE1207:
+ 5264              	.LBE1206:
+ 5265              	.LBE1205:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 5266              		.loc 2 1688 0
+ 5267 417c 660F7F85 		movdqa	%xmm0, -10784(%rbp)
+ 5267      E0D5FFFF 
+ 5268              	.LBB1209:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 5269              		.loc 2 1689 0
+ 5270 4184 660F6F85 		movdqa	-10784(%rbp), %xmm0
+ 5270      E0D5FFFF 
+ 5271 418c F30F7F85 		movdqu	%xmm0, -10176(%rbp)
+ 5271      40D8FFFF 
+ 5272 4194 E8000000 		call	KDbgWriterGet at PLT
+ 5272      00
+ 5273 4199 4885C0   		testq	%rax, %rax
+ 5274 419c 7479     		je	.L83
+ 5275 419e BF010000 		movl	$1, %edi
+ 5275      00
+ 5276 41a3 E8000000 		call	KDbgCondToFlag at PLT
+ 5276      00
+ 5277 41a8 4889C6   		movq	%rax, %rsi
+ 5278 41ab BF100000 		movl	$16, %edi
+ 5278      00
+ 5279 41b0 E8000000 		call	KDbgTestModConds at PLT
+ 5279      00
+ 5280 41b5 84C0     		testb	%al, %al
+ 5281 41b7 745E     		je	.L83
+ 5282 41b9 8B854CD8 		movl	-10164(%rbp), %eax
+ 5282      FFFF
+ 5283 41bf 89C7     		movl	%eax, %edi
+ 5284 41c1 E83ABEFF 		call	bswap_32
+ 5284      FF
+ 5285 41c6 4189C5   		movl	%eax, %r13d
+ 5286 41c9 8B8548D8 		movl	-10168(%rbp), %eax
+ 5286      FFFF
+ 5287 41cf 89C7     		movl	%eax, %edi
+ 5288 41d1 E82ABEFF 		call	bswap_32
+ 5288      FF
+ 5289 41d6 4189C4   		movl	%eax, %r12d
+ 5290 41d9 8B8544D8 		movl	-10172(%rbp), %eax
+ 5290      FFFF
+ 5291 41df 89C7     		movl	%eax, %edi
+ 5292 41e1 E81ABEFF 		call	bswap_32
+ 5292      FF
+ 5293 41e6 89C3     		movl	%eax, %ebx
+ 5294 41e8 8B8540D8 		movl	-10176(%rbp), %eax
+ 5294      FFFF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 182
+
+
+ 5295 41ee 89C7     		movl	%eax, %edi
+ 5296 41f0 E80BBEFF 		call	bswap_32
+ 5296      FF
+ 5297 41f5 4589E9   		movl	%r13d, %r9d
+ 5298 41f8 4589E0   		movl	%r12d, %r8d
+ 5299 41fb 89D9     		movl	%ebx, %ecx
+ 5300 41fd 89C2     		movl	%eax, %edx
+ 5301 41ff 488D3500 		leaq	.LC4(%rip), %rsi
+ 5301      000000
+ 5302 4206 488D3D00 		leaq	.LC1(%rip), %rdi
+ 5302      000000
+ 5303 420d B8000000 		movl	$0, %eax
+ 5303      00
+ 5304 4212 E8000000 		call	KDbgMsg at PLT
+ 5304      00
+ 5305              	.L83:
+ 5306              	.LBE1209:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 5307              		.loc 2 1690 0
+ 5308 4217 660F6F85 		movdqa	-10784(%rbp), %xmm0
+ 5308      E0D5FFFF 
+ 5309              	.LBE1163:
+ 5310              	.LBE1162:
+1751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x80,8);
+ 5311              		.loc 2 1751 0
+ 5312 421f F30F7F85 		movdqu	%xmm0, -9968(%rbp)
+ 5312      10D9FFFF 
+ 5313 4227 F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 5313      00D9FFFF 
+ 5314 422f F30F7F85 		movdqu	%xmm0, -2272(%rbp)
+ 5314      20F7FFFF 
+ 5315              	.LBB1210:
+ 5316              	.LBB1211:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 5317              		.loc 2 1565 0
+ 5318 4237 F30F6F85 		movdqu	-2272(%rbp), %xmm0
+ 5318      20F7FFFF 
+ 5319 423f 660F7F85 		movdqa	%xmm0, -10752(%rbp)
+ 5319      00D6FFFF 
+ 5320 4247 660F6F85 		movdqa	-10752(%rbp), %xmm0
+ 5320      00D6FFFF 
+ 5321 424f F30F7F85 		movdqu	%xmm0, -2256(%rbp)
+ 5321      30F7FFFF 
+ 5322              	.LBB1212:
+ 5323              	.LBB1213:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5324              		.loc 2 1278 0
+ 5325 4257 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 5325      00000000 
+ 5326 425f F30F6F8D 		movdqu	-2256(%rbp), %xmm1
+ 5326      30F7FFFF 
+ 5327 4267 F30F7F8D 		movdqu	%xmm1, -2224(%rbp)
+ 5327      50F7FFFF 
+ 5328 426f F30F7F85 		movdqu	%xmm0, -2240(%rbp)
+ 5328      40F7FFFF 
+ 5329 4277 F30F6F85 		movdqu	-2224(%rbp), %xmm0
+ 5329      50F7FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 183
+
+
+ 5330 427f F30F7F85 		movdqu	%xmm0, -2192(%rbp)
+ 5330      70F7FFFF 
+ 5331 4287 F30F6F85 		movdqu	-2240(%rbp), %xmm0
+ 5331      40F7FFFF 
+ 5332 428f F30F7F85 		movdqu	%xmm0, -2208(%rbp)
+ 5332      60F7FFFF 
+ 5333              	.LBB1214:
+ 5334              	.LBB1215:
+ 5335              	.LBB1216:
+ 5336              	.LBB1217:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5337              		.loc 3 529 0
+ 5338 4297 F30F6F8D 		movdqu	-2208(%rbp), %xmm1
+ 5338      60F7FFFF 
+ 5339 429f F30F6F85 		movdqu	-2192(%rbp), %xmm0
+ 5339      70F7FFFF 
+ 5340 42a7 660F3800 		pshufb	%xmm1, %xmm0
+ 5340      C1
+ 5341              	.LBE1217:
+ 5342              	.LBE1216:
+ 5343              	.LBE1215:
+ 5344              	.LBE1214:
+ 5345              	.LBE1213:
+ 5346              	.LBE1212:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5347              		.loc 2 1567 0
+ 5348 42ac 660F7F85 		movdqa	%xmm0, -10752(%rbp)
+ 5348      00D6FFFF 
+ 5349 42b4 660F6F85 		movdqa	-10752(%rbp), %xmm0
+ 5349      00D6FFFF 
+ 5350 42bc 660FEF85 		pxor	-2272(%rbp), %xmm0
+ 5350      20F7FFFF 
+ 5351 42c4 F30F7F85 		movdqu	%xmm0, -2272(%rbp)
+ 5351      20F7FFFF 
+ 5352 42cc 660F6F85 		movdqa	-10752(%rbp), %xmm0
+ 5352      00D6FFFF 
+ 5353 42d4 F30F7F85 		movdqu	%xmm0, -2176(%rbp)
+ 5353      80F7FFFF 
+ 5354              	.LBB1218:
+ 5355              	.LBB1219:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5356              		.loc 2 1278 0
+ 5357 42dc 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 5357      00000000 
+ 5358 42e4 F30F6F8D 		movdqu	-2176(%rbp), %xmm1
+ 5358      80F7FFFF 
+ 5359 42ec F30F7F8D 		movdqu	%xmm1, -2144(%rbp)
+ 5359      A0F7FFFF 
+ 5360 42f4 F30F7F85 		movdqu	%xmm0, -2160(%rbp)
+ 5360      90F7FFFF 
+ 5361 42fc F30F6F85 		movdqu	-2144(%rbp), %xmm0
+ 5361      A0F7FFFF 
+ 5362 4304 F30F7F85 		movdqu	%xmm0, -2112(%rbp)
+ 5362      C0F7FFFF 
+ 5363 430c F30F6F85 		movdqu	-2160(%rbp), %xmm0
+ 5363      90F7FFFF 
+ 5364 4314 F30F7F85 		movdqu	%xmm0, -2128(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 184
+
+
+ 5364      B0F7FFFF 
+ 5365              	.LBB1220:
+ 5366              	.LBB1221:
+ 5367              	.LBB1222:
+ 5368              	.LBB1223:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5369              		.loc 3 529 0
+ 5370 431c F30F6F8D 		movdqu	-2128(%rbp), %xmm1
+ 5370      B0F7FFFF 
+ 5371 4324 F30F6F85 		movdqu	-2112(%rbp), %xmm0
+ 5371      C0F7FFFF 
+ 5372 432c 660F3800 		pshufb	%xmm1, %xmm0
+ 5372      C1
+ 5373              	.LBE1223:
+ 5374              	.LBE1222:
+ 5375              	.LBE1221:
+ 5376              	.LBE1220:
+ 5377              	.LBE1219:
+ 5378              	.LBE1218:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5379              		.loc 2 1568 0
+ 5380 4331 660F7F85 		movdqa	%xmm0, -10752(%rbp)
+ 5380      00D6FFFF 
+ 5381 4339 660F6F85 		movdqa	-10752(%rbp), %xmm0
+ 5381      00D6FFFF 
+ 5382 4341 660FEF85 		pxor	-2272(%rbp), %xmm0
+ 5382      20F7FFFF 
+ 5383 4349 F30F7F85 		movdqu	%xmm0, -2272(%rbp)
+ 5383      20F7FFFF 
+ 5384 4351 660F6F85 		movdqa	-10752(%rbp), %xmm0
+ 5384      00D6FFFF 
+ 5385 4359 F30F7F85 		movdqu	%xmm0, -2096(%rbp)
+ 5385      D0F7FFFF 
+ 5386              	.LBB1224:
+ 5387              	.LBB1225:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5388              		.loc 2 1278 0
+ 5389 4361 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 5389      00000000 
+ 5390 4369 F30F6F8D 		movdqu	-2096(%rbp), %xmm1
+ 5390      D0F7FFFF 
+ 5391 4371 F30F7F8D 		movdqu	%xmm1, -2064(%rbp)
+ 5391      F0F7FFFF 
+ 5392 4379 F30F7F85 		movdqu	%xmm0, -2080(%rbp)
+ 5392      E0F7FFFF 
+ 5393 4381 F30F6F85 		movdqu	-2064(%rbp), %xmm0
+ 5393      F0F7FFFF 
+ 5394 4389 F30F7F85 		movdqu	%xmm0, -2032(%rbp)
+ 5394      10F8FFFF 
+ 5395 4391 F30F6F85 		movdqu	-2080(%rbp), %xmm0
+ 5395      E0F7FFFF 
+ 5396 4399 F30F7F85 		movdqu	%xmm0, -2048(%rbp)
+ 5396      00F8FFFF 
+ 5397              	.LBB1226:
+ 5398              	.LBB1227:
+ 5399              	.LBB1228:
+ 5400              	.LBB1229:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 185
+
+
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5401              		.loc 3 529 0
+ 5402 43a1 F30F6F8D 		movdqu	-2048(%rbp), %xmm1
+ 5402      00F8FFFF 
+ 5403 43a9 F30F6F85 		movdqu	-2032(%rbp), %xmm0
+ 5403      10F8FFFF 
+ 5404 43b1 660F3800 		pshufb	%xmm1, %xmm0
+ 5404      C1
+ 5405              	.LBE1229:
+ 5406              	.LBE1228:
+ 5407              	.LBE1227:
+ 5408              	.LBE1226:
+ 5409              	.LBE1225:
+ 5410              	.LBE1224:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5411              		.loc 2 1569 0
+ 5412 43b6 660F7F85 		movdqa	%xmm0, -10752(%rbp)
+ 5412      00D6FFFF 
+ 5413 43be 660F6F85 		movdqa	-10752(%rbp), %xmm0
+ 5413      00D6FFFF 
+ 5414 43c6 660FEF85 		pxor	-2272(%rbp), %xmm0
+ 5414      20F7FFFF 
+ 5415 43ce F30F7F85 		movdqu	%xmm0, -2272(%rbp)
+ 5415      20F7FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 5416              		.loc 2 1571 0
+ 5417 43d6 F30F6F85 		movdqu	-2272(%rbp), %xmm0
+ 5417      20F7FFFF 
+ 5418              	.LBE1211:
+ 5419              	.LBE1210:
+ 5420              		.loc 2 1751 0
+ 5421 43de F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+ 5421      00D9FFFF 
+ 5422 43e6 F30F6F85 		movdqu	-9968(%rbp), %xmm0
+ 5422      10D9FFFF 
+ 5423 43ee F30F6F8D 		movdqu	-9984(%rbp), %xmm1
+ 5423      00D9FFFF 
+ 5424 43f6 660FEFC1 		pxor	%xmm1, %xmm0
+ 5425 43fa F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+ 5425      00D9FFFF 
+ 5426 4402 488B8578 		movq	-10632(%rbp), %rax
+ 5426      D6FFFF
+ 5427 4409 4883E880 		subq	$-128, %rax
+ 5428 440d F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 5428      00D9FFFF 
+ 5429 4415 F30F7F00 		movdqu	%xmm0, (%rax)
+ 5430 4419 F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 5430      00D9FFFF 
+ 5431 4421 F30F7F85 		movdqu	%xmm0, -2000(%rbp)
+ 5431      30F8FFFF 
+ 5432              	.LBB1230:
+ 5433              	.LBB1231:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 5434              		.loc 2 1681 0
+ 5435 4429 B81B0000 		movl	$27, %eax
+ 5435      00
+ 5436 442e 660F6F05 		movdqa	vec_00(%rip), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 186
+
+
+ 5436      00000000 
+ 5437 4436 F30F7F85 		movdqu	%xmm0, -1968(%rbp)
+ 5437      50F8FFFF 
+ 5438 443e 89854CF8 		movl	%eax, -1972(%rbp)
+ 5438      FFFF
+ 5439 4444 F30F6F85 		movdqu	-1968(%rbp), %xmm0
+ 5439      50F8FFFF 
+ 5440 444c F30F7F85 		movdqu	%xmm0, -1936(%rbp)
+ 5440      70F8FFFF 
+ 5441 4454 8B854CF8 		movl	-1972(%rbp), %eax
+ 5441      FFFF
+ 5442 445a 89856CF8 		movl	%eax, -1940(%rbp)
+ 5442      FFFF
+ 5443              	.LBB1232:
+ 5444              	.LBB1233:
+ 5445              	.LBB1234:
+ 5446              	.LBB1235:
+ 5447              		.loc 3 598 0
+ 5448 4460 8B856CF8 		movl	-1940(%rbp), %eax
+ 5448      FFFF
+ 5449 4466 F30F6F85 		movdqu	-1936(%rbp), %xmm0
+ 5449      70F8FFFF 
+ 5450 446e 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 5450      C003
+ 5451              	.LBE1235:
+ 5452              	.LBE1234:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 5453              		.loc 2 519 0
+ 5454 4474 F30F7F85 		movdqu	%xmm0, -1968(%rbp)
+ 5454      50F8FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 5455              		.loc 2 526 0
+ 5456 447c F30F6F85 		movdqu	-1968(%rbp), %xmm0
+ 5456      50F8FFFF 
+ 5457              	.LBE1233:
+ 5458              	.LBE1232:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 5459              		.loc 2 1681 0
+ 5460 4484 660F7F85 		movdqa	%xmm0, -10720(%rbp)
+ 5460      20D6FFFF 
+ 5461 448c F30F6F85 		movdqu	-2000(%rbp), %xmm0
+ 5461      30F8FFFF 
+ 5462 4494 F30F7F85 		movdqu	%xmm0, -1920(%rbp)
+ 5462      80F8FFFF 
+ 5463 449c F30F6F85 		movdqu	-1920(%rbp), %xmm0
+ 5463      80F8FFFF 
+ 5464 44a4 F30F7F85 		movdqu	%xmm0, -1888(%rbp)
+ 5464      A0F8FFFF 
+ 5465 44ac 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 5465      000000
+ 5466 44b3 48898598 		movq	%rax, -1896(%rbp)
+ 5466      F8FFFF
+ 5467              	.LBB1236:
+ 5468              	.LBB1237:
+ 5469              	.LBB1238:
+ 5470              	.LBB1239:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+
GAS LISTING /tmp/ccjbMjHD.s 			page 187
+
+
+ 5471              		.loc 2 851 0
+ 5472 44ba 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 5472      00000000 
+ 5473 44c2 F30F7F85 		movdqu	%xmm0, -1856(%rbp)
+ 5473      C0F8FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 5474              		.loc 2 854 0
+ 5475 44ca 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 5475      00000000 
+ 5476 44d2 F30F6F8D 		movdqu	-1888(%rbp), %xmm1
+ 5476      A0F8FFFF 
+ 5477 44da F30F7F8D 		movdqu	%xmm1, -1776(%rbp)
+ 5477      10F9FFFF 
+ 5478 44e2 F30F7F85 		movdqu	%xmm0, -1792(%rbp)
+ 5478      00F9FFFF 
+ 5479              	.LBB1240:
+ 5480              	.LBB1241:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 5481              		.loc 2 206 0
+ 5482 44ea F30F6F85 		movdqu	-1792(%rbp), %xmm0
+ 5482      00F9FFFF 
+ 5483 44f2 F30F6F8D 		movdqu	-1776(%rbp), %xmm1
+ 5483      10F9FFFF 
+ 5484 44fa 660FDBC1 		pand	%xmm1, %xmm0
+ 5485              	.LBE1241:
+ 5486              	.LBE1240:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 5487              		.loc 2 854 0
+ 5488 44fe F30F7F85 		movdqu	%xmm0, -1808(%rbp)
+ 5488      F0F8FFFF 
+ 5489 4506 F30F6F85 		movdqu	-1888(%rbp), %xmm0
+ 5489      A0F8FFFF 
+ 5490 450e F30F7F85 		movdqu	%xmm0, -1744(%rbp)
+ 5490      30F9FFFF 
+ 5491              	.LBB1242:
+ 5492              	.LBB1243:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 5493              		.loc 3 433 0
+ 5494 4516 F30F6F85 		movdqu	-1744(%rbp), %xmm0
+ 5494      30F9FFFF 
+ 5495 451e 660F72D0 		psrld	$4, %xmm0
+ 5495      04
+ 5496              	.LBE1243:
+ 5497              	.LBE1242:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 5498              		.loc 2 857 0
+ 5499 4523 F30F7F85 		movdqu	%xmm0, -1824(%rbp)
+ 5499      E0F8FFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 5500              		.loc 2 859 0
+ 5501 452b 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 5501      00000000 
+ 5502 4533 F30F6F8D 		movdqu	-1824(%rbp), %xmm1
+ 5502      E0F8FFFF 
+ 5503 453b F30F7F8D 		movdqu	%xmm1, -1712(%rbp)
+ 5503      50F9FFFF 
+ 5504 4543 F30F7F85 		movdqu	%xmm0, -1728(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 188
+
+
+ 5504      40F9FFFF 
+ 5505              	.LBB1244:
+ 5506              	.LBB1245:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 5507              		.loc 2 206 0
+ 5508 454b F30F6F85 		movdqu	-1728(%rbp), %xmm0
+ 5508      40F9FFFF 
+ 5509 4553 F30F6F8D 		movdqu	-1712(%rbp), %xmm1
+ 5509      50F9FFFF 
+ 5510 455b 660FDBC1 		pand	%xmm1, %xmm0
+ 5511              	.LBE1245:
+ 5512              	.LBE1244:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 5513              		.loc 2 859 0
+ 5514 455f F30F7F85 		movdqu	%xmm0, -1824(%rbp)
+ 5514      E0F8FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 5515              		.loc 2 866 0
+ 5516 4567 C785BCF8 		movl	$0, -1860(%rbp)
+ 5516      FFFF0000 
+ 5516      0000
+ 5517 4571 E9BE0100 		jmp	.L84
+ 5517      00
+ 5518              	.L85:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 5519              		.loc 2 868 0
+ 5520 4576 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 5520      00000000 
+ 5521 457e F30F7F85 		movdqu	%xmm0, -1680(%rbp)
+ 5521      70F9FFFF 
+ 5522 4586 F30F6F85 		movdqu	-1824(%rbp), %xmm0
+ 5522      E0F8FFFF 
+ 5523 458e F30F7F85 		movdqu	%xmm0, -1696(%rbp)
+ 5523      60F9FFFF 
+ 5524 4596 F30F6F85 		movdqu	-1680(%rbp), %xmm0
+ 5524      70F9FFFF 
+ 5525 459e F30F7F85 		movdqu	%xmm0, -1648(%rbp)
+ 5525      90F9FFFF 
+ 5526 45a6 F30F6F85 		movdqu	-1696(%rbp), %xmm0
+ 5526      60F9FFFF 
+ 5527 45ae F30F7F85 		movdqu	%xmm0, -1664(%rbp)
+ 5527      80F9FFFF 
+ 5528              	.LBB1246:
+ 5529              	.LBB1247:
+ 5530              	.LBB1248:
+ 5531              	.LBB1249:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5532              		.loc 3 529 0
+ 5533 45b6 F30F6F8D 		movdqu	-1664(%rbp), %xmm1
+ 5533      80F9FFFF 
+ 5534 45be F30F6F85 		movdqu	-1648(%rbp), %xmm0
+ 5534      90F9FFFF 
+ 5535 45c6 660F3800 		pshufb	%xmm1, %xmm0
+ 5535      C1
+ 5536              	.LBE1249:
+ 5537              	.LBE1248:
+ 5538              	.LBE1247:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 189
+
+
+ 5539              	.LBE1246:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 5540              		.loc 2 868 0
+ 5541 45cb F30F7F85 		movdqu	%xmm0, -1840(%rbp)
+ 5541      D0F8FFFF 
+ 5542 45d3 F30F6F85 		movdqu	-1808(%rbp), %xmm0
+ 5542      F0F8FFFF 
+ 5543 45db F30F7F85 		movdqu	%xmm0, -1616(%rbp)
+ 5543      B0F9FFFF 
+ 5544 45e3 F30F6F85 		movdqu	-1840(%rbp), %xmm0
+ 5544      D0F8FFFF 
+ 5545 45eb F30F7F85 		movdqu	%xmm0, -1632(%rbp)
+ 5545      A0F9FFFF 
+ 5546              	.LBB1250:
+ 5547              	.LBB1251:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 5548              		.loc 2 234 0
+ 5549 45f3 F30F6F85 		movdqu	-1632(%rbp), %xmm0
+ 5549      A0F9FFFF 
+ 5550 45fb F30F6F8D 		movdqu	-1616(%rbp), %xmm1
+ 5550      B0F9FFFF 
+ 5551 4603 660FEBC1 		por	%xmm1, %xmm0
+ 5552              	.LBE1251:
+ 5553              	.LBE1250:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 5554              		.loc 2 870 0
+ 5555 4607 F30F7F85 		movdqu	%xmm0, -1840(%rbp)
+ 5555      D0F8FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 5556              		.loc 2 872 0
+ 5557 460f 8B85BCF8 		mov	-1860(%rbp), %eax
+ 5557      FFFF
+ 5558 4615 48C1E004 		salq	$4, %rax
+ 5559 4619 48038598 		addq	-1896(%rbp), %rax
+ 5559      F8FFFF
+ 5560 4620 660F6F00 		movdqa	(%rax), %xmm0
+ 5561 4624 F30F7F85 		movdqu	%xmm0, -1584(%rbp)
+ 5561      D0F9FFFF 
+ 5562 462c F30F6F85 		movdqu	-1840(%rbp), %xmm0
+ 5562      D0F8FFFF 
+ 5563 4634 F30F7F85 		movdqu	%xmm0, -1600(%rbp)
+ 5563      C0F9FFFF 
+ 5564 463c F30F6F85 		movdqu	-1584(%rbp), %xmm0
+ 5564      D0F9FFFF 
+ 5565 4644 F30F7F85 		movdqu	%xmm0, -1552(%rbp)
+ 5565      F0F9FFFF 
+ 5566 464c F30F6F85 		movdqu	-1600(%rbp), %xmm0
+ 5566      C0F9FFFF 
+ 5567 4654 F30F7F85 		movdqu	%xmm0, -1568(%rbp)
+ 5567      E0F9FFFF 
+ 5568              	.LBB1252:
+ 5569              	.LBB1253:
+ 5570              	.LBB1254:
+ 5571              	.LBB1255:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5572              		.loc 3 529 0
+ 5573 465c F30F6F8D 		movdqu	-1568(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 190
+
+
+ 5573      E0F9FFFF 
+ 5574 4664 F30F6F85 		movdqu	-1552(%rbp), %xmm0
+ 5574      F0F9FFFF 
+ 5575 466c 660F3800 		pshufb	%xmm1, %xmm0
+ 5575      C1
+ 5576              	.LBE1255:
+ 5577              	.LBE1254:
+ 5578              	.LBE1253:
+ 5579              	.LBE1252:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 5580              		.loc 2 872 0
+ 5581 4671 F30F7F85 		movdqu	%xmm0, -1840(%rbp)
+ 5581      D0F8FFFF 
+ 5582 4679 F30F6F85 		movdqu	-1856(%rbp), %xmm0
+ 5582      C0F8FFFF 
+ 5583 4681 F30F7F85 		movdqu	%xmm0, -1520(%rbp)
+ 5583      10FAFFFF 
+ 5584 4689 F30F6F85 		movdqu	-1840(%rbp), %xmm0
+ 5584      D0F8FFFF 
+ 5585 4691 F30F7F85 		movdqu	%xmm0, -1536(%rbp)
+ 5585      00FAFFFF 
+ 5586              	.LBB1256:
+ 5587              	.LBB1257:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 5588              		.loc 2 234 0
+ 5589 4699 F30F6F85 		movdqu	-1536(%rbp), %xmm0
+ 5589      00FAFFFF 
+ 5590 46a1 F30F6F8D 		movdqu	-1520(%rbp), %xmm1
+ 5590      10FAFFFF 
+ 5591 46a9 660FEBC1 		por	%xmm1, %xmm0
+ 5592              	.LBE1257:
+ 5593              	.LBE1256:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 5594              		.loc 2 874 0
+ 5595 46ad F30F7F85 		movdqu	%xmm0, -1856(%rbp)
+ 5595      C0F8FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 5596              		.loc 2 876 0
+ 5597 46b5 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 5597      00000000 
+ 5598 46bd F30F6F8D 		movdqu	-1824(%rbp), %xmm1
+ 5598      E0F8FFFF 
+ 5599 46c5 F30F7F8D 		movdqu	%xmm1, -1488(%rbp)
+ 5599      30FAFFFF 
+ 5600 46cd F30F7F85 		movdqu	%xmm0, -1504(%rbp)
+ 5600      20FAFFFF 
+ 5601              	.LBB1258:
+ 5602              	.LBB1259:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 5603              		.loc 2 290 0
+ 5604 46d5 F30F6F8D 		movdqu	-1504(%rbp), %xmm1
+ 5604      20FAFFFF 
+ 5605 46dd F30F6F85 		movdqu	-1488(%rbp), %xmm0
+ 5605      30FAFFFF 
+ 5606 46e5 660FF8C1 		psubb	%xmm1, %xmm0
+ 5607              	.LBE1259:
+ 5608              	.LBE1258:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 191
+
+
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 5609              		.loc 2 876 0
+ 5610 46e9 F30F7F85 		movdqu	%xmm0, -1824(%rbp)
+ 5610      E0F8FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 5611              		.loc 2 878 0
+ 5612 46f1 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 5612      00000000 
+ 5613 46f9 F30F6F8D 		movdqu	-1824(%rbp), %xmm1
+ 5613      E0F8FFFF 
+ 5614 4701 F30F7F8D 		movdqu	%xmm1, -1456(%rbp)
+ 5614      50FAFFFF 
+ 5615 4709 F30F7F85 		movdqu	%xmm0, -1472(%rbp)
+ 5615      40FAFFFF 
+ 5616              	.LBB1260:
+ 5617              	.LBB1261:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 5618              		.loc 2 206 0
+ 5619 4711 F30F6F85 		movdqu	-1472(%rbp), %xmm0
+ 5619      40FAFFFF 
+ 5620 4719 F30F6F8D 		movdqu	-1456(%rbp), %xmm1
+ 5620      50FAFFFF 
+ 5621 4721 660FDBC1 		pand	%xmm1, %xmm0
+ 5622              	.LBE1261:
+ 5623              	.LBE1260:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 5624              		.loc 2 878 0
+ 5625 4725 F30F7F85 		movdqu	%xmm0, -1824(%rbp)
+ 5625      E0F8FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 5626              		.loc 2 866 0
+ 5627 472d 8385BCF8 		addl	$1, -1860(%rbp)
+ 5627      FFFF01
+ 5628              	.L84:
+ 5629 4734 83BDBCF8 		cmpl	$15, -1860(%rbp)
+ 5629      FFFF0F
+ 5630 473b 0F8635FE 		jbe	.L85
+ 5630      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 5631              		.loc 2 882 0
+ 5632 4741 F30F6F85 		movdqu	-1856(%rbp), %xmm0
+ 5632      C0F8FFFF 
+ 5633              	.LBE1239:
+ 5634              	.LBE1238:
+ 5635              	.LBE1237:
+ 5636              	.LBE1236:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 5637              		.loc 2 1682 0
+ 5638 4749 660F7F85 		movdqa	%xmm0, -10736(%rbp)
+ 5638      10D6FFFF 
+ 5639              	.LBB1262:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 5640              		.loc 2 1683 0
+ 5641 4751 660F6F85 		movdqa	-10736(%rbp), %xmm0
+ 5641      10D6FFFF 
+ 5642 4759 F30F7F85 		movdqu	%xmm0, -10064(%rbp)
+ 5642      B0D8FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 192
+
+
+ 5643 4761 E8000000 		call	KDbgWriterGet at PLT
+ 5643      00
+ 5644 4766 4885C0   		testq	%rax, %rax
+ 5645 4769 7479     		je	.L87
+ 5646 476b BF010000 		movl	$1, %edi
+ 5646      00
+ 5647 4770 E8000000 		call	KDbgCondToFlag at PLT
+ 5647      00
+ 5648 4775 4889C6   		movq	%rax, %rsi
+ 5649 4778 BF100000 		movl	$16, %edi
+ 5649      00
+ 5650 477d E8000000 		call	KDbgTestModConds at PLT
+ 5650      00
+ 5651 4782 84C0     		testb	%al, %al
+ 5652 4784 745E     		je	.L87
+ 5653 4786 8B85BCD8 		movl	-10052(%rbp), %eax
+ 5653      FFFF
+ 5654 478c 89C7     		movl	%eax, %edi
+ 5655 478e E86DB8FF 		call	bswap_32
+ 5655      FF
+ 5656 4793 4189C5   		movl	%eax, %r13d
+ 5657 4796 8B85B8D8 		movl	-10056(%rbp), %eax
+ 5657      FFFF
+ 5658 479c 89C7     		movl	%eax, %edi
+ 5659 479e E85DB8FF 		call	bswap_32
+ 5659      FF
+ 5660 47a3 4189C4   		movl	%eax, %r12d
+ 5661 47a6 8B85B4D8 		movl	-10060(%rbp), %eax
+ 5661      FFFF
+ 5662 47ac 89C7     		movl	%eax, %edi
+ 5663 47ae E84DB8FF 		call	bswap_32
+ 5663      FF
+ 5664 47b3 89C3     		movl	%eax, %ebx
+ 5665 47b5 8B85B0D8 		movl	-10064(%rbp), %eax
+ 5665      FFFF
+ 5666 47bb 89C7     		movl	%eax, %edi
+ 5667 47bd E83EB8FF 		call	bswap_32
+ 5667      FF
+ 5668 47c2 4589E9   		movl	%r13d, %r9d
+ 5669 47c5 4589E0   		movl	%r12d, %r8d
+ 5670 47c8 89D9     		movl	%ebx, %ecx
+ 5671 47ca 89C2     		movl	%eax, %edx
+ 5672 47cc 488D3500 		leaq	.LC0(%rip), %rsi
+ 5672      000000
+ 5673 47d3 488D3D00 		leaq	.LC1(%rip), %rdi
+ 5673      000000
+ 5674 47da B8000000 		movl	$0, %eax
+ 5674      00
+ 5675 47df E8000000 		call	KDbgMsg at PLT
+ 5675      00
+ 5676              	.L87:
+ 5677 47e4 660F6F85 		movdqa	-10736(%rbp), %xmm0
+ 5677      10D6FFFF 
+ 5678 47ec F30F7F85 		movdqu	%xmm0, -1440(%rbp)
+ 5678      60FAFFFF 
+ 5679              	.LBE1262:
+ 5680              	.LBB1263:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 193
+
+
+ 5681              	.LBB1264:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 5682              		.loc 2 667 0
+ 5683 47f4 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 5683      00000000 
+ 5684 47fc F30F6F8D 		movdqu	-1440(%rbp), %xmm1
+ 5684      60FAFFFF 
+ 5685 4804 F30F7F8D 		movdqu	%xmm1, -1408(%rbp)
+ 5685      80FAFFFF 
+ 5686 480c F30F7F85 		movdqu	%xmm0, -1424(%rbp)
+ 5686      70FAFFFF 
+ 5687 4814 F30F6F85 		movdqu	-1408(%rbp), %xmm0
+ 5687      80FAFFFF 
+ 5688 481c F30F7F85 		movdqu	%xmm0, -1376(%rbp)
+ 5688      A0FAFFFF 
+ 5689 4824 F30F6F85 		movdqu	-1424(%rbp), %xmm0
+ 5689      70FAFFFF 
+ 5690 482c F30F7F85 		movdqu	%xmm0, -1392(%rbp)
+ 5690      90FAFFFF 
+ 5691              	.LBB1265:
+ 5692              	.LBB1266:
+ 5693              	.LBB1267:
+ 5694              	.LBB1268:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5695              		.loc 3 529 0
+ 5696 4834 F30F6F8D 		movdqu	-1392(%rbp), %xmm1
+ 5696      90FAFFFF 
+ 5697 483c F30F6F85 		movdqu	-1376(%rbp), %xmm0
+ 5697      A0FAFFFF 
+ 5698 4844 660F3800 		pshufb	%xmm1, %xmm0
+ 5698      C1
+ 5699              	.LBE1268:
+ 5700              	.LBE1267:
+ 5701              	.LBE1266:
+ 5702              	.LBE1265:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 5703              		.loc 2 667 0
+ 5704 4849 F30F7F85 		movdqu	%xmm0, -1440(%rbp)
+ 5704      60FAFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 5705              		.loc 2 668 0
+ 5706 4851 F30F6F85 		movdqu	-1440(%rbp), %xmm0
+ 5706      60FAFFFF 
+ 5707              	.LBE1264:
+ 5708              	.LBE1263:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 5709              		.loc 2 1684 0
+ 5710 4859 660F7F85 		movdqa	%xmm0, -10736(%rbp)
+ 5710      10D6FFFF 
+ 5711              	.LBB1269:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 5712              		.loc 2 1685 0
+ 5713 4861 660F6F85 		movdqa	-10736(%rbp), %xmm0
+ 5713      10D6FFFF 
+ 5714 4869 F30F7F85 		movdqu	%xmm0, -10080(%rbp)
+ 5714      A0D8FFFF 
+ 5715 4871 E8000000 		call	KDbgWriterGet at PLT
+
GAS LISTING /tmp/ccjbMjHD.s 			page 194
+
+
+ 5715      00
+ 5716 4876 4885C0   		testq	%rax, %rax
+ 5717 4879 7479     		je	.L89
+ 5718 487b BF010000 		movl	$1, %edi
+ 5718      00
+ 5719 4880 E8000000 		call	KDbgCondToFlag at PLT
+ 5719      00
+ 5720 4885 4889C6   		movq	%rax, %rsi
+ 5721 4888 BF100000 		movl	$16, %edi
+ 5721      00
+ 5722 488d E8000000 		call	KDbgTestModConds at PLT
+ 5722      00
+ 5723 4892 84C0     		testb	%al, %al
+ 5724 4894 745E     		je	.L89
+ 5725 4896 8B85ACD8 		movl	-10068(%rbp), %eax
+ 5725      FFFF
+ 5726 489c 89C7     		movl	%eax, %edi
+ 5727 489e E85DB7FF 		call	bswap_32
+ 5727      FF
+ 5728 48a3 4189C5   		movl	%eax, %r13d
+ 5729 48a6 8B85A8D8 		movl	-10072(%rbp), %eax
+ 5729      FFFF
+ 5730 48ac 89C7     		movl	%eax, %edi
+ 5731 48ae E84DB7FF 		call	bswap_32
+ 5731      FF
+ 5732 48b3 4189C4   		movl	%eax, %r12d
+ 5733 48b6 8B85A4D8 		movl	-10076(%rbp), %eax
+ 5733      FFFF
+ 5734 48bc 89C7     		movl	%eax, %edi
+ 5735 48be E83DB7FF 		call	bswap_32
+ 5735      FF
+ 5736 48c3 89C3     		movl	%eax, %ebx
+ 5737 48c5 8B85A0D8 		movl	-10080(%rbp), %eax
+ 5737      FFFF
+ 5738 48cb 89C7     		movl	%eax, %edi
+ 5739 48cd E82EB7FF 		call	bswap_32
+ 5739      FF
+ 5740 48d2 4589E9   		movl	%r13d, %r9d
+ 5741 48d5 4589E0   		movl	%r12d, %r8d
+ 5742 48d8 89D9     		movl	%ebx, %ecx
+ 5743 48da 89C2     		movl	%eax, %edx
+ 5744 48dc 488D3500 		leaq	.LC2(%rip), %rsi
+ 5744      000000
+ 5745 48e3 488D3D00 		leaq	.LC1(%rip), %rdi
+ 5745      000000
+ 5746 48ea B8000000 		movl	$0, %eax
+ 5746      00
+ 5747 48ef E8000000 		call	KDbgMsg at PLT
+ 5747      00
+ 5748              	.L89:
+ 5749 48f4 660F6F85 		movdqa	-10736(%rbp), %xmm0
+ 5749      10D6FFFF 
+ 5750 48fc F30F7F85 		movdqu	%xmm0, -1344(%rbp)
+ 5750      C0FAFFFF 
+ 5751 4904 660F6F85 		movdqa	-10720(%rbp), %xmm0
+ 5751      20D6FFFF 
+ 5752 490c F30F7F85 		movdqu	%xmm0, -1360(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 195
+
+
+ 5752      B0FAFFFF 
+ 5753              	.LBE1269:
+ 5754              	.LBB1270:
+ 5755              	.LBB1271:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 5756              		.loc 2 178 0
+ 5757 4914 F30F6F85 		movdqu	-1360(%rbp), %xmm0
+ 5757      B0FAFFFF 
+ 5758 491c F30F6F8D 		movdqu	-1344(%rbp), %xmm1
+ 5758      C0FAFFFF 
+ 5759 4924 660FEFC1 		pxor	%xmm1, %xmm0
+ 5760              	.LBE1271:
+ 5761              	.LBE1270:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 5762              		.loc 2 1686 0
+ 5763 4928 660F7F85 		movdqa	%xmm0, -10736(%rbp)
+ 5763      10D6FFFF 
+ 5764              	.LBB1272:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 5765              		.loc 2 1687 0
+ 5766 4930 660F6F85 		movdqa	-10736(%rbp), %xmm0
+ 5766      10D6FFFF 
+ 5767 4938 F30F7F85 		movdqu	%xmm0, -10096(%rbp)
+ 5767      90D8FFFF 
+ 5768 4940 E8000000 		call	KDbgWriterGet at PLT
+ 5768      00
+ 5769 4945 4885C0   		testq	%rax, %rax
+ 5770 4948 7479     		je	.L91
+ 5771 494a BF010000 		movl	$1, %edi
+ 5771      00
+ 5772 494f E8000000 		call	KDbgCondToFlag at PLT
+ 5772      00
+ 5773 4954 4889C6   		movq	%rax, %rsi
+ 5774 4957 BF100000 		movl	$16, %edi
+ 5774      00
+ 5775 495c E8000000 		call	KDbgTestModConds at PLT
+ 5775      00
+ 5776 4961 84C0     		testb	%al, %al
+ 5777 4963 745E     		je	.L91
+ 5778 4965 8B859CD8 		movl	-10084(%rbp), %eax
+ 5778      FFFF
+ 5779 496b 89C7     		movl	%eax, %edi
+ 5780 496d E88EB6FF 		call	bswap_32
+ 5780      FF
+ 5781 4972 4189C5   		movl	%eax, %r13d
+ 5782 4975 8B8598D8 		movl	-10088(%rbp), %eax
+ 5782      FFFF
+ 5783 497b 89C7     		movl	%eax, %edi
+ 5784 497d E87EB6FF 		call	bswap_32
+ 5784      FF
+ 5785 4982 4189C4   		movl	%eax, %r12d
+ 5786 4985 8B8594D8 		movl	-10092(%rbp), %eax
+ 5786      FFFF
+ 5787 498b 89C7     		movl	%eax, %edi
+ 5788 498d E86EB6FF 		call	bswap_32
+ 5788      FF
+ 5789 4992 89C3     		movl	%eax, %ebx
+
GAS LISTING /tmp/ccjbMjHD.s 			page 196
+
+
+ 5790 4994 8B8590D8 		movl	-10096(%rbp), %eax
+ 5790      FFFF
+ 5791 499a 89C7     		movl	%eax, %edi
+ 5792 499c E85FB6FF 		call	bswap_32
+ 5792      FF
+ 5793 49a1 4589E9   		movl	%r13d, %r9d
+ 5794 49a4 4589E0   		movl	%r12d, %r8d
+ 5795 49a7 89D9     		movl	%ebx, %ecx
+ 5796 49a9 89C2     		movl	%eax, %edx
+ 5797 49ab 488D3500 		leaq	.LC3(%rip), %rsi
+ 5797      000000
+ 5798 49b2 488D3D00 		leaq	.LC1(%rip), %rdi
+ 5798      000000
+ 5799 49b9 B8000000 		movl	$0, %eax
+ 5799      00
+ 5800 49be E8000000 		call	KDbgMsg at PLT
+ 5800      00
+ 5801              	.L91:
+ 5802 49c3 660F6F85 		movdqa	-10736(%rbp), %xmm0
+ 5802      10D6FFFF 
+ 5803 49cb F30F7F85 		movdqu	%xmm0, -1328(%rbp)
+ 5803      D0FAFFFF 
+ 5804 49d3 F30F6F85 		movdqu	-1328(%rbp), %xmm0
+ 5804      D0FAFFFF 
+ 5805 49db F30F7F85 		movdqu	%xmm0, -1296(%rbp)
+ 5805      F0FAFFFF 
+ 5806              	.LBE1272:
+ 5807              	.LBB1273:
+ 5808              	.LBB1274:
+ 5809              	.LBB1275:
+ 5810              	.LBB1276:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 5811              		.loc 3 450 0
+ 5812 49e3 F30F6F85 		movdqu	-1296(%rbp), %xmm0
+ 5812      F0FAFFFF 
+ 5813 49eb 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 5813      FF
+ 5814              	.LBE1276:
+ 5815              	.LBE1275:
+ 5816              	.LBE1274:
+ 5817              	.LBE1273:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 5818              		.loc 2 1688 0
+ 5819 49f0 660F7F85 		movdqa	%xmm0, -10736(%rbp)
+ 5819      10D6FFFF 
+ 5820              	.LBB1277:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 5821              		.loc 2 1689 0
+ 5822 49f8 660F6F85 		movdqa	-10736(%rbp), %xmm0
+ 5822      10D6FFFF 
+ 5823 4a00 F30F7F85 		movdqu	%xmm0, -10112(%rbp)
+ 5823      80D8FFFF 
+ 5824 4a08 E8000000 		call	KDbgWriterGet at PLT
+ 5824      00
+ 5825 4a0d 4885C0   		testq	%rax, %rax
+ 5826 4a10 7479     		je	.L93
+ 5827 4a12 BF010000 		movl	$1, %edi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 197
+
+
+ 5827      00
+ 5828 4a17 E8000000 		call	KDbgCondToFlag at PLT
+ 5828      00
+ 5829 4a1c 4889C6   		movq	%rax, %rsi
+ 5830 4a1f BF100000 		movl	$16, %edi
+ 5830      00
+ 5831 4a24 E8000000 		call	KDbgTestModConds at PLT
+ 5831      00
+ 5832 4a29 84C0     		testb	%al, %al
+ 5833 4a2b 745E     		je	.L93
+ 5834 4a2d 8B858CD8 		movl	-10100(%rbp), %eax
+ 5834      FFFF
+ 5835 4a33 89C7     		movl	%eax, %edi
+ 5836 4a35 E8C6B5FF 		call	bswap_32
+ 5836      FF
+ 5837 4a3a 4189C5   		movl	%eax, %r13d
+ 5838 4a3d 8B8588D8 		movl	-10104(%rbp), %eax
+ 5838      FFFF
+ 5839 4a43 89C7     		movl	%eax, %edi
+ 5840 4a45 E8B6B5FF 		call	bswap_32
+ 5840      FF
+ 5841 4a4a 4189C4   		movl	%eax, %r12d
+ 5842 4a4d 8B8584D8 		movl	-10108(%rbp), %eax
+ 5842      FFFF
+ 5843 4a53 89C7     		movl	%eax, %edi
+ 5844 4a55 E8A6B5FF 		call	bswap_32
+ 5844      FF
+ 5845 4a5a 89C3     		movl	%eax, %ebx
+ 5846 4a5c 8B8580D8 		movl	-10112(%rbp), %eax
+ 5846      FFFF
+ 5847 4a62 89C7     		movl	%eax, %edi
+ 5848 4a64 E897B5FF 		call	bswap_32
+ 5848      FF
+ 5849 4a69 4589E9   		movl	%r13d, %r9d
+ 5850 4a6c 4589E0   		movl	%r12d, %r8d
+ 5851 4a6f 89D9     		movl	%ebx, %ecx
+ 5852 4a71 89C2     		movl	%eax, %edx
+ 5853 4a73 488D3500 		leaq	.LC4(%rip), %rsi
+ 5853      000000
+ 5854 4a7a 488D3D00 		leaq	.LC1(%rip), %rdi
+ 5854      000000
+ 5855 4a81 B8000000 		movl	$0, %eax
+ 5855      00
+ 5856 4a86 E8000000 		call	KDbgMsg at PLT
+ 5856      00
+ 5857              	.L93:
+ 5858              	.LBE1277:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 5859              		.loc 2 1690 0
+ 5860 4a8b 660F6F85 		movdqa	-10736(%rbp), %xmm0
+ 5860      10D6FFFF 
+ 5861              	.LBE1231:
+ 5862              	.LBE1230:
+1752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x1B,9);
+ 5863              		.loc 2 1752 0
+ 5864 4a93 F30F7F85 		movdqu	%xmm0, -9968(%rbp)
+ 5864      10D9FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 198
+
+
+ 5865 4a9b F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 5865      00D9FFFF 
+ 5866 4aa3 F30F7F85 		movdqu	%xmm0, -1280(%rbp)
+ 5866      00FBFFFF 
+ 5867              	.LBB1278:
+ 5868              	.LBB1279:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 5869              		.loc 2 1565 0
+ 5870 4aab F30F6F85 		movdqu	-1280(%rbp), %xmm0
+ 5870      00FBFFFF 
+ 5871 4ab3 660F7F85 		movdqa	%xmm0, -10704(%rbp)
+ 5871      30D6FFFF 
+ 5872 4abb 660F6F85 		movdqa	-10704(%rbp), %xmm0
+ 5872      30D6FFFF 
+ 5873 4ac3 F30F7F85 		movdqu	%xmm0, -1264(%rbp)
+ 5873      10FBFFFF 
+ 5874              	.LBB1280:
+ 5875              	.LBB1281:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5876              		.loc 2 1278 0
+ 5877 4acb 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 5877      00000000 
+ 5878 4ad3 F30F6F8D 		movdqu	-1264(%rbp), %xmm1
+ 5878      10FBFFFF 
+ 5879 4adb F30F7F8D 		movdqu	%xmm1, -1232(%rbp)
+ 5879      30FBFFFF 
+ 5880 4ae3 F30F7F85 		movdqu	%xmm0, -1248(%rbp)
+ 5880      20FBFFFF 
+ 5881 4aeb F30F6F85 		movdqu	-1232(%rbp), %xmm0
+ 5881      30FBFFFF 
+ 5882 4af3 F30F7F85 		movdqu	%xmm0, -1200(%rbp)
+ 5882      50FBFFFF 
+ 5883 4afb F30F6F85 		movdqu	-1248(%rbp), %xmm0
+ 5883      20FBFFFF 
+ 5884 4b03 F30F7F85 		movdqu	%xmm0, -1216(%rbp)
+ 5884      40FBFFFF 
+ 5885              	.LBB1282:
+ 5886              	.LBB1283:
+ 5887              	.LBB1284:
+ 5888              	.LBB1285:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5889              		.loc 3 529 0
+ 5890 4b0b F30F6F8D 		movdqu	-1216(%rbp), %xmm1
+ 5890      40FBFFFF 
+ 5891 4b13 F30F6F85 		movdqu	-1200(%rbp), %xmm0
+ 5891      50FBFFFF 
+ 5892 4b1b 660F3800 		pshufb	%xmm1, %xmm0
+ 5892      C1
+ 5893              	.LBE1285:
+ 5894              	.LBE1284:
+ 5895              	.LBE1283:
+ 5896              	.LBE1282:
+ 5897              	.LBE1281:
+ 5898              	.LBE1280:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5899              		.loc 2 1567 0
+ 5900 4b20 660F7F85 		movdqa	%xmm0, -10704(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 199
+
+
+ 5900      30D6FFFF 
+ 5901 4b28 660F6F85 		movdqa	-10704(%rbp), %xmm0
+ 5901      30D6FFFF 
+ 5902 4b30 660FEF85 		pxor	-1280(%rbp), %xmm0
+ 5902      00FBFFFF 
+ 5903 4b38 F30F7F85 		movdqu	%xmm0, -1280(%rbp)
+ 5903      00FBFFFF 
+ 5904 4b40 660F6F85 		movdqa	-10704(%rbp), %xmm0
+ 5904      30D6FFFF 
+ 5905 4b48 F30F7F85 		movdqu	%xmm0, -1184(%rbp)
+ 5905      60FBFFFF 
+ 5906              	.LBB1286:
+ 5907              	.LBB1287:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5908              		.loc 2 1278 0
+ 5909 4b50 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 5909      00000000 
+ 5910 4b58 F30F6F8D 		movdqu	-1184(%rbp), %xmm1
+ 5910      60FBFFFF 
+ 5911 4b60 F30F7F8D 		movdqu	%xmm1, -1152(%rbp)
+ 5911      80FBFFFF 
+ 5912 4b68 F30F7F85 		movdqu	%xmm0, -1168(%rbp)
+ 5912      70FBFFFF 
+ 5913 4b70 F30F6F85 		movdqu	-1152(%rbp), %xmm0
+ 5913      80FBFFFF 
+ 5914 4b78 F30F7F85 		movdqu	%xmm0, -1120(%rbp)
+ 5914      A0FBFFFF 
+ 5915 4b80 F30F6F85 		movdqu	-1168(%rbp), %xmm0
+ 5915      70FBFFFF 
+ 5916 4b88 F30F7F85 		movdqu	%xmm0, -1136(%rbp)
+ 5916      90FBFFFF 
+ 5917              	.LBB1288:
+ 5918              	.LBB1289:
+ 5919              	.LBB1290:
+ 5920              	.LBB1291:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5921              		.loc 3 529 0
+ 5922 4b90 F30F6F8D 		movdqu	-1136(%rbp), %xmm1
+ 5922      90FBFFFF 
+ 5923 4b98 F30F6F85 		movdqu	-1120(%rbp), %xmm0
+ 5923      A0FBFFFF 
+ 5924 4ba0 660F3800 		pshufb	%xmm1, %xmm0
+ 5924      C1
+ 5925              	.LBE1291:
+ 5926              	.LBE1290:
+ 5927              	.LBE1289:
+ 5928              	.LBE1288:
+ 5929              	.LBE1287:
+ 5930              	.LBE1286:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5931              		.loc 2 1568 0
+ 5932 4ba5 660F7F85 		movdqa	%xmm0, -10704(%rbp)
+ 5932      30D6FFFF 
+ 5933 4bad 660F6F85 		movdqa	-10704(%rbp), %xmm0
+ 5933      30D6FFFF 
+ 5934 4bb5 660FEF85 		pxor	-1280(%rbp), %xmm0
+ 5934      00FBFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 200
+
+
+ 5935 4bbd F30F7F85 		movdqu	%xmm0, -1280(%rbp)
+ 5935      00FBFFFF 
+ 5936 4bc5 660F6F85 		movdqa	-10704(%rbp), %xmm0
+ 5936      30D6FFFF 
+ 5937 4bcd F30F7F85 		movdqu	%xmm0, -1104(%rbp)
+ 5937      B0FBFFFF 
+ 5938              	.LBB1292:
+ 5939              	.LBB1293:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 5940              		.loc 2 1278 0
+ 5941 4bd5 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 5941      00000000 
+ 5942 4bdd F30F6F8D 		movdqu	-1104(%rbp), %xmm1
+ 5942      B0FBFFFF 
+ 5943 4be5 F30F7F8D 		movdqu	%xmm1, -1072(%rbp)
+ 5943      D0FBFFFF 
+ 5944 4bed F30F7F85 		movdqu	%xmm0, -1088(%rbp)
+ 5944      C0FBFFFF 
+ 5945 4bf5 F30F6F85 		movdqu	-1072(%rbp), %xmm0
+ 5945      D0FBFFFF 
+ 5946 4bfd F30F7F85 		movdqu	%xmm0, -1040(%rbp)
+ 5946      F0FBFFFF 
+ 5947 4c05 F30F6F85 		movdqu	-1088(%rbp), %xmm0
+ 5947      C0FBFFFF 
+ 5948 4c0d F30F7F85 		movdqu	%xmm0, -1056(%rbp)
+ 5948      E0FBFFFF 
+ 5949              	.LBB1294:
+ 5950              	.LBB1295:
+ 5951              	.LBB1296:
+ 5952              	.LBB1297:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 5953              		.loc 3 529 0
+ 5954 4c15 F30F6F8D 		movdqu	-1056(%rbp), %xmm1
+ 5954      E0FBFFFF 
+ 5955 4c1d F30F6F85 		movdqu	-1040(%rbp), %xmm0
+ 5955      F0FBFFFF 
+ 5956 4c25 660F3800 		pshufb	%xmm1, %xmm0
+ 5956      C1
+ 5957              	.LBE1297:
+ 5958              	.LBE1296:
+ 5959              	.LBE1295:
+ 5960              	.LBE1294:
+ 5961              	.LBE1293:
+ 5962              	.LBE1292:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 5963              		.loc 2 1569 0
+ 5964 4c2a 660F7F85 		movdqa	%xmm0, -10704(%rbp)
+ 5964      30D6FFFF 
+ 5965 4c32 660F6F85 		movdqa	-10704(%rbp), %xmm0
+ 5965      30D6FFFF 
+ 5966 4c3a 660FEF85 		pxor	-1280(%rbp), %xmm0
+ 5966      00FBFFFF 
+ 5967 4c42 F30F7F85 		movdqu	%xmm0, -1280(%rbp)
+ 5967      00FBFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 5968              		.loc 2 1571 0
+ 5969 4c4a F30F6F85 		movdqu	-1280(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 201
+
+
+ 5969      00FBFFFF 
+ 5970              	.LBE1279:
+ 5971              	.LBE1278:
+ 5972              		.loc 2 1752 0
+ 5973 4c52 F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+ 5973      00D9FFFF 
+ 5974 4c5a F30F6F85 		movdqu	-9968(%rbp), %xmm0
+ 5974      10D9FFFF 
+ 5975 4c62 F30F6F8D 		movdqu	-9984(%rbp), %xmm1
+ 5975      00D9FFFF 
+ 5976 4c6a 660FEFC1 		pxor	%xmm1, %xmm0
+ 5977 4c6e F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+ 5977      00D9FFFF 
+ 5978 4c76 488B8578 		movq	-10632(%rbp), %rax
+ 5978      D6FFFF
+ 5979 4c7d 48059000 		addq	$144, %rax
+ 5979      0000
+ 5980 4c83 F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 5980      00D9FFFF 
+ 5981 4c8b F30F7F00 		movdqu	%xmm0, (%rax)
+ 5982 4c8f F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 5982      00D9FFFF 
+ 5983 4c97 F30F7F85 		movdqu	%xmm0, -1008(%rbp)
+ 5983      10FCFFFF 
+ 5984              	.LBB1298:
+ 5985              	.LBB1299:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 5986              		.loc 2 1681 0
+ 5987 4c9f B8360000 		movl	$54, %eax
+ 5987      00
+ 5988 4ca4 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 5988      00000000 
+ 5989 4cac F30F7F85 		movdqu	%xmm0, -976(%rbp)
+ 5989      30FCFFFF 
+ 5990 4cb4 89852CFC 		movl	%eax, -980(%rbp)
+ 5990      FFFF
+ 5991 4cba F30F6F85 		movdqu	-976(%rbp), %xmm0
+ 5991      30FCFFFF 
+ 5992 4cc2 F30F7F85 		movdqu	%xmm0, -944(%rbp)
+ 5992      50FCFFFF 
+ 5993 4cca 8B852CFC 		movl	-980(%rbp), %eax
+ 5993      FFFF
+ 5994 4cd0 89854CFC 		movl	%eax, -948(%rbp)
+ 5994      FFFF
+ 5995              	.LBB1300:
+ 5996              	.LBB1301:
+ 5997              	.LBB1302:
+ 5998              	.LBB1303:
+ 5999              		.loc 3 598 0
+ 6000 4cd6 8B854CFC 		movl	-948(%rbp), %eax
+ 6000      FFFF
+ 6001 4cdc F30F6F85 		movdqu	-944(%rbp), %xmm0
+ 6001      50FCFFFF 
+ 6002 4ce4 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 6002      C003
+ 6003              	.LBE1303:
+ 6004              	.LBE1302:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 202
+
+
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 6005              		.loc 2 519 0
+ 6006 4cea F30F7F85 		movdqu	%xmm0, -976(%rbp)
+ 6006      30FCFFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 6007              		.loc 2 526 0
+ 6008 4cf2 F30F6F85 		movdqu	-976(%rbp), %xmm0
+ 6008      30FCFFFF 
+ 6009              	.LBE1301:
+ 6010              	.LBE1300:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 6011              		.loc 2 1681 0
+ 6012 4cfa 660F7F85 		movdqa	%xmm0, -10672(%rbp)
+ 6012      50D6FFFF 
+ 6013 4d02 F30F6F85 		movdqu	-1008(%rbp), %xmm0
+ 6013      10FCFFFF 
+ 6014 4d0a F30F7F85 		movdqu	%xmm0, -928(%rbp)
+ 6014      60FCFFFF 
+ 6015 4d12 F30F6F85 		movdqu	-928(%rbp), %xmm0
+ 6015      60FCFFFF 
+ 6016 4d1a F30F7F85 		movdqu	%xmm0, -896(%rbp)
+ 6016      80FCFFFF 
+ 6017 4d22 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 6017      000000
+ 6018 4d29 48898578 		movq	%rax, -904(%rbp)
+ 6018      FCFFFF
+ 6019              	.LBB1304:
+ 6020              	.LBB1305:
+ 6021              	.LBB1306:
+ 6022              	.LBB1307:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 6023              		.loc 2 851 0
+ 6024 4d30 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 6024      00000000 
+ 6025 4d38 F30F7F85 		movdqu	%xmm0, -864(%rbp)
+ 6025      A0FCFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 6026              		.loc 2 854 0
+ 6027 4d40 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 6027      00000000 
+ 6028 4d48 F30F6F8D 		movdqu	-896(%rbp), %xmm1
+ 6028      80FCFFFF 
+ 6029 4d50 F30F7F8D 		movdqu	%xmm1, -784(%rbp)
+ 6029      F0FCFFFF 
+ 6030 4d58 F30F7F85 		movdqu	%xmm0, -800(%rbp)
+ 6030      E0FCFFFF 
+ 6031              	.LBB1308:
+ 6032              	.LBB1309:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 6033              		.loc 2 206 0
+ 6034 4d60 F30F6F85 		movdqu	-800(%rbp), %xmm0
+ 6034      E0FCFFFF 
+ 6035 4d68 F30F6F8D 		movdqu	-784(%rbp), %xmm1
+ 6035      F0FCFFFF 
+ 6036 4d70 660FDBC1 		pand	%xmm1, %xmm0
+ 6037              	.LBE1309:
+ 6038              	.LBE1308:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 203
+
+
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 6039              		.loc 2 854 0
+ 6040 4d74 F30F7F85 		movdqu	%xmm0, -816(%rbp)
+ 6040      D0FCFFFF 
+ 6041 4d7c F30F6F85 		movdqu	-896(%rbp), %xmm0
+ 6041      80FCFFFF 
+ 6042 4d84 F30F7F85 		movdqu	%xmm0, -752(%rbp)
+ 6042      10FDFFFF 
+ 6043              	.LBB1310:
+ 6044              	.LBB1311:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 6045              		.loc 3 433 0
+ 6046 4d8c F30F6F85 		movdqu	-752(%rbp), %xmm0
+ 6046      10FDFFFF 
+ 6047 4d94 660F72D0 		psrld	$4, %xmm0
+ 6047      04
+ 6048              	.LBE1311:
+ 6049              	.LBE1310:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 6050              		.loc 2 857 0
+ 6051 4d99 F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 6051      C0FCFFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 6052              		.loc 2 859 0
+ 6053 4da1 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 6053      00000000 
+ 6054 4da9 F30F6F8D 		movdqu	-832(%rbp), %xmm1
+ 6054      C0FCFFFF 
+ 6055 4db1 F30F7F8D 		movdqu	%xmm1, -720(%rbp)
+ 6055      30FDFFFF 
+ 6056 4db9 F30F7F85 		movdqu	%xmm0, -736(%rbp)
+ 6056      20FDFFFF 
+ 6057              	.LBB1312:
+ 6058              	.LBB1313:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 6059              		.loc 2 206 0
+ 6060 4dc1 F30F6F85 		movdqu	-736(%rbp), %xmm0
+ 6060      20FDFFFF 
+ 6061 4dc9 F30F6F8D 		movdqu	-720(%rbp), %xmm1
+ 6061      30FDFFFF 
+ 6062 4dd1 660FDBC1 		pand	%xmm1, %xmm0
+ 6063              	.LBE1313:
+ 6064              	.LBE1312:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 6065              		.loc 2 859 0
+ 6066 4dd5 F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 6066      C0FCFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 6067              		.loc 2 866 0
+ 6068 4ddd C7859CFC 		movl	$0, -868(%rbp)
+ 6068      FFFF0000 
+ 6068      0000
+ 6069 4de7 E9BE0100 		jmp	.L94
+ 6069      00
+ 6070              	.L95:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 6071              		.loc 2 868 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 204
+
+
+ 6072 4dec 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 6072      00000000 
+ 6073 4df4 F30F7F85 		movdqu	%xmm0, -688(%rbp)
+ 6073      50FDFFFF 
+ 6074 4dfc F30F6F85 		movdqu	-832(%rbp), %xmm0
+ 6074      C0FCFFFF 
+ 6075 4e04 F30F7F85 		movdqu	%xmm0, -704(%rbp)
+ 6075      40FDFFFF 
+ 6076 4e0c F30F6F85 		movdqu	-688(%rbp), %xmm0
+ 6076      50FDFFFF 
+ 6077 4e14 F30F7F85 		movdqu	%xmm0, -656(%rbp)
+ 6077      70FDFFFF 
+ 6078 4e1c F30F6F85 		movdqu	-704(%rbp), %xmm0
+ 6078      40FDFFFF 
+ 6079 4e24 F30F7F85 		movdqu	%xmm0, -672(%rbp)
+ 6079      60FDFFFF 
+ 6080              	.LBB1314:
+ 6081              	.LBB1315:
+ 6082              	.LBB1316:
+ 6083              	.LBB1317:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6084              		.loc 3 529 0
+ 6085 4e2c F30F6F8D 		movdqu	-672(%rbp), %xmm1
+ 6085      60FDFFFF 
+ 6086 4e34 F30F6F85 		movdqu	-656(%rbp), %xmm0
+ 6086      70FDFFFF 
+ 6087 4e3c 660F3800 		pshufb	%xmm1, %xmm0
+ 6087      C1
+ 6088              	.LBE1317:
+ 6089              	.LBE1316:
+ 6090              	.LBE1315:
+ 6091              	.LBE1314:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 6092              		.loc 2 868 0
+ 6093 4e41 F30F7F85 		movdqu	%xmm0, -848(%rbp)
+ 6093      B0FCFFFF 
+ 6094 4e49 F30F6F85 		movdqu	-816(%rbp), %xmm0
+ 6094      D0FCFFFF 
+ 6095 4e51 F30F7F85 		movdqu	%xmm0, -624(%rbp)
+ 6095      90FDFFFF 
+ 6096 4e59 F30F6F85 		movdqu	-848(%rbp), %xmm0
+ 6096      B0FCFFFF 
+ 6097 4e61 F30F7F85 		movdqu	%xmm0, -640(%rbp)
+ 6097      80FDFFFF 
+ 6098              	.LBB1318:
+ 6099              	.LBB1319:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 6100              		.loc 2 234 0
+ 6101 4e69 F30F6F85 		movdqu	-640(%rbp), %xmm0
+ 6101      80FDFFFF 
+ 6102 4e71 F30F6F8D 		movdqu	-624(%rbp), %xmm1
+ 6102      90FDFFFF 
+ 6103 4e79 660FEBC1 		por	%xmm1, %xmm0
+ 6104              	.LBE1319:
+ 6105              	.LBE1318:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 6106              		.loc 2 870 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 205
+
+
+ 6107 4e7d F30F7F85 		movdqu	%xmm0, -848(%rbp)
+ 6107      B0FCFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 6108              		.loc 2 872 0
+ 6109 4e85 8B859CFC 		mov	-868(%rbp), %eax
+ 6109      FFFF
+ 6110 4e8b 48C1E004 		salq	$4, %rax
+ 6111 4e8f 48038578 		addq	-904(%rbp), %rax
+ 6111      FCFFFF
+ 6112 4e96 660F6F00 		movdqa	(%rax), %xmm0
+ 6113 4e9a F30F7F85 		movdqu	%xmm0, -592(%rbp)
+ 6113      B0FDFFFF 
+ 6114 4ea2 F30F6F85 		movdqu	-848(%rbp), %xmm0
+ 6114      B0FCFFFF 
+ 6115 4eaa F30F7F85 		movdqu	%xmm0, -608(%rbp)
+ 6115      A0FDFFFF 
+ 6116 4eb2 F30F6F85 		movdqu	-592(%rbp), %xmm0
+ 6116      B0FDFFFF 
+ 6117 4eba F30F7F85 		movdqu	%xmm0, -560(%rbp)
+ 6117      D0FDFFFF 
+ 6118 4ec2 F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 6118      A0FDFFFF 
+ 6119 4eca F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 6119      C0FDFFFF 
+ 6120              	.LBB1320:
+ 6121              	.LBB1321:
+ 6122              	.LBB1322:
+ 6123              	.LBB1323:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6124              		.loc 3 529 0
+ 6125 4ed2 F30F6F8D 		movdqu	-576(%rbp), %xmm1
+ 6125      C0FDFFFF 
+ 6126 4eda F30F6F85 		movdqu	-560(%rbp), %xmm0
+ 6126      D0FDFFFF 
+ 6127 4ee2 660F3800 		pshufb	%xmm1, %xmm0
+ 6127      C1
+ 6128              	.LBE1323:
+ 6129              	.LBE1322:
+ 6130              	.LBE1321:
+ 6131              	.LBE1320:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 6132              		.loc 2 872 0
+ 6133 4ee7 F30F7F85 		movdqu	%xmm0, -848(%rbp)
+ 6133      B0FCFFFF 
+ 6134 4eef F30F6F85 		movdqu	-864(%rbp), %xmm0
+ 6134      A0FCFFFF 
+ 6135 4ef7 F30F7F85 		movdqu	%xmm0, -528(%rbp)
+ 6135      F0FDFFFF 
+ 6136 4eff F30F6F85 		movdqu	-848(%rbp), %xmm0
+ 6136      B0FCFFFF 
+ 6137 4f07 F30F7F85 		movdqu	%xmm0, -544(%rbp)
+ 6137      E0FDFFFF 
+ 6138              	.LBB1324:
+ 6139              	.LBB1325:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 6140              		.loc 2 234 0
+ 6141 4f0f F30F6F85 		movdqu	-544(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 206
+
+
+ 6141      E0FDFFFF 
+ 6142 4f17 F30F6F8D 		movdqu	-528(%rbp), %xmm1
+ 6142      F0FDFFFF 
+ 6143 4f1f 660FEBC1 		por	%xmm1, %xmm0
+ 6144              	.LBE1325:
+ 6145              	.LBE1324:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 6146              		.loc 2 874 0
+ 6147 4f23 F30F7F85 		movdqu	%xmm0, -864(%rbp)
+ 6147      A0FCFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 6148              		.loc 2 876 0
+ 6149 4f2b 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 6149      00000000 
+ 6150 4f33 F30F6F8D 		movdqu	-832(%rbp), %xmm1
+ 6150      C0FCFFFF 
+ 6151 4f3b F30F7F8D 		movdqu	%xmm1, -496(%rbp)
+ 6151      10FEFFFF 
+ 6152 4f43 F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 6152      00FEFFFF 
+ 6153              	.LBB1326:
+ 6154              	.LBB1327:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 6155              		.loc 2 290 0
+ 6156 4f4b F30F6F8D 		movdqu	-512(%rbp), %xmm1
+ 6156      00FEFFFF 
+ 6157 4f53 F30F6F85 		movdqu	-496(%rbp), %xmm0
+ 6157      10FEFFFF 
+ 6158 4f5b 660FF8C1 		psubb	%xmm1, %xmm0
+ 6159              	.LBE1327:
+ 6160              	.LBE1326:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 6161              		.loc 2 876 0
+ 6162 4f5f F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 6162      C0FCFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 6163              		.loc 2 878 0
+ 6164 4f67 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 6164      00000000 
+ 6165 4f6f F30F6F8D 		movdqu	-832(%rbp), %xmm1
+ 6165      C0FCFFFF 
+ 6166 4f77 F30F7F8D 		movdqu	%xmm1, -464(%rbp)
+ 6166      30FEFFFF 
+ 6167 4f7f F30F7F85 		movdqu	%xmm0, -480(%rbp)
+ 6167      20FEFFFF 
+ 6168              	.LBB1328:
+ 6169              	.LBB1329:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 6170              		.loc 2 206 0
+ 6171 4f87 F30F6F85 		movdqu	-480(%rbp), %xmm0
+ 6171      20FEFFFF 
+ 6172 4f8f F30F6F8D 		movdqu	-464(%rbp), %xmm1
+ 6172      30FEFFFF 
+ 6173 4f97 660FDBC1 		pand	%xmm1, %xmm0
+ 6174              	.LBE1329:
+ 6175              	.LBE1328:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+
GAS LISTING /tmp/ccjbMjHD.s 			page 207
+
+
+ 6176              		.loc 2 878 0
+ 6177 4f9b F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 6177      C0FCFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 6178              		.loc 2 866 0
+ 6179 4fa3 83859CFC 		addl	$1, -868(%rbp)
+ 6179      FFFF01
+ 6180              	.L94:
+ 6181 4faa 83BD9CFC 		cmpl	$15, -868(%rbp)
+ 6181      FFFF0F
+ 6182 4fb1 0F8635FE 		jbe	.L95
+ 6182      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 6183              		.loc 2 882 0
+ 6184 4fb7 F30F6F85 		movdqu	-864(%rbp), %xmm0
+ 6184      A0FCFFFF 
+ 6185              	.LBE1307:
+ 6186              	.LBE1306:
+ 6187              	.LBE1305:
+ 6188              	.LBE1304:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 6189              		.loc 2 1682 0
+ 6190 4fbf 660F7F85 		movdqa	%xmm0, -10688(%rbp)
+ 6190      40D6FFFF 
+ 6191              	.LBB1330:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 6192              		.loc 2 1683 0
+ 6193 4fc7 660F6F85 		movdqa	-10688(%rbp), %xmm0
+ 6193      40D6FFFF 
+ 6194 4fcf F30F7F85 		movdqu	%xmm0, -10000(%rbp)
+ 6194      F0D8FFFF 
+ 6195 4fd7 E8000000 		call	KDbgWriterGet at PLT
+ 6195      00
+ 6196 4fdc 4885C0   		testq	%rax, %rax
+ 6197 4fdf 7479     		je	.L97
+ 6198 4fe1 BF010000 		movl	$1, %edi
+ 6198      00
+ 6199 4fe6 E8000000 		call	KDbgCondToFlag at PLT
+ 6199      00
+ 6200 4feb 4889C6   		movq	%rax, %rsi
+ 6201 4fee BF100000 		movl	$16, %edi
+ 6201      00
+ 6202 4ff3 E8000000 		call	KDbgTestModConds at PLT
+ 6202      00
+ 6203 4ff8 84C0     		testb	%al, %al
+ 6204 4ffa 745E     		je	.L97
+ 6205 4ffc 8B85FCD8 		movl	-9988(%rbp), %eax
+ 6205      FFFF
+ 6206 5002 89C7     		movl	%eax, %edi
+ 6207 5004 E8F7AFFF 		call	bswap_32
+ 6207      FF
+ 6208 5009 4189C5   		movl	%eax, %r13d
+ 6209 500c 8B85F8D8 		movl	-9992(%rbp), %eax
+ 6209      FFFF
+ 6210 5012 89C7     		movl	%eax, %edi
+ 6211 5014 E8E7AFFF 		call	bswap_32
+ 6211      FF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 208
+
+
+ 6212 5019 4189C4   		movl	%eax, %r12d
+ 6213 501c 8B85F4D8 		movl	-9996(%rbp), %eax
+ 6213      FFFF
+ 6214 5022 89C7     		movl	%eax, %edi
+ 6215 5024 E8D7AFFF 		call	bswap_32
+ 6215      FF
+ 6216 5029 89C3     		movl	%eax, %ebx
+ 6217 502b 8B85F0D8 		movl	-10000(%rbp), %eax
+ 6217      FFFF
+ 6218 5031 89C7     		movl	%eax, %edi
+ 6219 5033 E8C8AFFF 		call	bswap_32
+ 6219      FF
+ 6220 5038 4589E9   		movl	%r13d, %r9d
+ 6221 503b 4589E0   		movl	%r12d, %r8d
+ 6222 503e 89D9     		movl	%ebx, %ecx
+ 6223 5040 89C2     		movl	%eax, %edx
+ 6224 5042 488D3500 		leaq	.LC0(%rip), %rsi
+ 6224      000000
+ 6225 5049 488D3D00 		leaq	.LC1(%rip), %rdi
+ 6225      000000
+ 6226 5050 B8000000 		movl	$0, %eax
+ 6226      00
+ 6227 5055 E8000000 		call	KDbgMsg at PLT
+ 6227      00
+ 6228              	.L97:
+ 6229 505a 660F6F85 		movdqa	-10688(%rbp), %xmm0
+ 6229      40D6FFFF 
+ 6230 5062 F30F7F85 		movdqu	%xmm0, -448(%rbp)
+ 6230      40FEFFFF 
+ 6231              	.LBE1330:
+ 6232              	.LBB1331:
+ 6233              	.LBB1332:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 6234              		.loc 2 667 0
+ 6235 506a 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 6235      00000000 
+ 6236 5072 F30F6F8D 		movdqu	-448(%rbp), %xmm1
+ 6236      40FEFFFF 
+ 6237 507a F30F7F8D 		movdqu	%xmm1, -416(%rbp)
+ 6237      60FEFFFF 
+ 6238 5082 F30F7F85 		movdqu	%xmm0, -432(%rbp)
+ 6238      50FEFFFF 
+ 6239 508a F30F6F85 		movdqu	-416(%rbp), %xmm0
+ 6239      60FEFFFF 
+ 6240 5092 F30F7F85 		movdqu	%xmm0, -384(%rbp)
+ 6240      80FEFFFF 
+ 6241 509a F30F6F85 		movdqu	-432(%rbp), %xmm0
+ 6241      50FEFFFF 
+ 6242 50a2 F30F7F85 		movdqu	%xmm0, -400(%rbp)
+ 6242      70FEFFFF 
+ 6243              	.LBB1333:
+ 6244              	.LBB1334:
+ 6245              	.LBB1335:
+ 6246              	.LBB1336:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6247              		.loc 3 529 0
+ 6248 50aa F30F6F8D 		movdqu	-400(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 209
+
+
+ 6248      70FEFFFF 
+ 6249 50b2 F30F6F85 		movdqu	-384(%rbp), %xmm0
+ 6249      80FEFFFF 
+ 6250 50ba 660F3800 		pshufb	%xmm1, %xmm0
+ 6250      C1
+ 6251              	.LBE1336:
+ 6252              	.LBE1335:
+ 6253              	.LBE1334:
+ 6254              	.LBE1333:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 6255              		.loc 2 667 0
+ 6256 50bf F30F7F85 		movdqu	%xmm0, -448(%rbp)
+ 6256      40FEFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 6257              		.loc 2 668 0
+ 6258 50c7 F30F6F85 		movdqu	-448(%rbp), %xmm0
+ 6258      40FEFFFF 
+ 6259              	.LBE1332:
+ 6260              	.LBE1331:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 6261              		.loc 2 1684 0
+ 6262 50cf 660F7F85 		movdqa	%xmm0, -10688(%rbp)
+ 6262      40D6FFFF 
+ 6263              	.LBB1337:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 6264              		.loc 2 1685 0
+ 6265 50d7 660F6F85 		movdqa	-10688(%rbp), %xmm0
+ 6265      40D6FFFF 
+ 6266 50df F30F7F85 		movdqu	%xmm0, -10016(%rbp)
+ 6266      E0D8FFFF 
+ 6267 50e7 E8000000 		call	KDbgWriterGet at PLT
+ 6267      00
+ 6268 50ec 4885C0   		testq	%rax, %rax
+ 6269 50ef 7479     		je	.L99
+ 6270 50f1 BF010000 		movl	$1, %edi
+ 6270      00
+ 6271 50f6 E8000000 		call	KDbgCondToFlag at PLT
+ 6271      00
+ 6272 50fb 4889C6   		movq	%rax, %rsi
+ 6273 50fe BF100000 		movl	$16, %edi
+ 6273      00
+ 6274 5103 E8000000 		call	KDbgTestModConds at PLT
+ 6274      00
+ 6275 5108 84C0     		testb	%al, %al
+ 6276 510a 745E     		je	.L99
+ 6277 510c 8B85ECD8 		movl	-10004(%rbp), %eax
+ 6277      FFFF
+ 6278 5112 89C7     		movl	%eax, %edi
+ 6279 5114 E8E7AEFF 		call	bswap_32
+ 6279      FF
+ 6280 5119 4189C5   		movl	%eax, %r13d
+ 6281 511c 8B85E8D8 		movl	-10008(%rbp), %eax
+ 6281      FFFF
+ 6282 5122 89C7     		movl	%eax, %edi
+ 6283 5124 E8D7AEFF 		call	bswap_32
+ 6283      FF
+ 6284 5129 4189C4   		movl	%eax, %r12d
+
GAS LISTING /tmp/ccjbMjHD.s 			page 210
+
+
+ 6285 512c 8B85E4D8 		movl	-10012(%rbp), %eax
+ 6285      FFFF
+ 6286 5132 89C7     		movl	%eax, %edi
+ 6287 5134 E8C7AEFF 		call	bswap_32
+ 6287      FF
+ 6288 5139 89C3     		movl	%eax, %ebx
+ 6289 513b 8B85E0D8 		movl	-10016(%rbp), %eax
+ 6289      FFFF
+ 6290 5141 89C7     		movl	%eax, %edi
+ 6291 5143 E8B8AEFF 		call	bswap_32
+ 6291      FF
+ 6292 5148 4589E9   		movl	%r13d, %r9d
+ 6293 514b 4589E0   		movl	%r12d, %r8d
+ 6294 514e 89D9     		movl	%ebx, %ecx
+ 6295 5150 89C2     		movl	%eax, %edx
+ 6296 5152 488D3500 		leaq	.LC2(%rip), %rsi
+ 6296      000000
+ 6297 5159 488D3D00 		leaq	.LC1(%rip), %rdi
+ 6297      000000
+ 6298 5160 B8000000 		movl	$0, %eax
+ 6298      00
+ 6299 5165 E8000000 		call	KDbgMsg at PLT
+ 6299      00
+ 6300              	.L99:
+ 6301 516a 660F6F85 		movdqa	-10688(%rbp), %xmm0
+ 6301      40D6FFFF 
+ 6302 5172 F30F7F85 		movdqu	%xmm0, -352(%rbp)
+ 6302      A0FEFFFF 
+ 6303 517a 660F6F85 		movdqa	-10672(%rbp), %xmm0
+ 6303      50D6FFFF 
+ 6304 5182 F30F7F85 		movdqu	%xmm0, -368(%rbp)
+ 6304      90FEFFFF 
+ 6305              	.LBE1337:
+ 6306              	.LBB1338:
+ 6307              	.LBB1339:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 6308              		.loc 2 178 0
+ 6309 518a F30F6F85 		movdqu	-368(%rbp), %xmm0
+ 6309      90FEFFFF 
+ 6310 5192 F30F6F8D 		movdqu	-352(%rbp), %xmm1
+ 6310      A0FEFFFF 
+ 6311 519a 660FEFC1 		pxor	%xmm1, %xmm0
+ 6312              	.LBE1339:
+ 6313              	.LBE1338:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 6314              		.loc 2 1686 0
+ 6315 519e 660F7F85 		movdqa	%xmm0, -10688(%rbp)
+ 6315      40D6FFFF 
+ 6316              	.LBB1340:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 6317              		.loc 2 1687 0
+ 6318 51a6 660F6F85 		movdqa	-10688(%rbp), %xmm0
+ 6318      40D6FFFF 
+ 6319 51ae F30F7F85 		movdqu	%xmm0, -10032(%rbp)
+ 6319      D0D8FFFF 
+ 6320 51b6 E8000000 		call	KDbgWriterGet at PLT
+ 6320      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 211
+
+
+ 6321 51bb 4885C0   		testq	%rax, %rax
+ 6322 51be 7479     		je	.L101
+ 6323 51c0 BF010000 		movl	$1, %edi
+ 6323      00
+ 6324 51c5 E8000000 		call	KDbgCondToFlag at PLT
+ 6324      00
+ 6325 51ca 4889C6   		movq	%rax, %rsi
+ 6326 51cd BF100000 		movl	$16, %edi
+ 6326      00
+ 6327 51d2 E8000000 		call	KDbgTestModConds at PLT
+ 6327      00
+ 6328 51d7 84C0     		testb	%al, %al
+ 6329 51d9 745E     		je	.L101
+ 6330 51db 8B85DCD8 		movl	-10020(%rbp), %eax
+ 6330      FFFF
+ 6331 51e1 89C7     		movl	%eax, %edi
+ 6332 51e3 E818AEFF 		call	bswap_32
+ 6332      FF
+ 6333 51e8 4189C5   		movl	%eax, %r13d
+ 6334 51eb 8B85D8D8 		movl	-10024(%rbp), %eax
+ 6334      FFFF
+ 6335 51f1 89C7     		movl	%eax, %edi
+ 6336 51f3 E808AEFF 		call	bswap_32
+ 6336      FF
+ 6337 51f8 4189C4   		movl	%eax, %r12d
+ 6338 51fb 8B85D4D8 		movl	-10028(%rbp), %eax
+ 6338      FFFF
+ 6339 5201 89C7     		movl	%eax, %edi
+ 6340 5203 E8F8ADFF 		call	bswap_32
+ 6340      FF
+ 6341 5208 89C3     		movl	%eax, %ebx
+ 6342 520a 8B85D0D8 		movl	-10032(%rbp), %eax
+ 6342      FFFF
+ 6343 5210 89C7     		movl	%eax, %edi
+ 6344 5212 E8E9ADFF 		call	bswap_32
+ 6344      FF
+ 6345 5217 4589E9   		movl	%r13d, %r9d
+ 6346 521a 4589E0   		movl	%r12d, %r8d
+ 6347 521d 89D9     		movl	%ebx, %ecx
+ 6348 521f 89C2     		movl	%eax, %edx
+ 6349 5221 488D3500 		leaq	.LC3(%rip), %rsi
+ 6349      000000
+ 6350 5228 488D3D00 		leaq	.LC1(%rip), %rdi
+ 6350      000000
+ 6351 522f B8000000 		movl	$0, %eax
+ 6351      00
+ 6352 5234 E8000000 		call	KDbgMsg at PLT
+ 6352      00
+ 6353              	.L101:
+ 6354 5239 660F6F85 		movdqa	-10688(%rbp), %xmm0
+ 6354      40D6FFFF 
+ 6355 5241 F30F7F85 		movdqu	%xmm0, -336(%rbp)
+ 6355      B0FEFFFF 
+ 6356 5249 F30F6F85 		movdqu	-336(%rbp), %xmm0
+ 6356      B0FEFFFF 
+ 6357 5251 F30F7F85 		movdqu	%xmm0, -304(%rbp)
+ 6357      D0FEFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 212
+
+
+ 6358              	.LBE1340:
+ 6359              	.LBB1341:
+ 6360              	.LBB1342:
+ 6361              	.LBB1343:
+ 6362              	.LBB1344:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 6363              		.loc 3 450 0
+ 6364 5259 F30F6F85 		movdqu	-304(%rbp), %xmm0
+ 6364      D0FEFFFF 
+ 6365 5261 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 6365      FF
+ 6366              	.LBE1344:
+ 6367              	.LBE1343:
+ 6368              	.LBE1342:
+ 6369              	.LBE1341:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 6370              		.loc 2 1688 0
+ 6371 5266 660F7F85 		movdqa	%xmm0, -10688(%rbp)
+ 6371      40D6FFFF 
+ 6372              	.LBB1345:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 6373              		.loc 2 1689 0
+ 6374 526e 660F6F85 		movdqa	-10688(%rbp), %xmm0
+ 6374      40D6FFFF 
+ 6375 5276 F30F7F85 		movdqu	%xmm0, -10048(%rbp)
+ 6375      C0D8FFFF 
+ 6376 527e E8000000 		call	KDbgWriterGet at PLT
+ 6376      00
+ 6377 5283 4885C0   		testq	%rax, %rax
+ 6378 5286 7479     		je	.L103
+ 6379 5288 BF010000 		movl	$1, %edi
+ 6379      00
+ 6380 528d E8000000 		call	KDbgCondToFlag at PLT
+ 6380      00
+ 6381 5292 4889C6   		movq	%rax, %rsi
+ 6382 5295 BF100000 		movl	$16, %edi
+ 6382      00
+ 6383 529a E8000000 		call	KDbgTestModConds at PLT
+ 6383      00
+ 6384 529f 84C0     		testb	%al, %al
+ 6385 52a1 745E     		je	.L103
+ 6386 52a3 8B85CCD8 		movl	-10036(%rbp), %eax
+ 6386      FFFF
+ 6387 52a9 89C7     		movl	%eax, %edi
+ 6388 52ab E850ADFF 		call	bswap_32
+ 6388      FF
+ 6389 52b0 4189C5   		movl	%eax, %r13d
+ 6390 52b3 8B85C8D8 		movl	-10040(%rbp), %eax
+ 6390      FFFF
+ 6391 52b9 89C7     		movl	%eax, %edi
+ 6392 52bb E840ADFF 		call	bswap_32
+ 6392      FF
+ 6393 52c0 4189C4   		movl	%eax, %r12d
+ 6394 52c3 8B85C4D8 		movl	-10044(%rbp), %eax
+ 6394      FFFF
+ 6395 52c9 89C7     		movl	%eax, %edi
+ 6396 52cb E830ADFF 		call	bswap_32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 213
+
+
+ 6396      FF
+ 6397 52d0 89C3     		movl	%eax, %ebx
+ 6398 52d2 8B85C0D8 		movl	-10048(%rbp), %eax
+ 6398      FFFF
+ 6399 52d8 89C7     		movl	%eax, %edi
+ 6400 52da E821ADFF 		call	bswap_32
+ 6400      FF
+ 6401 52df 4589E9   		movl	%r13d, %r9d
+ 6402 52e2 4589E0   		movl	%r12d, %r8d
+ 6403 52e5 89D9     		movl	%ebx, %ecx
+ 6404 52e7 89C2     		movl	%eax, %edx
+ 6405 52e9 488D3500 		leaq	.LC4(%rip), %rsi
+ 6405      000000
+ 6406 52f0 488D3D00 		leaq	.LC1(%rip), %rdi
+ 6406      000000
+ 6407 52f7 B8000000 		movl	$0, %eax
+ 6407      00
+ 6408 52fc E8000000 		call	KDbgMsg at PLT
+ 6408      00
+ 6409              	.L103:
+ 6410              	.LBE1345:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 6411              		.loc 2 1690 0
+ 6412 5301 660F6F85 		movdqa	-10688(%rbp), %xmm0
+ 6412      40D6FFFF 
+ 6413              	.LBE1299:
+ 6414              	.LBE1298:
+1753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE128(0x36,10);
+ 6415              		.loc 2 1753 0
+ 6416 5309 F30F7F85 		movdqu	%xmm0, -9968(%rbp)
+ 6416      10D9FFFF 
+ 6417 5311 F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 6417      00D9FFFF 
+ 6418 5319 F30F7F85 		movdqu	%xmm0, -288(%rbp)
+ 6418      E0FEFFFF 
+ 6419              	.LBB1346:
+ 6420              	.LBB1347:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 6421              		.loc 2 1565 0
+ 6422 5321 F30F6F85 		movdqu	-288(%rbp), %xmm0
+ 6422      E0FEFFFF 
+ 6423 5329 660F7F85 		movdqa	%xmm0, -10656(%rbp)
+ 6423      60D6FFFF 
+ 6424 5331 660F6F85 		movdqa	-10656(%rbp), %xmm0
+ 6424      60D6FFFF 
+ 6425 5339 F30F7F85 		movdqu	%xmm0, -272(%rbp)
+ 6425      F0FEFFFF 
+ 6426              	.LBB1348:
+ 6427              	.LBB1349:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6428              		.loc 2 1278 0
+ 6429 5341 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 6429      00000000 
+ 6430 5349 F30F6F8D 		movdqu	-272(%rbp), %xmm1
+ 6430      F0FEFFFF 
+ 6431 5351 F30F7F8D 		movdqu	%xmm1, -240(%rbp)
+ 6431      10FFFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 214
+
+
+ 6432 5359 F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 6432      00FFFFFF 
+ 6433 5361 F30F6F85 		movdqu	-240(%rbp), %xmm0
+ 6433      10FFFFFF 
+ 6434 5369 F30F7F85 		movdqu	%xmm0, -208(%rbp)
+ 6434      30FFFFFF 
+ 6435 5371 F30F6F85 		movdqu	-256(%rbp), %xmm0
+ 6435      00FFFFFF 
+ 6436 5379 F30F7F85 		movdqu	%xmm0, -224(%rbp)
+ 6436      20FFFFFF 
+ 6437              	.LBB1350:
+ 6438              	.LBB1351:
+ 6439              	.LBB1352:
+ 6440              	.LBB1353:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6441              		.loc 3 529 0
+ 6442 5381 F30F6F8D 		movdqu	-224(%rbp), %xmm1
+ 6442      20FFFFFF 
+ 6443 5389 F30F6F85 		movdqu	-208(%rbp), %xmm0
+ 6443      30FFFFFF 
+ 6444 5391 660F3800 		pshufb	%xmm1, %xmm0
+ 6444      C1
+ 6445              	.LBE1353:
+ 6446              	.LBE1352:
+ 6447              	.LBE1351:
+ 6448              	.LBE1350:
+ 6449              	.LBE1349:
+ 6450              	.LBE1348:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6451              		.loc 2 1567 0
+ 6452 5396 660F7F85 		movdqa	%xmm0, -10656(%rbp)
+ 6452      60D6FFFF 
+ 6453 539e 660F6F85 		movdqa	-10656(%rbp), %xmm0
+ 6453      60D6FFFF 
+ 6454 53a6 660FEF85 		pxor	-288(%rbp), %xmm0
+ 6454      E0FEFFFF 
+ 6455 53ae F30F7F85 		movdqu	%xmm0, -288(%rbp)
+ 6455      E0FEFFFF 
+ 6456 53b6 660F6F85 		movdqa	-10656(%rbp), %xmm0
+ 6456      60D6FFFF 
+ 6457 53be F30F7F85 		movdqu	%xmm0, -192(%rbp)
+ 6457      40FFFFFF 
+ 6458              	.LBB1354:
+ 6459              	.LBB1355:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6460              		.loc 2 1278 0
+ 6461 53c6 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 6461      00000000 
+ 6462 53ce F30F6F8D 		movdqu	-192(%rbp), %xmm1
+ 6462      40FFFFFF 
+ 6463 53d6 F30F7F8D 		movdqu	%xmm1, -160(%rbp)
+ 6463      60FFFFFF 
+ 6464 53de F30F7F85 		movdqu	%xmm0, -176(%rbp)
+ 6464      50FFFFFF 
+ 6465 53e6 F30F6F85 		movdqu	-160(%rbp), %xmm0
+ 6465      60FFFFFF 
+ 6466 53ee F30F7F45 		movdqu	%xmm0, -128(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 215
+
+
+ 6466      80
+ 6467 53f3 F30F6F85 		movdqu	-176(%rbp), %xmm0
+ 6467      50FFFFFF 
+ 6468 53fb F30F7F85 		movdqu	%xmm0, -144(%rbp)
+ 6468      70FFFFFF 
+ 6469              	.LBB1356:
+ 6470              	.LBB1357:
+ 6471              	.LBB1358:
+ 6472              	.LBB1359:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6473              		.loc 3 529 0
+ 6474 5403 F30F6F8D 		movdqu	-144(%rbp), %xmm1
+ 6474      70FFFFFF 
+ 6475 540b F30F6F45 		movdqu	-128(%rbp), %xmm0
+ 6475      80
+ 6476 5410 660F3800 		pshufb	%xmm1, %xmm0
+ 6476      C1
+ 6477              	.LBE1359:
+ 6478              	.LBE1358:
+ 6479              	.LBE1357:
+ 6480              	.LBE1356:
+ 6481              	.LBE1355:
+ 6482              	.LBE1354:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6483              		.loc 2 1568 0
+ 6484 5415 660F7F85 		movdqa	%xmm0, -10656(%rbp)
+ 6484      60D6FFFF 
+ 6485 541d 660F6F85 		movdqa	-10656(%rbp), %xmm0
+ 6485      60D6FFFF 
+ 6486 5425 660FEF85 		pxor	-288(%rbp), %xmm0
+ 6486      E0FEFFFF 
+ 6487 542d F30F7F85 		movdqu	%xmm0, -288(%rbp)
+ 6487      E0FEFFFF 
+ 6488 5435 660F6F85 		movdqa	-10656(%rbp), %xmm0
+ 6488      60D6FFFF 
+ 6489 543d F30F7F45 		movdqu	%xmm0, -112(%rbp)
+ 6489      90
+ 6490              	.LBB1360:
+ 6491              	.LBB1361:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6492              		.loc 2 1278 0
+ 6493 5442 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 6493      00000000 
+ 6494 544a F30F6F4D 		movdqu	-112(%rbp), %xmm1
+ 6494      90
+ 6495 544f F30F7F4D 		movdqu	%xmm1, -80(%rbp)
+ 6495      B0
+ 6496 5454 F30F7F45 		movdqu	%xmm0, -96(%rbp)
+ 6496      A0
+ 6497 5459 F30F6F45 		movdqu	-80(%rbp), %xmm0
+ 6497      B0
+ 6498 545e F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 6498      D0
+ 6499 5463 F30F6F45 		movdqu	-96(%rbp), %xmm0
+ 6499      A0
+ 6500 5468 F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 6500      C0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 216
+
+
+ 6501              	.LBB1362:
+ 6502              	.LBB1363:
+ 6503              	.LBB1364:
+ 6504              	.LBB1365:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6505              		.loc 3 529 0
+ 6506 546d F30F6F4D 		movdqu	-64(%rbp), %xmm1
+ 6506      C0
+ 6507 5472 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 6507      D0
+ 6508 5477 660F3800 		pshufb	%xmm1, %xmm0
+ 6508      C1
+ 6509              	.LBE1365:
+ 6510              	.LBE1364:
+ 6511              	.LBE1363:
+ 6512              	.LBE1362:
+ 6513              	.LBE1361:
+ 6514              	.LBE1360:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6515              		.loc 2 1569 0
+ 6516 547c 660F7F85 		movdqa	%xmm0, -10656(%rbp)
+ 6516      60D6FFFF 
+ 6517 5484 660F6F85 		movdqa	-10656(%rbp), %xmm0
+ 6517      60D6FFFF 
+ 6518 548c 660FEF85 		pxor	-288(%rbp), %xmm0
+ 6518      E0FEFFFF 
+ 6519 5494 F30F7F85 		movdqu	%xmm0, -288(%rbp)
+ 6519      E0FEFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 6520              		.loc 2 1571 0
+ 6521 549c F30F6F85 		movdqu	-288(%rbp), %xmm0
+ 6521      E0FEFFFF 
+ 6522              	.LBE1347:
+ 6523              	.LBE1346:
+ 6524              		.loc 2 1753 0
+ 6525 54a4 F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+ 6525      00D9FFFF 
+ 6526 54ac F30F6F85 		movdqu	-9968(%rbp), %xmm0
+ 6526      10D9FFFF 
+ 6527 54b4 F30F6F8D 		movdqu	-9984(%rbp), %xmm1
+ 6527      00D9FFFF 
+ 6528 54bc 660FEFC1 		pxor	%xmm1, %xmm0
+ 6529 54c0 F30F7F85 		movdqu	%xmm0, -9984(%rbp)
+ 6529      00D9FFFF 
+ 6530 54c8 488B8578 		movq	-10632(%rbp), %rax
+ 6530      D6FFFF
+ 6531 54cf 4805A000 		addq	$160, %rax
+ 6531      0000
+ 6532 54d5 F30F6F85 		movdqu	-9984(%rbp), %xmm0
+ 6532      00D9FFFF 
+ 6533 54dd F30F7F00 		movdqu	%xmm0, (%rax)
+1754:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 6534              		.loc 2 1754 0
+ 6535 54e1 4881C468 		addq	$11112, %rsp
+ 6535      2B0000
+ 6536 54e8 5B       		popq	%rbx
+ 6537 54e9 415C     		popq	%r12
+
GAS LISTING /tmp/ccjbMjHD.s 			page 217
+
+
+ 6538 54eb 415D     		popq	%r13
+ 6539 54ed C9       		leave
+ 6540 54ee C3       		ret
+ 6541              		.cfi_endproc
+ 6542              	.LFE645:
+ 6543              		.size	KAESBlockCipherVecRegKeyExpansion128, .-KAESBlockCipherVecRegKeyExpansion128
+ 6544              		.type	KAESBlockCipherVecRegKeyExpansion192, @function
+ 6545              	KAESBlockCipherVecRegKeyExpansion192:
+ 6546              	.LFB646:
+1755:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1756:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1757:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion128) (CipherVec * w, const AESByte * key)
+1758:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1759:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     OUTMSG(("\n\n\n%s: Not my code\n\n\n",__func__));
+1760:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_128, AES_Nk_128);
+1761:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1762:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1763:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1764:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1765:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC
+1766:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1767:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion192) (CipherVec * round_keys, const AESByte * key)
+1768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 6547              		.loc 2 1768 0
+ 6548              		.cfi_startproc
+ 6549 54ef 55       		pushq	%rbp
+ 6550              	.LCFI4:
+ 6551              		.cfi_def_cfa_offset 16
+ 6552 54f0 4889E5   		movq	%rsp, %rbp
+ 6553              		.cfi_offset 6, -16
+ 6554              	.LCFI5:
+ 6555              		.cfi_def_cfa_register 6
+ 6556 54f3 4155     		pushq	%r13
+ 6557 54f5 4154     		pushq	%r12
+ 6558 54f7 53       		pushq	%rbx
+ 6559 54f8 4881EC38 		subq	$9016, %rsp
+ 6559      230000
+ 6560 54ff 4889BDA8 		movq	%rdi, -8536(%rbp)
+ 6560      DEFFFF
+ 6561 5506 4889B5A0 		movq	%rsi, -8544(%rbp)
+ 6561      DEFFFF
+ 6562              		.loc 2 1768 0
+ 6563 550d 488B85A0 		movq	-8544(%rbp), %rax
+ 6563      DEFFFF
+ 6564 5514 48898530 		movq	%rax, -8144(%rbp)
+ 6564      E0FFFF
+ 6565              	.LBB1952:
+ 6566              	.LBB1953:
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __asm__ (
+ 6567              		.loc 2 126 0
+ 6568 551b 488B8530 		movq	-8144(%rbp), %rax
+ 6568      E0FFFF
+ 6569 5522 4889C7   		movq	%rax, %rdi
+ 6570              	#APP
+ 6571              	# 126 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 6572              		movdqu (%rdi),%xmm0
+ 6573              	# 0 "" 2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 218
+
+
+ 6574              	#NO_APP
+ 6575 5529 660F7F85 		movdqa	%xmm0, -8944(%rbp)
+ 6575      10DDFFFF 
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vec;
+ 6576              		.loc 2 129 0
+ 6577 5531 660F6F85 		movdqa	-8944(%rbp), %xmm0
+ 6577      10DDFFFF 
+ 6578              	.LBE1953:
+ 6579              	.LBE1952:
+1769:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /* work on three blocks at a time which is two Nr worth
+1770:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * we'll build it with 6 words in v0:v1 and 6 words in w0:w1
+1771:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * but move them them into v0:v1:v2 before writing them to
+1772:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * the key schedule
+1773:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      */
+1774:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1775:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec v0, v1, v2, v3, v4;
+1776:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec k;          /* we'll only need one of the key gen assist blocks at a time */
+1777:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1778:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 0 */
+1779:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(StateIn) (key);              /* k0    : k1    : k2     : k3           */
+ 6580              		.loc 2 1779 0
+ 6581 5539 660F7F85 		movdqa	%xmm0, -9040(%rbp)
+ 6581      B0DCFFFF 
+1780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateIn) (key+8);            /* k2    : k3    : k4     : k5           */
+ 6582              		.loc 2 1780 0
+ 6583 5541 488B85A0 		movq	-8544(%rbp), %rax
+ 6583      DEFFFF
+ 6584 5548 4883C008 		addq	$8, %rax
+ 6585 554c 48898538 		movq	%rax, -8136(%rbp)
+ 6585      E0FFFF
+ 6586              	.LBB1954:
+ 6587              	.LBB1955:
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __asm__ (
+ 6588              		.loc 2 126 0
+ 6589 5553 488B8538 		movq	-8136(%rbp), %rax
+ 6589      E0FFFF
+ 6590 555a 4889C7   		movq	%rax, %rdi
+ 6591              	#APP
+ 6592              	# 126 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 6593              		movdqu (%rdi),%xmm0
+ 6594              	# 0 "" 2
+ 6595              	#NO_APP
+ 6596 5561 660F7F85 		movdqa	%xmm0, -8928(%rbp)
+ 6596      20DDFFFF 
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vec;
+ 6597              		.loc 2 129 0
+ 6598 5569 660F6F85 		movdqa	-8928(%rbp), %xmm0
+ 6598      20DDFFFF 
+ 6599              	.LBE1955:
+ 6600              	.LBE1954:
+ 6601              		.loc 2 1780 0
+ 6602 5571 660F7F85 		movdqa	%xmm0, -9024(%rbp)
+ 6602      C0DCFFFF 
+ 6603 5579 660F6F95 		movdqa	-9024(%rbp), %xmm2
+ 6603      C0DCFFFF 
+ 6604 5581 F30F7F95 		movdqu	%xmm2, -8128(%rbp)
+ 6604      40E0FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 219
+
+
+ 6605              	.LBB1956:
+ 6606              	.LBB1957:
+1301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6607              		.loc 2 1301 0
+ 6608 5589 660F6F05 		movdqa	mask.7952(%rip), %xmm0
+ 6608      00000000 
+ 6609 5591 F30F6F8D 		movdqu	-8128(%rbp), %xmm1
+ 6609      40E0FFFF 
+ 6610 5599 F30F7F8D 		movdqu	%xmm1, -8096(%rbp)
+ 6610      60E0FFFF 
+ 6611 55a1 F30F7F85 		movdqu	%xmm0, -8112(%rbp)
+ 6611      50E0FFFF 
+ 6612 55a9 F30F6F85 		movdqu	-8096(%rbp), %xmm0
+ 6612      60E0FFFF 
+ 6613 55b1 F30F7F85 		movdqu	%xmm0, -8064(%rbp)
+ 6613      80E0FFFF 
+ 6614 55b9 F30F6F85 		movdqu	-8112(%rbp), %xmm0
+ 6614      50E0FFFF 
+ 6615 55c1 F30F7F85 		movdqu	%xmm0, -8080(%rbp)
+ 6615      70E0FFFF 
+ 6616              	.LBB1958:
+ 6617              	.LBB1959:
+ 6618              	.LBB1960:
+ 6619              	.LBB1961:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6620              		.loc 3 529 0
+ 6621 55c9 F30F6F8D 		movdqu	-8080(%rbp), %xmm1
+ 6621      70E0FFFF 
+ 6622 55d1 F30F6F85 		movdqu	-8064(%rbp), %xmm0
+ 6622      80E0FFFF 
+ 6623 55d9 660F3800 		pshufb	%xmm1, %xmm0
+ 6623      C1
+ 6624              	.LBE1961:
+ 6625              	.LBE1960:
+ 6626              	.LBE1959:
+ 6627              	.LBE1958:
+ 6628              	.LBE1957:
+ 6629              	.LBE1956:
+1781:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateShiftRight64) (v1);     /* k4    : k5    : 0      : 0            */
+ 6630              		.loc 2 1781 0
+ 6631 55de 660F7F85 		movdqa	%xmm0, -9024(%rbp)
+ 6631      C0DCFFFF 
+1782:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1783:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[0] = v0; /* K0:K1:K2:K3 */
+ 6632              		.loc 2 1783 0
+ 6633 55e6 488B85A8 		movq	-8536(%rbp), %rax
+ 6633      DEFFFF
+ 6634 55ed 660F6F85 		movdqa	-9040(%rbp), %xmm0
+ 6634      B0DCFFFF 
+ 6635 55f5 660F7F00 		movdqa	%xmm0, (%rax)
+1784:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1785:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 */
+1786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1787:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 6636              		.loc 2 1788 0
+ 6637 55f9 660F6F95 		movdqa	-9024(%rbp), %xmm2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 220
+
+
+ 6637      C0DCFFFF 
+ 6638 5601 660F7F95 		movdqa	%xmm2, -8960(%rbp)
+ 6638      00DDFFFF 
+ 6639 5609 660F6F85 		movdqa	-8960(%rbp), %xmm0
+ 6639      00DDFFFF 
+ 6640 5611 F30F7F85 		movdqu	%xmm0, -8032(%rbp)
+ 6640      A0E0FFFF 
+ 6641              	.LBB1962:
+ 6642              	.LBB1963:
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rconw = (AESWord)(AESByte)rcon;
+ 6643              		.loc 2 1629 0
+ 6644 5619 B8010000 		movl	$1, %eax
+ 6644      00
+ 6645 561e 0FB6C0   		movzbl	%al, %eax
+ 6646 5621 8985C0E0 		movl	%eax, -8000(%rbp)
+ 6646      FFFF
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 6647              		.loc 2 1630 0
+ 6648 5627 F30F6F85 		movdqu	-8032(%rbp), %xmm0
+ 6648      A0E0FFFF 
+ 6649 562f F30F7F85 		movdqu	%xmm0, -8512(%rbp)
+ 6649      C0DEFFFF 
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[1]);
+ 6650              		.loc 2 1631 0
+ 6651 5637 8B85C4DE 		movl	-8508(%rbp), %eax
+ 6651      FFFF
+ 6652 563d 8985C4E0 		movl	%eax, -7996(%rbp)
+ 6652      FFFF
+ 6653              	.LBB1964:
+ 6654              	.LBB1965:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 6655              		.loc 2 740 0
+ 6656 5643 8B85C4E0 		movl	-7996(%rbp), %eax
+ 6656      FFFF
+ 6657 5649 8985B0DE 		movl	%eax, -8528(%rbp)
+ 6657      FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 6658              		.loc 2 741 0
+ 6659 564f C785C8E0 		movl	$0, -7992(%rbp)
+ 6659      FFFF0000 
+ 6659      0000
+ 6660 5659 EB36     		jmp	.L106
+ 6661              		.cfi_offset 3, -40
+ 6662              		.cfi_offset 12, -32
+ 6663              		.cfi_offset 13, -24
+ 6664              	.L107:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 6665              		.loc 2 742 0
+ 6666 565b 8B8DC8E0 		movl	-7992(%rbp), %ecx
+ 6666      FFFF
+ 6667 5661 8B85C8E0 		movl	-7992(%rbp), %eax
+ 6667      FFFF
+ 6668 5667 89C0     		mov	%eax, %eax
+ 6669 5669 0FB68405 		movzbl	-8528(%rbp,%rax), %eax
+ 6669      B0DEFFFF 
+ 6670 5671 0FB6C0   		movzbl	%al, %eax
+ 6671 5674 89C2     		mov	%eax, %edx
+
GAS LISTING /tmp/ccjbMjHD.s 			page 221
+
+
+ 6672 5676 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBox(%rip), %rax
+ 6672      000000
+ 6673 567d 0FB61402 		movzbl	(%rdx,%rax), %edx
+ 6674 5681 89C8     		mov	%ecx, %eax
+ 6675 5683 889405B0 		movb	%dl, -8528(%rbp,%rax)
+ 6675      DEFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 6676              		.loc 2 741 0
+ 6677 568a 8385C8E0 		addl	$1, -7992(%rbp)
+ 6677      FFFF01
+ 6678              	.L106:
+ 6679 5691 83BDC8E0 		cmpl	$3, -7992(%rbp)
+ 6679      FFFF03
+ 6680 5698 76C1     		jbe	.L107
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 6681              		.loc 2 743 0
+ 6682 569a 8B85B0DE 		movl	-8528(%rbp), %eax
+ 6682      FFFF
+ 6683              	.LBE1965:
+ 6684              	.LBE1964:
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[1]);
+ 6685              		.loc 2 1631 0
+ 6686 56a0 8985BCE0 		movl	%eax, -8004(%rbp)
+ 6686      FFFF
+ 6687 56a6 8B85BCE0 		movl	-8004(%rbp), %eax
+ 6687      FFFF
+ 6688 56ac 8985CCE0 		movl	%eax, -7988(%rbp)
+ 6688      FFFF
+ 6689              	.LBB1966:
+ 6690              	.LBB1967:
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (w >> 8) | (w << 24);
+ 6691              		.loc 2 1196 0
+ 6692 56b2 8B85CCE0 		movl	-7988(%rbp), %eax
+ 6692      FFFF
+ 6693 56b8 C1C808   		rorl	$8, %eax
+ 6694              	.LBE1967:
+ 6695              	.LBE1966:
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(RotWord)(temp);
+ 6696              		.loc 2 1632 0
+ 6697 56bb 8985BCE0 		movl	%eax, -8004(%rbp)
+ 6697      FFFF
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp ^= rconw;
+ 6698              		.loc 2 1633 0
+ 6699 56c1 8B85C0E0 		movl	-8000(%rbp), %eax
+ 6699      FFFF
+ 6700 56c7 3185BCE0 		xorl	%eax, -8004(%rbp)
+ 6700      FFFF
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 6701              		.loc 2 1635 0
+ 6702 56cd 8B85BCE0 		movl	-8004(%rbp), %eax
+ 6702      FFFF
+ 6703 56d3 8985CCDE 		movl	%eax, -8500(%rbp)
+ 6703      FFFF
+ 6704 56d9 8B85CCDE 		movl	-8500(%rbp), %eax
+ 6704      FFFF
+ 6705 56df 8985C8DE 		movl	%eax, -8504(%rbp)
+ 6705      FFFF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 222
+
+
+ 6706 56e5 8B85C8DE 		movl	-8504(%rbp), %eax
+ 6706      FFFF
+ 6707 56eb 8985C4DE 		movl	%eax, -8508(%rbp)
+ 6707      FFFF
+ 6708 56f1 8B85C4DE 		movl	-8508(%rbp), %eax
+ 6708      FFFF
+ 6709 56f7 8985C0DE 		movl	%eax, -8512(%rbp)
+ 6709      FFFF
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 6710              		.loc 2 1636 0
+ 6711 56fd F30F6F85 		movdqu	-8512(%rbp), %xmm0
+ 6711      C0DEFFFF 
+ 6712              	.LBE1963:
+ 6713              	.LBE1962:
+ 6714              		.loc 2 1788 0
+ 6715 5705 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 6715      00DDFFFF 
+ 6716 570d 660F6F95 		movdqa	-9040(%rbp), %xmm2
+ 6716      B0DCFFFF 
+ 6717 5715 F30F7F95 		movdqu	%xmm2, -7984(%rbp)
+ 6717      D0E0FFFF 
+ 6718              	.LBB1968:
+ 6719              	.LBB1969:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 6720              		.loc 2 1565 0
+ 6721 571d F30F6F85 		movdqu	-7984(%rbp), %xmm0
+ 6721      D0E0FFFF 
+ 6722 5725 660F7F85 		movdqa	%xmm0, -8912(%rbp)
+ 6722      30DDFFFF 
+ 6723 572d 660F6F95 		movdqa	-8912(%rbp), %xmm2
+ 6723      30DDFFFF 
+ 6724 5735 F30F7F95 		movdqu	%xmm2, -7968(%rbp)
+ 6724      E0E0FFFF 
+ 6725              	.LBB1970:
+ 6726              	.LBB1971:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6727              		.loc 2 1278 0
+ 6728 573d 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 6728      00000000 
+ 6729 5745 F30F6F8D 		movdqu	-7968(%rbp), %xmm1
+ 6729      E0E0FFFF 
+ 6730 574d F30F7F8D 		movdqu	%xmm1, -7936(%rbp)
+ 6730      00E1FFFF 
+ 6731 5755 F30F7F85 		movdqu	%xmm0, -7952(%rbp)
+ 6731      F0E0FFFF 
+ 6732 575d F30F6F85 		movdqu	-7936(%rbp), %xmm0
+ 6732      00E1FFFF 
+ 6733 5765 F30F7F85 		movdqu	%xmm0, -7904(%rbp)
+ 6733      20E1FFFF 
+ 6734 576d F30F6F85 		movdqu	-7952(%rbp), %xmm0
+ 6734      F0E0FFFF 
+ 6735 5775 F30F7F85 		movdqu	%xmm0, -7920(%rbp)
+ 6735      10E1FFFF 
+ 6736              	.LBB1972:
+ 6737              	.LBB1973:
+ 6738              	.LBB1974:
+ 6739              	.LBB1975:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 223
+
+
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6740              		.loc 3 529 0
+ 6741 577d F30F6F8D 		movdqu	-7920(%rbp), %xmm1
+ 6741      10E1FFFF 
+ 6742 5785 F30F6F85 		movdqu	-7904(%rbp), %xmm0
+ 6742      20E1FFFF 
+ 6743 578d 660F3800 		pshufb	%xmm1, %xmm0
+ 6743      C1
+ 6744              	.LBE1975:
+ 6745              	.LBE1974:
+ 6746              	.LBE1973:
+ 6747              	.LBE1972:
+ 6748              	.LBE1971:
+ 6749              	.LBE1970:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6750              		.loc 2 1567 0
+ 6751 5792 660F7F85 		movdqa	%xmm0, -8912(%rbp)
+ 6751      30DDFFFF 
+ 6752 579a 660F6F85 		movdqa	-8912(%rbp), %xmm0
+ 6752      30DDFFFF 
+ 6753 57a2 660FEF85 		pxor	-7984(%rbp), %xmm0
+ 6753      D0E0FFFF 
+ 6754 57aa F30F7F85 		movdqu	%xmm0, -7984(%rbp)
+ 6754      D0E0FFFF 
+ 6755 57b2 660F6F85 		movdqa	-8912(%rbp), %xmm0
+ 6755      30DDFFFF 
+ 6756 57ba F30F7F85 		movdqu	%xmm0, -7888(%rbp)
+ 6756      30E1FFFF 
+ 6757              	.LBB1976:
+ 6758              	.LBB1977:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6759              		.loc 2 1278 0
+ 6760 57c2 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 6760      00000000 
+ 6761 57ca F30F6F8D 		movdqu	-7888(%rbp), %xmm1
+ 6761      30E1FFFF 
+ 6762 57d2 F30F7F8D 		movdqu	%xmm1, -7856(%rbp)
+ 6762      50E1FFFF 
+ 6763 57da F30F7F85 		movdqu	%xmm0, -7872(%rbp)
+ 6763      40E1FFFF 
+ 6764 57e2 F30F6F85 		movdqu	-7856(%rbp), %xmm0
+ 6764      50E1FFFF 
+ 6765 57ea F30F7F85 		movdqu	%xmm0, -7824(%rbp)
+ 6765      70E1FFFF 
+ 6766 57f2 F30F6F85 		movdqu	-7872(%rbp), %xmm0
+ 6766      40E1FFFF 
+ 6767 57fa F30F7F85 		movdqu	%xmm0, -7840(%rbp)
+ 6767      60E1FFFF 
+ 6768              	.LBB1978:
+ 6769              	.LBB1979:
+ 6770              	.LBB1980:
+ 6771              	.LBB1981:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6772              		.loc 3 529 0
+ 6773 5802 F30F6F8D 		movdqu	-7840(%rbp), %xmm1
+ 6773      60E1FFFF 
+ 6774 580a F30F6F85 		movdqu	-7824(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 224
+
+
+ 6774      70E1FFFF 
+ 6775 5812 660F3800 		pshufb	%xmm1, %xmm0
+ 6775      C1
+ 6776              	.LBE1981:
+ 6777              	.LBE1980:
+ 6778              	.LBE1979:
+ 6779              	.LBE1978:
+ 6780              	.LBE1977:
+ 6781              	.LBE1976:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6782              		.loc 2 1568 0
+ 6783 5817 660F7F85 		movdqa	%xmm0, -8912(%rbp)
+ 6783      30DDFFFF 
+ 6784 581f 660F6F85 		movdqa	-8912(%rbp), %xmm0
+ 6784      30DDFFFF 
+ 6785 5827 660FEF85 		pxor	-7984(%rbp), %xmm0
+ 6785      D0E0FFFF 
+ 6786 582f F30F7F85 		movdqu	%xmm0, -7984(%rbp)
+ 6786      D0E0FFFF 
+ 6787 5837 660F6F95 		movdqa	-8912(%rbp), %xmm2
+ 6787      30DDFFFF 
+ 6788 583f F30F7F95 		movdqu	%xmm2, -7808(%rbp)
+ 6788      80E1FFFF 
+ 6789              	.LBB1982:
+ 6790              	.LBB1983:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6791              		.loc 2 1278 0
+ 6792 5847 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 6792      00000000 
+ 6793 584f F30F6F8D 		movdqu	-7808(%rbp), %xmm1
+ 6793      80E1FFFF 
+ 6794 5857 F30F7F8D 		movdqu	%xmm1, -7776(%rbp)
+ 6794      A0E1FFFF 
+ 6795 585f F30F7F85 		movdqu	%xmm0, -7792(%rbp)
+ 6795      90E1FFFF 
+ 6796 5867 F30F6F85 		movdqu	-7776(%rbp), %xmm0
+ 6796      A0E1FFFF 
+ 6797 586f F30F7F85 		movdqu	%xmm0, -7744(%rbp)
+ 6797      C0E1FFFF 
+ 6798 5877 F30F6F85 		movdqu	-7792(%rbp), %xmm0
+ 6798      90E1FFFF 
+ 6799 587f F30F7F85 		movdqu	%xmm0, -7760(%rbp)
+ 6799      B0E1FFFF 
+ 6800              	.LBB1984:
+ 6801              	.LBB1985:
+ 6802              	.LBB1986:
+ 6803              	.LBB1987:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6804              		.loc 3 529 0
+ 6805 5887 F30F6F8D 		movdqu	-7760(%rbp), %xmm1
+ 6805      B0E1FFFF 
+ 6806 588f F30F6F85 		movdqu	-7744(%rbp), %xmm0
+ 6806      C0E1FFFF 
+ 6807 5897 660F3800 		pshufb	%xmm1, %xmm0
+ 6807      C1
+ 6808              	.LBE1987:
+ 6809              	.LBE1986:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 225
+
+
+ 6810              	.LBE1985:
+ 6811              	.LBE1984:
+ 6812              	.LBE1983:
+ 6813              	.LBE1982:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6814              		.loc 2 1569 0
+ 6815 589c 660F7F85 		movdqa	%xmm0, -8912(%rbp)
+ 6815      30DDFFFF 
+ 6816 58a4 660F6F85 		movdqa	-8912(%rbp), %xmm0
+ 6816      30DDFFFF 
+ 6817 58ac 660FEF85 		pxor	-7984(%rbp), %xmm0
+ 6817      D0E0FFFF 
+ 6818 58b4 F30F7F85 		movdqu	%xmm0, -7984(%rbp)
+ 6818      D0E0FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 6819              		.loc 2 1571 0
+ 6820 58bc F30F6F85 		movdqu	-7984(%rbp), %xmm0
+ 6820      D0E0FFFF 
+ 6821              	.LBE1969:
+ 6822              	.LBE1968:
+1789:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v1, 0x01);                            /* F(k5) : F(k5) : F(k5)  : F(k5)        */
+1790:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3  = AESBCMEMBER(ShiftXorColumns) (v0);       /* k0    : k0^k1 :k0^k1^k2:k0^k1^k2^k3   */
+ 6823              		.loc 2 1790 0
+ 6824 58c4 660F7F85 		movdqa	%xmm0, -8992(%rbp)
+ 6824      E0DCFFFF 
+1791:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3 ^= k;                                       /* k6    : k7    : k8     : k9           */
+ 6825              		.loc 2 1791 0
+ 6826 58cc 660F6F85 		movdqa	-8992(%rbp), %xmm0
+ 6826      E0DCFFFF 
+ 6827 58d4 660FEF85 		pxor	-8960(%rbp), %xmm0
+ 6827      00DDFFFF 
+ 6828 58dc 660F7F85 		movdqa	%xmm0, -8992(%rbp)
+ 6828      E0DCFFFF 
+ 6829 58e4 660F6F95 		movdqa	-9024(%rbp), %xmm2
+ 6829      C0DCFFFF 
+ 6830 58ec F30F7F95 		movdqu	%xmm2, -7728(%rbp)
+ 6830      D0E1FFFF 
+ 6831              	.LBB1988:
+ 6832              	.LBB1989:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 6833              		.loc 2 1565 0
+ 6834 58f4 F30F6F85 		movdqu	-7728(%rbp), %xmm0
+ 6834      D0E1FFFF 
+ 6835 58fc 660F7F85 		movdqa	%xmm0, -8896(%rbp)
+ 6835      40DDFFFF 
+ 6836 5904 660F6F95 		movdqa	-8896(%rbp), %xmm2
+ 6836      40DDFFFF 
+ 6837 590c F30F7F95 		movdqu	%xmm2, -7712(%rbp)
+ 6837      E0E1FFFF 
+ 6838              	.LBB1990:
+ 6839              	.LBB1991:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6840              		.loc 2 1278 0
+ 6841 5914 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 6841      00000000 
+ 6842 591c F30F6F8D 		movdqu	-7712(%rbp), %xmm1
+ 6842      E0E1FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 226
+
+
+ 6843 5924 F30F7F8D 		movdqu	%xmm1, -7680(%rbp)
+ 6843      00E2FFFF 
+ 6844 592c F30F7F85 		movdqu	%xmm0, -7696(%rbp)
+ 6844      F0E1FFFF 
+ 6845 5934 F30F6F85 		movdqu	-7680(%rbp), %xmm0
+ 6845      00E2FFFF 
+ 6846 593c F30F7F85 		movdqu	%xmm0, -7648(%rbp)
+ 6846      20E2FFFF 
+ 6847 5944 F30F6F85 		movdqu	-7696(%rbp), %xmm0
+ 6847      F0E1FFFF 
+ 6848 594c F30F7F85 		movdqu	%xmm0, -7664(%rbp)
+ 6848      10E2FFFF 
+ 6849              	.LBB1992:
+ 6850              	.LBB1993:
+ 6851              	.LBB1994:
+ 6852              	.LBB1995:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6853              		.loc 3 529 0
+ 6854 5954 F30F6F8D 		movdqu	-7664(%rbp), %xmm1
+ 6854      10E2FFFF 
+ 6855 595c F30F6F85 		movdqu	-7648(%rbp), %xmm0
+ 6855      20E2FFFF 
+ 6856 5964 660F3800 		pshufb	%xmm1, %xmm0
+ 6856      C1
+ 6857              	.LBE1995:
+ 6858              	.LBE1994:
+ 6859              	.LBE1993:
+ 6860              	.LBE1992:
+ 6861              	.LBE1991:
+ 6862              	.LBE1990:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6863              		.loc 2 1567 0
+ 6864 5969 660F7F85 		movdqa	%xmm0, -8896(%rbp)
+ 6864      40DDFFFF 
+ 6865 5971 660F6F85 		movdqa	-8896(%rbp), %xmm0
+ 6865      40DDFFFF 
+ 6866 5979 660FEF85 		pxor	-7728(%rbp), %xmm0
+ 6866      D0E1FFFF 
+ 6867 5981 F30F7F85 		movdqu	%xmm0, -7728(%rbp)
+ 6867      D0E1FFFF 
+ 6868 5989 660F6F85 		movdqa	-8896(%rbp), %xmm0
+ 6868      40DDFFFF 
+ 6869 5991 F30F7F85 		movdqu	%xmm0, -7632(%rbp)
+ 6869      30E2FFFF 
+ 6870              	.LBB1996:
+ 6871              	.LBB1997:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6872              		.loc 2 1278 0
+ 6873 5999 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 6873      00000000 
+ 6874 59a1 F30F6F8D 		movdqu	-7632(%rbp), %xmm1
+ 6874      30E2FFFF 
+ 6875 59a9 F30F7F8D 		movdqu	%xmm1, -7600(%rbp)
+ 6875      50E2FFFF 
+ 6876 59b1 F30F7F85 		movdqu	%xmm0, -7616(%rbp)
+ 6876      40E2FFFF 
+ 6877 59b9 F30F6F85 		movdqu	-7600(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 227
+
+
+ 6877      50E2FFFF 
+ 6878 59c1 F30F7F85 		movdqu	%xmm0, -7568(%rbp)
+ 6878      70E2FFFF 
+ 6879 59c9 F30F6F85 		movdqu	-7616(%rbp), %xmm0
+ 6879      40E2FFFF 
+ 6880 59d1 F30F7F85 		movdqu	%xmm0, -7584(%rbp)
+ 6880      60E2FFFF 
+ 6881              	.LBB1998:
+ 6882              	.LBB1999:
+ 6883              	.LBB2000:
+ 6884              	.LBB2001:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6885              		.loc 3 529 0
+ 6886 59d9 F30F6F8D 		movdqu	-7584(%rbp), %xmm1
+ 6886      60E2FFFF 
+ 6887 59e1 F30F6F85 		movdqu	-7568(%rbp), %xmm0
+ 6887      70E2FFFF 
+ 6888 59e9 660F3800 		pshufb	%xmm1, %xmm0
+ 6888      C1
+ 6889              	.LBE2001:
+ 6890              	.LBE2000:
+ 6891              	.LBE1999:
+ 6892              	.LBE1998:
+ 6893              	.LBE1997:
+ 6894              	.LBE1996:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6895              		.loc 2 1568 0
+ 6896 59ee 660F7F85 		movdqa	%xmm0, -8896(%rbp)
+ 6896      40DDFFFF 
+ 6897 59f6 660F6F85 		movdqa	-8896(%rbp), %xmm0
+ 6897      40DDFFFF 
+ 6898 59fe 660FEF85 		pxor	-7728(%rbp), %xmm0
+ 6898      D0E1FFFF 
+ 6899 5a06 F30F7F85 		movdqu	%xmm0, -7728(%rbp)
+ 6899      D0E1FFFF 
+ 6900 5a0e 660F6F95 		movdqa	-8896(%rbp), %xmm2
+ 6900      40DDFFFF 
+ 6901 5a16 F30F7F95 		movdqu	%xmm2, -7552(%rbp)
+ 6901      80E2FFFF 
+ 6902              	.LBB2002:
+ 6903              	.LBB2003:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 6904              		.loc 2 1278 0
+ 6905 5a1e 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 6905      00000000 
+ 6906 5a26 F30F6F8D 		movdqu	-7552(%rbp), %xmm1
+ 6906      80E2FFFF 
+ 6907 5a2e F30F7F8D 		movdqu	%xmm1, -7520(%rbp)
+ 6907      A0E2FFFF 
+ 6908 5a36 F30F7F85 		movdqu	%xmm0, -7536(%rbp)
+ 6908      90E2FFFF 
+ 6909 5a3e F30F6F85 		movdqu	-7520(%rbp), %xmm0
+ 6909      A0E2FFFF 
+ 6910 5a46 F30F7F85 		movdqu	%xmm0, -7488(%rbp)
+ 6910      C0E2FFFF 
+ 6911 5a4e F30F6F85 		movdqu	-7536(%rbp), %xmm0
+ 6911      90E2FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 228
+
+
+ 6912 5a56 F30F7F85 		movdqu	%xmm0, -7504(%rbp)
+ 6912      B0E2FFFF 
+ 6913              	.LBB2004:
+ 6914              	.LBB2005:
+ 6915              	.LBB2006:
+ 6916              	.LBB2007:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 6917              		.loc 3 529 0
+ 6918 5a5e F30F6F8D 		movdqu	-7504(%rbp), %xmm1
+ 6918      B0E2FFFF 
+ 6919 5a66 F30F6F85 		movdqu	-7488(%rbp), %xmm0
+ 6919      C0E2FFFF 
+ 6920 5a6e 660F3800 		pshufb	%xmm1, %xmm0
+ 6920      C1
+ 6921              	.LBE2007:
+ 6922              	.LBE2006:
+ 6923              	.LBE2005:
+ 6924              	.LBE2004:
+ 6925              	.LBE2003:
+ 6926              	.LBE2002:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 6927              		.loc 2 1569 0
+ 6928 5a73 660F7F85 		movdqa	%xmm0, -8896(%rbp)
+ 6928      40DDFFFF 
+ 6929 5a7b 660F6F85 		movdqa	-8896(%rbp), %xmm0
+ 6929      40DDFFFF 
+ 6930 5a83 660FEF85 		pxor	-7728(%rbp), %xmm0
+ 6930      D0E1FFFF 
+ 6931 5a8b F30F7F85 		movdqu	%xmm0, -7728(%rbp)
+ 6931      D0E1FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 6932              		.loc 2 1571 0
+ 6933 5a93 F30F6F85 		movdqu	-7728(%rbp), %xmm0
+ 6933      D0E1FFFF 
+ 6934              	.LBE1989:
+ 6935              	.LBE1988:
+1792:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4  = AESBCMEMBER(ShiftXorColumns) (v1);       /* k4    : k4^k5 : k4^k5  : k4^k5        */
+ 6936              		.loc 2 1792 0
+ 6937 5a9b 660F7F85 		movdqa	%xmm0, -8976(%rbp)
+ 6937      F0DCFFFF 
+1793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k9    : k9    : k9     : k9           */
+ 6938              		.loc 2 1793 0
+ 6939 5aa3 660F6F85 		movdqa	-8992(%rbp), %xmm0
+ 6939      E0DCFFFF 
+ 6940 5aab 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 6940      00DDFFFF 
+ 6941 5ab3 660F6F95 		movdqa	-8960(%rbp), %xmm2
+ 6941      00DDFFFF 
+ 6942 5abb F30F7F95 		movdqu	%xmm2, -7472(%rbp)
+ 6942      D0E2FFFF 
+ 6943 5ac3 F30F6F85 		movdqu	-7472(%rbp), %xmm0
+ 6943      D0E2FFFF 
+ 6944 5acb F30F7F85 		movdqu	%xmm0, -7440(%rbp)
+ 6944      F0E2FFFF 
+ 6945              	.LBB2008:
+ 6946              	.LBB2009:
+ 6947              	.LBB2010:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 229
+
+
+ 6948              	.LBB2011:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 6949              		.loc 3 450 0
+ 6950 5ad3 F30F6F85 		movdqu	-7440(%rbp), %xmm0
+ 6950      F0E2FFFF 
+ 6951 5adb 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 6951      FF
+ 6952              	.LBE2011:
+ 6953              	.LBE2010:
+ 6954              	.LBE2009:
+ 6955              	.LBE2008:
+ 6956              		.loc 2 1793 0
+ 6957 5ae0 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 6957      00DDFFFF 
+1794:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4 ^= k;                                       /* k10   : k11   : k10    : k11          */
+ 6958              		.loc 2 1794 0
+ 6959 5ae8 660F6F85 		movdqa	-8976(%rbp), %xmm0
+ 6959      F0DCFFFF 
+ 6960 5af0 660FEF85 		pxor	-8960(%rbp), %xmm0
+ 6960      00DDFFFF 
+ 6961 5af8 660F7F85 		movdqa	%xmm0, -8976(%rbp)
+ 6961      F0DCFFFF 
+ 6962 5b00 660F6F95 		movdqa	-9024(%rbp), %xmm2
+ 6962      C0DCFFFF 
+ 6963 5b08 F30F7F95 		movdqu	%xmm2, -7408(%rbp)
+ 6963      10E3FFFF 
+ 6964 5b10 660F6F85 		movdqa	-8992(%rbp), %xmm0
+ 6964      E0DCFFFF 
+ 6965 5b18 F30F7F85 		movdqu	%xmm0, -7424(%rbp)
+ 6965      00E3FFFF 
+ 6966 5b20 F30F6F85 		movdqu	-7408(%rbp), %xmm0
+ 6966      10E3FFFF 
+ 6967 5b28 F30F7F85 		movdqu	%xmm0, -7360(%rbp)
+ 6967      40E3FFFF 
+ 6968 5b30 F30F6F85 		movdqu	-7424(%rbp), %xmm0
+ 6968      00E3FFFF 
+ 6969 5b38 F30F7F85 		movdqu	%xmm0, -7376(%rbp)
+ 6969      30E3FFFF 
+ 6970              	.LBB2012:
+ 6971              	.LBB2013:
+ 6972              	.LBB2014:
+ 6973              	.LBB2015:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 6974              		.loc 3 366 0
+ 6975 5b40 F20F1085 		movsd	-7376(%rbp), %xmm0
+ 6975      30E3FFFF 
+ 6976 5b48 660F1685 		movhpd	-7368(%rbp), %xmm0
+ 6976      38E3FFFF 
+ 6977 5b50 F20F108D 		movsd	-7360(%rbp), %xmm1
+ 6977      40E3FFFF 
+ 6978 5b58 660F168D 		movhpd	-7352(%rbp), %xmm1
+ 6978      48E3FFFF 
+ 6979 5b60 660F28D1 		movapd	%xmm1, %xmm2
+ 6980 5b64 660F14D0 		unpcklpd	%xmm0, %xmm2
+ 6981 5b68 660F28C2 		movapd	%xmm2, %xmm0
+ 6982              	.LBE2015:
+ 6983              	.LBE2014:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 230
+
+
+ 6984              	.LBE2013:
+ 6985              	.LBE2012:
+1795:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateMerge1) (v1,v3);        /* k4    : k5    : k6     : k7           */
+ 6986              		.loc 2 1795 0
+ 6987 5b6c 660F7F85 		movdqa	%xmm0, -9024(%rbp)
+ 6987      C0DCFFFF 
+1796:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[1] = v1; /* K4:K5:K6:K7 */
+ 6988              		.loc 2 1796 0
+ 6989 5b74 488B85A8 		movq	-8536(%rbp), %rax
+ 6989      DEFFFF
+ 6990 5b7b 4883C010 		addq	$16, %rax
+ 6991 5b7f 660F6F85 		movdqa	-9024(%rbp), %xmm0
+ 6991      C0DCFFFF 
+ 6992 5b87 660F7F00 		movdqa	%xmm0, (%rax)
+ 6993 5b8b 660F6F95 		movdqa	-8992(%rbp), %xmm2
+ 6993      E0DCFFFF 
+ 6994 5b93 F30F7F95 		movdqu	%xmm2, -7328(%rbp)
+ 6994      60E3FFFF 
+ 6995 5b9b 660F6F85 		movdqa	-8976(%rbp), %xmm0
+ 6995      F0DCFFFF 
+ 6996 5ba3 F30F7F85 		movdqu	%xmm0, -7344(%rbp)
+ 6996      50E3FFFF 
+ 6997 5bab F30F6F85 		movdqu	-7328(%rbp), %xmm0
+ 6997      60E3FFFF 
+ 6998 5bb3 F30F7F85 		movdqu	%xmm0, -7280(%rbp)
+ 6998      90E3FFFF 
+ 6999 5bbb F30F6F85 		movdqu	-7344(%rbp), %xmm0
+ 6999      50E3FFFF 
+ 7000 5bc3 F30F7F85 		movdqu	%xmm0, -7296(%rbp)
+ 7000      80E3FFFF 
+ 7001              	.LBB2016:
+ 7002              	.LBB2017:
+ 7003              	.LBB2018:
+ 7004              	.LBB2019:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 7005              		.loc 3 366 0
+ 7006 5bcb F20F108D 		movsd	-7296(%rbp), %xmm1
+ 7006      80E3FFFF 
+ 7007 5bd3 660F168D 		movhpd	-7288(%rbp), %xmm1
+ 7007      88E3FFFF 
+ 7008 5bdb F20F1085 		movsd	-7280(%rbp), %xmm0
+ 7008      90E3FFFF 
+ 7009 5be3 660F1685 		movhpd	-7272(%rbp), %xmm0
+ 7009      98E3FFFF 
+ 7010 5beb 660FC6C1 		shufpd	$1, %xmm1, %xmm0
+ 7010      01
+ 7011              	.LBE2019:
+ 7012              	.LBE2018:
+ 7013              	.LBE2017:
+ 7014              	.LBE2016:
+1797:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1798:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v2  = AESBCMEMBER(StateMerge2) (v3,v4);        /* k8    : k9    : k10    : k11          */
+ 7015              		.loc 2 1798 0
+ 7016 5bf0 660F7F85 		movdqa	%xmm0, -9008(%rbp)
+ 7016      D0DCFFFF 
+1799:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[2] = v2; /* K8:K9:K10:K11 */
+ 7017              		.loc 2 1799 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 231
+
+
+ 7018 5bf8 488B85A8 		movq	-8536(%rbp), %rax
+ 7018      DEFFFF
+ 7019 5bff 4883C020 		addq	$32, %rax
+ 7020 5c03 660F6F95 		movdqa	-9008(%rbp), %xmm2
+ 7020      D0DCFFFF 
+ 7021 5c0b 660F7F10 		movdqa	%xmm2, (%rax)
+ 7022 5c0f 660F6F85 		movdqa	-8992(%rbp), %xmm0
+ 7022      E0DCFFFF 
+ 7023 5c17 F30F7F85 		movdqu	%xmm0, -7264(%rbp)
+ 7023      A0E3FFFF 
+ 7024              	.LBB2020:
+ 7025              	.LBB2021:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 7026              		.loc 2 1565 0
+ 7027 5c1f F30F6F95 		movdqu	-7264(%rbp), %xmm2
+ 7027      A0E3FFFF 
+ 7028 5c27 660F7F95 		movdqa	%xmm2, -8880(%rbp)
+ 7028      50DDFFFF 
+ 7029 5c2f 660F6F85 		movdqa	-8880(%rbp), %xmm0
+ 7029      50DDFFFF 
+ 7030 5c37 F30F7F85 		movdqu	%xmm0, -7248(%rbp)
+ 7030      B0E3FFFF 
+ 7031              	.LBB2022:
+ 7032              	.LBB2023:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7033              		.loc 2 1278 0
+ 7034 5c3f 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 7034      00000000 
+ 7035 5c47 F30F6F8D 		movdqu	-7248(%rbp), %xmm1
+ 7035      B0E3FFFF 
+ 7036 5c4f F30F7F8D 		movdqu	%xmm1, -7216(%rbp)
+ 7036      D0E3FFFF 
+ 7037 5c57 F30F7F85 		movdqu	%xmm0, -7232(%rbp)
+ 7037      C0E3FFFF 
+ 7038 5c5f F30F6F85 		movdqu	-7216(%rbp), %xmm0
+ 7038      D0E3FFFF 
+ 7039 5c67 F30F7F85 		movdqu	%xmm0, -7184(%rbp)
+ 7039      F0E3FFFF 
+ 7040 5c6f F30F6F85 		movdqu	-7232(%rbp), %xmm0
+ 7040      C0E3FFFF 
+ 7041 5c77 F30F7F85 		movdqu	%xmm0, -7200(%rbp)
+ 7041      E0E3FFFF 
+ 7042              	.LBB2024:
+ 7043              	.LBB2025:
+ 7044              	.LBB2026:
+ 7045              	.LBB2027:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7046              		.loc 3 529 0
+ 7047 5c7f F30F6F8D 		movdqu	-7200(%rbp), %xmm1
+ 7047      E0E3FFFF 
+ 7048 5c87 F30F6F85 		movdqu	-7184(%rbp), %xmm0
+ 7048      F0E3FFFF 
+ 7049 5c8f 660F3800 		pshufb	%xmm1, %xmm0
+ 7049      C1
+ 7050              	.LBE2027:
+ 7051              	.LBE2026:
+ 7052              	.LBE2025:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 232
+
+
+ 7053              	.LBE2024:
+ 7054              	.LBE2023:
+ 7055              	.LBE2022:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7056              		.loc 2 1567 0
+ 7057 5c94 660F7F85 		movdqa	%xmm0, -8880(%rbp)
+ 7057      50DDFFFF 
+ 7058 5c9c 660F6F85 		movdqa	-8880(%rbp), %xmm0
+ 7058      50DDFFFF 
+ 7059 5ca4 660FEF85 		pxor	-7264(%rbp), %xmm0
+ 7059      A0E3FFFF 
+ 7060 5cac F30F7F85 		movdqu	%xmm0, -7264(%rbp)
+ 7060      A0E3FFFF 
+ 7061 5cb4 660F6F95 		movdqa	-8880(%rbp), %xmm2
+ 7061      50DDFFFF 
+ 7062 5cbc F30F7F95 		movdqu	%xmm2, -7168(%rbp)
+ 7062      00E4FFFF 
+ 7063              	.LBB2028:
+ 7064              	.LBB2029:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7065              		.loc 2 1278 0
+ 7066 5cc4 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 7066      00000000 
+ 7067 5ccc F30F6F8D 		movdqu	-7168(%rbp), %xmm1
+ 7067      00E4FFFF 
+ 7068 5cd4 F30F7F8D 		movdqu	%xmm1, -7136(%rbp)
+ 7068      20E4FFFF 
+ 7069 5cdc F30F7F85 		movdqu	%xmm0, -7152(%rbp)
+ 7069      10E4FFFF 
+ 7070 5ce4 F30F6F85 		movdqu	-7136(%rbp), %xmm0
+ 7070      20E4FFFF 
+ 7071 5cec F30F7F85 		movdqu	%xmm0, -7104(%rbp)
+ 7071      40E4FFFF 
+ 7072 5cf4 F30F6F85 		movdqu	-7152(%rbp), %xmm0
+ 7072      10E4FFFF 
+ 7073 5cfc F30F7F85 		movdqu	%xmm0, -7120(%rbp)
+ 7073      30E4FFFF 
+ 7074              	.LBB2030:
+ 7075              	.LBB2031:
+ 7076              	.LBB2032:
+ 7077              	.LBB2033:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7078              		.loc 3 529 0
+ 7079 5d04 F30F6F8D 		movdqu	-7120(%rbp), %xmm1
+ 7079      30E4FFFF 
+ 7080 5d0c F30F6F85 		movdqu	-7104(%rbp), %xmm0
+ 7080      40E4FFFF 
+ 7081 5d14 660F3800 		pshufb	%xmm1, %xmm0
+ 7081      C1
+ 7082              	.LBE2033:
+ 7083              	.LBE2032:
+ 7084              	.LBE2031:
+ 7085              	.LBE2030:
+ 7086              	.LBE2029:
+ 7087              	.LBE2028:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7088              		.loc 2 1568 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 233
+
+
+ 7089 5d19 660F7F85 		movdqa	%xmm0, -8880(%rbp)
+ 7089      50DDFFFF 
+ 7090 5d21 660F6F85 		movdqa	-8880(%rbp), %xmm0
+ 7090      50DDFFFF 
+ 7091 5d29 660FEF85 		pxor	-7264(%rbp), %xmm0
+ 7091      A0E3FFFF 
+ 7092 5d31 F30F7F85 		movdqu	%xmm0, -7264(%rbp)
+ 7092      A0E3FFFF 
+ 7093 5d39 660F6F85 		movdqa	-8880(%rbp), %xmm0
+ 7093      50DDFFFF 
+ 7094 5d41 F30F7F85 		movdqu	%xmm0, -7088(%rbp)
+ 7094      50E4FFFF 
+ 7095              	.LBB2034:
+ 7096              	.LBB2035:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7097              		.loc 2 1278 0
+ 7098 5d49 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 7098      00000000 
+ 7099 5d51 F30F6F8D 		movdqu	-7088(%rbp), %xmm1
+ 7099      50E4FFFF 
+ 7100 5d59 F30F7F8D 		movdqu	%xmm1, -7056(%rbp)
+ 7100      70E4FFFF 
+ 7101 5d61 F30F7F85 		movdqu	%xmm0, -7072(%rbp)
+ 7101      60E4FFFF 
+ 7102 5d69 F30F6F85 		movdqu	-7056(%rbp), %xmm0
+ 7102      70E4FFFF 
+ 7103 5d71 F30F7F85 		movdqu	%xmm0, -7024(%rbp)
+ 7103      90E4FFFF 
+ 7104 5d79 F30F6F85 		movdqu	-7072(%rbp), %xmm0
+ 7104      60E4FFFF 
+ 7105 5d81 F30F7F85 		movdqu	%xmm0, -7040(%rbp)
+ 7105      80E4FFFF 
+ 7106              	.LBB2036:
+ 7107              	.LBB2037:
+ 7108              	.LBB2038:
+ 7109              	.LBB2039:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7110              		.loc 3 529 0
+ 7111 5d89 F30F6F8D 		movdqu	-7040(%rbp), %xmm1
+ 7111      80E4FFFF 
+ 7112 5d91 F30F6F85 		movdqu	-7024(%rbp), %xmm0
+ 7112      90E4FFFF 
+ 7113 5d99 660F3800 		pshufb	%xmm1, %xmm0
+ 7113      C1
+ 7114              	.LBE2039:
+ 7115              	.LBE2038:
+ 7116              	.LBE2037:
+ 7117              	.LBE2036:
+ 7118              	.LBE2035:
+ 7119              	.LBE2034:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7120              		.loc 2 1569 0
+ 7121 5d9e 660F7F85 		movdqa	%xmm0, -8880(%rbp)
+ 7121      50DDFFFF 
+ 7122 5da6 660F6F85 		movdqa	-8880(%rbp), %xmm0
+ 7122      50DDFFFF 
+ 7123 5dae 660FEF85 		pxor	-7264(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 234
+
+
+ 7123      A0E3FFFF 
+ 7124 5db6 F30F7F85 		movdqu	%xmm0, -7264(%rbp)
+ 7124      A0E3FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 7125              		.loc 2 1571 0
+ 7126 5dbe F30F6F85 		movdqu	-7264(%rbp), %xmm0
+ 7126      A0E3FFFF 
+ 7127              	.LBE2021:
+ 7128              	.LBE2020:
+1800:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1801:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 2 */
+1802:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(ShiftXorColumns) (v3);       /* k6    : k6^k7 :k6^k7^k8:k6^k7^k8^k9   */
+ 7129              		.loc 2 1802 0
+ 7130 5dc6 660F7F85 		movdqa	%xmm0, -9040(%rbp)
+ 7130      B0DCFFFF 
+ 7131 5dce 660F6F95 		movdqa	-8976(%rbp), %xmm2
+ 7131      F0DCFFFF 
+ 7132 5dd6 F30F7F95 		movdqu	%xmm2, -7008(%rbp)
+ 7132      A0E4FFFF 
+ 7133              	.LBB2040:
+ 7134              	.LBB2041:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 7135              		.loc 2 1565 0
+ 7136 5dde F30F6F85 		movdqu	-7008(%rbp), %xmm0
+ 7136      A0E4FFFF 
+ 7137 5de6 660F7F85 		movdqa	%xmm0, -8864(%rbp)
+ 7137      60DDFFFF 
+ 7138 5dee 660F6F95 		movdqa	-8864(%rbp), %xmm2
+ 7138      60DDFFFF 
+ 7139 5df6 F30F7F95 		movdqu	%xmm2, -6992(%rbp)
+ 7139      B0E4FFFF 
+ 7140              	.LBB2042:
+ 7141              	.LBB2043:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7142              		.loc 2 1278 0
+ 7143 5dfe 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 7143      00000000 
+ 7144 5e06 F30F6F8D 		movdqu	-6992(%rbp), %xmm1
+ 7144      B0E4FFFF 
+ 7145 5e0e F30F7F8D 		movdqu	%xmm1, -6960(%rbp)
+ 7145      D0E4FFFF 
+ 7146 5e16 F30F7F85 		movdqu	%xmm0, -6976(%rbp)
+ 7146      C0E4FFFF 
+ 7147 5e1e F30F6F85 		movdqu	-6960(%rbp), %xmm0
+ 7147      D0E4FFFF 
+ 7148 5e26 F30F7F85 		movdqu	%xmm0, -6928(%rbp)
+ 7148      F0E4FFFF 
+ 7149 5e2e F30F6F85 		movdqu	-6976(%rbp), %xmm0
+ 7149      C0E4FFFF 
+ 7150 5e36 F30F7F85 		movdqu	%xmm0, -6944(%rbp)
+ 7150      E0E4FFFF 
+ 7151              	.LBB2044:
+ 7152              	.LBB2045:
+ 7153              	.LBB2046:
+ 7154              	.LBB2047:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7155              		.loc 3 529 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 235
+
+
+ 7156 5e3e F30F6F8D 		movdqu	-6944(%rbp), %xmm1
+ 7156      E0E4FFFF 
+ 7157 5e46 F30F6F85 		movdqu	-6928(%rbp), %xmm0
+ 7157      F0E4FFFF 
+ 7158 5e4e 660F3800 		pshufb	%xmm1, %xmm0
+ 7158      C1
+ 7159              	.LBE2047:
+ 7160              	.LBE2046:
+ 7161              	.LBE2045:
+ 7162              	.LBE2044:
+ 7163              	.LBE2043:
+ 7164              	.LBE2042:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7165              		.loc 2 1567 0
+ 7166 5e53 660F7F85 		movdqa	%xmm0, -8864(%rbp)
+ 7166      60DDFFFF 
+ 7167 5e5b 660F6F85 		movdqa	-8864(%rbp), %xmm0
+ 7167      60DDFFFF 
+ 7168 5e63 660FEF85 		pxor	-7008(%rbp), %xmm0
+ 7168      A0E4FFFF 
+ 7169 5e6b F30F7F85 		movdqu	%xmm0, -7008(%rbp)
+ 7169      A0E4FFFF 
+ 7170 5e73 660F6F85 		movdqa	-8864(%rbp), %xmm0
+ 7170      60DDFFFF 
+ 7171 5e7b F30F7F85 		movdqu	%xmm0, -6912(%rbp)
+ 7171      00E5FFFF 
+ 7172              	.LBB2048:
+ 7173              	.LBB2049:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7174              		.loc 2 1278 0
+ 7175 5e83 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 7175      00000000 
+ 7176 5e8b F30F6F8D 		movdqu	-6912(%rbp), %xmm1
+ 7176      00E5FFFF 
+ 7177 5e93 F30F7F8D 		movdqu	%xmm1, -6880(%rbp)
+ 7177      20E5FFFF 
+ 7178 5e9b F30F7F85 		movdqu	%xmm0, -6896(%rbp)
+ 7178      10E5FFFF 
+ 7179 5ea3 F30F6F85 		movdqu	-6880(%rbp), %xmm0
+ 7179      20E5FFFF 
+ 7180 5eab F30F7F85 		movdqu	%xmm0, -6848(%rbp)
+ 7180      40E5FFFF 
+ 7181 5eb3 F30F6F85 		movdqu	-6896(%rbp), %xmm0
+ 7181      10E5FFFF 
+ 7182 5ebb F30F7F85 		movdqu	%xmm0, -6864(%rbp)
+ 7182      30E5FFFF 
+ 7183              	.LBB2050:
+ 7184              	.LBB2051:
+ 7185              	.LBB2052:
+ 7186              	.LBB2053:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7187              		.loc 3 529 0
+ 7188 5ec3 F30F6F8D 		movdqu	-6864(%rbp), %xmm1
+ 7188      30E5FFFF 
+ 7189 5ecb F30F6F85 		movdqu	-6848(%rbp), %xmm0
+ 7189      40E5FFFF 
+ 7190 5ed3 660F3800 		pshufb	%xmm1, %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 236
+
+
+ 7190      C1
+ 7191              	.LBE2053:
+ 7192              	.LBE2052:
+ 7193              	.LBE2051:
+ 7194              	.LBE2050:
+ 7195              	.LBE2049:
+ 7196              	.LBE2048:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7197              		.loc 2 1568 0
+ 7198 5ed8 660F7F85 		movdqa	%xmm0, -8864(%rbp)
+ 7198      60DDFFFF 
+ 7199 5ee0 660F6F85 		movdqa	-8864(%rbp), %xmm0
+ 7199      60DDFFFF 
+ 7200 5ee8 660FEF85 		pxor	-7008(%rbp), %xmm0
+ 7200      A0E4FFFF 
+ 7201 5ef0 F30F7F85 		movdqu	%xmm0, -7008(%rbp)
+ 7201      A0E4FFFF 
+ 7202 5ef8 660F6F95 		movdqa	-8864(%rbp), %xmm2
+ 7202      60DDFFFF 
+ 7203 5f00 F30F7F95 		movdqu	%xmm2, -6832(%rbp)
+ 7203      50E5FFFF 
+ 7204              	.LBB2054:
+ 7205              	.LBB2055:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7206              		.loc 2 1278 0
+ 7207 5f08 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 7207      00000000 
+ 7208 5f10 F30F6F8D 		movdqu	-6832(%rbp), %xmm1
+ 7208      50E5FFFF 
+ 7209 5f18 F30F7F8D 		movdqu	%xmm1, -6800(%rbp)
+ 7209      70E5FFFF 
+ 7210 5f20 F30F7F85 		movdqu	%xmm0, -6816(%rbp)
+ 7210      60E5FFFF 
+ 7211 5f28 F30F6F85 		movdqu	-6800(%rbp), %xmm0
+ 7211      70E5FFFF 
+ 7212 5f30 F30F7F85 		movdqu	%xmm0, -6768(%rbp)
+ 7212      90E5FFFF 
+ 7213 5f38 F30F6F85 		movdqu	-6816(%rbp), %xmm0
+ 7213      60E5FFFF 
+ 7214 5f40 F30F7F85 		movdqu	%xmm0, -6784(%rbp)
+ 7214      80E5FFFF 
+ 7215              	.LBB2056:
+ 7216              	.LBB2057:
+ 7217              	.LBB2058:
+ 7218              	.LBB2059:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7219              		.loc 3 529 0
+ 7220 5f48 F30F6F8D 		movdqu	-6784(%rbp), %xmm1
+ 7220      80E5FFFF 
+ 7221 5f50 F30F6F85 		movdqu	-6768(%rbp), %xmm0
+ 7221      90E5FFFF 
+ 7222 5f58 660F3800 		pshufb	%xmm1, %xmm0
+ 7222      C1
+ 7223              	.LBE2059:
+ 7224              	.LBE2058:
+ 7225              	.LBE2057:
+ 7226              	.LBE2056:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 237
+
+
+ 7227              	.LBE2055:
+ 7228              	.LBE2054:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7229              		.loc 2 1569 0
+ 7230 5f5d 660F7F85 		movdqa	%xmm0, -8864(%rbp)
+ 7230      60DDFFFF 
+ 7231 5f65 660F6F85 		movdqa	-8864(%rbp), %xmm0
+ 7231      60DDFFFF 
+ 7232 5f6d 660FEF85 		pxor	-7008(%rbp), %xmm0
+ 7232      A0E4FFFF 
+ 7233 5f75 F30F7F85 		movdqu	%xmm0, -7008(%rbp)
+ 7233      A0E4FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 7234              		.loc 2 1571 0
+ 7235 5f7d F30F6F85 		movdqu	-7008(%rbp), %xmm0
+ 7235      A0E4FFFF 
+ 7236              	.LBE2041:
+ 7237              	.LBE2040:
+1803:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(ShiftXorColumns) (v4);       /* k10   :k10^k11: k10^k11: k10^k11      */
+ 7238              		.loc 2 1803 0
+ 7239 5f85 660F7F85 		movdqa	%xmm0, -9024(%rbp)
+ 7239      C0DCFFFF 
+1804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 7240              		.loc 2 1804 0
+ 7241 5f8d 660F6F85 		movdqa	-9008(%rbp), %xmm0
+ 7241      D0DCFFFF 
+ 7242 5f95 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 7242      00DDFFFF 
+ 7243 5f9d 660F6F95 		movdqa	-8960(%rbp), %xmm2
+ 7243      00DDFFFF 
+ 7244 5fa5 F30F7F95 		movdqu	%xmm2, -6736(%rbp)
+ 7244      B0E5FFFF 
+ 7245              	.LBB2060:
+ 7246              	.LBB2061:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 7247              		.loc 2 1681 0
+ 7248 5fad B8020000 		movl	$2, %eax
+ 7248      00
+ 7249 5fb2 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 7249      00000000 
+ 7250 5fba F30F7F85 		movdqu	%xmm0, -6704(%rbp)
+ 7250      D0E5FFFF 
+ 7251 5fc2 8985CCE5 		movl	%eax, -6708(%rbp)
+ 7251      FFFF
+ 7252 5fc8 F30F6F85 		movdqu	-6704(%rbp), %xmm0
+ 7252      D0E5FFFF 
+ 7253 5fd0 F30F7F85 		movdqu	%xmm0, -6672(%rbp)
+ 7253      F0E5FFFF 
+ 7254 5fd8 8B85CCE5 		movl	-6708(%rbp), %eax
+ 7254      FFFF
+ 7255 5fde 8985ECE5 		movl	%eax, -6676(%rbp)
+ 7255      FFFF
+ 7256              	.LBB2062:
+ 7257              	.LBB2063:
+ 7258              	.LBB2064:
+ 7259              	.LBB2065:
+ 7260              		.loc 3 598 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 238
+
+
+ 7261 5fe4 8B85ECE5 		movl	-6676(%rbp), %eax
+ 7261      FFFF
+ 7262 5fea F30F6F85 		movdqu	-6672(%rbp), %xmm0
+ 7262      F0E5FFFF 
+ 7263 5ff2 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 7263      C003
+ 7264              	.LBE2065:
+ 7265              	.LBE2064:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 7266              		.loc 2 519 0
+ 7267 5ff8 F30F7F85 		movdqu	%xmm0, -6704(%rbp)
+ 7267      D0E5FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 7268              		.loc 2 526 0
+ 7269 6000 F30F6F85 		movdqu	-6704(%rbp), %xmm0
+ 7269      D0E5FFFF 
+ 7270              	.LBE2063:
+ 7271              	.LBE2062:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 7272              		.loc 2 1681 0
+ 7273 6008 660F7F85 		movdqa	%xmm0, -8832(%rbp)
+ 7273      80DDFFFF 
+ 7274 6010 F30F6F85 		movdqu	-6736(%rbp), %xmm0
+ 7274      B0E5FFFF 
+ 7275 6018 F30F7F85 		movdqu	%xmm0, -6656(%rbp)
+ 7275      00E6FFFF 
+ 7276 6020 F30F6F85 		movdqu	-6656(%rbp), %xmm0
+ 7276      00E6FFFF 
+ 7277 6028 F30F7F85 		movdqu	%xmm0, -6624(%rbp)
+ 7277      20E6FFFF 
+ 7278 6030 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 7278      000000
+ 7279 6037 48898518 		movq	%rax, -6632(%rbp)
+ 7279      E6FFFF
+ 7280              	.LBB2066:
+ 7281              	.LBB2067:
+ 7282              	.LBB2068:
+ 7283              	.LBB2069:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 7284              		.loc 2 851 0
+ 7285 603e 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 7285      00000000 
+ 7286 6046 F30F7F85 		movdqu	%xmm0, -6592(%rbp)
+ 7286      40E6FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 7287              		.loc 2 854 0
+ 7288 604e 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 7288      00000000 
+ 7289 6056 F30F6F8D 		movdqu	-6624(%rbp), %xmm1
+ 7289      20E6FFFF 
+ 7290 605e F30F7F8D 		movdqu	%xmm1, -6512(%rbp)
+ 7290      90E6FFFF 
+ 7291 6066 F30F7F85 		movdqu	%xmm0, -6528(%rbp)
+ 7291      80E6FFFF 
+ 7292              	.LBB2070:
+ 7293              	.LBB2071:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+
GAS LISTING /tmp/ccjbMjHD.s 			page 239
+
+
+ 7294              		.loc 2 206 0
+ 7295 606e F30F6F85 		movdqu	-6528(%rbp), %xmm0
+ 7295      80E6FFFF 
+ 7296 6076 F30F6F8D 		movdqu	-6512(%rbp), %xmm1
+ 7296      90E6FFFF 
+ 7297 607e 660FDBC1 		pand	%xmm1, %xmm0
+ 7298              	.LBE2071:
+ 7299              	.LBE2070:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 7300              		.loc 2 854 0
+ 7301 6082 F30F7F85 		movdqu	%xmm0, -6544(%rbp)
+ 7301      70E6FFFF 
+ 7302 608a F30F6F85 		movdqu	-6624(%rbp), %xmm0
+ 7302      20E6FFFF 
+ 7303 6092 F30F7F85 		movdqu	%xmm0, -6480(%rbp)
+ 7303      B0E6FFFF 
+ 7304              	.LBB2072:
+ 7305              	.LBB2073:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 7306              		.loc 3 433 0
+ 7307 609a F30F6F85 		movdqu	-6480(%rbp), %xmm0
+ 7307      B0E6FFFF 
+ 7308 60a2 660F72D0 		psrld	$4, %xmm0
+ 7308      04
+ 7309              	.LBE2073:
+ 7310              	.LBE2072:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 7311              		.loc 2 857 0
+ 7312 60a7 F30F7F85 		movdqu	%xmm0, -6560(%rbp)
+ 7312      60E6FFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 7313              		.loc 2 859 0
+ 7314 60af 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 7314      00000000 
+ 7315 60b7 F30F6F8D 		movdqu	-6560(%rbp), %xmm1
+ 7315      60E6FFFF 
+ 7316 60bf F30F7F8D 		movdqu	%xmm1, -6448(%rbp)
+ 7316      D0E6FFFF 
+ 7317 60c7 F30F7F85 		movdqu	%xmm0, -6464(%rbp)
+ 7317      C0E6FFFF 
+ 7318              	.LBB2074:
+ 7319              	.LBB2075:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 7320              		.loc 2 206 0
+ 7321 60cf F30F6F85 		movdqu	-6464(%rbp), %xmm0
+ 7321      C0E6FFFF 
+ 7322 60d7 F30F6F8D 		movdqu	-6448(%rbp), %xmm1
+ 7322      D0E6FFFF 
+ 7323 60df 660FDBC1 		pand	%xmm1, %xmm0
+ 7324              	.LBE2075:
+ 7325              	.LBE2074:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 7326              		.loc 2 859 0
+ 7327 60e3 F30F7F85 		movdqu	%xmm0, -6560(%rbp)
+ 7327      60E6FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 7328              		.loc 2 866 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 240
+
+
+ 7329 60eb C7853CE6 		movl	$0, -6596(%rbp)
+ 7329      FFFF0000 
+ 7329      0000
+ 7330 60f5 E9BE0100 		jmp	.L108
+ 7330      00
+ 7331              	.L109:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 7332              		.loc 2 868 0
+ 7333 60fa 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 7333      00000000 
+ 7334 6102 F30F7F85 		movdqu	%xmm0, -6416(%rbp)
+ 7334      F0E6FFFF 
+ 7335 610a F30F6F85 		movdqu	-6560(%rbp), %xmm0
+ 7335      60E6FFFF 
+ 7336 6112 F30F7F85 		movdqu	%xmm0, -6432(%rbp)
+ 7336      E0E6FFFF 
+ 7337 611a F30F6F85 		movdqu	-6416(%rbp), %xmm0
+ 7337      F0E6FFFF 
+ 7338 6122 F30F7F85 		movdqu	%xmm0, -6384(%rbp)
+ 7338      10E7FFFF 
+ 7339 612a F30F6F85 		movdqu	-6432(%rbp), %xmm0
+ 7339      E0E6FFFF 
+ 7340 6132 F30F7F85 		movdqu	%xmm0, -6400(%rbp)
+ 7340      00E7FFFF 
+ 7341              	.LBB2076:
+ 7342              	.LBB2077:
+ 7343              	.LBB2078:
+ 7344              	.LBB2079:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7345              		.loc 3 529 0
+ 7346 613a F30F6F8D 		movdqu	-6400(%rbp), %xmm1
+ 7346      00E7FFFF 
+ 7347 6142 F30F6F85 		movdqu	-6384(%rbp), %xmm0
+ 7347      10E7FFFF 
+ 7348 614a 660F3800 		pshufb	%xmm1, %xmm0
+ 7348      C1
+ 7349              	.LBE2079:
+ 7350              	.LBE2078:
+ 7351              	.LBE2077:
+ 7352              	.LBE2076:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 7353              		.loc 2 868 0
+ 7354 614f F30F7F85 		movdqu	%xmm0, -6576(%rbp)
+ 7354      50E6FFFF 
+ 7355 6157 F30F6F85 		movdqu	-6544(%rbp), %xmm0
+ 7355      70E6FFFF 
+ 7356 615f F30F7F85 		movdqu	%xmm0, -6352(%rbp)
+ 7356      30E7FFFF 
+ 7357 6167 F30F6F85 		movdqu	-6576(%rbp), %xmm0
+ 7357      50E6FFFF 
+ 7358 616f F30F7F85 		movdqu	%xmm0, -6368(%rbp)
+ 7358      20E7FFFF 
+ 7359              	.LBB2080:
+ 7360              	.LBB2081:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 7361              		.loc 2 234 0
+ 7362 6177 F30F6F85 		movdqu	-6368(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 241
+
+
+ 7362      20E7FFFF 
+ 7363 617f F30F6F8D 		movdqu	-6352(%rbp), %xmm1
+ 7363      30E7FFFF 
+ 7364 6187 660FEBC1 		por	%xmm1, %xmm0
+ 7365              	.LBE2081:
+ 7366              	.LBE2080:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 7367              		.loc 2 870 0
+ 7368 618b F30F7F85 		movdqu	%xmm0, -6576(%rbp)
+ 7368      50E6FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 7369              		.loc 2 872 0
+ 7370 6193 8B853CE6 		mov	-6596(%rbp), %eax
+ 7370      FFFF
+ 7371 6199 48C1E004 		salq	$4, %rax
+ 7372 619d 48038518 		addq	-6632(%rbp), %rax
+ 7372      E6FFFF
+ 7373 61a4 660F6F00 		movdqa	(%rax), %xmm0
+ 7374 61a8 F30F7F85 		movdqu	%xmm0, -6320(%rbp)
+ 7374      50E7FFFF 
+ 7375 61b0 F30F6F85 		movdqu	-6576(%rbp), %xmm0
+ 7375      50E6FFFF 
+ 7376 61b8 F30F7F85 		movdqu	%xmm0, -6336(%rbp)
+ 7376      40E7FFFF 
+ 7377 61c0 F30F6F85 		movdqu	-6320(%rbp), %xmm0
+ 7377      50E7FFFF 
+ 7378 61c8 F30F7F85 		movdqu	%xmm0, -6288(%rbp)
+ 7378      70E7FFFF 
+ 7379 61d0 F30F6F85 		movdqu	-6336(%rbp), %xmm0
+ 7379      40E7FFFF 
+ 7380 61d8 F30F7F85 		movdqu	%xmm0, -6304(%rbp)
+ 7380      60E7FFFF 
+ 7381              	.LBB2082:
+ 7382              	.LBB2083:
+ 7383              	.LBB2084:
+ 7384              	.LBB2085:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7385              		.loc 3 529 0
+ 7386 61e0 F30F6F8D 		movdqu	-6304(%rbp), %xmm1
+ 7386      60E7FFFF 
+ 7387 61e8 F30F6F85 		movdqu	-6288(%rbp), %xmm0
+ 7387      70E7FFFF 
+ 7388 61f0 660F3800 		pshufb	%xmm1, %xmm0
+ 7388      C1
+ 7389              	.LBE2085:
+ 7390              	.LBE2084:
+ 7391              	.LBE2083:
+ 7392              	.LBE2082:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 7393              		.loc 2 872 0
+ 7394 61f5 F30F7F85 		movdqu	%xmm0, -6576(%rbp)
+ 7394      50E6FFFF 
+ 7395 61fd F30F6F85 		movdqu	-6592(%rbp), %xmm0
+ 7395      40E6FFFF 
+ 7396 6205 F30F7F85 		movdqu	%xmm0, -6256(%rbp)
+ 7396      90E7FFFF 
+ 7397 620d F30F6F85 		movdqu	-6576(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 242
+
+
+ 7397      50E6FFFF 
+ 7398 6215 F30F7F85 		movdqu	%xmm0, -6272(%rbp)
+ 7398      80E7FFFF 
+ 7399              	.LBB2086:
+ 7400              	.LBB2087:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 7401              		.loc 2 234 0
+ 7402 621d F30F6F85 		movdqu	-6272(%rbp), %xmm0
+ 7402      80E7FFFF 
+ 7403 6225 F30F6F8D 		movdqu	-6256(%rbp), %xmm1
+ 7403      90E7FFFF 
+ 7404 622d 660FEBC1 		por	%xmm1, %xmm0
+ 7405              	.LBE2087:
+ 7406              	.LBE2086:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 7407              		.loc 2 874 0
+ 7408 6231 F30F7F85 		movdqu	%xmm0, -6592(%rbp)
+ 7408      40E6FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 7409              		.loc 2 876 0
+ 7410 6239 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 7410      00000000 
+ 7411 6241 F30F6F8D 		movdqu	-6560(%rbp), %xmm1
+ 7411      60E6FFFF 
+ 7412 6249 F30F7F8D 		movdqu	%xmm1, -6224(%rbp)
+ 7412      B0E7FFFF 
+ 7413 6251 F30F7F85 		movdqu	%xmm0, -6240(%rbp)
+ 7413      A0E7FFFF 
+ 7414              	.LBB2088:
+ 7415              	.LBB2089:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 7416              		.loc 2 290 0
+ 7417 6259 F30F6F8D 		movdqu	-6240(%rbp), %xmm1
+ 7417      A0E7FFFF 
+ 7418 6261 F30F6F85 		movdqu	-6224(%rbp), %xmm0
+ 7418      B0E7FFFF 
+ 7419 6269 660FF8C1 		psubb	%xmm1, %xmm0
+ 7420              	.LBE2089:
+ 7421              	.LBE2088:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 7422              		.loc 2 876 0
+ 7423 626d F30F7F85 		movdqu	%xmm0, -6560(%rbp)
+ 7423      60E6FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 7424              		.loc 2 878 0
+ 7425 6275 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 7425      00000000 
+ 7426 627d F30F6F8D 		movdqu	-6560(%rbp), %xmm1
+ 7426      60E6FFFF 
+ 7427 6285 F30F7F8D 		movdqu	%xmm1, -6192(%rbp)
+ 7427      D0E7FFFF 
+ 7428 628d F30F7F85 		movdqu	%xmm0, -6208(%rbp)
+ 7428      C0E7FFFF 
+ 7429              	.LBB2090:
+ 7430              	.LBB2091:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 7431              		.loc 2 206 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 243
+
+
+ 7432 6295 F30F6F85 		movdqu	-6208(%rbp), %xmm0
+ 7432      C0E7FFFF 
+ 7433 629d F30F6F8D 		movdqu	-6192(%rbp), %xmm1
+ 7433      D0E7FFFF 
+ 7434 62a5 660FDBC1 		pand	%xmm1, %xmm0
+ 7435              	.LBE2091:
+ 7436              	.LBE2090:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 7437              		.loc 2 878 0
+ 7438 62a9 F30F7F85 		movdqu	%xmm0, -6560(%rbp)
+ 7438      60E6FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 7439              		.loc 2 866 0
+ 7440 62b1 83853CE6 		addl	$1, -6596(%rbp)
+ 7440      FFFF01
+ 7441              	.L108:
+ 7442 62b8 83BD3CE6 		cmpl	$15, -6596(%rbp)
+ 7442      FFFF0F
+ 7443 62bf 0F8635FE 		jbe	.L109
+ 7443      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 7444              		.loc 2 882 0
+ 7445 62c5 F30F6F85 		movdqu	-6592(%rbp), %xmm0
+ 7445      40E6FFFF 
+ 7446              	.LBE2069:
+ 7447              	.LBE2068:
+ 7448              	.LBE2067:
+ 7449              	.LBE2066:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 7450              		.loc 2 1682 0
+ 7451 62cd 660F7F85 		movdqa	%xmm0, -8848(%rbp)
+ 7451      70DDFFFF 
+ 7452              	.LBB2092:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 7453              		.loc 2 1683 0
+ 7454 62d5 660F6F85 		movdqa	-8848(%rbp), %xmm0
+ 7454      70DDFFFF 
+ 7455 62dd F30F7F85 		movdqu	%xmm0, -8448(%rbp)
+ 7455      00DFFFFF 
+ 7456 62e5 E8000000 		call	KDbgWriterGet at PLT
+ 7456      00
+ 7457 62ea 4885C0   		testq	%rax, %rax
+ 7458 62ed 7479     		je	.L111
+ 7459 62ef BF010000 		movl	$1, %edi
+ 7459      00
+ 7460 62f4 E8000000 		call	KDbgCondToFlag at PLT
+ 7460      00
+ 7461 62f9 4889C6   		movq	%rax, %rsi
+ 7462 62fc BF100000 		movl	$16, %edi
+ 7462      00
+ 7463 6301 E8000000 		call	KDbgTestModConds at PLT
+ 7463      00
+ 7464 6306 84C0     		testb	%al, %al
+ 7465 6308 745E     		je	.L111
+ 7466 630a 8B850CDF 		movl	-8436(%rbp), %eax
+ 7466      FFFF
+ 7467 6310 89C7     		movl	%eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 244
+
+
+ 7468 6312 E8E99CFF 		call	bswap_32
+ 7468      FF
+ 7469 6317 4189C5   		movl	%eax, %r13d
+ 7470 631a 8B8508DF 		movl	-8440(%rbp), %eax
+ 7470      FFFF
+ 7471 6320 89C7     		movl	%eax, %edi
+ 7472 6322 E8D99CFF 		call	bswap_32
+ 7472      FF
+ 7473 6327 4189C4   		movl	%eax, %r12d
+ 7474 632a 8B8504DF 		movl	-8444(%rbp), %eax
+ 7474      FFFF
+ 7475 6330 89C7     		movl	%eax, %edi
+ 7476 6332 E8C99CFF 		call	bswap_32
+ 7476      FF
+ 7477 6337 89C3     		movl	%eax, %ebx
+ 7478 6339 8B8500DF 		movl	-8448(%rbp), %eax
+ 7478      FFFF
+ 7479 633f 89C7     		movl	%eax, %edi
+ 7480 6341 E8BA9CFF 		call	bswap_32
+ 7480      FF
+ 7481 6346 4589E9   		movl	%r13d, %r9d
+ 7482 6349 4589E0   		movl	%r12d, %r8d
+ 7483 634c 89D9     		movl	%ebx, %ecx
+ 7484 634e 89C2     		movl	%eax, %edx
+ 7485 6350 488D3500 		leaq	.LC0(%rip), %rsi
+ 7485      000000
+ 7486 6357 488D3D00 		leaq	.LC1(%rip), %rdi
+ 7486      000000
+ 7487 635e B8000000 		movl	$0, %eax
+ 7487      00
+ 7488 6363 E8000000 		call	KDbgMsg at PLT
+ 7488      00
+ 7489              	.L111:
+ 7490 6368 660F6F95 		movdqa	-8848(%rbp), %xmm2
+ 7490      70DDFFFF 
+ 7491 6370 F30F7F95 		movdqu	%xmm2, -6176(%rbp)
+ 7491      E0E7FFFF 
+ 7492              	.LBE2092:
+ 7493              	.LBB2093:
+ 7494              	.LBB2094:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 7495              		.loc 2 667 0
+ 7496 6378 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 7496      00000000 
+ 7497 6380 F30F6F8D 		movdqu	-6176(%rbp), %xmm1
+ 7497      E0E7FFFF 
+ 7498 6388 F30F7F8D 		movdqu	%xmm1, -6144(%rbp)
+ 7498      00E8FFFF 
+ 7499 6390 F30F7F85 		movdqu	%xmm0, -6160(%rbp)
+ 7499      F0E7FFFF 
+ 7500 6398 F30F6F85 		movdqu	-6144(%rbp), %xmm0
+ 7500      00E8FFFF 
+ 7501 63a0 F30F7F85 		movdqu	%xmm0, -6112(%rbp)
+ 7501      20E8FFFF 
+ 7502 63a8 F30F6F85 		movdqu	-6160(%rbp), %xmm0
+ 7502      F0E7FFFF 
+ 7503 63b0 F30F7F85 		movdqu	%xmm0, -6128(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 245
+
+
+ 7503      10E8FFFF 
+ 7504              	.LBB2095:
+ 7505              	.LBB2096:
+ 7506              	.LBB2097:
+ 7507              	.LBB2098:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7508              		.loc 3 529 0
+ 7509 63b8 F30F6F8D 		movdqu	-6128(%rbp), %xmm1
+ 7509      10E8FFFF 
+ 7510 63c0 F30F6F85 		movdqu	-6112(%rbp), %xmm0
+ 7510      20E8FFFF 
+ 7511 63c8 660F3800 		pshufb	%xmm1, %xmm0
+ 7511      C1
+ 7512              	.LBE2098:
+ 7513              	.LBE2097:
+ 7514              	.LBE2096:
+ 7515              	.LBE2095:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 7516              		.loc 2 667 0
+ 7517 63cd F30F7F85 		movdqu	%xmm0, -6176(%rbp)
+ 7517      E0E7FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 7518              		.loc 2 668 0
+ 7519 63d5 F30F6F85 		movdqu	-6176(%rbp), %xmm0
+ 7519      E0E7FFFF 
+ 7520              	.LBE2094:
+ 7521              	.LBE2093:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 7522              		.loc 2 1684 0
+ 7523 63dd 660F7F85 		movdqa	%xmm0, -8848(%rbp)
+ 7523      70DDFFFF 
+ 7524              	.LBB2099:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 7525              		.loc 2 1685 0
+ 7526 63e5 660F6F85 		movdqa	-8848(%rbp), %xmm0
+ 7526      70DDFFFF 
+ 7527 63ed F30F7F85 		movdqu	%xmm0, -8464(%rbp)
+ 7527      F0DEFFFF 
+ 7528 63f5 E8000000 		call	KDbgWriterGet at PLT
+ 7528      00
+ 7529 63fa 4885C0   		testq	%rax, %rax
+ 7530 63fd 7479     		je	.L113
+ 7531 63ff BF010000 		movl	$1, %edi
+ 7531      00
+ 7532 6404 E8000000 		call	KDbgCondToFlag at PLT
+ 7532      00
+ 7533 6409 4889C6   		movq	%rax, %rsi
+ 7534 640c BF100000 		movl	$16, %edi
+ 7534      00
+ 7535 6411 E8000000 		call	KDbgTestModConds at PLT
+ 7535      00
+ 7536 6416 84C0     		testb	%al, %al
+ 7537 6418 745E     		je	.L113
+ 7538 641a 8B85FCDE 		movl	-8452(%rbp), %eax
+ 7538      FFFF
+ 7539 6420 89C7     		movl	%eax, %edi
+ 7540 6422 E8D99BFF 		call	bswap_32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 246
+
+
+ 7540      FF
+ 7541 6427 4189C5   		movl	%eax, %r13d
+ 7542 642a 8B85F8DE 		movl	-8456(%rbp), %eax
+ 7542      FFFF
+ 7543 6430 89C7     		movl	%eax, %edi
+ 7544 6432 E8C99BFF 		call	bswap_32
+ 7544      FF
+ 7545 6437 4189C4   		movl	%eax, %r12d
+ 7546 643a 8B85F4DE 		movl	-8460(%rbp), %eax
+ 7546      FFFF
+ 7547 6440 89C7     		movl	%eax, %edi
+ 7548 6442 E8B99BFF 		call	bswap_32
+ 7548      FF
+ 7549 6447 89C3     		movl	%eax, %ebx
+ 7550 6449 8B85F0DE 		movl	-8464(%rbp), %eax
+ 7550      FFFF
+ 7551 644f 89C7     		movl	%eax, %edi
+ 7552 6451 E8AA9BFF 		call	bswap_32
+ 7552      FF
+ 7553 6456 4589E9   		movl	%r13d, %r9d
+ 7554 6459 4589E0   		movl	%r12d, %r8d
+ 7555 645c 89D9     		movl	%ebx, %ecx
+ 7556 645e 89C2     		movl	%eax, %edx
+ 7557 6460 488D3500 		leaq	.LC2(%rip), %rsi
+ 7557      000000
+ 7558 6467 488D3D00 		leaq	.LC1(%rip), %rdi
+ 7558      000000
+ 7559 646e B8000000 		movl	$0, %eax
+ 7559      00
+ 7560 6473 E8000000 		call	KDbgMsg at PLT
+ 7560      00
+ 7561              	.L113:
+ 7562 6478 660F6F95 		movdqa	-8848(%rbp), %xmm2
+ 7562      70DDFFFF 
+ 7563 6480 F30F7F95 		movdqu	%xmm2, -6080(%rbp)
+ 7563      40E8FFFF 
+ 7564 6488 660F6F85 		movdqa	-8832(%rbp), %xmm0
+ 7564      80DDFFFF 
+ 7565 6490 F30F7F85 		movdqu	%xmm0, -6096(%rbp)
+ 7565      30E8FFFF 
+ 7566              	.LBE2099:
+ 7567              	.LBB2100:
+ 7568              	.LBB2101:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 7569              		.loc 2 178 0
+ 7570 6498 F30F6F85 		movdqu	-6096(%rbp), %xmm0
+ 7570      30E8FFFF 
+ 7571 64a0 F30F6F8D 		movdqu	-6080(%rbp), %xmm1
+ 7571      40E8FFFF 
+ 7572 64a8 660FEFC1 		pxor	%xmm1, %xmm0
+ 7573              	.LBE2101:
+ 7574              	.LBE2100:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 7575              		.loc 2 1686 0
+ 7576 64ac 660F7F85 		movdqa	%xmm0, -8848(%rbp)
+ 7576      70DDFFFF 
+ 7577              	.LBB2102:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 247
+
+
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 7578              		.loc 2 1687 0
+ 7579 64b4 660F6F95 		movdqa	-8848(%rbp), %xmm2
+ 7579      70DDFFFF 
+ 7580 64bc F30F7F95 		movdqu	%xmm2, -8480(%rbp)
+ 7580      E0DEFFFF 
+ 7581 64c4 E8000000 		call	KDbgWriterGet at PLT
+ 7581      00
+ 7582 64c9 4885C0   		testq	%rax, %rax
+ 7583 64cc 7479     		je	.L115
+ 7584 64ce BF010000 		movl	$1, %edi
+ 7584      00
+ 7585 64d3 E8000000 		call	KDbgCondToFlag at PLT
+ 7585      00
+ 7586 64d8 4889C6   		movq	%rax, %rsi
+ 7587 64db BF100000 		movl	$16, %edi
+ 7587      00
+ 7588 64e0 E8000000 		call	KDbgTestModConds at PLT
+ 7588      00
+ 7589 64e5 84C0     		testb	%al, %al
+ 7590 64e7 745E     		je	.L115
+ 7591 64e9 8B85ECDE 		movl	-8468(%rbp), %eax
+ 7591      FFFF
+ 7592 64ef 89C7     		movl	%eax, %edi
+ 7593 64f1 E80A9BFF 		call	bswap_32
+ 7593      FF
+ 7594 64f6 4189C5   		movl	%eax, %r13d
+ 7595 64f9 8B85E8DE 		movl	-8472(%rbp), %eax
+ 7595      FFFF
+ 7596 64ff 89C7     		movl	%eax, %edi
+ 7597 6501 E8FA9AFF 		call	bswap_32
+ 7597      FF
+ 7598 6506 4189C4   		movl	%eax, %r12d
+ 7599 6509 8B85E4DE 		movl	-8476(%rbp), %eax
+ 7599      FFFF
+ 7600 650f 89C7     		movl	%eax, %edi
+ 7601 6511 E8EA9AFF 		call	bswap_32
+ 7601      FF
+ 7602 6516 89C3     		movl	%eax, %ebx
+ 7603 6518 8B85E0DE 		movl	-8480(%rbp), %eax
+ 7603      FFFF
+ 7604 651e 89C7     		movl	%eax, %edi
+ 7605 6520 E8DB9AFF 		call	bswap_32
+ 7605      FF
+ 7606 6525 4589E9   		movl	%r13d, %r9d
+ 7607 6528 4589E0   		movl	%r12d, %r8d
+ 7608 652b 89D9     		movl	%ebx, %ecx
+ 7609 652d 89C2     		movl	%eax, %edx
+ 7610 652f 488D3500 		leaq	.LC3(%rip), %rsi
+ 7610      000000
+ 7611 6536 488D3D00 		leaq	.LC1(%rip), %rdi
+ 7611      000000
+ 7612 653d B8000000 		movl	$0, %eax
+ 7612      00
+ 7613 6542 E8000000 		call	KDbgMsg at PLT
+ 7613      00
+ 7614              	.L115:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 248
+
+
+ 7615 6547 660F6F85 		movdqa	-8848(%rbp), %xmm0
+ 7615      70DDFFFF 
+ 7616 654f F30F7F85 		movdqu	%xmm0, -6064(%rbp)
+ 7616      50E8FFFF 
+ 7617 6557 F30F6F85 		movdqu	-6064(%rbp), %xmm0
+ 7617      50E8FFFF 
+ 7618 655f F30F7F85 		movdqu	%xmm0, -6032(%rbp)
+ 7618      70E8FFFF 
+ 7619              	.LBE2102:
+ 7620              	.LBB2103:
+ 7621              	.LBB2104:
+ 7622              	.LBB2105:
+ 7623              	.LBB2106:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 7624              		.loc 3 450 0
+ 7625 6567 F30F6F85 		movdqu	-6032(%rbp), %xmm0
+ 7625      70E8FFFF 
+ 7626 656f 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 7626      FF
+ 7627              	.LBE2106:
+ 7628              	.LBE2105:
+ 7629              	.LBE2104:
+ 7630              	.LBE2103:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 7631              		.loc 2 1688 0
+ 7632 6574 660F7F85 		movdqa	%xmm0, -8848(%rbp)
+ 7632      70DDFFFF 
+ 7633              	.LBB2107:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 7634              		.loc 2 1689 0
+ 7635 657c 660F6F95 		movdqa	-8848(%rbp), %xmm2
+ 7635      70DDFFFF 
+ 7636 6584 F30F7F95 		movdqu	%xmm2, -8496(%rbp)
+ 7636      D0DEFFFF 
+ 7637 658c E8000000 		call	KDbgWriterGet at PLT
+ 7637      00
+ 7638 6591 4885C0   		testq	%rax, %rax
+ 7639 6594 7479     		je	.L117
+ 7640 6596 BF010000 		movl	$1, %edi
+ 7640      00
+ 7641 659b E8000000 		call	KDbgCondToFlag at PLT
+ 7641      00
+ 7642 65a0 4889C6   		movq	%rax, %rsi
+ 7643 65a3 BF100000 		movl	$16, %edi
+ 7643      00
+ 7644 65a8 E8000000 		call	KDbgTestModConds at PLT
+ 7644      00
+ 7645 65ad 84C0     		testb	%al, %al
+ 7646 65af 745E     		je	.L117
+ 7647 65b1 8B85DCDE 		movl	-8484(%rbp), %eax
+ 7647      FFFF
+ 7648 65b7 89C7     		movl	%eax, %edi
+ 7649 65b9 E8429AFF 		call	bswap_32
+ 7649      FF
+ 7650 65be 4189C5   		movl	%eax, %r13d
+ 7651 65c1 8B85D8DE 		movl	-8488(%rbp), %eax
+ 7651      FFFF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 249
+
+
+ 7652 65c7 89C7     		movl	%eax, %edi
+ 7653 65c9 E8329AFF 		call	bswap_32
+ 7653      FF
+ 7654 65ce 4189C4   		movl	%eax, %r12d
+ 7655 65d1 8B85D4DE 		movl	-8492(%rbp), %eax
+ 7655      FFFF
+ 7656 65d7 89C7     		movl	%eax, %edi
+ 7657 65d9 E8229AFF 		call	bswap_32
+ 7657      FF
+ 7658 65de 89C3     		movl	%eax, %ebx
+ 7659 65e0 8B85D0DE 		movl	-8496(%rbp), %eax
+ 7659      FFFF
+ 7660 65e6 89C7     		movl	%eax, %edi
+ 7661 65e8 E8139AFF 		call	bswap_32
+ 7661      FF
+ 7662 65ed 4589E9   		movl	%r13d, %r9d
+ 7663 65f0 4589E0   		movl	%r12d, %r8d
+ 7664 65f3 89D9     		movl	%ebx, %ecx
+ 7665 65f5 89C2     		movl	%eax, %edx
+ 7666 65f7 488D3500 		leaq	.LC4(%rip), %rsi
+ 7666      000000
+ 7667 65fe 488D3D00 		leaq	.LC1(%rip), %rdi
+ 7667      000000
+ 7668 6605 B8000000 		movl	$0, %eax
+ 7668      00
+ 7669 660a E8000000 		call	KDbgMsg at PLT
+ 7669      00
+ 7670              	.L117:
+ 7671              	.LBE2107:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 7672              		.loc 2 1690 0
+ 7673 660f 660F6F85 		movdqa	-8848(%rbp), %xmm0
+ 7673      70DDFFFF 
+ 7674              	.LBE2061:
+ 7675              	.LBE2060:
+ 7676              		.loc 2 1804 0
+ 7677 6617 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 7677      00DDFFFF 
+1805:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v2,0x02);                             /* F(k11): F(k11): F(k11) : F(k11)       */
+1806:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0 ^= k;                                       /* k12   : k13   : k14    : k15          */
+ 7678              		.loc 2 1806 0
+ 7679 661f 660F6F85 		movdqa	-9040(%rbp), %xmm0
+ 7679      B0DCFFFF 
+ 7680 6627 660FEF85 		pxor	-8960(%rbp), %xmm0
+ 7680      00DDFFFF 
+ 7681 662f 660F7F85 		movdqa	%xmm0, -9040(%rbp)
+ 7681      B0DCFFFF 
+1807:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[3] = v0; /* K12:K13:K14:K15 */
+ 7682              		.loc 2 1807 0
+ 7683 6637 488B85A8 		movq	-8536(%rbp), %rax
+ 7683      DEFFFF
+ 7684 663e 4883C030 		addq	$48, %rax
+ 7685 6642 660F6F95 		movdqa	-9040(%rbp), %xmm2
+ 7685      B0DCFFFF 
+ 7686 664a 660F7F10 		movdqa	%xmm2, (%rax)
+1808:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v0);   /* k15   : k15   : k15    : k15          */
+ 7687              		.loc 2 1808 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 250
+
+
+ 7688 664e 660F6F85 		movdqa	-9040(%rbp), %xmm0
+ 7688      B0DCFFFF 
+ 7689 6656 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 7689      00DDFFFF 
+ 7690 665e 660F6F95 		movdqa	-8960(%rbp), %xmm2
+ 7690      00DDFFFF 
+ 7691 6666 F30F7F95 		movdqu	%xmm2, -6016(%rbp)
+ 7691      80E8FFFF 
+ 7692 666e F30F6F85 		movdqu	-6016(%rbp), %xmm0
+ 7692      80E8FFFF 
+ 7693 6676 F30F7F85 		movdqu	%xmm0, -5984(%rbp)
+ 7693      A0E8FFFF 
+ 7694              	.LBB2108:
+ 7695              	.LBB2109:
+ 7696              	.LBB2110:
+ 7697              	.LBB2111:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 7698              		.loc 3 450 0
+ 7699 667e F30F6F85 		movdqu	-5984(%rbp), %xmm0
+ 7699      A0E8FFFF 
+ 7700 6686 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 7700      FF
+ 7701              	.LBE2111:
+ 7702              	.LBE2110:
+ 7703              	.LBE2109:
+ 7704              	.LBE2108:
+ 7705              		.loc 2 1808 0
+ 7706 668b 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 7706      00DDFFFF 
+1809:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1 ^= k;                                       /* k16   : k17   : k16    : k17          */
+ 7707              		.loc 2 1809 0
+ 7708 6693 660F6F85 		movdqa	-9024(%rbp), %xmm0
+ 7708      C0DCFFFF 
+ 7709 669b 660FEF85 		pxor	-8960(%rbp), %xmm0
+ 7709      00DDFFFF 
+ 7710 66a3 660F7F85 		movdqa	%xmm0, -9024(%rbp)
+ 7710      C0DCFFFF 
+1810:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1811:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1812:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 */
+1813:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1814:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1815:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 7711              		.loc 2 1815 0
+ 7712 66ab 660F6F95 		movdqa	-9024(%rbp), %xmm2
+ 7712      C0DCFFFF 
+ 7713 66b3 660F7F95 		movdqa	%xmm2, -8960(%rbp)
+ 7713      00DDFFFF 
+ 7714 66bb 660F6F85 		movdqa	-8960(%rbp), %xmm0
+ 7714      00DDFFFF 
+ 7715 66c3 F30F7F85 		movdqu	%xmm0, -5952(%rbp)
+ 7715      C0E8FFFF 
+ 7716              	.LBB2112:
+ 7717              	.LBB2113:
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rconw = (AESWord)(AESByte)rcon;
+ 7718              		.loc 2 1629 0
+ 7719 66cb B8040000 		movl	$4, %eax
+
GAS LISTING /tmp/ccjbMjHD.s 			page 251
+
+
+ 7719      00
+ 7720 66d0 0FB6C0   		movzbl	%al, %eax
+ 7721 66d3 8985E0E8 		movl	%eax, -5920(%rbp)
+ 7721      FFFF
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 7722              		.loc 2 1630 0
+ 7723 66d9 F30F6F85 		movdqu	-5952(%rbp), %xmm0
+ 7723      C0E8FFFF 
+ 7724 66e1 F30F7F85 		movdqu	%xmm0, -8416(%rbp)
+ 7724      20DFFFFF 
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[1]);
+ 7725              		.loc 2 1631 0
+ 7726 66e9 8B8524DF 		movl	-8412(%rbp), %eax
+ 7726      FFFF
+ 7727 66ef 8985E4E8 		movl	%eax, -5916(%rbp)
+ 7727      FFFF
+ 7728              	.LBB2114:
+ 7729              	.LBB2115:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 7730              		.loc 2 740 0
+ 7731 66f5 8B85E4E8 		movl	-5916(%rbp), %eax
+ 7731      FFFF
+ 7732 66fb 898510DF 		movl	%eax, -8432(%rbp)
+ 7732      FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 7733              		.loc 2 741 0
+ 7734 6701 C785E8E8 		movl	$0, -5912(%rbp)
+ 7734      FFFF0000 
+ 7734      0000
+ 7735 670b EB36     		jmp	.L118
+ 7736              	.L119:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 7737              		.loc 2 742 0
+ 7738 670d 8B8DE8E8 		movl	-5912(%rbp), %ecx
+ 7738      FFFF
+ 7739 6713 8B85E8E8 		movl	-5912(%rbp), %eax
+ 7739      FFFF
+ 7740 6719 89C0     		mov	%eax, %eax
+ 7741 671b 0FB68405 		movzbl	-8432(%rbp,%rax), %eax
+ 7741      10DFFFFF 
+ 7742 6723 0FB6C0   		movzbl	%al, %eax
+ 7743 6726 89C2     		mov	%eax, %edx
+ 7744 6728 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBox(%rip), %rax
+ 7744      000000
+ 7745 672f 0FB61402 		movzbl	(%rdx,%rax), %edx
+ 7746 6733 89C8     		mov	%ecx, %eax
+ 7747 6735 88940510 		movb	%dl, -8432(%rbp,%rax)
+ 7747      DFFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 7748              		.loc 2 741 0
+ 7749 673c 8385E8E8 		addl	$1, -5912(%rbp)
+ 7749      FFFF01
+ 7750              	.L118:
+ 7751 6743 83BDE8E8 		cmpl	$3, -5912(%rbp)
+ 7751      FFFF03
+ 7752 674a 76C1     		jbe	.L119
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+
GAS LISTING /tmp/ccjbMjHD.s 			page 252
+
+
+ 7753              		.loc 2 743 0
+ 7754 674c 8B8510DF 		movl	-8432(%rbp), %eax
+ 7754      FFFF
+ 7755              	.LBE2115:
+ 7756              	.LBE2114:
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[1]);
+ 7757              		.loc 2 1631 0
+ 7758 6752 8985DCE8 		movl	%eax, -5924(%rbp)
+ 7758      FFFF
+ 7759 6758 8B85DCE8 		movl	-5924(%rbp), %eax
+ 7759      FFFF
+ 7760 675e 8985ECE8 		movl	%eax, -5908(%rbp)
+ 7760      FFFF
+ 7761              	.LBB2116:
+ 7762              	.LBB2117:
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (w >> 8) | (w << 24);
+ 7763              		.loc 2 1196 0
+ 7764 6764 8B85ECE8 		movl	-5908(%rbp), %eax
+ 7764      FFFF
+ 7765 676a C1C808   		rorl	$8, %eax
+ 7766              	.LBE2117:
+ 7767              	.LBE2116:
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(RotWord)(temp);
+ 7768              		.loc 2 1632 0
+ 7769 676d 8985DCE8 		movl	%eax, -5924(%rbp)
+ 7769      FFFF
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp ^= rconw;
+ 7770              		.loc 2 1633 0
+ 7771 6773 8B85E0E8 		movl	-5920(%rbp), %eax
+ 7771      FFFF
+ 7772 6779 3185DCE8 		xorl	%eax, -5924(%rbp)
+ 7772      FFFF
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 7773              		.loc 2 1635 0
+ 7774 677f 8B85DCE8 		movl	-5924(%rbp), %eax
+ 7774      FFFF
+ 7775 6785 89852CDF 		movl	%eax, -8404(%rbp)
+ 7775      FFFF
+ 7776 678b 8B852CDF 		movl	-8404(%rbp), %eax
+ 7776      FFFF
+ 7777 6791 898528DF 		movl	%eax, -8408(%rbp)
+ 7777      FFFF
+ 7778 6797 8B8528DF 		movl	-8408(%rbp), %eax
+ 7778      FFFF
+ 7779 679d 898524DF 		movl	%eax, -8412(%rbp)
+ 7779      FFFF
+ 7780 67a3 8B8524DF 		movl	-8412(%rbp), %eax
+ 7780      FFFF
+ 7781 67a9 898520DF 		movl	%eax, -8416(%rbp)
+ 7781      FFFF
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 7782              		.loc 2 1636 0
+ 7783 67af F30F6F85 		movdqu	-8416(%rbp), %xmm0
+ 7783      20DFFFFF 
+ 7784              	.LBE2113:
+ 7785              	.LBE2112:
+ 7786              		.loc 2 1815 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 253
+
+
+ 7787 67b7 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 7787      00DDFFFF 
+ 7788 67bf 660F6F95 		movdqa	-9040(%rbp), %xmm2
+ 7788      B0DCFFFF 
+ 7789 67c7 F30F7F95 		movdqu	%xmm2, -5904(%rbp)
+ 7789      F0E8FFFF 
+ 7790              	.LBB2118:
+ 7791              	.LBB2119:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 7792              		.loc 2 1565 0
+ 7793 67cf F30F6F85 		movdqu	-5904(%rbp), %xmm0
+ 7793      F0E8FFFF 
+ 7794 67d7 660F7F85 		movdqa	%xmm0, -8816(%rbp)
+ 7794      90DDFFFF 
+ 7795 67df 660F6F95 		movdqa	-8816(%rbp), %xmm2
+ 7795      90DDFFFF 
+ 7796 67e7 F30F7F95 		movdqu	%xmm2, -5888(%rbp)
+ 7796      00E9FFFF 
+ 7797              	.LBB2120:
+ 7798              	.LBB2121:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7799              		.loc 2 1278 0
+ 7800 67ef 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 7800      00000000 
+ 7801 67f7 F30F6F8D 		movdqu	-5888(%rbp), %xmm1
+ 7801      00E9FFFF 
+ 7802 67ff F30F7F8D 		movdqu	%xmm1, -5856(%rbp)
+ 7802      20E9FFFF 
+ 7803 6807 F30F7F85 		movdqu	%xmm0, -5872(%rbp)
+ 7803      10E9FFFF 
+ 7804 680f F30F6F85 		movdqu	-5856(%rbp), %xmm0
+ 7804      20E9FFFF 
+ 7805 6817 F30F7F85 		movdqu	%xmm0, -5824(%rbp)
+ 7805      40E9FFFF 
+ 7806 681f F30F6F85 		movdqu	-5872(%rbp), %xmm0
+ 7806      10E9FFFF 
+ 7807 6827 F30F7F85 		movdqu	%xmm0, -5840(%rbp)
+ 7807      30E9FFFF 
+ 7808              	.LBB2122:
+ 7809              	.LBB2123:
+ 7810              	.LBB2124:
+ 7811              	.LBB2125:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7812              		.loc 3 529 0
+ 7813 682f F30F6F8D 		movdqu	-5840(%rbp), %xmm1
+ 7813      30E9FFFF 
+ 7814 6837 F30F6F85 		movdqu	-5824(%rbp), %xmm0
+ 7814      40E9FFFF 
+ 7815 683f 660F3800 		pshufb	%xmm1, %xmm0
+ 7815      C1
+ 7816              	.LBE2125:
+ 7817              	.LBE2124:
+ 7818              	.LBE2123:
+ 7819              	.LBE2122:
+ 7820              	.LBE2121:
+ 7821              	.LBE2120:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+
GAS LISTING /tmp/ccjbMjHD.s 			page 254
+
+
+ 7822              		.loc 2 1567 0
+ 7823 6844 660F7F85 		movdqa	%xmm0, -8816(%rbp)
+ 7823      90DDFFFF 
+ 7824 684c 660F6F85 		movdqa	-8816(%rbp), %xmm0
+ 7824      90DDFFFF 
+ 7825 6854 660FEF85 		pxor	-5904(%rbp), %xmm0
+ 7825      F0E8FFFF 
+ 7826 685c F30F7F85 		movdqu	%xmm0, -5904(%rbp)
+ 7826      F0E8FFFF 
+ 7827 6864 660F6F85 		movdqa	-8816(%rbp), %xmm0
+ 7827      90DDFFFF 
+ 7828 686c F30F7F85 		movdqu	%xmm0, -5808(%rbp)
+ 7828      50E9FFFF 
+ 7829              	.LBB2126:
+ 7830              	.LBB2127:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7831              		.loc 2 1278 0
+ 7832 6874 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 7832      00000000 
+ 7833 687c F30F6F8D 		movdqu	-5808(%rbp), %xmm1
+ 7833      50E9FFFF 
+ 7834 6884 F30F7F8D 		movdqu	%xmm1, -5776(%rbp)
+ 7834      70E9FFFF 
+ 7835 688c F30F7F85 		movdqu	%xmm0, -5792(%rbp)
+ 7835      60E9FFFF 
+ 7836 6894 F30F6F85 		movdqu	-5776(%rbp), %xmm0
+ 7836      70E9FFFF 
+ 7837 689c F30F7F85 		movdqu	%xmm0, -5744(%rbp)
+ 7837      90E9FFFF 
+ 7838 68a4 F30F6F85 		movdqu	-5792(%rbp), %xmm0
+ 7838      60E9FFFF 
+ 7839 68ac F30F7F85 		movdqu	%xmm0, -5760(%rbp)
+ 7839      80E9FFFF 
+ 7840              	.LBB2128:
+ 7841              	.LBB2129:
+ 7842              	.LBB2130:
+ 7843              	.LBB2131:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7844              		.loc 3 529 0
+ 7845 68b4 F30F6F8D 		movdqu	-5760(%rbp), %xmm1
+ 7845      80E9FFFF 
+ 7846 68bc F30F6F85 		movdqu	-5744(%rbp), %xmm0
+ 7846      90E9FFFF 
+ 7847 68c4 660F3800 		pshufb	%xmm1, %xmm0
+ 7847      C1
+ 7848              	.LBE2131:
+ 7849              	.LBE2130:
+ 7850              	.LBE2129:
+ 7851              	.LBE2128:
+ 7852              	.LBE2127:
+ 7853              	.LBE2126:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7854              		.loc 2 1568 0
+ 7855 68c9 660F7F85 		movdqa	%xmm0, -8816(%rbp)
+ 7855      90DDFFFF 
+ 7856 68d1 660F6F85 		movdqa	-8816(%rbp), %xmm0
+ 7856      90DDFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 255
+
+
+ 7857 68d9 660FEF85 		pxor	-5904(%rbp), %xmm0
+ 7857      F0E8FFFF 
+ 7858 68e1 F30F7F85 		movdqu	%xmm0, -5904(%rbp)
+ 7858      F0E8FFFF 
+ 7859 68e9 660F6F95 		movdqa	-8816(%rbp), %xmm2
+ 7859      90DDFFFF 
+ 7860 68f1 F30F7F95 		movdqu	%xmm2, -5728(%rbp)
+ 7860      A0E9FFFF 
+ 7861              	.LBB2132:
+ 7862              	.LBB2133:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7863              		.loc 2 1278 0
+ 7864 68f9 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 7864      00000000 
+ 7865 6901 F30F6F8D 		movdqu	-5728(%rbp), %xmm1
+ 7865      A0E9FFFF 
+ 7866 6909 F30F7F8D 		movdqu	%xmm1, -5696(%rbp)
+ 7866      C0E9FFFF 
+ 7867 6911 F30F7F85 		movdqu	%xmm0, -5712(%rbp)
+ 7867      B0E9FFFF 
+ 7868 6919 F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 7868      C0E9FFFF 
+ 7869 6921 F30F7F85 		movdqu	%xmm0, -5664(%rbp)
+ 7869      E0E9FFFF 
+ 7870 6929 F30F6F85 		movdqu	-5712(%rbp), %xmm0
+ 7870      B0E9FFFF 
+ 7871 6931 F30F7F85 		movdqu	%xmm0, -5680(%rbp)
+ 7871      D0E9FFFF 
+ 7872              	.LBB2134:
+ 7873              	.LBB2135:
+ 7874              	.LBB2136:
+ 7875              	.LBB2137:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7876              		.loc 3 529 0
+ 7877 6939 F30F6F8D 		movdqu	-5680(%rbp), %xmm1
+ 7877      D0E9FFFF 
+ 7878 6941 F30F6F85 		movdqu	-5664(%rbp), %xmm0
+ 7878      E0E9FFFF 
+ 7879 6949 660F3800 		pshufb	%xmm1, %xmm0
+ 7879      C1
+ 7880              	.LBE2137:
+ 7881              	.LBE2136:
+ 7882              	.LBE2135:
+ 7883              	.LBE2134:
+ 7884              	.LBE2133:
+ 7885              	.LBE2132:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7886              		.loc 2 1569 0
+ 7887 694e 660F7F85 		movdqa	%xmm0, -8816(%rbp)
+ 7887      90DDFFFF 
+ 7888 6956 660F6F85 		movdqa	-8816(%rbp), %xmm0
+ 7888      90DDFFFF 
+ 7889 695e 660FEF85 		pxor	-5904(%rbp), %xmm0
+ 7889      F0E8FFFF 
+ 7890 6966 F30F7F85 		movdqu	%xmm0, -5904(%rbp)
+ 7890      F0E8FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+
GAS LISTING /tmp/ccjbMjHD.s 			page 256
+
+
+ 7891              		.loc 2 1571 0
+ 7892 696e F30F6F85 		movdqu	-5904(%rbp), %xmm0
+ 7892      F0E8FFFF 
+ 7893              	.LBE2119:
+ 7894              	.LBE2118:
+1816:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v1,0x04);                             /* F(k17): F(k17): F(k17) : F(k17)       */
+1817:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3  = AESBCMEMBER(ShiftXorColumns) (v0);       /* k12   :k12^k13:k12^k13^k14:k12^k13^k14^k15 */
+ 7895              		.loc 2 1817 0
+ 7896 6976 660F7F85 		movdqa	%xmm0, -8992(%rbp)
+ 7896      E0DCFFFF 
+1818:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3 ^= k;                                       /* k18   : k19   : k20    : k21          */
+ 7897              		.loc 2 1818 0
+ 7898 697e 660F6F85 		movdqa	-8992(%rbp), %xmm0
+ 7898      E0DCFFFF 
+ 7899 6986 660FEF85 		pxor	-8960(%rbp), %xmm0
+ 7899      00DDFFFF 
+ 7900 698e 660F7F85 		movdqa	%xmm0, -8992(%rbp)
+ 7900      E0DCFFFF 
+ 7901 6996 660F6F95 		movdqa	-9024(%rbp), %xmm2
+ 7901      C0DCFFFF 
+ 7902 699e F30F7F95 		movdqu	%xmm2, -5648(%rbp)
+ 7902      F0E9FFFF 
+ 7903              	.LBB2138:
+ 7904              	.LBB2139:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 7905              		.loc 2 1565 0
+ 7906 69a6 F30F6F85 		movdqu	-5648(%rbp), %xmm0
+ 7906      F0E9FFFF 
+ 7907 69ae 660F7F85 		movdqa	%xmm0, -8800(%rbp)
+ 7907      A0DDFFFF 
+ 7908 69b6 660F6F95 		movdqa	-8800(%rbp), %xmm2
+ 7908      A0DDFFFF 
+ 7909 69be F30F7F95 		movdqu	%xmm2, -5632(%rbp)
+ 7909      00EAFFFF 
+ 7910              	.LBB2140:
+ 7911              	.LBB2141:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7912              		.loc 2 1278 0
+ 7913 69c6 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 7913      00000000 
+ 7914 69ce F30F6F8D 		movdqu	-5632(%rbp), %xmm1
+ 7914      00EAFFFF 
+ 7915 69d6 F30F7F8D 		movdqu	%xmm1, -5600(%rbp)
+ 7915      20EAFFFF 
+ 7916 69de F30F7F85 		movdqu	%xmm0, -5616(%rbp)
+ 7916      10EAFFFF 
+ 7917 69e6 F30F6F85 		movdqu	-5600(%rbp), %xmm0
+ 7917      20EAFFFF 
+ 7918 69ee F30F7F85 		movdqu	%xmm0, -5568(%rbp)
+ 7918      40EAFFFF 
+ 7919 69f6 F30F6F85 		movdqu	-5616(%rbp), %xmm0
+ 7919      10EAFFFF 
+ 7920 69fe F30F7F85 		movdqu	%xmm0, -5584(%rbp)
+ 7920      30EAFFFF 
+ 7921              	.LBB2142:
+ 7922              	.LBB2143:
+ 7923              	.LBB2144:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 257
+
+
+ 7924              	.LBB2145:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7925              		.loc 3 529 0
+ 7926 6a06 F30F6F8D 		movdqu	-5584(%rbp), %xmm1
+ 7926      30EAFFFF 
+ 7927 6a0e F30F6F85 		movdqu	-5568(%rbp), %xmm0
+ 7927      40EAFFFF 
+ 7928 6a16 660F3800 		pshufb	%xmm1, %xmm0
+ 7928      C1
+ 7929              	.LBE2145:
+ 7930              	.LBE2144:
+ 7931              	.LBE2143:
+ 7932              	.LBE2142:
+ 7933              	.LBE2141:
+ 7934              	.LBE2140:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7935              		.loc 2 1567 0
+ 7936 6a1b 660F7F85 		movdqa	%xmm0, -8800(%rbp)
+ 7936      A0DDFFFF 
+ 7937 6a23 660F6F85 		movdqa	-8800(%rbp), %xmm0
+ 7937      A0DDFFFF 
+ 7938 6a2b 660FEF85 		pxor	-5648(%rbp), %xmm0
+ 7938      F0E9FFFF 
+ 7939 6a33 F30F7F85 		movdqu	%xmm0, -5648(%rbp)
+ 7939      F0E9FFFF 
+ 7940 6a3b 660F6F85 		movdqa	-8800(%rbp), %xmm0
+ 7940      A0DDFFFF 
+ 7941 6a43 F30F7F85 		movdqu	%xmm0, -5552(%rbp)
+ 7941      50EAFFFF 
+ 7942              	.LBB2146:
+ 7943              	.LBB2147:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7944              		.loc 2 1278 0
+ 7945 6a4b 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 7945      00000000 
+ 7946 6a53 F30F6F8D 		movdqu	-5552(%rbp), %xmm1
+ 7946      50EAFFFF 
+ 7947 6a5b F30F7F8D 		movdqu	%xmm1, -5520(%rbp)
+ 7947      70EAFFFF 
+ 7948 6a63 F30F7F85 		movdqu	%xmm0, -5536(%rbp)
+ 7948      60EAFFFF 
+ 7949 6a6b F30F6F85 		movdqu	-5520(%rbp), %xmm0
+ 7949      70EAFFFF 
+ 7950 6a73 F30F7F85 		movdqu	%xmm0, -5488(%rbp)
+ 7950      90EAFFFF 
+ 7951 6a7b F30F6F85 		movdqu	-5536(%rbp), %xmm0
+ 7951      60EAFFFF 
+ 7952 6a83 F30F7F85 		movdqu	%xmm0, -5504(%rbp)
+ 7952      80EAFFFF 
+ 7953              	.LBB2148:
+ 7954              	.LBB2149:
+ 7955              	.LBB2150:
+ 7956              	.LBB2151:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7957              		.loc 3 529 0
+ 7958 6a8b F30F6F8D 		movdqu	-5504(%rbp), %xmm1
+ 7958      80EAFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 258
+
+
+ 7959 6a93 F30F6F85 		movdqu	-5488(%rbp), %xmm0
+ 7959      90EAFFFF 
+ 7960 6a9b 660F3800 		pshufb	%xmm1, %xmm0
+ 7960      C1
+ 7961              	.LBE2151:
+ 7962              	.LBE2150:
+ 7963              	.LBE2149:
+ 7964              	.LBE2148:
+ 7965              	.LBE2147:
+ 7966              	.LBE2146:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7967              		.loc 2 1568 0
+ 7968 6aa0 660F7F85 		movdqa	%xmm0, -8800(%rbp)
+ 7968      A0DDFFFF 
+ 7969 6aa8 660F6F85 		movdqa	-8800(%rbp), %xmm0
+ 7969      A0DDFFFF 
+ 7970 6ab0 660FEF85 		pxor	-5648(%rbp), %xmm0
+ 7970      F0E9FFFF 
+ 7971 6ab8 F30F7F85 		movdqu	%xmm0, -5648(%rbp)
+ 7971      F0E9FFFF 
+ 7972 6ac0 660F6F95 		movdqa	-8800(%rbp), %xmm2
+ 7972      A0DDFFFF 
+ 7973 6ac8 F30F7F95 		movdqu	%xmm2, -5472(%rbp)
+ 7973      A0EAFFFF 
+ 7974              	.LBB2152:
+ 7975              	.LBB2153:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 7976              		.loc 2 1278 0
+ 7977 6ad0 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 7977      00000000 
+ 7978 6ad8 F30F6F8D 		movdqu	-5472(%rbp), %xmm1
+ 7978      A0EAFFFF 
+ 7979 6ae0 F30F7F8D 		movdqu	%xmm1, -5440(%rbp)
+ 7979      C0EAFFFF 
+ 7980 6ae8 F30F7F85 		movdqu	%xmm0, -5456(%rbp)
+ 7980      B0EAFFFF 
+ 7981 6af0 F30F6F85 		movdqu	-5440(%rbp), %xmm0
+ 7981      C0EAFFFF 
+ 7982 6af8 F30F7F85 		movdqu	%xmm0, -5408(%rbp)
+ 7982      E0EAFFFF 
+ 7983 6b00 F30F6F85 		movdqu	-5456(%rbp), %xmm0
+ 7983      B0EAFFFF 
+ 7984 6b08 F30F7F85 		movdqu	%xmm0, -5424(%rbp)
+ 7984      D0EAFFFF 
+ 7985              	.LBB2154:
+ 7986              	.LBB2155:
+ 7987              	.LBB2156:
+ 7988              	.LBB2157:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 7989              		.loc 3 529 0
+ 7990 6b10 F30F6F8D 		movdqu	-5424(%rbp), %xmm1
+ 7990      D0EAFFFF 
+ 7991 6b18 F30F6F85 		movdqu	-5408(%rbp), %xmm0
+ 7991      E0EAFFFF 
+ 7992 6b20 660F3800 		pshufb	%xmm1, %xmm0
+ 7992      C1
+ 7993              	.LBE2157:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 259
+
+
+ 7994              	.LBE2156:
+ 7995              	.LBE2155:
+ 7996              	.LBE2154:
+ 7997              	.LBE2153:
+ 7998              	.LBE2152:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 7999              		.loc 2 1569 0
+ 8000 6b25 660F7F85 		movdqa	%xmm0, -8800(%rbp)
+ 8000      A0DDFFFF 
+ 8001 6b2d 660F6F85 		movdqa	-8800(%rbp), %xmm0
+ 8001      A0DDFFFF 
+ 8002 6b35 660FEF85 		pxor	-5648(%rbp), %xmm0
+ 8002      F0E9FFFF 
+ 8003 6b3d F30F7F85 		movdqu	%xmm0, -5648(%rbp)
+ 8003      F0E9FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 8004              		.loc 2 1571 0
+ 8005 6b45 F30F6F85 		movdqu	-5648(%rbp), %xmm0
+ 8005      F0E9FFFF 
+ 8006              	.LBE2139:
+ 8007              	.LBE2138:
+1819:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4  = AESBCMEMBER(ShiftXorColumns) (v1);       /* k16   :k16^k17: k17    : 0            */
+ 8008              		.loc 2 1819 0
+ 8009 6b4d 660F7F85 		movdqa	%xmm0, -8976(%rbp)
+ 8009      F0DCFFFF 
+1820:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k21   : k21   : k21    : k21          */
+ 8010              		.loc 2 1820 0
+ 8011 6b55 660F6F85 		movdqa	-8992(%rbp), %xmm0
+ 8011      E0DCFFFF 
+ 8012 6b5d 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 8012      00DDFFFF 
+ 8013 6b65 660F6F95 		movdqa	-8960(%rbp), %xmm2
+ 8013      00DDFFFF 
+ 8014 6b6d F30F7F95 		movdqu	%xmm2, -5392(%rbp)
+ 8014      F0EAFFFF 
+ 8015 6b75 F30F6F85 		movdqu	-5392(%rbp), %xmm0
+ 8015      F0EAFFFF 
+ 8016 6b7d F30F7F85 		movdqu	%xmm0, -5360(%rbp)
+ 8016      10EBFFFF 
+ 8017              	.LBB2158:
+ 8018              	.LBB2159:
+ 8019              	.LBB2160:
+ 8020              	.LBB2161:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 8021              		.loc 3 450 0
+ 8022 6b85 F30F6F85 		movdqu	-5360(%rbp), %xmm0
+ 8022      10EBFFFF 
+ 8023 6b8d 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 8023      FF
+ 8024              	.LBE2161:
+ 8025              	.LBE2160:
+ 8026              	.LBE2159:
+ 8027              	.LBE2158:
+ 8028              		.loc 2 1820 0
+ 8029 6b92 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 8029      00DDFFFF 
+1821:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4 ^= k;                                       /* k22   : k23   : x      : x            */
+
GAS LISTING /tmp/ccjbMjHD.s 			page 260
+
+
+ 8030              		.loc 2 1821 0
+ 8031 6b9a 660F6F85 		movdqa	-8976(%rbp), %xmm0
+ 8031      F0DCFFFF 
+ 8032 6ba2 660FEF85 		pxor	-8960(%rbp), %xmm0
+ 8032      00DDFFFF 
+ 8033 6baa 660F7F85 		movdqa	%xmm0, -8976(%rbp)
+ 8033      F0DCFFFF 
+ 8034 6bb2 660F6F95 		movdqa	-9024(%rbp), %xmm2
+ 8034      C0DCFFFF 
+ 8035 6bba F30F7F95 		movdqu	%xmm2, -5328(%rbp)
+ 8035      30EBFFFF 
+ 8036 6bc2 660F6F85 		movdqa	-8992(%rbp), %xmm0
+ 8036      E0DCFFFF 
+ 8037 6bca F30F7F85 		movdqu	%xmm0, -5344(%rbp)
+ 8037      20EBFFFF 
+ 8038 6bd2 F30F6F85 		movdqu	-5328(%rbp), %xmm0
+ 8038      30EBFFFF 
+ 8039 6bda F30F7F85 		movdqu	%xmm0, -5280(%rbp)
+ 8039      60EBFFFF 
+ 8040 6be2 F30F6F85 		movdqu	-5344(%rbp), %xmm0
+ 8040      20EBFFFF 
+ 8041 6bea F30F7F85 		movdqu	%xmm0, -5296(%rbp)
+ 8041      50EBFFFF 
+ 8042              	.LBB2162:
+ 8043              	.LBB2163:
+ 8044              	.LBB2164:
+ 8045              	.LBB2165:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 8046              		.loc 3 366 0
+ 8047 6bf2 F20F1085 		movsd	-5296(%rbp), %xmm0
+ 8047      50EBFFFF 
+ 8048 6bfa 660F1685 		movhpd	-5288(%rbp), %xmm0
+ 8048      58EBFFFF 
+ 8049 6c02 F20F108D 		movsd	-5280(%rbp), %xmm1
+ 8049      60EBFFFF 
+ 8050 6c0a 660F168D 		movhpd	-5272(%rbp), %xmm1
+ 8050      68EBFFFF 
+ 8051 6c12 660F28D1 		movapd	%xmm1, %xmm2
+ 8052 6c16 660F14D0 		unpcklpd	%xmm0, %xmm2
+ 8053 6c1a 660F28C2 		movapd	%xmm2, %xmm0
+ 8054              	.LBE2165:
+ 8055              	.LBE2164:
+ 8056              	.LBE2163:
+ 8057              	.LBE2162:
+1822:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateMerge1) (v1,v3);        /* k16   : k17   : k18    : k19          */
+ 8058              		.loc 2 1822 0
+ 8059 6c1e 660F7F85 		movdqa	%xmm0, -9024(%rbp)
+ 8059      C0DCFFFF 
+1823:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[4] = v1; /* K16:K17:K18:K19 */
+ 8060              		.loc 2 1823 0
+ 8061 6c26 488B85A8 		movq	-8536(%rbp), %rax
+ 8061      DEFFFF
+ 8062 6c2d 4883C040 		addq	$64, %rax
+ 8063 6c31 660F6F85 		movdqa	-9024(%rbp), %xmm0
+ 8063      C0DCFFFF 
+ 8064 6c39 660F7F00 		movdqa	%xmm0, (%rax)
+ 8065 6c3d 660F6F95 		movdqa	-8992(%rbp), %xmm2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 261
+
+
+ 8065      E0DCFFFF 
+ 8066 6c45 F30F7F95 		movdqu	%xmm2, -5248(%rbp)
+ 8066      80EBFFFF 
+ 8067 6c4d 660F6F85 		movdqa	-8976(%rbp), %xmm0
+ 8067      F0DCFFFF 
+ 8068 6c55 F30F7F85 		movdqu	%xmm0, -5264(%rbp)
+ 8068      70EBFFFF 
+ 8069 6c5d F30F6F85 		movdqu	-5248(%rbp), %xmm0
+ 8069      80EBFFFF 
+ 8070 6c65 F30F7F85 		movdqu	%xmm0, -5200(%rbp)
+ 8070      B0EBFFFF 
+ 8071 6c6d F30F6F85 		movdqu	-5264(%rbp), %xmm0
+ 8071      70EBFFFF 
+ 8072 6c75 F30F7F85 		movdqu	%xmm0, -5216(%rbp)
+ 8072      A0EBFFFF 
+ 8073              	.LBB2166:
+ 8074              	.LBB2167:
+ 8075              	.LBB2168:
+ 8076              	.LBB2169:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 8077              		.loc 3 366 0
+ 8078 6c7d F20F108D 		movsd	-5216(%rbp), %xmm1
+ 8078      A0EBFFFF 
+ 8079 6c85 660F168D 		movhpd	-5208(%rbp), %xmm1
+ 8079      A8EBFFFF 
+ 8080 6c8d F20F1085 		movsd	-5200(%rbp), %xmm0
+ 8080      B0EBFFFF 
+ 8081 6c95 660F1685 		movhpd	-5192(%rbp), %xmm0
+ 8081      B8EBFFFF 
+ 8082 6c9d 660FC6C1 		shufpd	$1, %xmm1, %xmm0
+ 8082      01
+ 8083              	.LBE2169:
+ 8084              	.LBE2168:
+ 8085              	.LBE2167:
+ 8086              	.LBE2166:
+1824:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1825:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v2  = AESBCMEMBER(StateMerge2) (v3,v4);        /* k20   : k21   : k22    : k23          */
+ 8087              		.loc 2 1825 0
+ 8088 6ca2 660F7F85 		movdqa	%xmm0, -9008(%rbp)
+ 8088      D0DCFFFF 
+1826:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[5] = v2; /* K20:K21:K22:K23 */
+ 8089              		.loc 2 1826 0
+ 8090 6caa 488B85A8 		movq	-8536(%rbp), %rax
+ 8090      DEFFFF
+ 8091 6cb1 4883C050 		addq	$80, %rax
+ 8092 6cb5 660F6F95 		movdqa	-9008(%rbp), %xmm2
+ 8092      D0DCFFFF 
+ 8093 6cbd 660F7F10 		movdqa	%xmm2, (%rax)
+ 8094 6cc1 660F6F85 		movdqa	-8992(%rbp), %xmm0
+ 8094      E0DCFFFF 
+ 8095 6cc9 F30F7F85 		movdqu	%xmm0, -5184(%rbp)
+ 8095      C0EBFFFF 
+ 8096              	.LBB2170:
+ 8097              	.LBB2171:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 8098              		.loc 2 1565 0
+ 8099 6cd1 F30F6F95 		movdqu	-5184(%rbp), %xmm2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 262
+
+
+ 8099      C0EBFFFF 
+ 8100 6cd9 660F7F95 		movdqa	%xmm2, -8784(%rbp)
+ 8100      B0DDFFFF 
+ 8101 6ce1 660F6F85 		movdqa	-8784(%rbp), %xmm0
+ 8101      B0DDFFFF 
+ 8102 6ce9 F30F7F85 		movdqu	%xmm0, -5168(%rbp)
+ 8102      D0EBFFFF 
+ 8103              	.LBB2172:
+ 8104              	.LBB2173:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 8105              		.loc 2 1278 0
+ 8106 6cf1 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 8106      00000000 
+ 8107 6cf9 F30F6F8D 		movdqu	-5168(%rbp), %xmm1
+ 8107      D0EBFFFF 
+ 8108 6d01 F30F7F8D 		movdqu	%xmm1, -5136(%rbp)
+ 8108      F0EBFFFF 
+ 8109 6d09 F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 8109      E0EBFFFF 
+ 8110 6d11 F30F6F85 		movdqu	-5136(%rbp), %xmm0
+ 8110      F0EBFFFF 
+ 8111 6d19 F30F7F85 		movdqu	%xmm0, -5104(%rbp)
+ 8111      10ECFFFF 
+ 8112 6d21 F30F6F85 		movdqu	-5152(%rbp), %xmm0
+ 8112      E0EBFFFF 
+ 8113 6d29 F30F7F85 		movdqu	%xmm0, -5120(%rbp)
+ 8113      00ECFFFF 
+ 8114              	.LBB2174:
+ 8115              	.LBB2175:
+ 8116              	.LBB2176:
+ 8117              	.LBB2177:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8118              		.loc 3 529 0
+ 8119 6d31 F30F6F8D 		movdqu	-5120(%rbp), %xmm1
+ 8119      00ECFFFF 
+ 8120 6d39 F30F6F85 		movdqu	-5104(%rbp), %xmm0
+ 8120      10ECFFFF 
+ 8121 6d41 660F3800 		pshufb	%xmm1, %xmm0
+ 8121      C1
+ 8122              	.LBE2177:
+ 8123              	.LBE2176:
+ 8124              	.LBE2175:
+ 8125              	.LBE2174:
+ 8126              	.LBE2173:
+ 8127              	.LBE2172:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8128              		.loc 2 1567 0
+ 8129 6d46 660F7F85 		movdqa	%xmm0, -8784(%rbp)
+ 8129      B0DDFFFF 
+ 8130 6d4e 660F6F85 		movdqa	-8784(%rbp), %xmm0
+ 8130      B0DDFFFF 
+ 8131 6d56 660FEF85 		pxor	-5184(%rbp), %xmm0
+ 8131      C0EBFFFF 
+ 8132 6d5e F30F7F85 		movdqu	%xmm0, -5184(%rbp)
+ 8132      C0EBFFFF 
+ 8133 6d66 660F6F95 		movdqa	-8784(%rbp), %xmm2
+ 8133      B0DDFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 263
+
+
+ 8134 6d6e F30F7F95 		movdqu	%xmm2, -5088(%rbp)
+ 8134      20ECFFFF 
+ 8135              	.LBB2178:
+ 8136              	.LBB2179:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 8137              		.loc 2 1278 0
+ 8138 6d76 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 8138      00000000 
+ 8139 6d7e F30F6F8D 		movdqu	-5088(%rbp), %xmm1
+ 8139      20ECFFFF 
+ 8140 6d86 F30F7F8D 		movdqu	%xmm1, -5056(%rbp)
+ 8140      40ECFFFF 
+ 8141 6d8e F30F7F85 		movdqu	%xmm0, -5072(%rbp)
+ 8141      30ECFFFF 
+ 8142 6d96 F30F6F85 		movdqu	-5056(%rbp), %xmm0
+ 8142      40ECFFFF 
+ 8143 6d9e F30F7F85 		movdqu	%xmm0, -5024(%rbp)
+ 8143      60ECFFFF 
+ 8144 6da6 F30F6F85 		movdqu	-5072(%rbp), %xmm0
+ 8144      30ECFFFF 
+ 8145 6dae F30F7F85 		movdqu	%xmm0, -5040(%rbp)
+ 8145      50ECFFFF 
+ 8146              	.LBB2180:
+ 8147              	.LBB2181:
+ 8148              	.LBB2182:
+ 8149              	.LBB2183:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8150              		.loc 3 529 0
+ 8151 6db6 F30F6F8D 		movdqu	-5040(%rbp), %xmm1
+ 8151      50ECFFFF 
+ 8152 6dbe F30F6F85 		movdqu	-5024(%rbp), %xmm0
+ 8152      60ECFFFF 
+ 8153 6dc6 660F3800 		pshufb	%xmm1, %xmm0
+ 8153      C1
+ 8154              	.LBE2183:
+ 8155              	.LBE2182:
+ 8156              	.LBE2181:
+ 8157              	.LBE2180:
+ 8158              	.LBE2179:
+ 8159              	.LBE2178:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8160              		.loc 2 1568 0
+ 8161 6dcb 660F7F85 		movdqa	%xmm0, -8784(%rbp)
+ 8161      B0DDFFFF 
+ 8162 6dd3 660F6F85 		movdqa	-8784(%rbp), %xmm0
+ 8162      B0DDFFFF 
+ 8163 6ddb 660FEF85 		pxor	-5184(%rbp), %xmm0
+ 8163      C0EBFFFF 
+ 8164 6de3 F30F7F85 		movdqu	%xmm0, -5184(%rbp)
+ 8164      C0EBFFFF 
+ 8165 6deb 660F6F85 		movdqa	-8784(%rbp), %xmm0
+ 8165      B0DDFFFF 
+ 8166 6df3 F30F7F85 		movdqu	%xmm0, -5008(%rbp)
+ 8166      70ECFFFF 
+ 8167              	.LBB2184:
+ 8168              	.LBB2185:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+
GAS LISTING /tmp/ccjbMjHD.s 			page 264
+
+
+ 8169              		.loc 2 1278 0
+ 8170 6dfb 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 8170      00000000 
+ 8171 6e03 F30F6F8D 		movdqu	-5008(%rbp), %xmm1
+ 8171      70ECFFFF 
+ 8172 6e0b F30F7F8D 		movdqu	%xmm1, -4976(%rbp)
+ 8172      90ECFFFF 
+ 8173 6e13 F30F7F85 		movdqu	%xmm0, -4992(%rbp)
+ 8173      80ECFFFF 
+ 8174 6e1b F30F6F85 		movdqu	-4976(%rbp), %xmm0
+ 8174      90ECFFFF 
+ 8175 6e23 F30F7F85 		movdqu	%xmm0, -4944(%rbp)
+ 8175      B0ECFFFF 
+ 8176 6e2b F30F6F85 		movdqu	-4992(%rbp), %xmm0
+ 8176      80ECFFFF 
+ 8177 6e33 F30F7F85 		movdqu	%xmm0, -4960(%rbp)
+ 8177      A0ECFFFF 
+ 8178              	.LBB2186:
+ 8179              	.LBB2187:
+ 8180              	.LBB2188:
+ 8181              	.LBB2189:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8182              		.loc 3 529 0
+ 8183 6e3b F30F6F8D 		movdqu	-4960(%rbp), %xmm1
+ 8183      A0ECFFFF 
+ 8184 6e43 F30F6F85 		movdqu	-4944(%rbp), %xmm0
+ 8184      B0ECFFFF 
+ 8185 6e4b 660F3800 		pshufb	%xmm1, %xmm0
+ 8185      C1
+ 8186              	.LBE2189:
+ 8187              	.LBE2188:
+ 8188              	.LBE2187:
+ 8189              	.LBE2186:
+ 8190              	.LBE2185:
+ 8191              	.LBE2184:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8192              		.loc 2 1569 0
+ 8193 6e50 660F7F85 		movdqa	%xmm0, -8784(%rbp)
+ 8193      B0DDFFFF 
+ 8194 6e58 660F6F85 		movdqa	-8784(%rbp), %xmm0
+ 8194      B0DDFFFF 
+ 8195 6e60 660FEF85 		pxor	-5184(%rbp), %xmm0
+ 8195      C0EBFFFF 
+ 8196 6e68 F30F7F85 		movdqu	%xmm0, -5184(%rbp)
+ 8196      C0EBFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 8197              		.loc 2 1571 0
+ 8198 6e70 F30F6F85 		movdqu	-5184(%rbp), %xmm0
+ 8198      C0EBFFFF 
+ 8199              	.LBE2171:
+ 8200              	.LBE2170:
+1827:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1828:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 2 */
+1829:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(ShiftXorColumns) (v3);       /* k18   :k18^k19:k18^k19^k20:k18^k19^k20^k21 */
+ 8201              		.loc 2 1829 0
+ 8202 6e78 660F7F85 		movdqa	%xmm0, -9040(%rbp)
+ 8202      B0DCFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 265
+
+
+ 8203 6e80 660F6F95 		movdqa	-8976(%rbp), %xmm2
+ 8203      F0DCFFFF 
+ 8204 6e88 F30F7F95 		movdqu	%xmm2, -4928(%rbp)
+ 8204      C0ECFFFF 
+ 8205              	.LBB2190:
+ 8206              	.LBB2191:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 8207              		.loc 2 1565 0
+ 8208 6e90 F30F6F85 		movdqu	-4928(%rbp), %xmm0
+ 8208      C0ECFFFF 
+ 8209 6e98 660F7F85 		movdqa	%xmm0, -8768(%rbp)
+ 8209      C0DDFFFF 
+ 8210 6ea0 660F6F95 		movdqa	-8768(%rbp), %xmm2
+ 8210      C0DDFFFF 
+ 8211 6ea8 F30F7F95 		movdqu	%xmm2, -4912(%rbp)
+ 8211      D0ECFFFF 
+ 8212              	.LBB2192:
+ 8213              	.LBB2193:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 8214              		.loc 2 1278 0
+ 8215 6eb0 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 8215      00000000 
+ 8216 6eb8 F30F6F8D 		movdqu	-4912(%rbp), %xmm1
+ 8216      D0ECFFFF 
+ 8217 6ec0 F30F7F8D 		movdqu	%xmm1, -4880(%rbp)
+ 8217      F0ECFFFF 
+ 8218 6ec8 F30F7F85 		movdqu	%xmm0, -4896(%rbp)
+ 8218      E0ECFFFF 
+ 8219 6ed0 F30F6F85 		movdqu	-4880(%rbp), %xmm0
+ 8219      F0ECFFFF 
+ 8220 6ed8 F30F7F85 		movdqu	%xmm0, -4848(%rbp)
+ 8220      10EDFFFF 
+ 8221 6ee0 F30F6F85 		movdqu	-4896(%rbp), %xmm0
+ 8221      E0ECFFFF 
+ 8222 6ee8 F30F7F85 		movdqu	%xmm0, -4864(%rbp)
+ 8222      00EDFFFF 
+ 8223              	.LBB2194:
+ 8224              	.LBB2195:
+ 8225              	.LBB2196:
+ 8226              	.LBB2197:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8227              		.loc 3 529 0
+ 8228 6ef0 F30F6F8D 		movdqu	-4864(%rbp), %xmm1
+ 8228      00EDFFFF 
+ 8229 6ef8 F30F6F85 		movdqu	-4848(%rbp), %xmm0
+ 8229      10EDFFFF 
+ 8230 6f00 660F3800 		pshufb	%xmm1, %xmm0
+ 8230      C1
+ 8231              	.LBE2197:
+ 8232              	.LBE2196:
+ 8233              	.LBE2195:
+ 8234              	.LBE2194:
+ 8235              	.LBE2193:
+ 8236              	.LBE2192:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8237              		.loc 2 1567 0
+ 8238 6f05 660F7F85 		movdqa	%xmm0, -8768(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 266
+
+
+ 8238      C0DDFFFF 
+ 8239 6f0d 660F6F85 		movdqa	-8768(%rbp), %xmm0
+ 8239      C0DDFFFF 
+ 8240 6f15 660FEF85 		pxor	-4928(%rbp), %xmm0
+ 8240      C0ECFFFF 
+ 8241 6f1d F30F7F85 		movdqu	%xmm0, -4928(%rbp)
+ 8241      C0ECFFFF 
+ 8242 6f25 660F6F85 		movdqa	-8768(%rbp), %xmm0
+ 8242      C0DDFFFF 
+ 8243 6f2d F30F7F85 		movdqu	%xmm0, -4832(%rbp)
+ 8243      20EDFFFF 
+ 8244              	.LBB2198:
+ 8245              	.LBB2199:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 8246              		.loc 2 1278 0
+ 8247 6f35 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 8247      00000000 
+ 8248 6f3d F30F6F8D 		movdqu	-4832(%rbp), %xmm1
+ 8248      20EDFFFF 
+ 8249 6f45 F30F7F8D 		movdqu	%xmm1, -4800(%rbp)
+ 8249      40EDFFFF 
+ 8250 6f4d F30F7F85 		movdqu	%xmm0, -4816(%rbp)
+ 8250      30EDFFFF 
+ 8251 6f55 F30F6F85 		movdqu	-4800(%rbp), %xmm0
+ 8251      40EDFFFF 
+ 8252 6f5d F30F7F85 		movdqu	%xmm0, -4768(%rbp)
+ 8252      60EDFFFF 
+ 8253 6f65 F30F6F85 		movdqu	-4816(%rbp), %xmm0
+ 8253      30EDFFFF 
+ 8254 6f6d F30F7F85 		movdqu	%xmm0, -4784(%rbp)
+ 8254      50EDFFFF 
+ 8255              	.LBB2200:
+ 8256              	.LBB2201:
+ 8257              	.LBB2202:
+ 8258              	.LBB2203:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8259              		.loc 3 529 0
+ 8260 6f75 F30F6F8D 		movdqu	-4784(%rbp), %xmm1
+ 8260      50EDFFFF 
+ 8261 6f7d F30F6F85 		movdqu	-4768(%rbp), %xmm0
+ 8261      60EDFFFF 
+ 8262 6f85 660F3800 		pshufb	%xmm1, %xmm0
+ 8262      C1
+ 8263              	.LBE2203:
+ 8264              	.LBE2202:
+ 8265              	.LBE2201:
+ 8266              	.LBE2200:
+ 8267              	.LBE2199:
+ 8268              	.LBE2198:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8269              		.loc 2 1568 0
+ 8270 6f8a 660F7F85 		movdqa	%xmm0, -8768(%rbp)
+ 8270      C0DDFFFF 
+ 8271 6f92 660F6F85 		movdqa	-8768(%rbp), %xmm0
+ 8271      C0DDFFFF 
+ 8272 6f9a 660FEF85 		pxor	-4928(%rbp), %xmm0
+ 8272      C0ECFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 267
+
+
+ 8273 6fa2 F30F7F85 		movdqu	%xmm0, -4928(%rbp)
+ 8273      C0ECFFFF 
+ 8274 6faa 660F6F95 		movdqa	-8768(%rbp), %xmm2
+ 8274      C0DDFFFF 
+ 8275 6fb2 F30F7F95 		movdqu	%xmm2, -4752(%rbp)
+ 8275      70EDFFFF 
+ 8276              	.LBB2204:
+ 8277              	.LBB2205:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 8278              		.loc 2 1278 0
+ 8279 6fba 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 8279      00000000 
+ 8280 6fc2 F30F6F8D 		movdqu	-4752(%rbp), %xmm1
+ 8280      70EDFFFF 
+ 8281 6fca F30F7F8D 		movdqu	%xmm1, -4720(%rbp)
+ 8281      90EDFFFF 
+ 8282 6fd2 F30F7F85 		movdqu	%xmm0, -4736(%rbp)
+ 8282      80EDFFFF 
+ 8283 6fda F30F6F85 		movdqu	-4720(%rbp), %xmm0
+ 8283      90EDFFFF 
+ 8284 6fe2 F30F7F85 		movdqu	%xmm0, -4688(%rbp)
+ 8284      B0EDFFFF 
+ 8285 6fea F30F6F85 		movdqu	-4736(%rbp), %xmm0
+ 8285      80EDFFFF 
+ 8286 6ff2 F30F7F85 		movdqu	%xmm0, -4704(%rbp)
+ 8286      A0EDFFFF 
+ 8287              	.LBB2206:
+ 8288              	.LBB2207:
+ 8289              	.LBB2208:
+ 8290              	.LBB2209:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8291              		.loc 3 529 0
+ 8292 6ffa F30F6F8D 		movdqu	-4704(%rbp), %xmm1
+ 8292      A0EDFFFF 
+ 8293 7002 F30F6F85 		movdqu	-4688(%rbp), %xmm0
+ 8293      B0EDFFFF 
+ 8294 700a 660F3800 		pshufb	%xmm1, %xmm0
+ 8294      C1
+ 8295              	.LBE2209:
+ 8296              	.LBE2208:
+ 8297              	.LBE2207:
+ 8298              	.LBE2206:
+ 8299              	.LBE2205:
+ 8300              	.LBE2204:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8301              		.loc 2 1569 0
+ 8302 700f 660F7F85 		movdqa	%xmm0, -8768(%rbp)
+ 8302      C0DDFFFF 
+ 8303 7017 660F6F85 		movdqa	-8768(%rbp), %xmm0
+ 8303      C0DDFFFF 
+ 8304 701f 660FEF85 		pxor	-4928(%rbp), %xmm0
+ 8304      C0ECFFFF 
+ 8305 7027 F30F7F85 		movdqu	%xmm0, -4928(%rbp)
+ 8305      C0ECFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 8306              		.loc 2 1571 0
+ 8307 702f F30F6F85 		movdqu	-4928(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 268
+
+
+ 8307      C0ECFFFF 
+ 8308              	.LBE2191:
+ 8309              	.LBE2190:
+1830:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(ShiftXorColumns) (v4);       /* k22   :k22^k23: k23    : 0            */
+ 8310              		.loc 2 1830 0
+ 8311 7037 660F7F85 		movdqa	%xmm0, -9024(%rbp)
+ 8311      C0DCFFFF 
+1831:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 8312              		.loc 2 1831 0
+ 8313 703f 660F6F85 		movdqa	-9008(%rbp), %xmm0
+ 8313      D0DCFFFF 
+ 8314 7047 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 8314      00DDFFFF 
+ 8315 704f 660F6F95 		movdqa	-8960(%rbp), %xmm2
+ 8315      00DDFFFF 
+ 8316 7057 F30F7F95 		movdqu	%xmm2, -4656(%rbp)
+ 8316      D0EDFFFF 
+ 8317              	.LBB2210:
+ 8318              	.LBB2211:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 8319              		.loc 2 1681 0
+ 8320 705f B8080000 		movl	$8, %eax
+ 8320      00
+ 8321 7064 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 8321      00000000 
+ 8322 706c F30F7F85 		movdqu	%xmm0, -4624(%rbp)
+ 8322      F0EDFFFF 
+ 8323 7074 8985ECED 		movl	%eax, -4628(%rbp)
+ 8323      FFFF
+ 8324 707a F30F6F85 		movdqu	-4624(%rbp), %xmm0
+ 8324      F0EDFFFF 
+ 8325 7082 F30F7F85 		movdqu	%xmm0, -4592(%rbp)
+ 8325      10EEFFFF 
+ 8326 708a 8B85ECED 		movl	-4628(%rbp), %eax
+ 8326      FFFF
+ 8327 7090 89850CEE 		movl	%eax, -4596(%rbp)
+ 8327      FFFF
+ 8328              	.LBB2212:
+ 8329              	.LBB2213:
+ 8330              	.LBB2214:
+ 8331              	.LBB2215:
+ 8332              		.loc 3 598 0
+ 8333 7096 8B850CEE 		movl	-4596(%rbp), %eax
+ 8333      FFFF
+ 8334 709c F30F6F85 		movdqu	-4592(%rbp), %xmm0
+ 8334      10EEFFFF 
+ 8335 70a4 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 8335      C003
+ 8336              	.LBE2215:
+ 8337              	.LBE2214:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 8338              		.loc 2 519 0
+ 8339 70aa F30F7F85 		movdqu	%xmm0, -4624(%rbp)
+ 8339      F0EDFFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 8340              		.loc 2 526 0
+ 8341 70b2 F30F6F85 		movdqu	-4624(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 269
+
+
+ 8341      F0EDFFFF 
+ 8342              	.LBE2213:
+ 8343              	.LBE2212:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 8344              		.loc 2 1681 0
+ 8345 70ba 660F7F85 		movdqa	%xmm0, -8736(%rbp)
+ 8345      E0DDFFFF 
+ 8346 70c2 F30F6F85 		movdqu	-4656(%rbp), %xmm0
+ 8346      D0EDFFFF 
+ 8347 70ca F30F7F85 		movdqu	%xmm0, -4576(%rbp)
+ 8347      20EEFFFF 
+ 8348 70d2 F30F6F85 		movdqu	-4576(%rbp), %xmm0
+ 8348      20EEFFFF 
+ 8349 70da F30F7F85 		movdqu	%xmm0, -4544(%rbp)
+ 8349      40EEFFFF 
+ 8350 70e2 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 8350      000000
+ 8351 70e9 48898538 		movq	%rax, -4552(%rbp)
+ 8351      EEFFFF
+ 8352              	.LBB2216:
+ 8353              	.LBB2217:
+ 8354              	.LBB2218:
+ 8355              	.LBB2219:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 8356              		.loc 2 851 0
+ 8357 70f0 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 8357      00000000 
+ 8358 70f8 F30F7F85 		movdqu	%xmm0, -4512(%rbp)
+ 8358      60EEFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 8359              		.loc 2 854 0
+ 8360 7100 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 8360      00000000 
+ 8361 7108 F30F6F8D 		movdqu	-4544(%rbp), %xmm1
+ 8361      40EEFFFF 
+ 8362 7110 F30F7F8D 		movdqu	%xmm1, -4432(%rbp)
+ 8362      B0EEFFFF 
+ 8363 7118 F30F7F85 		movdqu	%xmm0, -4448(%rbp)
+ 8363      A0EEFFFF 
+ 8364              	.LBB2220:
+ 8365              	.LBB2221:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 8366              		.loc 2 206 0
+ 8367 7120 F30F6F85 		movdqu	-4448(%rbp), %xmm0
+ 8367      A0EEFFFF 
+ 8368 7128 F30F6F8D 		movdqu	-4432(%rbp), %xmm1
+ 8368      B0EEFFFF 
+ 8369 7130 660FDBC1 		pand	%xmm1, %xmm0
+ 8370              	.LBE2221:
+ 8371              	.LBE2220:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 8372              		.loc 2 854 0
+ 8373 7134 F30F7F85 		movdqu	%xmm0, -4464(%rbp)
+ 8373      90EEFFFF 
+ 8374 713c F30F6F85 		movdqu	-4544(%rbp), %xmm0
+ 8374      40EEFFFF 
+ 8375 7144 F30F7F85 		movdqu	%xmm0, -4400(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 270
+
+
+ 8375      D0EEFFFF 
+ 8376              	.LBB2222:
+ 8377              	.LBB2223:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 8378              		.loc 3 433 0
+ 8379 714c F30F6F85 		movdqu	-4400(%rbp), %xmm0
+ 8379      D0EEFFFF 
+ 8380 7154 660F72D0 		psrld	$4, %xmm0
+ 8380      04
+ 8381              	.LBE2223:
+ 8382              	.LBE2222:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 8383              		.loc 2 857 0
+ 8384 7159 F30F7F85 		movdqu	%xmm0, -4480(%rbp)
+ 8384      80EEFFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 8385              		.loc 2 859 0
+ 8386 7161 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 8386      00000000 
+ 8387 7169 F30F6F8D 		movdqu	-4480(%rbp), %xmm1
+ 8387      80EEFFFF 
+ 8388 7171 F30F7F8D 		movdqu	%xmm1, -4368(%rbp)
+ 8388      F0EEFFFF 
+ 8389 7179 F30F7F85 		movdqu	%xmm0, -4384(%rbp)
+ 8389      E0EEFFFF 
+ 8390              	.LBB2224:
+ 8391              	.LBB2225:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 8392              		.loc 2 206 0
+ 8393 7181 F30F6F85 		movdqu	-4384(%rbp), %xmm0
+ 8393      E0EEFFFF 
+ 8394 7189 F30F6F8D 		movdqu	-4368(%rbp), %xmm1
+ 8394      F0EEFFFF 
+ 8395 7191 660FDBC1 		pand	%xmm1, %xmm0
+ 8396              	.LBE2225:
+ 8397              	.LBE2224:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 8398              		.loc 2 859 0
+ 8399 7195 F30F7F85 		movdqu	%xmm0, -4480(%rbp)
+ 8399      80EEFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 8400              		.loc 2 866 0
+ 8401 719d C7855CEE 		movl	$0, -4516(%rbp)
+ 8401      FFFF0000 
+ 8401      0000
+ 8402 71a7 E9BE0100 		jmp	.L120
+ 8402      00
+ 8403              	.L121:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 8404              		.loc 2 868 0
+ 8405 71ac 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 8405      00000000 
+ 8406 71b4 F30F7F85 		movdqu	%xmm0, -4336(%rbp)
+ 8406      10EFFFFF 
+ 8407 71bc F30F6F85 		movdqu	-4480(%rbp), %xmm0
+ 8407      80EEFFFF 
+ 8408 71c4 F30F7F85 		movdqu	%xmm0, -4352(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 271
+
+
+ 8408      00EFFFFF 
+ 8409 71cc F30F6F85 		movdqu	-4336(%rbp), %xmm0
+ 8409      10EFFFFF 
+ 8410 71d4 F30F7F85 		movdqu	%xmm0, -4304(%rbp)
+ 8410      30EFFFFF 
+ 8411 71dc F30F6F85 		movdqu	-4352(%rbp), %xmm0
+ 8411      00EFFFFF 
+ 8412 71e4 F30F7F85 		movdqu	%xmm0, -4320(%rbp)
+ 8412      20EFFFFF 
+ 8413              	.LBB2226:
+ 8414              	.LBB2227:
+ 8415              	.LBB2228:
+ 8416              	.LBB2229:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8417              		.loc 3 529 0
+ 8418 71ec F30F6F8D 		movdqu	-4320(%rbp), %xmm1
+ 8418      20EFFFFF 
+ 8419 71f4 F30F6F85 		movdqu	-4304(%rbp), %xmm0
+ 8419      30EFFFFF 
+ 8420 71fc 660F3800 		pshufb	%xmm1, %xmm0
+ 8420      C1
+ 8421              	.LBE2229:
+ 8422              	.LBE2228:
+ 8423              	.LBE2227:
+ 8424              	.LBE2226:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 8425              		.loc 2 868 0
+ 8426 7201 F30F7F85 		movdqu	%xmm0, -4496(%rbp)
+ 8426      70EEFFFF 
+ 8427 7209 F30F6F85 		movdqu	-4464(%rbp), %xmm0
+ 8427      90EEFFFF 
+ 8428 7211 F30F7F85 		movdqu	%xmm0, -4272(%rbp)
+ 8428      50EFFFFF 
+ 8429 7219 F30F6F85 		movdqu	-4496(%rbp), %xmm0
+ 8429      70EEFFFF 
+ 8430 7221 F30F7F85 		movdqu	%xmm0, -4288(%rbp)
+ 8430      40EFFFFF 
+ 8431              	.LBB2230:
+ 8432              	.LBB2231:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 8433              		.loc 2 234 0
+ 8434 7229 F30F6F85 		movdqu	-4288(%rbp), %xmm0
+ 8434      40EFFFFF 
+ 8435 7231 F30F6F8D 		movdqu	-4272(%rbp), %xmm1
+ 8435      50EFFFFF 
+ 8436 7239 660FEBC1 		por	%xmm1, %xmm0
+ 8437              	.LBE2231:
+ 8438              	.LBE2230:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 8439              		.loc 2 870 0
+ 8440 723d F30F7F85 		movdqu	%xmm0, -4496(%rbp)
+ 8440      70EEFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 8441              		.loc 2 872 0
+ 8442 7245 8B855CEE 		mov	-4516(%rbp), %eax
+ 8442      FFFF
+ 8443 724b 48C1E004 		salq	$4, %rax
+
GAS LISTING /tmp/ccjbMjHD.s 			page 272
+
+
+ 8444 724f 48038538 		addq	-4552(%rbp), %rax
+ 8444      EEFFFF
+ 8445 7256 660F6F00 		movdqa	(%rax), %xmm0
+ 8446 725a F30F7F85 		movdqu	%xmm0, -4240(%rbp)
+ 8446      70EFFFFF 
+ 8447 7262 F30F6F85 		movdqu	-4496(%rbp), %xmm0
+ 8447      70EEFFFF 
+ 8448 726a F30F7F85 		movdqu	%xmm0, -4256(%rbp)
+ 8448      60EFFFFF 
+ 8449 7272 F30F6F85 		movdqu	-4240(%rbp), %xmm0
+ 8449      70EFFFFF 
+ 8450 727a F30F7F85 		movdqu	%xmm0, -4208(%rbp)
+ 8450      90EFFFFF 
+ 8451 7282 F30F6F85 		movdqu	-4256(%rbp), %xmm0
+ 8451      60EFFFFF 
+ 8452 728a F30F7F85 		movdqu	%xmm0, -4224(%rbp)
+ 8452      80EFFFFF 
+ 8453              	.LBB2232:
+ 8454              	.LBB2233:
+ 8455              	.LBB2234:
+ 8456              	.LBB2235:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8457              		.loc 3 529 0
+ 8458 7292 F30F6F8D 		movdqu	-4224(%rbp), %xmm1
+ 8458      80EFFFFF 
+ 8459 729a F30F6F85 		movdqu	-4208(%rbp), %xmm0
+ 8459      90EFFFFF 
+ 8460 72a2 660F3800 		pshufb	%xmm1, %xmm0
+ 8460      C1
+ 8461              	.LBE2235:
+ 8462              	.LBE2234:
+ 8463              	.LBE2233:
+ 8464              	.LBE2232:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 8465              		.loc 2 872 0
+ 8466 72a7 F30F7F85 		movdqu	%xmm0, -4496(%rbp)
+ 8466      70EEFFFF 
+ 8467 72af F30F6F85 		movdqu	-4512(%rbp), %xmm0
+ 8467      60EEFFFF 
+ 8468 72b7 F30F7F85 		movdqu	%xmm0, -4176(%rbp)
+ 8468      B0EFFFFF 
+ 8469 72bf F30F6F85 		movdqu	-4496(%rbp), %xmm0
+ 8469      70EEFFFF 
+ 8470 72c7 F30F7F85 		movdqu	%xmm0, -4192(%rbp)
+ 8470      A0EFFFFF 
+ 8471              	.LBB2236:
+ 8472              	.LBB2237:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 8473              		.loc 2 234 0
+ 8474 72cf F30F6F85 		movdqu	-4192(%rbp), %xmm0
+ 8474      A0EFFFFF 
+ 8475 72d7 F30F6F8D 		movdqu	-4176(%rbp), %xmm1
+ 8475      B0EFFFFF 
+ 8476 72df 660FEBC1 		por	%xmm1, %xmm0
+ 8477              	.LBE2237:
+ 8478              	.LBE2236:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+
GAS LISTING /tmp/ccjbMjHD.s 			page 273
+
+
+ 8479              		.loc 2 874 0
+ 8480 72e3 F30F7F85 		movdqu	%xmm0, -4512(%rbp)
+ 8480      60EEFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 8481              		.loc 2 876 0
+ 8482 72eb 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 8482      00000000 
+ 8483 72f3 F30F6F8D 		movdqu	-4480(%rbp), %xmm1
+ 8483      80EEFFFF 
+ 8484 72fb F30F7F8D 		movdqu	%xmm1, -4144(%rbp)
+ 8484      D0EFFFFF 
+ 8485 7303 F30F7F85 		movdqu	%xmm0, -4160(%rbp)
+ 8485      C0EFFFFF 
+ 8486              	.LBB2238:
+ 8487              	.LBB2239:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 8488              		.loc 2 290 0
+ 8489 730b F30F6F8D 		movdqu	-4160(%rbp), %xmm1
+ 8489      C0EFFFFF 
+ 8490 7313 F30F6F85 		movdqu	-4144(%rbp), %xmm0
+ 8490      D0EFFFFF 
+ 8491 731b 660FF8C1 		psubb	%xmm1, %xmm0
+ 8492              	.LBE2239:
+ 8493              	.LBE2238:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 8494              		.loc 2 876 0
+ 8495 731f F30F7F85 		movdqu	%xmm0, -4480(%rbp)
+ 8495      80EEFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 8496              		.loc 2 878 0
+ 8497 7327 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 8497      00000000 
+ 8498 732f F30F6F8D 		movdqu	-4480(%rbp), %xmm1
+ 8498      80EEFFFF 
+ 8499 7337 F30F7F8D 		movdqu	%xmm1, -4112(%rbp)
+ 8499      F0EFFFFF 
+ 8500 733f F30F7F85 		movdqu	%xmm0, -4128(%rbp)
+ 8500      E0EFFFFF 
+ 8501              	.LBB2240:
+ 8502              	.LBB2241:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 8503              		.loc 2 206 0
+ 8504 7347 F30F6F85 		movdqu	-4128(%rbp), %xmm0
+ 8504      E0EFFFFF 
+ 8505 734f F30F6F8D 		movdqu	-4112(%rbp), %xmm1
+ 8505      F0EFFFFF 
+ 8506 7357 660FDBC1 		pand	%xmm1, %xmm0
+ 8507              	.LBE2241:
+ 8508              	.LBE2240:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 8509              		.loc 2 878 0
+ 8510 735b F30F7F85 		movdqu	%xmm0, -4480(%rbp)
+ 8510      80EEFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 8511              		.loc 2 866 0
+ 8512 7363 83855CEE 		addl	$1, -4516(%rbp)
+ 8512      FFFF01
+
GAS LISTING /tmp/ccjbMjHD.s 			page 274
+
+
+ 8513              	.L120:
+ 8514 736a 83BD5CEE 		cmpl	$15, -4516(%rbp)
+ 8514      FFFF0F
+ 8515 7371 0F8635FE 		jbe	.L121
+ 8515      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 8516              		.loc 2 882 0
+ 8517 7377 F30F6F85 		movdqu	-4512(%rbp), %xmm0
+ 8517      60EEFFFF 
+ 8518              	.LBE2219:
+ 8519              	.LBE2218:
+ 8520              	.LBE2217:
+ 8521              	.LBE2216:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 8522              		.loc 2 1682 0
+ 8523 737f 660F7F85 		movdqa	%xmm0, -8752(%rbp)
+ 8523      D0DDFFFF 
+ 8524              	.LBB2242:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 8525              		.loc 2 1683 0
+ 8526 7387 660F6F85 		movdqa	-8752(%rbp), %xmm0
+ 8526      D0DDFFFF 
+ 8527 738f F30F7F85 		movdqu	%xmm0, -8352(%rbp)
+ 8527      60DFFFFF 
+ 8528 7397 E8000000 		call	KDbgWriterGet at PLT
+ 8528      00
+ 8529 739c 4885C0   		testq	%rax, %rax
+ 8530 739f 7479     		je	.L123
+ 8531 73a1 BF010000 		movl	$1, %edi
+ 8531      00
+ 8532 73a6 E8000000 		call	KDbgCondToFlag at PLT
+ 8532      00
+ 8533 73ab 4889C6   		movq	%rax, %rsi
+ 8534 73ae BF100000 		movl	$16, %edi
+ 8534      00
+ 8535 73b3 E8000000 		call	KDbgTestModConds at PLT
+ 8535      00
+ 8536 73b8 84C0     		testb	%al, %al
+ 8537 73ba 745E     		je	.L123
+ 8538 73bc 8B856CDF 		movl	-8340(%rbp), %eax
+ 8538      FFFF
+ 8539 73c2 89C7     		movl	%eax, %edi
+ 8540 73c4 E8378CFF 		call	bswap_32
+ 8540      FF
+ 8541 73c9 4189C5   		movl	%eax, %r13d
+ 8542 73cc 8B8568DF 		movl	-8344(%rbp), %eax
+ 8542      FFFF
+ 8543 73d2 89C7     		movl	%eax, %edi
+ 8544 73d4 E8278CFF 		call	bswap_32
+ 8544      FF
+ 8545 73d9 4189C4   		movl	%eax, %r12d
+ 8546 73dc 8B8564DF 		movl	-8348(%rbp), %eax
+ 8546      FFFF
+ 8547 73e2 89C7     		movl	%eax, %edi
+ 8548 73e4 E8178CFF 		call	bswap_32
+ 8548      FF
+ 8549 73e9 89C3     		movl	%eax, %ebx
+
GAS LISTING /tmp/ccjbMjHD.s 			page 275
+
+
+ 8550 73eb 8B8560DF 		movl	-8352(%rbp), %eax
+ 8550      FFFF
+ 8551 73f1 89C7     		movl	%eax, %edi
+ 8552 73f3 E8088CFF 		call	bswap_32
+ 8552      FF
+ 8553 73f8 4589E9   		movl	%r13d, %r9d
+ 8554 73fb 4589E0   		movl	%r12d, %r8d
+ 8555 73fe 89D9     		movl	%ebx, %ecx
+ 8556 7400 89C2     		movl	%eax, %edx
+ 8557 7402 488D3500 		leaq	.LC0(%rip), %rsi
+ 8557      000000
+ 8558 7409 488D3D00 		leaq	.LC1(%rip), %rdi
+ 8558      000000
+ 8559 7410 B8000000 		movl	$0, %eax
+ 8559      00
+ 8560 7415 E8000000 		call	KDbgMsg at PLT
+ 8560      00
+ 8561              	.L123:
+ 8562 741a 660F6F95 		movdqa	-8752(%rbp), %xmm2
+ 8562      D0DDFFFF 
+ 8563 7422 F30F7F95 		movdqu	%xmm2, -4096(%rbp)
+ 8563      00F0FFFF 
+ 8564              	.LBE2242:
+ 8565              	.LBB2243:
+ 8566              	.LBB2244:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 8567              		.loc 2 667 0
+ 8568 742a 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 8568      00000000 
+ 8569 7432 F30F6F8D 		movdqu	-4096(%rbp), %xmm1
+ 8569      00F0FFFF 
+ 8570 743a F30F7F8D 		movdqu	%xmm1, -4064(%rbp)
+ 8570      20F0FFFF 
+ 8571 7442 F30F7F85 		movdqu	%xmm0, -4080(%rbp)
+ 8571      10F0FFFF 
+ 8572 744a F30F6F85 		movdqu	-4064(%rbp), %xmm0
+ 8572      20F0FFFF 
+ 8573 7452 F30F7F85 		movdqu	%xmm0, -4032(%rbp)
+ 8573      40F0FFFF 
+ 8574 745a F30F6F85 		movdqu	-4080(%rbp), %xmm0
+ 8574      10F0FFFF 
+ 8575 7462 F30F7F85 		movdqu	%xmm0, -4048(%rbp)
+ 8575      30F0FFFF 
+ 8576              	.LBB2245:
+ 8577              	.LBB2246:
+ 8578              	.LBB2247:
+ 8579              	.LBB2248:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8580              		.loc 3 529 0
+ 8581 746a F30F6F8D 		movdqu	-4048(%rbp), %xmm1
+ 8581      30F0FFFF 
+ 8582 7472 F30F6F85 		movdqu	-4032(%rbp), %xmm0
+ 8582      40F0FFFF 
+ 8583 747a 660F3800 		pshufb	%xmm1, %xmm0
+ 8583      C1
+ 8584              	.LBE2248:
+ 8585              	.LBE2247:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 276
+
+
+ 8586              	.LBE2246:
+ 8587              	.LBE2245:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 8588              		.loc 2 667 0
+ 8589 747f F30F7F85 		movdqu	%xmm0, -4096(%rbp)
+ 8589      00F0FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 8590              		.loc 2 668 0
+ 8591 7487 F30F6F85 		movdqu	-4096(%rbp), %xmm0
+ 8591      00F0FFFF 
+ 8592              	.LBE2244:
+ 8593              	.LBE2243:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 8594              		.loc 2 1684 0
+ 8595 748f 660F7F85 		movdqa	%xmm0, -8752(%rbp)
+ 8595      D0DDFFFF 
+ 8596              	.LBB2249:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 8597              		.loc 2 1685 0
+ 8598 7497 660F6F85 		movdqa	-8752(%rbp), %xmm0
+ 8598      D0DDFFFF 
+ 8599 749f F30F7F85 		movdqu	%xmm0, -8368(%rbp)
+ 8599      50DFFFFF 
+ 8600 74a7 E8000000 		call	KDbgWriterGet at PLT
+ 8600      00
+ 8601 74ac 4885C0   		testq	%rax, %rax
+ 8602 74af 7479     		je	.L125
+ 8603 74b1 BF010000 		movl	$1, %edi
+ 8603      00
+ 8604 74b6 E8000000 		call	KDbgCondToFlag at PLT
+ 8604      00
+ 8605 74bb 4889C6   		movq	%rax, %rsi
+ 8606 74be BF100000 		movl	$16, %edi
+ 8606      00
+ 8607 74c3 E8000000 		call	KDbgTestModConds at PLT
+ 8607      00
+ 8608 74c8 84C0     		testb	%al, %al
+ 8609 74ca 745E     		je	.L125
+ 8610 74cc 8B855CDF 		movl	-8356(%rbp), %eax
+ 8610      FFFF
+ 8611 74d2 89C7     		movl	%eax, %edi
+ 8612 74d4 E8278BFF 		call	bswap_32
+ 8612      FF
+ 8613 74d9 4189C5   		movl	%eax, %r13d
+ 8614 74dc 8B8558DF 		movl	-8360(%rbp), %eax
+ 8614      FFFF
+ 8615 74e2 89C7     		movl	%eax, %edi
+ 8616 74e4 E8178BFF 		call	bswap_32
+ 8616      FF
+ 8617 74e9 4189C4   		movl	%eax, %r12d
+ 8618 74ec 8B8554DF 		movl	-8364(%rbp), %eax
+ 8618      FFFF
+ 8619 74f2 89C7     		movl	%eax, %edi
+ 8620 74f4 E8078BFF 		call	bswap_32
+ 8620      FF
+ 8621 74f9 89C3     		movl	%eax, %ebx
+ 8622 74fb 8B8550DF 		movl	-8368(%rbp), %eax
+
GAS LISTING /tmp/ccjbMjHD.s 			page 277
+
+
+ 8622      FFFF
+ 8623 7501 89C7     		movl	%eax, %edi
+ 8624 7503 E8F88AFF 		call	bswap_32
+ 8624      FF
+ 8625 7508 4589E9   		movl	%r13d, %r9d
+ 8626 750b 4589E0   		movl	%r12d, %r8d
+ 8627 750e 89D9     		movl	%ebx, %ecx
+ 8628 7510 89C2     		movl	%eax, %edx
+ 8629 7512 488D3500 		leaq	.LC2(%rip), %rsi
+ 8629      000000
+ 8630 7519 488D3D00 		leaq	.LC1(%rip), %rdi
+ 8630      000000
+ 8631 7520 B8000000 		movl	$0, %eax
+ 8631      00
+ 8632 7525 E8000000 		call	KDbgMsg at PLT
+ 8632      00
+ 8633              	.L125:
+ 8634 752a 660F6F95 		movdqa	-8752(%rbp), %xmm2
+ 8634      D0DDFFFF 
+ 8635 7532 F30F7F95 		movdqu	%xmm2, -4000(%rbp)
+ 8635      60F0FFFF 
+ 8636 753a 660F6F85 		movdqa	-8736(%rbp), %xmm0
+ 8636      E0DDFFFF 
+ 8637 7542 F30F7F85 		movdqu	%xmm0, -4016(%rbp)
+ 8637      50F0FFFF 
+ 8638              	.LBE2249:
+ 8639              	.LBB2250:
+ 8640              	.LBB2251:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 8641              		.loc 2 178 0
+ 8642 754a F30F6F85 		movdqu	-4016(%rbp), %xmm0
+ 8642      50F0FFFF 
+ 8643 7552 F30F6F8D 		movdqu	-4000(%rbp), %xmm1
+ 8643      60F0FFFF 
+ 8644 755a 660FEFC1 		pxor	%xmm1, %xmm0
+ 8645              	.LBE2251:
+ 8646              	.LBE2250:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 8647              		.loc 2 1686 0
+ 8648 755e 660F7F85 		movdqa	%xmm0, -8752(%rbp)
+ 8648      D0DDFFFF 
+ 8649              	.LBB2252:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 8650              		.loc 2 1687 0
+ 8651 7566 660F6F95 		movdqa	-8752(%rbp), %xmm2
+ 8651      D0DDFFFF 
+ 8652 756e F30F7F95 		movdqu	%xmm2, -8384(%rbp)
+ 8652      40DFFFFF 
+ 8653 7576 E8000000 		call	KDbgWriterGet at PLT
+ 8653      00
+ 8654 757b 4885C0   		testq	%rax, %rax
+ 8655 757e 7479     		je	.L127
+ 8656 7580 BF010000 		movl	$1, %edi
+ 8656      00
+ 8657 7585 E8000000 		call	KDbgCondToFlag at PLT
+ 8657      00
+ 8658 758a 4889C6   		movq	%rax, %rsi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 278
+
+
+ 8659 758d BF100000 		movl	$16, %edi
+ 8659      00
+ 8660 7592 E8000000 		call	KDbgTestModConds at PLT
+ 8660      00
+ 8661 7597 84C0     		testb	%al, %al
+ 8662 7599 745E     		je	.L127
+ 8663 759b 8B854CDF 		movl	-8372(%rbp), %eax
+ 8663      FFFF
+ 8664 75a1 89C7     		movl	%eax, %edi
+ 8665 75a3 E8588AFF 		call	bswap_32
+ 8665      FF
+ 8666 75a8 4189C5   		movl	%eax, %r13d
+ 8667 75ab 8B8548DF 		movl	-8376(%rbp), %eax
+ 8667      FFFF
+ 8668 75b1 89C7     		movl	%eax, %edi
+ 8669 75b3 E8488AFF 		call	bswap_32
+ 8669      FF
+ 8670 75b8 4189C4   		movl	%eax, %r12d
+ 8671 75bb 8B8544DF 		movl	-8380(%rbp), %eax
+ 8671      FFFF
+ 8672 75c1 89C7     		movl	%eax, %edi
+ 8673 75c3 E8388AFF 		call	bswap_32
+ 8673      FF
+ 8674 75c8 89C3     		movl	%eax, %ebx
+ 8675 75ca 8B8540DF 		movl	-8384(%rbp), %eax
+ 8675      FFFF
+ 8676 75d0 89C7     		movl	%eax, %edi
+ 8677 75d2 E8298AFF 		call	bswap_32
+ 8677      FF
+ 8678 75d7 4589E9   		movl	%r13d, %r9d
+ 8679 75da 4589E0   		movl	%r12d, %r8d
+ 8680 75dd 89D9     		movl	%ebx, %ecx
+ 8681 75df 89C2     		movl	%eax, %edx
+ 8682 75e1 488D3500 		leaq	.LC3(%rip), %rsi
+ 8682      000000
+ 8683 75e8 488D3D00 		leaq	.LC1(%rip), %rdi
+ 8683      000000
+ 8684 75ef B8000000 		movl	$0, %eax
+ 8684      00
+ 8685 75f4 E8000000 		call	KDbgMsg at PLT
+ 8685      00
+ 8686              	.L127:
+ 8687 75f9 660F6F85 		movdqa	-8752(%rbp), %xmm0
+ 8687      D0DDFFFF 
+ 8688 7601 F30F7F85 		movdqu	%xmm0, -3984(%rbp)
+ 8688      70F0FFFF 
+ 8689 7609 F30F6F85 		movdqu	-3984(%rbp), %xmm0
+ 8689      70F0FFFF 
+ 8690 7611 F30F7F85 		movdqu	%xmm0, -3952(%rbp)
+ 8690      90F0FFFF 
+ 8691              	.LBE2252:
+ 8692              	.LBB2253:
+ 8693              	.LBB2254:
+ 8694              	.LBB2255:
+ 8695              	.LBB2256:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 8696              		.loc 3 450 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 279
+
+
+ 8697 7619 F30F6F85 		movdqu	-3952(%rbp), %xmm0
+ 8697      90F0FFFF 
+ 8698 7621 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 8698      FF
+ 8699              	.LBE2256:
+ 8700              	.LBE2255:
+ 8701              	.LBE2254:
+ 8702              	.LBE2253:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 8703              		.loc 2 1688 0
+ 8704 7626 660F7F85 		movdqa	%xmm0, -8752(%rbp)
+ 8704      D0DDFFFF 
+ 8705              	.LBB2257:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 8706              		.loc 2 1689 0
+ 8707 762e 660F6F95 		movdqa	-8752(%rbp), %xmm2
+ 8707      D0DDFFFF 
+ 8708 7636 F30F7F95 		movdqu	%xmm2, -8400(%rbp)
+ 8708      30DFFFFF 
+ 8709 763e E8000000 		call	KDbgWriterGet at PLT
+ 8709      00
+ 8710 7643 4885C0   		testq	%rax, %rax
+ 8711 7646 7479     		je	.L129
+ 8712 7648 BF010000 		movl	$1, %edi
+ 8712      00
+ 8713 764d E8000000 		call	KDbgCondToFlag at PLT
+ 8713      00
+ 8714 7652 4889C6   		movq	%rax, %rsi
+ 8715 7655 BF100000 		movl	$16, %edi
+ 8715      00
+ 8716 765a E8000000 		call	KDbgTestModConds at PLT
+ 8716      00
+ 8717 765f 84C0     		testb	%al, %al
+ 8718 7661 745E     		je	.L129
+ 8719 7663 8B853CDF 		movl	-8388(%rbp), %eax
+ 8719      FFFF
+ 8720 7669 89C7     		movl	%eax, %edi
+ 8721 766b E89089FF 		call	bswap_32
+ 8721      FF
+ 8722 7670 4189C5   		movl	%eax, %r13d
+ 8723 7673 8B8538DF 		movl	-8392(%rbp), %eax
+ 8723      FFFF
+ 8724 7679 89C7     		movl	%eax, %edi
+ 8725 767b E88089FF 		call	bswap_32
+ 8725      FF
+ 8726 7680 4189C4   		movl	%eax, %r12d
+ 8727 7683 8B8534DF 		movl	-8396(%rbp), %eax
+ 8727      FFFF
+ 8728 7689 89C7     		movl	%eax, %edi
+ 8729 768b E87089FF 		call	bswap_32
+ 8729      FF
+ 8730 7690 89C3     		movl	%eax, %ebx
+ 8731 7692 8B8530DF 		movl	-8400(%rbp), %eax
+ 8731      FFFF
+ 8732 7698 89C7     		movl	%eax, %edi
+ 8733 769a E86189FF 		call	bswap_32
+ 8733      FF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 280
+
+
+ 8734 769f 4589E9   		movl	%r13d, %r9d
+ 8735 76a2 4589E0   		movl	%r12d, %r8d
+ 8736 76a5 89D9     		movl	%ebx, %ecx
+ 8737 76a7 89C2     		movl	%eax, %edx
+ 8738 76a9 488D3500 		leaq	.LC4(%rip), %rsi
+ 8738      000000
+ 8739 76b0 488D3D00 		leaq	.LC1(%rip), %rdi
+ 8739      000000
+ 8740 76b7 B8000000 		movl	$0, %eax
+ 8740      00
+ 8741 76bc E8000000 		call	KDbgMsg at PLT
+ 8741      00
+ 8742              	.L129:
+ 8743              	.LBE2257:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 8744              		.loc 2 1690 0
+ 8745 76c1 660F6F85 		movdqa	-8752(%rbp), %xmm0
+ 8745      D0DDFFFF 
+ 8746              	.LBE2211:
+ 8747              	.LBE2210:
+ 8748              		.loc 2 1831 0
+ 8749 76c9 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 8749      00DDFFFF 
+1832:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v2,0x08);                             /* F(k23): F(k23): F(k23) : F(k23)       */
+1833:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0 ^= k;                                       /* k24   : k25   : k26    : k27          */
+ 8750              		.loc 2 1833 0
+ 8751 76d1 660F6F85 		movdqa	-9040(%rbp), %xmm0
+ 8751      B0DCFFFF 
+ 8752 76d9 660FEF85 		pxor	-8960(%rbp), %xmm0
+ 8752      00DDFFFF 
+ 8753 76e1 660F7F85 		movdqa	%xmm0, -9040(%rbp)
+ 8753      B0DCFFFF 
+1834:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v0);   /* k27   : k27   : k27    : k27          */
+ 8754              		.loc 2 1834 0
+ 8755 76e9 660F6F95 		movdqa	-9040(%rbp), %xmm2
+ 8755      B0DCFFFF 
+ 8756 76f1 660F7F95 		movdqa	%xmm2, -8960(%rbp)
+ 8756      00DDFFFF 
+ 8757 76f9 660F6F85 		movdqa	-8960(%rbp), %xmm0
+ 8757      00DDFFFF 
+ 8758 7701 F30F7F85 		movdqu	%xmm0, -3936(%rbp)
+ 8758      A0F0FFFF 
+ 8759 7709 F30F6F85 		movdqu	-3936(%rbp), %xmm0
+ 8759      A0F0FFFF 
+ 8760 7711 F30F7F85 		movdqu	%xmm0, -3904(%rbp)
+ 8760      C0F0FFFF 
+ 8761              	.LBB2258:
+ 8762              	.LBB2259:
+ 8763              	.LBB2260:
+ 8764              	.LBB2261:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 8765              		.loc 3 450 0
+ 8766 7719 F30F6F85 		movdqu	-3904(%rbp), %xmm0
+ 8766      C0F0FFFF 
+ 8767 7721 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 8767      FF
+ 8768              	.LBE2261:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 281
+
+
+ 8769              	.LBE2260:
+ 8770              	.LBE2259:
+ 8771              	.LBE2258:
+ 8772              		.loc 2 1834 0
+ 8773 7726 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 8773      00DDFFFF 
+1835:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1 ^= k;                                       /* k28   : k29   : x      : x            */
+ 8774              		.loc 2 1835 0
+ 8775 772e 660F6F95 		movdqa	-9024(%rbp), %xmm2
+ 8775      C0DCFFFF 
+ 8776 7736 660FEF95 		pxor	-8960(%rbp), %xmm2
+ 8776      00DDFFFF 
+ 8777 773e 660F7F95 		movdqa	%xmm2, -9024(%rbp)
+ 8777      C0DCFFFF 
+1836:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1837:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[6] = v0; /* K24:K25:K26:K27 */
+ 8778              		.loc 2 1837 0
+ 8779 7746 488B85A8 		movq	-8536(%rbp), %rax
+ 8779      DEFFFF
+ 8780 774d 4883C060 		addq	$96, %rax
+ 8781 7751 660F6F85 		movdqa	-9040(%rbp), %xmm0
+ 8781      B0DCFFFF 
+ 8782 7759 660F7F00 		movdqa	%xmm0, (%rax)
+1838:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1839:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 4-15 = 28-39 */
+1840:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1841:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1842:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 8783              		.loc 2 1842 0
+ 8784 775d 660F6F95 		movdqa	-9024(%rbp), %xmm2
+ 8784      C0DCFFFF 
+ 8785 7765 660F7F95 		movdqa	%xmm2, -8960(%rbp)
+ 8785      00DDFFFF 
+ 8786 776d 660F6F85 		movdqa	-8960(%rbp), %xmm0
+ 8786      00DDFFFF 
+ 8787 7775 F30F7F85 		movdqu	%xmm0, -3872(%rbp)
+ 8787      E0F0FFFF 
+ 8788              	.LBB2262:
+ 8789              	.LBB2263:
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rconw = (AESWord)(AESByte)rcon;
+ 8790              		.loc 2 1629 0
+ 8791 777d B8100000 		movl	$16, %eax
+ 8791      00
+ 8792 7782 0FB6C0   		movzbl	%al, %eax
+ 8793 7785 898500F1 		movl	%eax, -3840(%rbp)
+ 8793      FFFF
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 8794              		.loc 2 1630 0
+ 8795 778b F30F6F85 		movdqu	-3872(%rbp), %xmm0
+ 8795      E0F0FFFF 
+ 8796 7793 F30F7F85 		movdqu	%xmm0, -8320(%rbp)
+ 8796      80DFFFFF 
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[1]);
+ 8797              		.loc 2 1631 0
+ 8798 779b 8B8584DF 		movl	-8316(%rbp), %eax
+ 8798      FFFF
+ 8799 77a1 898504F1 		movl	%eax, -3836(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 282
+
+
+ 8799      FFFF
+ 8800              	.LBB2264:
+ 8801              	.LBB2265:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 8802              		.loc 2 740 0
+ 8803 77a7 8B8504F1 		movl	-3836(%rbp), %eax
+ 8803      FFFF
+ 8804 77ad 898570DF 		movl	%eax, -8336(%rbp)
+ 8804      FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 8805              		.loc 2 741 0
+ 8806 77b3 C78508F1 		movl	$0, -3832(%rbp)
+ 8806      FFFF0000 
+ 8806      0000
+ 8807 77bd EB36     		jmp	.L130
+ 8808              	.L131:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 8809              		.loc 2 742 0
+ 8810 77bf 8B8D08F1 		movl	-3832(%rbp), %ecx
+ 8810      FFFF
+ 8811 77c5 8B8508F1 		movl	-3832(%rbp), %eax
+ 8811      FFFF
+ 8812 77cb 89C0     		mov	%eax, %eax
+ 8813 77cd 0FB68405 		movzbl	-8336(%rbp,%rax), %eax
+ 8813      70DFFFFF 
+ 8814 77d5 0FB6C0   		movzbl	%al, %eax
+ 8815 77d8 89C2     		mov	%eax, %edx
+ 8816 77da 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBox(%rip), %rax
+ 8816      000000
+ 8817 77e1 0FB61402 		movzbl	(%rdx,%rax), %edx
+ 8818 77e5 89C8     		mov	%ecx, %eax
+ 8819 77e7 88940570 		movb	%dl, -8336(%rbp,%rax)
+ 8819      DFFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 8820              		.loc 2 741 0
+ 8821 77ee 838508F1 		addl	$1, -3832(%rbp)
+ 8821      FFFF01
+ 8822              	.L130:
+ 8823 77f5 83BD08F1 		cmpl	$3, -3832(%rbp)
+ 8823      FFFF03
+ 8824 77fc 76C1     		jbe	.L131
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 8825              		.loc 2 743 0
+ 8826 77fe 8B8570DF 		movl	-8336(%rbp), %eax
+ 8826      FFFF
+ 8827              	.LBE2265:
+ 8828              	.LBE2264:
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[1]);
+ 8829              		.loc 2 1631 0
+ 8830 7804 8985FCF0 		movl	%eax, -3844(%rbp)
+ 8830      FFFF
+ 8831 780a 8B85FCF0 		movl	-3844(%rbp), %eax
+ 8831      FFFF
+ 8832 7810 89850CF1 		movl	%eax, -3828(%rbp)
+ 8832      FFFF
+ 8833              	.LBB2266:
+ 8834              	.LBB2267:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 283
+
+
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (w >> 8) | (w << 24);
+ 8835              		.loc 2 1196 0
+ 8836 7816 8B850CF1 		movl	-3828(%rbp), %eax
+ 8836      FFFF
+ 8837 781c C1C808   		rorl	$8, %eax
+ 8838              	.LBE2267:
+ 8839              	.LBE2266:
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(RotWord)(temp);
+ 8840              		.loc 2 1632 0
+ 8841 781f 8985FCF0 		movl	%eax, -3844(%rbp)
+ 8841      FFFF
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp ^= rconw;
+ 8842              		.loc 2 1633 0
+ 8843 7825 8B8500F1 		movl	-3840(%rbp), %eax
+ 8843      FFFF
+ 8844 782b 3185FCF0 		xorl	%eax, -3844(%rbp)
+ 8844      FFFF
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 8845              		.loc 2 1635 0
+ 8846 7831 8B85FCF0 		movl	-3844(%rbp), %eax
+ 8846      FFFF
+ 8847 7837 89858CDF 		movl	%eax, -8308(%rbp)
+ 8847      FFFF
+ 8848 783d 8B858CDF 		movl	-8308(%rbp), %eax
+ 8848      FFFF
+ 8849 7843 898588DF 		movl	%eax, -8312(%rbp)
+ 8849      FFFF
+ 8850 7849 8B8588DF 		movl	-8312(%rbp), %eax
+ 8850      FFFF
+ 8851 784f 898584DF 		movl	%eax, -8316(%rbp)
+ 8851      FFFF
+ 8852 7855 8B8584DF 		movl	-8316(%rbp), %eax
+ 8852      FFFF
+ 8853 785b 898580DF 		movl	%eax, -8320(%rbp)
+ 8853      FFFF
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 8854              		.loc 2 1636 0
+ 8855 7861 F30F6F85 		movdqu	-8320(%rbp), %xmm0
+ 8855      80DFFFFF 
+ 8856              	.LBE2263:
+ 8857              	.LBE2262:
+ 8858              		.loc 2 1842 0
+ 8859 7869 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 8859      00DDFFFF 
+ 8860 7871 660F6F95 		movdqa	-9040(%rbp), %xmm2
+ 8860      B0DCFFFF 
+ 8861 7879 F30F7F95 		movdqu	%xmm2, -3824(%rbp)
+ 8861      10F1FFFF 
+ 8862              	.LBB2268:
+ 8863              	.LBB2269:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 8864              		.loc 2 1565 0
+ 8865 7881 F30F6F85 		movdqu	-3824(%rbp), %xmm0
+ 8865      10F1FFFF 
+ 8866 7889 660F7F85 		movdqa	%xmm0, -8720(%rbp)
+ 8866      F0DDFFFF 
+ 8867 7891 660F6F95 		movdqa	-8720(%rbp), %xmm2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 284
+
+
+ 8867      F0DDFFFF 
+ 8868 7899 F30F7F95 		movdqu	%xmm2, -3808(%rbp)
+ 8868      20F1FFFF 
+ 8869              	.LBB2270:
+ 8870              	.LBB2271:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 8871              		.loc 2 1278 0
+ 8872 78a1 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 8872      00000000 
+ 8873 78a9 F30F6F8D 		movdqu	-3808(%rbp), %xmm1
+ 8873      20F1FFFF 
+ 8874 78b1 F30F7F8D 		movdqu	%xmm1, -3776(%rbp)
+ 8874      40F1FFFF 
+ 8875 78b9 F30F7F85 		movdqu	%xmm0, -3792(%rbp)
+ 8875      30F1FFFF 
+ 8876 78c1 F30F6F85 		movdqu	-3776(%rbp), %xmm0
+ 8876      40F1FFFF 
+ 8877 78c9 F30F7F85 		movdqu	%xmm0, -3744(%rbp)
+ 8877      60F1FFFF 
+ 8878 78d1 F30F6F85 		movdqu	-3792(%rbp), %xmm0
+ 8878      30F1FFFF 
+ 8879 78d9 F30F7F85 		movdqu	%xmm0, -3760(%rbp)
+ 8879      50F1FFFF 
+ 8880              	.LBB2272:
+ 8881              	.LBB2273:
+ 8882              	.LBB2274:
+ 8883              	.LBB2275:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8884              		.loc 3 529 0
+ 8885 78e1 F30F6F8D 		movdqu	-3760(%rbp), %xmm1
+ 8885      50F1FFFF 
+ 8886 78e9 F30F6F85 		movdqu	-3744(%rbp), %xmm0
+ 8886      60F1FFFF 
+ 8887 78f1 660F3800 		pshufb	%xmm1, %xmm0
+ 8887      C1
+ 8888              	.LBE2275:
+ 8889              	.LBE2274:
+ 8890              	.LBE2273:
+ 8891              	.LBE2272:
+ 8892              	.LBE2271:
+ 8893              	.LBE2270:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8894              		.loc 2 1567 0
+ 8895 78f6 660F7F85 		movdqa	%xmm0, -8720(%rbp)
+ 8895      F0DDFFFF 
+ 8896 78fe 660F6F85 		movdqa	-8720(%rbp), %xmm0
+ 8896      F0DDFFFF 
+ 8897 7906 660FEF85 		pxor	-3824(%rbp), %xmm0
+ 8897      10F1FFFF 
+ 8898 790e F30F7F85 		movdqu	%xmm0, -3824(%rbp)
+ 8898      10F1FFFF 
+ 8899 7916 660F6F85 		movdqa	-8720(%rbp), %xmm0
+ 8899      F0DDFFFF 
+ 8900 791e F30F7F85 		movdqu	%xmm0, -3728(%rbp)
+ 8900      70F1FFFF 
+ 8901              	.LBB2276:
+ 8902              	.LBB2277:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 285
+
+
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 8903              		.loc 2 1278 0
+ 8904 7926 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 8904      00000000 
+ 8905 792e F30F6F8D 		movdqu	-3728(%rbp), %xmm1
+ 8905      70F1FFFF 
+ 8906 7936 F30F7F8D 		movdqu	%xmm1, -3696(%rbp)
+ 8906      90F1FFFF 
+ 8907 793e F30F7F85 		movdqu	%xmm0, -3712(%rbp)
+ 8907      80F1FFFF 
+ 8908 7946 F30F6F85 		movdqu	-3696(%rbp), %xmm0
+ 8908      90F1FFFF 
+ 8909 794e F30F7F85 		movdqu	%xmm0, -3664(%rbp)
+ 8909      B0F1FFFF 
+ 8910 7956 F30F6F85 		movdqu	-3712(%rbp), %xmm0
+ 8910      80F1FFFF 
+ 8911 795e F30F7F85 		movdqu	%xmm0, -3680(%rbp)
+ 8911      A0F1FFFF 
+ 8912              	.LBB2278:
+ 8913              	.LBB2279:
+ 8914              	.LBB2280:
+ 8915              	.LBB2281:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8916              		.loc 3 529 0
+ 8917 7966 F30F6F8D 		movdqu	-3680(%rbp), %xmm1
+ 8917      A0F1FFFF 
+ 8918 796e F30F6F85 		movdqu	-3664(%rbp), %xmm0
+ 8918      B0F1FFFF 
+ 8919 7976 660F3800 		pshufb	%xmm1, %xmm0
+ 8919      C1
+ 8920              	.LBE2281:
+ 8921              	.LBE2280:
+ 8922              	.LBE2279:
+ 8923              	.LBE2278:
+ 8924              	.LBE2277:
+ 8925              	.LBE2276:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8926              		.loc 2 1568 0
+ 8927 797b 660F7F85 		movdqa	%xmm0, -8720(%rbp)
+ 8927      F0DDFFFF 
+ 8928 7983 660F6F85 		movdqa	-8720(%rbp), %xmm0
+ 8928      F0DDFFFF 
+ 8929 798b 660FEF85 		pxor	-3824(%rbp), %xmm0
+ 8929      10F1FFFF 
+ 8930 7993 F30F7F85 		movdqu	%xmm0, -3824(%rbp)
+ 8930      10F1FFFF 
+ 8931 799b 660F6F95 		movdqa	-8720(%rbp), %xmm2
+ 8931      F0DDFFFF 
+ 8932 79a3 F30F7F95 		movdqu	%xmm2, -3648(%rbp)
+ 8932      C0F1FFFF 
+ 8933              	.LBB2282:
+ 8934              	.LBB2283:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 8935              		.loc 2 1278 0
+ 8936 79ab 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 8936      00000000 
+ 8937 79b3 F30F6F8D 		movdqu	-3648(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 286
+
+
+ 8937      C0F1FFFF 
+ 8938 79bb F30F7F8D 		movdqu	%xmm1, -3616(%rbp)
+ 8938      E0F1FFFF 
+ 8939 79c3 F30F7F85 		movdqu	%xmm0, -3632(%rbp)
+ 8939      D0F1FFFF 
+ 8940 79cb F30F6F85 		movdqu	-3616(%rbp), %xmm0
+ 8940      E0F1FFFF 
+ 8941 79d3 F30F7F85 		movdqu	%xmm0, -3584(%rbp)
+ 8941      00F2FFFF 
+ 8942 79db F30F6F85 		movdqu	-3632(%rbp), %xmm0
+ 8942      D0F1FFFF 
+ 8943 79e3 F30F7F85 		movdqu	%xmm0, -3600(%rbp)
+ 8943      F0F1FFFF 
+ 8944              	.LBB2284:
+ 8945              	.LBB2285:
+ 8946              	.LBB2286:
+ 8947              	.LBB2287:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8948              		.loc 3 529 0
+ 8949 79eb F30F6F8D 		movdqu	-3600(%rbp), %xmm1
+ 8949      F0F1FFFF 
+ 8950 79f3 F30F6F85 		movdqu	-3584(%rbp), %xmm0
+ 8950      00F2FFFF 
+ 8951 79fb 660F3800 		pshufb	%xmm1, %xmm0
+ 8951      C1
+ 8952              	.LBE2287:
+ 8953              	.LBE2286:
+ 8954              	.LBE2285:
+ 8955              	.LBE2284:
+ 8956              	.LBE2283:
+ 8957              	.LBE2282:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 8958              		.loc 2 1569 0
+ 8959 7a00 660F7F85 		movdqa	%xmm0, -8720(%rbp)
+ 8959      F0DDFFFF 
+ 8960 7a08 660F6F85 		movdqa	-8720(%rbp), %xmm0
+ 8960      F0DDFFFF 
+ 8961 7a10 660FEF85 		pxor	-3824(%rbp), %xmm0
+ 8961      10F1FFFF 
+ 8962 7a18 F30F7F85 		movdqu	%xmm0, -3824(%rbp)
+ 8962      10F1FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 8963              		.loc 2 1571 0
+ 8964 7a20 F30F6F85 		movdqu	-3824(%rbp), %xmm0
+ 8964      10F1FFFF 
+ 8965              	.LBE2269:
+ 8966              	.LBE2268:
+1843:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v1,0x10);                             /* F(k29): F(k29): F(k29) : F(k29)       */
+1844:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3  = AESBCMEMBER(ShiftXorColumns) (v0);       /* k24   :k24^k25:k24^k25^k26:k24^k25^k26^k27 */
+ 8967              		.loc 2 1844 0
+ 8968 7a28 660F7F85 		movdqa	%xmm0, -8992(%rbp)
+ 8968      E0DCFFFF 
+1845:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3 ^= k;                                       /* k30   : k31   : k32    : k33          */
+ 8969              		.loc 2 1845 0
+ 8970 7a30 660F6F85 		movdqa	-8992(%rbp), %xmm0
+ 8970      E0DCFFFF 
+ 8971 7a38 660FEF85 		pxor	-8960(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 287
+
+
+ 8971      00DDFFFF 
+ 8972 7a40 660F7F85 		movdqa	%xmm0, -8992(%rbp)
+ 8972      E0DCFFFF 
+ 8973 7a48 660F6F95 		movdqa	-9024(%rbp), %xmm2
+ 8973      C0DCFFFF 
+ 8974 7a50 F30F7F95 		movdqu	%xmm2, -3568(%rbp)
+ 8974      10F2FFFF 
+ 8975              	.LBB2288:
+ 8976              	.LBB2289:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 8977              		.loc 2 1565 0
+ 8978 7a58 F30F6F85 		movdqu	-3568(%rbp), %xmm0
+ 8978      10F2FFFF 
+ 8979 7a60 660F7F85 		movdqa	%xmm0, -8704(%rbp)
+ 8979      00DEFFFF 
+ 8980 7a68 660F6F95 		movdqa	-8704(%rbp), %xmm2
+ 8980      00DEFFFF 
+ 8981 7a70 F30F7F95 		movdqu	%xmm2, -3552(%rbp)
+ 8981      20F2FFFF 
+ 8982              	.LBB2290:
+ 8983              	.LBB2291:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 8984              		.loc 2 1278 0
+ 8985 7a78 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 8985      00000000 
+ 8986 7a80 F30F6F8D 		movdqu	-3552(%rbp), %xmm1
+ 8986      20F2FFFF 
+ 8987 7a88 F30F7F8D 		movdqu	%xmm1, -3520(%rbp)
+ 8987      40F2FFFF 
+ 8988 7a90 F30F7F85 		movdqu	%xmm0, -3536(%rbp)
+ 8988      30F2FFFF 
+ 8989 7a98 F30F6F85 		movdqu	-3520(%rbp), %xmm0
+ 8989      40F2FFFF 
+ 8990 7aa0 F30F7F85 		movdqu	%xmm0, -3488(%rbp)
+ 8990      60F2FFFF 
+ 8991 7aa8 F30F6F85 		movdqu	-3536(%rbp), %xmm0
+ 8991      30F2FFFF 
+ 8992 7ab0 F30F7F85 		movdqu	%xmm0, -3504(%rbp)
+ 8992      50F2FFFF 
+ 8993              	.LBB2292:
+ 8994              	.LBB2293:
+ 8995              	.LBB2294:
+ 8996              	.LBB2295:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 8997              		.loc 3 529 0
+ 8998 7ab8 F30F6F8D 		movdqu	-3504(%rbp), %xmm1
+ 8998      50F2FFFF 
+ 8999 7ac0 F30F6F85 		movdqu	-3488(%rbp), %xmm0
+ 8999      60F2FFFF 
+ 9000 7ac8 660F3800 		pshufb	%xmm1, %xmm0
+ 9000      C1
+ 9001              	.LBE2295:
+ 9002              	.LBE2294:
+ 9003              	.LBE2293:
+ 9004              	.LBE2292:
+ 9005              	.LBE2291:
+ 9006              	.LBE2290:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 288
+
+
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9007              		.loc 2 1567 0
+ 9008 7acd 660F7F85 		movdqa	%xmm0, -8704(%rbp)
+ 9008      00DEFFFF 
+ 9009 7ad5 660F6F85 		movdqa	-8704(%rbp), %xmm0
+ 9009      00DEFFFF 
+ 9010 7add 660FEF85 		pxor	-3568(%rbp), %xmm0
+ 9010      10F2FFFF 
+ 9011 7ae5 F30F7F85 		movdqu	%xmm0, -3568(%rbp)
+ 9011      10F2FFFF 
+ 9012 7aed 660F6F85 		movdqa	-8704(%rbp), %xmm0
+ 9012      00DEFFFF 
+ 9013 7af5 F30F7F85 		movdqu	%xmm0, -3472(%rbp)
+ 9013      70F2FFFF 
+ 9014              	.LBB2296:
+ 9015              	.LBB2297:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 9016              		.loc 2 1278 0
+ 9017 7afd 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 9017      00000000 
+ 9018 7b05 F30F6F8D 		movdqu	-3472(%rbp), %xmm1
+ 9018      70F2FFFF 
+ 9019 7b0d F30F7F8D 		movdqu	%xmm1, -3440(%rbp)
+ 9019      90F2FFFF 
+ 9020 7b15 F30F7F85 		movdqu	%xmm0, -3456(%rbp)
+ 9020      80F2FFFF 
+ 9021 7b1d F30F6F85 		movdqu	-3440(%rbp), %xmm0
+ 9021      90F2FFFF 
+ 9022 7b25 F30F7F85 		movdqu	%xmm0, -3408(%rbp)
+ 9022      B0F2FFFF 
+ 9023 7b2d F30F6F85 		movdqu	-3456(%rbp), %xmm0
+ 9023      80F2FFFF 
+ 9024 7b35 F30F7F85 		movdqu	%xmm0, -3424(%rbp)
+ 9024      A0F2FFFF 
+ 9025              	.LBB2298:
+ 9026              	.LBB2299:
+ 9027              	.LBB2300:
+ 9028              	.LBB2301:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9029              		.loc 3 529 0
+ 9030 7b3d F30F6F8D 		movdqu	-3424(%rbp), %xmm1
+ 9030      A0F2FFFF 
+ 9031 7b45 F30F6F85 		movdqu	-3408(%rbp), %xmm0
+ 9031      B0F2FFFF 
+ 9032 7b4d 660F3800 		pshufb	%xmm1, %xmm0
+ 9032      C1
+ 9033              	.LBE2301:
+ 9034              	.LBE2300:
+ 9035              	.LBE2299:
+ 9036              	.LBE2298:
+ 9037              	.LBE2297:
+ 9038              	.LBE2296:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9039              		.loc 2 1568 0
+ 9040 7b52 660F7F85 		movdqa	%xmm0, -8704(%rbp)
+ 9040      00DEFFFF 
+ 9041 7b5a 660F6F85 		movdqa	-8704(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 289
+
+
+ 9041      00DEFFFF 
+ 9042 7b62 660FEF85 		pxor	-3568(%rbp), %xmm0
+ 9042      10F2FFFF 
+ 9043 7b6a F30F7F85 		movdqu	%xmm0, -3568(%rbp)
+ 9043      10F2FFFF 
+ 9044 7b72 660F6F95 		movdqa	-8704(%rbp), %xmm2
+ 9044      00DEFFFF 
+ 9045 7b7a F30F7F95 		movdqu	%xmm2, -3392(%rbp)
+ 9045      C0F2FFFF 
+ 9046              	.LBB2302:
+ 9047              	.LBB2303:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 9048              		.loc 2 1278 0
+ 9049 7b82 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 9049      00000000 
+ 9050 7b8a F30F6F8D 		movdqu	-3392(%rbp), %xmm1
+ 9050      C0F2FFFF 
+ 9051 7b92 F30F7F8D 		movdqu	%xmm1, -3360(%rbp)
+ 9051      E0F2FFFF 
+ 9052 7b9a F30F7F85 		movdqu	%xmm0, -3376(%rbp)
+ 9052      D0F2FFFF 
+ 9053 7ba2 F30F6F85 		movdqu	-3360(%rbp), %xmm0
+ 9053      E0F2FFFF 
+ 9054 7baa F30F7F85 		movdqu	%xmm0, -3328(%rbp)
+ 9054      00F3FFFF 
+ 9055 7bb2 F30F6F85 		movdqu	-3376(%rbp), %xmm0
+ 9055      D0F2FFFF 
+ 9056 7bba F30F7F85 		movdqu	%xmm0, -3344(%rbp)
+ 9056      F0F2FFFF 
+ 9057              	.LBB2304:
+ 9058              	.LBB2305:
+ 9059              	.LBB2306:
+ 9060              	.LBB2307:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9061              		.loc 3 529 0
+ 9062 7bc2 F30F6F8D 		movdqu	-3344(%rbp), %xmm1
+ 9062      F0F2FFFF 
+ 9063 7bca F30F6F85 		movdqu	-3328(%rbp), %xmm0
+ 9063      00F3FFFF 
+ 9064 7bd2 660F3800 		pshufb	%xmm1, %xmm0
+ 9064      C1
+ 9065              	.LBE2307:
+ 9066              	.LBE2306:
+ 9067              	.LBE2305:
+ 9068              	.LBE2304:
+ 9069              	.LBE2303:
+ 9070              	.LBE2302:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9071              		.loc 2 1569 0
+ 9072 7bd7 660F7F85 		movdqa	%xmm0, -8704(%rbp)
+ 9072      00DEFFFF 
+ 9073 7bdf 660F6F85 		movdqa	-8704(%rbp), %xmm0
+ 9073      00DEFFFF 
+ 9074 7be7 660FEF85 		pxor	-3568(%rbp), %xmm0
+ 9074      10F2FFFF 
+ 9075 7bef F30F7F85 		movdqu	%xmm0, -3568(%rbp)
+ 9075      10F2FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 290
+
+
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 9076              		.loc 2 1571 0
+ 9077 7bf7 F30F6F85 		movdqu	-3568(%rbp), %xmm0
+ 9077      10F2FFFF 
+ 9078              	.LBE2289:
+ 9079              	.LBE2288:
+1846:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4  = AESBCMEMBER(ShiftXorColumns) (v1);       /* k26   :k28^k29: k29    : 0            */
+ 9080              		.loc 2 1846 0
+ 9081 7bff 660F7F85 		movdqa	%xmm0, -8976(%rbp)
+ 9081      F0DCFFFF 
+1847:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k33   : k33   : k33    : k33          */
+ 9082              		.loc 2 1847 0
+ 9083 7c07 660F6F85 		movdqa	-8992(%rbp), %xmm0
+ 9083      E0DCFFFF 
+ 9084 7c0f 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 9084      00DDFFFF 
+ 9085 7c17 660F6F95 		movdqa	-8960(%rbp), %xmm2
+ 9085      00DDFFFF 
+ 9086 7c1f F30F7F95 		movdqu	%xmm2, -3312(%rbp)
+ 9086      10F3FFFF 
+ 9087 7c27 F30F6F85 		movdqu	-3312(%rbp), %xmm0
+ 9087      10F3FFFF 
+ 9088 7c2f F30F7F85 		movdqu	%xmm0, -3280(%rbp)
+ 9088      30F3FFFF 
+ 9089              	.LBB2308:
+ 9090              	.LBB2309:
+ 9091              	.LBB2310:
+ 9092              	.LBB2311:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 9093              		.loc 3 450 0
+ 9094 7c37 F30F6F85 		movdqu	-3280(%rbp), %xmm0
+ 9094      30F3FFFF 
+ 9095 7c3f 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 9095      FF
+ 9096              	.LBE2311:
+ 9097              	.LBE2310:
+ 9098              	.LBE2309:
+ 9099              	.LBE2308:
+ 9100              		.loc 2 1847 0
+ 9101 7c44 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 9101      00DDFFFF 
+1848:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4 ^= k;                                       /* k34   : k35   : x      : x            */
+ 9102              		.loc 2 1848 0
+ 9103 7c4c 660F6F85 		movdqa	-8976(%rbp), %xmm0
+ 9103      F0DCFFFF 
+ 9104 7c54 660FEF85 		pxor	-8960(%rbp), %xmm0
+ 9104      00DDFFFF 
+ 9105 7c5c 660F7F85 		movdqa	%xmm0, -8976(%rbp)
+ 9105      F0DCFFFF 
+ 9106 7c64 660F6F95 		movdqa	-9024(%rbp), %xmm2
+ 9106      C0DCFFFF 
+ 9107 7c6c F30F7F95 		movdqu	%xmm2, -3248(%rbp)
+ 9107      50F3FFFF 
+ 9108 7c74 660F6F85 		movdqa	-8992(%rbp), %xmm0
+ 9108      E0DCFFFF 
+ 9109 7c7c F30F7F85 		movdqu	%xmm0, -3264(%rbp)
+ 9109      40F3FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 291
+
+
+ 9110 7c84 F30F6F85 		movdqu	-3248(%rbp), %xmm0
+ 9110      50F3FFFF 
+ 9111 7c8c F30F7F85 		movdqu	%xmm0, -3200(%rbp)
+ 9111      80F3FFFF 
+ 9112 7c94 F30F6F85 		movdqu	-3264(%rbp), %xmm0
+ 9112      40F3FFFF 
+ 9113 7c9c F30F7F85 		movdqu	%xmm0, -3216(%rbp)
+ 9113      70F3FFFF 
+ 9114              	.LBB2312:
+ 9115              	.LBB2313:
+ 9116              	.LBB2314:
+ 9117              	.LBB2315:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 9118              		.loc 3 366 0
+ 9119 7ca4 F20F1085 		movsd	-3216(%rbp), %xmm0
+ 9119      70F3FFFF 
+ 9120 7cac 660F1685 		movhpd	-3208(%rbp), %xmm0
+ 9120      78F3FFFF 
+ 9121 7cb4 F20F108D 		movsd	-3200(%rbp), %xmm1
+ 9121      80F3FFFF 
+ 9122 7cbc 660F168D 		movhpd	-3192(%rbp), %xmm1
+ 9122      88F3FFFF 
+ 9123 7cc4 660F28D1 		movapd	%xmm1, %xmm2
+ 9124 7cc8 660F14D0 		unpcklpd	%xmm0, %xmm2
+ 9125 7ccc 660F28C2 		movapd	%xmm2, %xmm0
+ 9126              	.LBE2315:
+ 9127              	.LBE2314:
+ 9128              	.LBE2313:
+ 9129              	.LBE2312:
+1849:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateMerge1) (v1,v3);        /* k28   : k29   : k30    : k31          */
+ 9130              		.loc 2 1849 0
+ 9131 7cd0 660F7F85 		movdqa	%xmm0, -9024(%rbp)
+ 9131      C0DCFFFF 
+1850:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[7] = v1; /* K28:K29:K30:K31 */
+ 9132              		.loc 2 1851 0
+ 9133 7cd8 488B85A8 		movq	-8536(%rbp), %rax
+ 9133      DEFFFF
+ 9134 7cdf 4883C070 		addq	$112, %rax
+ 9135 7ce3 660F6F85 		movdqa	-9024(%rbp), %xmm0
+ 9135      C0DCFFFF 
+ 9136 7ceb 660F7F00 		movdqa	%xmm0, (%rax)
+ 9137 7cef 660F6F95 		movdqa	-8992(%rbp), %xmm2
+ 9137      E0DCFFFF 
+ 9138 7cf7 F30F7F95 		movdqu	%xmm2, -3168(%rbp)
+ 9138      A0F3FFFF 
+ 9139 7cff 660F6F85 		movdqa	-8976(%rbp), %xmm0
+ 9139      F0DCFFFF 
+ 9140 7d07 F30F7F85 		movdqu	%xmm0, -3184(%rbp)
+ 9140      90F3FFFF 
+ 9141 7d0f F30F6F85 		movdqu	-3168(%rbp), %xmm0
+ 9141      A0F3FFFF 
+ 9142 7d17 F30F7F85 		movdqu	%xmm0, -3120(%rbp)
+ 9142      D0F3FFFF 
+ 9143 7d1f F30F6F85 		movdqu	-3184(%rbp), %xmm0
+ 9143      90F3FFFF 
+ 9144 7d27 F30F7F85 		movdqu	%xmm0, -3136(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 292
+
+
+ 9144      C0F3FFFF 
+ 9145              	.LBB2316:
+ 9146              	.LBB2317:
+ 9147              	.LBB2318:
+ 9148              	.LBB2319:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 9149              		.loc 3 366 0
+ 9150 7d2f F20F108D 		movsd	-3136(%rbp), %xmm1
+ 9150      C0F3FFFF 
+ 9151 7d37 660F168D 		movhpd	-3128(%rbp), %xmm1
+ 9151      C8F3FFFF 
+ 9152 7d3f F20F1085 		movsd	-3120(%rbp), %xmm0
+ 9152      D0F3FFFF 
+ 9153 7d47 660F1685 		movhpd	-3112(%rbp), %xmm0
+ 9153      D8F3FFFF 
+ 9154 7d4f 660FC6C1 		shufpd	$1, %xmm1, %xmm0
+ 9154      01
+ 9155              	.LBE2319:
+ 9156              	.LBE2318:
+ 9157              	.LBE2317:
+ 9158              	.LBE2316:
+1852:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1853:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v2  = AESBCMEMBER(StateMerge2) (v3,v4);        /* k32   : k33   : k34    : k35          */
+ 9159              		.loc 2 1853 0
+ 9160 7d54 660F7F85 		movdqa	%xmm0, -9008(%rbp)
+ 9160      D0DCFFFF 
+1854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[8] = v2; /* K32:K33:K34:K35 */
+ 9161              		.loc 2 1854 0
+ 9162 7d5c 488B85A8 		movq	-8536(%rbp), %rax
+ 9162      DEFFFF
+ 9163 7d63 4883E880 		subq	$-128, %rax
+ 9164 7d67 660F6F95 		movdqa	-9008(%rbp), %xmm2
+ 9164      D0DCFFFF 
+ 9165 7d6f 660F7F10 		movdqa	%xmm2, (%rax)
+ 9166 7d73 660F6F85 		movdqa	-8992(%rbp), %xmm0
+ 9166      E0DCFFFF 
+ 9167 7d7b F30F7F85 		movdqu	%xmm0, -3104(%rbp)
+ 9167      E0F3FFFF 
+ 9168              	.LBB2320:
+ 9169              	.LBB2321:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 9170              		.loc 2 1565 0
+ 9171 7d83 F30F6F95 		movdqu	-3104(%rbp), %xmm2
+ 9171      E0F3FFFF 
+ 9172 7d8b 660F7F95 		movdqa	%xmm2, -8688(%rbp)
+ 9172      10DEFFFF 
+ 9173 7d93 660F6F85 		movdqa	-8688(%rbp), %xmm0
+ 9173      10DEFFFF 
+ 9174 7d9b F30F7F85 		movdqu	%xmm0, -3088(%rbp)
+ 9174      F0F3FFFF 
+ 9175              	.LBB2322:
+ 9176              	.LBB2323:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 9177              		.loc 2 1278 0
+ 9178 7da3 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 9178      00000000 
+ 9179 7dab F30F6F8D 		movdqu	-3088(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 293
+
+
+ 9179      F0F3FFFF 
+ 9180 7db3 F30F7F8D 		movdqu	%xmm1, -3056(%rbp)
+ 9180      10F4FFFF 
+ 9181 7dbb F30F7F85 		movdqu	%xmm0, -3072(%rbp)
+ 9181      00F4FFFF 
+ 9182 7dc3 F30F6F85 		movdqu	-3056(%rbp), %xmm0
+ 9182      10F4FFFF 
+ 9183 7dcb F30F7F85 		movdqu	%xmm0, -3024(%rbp)
+ 9183      30F4FFFF 
+ 9184 7dd3 F30F6F85 		movdqu	-3072(%rbp), %xmm0
+ 9184      00F4FFFF 
+ 9185 7ddb F30F7F85 		movdqu	%xmm0, -3040(%rbp)
+ 9185      20F4FFFF 
+ 9186              	.LBB2324:
+ 9187              	.LBB2325:
+ 9188              	.LBB2326:
+ 9189              	.LBB2327:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9190              		.loc 3 529 0
+ 9191 7de3 F30F6F8D 		movdqu	-3040(%rbp), %xmm1
+ 9191      20F4FFFF 
+ 9192 7deb F30F6F85 		movdqu	-3024(%rbp), %xmm0
+ 9192      30F4FFFF 
+ 9193 7df3 660F3800 		pshufb	%xmm1, %xmm0
+ 9193      C1
+ 9194              	.LBE2327:
+ 9195              	.LBE2326:
+ 9196              	.LBE2325:
+ 9197              	.LBE2324:
+ 9198              	.LBE2323:
+ 9199              	.LBE2322:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9200              		.loc 2 1567 0
+ 9201 7df8 660F7F85 		movdqa	%xmm0, -8688(%rbp)
+ 9201      10DEFFFF 
+ 9202 7e00 660F6F85 		movdqa	-8688(%rbp), %xmm0
+ 9202      10DEFFFF 
+ 9203 7e08 660FEF85 		pxor	-3104(%rbp), %xmm0
+ 9203      E0F3FFFF 
+ 9204 7e10 F30F7F85 		movdqu	%xmm0, -3104(%rbp)
+ 9204      E0F3FFFF 
+ 9205 7e18 660F6F95 		movdqa	-8688(%rbp), %xmm2
+ 9205      10DEFFFF 
+ 9206 7e20 F30F7F95 		movdqu	%xmm2, -3008(%rbp)
+ 9206      40F4FFFF 
+ 9207              	.LBB2328:
+ 9208              	.LBB2329:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 9209              		.loc 2 1278 0
+ 9210 7e28 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 9210      00000000 
+ 9211 7e30 F30F6F8D 		movdqu	-3008(%rbp), %xmm1
+ 9211      40F4FFFF 
+ 9212 7e38 F30F7F8D 		movdqu	%xmm1, -2976(%rbp)
+ 9212      60F4FFFF 
+ 9213 7e40 F30F7F85 		movdqu	%xmm0, -2992(%rbp)
+ 9213      50F4FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 294
+
+
+ 9214 7e48 F30F6F85 		movdqu	-2976(%rbp), %xmm0
+ 9214      60F4FFFF 
+ 9215 7e50 F30F7F85 		movdqu	%xmm0, -2944(%rbp)
+ 9215      80F4FFFF 
+ 9216 7e58 F30F6F85 		movdqu	-2992(%rbp), %xmm0
+ 9216      50F4FFFF 
+ 9217 7e60 F30F7F85 		movdqu	%xmm0, -2960(%rbp)
+ 9217      70F4FFFF 
+ 9218              	.LBB2330:
+ 9219              	.LBB2331:
+ 9220              	.LBB2332:
+ 9221              	.LBB2333:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9222              		.loc 3 529 0
+ 9223 7e68 F30F6F8D 		movdqu	-2960(%rbp), %xmm1
+ 9223      70F4FFFF 
+ 9224 7e70 F30F6F85 		movdqu	-2944(%rbp), %xmm0
+ 9224      80F4FFFF 
+ 9225 7e78 660F3800 		pshufb	%xmm1, %xmm0
+ 9225      C1
+ 9226              	.LBE2333:
+ 9227              	.LBE2332:
+ 9228              	.LBE2331:
+ 9229              	.LBE2330:
+ 9230              	.LBE2329:
+ 9231              	.LBE2328:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9232              		.loc 2 1568 0
+ 9233 7e7d 660F7F85 		movdqa	%xmm0, -8688(%rbp)
+ 9233      10DEFFFF 
+ 9234 7e85 660F6F85 		movdqa	-8688(%rbp), %xmm0
+ 9234      10DEFFFF 
+ 9235 7e8d 660FEF85 		pxor	-3104(%rbp), %xmm0
+ 9235      E0F3FFFF 
+ 9236 7e95 F30F7F85 		movdqu	%xmm0, -3104(%rbp)
+ 9236      E0F3FFFF 
+ 9237 7e9d 660F6F85 		movdqa	-8688(%rbp), %xmm0
+ 9237      10DEFFFF 
+ 9238 7ea5 F30F7F85 		movdqu	%xmm0, -2928(%rbp)
+ 9238      90F4FFFF 
+ 9239              	.LBB2334:
+ 9240              	.LBB2335:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 9241              		.loc 2 1278 0
+ 9242 7ead 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 9242      00000000 
+ 9243 7eb5 F30F6F8D 		movdqu	-2928(%rbp), %xmm1
+ 9243      90F4FFFF 
+ 9244 7ebd F30F7F8D 		movdqu	%xmm1, -2896(%rbp)
+ 9244      B0F4FFFF 
+ 9245 7ec5 F30F7F85 		movdqu	%xmm0, -2912(%rbp)
+ 9245      A0F4FFFF 
+ 9246 7ecd F30F6F85 		movdqu	-2896(%rbp), %xmm0
+ 9246      B0F4FFFF 
+ 9247 7ed5 F30F7F85 		movdqu	%xmm0, -2864(%rbp)
+ 9247      D0F4FFFF 
+ 9248 7edd F30F6F85 		movdqu	-2912(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 295
+
+
+ 9248      A0F4FFFF 
+ 9249 7ee5 F30F7F85 		movdqu	%xmm0, -2880(%rbp)
+ 9249      C0F4FFFF 
+ 9250              	.LBB2336:
+ 9251              	.LBB2337:
+ 9252              	.LBB2338:
+ 9253              	.LBB2339:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9254              		.loc 3 529 0
+ 9255 7eed F30F6F8D 		movdqu	-2880(%rbp), %xmm1
+ 9255      C0F4FFFF 
+ 9256 7ef5 F30F6F85 		movdqu	-2864(%rbp), %xmm0
+ 9256      D0F4FFFF 
+ 9257 7efd 660F3800 		pshufb	%xmm1, %xmm0
+ 9257      C1
+ 9258              	.LBE2339:
+ 9259              	.LBE2338:
+ 9260              	.LBE2337:
+ 9261              	.LBE2336:
+ 9262              	.LBE2335:
+ 9263              	.LBE2334:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9264              		.loc 2 1569 0
+ 9265 7f02 660F7F85 		movdqa	%xmm0, -8688(%rbp)
+ 9265      10DEFFFF 
+ 9266 7f0a 660F6F85 		movdqa	-8688(%rbp), %xmm0
+ 9266      10DEFFFF 
+ 9267 7f12 660FEF85 		pxor	-3104(%rbp), %xmm0
+ 9267      E0F3FFFF 
+ 9268 7f1a F30F7F85 		movdqu	%xmm0, -3104(%rbp)
+ 9268      E0F3FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 9269              		.loc 2 1571 0
+ 9270 7f22 F30F6F85 		movdqu	-3104(%rbp), %xmm0
+ 9270      E0F3FFFF 
+ 9271              	.LBE2321:
+ 9272              	.LBE2320:
+1855:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 2 */
+1856:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(ShiftXorColumns) (v3);       /* k30   :k30^k31:k30^k31^k32:k30^k31^k32^k33 */
+ 9273              		.loc 2 1856 0
+ 9274 7f2a 660F7F85 		movdqa	%xmm0, -9040(%rbp)
+ 9274      B0DCFFFF 
+ 9275 7f32 660F6F95 		movdqa	-8976(%rbp), %xmm2
+ 9275      F0DCFFFF 
+ 9276 7f3a F30F7F95 		movdqu	%xmm2, -2848(%rbp)
+ 9276      E0F4FFFF 
+ 9277              	.LBB2340:
+ 9278              	.LBB2341:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 9279              		.loc 2 1565 0
+ 9280 7f42 F30F6F85 		movdqu	-2848(%rbp), %xmm0
+ 9280      E0F4FFFF 
+ 9281 7f4a 660F7F85 		movdqa	%xmm0, -8672(%rbp)
+ 9281      20DEFFFF 
+ 9282 7f52 660F6F95 		movdqa	-8672(%rbp), %xmm2
+ 9282      20DEFFFF 
+ 9283 7f5a F30F7F95 		movdqu	%xmm2, -2832(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 296
+
+
+ 9283      F0F4FFFF 
+ 9284              	.LBB2342:
+ 9285              	.LBB2343:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 9286              		.loc 2 1278 0
+ 9287 7f62 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 9287      00000000 
+ 9288 7f6a F30F6F8D 		movdqu	-2832(%rbp), %xmm1
+ 9288      F0F4FFFF 
+ 9289 7f72 F30F7F8D 		movdqu	%xmm1, -2800(%rbp)
+ 9289      10F5FFFF 
+ 9290 7f7a F30F7F85 		movdqu	%xmm0, -2816(%rbp)
+ 9290      00F5FFFF 
+ 9291 7f82 F30F6F85 		movdqu	-2800(%rbp), %xmm0
+ 9291      10F5FFFF 
+ 9292 7f8a F30F7F85 		movdqu	%xmm0, -2768(%rbp)
+ 9292      30F5FFFF 
+ 9293 7f92 F30F6F85 		movdqu	-2816(%rbp), %xmm0
+ 9293      00F5FFFF 
+ 9294 7f9a F30F7F85 		movdqu	%xmm0, -2784(%rbp)
+ 9294      20F5FFFF 
+ 9295              	.LBB2344:
+ 9296              	.LBB2345:
+ 9297              	.LBB2346:
+ 9298              	.LBB2347:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9299              		.loc 3 529 0
+ 9300 7fa2 F30F6F8D 		movdqu	-2784(%rbp), %xmm1
+ 9300      20F5FFFF 
+ 9301 7faa F30F6F85 		movdqu	-2768(%rbp), %xmm0
+ 9301      30F5FFFF 
+ 9302 7fb2 660F3800 		pshufb	%xmm1, %xmm0
+ 9302      C1
+ 9303              	.LBE2347:
+ 9304              	.LBE2346:
+ 9305              	.LBE2345:
+ 9306              	.LBE2344:
+ 9307              	.LBE2343:
+ 9308              	.LBE2342:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9309              		.loc 2 1567 0
+ 9310 7fb7 660F7F85 		movdqa	%xmm0, -8672(%rbp)
+ 9310      20DEFFFF 
+ 9311 7fbf 660F6F85 		movdqa	-8672(%rbp), %xmm0
+ 9311      20DEFFFF 
+ 9312 7fc7 660FEF85 		pxor	-2848(%rbp), %xmm0
+ 9312      E0F4FFFF 
+ 9313 7fcf F30F7F85 		movdqu	%xmm0, -2848(%rbp)
+ 9313      E0F4FFFF 
+ 9314 7fd7 660F6F85 		movdqa	-8672(%rbp), %xmm0
+ 9314      20DEFFFF 
+ 9315 7fdf F30F7F85 		movdqu	%xmm0, -2752(%rbp)
+ 9315      40F5FFFF 
+ 9316              	.LBB2348:
+ 9317              	.LBB2349:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 9318              		.loc 2 1278 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 297
+
+
+ 9319 7fe7 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 9319      00000000 
+ 9320 7fef F30F6F8D 		movdqu	-2752(%rbp), %xmm1
+ 9320      40F5FFFF 
+ 9321 7ff7 F30F7F8D 		movdqu	%xmm1, -2720(%rbp)
+ 9321      60F5FFFF 
+ 9322 7fff F30F7F85 		movdqu	%xmm0, -2736(%rbp)
+ 9322      50F5FFFF 
+ 9323 8007 F30F6F85 		movdqu	-2720(%rbp), %xmm0
+ 9323      60F5FFFF 
+ 9324 800f F30F7F85 		movdqu	%xmm0, -2688(%rbp)
+ 9324      80F5FFFF 
+ 9325 8017 F30F6F85 		movdqu	-2736(%rbp), %xmm0
+ 9325      50F5FFFF 
+ 9326 801f F30F7F85 		movdqu	%xmm0, -2704(%rbp)
+ 9326      70F5FFFF 
+ 9327              	.LBB2350:
+ 9328              	.LBB2351:
+ 9329              	.LBB2352:
+ 9330              	.LBB2353:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9331              		.loc 3 529 0
+ 9332 8027 F30F6F8D 		movdqu	-2704(%rbp), %xmm1
+ 9332      70F5FFFF 
+ 9333 802f F30F6F85 		movdqu	-2688(%rbp), %xmm0
+ 9333      80F5FFFF 
+ 9334 8037 660F3800 		pshufb	%xmm1, %xmm0
+ 9334      C1
+ 9335              	.LBE2353:
+ 9336              	.LBE2352:
+ 9337              	.LBE2351:
+ 9338              	.LBE2350:
+ 9339              	.LBE2349:
+ 9340              	.LBE2348:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9341              		.loc 2 1568 0
+ 9342 803c 660F7F85 		movdqa	%xmm0, -8672(%rbp)
+ 9342      20DEFFFF 
+ 9343 8044 660F6F85 		movdqa	-8672(%rbp), %xmm0
+ 9343      20DEFFFF 
+ 9344 804c 660FEF85 		pxor	-2848(%rbp), %xmm0
+ 9344      E0F4FFFF 
+ 9345 8054 F30F7F85 		movdqu	%xmm0, -2848(%rbp)
+ 9345      E0F4FFFF 
+ 9346 805c 660F6F95 		movdqa	-8672(%rbp), %xmm2
+ 9346      20DEFFFF 
+ 9347 8064 F30F7F95 		movdqu	%xmm2, -2672(%rbp)
+ 9347      90F5FFFF 
+ 9348              	.LBB2354:
+ 9349              	.LBB2355:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 9350              		.loc 2 1278 0
+ 9351 806c 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 9351      00000000 
+ 9352 8074 F30F6F8D 		movdqu	-2672(%rbp), %xmm1
+ 9352      90F5FFFF 
+ 9353 807c F30F7F8D 		movdqu	%xmm1, -2640(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 298
+
+
+ 9353      B0F5FFFF 
+ 9354 8084 F30F7F85 		movdqu	%xmm0, -2656(%rbp)
+ 9354      A0F5FFFF 
+ 9355 808c F30F6F85 		movdqu	-2640(%rbp), %xmm0
+ 9355      B0F5FFFF 
+ 9356 8094 F30F7F85 		movdqu	%xmm0, -2608(%rbp)
+ 9356      D0F5FFFF 
+ 9357 809c F30F6F85 		movdqu	-2656(%rbp), %xmm0
+ 9357      A0F5FFFF 
+ 9358 80a4 F30F7F85 		movdqu	%xmm0, -2624(%rbp)
+ 9358      C0F5FFFF 
+ 9359              	.LBB2356:
+ 9360              	.LBB2357:
+ 9361              	.LBB2358:
+ 9362              	.LBB2359:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9363              		.loc 3 529 0
+ 9364 80ac F30F6F8D 		movdqu	-2624(%rbp), %xmm1
+ 9364      C0F5FFFF 
+ 9365 80b4 F30F6F85 		movdqu	-2608(%rbp), %xmm0
+ 9365      D0F5FFFF 
+ 9366 80bc 660F3800 		pshufb	%xmm1, %xmm0
+ 9366      C1
+ 9367              	.LBE2359:
+ 9368              	.LBE2358:
+ 9369              	.LBE2357:
+ 9370              	.LBE2356:
+ 9371              	.LBE2355:
+ 9372              	.LBE2354:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9373              		.loc 2 1569 0
+ 9374 80c1 660F7F85 		movdqa	%xmm0, -8672(%rbp)
+ 9374      20DEFFFF 
+ 9375 80c9 660F6F85 		movdqa	-8672(%rbp), %xmm0
+ 9375      20DEFFFF 
+ 9376 80d1 660FEF85 		pxor	-2848(%rbp), %xmm0
+ 9376      E0F4FFFF 
+ 9377 80d9 F30F7F85 		movdqu	%xmm0, -2848(%rbp)
+ 9377      E0F4FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 9378              		.loc 2 1571 0
+ 9379 80e1 F30F6F85 		movdqu	-2848(%rbp), %xmm0
+ 9379      E0F4FFFF 
+ 9380              	.LBE2341:
+ 9381              	.LBE2340:
+1857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(ShiftXorColumns) (v4);       /* k26   :k26^k27: k27    : 0            */
+ 9382              		.loc 2 1857 0
+ 9383 80e9 660F7F85 		movdqa	%xmm0, -9024(%rbp)
+ 9383      C0DCFFFF 
+1858:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 9384              		.loc 2 1858 0
+ 9385 80f1 660F6F85 		movdqa	-9008(%rbp), %xmm0
+ 9385      D0DCFFFF 
+ 9386 80f9 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 9386      00DDFFFF 
+ 9387 8101 660F6F95 		movdqa	-8960(%rbp), %xmm2
+ 9387      00DDFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 299
+
+
+ 9388 8109 F30F7F95 		movdqu	%xmm2, -2576(%rbp)
+ 9388      F0F5FFFF 
+ 9389              	.LBB2360:
+ 9390              	.LBB2361:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 9391              		.loc 2 1681 0
+ 9392 8111 B8200000 		movl	$32, %eax
+ 9392      00
+ 9393 8116 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 9393      00000000 
+ 9394 811e F30F7F85 		movdqu	%xmm0, -2544(%rbp)
+ 9394      10F6FFFF 
+ 9395 8126 89850CF6 		movl	%eax, -2548(%rbp)
+ 9395      FFFF
+ 9396 812c F30F6F85 		movdqu	-2544(%rbp), %xmm0
+ 9396      10F6FFFF 
+ 9397 8134 F30F7F85 		movdqu	%xmm0, -2512(%rbp)
+ 9397      30F6FFFF 
+ 9398 813c 8B850CF6 		movl	-2548(%rbp), %eax
+ 9398      FFFF
+ 9399 8142 89852CF6 		movl	%eax, -2516(%rbp)
+ 9399      FFFF
+ 9400              	.LBB2362:
+ 9401              	.LBB2363:
+ 9402              	.LBB2364:
+ 9403              	.LBB2365:
+ 9404              		.loc 3 598 0
+ 9405 8148 8B852CF6 		movl	-2516(%rbp), %eax
+ 9405      FFFF
+ 9406 814e F30F6F85 		movdqu	-2512(%rbp), %xmm0
+ 9406      30F6FFFF 
+ 9407 8156 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 9407      C003
+ 9408              	.LBE2365:
+ 9409              	.LBE2364:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 9410              		.loc 2 519 0
+ 9411 815c F30F7F85 		movdqu	%xmm0, -2544(%rbp)
+ 9411      10F6FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 9412              		.loc 2 526 0
+ 9413 8164 F30F6F85 		movdqu	-2544(%rbp), %xmm0
+ 9413      10F6FFFF 
+ 9414              	.LBE2363:
+ 9415              	.LBE2362:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 9416              		.loc 2 1681 0
+ 9417 816c 660F7F85 		movdqa	%xmm0, -8640(%rbp)
+ 9417      40DEFFFF 
+ 9418 8174 F30F6F85 		movdqu	-2576(%rbp), %xmm0
+ 9418      F0F5FFFF 
+ 9419 817c F30F7F85 		movdqu	%xmm0, -2496(%rbp)
+ 9419      40F6FFFF 
+ 9420 8184 F30F6F85 		movdqu	-2496(%rbp), %xmm0
+ 9420      40F6FFFF 
+ 9421 818c F30F7F85 		movdqu	%xmm0, -2464(%rbp)
+ 9421      60F6FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 300
+
+
+ 9422 8194 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 9422      000000
+ 9423 819b 48898558 		movq	%rax, -2472(%rbp)
+ 9423      F6FFFF
+ 9424              	.LBB2366:
+ 9425              	.LBB2367:
+ 9426              	.LBB2368:
+ 9427              	.LBB2369:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 9428              		.loc 2 851 0
+ 9429 81a2 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 9429      00000000 
+ 9430 81aa F30F7F85 		movdqu	%xmm0, -2432(%rbp)
+ 9430      80F6FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 9431              		.loc 2 854 0
+ 9432 81b2 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 9432      00000000 
+ 9433 81ba F30F6F8D 		movdqu	-2464(%rbp), %xmm1
+ 9433      60F6FFFF 
+ 9434 81c2 F30F7F8D 		movdqu	%xmm1, -2352(%rbp)
+ 9434      D0F6FFFF 
+ 9435 81ca F30F7F85 		movdqu	%xmm0, -2368(%rbp)
+ 9435      C0F6FFFF 
+ 9436              	.LBB2370:
+ 9437              	.LBB2371:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 9438              		.loc 2 206 0
+ 9439 81d2 F30F6F85 		movdqu	-2368(%rbp), %xmm0
+ 9439      C0F6FFFF 
+ 9440 81da F30F6F8D 		movdqu	-2352(%rbp), %xmm1
+ 9440      D0F6FFFF 
+ 9441 81e2 660FDBC1 		pand	%xmm1, %xmm0
+ 9442              	.LBE2371:
+ 9443              	.LBE2370:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 9444              		.loc 2 854 0
+ 9445 81e6 F30F7F85 		movdqu	%xmm0, -2384(%rbp)
+ 9445      B0F6FFFF 
+ 9446 81ee F30F6F85 		movdqu	-2464(%rbp), %xmm0
+ 9446      60F6FFFF 
+ 9447 81f6 F30F7F85 		movdqu	%xmm0, -2320(%rbp)
+ 9447      F0F6FFFF 
+ 9448              	.LBB2372:
+ 9449              	.LBB2373:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 9450              		.loc 3 433 0
+ 9451 81fe F30F6F85 		movdqu	-2320(%rbp), %xmm0
+ 9451      F0F6FFFF 
+ 9452 8206 660F72D0 		psrld	$4, %xmm0
+ 9452      04
+ 9453              	.LBE2373:
+ 9454              	.LBE2372:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 9455              		.loc 2 857 0
+ 9456 820b F30F7F85 		movdqu	%xmm0, -2400(%rbp)
+ 9456      A0F6FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 301
+
+
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 9457              		.loc 2 859 0
+ 9458 8213 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 9458      00000000 
+ 9459 821b F30F6F8D 		movdqu	-2400(%rbp), %xmm1
+ 9459      A0F6FFFF 
+ 9460 8223 F30F7F8D 		movdqu	%xmm1, -2288(%rbp)
+ 9460      10F7FFFF 
+ 9461 822b F30F7F85 		movdqu	%xmm0, -2304(%rbp)
+ 9461      00F7FFFF 
+ 9462              	.LBB2374:
+ 9463              	.LBB2375:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 9464              		.loc 2 206 0
+ 9465 8233 F30F6F85 		movdqu	-2304(%rbp), %xmm0
+ 9465      00F7FFFF 
+ 9466 823b F30F6F8D 		movdqu	-2288(%rbp), %xmm1
+ 9466      10F7FFFF 
+ 9467 8243 660FDBC1 		pand	%xmm1, %xmm0
+ 9468              	.LBE2375:
+ 9469              	.LBE2374:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 9470              		.loc 2 859 0
+ 9471 8247 F30F7F85 		movdqu	%xmm0, -2400(%rbp)
+ 9471      A0F6FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 9472              		.loc 2 866 0
+ 9473 824f C7857CF6 		movl	$0, -2436(%rbp)
+ 9473      FFFF0000 
+ 9473      0000
+ 9474 8259 E9BE0100 		jmp	.L132
+ 9474      00
+ 9475              	.L133:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 9476              		.loc 2 868 0
+ 9477 825e 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 9477      00000000 
+ 9478 8266 F30F7F85 		movdqu	%xmm0, -2256(%rbp)
+ 9478      30F7FFFF 
+ 9479 826e F30F6F85 		movdqu	-2400(%rbp), %xmm0
+ 9479      A0F6FFFF 
+ 9480 8276 F30F7F85 		movdqu	%xmm0, -2272(%rbp)
+ 9480      20F7FFFF 
+ 9481 827e F30F6F85 		movdqu	-2256(%rbp), %xmm0
+ 9481      30F7FFFF 
+ 9482 8286 F30F7F85 		movdqu	%xmm0, -2224(%rbp)
+ 9482      50F7FFFF 
+ 9483 828e F30F6F85 		movdqu	-2272(%rbp), %xmm0
+ 9483      20F7FFFF 
+ 9484 8296 F30F7F85 		movdqu	%xmm0, -2240(%rbp)
+ 9484      40F7FFFF 
+ 9485              	.LBB2376:
+ 9486              	.LBB2377:
+ 9487              	.LBB2378:
+ 9488              	.LBB2379:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9489              		.loc 3 529 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 302
+
+
+ 9490 829e F30F6F8D 		movdqu	-2240(%rbp), %xmm1
+ 9490      40F7FFFF 
+ 9491 82a6 F30F6F85 		movdqu	-2224(%rbp), %xmm0
+ 9491      50F7FFFF 
+ 9492 82ae 660F3800 		pshufb	%xmm1, %xmm0
+ 9492      C1
+ 9493              	.LBE2379:
+ 9494              	.LBE2378:
+ 9495              	.LBE2377:
+ 9496              	.LBE2376:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 9497              		.loc 2 868 0
+ 9498 82b3 F30F7F85 		movdqu	%xmm0, -2416(%rbp)
+ 9498      90F6FFFF 
+ 9499 82bb F30F6F85 		movdqu	-2384(%rbp), %xmm0
+ 9499      B0F6FFFF 
+ 9500 82c3 F30F7F85 		movdqu	%xmm0, -2192(%rbp)
+ 9500      70F7FFFF 
+ 9501 82cb F30F6F85 		movdqu	-2416(%rbp), %xmm0
+ 9501      90F6FFFF 
+ 9502 82d3 F30F7F85 		movdqu	%xmm0, -2208(%rbp)
+ 9502      60F7FFFF 
+ 9503              	.LBB2380:
+ 9504              	.LBB2381:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 9505              		.loc 2 234 0
+ 9506 82db F30F6F85 		movdqu	-2208(%rbp), %xmm0
+ 9506      60F7FFFF 
+ 9507 82e3 F30F6F8D 		movdqu	-2192(%rbp), %xmm1
+ 9507      70F7FFFF 
+ 9508 82eb 660FEBC1 		por	%xmm1, %xmm0
+ 9509              	.LBE2381:
+ 9510              	.LBE2380:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 9511              		.loc 2 870 0
+ 9512 82ef F30F7F85 		movdqu	%xmm0, -2416(%rbp)
+ 9512      90F6FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 9513              		.loc 2 872 0
+ 9514 82f7 8B857CF6 		mov	-2436(%rbp), %eax
+ 9514      FFFF
+ 9515 82fd 48C1E004 		salq	$4, %rax
+ 9516 8301 48038558 		addq	-2472(%rbp), %rax
+ 9516      F6FFFF
+ 9517 8308 660F6F00 		movdqa	(%rax), %xmm0
+ 9518 830c F30F7F85 		movdqu	%xmm0, -2160(%rbp)
+ 9518      90F7FFFF 
+ 9519 8314 F30F6F85 		movdqu	-2416(%rbp), %xmm0
+ 9519      90F6FFFF 
+ 9520 831c F30F7F85 		movdqu	%xmm0, -2176(%rbp)
+ 9520      80F7FFFF 
+ 9521 8324 F30F6F85 		movdqu	-2160(%rbp), %xmm0
+ 9521      90F7FFFF 
+ 9522 832c F30F7F85 		movdqu	%xmm0, -2128(%rbp)
+ 9522      B0F7FFFF 
+ 9523 8334 F30F6F85 		movdqu	-2176(%rbp), %xmm0
+ 9523      80F7FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 303
+
+
+ 9524 833c F30F7F85 		movdqu	%xmm0, -2144(%rbp)
+ 9524      A0F7FFFF 
+ 9525              	.LBB2382:
+ 9526              	.LBB2383:
+ 9527              	.LBB2384:
+ 9528              	.LBB2385:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9529              		.loc 3 529 0
+ 9530 8344 F30F6F8D 		movdqu	-2144(%rbp), %xmm1
+ 9530      A0F7FFFF 
+ 9531 834c F30F6F85 		movdqu	-2128(%rbp), %xmm0
+ 9531      B0F7FFFF 
+ 9532 8354 660F3800 		pshufb	%xmm1, %xmm0
+ 9532      C1
+ 9533              	.LBE2385:
+ 9534              	.LBE2384:
+ 9535              	.LBE2383:
+ 9536              	.LBE2382:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 9537              		.loc 2 872 0
+ 9538 8359 F30F7F85 		movdqu	%xmm0, -2416(%rbp)
+ 9538      90F6FFFF 
+ 9539 8361 F30F6F85 		movdqu	-2432(%rbp), %xmm0
+ 9539      80F6FFFF 
+ 9540 8369 F30F7F85 		movdqu	%xmm0, -2096(%rbp)
+ 9540      D0F7FFFF 
+ 9541 8371 F30F6F85 		movdqu	-2416(%rbp), %xmm0
+ 9541      90F6FFFF 
+ 9542 8379 F30F7F85 		movdqu	%xmm0, -2112(%rbp)
+ 9542      C0F7FFFF 
+ 9543              	.LBB2386:
+ 9544              	.LBB2387:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 9545              		.loc 2 234 0
+ 9546 8381 F30F6F85 		movdqu	-2112(%rbp), %xmm0
+ 9546      C0F7FFFF 
+ 9547 8389 F30F6F8D 		movdqu	-2096(%rbp), %xmm1
+ 9547      D0F7FFFF 
+ 9548 8391 660FEBC1 		por	%xmm1, %xmm0
+ 9549              	.LBE2387:
+ 9550              	.LBE2386:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 9551              		.loc 2 874 0
+ 9552 8395 F30F7F85 		movdqu	%xmm0, -2432(%rbp)
+ 9552      80F6FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 9553              		.loc 2 876 0
+ 9554 839d 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 9554      00000000 
+ 9555 83a5 F30F6F8D 		movdqu	-2400(%rbp), %xmm1
+ 9555      A0F6FFFF 
+ 9556 83ad F30F7F8D 		movdqu	%xmm1, -2064(%rbp)
+ 9556      F0F7FFFF 
+ 9557 83b5 F30F7F85 		movdqu	%xmm0, -2080(%rbp)
+ 9557      E0F7FFFF 
+ 9558              	.LBB2388:
+ 9559              	.LBB2389:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 304
+
+
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 9560              		.loc 2 290 0
+ 9561 83bd F30F6F8D 		movdqu	-2080(%rbp), %xmm1
+ 9561      E0F7FFFF 
+ 9562 83c5 F30F6F85 		movdqu	-2064(%rbp), %xmm0
+ 9562      F0F7FFFF 
+ 9563 83cd 660FF8C1 		psubb	%xmm1, %xmm0
+ 9564              	.LBE2389:
+ 9565              	.LBE2388:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 9566              		.loc 2 876 0
+ 9567 83d1 F30F7F85 		movdqu	%xmm0, -2400(%rbp)
+ 9567      A0F6FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 9568              		.loc 2 878 0
+ 9569 83d9 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 9569      00000000 
+ 9570 83e1 F30F6F8D 		movdqu	-2400(%rbp), %xmm1
+ 9570      A0F6FFFF 
+ 9571 83e9 F30F7F8D 		movdqu	%xmm1, -2032(%rbp)
+ 9571      10F8FFFF 
+ 9572 83f1 F30F7F85 		movdqu	%xmm0, -2048(%rbp)
+ 9572      00F8FFFF 
+ 9573              	.LBB2390:
+ 9574              	.LBB2391:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 9575              		.loc 2 206 0
+ 9576 83f9 F30F6F85 		movdqu	-2048(%rbp), %xmm0
+ 9576      00F8FFFF 
+ 9577 8401 F30F6F8D 		movdqu	-2032(%rbp), %xmm1
+ 9577      10F8FFFF 
+ 9578 8409 660FDBC1 		pand	%xmm1, %xmm0
+ 9579              	.LBE2391:
+ 9580              	.LBE2390:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 9581              		.loc 2 878 0
+ 9582 840d F30F7F85 		movdqu	%xmm0, -2400(%rbp)
+ 9582      A0F6FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 9583              		.loc 2 866 0
+ 9584 8415 83857CF6 		addl	$1, -2436(%rbp)
+ 9584      FFFF01
+ 9585              	.L132:
+ 9586 841c 83BD7CF6 		cmpl	$15, -2436(%rbp)
+ 9586      FFFF0F
+ 9587 8423 0F8635FE 		jbe	.L133
+ 9587      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 9588              		.loc 2 882 0
+ 9589 8429 F30F6F85 		movdqu	-2432(%rbp), %xmm0
+ 9589      80F6FFFF 
+ 9590              	.LBE2369:
+ 9591              	.LBE2368:
+ 9592              	.LBE2367:
+ 9593              	.LBE2366:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 9594              		.loc 2 1682 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 305
+
+
+ 9595 8431 660F7F85 		movdqa	%xmm0, -8656(%rbp)
+ 9595      30DEFFFF 
+ 9596              	.LBB2392:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 9597              		.loc 2 1683 0
+ 9598 8439 660F6F85 		movdqa	-8656(%rbp), %xmm0
+ 9598      30DEFFFF 
+ 9599 8441 F30F7F85 		movdqu	%xmm0, -8256(%rbp)
+ 9599      C0DFFFFF 
+ 9600 8449 E8000000 		call	KDbgWriterGet at PLT
+ 9600      00
+ 9601 844e 4885C0   		testq	%rax, %rax
+ 9602 8451 7479     		je	.L135
+ 9603 8453 BF010000 		movl	$1, %edi
+ 9603      00
+ 9604 8458 E8000000 		call	KDbgCondToFlag at PLT
+ 9604      00
+ 9605 845d 4889C6   		movq	%rax, %rsi
+ 9606 8460 BF100000 		movl	$16, %edi
+ 9606      00
+ 9607 8465 E8000000 		call	KDbgTestModConds at PLT
+ 9607      00
+ 9608 846a 84C0     		testb	%al, %al
+ 9609 846c 745E     		je	.L135
+ 9610 846e 8B85CCDF 		movl	-8244(%rbp), %eax
+ 9610      FFFF
+ 9611 8474 89C7     		movl	%eax, %edi
+ 9612 8476 E8857BFF 		call	bswap_32
+ 9612      FF
+ 9613 847b 4189C5   		movl	%eax, %r13d
+ 9614 847e 8B85C8DF 		movl	-8248(%rbp), %eax
+ 9614      FFFF
+ 9615 8484 89C7     		movl	%eax, %edi
+ 9616 8486 E8757BFF 		call	bswap_32
+ 9616      FF
+ 9617 848b 4189C4   		movl	%eax, %r12d
+ 9618 848e 8B85C4DF 		movl	-8252(%rbp), %eax
+ 9618      FFFF
+ 9619 8494 89C7     		movl	%eax, %edi
+ 9620 8496 E8657BFF 		call	bswap_32
+ 9620      FF
+ 9621 849b 89C3     		movl	%eax, %ebx
+ 9622 849d 8B85C0DF 		movl	-8256(%rbp), %eax
+ 9622      FFFF
+ 9623 84a3 89C7     		movl	%eax, %edi
+ 9624 84a5 E8567BFF 		call	bswap_32
+ 9624      FF
+ 9625 84aa 4589E9   		movl	%r13d, %r9d
+ 9626 84ad 4589E0   		movl	%r12d, %r8d
+ 9627 84b0 89D9     		movl	%ebx, %ecx
+ 9628 84b2 89C2     		movl	%eax, %edx
+ 9629 84b4 488D3500 		leaq	.LC0(%rip), %rsi
+ 9629      000000
+ 9630 84bb 488D3D00 		leaq	.LC1(%rip), %rdi
+ 9630      000000
+ 9631 84c2 B8000000 		movl	$0, %eax
+ 9631      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 306
+
+
+ 9632 84c7 E8000000 		call	KDbgMsg at PLT
+ 9632      00
+ 9633              	.L135:
+ 9634 84cc 660F6F95 		movdqa	-8656(%rbp), %xmm2
+ 9634      30DEFFFF 
+ 9635 84d4 F30F7F95 		movdqu	%xmm2, -2016(%rbp)
+ 9635      20F8FFFF 
+ 9636              	.LBE2392:
+ 9637              	.LBB2393:
+ 9638              	.LBB2394:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 9639              		.loc 2 667 0
+ 9640 84dc 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 9640      00000000 
+ 9641 84e4 F30F6F8D 		movdqu	-2016(%rbp), %xmm1
+ 9641      20F8FFFF 
+ 9642 84ec F30F7F8D 		movdqu	%xmm1, -1984(%rbp)
+ 9642      40F8FFFF 
+ 9643 84f4 F30F7F85 		movdqu	%xmm0, -2000(%rbp)
+ 9643      30F8FFFF 
+ 9644 84fc F30F6F85 		movdqu	-1984(%rbp), %xmm0
+ 9644      40F8FFFF 
+ 9645 8504 F30F7F85 		movdqu	%xmm0, -1952(%rbp)
+ 9645      60F8FFFF 
+ 9646 850c F30F6F85 		movdqu	-2000(%rbp), %xmm0
+ 9646      30F8FFFF 
+ 9647 8514 F30F7F85 		movdqu	%xmm0, -1968(%rbp)
+ 9647      50F8FFFF 
+ 9648              	.LBB2395:
+ 9649              	.LBB2396:
+ 9650              	.LBB2397:
+ 9651              	.LBB2398:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9652              		.loc 3 529 0
+ 9653 851c F30F6F8D 		movdqu	-1968(%rbp), %xmm1
+ 9653      50F8FFFF 
+ 9654 8524 F30F6F85 		movdqu	-1952(%rbp), %xmm0
+ 9654      60F8FFFF 
+ 9655 852c 660F3800 		pshufb	%xmm1, %xmm0
+ 9655      C1
+ 9656              	.LBE2398:
+ 9657              	.LBE2397:
+ 9658              	.LBE2396:
+ 9659              	.LBE2395:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 9660              		.loc 2 667 0
+ 9661 8531 F30F7F85 		movdqu	%xmm0, -2016(%rbp)
+ 9661      20F8FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 9662              		.loc 2 668 0
+ 9663 8539 F30F6F85 		movdqu	-2016(%rbp), %xmm0
+ 9663      20F8FFFF 
+ 9664              	.LBE2394:
+ 9665              	.LBE2393:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 9666              		.loc 2 1684 0
+ 9667 8541 660F7F85 		movdqa	%xmm0, -8656(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 307
+
+
+ 9667      30DEFFFF 
+ 9668              	.LBB2399:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 9669              		.loc 2 1685 0
+ 9670 8549 660F6F85 		movdqa	-8656(%rbp), %xmm0
+ 9670      30DEFFFF 
+ 9671 8551 F30F7F85 		movdqu	%xmm0, -8272(%rbp)
+ 9671      B0DFFFFF 
+ 9672 8559 E8000000 		call	KDbgWriterGet at PLT
+ 9672      00
+ 9673 855e 4885C0   		testq	%rax, %rax
+ 9674 8561 7479     		je	.L137
+ 9675 8563 BF010000 		movl	$1, %edi
+ 9675      00
+ 9676 8568 E8000000 		call	KDbgCondToFlag at PLT
+ 9676      00
+ 9677 856d 4889C6   		movq	%rax, %rsi
+ 9678 8570 BF100000 		movl	$16, %edi
+ 9678      00
+ 9679 8575 E8000000 		call	KDbgTestModConds at PLT
+ 9679      00
+ 9680 857a 84C0     		testb	%al, %al
+ 9681 857c 745E     		je	.L137
+ 9682 857e 8B85BCDF 		movl	-8260(%rbp), %eax
+ 9682      FFFF
+ 9683 8584 89C7     		movl	%eax, %edi
+ 9684 8586 E8757AFF 		call	bswap_32
+ 9684      FF
+ 9685 858b 4189C5   		movl	%eax, %r13d
+ 9686 858e 8B85B8DF 		movl	-8264(%rbp), %eax
+ 9686      FFFF
+ 9687 8594 89C7     		movl	%eax, %edi
+ 9688 8596 E8657AFF 		call	bswap_32
+ 9688      FF
+ 9689 859b 4189C4   		movl	%eax, %r12d
+ 9690 859e 8B85B4DF 		movl	-8268(%rbp), %eax
+ 9690      FFFF
+ 9691 85a4 89C7     		movl	%eax, %edi
+ 9692 85a6 E8557AFF 		call	bswap_32
+ 9692      FF
+ 9693 85ab 89C3     		movl	%eax, %ebx
+ 9694 85ad 8B85B0DF 		movl	-8272(%rbp), %eax
+ 9694      FFFF
+ 9695 85b3 89C7     		movl	%eax, %edi
+ 9696 85b5 E8467AFF 		call	bswap_32
+ 9696      FF
+ 9697 85ba 4589E9   		movl	%r13d, %r9d
+ 9698 85bd 4589E0   		movl	%r12d, %r8d
+ 9699 85c0 89D9     		movl	%ebx, %ecx
+ 9700 85c2 89C2     		movl	%eax, %edx
+ 9701 85c4 488D3500 		leaq	.LC2(%rip), %rsi
+ 9701      000000
+ 9702 85cb 488D3D00 		leaq	.LC1(%rip), %rdi
+ 9702      000000
+ 9703 85d2 B8000000 		movl	$0, %eax
+ 9703      00
+ 9704 85d7 E8000000 		call	KDbgMsg at PLT
+
GAS LISTING /tmp/ccjbMjHD.s 			page 308
+
+
+ 9704      00
+ 9705              	.L137:
+ 9706 85dc 660F6F95 		movdqa	-8656(%rbp), %xmm2
+ 9706      30DEFFFF 
+ 9707 85e4 F30F7F95 		movdqu	%xmm2, -1920(%rbp)
+ 9707      80F8FFFF 
+ 9708 85ec 660F6F85 		movdqa	-8640(%rbp), %xmm0
+ 9708      40DEFFFF 
+ 9709 85f4 F30F7F85 		movdqu	%xmm0, -1936(%rbp)
+ 9709      70F8FFFF 
+ 9710              	.LBE2399:
+ 9711              	.LBB2400:
+ 9712              	.LBB2401:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 9713              		.loc 2 178 0
+ 9714 85fc F30F6F85 		movdqu	-1936(%rbp), %xmm0
+ 9714      70F8FFFF 
+ 9715 8604 F30F6F8D 		movdqu	-1920(%rbp), %xmm1
+ 9715      80F8FFFF 
+ 9716 860c 660FEFC1 		pxor	%xmm1, %xmm0
+ 9717              	.LBE2401:
+ 9718              	.LBE2400:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 9719              		.loc 2 1686 0
+ 9720 8610 660F7F85 		movdqa	%xmm0, -8656(%rbp)
+ 9720      30DEFFFF 
+ 9721              	.LBB2402:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 9722              		.loc 2 1687 0
+ 9723 8618 660F6F95 		movdqa	-8656(%rbp), %xmm2
+ 9723      30DEFFFF 
+ 9724 8620 F30F7F95 		movdqu	%xmm2, -8288(%rbp)
+ 9724      A0DFFFFF 
+ 9725 8628 E8000000 		call	KDbgWriterGet at PLT
+ 9725      00
+ 9726 862d 4885C0   		testq	%rax, %rax
+ 9727 8630 7479     		je	.L139
+ 9728 8632 BF010000 		movl	$1, %edi
+ 9728      00
+ 9729 8637 E8000000 		call	KDbgCondToFlag at PLT
+ 9729      00
+ 9730 863c 4889C6   		movq	%rax, %rsi
+ 9731 863f BF100000 		movl	$16, %edi
+ 9731      00
+ 9732 8644 E8000000 		call	KDbgTestModConds at PLT
+ 9732      00
+ 9733 8649 84C0     		testb	%al, %al
+ 9734 864b 745E     		je	.L139
+ 9735 864d 8B85ACDF 		movl	-8276(%rbp), %eax
+ 9735      FFFF
+ 9736 8653 89C7     		movl	%eax, %edi
+ 9737 8655 E8A679FF 		call	bswap_32
+ 9737      FF
+ 9738 865a 4189C5   		movl	%eax, %r13d
+ 9739 865d 8B85A8DF 		movl	-8280(%rbp), %eax
+ 9739      FFFF
+ 9740 8663 89C7     		movl	%eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 309
+
+
+ 9741 8665 E89679FF 		call	bswap_32
+ 9741      FF
+ 9742 866a 4189C4   		movl	%eax, %r12d
+ 9743 866d 8B85A4DF 		movl	-8284(%rbp), %eax
+ 9743      FFFF
+ 9744 8673 89C7     		movl	%eax, %edi
+ 9745 8675 E88679FF 		call	bswap_32
+ 9745      FF
+ 9746 867a 89C3     		movl	%eax, %ebx
+ 9747 867c 8B85A0DF 		movl	-8288(%rbp), %eax
+ 9747      FFFF
+ 9748 8682 89C7     		movl	%eax, %edi
+ 9749 8684 E87779FF 		call	bswap_32
+ 9749      FF
+ 9750 8689 4589E9   		movl	%r13d, %r9d
+ 9751 868c 4589E0   		movl	%r12d, %r8d
+ 9752 868f 89D9     		movl	%ebx, %ecx
+ 9753 8691 89C2     		movl	%eax, %edx
+ 9754 8693 488D3500 		leaq	.LC3(%rip), %rsi
+ 9754      000000
+ 9755 869a 488D3D00 		leaq	.LC1(%rip), %rdi
+ 9755      000000
+ 9756 86a1 B8000000 		movl	$0, %eax
+ 9756      00
+ 9757 86a6 E8000000 		call	KDbgMsg at PLT
+ 9757      00
+ 9758              	.L139:
+ 9759 86ab 660F6F85 		movdqa	-8656(%rbp), %xmm0
+ 9759      30DEFFFF 
+ 9760 86b3 F30F7F85 		movdqu	%xmm0, -1904(%rbp)
+ 9760      90F8FFFF 
+ 9761 86bb F30F6F85 		movdqu	-1904(%rbp), %xmm0
+ 9761      90F8FFFF 
+ 9762 86c3 F30F7F85 		movdqu	%xmm0, -1872(%rbp)
+ 9762      B0F8FFFF 
+ 9763              	.LBE2402:
+ 9764              	.LBB2403:
+ 9765              	.LBB2404:
+ 9766              	.LBB2405:
+ 9767              	.LBB2406:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 9768              		.loc 3 450 0
+ 9769 86cb F30F6F85 		movdqu	-1872(%rbp), %xmm0
+ 9769      B0F8FFFF 
+ 9770 86d3 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 9770      FF
+ 9771              	.LBE2406:
+ 9772              	.LBE2405:
+ 9773              	.LBE2404:
+ 9774              	.LBE2403:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 9775              		.loc 2 1688 0
+ 9776 86d8 660F7F85 		movdqa	%xmm0, -8656(%rbp)
+ 9776      30DEFFFF 
+ 9777              	.LBB2407:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 9778              		.loc 2 1689 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 310
+
+
+ 9779 86e0 660F6F95 		movdqa	-8656(%rbp), %xmm2
+ 9779      30DEFFFF 
+ 9780 86e8 F30F7F95 		movdqu	%xmm2, -8304(%rbp)
+ 9780      90DFFFFF 
+ 9781 86f0 E8000000 		call	KDbgWriterGet at PLT
+ 9781      00
+ 9782 86f5 4885C0   		testq	%rax, %rax
+ 9783 86f8 7479     		je	.L141
+ 9784 86fa BF010000 		movl	$1, %edi
+ 9784      00
+ 9785 86ff E8000000 		call	KDbgCondToFlag at PLT
+ 9785      00
+ 9786 8704 4889C6   		movq	%rax, %rsi
+ 9787 8707 BF100000 		movl	$16, %edi
+ 9787      00
+ 9788 870c E8000000 		call	KDbgTestModConds at PLT
+ 9788      00
+ 9789 8711 84C0     		testb	%al, %al
+ 9790 8713 745E     		je	.L141
+ 9791 8715 8B859CDF 		movl	-8292(%rbp), %eax
+ 9791      FFFF
+ 9792 871b 89C7     		movl	%eax, %edi
+ 9793 871d E8DE78FF 		call	bswap_32
+ 9793      FF
+ 9794 8722 4189C5   		movl	%eax, %r13d
+ 9795 8725 8B8598DF 		movl	-8296(%rbp), %eax
+ 9795      FFFF
+ 9796 872b 89C7     		movl	%eax, %edi
+ 9797 872d E8CE78FF 		call	bswap_32
+ 9797      FF
+ 9798 8732 4189C4   		movl	%eax, %r12d
+ 9799 8735 8B8594DF 		movl	-8300(%rbp), %eax
+ 9799      FFFF
+ 9800 873b 89C7     		movl	%eax, %edi
+ 9801 873d E8BE78FF 		call	bswap_32
+ 9801      FF
+ 9802 8742 89C3     		movl	%eax, %ebx
+ 9803 8744 8B8590DF 		movl	-8304(%rbp), %eax
+ 9803      FFFF
+ 9804 874a 89C7     		movl	%eax, %edi
+ 9805 874c E8AF78FF 		call	bswap_32
+ 9805      FF
+ 9806 8751 4589E9   		movl	%r13d, %r9d
+ 9807 8754 4589E0   		movl	%r12d, %r8d
+ 9808 8757 89D9     		movl	%ebx, %ecx
+ 9809 8759 89C2     		movl	%eax, %edx
+ 9810 875b 488D3500 		leaq	.LC4(%rip), %rsi
+ 9810      000000
+ 9811 8762 488D3D00 		leaq	.LC1(%rip), %rdi
+ 9811      000000
+ 9812 8769 B8000000 		movl	$0, %eax
+ 9812      00
+ 9813 876e E8000000 		call	KDbgMsg at PLT
+ 9813      00
+ 9814              	.L141:
+ 9815              	.LBE2407:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+
GAS LISTING /tmp/ccjbMjHD.s 			page 311
+
+
+ 9816              		.loc 2 1690 0
+ 9817 8773 660F6F85 		movdqa	-8656(%rbp), %xmm0
+ 9817      30DEFFFF 
+ 9818              	.LBE2361:
+ 9819              	.LBE2360:
+ 9820              		.loc 2 1858 0
+ 9821 877b 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 9821      00DDFFFF 
+1859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v2,0x20);                             /* F(k35): F(k35): F(k35) : F(k35)       */
+1860:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0 ^= k;                                       /* k36   : k37   : k38    : k39          */
+ 9822              		.loc 2 1860 0
+ 9823 8783 660F6F85 		movdqa	-9040(%rbp), %xmm0
+ 9823      B0DCFFFF 
+ 9824 878b 660FEF85 		pxor	-8960(%rbp), %xmm0
+ 9824      00DDFFFF 
+ 9825 8793 660F7F85 		movdqa	%xmm0, -9040(%rbp)
+ 9825      B0DCFFFF 
+ 9826 879b 660F6F95 		movdqa	-9040(%rbp), %xmm2
+ 9826      B0DCFFFF 
+ 9827 87a3 F30F7F95 		movdqu	%xmm2, -1856(%rbp)
+ 9827      C0F8FFFF 
+ 9828 87ab F30F6F85 		movdqu	-1856(%rbp), %xmm0
+ 9828      C0F8FFFF 
+ 9829 87b3 F30F7F85 		movdqu	%xmm0, -1824(%rbp)
+ 9829      E0F8FFFF 
+ 9830              	.LBB2408:
+ 9831              	.LBB2409:
+ 9832              	.LBB2410:
+ 9833              	.LBB2411:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 9834              		.loc 3 450 0
+ 9835 87bb F30F6F85 		movdqu	-1824(%rbp), %xmm0
+ 9835      E0F8FFFF 
+ 9836 87c3 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 9836      FF
+ 9837              	.LBE2411:
+ 9838              	.LBE2410:
+ 9839              	.LBE2409:
+ 9840              	.LBE2408:
+1861:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (v0);       /* k39   : k39   : k39    : k39          */
+ 9841              		.loc 2 1861 0
+ 9842 87c8 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 9842      00DDFFFF 
+1862:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1 ^= k;                                       /* k40   : k41   : x      : x            */
+ 9843              		.loc 2 1862 0
+ 9844 87d0 660F6F85 		movdqa	-9024(%rbp), %xmm0
+ 9844      C0DCFFFF 
+ 9845 87d8 660FEF85 		pxor	-8960(%rbp), %xmm0
+ 9845      00DDFFFF 
+ 9846 87e0 660F7F85 		movdqa	%xmm0, -9024(%rbp)
+ 9846      C0DCFFFF 
+1863:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1864:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[9] = v0; /* K36:K37:K38:K39 */
+ 9847              		.loc 2 1864 0
+ 9848 87e8 488B85A8 		movq	-8536(%rbp), %rax
+ 9848      DEFFFF
+ 9849 87ef 48059000 		addq	$144, %rax
+
GAS LISTING /tmp/ccjbMjHD.s 			page 312
+
+
+ 9849      0000
+ 9850 87f5 660F6F95 		movdqa	-9040(%rbp), %xmm2
+ 9850      B0DCFFFF 
+ 9851 87fd 660F7F10 		movdqa	%xmm2, (%rax)
+1865:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 1 4-15 = 40-55 but we only need through 51 so we change from pattern 2 to pattern 3 */
+1867:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* start the working pattern with 6 ready words in v0:v1 */
+1868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1869:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn1)
+ 9852              		.loc 2 1869 0
+ 9853 8801 660F6F85 		movdqa	-9024(%rbp), %xmm0
+ 9853      C0DCFFFF 
+ 9854 8809 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 9854      00DDFFFF 
+ 9855 8811 660F6F95 		movdqa	-8960(%rbp), %xmm2
+ 9855      00DDFFFF 
+ 9856 8819 F30F7F95 		movdqu	%xmm2, -1792(%rbp)
+ 9856      00F9FFFF 
+ 9857              	.LBB2412:
+ 9858              	.LBB2413:
+1629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rconw = (AESWord)(AESByte)rcon;
+ 9859              		.loc 2 1629 0
+ 9860 8821 B8400000 		movl	$64, %eax
+ 9860      00
+ 9861 8826 0FB6C0   		movzbl	%al, %eax
+ 9862 8829 898520F9 		movl	%eax, -1760(%rbp)
+ 9862      FFFF
+1630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 9863              		.loc 2 1630 0
+ 9864 882f F30F6F85 		movdqu	-1792(%rbp), %xmm0
+ 9864      00F9FFFF 
+ 9865 8837 F30F7F85 		movdqu	%xmm0, -8224(%rbp)
+ 9865      E0DFFFFF 
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[1]);
+ 9866              		.loc 2 1631 0
+ 9867 883f 8B85E4DF 		movl	-8220(%rbp), %eax
+ 9867      FFFF
+ 9868 8845 898524F9 		movl	%eax, -1756(%rbp)
+ 9868      FFFF
+ 9869              	.LBB2414:
+ 9870              	.LBB2415:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 9871              		.loc 2 740 0
+ 9872 884b 8B8524F9 		movl	-1756(%rbp), %eax
+ 9872      FFFF
+ 9873 8851 8985D0DF 		movl	%eax, -8240(%rbp)
+ 9873      FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 9874              		.loc 2 741 0
+ 9875 8857 C78528F9 		movl	$0, -1752(%rbp)
+ 9875      FFFF0000 
+ 9875      0000
+ 9876 8861 EB36     		jmp	.L142
+ 9877              	.L143:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 9878              		.loc 2 742 0
+ 9879 8863 8B8D28F9 		movl	-1752(%rbp), %ecx
+
GAS LISTING /tmp/ccjbMjHD.s 			page 313
+
+
+ 9879      FFFF
+ 9880 8869 8B8528F9 		movl	-1752(%rbp), %eax
+ 9880      FFFF
+ 9881 886f 89C0     		mov	%eax, %eax
+ 9882 8871 0FB68405 		movzbl	-8240(%rbp,%rax), %eax
+ 9882      D0DFFFFF 
+ 9883 8879 0FB6C0   		movzbl	%al, %eax
+ 9884 887c 89C2     		mov	%eax, %edx
+ 9885 887e 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBox(%rip), %rax
+ 9885      000000
+ 9886 8885 0FB61402 		movzbl	(%rdx,%rax), %edx
+ 9887 8889 89C8     		mov	%ecx, %eax
+ 9888 888b 889405D0 		movb	%dl, -8240(%rbp,%rax)
+ 9888      DFFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 9889              		.loc 2 741 0
+ 9890 8892 838528F9 		addl	$1, -1752(%rbp)
+ 9890      FFFF01
+ 9891              	.L142:
+ 9892 8899 83BD28F9 		cmpl	$3, -1752(%rbp)
+ 9892      FFFF03
+ 9893 88a0 76C1     		jbe	.L143
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 9894              		.loc 2 743 0
+ 9895 88a2 8B85D0DF 		movl	-8240(%rbp), %eax
+ 9895      FFFF
+ 9896              	.LBE2415:
+ 9897              	.LBE2414:
+1631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[1]);
+ 9898              		.loc 2 1631 0
+ 9899 88a8 89851CF9 		movl	%eax, -1764(%rbp)
+ 9899      FFFF
+ 9900 88ae 8B851CF9 		movl	-1764(%rbp), %eax
+ 9900      FFFF
+ 9901 88b4 89852CF9 		movl	%eax, -1748(%rbp)
+ 9901      FFFF
+ 9902              	.LBB2416:
+ 9903              	.LBB2417:
+1196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (w >> 8) | (w << 24);
+ 9904              		.loc 2 1196 0
+ 9905 88ba 8B852CF9 		movl	-1748(%rbp), %eax
+ 9905      FFFF
+ 9906 88c0 C1C808   		rorl	$8, %eax
+ 9907              	.LBE2417:
+ 9908              	.LBE2416:
+1632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(RotWord)(temp);
+ 9909              		.loc 2 1632 0
+ 9910 88c3 89851CF9 		movl	%eax, -1764(%rbp)
+ 9910      FFFF
+1633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp ^= rconw;
+ 9911              		.loc 2 1633 0
+ 9912 88c9 8B8520F9 		movl	-1760(%rbp), %eax
+ 9912      FFFF
+ 9913 88cf 31851CF9 		xorl	%eax, -1764(%rbp)
+ 9913      FFFF
+1635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 9914              		.loc 2 1635 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 314
+
+
+ 9915 88d5 8B851CF9 		movl	-1764(%rbp), %eax
+ 9915      FFFF
+ 9916 88db 8985ECDF 		movl	%eax, -8212(%rbp)
+ 9916      FFFF
+ 9917 88e1 8B85ECDF 		movl	-8212(%rbp), %eax
+ 9917      FFFF
+ 9918 88e7 8985E8DF 		movl	%eax, -8216(%rbp)
+ 9918      FFFF
+ 9919 88ed 8B85E8DF 		movl	-8216(%rbp), %eax
+ 9919      FFFF
+ 9920 88f3 8985E4DF 		movl	%eax, -8220(%rbp)
+ 9920      FFFF
+ 9921 88f9 8B85E4DF 		movl	-8220(%rbp), %eax
+ 9921      FFFF
+ 9922 88ff 8985E0DF 		movl	%eax, -8224(%rbp)
+ 9922      FFFF
+1636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 9923              		.loc 2 1636 0
+ 9924 8905 F30F6F85 		movdqu	-8224(%rbp), %xmm0
+ 9924      E0DFFFFF 
+ 9925              	.LBE2413:
+ 9926              	.LBE2412:
+ 9927              		.loc 2 1869 0
+ 9928 890d 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 9928      00DDFFFF 
+ 9929 8915 660F6F85 		movdqa	-9040(%rbp), %xmm0
+ 9929      B0DCFFFF 
+ 9930 891d F30F7F85 		movdqu	%xmm0, -1744(%rbp)
+ 9930      30F9FFFF 
+ 9931              	.LBB2418:
+ 9932              	.LBB2419:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 9933              		.loc 2 1565 0
+ 9934 8925 F30F6F95 		movdqu	-1744(%rbp), %xmm2
+ 9934      30F9FFFF 
+ 9935 892d 660F7F95 		movdqa	%xmm2, -8624(%rbp)
+ 9935      50DEFFFF 
+ 9936 8935 660F6F85 		movdqa	-8624(%rbp), %xmm0
+ 9936      50DEFFFF 
+ 9937 893d F30F7F85 		movdqu	%xmm0, -1728(%rbp)
+ 9937      40F9FFFF 
+ 9938              	.LBB2420:
+ 9939              	.LBB2421:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 9940              		.loc 2 1278 0
+ 9941 8945 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 9941      00000000 
+ 9942 894d F30F6F8D 		movdqu	-1728(%rbp), %xmm1
+ 9942      40F9FFFF 
+ 9943 8955 F30F7F8D 		movdqu	%xmm1, -1696(%rbp)
+ 9943      60F9FFFF 
+ 9944 895d F30F7F85 		movdqu	%xmm0, -1712(%rbp)
+ 9944      50F9FFFF 
+ 9945 8965 F30F6F85 		movdqu	-1696(%rbp), %xmm0
+ 9945      60F9FFFF 
+ 9946 896d F30F7F85 		movdqu	%xmm0, -1664(%rbp)
+ 9946      80F9FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 315
+
+
+ 9947 8975 F30F6F85 		movdqu	-1712(%rbp), %xmm0
+ 9947      50F9FFFF 
+ 9948 897d F30F7F85 		movdqu	%xmm0, -1680(%rbp)
+ 9948      70F9FFFF 
+ 9949              	.LBB2422:
+ 9950              	.LBB2423:
+ 9951              	.LBB2424:
+ 9952              	.LBB2425:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9953              		.loc 3 529 0
+ 9954 8985 F30F6F8D 		movdqu	-1680(%rbp), %xmm1
+ 9954      70F9FFFF 
+ 9955 898d F30F6F85 		movdqu	-1664(%rbp), %xmm0
+ 9955      80F9FFFF 
+ 9956 8995 660F3800 		pshufb	%xmm1, %xmm0
+ 9956      C1
+ 9957              	.LBE2425:
+ 9958              	.LBE2424:
+ 9959              	.LBE2423:
+ 9960              	.LBE2422:
+ 9961              	.LBE2421:
+ 9962              	.LBE2420:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9963              		.loc 2 1567 0
+ 9964 899a 660F7F85 		movdqa	%xmm0, -8624(%rbp)
+ 9964      50DEFFFF 
+ 9965 89a2 660F6F85 		movdqa	-8624(%rbp), %xmm0
+ 9965      50DEFFFF 
+ 9966 89aa 660FEF85 		pxor	-1744(%rbp), %xmm0
+ 9966      30F9FFFF 
+ 9967 89b2 F30F7F85 		movdqu	%xmm0, -1744(%rbp)
+ 9967      30F9FFFF 
+ 9968 89ba 660F6F95 		movdqa	-8624(%rbp), %xmm2
+ 9968      50DEFFFF 
+ 9969 89c2 F30F7F95 		movdqu	%xmm2, -1648(%rbp)
+ 9969      90F9FFFF 
+ 9970              	.LBB2426:
+ 9971              	.LBB2427:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 9972              		.loc 2 1278 0
+ 9973 89ca 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 9973      00000000 
+ 9974 89d2 F30F6F8D 		movdqu	-1648(%rbp), %xmm1
+ 9974      90F9FFFF 
+ 9975 89da F30F7F8D 		movdqu	%xmm1, -1616(%rbp)
+ 9975      B0F9FFFF 
+ 9976 89e2 F30F7F85 		movdqu	%xmm0, -1632(%rbp)
+ 9976      A0F9FFFF 
+ 9977 89ea F30F6F85 		movdqu	-1616(%rbp), %xmm0
+ 9977      B0F9FFFF 
+ 9978 89f2 F30F7F85 		movdqu	%xmm0, -1584(%rbp)
+ 9978      D0F9FFFF 
+ 9979 89fa F30F6F85 		movdqu	-1632(%rbp), %xmm0
+ 9979      A0F9FFFF 
+ 9980 8a02 F30F7F85 		movdqu	%xmm0, -1600(%rbp)
+ 9980      C0F9FFFF 
+ 9981              	.LBB2428:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 316
+
+
+ 9982              	.LBB2429:
+ 9983              	.LBB2430:
+ 9984              	.LBB2431:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 9985              		.loc 3 529 0
+ 9986 8a0a F30F6F8D 		movdqu	-1600(%rbp), %xmm1
+ 9986      C0F9FFFF 
+ 9987 8a12 F30F6F85 		movdqu	-1584(%rbp), %xmm0
+ 9987      D0F9FFFF 
+ 9988 8a1a 660F3800 		pshufb	%xmm1, %xmm0
+ 9988      C1
+ 9989              	.LBE2431:
+ 9990              	.LBE2430:
+ 9991              	.LBE2429:
+ 9992              	.LBE2428:
+ 9993              	.LBE2427:
+ 9994              	.LBE2426:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 9995              		.loc 2 1568 0
+ 9996 8a1f 660F7F85 		movdqa	%xmm0, -8624(%rbp)
+ 9996      50DEFFFF 
+ 9997 8a27 660F6F85 		movdqa	-8624(%rbp), %xmm0
+ 9997      50DEFFFF 
+ 9998 8a2f 660FEF85 		pxor	-1744(%rbp), %xmm0
+ 9998      30F9FFFF 
+ 9999 8a37 F30F7F85 		movdqu	%xmm0, -1744(%rbp)
+ 9999      30F9FFFF 
+ 10000 8a3f 660F6F85 		movdqa	-8624(%rbp), %xmm0
+ 10000      50DEFFFF 
+ 10001 8a47 F30F7F85 		movdqu	%xmm0, -1568(%rbp)
+ 10001      E0F9FFFF 
+ 10002              	.LBB2432:
+ 10003              	.LBB2433:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 10004              		.loc 2 1278 0
+ 10005 8a4f 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 10005      00000000 
+ 10006 8a57 F30F6F8D 		movdqu	-1568(%rbp), %xmm1
+ 10006      E0F9FFFF 
+ 10007 8a5f F30F7F8D 		movdqu	%xmm1, -1536(%rbp)
+ 10007      00FAFFFF 
+ 10008 8a67 F30F7F85 		movdqu	%xmm0, -1552(%rbp)
+ 10008      F0F9FFFF 
+ 10009 8a6f F30F6F85 		movdqu	-1536(%rbp), %xmm0
+ 10009      00FAFFFF 
+ 10010 8a77 F30F7F85 		movdqu	%xmm0, -1504(%rbp)
+ 10010      20FAFFFF 
+ 10011 8a7f F30F6F85 		movdqu	-1552(%rbp), %xmm0
+ 10011      F0F9FFFF 
+ 10012 8a87 F30F7F85 		movdqu	%xmm0, -1520(%rbp)
+ 10012      10FAFFFF 
+ 10013              	.LBB2434:
+ 10014              	.LBB2435:
+ 10015              	.LBB2436:
+ 10016              	.LBB2437:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10017              		.loc 3 529 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 317
+
+
+ 10018 8a8f F30F6F8D 		movdqu	-1520(%rbp), %xmm1
+ 10018      10FAFFFF 
+ 10019 8a97 F30F6F85 		movdqu	-1504(%rbp), %xmm0
+ 10019      20FAFFFF 
+ 10020 8a9f 660F3800 		pshufb	%xmm1, %xmm0
+ 10020      C1
+ 10021              	.LBE2437:
+ 10022              	.LBE2436:
+ 10023              	.LBE2435:
+ 10024              	.LBE2434:
+ 10025              	.LBE2433:
+ 10026              	.LBE2432:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10027              		.loc 2 1569 0
+ 10028 8aa4 660F7F85 		movdqa	%xmm0, -8624(%rbp)
+ 10028      50DEFFFF 
+ 10029 8aac 660F6F85 		movdqa	-8624(%rbp), %xmm0
+ 10029      50DEFFFF 
+ 10030 8ab4 660FEF85 		pxor	-1744(%rbp), %xmm0
+ 10030      30F9FFFF 
+ 10031 8abc F30F7F85 		movdqu	%xmm0, -1744(%rbp)
+ 10031      30F9FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 10032              		.loc 2 1571 0
+ 10033 8ac4 F30F6F85 		movdqu	-1744(%rbp), %xmm0
+ 10033      30F9FFFF 
+ 10034              	.LBE2419:
+ 10035              	.LBE2418:
+1870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         (k = v1,0x40);                             /* F(k41): F(k41): F(k41) : F(k41)       */
+1871:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3  = AESBCMEMBER(ShiftXorColumns) (v0);       /* k36   :k36^k37:k36^k37^k38:k36^k37^k38^k39 */
+ 10036              		.loc 2 1871 0
+ 10037 8acc 660F7F85 		movdqa	%xmm0, -8992(%rbp)
+ 10037      E0DCFFFF 
+ 10038 8ad4 660F6F95 		movdqa	-9024(%rbp), %xmm2
+ 10038      C0DCFFFF 
+ 10039 8adc F30F7F95 		movdqu	%xmm2, -1488(%rbp)
+ 10039      30FAFFFF 
+ 10040              	.LBB2438:
+ 10041              	.LBB2439:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 10042              		.loc 2 1565 0
+ 10043 8ae4 F30F6F85 		movdqu	-1488(%rbp), %xmm0
+ 10043      30FAFFFF 
+ 10044 8aec 660F7F85 		movdqa	%xmm0, -8608(%rbp)
+ 10044      60DEFFFF 
+ 10045 8af4 660F6F95 		movdqa	-8608(%rbp), %xmm2
+ 10045      60DEFFFF 
+ 10046 8afc F30F7F95 		movdqu	%xmm2, -1472(%rbp)
+ 10046      40FAFFFF 
+ 10047              	.LBB2440:
+ 10048              	.LBB2441:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 10049              		.loc 2 1278 0
+ 10050 8b04 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 10050      00000000 
+ 10051 8b0c F30F6F8D 		movdqu	-1472(%rbp), %xmm1
+ 10051      40FAFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 318
+
+
+ 10052 8b14 F30F7F8D 		movdqu	%xmm1, -1440(%rbp)
+ 10052      60FAFFFF 
+ 10053 8b1c F30F7F85 		movdqu	%xmm0, -1456(%rbp)
+ 10053      50FAFFFF 
+ 10054 8b24 F30F6F85 		movdqu	-1440(%rbp), %xmm0
+ 10054      60FAFFFF 
+ 10055 8b2c F30F7F85 		movdqu	%xmm0, -1408(%rbp)
+ 10055      80FAFFFF 
+ 10056 8b34 F30F6F85 		movdqu	-1456(%rbp), %xmm0
+ 10056      50FAFFFF 
+ 10057 8b3c F30F7F85 		movdqu	%xmm0, -1424(%rbp)
+ 10057      70FAFFFF 
+ 10058              	.LBB2442:
+ 10059              	.LBB2443:
+ 10060              	.LBB2444:
+ 10061              	.LBB2445:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10062              		.loc 3 529 0
+ 10063 8b44 F30F6F8D 		movdqu	-1424(%rbp), %xmm1
+ 10063      70FAFFFF 
+ 10064 8b4c F30F6F85 		movdqu	-1408(%rbp), %xmm0
+ 10064      80FAFFFF 
+ 10065 8b54 660F3800 		pshufb	%xmm1, %xmm0
+ 10065      C1
+ 10066              	.LBE2445:
+ 10067              	.LBE2444:
+ 10068              	.LBE2443:
+ 10069              	.LBE2442:
+ 10070              	.LBE2441:
+ 10071              	.LBE2440:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10072              		.loc 2 1567 0
+ 10073 8b59 660F7F85 		movdqa	%xmm0, -8608(%rbp)
+ 10073      60DEFFFF 
+ 10074 8b61 660F6F85 		movdqa	-8608(%rbp), %xmm0
+ 10074      60DEFFFF 
+ 10075 8b69 660FEF85 		pxor	-1488(%rbp), %xmm0
+ 10075      30FAFFFF 
+ 10076 8b71 F30F7F85 		movdqu	%xmm0, -1488(%rbp)
+ 10076      30FAFFFF 
+ 10077 8b79 660F6F85 		movdqa	-8608(%rbp), %xmm0
+ 10077      60DEFFFF 
+ 10078 8b81 F30F7F85 		movdqu	%xmm0, -1392(%rbp)
+ 10078      90FAFFFF 
+ 10079              	.LBB2446:
+ 10080              	.LBB2447:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 10081              		.loc 2 1278 0
+ 10082 8b89 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 10082      00000000 
+ 10083 8b91 F30F6F8D 		movdqu	-1392(%rbp), %xmm1
+ 10083      90FAFFFF 
+ 10084 8b99 F30F7F8D 		movdqu	%xmm1, -1360(%rbp)
+ 10084      B0FAFFFF 
+ 10085 8ba1 F30F7F85 		movdqu	%xmm0, -1376(%rbp)
+ 10085      A0FAFFFF 
+ 10086 8ba9 F30F6F85 		movdqu	-1360(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 319
+
+
+ 10086      B0FAFFFF 
+ 10087 8bb1 F30F7F85 		movdqu	%xmm0, -1328(%rbp)
+ 10087      D0FAFFFF 
+ 10088 8bb9 F30F6F85 		movdqu	-1376(%rbp), %xmm0
+ 10088      A0FAFFFF 
+ 10089 8bc1 F30F7F85 		movdqu	%xmm0, -1344(%rbp)
+ 10089      C0FAFFFF 
+ 10090              	.LBB2448:
+ 10091              	.LBB2449:
+ 10092              	.LBB2450:
+ 10093              	.LBB2451:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10094              		.loc 3 529 0
+ 10095 8bc9 F30F6F8D 		movdqu	-1344(%rbp), %xmm1
+ 10095      C0FAFFFF 
+ 10096 8bd1 F30F6F85 		movdqu	-1328(%rbp), %xmm0
+ 10096      D0FAFFFF 
+ 10097 8bd9 660F3800 		pshufb	%xmm1, %xmm0
+ 10097      C1
+ 10098              	.LBE2451:
+ 10099              	.LBE2450:
+ 10100              	.LBE2449:
+ 10101              	.LBE2448:
+ 10102              	.LBE2447:
+ 10103              	.LBE2446:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10104              		.loc 2 1568 0
+ 10105 8bde 660F7F85 		movdqa	%xmm0, -8608(%rbp)
+ 10105      60DEFFFF 
+ 10106 8be6 660F6F85 		movdqa	-8608(%rbp), %xmm0
+ 10106      60DEFFFF 
+ 10107 8bee 660FEF85 		pxor	-1488(%rbp), %xmm0
+ 10107      30FAFFFF 
+ 10108 8bf6 F30F7F85 		movdqu	%xmm0, -1488(%rbp)
+ 10108      30FAFFFF 
+ 10109 8bfe 660F6F95 		movdqa	-8608(%rbp), %xmm2
+ 10109      60DEFFFF 
+ 10110 8c06 F30F7F95 		movdqu	%xmm2, -1312(%rbp)
+ 10110      E0FAFFFF 
+ 10111              	.LBB2452:
+ 10112              	.LBB2453:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 10113              		.loc 2 1278 0
+ 10114 8c0e 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 10114      00000000 
+ 10115 8c16 F30F6F8D 		movdqu	-1312(%rbp), %xmm1
+ 10115      E0FAFFFF 
+ 10116 8c1e F30F7F8D 		movdqu	%xmm1, -1280(%rbp)
+ 10116      00FBFFFF 
+ 10117 8c26 F30F7F85 		movdqu	%xmm0, -1296(%rbp)
+ 10117      F0FAFFFF 
+ 10118 8c2e F30F6F85 		movdqu	-1280(%rbp), %xmm0
+ 10118      00FBFFFF 
+ 10119 8c36 F30F7F85 		movdqu	%xmm0, -1248(%rbp)
+ 10119      20FBFFFF 
+ 10120 8c3e F30F6F85 		movdqu	-1296(%rbp), %xmm0
+ 10120      F0FAFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 320
+
+
+ 10121 8c46 F30F7F85 		movdqu	%xmm0, -1264(%rbp)
+ 10121      10FBFFFF 
+ 10122              	.LBB2454:
+ 10123              	.LBB2455:
+ 10124              	.LBB2456:
+ 10125              	.LBB2457:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10126              		.loc 3 529 0
+ 10127 8c4e F30F6F8D 		movdqu	-1264(%rbp), %xmm1
+ 10127      10FBFFFF 
+ 10128 8c56 F30F6F85 		movdqu	-1248(%rbp), %xmm0
+ 10128      20FBFFFF 
+ 10129 8c5e 660F3800 		pshufb	%xmm1, %xmm0
+ 10129      C1
+ 10130              	.LBE2457:
+ 10131              	.LBE2456:
+ 10132              	.LBE2455:
+ 10133              	.LBE2454:
+ 10134              	.LBE2453:
+ 10135              	.LBE2452:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10136              		.loc 2 1569 0
+ 10137 8c63 660F7F85 		movdqa	%xmm0, -8608(%rbp)
+ 10137      60DEFFFF 
+ 10138 8c6b 660F6F85 		movdqa	-8608(%rbp), %xmm0
+ 10138      60DEFFFF 
+ 10139 8c73 660FEF85 		pxor	-1488(%rbp), %xmm0
+ 10139      30FAFFFF 
+ 10140 8c7b F30F7F85 		movdqu	%xmm0, -1488(%rbp)
+ 10140      30FAFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 10141              		.loc 2 1571 0
+ 10142 8c83 F30F6F85 		movdqu	-1488(%rbp), %xmm0
+ 10142      30FAFFFF 
+ 10143              	.LBE2439:
+ 10144              	.LBE2438:
+1872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4  = AESBCMEMBER(ShiftXorColumns) (v1);       /* k40   :k40^k41: x   5  : x            */
+ 10145              		.loc 2 1872 0
+ 10146 8c8b 660F7F85 		movdqa	%xmm0, -8976(%rbp)
+ 10146      F0DCFFFF 
+1873:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v3 ^= k;                                       /* k42   : k43   : k44    : k45          */
+ 10147              		.loc 2 1873 0
+ 10148 8c93 660F6F85 		movdqa	-8992(%rbp), %xmm0
+ 10148      E0DCFFFF 
+ 10149 8c9b 660FEF85 		pxor	-8960(%rbp), %xmm0
+ 10149      00DDFFFF 
+ 10150 8ca3 660F7F85 		movdqa	%xmm0, -8992(%rbp)
+ 10150      E0DCFFFF 
+1874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(StateDupColumn3) (k = v3);   /* k45   : k45   : k45    : k45          */
+ 10151              		.loc 2 1874 0
+ 10152 8cab 660F6F95 		movdqa	-8992(%rbp), %xmm2
+ 10152      E0DCFFFF 
+ 10153 8cb3 660F7F95 		movdqa	%xmm2, -8960(%rbp)
+ 10153      00DDFFFF 
+ 10154 8cbb 660F6F85 		movdqa	-8960(%rbp), %xmm0
+ 10154      00DDFFFF 
+ 10155 8cc3 F30F7F85 		movdqu	%xmm0, -1232(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 321
+
+
+ 10155      30FBFFFF 
+ 10156 8ccb F30F6F85 		movdqu	-1232(%rbp), %xmm0
+ 10156      30FBFFFF 
+ 10157 8cd3 F30F7F85 		movdqu	%xmm0, -1200(%rbp)
+ 10157      50FBFFFF 
+ 10158              	.LBB2458:
+ 10159              	.LBB2459:
+ 10160              	.LBB2460:
+ 10161              	.LBB2461:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 10162              		.loc 3 450 0
+ 10163 8cdb F30F6F85 		movdqu	-1200(%rbp), %xmm0
+ 10163      50FBFFFF 
+ 10164 8ce3 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 10164      FF
+ 10165              	.LBE2461:
+ 10166              	.LBE2460:
+ 10167              	.LBE2459:
+ 10168              	.LBE2458:
+ 10169              		.loc 2 1874 0
+ 10170 8ce8 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 10170      00DDFFFF 
+1875:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v4 ^= k;                                       /* k46   : k47   : x      : x            */
+ 10171              		.loc 2 1875 0
+ 10172 8cf0 660F6F95 		movdqa	-8976(%rbp), %xmm2
+ 10172      F0DCFFFF 
+ 10173 8cf8 660FEF95 		pxor	-8960(%rbp), %xmm2
+ 10173      00DDFFFF 
+ 10174 8d00 660F7F95 		movdqa	%xmm2, -8976(%rbp)
+ 10174      F0DCFFFF 
+ 10175 8d08 660F6F85 		movdqa	-9024(%rbp), %xmm0
+ 10175      C0DCFFFF 
+ 10176 8d10 F30F7F85 		movdqu	%xmm0, -1168(%rbp)
+ 10176      70FBFFFF 
+ 10177 8d18 660F6F95 		movdqa	-8992(%rbp), %xmm2
+ 10177      E0DCFFFF 
+ 10178 8d20 F30F7F95 		movdqu	%xmm2, -1184(%rbp)
+ 10178      60FBFFFF 
+ 10179 8d28 F30F6F85 		movdqu	-1168(%rbp), %xmm0
+ 10179      70FBFFFF 
+ 10180 8d30 F30F7F85 		movdqu	%xmm0, -1120(%rbp)
+ 10180      A0FBFFFF 
+ 10181 8d38 F30F6F85 		movdqu	-1184(%rbp), %xmm0
+ 10181      60FBFFFF 
+ 10182 8d40 F30F7F85 		movdqu	%xmm0, -1136(%rbp)
+ 10182      90FBFFFF 
+ 10183              	.LBB2462:
+ 10184              	.LBB2463:
+ 10185              	.LBB2464:
+ 10186              	.LBB2465:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 10187              		.loc 3 366 0
+ 10188 8d48 F20F1085 		movsd	-1136(%rbp), %xmm0
+ 10188      90FBFFFF 
+ 10189 8d50 660F1685 		movhpd	-1128(%rbp), %xmm0
+ 10189      98FBFFFF 
+ 10190 8d58 F20F108D 		movsd	-1120(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 322
+
+
+ 10190      A0FBFFFF 
+ 10191 8d60 660F168D 		movhpd	-1112(%rbp), %xmm1
+ 10191      A8FBFFFF 
+ 10192 8d68 660F28D1 		movapd	%xmm1, %xmm2
+ 10193 8d6c 660F14D0 		unpcklpd	%xmm0, %xmm2
+ 10194 8d70 660F28C2 		movapd	%xmm2, %xmm0
+ 10195              	.LBE2465:
+ 10196              	.LBE2464:
+ 10197              	.LBE2463:
+ 10198              	.LBE2462:
+1876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(StateMerge1) (v1,v3);        /* k40   : k41   : k42    : k43          */
+ 10199              		.loc 2 1876 0
+ 10200 8d74 660F7F85 		movdqa	%xmm0, -9024(%rbp)
+ 10200      C0DCFFFF 
+1877:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[10] = v1; /* K40:K41:K42:K43 */
+ 10201              		.loc 2 1877 0
+ 10202 8d7c 488B85A8 		movq	-8536(%rbp), %rax
+ 10202      DEFFFF
+ 10203 8d83 4805A000 		addq	$160, %rax
+ 10203      0000
+ 10204 8d89 660F6F85 		movdqa	-9024(%rbp), %xmm0
+ 10204      C0DCFFFF 
+ 10205 8d91 660F7F00 		movdqa	%xmm0, (%rax)
+ 10206 8d95 660F6F95 		movdqa	-8992(%rbp), %xmm2
+ 10206      E0DCFFFF 
+ 10207 8d9d F30F7F95 		movdqu	%xmm2, -1088(%rbp)
+ 10207      C0FBFFFF 
+ 10208 8da5 660F6F85 		movdqa	-8976(%rbp), %xmm0
+ 10208      F0DCFFFF 
+ 10209 8dad F30F7F85 		movdqu	%xmm0, -1104(%rbp)
+ 10209      B0FBFFFF 
+ 10210 8db5 F30F6F85 		movdqu	-1088(%rbp), %xmm0
+ 10210      C0FBFFFF 
+ 10211 8dbd F30F7F85 		movdqu	%xmm0, -1040(%rbp)
+ 10211      F0FBFFFF 
+ 10212 8dc5 F30F6F85 		movdqu	-1104(%rbp), %xmm0
+ 10212      B0FBFFFF 
+ 10213 8dcd F30F7F85 		movdqu	%xmm0, -1056(%rbp)
+ 10213      E0FBFFFF 
+ 10214              	.LBB2466:
+ 10215              	.LBB2467:
+ 10216              	.LBB2468:
+ 10217              	.LBB2469:
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return ( v128_u8_t ) __builtin_ia32_shufpd ((v128_d_t)vin1, (v128_d_t)vin2, mask);
+ 10218              		.loc 3 366 0
+ 10219 8dd5 F20F108D 		movsd	-1056(%rbp), %xmm1
+ 10219      E0FBFFFF 
+ 10220 8ddd 660F168D 		movhpd	-1048(%rbp), %xmm1
+ 10220      E8FBFFFF 
+ 10221 8de5 F20F1085 		movsd	-1040(%rbp), %xmm0
+ 10221      F0FBFFFF 
+ 10222 8ded 660F1685 		movhpd	-1032(%rbp), %xmm0
+ 10222      F8FBFFFF 
+ 10223 8df5 660FC6C1 		shufpd	$1, %xmm1, %xmm0
+ 10223      01
+ 10224              	.LBE2469:
+ 10225              	.LBE2468:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 323
+
+
+ 10226              	.LBE2467:
+ 10227              	.LBE2466:
+1878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v2  = AESBCMEMBER(StateMerge2) (v3,v4);        /* k44   : k45   : k46    : k47          */
+ 10228              		.loc 2 1878 0
+ 10229 8dfa 660F7F85 		movdqa	%xmm0, -9008(%rbp)
+ 10229      D0DCFFFF 
+1879:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[11] = v2; /* K44:K45:K46:K47 */
+ 10230              		.loc 2 1879 0
+ 10231 8e02 488B85A8 		movq	-8536(%rbp), %rax
+ 10231      DEFFFF
+ 10232 8e09 4805B000 		addq	$176, %rax
+ 10232      0000
+ 10233 8e0f 660F6F95 		movdqa	-9008(%rbp), %xmm2
+ 10233      D0DCFFFF 
+ 10234 8e17 660F7F10 		movdqa	%xmm2, (%rax)
+ 10235 8e1b 660F6F85 		movdqa	-8992(%rbp), %xmm0
+ 10235      E0DCFFFF 
+ 10236 8e23 F30F7F85 		movdqu	%xmm0, -1024(%rbp)
+ 10236      00FCFFFF 
+ 10237              	.LBB2470:
+ 10238              	.LBB2471:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 10239              		.loc 2 1565 0
+ 10240 8e2b F30F6F95 		movdqu	-1024(%rbp), %xmm2
+ 10240      00FCFFFF 
+ 10241 8e33 660F7F95 		movdqa	%xmm2, -8592(%rbp)
+ 10241      70DEFFFF 
+ 10242 8e3b 660F6F85 		movdqa	-8592(%rbp), %xmm0
+ 10242      70DEFFFF 
+ 10243 8e43 F30F7F85 		movdqu	%xmm0, -1008(%rbp)
+ 10243      10FCFFFF 
+ 10244              	.LBB2472:
+ 10245              	.LBB2473:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 10246              		.loc 2 1278 0
+ 10247 8e4b 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 10247      00000000 
+ 10248 8e53 F30F6F8D 		movdqu	-1008(%rbp), %xmm1
+ 10248      10FCFFFF 
+ 10249 8e5b F30F7F8D 		movdqu	%xmm1, -976(%rbp)
+ 10249      30FCFFFF 
+ 10250 8e63 F30F7F85 		movdqu	%xmm0, -992(%rbp)
+ 10250      20FCFFFF 
+ 10251 8e6b F30F6F85 		movdqu	-976(%rbp), %xmm0
+ 10251      30FCFFFF 
+ 10252 8e73 F30F7F85 		movdqu	%xmm0, -944(%rbp)
+ 10252      50FCFFFF 
+ 10253 8e7b F30F6F85 		movdqu	-992(%rbp), %xmm0
+ 10253      20FCFFFF 
+ 10254 8e83 F30F7F85 		movdqu	%xmm0, -960(%rbp)
+ 10254      40FCFFFF 
+ 10255              	.LBB2474:
+ 10256              	.LBB2475:
+ 10257              	.LBB2476:
+ 10258              	.LBB2477:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10259              		.loc 3 529 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 324
+
+
+ 10260 8e8b F30F6F8D 		movdqu	-960(%rbp), %xmm1
+ 10260      40FCFFFF 
+ 10261 8e93 F30F6F85 		movdqu	-944(%rbp), %xmm0
+ 10261      50FCFFFF 
+ 10262 8e9b 660F3800 		pshufb	%xmm1, %xmm0
+ 10262      C1
+ 10263              	.LBE2477:
+ 10264              	.LBE2476:
+ 10265              	.LBE2475:
+ 10266              	.LBE2474:
+ 10267              	.LBE2473:
+ 10268              	.LBE2472:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10269              		.loc 2 1567 0
+ 10270 8ea0 660F7F85 		movdqa	%xmm0, -8592(%rbp)
+ 10270      70DEFFFF 
+ 10271 8ea8 660F6F85 		movdqa	-8592(%rbp), %xmm0
+ 10271      70DEFFFF 
+ 10272 8eb0 660FEF85 		pxor	-1024(%rbp), %xmm0
+ 10272      00FCFFFF 
+ 10273 8eb8 F30F7F85 		movdqu	%xmm0, -1024(%rbp)
+ 10273      00FCFFFF 
+ 10274 8ec0 660F6F95 		movdqa	-8592(%rbp), %xmm2
+ 10274      70DEFFFF 
+ 10275 8ec8 F30F7F95 		movdqu	%xmm2, -928(%rbp)
+ 10275      60FCFFFF 
+ 10276              	.LBB2478:
+ 10277              	.LBB2479:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 10278              		.loc 2 1278 0
+ 10279 8ed0 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 10279      00000000 
+ 10280 8ed8 F30F6F8D 		movdqu	-928(%rbp), %xmm1
+ 10280      60FCFFFF 
+ 10281 8ee0 F30F7F8D 		movdqu	%xmm1, -896(%rbp)
+ 10281      80FCFFFF 
+ 10282 8ee8 F30F7F85 		movdqu	%xmm0, -912(%rbp)
+ 10282      70FCFFFF 
+ 10283 8ef0 F30F6F85 		movdqu	-896(%rbp), %xmm0
+ 10283      80FCFFFF 
+ 10284 8ef8 F30F7F85 		movdqu	%xmm0, -864(%rbp)
+ 10284      A0FCFFFF 
+ 10285 8f00 F30F6F85 		movdqu	-912(%rbp), %xmm0
+ 10285      70FCFFFF 
+ 10286 8f08 F30F7F85 		movdqu	%xmm0, -880(%rbp)
+ 10286      90FCFFFF 
+ 10287              	.LBB2480:
+ 10288              	.LBB2481:
+ 10289              	.LBB2482:
+ 10290              	.LBB2483:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10291              		.loc 3 529 0
+ 10292 8f10 F30F6F8D 		movdqu	-880(%rbp), %xmm1
+ 10292      90FCFFFF 
+ 10293 8f18 F30F6F85 		movdqu	-864(%rbp), %xmm0
+ 10293      A0FCFFFF 
+ 10294 8f20 660F3800 		pshufb	%xmm1, %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 325
+
+
+ 10294      C1
+ 10295              	.LBE2483:
+ 10296              	.LBE2482:
+ 10297              	.LBE2481:
+ 10298              	.LBE2480:
+ 10299              	.LBE2479:
+ 10300              	.LBE2478:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10301              		.loc 2 1568 0
+ 10302 8f25 660F7F85 		movdqa	%xmm0, -8592(%rbp)
+ 10302      70DEFFFF 
+ 10303 8f2d 660F6F85 		movdqa	-8592(%rbp), %xmm0
+ 10303      70DEFFFF 
+ 10304 8f35 660FEF85 		pxor	-1024(%rbp), %xmm0
+ 10304      00FCFFFF 
+ 10305 8f3d F30F7F85 		movdqu	%xmm0, -1024(%rbp)
+ 10305      00FCFFFF 
+ 10306 8f45 660F6F85 		movdqa	-8592(%rbp), %xmm0
+ 10306      70DEFFFF 
+ 10307 8f4d F30F7F85 		movdqu	%xmm0, -848(%rbp)
+ 10307      B0FCFFFF 
+ 10308              	.LBB2484:
+ 10309              	.LBB2485:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 10310              		.loc 2 1278 0
+ 10311 8f55 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 10311      00000000 
+ 10312 8f5d F30F6F8D 		movdqu	-848(%rbp), %xmm1
+ 10312      B0FCFFFF 
+ 10313 8f65 F30F7F8D 		movdqu	%xmm1, -816(%rbp)
+ 10313      D0FCFFFF 
+ 10314 8f6d F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 10314      C0FCFFFF 
+ 10315 8f75 F30F6F85 		movdqu	-816(%rbp), %xmm0
+ 10315      D0FCFFFF 
+ 10316 8f7d F30F7F85 		movdqu	%xmm0, -784(%rbp)
+ 10316      F0FCFFFF 
+ 10317 8f85 F30F6F85 		movdqu	-832(%rbp), %xmm0
+ 10317      C0FCFFFF 
+ 10318 8f8d F30F7F85 		movdqu	%xmm0, -800(%rbp)
+ 10318      E0FCFFFF 
+ 10319              	.LBB2486:
+ 10320              	.LBB2487:
+ 10321              	.LBB2488:
+ 10322              	.LBB2489:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10323              		.loc 3 529 0
+ 10324 8f95 F30F6F8D 		movdqu	-800(%rbp), %xmm1
+ 10324      E0FCFFFF 
+ 10325 8f9d F30F6F85 		movdqu	-784(%rbp), %xmm0
+ 10325      F0FCFFFF 
+ 10326 8fa5 660F3800 		pshufb	%xmm1, %xmm0
+ 10326      C1
+ 10327              	.LBE2489:
+ 10328              	.LBE2488:
+ 10329              	.LBE2487:
+ 10330              	.LBE2486:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 326
+
+
+ 10331              	.LBE2485:
+ 10332              	.LBE2484:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 10333              		.loc 2 1569 0
+ 10334 8faa 660F7F85 		movdqa	%xmm0, -8592(%rbp)
+ 10334      70DEFFFF 
+ 10335 8fb2 660F6F85 		movdqa	-8592(%rbp), %xmm0
+ 10335      70DEFFFF 
+ 10336 8fba 660FEF85 		pxor	-1024(%rbp), %xmm0
+ 10336      00FCFFFF 
+ 10337 8fc2 F30F7F85 		movdqu	%xmm0, -1024(%rbp)
+ 10337      00FCFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 10338              		.loc 2 1571 0
+ 10339 8fca F30F6F85 		movdqu	-1024(%rbp), %xmm0
+ 10339      00FCFFFF 
+ 10340              	.LBE2471:
+ 10341              	.LBE2470:
+1880:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1881:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* pattern 3 */
+1882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(ShiftXorColumns) (v3);       /* k42   :k42^k43:k42^k43^k44:k42^k43^k44^k45  *
+ 10342              		.loc 2 1882 0
+ 10343 8fd2 660F7F85 		movdqa	%xmm0, -9040(%rbp)
+ 10343      B0DCFFFF 
+ 10344 8fda 660F6F95 		movdqa	-9008(%rbp), %xmm2
+ 10344      D0DCFFFF 
+ 10345 8fe2 F30F7F95 		movdqu	%xmm2, -752(%rbp)
+ 10345      10FDFFFF 
+ 10346              	.LBB2490:
+ 10347              	.LBB2491:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 10348              		.loc 2 1681 0
+ 10349 8fea B8800000 		movl	$128, %eax
+ 10349      00
+ 10350 8fef 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 10350      00000000 
+ 10351 8ff7 F30F7F85 		movdqu	%xmm0, -720(%rbp)
+ 10351      30FDFFFF 
+ 10352 8fff 89852CFD 		movl	%eax, -724(%rbp)
+ 10352      FFFF
+ 10353 9005 F30F6F85 		movdqu	-720(%rbp), %xmm0
+ 10353      30FDFFFF 
+ 10354 900d F30F7F85 		movdqu	%xmm0, -688(%rbp)
+ 10354      50FDFFFF 
+ 10355 9015 8B852CFD 		movl	-724(%rbp), %eax
+ 10355      FFFF
+ 10356 901b 89854CFD 		movl	%eax, -692(%rbp)
+ 10356      FFFF
+ 10357              	.LBB2492:
+ 10358              	.LBB2493:
+ 10359              	.LBB2494:
+ 10360              	.LBB2495:
+ 10361              		.loc 3 598 0
+ 10362 9021 8B854CFD 		movl	-692(%rbp), %eax
+ 10362      FFFF
+ 10363 9027 F30F6F85 		movdqu	-688(%rbp), %xmm0
+ 10363      50FDFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 327
+
+
+ 10364 902f 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 10364      C003
+ 10365              	.LBE2495:
+ 10366              	.LBE2494:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 10367              		.loc 2 519 0
+ 10368 9035 F30F7F85 		movdqu	%xmm0, -720(%rbp)
+ 10368      30FDFFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 10369              		.loc 2 526 0
+ 10370 903d F30F6F85 		movdqu	-720(%rbp), %xmm0
+ 10370      30FDFFFF 
+ 10371              	.LBE2493:
+ 10372              	.LBE2492:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 10373              		.loc 2 1681 0
+ 10374 9045 660F7F85 		movdqa	%xmm0, -8560(%rbp)
+ 10374      90DEFFFF 
+ 10375 904d F30F6F85 		movdqu	-752(%rbp), %xmm0
+ 10375      10FDFFFF 
+ 10376 9055 F30F7F85 		movdqu	%xmm0, -672(%rbp)
+ 10376      60FDFFFF 
+ 10377 905d F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 10377      60FDFFFF 
+ 10378 9065 F30F7F85 		movdqu	%xmm0, -640(%rbp)
+ 10378      80FDFFFF 
+ 10379 906d 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 10379      000000
+ 10380 9074 48898578 		movq	%rax, -648(%rbp)
+ 10380      FDFFFF
+ 10381              	.LBB2496:
+ 10382              	.LBB2497:
+ 10383              	.LBB2498:
+ 10384              	.LBB2499:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 10385              		.loc 2 851 0
+ 10386 907b 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 10386      00000000 
+ 10387 9083 F30F7F85 		movdqu	%xmm0, -608(%rbp)
+ 10387      A0FDFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 10388              		.loc 2 854 0
+ 10389 908b 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 10389      00000000 
+ 10390 9093 F30F6F8D 		movdqu	-640(%rbp), %xmm1
+ 10390      80FDFFFF 
+ 10391 909b F30F7F8D 		movdqu	%xmm1, -528(%rbp)
+ 10391      F0FDFFFF 
+ 10392 90a3 F30F7F85 		movdqu	%xmm0, -544(%rbp)
+ 10392      E0FDFFFF 
+ 10393              	.LBB2500:
+ 10394              	.LBB2501:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 10395              		.loc 2 206 0
+ 10396 90ab F30F6F85 		movdqu	-544(%rbp), %xmm0
+ 10396      E0FDFFFF 
+ 10397 90b3 F30F6F8D 		movdqu	-528(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 328
+
+
+ 10397      F0FDFFFF 
+ 10398 90bb 660FDBC1 		pand	%xmm1, %xmm0
+ 10399              	.LBE2501:
+ 10400              	.LBE2500:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 10401              		.loc 2 854 0
+ 10402 90bf F30F7F85 		movdqu	%xmm0, -560(%rbp)
+ 10402      D0FDFFFF 
+ 10403 90c7 F30F6F85 		movdqu	-640(%rbp), %xmm0
+ 10403      80FDFFFF 
+ 10404 90cf F30F7F85 		movdqu	%xmm0, -496(%rbp)
+ 10404      10FEFFFF 
+ 10405              	.LBB2502:
+ 10406              	.LBB2503:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 10407              		.loc 3 433 0
+ 10408 90d7 F30F6F85 		movdqu	-496(%rbp), %xmm0
+ 10408      10FEFFFF 
+ 10409 90df 660F72D0 		psrld	$4, %xmm0
+ 10409      04
+ 10410              	.LBE2503:
+ 10411              	.LBE2502:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 10412              		.loc 2 857 0
+ 10413 90e4 F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 10413      C0FDFFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 10414              		.loc 2 859 0
+ 10415 90ec 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 10415      00000000 
+ 10416 90f4 F30F6F8D 		movdqu	-576(%rbp), %xmm1
+ 10416      C0FDFFFF 
+ 10417 90fc F30F7F8D 		movdqu	%xmm1, -464(%rbp)
+ 10417      30FEFFFF 
+ 10418 9104 F30F7F85 		movdqu	%xmm0, -480(%rbp)
+ 10418      20FEFFFF 
+ 10419              	.LBB2504:
+ 10420              	.LBB2505:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 10421              		.loc 2 206 0
+ 10422 910c F30F6F85 		movdqu	-480(%rbp), %xmm0
+ 10422      20FEFFFF 
+ 10423 9114 F30F6F8D 		movdqu	-464(%rbp), %xmm1
+ 10423      30FEFFFF 
+ 10424 911c 660FDBC1 		pand	%xmm1, %xmm0
+ 10425              	.LBE2505:
+ 10426              	.LBE2504:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 10427              		.loc 2 859 0
+ 10428 9120 F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 10428      C0FDFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 10429              		.loc 2 866 0
+ 10430 9128 C7859CFD 		movl	$0, -612(%rbp)
+ 10430      FFFF0000 
+ 10430      0000
+ 10431 9132 E9BE0100 		jmp	.L144
+
GAS LISTING /tmp/ccjbMjHD.s 			page 329
+
+
+ 10431      00
+ 10432              	.L145:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 10433              		.loc 2 868 0
+ 10434 9137 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 10434      00000000 
+ 10435 913f F30F7F85 		movdqu	%xmm0, -432(%rbp)
+ 10435      50FEFFFF 
+ 10436 9147 F30F6F85 		movdqu	-576(%rbp), %xmm0
+ 10436      C0FDFFFF 
+ 10437 914f F30F7F85 		movdqu	%xmm0, -448(%rbp)
+ 10437      40FEFFFF 
+ 10438 9157 F30F6F85 		movdqu	-432(%rbp), %xmm0
+ 10438      50FEFFFF 
+ 10439 915f F30F7F85 		movdqu	%xmm0, -400(%rbp)
+ 10439      70FEFFFF 
+ 10440 9167 F30F6F85 		movdqu	-448(%rbp), %xmm0
+ 10440      40FEFFFF 
+ 10441 916f F30F7F85 		movdqu	%xmm0, -416(%rbp)
+ 10441      60FEFFFF 
+ 10442              	.LBB2506:
+ 10443              	.LBB2507:
+ 10444              	.LBB2508:
+ 10445              	.LBB2509:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10446              		.loc 3 529 0
+ 10447 9177 F30F6F8D 		movdqu	-416(%rbp), %xmm1
+ 10447      60FEFFFF 
+ 10448 917f F30F6F85 		movdqu	-400(%rbp), %xmm0
+ 10448      70FEFFFF 
+ 10449 9187 660F3800 		pshufb	%xmm1, %xmm0
+ 10449      C1
+ 10450              	.LBE2509:
+ 10451              	.LBE2508:
+ 10452              	.LBE2507:
+ 10453              	.LBE2506:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 10454              		.loc 2 868 0
+ 10455 918c F30F7F85 		movdqu	%xmm0, -592(%rbp)
+ 10455      B0FDFFFF 
+ 10456 9194 F30F6F85 		movdqu	-560(%rbp), %xmm0
+ 10456      D0FDFFFF 
+ 10457 919c F30F7F85 		movdqu	%xmm0, -368(%rbp)
+ 10457      90FEFFFF 
+ 10458 91a4 F30F6F85 		movdqu	-592(%rbp), %xmm0
+ 10458      B0FDFFFF 
+ 10459 91ac F30F7F85 		movdqu	%xmm0, -384(%rbp)
+ 10459      80FEFFFF 
+ 10460              	.LBB2510:
+ 10461              	.LBB2511:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 10462              		.loc 2 234 0
+ 10463 91b4 F30F6F85 		movdqu	-384(%rbp), %xmm0
+ 10463      80FEFFFF 
+ 10464 91bc F30F6F8D 		movdqu	-368(%rbp), %xmm1
+ 10464      90FEFFFF 
+ 10465 91c4 660FEBC1 		por	%xmm1, %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 330
+
+
+ 10466              	.LBE2511:
+ 10467              	.LBE2510:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 10468              		.loc 2 870 0
+ 10469 91c8 F30F7F85 		movdqu	%xmm0, -592(%rbp)
+ 10469      B0FDFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 10470              		.loc 2 872 0
+ 10471 91d0 8B859CFD 		mov	-612(%rbp), %eax
+ 10471      FFFF
+ 10472 91d6 48C1E004 		salq	$4, %rax
+ 10473 91da 48038578 		addq	-648(%rbp), %rax
+ 10473      FDFFFF
+ 10474 91e1 660F6F00 		movdqa	(%rax), %xmm0
+ 10475 91e5 F30F7F85 		movdqu	%xmm0, -336(%rbp)
+ 10475      B0FEFFFF 
+ 10476 91ed F30F6F85 		movdqu	-592(%rbp), %xmm0
+ 10476      B0FDFFFF 
+ 10477 91f5 F30F7F85 		movdqu	%xmm0, -352(%rbp)
+ 10477      A0FEFFFF 
+ 10478 91fd F30F6F85 		movdqu	-336(%rbp), %xmm0
+ 10478      B0FEFFFF 
+ 10479 9205 F30F7F85 		movdqu	%xmm0, -304(%rbp)
+ 10479      D0FEFFFF 
+ 10480 920d F30F6F85 		movdqu	-352(%rbp), %xmm0
+ 10480      A0FEFFFF 
+ 10481 9215 F30F7F85 		movdqu	%xmm0, -320(%rbp)
+ 10481      C0FEFFFF 
+ 10482              	.LBB2512:
+ 10483              	.LBB2513:
+ 10484              	.LBB2514:
+ 10485              	.LBB2515:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10486              		.loc 3 529 0
+ 10487 921d F30F6F8D 		movdqu	-320(%rbp), %xmm1
+ 10487      C0FEFFFF 
+ 10488 9225 F30F6F85 		movdqu	-304(%rbp), %xmm0
+ 10488      D0FEFFFF 
+ 10489 922d 660F3800 		pshufb	%xmm1, %xmm0
+ 10489      C1
+ 10490              	.LBE2515:
+ 10491              	.LBE2514:
+ 10492              	.LBE2513:
+ 10493              	.LBE2512:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 10494              		.loc 2 872 0
+ 10495 9232 F30F7F85 		movdqu	%xmm0, -592(%rbp)
+ 10495      B0FDFFFF 
+ 10496 923a F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 10496      A0FDFFFF 
+ 10497 9242 F30F7F85 		movdqu	%xmm0, -272(%rbp)
+ 10497      F0FEFFFF 
+ 10498 924a F30F6F85 		movdqu	-592(%rbp), %xmm0
+ 10498      B0FDFFFF 
+ 10499 9252 F30F7F85 		movdqu	%xmm0, -288(%rbp)
+ 10499      E0FEFFFF 
+ 10500              	.LBB2516:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 331
+
+
+ 10501              	.LBB2517:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 10502              		.loc 2 234 0
+ 10503 925a F30F6F85 		movdqu	-288(%rbp), %xmm0
+ 10503      E0FEFFFF 
+ 10504 9262 F30F6F8D 		movdqu	-272(%rbp), %xmm1
+ 10504      F0FEFFFF 
+ 10505 926a 660FEBC1 		por	%xmm1, %xmm0
+ 10506              	.LBE2517:
+ 10507              	.LBE2516:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 10508              		.loc 2 874 0
+ 10509 926e F30F7F85 		movdqu	%xmm0, -608(%rbp)
+ 10509      A0FDFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 10510              		.loc 2 876 0
+ 10511 9276 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 10511      00000000 
+ 10512 927e F30F6F8D 		movdqu	-576(%rbp), %xmm1
+ 10512      C0FDFFFF 
+ 10513 9286 F30F7F8D 		movdqu	%xmm1, -240(%rbp)
+ 10513      10FFFFFF 
+ 10514 928e F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 10514      00FFFFFF 
+ 10515              	.LBB2518:
+ 10516              	.LBB2519:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 10517              		.loc 2 290 0
+ 10518 9296 F30F6F8D 		movdqu	-256(%rbp), %xmm1
+ 10518      00FFFFFF 
+ 10519 929e F30F6F85 		movdqu	-240(%rbp), %xmm0
+ 10519      10FFFFFF 
+ 10520 92a6 660FF8C1 		psubb	%xmm1, %xmm0
+ 10521              	.LBE2519:
+ 10522              	.LBE2518:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 10523              		.loc 2 876 0
+ 10524 92aa F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 10524      C0FDFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 10525              		.loc 2 878 0
+ 10526 92b2 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 10526      00000000 
+ 10527 92ba F30F6F8D 		movdqu	-576(%rbp), %xmm1
+ 10527      C0FDFFFF 
+ 10528 92c2 F30F7F8D 		movdqu	%xmm1, -208(%rbp)
+ 10528      30FFFFFF 
+ 10529 92ca F30F7F85 		movdqu	%xmm0, -224(%rbp)
+ 10529      20FFFFFF 
+ 10530              	.LBB2520:
+ 10531              	.LBB2521:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 10532              		.loc 2 206 0
+ 10533 92d2 F30F6F85 		movdqu	-224(%rbp), %xmm0
+ 10533      20FFFFFF 
+ 10534 92da F30F6F8D 		movdqu	-208(%rbp), %xmm1
+ 10534      30FFFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 332
+
+
+ 10535 92e2 660FDBC1 		pand	%xmm1, %xmm0
+ 10536              	.LBE2521:
+ 10537              	.LBE2520:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 10538              		.loc 2 878 0
+ 10539 92e6 F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 10539      C0FDFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 10540              		.loc 2 866 0
+ 10541 92ee 83859CFD 		addl	$1, -612(%rbp)
+ 10541      FFFF01
+ 10542              	.L144:
+ 10543 92f5 83BD9CFD 		cmpl	$15, -612(%rbp)
+ 10543      FFFF0F
+ 10544 92fc 0F8635FE 		jbe	.L145
+ 10544      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 10545              		.loc 2 882 0
+ 10546 9302 F30F6F85 		movdqu	-608(%rbp), %xmm0
+ 10546      A0FDFFFF 
+ 10547              	.LBE2499:
+ 10548              	.LBE2498:
+ 10549              	.LBE2497:
+ 10550              	.LBE2496:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 10551              		.loc 2 1682 0
+ 10552 930a 660F7F85 		movdqa	%xmm0, -8576(%rbp)
+ 10552      80DEFFFF 
+ 10553              	.LBB2522:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 10554              		.loc 2 1683 0
+ 10555 9312 660F6F85 		movdqa	-8576(%rbp), %xmm0
+ 10555      80DEFFFF 
+ 10556 931a F30F7F85 		movdqu	%xmm0, -8160(%rbp)
+ 10556      20E0FFFF 
+ 10557 9322 E8000000 		call	KDbgWriterGet at PLT
+ 10557      00
+ 10558 9327 4885C0   		testq	%rax, %rax
+ 10559 932a 7479     		je	.L147
+ 10560 932c BF010000 		movl	$1, %edi
+ 10560      00
+ 10561 9331 E8000000 		call	KDbgCondToFlag at PLT
+ 10561      00
+ 10562 9336 4889C6   		movq	%rax, %rsi
+ 10563 9339 BF100000 		movl	$16, %edi
+ 10563      00
+ 10564 933e E8000000 		call	KDbgTestModConds at PLT
+ 10564      00
+ 10565 9343 84C0     		testb	%al, %al
+ 10566 9345 745E     		je	.L147
+ 10567 9347 8B852CE0 		movl	-8148(%rbp), %eax
+ 10567      FFFF
+ 10568 934d 89C7     		movl	%eax, %edi
+ 10569 934f E8AC6CFF 		call	bswap_32
+ 10569      FF
+ 10570 9354 4189C5   		movl	%eax, %r13d
+ 10571 9357 8B8528E0 		movl	-8152(%rbp), %eax
+
GAS LISTING /tmp/ccjbMjHD.s 			page 333
+
+
+ 10571      FFFF
+ 10572 935d 89C7     		movl	%eax, %edi
+ 10573 935f E89C6CFF 		call	bswap_32
+ 10573      FF
+ 10574 9364 4189C4   		movl	%eax, %r12d
+ 10575 9367 8B8524E0 		movl	-8156(%rbp), %eax
+ 10575      FFFF
+ 10576 936d 89C7     		movl	%eax, %edi
+ 10577 936f E88C6CFF 		call	bswap_32
+ 10577      FF
+ 10578 9374 89C3     		movl	%eax, %ebx
+ 10579 9376 8B8520E0 		movl	-8160(%rbp), %eax
+ 10579      FFFF
+ 10580 937c 89C7     		movl	%eax, %edi
+ 10581 937e E87D6CFF 		call	bswap_32
+ 10581      FF
+ 10582 9383 4589E9   		movl	%r13d, %r9d
+ 10583 9386 4589E0   		movl	%r12d, %r8d
+ 10584 9389 89D9     		movl	%ebx, %ecx
+ 10585 938b 89C2     		movl	%eax, %edx
+ 10586 938d 488D3500 		leaq	.LC0(%rip), %rsi
+ 10586      000000
+ 10587 9394 488D3D00 		leaq	.LC1(%rip), %rdi
+ 10587      000000
+ 10588 939b B8000000 		movl	$0, %eax
+ 10588      00
+ 10589 93a0 E8000000 		call	KDbgMsg at PLT
+ 10589      00
+ 10590              	.L147:
+ 10591 93a5 660F6F95 		movdqa	-8576(%rbp), %xmm2
+ 10591      80DEFFFF 
+ 10592 93ad F30F7F95 		movdqu	%xmm2, -192(%rbp)
+ 10592      40FFFFFF 
+ 10593              	.LBE2522:
+ 10594              	.LBB2523:
+ 10595              	.LBB2524:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 10596              		.loc 2 667 0
+ 10597 93b5 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 10597      00000000 
+ 10598 93bd F30F6F8D 		movdqu	-192(%rbp), %xmm1
+ 10598      40FFFFFF 
+ 10599 93c5 F30F7F8D 		movdqu	%xmm1, -160(%rbp)
+ 10599      60FFFFFF 
+ 10600 93cd F30F7F85 		movdqu	%xmm0, -176(%rbp)
+ 10600      50FFFFFF 
+ 10601 93d5 F30F6F85 		movdqu	-160(%rbp), %xmm0
+ 10601      60FFFFFF 
+ 10602 93dd F30F7F45 		movdqu	%xmm0, -128(%rbp)
+ 10602      80
+ 10603 93e2 F30F6F85 		movdqu	-176(%rbp), %xmm0
+ 10603      50FFFFFF 
+ 10604 93ea F30F7F85 		movdqu	%xmm0, -144(%rbp)
+ 10604      70FFFFFF 
+ 10605              	.LBB2525:
+ 10606              	.LBB2526:
+ 10607              	.LBB2527:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 334
+
+
+ 10608              	.LBB2528:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10609              		.loc 3 529 0
+ 10610 93f2 F30F6F8D 		movdqu	-144(%rbp), %xmm1
+ 10610      70FFFFFF 
+ 10611 93fa F30F6F45 		movdqu	-128(%rbp), %xmm0
+ 10611      80
+ 10612 93ff 660F3800 		pshufb	%xmm1, %xmm0
+ 10612      C1
+ 10613              	.LBE2528:
+ 10614              	.LBE2527:
+ 10615              	.LBE2526:
+ 10616              	.LBE2525:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 10617              		.loc 2 667 0
+ 10618 9404 F30F7F85 		movdqu	%xmm0, -192(%rbp)
+ 10618      40FFFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 10619              		.loc 2 668 0
+ 10620 940c F30F6F85 		movdqu	-192(%rbp), %xmm0
+ 10620      40FFFFFF 
+ 10621              	.LBE2524:
+ 10622              	.LBE2523:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 10623              		.loc 2 1684 0
+ 10624 9414 660F7F85 		movdqa	%xmm0, -8576(%rbp)
+ 10624      80DEFFFF 
+ 10625              	.LBB2529:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 10626              		.loc 2 1685 0
+ 10627 941c 660F6F85 		movdqa	-8576(%rbp), %xmm0
+ 10627      80DEFFFF 
+ 10628 9424 F30F7F85 		movdqu	%xmm0, -8176(%rbp)
+ 10628      10E0FFFF 
+ 10629 942c E8000000 		call	KDbgWriterGet at PLT
+ 10629      00
+ 10630 9431 4885C0   		testq	%rax, %rax
+ 10631 9434 7479     		je	.L149
+ 10632 9436 BF010000 		movl	$1, %edi
+ 10632      00
+ 10633 943b E8000000 		call	KDbgCondToFlag at PLT
+ 10633      00
+ 10634 9440 4889C6   		movq	%rax, %rsi
+ 10635 9443 BF100000 		movl	$16, %edi
+ 10635      00
+ 10636 9448 E8000000 		call	KDbgTestModConds at PLT
+ 10636      00
+ 10637 944d 84C0     		testb	%al, %al
+ 10638 944f 745E     		je	.L149
+ 10639 9451 8B851CE0 		movl	-8164(%rbp), %eax
+ 10639      FFFF
+ 10640 9457 89C7     		movl	%eax, %edi
+ 10641 9459 E8A26BFF 		call	bswap_32
+ 10641      FF
+ 10642 945e 4189C5   		movl	%eax, %r13d
+ 10643 9461 8B8518E0 		movl	-8168(%rbp), %eax
+ 10643      FFFF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 335
+
+
+ 10644 9467 89C7     		movl	%eax, %edi
+ 10645 9469 E8926BFF 		call	bswap_32
+ 10645      FF
+ 10646 946e 4189C4   		movl	%eax, %r12d
+ 10647 9471 8B8514E0 		movl	-8172(%rbp), %eax
+ 10647      FFFF
+ 10648 9477 89C7     		movl	%eax, %edi
+ 10649 9479 E8826BFF 		call	bswap_32
+ 10649      FF
+ 10650 947e 89C3     		movl	%eax, %ebx
+ 10651 9480 8B8510E0 		movl	-8176(%rbp), %eax
+ 10651      FFFF
+ 10652 9486 89C7     		movl	%eax, %edi
+ 10653 9488 E8736BFF 		call	bswap_32
+ 10653      FF
+ 10654 948d 4589E9   		movl	%r13d, %r9d
+ 10655 9490 4589E0   		movl	%r12d, %r8d
+ 10656 9493 89D9     		movl	%ebx, %ecx
+ 10657 9495 89C2     		movl	%eax, %edx
+ 10658 9497 488D3500 		leaq	.LC2(%rip), %rsi
+ 10658      000000
+ 10659 949e 488D3D00 		leaq	.LC1(%rip), %rdi
+ 10659      000000
+ 10660 94a5 B8000000 		movl	$0, %eax
+ 10660      00
+ 10661 94aa E8000000 		call	KDbgMsg at PLT
+ 10661      00
+ 10662              	.L149:
+ 10663 94af 660F6F95 		movdqa	-8576(%rbp), %xmm2
+ 10663      80DEFFFF 
+ 10664 94b7 F30F7F55 		movdqu	%xmm2, -96(%rbp)
+ 10664      A0
+ 10665 94bc 660F6F85 		movdqa	-8560(%rbp), %xmm0
+ 10665      90DEFFFF 
+ 10666 94c4 F30F7F45 		movdqu	%xmm0, -112(%rbp)
+ 10666      90
+ 10667              	.LBE2529:
+ 10668              	.LBB2530:
+ 10669              	.LBB2531:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 10670              		.loc 2 178 0
+ 10671 94c9 F30F6F45 		movdqu	-112(%rbp), %xmm0
+ 10671      90
+ 10672 94ce F30F6F4D 		movdqu	-96(%rbp), %xmm1
+ 10672      A0
+ 10673 94d3 660FEFC1 		pxor	%xmm1, %xmm0
+ 10674              	.LBE2531:
+ 10675              	.LBE2530:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 10676              		.loc 2 1686 0
+ 10677 94d7 660F7F85 		movdqa	%xmm0, -8576(%rbp)
+ 10677      80DEFFFF 
+ 10678              	.LBB2532:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 10679              		.loc 2 1687 0
+ 10680 94df 660F6F95 		movdqa	-8576(%rbp), %xmm2
+ 10680      80DEFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 336
+
+
+ 10681 94e7 F30F7F95 		movdqu	%xmm2, -8192(%rbp)
+ 10681      00E0FFFF 
+ 10682 94ef E8000000 		call	KDbgWriterGet at PLT
+ 10682      00
+ 10683 94f4 4885C0   		testq	%rax, %rax
+ 10684 94f7 7479     		je	.L151
+ 10685 94f9 BF010000 		movl	$1, %edi
+ 10685      00
+ 10686 94fe E8000000 		call	KDbgCondToFlag at PLT
+ 10686      00
+ 10687 9503 4889C6   		movq	%rax, %rsi
+ 10688 9506 BF100000 		movl	$16, %edi
+ 10688      00
+ 10689 950b E8000000 		call	KDbgTestModConds at PLT
+ 10689      00
+ 10690 9510 84C0     		testb	%al, %al
+ 10691 9512 745E     		je	.L151
+ 10692 9514 8B850CE0 		movl	-8180(%rbp), %eax
+ 10692      FFFF
+ 10693 951a 89C7     		movl	%eax, %edi
+ 10694 951c E8DF6AFF 		call	bswap_32
+ 10694      FF
+ 10695 9521 4189C5   		movl	%eax, %r13d
+ 10696 9524 8B8508E0 		movl	-8184(%rbp), %eax
+ 10696      FFFF
+ 10697 952a 89C7     		movl	%eax, %edi
+ 10698 952c E8CF6AFF 		call	bswap_32
+ 10698      FF
+ 10699 9531 4189C4   		movl	%eax, %r12d
+ 10700 9534 8B8504E0 		movl	-8188(%rbp), %eax
+ 10700      FFFF
+ 10701 953a 89C7     		movl	%eax, %edi
+ 10702 953c E8BF6AFF 		call	bswap_32
+ 10702      FF
+ 10703 9541 89C3     		movl	%eax, %ebx
+ 10704 9543 8B8500E0 		movl	-8192(%rbp), %eax
+ 10704      FFFF
+ 10705 9549 89C7     		movl	%eax, %edi
+ 10706 954b E8B06AFF 		call	bswap_32
+ 10706      FF
+ 10707 9550 4589E9   		movl	%r13d, %r9d
+ 10708 9553 4589E0   		movl	%r12d, %r8d
+ 10709 9556 89D9     		movl	%ebx, %ecx
+ 10710 9558 89C2     		movl	%eax, %edx
+ 10711 955a 488D3500 		leaq	.LC3(%rip), %rsi
+ 10711      000000
+ 10712 9561 488D3D00 		leaq	.LC1(%rip), %rdi
+ 10712      000000
+ 10713 9568 B8000000 		movl	$0, %eax
+ 10713      00
+ 10714 956d E8000000 		call	KDbgMsg at PLT
+ 10714      00
+ 10715              	.L151:
+ 10716 9572 660F6F85 		movdqa	-8576(%rbp), %xmm0
+ 10716      80DEFFFF 
+ 10717 957a F30F7F45 		movdqu	%xmm0, -80(%rbp)
+ 10717      B0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 337
+
+
+ 10718 957f F30F6F45 		movdqu	-80(%rbp), %xmm0
+ 10718      B0
+ 10719 9584 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 10719      D0
+ 10720              	.LBE2532:
+ 10721              	.LBB2533:
+ 10722              	.LBB2534:
+ 10723              	.LBB2535:
+ 10724              	.LBB2536:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 10725              		.loc 3 450 0
+ 10726 9589 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 10726      D0
+ 10727 958e 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 10727      FF
+ 10728              	.LBE2536:
+ 10729              	.LBE2535:
+ 10730              	.LBE2534:
+ 10731              	.LBE2533:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 10732              		.loc 2 1688 0
+ 10733 9593 660F7F85 		movdqa	%xmm0, -8576(%rbp)
+ 10733      80DEFFFF 
+ 10734              	.LBB2537:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 10735              		.loc 2 1689 0
+ 10736 959b 660F6F95 		movdqa	-8576(%rbp), %xmm2
+ 10736      80DEFFFF 
+ 10737 95a3 F30F7F95 		movdqu	%xmm2, -8208(%rbp)
+ 10737      F0DFFFFF 
+ 10738 95ab E8000000 		call	KDbgWriterGet at PLT
+ 10738      00
+ 10739 95b0 4885C0   		testq	%rax, %rax
+ 10740 95b3 7479     		je	.L153
+ 10741 95b5 BF010000 		movl	$1, %edi
+ 10741      00
+ 10742 95ba E8000000 		call	KDbgCondToFlag at PLT
+ 10742      00
+ 10743 95bf 4889C6   		movq	%rax, %rsi
+ 10744 95c2 BF100000 		movl	$16, %edi
+ 10744      00
+ 10745 95c7 E8000000 		call	KDbgTestModConds at PLT
+ 10745      00
+ 10746 95cc 84C0     		testb	%al, %al
+ 10747 95ce 745E     		je	.L153
+ 10748 95d0 8B85FCDF 		movl	-8196(%rbp), %eax
+ 10748      FFFF
+ 10749 95d6 89C7     		movl	%eax, %edi
+ 10750 95d8 E8236AFF 		call	bswap_32
+ 10750      FF
+ 10751 95dd 4189C5   		movl	%eax, %r13d
+ 10752 95e0 8B85F8DF 		movl	-8200(%rbp), %eax
+ 10752      FFFF
+ 10753 95e6 89C7     		movl	%eax, %edi
+ 10754 95e8 E8136AFF 		call	bswap_32
+ 10754      FF
+ 10755 95ed 4189C4   		movl	%eax, %r12d
+
GAS LISTING /tmp/ccjbMjHD.s 			page 338
+
+
+ 10756 95f0 8B85F4DF 		movl	-8204(%rbp), %eax
+ 10756      FFFF
+ 10757 95f6 89C7     		movl	%eax, %edi
+ 10758 95f8 E8036AFF 		call	bswap_32
+ 10758      FF
+ 10759 95fd 89C3     		movl	%eax, %ebx
+ 10760 95ff 8B85F0DF 		movl	-8208(%rbp), %eax
+ 10760      FFFF
+ 10761 9605 89C7     		movl	%eax, %edi
+ 10762 9607 E8F469FF 		call	bswap_32
+ 10762      FF
+ 10763 960c 4589E9   		movl	%r13d, %r9d
+ 10764 960f 4589E0   		movl	%r12d, %r8d
+ 10765 9612 89D9     		movl	%ebx, %ecx
+ 10766 9614 89C2     		movl	%eax, %edx
+ 10767 9616 488D3500 		leaq	.LC4(%rip), %rsi
+ 10767      000000
+ 10768 961d 488D3D00 		leaq	.LC1(%rip), %rdi
+ 10768      000000
+ 10769 9624 B8000000 		movl	$0, %eax
+ 10769      00
+ 10770 9629 E8000000 		call	KDbgMsg at PLT
+ 10770      00
+ 10771              	.L153:
+ 10772              	.LBE2537:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 10773              		.loc 2 1690 0
+ 10774 962e 660F6F85 		movdqa	-8576(%rbp), %xmm0
+ 10774      80DEFFFF 
+ 10775              	.LBE2491:
+ 10776              	.LBE2490:
+1883:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)
+ 10777              		.loc 2 1883 0
+ 10778 9636 660F7F85 		movdqa	%xmm0, -8960(%rbp)
+ 10778      00DDFFFF 
+1884:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                        (v2,0x80);  /* F(k47): F(k47): F(k47) : F(k47)       */
+1885:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0 ^= k;                                       /* k48   : k49   : k50    : k51          */
+ 10779              		.loc 2 1885 0
+ 10780 963e 660F6F85 		movdqa	-9040(%rbp), %xmm0
+ 10780      B0DCFFFF 
+ 10781 9646 660FEF85 		pxor	-8960(%rbp), %xmm0
+ 10781      00DDFFFF 
+ 10782 964e 660F7F85 		movdqa	%xmm0, -9040(%rbp)
+ 10782      B0DCFFFF 
+1886:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[12] = v0;                           /* K48:K49:K50:K51 */
+ 10783              		.loc 2 1886 0
+ 10784 9656 488B85A8 		movq	-8536(%rbp), %rax
+ 10784      DEFFFF
+ 10785 965d 4805C000 		addq	$192, %rax
+ 10785      0000
+ 10786 9663 660F6F95 		movdqa	-9040(%rbp), %xmm2
+ 10786      B0DCFFFF 
+ 10787 966b 660F7F10 		movdqa	%xmm2, (%rax)
+1887:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 10788              		.loc 2 1887 0
+ 10789 966f 4881C438 		addq	$9016, %rsp
+ 10789      230000
+
GAS LISTING /tmp/ccjbMjHD.s 			page 339
+
+
+ 10790 9676 5B       		popq	%rbx
+ 10791 9677 415C     		popq	%r12
+ 10792 9679 415D     		popq	%r13
+ 10793 967b C9       		leave
+ 10794 967c C3       		ret
+ 10795              		.cfi_endproc
+ 10796              	.LFE646:
+ 10797              		.size	KAESBlockCipherVecRegKeyExpansion192, .-KAESBlockCipherVecRegKeyExpansion192
+ 10798              		.type	KAESBlockCipherVecRegKeyExpansion256, @function
+ 10799              	KAESBlockCipherVecRegKeyExpansion256:
+ 10800              	.LFB647:
+1888:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1889:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1890:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion192) (CipherVec * w, const AESByte * key)
+1891:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1892:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_192, AES_Nk_192);
+1893:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1894:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1895:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1896:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1897:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1898:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1899:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----- */
+1900:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1901:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC || 1
+1902:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1903:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion256) (CipherVec * round_keys, const AESByte * key)
+1904:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 10801              		.loc 2 1904 0
+ 10802              		.cfi_startproc
+ 10803 967d 55       		pushq	%rbp
+ 10804              	.LCFI6:
+ 10805              		.cfi_def_cfa_offset 16
+ 10806 967e 4889E5   		movq	%rsp, %rbp
+ 10807              		.cfi_offset 6, -16
+ 10808              	.LCFI7:
+ 10809              		.cfi_def_cfa_register 6
+ 10810 9681 4155     		pushq	%r13
+ 10811 9683 4154     		pushq	%r12
+ 10812 9685 53       		pushq	%rbx
+ 10813 9686 4881EC28 		subq	$10280, %rsp
+ 10813      280000
+ 10814 968d 4889BD98 		movq	%rdi, -9832(%rbp)
+ 10814      D9FFFF
+ 10815 9694 4889B590 		movq	%rsi, -9840(%rbp)
+ 10815      D9FFFF
+ 10816              		.loc 2 1904 0
+ 10817 969b 488B8590 		movq	-9840(%rbp), %rax
+ 10817      D9FFFF
+ 10818 96a2 48898558 		movq	%rax, -9128(%rbp)
+ 10818      DCFFFF
+ 10819              	.LBB3188:
+ 10820              	.LBB3189:
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __asm__ (
+ 10821              		.loc 2 126 0
+ 10822 96a9 488B8558 		movq	-9128(%rbp), %rax
+ 10822      DCFFFF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 340
+
+
+ 10823 96b0 4889C7   		movq	%rax, %rdi
+ 10824              	#APP
+ 10825              	# 126 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 10826              		movdqu (%rdi),%xmm0
+ 10827              	# 0 "" 2
+ 10828              	#NO_APP
+ 10829 96b7 660F7F85 		movdqa	%xmm0, -10304(%rbp)
+ 10829      C0D7FFFF 
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vec;
+ 10830              		.loc 2 129 0
+ 10831 96bf 660F6F85 		movdqa	-10304(%rbp), %xmm0
+ 10831      C0D7FFFF 
+ 10832              	.LBE3189:
+ 10833              	.LBE3188:
+1905:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec v0, v1;
+1906:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec k;
+1907:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1908:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0 = AESBCMEMBER (StateIn) (key);
+ 10834              		.loc 2 1908 0
+ 10835 96c7 F30F7F85 		movdqu	%xmm0, -9184(%rbp)
+ 10835      20DCFFFF 
+1909:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1 = AESBCMEMBER (StateIn) (key + sizeof v0);
+ 10836              		.loc 2 1909 0
+ 10837 96cf 488B8590 		movq	-9840(%rbp), %rax
+ 10837      D9FFFF
+ 10838 96d6 4883C010 		addq	$16, %rax
+ 10839 96da 48898560 		movq	%rax, -9120(%rbp)
+ 10839      DCFFFF
+ 10840              	.LBB3190:
+ 10841              	.LBB3191:
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __asm__ (
+ 10842              		.loc 2 126 0
+ 10843 96e1 488B8560 		movq	-9120(%rbp), %rax
+ 10843      DCFFFF
+ 10844 96e8 4889C7   		movq	%rax, %rdi
+ 10845              	#APP
+ 10846              	# 126 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 10847              		movdqu (%rdi),%xmm0
+ 10848              	# 0 "" 2
+ 10849              	#NO_APP
+ 10850 96ef 660F7F85 		movdqa	%xmm0, -10288(%rbp)
+ 10850      D0D7FFFF 
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vec;
+ 10851              		.loc 2 129 0
+ 10852 96f7 660F6F85 		movdqa	-10288(%rbp), %xmm0
+ 10852      D0D7FFFF 
+ 10853              	.LBE3191:
+ 10854              	.LBE3190:
+ 10855              		.loc 2 1909 0
+ 10856 96ff F30F7F85 		movdqu	%xmm0, -9168(%rbp)
+ 10856      30DCFFFF 
+1910:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1911:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[0] = v0; /* k0  : k1  : k2  : k3  */
+ 10857              		.loc 2 1911 0
+ 10858 9707 488B8598 		movq	-9832(%rbp), %rax
+ 10858      D9FFFF
+ 10859 970e F30F6F85 		movdqu	-9184(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 341
+
+
+ 10859      20DCFFFF 
+ 10860 9716 F30F7F00 		movdqu	%xmm0, (%rax)
+1912:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[1] = v1; /* k4  : k5  : k6  : k7  */
+ 10861              		.loc 2 1912 0
+ 10862 971a 488B8598 		movq	-9832(%rbp), %rax
+ 10862      D9FFFF
+ 10863 9721 4883C010 		addq	$16, %rax
+ 10864 9725 F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 10864      30DCFFFF 
+ 10865 972d F30F7F00 		movdqu	%xmm0, (%rax)
+ 10866 9731 F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 10866      30DCFFFF 
+ 10867 9739 F30F7F85 		movdqu	%xmm0, -9104(%rbp)
+ 10867      70DCFFFF 
+ 10868              	.LBB3192:
+ 10869              	.LBB3193:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 10870              		.loc 2 1681 0
+ 10871 9741 B8010000 		movl	$1, %eax
+ 10871      00
+ 10872 9746 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 10872      00000000 
+ 10873 974e F30F7F85 		movdqu	%xmm0, -9072(%rbp)
+ 10873      90DCFFFF 
+ 10874 9756 89858CDC 		movl	%eax, -9076(%rbp)
+ 10874      FFFF
+ 10875 975c F30F6F85 		movdqu	-9072(%rbp), %xmm0
+ 10875      90DCFFFF 
+ 10876 9764 F30F7F85 		movdqu	%xmm0, -9040(%rbp)
+ 10876      B0DCFFFF 
+ 10877 976c 8B858CDC 		movl	-9076(%rbp), %eax
+ 10877      FFFF
+ 10878 9772 8985ACDC 		movl	%eax, -9044(%rbp)
+ 10878      FFFF
+ 10879              	.LBB3194:
+ 10880              	.LBB3195:
+ 10881              	.LBB3196:
+ 10882              	.LBB3197:
+ 10883              		.loc 3 598 0
+ 10884 9778 8B85ACDC 		movl	-9044(%rbp), %eax
+ 10884      FFFF
+ 10885 977e F30F6F85 		movdqu	-9040(%rbp), %xmm0
+ 10885      B0DCFFFF 
+ 10886 9786 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 10886      C003
+ 10887              	.LBE3197:
+ 10888              	.LBE3196:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 10889              		.loc 2 519 0
+ 10890 978c F30F7F85 		movdqu	%xmm0, -9072(%rbp)
+ 10890      90DCFFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 10891              		.loc 2 526 0
+ 10892 9794 F30F6F85 		movdqu	-9072(%rbp), %xmm0
+ 10892      90DCFFFF 
+ 10893              	.LBE3195:
+ 10894              	.LBE3194:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 342
+
+
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 10895              		.loc 2 1681 0
+ 10896 979c 660F7F85 		movdqa	%xmm0, -10256(%rbp)
+ 10896      F0D7FFFF 
+ 10897 97a4 F30F6F85 		movdqu	-9104(%rbp), %xmm0
+ 10897      70DCFFFF 
+ 10898 97ac F30F7F85 		movdqu	%xmm0, -9024(%rbp)
+ 10898      C0DCFFFF 
+ 10899 97b4 F30F6F85 		movdqu	-9024(%rbp), %xmm0
+ 10899      C0DCFFFF 
+ 10900 97bc F30F7F85 		movdqu	%xmm0, -8992(%rbp)
+ 10900      E0DCFFFF 
+ 10901 97c4 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 10901      000000
+ 10902 97cb 488985D8 		movq	%rax, -9000(%rbp)
+ 10902      DCFFFF
+ 10903              	.LBB3198:
+ 10904              	.LBB3199:
+ 10905              	.LBB3200:
+ 10906              	.LBB3201:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 10907              		.loc 2 851 0
+ 10908 97d2 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 10908      00000000 
+ 10909 97da F30F7F85 		movdqu	%xmm0, -8960(%rbp)
+ 10909      00DDFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 10910              		.loc 2 854 0
+ 10911 97e2 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 10911      00000000 
+ 10912 97ea F30F6F8D 		movdqu	-8992(%rbp), %xmm1
+ 10912      E0DCFFFF 
+ 10913 97f2 F30F7F8D 		movdqu	%xmm1, -8880(%rbp)
+ 10913      50DDFFFF 
+ 10914 97fa F30F7F85 		movdqu	%xmm0, -8896(%rbp)
+ 10914      40DDFFFF 
+ 10915              	.LBB3202:
+ 10916              	.LBB3203:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 10917              		.loc 2 206 0
+ 10918 9802 F30F6F85 		movdqu	-8896(%rbp), %xmm0
+ 10918      40DDFFFF 
+ 10919 980a F30F6F8D 		movdqu	-8880(%rbp), %xmm1
+ 10919      50DDFFFF 
+ 10920 9812 660FDBC1 		pand	%xmm1, %xmm0
+ 10921              	.LBE3203:
+ 10922              	.LBE3202:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 10923              		.loc 2 854 0
+ 10924 9816 F30F7F85 		movdqu	%xmm0, -8912(%rbp)
+ 10924      30DDFFFF 
+ 10925 981e F30F6F85 		movdqu	-8992(%rbp), %xmm0
+ 10925      E0DCFFFF 
+ 10926 9826 F30F7F85 		movdqu	%xmm0, -8848(%rbp)
+ 10926      70DDFFFF 
+ 10927              	.LBB3204:
+ 10928              	.LBB3205:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 343
+
+
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 10929              		.loc 3 433 0
+ 10930 982e F30F6F85 		movdqu	-8848(%rbp), %xmm0
+ 10930      70DDFFFF 
+ 10931 9836 660F72D0 		psrld	$4, %xmm0
+ 10931      04
+ 10932              	.LBE3205:
+ 10933              	.LBE3204:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 10934              		.loc 2 857 0
+ 10935 983b F30F7F85 		movdqu	%xmm0, -8928(%rbp)
+ 10935      20DDFFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 10936              		.loc 2 859 0
+ 10937 9843 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 10937      00000000 
+ 10938 984b F30F6F8D 		movdqu	-8928(%rbp), %xmm1
+ 10938      20DDFFFF 
+ 10939 9853 F30F7F8D 		movdqu	%xmm1, -8816(%rbp)
+ 10939      90DDFFFF 
+ 10940 985b F30F7F85 		movdqu	%xmm0, -8832(%rbp)
+ 10940      80DDFFFF 
+ 10941              	.LBB3206:
+ 10942              	.LBB3207:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 10943              		.loc 2 206 0
+ 10944 9863 F30F6F85 		movdqu	-8832(%rbp), %xmm0
+ 10944      80DDFFFF 
+ 10945 986b F30F6F8D 		movdqu	-8816(%rbp), %xmm1
+ 10945      90DDFFFF 
+ 10946 9873 660FDBC1 		pand	%xmm1, %xmm0
+ 10947              	.LBE3207:
+ 10948              	.LBE3206:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 10949              		.loc 2 859 0
+ 10950 9877 F30F7F85 		movdqu	%xmm0, -8928(%rbp)
+ 10950      20DDFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 10951              		.loc 2 866 0
+ 10952 987f C785FCDC 		movl	$0, -8964(%rbp)
+ 10952      FFFF0000 
+ 10952      0000
+ 10953 9889 E9BE0100 		jmp	.L156
+ 10953      00
+ 10954              		.cfi_offset 3, -40
+ 10955              		.cfi_offset 12, -32
+ 10956              		.cfi_offset 13, -24
+ 10957              	.L157:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 10958              		.loc 2 868 0
+ 10959 988e 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 10959      00000000 
+ 10960 9896 F30F7F85 		movdqu	%xmm0, -8784(%rbp)
+ 10960      B0DDFFFF 
+ 10961 989e F30F6F85 		movdqu	-8928(%rbp), %xmm0
+ 10961      20DDFFFF 
+ 10962 98a6 F30F7F85 		movdqu	%xmm0, -8800(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 344
+
+
+ 10962      A0DDFFFF 
+ 10963 98ae F30F6F85 		movdqu	-8784(%rbp), %xmm0
+ 10963      B0DDFFFF 
+ 10964 98b6 F30F7F85 		movdqu	%xmm0, -8752(%rbp)
+ 10964      D0DDFFFF 
+ 10965 98be F30F6F85 		movdqu	-8800(%rbp), %xmm0
+ 10965      A0DDFFFF 
+ 10966 98c6 F30F7F85 		movdqu	%xmm0, -8768(%rbp)
+ 10966      C0DDFFFF 
+ 10967              	.LBB3208:
+ 10968              	.LBB3209:
+ 10969              	.LBB3210:
+ 10970              	.LBB3211:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 10971              		.loc 3 529 0
+ 10972 98ce F30F6F8D 		movdqu	-8768(%rbp), %xmm1
+ 10972      C0DDFFFF 
+ 10973 98d6 F30F6F85 		movdqu	-8752(%rbp), %xmm0
+ 10973      D0DDFFFF 
+ 10974 98de 660F3800 		pshufb	%xmm1, %xmm0
+ 10974      C1
+ 10975              	.LBE3211:
+ 10976              	.LBE3210:
+ 10977              	.LBE3209:
+ 10978              	.LBE3208:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 10979              		.loc 2 868 0
+ 10980 98e3 F30F7F85 		movdqu	%xmm0, -8944(%rbp)
+ 10980      10DDFFFF 
+ 10981 98eb F30F6F85 		movdqu	-8912(%rbp), %xmm0
+ 10981      30DDFFFF 
+ 10982 98f3 F30F7F85 		movdqu	%xmm0, -8720(%rbp)
+ 10982      F0DDFFFF 
+ 10983 98fb F30F6F85 		movdqu	-8944(%rbp), %xmm0
+ 10983      10DDFFFF 
+ 10984 9903 F30F7F85 		movdqu	%xmm0, -8736(%rbp)
+ 10984      E0DDFFFF 
+ 10985              	.LBB3212:
+ 10986              	.LBB3213:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 10987              		.loc 2 234 0
+ 10988 990b F30F6F85 		movdqu	-8736(%rbp), %xmm0
+ 10988      E0DDFFFF 
+ 10989 9913 F30F6F8D 		movdqu	-8720(%rbp), %xmm1
+ 10989      F0DDFFFF 
+ 10990 991b 660FEBC1 		por	%xmm1, %xmm0
+ 10991              	.LBE3213:
+ 10992              	.LBE3212:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 10993              		.loc 2 870 0
+ 10994 991f F30F7F85 		movdqu	%xmm0, -8944(%rbp)
+ 10994      10DDFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 10995              		.loc 2 872 0
+ 10996 9927 8B85FCDC 		mov	-8964(%rbp), %eax
+ 10996      FFFF
+ 10997 992d 48C1E004 		salq	$4, %rax
+
GAS LISTING /tmp/ccjbMjHD.s 			page 345
+
+
+ 10998 9931 480385D8 		addq	-9000(%rbp), %rax
+ 10998      DCFFFF
+ 10999 9938 660F6F00 		movdqa	(%rax), %xmm0
+ 11000 993c F30F7F85 		movdqu	%xmm0, -8688(%rbp)
+ 11000      10DEFFFF 
+ 11001 9944 F30F6F85 		movdqu	-8944(%rbp), %xmm0
+ 11001      10DDFFFF 
+ 11002 994c F30F7F85 		movdqu	%xmm0, -8704(%rbp)
+ 11002      00DEFFFF 
+ 11003 9954 F30F6F85 		movdqu	-8688(%rbp), %xmm0
+ 11003      10DEFFFF 
+ 11004 995c F30F7F85 		movdqu	%xmm0, -8656(%rbp)
+ 11004      30DEFFFF 
+ 11005 9964 F30F6F85 		movdqu	-8704(%rbp), %xmm0
+ 11005      00DEFFFF 
+ 11006 996c F30F7F85 		movdqu	%xmm0, -8672(%rbp)
+ 11006      20DEFFFF 
+ 11007              	.LBB3214:
+ 11008              	.LBB3215:
+ 11009              	.LBB3216:
+ 11010              	.LBB3217:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11011              		.loc 3 529 0
+ 11012 9974 F30F6F8D 		movdqu	-8672(%rbp), %xmm1
+ 11012      20DEFFFF 
+ 11013 997c F30F6F85 		movdqu	-8656(%rbp), %xmm0
+ 11013      30DEFFFF 
+ 11014 9984 660F3800 		pshufb	%xmm1, %xmm0
+ 11014      C1
+ 11015              	.LBE3217:
+ 11016              	.LBE3216:
+ 11017              	.LBE3215:
+ 11018              	.LBE3214:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 11019              		.loc 2 872 0
+ 11020 9989 F30F7F85 		movdqu	%xmm0, -8944(%rbp)
+ 11020      10DDFFFF 
+ 11021 9991 F30F6F85 		movdqu	-8960(%rbp), %xmm0
+ 11021      00DDFFFF 
+ 11022 9999 F30F7F85 		movdqu	%xmm0, -8624(%rbp)
+ 11022      50DEFFFF 
+ 11023 99a1 F30F6F85 		movdqu	-8944(%rbp), %xmm0
+ 11023      10DDFFFF 
+ 11024 99a9 F30F7F85 		movdqu	%xmm0, -8640(%rbp)
+ 11024      40DEFFFF 
+ 11025              	.LBB3218:
+ 11026              	.LBB3219:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 11027              		.loc 2 234 0
+ 11028 99b1 F30F6F85 		movdqu	-8640(%rbp), %xmm0
+ 11028      40DEFFFF 
+ 11029 99b9 F30F6F8D 		movdqu	-8624(%rbp), %xmm1
+ 11029      50DEFFFF 
+ 11030 99c1 660FEBC1 		por	%xmm1, %xmm0
+ 11031              	.LBE3219:
+ 11032              	.LBE3218:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+
GAS LISTING /tmp/ccjbMjHD.s 			page 346
+
+
+ 11033              		.loc 2 874 0
+ 11034 99c5 F30F7F85 		movdqu	%xmm0, -8960(%rbp)
+ 11034      00DDFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 11035              		.loc 2 876 0
+ 11036 99cd 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 11036      00000000 
+ 11037 99d5 F30F6F8D 		movdqu	-8928(%rbp), %xmm1
+ 11037      20DDFFFF 
+ 11038 99dd F30F7F8D 		movdqu	%xmm1, -8592(%rbp)
+ 11038      70DEFFFF 
+ 11039 99e5 F30F7F85 		movdqu	%xmm0, -8608(%rbp)
+ 11039      60DEFFFF 
+ 11040              	.LBB3220:
+ 11041              	.LBB3221:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 11042              		.loc 2 290 0
+ 11043 99ed F30F6F8D 		movdqu	-8608(%rbp), %xmm1
+ 11043      60DEFFFF 
+ 11044 99f5 F30F6F85 		movdqu	-8592(%rbp), %xmm0
+ 11044      70DEFFFF 
+ 11045 99fd 660FF8C1 		psubb	%xmm1, %xmm0
+ 11046              	.LBE3221:
+ 11047              	.LBE3220:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 11048              		.loc 2 876 0
+ 11049 9a01 F30F7F85 		movdqu	%xmm0, -8928(%rbp)
+ 11049      20DDFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 11050              		.loc 2 878 0
+ 11051 9a09 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 11051      00000000 
+ 11052 9a11 F30F6F8D 		movdqu	-8928(%rbp), %xmm1
+ 11052      20DDFFFF 
+ 11053 9a19 F30F7F8D 		movdqu	%xmm1, -8560(%rbp)
+ 11053      90DEFFFF 
+ 11054 9a21 F30F7F85 		movdqu	%xmm0, -8576(%rbp)
+ 11054      80DEFFFF 
+ 11055              	.LBB3222:
+ 11056              	.LBB3223:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 11057              		.loc 2 206 0
+ 11058 9a29 F30F6F85 		movdqu	-8576(%rbp), %xmm0
+ 11058      80DEFFFF 
+ 11059 9a31 F30F6F8D 		movdqu	-8560(%rbp), %xmm1
+ 11059      90DEFFFF 
+ 11060 9a39 660FDBC1 		pand	%xmm1, %xmm0
+ 11061              	.LBE3223:
+ 11062              	.LBE3222:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 11063              		.loc 2 878 0
+ 11064 9a3d F30F7F85 		movdqu	%xmm0, -8928(%rbp)
+ 11064      20DDFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 11065              		.loc 2 866 0
+ 11066 9a45 8385FCDC 		addl	$1, -8964(%rbp)
+ 11066      FFFF01
+
GAS LISTING /tmp/ccjbMjHD.s 			page 347
+
+
+ 11067              	.L156:
+ 11068 9a4c 83BDFCDC 		cmpl	$15, -8964(%rbp)
+ 11068      FFFF0F
+ 11069 9a53 0F8635FE 		jbe	.L157
+ 11069      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 11070              		.loc 2 882 0
+ 11071 9a59 F30F6F85 		movdqu	-8960(%rbp), %xmm0
+ 11071      00DDFFFF 
+ 11072              	.LBE3201:
+ 11073              	.LBE3200:
+ 11074              	.LBE3199:
+ 11075              	.LBE3198:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 11076              		.loc 2 1682 0
+ 11077 9a61 660F7F85 		movdqa	%xmm0, -10272(%rbp)
+ 11077      E0D7FFFF 
+ 11078              	.LBB3224:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 11079              		.loc 2 1683 0
+ 11080 9a69 660F6F85 		movdqa	-10272(%rbp), %xmm0
+ 11080      E0D7FFFF 
+ 11081 9a71 F30F7F85 		movdqu	%xmm0, -9776(%rbp)
+ 11081      D0D9FFFF 
+ 11082 9a79 E8000000 		call	KDbgWriterGet at PLT
+ 11082      00
+ 11083 9a7e 4885C0   		testq	%rax, %rax
+ 11084 9a81 7479     		je	.L159
+ 11085 9a83 BF010000 		movl	$1, %edi
+ 11085      00
+ 11086 9a88 E8000000 		call	KDbgCondToFlag at PLT
+ 11086      00
+ 11087 9a8d 4889C6   		movq	%rax, %rsi
+ 11088 9a90 BF100000 		movl	$16, %edi
+ 11088      00
+ 11089 9a95 E8000000 		call	KDbgTestModConds at PLT
+ 11089      00
+ 11090 9a9a 84C0     		testb	%al, %al
+ 11091 9a9c 745E     		je	.L159
+ 11092 9a9e 8B85DCD9 		movl	-9764(%rbp), %eax
+ 11092      FFFF
+ 11093 9aa4 89C7     		movl	%eax, %edi
+ 11094 9aa6 E85565FF 		call	bswap_32
+ 11094      FF
+ 11095 9aab 4189C5   		movl	%eax, %r13d
+ 11096 9aae 8B85D8D9 		movl	-9768(%rbp), %eax
+ 11096      FFFF
+ 11097 9ab4 89C7     		movl	%eax, %edi
+ 11098 9ab6 E84565FF 		call	bswap_32
+ 11098      FF
+ 11099 9abb 4189C4   		movl	%eax, %r12d
+ 11100 9abe 8B85D4D9 		movl	-9772(%rbp), %eax
+ 11100      FFFF
+ 11101 9ac4 89C7     		movl	%eax, %edi
+ 11102 9ac6 E83565FF 		call	bswap_32
+ 11102      FF
+ 11103 9acb 89C3     		movl	%eax, %ebx
+
GAS LISTING /tmp/ccjbMjHD.s 			page 348
+
+
+ 11104 9acd 8B85D0D9 		movl	-9776(%rbp), %eax
+ 11104      FFFF
+ 11105 9ad3 89C7     		movl	%eax, %edi
+ 11106 9ad5 E82665FF 		call	bswap_32
+ 11106      FF
+ 11107 9ada 4589E9   		movl	%r13d, %r9d
+ 11108 9add 4589E0   		movl	%r12d, %r8d
+ 11109 9ae0 89D9     		movl	%ebx, %ecx
+ 11110 9ae2 89C2     		movl	%eax, %edx
+ 11111 9ae4 488D3500 		leaq	.LC0(%rip), %rsi
+ 11111      000000
+ 11112 9aeb 488D3D00 		leaq	.LC1(%rip), %rdi
+ 11112      000000
+ 11113 9af2 B8000000 		movl	$0, %eax
+ 11113      00
+ 11114 9af7 E8000000 		call	KDbgMsg at PLT
+ 11114      00
+ 11115              	.L159:
+ 11116 9afc 660F6F85 		movdqa	-10272(%rbp), %xmm0
+ 11116      E0D7FFFF 
+ 11117 9b04 F30F7F85 		movdqu	%xmm0, -8544(%rbp)
+ 11117      A0DEFFFF 
+ 11118              	.LBE3224:
+ 11119              	.LBB3225:
+ 11120              	.LBB3226:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 11121              		.loc 2 667 0
+ 11122 9b0c 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 11122      00000000 
+ 11123 9b14 F30F6F8D 		movdqu	-8544(%rbp), %xmm1
+ 11123      A0DEFFFF 
+ 11124 9b1c F30F7F8D 		movdqu	%xmm1, -8512(%rbp)
+ 11124      C0DEFFFF 
+ 11125 9b24 F30F7F85 		movdqu	%xmm0, -8528(%rbp)
+ 11125      B0DEFFFF 
+ 11126 9b2c F30F6F85 		movdqu	-8512(%rbp), %xmm0
+ 11126      C0DEFFFF 
+ 11127 9b34 F30F7F85 		movdqu	%xmm0, -8480(%rbp)
+ 11127      E0DEFFFF 
+ 11128 9b3c F30F6F85 		movdqu	-8528(%rbp), %xmm0
+ 11128      B0DEFFFF 
+ 11129 9b44 F30F7F85 		movdqu	%xmm0, -8496(%rbp)
+ 11129      D0DEFFFF 
+ 11130              	.LBB3227:
+ 11131              	.LBB3228:
+ 11132              	.LBB3229:
+ 11133              	.LBB3230:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11134              		.loc 3 529 0
+ 11135 9b4c F30F6F8D 		movdqu	-8496(%rbp), %xmm1
+ 11135      D0DEFFFF 
+ 11136 9b54 F30F6F85 		movdqu	-8480(%rbp), %xmm0
+ 11136      E0DEFFFF 
+ 11137 9b5c 660F3800 		pshufb	%xmm1, %xmm0
+ 11137      C1
+ 11138              	.LBE3230:
+ 11139              	.LBE3229:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 349
+
+
+ 11140              	.LBE3228:
+ 11141              	.LBE3227:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 11142              		.loc 2 667 0
+ 11143 9b61 F30F7F85 		movdqu	%xmm0, -8544(%rbp)
+ 11143      A0DEFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 11144              		.loc 2 668 0
+ 11145 9b69 F30F6F85 		movdqu	-8544(%rbp), %xmm0
+ 11145      A0DEFFFF 
+ 11146              	.LBE3226:
+ 11147              	.LBE3225:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 11148              		.loc 2 1684 0
+ 11149 9b71 660F7F85 		movdqa	%xmm0, -10272(%rbp)
+ 11149      E0D7FFFF 
+ 11150              	.LBB3231:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 11151              		.loc 2 1685 0
+ 11152 9b79 660F6F85 		movdqa	-10272(%rbp), %xmm0
+ 11152      E0D7FFFF 
+ 11153 9b81 F30F7F85 		movdqu	%xmm0, -9792(%rbp)
+ 11153      C0D9FFFF 
+ 11154 9b89 E8000000 		call	KDbgWriterGet at PLT
+ 11154      00
+ 11155 9b8e 4885C0   		testq	%rax, %rax
+ 11156 9b91 7479     		je	.L161
+ 11157 9b93 BF010000 		movl	$1, %edi
+ 11157      00
+ 11158 9b98 E8000000 		call	KDbgCondToFlag at PLT
+ 11158      00
+ 11159 9b9d 4889C6   		movq	%rax, %rsi
+ 11160 9ba0 BF100000 		movl	$16, %edi
+ 11160      00
+ 11161 9ba5 E8000000 		call	KDbgTestModConds at PLT
+ 11161      00
+ 11162 9baa 84C0     		testb	%al, %al
+ 11163 9bac 745E     		je	.L161
+ 11164 9bae 8B85CCD9 		movl	-9780(%rbp), %eax
+ 11164      FFFF
+ 11165 9bb4 89C7     		movl	%eax, %edi
+ 11166 9bb6 E84564FF 		call	bswap_32
+ 11166      FF
+ 11167 9bbb 4189C5   		movl	%eax, %r13d
+ 11168 9bbe 8B85C8D9 		movl	-9784(%rbp), %eax
+ 11168      FFFF
+ 11169 9bc4 89C7     		movl	%eax, %edi
+ 11170 9bc6 E83564FF 		call	bswap_32
+ 11170      FF
+ 11171 9bcb 4189C4   		movl	%eax, %r12d
+ 11172 9bce 8B85C4D9 		movl	-9788(%rbp), %eax
+ 11172      FFFF
+ 11173 9bd4 89C7     		movl	%eax, %edi
+ 11174 9bd6 E82564FF 		call	bswap_32
+ 11174      FF
+ 11175 9bdb 89C3     		movl	%eax, %ebx
+ 11176 9bdd 8B85C0D9 		movl	-9792(%rbp), %eax
+
GAS LISTING /tmp/ccjbMjHD.s 			page 350
+
+
+ 11176      FFFF
+ 11177 9be3 89C7     		movl	%eax, %edi
+ 11178 9be5 E81664FF 		call	bswap_32
+ 11178      FF
+ 11179 9bea 4589E9   		movl	%r13d, %r9d
+ 11180 9bed 4589E0   		movl	%r12d, %r8d
+ 11181 9bf0 89D9     		movl	%ebx, %ecx
+ 11182 9bf2 89C2     		movl	%eax, %edx
+ 11183 9bf4 488D3500 		leaq	.LC2(%rip), %rsi
+ 11183      000000
+ 11184 9bfb 488D3D00 		leaq	.LC1(%rip), %rdi
+ 11184      000000
+ 11185 9c02 B8000000 		movl	$0, %eax
+ 11185      00
+ 11186 9c07 E8000000 		call	KDbgMsg at PLT
+ 11186      00
+ 11187              	.L161:
+ 11188 9c0c 660F6F85 		movdqa	-10272(%rbp), %xmm0
+ 11188      E0D7FFFF 
+ 11189 9c14 F30F7F85 		movdqu	%xmm0, -8448(%rbp)
+ 11189      00DFFFFF 
+ 11190 9c1c 660F6F85 		movdqa	-10256(%rbp), %xmm0
+ 11190      F0D7FFFF 
+ 11191 9c24 F30F7F85 		movdqu	%xmm0, -8464(%rbp)
+ 11191      F0DEFFFF 
+ 11192              	.LBE3231:
+ 11193              	.LBB3232:
+ 11194              	.LBB3233:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 11195              		.loc 2 178 0
+ 11196 9c2c F30F6F85 		movdqu	-8464(%rbp), %xmm0
+ 11196      F0DEFFFF 
+ 11197 9c34 F30F6F8D 		movdqu	-8448(%rbp), %xmm1
+ 11197      00DFFFFF 
+ 11198 9c3c 660FEFC1 		pxor	%xmm1, %xmm0
+ 11199              	.LBE3233:
+ 11200              	.LBE3232:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 11201              		.loc 2 1686 0
+ 11202 9c40 660F7F85 		movdqa	%xmm0, -10272(%rbp)
+ 11202      E0D7FFFF 
+ 11203              	.LBB3234:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 11204              		.loc 2 1687 0
+ 11205 9c48 660F6F85 		movdqa	-10272(%rbp), %xmm0
+ 11205      E0D7FFFF 
+ 11206 9c50 F30F7F85 		movdqu	%xmm0, -9808(%rbp)
+ 11206      B0D9FFFF 
+ 11207 9c58 E8000000 		call	KDbgWriterGet at PLT
+ 11207      00
+ 11208 9c5d 4885C0   		testq	%rax, %rax
+ 11209 9c60 7479     		je	.L163
+ 11210 9c62 BF010000 		movl	$1, %edi
+ 11210      00
+ 11211 9c67 E8000000 		call	KDbgCondToFlag at PLT
+ 11211      00
+ 11212 9c6c 4889C6   		movq	%rax, %rsi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 351
+
+
+ 11213 9c6f BF100000 		movl	$16, %edi
+ 11213      00
+ 11214 9c74 E8000000 		call	KDbgTestModConds at PLT
+ 11214      00
+ 11215 9c79 84C0     		testb	%al, %al
+ 11216 9c7b 745E     		je	.L163
+ 11217 9c7d 8B85BCD9 		movl	-9796(%rbp), %eax
+ 11217      FFFF
+ 11218 9c83 89C7     		movl	%eax, %edi
+ 11219 9c85 E87663FF 		call	bswap_32
+ 11219      FF
+ 11220 9c8a 4189C5   		movl	%eax, %r13d
+ 11221 9c8d 8B85B8D9 		movl	-9800(%rbp), %eax
+ 11221      FFFF
+ 11222 9c93 89C7     		movl	%eax, %edi
+ 11223 9c95 E86663FF 		call	bswap_32
+ 11223      FF
+ 11224 9c9a 4189C4   		movl	%eax, %r12d
+ 11225 9c9d 8B85B4D9 		movl	-9804(%rbp), %eax
+ 11225      FFFF
+ 11226 9ca3 89C7     		movl	%eax, %edi
+ 11227 9ca5 E85663FF 		call	bswap_32
+ 11227      FF
+ 11228 9caa 89C3     		movl	%eax, %ebx
+ 11229 9cac 8B85B0D9 		movl	-9808(%rbp), %eax
+ 11229      FFFF
+ 11230 9cb2 89C7     		movl	%eax, %edi
+ 11231 9cb4 E84763FF 		call	bswap_32
+ 11231      FF
+ 11232 9cb9 4589E9   		movl	%r13d, %r9d
+ 11233 9cbc 4589E0   		movl	%r12d, %r8d
+ 11234 9cbf 89D9     		movl	%ebx, %ecx
+ 11235 9cc1 89C2     		movl	%eax, %edx
+ 11236 9cc3 488D3500 		leaq	.LC3(%rip), %rsi
+ 11236      000000
+ 11237 9cca 488D3D00 		leaq	.LC1(%rip), %rdi
+ 11237      000000
+ 11238 9cd1 B8000000 		movl	$0, %eax
+ 11238      00
+ 11239 9cd6 E8000000 		call	KDbgMsg at PLT
+ 11239      00
+ 11240              	.L163:
+ 11241 9cdb 660F6F85 		movdqa	-10272(%rbp), %xmm0
+ 11241      E0D7FFFF 
+ 11242 9ce3 F30F7F85 		movdqu	%xmm0, -8432(%rbp)
+ 11242      10DFFFFF 
+ 11243 9ceb F30F6F85 		movdqu	-8432(%rbp), %xmm0
+ 11243      10DFFFFF 
+ 11244 9cf3 F30F7F85 		movdqu	%xmm0, -8400(%rbp)
+ 11244      30DFFFFF 
+ 11245              	.LBE3234:
+ 11246              	.LBB3235:
+ 11247              	.LBB3236:
+ 11248              	.LBB3237:
+ 11249              	.LBB3238:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 11250              		.loc 3 450 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 352
+
+
+ 11251 9cfb F30F6F85 		movdqu	-8400(%rbp), %xmm0
+ 11251      30DFFFFF 
+ 11252 9d03 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 11252      FF
+ 11253              	.LBE3238:
+ 11254              	.LBE3237:
+ 11255              	.LBE3236:
+ 11256              	.LBE3235:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 11257              		.loc 2 1688 0
+ 11258 9d08 660F7F85 		movdqa	%xmm0, -10272(%rbp)
+ 11258      E0D7FFFF 
+ 11259              	.LBB3239:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 11260              		.loc 2 1689 0
+ 11261 9d10 660F6F85 		movdqa	-10272(%rbp), %xmm0
+ 11261      E0D7FFFF 
+ 11262 9d18 F30F7F85 		movdqu	%xmm0, -9824(%rbp)
+ 11262      A0D9FFFF 
+ 11263 9d20 E8000000 		call	KDbgWriterGet at PLT
+ 11263      00
+ 11264 9d25 4885C0   		testq	%rax, %rax
+ 11265 9d28 7479     		je	.L165
+ 11266 9d2a BF010000 		movl	$1, %edi
+ 11266      00
+ 11267 9d2f E8000000 		call	KDbgCondToFlag at PLT
+ 11267      00
+ 11268 9d34 4889C6   		movq	%rax, %rsi
+ 11269 9d37 BF100000 		movl	$16, %edi
+ 11269      00
+ 11270 9d3c E8000000 		call	KDbgTestModConds at PLT
+ 11270      00
+ 11271 9d41 84C0     		testb	%al, %al
+ 11272 9d43 745E     		je	.L165
+ 11273 9d45 8B85ACD9 		movl	-9812(%rbp), %eax
+ 11273      FFFF
+ 11274 9d4b 89C7     		movl	%eax, %edi
+ 11275 9d4d E8AE62FF 		call	bswap_32
+ 11275      FF
+ 11276 9d52 4189C5   		movl	%eax, %r13d
+ 11277 9d55 8B85A8D9 		movl	-9816(%rbp), %eax
+ 11277      FFFF
+ 11278 9d5b 89C7     		movl	%eax, %edi
+ 11279 9d5d E89E62FF 		call	bswap_32
+ 11279      FF
+ 11280 9d62 4189C4   		movl	%eax, %r12d
+ 11281 9d65 8B85A4D9 		movl	-9820(%rbp), %eax
+ 11281      FFFF
+ 11282 9d6b 89C7     		movl	%eax, %edi
+ 11283 9d6d E88E62FF 		call	bswap_32
+ 11283      FF
+ 11284 9d72 89C3     		movl	%eax, %ebx
+ 11285 9d74 8B85A0D9 		movl	-9824(%rbp), %eax
+ 11285      FFFF
+ 11286 9d7a 89C7     		movl	%eax, %edi
+ 11287 9d7c E87F62FF 		call	bswap_32
+ 11287      FF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 353
+
+
+ 11288 9d81 4589E9   		movl	%r13d, %r9d
+ 11289 9d84 4589E0   		movl	%r12d, %r8d
+ 11290 9d87 89D9     		movl	%ebx, %ecx
+ 11291 9d89 89C2     		movl	%eax, %edx
+ 11292 9d8b 488D3500 		leaq	.LC4(%rip), %rsi
+ 11292      000000
+ 11293 9d92 488D3D00 		leaq	.LC1(%rip), %rdi
+ 11293      000000
+ 11294 9d99 B8000000 		movl	$0, %eax
+ 11294      00
+ 11295 9d9e E8000000 		call	KDbgMsg at PLT
+ 11295      00
+ 11296              	.L165:
+ 11297              	.LBE3239:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 11298              		.loc 2 1690 0
+ 11299 9da3 660F6F85 		movdqa	-10272(%rbp), %xmm0
+ 11299      E0D7FFFF 
+ 11300              	.LBE3193:
+ 11301              	.LBE3192:
+1913:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1914:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #define KE256_1(offset,rcon)                            \
+1915:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn3)(v1,rcon); \
+1916:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(ShiftXorColumns) (v0);            \
+1917:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v0  = AESBCMEMBER(VecXor) (v0, k);                  \
+1918:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[offset] = v0
+1919:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1920:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #define KE256_2(offset) \
+1921:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     k   = AESBCMEMBER(AesKeyGenAssistColumn2)(v0);      \
+1922:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(ShiftXorColumns) (v1);            \
+1923:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v1  = AESBCMEMBER(VecXor) (v1, k);                  \
+1924:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     round_keys[offset] = v1
+1925:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1926:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(2,0x01);    /* k8  : k9  : k10 : k11 */
+ 11302              		.loc 2 1926 0
+ 11303 9dab F30F7F85 		movdqu	%xmm0, -9152(%rbp)
+ 11303      40DCFFFF 
+ 11304 9db3 F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 11304      20DCFFFF 
+ 11305 9dbb F30F7F85 		movdqu	%xmm0, -8384(%rbp)
+ 11305      40DFFFFF 
+ 11306              	.LBB3240:
+ 11307              	.LBB3241:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 11308              		.loc 2 1565 0
+ 11309 9dc3 F30F6F85 		movdqu	-8384(%rbp), %xmm0
+ 11309      40DFFFFF 
+ 11310 9dcb 660F7F85 		movdqa	%xmm0, -10240(%rbp)
+ 11310      00D8FFFF 
+ 11311 9dd3 660F6F85 		movdqa	-10240(%rbp), %xmm0
+ 11311      00D8FFFF 
+ 11312 9ddb F30F7F85 		movdqu	%xmm0, -8368(%rbp)
+ 11312      50DFFFFF 
+ 11313              	.LBB3242:
+ 11314              	.LBB3243:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 11315              		.loc 2 1278 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 354
+
+
+ 11316 9de3 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 11316      00000000 
+ 11317 9deb F30F6F8D 		movdqu	-8368(%rbp), %xmm1
+ 11317      50DFFFFF 
+ 11318 9df3 F30F7F8D 		movdqu	%xmm1, -8336(%rbp)
+ 11318      70DFFFFF 
+ 11319 9dfb F30F7F85 		movdqu	%xmm0, -8352(%rbp)
+ 11319      60DFFFFF 
+ 11320 9e03 F30F6F85 		movdqu	-8336(%rbp), %xmm0
+ 11320      70DFFFFF 
+ 11321 9e0b F30F7F85 		movdqu	%xmm0, -8304(%rbp)
+ 11321      90DFFFFF 
+ 11322 9e13 F30F6F85 		movdqu	-8352(%rbp), %xmm0
+ 11322      60DFFFFF 
+ 11323 9e1b F30F7F85 		movdqu	%xmm0, -8320(%rbp)
+ 11323      80DFFFFF 
+ 11324              	.LBB3244:
+ 11325              	.LBB3245:
+ 11326              	.LBB3246:
+ 11327              	.LBB3247:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11328              		.loc 3 529 0
+ 11329 9e23 F30F6F8D 		movdqu	-8320(%rbp), %xmm1
+ 11329      80DFFFFF 
+ 11330 9e2b F30F6F85 		movdqu	-8304(%rbp), %xmm0
+ 11330      90DFFFFF 
+ 11331 9e33 660F3800 		pshufb	%xmm1, %xmm0
+ 11331      C1
+ 11332              	.LBE3247:
+ 11333              	.LBE3246:
+ 11334              	.LBE3245:
+ 11335              	.LBE3244:
+ 11336              	.LBE3243:
+ 11337              	.LBE3242:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11338              		.loc 2 1567 0
+ 11339 9e38 660F7F85 		movdqa	%xmm0, -10240(%rbp)
+ 11339      00D8FFFF 
+ 11340 9e40 660F6F85 		movdqa	-10240(%rbp), %xmm0
+ 11340      00D8FFFF 
+ 11341 9e48 660FEF85 		pxor	-8384(%rbp), %xmm0
+ 11341      40DFFFFF 
+ 11342 9e50 F30F7F85 		movdqu	%xmm0, -8384(%rbp)
+ 11342      40DFFFFF 
+ 11343 9e58 660F6F85 		movdqa	-10240(%rbp), %xmm0
+ 11343      00D8FFFF 
+ 11344 9e60 F30F7F85 		movdqu	%xmm0, -8288(%rbp)
+ 11344      A0DFFFFF 
+ 11345              	.LBB3248:
+ 11346              	.LBB3249:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 11347              		.loc 2 1278 0
+ 11348 9e68 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 11348      00000000 
+ 11349 9e70 F30F6F8D 		movdqu	-8288(%rbp), %xmm1
+ 11349      A0DFFFFF 
+ 11350 9e78 F30F7F8D 		movdqu	%xmm1, -8256(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 355
+
+
+ 11350      C0DFFFFF 
+ 11351 9e80 F30F7F85 		movdqu	%xmm0, -8272(%rbp)
+ 11351      B0DFFFFF 
+ 11352 9e88 F30F6F85 		movdqu	-8256(%rbp), %xmm0
+ 11352      C0DFFFFF 
+ 11353 9e90 F30F7F85 		movdqu	%xmm0, -8224(%rbp)
+ 11353      E0DFFFFF 
+ 11354 9e98 F30F6F85 		movdqu	-8272(%rbp), %xmm0
+ 11354      B0DFFFFF 
+ 11355 9ea0 F30F7F85 		movdqu	%xmm0, -8240(%rbp)
+ 11355      D0DFFFFF 
+ 11356              	.LBB3250:
+ 11357              	.LBB3251:
+ 11358              	.LBB3252:
+ 11359              	.LBB3253:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11360              		.loc 3 529 0
+ 11361 9ea8 F30F6F8D 		movdqu	-8240(%rbp), %xmm1
+ 11361      D0DFFFFF 
+ 11362 9eb0 F30F6F85 		movdqu	-8224(%rbp), %xmm0
+ 11362      E0DFFFFF 
+ 11363 9eb8 660F3800 		pshufb	%xmm1, %xmm0
+ 11363      C1
+ 11364              	.LBE3253:
+ 11365              	.LBE3252:
+ 11366              	.LBE3251:
+ 11367              	.LBE3250:
+ 11368              	.LBE3249:
+ 11369              	.LBE3248:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11370              		.loc 2 1568 0
+ 11371 9ebd 660F7F85 		movdqa	%xmm0, -10240(%rbp)
+ 11371      00D8FFFF 
+ 11372 9ec5 660F6F85 		movdqa	-10240(%rbp), %xmm0
+ 11372      00D8FFFF 
+ 11373 9ecd 660FEF85 		pxor	-8384(%rbp), %xmm0
+ 11373      40DFFFFF 
+ 11374 9ed5 F30F7F85 		movdqu	%xmm0, -8384(%rbp)
+ 11374      40DFFFFF 
+ 11375 9edd 660F6F85 		movdqa	-10240(%rbp), %xmm0
+ 11375      00D8FFFF 
+ 11376 9ee5 F30F7F85 		movdqu	%xmm0, -8208(%rbp)
+ 11376      F0DFFFFF 
+ 11377              	.LBB3254:
+ 11378              	.LBB3255:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 11379              		.loc 2 1278 0
+ 11380 9eed 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 11380      00000000 
+ 11381 9ef5 F30F6F8D 		movdqu	-8208(%rbp), %xmm1
+ 11381      F0DFFFFF 
+ 11382 9efd F30F7F8D 		movdqu	%xmm1, -8176(%rbp)
+ 11382      10E0FFFF 
+ 11383 9f05 F30F7F85 		movdqu	%xmm0, -8192(%rbp)
+ 11383      00E0FFFF 
+ 11384 9f0d F30F6F85 		movdqu	-8176(%rbp), %xmm0
+ 11384      10E0FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 356
+
+
+ 11385 9f15 F30F7F85 		movdqu	%xmm0, -8144(%rbp)
+ 11385      30E0FFFF 
+ 11386 9f1d F30F6F85 		movdqu	-8192(%rbp), %xmm0
+ 11386      00E0FFFF 
+ 11387 9f25 F30F7F85 		movdqu	%xmm0, -8160(%rbp)
+ 11387      20E0FFFF 
+ 11388              	.LBB3256:
+ 11389              	.LBB3257:
+ 11390              	.LBB3258:
+ 11391              	.LBB3259:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11392              		.loc 3 529 0
+ 11393 9f2d F30F6F8D 		movdqu	-8160(%rbp), %xmm1
+ 11393      20E0FFFF 
+ 11394 9f35 F30F6F85 		movdqu	-8144(%rbp), %xmm0
+ 11394      30E0FFFF 
+ 11395 9f3d 660F3800 		pshufb	%xmm1, %xmm0
+ 11395      C1
+ 11396              	.LBE3259:
+ 11397              	.LBE3258:
+ 11398              	.LBE3257:
+ 11399              	.LBE3256:
+ 11400              	.LBE3255:
+ 11401              	.LBE3254:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11402              		.loc 2 1569 0
+ 11403 9f42 660F7F85 		movdqa	%xmm0, -10240(%rbp)
+ 11403      00D8FFFF 
+ 11404 9f4a 660F6F85 		movdqa	-10240(%rbp), %xmm0
+ 11404      00D8FFFF 
+ 11405 9f52 660FEF85 		pxor	-8384(%rbp), %xmm0
+ 11405      40DFFFFF 
+ 11406 9f5a F30F7F85 		movdqu	%xmm0, -8384(%rbp)
+ 11406      40DFFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 11407              		.loc 2 1571 0
+ 11408 9f62 F30F6F85 		movdqu	-8384(%rbp), %xmm0
+ 11408      40DFFFFF 
+ 11409              	.LBE3241:
+ 11410              	.LBE3240:
+ 11411              		.loc 2 1926 0
+ 11412 9f6a F30F7F85 		movdqu	%xmm0, -9184(%rbp)
+ 11412      20DCFFFF 
+ 11413 9f72 F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 11413      20DCFFFF 
+ 11414 9f7a F30F7F85 		movdqu	%xmm0, -8112(%rbp)
+ 11414      50E0FFFF 
+ 11415 9f82 F30F6F85 		movdqu	-9152(%rbp), %xmm0
+ 11415      40DCFFFF 
+ 11416 9f8a F30F7F85 		movdqu	%xmm0, -8128(%rbp)
+ 11416      40E0FFFF 
+ 11417              	.LBB3260:
+ 11418              	.LBB3261:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 11419              		.loc 2 178 0
+ 11420 9f92 F30F6F85 		movdqu	-8128(%rbp), %xmm0
+ 11420      40E0FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 357
+
+
+ 11421 9f9a F30F6F8D 		movdqu	-8112(%rbp), %xmm1
+ 11421      50E0FFFF 
+ 11422 9fa2 660FEFC1 		pxor	%xmm1, %xmm0
+ 11423              	.LBE3261:
+ 11424              	.LBE3260:
+ 11425              		.loc 2 1926 0
+ 11426 9fa6 F30F7F85 		movdqu	%xmm0, -9184(%rbp)
+ 11426      20DCFFFF 
+ 11427 9fae 488B8598 		movq	-9832(%rbp), %rax
+ 11427      D9FFFF
+ 11428 9fb5 4883C020 		addq	$32, %rax
+ 11429 9fb9 F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 11429      20DCFFFF 
+ 11430 9fc1 F30F7F00 		movdqu	%xmm0, (%rax)
+ 11431 9fc5 F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 11431      20DCFFFF 
+ 11432 9fcd F30F7F85 		movdqu	%xmm0, -8096(%rbp)
+ 11432      60E0FFFF 
+ 11433              	.LBB3262:
+ 11434              	.LBB3263:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 11435              		.loc 2 1656 0
+ 11436 9fd5 F30F6F85 		movdqu	-8096(%rbp), %xmm0
+ 11436      60E0FFFF 
+ 11437 9fdd F30F7F85 		movdqu	%xmm0, -9744(%rbp)
+ 11437      F0D9FFFF 
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 11438              		.loc 2 1657 0
+ 11439 9fe5 8B85FCD9 		movl	-9732(%rbp), %eax
+ 11439      FFFF
+ 11440 9feb 898578E0 		movl	%eax, -8072(%rbp)
+ 11440      FFFF
+ 11441              	.LBB3264:
+ 11442              	.LBB3265:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 11443              		.loc 2 740 0
+ 11444 9ff1 8B8578E0 		movl	-8072(%rbp), %eax
+ 11444      FFFF
+ 11445 9ff7 8985E0D9 		movl	%eax, -9760(%rbp)
+ 11445      FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 11446              		.loc 2 741 0
+ 11447 9ffd C7857CE0 		movl	$0, -8068(%rbp)
+ 11447      FFFF0000 
+ 11447      0000
+ 11448 a007 EB36     		jmp	.L166
+ 11449              	.L167:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 11450              		.loc 2 742 0
+ 11451 a009 8B8D7CE0 		movl	-8068(%rbp), %ecx
+ 11451      FFFF
+ 11452 a00f 8B857CE0 		movl	-8068(%rbp), %eax
+ 11452      FFFF
+ 11453 a015 89C0     		mov	%eax, %eax
+ 11454 a017 0FB68405 		movzbl	-9760(%rbp,%rax), %eax
+ 11454      E0D9FFFF 
+ 11455 a01f 0FB6C0   		movzbl	%al, %eax
+
GAS LISTING /tmp/ccjbMjHD.s 			page 358
+
+
+ 11456 a022 89C2     		mov	%eax, %edx
+ 11457 a024 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBox(%rip), %rax
+ 11457      000000
+ 11458 a02b 0FB61402 		movzbl	(%rdx,%rax), %edx
+ 11459 a02f 89C8     		mov	%ecx, %eax
+ 11460 a031 889405E0 		movb	%dl, -9760(%rbp,%rax)
+ 11460      D9FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 11461              		.loc 2 741 0
+ 11462 a038 83857CE0 		addl	$1, -8068(%rbp)
+ 11462      FFFF01
+ 11463              	.L166:
+ 11464 a03f 83BD7CE0 		cmpl	$3, -8068(%rbp)
+ 11464      FFFF03
+ 11465 a046 76C1     		jbe	.L167
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 11466              		.loc 2 743 0
+ 11467 a048 8B85E0D9 		movl	-9760(%rbp), %eax
+ 11467      FFFF
+ 11468              	.LBE3265:
+ 11469              	.LBE3264:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 11470              		.loc 2 1657 0
+ 11471 a04e 898574E0 		movl	%eax, -8076(%rbp)
+ 11471      FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 11472              		.loc 2 1659 0
+ 11473 a054 8B8574E0 		movl	-8076(%rbp), %eax
+ 11473      FFFF
+ 11474 a05a 8985FCD9 		movl	%eax, -9732(%rbp)
+ 11474      FFFF
+ 11475 a060 8B85FCD9 		movl	-9732(%rbp), %eax
+ 11475      FFFF
+ 11476 a066 8985F8D9 		movl	%eax, -9736(%rbp)
+ 11476      FFFF
+ 11477 a06c 8B85F8D9 		movl	-9736(%rbp), %eax
+ 11477      FFFF
+ 11478 a072 8985F4D9 		movl	%eax, -9740(%rbp)
+ 11478      FFFF
+ 11479 a078 8B85F4D9 		movl	-9740(%rbp), %eax
+ 11479      FFFF
+ 11480 a07e 8985F0D9 		movl	%eax, -9744(%rbp)
+ 11480      FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 11481              		.loc 2 1660 0
+ 11482 a084 F30F6F85 		movdqu	-9744(%rbp), %xmm0
+ 11482      F0D9FFFF 
+ 11483              	.LBE3263:
+ 11484              	.LBE3262:
+1927:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(3);         /* k12 : k13 : k14 : k15 */
+ 11485              		.loc 2 1927 0
+ 11486 a08c F30F7F85 		movdqu	%xmm0, -9152(%rbp)
+ 11486      40DCFFFF 
+ 11487 a094 F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 11487      30DCFFFF 
+ 11488 a09c F30F7F85 		movdqu	%xmm0, -8064(%rbp)
+ 11488      80E0FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 359
+
+
+ 11489              	.LBB3266:
+ 11490              	.LBB3267:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 11491              		.loc 2 1565 0
+ 11492 a0a4 F30F6F85 		movdqu	-8064(%rbp), %xmm0
+ 11492      80E0FFFF 
+ 11493 a0ac 660F7F85 		movdqa	%xmm0, -10224(%rbp)
+ 11493      10D8FFFF 
+ 11494 a0b4 660F6F85 		movdqa	-10224(%rbp), %xmm0
+ 11494      10D8FFFF 
+ 11495 a0bc F30F7F85 		movdqu	%xmm0, -8048(%rbp)
+ 11495      90E0FFFF 
+ 11496              	.LBB3268:
+ 11497              	.LBB3269:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 11498              		.loc 2 1278 0
+ 11499 a0c4 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 11499      00000000 
+ 11500 a0cc F30F6F8D 		movdqu	-8048(%rbp), %xmm1
+ 11500      90E0FFFF 
+ 11501 a0d4 F30F7F8D 		movdqu	%xmm1, -8016(%rbp)
+ 11501      B0E0FFFF 
+ 11502 a0dc F30F7F85 		movdqu	%xmm0, -8032(%rbp)
+ 11502      A0E0FFFF 
+ 11503 a0e4 F30F6F85 		movdqu	-8016(%rbp), %xmm0
+ 11503      B0E0FFFF 
+ 11504 a0ec F30F7F85 		movdqu	%xmm0, -7984(%rbp)
+ 11504      D0E0FFFF 
+ 11505 a0f4 F30F6F85 		movdqu	-8032(%rbp), %xmm0
+ 11505      A0E0FFFF 
+ 11506 a0fc F30F7F85 		movdqu	%xmm0, -8000(%rbp)
+ 11506      C0E0FFFF 
+ 11507              	.LBB3270:
+ 11508              	.LBB3271:
+ 11509              	.LBB3272:
+ 11510              	.LBB3273:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11511              		.loc 3 529 0
+ 11512 a104 F30F6F8D 		movdqu	-8000(%rbp), %xmm1
+ 11512      C0E0FFFF 
+ 11513 a10c F30F6F85 		movdqu	-7984(%rbp), %xmm0
+ 11513      D0E0FFFF 
+ 11514 a114 660F3800 		pshufb	%xmm1, %xmm0
+ 11514      C1
+ 11515              	.LBE3273:
+ 11516              	.LBE3272:
+ 11517              	.LBE3271:
+ 11518              	.LBE3270:
+ 11519              	.LBE3269:
+ 11520              	.LBE3268:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11521              		.loc 2 1567 0
+ 11522 a119 660F7F85 		movdqa	%xmm0, -10224(%rbp)
+ 11522      10D8FFFF 
+ 11523 a121 660F6F85 		movdqa	-10224(%rbp), %xmm0
+ 11523      10D8FFFF 
+ 11524 a129 660FEF85 		pxor	-8064(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 360
+
+
+ 11524      80E0FFFF 
+ 11525 a131 F30F7F85 		movdqu	%xmm0, -8064(%rbp)
+ 11525      80E0FFFF 
+ 11526 a139 660F6F85 		movdqa	-10224(%rbp), %xmm0
+ 11526      10D8FFFF 
+ 11527 a141 F30F7F85 		movdqu	%xmm0, -7968(%rbp)
+ 11527      E0E0FFFF 
+ 11528              	.LBB3274:
+ 11529              	.LBB3275:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 11530              		.loc 2 1278 0
+ 11531 a149 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 11531      00000000 
+ 11532 a151 F30F6F8D 		movdqu	-7968(%rbp), %xmm1
+ 11532      E0E0FFFF 
+ 11533 a159 F30F7F8D 		movdqu	%xmm1, -7936(%rbp)
+ 11533      00E1FFFF 
+ 11534 a161 F30F7F85 		movdqu	%xmm0, -7952(%rbp)
+ 11534      F0E0FFFF 
+ 11535 a169 F30F6F85 		movdqu	-7936(%rbp), %xmm0
+ 11535      00E1FFFF 
+ 11536 a171 F30F7F85 		movdqu	%xmm0, -7904(%rbp)
+ 11536      20E1FFFF 
+ 11537 a179 F30F6F85 		movdqu	-7952(%rbp), %xmm0
+ 11537      F0E0FFFF 
+ 11538 a181 F30F7F85 		movdqu	%xmm0, -7920(%rbp)
+ 11538      10E1FFFF 
+ 11539              	.LBB3276:
+ 11540              	.LBB3277:
+ 11541              	.LBB3278:
+ 11542              	.LBB3279:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11543              		.loc 3 529 0
+ 11544 a189 F30F6F8D 		movdqu	-7920(%rbp), %xmm1
+ 11544      10E1FFFF 
+ 11545 a191 F30F6F85 		movdqu	-7904(%rbp), %xmm0
+ 11545      20E1FFFF 
+ 11546 a199 660F3800 		pshufb	%xmm1, %xmm0
+ 11546      C1
+ 11547              	.LBE3279:
+ 11548              	.LBE3278:
+ 11549              	.LBE3277:
+ 11550              	.LBE3276:
+ 11551              	.LBE3275:
+ 11552              	.LBE3274:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11553              		.loc 2 1568 0
+ 11554 a19e 660F7F85 		movdqa	%xmm0, -10224(%rbp)
+ 11554      10D8FFFF 
+ 11555 a1a6 660F6F85 		movdqa	-10224(%rbp), %xmm0
+ 11555      10D8FFFF 
+ 11556 a1ae 660FEF85 		pxor	-8064(%rbp), %xmm0
+ 11556      80E0FFFF 
+ 11557 a1b6 F30F7F85 		movdqu	%xmm0, -8064(%rbp)
+ 11557      80E0FFFF 
+ 11558 a1be 660F6F85 		movdqa	-10224(%rbp), %xmm0
+ 11558      10D8FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 361
+
+
+ 11559 a1c6 F30F7F85 		movdqu	%xmm0, -7888(%rbp)
+ 11559      30E1FFFF 
+ 11560              	.LBB3280:
+ 11561              	.LBB3281:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 11562              		.loc 2 1278 0
+ 11563 a1ce 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 11563      00000000 
+ 11564 a1d6 F30F6F8D 		movdqu	-7888(%rbp), %xmm1
+ 11564      30E1FFFF 
+ 11565 a1de F30F7F8D 		movdqu	%xmm1, -7856(%rbp)
+ 11565      50E1FFFF 
+ 11566 a1e6 F30F7F85 		movdqu	%xmm0, -7872(%rbp)
+ 11566      40E1FFFF 
+ 11567 a1ee F30F6F85 		movdqu	-7856(%rbp), %xmm0
+ 11567      50E1FFFF 
+ 11568 a1f6 F30F7F85 		movdqu	%xmm0, -7824(%rbp)
+ 11568      70E1FFFF 
+ 11569 a1fe F30F6F85 		movdqu	-7872(%rbp), %xmm0
+ 11569      40E1FFFF 
+ 11570 a206 F30F7F85 		movdqu	%xmm0, -7840(%rbp)
+ 11570      60E1FFFF 
+ 11571              	.LBB3282:
+ 11572              	.LBB3283:
+ 11573              	.LBB3284:
+ 11574              	.LBB3285:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11575              		.loc 3 529 0
+ 11576 a20e F30F6F8D 		movdqu	-7840(%rbp), %xmm1
+ 11576      60E1FFFF 
+ 11577 a216 F30F6F85 		movdqu	-7824(%rbp), %xmm0
+ 11577      70E1FFFF 
+ 11578 a21e 660F3800 		pshufb	%xmm1, %xmm0
+ 11578      C1
+ 11579              	.LBE3285:
+ 11580              	.LBE3284:
+ 11581              	.LBE3283:
+ 11582              	.LBE3282:
+ 11583              	.LBE3281:
+ 11584              	.LBE3280:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 11585              		.loc 2 1569 0
+ 11586 a223 660F7F85 		movdqa	%xmm0, -10224(%rbp)
+ 11586      10D8FFFF 
+ 11587 a22b 660F6F85 		movdqa	-10224(%rbp), %xmm0
+ 11587      10D8FFFF 
+ 11588 a233 660FEF85 		pxor	-8064(%rbp), %xmm0
+ 11588      80E0FFFF 
+ 11589 a23b F30F7F85 		movdqu	%xmm0, -8064(%rbp)
+ 11589      80E0FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 11590              		.loc 2 1571 0
+ 11591 a243 F30F6F85 		movdqu	-8064(%rbp), %xmm0
+ 11591      80E0FFFF 
+ 11592              	.LBE3267:
+ 11593              	.LBE3266:
+ 11594              		.loc 2 1927 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 362
+
+
+ 11595 a24b F30F7F85 		movdqu	%xmm0, -9168(%rbp)
+ 11595      30DCFFFF 
+ 11596 a253 F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 11596      30DCFFFF 
+ 11597 a25b F30F7F85 		movdqu	%xmm0, -7792(%rbp)
+ 11597      90E1FFFF 
+ 11598 a263 F30F6F85 		movdqu	-9152(%rbp), %xmm0
+ 11598      40DCFFFF 
+ 11599 a26b F30F7F85 		movdqu	%xmm0, -7808(%rbp)
+ 11599      80E1FFFF 
+ 11600              	.LBB3286:
+ 11601              	.LBB3287:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 11602              		.loc 2 178 0
+ 11603 a273 F30F6F85 		movdqu	-7808(%rbp), %xmm0
+ 11603      80E1FFFF 
+ 11604 a27b F30F6F8D 		movdqu	-7792(%rbp), %xmm1
+ 11604      90E1FFFF 
+ 11605 a283 660FEFC1 		pxor	%xmm1, %xmm0
+ 11606              	.LBE3287:
+ 11607              	.LBE3286:
+ 11608              		.loc 2 1927 0
+ 11609 a287 F30F7F85 		movdqu	%xmm0, -9168(%rbp)
+ 11609      30DCFFFF 
+ 11610 a28f 488B8598 		movq	-9832(%rbp), %rax
+ 11610      D9FFFF
+ 11611 a296 4883C030 		addq	$48, %rax
+ 11612 a29a F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 11612      30DCFFFF 
+ 11613 a2a2 F30F7F00 		movdqu	%xmm0, (%rax)
+ 11614 a2a6 F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 11614      30DCFFFF 
+ 11615 a2ae F30F7F85 		movdqu	%xmm0, -7760(%rbp)
+ 11615      B0E1FFFF 
+ 11616              	.LBB3288:
+ 11617              	.LBB3289:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 11618              		.loc 2 1681 0
+ 11619 a2b6 B8020000 		movl	$2, %eax
+ 11619      00
+ 11620 a2bb 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 11620      00000000 
+ 11621 a2c3 F30F7F85 		movdqu	%xmm0, -7728(%rbp)
+ 11621      D0E1FFFF 
+ 11622 a2cb 8985CCE1 		movl	%eax, -7732(%rbp)
+ 11622      FFFF
+ 11623 a2d1 F30F6F85 		movdqu	-7728(%rbp), %xmm0
+ 11623      D0E1FFFF 
+ 11624 a2d9 F30F7F85 		movdqu	%xmm0, -7696(%rbp)
+ 11624      F0E1FFFF 
+ 11625 a2e1 8B85CCE1 		movl	-7732(%rbp), %eax
+ 11625      FFFF
+ 11626 a2e7 8985ECE1 		movl	%eax, -7700(%rbp)
+ 11626      FFFF
+ 11627              	.LBB3290:
+ 11628              	.LBB3291:
+ 11629              	.LBB3292:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 363
+
+
+ 11630              	.LBB3293:
+ 11631              		.loc 3 598 0
+ 11632 a2ed 8B85ECE1 		movl	-7700(%rbp), %eax
+ 11632      FFFF
+ 11633 a2f3 F30F6F85 		movdqu	-7696(%rbp), %xmm0
+ 11633      F0E1FFFF 
+ 11634 a2fb 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 11634      C003
+ 11635              	.LBE3293:
+ 11636              	.LBE3292:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 11637              		.loc 2 519 0
+ 11638 a301 F30F7F85 		movdqu	%xmm0, -7728(%rbp)
+ 11638      D0E1FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 11639              		.loc 2 526 0
+ 11640 a309 F30F6F85 		movdqu	-7728(%rbp), %xmm0
+ 11640      D0E1FFFF 
+ 11641              	.LBE3291:
+ 11642              	.LBE3290:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 11643              		.loc 2 1681 0
+ 11644 a311 660F7F85 		movdqa	%xmm0, -10192(%rbp)
+ 11644      30D8FFFF 
+ 11645 a319 F30F6F85 		movdqu	-7760(%rbp), %xmm0
+ 11645      B0E1FFFF 
+ 11646 a321 F30F7F85 		movdqu	%xmm0, -7680(%rbp)
+ 11646      00E2FFFF 
+ 11647 a329 F30F6F85 		movdqu	-7680(%rbp), %xmm0
+ 11647      00E2FFFF 
+ 11648 a331 F30F7F85 		movdqu	%xmm0, -7648(%rbp)
+ 11648      20E2FFFF 
+ 11649 a339 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 11649      000000
+ 11650 a340 48898518 		movq	%rax, -7656(%rbp)
+ 11650      E2FFFF
+ 11651              	.LBB3294:
+ 11652              	.LBB3295:
+ 11653              	.LBB3296:
+ 11654              	.LBB3297:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 11655              		.loc 2 851 0
+ 11656 a347 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 11656      00000000 
+ 11657 a34f F30F7F85 		movdqu	%xmm0, -7616(%rbp)
+ 11657      40E2FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 11658              		.loc 2 854 0
+ 11659 a357 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 11659      00000000 
+ 11660 a35f F30F6F8D 		movdqu	-7648(%rbp), %xmm1
+ 11660      20E2FFFF 
+ 11661 a367 F30F7F8D 		movdqu	%xmm1, -7536(%rbp)
+ 11661      90E2FFFF 
+ 11662 a36f F30F7F85 		movdqu	%xmm0, -7552(%rbp)
+ 11662      80E2FFFF 
+ 11663              	.LBB3298:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 364
+
+
+ 11664              	.LBB3299:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 11665              		.loc 2 206 0
+ 11666 a377 F30F6F85 		movdqu	-7552(%rbp), %xmm0
+ 11666      80E2FFFF 
+ 11667 a37f F30F6F8D 		movdqu	-7536(%rbp), %xmm1
+ 11667      90E2FFFF 
+ 11668 a387 660FDBC1 		pand	%xmm1, %xmm0
+ 11669              	.LBE3299:
+ 11670              	.LBE3298:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 11671              		.loc 2 854 0
+ 11672 a38b F30F7F85 		movdqu	%xmm0, -7568(%rbp)
+ 11672      70E2FFFF 
+ 11673 a393 F30F6F85 		movdqu	-7648(%rbp), %xmm0
+ 11673      20E2FFFF 
+ 11674 a39b F30F7F85 		movdqu	%xmm0, -7504(%rbp)
+ 11674      B0E2FFFF 
+ 11675              	.LBB3300:
+ 11676              	.LBB3301:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 11677              		.loc 3 433 0
+ 11678 a3a3 F30F6F85 		movdqu	-7504(%rbp), %xmm0
+ 11678      B0E2FFFF 
+ 11679 a3ab 660F72D0 		psrld	$4, %xmm0
+ 11679      04
+ 11680              	.LBE3301:
+ 11681              	.LBE3300:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 11682              		.loc 2 857 0
+ 11683 a3b0 F30F7F85 		movdqu	%xmm0, -7584(%rbp)
+ 11683      60E2FFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 11684              		.loc 2 859 0
+ 11685 a3b8 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 11685      00000000 
+ 11686 a3c0 F30F6F8D 		movdqu	-7584(%rbp), %xmm1
+ 11686      60E2FFFF 
+ 11687 a3c8 F30F7F8D 		movdqu	%xmm1, -7472(%rbp)
+ 11687      D0E2FFFF 
+ 11688 a3d0 F30F7F85 		movdqu	%xmm0, -7488(%rbp)
+ 11688      C0E2FFFF 
+ 11689              	.LBB3302:
+ 11690              	.LBB3303:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 11691              		.loc 2 206 0
+ 11692 a3d8 F30F6F85 		movdqu	-7488(%rbp), %xmm0
+ 11692      C0E2FFFF 
+ 11693 a3e0 F30F6F8D 		movdqu	-7472(%rbp), %xmm1
+ 11693      D0E2FFFF 
+ 11694 a3e8 660FDBC1 		pand	%xmm1, %xmm0
+ 11695              	.LBE3303:
+ 11696              	.LBE3302:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 11697              		.loc 2 859 0
+ 11698 a3ec F30F7F85 		movdqu	%xmm0, -7584(%rbp)
+ 11698      60E2FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 365
+
+
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 11699              		.loc 2 866 0
+ 11700 a3f4 C7853CE2 		movl	$0, -7620(%rbp)
+ 11700      FFFF0000 
+ 11700      0000
+ 11701 a3fe E9BE0100 		jmp	.L168
+ 11701      00
+ 11702              	.L169:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 11703              		.loc 2 868 0
+ 11704 a403 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 11704      00000000 
+ 11705 a40b F30F7F85 		movdqu	%xmm0, -7440(%rbp)
+ 11705      F0E2FFFF 
+ 11706 a413 F30F6F85 		movdqu	-7584(%rbp), %xmm0
+ 11706      60E2FFFF 
+ 11707 a41b F30F7F85 		movdqu	%xmm0, -7456(%rbp)
+ 11707      E0E2FFFF 
+ 11708 a423 F30F6F85 		movdqu	-7440(%rbp), %xmm0
+ 11708      F0E2FFFF 
+ 11709 a42b F30F7F85 		movdqu	%xmm0, -7408(%rbp)
+ 11709      10E3FFFF 
+ 11710 a433 F30F6F85 		movdqu	-7456(%rbp), %xmm0
+ 11710      E0E2FFFF 
+ 11711 a43b F30F7F85 		movdqu	%xmm0, -7424(%rbp)
+ 11711      00E3FFFF 
+ 11712              	.LBB3304:
+ 11713              	.LBB3305:
+ 11714              	.LBB3306:
+ 11715              	.LBB3307:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11716              		.loc 3 529 0
+ 11717 a443 F30F6F8D 		movdqu	-7424(%rbp), %xmm1
+ 11717      00E3FFFF 
+ 11718 a44b F30F6F85 		movdqu	-7408(%rbp), %xmm0
+ 11718      10E3FFFF 
+ 11719 a453 660F3800 		pshufb	%xmm1, %xmm0
+ 11719      C1
+ 11720              	.LBE3307:
+ 11721              	.LBE3306:
+ 11722              	.LBE3305:
+ 11723              	.LBE3304:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 11724              		.loc 2 868 0
+ 11725 a458 F30F7F85 		movdqu	%xmm0, -7600(%rbp)
+ 11725      50E2FFFF 
+ 11726 a460 F30F6F85 		movdqu	-7568(%rbp), %xmm0
+ 11726      70E2FFFF 
+ 11727 a468 F30F7F85 		movdqu	%xmm0, -7376(%rbp)
+ 11727      30E3FFFF 
+ 11728 a470 F30F6F85 		movdqu	-7600(%rbp), %xmm0
+ 11728      50E2FFFF 
+ 11729 a478 F30F7F85 		movdqu	%xmm0, -7392(%rbp)
+ 11729      20E3FFFF 
+ 11730              	.LBB3308:
+ 11731              	.LBB3309:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+
GAS LISTING /tmp/ccjbMjHD.s 			page 366
+
+
+ 11732              		.loc 2 234 0
+ 11733 a480 F30F6F85 		movdqu	-7392(%rbp), %xmm0
+ 11733      20E3FFFF 
+ 11734 a488 F30F6F8D 		movdqu	-7376(%rbp), %xmm1
+ 11734      30E3FFFF 
+ 11735 a490 660FEBC1 		por	%xmm1, %xmm0
+ 11736              	.LBE3309:
+ 11737              	.LBE3308:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 11738              		.loc 2 870 0
+ 11739 a494 F30F7F85 		movdqu	%xmm0, -7600(%rbp)
+ 11739      50E2FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 11740              		.loc 2 872 0
+ 11741 a49c 8B853CE2 		mov	-7620(%rbp), %eax
+ 11741      FFFF
+ 11742 a4a2 48C1E004 		salq	$4, %rax
+ 11743 a4a6 48038518 		addq	-7656(%rbp), %rax
+ 11743      E2FFFF
+ 11744 a4ad 660F6F00 		movdqa	(%rax), %xmm0
+ 11745 a4b1 F30F7F85 		movdqu	%xmm0, -7344(%rbp)
+ 11745      50E3FFFF 
+ 11746 a4b9 F30F6F85 		movdqu	-7600(%rbp), %xmm0
+ 11746      50E2FFFF 
+ 11747 a4c1 F30F7F85 		movdqu	%xmm0, -7360(%rbp)
+ 11747      40E3FFFF 
+ 11748 a4c9 F30F6F85 		movdqu	-7344(%rbp), %xmm0
+ 11748      50E3FFFF 
+ 11749 a4d1 F30F7F85 		movdqu	%xmm0, -7312(%rbp)
+ 11749      70E3FFFF 
+ 11750 a4d9 F30F6F85 		movdqu	-7360(%rbp), %xmm0
+ 11750      40E3FFFF 
+ 11751 a4e1 F30F7F85 		movdqu	%xmm0, -7328(%rbp)
+ 11751      60E3FFFF 
+ 11752              	.LBB3310:
+ 11753              	.LBB3311:
+ 11754              	.LBB3312:
+ 11755              	.LBB3313:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11756              		.loc 3 529 0
+ 11757 a4e9 F30F6F8D 		movdqu	-7328(%rbp), %xmm1
+ 11757      60E3FFFF 
+ 11758 a4f1 F30F6F85 		movdqu	-7312(%rbp), %xmm0
+ 11758      70E3FFFF 
+ 11759 a4f9 660F3800 		pshufb	%xmm1, %xmm0
+ 11759      C1
+ 11760              	.LBE3313:
+ 11761              	.LBE3312:
+ 11762              	.LBE3311:
+ 11763              	.LBE3310:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 11764              		.loc 2 872 0
+ 11765 a4fe F30F7F85 		movdqu	%xmm0, -7600(%rbp)
+ 11765      50E2FFFF 
+ 11766 a506 F30F6F85 		movdqu	-7616(%rbp), %xmm0
+ 11766      40E2FFFF 
+ 11767 a50e F30F7F85 		movdqu	%xmm0, -7280(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 367
+
+
+ 11767      90E3FFFF 
+ 11768 a516 F30F6F85 		movdqu	-7600(%rbp), %xmm0
+ 11768      50E2FFFF 
+ 11769 a51e F30F7F85 		movdqu	%xmm0, -7296(%rbp)
+ 11769      80E3FFFF 
+ 11770              	.LBB3314:
+ 11771              	.LBB3315:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 11772              		.loc 2 234 0
+ 11773 a526 F30F6F85 		movdqu	-7296(%rbp), %xmm0
+ 11773      80E3FFFF 
+ 11774 a52e F30F6F8D 		movdqu	-7280(%rbp), %xmm1
+ 11774      90E3FFFF 
+ 11775 a536 660FEBC1 		por	%xmm1, %xmm0
+ 11776              	.LBE3315:
+ 11777              	.LBE3314:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 11778              		.loc 2 874 0
+ 11779 a53a F30F7F85 		movdqu	%xmm0, -7616(%rbp)
+ 11779      40E2FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 11780              		.loc 2 876 0
+ 11781 a542 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 11781      00000000 
+ 11782 a54a F30F6F8D 		movdqu	-7584(%rbp), %xmm1
+ 11782      60E2FFFF 
+ 11783 a552 F30F7F8D 		movdqu	%xmm1, -7248(%rbp)
+ 11783      B0E3FFFF 
+ 11784 a55a F30F7F85 		movdqu	%xmm0, -7264(%rbp)
+ 11784      A0E3FFFF 
+ 11785              	.LBB3316:
+ 11786              	.LBB3317:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 11787              		.loc 2 290 0
+ 11788 a562 F30F6F8D 		movdqu	-7264(%rbp), %xmm1
+ 11788      A0E3FFFF 
+ 11789 a56a F30F6F85 		movdqu	-7248(%rbp), %xmm0
+ 11789      B0E3FFFF 
+ 11790 a572 660FF8C1 		psubb	%xmm1, %xmm0
+ 11791              	.LBE3317:
+ 11792              	.LBE3316:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 11793              		.loc 2 876 0
+ 11794 a576 F30F7F85 		movdqu	%xmm0, -7584(%rbp)
+ 11794      60E2FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 11795              		.loc 2 878 0
+ 11796 a57e 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 11796      00000000 
+ 11797 a586 F30F6F8D 		movdqu	-7584(%rbp), %xmm1
+ 11797      60E2FFFF 
+ 11798 a58e F30F7F8D 		movdqu	%xmm1, -7216(%rbp)
+ 11798      D0E3FFFF 
+ 11799 a596 F30F7F85 		movdqu	%xmm0, -7232(%rbp)
+ 11799      C0E3FFFF 
+ 11800              	.LBB3318:
+ 11801              	.LBB3319:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 368
+
+
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 11802              		.loc 2 206 0
+ 11803 a59e F30F6F85 		movdqu	-7232(%rbp), %xmm0
+ 11803      C0E3FFFF 
+ 11804 a5a6 F30F6F8D 		movdqu	-7216(%rbp), %xmm1
+ 11804      D0E3FFFF 
+ 11805 a5ae 660FDBC1 		pand	%xmm1, %xmm0
+ 11806              	.LBE3319:
+ 11807              	.LBE3318:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 11808              		.loc 2 878 0
+ 11809 a5b2 F30F7F85 		movdqu	%xmm0, -7584(%rbp)
+ 11809      60E2FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 11810              		.loc 2 866 0
+ 11811 a5ba 83853CE2 		addl	$1, -7620(%rbp)
+ 11811      FFFF01
+ 11812              	.L168:
+ 11813 a5c1 83BD3CE2 		cmpl	$15, -7620(%rbp)
+ 11813      FFFF0F
+ 11814 a5c8 0F8635FE 		jbe	.L169
+ 11814      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 11815              		.loc 2 882 0
+ 11816 a5ce F30F6F85 		movdqu	-7616(%rbp), %xmm0
+ 11816      40E2FFFF 
+ 11817              	.LBE3297:
+ 11818              	.LBE3296:
+ 11819              	.LBE3295:
+ 11820              	.LBE3294:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 11821              		.loc 2 1682 0
+ 11822 a5d6 660F7F85 		movdqa	%xmm0, -10208(%rbp)
+ 11822      20D8FFFF 
+ 11823              	.LBB3320:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 11824              		.loc 2 1683 0
+ 11825 a5de 660F6F85 		movdqa	-10208(%rbp), %xmm0
+ 11825      20D8FFFF 
+ 11826 a5e6 F30F7F85 		movdqu	%xmm0, -9680(%rbp)
+ 11826      30DAFFFF 
+ 11827 a5ee E8000000 		call	KDbgWriterGet at PLT
+ 11827      00
+ 11828 a5f3 4885C0   		testq	%rax, %rax
+ 11829 a5f6 7479     		je	.L171
+ 11830 a5f8 BF010000 		movl	$1, %edi
+ 11830      00
+ 11831 a5fd E8000000 		call	KDbgCondToFlag at PLT
+ 11831      00
+ 11832 a602 4889C6   		movq	%rax, %rsi
+ 11833 a605 BF100000 		movl	$16, %edi
+ 11833      00
+ 11834 a60a E8000000 		call	KDbgTestModConds at PLT
+ 11834      00
+ 11835 a60f 84C0     		testb	%al, %al
+ 11836 a611 745E     		je	.L171
+ 11837 a613 8B853CDA 		movl	-9668(%rbp), %eax
+
GAS LISTING /tmp/ccjbMjHD.s 			page 369
+
+
+ 11837      FFFF
+ 11838 a619 89C7     		movl	%eax, %edi
+ 11839 a61b E8E059FF 		call	bswap_32
+ 11839      FF
+ 11840 a620 4189C5   		movl	%eax, %r13d
+ 11841 a623 8B8538DA 		movl	-9672(%rbp), %eax
+ 11841      FFFF
+ 11842 a629 89C7     		movl	%eax, %edi
+ 11843 a62b E8D059FF 		call	bswap_32
+ 11843      FF
+ 11844 a630 4189C4   		movl	%eax, %r12d
+ 11845 a633 8B8534DA 		movl	-9676(%rbp), %eax
+ 11845      FFFF
+ 11846 a639 89C7     		movl	%eax, %edi
+ 11847 a63b E8C059FF 		call	bswap_32
+ 11847      FF
+ 11848 a640 89C3     		movl	%eax, %ebx
+ 11849 a642 8B8530DA 		movl	-9680(%rbp), %eax
+ 11849      FFFF
+ 11850 a648 89C7     		movl	%eax, %edi
+ 11851 a64a E8B159FF 		call	bswap_32
+ 11851      FF
+ 11852 a64f 4589E9   		movl	%r13d, %r9d
+ 11853 a652 4589E0   		movl	%r12d, %r8d
+ 11854 a655 89D9     		movl	%ebx, %ecx
+ 11855 a657 89C2     		movl	%eax, %edx
+ 11856 a659 488D3500 		leaq	.LC0(%rip), %rsi
+ 11856      000000
+ 11857 a660 488D3D00 		leaq	.LC1(%rip), %rdi
+ 11857      000000
+ 11858 a667 B8000000 		movl	$0, %eax
+ 11858      00
+ 11859 a66c E8000000 		call	KDbgMsg at PLT
+ 11859      00
+ 11860              	.L171:
+ 11861 a671 660F6F85 		movdqa	-10208(%rbp), %xmm0
+ 11861      20D8FFFF 
+ 11862 a679 F30F7F85 		movdqu	%xmm0, -7200(%rbp)
+ 11862      E0E3FFFF 
+ 11863              	.LBE3320:
+ 11864              	.LBB3321:
+ 11865              	.LBB3322:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 11866              		.loc 2 667 0
+ 11867 a681 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 11867      00000000 
+ 11868 a689 F30F6F8D 		movdqu	-7200(%rbp), %xmm1
+ 11868      E0E3FFFF 
+ 11869 a691 F30F7F8D 		movdqu	%xmm1, -7168(%rbp)
+ 11869      00E4FFFF 
+ 11870 a699 F30F7F85 		movdqu	%xmm0, -7184(%rbp)
+ 11870      F0E3FFFF 
+ 11871 a6a1 F30F6F85 		movdqu	-7168(%rbp), %xmm0
+ 11871      00E4FFFF 
+ 11872 a6a9 F30F7F85 		movdqu	%xmm0, -7136(%rbp)
+ 11872      20E4FFFF 
+ 11873 a6b1 F30F6F85 		movdqu	-7184(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 370
+
+
+ 11873      F0E3FFFF 
+ 11874 a6b9 F30F7F85 		movdqu	%xmm0, -7152(%rbp)
+ 11874      10E4FFFF 
+ 11875              	.LBB3323:
+ 11876              	.LBB3324:
+ 11877              	.LBB3325:
+ 11878              	.LBB3326:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 11879              		.loc 3 529 0
+ 11880 a6c1 F30F6F8D 		movdqu	-7152(%rbp), %xmm1
+ 11880      10E4FFFF 
+ 11881 a6c9 F30F6F85 		movdqu	-7136(%rbp), %xmm0
+ 11881      20E4FFFF 
+ 11882 a6d1 660F3800 		pshufb	%xmm1, %xmm0
+ 11882      C1
+ 11883              	.LBE3326:
+ 11884              	.LBE3325:
+ 11885              	.LBE3324:
+ 11886              	.LBE3323:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 11887              		.loc 2 667 0
+ 11888 a6d6 F30F7F85 		movdqu	%xmm0, -7200(%rbp)
+ 11888      E0E3FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 11889              		.loc 2 668 0
+ 11890 a6de F30F6F85 		movdqu	-7200(%rbp), %xmm0
+ 11890      E0E3FFFF 
+ 11891              	.LBE3322:
+ 11892              	.LBE3321:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 11893              		.loc 2 1684 0
+ 11894 a6e6 660F7F85 		movdqa	%xmm0, -10208(%rbp)
+ 11894      20D8FFFF 
+ 11895              	.LBB3327:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 11896              		.loc 2 1685 0
+ 11897 a6ee 660F6F85 		movdqa	-10208(%rbp), %xmm0
+ 11897      20D8FFFF 
+ 11898 a6f6 F30F7F85 		movdqu	%xmm0, -9696(%rbp)
+ 11898      20DAFFFF 
+ 11899 a6fe E8000000 		call	KDbgWriterGet at PLT
+ 11899      00
+ 11900 a703 4885C0   		testq	%rax, %rax
+ 11901 a706 7479     		je	.L173
+ 11902 a708 BF010000 		movl	$1, %edi
+ 11902      00
+ 11903 a70d E8000000 		call	KDbgCondToFlag at PLT
+ 11903      00
+ 11904 a712 4889C6   		movq	%rax, %rsi
+ 11905 a715 BF100000 		movl	$16, %edi
+ 11905      00
+ 11906 a71a E8000000 		call	KDbgTestModConds at PLT
+ 11906      00
+ 11907 a71f 84C0     		testb	%al, %al
+ 11908 a721 745E     		je	.L173
+ 11909 a723 8B852CDA 		movl	-9684(%rbp), %eax
+ 11909      FFFF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 371
+
+
+ 11910 a729 89C7     		movl	%eax, %edi
+ 11911 a72b E8D058FF 		call	bswap_32
+ 11911      FF
+ 11912 a730 4189C5   		movl	%eax, %r13d
+ 11913 a733 8B8528DA 		movl	-9688(%rbp), %eax
+ 11913      FFFF
+ 11914 a739 89C7     		movl	%eax, %edi
+ 11915 a73b E8C058FF 		call	bswap_32
+ 11915      FF
+ 11916 a740 4189C4   		movl	%eax, %r12d
+ 11917 a743 8B8524DA 		movl	-9692(%rbp), %eax
+ 11917      FFFF
+ 11918 a749 89C7     		movl	%eax, %edi
+ 11919 a74b E8B058FF 		call	bswap_32
+ 11919      FF
+ 11920 a750 89C3     		movl	%eax, %ebx
+ 11921 a752 8B8520DA 		movl	-9696(%rbp), %eax
+ 11921      FFFF
+ 11922 a758 89C7     		movl	%eax, %edi
+ 11923 a75a E8A158FF 		call	bswap_32
+ 11923      FF
+ 11924 a75f 4589E9   		movl	%r13d, %r9d
+ 11925 a762 4589E0   		movl	%r12d, %r8d
+ 11926 a765 89D9     		movl	%ebx, %ecx
+ 11927 a767 89C2     		movl	%eax, %edx
+ 11928 a769 488D3500 		leaq	.LC2(%rip), %rsi
+ 11928      000000
+ 11929 a770 488D3D00 		leaq	.LC1(%rip), %rdi
+ 11929      000000
+ 11930 a777 B8000000 		movl	$0, %eax
+ 11930      00
+ 11931 a77c E8000000 		call	KDbgMsg at PLT
+ 11931      00
+ 11932              	.L173:
+ 11933 a781 660F6F85 		movdqa	-10208(%rbp), %xmm0
+ 11933      20D8FFFF 
+ 11934 a789 F30F7F85 		movdqu	%xmm0, -7104(%rbp)
+ 11934      40E4FFFF 
+ 11935 a791 660F6F85 		movdqa	-10192(%rbp), %xmm0
+ 11935      30D8FFFF 
+ 11936 a799 F30F7F85 		movdqu	%xmm0, -7120(%rbp)
+ 11936      30E4FFFF 
+ 11937              	.LBE3327:
+ 11938              	.LBB3328:
+ 11939              	.LBB3329:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 11940              		.loc 2 178 0
+ 11941 a7a1 F30F6F85 		movdqu	-7120(%rbp), %xmm0
+ 11941      30E4FFFF 
+ 11942 a7a9 F30F6F8D 		movdqu	-7104(%rbp), %xmm1
+ 11942      40E4FFFF 
+ 11943 a7b1 660FEFC1 		pxor	%xmm1, %xmm0
+ 11944              	.LBE3329:
+ 11945              	.LBE3328:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 11946              		.loc 2 1686 0
+ 11947 a7b5 660F7F85 		movdqa	%xmm0, -10208(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 372
+
+
+ 11947      20D8FFFF 
+ 11948              	.LBB3330:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 11949              		.loc 2 1687 0
+ 11950 a7bd 660F6F85 		movdqa	-10208(%rbp), %xmm0
+ 11950      20D8FFFF 
+ 11951 a7c5 F30F7F85 		movdqu	%xmm0, -9712(%rbp)
+ 11951      10DAFFFF 
+ 11952 a7cd E8000000 		call	KDbgWriterGet at PLT
+ 11952      00
+ 11953 a7d2 4885C0   		testq	%rax, %rax
+ 11954 a7d5 7479     		je	.L175
+ 11955 a7d7 BF010000 		movl	$1, %edi
+ 11955      00
+ 11956 a7dc E8000000 		call	KDbgCondToFlag at PLT
+ 11956      00
+ 11957 a7e1 4889C6   		movq	%rax, %rsi
+ 11958 a7e4 BF100000 		movl	$16, %edi
+ 11958      00
+ 11959 a7e9 E8000000 		call	KDbgTestModConds at PLT
+ 11959      00
+ 11960 a7ee 84C0     		testb	%al, %al
+ 11961 a7f0 745E     		je	.L175
+ 11962 a7f2 8B851CDA 		movl	-9700(%rbp), %eax
+ 11962      FFFF
+ 11963 a7f8 89C7     		movl	%eax, %edi
+ 11964 a7fa E80158FF 		call	bswap_32
+ 11964      FF
+ 11965 a7ff 4189C5   		movl	%eax, %r13d
+ 11966 a802 8B8518DA 		movl	-9704(%rbp), %eax
+ 11966      FFFF
+ 11967 a808 89C7     		movl	%eax, %edi
+ 11968 a80a E8F157FF 		call	bswap_32
+ 11968      FF
+ 11969 a80f 4189C4   		movl	%eax, %r12d
+ 11970 a812 8B8514DA 		movl	-9708(%rbp), %eax
+ 11970      FFFF
+ 11971 a818 89C7     		movl	%eax, %edi
+ 11972 a81a E8E157FF 		call	bswap_32
+ 11972      FF
+ 11973 a81f 89C3     		movl	%eax, %ebx
+ 11974 a821 8B8510DA 		movl	-9712(%rbp), %eax
+ 11974      FFFF
+ 11975 a827 89C7     		movl	%eax, %edi
+ 11976 a829 E8D257FF 		call	bswap_32
+ 11976      FF
+ 11977 a82e 4589E9   		movl	%r13d, %r9d
+ 11978 a831 4589E0   		movl	%r12d, %r8d
+ 11979 a834 89D9     		movl	%ebx, %ecx
+ 11980 a836 89C2     		movl	%eax, %edx
+ 11981 a838 488D3500 		leaq	.LC3(%rip), %rsi
+ 11981      000000
+ 11982 a83f 488D3D00 		leaq	.LC1(%rip), %rdi
+ 11982      000000
+ 11983 a846 B8000000 		movl	$0, %eax
+ 11983      00
+ 11984 a84b E8000000 		call	KDbgMsg at PLT
+
GAS LISTING /tmp/ccjbMjHD.s 			page 373
+
+
+ 11984      00
+ 11985              	.L175:
+ 11986 a850 660F6F85 		movdqa	-10208(%rbp), %xmm0
+ 11986      20D8FFFF 
+ 11987 a858 F30F7F85 		movdqu	%xmm0, -7088(%rbp)
+ 11987      50E4FFFF 
+ 11988 a860 F30F6F85 		movdqu	-7088(%rbp), %xmm0
+ 11988      50E4FFFF 
+ 11989 a868 F30F7F85 		movdqu	%xmm0, -7056(%rbp)
+ 11989      70E4FFFF 
+ 11990              	.LBE3330:
+ 11991              	.LBB3331:
+ 11992              	.LBB3332:
+ 11993              	.LBB3333:
+ 11994              	.LBB3334:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 11995              		.loc 3 450 0
+ 11996 a870 F30F6F85 		movdqu	-7056(%rbp), %xmm0
+ 11996      70E4FFFF 
+ 11997 a878 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 11997      FF
+ 11998              	.LBE3334:
+ 11999              	.LBE3333:
+ 12000              	.LBE3332:
+ 12001              	.LBE3331:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 12002              		.loc 2 1688 0
+ 12003 a87d 660F7F85 		movdqa	%xmm0, -10208(%rbp)
+ 12003      20D8FFFF 
+ 12004              	.LBB3335:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 12005              		.loc 2 1689 0
+ 12006 a885 660F6F85 		movdqa	-10208(%rbp), %xmm0
+ 12006      20D8FFFF 
+ 12007 a88d F30F7F85 		movdqu	%xmm0, -9728(%rbp)
+ 12007      00DAFFFF 
+ 12008 a895 E8000000 		call	KDbgWriterGet at PLT
+ 12008      00
+ 12009 a89a 4885C0   		testq	%rax, %rax
+ 12010 a89d 7479     		je	.L177
+ 12011 a89f BF010000 		movl	$1, %edi
+ 12011      00
+ 12012 a8a4 E8000000 		call	KDbgCondToFlag at PLT
+ 12012      00
+ 12013 a8a9 4889C6   		movq	%rax, %rsi
+ 12014 a8ac BF100000 		movl	$16, %edi
+ 12014      00
+ 12015 a8b1 E8000000 		call	KDbgTestModConds at PLT
+ 12015      00
+ 12016 a8b6 84C0     		testb	%al, %al
+ 12017 a8b8 745E     		je	.L177
+ 12018 a8ba 8B850CDA 		movl	-9716(%rbp), %eax
+ 12018      FFFF
+ 12019 a8c0 89C7     		movl	%eax, %edi
+ 12020 a8c2 E83957FF 		call	bswap_32
+ 12020      FF
+ 12021 a8c7 4189C5   		movl	%eax, %r13d
+
GAS LISTING /tmp/ccjbMjHD.s 			page 374
+
+
+ 12022 a8ca 8B8508DA 		movl	-9720(%rbp), %eax
+ 12022      FFFF
+ 12023 a8d0 89C7     		movl	%eax, %edi
+ 12024 a8d2 E82957FF 		call	bswap_32
+ 12024      FF
+ 12025 a8d7 4189C4   		movl	%eax, %r12d
+ 12026 a8da 8B8504DA 		movl	-9724(%rbp), %eax
+ 12026      FFFF
+ 12027 a8e0 89C7     		movl	%eax, %edi
+ 12028 a8e2 E81957FF 		call	bswap_32
+ 12028      FF
+ 12029 a8e7 89C3     		movl	%eax, %ebx
+ 12030 a8e9 8B8500DA 		movl	-9728(%rbp), %eax
+ 12030      FFFF
+ 12031 a8ef 89C7     		movl	%eax, %edi
+ 12032 a8f1 E80A57FF 		call	bswap_32
+ 12032      FF
+ 12033 a8f6 4589E9   		movl	%r13d, %r9d
+ 12034 a8f9 4589E0   		movl	%r12d, %r8d
+ 12035 a8fc 89D9     		movl	%ebx, %ecx
+ 12036 a8fe 89C2     		movl	%eax, %edx
+ 12037 a900 488D3500 		leaq	.LC4(%rip), %rsi
+ 12037      000000
+ 12038 a907 488D3D00 		leaq	.LC1(%rip), %rdi
+ 12038      000000
+ 12039 a90e B8000000 		movl	$0, %eax
+ 12039      00
+ 12040 a913 E8000000 		call	KDbgMsg at PLT
+ 12040      00
+ 12041              	.L177:
+ 12042              	.LBE3335:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 12043              		.loc 2 1690 0
+ 12044 a918 660F6F85 		movdqa	-10208(%rbp), %xmm0
+ 12044      20D8FFFF 
+ 12045              	.LBE3289:
+ 12046              	.LBE3288:
+1928:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(4,0x02);    /* k16 : k17 : k18 : k19 */
+ 12047              		.loc 2 1928 0
+ 12048 a920 F30F7F85 		movdqu	%xmm0, -9152(%rbp)
+ 12048      40DCFFFF 
+ 12049 a928 F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 12049      20DCFFFF 
+ 12050 a930 F30F7F85 		movdqu	%xmm0, -7040(%rbp)
+ 12050      80E4FFFF 
+ 12051              	.LBB3336:
+ 12052              	.LBB3337:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 12053              		.loc 2 1565 0
+ 12054 a938 F30F6F85 		movdqu	-7040(%rbp), %xmm0
+ 12054      80E4FFFF 
+ 12055 a940 660F7F85 		movdqa	%xmm0, -10176(%rbp)
+ 12055      40D8FFFF 
+ 12056 a948 660F6F85 		movdqa	-10176(%rbp), %xmm0
+ 12056      40D8FFFF 
+ 12057 a950 F30F7F85 		movdqu	%xmm0, -7024(%rbp)
+ 12057      90E4FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 375
+
+
+ 12058              	.LBB3338:
+ 12059              	.LBB3339:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 12060              		.loc 2 1278 0
+ 12061 a958 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 12061      00000000 
+ 12062 a960 F30F6F8D 		movdqu	-7024(%rbp), %xmm1
+ 12062      90E4FFFF 
+ 12063 a968 F30F7F8D 		movdqu	%xmm1, -6992(%rbp)
+ 12063      B0E4FFFF 
+ 12064 a970 F30F7F85 		movdqu	%xmm0, -7008(%rbp)
+ 12064      A0E4FFFF 
+ 12065 a978 F30F6F85 		movdqu	-6992(%rbp), %xmm0
+ 12065      B0E4FFFF 
+ 12066 a980 F30F7F85 		movdqu	%xmm0, -6960(%rbp)
+ 12066      D0E4FFFF 
+ 12067 a988 F30F6F85 		movdqu	-7008(%rbp), %xmm0
+ 12067      A0E4FFFF 
+ 12068 a990 F30F7F85 		movdqu	%xmm0, -6976(%rbp)
+ 12068      C0E4FFFF 
+ 12069              	.LBB3340:
+ 12070              	.LBB3341:
+ 12071              	.LBB3342:
+ 12072              	.LBB3343:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12073              		.loc 3 529 0
+ 12074 a998 F30F6F8D 		movdqu	-6976(%rbp), %xmm1
+ 12074      C0E4FFFF 
+ 12075 a9a0 F30F6F85 		movdqu	-6960(%rbp), %xmm0
+ 12075      D0E4FFFF 
+ 12076 a9a8 660F3800 		pshufb	%xmm1, %xmm0
+ 12076      C1
+ 12077              	.LBE3343:
+ 12078              	.LBE3342:
+ 12079              	.LBE3341:
+ 12080              	.LBE3340:
+ 12081              	.LBE3339:
+ 12082              	.LBE3338:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12083              		.loc 2 1567 0
+ 12084 a9ad 660F7F85 		movdqa	%xmm0, -10176(%rbp)
+ 12084      40D8FFFF 
+ 12085 a9b5 660F6F85 		movdqa	-10176(%rbp), %xmm0
+ 12085      40D8FFFF 
+ 12086 a9bd 660FEF85 		pxor	-7040(%rbp), %xmm0
+ 12086      80E4FFFF 
+ 12087 a9c5 F30F7F85 		movdqu	%xmm0, -7040(%rbp)
+ 12087      80E4FFFF 
+ 12088 a9cd 660F6F85 		movdqa	-10176(%rbp), %xmm0
+ 12088      40D8FFFF 
+ 12089 a9d5 F30F7F85 		movdqu	%xmm0, -6944(%rbp)
+ 12089      E0E4FFFF 
+ 12090              	.LBB3344:
+ 12091              	.LBB3345:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 12092              		.loc 2 1278 0
+ 12093 a9dd 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 376
+
+
+ 12093      00000000 
+ 12094 a9e5 F30F6F8D 		movdqu	-6944(%rbp), %xmm1
+ 12094      E0E4FFFF 
+ 12095 a9ed F30F7F8D 		movdqu	%xmm1, -6912(%rbp)
+ 12095      00E5FFFF 
+ 12096 a9f5 F30F7F85 		movdqu	%xmm0, -6928(%rbp)
+ 12096      F0E4FFFF 
+ 12097 a9fd F30F6F85 		movdqu	-6912(%rbp), %xmm0
+ 12097      00E5FFFF 
+ 12098 aa05 F30F7F85 		movdqu	%xmm0, -6880(%rbp)
+ 12098      20E5FFFF 
+ 12099 aa0d F30F6F85 		movdqu	-6928(%rbp), %xmm0
+ 12099      F0E4FFFF 
+ 12100 aa15 F30F7F85 		movdqu	%xmm0, -6896(%rbp)
+ 12100      10E5FFFF 
+ 12101              	.LBB3346:
+ 12102              	.LBB3347:
+ 12103              	.LBB3348:
+ 12104              	.LBB3349:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12105              		.loc 3 529 0
+ 12106 aa1d F30F6F8D 		movdqu	-6896(%rbp), %xmm1
+ 12106      10E5FFFF 
+ 12107 aa25 F30F6F85 		movdqu	-6880(%rbp), %xmm0
+ 12107      20E5FFFF 
+ 12108 aa2d 660F3800 		pshufb	%xmm1, %xmm0
+ 12108      C1
+ 12109              	.LBE3349:
+ 12110              	.LBE3348:
+ 12111              	.LBE3347:
+ 12112              	.LBE3346:
+ 12113              	.LBE3345:
+ 12114              	.LBE3344:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12115              		.loc 2 1568 0
+ 12116 aa32 660F7F85 		movdqa	%xmm0, -10176(%rbp)
+ 12116      40D8FFFF 
+ 12117 aa3a 660F6F85 		movdqa	-10176(%rbp), %xmm0
+ 12117      40D8FFFF 
+ 12118 aa42 660FEF85 		pxor	-7040(%rbp), %xmm0
+ 12118      80E4FFFF 
+ 12119 aa4a F30F7F85 		movdqu	%xmm0, -7040(%rbp)
+ 12119      80E4FFFF 
+ 12120 aa52 660F6F85 		movdqa	-10176(%rbp), %xmm0
+ 12120      40D8FFFF 
+ 12121 aa5a F30F7F85 		movdqu	%xmm0, -6864(%rbp)
+ 12121      30E5FFFF 
+ 12122              	.LBB3350:
+ 12123              	.LBB3351:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 12124              		.loc 2 1278 0
+ 12125 aa62 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 12125      00000000 
+ 12126 aa6a F30F6F8D 		movdqu	-6864(%rbp), %xmm1
+ 12126      30E5FFFF 
+ 12127 aa72 F30F7F8D 		movdqu	%xmm1, -6832(%rbp)
+ 12127      50E5FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 377
+
+
+ 12128 aa7a F30F7F85 		movdqu	%xmm0, -6848(%rbp)
+ 12128      40E5FFFF 
+ 12129 aa82 F30F6F85 		movdqu	-6832(%rbp), %xmm0
+ 12129      50E5FFFF 
+ 12130 aa8a F30F7F85 		movdqu	%xmm0, -6800(%rbp)
+ 12130      70E5FFFF 
+ 12131 aa92 F30F6F85 		movdqu	-6848(%rbp), %xmm0
+ 12131      40E5FFFF 
+ 12132 aa9a F30F7F85 		movdqu	%xmm0, -6816(%rbp)
+ 12132      60E5FFFF 
+ 12133              	.LBB3352:
+ 12134              	.LBB3353:
+ 12135              	.LBB3354:
+ 12136              	.LBB3355:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12137              		.loc 3 529 0
+ 12138 aaa2 F30F6F8D 		movdqu	-6816(%rbp), %xmm1
+ 12138      60E5FFFF 
+ 12139 aaaa F30F6F85 		movdqu	-6800(%rbp), %xmm0
+ 12139      70E5FFFF 
+ 12140 aab2 660F3800 		pshufb	%xmm1, %xmm0
+ 12140      C1
+ 12141              	.LBE3355:
+ 12142              	.LBE3354:
+ 12143              	.LBE3353:
+ 12144              	.LBE3352:
+ 12145              	.LBE3351:
+ 12146              	.LBE3350:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12147              		.loc 2 1569 0
+ 12148 aab7 660F7F85 		movdqa	%xmm0, -10176(%rbp)
+ 12148      40D8FFFF 
+ 12149 aabf 660F6F85 		movdqa	-10176(%rbp), %xmm0
+ 12149      40D8FFFF 
+ 12150 aac7 660FEF85 		pxor	-7040(%rbp), %xmm0
+ 12150      80E4FFFF 
+ 12151 aacf F30F7F85 		movdqu	%xmm0, -7040(%rbp)
+ 12151      80E4FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 12152              		.loc 2 1571 0
+ 12153 aad7 F30F6F85 		movdqu	-7040(%rbp), %xmm0
+ 12153      80E4FFFF 
+ 12154              	.LBE3337:
+ 12155              	.LBE3336:
+ 12156              		.loc 2 1928 0
+ 12157 aadf F30F7F85 		movdqu	%xmm0, -9184(%rbp)
+ 12157      20DCFFFF 
+ 12158 aae7 F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 12158      20DCFFFF 
+ 12159 aaef F30F7F85 		movdqu	%xmm0, -6768(%rbp)
+ 12159      90E5FFFF 
+ 12160 aaf7 F30F6F85 		movdqu	-9152(%rbp), %xmm0
+ 12160      40DCFFFF 
+ 12161 aaff F30F7F85 		movdqu	%xmm0, -6784(%rbp)
+ 12161      80E5FFFF 
+ 12162              	.LBB3356:
+ 12163              	.LBB3357:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 378
+
+
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 12164              		.loc 2 178 0
+ 12165 ab07 F30F6F85 		movdqu	-6784(%rbp), %xmm0
+ 12165      80E5FFFF 
+ 12166 ab0f F30F6F8D 		movdqu	-6768(%rbp), %xmm1
+ 12166      90E5FFFF 
+ 12167 ab17 660FEFC1 		pxor	%xmm1, %xmm0
+ 12168              	.LBE3357:
+ 12169              	.LBE3356:
+ 12170              		.loc 2 1928 0
+ 12171 ab1b F30F7F85 		movdqu	%xmm0, -9184(%rbp)
+ 12171      20DCFFFF 
+ 12172 ab23 488B8598 		movq	-9832(%rbp), %rax
+ 12172      D9FFFF
+ 12173 ab2a 4883C040 		addq	$64, %rax
+ 12174 ab2e F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 12174      20DCFFFF 
+ 12175 ab36 F30F7F00 		movdqu	%xmm0, (%rax)
+ 12176 ab3a F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 12176      20DCFFFF 
+ 12177 ab42 F30F7F85 		movdqu	%xmm0, -6752(%rbp)
+ 12177      A0E5FFFF 
+ 12178              	.LBB3358:
+ 12179              	.LBB3359:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 12180              		.loc 2 1656 0
+ 12181 ab4a F30F6F85 		movdqu	-6752(%rbp), %xmm0
+ 12181      A0E5FFFF 
+ 12182 ab52 F30F7F85 		movdqu	%xmm0, -9648(%rbp)
+ 12182      50DAFFFF 
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 12183              		.loc 2 1657 0
+ 12184 ab5a 8B855CDA 		movl	-9636(%rbp), %eax
+ 12184      FFFF
+ 12185 ab60 8985B8E5 		movl	%eax, -6728(%rbp)
+ 12185      FFFF
+ 12186              	.LBB3360:
+ 12187              	.LBB3361:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 12188              		.loc 2 740 0
+ 12189 ab66 8B85B8E5 		movl	-6728(%rbp), %eax
+ 12189      FFFF
+ 12190 ab6c 898540DA 		movl	%eax, -9664(%rbp)
+ 12190      FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 12191              		.loc 2 741 0
+ 12192 ab72 C785BCE5 		movl	$0, -6724(%rbp)
+ 12192      FFFF0000 
+ 12192      0000
+ 12193 ab7c EB36     		jmp	.L178
+ 12194              	.L179:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 12195              		.loc 2 742 0
+ 12196 ab7e 8B8DBCE5 		movl	-6724(%rbp), %ecx
+ 12196      FFFF
+ 12197 ab84 8B85BCE5 		movl	-6724(%rbp), %eax
+ 12197      FFFF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 379
+
+
+ 12198 ab8a 89C0     		mov	%eax, %eax
+ 12199 ab8c 0FB68405 		movzbl	-9664(%rbp,%rax), %eax
+ 12199      40DAFFFF 
+ 12200 ab94 0FB6C0   		movzbl	%al, %eax
+ 12201 ab97 89C2     		mov	%eax, %edx
+ 12202 ab99 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBox(%rip), %rax
+ 12202      000000
+ 12203 aba0 0FB61402 		movzbl	(%rdx,%rax), %edx
+ 12204 aba4 89C8     		mov	%ecx, %eax
+ 12205 aba6 88940540 		movb	%dl, -9664(%rbp,%rax)
+ 12205      DAFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 12206              		.loc 2 741 0
+ 12207 abad 8385BCE5 		addl	$1, -6724(%rbp)
+ 12207      FFFF01
+ 12208              	.L178:
+ 12209 abb4 83BDBCE5 		cmpl	$3, -6724(%rbp)
+ 12209      FFFF03
+ 12210 abbb 76C1     		jbe	.L179
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 12211              		.loc 2 743 0
+ 12212 abbd 8B8540DA 		movl	-9664(%rbp), %eax
+ 12212      FFFF
+ 12213              	.LBE3361:
+ 12214              	.LBE3360:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 12215              		.loc 2 1657 0
+ 12216 abc3 8985B4E5 		movl	%eax, -6732(%rbp)
+ 12216      FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 12217              		.loc 2 1659 0
+ 12218 abc9 8B85B4E5 		movl	-6732(%rbp), %eax
+ 12218      FFFF
+ 12219 abcf 89855CDA 		movl	%eax, -9636(%rbp)
+ 12219      FFFF
+ 12220 abd5 8B855CDA 		movl	-9636(%rbp), %eax
+ 12220      FFFF
+ 12221 abdb 898558DA 		movl	%eax, -9640(%rbp)
+ 12221      FFFF
+ 12222 abe1 8B8558DA 		movl	-9640(%rbp), %eax
+ 12222      FFFF
+ 12223 abe7 898554DA 		movl	%eax, -9644(%rbp)
+ 12223      FFFF
+ 12224 abed 8B8554DA 		movl	-9644(%rbp), %eax
+ 12224      FFFF
+ 12225 abf3 898550DA 		movl	%eax, -9648(%rbp)
+ 12225      FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 12226              		.loc 2 1660 0
+ 12227 abf9 F30F6F85 		movdqu	-9648(%rbp), %xmm0
+ 12227      50DAFFFF 
+ 12228              	.LBE3359:
+ 12229              	.LBE3358:
+1929:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(5);         /* k20 : k21 : k22 : k23 */
+ 12230              		.loc 2 1929 0
+ 12231 ac01 F30F7F85 		movdqu	%xmm0, -9152(%rbp)
+ 12231      40DCFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 380
+
+
+ 12232 ac09 F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 12232      30DCFFFF 
+ 12233 ac11 F30F7F85 		movdqu	%xmm0, -6720(%rbp)
+ 12233      C0E5FFFF 
+ 12234              	.LBB3362:
+ 12235              	.LBB3363:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 12236              		.loc 2 1565 0
+ 12237 ac19 F30F6F85 		movdqu	-6720(%rbp), %xmm0
+ 12237      C0E5FFFF 
+ 12238 ac21 660F7F85 		movdqa	%xmm0, -10160(%rbp)
+ 12238      50D8FFFF 
+ 12239 ac29 660F6F85 		movdqa	-10160(%rbp), %xmm0
+ 12239      50D8FFFF 
+ 12240 ac31 F30F7F85 		movdqu	%xmm0, -6704(%rbp)
+ 12240      D0E5FFFF 
+ 12241              	.LBB3364:
+ 12242              	.LBB3365:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 12243              		.loc 2 1278 0
+ 12244 ac39 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 12244      00000000 
+ 12245 ac41 F30F6F8D 		movdqu	-6704(%rbp), %xmm1
+ 12245      D0E5FFFF 
+ 12246 ac49 F30F7F8D 		movdqu	%xmm1, -6672(%rbp)
+ 12246      F0E5FFFF 
+ 12247 ac51 F30F7F85 		movdqu	%xmm0, -6688(%rbp)
+ 12247      E0E5FFFF 
+ 12248 ac59 F30F6F85 		movdqu	-6672(%rbp), %xmm0
+ 12248      F0E5FFFF 
+ 12249 ac61 F30F7F85 		movdqu	%xmm0, -6640(%rbp)
+ 12249      10E6FFFF 
+ 12250 ac69 F30F6F85 		movdqu	-6688(%rbp), %xmm0
+ 12250      E0E5FFFF 
+ 12251 ac71 F30F7F85 		movdqu	%xmm0, -6656(%rbp)
+ 12251      00E6FFFF 
+ 12252              	.LBB3366:
+ 12253              	.LBB3367:
+ 12254              	.LBB3368:
+ 12255              	.LBB3369:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12256              		.loc 3 529 0
+ 12257 ac79 F30F6F8D 		movdqu	-6656(%rbp), %xmm1
+ 12257      00E6FFFF 
+ 12258 ac81 F30F6F85 		movdqu	-6640(%rbp), %xmm0
+ 12258      10E6FFFF 
+ 12259 ac89 660F3800 		pshufb	%xmm1, %xmm0
+ 12259      C1
+ 12260              	.LBE3369:
+ 12261              	.LBE3368:
+ 12262              	.LBE3367:
+ 12263              	.LBE3366:
+ 12264              	.LBE3365:
+ 12265              	.LBE3364:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12266              		.loc 2 1567 0
+ 12267 ac8e 660F7F85 		movdqa	%xmm0, -10160(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 381
+
+
+ 12267      50D8FFFF 
+ 12268 ac96 660F6F85 		movdqa	-10160(%rbp), %xmm0
+ 12268      50D8FFFF 
+ 12269 ac9e 660FEF85 		pxor	-6720(%rbp), %xmm0
+ 12269      C0E5FFFF 
+ 12270 aca6 F30F7F85 		movdqu	%xmm0, -6720(%rbp)
+ 12270      C0E5FFFF 
+ 12271 acae 660F6F85 		movdqa	-10160(%rbp), %xmm0
+ 12271      50D8FFFF 
+ 12272 acb6 F30F7F85 		movdqu	%xmm0, -6624(%rbp)
+ 12272      20E6FFFF 
+ 12273              	.LBB3370:
+ 12274              	.LBB3371:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 12275              		.loc 2 1278 0
+ 12276 acbe 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 12276      00000000 
+ 12277 acc6 F30F6F8D 		movdqu	-6624(%rbp), %xmm1
+ 12277      20E6FFFF 
+ 12278 acce F30F7F8D 		movdqu	%xmm1, -6592(%rbp)
+ 12278      40E6FFFF 
+ 12279 acd6 F30F7F85 		movdqu	%xmm0, -6608(%rbp)
+ 12279      30E6FFFF 
+ 12280 acde F30F6F85 		movdqu	-6592(%rbp), %xmm0
+ 12280      40E6FFFF 
+ 12281 ace6 F30F7F85 		movdqu	%xmm0, -6560(%rbp)
+ 12281      60E6FFFF 
+ 12282 acee F30F6F85 		movdqu	-6608(%rbp), %xmm0
+ 12282      30E6FFFF 
+ 12283 acf6 F30F7F85 		movdqu	%xmm0, -6576(%rbp)
+ 12283      50E6FFFF 
+ 12284              	.LBB3372:
+ 12285              	.LBB3373:
+ 12286              	.LBB3374:
+ 12287              	.LBB3375:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12288              		.loc 3 529 0
+ 12289 acfe F30F6F8D 		movdqu	-6576(%rbp), %xmm1
+ 12289      50E6FFFF 
+ 12290 ad06 F30F6F85 		movdqu	-6560(%rbp), %xmm0
+ 12290      60E6FFFF 
+ 12291 ad0e 660F3800 		pshufb	%xmm1, %xmm0
+ 12291      C1
+ 12292              	.LBE3375:
+ 12293              	.LBE3374:
+ 12294              	.LBE3373:
+ 12295              	.LBE3372:
+ 12296              	.LBE3371:
+ 12297              	.LBE3370:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12298              		.loc 2 1568 0
+ 12299 ad13 660F7F85 		movdqa	%xmm0, -10160(%rbp)
+ 12299      50D8FFFF 
+ 12300 ad1b 660F6F85 		movdqa	-10160(%rbp), %xmm0
+ 12300      50D8FFFF 
+ 12301 ad23 660FEF85 		pxor	-6720(%rbp), %xmm0
+ 12301      C0E5FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 382
+
+
+ 12302 ad2b F30F7F85 		movdqu	%xmm0, -6720(%rbp)
+ 12302      C0E5FFFF 
+ 12303 ad33 660F6F85 		movdqa	-10160(%rbp), %xmm0
+ 12303      50D8FFFF 
+ 12304 ad3b F30F7F85 		movdqu	%xmm0, -6544(%rbp)
+ 12304      70E6FFFF 
+ 12305              	.LBB3376:
+ 12306              	.LBB3377:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 12307              		.loc 2 1278 0
+ 12308 ad43 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 12308      00000000 
+ 12309 ad4b F30F6F8D 		movdqu	-6544(%rbp), %xmm1
+ 12309      70E6FFFF 
+ 12310 ad53 F30F7F8D 		movdqu	%xmm1, -6512(%rbp)
+ 12310      90E6FFFF 
+ 12311 ad5b F30F7F85 		movdqu	%xmm0, -6528(%rbp)
+ 12311      80E6FFFF 
+ 12312 ad63 F30F6F85 		movdqu	-6512(%rbp), %xmm0
+ 12312      90E6FFFF 
+ 12313 ad6b F30F7F85 		movdqu	%xmm0, -6480(%rbp)
+ 12313      B0E6FFFF 
+ 12314 ad73 F30F6F85 		movdqu	-6528(%rbp), %xmm0
+ 12314      80E6FFFF 
+ 12315 ad7b F30F7F85 		movdqu	%xmm0, -6496(%rbp)
+ 12315      A0E6FFFF 
+ 12316              	.LBB3378:
+ 12317              	.LBB3379:
+ 12318              	.LBB3380:
+ 12319              	.LBB3381:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12320              		.loc 3 529 0
+ 12321 ad83 F30F6F8D 		movdqu	-6496(%rbp), %xmm1
+ 12321      A0E6FFFF 
+ 12322 ad8b F30F6F85 		movdqu	-6480(%rbp), %xmm0
+ 12322      B0E6FFFF 
+ 12323 ad93 660F3800 		pshufb	%xmm1, %xmm0
+ 12323      C1
+ 12324              	.LBE3381:
+ 12325              	.LBE3380:
+ 12326              	.LBE3379:
+ 12327              	.LBE3378:
+ 12328              	.LBE3377:
+ 12329              	.LBE3376:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12330              		.loc 2 1569 0
+ 12331 ad98 660F7F85 		movdqa	%xmm0, -10160(%rbp)
+ 12331      50D8FFFF 
+ 12332 ada0 660F6F85 		movdqa	-10160(%rbp), %xmm0
+ 12332      50D8FFFF 
+ 12333 ada8 660FEF85 		pxor	-6720(%rbp), %xmm0
+ 12333      C0E5FFFF 
+ 12334 adb0 F30F7F85 		movdqu	%xmm0, -6720(%rbp)
+ 12334      C0E5FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 12335              		.loc 2 1571 0
+ 12336 adb8 F30F6F85 		movdqu	-6720(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 383
+
+
+ 12336      C0E5FFFF 
+ 12337              	.LBE3363:
+ 12338              	.LBE3362:
+ 12339              		.loc 2 1929 0
+ 12340 adc0 F30F7F85 		movdqu	%xmm0, -9168(%rbp)
+ 12340      30DCFFFF 
+ 12341 adc8 F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 12341      30DCFFFF 
+ 12342 add0 F30F7F85 		movdqu	%xmm0, -6448(%rbp)
+ 12342      D0E6FFFF 
+ 12343 add8 F30F6F85 		movdqu	-9152(%rbp), %xmm0
+ 12343      40DCFFFF 
+ 12344 ade0 F30F7F85 		movdqu	%xmm0, -6464(%rbp)
+ 12344      C0E6FFFF 
+ 12345              	.LBB3382:
+ 12346              	.LBB3383:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 12347              		.loc 2 178 0
+ 12348 ade8 F30F6F85 		movdqu	-6464(%rbp), %xmm0
+ 12348      C0E6FFFF 
+ 12349 adf0 F30F6F8D 		movdqu	-6448(%rbp), %xmm1
+ 12349      D0E6FFFF 
+ 12350 adf8 660FEFC1 		pxor	%xmm1, %xmm0
+ 12351              	.LBE3383:
+ 12352              	.LBE3382:
+ 12353              		.loc 2 1929 0
+ 12354 adfc F30F7F85 		movdqu	%xmm0, -9168(%rbp)
+ 12354      30DCFFFF 
+ 12355 ae04 488B8598 		movq	-9832(%rbp), %rax
+ 12355      D9FFFF
+ 12356 ae0b 4883C050 		addq	$80, %rax
+ 12357 ae0f F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 12357      30DCFFFF 
+ 12358 ae17 F30F7F00 		movdqu	%xmm0, (%rax)
+ 12359 ae1b F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 12359      30DCFFFF 
+ 12360 ae23 F30F7F85 		movdqu	%xmm0, -6416(%rbp)
+ 12360      F0E6FFFF 
+ 12361              	.LBB3384:
+ 12362              	.LBB3385:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 12363              		.loc 2 1681 0
+ 12364 ae2b B8040000 		movl	$4, %eax
+ 12364      00
+ 12365 ae30 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 12365      00000000 
+ 12366 ae38 F30F7F85 		movdqu	%xmm0, -6384(%rbp)
+ 12366      10E7FFFF 
+ 12367 ae40 89850CE7 		movl	%eax, -6388(%rbp)
+ 12367      FFFF
+ 12368 ae46 F30F6F85 		movdqu	-6384(%rbp), %xmm0
+ 12368      10E7FFFF 
+ 12369 ae4e F30F7F85 		movdqu	%xmm0, -6352(%rbp)
+ 12369      30E7FFFF 
+ 12370 ae56 8B850CE7 		movl	-6388(%rbp), %eax
+ 12370      FFFF
+ 12371 ae5c 89852CE7 		movl	%eax, -6356(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 384
+
+
+ 12371      FFFF
+ 12372              	.LBB3386:
+ 12373              	.LBB3387:
+ 12374              	.LBB3388:
+ 12375              	.LBB3389:
+ 12376              		.loc 3 598 0
+ 12377 ae62 8B852CE7 		movl	-6356(%rbp), %eax
+ 12377      FFFF
+ 12378 ae68 F30F6F85 		movdqu	-6352(%rbp), %xmm0
+ 12378      30E7FFFF 
+ 12379 ae70 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 12379      C003
+ 12380              	.LBE3389:
+ 12381              	.LBE3388:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 12382              		.loc 2 519 0
+ 12383 ae76 F30F7F85 		movdqu	%xmm0, -6384(%rbp)
+ 12383      10E7FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 12384              		.loc 2 526 0
+ 12385 ae7e F30F6F85 		movdqu	-6384(%rbp), %xmm0
+ 12385      10E7FFFF 
+ 12386              	.LBE3387:
+ 12387              	.LBE3386:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 12388              		.loc 2 1681 0
+ 12389 ae86 660F7F85 		movdqa	%xmm0, -10128(%rbp)
+ 12389      70D8FFFF 
+ 12390 ae8e F30F6F85 		movdqu	-6416(%rbp), %xmm0
+ 12390      F0E6FFFF 
+ 12391 ae96 F30F7F85 		movdqu	%xmm0, -6336(%rbp)
+ 12391      40E7FFFF 
+ 12392 ae9e F30F6F85 		movdqu	-6336(%rbp), %xmm0
+ 12392      40E7FFFF 
+ 12393 aea6 F30F7F85 		movdqu	%xmm0, -6304(%rbp)
+ 12393      60E7FFFF 
+ 12394 aeae 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 12394      000000
+ 12395 aeb5 48898558 		movq	%rax, -6312(%rbp)
+ 12395      E7FFFF
+ 12396              	.LBB3390:
+ 12397              	.LBB3391:
+ 12398              	.LBB3392:
+ 12399              	.LBB3393:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 12400              		.loc 2 851 0
+ 12401 aebc 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 12401      00000000 
+ 12402 aec4 F30F7F85 		movdqu	%xmm0, -6272(%rbp)
+ 12402      80E7FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 12403              		.loc 2 854 0
+ 12404 aecc 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 12404      00000000 
+ 12405 aed4 F30F6F8D 		movdqu	-6304(%rbp), %xmm1
+ 12405      60E7FFFF 
+ 12406 aedc F30F7F8D 		movdqu	%xmm1, -6192(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 385
+
+
+ 12406      D0E7FFFF 
+ 12407 aee4 F30F7F85 		movdqu	%xmm0, -6208(%rbp)
+ 12407      C0E7FFFF 
+ 12408              	.LBB3394:
+ 12409              	.LBB3395:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 12410              		.loc 2 206 0
+ 12411 aeec F30F6F85 		movdqu	-6208(%rbp), %xmm0
+ 12411      C0E7FFFF 
+ 12412 aef4 F30F6F8D 		movdqu	-6192(%rbp), %xmm1
+ 12412      D0E7FFFF 
+ 12413 aefc 660FDBC1 		pand	%xmm1, %xmm0
+ 12414              	.LBE3395:
+ 12415              	.LBE3394:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 12416              		.loc 2 854 0
+ 12417 af00 F30F7F85 		movdqu	%xmm0, -6224(%rbp)
+ 12417      B0E7FFFF 
+ 12418 af08 F30F6F85 		movdqu	-6304(%rbp), %xmm0
+ 12418      60E7FFFF 
+ 12419 af10 F30F7F85 		movdqu	%xmm0, -6160(%rbp)
+ 12419      F0E7FFFF 
+ 12420              	.LBB3396:
+ 12421              	.LBB3397:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 12422              		.loc 3 433 0
+ 12423 af18 F30F6F85 		movdqu	-6160(%rbp), %xmm0
+ 12423      F0E7FFFF 
+ 12424 af20 660F72D0 		psrld	$4, %xmm0
+ 12424      04
+ 12425              	.LBE3397:
+ 12426              	.LBE3396:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 12427              		.loc 2 857 0
+ 12428 af25 F30F7F85 		movdqu	%xmm0, -6240(%rbp)
+ 12428      A0E7FFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 12429              		.loc 2 859 0
+ 12430 af2d 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 12430      00000000 
+ 12431 af35 F30F6F8D 		movdqu	-6240(%rbp), %xmm1
+ 12431      A0E7FFFF 
+ 12432 af3d F30F7F8D 		movdqu	%xmm1, -6128(%rbp)
+ 12432      10E8FFFF 
+ 12433 af45 F30F7F85 		movdqu	%xmm0, -6144(%rbp)
+ 12433      00E8FFFF 
+ 12434              	.LBB3398:
+ 12435              	.LBB3399:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 12436              		.loc 2 206 0
+ 12437 af4d F30F6F85 		movdqu	-6144(%rbp), %xmm0
+ 12437      00E8FFFF 
+ 12438 af55 F30F6F8D 		movdqu	-6128(%rbp), %xmm1
+ 12438      10E8FFFF 
+ 12439 af5d 660FDBC1 		pand	%xmm1, %xmm0
+ 12440              	.LBE3399:
+ 12441              	.LBE3398:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 386
+
+
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 12442              		.loc 2 859 0
+ 12443 af61 F30F7F85 		movdqu	%xmm0, -6240(%rbp)
+ 12443      A0E7FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 12444              		.loc 2 866 0
+ 12445 af69 C7857CE7 		movl	$0, -6276(%rbp)
+ 12445      FFFF0000 
+ 12445      0000
+ 12446 af73 E9BE0100 		jmp	.L180
+ 12446      00
+ 12447              	.L181:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 12448              		.loc 2 868 0
+ 12449 af78 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 12449      00000000 
+ 12450 af80 F30F7F85 		movdqu	%xmm0, -6096(%rbp)
+ 12450      30E8FFFF 
+ 12451 af88 F30F6F85 		movdqu	-6240(%rbp), %xmm0
+ 12451      A0E7FFFF 
+ 12452 af90 F30F7F85 		movdqu	%xmm0, -6112(%rbp)
+ 12452      20E8FFFF 
+ 12453 af98 F30F6F85 		movdqu	-6096(%rbp), %xmm0
+ 12453      30E8FFFF 
+ 12454 afa0 F30F7F85 		movdqu	%xmm0, -6064(%rbp)
+ 12454      50E8FFFF 
+ 12455 afa8 F30F6F85 		movdqu	-6112(%rbp), %xmm0
+ 12455      20E8FFFF 
+ 12456 afb0 F30F7F85 		movdqu	%xmm0, -6080(%rbp)
+ 12456      40E8FFFF 
+ 12457              	.LBB3400:
+ 12458              	.LBB3401:
+ 12459              	.LBB3402:
+ 12460              	.LBB3403:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12461              		.loc 3 529 0
+ 12462 afb8 F30F6F8D 		movdqu	-6080(%rbp), %xmm1
+ 12462      40E8FFFF 
+ 12463 afc0 F30F6F85 		movdqu	-6064(%rbp), %xmm0
+ 12463      50E8FFFF 
+ 12464 afc8 660F3800 		pshufb	%xmm1, %xmm0
+ 12464      C1
+ 12465              	.LBE3403:
+ 12466              	.LBE3402:
+ 12467              	.LBE3401:
+ 12468              	.LBE3400:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 12469              		.loc 2 868 0
+ 12470 afcd F30F7F85 		movdqu	%xmm0, -6256(%rbp)
+ 12470      90E7FFFF 
+ 12471 afd5 F30F6F85 		movdqu	-6224(%rbp), %xmm0
+ 12471      B0E7FFFF 
+ 12472 afdd F30F7F85 		movdqu	%xmm0, -6032(%rbp)
+ 12472      70E8FFFF 
+ 12473 afe5 F30F6F85 		movdqu	-6256(%rbp), %xmm0
+ 12473      90E7FFFF 
+ 12474 afed F30F7F85 		movdqu	%xmm0, -6048(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 387
+
+
+ 12474      60E8FFFF 
+ 12475              	.LBB3404:
+ 12476              	.LBB3405:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 12477              		.loc 2 234 0
+ 12478 aff5 F30F6F85 		movdqu	-6048(%rbp), %xmm0
+ 12478      60E8FFFF 
+ 12479 affd F30F6F8D 		movdqu	-6032(%rbp), %xmm1
+ 12479      70E8FFFF 
+ 12480 b005 660FEBC1 		por	%xmm1, %xmm0
+ 12481              	.LBE3405:
+ 12482              	.LBE3404:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 12483              		.loc 2 870 0
+ 12484 b009 F30F7F85 		movdqu	%xmm0, -6256(%rbp)
+ 12484      90E7FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 12485              		.loc 2 872 0
+ 12486 b011 8B857CE7 		mov	-6276(%rbp), %eax
+ 12486      FFFF
+ 12487 b017 48C1E004 		salq	$4, %rax
+ 12488 b01b 48038558 		addq	-6312(%rbp), %rax
+ 12488      E7FFFF
+ 12489 b022 660F6F00 		movdqa	(%rax), %xmm0
+ 12490 b026 F30F7F85 		movdqu	%xmm0, -6000(%rbp)
+ 12490      90E8FFFF 
+ 12491 b02e F30F6F85 		movdqu	-6256(%rbp), %xmm0
+ 12491      90E7FFFF 
+ 12492 b036 F30F7F85 		movdqu	%xmm0, -6016(%rbp)
+ 12492      80E8FFFF 
+ 12493 b03e F30F6F85 		movdqu	-6000(%rbp), %xmm0
+ 12493      90E8FFFF 
+ 12494 b046 F30F7F85 		movdqu	%xmm0, -5968(%rbp)
+ 12494      B0E8FFFF 
+ 12495 b04e F30F6F85 		movdqu	-6016(%rbp), %xmm0
+ 12495      80E8FFFF 
+ 12496 b056 F30F7F85 		movdqu	%xmm0, -5984(%rbp)
+ 12496      A0E8FFFF 
+ 12497              	.LBB3406:
+ 12498              	.LBB3407:
+ 12499              	.LBB3408:
+ 12500              	.LBB3409:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12501              		.loc 3 529 0
+ 12502 b05e F30F6F8D 		movdqu	-5984(%rbp), %xmm1
+ 12502      A0E8FFFF 
+ 12503 b066 F30F6F85 		movdqu	-5968(%rbp), %xmm0
+ 12503      B0E8FFFF 
+ 12504 b06e 660F3800 		pshufb	%xmm1, %xmm0
+ 12504      C1
+ 12505              	.LBE3409:
+ 12506              	.LBE3408:
+ 12507              	.LBE3407:
+ 12508              	.LBE3406:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 12509              		.loc 2 872 0
+ 12510 b073 F30F7F85 		movdqu	%xmm0, -6256(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 388
+
+
+ 12510      90E7FFFF 
+ 12511 b07b F30F6F85 		movdqu	-6272(%rbp), %xmm0
+ 12511      80E7FFFF 
+ 12512 b083 F30F7F85 		movdqu	%xmm0, -5936(%rbp)
+ 12512      D0E8FFFF 
+ 12513 b08b F30F6F85 		movdqu	-6256(%rbp), %xmm0
+ 12513      90E7FFFF 
+ 12514 b093 F30F7F85 		movdqu	%xmm0, -5952(%rbp)
+ 12514      C0E8FFFF 
+ 12515              	.LBB3410:
+ 12516              	.LBB3411:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 12517              		.loc 2 234 0
+ 12518 b09b F30F6F85 		movdqu	-5952(%rbp), %xmm0
+ 12518      C0E8FFFF 
+ 12519 b0a3 F30F6F8D 		movdqu	-5936(%rbp), %xmm1
+ 12519      D0E8FFFF 
+ 12520 b0ab 660FEBC1 		por	%xmm1, %xmm0
+ 12521              	.LBE3411:
+ 12522              	.LBE3410:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 12523              		.loc 2 874 0
+ 12524 b0af F30F7F85 		movdqu	%xmm0, -6272(%rbp)
+ 12524      80E7FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 12525              		.loc 2 876 0
+ 12526 b0b7 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 12526      00000000 
+ 12527 b0bf F30F6F8D 		movdqu	-6240(%rbp), %xmm1
+ 12527      A0E7FFFF 
+ 12528 b0c7 F30F7F8D 		movdqu	%xmm1, -5904(%rbp)
+ 12528      F0E8FFFF 
+ 12529 b0cf F30F7F85 		movdqu	%xmm0, -5920(%rbp)
+ 12529      E0E8FFFF 
+ 12530              	.LBB3412:
+ 12531              	.LBB3413:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 12532              		.loc 2 290 0
+ 12533 b0d7 F30F6F8D 		movdqu	-5920(%rbp), %xmm1
+ 12533      E0E8FFFF 
+ 12534 b0df F30F6F85 		movdqu	-5904(%rbp), %xmm0
+ 12534      F0E8FFFF 
+ 12535 b0e7 660FF8C1 		psubb	%xmm1, %xmm0
+ 12536              	.LBE3413:
+ 12537              	.LBE3412:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 12538              		.loc 2 876 0
+ 12539 b0eb F30F7F85 		movdqu	%xmm0, -6240(%rbp)
+ 12539      A0E7FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 12540              		.loc 2 878 0
+ 12541 b0f3 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 12541      00000000 
+ 12542 b0fb F30F6F8D 		movdqu	-6240(%rbp), %xmm1
+ 12542      A0E7FFFF 
+ 12543 b103 F30F7F8D 		movdqu	%xmm1, -5872(%rbp)
+ 12543      10E9FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 389
+
+
+ 12544 b10b F30F7F85 		movdqu	%xmm0, -5888(%rbp)
+ 12544      00E9FFFF 
+ 12545              	.LBB3414:
+ 12546              	.LBB3415:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 12547              		.loc 2 206 0
+ 12548 b113 F30F6F85 		movdqu	-5888(%rbp), %xmm0
+ 12548      00E9FFFF 
+ 12549 b11b F30F6F8D 		movdqu	-5872(%rbp), %xmm1
+ 12549      10E9FFFF 
+ 12550 b123 660FDBC1 		pand	%xmm1, %xmm0
+ 12551              	.LBE3415:
+ 12552              	.LBE3414:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 12553              		.loc 2 878 0
+ 12554 b127 F30F7F85 		movdqu	%xmm0, -6240(%rbp)
+ 12554      A0E7FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 12555              		.loc 2 866 0
+ 12556 b12f 83857CE7 		addl	$1, -6276(%rbp)
+ 12556      FFFF01
+ 12557              	.L180:
+ 12558 b136 83BD7CE7 		cmpl	$15, -6276(%rbp)
+ 12558      FFFF0F
+ 12559 b13d 0F8635FE 		jbe	.L181
+ 12559      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 12560              		.loc 2 882 0
+ 12561 b143 F30F6F85 		movdqu	-6272(%rbp), %xmm0
+ 12561      80E7FFFF 
+ 12562              	.LBE3393:
+ 12563              	.LBE3392:
+ 12564              	.LBE3391:
+ 12565              	.LBE3390:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 12566              		.loc 2 1682 0
+ 12567 b14b 660F7F85 		movdqa	%xmm0, -10144(%rbp)
+ 12567      60D8FFFF 
+ 12568              	.LBB3416:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 12569              		.loc 2 1683 0
+ 12570 b153 660F6F85 		movdqa	-10144(%rbp), %xmm0
+ 12570      60D8FFFF 
+ 12571 b15b F30F7F85 		movdqu	%xmm0, -9584(%rbp)
+ 12571      90DAFFFF 
+ 12572 b163 E8000000 		call	KDbgWriterGet at PLT
+ 12572      00
+ 12573 b168 4885C0   		testq	%rax, %rax
+ 12574 b16b 7479     		je	.L183
+ 12575 b16d BF010000 		movl	$1, %edi
+ 12575      00
+ 12576 b172 E8000000 		call	KDbgCondToFlag at PLT
+ 12576      00
+ 12577 b177 4889C6   		movq	%rax, %rsi
+ 12578 b17a BF100000 		movl	$16, %edi
+ 12578      00
+ 12579 b17f E8000000 		call	KDbgTestModConds at PLT
+
GAS LISTING /tmp/ccjbMjHD.s 			page 390
+
+
+ 12579      00
+ 12580 b184 84C0     		testb	%al, %al
+ 12581 b186 745E     		je	.L183
+ 12582 b188 8B859CDA 		movl	-9572(%rbp), %eax
+ 12582      FFFF
+ 12583 b18e 89C7     		movl	%eax, %edi
+ 12584 b190 E86B4EFF 		call	bswap_32
+ 12584      FF
+ 12585 b195 4189C5   		movl	%eax, %r13d
+ 12586 b198 8B8598DA 		movl	-9576(%rbp), %eax
+ 12586      FFFF
+ 12587 b19e 89C7     		movl	%eax, %edi
+ 12588 b1a0 E85B4EFF 		call	bswap_32
+ 12588      FF
+ 12589 b1a5 4189C4   		movl	%eax, %r12d
+ 12590 b1a8 8B8594DA 		movl	-9580(%rbp), %eax
+ 12590      FFFF
+ 12591 b1ae 89C7     		movl	%eax, %edi
+ 12592 b1b0 E84B4EFF 		call	bswap_32
+ 12592      FF
+ 12593 b1b5 89C3     		movl	%eax, %ebx
+ 12594 b1b7 8B8590DA 		movl	-9584(%rbp), %eax
+ 12594      FFFF
+ 12595 b1bd 89C7     		movl	%eax, %edi
+ 12596 b1bf E83C4EFF 		call	bswap_32
+ 12596      FF
+ 12597 b1c4 4589E9   		movl	%r13d, %r9d
+ 12598 b1c7 4589E0   		movl	%r12d, %r8d
+ 12599 b1ca 89D9     		movl	%ebx, %ecx
+ 12600 b1cc 89C2     		movl	%eax, %edx
+ 12601 b1ce 488D3500 		leaq	.LC0(%rip), %rsi
+ 12601      000000
+ 12602 b1d5 488D3D00 		leaq	.LC1(%rip), %rdi
+ 12602      000000
+ 12603 b1dc B8000000 		movl	$0, %eax
+ 12603      00
+ 12604 b1e1 E8000000 		call	KDbgMsg at PLT
+ 12604      00
+ 12605              	.L183:
+ 12606 b1e6 660F6F85 		movdqa	-10144(%rbp), %xmm0
+ 12606      60D8FFFF 
+ 12607 b1ee F30F7F85 		movdqu	%xmm0, -5856(%rbp)
+ 12607      20E9FFFF 
+ 12608              	.LBE3416:
+ 12609              	.LBB3417:
+ 12610              	.LBB3418:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 12611              		.loc 2 667 0
+ 12612 b1f6 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 12612      00000000 
+ 12613 b1fe F30F6F8D 		movdqu	-5856(%rbp), %xmm1
+ 12613      20E9FFFF 
+ 12614 b206 F30F7F8D 		movdqu	%xmm1, -5824(%rbp)
+ 12614      40E9FFFF 
+ 12615 b20e F30F7F85 		movdqu	%xmm0, -5840(%rbp)
+ 12615      30E9FFFF 
+ 12616 b216 F30F6F85 		movdqu	-5824(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 391
+
+
+ 12616      40E9FFFF 
+ 12617 b21e F30F7F85 		movdqu	%xmm0, -5792(%rbp)
+ 12617      60E9FFFF 
+ 12618 b226 F30F6F85 		movdqu	-5840(%rbp), %xmm0
+ 12618      30E9FFFF 
+ 12619 b22e F30F7F85 		movdqu	%xmm0, -5808(%rbp)
+ 12619      50E9FFFF 
+ 12620              	.LBB3419:
+ 12621              	.LBB3420:
+ 12622              	.LBB3421:
+ 12623              	.LBB3422:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12624              		.loc 3 529 0
+ 12625 b236 F30F6F8D 		movdqu	-5808(%rbp), %xmm1
+ 12625      50E9FFFF 
+ 12626 b23e F30F6F85 		movdqu	-5792(%rbp), %xmm0
+ 12626      60E9FFFF 
+ 12627 b246 660F3800 		pshufb	%xmm1, %xmm0
+ 12627      C1
+ 12628              	.LBE3422:
+ 12629              	.LBE3421:
+ 12630              	.LBE3420:
+ 12631              	.LBE3419:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 12632              		.loc 2 667 0
+ 12633 b24b F30F7F85 		movdqu	%xmm0, -5856(%rbp)
+ 12633      20E9FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 12634              		.loc 2 668 0
+ 12635 b253 F30F6F85 		movdqu	-5856(%rbp), %xmm0
+ 12635      20E9FFFF 
+ 12636              	.LBE3418:
+ 12637              	.LBE3417:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 12638              		.loc 2 1684 0
+ 12639 b25b 660F7F85 		movdqa	%xmm0, -10144(%rbp)
+ 12639      60D8FFFF 
+ 12640              	.LBB3423:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 12641              		.loc 2 1685 0
+ 12642 b263 660F6F85 		movdqa	-10144(%rbp), %xmm0
+ 12642      60D8FFFF 
+ 12643 b26b F30F7F85 		movdqu	%xmm0, -9600(%rbp)
+ 12643      80DAFFFF 
+ 12644 b273 E8000000 		call	KDbgWriterGet at PLT
+ 12644      00
+ 12645 b278 4885C0   		testq	%rax, %rax
+ 12646 b27b 7479     		je	.L185
+ 12647 b27d BF010000 		movl	$1, %edi
+ 12647      00
+ 12648 b282 E8000000 		call	KDbgCondToFlag at PLT
+ 12648      00
+ 12649 b287 4889C6   		movq	%rax, %rsi
+ 12650 b28a BF100000 		movl	$16, %edi
+ 12650      00
+ 12651 b28f E8000000 		call	KDbgTestModConds at PLT
+ 12651      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 392
+
+
+ 12652 b294 84C0     		testb	%al, %al
+ 12653 b296 745E     		je	.L185
+ 12654 b298 8B858CDA 		movl	-9588(%rbp), %eax
+ 12654      FFFF
+ 12655 b29e 89C7     		movl	%eax, %edi
+ 12656 b2a0 E85B4DFF 		call	bswap_32
+ 12656      FF
+ 12657 b2a5 4189C5   		movl	%eax, %r13d
+ 12658 b2a8 8B8588DA 		movl	-9592(%rbp), %eax
+ 12658      FFFF
+ 12659 b2ae 89C7     		movl	%eax, %edi
+ 12660 b2b0 E84B4DFF 		call	bswap_32
+ 12660      FF
+ 12661 b2b5 4189C4   		movl	%eax, %r12d
+ 12662 b2b8 8B8584DA 		movl	-9596(%rbp), %eax
+ 12662      FFFF
+ 12663 b2be 89C7     		movl	%eax, %edi
+ 12664 b2c0 E83B4DFF 		call	bswap_32
+ 12664      FF
+ 12665 b2c5 89C3     		movl	%eax, %ebx
+ 12666 b2c7 8B8580DA 		movl	-9600(%rbp), %eax
+ 12666      FFFF
+ 12667 b2cd 89C7     		movl	%eax, %edi
+ 12668 b2cf E82C4DFF 		call	bswap_32
+ 12668      FF
+ 12669 b2d4 4589E9   		movl	%r13d, %r9d
+ 12670 b2d7 4589E0   		movl	%r12d, %r8d
+ 12671 b2da 89D9     		movl	%ebx, %ecx
+ 12672 b2dc 89C2     		movl	%eax, %edx
+ 12673 b2de 488D3500 		leaq	.LC2(%rip), %rsi
+ 12673      000000
+ 12674 b2e5 488D3D00 		leaq	.LC1(%rip), %rdi
+ 12674      000000
+ 12675 b2ec B8000000 		movl	$0, %eax
+ 12675      00
+ 12676 b2f1 E8000000 		call	KDbgMsg at PLT
+ 12676      00
+ 12677              	.L185:
+ 12678 b2f6 660F6F85 		movdqa	-10144(%rbp), %xmm0
+ 12678      60D8FFFF 
+ 12679 b2fe F30F7F85 		movdqu	%xmm0, -5760(%rbp)
+ 12679      80E9FFFF 
+ 12680 b306 660F6F85 		movdqa	-10128(%rbp), %xmm0
+ 12680      70D8FFFF 
+ 12681 b30e F30F7F85 		movdqu	%xmm0, -5776(%rbp)
+ 12681      70E9FFFF 
+ 12682              	.LBE3423:
+ 12683              	.LBB3424:
+ 12684              	.LBB3425:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 12685              		.loc 2 178 0
+ 12686 b316 F30F6F85 		movdqu	-5776(%rbp), %xmm0
+ 12686      70E9FFFF 
+ 12687 b31e F30F6F8D 		movdqu	-5760(%rbp), %xmm1
+ 12687      80E9FFFF 
+ 12688 b326 660FEFC1 		pxor	%xmm1, %xmm0
+ 12689              	.LBE3425:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 393
+
+
+ 12690              	.LBE3424:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 12691              		.loc 2 1686 0
+ 12692 b32a 660F7F85 		movdqa	%xmm0, -10144(%rbp)
+ 12692      60D8FFFF 
+ 12693              	.LBB3426:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 12694              		.loc 2 1687 0
+ 12695 b332 660F6F85 		movdqa	-10144(%rbp), %xmm0
+ 12695      60D8FFFF 
+ 12696 b33a F30F7F85 		movdqu	%xmm0, -9616(%rbp)
+ 12696      70DAFFFF 
+ 12697 b342 E8000000 		call	KDbgWriterGet at PLT
+ 12697      00
+ 12698 b347 4885C0   		testq	%rax, %rax
+ 12699 b34a 7479     		je	.L187
+ 12700 b34c BF010000 		movl	$1, %edi
+ 12700      00
+ 12701 b351 E8000000 		call	KDbgCondToFlag at PLT
+ 12701      00
+ 12702 b356 4889C6   		movq	%rax, %rsi
+ 12703 b359 BF100000 		movl	$16, %edi
+ 12703      00
+ 12704 b35e E8000000 		call	KDbgTestModConds at PLT
+ 12704      00
+ 12705 b363 84C0     		testb	%al, %al
+ 12706 b365 745E     		je	.L187
+ 12707 b367 8B857CDA 		movl	-9604(%rbp), %eax
+ 12707      FFFF
+ 12708 b36d 89C7     		movl	%eax, %edi
+ 12709 b36f E88C4CFF 		call	bswap_32
+ 12709      FF
+ 12710 b374 4189C5   		movl	%eax, %r13d
+ 12711 b377 8B8578DA 		movl	-9608(%rbp), %eax
+ 12711      FFFF
+ 12712 b37d 89C7     		movl	%eax, %edi
+ 12713 b37f E87C4CFF 		call	bswap_32
+ 12713      FF
+ 12714 b384 4189C4   		movl	%eax, %r12d
+ 12715 b387 8B8574DA 		movl	-9612(%rbp), %eax
+ 12715      FFFF
+ 12716 b38d 89C7     		movl	%eax, %edi
+ 12717 b38f E86C4CFF 		call	bswap_32
+ 12717      FF
+ 12718 b394 89C3     		movl	%eax, %ebx
+ 12719 b396 8B8570DA 		movl	-9616(%rbp), %eax
+ 12719      FFFF
+ 12720 b39c 89C7     		movl	%eax, %edi
+ 12721 b39e E85D4CFF 		call	bswap_32
+ 12721      FF
+ 12722 b3a3 4589E9   		movl	%r13d, %r9d
+ 12723 b3a6 4589E0   		movl	%r12d, %r8d
+ 12724 b3a9 89D9     		movl	%ebx, %ecx
+ 12725 b3ab 89C2     		movl	%eax, %edx
+ 12726 b3ad 488D3500 		leaq	.LC3(%rip), %rsi
+ 12726      000000
+ 12727 b3b4 488D3D00 		leaq	.LC1(%rip), %rdi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 394
+
+
+ 12727      000000
+ 12728 b3bb B8000000 		movl	$0, %eax
+ 12728      00
+ 12729 b3c0 E8000000 		call	KDbgMsg at PLT
+ 12729      00
+ 12730              	.L187:
+ 12731 b3c5 660F6F85 		movdqa	-10144(%rbp), %xmm0
+ 12731      60D8FFFF 
+ 12732 b3cd F30F7F85 		movdqu	%xmm0, -5744(%rbp)
+ 12732      90E9FFFF 
+ 12733 b3d5 F30F6F85 		movdqu	-5744(%rbp), %xmm0
+ 12733      90E9FFFF 
+ 12734 b3dd F30F7F85 		movdqu	%xmm0, -5712(%rbp)
+ 12734      B0E9FFFF 
+ 12735              	.LBE3426:
+ 12736              	.LBB3427:
+ 12737              	.LBB3428:
+ 12738              	.LBB3429:
+ 12739              	.LBB3430:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 12740              		.loc 3 450 0
+ 12741 b3e5 F30F6F85 		movdqu	-5712(%rbp), %xmm0
+ 12741      B0E9FFFF 
+ 12742 b3ed 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 12742      FF
+ 12743              	.LBE3430:
+ 12744              	.LBE3429:
+ 12745              	.LBE3428:
+ 12746              	.LBE3427:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 12747              		.loc 2 1688 0
+ 12748 b3f2 660F7F85 		movdqa	%xmm0, -10144(%rbp)
+ 12748      60D8FFFF 
+ 12749              	.LBB3431:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 12750              		.loc 2 1689 0
+ 12751 b3fa 660F6F85 		movdqa	-10144(%rbp), %xmm0
+ 12751      60D8FFFF 
+ 12752 b402 F30F7F85 		movdqu	%xmm0, -9632(%rbp)
+ 12752      60DAFFFF 
+ 12753 b40a E8000000 		call	KDbgWriterGet at PLT
+ 12753      00
+ 12754 b40f 4885C0   		testq	%rax, %rax
+ 12755 b412 7479     		je	.L189
+ 12756 b414 BF010000 		movl	$1, %edi
+ 12756      00
+ 12757 b419 E8000000 		call	KDbgCondToFlag at PLT
+ 12757      00
+ 12758 b41e 4889C6   		movq	%rax, %rsi
+ 12759 b421 BF100000 		movl	$16, %edi
+ 12759      00
+ 12760 b426 E8000000 		call	KDbgTestModConds at PLT
+ 12760      00
+ 12761 b42b 84C0     		testb	%al, %al
+ 12762 b42d 745E     		je	.L189
+ 12763 b42f 8B856CDA 		movl	-9620(%rbp), %eax
+ 12763      FFFF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 395
+
+
+ 12764 b435 89C7     		movl	%eax, %edi
+ 12765 b437 E8C44BFF 		call	bswap_32
+ 12765      FF
+ 12766 b43c 4189C5   		movl	%eax, %r13d
+ 12767 b43f 8B8568DA 		movl	-9624(%rbp), %eax
+ 12767      FFFF
+ 12768 b445 89C7     		movl	%eax, %edi
+ 12769 b447 E8B44BFF 		call	bswap_32
+ 12769      FF
+ 12770 b44c 4189C4   		movl	%eax, %r12d
+ 12771 b44f 8B8564DA 		movl	-9628(%rbp), %eax
+ 12771      FFFF
+ 12772 b455 89C7     		movl	%eax, %edi
+ 12773 b457 E8A44BFF 		call	bswap_32
+ 12773      FF
+ 12774 b45c 89C3     		movl	%eax, %ebx
+ 12775 b45e 8B8560DA 		movl	-9632(%rbp), %eax
+ 12775      FFFF
+ 12776 b464 89C7     		movl	%eax, %edi
+ 12777 b466 E8954BFF 		call	bswap_32
+ 12777      FF
+ 12778 b46b 4589E9   		movl	%r13d, %r9d
+ 12779 b46e 4589E0   		movl	%r12d, %r8d
+ 12780 b471 89D9     		movl	%ebx, %ecx
+ 12781 b473 89C2     		movl	%eax, %edx
+ 12782 b475 488D3500 		leaq	.LC4(%rip), %rsi
+ 12782      000000
+ 12783 b47c 488D3D00 		leaq	.LC1(%rip), %rdi
+ 12783      000000
+ 12784 b483 B8000000 		movl	$0, %eax
+ 12784      00
+ 12785 b488 E8000000 		call	KDbgMsg at PLT
+ 12785      00
+ 12786              	.L189:
+ 12787              	.LBE3431:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 12788              		.loc 2 1690 0
+ 12789 b48d 660F6F85 		movdqa	-10144(%rbp), %xmm0
+ 12789      60D8FFFF 
+ 12790              	.LBE3385:
+ 12791              	.LBE3384:
+1930:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(6,0x04);    /* k24 : k25 : k26 : k27 */
+ 12792              		.loc 2 1930 0
+ 12793 b495 F30F7F85 		movdqu	%xmm0, -9152(%rbp)
+ 12793      40DCFFFF 
+ 12794 b49d F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 12794      20DCFFFF 
+ 12795 b4a5 F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 12795      C0E9FFFF 
+ 12796              	.LBB3432:
+ 12797              	.LBB3433:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 12798              		.loc 2 1565 0
+ 12799 b4ad F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 12799      C0E9FFFF 
+ 12800 b4b5 660F7F85 		movdqa	%xmm0, -10112(%rbp)
+ 12800      80D8FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 396
+
+
+ 12801 b4bd 660F6F85 		movdqa	-10112(%rbp), %xmm0
+ 12801      80D8FFFF 
+ 12802 b4c5 F30F7F85 		movdqu	%xmm0, -5680(%rbp)
+ 12802      D0E9FFFF 
+ 12803              	.LBB3434:
+ 12804              	.LBB3435:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 12805              		.loc 2 1278 0
+ 12806 b4cd 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 12806      00000000 
+ 12807 b4d5 F30F6F8D 		movdqu	-5680(%rbp), %xmm1
+ 12807      D0E9FFFF 
+ 12808 b4dd F30F7F8D 		movdqu	%xmm1, -5648(%rbp)
+ 12808      F0E9FFFF 
+ 12809 b4e5 F30F7F85 		movdqu	%xmm0, -5664(%rbp)
+ 12809      E0E9FFFF 
+ 12810 b4ed F30F6F85 		movdqu	-5648(%rbp), %xmm0
+ 12810      F0E9FFFF 
+ 12811 b4f5 F30F7F85 		movdqu	%xmm0, -5616(%rbp)
+ 12811      10EAFFFF 
+ 12812 b4fd F30F6F85 		movdqu	-5664(%rbp), %xmm0
+ 12812      E0E9FFFF 
+ 12813 b505 F30F7F85 		movdqu	%xmm0, -5632(%rbp)
+ 12813      00EAFFFF 
+ 12814              	.LBB3436:
+ 12815              	.LBB3437:
+ 12816              	.LBB3438:
+ 12817              	.LBB3439:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12818              		.loc 3 529 0
+ 12819 b50d F30F6F8D 		movdqu	-5632(%rbp), %xmm1
+ 12819      00EAFFFF 
+ 12820 b515 F30F6F85 		movdqu	-5616(%rbp), %xmm0
+ 12820      10EAFFFF 
+ 12821 b51d 660F3800 		pshufb	%xmm1, %xmm0
+ 12821      C1
+ 12822              	.LBE3439:
+ 12823              	.LBE3438:
+ 12824              	.LBE3437:
+ 12825              	.LBE3436:
+ 12826              	.LBE3435:
+ 12827              	.LBE3434:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12828              		.loc 2 1567 0
+ 12829 b522 660F7F85 		movdqa	%xmm0, -10112(%rbp)
+ 12829      80D8FFFF 
+ 12830 b52a 660F6F85 		movdqa	-10112(%rbp), %xmm0
+ 12830      80D8FFFF 
+ 12831 b532 660FEF85 		pxor	-5696(%rbp), %xmm0
+ 12831      C0E9FFFF 
+ 12832 b53a F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 12832      C0E9FFFF 
+ 12833 b542 660F6F85 		movdqa	-10112(%rbp), %xmm0
+ 12833      80D8FFFF 
+ 12834 b54a F30F7F85 		movdqu	%xmm0, -5600(%rbp)
+ 12834      20EAFFFF 
+ 12835              	.LBB3440:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 397
+
+
+ 12836              	.LBB3441:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 12837              		.loc 2 1278 0
+ 12838 b552 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 12838      00000000 
+ 12839 b55a F30F6F8D 		movdqu	-5600(%rbp), %xmm1
+ 12839      20EAFFFF 
+ 12840 b562 F30F7F8D 		movdqu	%xmm1, -5568(%rbp)
+ 12840      40EAFFFF 
+ 12841 b56a F30F7F85 		movdqu	%xmm0, -5584(%rbp)
+ 12841      30EAFFFF 
+ 12842 b572 F30F6F85 		movdqu	-5568(%rbp), %xmm0
+ 12842      40EAFFFF 
+ 12843 b57a F30F7F85 		movdqu	%xmm0, -5536(%rbp)
+ 12843      60EAFFFF 
+ 12844 b582 F30F6F85 		movdqu	-5584(%rbp), %xmm0
+ 12844      30EAFFFF 
+ 12845 b58a F30F7F85 		movdqu	%xmm0, -5552(%rbp)
+ 12845      50EAFFFF 
+ 12846              	.LBB3442:
+ 12847              	.LBB3443:
+ 12848              	.LBB3444:
+ 12849              	.LBB3445:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12850              		.loc 3 529 0
+ 12851 b592 F30F6F8D 		movdqu	-5552(%rbp), %xmm1
+ 12851      50EAFFFF 
+ 12852 b59a F30F6F85 		movdqu	-5536(%rbp), %xmm0
+ 12852      60EAFFFF 
+ 12853 b5a2 660F3800 		pshufb	%xmm1, %xmm0
+ 12853      C1
+ 12854              	.LBE3445:
+ 12855              	.LBE3444:
+ 12856              	.LBE3443:
+ 12857              	.LBE3442:
+ 12858              	.LBE3441:
+ 12859              	.LBE3440:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12860              		.loc 2 1568 0
+ 12861 b5a7 660F7F85 		movdqa	%xmm0, -10112(%rbp)
+ 12861      80D8FFFF 
+ 12862 b5af 660F6F85 		movdqa	-10112(%rbp), %xmm0
+ 12862      80D8FFFF 
+ 12863 b5b7 660FEF85 		pxor	-5696(%rbp), %xmm0
+ 12863      C0E9FFFF 
+ 12864 b5bf F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 12864      C0E9FFFF 
+ 12865 b5c7 660F6F85 		movdqa	-10112(%rbp), %xmm0
+ 12865      80D8FFFF 
+ 12866 b5cf F30F7F85 		movdqu	%xmm0, -5520(%rbp)
+ 12866      70EAFFFF 
+ 12867              	.LBB3446:
+ 12868              	.LBB3447:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 12869              		.loc 2 1278 0
+ 12870 b5d7 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 12870      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 398
+
+
+ 12871 b5df F30F6F8D 		movdqu	-5520(%rbp), %xmm1
+ 12871      70EAFFFF 
+ 12872 b5e7 F30F7F8D 		movdqu	%xmm1, -5488(%rbp)
+ 12872      90EAFFFF 
+ 12873 b5ef F30F7F85 		movdqu	%xmm0, -5504(%rbp)
+ 12873      80EAFFFF 
+ 12874 b5f7 F30F6F85 		movdqu	-5488(%rbp), %xmm0
+ 12874      90EAFFFF 
+ 12875 b5ff F30F7F85 		movdqu	%xmm0, -5456(%rbp)
+ 12875      B0EAFFFF 
+ 12876 b607 F30F6F85 		movdqu	-5504(%rbp), %xmm0
+ 12876      80EAFFFF 
+ 12877 b60f F30F7F85 		movdqu	%xmm0, -5472(%rbp)
+ 12877      A0EAFFFF 
+ 12878              	.LBB3448:
+ 12879              	.LBB3449:
+ 12880              	.LBB3450:
+ 12881              	.LBB3451:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 12882              		.loc 3 529 0
+ 12883 b617 F30F6F8D 		movdqu	-5472(%rbp), %xmm1
+ 12883      A0EAFFFF 
+ 12884 b61f F30F6F85 		movdqu	-5456(%rbp), %xmm0
+ 12884      B0EAFFFF 
+ 12885 b627 660F3800 		pshufb	%xmm1, %xmm0
+ 12885      C1
+ 12886              	.LBE3451:
+ 12887              	.LBE3450:
+ 12888              	.LBE3449:
+ 12889              	.LBE3448:
+ 12890              	.LBE3447:
+ 12891              	.LBE3446:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 12892              		.loc 2 1569 0
+ 12893 b62c 660F7F85 		movdqa	%xmm0, -10112(%rbp)
+ 12893      80D8FFFF 
+ 12894 b634 660F6F85 		movdqa	-10112(%rbp), %xmm0
+ 12894      80D8FFFF 
+ 12895 b63c 660FEF85 		pxor	-5696(%rbp), %xmm0
+ 12895      C0E9FFFF 
+ 12896 b644 F30F7F85 		movdqu	%xmm0, -5696(%rbp)
+ 12896      C0E9FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 12897              		.loc 2 1571 0
+ 12898 b64c F30F6F85 		movdqu	-5696(%rbp), %xmm0
+ 12898      C0E9FFFF 
+ 12899              	.LBE3433:
+ 12900              	.LBE3432:
+ 12901              		.loc 2 1930 0
+ 12902 b654 F30F7F85 		movdqu	%xmm0, -9184(%rbp)
+ 12902      20DCFFFF 
+ 12903 b65c F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 12903      20DCFFFF 
+ 12904 b664 F30F7F85 		movdqu	%xmm0, -5424(%rbp)
+ 12904      D0EAFFFF 
+ 12905 b66c F30F6F85 		movdqu	-9152(%rbp), %xmm0
+ 12905      40DCFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 399
+
+
+ 12906 b674 F30F7F85 		movdqu	%xmm0, -5440(%rbp)
+ 12906      C0EAFFFF 
+ 12907              	.LBB3452:
+ 12908              	.LBB3453:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 12909              		.loc 2 178 0
+ 12910 b67c F30F6F85 		movdqu	-5440(%rbp), %xmm0
+ 12910      C0EAFFFF 
+ 12911 b684 F30F6F8D 		movdqu	-5424(%rbp), %xmm1
+ 12911      D0EAFFFF 
+ 12912 b68c 660FEFC1 		pxor	%xmm1, %xmm0
+ 12913              	.LBE3453:
+ 12914              	.LBE3452:
+ 12915              		.loc 2 1930 0
+ 12916 b690 F30F7F85 		movdqu	%xmm0, -9184(%rbp)
+ 12916      20DCFFFF 
+ 12917 b698 488B8598 		movq	-9832(%rbp), %rax
+ 12917      D9FFFF
+ 12918 b69f 4883C060 		addq	$96, %rax
+ 12919 b6a3 F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 12919      20DCFFFF 
+ 12920 b6ab F30F7F00 		movdqu	%xmm0, (%rax)
+ 12921 b6af F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 12921      20DCFFFF 
+ 12922 b6b7 F30F7F85 		movdqu	%xmm0, -5408(%rbp)
+ 12922      E0EAFFFF 
+ 12923              	.LBB3454:
+ 12924              	.LBB3455:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 12925              		.loc 2 1656 0
+ 12926 b6bf F30F6F85 		movdqu	-5408(%rbp), %xmm0
+ 12926      E0EAFFFF 
+ 12927 b6c7 F30F7F85 		movdqu	%xmm0, -9552(%rbp)
+ 12927      B0DAFFFF 
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 12928              		.loc 2 1657 0
+ 12929 b6cf 8B85BCDA 		movl	-9540(%rbp), %eax
+ 12929      FFFF
+ 12930 b6d5 8985F8EA 		movl	%eax, -5384(%rbp)
+ 12930      FFFF
+ 12931              	.LBB3456:
+ 12932              	.LBB3457:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 12933              		.loc 2 740 0
+ 12934 b6db 8B85F8EA 		movl	-5384(%rbp), %eax
+ 12934      FFFF
+ 12935 b6e1 8985A0DA 		movl	%eax, -9568(%rbp)
+ 12935      FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 12936              		.loc 2 741 0
+ 12937 b6e7 C785FCEA 		movl	$0, -5380(%rbp)
+ 12937      FFFF0000 
+ 12937      0000
+ 12938 b6f1 EB36     		jmp	.L190
+ 12939              	.L191:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 12940              		.loc 2 742 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 400
+
+
+ 12941 b6f3 8B8DFCEA 		movl	-5380(%rbp), %ecx
+ 12941      FFFF
+ 12942 b6f9 8B85FCEA 		movl	-5380(%rbp), %eax
+ 12942      FFFF
+ 12943 b6ff 89C0     		mov	%eax, %eax
+ 12944 b701 0FB68405 		movzbl	-9568(%rbp,%rax), %eax
+ 12944      A0DAFFFF 
+ 12945 b709 0FB6C0   		movzbl	%al, %eax
+ 12946 b70c 89C2     		mov	%eax, %edx
+ 12947 b70e 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBox(%rip), %rax
+ 12947      000000
+ 12948 b715 0FB61402 		movzbl	(%rdx,%rax), %edx
+ 12949 b719 89C8     		mov	%ecx, %eax
+ 12950 b71b 889405A0 		movb	%dl, -9568(%rbp,%rax)
+ 12950      DAFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 12951              		.loc 2 741 0
+ 12952 b722 8385FCEA 		addl	$1, -5380(%rbp)
+ 12952      FFFF01
+ 12953              	.L190:
+ 12954 b729 83BDFCEA 		cmpl	$3, -5380(%rbp)
+ 12954      FFFF03
+ 12955 b730 76C1     		jbe	.L191
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 12956              		.loc 2 743 0
+ 12957 b732 8B85A0DA 		movl	-9568(%rbp), %eax
+ 12957      FFFF
+ 12958              	.LBE3457:
+ 12959              	.LBE3456:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 12960              		.loc 2 1657 0
+ 12961 b738 8985F4EA 		movl	%eax, -5388(%rbp)
+ 12961      FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 12962              		.loc 2 1659 0
+ 12963 b73e 8B85F4EA 		movl	-5388(%rbp), %eax
+ 12963      FFFF
+ 12964 b744 8985BCDA 		movl	%eax, -9540(%rbp)
+ 12964      FFFF
+ 12965 b74a 8B85BCDA 		movl	-9540(%rbp), %eax
+ 12965      FFFF
+ 12966 b750 8985B8DA 		movl	%eax, -9544(%rbp)
+ 12966      FFFF
+ 12967 b756 8B85B8DA 		movl	-9544(%rbp), %eax
+ 12967      FFFF
+ 12968 b75c 8985B4DA 		movl	%eax, -9548(%rbp)
+ 12968      FFFF
+ 12969 b762 8B85B4DA 		movl	-9548(%rbp), %eax
+ 12969      FFFF
+ 12970 b768 8985B0DA 		movl	%eax, -9552(%rbp)
+ 12970      FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 12971              		.loc 2 1660 0
+ 12972 b76e F30F6F85 		movdqu	-9552(%rbp), %xmm0
+ 12972      B0DAFFFF 
+ 12973              	.LBE3455:
+ 12974              	.LBE3454:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 401
+
+
+1931:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(7);         /* k28 : k29 : k30 : k31 */
+ 12975              		.loc 2 1931 0
+ 12976 b776 F30F7F85 		movdqu	%xmm0, -9152(%rbp)
+ 12976      40DCFFFF 
+ 12977 b77e F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 12977      30DCFFFF 
+ 12978 b786 F30F7F85 		movdqu	%xmm0, -5376(%rbp)
+ 12978      00EBFFFF 
+ 12979              	.LBB3458:
+ 12980              	.LBB3459:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 12981              		.loc 2 1565 0
+ 12982 b78e F30F6F85 		movdqu	-5376(%rbp), %xmm0
+ 12982      00EBFFFF 
+ 12983 b796 660F7F85 		movdqa	%xmm0, -10096(%rbp)
+ 12983      90D8FFFF 
+ 12984 b79e 660F6F85 		movdqa	-10096(%rbp), %xmm0
+ 12984      90D8FFFF 
+ 12985 b7a6 F30F7F85 		movdqu	%xmm0, -5360(%rbp)
+ 12985      10EBFFFF 
+ 12986              	.LBB3460:
+ 12987              	.LBB3461:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 12988              		.loc 2 1278 0
+ 12989 b7ae 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 12989      00000000 
+ 12990 b7b6 F30F6F8D 		movdqu	-5360(%rbp), %xmm1
+ 12990      10EBFFFF 
+ 12991 b7be F30F7F8D 		movdqu	%xmm1, -5328(%rbp)
+ 12991      30EBFFFF 
+ 12992 b7c6 F30F7F85 		movdqu	%xmm0, -5344(%rbp)
+ 12992      20EBFFFF 
+ 12993 b7ce F30F6F85 		movdqu	-5328(%rbp), %xmm0
+ 12993      30EBFFFF 
+ 12994 b7d6 F30F7F85 		movdqu	%xmm0, -5296(%rbp)
+ 12994      50EBFFFF 
+ 12995 b7de F30F6F85 		movdqu	-5344(%rbp), %xmm0
+ 12995      20EBFFFF 
+ 12996 b7e6 F30F7F85 		movdqu	%xmm0, -5312(%rbp)
+ 12996      40EBFFFF 
+ 12997              	.LBB3462:
+ 12998              	.LBB3463:
+ 12999              	.LBB3464:
+ 13000              	.LBB3465:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13001              		.loc 3 529 0
+ 13002 b7ee F30F6F8D 		movdqu	-5312(%rbp), %xmm1
+ 13002      40EBFFFF 
+ 13003 b7f6 F30F6F85 		movdqu	-5296(%rbp), %xmm0
+ 13003      50EBFFFF 
+ 13004 b7fe 660F3800 		pshufb	%xmm1, %xmm0
+ 13004      C1
+ 13005              	.LBE3465:
+ 13006              	.LBE3464:
+ 13007              	.LBE3463:
+ 13008              	.LBE3462:
+ 13009              	.LBE3461:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 402
+
+
+ 13010              	.LBE3460:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13011              		.loc 2 1567 0
+ 13012 b803 660F7F85 		movdqa	%xmm0, -10096(%rbp)
+ 13012      90D8FFFF 
+ 13013 b80b 660F6F85 		movdqa	-10096(%rbp), %xmm0
+ 13013      90D8FFFF 
+ 13014 b813 660FEF85 		pxor	-5376(%rbp), %xmm0
+ 13014      00EBFFFF 
+ 13015 b81b F30F7F85 		movdqu	%xmm0, -5376(%rbp)
+ 13015      00EBFFFF 
+ 13016 b823 660F6F85 		movdqa	-10096(%rbp), %xmm0
+ 13016      90D8FFFF 
+ 13017 b82b F30F7F85 		movdqu	%xmm0, -5280(%rbp)
+ 13017      60EBFFFF 
+ 13018              	.LBB3466:
+ 13019              	.LBB3467:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 13020              		.loc 2 1278 0
+ 13021 b833 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 13021      00000000 
+ 13022 b83b F30F6F8D 		movdqu	-5280(%rbp), %xmm1
+ 13022      60EBFFFF 
+ 13023 b843 F30F7F8D 		movdqu	%xmm1, -5248(%rbp)
+ 13023      80EBFFFF 
+ 13024 b84b F30F7F85 		movdqu	%xmm0, -5264(%rbp)
+ 13024      70EBFFFF 
+ 13025 b853 F30F6F85 		movdqu	-5248(%rbp), %xmm0
+ 13025      80EBFFFF 
+ 13026 b85b F30F7F85 		movdqu	%xmm0, -5216(%rbp)
+ 13026      A0EBFFFF 
+ 13027 b863 F30F6F85 		movdqu	-5264(%rbp), %xmm0
+ 13027      70EBFFFF 
+ 13028 b86b F30F7F85 		movdqu	%xmm0, -5232(%rbp)
+ 13028      90EBFFFF 
+ 13029              	.LBB3468:
+ 13030              	.LBB3469:
+ 13031              	.LBB3470:
+ 13032              	.LBB3471:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13033              		.loc 3 529 0
+ 13034 b873 F30F6F8D 		movdqu	-5232(%rbp), %xmm1
+ 13034      90EBFFFF 
+ 13035 b87b F30F6F85 		movdqu	-5216(%rbp), %xmm0
+ 13035      A0EBFFFF 
+ 13036 b883 660F3800 		pshufb	%xmm1, %xmm0
+ 13036      C1
+ 13037              	.LBE3471:
+ 13038              	.LBE3470:
+ 13039              	.LBE3469:
+ 13040              	.LBE3468:
+ 13041              	.LBE3467:
+ 13042              	.LBE3466:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13043              		.loc 2 1568 0
+ 13044 b888 660F7F85 		movdqa	%xmm0, -10096(%rbp)
+ 13044      90D8FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 403
+
+
+ 13045 b890 660F6F85 		movdqa	-10096(%rbp), %xmm0
+ 13045      90D8FFFF 
+ 13046 b898 660FEF85 		pxor	-5376(%rbp), %xmm0
+ 13046      00EBFFFF 
+ 13047 b8a0 F30F7F85 		movdqu	%xmm0, -5376(%rbp)
+ 13047      00EBFFFF 
+ 13048 b8a8 660F6F85 		movdqa	-10096(%rbp), %xmm0
+ 13048      90D8FFFF 
+ 13049 b8b0 F30F7F85 		movdqu	%xmm0, -5200(%rbp)
+ 13049      B0EBFFFF 
+ 13050              	.LBB3472:
+ 13051              	.LBB3473:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 13052              		.loc 2 1278 0
+ 13053 b8b8 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 13053      00000000 
+ 13054 b8c0 F30F6F8D 		movdqu	-5200(%rbp), %xmm1
+ 13054      B0EBFFFF 
+ 13055 b8c8 F30F7F8D 		movdqu	%xmm1, -5168(%rbp)
+ 13055      D0EBFFFF 
+ 13056 b8d0 F30F7F85 		movdqu	%xmm0, -5184(%rbp)
+ 13056      C0EBFFFF 
+ 13057 b8d8 F30F6F85 		movdqu	-5168(%rbp), %xmm0
+ 13057      D0EBFFFF 
+ 13058 b8e0 F30F7F85 		movdqu	%xmm0, -5136(%rbp)
+ 13058      F0EBFFFF 
+ 13059 b8e8 F30F6F85 		movdqu	-5184(%rbp), %xmm0
+ 13059      C0EBFFFF 
+ 13060 b8f0 F30F7F85 		movdqu	%xmm0, -5152(%rbp)
+ 13060      E0EBFFFF 
+ 13061              	.LBB3474:
+ 13062              	.LBB3475:
+ 13063              	.LBB3476:
+ 13064              	.LBB3477:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13065              		.loc 3 529 0
+ 13066 b8f8 F30F6F8D 		movdqu	-5152(%rbp), %xmm1
+ 13066      E0EBFFFF 
+ 13067 b900 F30F6F85 		movdqu	-5136(%rbp), %xmm0
+ 13067      F0EBFFFF 
+ 13068 b908 660F3800 		pshufb	%xmm1, %xmm0
+ 13068      C1
+ 13069              	.LBE3477:
+ 13070              	.LBE3476:
+ 13071              	.LBE3475:
+ 13072              	.LBE3474:
+ 13073              	.LBE3473:
+ 13074              	.LBE3472:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13075              		.loc 2 1569 0
+ 13076 b90d 660F7F85 		movdqa	%xmm0, -10096(%rbp)
+ 13076      90D8FFFF 
+ 13077 b915 660F6F85 		movdqa	-10096(%rbp), %xmm0
+ 13077      90D8FFFF 
+ 13078 b91d 660FEF85 		pxor	-5376(%rbp), %xmm0
+ 13078      00EBFFFF 
+ 13079 b925 F30F7F85 		movdqu	%xmm0, -5376(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 404
+
+
+ 13079      00EBFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 13080              		.loc 2 1571 0
+ 13081 b92d F30F6F85 		movdqu	-5376(%rbp), %xmm0
+ 13081      00EBFFFF 
+ 13082              	.LBE3459:
+ 13083              	.LBE3458:
+ 13084              		.loc 2 1931 0
+ 13085 b935 F30F7F85 		movdqu	%xmm0, -9168(%rbp)
+ 13085      30DCFFFF 
+ 13086 b93d F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 13086      30DCFFFF 
+ 13087 b945 F30F7F85 		movdqu	%xmm0, -5104(%rbp)
+ 13087      10ECFFFF 
+ 13088 b94d F30F6F85 		movdqu	-9152(%rbp), %xmm0
+ 13088      40DCFFFF 
+ 13089 b955 F30F7F85 		movdqu	%xmm0, -5120(%rbp)
+ 13089      00ECFFFF 
+ 13090              	.LBB3478:
+ 13091              	.LBB3479:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 13092              		.loc 2 178 0
+ 13093 b95d F30F6F85 		movdqu	-5120(%rbp), %xmm0
+ 13093      00ECFFFF 
+ 13094 b965 F30F6F8D 		movdqu	-5104(%rbp), %xmm1
+ 13094      10ECFFFF 
+ 13095 b96d 660FEFC1 		pxor	%xmm1, %xmm0
+ 13096              	.LBE3479:
+ 13097              	.LBE3478:
+ 13098              		.loc 2 1931 0
+ 13099 b971 F30F7F85 		movdqu	%xmm0, -9168(%rbp)
+ 13099      30DCFFFF 
+ 13100 b979 488B8598 		movq	-9832(%rbp), %rax
+ 13100      D9FFFF
+ 13101 b980 4883C070 		addq	$112, %rax
+ 13102 b984 F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 13102      30DCFFFF 
+ 13103 b98c F30F7F00 		movdqu	%xmm0, (%rax)
+ 13104 b990 F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 13104      30DCFFFF 
+ 13105 b998 F30F7F85 		movdqu	%xmm0, -5072(%rbp)
+ 13105      30ECFFFF 
+ 13106              	.LBB3480:
+ 13107              	.LBB3481:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 13108              		.loc 2 1681 0
+ 13109 b9a0 B8080000 		movl	$8, %eax
+ 13109      00
+ 13110 b9a5 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 13110      00000000 
+ 13111 b9ad F30F7F85 		movdqu	%xmm0, -5040(%rbp)
+ 13111      50ECFFFF 
+ 13112 b9b5 89854CEC 		movl	%eax, -5044(%rbp)
+ 13112      FFFF
+ 13113 b9bb F30F6F85 		movdqu	-5040(%rbp), %xmm0
+ 13113      50ECFFFF 
+ 13114 b9c3 F30F7F85 		movdqu	%xmm0, -5008(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 405
+
+
+ 13114      70ECFFFF 
+ 13115 b9cb 8B854CEC 		movl	-5044(%rbp), %eax
+ 13115      FFFF
+ 13116 b9d1 89856CEC 		movl	%eax, -5012(%rbp)
+ 13116      FFFF
+ 13117              	.LBB3482:
+ 13118              	.LBB3483:
+ 13119              	.LBB3484:
+ 13120              	.LBB3485:
+ 13121              		.loc 3 598 0
+ 13122 b9d7 8B856CEC 		movl	-5012(%rbp), %eax
+ 13122      FFFF
+ 13123 b9dd F30F6F85 		movdqu	-5008(%rbp), %xmm0
+ 13123      70ECFFFF 
+ 13124 b9e5 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 13124      C003
+ 13125              	.LBE3485:
+ 13126              	.LBE3484:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 13127              		.loc 2 519 0
+ 13128 b9eb F30F7F85 		movdqu	%xmm0, -5040(%rbp)
+ 13128      50ECFFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 13129              		.loc 2 526 0
+ 13130 b9f3 F30F6F85 		movdqu	-5040(%rbp), %xmm0
+ 13130      50ECFFFF 
+ 13131              	.LBE3483:
+ 13132              	.LBE3482:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 13133              		.loc 2 1681 0
+ 13134 b9fb 660F7F85 		movdqa	%xmm0, -10064(%rbp)
+ 13134      B0D8FFFF 
+ 13135 ba03 F30F6F85 		movdqu	-5072(%rbp), %xmm0
+ 13135      30ECFFFF 
+ 13136 ba0b F30F7F85 		movdqu	%xmm0, -4992(%rbp)
+ 13136      80ECFFFF 
+ 13137 ba13 F30F6F85 		movdqu	-4992(%rbp), %xmm0
+ 13137      80ECFFFF 
+ 13138 ba1b F30F7F85 		movdqu	%xmm0, -4960(%rbp)
+ 13138      A0ECFFFF 
+ 13139 ba23 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 13139      000000
+ 13140 ba2a 48898598 		movq	%rax, -4968(%rbp)
+ 13140      ECFFFF
+ 13141              	.LBB3486:
+ 13142              	.LBB3487:
+ 13143              	.LBB3488:
+ 13144              	.LBB3489:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 13145              		.loc 2 851 0
+ 13146 ba31 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 13146      00000000 
+ 13147 ba39 F30F7F85 		movdqu	%xmm0, -4928(%rbp)
+ 13147      C0ECFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 13148              		.loc 2 854 0
+ 13149 ba41 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 406
+
+
+ 13149      00000000 
+ 13150 ba49 F30F6F8D 		movdqu	-4960(%rbp), %xmm1
+ 13150      A0ECFFFF 
+ 13151 ba51 F30F7F8D 		movdqu	%xmm1, -4848(%rbp)
+ 13151      10EDFFFF 
+ 13152 ba59 F30F7F85 		movdqu	%xmm0, -4864(%rbp)
+ 13152      00EDFFFF 
+ 13153              	.LBB3490:
+ 13154              	.LBB3491:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 13155              		.loc 2 206 0
+ 13156 ba61 F30F6F85 		movdqu	-4864(%rbp), %xmm0
+ 13156      00EDFFFF 
+ 13157 ba69 F30F6F8D 		movdqu	-4848(%rbp), %xmm1
+ 13157      10EDFFFF 
+ 13158 ba71 660FDBC1 		pand	%xmm1, %xmm0
+ 13159              	.LBE3491:
+ 13160              	.LBE3490:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 13161              		.loc 2 854 0
+ 13162 ba75 F30F7F85 		movdqu	%xmm0, -4880(%rbp)
+ 13162      F0ECFFFF 
+ 13163 ba7d F30F6F85 		movdqu	-4960(%rbp), %xmm0
+ 13163      A0ECFFFF 
+ 13164 ba85 F30F7F85 		movdqu	%xmm0, -4816(%rbp)
+ 13164      30EDFFFF 
+ 13165              	.LBB3492:
+ 13166              	.LBB3493:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 13167              		.loc 3 433 0
+ 13168 ba8d F30F6F85 		movdqu	-4816(%rbp), %xmm0
+ 13168      30EDFFFF 
+ 13169 ba95 660F72D0 		psrld	$4, %xmm0
+ 13169      04
+ 13170              	.LBE3493:
+ 13171              	.LBE3492:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 13172              		.loc 2 857 0
+ 13173 ba9a F30F7F85 		movdqu	%xmm0, -4896(%rbp)
+ 13173      E0ECFFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 13174              		.loc 2 859 0
+ 13175 baa2 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 13175      00000000 
+ 13176 baaa F30F6F8D 		movdqu	-4896(%rbp), %xmm1
+ 13176      E0ECFFFF 
+ 13177 bab2 F30F7F8D 		movdqu	%xmm1, -4784(%rbp)
+ 13177      50EDFFFF 
+ 13178 baba F30F7F85 		movdqu	%xmm0, -4800(%rbp)
+ 13178      40EDFFFF 
+ 13179              	.LBB3494:
+ 13180              	.LBB3495:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 13181              		.loc 2 206 0
+ 13182 bac2 F30F6F85 		movdqu	-4800(%rbp), %xmm0
+ 13182      40EDFFFF 
+ 13183 baca F30F6F8D 		movdqu	-4784(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 407
+
+
+ 13183      50EDFFFF 
+ 13184 bad2 660FDBC1 		pand	%xmm1, %xmm0
+ 13185              	.LBE3495:
+ 13186              	.LBE3494:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 13187              		.loc 2 859 0
+ 13188 bad6 F30F7F85 		movdqu	%xmm0, -4896(%rbp)
+ 13188      E0ECFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 13189              		.loc 2 866 0
+ 13190 bade C785BCEC 		movl	$0, -4932(%rbp)
+ 13190      FFFF0000 
+ 13190      0000
+ 13191 bae8 E9BE0100 		jmp	.L192
+ 13191      00
+ 13192              	.L193:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 13193              		.loc 2 868 0
+ 13194 baed 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 13194      00000000 
+ 13195 baf5 F30F7F85 		movdqu	%xmm0, -4752(%rbp)
+ 13195      70EDFFFF 
+ 13196 bafd F30F6F85 		movdqu	-4896(%rbp), %xmm0
+ 13196      E0ECFFFF 
+ 13197 bb05 F30F7F85 		movdqu	%xmm0, -4768(%rbp)
+ 13197      60EDFFFF 
+ 13198 bb0d F30F6F85 		movdqu	-4752(%rbp), %xmm0
+ 13198      70EDFFFF 
+ 13199 bb15 F30F7F85 		movdqu	%xmm0, -4720(%rbp)
+ 13199      90EDFFFF 
+ 13200 bb1d F30F6F85 		movdqu	-4768(%rbp), %xmm0
+ 13200      60EDFFFF 
+ 13201 bb25 F30F7F85 		movdqu	%xmm0, -4736(%rbp)
+ 13201      80EDFFFF 
+ 13202              	.LBB3496:
+ 13203              	.LBB3497:
+ 13204              	.LBB3498:
+ 13205              	.LBB3499:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13206              		.loc 3 529 0
+ 13207 bb2d F30F6F8D 		movdqu	-4736(%rbp), %xmm1
+ 13207      80EDFFFF 
+ 13208 bb35 F30F6F85 		movdqu	-4720(%rbp), %xmm0
+ 13208      90EDFFFF 
+ 13209 bb3d 660F3800 		pshufb	%xmm1, %xmm0
+ 13209      C1
+ 13210              	.LBE3499:
+ 13211              	.LBE3498:
+ 13212              	.LBE3497:
+ 13213              	.LBE3496:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 13214              		.loc 2 868 0
+ 13215 bb42 F30F7F85 		movdqu	%xmm0, -4912(%rbp)
+ 13215      D0ECFFFF 
+ 13216 bb4a F30F6F85 		movdqu	-4880(%rbp), %xmm0
+ 13216      F0ECFFFF 
+ 13217 bb52 F30F7F85 		movdqu	%xmm0, -4688(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 408
+
+
+ 13217      B0EDFFFF 
+ 13218 bb5a F30F6F85 		movdqu	-4912(%rbp), %xmm0
+ 13218      D0ECFFFF 
+ 13219 bb62 F30F7F85 		movdqu	%xmm0, -4704(%rbp)
+ 13219      A0EDFFFF 
+ 13220              	.LBB3500:
+ 13221              	.LBB3501:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 13222              		.loc 2 234 0
+ 13223 bb6a F30F6F85 		movdqu	-4704(%rbp), %xmm0
+ 13223      A0EDFFFF 
+ 13224 bb72 F30F6F8D 		movdqu	-4688(%rbp), %xmm1
+ 13224      B0EDFFFF 
+ 13225 bb7a 660FEBC1 		por	%xmm1, %xmm0
+ 13226              	.LBE3501:
+ 13227              	.LBE3500:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 13228              		.loc 2 870 0
+ 13229 bb7e F30F7F85 		movdqu	%xmm0, -4912(%rbp)
+ 13229      D0ECFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 13230              		.loc 2 872 0
+ 13231 bb86 8B85BCEC 		mov	-4932(%rbp), %eax
+ 13231      FFFF
+ 13232 bb8c 48C1E004 		salq	$4, %rax
+ 13233 bb90 48038598 		addq	-4968(%rbp), %rax
+ 13233      ECFFFF
+ 13234 bb97 660F6F00 		movdqa	(%rax), %xmm0
+ 13235 bb9b F30F7F85 		movdqu	%xmm0, -4656(%rbp)
+ 13235      D0EDFFFF 
+ 13236 bba3 F30F6F85 		movdqu	-4912(%rbp), %xmm0
+ 13236      D0ECFFFF 
+ 13237 bbab F30F7F85 		movdqu	%xmm0, -4672(%rbp)
+ 13237      C0EDFFFF 
+ 13238 bbb3 F30F6F85 		movdqu	-4656(%rbp), %xmm0
+ 13238      D0EDFFFF 
+ 13239 bbbb F30F7F85 		movdqu	%xmm0, -4624(%rbp)
+ 13239      F0EDFFFF 
+ 13240 bbc3 F30F6F85 		movdqu	-4672(%rbp), %xmm0
+ 13240      C0EDFFFF 
+ 13241 bbcb F30F7F85 		movdqu	%xmm0, -4640(%rbp)
+ 13241      E0EDFFFF 
+ 13242              	.LBB3502:
+ 13243              	.LBB3503:
+ 13244              	.LBB3504:
+ 13245              	.LBB3505:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13246              		.loc 3 529 0
+ 13247 bbd3 F30F6F8D 		movdqu	-4640(%rbp), %xmm1
+ 13247      E0EDFFFF 
+ 13248 bbdb F30F6F85 		movdqu	-4624(%rbp), %xmm0
+ 13248      F0EDFFFF 
+ 13249 bbe3 660F3800 		pshufb	%xmm1, %xmm0
+ 13249      C1
+ 13250              	.LBE3505:
+ 13251              	.LBE3504:
+ 13252              	.LBE3503:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 409
+
+
+ 13253              	.LBE3502:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 13254              		.loc 2 872 0
+ 13255 bbe8 F30F7F85 		movdqu	%xmm0, -4912(%rbp)
+ 13255      D0ECFFFF 
+ 13256 bbf0 F30F6F85 		movdqu	-4928(%rbp), %xmm0
+ 13256      C0ECFFFF 
+ 13257 bbf8 F30F7F85 		movdqu	%xmm0, -4592(%rbp)
+ 13257      10EEFFFF 
+ 13258 bc00 F30F6F85 		movdqu	-4912(%rbp), %xmm0
+ 13258      D0ECFFFF 
+ 13259 bc08 F30F7F85 		movdqu	%xmm0, -4608(%rbp)
+ 13259      00EEFFFF 
+ 13260              	.LBB3506:
+ 13261              	.LBB3507:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 13262              		.loc 2 234 0
+ 13263 bc10 F30F6F85 		movdqu	-4608(%rbp), %xmm0
+ 13263      00EEFFFF 
+ 13264 bc18 F30F6F8D 		movdqu	-4592(%rbp), %xmm1
+ 13264      10EEFFFF 
+ 13265 bc20 660FEBC1 		por	%xmm1, %xmm0
+ 13266              	.LBE3507:
+ 13267              	.LBE3506:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 13268              		.loc 2 874 0
+ 13269 bc24 F30F7F85 		movdqu	%xmm0, -4928(%rbp)
+ 13269      C0ECFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 13270              		.loc 2 876 0
+ 13271 bc2c 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 13271      00000000 
+ 13272 bc34 F30F6F8D 		movdqu	-4896(%rbp), %xmm1
+ 13272      E0ECFFFF 
+ 13273 bc3c F30F7F8D 		movdqu	%xmm1, -4560(%rbp)
+ 13273      30EEFFFF 
+ 13274 bc44 F30F7F85 		movdqu	%xmm0, -4576(%rbp)
+ 13274      20EEFFFF 
+ 13275              	.LBB3508:
+ 13276              	.LBB3509:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 13277              		.loc 2 290 0
+ 13278 bc4c F30F6F8D 		movdqu	-4576(%rbp), %xmm1
+ 13278      20EEFFFF 
+ 13279 bc54 F30F6F85 		movdqu	-4560(%rbp), %xmm0
+ 13279      30EEFFFF 
+ 13280 bc5c 660FF8C1 		psubb	%xmm1, %xmm0
+ 13281              	.LBE3509:
+ 13282              	.LBE3508:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 13283              		.loc 2 876 0
+ 13284 bc60 F30F7F85 		movdqu	%xmm0, -4896(%rbp)
+ 13284      E0ECFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 13285              		.loc 2 878 0
+ 13286 bc68 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 13286      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 410
+
+
+ 13287 bc70 F30F6F8D 		movdqu	-4896(%rbp), %xmm1
+ 13287      E0ECFFFF 
+ 13288 bc78 F30F7F8D 		movdqu	%xmm1, -4528(%rbp)
+ 13288      50EEFFFF 
+ 13289 bc80 F30F7F85 		movdqu	%xmm0, -4544(%rbp)
+ 13289      40EEFFFF 
+ 13290              	.LBB3510:
+ 13291              	.LBB3511:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 13292              		.loc 2 206 0
+ 13293 bc88 F30F6F85 		movdqu	-4544(%rbp), %xmm0
+ 13293      40EEFFFF 
+ 13294 bc90 F30F6F8D 		movdqu	-4528(%rbp), %xmm1
+ 13294      50EEFFFF 
+ 13295 bc98 660FDBC1 		pand	%xmm1, %xmm0
+ 13296              	.LBE3511:
+ 13297              	.LBE3510:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 13298              		.loc 2 878 0
+ 13299 bc9c F30F7F85 		movdqu	%xmm0, -4896(%rbp)
+ 13299      E0ECFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 13300              		.loc 2 866 0
+ 13301 bca4 8385BCEC 		addl	$1, -4932(%rbp)
+ 13301      FFFF01
+ 13302              	.L192:
+ 13303 bcab 83BDBCEC 		cmpl	$15, -4932(%rbp)
+ 13303      FFFF0F
+ 13304 bcb2 0F8635FE 		jbe	.L193
+ 13304      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 13305              		.loc 2 882 0
+ 13306 bcb8 F30F6F85 		movdqu	-4928(%rbp), %xmm0
+ 13306      C0ECFFFF 
+ 13307              	.LBE3489:
+ 13308              	.LBE3488:
+ 13309              	.LBE3487:
+ 13310              	.LBE3486:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 13311              		.loc 2 1682 0
+ 13312 bcc0 660F7F85 		movdqa	%xmm0, -10080(%rbp)
+ 13312      A0D8FFFF 
+ 13313              	.LBB3512:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 13314              		.loc 2 1683 0
+ 13315 bcc8 660F6F85 		movdqa	-10080(%rbp), %xmm0
+ 13315      A0D8FFFF 
+ 13316 bcd0 F30F7F85 		movdqu	%xmm0, -9488(%rbp)
+ 13316      F0DAFFFF 
+ 13317 bcd8 E8000000 		call	KDbgWriterGet at PLT
+ 13317      00
+ 13318 bcdd 4885C0   		testq	%rax, %rax
+ 13319 bce0 7479     		je	.L195
+ 13320 bce2 BF010000 		movl	$1, %edi
+ 13320      00
+ 13321 bce7 E8000000 		call	KDbgCondToFlag at PLT
+ 13321      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 411
+
+
+ 13322 bcec 4889C6   		movq	%rax, %rsi
+ 13323 bcef BF100000 		movl	$16, %edi
+ 13323      00
+ 13324 bcf4 E8000000 		call	KDbgTestModConds at PLT
+ 13324      00
+ 13325 bcf9 84C0     		testb	%al, %al
+ 13326 bcfb 745E     		je	.L195
+ 13327 bcfd 8B85FCDA 		movl	-9476(%rbp), %eax
+ 13327      FFFF
+ 13328 bd03 89C7     		movl	%eax, %edi
+ 13329 bd05 E8F642FF 		call	bswap_32
+ 13329      FF
+ 13330 bd0a 4189C5   		movl	%eax, %r13d
+ 13331 bd0d 8B85F8DA 		movl	-9480(%rbp), %eax
+ 13331      FFFF
+ 13332 bd13 89C7     		movl	%eax, %edi
+ 13333 bd15 E8E642FF 		call	bswap_32
+ 13333      FF
+ 13334 bd1a 4189C4   		movl	%eax, %r12d
+ 13335 bd1d 8B85F4DA 		movl	-9484(%rbp), %eax
+ 13335      FFFF
+ 13336 bd23 89C7     		movl	%eax, %edi
+ 13337 bd25 E8D642FF 		call	bswap_32
+ 13337      FF
+ 13338 bd2a 89C3     		movl	%eax, %ebx
+ 13339 bd2c 8B85F0DA 		movl	-9488(%rbp), %eax
+ 13339      FFFF
+ 13340 bd32 89C7     		movl	%eax, %edi
+ 13341 bd34 E8C742FF 		call	bswap_32
+ 13341      FF
+ 13342 bd39 4589E9   		movl	%r13d, %r9d
+ 13343 bd3c 4589E0   		movl	%r12d, %r8d
+ 13344 bd3f 89D9     		movl	%ebx, %ecx
+ 13345 bd41 89C2     		movl	%eax, %edx
+ 13346 bd43 488D3500 		leaq	.LC0(%rip), %rsi
+ 13346      000000
+ 13347 bd4a 488D3D00 		leaq	.LC1(%rip), %rdi
+ 13347      000000
+ 13348 bd51 B8000000 		movl	$0, %eax
+ 13348      00
+ 13349 bd56 E8000000 		call	KDbgMsg at PLT
+ 13349      00
+ 13350              	.L195:
+ 13351 bd5b 660F6F85 		movdqa	-10080(%rbp), %xmm0
+ 13351      A0D8FFFF 
+ 13352 bd63 F30F7F85 		movdqu	%xmm0, -4512(%rbp)
+ 13352      60EEFFFF 
+ 13353              	.LBE3512:
+ 13354              	.LBB3513:
+ 13355              	.LBB3514:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 13356              		.loc 2 667 0
+ 13357 bd6b 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 13357      00000000 
+ 13358 bd73 F30F6F8D 		movdqu	-4512(%rbp), %xmm1
+ 13358      60EEFFFF 
+ 13359 bd7b F30F7F8D 		movdqu	%xmm1, -4480(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 412
+
+
+ 13359      80EEFFFF 
+ 13360 bd83 F30F7F85 		movdqu	%xmm0, -4496(%rbp)
+ 13360      70EEFFFF 
+ 13361 bd8b F30F6F85 		movdqu	-4480(%rbp), %xmm0
+ 13361      80EEFFFF 
+ 13362 bd93 F30F7F85 		movdqu	%xmm0, -4448(%rbp)
+ 13362      A0EEFFFF 
+ 13363 bd9b F30F6F85 		movdqu	-4496(%rbp), %xmm0
+ 13363      70EEFFFF 
+ 13364 bda3 F30F7F85 		movdqu	%xmm0, -4464(%rbp)
+ 13364      90EEFFFF 
+ 13365              	.LBB3515:
+ 13366              	.LBB3516:
+ 13367              	.LBB3517:
+ 13368              	.LBB3518:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13369              		.loc 3 529 0
+ 13370 bdab F30F6F8D 		movdqu	-4464(%rbp), %xmm1
+ 13370      90EEFFFF 
+ 13371 bdb3 F30F6F85 		movdqu	-4448(%rbp), %xmm0
+ 13371      A0EEFFFF 
+ 13372 bdbb 660F3800 		pshufb	%xmm1, %xmm0
+ 13372      C1
+ 13373              	.LBE3518:
+ 13374              	.LBE3517:
+ 13375              	.LBE3516:
+ 13376              	.LBE3515:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 13377              		.loc 2 667 0
+ 13378 bdc0 F30F7F85 		movdqu	%xmm0, -4512(%rbp)
+ 13378      60EEFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 13379              		.loc 2 668 0
+ 13380 bdc8 F30F6F85 		movdqu	-4512(%rbp), %xmm0
+ 13380      60EEFFFF 
+ 13381              	.LBE3514:
+ 13382              	.LBE3513:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 13383              		.loc 2 1684 0
+ 13384 bdd0 660F7F85 		movdqa	%xmm0, -10080(%rbp)
+ 13384      A0D8FFFF 
+ 13385              	.LBB3519:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 13386              		.loc 2 1685 0
+ 13387 bdd8 660F6F85 		movdqa	-10080(%rbp), %xmm0
+ 13387      A0D8FFFF 
+ 13388 bde0 F30F7F85 		movdqu	%xmm0, -9504(%rbp)
+ 13388      E0DAFFFF 
+ 13389 bde8 E8000000 		call	KDbgWriterGet at PLT
+ 13389      00
+ 13390 bded 4885C0   		testq	%rax, %rax
+ 13391 bdf0 7479     		je	.L197
+ 13392 bdf2 BF010000 		movl	$1, %edi
+ 13392      00
+ 13393 bdf7 E8000000 		call	KDbgCondToFlag at PLT
+ 13393      00
+ 13394 bdfc 4889C6   		movq	%rax, %rsi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 413
+
+
+ 13395 bdff BF100000 		movl	$16, %edi
+ 13395      00
+ 13396 be04 E8000000 		call	KDbgTestModConds at PLT
+ 13396      00
+ 13397 be09 84C0     		testb	%al, %al
+ 13398 be0b 745E     		je	.L197
+ 13399 be0d 8B85ECDA 		movl	-9492(%rbp), %eax
+ 13399      FFFF
+ 13400 be13 89C7     		movl	%eax, %edi
+ 13401 be15 E8E641FF 		call	bswap_32
+ 13401      FF
+ 13402 be1a 4189C5   		movl	%eax, %r13d
+ 13403 be1d 8B85E8DA 		movl	-9496(%rbp), %eax
+ 13403      FFFF
+ 13404 be23 89C7     		movl	%eax, %edi
+ 13405 be25 E8D641FF 		call	bswap_32
+ 13405      FF
+ 13406 be2a 4189C4   		movl	%eax, %r12d
+ 13407 be2d 8B85E4DA 		movl	-9500(%rbp), %eax
+ 13407      FFFF
+ 13408 be33 89C7     		movl	%eax, %edi
+ 13409 be35 E8C641FF 		call	bswap_32
+ 13409      FF
+ 13410 be3a 89C3     		movl	%eax, %ebx
+ 13411 be3c 8B85E0DA 		movl	-9504(%rbp), %eax
+ 13411      FFFF
+ 13412 be42 89C7     		movl	%eax, %edi
+ 13413 be44 E8B741FF 		call	bswap_32
+ 13413      FF
+ 13414 be49 4589E9   		movl	%r13d, %r9d
+ 13415 be4c 4589E0   		movl	%r12d, %r8d
+ 13416 be4f 89D9     		movl	%ebx, %ecx
+ 13417 be51 89C2     		movl	%eax, %edx
+ 13418 be53 488D3500 		leaq	.LC2(%rip), %rsi
+ 13418      000000
+ 13419 be5a 488D3D00 		leaq	.LC1(%rip), %rdi
+ 13419      000000
+ 13420 be61 B8000000 		movl	$0, %eax
+ 13420      00
+ 13421 be66 E8000000 		call	KDbgMsg at PLT
+ 13421      00
+ 13422              	.L197:
+ 13423 be6b 660F6F85 		movdqa	-10080(%rbp), %xmm0
+ 13423      A0D8FFFF 
+ 13424 be73 F30F7F85 		movdqu	%xmm0, -4416(%rbp)
+ 13424      C0EEFFFF 
+ 13425 be7b 660F6F85 		movdqa	-10064(%rbp), %xmm0
+ 13425      B0D8FFFF 
+ 13426 be83 F30F7F85 		movdqu	%xmm0, -4432(%rbp)
+ 13426      B0EEFFFF 
+ 13427              	.LBE3519:
+ 13428              	.LBB3520:
+ 13429              	.LBB3521:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 13430              		.loc 2 178 0
+ 13431 be8b F30F6F85 		movdqu	-4432(%rbp), %xmm0
+ 13431      B0EEFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 414
+
+
+ 13432 be93 F30F6F8D 		movdqu	-4416(%rbp), %xmm1
+ 13432      C0EEFFFF 
+ 13433 be9b 660FEFC1 		pxor	%xmm1, %xmm0
+ 13434              	.LBE3521:
+ 13435              	.LBE3520:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 13436              		.loc 2 1686 0
+ 13437 be9f 660F7F85 		movdqa	%xmm0, -10080(%rbp)
+ 13437      A0D8FFFF 
+ 13438              	.LBB3522:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 13439              		.loc 2 1687 0
+ 13440 bea7 660F6F85 		movdqa	-10080(%rbp), %xmm0
+ 13440      A0D8FFFF 
+ 13441 beaf F30F7F85 		movdqu	%xmm0, -9520(%rbp)
+ 13441      D0DAFFFF 
+ 13442 beb7 E8000000 		call	KDbgWriterGet at PLT
+ 13442      00
+ 13443 bebc 4885C0   		testq	%rax, %rax
+ 13444 bebf 7479     		je	.L199
+ 13445 bec1 BF010000 		movl	$1, %edi
+ 13445      00
+ 13446 bec6 E8000000 		call	KDbgCondToFlag at PLT
+ 13446      00
+ 13447 becb 4889C6   		movq	%rax, %rsi
+ 13448 bece BF100000 		movl	$16, %edi
+ 13448      00
+ 13449 bed3 E8000000 		call	KDbgTestModConds at PLT
+ 13449      00
+ 13450 bed8 84C0     		testb	%al, %al
+ 13451 beda 745E     		je	.L199
+ 13452 bedc 8B85DCDA 		movl	-9508(%rbp), %eax
+ 13452      FFFF
+ 13453 bee2 89C7     		movl	%eax, %edi
+ 13454 bee4 E81741FF 		call	bswap_32
+ 13454      FF
+ 13455 bee9 4189C5   		movl	%eax, %r13d
+ 13456 beec 8B85D8DA 		movl	-9512(%rbp), %eax
+ 13456      FFFF
+ 13457 bef2 89C7     		movl	%eax, %edi
+ 13458 bef4 E80741FF 		call	bswap_32
+ 13458      FF
+ 13459 bef9 4189C4   		movl	%eax, %r12d
+ 13460 befc 8B85D4DA 		movl	-9516(%rbp), %eax
+ 13460      FFFF
+ 13461 bf02 89C7     		movl	%eax, %edi
+ 13462 bf04 E8F740FF 		call	bswap_32
+ 13462      FF
+ 13463 bf09 89C3     		movl	%eax, %ebx
+ 13464 bf0b 8B85D0DA 		movl	-9520(%rbp), %eax
+ 13464      FFFF
+ 13465 bf11 89C7     		movl	%eax, %edi
+ 13466 bf13 E8E840FF 		call	bswap_32
+ 13466      FF
+ 13467 bf18 4589E9   		movl	%r13d, %r9d
+ 13468 bf1b 4589E0   		movl	%r12d, %r8d
+ 13469 bf1e 89D9     		movl	%ebx, %ecx
+
GAS LISTING /tmp/ccjbMjHD.s 			page 415
+
+
+ 13470 bf20 89C2     		movl	%eax, %edx
+ 13471 bf22 488D3500 		leaq	.LC3(%rip), %rsi
+ 13471      000000
+ 13472 bf29 488D3D00 		leaq	.LC1(%rip), %rdi
+ 13472      000000
+ 13473 bf30 B8000000 		movl	$0, %eax
+ 13473      00
+ 13474 bf35 E8000000 		call	KDbgMsg at PLT
+ 13474      00
+ 13475              	.L199:
+ 13476 bf3a 660F6F85 		movdqa	-10080(%rbp), %xmm0
+ 13476      A0D8FFFF 
+ 13477 bf42 F30F7F85 		movdqu	%xmm0, -4400(%rbp)
+ 13477      D0EEFFFF 
+ 13478 bf4a F30F6F85 		movdqu	-4400(%rbp), %xmm0
+ 13478      D0EEFFFF 
+ 13479 bf52 F30F7F85 		movdqu	%xmm0, -4368(%rbp)
+ 13479      F0EEFFFF 
+ 13480              	.LBE3522:
+ 13481              	.LBB3523:
+ 13482              	.LBB3524:
+ 13483              	.LBB3525:
+ 13484              	.LBB3526:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 13485              		.loc 3 450 0
+ 13486 bf5a F30F6F85 		movdqu	-4368(%rbp), %xmm0
+ 13486      F0EEFFFF 
+ 13487 bf62 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 13487      FF
+ 13488              	.LBE3526:
+ 13489              	.LBE3525:
+ 13490              	.LBE3524:
+ 13491              	.LBE3523:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 13492              		.loc 2 1688 0
+ 13493 bf67 660F7F85 		movdqa	%xmm0, -10080(%rbp)
+ 13493      A0D8FFFF 
+ 13494              	.LBB3527:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 13495              		.loc 2 1689 0
+ 13496 bf6f 660F6F85 		movdqa	-10080(%rbp), %xmm0
+ 13496      A0D8FFFF 
+ 13497 bf77 F30F7F85 		movdqu	%xmm0, -9536(%rbp)
+ 13497      C0DAFFFF 
+ 13498 bf7f E8000000 		call	KDbgWriterGet at PLT
+ 13498      00
+ 13499 bf84 4885C0   		testq	%rax, %rax
+ 13500 bf87 7479     		je	.L201
+ 13501 bf89 BF010000 		movl	$1, %edi
+ 13501      00
+ 13502 bf8e E8000000 		call	KDbgCondToFlag at PLT
+ 13502      00
+ 13503 bf93 4889C6   		movq	%rax, %rsi
+ 13504 bf96 BF100000 		movl	$16, %edi
+ 13504      00
+ 13505 bf9b E8000000 		call	KDbgTestModConds at PLT
+ 13505      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 416
+
+
+ 13506 bfa0 84C0     		testb	%al, %al
+ 13507 bfa2 745E     		je	.L201
+ 13508 bfa4 8B85CCDA 		movl	-9524(%rbp), %eax
+ 13508      FFFF
+ 13509 bfaa 89C7     		movl	%eax, %edi
+ 13510 bfac E84F40FF 		call	bswap_32
+ 13510      FF
+ 13511 bfb1 4189C5   		movl	%eax, %r13d
+ 13512 bfb4 8B85C8DA 		movl	-9528(%rbp), %eax
+ 13512      FFFF
+ 13513 bfba 89C7     		movl	%eax, %edi
+ 13514 bfbc E83F40FF 		call	bswap_32
+ 13514      FF
+ 13515 bfc1 4189C4   		movl	%eax, %r12d
+ 13516 bfc4 8B85C4DA 		movl	-9532(%rbp), %eax
+ 13516      FFFF
+ 13517 bfca 89C7     		movl	%eax, %edi
+ 13518 bfcc E82F40FF 		call	bswap_32
+ 13518      FF
+ 13519 bfd1 89C3     		movl	%eax, %ebx
+ 13520 bfd3 8B85C0DA 		movl	-9536(%rbp), %eax
+ 13520      FFFF
+ 13521 bfd9 89C7     		movl	%eax, %edi
+ 13522 bfdb E82040FF 		call	bswap_32
+ 13522      FF
+ 13523 bfe0 4589E9   		movl	%r13d, %r9d
+ 13524 bfe3 4589E0   		movl	%r12d, %r8d
+ 13525 bfe6 89D9     		movl	%ebx, %ecx
+ 13526 bfe8 89C2     		movl	%eax, %edx
+ 13527 bfea 488D3500 		leaq	.LC4(%rip), %rsi
+ 13527      000000
+ 13528 bff1 488D3D00 		leaq	.LC1(%rip), %rdi
+ 13528      000000
+ 13529 bff8 B8000000 		movl	$0, %eax
+ 13529      00
+ 13530 bffd E8000000 		call	KDbgMsg at PLT
+ 13530      00
+ 13531              	.L201:
+ 13532              	.LBE3527:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 13533              		.loc 2 1690 0
+ 13534 c002 660F6F85 		movdqa	-10080(%rbp), %xmm0
+ 13534      A0D8FFFF 
+ 13535              	.LBE3481:
+ 13536              	.LBE3480:
+1932:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(8,0x08);    /* k32 : k33 : k34 : k35 */
+ 13537              		.loc 2 1932 0
+ 13538 c00a F30F7F85 		movdqu	%xmm0, -9152(%rbp)
+ 13538      40DCFFFF 
+ 13539 c012 F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 13539      20DCFFFF 
+ 13540 c01a F30F7F85 		movdqu	%xmm0, -4352(%rbp)
+ 13540      00EFFFFF 
+ 13541              	.LBB3528:
+ 13542              	.LBB3529:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 13543              		.loc 2 1565 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 417
+
+
+ 13544 c022 F30F6F85 		movdqu	-4352(%rbp), %xmm0
+ 13544      00EFFFFF 
+ 13545 c02a 660F7F85 		movdqa	%xmm0, -10048(%rbp)
+ 13545      C0D8FFFF 
+ 13546 c032 660F6F85 		movdqa	-10048(%rbp), %xmm0
+ 13546      C0D8FFFF 
+ 13547 c03a F30F7F85 		movdqu	%xmm0, -4336(%rbp)
+ 13547      10EFFFFF 
+ 13548              	.LBB3530:
+ 13549              	.LBB3531:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 13550              		.loc 2 1278 0
+ 13551 c042 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 13551      00000000 
+ 13552 c04a F30F6F8D 		movdqu	-4336(%rbp), %xmm1
+ 13552      10EFFFFF 
+ 13553 c052 F30F7F8D 		movdqu	%xmm1, -4304(%rbp)
+ 13553      30EFFFFF 
+ 13554 c05a F30F7F85 		movdqu	%xmm0, -4320(%rbp)
+ 13554      20EFFFFF 
+ 13555 c062 F30F6F85 		movdqu	-4304(%rbp), %xmm0
+ 13555      30EFFFFF 
+ 13556 c06a F30F7F85 		movdqu	%xmm0, -4272(%rbp)
+ 13556      50EFFFFF 
+ 13557 c072 F30F6F85 		movdqu	-4320(%rbp), %xmm0
+ 13557      20EFFFFF 
+ 13558 c07a F30F7F85 		movdqu	%xmm0, -4288(%rbp)
+ 13558      40EFFFFF 
+ 13559              	.LBB3532:
+ 13560              	.LBB3533:
+ 13561              	.LBB3534:
+ 13562              	.LBB3535:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13563              		.loc 3 529 0
+ 13564 c082 F30F6F8D 		movdqu	-4288(%rbp), %xmm1
+ 13564      40EFFFFF 
+ 13565 c08a F30F6F85 		movdqu	-4272(%rbp), %xmm0
+ 13565      50EFFFFF 
+ 13566 c092 660F3800 		pshufb	%xmm1, %xmm0
+ 13566      C1
+ 13567              	.LBE3535:
+ 13568              	.LBE3534:
+ 13569              	.LBE3533:
+ 13570              	.LBE3532:
+ 13571              	.LBE3531:
+ 13572              	.LBE3530:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13573              		.loc 2 1567 0
+ 13574 c097 660F7F85 		movdqa	%xmm0, -10048(%rbp)
+ 13574      C0D8FFFF 
+ 13575 c09f 660F6F85 		movdqa	-10048(%rbp), %xmm0
+ 13575      C0D8FFFF 
+ 13576 c0a7 660FEF85 		pxor	-4352(%rbp), %xmm0
+ 13576      00EFFFFF 
+ 13577 c0af F30F7F85 		movdqu	%xmm0, -4352(%rbp)
+ 13577      00EFFFFF 
+ 13578 c0b7 660F6F85 		movdqa	-10048(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 418
+
+
+ 13578      C0D8FFFF 
+ 13579 c0bf F30F7F85 		movdqu	%xmm0, -4256(%rbp)
+ 13579      60EFFFFF 
+ 13580              	.LBB3536:
+ 13581              	.LBB3537:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 13582              		.loc 2 1278 0
+ 13583 c0c7 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 13583      00000000 
+ 13584 c0cf F30F6F8D 		movdqu	-4256(%rbp), %xmm1
+ 13584      60EFFFFF 
+ 13585 c0d7 F30F7F8D 		movdqu	%xmm1, -4224(%rbp)
+ 13585      80EFFFFF 
+ 13586 c0df F30F7F85 		movdqu	%xmm0, -4240(%rbp)
+ 13586      70EFFFFF 
+ 13587 c0e7 F30F6F85 		movdqu	-4224(%rbp), %xmm0
+ 13587      80EFFFFF 
+ 13588 c0ef F30F7F85 		movdqu	%xmm0, -4192(%rbp)
+ 13588      A0EFFFFF 
+ 13589 c0f7 F30F6F85 		movdqu	-4240(%rbp), %xmm0
+ 13589      70EFFFFF 
+ 13590 c0ff F30F7F85 		movdqu	%xmm0, -4208(%rbp)
+ 13590      90EFFFFF 
+ 13591              	.LBB3538:
+ 13592              	.LBB3539:
+ 13593              	.LBB3540:
+ 13594              	.LBB3541:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13595              		.loc 3 529 0
+ 13596 c107 F30F6F8D 		movdqu	-4208(%rbp), %xmm1
+ 13596      90EFFFFF 
+ 13597 c10f F30F6F85 		movdqu	-4192(%rbp), %xmm0
+ 13597      A0EFFFFF 
+ 13598 c117 660F3800 		pshufb	%xmm1, %xmm0
+ 13598      C1
+ 13599              	.LBE3541:
+ 13600              	.LBE3540:
+ 13601              	.LBE3539:
+ 13602              	.LBE3538:
+ 13603              	.LBE3537:
+ 13604              	.LBE3536:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13605              		.loc 2 1568 0
+ 13606 c11c 660F7F85 		movdqa	%xmm0, -10048(%rbp)
+ 13606      C0D8FFFF 
+ 13607 c124 660F6F85 		movdqa	-10048(%rbp), %xmm0
+ 13607      C0D8FFFF 
+ 13608 c12c 660FEF85 		pxor	-4352(%rbp), %xmm0
+ 13608      00EFFFFF 
+ 13609 c134 F30F7F85 		movdqu	%xmm0, -4352(%rbp)
+ 13609      00EFFFFF 
+ 13610 c13c 660F6F85 		movdqa	-10048(%rbp), %xmm0
+ 13610      C0D8FFFF 
+ 13611 c144 F30F7F85 		movdqu	%xmm0, -4176(%rbp)
+ 13611      B0EFFFFF 
+ 13612              	.LBB3542:
+ 13613              	.LBB3543:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 419
+
+
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 13614              		.loc 2 1278 0
+ 13615 c14c 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 13615      00000000 
+ 13616 c154 F30F6F8D 		movdqu	-4176(%rbp), %xmm1
+ 13616      B0EFFFFF 
+ 13617 c15c F30F7F8D 		movdqu	%xmm1, -4144(%rbp)
+ 13617      D0EFFFFF 
+ 13618 c164 F30F7F85 		movdqu	%xmm0, -4160(%rbp)
+ 13618      C0EFFFFF 
+ 13619 c16c F30F6F85 		movdqu	-4144(%rbp), %xmm0
+ 13619      D0EFFFFF 
+ 13620 c174 F30F7F85 		movdqu	%xmm0, -4112(%rbp)
+ 13620      F0EFFFFF 
+ 13621 c17c F30F6F85 		movdqu	-4160(%rbp), %xmm0
+ 13621      C0EFFFFF 
+ 13622 c184 F30F7F85 		movdqu	%xmm0, -4128(%rbp)
+ 13622      E0EFFFFF 
+ 13623              	.LBB3544:
+ 13624              	.LBB3545:
+ 13625              	.LBB3546:
+ 13626              	.LBB3547:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13627              		.loc 3 529 0
+ 13628 c18c F30F6F8D 		movdqu	-4128(%rbp), %xmm1
+ 13628      E0EFFFFF 
+ 13629 c194 F30F6F85 		movdqu	-4112(%rbp), %xmm0
+ 13629      F0EFFFFF 
+ 13630 c19c 660F3800 		pshufb	%xmm1, %xmm0
+ 13630      C1
+ 13631              	.LBE3547:
+ 13632              	.LBE3546:
+ 13633              	.LBE3545:
+ 13634              	.LBE3544:
+ 13635              	.LBE3543:
+ 13636              	.LBE3542:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13637              		.loc 2 1569 0
+ 13638 c1a1 660F7F85 		movdqa	%xmm0, -10048(%rbp)
+ 13638      C0D8FFFF 
+ 13639 c1a9 660F6F85 		movdqa	-10048(%rbp), %xmm0
+ 13639      C0D8FFFF 
+ 13640 c1b1 660FEF85 		pxor	-4352(%rbp), %xmm0
+ 13640      00EFFFFF 
+ 13641 c1b9 F30F7F85 		movdqu	%xmm0, -4352(%rbp)
+ 13641      00EFFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 13642              		.loc 2 1571 0
+ 13643 c1c1 F30F6F85 		movdqu	-4352(%rbp), %xmm0
+ 13643      00EFFFFF 
+ 13644              	.LBE3529:
+ 13645              	.LBE3528:
+ 13646              		.loc 2 1932 0
+ 13647 c1c9 F30F7F85 		movdqu	%xmm0, -9184(%rbp)
+ 13647      20DCFFFF 
+ 13648 c1d1 F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 13648      20DCFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 420
+
+
+ 13649 c1d9 F30F7F85 		movdqu	%xmm0, -4080(%rbp)
+ 13649      10F0FFFF 
+ 13650 c1e1 F30F6F85 		movdqu	-9152(%rbp), %xmm0
+ 13650      40DCFFFF 
+ 13651 c1e9 F30F7F85 		movdqu	%xmm0, -4096(%rbp)
+ 13651      00F0FFFF 
+ 13652              	.LBB3548:
+ 13653              	.LBB3549:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 13654              		.loc 2 178 0
+ 13655 c1f1 F30F6F85 		movdqu	-4096(%rbp), %xmm0
+ 13655      00F0FFFF 
+ 13656 c1f9 F30F6F8D 		movdqu	-4080(%rbp), %xmm1
+ 13656      10F0FFFF 
+ 13657 c201 660FEFC1 		pxor	%xmm1, %xmm0
+ 13658              	.LBE3549:
+ 13659              	.LBE3548:
+ 13660              		.loc 2 1932 0
+ 13661 c205 F30F7F85 		movdqu	%xmm0, -9184(%rbp)
+ 13661      20DCFFFF 
+ 13662 c20d 488B8598 		movq	-9832(%rbp), %rax
+ 13662      D9FFFF
+ 13663 c214 4883E880 		subq	$-128, %rax
+ 13664 c218 F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 13664      20DCFFFF 
+ 13665 c220 F30F7F00 		movdqu	%xmm0, (%rax)
+ 13666 c224 F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 13666      20DCFFFF 
+ 13667 c22c F30F7F85 		movdqu	%xmm0, -4064(%rbp)
+ 13667      20F0FFFF 
+ 13668              	.LBB3550:
+ 13669              	.LBB3551:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 13670              		.loc 2 1656 0
+ 13671 c234 F30F6F85 		movdqu	-4064(%rbp), %xmm0
+ 13671      20F0FFFF 
+ 13672 c23c F30F7F85 		movdqu	%xmm0, -9456(%rbp)
+ 13672      10DBFFFF 
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 13673              		.loc 2 1657 0
+ 13674 c244 8B851CDB 		movl	-9444(%rbp), %eax
+ 13674      FFFF
+ 13675 c24a 898538F0 		movl	%eax, -4040(%rbp)
+ 13675      FFFF
+ 13676              	.LBB3552:
+ 13677              	.LBB3553:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 13678              		.loc 2 740 0
+ 13679 c250 8B8538F0 		movl	-4040(%rbp), %eax
+ 13679      FFFF
+ 13680 c256 898500DB 		movl	%eax, -9472(%rbp)
+ 13680      FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 13681              		.loc 2 741 0
+ 13682 c25c C7853CF0 		movl	$0, -4036(%rbp)
+ 13682      FFFF0000 
+ 13682      0000
+
GAS LISTING /tmp/ccjbMjHD.s 			page 421
+
+
+ 13683 c266 EB36     		jmp	.L202
+ 13684              	.L203:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 13685              		.loc 2 742 0
+ 13686 c268 8B8D3CF0 		movl	-4036(%rbp), %ecx
+ 13686      FFFF
+ 13687 c26e 8B853CF0 		movl	-4036(%rbp), %eax
+ 13687      FFFF
+ 13688 c274 89C0     		mov	%eax, %eax
+ 13689 c276 0FB68405 		movzbl	-9472(%rbp,%rax), %eax
+ 13689      00DBFFFF 
+ 13690 c27e 0FB6C0   		movzbl	%al, %eax
+ 13691 c281 89C2     		mov	%eax, %edx
+ 13692 c283 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBox(%rip), %rax
+ 13692      000000
+ 13693 c28a 0FB61402 		movzbl	(%rdx,%rax), %edx
+ 13694 c28e 89C8     		mov	%ecx, %eax
+ 13695 c290 88940500 		movb	%dl, -9472(%rbp,%rax)
+ 13695      DBFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 13696              		.loc 2 741 0
+ 13697 c297 83853CF0 		addl	$1, -4036(%rbp)
+ 13697      FFFF01
+ 13698              	.L202:
+ 13699 c29e 83BD3CF0 		cmpl	$3, -4036(%rbp)
+ 13699      FFFF03
+ 13700 c2a5 76C1     		jbe	.L203
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 13701              		.loc 2 743 0
+ 13702 c2a7 8B8500DB 		movl	-9472(%rbp), %eax
+ 13702      FFFF
+ 13703              	.LBE3553:
+ 13704              	.LBE3552:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 13705              		.loc 2 1657 0
+ 13706 c2ad 898534F0 		movl	%eax, -4044(%rbp)
+ 13706      FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 13707              		.loc 2 1659 0
+ 13708 c2b3 8B8534F0 		movl	-4044(%rbp), %eax
+ 13708      FFFF
+ 13709 c2b9 89851CDB 		movl	%eax, -9444(%rbp)
+ 13709      FFFF
+ 13710 c2bf 8B851CDB 		movl	-9444(%rbp), %eax
+ 13710      FFFF
+ 13711 c2c5 898518DB 		movl	%eax, -9448(%rbp)
+ 13711      FFFF
+ 13712 c2cb 8B8518DB 		movl	-9448(%rbp), %eax
+ 13712      FFFF
+ 13713 c2d1 898514DB 		movl	%eax, -9452(%rbp)
+ 13713      FFFF
+ 13714 c2d7 8B8514DB 		movl	-9452(%rbp), %eax
+ 13714      FFFF
+ 13715 c2dd 898510DB 		movl	%eax, -9456(%rbp)
+ 13715      FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 13716              		.loc 2 1660 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 422
+
+
+ 13717 c2e3 F30F6F85 		movdqu	-9456(%rbp), %xmm0
+ 13717      10DBFFFF 
+ 13718              	.LBE3551:
+ 13719              	.LBE3550:
+1933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(9);         /* k36 : k37 : k38 : k39 */
+ 13720              		.loc 2 1933 0
+ 13721 c2eb F30F7F85 		movdqu	%xmm0, -9152(%rbp)
+ 13721      40DCFFFF 
+ 13722 c2f3 F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 13722      30DCFFFF 
+ 13723 c2fb F30F7F85 		movdqu	%xmm0, -4032(%rbp)
+ 13723      40F0FFFF 
+ 13724              	.LBB3554:
+ 13725              	.LBB3555:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 13726              		.loc 2 1565 0
+ 13727 c303 F30F6F85 		movdqu	-4032(%rbp), %xmm0
+ 13727      40F0FFFF 
+ 13728 c30b 660F7F85 		movdqa	%xmm0, -10032(%rbp)
+ 13728      D0D8FFFF 
+ 13729 c313 660F6F85 		movdqa	-10032(%rbp), %xmm0
+ 13729      D0D8FFFF 
+ 13730 c31b F30F7F85 		movdqu	%xmm0, -4016(%rbp)
+ 13730      50F0FFFF 
+ 13731              	.LBB3556:
+ 13732              	.LBB3557:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 13733              		.loc 2 1278 0
+ 13734 c323 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 13734      00000000 
+ 13735 c32b F30F6F8D 		movdqu	-4016(%rbp), %xmm1
+ 13735      50F0FFFF 
+ 13736 c333 F30F7F8D 		movdqu	%xmm1, -3984(%rbp)
+ 13736      70F0FFFF 
+ 13737 c33b F30F7F85 		movdqu	%xmm0, -4000(%rbp)
+ 13737      60F0FFFF 
+ 13738 c343 F30F6F85 		movdqu	-3984(%rbp), %xmm0
+ 13738      70F0FFFF 
+ 13739 c34b F30F7F85 		movdqu	%xmm0, -3952(%rbp)
+ 13739      90F0FFFF 
+ 13740 c353 F30F6F85 		movdqu	-4000(%rbp), %xmm0
+ 13740      60F0FFFF 
+ 13741 c35b F30F7F85 		movdqu	%xmm0, -3968(%rbp)
+ 13741      80F0FFFF 
+ 13742              	.LBB3558:
+ 13743              	.LBB3559:
+ 13744              	.LBB3560:
+ 13745              	.LBB3561:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13746              		.loc 3 529 0
+ 13747 c363 F30F6F8D 		movdqu	-3968(%rbp), %xmm1
+ 13747      80F0FFFF 
+ 13748 c36b F30F6F85 		movdqu	-3952(%rbp), %xmm0
+ 13748      90F0FFFF 
+ 13749 c373 660F3800 		pshufb	%xmm1, %xmm0
+ 13749      C1
+ 13750              	.LBE3561:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 423
+
+
+ 13751              	.LBE3560:
+ 13752              	.LBE3559:
+ 13753              	.LBE3558:
+ 13754              	.LBE3557:
+ 13755              	.LBE3556:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13756              		.loc 2 1567 0
+ 13757 c378 660F7F85 		movdqa	%xmm0, -10032(%rbp)
+ 13757      D0D8FFFF 
+ 13758 c380 660F6F85 		movdqa	-10032(%rbp), %xmm0
+ 13758      D0D8FFFF 
+ 13759 c388 660FEF85 		pxor	-4032(%rbp), %xmm0
+ 13759      40F0FFFF 
+ 13760 c390 F30F7F85 		movdqu	%xmm0, -4032(%rbp)
+ 13760      40F0FFFF 
+ 13761 c398 660F6F85 		movdqa	-10032(%rbp), %xmm0
+ 13761      D0D8FFFF 
+ 13762 c3a0 F30F7F85 		movdqu	%xmm0, -3936(%rbp)
+ 13762      A0F0FFFF 
+ 13763              	.LBB3562:
+ 13764              	.LBB3563:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 13765              		.loc 2 1278 0
+ 13766 c3a8 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 13766      00000000 
+ 13767 c3b0 F30F6F8D 		movdqu	-3936(%rbp), %xmm1
+ 13767      A0F0FFFF 
+ 13768 c3b8 F30F7F8D 		movdqu	%xmm1, -3904(%rbp)
+ 13768      C0F0FFFF 
+ 13769 c3c0 F30F7F85 		movdqu	%xmm0, -3920(%rbp)
+ 13769      B0F0FFFF 
+ 13770 c3c8 F30F6F85 		movdqu	-3904(%rbp), %xmm0
+ 13770      C0F0FFFF 
+ 13771 c3d0 F30F7F85 		movdqu	%xmm0, -3872(%rbp)
+ 13771      E0F0FFFF 
+ 13772 c3d8 F30F6F85 		movdqu	-3920(%rbp), %xmm0
+ 13772      B0F0FFFF 
+ 13773 c3e0 F30F7F85 		movdqu	%xmm0, -3888(%rbp)
+ 13773      D0F0FFFF 
+ 13774              	.LBB3564:
+ 13775              	.LBB3565:
+ 13776              	.LBB3566:
+ 13777              	.LBB3567:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13778              		.loc 3 529 0
+ 13779 c3e8 F30F6F8D 		movdqu	-3888(%rbp), %xmm1
+ 13779      D0F0FFFF 
+ 13780 c3f0 F30F6F85 		movdqu	-3872(%rbp), %xmm0
+ 13780      E0F0FFFF 
+ 13781 c3f8 660F3800 		pshufb	%xmm1, %xmm0
+ 13781      C1
+ 13782              	.LBE3567:
+ 13783              	.LBE3566:
+ 13784              	.LBE3565:
+ 13785              	.LBE3564:
+ 13786              	.LBE3563:
+ 13787              	.LBE3562:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 424
+
+
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13788              		.loc 2 1568 0
+ 13789 c3fd 660F7F85 		movdqa	%xmm0, -10032(%rbp)
+ 13789      D0D8FFFF 
+ 13790 c405 660F6F85 		movdqa	-10032(%rbp), %xmm0
+ 13790      D0D8FFFF 
+ 13791 c40d 660FEF85 		pxor	-4032(%rbp), %xmm0
+ 13791      40F0FFFF 
+ 13792 c415 F30F7F85 		movdqu	%xmm0, -4032(%rbp)
+ 13792      40F0FFFF 
+ 13793 c41d 660F6F85 		movdqa	-10032(%rbp), %xmm0
+ 13793      D0D8FFFF 
+ 13794 c425 F30F7F85 		movdqu	%xmm0, -3856(%rbp)
+ 13794      F0F0FFFF 
+ 13795              	.LBB3568:
+ 13796              	.LBB3569:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 13797              		.loc 2 1278 0
+ 13798 c42d 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 13798      00000000 
+ 13799 c435 F30F6F8D 		movdqu	-3856(%rbp), %xmm1
+ 13799      F0F0FFFF 
+ 13800 c43d F30F7F8D 		movdqu	%xmm1, -3824(%rbp)
+ 13800      10F1FFFF 
+ 13801 c445 F30F7F85 		movdqu	%xmm0, -3840(%rbp)
+ 13801      00F1FFFF 
+ 13802 c44d F30F6F85 		movdqu	-3824(%rbp), %xmm0
+ 13802      10F1FFFF 
+ 13803 c455 F30F7F85 		movdqu	%xmm0, -3792(%rbp)
+ 13803      30F1FFFF 
+ 13804 c45d F30F6F85 		movdqu	-3840(%rbp), %xmm0
+ 13804      00F1FFFF 
+ 13805 c465 F30F7F85 		movdqu	%xmm0, -3808(%rbp)
+ 13805      20F1FFFF 
+ 13806              	.LBB3570:
+ 13807              	.LBB3571:
+ 13808              	.LBB3572:
+ 13809              	.LBB3573:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13810              		.loc 3 529 0
+ 13811 c46d F30F6F8D 		movdqu	-3808(%rbp), %xmm1
+ 13811      20F1FFFF 
+ 13812 c475 F30F6F85 		movdqu	-3792(%rbp), %xmm0
+ 13812      30F1FFFF 
+ 13813 c47d 660F3800 		pshufb	%xmm1, %xmm0
+ 13813      C1
+ 13814              	.LBE3573:
+ 13815              	.LBE3572:
+ 13816              	.LBE3571:
+ 13817              	.LBE3570:
+ 13818              	.LBE3569:
+ 13819              	.LBE3568:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 13820              		.loc 2 1569 0
+ 13821 c482 660F7F85 		movdqa	%xmm0, -10032(%rbp)
+ 13821      D0D8FFFF 
+ 13822 c48a 660F6F85 		movdqa	-10032(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 425
+
+
+ 13822      D0D8FFFF 
+ 13823 c492 660FEF85 		pxor	-4032(%rbp), %xmm0
+ 13823      40F0FFFF 
+ 13824 c49a F30F7F85 		movdqu	%xmm0, -4032(%rbp)
+ 13824      40F0FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 13825              		.loc 2 1571 0
+ 13826 c4a2 F30F6F85 		movdqu	-4032(%rbp), %xmm0
+ 13826      40F0FFFF 
+ 13827              	.LBE3555:
+ 13828              	.LBE3554:
+ 13829              		.loc 2 1933 0
+ 13830 c4aa F30F7F85 		movdqu	%xmm0, -9168(%rbp)
+ 13830      30DCFFFF 
+ 13831 c4b2 F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 13831      30DCFFFF 
+ 13832 c4ba F30F7F85 		movdqu	%xmm0, -3760(%rbp)
+ 13832      50F1FFFF 
+ 13833 c4c2 F30F6F85 		movdqu	-9152(%rbp), %xmm0
+ 13833      40DCFFFF 
+ 13834 c4ca F30F7F85 		movdqu	%xmm0, -3776(%rbp)
+ 13834      40F1FFFF 
+ 13835              	.LBB3574:
+ 13836              	.LBB3575:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 13837              		.loc 2 178 0
+ 13838 c4d2 F30F6F85 		movdqu	-3776(%rbp), %xmm0
+ 13838      40F1FFFF 
+ 13839 c4da F30F6F8D 		movdqu	-3760(%rbp), %xmm1
+ 13839      50F1FFFF 
+ 13840 c4e2 660FEFC1 		pxor	%xmm1, %xmm0
+ 13841              	.LBE3575:
+ 13842              	.LBE3574:
+ 13843              		.loc 2 1933 0
+ 13844 c4e6 F30F7F85 		movdqu	%xmm0, -9168(%rbp)
+ 13844      30DCFFFF 
+ 13845 c4ee 488B8598 		movq	-9832(%rbp), %rax
+ 13845      D9FFFF
+ 13846 c4f5 48059000 		addq	$144, %rax
+ 13846      0000
+ 13847 c4fb F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 13847      30DCFFFF 
+ 13848 c503 F30F7F00 		movdqu	%xmm0, (%rax)
+ 13849 c507 F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 13849      30DCFFFF 
+ 13850 c50f F30F7F85 		movdqu	%xmm0, -3728(%rbp)
+ 13850      70F1FFFF 
+ 13851              	.LBB3576:
+ 13852              	.LBB3577:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 13853              		.loc 2 1681 0
+ 13854 c517 B8100000 		movl	$16, %eax
+ 13854      00
+ 13855 c51c 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 13855      00000000 
+ 13856 c524 F30F7F85 		movdqu	%xmm0, -3696(%rbp)
+ 13856      90F1FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 426
+
+
+ 13857 c52c 89858CF1 		movl	%eax, -3700(%rbp)
+ 13857      FFFF
+ 13858 c532 F30F6F85 		movdqu	-3696(%rbp), %xmm0
+ 13858      90F1FFFF 
+ 13859 c53a F30F7F85 		movdqu	%xmm0, -3664(%rbp)
+ 13859      B0F1FFFF 
+ 13860 c542 8B858CF1 		movl	-3700(%rbp), %eax
+ 13860      FFFF
+ 13861 c548 8985ACF1 		movl	%eax, -3668(%rbp)
+ 13861      FFFF
+ 13862              	.LBB3578:
+ 13863              	.LBB3579:
+ 13864              	.LBB3580:
+ 13865              	.LBB3581:
+ 13866              		.loc 3 598 0
+ 13867 c54e 8B85ACF1 		movl	-3668(%rbp), %eax
+ 13867      FFFF
+ 13868 c554 F30F6F85 		movdqu	-3664(%rbp), %xmm0
+ 13868      B0F1FFFF 
+ 13869 c55c 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 13869      C003
+ 13870              	.LBE3581:
+ 13871              	.LBE3580:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 13872              		.loc 2 519 0
+ 13873 c562 F30F7F85 		movdqu	%xmm0, -3696(%rbp)
+ 13873      90F1FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 13874              		.loc 2 526 0
+ 13875 c56a F30F6F85 		movdqu	-3696(%rbp), %xmm0
+ 13875      90F1FFFF 
+ 13876              	.LBE3579:
+ 13877              	.LBE3578:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 13878              		.loc 2 1681 0
+ 13879 c572 660F7F85 		movdqa	%xmm0, -10000(%rbp)
+ 13879      F0D8FFFF 
+ 13880 c57a F30F6F85 		movdqu	-3728(%rbp), %xmm0
+ 13880      70F1FFFF 
+ 13881 c582 F30F7F85 		movdqu	%xmm0, -3648(%rbp)
+ 13881      C0F1FFFF 
+ 13882 c58a F30F6F85 		movdqu	-3648(%rbp), %xmm0
+ 13882      C0F1FFFF 
+ 13883 c592 F30F7F85 		movdqu	%xmm0, -3616(%rbp)
+ 13883      E0F1FFFF 
+ 13884 c59a 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 13884      000000
+ 13885 c5a1 488985D8 		movq	%rax, -3624(%rbp)
+ 13885      F1FFFF
+ 13886              	.LBB3582:
+ 13887              	.LBB3583:
+ 13888              	.LBB3584:
+ 13889              	.LBB3585:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 13890              		.loc 2 851 0
+ 13891 c5a8 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 13891      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 427
+
+
+ 13892 c5b0 F30F7F85 		movdqu	%xmm0, -3584(%rbp)
+ 13892      00F2FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 13893              		.loc 2 854 0
+ 13894 c5b8 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 13894      00000000 
+ 13895 c5c0 F30F6F8D 		movdqu	-3616(%rbp), %xmm1
+ 13895      E0F1FFFF 
+ 13896 c5c8 F30F7F8D 		movdqu	%xmm1, -3504(%rbp)
+ 13896      50F2FFFF 
+ 13897 c5d0 F30F7F85 		movdqu	%xmm0, -3520(%rbp)
+ 13897      40F2FFFF 
+ 13898              	.LBB3586:
+ 13899              	.LBB3587:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 13900              		.loc 2 206 0
+ 13901 c5d8 F30F6F85 		movdqu	-3520(%rbp), %xmm0
+ 13901      40F2FFFF 
+ 13902 c5e0 F30F6F8D 		movdqu	-3504(%rbp), %xmm1
+ 13902      50F2FFFF 
+ 13903 c5e8 660FDBC1 		pand	%xmm1, %xmm0
+ 13904              	.LBE3587:
+ 13905              	.LBE3586:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 13906              		.loc 2 854 0
+ 13907 c5ec F30F7F85 		movdqu	%xmm0, -3536(%rbp)
+ 13907      30F2FFFF 
+ 13908 c5f4 F30F6F85 		movdqu	-3616(%rbp), %xmm0
+ 13908      E0F1FFFF 
+ 13909 c5fc F30F7F85 		movdqu	%xmm0, -3472(%rbp)
+ 13909      70F2FFFF 
+ 13910              	.LBB3588:
+ 13911              	.LBB3589:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 13912              		.loc 3 433 0
+ 13913 c604 F30F6F85 		movdqu	-3472(%rbp), %xmm0
+ 13913      70F2FFFF 
+ 13914 c60c 660F72D0 		psrld	$4, %xmm0
+ 13914      04
+ 13915              	.LBE3589:
+ 13916              	.LBE3588:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 13917              		.loc 2 857 0
+ 13918 c611 F30F7F85 		movdqu	%xmm0, -3552(%rbp)
+ 13918      20F2FFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 13919              		.loc 2 859 0
+ 13920 c619 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 13920      00000000 
+ 13921 c621 F30F6F8D 		movdqu	-3552(%rbp), %xmm1
+ 13921      20F2FFFF 
+ 13922 c629 F30F7F8D 		movdqu	%xmm1, -3440(%rbp)
+ 13922      90F2FFFF 
+ 13923 c631 F30F7F85 		movdqu	%xmm0, -3456(%rbp)
+ 13923      80F2FFFF 
+ 13924              	.LBB3590:
+ 13925              	.LBB3591:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 428
+
+
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 13926              		.loc 2 206 0
+ 13927 c639 F30F6F85 		movdqu	-3456(%rbp), %xmm0
+ 13927      80F2FFFF 
+ 13928 c641 F30F6F8D 		movdqu	-3440(%rbp), %xmm1
+ 13928      90F2FFFF 
+ 13929 c649 660FDBC1 		pand	%xmm1, %xmm0
+ 13930              	.LBE3591:
+ 13931              	.LBE3590:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 13932              		.loc 2 859 0
+ 13933 c64d F30F7F85 		movdqu	%xmm0, -3552(%rbp)
+ 13933      20F2FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 13934              		.loc 2 866 0
+ 13935 c655 C785FCF1 		movl	$0, -3588(%rbp)
+ 13935      FFFF0000 
+ 13935      0000
+ 13936 c65f E9BE0100 		jmp	.L204
+ 13936      00
+ 13937              	.L205:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 13938              		.loc 2 868 0
+ 13939 c664 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 13939      00000000 
+ 13940 c66c F30F7F85 		movdqu	%xmm0, -3408(%rbp)
+ 13940      B0F2FFFF 
+ 13941 c674 F30F6F85 		movdqu	-3552(%rbp), %xmm0
+ 13941      20F2FFFF 
+ 13942 c67c F30F7F85 		movdqu	%xmm0, -3424(%rbp)
+ 13942      A0F2FFFF 
+ 13943 c684 F30F6F85 		movdqu	-3408(%rbp), %xmm0
+ 13943      B0F2FFFF 
+ 13944 c68c F30F7F85 		movdqu	%xmm0, -3376(%rbp)
+ 13944      D0F2FFFF 
+ 13945 c694 F30F6F85 		movdqu	-3424(%rbp), %xmm0
+ 13945      A0F2FFFF 
+ 13946 c69c F30F7F85 		movdqu	%xmm0, -3392(%rbp)
+ 13946      C0F2FFFF 
+ 13947              	.LBB3592:
+ 13948              	.LBB3593:
+ 13949              	.LBB3594:
+ 13950              	.LBB3595:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13951              		.loc 3 529 0
+ 13952 c6a4 F30F6F8D 		movdqu	-3392(%rbp), %xmm1
+ 13952      C0F2FFFF 
+ 13953 c6ac F30F6F85 		movdqu	-3376(%rbp), %xmm0
+ 13953      D0F2FFFF 
+ 13954 c6b4 660F3800 		pshufb	%xmm1, %xmm0
+ 13954      C1
+ 13955              	.LBE3595:
+ 13956              	.LBE3594:
+ 13957              	.LBE3593:
+ 13958              	.LBE3592:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 13959              		.loc 2 868 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 429
+
+
+ 13960 c6b9 F30F7F85 		movdqu	%xmm0, -3568(%rbp)
+ 13960      10F2FFFF 
+ 13961 c6c1 F30F6F85 		movdqu	-3536(%rbp), %xmm0
+ 13961      30F2FFFF 
+ 13962 c6c9 F30F7F85 		movdqu	%xmm0, -3344(%rbp)
+ 13962      F0F2FFFF 
+ 13963 c6d1 F30F6F85 		movdqu	-3568(%rbp), %xmm0
+ 13963      10F2FFFF 
+ 13964 c6d9 F30F7F85 		movdqu	%xmm0, -3360(%rbp)
+ 13964      E0F2FFFF 
+ 13965              	.LBB3596:
+ 13966              	.LBB3597:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 13967              		.loc 2 234 0
+ 13968 c6e1 F30F6F85 		movdqu	-3360(%rbp), %xmm0
+ 13968      E0F2FFFF 
+ 13969 c6e9 F30F6F8D 		movdqu	-3344(%rbp), %xmm1
+ 13969      F0F2FFFF 
+ 13970 c6f1 660FEBC1 		por	%xmm1, %xmm0
+ 13971              	.LBE3597:
+ 13972              	.LBE3596:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 13973              		.loc 2 870 0
+ 13974 c6f5 F30F7F85 		movdqu	%xmm0, -3568(%rbp)
+ 13974      10F2FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 13975              		.loc 2 872 0
+ 13976 c6fd 8B85FCF1 		mov	-3588(%rbp), %eax
+ 13976      FFFF
+ 13977 c703 48C1E004 		salq	$4, %rax
+ 13978 c707 480385D8 		addq	-3624(%rbp), %rax
+ 13978      F1FFFF
+ 13979 c70e 660F6F00 		movdqa	(%rax), %xmm0
+ 13980 c712 F30F7F85 		movdqu	%xmm0, -3312(%rbp)
+ 13980      10F3FFFF 
+ 13981 c71a F30F6F85 		movdqu	-3568(%rbp), %xmm0
+ 13981      10F2FFFF 
+ 13982 c722 F30F7F85 		movdqu	%xmm0, -3328(%rbp)
+ 13982      00F3FFFF 
+ 13983 c72a F30F6F85 		movdqu	-3312(%rbp), %xmm0
+ 13983      10F3FFFF 
+ 13984 c732 F30F7F85 		movdqu	%xmm0, -3280(%rbp)
+ 13984      30F3FFFF 
+ 13985 c73a F30F6F85 		movdqu	-3328(%rbp), %xmm0
+ 13985      00F3FFFF 
+ 13986 c742 F30F7F85 		movdqu	%xmm0, -3296(%rbp)
+ 13986      20F3FFFF 
+ 13987              	.LBB3598:
+ 13988              	.LBB3599:
+ 13989              	.LBB3600:
+ 13990              	.LBB3601:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 13991              		.loc 3 529 0
+ 13992 c74a F30F6F8D 		movdqu	-3296(%rbp), %xmm1
+ 13992      20F3FFFF 
+ 13993 c752 F30F6F85 		movdqu	-3280(%rbp), %xmm0
+ 13993      30F3FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 430
+
+
+ 13994 c75a 660F3800 		pshufb	%xmm1, %xmm0
+ 13994      C1
+ 13995              	.LBE3601:
+ 13996              	.LBE3600:
+ 13997              	.LBE3599:
+ 13998              	.LBE3598:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 13999              		.loc 2 872 0
+ 14000 c75f F30F7F85 		movdqu	%xmm0, -3568(%rbp)
+ 14000      10F2FFFF 
+ 14001 c767 F30F6F85 		movdqu	-3584(%rbp), %xmm0
+ 14001      00F2FFFF 
+ 14002 c76f F30F7F85 		movdqu	%xmm0, -3248(%rbp)
+ 14002      50F3FFFF 
+ 14003 c777 F30F6F85 		movdqu	-3568(%rbp), %xmm0
+ 14003      10F2FFFF 
+ 14004 c77f F30F7F85 		movdqu	%xmm0, -3264(%rbp)
+ 14004      40F3FFFF 
+ 14005              	.LBB3602:
+ 14006              	.LBB3603:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 14007              		.loc 2 234 0
+ 14008 c787 F30F6F85 		movdqu	-3264(%rbp), %xmm0
+ 14008      40F3FFFF 
+ 14009 c78f F30F6F8D 		movdqu	-3248(%rbp), %xmm1
+ 14009      50F3FFFF 
+ 14010 c797 660FEBC1 		por	%xmm1, %xmm0
+ 14011              	.LBE3603:
+ 14012              	.LBE3602:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 14013              		.loc 2 874 0
+ 14014 c79b F30F7F85 		movdqu	%xmm0, -3584(%rbp)
+ 14014      00F2FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 14015              		.loc 2 876 0
+ 14016 c7a3 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 14016      00000000 
+ 14017 c7ab F30F6F8D 		movdqu	-3552(%rbp), %xmm1
+ 14017      20F2FFFF 
+ 14018 c7b3 F30F7F8D 		movdqu	%xmm1, -3216(%rbp)
+ 14018      70F3FFFF 
+ 14019 c7bb F30F7F85 		movdqu	%xmm0, -3232(%rbp)
+ 14019      60F3FFFF 
+ 14020              	.LBB3604:
+ 14021              	.LBB3605:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 14022              		.loc 2 290 0
+ 14023 c7c3 F30F6F8D 		movdqu	-3232(%rbp), %xmm1
+ 14023      60F3FFFF 
+ 14024 c7cb F30F6F85 		movdqu	-3216(%rbp), %xmm0
+ 14024      70F3FFFF 
+ 14025 c7d3 660FF8C1 		psubb	%xmm1, %xmm0
+ 14026              	.LBE3605:
+ 14027              	.LBE3604:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 14028              		.loc 2 876 0
+ 14029 c7d7 F30F7F85 		movdqu	%xmm0, -3552(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 431
+
+
+ 14029      20F2FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 14030              		.loc 2 878 0
+ 14031 c7df 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 14031      00000000 
+ 14032 c7e7 F30F6F8D 		movdqu	-3552(%rbp), %xmm1
+ 14032      20F2FFFF 
+ 14033 c7ef F30F7F8D 		movdqu	%xmm1, -3184(%rbp)
+ 14033      90F3FFFF 
+ 14034 c7f7 F30F7F85 		movdqu	%xmm0, -3200(%rbp)
+ 14034      80F3FFFF 
+ 14035              	.LBB3606:
+ 14036              	.LBB3607:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 14037              		.loc 2 206 0
+ 14038 c7ff F30F6F85 		movdqu	-3200(%rbp), %xmm0
+ 14038      80F3FFFF 
+ 14039 c807 F30F6F8D 		movdqu	-3184(%rbp), %xmm1
+ 14039      90F3FFFF 
+ 14040 c80f 660FDBC1 		pand	%xmm1, %xmm0
+ 14041              	.LBE3607:
+ 14042              	.LBE3606:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 14043              		.loc 2 878 0
+ 14044 c813 F30F7F85 		movdqu	%xmm0, -3552(%rbp)
+ 14044      20F2FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 14045              		.loc 2 866 0
+ 14046 c81b 8385FCF1 		addl	$1, -3588(%rbp)
+ 14046      FFFF01
+ 14047              	.L204:
+ 14048 c822 83BDFCF1 		cmpl	$15, -3588(%rbp)
+ 14048      FFFF0F
+ 14049 c829 0F8635FE 		jbe	.L205
+ 14049      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 14050              		.loc 2 882 0
+ 14051 c82f F30F6F85 		movdqu	-3584(%rbp), %xmm0
+ 14051      00F2FFFF 
+ 14052              	.LBE3585:
+ 14053              	.LBE3584:
+ 14054              	.LBE3583:
+ 14055              	.LBE3582:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 14056              		.loc 2 1682 0
+ 14057 c837 660F7F85 		movdqa	%xmm0, -10016(%rbp)
+ 14057      E0D8FFFF 
+ 14058              	.LBB3608:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 14059              		.loc 2 1683 0
+ 14060 c83f 660F6F85 		movdqa	-10016(%rbp), %xmm0
+ 14060      E0D8FFFF 
+ 14061 c847 F30F7F85 		movdqu	%xmm0, -9392(%rbp)
+ 14061      50DBFFFF 
+ 14062 c84f E8000000 		call	KDbgWriterGet at PLT
+ 14062      00
+ 14063 c854 4885C0   		testq	%rax, %rax
+
GAS LISTING /tmp/ccjbMjHD.s 			page 432
+
+
+ 14064 c857 7479     		je	.L207
+ 14065 c859 BF010000 		movl	$1, %edi
+ 14065      00
+ 14066 c85e E8000000 		call	KDbgCondToFlag at PLT
+ 14066      00
+ 14067 c863 4889C6   		movq	%rax, %rsi
+ 14068 c866 BF100000 		movl	$16, %edi
+ 14068      00
+ 14069 c86b E8000000 		call	KDbgTestModConds at PLT
+ 14069      00
+ 14070 c870 84C0     		testb	%al, %al
+ 14071 c872 745E     		je	.L207
+ 14072 c874 8B855CDB 		movl	-9380(%rbp), %eax
+ 14072      FFFF
+ 14073 c87a 89C7     		movl	%eax, %edi
+ 14074 c87c E87F37FF 		call	bswap_32
+ 14074      FF
+ 14075 c881 4189C5   		movl	%eax, %r13d
+ 14076 c884 8B8558DB 		movl	-9384(%rbp), %eax
+ 14076      FFFF
+ 14077 c88a 89C7     		movl	%eax, %edi
+ 14078 c88c E86F37FF 		call	bswap_32
+ 14078      FF
+ 14079 c891 4189C4   		movl	%eax, %r12d
+ 14080 c894 8B8554DB 		movl	-9388(%rbp), %eax
+ 14080      FFFF
+ 14081 c89a 89C7     		movl	%eax, %edi
+ 14082 c89c E85F37FF 		call	bswap_32
+ 14082      FF
+ 14083 c8a1 89C3     		movl	%eax, %ebx
+ 14084 c8a3 8B8550DB 		movl	-9392(%rbp), %eax
+ 14084      FFFF
+ 14085 c8a9 89C7     		movl	%eax, %edi
+ 14086 c8ab E85037FF 		call	bswap_32
+ 14086      FF
+ 14087 c8b0 4589E9   		movl	%r13d, %r9d
+ 14088 c8b3 4589E0   		movl	%r12d, %r8d
+ 14089 c8b6 89D9     		movl	%ebx, %ecx
+ 14090 c8b8 89C2     		movl	%eax, %edx
+ 14091 c8ba 488D3500 		leaq	.LC0(%rip), %rsi
+ 14091      000000
+ 14092 c8c1 488D3D00 		leaq	.LC1(%rip), %rdi
+ 14092      000000
+ 14093 c8c8 B8000000 		movl	$0, %eax
+ 14093      00
+ 14094 c8cd E8000000 		call	KDbgMsg at PLT
+ 14094      00
+ 14095              	.L207:
+ 14096 c8d2 660F6F85 		movdqa	-10016(%rbp), %xmm0
+ 14096      E0D8FFFF 
+ 14097 c8da F30F7F85 		movdqu	%xmm0, -3168(%rbp)
+ 14097      A0F3FFFF 
+ 14098              	.LBE3608:
+ 14099              	.LBB3609:
+ 14100              	.LBB3610:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 14101              		.loc 2 667 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 433
+
+
+ 14102 c8e2 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 14102      00000000 
+ 14103 c8ea F30F6F8D 		movdqu	-3168(%rbp), %xmm1
+ 14103      A0F3FFFF 
+ 14104 c8f2 F30F7F8D 		movdqu	%xmm1, -3136(%rbp)
+ 14104      C0F3FFFF 
+ 14105 c8fa F30F7F85 		movdqu	%xmm0, -3152(%rbp)
+ 14105      B0F3FFFF 
+ 14106 c902 F30F6F85 		movdqu	-3136(%rbp), %xmm0
+ 14106      C0F3FFFF 
+ 14107 c90a F30F7F85 		movdqu	%xmm0, -3104(%rbp)
+ 14107      E0F3FFFF 
+ 14108 c912 F30F6F85 		movdqu	-3152(%rbp), %xmm0
+ 14108      B0F3FFFF 
+ 14109 c91a F30F7F85 		movdqu	%xmm0, -3120(%rbp)
+ 14109      D0F3FFFF 
+ 14110              	.LBB3611:
+ 14111              	.LBB3612:
+ 14112              	.LBB3613:
+ 14113              	.LBB3614:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 14114              		.loc 3 529 0
+ 14115 c922 F30F6F8D 		movdqu	-3120(%rbp), %xmm1
+ 14115      D0F3FFFF 
+ 14116 c92a F30F6F85 		movdqu	-3104(%rbp), %xmm0
+ 14116      E0F3FFFF 
+ 14117 c932 660F3800 		pshufb	%xmm1, %xmm0
+ 14117      C1
+ 14118              	.LBE3614:
+ 14119              	.LBE3613:
+ 14120              	.LBE3612:
+ 14121              	.LBE3611:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 14122              		.loc 2 667 0
+ 14123 c937 F30F7F85 		movdqu	%xmm0, -3168(%rbp)
+ 14123      A0F3FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 14124              		.loc 2 668 0
+ 14125 c93f F30F6F85 		movdqu	-3168(%rbp), %xmm0
+ 14125      A0F3FFFF 
+ 14126              	.LBE3610:
+ 14127              	.LBE3609:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 14128              		.loc 2 1684 0
+ 14129 c947 660F7F85 		movdqa	%xmm0, -10016(%rbp)
+ 14129      E0D8FFFF 
+ 14130              	.LBB3615:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 14131              		.loc 2 1685 0
+ 14132 c94f 660F6F85 		movdqa	-10016(%rbp), %xmm0
+ 14132      E0D8FFFF 
+ 14133 c957 F30F7F85 		movdqu	%xmm0, -9408(%rbp)
+ 14133      40DBFFFF 
+ 14134 c95f E8000000 		call	KDbgWriterGet at PLT
+ 14134      00
+ 14135 c964 4885C0   		testq	%rax, %rax
+ 14136 c967 7479     		je	.L209
+
GAS LISTING /tmp/ccjbMjHD.s 			page 434
+
+
+ 14137 c969 BF010000 		movl	$1, %edi
+ 14137      00
+ 14138 c96e E8000000 		call	KDbgCondToFlag at PLT
+ 14138      00
+ 14139 c973 4889C6   		movq	%rax, %rsi
+ 14140 c976 BF100000 		movl	$16, %edi
+ 14140      00
+ 14141 c97b E8000000 		call	KDbgTestModConds at PLT
+ 14141      00
+ 14142 c980 84C0     		testb	%al, %al
+ 14143 c982 745E     		je	.L209
+ 14144 c984 8B854CDB 		movl	-9396(%rbp), %eax
+ 14144      FFFF
+ 14145 c98a 89C7     		movl	%eax, %edi
+ 14146 c98c E86F36FF 		call	bswap_32
+ 14146      FF
+ 14147 c991 4189C5   		movl	%eax, %r13d
+ 14148 c994 8B8548DB 		movl	-9400(%rbp), %eax
+ 14148      FFFF
+ 14149 c99a 89C7     		movl	%eax, %edi
+ 14150 c99c E85F36FF 		call	bswap_32
+ 14150      FF
+ 14151 c9a1 4189C4   		movl	%eax, %r12d
+ 14152 c9a4 8B8544DB 		movl	-9404(%rbp), %eax
+ 14152      FFFF
+ 14153 c9aa 89C7     		movl	%eax, %edi
+ 14154 c9ac E84F36FF 		call	bswap_32
+ 14154      FF
+ 14155 c9b1 89C3     		movl	%eax, %ebx
+ 14156 c9b3 8B8540DB 		movl	-9408(%rbp), %eax
+ 14156      FFFF
+ 14157 c9b9 89C7     		movl	%eax, %edi
+ 14158 c9bb E84036FF 		call	bswap_32
+ 14158      FF
+ 14159 c9c0 4589E9   		movl	%r13d, %r9d
+ 14160 c9c3 4589E0   		movl	%r12d, %r8d
+ 14161 c9c6 89D9     		movl	%ebx, %ecx
+ 14162 c9c8 89C2     		movl	%eax, %edx
+ 14163 c9ca 488D3500 		leaq	.LC2(%rip), %rsi
+ 14163      000000
+ 14164 c9d1 488D3D00 		leaq	.LC1(%rip), %rdi
+ 14164      000000
+ 14165 c9d8 B8000000 		movl	$0, %eax
+ 14165      00
+ 14166 c9dd E8000000 		call	KDbgMsg at PLT
+ 14166      00
+ 14167              	.L209:
+ 14168 c9e2 660F6F85 		movdqa	-10016(%rbp), %xmm0
+ 14168      E0D8FFFF 
+ 14169 c9ea F30F7F85 		movdqu	%xmm0, -3072(%rbp)
+ 14169      00F4FFFF 
+ 14170 c9f2 660F6F85 		movdqa	-10000(%rbp), %xmm0
+ 14170      F0D8FFFF 
+ 14171 c9fa F30F7F85 		movdqu	%xmm0, -3088(%rbp)
+ 14171      F0F3FFFF 
+ 14172              	.LBE3615:
+ 14173              	.LBB3616:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 435
+
+
+ 14174              	.LBB3617:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 14175              		.loc 2 178 0
+ 14176 ca02 F30F6F85 		movdqu	-3088(%rbp), %xmm0
+ 14176      F0F3FFFF 
+ 14177 ca0a F30F6F8D 		movdqu	-3072(%rbp), %xmm1
+ 14177      00F4FFFF 
+ 14178 ca12 660FEFC1 		pxor	%xmm1, %xmm0
+ 14179              	.LBE3617:
+ 14180              	.LBE3616:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 14181              		.loc 2 1686 0
+ 14182 ca16 660F7F85 		movdqa	%xmm0, -10016(%rbp)
+ 14182      E0D8FFFF 
+ 14183              	.LBB3618:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 14184              		.loc 2 1687 0
+ 14185 ca1e 660F6F85 		movdqa	-10016(%rbp), %xmm0
+ 14185      E0D8FFFF 
+ 14186 ca26 F30F7F85 		movdqu	%xmm0, -9424(%rbp)
+ 14186      30DBFFFF 
+ 14187 ca2e E8000000 		call	KDbgWriterGet at PLT
+ 14187      00
+ 14188 ca33 4885C0   		testq	%rax, %rax
+ 14189 ca36 7479     		je	.L211
+ 14190 ca38 BF010000 		movl	$1, %edi
+ 14190      00
+ 14191 ca3d E8000000 		call	KDbgCondToFlag at PLT
+ 14191      00
+ 14192 ca42 4889C6   		movq	%rax, %rsi
+ 14193 ca45 BF100000 		movl	$16, %edi
+ 14193      00
+ 14194 ca4a E8000000 		call	KDbgTestModConds at PLT
+ 14194      00
+ 14195 ca4f 84C0     		testb	%al, %al
+ 14196 ca51 745E     		je	.L211
+ 14197 ca53 8B853CDB 		movl	-9412(%rbp), %eax
+ 14197      FFFF
+ 14198 ca59 89C7     		movl	%eax, %edi
+ 14199 ca5b E8A035FF 		call	bswap_32
+ 14199      FF
+ 14200 ca60 4189C5   		movl	%eax, %r13d
+ 14201 ca63 8B8538DB 		movl	-9416(%rbp), %eax
+ 14201      FFFF
+ 14202 ca69 89C7     		movl	%eax, %edi
+ 14203 ca6b E89035FF 		call	bswap_32
+ 14203      FF
+ 14204 ca70 4189C4   		movl	%eax, %r12d
+ 14205 ca73 8B8534DB 		movl	-9420(%rbp), %eax
+ 14205      FFFF
+ 14206 ca79 89C7     		movl	%eax, %edi
+ 14207 ca7b E88035FF 		call	bswap_32
+ 14207      FF
+ 14208 ca80 89C3     		movl	%eax, %ebx
+ 14209 ca82 8B8530DB 		movl	-9424(%rbp), %eax
+ 14209      FFFF
+ 14210 ca88 89C7     		movl	%eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 436
+
+
+ 14211 ca8a E87135FF 		call	bswap_32
+ 14211      FF
+ 14212 ca8f 4589E9   		movl	%r13d, %r9d
+ 14213 ca92 4589E0   		movl	%r12d, %r8d
+ 14214 ca95 89D9     		movl	%ebx, %ecx
+ 14215 ca97 89C2     		movl	%eax, %edx
+ 14216 ca99 488D3500 		leaq	.LC3(%rip), %rsi
+ 14216      000000
+ 14217 caa0 488D3D00 		leaq	.LC1(%rip), %rdi
+ 14217      000000
+ 14218 caa7 B8000000 		movl	$0, %eax
+ 14218      00
+ 14219 caac E8000000 		call	KDbgMsg at PLT
+ 14219      00
+ 14220              	.L211:
+ 14221 cab1 660F6F85 		movdqa	-10016(%rbp), %xmm0
+ 14221      E0D8FFFF 
+ 14222 cab9 F30F7F85 		movdqu	%xmm0, -3056(%rbp)
+ 14222      10F4FFFF 
+ 14223 cac1 F30F6F85 		movdqu	-3056(%rbp), %xmm0
+ 14223      10F4FFFF 
+ 14224 cac9 F30F7F85 		movdqu	%xmm0, -3024(%rbp)
+ 14224      30F4FFFF 
+ 14225              	.LBE3618:
+ 14226              	.LBB3619:
+ 14227              	.LBB3620:
+ 14228              	.LBB3621:
+ 14229              	.LBB3622:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 14230              		.loc 3 450 0
+ 14231 cad1 F30F6F85 		movdqu	-3024(%rbp), %xmm0
+ 14231      30F4FFFF 
+ 14232 cad9 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 14232      FF
+ 14233              	.LBE3622:
+ 14234              	.LBE3621:
+ 14235              	.LBE3620:
+ 14236              	.LBE3619:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 14237              		.loc 2 1688 0
+ 14238 cade 660F7F85 		movdqa	%xmm0, -10016(%rbp)
+ 14238      E0D8FFFF 
+ 14239              	.LBB3623:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 14240              		.loc 2 1689 0
+ 14241 cae6 660F6F85 		movdqa	-10016(%rbp), %xmm0
+ 14241      E0D8FFFF 
+ 14242 caee F30F7F85 		movdqu	%xmm0, -9440(%rbp)
+ 14242      20DBFFFF 
+ 14243 caf6 E8000000 		call	KDbgWriterGet at PLT
+ 14243      00
+ 14244 cafb 4885C0   		testq	%rax, %rax
+ 14245 cafe 7479     		je	.L213
+ 14246 cb00 BF010000 		movl	$1, %edi
+ 14246      00
+ 14247 cb05 E8000000 		call	KDbgCondToFlag at PLT
+ 14247      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 437
+
+
+ 14248 cb0a 4889C6   		movq	%rax, %rsi
+ 14249 cb0d BF100000 		movl	$16, %edi
+ 14249      00
+ 14250 cb12 E8000000 		call	KDbgTestModConds at PLT
+ 14250      00
+ 14251 cb17 84C0     		testb	%al, %al
+ 14252 cb19 745E     		je	.L213
+ 14253 cb1b 8B852CDB 		movl	-9428(%rbp), %eax
+ 14253      FFFF
+ 14254 cb21 89C7     		movl	%eax, %edi
+ 14255 cb23 E8D834FF 		call	bswap_32
+ 14255      FF
+ 14256 cb28 4189C5   		movl	%eax, %r13d
+ 14257 cb2b 8B8528DB 		movl	-9432(%rbp), %eax
+ 14257      FFFF
+ 14258 cb31 89C7     		movl	%eax, %edi
+ 14259 cb33 E8C834FF 		call	bswap_32
+ 14259      FF
+ 14260 cb38 4189C4   		movl	%eax, %r12d
+ 14261 cb3b 8B8524DB 		movl	-9436(%rbp), %eax
+ 14261      FFFF
+ 14262 cb41 89C7     		movl	%eax, %edi
+ 14263 cb43 E8B834FF 		call	bswap_32
+ 14263      FF
+ 14264 cb48 89C3     		movl	%eax, %ebx
+ 14265 cb4a 8B8520DB 		movl	-9440(%rbp), %eax
+ 14265      FFFF
+ 14266 cb50 89C7     		movl	%eax, %edi
+ 14267 cb52 E8A934FF 		call	bswap_32
+ 14267      FF
+ 14268 cb57 4589E9   		movl	%r13d, %r9d
+ 14269 cb5a 4589E0   		movl	%r12d, %r8d
+ 14270 cb5d 89D9     		movl	%ebx, %ecx
+ 14271 cb5f 89C2     		movl	%eax, %edx
+ 14272 cb61 488D3500 		leaq	.LC4(%rip), %rsi
+ 14272      000000
+ 14273 cb68 488D3D00 		leaq	.LC1(%rip), %rdi
+ 14273      000000
+ 14274 cb6f B8000000 		movl	$0, %eax
+ 14274      00
+ 14275 cb74 E8000000 		call	KDbgMsg at PLT
+ 14275      00
+ 14276              	.L213:
+ 14277              	.LBE3623:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 14278              		.loc 2 1690 0
+ 14279 cb79 660F6F85 		movdqa	-10016(%rbp), %xmm0
+ 14279      E0D8FFFF 
+ 14280              	.LBE3577:
+ 14281              	.LBE3576:
+1934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(10,0x10);   /* k40 : k41 : k42 : k43 */
+ 14282              		.loc 2 1934 0
+ 14283 cb81 F30F7F85 		movdqu	%xmm0, -9152(%rbp)
+ 14283      40DCFFFF 
+ 14284 cb89 F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 14284      20DCFFFF 
+ 14285 cb91 F30F7F85 		movdqu	%xmm0, -3008(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 438
+
+
+ 14285      40F4FFFF 
+ 14286              	.LBB3624:
+ 14287              	.LBB3625:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 14288              		.loc 2 1565 0
+ 14289 cb99 F30F6F85 		movdqu	-3008(%rbp), %xmm0
+ 14289      40F4FFFF 
+ 14290 cba1 660F7F85 		movdqa	%xmm0, -9984(%rbp)
+ 14290      00D9FFFF 
+ 14291 cba9 660F6F85 		movdqa	-9984(%rbp), %xmm0
+ 14291      00D9FFFF 
+ 14292 cbb1 F30F7F85 		movdqu	%xmm0, -2992(%rbp)
+ 14292      50F4FFFF 
+ 14293              	.LBB3626:
+ 14294              	.LBB3627:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 14295              		.loc 2 1278 0
+ 14296 cbb9 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 14296      00000000 
+ 14297 cbc1 F30F6F8D 		movdqu	-2992(%rbp), %xmm1
+ 14297      50F4FFFF 
+ 14298 cbc9 F30F7F8D 		movdqu	%xmm1, -2960(%rbp)
+ 14298      70F4FFFF 
+ 14299 cbd1 F30F7F85 		movdqu	%xmm0, -2976(%rbp)
+ 14299      60F4FFFF 
+ 14300 cbd9 F30F6F85 		movdqu	-2960(%rbp), %xmm0
+ 14300      70F4FFFF 
+ 14301 cbe1 F30F7F85 		movdqu	%xmm0, -2928(%rbp)
+ 14301      90F4FFFF 
+ 14302 cbe9 F30F6F85 		movdqu	-2976(%rbp), %xmm0
+ 14302      60F4FFFF 
+ 14303 cbf1 F30F7F85 		movdqu	%xmm0, -2944(%rbp)
+ 14303      80F4FFFF 
+ 14304              	.LBB3628:
+ 14305              	.LBB3629:
+ 14306              	.LBB3630:
+ 14307              	.LBB3631:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 14308              		.loc 3 529 0
+ 14309 cbf9 F30F6F8D 		movdqu	-2944(%rbp), %xmm1
+ 14309      80F4FFFF 
+ 14310 cc01 F30F6F85 		movdqu	-2928(%rbp), %xmm0
+ 14310      90F4FFFF 
+ 14311 cc09 660F3800 		pshufb	%xmm1, %xmm0
+ 14311      C1
+ 14312              	.LBE3631:
+ 14313              	.LBE3630:
+ 14314              	.LBE3629:
+ 14315              	.LBE3628:
+ 14316              	.LBE3627:
+ 14317              	.LBE3626:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14318              		.loc 2 1567 0
+ 14319 cc0e 660F7F85 		movdqa	%xmm0, -9984(%rbp)
+ 14319      00D9FFFF 
+ 14320 cc16 660F6F85 		movdqa	-9984(%rbp), %xmm0
+ 14320      00D9FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 439
+
+
+ 14321 cc1e 660FEF85 		pxor	-3008(%rbp), %xmm0
+ 14321      40F4FFFF 
+ 14322 cc26 F30F7F85 		movdqu	%xmm0, -3008(%rbp)
+ 14322      40F4FFFF 
+ 14323 cc2e 660F6F85 		movdqa	-9984(%rbp), %xmm0
+ 14323      00D9FFFF 
+ 14324 cc36 F30F7F85 		movdqu	%xmm0, -2912(%rbp)
+ 14324      A0F4FFFF 
+ 14325              	.LBB3632:
+ 14326              	.LBB3633:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 14327              		.loc 2 1278 0
+ 14328 cc3e 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 14328      00000000 
+ 14329 cc46 F30F6F8D 		movdqu	-2912(%rbp), %xmm1
+ 14329      A0F4FFFF 
+ 14330 cc4e F30F7F8D 		movdqu	%xmm1, -2880(%rbp)
+ 14330      C0F4FFFF 
+ 14331 cc56 F30F7F85 		movdqu	%xmm0, -2896(%rbp)
+ 14331      B0F4FFFF 
+ 14332 cc5e F30F6F85 		movdqu	-2880(%rbp), %xmm0
+ 14332      C0F4FFFF 
+ 14333 cc66 F30F7F85 		movdqu	%xmm0, -2848(%rbp)
+ 14333      E0F4FFFF 
+ 14334 cc6e F30F6F85 		movdqu	-2896(%rbp), %xmm0
+ 14334      B0F4FFFF 
+ 14335 cc76 F30F7F85 		movdqu	%xmm0, -2864(%rbp)
+ 14335      D0F4FFFF 
+ 14336              	.LBB3634:
+ 14337              	.LBB3635:
+ 14338              	.LBB3636:
+ 14339              	.LBB3637:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 14340              		.loc 3 529 0
+ 14341 cc7e F30F6F8D 		movdqu	-2864(%rbp), %xmm1
+ 14341      D0F4FFFF 
+ 14342 cc86 F30F6F85 		movdqu	-2848(%rbp), %xmm0
+ 14342      E0F4FFFF 
+ 14343 cc8e 660F3800 		pshufb	%xmm1, %xmm0
+ 14343      C1
+ 14344              	.LBE3637:
+ 14345              	.LBE3636:
+ 14346              	.LBE3635:
+ 14347              	.LBE3634:
+ 14348              	.LBE3633:
+ 14349              	.LBE3632:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14350              		.loc 2 1568 0
+ 14351 cc93 660F7F85 		movdqa	%xmm0, -9984(%rbp)
+ 14351      00D9FFFF 
+ 14352 cc9b 660F6F85 		movdqa	-9984(%rbp), %xmm0
+ 14352      00D9FFFF 
+ 14353 cca3 660FEF85 		pxor	-3008(%rbp), %xmm0
+ 14353      40F4FFFF 
+ 14354 ccab F30F7F85 		movdqu	%xmm0, -3008(%rbp)
+ 14354      40F4FFFF 
+ 14355 ccb3 660F6F85 		movdqa	-9984(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 440
+
+
+ 14355      00D9FFFF 
+ 14356 ccbb F30F7F85 		movdqu	%xmm0, -2832(%rbp)
+ 14356      F0F4FFFF 
+ 14357              	.LBB3638:
+ 14358              	.LBB3639:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 14359              		.loc 2 1278 0
+ 14360 ccc3 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 14360      00000000 
+ 14361 cccb F30F6F8D 		movdqu	-2832(%rbp), %xmm1
+ 14361      F0F4FFFF 
+ 14362 ccd3 F30F7F8D 		movdqu	%xmm1, -2800(%rbp)
+ 14362      10F5FFFF 
+ 14363 ccdb F30F7F85 		movdqu	%xmm0, -2816(%rbp)
+ 14363      00F5FFFF 
+ 14364 cce3 F30F6F85 		movdqu	-2800(%rbp), %xmm0
+ 14364      10F5FFFF 
+ 14365 cceb F30F7F85 		movdqu	%xmm0, -2768(%rbp)
+ 14365      30F5FFFF 
+ 14366 ccf3 F30F6F85 		movdqu	-2816(%rbp), %xmm0
+ 14366      00F5FFFF 
+ 14367 ccfb F30F7F85 		movdqu	%xmm0, -2784(%rbp)
+ 14367      20F5FFFF 
+ 14368              	.LBB3640:
+ 14369              	.LBB3641:
+ 14370              	.LBB3642:
+ 14371              	.LBB3643:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 14372              		.loc 3 529 0
+ 14373 cd03 F30F6F8D 		movdqu	-2784(%rbp), %xmm1
+ 14373      20F5FFFF 
+ 14374 cd0b F30F6F85 		movdqu	-2768(%rbp), %xmm0
+ 14374      30F5FFFF 
+ 14375 cd13 660F3800 		pshufb	%xmm1, %xmm0
+ 14375      C1
+ 14376              	.LBE3643:
+ 14377              	.LBE3642:
+ 14378              	.LBE3641:
+ 14379              	.LBE3640:
+ 14380              	.LBE3639:
+ 14381              	.LBE3638:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14382              		.loc 2 1569 0
+ 14383 cd18 660F7F85 		movdqa	%xmm0, -9984(%rbp)
+ 14383      00D9FFFF 
+ 14384 cd20 660F6F85 		movdqa	-9984(%rbp), %xmm0
+ 14384      00D9FFFF 
+ 14385 cd28 660FEF85 		pxor	-3008(%rbp), %xmm0
+ 14385      40F4FFFF 
+ 14386 cd30 F30F7F85 		movdqu	%xmm0, -3008(%rbp)
+ 14386      40F4FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 14387              		.loc 2 1571 0
+ 14388 cd38 F30F6F85 		movdqu	-3008(%rbp), %xmm0
+ 14388      40F4FFFF 
+ 14389              	.LBE3625:
+ 14390              	.LBE3624:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 441
+
+
+ 14391              		.loc 2 1934 0
+ 14392 cd40 F30F7F85 		movdqu	%xmm0, -9184(%rbp)
+ 14392      20DCFFFF 
+ 14393 cd48 F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 14393      20DCFFFF 
+ 14394 cd50 F30F7F85 		movdqu	%xmm0, -2736(%rbp)
+ 14394      50F5FFFF 
+ 14395 cd58 F30F6F85 		movdqu	-9152(%rbp), %xmm0
+ 14395      40DCFFFF 
+ 14396 cd60 F30F7F85 		movdqu	%xmm0, -2752(%rbp)
+ 14396      40F5FFFF 
+ 14397              	.LBB3644:
+ 14398              	.LBB3645:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 14399              		.loc 2 178 0
+ 14400 cd68 F30F6F85 		movdqu	-2752(%rbp), %xmm0
+ 14400      40F5FFFF 
+ 14401 cd70 F30F6F8D 		movdqu	-2736(%rbp), %xmm1
+ 14401      50F5FFFF 
+ 14402 cd78 660FEFC1 		pxor	%xmm1, %xmm0
+ 14403              	.LBE3645:
+ 14404              	.LBE3644:
+ 14405              		.loc 2 1934 0
+ 14406 cd7c F30F7F85 		movdqu	%xmm0, -9184(%rbp)
+ 14406      20DCFFFF 
+ 14407 cd84 488B8598 		movq	-9832(%rbp), %rax
+ 14407      D9FFFF
+ 14408 cd8b 4805A000 		addq	$160, %rax
+ 14408      0000
+ 14409 cd91 F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 14409      20DCFFFF 
+ 14410 cd99 F30F7F00 		movdqu	%xmm0, (%rax)
+ 14411 cd9d F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 14411      20DCFFFF 
+ 14412 cda5 F30F7F85 		movdqu	%xmm0, -2720(%rbp)
+ 14412      60F5FFFF 
+ 14413              	.LBB3646:
+ 14414              	.LBB3647:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 14415              		.loc 2 1656 0
+ 14416 cdad F30F6F85 		movdqu	-2720(%rbp), %xmm0
+ 14416      60F5FFFF 
+ 14417 cdb5 F30F7F85 		movdqu	%xmm0, -9360(%rbp)
+ 14417      70DBFFFF 
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 14418              		.loc 2 1657 0
+ 14419 cdbd 8B857CDB 		movl	-9348(%rbp), %eax
+ 14419      FFFF
+ 14420 cdc3 898578F5 		movl	%eax, -2696(%rbp)
+ 14420      FFFF
+ 14421              	.LBB3648:
+ 14422              	.LBB3649:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 14423              		.loc 2 740 0
+ 14424 cdc9 8B8578F5 		movl	-2696(%rbp), %eax
+ 14424      FFFF
+ 14425 cdcf 898560DB 		movl	%eax, -9376(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 442
+
+
+ 14425      FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 14426              		.loc 2 741 0
+ 14427 cdd5 C7857CF5 		movl	$0, -2692(%rbp)
+ 14427      FFFF0000 
+ 14427      0000
+ 14428 cddf EB36     		jmp	.L214
+ 14429              	.L215:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 14430              		.loc 2 742 0
+ 14431 cde1 8B8D7CF5 		movl	-2692(%rbp), %ecx
+ 14431      FFFF
+ 14432 cde7 8B857CF5 		movl	-2692(%rbp), %eax
+ 14432      FFFF
+ 14433 cded 89C0     		mov	%eax, %eax
+ 14434 cdef 0FB68405 		movzbl	-9376(%rbp,%rax), %eax
+ 14434      60DBFFFF 
+ 14435 cdf7 0FB6C0   		movzbl	%al, %eax
+ 14436 cdfa 89C2     		mov	%eax, %edx
+ 14437 cdfc 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBox(%rip), %rax
+ 14437      000000
+ 14438 ce03 0FB61402 		movzbl	(%rdx,%rax), %edx
+ 14439 ce07 89C8     		mov	%ecx, %eax
+ 14440 ce09 88940560 		movb	%dl, -9376(%rbp,%rax)
+ 14440      DBFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 14441              		.loc 2 741 0
+ 14442 ce10 83857CF5 		addl	$1, -2692(%rbp)
+ 14442      FFFF01
+ 14443              	.L214:
+ 14444 ce17 83BD7CF5 		cmpl	$3, -2692(%rbp)
+ 14444      FFFF03
+ 14445 ce1e 76C1     		jbe	.L215
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 14446              		.loc 2 743 0
+ 14447 ce20 8B8560DB 		movl	-9376(%rbp), %eax
+ 14447      FFFF
+ 14448              	.LBE3649:
+ 14449              	.LBE3648:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 14450              		.loc 2 1657 0
+ 14451 ce26 898574F5 		movl	%eax, -2700(%rbp)
+ 14451      FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 14452              		.loc 2 1659 0
+ 14453 ce2c 8B8574F5 		movl	-2700(%rbp), %eax
+ 14453      FFFF
+ 14454 ce32 89857CDB 		movl	%eax, -9348(%rbp)
+ 14454      FFFF
+ 14455 ce38 8B857CDB 		movl	-9348(%rbp), %eax
+ 14455      FFFF
+ 14456 ce3e 898578DB 		movl	%eax, -9352(%rbp)
+ 14456      FFFF
+ 14457 ce44 8B8578DB 		movl	-9352(%rbp), %eax
+ 14457      FFFF
+ 14458 ce4a 898574DB 		movl	%eax, -9356(%rbp)
+ 14458      FFFF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 443
+
+
+ 14459 ce50 8B8574DB 		movl	-9356(%rbp), %eax
+ 14459      FFFF
+ 14460 ce56 898570DB 		movl	%eax, -9360(%rbp)
+ 14460      FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 14461              		.loc 2 1660 0
+ 14462 ce5c F30F6F85 		movdqu	-9360(%rbp), %xmm0
+ 14462      70DBFFFF 
+ 14463              	.LBE3647:
+ 14464              	.LBE3646:
+1935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(11);        /* k44 : k45 : k46 : k47 */
+ 14465              		.loc 2 1935 0
+ 14466 ce64 F30F7F85 		movdqu	%xmm0, -9152(%rbp)
+ 14466      40DCFFFF 
+ 14467 ce6c F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 14467      30DCFFFF 
+ 14468 ce74 F30F7F85 		movdqu	%xmm0, -2688(%rbp)
+ 14468      80F5FFFF 
+ 14469              	.LBB3650:
+ 14470              	.LBB3651:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 14471              		.loc 2 1565 0
+ 14472 ce7c F30F6F85 		movdqu	-2688(%rbp), %xmm0
+ 14472      80F5FFFF 
+ 14473 ce84 660F7F85 		movdqa	%xmm0, -9968(%rbp)
+ 14473      10D9FFFF 
+ 14474 ce8c 660F6F85 		movdqa	-9968(%rbp), %xmm0
+ 14474      10D9FFFF 
+ 14475 ce94 F30F7F85 		movdqu	%xmm0, -2672(%rbp)
+ 14475      90F5FFFF 
+ 14476              	.LBB3652:
+ 14477              	.LBB3653:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 14478              		.loc 2 1278 0
+ 14479 ce9c 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 14479      00000000 
+ 14480 cea4 F30F6F8D 		movdqu	-2672(%rbp), %xmm1
+ 14480      90F5FFFF 
+ 14481 ceac F30F7F8D 		movdqu	%xmm1, -2640(%rbp)
+ 14481      B0F5FFFF 
+ 14482 ceb4 F30F7F85 		movdqu	%xmm0, -2656(%rbp)
+ 14482      A0F5FFFF 
+ 14483 cebc F30F6F85 		movdqu	-2640(%rbp), %xmm0
+ 14483      B0F5FFFF 
+ 14484 cec4 F30F7F85 		movdqu	%xmm0, -2608(%rbp)
+ 14484      D0F5FFFF 
+ 14485 cecc F30F6F85 		movdqu	-2656(%rbp), %xmm0
+ 14485      A0F5FFFF 
+ 14486 ced4 F30F7F85 		movdqu	%xmm0, -2624(%rbp)
+ 14486      C0F5FFFF 
+ 14487              	.LBB3654:
+ 14488              	.LBB3655:
+ 14489              	.LBB3656:
+ 14490              	.LBB3657:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 14491              		.loc 3 529 0
+ 14492 cedc F30F6F8D 		movdqu	-2624(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 444
+
+
+ 14492      C0F5FFFF 
+ 14493 cee4 F30F6F85 		movdqu	-2608(%rbp), %xmm0
+ 14493      D0F5FFFF 
+ 14494 ceec 660F3800 		pshufb	%xmm1, %xmm0
+ 14494      C1
+ 14495              	.LBE3657:
+ 14496              	.LBE3656:
+ 14497              	.LBE3655:
+ 14498              	.LBE3654:
+ 14499              	.LBE3653:
+ 14500              	.LBE3652:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14501              		.loc 2 1567 0
+ 14502 cef1 660F7F85 		movdqa	%xmm0, -9968(%rbp)
+ 14502      10D9FFFF 
+ 14503 cef9 660F6F85 		movdqa	-9968(%rbp), %xmm0
+ 14503      10D9FFFF 
+ 14504 cf01 660FEF85 		pxor	-2688(%rbp), %xmm0
+ 14504      80F5FFFF 
+ 14505 cf09 F30F7F85 		movdqu	%xmm0, -2688(%rbp)
+ 14505      80F5FFFF 
+ 14506 cf11 660F6F85 		movdqa	-9968(%rbp), %xmm0
+ 14506      10D9FFFF 
+ 14507 cf19 F30F7F85 		movdqu	%xmm0, -2592(%rbp)
+ 14507      E0F5FFFF 
+ 14508              	.LBB3658:
+ 14509              	.LBB3659:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 14510              		.loc 2 1278 0
+ 14511 cf21 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 14511      00000000 
+ 14512 cf29 F30F6F8D 		movdqu	-2592(%rbp), %xmm1
+ 14512      E0F5FFFF 
+ 14513 cf31 F30F7F8D 		movdqu	%xmm1, -2560(%rbp)
+ 14513      00F6FFFF 
+ 14514 cf39 F30F7F85 		movdqu	%xmm0, -2576(%rbp)
+ 14514      F0F5FFFF 
+ 14515 cf41 F30F6F85 		movdqu	-2560(%rbp), %xmm0
+ 14515      00F6FFFF 
+ 14516 cf49 F30F7F85 		movdqu	%xmm0, -2528(%rbp)
+ 14516      20F6FFFF 
+ 14517 cf51 F30F6F85 		movdqu	-2576(%rbp), %xmm0
+ 14517      F0F5FFFF 
+ 14518 cf59 F30F7F85 		movdqu	%xmm0, -2544(%rbp)
+ 14518      10F6FFFF 
+ 14519              	.LBB3660:
+ 14520              	.LBB3661:
+ 14521              	.LBB3662:
+ 14522              	.LBB3663:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 14523              		.loc 3 529 0
+ 14524 cf61 F30F6F8D 		movdqu	-2544(%rbp), %xmm1
+ 14524      10F6FFFF 
+ 14525 cf69 F30F6F85 		movdqu	-2528(%rbp), %xmm0
+ 14525      20F6FFFF 
+ 14526 cf71 660F3800 		pshufb	%xmm1, %xmm0
+ 14526      C1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 445
+
+
+ 14527              	.LBE3663:
+ 14528              	.LBE3662:
+ 14529              	.LBE3661:
+ 14530              	.LBE3660:
+ 14531              	.LBE3659:
+ 14532              	.LBE3658:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14533              		.loc 2 1568 0
+ 14534 cf76 660F7F85 		movdqa	%xmm0, -9968(%rbp)
+ 14534      10D9FFFF 
+ 14535 cf7e 660F6F85 		movdqa	-9968(%rbp), %xmm0
+ 14535      10D9FFFF 
+ 14536 cf86 660FEF85 		pxor	-2688(%rbp), %xmm0
+ 14536      80F5FFFF 
+ 14537 cf8e F30F7F85 		movdqu	%xmm0, -2688(%rbp)
+ 14537      80F5FFFF 
+ 14538 cf96 660F6F85 		movdqa	-9968(%rbp), %xmm0
+ 14538      10D9FFFF 
+ 14539 cf9e F30F7F85 		movdqu	%xmm0, -2512(%rbp)
+ 14539      30F6FFFF 
+ 14540              	.LBB3664:
+ 14541              	.LBB3665:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 14542              		.loc 2 1278 0
+ 14543 cfa6 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 14543      00000000 
+ 14544 cfae F30F6F8D 		movdqu	-2512(%rbp), %xmm1
+ 14544      30F6FFFF 
+ 14545 cfb6 F30F7F8D 		movdqu	%xmm1, -2480(%rbp)
+ 14545      50F6FFFF 
+ 14546 cfbe F30F7F85 		movdqu	%xmm0, -2496(%rbp)
+ 14546      40F6FFFF 
+ 14547 cfc6 F30F6F85 		movdqu	-2480(%rbp), %xmm0
+ 14547      50F6FFFF 
+ 14548 cfce F30F7F85 		movdqu	%xmm0, -2448(%rbp)
+ 14548      70F6FFFF 
+ 14549 cfd6 F30F6F85 		movdqu	-2496(%rbp), %xmm0
+ 14549      40F6FFFF 
+ 14550 cfde F30F7F85 		movdqu	%xmm0, -2464(%rbp)
+ 14550      60F6FFFF 
+ 14551              	.LBB3666:
+ 14552              	.LBB3667:
+ 14553              	.LBB3668:
+ 14554              	.LBB3669:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 14555              		.loc 3 529 0
+ 14556 cfe6 F30F6F8D 		movdqu	-2464(%rbp), %xmm1
+ 14556      60F6FFFF 
+ 14557 cfee F30F6F85 		movdqu	-2448(%rbp), %xmm0
+ 14557      70F6FFFF 
+ 14558 cff6 660F3800 		pshufb	%xmm1, %xmm0
+ 14558      C1
+ 14559              	.LBE3669:
+ 14560              	.LBE3668:
+ 14561              	.LBE3667:
+ 14562              	.LBE3666:
+ 14563              	.LBE3665:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 446
+
+
+ 14564              	.LBE3664:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 14565              		.loc 2 1569 0
+ 14566 cffb 660F7F85 		movdqa	%xmm0, -9968(%rbp)
+ 14566      10D9FFFF 
+ 14567 d003 660F6F85 		movdqa	-9968(%rbp), %xmm0
+ 14567      10D9FFFF 
+ 14568 d00b 660FEF85 		pxor	-2688(%rbp), %xmm0
+ 14568      80F5FFFF 
+ 14569 d013 F30F7F85 		movdqu	%xmm0, -2688(%rbp)
+ 14569      80F5FFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 14570              		.loc 2 1571 0
+ 14571 d01b F30F6F85 		movdqu	-2688(%rbp), %xmm0
+ 14571      80F5FFFF 
+ 14572              	.LBE3651:
+ 14573              	.LBE3650:
+ 14574              		.loc 2 1935 0
+ 14575 d023 F30F7F85 		movdqu	%xmm0, -9168(%rbp)
+ 14575      30DCFFFF 
+ 14576 d02b F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 14576      30DCFFFF 
+ 14577 d033 F30F7F85 		movdqu	%xmm0, -2416(%rbp)
+ 14577      90F6FFFF 
+ 14578 d03b F30F6F85 		movdqu	-9152(%rbp), %xmm0
+ 14578      40DCFFFF 
+ 14579 d043 F30F7F85 		movdqu	%xmm0, -2432(%rbp)
+ 14579      80F6FFFF 
+ 14580              	.LBB3670:
+ 14581              	.LBB3671:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 14582              		.loc 2 178 0
+ 14583 d04b F30F6F85 		movdqu	-2432(%rbp), %xmm0
+ 14583      80F6FFFF 
+ 14584 d053 F30F6F8D 		movdqu	-2416(%rbp), %xmm1
+ 14584      90F6FFFF 
+ 14585 d05b 660FEFC1 		pxor	%xmm1, %xmm0
+ 14586              	.LBE3671:
+ 14587              	.LBE3670:
+ 14588              		.loc 2 1935 0
+ 14589 d05f F30F7F85 		movdqu	%xmm0, -9168(%rbp)
+ 14589      30DCFFFF 
+ 14590 d067 488B8598 		movq	-9832(%rbp), %rax
+ 14590      D9FFFF
+ 14591 d06e 4805B000 		addq	$176, %rax
+ 14591      0000
+ 14592 d074 F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 14592      30DCFFFF 
+ 14593 d07c F30F7F00 		movdqu	%xmm0, (%rax)
+ 14594 d080 F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 14594      30DCFFFF 
+ 14595 d088 F30F7F85 		movdqu	%xmm0, -2384(%rbp)
+ 14595      B0F6FFFF 
+ 14596              	.LBB3672:
+ 14597              	.LBB3673:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 14598              		.loc 2 1681 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 447
+
+
+ 14599 d090 B8200000 		movl	$32, %eax
+ 14599      00
+ 14600 d095 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 14600      00000000 
+ 14601 d09d F30F7F85 		movdqu	%xmm0, -2352(%rbp)
+ 14601      D0F6FFFF 
+ 14602 d0a5 8985CCF6 		movl	%eax, -2356(%rbp)
+ 14602      FFFF
+ 14603 d0ab F30F6F85 		movdqu	-2352(%rbp), %xmm0
+ 14603      D0F6FFFF 
+ 14604 d0b3 F30F7F85 		movdqu	%xmm0, -2320(%rbp)
+ 14604      F0F6FFFF 
+ 14605 d0bb 8B85CCF6 		movl	-2356(%rbp), %eax
+ 14605      FFFF
+ 14606 d0c1 8985ECF6 		movl	%eax, -2324(%rbp)
+ 14606      FFFF
+ 14607              	.LBB3674:
+ 14608              	.LBB3675:
+ 14609              	.LBB3676:
+ 14610              	.LBB3677:
+ 14611              		.loc 3 598 0
+ 14612 d0c7 8B85ECF6 		movl	-2324(%rbp), %eax
+ 14612      FFFF
+ 14613 d0cd F30F6F85 		movdqu	-2320(%rbp), %xmm0
+ 14613      F0F6FFFF 
+ 14614 d0d5 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 14614      C003
+ 14615              	.LBE3677:
+ 14616              	.LBE3676:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 14617              		.loc 2 519 0
+ 14618 d0db F30F7F85 		movdqu	%xmm0, -2352(%rbp)
+ 14618      D0F6FFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 14619              		.loc 2 526 0
+ 14620 d0e3 F30F6F85 		movdqu	-2352(%rbp), %xmm0
+ 14620      D0F6FFFF 
+ 14621              	.LBE3675:
+ 14622              	.LBE3674:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 14623              		.loc 2 1681 0
+ 14624 d0eb 660F7F85 		movdqa	%xmm0, -9936(%rbp)
+ 14624      30D9FFFF 
+ 14625 d0f3 F30F6F85 		movdqu	-2384(%rbp), %xmm0
+ 14625      B0F6FFFF 
+ 14626 d0fb F30F7F85 		movdqu	%xmm0, -2304(%rbp)
+ 14626      00F7FFFF 
+ 14627 d103 F30F6F85 		movdqu	-2304(%rbp), %xmm0
+ 14627      00F7FFFF 
+ 14628 d10b F30F7F85 		movdqu	%xmm0, -2272(%rbp)
+ 14628      20F7FFFF 
+ 14629 d113 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 14629      000000
+ 14630 d11a 48898518 		movq	%rax, -2280(%rbp)
+ 14630      F7FFFF
+ 14631              	.LBB3678:
+ 14632              	.LBB3679:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 448
+
+
+ 14633              	.LBB3680:
+ 14634              	.LBB3681:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 14635              		.loc 2 851 0
+ 14636 d121 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 14636      00000000 
+ 14637 d129 F30F7F85 		movdqu	%xmm0, -2240(%rbp)
+ 14637      40F7FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 14638              		.loc 2 854 0
+ 14639 d131 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 14639      00000000 
+ 14640 d139 F30F6F8D 		movdqu	-2272(%rbp), %xmm1
+ 14640      20F7FFFF 
+ 14641 d141 F30F7F8D 		movdqu	%xmm1, -2160(%rbp)
+ 14641      90F7FFFF 
+ 14642 d149 F30F7F85 		movdqu	%xmm0, -2176(%rbp)
+ 14642      80F7FFFF 
+ 14643              	.LBB3682:
+ 14644              	.LBB3683:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 14645              		.loc 2 206 0
+ 14646 d151 F30F6F85 		movdqu	-2176(%rbp), %xmm0
+ 14646      80F7FFFF 
+ 14647 d159 F30F6F8D 		movdqu	-2160(%rbp), %xmm1
+ 14647      90F7FFFF 
+ 14648 d161 660FDBC1 		pand	%xmm1, %xmm0
+ 14649              	.LBE3683:
+ 14650              	.LBE3682:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 14651              		.loc 2 854 0
+ 14652 d165 F30F7F85 		movdqu	%xmm0, -2192(%rbp)
+ 14652      70F7FFFF 
+ 14653 d16d F30F6F85 		movdqu	-2272(%rbp), %xmm0
+ 14653      20F7FFFF 
+ 14654 d175 F30F7F85 		movdqu	%xmm0, -2128(%rbp)
+ 14654      B0F7FFFF 
+ 14655              	.LBB3684:
+ 14656              	.LBB3685:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 14657              		.loc 3 433 0
+ 14658 d17d F30F6F85 		movdqu	-2128(%rbp), %xmm0
+ 14658      B0F7FFFF 
+ 14659 d185 660F72D0 		psrld	$4, %xmm0
+ 14659      04
+ 14660              	.LBE3685:
+ 14661              	.LBE3684:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 14662              		.loc 2 857 0
+ 14663 d18a F30F7F85 		movdqu	%xmm0, -2208(%rbp)
+ 14663      60F7FFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 14664              		.loc 2 859 0
+ 14665 d192 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 14665      00000000 
+ 14666 d19a F30F6F8D 		movdqu	-2208(%rbp), %xmm1
+ 14666      60F7FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 449
+
+
+ 14667 d1a2 F30F7F8D 		movdqu	%xmm1, -2096(%rbp)
+ 14667      D0F7FFFF 
+ 14668 d1aa F30F7F85 		movdqu	%xmm0, -2112(%rbp)
+ 14668      C0F7FFFF 
+ 14669              	.LBB3686:
+ 14670              	.LBB3687:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 14671              		.loc 2 206 0
+ 14672 d1b2 F30F6F85 		movdqu	-2112(%rbp), %xmm0
+ 14672      C0F7FFFF 
+ 14673 d1ba F30F6F8D 		movdqu	-2096(%rbp), %xmm1
+ 14673      D0F7FFFF 
+ 14674 d1c2 660FDBC1 		pand	%xmm1, %xmm0
+ 14675              	.LBE3687:
+ 14676              	.LBE3686:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 14677              		.loc 2 859 0
+ 14678 d1c6 F30F7F85 		movdqu	%xmm0, -2208(%rbp)
+ 14678      60F7FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 14679              		.loc 2 866 0
+ 14680 d1ce C7853CF7 		movl	$0, -2244(%rbp)
+ 14680      FFFF0000 
+ 14680      0000
+ 14681 d1d8 E9BE0100 		jmp	.L216
+ 14681      00
+ 14682              	.L217:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 14683              		.loc 2 868 0
+ 14684 d1dd 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 14684      00000000 
+ 14685 d1e5 F30F7F85 		movdqu	%xmm0, -2064(%rbp)
+ 14685      F0F7FFFF 
+ 14686 d1ed F30F6F85 		movdqu	-2208(%rbp), %xmm0
+ 14686      60F7FFFF 
+ 14687 d1f5 F30F7F85 		movdqu	%xmm0, -2080(%rbp)
+ 14687      E0F7FFFF 
+ 14688 d1fd F30F6F85 		movdqu	-2064(%rbp), %xmm0
+ 14688      F0F7FFFF 
+ 14689 d205 F30F7F85 		movdqu	%xmm0, -2032(%rbp)
+ 14689      10F8FFFF 
+ 14690 d20d F30F6F85 		movdqu	-2080(%rbp), %xmm0
+ 14690      E0F7FFFF 
+ 14691 d215 F30F7F85 		movdqu	%xmm0, -2048(%rbp)
+ 14691      00F8FFFF 
+ 14692              	.LBB3688:
+ 14693              	.LBB3689:
+ 14694              	.LBB3690:
+ 14695              	.LBB3691:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 14696              		.loc 3 529 0
+ 14697 d21d F30F6F8D 		movdqu	-2048(%rbp), %xmm1
+ 14697      00F8FFFF 
+ 14698 d225 F30F6F85 		movdqu	-2032(%rbp), %xmm0
+ 14698      10F8FFFF 
+ 14699 d22d 660F3800 		pshufb	%xmm1, %xmm0
+ 14699      C1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 450
+
+
+ 14700              	.LBE3691:
+ 14701              	.LBE3690:
+ 14702              	.LBE3689:
+ 14703              	.LBE3688:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 14704              		.loc 2 868 0
+ 14705 d232 F30F7F85 		movdqu	%xmm0, -2224(%rbp)
+ 14705      50F7FFFF 
+ 14706 d23a F30F6F85 		movdqu	-2192(%rbp), %xmm0
+ 14706      70F7FFFF 
+ 14707 d242 F30F7F85 		movdqu	%xmm0, -2000(%rbp)
+ 14707      30F8FFFF 
+ 14708 d24a F30F6F85 		movdqu	-2224(%rbp), %xmm0
+ 14708      50F7FFFF 
+ 14709 d252 F30F7F85 		movdqu	%xmm0, -2016(%rbp)
+ 14709      20F8FFFF 
+ 14710              	.LBB3692:
+ 14711              	.LBB3693:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 14712              		.loc 2 234 0
+ 14713 d25a F30F6F85 		movdqu	-2016(%rbp), %xmm0
+ 14713      20F8FFFF 
+ 14714 d262 F30F6F8D 		movdqu	-2000(%rbp), %xmm1
+ 14714      30F8FFFF 
+ 14715 d26a 660FEBC1 		por	%xmm1, %xmm0
+ 14716              	.LBE3693:
+ 14717              	.LBE3692:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 14718              		.loc 2 870 0
+ 14719 d26e F30F7F85 		movdqu	%xmm0, -2224(%rbp)
+ 14719      50F7FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 14720              		.loc 2 872 0
+ 14721 d276 8B853CF7 		mov	-2244(%rbp), %eax
+ 14721      FFFF
+ 14722 d27c 48C1E004 		salq	$4, %rax
+ 14723 d280 48038518 		addq	-2280(%rbp), %rax
+ 14723      F7FFFF
+ 14724 d287 660F6F00 		movdqa	(%rax), %xmm0
+ 14725 d28b F30F7F85 		movdqu	%xmm0, -1968(%rbp)
+ 14725      50F8FFFF 
+ 14726 d293 F30F6F85 		movdqu	-2224(%rbp), %xmm0
+ 14726      50F7FFFF 
+ 14727 d29b F30F7F85 		movdqu	%xmm0, -1984(%rbp)
+ 14727      40F8FFFF 
+ 14728 d2a3 F30F6F85 		movdqu	-1968(%rbp), %xmm0
+ 14728      50F8FFFF 
+ 14729 d2ab F30F7F85 		movdqu	%xmm0, -1936(%rbp)
+ 14729      70F8FFFF 
+ 14730 d2b3 F30F6F85 		movdqu	-1984(%rbp), %xmm0
+ 14730      40F8FFFF 
+ 14731 d2bb F30F7F85 		movdqu	%xmm0, -1952(%rbp)
+ 14731      60F8FFFF 
+ 14732              	.LBB3694:
+ 14733              	.LBB3695:
+ 14734              	.LBB3696:
+ 14735              	.LBB3697:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 451
+
+
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 14736              		.loc 3 529 0
+ 14737 d2c3 F30F6F8D 		movdqu	-1952(%rbp), %xmm1
+ 14737      60F8FFFF 
+ 14738 d2cb F30F6F85 		movdqu	-1936(%rbp), %xmm0
+ 14738      70F8FFFF 
+ 14739 d2d3 660F3800 		pshufb	%xmm1, %xmm0
+ 14739      C1
+ 14740              	.LBE3697:
+ 14741              	.LBE3696:
+ 14742              	.LBE3695:
+ 14743              	.LBE3694:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 14744              		.loc 2 872 0
+ 14745 d2d8 F30F7F85 		movdqu	%xmm0, -2224(%rbp)
+ 14745      50F7FFFF 
+ 14746 d2e0 F30F6F85 		movdqu	-2240(%rbp), %xmm0
+ 14746      40F7FFFF 
+ 14747 d2e8 F30F7F85 		movdqu	%xmm0, -1904(%rbp)
+ 14747      90F8FFFF 
+ 14748 d2f0 F30F6F85 		movdqu	-2224(%rbp), %xmm0
+ 14748      50F7FFFF 
+ 14749 d2f8 F30F7F85 		movdqu	%xmm0, -1920(%rbp)
+ 14749      80F8FFFF 
+ 14750              	.LBB3698:
+ 14751              	.LBB3699:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 14752              		.loc 2 234 0
+ 14753 d300 F30F6F85 		movdqu	-1920(%rbp), %xmm0
+ 14753      80F8FFFF 
+ 14754 d308 F30F6F8D 		movdqu	-1904(%rbp), %xmm1
+ 14754      90F8FFFF 
+ 14755 d310 660FEBC1 		por	%xmm1, %xmm0
+ 14756              	.LBE3699:
+ 14757              	.LBE3698:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 14758              		.loc 2 874 0
+ 14759 d314 F30F7F85 		movdqu	%xmm0, -2240(%rbp)
+ 14759      40F7FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 14760              		.loc 2 876 0
+ 14761 d31c 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 14761      00000000 
+ 14762 d324 F30F6F8D 		movdqu	-2208(%rbp), %xmm1
+ 14762      60F7FFFF 
+ 14763 d32c F30F7F8D 		movdqu	%xmm1, -1872(%rbp)
+ 14763      B0F8FFFF 
+ 14764 d334 F30F7F85 		movdqu	%xmm0, -1888(%rbp)
+ 14764      A0F8FFFF 
+ 14765              	.LBB3700:
+ 14766              	.LBB3701:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 14767              		.loc 2 290 0
+ 14768 d33c F30F6F8D 		movdqu	-1888(%rbp), %xmm1
+ 14768      A0F8FFFF 
+ 14769 d344 F30F6F85 		movdqu	-1872(%rbp), %xmm0
+ 14769      B0F8FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 452
+
+
+ 14770 d34c 660FF8C1 		psubb	%xmm1, %xmm0
+ 14771              	.LBE3701:
+ 14772              	.LBE3700:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 14773              		.loc 2 876 0
+ 14774 d350 F30F7F85 		movdqu	%xmm0, -2208(%rbp)
+ 14774      60F7FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 14775              		.loc 2 878 0
+ 14776 d358 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 14776      00000000 
+ 14777 d360 F30F6F8D 		movdqu	-2208(%rbp), %xmm1
+ 14777      60F7FFFF 
+ 14778 d368 F30F7F8D 		movdqu	%xmm1, -1840(%rbp)
+ 14778      D0F8FFFF 
+ 14779 d370 F30F7F85 		movdqu	%xmm0, -1856(%rbp)
+ 14779      C0F8FFFF 
+ 14780              	.LBB3702:
+ 14781              	.LBB3703:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 14782              		.loc 2 206 0
+ 14783 d378 F30F6F85 		movdqu	-1856(%rbp), %xmm0
+ 14783      C0F8FFFF 
+ 14784 d380 F30F6F8D 		movdqu	-1840(%rbp), %xmm1
+ 14784      D0F8FFFF 
+ 14785 d388 660FDBC1 		pand	%xmm1, %xmm0
+ 14786              	.LBE3703:
+ 14787              	.LBE3702:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 14788              		.loc 2 878 0
+ 14789 d38c F30F7F85 		movdqu	%xmm0, -2208(%rbp)
+ 14789      60F7FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 14790              		.loc 2 866 0
+ 14791 d394 83853CF7 		addl	$1, -2244(%rbp)
+ 14791      FFFF01
+ 14792              	.L216:
+ 14793 d39b 83BD3CF7 		cmpl	$15, -2244(%rbp)
+ 14793      FFFF0F
+ 14794 d3a2 0F8635FE 		jbe	.L217
+ 14794      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 14795              		.loc 2 882 0
+ 14796 d3a8 F30F6F85 		movdqu	-2240(%rbp), %xmm0
+ 14796      40F7FFFF 
+ 14797              	.LBE3681:
+ 14798              	.LBE3680:
+ 14799              	.LBE3679:
+ 14800              	.LBE3678:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 14801              		.loc 2 1682 0
+ 14802 d3b0 660F7F85 		movdqa	%xmm0, -9952(%rbp)
+ 14802      20D9FFFF 
+ 14803              	.LBB3704:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 14804              		.loc 2 1683 0
+ 14805 d3b8 660F6F85 		movdqa	-9952(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 453
+
+
+ 14805      20D9FFFF 
+ 14806 d3c0 F30F7F85 		movdqu	%xmm0, -9296(%rbp)
+ 14806      B0DBFFFF 
+ 14807 d3c8 E8000000 		call	KDbgWriterGet at PLT
+ 14807      00
+ 14808 d3cd 4885C0   		testq	%rax, %rax
+ 14809 d3d0 7479     		je	.L219
+ 14810 d3d2 BF010000 		movl	$1, %edi
+ 14810      00
+ 14811 d3d7 E8000000 		call	KDbgCondToFlag at PLT
+ 14811      00
+ 14812 d3dc 4889C6   		movq	%rax, %rsi
+ 14813 d3df BF100000 		movl	$16, %edi
+ 14813      00
+ 14814 d3e4 E8000000 		call	KDbgTestModConds at PLT
+ 14814      00
+ 14815 d3e9 84C0     		testb	%al, %al
+ 14816 d3eb 745E     		je	.L219
+ 14817 d3ed 8B85BCDB 		movl	-9284(%rbp), %eax
+ 14817      FFFF
+ 14818 d3f3 89C7     		movl	%eax, %edi
+ 14819 d3f5 E8062CFF 		call	bswap_32
+ 14819      FF
+ 14820 d3fa 4189C5   		movl	%eax, %r13d
+ 14821 d3fd 8B85B8DB 		movl	-9288(%rbp), %eax
+ 14821      FFFF
+ 14822 d403 89C7     		movl	%eax, %edi
+ 14823 d405 E8F62BFF 		call	bswap_32
+ 14823      FF
+ 14824 d40a 4189C4   		movl	%eax, %r12d
+ 14825 d40d 8B85B4DB 		movl	-9292(%rbp), %eax
+ 14825      FFFF
+ 14826 d413 89C7     		movl	%eax, %edi
+ 14827 d415 E8E62BFF 		call	bswap_32
+ 14827      FF
+ 14828 d41a 89C3     		movl	%eax, %ebx
+ 14829 d41c 8B85B0DB 		movl	-9296(%rbp), %eax
+ 14829      FFFF
+ 14830 d422 89C7     		movl	%eax, %edi
+ 14831 d424 E8D72BFF 		call	bswap_32
+ 14831      FF
+ 14832 d429 4589E9   		movl	%r13d, %r9d
+ 14833 d42c 4589E0   		movl	%r12d, %r8d
+ 14834 d42f 89D9     		movl	%ebx, %ecx
+ 14835 d431 89C2     		movl	%eax, %edx
+ 14836 d433 488D3500 		leaq	.LC0(%rip), %rsi
+ 14836      000000
+ 14837 d43a 488D3D00 		leaq	.LC1(%rip), %rdi
+ 14837      000000
+ 14838 d441 B8000000 		movl	$0, %eax
+ 14838      00
+ 14839 d446 E8000000 		call	KDbgMsg at PLT
+ 14839      00
+ 14840              	.L219:
+ 14841 d44b 660F6F85 		movdqa	-9952(%rbp), %xmm0
+ 14841      20D9FFFF 
+ 14842 d453 F30F7F85 		movdqu	%xmm0, -1824(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 454
+
+
+ 14842      E0F8FFFF 
+ 14843              	.LBE3704:
+ 14844              	.LBB3705:
+ 14845              	.LBB3706:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 14846              		.loc 2 667 0
+ 14847 d45b 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 14847      00000000 
+ 14848 d463 F30F6F8D 		movdqu	-1824(%rbp), %xmm1
+ 14848      E0F8FFFF 
+ 14849 d46b F30F7F8D 		movdqu	%xmm1, -1792(%rbp)
+ 14849      00F9FFFF 
+ 14850 d473 F30F7F85 		movdqu	%xmm0, -1808(%rbp)
+ 14850      F0F8FFFF 
+ 14851 d47b F30F6F85 		movdqu	-1792(%rbp), %xmm0
+ 14851      00F9FFFF 
+ 14852 d483 F30F7F85 		movdqu	%xmm0, -1760(%rbp)
+ 14852      20F9FFFF 
+ 14853 d48b F30F6F85 		movdqu	-1808(%rbp), %xmm0
+ 14853      F0F8FFFF 
+ 14854 d493 F30F7F85 		movdqu	%xmm0, -1776(%rbp)
+ 14854      10F9FFFF 
+ 14855              	.LBB3707:
+ 14856              	.LBB3708:
+ 14857              	.LBB3709:
+ 14858              	.LBB3710:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 14859              		.loc 3 529 0
+ 14860 d49b F30F6F8D 		movdqu	-1776(%rbp), %xmm1
+ 14860      10F9FFFF 
+ 14861 d4a3 F30F6F85 		movdqu	-1760(%rbp), %xmm0
+ 14861      20F9FFFF 
+ 14862 d4ab 660F3800 		pshufb	%xmm1, %xmm0
+ 14862      C1
+ 14863              	.LBE3710:
+ 14864              	.LBE3709:
+ 14865              	.LBE3708:
+ 14866              	.LBE3707:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 14867              		.loc 2 667 0
+ 14868 d4b0 F30F7F85 		movdqu	%xmm0, -1824(%rbp)
+ 14868      E0F8FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 14869              		.loc 2 668 0
+ 14870 d4b8 F30F6F85 		movdqu	-1824(%rbp), %xmm0
+ 14870      E0F8FFFF 
+ 14871              	.LBE3706:
+ 14872              	.LBE3705:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 14873              		.loc 2 1684 0
+ 14874 d4c0 660F7F85 		movdqa	%xmm0, -9952(%rbp)
+ 14874      20D9FFFF 
+ 14875              	.LBB3711:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 14876              		.loc 2 1685 0
+ 14877 d4c8 660F6F85 		movdqa	-9952(%rbp), %xmm0
+ 14877      20D9FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 455
+
+
+ 14878 d4d0 F30F7F85 		movdqu	%xmm0, -9312(%rbp)
+ 14878      A0DBFFFF 
+ 14879 d4d8 E8000000 		call	KDbgWriterGet at PLT
+ 14879      00
+ 14880 d4dd 4885C0   		testq	%rax, %rax
+ 14881 d4e0 7479     		je	.L221
+ 14882 d4e2 BF010000 		movl	$1, %edi
+ 14882      00
+ 14883 d4e7 E8000000 		call	KDbgCondToFlag at PLT
+ 14883      00
+ 14884 d4ec 4889C6   		movq	%rax, %rsi
+ 14885 d4ef BF100000 		movl	$16, %edi
+ 14885      00
+ 14886 d4f4 E8000000 		call	KDbgTestModConds at PLT
+ 14886      00
+ 14887 d4f9 84C0     		testb	%al, %al
+ 14888 d4fb 745E     		je	.L221
+ 14889 d4fd 8B85ACDB 		movl	-9300(%rbp), %eax
+ 14889      FFFF
+ 14890 d503 89C7     		movl	%eax, %edi
+ 14891 d505 E8F62AFF 		call	bswap_32
+ 14891      FF
+ 14892 d50a 4189C5   		movl	%eax, %r13d
+ 14893 d50d 8B85A8DB 		movl	-9304(%rbp), %eax
+ 14893      FFFF
+ 14894 d513 89C7     		movl	%eax, %edi
+ 14895 d515 E8E62AFF 		call	bswap_32
+ 14895      FF
+ 14896 d51a 4189C4   		movl	%eax, %r12d
+ 14897 d51d 8B85A4DB 		movl	-9308(%rbp), %eax
+ 14897      FFFF
+ 14898 d523 89C7     		movl	%eax, %edi
+ 14899 d525 E8D62AFF 		call	bswap_32
+ 14899      FF
+ 14900 d52a 89C3     		movl	%eax, %ebx
+ 14901 d52c 8B85A0DB 		movl	-9312(%rbp), %eax
+ 14901      FFFF
+ 14902 d532 89C7     		movl	%eax, %edi
+ 14903 d534 E8C72AFF 		call	bswap_32
+ 14903      FF
+ 14904 d539 4589E9   		movl	%r13d, %r9d
+ 14905 d53c 4589E0   		movl	%r12d, %r8d
+ 14906 d53f 89D9     		movl	%ebx, %ecx
+ 14907 d541 89C2     		movl	%eax, %edx
+ 14908 d543 488D3500 		leaq	.LC2(%rip), %rsi
+ 14908      000000
+ 14909 d54a 488D3D00 		leaq	.LC1(%rip), %rdi
+ 14909      000000
+ 14910 d551 B8000000 		movl	$0, %eax
+ 14910      00
+ 14911 d556 E8000000 		call	KDbgMsg at PLT
+ 14911      00
+ 14912              	.L221:
+ 14913 d55b 660F6F85 		movdqa	-9952(%rbp), %xmm0
+ 14913      20D9FFFF 
+ 14914 d563 F30F7F85 		movdqu	%xmm0, -1728(%rbp)
+ 14914      40F9FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 456
+
+
+ 14915 d56b 660F6F85 		movdqa	-9936(%rbp), %xmm0
+ 14915      30D9FFFF 
+ 14916 d573 F30F7F85 		movdqu	%xmm0, -1744(%rbp)
+ 14916      30F9FFFF 
+ 14917              	.LBE3711:
+ 14918              	.LBB3712:
+ 14919              	.LBB3713:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 14920              		.loc 2 178 0
+ 14921 d57b F30F6F85 		movdqu	-1744(%rbp), %xmm0
+ 14921      30F9FFFF 
+ 14922 d583 F30F6F8D 		movdqu	-1728(%rbp), %xmm1
+ 14922      40F9FFFF 
+ 14923 d58b 660FEFC1 		pxor	%xmm1, %xmm0
+ 14924              	.LBE3713:
+ 14925              	.LBE3712:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 14926              		.loc 2 1686 0
+ 14927 d58f 660F7F85 		movdqa	%xmm0, -9952(%rbp)
+ 14927      20D9FFFF 
+ 14928              	.LBB3714:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 14929              		.loc 2 1687 0
+ 14930 d597 660F6F85 		movdqa	-9952(%rbp), %xmm0
+ 14930      20D9FFFF 
+ 14931 d59f F30F7F85 		movdqu	%xmm0, -9328(%rbp)
+ 14931      90DBFFFF 
+ 14932 d5a7 E8000000 		call	KDbgWriterGet at PLT
+ 14932      00
+ 14933 d5ac 4885C0   		testq	%rax, %rax
+ 14934 d5af 7479     		je	.L223
+ 14935 d5b1 BF010000 		movl	$1, %edi
+ 14935      00
+ 14936 d5b6 E8000000 		call	KDbgCondToFlag at PLT
+ 14936      00
+ 14937 d5bb 4889C6   		movq	%rax, %rsi
+ 14938 d5be BF100000 		movl	$16, %edi
+ 14938      00
+ 14939 d5c3 E8000000 		call	KDbgTestModConds at PLT
+ 14939      00
+ 14940 d5c8 84C0     		testb	%al, %al
+ 14941 d5ca 745E     		je	.L223
+ 14942 d5cc 8B859CDB 		movl	-9316(%rbp), %eax
+ 14942      FFFF
+ 14943 d5d2 89C7     		movl	%eax, %edi
+ 14944 d5d4 E8272AFF 		call	bswap_32
+ 14944      FF
+ 14945 d5d9 4189C5   		movl	%eax, %r13d
+ 14946 d5dc 8B8598DB 		movl	-9320(%rbp), %eax
+ 14946      FFFF
+ 14947 d5e2 89C7     		movl	%eax, %edi
+ 14948 d5e4 E8172AFF 		call	bswap_32
+ 14948      FF
+ 14949 d5e9 4189C4   		movl	%eax, %r12d
+ 14950 d5ec 8B8594DB 		movl	-9324(%rbp), %eax
+ 14950      FFFF
+ 14951 d5f2 89C7     		movl	%eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 457
+
+
+ 14952 d5f4 E8072AFF 		call	bswap_32
+ 14952      FF
+ 14953 d5f9 89C3     		movl	%eax, %ebx
+ 14954 d5fb 8B8590DB 		movl	-9328(%rbp), %eax
+ 14954      FFFF
+ 14955 d601 89C7     		movl	%eax, %edi
+ 14956 d603 E8F829FF 		call	bswap_32
+ 14956      FF
+ 14957 d608 4589E9   		movl	%r13d, %r9d
+ 14958 d60b 4589E0   		movl	%r12d, %r8d
+ 14959 d60e 89D9     		movl	%ebx, %ecx
+ 14960 d610 89C2     		movl	%eax, %edx
+ 14961 d612 488D3500 		leaq	.LC3(%rip), %rsi
+ 14961      000000
+ 14962 d619 488D3D00 		leaq	.LC1(%rip), %rdi
+ 14962      000000
+ 14963 d620 B8000000 		movl	$0, %eax
+ 14963      00
+ 14964 d625 E8000000 		call	KDbgMsg at PLT
+ 14964      00
+ 14965              	.L223:
+ 14966 d62a 660F6F85 		movdqa	-9952(%rbp), %xmm0
+ 14966      20D9FFFF 
+ 14967 d632 F30F7F85 		movdqu	%xmm0, -1712(%rbp)
+ 14967      50F9FFFF 
+ 14968 d63a F30F6F85 		movdqu	-1712(%rbp), %xmm0
+ 14968      50F9FFFF 
+ 14969 d642 F30F7F85 		movdqu	%xmm0, -1680(%rbp)
+ 14969      70F9FFFF 
+ 14970              	.LBE3714:
+ 14971              	.LBB3715:
+ 14972              	.LBB3716:
+ 14973              	.LBB3717:
+ 14974              	.LBB3718:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 14975              		.loc 3 450 0
+ 14976 d64a F30F6F85 		movdqu	-1680(%rbp), %xmm0
+ 14976      70F9FFFF 
+ 14977 d652 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 14977      FF
+ 14978              	.LBE3718:
+ 14979              	.LBE3717:
+ 14980              	.LBE3716:
+ 14981              	.LBE3715:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 14982              		.loc 2 1688 0
+ 14983 d657 660F7F85 		movdqa	%xmm0, -9952(%rbp)
+ 14983      20D9FFFF 
+ 14984              	.LBB3719:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 14985              		.loc 2 1689 0
+ 14986 d65f 660F6F85 		movdqa	-9952(%rbp), %xmm0
+ 14986      20D9FFFF 
+ 14987 d667 F30F7F85 		movdqu	%xmm0, -9344(%rbp)
+ 14987      80DBFFFF 
+ 14988 d66f E8000000 		call	KDbgWriterGet at PLT
+ 14988      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 458
+
+
+ 14989 d674 4885C0   		testq	%rax, %rax
+ 14990 d677 7479     		je	.L225
+ 14991 d679 BF010000 		movl	$1, %edi
+ 14991      00
+ 14992 d67e E8000000 		call	KDbgCondToFlag at PLT
+ 14992      00
+ 14993 d683 4889C6   		movq	%rax, %rsi
+ 14994 d686 BF100000 		movl	$16, %edi
+ 14994      00
+ 14995 d68b E8000000 		call	KDbgTestModConds at PLT
+ 14995      00
+ 14996 d690 84C0     		testb	%al, %al
+ 14997 d692 745E     		je	.L225
+ 14998 d694 8B858CDB 		movl	-9332(%rbp), %eax
+ 14998      FFFF
+ 14999 d69a 89C7     		movl	%eax, %edi
+ 15000 d69c E85F29FF 		call	bswap_32
+ 15000      FF
+ 15001 d6a1 4189C5   		movl	%eax, %r13d
+ 15002 d6a4 8B8588DB 		movl	-9336(%rbp), %eax
+ 15002      FFFF
+ 15003 d6aa 89C7     		movl	%eax, %edi
+ 15004 d6ac E84F29FF 		call	bswap_32
+ 15004      FF
+ 15005 d6b1 4189C4   		movl	%eax, %r12d
+ 15006 d6b4 8B8584DB 		movl	-9340(%rbp), %eax
+ 15006      FFFF
+ 15007 d6ba 89C7     		movl	%eax, %edi
+ 15008 d6bc E83F29FF 		call	bswap_32
+ 15008      FF
+ 15009 d6c1 89C3     		movl	%eax, %ebx
+ 15010 d6c3 8B8580DB 		movl	-9344(%rbp), %eax
+ 15010      FFFF
+ 15011 d6c9 89C7     		movl	%eax, %edi
+ 15012 d6cb E83029FF 		call	bswap_32
+ 15012      FF
+ 15013 d6d0 4589E9   		movl	%r13d, %r9d
+ 15014 d6d3 4589E0   		movl	%r12d, %r8d
+ 15015 d6d6 89D9     		movl	%ebx, %ecx
+ 15016 d6d8 89C2     		movl	%eax, %edx
+ 15017 d6da 488D3500 		leaq	.LC4(%rip), %rsi
+ 15017      000000
+ 15018 d6e1 488D3D00 		leaq	.LC1(%rip), %rdi
+ 15018      000000
+ 15019 d6e8 B8000000 		movl	$0, %eax
+ 15019      00
+ 15020 d6ed E8000000 		call	KDbgMsg at PLT
+ 15020      00
+ 15021              	.L225:
+ 15022              	.LBE3719:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+ 15023              		.loc 2 1690 0
+ 15024 d6f2 660F6F85 		movdqa	-9952(%rbp), %xmm0
+ 15024      20D9FFFF 
+ 15025              	.LBE3673:
+ 15026              	.LBE3672:
+1936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(12,0x20);   /* k48 : k49 : k50 : k51 */
+
GAS LISTING /tmp/ccjbMjHD.s 			page 459
+
+
+ 15027              		.loc 2 1936 0
+ 15028 d6fa F30F7F85 		movdqu	%xmm0, -9152(%rbp)
+ 15028      40DCFFFF 
+ 15029 d702 F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 15029      20DCFFFF 
+ 15030 d70a F30F7F85 		movdqu	%xmm0, -1664(%rbp)
+ 15030      80F9FFFF 
+ 15031              	.LBB3720:
+ 15032              	.LBB3721:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 15033              		.loc 2 1565 0
+ 15034 d712 F30F6F85 		movdqu	-1664(%rbp), %xmm0
+ 15034      80F9FFFF 
+ 15035 d71a 660F7F85 		movdqa	%xmm0, -9920(%rbp)
+ 15035      40D9FFFF 
+ 15036 d722 660F6F85 		movdqa	-9920(%rbp), %xmm0
+ 15036      40D9FFFF 
+ 15037 d72a F30F7F85 		movdqu	%xmm0, -1648(%rbp)
+ 15037      90F9FFFF 
+ 15038              	.LBB3722:
+ 15039              	.LBB3723:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 15040              		.loc 2 1278 0
+ 15041 d732 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 15041      00000000 
+ 15042 d73a F30F6F8D 		movdqu	-1648(%rbp), %xmm1
+ 15042      90F9FFFF 
+ 15043 d742 F30F7F8D 		movdqu	%xmm1, -1616(%rbp)
+ 15043      B0F9FFFF 
+ 15044 d74a F30F7F85 		movdqu	%xmm0, -1632(%rbp)
+ 15044      A0F9FFFF 
+ 15045 d752 F30F6F85 		movdqu	-1616(%rbp), %xmm0
+ 15045      B0F9FFFF 
+ 15046 d75a F30F7F85 		movdqu	%xmm0, -1584(%rbp)
+ 15046      D0F9FFFF 
+ 15047 d762 F30F6F85 		movdqu	-1632(%rbp), %xmm0
+ 15047      A0F9FFFF 
+ 15048 d76a F30F7F85 		movdqu	%xmm0, -1600(%rbp)
+ 15048      C0F9FFFF 
+ 15049              	.LBB3724:
+ 15050              	.LBB3725:
+ 15051              	.LBB3726:
+ 15052              	.LBB3727:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15053              		.loc 3 529 0
+ 15054 d772 F30F6F8D 		movdqu	-1600(%rbp), %xmm1
+ 15054      C0F9FFFF 
+ 15055 d77a F30F6F85 		movdqu	-1584(%rbp), %xmm0
+ 15055      D0F9FFFF 
+ 15056 d782 660F3800 		pshufb	%xmm1, %xmm0
+ 15056      C1
+ 15057              	.LBE3727:
+ 15058              	.LBE3726:
+ 15059              	.LBE3725:
+ 15060              	.LBE3724:
+ 15061              	.LBE3723:
+ 15062              	.LBE3722:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 460
+
+
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15063              		.loc 2 1567 0
+ 15064 d787 660F7F85 		movdqa	%xmm0, -9920(%rbp)
+ 15064      40D9FFFF 
+ 15065 d78f 660F6F85 		movdqa	-9920(%rbp), %xmm0
+ 15065      40D9FFFF 
+ 15066 d797 660FEF85 		pxor	-1664(%rbp), %xmm0
+ 15066      80F9FFFF 
+ 15067 d79f F30F7F85 		movdqu	%xmm0, -1664(%rbp)
+ 15067      80F9FFFF 
+ 15068 d7a7 660F6F85 		movdqa	-9920(%rbp), %xmm0
+ 15068      40D9FFFF 
+ 15069 d7af F30F7F85 		movdqu	%xmm0, -1568(%rbp)
+ 15069      E0F9FFFF 
+ 15070              	.LBB3728:
+ 15071              	.LBB3729:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 15072              		.loc 2 1278 0
+ 15073 d7b7 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 15073      00000000 
+ 15074 d7bf F30F6F8D 		movdqu	-1568(%rbp), %xmm1
+ 15074      E0F9FFFF 
+ 15075 d7c7 F30F7F8D 		movdqu	%xmm1, -1536(%rbp)
+ 15075      00FAFFFF 
+ 15076 d7cf F30F7F85 		movdqu	%xmm0, -1552(%rbp)
+ 15076      F0F9FFFF 
+ 15077 d7d7 F30F6F85 		movdqu	-1536(%rbp), %xmm0
+ 15077      00FAFFFF 
+ 15078 d7df F30F7F85 		movdqu	%xmm0, -1504(%rbp)
+ 15078      20FAFFFF 
+ 15079 d7e7 F30F6F85 		movdqu	-1552(%rbp), %xmm0
+ 15079      F0F9FFFF 
+ 15080 d7ef F30F7F85 		movdqu	%xmm0, -1520(%rbp)
+ 15080      10FAFFFF 
+ 15081              	.LBB3730:
+ 15082              	.LBB3731:
+ 15083              	.LBB3732:
+ 15084              	.LBB3733:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15085              		.loc 3 529 0
+ 15086 d7f7 F30F6F8D 		movdqu	-1520(%rbp), %xmm1
+ 15086      10FAFFFF 
+ 15087 d7ff F30F6F85 		movdqu	-1504(%rbp), %xmm0
+ 15087      20FAFFFF 
+ 15088 d807 660F3800 		pshufb	%xmm1, %xmm0
+ 15088      C1
+ 15089              	.LBE3733:
+ 15090              	.LBE3732:
+ 15091              	.LBE3731:
+ 15092              	.LBE3730:
+ 15093              	.LBE3729:
+ 15094              	.LBE3728:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15095              		.loc 2 1568 0
+ 15096 d80c 660F7F85 		movdqa	%xmm0, -9920(%rbp)
+ 15096      40D9FFFF 
+ 15097 d814 660F6F85 		movdqa	-9920(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 461
+
+
+ 15097      40D9FFFF 
+ 15098 d81c 660FEF85 		pxor	-1664(%rbp), %xmm0
+ 15098      80F9FFFF 
+ 15099 d824 F30F7F85 		movdqu	%xmm0, -1664(%rbp)
+ 15099      80F9FFFF 
+ 15100 d82c 660F6F85 		movdqa	-9920(%rbp), %xmm0
+ 15100      40D9FFFF 
+ 15101 d834 F30F7F85 		movdqu	%xmm0, -1488(%rbp)
+ 15101      30FAFFFF 
+ 15102              	.LBB3734:
+ 15103              	.LBB3735:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 15104              		.loc 2 1278 0
+ 15105 d83c 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 15105      00000000 
+ 15106 d844 F30F6F8D 		movdqu	-1488(%rbp), %xmm1
+ 15106      30FAFFFF 
+ 15107 d84c F30F7F8D 		movdqu	%xmm1, -1456(%rbp)
+ 15107      50FAFFFF 
+ 15108 d854 F30F7F85 		movdqu	%xmm0, -1472(%rbp)
+ 15108      40FAFFFF 
+ 15109 d85c F30F6F85 		movdqu	-1456(%rbp), %xmm0
+ 15109      50FAFFFF 
+ 15110 d864 F30F7F85 		movdqu	%xmm0, -1424(%rbp)
+ 15110      70FAFFFF 
+ 15111 d86c F30F6F85 		movdqu	-1472(%rbp), %xmm0
+ 15111      40FAFFFF 
+ 15112 d874 F30F7F85 		movdqu	%xmm0, -1440(%rbp)
+ 15112      60FAFFFF 
+ 15113              	.LBB3736:
+ 15114              	.LBB3737:
+ 15115              	.LBB3738:
+ 15116              	.LBB3739:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15117              		.loc 3 529 0
+ 15118 d87c F30F6F8D 		movdqu	-1440(%rbp), %xmm1
+ 15118      60FAFFFF 
+ 15119 d884 F30F6F85 		movdqu	-1424(%rbp), %xmm0
+ 15119      70FAFFFF 
+ 15120 d88c 660F3800 		pshufb	%xmm1, %xmm0
+ 15120      C1
+ 15121              	.LBE3739:
+ 15122              	.LBE3738:
+ 15123              	.LBE3737:
+ 15124              	.LBE3736:
+ 15125              	.LBE3735:
+ 15126              	.LBE3734:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15127              		.loc 2 1569 0
+ 15128 d891 660F7F85 		movdqa	%xmm0, -9920(%rbp)
+ 15128      40D9FFFF 
+ 15129 d899 660F6F85 		movdqa	-9920(%rbp), %xmm0
+ 15129      40D9FFFF 
+ 15130 d8a1 660FEF85 		pxor	-1664(%rbp), %xmm0
+ 15130      80F9FFFF 
+ 15131 d8a9 F30F7F85 		movdqu	%xmm0, -1664(%rbp)
+ 15131      80F9FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 462
+
+
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 15132              		.loc 2 1571 0
+ 15133 d8b1 F30F6F85 		movdqu	-1664(%rbp), %xmm0
+ 15133      80F9FFFF 
+ 15134              	.LBE3721:
+ 15135              	.LBE3720:
+ 15136              		.loc 2 1936 0
+ 15137 d8b9 F30F7F85 		movdqu	%xmm0, -9184(%rbp)
+ 15137      20DCFFFF 
+ 15138 d8c1 F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 15138      20DCFFFF 
+ 15139 d8c9 F30F7F85 		movdqu	%xmm0, -1392(%rbp)
+ 15139      90FAFFFF 
+ 15140 d8d1 F30F6F85 		movdqu	-9152(%rbp), %xmm0
+ 15140      40DCFFFF 
+ 15141 d8d9 F30F7F85 		movdqu	%xmm0, -1408(%rbp)
+ 15141      80FAFFFF 
+ 15142              	.LBB3740:
+ 15143              	.LBB3741:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 15144              		.loc 2 178 0
+ 15145 d8e1 F30F6F85 		movdqu	-1408(%rbp), %xmm0
+ 15145      80FAFFFF 
+ 15146 d8e9 F30F6F8D 		movdqu	-1392(%rbp), %xmm1
+ 15146      90FAFFFF 
+ 15147 d8f1 660FEFC1 		pxor	%xmm1, %xmm0
+ 15148              	.LBE3741:
+ 15149              	.LBE3740:
+ 15150              		.loc 2 1936 0
+ 15151 d8f5 F30F7F85 		movdqu	%xmm0, -9184(%rbp)
+ 15151      20DCFFFF 
+ 15152 d8fd 488B8598 		movq	-9832(%rbp), %rax
+ 15152      D9FFFF
+ 15153 d904 4805C000 		addq	$192, %rax
+ 15153      0000
+ 15154 d90a F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 15154      20DCFFFF 
+ 15155 d912 F30F7F00 		movdqu	%xmm0, (%rax)
+ 15156 d916 F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 15156      20DCFFFF 
+ 15157 d91e F30F7F85 		movdqu	%xmm0, -1376(%rbp)
+ 15157      A0FAFFFF 
+ 15158              	.LBB3742:
+ 15159              	.LBB3743:
+1656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.state = state;
+ 15160              		.loc 2 1656 0
+ 15161 d926 F30F6F85 		movdqu	-1376(%rbp), %xmm0
+ 15161      A0FAFFFF 
+ 15162 d92e F30F7F85 		movdqu	%xmm0, -9264(%rbp)
+ 15162      D0DBFFFF 
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 15163              		.loc 2 1657 0
+ 15164 d936 8B85DCDB 		movl	-9252(%rbp), %eax
+ 15164      FFFF
+ 15165 d93c 8985B8FA 		movl	%eax, -1352(%rbp)
+ 15165      FFFF
+ 15166              	.LBB3744:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 463
+
+
+ 15167              	.LBB3745:
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     col.word = w;
+ 15168              		.loc 2 740 0
+ 15169 d942 8B85B8FA 		movl	-1352(%rbp), %eax
+ 15169      FFFF
+ 15170 d948 8985C0DB 		movl	%eax, -9280(%rbp)
+ 15170      FFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 15171              		.loc 2 741 0
+ 15172 d94e C785BCFA 		movl	$0, -1348(%rbp)
+ 15172      FFFF0000 
+ 15172      0000
+ 15173 d958 EB36     		jmp	.L226
+ 15174              	.L227:
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         col.bytes[ix] = AESBCMEMBER(RijndaelSBox)[(unsigned)col.bytes[ix]];
+ 15175              		.loc 2 742 0
+ 15176 d95a 8B8DBCFA 		movl	-1348(%rbp), %ecx
+ 15176      FFFF
+ 15177 d960 8B85BCFA 		movl	-1348(%rbp), %eax
+ 15177      FFFF
+ 15178 d966 89C0     		mov	%eax, %eax
+ 15179 d968 0FB68405 		movzbl	-9280(%rbp,%rax), %eax
+ 15179      C0DBFFFF 
+ 15180 d970 0FB6C0   		movzbl	%al, %eax
+ 15181 d973 89C2     		mov	%eax, %edx
+ 15182 d975 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBox(%rip), %rax
+ 15182      000000
+ 15183 d97c 0FB61402 		movzbl	(%rdx,%rax), %edx
+ 15184 d980 89C8     		mov	%ecx, %eax
+ 15185 d982 889405C0 		movb	%dl, -9280(%rbp,%rax)
+ 15185      DBFFFF
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (col); ++ix)
+ 15186              		.loc 2 741 0
+ 15187 d989 8385BCFA 		addl	$1, -1348(%rbp)
+ 15187      FFFF01
+ 15188              	.L226:
+ 15189 d990 83BDBCFA 		cmpl	$3, -1348(%rbp)
+ 15189      FFFF03
+ 15190 d997 76C1     		jbe	.L227
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return col.word;
+ 15191              		.loc 2 743 0
+ 15192 d999 8B85C0DB 		movl	-9280(%rbp), %eax
+ 15192      FFFF
+ 15193              	.LBE3745:
+ 15194              	.LBE3744:
+1657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     temp  = AESBCMEMBER(SubWord)(u.columns[3]);
+ 15195              		.loc 2 1657 0
+ 15196 d99f 8985B4FA 		movl	%eax, -1356(%rbp)
+ 15196      FFFF
+1659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     u.columns [0] = u.columns [1] = u.columns [2] = u.columns [3] = temp;
+ 15197              		.loc 2 1659 0
+ 15198 d9a5 8B85B4FA 		movl	-1356(%rbp), %eax
+ 15198      FFFF
+ 15199 d9ab 8985DCDB 		movl	%eax, -9252(%rbp)
+ 15199      FFFF
+ 15200 d9b1 8B85DCDB 		movl	-9252(%rbp), %eax
+ 15200      FFFF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 464
+
+
+ 15201 d9b7 8985D8DB 		movl	%eax, -9256(%rbp)
+ 15201      FFFF
+ 15202 d9bd 8B85D8DB 		movl	-9256(%rbp), %eax
+ 15202      FFFF
+ 15203 d9c3 8985D4DB 		movl	%eax, -9260(%rbp)
+ 15203      FFFF
+ 15204 d9c9 8B85D4DB 		movl	-9260(%rbp), %eax
+ 15204      FFFF
+ 15205 d9cf 8985D0DB 		movl	%eax, -9264(%rbp)
+ 15205      FFFF
+1660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return u.state;
+ 15206              		.loc 2 1660 0
+ 15207 d9d5 F30F6F85 		movdqu	-9264(%rbp), %xmm0
+ 15207      D0DBFFFF 
+ 15208              	.LBE3743:
+ 15209              	.LBE3742:
+1937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_2(13);        /* k52 : k53 : k54 : k55 */
+ 15210              		.loc 2 1937 0
+ 15211 d9dd F30F7F85 		movdqu	%xmm0, -9152(%rbp)
+ 15211      40DCFFFF 
+ 15212 d9e5 F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 15212      30DCFFFF 
+ 15213 d9ed F30F7F85 		movdqu	%xmm0, -1344(%rbp)
+ 15213      C0FAFFFF 
+ 15214              	.LBB3746:
+ 15215              	.LBB3747:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 15216              		.loc 2 1565 0
+ 15217 d9f5 F30F6F85 		movdqu	-1344(%rbp), %xmm0
+ 15217      C0FAFFFF 
+ 15218 d9fd 660F7F85 		movdqa	%xmm0, -9904(%rbp)
+ 15218      50D9FFFF 
+ 15219 da05 660F6F85 		movdqa	-9904(%rbp), %xmm0
+ 15219      50D9FFFF 
+ 15220 da0d F30F7F85 		movdqu	%xmm0, -1328(%rbp)
+ 15220      D0FAFFFF 
+ 15221              	.LBB3748:
+ 15222              	.LBB3749:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 15223              		.loc 2 1278 0
+ 15224 da15 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 15224      00000000 
+ 15225 da1d F30F6F8D 		movdqu	-1328(%rbp), %xmm1
+ 15225      D0FAFFFF 
+ 15226 da25 F30F7F8D 		movdqu	%xmm1, -1296(%rbp)
+ 15226      F0FAFFFF 
+ 15227 da2d F30F7F85 		movdqu	%xmm0, -1312(%rbp)
+ 15227      E0FAFFFF 
+ 15228 da35 F30F6F85 		movdqu	-1296(%rbp), %xmm0
+ 15228      F0FAFFFF 
+ 15229 da3d F30F7F85 		movdqu	%xmm0, -1264(%rbp)
+ 15229      10FBFFFF 
+ 15230 da45 F30F6F85 		movdqu	-1312(%rbp), %xmm0
+ 15230      E0FAFFFF 
+ 15231 da4d F30F7F85 		movdqu	%xmm0, -1280(%rbp)
+ 15231      00FBFFFF 
+ 15232              	.LBB3750:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 465
+
+
+ 15233              	.LBB3751:
+ 15234              	.LBB3752:
+ 15235              	.LBB3753:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15236              		.loc 3 529 0
+ 15237 da55 F30F6F8D 		movdqu	-1280(%rbp), %xmm1
+ 15237      00FBFFFF 
+ 15238 da5d F30F6F85 		movdqu	-1264(%rbp), %xmm0
+ 15238      10FBFFFF 
+ 15239 da65 660F3800 		pshufb	%xmm1, %xmm0
+ 15239      C1
+ 15240              	.LBE3753:
+ 15241              	.LBE3752:
+ 15242              	.LBE3751:
+ 15243              	.LBE3750:
+ 15244              	.LBE3749:
+ 15245              	.LBE3748:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15246              		.loc 2 1567 0
+ 15247 da6a 660F7F85 		movdqa	%xmm0, -9904(%rbp)
+ 15247      50D9FFFF 
+ 15248 da72 660F6F85 		movdqa	-9904(%rbp), %xmm0
+ 15248      50D9FFFF 
+ 15249 da7a 660FEF85 		pxor	-1344(%rbp), %xmm0
+ 15249      C0FAFFFF 
+ 15250 da82 F30F7F85 		movdqu	%xmm0, -1344(%rbp)
+ 15250      C0FAFFFF 
+ 15251 da8a 660F6F85 		movdqa	-9904(%rbp), %xmm0
+ 15251      50D9FFFF 
+ 15252 da92 F30F7F85 		movdqu	%xmm0, -1248(%rbp)
+ 15252      20FBFFFF 
+ 15253              	.LBB3754:
+ 15254              	.LBB3755:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 15255              		.loc 2 1278 0
+ 15256 da9a 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 15256      00000000 
+ 15257 daa2 F30F6F8D 		movdqu	-1248(%rbp), %xmm1
+ 15257      20FBFFFF 
+ 15258 daaa F30F7F8D 		movdqu	%xmm1, -1216(%rbp)
+ 15258      40FBFFFF 
+ 15259 dab2 F30F7F85 		movdqu	%xmm0, -1232(%rbp)
+ 15259      30FBFFFF 
+ 15260 daba F30F6F85 		movdqu	-1216(%rbp), %xmm0
+ 15260      40FBFFFF 
+ 15261 dac2 F30F7F85 		movdqu	%xmm0, -1184(%rbp)
+ 15261      60FBFFFF 
+ 15262 daca F30F6F85 		movdqu	-1232(%rbp), %xmm0
+ 15262      30FBFFFF 
+ 15263 dad2 F30F7F85 		movdqu	%xmm0, -1200(%rbp)
+ 15263      50FBFFFF 
+ 15264              	.LBB3756:
+ 15265              	.LBB3757:
+ 15266              	.LBB3758:
+ 15267              	.LBB3759:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15268              		.loc 3 529 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 466
+
+
+ 15269 dada F30F6F8D 		movdqu	-1200(%rbp), %xmm1
+ 15269      50FBFFFF 
+ 15270 dae2 F30F6F85 		movdqu	-1184(%rbp), %xmm0
+ 15270      60FBFFFF 
+ 15271 daea 660F3800 		pshufb	%xmm1, %xmm0
+ 15271      C1
+ 15272              	.LBE3759:
+ 15273              	.LBE3758:
+ 15274              	.LBE3757:
+ 15275              	.LBE3756:
+ 15276              	.LBE3755:
+ 15277              	.LBE3754:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15278              		.loc 2 1568 0
+ 15279 daef 660F7F85 		movdqa	%xmm0, -9904(%rbp)
+ 15279      50D9FFFF 
+ 15280 daf7 660F6F85 		movdqa	-9904(%rbp), %xmm0
+ 15280      50D9FFFF 
+ 15281 daff 660FEF85 		pxor	-1344(%rbp), %xmm0
+ 15281      C0FAFFFF 
+ 15282 db07 F30F7F85 		movdqu	%xmm0, -1344(%rbp)
+ 15282      C0FAFFFF 
+ 15283 db0f 660F6F85 		movdqa	-9904(%rbp), %xmm0
+ 15283      50D9FFFF 
+ 15284 db17 F30F7F85 		movdqu	%xmm0, -1168(%rbp)
+ 15284      70FBFFFF 
+ 15285              	.LBB3760:
+ 15286              	.LBB3761:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 15287              		.loc 2 1278 0
+ 15288 db1f 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 15288      00000000 
+ 15289 db27 F30F6F8D 		movdqu	-1168(%rbp), %xmm1
+ 15289      70FBFFFF 
+ 15290 db2f F30F7F8D 		movdqu	%xmm1, -1136(%rbp)
+ 15290      90FBFFFF 
+ 15291 db37 F30F7F85 		movdqu	%xmm0, -1152(%rbp)
+ 15291      80FBFFFF 
+ 15292 db3f F30F6F85 		movdqu	-1136(%rbp), %xmm0
+ 15292      90FBFFFF 
+ 15293 db47 F30F7F85 		movdqu	%xmm0, -1104(%rbp)
+ 15293      B0FBFFFF 
+ 15294 db4f F30F6F85 		movdqu	-1152(%rbp), %xmm0
+ 15294      80FBFFFF 
+ 15295 db57 F30F7F85 		movdqu	%xmm0, -1120(%rbp)
+ 15295      A0FBFFFF 
+ 15296              	.LBB3762:
+ 15297              	.LBB3763:
+ 15298              	.LBB3764:
+ 15299              	.LBB3765:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15300              		.loc 3 529 0
+ 15301 db5f F30F6F8D 		movdqu	-1120(%rbp), %xmm1
+ 15301      A0FBFFFF 
+ 15302 db67 F30F6F85 		movdqu	-1104(%rbp), %xmm0
+ 15302      B0FBFFFF 
+ 15303 db6f 660F3800 		pshufb	%xmm1, %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 467
+
+
+ 15303      C1
+ 15304              	.LBE3765:
+ 15305              	.LBE3764:
+ 15306              	.LBE3763:
+ 15307              	.LBE3762:
+ 15308              	.LBE3761:
+ 15309              	.LBE3760:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15310              		.loc 2 1569 0
+ 15311 db74 660F7F85 		movdqa	%xmm0, -9904(%rbp)
+ 15311      50D9FFFF 
+ 15312 db7c 660F6F85 		movdqa	-9904(%rbp), %xmm0
+ 15312      50D9FFFF 
+ 15313 db84 660FEF85 		pxor	-1344(%rbp), %xmm0
+ 15313      C0FAFFFF 
+ 15314 db8c F30F7F85 		movdqu	%xmm0, -1344(%rbp)
+ 15314      C0FAFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 15315              		.loc 2 1571 0
+ 15316 db94 F30F6F85 		movdqu	-1344(%rbp), %xmm0
+ 15316      C0FAFFFF 
+ 15317              	.LBE3747:
+ 15318              	.LBE3746:
+ 15319              		.loc 2 1937 0
+ 15320 db9c F30F7F85 		movdqu	%xmm0, -9168(%rbp)
+ 15320      30DCFFFF 
+ 15321 dba4 F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 15321      30DCFFFF 
+ 15322 dbac F30F7F85 		movdqu	%xmm0, -1072(%rbp)
+ 15322      D0FBFFFF 
+ 15323 dbb4 F30F6F85 		movdqu	-9152(%rbp), %xmm0
+ 15323      40DCFFFF 
+ 15324 dbbc F30F7F85 		movdqu	%xmm0, -1088(%rbp)
+ 15324      C0FBFFFF 
+ 15325              	.LBB3766:
+ 15326              	.LBB3767:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 15327              		.loc 2 178 0
+ 15328 dbc4 F30F6F85 		movdqu	-1088(%rbp), %xmm0
+ 15328      C0FBFFFF 
+ 15329 dbcc F30F6F8D 		movdqu	-1072(%rbp), %xmm1
+ 15329      D0FBFFFF 
+ 15330 dbd4 660FEFC1 		pxor	%xmm1, %xmm0
+ 15331              	.LBE3767:
+ 15332              	.LBE3766:
+ 15333              		.loc 2 1937 0
+ 15334 dbd8 F30F7F85 		movdqu	%xmm0, -9168(%rbp)
+ 15334      30DCFFFF 
+ 15335 dbe0 488B8598 		movq	-9832(%rbp), %rax
+ 15335      D9FFFF
+ 15336 dbe7 4805D000 		addq	$208, %rax
+ 15336      0000
+ 15337 dbed F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 15337      30DCFFFF 
+ 15338 dbf5 F30F7F00 		movdqu	%xmm0, (%rax)
+ 15339 dbf9 F30F6F85 		movdqu	-9168(%rbp), %xmm0
+ 15339      30DCFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 468
+
+
+ 15340 dc01 F30F7F85 		movdqu	%xmm0, -1040(%rbp)
+ 15340      F0FBFFFF 
+ 15341              	.LBB3768:
+ 15342              	.LBB3769:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 15343              		.loc 2 1681 0
+ 15344 dc09 B8400000 		movl	$64, %eax
+ 15344      00
+ 15345 dc0e 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 15345      00000000 
+ 15346 dc16 F30F7F85 		movdqu	%xmm0, -1008(%rbp)
+ 15346      10FCFFFF 
+ 15347 dc1e 89850CFC 		movl	%eax, -1012(%rbp)
+ 15347      FFFF
+ 15348 dc24 F30F6F85 		movdqu	-1008(%rbp), %xmm0
+ 15348      10FCFFFF 
+ 15349 dc2c F30F7F85 		movdqu	%xmm0, -976(%rbp)
+ 15349      30FCFFFF 
+ 15350 dc34 8B850CFC 		movl	-1012(%rbp), %eax
+ 15350      FFFF
+ 15351 dc3a 89852CFC 		movl	%eax, -980(%rbp)
+ 15351      FFFF
+ 15352              	.LBB3770:
+ 15353              	.LBB3771:
+ 15354              	.LBB3772:
+ 15355              	.LBB3773:
+ 15356              		.loc 3 598 0
+ 15357 dc40 8B852CFC 		movl	-980(%rbp), %eax
+ 15357      FFFF
+ 15358 dc46 F30F6F85 		movdqu	-976(%rbp), %xmm0
+ 15358      30FCFFFF 
+ 15359 dc4e 660F3A22 		pinsrd	$3, %eax, %xmm0
+ 15359      C003
+ 15360              	.LBE3773:
+ 15361              	.LBE3772:
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_PINSRUD (state, column, which);
+ 15362              		.loc 2 519 0
+ 15363 dc54 F30F7F85 		movdqu	%xmm0, -1008(%rbp)
+ 15363      10FCFFFF 
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 15364              		.loc 2 526 0
+ 15365 dc5c F30F6F85 		movdqu	-1008(%rbp), %xmm0
+ 15365      10FCFFFF 
+ 15366              	.LBE3771:
+ 15367              	.LBE3770:
+1681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vrcon = AESBCMEMBER(SetColumn) (vec_00, (AESWord)rcon, 3);
+ 15368              		.loc 2 1681 0
+ 15369 dc64 660F7F85 		movdqa	%xmm0, -9872(%rbp)
+ 15369      70D9FFFF 
+ 15370 dc6c F30F6F85 		movdqu	-1040(%rbp), %xmm0
+ 15370      F0FBFFFF 
+ 15371 dc74 F30F7F85 		movdqu	%xmm0, -960(%rbp)
+ 15371      40FCFFFF 
+ 15372 dc7c F30F6F85 		movdqu	-960(%rbp), %xmm0
+ 15372      40FCFFFF 
+ 15373 dc84 F30F7F85 		movdqu	%xmm0, -928(%rbp)
+ 15373      60FCFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 469
+
+
+ 15374 dc8c 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 15374      000000
+ 15375 dc93 48898558 		movq	%rax, -936(%rbp)
+ 15375      FCFFFF
+ 15376              	.LBB3774:
+ 15377              	.LBB3775:
+ 15378              	.LBB3776:
+ 15379              	.LBB3777:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 15380              		.loc 2 851 0
+ 15381 dc9a 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 15381      00000000 
+ 15382 dca2 F30F7F85 		movdqu	%xmm0, -896(%rbp)
+ 15382      80FCFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 15383              		.loc 2 854 0
+ 15384 dcaa 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 15384      00000000 
+ 15385 dcb2 F30F6F8D 		movdqu	-928(%rbp), %xmm1
+ 15385      60FCFFFF 
+ 15386 dcba F30F7F8D 		movdqu	%xmm1, -816(%rbp)
+ 15386      D0FCFFFF 
+ 15387 dcc2 F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 15387      C0FCFFFF 
+ 15388              	.LBB3778:
+ 15389              	.LBB3779:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 15390              		.loc 2 206 0
+ 15391 dcca F30F6F85 		movdqu	-832(%rbp), %xmm0
+ 15391      C0FCFFFF 
+ 15392 dcd2 F30F6F8D 		movdqu	-816(%rbp), %xmm1
+ 15392      D0FCFFFF 
+ 15393 dcda 660FDBC1 		pand	%xmm1, %xmm0
+ 15394              	.LBE3779:
+ 15395              	.LBE3778:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 15396              		.loc 2 854 0
+ 15397 dcde F30F7F85 		movdqu	%xmm0, -848(%rbp)
+ 15397      B0FCFFFF 
+ 15398 dce6 F30F6F85 		movdqu	-928(%rbp), %xmm0
+ 15398      60FCFFFF 
+ 15399 dcee F30F7F85 		movdqu	%xmm0, -784(%rbp)
+ 15399      F0FCFFFF 
+ 15400              	.LBB3780:
+ 15401              	.LBB3781:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 15402              		.loc 3 433 0
+ 15403 dcf6 F30F6F85 		movdqu	-784(%rbp), %xmm0
+ 15403      F0FCFFFF 
+ 15404 dcfe 660F72D0 		psrld	$4, %xmm0
+ 15404      04
+ 15405              	.LBE3781:
+ 15406              	.LBE3780:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 15407              		.loc 2 857 0
+ 15408 dd03 F30F7F85 		movdqu	%xmm0, -864(%rbp)
+ 15408      A0FCFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 470
+
+
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 15409              		.loc 2 859 0
+ 15410 dd0b 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 15410      00000000 
+ 15411 dd13 F30F6F8D 		movdqu	-864(%rbp), %xmm1
+ 15411      A0FCFFFF 
+ 15412 dd1b F30F7F8D 		movdqu	%xmm1, -752(%rbp)
+ 15412      10FDFFFF 
+ 15413 dd23 F30F7F85 		movdqu	%xmm0, -768(%rbp)
+ 15413      00FDFFFF 
+ 15414              	.LBB3782:
+ 15415              	.LBB3783:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 15416              		.loc 2 206 0
+ 15417 dd2b F30F6F85 		movdqu	-768(%rbp), %xmm0
+ 15417      00FDFFFF 
+ 15418 dd33 F30F6F8D 		movdqu	-752(%rbp), %xmm1
+ 15418      10FDFFFF 
+ 15419 dd3b 660FDBC1 		pand	%xmm1, %xmm0
+ 15420              	.LBE3783:
+ 15421              	.LBE3782:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 15422              		.loc 2 859 0
+ 15423 dd3f F30F7F85 		movdqu	%xmm0, -864(%rbp)
+ 15423      A0FCFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 15424              		.loc 2 866 0
+ 15425 dd47 C7857CFC 		movl	$0, -900(%rbp)
+ 15425      FFFF0000 
+ 15425      0000
+ 15426 dd51 E9BE0100 		jmp	.L228
+ 15426      00
+ 15427              	.L229:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 15428              		.loc 2 868 0
+ 15429 dd56 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 15429      00000000 
+ 15430 dd5e F30F7F85 		movdqu	%xmm0, -720(%rbp)
+ 15430      30FDFFFF 
+ 15431 dd66 F30F6F85 		movdqu	-864(%rbp), %xmm0
+ 15431      A0FCFFFF 
+ 15432 dd6e F30F7F85 		movdqu	%xmm0, -736(%rbp)
+ 15432      20FDFFFF 
+ 15433 dd76 F30F6F85 		movdqu	-720(%rbp), %xmm0
+ 15433      30FDFFFF 
+ 15434 dd7e F30F7F85 		movdqu	%xmm0, -688(%rbp)
+ 15434      50FDFFFF 
+ 15435 dd86 F30F6F85 		movdqu	-736(%rbp), %xmm0
+ 15435      20FDFFFF 
+ 15436 dd8e F30F7F85 		movdqu	%xmm0, -704(%rbp)
+ 15436      40FDFFFF 
+ 15437              	.LBB3784:
+ 15438              	.LBB3785:
+ 15439              	.LBB3786:
+ 15440              	.LBB3787:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15441              		.loc 3 529 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 471
+
+
+ 15442 dd96 F30F6F8D 		movdqu	-704(%rbp), %xmm1
+ 15442      40FDFFFF 
+ 15443 dd9e F30F6F85 		movdqu	-688(%rbp), %xmm0
+ 15443      50FDFFFF 
+ 15444 dda6 660F3800 		pshufb	%xmm1, %xmm0
+ 15444      C1
+ 15445              	.LBE3787:
+ 15446              	.LBE3786:
+ 15447              	.LBE3785:
+ 15448              	.LBE3784:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 15449              		.loc 2 868 0
+ 15450 ddab F30F7F85 		movdqu	%xmm0, -880(%rbp)
+ 15450      90FCFFFF 
+ 15451 ddb3 F30F6F85 		movdqu	-848(%rbp), %xmm0
+ 15451      B0FCFFFF 
+ 15452 ddbb F30F7F85 		movdqu	%xmm0, -656(%rbp)
+ 15452      70FDFFFF 
+ 15453 ddc3 F30F6F85 		movdqu	-880(%rbp), %xmm0
+ 15453      90FCFFFF 
+ 15454 ddcb F30F7F85 		movdqu	%xmm0, -672(%rbp)
+ 15454      60FDFFFF 
+ 15455              	.LBB3788:
+ 15456              	.LBB3789:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 15457              		.loc 2 234 0
+ 15458 ddd3 F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 15458      60FDFFFF 
+ 15459 dddb F30F6F8D 		movdqu	-656(%rbp), %xmm1
+ 15459      70FDFFFF 
+ 15460 dde3 660FEBC1 		por	%xmm1, %xmm0
+ 15461              	.LBE3789:
+ 15462              	.LBE3788:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 15463              		.loc 2 870 0
+ 15464 dde7 F30F7F85 		movdqu	%xmm0, -880(%rbp)
+ 15464      90FCFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 15465              		.loc 2 872 0
+ 15466 ddef 8B857CFC 		mov	-900(%rbp), %eax
+ 15466      FFFF
+ 15467 ddf5 48C1E004 		salq	$4, %rax
+ 15468 ddf9 48038558 		addq	-936(%rbp), %rax
+ 15468      FCFFFF
+ 15469 de00 660F6F00 		movdqa	(%rax), %xmm0
+ 15470 de04 F30F7F85 		movdqu	%xmm0, -624(%rbp)
+ 15470      90FDFFFF 
+ 15471 de0c F30F6F85 		movdqu	-880(%rbp), %xmm0
+ 15471      90FCFFFF 
+ 15472 de14 F30F7F85 		movdqu	%xmm0, -640(%rbp)
+ 15472      80FDFFFF 
+ 15473 de1c F30F6F85 		movdqu	-624(%rbp), %xmm0
+ 15473      90FDFFFF 
+ 15474 de24 F30F7F85 		movdqu	%xmm0, -592(%rbp)
+ 15474      B0FDFFFF 
+ 15475 de2c F30F6F85 		movdqu	-640(%rbp), %xmm0
+ 15475      80FDFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 472
+
+
+ 15476 de34 F30F7F85 		movdqu	%xmm0, -608(%rbp)
+ 15476      A0FDFFFF 
+ 15477              	.LBB3790:
+ 15478              	.LBB3791:
+ 15479              	.LBB3792:
+ 15480              	.LBB3793:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15481              		.loc 3 529 0
+ 15482 de3c F30F6F8D 		movdqu	-608(%rbp), %xmm1
+ 15482      A0FDFFFF 
+ 15483 de44 F30F6F85 		movdqu	-592(%rbp), %xmm0
+ 15483      B0FDFFFF 
+ 15484 de4c 660F3800 		pshufb	%xmm1, %xmm0
+ 15484      C1
+ 15485              	.LBE3793:
+ 15486              	.LBE3792:
+ 15487              	.LBE3791:
+ 15488              	.LBE3790:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 15489              		.loc 2 872 0
+ 15490 de51 F30F7F85 		movdqu	%xmm0, -880(%rbp)
+ 15490      90FCFFFF 
+ 15491 de59 F30F6F85 		movdqu	-896(%rbp), %xmm0
+ 15491      80FCFFFF 
+ 15492 de61 F30F7F85 		movdqu	%xmm0, -560(%rbp)
+ 15492      D0FDFFFF 
+ 15493 de69 F30F6F85 		movdqu	-880(%rbp), %xmm0
+ 15493      90FCFFFF 
+ 15494 de71 F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 15494      C0FDFFFF 
+ 15495              	.LBB3794:
+ 15496              	.LBB3795:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 15497              		.loc 2 234 0
+ 15498 de79 F30F6F85 		movdqu	-576(%rbp), %xmm0
+ 15498      C0FDFFFF 
+ 15499 de81 F30F6F8D 		movdqu	-560(%rbp), %xmm1
+ 15499      D0FDFFFF 
+ 15500 de89 660FEBC1 		por	%xmm1, %xmm0
+ 15501              	.LBE3795:
+ 15502              	.LBE3794:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 15503              		.loc 2 874 0
+ 15504 de8d F30F7F85 		movdqu	%xmm0, -896(%rbp)
+ 15504      80FCFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 15505              		.loc 2 876 0
+ 15506 de95 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 15506      00000000 
+ 15507 de9d F30F6F8D 		movdqu	-864(%rbp), %xmm1
+ 15507      A0FCFFFF 
+ 15508 dea5 F30F7F8D 		movdqu	%xmm1, -528(%rbp)
+ 15508      F0FDFFFF 
+ 15509 dead F30F7F85 		movdqu	%xmm0, -544(%rbp)
+ 15509      E0FDFFFF 
+ 15510              	.LBB3796:
+ 15511              	.LBB3797:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 473
+
+
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 15512              		.loc 2 290 0
+ 15513 deb5 F30F6F8D 		movdqu	-544(%rbp), %xmm1
+ 15513      E0FDFFFF 
+ 15514 debd F30F6F85 		movdqu	-528(%rbp), %xmm0
+ 15514      F0FDFFFF 
+ 15515 dec5 660FF8C1 		psubb	%xmm1, %xmm0
+ 15516              	.LBE3797:
+ 15517              	.LBE3796:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 15518              		.loc 2 876 0
+ 15519 dec9 F30F7F85 		movdqu	%xmm0, -864(%rbp)
+ 15519      A0FCFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 15520              		.loc 2 878 0
+ 15521 ded1 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 15521      00000000 
+ 15522 ded9 F30F6F8D 		movdqu	-864(%rbp), %xmm1
+ 15522      A0FCFFFF 
+ 15523 dee1 F30F7F8D 		movdqu	%xmm1, -496(%rbp)
+ 15523      10FEFFFF 
+ 15524 dee9 F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 15524      00FEFFFF 
+ 15525              	.LBB3798:
+ 15526              	.LBB3799:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 15527              		.loc 2 206 0
+ 15528 def1 F30F6F85 		movdqu	-512(%rbp), %xmm0
+ 15528      00FEFFFF 
+ 15529 def9 F30F6F8D 		movdqu	-496(%rbp), %xmm1
+ 15529      10FEFFFF 
+ 15530 df01 660FDBC1 		pand	%xmm1, %xmm0
+ 15531              	.LBE3799:
+ 15532              	.LBE3798:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 15533              		.loc 2 878 0
+ 15534 df05 F30F7F85 		movdqu	%xmm0, -864(%rbp)
+ 15534      A0FCFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 15535              		.loc 2 866 0
+ 15536 df0d 83857CFC 		addl	$1, -900(%rbp)
+ 15536      FFFF01
+ 15537              	.L228:
+ 15538 df14 83BD7CFC 		cmpl	$15, -900(%rbp)
+ 15538      FFFF0F
+ 15539 df1b 0F8635FE 		jbe	.L229
+ 15539      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 15540              		.loc 2 882 0
+ 15541 df21 F30F6F85 		movdqu	-896(%rbp), %xmm0
+ 15541      80FCFFFF 
+ 15542              	.LBE3777:
+ 15543              	.LBE3776:
+ 15544              	.LBE3775:
+ 15545              	.LBE3774:
+1682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(SubBytes) (state);
+ 15546              		.loc 2 1682 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 474
+
+
+ 15547 df29 660F7F85 		movdqa	%xmm0, -9888(%rbp)
+ 15547      60D9FFFF 
+ 15548              	.LBB3800:
+1683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("SubBytes", tmp);
+ 15549              		.loc 2 1683 0
+ 15550 df31 660F6F85 		movdqa	-9888(%rbp), %xmm0
+ 15550      60D9FFFF 
+ 15551 df39 F30F7F85 		movdqu	%xmm0, -9200(%rbp)
+ 15551      10DCFFFF 
+ 15552 df41 E8000000 		call	KDbgWriterGet at PLT
+ 15552      00
+ 15553 df46 4885C0   		testq	%rax, %rax
+ 15554 df49 7479     		je	.L231
+ 15555 df4b BF010000 		movl	$1, %edi
+ 15555      00
+ 15556 df50 E8000000 		call	KDbgCondToFlag at PLT
+ 15556      00
+ 15557 df55 4889C6   		movq	%rax, %rsi
+ 15558 df58 BF100000 		movl	$16, %edi
+ 15558      00
+ 15559 df5d E8000000 		call	KDbgTestModConds at PLT
+ 15559      00
+ 15560 df62 84C0     		testb	%al, %al
+ 15561 df64 745E     		je	.L231
+ 15562 df66 8B851CDC 		movl	-9188(%rbp), %eax
+ 15562      FFFF
+ 15563 df6c 89C7     		movl	%eax, %edi
+ 15564 df6e E88D20FF 		call	bswap_32
+ 15564      FF
+ 15565 df73 4189C5   		movl	%eax, %r13d
+ 15566 df76 8B8518DC 		movl	-9192(%rbp), %eax
+ 15566      FFFF
+ 15567 df7c 89C7     		movl	%eax, %edi
+ 15568 df7e E87D20FF 		call	bswap_32
+ 15568      FF
+ 15569 df83 4189C4   		movl	%eax, %r12d
+ 15570 df86 8B8514DC 		movl	-9196(%rbp), %eax
+ 15570      FFFF
+ 15571 df8c 89C7     		movl	%eax, %edi
+ 15572 df8e E86D20FF 		call	bswap_32
+ 15572      FF
+ 15573 df93 89C3     		movl	%eax, %ebx
+ 15574 df95 8B8510DC 		movl	-9200(%rbp), %eax
+ 15574      FFFF
+ 15575 df9b 89C7     		movl	%eax, %edi
+ 15576 df9d E85E20FF 		call	bswap_32
+ 15576      FF
+ 15577 dfa2 4589E9   		movl	%r13d, %r9d
+ 15578 dfa5 4589E0   		movl	%r12d, %r8d
+ 15579 dfa8 89D9     		movl	%ebx, %ecx
+ 15580 dfaa 89C2     		movl	%eax, %edx
+ 15581 dfac 488D3500 		leaq	.LC0(%rip), %rsi
+ 15581      000000
+ 15582 dfb3 488D3D00 		leaq	.LC1(%rip), %rdi
+ 15582      000000
+ 15583 dfba B8000000 		movl	$0, %eax
+ 15583      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 475
+
+
+ 15584 dfbf E8000000 		call	KDbgMsg at PLT
+ 15584      00
+ 15585              	.L231:
+ 15586 dfc4 660F6F85 		movdqa	-9888(%rbp), %xmm0
+ 15586      60D9FFFF 
+ 15587 dfcc F30F7F85 		movdqu	%xmm0, -480(%rbp)
+ 15587      20FEFFFF 
+ 15588              	.LBE3800:
+ 15589              	.LBB3801:
+ 15590              	.LBB3802:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 15591              		.loc 2 667 0
+ 15592 dfd4 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 15592      00000000 
+ 15593 dfdc F30F6F8D 		movdqu	-480(%rbp), %xmm1
+ 15593      20FEFFFF 
+ 15594 dfe4 F30F7F8D 		movdqu	%xmm1, -448(%rbp)
+ 15594      40FEFFFF 
+ 15595 dfec F30F7F85 		movdqu	%xmm0, -464(%rbp)
+ 15595      30FEFFFF 
+ 15596 dff4 F30F6F85 		movdqu	-448(%rbp), %xmm0
+ 15596      40FEFFFF 
+ 15597 dffc F30F7F85 		movdqu	%xmm0, -416(%rbp)
+ 15597      60FEFFFF 
+ 15598 e004 F30F6F85 		movdqu	-464(%rbp), %xmm0
+ 15598      30FEFFFF 
+ 15599 e00c F30F7F85 		movdqu	%xmm0, -432(%rbp)
+ 15599      50FEFFFF 
+ 15600              	.LBB3803:
+ 15601              	.LBB3804:
+ 15602              	.LBB3805:
+ 15603              	.LBB3806:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15604              		.loc 3 529 0
+ 15605 e014 F30F6F8D 		movdqu	-432(%rbp), %xmm1
+ 15605      50FEFFFF 
+ 15606 e01c F30F6F85 		movdqu	-416(%rbp), %xmm0
+ 15606      60FEFFFF 
+ 15607 e024 660F3800 		pshufb	%xmm1, %xmm0
+ 15607      C1
+ 15608              	.LBE3806:
+ 15609              	.LBE3805:
+ 15610              	.LBE3804:
+ 15611              	.LBE3803:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 15612              		.loc 2 667 0
+ 15613 e029 F30F7F85 		movdqu	%xmm0, -480(%rbp)
+ 15613      20FEFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 15614              		.loc 2 668 0
+ 15615 e031 F30F6F85 		movdqu	-480(%rbp), %xmm0
+ 15615      20FEFFFF 
+ 15616              	.LBE3802:
+ 15617              	.LBE3801:
+1684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(RotBytesLeft) (tmp);
+ 15618              		.loc 2 1684 0
+ 15619 e039 660F7F85 		movdqa	%xmm0, -9888(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 476
+
+
+ 15619      60D9FFFF 
+ 15620              	.LBB3807:
+1685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("RotBytesLeft", tmp);
+ 15621              		.loc 2 1685 0
+ 15622 e041 660F6F85 		movdqa	-9888(%rbp), %xmm0
+ 15622      60D9FFFF 
+ 15623 e049 F30F7F85 		movdqu	%xmm0, -9216(%rbp)
+ 15623      00DCFFFF 
+ 15624 e051 E8000000 		call	KDbgWriterGet at PLT
+ 15624      00
+ 15625 e056 4885C0   		testq	%rax, %rax
+ 15626 e059 7479     		je	.L233
+ 15627 e05b BF010000 		movl	$1, %edi
+ 15627      00
+ 15628 e060 E8000000 		call	KDbgCondToFlag at PLT
+ 15628      00
+ 15629 e065 4889C6   		movq	%rax, %rsi
+ 15630 e068 BF100000 		movl	$16, %edi
+ 15630      00
+ 15631 e06d E8000000 		call	KDbgTestModConds at PLT
+ 15631      00
+ 15632 e072 84C0     		testb	%al, %al
+ 15633 e074 745E     		je	.L233
+ 15634 e076 8B850CDC 		movl	-9204(%rbp), %eax
+ 15634      FFFF
+ 15635 e07c 89C7     		movl	%eax, %edi
+ 15636 e07e E87D1FFF 		call	bswap_32
+ 15636      FF
+ 15637 e083 4189C5   		movl	%eax, %r13d
+ 15638 e086 8B8508DC 		movl	-9208(%rbp), %eax
+ 15638      FFFF
+ 15639 e08c 89C7     		movl	%eax, %edi
+ 15640 e08e E86D1FFF 		call	bswap_32
+ 15640      FF
+ 15641 e093 4189C4   		movl	%eax, %r12d
+ 15642 e096 8B8504DC 		movl	-9212(%rbp), %eax
+ 15642      FFFF
+ 15643 e09c 89C7     		movl	%eax, %edi
+ 15644 e09e E85D1FFF 		call	bswap_32
+ 15644      FF
+ 15645 e0a3 89C3     		movl	%eax, %ebx
+ 15646 e0a5 8B8500DC 		movl	-9216(%rbp), %eax
+ 15646      FFFF
+ 15647 e0ab 89C7     		movl	%eax, %edi
+ 15648 e0ad E84E1FFF 		call	bswap_32
+ 15648      FF
+ 15649 e0b2 4589E9   		movl	%r13d, %r9d
+ 15650 e0b5 4589E0   		movl	%r12d, %r8d
+ 15651 e0b8 89D9     		movl	%ebx, %ecx
+ 15652 e0ba 89C2     		movl	%eax, %edx
+ 15653 e0bc 488D3500 		leaq	.LC2(%rip), %rsi
+ 15653      000000
+ 15654 e0c3 488D3D00 		leaq	.LC1(%rip), %rdi
+ 15654      000000
+ 15655 e0ca B8000000 		movl	$0, %eax
+ 15655      00
+ 15656 e0cf E8000000 		call	KDbgMsg at PLT
+
GAS LISTING /tmp/ccjbMjHD.s 			page 477
+
+
+ 15656      00
+ 15657              	.L233:
+ 15658 e0d4 660F6F85 		movdqa	-9888(%rbp), %xmm0
+ 15658      60D9FFFF 
+ 15659 e0dc F30F7F85 		movdqu	%xmm0, -384(%rbp)
+ 15659      80FEFFFF 
+ 15660 e0e4 660F6F85 		movdqa	-9872(%rbp), %xmm0
+ 15660      70D9FFFF 
+ 15661 e0ec F30F7F85 		movdqu	%xmm0, -400(%rbp)
+ 15661      70FEFFFF 
+ 15662              	.LBE3807:
+ 15663              	.LBB3808:
+ 15664              	.LBB3809:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 15665              		.loc 2 178 0
+ 15666 e0f4 F30F6F85 		movdqu	-400(%rbp), %xmm0
+ 15666      70FEFFFF 
+ 15667 e0fc F30F6F8D 		movdqu	-384(%rbp), %xmm1
+ 15667      80FEFFFF 
+ 15668 e104 660FEFC1 		pxor	%xmm1, %xmm0
+ 15669              	.LBE3809:
+ 15670              	.LBE3808:
+1686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(VecXor)(tmp, vrcon);
+ 15671              		.loc 2 1686 0
+ 15672 e108 660F7F85 		movdqa	%xmm0, -9888(%rbp)
+ 15672      60D9FFFF 
+ 15673              	.LBB3810:
+1687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("VecXor", tmp);
+ 15674              		.loc 2 1687 0
+ 15675 e110 660F6F85 		movdqa	-9888(%rbp), %xmm0
+ 15675      60D9FFFF 
+ 15676 e118 F30F7F85 		movdqu	%xmm0, -9232(%rbp)
+ 15676      F0DBFFFF 
+ 15677 e120 E8000000 		call	KDbgWriterGet at PLT
+ 15677      00
+ 15678 e125 4885C0   		testq	%rax, %rax
+ 15679 e128 7479     		je	.L235
+ 15680 e12a BF010000 		movl	$1, %edi
+ 15680      00
+ 15681 e12f E8000000 		call	KDbgCondToFlag at PLT
+ 15681      00
+ 15682 e134 4889C6   		movq	%rax, %rsi
+ 15683 e137 BF100000 		movl	$16, %edi
+ 15683      00
+ 15684 e13c E8000000 		call	KDbgTestModConds at PLT
+ 15684      00
+ 15685 e141 84C0     		testb	%al, %al
+ 15686 e143 745E     		je	.L235
+ 15687 e145 8B85FCDB 		movl	-9220(%rbp), %eax
+ 15687      FFFF
+ 15688 e14b 89C7     		movl	%eax, %edi
+ 15689 e14d E8AE1EFF 		call	bswap_32
+ 15689      FF
+ 15690 e152 4189C5   		movl	%eax, %r13d
+ 15691 e155 8B85F8DB 		movl	-9224(%rbp), %eax
+ 15691      FFFF
+ 15692 e15b 89C7     		movl	%eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 478
+
+
+ 15693 e15d E89E1EFF 		call	bswap_32
+ 15693      FF
+ 15694 e162 4189C4   		movl	%eax, %r12d
+ 15695 e165 8B85F4DB 		movl	-9228(%rbp), %eax
+ 15695      FFFF
+ 15696 e16b 89C7     		movl	%eax, %edi
+ 15697 e16d E88E1EFF 		call	bswap_32
+ 15697      FF
+ 15698 e172 89C3     		movl	%eax, %ebx
+ 15699 e174 8B85F0DB 		movl	-9232(%rbp), %eax
+ 15699      FFFF
+ 15700 e17a 89C7     		movl	%eax, %edi
+ 15701 e17c E87F1EFF 		call	bswap_32
+ 15701      FF
+ 15702 e181 4589E9   		movl	%r13d, %r9d
+ 15703 e184 4589E0   		movl	%r12d, %r8d
+ 15704 e187 89D9     		movl	%ebx, %ecx
+ 15705 e189 89C2     		movl	%eax, %edx
+ 15706 e18b 488D3500 		leaq	.LC3(%rip), %rsi
+ 15706      000000
+ 15707 e192 488D3D00 		leaq	.LC1(%rip), %rdi
+ 15707      000000
+ 15708 e199 B8000000 		movl	$0, %eax
+ 15708      00
+ 15709 e19e E8000000 		call	KDbgMsg at PLT
+ 15709      00
+ 15710              	.L235:
+ 15711 e1a3 660F6F85 		movdqa	-9888(%rbp), %xmm0
+ 15711      60D9FFFF 
+ 15712 e1ab F30F7F85 		movdqu	%xmm0, -368(%rbp)
+ 15712      90FEFFFF 
+ 15713 e1b3 F30F6F85 		movdqu	-368(%rbp), %xmm0
+ 15713      90FEFFFF 
+ 15714 e1bb F30F7F85 		movdqu	%xmm0, -336(%rbp)
+ 15714      B0FEFFFF 
+ 15715              	.LBE3810:
+ 15716              	.LBB3811:
+ 15717              	.LBB3812:
+ 15718              	.LBB3813:
+ 15719              	.LBB3814:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufd ((v128_i32_t)vin, mask);
+ 15720              		.loc 3 450 0
+ 15721 e1c3 F30F6F85 		movdqu	-336(%rbp), %xmm0
+ 15721      B0FEFFFF 
+ 15722 e1cb 660F70C0 		pshufd	$255, %xmm0, %xmm0
+ 15722      FF
+ 15723              	.LBE3814:
+ 15724              	.LBE3813:
+ 15725              	.LBE3812:
+ 15726              	.LBE3811:
+1688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     tmp = AESBCMEMBER(StateDupColumn3) (tmp);
+ 15727              		.loc 2 1688 0
+ 15728 e1d0 660F7F85 		movdqa	%xmm0, -9888(%rbp)
+ 15728      60D9FFFF 
+ 15729              	.LBB3815:
+1689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("StateDupColumn3", tmp);
+ 15730              		.loc 2 1689 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 479
+
+
+ 15731 e1d8 660F6F85 		movdqa	-9888(%rbp), %xmm0
+ 15731      60D9FFFF 
+ 15732 e1e0 F30F7F85 		movdqu	%xmm0, -9248(%rbp)
+ 15732      E0DBFFFF 
+ 15733 e1e8 E8000000 		call	KDbgWriterGet at PLT
+ 15733      00
+ 15734 e1ed 4885C0   		testq	%rax, %rax
+ 15735 e1f0 7479     		je	.L237
+ 15736 e1f2 BF010000 		movl	$1, %edi
+ 15736      00
+ 15737 e1f7 E8000000 		call	KDbgCondToFlag at PLT
+ 15737      00
+ 15738 e1fc 4889C6   		movq	%rax, %rsi
+ 15739 e1ff BF100000 		movl	$16, %edi
+ 15739      00
+ 15740 e204 E8000000 		call	KDbgTestModConds at PLT
+ 15740      00
+ 15741 e209 84C0     		testb	%al, %al
+ 15742 e20b 745E     		je	.L237
+ 15743 e20d 8B85ECDB 		movl	-9236(%rbp), %eax
+ 15743      FFFF
+ 15744 e213 89C7     		movl	%eax, %edi
+ 15745 e215 E8E61DFF 		call	bswap_32
+ 15745      FF
+ 15746 e21a 4189C5   		movl	%eax, %r13d
+ 15747 e21d 8B85E8DB 		movl	-9240(%rbp), %eax
+ 15747      FFFF
+ 15748 e223 89C7     		movl	%eax, %edi
+ 15749 e225 E8D61DFF 		call	bswap_32
+ 15749      FF
+ 15750 e22a 4189C4   		movl	%eax, %r12d
+ 15751 e22d 8B85E4DB 		movl	-9244(%rbp), %eax
+ 15751      FFFF
+ 15752 e233 89C7     		movl	%eax, %edi
+ 15753 e235 E8C61DFF 		call	bswap_32
+ 15753      FF
+ 15754 e23a 89C3     		movl	%eax, %ebx
+ 15755 e23c 8B85E0DB 		movl	-9248(%rbp), %eax
+ 15755      FFFF
+ 15756 e242 89C7     		movl	%eax, %edi
+ 15757 e244 E8B71DFF 		call	bswap_32
+ 15757      FF
+ 15758 e249 4589E9   		movl	%r13d, %r9d
+ 15759 e24c 4589E0   		movl	%r12d, %r8d
+ 15760 e24f 89D9     		movl	%ebx, %ecx
+ 15761 e251 89C2     		movl	%eax, %edx
+ 15762 e253 488D3500 		leaq	.LC4(%rip), %rsi
+ 15762      000000
+ 15763 e25a 488D3D00 		leaq	.LC1(%rip), %rdi
+ 15763      000000
+ 15764 e261 B8000000 		movl	$0, %eax
+ 15764      00
+ 15765 e266 E8000000 		call	KDbgMsg at PLT
+ 15765      00
+ 15766              	.L237:
+ 15767              	.LBE3815:
+1690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return tmp;
+
GAS LISTING /tmp/ccjbMjHD.s 			page 480
+
+
+ 15768              		.loc 2 1690 0
+ 15769 e26b 660F6F85 		movdqa	-9888(%rbp), %xmm0
+ 15769      60D9FFFF 
+ 15770              	.LBE3769:
+ 15771              	.LBE3768:
+1938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     KE256_1(14,0x40);   /* k56 : k57 : k58 : k59 */
+ 15772              		.loc 2 1938 0
+ 15773 e273 F30F7F85 		movdqu	%xmm0, -9152(%rbp)
+ 15773      40DCFFFF 
+ 15774 e27b F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 15774      20DCFFFF 
+ 15775 e283 F30F7F85 		movdqu	%xmm0, -320(%rbp)
+ 15775      C0FEFFFF 
+ 15776              	.LBB3816:
+ 15777              	.LBB3817:
+1565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     register CipherVec shift = state;
+ 15778              		.loc 2 1565 0
+ 15779 e28b F30F6F85 		movdqu	-320(%rbp), %xmm0
+ 15779      C0FEFFFF 
+ 15780 e293 660F7F85 		movdqa	%xmm0, -9856(%rbp)
+ 15780      80D9FFFF 
+ 15781 e29b 660F6F85 		movdqa	-9856(%rbp), %xmm0
+ 15781      80D9FFFF 
+ 15782 e2a3 F30F7F85 		movdqu	%xmm0, -304(%rbp)
+ 15782      D0FEFFFF 
+ 15783              	.LBB3818:
+ 15784              	.LBB3819:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 15785              		.loc 2 1278 0
+ 15786 e2ab 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 15786      00000000 
+ 15787 e2b3 F30F6F8D 		movdqu	-304(%rbp), %xmm1
+ 15787      D0FEFFFF 
+ 15788 e2bb F30F7F8D 		movdqu	%xmm1, -272(%rbp)
+ 15788      F0FEFFFF 
+ 15789 e2c3 F30F7F85 		movdqu	%xmm0, -288(%rbp)
+ 15789      E0FEFFFF 
+ 15790 e2cb F30F6F85 		movdqu	-272(%rbp), %xmm0
+ 15790      F0FEFFFF 
+ 15791 e2d3 F30F7F85 		movdqu	%xmm0, -240(%rbp)
+ 15791      10FFFFFF 
+ 15792 e2db F30F6F85 		movdqu	-288(%rbp), %xmm0
+ 15792      E0FEFFFF 
+ 15793 e2e3 F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 15793      00FFFFFF 
+ 15794              	.LBB3820:
+ 15795              	.LBB3821:
+ 15796              	.LBB3822:
+ 15797              	.LBB3823:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15798              		.loc 3 529 0
+ 15799 e2eb F30F6F8D 		movdqu	-256(%rbp), %xmm1
+ 15799      00FFFFFF 
+ 15800 e2f3 F30F6F85 		movdqu	-240(%rbp), %xmm0
+ 15800      10FFFFFF 
+ 15801 e2fb 660F3800 		pshufb	%xmm1, %xmm0
+ 15801      C1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 481
+
+
+ 15802              	.LBE3823:
+ 15803              	.LBE3822:
+ 15804              	.LBE3821:
+ 15805              	.LBE3820:
+ 15806              	.LBE3819:
+ 15807              	.LBE3818:
+1567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15808              		.loc 2 1567 0
+ 15809 e300 660F7F85 		movdqa	%xmm0, -9856(%rbp)
+ 15809      80D9FFFF 
+ 15810 e308 660F6F85 		movdqa	-9856(%rbp), %xmm0
+ 15810      80D9FFFF 
+ 15811 e310 660FEF85 		pxor	-320(%rbp), %xmm0
+ 15811      C0FEFFFF 
+ 15812 e318 F30F7F85 		movdqu	%xmm0, -320(%rbp)
+ 15812      C0FEFFFF 
+ 15813 e320 660F6F85 		movdqa	-9856(%rbp), %xmm0
+ 15813      80D9FFFF 
+ 15814 e328 F30F7F85 		movdqu	%xmm0, -224(%rbp)
+ 15814      20FFFFFF 
+ 15815              	.LBB3824:
+ 15816              	.LBB3825:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 15817              		.loc 2 1278 0
+ 15818 e330 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 15818      00000000 
+ 15819 e338 F30F6F8D 		movdqu	-224(%rbp), %xmm1
+ 15819      20FFFFFF 
+ 15820 e340 F30F7F8D 		movdqu	%xmm1, -192(%rbp)
+ 15820      40FFFFFF 
+ 15821 e348 F30F7F85 		movdqu	%xmm0, -208(%rbp)
+ 15821      30FFFFFF 
+ 15822 e350 F30F6F85 		movdqu	-192(%rbp), %xmm0
+ 15822      40FFFFFF 
+ 15823 e358 F30F7F85 		movdqu	%xmm0, -160(%rbp)
+ 15823      60FFFFFF 
+ 15824 e360 F30F6F85 		movdqu	-208(%rbp), %xmm0
+ 15824      30FFFFFF 
+ 15825 e368 F30F7F85 		movdqu	%xmm0, -176(%rbp)
+ 15825      50FFFFFF 
+ 15826              	.LBB3826:
+ 15827              	.LBB3827:
+ 15828              	.LBB3828:
+ 15829              	.LBB3829:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15830              		.loc 3 529 0
+ 15831 e370 F30F6F8D 		movdqu	-176(%rbp), %xmm1
+ 15831      50FFFFFF 
+ 15832 e378 F30F6F85 		movdqu	-160(%rbp), %xmm0
+ 15832      60FFFFFF 
+ 15833 e380 660F3800 		pshufb	%xmm1, %xmm0
+ 15833      C1
+ 15834              	.LBE3829:
+ 15835              	.LBE3828:
+ 15836              	.LBE3827:
+ 15837              	.LBE3826:
+ 15838              	.LBE3825:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 482
+
+
+ 15839              	.LBE3824:
+1568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15840              		.loc 2 1568 0
+ 15841 e385 660F7F85 		movdqa	%xmm0, -9856(%rbp)
+ 15841      80D9FFFF 
+ 15842 e38d 660F6F85 		movdqa	-9856(%rbp), %xmm0
+ 15842      80D9FFFF 
+ 15843 e395 660FEF85 		pxor	-320(%rbp), %xmm0
+ 15843      C0FEFFFF 
+ 15844 e39d F30F7F85 		movdqu	%xmm0, -320(%rbp)
+ 15844      C0FEFFFF 
+ 15845 e3a5 660F6F85 		movdqa	-9856(%rbp), %xmm0
+ 15845      80D9FFFF 
+ 15846 e3ad F30F7F85 		movdqu	%xmm0, -144(%rbp)
+ 15846      70FFFFFF 
+ 15847              	.LBB3830:
+ 15848              	.LBB3831:
+1278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(PackShuffleBytes) (state, mask);
+ 15849              		.loc 2 1278 0
+ 15850 e3b5 660F6F05 		movdqa	mask.7943(%rip), %xmm0
+ 15850      00000000 
+ 15851 e3bd F30F6F8D 		movdqu	-144(%rbp), %xmm1
+ 15851      70FFFFFF 
+ 15852 e3c5 F30F7F4D 		movdqu	%xmm1, -112(%rbp)
+ 15852      90
+ 15853 e3ca F30F7F45 		movdqu	%xmm0, -128(%rbp)
+ 15853      80
+ 15854 e3cf F30F6F45 		movdqu	-112(%rbp), %xmm0
+ 15854      90
+ 15855 e3d4 F30F7F45 		movdqu	%xmm0, -80(%rbp)
+ 15855      B0
+ 15856 e3d9 F30F6F45 		movdqu	-128(%rbp), %xmm0
+ 15856      80
+ 15857 e3de F30F7F45 		movdqu	%xmm0, -96(%rbp)
+ 15857      A0
+ 15858              	.LBB3832:
+ 15859              	.LBB3833:
+ 15860              	.LBB3834:
+ 15861              	.LBB3835:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15862              		.loc 3 529 0
+ 15863 e3e3 F30F6F4D 		movdqu	-96(%rbp), %xmm1
+ 15863      A0
+ 15864 e3e8 F30F6F45 		movdqu	-80(%rbp), %xmm0
+ 15864      B0
+ 15865 e3ed 660F3800 		pshufb	%xmm1, %xmm0
+ 15865      C1
+ 15866              	.LBE3835:
+ 15867              	.LBE3834:
+ 15868              	.LBE3833:
+ 15869              	.LBE3832:
+ 15870              	.LBE3831:
+ 15871              	.LBE3830:
+1569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state ^= shift = AESBCMEMBER(StateShiftLeft32) (shift);
+ 15872              		.loc 2 1569 0
+ 15873 e3f2 660F7F85 		movdqa	%xmm0, -9856(%rbp)
+ 15873      80D9FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 483
+
+
+ 15874 e3fa 660F6F85 		movdqa	-9856(%rbp), %xmm0
+ 15874      80D9FFFF 
+ 15875 e402 660FEF85 		pxor	-320(%rbp), %xmm0
+ 15875      C0FEFFFF 
+ 15876 e40a F30F7F85 		movdqu	%xmm0, -320(%rbp)
+ 15876      C0FEFFFF 
+1571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 15877              		.loc 2 1571 0
+ 15878 e412 F30F6F85 		movdqu	-320(%rbp), %xmm0
+ 15878      C0FEFFFF 
+ 15879              	.LBE3817:
+ 15880              	.LBE3816:
+ 15881              		.loc 2 1938 0
+ 15882 e41a F30F7F85 		movdqu	%xmm0, -9184(%rbp)
+ 15882      20DCFFFF 
+ 15883 e422 F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 15883      20DCFFFF 
+ 15884 e42a F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 15884      D0
+ 15885 e42f F30F6F85 		movdqu	-9152(%rbp), %xmm0
+ 15885      40DCFFFF 
+ 15886 e437 F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 15886      C0
+ 15887              	.LBB3836:
+ 15888              	.LBB3837:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 15889              		.loc 2 178 0
+ 15890 e43c F30F6F45 		movdqu	-64(%rbp), %xmm0
+ 15890      C0
+ 15891 e441 F30F6F4D 		movdqu	-48(%rbp), %xmm1
+ 15891      D0
+ 15892 e446 660FEFC1 		pxor	%xmm1, %xmm0
+ 15893              	.LBE3837:
+ 15894              	.LBE3836:
+ 15895              		.loc 2 1938 0
+ 15896 e44a F30F7F85 		movdqu	%xmm0, -9184(%rbp)
+ 15896      20DCFFFF 
+ 15897 e452 488B8598 		movq	-9832(%rbp), %rax
+ 15897      D9FFFF
+ 15898 e459 4805E000 		addq	$224, %rax
+ 15898      0000
+ 15899 e45f F30F6F85 		movdqu	-9184(%rbp), %xmm0
+ 15899      20DCFFFF 
+ 15900 e467 F30F7F00 		movdqu	%xmm0, (%rax)
+1939:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 15901              		.loc 2 1939 0
+ 15902 e46b 4881C428 		addq	$10280, %rsp
+ 15902      280000
+ 15903 e472 5B       		popq	%rbx
+ 15904 e473 415C     		popq	%r12
+ 15905 e475 415D     		popq	%r13
+ 15906 e477 C9       		leave
+ 15907 e478 C3       		ret
+ 15908              		.cfi_endproc
+ 15909              	.LFE647:
+ 15910              		.size	KAESBlockCipherVecRegKeyExpansion256, .-KAESBlockCipherVecRegKeyExpansion256
+ 15911              		.section	.rodata
+
GAS LISTING /tmp/ccjbMjHD.s 			page 484
+
+
+ 15912              	.LC5:
+ 15913 03d2 73746174 		.string	"state"
+ 15913      6500
+ 15914              	.LC6:
+ 15915 03d8 737200   		.string	"sr"
+ 15916              	.LC7:
+ 15917 03db 736C00   		.string	"sl"
+ 15918              		.text
+ 15919              		.type	KAESBlockCipherVecRegEqInvKeyExpansion, @function
+ 15920              	KAESBlockCipherVecRegEqInvKeyExpansion:
+ 15921              	.LFB648:
+1940:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+1941:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1942:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(KeyExpansion256) (CipherVec * w, const AESByte * key)
+1943:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1944:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(KeyExpansion) (w, key, AES_Nr_256, AES_Nk_256);
+1945:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+1946:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+1947:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1948:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1949:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1950:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion) (CipherVec * r, const CipherVec * dr, unsigned Nr)
+1951:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 15922              		.loc 2 1951 0
+ 15923              		.cfi_startproc
+ 15924 e479 55       		pushq	%rbp
+ 15925              	.LCFI8:
+ 15926              		.cfi_def_cfa_offset 16
+ 15927 e47a 4889E5   		movq	%rsp, %rbp
+ 15928              		.cfi_offset 6, -16
+ 15929              	.LCFI9:
+ 15930              		.cfi_def_cfa_register 6
+ 15931 e47d 4156     		pushq	%r14
+ 15932 e47f 4155     		pushq	%r13
+ 15933 e481 4154     		pushq	%r12
+ 15934 e483 53       		pushq	%rbx
+ 15935 e484 4881EC80 		subq	$1920, %rsp
+ 15935      070000
+ 15936 e48b 4889BDE8 		movq	%rdi, -1816(%rbp)
+ 15936      F8FFFF
+ 15937 e492 4889B5E0 		movq	%rsi, -1824(%rbp)
+ 15937      F8FFFF
+ 15938 e499 8995DCF8 		movl	%edx, -1828(%rbp)
+ 15938      FFFF
+1952:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix, jx;
+1953:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1954:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     jx = Nr;
+ 15939              		.loc 2 1954 0
+ 15940 e49f 8B85DCF8 		movl	-1828(%rbp), %eax
+ 15940      FFFF
+ 15941 e4a5 89858CF9 		movl	%eax, -1652(%rbp)
+ 15941      FFFF
+1955:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     ix = 0;
+ 15942              		.loc 2 1955 0
+ 15943 e4ab C78588F9 		movl	$0, -1656(%rbp)
+ 15943      FFFF0000 
+ 15943      0000
+
GAS LISTING /tmp/ccjbMjHD.s 			page 485
+
+
+1956:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r[ix++] = dr[jx--];
+ 15944              		.loc 2 1956 0
+ 15945 e4b5 8B8588F9 		mov	-1656(%rbp), %eax
+ 15945      FFFF
+ 15946 e4bb 48C1E004 		salq	$4, %rax
+ 15947 e4bf 480385E8 		addq	-1816(%rbp), %rax
+ 15947      F8FFFF
+ 15948 e4c6 8B958CF9 		mov	-1652(%rbp), %edx
+ 15948      FFFF
+ 15949 e4cc 48C1E204 		salq	$4, %rdx
+ 15950 e4d0 480395E0 		addq	-1824(%rbp), %rdx
+ 15950      F8FFFF
+ 15951 e4d7 660F6F02 		movdqa	(%rdx), %xmm0
+ 15952 e4db 660F7F00 		movdqa	%xmm0, (%rax)
+ 15953 e4df 838588F9 		addl	$1, -1656(%rbp)
+ 15953      FFFF01
+ 15954 e4e6 83AD8CF9 		subl	$1, -1652(%rbp)
+ 15954      FFFF01
+1957:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     while (jx)
+ 15955              		.loc 2 1957 0
+ 15956 e4ed E9000F00 		jmp	.L240
+ 15956      00
+ 15957              		.cfi_offset 3, -48
+ 15958              		.cfi_offset 12, -40
+ 15959              		.cfi_offset 13, -32
+ 15960              		.cfi_offset 14, -24
+ 15961              	.L259:
+1958:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         r[ix++] = AESBCMEMBER(InvMixColumns)(dr[jx--]);
+ 15962              		.loc 2 1958 0
+ 15963 e4f2 8B8588F9 		mov	-1656(%rbp), %eax
+ 15963      FFFF
+ 15964 e4f8 48C1E004 		salq	$4, %rax
+ 15965 e4fc 4889C3   		movq	%rax, %rbx
+ 15966 e4ff 48039DE8 		addq	-1816(%rbp), %rbx
+ 15966      F8FFFF
+ 15967 e506 8B858CF9 		mov	-1652(%rbp), %eax
+ 15967      FFFF
+ 15968 e50c 48C1E004 		salq	$4, %rax
+ 15969 e510 480385E0 		addq	-1824(%rbp), %rax
+ 15969      F8FFFF
+ 15970 e517 660F6F00 		movdqa	(%rax), %xmm0
+ 15971 e51b 83AD8CF9 		subl	$1, -1652(%rbp)
+ 15971      FFFF01
+ 15972 e522 F30F7F85 		movdqu	%xmm0, -1648(%rbp)
+ 15972      90F9FFFF 
+ 15973 e52a F30F6F85 		movdqu	-1648(%rbp), %xmm0
+ 15973      90F9FFFF 
+ 15974 e532 F30F7F85 		movdqu	%xmm0, -1632(%rbp)
+ 15974      A0F9FFFF 
+ 15975              	.LBB3943:
+ 15976              	.LBB3944:
+ 15977              	.LBB3945:
+ 15978              	.LBB3946:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 15979              		.loc 2 667 0
+ 15980 e53a 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 15980      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 486
+
+
+ 15981 e542 F30F6F8D 		movdqu	-1632(%rbp), %xmm1
+ 15981      A0F9FFFF 
+ 15982 e54a F30F7F8D 		movdqu	%xmm1, -1600(%rbp)
+ 15982      C0F9FFFF 
+ 15983 e552 F30F7F85 		movdqu	%xmm0, -1616(%rbp)
+ 15983      B0F9FFFF 
+ 15984 e55a F30F6F85 		movdqu	-1600(%rbp), %xmm0
+ 15984      C0F9FFFF 
+ 15985 e562 F30F7F85 		movdqu	%xmm0, -1568(%rbp)
+ 15985      E0F9FFFF 
+ 15986 e56a F30F6F85 		movdqu	-1616(%rbp), %xmm0
+ 15986      B0F9FFFF 
+ 15987 e572 F30F7F85 		movdqu	%xmm0, -1584(%rbp)
+ 15987      D0F9FFFF 
+ 15988              	.LBB3947:
+ 15989              	.LBB3948:
+ 15990              	.LBB3949:
+ 15991              	.LBB3950:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 15992              		.loc 3 529 0
+ 15993 e57a F30F6F8D 		movdqu	-1584(%rbp), %xmm1
+ 15993      D0F9FFFF 
+ 15994 e582 F30F6F85 		movdqu	-1568(%rbp), %xmm0
+ 15994      E0F9FFFF 
+ 15995 e58a 660F3800 		pshufb	%xmm1, %xmm0
+ 15995      C1
+ 15996              	.LBE3950:
+ 15997              	.LBE3949:
+ 15998              	.LBE3948:
+ 15999              	.LBE3947:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 16000              		.loc 2 667 0
+ 16001 e58f F30F7F85 		movdqu	%xmm0, -1632(%rbp)
+ 16001      A0F9FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 16002              		.loc 2 668 0
+ 16003 e597 F30F6F85 		movdqu	-1632(%rbp), %xmm0
+ 16003      A0F9FFFF 
+ 16004              	.LBE3946:
+ 16005              	.LBE3945:
+1106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r1 = AESBCMEMBER(RotBytesLeft) (state);
+ 16006              		.loc 2 1106 0
+ 16007 e59f 660F7F85 		movdqa	%xmm0, -1856(%rbp)
+ 16007      C0F8FFFF 
+ 16008 e5a7 660F6F85 		movdqa	-1856(%rbp), %xmm0
+ 16008      C0F8FFFF 
+ 16009 e5af F30F7F85 		movdqu	%xmm0, -1552(%rbp)
+ 16009      F0F9FFFF 
+ 16010              	.LBB3951:
+ 16011              	.LBB3952:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 16012              		.loc 2 667 0
+ 16013 e5b7 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 16013      00000000 
+ 16014 e5bf F30F6F8D 		movdqu	-1552(%rbp), %xmm1
+ 16014      F0F9FFFF 
+ 16015 e5c7 F30F7F8D 		movdqu	%xmm1, -1520(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 487
+
+
+ 16015      10FAFFFF 
+ 16016 e5cf F30F7F85 		movdqu	%xmm0, -1536(%rbp)
+ 16016      00FAFFFF 
+ 16017 e5d7 F30F6F85 		movdqu	-1520(%rbp), %xmm0
+ 16017      10FAFFFF 
+ 16018 e5df F30F7F85 		movdqu	%xmm0, -1488(%rbp)
+ 16018      30FAFFFF 
+ 16019 e5e7 F30F6F85 		movdqu	-1536(%rbp), %xmm0
+ 16019      00FAFFFF 
+ 16020 e5ef F30F7F85 		movdqu	%xmm0, -1504(%rbp)
+ 16020      20FAFFFF 
+ 16021              	.LBB3953:
+ 16022              	.LBB3954:
+ 16023              	.LBB3955:
+ 16024              	.LBB3956:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 16025              		.loc 3 529 0
+ 16026 e5f7 F30F6F8D 		movdqu	-1504(%rbp), %xmm1
+ 16026      20FAFFFF 
+ 16027 e5ff F30F6F85 		movdqu	-1488(%rbp), %xmm0
+ 16027      30FAFFFF 
+ 16028 e607 660F3800 		pshufb	%xmm1, %xmm0
+ 16028      C1
+ 16029              	.LBE3956:
+ 16030              	.LBE3955:
+ 16031              	.LBE3954:
+ 16032              	.LBE3953:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 16033              		.loc 2 667 0
+ 16034 e60c F30F7F85 		movdqu	%xmm0, -1552(%rbp)
+ 16034      F0F9FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 16035              		.loc 2 668 0
+ 16036 e614 F30F6F85 		movdqu	-1552(%rbp), %xmm0
+ 16036      F0F9FFFF 
+ 16037              	.LBE3952:
+ 16038              	.LBE3951:
+1107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r2 = AESBCMEMBER(RotBytesLeft) (r1);
+ 16039              		.loc 2 1107 0
+ 16040 e61c 660F7F85 		movdqa	%xmm0, -1872(%rbp)
+ 16040      B0F8FFFF 
+ 16041 e624 660F6F8D 		movdqa	-1872(%rbp), %xmm1
+ 16041      B0F8FFFF 
+ 16042 e62c F30F7F8D 		movdqu	%xmm1, -1472(%rbp)
+ 16042      40FAFFFF 
+ 16043              	.LBB3957:
+ 16044              	.LBB3958:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 16045              		.loc 2 667 0
+ 16046 e634 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 16046      00000000 
+ 16047 e63c F30F6F8D 		movdqu	-1472(%rbp), %xmm1
+ 16047      40FAFFFF 
+ 16048 e644 F30F7F8D 		movdqu	%xmm1, -1440(%rbp)
+ 16048      60FAFFFF 
+ 16049 e64c F30F7F85 		movdqu	%xmm0, -1456(%rbp)
+ 16049      50FAFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 488
+
+
+ 16050 e654 F30F6F85 		movdqu	-1440(%rbp), %xmm0
+ 16050      60FAFFFF 
+ 16051 e65c F30F7F85 		movdqu	%xmm0, -1408(%rbp)
+ 16051      80FAFFFF 
+ 16052 e664 F30F6F85 		movdqu	-1456(%rbp), %xmm0
+ 16052      50FAFFFF 
+ 16053 e66c F30F7F85 		movdqu	%xmm0, -1424(%rbp)
+ 16053      70FAFFFF 
+ 16054              	.LBB3959:
+ 16055              	.LBB3960:
+ 16056              	.LBB3961:
+ 16057              	.LBB3962:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 16058              		.loc 3 529 0
+ 16059 e674 F30F6F8D 		movdqu	-1424(%rbp), %xmm1
+ 16059      70FAFFFF 
+ 16060 e67c F30F6F85 		movdqu	-1408(%rbp), %xmm0
+ 16060      80FAFFFF 
+ 16061 e684 660F3800 		pshufb	%xmm1, %xmm0
+ 16061      C1
+ 16062              	.LBE3962:
+ 16063              	.LBE3961:
+ 16064              	.LBE3960:
+ 16065              	.LBE3959:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 16066              		.loc 2 667 0
+ 16067 e689 F30F7F85 		movdqu	%xmm0, -1472(%rbp)
+ 16067      40FAFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 16068              		.loc 2 668 0
+ 16069 e691 F30F6F85 		movdqu	-1472(%rbp), %xmm0
+ 16069      40FAFFFF 
+ 16070              	.LBE3958:
+ 16071              	.LBE3957:
+1108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r3 = AESBCMEMBER(RotBytesLeft) (r2);        
+ 16072              		.loc 2 1108 0
+ 16073 e699 660F7F85 		movdqa	%xmm0, -1888(%rbp)
+ 16073      A0F8FFFF 
+ 16074 e6a1 F30F6F85 		movdqu	-1648(%rbp), %xmm0
+ 16074      90F9FFFF 
+ 16075 e6a9 F30F7F85 		movdqu	%xmm0, -1376(%rbp)
+ 16075      A0FAFFFF 
+ 16076 e6b1 660F6F85 		movdqa	-1872(%rbp), %xmm0
+ 16076      B0F8FFFF 
+ 16077 e6b9 F30F7F85 		movdqu	%xmm0, -1392(%rbp)
+ 16077      90FAFFFF 
+ 16078              	.LBB3963:
+ 16079              	.LBB3964:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 16080              		.loc 2 178 0
+ 16081 e6c1 F30F6F85 		movdqu	-1392(%rbp), %xmm0
+ 16081      90FAFFFF 
+ 16082 e6c9 F30F6F8D 		movdqu	-1376(%rbp), %xmm1
+ 16082      A0FAFFFF 
+ 16083 e6d1 660FEFC1 		pxor	%xmm1, %xmm0
+ 16084              	.LBE3964:
+ 16085              	.LBE3963:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 489
+
+
+1110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f4 = AESBCMEMBER(VecXor) (state, r2);
+ 16086              		.loc 2 1110 0
+ 16087 e6d5 660F7F85 		movdqa	%xmm0, -1920(%rbp)
+ 16087      80F8FFFF 
+ 16088 e6dd F30F6F85 		movdqu	-1648(%rbp), %xmm0
+ 16088      90F9FFFF 
+ 16089 e6e5 F30F7F85 		movdqu	%xmm0, -1344(%rbp)
+ 16089      C0FAFFFF 
+ 16090 e6ed 660F6F8D 		movdqa	-1856(%rbp), %xmm1
+ 16090      C0F8FFFF 
+ 16091 e6f5 F30F7F8D 		movdqu	%xmm1, -1360(%rbp)
+ 16091      B0FAFFFF 
+ 16092              	.LBB3965:
+ 16093              	.LBB3966:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 16094              		.loc 2 178 0
+ 16095 e6fd F30F6F85 		movdqu	-1360(%rbp), %xmm0
+ 16095      B0FAFFFF 
+ 16096 e705 F30F6F8D 		movdqu	-1344(%rbp), %xmm1
+ 16096      C0FAFFFF 
+ 16097 e70d 660FEFC1 		pxor	%xmm1, %xmm0
+ 16098              	.LBE3966:
+ 16099              	.LBE3965:
+1111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f2 = AESBCMEMBER(VecXor) (state, r1);
+ 16100              		.loc 2 1111 0
+ 16101 e711 660F7F85 		movdqa	%xmm0, -1904(%rbp)
+ 16101      90F8FFFF 
+ 16102 e719 660F6F85 		movdqa	-1872(%rbp), %xmm0
+ 16102      B0F8FFFF 
+ 16103 e721 F30F7F85 		movdqu	%xmm0, -1312(%rbp)
+ 16103      E0FAFFFF 
+ 16104 e729 660F6F8D 		movdqa	-1888(%rbp), %xmm1
+ 16104      A0F8FFFF 
+ 16105 e731 F30F7F8D 		movdqu	%xmm1, -1328(%rbp)
+ 16105      D0FAFFFF 
+ 16106              	.LBB3967:
+ 16107              	.LBB3968:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 16108              		.loc 2 178 0
+ 16109 e739 F30F6F85 		movdqu	-1328(%rbp), %xmm0
+ 16109      D0FAFFFF 
+ 16110 e741 F30F6F8D 		movdqu	-1312(%rbp), %xmm1
+ 16110      E0FAFFFF 
+ 16111 e749 660FEFC1 		pxor	%xmm1, %xmm0
+ 16112              	.LBE3968:
+ 16113              	.LBE3967:
+1112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f8 = AESBCMEMBER(VecXor) (r2, r3);
+ 16114              		.loc 2 1112 0
+ 16115 e74d 660F7F85 		movdqa	%xmm0, -1936(%rbp)
+ 16115      70F8FFFF 
+ 16116 e755 660F6F85 		movdqa	-1936(%rbp), %xmm0
+ 16116      70F8FFFF 
+ 16117 e75d F30F7F85 		movdqu	%xmm0, -1280(%rbp)
+ 16117      00FBFFFF 
+ 16118 e765 660F6F8D 		movdqa	-1856(%rbp), %xmm1
+ 16118      C0F8FFFF 
+ 16119 e76d F30F7F8D 		movdqu	%xmm1, -1296(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 490
+
+
+ 16119      F0FAFFFF 
+ 16120              	.LBB3969:
+ 16121              	.LBB3970:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 16122              		.loc 2 178 0
+ 16123 e775 F30F6F85 		movdqu	-1296(%rbp), %xmm0
+ 16123      F0FAFFFF 
+ 16124 e77d F30F6F8D 		movdqu	-1280(%rbp), %xmm1
+ 16124      00FBFFFF 
+ 16125 e785 660FEFC1 		pxor	%xmm1, %xmm0
+ 16126              	.LBE3970:
+ 16127              	.LBE3969:
+1113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (f8, r1);
+ 16128              		.loc 2 1113 0
+ 16129 e789 F30F7F85 		movdqu	%xmm0, -1648(%rbp)
+ 16129      90F9FFFF 
+ 16130 e791 660F6F85 		movdqa	-1936(%rbp), %xmm0
+ 16130      70F8FFFF 
+ 16131 e799 F30F7F85 		movdqu	%xmm0, -1248(%rbp)
+ 16131      20FBFFFF 
+ 16132 e7a1 660F6F8D 		movdqa	-1904(%rbp), %xmm1
+ 16132      90F8FFFF 
+ 16133 e7a9 F30F7F8D 		movdqu	%xmm1, -1264(%rbp)
+ 16133      10FBFFFF 
+ 16134              	.LBB3971:
+ 16135              	.LBB3972:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 16136              		.loc 2 178 0
+ 16137 e7b1 F30F6F85 		movdqu	-1264(%rbp), %xmm0
+ 16137      10FBFFFF 
+ 16138 e7b9 F30F6F8D 		movdqu	-1248(%rbp), %xmm1
+ 16138      20FBFFFF 
+ 16139 e7c1 660FEFC1 		pxor	%xmm1, %xmm0
+ 16140              	.LBE3972:
+ 16141              	.LBE3971:
+1114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f8 = AESBCMEMBER(VecXor) (f8, f2);
+ 16142              		.loc 2 1114 0
+ 16143 e7c5 660F7F85 		movdqa	%xmm0, -1936(%rbp)
+ 16143      70F8FFFF 
+ 16144 e7cd 660F6F85 		movdqa	-1904(%rbp), %xmm0
+ 16144      90F8FFFF 
+ 16145 e7d5 F30F7F85 		movdqu	%xmm0, -1216(%rbp)
+ 16145      40FBFFFF 
+ 16146              	.LBB3973:
+ 16147              	.LBB3974:
+ 16148              	.LBB3975:
+ 933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 16149              		.loc 2 933 0
+ 16150 e7dd F30F6F85 		movdqu	-1216(%rbp), %xmm0
+ 16150      40FBFFFF 
+ 16151 e7e5 F30F7F85 		movdqu	%xmm0, -1776(%rbp)
+ 16151      10F9FFFF 
+ 16152 e7ed E8000000 		call	KDbgWriterGet at PLT
+ 16152      00
+ 16153 e7f2 4885C0   		testq	%rax, %rax
+ 16154 e7f5 747B     		je	.L242
+ 16155 e7f7 BF010000 		movl	$1, %edi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 491
+
+
+ 16155      00
+ 16156 e7fc E8000000 		call	KDbgCondToFlag at PLT
+ 16156      00
+ 16157 e801 4889C6   		movq	%rax, %rsi
+ 16158 e804 BF100000 		movl	$16, %edi
+ 16158      00
+ 16159 e809 E8000000 		call	KDbgTestModConds at PLT
+ 16159      00
+ 16160 e80e 84C0     		testb	%al, %al
+ 16161 e810 7460     		je	.L242
+ 16162 e812 8B851CF9 		movl	-1764(%rbp), %eax
+ 16162      FFFF
+ 16163 e818 89C7     		movl	%eax, %edi
+ 16164 e81a E8E117FF 		call	bswap_32
+ 16164      FF
+ 16165 e81f 4189C6   		movl	%eax, %r14d
+ 16166 e822 8B8518F9 		movl	-1768(%rbp), %eax
+ 16166      FFFF
+ 16167 e828 89C7     		movl	%eax, %edi
+ 16168 e82a E8D117FF 		call	bswap_32
+ 16168      FF
+ 16169 e82f 4189C5   		movl	%eax, %r13d
+ 16170 e832 8B8514F9 		movl	-1772(%rbp), %eax
+ 16170      FFFF
+ 16171 e838 89C7     		movl	%eax, %edi
+ 16172 e83a E8C117FF 		call	bswap_32
+ 16172      FF
+ 16173 e83f 4189C4   		movl	%eax, %r12d
+ 16174 e842 8B8510F9 		movl	-1776(%rbp), %eax
+ 16174      FFFF
+ 16175 e848 89C7     		movl	%eax, %edi
+ 16176 e84a E8B117FF 		call	bswap_32
+ 16176      FF
+ 16177 e84f 4589F1   		movl	%r14d, %r9d
+ 16178 e852 4589E8   		movl	%r13d, %r8d
+ 16179 e855 4489E1   		movl	%r12d, %ecx
+ 16180 e858 89C2     		movl	%eax, %edx
+ 16181 e85a 488D3500 		leaq	.LC5(%rip), %rsi
+ 16181      000000
+ 16182 e861 488D3D00 		leaq	.LC1(%rip), %rdi
+ 16182      000000
+ 16183 e868 B8000000 		movl	$0, %eax
+ 16183      00
+ 16184 e86d E8000000 		call	KDbgMsg at PLT
+ 16184      00
+ 16185              	.L242:
+ 16186              	.LBE3975:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 16187              		.loc 2 934 0
+ 16188 e872 B8070000 		movl	$7, %eax
+ 16188      00
+ 16189 e877 F30F6F85 		movdqu	-1216(%rbp), %xmm0
+ 16189      40FBFFFF 
+ 16190 e87f F30F7F85 		movdqu	%xmm0, -1152(%rbp)
+ 16190      80FBFFFF 
+ 16191 e887 89857CFB 		movl	%eax, -1156(%rbp)
+ 16191      FFFF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 492
+
+
+ 16192 e88d F30F6F85 		movdqu	-1152(%rbp), %xmm0
+ 16192      80FBFFFF 
+ 16193 e895 F30F7F85 		movdqu	%xmm0, -1120(%rbp)
+ 16193      A0FBFFFF 
+ 16194 e89d 8B857CFB 		movl	-1156(%rbp), %eax
+ 16194      FFFF
+ 16195 e8a3 89859CFB 		movl	%eax, -1124(%rbp)
+ 16195      FFFF
+ 16196              	.LBB3976:
+ 16197              	.LBB3977:
+ 16198              	.LBB3978:
+ 16199              	.LBB3979:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 16200              		.loc 3 433 0
+ 16201 e8a9 F30F6F85 		movdqu	-1120(%rbp), %xmm0
+ 16201      A0FBFFFF 
+ 16202 e8b1 8B859CFB 		movl	-1124(%rbp), %eax
+ 16202      FFFF
+ 16203 e8b7 89856CF8 		movl	%eax, -1940(%rbp)
+ 16203      FFFF
+ 16204 e8bd 660F6E8D 		movd	-1940(%rbp), %xmm1
+ 16204      6CF8FFFF 
+ 16205 e8c5 660FD2C1 		psrld	%xmm1, %xmm0
+ 16206              	.LBE3979:
+ 16207              	.LBE3978:
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = op_PSRLDI128 (v, k);
+ 16208              		.loc 2 488 0
+ 16209 e8c9 F30F7F85 		movdqu	%xmm0, -1152(%rbp)
+ 16209      80FBFFFF 
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 16210              		.loc 2 489 0
+ 16211 e8d1 B8080000 		movl	$8, %eax
+ 16211      00
+ 16212 e8d6 83BD7CFB 		cmpl	$8, -1156(%rbp)
+ 16212      FFFF08
+ 16213 e8dd 0F4E857C 		cmovle	-1156(%rbp), %eax
+ 16213      FBFFFF
+ 16214 e8e4 4898     		cltq
+ 16215 e8e6 4889C2   		movq	%rax, %rdx
+ 16216 e8e9 48C1E204 		salq	$4, %rdx
+ 16217 e8ed 488D0500 		leaq	sr_mask.7327(%rip), %rax
+ 16217      000000
+ 16218 e8f4 660F6F04 		movdqa	(%rdx,%rax), %xmm0
+ 16218      02
+ 16219 e8f9 F30F6F8D 		movdqu	-1152(%rbp), %xmm1
+ 16219      80FBFFFF 
+ 16220 e901 F30F7F8D 		movdqu	%xmm1, -1088(%rbp)
+ 16220      C0FBFFFF 
+ 16221 e909 F30F7F85 		movdqu	%xmm0, -1104(%rbp)
+ 16221      B0FBFFFF 
+ 16222              	.LBB3980:
+ 16223              	.LBB3981:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 16224              		.loc 2 206 0
+ 16225 e911 F30F6F85 		movdqu	-1104(%rbp), %xmm0
+ 16225      B0FBFFFF 
+ 16226 e919 F30F6F8D 		movdqu	-1088(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 493
+
+
+ 16226      C0FBFFFF 
+ 16227 e921 660FDBC1 		pand	%xmm1, %xmm0
+ 16228              	.LBE3981:
+ 16229              	.LBE3980:
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 16230              		.loc 2 489 0
+ 16231 e925 F30F7F85 		movdqu	%xmm0, -1152(%rbp)
+ 16231      80FBFFFF 
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v;
+ 16232              		.loc 2 490 0
+ 16233 e92d F30F6F85 		movdqu	-1152(%rbp), %xmm0
+ 16233      80FBFFFF 
+ 16234              	.LBE3977:
+ 16235              	.LBE3976:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 16236              		.loc 2 934 0
+ 16237 e935 F30F7F85 		movdqu	%xmm0, -1200(%rbp)
+ 16237      50FBFFFF 
+ 16238              	.LBB3982:
+ 935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("sr", sr);
+ 16239              		.loc 2 935 0
+ 16240 e93d F30F6F85 		movdqu	-1200(%rbp), %xmm0
+ 16240      50FBFFFF 
+ 16241 e945 F30F7F85 		movdqu	%xmm0, -1792(%rbp)
+ 16241      00F9FFFF 
+ 16242 e94d E8000000 		call	KDbgWriterGet at PLT
+ 16242      00
+ 16243 e952 4885C0   		testq	%rax, %rax
+ 16244 e955 747B     		je	.L244
+ 16245 e957 BF010000 		movl	$1, %edi
+ 16245      00
+ 16246 e95c E8000000 		call	KDbgCondToFlag at PLT
+ 16246      00
+ 16247 e961 4889C6   		movq	%rax, %rsi
+ 16248 e964 BF100000 		movl	$16, %edi
+ 16248      00
+ 16249 e969 E8000000 		call	KDbgTestModConds at PLT
+ 16249      00
+ 16250 e96e 84C0     		testb	%al, %al
+ 16251 e970 7460     		je	.L244
+ 16252 e972 8B850CF9 		movl	-1780(%rbp), %eax
+ 16252      FFFF
+ 16253 e978 89C7     		movl	%eax, %edi
+ 16254 e97a E88116FF 		call	bswap_32
+ 16254      FF
+ 16255 e97f 4189C6   		movl	%eax, %r14d
+ 16256 e982 8B8508F9 		movl	-1784(%rbp), %eax
+ 16256      FFFF
+ 16257 e988 89C7     		movl	%eax, %edi
+ 16258 e98a E87116FF 		call	bswap_32
+ 16258      FF
+ 16259 e98f 4189C5   		movl	%eax, %r13d
+ 16260 e992 8B8504F9 		movl	-1788(%rbp), %eax
+ 16260      FFFF
+ 16261 e998 89C7     		movl	%eax, %edi
+ 16262 e99a E86116FF 		call	bswap_32
+ 16262      FF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 494
+
+
+ 16263 e99f 4189C4   		movl	%eax, %r12d
+ 16264 e9a2 8B8500F9 		movl	-1792(%rbp), %eax
+ 16264      FFFF
+ 16265 e9a8 89C7     		movl	%eax, %edi
+ 16266 e9aa E85116FF 		call	bswap_32
+ 16266      FF
+ 16267 e9af 4589F1   		movl	%r14d, %r9d
+ 16268 e9b2 4589E8   		movl	%r13d, %r8d
+ 16269 e9b5 4489E1   		movl	%r12d, %ecx
+ 16270 e9b8 89C2     		movl	%eax, %edx
+ 16271 e9ba 488D3500 		leaq	.LC6(%rip), %rsi
+ 16271      000000
+ 16272 e9c1 488D3D00 		leaq	.LC1(%rip), %rdi
+ 16272      000000
+ 16273 e9c8 B8000000 		movl	$0, %eax
+ 16273      00
+ 16274 e9cd E8000000 		call	KDbgMsg at PLT
+ 16274      00
+ 16275              	.L244:
+ 16276 e9d2 F30F6F85 		movdqu	-1216(%rbp), %xmm0
+ 16276      40FBFFFF 
+ 16277 e9da F30F7F85 		movdqu	%xmm0, -1056(%rbp)
+ 16277      E0FBFFFF 
+ 16278              	.LBE3982:
+ 16279              	.LBB3983:
+ 16280              	.LBB3984:
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec vv = v;
+ 16281              		.loc 2 426 0
+ 16282 e9e2 F30F6F85 		movdqu	-1056(%rbp), %xmm0
+ 16282      E0FBFFFF 
+ 16283 e9ea F30F7F85 		movdqu	%xmm0, -1040(%rbp)
+ 16283      F0FBFFFF 
+ 16284 e9f2 F30F6F85 		movdqu	-1040(%rbp), %xmm0
+ 16284      F0FBFFFF 
+ 16285 e9fa F30F7F85 		movdqu	%xmm0, -1008(%rbp)
+ 16285      10FCFFFF 
+ 16286              	.LBB3985:
+ 16287              	.LBB3986:
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pslldi128 ((v128_i32_t)vin, bit_count);
+ 16288              		.loc 3 416 0
+ 16289 ea02 F30F6F85 		movdqu	-1008(%rbp), %xmm0
+ 16289      10FCFFFF 
+ 16290 ea0a 660F72F0 		pslld	$1, %xmm0
+ 16290      01
+ 16291              	.LBE3986:
+ 16292              	.LBE3985:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = op_PSLLDI128 (vv, k);
+ 16293              		.loc 2 433 0
+ 16294 ea0f F30F7F85 		movdqu	%xmm0, -1040(%rbp)
+ 16294      F0FBFFFF 
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 16295              		.loc 2 435 0
+ 16296 ea17 B8010000 		movl	$1, %eax
+ 16296      00
+ 16297 ea1c 4898     		cltq
+ 16298 ea1e 4889C2   		movq	%rax, %rdx
+ 16299 ea21 48C1E204 		salq	$4, %rdx
+
GAS LISTING /tmp/ccjbMjHD.s 			page 495
+
+
+ 16300 ea25 488D0500 		leaq	sl_mask.7310(%rip), %rax
+ 16300      000000
+ 16301 ea2c 660F6F04 		movdqa	(%rdx,%rax), %xmm0
+ 16301      02
+ 16302 ea31 F30F6F8D 		movdqu	-1040(%rbp), %xmm1
+ 16302      F0FBFFFF 
+ 16303 ea39 F30F7F8D 		movdqu	%xmm1, -976(%rbp)
+ 16303      30FCFFFF 
+ 16304 ea41 F30F7F85 		movdqu	%xmm0, -992(%rbp)
+ 16304      20FCFFFF 
+ 16305              	.LBB3987:
+ 16306              	.LBB3988:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 16307              		.loc 2 206 0
+ 16308 ea49 F30F6F85 		movdqu	-992(%rbp), %xmm0
+ 16308      20FCFFFF 
+ 16309 ea51 F30F6F8D 		movdqu	-976(%rbp), %xmm1
+ 16309      30FCFFFF 
+ 16310 ea59 660FDBC1 		pand	%xmm1, %xmm0
+ 16311              	.LBE3988:
+ 16312              	.LBE3987:
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 16313              		.loc 2 435 0
+ 16314 ea5d F30F7F85 		movdqu	%xmm0, -1040(%rbp)
+ 16314      F0FBFFFF 
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vv;
+ 16315              		.loc 2 437 0
+ 16316 ea65 F30F6F85 		movdqu	-1040(%rbp), %xmm0
+ 16316      F0FBFFFF 
+ 16317              	.LBE3984:
+ 16318              	.LBE3983:
+ 936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ 16319              		.loc 2 936 0
+ 16320 ea6d F30F7F85 		movdqu	%xmm0, -1184(%rbp)
+ 16320      60FBFFFF 
+ 16321              	.LBB3989:
+ 937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("sl", sl);
+ 16322              		.loc 2 937 0
+ 16323 ea75 F30F6F85 		movdqu	-1184(%rbp), %xmm0
+ 16323      60FBFFFF 
+ 16324 ea7d F30F7F85 		movdqu	%xmm0, -1808(%rbp)
+ 16324      F0F8FFFF 
+ 16325 ea85 E8000000 		call	KDbgWriterGet at PLT
+ 16325      00
+ 16326 ea8a 4885C0   		testq	%rax, %rax
+ 16327 ea8d 747B     		je	.L246
+ 16328 ea8f BF010000 		movl	$1, %edi
+ 16328      00
+ 16329 ea94 E8000000 		call	KDbgCondToFlag at PLT
+ 16329      00
+ 16330 ea99 4889C6   		movq	%rax, %rsi
+ 16331 ea9c BF100000 		movl	$16, %edi
+ 16331      00
+ 16332 eaa1 E8000000 		call	KDbgTestModConds at PLT
+ 16332      00
+ 16333 eaa6 84C0     		testb	%al, %al
+ 16334 eaa8 7460     		je	.L246
+
GAS LISTING /tmp/ccjbMjHD.s 			page 496
+
+
+ 16335 eaaa 8B85FCF8 		movl	-1796(%rbp), %eax
+ 16335      FFFF
+ 16336 eab0 89C7     		movl	%eax, %edi
+ 16337 eab2 E84915FF 		call	bswap_32
+ 16337      FF
+ 16338 eab7 4189C6   		movl	%eax, %r14d
+ 16339 eaba 8B85F8F8 		movl	-1800(%rbp), %eax
+ 16339      FFFF
+ 16340 eac0 89C7     		movl	%eax, %edi
+ 16341 eac2 E83915FF 		call	bswap_32
+ 16341      FF
+ 16342 eac7 4189C5   		movl	%eax, %r13d
+ 16343 eaca 8B85F4F8 		movl	-1804(%rbp), %eax
+ 16343      FFFF
+ 16344 ead0 89C7     		movl	%eax, %edi
+ 16345 ead2 E82915FF 		call	bswap_32
+ 16345      FF
+ 16346 ead7 4189C4   		movl	%eax, %r12d
+ 16347 eada 8B85F0F8 		movl	-1808(%rbp), %eax
+ 16347      FFFF
+ 16348 eae0 89C7     		movl	%eax, %edi
+ 16349 eae2 E81915FF 		call	bswap_32
+ 16349      FF
+ 16350 eae7 4589F1   		movl	%r14d, %r9d
+ 16351 eaea 4589E8   		movl	%r13d, %r8d
+ 16352 eaed 4489E1   		movl	%r12d, %ecx
+ 16353 eaf0 89C2     		movl	%eax, %edx
+ 16354 eaf2 488D3500 		leaq	.LC7(%rip), %rsi
+ 16354      000000
+ 16355 eaf9 488D3D00 		leaq	.LC1(%rip), %rdi
+ 16355      000000
+ 16356 eb00 B8000000 		movl	$0, %eax
+ 16356      00
+ 16357 eb05 E8000000 		call	KDbgMsg at PLT
+ 16357      00
+ 16358              	.L246:
+ 16359              	.LBE3989:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 16360              		.loc 2 938 0
+ 16361 eb0a 660F6F05 		movdqa	FF_tab(%rip), %xmm0
+ 16361      00000000 
+ 16362 eb12 F30F7F85 		movdqu	%xmm0, -944(%rbp)
+ 16362      50FCFFFF 
+ 16363 eb1a F30F6F85 		movdqu	-1200(%rbp), %xmm0
+ 16363      50FBFFFF 
+ 16364 eb22 F30F7F85 		movdqu	%xmm0, -960(%rbp)
+ 16364      40FCFFFF 
+ 16365 eb2a F30F6F85 		movdqu	-944(%rbp), %xmm0
+ 16365      50FCFFFF 
+ 16366 eb32 F30F7F85 		movdqu	%xmm0, -912(%rbp)
+ 16366      70FCFFFF 
+ 16367 eb3a F30F6F85 		movdqu	-960(%rbp), %xmm0
+ 16367      40FCFFFF 
+ 16368 eb42 F30F7F85 		movdqu	%xmm0, -928(%rbp)
+ 16368      60FCFFFF 
+ 16369              	.LBB3990:
+ 16370              	.LBB3991:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 497
+
+
+ 16371              	.LBB3992:
+ 16372              	.LBB3993:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 16373              		.loc 3 529 0
+ 16374 eb4a F30F6F8D 		movdqu	-928(%rbp), %xmm1
+ 16374      60FCFFFF 
+ 16375 eb52 F30F6F85 		movdqu	-912(%rbp), %xmm0
+ 16375      70FCFFFF 
+ 16376 eb5a 660F3800 		pshufb	%xmm1, %xmm0
+ 16376      C1
+ 16377              	.LBE3993:
+ 16378              	.LBE3992:
+ 16379              	.LBE3991:
+ 16380              	.LBE3990:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 16381              		.loc 2 938 0
+ 16382 eb5f F30F7F85 		movdqu	%xmm0, -1200(%rbp)
+ 16382      50FBFFFF 
+ 16383 eb67 F30F6F85 		movdqu	-1184(%rbp), %xmm0
+ 16383      60FBFFFF 
+ 16384 eb6f F30F7F85 		movdqu	%xmm0, -880(%rbp)
+ 16384      90FCFFFF 
+ 16385 eb77 F30F6F85 		movdqu	-1200(%rbp), %xmm0
+ 16385      50FBFFFF 
+ 16386 eb7f F30F7F85 		movdqu	%xmm0, -896(%rbp)
+ 16386      80FCFFFF 
+ 16387              	.LBB3994:
+ 16388              	.LBB3995:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 16389              		.loc 2 178 0
+ 16390 eb87 F30F6F85 		movdqu	-896(%rbp), %xmm0
+ 16390      80FCFFFF 
+ 16391 eb8f F30F6F8D 		movdqu	-880(%rbp), %xmm1
+ 16391      90FCFFFF 
+ 16392 eb97 660FEFC1 		pxor	%xmm1, %xmm0
+ 16393              	.LBE3995:
+ 16394              	.LBE3994:
+ 16395              	.LBE3974:
+ 16396              	.LBE3973:
+1118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f2 = AESBCMEMBER(FF_mul) (f2,1);
+ 16397              		.loc 2 1118 0
+ 16398 eb9b 660F7F85 		movdqa	%xmm0, -1904(%rbp)
+ 16398      90F8FFFF 
+ 16399 eba3 660F6F85 		movdqa	-1920(%rbp), %xmm0
+ 16399      80F8FFFF 
+ 16400 ebab F30F7F85 		movdqu	%xmm0, -848(%rbp)
+ 16400      B0FCFFFF 
+ 16401              	.LBB3996:
+ 16402              	.LBB3997:
+ 16403              	.LBB3998:
+ 933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 16404              		.loc 2 933 0
+ 16405 ebb3 F30F6F85 		movdqu	-848(%rbp), %xmm0
+ 16405      B0FCFFFF 
+ 16406 ebbb F30F7F85 		movdqu	%xmm0, -1728(%rbp)
+ 16406      40F9FFFF 
+ 16407 ebc3 E8000000 		call	KDbgWriterGet at PLT
+
GAS LISTING /tmp/ccjbMjHD.s 			page 498
+
+
+ 16407      00
+ 16408 ebc8 4885C0   		testq	%rax, %rax
+ 16409 ebcb 747B     		je	.L248
+ 16410 ebcd BF010000 		movl	$1, %edi
+ 16410      00
+ 16411 ebd2 E8000000 		call	KDbgCondToFlag at PLT
+ 16411      00
+ 16412 ebd7 4889C6   		movq	%rax, %rsi
+ 16413 ebda BF100000 		movl	$16, %edi
+ 16413      00
+ 16414 ebdf E8000000 		call	KDbgTestModConds at PLT
+ 16414      00
+ 16415 ebe4 84C0     		testb	%al, %al
+ 16416 ebe6 7460     		je	.L248
+ 16417 ebe8 8B854CF9 		movl	-1716(%rbp), %eax
+ 16417      FFFF
+ 16418 ebee 89C7     		movl	%eax, %edi
+ 16419 ebf0 E80B14FF 		call	bswap_32
+ 16419      FF
+ 16420 ebf5 4189C6   		movl	%eax, %r14d
+ 16421 ebf8 8B8548F9 		movl	-1720(%rbp), %eax
+ 16421      FFFF
+ 16422 ebfe 89C7     		movl	%eax, %edi
+ 16423 ec00 E8FB13FF 		call	bswap_32
+ 16423      FF
+ 16424 ec05 4189C5   		movl	%eax, %r13d
+ 16425 ec08 8B8544F9 		movl	-1724(%rbp), %eax
+ 16425      FFFF
+ 16426 ec0e 89C7     		movl	%eax, %edi
+ 16427 ec10 E8EB13FF 		call	bswap_32
+ 16427      FF
+ 16428 ec15 4189C4   		movl	%eax, %r12d
+ 16429 ec18 8B8540F9 		movl	-1728(%rbp), %eax
+ 16429      FFFF
+ 16430 ec1e 89C7     		movl	%eax, %edi
+ 16431 ec20 E8DB13FF 		call	bswap_32
+ 16431      FF
+ 16432 ec25 4589F1   		movl	%r14d, %r9d
+ 16433 ec28 4589E8   		movl	%r13d, %r8d
+ 16434 ec2b 4489E1   		movl	%r12d, %ecx
+ 16435 ec2e 89C2     		movl	%eax, %edx
+ 16436 ec30 488D3500 		leaq	.LC5(%rip), %rsi
+ 16436      000000
+ 16437 ec37 488D3D00 		leaq	.LC1(%rip), %rdi
+ 16437      000000
+ 16438 ec3e B8000000 		movl	$0, %eax
+ 16438      00
+ 16439 ec43 E8000000 		call	KDbgMsg at PLT
+ 16439      00
+ 16440              	.L248:
+ 16441              	.LBE3998:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 16442              		.loc 2 934 0
+ 16443 ec48 B8060000 		movl	$6, %eax
+ 16443      00
+ 16444 ec4d F30F6F85 		movdqu	-848(%rbp), %xmm0
+ 16444      B0FCFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 499
+
+
+ 16445 ec55 F30F7F85 		movdqu	%xmm0, -784(%rbp)
+ 16445      F0FCFFFF 
+ 16446 ec5d 8985ECFC 		movl	%eax, -788(%rbp)
+ 16446      FFFF
+ 16447 ec63 F30F6F85 		movdqu	-784(%rbp), %xmm0
+ 16447      F0FCFFFF 
+ 16448 ec6b F30F7F85 		movdqu	%xmm0, -752(%rbp)
+ 16448      10FDFFFF 
+ 16449 ec73 8B85ECFC 		movl	-788(%rbp), %eax
+ 16449      FFFF
+ 16450 ec79 89850CFD 		movl	%eax, -756(%rbp)
+ 16450      FFFF
+ 16451              	.LBB3999:
+ 16452              	.LBB4000:
+ 16453              	.LBB4001:
+ 16454              	.LBB4002:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 16455              		.loc 3 433 0
+ 16456 ec7f F30F6F85 		movdqu	-752(%rbp), %xmm0
+ 16456      10FDFFFF 
+ 16457 ec87 8B850CFD 		movl	-756(%rbp), %eax
+ 16457      FFFF
+ 16458 ec8d 898568F8 		movl	%eax, -1944(%rbp)
+ 16458      FFFF
+ 16459 ec93 660F6E8D 		movd	-1944(%rbp), %xmm1
+ 16459      68F8FFFF 
+ 16460 ec9b 660FD2C1 		psrld	%xmm1, %xmm0
+ 16461              	.LBE4002:
+ 16462              	.LBE4001:
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = op_PSRLDI128 (v, k);
+ 16463              		.loc 2 488 0
+ 16464 ec9f F30F7F85 		movdqu	%xmm0, -784(%rbp)
+ 16464      F0FCFFFF 
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 16465              		.loc 2 489 0
+ 16466 eca7 B8080000 		movl	$8, %eax
+ 16466      00
+ 16467 ecac 83BDECFC 		cmpl	$8, -788(%rbp)
+ 16467      FFFF08
+ 16468 ecb3 0F4E85EC 		cmovle	-788(%rbp), %eax
+ 16468      FCFFFF
+ 16469 ecba 4898     		cltq
+ 16470 ecbc 4889C2   		movq	%rax, %rdx
+ 16471 ecbf 48C1E204 		salq	$4, %rdx
+ 16472 ecc3 488D0500 		leaq	sr_mask.7327(%rip), %rax
+ 16472      000000
+ 16473 ecca 660F6F04 		movdqa	(%rdx,%rax), %xmm0
+ 16473      02
+ 16474 eccf F30F6F8D 		movdqu	-784(%rbp), %xmm1
+ 16474      F0FCFFFF 
+ 16475 ecd7 F30F7F8D 		movdqu	%xmm1, -720(%rbp)
+ 16475      30FDFFFF 
+ 16476 ecdf F30F7F85 		movdqu	%xmm0, -736(%rbp)
+ 16476      20FDFFFF 
+ 16477              	.LBB4003:
+ 16478              	.LBB4004:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+
GAS LISTING /tmp/ccjbMjHD.s 			page 500
+
+
+ 16479              		.loc 2 206 0
+ 16480 ece7 F30F6F85 		movdqu	-736(%rbp), %xmm0
+ 16480      20FDFFFF 
+ 16481 ecef F30F6F8D 		movdqu	-720(%rbp), %xmm1
+ 16481      30FDFFFF 
+ 16482 ecf7 660FDBC1 		pand	%xmm1, %xmm0
+ 16483              	.LBE4004:
+ 16484              	.LBE4003:
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 16485              		.loc 2 489 0
+ 16486 ecfb F30F7F85 		movdqu	%xmm0, -784(%rbp)
+ 16486      F0FCFFFF 
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v;
+ 16487              		.loc 2 490 0
+ 16488 ed03 F30F6F85 		movdqu	-784(%rbp), %xmm0
+ 16488      F0FCFFFF 
+ 16489              	.LBE4000:
+ 16490              	.LBE3999:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 16491              		.loc 2 934 0
+ 16492 ed0b F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 16492      C0FCFFFF 
+ 16493              	.LBB4005:
+ 935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("sr", sr);
+ 16494              		.loc 2 935 0
+ 16495 ed13 F30F6F85 		movdqu	-832(%rbp), %xmm0
+ 16495      C0FCFFFF 
+ 16496 ed1b F30F7F85 		movdqu	%xmm0, -1744(%rbp)
+ 16496      30F9FFFF 
+ 16497 ed23 E8000000 		call	KDbgWriterGet at PLT
+ 16497      00
+ 16498 ed28 4885C0   		testq	%rax, %rax
+ 16499 ed2b 747B     		je	.L250
+ 16500 ed2d BF010000 		movl	$1, %edi
+ 16500      00
+ 16501 ed32 E8000000 		call	KDbgCondToFlag at PLT
+ 16501      00
+ 16502 ed37 4889C6   		movq	%rax, %rsi
+ 16503 ed3a BF100000 		movl	$16, %edi
+ 16503      00
+ 16504 ed3f E8000000 		call	KDbgTestModConds at PLT
+ 16504      00
+ 16505 ed44 84C0     		testb	%al, %al
+ 16506 ed46 7460     		je	.L250
+ 16507 ed48 8B853CF9 		movl	-1732(%rbp), %eax
+ 16507      FFFF
+ 16508 ed4e 89C7     		movl	%eax, %edi
+ 16509 ed50 E8AB12FF 		call	bswap_32
+ 16509      FF
+ 16510 ed55 4189C6   		movl	%eax, %r14d
+ 16511 ed58 8B8538F9 		movl	-1736(%rbp), %eax
+ 16511      FFFF
+ 16512 ed5e 89C7     		movl	%eax, %edi
+ 16513 ed60 E89B12FF 		call	bswap_32
+ 16513      FF
+ 16514 ed65 4189C5   		movl	%eax, %r13d
+ 16515 ed68 8B8534F9 		movl	-1740(%rbp), %eax
+
GAS LISTING /tmp/ccjbMjHD.s 			page 501
+
+
+ 16515      FFFF
+ 16516 ed6e 89C7     		movl	%eax, %edi
+ 16517 ed70 E88B12FF 		call	bswap_32
+ 16517      FF
+ 16518 ed75 4189C4   		movl	%eax, %r12d
+ 16519 ed78 8B8530F9 		movl	-1744(%rbp), %eax
+ 16519      FFFF
+ 16520 ed7e 89C7     		movl	%eax, %edi
+ 16521 ed80 E87B12FF 		call	bswap_32
+ 16521      FF
+ 16522 ed85 4589F1   		movl	%r14d, %r9d
+ 16523 ed88 4589E8   		movl	%r13d, %r8d
+ 16524 ed8b 4489E1   		movl	%r12d, %ecx
+ 16525 ed8e 89C2     		movl	%eax, %edx
+ 16526 ed90 488D3500 		leaq	.LC6(%rip), %rsi
+ 16526      000000
+ 16527 ed97 488D3D00 		leaq	.LC1(%rip), %rdi
+ 16527      000000
+ 16528 ed9e B8000000 		movl	$0, %eax
+ 16528      00
+ 16529 eda3 E8000000 		call	KDbgMsg at PLT
+ 16529      00
+ 16530              	.L250:
+ 16531 eda8 F30F6F85 		movdqu	-848(%rbp), %xmm0
+ 16531      B0FCFFFF 
+ 16532 edb0 F30F7F85 		movdqu	%xmm0, -688(%rbp)
+ 16532      50FDFFFF 
+ 16533              	.LBE4005:
+ 16534              	.LBB4006:
+ 16535              	.LBB4007:
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec vv = v;
+ 16536              		.loc 2 426 0
+ 16537 edb8 F30F6F85 		movdqu	-688(%rbp), %xmm0
+ 16537      50FDFFFF 
+ 16538 edc0 F30F7F85 		movdqu	%xmm0, -672(%rbp)
+ 16538      60FDFFFF 
+ 16539 edc8 F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 16539      60FDFFFF 
+ 16540 edd0 F30F7F85 		movdqu	%xmm0, -640(%rbp)
+ 16540      80FDFFFF 
+ 16541              	.LBB4008:
+ 16542              	.LBB4009:
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pslldi128 ((v128_i32_t)vin, bit_count);
+ 16543              		.loc 3 416 0
+ 16544 edd8 F30F6F85 		movdqu	-640(%rbp), %xmm0
+ 16544      80FDFFFF 
+ 16545 ede0 660F72F0 		pslld	$2, %xmm0
+ 16545      02
+ 16546              	.LBE4009:
+ 16547              	.LBE4008:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = op_PSLLDI128 (vv, k);
+ 16548              		.loc 2 433 0
+ 16549 ede5 F30F7F85 		movdqu	%xmm0, -672(%rbp)
+ 16549      60FDFFFF 
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 16550              		.loc 2 435 0
+ 16551 eded B8020000 		movl	$2, %eax
+
GAS LISTING /tmp/ccjbMjHD.s 			page 502
+
+
+ 16551      00
+ 16552 edf2 4898     		cltq
+ 16553 edf4 4889C2   		movq	%rax, %rdx
+ 16554 edf7 48C1E204 		salq	$4, %rdx
+ 16555 edfb 488D0500 		leaq	sl_mask.7310(%rip), %rax
+ 16555      000000
+ 16556 ee02 660F6F04 		movdqa	(%rdx,%rax), %xmm0
+ 16556      02
+ 16557 ee07 F30F6F8D 		movdqu	-672(%rbp), %xmm1
+ 16557      60FDFFFF 
+ 16558 ee0f F30F7F8D 		movdqu	%xmm1, -608(%rbp)
+ 16558      A0FDFFFF 
+ 16559 ee17 F30F7F85 		movdqu	%xmm0, -624(%rbp)
+ 16559      90FDFFFF 
+ 16560              	.LBB4010:
+ 16561              	.LBB4011:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 16562              		.loc 2 206 0
+ 16563 ee1f F30F6F85 		movdqu	-624(%rbp), %xmm0
+ 16563      90FDFFFF 
+ 16564 ee27 F30F6F8D 		movdqu	-608(%rbp), %xmm1
+ 16564      A0FDFFFF 
+ 16565 ee2f 660FDBC1 		pand	%xmm1, %xmm0
+ 16566              	.LBE4011:
+ 16567              	.LBE4010:
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 16568              		.loc 2 435 0
+ 16569 ee33 F30F7F85 		movdqu	%xmm0, -672(%rbp)
+ 16569      60FDFFFF 
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vv;
+ 16570              		.loc 2 437 0
+ 16571 ee3b F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 16571      60FDFFFF 
+ 16572              	.LBE4007:
+ 16573              	.LBE4006:
+ 936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ 16574              		.loc 2 936 0
+ 16575 ee43 F30F7F85 		movdqu	%xmm0, -816(%rbp)
+ 16575      D0FCFFFF 
+ 16576              	.LBB4012:
+ 937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("sl", sl);
+ 16577              		.loc 2 937 0
+ 16578 ee4b F30F6F85 		movdqu	-816(%rbp), %xmm0
+ 16578      D0FCFFFF 
+ 16579 ee53 F30F7F85 		movdqu	%xmm0, -1760(%rbp)
+ 16579      20F9FFFF 
+ 16580 ee5b E8000000 		call	KDbgWriterGet at PLT
+ 16580      00
+ 16581 ee60 4885C0   		testq	%rax, %rax
+ 16582 ee63 747B     		je	.L252
+ 16583 ee65 BF010000 		movl	$1, %edi
+ 16583      00
+ 16584 ee6a E8000000 		call	KDbgCondToFlag at PLT
+ 16584      00
+ 16585 ee6f 4889C6   		movq	%rax, %rsi
+ 16586 ee72 BF100000 		movl	$16, %edi
+ 16586      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 503
+
+
+ 16587 ee77 E8000000 		call	KDbgTestModConds at PLT
+ 16587      00
+ 16588 ee7c 84C0     		testb	%al, %al
+ 16589 ee7e 7460     		je	.L252
+ 16590 ee80 8B852CF9 		movl	-1748(%rbp), %eax
+ 16590      FFFF
+ 16591 ee86 89C7     		movl	%eax, %edi
+ 16592 ee88 E87311FF 		call	bswap_32
+ 16592      FF
+ 16593 ee8d 4189C6   		movl	%eax, %r14d
+ 16594 ee90 8B8528F9 		movl	-1752(%rbp), %eax
+ 16594      FFFF
+ 16595 ee96 89C7     		movl	%eax, %edi
+ 16596 ee98 E86311FF 		call	bswap_32
+ 16596      FF
+ 16597 ee9d 4189C5   		movl	%eax, %r13d
+ 16598 eea0 8B8524F9 		movl	-1756(%rbp), %eax
+ 16598      FFFF
+ 16599 eea6 89C7     		movl	%eax, %edi
+ 16600 eea8 E85311FF 		call	bswap_32
+ 16600      FF
+ 16601 eead 4189C4   		movl	%eax, %r12d
+ 16602 eeb0 8B8520F9 		movl	-1760(%rbp), %eax
+ 16602      FFFF
+ 16603 eeb6 89C7     		movl	%eax, %edi
+ 16604 eeb8 E84311FF 		call	bswap_32
+ 16604      FF
+ 16605 eebd 4589F1   		movl	%r14d, %r9d
+ 16606 eec0 4589E8   		movl	%r13d, %r8d
+ 16607 eec3 4489E1   		movl	%r12d, %ecx
+ 16608 eec6 89C2     		movl	%eax, %edx
+ 16609 eec8 488D3500 		leaq	.LC7(%rip), %rsi
+ 16609      000000
+ 16610 eecf 488D3D00 		leaq	.LC1(%rip), %rdi
+ 16610      000000
+ 16611 eed6 B8000000 		movl	$0, %eax
+ 16611      00
+ 16612 eedb E8000000 		call	KDbgMsg at PLT
+ 16612      00
+ 16613              	.L252:
+ 16614              	.LBE4012:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 16615              		.loc 2 938 0
+ 16616 eee0 660F6F05 		movdqa	FF_tab(%rip), %xmm0
+ 16616      00000000 
+ 16617 eee8 F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 16617      C0FDFFFF 
+ 16618 eef0 F30F6F85 		movdqu	-832(%rbp), %xmm0
+ 16618      C0FCFFFF 
+ 16619 eef8 F30F7F85 		movdqu	%xmm0, -592(%rbp)
+ 16619      B0FDFFFF 
+ 16620 ef00 F30F6F85 		movdqu	-576(%rbp), %xmm0
+ 16620      C0FDFFFF 
+ 16621 ef08 F30F7F85 		movdqu	%xmm0, -544(%rbp)
+ 16621      E0FDFFFF 
+ 16622 ef10 F30F6F85 		movdqu	-592(%rbp), %xmm0
+ 16622      B0FDFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 504
+
+
+ 16623 ef18 F30F7F85 		movdqu	%xmm0, -560(%rbp)
+ 16623      D0FDFFFF 
+ 16624              	.LBB4013:
+ 16625              	.LBB4014:
+ 16626              	.LBB4015:
+ 16627              	.LBB4016:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 16628              		.loc 3 529 0
+ 16629 ef20 F30F6F8D 		movdqu	-560(%rbp), %xmm1
+ 16629      D0FDFFFF 
+ 16630 ef28 F30F6F85 		movdqu	-544(%rbp), %xmm0
+ 16630      E0FDFFFF 
+ 16631 ef30 660F3800 		pshufb	%xmm1, %xmm0
+ 16631      C1
+ 16632              	.LBE4016:
+ 16633              	.LBE4015:
+ 16634              	.LBE4014:
+ 16635              	.LBE4013:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 16636              		.loc 2 938 0
+ 16637 ef35 F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 16637      C0FCFFFF 
+ 16638 ef3d F30F6F85 		movdqu	-816(%rbp), %xmm0
+ 16638      D0FCFFFF 
+ 16639 ef45 F30F7F85 		movdqu	%xmm0, -512(%rbp)
+ 16639      00FEFFFF 
+ 16640 ef4d F30F6F85 		movdqu	-832(%rbp), %xmm0
+ 16640      C0FCFFFF 
+ 16641 ef55 F30F7F85 		movdqu	%xmm0, -528(%rbp)
+ 16641      F0FDFFFF 
+ 16642              	.LBB4017:
+ 16643              	.LBB4018:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 16644              		.loc 2 178 0
+ 16645 ef5d F30F6F85 		movdqu	-528(%rbp), %xmm0
+ 16645      F0FDFFFF 
+ 16646 ef65 F30F6F8D 		movdqu	-512(%rbp), %xmm1
+ 16646      00FEFFFF 
+ 16647 ef6d 660FEFC1 		pxor	%xmm1, %xmm0
+ 16648              	.LBE4018:
+ 16649              	.LBE4017:
+ 16650              	.LBE3997:
+ 16651              	.LBE3996:
+1119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f4 = AESBCMEMBER(FF_mul) (f4,2);
+ 16652              		.loc 2 1119 0
+ 16653 ef71 660F7F85 		movdqa	%xmm0, -1920(%rbp)
+ 16653      80F8FFFF 
+ 16654 ef79 660F6F85 		movdqa	-1936(%rbp), %xmm0
+ 16654      70F8FFFF 
+ 16655 ef81 F30F7F85 		movdqu	%xmm0, -480(%rbp)
+ 16655      20FEFFFF 
+ 16656              	.LBB4019:
+ 16657              	.LBB4020:
+ 16658              	.LBB4021:
+ 933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 16659              		.loc 2 933 0
+ 16660 ef89 F30F6F85 		movdqu	-480(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 505
+
+
+ 16660      20FEFFFF 
+ 16661 ef91 F30F7F85 		movdqu	%xmm0, -1680(%rbp)
+ 16661      70F9FFFF 
+ 16662 ef99 E8000000 		call	KDbgWriterGet at PLT
+ 16662      00
+ 16663 ef9e 4885C0   		testq	%rax, %rax
+ 16664 efa1 747B     		je	.L254
+ 16665 efa3 BF010000 		movl	$1, %edi
+ 16665      00
+ 16666 efa8 E8000000 		call	KDbgCondToFlag at PLT
+ 16666      00
+ 16667 efad 4889C6   		movq	%rax, %rsi
+ 16668 efb0 BF100000 		movl	$16, %edi
+ 16668      00
+ 16669 efb5 E8000000 		call	KDbgTestModConds at PLT
+ 16669      00
+ 16670 efba 84C0     		testb	%al, %al
+ 16671 efbc 7460     		je	.L254
+ 16672 efbe 8B857CF9 		movl	-1668(%rbp), %eax
+ 16672      FFFF
+ 16673 efc4 89C7     		movl	%eax, %edi
+ 16674 efc6 E83510FF 		call	bswap_32
+ 16674      FF
+ 16675 efcb 4189C6   		movl	%eax, %r14d
+ 16676 efce 8B8578F9 		movl	-1672(%rbp), %eax
+ 16676      FFFF
+ 16677 efd4 89C7     		movl	%eax, %edi
+ 16678 efd6 E82510FF 		call	bswap_32
+ 16678      FF
+ 16679 efdb 4189C5   		movl	%eax, %r13d
+ 16680 efde 8B8574F9 		movl	-1676(%rbp), %eax
+ 16680      FFFF
+ 16681 efe4 89C7     		movl	%eax, %edi
+ 16682 efe6 E81510FF 		call	bswap_32
+ 16682      FF
+ 16683 efeb 4189C4   		movl	%eax, %r12d
+ 16684 efee 8B8570F9 		movl	-1680(%rbp), %eax
+ 16684      FFFF
+ 16685 eff4 89C7     		movl	%eax, %edi
+ 16686 eff6 E80510FF 		call	bswap_32
+ 16686      FF
+ 16687 effb 4589F1   		movl	%r14d, %r9d
+ 16688 effe 4589E8   		movl	%r13d, %r8d
+ 16689 f001 4489E1   		movl	%r12d, %ecx
+ 16690 f004 89C2     		movl	%eax, %edx
+ 16691 f006 488D3500 		leaq	.LC5(%rip), %rsi
+ 16691      000000
+ 16692 f00d 488D3D00 		leaq	.LC1(%rip), %rdi
+ 16692      000000
+ 16693 f014 B8000000 		movl	$0, %eax
+ 16693      00
+ 16694 f019 E8000000 		call	KDbgMsg at PLT
+ 16694      00
+ 16695              	.L254:
+ 16696              	.LBE4021:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 16697              		.loc 2 934 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 506
+
+
+ 16698 f01e B8050000 		movl	$5, %eax
+ 16698      00
+ 16699 f023 F30F6F85 		movdqu	-480(%rbp), %xmm0
+ 16699      20FEFFFF 
+ 16700 f02b F30F7F85 		movdqu	%xmm0, -416(%rbp)
+ 16700      60FEFFFF 
+ 16701 f033 89855CFE 		movl	%eax, -420(%rbp)
+ 16701      FFFF
+ 16702 f039 F30F6F85 		movdqu	-416(%rbp), %xmm0
+ 16702      60FEFFFF 
+ 16703 f041 F30F7F85 		movdqu	%xmm0, -384(%rbp)
+ 16703      80FEFFFF 
+ 16704 f049 8B855CFE 		movl	-420(%rbp), %eax
+ 16704      FFFF
+ 16705 f04f 89857CFE 		movl	%eax, -388(%rbp)
+ 16705      FFFF
+ 16706              	.LBB4022:
+ 16707              	.LBB4023:
+ 16708              	.LBB4024:
+ 16709              	.LBB4025:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 16710              		.loc 3 433 0
+ 16711 f055 F30F6F85 		movdqu	-384(%rbp), %xmm0
+ 16711      80FEFFFF 
+ 16712 f05d 8B857CFE 		movl	-388(%rbp), %eax
+ 16712      FFFF
+ 16713 f063 898564F8 		movl	%eax, -1948(%rbp)
+ 16713      FFFF
+ 16714 f069 660F6E8D 		movd	-1948(%rbp), %xmm1
+ 16714      64F8FFFF 
+ 16715 f071 660FD2C1 		psrld	%xmm1, %xmm0
+ 16716              	.LBE4025:
+ 16717              	.LBE4024:
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = op_PSRLDI128 (v, k);
+ 16718              		.loc 2 488 0
+ 16719 f075 F30F7F85 		movdqu	%xmm0, -416(%rbp)
+ 16719      60FEFFFF 
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 16720              		.loc 2 489 0
+ 16721 f07d B8080000 		movl	$8, %eax
+ 16721      00
+ 16722 f082 83BD5CFE 		cmpl	$8, -420(%rbp)
+ 16722      FFFF08
+ 16723 f089 0F4E855C 		cmovle	-420(%rbp), %eax
+ 16723      FEFFFF
+ 16724 f090 4898     		cltq
+ 16725 f092 4889C2   		movq	%rax, %rdx
+ 16726 f095 48C1E204 		salq	$4, %rdx
+ 16727 f099 488D0500 		leaq	sr_mask.7327(%rip), %rax
+ 16727      000000
+ 16728 f0a0 660F6F04 		movdqa	(%rdx,%rax), %xmm0
+ 16728      02
+ 16729 f0a5 F30F6F8D 		movdqu	-416(%rbp), %xmm1
+ 16729      60FEFFFF 
+ 16730 f0ad F30F7F8D 		movdqu	%xmm1, -352(%rbp)
+ 16730      A0FEFFFF 
+ 16731 f0b5 F30F7F85 		movdqu	%xmm0, -368(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 507
+
+
+ 16731      90FEFFFF 
+ 16732              	.LBB4026:
+ 16733              	.LBB4027:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 16734              		.loc 2 206 0
+ 16735 f0bd F30F6F85 		movdqu	-368(%rbp), %xmm0
+ 16735      90FEFFFF 
+ 16736 f0c5 F30F6F8D 		movdqu	-352(%rbp), %xmm1
+ 16736      A0FEFFFF 
+ 16737 f0cd 660FDBC1 		pand	%xmm1, %xmm0
+ 16738              	.LBE4027:
+ 16739              	.LBE4026:
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 16740              		.loc 2 489 0
+ 16741 f0d1 F30F7F85 		movdqu	%xmm0, -416(%rbp)
+ 16741      60FEFFFF 
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v;
+ 16742              		.loc 2 490 0
+ 16743 f0d9 F30F6F85 		movdqu	-416(%rbp), %xmm0
+ 16743      60FEFFFF 
+ 16744              	.LBE4023:
+ 16745              	.LBE4022:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 16746              		.loc 2 934 0
+ 16747 f0e1 F30F7F85 		movdqu	%xmm0, -464(%rbp)
+ 16747      30FEFFFF 
+ 16748              	.LBB4028:
+ 935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("sr", sr);
+ 16749              		.loc 2 935 0
+ 16750 f0e9 F30F6F85 		movdqu	-464(%rbp), %xmm0
+ 16750      30FEFFFF 
+ 16751 f0f1 F30F7F85 		movdqu	%xmm0, -1696(%rbp)
+ 16751      60F9FFFF 
+ 16752 f0f9 E8000000 		call	KDbgWriterGet at PLT
+ 16752      00
+ 16753 f0fe 4885C0   		testq	%rax, %rax
+ 16754 f101 747B     		je	.L256
+ 16755 f103 BF010000 		movl	$1, %edi
+ 16755      00
+ 16756 f108 E8000000 		call	KDbgCondToFlag at PLT
+ 16756      00
+ 16757 f10d 4889C6   		movq	%rax, %rsi
+ 16758 f110 BF100000 		movl	$16, %edi
+ 16758      00
+ 16759 f115 E8000000 		call	KDbgTestModConds at PLT
+ 16759      00
+ 16760 f11a 84C0     		testb	%al, %al
+ 16761 f11c 7460     		je	.L256
+ 16762 f11e 8B856CF9 		movl	-1684(%rbp), %eax
+ 16762      FFFF
+ 16763 f124 89C7     		movl	%eax, %edi
+ 16764 f126 E8D50EFF 		call	bswap_32
+ 16764      FF
+ 16765 f12b 4189C6   		movl	%eax, %r14d
+ 16766 f12e 8B8568F9 		movl	-1688(%rbp), %eax
+ 16766      FFFF
+ 16767 f134 89C7     		movl	%eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 508
+
+
+ 16768 f136 E8C50EFF 		call	bswap_32
+ 16768      FF
+ 16769 f13b 4189C5   		movl	%eax, %r13d
+ 16770 f13e 8B8564F9 		movl	-1692(%rbp), %eax
+ 16770      FFFF
+ 16771 f144 89C7     		movl	%eax, %edi
+ 16772 f146 E8B50EFF 		call	bswap_32
+ 16772      FF
+ 16773 f14b 4189C4   		movl	%eax, %r12d
+ 16774 f14e 8B8560F9 		movl	-1696(%rbp), %eax
+ 16774      FFFF
+ 16775 f154 89C7     		movl	%eax, %edi
+ 16776 f156 E8A50EFF 		call	bswap_32
+ 16776      FF
+ 16777 f15b 4589F1   		movl	%r14d, %r9d
+ 16778 f15e 4589E8   		movl	%r13d, %r8d
+ 16779 f161 4489E1   		movl	%r12d, %ecx
+ 16780 f164 89C2     		movl	%eax, %edx
+ 16781 f166 488D3500 		leaq	.LC6(%rip), %rsi
+ 16781      000000
+ 16782 f16d 488D3D00 		leaq	.LC1(%rip), %rdi
+ 16782      000000
+ 16783 f174 B8000000 		movl	$0, %eax
+ 16783      00
+ 16784 f179 E8000000 		call	KDbgMsg at PLT
+ 16784      00
+ 16785              	.L256:
+ 16786 f17e F30F6F85 		movdqu	-480(%rbp), %xmm0
+ 16786      20FEFFFF 
+ 16787 f186 F30F7F85 		movdqu	%xmm0, -320(%rbp)
+ 16787      C0FEFFFF 
+ 16788              	.LBE4028:
+ 16789              	.LBB4029:
+ 16790              	.LBB4030:
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec vv = v;
+ 16791              		.loc 2 426 0
+ 16792 f18e F30F6F85 		movdqu	-320(%rbp), %xmm0
+ 16792      C0FEFFFF 
+ 16793 f196 F30F7F85 		movdqu	%xmm0, -304(%rbp)
+ 16793      D0FEFFFF 
+ 16794 f19e F30F6F85 		movdqu	-304(%rbp), %xmm0
+ 16794      D0FEFFFF 
+ 16795 f1a6 F30F7F85 		movdqu	%xmm0, -272(%rbp)
+ 16795      F0FEFFFF 
+ 16796              	.LBB4031:
+ 16797              	.LBB4032:
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pslldi128 ((v128_i32_t)vin, bit_count);
+ 16798              		.loc 3 416 0
+ 16799 f1ae F30F6F85 		movdqu	-272(%rbp), %xmm0
+ 16799      F0FEFFFF 
+ 16800 f1b6 660F72F0 		pslld	$3, %xmm0
+ 16800      03
+ 16801              	.LBE4032:
+ 16802              	.LBE4031:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = op_PSLLDI128 (vv, k);
+ 16803              		.loc 2 433 0
+ 16804 f1bb F30F7F85 		movdqu	%xmm0, -304(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 509
+
+
+ 16804      D0FEFFFF 
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 16805              		.loc 2 435 0
+ 16806 f1c3 B8030000 		movl	$3, %eax
+ 16806      00
+ 16807 f1c8 4898     		cltq
+ 16808 f1ca 4889C2   		movq	%rax, %rdx
+ 16809 f1cd 48C1E204 		salq	$4, %rdx
+ 16810 f1d1 488D0500 		leaq	sl_mask.7310(%rip), %rax
+ 16810      000000
+ 16811 f1d8 660F6F04 		movdqa	(%rdx,%rax), %xmm0
+ 16811      02
+ 16812 f1dd F30F6F8D 		movdqu	-304(%rbp), %xmm1
+ 16812      D0FEFFFF 
+ 16813 f1e5 F30F7F8D 		movdqu	%xmm1, -240(%rbp)
+ 16813      10FFFFFF 
+ 16814 f1ed F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 16814      00FFFFFF 
+ 16815              	.LBB4033:
+ 16816              	.LBB4034:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 16817              		.loc 2 206 0
+ 16818 f1f5 F30F6F85 		movdqu	-256(%rbp), %xmm0
+ 16818      00FFFFFF 
+ 16819 f1fd F30F6F8D 		movdqu	-240(%rbp), %xmm1
+ 16819      10FFFFFF 
+ 16820 f205 660FDBC1 		pand	%xmm1, %xmm0
+ 16821              	.LBE4034:
+ 16822              	.LBE4033:
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 16823              		.loc 2 435 0
+ 16824 f209 F30F7F85 		movdqu	%xmm0, -304(%rbp)
+ 16824      D0FEFFFF 
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vv;
+ 16825              		.loc 2 437 0
+ 16826 f211 F30F6F85 		movdqu	-304(%rbp), %xmm0
+ 16826      D0FEFFFF 
+ 16827              	.LBE4030:
+ 16828              	.LBE4029:
+ 936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ 16829              		.loc 2 936 0
+ 16830 f219 F30F7F85 		movdqu	%xmm0, -448(%rbp)
+ 16830      40FEFFFF 
+ 16831              	.LBB4035:
+ 937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("sl", sl);
+ 16832              		.loc 2 937 0
+ 16833 f221 F30F6F85 		movdqu	-448(%rbp), %xmm0
+ 16833      40FEFFFF 
+ 16834 f229 F30F7F85 		movdqu	%xmm0, -1712(%rbp)
+ 16834      50F9FFFF 
+ 16835 f231 E8000000 		call	KDbgWriterGet at PLT
+ 16835      00
+ 16836 f236 4885C0   		testq	%rax, %rax
+ 16837 f239 747B     		je	.L258
+ 16838 f23b BF010000 		movl	$1, %edi
+ 16838      00
+ 16839 f240 E8000000 		call	KDbgCondToFlag at PLT
+
GAS LISTING /tmp/ccjbMjHD.s 			page 510
+
+
+ 16839      00
+ 16840 f245 4889C6   		movq	%rax, %rsi
+ 16841 f248 BF100000 		movl	$16, %edi
+ 16841      00
+ 16842 f24d E8000000 		call	KDbgTestModConds at PLT
+ 16842      00
+ 16843 f252 84C0     		testb	%al, %al
+ 16844 f254 7460     		je	.L258
+ 16845 f256 8B855CF9 		movl	-1700(%rbp), %eax
+ 16845      FFFF
+ 16846 f25c 89C7     		movl	%eax, %edi
+ 16847 f25e E89D0DFF 		call	bswap_32
+ 16847      FF
+ 16848 f263 4189C6   		movl	%eax, %r14d
+ 16849 f266 8B8558F9 		movl	-1704(%rbp), %eax
+ 16849      FFFF
+ 16850 f26c 89C7     		movl	%eax, %edi
+ 16851 f26e E88D0DFF 		call	bswap_32
+ 16851      FF
+ 16852 f273 4189C5   		movl	%eax, %r13d
+ 16853 f276 8B8554F9 		movl	-1708(%rbp), %eax
+ 16853      FFFF
+ 16854 f27c 89C7     		movl	%eax, %edi
+ 16855 f27e E87D0DFF 		call	bswap_32
+ 16855      FF
+ 16856 f283 4189C4   		movl	%eax, %r12d
+ 16857 f286 8B8550F9 		movl	-1712(%rbp), %eax
+ 16857      FFFF
+ 16858 f28c 89C7     		movl	%eax, %edi
+ 16859 f28e E86D0DFF 		call	bswap_32
+ 16859      FF
+ 16860 f293 4589F1   		movl	%r14d, %r9d
+ 16861 f296 4589E8   		movl	%r13d, %r8d
+ 16862 f299 4489E1   		movl	%r12d, %ecx
+ 16863 f29c 89C2     		movl	%eax, %edx
+ 16864 f29e 488D3500 		leaq	.LC7(%rip), %rsi
+ 16864      000000
+ 16865 f2a5 488D3D00 		leaq	.LC1(%rip), %rdi
+ 16865      000000
+ 16866 f2ac B8000000 		movl	$0, %eax
+ 16866      00
+ 16867 f2b1 E8000000 		call	KDbgMsg at PLT
+ 16867      00
+ 16868              	.L258:
+ 16869              	.LBE4035:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 16870              		.loc 2 938 0
+ 16871 f2b6 660F6F05 		movdqa	FF_tab(%rip), %xmm0
+ 16871      00000000 
+ 16872 f2be F30F7F85 		movdqu	%xmm0, -208(%rbp)
+ 16872      30FFFFFF 
+ 16873 f2c6 F30F6F85 		movdqu	-464(%rbp), %xmm0
+ 16873      30FEFFFF 
+ 16874 f2ce F30F7F85 		movdqu	%xmm0, -224(%rbp)
+ 16874      20FFFFFF 
+ 16875 f2d6 F30F6F85 		movdqu	-208(%rbp), %xmm0
+ 16875      30FFFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 511
+
+
+ 16876 f2de F30F7F85 		movdqu	%xmm0, -176(%rbp)
+ 16876      50FFFFFF 
+ 16877 f2e6 F30F6F85 		movdqu	-224(%rbp), %xmm0
+ 16877      20FFFFFF 
+ 16878 f2ee F30F7F85 		movdqu	%xmm0, -192(%rbp)
+ 16878      40FFFFFF 
+ 16879              	.LBB4036:
+ 16880              	.LBB4037:
+ 16881              	.LBB4038:
+ 16882              	.LBB4039:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 16883              		.loc 3 529 0
+ 16884 f2f6 F30F6F8D 		movdqu	-192(%rbp), %xmm1
+ 16884      40FFFFFF 
+ 16885 f2fe F30F6F85 		movdqu	-176(%rbp), %xmm0
+ 16885      50FFFFFF 
+ 16886 f306 660F3800 		pshufb	%xmm1, %xmm0
+ 16886      C1
+ 16887              	.LBE4039:
+ 16888              	.LBE4038:
+ 16889              	.LBE4037:
+ 16890              	.LBE4036:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 16891              		.loc 2 938 0
+ 16892 f30b F30F7F85 		movdqu	%xmm0, -464(%rbp)
+ 16892      30FEFFFF 
+ 16893 f313 F30F6F85 		movdqu	-448(%rbp), %xmm0
+ 16893      40FEFFFF 
+ 16894 f31b F30F7F85 		movdqu	%xmm0, -144(%rbp)
+ 16894      70FFFFFF 
+ 16895 f323 F30F6F85 		movdqu	-464(%rbp), %xmm0
+ 16895      30FEFFFF 
+ 16896 f32b F30F7F85 		movdqu	%xmm0, -160(%rbp)
+ 16896      60FFFFFF 
+ 16897              	.LBB4040:
+ 16898              	.LBB4041:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 16899              		.loc 2 178 0
+ 16900 f333 F30F6F85 		movdqu	-160(%rbp), %xmm0
+ 16900      60FFFFFF 
+ 16901 f33b F30F6F8D 		movdqu	-144(%rbp), %xmm1
+ 16901      70FFFFFF 
+ 16902 f343 660FEFC1 		pxor	%xmm1, %xmm0
+ 16903              	.LBE4041:
+ 16904              	.LBE4040:
+ 16905              	.LBE4020:
+ 16906              	.LBE4019:
+1120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f8 = AESBCMEMBER(FF_mul) (f8,3);
+ 16907              		.loc 2 1120 0
+ 16908 f347 660F7F85 		movdqa	%xmm0, -1936(%rbp)
+ 16908      70F8FFFF 
+ 16909 f34f F30F6F85 		movdqu	-1648(%rbp), %xmm0
+ 16909      90F9FFFF 
+ 16910 f357 F30F7F45 		movdqu	%xmm0, -112(%rbp)
+ 16910      90
+ 16911 f35c 660F6F85 		movdqa	-1904(%rbp), %xmm0
+ 16911      90F8FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 512
+
+
+ 16912 f364 F30F7F45 		movdqu	%xmm0, -128(%rbp)
+ 16912      80
+ 16913              	.LBB4042:
+ 16914              	.LBB4043:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 16915              		.loc 2 178 0
+ 16916 f369 F30F6F45 		movdqu	-128(%rbp), %xmm0
+ 16916      80
+ 16917 f36e F30F6F4D 		movdqu	-112(%rbp), %xmm1
+ 16917      90
+ 16918 f373 660FEFC1 		pxor	%xmm1, %xmm0
+ 16919              	.LBE4043:
+ 16920              	.LBE4042:
+1142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f2);
+ 16921              		.loc 2 1142 0
+ 16922 f377 F30F7F85 		movdqu	%xmm0, -1648(%rbp)
+ 16922      90F9FFFF 
+ 16923 f37f F30F6F85 		movdqu	-1648(%rbp), %xmm0
+ 16923      90F9FFFF 
+ 16924 f387 F30F7F45 		movdqu	%xmm0, -80(%rbp)
+ 16924      B0
+ 16925 f38c 660F6F8D 		movdqa	-1920(%rbp), %xmm1
+ 16925      80F8FFFF 
+ 16926 f394 F30F7F4D 		movdqu	%xmm1, -96(%rbp)
+ 16926      A0
+ 16927              	.LBB4044:
+ 16928              	.LBB4045:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 16929              		.loc 2 178 0
+ 16930 f399 F30F6F45 		movdqu	-96(%rbp), %xmm0
+ 16930      A0
+ 16931 f39e F30F6F4D 		movdqu	-80(%rbp), %xmm1
+ 16931      B0
+ 16932 f3a3 660FEFC1 		pxor	%xmm1, %xmm0
+ 16933              	.LBE4045:
+ 16934              	.LBE4044:
+1143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f4);
+ 16935              		.loc 2 1143 0
+ 16936 f3a7 F30F7F85 		movdqu	%xmm0, -1648(%rbp)
+ 16936      90F9FFFF 
+ 16937 f3af F30F6F85 		movdqu	-1648(%rbp), %xmm0
+ 16937      90F9FFFF 
+ 16938 f3b7 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 16938      D0
+ 16939 f3bc 660F6F85 		movdqa	-1936(%rbp), %xmm0
+ 16939      70F8FFFF 
+ 16940 f3c4 F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 16940      C0
+ 16941              	.LBB4046:
+ 16942              	.LBB4047:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 16943              		.loc 2 178 0
+ 16944 f3c9 F30F6F45 		movdqu	-64(%rbp), %xmm0
+ 16944      C0
+ 16945 f3ce F30F6F4D 		movdqu	-48(%rbp), %xmm1
+ 16945      D0
+ 16946 f3d3 660FEFC1 		pxor	%xmm1, %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 513
+
+
+ 16947              	.LBE4047:
+ 16948              	.LBE4046:
+1144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f8);
+ 16949              		.loc 2 1144 0
+ 16950 f3d7 F30F7F85 		movdqu	%xmm0, -1648(%rbp)
+ 16950      90F9FFFF 
+1148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 16951              		.loc 2 1148 0
+ 16952 f3df F30F6F85 		movdqu	-1648(%rbp), %xmm0
+ 16952      90F9FFFF 
+ 16953              	.LBE3944:
+ 16954              	.LBE3943:
+ 16955              		.loc 2 1958 0
+ 16956 f3e7 660F7F03 		movdqa	%xmm0, (%rbx)
+ 16957 f3eb 838588F9 		addl	$1, -1656(%rbp)
+ 16957      FFFF01
+ 16958              	.L240:
+1957:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     while (jx)
+ 16959              		.loc 2 1957 0
+ 16960 f3f2 83BD8CF9 		cmpl	$0, -1652(%rbp)
+ 16960      FFFF00
+ 16961 f3f9 0F85F3F0 		jne	.L259
+ 16961      FFFF
+1959:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r[ix] = dr[jx];
+ 16962              		.loc 2 1959 0
+ 16963 f3ff 8B8588F9 		mov	-1656(%rbp), %eax
+ 16963      FFFF
+ 16964 f405 48C1E004 		salq	$4, %rax
+ 16965 f409 480385E8 		addq	-1816(%rbp), %rax
+ 16965      F8FFFF
+ 16966 f410 8B958CF9 		mov	-1652(%rbp), %edx
+ 16966      FFFF
+ 16967 f416 48C1E204 		salq	$4, %rdx
+ 16968 f41a 480395E0 		addq	-1824(%rbp), %rdx
+ 16968      F8FFFF
+ 16969 f421 660F6F02 		movdqa	(%rdx), %xmm0
+ 16970 f425 660F7F00 		movdqa	%xmm0, (%rax)
+1960:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 16971              		.loc 2 1960 0
+ 16972 f429 4881C480 		addq	$1920, %rsp
+ 16972      070000
+ 16973 f430 5B       		popq	%rbx
+ 16974 f431 415C     		popq	%r12
+ 16975 f433 415D     		popq	%r13
+ 16976 f435 415E     		popq	%r14
+ 16977 f437 C9       		leave
+ 16978 f438 C3       		ret
+ 16979              		.cfi_endproc
+ 16980              	.LFE648:
+ 16981              		.size	KAESBlockCipherVecRegEqInvKeyExpansion, .-KAESBlockCipherVecRegEqInvKeyExpansion
+ 16982              		.type	KAESBlockCipherVecRegEqInvKeyExpansion128, @function
+ 16983              	KAESBlockCipherVecRegEqInvKeyExpansion128:
+ 16984              	.LFB649:
+1961:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1962:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1963:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1964:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion128) (CipherVec * w, const CipherVec * kw)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 514
+
+
+1965:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 16985              		.loc 2 1965 0
+ 16986              		.cfi_startproc
+ 16987 f439 55       		pushq	%rbp
+ 16988              	.LCFI10:
+ 16989              		.cfi_def_cfa_offset 16
+ 16990 f43a 4889E5   		movq	%rsp, %rbp
+ 16991              		.cfi_offset 6, -16
+ 16992              	.LCFI11:
+ 16993              		.cfi_def_cfa_register 6
+ 16994 f43d 4883EC10 		subq	$16, %rsp
+ 16995 f441 48897DF8 		movq	%rdi, -8(%rbp)
+ 16996 f445 488975F0 		movq	%rsi, -16(%rbp)
+1966:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_128);
+ 16997              		.loc 2 1966 0
+ 16998 f449 488B4DF0 		movq	-16(%rbp), %rcx
+ 16999 f44d 488B45F8 		movq	-8(%rbp), %rax
+ 17000 f451 BA0A0000 		movl	$10, %edx
+ 17000      00
+ 17001 f456 4889CE   		movq	%rcx, %rsi
+ 17002 f459 4889C7   		movq	%rax, %rdi
+ 17003 f45c E818F0FF 		call	KAESBlockCipherVecRegEqInvKeyExpansion
+ 17003      FF
+1967:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 17004              		.loc 2 1967 0
+ 17005 f461 C9       		leave
+ 17006 f462 C3       		ret
+ 17007              		.cfi_endproc
+ 17008              	.LFE649:
+ 17009              		.size	KAESBlockCipherVecRegEqInvKeyExpansion128, .-KAESBlockCipherVecRegEqInvKeyExpansion128
+ 17010              		.type	KAESBlockCipherVecRegEqInvKeyExpansion192, @function
+ 17011              	KAESBlockCipherVecRegEqInvKeyExpansion192:
+ 17012              	.LFB650:
+1968:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1969:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1970:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1971:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion192) (CipherVec * w, const CipherVec * kw)
+1972:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 17013              		.loc 2 1972 0
+ 17014              		.cfi_startproc
+ 17015 f463 55       		pushq	%rbp
+ 17016              	.LCFI12:
+ 17017              		.cfi_def_cfa_offset 16
+ 17018 f464 4889E5   		movq	%rsp, %rbp
+ 17019              		.cfi_offset 6, -16
+ 17020              	.LCFI13:
+ 17021              		.cfi_def_cfa_register 6
+ 17022 f467 4883EC10 		subq	$16, %rsp
+ 17023 f46b 48897DF8 		movq	%rdi, -8(%rbp)
+ 17024 f46f 488975F0 		movq	%rsi, -16(%rbp)
+1973:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_192);
+ 17025              		.loc 2 1973 0
+ 17026 f473 488B4DF0 		movq	-16(%rbp), %rcx
+ 17027 f477 488B45F8 		movq	-8(%rbp), %rax
+ 17028 f47b BA0C0000 		movl	$12, %edx
+ 17028      00
+ 17029 f480 4889CE   		movq	%rcx, %rsi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 515
+
+
+ 17030 f483 4889C7   		movq	%rax, %rdi
+ 17031 f486 E8EEEFFF 		call	KAESBlockCipherVecRegEqInvKeyExpansion
+ 17031      FF
+1974:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 17032              		.loc 2 1974 0
+ 17033 f48b C9       		leave
+ 17034 f48c C3       		ret
+ 17035              		.cfi_endproc
+ 17036              	.LFE650:
+ 17037              		.size	KAESBlockCipherVecRegEqInvKeyExpansion192, .-KAESBlockCipherVecRegEqInvKeyExpansion192
+ 17038              		.type	KAESBlockCipherVecRegEqInvKeyExpansion256, @function
+ 17039              	KAESBlockCipherVecRegEqInvKeyExpansion256:
+ 17040              	.LFB651:
+1975:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1976:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1977:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+1978:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(EqInvKeyExpansion256) (CipherVec * w, const CipherVec * kw)
+1979:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 17041              		.loc 2 1979 0
+ 17042              		.cfi_startproc
+ 17043 f48d 55       		pushq	%rbp
+ 17044              	.LCFI14:
+ 17045              		.cfi_def_cfa_offset 16
+ 17046 f48e 4889E5   		movq	%rsp, %rbp
+ 17047              		.cfi_offset 6, -16
+ 17048              	.LCFI15:
+ 17049              		.cfi_def_cfa_register 6
+ 17050 f491 4883EC10 		subq	$16, %rsp
+ 17051 f495 48897DF8 		movq	%rdi, -8(%rbp)
+ 17052 f499 488975F0 		movq	%rsi, -16(%rbp)
+1980:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(EqInvKeyExpansion) (w, kw, AES_Nr_256);
+ 17053              		.loc 2 1980 0
+ 17054 f49d 488B4DF0 		movq	-16(%rbp), %rcx
+ 17055 f4a1 488B45F8 		movq	-8(%rbp), %rax
+ 17056 f4a5 BA0E0000 		movl	$14, %edx
+ 17056      00
+ 17057 f4aa 4889CE   		movq	%rcx, %rsi
+ 17058 f4ad 4889C7   		movq	%rax, %rdi
+ 17059 f4b0 E8C4EFFF 		call	KAESBlockCipherVecRegEqInvKeyExpansion
+ 17059      FF
+1981:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 17060              		.loc 2 1981 0
+ 17061 f4b5 C9       		leave
+ 17062 f4b6 C3       		ret
+ 17063              		.cfi_endproc
+ 17064              	.LFE651:
+ 17065              		.size	KAESBlockCipherVecRegEqInvKeyExpansion256, .-KAESBlockCipherVecRegEqInvKeyExpansion256
+ 17066              		.section	.rodata
+ 17067              	.LC8:
+ 17068 03de 53746172 		.string	"Start of Round"
+ 17068      74206F66 
+ 17068      20526F75 
+ 17068      6E6400
+ 17069              	.LC9:
+ 17070 03ed 526F756E 		.string	"Round Key"
+ 17070      64204B65 
+ 17070      7900
+
GAS LISTING /tmp/ccjbMjHD.s 			page 516
+
+
+ 17071              	.LC10:
+ 17072 03f7 456E6420 		.string	"End 1st Round"
+ 17072      31737420 
+ 17072      526F756E 
+ 17072      6400
+ 17073              	.LC11:
+ 17074 0405 41667465 		.string	"After SubBytes"
+ 17074      72205375 
+ 17074      62427974 
+ 17074      657300
+ 17075              	.LC12:
+ 17076 0414 41667465 		.string	"After ShiftRow"
+ 17076      72205368 
+ 17076      69667452 
+ 17076      6F7700
+ 17077              	.LC13:
+ 17078 0423 41667465 		.string	"After MixColum"
+ 17078      72204D69 
+ 17078      78436F6C 
+ 17078      756D00
+ 17079              	.LC14:
+ 17080 0432 456E6420 		.string	"End of Round"
+ 17080      6F662052 
+ 17080      6F756E64 
+ 17080      00
+ 17081              		.text
+ 17082              		.type	KAESBlockCipherVecRegCipher, @function
+ 17083              	KAESBlockCipherVecRegCipher:
+ 17084              	.LFB655:
+1982:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1983:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1984:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+1985:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Cipher First Round
+1986:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+1987:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1988:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FirstRound) (CipherVec state, const CipherVec round_keys)
+1989:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+1990:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1991:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+1992:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(FirstRound) (CipherVec state, const CipherVec round_keys)
+1993:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+1994:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Start of Round", state);
+1995:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1996:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+1997:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+1998:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+1999:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2000:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("End 1st Round", state);
+2001:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2002:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+2003:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2004:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2005:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2006:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+2007:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MiddleRound) (register CipherVec state,
+2008:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                     register const CipherVec round_keys)
+2009:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+
GAS LISTING /tmp/ccjbMjHD.s 			page 517
+
+
+2010:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2011:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+2012:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(MiddleRound) (register CipherVec state,
+2013:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                     register const CipherVec round_keys)
+2014:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2015:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if _DEBUGGING
+2016:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec mstate;
+2017:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec mround_keys;
+2018:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2019:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+2020:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mround_keys = round_keys;
+2021:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2022:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Start of Round", mstate);
+2023:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2024:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2025:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2026:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2027:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_AESENC (state, round_keys);
+2028:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+2029:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(SubBytes) (state);
+2030:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2031:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After SubBytes", state);
+2032:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2033:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(ShiftRows) (state);
+2034:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2035:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+2036:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2037:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(MixColumns) (state);
+2038:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2039:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /* ommited n on purpose */
+2040:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After MixColum", state);
+2041:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2042:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2043:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2044:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+2045:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("End of Round", state);
+2046:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+2048:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2049:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2050:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2051:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+2052:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(LastRound) (register CipherVec state, register CipherVec round_keys)
+2053:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+2054:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2055:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+2056:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(LastRound) (register CipherVec state, register CipherVec round_keys)
+2057:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2058:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Start of Round", state);
+2059:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2060:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2061:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_AESENCLAST (state, round_keys);
+2062:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+2063:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(SubBytes) (state);
+2064:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2065:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After SubBytes", state);
+2066:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 518
+
+
+2067:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(ShiftRows) (state);
+2068:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2069:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+2070:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2071:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2072:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2073:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+2074:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("End of Round", state);
+2075:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2076:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+2077:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2078:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2079:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2080:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2081:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Cipher
+2082:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2083:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2084:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * 
+2085:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** This implementation as stated
+2086:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * above for simplifaction broke out the three types of rounds into
+2087:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * first round, middle rounds, and last round.  This approach was taken
+2088:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * for ease of coding for optimization using smaller bytes of code
+2089:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * but inlining of the functions for efficiency
+2090:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2091:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__ 
+2092:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(Cipher) (CipherVec state, const CipherVec * key,
+2093:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                             unsigned Nr)
+2094:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 17085              		.loc 2 2094 0
+ 17086              		.cfi_startproc
+ 17087 f4b7 55       		pushq	%rbp
+ 17088              	.LCFI16:
+ 17089              		.cfi_def_cfa_offset 16
+ 17090 f4b8 4889E5   		movq	%rsp, %rbp
+ 17091              		.cfi_offset 6, -16
+ 17092              	.LCFI17:
+ 17093              		.cfi_def_cfa_register 6
+ 17094 f4bb 4155     		pushq	%r13
+ 17095 f4bd 4154     		pushq	%r12
+ 17096 f4bf 53       		pushq	%rbx
+ 17097 f4c0 4881EC58 		subq	$2648, %rsp
+ 17097      0A0000
+ 17098 f4c7 660F7F85 		movdqa	%xmm0, -2576(%rbp)
+ 17098      F0F5FFFF 
+ 17099 f4cf 4889BDE8 		movq	%rdi, -2584(%rbp)
+ 17099      F5FFFF
+ 17100 f4d6 89B5E4F5 		movl	%esi, -2588(%rbp)
+ 17100      FFFF
+2095:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix = 0;
+ 17101              		.loc 2 2095 0
+ 17102 f4dc C7853CF7 		movl	$0, -2244(%rbp)
+ 17102      FFFF0000 
+ 17102      0000
+2096:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2097:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(FirstRound) (state, key[ix++]);
+ 17103              		.loc 2 2097 0
+ 17104 f4e6 8B853CF7 		mov	-2244(%rbp), %eax
+
GAS LISTING /tmp/ccjbMjHD.s 			page 519
+
+
+ 17104      FFFF
+ 17105 f4ec 48C1E004 		salq	$4, %rax
+ 17106 f4f0 480385E8 		addq	-2584(%rbp), %rax
+ 17106      F5FFFF
+ 17107 f4f7 660F6F00 		movdqa	(%rax), %xmm0
+ 17108 f4fb 83853CF7 		addl	$1, -2244(%rbp)
+ 17108      FFFF01
+ 17109 f502 660F6F8D 		movdqa	-2576(%rbp), %xmm1
+ 17109      F0F5FFFF 
+ 17110 f50a F30F7F8D 		movdqu	%xmm1, -2224(%rbp)
+ 17110      50F7FFFF 
+ 17111 f512 F30F7F85 		movdqu	%xmm0, -2240(%rbp)
+ 17111      40F7FFFF 
+ 17112              	.LBB4199:
+ 17113              	.LBB4200:
+ 17114              	.LBB4201:
+1994:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Start of Round", state);
+ 17115              		.loc 2 1994 0
+ 17116 f51a F30F6F85 		movdqu	-2224(%rbp), %xmm0
+ 17116      50F7FFFF 
+ 17117 f522 F30F7F85 		movdqu	%xmm0, -2528(%rbp)
+ 17117      20F6FFFF 
+ 17118              		.cfi_offset 3, -40
+ 17119              		.cfi_offset 12, -32
+ 17120              		.cfi_offset 13, -24
+ 17121 f52a E8000000 		call	KDbgWriterGet at PLT
+ 17121      00
+ 17122 f52f 4885C0   		testq	%rax, %rax
+ 17123 f532 7479     		je	.L269
+ 17124 f534 BF010000 		movl	$1, %edi
+ 17124      00
+ 17125 f539 E8000000 		call	KDbgCondToFlag at PLT
+ 17125      00
+ 17126 f53e 4889C6   		movq	%rax, %rsi
+ 17127 f541 BF100000 		movl	$16, %edi
+ 17127      00
+ 17128 f546 E8000000 		call	KDbgTestModConds at PLT
+ 17128      00
+ 17129 f54b 84C0     		testb	%al, %al
+ 17130 f54d 745E     		je	.L269
+ 17131 f54f 8B852CF6 		movl	-2516(%rbp), %eax
+ 17131      FFFF
+ 17132 f555 89C7     		movl	%eax, %edi
+ 17133 f557 E8A40AFF 		call	bswap_32
+ 17133      FF
+ 17134 f55c 4189C5   		movl	%eax, %r13d
+ 17135 f55f 8B8528F6 		movl	-2520(%rbp), %eax
+ 17135      FFFF
+ 17136 f565 89C7     		movl	%eax, %edi
+ 17137 f567 E8940AFF 		call	bswap_32
+ 17137      FF
+ 17138 f56c 4189C4   		movl	%eax, %r12d
+ 17139 f56f 8B8524F6 		movl	-2524(%rbp), %eax
+ 17139      FFFF
+ 17140 f575 89C7     		movl	%eax, %edi
+ 17141 f577 E8840AFF 		call	bswap_32
+ 17141      FF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 520
+
+
+ 17142 f57c 89C3     		movl	%eax, %ebx
+ 17143 f57e 8B8520F6 		movl	-2528(%rbp), %eax
+ 17143      FFFF
+ 17144 f584 89C7     		movl	%eax, %edi
+ 17145 f586 E8750AFF 		call	bswap_32
+ 17145      FF
+ 17146 f58b 4589E9   		movl	%r13d, %r9d
+ 17147 f58e 4589E0   		movl	%r12d, %r8d
+ 17148 f591 89D9     		movl	%ebx, %ecx
+ 17149 f593 89C2     		movl	%eax, %edx
+ 17150 f595 488D3500 		leaq	.LC8(%rip), %rsi
+ 17150      000000
+ 17151 f59c 488D3D00 		leaq	.LC1(%rip), %rdi
+ 17151      000000
+ 17152 f5a3 B8000000 		movl	$0, %eax
+ 17152      00
+ 17153 f5a8 E8000000 		call	KDbgMsg at PLT
+ 17153      00
+ 17154              	.L269:
+ 17155              	.LBE4201:
+ 17156              	.LBB4202:
+1996:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+ 17157              		.loc 2 1996 0
+ 17158 f5ad F30F6F85 		movdqu	-2240(%rbp), %xmm0
+ 17158      40F7FFFF 
+ 17159 f5b5 F30F7F85 		movdqu	%xmm0, -2544(%rbp)
+ 17159      10F6FFFF 
+ 17160 f5bd E8000000 		call	KDbgWriterGet at PLT
+ 17160      00
+ 17161 f5c2 4885C0   		testq	%rax, %rax
+ 17162 f5c5 7479     		je	.L271
+ 17163 f5c7 BF010000 		movl	$1, %edi
+ 17163      00
+ 17164 f5cc E8000000 		call	KDbgCondToFlag at PLT
+ 17164      00
+ 17165 f5d1 4889C6   		movq	%rax, %rsi
+ 17166 f5d4 BF100000 		movl	$16, %edi
+ 17166      00
+ 17167 f5d9 E8000000 		call	KDbgTestModConds at PLT
+ 17167      00
+ 17168 f5de 84C0     		testb	%al, %al
+ 17169 f5e0 745E     		je	.L271
+ 17170 f5e2 8B851CF6 		movl	-2532(%rbp), %eax
+ 17170      FFFF
+ 17171 f5e8 89C7     		movl	%eax, %edi
+ 17172 f5ea E8110AFF 		call	bswap_32
+ 17172      FF
+ 17173 f5ef 4189C5   		movl	%eax, %r13d
+ 17174 f5f2 8B8518F6 		movl	-2536(%rbp), %eax
+ 17174      FFFF
+ 17175 f5f8 89C7     		movl	%eax, %edi
+ 17176 f5fa E8010AFF 		call	bswap_32
+ 17176      FF
+ 17177 f5ff 4189C4   		movl	%eax, %r12d
+ 17178 f602 8B8514F6 		movl	-2540(%rbp), %eax
+ 17178      FFFF
+ 17179 f608 89C7     		movl	%eax, %edi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 521
+
+
+ 17180 f60a E8F109FF 		call	bswap_32
+ 17180      FF
+ 17181 f60f 89C3     		movl	%eax, %ebx
+ 17182 f611 8B8510F6 		movl	-2544(%rbp), %eax
+ 17182      FFFF
+ 17183 f617 89C7     		movl	%eax, %edi
+ 17184 f619 E8E209FF 		call	bswap_32
+ 17184      FF
+ 17185 f61e 4589E9   		movl	%r13d, %r9d
+ 17186 f621 4589E0   		movl	%r12d, %r8d
+ 17187 f624 89D9     		movl	%ebx, %ecx
+ 17188 f626 89C2     		movl	%eax, %edx
+ 17189 f628 488D3500 		leaq	.LC9(%rip), %rsi
+ 17189      000000
+ 17190 f62f 488D3D00 		leaq	.LC1(%rip), %rdi
+ 17190      000000
+ 17191 f636 B8000000 		movl	$0, %eax
+ 17191      00
+ 17192 f63b E8000000 		call	KDbgMsg at PLT
+ 17192      00
+ 17193              	.L271:
+ 17194 f640 F30F6F85 		movdqu	-2224(%rbp), %xmm0
+ 17194      50F7FFFF 
+ 17195 f648 F30F7F85 		movdqu	%xmm0, -2192(%rbp)
+ 17195      70F7FFFF 
+ 17196 f650 F30F6F85 		movdqu	-2240(%rbp), %xmm0
+ 17196      40F7FFFF 
+ 17197 f658 F30F7F85 		movdqu	%xmm0, -2208(%rbp)
+ 17197      60F7FFFF 
+ 17198 f660 F30F6F85 		movdqu	-2192(%rbp), %xmm0
+ 17198      70F7FFFF 
+ 17199 f668 F30F7F85 		movdqu	%xmm0, -2160(%rbp)
+ 17199      90F7FFFF 
+ 17200 f670 F30F6F85 		movdqu	-2208(%rbp), %xmm0
+ 17200      60F7FFFF 
+ 17201 f678 F30F7F85 		movdqu	%xmm0, -2176(%rbp)
+ 17201      80F7FFFF 
+ 17202              	.LBE4202:
+ 17203              	.LBB4203:
+ 17204              	.LBB4204:
+ 17205              	.LBB4205:
+ 17206              	.LBB4206:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 17207              		.loc 2 178 0
+ 17208 f680 F30F6F85 		movdqu	-2176(%rbp), %xmm0
+ 17208      80F7FFFF 
+ 17209 f688 F30F6F8D 		movdqu	-2160(%rbp), %xmm1
+ 17209      90F7FFFF 
+ 17210 f690 660FEFC1 		pxor	%xmm1, %xmm0
+ 17211              	.LBE4206:
+ 17212              	.LBE4205:
+ 17213              	.LBE4204:
+ 17214              	.LBE4203:
+1998:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 17215              		.loc 2 1998 0
+ 17216 f694 F30F7F85 		movdqu	%xmm0, -2224(%rbp)
+ 17216      50F7FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 522
+
+
+ 17217              	.LBB4207:
+2000:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("End 1st Round", state);
+ 17218              		.loc 2 2000 0
+ 17219 f69c F30F6F85 		movdqu	-2224(%rbp), %xmm0
+ 17219      50F7FFFF 
+ 17220 f6a4 F30F7F85 		movdqu	%xmm0, -2560(%rbp)
+ 17220      00F6FFFF 
+ 17221 f6ac E8000000 		call	KDbgWriterGet at PLT
+ 17221      00
+ 17222 f6b1 4885C0   		testq	%rax, %rax
+ 17223 f6b4 7479     		je	.L273
+ 17224 f6b6 BF010000 		movl	$1, %edi
+ 17224      00
+ 17225 f6bb E8000000 		call	KDbgCondToFlag at PLT
+ 17225      00
+ 17226 f6c0 4889C6   		movq	%rax, %rsi
+ 17227 f6c3 BF100000 		movl	$16, %edi
+ 17227      00
+ 17228 f6c8 E8000000 		call	KDbgTestModConds at PLT
+ 17228      00
+ 17229 f6cd 84C0     		testb	%al, %al
+ 17230 f6cf 745E     		je	.L273
+ 17231 f6d1 8B850CF6 		movl	-2548(%rbp), %eax
+ 17231      FFFF
+ 17232 f6d7 89C7     		movl	%eax, %edi
+ 17233 f6d9 E82209FF 		call	bswap_32
+ 17233      FF
+ 17234 f6de 4189C5   		movl	%eax, %r13d
+ 17235 f6e1 8B8508F6 		movl	-2552(%rbp), %eax
+ 17235      FFFF
+ 17236 f6e7 89C7     		movl	%eax, %edi
+ 17237 f6e9 E81209FF 		call	bswap_32
+ 17237      FF
+ 17238 f6ee 4189C4   		movl	%eax, %r12d
+ 17239 f6f1 8B8504F6 		movl	-2556(%rbp), %eax
+ 17239      FFFF
+ 17240 f6f7 89C7     		movl	%eax, %edi
+ 17241 f6f9 E80209FF 		call	bswap_32
+ 17241      FF
+ 17242 f6fe 89C3     		movl	%eax, %ebx
+ 17243 f700 8B8500F6 		movl	-2560(%rbp), %eax
+ 17243      FFFF
+ 17244 f706 89C7     		movl	%eax, %edi
+ 17245 f708 E8F308FF 		call	bswap_32
+ 17245      FF
+ 17246 f70d 4589E9   		movl	%r13d, %r9d
+ 17247 f710 4589E0   		movl	%r12d, %r8d
+ 17248 f713 89D9     		movl	%ebx, %ecx
+ 17249 f715 89C2     		movl	%eax, %edx
+ 17250 f717 488D3500 		leaq	.LC10(%rip), %rsi
+ 17250      000000
+ 17251 f71e 488D3D00 		leaq	.LC1(%rip), %rdi
+ 17251      000000
+ 17252 f725 B8000000 		movl	$0, %eax
+ 17252      00
+ 17253 f72a E8000000 		call	KDbgMsg at PLT
+ 17253      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 523
+
+
+ 17254              	.L273:
+ 17255              	.LBE4207:
+2002:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 17256              		.loc 2 2002 0
+ 17257 f72f F30F6F85 		movdqu	-2224(%rbp), %xmm0
+ 17257      50F7FFFF 
+ 17258              	.LBE4200:
+ 17259              	.LBE4199:
+ 17260              		.loc 2 2097 0
+ 17261 f737 660F7F85 		movdqa	%xmm0, -2576(%rbp)
+ 17261      F0F5FFFF 
+2098:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2099:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for ( ; ix < Nr; ++ix)
+ 17262              		.loc 2 2099 0
+ 17263 f73f E9110F00 		jmp	.L274
+ 17263      00
+ 17264              	.L299:
+2100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(MiddleRound) (state, key[ix] );
+ 17265              		.loc 2 2100 0
+ 17266 f744 8B853CF7 		mov	-2244(%rbp), %eax
+ 17266      FFFF
+ 17267 f74a 48C1E004 		salq	$4, %rax
+ 17268 f74e 480385E8 		addq	-2584(%rbp), %rax
+ 17268      F5FFFF
+ 17269 f755 660F6F00 		movdqa	(%rax), %xmm0
+ 17270 f759 660F6F8D 		movdqa	-2576(%rbp), %xmm1
+ 17270      F0F5FFFF 
+ 17271 f761 F30F7F8D 		movdqu	%xmm1, -2128(%rbp)
+ 17271      B0F7FFFF 
+ 17272 f769 F30F7F85 		movdqu	%xmm0, -2144(%rbp)
+ 17272      A0F7FFFF 
+ 17273              	.LBB4208:
+ 17274              	.LBB4209:
+2019:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+ 17275              		.loc 2 2019 0
+ 17276 f771 F30F6F85 		movdqu	-2128(%rbp), %xmm0
+ 17276      B0F7FFFF 
+ 17277 f779 F30F7F85 		movdqu	%xmm0, -2096(%rbp)
+ 17277      D0F7FFFF 
+2020:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mround_keys = round_keys;
+ 17278              		.loc 2 2020 0
+ 17279 f781 F30F6F85 		movdqu	-2144(%rbp), %xmm0
+ 17279      A0F7FFFF 
+ 17280 f789 F30F7F85 		movdqu	%xmm0, -2112(%rbp)
+ 17280      C0F7FFFF 
+ 17281              	.LBB4210:
+2022:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Start of Round", mstate);
+ 17282              		.loc 2 2022 0
+ 17283 f791 F30F6F85 		movdqu	-2096(%rbp), %xmm0
+ 17283      D0F7FFFF 
+ 17284 f799 F30F7F85 		movdqu	%xmm0, -2432(%rbp)
+ 17284      80F6FFFF 
+ 17285 f7a1 E8000000 		call	KDbgWriterGet at PLT
+ 17285      00
+ 17286 f7a6 4885C0   		testq	%rax, %rax
+ 17287 f7a9 7479     		je	.L276
+ 17288 f7ab BF010000 		movl	$1, %edi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 524
+
+
+ 17288      00
+ 17289 f7b0 E8000000 		call	KDbgCondToFlag at PLT
+ 17289      00
+ 17290 f7b5 4889C6   		movq	%rax, %rsi
+ 17291 f7b8 BF100000 		movl	$16, %edi
+ 17291      00
+ 17292 f7bd E8000000 		call	KDbgTestModConds at PLT
+ 17292      00
+ 17293 f7c2 84C0     		testb	%al, %al
+ 17294 f7c4 745E     		je	.L276
+ 17295 f7c6 8B858CF6 		movl	-2420(%rbp), %eax
+ 17295      FFFF
+ 17296 f7cc 89C7     		movl	%eax, %edi
+ 17297 f7ce E82D08FF 		call	bswap_32
+ 17297      FF
+ 17298 f7d3 4189C5   		movl	%eax, %r13d
+ 17299 f7d6 8B8588F6 		movl	-2424(%rbp), %eax
+ 17299      FFFF
+ 17300 f7dc 89C7     		movl	%eax, %edi
+ 17301 f7de E81D08FF 		call	bswap_32
+ 17301      FF
+ 17302 f7e3 4189C4   		movl	%eax, %r12d
+ 17303 f7e6 8B8584F6 		movl	-2428(%rbp), %eax
+ 17303      FFFF
+ 17304 f7ec 89C7     		movl	%eax, %edi
+ 17305 f7ee E80D08FF 		call	bswap_32
+ 17305      FF
+ 17306 f7f3 89C3     		movl	%eax, %ebx
+ 17307 f7f5 8B8580F6 		movl	-2432(%rbp), %eax
+ 17307      FFFF
+ 17308 f7fb 89C7     		movl	%eax, %edi
+ 17309 f7fd E8FE07FF 		call	bswap_32
+ 17309      FF
+ 17310 f802 4589E9   		movl	%r13d, %r9d
+ 17311 f805 4589E0   		movl	%r12d, %r8d
+ 17312 f808 89D9     		movl	%ebx, %ecx
+ 17313 f80a 89C2     		movl	%eax, %edx
+ 17314 f80c 488D3500 		leaq	.LC8(%rip), %rsi
+ 17314      000000
+ 17315 f813 488D3D00 		leaq	.LC1(%rip), %rdi
+ 17315      000000
+ 17316 f81a B8000000 		movl	$0, %eax
+ 17316      00
+ 17317 f81f E8000000 		call	KDbgMsg at PLT
+ 17317      00
+ 17318              	.L276:
+ 17319 f824 F30F6F85 		movdqu	-2128(%rbp), %xmm0
+ 17319      B0F7FFFF 
+ 17320 f82c F30F7F85 		movdqu	%xmm0, -2080(%rbp)
+ 17320      E0F7FFFF 
+ 17321 f834 F30F6F85 		movdqu	-2080(%rbp), %xmm0
+ 17321      E0F7FFFF 
+ 17322 f83c F30F7F85 		movdqu	%xmm0, -2048(%rbp)
+ 17322      00F8FFFF 
+ 17323 f844 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 17323      000000
+ 17324 f84b 488985F8 		movq	%rax, -2056(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 525
+
+
+ 17324      F7FFFF
+ 17325              	.LBE4210:
+ 17326              	.LBB4211:
+ 17327              	.LBB4212:
+ 17328              	.LBB4213:
+ 17329              	.LBB4214:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 17330              		.loc 2 851 0
+ 17331 f852 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 17331      00000000 
+ 17332 f85a F30F7F85 		movdqu	%xmm0, -2016(%rbp)
+ 17332      20F8FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 17333              		.loc 2 854 0
+ 17334 f862 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 17334      00000000 
+ 17335 f86a F30F6F8D 		movdqu	-2048(%rbp), %xmm1
+ 17335      00F8FFFF 
+ 17336 f872 F30F7F8D 		movdqu	%xmm1, -1936(%rbp)
+ 17336      70F8FFFF 
+ 17337 f87a F30F7F85 		movdqu	%xmm0, -1952(%rbp)
+ 17337      60F8FFFF 
+ 17338              	.LBB4215:
+ 17339              	.LBB4216:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 17340              		.loc 2 206 0
+ 17341 f882 F30F6F85 		movdqu	-1952(%rbp), %xmm0
+ 17341      60F8FFFF 
+ 17342 f88a F30F6F8D 		movdqu	-1936(%rbp), %xmm1
+ 17342      70F8FFFF 
+ 17343 f892 660FDBC1 		pand	%xmm1, %xmm0
+ 17344              	.LBE4216:
+ 17345              	.LBE4215:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 17346              		.loc 2 854 0
+ 17347 f896 F30F7F85 		movdqu	%xmm0, -1968(%rbp)
+ 17347      50F8FFFF 
+ 17348 f89e F30F6F85 		movdqu	-2048(%rbp), %xmm0
+ 17348      00F8FFFF 
+ 17349 f8a6 F30F7F85 		movdqu	%xmm0, -1904(%rbp)
+ 17349      90F8FFFF 
+ 17350              	.LBB4217:
+ 17351              	.LBB4218:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 17352              		.loc 3 433 0
+ 17353 f8ae F30F6F85 		movdqu	-1904(%rbp), %xmm0
+ 17353      90F8FFFF 
+ 17354 f8b6 660F72D0 		psrld	$4, %xmm0
+ 17354      04
+ 17355              	.LBE4218:
+ 17356              	.LBE4217:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 17357              		.loc 2 857 0
+ 17358 f8bb F30F7F85 		movdqu	%xmm0, -1984(%rbp)
+ 17358      40F8FFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 17359              		.loc 2 859 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 526
+
+
+ 17360 f8c3 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 17360      00000000 
+ 17361 f8cb F30F6F8D 		movdqu	-1984(%rbp), %xmm1
+ 17361      40F8FFFF 
+ 17362 f8d3 F30F7F8D 		movdqu	%xmm1, -1872(%rbp)
+ 17362      B0F8FFFF 
+ 17363 f8db F30F7F85 		movdqu	%xmm0, -1888(%rbp)
+ 17363      A0F8FFFF 
+ 17364              	.LBB4219:
+ 17365              	.LBB4220:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 17366              		.loc 2 206 0
+ 17367 f8e3 F30F6F85 		movdqu	-1888(%rbp), %xmm0
+ 17367      A0F8FFFF 
+ 17368 f8eb F30F6F8D 		movdqu	-1872(%rbp), %xmm1
+ 17368      B0F8FFFF 
+ 17369 f8f3 660FDBC1 		pand	%xmm1, %xmm0
+ 17370              	.LBE4220:
+ 17371              	.LBE4219:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 17372              		.loc 2 859 0
+ 17373 f8f7 F30F7F85 		movdqu	%xmm0, -1984(%rbp)
+ 17373      40F8FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 17374              		.loc 2 866 0
+ 17375 f8ff C7851CF8 		movl	$0, -2020(%rbp)
+ 17375      FFFF0000 
+ 17375      0000
+ 17376 f909 E9BE0100 		jmp	.L277
+ 17376      00
+ 17377              	.L278:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 17378              		.loc 2 868 0
+ 17379 f90e 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 17379      00000000 
+ 17380 f916 F30F7F85 		movdqu	%xmm0, -1840(%rbp)
+ 17380      D0F8FFFF 
+ 17381 f91e F30F6F85 		movdqu	-1984(%rbp), %xmm0
+ 17381      40F8FFFF 
+ 17382 f926 F30F7F85 		movdqu	%xmm0, -1856(%rbp)
+ 17382      C0F8FFFF 
+ 17383 f92e F30F6F85 		movdqu	-1840(%rbp), %xmm0
+ 17383      D0F8FFFF 
+ 17384 f936 F30F7F85 		movdqu	%xmm0, -1808(%rbp)
+ 17384      F0F8FFFF 
+ 17385 f93e F30F6F85 		movdqu	-1856(%rbp), %xmm0
+ 17385      C0F8FFFF 
+ 17386 f946 F30F7F85 		movdqu	%xmm0, -1824(%rbp)
+ 17386      E0F8FFFF 
+ 17387              	.LBB4221:
+ 17388              	.LBB4222:
+ 17389              	.LBB4223:
+ 17390              	.LBB4224:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 17391              		.loc 3 529 0
+ 17392 f94e F30F6F8D 		movdqu	-1824(%rbp), %xmm1
+ 17392      E0F8FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 527
+
+
+ 17393 f956 F30F6F85 		movdqu	-1808(%rbp), %xmm0
+ 17393      F0F8FFFF 
+ 17394 f95e 660F3800 		pshufb	%xmm1, %xmm0
+ 17394      C1
+ 17395              	.LBE4224:
+ 17396              	.LBE4223:
+ 17397              	.LBE4222:
+ 17398              	.LBE4221:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 17399              		.loc 2 868 0
+ 17400 f963 F30F7F85 		movdqu	%xmm0, -2000(%rbp)
+ 17400      30F8FFFF 
+ 17401 f96b F30F6F85 		movdqu	-1968(%rbp), %xmm0
+ 17401      50F8FFFF 
+ 17402 f973 F30F7F85 		movdqu	%xmm0, -1776(%rbp)
+ 17402      10F9FFFF 
+ 17403 f97b F30F6F85 		movdqu	-2000(%rbp), %xmm0
+ 17403      30F8FFFF 
+ 17404 f983 F30F7F85 		movdqu	%xmm0, -1792(%rbp)
+ 17404      00F9FFFF 
+ 17405              	.LBB4225:
+ 17406              	.LBB4226:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 17407              		.loc 2 234 0
+ 17408 f98b F30F6F85 		movdqu	-1792(%rbp), %xmm0
+ 17408      00F9FFFF 
+ 17409 f993 F30F6F8D 		movdqu	-1776(%rbp), %xmm1
+ 17409      10F9FFFF 
+ 17410 f99b 660FEBC1 		por	%xmm1, %xmm0
+ 17411              	.LBE4226:
+ 17412              	.LBE4225:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 17413              		.loc 2 870 0
+ 17414 f99f F30F7F85 		movdqu	%xmm0, -2000(%rbp)
+ 17414      30F8FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 17415              		.loc 2 872 0
+ 17416 f9a7 8B851CF8 		mov	-2020(%rbp), %eax
+ 17416      FFFF
+ 17417 f9ad 48C1E004 		salq	$4, %rax
+ 17418 f9b1 480385F8 		addq	-2056(%rbp), %rax
+ 17418      F7FFFF
+ 17419 f9b8 660F6F00 		movdqa	(%rax), %xmm0
+ 17420 f9bc F30F7F85 		movdqu	%xmm0, -1744(%rbp)
+ 17420      30F9FFFF 
+ 17421 f9c4 F30F6F85 		movdqu	-2000(%rbp), %xmm0
+ 17421      30F8FFFF 
+ 17422 f9cc F30F7F85 		movdqu	%xmm0, -1760(%rbp)
+ 17422      20F9FFFF 
+ 17423 f9d4 F30F6F85 		movdqu	-1744(%rbp), %xmm0
+ 17423      30F9FFFF 
+ 17424 f9dc F30F7F85 		movdqu	%xmm0, -1712(%rbp)
+ 17424      50F9FFFF 
+ 17425 f9e4 F30F6F85 		movdqu	-1760(%rbp), %xmm0
+ 17425      20F9FFFF 
+ 17426 f9ec F30F7F85 		movdqu	%xmm0, -1728(%rbp)
+ 17426      40F9FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 528
+
+
+ 17427              	.LBB4227:
+ 17428              	.LBB4228:
+ 17429              	.LBB4229:
+ 17430              	.LBB4230:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 17431              		.loc 3 529 0
+ 17432 f9f4 F30F6F8D 		movdqu	-1728(%rbp), %xmm1
+ 17432      40F9FFFF 
+ 17433 f9fc F30F6F85 		movdqu	-1712(%rbp), %xmm0
+ 17433      50F9FFFF 
+ 17434 fa04 660F3800 		pshufb	%xmm1, %xmm0
+ 17434      C1
+ 17435              	.LBE4230:
+ 17436              	.LBE4229:
+ 17437              	.LBE4228:
+ 17438              	.LBE4227:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 17439              		.loc 2 872 0
+ 17440 fa09 F30F7F85 		movdqu	%xmm0, -2000(%rbp)
+ 17440      30F8FFFF 
+ 17441 fa11 F30F6F85 		movdqu	-2016(%rbp), %xmm0
+ 17441      20F8FFFF 
+ 17442 fa19 F30F7F85 		movdqu	%xmm0, -1680(%rbp)
+ 17442      70F9FFFF 
+ 17443 fa21 F30F6F85 		movdqu	-2000(%rbp), %xmm0
+ 17443      30F8FFFF 
+ 17444 fa29 F30F7F85 		movdqu	%xmm0, -1696(%rbp)
+ 17444      60F9FFFF 
+ 17445              	.LBB4231:
+ 17446              	.LBB4232:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 17447              		.loc 2 234 0
+ 17448 fa31 F30F6F85 		movdqu	-1696(%rbp), %xmm0
+ 17448      60F9FFFF 
+ 17449 fa39 F30F6F8D 		movdqu	-1680(%rbp), %xmm1
+ 17449      70F9FFFF 
+ 17450 fa41 660FEBC1 		por	%xmm1, %xmm0
+ 17451              	.LBE4232:
+ 17452              	.LBE4231:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 17453              		.loc 2 874 0
+ 17454 fa45 F30F7F85 		movdqu	%xmm0, -2016(%rbp)
+ 17454      20F8FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 17455              		.loc 2 876 0
+ 17456 fa4d 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 17456      00000000 
+ 17457 fa55 F30F6F8D 		movdqu	-1984(%rbp), %xmm1
+ 17457      40F8FFFF 
+ 17458 fa5d F30F7F8D 		movdqu	%xmm1, -1648(%rbp)
+ 17458      90F9FFFF 
+ 17459 fa65 F30F7F85 		movdqu	%xmm0, -1664(%rbp)
+ 17459      80F9FFFF 
+ 17460              	.LBB4233:
+ 17461              	.LBB4234:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 17462              		.loc 2 290 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 529
+
+
+ 17463 fa6d F30F6F8D 		movdqu	-1664(%rbp), %xmm1
+ 17463      80F9FFFF 
+ 17464 fa75 F30F6F85 		movdqu	-1648(%rbp), %xmm0
+ 17464      90F9FFFF 
+ 17465 fa7d 660FF8C1 		psubb	%xmm1, %xmm0
+ 17466              	.LBE4234:
+ 17467              	.LBE4233:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 17468              		.loc 2 876 0
+ 17469 fa81 F30F7F85 		movdqu	%xmm0, -1984(%rbp)
+ 17469      40F8FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 17470              		.loc 2 878 0
+ 17471 fa89 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 17471      00000000 
+ 17472 fa91 F30F6F8D 		movdqu	-1984(%rbp), %xmm1
+ 17472      40F8FFFF 
+ 17473 fa99 F30F7F8D 		movdqu	%xmm1, -1616(%rbp)
+ 17473      B0F9FFFF 
+ 17474 faa1 F30F7F85 		movdqu	%xmm0, -1632(%rbp)
+ 17474      A0F9FFFF 
+ 17475              	.LBB4235:
+ 17476              	.LBB4236:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 17477              		.loc 2 206 0
+ 17478 faa9 F30F6F85 		movdqu	-1632(%rbp), %xmm0
+ 17478      A0F9FFFF 
+ 17479 fab1 F30F6F8D 		movdqu	-1616(%rbp), %xmm1
+ 17479      B0F9FFFF 
+ 17480 fab9 660FDBC1 		pand	%xmm1, %xmm0
+ 17481              	.LBE4236:
+ 17482              	.LBE4235:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 17483              		.loc 2 878 0
+ 17484 fabd F30F7F85 		movdqu	%xmm0, -1984(%rbp)
+ 17484      40F8FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 17485              		.loc 2 866 0
+ 17486 fac5 83851CF8 		addl	$1, -2020(%rbp)
+ 17486      FFFF01
+ 17487              	.L277:
+ 17488 facc 83BD1CF8 		cmpl	$15, -2020(%rbp)
+ 17488      FFFF0F
+ 17489 fad3 0F8635FE 		jbe	.L278
+ 17489      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 17490              		.loc 2 882 0
+ 17491 fad9 F30F6F85 		movdqu	-2016(%rbp), %xmm0
+ 17491      20F8FFFF 
+ 17492              	.LBE4214:
+ 17493              	.LBE4213:
+ 17494              	.LBE4212:
+ 17495              	.LBE4211:
+2029:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(SubBytes) (state);
+ 17496              		.loc 2 2029 0
+ 17497 fae1 F30F7F85 		movdqu	%xmm0, -2128(%rbp)
+ 17497      B0F7FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 530
+
+
+ 17498              	.LBB4237:
+2031:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After SubBytes", state);
+ 17499              		.loc 2 2031 0
+ 17500 fae9 F30F6F85 		movdqu	-2128(%rbp), %xmm0
+ 17500      B0F7FFFF 
+ 17501 faf1 F30F7F85 		movdqu	%xmm0, -2448(%rbp)
+ 17501      70F6FFFF 
+ 17502 faf9 E8000000 		call	KDbgWriterGet at PLT
+ 17502      00
+ 17503 fafe 4885C0   		testq	%rax, %rax
+ 17504 fb01 7479     		je	.L280
+ 17505 fb03 BF010000 		movl	$1, %edi
+ 17505      00
+ 17506 fb08 E8000000 		call	KDbgCondToFlag at PLT
+ 17506      00
+ 17507 fb0d 4889C6   		movq	%rax, %rsi
+ 17508 fb10 BF100000 		movl	$16, %edi
+ 17508      00
+ 17509 fb15 E8000000 		call	KDbgTestModConds at PLT
+ 17509      00
+ 17510 fb1a 84C0     		testb	%al, %al
+ 17511 fb1c 745E     		je	.L280
+ 17512 fb1e 8B857CF6 		movl	-2436(%rbp), %eax
+ 17512      FFFF
+ 17513 fb24 89C7     		movl	%eax, %edi
+ 17514 fb26 E8D504FF 		call	bswap_32
+ 17514      FF
+ 17515 fb2b 4189C5   		movl	%eax, %r13d
+ 17516 fb2e 8B8578F6 		movl	-2440(%rbp), %eax
+ 17516      FFFF
+ 17517 fb34 89C7     		movl	%eax, %edi
+ 17518 fb36 E8C504FF 		call	bswap_32
+ 17518      FF
+ 17519 fb3b 4189C4   		movl	%eax, %r12d
+ 17520 fb3e 8B8574F6 		movl	-2444(%rbp), %eax
+ 17520      FFFF
+ 17521 fb44 89C7     		movl	%eax, %edi
+ 17522 fb46 E8B504FF 		call	bswap_32
+ 17522      FF
+ 17523 fb4b 89C3     		movl	%eax, %ebx
+ 17524 fb4d 8B8570F6 		movl	-2448(%rbp), %eax
+ 17524      FFFF
+ 17525 fb53 89C7     		movl	%eax, %edi
+ 17526 fb55 E8A604FF 		call	bswap_32
+ 17526      FF
+ 17527 fb5a 4589E9   		movl	%r13d, %r9d
+ 17528 fb5d 4589E0   		movl	%r12d, %r8d
+ 17529 fb60 89D9     		movl	%ebx, %ecx
+ 17530 fb62 89C2     		movl	%eax, %edx
+ 17531 fb64 488D3500 		leaq	.LC11(%rip), %rsi
+ 17531      000000
+ 17532 fb6b 488D3D00 		leaq	.LC1(%rip), %rdi
+ 17532      000000
+ 17533 fb72 B8000000 		movl	$0, %eax
+ 17533      00
+ 17534 fb77 E8000000 		call	KDbgMsg at PLT
+ 17534      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 531
+
+
+ 17535              	.L280:
+ 17536 fb7c F30F6F85 		movdqu	-2128(%rbp), %xmm0
+ 17536      B0F7FFFF 
+ 17537 fb84 F30F7F85 		movdqu	%xmm0, -1600(%rbp)
+ 17537      C0F9FFFF 
+ 17538              	.LBE4237:
+ 17539              	.LBB4238:
+ 17540              	.LBB4239:
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 17541              		.loc 2 581 0
+ 17542 fb8c 660F6F05 		movdqa	ShiftRowTable.7358(%rip), %xmm0
+ 17542      00000000 
+ 17543 fb94 F30F6F8D 		movdqu	-1600(%rbp), %xmm1
+ 17543      C0F9FFFF 
+ 17544 fb9c F30F7F8D 		movdqu	%xmm1, -1568(%rbp)
+ 17544      E0F9FFFF 
+ 17545 fba4 F30F7F85 		movdqu	%xmm0, -1584(%rbp)
+ 17545      D0F9FFFF 
+ 17546 fbac F30F6F85 		movdqu	-1568(%rbp), %xmm0
+ 17546      E0F9FFFF 
+ 17547 fbb4 F30F7F85 		movdqu	%xmm0, -1536(%rbp)
+ 17547      00FAFFFF 
+ 17548 fbbc F30F6F85 		movdqu	-1584(%rbp), %xmm0
+ 17548      D0F9FFFF 
+ 17549 fbc4 F30F7F85 		movdqu	%xmm0, -1552(%rbp)
+ 17549      F0F9FFFF 
+ 17550              	.LBB4240:
+ 17551              	.LBB4241:
+ 17552              	.LBB4242:
+ 17553              	.LBB4243:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 17554              		.loc 3 529 0
+ 17555 fbcc F30F6F8D 		movdqu	-1552(%rbp), %xmm1
+ 17555      F0F9FFFF 
+ 17556 fbd4 F30F6F85 		movdqu	-1536(%rbp), %xmm0
+ 17556      00FAFFFF 
+ 17557 fbdc 660F3800 		pshufb	%xmm1, %xmm0
+ 17557      C1
+ 17558              	.LBE4243:
+ 17559              	.LBE4242:
+ 17560              	.LBE4241:
+ 17561              	.LBE4240:
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 17562              		.loc 2 581 0
+ 17563 fbe1 F30F7F85 		movdqu	%xmm0, -1600(%rbp)
+ 17563      C0F9FFFF 
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 17564              		.loc 2 582 0
+ 17565 fbe9 F30F6F85 		movdqu	-1600(%rbp), %xmm0
+ 17565      C0F9FFFF 
+ 17566              	.LBE4239:
+ 17567              	.LBE4238:
+2033:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(ShiftRows) (state);
+ 17568              		.loc 2 2033 0
+ 17569 fbf1 F30F7F85 		movdqu	%xmm0, -2128(%rbp)
+ 17569      B0F7FFFF 
+ 17570              	.LBB4244:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 532
+
+
+2035:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+ 17571              		.loc 2 2035 0
+ 17572 fbf9 F30F6F85 		movdqu	-2128(%rbp), %xmm0
+ 17572      B0F7FFFF 
+ 17573 fc01 F30F7F85 		movdqu	%xmm0, -2464(%rbp)
+ 17573      60F6FFFF 
+ 17574 fc09 E8000000 		call	KDbgWriterGet at PLT
+ 17574      00
+ 17575 fc0e 4885C0   		testq	%rax, %rax
+ 17576 fc11 7479     		je	.L282
+ 17577 fc13 BF010000 		movl	$1, %edi
+ 17577      00
+ 17578 fc18 E8000000 		call	KDbgCondToFlag at PLT
+ 17578      00
+ 17579 fc1d 4889C6   		movq	%rax, %rsi
+ 17580 fc20 BF100000 		movl	$16, %edi
+ 17580      00
+ 17581 fc25 E8000000 		call	KDbgTestModConds at PLT
+ 17581      00
+ 17582 fc2a 84C0     		testb	%al, %al
+ 17583 fc2c 745E     		je	.L282
+ 17584 fc2e 8B856CF6 		movl	-2452(%rbp), %eax
+ 17584      FFFF
+ 17585 fc34 89C7     		movl	%eax, %edi
+ 17586 fc36 E8C503FF 		call	bswap_32
+ 17586      FF
+ 17587 fc3b 4189C5   		movl	%eax, %r13d
+ 17588 fc3e 8B8568F6 		movl	-2456(%rbp), %eax
+ 17588      FFFF
+ 17589 fc44 89C7     		movl	%eax, %edi
+ 17590 fc46 E8B503FF 		call	bswap_32
+ 17590      FF
+ 17591 fc4b 4189C4   		movl	%eax, %r12d
+ 17592 fc4e 8B8564F6 		movl	-2460(%rbp), %eax
+ 17592      FFFF
+ 17593 fc54 89C7     		movl	%eax, %edi
+ 17594 fc56 E8A503FF 		call	bswap_32
+ 17594      FF
+ 17595 fc5b 89C3     		movl	%eax, %ebx
+ 17596 fc5d 8B8560F6 		movl	-2464(%rbp), %eax
+ 17596      FFFF
+ 17597 fc63 89C7     		movl	%eax, %edi
+ 17598 fc65 E89603FF 		call	bswap_32
+ 17598      FF
+ 17599 fc6a 4589E9   		movl	%r13d, %r9d
+ 17600 fc6d 4589E0   		movl	%r12d, %r8d
+ 17601 fc70 89D9     		movl	%ebx, %ecx
+ 17602 fc72 89C2     		movl	%eax, %edx
+ 17603 fc74 488D3500 		leaq	.LC12(%rip), %rsi
+ 17603      000000
+ 17604 fc7b 488D3D00 		leaq	.LC1(%rip), %rdi
+ 17604      000000
+ 17605 fc82 B8000000 		movl	$0, %eax
+ 17605      00
+ 17606 fc87 E8000000 		call	KDbgMsg at PLT
+ 17606      00
+ 17607              	.L282:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 533
+
+
+ 17608 fc8c F30F6F85 		movdqu	-2128(%rbp), %xmm0
+ 17608      B0F7FFFF 
+ 17609 fc94 F30F7F85 		movdqu	%xmm0, -1520(%rbp)
+ 17609      10FAFFFF 
+ 17610 fc9c F30F6F85 		movdqu	-1520(%rbp), %xmm0
+ 17610      10FAFFFF 
+ 17611 fca4 F30F7F85 		movdqu	%xmm0, -1504(%rbp)
+ 17611      20FAFFFF 
+ 17612              	.LBE4244:
+ 17613              	.LBB4245:
+ 17614              	.LBB4246:
+ 17615              	.LBB4247:
+ 17616              	.LBB4248:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 17617              		.loc 2 667 0
+ 17618 fcac 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 17618      00000000 
+ 17619 fcb4 F30F6F8D 		movdqu	-1504(%rbp), %xmm1
+ 17619      20FAFFFF 
+ 17620 fcbc F30F7F8D 		movdqu	%xmm1, -1472(%rbp)
+ 17620      40FAFFFF 
+ 17621 fcc4 F30F7F85 		movdqu	%xmm0, -1488(%rbp)
+ 17621      30FAFFFF 
+ 17622 fccc F30F6F85 		movdqu	-1472(%rbp), %xmm0
+ 17622      40FAFFFF 
+ 17623 fcd4 F30F7F85 		movdqu	%xmm0, -1440(%rbp)
+ 17623      60FAFFFF 
+ 17624 fcdc F30F6F85 		movdqu	-1488(%rbp), %xmm0
+ 17624      30FAFFFF 
+ 17625 fce4 F30F7F85 		movdqu	%xmm0, -1456(%rbp)
+ 17625      50FAFFFF 
+ 17626              	.LBB4249:
+ 17627              	.LBB4250:
+ 17628              	.LBB4251:
+ 17629              	.LBB4252:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 17630              		.loc 3 529 0
+ 17631 fcec F30F6F8D 		movdqu	-1456(%rbp), %xmm1
+ 17631      50FAFFFF 
+ 17632 fcf4 F30F6F85 		movdqu	-1440(%rbp), %xmm0
+ 17632      60FAFFFF 
+ 17633 fcfc 660F3800 		pshufb	%xmm1, %xmm0
+ 17633      C1
+ 17634              	.LBE4252:
+ 17635              	.LBE4251:
+ 17636              	.LBE4250:
+ 17637              	.LBE4249:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 17638              		.loc 2 667 0
+ 17639 fd01 F30F7F85 		movdqu	%xmm0, -1504(%rbp)
+ 17639      20FAFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 17640              		.loc 2 668 0
+ 17641 fd09 F30F6F85 		movdqu	-1504(%rbp), %xmm0
+ 17641      20FAFFFF 
+ 17642              	.LBE4248:
+ 17643              	.LBE4247:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 534
+
+
+1047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c1 = AESBCMEMBER(RotBytesLeft) (state);
+ 17644              		.loc 2 1047 0
+ 17645 fd11 660F7F85 		movdqa	%xmm0, -2624(%rbp)
+ 17645      C0F5FFFF 
+ 17646 fd19 660F6F85 		movdqa	-2624(%rbp), %xmm0
+ 17646      C0F5FFFF 
+ 17647 fd21 F30F7F85 		movdqu	%xmm0, -1424(%rbp)
+ 17647      70FAFFFF 
+ 17648              	.LBB4253:
+ 17649              	.LBB4254:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 17650              		.loc 2 667 0
+ 17651 fd29 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 17651      00000000 
+ 17652 fd31 F30F6F8D 		movdqu	-1424(%rbp), %xmm1
+ 17652      70FAFFFF 
+ 17653 fd39 F30F7F8D 		movdqu	%xmm1, -1392(%rbp)
+ 17653      90FAFFFF 
+ 17654 fd41 F30F7F85 		movdqu	%xmm0, -1408(%rbp)
+ 17654      80FAFFFF 
+ 17655 fd49 F30F6F85 		movdqu	-1392(%rbp), %xmm0
+ 17655      90FAFFFF 
+ 17656 fd51 F30F7F85 		movdqu	%xmm0, -1360(%rbp)
+ 17656      B0FAFFFF 
+ 17657 fd59 F30F6F85 		movdqu	-1408(%rbp), %xmm0
+ 17657      80FAFFFF 
+ 17658 fd61 F30F7F85 		movdqu	%xmm0, -1376(%rbp)
+ 17658      A0FAFFFF 
+ 17659              	.LBB4255:
+ 17660              	.LBB4256:
+ 17661              	.LBB4257:
+ 17662              	.LBB4258:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 17663              		.loc 3 529 0
+ 17664 fd69 F30F6F8D 		movdqu	-1376(%rbp), %xmm1
+ 17664      A0FAFFFF 
+ 17665 fd71 F30F6F85 		movdqu	-1360(%rbp), %xmm0
+ 17665      B0FAFFFF 
+ 17666 fd79 660F3800 		pshufb	%xmm1, %xmm0
+ 17666      C1
+ 17667              	.LBE4258:
+ 17668              	.LBE4257:
+ 17669              	.LBE4256:
+ 17670              	.LBE4255:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 17671              		.loc 2 667 0
+ 17672 fd7e F30F7F85 		movdqu	%xmm0, -1424(%rbp)
+ 17672      70FAFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 17673              		.loc 2 668 0
+ 17674 fd86 F30F6F85 		movdqu	-1424(%rbp), %xmm0
+ 17674      70FAFFFF 
+ 17675              	.LBE4254:
+ 17676              	.LBE4253:
+1048:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c2 = AESBCMEMBER(RotBytesLeft) (c1);
+ 17677              		.loc 2 1048 0
+ 17678 fd8e 660F7F85 		movdqa	%xmm0, -2640(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 535
+
+
+ 17678      B0F5FFFF 
+ 17679 fd96 660F6F8D 		movdqa	-2640(%rbp), %xmm1
+ 17679      B0F5FFFF 
+ 17680 fd9e F30F7F8D 		movdqu	%xmm1, -1344(%rbp)
+ 17680      C0FAFFFF 
+ 17681              	.LBB4259:
+ 17682              	.LBB4260:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 17683              		.loc 2 667 0
+ 17684 fda6 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 17684      00000000 
+ 17685 fdae F30F6F8D 		movdqu	-1344(%rbp), %xmm1
+ 17685      C0FAFFFF 
+ 17686 fdb6 F30F7F8D 		movdqu	%xmm1, -1312(%rbp)
+ 17686      E0FAFFFF 
+ 17687 fdbe F30F7F85 		movdqu	%xmm0, -1328(%rbp)
+ 17687      D0FAFFFF 
+ 17688 fdc6 F30F6F85 		movdqu	-1312(%rbp), %xmm0
+ 17688      E0FAFFFF 
+ 17689 fdce F30F7F85 		movdqu	%xmm0, -1280(%rbp)
+ 17689      00FBFFFF 
+ 17690 fdd6 F30F6F85 		movdqu	-1328(%rbp), %xmm0
+ 17690      D0FAFFFF 
+ 17691 fdde F30F7F85 		movdqu	%xmm0, -1296(%rbp)
+ 17691      F0FAFFFF 
+ 17692              	.LBB4261:
+ 17693              	.LBB4262:
+ 17694              	.LBB4263:
+ 17695              	.LBB4264:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 17696              		.loc 3 529 0
+ 17697 fde6 F30F6F8D 		movdqu	-1296(%rbp), %xmm1
+ 17697      F0FAFFFF 
+ 17698 fdee F30F6F85 		movdqu	-1280(%rbp), %xmm0
+ 17698      00FBFFFF 
+ 17699 fdf6 660F3800 		pshufb	%xmm1, %xmm0
+ 17699      C1
+ 17700              	.LBE4264:
+ 17701              	.LBE4263:
+ 17702              	.LBE4262:
+ 17703              	.LBE4261:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 17704              		.loc 2 667 0
+ 17705 fdfb F30F7F85 		movdqu	%xmm0, -1344(%rbp)
+ 17705      C0FAFFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 17706              		.loc 2 668 0
+ 17707 fe03 F30F6F85 		movdqu	-1344(%rbp), %xmm0
+ 17707      C0FAFFFF 
+ 17708              	.LBE4260:
+ 17709              	.LBE4259:
+1049:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c3 = AESBCMEMBER(RotBytesLeft) (c2);
+ 17710              		.loc 2 1049 0
+ 17711 fe0b 660F7F85 		movdqa	%xmm0, -2656(%rbp)
+ 17711      A0F5FFFF 
+ 17712 fe13 F30F6F85 		movdqu	-1520(%rbp), %xmm0
+ 17712      10FAFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 536
+
+
+ 17713 fe1b F30F7F85 		movdqu	%xmm0, -1248(%rbp)
+ 17713      20FBFFFF 
+ 17714 fe23 660F6F85 		movdqa	-2624(%rbp), %xmm0
+ 17714      C0F5FFFF 
+ 17715 fe2b F30F7F85 		movdqu	%xmm0, -1264(%rbp)
+ 17715      10FBFFFF 
+ 17716              	.LBB4265:
+ 17717              	.LBB4266:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 17718              		.loc 2 178 0
+ 17719 fe33 F30F6F85 		movdqu	-1264(%rbp), %xmm0
+ 17719      10FBFFFF 
+ 17720 fe3b F30F6F8D 		movdqu	-1248(%rbp), %xmm1
+ 17720      20FBFFFF 
+ 17721 fe43 660FEFC1 		pxor	%xmm1, %xmm0
+ 17722              	.LBE4266:
+ 17723              	.LBE4265:
+1050:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c0 = AESBCMEMBER(VecXor) (state, c1);
+ 17724              		.loc 2 1050 0
+ 17725 fe47 660F7F85 		movdqa	%xmm0, -2608(%rbp)
+ 17725      D0F5FFFF 
+ 17726 fe4f 660F6F8D 		movdqa	-2608(%rbp), %xmm1
+ 17726      D0F5FFFF 
+ 17727 fe57 F30F7F8D 		movdqu	%xmm1, -1232(%rbp)
+ 17727      30FBFFFF 
+ 17728              	.LBB4267:
+ 17729              	.LBB4268:
+ 17730              	.LBB4269:
+ 950:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 17731              		.loc 2 950 0
+ 17732 fe5f F30F6F85 		movdqu	-1232(%rbp), %xmm0
+ 17732      30FBFFFF 
+ 17733 fe67 F30F7F85 		movdqu	%xmm0, -2400(%rbp)
+ 17733      A0F6FFFF 
+ 17734 fe6f E8000000 		call	KDbgWriterGet at PLT
+ 17734      00
+ 17735 fe74 4885C0   		testq	%rax, %rax
+ 17736 fe77 7479     		je	.L284
+ 17737 fe79 BF010000 		movl	$1, %edi
+ 17737      00
+ 17738 fe7e E8000000 		call	KDbgCondToFlag at PLT
+ 17738      00
+ 17739 fe83 4889C6   		movq	%rax, %rsi
+ 17740 fe86 BF100000 		movl	$16, %edi
+ 17740      00
+ 17741 fe8b E8000000 		call	KDbgTestModConds at PLT
+ 17741      00
+ 17742 fe90 84C0     		testb	%al, %al
+ 17743 fe92 745E     		je	.L284
+ 17744 fe94 8B85ACF6 		movl	-2388(%rbp), %eax
+ 17744      FFFF
+ 17745 fe9a 89C7     		movl	%eax, %edi
+ 17746 fe9c E85F01FF 		call	bswap_32
+ 17746      FF
+ 17747 fea1 4189C5   		movl	%eax, %r13d
+ 17748 fea4 8B85A8F6 		movl	-2392(%rbp), %eax
+ 17748      FFFF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 537
+
+
+ 17749 feaa 89C7     		movl	%eax, %edi
+ 17750 feac E84F01FF 		call	bswap_32
+ 17750      FF
+ 17751 feb1 4189C4   		movl	%eax, %r12d
+ 17752 feb4 8B85A4F6 		movl	-2396(%rbp), %eax
+ 17752      FFFF
+ 17753 feba 89C7     		movl	%eax, %edi
+ 17754 febc E83F01FF 		call	bswap_32
+ 17754      FF
+ 17755 fec1 89C3     		movl	%eax, %ebx
+ 17756 fec3 8B85A0F6 		movl	-2400(%rbp), %eax
+ 17756      FFFF
+ 17757 fec9 89C7     		movl	%eax, %edi
+ 17758 fecb E83001FF 		call	bswap_32
+ 17758      FF
+ 17759 fed0 4589E9   		movl	%r13d, %r9d
+ 17760 fed3 4589E0   		movl	%r12d, %r8d
+ 17761 fed6 89D9     		movl	%ebx, %ecx
+ 17762 fed8 89C2     		movl	%eax, %edx
+ 17763 feda 488D3500 		leaq	.LC5(%rip), %rsi
+ 17763      000000
+ 17764 fee1 488D3D00 		leaq	.LC1(%rip), %rdi
+ 17764      000000
+ 17765 fee8 B8000000 		movl	$0, %eax
+ 17765      00
+ 17766 feed E8000000 		call	KDbgMsg at PLT
+ 17766      00
+ 17767              	.L284:
+ 17768 fef2 F30F6F85 		movdqu	-1232(%rbp), %xmm0
+ 17768      30FBFFFF 
+ 17769 fefa F30F7F85 		movdqu	%xmm0, -1200(%rbp)
+ 17769      50FBFFFF 
+ 17770              	.LBE4269:
+ 17771              	.LBB4270:
+ 17772              	.LBB4271:
+ 17773              	.LBB4272:
+ 933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 17774              		.loc 2 933 0
+ 17775 ff02 F30F6F85 		movdqu	-1200(%rbp), %xmm0
+ 17775      50FBFFFF 
+ 17776 ff0a F30F7F85 		movdqu	%xmm0, -2352(%rbp)
+ 17776      D0F6FFFF 
+ 17777 ff12 E8000000 		call	KDbgWriterGet at PLT
+ 17777      00
+ 17778 ff17 4885C0   		testq	%rax, %rax
+ 17779 ff1a 7479     		je	.L286
+ 17780 ff1c BF010000 		movl	$1, %edi
+ 17780      00
+ 17781 ff21 E8000000 		call	KDbgCondToFlag at PLT
+ 17781      00
+ 17782 ff26 4889C6   		movq	%rax, %rsi
+ 17783 ff29 BF100000 		movl	$16, %edi
+ 17783      00
+ 17784 ff2e E8000000 		call	KDbgTestModConds at PLT
+ 17784      00
+ 17785 ff33 84C0     		testb	%al, %al
+ 17786 ff35 745E     		je	.L286
+
GAS LISTING /tmp/ccjbMjHD.s 			page 538
+
+
+ 17787 ff37 8B85DCF6 		movl	-2340(%rbp), %eax
+ 17787      FFFF
+ 17788 ff3d 89C7     		movl	%eax, %edi
+ 17789 ff3f E8BC00FF 		call	bswap_32
+ 17789      FF
+ 17790 ff44 4189C5   		movl	%eax, %r13d
+ 17791 ff47 8B85D8F6 		movl	-2344(%rbp), %eax
+ 17791      FFFF
+ 17792 ff4d 89C7     		movl	%eax, %edi
+ 17793 ff4f E8AC00FF 		call	bswap_32
+ 17793      FF
+ 17794 ff54 4189C4   		movl	%eax, %r12d
+ 17795 ff57 8B85D4F6 		movl	-2348(%rbp), %eax
+ 17795      FFFF
+ 17796 ff5d 89C7     		movl	%eax, %edi
+ 17797 ff5f E89C00FF 		call	bswap_32
+ 17797      FF
+ 17798 ff64 89C3     		movl	%eax, %ebx
+ 17799 ff66 8B85D0F6 		movl	-2352(%rbp), %eax
+ 17799      FFFF
+ 17800 ff6c 89C7     		movl	%eax, %edi
+ 17801 ff6e E88D00FF 		call	bswap_32
+ 17801      FF
+ 17802 ff73 4589E9   		movl	%r13d, %r9d
+ 17803 ff76 4589E0   		movl	%r12d, %r8d
+ 17804 ff79 89D9     		movl	%ebx, %ecx
+ 17805 ff7b 89C2     		movl	%eax, %edx
+ 17806 ff7d 488D3500 		leaq	.LC5(%rip), %rsi
+ 17806      000000
+ 17807 ff84 488D3D00 		leaq	.LC1(%rip), %rdi
+ 17807      000000
+ 17808 ff8b B8000000 		movl	$0, %eax
+ 17808      00
+ 17809 ff90 E8000000 		call	KDbgMsg at PLT
+ 17809      00
+ 17810              	.L286:
+ 17811              	.LBE4272:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 17812              		.loc 2 934 0
+ 17813 ff95 B8070000 		movl	$7, %eax
+ 17813      00
+ 17814 ff9a F30F6F85 		movdqu	-1200(%rbp), %xmm0
+ 17814      50FBFFFF 
+ 17815 ffa2 F30F7F85 		movdqu	%xmm0, -1136(%rbp)
+ 17815      90FBFFFF 
+ 17816 ffaa 89858CFB 		movl	%eax, -1140(%rbp)
+ 17816      FFFF
+ 17817 ffb0 F30F6F85 		movdqu	-1136(%rbp), %xmm0
+ 17817      90FBFFFF 
+ 17818 ffb8 F30F7F85 		movdqu	%xmm0, -1104(%rbp)
+ 17818      B0FBFFFF 
+ 17819 ffc0 8B858CFB 		movl	-1140(%rbp), %eax
+ 17819      FFFF
+ 17820 ffc6 8985ACFB 		movl	%eax, -1108(%rbp)
+ 17820      FFFF
+ 17821              	.LBB4273:
+ 17822              	.LBB4274:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 539
+
+
+ 17823              	.LBB4275:
+ 17824              	.LBB4276:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 17825              		.loc 3 433 0
+ 17826 ffcc F30F6F85 		movdqu	-1104(%rbp), %xmm0
+ 17826      B0FBFFFF 
+ 17827 ffd4 8B85ACFB 		movl	-1108(%rbp), %eax
+ 17827      FFFF
+ 17828 ffda 89859CF5 		movl	%eax, -2660(%rbp)
+ 17828      FFFF
+ 17829 ffe0 660F6E8D 		movd	-2660(%rbp), %xmm1
+ 17829      9CF5FFFF 
+ 17830 ffe8 660FD2C1 		psrld	%xmm1, %xmm0
+ 17831              	.LBE4276:
+ 17832              	.LBE4275:
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = op_PSRLDI128 (v, k);
+ 17833              		.loc 2 488 0
+ 17834 ffec F30F7F85 		movdqu	%xmm0, -1136(%rbp)
+ 17834      90FBFFFF 
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 17835              		.loc 2 489 0
+ 17836 fff4 B8080000 		movl	$8, %eax
+ 17836      00
+ 17837 fff9 83BD8CFB 		cmpl	$8, -1140(%rbp)
+ 17837      FFFF08
+ 17838 10000 0F4E858C 		cmovle	-1140(%rbp), %eax
+ 17838      FBFFFF
+ 17839 10007 4898     		cltq
+ 17840 10009 4889C2   		movq	%rax, %rdx
+ 17841 1000c 48C1E204 		salq	$4, %rdx
+ 17842 10010 488D0500 		leaq	sr_mask.7327(%rip), %rax
+ 17842      000000
+ 17843 10017 660F6F04 		movdqa	(%rdx,%rax), %xmm0
+ 17843      02
+ 17844 1001c F30F6F8D 		movdqu	-1136(%rbp), %xmm1
+ 17844      90FBFFFF 
+ 17845 10024 F30F7F8D 		movdqu	%xmm1, -1072(%rbp)
+ 17845      D0FBFFFF 
+ 17846 1002c F30F7F85 		movdqu	%xmm0, -1088(%rbp)
+ 17846      C0FBFFFF 
+ 17847              	.LBB4277:
+ 17848              	.LBB4278:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 17849              		.loc 2 206 0
+ 17850 10034 F30F6F85 		movdqu	-1088(%rbp), %xmm0
+ 17850      C0FBFFFF 
+ 17851 1003c F30F6F8D 		movdqu	-1072(%rbp), %xmm1
+ 17851      D0FBFFFF 
+ 17852 10044 660FDBC1 		pand	%xmm1, %xmm0
+ 17853              	.LBE4278:
+ 17854              	.LBE4277:
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 17855              		.loc 2 489 0
+ 17856 10048 F30F7F85 		movdqu	%xmm0, -1136(%rbp)
+ 17856      90FBFFFF 
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v;
+ 17857              		.loc 2 490 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 540
+
+
+ 17858 10050 F30F6F85 		movdqu	-1136(%rbp), %xmm0
+ 17858      90FBFFFF 
+ 17859              	.LBE4274:
+ 17860              	.LBE4273:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 17861              		.loc 2 934 0
+ 17862 10058 F30F7F85 		movdqu	%xmm0, -1184(%rbp)
+ 17862      60FBFFFF 
+ 17863              	.LBB4279:
+ 935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("sr", sr);
+ 17864              		.loc 2 935 0
+ 17865 10060 F30F6F85 		movdqu	-1184(%rbp), %xmm0
+ 17865      60FBFFFF 
+ 17866 10068 F30F7F85 		movdqu	%xmm0, -2368(%rbp)
+ 17866      C0F6FFFF 
+ 17867 10070 E8000000 		call	KDbgWriterGet at PLT
+ 17867      00
+ 17868 10075 4885C0   		testq	%rax, %rax
+ 17869 10078 7479     		je	.L288
+ 17870 1007a BF010000 		movl	$1, %edi
+ 17870      00
+ 17871 1007f E8000000 		call	KDbgCondToFlag at PLT
+ 17871      00
+ 17872 10084 4889C6   		movq	%rax, %rsi
+ 17873 10087 BF100000 		movl	$16, %edi
+ 17873      00
+ 17874 1008c E8000000 		call	KDbgTestModConds at PLT
+ 17874      00
+ 17875 10091 84C0     		testb	%al, %al
+ 17876 10093 745E     		je	.L288
+ 17877 10095 8B85CCF6 		movl	-2356(%rbp), %eax
+ 17877      FFFF
+ 17878 1009b 89C7     		movl	%eax, %edi
+ 17879 1009d E85EFFFE 		call	bswap_32
+ 17879      FF
+ 17880 100a2 4189C5   		movl	%eax, %r13d
+ 17881 100a5 8B85C8F6 		movl	-2360(%rbp), %eax
+ 17881      FFFF
+ 17882 100ab 89C7     		movl	%eax, %edi
+ 17883 100ad E84EFFFE 		call	bswap_32
+ 17883      FF
+ 17884 100b2 4189C4   		movl	%eax, %r12d
+ 17885 100b5 8B85C4F6 		movl	-2364(%rbp), %eax
+ 17885      FFFF
+ 17886 100bb 89C7     		movl	%eax, %edi
+ 17887 100bd E83EFFFE 		call	bswap_32
+ 17887      FF
+ 17888 100c2 89C3     		movl	%eax, %ebx
+ 17889 100c4 8B85C0F6 		movl	-2368(%rbp), %eax
+ 17889      FFFF
+ 17890 100ca 89C7     		movl	%eax, %edi
+ 17891 100cc E82FFFFE 		call	bswap_32
+ 17891      FF
+ 17892 100d1 4589E9   		movl	%r13d, %r9d
+ 17893 100d4 4589E0   		movl	%r12d, %r8d
+ 17894 100d7 89D9     		movl	%ebx, %ecx
+ 17895 100d9 89C2     		movl	%eax, %edx
+
GAS LISTING /tmp/ccjbMjHD.s 			page 541
+
+
+ 17896 100db 488D3500 		leaq	.LC6(%rip), %rsi
+ 17896      000000
+ 17897 100e2 488D3D00 		leaq	.LC1(%rip), %rdi
+ 17897      000000
+ 17898 100e9 B8000000 		movl	$0, %eax
+ 17898      00
+ 17899 100ee E8000000 		call	KDbgMsg at PLT
+ 17899      00
+ 17900              	.L288:
+ 17901 100f3 F30F6F85 		movdqu	-1200(%rbp), %xmm0
+ 17901      50FBFFFF 
+ 17902 100fb F30F7F85 		movdqu	%xmm0, -1040(%rbp)
+ 17902      F0FBFFFF 
+ 17903              	.LBE4279:
+ 17904              	.LBB4280:
+ 17905              	.LBB4281:
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec vv = v;
+ 17906              		.loc 2 426 0
+ 17907 10103 F30F6F85 		movdqu	-1040(%rbp), %xmm0
+ 17907      F0FBFFFF 
+ 17908 1010b F30F7F85 		movdqu	%xmm0, -1024(%rbp)
+ 17908      00FCFFFF 
+ 17909 10113 F30F6F85 		movdqu	-1024(%rbp), %xmm0
+ 17909      00FCFFFF 
+ 17910 1011b F30F7F85 		movdqu	%xmm0, -992(%rbp)
+ 17910      20FCFFFF 
+ 17911              	.LBB4282:
+ 17912              	.LBB4283:
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pslldi128 ((v128_i32_t)vin, bit_count);
+ 17913              		.loc 3 416 0
+ 17914 10123 F30F6F85 		movdqu	-992(%rbp), %xmm0
+ 17914      20FCFFFF 
+ 17915 1012b 660F72F0 		pslld	$1, %xmm0
+ 17915      01
+ 17916              	.LBE4283:
+ 17917              	.LBE4282:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = op_PSLLDI128 (vv, k);
+ 17918              		.loc 2 433 0
+ 17919 10130 F30F7F85 		movdqu	%xmm0, -1024(%rbp)
+ 17919      00FCFFFF 
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 17920              		.loc 2 435 0
+ 17921 10138 B8010000 		movl	$1, %eax
+ 17921      00
+ 17922 1013d 4898     		cltq
+ 17923 1013f 4889C2   		movq	%rax, %rdx
+ 17924 10142 48C1E204 		salq	$4, %rdx
+ 17925 10146 488D0500 		leaq	sl_mask.7310(%rip), %rax
+ 17925      000000
+ 17926 1014d 660F6F04 		movdqa	(%rdx,%rax), %xmm0
+ 17926      02
+ 17927 10152 F30F6F8D 		movdqu	-1024(%rbp), %xmm1
+ 17927      00FCFFFF 
+ 17928 1015a F30F7F8D 		movdqu	%xmm1, -960(%rbp)
+ 17928      40FCFFFF 
+ 17929 10162 F30F7F85 		movdqu	%xmm0, -976(%rbp)
+ 17929      30FCFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 542
+
+
+ 17930              	.LBB4284:
+ 17931              	.LBB4285:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 17932              		.loc 2 206 0
+ 17933 1016a F30F6F85 		movdqu	-976(%rbp), %xmm0
+ 17933      30FCFFFF 
+ 17934 10172 F30F6F8D 		movdqu	-960(%rbp), %xmm1
+ 17934      40FCFFFF 
+ 17935 1017a 660FDBC1 		pand	%xmm1, %xmm0
+ 17936              	.LBE4285:
+ 17937              	.LBE4284:
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 17938              		.loc 2 435 0
+ 17939 1017e F30F7F85 		movdqu	%xmm0, -1024(%rbp)
+ 17939      00FCFFFF 
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vv;
+ 17940              		.loc 2 437 0
+ 17941 10186 F30F6F85 		movdqu	-1024(%rbp), %xmm0
+ 17941      00FCFFFF 
+ 17942              	.LBE4281:
+ 17943              	.LBE4280:
+ 936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ 17944              		.loc 2 936 0
+ 17945 1018e F30F7F85 		movdqu	%xmm0, -1168(%rbp)
+ 17945      70FBFFFF 
+ 17946              	.LBB4286:
+ 937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("sl", sl);
+ 17947              		.loc 2 937 0
+ 17948 10196 F30F6F85 		movdqu	-1168(%rbp), %xmm0
+ 17948      70FBFFFF 
+ 17949 1019e F30F7F85 		movdqu	%xmm0, -2384(%rbp)
+ 17949      B0F6FFFF 
+ 17950 101a6 E8000000 		call	KDbgWriterGet at PLT
+ 17950      00
+ 17951 101ab 4885C0   		testq	%rax, %rax
+ 17952 101ae 7479     		je	.L290
+ 17953 101b0 BF010000 		movl	$1, %edi
+ 17953      00
+ 17954 101b5 E8000000 		call	KDbgCondToFlag at PLT
+ 17954      00
+ 17955 101ba 4889C6   		movq	%rax, %rsi
+ 17956 101bd BF100000 		movl	$16, %edi
+ 17956      00
+ 17957 101c2 E8000000 		call	KDbgTestModConds at PLT
+ 17957      00
+ 17958 101c7 84C0     		testb	%al, %al
+ 17959 101c9 745E     		je	.L290
+ 17960 101cb 8B85BCF6 		movl	-2372(%rbp), %eax
+ 17960      FFFF
+ 17961 101d1 89C7     		movl	%eax, %edi
+ 17962 101d3 E828FEFE 		call	bswap_32
+ 17962      FF
+ 17963 101d8 4189C5   		movl	%eax, %r13d
+ 17964 101db 8B85B8F6 		movl	-2376(%rbp), %eax
+ 17964      FFFF
+ 17965 101e1 89C7     		movl	%eax, %edi
+ 17966 101e3 E818FEFE 		call	bswap_32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 543
+
+
+ 17966      FF
+ 17967 101e8 4189C4   		movl	%eax, %r12d
+ 17968 101eb 8B85B4F6 		movl	-2380(%rbp), %eax
+ 17968      FFFF
+ 17969 101f1 89C7     		movl	%eax, %edi
+ 17970 101f3 E808FEFE 		call	bswap_32
+ 17970      FF
+ 17971 101f8 89C3     		movl	%eax, %ebx
+ 17972 101fa 8B85B0F6 		movl	-2384(%rbp), %eax
+ 17972      FFFF
+ 17973 10200 89C7     		movl	%eax, %edi
+ 17974 10202 E8F9FDFE 		call	bswap_32
+ 17974      FF
+ 17975 10207 4589E9   		movl	%r13d, %r9d
+ 17976 1020a 4589E0   		movl	%r12d, %r8d
+ 17977 1020d 89D9     		movl	%ebx, %ecx
+ 17978 1020f 89C2     		movl	%eax, %edx
+ 17979 10211 488D3500 		leaq	.LC7(%rip), %rsi
+ 17979      000000
+ 17980 10218 488D3D00 		leaq	.LC1(%rip), %rdi
+ 17980      000000
+ 17981 1021f B8000000 		movl	$0, %eax
+ 17981      00
+ 17982 10224 E8000000 		call	KDbgMsg at PLT
+ 17982      00
+ 17983              	.L290:
+ 17984              	.LBE4286:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 17985              		.loc 2 938 0
+ 17986 10229 660F6F05 		movdqa	FF_tab(%rip), %xmm0
+ 17986      00000000 
+ 17987 10231 F30F7F85 		movdqu	%xmm0, -928(%rbp)
+ 17987      60FCFFFF 
+ 17988 10239 F30F6F85 		movdqu	-1184(%rbp), %xmm0
+ 17988      60FBFFFF 
+ 17989 10241 F30F7F85 		movdqu	%xmm0, -944(%rbp)
+ 17989      50FCFFFF 
+ 17990 10249 F30F6F85 		movdqu	-928(%rbp), %xmm0
+ 17990      60FCFFFF 
+ 17991 10251 F30F7F85 		movdqu	%xmm0, -896(%rbp)
+ 17991      80FCFFFF 
+ 17992 10259 F30F6F85 		movdqu	-944(%rbp), %xmm0
+ 17992      50FCFFFF 
+ 17993 10261 F30F7F85 		movdqu	%xmm0, -912(%rbp)
+ 17993      70FCFFFF 
+ 17994              	.LBB4287:
+ 17995              	.LBB4288:
+ 17996              	.LBB4289:
+ 17997              	.LBB4290:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 17998              		.loc 3 529 0
+ 17999 10269 F30F6F8D 		movdqu	-912(%rbp), %xmm1
+ 17999      70FCFFFF 
+ 18000 10271 F30F6F85 		movdqu	-896(%rbp), %xmm0
+ 18000      80FCFFFF 
+ 18001 10279 660F3800 		pshufb	%xmm1, %xmm0
+ 18001      C1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 544
+
+
+ 18002              	.LBE4290:
+ 18003              	.LBE4289:
+ 18004              	.LBE4288:
+ 18005              	.LBE4287:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 18006              		.loc 2 938 0
+ 18007 1027e F30F7F85 		movdqu	%xmm0, -1184(%rbp)
+ 18007      60FBFFFF 
+ 18008 10286 F30F6F85 		movdqu	-1168(%rbp), %xmm0
+ 18008      70FBFFFF 
+ 18009 1028e F30F7F85 		movdqu	%xmm0, -864(%rbp)
+ 18009      A0FCFFFF 
+ 18010 10296 F30F6F85 		movdqu	-1184(%rbp), %xmm0
+ 18010      60FBFFFF 
+ 18011 1029e F30F7F85 		movdqu	%xmm0, -880(%rbp)
+ 18011      90FCFFFF 
+ 18012              	.LBB4291:
+ 18013              	.LBB4292:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 18014              		.loc 2 178 0
+ 18015 102a6 F30F6F85 		movdqu	-880(%rbp), %xmm0
+ 18015      90FCFFFF 
+ 18016 102ae F30F6F8D 		movdqu	-864(%rbp), %xmm1
+ 18016      A0FCFFFF 
+ 18017 102b6 660FEFC1 		pxor	%xmm1, %xmm0
+ 18018              	.LBE4292:
+ 18019              	.LBE4291:
+ 18020              	.LBE4271:
+ 18021              	.LBE4270:
+ 952:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state =  AESBCMEMBER(FF_mul) (state, 1);
+ 18022              		.loc 2 952 0
+ 18023 102ba F30F7F85 		movdqu	%xmm0, -1232(%rbp)
+ 18023      30FBFFFF 
+ 18024              	.LBB4293:
+ 953:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 18025              		.loc 2 953 0
+ 18026 102c2 F30F6F85 		movdqu	-1232(%rbp), %xmm0
+ 18026      30FBFFFF 
+ 18027 102ca F30F7F85 		movdqu	%xmm0, -2416(%rbp)
+ 18027      90F6FFFF 
+ 18028 102d2 E8000000 		call	KDbgWriterGet at PLT
+ 18028      00
+ 18029 102d7 4885C0   		testq	%rax, %rax
+ 18030 102da 7479     		je	.L292
+ 18031 102dc BF010000 		movl	$1, %edi
+ 18031      00
+ 18032 102e1 E8000000 		call	KDbgCondToFlag at PLT
+ 18032      00
+ 18033 102e6 4889C6   		movq	%rax, %rsi
+ 18034 102e9 BF100000 		movl	$16, %edi
+ 18034      00
+ 18035 102ee E8000000 		call	KDbgTestModConds at PLT
+ 18035      00
+ 18036 102f3 84C0     		testb	%al, %al
+ 18037 102f5 745E     		je	.L292
+ 18038 102f7 8B859CF6 		movl	-2404(%rbp), %eax
+ 18038      FFFF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 545
+
+
+ 18039 102fd 89C7     		movl	%eax, %edi
+ 18040 102ff E8FCFCFE 		call	bswap_32
+ 18040      FF
+ 18041 10304 4189C5   		movl	%eax, %r13d
+ 18042 10307 8B8598F6 		movl	-2408(%rbp), %eax
+ 18042      FFFF
+ 18043 1030d 89C7     		movl	%eax, %edi
+ 18044 1030f E8ECFCFE 		call	bswap_32
+ 18044      FF
+ 18045 10314 4189C4   		movl	%eax, %r12d
+ 18046 10317 8B8594F6 		movl	-2412(%rbp), %eax
+ 18046      FFFF
+ 18047 1031d 89C7     		movl	%eax, %edi
+ 18048 1031f E8DCFCFE 		call	bswap_32
+ 18048      FF
+ 18049 10324 89C3     		movl	%eax, %ebx
+ 18050 10326 8B8590F6 		movl	-2416(%rbp), %eax
+ 18050      FFFF
+ 18051 1032c 89C7     		movl	%eax, %edi
+ 18052 1032e E8CDFCFE 		call	bswap_32
+ 18052      FF
+ 18053 10333 4589E9   		movl	%r13d, %r9d
+ 18054 10336 4589E0   		movl	%r12d, %r8d
+ 18055 10339 89D9     		movl	%ebx, %ecx
+ 18056 1033b 89C2     		movl	%eax, %edx
+ 18057 1033d 488D3500 		leaq	.LC5(%rip), %rsi
+ 18057      000000
+ 18058 10344 488D3D00 		leaq	.LC1(%rip), %rdi
+ 18058      000000
+ 18059 1034b B8000000 		movl	$0, %eax
+ 18059      00
+ 18060 10350 E8000000 		call	KDbgMsg at PLT
+ 18060      00
+ 18061              	.L292:
+ 18062              	.LBE4293:
+ 955:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 18063              		.loc 2 955 0
+ 18064 10355 F30F6F85 		movdqu	-1232(%rbp), %xmm0
+ 18064      30FBFFFF 
+ 18065              	.LBE4268:
+ 18066              	.LBE4267:
+1054:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c0 = AESBCMEMBER(FF_mul_02) (c0);
+ 18067              		.loc 2 1054 0
+ 18068 1035d 660F7F85 		movdqa	%xmm0, -2608(%rbp)
+ 18068      D0F5FFFF 
+ 18069 10365 660F6F85 		movdqa	-2624(%rbp), %xmm0
+ 18069      C0F5FFFF 
+ 18070 1036d F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 18070      C0FCFFFF 
+ 18071 10375 660F6F8D 		movdqa	-2640(%rbp), %xmm1
+ 18071      B0F5FFFF 
+ 18072 1037d F30F7F8D 		movdqu	%xmm1, -848(%rbp)
+ 18072      B0FCFFFF 
+ 18073              	.LBB4294:
+ 18074              	.LBB4295:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 18075              		.loc 2 178 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 546
+
+
+ 18076 10385 F30F6F85 		movdqu	-848(%rbp), %xmm0
+ 18076      B0FCFFFF 
+ 18077 1038d F30F6F8D 		movdqu	-832(%rbp), %xmm1
+ 18077      C0FCFFFF 
+ 18078 10395 660FEFC1 		pxor	%xmm1, %xmm0
+ 18079              	.LBE4295:
+ 18080              	.LBE4294:
+1067:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c1 = AESBCMEMBER(VecXor) (c1, c2);
+ 18081              		.loc 2 1067 0
+ 18082 10399 660F7F85 		movdqa	%xmm0, -2624(%rbp)
+ 18082      C0F5FFFF 
+ 18083 103a1 660F6F85 		movdqa	-2624(%rbp), %xmm0
+ 18083      C0F5FFFF 
+ 18084 103a9 F30F7F85 		movdqu	%xmm0, -800(%rbp)
+ 18084      E0FCFFFF 
+ 18085 103b1 660F6F8D 		movdqa	-2656(%rbp), %xmm1
+ 18085      A0F5FFFF 
+ 18086 103b9 F30F7F8D 		movdqu	%xmm1, -816(%rbp)
+ 18086      D0FCFFFF 
+ 18087              	.LBB4296:
+ 18088              	.LBB4297:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 18089              		.loc 2 178 0
+ 18090 103c1 F30F6F85 		movdqu	-816(%rbp), %xmm0
+ 18090      D0FCFFFF 
+ 18091 103c9 F30F6F8D 		movdqu	-800(%rbp), %xmm1
+ 18091      E0FCFFFF 
+ 18092 103d1 660FEFC1 		pxor	%xmm1, %xmm0
+ 18093              	.LBE4297:
+ 18094              	.LBE4296:
+1068:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c1 = AESBCMEMBER(VecXor) (c1, c3);
+ 18095              		.loc 2 1068 0
+ 18096 103d5 660F7F85 		movdqa	%xmm0, -2624(%rbp)
+ 18096      C0F5FFFF 
+ 18097 103dd 660F6F85 		movdqa	-2624(%rbp), %xmm0
+ 18097      C0F5FFFF 
+ 18098 103e5 F30F7F85 		movdqu	%xmm0, -768(%rbp)
+ 18098      00FDFFFF 
+ 18099 103ed 660F6F8D 		movdqa	-2608(%rbp), %xmm1
+ 18099      D0F5FFFF 
+ 18100 103f5 F30F7F8D 		movdqu	%xmm1, -784(%rbp)
+ 18100      F0FCFFFF 
+ 18101              	.LBB4298:
+ 18102              	.LBB4299:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 18103              		.loc 2 178 0
+ 18104 103fd F30F6F85 		movdqu	-784(%rbp), %xmm0
+ 18104      F0FCFFFF 
+ 18105 10405 F30F6F8D 		movdqu	-768(%rbp), %xmm1
+ 18105      00FDFFFF 
+ 18106 1040d 660FEFC1 		pxor	%xmm1, %xmm0
+ 18107              	.LBE4299:
+ 18108              	.LBE4298:
+1069:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     c1 = AESBCMEMBER(VecXor) (c1, c0);
+ 18109              		.loc 2 1069 0
+ 18110 10411 660F7F85 		movdqa	%xmm0, -2624(%rbp)
+ 18110      C0F5FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 547
+
+
+1071:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return c1;
+ 18111              		.loc 2 1071 0
+ 18112 10419 660F6F85 		movdqa	-2624(%rbp), %xmm0
+ 18112      C0F5FFFF 
+ 18113              	.LBE4246:
+ 18114              	.LBE4245:
+2037:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(MixColumns) (state);
+ 18115              		.loc 2 2037 0
+ 18116 10421 F30F7F85 		movdqu	%xmm0, -2128(%rbp)
+ 18116      B0F7FFFF 
+ 18117              	.LBB4300:
+2040:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After MixColum", state);
+ 18118              		.loc 2 2040 0
+ 18119 10429 F30F6F85 		movdqu	-2128(%rbp), %xmm0
+ 18119      B0F7FFFF 
+ 18120 10431 F30F7F85 		movdqu	%xmm0, -2480(%rbp)
+ 18120      50F6FFFF 
+ 18121 10439 E8000000 		call	KDbgWriterGet at PLT
+ 18121      00
+ 18122 1043e 4885C0   		testq	%rax, %rax
+ 18123 10441 7479     		je	.L294
+ 18124 10443 BF010000 		movl	$1, %edi
+ 18124      00
+ 18125 10448 E8000000 		call	KDbgCondToFlag at PLT
+ 18125      00
+ 18126 1044d 4889C6   		movq	%rax, %rsi
+ 18127 10450 BF100000 		movl	$16, %edi
+ 18127      00
+ 18128 10455 E8000000 		call	KDbgTestModConds at PLT
+ 18128      00
+ 18129 1045a 84C0     		testb	%al, %al
+ 18130 1045c 745E     		je	.L294
+ 18131 1045e 8B855CF6 		movl	-2468(%rbp), %eax
+ 18131      FFFF
+ 18132 10464 89C7     		movl	%eax, %edi
+ 18133 10466 E895FBFE 		call	bswap_32
+ 18133      FF
+ 18134 1046b 4189C5   		movl	%eax, %r13d
+ 18135 1046e 8B8558F6 		movl	-2472(%rbp), %eax
+ 18135      FFFF
+ 18136 10474 89C7     		movl	%eax, %edi
+ 18137 10476 E885FBFE 		call	bswap_32
+ 18137      FF
+ 18138 1047b 4189C4   		movl	%eax, %r12d
+ 18139 1047e 8B8554F6 		movl	-2476(%rbp), %eax
+ 18139      FFFF
+ 18140 10484 89C7     		movl	%eax, %edi
+ 18141 10486 E875FBFE 		call	bswap_32
+ 18141      FF
+ 18142 1048b 89C3     		movl	%eax, %ebx
+ 18143 1048d 8B8550F6 		movl	-2480(%rbp), %eax
+ 18143      FFFF
+ 18144 10493 89C7     		movl	%eax, %edi
+ 18145 10495 E866FBFE 		call	bswap_32
+ 18145      FF
+ 18146 1049a 4589E9   		movl	%r13d, %r9d
+ 18147 1049d 4589E0   		movl	%r12d, %r8d
+
GAS LISTING /tmp/ccjbMjHD.s 			page 548
+
+
+ 18148 104a0 89D9     		movl	%ebx, %ecx
+ 18149 104a2 89C2     		movl	%eax, %edx
+ 18150 104a4 488D3500 		leaq	.LC13(%rip), %rsi
+ 18150      000000
+ 18151 104ab 488D3D00 		leaq	.LC1(%rip), %rdi
+ 18151      000000
+ 18152 104b2 B8000000 		movl	$0, %eax
+ 18152      00
+ 18153 104b7 E8000000 		call	KDbgMsg at PLT
+ 18153      00
+ 18154              	.L294:
+ 18155 104bc F30F6F85 		movdqu	-2128(%rbp), %xmm0
+ 18155      B0F7FFFF 
+ 18156 104c4 F30F7F85 		movdqu	%xmm0, -736(%rbp)
+ 18156      20FDFFFF 
+ 18157 104cc F30F6F85 		movdqu	-2144(%rbp), %xmm0
+ 18157      A0F7FFFF 
+ 18158 104d4 F30F7F85 		movdqu	%xmm0, -752(%rbp)
+ 18158      10FDFFFF 
+ 18159 104dc F30F6F85 		movdqu	-736(%rbp), %xmm0
+ 18159      20FDFFFF 
+ 18160 104e4 F30F7F85 		movdqu	%xmm0, -704(%rbp)
+ 18160      40FDFFFF 
+ 18161 104ec F30F6F85 		movdqu	-752(%rbp), %xmm0
+ 18161      10FDFFFF 
+ 18162 104f4 F30F7F85 		movdqu	%xmm0, -720(%rbp)
+ 18162      30FDFFFF 
+ 18163              	.LBE4300:
+ 18164              	.LBB4301:
+ 18165              	.LBB4302:
+ 18166              	.LBB4303:
+ 18167              	.LBB4304:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 18168              		.loc 2 178 0
+ 18169 104fc F30F6F85 		movdqu	-720(%rbp), %xmm0
+ 18169      30FDFFFF 
+ 18170 10504 F30F6F8D 		movdqu	-704(%rbp), %xmm1
+ 18170      40FDFFFF 
+ 18171 1050c 660FEFC1 		pxor	%xmm1, %xmm0
+ 18172              	.LBE4304:
+ 18173              	.LBE4303:
+ 18174              	.LBE4302:
+ 18175              	.LBE4301:
+2042:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 18176              		.loc 2 2042 0
+ 18177 10510 F30F7F85 		movdqu	%xmm0, -2128(%rbp)
+ 18177      B0F7FFFF 
+ 18178              	.LBB4305:
+2044:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+ 18179              		.loc 2 2044 0
+ 18180 10518 F30F6F85 		movdqu	-2144(%rbp), %xmm0
+ 18180      A0F7FFFF 
+ 18181 10520 F30F7F85 		movdqu	%xmm0, -2496(%rbp)
+ 18181      40F6FFFF 
+ 18182 10528 E8000000 		call	KDbgWriterGet at PLT
+ 18182      00
+ 18183 1052d 4885C0   		testq	%rax, %rax
+
GAS LISTING /tmp/ccjbMjHD.s 			page 549
+
+
+ 18184 10530 7479     		je	.L296
+ 18185 10532 BF010000 		movl	$1, %edi
+ 18185      00
+ 18186 10537 E8000000 		call	KDbgCondToFlag at PLT
+ 18186      00
+ 18187 1053c 4889C6   		movq	%rax, %rsi
+ 18188 1053f BF100000 		movl	$16, %edi
+ 18188      00
+ 18189 10544 E8000000 		call	KDbgTestModConds at PLT
+ 18189      00
+ 18190 10549 84C0     		testb	%al, %al
+ 18191 1054b 745E     		je	.L296
+ 18192 1054d 8B854CF6 		movl	-2484(%rbp), %eax
+ 18192      FFFF
+ 18193 10553 89C7     		movl	%eax, %edi
+ 18194 10555 E8A6FAFE 		call	bswap_32
+ 18194      FF
+ 18195 1055a 4189C5   		movl	%eax, %r13d
+ 18196 1055d 8B8548F6 		movl	-2488(%rbp), %eax
+ 18196      FFFF
+ 18197 10563 89C7     		movl	%eax, %edi
+ 18198 10565 E896FAFE 		call	bswap_32
+ 18198      FF
+ 18199 1056a 4189C4   		movl	%eax, %r12d
+ 18200 1056d 8B8544F6 		movl	-2492(%rbp), %eax
+ 18200      FFFF
+ 18201 10573 89C7     		movl	%eax, %edi
+ 18202 10575 E886FAFE 		call	bswap_32
+ 18202      FF
+ 18203 1057a 89C3     		movl	%eax, %ebx
+ 18204 1057c 8B8540F6 		movl	-2496(%rbp), %eax
+ 18204      FFFF
+ 18205 10582 89C7     		movl	%eax, %edi
+ 18206 10584 E877FAFE 		call	bswap_32
+ 18206      FF
+ 18207 10589 4589E9   		movl	%r13d, %r9d
+ 18208 1058c 4589E0   		movl	%r12d, %r8d
+ 18209 1058f 89D9     		movl	%ebx, %ecx
+ 18210 10591 89C2     		movl	%eax, %edx
+ 18211 10593 488D3500 		leaq	.LC9(%rip), %rsi
+ 18211      000000
+ 18212 1059a 488D3D00 		leaq	.LC1(%rip), %rdi
+ 18212      000000
+ 18213 105a1 B8000000 		movl	$0, %eax
+ 18213      00
+ 18214 105a6 E8000000 		call	KDbgMsg at PLT
+ 18214      00
+ 18215              	.L296:
+ 18216              	.LBE4305:
+ 18217              	.LBB4306:
+2045:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("End of Round", state);
+ 18218              		.loc 2 2045 0
+ 18219 105ab F30F6F85 		movdqu	-2128(%rbp), %xmm0
+ 18219      B0F7FFFF 
+ 18220 105b3 F30F7F85 		movdqu	%xmm0, -2512(%rbp)
+ 18220      30F6FFFF 
+ 18221 105bb E8000000 		call	KDbgWriterGet at PLT
+
GAS LISTING /tmp/ccjbMjHD.s 			page 550
+
+
+ 18221      00
+ 18222 105c0 4885C0   		testq	%rax, %rax
+ 18223 105c3 7479     		je	.L298
+ 18224 105c5 BF010000 		movl	$1, %edi
+ 18224      00
+ 18225 105ca E8000000 		call	KDbgCondToFlag at PLT
+ 18225      00
+ 18226 105cf 4889C6   		movq	%rax, %rsi
+ 18227 105d2 BF100000 		movl	$16, %edi
+ 18227      00
+ 18228 105d7 E8000000 		call	KDbgTestModConds at PLT
+ 18228      00
+ 18229 105dc 84C0     		testb	%al, %al
+ 18230 105de 745E     		je	.L298
+ 18231 105e0 8B853CF6 		movl	-2500(%rbp), %eax
+ 18231      FFFF
+ 18232 105e6 89C7     		movl	%eax, %edi
+ 18233 105e8 E813FAFE 		call	bswap_32
+ 18233      FF
+ 18234 105ed 4189C5   		movl	%eax, %r13d
+ 18235 105f0 8B8538F6 		movl	-2504(%rbp), %eax
+ 18235      FFFF
+ 18236 105f6 89C7     		movl	%eax, %edi
+ 18237 105f8 E803FAFE 		call	bswap_32
+ 18237      FF
+ 18238 105fd 4189C4   		movl	%eax, %r12d
+ 18239 10600 8B8534F6 		movl	-2508(%rbp), %eax
+ 18239      FFFF
+ 18240 10606 89C7     		movl	%eax, %edi
+ 18241 10608 E8F3F9FE 		call	bswap_32
+ 18241      FF
+ 18242 1060d 89C3     		movl	%eax, %ebx
+ 18243 1060f 8B8530F6 		movl	-2512(%rbp), %eax
+ 18243      FFFF
+ 18244 10615 89C7     		movl	%eax, %edi
+ 18245 10617 E8E4F9FE 		call	bswap_32
+ 18245      FF
+ 18246 1061c 4589E9   		movl	%r13d, %r9d
+ 18247 1061f 4589E0   		movl	%r12d, %r8d
+ 18248 10622 89D9     		movl	%ebx, %ecx
+ 18249 10624 89C2     		movl	%eax, %edx
+ 18250 10626 488D3500 		leaq	.LC14(%rip), %rsi
+ 18250      000000
+ 18251 1062d 488D3D00 		leaq	.LC1(%rip), %rdi
+ 18251      000000
+ 18252 10634 B8000000 		movl	$0, %eax
+ 18252      00
+ 18253 10639 E8000000 		call	KDbgMsg at PLT
+ 18253      00
+ 18254              	.L298:
+ 18255              	.LBE4306:
+2047:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 18256              		.loc 2 2047 0
+ 18257 1063e F30F6F85 		movdqu	-2128(%rbp), %xmm0
+ 18257      B0F7FFFF 
+ 18258              	.LBE4209:
+ 18259              	.LBE4208:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 551
+
+
+ 18260              		.loc 2 2100 0
+ 18261 10646 660F7F85 		movdqa	%xmm0, -2576(%rbp)
+ 18261      F0F5FFFF 
+2099:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for ( ; ix < Nr; ++ix)
+ 18262              		.loc 2 2099 0
+ 18263 1064e 83853CF7 		addl	$1, -2244(%rbp)
+ 18263      FFFF01
+ 18264              	.L274:
+ 18265 10655 8B853CF7 		movl	-2244(%rbp), %eax
+ 18265      FFFF
+ 18266 1065b 3B85E4F5 		cmpl	-2588(%rbp), %eax
+ 18266      FFFF
+ 18267 10661 0F82DDF0 		jb	.L299
+ 18267      FFFF
+2101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(LastRound) (state, key[ix]);
+ 18268              		.loc 2 2102 0
+ 18269 10667 8B853CF7 		mov	-2244(%rbp), %eax
+ 18269      FFFF
+ 18270 1066d 48C1E004 		salq	$4, %rax
+ 18271 10671 480385E8 		addq	-2584(%rbp), %rax
+ 18271      F5FFFF
+ 18272 10678 660F6F00 		movdqa	(%rax), %xmm0
+ 18273 1067c 660F6F8D 		movdqa	-2576(%rbp), %xmm1
+ 18273      F0F5FFFF 
+ 18274 10684 F30F7F8D 		movdqu	%xmm1, -672(%rbp)
+ 18274      60FDFFFF 
+ 18275 1068c F30F7F85 		movdqu	%xmm0, -688(%rbp)
+ 18275      50FDFFFF 
+ 18276              	.LBB4307:
+ 18277              	.LBB4308:
+ 18278              	.LBB4309:
+2058:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Start of Round", state);
+ 18279              		.loc 2 2058 0
+ 18280 10694 F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 18280      60FDFFFF 
+ 18281 1069c F30F7F85 		movdqu	%xmm0, -2272(%rbp)
+ 18281      20F7FFFF 
+ 18282 106a4 E8000000 		call	KDbgWriterGet at PLT
+ 18282      00
+ 18283 106a9 4885C0   		testq	%rax, %rax
+ 18284 106ac 7479     		je	.L301
+ 18285 106ae BF010000 		movl	$1, %edi
+ 18285      00
+ 18286 106b3 E8000000 		call	KDbgCondToFlag at PLT
+ 18286      00
+ 18287 106b8 4889C6   		movq	%rax, %rsi
+ 18288 106bb BF100000 		movl	$16, %edi
+ 18288      00
+ 18289 106c0 E8000000 		call	KDbgTestModConds at PLT
+ 18289      00
+ 18290 106c5 84C0     		testb	%al, %al
+ 18291 106c7 745E     		je	.L301
+ 18292 106c9 8B852CF7 		movl	-2260(%rbp), %eax
+ 18292      FFFF
+ 18293 106cf 89C7     		movl	%eax, %edi
+ 18294 106d1 E82AF9FE 		call	bswap_32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 552
+
+
+ 18294      FF
+ 18295 106d6 4189C5   		movl	%eax, %r13d
+ 18296 106d9 8B8528F7 		movl	-2264(%rbp), %eax
+ 18296      FFFF
+ 18297 106df 89C7     		movl	%eax, %edi
+ 18298 106e1 E81AF9FE 		call	bswap_32
+ 18298      FF
+ 18299 106e6 4189C4   		movl	%eax, %r12d
+ 18300 106e9 8B8524F7 		movl	-2268(%rbp), %eax
+ 18300      FFFF
+ 18301 106ef 89C7     		movl	%eax, %edi
+ 18302 106f1 E80AF9FE 		call	bswap_32
+ 18302      FF
+ 18303 106f6 89C3     		movl	%eax, %ebx
+ 18304 106f8 8B8520F7 		movl	-2272(%rbp), %eax
+ 18304      FFFF
+ 18305 106fe 89C7     		movl	%eax, %edi
+ 18306 10700 E8FBF8FE 		call	bswap_32
+ 18306      FF
+ 18307 10705 4589E9   		movl	%r13d, %r9d
+ 18308 10708 4589E0   		movl	%r12d, %r8d
+ 18309 1070b 89D9     		movl	%ebx, %ecx
+ 18310 1070d 89C2     		movl	%eax, %edx
+ 18311 1070f 488D3500 		leaq	.LC8(%rip), %rsi
+ 18311      000000
+ 18312 10716 488D3D00 		leaq	.LC1(%rip), %rdi
+ 18312      000000
+ 18313 1071d B8000000 		movl	$0, %eax
+ 18313      00
+ 18314 10722 E8000000 		call	KDbgMsg at PLT
+ 18314      00
+ 18315              	.L301:
+ 18316 10727 F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 18316      60FDFFFF 
+ 18317 1072f F30F7F85 		movdqu	%xmm0, -656(%rbp)
+ 18317      70FDFFFF 
+ 18318 10737 F30F6F85 		movdqu	-656(%rbp), %xmm0
+ 18318      70FDFFFF 
+ 18319 1073f F30F7F85 		movdqu	%xmm0, -624(%rbp)
+ 18319      90FDFFFF 
+ 18320 10747 488D0500 		leaq	KAESBlockCipherVecRegRijndaelSBoxV(%rip), %rax
+ 18320      000000
+ 18321 1074e 48898588 		movq	%rax, -632(%rbp)
+ 18321      FDFFFF
+ 18322              	.LBE4309:
+ 18323              	.LBB4310:
+ 18324              	.LBB4311:
+ 18325              	.LBB4312:
+ 18326              	.LBB4313:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 18327              		.loc 2 851 0
+ 18328 10755 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 18328      00000000 
+ 18329 1075d F30F7F85 		movdqu	%xmm0, -592(%rbp)
+ 18329      B0FDFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 18330              		.loc 2 854 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 553
+
+
+ 18331 10765 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 18331      00000000 
+ 18332 1076d F30F6F8D 		movdqu	-624(%rbp), %xmm1
+ 18332      90FDFFFF 
+ 18333 10775 F30F7F8D 		movdqu	%xmm1, -512(%rbp)
+ 18333      00FEFFFF 
+ 18334 1077d F30F7F85 		movdqu	%xmm0, -528(%rbp)
+ 18334      F0FDFFFF 
+ 18335              	.LBB4314:
+ 18336              	.LBB4315:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 18337              		.loc 2 206 0
+ 18338 10785 F30F6F85 		movdqu	-528(%rbp), %xmm0
+ 18338      F0FDFFFF 
+ 18339 1078d F30F6F8D 		movdqu	-512(%rbp), %xmm1
+ 18339      00FEFFFF 
+ 18340 10795 660FDBC1 		pand	%xmm1, %xmm0
+ 18341              	.LBE4315:
+ 18342              	.LBE4314:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 18343              		.loc 2 854 0
+ 18344 10799 F30F7F85 		movdqu	%xmm0, -544(%rbp)
+ 18344      E0FDFFFF 
+ 18345 107a1 F30F6F85 		movdqu	-624(%rbp), %xmm0
+ 18345      90FDFFFF 
+ 18346 107a9 F30F7F85 		movdqu	%xmm0, -480(%rbp)
+ 18346      20FEFFFF 
+ 18347              	.LBB4316:
+ 18348              	.LBB4317:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 18349              		.loc 3 433 0
+ 18350 107b1 F30F6F85 		movdqu	-480(%rbp), %xmm0
+ 18350      20FEFFFF 
+ 18351 107b9 660F72D0 		psrld	$4, %xmm0
+ 18351      04
+ 18352              	.LBE4317:
+ 18353              	.LBE4316:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 18354              		.loc 2 857 0
+ 18355 107be F30F7F85 		movdqu	%xmm0, -560(%rbp)
+ 18355      D0FDFFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 18356              		.loc 2 859 0
+ 18357 107c6 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 18357      00000000 
+ 18358 107ce F30F6F8D 		movdqu	-560(%rbp), %xmm1
+ 18358      D0FDFFFF 
+ 18359 107d6 F30F7F8D 		movdqu	%xmm1, -448(%rbp)
+ 18359      40FEFFFF 
+ 18360 107de F30F7F85 		movdqu	%xmm0, -464(%rbp)
+ 18360      30FEFFFF 
+ 18361              	.LBB4318:
+ 18362              	.LBB4319:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 18363              		.loc 2 206 0
+ 18364 107e6 F30F6F85 		movdqu	-464(%rbp), %xmm0
+ 18364      30FEFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 554
+
+
+ 18365 107ee F30F6F8D 		movdqu	-448(%rbp), %xmm1
+ 18365      40FEFFFF 
+ 18366 107f6 660FDBC1 		pand	%xmm1, %xmm0
+ 18367              	.LBE4319:
+ 18368              	.LBE4318:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 18369              		.loc 2 859 0
+ 18370 107fa F30F7F85 		movdqu	%xmm0, -560(%rbp)
+ 18370      D0FDFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 18371              		.loc 2 866 0
+ 18372 10802 C785ACFD 		movl	$0, -596(%rbp)
+ 18372      FFFF0000 
+ 18372      0000
+ 18373 1080c E9BE0100 		jmp	.L302
+ 18373      00
+ 18374              	.L303:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 18375              		.loc 2 868 0
+ 18376 10811 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 18376      00000000 
+ 18377 10819 F30F7F85 		movdqu	%xmm0, -416(%rbp)
+ 18377      60FEFFFF 
+ 18378 10821 F30F6F85 		movdqu	-560(%rbp), %xmm0
+ 18378      D0FDFFFF 
+ 18379 10829 F30F7F85 		movdqu	%xmm0, -432(%rbp)
+ 18379      50FEFFFF 
+ 18380 10831 F30F6F85 		movdqu	-416(%rbp), %xmm0
+ 18380      60FEFFFF 
+ 18381 10839 F30F7F85 		movdqu	%xmm0, -384(%rbp)
+ 18381      80FEFFFF 
+ 18382 10841 F30F6F85 		movdqu	-432(%rbp), %xmm0
+ 18382      50FEFFFF 
+ 18383 10849 F30F7F85 		movdqu	%xmm0, -400(%rbp)
+ 18383      70FEFFFF 
+ 18384              	.LBB4320:
+ 18385              	.LBB4321:
+ 18386              	.LBB4322:
+ 18387              	.LBB4323:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 18388              		.loc 3 529 0
+ 18389 10851 F30F6F8D 		movdqu	-400(%rbp), %xmm1
+ 18389      70FEFFFF 
+ 18390 10859 F30F6F85 		movdqu	-384(%rbp), %xmm0
+ 18390      80FEFFFF 
+ 18391 10861 660F3800 		pshufb	%xmm1, %xmm0
+ 18391      C1
+ 18392              	.LBE4323:
+ 18393              	.LBE4322:
+ 18394              	.LBE4321:
+ 18395              	.LBE4320:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 18396              		.loc 2 868 0
+ 18397 10866 F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 18397      C0FDFFFF 
+ 18398 1086e F30F6F85 		movdqu	-544(%rbp), %xmm0
+ 18398      E0FDFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 555
+
+
+ 18399 10876 F30F7F85 		movdqu	%xmm0, -352(%rbp)
+ 18399      A0FEFFFF 
+ 18400 1087e F30F6F85 		movdqu	-576(%rbp), %xmm0
+ 18400      C0FDFFFF 
+ 18401 10886 F30F7F85 		movdqu	%xmm0, -368(%rbp)
+ 18401      90FEFFFF 
+ 18402              	.LBB4324:
+ 18403              	.LBB4325:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 18404              		.loc 2 234 0
+ 18405 1088e F30F6F85 		movdqu	-368(%rbp), %xmm0
+ 18405      90FEFFFF 
+ 18406 10896 F30F6F8D 		movdqu	-352(%rbp), %xmm1
+ 18406      A0FEFFFF 
+ 18407 1089e 660FEBC1 		por	%xmm1, %xmm0
+ 18408              	.LBE4325:
+ 18409              	.LBE4324:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 18410              		.loc 2 870 0
+ 18411 108a2 F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 18411      C0FDFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 18412              		.loc 2 872 0
+ 18413 108aa 8B85ACFD 		mov	-596(%rbp), %eax
+ 18413      FFFF
+ 18414 108b0 48C1E004 		salq	$4, %rax
+ 18415 108b4 48038588 		addq	-632(%rbp), %rax
+ 18415      FDFFFF
+ 18416 108bb 660F6F00 		movdqa	(%rax), %xmm0
+ 18417 108bf F30F7F85 		movdqu	%xmm0, -320(%rbp)
+ 18417      C0FEFFFF 
+ 18418 108c7 F30F6F85 		movdqu	-576(%rbp), %xmm0
+ 18418      C0FDFFFF 
+ 18419 108cf F30F7F85 		movdqu	%xmm0, -336(%rbp)
+ 18419      B0FEFFFF 
+ 18420 108d7 F30F6F85 		movdqu	-320(%rbp), %xmm0
+ 18420      C0FEFFFF 
+ 18421 108df F30F7F85 		movdqu	%xmm0, -288(%rbp)
+ 18421      E0FEFFFF 
+ 18422 108e7 F30F6F85 		movdqu	-336(%rbp), %xmm0
+ 18422      B0FEFFFF 
+ 18423 108ef F30F7F85 		movdqu	%xmm0, -304(%rbp)
+ 18423      D0FEFFFF 
+ 18424              	.LBB4326:
+ 18425              	.LBB4327:
+ 18426              	.LBB4328:
+ 18427              	.LBB4329:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 18428              		.loc 3 529 0
+ 18429 108f7 F30F6F8D 		movdqu	-304(%rbp), %xmm1
+ 18429      D0FEFFFF 
+ 18430 108ff F30F6F85 		movdqu	-288(%rbp), %xmm0
+ 18430      E0FEFFFF 
+ 18431 10907 660F3800 		pshufb	%xmm1, %xmm0
+ 18431      C1
+ 18432              	.LBE4329:
+ 18433              	.LBE4328:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 556
+
+
+ 18434              	.LBE4327:
+ 18435              	.LBE4326:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 18436              		.loc 2 872 0
+ 18437 1090c F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 18437      C0FDFFFF 
+ 18438 10914 F30F6F85 		movdqu	-592(%rbp), %xmm0
+ 18438      B0FDFFFF 
+ 18439 1091c F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 18439      00FFFFFF 
+ 18440 10924 F30F6F85 		movdqu	-576(%rbp), %xmm0
+ 18440      C0FDFFFF 
+ 18441 1092c F30F7F85 		movdqu	%xmm0, -272(%rbp)
+ 18441      F0FEFFFF 
+ 18442              	.LBB4330:
+ 18443              	.LBB4331:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 18444              		.loc 2 234 0
+ 18445 10934 F30F6F85 		movdqu	-272(%rbp), %xmm0
+ 18445      F0FEFFFF 
+ 18446 1093c F30F6F8D 		movdqu	-256(%rbp), %xmm1
+ 18446      00FFFFFF 
+ 18447 10944 660FEBC1 		por	%xmm1, %xmm0
+ 18448              	.LBE4331:
+ 18449              	.LBE4330:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 18450              		.loc 2 874 0
+ 18451 10948 F30F7F85 		movdqu	%xmm0, -592(%rbp)
+ 18451      B0FDFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 18452              		.loc 2 876 0
+ 18453 10950 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 18453      00000000 
+ 18454 10958 F30F6F8D 		movdqu	-560(%rbp), %xmm1
+ 18454      D0FDFFFF 
+ 18455 10960 F30F7F8D 		movdqu	%xmm1, -224(%rbp)
+ 18455      20FFFFFF 
+ 18456 10968 F30F7F85 		movdqu	%xmm0, -240(%rbp)
+ 18456      10FFFFFF 
+ 18457              	.LBB4332:
+ 18458              	.LBB4333:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 18459              		.loc 2 290 0
+ 18460 10970 F30F6F8D 		movdqu	-240(%rbp), %xmm1
+ 18460      10FFFFFF 
+ 18461 10978 F30F6F85 		movdqu	-224(%rbp), %xmm0
+ 18461      20FFFFFF 
+ 18462 10980 660FF8C1 		psubb	%xmm1, %xmm0
+ 18463              	.LBE4333:
+ 18464              	.LBE4332:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 18465              		.loc 2 876 0
+ 18466 10984 F30F7F85 		movdqu	%xmm0, -560(%rbp)
+ 18466      D0FDFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 18467              		.loc 2 878 0
+ 18468 1098c 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 557
+
+
+ 18468      00000000 
+ 18469 10994 F30F6F8D 		movdqu	-560(%rbp), %xmm1
+ 18469      D0FDFFFF 
+ 18470 1099c F30F7F8D 		movdqu	%xmm1, -192(%rbp)
+ 18470      40FFFFFF 
+ 18471 109a4 F30F7F85 		movdqu	%xmm0, -208(%rbp)
+ 18471      30FFFFFF 
+ 18472              	.LBB4334:
+ 18473              	.LBB4335:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 18474              		.loc 2 206 0
+ 18475 109ac F30F6F85 		movdqu	-208(%rbp), %xmm0
+ 18475      30FFFFFF 
+ 18476 109b4 F30F6F8D 		movdqu	-192(%rbp), %xmm1
+ 18476      40FFFFFF 
+ 18477 109bc 660FDBC1 		pand	%xmm1, %xmm0
+ 18478              	.LBE4335:
+ 18479              	.LBE4334:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 18480              		.loc 2 878 0
+ 18481 109c0 F30F7F85 		movdqu	%xmm0, -560(%rbp)
+ 18481      D0FDFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 18482              		.loc 2 866 0
+ 18483 109c8 8385ACFD 		addl	$1, -596(%rbp)
+ 18483      FFFF01
+ 18484              	.L302:
+ 18485 109cf 83BDACFD 		cmpl	$15, -596(%rbp)
+ 18485      FFFF0F
+ 18486 109d6 0F8635FE 		jbe	.L303
+ 18486      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 18487              		.loc 2 882 0
+ 18488 109dc F30F6F85 		movdqu	-592(%rbp), %xmm0
+ 18488      B0FDFFFF 
+ 18489              	.LBE4313:
+ 18490              	.LBE4312:
+ 18491              	.LBE4311:
+ 18492              	.LBE4310:
+2063:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(SubBytes) (state);
+ 18493              		.loc 2 2063 0
+ 18494 109e4 F30F7F85 		movdqu	%xmm0, -672(%rbp)
+ 18494      60FDFFFF 
+ 18495              	.LBB4336:
+2065:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After SubBytes", state);
+ 18496              		.loc 2 2065 0
+ 18497 109ec F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 18497      60FDFFFF 
+ 18498 109f4 F30F7F85 		movdqu	%xmm0, -2288(%rbp)
+ 18498      10F7FFFF 
+ 18499 109fc E8000000 		call	KDbgWriterGet at PLT
+ 18499      00
+ 18500 10a01 4885C0   		testq	%rax, %rax
+ 18501 10a04 7479     		je	.L305
+ 18502 10a06 BF010000 		movl	$1, %edi
+ 18502      00
+ 18503 10a0b E8000000 		call	KDbgCondToFlag at PLT
+
GAS LISTING /tmp/ccjbMjHD.s 			page 558
+
+
+ 18503      00
+ 18504 10a10 4889C6   		movq	%rax, %rsi
+ 18505 10a13 BF100000 		movl	$16, %edi
+ 18505      00
+ 18506 10a18 E8000000 		call	KDbgTestModConds at PLT
+ 18506      00
+ 18507 10a1d 84C0     		testb	%al, %al
+ 18508 10a1f 745E     		je	.L305
+ 18509 10a21 8B851CF7 		movl	-2276(%rbp), %eax
+ 18509      FFFF
+ 18510 10a27 89C7     		movl	%eax, %edi
+ 18511 10a29 E8D2F5FE 		call	bswap_32
+ 18511      FF
+ 18512 10a2e 4189C5   		movl	%eax, %r13d
+ 18513 10a31 8B8518F7 		movl	-2280(%rbp), %eax
+ 18513      FFFF
+ 18514 10a37 89C7     		movl	%eax, %edi
+ 18515 10a39 E8C2F5FE 		call	bswap_32
+ 18515      FF
+ 18516 10a3e 4189C4   		movl	%eax, %r12d
+ 18517 10a41 8B8514F7 		movl	-2284(%rbp), %eax
+ 18517      FFFF
+ 18518 10a47 89C7     		movl	%eax, %edi
+ 18519 10a49 E8B2F5FE 		call	bswap_32
+ 18519      FF
+ 18520 10a4e 89C3     		movl	%eax, %ebx
+ 18521 10a50 8B8510F7 		movl	-2288(%rbp), %eax
+ 18521      FFFF
+ 18522 10a56 89C7     		movl	%eax, %edi
+ 18523 10a58 E8A3F5FE 		call	bswap_32
+ 18523      FF
+ 18524 10a5d 4589E9   		movl	%r13d, %r9d
+ 18525 10a60 4589E0   		movl	%r12d, %r8d
+ 18526 10a63 89D9     		movl	%ebx, %ecx
+ 18527 10a65 89C2     		movl	%eax, %edx
+ 18528 10a67 488D3500 		leaq	.LC11(%rip), %rsi
+ 18528      000000
+ 18529 10a6e 488D3D00 		leaq	.LC1(%rip), %rdi
+ 18529      000000
+ 18530 10a75 B8000000 		movl	$0, %eax
+ 18530      00
+ 18531 10a7a E8000000 		call	KDbgMsg at PLT
+ 18531      00
+ 18532              	.L305:
+ 18533 10a7f F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 18533      60FDFFFF 
+ 18534 10a87 F30F7F85 		movdqu	%xmm0, -176(%rbp)
+ 18534      50FFFFFF 
+ 18535              	.LBE4336:
+ 18536              	.LBB4337:
+ 18537              	.LBB4338:
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 18538              		.loc 2 581 0
+ 18539 10a8f 660F6F05 		movdqa	ShiftRowTable.7358(%rip), %xmm0
+ 18539      00000000 
+ 18540 10a97 F30F6F8D 		movdqu	-176(%rbp), %xmm1
+ 18540      50FFFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 559
+
+
+ 18541 10a9f F30F7F8D 		movdqu	%xmm1, -144(%rbp)
+ 18541      70FFFFFF 
+ 18542 10aa7 F30F7F85 		movdqu	%xmm0, -160(%rbp)
+ 18542      60FFFFFF 
+ 18543 10aaf F30F6F85 		movdqu	-144(%rbp), %xmm0
+ 18543      70FFFFFF 
+ 18544 10ab7 F30F7F45 		movdqu	%xmm0, -112(%rbp)
+ 18544      90
+ 18545 10abc F30F6F85 		movdqu	-160(%rbp), %xmm0
+ 18545      60FFFFFF 
+ 18546 10ac4 F30F7F45 		movdqu	%xmm0, -128(%rbp)
+ 18546      80
+ 18547              	.LBB4339:
+ 18548              	.LBB4340:
+ 18549              	.LBB4341:
+ 18550              	.LBB4342:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 18551              		.loc 3 529 0
+ 18552 10ac9 F30F6F4D 		movdqu	-128(%rbp), %xmm1
+ 18552      80
+ 18553 10ace F30F6F45 		movdqu	-112(%rbp), %xmm0
+ 18553      90
+ 18554 10ad3 660F3800 		pshufb	%xmm1, %xmm0
+ 18554      C1
+ 18555              	.LBE4342:
+ 18556              	.LBE4341:
+ 18557              	.LBE4340:
+ 18558              	.LBE4339:
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 18559              		.loc 2 581 0
+ 18560 10ad8 F30F7F85 		movdqu	%xmm0, -176(%rbp)
+ 18560      50FFFFFF 
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 18561              		.loc 2 582 0
+ 18562 10ae0 F30F6F85 		movdqu	-176(%rbp), %xmm0
+ 18562      50FFFFFF 
+ 18563              	.LBE4338:
+ 18564              	.LBE4337:
+2067:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(ShiftRows) (state);
+ 18565              		.loc 2 2067 0
+ 18566 10ae8 F30F7F85 		movdqu	%xmm0, -672(%rbp)
+ 18566      60FDFFFF 
+ 18567              	.LBB4343:
+2069:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("After ShiftRow", state);
+ 18568              		.loc 2 2069 0
+ 18569 10af0 F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 18569      60FDFFFF 
+ 18570 10af8 F30F7F85 		movdqu	%xmm0, -2304(%rbp)
+ 18570      00F7FFFF 
+ 18571 10b00 E8000000 		call	KDbgWriterGet at PLT
+ 18571      00
+ 18572 10b05 4885C0   		testq	%rax, %rax
+ 18573 10b08 7479     		je	.L307
+ 18574 10b0a BF010000 		movl	$1, %edi
+ 18574      00
+ 18575 10b0f E8000000 		call	KDbgCondToFlag at PLT
+ 18575      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 560
+
+
+ 18576 10b14 4889C6   		movq	%rax, %rsi
+ 18577 10b17 BF100000 		movl	$16, %edi
+ 18577      00
+ 18578 10b1c E8000000 		call	KDbgTestModConds at PLT
+ 18578      00
+ 18579 10b21 84C0     		testb	%al, %al
+ 18580 10b23 745E     		je	.L307
+ 18581 10b25 8B850CF7 		movl	-2292(%rbp), %eax
+ 18581      FFFF
+ 18582 10b2b 89C7     		movl	%eax, %edi
+ 18583 10b2d E8CEF4FE 		call	bswap_32
+ 18583      FF
+ 18584 10b32 4189C5   		movl	%eax, %r13d
+ 18585 10b35 8B8508F7 		movl	-2296(%rbp), %eax
+ 18585      FFFF
+ 18586 10b3b 89C7     		movl	%eax, %edi
+ 18587 10b3d E8BEF4FE 		call	bswap_32
+ 18587      FF
+ 18588 10b42 4189C4   		movl	%eax, %r12d
+ 18589 10b45 8B8504F7 		movl	-2300(%rbp), %eax
+ 18589      FFFF
+ 18590 10b4b 89C7     		movl	%eax, %edi
+ 18591 10b4d E8AEF4FE 		call	bswap_32
+ 18591      FF
+ 18592 10b52 89C3     		movl	%eax, %ebx
+ 18593 10b54 8B8500F7 		movl	-2304(%rbp), %eax
+ 18593      FFFF
+ 18594 10b5a 89C7     		movl	%eax, %edi
+ 18595 10b5c E89FF4FE 		call	bswap_32
+ 18595      FF
+ 18596 10b61 4589E9   		movl	%r13d, %r9d
+ 18597 10b64 4589E0   		movl	%r12d, %r8d
+ 18598 10b67 89D9     		movl	%ebx, %ecx
+ 18599 10b69 89C2     		movl	%eax, %edx
+ 18600 10b6b 488D3500 		leaq	.LC12(%rip), %rsi
+ 18600      000000
+ 18601 10b72 488D3D00 		leaq	.LC1(%rip), %rdi
+ 18601      000000
+ 18602 10b79 B8000000 		movl	$0, %eax
+ 18602      00
+ 18603 10b7e E8000000 		call	KDbgMsg at PLT
+ 18603      00
+ 18604              	.L307:
+ 18605 10b83 F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 18605      60FDFFFF 
+ 18606 10b8b F30F7F45 		movdqu	%xmm0, -80(%rbp)
+ 18606      B0
+ 18607 10b90 F30F6F85 		movdqu	-688(%rbp), %xmm0
+ 18607      50FDFFFF 
+ 18608 10b98 F30F7F45 		movdqu	%xmm0, -96(%rbp)
+ 18608      A0
+ 18609 10b9d F30F6F45 		movdqu	-80(%rbp), %xmm0
+ 18609      B0
+ 18610 10ba2 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 18610      D0
+ 18611 10ba7 F30F6F45 		movdqu	-96(%rbp), %xmm0
+ 18611      A0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 561
+
+
+ 18612 10bac F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 18612      C0
+ 18613              	.LBE4343:
+ 18614              	.LBB4344:
+ 18615              	.LBB4345:
+ 18616              	.LBB4346:
+ 18617              	.LBB4347:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 18618              		.loc 2 178 0
+ 18619 10bb1 F30F6F45 		movdqu	-64(%rbp), %xmm0
+ 18619      C0
+ 18620 10bb6 F30F6F4D 		movdqu	-48(%rbp), %xmm1
+ 18620      D0
+ 18621 10bbb 660FEFC1 		pxor	%xmm1, %xmm0
+ 18622              	.LBE4347:
+ 18623              	.LBE4346:
+ 18624              	.LBE4345:
+ 18625              	.LBE4344:
+2071:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 18626              		.loc 2 2071 0
+ 18627 10bbf F30F7F85 		movdqu	%xmm0, -672(%rbp)
+ 18627      60FDFFFF 
+ 18628              	.LBB4348:
+2073:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("Round Key", round_keys);
+ 18629              		.loc 2 2073 0
+ 18630 10bc7 F30F6F85 		movdqu	-688(%rbp), %xmm0
+ 18630      50FDFFFF 
+ 18631 10bcf F30F7F85 		movdqu	%xmm0, -2320(%rbp)
+ 18631      F0F6FFFF 
+ 18632 10bd7 E8000000 		call	KDbgWriterGet at PLT
+ 18632      00
+ 18633 10bdc 4885C0   		testq	%rax, %rax
+ 18634 10bdf 7479     		je	.L309
+ 18635 10be1 BF010000 		movl	$1, %edi
+ 18635      00
+ 18636 10be6 E8000000 		call	KDbgCondToFlag at PLT
+ 18636      00
+ 18637 10beb 4889C6   		movq	%rax, %rsi
+ 18638 10bee BF100000 		movl	$16, %edi
+ 18638      00
+ 18639 10bf3 E8000000 		call	KDbgTestModConds at PLT
+ 18639      00
+ 18640 10bf8 84C0     		testb	%al, %al
+ 18641 10bfa 745E     		je	.L309
+ 18642 10bfc 8B85FCF6 		movl	-2308(%rbp), %eax
+ 18642      FFFF
+ 18643 10c02 89C7     		movl	%eax, %edi
+ 18644 10c04 E8F7F3FE 		call	bswap_32
+ 18644      FF
+ 18645 10c09 4189C5   		movl	%eax, %r13d
+ 18646 10c0c 8B85F8F6 		movl	-2312(%rbp), %eax
+ 18646      FFFF
+ 18647 10c12 89C7     		movl	%eax, %edi
+ 18648 10c14 E8E7F3FE 		call	bswap_32
+ 18648      FF
+ 18649 10c19 4189C4   		movl	%eax, %r12d
+ 18650 10c1c 8B85F4F6 		movl	-2316(%rbp), %eax
+
GAS LISTING /tmp/ccjbMjHD.s 			page 562
+
+
+ 18650      FFFF
+ 18651 10c22 89C7     		movl	%eax, %edi
+ 18652 10c24 E8D7F3FE 		call	bswap_32
+ 18652      FF
+ 18653 10c29 89C3     		movl	%eax, %ebx
+ 18654 10c2b 8B85F0F6 		movl	-2320(%rbp), %eax
+ 18654      FFFF
+ 18655 10c31 89C7     		movl	%eax, %edi
+ 18656 10c33 E8C8F3FE 		call	bswap_32
+ 18656      FF
+ 18657 10c38 4589E9   		movl	%r13d, %r9d
+ 18658 10c3b 4589E0   		movl	%r12d, %r8d
+ 18659 10c3e 89D9     		movl	%ebx, %ecx
+ 18660 10c40 89C2     		movl	%eax, %edx
+ 18661 10c42 488D3500 		leaq	.LC9(%rip), %rsi
+ 18661      000000
+ 18662 10c49 488D3D00 		leaq	.LC1(%rip), %rdi
+ 18662      000000
+ 18663 10c50 B8000000 		movl	$0, %eax
+ 18663      00
+ 18664 10c55 E8000000 		call	KDbgMsg at PLT
+ 18664      00
+ 18665              	.L309:
+ 18666              	.LBE4348:
+ 18667              	.LBB4349:
+2074:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR("End of Round", state);
+ 18668              		.loc 2 2074 0
+ 18669 10c5a F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 18669      60FDFFFF 
+ 18670 10c62 F30F7F85 		movdqu	%xmm0, -2336(%rbp)
+ 18670      E0F6FFFF 
+ 18671 10c6a E8000000 		call	KDbgWriterGet at PLT
+ 18671      00
+ 18672 10c6f 4885C0   		testq	%rax, %rax
+ 18673 10c72 7479     		je	.L311
+ 18674 10c74 BF010000 		movl	$1, %edi
+ 18674      00
+ 18675 10c79 E8000000 		call	KDbgCondToFlag at PLT
+ 18675      00
+ 18676 10c7e 4889C6   		movq	%rax, %rsi
+ 18677 10c81 BF100000 		movl	$16, %edi
+ 18677      00
+ 18678 10c86 E8000000 		call	KDbgTestModConds at PLT
+ 18678      00
+ 18679 10c8b 84C0     		testb	%al, %al
+ 18680 10c8d 745E     		je	.L311
+ 18681 10c8f 8B85ECF6 		movl	-2324(%rbp), %eax
+ 18681      FFFF
+ 18682 10c95 89C7     		movl	%eax, %edi
+ 18683 10c97 E864F3FE 		call	bswap_32
+ 18683      FF
+ 18684 10c9c 4189C5   		movl	%eax, %r13d
+ 18685 10c9f 8B85E8F6 		movl	-2328(%rbp), %eax
+ 18685      FFFF
+ 18686 10ca5 89C7     		movl	%eax, %edi
+ 18687 10ca7 E854F3FE 		call	bswap_32
+ 18687      FF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 563
+
+
+ 18688 10cac 4189C4   		movl	%eax, %r12d
+ 18689 10caf 8B85E4F6 		movl	-2332(%rbp), %eax
+ 18689      FFFF
+ 18690 10cb5 89C7     		movl	%eax, %edi
+ 18691 10cb7 E844F3FE 		call	bswap_32
+ 18691      FF
+ 18692 10cbc 89C3     		movl	%eax, %ebx
+ 18693 10cbe 8B85E0F6 		movl	-2336(%rbp), %eax
+ 18693      FFFF
+ 18694 10cc4 89C7     		movl	%eax, %edi
+ 18695 10cc6 E835F3FE 		call	bswap_32
+ 18695      FF
+ 18696 10ccb 4589E9   		movl	%r13d, %r9d
+ 18697 10cce 4589E0   		movl	%r12d, %r8d
+ 18698 10cd1 89D9     		movl	%ebx, %ecx
+ 18699 10cd3 89C2     		movl	%eax, %edx
+ 18700 10cd5 488D3500 		leaq	.LC14(%rip), %rsi
+ 18700      000000
+ 18701 10cdc 488D3D00 		leaq	.LC1(%rip), %rdi
+ 18701      000000
+ 18702 10ce3 B8000000 		movl	$0, %eax
+ 18702      00
+ 18703 10ce8 E8000000 		call	KDbgMsg at PLT
+ 18703      00
+ 18704              	.L311:
+ 18705              	.LBE4349:
+2076:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 18706              		.loc 2 2076 0
+ 18707 10ced F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 18707      60FDFFFF 
+ 18708              	.LBE4308:
+ 18709              	.LBE4307:
+2103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 18710              		.loc 2 2103 0
+ 18711 10cf5 4881C458 		addq	$2648, %rsp
+ 18711      0A0000
+ 18712 10cfc 5B       		popq	%rbx
+ 18713 10cfd 415C     		popq	%r12
+ 18714 10cff 415D     		popq	%r13
+ 18715 10d01 C9       		leave
+ 18716 10d02 C3       		ret
+ 18717              		.cfi_endproc
+ 18718              	.LFE655:
+ 18719              		.size	KAESBlockCipherVecRegCipher, .-KAESBlockCipherVecRegCipher
+ 18720              		.section	.rodata
+ 18721              	.LC15:
+ 18722 043f 41667465 		.string	"After InvSubBy"
+ 18722      7220496E 
+ 18722      76537562 
+ 18722      427900
+ 18723              	.LC16:
+ 18724 044e 41667465 		.string	"After InvShift"
+ 18724      7220496E 
+ 18724      76536869 
+ 18724      667400
+ 18725              	.LC17:
+ 18726 045d 41667465 		.string	"After InvMixCo"
+
GAS LISTING /tmp/ccjbMjHD.s 			page 564
+
+
+ 18726      7220496E 
+ 18726      764D6978 
+ 18726      436F00
+ 18727              		.text
+ 18728              		.type	KAESBlockCipherVecRegEqInvCipher, @function
+ 18729              	KAESBlockCipherVecRegEqInvCipher:
+ 18730              	.LFB659:
+2104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 
+2107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Section 5.1 of FIPS 197
+2108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   This set of routines implements our structured wrapping of the 
+2110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   FIPS-197 Section 5.3.5 Equivalent Inverse Cipher.  In particular
+2111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   figure 15 Pseudo Code for the Equivalent Inverse Cipher.
+2112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   The FIPS pseudocode has a single function which we have broken out 
+2114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   into three kinds of rounds - first round, middle rounds and last
+2115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   round as we have also done with the cipher rountine.
+2116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   The EqInvCipher operates on whole cipher blocks so the Byte and Block
+2118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   code is the same here until subroutines of the round functions are
+2119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   called.  
+2120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* 
+2123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * First round of equivalent inverse cipher is merely an XOR against the
+2124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * round key.
+2125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvFirstRound) (CipherVec state, CipherVec round_keys)
+2128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+2129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvFirstRound) (CipherVec state, CipherVec round_keys)
+2132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+2134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state =  AESBCMEMBER(AddRoundKey) (state, round_keys);
+2136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+2138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("End of Round", state);
+2139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+2140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * middle rounds of the equivalent inverse cipher perform four steps
+2145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   InvSubBytes (inverse substitute bytes
+2146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   InvShiftRows (inverse shift rows
+2147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   InvMixColumns (inverse mix columns)
+2148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   AddRoundKey   (xor against the round key)
+2149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * the AES-NI instruction set from until implments all four steps with 
+2151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * a single instruction
+2152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 565
+
+
+2154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvMiddleRound) (register CipherVec state,
+2156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                          register CipherVec round_keys)
+2157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+2158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvMiddleRound) (register CipherVec state,
+2161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                          register CipherVec round_keys)
+2162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if _DEBUGGING
+2164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec mstate;
+2165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec mround_keys;
+2166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+2168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mround_keys = round_keys;
+2169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Start of Round", mstate);
+2172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /* 
+2174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * AES-NI implmentation
+2175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      */
+2176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_AESDEC (state, round_keys);
+2179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else /* #if USE_AES_NI */
+2181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /*
+2183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * All other implementations
+2184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      */
+2185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvSubBytes) (state);
+2186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # if _DEBUGGING
+2188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+2189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvSubBy", mstate);
+2191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # endif
+2192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvShiftRows) (state);
+2194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # if _DEBUGGING
+2196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+2197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvShift", mstate);
+2199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # endif
+2200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvMixColumns) (state);
+2202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # if _DEBUGGING
+2204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+2205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvMixCo", mstate);
+2207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** # endif
+2208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+
GAS LISTING /tmp/ccjbMjHD.s 			page 566
+
+
+2211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if _DEBUGGING
+2213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+2214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Round Key", mround_keys);
+2216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("End of Round", mstate);
+2218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif /* #if USE_AES_NI */
+2219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+2221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * The final round of the equivalent inverse cipher is the same as 
+2226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * the middle rounds with the ommission of the InvMixColumns step.
+2227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvLastRound) (register CipherVec state,
+2230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                        register CipherVec round_keys)
+2231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __attribute__ ((always_inline));
+2232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvLastRound) (register CipherVec state,
+2235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                        register CipherVec round_keys)
+2236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+2238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = op_AESDECLAST (state, round_keys);
+2241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #else
+2242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvSubBytes) (state);
+2244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvSubBy", state);
+2246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvShiftRows) (state);
+2248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvShift", state);
+2250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+2252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+2254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("End of Round", state);
+2255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+2257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+2258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /*
+2261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * The EqInvCipher functions (is defined in Figure 15 'Pseudo Code for
+2262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * for the Equivalent Inverse Cipher.  This implementation as stated
+2263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * above for simplifaction broke out the three types of rounds into
+2264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * first round, middle rounds, and last round.  This approach was taken
+2265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * for ease of coding for optimization using smaller bytes of code
+2266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * but inlining of the functions for efficiency
+2267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+
GAS LISTING /tmp/ccjbMjHD.s 			page 567
+
+
+2268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static /*__inline__*/
+2269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(EqInvCipher) (CipherVec state, const CipherVec * key,
+2270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                     unsigned Nr)
+2271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 18731              		.loc 2 2271 0
+ 18732              		.cfi_startproc
+ 18733 10d03 55       		pushq	%rbp
+ 18734              	.LCFI18:
+ 18735              		.cfi_def_cfa_offset 16
+ 18736 10d04 4889E5   		movq	%rsp, %rbp
+ 18737              		.cfi_offset 6, -16
+ 18738              	.LCFI19:
+ 18739              		.cfi_def_cfa_register 6
+ 18740 10d07 4155     		pushq	%r13
+ 18741 10d09 4154     		pushq	%r12
+ 18742 10d0b 53       		pushq	%rbx
+ 18743 10d0c 4881EC08 		subq	$3592, %rsp
+ 18743      0E0000
+ 18744 10d13 660F7F85 		movdqa	%xmm0, -3488(%rbp)
+ 18744      60F2FFFF 
+ 18745 10d1b 4889BD58 		movq	%rdi, -3496(%rbp)
+ 18745      F2FFFF
+ 18746 10d22 89B554F2 		movl	%esi, -3500(%rbp)
+ 18746      FFFF
+2272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     unsigned ix = 0;
+ 18747              		.loc 2 2272 0
+ 18748 10d28 C785ECF3 		movl	$0, -3092(%rbp)
+ 18748      FFFF0000 
+ 18748      0000
+2273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(EqInvFirstRound) (state, key[ix++]);
+ 18749              		.loc 2 2274 0
+ 18750 10d32 8B85ECF3 		mov	-3092(%rbp), %eax
+ 18750      FFFF
+ 18751 10d38 48C1E004 		salq	$4, %rax
+ 18752 10d3c 48038558 		addq	-3496(%rbp), %rax
+ 18752      F2FFFF
+ 18753 10d43 660F6F00 		movdqa	(%rax), %xmm0
+ 18754 10d47 8385ECF3 		addl	$1, -3092(%rbp)
+ 18754      FFFF01
+ 18755 10d4e 660F6F8D 		movdqa	-3488(%rbp), %xmm1
+ 18755      60F2FFFF 
+ 18756 10d56 F30F7F8D 		movdqu	%xmm1, -3072(%rbp)
+ 18756      00F4FFFF 
+ 18757 10d5e F30F7F85 		movdqu	%xmm0, -3088(%rbp)
+ 18757      F0F3FFFF 
+ 18758              	.LBB4551:
+ 18759              	.LBB4552:
+ 18760              	.LBB4553:
+2133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+ 18761              		.loc 2 2133 0
+ 18762 10d66 F30F6F85 		movdqu	-3072(%rbp), %xmm0
+ 18762      00F4FFFF 
+ 18763 10d6e F30F7F85 		movdqu	%xmm0, -3440(%rbp)
+ 18763      90F2FFFF 
+ 18764              		.cfi_offset 3, -40
+ 18765              		.cfi_offset 12, -32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 568
+
+
+ 18766              		.cfi_offset 13, -24
+ 18767 10d76 E8000000 		call	KDbgWriterGet at PLT
+ 18767      00
+ 18768 10d7b 4885C0   		testq	%rax, %rax
+ 18769 10d7e 7479     		je	.L315
+ 18770 10d80 BF030000 		movl	$3, %edi
+ 18770      00
+ 18771 10d85 E8000000 		call	KDbgCondToFlag at PLT
+ 18771      00
+ 18772 10d8a 4889C6   		movq	%rax, %rsi
+ 18773 10d8d BF100000 		movl	$16, %edi
+ 18773      00
+ 18774 10d92 E8000000 		call	KDbgTestModConds at PLT
+ 18774      00
+ 18775 10d97 84C0     		testb	%al, %al
+ 18776 10d99 745E     		je	.L315
+ 18777 10d9b 8B859CF2 		movl	-3428(%rbp), %eax
+ 18777      FFFF
+ 18778 10da1 89C7     		movl	%eax, %edi
+ 18779 10da3 E858F2FE 		call	bswap_32
+ 18779      FF
+ 18780 10da8 4189C5   		movl	%eax, %r13d
+ 18781 10dab 8B8598F2 		movl	-3432(%rbp), %eax
+ 18781      FFFF
+ 18782 10db1 89C7     		movl	%eax, %edi
+ 18783 10db3 E848F2FE 		call	bswap_32
+ 18783      FF
+ 18784 10db8 4189C4   		movl	%eax, %r12d
+ 18785 10dbb 8B8594F2 		movl	-3436(%rbp), %eax
+ 18785      FFFF
+ 18786 10dc1 89C7     		movl	%eax, %edi
+ 18787 10dc3 E838F2FE 		call	bswap_32
+ 18787      FF
+ 18788 10dc8 89C3     		movl	%eax, %ebx
+ 18789 10dca 8B8590F2 		movl	-3440(%rbp), %eax
+ 18789      FFFF
+ 18790 10dd0 89C7     		movl	%eax, %edi
+ 18791 10dd2 E829F2FE 		call	bswap_32
+ 18791      FF
+ 18792 10dd7 4589E9   		movl	%r13d, %r9d
+ 18793 10dda 4589E0   		movl	%r12d, %r8d
+ 18794 10ddd 89D9     		movl	%ebx, %ecx
+ 18795 10ddf 89C2     		movl	%eax, %edx
+ 18796 10de1 488D3500 		leaq	.LC8(%rip), %rsi
+ 18796      000000
+ 18797 10de8 488D3D00 		leaq	.LC1(%rip), %rdi
+ 18797      000000
+ 18798 10def B8000000 		movl	$0, %eax
+ 18798      00
+ 18799 10df4 E8000000 		call	KDbgMsg at PLT
+ 18799      00
+ 18800              	.L315:
+ 18801 10df9 F30F6F85 		movdqu	-3072(%rbp), %xmm0
+ 18801      00F4FFFF 
+ 18802 10e01 F30F7F85 		movdqu	%xmm0, -3040(%rbp)
+ 18802      20F4FFFF 
+ 18803 10e09 F30F6F85 		movdqu	-3088(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 569
+
+
+ 18803      F0F3FFFF 
+ 18804 10e11 F30F7F85 		movdqu	%xmm0, -3056(%rbp)
+ 18804      10F4FFFF 
+ 18805 10e19 F30F6F85 		movdqu	-3040(%rbp), %xmm0
+ 18805      20F4FFFF 
+ 18806 10e21 F30F7F85 		movdqu	%xmm0, -3008(%rbp)
+ 18806      40F4FFFF 
+ 18807 10e29 F30F6F85 		movdqu	-3056(%rbp), %xmm0
+ 18807      10F4FFFF 
+ 18808 10e31 F30F7F85 		movdqu	%xmm0, -3024(%rbp)
+ 18808      30F4FFFF 
+ 18809              	.LBE4553:
+ 18810              	.LBB4554:
+ 18811              	.LBB4555:
+ 18812              	.LBB4556:
+ 18813              	.LBB4557:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 18814              		.loc 2 178 0
+ 18815 10e39 F30F6F85 		movdqu	-3024(%rbp), %xmm0
+ 18815      30F4FFFF 
+ 18816 10e41 F30F6F8D 		movdqu	-3008(%rbp), %xmm1
+ 18816      40F4FFFF 
+ 18817 10e49 660FEFC1 		pxor	%xmm1, %xmm0
+ 18818              	.LBE4557:
+ 18819              	.LBE4556:
+ 18820              	.LBE4555:
+ 18821              	.LBE4554:
+2135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state =  AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 18822              		.loc 2 2135 0
+ 18823 10e4d F30F7F85 		movdqu	%xmm0, -3072(%rbp)
+ 18823      00F4FFFF 
+ 18824              	.LBB4558:
+2137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+ 18825              		.loc 2 2137 0
+ 18826 10e55 F30F6F85 		movdqu	-3088(%rbp), %xmm0
+ 18826      F0F3FFFF 
+ 18827 10e5d F30F7F85 		movdqu	%xmm0, -3456(%rbp)
+ 18827      80F2FFFF 
+ 18828 10e65 E8000000 		call	KDbgWriterGet at PLT
+ 18828      00
+ 18829 10e6a 4885C0   		testq	%rax, %rax
+ 18830 10e6d 7479     		je	.L317
+ 18831 10e6f BF030000 		movl	$3, %edi
+ 18831      00
+ 18832 10e74 E8000000 		call	KDbgCondToFlag at PLT
+ 18832      00
+ 18833 10e79 4889C6   		movq	%rax, %rsi
+ 18834 10e7c BF100000 		movl	$16, %edi
+ 18834      00
+ 18835 10e81 E8000000 		call	KDbgTestModConds at PLT
+ 18835      00
+ 18836 10e86 84C0     		testb	%al, %al
+ 18837 10e88 745E     		je	.L317
+ 18838 10e8a 8B858CF2 		movl	-3444(%rbp), %eax
+ 18838      FFFF
+ 18839 10e90 89C7     		movl	%eax, %edi
+ 18840 10e92 E869F1FE 		call	bswap_32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 570
+
+
+ 18840      FF
+ 18841 10e97 4189C5   		movl	%eax, %r13d
+ 18842 10e9a 8B8588F2 		movl	-3448(%rbp), %eax
+ 18842      FFFF
+ 18843 10ea0 89C7     		movl	%eax, %edi
+ 18844 10ea2 E859F1FE 		call	bswap_32
+ 18844      FF
+ 18845 10ea7 4189C4   		movl	%eax, %r12d
+ 18846 10eaa 8B8584F2 		movl	-3452(%rbp), %eax
+ 18846      FFFF
+ 18847 10eb0 89C7     		movl	%eax, %edi
+ 18848 10eb2 E849F1FE 		call	bswap_32
+ 18848      FF
+ 18849 10eb7 89C3     		movl	%eax, %ebx
+ 18850 10eb9 8B8580F2 		movl	-3456(%rbp), %eax
+ 18850      FFFF
+ 18851 10ebf 89C7     		movl	%eax, %edi
+ 18852 10ec1 E83AF1FE 		call	bswap_32
+ 18852      FF
+ 18853 10ec6 4589E9   		movl	%r13d, %r9d
+ 18854 10ec9 4589E0   		movl	%r12d, %r8d
+ 18855 10ecc 89D9     		movl	%ebx, %ecx
+ 18856 10ece 89C2     		movl	%eax, %edx
+ 18857 10ed0 488D3500 		leaq	.LC9(%rip), %rsi
+ 18857      000000
+ 18858 10ed7 488D3D00 		leaq	.LC1(%rip), %rdi
+ 18858      000000
+ 18859 10ede B8000000 		movl	$0, %eax
+ 18859      00
+ 18860 10ee3 E8000000 		call	KDbgMsg at PLT
+ 18860      00
+ 18861              	.L317:
+ 18862              	.LBE4558:
+ 18863              	.LBB4559:
+2138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("End of Round", state);
+ 18864              		.loc 2 2138 0
+ 18865 10ee8 F30F6F85 		movdqu	-3072(%rbp), %xmm0
+ 18865      00F4FFFF 
+ 18866 10ef0 F30F7F85 		movdqu	%xmm0, -3472(%rbp)
+ 18866      70F2FFFF 
+ 18867 10ef8 E8000000 		call	KDbgWriterGet at PLT
+ 18867      00
+ 18868 10efd 4885C0   		testq	%rax, %rax
+ 18869 10f00 7479     		je	.L319
+ 18870 10f02 BF030000 		movl	$3, %edi
+ 18870      00
+ 18871 10f07 E8000000 		call	KDbgCondToFlag at PLT
+ 18871      00
+ 18872 10f0c 4889C6   		movq	%rax, %rsi
+ 18873 10f0f BF100000 		movl	$16, %edi
+ 18873      00
+ 18874 10f14 E8000000 		call	KDbgTestModConds at PLT
+ 18874      00
+ 18875 10f19 84C0     		testb	%al, %al
+ 18876 10f1b 745E     		je	.L319
+ 18877 10f1d 8B857CF2 		movl	-3460(%rbp), %eax
+ 18877      FFFF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 571
+
+
+ 18878 10f23 89C7     		movl	%eax, %edi
+ 18879 10f25 E8D6F0FE 		call	bswap_32
+ 18879      FF
+ 18880 10f2a 4189C5   		movl	%eax, %r13d
+ 18881 10f2d 8B8578F2 		movl	-3464(%rbp), %eax
+ 18881      FFFF
+ 18882 10f33 89C7     		movl	%eax, %edi
+ 18883 10f35 E8C6F0FE 		call	bswap_32
+ 18883      FF
+ 18884 10f3a 4189C4   		movl	%eax, %r12d
+ 18885 10f3d 8B8574F2 		movl	-3468(%rbp), %eax
+ 18885      FFFF
+ 18886 10f43 89C7     		movl	%eax, %edi
+ 18887 10f45 E8B6F0FE 		call	bswap_32
+ 18887      FF
+ 18888 10f4a 89C3     		movl	%eax, %ebx
+ 18889 10f4c 8B8570F2 		movl	-3472(%rbp), %eax
+ 18889      FFFF
+ 18890 10f52 89C7     		movl	%eax, %edi
+ 18891 10f54 E8A7F0FE 		call	bswap_32
+ 18891      FF
+ 18892 10f59 4589E9   		movl	%r13d, %r9d
+ 18893 10f5c 4589E0   		movl	%r12d, %r8d
+ 18894 10f5f 89D9     		movl	%ebx, %ecx
+ 18895 10f61 89C2     		movl	%eax, %edx
+ 18896 10f63 488D3500 		leaq	.LC14(%rip), %rsi
+ 18896      000000
+ 18897 10f6a 488D3D00 		leaq	.LC1(%rip), %rdi
+ 18897      000000
+ 18898 10f71 B8000000 		movl	$0, %eax
+ 18898      00
+ 18899 10f76 E8000000 		call	KDbgMsg at PLT
+ 18899      00
+ 18900              	.L319:
+ 18901              	.LBE4559:
+2139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 18902              		.loc 2 2139 0
+ 18903 10f7b F30F6F85 		movdqu	-3072(%rbp), %xmm0
+ 18903      00F4FFFF 
+ 18904              	.LBE4552:
+ 18905              	.LBE4551:
+ 18906              		.loc 2 2274 0
+ 18907 10f83 660F7F85 		movdqa	%xmm0, -3488(%rbp)
+ 18907      60F2FFFF 
+2275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for ( ; ix < Nr; ++ix)
+ 18908              		.loc 2 2276 0
+ 18909 10f8b E99B1600 		jmp	.L320
+ 18909      00
+ 18910              	.L353:
+2277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(EqInvMiddleRound) (state, key[ix] );
+ 18911              		.loc 2 2277 0
+ 18912 10f90 8B85ECF3 		mov	-3092(%rbp), %eax
+ 18912      FFFF
+ 18913 10f96 48C1E004 		salq	$4, %rax
+ 18914 10f9a 48038558 		addq	-3496(%rbp), %rax
+ 18914      F2FFFF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 572
+
+
+ 18915 10fa1 660F6F00 		movdqa	(%rax), %xmm0
+ 18916 10fa5 660F6F8D 		movdqa	-3488(%rbp), %xmm1
+ 18916      60F2FFFF 
+ 18917 10fad F30F7F8D 		movdqu	%xmm1, -2976(%rbp)
+ 18917      60F4FFFF 
+ 18918 10fb5 F30F7F85 		movdqu	%xmm0, -2992(%rbp)
+ 18918      50F4FFFF 
+ 18919              	.LBB4560:
+ 18920              	.LBB4561:
+2167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+ 18921              		.loc 2 2167 0
+ 18922 10fbd F30F6F85 		movdqu	-2976(%rbp), %xmm0
+ 18922      60F4FFFF 
+ 18923 10fc5 F30F7F85 		movdqu	%xmm0, -2944(%rbp)
+ 18923      80F4FFFF 
+2168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mround_keys = round_keys;
+ 18924              		.loc 2 2168 0
+ 18925 10fcd F30F6F85 		movdqu	-2992(%rbp), %xmm0
+ 18925      50F4FFFF 
+ 18926 10fd5 F30F7F85 		movdqu	%xmm0, -2960(%rbp)
+ 18926      70F4FFFF 
+ 18927              	.LBB4562:
+2171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Start of Round", mstate);
+ 18928              		.loc 2 2171 0
+ 18929 10fdd F30F6F85 		movdqu	-2944(%rbp), %xmm0
+ 18929      80F4FFFF 
+ 18930 10fe5 F30F7F85 		movdqu	%xmm0, -3344(%rbp)
+ 18930      F0F2FFFF 
+ 18931 10fed E8000000 		call	KDbgWriterGet at PLT
+ 18931      00
+ 18932 10ff2 4885C0   		testq	%rax, %rax
+ 18933 10ff5 7479     		je	.L322
+ 18934 10ff7 BF030000 		movl	$3, %edi
+ 18934      00
+ 18935 10ffc E8000000 		call	KDbgCondToFlag at PLT
+ 18935      00
+ 18936 11001 4889C6   		movq	%rax, %rsi
+ 18937 11004 BF100000 		movl	$16, %edi
+ 18937      00
+ 18938 11009 E8000000 		call	KDbgTestModConds at PLT
+ 18938      00
+ 18939 1100e 84C0     		testb	%al, %al
+ 18940 11010 745E     		je	.L322
+ 18941 11012 8B85FCF2 		movl	-3332(%rbp), %eax
+ 18941      FFFF
+ 18942 11018 89C7     		movl	%eax, %edi
+ 18943 1101a E8E1EFFE 		call	bswap_32
+ 18943      FF
+ 18944 1101f 4189C5   		movl	%eax, %r13d
+ 18945 11022 8B85F8F2 		movl	-3336(%rbp), %eax
+ 18945      FFFF
+ 18946 11028 89C7     		movl	%eax, %edi
+ 18947 1102a E8D1EFFE 		call	bswap_32
+ 18947      FF
+ 18948 1102f 4189C4   		movl	%eax, %r12d
+ 18949 11032 8B85F4F2 		movl	-3340(%rbp), %eax
+ 18949      FFFF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 573
+
+
+ 18950 11038 89C7     		movl	%eax, %edi
+ 18951 1103a E8C1EFFE 		call	bswap_32
+ 18951      FF
+ 18952 1103f 89C3     		movl	%eax, %ebx
+ 18953 11041 8B85F0F2 		movl	-3344(%rbp), %eax
+ 18953      FFFF
+ 18954 11047 89C7     		movl	%eax, %edi
+ 18955 11049 E8B2EFFE 		call	bswap_32
+ 18955      FF
+ 18956 1104e 4589E9   		movl	%r13d, %r9d
+ 18957 11051 4589E0   		movl	%r12d, %r8d
+ 18958 11054 89D9     		movl	%ebx, %ecx
+ 18959 11056 89C2     		movl	%eax, %edx
+ 18960 11058 488D3500 		leaq	.LC8(%rip), %rsi
+ 18960      000000
+ 18961 1105f 488D3D00 		leaq	.LC1(%rip), %rdi
+ 18961      000000
+ 18962 11066 B8000000 		movl	$0, %eax
+ 18962      00
+ 18963 1106b E8000000 		call	KDbgMsg at PLT
+ 18963      00
+ 18964              	.L322:
+ 18965 11070 F30F6F85 		movdqu	-2976(%rbp), %xmm0
+ 18965      60F4FFFF 
+ 18966 11078 F30F7F85 		movdqu	%xmm0, -2928(%rbp)
+ 18966      90F4FFFF 
+ 18967 11080 F30F6F85 		movdqu	-2928(%rbp), %xmm0
+ 18967      90F4FFFF 
+ 18968 11088 F30F7F85 		movdqu	%xmm0, -2896(%rbp)
+ 18968      B0F4FFFF 
+ 18969 11090 488D0500 		leaq	KAESBlockCipherVecRegRijndaelInvSBoxV(%rip), %rax
+ 18969      000000
+ 18970 11097 488985A8 		movq	%rax, -2904(%rbp)
+ 18970      F4FFFF
+ 18971              	.LBE4562:
+ 18972              	.LBB4563:
+ 18973              	.LBB4564:
+ 18974              	.LBB4565:
+ 18975              	.LBB4566:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 18976              		.loc 2 851 0
+ 18977 1109e 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 18977      00000000 
+ 18978 110a6 F30F7F85 		movdqu	%xmm0, -2864(%rbp)
+ 18978      D0F4FFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 18979              		.loc 2 854 0
+ 18980 110ae 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 18980      00000000 
+ 18981 110b6 F30F6F8D 		movdqu	-2896(%rbp), %xmm1
+ 18981      B0F4FFFF 
+ 18982 110be F30F7F8D 		movdqu	%xmm1, -2784(%rbp)
+ 18982      20F5FFFF 
+ 18983 110c6 F30F7F85 		movdqu	%xmm0, -2800(%rbp)
+ 18983      10F5FFFF 
+ 18984              	.LBB4567:
+ 18985              	.LBB4568:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 574
+
+
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 18986              		.loc 2 206 0
+ 18987 110ce F30F6F85 		movdqu	-2800(%rbp), %xmm0
+ 18987      10F5FFFF 
+ 18988 110d6 F30F6F8D 		movdqu	-2784(%rbp), %xmm1
+ 18988      20F5FFFF 
+ 18989 110de 660FDBC1 		pand	%xmm1, %xmm0
+ 18990              	.LBE4568:
+ 18991              	.LBE4567:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 18992              		.loc 2 854 0
+ 18993 110e2 F30F7F85 		movdqu	%xmm0, -2816(%rbp)
+ 18993      00F5FFFF 
+ 18994 110ea F30F6F85 		movdqu	-2896(%rbp), %xmm0
+ 18994      B0F4FFFF 
+ 18995 110f2 F30F7F85 		movdqu	%xmm0, -2752(%rbp)
+ 18995      40F5FFFF 
+ 18996              	.LBB4569:
+ 18997              	.LBB4570:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 18998              		.loc 3 433 0
+ 18999 110fa F30F6F85 		movdqu	-2752(%rbp), %xmm0
+ 18999      40F5FFFF 
+ 19000 11102 660F72D0 		psrld	$4, %xmm0
+ 19000      04
+ 19001              	.LBE4570:
+ 19002              	.LBE4569:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 19003              		.loc 2 857 0
+ 19004 11107 F30F7F85 		movdqu	%xmm0, -2832(%rbp)
+ 19004      F0F4FFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 19005              		.loc 2 859 0
+ 19006 1110f 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 19006      00000000 
+ 19007 11117 F30F6F8D 		movdqu	-2832(%rbp), %xmm1
+ 19007      F0F4FFFF 
+ 19008 1111f F30F7F8D 		movdqu	%xmm1, -2720(%rbp)
+ 19008      60F5FFFF 
+ 19009 11127 F30F7F85 		movdqu	%xmm0, -2736(%rbp)
+ 19009      50F5FFFF 
+ 19010              	.LBB4571:
+ 19011              	.LBB4572:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 19012              		.loc 2 206 0
+ 19013 1112f F30F6F85 		movdqu	-2736(%rbp), %xmm0
+ 19013      50F5FFFF 
+ 19014 11137 F30F6F8D 		movdqu	-2720(%rbp), %xmm1
+ 19014      60F5FFFF 
+ 19015 1113f 660FDBC1 		pand	%xmm1, %xmm0
+ 19016              	.LBE4572:
+ 19017              	.LBE4571:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 19018              		.loc 2 859 0
+ 19019 11143 F30F7F85 		movdqu	%xmm0, -2832(%rbp)
+ 19019      F0F4FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 575
+
+
+ 19020              		.loc 2 866 0
+ 19021 1114b C785CCF4 		movl	$0, -2868(%rbp)
+ 19021      FFFF0000 
+ 19021      0000
+ 19022 11155 E9BE0100 		jmp	.L323
+ 19022      00
+ 19023              	.L324:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 19024              		.loc 2 868 0
+ 19025 1115a 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 19025      00000000 
+ 19026 11162 F30F7F85 		movdqu	%xmm0, -2688(%rbp)
+ 19026      80F5FFFF 
+ 19027 1116a F30F6F85 		movdqu	-2832(%rbp), %xmm0
+ 19027      F0F4FFFF 
+ 19028 11172 F30F7F85 		movdqu	%xmm0, -2704(%rbp)
+ 19028      70F5FFFF 
+ 19029 1117a F30F6F85 		movdqu	-2688(%rbp), %xmm0
+ 19029      80F5FFFF 
+ 19030 11182 F30F7F85 		movdqu	%xmm0, -2656(%rbp)
+ 19030      A0F5FFFF 
+ 19031 1118a F30F6F85 		movdqu	-2704(%rbp), %xmm0
+ 19031      70F5FFFF 
+ 19032 11192 F30F7F85 		movdqu	%xmm0, -2672(%rbp)
+ 19032      90F5FFFF 
+ 19033              	.LBB4573:
+ 19034              	.LBB4574:
+ 19035              	.LBB4575:
+ 19036              	.LBB4576:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 19037              		.loc 3 529 0
+ 19038 1119a F30F6F8D 		movdqu	-2672(%rbp), %xmm1
+ 19038      90F5FFFF 
+ 19039 111a2 F30F6F85 		movdqu	-2656(%rbp), %xmm0
+ 19039      A0F5FFFF 
+ 19040 111aa 660F3800 		pshufb	%xmm1, %xmm0
+ 19040      C1
+ 19041              	.LBE4576:
+ 19042              	.LBE4575:
+ 19043              	.LBE4574:
+ 19044              	.LBE4573:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 19045              		.loc 2 868 0
+ 19046 111af F30F7F85 		movdqu	%xmm0, -2848(%rbp)
+ 19046      E0F4FFFF 
+ 19047 111b7 F30F6F85 		movdqu	-2816(%rbp), %xmm0
+ 19047      00F5FFFF 
+ 19048 111bf F30F7F85 		movdqu	%xmm0, -2624(%rbp)
+ 19048      C0F5FFFF 
+ 19049 111c7 F30F6F85 		movdqu	-2848(%rbp), %xmm0
+ 19049      E0F4FFFF 
+ 19050 111cf F30F7F85 		movdqu	%xmm0, -2640(%rbp)
+ 19050      B0F5FFFF 
+ 19051              	.LBB4577:
+ 19052              	.LBB4578:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 19053              		.loc 2 234 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 576
+
+
+ 19054 111d7 F30F6F85 		movdqu	-2640(%rbp), %xmm0
+ 19054      B0F5FFFF 
+ 19055 111df F30F6F8D 		movdqu	-2624(%rbp), %xmm1
+ 19055      C0F5FFFF 
+ 19056 111e7 660FEBC1 		por	%xmm1, %xmm0
+ 19057              	.LBE4578:
+ 19058              	.LBE4577:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 19059              		.loc 2 870 0
+ 19060 111eb F30F7F85 		movdqu	%xmm0, -2848(%rbp)
+ 19060      E0F4FFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 19061              		.loc 2 872 0
+ 19062 111f3 8B85CCF4 		mov	-2868(%rbp), %eax
+ 19062      FFFF
+ 19063 111f9 48C1E004 		salq	$4, %rax
+ 19064 111fd 480385A8 		addq	-2904(%rbp), %rax
+ 19064      F4FFFF
+ 19065 11204 660F6F00 		movdqa	(%rax), %xmm0
+ 19066 11208 F30F7F85 		movdqu	%xmm0, -2592(%rbp)
+ 19066      E0F5FFFF 
+ 19067 11210 F30F6F85 		movdqu	-2848(%rbp), %xmm0
+ 19067      E0F4FFFF 
+ 19068 11218 F30F7F85 		movdqu	%xmm0, -2608(%rbp)
+ 19068      D0F5FFFF 
+ 19069 11220 F30F6F85 		movdqu	-2592(%rbp), %xmm0
+ 19069      E0F5FFFF 
+ 19070 11228 F30F7F85 		movdqu	%xmm0, -2560(%rbp)
+ 19070      00F6FFFF 
+ 19071 11230 F30F6F85 		movdqu	-2608(%rbp), %xmm0
+ 19071      D0F5FFFF 
+ 19072 11238 F30F7F85 		movdqu	%xmm0, -2576(%rbp)
+ 19072      F0F5FFFF 
+ 19073              	.LBB4579:
+ 19074              	.LBB4580:
+ 19075              	.LBB4581:
+ 19076              	.LBB4582:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 19077              		.loc 3 529 0
+ 19078 11240 F30F6F8D 		movdqu	-2576(%rbp), %xmm1
+ 19078      F0F5FFFF 
+ 19079 11248 F30F6F85 		movdqu	-2560(%rbp), %xmm0
+ 19079      00F6FFFF 
+ 19080 11250 660F3800 		pshufb	%xmm1, %xmm0
+ 19080      C1
+ 19081              	.LBE4582:
+ 19082              	.LBE4581:
+ 19083              	.LBE4580:
+ 19084              	.LBE4579:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 19085              		.loc 2 872 0
+ 19086 11255 F30F7F85 		movdqu	%xmm0, -2848(%rbp)
+ 19086      E0F4FFFF 
+ 19087 1125d F30F6F85 		movdqu	-2864(%rbp), %xmm0
+ 19087      D0F4FFFF 
+ 19088 11265 F30F7F85 		movdqu	%xmm0, -2528(%rbp)
+ 19088      20F6FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 577
+
+
+ 19089 1126d F30F6F85 		movdqu	-2848(%rbp), %xmm0
+ 19089      E0F4FFFF 
+ 19090 11275 F30F7F85 		movdqu	%xmm0, -2544(%rbp)
+ 19090      10F6FFFF 
+ 19091              	.LBB4583:
+ 19092              	.LBB4584:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 19093              		.loc 2 234 0
+ 19094 1127d F30F6F85 		movdqu	-2544(%rbp), %xmm0
+ 19094      10F6FFFF 
+ 19095 11285 F30F6F8D 		movdqu	-2528(%rbp), %xmm1
+ 19095      20F6FFFF 
+ 19096 1128d 660FEBC1 		por	%xmm1, %xmm0
+ 19097              	.LBE4584:
+ 19098              	.LBE4583:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 19099              		.loc 2 874 0
+ 19100 11291 F30F7F85 		movdqu	%xmm0, -2864(%rbp)
+ 19100      D0F4FFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 19101              		.loc 2 876 0
+ 19102 11299 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 19102      00000000 
+ 19103 112a1 F30F6F8D 		movdqu	-2832(%rbp), %xmm1
+ 19103      F0F4FFFF 
+ 19104 112a9 F30F7F8D 		movdqu	%xmm1, -2496(%rbp)
+ 19104      40F6FFFF 
+ 19105 112b1 F30F7F85 		movdqu	%xmm0, -2512(%rbp)
+ 19105      30F6FFFF 
+ 19106              	.LBB4585:
+ 19107              	.LBB4586:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 19108              		.loc 2 290 0
+ 19109 112b9 F30F6F8D 		movdqu	-2512(%rbp), %xmm1
+ 19109      30F6FFFF 
+ 19110 112c1 F30F6F85 		movdqu	-2496(%rbp), %xmm0
+ 19110      40F6FFFF 
+ 19111 112c9 660FF8C1 		psubb	%xmm1, %xmm0
+ 19112              	.LBE4586:
+ 19113              	.LBE4585:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 19114              		.loc 2 876 0
+ 19115 112cd F30F7F85 		movdqu	%xmm0, -2832(%rbp)
+ 19115      F0F4FFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 19116              		.loc 2 878 0
+ 19117 112d5 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 19117      00000000 
+ 19118 112dd F30F6F8D 		movdqu	-2832(%rbp), %xmm1
+ 19118      F0F4FFFF 
+ 19119 112e5 F30F7F8D 		movdqu	%xmm1, -2464(%rbp)
+ 19119      60F6FFFF 
+ 19120 112ed F30F7F85 		movdqu	%xmm0, -2480(%rbp)
+ 19120      50F6FFFF 
+ 19121              	.LBB4587:
+ 19122              	.LBB4588:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+
GAS LISTING /tmp/ccjbMjHD.s 			page 578
+
+
+ 19123              		.loc 2 206 0
+ 19124 112f5 F30F6F85 		movdqu	-2480(%rbp), %xmm0
+ 19124      50F6FFFF 
+ 19125 112fd F30F6F8D 		movdqu	-2464(%rbp), %xmm1
+ 19125      60F6FFFF 
+ 19126 11305 660FDBC1 		pand	%xmm1, %xmm0
+ 19127              	.LBE4588:
+ 19128              	.LBE4587:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 19129              		.loc 2 878 0
+ 19130 11309 F30F7F85 		movdqu	%xmm0, -2832(%rbp)
+ 19130      F0F4FFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 19131              		.loc 2 866 0
+ 19132 11311 8385CCF4 		addl	$1, -2868(%rbp)
+ 19132      FFFF01
+ 19133              	.L323:
+ 19134 11318 83BDCCF4 		cmpl	$15, -2868(%rbp)
+ 19134      FFFF0F
+ 19135 1131f 0F8635FE 		jbe	.L324
+ 19135      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 19136              		.loc 2 882 0
+ 19137 11325 F30F6F85 		movdqu	-2864(%rbp), %xmm0
+ 19137      D0F4FFFF 
+ 19138              	.LBE4566:
+ 19139              	.LBE4565:
+ 19140              	.LBE4564:
+ 19141              	.LBE4563:
+2185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvSubBytes) (state);
+ 19142              		.loc 2 2185 0
+ 19143 1132d F30F7F85 		movdqu	%xmm0, -2976(%rbp)
+ 19143      60F4FFFF 
+2188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+ 19144              		.loc 2 2188 0
+ 19145 11335 F30F6F85 		movdqu	-2976(%rbp), %xmm0
+ 19145      60F4FFFF 
+ 19146 1133d F30F7F85 		movdqu	%xmm0, -2944(%rbp)
+ 19146      80F4FFFF 
+ 19147              	.LBB4589:
+2190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvSubBy", mstate);
+ 19148              		.loc 2 2190 0
+ 19149 11345 F30F6F85 		movdqu	-2944(%rbp), %xmm0
+ 19149      80F4FFFF 
+ 19150 1134d F30F7F85 		movdqu	%xmm0, -3360(%rbp)
+ 19150      E0F2FFFF 
+ 19151 11355 E8000000 		call	KDbgWriterGet at PLT
+ 19151      00
+ 19152 1135a 4885C0   		testq	%rax, %rax
+ 19153 1135d 7479     		je	.L326
+ 19154 1135f BF030000 		movl	$3, %edi
+ 19154      00
+ 19155 11364 E8000000 		call	KDbgCondToFlag at PLT
+ 19155      00
+ 19156 11369 4889C6   		movq	%rax, %rsi
+ 19157 1136c BF100000 		movl	$16, %edi
+ 19157      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 579
+
+
+ 19158 11371 E8000000 		call	KDbgTestModConds at PLT
+ 19158      00
+ 19159 11376 84C0     		testb	%al, %al
+ 19160 11378 745E     		je	.L326
+ 19161 1137a 8B85ECF2 		movl	-3348(%rbp), %eax
+ 19161      FFFF
+ 19162 11380 89C7     		movl	%eax, %edi
+ 19163 11382 E879ECFE 		call	bswap_32
+ 19163      FF
+ 19164 11387 4189C5   		movl	%eax, %r13d
+ 19165 1138a 8B85E8F2 		movl	-3352(%rbp), %eax
+ 19165      FFFF
+ 19166 11390 89C7     		movl	%eax, %edi
+ 19167 11392 E869ECFE 		call	bswap_32
+ 19167      FF
+ 19168 11397 4189C4   		movl	%eax, %r12d
+ 19169 1139a 8B85E4F2 		movl	-3356(%rbp), %eax
+ 19169      FFFF
+ 19170 113a0 89C7     		movl	%eax, %edi
+ 19171 113a2 E859ECFE 		call	bswap_32
+ 19171      FF
+ 19172 113a7 89C3     		movl	%eax, %ebx
+ 19173 113a9 8B85E0F2 		movl	-3360(%rbp), %eax
+ 19173      FFFF
+ 19174 113af 89C7     		movl	%eax, %edi
+ 19175 113b1 E84AECFE 		call	bswap_32
+ 19175      FF
+ 19176 113b6 4589E9   		movl	%r13d, %r9d
+ 19177 113b9 4589E0   		movl	%r12d, %r8d
+ 19178 113bc 89D9     		movl	%ebx, %ecx
+ 19179 113be 89C2     		movl	%eax, %edx
+ 19180 113c0 488D3500 		leaq	.LC15(%rip), %rsi
+ 19180      000000
+ 19181 113c7 488D3D00 		leaq	.LC1(%rip), %rdi
+ 19181      000000
+ 19182 113ce B8000000 		movl	$0, %eax
+ 19182      00
+ 19183 113d3 E8000000 		call	KDbgMsg at PLT
+ 19183      00
+ 19184              	.L326:
+ 19185 113d8 F30F6F85 		movdqu	-2976(%rbp), %xmm0
+ 19185      60F4FFFF 
+ 19186 113e0 F30F7F85 		movdqu	%xmm0, -2448(%rbp)
+ 19186      70F6FFFF 
+ 19187              	.LBE4589:
+ 19188              	.LBB4590:
+ 19189              	.LBB4591:
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 19190              		.loc 2 612 0
+ 19191 113e8 660F6F05 		movdqa	InvShiftRowTable.7367(%rip), %xmm0
+ 19191      00000000 
+ 19192 113f0 F30F6F8D 		movdqu	-2448(%rbp), %xmm1
+ 19192      70F6FFFF 
+ 19193 113f8 F30F7F8D 		movdqu	%xmm1, -2416(%rbp)
+ 19193      90F6FFFF 
+ 19194 11400 F30F7F85 		movdqu	%xmm0, -2432(%rbp)
+ 19194      80F6FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 580
+
+
+ 19195 11408 F30F6F85 		movdqu	-2416(%rbp), %xmm0
+ 19195      90F6FFFF 
+ 19196 11410 F30F7F85 		movdqu	%xmm0, -2384(%rbp)
+ 19196      B0F6FFFF 
+ 19197 11418 F30F6F85 		movdqu	-2432(%rbp), %xmm0
+ 19197      80F6FFFF 
+ 19198 11420 F30F7F85 		movdqu	%xmm0, -2400(%rbp)
+ 19198      A0F6FFFF 
+ 19199              	.LBB4592:
+ 19200              	.LBB4593:
+ 19201              	.LBB4594:
+ 19202              	.LBB4595:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 19203              		.loc 3 529 0
+ 19204 11428 F30F6F8D 		movdqu	-2400(%rbp), %xmm1
+ 19204      A0F6FFFF 
+ 19205 11430 F30F6F85 		movdqu	-2384(%rbp), %xmm0
+ 19205      B0F6FFFF 
+ 19206 11438 660F3800 		pshufb	%xmm1, %xmm0
+ 19206      C1
+ 19207              	.LBE4595:
+ 19208              	.LBE4594:
+ 19209              	.LBE4593:
+ 19210              	.LBE4592:
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 19211              		.loc 2 612 0
+ 19212 1143d F30F7F85 		movdqu	%xmm0, -2448(%rbp)
+ 19212      70F6FFFF 
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 19213              		.loc 2 613 0
+ 19214 11445 F30F6F85 		movdqu	-2448(%rbp), %xmm0
+ 19214      70F6FFFF 
+ 19215              	.LBE4591:
+ 19216              	.LBE4590:
+2193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvShiftRows) (state);
+ 19217              		.loc 2 2193 0
+ 19218 1144d F30F7F85 		movdqu	%xmm0, -2976(%rbp)
+ 19218      60F4FFFF 
+2196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+ 19219              		.loc 2 2196 0
+ 19220 11455 F30F6F85 		movdqu	-2976(%rbp), %xmm0
+ 19220      60F4FFFF 
+ 19221 1145d F30F7F85 		movdqu	%xmm0, -2944(%rbp)
+ 19221      80F4FFFF 
+ 19222              	.LBB4596:
+2198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvShift", mstate);
+ 19223              		.loc 2 2198 0
+ 19224 11465 F30F6F85 		movdqu	-2944(%rbp), %xmm0
+ 19224      80F4FFFF 
+ 19225 1146d F30F7F85 		movdqu	%xmm0, -3376(%rbp)
+ 19225      D0F2FFFF 
+ 19226 11475 E8000000 		call	KDbgWriterGet at PLT
+ 19226      00
+ 19227 1147a 4885C0   		testq	%rax, %rax
+ 19228 1147d 7479     		je	.L328
+ 19229 1147f BF030000 		movl	$3, %edi
+ 19229      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 581
+
+
+ 19230 11484 E8000000 		call	KDbgCondToFlag at PLT
+ 19230      00
+ 19231 11489 4889C6   		movq	%rax, %rsi
+ 19232 1148c BF100000 		movl	$16, %edi
+ 19232      00
+ 19233 11491 E8000000 		call	KDbgTestModConds at PLT
+ 19233      00
+ 19234 11496 84C0     		testb	%al, %al
+ 19235 11498 745E     		je	.L328
+ 19236 1149a 8B85DCF2 		movl	-3364(%rbp), %eax
+ 19236      FFFF
+ 19237 114a0 89C7     		movl	%eax, %edi
+ 19238 114a2 E859EBFE 		call	bswap_32
+ 19238      FF
+ 19239 114a7 4189C5   		movl	%eax, %r13d
+ 19240 114aa 8B85D8F2 		movl	-3368(%rbp), %eax
+ 19240      FFFF
+ 19241 114b0 89C7     		movl	%eax, %edi
+ 19242 114b2 E849EBFE 		call	bswap_32
+ 19242      FF
+ 19243 114b7 4189C4   		movl	%eax, %r12d
+ 19244 114ba 8B85D4F2 		movl	-3372(%rbp), %eax
+ 19244      FFFF
+ 19245 114c0 89C7     		movl	%eax, %edi
+ 19246 114c2 E839EBFE 		call	bswap_32
+ 19246      FF
+ 19247 114c7 89C3     		movl	%eax, %ebx
+ 19248 114c9 8B85D0F2 		movl	-3376(%rbp), %eax
+ 19248      FFFF
+ 19249 114cf 89C7     		movl	%eax, %edi
+ 19250 114d1 E82AEBFE 		call	bswap_32
+ 19250      FF
+ 19251 114d6 4589E9   		movl	%r13d, %r9d
+ 19252 114d9 4589E0   		movl	%r12d, %r8d
+ 19253 114dc 89D9     		movl	%ebx, %ecx
+ 19254 114de 89C2     		movl	%eax, %edx
+ 19255 114e0 488D3500 		leaq	.LC16(%rip), %rsi
+ 19255      000000
+ 19256 114e7 488D3D00 		leaq	.LC1(%rip), %rdi
+ 19256      000000
+ 19257 114ee B8000000 		movl	$0, %eax
+ 19257      00
+ 19258 114f3 E8000000 		call	KDbgMsg at PLT
+ 19258      00
+ 19259              	.L328:
+ 19260 114f8 F30F6F85 		movdqu	-2976(%rbp), %xmm0
+ 19260      60F4FFFF 
+ 19261 11500 F30F7F85 		movdqu	%xmm0, -2368(%rbp)
+ 19261      C0F6FFFF 
+ 19262 11508 F30F6F85 		movdqu	-2368(%rbp), %xmm0
+ 19262      C0F6FFFF 
+ 19263 11510 F30F7F85 		movdqu	%xmm0, -2352(%rbp)
+ 19263      D0F6FFFF 
+ 19264              	.LBE4596:
+ 19265              	.LBB4597:
+ 19266              	.LBB4598:
+ 19267              	.LBB4599:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 582
+
+
+ 19268              	.LBB4600:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 19269              		.loc 2 667 0
+ 19270 11518 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 19270      00000000 
+ 19271 11520 F30F6F8D 		movdqu	-2352(%rbp), %xmm1
+ 19271      D0F6FFFF 
+ 19272 11528 F30F7F8D 		movdqu	%xmm1, -2320(%rbp)
+ 19272      F0F6FFFF 
+ 19273 11530 F30F7F85 		movdqu	%xmm0, -2336(%rbp)
+ 19273      E0F6FFFF 
+ 19274 11538 F30F6F85 		movdqu	-2320(%rbp), %xmm0
+ 19274      F0F6FFFF 
+ 19275 11540 F30F7F85 		movdqu	%xmm0, -2288(%rbp)
+ 19275      10F7FFFF 
+ 19276 11548 F30F6F85 		movdqu	-2336(%rbp), %xmm0
+ 19276      E0F6FFFF 
+ 19277 11550 F30F7F85 		movdqu	%xmm0, -2304(%rbp)
+ 19277      00F7FFFF 
+ 19278              	.LBB4601:
+ 19279              	.LBB4602:
+ 19280              	.LBB4603:
+ 19281              	.LBB4604:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 19282              		.loc 3 529 0
+ 19283 11558 F30F6F8D 		movdqu	-2304(%rbp), %xmm1
+ 19283      00F7FFFF 
+ 19284 11560 F30F6F85 		movdqu	-2288(%rbp), %xmm0
+ 19284      10F7FFFF 
+ 19285 11568 660F3800 		pshufb	%xmm1, %xmm0
+ 19285      C1
+ 19286              	.LBE4604:
+ 19287              	.LBE4603:
+ 19288              	.LBE4602:
+ 19289              	.LBE4601:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 19290              		.loc 2 667 0
+ 19291 1156d F30F7F85 		movdqu	%xmm0, -2352(%rbp)
+ 19291      D0F6FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 19292              		.loc 2 668 0
+ 19293 11575 F30F6F85 		movdqu	-2352(%rbp), %xmm0
+ 19293      D0F6FFFF 
+ 19294              	.LBE4600:
+ 19295              	.LBE4599:
+1106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r1 = AESBCMEMBER(RotBytesLeft) (state);
+ 19296              		.loc 2 1106 0
+ 19297 1157d 660F7F85 		movdqa	%xmm0, -3520(%rbp)
+ 19297      40F2FFFF 
+ 19298 11585 660F6F85 		movdqa	-3520(%rbp), %xmm0
+ 19298      40F2FFFF 
+ 19299 1158d F30F7F85 		movdqu	%xmm0, -2272(%rbp)
+ 19299      20F7FFFF 
+ 19300              	.LBB4605:
+ 19301              	.LBB4606:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 19302              		.loc 2 667 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 583
+
+
+ 19303 11595 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 19303      00000000 
+ 19304 1159d F30F6F8D 		movdqu	-2272(%rbp), %xmm1
+ 19304      20F7FFFF 
+ 19305 115a5 F30F7F8D 		movdqu	%xmm1, -2240(%rbp)
+ 19305      40F7FFFF 
+ 19306 115ad F30F7F85 		movdqu	%xmm0, -2256(%rbp)
+ 19306      30F7FFFF 
+ 19307 115b5 F30F6F85 		movdqu	-2240(%rbp), %xmm0
+ 19307      40F7FFFF 
+ 19308 115bd F30F7F85 		movdqu	%xmm0, -2208(%rbp)
+ 19308      60F7FFFF 
+ 19309 115c5 F30F6F85 		movdqu	-2256(%rbp), %xmm0
+ 19309      30F7FFFF 
+ 19310 115cd F30F7F85 		movdqu	%xmm0, -2224(%rbp)
+ 19310      50F7FFFF 
+ 19311              	.LBB4607:
+ 19312              	.LBB4608:
+ 19313              	.LBB4609:
+ 19314              	.LBB4610:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 19315              		.loc 3 529 0
+ 19316 115d5 F30F6F8D 		movdqu	-2224(%rbp), %xmm1
+ 19316      50F7FFFF 
+ 19317 115dd F30F6F85 		movdqu	-2208(%rbp), %xmm0
+ 19317      60F7FFFF 
+ 19318 115e5 660F3800 		pshufb	%xmm1, %xmm0
+ 19318      C1
+ 19319              	.LBE4610:
+ 19320              	.LBE4609:
+ 19321              	.LBE4608:
+ 19322              	.LBE4607:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 19323              		.loc 2 667 0
+ 19324 115ea F30F7F85 		movdqu	%xmm0, -2272(%rbp)
+ 19324      20F7FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 19325              		.loc 2 668 0
+ 19326 115f2 F30F6F85 		movdqu	-2272(%rbp), %xmm0
+ 19326      20F7FFFF 
+ 19327              	.LBE4606:
+ 19328              	.LBE4605:
+1107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r2 = AESBCMEMBER(RotBytesLeft) (r1);
+ 19329              		.loc 2 1107 0
+ 19330 115fa 660F7F85 		movdqa	%xmm0, -3536(%rbp)
+ 19330      30F2FFFF 
+ 19331 11602 660F6F8D 		movdqa	-3536(%rbp), %xmm1
+ 19331      30F2FFFF 
+ 19332 1160a F30F7F8D 		movdqu	%xmm1, -2192(%rbp)
+ 19332      70F7FFFF 
+ 19333              	.LBB4611:
+ 19334              	.LBB4612:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 19335              		.loc 2 667 0
+ 19336 11612 660F6F05 		movdqa	ShiftRowTable.7385(%rip), %xmm0
+ 19336      00000000 
+ 19337 1161a F30F6F8D 		movdqu	-2192(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 584
+
+
+ 19337      70F7FFFF 
+ 19338 11622 F30F7F8D 		movdqu	%xmm1, -2160(%rbp)
+ 19338      90F7FFFF 
+ 19339 1162a F30F7F85 		movdqu	%xmm0, -2176(%rbp)
+ 19339      80F7FFFF 
+ 19340 11632 F30F6F85 		movdqu	-2160(%rbp), %xmm0
+ 19340      90F7FFFF 
+ 19341 1163a F30F7F85 		movdqu	%xmm0, -2128(%rbp)
+ 19341      B0F7FFFF 
+ 19342 11642 F30F6F85 		movdqu	-2176(%rbp), %xmm0
+ 19342      80F7FFFF 
+ 19343 1164a F30F7F85 		movdqu	%xmm0, -2144(%rbp)
+ 19343      A0F7FFFF 
+ 19344              	.LBB4613:
+ 19345              	.LBB4614:
+ 19346              	.LBB4615:
+ 19347              	.LBB4616:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 19348              		.loc 3 529 0
+ 19349 11652 F30F6F8D 		movdqu	-2144(%rbp), %xmm1
+ 19349      A0F7FFFF 
+ 19350 1165a F30F6F85 		movdqu	-2128(%rbp), %xmm0
+ 19350      B0F7FFFF 
+ 19351 11662 660F3800 		pshufb	%xmm1, %xmm0
+ 19351      C1
+ 19352              	.LBE4616:
+ 19353              	.LBE4615:
+ 19354              	.LBE4614:
+ 19355              	.LBE4613:
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, ShiftRowTable);
+ 19356              		.loc 2 667 0
+ 19357 11667 F30F7F85 		movdqu	%xmm0, -2192(%rbp)
+ 19357      70F7FFFF 
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 19358              		.loc 2 668 0
+ 19359 1166f F30F6F85 		movdqu	-2192(%rbp), %xmm0
+ 19359      70F7FFFF 
+ 19360              	.LBE4612:
+ 19361              	.LBE4611:
+1108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     r3 = AESBCMEMBER(RotBytesLeft) (r2);        
+ 19362              		.loc 2 1108 0
+ 19363 11677 660F7F85 		movdqa	%xmm0, -3552(%rbp)
+ 19363      20F2FFFF 
+ 19364 1167f F30F6F85 		movdqu	-2368(%rbp), %xmm0
+ 19364      C0F6FFFF 
+ 19365 11687 F30F7F85 		movdqu	%xmm0, -2096(%rbp)
+ 19365      D0F7FFFF 
+ 19366 1168f 660F6F85 		movdqa	-3536(%rbp), %xmm0
+ 19366      30F2FFFF 
+ 19367 11697 F30F7F85 		movdqu	%xmm0, -2112(%rbp)
+ 19367      C0F7FFFF 
+ 19368              	.LBB4617:
+ 19369              	.LBB4618:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 19370              		.loc 2 178 0
+ 19371 1169f F30F6F85 		movdqu	-2112(%rbp), %xmm0
+ 19371      C0F7FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 585
+
+
+ 19372 116a7 F30F6F8D 		movdqu	-2096(%rbp), %xmm1
+ 19372      D0F7FFFF 
+ 19373 116af 660FEFC1 		pxor	%xmm1, %xmm0
+ 19374              	.LBE4618:
+ 19375              	.LBE4617:
+1110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f4 = AESBCMEMBER(VecXor) (state, r2);
+ 19376              		.loc 2 1110 0
+ 19377 116b3 660F7F85 		movdqa	%xmm0, -3584(%rbp)
+ 19377      00F2FFFF 
+ 19378 116bb F30F6F85 		movdqu	-2368(%rbp), %xmm0
+ 19378      C0F6FFFF 
+ 19379 116c3 F30F7F85 		movdqu	%xmm0, -2064(%rbp)
+ 19379      F0F7FFFF 
+ 19380 116cb 660F6F8D 		movdqa	-3520(%rbp), %xmm1
+ 19380      40F2FFFF 
+ 19381 116d3 F30F7F8D 		movdqu	%xmm1, -2080(%rbp)
+ 19381      E0F7FFFF 
+ 19382              	.LBB4619:
+ 19383              	.LBB4620:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 19384              		.loc 2 178 0
+ 19385 116db F30F6F85 		movdqu	-2080(%rbp), %xmm0
+ 19385      E0F7FFFF 
+ 19386 116e3 F30F6F8D 		movdqu	-2064(%rbp), %xmm1
+ 19386      F0F7FFFF 
+ 19387 116eb 660FEFC1 		pxor	%xmm1, %xmm0
+ 19388              	.LBE4620:
+ 19389              	.LBE4619:
+1111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f2 = AESBCMEMBER(VecXor) (state, r1);
+ 19390              		.loc 2 1111 0
+ 19391 116ef 660F7F85 		movdqa	%xmm0, -3568(%rbp)
+ 19391      10F2FFFF 
+ 19392 116f7 660F6F85 		movdqa	-3536(%rbp), %xmm0
+ 19392      30F2FFFF 
+ 19393 116ff F30F7F85 		movdqu	%xmm0, -2032(%rbp)
+ 19393      10F8FFFF 
+ 19394 11707 660F6F8D 		movdqa	-3552(%rbp), %xmm1
+ 19394      20F2FFFF 
+ 19395 1170f F30F7F8D 		movdqu	%xmm1, -2048(%rbp)
+ 19395      00F8FFFF 
+ 19396              	.LBB4621:
+ 19397              	.LBB4622:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 19398              		.loc 2 178 0
+ 19399 11717 F30F6F85 		movdqu	-2048(%rbp), %xmm0
+ 19399      00F8FFFF 
+ 19400 1171f F30F6F8D 		movdqu	-2032(%rbp), %xmm1
+ 19400      10F8FFFF 
+ 19401 11727 660FEFC1 		pxor	%xmm1, %xmm0
+ 19402              	.LBE4622:
+ 19403              	.LBE4621:
+1112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f8 = AESBCMEMBER(VecXor) (r2, r3);
+ 19404              		.loc 2 1112 0
+ 19405 1172b 660F7F85 		movdqa	%xmm0, -3600(%rbp)
+ 19405      F0F1FFFF 
+ 19406 11733 660F6F85 		movdqa	-3600(%rbp), %xmm0
+ 19406      F0F1FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 586
+
+
+ 19407 1173b F30F7F85 		movdqu	%xmm0, -2000(%rbp)
+ 19407      30F8FFFF 
+ 19408 11743 660F6F8D 		movdqa	-3520(%rbp), %xmm1
+ 19408      40F2FFFF 
+ 19409 1174b F30F7F8D 		movdqu	%xmm1, -2016(%rbp)
+ 19409      20F8FFFF 
+ 19410              	.LBB4623:
+ 19411              	.LBB4624:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 19412              		.loc 2 178 0
+ 19413 11753 F30F6F85 		movdqu	-2016(%rbp), %xmm0
+ 19413      20F8FFFF 
+ 19414 1175b F30F6F8D 		movdqu	-2000(%rbp), %xmm1
+ 19414      30F8FFFF 
+ 19415 11763 660FEFC1 		pxor	%xmm1, %xmm0
+ 19416              	.LBE4624:
+ 19417              	.LBE4623:
+1113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (f8, r1);
+ 19418              		.loc 2 1113 0
+ 19419 11767 F30F7F85 		movdqu	%xmm0, -2368(%rbp)
+ 19419      C0F6FFFF 
+ 19420 1176f 660F6F85 		movdqa	-3600(%rbp), %xmm0
+ 19420      F0F1FFFF 
+ 19421 11777 F30F7F85 		movdqu	%xmm0, -1968(%rbp)
+ 19421      50F8FFFF 
+ 19422 1177f 660F6F8D 		movdqa	-3568(%rbp), %xmm1
+ 19422      10F2FFFF 
+ 19423 11787 F30F7F8D 		movdqu	%xmm1, -1984(%rbp)
+ 19423      40F8FFFF 
+ 19424              	.LBB4625:
+ 19425              	.LBB4626:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 19426              		.loc 2 178 0
+ 19427 1178f F30F6F85 		movdqu	-1984(%rbp), %xmm0
+ 19427      40F8FFFF 
+ 19428 11797 F30F6F8D 		movdqu	-1968(%rbp), %xmm1
+ 19428      50F8FFFF 
+ 19429 1179f 660FEFC1 		pxor	%xmm1, %xmm0
+ 19430              	.LBE4626:
+ 19431              	.LBE4625:
+1114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f8 = AESBCMEMBER(VecXor) (f8, f2);
+ 19432              		.loc 2 1114 0
+ 19433 117a3 660F7F85 		movdqa	%xmm0, -3600(%rbp)
+ 19433      F0F1FFFF 
+ 19434 117ab 660F6F85 		movdqa	-3568(%rbp), %xmm0
+ 19434      10F2FFFF 
+ 19435 117b3 F30F7F85 		movdqu	%xmm0, -1936(%rbp)
+ 19435      70F8FFFF 
+ 19436              	.LBB4627:
+ 19437              	.LBB4628:
+ 19438              	.LBB4629:
+ 933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 19439              		.loc 2 933 0
+ 19440 117bb F30F6F85 		movdqu	-1936(%rbp), %xmm0
+ 19440      70F8FFFF 
+ 19441 117c3 F30F7F85 		movdqu	%xmm0, -3296(%rbp)
+ 19441      20F3FFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 587
+
+
+ 19442 117cb E8000000 		call	KDbgWriterGet at PLT
+ 19442      00
+ 19443 117d0 4885C0   		testq	%rax, %rax
+ 19444 117d3 7479     		je	.L330
+ 19445 117d5 BF010000 		movl	$1, %edi
+ 19445      00
+ 19446 117da E8000000 		call	KDbgCondToFlag at PLT
+ 19446      00
+ 19447 117df 4889C6   		movq	%rax, %rsi
+ 19448 117e2 BF100000 		movl	$16, %edi
+ 19448      00
+ 19449 117e7 E8000000 		call	KDbgTestModConds at PLT
+ 19449      00
+ 19450 117ec 84C0     		testb	%al, %al
+ 19451 117ee 745E     		je	.L330
+ 19452 117f0 8B852CF3 		movl	-3284(%rbp), %eax
+ 19452      FFFF
+ 19453 117f6 89C7     		movl	%eax, %edi
+ 19454 117f8 E803E8FE 		call	bswap_32
+ 19454      FF
+ 19455 117fd 4189C5   		movl	%eax, %r13d
+ 19456 11800 8B8528F3 		movl	-3288(%rbp), %eax
+ 19456      FFFF
+ 19457 11806 89C7     		movl	%eax, %edi
+ 19458 11808 E8F3E7FE 		call	bswap_32
+ 19458      FF
+ 19459 1180d 4189C4   		movl	%eax, %r12d
+ 19460 11810 8B8524F3 		movl	-3292(%rbp), %eax
+ 19460      FFFF
+ 19461 11816 89C7     		movl	%eax, %edi
+ 19462 11818 E8E3E7FE 		call	bswap_32
+ 19462      FF
+ 19463 1181d 89C3     		movl	%eax, %ebx
+ 19464 1181f 8B8520F3 		movl	-3296(%rbp), %eax
+ 19464      FFFF
+ 19465 11825 89C7     		movl	%eax, %edi
+ 19466 11827 E8D4E7FE 		call	bswap_32
+ 19466      FF
+ 19467 1182c 4589E9   		movl	%r13d, %r9d
+ 19468 1182f 4589E0   		movl	%r12d, %r8d
+ 19469 11832 89D9     		movl	%ebx, %ecx
+ 19470 11834 89C2     		movl	%eax, %edx
+ 19471 11836 488D3500 		leaq	.LC5(%rip), %rsi
+ 19471      000000
+ 19472 1183d 488D3D00 		leaq	.LC1(%rip), %rdi
+ 19472      000000
+ 19473 11844 B8000000 		movl	$0, %eax
+ 19473      00
+ 19474 11849 E8000000 		call	KDbgMsg at PLT
+ 19474      00
+ 19475              	.L330:
+ 19476              	.LBE4629:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 19477              		.loc 2 934 0
+ 19478 1184e B8070000 		movl	$7, %eax
+ 19478      00
+ 19479 11853 F30F6F85 		movdqu	-1936(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 588
+
+
+ 19479      70F8FFFF 
+ 19480 1185b F30F7F85 		movdqu	%xmm0, -1872(%rbp)
+ 19480      B0F8FFFF 
+ 19481 11863 8985ACF8 		movl	%eax, -1876(%rbp)
+ 19481      FFFF
+ 19482 11869 F30F6F85 		movdqu	-1872(%rbp), %xmm0
+ 19482      B0F8FFFF 
+ 19483 11871 F30F7F85 		movdqu	%xmm0, -1840(%rbp)
+ 19483      D0F8FFFF 
+ 19484 11879 8B85ACF8 		movl	-1876(%rbp), %eax
+ 19484      FFFF
+ 19485 1187f 8985CCF8 		movl	%eax, -1844(%rbp)
+ 19485      FFFF
+ 19486              	.LBB4630:
+ 19487              	.LBB4631:
+ 19488              	.LBB4632:
+ 19489              	.LBB4633:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 19490              		.loc 3 433 0
+ 19491 11885 F30F6F85 		movdqu	-1840(%rbp), %xmm0
+ 19491      D0F8FFFF 
+ 19492 1188d 8B85CCF8 		movl	-1844(%rbp), %eax
+ 19492      FFFF
+ 19493 11893 8985ECF1 		movl	%eax, -3604(%rbp)
+ 19493      FFFF
+ 19494 11899 660F6E8D 		movd	-3604(%rbp), %xmm1
+ 19494      ECF1FFFF 
+ 19495 118a1 660FD2C1 		psrld	%xmm1, %xmm0
+ 19496              	.LBE4633:
+ 19497              	.LBE4632:
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = op_PSRLDI128 (v, k);
+ 19498              		.loc 2 488 0
+ 19499 118a5 F30F7F85 		movdqu	%xmm0, -1872(%rbp)
+ 19499      B0F8FFFF 
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 19500              		.loc 2 489 0
+ 19501 118ad B8080000 		movl	$8, %eax
+ 19501      00
+ 19502 118b2 83BDACF8 		cmpl	$8, -1876(%rbp)
+ 19502      FFFF08
+ 19503 118b9 0F4E85AC 		cmovle	-1876(%rbp), %eax
+ 19503      F8FFFF
+ 19504 118c0 4898     		cltq
+ 19505 118c2 4889C2   		movq	%rax, %rdx
+ 19506 118c5 48C1E204 		salq	$4, %rdx
+ 19507 118c9 488D0500 		leaq	sr_mask.7327(%rip), %rax
+ 19507      000000
+ 19508 118d0 660F6F04 		movdqa	(%rdx,%rax), %xmm0
+ 19508      02
+ 19509 118d5 F30F6F8D 		movdqu	-1872(%rbp), %xmm1
+ 19509      B0F8FFFF 
+ 19510 118dd F30F7F8D 		movdqu	%xmm1, -1808(%rbp)
+ 19510      F0F8FFFF 
+ 19511 118e5 F30F7F85 		movdqu	%xmm0, -1824(%rbp)
+ 19511      E0F8FFFF 
+ 19512              	.LBB4634:
+ 19513              	.LBB4635:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 589
+
+
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 19514              		.loc 2 206 0
+ 19515 118ed F30F6F85 		movdqu	-1824(%rbp), %xmm0
+ 19515      E0F8FFFF 
+ 19516 118f5 F30F6F8D 		movdqu	-1808(%rbp), %xmm1
+ 19516      F0F8FFFF 
+ 19517 118fd 660FDBC1 		pand	%xmm1, %xmm0
+ 19518              	.LBE4635:
+ 19519              	.LBE4634:
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 19520              		.loc 2 489 0
+ 19521 11901 F30F7F85 		movdqu	%xmm0, -1872(%rbp)
+ 19521      B0F8FFFF 
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v;
+ 19522              		.loc 2 490 0
+ 19523 11909 F30F6F85 		movdqu	-1872(%rbp), %xmm0
+ 19523      B0F8FFFF 
+ 19524              	.LBE4631:
+ 19525              	.LBE4630:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 19526              		.loc 2 934 0
+ 19527 11911 F30F7F85 		movdqu	%xmm0, -1920(%rbp)
+ 19527      80F8FFFF 
+ 19528              	.LBB4636:
+ 935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("sr", sr);
+ 19529              		.loc 2 935 0
+ 19530 11919 F30F6F85 		movdqu	-1920(%rbp), %xmm0
+ 19530      80F8FFFF 
+ 19531 11921 F30F7F85 		movdqu	%xmm0, -3312(%rbp)
+ 19531      10F3FFFF 
+ 19532 11929 E8000000 		call	KDbgWriterGet at PLT
+ 19532      00
+ 19533 1192e 4885C0   		testq	%rax, %rax
+ 19534 11931 7479     		je	.L332
+ 19535 11933 BF010000 		movl	$1, %edi
+ 19535      00
+ 19536 11938 E8000000 		call	KDbgCondToFlag at PLT
+ 19536      00
+ 19537 1193d 4889C6   		movq	%rax, %rsi
+ 19538 11940 BF100000 		movl	$16, %edi
+ 19538      00
+ 19539 11945 E8000000 		call	KDbgTestModConds at PLT
+ 19539      00
+ 19540 1194a 84C0     		testb	%al, %al
+ 19541 1194c 745E     		je	.L332
+ 19542 1194e 8B851CF3 		movl	-3300(%rbp), %eax
+ 19542      FFFF
+ 19543 11954 89C7     		movl	%eax, %edi
+ 19544 11956 E8A5E6FE 		call	bswap_32
+ 19544      FF
+ 19545 1195b 4189C5   		movl	%eax, %r13d
+ 19546 1195e 8B8518F3 		movl	-3304(%rbp), %eax
+ 19546      FFFF
+ 19547 11964 89C7     		movl	%eax, %edi
+ 19548 11966 E895E6FE 		call	bswap_32
+ 19548      FF
+ 19549 1196b 4189C4   		movl	%eax, %r12d
+
GAS LISTING /tmp/ccjbMjHD.s 			page 590
+
+
+ 19550 1196e 8B8514F3 		movl	-3308(%rbp), %eax
+ 19550      FFFF
+ 19551 11974 89C7     		movl	%eax, %edi
+ 19552 11976 E885E6FE 		call	bswap_32
+ 19552      FF
+ 19553 1197b 89C3     		movl	%eax, %ebx
+ 19554 1197d 8B8510F3 		movl	-3312(%rbp), %eax
+ 19554      FFFF
+ 19555 11983 89C7     		movl	%eax, %edi
+ 19556 11985 E876E6FE 		call	bswap_32
+ 19556      FF
+ 19557 1198a 4589E9   		movl	%r13d, %r9d
+ 19558 1198d 4589E0   		movl	%r12d, %r8d
+ 19559 11990 89D9     		movl	%ebx, %ecx
+ 19560 11992 89C2     		movl	%eax, %edx
+ 19561 11994 488D3500 		leaq	.LC6(%rip), %rsi
+ 19561      000000
+ 19562 1199b 488D3D00 		leaq	.LC1(%rip), %rdi
+ 19562      000000
+ 19563 119a2 B8000000 		movl	$0, %eax
+ 19563      00
+ 19564 119a7 E8000000 		call	KDbgMsg at PLT
+ 19564      00
+ 19565              	.L332:
+ 19566 119ac F30F6F85 		movdqu	-1936(%rbp), %xmm0
+ 19566      70F8FFFF 
+ 19567 119b4 F30F7F85 		movdqu	%xmm0, -1776(%rbp)
+ 19567      10F9FFFF 
+ 19568              	.LBE4636:
+ 19569              	.LBB4637:
+ 19570              	.LBB4638:
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec vv = v;
+ 19571              		.loc 2 426 0
+ 19572 119bc F30F6F85 		movdqu	-1776(%rbp), %xmm0
+ 19572      10F9FFFF 
+ 19573 119c4 F30F7F85 		movdqu	%xmm0, -1760(%rbp)
+ 19573      20F9FFFF 
+ 19574 119cc F30F6F85 		movdqu	-1760(%rbp), %xmm0
+ 19574      20F9FFFF 
+ 19575 119d4 F30F7F85 		movdqu	%xmm0, -1728(%rbp)
+ 19575      40F9FFFF 
+ 19576              	.LBB4639:
+ 19577              	.LBB4640:
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pslldi128 ((v128_i32_t)vin, bit_count);
+ 19578              		.loc 3 416 0
+ 19579 119dc F30F6F85 		movdqu	-1728(%rbp), %xmm0
+ 19579      40F9FFFF 
+ 19580 119e4 660F72F0 		pslld	$1, %xmm0
+ 19580      01
+ 19581              	.LBE4640:
+ 19582              	.LBE4639:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = op_PSLLDI128 (vv, k);
+ 19583              		.loc 2 433 0
+ 19584 119e9 F30F7F85 		movdqu	%xmm0, -1760(%rbp)
+ 19584      20F9FFFF 
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 19585              		.loc 2 435 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 591
+
+
+ 19586 119f1 B8010000 		movl	$1, %eax
+ 19586      00
+ 19587 119f6 4898     		cltq
+ 19588 119f8 4889C2   		movq	%rax, %rdx
+ 19589 119fb 48C1E204 		salq	$4, %rdx
+ 19590 119ff 488D0500 		leaq	sl_mask.7310(%rip), %rax
+ 19590      000000
+ 19591 11a06 660F6F04 		movdqa	(%rdx,%rax), %xmm0
+ 19591      02
+ 19592 11a0b F30F6F8D 		movdqu	-1760(%rbp), %xmm1
+ 19592      20F9FFFF 
+ 19593 11a13 F30F7F8D 		movdqu	%xmm1, -1696(%rbp)
+ 19593      60F9FFFF 
+ 19594 11a1b F30F7F85 		movdqu	%xmm0, -1712(%rbp)
+ 19594      50F9FFFF 
+ 19595              	.LBB4641:
+ 19596              	.LBB4642:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 19597              		.loc 2 206 0
+ 19598 11a23 F30F6F85 		movdqu	-1712(%rbp), %xmm0
+ 19598      50F9FFFF 
+ 19599 11a2b F30F6F8D 		movdqu	-1696(%rbp), %xmm1
+ 19599      60F9FFFF 
+ 19600 11a33 660FDBC1 		pand	%xmm1, %xmm0
+ 19601              	.LBE4642:
+ 19602              	.LBE4641:
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 19603              		.loc 2 435 0
+ 19604 11a37 F30F7F85 		movdqu	%xmm0, -1760(%rbp)
+ 19604      20F9FFFF 
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vv;
+ 19605              		.loc 2 437 0
+ 19606 11a3f F30F6F85 		movdqu	-1760(%rbp), %xmm0
+ 19606      20F9FFFF 
+ 19607              	.LBE4638:
+ 19608              	.LBE4637:
+ 936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ 19609              		.loc 2 936 0
+ 19610 11a47 F30F7F85 		movdqu	%xmm0, -1904(%rbp)
+ 19610      90F8FFFF 
+ 19611              	.LBB4643:
+ 937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("sl", sl);
+ 19612              		.loc 2 937 0
+ 19613 11a4f F30F6F85 		movdqu	-1904(%rbp), %xmm0
+ 19613      90F8FFFF 
+ 19614 11a57 F30F7F85 		movdqu	%xmm0, -3328(%rbp)
+ 19614      00F3FFFF 
+ 19615 11a5f E8000000 		call	KDbgWriterGet at PLT
+ 19615      00
+ 19616 11a64 4885C0   		testq	%rax, %rax
+ 19617 11a67 7479     		je	.L334
+ 19618 11a69 BF010000 		movl	$1, %edi
+ 19618      00
+ 19619 11a6e E8000000 		call	KDbgCondToFlag at PLT
+ 19619      00
+ 19620 11a73 4889C6   		movq	%rax, %rsi
+ 19621 11a76 BF100000 		movl	$16, %edi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 592
+
+
+ 19621      00
+ 19622 11a7b E8000000 		call	KDbgTestModConds at PLT
+ 19622      00
+ 19623 11a80 84C0     		testb	%al, %al
+ 19624 11a82 745E     		je	.L334
+ 19625 11a84 8B850CF3 		movl	-3316(%rbp), %eax
+ 19625      FFFF
+ 19626 11a8a 89C7     		movl	%eax, %edi
+ 19627 11a8c E86FE5FE 		call	bswap_32
+ 19627      FF
+ 19628 11a91 4189C5   		movl	%eax, %r13d
+ 19629 11a94 8B8508F3 		movl	-3320(%rbp), %eax
+ 19629      FFFF
+ 19630 11a9a 89C7     		movl	%eax, %edi
+ 19631 11a9c E85FE5FE 		call	bswap_32
+ 19631      FF
+ 19632 11aa1 4189C4   		movl	%eax, %r12d
+ 19633 11aa4 8B8504F3 		movl	-3324(%rbp), %eax
+ 19633      FFFF
+ 19634 11aaa 89C7     		movl	%eax, %edi
+ 19635 11aac E84FE5FE 		call	bswap_32
+ 19635      FF
+ 19636 11ab1 89C3     		movl	%eax, %ebx
+ 19637 11ab3 8B8500F3 		movl	-3328(%rbp), %eax
+ 19637      FFFF
+ 19638 11ab9 89C7     		movl	%eax, %edi
+ 19639 11abb E840E5FE 		call	bswap_32
+ 19639      FF
+ 19640 11ac0 4589E9   		movl	%r13d, %r9d
+ 19641 11ac3 4589E0   		movl	%r12d, %r8d
+ 19642 11ac6 89D9     		movl	%ebx, %ecx
+ 19643 11ac8 89C2     		movl	%eax, %edx
+ 19644 11aca 488D3500 		leaq	.LC7(%rip), %rsi
+ 19644      000000
+ 19645 11ad1 488D3D00 		leaq	.LC1(%rip), %rdi
+ 19645      000000
+ 19646 11ad8 B8000000 		movl	$0, %eax
+ 19646      00
+ 19647 11add E8000000 		call	KDbgMsg at PLT
+ 19647      00
+ 19648              	.L334:
+ 19649              	.LBE4643:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 19650              		.loc 2 938 0
+ 19651 11ae2 660F6F05 		movdqa	FF_tab(%rip), %xmm0
+ 19651      00000000 
+ 19652 11aea F30F7F85 		movdqu	%xmm0, -1664(%rbp)
+ 19652      80F9FFFF 
+ 19653 11af2 F30F6F85 		movdqu	-1920(%rbp), %xmm0
+ 19653      80F8FFFF 
+ 19654 11afa F30F7F85 		movdqu	%xmm0, -1680(%rbp)
+ 19654      70F9FFFF 
+ 19655 11b02 F30F6F85 		movdqu	-1664(%rbp), %xmm0
+ 19655      80F9FFFF 
+ 19656 11b0a F30F7F85 		movdqu	%xmm0, -1632(%rbp)
+ 19656      A0F9FFFF 
+ 19657 11b12 F30F6F85 		movdqu	-1680(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 593
+
+
+ 19657      70F9FFFF 
+ 19658 11b1a F30F7F85 		movdqu	%xmm0, -1648(%rbp)
+ 19658      90F9FFFF 
+ 19659              	.LBB4644:
+ 19660              	.LBB4645:
+ 19661              	.LBB4646:
+ 19662              	.LBB4647:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 19663              		.loc 3 529 0
+ 19664 11b22 F30F6F8D 		movdqu	-1648(%rbp), %xmm1
+ 19664      90F9FFFF 
+ 19665 11b2a F30F6F85 		movdqu	-1632(%rbp), %xmm0
+ 19665      A0F9FFFF 
+ 19666 11b32 660F3800 		pshufb	%xmm1, %xmm0
+ 19666      C1
+ 19667              	.LBE4647:
+ 19668              	.LBE4646:
+ 19669              	.LBE4645:
+ 19670              	.LBE4644:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 19671              		.loc 2 938 0
+ 19672 11b37 F30F7F85 		movdqu	%xmm0, -1920(%rbp)
+ 19672      80F8FFFF 
+ 19673 11b3f F30F6F85 		movdqu	-1904(%rbp), %xmm0
+ 19673      90F8FFFF 
+ 19674 11b47 F30F7F85 		movdqu	%xmm0, -1600(%rbp)
+ 19674      C0F9FFFF 
+ 19675 11b4f F30F6F85 		movdqu	-1920(%rbp), %xmm0
+ 19675      80F8FFFF 
+ 19676 11b57 F30F7F85 		movdqu	%xmm0, -1616(%rbp)
+ 19676      B0F9FFFF 
+ 19677              	.LBB4648:
+ 19678              	.LBB4649:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 19679              		.loc 2 178 0
+ 19680 11b5f F30F6F85 		movdqu	-1616(%rbp), %xmm0
+ 19680      B0F9FFFF 
+ 19681 11b67 F30F6F8D 		movdqu	-1600(%rbp), %xmm1
+ 19681      C0F9FFFF 
+ 19682 11b6f 660FEFC1 		pxor	%xmm1, %xmm0
+ 19683              	.LBE4649:
+ 19684              	.LBE4648:
+ 19685              	.LBE4628:
+ 19686              	.LBE4627:
+1118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f2 = AESBCMEMBER(FF_mul) (f2,1);
+ 19687              		.loc 2 1118 0
+ 19688 11b73 660F7F85 		movdqa	%xmm0, -3568(%rbp)
+ 19688      10F2FFFF 
+ 19689 11b7b 660F6F85 		movdqa	-3584(%rbp), %xmm0
+ 19689      00F2FFFF 
+ 19690 11b83 F30F7F85 		movdqu	%xmm0, -1568(%rbp)
+ 19690      E0F9FFFF 
+ 19691              	.LBB4650:
+ 19692              	.LBB4651:
+ 19693              	.LBB4652:
+ 933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 19694              		.loc 2 933 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 594
+
+
+ 19695 11b8b F30F6F85 		movdqu	-1568(%rbp), %xmm0
+ 19695      E0F9FFFF 
+ 19696 11b93 F30F7F85 		movdqu	%xmm0, -3248(%rbp)
+ 19696      50F3FFFF 
+ 19697 11b9b E8000000 		call	KDbgWriterGet at PLT
+ 19697      00
+ 19698 11ba0 4885C0   		testq	%rax, %rax
+ 19699 11ba3 7479     		je	.L336
+ 19700 11ba5 BF010000 		movl	$1, %edi
+ 19700      00
+ 19701 11baa E8000000 		call	KDbgCondToFlag at PLT
+ 19701      00
+ 19702 11baf 4889C6   		movq	%rax, %rsi
+ 19703 11bb2 BF100000 		movl	$16, %edi
+ 19703      00
+ 19704 11bb7 E8000000 		call	KDbgTestModConds at PLT
+ 19704      00
+ 19705 11bbc 84C0     		testb	%al, %al
+ 19706 11bbe 745E     		je	.L336
+ 19707 11bc0 8B855CF3 		movl	-3236(%rbp), %eax
+ 19707      FFFF
+ 19708 11bc6 89C7     		movl	%eax, %edi
+ 19709 11bc8 E833E4FE 		call	bswap_32
+ 19709      FF
+ 19710 11bcd 4189C5   		movl	%eax, %r13d
+ 19711 11bd0 8B8558F3 		movl	-3240(%rbp), %eax
+ 19711      FFFF
+ 19712 11bd6 89C7     		movl	%eax, %edi
+ 19713 11bd8 E823E4FE 		call	bswap_32
+ 19713      FF
+ 19714 11bdd 4189C4   		movl	%eax, %r12d
+ 19715 11be0 8B8554F3 		movl	-3244(%rbp), %eax
+ 19715      FFFF
+ 19716 11be6 89C7     		movl	%eax, %edi
+ 19717 11be8 E813E4FE 		call	bswap_32
+ 19717      FF
+ 19718 11bed 89C3     		movl	%eax, %ebx
+ 19719 11bef 8B8550F3 		movl	-3248(%rbp), %eax
+ 19719      FFFF
+ 19720 11bf5 89C7     		movl	%eax, %edi
+ 19721 11bf7 E804E4FE 		call	bswap_32
+ 19721      FF
+ 19722 11bfc 4589E9   		movl	%r13d, %r9d
+ 19723 11bff 4589E0   		movl	%r12d, %r8d
+ 19724 11c02 89D9     		movl	%ebx, %ecx
+ 19725 11c04 89C2     		movl	%eax, %edx
+ 19726 11c06 488D3500 		leaq	.LC5(%rip), %rsi
+ 19726      000000
+ 19727 11c0d 488D3D00 		leaq	.LC1(%rip), %rdi
+ 19727      000000
+ 19728 11c14 B8000000 		movl	$0, %eax
+ 19728      00
+ 19729 11c19 E8000000 		call	KDbgMsg at PLT
+ 19729      00
+ 19730              	.L336:
+ 19731              	.LBE4652:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+
GAS LISTING /tmp/ccjbMjHD.s 			page 595
+
+
+ 19732              		.loc 2 934 0
+ 19733 11c1e B8060000 		movl	$6, %eax
+ 19733      00
+ 19734 11c23 F30F6F85 		movdqu	-1568(%rbp), %xmm0
+ 19734      E0F9FFFF 
+ 19735 11c2b F30F7F85 		movdqu	%xmm0, -1504(%rbp)
+ 19735      20FAFFFF 
+ 19736 11c33 89851CFA 		movl	%eax, -1508(%rbp)
+ 19736      FFFF
+ 19737 11c39 F30F6F85 		movdqu	-1504(%rbp), %xmm0
+ 19737      20FAFFFF 
+ 19738 11c41 F30F7F85 		movdqu	%xmm0, -1472(%rbp)
+ 19738      40FAFFFF 
+ 19739 11c49 8B851CFA 		movl	-1508(%rbp), %eax
+ 19739      FFFF
+ 19740 11c4f 89853CFA 		movl	%eax, -1476(%rbp)
+ 19740      FFFF
+ 19741              	.LBB4653:
+ 19742              	.LBB4654:
+ 19743              	.LBB4655:
+ 19744              	.LBB4656:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 19745              		.loc 3 433 0
+ 19746 11c55 F30F6F85 		movdqu	-1472(%rbp), %xmm0
+ 19746      40FAFFFF 
+ 19747 11c5d 8B853CFA 		movl	-1476(%rbp), %eax
+ 19747      FFFF
+ 19748 11c63 8985E8F1 		movl	%eax, -3608(%rbp)
+ 19748      FFFF
+ 19749 11c69 660F6E8D 		movd	-3608(%rbp), %xmm1
+ 19749      E8F1FFFF 
+ 19750 11c71 660FD2C1 		psrld	%xmm1, %xmm0
+ 19751              	.LBE4656:
+ 19752              	.LBE4655:
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = op_PSRLDI128 (v, k);
+ 19753              		.loc 2 488 0
+ 19754 11c75 F30F7F85 		movdqu	%xmm0, -1504(%rbp)
+ 19754      20FAFFFF 
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 19755              		.loc 2 489 0
+ 19756 11c7d B8080000 		movl	$8, %eax
+ 19756      00
+ 19757 11c82 83BD1CFA 		cmpl	$8, -1508(%rbp)
+ 19757      FFFF08
+ 19758 11c89 0F4E851C 		cmovle	-1508(%rbp), %eax
+ 19758      FAFFFF
+ 19759 11c90 4898     		cltq
+ 19760 11c92 4889C2   		movq	%rax, %rdx
+ 19761 11c95 48C1E204 		salq	$4, %rdx
+ 19762 11c99 488D0500 		leaq	sr_mask.7327(%rip), %rax
+ 19762      000000
+ 19763 11ca0 660F6F04 		movdqa	(%rdx,%rax), %xmm0
+ 19763      02
+ 19764 11ca5 F30F6F8D 		movdqu	-1504(%rbp), %xmm1
+ 19764      20FAFFFF 
+ 19765 11cad F30F7F8D 		movdqu	%xmm1, -1440(%rbp)
+ 19765      60FAFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 596
+
+
+ 19766 11cb5 F30F7F85 		movdqu	%xmm0, -1456(%rbp)
+ 19766      50FAFFFF 
+ 19767              	.LBB4657:
+ 19768              	.LBB4658:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 19769              		.loc 2 206 0
+ 19770 11cbd F30F6F85 		movdqu	-1456(%rbp), %xmm0
+ 19770      50FAFFFF 
+ 19771 11cc5 F30F6F8D 		movdqu	-1440(%rbp), %xmm1
+ 19771      60FAFFFF 
+ 19772 11ccd 660FDBC1 		pand	%xmm1, %xmm0
+ 19773              	.LBE4658:
+ 19774              	.LBE4657:
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 19775              		.loc 2 489 0
+ 19776 11cd1 F30F7F85 		movdqu	%xmm0, -1504(%rbp)
+ 19776      20FAFFFF 
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v;
+ 19777              		.loc 2 490 0
+ 19778 11cd9 F30F6F85 		movdqu	-1504(%rbp), %xmm0
+ 19778      20FAFFFF 
+ 19779              	.LBE4654:
+ 19780              	.LBE4653:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 19781              		.loc 2 934 0
+ 19782 11ce1 F30F7F85 		movdqu	%xmm0, -1552(%rbp)
+ 19782      F0F9FFFF 
+ 19783              	.LBB4659:
+ 935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("sr", sr);
+ 19784              		.loc 2 935 0
+ 19785 11ce9 F30F6F85 		movdqu	-1552(%rbp), %xmm0
+ 19785      F0F9FFFF 
+ 19786 11cf1 F30F7F85 		movdqu	%xmm0, -3264(%rbp)
+ 19786      40F3FFFF 
+ 19787 11cf9 E8000000 		call	KDbgWriterGet at PLT
+ 19787      00
+ 19788 11cfe 4885C0   		testq	%rax, %rax
+ 19789 11d01 7479     		je	.L338
+ 19790 11d03 BF010000 		movl	$1, %edi
+ 19790      00
+ 19791 11d08 E8000000 		call	KDbgCondToFlag at PLT
+ 19791      00
+ 19792 11d0d 4889C6   		movq	%rax, %rsi
+ 19793 11d10 BF100000 		movl	$16, %edi
+ 19793      00
+ 19794 11d15 E8000000 		call	KDbgTestModConds at PLT
+ 19794      00
+ 19795 11d1a 84C0     		testb	%al, %al
+ 19796 11d1c 745E     		je	.L338
+ 19797 11d1e 8B854CF3 		movl	-3252(%rbp), %eax
+ 19797      FFFF
+ 19798 11d24 89C7     		movl	%eax, %edi
+ 19799 11d26 E8D5E2FE 		call	bswap_32
+ 19799      FF
+ 19800 11d2b 4189C5   		movl	%eax, %r13d
+ 19801 11d2e 8B8548F3 		movl	-3256(%rbp), %eax
+ 19801      FFFF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 597
+
+
+ 19802 11d34 89C7     		movl	%eax, %edi
+ 19803 11d36 E8C5E2FE 		call	bswap_32
+ 19803      FF
+ 19804 11d3b 4189C4   		movl	%eax, %r12d
+ 19805 11d3e 8B8544F3 		movl	-3260(%rbp), %eax
+ 19805      FFFF
+ 19806 11d44 89C7     		movl	%eax, %edi
+ 19807 11d46 E8B5E2FE 		call	bswap_32
+ 19807      FF
+ 19808 11d4b 89C3     		movl	%eax, %ebx
+ 19809 11d4d 8B8540F3 		movl	-3264(%rbp), %eax
+ 19809      FFFF
+ 19810 11d53 89C7     		movl	%eax, %edi
+ 19811 11d55 E8A6E2FE 		call	bswap_32
+ 19811      FF
+ 19812 11d5a 4589E9   		movl	%r13d, %r9d
+ 19813 11d5d 4589E0   		movl	%r12d, %r8d
+ 19814 11d60 89D9     		movl	%ebx, %ecx
+ 19815 11d62 89C2     		movl	%eax, %edx
+ 19816 11d64 488D3500 		leaq	.LC6(%rip), %rsi
+ 19816      000000
+ 19817 11d6b 488D3D00 		leaq	.LC1(%rip), %rdi
+ 19817      000000
+ 19818 11d72 B8000000 		movl	$0, %eax
+ 19818      00
+ 19819 11d77 E8000000 		call	KDbgMsg at PLT
+ 19819      00
+ 19820              	.L338:
+ 19821 11d7c F30F6F85 		movdqu	-1568(%rbp), %xmm0
+ 19821      E0F9FFFF 
+ 19822 11d84 F30F7F85 		movdqu	%xmm0, -1408(%rbp)
+ 19822      80FAFFFF 
+ 19823              	.LBE4659:
+ 19824              	.LBB4660:
+ 19825              	.LBB4661:
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec vv = v;
+ 19826              		.loc 2 426 0
+ 19827 11d8c F30F6F85 		movdqu	-1408(%rbp), %xmm0
+ 19827      80FAFFFF 
+ 19828 11d94 F30F7F85 		movdqu	%xmm0, -1392(%rbp)
+ 19828      90FAFFFF 
+ 19829 11d9c F30F6F85 		movdqu	-1392(%rbp), %xmm0
+ 19829      90FAFFFF 
+ 19830 11da4 F30F7F85 		movdqu	%xmm0, -1360(%rbp)
+ 19830      B0FAFFFF 
+ 19831              	.LBB4662:
+ 19832              	.LBB4663:
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pslldi128 ((v128_i32_t)vin, bit_count);
+ 19833              		.loc 3 416 0
+ 19834 11dac F30F6F85 		movdqu	-1360(%rbp), %xmm0
+ 19834      B0FAFFFF 
+ 19835 11db4 660F72F0 		pslld	$2, %xmm0
+ 19835      02
+ 19836              	.LBE4663:
+ 19837              	.LBE4662:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = op_PSLLDI128 (vv, k);
+ 19838              		.loc 2 433 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 598
+
+
+ 19839 11db9 F30F7F85 		movdqu	%xmm0, -1392(%rbp)
+ 19839      90FAFFFF 
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 19840              		.loc 2 435 0
+ 19841 11dc1 B8020000 		movl	$2, %eax
+ 19841      00
+ 19842 11dc6 4898     		cltq
+ 19843 11dc8 4889C2   		movq	%rax, %rdx
+ 19844 11dcb 48C1E204 		salq	$4, %rdx
+ 19845 11dcf 488D0500 		leaq	sl_mask.7310(%rip), %rax
+ 19845      000000
+ 19846 11dd6 660F6F04 		movdqa	(%rdx,%rax), %xmm0
+ 19846      02
+ 19847 11ddb F30F6F8D 		movdqu	-1392(%rbp), %xmm1
+ 19847      90FAFFFF 
+ 19848 11de3 F30F7F8D 		movdqu	%xmm1, -1328(%rbp)
+ 19848      D0FAFFFF 
+ 19849 11deb F30F7F85 		movdqu	%xmm0, -1344(%rbp)
+ 19849      C0FAFFFF 
+ 19850              	.LBB4664:
+ 19851              	.LBB4665:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 19852              		.loc 2 206 0
+ 19853 11df3 F30F6F85 		movdqu	-1344(%rbp), %xmm0
+ 19853      C0FAFFFF 
+ 19854 11dfb F30F6F8D 		movdqu	-1328(%rbp), %xmm1
+ 19854      D0FAFFFF 
+ 19855 11e03 660FDBC1 		pand	%xmm1, %xmm0
+ 19856              	.LBE4665:
+ 19857              	.LBE4664:
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 19858              		.loc 2 435 0
+ 19859 11e07 F30F7F85 		movdqu	%xmm0, -1392(%rbp)
+ 19859      90FAFFFF 
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vv;
+ 19860              		.loc 2 437 0
+ 19861 11e0f F30F6F85 		movdqu	-1392(%rbp), %xmm0
+ 19861      90FAFFFF 
+ 19862              	.LBE4661:
+ 19863              	.LBE4660:
+ 936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ 19864              		.loc 2 936 0
+ 19865 11e17 F30F7F85 		movdqu	%xmm0, -1536(%rbp)
+ 19865      00FAFFFF 
+ 19866              	.LBB4666:
+ 937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("sl", sl);
+ 19867              		.loc 2 937 0
+ 19868 11e1f F30F6F85 		movdqu	-1536(%rbp), %xmm0
+ 19868      00FAFFFF 
+ 19869 11e27 F30F7F85 		movdqu	%xmm0, -3280(%rbp)
+ 19869      30F3FFFF 
+ 19870 11e2f E8000000 		call	KDbgWriterGet at PLT
+ 19870      00
+ 19871 11e34 4885C0   		testq	%rax, %rax
+ 19872 11e37 7479     		je	.L340
+ 19873 11e39 BF010000 		movl	$1, %edi
+ 19873      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 599
+
+
+ 19874 11e3e E8000000 		call	KDbgCondToFlag at PLT
+ 19874      00
+ 19875 11e43 4889C6   		movq	%rax, %rsi
+ 19876 11e46 BF100000 		movl	$16, %edi
+ 19876      00
+ 19877 11e4b E8000000 		call	KDbgTestModConds at PLT
+ 19877      00
+ 19878 11e50 84C0     		testb	%al, %al
+ 19879 11e52 745E     		je	.L340
+ 19880 11e54 8B853CF3 		movl	-3268(%rbp), %eax
+ 19880      FFFF
+ 19881 11e5a 89C7     		movl	%eax, %edi
+ 19882 11e5c E89FE1FE 		call	bswap_32
+ 19882      FF
+ 19883 11e61 4189C5   		movl	%eax, %r13d
+ 19884 11e64 8B8538F3 		movl	-3272(%rbp), %eax
+ 19884      FFFF
+ 19885 11e6a 89C7     		movl	%eax, %edi
+ 19886 11e6c E88FE1FE 		call	bswap_32
+ 19886      FF
+ 19887 11e71 4189C4   		movl	%eax, %r12d
+ 19888 11e74 8B8534F3 		movl	-3276(%rbp), %eax
+ 19888      FFFF
+ 19889 11e7a 89C7     		movl	%eax, %edi
+ 19890 11e7c E87FE1FE 		call	bswap_32
+ 19890      FF
+ 19891 11e81 89C3     		movl	%eax, %ebx
+ 19892 11e83 8B8530F3 		movl	-3280(%rbp), %eax
+ 19892      FFFF
+ 19893 11e89 89C7     		movl	%eax, %edi
+ 19894 11e8b E870E1FE 		call	bswap_32
+ 19894      FF
+ 19895 11e90 4589E9   		movl	%r13d, %r9d
+ 19896 11e93 4589E0   		movl	%r12d, %r8d
+ 19897 11e96 89D9     		movl	%ebx, %ecx
+ 19898 11e98 89C2     		movl	%eax, %edx
+ 19899 11e9a 488D3500 		leaq	.LC7(%rip), %rsi
+ 19899      000000
+ 19900 11ea1 488D3D00 		leaq	.LC1(%rip), %rdi
+ 19900      000000
+ 19901 11ea8 B8000000 		movl	$0, %eax
+ 19901      00
+ 19902 11ead E8000000 		call	KDbgMsg at PLT
+ 19902      00
+ 19903              	.L340:
+ 19904              	.LBE4666:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 19905              		.loc 2 938 0
+ 19906 11eb2 660F6F05 		movdqa	FF_tab(%rip), %xmm0
+ 19906      00000000 
+ 19907 11eba F30F7F85 		movdqu	%xmm0, -1296(%rbp)
+ 19907      F0FAFFFF 
+ 19908 11ec2 F30F6F85 		movdqu	-1552(%rbp), %xmm0
+ 19908      F0F9FFFF 
+ 19909 11eca F30F7F85 		movdqu	%xmm0, -1312(%rbp)
+ 19909      E0FAFFFF 
+ 19910 11ed2 F30F6F85 		movdqu	-1296(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 600
+
+
+ 19910      F0FAFFFF 
+ 19911 11eda F30F7F85 		movdqu	%xmm0, -1264(%rbp)
+ 19911      10FBFFFF 
+ 19912 11ee2 F30F6F85 		movdqu	-1312(%rbp), %xmm0
+ 19912      E0FAFFFF 
+ 19913 11eea F30F7F85 		movdqu	%xmm0, -1280(%rbp)
+ 19913      00FBFFFF 
+ 19914              	.LBB4667:
+ 19915              	.LBB4668:
+ 19916              	.LBB4669:
+ 19917              	.LBB4670:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 19918              		.loc 3 529 0
+ 19919 11ef2 F30F6F8D 		movdqu	-1280(%rbp), %xmm1
+ 19919      00FBFFFF 
+ 19920 11efa F30F6F85 		movdqu	-1264(%rbp), %xmm0
+ 19920      10FBFFFF 
+ 19921 11f02 660F3800 		pshufb	%xmm1, %xmm0
+ 19921      C1
+ 19922              	.LBE4670:
+ 19923              	.LBE4669:
+ 19924              	.LBE4668:
+ 19925              	.LBE4667:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 19926              		.loc 2 938 0
+ 19927 11f07 F30F7F85 		movdqu	%xmm0, -1552(%rbp)
+ 19927      F0F9FFFF 
+ 19928 11f0f F30F6F85 		movdqu	-1536(%rbp), %xmm0
+ 19928      00FAFFFF 
+ 19929 11f17 F30F7F85 		movdqu	%xmm0, -1232(%rbp)
+ 19929      30FBFFFF 
+ 19930 11f1f F30F6F85 		movdqu	-1552(%rbp), %xmm0
+ 19930      F0F9FFFF 
+ 19931 11f27 F30F7F85 		movdqu	%xmm0, -1248(%rbp)
+ 19931      20FBFFFF 
+ 19932              	.LBB4671:
+ 19933              	.LBB4672:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 19934              		.loc 2 178 0
+ 19935 11f2f F30F6F85 		movdqu	-1248(%rbp), %xmm0
+ 19935      20FBFFFF 
+ 19936 11f37 F30F6F8D 		movdqu	-1232(%rbp), %xmm1
+ 19936      30FBFFFF 
+ 19937 11f3f 660FEFC1 		pxor	%xmm1, %xmm0
+ 19938              	.LBE4672:
+ 19939              	.LBE4671:
+ 19940              	.LBE4651:
+ 19941              	.LBE4650:
+1119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f4 = AESBCMEMBER(FF_mul) (f4,2);
+ 19942              		.loc 2 1119 0
+ 19943 11f43 660F7F85 		movdqa	%xmm0, -3584(%rbp)
+ 19943      00F2FFFF 
+ 19944 11f4b 660F6F85 		movdqa	-3600(%rbp), %xmm0
+ 19944      F0F1FFFF 
+ 19945 11f53 F30F7F85 		movdqu	%xmm0, -1200(%rbp)
+ 19945      50FBFFFF 
+ 19946              	.LBB4673:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 601
+
+
+ 19947              	.LBB4674:
+ 19948              	.LBB4675:
+ 933:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("state", state);
+ 19949              		.loc 2 933 0
+ 19950 11f5b F30F6F85 		movdqu	-1200(%rbp), %xmm0
+ 19950      50FBFFFF 
+ 19951 11f63 F30F7F85 		movdqu	%xmm0, -3200(%rbp)
+ 19951      80F3FFFF 
+ 19952 11f6b E8000000 		call	KDbgWriterGet at PLT
+ 19952      00
+ 19953 11f70 4885C0   		testq	%rax, %rax
+ 19954 11f73 7479     		je	.L342
+ 19955 11f75 BF010000 		movl	$1, %edi
+ 19955      00
+ 19956 11f7a E8000000 		call	KDbgCondToFlag at PLT
+ 19956      00
+ 19957 11f7f 4889C6   		movq	%rax, %rsi
+ 19958 11f82 BF100000 		movl	$16, %edi
+ 19958      00
+ 19959 11f87 E8000000 		call	KDbgTestModConds at PLT
+ 19959      00
+ 19960 11f8c 84C0     		testb	%al, %al
+ 19961 11f8e 745E     		je	.L342
+ 19962 11f90 8B858CF3 		movl	-3188(%rbp), %eax
+ 19962      FFFF
+ 19963 11f96 89C7     		movl	%eax, %edi
+ 19964 11f98 E863E0FE 		call	bswap_32
+ 19964      FF
+ 19965 11f9d 4189C5   		movl	%eax, %r13d
+ 19966 11fa0 8B8588F3 		movl	-3192(%rbp), %eax
+ 19966      FFFF
+ 19967 11fa6 89C7     		movl	%eax, %edi
+ 19968 11fa8 E853E0FE 		call	bswap_32
+ 19968      FF
+ 19969 11fad 4189C4   		movl	%eax, %r12d
+ 19970 11fb0 8B8584F3 		movl	-3196(%rbp), %eax
+ 19970      FFFF
+ 19971 11fb6 89C7     		movl	%eax, %edi
+ 19972 11fb8 E843E0FE 		call	bswap_32
+ 19972      FF
+ 19973 11fbd 89C3     		movl	%eax, %ebx
+ 19974 11fbf 8B8580F3 		movl	-3200(%rbp), %eax
+ 19974      FFFF
+ 19975 11fc5 89C7     		movl	%eax, %edi
+ 19976 11fc7 E834E0FE 		call	bswap_32
+ 19976      FF
+ 19977 11fcc 4589E9   		movl	%r13d, %r9d
+ 19978 11fcf 4589E0   		movl	%r12d, %r8d
+ 19979 11fd2 89D9     		movl	%ebx, %ecx
+ 19980 11fd4 89C2     		movl	%eax, %edx
+ 19981 11fd6 488D3500 		leaq	.LC5(%rip), %rsi
+ 19981      000000
+ 19982 11fdd 488D3D00 		leaq	.LC1(%rip), %rdi
+ 19982      000000
+ 19983 11fe4 B8000000 		movl	$0, %eax
+ 19983      00
+ 19984 11fe9 E8000000 		call	KDbgMsg at PLT
+
GAS LISTING /tmp/ccjbMjHD.s 			page 602
+
+
+ 19984      00
+ 19985              	.L342:
+ 19986              	.LBE4675:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 19987              		.loc 2 934 0
+ 19988 11fee B8050000 		movl	$5, %eax
+ 19988      00
+ 19989 11ff3 F30F6F85 		movdqu	-1200(%rbp), %xmm0
+ 19989      50FBFFFF 
+ 19990 11ffb F30F7F85 		movdqu	%xmm0, -1136(%rbp)
+ 19990      90FBFFFF 
+ 19991 12003 89858CFB 		movl	%eax, -1140(%rbp)
+ 19991      FFFF
+ 19992 12009 F30F6F85 		movdqu	-1136(%rbp), %xmm0
+ 19992      90FBFFFF 
+ 19993 12011 F30F7F85 		movdqu	%xmm0, -1104(%rbp)
+ 19993      B0FBFFFF 
+ 19994 12019 8B858CFB 		movl	-1140(%rbp), %eax
+ 19994      FFFF
+ 19995 1201f 8985ACFB 		movl	%eax, -1108(%rbp)
+ 19995      FFFF
+ 19996              	.LBB4676:
+ 19997              	.LBB4677:
+ 19998              	.LBB4678:
+ 19999              	.LBB4679:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 20000              		.loc 3 433 0
+ 20001 12025 F30F6F85 		movdqu	-1104(%rbp), %xmm0
+ 20001      B0FBFFFF 
+ 20002 1202d 8B85ACFB 		movl	-1108(%rbp), %eax
+ 20002      FFFF
+ 20003 12033 8985E4F1 		movl	%eax, -3612(%rbp)
+ 20003      FFFF
+ 20004 12039 660F6E8D 		movd	-3612(%rbp), %xmm1
+ 20004      E4F1FFFF 
+ 20005 12041 660FD2C1 		psrld	%xmm1, %xmm0
+ 20006              	.LBE4679:
+ 20007              	.LBE4678:
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = op_PSRLDI128 (v, k);
+ 20008              		.loc 2 488 0
+ 20009 12045 F30F7F85 		movdqu	%xmm0, -1136(%rbp)
+ 20009      90FBFFFF 
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 20010              		.loc 2 489 0
+ 20011 1204d B8080000 		movl	$8, %eax
+ 20011      00
+ 20012 12052 83BD8CFB 		cmpl	$8, -1140(%rbp)
+ 20012      FFFF08
+ 20013 12059 0F4E858C 		cmovle	-1140(%rbp), %eax
+ 20013      FBFFFF
+ 20014 12060 4898     		cltq
+ 20015 12062 4889C2   		movq	%rax, %rdx
+ 20016 12065 48C1E204 		salq	$4, %rdx
+ 20017 12069 488D0500 		leaq	sr_mask.7327(%rip), %rax
+ 20017      000000
+ 20018 12070 660F6F04 		movdqa	(%rdx,%rax), %xmm0
+ 20018      02
+
GAS LISTING /tmp/ccjbMjHD.s 			page 603
+
+
+ 20019 12075 F30F6F8D 		movdqu	-1136(%rbp), %xmm1
+ 20019      90FBFFFF 
+ 20020 1207d F30F7F8D 		movdqu	%xmm1, -1072(%rbp)
+ 20020      D0FBFFFF 
+ 20021 12085 F30F7F85 		movdqu	%xmm0, -1088(%rbp)
+ 20021      C0FBFFFF 
+ 20022              	.LBB4680:
+ 20023              	.LBB4681:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 20024              		.loc 2 206 0
+ 20025 1208d F30F6F85 		movdqu	-1088(%rbp), %xmm0
+ 20025      C0FBFFFF 
+ 20026 12095 F30F6F8D 		movdqu	-1072(%rbp), %xmm1
+ 20026      D0FBFFFF 
+ 20027 1209d 660FDBC1 		pand	%xmm1, %xmm0
+ 20028              	.LBE4681:
+ 20029              	.LBE4680:
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     v = AESBCMEMBER(VecAnd) (v, sr_mask[(k<8)?k:8]);
+ 20030              		.loc 2 489 0
+ 20031 120a1 F30F7F85 		movdqu	%xmm0, -1136(%rbp)
+ 20031      90FBFFFF 
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v;
+ 20032              		.loc 2 490 0
+ 20033 120a9 F30F6F85 		movdqu	-1136(%rbp), %xmm0
+ 20033      90FBFFFF 
+ 20034              	.LBE4677:
+ 20035              	.LBE4676:
+ 934:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(VecSRLBI) (state, 8 - bits);
+ 20036              		.loc 2 934 0
+ 20037 120b1 F30F7F85 		movdqu	%xmm0, -1184(%rbp)
+ 20037      60FBFFFF 
+ 20038              	.LBB4682:
+ 935:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("sr", sr);
+ 20039              		.loc 2 935 0
+ 20040 120b9 F30F6F85 		movdqu	-1184(%rbp), %xmm0
+ 20040      60FBFFFF 
+ 20041 120c1 F30F7F85 		movdqu	%xmm0, -3216(%rbp)
+ 20041      70F3FFFF 
+ 20042 120c9 E8000000 		call	KDbgWriterGet at PLT
+ 20042      00
+ 20043 120ce 4885C0   		testq	%rax, %rax
+ 20044 120d1 7479     		je	.L344
+ 20045 120d3 BF010000 		movl	$1, %edi
+ 20045      00
+ 20046 120d8 E8000000 		call	KDbgCondToFlag at PLT
+ 20046      00
+ 20047 120dd 4889C6   		movq	%rax, %rsi
+ 20048 120e0 BF100000 		movl	$16, %edi
+ 20048      00
+ 20049 120e5 E8000000 		call	KDbgTestModConds at PLT
+ 20049      00
+ 20050 120ea 84C0     		testb	%al, %al
+ 20051 120ec 745E     		je	.L344
+ 20052 120ee 8B857CF3 		movl	-3204(%rbp), %eax
+ 20052      FFFF
+ 20053 120f4 89C7     		movl	%eax, %edi
+ 20054 120f6 E805DFFE 		call	bswap_32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 604
+
+
+ 20054      FF
+ 20055 120fb 4189C5   		movl	%eax, %r13d
+ 20056 120fe 8B8578F3 		movl	-3208(%rbp), %eax
+ 20056      FFFF
+ 20057 12104 89C7     		movl	%eax, %edi
+ 20058 12106 E8F5DEFE 		call	bswap_32
+ 20058      FF
+ 20059 1210b 4189C4   		movl	%eax, %r12d
+ 20060 1210e 8B8574F3 		movl	-3212(%rbp), %eax
+ 20060      FFFF
+ 20061 12114 89C7     		movl	%eax, %edi
+ 20062 12116 E8E5DEFE 		call	bswap_32
+ 20062      FF
+ 20063 1211b 89C3     		movl	%eax, %ebx
+ 20064 1211d 8B8570F3 		movl	-3216(%rbp), %eax
+ 20064      FFFF
+ 20065 12123 89C7     		movl	%eax, %edi
+ 20066 12125 E8D6DEFE 		call	bswap_32
+ 20066      FF
+ 20067 1212a 4589E9   		movl	%r13d, %r9d
+ 20068 1212d 4589E0   		movl	%r12d, %r8d
+ 20069 12130 89D9     		movl	%ebx, %ecx
+ 20070 12132 89C2     		movl	%eax, %edx
+ 20071 12134 488D3500 		leaq	.LC6(%rip), %rsi
+ 20071      000000
+ 20072 1213b 488D3D00 		leaq	.LC1(%rip), %rdi
+ 20072      000000
+ 20073 12142 B8000000 		movl	$0, %eax
+ 20073      00
+ 20074 12147 E8000000 		call	KDbgMsg at PLT
+ 20074      00
+ 20075              	.L344:
+ 20076 1214c F30F6F85 		movdqu	-1200(%rbp), %xmm0
+ 20076      50FBFFFF 
+ 20077 12154 F30F7F85 		movdqu	%xmm0, -1040(%rbp)
+ 20077      F0FBFFFF 
+ 20078              	.LBE4682:
+ 20079              	.LBB4683:
+ 20080              	.LBB4684:
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     CipherVec vv = v;
+ 20081              		.loc 2 426 0
+ 20082 1215c F30F6F85 		movdqu	-1040(%rbp), %xmm0
+ 20082      F0FBFFFF 
+ 20083 12164 F30F7F85 		movdqu	%xmm0, -1024(%rbp)
+ 20083      00FCFFFF 
+ 20084 1216c F30F6F85 		movdqu	-1024(%rbp), %xmm0
+ 20084      00FCFFFF 
+ 20085 12174 F30F7F85 		movdqu	%xmm0, -992(%rbp)
+ 20085      20FCFFFF 
+ 20086              	.LBB4685:
+ 20087              	.LBB4686:
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pslldi128 ((v128_i32_t)vin, bit_count);
+ 20088              		.loc 3 416 0
+ 20089 1217c F30F6F85 		movdqu	-992(%rbp), %xmm0
+ 20089      20FCFFFF 
+ 20090 12184 660F72F0 		pslld	$3, %xmm0
+ 20090      03
+
GAS LISTING /tmp/ccjbMjHD.s 			page 605
+
+
+ 20091              	.LBE4686:
+ 20092              	.LBE4685:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = op_PSLLDI128 (vv, k);
+ 20093              		.loc 2 433 0
+ 20094 12189 F30F7F85 		movdqu	%xmm0, -1024(%rbp)
+ 20094      00FCFFFF 
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 20095              		.loc 2 435 0
+ 20096 12191 B8030000 		movl	$3, %eax
+ 20096      00
+ 20097 12196 4898     		cltq
+ 20098 12198 4889C2   		movq	%rax, %rdx
+ 20099 1219b 48C1E204 		salq	$4, %rdx
+ 20100 1219f 488D0500 		leaq	sl_mask.7310(%rip), %rax
+ 20100      000000
+ 20101 121a6 660F6F04 		movdqa	(%rdx,%rax), %xmm0
+ 20101      02
+ 20102 121ab F30F6F8D 		movdqu	-1024(%rbp), %xmm1
+ 20102      00FCFFFF 
+ 20103 121b3 F30F7F8D 		movdqu	%xmm1, -960(%rbp)
+ 20103      40FCFFFF 
+ 20104 121bb F30F7F85 		movdqu	%xmm0, -976(%rbp)
+ 20104      30FCFFFF 
+ 20105              	.LBB4687:
+ 20106              	.LBB4688:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 20107              		.loc 2 206 0
+ 20108 121c3 F30F6F85 		movdqu	-976(%rbp), %xmm0
+ 20108      30FCFFFF 
+ 20109 121cb F30F6F8D 		movdqu	-960(%rbp), %xmm1
+ 20109      40FCFFFF 
+ 20110 121d3 660FDBC1 		pand	%xmm1, %xmm0
+ 20111              	.LBE4688:
+ 20112              	.LBE4687:
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     vv = AESBCMEMBER(VecAnd) (vv, sl_mask[k]);
+ 20113              		.loc 2 435 0
+ 20114 121d7 F30F7F85 		movdqu	%xmm0, -1024(%rbp)
+ 20114      00FCFFFF 
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return vv;
+ 20115              		.loc 2 437 0
+ 20116 121df F30F6F85 		movdqu	-1024(%rbp), %xmm0
+ 20116      00FCFFFF 
+ 20117              	.LBE4684:
+ 20118              	.LBE4683:
+ 936:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sl = AESBCMEMBER(VecSLLBI) (state, bits);
+ 20119              		.loc 2 936 0
+ 20120 121e7 F30F7F85 		movdqu	%xmm0, -1168(%rbp)
+ 20120      70FBFFFF 
+ 20121              	.LBB4689:
+ 937:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_CIPHER_VECTOR ("sl", sl);
+ 20122              		.loc 2 937 0
+ 20123 121ef F30F6F85 		movdqu	-1168(%rbp), %xmm0
+ 20123      70FBFFFF 
+ 20124 121f7 F30F7F85 		movdqu	%xmm0, -3232(%rbp)
+ 20124      60F3FFFF 
+ 20125 121ff E8000000 		call	KDbgWriterGet at PLT
+ 20125      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 606
+
+
+ 20126 12204 4885C0   		testq	%rax, %rax
+ 20127 12207 7479     		je	.L346
+ 20128 12209 BF010000 		movl	$1, %edi
+ 20128      00
+ 20129 1220e E8000000 		call	KDbgCondToFlag at PLT
+ 20129      00
+ 20130 12213 4889C6   		movq	%rax, %rsi
+ 20131 12216 BF100000 		movl	$16, %edi
+ 20131      00
+ 20132 1221b E8000000 		call	KDbgTestModConds at PLT
+ 20132      00
+ 20133 12220 84C0     		testb	%al, %al
+ 20134 12222 745E     		je	.L346
+ 20135 12224 8B856CF3 		movl	-3220(%rbp), %eax
+ 20135      FFFF
+ 20136 1222a 89C7     		movl	%eax, %edi
+ 20137 1222c E8CFDDFE 		call	bswap_32
+ 20137      FF
+ 20138 12231 4189C5   		movl	%eax, %r13d
+ 20139 12234 8B8568F3 		movl	-3224(%rbp), %eax
+ 20139      FFFF
+ 20140 1223a 89C7     		movl	%eax, %edi
+ 20141 1223c E8BFDDFE 		call	bswap_32
+ 20141      FF
+ 20142 12241 4189C4   		movl	%eax, %r12d
+ 20143 12244 8B8564F3 		movl	-3228(%rbp), %eax
+ 20143      FFFF
+ 20144 1224a 89C7     		movl	%eax, %edi
+ 20145 1224c E8AFDDFE 		call	bswap_32
+ 20145      FF
+ 20146 12251 89C3     		movl	%eax, %ebx
+ 20147 12253 8B8560F3 		movl	-3232(%rbp), %eax
+ 20147      FFFF
+ 20148 12259 89C7     		movl	%eax, %edi
+ 20149 1225b E8A0DDFE 		call	bswap_32
+ 20149      FF
+ 20150 12260 4589E9   		movl	%r13d, %r9d
+ 20151 12263 4589E0   		movl	%r12d, %r8d
+ 20152 12266 89D9     		movl	%ebx, %ecx
+ 20153 12268 89C2     		movl	%eax, %edx
+ 20154 1226a 488D3500 		leaq	.LC7(%rip), %rsi
+ 20154      000000
+ 20155 12271 488D3D00 		leaq	.LC1(%rip), %rdi
+ 20155      000000
+ 20156 12278 B8000000 		movl	$0, %eax
+ 20156      00
+ 20157 1227d E8000000 		call	KDbgMsg at PLT
+ 20157      00
+ 20158              	.L346:
+ 20159              	.LBE4689:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 20160              		.loc 2 938 0
+ 20161 12282 660F6F05 		movdqa	FF_tab(%rip), %xmm0
+ 20161      00000000 
+ 20162 1228a F30F7F85 		movdqu	%xmm0, -928(%rbp)
+ 20162      60FCFFFF 
+ 20163 12292 F30F6F85 		movdqu	-1184(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 607
+
+
+ 20163      60FBFFFF 
+ 20164 1229a F30F7F85 		movdqu	%xmm0, -944(%rbp)
+ 20164      50FCFFFF 
+ 20165 122a2 F30F6F85 		movdqu	-928(%rbp), %xmm0
+ 20165      60FCFFFF 
+ 20166 122aa F30F7F85 		movdqu	%xmm0, -896(%rbp)
+ 20166      80FCFFFF 
+ 20167 122b2 F30F6F85 		movdqu	-944(%rbp), %xmm0
+ 20167      50FCFFFF 
+ 20168 122ba F30F7F85 		movdqu	%xmm0, -912(%rbp)
+ 20168      70FCFFFF 
+ 20169              	.LBB4690:
+ 20170              	.LBB4691:
+ 20171              	.LBB4692:
+ 20172              	.LBB4693:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 20173              		.loc 3 529 0
+ 20174 122c2 F30F6F8D 		movdqu	-912(%rbp), %xmm1
+ 20174      70FCFFFF 
+ 20175 122ca F30F6F85 		movdqu	-896(%rbp), %xmm0
+ 20175      80FCFFFF 
+ 20176 122d2 660F3800 		pshufb	%xmm1, %xmm0
+ 20176      C1
+ 20177              	.LBE4693:
+ 20178              	.LBE4692:
+ 20179              	.LBE4691:
+ 20180              	.LBE4690:
+ 938:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     sr = AESBCMEMBER(PackShuffleBytes) (FF_tab, sr);
+ 20181              		.loc 2 938 0
+ 20182 122d7 F30F7F85 		movdqu	%xmm0, -1184(%rbp)
+ 20182      60FBFFFF 
+ 20183 122df F30F6F85 		movdqu	-1168(%rbp), %xmm0
+ 20183      70FBFFFF 
+ 20184 122e7 F30F7F85 		movdqu	%xmm0, -864(%rbp)
+ 20184      A0FCFFFF 
+ 20185 122ef F30F6F85 		movdqu	-1184(%rbp), %xmm0
+ 20185      60FBFFFF 
+ 20186 122f7 F30F7F85 		movdqu	%xmm0, -880(%rbp)
+ 20186      90FCFFFF 
+ 20187              	.LBB4694:
+ 20188              	.LBB4695:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 20189              		.loc 2 178 0
+ 20190 122ff F30F6F85 		movdqu	-880(%rbp), %xmm0
+ 20190      90FCFFFF 
+ 20191 12307 F30F6F8D 		movdqu	-864(%rbp), %xmm1
+ 20191      A0FCFFFF 
+ 20192 1230f 660FEFC1 		pxor	%xmm1, %xmm0
+ 20193              	.LBE4695:
+ 20194              	.LBE4694:
+ 20195              	.LBE4674:
+ 20196              	.LBE4673:
+1120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     f8 = AESBCMEMBER(FF_mul) (f8,3);
+ 20197              		.loc 2 1120 0
+ 20198 12313 660F7F85 		movdqa	%xmm0, -3600(%rbp)
+ 20198      F0F1FFFF 
+ 20199 1231b F30F6F85 		movdqu	-2368(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 608
+
+
+ 20199      C0F6FFFF 
+ 20200 12323 F30F7F85 		movdqu	%xmm0, -832(%rbp)
+ 20200      C0FCFFFF 
+ 20201 1232b 660F6F85 		movdqa	-3568(%rbp), %xmm0
+ 20201      10F2FFFF 
+ 20202 12333 F30F7F85 		movdqu	%xmm0, -848(%rbp)
+ 20202      B0FCFFFF 
+ 20203              	.LBB4696:
+ 20204              	.LBB4697:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 20205              		.loc 2 178 0
+ 20206 1233b F30F6F85 		movdqu	-848(%rbp), %xmm0
+ 20206      B0FCFFFF 
+ 20207 12343 F30F6F8D 		movdqu	-832(%rbp), %xmm1
+ 20207      C0FCFFFF 
+ 20208 1234b 660FEFC1 		pxor	%xmm1, %xmm0
+ 20209              	.LBE4697:
+ 20210              	.LBE4696:
+1142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f2);
+ 20211              		.loc 2 1142 0
+ 20212 1234f F30F7F85 		movdqu	%xmm0, -2368(%rbp)
+ 20212      C0F6FFFF 
+ 20213 12357 F30F6F85 		movdqu	-2368(%rbp), %xmm0
+ 20213      C0F6FFFF 
+ 20214 1235f F30F7F85 		movdqu	%xmm0, -800(%rbp)
+ 20214      E0FCFFFF 
+ 20215 12367 660F6F8D 		movdqa	-3584(%rbp), %xmm1
+ 20215      00F2FFFF 
+ 20216 1236f F30F7F8D 		movdqu	%xmm1, -816(%rbp)
+ 20216      D0FCFFFF 
+ 20217              	.LBB4698:
+ 20218              	.LBB4699:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 20219              		.loc 2 178 0
+ 20220 12377 F30F6F85 		movdqu	-816(%rbp), %xmm0
+ 20220      D0FCFFFF 
+ 20221 1237f F30F6F8D 		movdqu	-800(%rbp), %xmm1
+ 20221      E0FCFFFF 
+ 20222 12387 660FEFC1 		pxor	%xmm1, %xmm0
+ 20223              	.LBE4699:
+ 20224              	.LBE4698:
+1143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f4);
+ 20225              		.loc 2 1143 0
+ 20226 1238b F30F7F85 		movdqu	%xmm0, -2368(%rbp)
+ 20226      C0F6FFFF 
+ 20227 12393 F30F6F85 		movdqu	-2368(%rbp), %xmm0
+ 20227      C0F6FFFF 
+ 20228 1239b F30F7F85 		movdqu	%xmm0, -768(%rbp)
+ 20228      00FDFFFF 
+ 20229 123a3 660F6F85 		movdqa	-3600(%rbp), %xmm0
+ 20229      F0F1FFFF 
+ 20230 123ab F30F7F85 		movdqu	%xmm0, -784(%rbp)
+ 20230      F0FCFFFF 
+ 20231              	.LBB4700:
+ 20232              	.LBB4701:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 20233              		.loc 2 178 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 609
+
+
+ 20234 123b3 F30F6F85 		movdqu	-784(%rbp), %xmm0
+ 20234      F0FCFFFF 
+ 20235 123bb F30F6F8D 		movdqu	-768(%rbp), %xmm1
+ 20235      00FDFFFF 
+ 20236 123c3 660FEFC1 		pxor	%xmm1, %xmm0
+ 20237              	.LBE4701:
+ 20238              	.LBE4700:
+1144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(VecXor) (state, f8);
+ 20239              		.loc 2 1144 0
+ 20240 123c7 F30F7F85 		movdqu	%xmm0, -2368(%rbp)
+ 20240      C0F6FFFF 
+1148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 20241              		.loc 2 1148 0
+ 20242 123cf F30F6F85 		movdqu	-2368(%rbp), %xmm0
+ 20242      C0F6FFFF 
+ 20243              	.LBE4598:
+ 20244              	.LBE4597:
+2201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvMixColumns) (state);
+ 20245              		.loc 2 2201 0
+ 20246 123d7 F30F7F85 		movdqu	%xmm0, -2976(%rbp)
+ 20246      60F4FFFF 
+2204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+ 20247              		.loc 2 2204 0
+ 20248 123df F30F6F85 		movdqu	-2976(%rbp), %xmm0
+ 20248      60F4FFFF 
+ 20249 123e7 F30F7F85 		movdqu	%xmm0, -2944(%rbp)
+ 20249      80F4FFFF 
+ 20250              	.LBB4702:
+2206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvMixCo", mstate);
+ 20251              		.loc 2 2206 0
+ 20252 123ef F30F6F85 		movdqu	-2944(%rbp), %xmm0
+ 20252      80F4FFFF 
+ 20253 123f7 F30F7F85 		movdqu	%xmm0, -3392(%rbp)
+ 20253      C0F2FFFF 
+ 20254 123ff E8000000 		call	KDbgWriterGet at PLT
+ 20254      00
+ 20255 12404 4885C0   		testq	%rax, %rax
+ 20256 12407 7479     		je	.L348
+ 20257 12409 BF030000 		movl	$3, %edi
+ 20257      00
+ 20258 1240e E8000000 		call	KDbgCondToFlag at PLT
+ 20258      00
+ 20259 12413 4889C6   		movq	%rax, %rsi
+ 20260 12416 BF100000 		movl	$16, %edi
+ 20260      00
+ 20261 1241b E8000000 		call	KDbgTestModConds at PLT
+ 20261      00
+ 20262 12420 84C0     		testb	%al, %al
+ 20263 12422 745E     		je	.L348
+ 20264 12424 8B85CCF2 		movl	-3380(%rbp), %eax
+ 20264      FFFF
+ 20265 1242a 89C7     		movl	%eax, %edi
+ 20266 1242c E8CFDBFE 		call	bswap_32
+ 20266      FF
+ 20267 12431 4189C5   		movl	%eax, %r13d
+ 20268 12434 8B85C8F2 		movl	-3384(%rbp), %eax
+ 20268      FFFF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 610
+
+
+ 20269 1243a 89C7     		movl	%eax, %edi
+ 20270 1243c E8BFDBFE 		call	bswap_32
+ 20270      FF
+ 20271 12441 4189C4   		movl	%eax, %r12d
+ 20272 12444 8B85C4F2 		movl	-3388(%rbp), %eax
+ 20272      FFFF
+ 20273 1244a 89C7     		movl	%eax, %edi
+ 20274 1244c E8AFDBFE 		call	bswap_32
+ 20274      FF
+ 20275 12451 89C3     		movl	%eax, %ebx
+ 20276 12453 8B85C0F2 		movl	-3392(%rbp), %eax
+ 20276      FFFF
+ 20277 12459 89C7     		movl	%eax, %edi
+ 20278 1245b E8A0DBFE 		call	bswap_32
+ 20278      FF
+ 20279 12460 4589E9   		movl	%r13d, %r9d
+ 20280 12463 4589E0   		movl	%r12d, %r8d
+ 20281 12466 89D9     		movl	%ebx, %ecx
+ 20282 12468 89C2     		movl	%eax, %edx
+ 20283 1246a 488D3500 		leaq	.LC17(%rip), %rsi
+ 20283      000000
+ 20284 12471 488D3D00 		leaq	.LC1(%rip), %rdi
+ 20284      000000
+ 20285 12478 B8000000 		movl	$0, %eax
+ 20285      00
+ 20286 1247d E8000000 		call	KDbgMsg at PLT
+ 20286      00
+ 20287              	.L348:
+ 20288 12482 F30F6F85 		movdqu	-2976(%rbp), %xmm0
+ 20288      60F4FFFF 
+ 20289 1248a F30F7F85 		movdqu	%xmm0, -736(%rbp)
+ 20289      20FDFFFF 
+ 20290 12492 F30F6F85 		movdqu	-2992(%rbp), %xmm0
+ 20290      50F4FFFF 
+ 20291 1249a F30F7F85 		movdqu	%xmm0, -752(%rbp)
+ 20291      10FDFFFF 
+ 20292 124a2 F30F6F85 		movdqu	-736(%rbp), %xmm0
+ 20292      20FDFFFF 
+ 20293 124aa F30F7F85 		movdqu	%xmm0, -704(%rbp)
+ 20293      40FDFFFF 
+ 20294 124b2 F30F6F85 		movdqu	-752(%rbp), %xmm0
+ 20294      10FDFFFF 
+ 20295 124ba F30F7F85 		movdqu	%xmm0, -720(%rbp)
+ 20295      30FDFFFF 
+ 20296              	.LBE4702:
+ 20297              	.LBB4703:
+ 20298              	.LBB4704:
+ 20299              	.LBB4705:
+ 20300              	.LBB4706:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 20301              		.loc 2 178 0
+ 20302 124c2 F30F6F85 		movdqu	-720(%rbp), %xmm0
+ 20302      30FDFFFF 
+ 20303 124ca F30F6F8D 		movdqu	-704(%rbp), %xmm1
+ 20303      40FDFFFF 
+ 20304 124d2 660FEFC1 		pxor	%xmm1, %xmm0
+ 20305              	.LBE4706:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 611
+
+
+ 20306              	.LBE4705:
+ 20307              	.LBE4704:
+ 20308              	.LBE4703:
+2209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 20309              		.loc 2 2209 0
+ 20310 124d6 F30F7F85 		movdqu	%xmm0, -2976(%rbp)
+ 20310      60F4FFFF 
+2213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     mstate = state;
+ 20311              		.loc 2 2213 0
+ 20312 124de F30F6F85 		movdqu	-2976(%rbp), %xmm0
+ 20312      60F4FFFF 
+ 20313 124e6 F30F7F85 		movdqu	%xmm0, -2944(%rbp)
+ 20313      80F4FFFF 
+ 20314              	.LBB4707:
+2215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Round Key", mround_keys);
+ 20315              		.loc 2 2215 0
+ 20316 124ee F30F6F85 		movdqu	-2960(%rbp), %xmm0
+ 20316      70F4FFFF 
+ 20317 124f6 F30F7F85 		movdqu	%xmm0, -3408(%rbp)
+ 20317      B0F2FFFF 
+ 20318 124fe E8000000 		call	KDbgWriterGet at PLT
+ 20318      00
+ 20319 12503 4885C0   		testq	%rax, %rax
+ 20320 12506 7479     		je	.L350
+ 20321 12508 BF030000 		movl	$3, %edi
+ 20321      00
+ 20322 1250d E8000000 		call	KDbgCondToFlag at PLT
+ 20322      00
+ 20323 12512 4889C6   		movq	%rax, %rsi
+ 20324 12515 BF100000 		movl	$16, %edi
+ 20324      00
+ 20325 1251a E8000000 		call	KDbgTestModConds at PLT
+ 20325      00
+ 20326 1251f 84C0     		testb	%al, %al
+ 20327 12521 745E     		je	.L350
+ 20328 12523 8B85BCF2 		movl	-3396(%rbp), %eax
+ 20328      FFFF
+ 20329 12529 89C7     		movl	%eax, %edi
+ 20330 1252b E8D0DAFE 		call	bswap_32
+ 20330      FF
+ 20331 12530 4189C5   		movl	%eax, %r13d
+ 20332 12533 8B85B8F2 		movl	-3400(%rbp), %eax
+ 20332      FFFF
+ 20333 12539 89C7     		movl	%eax, %edi
+ 20334 1253b E8C0DAFE 		call	bswap_32
+ 20334      FF
+ 20335 12540 4189C4   		movl	%eax, %r12d
+ 20336 12543 8B85B4F2 		movl	-3404(%rbp), %eax
+ 20336      FFFF
+ 20337 12549 89C7     		movl	%eax, %edi
+ 20338 1254b E8B0DAFE 		call	bswap_32
+ 20338      FF
+ 20339 12550 89C3     		movl	%eax, %ebx
+ 20340 12552 8B85B0F2 		movl	-3408(%rbp), %eax
+ 20340      FFFF
+ 20341 12558 89C7     		movl	%eax, %edi
+ 20342 1255a E8A1DAFE 		call	bswap_32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 612
+
+
+ 20342      FF
+ 20343 1255f 4589E9   		movl	%r13d, %r9d
+ 20344 12562 4589E0   		movl	%r12d, %r8d
+ 20345 12565 89D9     		movl	%ebx, %ecx
+ 20346 12567 89C2     		movl	%eax, %edx
+ 20347 12569 488D3500 		leaq	.LC9(%rip), %rsi
+ 20347      000000
+ 20348 12570 488D3D00 		leaq	.LC1(%rip), %rdi
+ 20348      000000
+ 20349 12577 B8000000 		movl	$0, %eax
+ 20349      00
+ 20350 1257c E8000000 		call	KDbgMsg at PLT
+ 20350      00
+ 20351              	.L350:
+ 20352              	.LBE4707:
+ 20353              	.LBB4708:
+2217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("End of Round", mstate);
+ 20354              		.loc 2 2217 0
+ 20355 12581 F30F6F85 		movdqu	-2944(%rbp), %xmm0
+ 20355      80F4FFFF 
+ 20356 12589 F30F7F85 		movdqu	%xmm0, -3424(%rbp)
+ 20356      A0F2FFFF 
+ 20357 12591 E8000000 		call	KDbgWriterGet at PLT
+ 20357      00
+ 20358 12596 4885C0   		testq	%rax, %rax
+ 20359 12599 7479     		je	.L352
+ 20360 1259b BF030000 		movl	$3, %edi
+ 20360      00
+ 20361 125a0 E8000000 		call	KDbgCondToFlag at PLT
+ 20361      00
+ 20362 125a5 4889C6   		movq	%rax, %rsi
+ 20363 125a8 BF100000 		movl	$16, %edi
+ 20363      00
+ 20364 125ad E8000000 		call	KDbgTestModConds at PLT
+ 20364      00
+ 20365 125b2 84C0     		testb	%al, %al
+ 20366 125b4 745E     		je	.L352
+ 20367 125b6 8B85ACF2 		movl	-3412(%rbp), %eax
+ 20367      FFFF
+ 20368 125bc 89C7     		movl	%eax, %edi
+ 20369 125be E83DDAFE 		call	bswap_32
+ 20369      FF
+ 20370 125c3 4189C5   		movl	%eax, %r13d
+ 20371 125c6 8B85A8F2 		movl	-3416(%rbp), %eax
+ 20371      FFFF
+ 20372 125cc 89C7     		movl	%eax, %edi
+ 20373 125ce E82DDAFE 		call	bswap_32
+ 20373      FF
+ 20374 125d3 4189C4   		movl	%eax, %r12d
+ 20375 125d6 8B85A4F2 		movl	-3420(%rbp), %eax
+ 20375      FFFF
+ 20376 125dc 89C7     		movl	%eax, %edi
+ 20377 125de E81DDAFE 		call	bswap_32
+ 20377      FF
+ 20378 125e3 89C3     		movl	%eax, %ebx
+ 20379 125e5 8B85A0F2 		movl	-3424(%rbp), %eax
+ 20379      FFFF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 613
+
+
+ 20380 125eb 89C7     		movl	%eax, %edi
+ 20381 125ed E80EDAFE 		call	bswap_32
+ 20381      FF
+ 20382 125f2 4589E9   		movl	%r13d, %r9d
+ 20383 125f5 4589E0   		movl	%r12d, %r8d
+ 20384 125f8 89D9     		movl	%ebx, %ecx
+ 20385 125fa 89C2     		movl	%eax, %edx
+ 20386 125fc 488D3500 		leaq	.LC14(%rip), %rsi
+ 20386      000000
+ 20387 12603 488D3D00 		leaq	.LC1(%rip), %rdi
+ 20387      000000
+ 20388 1260a B8000000 		movl	$0, %eax
+ 20388      00
+ 20389 1260f E8000000 		call	KDbgMsg at PLT
+ 20389      00
+ 20390              	.L352:
+ 20391              	.LBE4708:
+2220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 20392              		.loc 2 2220 0
+ 20393 12614 F30F6F85 		movdqu	-2976(%rbp), %xmm0
+ 20393      60F4FFFF 
+ 20394              	.LBE4561:
+ 20395              	.LBE4560:
+ 20396              		.loc 2 2277 0
+ 20397 1261c 660F7F85 		movdqa	%xmm0, -3488(%rbp)
+ 20397      60F2FFFF 
+2276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for ( ; ix < Nr; ++ix)
+ 20398              		.loc 2 2276 0
+ 20399 12624 8385ECF3 		addl	$1, -3092(%rbp)
+ 20399      FFFF01
+ 20400              	.L320:
+ 20401 1262b 8B85ECF3 		movl	-3092(%rbp), %eax
+ 20401      FFFF
+ 20402 12631 3B8554F2 		cmpl	-3500(%rbp), %eax
+ 20402      FFFF
+ 20403 12637 0F8253E9 		jb	.L353
+ 20403      FFFF
+2278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return AESBCMEMBER(EqInvLastRound) (state, key[ix]);
+ 20404              		.loc 2 2279 0
+ 20405 1263d 8B85ECF3 		mov	-3092(%rbp), %eax
+ 20405      FFFF
+ 20406 12643 48C1E004 		salq	$4, %rax
+ 20407 12647 48038558 		addq	-3496(%rbp), %rax
+ 20407      F2FFFF
+ 20408 1264e 660F6F00 		movdqa	(%rax), %xmm0
+ 20409 12652 660F6F8D 		movdqa	-3488(%rbp), %xmm1
+ 20409      60F2FFFF 
+ 20410 1265a F30F7F8D 		movdqu	%xmm1, -672(%rbp)
+ 20410      60FDFFFF 
+ 20411 12662 F30F7F85 		movdqu	%xmm0, -688(%rbp)
+ 20411      50FDFFFF 
+ 20412              	.LBB4709:
+ 20413              	.LBB4710:
+ 20414              	.LBB4711:
+2237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Start of Round", state);
+ 20415              		.loc 2 2237 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 614
+
+
+ 20416 1266a F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 20416      60FDFFFF 
+ 20417 12672 F30F7F85 		movdqu	%xmm0, -3120(%rbp)
+ 20417      D0F3FFFF 
+ 20418 1267a E8000000 		call	KDbgWriterGet at PLT
+ 20418      00
+ 20419 1267f 4885C0   		testq	%rax, %rax
+ 20420 12682 7479     		je	.L355
+ 20421 12684 BF030000 		movl	$3, %edi
+ 20421      00
+ 20422 12689 E8000000 		call	KDbgCondToFlag at PLT
+ 20422      00
+ 20423 1268e 4889C6   		movq	%rax, %rsi
+ 20424 12691 BF100000 		movl	$16, %edi
+ 20424      00
+ 20425 12696 E8000000 		call	KDbgTestModConds at PLT
+ 20425      00
+ 20426 1269b 84C0     		testb	%al, %al
+ 20427 1269d 745E     		je	.L355
+ 20428 1269f 8B85DCF3 		movl	-3108(%rbp), %eax
+ 20428      FFFF
+ 20429 126a5 89C7     		movl	%eax, %edi
+ 20430 126a7 E854D9FE 		call	bswap_32
+ 20430      FF
+ 20431 126ac 4189C5   		movl	%eax, %r13d
+ 20432 126af 8B85D8F3 		movl	-3112(%rbp), %eax
+ 20432      FFFF
+ 20433 126b5 89C7     		movl	%eax, %edi
+ 20434 126b7 E844D9FE 		call	bswap_32
+ 20434      FF
+ 20435 126bc 4189C4   		movl	%eax, %r12d
+ 20436 126bf 8B85D4F3 		movl	-3116(%rbp), %eax
+ 20436      FFFF
+ 20437 126c5 89C7     		movl	%eax, %edi
+ 20438 126c7 E834D9FE 		call	bswap_32
+ 20438      FF
+ 20439 126cc 89C3     		movl	%eax, %ebx
+ 20440 126ce 8B85D0F3 		movl	-3120(%rbp), %eax
+ 20440      FFFF
+ 20441 126d4 89C7     		movl	%eax, %edi
+ 20442 126d6 E825D9FE 		call	bswap_32
+ 20442      FF
+ 20443 126db 4589E9   		movl	%r13d, %r9d
+ 20444 126de 4589E0   		movl	%r12d, %r8d
+ 20445 126e1 89D9     		movl	%ebx, %ecx
+ 20446 126e3 89C2     		movl	%eax, %edx
+ 20447 126e5 488D3500 		leaq	.LC8(%rip), %rsi
+ 20447      000000
+ 20448 126ec 488D3D00 		leaq	.LC1(%rip), %rdi
+ 20448      000000
+ 20449 126f3 B8000000 		movl	$0, %eax
+ 20449      00
+ 20450 126f8 E8000000 		call	KDbgMsg at PLT
+ 20450      00
+ 20451              	.L355:
+ 20452 126fd F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 20452      60FDFFFF 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 615
+
+
+ 20453 12705 F30F7F85 		movdqu	%xmm0, -656(%rbp)
+ 20453      70FDFFFF 
+ 20454 1270d F30F6F85 		movdqu	-656(%rbp), %xmm0
+ 20454      70FDFFFF 
+ 20455 12715 F30F7F85 		movdqu	%xmm0, -624(%rbp)
+ 20455      90FDFFFF 
+ 20456 1271d 488D0500 		leaq	KAESBlockCipherVecRegRijndaelInvSBoxV(%rip), %rax
+ 20456      000000
+ 20457 12724 48898588 		movq	%rax, -632(%rbp)
+ 20457      FDFFFF
+ 20458              	.LBE4711:
+ 20459              	.LBB4712:
+ 20460              	.LBB4713:
+ 20461              	.LBB4714:
+ 20462              	.LBB4715:
+ 851:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     out = vec_00;
+ 20463              		.loc 2 851 0
+ 20464 1272b 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 20464      00000000 
+ 20465 12733 F30F7F85 		movdqu	%xmm0, -592(%rbp)
+ 20465      B0FDFFFF 
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 20466              		.loc 2 854 0
+ 20467 1273b 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 20467      00000000 
+ 20468 12743 F30F6F8D 		movdqu	-624(%rbp), %xmm1
+ 20468      90FDFFFF 
+ 20469 1274b F30F7F8D 		movdqu	%xmm1, -512(%rbp)
+ 20469      00FEFFFF 
+ 20470 12753 F30F7F85 		movdqu	%xmm0, -528(%rbp)
+ 20470      F0FDFFFF 
+ 20471              	.LBB4716:
+ 20472              	.LBB4717:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 20473              		.loc 2 206 0
+ 20474 1275b F30F6F85 		movdqu	-528(%rbp), %xmm0
+ 20474      F0FDFFFF 
+ 20475 12763 F30F6F8D 		movdqu	-512(%rbp), %xmm1
+ 20475      00FEFFFF 
+ 20476 1276b 660FDBC1 		pand	%xmm1, %xmm0
+ 20477              	.LBE4717:
+ 20478              	.LBE4716:
+ 854:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     lo = AESBCMEMBER(VecAnd) (state, vec_0F);
+ 20479              		.loc 2 854 0
+ 20480 1276f F30F7F85 		movdqu	%xmm0, -544(%rbp)
+ 20480      E0FDFFFF 
+ 20481 12777 F30F6F85 		movdqu	-624(%rbp), %xmm0
+ 20481      90FDFFFF 
+ 20482 1277f F30F7F85 		movdqu	%xmm0, -480(%rbp)
+ 20482      20FEFFFF 
+ 20483              	.LBB4718:
+ 20484              	.LBB4719:
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_psrldi128 ((v128_i32_t)vin, bit_count);
+ 20485              		.loc 3 433 0
+ 20486 12787 F30F6F85 		movdqu	-480(%rbp), %xmm0
+ 20486      20FEFFFF 
+ 20487 1278f 660F72D0 		psrld	$4, %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 616
+
+
+ 20487      04
+ 20488              	.LBE4719:
+ 20489              	.LBE4718:
+ 857:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = op_PSRLDI128 (state, 4);
+ 20490              		.loc 2 857 0
+ 20491 12794 F30F7F85 		movdqu	%xmm0, -560(%rbp)
+ 20491      D0FDFFFF 
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 20492              		.loc 2 859 0
+ 20493 1279c 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 20493      00000000 
+ 20494 127a4 F30F6F8D 		movdqu	-560(%rbp), %xmm1
+ 20494      D0FDFFFF 
+ 20495 127ac F30F7F8D 		movdqu	%xmm1, -448(%rbp)
+ 20495      40FEFFFF 
+ 20496 127b4 F30F7F85 		movdqu	%xmm0, -464(%rbp)
+ 20496      30FEFFFF 
+ 20497              	.LBB4720:
+ 20498              	.LBB4721:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 20499              		.loc 2 206 0
+ 20500 127bc F30F6F85 		movdqu	-464(%rbp), %xmm0
+ 20500      30FEFFFF 
+ 20501 127c4 F30F6F8D 		movdqu	-448(%rbp), %xmm1
+ 20501      40FEFFFF 
+ 20502 127cc 660FDBC1 		pand	%xmm1, %xmm0
+ 20503              	.LBE4721:
+ 20504              	.LBE4720:
+ 859:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     hi = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 20505              		.loc 2 859 0
+ 20506 127d0 F30F7F85 		movdqu	%xmm0, -560(%rbp)
+ 20506      D0FDFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 20507              		.loc 2 866 0
+ 20508 127d8 C785ACFD 		movl	$0, -596(%rbp)
+ 20508      FFFF0000 
+ 20508      0000
+ 20509 127e2 E9BE0100 		jmp	.L356
+ 20509      00
+ 20510              	.L357:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 20511              		.loc 2 868 0
+ 20512 127e7 660F6F05 		movdqa	lo_filter(%rip), %xmm0
+ 20512      00000000 
+ 20513 127ef F30F7F85 		movdqu	%xmm0, -416(%rbp)
+ 20513      60FEFFFF 
+ 20514 127f7 F30F6F85 		movdqu	-560(%rbp), %xmm0
+ 20514      D0FDFFFF 
+ 20515 127ff F30F7F85 		movdqu	%xmm0, -432(%rbp)
+ 20515      50FEFFFF 
+ 20516 12807 F30F6F85 		movdqu	-416(%rbp), %xmm0
+ 20516      60FEFFFF 
+ 20517 1280f F30F7F85 		movdqu	%xmm0, -384(%rbp)
+ 20517      80FEFFFF 
+ 20518 12817 F30F6F85 		movdqu	-432(%rbp), %xmm0
+ 20518      50FEFFFF 
+ 20519 1281f F30F7F85 		movdqu	%xmm0, -400(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 617
+
+
+ 20519      70FEFFFF 
+ 20520              	.LBB4722:
+ 20521              	.LBB4723:
+ 20522              	.LBB4724:
+ 20523              	.LBB4725:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 20524              		.loc 3 529 0
+ 20525 12827 F30F6F8D 		movdqu	-400(%rbp), %xmm1
+ 20525      70FEFFFF 
+ 20526 1282f F30F6F85 		movdqu	-384(%rbp), %xmm0
+ 20526      80FEFFFF 
+ 20527 12837 660F3800 		pshufb	%xmm1, %xmm0
+ 20527      C1
+ 20528              	.LBE4725:
+ 20529              	.LBE4724:
+ 20530              	.LBE4723:
+ 20531              	.LBE4722:
+ 868:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (lo_filter, hi);
+ 20532              		.loc 2 868 0
+ 20533 1283c F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 20533      C0FDFFFF 
+ 20534 12844 F30F6F85 		movdqu	-544(%rbp), %xmm0
+ 20534      E0FDFFFF 
+ 20535 1284c F30F7F85 		movdqu	%xmm0, -352(%rbp)
+ 20535      A0FEFFFF 
+ 20536 12854 F30F6F85 		movdqu	-576(%rbp), %xmm0
+ 20536      C0FDFFFF 
+ 20537 1285c F30F7F85 		movdqu	%xmm0, -368(%rbp)
+ 20537      90FEFFFF 
+ 20538              	.LBB4726:
+ 20539              	.LBB4727:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 20540              		.loc 2 234 0
+ 20541 12864 F30F6F85 		movdqu	-368(%rbp), %xmm0
+ 20541      90FEFFFF 
+ 20542 1286c F30F6F8D 		movdqu	-352(%rbp), %xmm1
+ 20542      A0FEFFFF 
+ 20543 12874 660FEBC1 		por	%xmm1, %xmm0
+ 20544              	.LBE4727:
+ 20545              	.LBE4726:
+ 870:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(VecOr) (lo, tmp);
+ 20546              		.loc 2 870 0
+ 20547 12878 F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 20547      C0FDFFFF 
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 20548              		.loc 2 872 0
+ 20549 12880 8B85ACFD 		mov	-596(%rbp), %eax
+ 20549      FFFF
+ 20550 12886 48C1E004 		salq	$4, %rax
+ 20551 1288a 48038588 		addq	-632(%rbp), %rax
+ 20551      FDFFFF
+ 20552 12891 660F6F00 		movdqa	(%rax), %xmm0
+ 20553 12895 F30F7F85 		movdqu	%xmm0, -320(%rbp)
+ 20553      C0FEFFFF 
+ 20554 1289d F30F6F85 		movdqu	-576(%rbp), %xmm0
+ 20554      C0FDFFFF 
+ 20555 128a5 F30F7F85 		movdqu	%xmm0, -336(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 618
+
+
+ 20555      B0FEFFFF 
+ 20556 128ad F30F6F85 		movdqu	-320(%rbp), %xmm0
+ 20556      C0FEFFFF 
+ 20557 128b5 F30F7F85 		movdqu	%xmm0, -288(%rbp)
+ 20557      E0FEFFFF 
+ 20558 128bd F30F6F85 		movdqu	-336(%rbp), %xmm0
+ 20558      B0FEFFFF 
+ 20559 128c5 F30F7F85 		movdqu	%xmm0, -304(%rbp)
+ 20559      D0FEFFFF 
+ 20560              	.LBB4728:
+ 20561              	.LBB4729:
+ 20562              	.LBB4730:
+ 20563              	.LBB4731:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 20564              		.loc 3 529 0
+ 20565 128cd F30F6F8D 		movdqu	-304(%rbp), %xmm1
+ 20565      D0FEFFFF 
+ 20566 128d5 F30F6F85 		movdqu	-288(%rbp), %xmm0
+ 20566      E0FEFFFF 
+ 20567 128dd 660F3800 		pshufb	%xmm1, %xmm0
+ 20567      C1
+ 20568              	.LBE4731:
+ 20569              	.LBE4730:
+ 20570              	.LBE4729:
+ 20571              	.LBE4728:
+ 872:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         tmp = AESBCMEMBER(PackShuffleBytes) (box[ix], tmp);
+ 20572              		.loc 2 872 0
+ 20573 128e2 F30F7F85 		movdqu	%xmm0, -576(%rbp)
+ 20573      C0FDFFFF 
+ 20574 128ea F30F6F85 		movdqu	-592(%rbp), %xmm0
+ 20574      B0FDFFFF 
+ 20575 128f2 F30F7F85 		movdqu	%xmm0, -256(%rbp)
+ 20575      00FFFFFF 
+ 20576 128fa F30F6F85 		movdqu	-576(%rbp), %xmm0
+ 20576      C0FDFFFF 
+ 20577 12902 F30F7F85 		movdqu	%xmm0, -272(%rbp)
+ 20577      F0FEFFFF 
+ 20578              	.LBB4732:
+ 20579              	.LBB4733:
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 | v2;
+ 20580              		.loc 2 234 0
+ 20581 1290a F30F6F85 		movdqu	-272(%rbp), %xmm0
+ 20581      F0FEFFFF 
+ 20582 12912 F30F6F8D 		movdqu	-256(%rbp), %xmm1
+ 20582      00FFFFFF 
+ 20583 1291a 660FEBC1 		por	%xmm1, %xmm0
+ 20584              	.LBE4733:
+ 20585              	.LBE4732:
+ 874:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         out = AESBCMEMBER(VecOr) (out, tmp);
+ 20586              		.loc 2 874 0
+ 20587 1291e F30F7F85 		movdqu	%xmm0, -592(%rbp)
+ 20587      B0FDFFFF 
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 20588              		.loc 2 876 0
+ 20589 12926 660F6F05 		movdqa	vec_01(%rip), %xmm0
+ 20589      00000000 
+ 20590 1292e F30F6F8D 		movdqu	-560(%rbp), %xmm1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 619
+
+
+ 20590      D0FDFFFF 
+ 20591 12936 F30F7F8D 		movdqu	%xmm1, -224(%rbp)
+ 20591      20FFFFFF 
+ 20592 1293e F30F7F85 		movdqu	%xmm0, -240(%rbp)
+ 20592      10FFFFFF 
+ 20593              	.LBB4734:
+ 20594              	.LBB4735:
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 - v2;
+ 20595              		.loc 2 290 0
+ 20596 12946 F30F6F8D 		movdqu	-240(%rbp), %xmm1
+ 20596      10FFFFFF 
+ 20597 1294e F30F6F85 		movdqu	-224(%rbp), %xmm0
+ 20597      20FFFFFF 
+ 20598 12956 660FF8C1 		psubb	%xmm1, %xmm0
+ 20599              	.LBE4735:
+ 20600              	.LBE4734:
+ 876:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecSub) (hi, vec_01);
+ 20601              		.loc 2 876 0
+ 20602 1295a F30F7F85 		movdqu	%xmm0, -560(%rbp)
+ 20602      D0FDFFFF 
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 20603              		.loc 2 878 0
+ 20604 12962 660F6F05 		movdqa	vec_0F(%rip), %xmm0
+ 20604      00000000 
+ 20605 1296a F30F6F8D 		movdqu	-560(%rbp), %xmm1
+ 20605      D0FDFFFF 
+ 20606 12972 F30F7F8D 		movdqu	%xmm1, -192(%rbp)
+ 20606      40FFFFFF 
+ 20607 1297a F30F7F85 		movdqu	%xmm0, -208(%rbp)
+ 20607      30FFFFFF 
+ 20608              	.LBB4736:
+ 20609              	.LBB4737:
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 & v2;
+ 20610              		.loc 2 206 0
+ 20611 12982 F30F6F85 		movdqu	-208(%rbp), %xmm0
+ 20611      30FFFFFF 
+ 20612 1298a F30F6F8D 		movdqu	-192(%rbp), %xmm1
+ 20612      40FFFFFF 
+ 20613 12992 660FDBC1 		pand	%xmm1, %xmm0
+ 20614              	.LBE4737:
+ 20615              	.LBE4736:
+ 878:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         hi  = AESBCMEMBER(VecAnd) (hi, vec_0F);
+ 20616              		.loc 2 878 0
+ 20617 12996 F30F7F85 		movdqu	%xmm0, -560(%rbp)
+ 20617      D0FDFFFF 
+ 866:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     for (ix = 0; ix < sizeof (state); ++ix)
+ 20618              		.loc 2 866 0
+ 20619 1299e 8385ACFD 		addl	$1, -596(%rbp)
+ 20619      FFFF01
+ 20620              	.L356:
+ 20621 129a5 83BDACFD 		cmpl	$15, -596(%rbp)
+ 20621      FFFF0F
+ 20622 129ac 0F8635FE 		jbe	.L357
+ 20622      FFFF
+ 882:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return out;
+ 20623              		.loc 2 882 0
+ 20624 129b2 F30F6F85 		movdqu	-592(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 620
+
+
+ 20624      B0FDFFFF 
+ 20625              	.LBE4715:
+ 20626              	.LBE4714:
+ 20627              	.LBE4713:
+ 20628              	.LBE4712:
+2243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvSubBytes) (state);
+ 20629              		.loc 2 2243 0
+ 20630 129ba F30F7F85 		movdqu	%xmm0, -672(%rbp)
+ 20630      60FDFFFF 
+ 20631              	.LBB4738:
+2245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvSubBy", state);
+ 20632              		.loc 2 2245 0
+ 20633 129c2 F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 20633      60FDFFFF 
+ 20634 129ca F30F7F85 		movdqu	%xmm0, -3136(%rbp)
+ 20634      C0F3FFFF 
+ 20635 129d2 E8000000 		call	KDbgWriterGet at PLT
+ 20635      00
+ 20636 129d7 4885C0   		testq	%rax, %rax
+ 20637 129da 7479     		je	.L359
+ 20638 129dc BF030000 		movl	$3, %edi
+ 20638      00
+ 20639 129e1 E8000000 		call	KDbgCondToFlag at PLT
+ 20639      00
+ 20640 129e6 4889C6   		movq	%rax, %rsi
+ 20641 129e9 BF100000 		movl	$16, %edi
+ 20641      00
+ 20642 129ee E8000000 		call	KDbgTestModConds at PLT
+ 20642      00
+ 20643 129f3 84C0     		testb	%al, %al
+ 20644 129f5 745E     		je	.L359
+ 20645 129f7 8B85CCF3 		movl	-3124(%rbp), %eax
+ 20645      FFFF
+ 20646 129fd 89C7     		movl	%eax, %edi
+ 20647 129ff E8FCD5FE 		call	bswap_32
+ 20647      FF
+ 20648 12a04 4189C5   		movl	%eax, %r13d
+ 20649 12a07 8B85C8F3 		movl	-3128(%rbp), %eax
+ 20649      FFFF
+ 20650 12a0d 89C7     		movl	%eax, %edi
+ 20651 12a0f E8ECD5FE 		call	bswap_32
+ 20651      FF
+ 20652 12a14 4189C4   		movl	%eax, %r12d
+ 20653 12a17 8B85C4F3 		movl	-3132(%rbp), %eax
+ 20653      FFFF
+ 20654 12a1d 89C7     		movl	%eax, %edi
+ 20655 12a1f E8DCD5FE 		call	bswap_32
+ 20655      FF
+ 20656 12a24 89C3     		movl	%eax, %ebx
+ 20657 12a26 8B85C0F3 		movl	-3136(%rbp), %eax
+ 20657      FFFF
+ 20658 12a2c 89C7     		movl	%eax, %edi
+ 20659 12a2e E8CDD5FE 		call	bswap_32
+ 20659      FF
+ 20660 12a33 4589E9   		movl	%r13d, %r9d
+ 20661 12a36 4589E0   		movl	%r12d, %r8d
+ 20662 12a39 89D9     		movl	%ebx, %ecx
+
GAS LISTING /tmp/ccjbMjHD.s 			page 621
+
+
+ 20663 12a3b 89C2     		movl	%eax, %edx
+ 20664 12a3d 488D3500 		leaq	.LC15(%rip), %rsi
+ 20664      000000
+ 20665 12a44 488D3D00 		leaq	.LC1(%rip), %rdi
+ 20665      000000
+ 20666 12a4b B8000000 		movl	$0, %eax
+ 20666      00
+ 20667 12a50 E8000000 		call	KDbgMsg at PLT
+ 20667      00
+ 20668              	.L359:
+ 20669 12a55 F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 20669      60FDFFFF 
+ 20670 12a5d F30F7F85 		movdqu	%xmm0, -176(%rbp)
+ 20670      50FFFFFF 
+ 20671              	.LBE4738:
+ 20672              	.LBB4739:
+ 20673              	.LBB4740:
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 20674              		.loc 2 612 0
+ 20675 12a65 660F6F05 		movdqa	InvShiftRowTable.7367(%rip), %xmm0
+ 20675      00000000 
+ 20676 12a6d F30F6F8D 		movdqu	-176(%rbp), %xmm1
+ 20676      50FFFFFF 
+ 20677 12a75 F30F7F8D 		movdqu	%xmm1, -144(%rbp)
+ 20677      70FFFFFF 
+ 20678 12a7d F30F7F85 		movdqu	%xmm0, -160(%rbp)
+ 20678      60FFFFFF 
+ 20679 12a85 F30F6F85 		movdqu	-144(%rbp), %xmm0
+ 20679      70FFFFFF 
+ 20680 12a8d F30F7F45 		movdqu	%xmm0, -112(%rbp)
+ 20680      90
+ 20681 12a92 F30F6F85 		movdqu	-160(%rbp), %xmm0
+ 20681      60FFFFFF 
+ 20682 12a9a F30F7F45 		movdqu	%xmm0, -128(%rbp)
+ 20682      80
+ 20683              	.LBB4741:
+ 20684              	.LBB4742:
+ 20685              	.LBB4743:
+ 20686              	.LBB4744:
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h ****     return (v128_u8_t)__builtin_ia32_pshufb128 ((v128_c_t)vin, (v128_c_t)vtab);
+ 20687              		.loc 3 529 0
+ 20688 12a9f F30F6F4D 		movdqu	-128(%rbp), %xmm1
+ 20688      80
+ 20689 12aa4 F30F6F45 		movdqu	-112(%rbp), %xmm0
+ 20689      90
+ 20690 12aa9 660F3800 		pshufb	%xmm1, %xmm0
+ 20690      C1
+ 20691              	.LBE4744:
+ 20692              	.LBE4743:
+ 20693              	.LBE4742:
+ 20694              	.LBE4741:
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(PackShuffleBytes) (state, InvShiftRowTable);
+ 20695              		.loc 2 612 0
+ 20696 12aae F30F7F85 		movdqu	%xmm0, -176(%rbp)
+ 20696      50FFFFFF 
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 20697              		.loc 2 613 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 622
+
+
+ 20698 12ab6 F30F6F85 		movdqu	-176(%rbp), %xmm0
+ 20698      50FFFFFF 
+ 20699              	.LBE4740:
+ 20700              	.LBE4739:
+2247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(InvShiftRows) (state);
+ 20701              		.loc 2 2247 0
+ 20702 12abe F30F7F85 		movdqu	%xmm0, -672(%rbp)
+ 20702      60FDFFFF 
+ 20703              	.LBB4745:
+2249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("After InvShift", state);
+ 20704              		.loc 2 2249 0
+ 20705 12ac6 F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 20705      60FDFFFF 
+ 20706 12ace F30F7F85 		movdqu	%xmm0, -3152(%rbp)
+ 20706      B0F3FFFF 
+ 20707 12ad6 E8000000 		call	KDbgWriterGet at PLT
+ 20707      00
+ 20708 12adb 4885C0   		testq	%rax, %rax
+ 20709 12ade 7479     		je	.L361
+ 20710 12ae0 BF030000 		movl	$3, %edi
+ 20710      00
+ 20711 12ae5 E8000000 		call	KDbgCondToFlag at PLT
+ 20711      00
+ 20712 12aea 4889C6   		movq	%rax, %rsi
+ 20713 12aed BF100000 		movl	$16, %edi
+ 20713      00
+ 20714 12af2 E8000000 		call	KDbgTestModConds at PLT
+ 20714      00
+ 20715 12af7 84C0     		testb	%al, %al
+ 20716 12af9 745E     		je	.L361
+ 20717 12afb 8B85BCF3 		movl	-3140(%rbp), %eax
+ 20717      FFFF
+ 20718 12b01 89C7     		movl	%eax, %edi
+ 20719 12b03 E8F8D4FE 		call	bswap_32
+ 20719      FF
+ 20720 12b08 4189C5   		movl	%eax, %r13d
+ 20721 12b0b 8B85B8F3 		movl	-3144(%rbp), %eax
+ 20721      FFFF
+ 20722 12b11 89C7     		movl	%eax, %edi
+ 20723 12b13 E8E8D4FE 		call	bswap_32
+ 20723      FF
+ 20724 12b18 4189C4   		movl	%eax, %r12d
+ 20725 12b1b 8B85B4F3 		movl	-3148(%rbp), %eax
+ 20725      FFFF
+ 20726 12b21 89C7     		movl	%eax, %edi
+ 20727 12b23 E8D8D4FE 		call	bswap_32
+ 20727      FF
+ 20728 12b28 89C3     		movl	%eax, %ebx
+ 20729 12b2a 8B85B0F3 		movl	-3152(%rbp), %eax
+ 20729      FFFF
+ 20730 12b30 89C7     		movl	%eax, %edi
+ 20731 12b32 E8C9D4FE 		call	bswap_32
+ 20731      FF
+ 20732 12b37 4589E9   		movl	%r13d, %r9d
+ 20733 12b3a 4589E0   		movl	%r12d, %r8d
+ 20734 12b3d 89D9     		movl	%ebx, %ecx
+ 20735 12b3f 89C2     		movl	%eax, %edx
+
GAS LISTING /tmp/ccjbMjHD.s 			page 623
+
+
+ 20736 12b41 488D3500 		leaq	.LC16(%rip), %rsi
+ 20736      000000
+ 20737 12b48 488D3D00 		leaq	.LC1(%rip), %rdi
+ 20737      000000
+ 20738 12b4f B8000000 		movl	$0, %eax
+ 20738      00
+ 20739 12b54 E8000000 		call	KDbgMsg at PLT
+ 20739      00
+ 20740              	.L361:
+ 20741 12b59 F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 20741      60FDFFFF 
+ 20742 12b61 F30F7F45 		movdqu	%xmm0, -80(%rbp)
+ 20742      B0
+ 20743 12b66 F30F6F85 		movdqu	-688(%rbp), %xmm0
+ 20743      50FDFFFF 
+ 20744 12b6e F30F7F45 		movdqu	%xmm0, -96(%rbp)
+ 20744      A0
+ 20745 12b73 F30F6F45 		movdqu	-80(%rbp), %xmm0
+ 20745      B0
+ 20746 12b78 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 20746      D0
+ 20747 12b7d F30F6F45 		movdqu	-96(%rbp), %xmm0
+ 20747      A0
+ 20748 12b82 F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 20748      C0
+ 20749              	.LBE4745:
+ 20750              	.LBB4746:
+ 20751              	.LBB4747:
+ 20752              	.LBB4748:
+ 20753              	.LBB4749:
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return v1 ^ v2;
+ 20754              		.loc 2 178 0
+ 20755 12b87 F30F6F45 		movdqu	-64(%rbp), %xmm0
+ 20755      C0
+ 20756 12b8c F30F6F4D 		movdqu	-48(%rbp), %xmm1
+ 20756      D0
+ 20757 12b91 660FEFC1 		pxor	%xmm1, %xmm0
+ 20758              	.LBE4749:
+ 20759              	.LBE4748:
+ 20760              	.LBE4747:
+ 20761              	.LBE4746:
+2251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     state = AESBCMEMBER(AddRoundKey) (state, round_keys);
+ 20762              		.loc 2 2251 0
+ 20763 12b95 F30F7F85 		movdqu	%xmm0, -672(%rbp)
+ 20763      60FDFFFF 
+ 20764              	.LBB4750:
+2253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("Round Key", round_keys);
+ 20765              		.loc 2 2253 0
+ 20766 12b9d F30F6F85 		movdqu	-688(%rbp), %xmm0
+ 20766      50FDFFFF 
+ 20767 12ba5 F30F7F85 		movdqu	%xmm0, -3168(%rbp)
+ 20767      A0F3FFFF 
+ 20768 12bad E8000000 		call	KDbgWriterGet at PLT
+ 20768      00
+ 20769 12bb2 4885C0   		testq	%rax, %rax
+ 20770 12bb5 7479     		je	.L363
+ 20771 12bb7 BF030000 		movl	$3, %edi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 624
+
+
+ 20771      00
+ 20772 12bbc E8000000 		call	KDbgCondToFlag at PLT
+ 20772      00
+ 20773 12bc1 4889C6   		movq	%rax, %rsi
+ 20774 12bc4 BF100000 		movl	$16, %edi
+ 20774      00
+ 20775 12bc9 E8000000 		call	KDbgTestModConds at PLT
+ 20775      00
+ 20776 12bce 84C0     		testb	%al, %al
+ 20777 12bd0 745E     		je	.L363
+ 20778 12bd2 8B85ACF3 		movl	-3156(%rbp), %eax
+ 20778      FFFF
+ 20779 12bd8 89C7     		movl	%eax, %edi
+ 20780 12bda E821D4FE 		call	bswap_32
+ 20780      FF
+ 20781 12bdf 4189C5   		movl	%eax, %r13d
+ 20782 12be2 8B85A8F3 		movl	-3160(%rbp), %eax
+ 20782      FFFF
+ 20783 12be8 89C7     		movl	%eax, %edi
+ 20784 12bea E811D4FE 		call	bswap_32
+ 20784      FF
+ 20785 12bef 4189C4   		movl	%eax, %r12d
+ 20786 12bf2 8B85A4F3 		movl	-3164(%rbp), %eax
+ 20786      FFFF
+ 20787 12bf8 89C7     		movl	%eax, %edi
+ 20788 12bfa E801D4FE 		call	bswap_32
+ 20788      FF
+ 20789 12bff 89C3     		movl	%eax, %ebx
+ 20790 12c01 8B85A0F3 		movl	-3168(%rbp), %eax
+ 20790      FFFF
+ 20791 12c07 89C7     		movl	%eax, %edi
+ 20792 12c09 E8F2D3FE 		call	bswap_32
+ 20792      FF
+ 20793 12c0e 4589E9   		movl	%r13d, %r9d
+ 20794 12c11 4589E0   		movl	%r12d, %r8d
+ 20795 12c14 89D9     		movl	%ebx, %ecx
+ 20796 12c16 89C2     		movl	%eax, %edx
+ 20797 12c18 488D3500 		leaq	.LC9(%rip), %rsi
+ 20797      000000
+ 20798 12c1f 488D3D00 		leaq	.LC1(%rip), %rdi
+ 20798      000000
+ 20799 12c26 B8000000 		movl	$0, %eax
+ 20799      00
+ 20800 12c2b E8000000 		call	KDbgMsg at PLT
+ 20800      00
+ 20801              	.L363:
+ 20802              	.LBE4750:
+ 20803              	.LBB4751:
+2254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_INVCIPHER_VECTOR("End of Round", state);
+ 20804              		.loc 2 2254 0
+ 20805 12c30 F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 20805      60FDFFFF 
+ 20806 12c38 F30F7F85 		movdqu	%xmm0, -3184(%rbp)
+ 20806      90F3FFFF 
+ 20807 12c40 E8000000 		call	KDbgWriterGet at PLT
+ 20807      00
+ 20808 12c45 4885C0   		testq	%rax, %rax
+
GAS LISTING /tmp/ccjbMjHD.s 			page 625
+
+
+ 20809 12c48 7479     		je	.L365
+ 20810 12c4a BF030000 		movl	$3, %edi
+ 20810      00
+ 20811 12c4f E8000000 		call	KDbgCondToFlag at PLT
+ 20811      00
+ 20812 12c54 4889C6   		movq	%rax, %rsi
+ 20813 12c57 BF100000 		movl	$16, %edi
+ 20813      00
+ 20814 12c5c E8000000 		call	KDbgTestModConds at PLT
+ 20814      00
+ 20815 12c61 84C0     		testb	%al, %al
+ 20816 12c63 745E     		je	.L365
+ 20817 12c65 8B859CF3 		movl	-3172(%rbp), %eax
+ 20817      FFFF
+ 20818 12c6b 89C7     		movl	%eax, %edi
+ 20819 12c6d E88ED3FE 		call	bswap_32
+ 20819      FF
+ 20820 12c72 4189C5   		movl	%eax, %r13d
+ 20821 12c75 8B8598F3 		movl	-3176(%rbp), %eax
+ 20821      FFFF
+ 20822 12c7b 89C7     		movl	%eax, %edi
+ 20823 12c7d E87ED3FE 		call	bswap_32
+ 20823      FF
+ 20824 12c82 4189C4   		movl	%eax, %r12d
+ 20825 12c85 8B8594F3 		movl	-3180(%rbp), %eax
+ 20825      FFFF
+ 20826 12c8b 89C7     		movl	%eax, %edi
+ 20827 12c8d E86ED3FE 		call	bswap_32
+ 20827      FF
+ 20828 12c92 89C3     		movl	%eax, %ebx
+ 20829 12c94 8B8590F3 		movl	-3184(%rbp), %eax
+ 20829      FFFF
+ 20830 12c9a 89C7     		movl	%eax, %edi
+ 20831 12c9c E85FD3FE 		call	bswap_32
+ 20831      FF
+ 20832 12ca1 4589E9   		movl	%r13d, %r9d
+ 20833 12ca4 4589E0   		movl	%r12d, %r8d
+ 20834 12ca7 89D9     		movl	%ebx, %ecx
+ 20835 12ca9 89C2     		movl	%eax, %edx
+ 20836 12cab 488D3500 		leaq	.LC14(%rip), %rsi
+ 20836      000000
+ 20837 12cb2 488D3D00 		leaq	.LC1(%rip), %rdi
+ 20837      000000
+ 20838 12cb9 B8000000 		movl	$0, %eax
+ 20838      00
+ 20839 12cbe E8000000 		call	KDbgMsg at PLT
+ 20839      00
+ 20840              	.L365:
+ 20841              	.LBE4751:
+2256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 20842              		.loc 2 2256 0
+ 20843 12cc3 F30F6F85 		movdqu	-672(%rbp), %xmm0
+ 20843      60FDFFFF 
+ 20844              	.LBE4710:
+ 20845              	.LBE4709:
+2280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 20846              		.loc 2 2280 0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 626
+
+
+ 20847 12ccb 4881C408 		addq	$3592, %rsp
+ 20847      0E0000
+ 20848 12cd2 5B       		popq	%rbx
+ 20849 12cd3 415C     		popq	%r12
+ 20850 12cd5 415D     		popq	%r13
+ 20851 12cd7 C9       		leave
+ 20852 12cd8 C3       		ret
+ 20853              		.cfi_endproc
+ 20854              	.LFE659:
+ 20855              		.size	KAESBlockCipherVecRegEqInvCipher, .-KAESBlockCipherVecRegEqInvCipher
+ 20856              		.section	.rodata
+ 20857              		.type	KAESBlockCipherVecRegaes_ncbi_name, @object
+ 20858              		.size	KAESBlockCipherVecRegaes_ncbi_name, 10
+ 20859              	KAESBlockCipherVecRegaes_ncbi_name:
+ 20860 046c 4145535F 		.string	"AES_CLASS"
+ 20860      434C4153 
+ 20860      5300
+ 20861              		.text
+ 20862              		.type	KAESBlockCipherVecRegDestroy, @function
+ 20863              	KAESBlockCipherVecRegDestroy:
+ 20864              	.LFB660:
+2281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ======================================================================
+2284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * This section of the file is the use of the cipher defined above within
+2285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * our BlockCipherObject.
+2286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * These are the functions that will be directly referenced in the vector
+2288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * table for the block cipher.  These are not specifically derived from
+2289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * the FIPS-197 document.
+2290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #include "blockcipher-impl.h"
+2292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** typedef struct AES_CLASS AES_CLASS;
+2294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const char AESBCMEMBER(aes_ncbi_name) [] = CLASS_STRING(AES_CLASS);
+2296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Destroy
+2300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   How large is the stored key for this cipher?  Not the user key used
+2301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   to create this key (key schedule)
+2302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   This is needed by KCipher to know how large the KCipher objecr is at
+2304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   allocation and to know how much of a buffer each decryption/encryption is
+2305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** void AESBCMEMBER(Destroy) (const BLOCKCIPHER_VEC_IMPL * self)
+2308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 20865              		.loc 2 2308 0
+ 20866              		.cfi_startproc
+ 20867 12cd9 55       		pushq	%rbp
+ 20868              	.LCFI20:
+ 20869              		.cfi_def_cfa_offset 16
+ 20870 12cda 4889E5   		movq	%rsp, %rbp
+ 20871              		.cfi_offset 6, -16
+ 20872              	.LCFI21:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 627
+
+
+ 20873              		.cfi_def_cfa_register 6
+ 20874 12cdd 48897DF8 		movq	%rdi, -8(%rbp)
+2309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /* we use a constant object so do nothing */
+2310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 20875              		.loc 2 2310 0
+ 20876 12ce1 C9       		leave
+ 20877 12ce2 C3       		ret
+ 20878              		.cfi_endproc
+ 20879              	.LFE660:
+ 20880              		.size	KAESBlockCipherVecRegDestroy, .-KAESBlockCipherVecRegDestroy
+ 20881              		.type	KAESBlockCipherVecRegBlockSize, @function
+ 20882              	KAESBlockCipherVecRegBlockSize:
+ 20883              	.LFB661:
+2311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * BlockSize
+2315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t AESBCMEMBER(BlockSize) ()
+2318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 20884              		.loc 2 2318 0
+ 20885              		.cfi_startproc
+ 20886 12ce3 55       		pushq	%rbp
+ 20887              	.LCFI22:
+ 20888              		.cfi_def_cfa_offset 16
+ 20889 12ce4 4889E5   		movq	%rsp, %rbp
+ 20890              		.cfi_offset 6, -16
+ 20891              	.LCFI23:
+ 20892              		.cfi_def_cfa_register 6
+2319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (uint32_t) sizeof (AESBlock);
+ 20893              		.loc 2 2319 0
+ 20894 12ce7 B8100000 		movl	$16, %eax
+ 20894      00
+2320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 20895              		.loc 2 2320 0
+ 20896 12cec C9       		leave
+ 20897 12ced C3       		ret
+ 20898              		.cfi_endproc
+ 20899              	.LFE661:
+ 20900              		.size	KAESBlockCipherVecRegBlockSize, .-KAESBlockCipherVecRegBlockSize
+ 20901              		.type	KAESBlockCipherVecRegKeySize, @function
+ 20902              	KAESBlockCipherVecRegKeySize:
+ 20903              	.LFB662:
+2321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * KeySize
+2325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   How large is the stored key for this cipher?  Not the user key used
+2326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   to create this key (key schedule)
+2327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   This is needed by KCipher to know how large the KCipher objecr is at
+2329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   allocation and to know how much of a buffer each decryption/encryption is
+2330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** uint32_t AESBCMEMBER(KeySize) ()
+2333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+
GAS LISTING /tmp/ccjbMjHD.s 			page 628
+
+
+ 20904              		.loc 2 2333 0
+ 20905              		.cfi_startproc
+ 20906 12cee 55       		pushq	%rbp
+ 20907              	.LCFI24:
+ 20908              		.cfi_def_cfa_offset 16
+ 20909 12cef 4889E5   		movq	%rsp, %rbp
+ 20910              		.cfi_offset 6, -16
+ 20911              	.LCFI25:
+ 20912              		.cfi_def_cfa_register 6
+2334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return (uint32_t) sizeof (AESKeySchedule);
+ 20913              		.loc 2 2334 0
+ 20914 12cf2 B8000100 		movl	$256, %eax
+ 20914      00
+2335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 20915              		.loc 2 2335 0
+ 20916 12cf7 C9       		leave
+ 20917 12cf8 C3       		ret
+ 20918              		.cfi_endproc
+ 20919              	.LFE662:
+ 20920              		.size	KAESBlockCipherVecRegKeySize, .-KAESBlockCipherVecRegKeySize
+ 20921              		.section	.rodata
+ 20922 0476 0000     		.align 8
+ 20923              	.LC18:
+ 20924 0478 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c"
+ 20924      652F726F 
+ 20924      6461726D 
+ 20924      65722F73 
+ 20924      72615F73 
+ 20925              		.text
+ 20926              		.type	KAESBlockCipherVecRegSetEncryptKey, @function
+ 20927              	KAESBlockCipherVecRegSetEncryptKey:
+ 20928              	.LFB663:
+2336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * SetEncryptKey
+2340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   The KCipher calls this to have the block cipher build an encryption
+2341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   key in the KCipher object
+2342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t AESBCMEMBER(SetEncryptKey) (void * encrypt_key, const char * user_key,
+2346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                  uint32_t user_key_size)
+2347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 20929              		.loc 2 2347 0
+ 20930              		.cfi_startproc
+ 20931 12cf9 55       		pushq	%rbp
+ 20932              	.LCFI26:
+ 20933              		.cfi_def_cfa_offset 16
+ 20934 12cfa 4889E5   		movq	%rsp, %rbp
+ 20935              		.cfi_offset 6, -16
+ 20936              	.LCFI27:
+ 20937              		.cfi_def_cfa_register 6
+ 20938 12cfd 4883EC30 		subq	$48, %rsp
+ 20939 12d01 48897DE8 		movq	%rdi, -24(%rbp)
+ 20940 12d05 488975E0 		movq	%rsi, -32(%rbp)
+ 20941 12d09 8955DC   		movl	%edx, -36(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 629
+
+
+2348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rc_t rc;
+2349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESKeySchedule * key;
+2350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rc = 0;
+ 20942              		.loc 2 2351 0
+ 20943 12d0c C745F400 		movl	$0, -12(%rbp)
+ 20943      000000
+2352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     key = encrypt_key;
+ 20944              		.loc 2 2352 0
+ 20945 12d13 488B45E8 		movq	-24(%rbp), %rax
+ 20946 12d17 488945F8 		movq	%rax, -8(%rbp)
+2353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     switch (user_key_size)
+ 20947              		.loc 2 2354 0
+ 20948 12d1b 8B45DC   		movl	-36(%rbp), %eax
+ 20949 12d1e 83F818   		cmpl	$24, %eax
+ 20950 12d21 7430     		je	.L376
+ 20951 12d23 83F820   		cmpl	$32, %eax
+ 20952 12d26 744E     		je	.L377
+ 20953 12d28 83F810   		cmpl	$16, %eax
+ 20954 12d2b 756C     		jne	.L380
+ 20955              	.L375:
+2355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nk_128 * sizeof (AESWord):
+2357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         key->number_of_rounds = AES_Nr_128;
+ 20956              		.loc 2 2357 0
+ 20957 12d2d 488B45F8 		movq	-8(%rbp), %rax
+ 20958 12d31 C780F000 		movl	$10, 240(%rax)
+ 20958      00000A00 
+ 20958      0000
+2358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESBCMEMBER(KeyExpansion128) (key->round_keys, (AESByte*)user_key);
+ 20959              		.loc 2 2358 0
+ 20960 12d3b 488B55E0 		movq	-32(%rbp), %rdx
+ 20961 12d3f 488B45F8 		movq	-8(%rbp), %rax
+ 20962 12d43 4889D6   		movq	%rdx, %rsi
+ 20963 12d46 4889C7   		movq	%rax, %rdi
+ 20964 12d49 E8C6D2FE 		call	KAESBlockCipherVecRegKeyExpansion128
+ 20964      FF
+2359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 20965              		.loc 2 2359 0
+ 20966 12d4e E98A0000 		jmp	.L378
+ 20966      00
+ 20967              	.L376:
+2360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nk_192 * sizeof (AESWord):
+2362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         key->number_of_rounds = AES_Nr_192;
+ 20968              		.loc 2 2362 0
+ 20969 12d53 488B45F8 		movq	-8(%rbp), %rax
+ 20970 12d57 C780F000 		movl	$12, 240(%rax)
+ 20970      00000C00 
+ 20970      0000
+2363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESBCMEMBER(KeyExpansion192) (key->round_keys, (AESByte*)user_key);
+ 20971              		.loc 2 2363 0
+ 20972 12d61 488B55E0 		movq	-32(%rbp), %rdx
+ 20973 12d65 488B45F8 		movq	-8(%rbp), %rax
+ 20974 12d69 4889D6   		movq	%rdx, %rsi
+ 20975 12d6c 4889C7   		movq	%rax, %rdi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 630
+
+
+ 20976 12d6f E87B27FF 		call	KAESBlockCipherVecRegKeyExpansion192
+ 20976      FF
+2364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 20977              		.loc 2 2364 0
+ 20978 12d74 EB67     		jmp	.L378
+ 20979              	.L377:
+2365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nk_256 * sizeof (AESWord):
+2367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         key->number_of_rounds = AES_Nr_256;
+ 20980              		.loc 2 2367 0
+ 20981 12d76 488B45F8 		movq	-8(%rbp), %rax
+ 20982 12d7a C780F000 		movl	$14, 240(%rax)
+ 20982      00000E00 
+ 20982      0000
+2368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESBCMEMBER(KeyExpansion256) (key->round_keys, (AESByte*)user_key);
+ 20983              		.loc 2 2368 0
+ 20984 12d84 488B55E0 		movq	-32(%rbp), %rdx
+ 20985 12d88 488B45F8 		movq	-8(%rbp), %rax
+ 20986 12d8c 4889D6   		movq	%rdx, %rsi
+ 20987 12d8f 4889C7   		movq	%rax, %rdi
+ 20988 12d92 E8E668FF 		call	KAESBlockCipherVecRegKeyExpansion256
+ 20988      FF
+2369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 20989              		.loc 2 2369 0
+ 20990 12d97 EB44     		jmp	.L378
+ 20991              	.L380:
+2370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     default:
+2372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         key->number_of_rounds = 0;
+ 20992              		.loc 2 2372 0
+ 20993 12d99 488B45F8 		movq	-8(%rbp), %rax
+ 20994 12d9d C780F000 		movl	$0, 240(%rax)
+ 20994      00000000 
+ 20994      0000
+2373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         memset (key, 0, sizeof (*key));
+ 20995              		.loc 2 2373 0
+ 20996 12da7 488B45F8 		movq	-8(%rbp), %rax
+ 20997 12dab BA000100 		movl	$256, %edx
+ 20997      00
+ 20998 12db0 BE000000 		movl	$0, %esi
+ 20998      00
+ 20999 12db5 4889C7   		movq	%rax, %rdi
+ 21000 12db8 E8000000 		call	memset at PLT
+ 21000      00
+2374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         rc = RC (rcKrypto, rcBlockCipher, rcUpdating, rcParam, rcInvalid);
+ 21001              		.loc 2 2374 0
+ 21002 12dbd B9460900 		movl	$2374, %ecx
+ 21002      00
+ 21003 12dc2 488D1500 		leaq	__func__.9027(%rip), %rdx
+ 21003      000000
+ 21004 12dc9 488D3500 		leaq	.LC18(%rip), %rsi
+ 21004      000000
+ 21005 12dd0 BFCA8F04 		movl	$-2029744182, %edi
+ 21005      87
+ 21006 12dd5 E8000000 		call	SetRCFileFuncLine at PLT
+ 21006      00
+ 21007 12dda 8945F4   		movl	%eax, -12(%rbp)
+
GAS LISTING /tmp/ccjbMjHD.s 			page 631
+
+
+ 21008              	.L378:
+2375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+2376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return rc;
+ 21009              		.loc 2 2377 0
+ 21010 12ddd 8B45F4   		movl	-12(%rbp), %eax
+2378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 21011              		.loc 2 2378 0
+ 21012 12de0 C9       		leave
+ 21013 12de1 C3       		ret
+ 21014              		.cfi_endproc
+ 21015              	.LFE663:
+ 21016              		.size	KAESBlockCipherVecRegSetEncryptKey, .-KAESBlockCipherVecRegSetEncryptKey
+ 21017              		.type	KAESBlockCipherVecRegSetDecryptKey, @function
+ 21018              	KAESBlockCipherVecRegSetDecryptKey:
+ 21019              	.LFB664:
+2379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * SetDecryptKey
+2383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   The KCipher calls this to have the block cipher build an decryption
+2384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   key in the KCipher object
+2385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t AESBCMEMBER(SetDecryptKey) (void * decrypt_key,
+2389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                  const char * user_key,
+2390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                  uint32_t user_key_size)
+2391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 21020              		.loc 2 2391 0
+ 21021              		.cfi_startproc
+ 21022 12de2 55       		pushq	%rbp
+ 21023              	.LCFI28:
+ 21024              		.cfi_def_cfa_offset 16
+ 21025 12de3 4889E5   		movq	%rsp, %rbp
+ 21026              		.cfi_offset 6, -16
+ 21027              	.LCFI29:
+ 21028              		.cfi_def_cfa_register 6
+ 21029 12de6 4881EC30 		subq	$304, %rsp
+ 21029      010000
+ 21030 12ded 4889BDE8 		movq	%rdi, -280(%rbp)
+ 21030      FEFFFF
+ 21031 12df4 4889B5E0 		movq	%rsi, -288(%rbp)
+ 21031      FEFFFF
+ 21032 12dfb 8995DCFE 		movl	%edx, -292(%rbp)
+ 21032      FFFF
+2392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESKeySchedule encrypt_key;
+2393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rc_t rc;
+2394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rc = AESBCMEMBER(SetEncryptKey) (&encrypt_key, user_key, user_key_size);
+ 21033              		.loc 2 2395 0
+ 21034 12e01 8B95DCFE 		movl	-292(%rbp), %edx
+ 21034      FFFF
+ 21035 12e07 488B8DE0 		movq	-288(%rbp), %rcx
+ 21035      FEFFFF
+ 21036 12e0e 488D85F0 		leaq	-272(%rbp), %rax
+ 21036      FEFFFF
+
GAS LISTING /tmp/ccjbMjHD.s 			page 632
+
+
+ 21037 12e15 4889CE   		movq	%rcx, %rsi
+ 21038 12e18 4889C7   		movq	%rax, %rdi
+ 21039 12e1b E8D9FEFF 		call	KAESBlockCipherVecRegSetEncryptKey
+ 21039      FF
+ 21040 12e20 8945F4   		movl	%eax, -12(%rbp)
+2396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     if (rc == 0)
+ 21041              		.loc 2 2396 0
+ 21042 12e23 837DF400 		cmpl	$0, -12(%rbp)
+ 21043 12e27 7577     		jne	.L382
+ 21044              	.LBB4752:
+2397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         AESKeySchedule * key;
+2399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         key = decrypt_key;
+ 21045              		.loc 2 2400 0
+ 21046 12e29 488B85E8 		movq	-280(%rbp), %rax
+ 21046      FEFFFF
+ 21047 12e30 488945F8 		movq	%rax, -8(%rbp)
+2401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         switch (key->number_of_rounds = encrypt_key.number_of_rounds)
+ 21048              		.loc 2 2402 0
+ 21049 12e34 8B55E0   		movl	-32(%rbp), %edx
+ 21050 12e37 488B45F8 		movq	-8(%rbp), %rax
+ 21051 12e3b 8990F000 		movl	%edx, 240(%rax)
+ 21051      0000
+ 21052 12e41 488B45F8 		movq	-8(%rbp), %rax
+ 21053 12e45 8B80F000 		movl	240(%rax), %eax
+ 21053      0000
+ 21054 12e4b 83F80C   		cmpl	$12, %eax
+ 21055 12e4e 7422     		je	.L384
+ 21056 12e50 83F80E   		cmpl	$14, %eax
+ 21057 12e53 7435     		je	.L385
+ 21058 12e55 83F80A   		cmpl	$10, %eax
+ 21059 12e58 7546     		jne	.L382
+ 21060              	.L383:
+2403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+2404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         case AES_Nr_128:
+2405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             AESBCMEMBER(EqInvKeyExpansion128) (key->round_keys,
+ 21061              		.loc 2 2405 0
+ 21062 12e5a 488B45F8 		movq	-8(%rbp), %rax
+ 21063 12e5e 488D95F0 		leaq	-272(%rbp), %rdx
+ 21063      FEFFFF
+ 21064 12e65 4889D6   		movq	%rdx, %rsi
+ 21065 12e68 4889C7   		movq	%rax, %rdi
+ 21066 12e6b E8C9C5FF 		call	KAESBlockCipherVecRegEqInvKeyExpansion128
+ 21066      FF
+2406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                                encrypt_key.round_keys);
+2407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             break;
+ 21067              		.loc 2 2407 0
+ 21068 12e70 EB2E     		jmp	.L382
+ 21069              	.L384:
+2408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         case AES_Nr_192:
+2410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             AESBCMEMBER(EqInvKeyExpansion192) (key->round_keys,
+ 21070              		.loc 2 2410 0
+ 21071 12e72 488B45F8 		movq	-8(%rbp), %rax
+ 21072 12e76 488D95F0 		leaq	-272(%rbp), %rdx
+
GAS LISTING /tmp/ccjbMjHD.s 			page 633
+
+
+ 21072      FEFFFF
+ 21073 12e7d 4889D6   		movq	%rdx, %rsi
+ 21074 12e80 4889C7   		movq	%rax, %rdi
+ 21075 12e83 E8DBC5FF 		call	KAESBlockCipherVecRegEqInvKeyExpansion192
+ 21075      FF
+2411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                                encrypt_key.round_keys);
+2412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             break;
+ 21076              		.loc 2 2412 0
+ 21077 12e88 EB16     		jmp	.L382
+ 21078              	.L385:
+2413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         case AES_Nr_256:
+2415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             AESBCMEMBER(EqInvKeyExpansion256) (key->round_keys,
+ 21079              		.loc 2 2415 0
+ 21080 12e8a 488B45F8 		movq	-8(%rbp), %rax
+ 21081 12e8e 488D95F0 		leaq	-272(%rbp), %rdx
+ 21081      FEFFFF
+ 21082 12e95 4889D6   		movq	%rdx, %rsi
+ 21083 12e98 4889C7   		movq	%rax, %rdi
+ 21084 12e9b E8EDC5FF 		call	KAESBlockCipherVecRegEqInvKeyExpansion256
+ 21084      FF
+ 21085              	.L382:
+ 21086              	.LBE4752:
+2416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                                encrypt_key.round_keys);
+2417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             break;
+2418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         }
+2419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return rc;
+ 21087              		.loc 2 2420 0
+ 21088 12ea0 8B45F4   		movl	-12(%rbp), %eax
+2421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 21089              		.loc 2 2421 0
+ 21090 12ea3 C9       		leave
+ 21091 12ea4 C3       		ret
+ 21092              		.cfi_endproc
+ 21093              	.LFE664:
+ 21094              		.size	KAESBlockCipherVecRegSetDecryptKey, .-KAESBlockCipherVecRegSetDecryptKey
+ 21095              		.section	.rodata
+ 21096              	.LC19:
+ 21097 04ae 6B657900 		.string	"key"
+ 21098              		.text
+ 21099              		.type	KAESBlockCipherVecRegEncrypt, @function
+ 21100              	KAESBlockCipherVecRegEncrypt:
+ 21101              	.LFB665:
+2422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Encrypt
+2426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   Perform an encryption of a single block.  Chained modes and stream
+2428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   cipher modes will call this multiple times.
+2429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(Encrypt) (CipherVec state,
+2433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                 const void * encrypt_key)
+2434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+
GAS LISTING /tmp/ccjbMjHD.s 			page 634
+
+
+ 21102              		.loc 2 2434 0
+ 21103              		.cfi_startproc
+ 21104 12ea5 55       		pushq	%rbp
+ 21105              	.LCFI30:
+ 21106              		.cfi_def_cfa_offset 16
+ 21107 12ea6 4889E5   		movq	%rsp, %rbp
+ 21108              		.cfi_offset 6, -16
+ 21109              	.LCFI31:
+ 21110              		.cfi_def_cfa_register 6
+ 21111 12ea9 4883EC30 		subq	$48, %rsp
+ 21112 12ead 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 21112      E0
+ 21113 12eb2 48897DD8 		movq	%rdi, -40(%rbp)
+2435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     const AESKeySchedule * key = encrypt_key;
+ 21114              		.loc 2 2435 0
+ 21115 12eb6 488B45D8 		movq	-40(%rbp), %rax
+ 21116 12eba 488945F8 		movq	%rax, -8(%rbp)
+2436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     assert (key);
+ 21117              		.loc 2 2436 0
+ 21118 12ebe 48837DF8 		cmpq	$0, -8(%rbp)
+ 21118      00
+ 21119 12ec3 751F     		jne	.L388
+ 21120 12ec5 488D0D00 		leaq	__PRETTY_FUNCTION__.9063(%rip), %rcx
+ 21120      000000
+ 21121 12ecc BA840900 		movl	$2436, %edx
+ 21121      00
+ 21122 12ed1 488D3500 		leaq	.LC18(%rip), %rsi
+ 21122      000000
+ 21123 12ed8 488D3D00 		leaq	.LC19(%rip), %rdi
+ 21123      000000
+ 21124 12edf E8000000 		call	__assert_fail at PLT
+ 21124      00
+ 21125              	.L388:
+2437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     switch (key->number_of_rounds)
+ 21126              		.loc 2 2438 0
+ 21127 12ee4 488B45F8 		movq	-8(%rbp), %rax
+ 21128 12ee8 8B80F000 		movl	240(%rax), %eax
+ 21128      0000
+ 21129 12eee 83F80C   		cmpl	$12, %eax
+ 21130 12ef1 7436     		je	.L391
+ 21131 12ef3 83F80E   		cmpl	$14, %eax
+ 21132 12ef6 744E     		je	.L392
+ 21133 12ef8 83F80A   		cmpl	$10, %eax
+ 21134 12efb 740F     		je	.L390
+2439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     default:
+2441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = vec_00;
+ 21135              		.loc 2 2441 0
+ 21136 12efd 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 21136      00000000 
+ 21137 12f05 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 21137      E0
+2442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 21138              		.loc 2 2442 0
+ 21139 12f0a EB55     		jmp	.L393
+ 21140              	.L390:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 635
+
+
+2443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nr_128:
+2445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_128);
+ 21141              		.loc 2 2445 0
+ 21142 12f0c 488B45F8 		movq	-8(%rbp), %rax
+ 21143 12f10 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 21143      E0
+ 21144 12f15 BE0A0000 		movl	$10, %esi
+ 21144      00
+ 21145 12f1a 4889C7   		movq	%rax, %rdi
+ 21146 12f1d E895C5FF 		call	KAESBlockCipherVecRegCipher
+ 21146      FF
+ 21147 12f22 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 21147      E0
+2446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 21148              		.loc 2 2446 0
+ 21149 12f27 EB38     		jmp	.L393
+ 21150              	.L391:
+2447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nr_192:
+2449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_192);
+ 21151              		.loc 2 2449 0
+ 21152 12f29 488B45F8 		movq	-8(%rbp), %rax
+ 21153 12f2d 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 21153      E0
+ 21154 12f32 BE0C0000 		movl	$12, %esi
+ 21154      00
+ 21155 12f37 4889C7   		movq	%rax, %rdi
+ 21156 12f3a E878C5FF 		call	KAESBlockCipherVecRegCipher
+ 21156      FF
+ 21157 12f3f 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 21157      E0
+2450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 21158              		.loc 2 2450 0
+ 21159 12f44 EB1B     		jmp	.L393
+ 21160              	.L392:
+2451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nr_256:
+2453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(Cipher) (state, key->round_keys, AES_Nr_256);
+ 21161              		.loc 2 2453 0
+ 21162 12f46 488B45F8 		movq	-8(%rbp), %rax
+ 21163 12f4a 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 21163      E0
+ 21164 12f4f BE0E0000 		movl	$14, %esi
+ 21164      00
+ 21165 12f54 4889C7   		movq	%rax, %rdi
+ 21166 12f57 E85BC5FF 		call	KAESBlockCipherVecRegCipher
+ 21166      FF
+ 21167 12f5c 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 21167      E0
+ 21168              	.L393:
+2454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+2455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 21169              		.loc 2 2457 0
+ 21170 12f61 660F6F45 		movdqa	-32(%rbp), %xmm0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 636
+
+
+ 21170      E0
+2458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 21171              		.loc 2 2458 0
+ 21172 12f66 C9       		leave
+ 21173 12f67 C3       		ret
+ 21174              		.cfi_endproc
+ 21175              	.LFE665:
+ 21176              		.size	KAESBlockCipherVecRegEncrypt, .-KAESBlockCipherVecRegEncrypt
+ 21177              		.type	KAESBlockCipherVecRegDecrypt, @function
+ 21178              	KAESBlockCipherVecRegDecrypt:
+ 21179              	.LFB666:
+2459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Decrypt
+2463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   Perform a decryption of a single block.  Chained modes and stream
+2465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   cipher modes will call this multiple times.
+2466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static
+2468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** CipherVec AESBCMEMBER(Decrypt) (CipherVec state,
+2469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                 const void * decrypt_key)
+2470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 21180              		.loc 2 2470 0
+ 21181              		.cfi_startproc
+ 21182 12f68 55       		pushq	%rbp
+ 21183              	.LCFI32:
+ 21184              		.cfi_def_cfa_offset 16
+ 21185 12f69 4889E5   		movq	%rsp, %rbp
+ 21186              		.cfi_offset 6, -16
+ 21187              	.LCFI33:
+ 21188              		.cfi_def_cfa_register 6
+ 21189 12f6c 4883EC30 		subq	$48, %rsp
+ 21190 12f70 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 21190      E0
+ 21191 12f75 48897DD8 		movq	%rdi, -40(%rbp)
+2471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     const AESKeySchedule * key = decrypt_key;
+ 21192              		.loc 2 2471 0
+ 21193 12f79 488B45D8 		movq	-40(%rbp), %rax
+ 21194 12f7d 488945F8 		movq	%rax, -8(%rbp)
+2472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     assert (key);
+ 21195              		.loc 2 2473 0
+ 21196 12f81 48837DF8 		cmpq	$0, -8(%rbp)
+ 21196      00
+ 21197 12f86 751F     		jne	.L396
+ 21198 12f88 488D0D00 		leaq	__PRETTY_FUNCTION__.9084(%rip), %rcx
+ 21198      000000
+ 21199 12f8f BAA90900 		movl	$2473, %edx
+ 21199      00
+ 21200 12f94 488D3500 		leaq	.LC18(%rip), %rsi
+ 21200      000000
+ 21201 12f9b 488D3D00 		leaq	.LC19(%rip), %rdi
+ 21201      000000
+ 21202 12fa2 E8000000 		call	__assert_fail at PLT
+ 21202      00
+ 21203              	.L396:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 637
+
+
+2474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     switch (key->number_of_rounds)
+ 21204              		.loc 2 2475 0
+ 21205 12fa7 488B45F8 		movq	-8(%rbp), %rax
+ 21206 12fab 8B80F000 		movl	240(%rax), %eax
+ 21206      0000
+ 21207 12fb1 83F80C   		cmpl	$12, %eax
+ 21208 12fb4 7436     		je	.L399
+ 21209 12fb6 83F80E   		cmpl	$14, %eax
+ 21210 12fb9 744E     		je	.L400
+ 21211 12fbb 83F80A   		cmpl	$10, %eax
+ 21212 12fbe 740F     		je	.L398
+2476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     default:
+2478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = vec_00; /* for an illegal cipher key schedule just write zeroes */
+ 21213              		.loc 2 2478 0
+ 21214 12fc0 660F6F05 		movdqa	vec_00(%rip), %xmm0
+ 21214      00000000 
+ 21215 12fc8 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 21215      E0
+2479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 21216              		.loc 2 2479 0
+ 21217 12fcd EB55     		jmp	.L401
+ 21218              	.L398:
+2480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nr_128:
+2482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+ 21219              		.loc 2 2482 0
+ 21220 12fcf 488B45F8 		movq	-8(%rbp), %rax
+ 21221 12fd3 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 21221      E0
+ 21222 12fd8 BE0A0000 		movl	$10, %esi
+ 21222      00
+ 21223 12fdd 4889C7   		movq	%rax, %rdi
+ 21224 12fe0 E81EDDFF 		call	KAESBlockCipherVecRegEqInvCipher
+ 21224      FF
+ 21225 12fe5 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 21225      E0
+2483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                           AES_Nr_128);
+2484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 21226              		.loc 2 2484 0
+ 21227 12fea EB38     		jmp	.L401
+ 21228              	.L399:
+2485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nr_192:
+2487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+ 21229              		.loc 2 2487 0
+ 21230 12fec 488B45F8 		movq	-8(%rbp), %rax
+ 21231 12ff0 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 21231      E0
+ 21232 12ff5 BE0C0000 		movl	$12, %esi
+ 21232      00
+ 21233 12ffa 4889C7   		movq	%rax, %rdi
+ 21234 12ffd E801DDFF 		call	KAESBlockCipherVecRegEqInvCipher
+ 21234      FF
+ 21235 13002 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 21235      E0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 638
+
+
+2488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                           AES_Nr_192);
+2489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+ 21236              		.loc 2 2489 0
+ 21237 13007 EB1B     		jmp	.L401
+ 21238              	.L400:
+2490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     case AES_Nr_256:
+2492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         state = AESBCMEMBER(EqInvCipher) (state, key->round_keys,
+ 21239              		.loc 2 2492 0
+ 21240 13009 488B45F8 		movq	-8(%rbp), %rax
+ 21241 1300d 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 21241      E0
+ 21242 13012 BE0E0000 		movl	$14, %esi
+ 21242      00
+ 21243 13017 4889C7   		movq	%rax, %rdi
+ 21244 1301a E8E4DCFF 		call	KAESBlockCipherVecRegEqInvCipher
+ 21244      FF
+ 21245 1301f 660F7F45 		movdqa	%xmm0, -32(%rbp)
+ 21245      E0
+ 21246              	.L401:
+2493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****                                           AES_Nr_256);
+2494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         break;
+2495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return state;
+ 21247              		.loc 2 2497 0
+ 21248 13024 660F6F45 		movdqa	-32(%rbp), %xmm0
+ 21248      E0
+2498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 21249              		.loc 2 2498 0
+ 21250 13029 C9       		leave
+ 21251 1302a C3       		ret
+ 21252              		.cfi_endproc
+ 21253              	.LFE666:
+ 21254              		.size	KAESBlockCipherVecRegDecrypt, .-KAESBlockCipherVecRegDecrypt
+ 21255              		.section	.rodata
+ 21256 04b2 00000000 		.align 8
+ 21256      0000
+ 21257              	.LC20:
+ 21258 04b8 25733A20 		.string	"%s: level %x a %x, b %x c %x d %x\n"
+ 21258      6C657665 
+ 21258      6C202578 
+ 21258      20612025 
+ 21258      782C2062 
+ 21259              	.LC21:
+ 21260 04db 25733A20 		.string	"%s: failed no SSSE3\n"
+ 21260      6661696C 
+ 21260      6564206E 
+ 21260      6F205353 
+ 21260      5345330A 
+ 21261              	.LC22:
+ 21262 04f0 25733A20 		.string	"%s: failed no SSE3\n"
+ 21262      6661696C 
+ 21262      6564206E 
+ 21262      6F205353 
+ 21262      45330A00 
+ 21263              	.LC23:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 639
+
+
+ 21264 0504 25733A20 		.string	"%s: failed no SSE2\n"
+ 21264      6661696C 
+ 21264      6564206E 
+ 21264      6F205353 
+ 21264      45320A00 
+ 21265              	.LC24:
+ 21266 0518 25733A20 		.string	"%s: failed no SSE\n"
+ 21266      6661696C 
+ 21266      6564206E 
+ 21266      6F205353 
+ 21266      450A00
+ 21267              	.LC25:
+ 21268 052b 25733A20 		.string	"%s: passed\n"
+ 21268      70617373 
+ 21268      65640A00 
+ 21269              		.text
+ 21270              		.type	KAESBlockCipherVecRegProcessorSupport, @function
+ 21271              	KAESBlockCipherVecRegProcessorSupport:
+ 21272              	.LFB667:
+2499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * MakeProcessorSupport
+2503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Run-time check for support of this particular AES implmentation by
+2505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * checking the flags given via the cpuid instruction.
+2506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static __inline__
+2508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** bool AESBCMEMBER(ProcessorSupport) ()
+2509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 21273              		.loc 2 2509 0
+ 21274              		.cfi_startproc
+ 21275 1302b 55       		pushq	%rbp
+ 21276              	.LCFI34:
+ 21277              		.cfi_def_cfa_offset 16
+ 21278 1302c 4889E5   		movq	%rsp, %rbp
+ 21279              		.cfi_offset 6, -16
+ 21280              	.LCFI35:
+ 21281              		.cfi_def_cfa_register 6
+ 21282 1302f 53       		pushq	%rbx
+ 21283 13030 4883EC38 		subq	$56, %rsp
+2510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     uint32_t level = 1, a, b, c, d;
+ 21284              		.loc 2 2510 0
+ 21285 13034 C745D801 		movl	$1, -40(%rbp)
+ 21285      000000
+2511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     bool ret = true;
+ 21286              		.loc 2 2511 0
+ 21287 1303b C645EF01 		movb	$1, -17(%rbp)
+2512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     __cpuid (level, a, b, c, d);
+ 21288              		.loc 2 2513 0
+ 21289 1303f 8B45D8   		movl	-40(%rbp), %eax
+ 21290              	#APP
+ 21291              	# 2513 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c" 1
+ 2514              	
+ 2515              	    DEBUG_OBJECT(("%s: level %x a %x, b %x c %x d %x\n",__func__, level, a,b,c,d));
+ 21292              		cpuid
+
GAS LISTING /tmp/ccjbMjHD.s 			page 640
+
+
+ 21293              		
+ 21294              	# 0 "" 2
+ 21295              	#NO_APP
+ 21296 13044 8945DC   		movl	%eax, -36(%rbp)
+ 21297 13047 895DE0   		movl	%ebx, -32(%rbp)
+ 21298 1304a 894DE4   		movl	%ecx, -28(%rbp)
+ 21299 1304d 8955E8   		movl	%edx, -24(%rbp)
+ 21300              		.loc 2 2515 0
+ 21301              		.cfi_offset 3, -24
+ 21302 13050 E8000000 		call	KDbgWriterGet at PLT
+ 21302      00
+ 21303 13055 4885C0   		testq	%rax, %rax
+ 21304 13058 744F     		je	.L405
+ 21305 1305a BF040000 		movl	$4, %edi
+ 21305      00
+ 21306 1305f E8000000 		call	KDbgCondToFlag at PLT
+ 21306      00
+ 21307 13064 4889C6   		movq	%rax, %rsi
+ 21308 13067 BF100000 		movl	$16, %edi
+ 21308      00
+ 21309 1306c E8000000 		call	KDbgTestModConds at PLT
+ 21309      00
+ 21310 13071 84C0     		testb	%al, %al
+ 21311 13073 7434     		je	.L405
+ 21312 13075 8B75E4   		movl	-28(%rbp), %esi
+ 21313 13078 8B5DE0   		movl	-32(%rbp), %ebx
+ 21314 1307b 8B55DC   		movl	-36(%rbp), %edx
+ 21315 1307e 8B45D8   		movl	-40(%rbp), %eax
+ 21316 13081 8B4DE8   		movl	-24(%rbp), %ecx
+ 21317 13084 890C24   		movl	%ecx, (%rsp)
+ 21318 13087 4189F1   		movl	%esi, %r9d
+ 21319 1308a 4189D8   		movl	%ebx, %r8d
+ 21320 1308d 89D1     		movl	%edx, %ecx
+ 21321 1308f 89C2     		movl	%eax, %edx
+ 21322 13091 488D3500 		leaq	__func__.9108(%rip), %rsi
+ 21322      000000
+ 21323 13098 488D3D00 		leaq	.LC20(%rip), %rdi
+ 21323      000000
+ 21324 1309f B8000000 		movl	$0, %eax
+ 21324      00
+ 21325 130a4 E8000000 		call	KDbgMsg at PLT
+ 21325      00
+ 21326              	.L405:
+2516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_AES_NI
+2518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /*
+2519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * Only one flag tells whether the AES-NI instructions
+2520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * are implmented in this CPU
+2521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      */
+2522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     if ( ! (c & bit_AES))
+2523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no AES\n",__func__));
+2525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+2526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     } else
+2527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #if USE_VEC_REG
+
GAS LISTING /tmp/ccjbMjHD.s 			page 641
+
+
+2530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /*
+2531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * Several flags indicate different levels of SSE
+2532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * instruction implmentation
+2533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      *
+2534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * we require SSE4.1
+2535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      *
+2536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      * that dates from 2006 so is most likely good enough
+2537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****      */
+2538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         /* if ( ! (c & (bit_SSE4_2))
+2539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+2541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+2542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     else */
+2545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if ( ! (c & bit_SSE4_1))
+ 21327              		.loc 2 2545 0
+ 21328 130a9 8B45E4   		movl	-28(%rbp), %eax
+ 21329 130ac 25000008 		andl	$524288, %eax
+ 21329      00
+ 21330 130b1 85C0     		testl	%eax, %eax
+ 21331 130b3 7546     		jne	.L406
+2546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+ 21332              		.loc 2 2547 0
+ 21333 130b5 E8000000 		call	KDbgWriterGet at PLT
+ 21333      00
+ 21334 130ba 4885C0   		testq	%rax, %rax
+ 21335 130bd 7433     		je	.L408
+ 21336 130bf BF040000 		movl	$4, %edi
+ 21336      00
+ 21337 130c4 E8000000 		call	KDbgCondToFlag at PLT
+ 21337      00
+ 21338 130c9 4889C6   		movq	%rax, %rsi
+ 21339 130cc BF100000 		movl	$16, %edi
+ 21339      00
+ 21340 130d1 E8000000 		call	KDbgTestModConds at PLT
+ 21340      00
+ 21341 130d6 84C0     		testb	%al, %al
+ 21342 130d8 7418     		je	.L408
+ 21343 130da 488D3500 		leaq	__func__.9108(%rip), %rsi
+ 21343      000000
+ 21344 130e1 488D3D00 		leaq	.LC21(%rip), %rdi
+ 21344      000000
+ 21345 130e8 B8000000 		movl	$0, %eax
+ 21345      00
+ 21346 130ed E8000000 		call	KDbgMsg at PLT
+ 21346      00
+ 21347              	.L408:
+2548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+ 21348              		.loc 2 2548 0
+ 21349 130f2 C645EF00 		movb	$0, -17(%rbp)
+ 21350 130f6 E93E0100 		jmp	.L409
+ 21350      00
+ 21351              	.L406:
+2549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 642
+
+
+2551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     else if ( ! (c & bit_SSSE3))
+ 21352              		.loc 2 2551 0
+ 21353 130fb 8B45E4   		movl	-28(%rbp), %eax
+ 21354 130fe 25000200 		andl	$512, %eax
+ 21354      00
+ 21355 13103 85C0     		testl	%eax, %eax
+ 21356 13105 7546     		jne	.L410
+2552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no SSSE3\n",__func__));
+ 21357              		.loc 2 2553 0
+ 21358 13107 E8000000 		call	KDbgWriterGet at PLT
+ 21358      00
+ 21359 1310c 4885C0   		testq	%rax, %rax
+ 21360 1310f 7433     		je	.L412
+ 21361 13111 BF040000 		movl	$4, %edi
+ 21361      00
+ 21362 13116 E8000000 		call	KDbgCondToFlag at PLT
+ 21362      00
+ 21363 1311b 4889C6   		movq	%rax, %rsi
+ 21364 1311e BF100000 		movl	$16, %edi
+ 21364      00
+ 21365 13123 E8000000 		call	KDbgTestModConds at PLT
+ 21365      00
+ 21366 13128 84C0     		testb	%al, %al
+ 21367 1312a 7418     		je	.L412
+ 21368 1312c 488D3500 		leaq	__func__.9108(%rip), %rsi
+ 21368      000000
+ 21369 13133 488D3D00 		leaq	.LC21(%rip), %rdi
+ 21369      000000
+ 21370 1313a B8000000 		movl	$0, %eax
+ 21370      00
+ 21371 1313f E8000000 		call	KDbgMsg at PLT
+ 21371      00
+ 21372              	.L412:
+2554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+ 21373              		.loc 2 2554 0
+ 21374 13144 C645EF00 		movb	$0, -17(%rbp)
+ 21375 13148 E9EC0000 		jmp	.L409
+ 21375      00
+ 21376              	.L410:
+2555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     else if ( ! (c & bit_SSE3))
+ 21377              		.loc 2 2557 0
+ 21378 1314d 8B45E4   		movl	-28(%rbp), %eax
+ 21379 13150 83E001   		andl	$1, %eax
+ 21380 13153 85C0     		testl	%eax, %eax
+ 21381 13155 7546     		jne	.L413
+2558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no SSE3\n",__func__));
+ 21382              		.loc 2 2559 0
+ 21383 13157 E8000000 		call	KDbgWriterGet at PLT
+ 21383      00
+ 21384 1315c 4885C0   		testq	%rax, %rax
+ 21385 1315f 7433     		je	.L415
+ 21386 13161 BF040000 		movl	$4, %edi
+ 21386      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 643
+
+
+ 21387 13166 E8000000 		call	KDbgCondToFlag at PLT
+ 21387      00
+ 21388 1316b 4889C6   		movq	%rax, %rsi
+ 21389 1316e BF100000 		movl	$16, %edi
+ 21389      00
+ 21390 13173 E8000000 		call	KDbgTestModConds at PLT
+ 21390      00
+ 21391 13178 84C0     		testb	%al, %al
+ 21392 1317a 7418     		je	.L415
+ 21393 1317c 488D3500 		leaq	__func__.9108(%rip), %rsi
+ 21393      000000
+ 21394 13183 488D3D00 		leaq	.LC22(%rip), %rdi
+ 21394      000000
+ 21395 1318a B8000000 		movl	$0, %eax
+ 21395      00
+ 21396 1318f E8000000 		call	KDbgMsg at PLT
+ 21396      00
+ 21397              	.L415:
+2560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+ 21398              		.loc 2 2560 0
+ 21399 13194 C645EF00 		movb	$0, -17(%rbp)
+ 21400 13198 E99C0000 		jmp	.L409
+ 21400      00
+ 21401              	.L413:
+2561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     else if ( ! (d & bit_SSE2))
+ 21402              		.loc 2 2563 0
+ 21403 1319d 8B45E8   		movl	-24(%rbp), %eax
+ 21404 131a0 25000000 		andl	$67108864, %eax
+ 21404      04
+ 21405 131a5 85C0     		testl	%eax, %eax
+ 21406 131a7 7543     		jne	.L416
+2564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no SSE2\n",__func__));
+ 21407              		.loc 2 2565 0
+ 21408 131a9 E8000000 		call	KDbgWriterGet at PLT
+ 21408      00
+ 21409 131ae 4885C0   		testq	%rax, %rax
+ 21410 131b1 7433     		je	.L418
+ 21411 131b3 BF040000 		movl	$4, %edi
+ 21411      00
+ 21412 131b8 E8000000 		call	KDbgCondToFlag at PLT
+ 21412      00
+ 21413 131bd 4889C6   		movq	%rax, %rsi
+ 21414 131c0 BF100000 		movl	$16, %edi
+ 21414      00
+ 21415 131c5 E8000000 		call	KDbgTestModConds at PLT
+ 21415      00
+ 21416 131ca 84C0     		testb	%al, %al
+ 21417 131cc 7418     		je	.L418
+ 21418 131ce 488D3500 		leaq	__func__.9108(%rip), %rsi
+ 21418      000000
+ 21419 131d5 488D3D00 		leaq	.LC23(%rip), %rdi
+ 21419      000000
+ 21420 131dc B8000000 		movl	$0, %eax
+ 21420      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 644
+
+
+ 21421 131e1 E8000000 		call	KDbgMsg at PLT
+ 21421      00
+ 21422              	.L418:
+2566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+ 21423              		.loc 2 2566 0
+ 21424 131e6 C645EF00 		movb	$0, -17(%rbp)
+ 21425 131ea EB4D     		jmp	.L409
+ 21426              	.L416:
+2567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     else if ( ! (d & bit_SSE))
+ 21427              		.loc 2 2569 0
+ 21428 131ec 8B45E8   		movl	-24(%rbp), %eax
+ 21429 131ef 25000000 		andl	$33554432, %eax
+ 21429      02
+ 21430 131f4 85C0     		testl	%eax, %eax
+ 21431 131f6 7541     		jne	.L409
+2570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         DEBUG_OBJECT(("%s: failed no SSE\n",__func__));
+ 21432              		.loc 2 2571 0
+ 21433 131f8 E8000000 		call	KDbgWriterGet at PLT
+ 21433      00
+ 21434 131fd 4885C0   		testq	%rax, %rax
+ 21435 13200 7433     		je	.L420
+ 21436 13202 BF040000 		movl	$4, %edi
+ 21436      00
+ 21437 13207 E8000000 		call	KDbgCondToFlag at PLT
+ 21437      00
+ 21438 1320c 4889C6   		movq	%rax, %rsi
+ 21439 1320f BF100000 		movl	$16, %edi
+ 21439      00
+ 21440 13214 E8000000 		call	KDbgTestModConds at PLT
+ 21440      00
+ 21441 13219 84C0     		testb	%al, %al
+ 21442 1321b 7418     		je	.L420
+ 21443 1321d 488D3500 		leaq	__func__.9108(%rip), %rsi
+ 21443      000000
+ 21444 13224 488D3D00 		leaq	.LC24(%rip), %rdi
+ 21444      000000
+ 21445 1322b B8000000 		movl	$0, %eax
+ 21445      00
+ 21446 13230 E8000000 		call	KDbgMsg at PLT
+ 21446      00
+ 21447              	.L420:
+2572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         ret = false;
+ 21448              		.loc 2 2572 0
+ 21449 13235 C645EF00 		movb	$0, -17(%rbp)
+ 21450              	.L409:
+2573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** #endif
+2575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_OBJECT(("%s: passed\n",__func__));
+ 21451              		.loc 2 2575 0
+ 21452 13239 E8000000 		call	KDbgWriterGet at PLT
+ 21452      00
+ 21453 1323e 4885C0   		testq	%rax, %rax
+ 21454 13241 7433     		je	.L422
+ 21455 13243 BF040000 		movl	$4, %edi
+
GAS LISTING /tmp/ccjbMjHD.s 			page 645
+
+
+ 21455      00
+ 21456 13248 E8000000 		call	KDbgCondToFlag at PLT
+ 21456      00
+ 21457 1324d 4889C6   		movq	%rax, %rsi
+ 21458 13250 BF100000 		movl	$16, %edi
+ 21458      00
+ 21459 13255 E8000000 		call	KDbgTestModConds at PLT
+ 21459      00
+ 21460 1325a 84C0     		testb	%al, %al
+ 21461 1325c 7418     		je	.L422
+ 21462 1325e 488D3500 		leaq	__func__.9108(%rip), %rsi
+ 21462      000000
+ 21463 13265 488D3D00 		leaq	.LC25(%rip), %rdi
+ 21463      000000
+ 21464 1326c B8000000 		movl	$0, %eax
+ 21464      00
+ 21465 13271 E8000000 		call	KDbgMsg at PLT
+ 21465      00
+ 21466              	.L422:
+2576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return ret;
+ 21467              		.loc 2 2576 0
+ 21468 13276 0FB645EF 		movzbl	-17(%rbp), %eax
+2577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 21469              		.loc 2 2577 0
+ 21470 1327a 4883C438 		addq	$56, %rsp
+ 21471 1327e 5B       		popq	%rbx
+ 21472 1327f C9       		leave
+ 21473 13280 C3       		ret
+ 21474              		.cfi_endproc
+ 21475              	.LFE667:
+ 21476              		.size	KAESBlockCipherVecRegProcessorSupport, .-KAESBlockCipherVecRegProcessorSupport
+ 21477              		.section	.data.rel.ro.local,"aw", at progbits
+ 21478              		.align 32
+ 21479              		.type	KAESBlockCipherVecReg_vt_, @object
+ 21480              		.size	KAESBlockCipherVecReg_vt_, 64
+ 21481              	KAESBlockCipherVecReg_vt_:
+ 21482 0000 01000000 		.long	1
+ 21483 0004 01000000 		.long	1
+ 21484 0008 00000000 		.quad	KAESBlockCipherVecRegDestroy
+ 21484      00000000 
+ 21485 0010 00000000 		.quad	KAESBlockCipherVecRegBlockSize
+ 21485      00000000 
+ 21486 0018 00000000 		.quad	KAESBlockCipherVecRegKeySize
+ 21486      00000000 
+ 21487 0020 00000000 		.quad	KAESBlockCipherVecRegSetEncryptKey
+ 21487      00000000 
+ 21488 0028 00000000 		.quad	KAESBlockCipherVecRegSetDecryptKey
+ 21488      00000000 
+ 21489 0030 00000000 		.quad	KAESBlockCipherVecRegEncrypt
+ 21489      00000000 
+ 21490 0038 00000000 		.quad	KAESBlockCipherVecRegDecrypt
+ 21490      00000000 
+ 21491              		.section	.rodata
+ 21492              	.LC26:
+ 21493 0537 25733A20 		.string	"%s: %p\n"
+ 21493      25700A00 
+ 21494              		.text
+
GAS LISTING /tmp/ccjbMjHD.s 			page 646
+
+
+ 21495              	.globl KAESBlockCipherVecRegMake
+ 21496              		.type	KAESBlockCipherVecRegMake, @function
+ 21497              	KAESBlockCipherVecRegMake:
+ 21498              	.LFB668:
+2578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Init
+2582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   Initialize the fields of this object.  The derived class will call this
+2584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *   during it's initialization.
+2585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * self      object to initialze
+2587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * vt        the virtual table of the derived class
+2588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * mgr       the cipher manager that is the construction factory block cipher
+2589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *           objects hold references to the manager while the manager merely
+2590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *           points at the block ciphers when all block ciphers are destroyed
+2591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *           the manager loses its references and it too can be destroyed if not
+2592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *           held elsewhere
+2593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * name      ASCIZ c-string the name of this class
+2594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** static const
+2596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** KBlockCipherVec_vt_v1 AESBCMEMBER(_vt_) = 
+2597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+2598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     { 1, 1 },
+2599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(Destroy),
+2601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(BlockSize),
+2602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(KeySize),
+2603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(SetEncryptKey),
+2604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(SetDecryptKey),
+2605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(Encrypt),
+2606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     AESBCMEMBER(Decrypt)
+2607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** };
+2608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** /* ----------------------------------------------------------------------
+2611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Make
+2612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  *
+2613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * Create a new AES Block Cipher object.
+2614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * The processor is checked to see if this particular version is supported on
+2615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  * this particular CPU.
+2616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****  */
+2617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** rc_t AESBCMEMBER(Make) (KBlockCipher ** new_obj)
+2618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** {
+ 21499              		.loc 2 2618 0
+ 21500              		.cfi_startproc
+ 21501 13281 55       		pushq	%rbp
+ 21502              	.LCFI36:
+ 21503              		.cfi_def_cfa_offset 16
+ 21504 13282 4889E5   		movq	%rsp, %rbp
+ 21505              		.cfi_offset 6, -16
+ 21506              	.LCFI37:
+ 21507              		.cfi_def_cfa_register 6
+ 21508 13285 4883EC20 		subq	$32, %rsp
+ 21509 13289 48897DE8 		movq	%rdi, -24(%rbp)
+2619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     rc_t rc;
+
GAS LISTING /tmp/ccjbMjHD.s 			page 647
+
+
+2620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     DEBUG_OBJECT(("%s: %p\n",__func__,new_obj));
+ 21510              		.loc 2 2621 0
+ 21511 1328d E8000000 		call	KDbgWriterGet at PLT
+ 21511      00
+ 21512 13292 4885C0   		testq	%rax, %rax
+ 21513 13295 743A     		je	.L426
+ 21514 13297 BF040000 		movl	$4, %edi
+ 21514      00
+ 21515 1329c E8000000 		call	KDbgCondToFlag at PLT
+ 21515      00
+ 21516 132a1 4889C6   		movq	%rax, %rsi
+ 21517 132a4 BF100000 		movl	$16, %edi
+ 21517      00
+ 21518 132a9 E8000000 		call	KDbgTestModConds at PLT
+ 21518      00
+ 21519 132ae 84C0     		testb	%al, %al
+ 21520 132b0 741F     		je	.L426
+ 21521 132b2 488B45E8 		movq	-24(%rbp), %rax
+ 21522 132b6 4889C2   		movq	%rax, %rdx
+ 21523 132b9 488D3500 		leaq	__func__.9198(%rip), %rsi
+ 21523      000000
+ 21524 132c0 488D3D00 		leaq	.LC26(%rip), %rdi
+ 21524      000000
+ 21525 132c7 B8000000 		movl	$0, %eax
+ 21525      00
+ 21526 132cc E8000000 		call	KDbgMsg at PLT
+ 21526      00
+ 21527              	.L426:
+2622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     /* Check parameter first */
+2624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     if (new_obj == NULL)
+ 21528              		.loc 2 2624 0
+ 21529 132d1 48837DE8 		cmpq	$0, -24(%rbp)
+ 21529      00
+ 21530 132d6 7522     		jne	.L427
+2625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+ 21531              		.loc 2 2625 0
+ 21532 132d8 B9410A00 		movl	$2625, %ecx
+ 21532      00
+ 21533 132dd 488D1500 		leaq	__func__.9198(%rip), %rdx
+ 21533      000000
+ 21534 132e4 488D3500 		leaq	.LC18(%rip), %rsi
+ 21534      000000
+ 21535 132eb BF878F00 		movl	$-2030006393, %edi
+ 21535      87
+ 21536 132f0 E8000000 		call	SetRCFileFuncLine at PLT
+ 21536      00
+ 21537 132f5 8945FC   		movl	%eax, -4(%rbp)
+ 21538 132f8 EB53     		jmp	.L428
+ 21539              	.L427:
+2626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     else
+2628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     {
+2629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         *new_obj = NULL;
+ 21540              		.loc 2 2629 0
+ 21541 132fa 488B45E8 		movq	-24(%rbp), %rax
+
GAS LISTING /tmp/ccjbMjHD.s 			page 648
+
+
+ 21542 132fe 48C70000 		movq	$0, (%rax)
+ 21542      000000
+2630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         /* check for processor support of this flavor */
+2632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         if ( ! AESBCMEMBER(ProcessorSupport)())
+ 21543              		.loc 2 2632 0
+ 21544 13305 B8000000 		movl	$0, %eax
+ 21544      00
+ 21545 1330a E81CFDFF 		call	KAESBlockCipherVecRegProcessorSupport
+ 21545      FF
+ 21546 1330f 83F001   		xorl	$1, %eax
+ 21547 13312 84C0     		testb	%al, %al
+ 21548 13314 7422     		je	.L429
+2633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+ 21549              		.loc 2 2633 0
+ 21550 13316 B9490A00 		movl	$2633, %ecx
+ 21550      00
+ 21551 1331b 488D1500 		leaq	__func__.9198(%rip), %rdx
+ 21551      000000
+ 21552 13322 488D3500 		leaq	.LC18(%rip), %rsi
+ 21552      000000
+ 21553 13329 BF038500 		movl	$-2030009085, %edi
+ 21553      87
+ 21554 1332e E8000000 		call	SetRCFileFuncLine at PLT
+ 21554      00
+ 21555 13333 8945FC   		movl	%eax, -4(%rbp)
+ 21556 13336 EB15     		jmp	.L428
+ 21557              	.L429:
+2634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** 
+2635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         else
+2636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         {
+2637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             rc = 0;
+ 21558              		.loc 2 2637 0
+ 21559 13338 C745FC00 		movl	$0, -4(%rbp)
+ 21559      000000
+2638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****             *new_obj = (KBlockCipher*)&(AESBCMEMBER(_vt_));
+ 21560              		.loc 2 2638 0
+ 21561 1333f 488D1500 		leaq	KAESBlockCipherVecReg_vt_(%rip), %rdx
+ 21561      000000
+ 21562 13346 488B45E8 		movq	-24(%rbp), %rax
+ 21563 1334a 488910   		movq	%rdx, (%rax)
+ 21564              	.L428:
+2639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****         }
+2640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     }
+2641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c ****     return rc;
+ 21565              		.loc 2 2641 0
+ 21566 1334d 8B45FC   		movl	-4(%rbp), %eax
+2642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c **** }
+ 21567              		.loc 2 2642 0
+ 21568 13350 C9       		leave
+ 21569 13351 C3       		ret
+ 21570              		.cfi_endproc
+ 21571              	.LFE668:
+ 21572              		.size	KAESBlockCipherVecRegMake, .-KAESBlockCipherVecRegMake
+ 21573              		.section	.rodata
+ 21574 053f 00       		.align 16
+ 21575              		.type	__func__.9198, @object
+
GAS LISTING /tmp/ccjbMjHD.s 			page 649
+
+
+ 21576              		.size	__func__.9198, 26
+ 21577              	__func__.9198:
+ 21578 0540 4B414553 		.string	"KAESBlockCipherVecRegMake"
+ 21578      426C6F63 
+ 21578      6B436970 
+ 21578      68657256 
+ 21578      65635265 
+ 21579 055a 00000000 		.align 16
+ 21579      0000
+ 21580              		.type	__PRETTY_FUNCTION__.9199, @object
+ 21581              		.size	__PRETTY_FUNCTION__.9199, 26
+ 21582              	__PRETTY_FUNCTION__.9199:
+ 21583 0560 4B414553 		.string	"KAESBlockCipherVecRegMake"
+ 21583      426C6F63 
+ 21583      6B436970 
+ 21583      68657256 
+ 21583      65635265 
+ 21584 057a 00000000 		.align 32
+ 21584      0000
+ 21585              		.type	__func__.9108, @object
+ 21586              		.size	__func__.9108, 38
+ 21587              	__func__.9108:
+ 21588 0580 4B414553 		.string	"KAESBlockCipherVecRegProcessorSupport"
+ 21588      426C6F63 
+ 21588      6B436970 
+ 21588      68657256 
+ 21588      65635265 
+ 21589 05a6 00000000 		.align 16
+ 21589      00000000 
+ 21589      0000
+ 21590              		.type	__PRETTY_FUNCTION__.9084, @object
+ 21591              		.size	__PRETTY_FUNCTION__.9084, 29
+ 21592              	__PRETTY_FUNCTION__.9084:
+ 21593 05b0 4B414553 		.string	"KAESBlockCipherVecRegDecrypt"
+ 21593      426C6F63 
+ 21593      6B436970 
+ 21593      68657256 
+ 21593      65635265 
+ 21594 05cd 000000   		.align 16
+ 21595              		.type	__PRETTY_FUNCTION__.9063, @object
+ 21596              		.size	__PRETTY_FUNCTION__.9063, 29
+ 21597              	__PRETTY_FUNCTION__.9063:
+ 21598 05d0 4B414553 		.string	"KAESBlockCipherVecRegEncrypt"
+ 21598      426C6F63 
+ 21598      6B436970 
+ 21598      68657256 
+ 21598      65635265 
+ 21599 05ed 000000   		.align 16
+ 21600              		.type	ShiftRowTable.7358, @object
+ 21601              		.size	ShiftRowTable.7358, 16
+ 21602              	ShiftRowTable.7358:
+ 21603 05f0 00       		.byte	0
+ 21604 05f1 05       		.byte	5
+ 21605 05f2 0A       		.byte	10
+ 21606 05f3 0F       		.byte	15
+ 21607 05f4 04       		.byte	4
+ 21608 05f5 09       		.byte	9
+
GAS LISTING /tmp/ccjbMjHD.s 			page 650
+
+
+ 21609 05f6 0E       		.byte	14
+ 21610 05f7 03       		.byte	3
+ 21611 05f8 08       		.byte	8
+ 21612 05f9 0D       		.byte	13
+ 21613 05fa 02       		.byte	2
+ 21614 05fb 07       		.byte	7
+ 21615 05fc 0C       		.byte	12
+ 21616 05fd 01       		.byte	1
+ 21617 05fe 06       		.byte	6
+ 21618 05ff 0B       		.byte	11
+ 21619              		.align 16
+ 21620              		.type	ShiftRowTable.7385, @object
+ 21621              		.size	ShiftRowTable.7385, 16
+ 21622              	ShiftRowTable.7385:
+ 21623 0600 01       		.byte	1
+ 21624 0601 02       		.byte	2
+ 21625 0602 03       		.byte	3
+ 21626 0603 00       		.byte	0
+ 21627 0604 05       		.byte	5
+ 21628 0605 06       		.byte	6
+ 21629 0606 07       		.byte	7
+ 21630 0607 04       		.byte	4
+ 21631 0608 09       		.byte	9
+ 21632 0609 0A       		.byte	10
+ 21633 060a 0B       		.byte	11
+ 21634 060b 08       		.byte	8
+ 21635 060c 0D       		.byte	13
+ 21636 060d 0E       		.byte	14
+ 21637 060e 0F       		.byte	15
+ 21638 060f 0C       		.byte	12
+ 21639              		.align 16
+ 21640              		.type	__PRETTY_FUNCTION__.7467, @object
+ 21641              		.size	__PRETTY_FUNCTION__.7467, 28
+ 21642              	__PRETTY_FUNCTION__.7467:
+ 21643 0610 4B414553 		.string	"KAESBlockCipherVecRegFF_mul"
+ 21643      426C6F63 
+ 21643      6B436970 
+ 21643      68657256 
+ 21643      65635265 
+ 21644 062c 00000000 		.align 32
+ 21644      00000000 
+ 21644      00000000 
+ 21644      00000000 
+ 21644      00000000 
+ 21645              		.type	sr_mask.7327, @object
+ 21646              		.size	sr_mask.7327, 144
+ 21647              	sr_mask.7327:
+ 21648 0640 FF       		.byte	-1
+ 21649 0641 FF       		.byte	-1
+ 21650 0642 FF       		.byte	-1
+ 21651 0643 FF       		.byte	-1
+ 21652 0644 FF       		.byte	-1
+ 21653 0645 FF       		.byte	-1
+ 21654 0646 FF       		.byte	-1
+ 21655 0647 FF       		.byte	-1
+ 21656 0648 FF       		.byte	-1
+ 21657 0649 FF       		.byte	-1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 651
+
+
+ 21658 064a FF       		.byte	-1
+ 21659 064b FF       		.byte	-1
+ 21660 064c FF       		.byte	-1
+ 21661 064d FF       		.byte	-1
+ 21662 064e FF       		.byte	-1
+ 21663 064f FF       		.byte	-1
+ 21664 0650 7F       		.byte	127
+ 21665 0651 7F       		.byte	127
+ 21666 0652 7F       		.byte	127
+ 21667 0653 7F       		.byte	127
+ 21668 0654 7F       		.byte	127
+ 21669 0655 7F       		.byte	127
+ 21670 0656 7F       		.byte	127
+ 21671 0657 7F       		.byte	127
+ 21672 0658 7F       		.byte	127
+ 21673 0659 7F       		.byte	127
+ 21674 065a 7F       		.byte	127
+ 21675 065b 7F       		.byte	127
+ 21676 065c 7F       		.byte	127
+ 21677 065d 7F       		.byte	127
+ 21678 065e 7F       		.byte	127
+ 21679 065f 7F       		.byte	127
+ 21680 0660 3F       		.byte	63
+ 21681 0661 3F       		.byte	63
+ 21682 0662 3F       		.byte	63
+ 21683 0663 3F       		.byte	63
+ 21684 0664 3F       		.byte	63
+ 21685 0665 3F       		.byte	63
+ 21686 0666 3F       		.byte	63
+ 21687 0667 3F       		.byte	63
+ 21688 0668 3F       		.byte	63
+ 21689 0669 3F       		.byte	63
+ 21690 066a 3F       		.byte	63
+ 21691 066b 3F       		.byte	63
+ 21692 066c 3F       		.byte	63
+ 21693 066d 3F       		.byte	63
+ 21694 066e 3F       		.byte	63
+ 21695 066f 3F       		.byte	63
+ 21696 0670 1F       		.byte	31
+ 21697 0671 1F       		.byte	31
+ 21698 0672 1F       		.byte	31
+ 21699 0673 1F       		.byte	31
+ 21700 0674 1F       		.byte	31
+ 21701 0675 1F       		.byte	31
+ 21702 0676 1F       		.byte	31
+ 21703 0677 1F       		.byte	31
+ 21704 0678 1F       		.byte	31
+ 21705 0679 1F       		.byte	31
+ 21706 067a 1F       		.byte	31
+ 21707 067b 1F       		.byte	31
+ 21708 067c 1F       		.byte	31
+ 21709 067d 1F       		.byte	31
+ 21710 067e 1F       		.byte	31
+ 21711 067f 1F       		.byte	31
+ 21712 0680 0F       		.byte	15
+ 21713 0681 0F       		.byte	15
+ 21714 0682 0F       		.byte	15
+
GAS LISTING /tmp/ccjbMjHD.s 			page 652
+
+
+ 21715 0683 0F       		.byte	15
+ 21716 0684 0F       		.byte	15
+ 21717 0685 0F       		.byte	15
+ 21718 0686 0F       		.byte	15
+ 21719 0687 0F       		.byte	15
+ 21720 0688 0F       		.byte	15
+ 21721 0689 0F       		.byte	15
+ 21722 068a 0F       		.byte	15
+ 21723 068b 0F       		.byte	15
+ 21724 068c 0F       		.byte	15
+ 21725 068d 0F       		.byte	15
+ 21726 068e 0F       		.byte	15
+ 21727 068f 0F       		.byte	15
+ 21728 0690 07       		.byte	7
+ 21729 0691 07       		.byte	7
+ 21730 0692 07       		.byte	7
+ 21731 0693 07       		.byte	7
+ 21732 0694 07       		.byte	7
+ 21733 0695 07       		.byte	7
+ 21734 0696 07       		.byte	7
+ 21735 0697 07       		.byte	7
+ 21736 0698 07       		.byte	7
+ 21737 0699 07       		.byte	7
+ 21738 069a 07       		.byte	7
+ 21739 069b 07       		.byte	7
+ 21740 069c 07       		.byte	7
+ 21741 069d 07       		.byte	7
+ 21742 069e 07       		.byte	7
+ 21743 069f 07       		.byte	7
+ 21744 06a0 03       		.byte	3
+ 21745 06a1 03       		.byte	3
+ 21746 06a2 03       		.byte	3
+ 21747 06a3 03       		.byte	3
+ 21748 06a4 03       		.byte	3
+ 21749 06a5 03       		.byte	3
+ 21750 06a6 03       		.byte	3
+ 21751 06a7 03       		.byte	3
+ 21752 06a8 03       		.byte	3
+ 21753 06a9 03       		.byte	3
+ 21754 06aa 03       		.byte	3
+ 21755 06ab 03       		.byte	3
+ 21756 06ac 03       		.byte	3
+ 21757 06ad 03       		.byte	3
+ 21758 06ae 03       		.byte	3
+ 21759 06af 03       		.byte	3
+ 21760 06b0 01       		.byte	1
+ 21761 06b1 01       		.byte	1
+ 21762 06b2 01       		.byte	1
+ 21763 06b3 01       		.byte	1
+ 21764 06b4 01       		.byte	1
+ 21765 06b5 01       		.byte	1
+ 21766 06b6 01       		.byte	1
+ 21767 06b7 01       		.byte	1
+ 21768 06b8 01       		.byte	1
+ 21769 06b9 01       		.byte	1
+ 21770 06ba 01       		.byte	1
+ 21771 06bb 01       		.byte	1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 653
+
+
+ 21772 06bc 01       		.byte	1
+ 21773 06bd 01       		.byte	1
+ 21774 06be 01       		.byte	1
+ 21775 06bf 01       		.byte	1
+ 21776 06c0 00       		.byte	0
+ 21777 06c1 00       		.byte	0
+ 21778 06c2 00       		.byte	0
+ 21779 06c3 00       		.byte	0
+ 21780 06c4 00       		.byte	0
+ 21781 06c5 00       		.byte	0
+ 21782 06c6 00       		.byte	0
+ 21783 06c7 00       		.byte	0
+ 21784 06c8 00       		.byte	0
+ 21785 06c9 00       		.byte	0
+ 21786 06ca 00       		.byte	0
+ 21787 06cb 00       		.byte	0
+ 21788 06cc 00       		.byte	0
+ 21789 06cd 00       		.byte	0
+ 21790 06ce 00       		.byte	0
+ 21791 06cf 00       		.byte	0
+ 21792              		.align 16
+ 21793              		.type	__PRETTY_FUNCTION__.7312, @object
+ 21794              		.size	__PRETTY_FUNCTION__.7312, 30
+ 21795              	__PRETTY_FUNCTION__.7312:
+ 21796 06d0 4B414553 		.string	"KAESBlockCipherVecRegVecSLLBI"
+ 21796      426C6F63 
+ 21796      6B436970 
+ 21796      68657256 
+ 21796      65635265 
+ 21797 06ee 00000000 		.align 32
+ 21797      00000000 
+ 21797      00000000 
+ 21797      00000000 
+ 21797      0000
+ 21798              		.type	sl_mask.7310, @object
+ 21799              		.size	sl_mask.7310, 144
+ 21800              	sl_mask.7310:
+ 21801 0700 FF       		.byte	-1
+ 21802 0701 FF       		.byte	-1
+ 21803 0702 FF       		.byte	-1
+ 21804 0703 FF       		.byte	-1
+ 21805 0704 FF       		.byte	-1
+ 21806 0705 FF       		.byte	-1
+ 21807 0706 FF       		.byte	-1
+ 21808 0707 FF       		.byte	-1
+ 21809 0708 FF       		.byte	-1
+ 21810 0709 FF       		.byte	-1
+ 21811 070a FF       		.byte	-1
+ 21812 070b FF       		.byte	-1
+ 21813 070c FF       		.byte	-1
+ 21814 070d FF       		.byte	-1
+ 21815 070e FF       		.byte	-1
+ 21816 070f FF       		.byte	-1
+ 21817 0710 FE       		.byte	-2
+ 21818 0711 FE       		.byte	-2
+ 21819 0712 FE       		.byte	-2
+ 21820 0713 FE       		.byte	-2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 654
+
+
+ 21821 0714 FE       		.byte	-2
+ 21822 0715 FE       		.byte	-2
+ 21823 0716 FE       		.byte	-2
+ 21824 0717 FE       		.byte	-2
+ 21825 0718 FE       		.byte	-2
+ 21826 0719 FE       		.byte	-2
+ 21827 071a FE       		.byte	-2
+ 21828 071b FE       		.byte	-2
+ 21829 071c FE       		.byte	-2
+ 21830 071d FE       		.byte	-2
+ 21831 071e FE       		.byte	-2
+ 21832 071f FE       		.byte	-2
+ 21833 0720 FC       		.byte	-4
+ 21834 0721 FC       		.byte	-4
+ 21835 0722 FC       		.byte	-4
+ 21836 0723 FC       		.byte	-4
+ 21837 0724 FC       		.byte	-4
+ 21838 0725 FC       		.byte	-4
+ 21839 0726 FC       		.byte	-4
+ 21840 0727 FC       		.byte	-4
+ 21841 0728 FC       		.byte	-4
+ 21842 0729 FC       		.byte	-4
+ 21843 072a FC       		.byte	-4
+ 21844 072b FC       		.byte	-4
+ 21845 072c FC       		.byte	-4
+ 21846 072d FC       		.byte	-4
+ 21847 072e FC       		.byte	-4
+ 21848 072f FC       		.byte	-4
+ 21849 0730 F8       		.byte	-8
+ 21850 0731 F8       		.byte	-8
+ 21851 0732 F8       		.byte	-8
+ 21852 0733 F8       		.byte	-8
+ 21853 0734 F8       		.byte	-8
+ 21854 0735 F8       		.byte	-8
+ 21855 0736 F8       		.byte	-8
+ 21856 0737 F8       		.byte	-8
+ 21857 0738 F8       		.byte	-8
+ 21858 0739 F8       		.byte	-8
+ 21859 073a F8       		.byte	-8
+ 21860 073b F8       		.byte	-8
+ 21861 073c F8       		.byte	-8
+ 21862 073d F8       		.byte	-8
+ 21863 073e F8       		.byte	-8
+ 21864 073f F8       		.byte	-8
+ 21865 0740 F0       		.byte	-16
+ 21866 0741 F0       		.byte	-16
+ 21867 0742 F0       		.byte	-16
+ 21868 0743 F0       		.byte	-16
+ 21869 0744 F0       		.byte	-16
+ 21870 0745 F0       		.byte	-16
+ 21871 0746 F0       		.byte	-16
+ 21872 0747 F0       		.byte	-16
+ 21873 0748 F0       		.byte	-16
+ 21874 0749 F0       		.byte	-16
+ 21875 074a F0       		.byte	-16
+ 21876 074b F0       		.byte	-16
+ 21877 074c F0       		.byte	-16
+
GAS LISTING /tmp/ccjbMjHD.s 			page 655
+
+
+ 21878 074d F0       		.byte	-16
+ 21879 074e F0       		.byte	-16
+ 21880 074f F0       		.byte	-16
+ 21881 0750 E0       		.byte	-32
+ 21882 0751 E0       		.byte	-32
+ 21883 0752 E0       		.byte	-32
+ 21884 0753 E0       		.byte	-32
+ 21885 0754 E0       		.byte	-32
+ 21886 0755 E0       		.byte	-32
+ 21887 0756 E0       		.byte	-32
+ 21888 0757 E0       		.byte	-32
+ 21889 0758 E0       		.byte	-32
+ 21890 0759 E0       		.byte	-32
+ 21891 075a E0       		.byte	-32
+ 21892 075b E0       		.byte	-32
+ 21893 075c E0       		.byte	-32
+ 21894 075d E0       		.byte	-32
+ 21895 075e E0       		.byte	-32
+ 21896 075f E0       		.byte	-32
+ 21897 0760 C0       		.byte	-64
+ 21898 0761 C0       		.byte	-64
+ 21899 0762 C0       		.byte	-64
+ 21900 0763 C0       		.byte	-64
+ 21901 0764 C0       		.byte	-64
+ 21902 0765 C0       		.byte	-64
+ 21903 0766 C0       		.byte	-64
+ 21904 0767 C0       		.byte	-64
+ 21905 0768 C0       		.byte	-64
+ 21906 0769 C0       		.byte	-64
+ 21907 076a C0       		.byte	-64
+ 21908 076b C0       		.byte	-64
+ 21909 076c C0       		.byte	-64
+ 21910 076d C0       		.byte	-64
+ 21911 076e C0       		.byte	-64
+ 21912 076f C0       		.byte	-64
+ 21913 0770 80       		.byte	-128
+ 21914 0771 80       		.byte	-128
+ 21915 0772 80       		.byte	-128
+ 21916 0773 80       		.byte	-128
+ 21917 0774 80       		.byte	-128
+ 21918 0775 80       		.byte	-128
+ 21919 0776 80       		.byte	-128
+ 21920 0777 80       		.byte	-128
+ 21921 0778 80       		.byte	-128
+ 21922 0779 80       		.byte	-128
+ 21923 077a 80       		.byte	-128
+ 21924 077b 80       		.byte	-128
+ 21925 077c 80       		.byte	-128
+ 21926 077d 80       		.byte	-128
+ 21927 077e 80       		.byte	-128
+ 21928 077f 80       		.byte	-128
+ 21929 0780 00       		.byte	0
+ 21930 0781 00       		.byte	0
+ 21931 0782 00       		.byte	0
+ 21932 0783 00       		.byte	0
+ 21933 0784 00       		.byte	0
+ 21934 0785 00       		.byte	0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 656
+
+
+ 21935 0786 00       		.byte	0
+ 21936 0787 00       		.byte	0
+ 21937 0788 00       		.byte	0
+ 21938 0789 00       		.byte	0
+ 21939 078a 00       		.byte	0
+ 21940 078b 00       		.byte	0
+ 21941 078c 00       		.byte	0
+ 21942 078d 00       		.byte	0
+ 21943 078e 00       		.byte	0
+ 21944 078f 00       		.byte	0
+ 21945 0790 00000000 		.align 32
+ 21945      00000000 
+ 21945      00000000 
+ 21945      00000000 
+ 21946              		.type	__func__.9027, @object
+ 21947              		.size	__func__.9027, 35
+ 21948              	__func__.9027:
+ 21949 07a0 4B414553 		.string	"KAESBlockCipherVecRegSetEncryptKey"
+ 21949      426C6F63 
+ 21949      6B436970 
+ 21949      68657256 
+ 21949      65635265 
+ 21950 07c3 00000000 		.align 32
+ 21950      00000000 
+ 21950      00000000 
+ 21950      00000000 
+ 21950      00000000 
+ 21951              		.type	__PRETTY_FUNCTION__.9026, @object
+ 21952              		.size	__PRETTY_FUNCTION__.9026, 35
+ 21953              	__PRETTY_FUNCTION__.9026:
+ 21954 07e0 4B414553 		.string	"KAESBlockCipherVecRegSetEncryptKey"
+ 21954      426C6F63 
+ 21954      6B436970 
+ 21954      68657256 
+ 21954      65635265 
+ 21955 0803 00000000 		.align 16
+ 21955      00000000 
+ 21955      00000000 
+ 21955      00
+ 21956              		.type	mask.7943, @object
+ 21957              		.size	mask.7943, 16
+ 21958              	mask.7943:
+ 21959 0810 FF       		.byte	-1
+ 21960 0811 FF       		.byte	-1
+ 21961 0812 FF       		.byte	-1
+ 21962 0813 FF       		.byte	-1
+ 21963 0814 00       		.byte	0
+ 21964 0815 01       		.byte	1
+ 21965 0816 02       		.byte	2
+ 21966 0817 03       		.byte	3
+ 21967 0818 04       		.byte	4
+ 21968 0819 05       		.byte	5
+ 21969 081a 06       		.byte	6
+ 21970 081b 07       		.byte	7
+ 21971 081c 08       		.byte	8
+ 21972 081d 09       		.byte	9
+ 21973 081e 0A       		.byte	10
+
GAS LISTING /tmp/ccjbMjHD.s 			page 657
+
+
+ 21974 081f 0B       		.byte	11
+ 21975              		.align 16
+ 21976              		.type	mask.7952, @object
+ 21977              		.size	mask.7952, 16
+ 21978              	mask.7952:
+ 21979 0820 08       		.byte	8
+ 21980 0821 09       		.byte	9
+ 21981 0822 0A       		.byte	10
+ 21982 0823 0B       		.byte	11
+ 21983 0824 0C       		.byte	12
+ 21984 0825 0D       		.byte	13
+ 21985 0826 0E       		.byte	14
+ 21986 0827 0F       		.byte	15
+ 21987 0828 FF       		.byte	-1
+ 21988 0829 FF       		.byte	-1
+ 21989 082a FF       		.byte	-1
+ 21990 082b FF       		.byte	-1
+ 21991 082c FF       		.byte	-1
+ 21992 082d FF       		.byte	-1
+ 21993 082e FF       		.byte	-1
+ 21994 082f FF       		.byte	-1
+ 21995              		.align 16
+ 21996              		.type	InvShiftRowTable.7367, @object
+ 21997              		.size	InvShiftRowTable.7367, 16
+ 21998              	InvShiftRowTable.7367:
+ 21999 0830 00       		.byte	0
+ 22000 0831 0D       		.byte	13
+ 22001 0832 0A       		.byte	10
+ 22002 0833 07       		.byte	7
+ 22003 0834 04       		.byte	4
+ 22004 0835 01       		.byte	1
+ 22005 0836 0E       		.byte	14
+ 22006 0837 0B       		.byte	11
+ 22007 0838 08       		.byte	8
+ 22008 0839 05       		.byte	5
+ 22009 083a 02       		.byte	2
+ 22010 083b 0F       		.byte	15
+ 22011 083c 0C       		.byte	12
+ 22012 083d 09       		.byte	9
+ 22013 083e 06       		.byte	6
+ 22014 083f 03       		.byte	3
+ 22015              		.text
+ 22016              	.Letext0:
+ 22017              		.section	.debug_loc,"", at progbits
+ 22018              	.Ldebug_loc0:
+ 22019              	.LLST0:
+ 22020 0000 00000000 		.quad	.LFB591-.Ltext0
+ 22020      00000000 
+ 22021 0008 01000000 		.quad	.LCFI0-.Ltext0
+ 22021      00000000 
+ 22022 0010 0200     		.value	0x2
+ 22023 0012 77       		.byte	0x77
+ 22024 0013 08       		.sleb128 8
+ 22025 0014 01000000 		.quad	.LCFI0-.Ltext0
+ 22025      00000000 
+ 22026 001c 04000000 		.quad	.LCFI1-.Ltext0
+ 22026      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 658
+
+
+ 22027 0024 0200     		.value	0x2
+ 22028 0026 77       		.byte	0x77
+ 22029 0027 10       		.sleb128 16
+ 22030 0028 04000000 		.quad	.LCFI1-.Ltext0
+ 22030      00000000 
+ 22031 0030 14000000 		.quad	.LFE591-.Ltext0
+ 22031      00000000 
+ 22032 0038 0200     		.value	0x2
+ 22033 003a 76       		.byte	0x76
+ 22034 003b 10       		.sleb128 16
+ 22035 003c 00000000 		.quad	0x0
+ 22035      00000000 
+ 22036 0044 00000000 		.quad	0x0
+ 22036      00000000 
+ 22037              	.LLST1:
+ 22038 004c 14000000 		.quad	.LFB645-.Ltext0
+ 22038      00000000 
+ 22039 0054 15000000 		.quad	.LCFI2-.Ltext0
+ 22039      00000000 
+ 22040 005c 0200     		.value	0x2
+ 22041 005e 77       		.byte	0x77
+ 22042 005f 08       		.sleb128 8
+ 22043 0060 15000000 		.quad	.LCFI2-.Ltext0
+ 22043      00000000 
+ 22044 0068 18000000 		.quad	.LCFI3-.Ltext0
+ 22044      00000000 
+ 22045 0070 0200     		.value	0x2
+ 22046 0072 77       		.byte	0x77
+ 22047 0073 10       		.sleb128 16
+ 22048 0074 18000000 		.quad	.LCFI3-.Ltext0
+ 22048      00000000 
+ 22049 007c EF540000 		.quad	.LFE645-.Ltext0
+ 22049      00000000 
+ 22050 0084 0200     		.value	0x2
+ 22051 0086 76       		.byte	0x76
+ 22052 0087 10       		.sleb128 16
+ 22053 0088 00000000 		.quad	0x0
+ 22053      00000000 
+ 22054 0090 00000000 		.quad	0x0
+ 22054      00000000 
+ 22055              	.LLST2:
+ 22056 0098 EF540000 		.quad	.LFB646-.Ltext0
+ 22056      00000000 
+ 22057 00a0 F0540000 		.quad	.LCFI4-.Ltext0
+ 22057      00000000 
+ 22058 00a8 0200     		.value	0x2
+ 22059 00aa 77       		.byte	0x77
+ 22060 00ab 08       		.sleb128 8
+ 22061 00ac F0540000 		.quad	.LCFI4-.Ltext0
+ 22061      00000000 
+ 22062 00b4 F3540000 		.quad	.LCFI5-.Ltext0
+ 22062      00000000 
+ 22063 00bc 0200     		.value	0x2
+ 22064 00be 77       		.byte	0x77
+ 22065 00bf 10       		.sleb128 16
+ 22066 00c0 F3540000 		.quad	.LCFI5-.Ltext0
+ 22066      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 659
+
+
+ 22067 00c8 7D960000 		.quad	.LFE646-.Ltext0
+ 22067      00000000 
+ 22068 00d0 0200     		.value	0x2
+ 22069 00d2 76       		.byte	0x76
+ 22070 00d3 10       		.sleb128 16
+ 22071 00d4 00000000 		.quad	0x0
+ 22071      00000000 
+ 22072 00dc 00000000 		.quad	0x0
+ 22072      00000000 
+ 22073              	.LLST3:
+ 22074 00e4 7D960000 		.quad	.LFB647-.Ltext0
+ 22074      00000000 
+ 22075 00ec 7E960000 		.quad	.LCFI6-.Ltext0
+ 22075      00000000 
+ 22076 00f4 0200     		.value	0x2
+ 22077 00f6 77       		.byte	0x77
+ 22078 00f7 08       		.sleb128 8
+ 22079 00f8 7E960000 		.quad	.LCFI6-.Ltext0
+ 22079      00000000 
+ 22080 0100 81960000 		.quad	.LCFI7-.Ltext0
+ 22080      00000000 
+ 22081 0108 0200     		.value	0x2
+ 22082 010a 77       		.byte	0x77
+ 22083 010b 10       		.sleb128 16
+ 22084 010c 81960000 		.quad	.LCFI7-.Ltext0
+ 22084      00000000 
+ 22085 0114 79E40000 		.quad	.LFE647-.Ltext0
+ 22085      00000000 
+ 22086 011c 0200     		.value	0x2
+ 22087 011e 76       		.byte	0x76
+ 22088 011f 10       		.sleb128 16
+ 22089 0120 00000000 		.quad	0x0
+ 22089      00000000 
+ 22090 0128 00000000 		.quad	0x0
+ 22090      00000000 
+ 22091              	.LLST4:
+ 22092 0130 79E40000 		.quad	.LFB648-.Ltext0
+ 22092      00000000 
+ 22093 0138 7AE40000 		.quad	.LCFI8-.Ltext0
+ 22093      00000000 
+ 22094 0140 0200     		.value	0x2
+ 22095 0142 77       		.byte	0x77
+ 22096 0143 08       		.sleb128 8
+ 22097 0144 7AE40000 		.quad	.LCFI8-.Ltext0
+ 22097      00000000 
+ 22098 014c 7DE40000 		.quad	.LCFI9-.Ltext0
+ 22098      00000000 
+ 22099 0154 0200     		.value	0x2
+ 22100 0156 77       		.byte	0x77
+ 22101 0157 10       		.sleb128 16
+ 22102 0158 7DE40000 		.quad	.LCFI9-.Ltext0
+ 22102      00000000 
+ 22103 0160 39F40000 		.quad	.LFE648-.Ltext0
+ 22103      00000000 
+ 22104 0168 0200     		.value	0x2
+ 22105 016a 76       		.byte	0x76
+ 22106 016b 10       		.sleb128 16
+
GAS LISTING /tmp/ccjbMjHD.s 			page 660
+
+
+ 22107 016c 00000000 		.quad	0x0
+ 22107      00000000 
+ 22108 0174 00000000 		.quad	0x0
+ 22108      00000000 
+ 22109              	.LLST5:
+ 22110 017c 39F40000 		.quad	.LFB649-.Ltext0
+ 22110      00000000 
+ 22111 0184 3AF40000 		.quad	.LCFI10-.Ltext0
+ 22111      00000000 
+ 22112 018c 0200     		.value	0x2
+ 22113 018e 77       		.byte	0x77
+ 22114 018f 08       		.sleb128 8
+ 22115 0190 3AF40000 		.quad	.LCFI10-.Ltext0
+ 22115      00000000 
+ 22116 0198 3DF40000 		.quad	.LCFI11-.Ltext0
+ 22116      00000000 
+ 22117 01a0 0200     		.value	0x2
+ 22118 01a2 77       		.byte	0x77
+ 22119 01a3 10       		.sleb128 16
+ 22120 01a4 3DF40000 		.quad	.LCFI11-.Ltext0
+ 22120      00000000 
+ 22121 01ac 63F40000 		.quad	.LFE649-.Ltext0
+ 22121      00000000 
+ 22122 01b4 0200     		.value	0x2
+ 22123 01b6 76       		.byte	0x76
+ 22124 01b7 10       		.sleb128 16
+ 22125 01b8 00000000 		.quad	0x0
+ 22125      00000000 
+ 22126 01c0 00000000 		.quad	0x0
+ 22126      00000000 
+ 22127              	.LLST6:
+ 22128 01c8 63F40000 		.quad	.LFB650-.Ltext0
+ 22128      00000000 
+ 22129 01d0 64F40000 		.quad	.LCFI12-.Ltext0
+ 22129      00000000 
+ 22130 01d8 0200     		.value	0x2
+ 22131 01da 77       		.byte	0x77
+ 22132 01db 08       		.sleb128 8
+ 22133 01dc 64F40000 		.quad	.LCFI12-.Ltext0
+ 22133      00000000 
+ 22134 01e4 67F40000 		.quad	.LCFI13-.Ltext0
+ 22134      00000000 
+ 22135 01ec 0200     		.value	0x2
+ 22136 01ee 77       		.byte	0x77
+ 22137 01ef 10       		.sleb128 16
+ 22138 01f0 67F40000 		.quad	.LCFI13-.Ltext0
+ 22138      00000000 
+ 22139 01f8 8DF40000 		.quad	.LFE650-.Ltext0
+ 22139      00000000 
+ 22140 0200 0200     		.value	0x2
+ 22141 0202 76       		.byte	0x76
+ 22142 0203 10       		.sleb128 16
+ 22143 0204 00000000 		.quad	0x0
+ 22143      00000000 
+ 22144 020c 00000000 		.quad	0x0
+ 22144      00000000 
+ 22145              	.LLST7:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 661
+
+
+ 22146 0214 8DF40000 		.quad	.LFB651-.Ltext0
+ 22146      00000000 
+ 22147 021c 8EF40000 		.quad	.LCFI14-.Ltext0
+ 22147      00000000 
+ 22148 0224 0200     		.value	0x2
+ 22149 0226 77       		.byte	0x77
+ 22150 0227 08       		.sleb128 8
+ 22151 0228 8EF40000 		.quad	.LCFI14-.Ltext0
+ 22151      00000000 
+ 22152 0230 91F40000 		.quad	.LCFI15-.Ltext0
+ 22152      00000000 
+ 22153 0238 0200     		.value	0x2
+ 22154 023a 77       		.byte	0x77
+ 22155 023b 10       		.sleb128 16
+ 22156 023c 91F40000 		.quad	.LCFI15-.Ltext0
+ 22156      00000000 
+ 22157 0244 B7F40000 		.quad	.LFE651-.Ltext0
+ 22157      00000000 
+ 22158 024c 0200     		.value	0x2
+ 22159 024e 76       		.byte	0x76
+ 22160 024f 10       		.sleb128 16
+ 22161 0250 00000000 		.quad	0x0
+ 22161      00000000 
+ 22162 0258 00000000 		.quad	0x0
+ 22162      00000000 
+ 22163              	.LLST8:
+ 22164 0260 B7F40000 		.quad	.LFB655-.Ltext0
+ 22164      00000000 
+ 22165 0268 B8F40000 		.quad	.LCFI16-.Ltext0
+ 22165      00000000 
+ 22166 0270 0200     		.value	0x2
+ 22167 0272 77       		.byte	0x77
+ 22168 0273 08       		.sleb128 8
+ 22169 0274 B8F40000 		.quad	.LCFI16-.Ltext0
+ 22169      00000000 
+ 22170 027c BBF40000 		.quad	.LCFI17-.Ltext0
+ 22170      00000000 
+ 22171 0284 0200     		.value	0x2
+ 22172 0286 77       		.byte	0x77
+ 22173 0287 10       		.sleb128 16
+ 22174 0288 BBF40000 		.quad	.LCFI17-.Ltext0
+ 22174      00000000 
+ 22175 0290 030D0100 		.quad	.LFE655-.Ltext0
+ 22175      00000000 
+ 22176 0298 0200     		.value	0x2
+ 22177 029a 76       		.byte	0x76
+ 22178 029b 10       		.sleb128 16
+ 22179 029c 00000000 		.quad	0x0
+ 22179      00000000 
+ 22180 02a4 00000000 		.quad	0x0
+ 22180      00000000 
+ 22181              	.LLST9:
+ 22182 02ac 030D0100 		.quad	.LFB659-.Ltext0
+ 22182      00000000 
+ 22183 02b4 040D0100 		.quad	.LCFI18-.Ltext0
+ 22183      00000000 
+ 22184 02bc 0200     		.value	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 662
+
+
+ 22185 02be 77       		.byte	0x77
+ 22186 02bf 08       		.sleb128 8
+ 22187 02c0 040D0100 		.quad	.LCFI18-.Ltext0
+ 22187      00000000 
+ 22188 02c8 070D0100 		.quad	.LCFI19-.Ltext0
+ 22188      00000000 
+ 22189 02d0 0200     		.value	0x2
+ 22190 02d2 77       		.byte	0x77
+ 22191 02d3 10       		.sleb128 16
+ 22192 02d4 070D0100 		.quad	.LCFI19-.Ltext0
+ 22192      00000000 
+ 22193 02dc D92C0100 		.quad	.LFE659-.Ltext0
+ 22193      00000000 
+ 22194 02e4 0200     		.value	0x2
+ 22195 02e6 76       		.byte	0x76
+ 22196 02e7 10       		.sleb128 16
+ 22197 02e8 00000000 		.quad	0x0
+ 22197      00000000 
+ 22198 02f0 00000000 		.quad	0x0
+ 22198      00000000 
+ 22199              	.LLST10:
+ 22200 02f8 D92C0100 		.quad	.LFB660-.Ltext0
+ 22200      00000000 
+ 22201 0300 DA2C0100 		.quad	.LCFI20-.Ltext0
+ 22201      00000000 
+ 22202 0308 0200     		.value	0x2
+ 22203 030a 77       		.byte	0x77
+ 22204 030b 08       		.sleb128 8
+ 22205 030c DA2C0100 		.quad	.LCFI20-.Ltext0
+ 22205      00000000 
+ 22206 0314 DD2C0100 		.quad	.LCFI21-.Ltext0
+ 22206      00000000 
+ 22207 031c 0200     		.value	0x2
+ 22208 031e 77       		.byte	0x77
+ 22209 031f 10       		.sleb128 16
+ 22210 0320 DD2C0100 		.quad	.LCFI21-.Ltext0
+ 22210      00000000 
+ 22211 0328 E32C0100 		.quad	.LFE660-.Ltext0
+ 22211      00000000 
+ 22212 0330 0200     		.value	0x2
+ 22213 0332 76       		.byte	0x76
+ 22214 0333 10       		.sleb128 16
+ 22215 0334 00000000 		.quad	0x0
+ 22215      00000000 
+ 22216 033c 00000000 		.quad	0x0
+ 22216      00000000 
+ 22217              	.LLST11:
+ 22218 0344 E32C0100 		.quad	.LFB661-.Ltext0
+ 22218      00000000 
+ 22219 034c E42C0100 		.quad	.LCFI22-.Ltext0
+ 22219      00000000 
+ 22220 0354 0200     		.value	0x2
+ 22221 0356 77       		.byte	0x77
+ 22222 0357 08       		.sleb128 8
+ 22223 0358 E42C0100 		.quad	.LCFI22-.Ltext0
+ 22223      00000000 
+ 22224 0360 E72C0100 		.quad	.LCFI23-.Ltext0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 663
+
+
+ 22224      00000000 
+ 22225 0368 0200     		.value	0x2
+ 22226 036a 77       		.byte	0x77
+ 22227 036b 10       		.sleb128 16
+ 22228 036c E72C0100 		.quad	.LCFI23-.Ltext0
+ 22228      00000000 
+ 22229 0374 EE2C0100 		.quad	.LFE661-.Ltext0
+ 22229      00000000 
+ 22230 037c 0200     		.value	0x2
+ 22231 037e 76       		.byte	0x76
+ 22232 037f 10       		.sleb128 16
+ 22233 0380 00000000 		.quad	0x0
+ 22233      00000000 
+ 22234 0388 00000000 		.quad	0x0
+ 22234      00000000 
+ 22235              	.LLST12:
+ 22236 0390 EE2C0100 		.quad	.LFB662-.Ltext0
+ 22236      00000000 
+ 22237 0398 EF2C0100 		.quad	.LCFI24-.Ltext0
+ 22237      00000000 
+ 22238 03a0 0200     		.value	0x2
+ 22239 03a2 77       		.byte	0x77
+ 22240 03a3 08       		.sleb128 8
+ 22241 03a4 EF2C0100 		.quad	.LCFI24-.Ltext0
+ 22241      00000000 
+ 22242 03ac F22C0100 		.quad	.LCFI25-.Ltext0
+ 22242      00000000 
+ 22243 03b4 0200     		.value	0x2
+ 22244 03b6 77       		.byte	0x77
+ 22245 03b7 10       		.sleb128 16
+ 22246 03b8 F22C0100 		.quad	.LCFI25-.Ltext0
+ 22246      00000000 
+ 22247 03c0 F92C0100 		.quad	.LFE662-.Ltext0
+ 22247      00000000 
+ 22248 03c8 0200     		.value	0x2
+ 22249 03ca 76       		.byte	0x76
+ 22250 03cb 10       		.sleb128 16
+ 22251 03cc 00000000 		.quad	0x0
+ 22251      00000000 
+ 22252 03d4 00000000 		.quad	0x0
+ 22252      00000000 
+ 22253              	.LLST13:
+ 22254 03dc F92C0100 		.quad	.LFB663-.Ltext0
+ 22254      00000000 
+ 22255 03e4 FA2C0100 		.quad	.LCFI26-.Ltext0
+ 22255      00000000 
+ 22256 03ec 0200     		.value	0x2
+ 22257 03ee 77       		.byte	0x77
+ 22258 03ef 08       		.sleb128 8
+ 22259 03f0 FA2C0100 		.quad	.LCFI26-.Ltext0
+ 22259      00000000 
+ 22260 03f8 FD2C0100 		.quad	.LCFI27-.Ltext0
+ 22260      00000000 
+ 22261 0400 0200     		.value	0x2
+ 22262 0402 77       		.byte	0x77
+ 22263 0403 10       		.sleb128 16
+ 22264 0404 FD2C0100 		.quad	.LCFI27-.Ltext0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 664
+
+
+ 22264      00000000 
+ 22265 040c E22D0100 		.quad	.LFE663-.Ltext0
+ 22265      00000000 
+ 22266 0414 0200     		.value	0x2
+ 22267 0416 76       		.byte	0x76
+ 22268 0417 10       		.sleb128 16
+ 22269 0418 00000000 		.quad	0x0
+ 22269      00000000 
+ 22270 0420 00000000 		.quad	0x0
+ 22270      00000000 
+ 22271              	.LLST14:
+ 22272 0428 E22D0100 		.quad	.LFB664-.Ltext0
+ 22272      00000000 
+ 22273 0430 E32D0100 		.quad	.LCFI28-.Ltext0
+ 22273      00000000 
+ 22274 0438 0200     		.value	0x2
+ 22275 043a 77       		.byte	0x77
+ 22276 043b 08       		.sleb128 8
+ 22277 043c E32D0100 		.quad	.LCFI28-.Ltext0
+ 22277      00000000 
+ 22278 0444 E62D0100 		.quad	.LCFI29-.Ltext0
+ 22278      00000000 
+ 22279 044c 0200     		.value	0x2
+ 22280 044e 77       		.byte	0x77
+ 22281 044f 10       		.sleb128 16
+ 22282 0450 E62D0100 		.quad	.LCFI29-.Ltext0
+ 22282      00000000 
+ 22283 0458 A52E0100 		.quad	.LFE664-.Ltext0
+ 22283      00000000 
+ 22284 0460 0200     		.value	0x2
+ 22285 0462 76       		.byte	0x76
+ 22286 0463 10       		.sleb128 16
+ 22287 0464 00000000 		.quad	0x0
+ 22287      00000000 
+ 22288 046c 00000000 		.quad	0x0
+ 22288      00000000 
+ 22289              	.LLST15:
+ 22290 0474 A52E0100 		.quad	.LFB665-.Ltext0
+ 22290      00000000 
+ 22291 047c A62E0100 		.quad	.LCFI30-.Ltext0
+ 22291      00000000 
+ 22292 0484 0200     		.value	0x2
+ 22293 0486 77       		.byte	0x77
+ 22294 0487 08       		.sleb128 8
+ 22295 0488 A62E0100 		.quad	.LCFI30-.Ltext0
+ 22295      00000000 
+ 22296 0490 A92E0100 		.quad	.LCFI31-.Ltext0
+ 22296      00000000 
+ 22297 0498 0200     		.value	0x2
+ 22298 049a 77       		.byte	0x77
+ 22299 049b 10       		.sleb128 16
+ 22300 049c A92E0100 		.quad	.LCFI31-.Ltext0
+ 22300      00000000 
+ 22301 04a4 682F0100 		.quad	.LFE665-.Ltext0
+ 22301      00000000 
+ 22302 04ac 0200     		.value	0x2
+ 22303 04ae 76       		.byte	0x76
+
GAS LISTING /tmp/ccjbMjHD.s 			page 665
+
+
+ 22304 04af 10       		.sleb128 16
+ 22305 04b0 00000000 		.quad	0x0
+ 22305      00000000 
+ 22306 04b8 00000000 		.quad	0x0
+ 22306      00000000 
+ 22307              	.LLST16:
+ 22308 04c0 682F0100 		.quad	.LFB666-.Ltext0
+ 22308      00000000 
+ 22309 04c8 692F0100 		.quad	.LCFI32-.Ltext0
+ 22309      00000000 
+ 22310 04d0 0200     		.value	0x2
+ 22311 04d2 77       		.byte	0x77
+ 22312 04d3 08       		.sleb128 8
+ 22313 04d4 692F0100 		.quad	.LCFI32-.Ltext0
+ 22313      00000000 
+ 22314 04dc 6C2F0100 		.quad	.LCFI33-.Ltext0
+ 22314      00000000 
+ 22315 04e4 0200     		.value	0x2
+ 22316 04e6 77       		.byte	0x77
+ 22317 04e7 10       		.sleb128 16
+ 22318 04e8 6C2F0100 		.quad	.LCFI33-.Ltext0
+ 22318      00000000 
+ 22319 04f0 2B300100 		.quad	.LFE666-.Ltext0
+ 22319      00000000 
+ 22320 04f8 0200     		.value	0x2
+ 22321 04fa 76       		.byte	0x76
+ 22322 04fb 10       		.sleb128 16
+ 22323 04fc 00000000 		.quad	0x0
+ 22323      00000000 
+ 22324 0504 00000000 		.quad	0x0
+ 22324      00000000 
+ 22325              	.LLST17:
+ 22326 050c 2B300100 		.quad	.LFB667-.Ltext0
+ 22326      00000000 
+ 22327 0514 2C300100 		.quad	.LCFI34-.Ltext0
+ 22327      00000000 
+ 22328 051c 0200     		.value	0x2
+ 22329 051e 77       		.byte	0x77
+ 22330 051f 08       		.sleb128 8
+ 22331 0520 2C300100 		.quad	.LCFI34-.Ltext0
+ 22331      00000000 
+ 22332 0528 2F300100 		.quad	.LCFI35-.Ltext0
+ 22332      00000000 
+ 22333 0530 0200     		.value	0x2
+ 22334 0532 77       		.byte	0x77
+ 22335 0533 10       		.sleb128 16
+ 22336 0534 2F300100 		.quad	.LCFI35-.Ltext0
+ 22336      00000000 
+ 22337 053c 81320100 		.quad	.LFE667-.Ltext0
+ 22337      00000000 
+ 22338 0544 0200     		.value	0x2
+ 22339 0546 76       		.byte	0x76
+ 22340 0547 10       		.sleb128 16
+ 22341 0548 00000000 		.quad	0x0
+ 22341      00000000 
+ 22342 0550 00000000 		.quad	0x0
+ 22342      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 666
+
+
+ 22343              	.LLST18:
+ 22344 0558 81320100 		.quad	.LFB668-.Ltext0
+ 22344      00000000 
+ 22345 0560 82320100 		.quad	.LCFI36-.Ltext0
+ 22345      00000000 
+ 22346 0568 0200     		.value	0x2
+ 22347 056a 77       		.byte	0x77
+ 22348 056b 08       		.sleb128 8
+ 22349 056c 82320100 		.quad	.LCFI36-.Ltext0
+ 22349      00000000 
+ 22350 0574 85320100 		.quad	.LCFI37-.Ltext0
+ 22350      00000000 
+ 22351 057c 0200     		.value	0x2
+ 22352 057e 77       		.byte	0x77
+ 22353 057f 10       		.sleb128 16
+ 22354 0580 85320100 		.quad	.LCFI37-.Ltext0
+ 22354      00000000 
+ 22355 0588 52330100 		.quad	.LFE668-.Ltext0
+ 22355      00000000 
+ 22356 0590 0200     		.value	0x2
+ 22357 0592 76       		.byte	0x76
+ 22358 0593 10       		.sleb128 16
+ 22359 0594 00000000 		.quad	0x0
+ 22359      00000000 
+ 22360 059c 00000000 		.quad	0x0
+ 22360      00000000 
+ 22361              		.file 4 "/usr/include/stdint.h"
+ 22362              		.file 5 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+ 22363              		.file 6 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/debug.h"
+ 22364              		.file 7 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 22365              		.file 8 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi-priv.h"
+ 22366              		.file 9 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-priv.h"
+ 22367              		.file 10 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+ 22368              		.section	.debug_info
+ 22369 0000 57180100 		.long	0x11857
+ 22370 0004 0200     		.value	0x2
+ 22371 0006 00000000 		.long	.Ldebug_abbrev0
+ 22372 000a 08       		.byte	0x8
+ 22373 000b 01       		.uleb128 0x1
+ 22374 000c 00000000 		.long	.LASF425
+ 22375 0010 01       		.byte	0x1
+ 22376 0011 00000000 		.long	.LASF426
+ 22377 0015 00000000 		.long	.LASF427
+ 22378 0019 00000000 		.quad	.Ltext0
+ 22378      00000000 
+ 22379 0021 00000000 		.quad	.Letext0
+ 22379      00000000 
+ 22380 0029 00000000 		.long	.Ldebug_line0
+ 22381 002d 02       		.uleb128 0x2
+ 22382 002e 01       		.byte	0x1
+ 22383 002f 06       		.byte	0x6
+ 22384 0030 00000000 		.long	.LASF0
+ 22385 0034 02       		.uleb128 0x2
+ 22386 0035 02       		.byte	0x2
+ 22387 0036 05       		.byte	0x5
+ 22388 0037 00000000 		.long	.LASF1
+ 22389 003b 03       		.uleb128 0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 667
+
+
+ 22390 003c 00000000 		.long	.LASF3
+ 22391 0040 04       		.byte	0x4
+ 22392 0041 27       		.byte	0x27
+ 22393 0042 46000000 		.long	0x46
+ 22394 0046 04       		.uleb128 0x4
+ 22395 0047 04       		.byte	0x4
+ 22396 0048 05       		.byte	0x5
+ 22397 0049 696E7400 		.string	"int"
+ 22398 004d 02       		.uleb128 0x2
+ 22399 004e 08       		.byte	0x8
+ 22400 004f 05       		.byte	0x5
+ 22401 0050 00000000 		.long	.LASF2
+ 22402 0054 03       		.uleb128 0x3
+ 22403 0055 00000000 		.long	.LASF4
+ 22404 0059 04       		.byte	0x4
+ 22405 005a 31       		.byte	0x31
+ 22406 005b 5F000000 		.long	0x5f
+ 22407 005f 02       		.uleb128 0x2
+ 22408 0060 01       		.byte	0x1
+ 22409 0061 08       		.byte	0x8
+ 22410 0062 00000000 		.long	.LASF5
+ 22411 0066 02       		.uleb128 0x2
+ 22412 0067 02       		.byte	0x2
+ 22413 0068 07       		.byte	0x7
+ 22414 0069 00000000 		.long	.LASF6
+ 22415 006d 03       		.uleb128 0x3
+ 22416 006e 00000000 		.long	.LASF7
+ 22417 0072 04       		.byte	0x4
+ 22418 0073 34       		.byte	0x34
+ 22419 0074 78000000 		.long	0x78
+ 22420 0078 02       		.uleb128 0x2
+ 22421 0079 04       		.byte	0x4
+ 22422 007a 07       		.byte	0x7
+ 22423 007b 00000000 		.long	.LASF8
+ 22424 007f 03       		.uleb128 0x3
+ 22425 0080 00000000 		.long	.LASF9
+ 22426 0084 04       		.byte	0x4
+ 22427 0085 38       		.byte	0x38
+ 22428 0086 8A000000 		.long	0x8a
+ 22429 008a 02       		.uleb128 0x2
+ 22430 008b 08       		.byte	0x8
+ 22431 008c 07       		.byte	0x7
+ 22432 008d 00000000 		.long	.LASF10
+ 22433 0091 03       		.uleb128 0x3
+ 22434 0092 00000000 		.long	.LASF11
+ 22435 0096 05       		.byte	0x5
+ 22436 0097 30       		.byte	0x30
+ 22437 0098 6D000000 		.long	0x6d
+ 22438 009c 05       		.uleb128 0x5
+ 22439 009d 08       		.byte	0x8
+ 22440 009e 07       		.byte	0x7
+ 22441 009f 02       		.uleb128 0x2
+ 22442 00a0 01       		.byte	0x1
+ 22443 00a1 06       		.byte	0x6
+ 22444 00a2 00000000 		.long	.LASF12
+ 22445 00a6 02       		.uleb128 0x2
+ 22446 00a7 08       		.byte	0x8
+
GAS LISTING /tmp/ccjbMjHD.s 			page 668
+
+
+ 22447 00a8 05       		.byte	0x5
+ 22448 00a9 00000000 		.long	.LASF13
+ 22449 00ad 02       		.uleb128 0x2
+ 22450 00ae 04       		.byte	0x4
+ 22451 00af 04       		.byte	0x4
+ 22452 00b0 00000000 		.long	.LASF14
+ 22453 00b4 06       		.uleb128 0x6
+ 22454 00b5 46000000 		.long	0x46
+ 22455 00b9 07       		.uleb128 0x7
+ 22456 00ba 08       		.byte	0x8
+ 22457 00bb BF000000 		.long	0xbf
+ 22458 00bf 06       		.uleb128 0x6
+ 22459 00c0 9F000000 		.long	0x9f
+ 22460 00c4 08       		.uleb128 0x8
+ 22461 00c5 08       		.byte	0x8
+ 22462 00c6 07       		.uleb128 0x7
+ 22463 00c7 08       		.byte	0x8
+ 22464 00c8 9F000000 		.long	0x9f
+ 22465 00cc 02       		.uleb128 0x2
+ 22466 00cd 08       		.byte	0x8
+ 22467 00ce 07       		.byte	0x7
+ 22468 00cf 00000000 		.long	.LASF15
+ 22469 00d3 07       		.uleb128 0x7
+ 22470 00d4 08       		.byte	0x8
+ 22471 00d5 D9000000 		.long	0xd9
+ 22472 00d9 09       		.uleb128 0x9
+ 22473 00da 02       		.uleb128 0x2
+ 22474 00db 08       		.byte	0x8
+ 22475 00dc 04       		.byte	0x4
+ 22476 00dd 00000000 		.long	.LASF16
+ 22477 00e1 0A       		.uleb128 0xa
+ 22478 00e2 01       		.byte	0x1
+ 22479 00e3 DA000000 		.long	0xda
+ 22480 00e7 03       		.uleb128 0x3
+ 22481 00e8 00000000 		.long	.LASF17
+ 22482 00ec 03       		.byte	0x3
+ 22483 00ed 26       		.byte	0x26
+ 22484 00ee F2000000 		.long	0xf2
+ 22485 00f2 0A       		.uleb128 0xa
+ 22486 00f3 01       		.byte	0x1
+ 22487 00f4 54000000 		.long	0x54
+ 22488 00f8 0A       		.uleb128 0xa
+ 22489 00f9 01       		.byte	0x1
+ 22490 00fa 3B000000 		.long	0x3b
+ 22491 00fe 0A       		.uleb128 0xa
+ 22492 00ff 01       		.byte	0x1
+ 22493 0100 9F000000 		.long	0x9f
+ 22494 0104 0B       		.uleb128 0xb
+ 22495 0105 04       		.byte	0x4
+ 22496 0106 06       		.byte	0x6
+ 22497 0107 D6       		.byte	0xd6
+ 22498 0108 85010000 		.long	0x185
+ 22499 010c 0C       		.uleb128 0xc
+ 22500 010d 00000000 		.long	.LASF18
+ 22501 0111 7F       		.sleb128 -1
+ 22502 0112 0C       		.uleb128 0xc
+ 22503 0113 00000000 		.long	.LASF19
+
GAS LISTING /tmp/ccjbMjHD.s 			page 669
+
+
+ 22504 0117 00       		.sleb128 0
+ 22505 0118 0C       		.uleb128 0xc
+ 22506 0119 00000000 		.long	.LASF20
+ 22507 011d 01       		.sleb128 1
+ 22508 011e 0C       		.uleb128 0xc
+ 22509 011f 00000000 		.long	.LASF21
+ 22510 0123 02       		.sleb128 2
+ 22511 0124 0C       		.uleb128 0xc
+ 22512 0125 00000000 		.long	.LASF22
+ 22513 0129 03       		.sleb128 3
+ 22514 012a 0C       		.uleb128 0xc
+ 22515 012b 00000000 		.long	.LASF23
+ 22516 012f 04       		.sleb128 4
+ 22517 0130 0C       		.uleb128 0xc
+ 22518 0131 00000000 		.long	.LASF24
+ 22519 0135 05       		.sleb128 5
+ 22520 0136 0C       		.uleb128 0xc
+ 22521 0137 00000000 		.long	.LASF25
+ 22522 013b 06       		.sleb128 6
+ 22523 013c 0C       		.uleb128 0xc
+ 22524 013d 00000000 		.long	.LASF26
+ 22525 0141 07       		.sleb128 7
+ 22526 0142 0C       		.uleb128 0xc
+ 22527 0143 00000000 		.long	.LASF27
+ 22528 0147 08       		.sleb128 8
+ 22529 0148 0C       		.uleb128 0xc
+ 22530 0149 00000000 		.long	.LASF28
+ 22531 014d 09       		.sleb128 9
+ 22532 014e 0C       		.uleb128 0xc
+ 22533 014f 00000000 		.long	.LASF29
+ 22534 0153 0A       		.sleb128 10
+ 22535 0154 0C       		.uleb128 0xc
+ 22536 0155 00000000 		.long	.LASF30
+ 22537 0159 0B       		.sleb128 11
+ 22538 015a 0C       		.uleb128 0xc
+ 22539 015b 00000000 		.long	.LASF31
+ 22540 015f 0C       		.sleb128 12
+ 22541 0160 0C       		.uleb128 0xc
+ 22542 0161 00000000 		.long	.LASF32
+ 22543 0165 0D       		.sleb128 13
+ 22544 0166 0C       		.uleb128 0xc
+ 22545 0167 00000000 		.long	.LASF33
+ 22546 016b 0E       		.sleb128 14
+ 22547 016c 0C       		.uleb128 0xc
+ 22548 016d 00000000 		.long	.LASF34
+ 22549 0171 0F       		.sleb128 15
+ 22550 0172 0C       		.uleb128 0xc
+ 22551 0173 00000000 		.long	.LASF35
+ 22552 0177 10       		.sleb128 16
+ 22553 0178 0C       		.uleb128 0xc
+ 22554 0179 00000000 		.long	.LASF36
+ 22555 017d 11       		.sleb128 17
+ 22556 017e 0C       		.uleb128 0xc
+ 22557 017f 00000000 		.long	.LASF37
+ 22558 0183 12       		.sleb128 18
+ 22559 0184 00       		.byte	0x0
+ 22560 0185 0D       		.uleb128 0xd
+
GAS LISTING /tmp/ccjbMjHD.s 			page 670
+
+
+ 22561 0186 04       		.byte	0x4
+ 22562 0187 06       		.byte	0x6
+ 22563 0188 6701     		.value	0x167
+ 22564 018a B3010000 		.long	0x1b3
+ 22565 018e 0C       		.uleb128 0xc
+ 22566 018f 00000000 		.long	.LASF38
+ 22567 0193 00       		.sleb128 0
+ 22568 0194 0C       		.uleb128 0xc
+ 22569 0195 00000000 		.long	.LASF39
+ 22570 0199 01       		.sleb128 1
+ 22571 019a 0C       		.uleb128 0xc
+ 22572 019b 00000000 		.long	.LASF40
+ 22573 019f 02       		.sleb128 2
+ 22574 01a0 0C       		.uleb128 0xc
+ 22575 01a1 00000000 		.long	.LASF41
+ 22576 01a5 03       		.sleb128 3
+ 22577 01a6 0C       		.uleb128 0xc
+ 22578 01a7 00000000 		.long	.LASF42
+ 22579 01ab 04       		.sleb128 4
+ 22580 01ac 0C       		.uleb128 0xc
+ 22581 01ad 00000000 		.long	.LASF43
+ 22582 01b1 05       		.sleb128 5
+ 22583 01b2 00       		.byte	0x0
+ 22584 01b3 03       		.uleb128 0x3
+ 22585 01b4 00000000 		.long	.LASF44
+ 22586 01b8 07       		.byte	0x7
+ 22587 01b9 3B       		.byte	0x3b
+ 22588 01ba E7000000 		.long	0xe7
+ 22589 01be 03       		.uleb128 0x3
+ 22590 01bf 00000000 		.long	.LASF45
+ 22591 01c3 07       		.byte	0x7
+ 22592 01c4 43       		.byte	0x43
+ 22593 01c5 C9010000 		.long	0x1c9
+ 22594 01c9 0E       		.uleb128 0xe
+ 22595 01ca 00000000 		.long	.LASF45
+ 22596 01ce 08       		.byte	0x8
+ 22597 01cf 07       		.byte	0x7
+ 22598 01d0 43       		.byte	0x43
+ 22599 01d1 F2010000 		.long	0x1f2
+ 22600 01d5 0F       		.uleb128 0xf
+ 22601 01d6 6D616A00 		.string	"maj"
+ 22602 01da 07       		.byte	0x7
+ 22603 01db 46       		.byte	0x46
+ 22604 01dc 6D000000 		.long	0x6d
+ 22605 01e0 02       		.byte	0x2
+ 22606 01e1 23       		.byte	0x23
+ 22607 01e2 00       		.uleb128 0x0
+ 22608 01e3 0F       		.uleb128 0xf
+ 22609 01e4 6D696E00 		.string	"min"
+ 22610 01e8 07       		.byte	0x7
+ 22611 01e9 47       		.byte	0x47
+ 22612 01ea 6D000000 		.long	0x6d
+ 22613 01ee 02       		.byte	0x2
+ 22614 01ef 23       		.byte	0x23
+ 22615 01f0 04       		.uleb128 0x4
+ 22616 01f1 00       		.byte	0x0
+ 22617 01f2 03       		.uleb128 0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 671
+
+
+ 22618 01f3 00000000 		.long	.LASF46
+ 22619 01f7 07       		.byte	0x7
+ 22620 01f8 52       		.byte	0x52
+ 22621 01f9 FD010000 		.long	0x1fd
+ 22622 01fd 0E       		.uleb128 0xe
+ 22623 01fe 00000000 		.long	.LASF46
+ 22624 0202 40       		.byte	0x40
+ 22625 0203 07       		.byte	0x7
+ 22626 0204 52       		.byte	0x52
+ 22627 0205 7A020000 		.long	0x27a
+ 22628 0209 10       		.uleb128 0x10
+ 22629 020a 00000000 		.long	.LASF47
+ 22630 020e 07       		.byte	0x7
+ 22631 020f 5E       		.byte	0x5e
+ 22632 0210 BE010000 		.long	0x1be
+ 22633 0214 02       		.byte	0x2
+ 22634 0215 23       		.byte	0x23
+ 22635 0216 00       		.uleb128 0x0
+ 22636 0217 10       		.uleb128 0x10
+ 22637 0218 00000000 		.long	.LASF48
+ 22638 021c 07       		.byte	0x7
+ 22639 021d 63       		.byte	0x63
+ 22640 021e BE020000 		.long	0x2be
+ 22641 0222 02       		.byte	0x2
+ 22642 0223 23       		.byte	0x23
+ 22643 0224 08       		.uleb128 0x8
+ 22644 0225 10       		.uleb128 0x10
+ 22645 0226 00000000 		.long	.LASF49
+ 22646 022a 07       		.byte	0x7
+ 22647 022b 65       		.byte	0x65
+ 22648 022c CF020000 		.long	0x2cf
+ 22649 0230 02       		.byte	0x2
+ 22650 0231 23       		.byte	0x23
+ 22651 0232 10       		.uleb128 0x10
+ 22652 0233 10       		.uleb128 0x10
+ 22653 0234 00000000 		.long	.LASF50
+ 22654 0238 07       		.byte	0x7
+ 22655 0239 67       		.byte	0x67
+ 22656 023a CF020000 		.long	0x2cf
+ 22657 023e 02       		.byte	0x2
+ 22658 023f 23       		.byte	0x23
+ 22659 0240 18       		.uleb128 0x18
+ 22660 0241 10       		.uleb128 0x10
+ 22661 0242 00000000 		.long	.LASF51
+ 22662 0246 07       		.byte	0x7
+ 22663 0247 69       		.byte	0x69
+ 22664 0248 EF020000 		.long	0x2ef
+ 22665 024c 02       		.byte	0x2
+ 22666 024d 23       		.byte	0x23
+ 22667 024e 20       		.uleb128 0x20
+ 22668 024f 10       		.uleb128 0x10
+ 22669 0250 00000000 		.long	.LASF52
+ 22670 0254 07       		.byte	0x7
+ 22671 0255 6D       		.byte	0x6d
+ 22672 0256 EF020000 		.long	0x2ef
+ 22673 025a 02       		.byte	0x2
+ 22674 025b 23       		.byte	0x23
+
GAS LISTING /tmp/ccjbMjHD.s 			page 672
+
+
+ 22675 025c 28       		.uleb128 0x28
+ 22676 025d 10       		.uleb128 0x10
+ 22677 025e 00000000 		.long	.LASF53
+ 22678 0262 07       		.byte	0x7
+ 22679 0263 71       		.byte	0x71
+ 22680 0264 0B030000 		.long	0x30b
+ 22681 0268 02       		.byte	0x2
+ 22682 0269 23       		.byte	0x23
+ 22683 026a 30       		.uleb128 0x30
+ 22684 026b 10       		.uleb128 0x10
+ 22685 026c 00000000 		.long	.LASF54
+ 22686 0270 07       		.byte	0x7
+ 22687 0271 75       		.byte	0x75
+ 22688 0272 0B030000 		.long	0x30b
+ 22689 0276 02       		.byte	0x2
+ 22690 0277 23       		.byte	0x23
+ 22691 0278 38       		.uleb128 0x38
+ 22692 0279 00       		.byte	0x0
+ 22693 027a 03       		.uleb128 0x3
+ 22694 027b 00000000 		.long	.LASF55
+ 22695 027f 07       		.byte	0x7
+ 22696 0280 53       		.byte	0x53
+ 22697 0281 85020000 		.long	0x285
+ 22698 0285 11       		.uleb128 0x11
+ 22699 0286 00000000 		.long	.LASF55
+ 22700 028a 40       		.byte	0x40
+ 22701 028b 07       		.byte	0x7
+ 22702 028c 53       		.byte	0x53
+ 22703 028d A7020000 		.long	0x2a7
+ 22704 0291 12       		.uleb128 0x12
+ 22705 0292 00000000 		.long	.LASF47
+ 22706 0296 07       		.byte	0x7
+ 22707 0297 7F       		.byte	0x7f
+ 22708 0298 BE010000 		.long	0x1be
+ 22709 029c 13       		.uleb128 0x13
+ 22710 029d 763100   		.string	"v1"
+ 22711 02a0 07       		.byte	0x7
+ 22712 02a1 80       		.byte	0x80
+ 22713 02a2 F2010000 		.long	0x1f2
+ 22714 02a6 00       		.byte	0x0
+ 22715 02a7 14       		.uleb128 0x14
+ 22716 02a8 01       		.byte	0x1
+ 22717 02a9 B3020000 		.long	0x2b3
+ 22718 02ad 15       		.uleb128 0x15
+ 22719 02ae B3020000 		.long	0x2b3
+ 22720 02b2 00       		.byte	0x0
+ 22721 02b3 07       		.uleb128 0x7
+ 22722 02b4 08       		.byte	0x8
+ 22723 02b5 B9020000 		.long	0x2b9
+ 22724 02b9 06       		.uleb128 0x6
+ 22725 02ba 7A020000 		.long	0x27a
+ 22726 02be 07       		.uleb128 0x7
+ 22727 02bf 08       		.byte	0x8
+ 22728 02c0 A7020000 		.long	0x2a7
+ 22729 02c4 16       		.uleb128 0x16
+ 22730 02c5 6D000000 		.long	0x6d
+ 22731 02c9 CF020000 		.long	0x2cf
+
GAS LISTING /tmp/ccjbMjHD.s 			page 673
+
+
+ 22732 02cd 17       		.uleb128 0x17
+ 22733 02ce 00       		.byte	0x0
+ 22734 02cf 07       		.uleb128 0x7
+ 22735 02d0 08       		.byte	0x8
+ 22736 02d1 C4020000 		.long	0x2c4
+ 22737 02d5 18       		.uleb128 0x18
+ 22738 02d6 01       		.byte	0x1
+ 22739 02d7 91000000 		.long	0x91
+ 22740 02db EF020000 		.long	0x2ef
+ 22741 02df 15       		.uleb128 0x15
+ 22742 02e0 C4000000 		.long	0xc4
+ 22743 02e4 15       		.uleb128 0x15
+ 22744 02e5 B9000000 		.long	0xb9
+ 22745 02e9 15       		.uleb128 0x15
+ 22746 02ea 6D000000 		.long	0x6d
+ 22747 02ee 00       		.byte	0x0
+ 22748 02ef 07       		.uleb128 0x7
+ 22749 02f0 08       		.byte	0x8
+ 22750 02f1 D5020000 		.long	0x2d5
+ 22751 02f5 14       		.uleb128 0x14
+ 22752 02f6 01       		.byte	0x1
+ 22753 02f7 0B030000 		.long	0x30b
+ 22754 02fb 15       		.uleb128 0x15
+ 22755 02fc B9000000 		.long	0xb9
+ 22756 0300 15       		.uleb128 0x15
+ 22757 0301 C6000000 		.long	0xc6
+ 22758 0305 15       		.uleb128 0x15
+ 22759 0306 D3000000 		.long	0xd3
+ 22760 030a 00       		.byte	0x0
+ 22761 030b 07       		.uleb128 0x7
+ 22762 030c 08       		.byte	0x8
+ 22763 030d F5020000 		.long	0x2f5
+ 22764 0311 03       		.uleb128 0x3
+ 22765 0312 00000000 		.long	.LASF56
+ 22766 0316 07       		.byte	0x7
+ 22767 0317 84       		.byte	0x84
+ 22768 0318 1C030000 		.long	0x31c
+ 22769 031c 0E       		.uleb128 0xe
+ 22770 031d 00000000 		.long	.LASF56
+ 22771 0321 40       		.byte	0x40
+ 22772 0322 07       		.byte	0x7
+ 22773 0323 84       		.byte	0x84
+ 22774 0324 99030000 		.long	0x399
+ 22775 0328 10       		.uleb128 0x10
+ 22776 0329 00000000 		.long	.LASF47
+ 22777 032d 07       		.byte	0x7
+ 22778 032e 90       		.byte	0x90
+ 22779 032f BE010000 		.long	0x1be
+ 22780 0333 02       		.byte	0x2
+ 22781 0334 23       		.byte	0x23
+ 22782 0335 00       		.uleb128 0x0
+ 22783 0336 10       		.uleb128 0x10
+ 22784 0337 00000000 		.long	.LASF48
+ 22785 033b 07       		.byte	0x7
+ 22786 033c 95       		.byte	0x95
+ 22787 033d DD030000 		.long	0x3dd
+ 22788 0341 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 674
+
+
+ 22789 0342 23       		.byte	0x23
+ 22790 0343 08       		.uleb128 0x8
+ 22791 0344 10       		.uleb128 0x10
+ 22792 0345 00000000 		.long	.LASF49
+ 22793 0349 07       		.byte	0x7
+ 22794 034a 97       		.byte	0x97
+ 22795 034b CF020000 		.long	0x2cf
+ 22796 034f 02       		.byte	0x2
+ 22797 0350 23       		.byte	0x23
+ 22798 0351 10       		.uleb128 0x10
+ 22799 0352 10       		.uleb128 0x10
+ 22800 0353 00000000 		.long	.LASF50
+ 22801 0357 07       		.byte	0x7
+ 22802 0358 99       		.byte	0x99
+ 22803 0359 CF020000 		.long	0x2cf
+ 22804 035d 02       		.byte	0x2
+ 22805 035e 23       		.byte	0x23
+ 22806 035f 18       		.uleb128 0x18
+ 22807 0360 10       		.uleb128 0x10
+ 22808 0361 00000000 		.long	.LASF51
+ 22809 0365 07       		.byte	0x7
+ 22810 0366 9B       		.byte	0x9b
+ 22811 0367 EF020000 		.long	0x2ef
+ 22812 036b 02       		.byte	0x2
+ 22813 036c 23       		.byte	0x23
+ 22814 036d 20       		.uleb128 0x20
+ 22815 036e 10       		.uleb128 0x10
+ 22816 036f 00000000 		.long	.LASF52
+ 22817 0373 07       		.byte	0x7
+ 22818 0374 9F       		.byte	0x9f
+ 22819 0375 EF020000 		.long	0x2ef
+ 22820 0379 02       		.byte	0x2
+ 22821 037a 23       		.byte	0x23
+ 22822 037b 28       		.uleb128 0x28
+ 22823 037c 10       		.uleb128 0x10
+ 22824 037d 00000000 		.long	.LASF53
+ 22825 0381 07       		.byte	0x7
+ 22826 0382 A3       		.byte	0xa3
+ 22827 0383 F8030000 		.long	0x3f8
+ 22828 0387 02       		.byte	0x2
+ 22829 0388 23       		.byte	0x23
+ 22830 0389 30       		.uleb128 0x30
+ 22831 038a 10       		.uleb128 0x10
+ 22832 038b 00000000 		.long	.LASF54
+ 22833 038f 07       		.byte	0x7
+ 22834 0390 A6       		.byte	0xa6
+ 22835 0391 F8030000 		.long	0x3f8
+ 22836 0395 02       		.byte	0x2
+ 22837 0396 23       		.byte	0x23
+ 22838 0397 38       		.uleb128 0x38
+ 22839 0398 00       		.byte	0x0
+ 22840 0399 03       		.uleb128 0x3
+ 22841 039a 00000000 		.long	.LASF57
+ 22842 039e 07       		.byte	0x7
+ 22843 039f 85       		.byte	0x85
+ 22844 03a0 A4030000 		.long	0x3a4
+ 22845 03a4 11       		.uleb128 0x11
+
GAS LISTING /tmp/ccjbMjHD.s 			page 675
+
+
+ 22846 03a5 00000000 		.long	.LASF57
+ 22847 03a9 40       		.byte	0x40
+ 22848 03aa 07       		.byte	0x7
+ 22849 03ab 85       		.byte	0x85
+ 22850 03ac C6030000 		.long	0x3c6
+ 22851 03b0 12       		.uleb128 0x12
+ 22852 03b1 00000000 		.long	.LASF47
+ 22853 03b5 07       		.byte	0x7
+ 22854 03b6 AF       		.byte	0xaf
+ 22855 03b7 BE010000 		.long	0x1be
+ 22856 03bb 13       		.uleb128 0x13
+ 22857 03bc 763100   		.string	"v1"
+ 22858 03bf 07       		.byte	0x7
+ 22859 03c0 B0       		.byte	0xb0
+ 22860 03c1 11030000 		.long	0x311
+ 22861 03c5 00       		.byte	0x0
+ 22862 03c6 14       		.uleb128 0x14
+ 22863 03c7 01       		.byte	0x1
+ 22864 03c8 D2030000 		.long	0x3d2
+ 22865 03cc 15       		.uleb128 0x15
+ 22866 03cd D2030000 		.long	0x3d2
+ 22867 03d1 00       		.byte	0x0
+ 22868 03d2 07       		.uleb128 0x7
+ 22869 03d3 08       		.byte	0x8
+ 22870 03d4 D8030000 		.long	0x3d8
+ 22871 03d8 06       		.uleb128 0x6
+ 22872 03d9 99030000 		.long	0x399
+ 22873 03dd 07       		.uleb128 0x7
+ 22874 03de 08       		.byte	0x8
+ 22875 03df C6030000 		.long	0x3c6
+ 22876 03e3 18       		.uleb128 0x18
+ 22877 03e4 01       		.byte	0x1
+ 22878 03e5 B3010000 		.long	0x1b3
+ 22879 03e9 F8030000 		.long	0x3f8
+ 22880 03ed 15       		.uleb128 0x15
+ 22881 03ee B3010000 		.long	0x1b3
+ 22882 03f2 15       		.uleb128 0x15
+ 22883 03f3 D3000000 		.long	0xd3
+ 22884 03f7 00       		.byte	0x0
+ 22885 03f8 07       		.uleb128 0x7
+ 22886 03f9 08       		.byte	0x8
+ 22887 03fa E3030000 		.long	0x3e3
+ 22888 03fe 03       		.uleb128 0x3
+ 22889 03ff 00000000 		.long	.LASF58
+ 22890 0403 08       		.byte	0x8
+ 22891 0404 9D       		.byte	0x9d
+ 22892 0405 54000000 		.long	0x54
+ 22893 0409 03       		.uleb128 0x3
+ 22894 040a 00000000 		.long	.LASF59
+ 22895 040e 08       		.byte	0x8
+ 22896 040f 9E       		.byte	0x9e
+ 22897 0410 6D000000 		.long	0x6d
+ 22898 0414 03       		.uleb128 0x3
+ 22899 0415 00000000 		.long	.LASF60
+ 22900 0419 08       		.byte	0x8
+ 22901 041a 9F       		.byte	0x9f
+ 22902 041b 1F040000 		.long	0x41f
+
GAS LISTING /tmp/ccjbMjHD.s 			page 676
+
+
+ 22903 041f 11       		.uleb128 0x11
+ 22904 0420 00000000 		.long	.LASF60
+ 22905 0424 04       		.byte	0x4
+ 22906 0425 08       		.byte	0x8
+ 22907 0426 9F       		.byte	0x9f
+ 22908 0427 42040000 		.long	0x442
+ 22909 042b 12       		.uleb128 0x12
+ 22910 042c 00000000 		.long	.LASF61
+ 22911 0430 08       		.byte	0x8
+ 22912 0431 A2       		.byte	0xa2
+ 22913 0432 09040000 		.long	0x409
+ 22914 0436 12       		.uleb128 0x12
+ 22915 0437 00000000 		.long	.LASF62
+ 22916 043b 08       		.byte	0x8
+ 22917 043c A3       		.byte	0xa3
+ 22918 043d 42040000 		.long	0x442
+ 22919 0441 00       		.byte	0x0
+ 22920 0442 19       		.uleb128 0x19
+ 22921 0443 FE030000 		.long	0x3fe
+ 22922 0447 52040000 		.long	0x452
+ 22923 044b 1A       		.uleb128 0x1a
+ 22924 044c 9C000000 		.long	0x9c
+ 22925 0450 03       		.byte	0x3
+ 22926 0451 00       		.byte	0x0
+ 22927 0452 19       		.uleb128 0x19
+ 22928 0453 FE030000 		.long	0x3fe
+ 22929 0457 62040000 		.long	0x462
+ 22930 045b 1A       		.uleb128 0x1a
+ 22931 045c 9C000000 		.long	0x9c
+ 22932 0460 0F       		.byte	0xf
+ 22933 0461 00       		.byte	0x0
+ 22934 0462 03       		.uleb128 0x3
+ 22935 0463 00000000 		.long	.LASF63
+ 22936 0467 08       		.byte	0x8
+ 22937 0468 AC       		.byte	0xac
+ 22938 0469 E7000000 		.long	0xe7
+ 22939 046d 03       		.uleb128 0x3
+ 22940 046e 00000000 		.long	.LASF64
+ 22941 0472 08       		.byte	0x8
+ 22942 0473 B0       		.byte	0xb0
+ 22943 0474 78040000 		.long	0x478
+ 22944 0478 1B       		.uleb128 0x1b
+ 22945 0479 00000000 		.long	.LASF64
+ 22946 047d 0001     		.value	0x100
+ 22947 047f 08       		.byte	0x8
+ 22948 0480 B0       		.byte	0xb0
+ 22949 0481 A3040000 		.long	0x4a3
+ 22950 0485 10       		.uleb128 0x10
+ 22951 0486 00000000 		.long	.LASF65
+ 22952 048a 08       		.byte	0x8
+ 22953 048b B3       		.byte	0xb3
+ 22954 048c A3040000 		.long	0x4a3
+ 22955 0490 02       		.byte	0x2
+ 22956 0491 23       		.byte	0x23
+ 22957 0492 00       		.uleb128 0x0
+ 22958 0493 10       		.uleb128 0x10
+ 22959 0494 00000000 		.long	.LASF66
+
GAS LISTING /tmp/ccjbMjHD.s 			page 677
+
+
+ 22960 0498 08       		.byte	0x8
+ 22961 0499 B4       		.byte	0xb4
+ 22962 049a 6D000000 		.long	0x6d
+ 22963 049e 03       		.byte	0x3
+ 22964 049f 23       		.byte	0x23
+ 22965 04a0 F001     		.uleb128 0xf0
+ 22966 04a2 00       		.byte	0x0
+ 22967 04a3 19       		.uleb128 0x19
+ 22968 04a4 B3010000 		.long	0x1b3
+ 22969 04a8 B3040000 		.long	0x4b3
+ 22970 04ac 1A       		.uleb128 0x1a
+ 22971 04ad 9C000000 		.long	0x9c
+ 22972 04b1 0E       		.byte	0xe
+ 22973 04b2 00       		.byte	0x0
+ 22974 04b3 1C       		.uleb128 0x1c
+ 22975 04b4 10       		.byte	0x10
+ 22976 04b5 08       		.byte	0x8
+ 22977 04b6 C0       		.byte	0xc0
+ 22978 04b7 F3040000 		.long	0x4f3
+ 22979 04bb 12       		.uleb128 0x12
+ 22980 04bc 00000000 		.long	.LASF67
+ 22981 04c0 08       		.byte	0x8
+ 22982 04c1 C1       		.byte	0xc1
+ 22983 04c2 B3010000 		.long	0x1b3
+ 22984 04c6 13       		.uleb128 0x13
+ 22985 04c7 75363400 		.string	"u64"
+ 22986 04cb 08       		.byte	0x8
+ 22987 04cc C2       		.byte	0xc2
+ 22988 04cd F3040000 		.long	0x4f3
+ 22989 04d1 12       		.uleb128 0x12
+ 22990 04d2 00000000 		.long	.LASF68
+ 22991 04d6 08       		.byte	0x8
+ 22992 04d7 C3       		.byte	0xc3
+ 22993 04d8 03050000 		.long	0x503
+ 22994 04dc 12       		.uleb128 0x12
+ 22995 04dd 00000000 		.long	.LASF62
+ 22996 04e1 08       		.byte	0x8
+ 22997 04e2 C4       		.byte	0xc4
+ 22998 04e3 52040000 		.long	0x452
+ 22999 04e7 12       		.uleb128 0x12
+ 23000 04e8 00000000 		.long	.LASF69
+ 23001 04ec 08       		.byte	0x8
+ 23002 04ed C5       		.byte	0xc5
+ 23003 04ee 13050000 		.long	0x513
+ 23004 04f2 00       		.byte	0x0
+ 23005 04f3 19       		.uleb128 0x19
+ 23006 04f4 7F000000 		.long	0x7f
+ 23007 04f8 03050000 		.long	0x503
+ 23008 04fc 1A       		.uleb128 0x1a
+ 23009 04fd 9C000000 		.long	0x9c
+ 23010 0501 01       		.byte	0x1
+ 23011 0502 00       		.byte	0x0
+ 23012 0503 19       		.uleb128 0x19
+ 23013 0504 09040000 		.long	0x409
+ 23014 0508 13050000 		.long	0x513
+ 23015 050c 1A       		.uleb128 0x1a
+ 23016 050d 9C000000 		.long	0x9c
+
GAS LISTING /tmp/ccjbMjHD.s 			page 678
+
+
+ 23017 0511 03       		.byte	0x3
+ 23018 0512 00       		.byte	0x0
+ 23019 0513 19       		.uleb128 0x19
+ 23020 0514 FE030000 		.long	0x3fe
+ 23021 0518 29050000 		.long	0x529
+ 23022 051c 1A       		.uleb128 0x1a
+ 23023 051d 9C000000 		.long	0x9c
+ 23024 0521 03       		.byte	0x3
+ 23025 0522 1A       		.uleb128 0x1a
+ 23026 0523 9C000000 		.long	0x9c
+ 23027 0527 03       		.byte	0x3
+ 23028 0528 00       		.byte	0x0
+ 23029 0529 03       		.uleb128 0x3
+ 23030 052a 00000000 		.long	.LASF70
+ 23031 052e 08       		.byte	0x8
+ 23032 052f C6       		.byte	0xc6
+ 23033 0530 B3040000 		.long	0x4b3
+ 23034 0534 03       		.uleb128 0x3
+ 23035 0535 00000000 		.long	.LASF71
+ 23036 0539 09       		.byte	0x9
+ 23037 053a 40       		.byte	0x40
+ 23038 053b 3F050000 		.long	0x53f
+ 23039 053f 11       		.uleb128 0x11
+ 23040 0540 00000000 		.long	.LASF71
+ 23041 0544 40       		.byte	0x40
+ 23042 0545 09       		.byte	0x9
+ 23043 0546 40       		.byte	0x40
+ 23044 0547 62050000 		.long	0x562
+ 23045 054b 12       		.uleb128 0x12
+ 23046 054c 00000000 		.long	.LASF72
+ 23047 0550 09       		.byte	0x9
+ 23048 0551 43       		.byte	0x43
+ 23049 0552 7A020000 		.long	0x27a
+ 23050 0556 13       		.uleb128 0x13
+ 23051 0557 76656300 		.string	"vec"
+ 23052 055b 09       		.byte	0x9
+ 23053 055c 44       		.byte	0x44
+ 23054 055d 99030000 		.long	0x399
+ 23055 0561 00       		.byte	0x0
+ 23056 0562 1D       		.uleb128 0x1d
+ 23057 0563 00000000 		.long	.LASF95
+ 23058 0567 04       		.byte	0x4
+ 23059 0568 0A       		.byte	0xa
+ 23060 0569 5A       		.byte	0x5a
+ 23061 056a F3050000 		.long	0x5f3
+ 23062 056e 0C       		.uleb128 0xc
+ 23063 056f 00000000 		.long	.LASF73
+ 23064 0573 00       		.sleb128 0
+ 23065 0574 0C       		.uleb128 0xc
+ 23066 0575 00000000 		.long	.LASF74
+ 23067 0579 01       		.sleb128 1
+ 23068 057a 0C       		.uleb128 0xc
+ 23069 057b 00000000 		.long	.LASF75
+ 23070 057f 02       		.sleb128 2
+ 23071 0580 0C       		.uleb128 0xc
+ 23072 0581 00000000 		.long	.LASF76
+ 23073 0585 03       		.sleb128 3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 679
+
+
+ 23074 0586 0C       		.uleb128 0xc
+ 23075 0587 00000000 		.long	.LASF77
+ 23076 058b 04       		.sleb128 4
+ 23077 058c 0C       		.uleb128 0xc
+ 23078 058d 00000000 		.long	.LASF78
+ 23079 0591 05       		.sleb128 5
+ 23080 0592 0C       		.uleb128 0xc
+ 23081 0593 00000000 		.long	.LASF79
+ 23082 0597 06       		.sleb128 6
+ 23083 0598 0C       		.uleb128 0xc
+ 23084 0599 00000000 		.long	.LASF80
+ 23085 059d 07       		.sleb128 7
+ 23086 059e 0C       		.uleb128 0xc
+ 23087 059f 00000000 		.long	.LASF81
+ 23088 05a3 08       		.sleb128 8
+ 23089 05a4 0C       		.uleb128 0xc
+ 23090 05a5 00000000 		.long	.LASF82
+ 23091 05a9 09       		.sleb128 9
+ 23092 05aa 0C       		.uleb128 0xc
+ 23093 05ab 00000000 		.long	.LASF83
+ 23094 05af 0A       		.sleb128 10
+ 23095 05b0 0C       		.uleb128 0xc
+ 23096 05b1 00000000 		.long	.LASF84
+ 23097 05b5 0B       		.sleb128 11
+ 23098 05b6 0C       		.uleb128 0xc
+ 23099 05b7 00000000 		.long	.LASF85
+ 23100 05bb 0C       		.sleb128 12
+ 23101 05bc 0C       		.uleb128 0xc
+ 23102 05bd 00000000 		.long	.LASF86
+ 23103 05c1 0D       		.sleb128 13
+ 23104 05c2 0C       		.uleb128 0xc
+ 23105 05c3 00000000 		.long	.LASF87
+ 23106 05c7 0E       		.sleb128 14
+ 23107 05c8 0C       		.uleb128 0xc
+ 23108 05c9 00000000 		.long	.LASF88
+ 23109 05cd 0E       		.sleb128 14
+ 23110 05ce 0C       		.uleb128 0xc
+ 23111 05cf 00000000 		.long	.LASF89
+ 23112 05d3 0F       		.sleb128 15
+ 23113 05d4 0C       		.uleb128 0xc
+ 23114 05d5 00000000 		.long	.LASF90
+ 23115 05d9 10       		.sleb128 16
+ 23116 05da 0C       		.uleb128 0xc
+ 23117 05db 00000000 		.long	.LASF91
+ 23118 05df 11       		.sleb128 17
+ 23119 05e0 0C       		.uleb128 0xc
+ 23120 05e1 00000000 		.long	.LASF92
+ 23121 05e5 12       		.sleb128 18
+ 23122 05e6 0C       		.uleb128 0xc
+ 23123 05e7 00000000 		.long	.LASF93
+ 23124 05eb 13       		.sleb128 19
+ 23125 05ec 0C       		.uleb128 0xc
+ 23126 05ed 00000000 		.long	.LASF94
+ 23127 05f1 14       		.sleb128 20
+ 23128 05f2 00       		.byte	0x0
+ 23129 05f3 1D       		.uleb128 0x1d
+ 23130 05f4 00000000 		.long	.LASF96
+
GAS LISTING /tmp/ccjbMjHD.s 			page 680
+
+
+ 23131 05f8 04       		.byte	0x4
+ 23132 05f9 0A       		.byte	0xa
+ 23133 05fa 77       		.byte	0x77
+ 23134 05fb 7A070000 		.long	0x77a
+ 23135 05ff 0C       		.uleb128 0xc
+ 23136 0600 00000000 		.long	.LASF97
+ 23137 0604 00       		.sleb128 0
+ 23138 0605 0C       		.uleb128 0xc
+ 23139 0606 00000000 		.long	.LASF98
+ 23140 060a 01       		.sleb128 1
+ 23141 060b 0C       		.uleb128 0xc
+ 23142 060c 00000000 		.long	.LASF99
+ 23143 0610 02       		.sleb128 2
+ 23144 0611 0C       		.uleb128 0xc
+ 23145 0612 00000000 		.long	.LASF100
+ 23146 0616 03       		.sleb128 3
+ 23147 0617 0C       		.uleb128 0xc
+ 23148 0618 00000000 		.long	.LASF101
+ 23149 061c 04       		.sleb128 4
+ 23150 061d 0C       		.uleb128 0xc
+ 23151 061e 00000000 		.long	.LASF102
+ 23152 0622 05       		.sleb128 5
+ 23153 0623 0C       		.uleb128 0xc
+ 23154 0624 00000000 		.long	.LASF103
+ 23155 0628 06       		.sleb128 6
+ 23156 0629 0C       		.uleb128 0xc
+ 23157 062a 00000000 		.long	.LASF104
+ 23158 062e 07       		.sleb128 7
+ 23159 062f 0C       		.uleb128 0xc
+ 23160 0630 00000000 		.long	.LASF105
+ 23161 0634 08       		.sleb128 8
+ 23162 0635 0C       		.uleb128 0xc
+ 23163 0636 00000000 		.long	.LASF106
+ 23164 063a 09       		.sleb128 9
+ 23165 063b 0C       		.uleb128 0xc
+ 23166 063c 00000000 		.long	.LASF107
+ 23167 0640 0A       		.sleb128 10
+ 23168 0641 0C       		.uleb128 0xc
+ 23169 0642 00000000 		.long	.LASF108
+ 23170 0646 0B       		.sleb128 11
+ 23171 0647 0C       		.uleb128 0xc
+ 23172 0648 00000000 		.long	.LASF109
+ 23173 064c 0C       		.sleb128 12
+ 23174 064d 0C       		.uleb128 0xc
+ 23175 064e 00000000 		.long	.LASF110
+ 23176 0652 0D       		.sleb128 13
+ 23177 0653 0C       		.uleb128 0xc
+ 23178 0654 00000000 		.long	.LASF111
+ 23179 0658 0E       		.sleb128 14
+ 23180 0659 0C       		.uleb128 0xc
+ 23181 065a 00000000 		.long	.LASF112
+ 23182 065e 0F       		.sleb128 15
+ 23183 065f 0C       		.uleb128 0xc
+ 23184 0660 00000000 		.long	.LASF113
+ 23185 0664 10       		.sleb128 16
+ 23186 0665 0C       		.uleb128 0xc
+ 23187 0666 00000000 		.long	.LASF114
+
GAS LISTING /tmp/ccjbMjHD.s 			page 681
+
+
+ 23188 066a 11       		.sleb128 17
+ 23189 066b 0C       		.uleb128 0xc
+ 23190 066c 00000000 		.long	.LASF115
+ 23191 0670 12       		.sleb128 18
+ 23192 0671 0C       		.uleb128 0xc
+ 23193 0672 00000000 		.long	.LASF116
+ 23194 0676 13       		.sleb128 19
+ 23195 0677 0C       		.uleb128 0xc
+ 23196 0678 00000000 		.long	.LASF117
+ 23197 067c 14       		.sleb128 20
+ 23198 067d 0C       		.uleb128 0xc
+ 23199 067e 00000000 		.long	.LASF118
+ 23200 0682 15       		.sleb128 21
+ 23201 0683 0C       		.uleb128 0xc
+ 23202 0684 00000000 		.long	.LASF119
+ 23203 0688 16       		.sleb128 22
+ 23204 0689 0C       		.uleb128 0xc
+ 23205 068a 00000000 		.long	.LASF120
+ 23206 068e 17       		.sleb128 23
+ 23207 068f 0C       		.uleb128 0xc
+ 23208 0690 00000000 		.long	.LASF121
+ 23209 0694 18       		.sleb128 24
+ 23210 0695 0C       		.uleb128 0xc
+ 23211 0696 00000000 		.long	.LASF122
+ 23212 069a 19       		.sleb128 25
+ 23213 069b 0C       		.uleb128 0xc
+ 23214 069c 00000000 		.long	.LASF123
+ 23215 06a0 1A       		.sleb128 26
+ 23216 06a1 0C       		.uleb128 0xc
+ 23217 06a2 00000000 		.long	.LASF124
+ 23218 06a6 1B       		.sleb128 27
+ 23219 06a7 0C       		.uleb128 0xc
+ 23220 06a8 00000000 		.long	.LASF125
+ 23221 06ac 1C       		.sleb128 28
+ 23222 06ad 0C       		.uleb128 0xc
+ 23223 06ae 00000000 		.long	.LASF126
+ 23224 06b2 1D       		.sleb128 29
+ 23225 06b3 0C       		.uleb128 0xc
+ 23226 06b4 00000000 		.long	.LASF127
+ 23227 06b8 1E       		.sleb128 30
+ 23228 06b9 0C       		.uleb128 0xc
+ 23229 06ba 00000000 		.long	.LASF128
+ 23230 06be 1F       		.sleb128 31
+ 23231 06bf 0C       		.uleb128 0xc
+ 23232 06c0 00000000 		.long	.LASF129
+ 23233 06c4 20       		.sleb128 32
+ 23234 06c5 0C       		.uleb128 0xc
+ 23235 06c6 00000000 		.long	.LASF130
+ 23236 06ca 21       		.sleb128 33
+ 23237 06cb 0C       		.uleb128 0xc
+ 23238 06cc 00000000 		.long	.LASF131
+ 23239 06d0 22       		.sleb128 34
+ 23240 06d1 0C       		.uleb128 0xc
+ 23241 06d2 00000000 		.long	.LASF132
+ 23242 06d6 23       		.sleb128 35
+ 23243 06d7 0C       		.uleb128 0xc
+ 23244 06d8 00000000 		.long	.LASF133
+
GAS LISTING /tmp/ccjbMjHD.s 			page 682
+
+
+ 23245 06dc 24       		.sleb128 36
+ 23246 06dd 0C       		.uleb128 0xc
+ 23247 06de 00000000 		.long	.LASF134
+ 23248 06e2 25       		.sleb128 37
+ 23249 06e3 0C       		.uleb128 0xc
+ 23250 06e4 00000000 		.long	.LASF135
+ 23251 06e8 26       		.sleb128 38
+ 23252 06e9 0C       		.uleb128 0xc
+ 23253 06ea 00000000 		.long	.LASF136
+ 23254 06ee 27       		.sleb128 39
+ 23255 06ef 0C       		.uleb128 0xc
+ 23256 06f0 00000000 		.long	.LASF137
+ 23257 06f4 28       		.sleb128 40
+ 23258 06f5 0C       		.uleb128 0xc
+ 23259 06f6 00000000 		.long	.LASF138
+ 23260 06fa 29       		.sleb128 41
+ 23261 06fb 0C       		.uleb128 0xc
+ 23262 06fc 00000000 		.long	.LASF139
+ 23263 0700 2A       		.sleb128 42
+ 23264 0701 0C       		.uleb128 0xc
+ 23265 0702 00000000 		.long	.LASF140
+ 23266 0706 2B       		.sleb128 43
+ 23267 0707 0C       		.uleb128 0xc
+ 23268 0708 00000000 		.long	.LASF141
+ 23269 070c 2C       		.sleb128 44
+ 23270 070d 0C       		.uleb128 0xc
+ 23271 070e 00000000 		.long	.LASF142
+ 23272 0712 2D       		.sleb128 45
+ 23273 0713 0C       		.uleb128 0xc
+ 23274 0714 00000000 		.long	.LASF143
+ 23275 0718 2E       		.sleb128 46
+ 23276 0719 0C       		.uleb128 0xc
+ 23277 071a 00000000 		.long	.LASF144
+ 23278 071e 2F       		.sleb128 47
+ 23279 071f 0C       		.uleb128 0xc
+ 23280 0720 00000000 		.long	.LASF145
+ 23281 0724 30       		.sleb128 48
+ 23282 0725 0C       		.uleb128 0xc
+ 23283 0726 00000000 		.long	.LASF146
+ 23284 072a 31       		.sleb128 49
+ 23285 072b 0C       		.uleb128 0xc
+ 23286 072c 00000000 		.long	.LASF147
+ 23287 0730 32       		.sleb128 50
+ 23288 0731 0C       		.uleb128 0xc
+ 23289 0732 00000000 		.long	.LASF148
+ 23290 0736 33       		.sleb128 51
+ 23291 0737 0C       		.uleb128 0xc
+ 23292 0738 00000000 		.long	.LASF149
+ 23293 073c 34       		.sleb128 52
+ 23294 073d 0C       		.uleb128 0xc
+ 23295 073e 00000000 		.long	.LASF150
+ 23296 0742 35       		.sleb128 53
+ 23297 0743 0C       		.uleb128 0xc
+ 23298 0744 00000000 		.long	.LASF151
+ 23299 0748 36       		.sleb128 54
+ 23300 0749 0C       		.uleb128 0xc
+ 23301 074a 00000000 		.long	.LASF152
+
GAS LISTING /tmp/ccjbMjHD.s 			page 683
+
+
+ 23302 074e 36       		.sleb128 54
+ 23303 074f 0C       		.uleb128 0xc
+ 23304 0750 00000000 		.long	.LASF153
+ 23305 0754 37       		.sleb128 55
+ 23306 0755 0C       		.uleb128 0xc
+ 23307 0756 00000000 		.long	.LASF154
+ 23308 075a 38       		.sleb128 56
+ 23309 075b 0C       		.uleb128 0xc
+ 23310 075c 00000000 		.long	.LASF155
+ 23311 0760 39       		.sleb128 57
+ 23312 0761 0C       		.uleb128 0xc
+ 23313 0762 00000000 		.long	.LASF156
+ 23314 0766 3A       		.sleb128 58
+ 23315 0767 0C       		.uleb128 0xc
+ 23316 0768 00000000 		.long	.LASF157
+ 23317 076c 3B       		.sleb128 59
+ 23318 076d 0C       		.uleb128 0xc
+ 23319 076e 00000000 		.long	.LASF158
+ 23320 0772 3C       		.sleb128 60
+ 23321 0773 0C       		.uleb128 0xc
+ 23322 0774 00000000 		.long	.LASF159
+ 23323 0778 3D       		.sleb128 61
+ 23324 0779 00       		.byte	0x0
+ 23325 077a 1D       		.uleb128 0x1d
+ 23326 077b 00000000 		.long	.LASF160
+ 23327 077f 04       		.byte	0x4
+ 23328 0780 0A       		.byte	0xa
+ 23329 0781 BD       		.byte	0xbd
+ 23330 0782 30090000 		.long	0x930
+ 23331 0786 0C       		.uleb128 0xc
+ 23332 0787 00000000 		.long	.LASF161
+ 23333 078b 00       		.sleb128 0
+ 23334 078c 0C       		.uleb128 0xc
+ 23335 078d 00000000 		.long	.LASF162
+ 23336 0791 01       		.sleb128 1
+ 23337 0792 0C       		.uleb128 0xc
+ 23338 0793 00000000 		.long	.LASF163
+ 23339 0797 02       		.sleb128 2
+ 23340 0798 0C       		.uleb128 0xc
+ 23341 0799 00000000 		.long	.LASF164
+ 23342 079d 03       		.sleb128 3
+ 23343 079e 0C       		.uleb128 0xc
+ 23344 079f 00000000 		.long	.LASF165
+ 23345 07a3 04       		.sleb128 4
+ 23346 07a4 0C       		.uleb128 0xc
+ 23347 07a5 00000000 		.long	.LASF166
+ 23348 07a9 05       		.sleb128 5
+ 23349 07aa 0C       		.uleb128 0xc
+ 23350 07ab 00000000 		.long	.LASF167
+ 23351 07af 06       		.sleb128 6
+ 23352 07b0 0C       		.uleb128 0xc
+ 23353 07b1 00000000 		.long	.LASF168
+ 23354 07b5 07       		.sleb128 7
+ 23355 07b6 0C       		.uleb128 0xc
+ 23356 07b7 00000000 		.long	.LASF169
+ 23357 07bb 08       		.sleb128 8
+ 23358 07bc 0C       		.uleb128 0xc
+
GAS LISTING /tmp/ccjbMjHD.s 			page 684
+
+
+ 23359 07bd 00000000 		.long	.LASF170
+ 23360 07c1 09       		.sleb128 9
+ 23361 07c2 0C       		.uleb128 0xc
+ 23362 07c3 00000000 		.long	.LASF171
+ 23363 07c7 0A       		.sleb128 10
+ 23364 07c8 0C       		.uleb128 0xc
+ 23365 07c9 00000000 		.long	.LASF172
+ 23366 07cd 0B       		.sleb128 11
+ 23367 07ce 0C       		.uleb128 0xc
+ 23368 07cf 00000000 		.long	.LASF173
+ 23369 07d3 0C       		.sleb128 12
+ 23370 07d4 0C       		.uleb128 0xc
+ 23371 07d5 00000000 		.long	.LASF174
+ 23372 07d9 0D       		.sleb128 13
+ 23373 07da 0C       		.uleb128 0xc
+ 23374 07db 00000000 		.long	.LASF175
+ 23375 07df 0E       		.sleb128 14
+ 23376 07e0 0C       		.uleb128 0xc
+ 23377 07e1 00000000 		.long	.LASF176
+ 23378 07e5 0F       		.sleb128 15
+ 23379 07e6 0C       		.uleb128 0xc
+ 23380 07e7 00000000 		.long	.LASF177
+ 23381 07eb 10       		.sleb128 16
+ 23382 07ec 0C       		.uleb128 0xc
+ 23383 07ed 00000000 		.long	.LASF178
+ 23384 07f1 11       		.sleb128 17
+ 23385 07f2 0C       		.uleb128 0xc
+ 23386 07f3 00000000 		.long	.LASF179
+ 23387 07f7 12       		.sleb128 18
+ 23388 07f8 0C       		.uleb128 0xc
+ 23389 07f9 00000000 		.long	.LASF180
+ 23390 07fd 13       		.sleb128 19
+ 23391 07fe 0C       		.uleb128 0xc
+ 23392 07ff 00000000 		.long	.LASF181
+ 23393 0803 14       		.sleb128 20
+ 23394 0804 0C       		.uleb128 0xc
+ 23395 0805 00000000 		.long	.LASF182
+ 23396 0809 15       		.sleb128 21
+ 23397 080a 0C       		.uleb128 0xc
+ 23398 080b 00000000 		.long	.LASF183
+ 23399 080f 16       		.sleb128 22
+ 23400 0810 0C       		.uleb128 0xc
+ 23401 0811 00000000 		.long	.LASF184
+ 23402 0815 17       		.sleb128 23
+ 23403 0816 0C       		.uleb128 0xc
+ 23404 0817 00000000 		.long	.LASF185
+ 23405 081b 18       		.sleb128 24
+ 23406 081c 0C       		.uleb128 0xc
+ 23407 081d 00000000 		.long	.LASF186
+ 23408 0821 19       		.sleb128 25
+ 23409 0822 0C       		.uleb128 0xc
+ 23410 0823 00000000 		.long	.LASF187
+ 23411 0827 1A       		.sleb128 26
+ 23412 0828 0C       		.uleb128 0xc
+ 23413 0829 00000000 		.long	.LASF188
+ 23414 082d 1B       		.sleb128 27
+ 23415 082e 0C       		.uleb128 0xc
+
GAS LISTING /tmp/ccjbMjHD.s 			page 685
+
+
+ 23416 082f 00000000 		.long	.LASF189
+ 23417 0833 1C       		.sleb128 28
+ 23418 0834 0C       		.uleb128 0xc
+ 23419 0835 00000000 		.long	.LASF190
+ 23420 0839 1D       		.sleb128 29
+ 23421 083a 0C       		.uleb128 0xc
+ 23422 083b 00000000 		.long	.LASF191
+ 23423 083f 1E       		.sleb128 30
+ 23424 0840 0C       		.uleb128 0xc
+ 23425 0841 00000000 		.long	.LASF192
+ 23426 0845 1F       		.sleb128 31
+ 23427 0846 0C       		.uleb128 0xc
+ 23428 0847 00000000 		.long	.LASF193
+ 23429 084b 20       		.sleb128 32
+ 23430 084c 0C       		.uleb128 0xc
+ 23431 084d 00000000 		.long	.LASF194
+ 23432 0851 21       		.sleb128 33
+ 23433 0852 0C       		.uleb128 0xc
+ 23434 0853 00000000 		.long	.LASF195
+ 23435 0857 22       		.sleb128 34
+ 23436 0858 0C       		.uleb128 0xc
+ 23437 0859 00000000 		.long	.LASF196
+ 23438 085d 23       		.sleb128 35
+ 23439 085e 0C       		.uleb128 0xc
+ 23440 085f 00000000 		.long	.LASF197
+ 23441 0863 24       		.sleb128 36
+ 23442 0864 0C       		.uleb128 0xc
+ 23443 0865 00000000 		.long	.LASF198
+ 23444 0869 25       		.sleb128 37
+ 23445 086a 0C       		.uleb128 0xc
+ 23446 086b 00000000 		.long	.LASF199
+ 23447 086f 26       		.sleb128 38
+ 23448 0870 0C       		.uleb128 0xc
+ 23449 0871 00000000 		.long	.LASF200
+ 23450 0875 27       		.sleb128 39
+ 23451 0876 0C       		.uleb128 0xc
+ 23452 0877 00000000 		.long	.LASF201
+ 23453 087b 28       		.sleb128 40
+ 23454 087c 0C       		.uleb128 0xc
+ 23455 087d 00000000 		.long	.LASF202
+ 23456 0881 29       		.sleb128 41
+ 23457 0882 0C       		.uleb128 0xc
+ 23458 0883 00000000 		.long	.LASF203
+ 23459 0887 2A       		.sleb128 42
+ 23460 0888 0C       		.uleb128 0xc
+ 23461 0889 00000000 		.long	.LASF204
+ 23462 088d 2B       		.sleb128 43
+ 23463 088e 0C       		.uleb128 0xc
+ 23464 088f 00000000 		.long	.LASF205
+ 23465 0893 2C       		.sleb128 44
+ 23466 0894 0C       		.uleb128 0xc
+ 23467 0895 00000000 		.long	.LASF206
+ 23468 0899 2D       		.sleb128 45
+ 23469 089a 0C       		.uleb128 0xc
+ 23470 089b 00000000 		.long	.LASF207
+ 23471 089f 2E       		.sleb128 46
+ 23472 08a0 0C       		.uleb128 0xc
+
GAS LISTING /tmp/ccjbMjHD.s 			page 686
+
+
+ 23473 08a1 00000000 		.long	.LASF208
+ 23474 08a5 2F       		.sleb128 47
+ 23475 08a6 0C       		.uleb128 0xc
+ 23476 08a7 00000000 		.long	.LASF209
+ 23477 08ab 30       		.sleb128 48
+ 23478 08ac 0C       		.uleb128 0xc
+ 23479 08ad 00000000 		.long	.LASF210
+ 23480 08b1 31       		.sleb128 49
+ 23481 08b2 0C       		.uleb128 0xc
+ 23482 08b3 00000000 		.long	.LASF211
+ 23483 08b7 32       		.sleb128 50
+ 23484 08b8 0C       		.uleb128 0xc
+ 23485 08b9 00000000 		.long	.LASF212
+ 23486 08bd 33       		.sleb128 51
+ 23487 08be 0C       		.uleb128 0xc
+ 23488 08bf 00000000 		.long	.LASF213
+ 23489 08c3 34       		.sleb128 52
+ 23490 08c4 0C       		.uleb128 0xc
+ 23491 08c5 00000000 		.long	.LASF214
+ 23492 08c9 35       		.sleb128 53
+ 23493 08ca 0C       		.uleb128 0xc
+ 23494 08cb 00000000 		.long	.LASF215
+ 23495 08cf 36       		.sleb128 54
+ 23496 08d0 0C       		.uleb128 0xc
+ 23497 08d1 00000000 		.long	.LASF216
+ 23498 08d5 37       		.sleb128 55
+ 23499 08d6 0C       		.uleb128 0xc
+ 23500 08d7 00000000 		.long	.LASF217
+ 23501 08db 38       		.sleb128 56
+ 23502 08dc 0C       		.uleb128 0xc
+ 23503 08dd 00000000 		.long	.LASF218
+ 23504 08e1 39       		.sleb128 57
+ 23505 08e2 0C       		.uleb128 0xc
+ 23506 08e3 00000000 		.long	.LASF219
+ 23507 08e7 3A       		.sleb128 58
+ 23508 08e8 0C       		.uleb128 0xc
+ 23509 08e9 00000000 		.long	.LASF220
+ 23510 08ed 3A       		.sleb128 58
+ 23511 08ee 0C       		.uleb128 0xc
+ 23512 08ef 00000000 		.long	.LASF221
+ 23513 08f3 3B       		.sleb128 59
+ 23514 08f4 0C       		.uleb128 0xc
+ 23515 08f5 00000000 		.long	.LASF222
+ 23516 08f9 3C       		.sleb128 60
+ 23517 08fa 0C       		.uleb128 0xc
+ 23518 08fb 00000000 		.long	.LASF223
+ 23519 08ff 3D       		.sleb128 61
+ 23520 0900 0C       		.uleb128 0xc
+ 23521 0901 00000000 		.long	.LASF224
+ 23522 0905 3E       		.sleb128 62
+ 23523 0906 0C       		.uleb128 0xc
+ 23524 0907 00000000 		.long	.LASF225
+ 23525 090b 3F       		.sleb128 63
+ 23526 090c 0C       		.uleb128 0xc
+ 23527 090d 00000000 		.long	.LASF226
+ 23528 0911 C000     		.sleb128 64
+ 23529 0913 0C       		.uleb128 0xc
+
GAS LISTING /tmp/ccjbMjHD.s 			page 687
+
+
+ 23530 0914 00000000 		.long	.LASF227
+ 23531 0918 C100     		.sleb128 65
+ 23532 091a 0C       		.uleb128 0xc
+ 23533 091b 00000000 		.long	.LASF228
+ 23534 091f C200     		.sleb128 66
+ 23535 0921 0C       		.uleb128 0xc
+ 23536 0922 00000000 		.long	.LASF229
+ 23537 0926 C300     		.sleb128 67
+ 23538 0928 0C       		.uleb128 0xc
+ 23539 0929 00000000 		.long	.LASF230
+ 23540 092d C400     		.sleb128 68
+ 23541 092f 00       		.byte	0x0
+ 23542 0930 1E       		.uleb128 0x1e
+ 23543 0931 00000000 		.long	.LASF231
+ 23544 0935 04       		.byte	0x4
+ 23545 0936 0A       		.byte	0xa
+ 23546 0937 0A01     		.value	0x10a
+ 23547 0939 2F0A0000 		.long	0xa2f
+ 23548 093d 0C       		.uleb128 0xc
+ 23549 093e 00000000 		.long	.LASF232
+ 23550 0942 00       		.sleb128 0
+ 23551 0943 0C       		.uleb128 0xc
+ 23552 0944 00000000 		.long	.LASF233
+ 23553 0948 3D       		.sleb128 61
+ 23554 0949 0C       		.uleb128 0xc
+ 23555 094a 00000000 		.long	.LASF234
+ 23556 094e 3E       		.sleb128 62
+ 23557 094f 0C       		.uleb128 0xc
+ 23558 0950 00000000 		.long	.LASF235
+ 23559 0954 3F       		.sleb128 63
+ 23560 0955 0C       		.uleb128 0xc
+ 23561 0956 00000000 		.long	.LASF236
+ 23562 095a C000     		.sleb128 64
+ 23563 095c 0C       		.uleb128 0xc
+ 23564 095d 00000000 		.long	.LASF237
+ 23565 0961 C100     		.sleb128 65
+ 23566 0963 0C       		.uleb128 0xc
+ 23567 0964 00000000 		.long	.LASF238
+ 23568 0968 C200     		.sleb128 66
+ 23569 096a 0C       		.uleb128 0xc
+ 23570 096b 00000000 		.long	.LASF239
+ 23571 096f C300     		.sleb128 67
+ 23572 0971 0C       		.uleb128 0xc
+ 23573 0972 00000000 		.long	.LASF240
+ 23574 0976 C400     		.sleb128 68
+ 23575 0978 0C       		.uleb128 0xc
+ 23576 0979 00000000 		.long	.LASF241
+ 23577 097d C500     		.sleb128 69
+ 23578 097f 0C       		.uleb128 0xc
+ 23579 0980 00000000 		.long	.LASF242
+ 23580 0984 C600     		.sleb128 70
+ 23581 0986 0C       		.uleb128 0xc
+ 23582 0987 00000000 		.long	.LASF243
+ 23583 098b C700     		.sleb128 71
+ 23584 098d 0C       		.uleb128 0xc
+ 23585 098e 00000000 		.long	.LASF244
+ 23586 0992 C800     		.sleb128 72
+
GAS LISTING /tmp/ccjbMjHD.s 			page 688
+
+
+ 23587 0994 0C       		.uleb128 0xc
+ 23588 0995 00000000 		.long	.LASF245
+ 23589 0999 C900     		.sleb128 73
+ 23590 099b 0C       		.uleb128 0xc
+ 23591 099c 00000000 		.long	.LASF246
+ 23592 09a0 CA00     		.sleb128 74
+ 23593 09a2 0C       		.uleb128 0xc
+ 23594 09a3 00000000 		.long	.LASF247
+ 23595 09a7 CB00     		.sleb128 75
+ 23596 09a9 0C       		.uleb128 0xc
+ 23597 09aa 00000000 		.long	.LASF248
+ 23598 09ae CC00     		.sleb128 76
+ 23599 09b0 0C       		.uleb128 0xc
+ 23600 09b1 00000000 		.long	.LASF249
+ 23601 09b5 CD00     		.sleb128 77
+ 23602 09b7 0C       		.uleb128 0xc
+ 23603 09b8 00000000 		.long	.LASF250
+ 23604 09bc CE00     		.sleb128 78
+ 23605 09be 0C       		.uleb128 0xc
+ 23606 09bf 00000000 		.long	.LASF251
+ 23607 09c3 CF00     		.sleb128 79
+ 23608 09c5 0C       		.uleb128 0xc
+ 23609 09c6 00000000 		.long	.LASF252
+ 23610 09ca D000     		.sleb128 80
+ 23611 09cc 0C       		.uleb128 0xc
+ 23612 09cd 00000000 		.long	.LASF253
+ 23613 09d1 D100     		.sleb128 81
+ 23614 09d3 0C       		.uleb128 0xc
+ 23615 09d4 00000000 		.long	.LASF254
+ 23616 09d8 D100     		.sleb128 81
+ 23617 09da 0C       		.uleb128 0xc
+ 23618 09db 00000000 		.long	.LASF255
+ 23619 09df D200     		.sleb128 82
+ 23620 09e1 0C       		.uleb128 0xc
+ 23621 09e2 00000000 		.long	.LASF256
+ 23622 09e6 D300     		.sleb128 83
+ 23623 09e8 0C       		.uleb128 0xc
+ 23624 09e9 00000000 		.long	.LASF257
+ 23625 09ed D400     		.sleb128 84
+ 23626 09ef 0C       		.uleb128 0xc
+ 23627 09f0 00000000 		.long	.LASF258
+ 23628 09f4 D500     		.sleb128 85
+ 23629 09f6 0C       		.uleb128 0xc
+ 23630 09f7 00000000 		.long	.LASF259
+ 23631 09fb D600     		.sleb128 86
+ 23632 09fd 0C       		.uleb128 0xc
+ 23633 09fe 00000000 		.long	.LASF260
+ 23634 0a02 D700     		.sleb128 87
+ 23635 0a04 0C       		.uleb128 0xc
+ 23636 0a05 00000000 		.long	.LASF261
+ 23637 0a09 D800     		.sleb128 88
+ 23638 0a0b 0C       		.uleb128 0xc
+ 23639 0a0c 00000000 		.long	.LASF262
+ 23640 0a10 D900     		.sleb128 89
+ 23641 0a12 0C       		.uleb128 0xc
+ 23642 0a13 00000000 		.long	.LASF263
+ 23643 0a17 DA00     		.sleb128 90
+
GAS LISTING /tmp/ccjbMjHD.s 			page 689
+
+
+ 23644 0a19 0C       		.uleb128 0xc
+ 23645 0a1a 00000000 		.long	.LASF264
+ 23646 0a1e DB00     		.sleb128 91
+ 23647 0a20 0C       		.uleb128 0xc
+ 23648 0a21 00000000 		.long	.LASF265
+ 23649 0a25 DC00     		.sleb128 92
+ 23650 0a27 0C       		.uleb128 0xc
+ 23651 0a28 00000000 		.long	.LASF266
+ 23652 0a2c DD00     		.sleb128 93
+ 23653 0a2e 00       		.byte	0x0
+ 23654 0a2f 1E       		.uleb128 0x1e
+ 23655 0a30 00000000 		.long	.LASF267
+ 23656 0a34 04       		.byte	0x4
+ 23657 0a35 0A       		.byte	0xa
+ 23658 0a36 3401     		.value	0x134
+ 23659 0a38 6F0B0000 		.long	0xb6f
+ 23660 0a3c 0C       		.uleb128 0xc
+ 23661 0a3d 00000000 		.long	.LASF268
+ 23662 0a41 00       		.sleb128 0
+ 23663 0a42 0C       		.uleb128 0xc
+ 23664 0a43 00000000 		.long	.LASF269
+ 23665 0a47 01       		.sleb128 1
+ 23666 0a48 0C       		.uleb128 0xc
+ 23667 0a49 00000000 		.long	.LASF270
+ 23668 0a4d 02       		.sleb128 2
+ 23669 0a4e 0C       		.uleb128 0xc
+ 23670 0a4f 00000000 		.long	.LASF271
+ 23671 0a53 03       		.sleb128 3
+ 23672 0a54 0C       		.uleb128 0xc
+ 23673 0a55 00000000 		.long	.LASF272
+ 23674 0a59 04       		.sleb128 4
+ 23675 0a5a 0C       		.uleb128 0xc
+ 23676 0a5b 00000000 		.long	.LASF273
+ 23677 0a5f 05       		.sleb128 5
+ 23678 0a60 0C       		.uleb128 0xc
+ 23679 0a61 00000000 		.long	.LASF274
+ 23680 0a65 06       		.sleb128 6
+ 23681 0a66 0C       		.uleb128 0xc
+ 23682 0a67 00000000 		.long	.LASF275
+ 23683 0a6b 07       		.sleb128 7
+ 23684 0a6c 0C       		.uleb128 0xc
+ 23685 0a6d 00000000 		.long	.LASF276
+ 23686 0a71 08       		.sleb128 8
+ 23687 0a72 0C       		.uleb128 0xc
+ 23688 0a73 00000000 		.long	.LASF277
+ 23689 0a77 09       		.sleb128 9
+ 23690 0a78 0C       		.uleb128 0xc
+ 23691 0a79 00000000 		.long	.LASF278
+ 23692 0a7d 0A       		.sleb128 10
+ 23693 0a7e 0C       		.uleb128 0xc
+ 23694 0a7f 00000000 		.long	.LASF279
+ 23695 0a83 0B       		.sleb128 11
+ 23696 0a84 0C       		.uleb128 0xc
+ 23697 0a85 00000000 		.long	.LASF280
+ 23698 0a89 0C       		.sleb128 12
+ 23699 0a8a 0C       		.uleb128 0xc
+ 23700 0a8b 00000000 		.long	.LASF281
+
GAS LISTING /tmp/ccjbMjHD.s 			page 690
+
+
+ 23701 0a8f 0D       		.sleb128 13
+ 23702 0a90 0C       		.uleb128 0xc
+ 23703 0a91 00000000 		.long	.LASF282
+ 23704 0a95 0E       		.sleb128 14
+ 23705 0a96 0C       		.uleb128 0xc
+ 23706 0a97 00000000 		.long	.LASF283
+ 23707 0a9b 0F       		.sleb128 15
+ 23708 0a9c 0C       		.uleb128 0xc
+ 23709 0a9d 00000000 		.long	.LASF284
+ 23710 0aa1 10       		.sleb128 16
+ 23711 0aa2 0C       		.uleb128 0xc
+ 23712 0aa3 00000000 		.long	.LASF285
+ 23713 0aa7 11       		.sleb128 17
+ 23714 0aa8 0C       		.uleb128 0xc
+ 23715 0aa9 00000000 		.long	.LASF286
+ 23716 0aad 12       		.sleb128 18
+ 23717 0aae 0C       		.uleb128 0xc
+ 23718 0aaf 00000000 		.long	.LASF287
+ 23719 0ab3 13       		.sleb128 19
+ 23720 0ab4 0C       		.uleb128 0xc
+ 23721 0ab5 00000000 		.long	.LASF288
+ 23722 0ab9 14       		.sleb128 20
+ 23723 0aba 0C       		.uleb128 0xc
+ 23724 0abb 00000000 		.long	.LASF289
+ 23725 0abf 15       		.sleb128 21
+ 23726 0ac0 0C       		.uleb128 0xc
+ 23727 0ac1 00000000 		.long	.LASF290
+ 23728 0ac5 16       		.sleb128 22
+ 23729 0ac6 0C       		.uleb128 0xc
+ 23730 0ac7 00000000 		.long	.LASF291
+ 23731 0acb 17       		.sleb128 23
+ 23732 0acc 0C       		.uleb128 0xc
+ 23733 0acd 00000000 		.long	.LASF292
+ 23734 0ad1 18       		.sleb128 24
+ 23735 0ad2 0C       		.uleb128 0xc
+ 23736 0ad3 00000000 		.long	.LASF293
+ 23737 0ad7 19       		.sleb128 25
+ 23738 0ad8 0C       		.uleb128 0xc
+ 23739 0ad9 00000000 		.long	.LASF294
+ 23740 0add 1A       		.sleb128 26
+ 23741 0ade 0C       		.uleb128 0xc
+ 23742 0adf 00000000 		.long	.LASF295
+ 23743 0ae3 1B       		.sleb128 27
+ 23744 0ae4 0C       		.uleb128 0xc
+ 23745 0ae5 00000000 		.long	.LASF296
+ 23746 0ae9 1C       		.sleb128 28
+ 23747 0aea 0C       		.uleb128 0xc
+ 23748 0aeb 00000000 		.long	.LASF297
+ 23749 0aef 1D       		.sleb128 29
+ 23750 0af0 0C       		.uleb128 0xc
+ 23751 0af1 00000000 		.long	.LASF298
+ 23752 0af5 1E       		.sleb128 30
+ 23753 0af6 0C       		.uleb128 0xc
+ 23754 0af7 00000000 		.long	.LASF299
+ 23755 0afb 1F       		.sleb128 31
+ 23756 0afc 0C       		.uleb128 0xc
+ 23757 0afd 00000000 		.long	.LASF300
+
GAS LISTING /tmp/ccjbMjHD.s 			page 691
+
+
+ 23758 0b01 20       		.sleb128 32
+ 23759 0b02 0C       		.uleb128 0xc
+ 23760 0b03 00000000 		.long	.LASF301
+ 23761 0b07 21       		.sleb128 33
+ 23762 0b08 0C       		.uleb128 0xc
+ 23763 0b09 00000000 		.long	.LASF302
+ 23764 0b0d 22       		.sleb128 34
+ 23765 0b0e 0C       		.uleb128 0xc
+ 23766 0b0f 00000000 		.long	.LASF303
+ 23767 0b13 23       		.sleb128 35
+ 23768 0b14 0C       		.uleb128 0xc
+ 23769 0b15 00000000 		.long	.LASF304
+ 23770 0b19 24       		.sleb128 36
+ 23771 0b1a 0C       		.uleb128 0xc
+ 23772 0b1b 00000000 		.long	.LASF305
+ 23773 0b1f 25       		.sleb128 37
+ 23774 0b20 0C       		.uleb128 0xc
+ 23775 0b21 00000000 		.long	.LASF306
+ 23776 0b25 26       		.sleb128 38
+ 23777 0b26 0C       		.uleb128 0xc
+ 23778 0b27 00000000 		.long	.LASF307
+ 23779 0b2b 27       		.sleb128 39
+ 23780 0b2c 0C       		.uleb128 0xc
+ 23781 0b2d 00000000 		.long	.LASF308
+ 23782 0b31 28       		.sleb128 40
+ 23783 0b32 0C       		.uleb128 0xc
+ 23784 0b33 00000000 		.long	.LASF309
+ 23785 0b37 29       		.sleb128 41
+ 23786 0b38 0C       		.uleb128 0xc
+ 23787 0b39 00000000 		.long	.LASF310
+ 23788 0b3d 29       		.sleb128 41
+ 23789 0b3e 0C       		.uleb128 0xc
+ 23790 0b3f 00000000 		.long	.LASF311
+ 23791 0b43 2A       		.sleb128 42
+ 23792 0b44 0C       		.uleb128 0xc
+ 23793 0b45 00000000 		.long	.LASF312
+ 23794 0b49 2B       		.sleb128 43
+ 23795 0b4a 0C       		.uleb128 0xc
+ 23796 0b4b 00000000 		.long	.LASF313
+ 23797 0b4f 2C       		.sleb128 44
+ 23798 0b50 0C       		.uleb128 0xc
+ 23799 0b51 00000000 		.long	.LASF314
+ 23800 0b55 2D       		.sleb128 45
+ 23801 0b56 0C       		.uleb128 0xc
+ 23802 0b57 00000000 		.long	.LASF315
+ 23803 0b5b 2E       		.sleb128 46
+ 23804 0b5c 0C       		.uleb128 0xc
+ 23805 0b5d 00000000 		.long	.LASF316
+ 23806 0b61 2F       		.sleb128 47
+ 23807 0b62 0C       		.uleb128 0xc
+ 23808 0b63 00000000 		.long	.LASF317
+ 23809 0b67 30       		.sleb128 48
+ 23810 0b68 0C       		.uleb128 0xc
+ 23811 0b69 00000000 		.long	.LASF318
+ 23812 0b6d 31       		.sleb128 49
+ 23813 0b6e 00       		.byte	0x0
+ 23814 0b6f 1F       		.uleb128 0x1f
+
GAS LISTING /tmp/ccjbMjHD.s 			page 692
+
+
+ 23815 0b70 00000000 		.long	.LASF386
+ 23816 0b74 01       		.byte	0x1
+ 23817 0b75 38       		.byte	0x38
+ 23818 0b76 01       		.byte	0x1
+ 23819 0b77 6D000000 		.long	0x6d
+ 23820 0b7b 00000000 		.quad	.LFB591
+ 23820      00000000 
+ 23821 0b83 00000000 		.quad	.LFE591
+ 23821      00000000 
+ 23822 0b8b 00000000 		.long	.LLST0
+ 23823 0b8f AD0B0000 		.long	0xbad
+ 23824 0b93 20       		.uleb128 0x20
+ 23825 0b94 6900     		.string	"i"
+ 23826 0b96 01       		.byte	0x1
+ 23827 0b97 38       		.byte	0x38
+ 23828 0b98 6D000000 		.long	0x6d
+ 23829 0b9c 02       		.byte	0x2
+ 23830 0b9d 91       		.byte	0x91
+ 23831 0b9e 64       		.sleb128 -28
+ 23832 0b9f 21       		.uleb128 0x21
+ 23833 0ba0 72746E00 		.string	"rtn"
+ 23834 0ba4 01       		.byte	0x1
+ 23835 0ba5 3A       		.byte	0x3a
+ 23836 0ba6 6D000000 		.long	0x6d
+ 23837 0baa 01       		.byte	0x1
+ 23838 0bab 53       		.byte	0x53
+ 23839 0bac 00       		.byte	0x0
+ 23840 0bad 22       		.uleb128 0x22
+ 23841 0bae 00000000 		.long	.LASF319
+ 23842 0bb2 02       		.byte	0x2
+ 23843 0bb3 79       		.byte	0x79
+ 23844 0bb4 01       		.byte	0x1
+ 23845 0bb5 B3010000 		.long	0x1b3
+ 23846 0bb9 03       		.byte	0x3
+ 23847 0bba D50B0000 		.long	0xbd5
+ 23848 0bbe 23       		.uleb128 0x23
+ 23849 0bbf 61696E00 		.string	"ain"
+ 23850 0bc3 02       		.byte	0x2
+ 23851 0bc4 79       		.byte	0x79
+ 23852 0bc5 D3000000 		.long	0xd3
+ 23853 0bc9 24       		.uleb128 0x24
+ 23854 0bca 76656300 		.string	"vec"
+ 23855 0bce 02       		.byte	0x2
+ 23856 0bcf 7D       		.byte	0x7d
+ 23857 0bd0 B3010000 		.long	0x1b3
+ 23858 0bd4 00       		.byte	0x0
+ 23859 0bd5 25       		.uleb128 0x25
+ 23860 0bd6 00000000 		.long	.LASF320
+ 23861 0bda 02       		.byte	0x2
+ 23862 0bdb 8606     		.value	0x686
+ 23863 0bdd 01       		.byte	0x1
+ 23864 0bde B3010000 		.long	0x1b3
+ 23865 0be2 03       		.byte	0x3
+ 23866 0be3 540C0000 		.long	0xc54
+ 23867 0be7 26       		.uleb128 0x26
+ 23868 0be8 00000000 		.long	.LASF67
+ 23869 0bec 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 693
+
+
+ 23870 0bed 8606     		.value	0x686
+ 23871 0bef B3010000 		.long	0x1b3
+ 23872 0bf3 26       		.uleb128 0x26
+ 23873 0bf4 00000000 		.long	.LASF321
+ 23874 0bf8 02       		.byte	0x2
+ 23875 0bf9 8606     		.value	0x686
+ 23876 0bfb B4000000 		.long	0xb4
+ 23877 0bff 27       		.uleb128 0x27
+ 23878 0c00 00000000 		.long	.LASF322
+ 23879 0c04 02       		.byte	0x2
+ 23880 0c05 8E06     		.value	0x68e
+ 23881 0c07 B3010000 		.long	0x1b3
+ 23882 0c0b 28       		.uleb128 0x28
+ 23883 0c0c 746D7000 		.string	"tmp"
+ 23884 0c10 02       		.byte	0x2
+ 23885 0c11 8F06     		.value	0x68f
+ 23886 0c13 B3010000 		.long	0x1b3
+ 23887 0c17 29       		.uleb128 0x29
+ 23888 0c18 270C0000 		.long	0xc27
+ 23889 0c1c 28       		.uleb128 0x28
+ 23890 0c1d 7600     		.string	"v"
+ 23891 0c1f 02       		.byte	0x2
+ 23892 0c20 9306     		.value	0x693
+ 23893 0c22 29050000 		.long	0x529
+ 23894 0c26 00       		.byte	0x0
+ 23895 0c27 29       		.uleb128 0x29
+ 23896 0c28 370C0000 		.long	0xc37
+ 23897 0c2c 28       		.uleb128 0x28
+ 23898 0c2d 7600     		.string	"v"
+ 23899 0c2f 02       		.byte	0x2
+ 23900 0c30 9506     		.value	0x695
+ 23901 0c32 29050000 		.long	0x529
+ 23902 0c36 00       		.byte	0x0
+ 23903 0c37 29       		.uleb128 0x29
+ 23904 0c38 470C0000 		.long	0xc47
+ 23905 0c3c 28       		.uleb128 0x28
+ 23906 0c3d 7600     		.string	"v"
+ 23907 0c3f 02       		.byte	0x2
+ 23908 0c40 9706     		.value	0x697
+ 23909 0c42 29050000 		.long	0x529
+ 23910 0c46 00       		.byte	0x0
+ 23911 0c47 2A       		.uleb128 0x2a
+ 23912 0c48 28       		.uleb128 0x28
+ 23913 0c49 7600     		.string	"v"
+ 23914 0c4b 02       		.byte	0x2
+ 23915 0c4c 9906     		.value	0x699
+ 23916 0c4e 29050000 		.long	0x529
+ 23917 0c52 00       		.byte	0x0
+ 23918 0c53 00       		.byte	0x0
+ 23919 0c54 25       		.uleb128 0x25
+ 23920 0c55 00000000 		.long	.LASF323
+ 23921 0c59 02       		.byte	0x2
+ 23922 0c5a 0402     		.value	0x204
+ 23923 0c5c 01       		.byte	0x1
+ 23924 0c5d B3010000 		.long	0x1b3
+ 23925 0c61 03       		.byte	0x3
+ 23926 0c62 8B0C0000 		.long	0xc8b
+
GAS LISTING /tmp/ccjbMjHD.s 			page 694
+
+
+ 23927 0c66 26       		.uleb128 0x26
+ 23928 0c67 00000000 		.long	.LASF67
+ 23929 0c6b 02       		.byte	0x2
+ 23930 0c6c 0402     		.value	0x204
+ 23931 0c6e B3010000 		.long	0x1b3
+ 23932 0c72 26       		.uleb128 0x26
+ 23933 0c73 00000000 		.long	.LASF324
+ 23934 0c77 02       		.byte	0x2
+ 23935 0c78 0402     		.value	0x204
+ 23936 0c7a 09040000 		.long	0x409
+ 23937 0c7e 26       		.uleb128 0x26
+ 23938 0c7f 00000000 		.long	.LASF325
+ 23939 0c83 02       		.byte	0x2
+ 23940 0c84 0402     		.value	0x204
+ 23941 0c86 B4000000 		.long	0xb4
+ 23942 0c8a 00       		.byte	0x0
+ 23943 0c8b 25       		.uleb128 0x25
+ 23944 0c8c 00000000 		.long	.LASF326
+ 23945 0c90 03       		.byte	0x3
+ 23946 0c91 5402     		.value	0x254
+ 23947 0c93 01       		.byte	0x1
+ 23948 0c94 E7000000 		.long	0xe7
+ 23949 0c98 03       		.byte	0x3
+ 23950 0c99 C10C0000 		.long	0xcc1
+ 23951 0c9d 2B       		.uleb128 0x2b
+ 23952 0c9e 76696E00 		.string	"vin"
+ 23953 0ca2 03       		.byte	0x3
+ 23954 0ca3 5402     		.value	0x254
+ 23955 0ca5 E7000000 		.long	0xe7
+ 23956 0ca9 2B       		.uleb128 0x2b
+ 23957 0caa 696900   		.string	"ii"
+ 23958 0cad 03       		.byte	0x3
+ 23959 0cae 5402     		.value	0x254
+ 23960 0cb0 6D000000 		.long	0x6d
+ 23961 0cb4 2B       		.uleb128 0x2b
+ 23962 0cb5 6F666600 		.string	"off"
+ 23963 0cb9 03       		.byte	0x3
+ 23964 0cba 5402     		.value	0x254
+ 23965 0cbc B4000000 		.long	0xb4
+ 23966 0cc0 00       		.byte	0x0
+ 23967 0cc1 25       		.uleb128 0x25
+ 23968 0cc2 00000000 		.long	.LASF327
+ 23969 0cc6 02       		.byte	0x2
+ 23970 0cc7 7B03     		.value	0x37b
+ 23971 0cc9 01       		.byte	0x1
+ 23972 0cca B3010000 		.long	0x1b3
+ 23973 0cce 03       		.byte	0x3
+ 23974 0ccf E00C0000 		.long	0xce0
+ 23975 0cd3 26       		.uleb128 0x26
+ 23976 0cd4 00000000 		.long	.LASF67
+ 23977 0cd8 02       		.byte	0x2
+ 23978 0cd9 7B03     		.value	0x37b
+ 23979 0cdb B3010000 		.long	0x1b3
+ 23980 0cdf 00       		.byte	0x0
+ 23981 0ce0 25       		.uleb128 0x25
+ 23982 0ce1 00000000 		.long	.LASF328
+ 23983 0ce5 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 695
+
+
+ 23984 0ce6 4E03     		.value	0x34e
+ 23985 0ce8 01       		.byte	0x1
+ 23986 0ce9 B3010000 		.long	0x1b3
+ 23987 0ced 03       		.byte	0x3
+ 23988 0cee 440D0000 		.long	0xd44
+ 23989 0cf2 26       		.uleb128 0x26
+ 23990 0cf3 00000000 		.long	.LASF67
+ 23991 0cf7 02       		.byte	0x2
+ 23992 0cf8 4E03     		.value	0x34e
+ 23993 0cfa B3010000 		.long	0x1b3
+ 23994 0cfe 2B       		.uleb128 0x2b
+ 23995 0cff 626F7800 		.string	"box"
+ 23996 0d03 02       		.byte	0x2
+ 23997 0d04 4E03     		.value	0x34e
+ 23998 0d06 440D0000 		.long	0xd44
+ 23999 0d0a 28       		.uleb128 0x28
+ 24000 0d0b 6C6F00   		.string	"lo"
+ 24001 0d0e 02       		.byte	0x2
+ 24002 0d0f 5003     		.value	0x350
+ 24003 0d11 B3010000 		.long	0x1b3
+ 24004 0d15 28       		.uleb128 0x28
+ 24005 0d16 686900   		.string	"hi"
+ 24006 0d19 02       		.byte	0x2
+ 24007 0d1a 5003     		.value	0x350
+ 24008 0d1c B3010000 		.long	0x1b3
+ 24009 0d20 28       		.uleb128 0x28
+ 24010 0d21 746D7000 		.string	"tmp"
+ 24011 0d25 02       		.byte	0x2
+ 24012 0d26 5003     		.value	0x350
+ 24013 0d28 B3010000 		.long	0x1b3
+ 24014 0d2c 28       		.uleb128 0x28
+ 24015 0d2d 6F757400 		.string	"out"
+ 24016 0d31 02       		.byte	0x2
+ 24017 0d32 5003     		.value	0x350
+ 24018 0d34 B3010000 		.long	0x1b3
+ 24019 0d38 28       		.uleb128 0x28
+ 24020 0d39 697800   		.string	"ix"
+ 24021 0d3c 02       		.byte	0x2
+ 24022 0d3d 5103     		.value	0x351
+ 24023 0d3f 78000000 		.long	0x78
+ 24024 0d43 00       		.byte	0x0
+ 24025 0d44 07       		.uleb128 0x7
+ 24026 0d45 08       		.byte	0x8
+ 24027 0d46 4A0D0000 		.long	0xd4a
+ 24028 0d4a 06       		.uleb128 0x6
+ 24029 0d4b B3010000 		.long	0x1b3
+ 24030 0d4f 22       		.uleb128 0x22
+ 24031 0d50 00000000 		.long	.LASF329
+ 24032 0d54 02       		.byte	0x2
+ 24033 0d55 CA       		.byte	0xca
+ 24034 0d56 01       		.byte	0x1
+ 24035 0d57 B3010000 		.long	0x1b3
+ 24036 0d5b 03       		.byte	0x3
+ 24037 0d5c 750D0000 		.long	0xd75
+ 24038 0d60 23       		.uleb128 0x23
+ 24039 0d61 763100   		.string	"v1"
+ 24040 0d64 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 696
+
+
+ 24041 0d65 CA       		.byte	0xca
+ 24042 0d66 B3010000 		.long	0x1b3
+ 24043 0d6a 23       		.uleb128 0x23
+ 24044 0d6b 763200   		.string	"v2"
+ 24045 0d6e 02       		.byte	0x2
+ 24046 0d6f CA       		.byte	0xca
+ 24047 0d70 B3010000 		.long	0x1b3
+ 24048 0d74 00       		.byte	0x0
+ 24049 0d75 25       		.uleb128 0x25
+ 24050 0d76 00000000 		.long	.LASF330
+ 24051 0d7a 03       		.byte	0x3
+ 24052 0d7b AF01     		.value	0x1af
+ 24053 0d7d 01       		.byte	0x1
+ 24054 0d7e E7000000 		.long	0xe7
+ 24055 0d82 03       		.byte	0x3
+ 24056 0d83 A00D0000 		.long	0xda0
+ 24057 0d87 2B       		.uleb128 0x2b
+ 24058 0d88 76696E00 		.string	"vin"
+ 24059 0d8c 03       		.byte	0x3
+ 24060 0d8d AF01     		.value	0x1af
+ 24061 0d8f E7000000 		.long	0xe7
+ 24062 0d93 26       		.uleb128 0x26
+ 24063 0d94 00000000 		.long	.LASF331
+ 24064 0d98 03       		.byte	0x3
+ 24065 0d99 AF01     		.value	0x1af
+ 24066 0d9b B4000000 		.long	0xb4
+ 24067 0d9f 00       		.byte	0x0
+ 24068 0da0 25       		.uleb128 0x25
+ 24069 0da1 00000000 		.long	.LASF332
+ 24070 0da5 02       		.byte	0x2
+ 24071 0da6 7101     		.value	0x171
+ 24072 0da8 01       		.byte	0x1
+ 24073 0da9 B3010000 		.long	0x1b3
+ 24074 0dad 03       		.byte	0x3
+ 24075 0dae CB0D0000 		.long	0xdcb
+ 24076 0db2 26       		.uleb128 0x26
+ 24077 0db3 00000000 		.long	.LASF333
+ 24078 0db7 02       		.byte	0x2
+ 24079 0db8 7101     		.value	0x171
+ 24080 0dba B3010000 		.long	0x1b3
+ 24081 0dbe 26       		.uleb128 0x26
+ 24082 0dbf 00000000 		.long	.LASF334
+ 24083 0dc3 02       		.byte	0x2
+ 24084 0dc4 7101     		.value	0x171
+ 24085 0dc6 B3010000 		.long	0x1b3
+ 24086 0dca 00       		.byte	0x0
+ 24087 0dcb 25       		.uleb128 0x25
+ 24088 0dcc 00000000 		.long	.LASF335
+ 24089 0dd0 03       		.byte	0x3
+ 24090 0dd1 0F02     		.value	0x20f
+ 24091 0dd3 01       		.byte	0x1
+ 24092 0dd4 E7000000 		.long	0xe7
+ 24093 0dd8 03       		.byte	0x3
+ 24094 0dd9 F60D0000 		.long	0xdf6
+ 24095 0ddd 2B       		.uleb128 0x2b
+ 24096 0dde 76696E00 		.string	"vin"
+ 24097 0de2 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 697
+
+
+ 24098 0de3 0F02     		.value	0x20f
+ 24099 0de5 E7000000 		.long	0xe7
+ 24100 0de9 26       		.uleb128 0x26
+ 24101 0dea 00000000 		.long	.LASF336
+ 24102 0dee 03       		.byte	0x3
+ 24103 0def 0F02     		.value	0x20f
+ 24104 0df1 F60D0000 		.long	0xdf6
+ 24105 0df5 00       		.byte	0x0
+ 24106 0df6 06       		.uleb128 0x6
+ 24107 0df7 E7000000 		.long	0xe7
+ 24108 0dfb 22       		.uleb128 0x22
+ 24109 0dfc 00000000 		.long	.LASF337
+ 24110 0e00 02       		.byte	0x2
+ 24111 0e01 E6       		.byte	0xe6
+ 24112 0e02 01       		.byte	0x1
+ 24113 0e03 B3010000 		.long	0x1b3
+ 24114 0e07 03       		.byte	0x3
+ 24115 0e08 210E0000 		.long	0xe21
+ 24116 0e0c 23       		.uleb128 0x23
+ 24117 0e0d 763100   		.string	"v1"
+ 24118 0e10 02       		.byte	0x2
+ 24119 0e11 E6       		.byte	0xe6
+ 24120 0e12 B3010000 		.long	0x1b3
+ 24121 0e16 23       		.uleb128 0x23
+ 24122 0e17 763200   		.string	"v2"
+ 24123 0e1a 02       		.byte	0x2
+ 24124 0e1b E6       		.byte	0xe6
+ 24125 0e1c B3010000 		.long	0x1b3
+ 24126 0e20 00       		.byte	0x0
+ 24127 0e21 25       		.uleb128 0x25
+ 24128 0e22 00000000 		.long	.LASF338
+ 24129 0e26 02       		.byte	0x2
+ 24130 0e27 1E01     		.value	0x11e
+ 24131 0e29 01       		.byte	0x1
+ 24132 0e2a B3010000 		.long	0x1b3
+ 24133 0e2e 03       		.byte	0x3
+ 24134 0e2f 4A0E0000 		.long	0xe4a
+ 24135 0e33 2B       		.uleb128 0x2b
+ 24136 0e34 763100   		.string	"v1"
+ 24137 0e37 02       		.byte	0x2
+ 24138 0e38 1E01     		.value	0x11e
+ 24139 0e3a B3010000 		.long	0x1b3
+ 24140 0e3e 2B       		.uleb128 0x2b
+ 24141 0e3f 763200   		.string	"v2"
+ 24142 0e42 02       		.byte	0x2
+ 24143 0e43 1E01     		.value	0x11e
+ 24144 0e45 B3010000 		.long	0x1b3
+ 24145 0e49 00       		.byte	0x0
+ 24146 0e4a 25       		.uleb128 0x25
+ 24147 0e4b 00000000 		.long	.LASF339
+ 24148 0e4f 02       		.byte	0x2
+ 24149 0e50 9502     		.value	0x295
+ 24150 0e52 01       		.byte	0x1
+ 24151 0e53 B3010000 		.long	0x1b3
+ 24152 0e57 03       		.byte	0x3
+ 24153 0e58 860E0000 		.long	0xe86
+ 24154 0e5c 26       		.uleb128 0x26
+
GAS LISTING /tmp/ccjbMjHD.s 			page 698
+
+
+ 24155 0e5d 00000000 		.long	.LASF67
+ 24156 0e61 02       		.byte	0x2
+ 24157 0e62 9502     		.value	0x295
+ 24158 0e64 B3010000 		.long	0x1b3
+ 24159 0e68 2C       		.uleb128 0x2c
+ 24160 0e69 00000000 		.long	.LASF340
+ 24161 0e6d 02       		.byte	0x2
+ 24162 0e6e 9702     		.value	0x297
+ 24163 0e70 4A0D0000 		.long	0xd4a
+ 24164 0e74 10       		.byte	0x10
+ 24165 0e75 01       		.byte	0x1
+ 24166 0e76 02       		.byte	0x2
+ 24167 0e77 03       		.byte	0x3
+ 24168 0e78 00       		.byte	0x0
+ 24169 0e79 05       		.byte	0x5
+ 24170 0e7a 06       		.byte	0x6
+ 24171 0e7b 07       		.byte	0x7
+ 24172 0e7c 04       		.byte	0x4
+ 24173 0e7d 09       		.byte	0x9
+ 24174 0e7e 0A       		.byte	0xa
+ 24175 0e7f 0B       		.byte	0xb
+ 24176 0e80 08       		.byte	0x8
+ 24177 0e81 0D       		.byte	0xd
+ 24178 0e82 0E       		.byte	0xe
+ 24179 0e83 0F       		.byte	0xf
+ 24180 0e84 0C       		.byte	0xc
+ 24181 0e85 00       		.byte	0x0
+ 24182 0e86 22       		.uleb128 0x22
+ 24183 0e87 00000000 		.long	.LASF341
+ 24184 0e8b 02       		.byte	0x2
+ 24185 0e8c AE       		.byte	0xae
+ 24186 0e8d 01       		.byte	0x1
+ 24187 0e8e B3010000 		.long	0x1b3
+ 24188 0e92 03       		.byte	0x3
+ 24189 0e93 AC0E0000 		.long	0xeac
+ 24190 0e97 23       		.uleb128 0x23
+ 24191 0e98 763100   		.string	"v1"
+ 24192 0e9b 02       		.byte	0x2
+ 24193 0e9c AE       		.byte	0xae
+ 24194 0e9d B3010000 		.long	0x1b3
+ 24195 0ea1 23       		.uleb128 0x23
+ 24196 0ea2 763200   		.string	"v2"
+ 24197 0ea5 02       		.byte	0x2
+ 24198 0ea6 AE       		.byte	0xae
+ 24199 0ea7 B3010000 		.long	0x1b3
+ 24200 0eab 00       		.byte	0x0
+ 24201 0eac 25       		.uleb128 0x25
+ 24202 0ead 00000000 		.long	.LASF342
+ 24203 0eb1 02       		.byte	0x2
+ 24204 0eb2 4605     		.value	0x546
+ 24205 0eb4 01       		.byte	0x1
+ 24206 0eb5 B3010000 		.long	0x1b3
+ 24207 0eb9 03       		.byte	0x3
+ 24208 0eba CB0E0000 		.long	0xecb
+ 24209 0ebe 26       		.uleb128 0x26
+ 24210 0ebf 00000000 		.long	.LASF67
+ 24211 0ec3 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 699
+
+
+ 24212 0ec4 4605     		.value	0x546
+ 24213 0ec6 B3010000 		.long	0x1b3
+ 24214 0eca 00       		.byte	0x0
+ 24215 0ecb 25       		.uleb128 0x25
+ 24216 0ecc 00000000 		.long	.LASF343
+ 24217 0ed0 03       		.byte	0x3
+ 24218 0ed1 C001     		.value	0x1c0
+ 24219 0ed3 01       		.byte	0x1
+ 24220 0ed4 E7000000 		.long	0xe7
+ 24221 0ed8 03       		.byte	0x3
+ 24222 0ed9 F60E0000 		.long	0xef6
+ 24223 0edd 2B       		.uleb128 0x2b
+ 24224 0ede 76696E00 		.string	"vin"
+ 24225 0ee2 03       		.byte	0x3
+ 24226 0ee3 C001     		.value	0x1c0
+ 24227 0ee5 E7000000 		.long	0xe7
+ 24228 0ee9 26       		.uleb128 0x26
+ 24229 0eea 00000000 		.long	.LASF334
+ 24230 0eee 03       		.byte	0x3
+ 24231 0eef C001     		.value	0x1c0
+ 24232 0ef1 B4000000 		.long	0xb4
+ 24233 0ef5 00       		.byte	0x0
+ 24234 0ef6 25       		.uleb128 0x25
+ 24235 0ef7 00000000 		.long	.LASF344
+ 24236 0efb 02       		.byte	0x2
+ 24237 0efc 1A06     		.value	0x61a
+ 24238 0efe 01       		.byte	0x1
+ 24239 0eff B3010000 		.long	0x1b3
+ 24240 0f03 03       		.byte	0x3
+ 24241 0f04 210F0000 		.long	0xf21
+ 24242 0f08 26       		.uleb128 0x26
+ 24243 0f09 00000000 		.long	.LASF67
+ 24244 0f0d 02       		.byte	0x2
+ 24245 0f0e 1A06     		.value	0x61a
+ 24246 0f10 B3010000 		.long	0x1b3
+ 24247 0f14 27       		.uleb128 0x27
+ 24248 0f15 00000000 		.long	.LASF345
+ 24249 0f19 02       		.byte	0x2
+ 24250 0f1a 1D06     		.value	0x61d
+ 24251 0f1c B3010000 		.long	0x1b3
+ 24252 0f20 00       		.byte	0x0
+ 24253 0f21 25       		.uleb128 0x25
+ 24254 0f22 00000000 		.long	.LASF346
+ 24255 0f26 02       		.byte	0x2
+ 24256 0f27 FA04     		.value	0x4fa
+ 24257 0f29 01       		.byte	0x1
+ 24258 0f2a B3010000 		.long	0x1b3
+ 24259 0f2e 03       		.byte	0x3
+ 24260 0f2f 5D0F0000 		.long	0xf5d
+ 24261 0f33 26       		.uleb128 0x26
+ 24262 0f34 00000000 		.long	.LASF67
+ 24263 0f38 02       		.byte	0x2
+ 24264 0f39 FA04     		.value	0x4fa
+ 24265 0f3b B3010000 		.long	0x1b3
+ 24266 0f3f 2C       		.uleb128 0x2c
+ 24267 0f40 00000000 		.long	.LASF334
+ 24268 0f44 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 700
+
+
+ 24269 0f45 FD04     		.value	0x4fd
+ 24270 0f47 4A0D0000 		.long	0xd4a
+ 24271 0f4b 10       		.byte	0x10
+ 24272 0f4c FF       		.byte	0xff
+ 24273 0f4d FF       		.byte	0xff
+ 24274 0f4e FF       		.byte	0xff
+ 24275 0f4f FF       		.byte	0xff
+ 24276 0f50 00       		.byte	0x0
+ 24277 0f51 01       		.byte	0x1
+ 24278 0f52 02       		.byte	0x2
+ 24279 0f53 03       		.byte	0x3
+ 24280 0f54 04       		.byte	0x4
+ 24281 0f55 05       		.byte	0x5
+ 24282 0f56 06       		.byte	0x6
+ 24283 0f57 07       		.byte	0x7
+ 24284 0f58 08       		.byte	0x8
+ 24285 0f59 09       		.byte	0x9
+ 24286 0f5a 0A       		.byte	0xa
+ 24287 0f5b 0B       		.byte	0xb
+ 24288 0f5c 00       		.byte	0x0
+ 24289 0f5d 2D       		.uleb128 0x2d
+ 24290 0f5e 00000000 		.long	.LASF359
+ 24291 0f62 02       		.byte	0x2
+ 24292 0f63 C206     		.value	0x6c2
+ 24293 0f65 01       		.byte	0x1
+ 24294 0f66 00000000 		.quad	.LFB645
+ 24294      00000000 
+ 24295 0f6e 00000000 		.quad	.LFE645
+ 24295      00000000 
+ 24296 0f76 00000000 		.long	.LLST1
+ 24297 0f7a 24560000 		.long	0x5624
+ 24298 0f7e 2E       		.uleb128 0x2e
+ 24299 0f7f 00000000 		.long	.LASF65
+ 24300 0f83 02       		.byte	0x2
+ 24301 0f84 C206     		.value	0x6c2
+ 24302 0f86 24560000 		.long	0x5624
+ 24303 0f8a 04       		.byte	0x4
+ 24304 0f8b 91       		.byte	0x91
+ 24305 0f8c E8AC7F   		.sleb128 -10648
+ 24306 0f8f 2F       		.uleb128 0x2f
+ 24307 0f90 6B657900 		.string	"key"
+ 24308 0f94 02       		.byte	0x2
+ 24309 0f95 C206     		.value	0x6c2
+ 24310 0f97 2A560000 		.long	0x562a
+ 24311 0f9b 04       		.byte	0x4
+ 24312 0f9c 91       		.byte	0x91
+ 24313 0f9d E0AC7F   		.sleb128 -10656
+ 24314 0fa0 30       		.uleb128 0x30
+ 24315 0fa1 00000000 		.long	.LASF67
+ 24316 0fa5 02       		.byte	0x2
+ 24317 0fa6 C406     		.value	0x6c4
+ 24318 0fa8 B3010000 		.long	0x1b3
+ 24319 0fac 04       		.byte	0x4
+ 24320 0fad 91       		.byte	0x91
+ 24321 0fae F0B17F   		.sleb128 -10000
+ 24322 0fb1 30       		.uleb128 0x30
+ 24323 0fb2 00000000 		.long	.LASF347
+
GAS LISTING /tmp/ccjbMjHD.s 			page 701
+
+
+ 24324 0fb6 02       		.byte	0x2
+ 24325 0fb7 C506     		.value	0x6c5
+ 24326 0fb9 B3010000 		.long	0x1b3
+ 24327 0fbd 04       		.byte	0x4
+ 24328 0fbe 91       		.byte	0x91
+ 24329 0fbf 80B27F   		.sleb128 -9984
+ 24330 0fc2 31       		.uleb128 0x31
+ 24331 0fc3 AD0B0000 		.long	0xbad
+ 24332 0fc7 00000000 		.quad	.LBB684
+ 24332      00000000 
+ 24333 0fcf 00000000 		.quad	.LBE684
+ 24333      00000000 
+ 24334 0fd7 02       		.byte	0x2
+ 24335 0fd8 C706     		.value	0x6c7
+ 24336 0fda 05100000 		.long	0x1005
+ 24337 0fde 32       		.uleb128 0x32
+ 24338 0fdf BE0B0000 		.long	0xbbe
+ 24339 0fe3 04       		.byte	0x4
+ 24340 0fe4 91       		.byte	0x91
+ 24341 0fe5 90B27F   		.sleb128 -9968
+ 24342 0fe8 33       		.uleb128 0x33
+ 24343 0fe9 00000000 		.quad	.LBB685
+ 24343      00000000 
+ 24344 0ff1 00000000 		.quad	.LBE685
+ 24344      00000000 
+ 24345 0ff9 34       		.uleb128 0x34
+ 24346 0ffa C90B0000 		.long	0xbc9
+ 24347 0ffe 04       		.byte	0x4
+ 24348 0fff 76       		.byte	0x76
+ 24349 1000 80A97F   		.sleb128 -11136
+ 24350 1003 00       		.byte	0x0
+ 24351 1004 00       		.byte	0x0
+ 24352 1005 31       		.uleb128 0x31
+ 24353 1006 D50B0000 		.long	0xbd5
+ 24354 100a 00000000 		.quad	.LBB686
+ 24354      00000000 
+ 24355 1012 00000000 		.quad	.LBE686
+ 24355      00000000 
+ 24356 101a 02       		.byte	0x2
+ 24357 101b D006     		.value	0x6d0
+ 24358 101d 18150000 		.long	0x1518
+ 24359 1021 32       		.uleb128 0x32
+ 24360 1022 F30B0000 		.long	0xbf3
+ 24361 1026 04       		.byte	0x4
+ 24362 1027 91       		.byte	0x91
+ 24363 1028 9CB27F   		.sleb128 -9956
+ 24364 102b 32       		.uleb128 0x32
+ 24365 102c E70B0000 		.long	0xbe7
+ 24366 1030 04       		.byte	0x4
+ 24367 1031 91       		.byte	0x91
+ 24368 1032 A0B27F   		.sleb128 -9952
+ 24369 1035 33       		.uleb128 0x33
+ 24370 1036 00000000 		.quad	.LBB687
+ 24370      00000000 
+ 24371 103e 00000000 		.quad	.LBE687
+ 24371      00000000 
+ 24372 1046 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s 			page 702
+
+
+ 24373 1047 FF0B0000 		.long	0xbff
+ 24374 104b 04       		.byte	0x4
+ 24375 104c 76       		.byte	0x76
+ 24376 104d A0A97F   		.sleb128 -11104
+ 24377 1050 34       		.uleb128 0x34
+ 24378 1051 0B0C0000 		.long	0xc0b
+ 24379 1055 04       		.byte	0x4
+ 24380 1056 76       		.byte	0x76
+ 24381 1057 90A97F   		.sleb128 -11120
+ 24382 105a 31       		.uleb128 0x31
+ 24383 105b 540C0000 		.long	0xc54
+ 24384 105f 00000000 		.quad	.LBB688
+ 24384      00000000 
+ 24385 1067 00000000 		.quad	.LBE688
+ 24385      00000000 
+ 24386 106f 02       		.byte	0x2
+ 24387 1070 9106     		.value	0x691
+ 24388 1072 CC100000 		.long	0x10cc
+ 24389 1076 32       		.uleb128 0x32
+ 24390 1077 7E0C0000 		.long	0xc7e
+ 24391 107b 04       		.byte	0x4
+ 24392 107c 91       		.byte	0x91
+ 24393 107d B8B27F   		.sleb128 -9928
+ 24394 1080 32       		.uleb128 0x32
+ 24395 1081 720C0000 		.long	0xc72
+ 24396 1085 04       		.byte	0x4
+ 24397 1086 91       		.byte	0x91
+ 24398 1087 BCB27F   		.sleb128 -9924
+ 24399 108a 32       		.uleb128 0x32
+ 24400 108b 660C0000 		.long	0xc66
+ 24401 108f 04       		.byte	0x4
+ 24402 1090 91       		.byte	0x91
+ 24403 1091 C0B27F   		.sleb128 -9920
+ 24404 1094 35       		.uleb128 0x35
+ 24405 1095 8B0C0000 		.long	0xc8b
+ 24406 1099 00000000 		.quad	.LBB690
+ 24406      00000000 
+ 24407 10a1 00000000 		.quad	.LBE690
+ 24407      00000000 
+ 24408 10a9 02       		.byte	0x2
+ 24409 10aa 0702     		.value	0x207
+ 24410 10ac 32       		.uleb128 0x32
+ 24411 10ad B40C0000 		.long	0xcb4
+ 24412 10b1 04       		.byte	0x4
+ 24413 10b2 91       		.byte	0x91
+ 24414 10b3 D8B27F   		.sleb128 -9896
+ 24415 10b6 32       		.uleb128 0x32
+ 24416 10b7 A90C0000 		.long	0xca9
+ 24417 10bb 04       		.byte	0x4
+ 24418 10bc 91       		.byte	0x91
+ 24419 10bd DCB27F   		.sleb128 -9892
+ 24420 10c0 32       		.uleb128 0x32
+ 24421 10c1 9D0C0000 		.long	0xc9d
+ 24422 10c5 04       		.byte	0x4
+ 24423 10c6 91       		.byte	0x91
+ 24424 10c7 E0B27F   		.sleb128 -9888
+ 24425 10ca 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 703
+
+
+ 24426 10cb 00       		.byte	0x0
+ 24427 10cc 31       		.uleb128 0x31
+ 24428 10cd C10C0000 		.long	0xcc1
+ 24429 10d1 00000000 		.quad	.LBB692
+ 24429      00000000 
+ 24430 10d9 00000000 		.quad	.LBE692
+ 24430      00000000 
+ 24431 10e1 02       		.byte	0x2
+ 24432 10e2 9206     		.value	0x692
+ 24433 10e4 73130000 		.long	0x1373
+ 24434 10e8 32       		.uleb128 0x32
+ 24435 10e9 D30C0000 		.long	0xcd3
+ 24436 10ed 04       		.byte	0x4
+ 24437 10ee 91       		.byte	0x91
+ 24438 10ef F0B27F   		.sleb128 -9872
+ 24439 10f2 35       		.uleb128 0x35
+ 24440 10f3 E00C0000 		.long	0xce0
+ 24441 10f7 00000000 		.quad	.LBB694
+ 24441      00000000 
+ 24442 10ff 00000000 		.quad	.LBE694
+ 24442      00000000 
+ 24443 1107 02       		.byte	0x2
+ 24444 1108 7D03     		.value	0x37d
+ 24445 110a 32       		.uleb128 0x32
+ 24446 110b FE0C0000 		.long	0xcfe
+ 24447 110f 04       		.byte	0x4
+ 24448 1110 91       		.byte	0x91
+ 24449 1111 88B37F   		.sleb128 -9848
+ 24450 1114 32       		.uleb128 0x32
+ 24451 1115 F20C0000 		.long	0xcf2
+ 24452 1119 04       		.byte	0x4
+ 24453 111a 91       		.byte	0x91
+ 24454 111b 90B37F   		.sleb128 -9840
+ 24455 111e 33       		.uleb128 0x33
+ 24456 111f 00000000 		.quad	.LBB695
+ 24456      00000000 
+ 24457 1127 00000000 		.quad	.LBE695
+ 24457      00000000 
+ 24458 112f 34       		.uleb128 0x34
+ 24459 1130 0A0D0000 		.long	0xd0a
+ 24460 1134 04       		.byte	0x4
+ 24461 1135 91       		.byte	0x91
+ 24462 1136 E0B37F   		.sleb128 -9760
+ 24463 1139 34       		.uleb128 0x34
+ 24464 113a 150D0000 		.long	0xd15
+ 24465 113e 04       		.byte	0x4
+ 24466 113f 91       		.byte	0x91
+ 24467 1140 D0B37F   		.sleb128 -9776
+ 24468 1143 34       		.uleb128 0x34
+ 24469 1144 200D0000 		.long	0xd20
+ 24470 1148 04       		.byte	0x4
+ 24471 1149 91       		.byte	0x91
+ 24472 114a C0B37F   		.sleb128 -9792
+ 24473 114d 34       		.uleb128 0x34
+ 24474 114e 2C0D0000 		.long	0xd2c
+ 24475 1152 04       		.byte	0x4
+ 24476 1153 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 704
+
+
+ 24477 1154 B0B37F   		.sleb128 -9808
+ 24478 1157 34       		.uleb128 0x34
+ 24479 1158 380D0000 		.long	0xd38
+ 24480 115c 04       		.byte	0x4
+ 24481 115d 91       		.byte	0x91
+ 24482 115e ACB37F   		.sleb128 -9812
+ 24483 1161 31       		.uleb128 0x31
+ 24484 1162 4F0D0000 		.long	0xd4f
+ 24485 1166 00000000 		.quad	.LBB696
+ 24485      00000000 
+ 24486 116e 00000000 		.quad	.LBE696
+ 24486      00000000 
+ 24487 1176 02       		.byte	0x2
+ 24488 1177 5603     		.value	0x356
+ 24489 1179 92110000 		.long	0x1192
+ 24490 117d 32       		.uleb128 0x32
+ 24491 117e 6A0D0000 		.long	0xd6a
+ 24492 1182 04       		.byte	0x4
+ 24493 1183 91       		.byte	0x91
+ 24494 1184 F0B37F   		.sleb128 -9744
+ 24495 1187 32       		.uleb128 0x32
+ 24496 1188 600D0000 		.long	0xd60
+ 24497 118c 04       		.byte	0x4
+ 24498 118d 91       		.byte	0x91
+ 24499 118e 80B47F   		.sleb128 -9728
+ 24500 1191 00       		.byte	0x0
+ 24501 1192 31       		.uleb128 0x31
+ 24502 1193 750D0000 		.long	0xd75
+ 24503 1197 00000000 		.quad	.LBB698
+ 24503      00000000 
+ 24504 119f 00000000 		.quad	.LBE698
+ 24504      00000000 
+ 24505 11a7 02       		.byte	0x2
+ 24506 11a8 5903     		.value	0x359
+ 24507 11aa C3110000 		.long	0x11c3
+ 24508 11ae 32       		.uleb128 0x32
+ 24509 11af 930D0000 		.long	0xd93
+ 24510 11b3 04       		.byte	0x4
+ 24511 11b4 91       		.byte	0x91
+ 24512 11b5 9CB47F   		.sleb128 -9700
+ 24513 11b8 32       		.uleb128 0x32
+ 24514 11b9 870D0000 		.long	0xd87
+ 24515 11bd 04       		.byte	0x4
+ 24516 11be 91       		.byte	0x91
+ 24517 11bf A0B47F   		.sleb128 -9696
+ 24518 11c2 00       		.byte	0x0
+ 24519 11c3 31       		.uleb128 0x31
+ 24520 11c4 4F0D0000 		.long	0xd4f
+ 24521 11c8 00000000 		.quad	.LBB700
+ 24521      00000000 
+ 24522 11d0 00000000 		.quad	.LBE700
+ 24522      00000000 
+ 24523 11d8 02       		.byte	0x2
+ 24524 11d9 5B03     		.value	0x35b
+ 24525 11db F4110000 		.long	0x11f4
+ 24526 11df 32       		.uleb128 0x32
+ 24527 11e0 6A0D0000 		.long	0xd6a
+
GAS LISTING /tmp/ccjbMjHD.s 			page 705
+
+
+ 24528 11e4 04       		.byte	0x4
+ 24529 11e5 91       		.byte	0x91
+ 24530 11e6 B0B47F   		.sleb128 -9680
+ 24531 11e9 32       		.uleb128 0x32
+ 24532 11ea 600D0000 		.long	0xd60
+ 24533 11ee 04       		.byte	0x4
+ 24534 11ef 91       		.byte	0x91
+ 24535 11f0 C0B47F   		.sleb128 -9664
+ 24536 11f3 00       		.byte	0x0
+ 24537 11f4 31       		.uleb128 0x31
+ 24538 11f5 A00D0000 		.long	0xda0
+ 24539 11f9 00000000 		.quad	.LBB702
+ 24539      00000000 
+ 24540 1201 00000000 		.quad	.LBE702
+ 24540      00000000 
+ 24541 1209 02       		.byte	0x2
+ 24542 120a 6403     		.value	0x364
+ 24543 120c 52120000 		.long	0x1252
+ 24544 1210 32       		.uleb128 0x32
+ 24545 1211 BE0D0000 		.long	0xdbe
+ 24546 1215 04       		.byte	0x4
+ 24547 1216 91       		.byte	0x91
+ 24548 1217 D0B47F   		.sleb128 -9648
+ 24549 121a 32       		.uleb128 0x32
+ 24550 121b B20D0000 		.long	0xdb2
+ 24551 121f 04       		.byte	0x4
+ 24552 1220 91       		.byte	0x91
+ 24553 1221 E0B47F   		.sleb128 -9632
+ 24554 1224 35       		.uleb128 0x35
+ 24555 1225 CB0D0000 		.long	0xdcb
+ 24556 1229 00000000 		.quad	.LBB704
+ 24556      00000000 
+ 24557 1231 00000000 		.quad	.LBE704
+ 24557      00000000 
+ 24558 1239 02       		.byte	0x2
+ 24559 123a 7501     		.value	0x175
+ 24560 123c 32       		.uleb128 0x32
+ 24561 123d E90D0000 		.long	0xde9
+ 24562 1241 04       		.byte	0x4
+ 24563 1242 91       		.byte	0x91
+ 24564 1243 F0B47F   		.sleb128 -9616
+ 24565 1246 32       		.uleb128 0x32
+ 24566 1247 DD0D0000 		.long	0xddd
+ 24567 124b 04       		.byte	0x4
+ 24568 124c 91       		.byte	0x91
+ 24569 124d 80B57F   		.sleb128 -9600
+ 24570 1250 00       		.byte	0x0
+ 24571 1251 00       		.byte	0x0
+ 24572 1252 31       		.uleb128 0x31
+ 24573 1253 FB0D0000 		.long	0xdfb
+ 24574 1257 00000000 		.quad	.LBB706
+ 24574      00000000 
+ 24575 125f 00000000 		.quad	.LBE706
+ 24575      00000000 
+ 24576 1267 02       		.byte	0x2
+ 24577 1268 6603     		.value	0x366
+ 24578 126a 83120000 		.long	0x1283
+
GAS LISTING /tmp/ccjbMjHD.s 			page 706
+
+
+ 24579 126e 32       		.uleb128 0x32
+ 24580 126f 160E0000 		.long	0xe16
+ 24581 1273 04       		.byte	0x4
+ 24582 1274 91       		.byte	0x91
+ 24583 1275 90B57F   		.sleb128 -9584
+ 24584 1278 32       		.uleb128 0x32
+ 24585 1279 0C0E0000 		.long	0xe0c
+ 24586 127d 04       		.byte	0x4
+ 24587 127e 91       		.byte	0x91
+ 24588 127f A0B57F   		.sleb128 -9568
+ 24589 1282 00       		.byte	0x0
+ 24590 1283 31       		.uleb128 0x31
+ 24591 1284 A00D0000 		.long	0xda0
+ 24592 1288 00000000 		.quad	.LBB708
+ 24592      00000000 
+ 24593 1290 00000000 		.quad	.LBE708
+ 24593      00000000 
+ 24594 1298 02       		.byte	0x2
+ 24595 1299 6803     		.value	0x368
+ 24596 129b E1120000 		.long	0x12e1
+ 24597 129f 32       		.uleb128 0x32
+ 24598 12a0 BE0D0000 		.long	0xdbe
+ 24599 12a4 04       		.byte	0x4
+ 24600 12a5 91       		.byte	0x91
+ 24601 12a6 B0B57F   		.sleb128 -9552
+ 24602 12a9 32       		.uleb128 0x32
+ 24603 12aa B20D0000 		.long	0xdb2
+ 24604 12ae 04       		.byte	0x4
+ 24605 12af 91       		.byte	0x91
+ 24606 12b0 C0B57F   		.sleb128 -9536
+ 24607 12b3 35       		.uleb128 0x35
+ 24608 12b4 CB0D0000 		.long	0xdcb
+ 24609 12b8 00000000 		.quad	.LBB710
+ 24609      00000000 
+ 24610 12c0 00000000 		.quad	.LBE710
+ 24610      00000000 
+ 24611 12c8 02       		.byte	0x2
+ 24612 12c9 7501     		.value	0x175
+ 24613 12cb 32       		.uleb128 0x32
+ 24614 12cc E90D0000 		.long	0xde9
+ 24615 12d0 04       		.byte	0x4
+ 24616 12d1 91       		.byte	0x91
+ 24617 12d2 D0B57F   		.sleb128 -9520
+ 24618 12d5 32       		.uleb128 0x32
+ 24619 12d6 DD0D0000 		.long	0xddd
+ 24620 12da 04       		.byte	0x4
+ 24621 12db 91       		.byte	0x91
+ 24622 12dc E0B57F   		.sleb128 -9504
+ 24623 12df 00       		.byte	0x0
+ 24624 12e0 00       		.byte	0x0
+ 24625 12e1 31       		.uleb128 0x31
+ 24626 12e2 FB0D0000 		.long	0xdfb
+ 24627 12e6 00000000 		.quad	.LBB712
+ 24627      00000000 
+ 24628 12ee 00000000 		.quad	.LBE712
+ 24628      00000000 
+ 24629 12f6 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 707
+
+
+ 24630 12f7 6A03     		.value	0x36a
+ 24631 12f9 12130000 		.long	0x1312
+ 24632 12fd 32       		.uleb128 0x32
+ 24633 12fe 160E0000 		.long	0xe16
+ 24634 1302 04       		.byte	0x4
+ 24635 1303 91       		.byte	0x91
+ 24636 1304 F0B57F   		.sleb128 -9488
+ 24637 1307 32       		.uleb128 0x32
+ 24638 1308 0C0E0000 		.long	0xe0c
+ 24639 130c 04       		.byte	0x4
+ 24640 130d 91       		.byte	0x91
+ 24641 130e 80B67F   		.sleb128 -9472
+ 24642 1311 00       		.byte	0x0
+ 24643 1312 31       		.uleb128 0x31
+ 24644 1313 210E0000 		.long	0xe21
+ 24645 1317 00000000 		.quad	.LBB714
+ 24645      00000000 
+ 24646 131f 00000000 		.quad	.LBE714
+ 24646      00000000 
+ 24647 1327 02       		.byte	0x2
+ 24648 1328 6C03     		.value	0x36c
+ 24649 132a 43130000 		.long	0x1343
+ 24650 132e 32       		.uleb128 0x32
+ 24651 132f 3E0E0000 		.long	0xe3e
+ 24652 1333 04       		.byte	0x4
+ 24653 1334 91       		.byte	0x91
+ 24654 1335 90B67F   		.sleb128 -9456
+ 24655 1338 32       		.uleb128 0x32
+ 24656 1339 330E0000 		.long	0xe33
+ 24657 133d 04       		.byte	0x4
+ 24658 133e 91       		.byte	0x91
+ 24659 133f A0B67F   		.sleb128 -9440
+ 24660 1342 00       		.byte	0x0
+ 24661 1343 35       		.uleb128 0x35
+ 24662 1344 4F0D0000 		.long	0xd4f
+ 24663 1348 00000000 		.quad	.LBB716
+ 24663      00000000 
+ 24664 1350 00000000 		.quad	.LBE716
+ 24664      00000000 
+ 24665 1358 02       		.byte	0x2
+ 24666 1359 6E03     		.value	0x36e
+ 24667 135b 32       		.uleb128 0x32
+ 24668 135c 6A0D0000 		.long	0xd6a
+ 24669 1360 04       		.byte	0x4
+ 24670 1361 91       		.byte	0x91
+ 24671 1362 B0B67F   		.sleb128 -9424
+ 24672 1365 32       		.uleb128 0x32
+ 24673 1366 600D0000 		.long	0xd60
+ 24674 136a 04       		.byte	0x4
+ 24675 136b 91       		.byte	0x91
+ 24676 136c C0B67F   		.sleb128 -9408
+ 24677 136f 00       		.byte	0x0
+ 24678 1370 00       		.byte	0x0
+ 24679 1371 00       		.byte	0x0
+ 24680 1372 00       		.byte	0x0
+ 24681 1373 36       		.uleb128 0x36
+ 24682 1374 00000000 		.quad	.LBB718
+
GAS LISTING /tmp/ccjbMjHD.s 			page 708
+
+
+ 24682      00000000 
+ 24683 137c 00000000 		.quad	.LBE718
+ 24683      00000000 
+ 24684 1384 93130000 		.long	0x1393
+ 24685 1388 34       		.uleb128 0x34
+ 24686 1389 1C0C0000 		.long	0xc1c
+ 24687 138d 04       		.byte	0x4
+ 24688 138e 91       		.byte	0x91
+ 24689 138f A0AD7F   		.sleb128 -10592
+ 24690 1392 00       		.byte	0x0
+ 24691 1393 31       		.uleb128 0x31
+ 24692 1394 4A0E0000 		.long	0xe4a
+ 24693 1398 00000000 		.quad	.LBB719
+ 24693      00000000 
+ 24694 13a0 00000000 		.quad	.LBE719
+ 24694      00000000 
+ 24695 13a8 02       		.byte	0x2
+ 24696 13a9 9406     		.value	0x694
+ 24697 13ab 35140000 		.long	0x1435
+ 24698 13af 32       		.uleb128 0x32
+ 24699 13b0 5C0E0000 		.long	0xe5c
+ 24700 13b4 04       		.byte	0x4
+ 24701 13b5 91       		.byte	0x91
+ 24702 13b6 D0B67F   		.sleb128 -9392
+ 24703 13b9 33       		.uleb128 0x33
+ 24704 13ba 00000000 		.quad	.LBB720
+ 24704      00000000 
+ 24705 13c2 00000000 		.quad	.LBE720
+ 24705      00000000 
+ 24706 13ca 34       		.uleb128 0x34
+ 24707 13cb 680E0000 		.long	0xe68
+ 24708 13cf 09       		.byte	0x9
+ 24709 13d0 03       		.byte	0x3
+ 24710 13d1 00000000 		.quad	ShiftRowTable.7385
+ 24710      00000000 
+ 24711 13d9 35       		.uleb128 0x35
+ 24712 13da A00D0000 		.long	0xda0
+ 24713 13de 00000000 		.quad	.LBB721
+ 24713      00000000 
+ 24714 13e6 00000000 		.quad	.LBE721
+ 24714      00000000 
+ 24715 13ee 02       		.byte	0x2
+ 24716 13ef 9B02     		.value	0x29b
+ 24717 13f1 32       		.uleb128 0x32
+ 24718 13f2 BE0D0000 		.long	0xdbe
+ 24719 13f6 04       		.byte	0x4
+ 24720 13f7 91       		.byte	0x91
+ 24721 13f8 E0B67F   		.sleb128 -9376
+ 24722 13fb 32       		.uleb128 0x32
+ 24723 13fc B20D0000 		.long	0xdb2
+ 24724 1400 04       		.byte	0x4
+ 24725 1401 91       		.byte	0x91
+ 24726 1402 F0B67F   		.sleb128 -9360
+ 24727 1405 35       		.uleb128 0x35
+ 24728 1406 CB0D0000 		.long	0xdcb
+ 24729 140a 00000000 		.quad	.LBB723
+ 24729      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 709
+
+
+ 24730 1412 00000000 		.quad	.LBE723
+ 24730      00000000 
+ 24731 141a 02       		.byte	0x2
+ 24732 141b 7501     		.value	0x175
+ 24733 141d 32       		.uleb128 0x32
+ 24734 141e E90D0000 		.long	0xde9
+ 24735 1422 04       		.byte	0x4
+ 24736 1423 91       		.byte	0x91
+ 24737 1424 80B77F   		.sleb128 -9344
+ 24738 1427 32       		.uleb128 0x32
+ 24739 1428 DD0D0000 		.long	0xddd
+ 24740 142c 04       		.byte	0x4
+ 24741 142d 91       		.byte	0x91
+ 24742 142e 90B77F   		.sleb128 -9328
+ 24743 1431 00       		.byte	0x0
+ 24744 1432 00       		.byte	0x0
+ 24745 1433 00       		.byte	0x0
+ 24746 1434 00       		.byte	0x0
+ 24747 1435 36       		.uleb128 0x36
+ 24748 1436 00000000 		.quad	.LBB725
+ 24748      00000000 
+ 24749 143e 00000000 		.quad	.LBE725
+ 24749      00000000 
+ 24750 1446 55140000 		.long	0x1455
+ 24751 144a 34       		.uleb128 0x34
+ 24752 144b 2C0C0000 		.long	0xc2c
+ 24753 144f 04       		.byte	0x4
+ 24754 1450 91       		.byte	0x91
+ 24755 1451 90AD7F   		.sleb128 -10608
+ 24756 1454 00       		.byte	0x0
+ 24757 1455 31       		.uleb128 0x31
+ 24758 1456 860E0000 		.long	0xe86
+ 24759 145a 00000000 		.quad	.LBB726
+ 24759      00000000 
+ 24760 1462 00000000 		.quad	.LBE726
+ 24760      00000000 
+ 24761 146a 02       		.byte	0x2
+ 24762 146b 9606     		.value	0x696
+ 24763 146d 86140000 		.long	0x1486
+ 24764 1471 32       		.uleb128 0x32
+ 24765 1472 A10E0000 		.long	0xea1
+ 24766 1476 04       		.byte	0x4
+ 24767 1477 91       		.byte	0x91
+ 24768 1478 A0B77F   		.sleb128 -9312
+ 24769 147b 32       		.uleb128 0x32
+ 24770 147c 970E0000 		.long	0xe97
+ 24771 1480 04       		.byte	0x4
+ 24772 1481 91       		.byte	0x91
+ 24773 1482 B0B77F   		.sleb128 -9296
+ 24774 1485 00       		.byte	0x0
+ 24775 1486 36       		.uleb128 0x36
+ 24776 1487 00000000 		.quad	.LBB728
+ 24776      00000000 
+ 24777 148f 00000000 		.quad	.LBE728
+ 24777      00000000 
+ 24778 1497 A6140000 		.long	0x14a6
+ 24779 149b 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s 			page 710
+
+
+ 24780 149c 3C0C0000 		.long	0xc3c
+ 24781 14a0 04       		.byte	0x4
+ 24782 14a1 91       		.byte	0x91
+ 24783 14a2 80AD7F   		.sleb128 -10624
+ 24784 14a5 00       		.byte	0x0
+ 24785 14a6 31       		.uleb128 0x31
+ 24786 14a7 AC0E0000 		.long	0xeac
+ 24787 14ab 00000000 		.quad	.LBB729
+ 24787      00000000 
+ 24788 14b3 00000000 		.quad	.LBE729
+ 24788      00000000 
+ 24789 14bb 02       		.byte	0x2
+ 24790 14bc 9806     		.value	0x698
+ 24791 14be FA140000 		.long	0x14fa
+ 24792 14c2 32       		.uleb128 0x32
+ 24793 14c3 BE0E0000 		.long	0xebe
+ 24794 14c7 04       		.byte	0x4
+ 24795 14c8 91       		.byte	0x91
+ 24796 14c9 C0B77F   		.sleb128 -9280
+ 24797 14cc 35       		.uleb128 0x35
+ 24798 14cd CB0E0000 		.long	0xecb
+ 24799 14d1 00000000 		.quad	.LBB731
+ 24799      00000000 
+ 24800 14d9 00000000 		.quad	.LBE731
+ 24800      00000000 
+ 24801 14e1 02       		.byte	0x2
+ 24802 14e2 4905     		.value	0x549
+ 24803 14e4 32       		.uleb128 0x32
+ 24804 14e5 E90E0000 		.long	0xee9
+ 24805 14e9 04       		.byte	0x4
+ 24806 14ea 91       		.byte	0x91
+ 24807 14eb DCB77F   		.sleb128 -9252
+ 24808 14ee 32       		.uleb128 0x32
+ 24809 14ef DD0E0000 		.long	0xedd
+ 24810 14f3 04       		.byte	0x4
+ 24811 14f4 91       		.byte	0x91
+ 24812 14f5 E0B77F   		.sleb128 -9248
+ 24813 14f8 00       		.byte	0x0
+ 24814 14f9 00       		.byte	0x0
+ 24815 14fa 33       		.uleb128 0x33
+ 24816 14fb 00000000 		.quad	.LBB733
+ 24816      00000000 
+ 24817 1503 00000000 		.quad	.LBE733
+ 24817      00000000 
+ 24818 150b 34       		.uleb128 0x34
+ 24819 150c 480C0000 		.long	0xc48
+ 24820 1510 04       		.byte	0x4
+ 24821 1511 91       		.byte	0x91
+ 24822 1512 F0AC7F   		.sleb128 -10640
+ 24823 1515 00       		.byte	0x0
+ 24824 1516 00       		.byte	0x0
+ 24825 1517 00       		.byte	0x0
+ 24826 1518 31       		.uleb128 0x31
+ 24827 1519 F60E0000 		.long	0xef6
+ 24828 151d 00000000 		.quad	.LBB734
+ 24828      00000000 
+ 24829 1525 00000000 		.quad	.LBE734
+
GAS LISTING /tmp/ccjbMjHD.s 			page 711
+
+
+ 24829      00000000 
+ 24830 152d 02       		.byte	0x2
+ 24831 152e D006     		.value	0x6d0
+ 24832 1530 3D170000 		.long	0x173d
+ 24833 1534 32       		.uleb128 0x32
+ 24834 1535 080F0000 		.long	0xf08
+ 24835 1539 04       		.byte	0x4
+ 24836 153a 91       		.byte	0x91
+ 24837 153b F0B77F   		.sleb128 -9232
+ 24838 153e 33       		.uleb128 0x33
+ 24839 153f 00000000 		.quad	.LBB735
+ 24839      00000000 
+ 24840 1547 00000000 		.quad	.LBE735
+ 24840      00000000 
+ 24841 154f 34       		.uleb128 0x34
+ 24842 1550 140F0000 		.long	0xf14
+ 24843 1554 04       		.byte	0x4
+ 24844 1555 76       		.byte	0x76
+ 24845 1556 B0A97F   		.sleb128 -11088
+ 24846 1559 31       		.uleb128 0x31
+ 24847 155a 210F0000 		.long	0xf21
+ 24848 155e 00000000 		.quad	.LBB736
+ 24848      00000000 
+ 24849 1566 00000000 		.quad	.LBE736
+ 24849      00000000 
+ 24850 156e 02       		.byte	0x2
+ 24851 156f 1F06     		.value	0x61f
+ 24852 1571 FB150000 		.long	0x15fb
+ 24853 1575 32       		.uleb128 0x32
+ 24854 1576 330F0000 		.long	0xf33
+ 24855 157a 04       		.byte	0x4
+ 24856 157b 91       		.byte	0x91
+ 24857 157c 80B87F   		.sleb128 -9216
+ 24858 157f 33       		.uleb128 0x33
+ 24859 1580 00000000 		.quad	.LBB737
+ 24859      00000000 
+ 24860 1588 00000000 		.quad	.LBE737
+ 24860      00000000 
+ 24861 1590 34       		.uleb128 0x34
+ 24862 1591 3F0F0000 		.long	0xf3f
+ 24863 1595 09       		.byte	0x9
+ 24864 1596 03       		.byte	0x3
+ 24865 1597 00000000 		.quad	mask.7943
+ 24865      00000000 
+ 24866 159f 35       		.uleb128 0x35
+ 24867 15a0 A00D0000 		.long	0xda0
+ 24868 15a4 00000000 		.quad	.LBB738
+ 24868      00000000 
+ 24869 15ac 00000000 		.quad	.LBE738
+ 24869      00000000 
+ 24870 15b4 02       		.byte	0x2
+ 24871 15b5 FE04     		.value	0x4fe
+ 24872 15b7 32       		.uleb128 0x32
+ 24873 15b8 BE0D0000 		.long	0xdbe
+ 24874 15bc 04       		.byte	0x4
+ 24875 15bd 91       		.byte	0x91
+ 24876 15be 90B87F   		.sleb128 -9200
+
GAS LISTING /tmp/ccjbMjHD.s 			page 712
+
+
+ 24877 15c1 32       		.uleb128 0x32
+ 24878 15c2 B20D0000 		.long	0xdb2
+ 24879 15c6 04       		.byte	0x4
+ 24880 15c7 91       		.byte	0x91
+ 24881 15c8 A0B87F   		.sleb128 -9184
+ 24882 15cb 35       		.uleb128 0x35
+ 24883 15cc CB0D0000 		.long	0xdcb
+ 24884 15d0 00000000 		.quad	.LBB740
+ 24884      00000000 
+ 24885 15d8 00000000 		.quad	.LBE740
+ 24885      00000000 
+ 24886 15e0 02       		.byte	0x2
+ 24887 15e1 7501     		.value	0x175
+ 24888 15e3 32       		.uleb128 0x32
+ 24889 15e4 E90D0000 		.long	0xde9
+ 24890 15e8 04       		.byte	0x4
+ 24891 15e9 91       		.byte	0x91
+ 24892 15ea B0B87F   		.sleb128 -9168
+ 24893 15ed 32       		.uleb128 0x32
+ 24894 15ee DD0D0000 		.long	0xddd
+ 24895 15f2 04       		.byte	0x4
+ 24896 15f3 91       		.byte	0x91
+ 24897 15f4 C0B87F   		.sleb128 -9152
+ 24898 15f7 00       		.byte	0x0
+ 24899 15f8 00       		.byte	0x0
+ 24900 15f9 00       		.byte	0x0
+ 24901 15fa 00       		.byte	0x0
+ 24902 15fb 31       		.uleb128 0x31
+ 24903 15fc 210F0000 		.long	0xf21
+ 24904 1600 00000000 		.quad	.LBB742
+ 24904      00000000 
+ 24905 1608 00000000 		.quad	.LBE742
+ 24905      00000000 
+ 24906 1610 02       		.byte	0x2
+ 24907 1611 2006     		.value	0x620
+ 24908 1613 9D160000 		.long	0x169d
+ 24909 1617 32       		.uleb128 0x32
+ 24910 1618 330F0000 		.long	0xf33
+ 24911 161c 04       		.byte	0x4
+ 24912 161d 91       		.byte	0x91
+ 24913 161e D0B87F   		.sleb128 -9136
+ 24914 1621 33       		.uleb128 0x33
+ 24915 1622 00000000 		.quad	.LBB743
+ 24915      00000000 
+ 24916 162a 00000000 		.quad	.LBE743
+ 24916      00000000 
+ 24917 1632 34       		.uleb128 0x34
+ 24918 1633 3F0F0000 		.long	0xf3f
+ 24919 1637 09       		.byte	0x9
+ 24920 1638 03       		.byte	0x3
+ 24921 1639 00000000 		.quad	mask.7943
+ 24921      00000000 
+ 24922 1641 35       		.uleb128 0x35
+ 24923 1642 A00D0000 		.long	0xda0
+ 24924 1646 00000000 		.quad	.LBB744
+ 24924      00000000 
+ 24925 164e 00000000 		.quad	.LBE744
+
GAS LISTING /tmp/ccjbMjHD.s 			page 713
+
+
+ 24925      00000000 
+ 24926 1656 02       		.byte	0x2
+ 24927 1657 FE04     		.value	0x4fe
+ 24928 1659 32       		.uleb128 0x32
+ 24929 165a BE0D0000 		.long	0xdbe
+ 24930 165e 04       		.byte	0x4
+ 24931 165f 91       		.byte	0x91
+ 24932 1660 E0B87F   		.sleb128 -9120
+ 24933 1663 32       		.uleb128 0x32
+ 24934 1664 B20D0000 		.long	0xdb2
+ 24935 1668 04       		.byte	0x4
+ 24936 1669 91       		.byte	0x91
+ 24937 166a F0B87F   		.sleb128 -9104
+ 24938 166d 35       		.uleb128 0x35
+ 24939 166e CB0D0000 		.long	0xdcb
+ 24940 1672 00000000 		.quad	.LBB746
+ 24940      00000000 
+ 24941 167a 00000000 		.quad	.LBE746
+ 24941      00000000 
+ 24942 1682 02       		.byte	0x2
+ 24943 1683 7501     		.value	0x175
+ 24944 1685 32       		.uleb128 0x32
+ 24945 1686 E90D0000 		.long	0xde9
+ 24946 168a 04       		.byte	0x4
+ 24947 168b 91       		.byte	0x91
+ 24948 168c 80B97F   		.sleb128 -9088
+ 24949 168f 32       		.uleb128 0x32
+ 24950 1690 DD0D0000 		.long	0xddd
+ 24951 1694 04       		.byte	0x4
+ 24952 1695 91       		.byte	0x91
+ 24953 1696 90B97F   		.sleb128 -9072
+ 24954 1699 00       		.byte	0x0
+ 24955 169a 00       		.byte	0x0
+ 24956 169b 00       		.byte	0x0
+ 24957 169c 00       		.byte	0x0
+ 24958 169d 35       		.uleb128 0x35
+ 24959 169e 210F0000 		.long	0xf21
+ 24960 16a2 00000000 		.quad	.LBB748
+ 24960      00000000 
+ 24961 16aa 00000000 		.quad	.LBE748
+ 24961      00000000 
+ 24962 16b2 02       		.byte	0x2
+ 24963 16b3 2106     		.value	0x621
+ 24964 16b5 32       		.uleb128 0x32
+ 24965 16b6 330F0000 		.long	0xf33
+ 24966 16ba 04       		.byte	0x4
+ 24967 16bb 91       		.byte	0x91
+ 24968 16bc A0B97F   		.sleb128 -9056
+ 24969 16bf 33       		.uleb128 0x33
+ 24970 16c0 00000000 		.quad	.LBB749
+ 24970      00000000 
+ 24971 16c8 00000000 		.quad	.LBE749
+ 24971      00000000 
+ 24972 16d0 34       		.uleb128 0x34
+ 24973 16d1 3F0F0000 		.long	0xf3f
+ 24974 16d5 09       		.byte	0x9
+ 24975 16d6 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 714
+
+
+ 24976 16d7 00000000 		.quad	mask.7943
+ 24976      00000000 
+ 24977 16df 35       		.uleb128 0x35
+ 24978 16e0 A00D0000 		.long	0xda0
+ 24979 16e4 00000000 		.quad	.LBB750
+ 24979      00000000 
+ 24980 16ec 00000000 		.quad	.LBE750
+ 24980      00000000 
+ 24981 16f4 02       		.byte	0x2
+ 24982 16f5 FE04     		.value	0x4fe
+ 24983 16f7 32       		.uleb128 0x32
+ 24984 16f8 BE0D0000 		.long	0xdbe
+ 24985 16fc 04       		.byte	0x4
+ 24986 16fd 91       		.byte	0x91
+ 24987 16fe B0B97F   		.sleb128 -9040
+ 24988 1701 32       		.uleb128 0x32
+ 24989 1702 B20D0000 		.long	0xdb2
+ 24990 1706 04       		.byte	0x4
+ 24991 1707 91       		.byte	0x91
+ 24992 1708 C0B97F   		.sleb128 -9024
+ 24993 170b 35       		.uleb128 0x35
+ 24994 170c CB0D0000 		.long	0xdcb
+ 24995 1710 00000000 		.quad	.LBB752
+ 24995      00000000 
+ 24996 1718 00000000 		.quad	.LBE752
+ 24996      00000000 
+ 24997 1720 02       		.byte	0x2
+ 24998 1721 7501     		.value	0x175
+ 24999 1723 32       		.uleb128 0x32
+ 25000 1724 E90D0000 		.long	0xde9
+ 25001 1728 04       		.byte	0x4
+ 25002 1729 91       		.byte	0x91
+ 25003 172a D0B97F   		.sleb128 -9008
+ 25004 172d 32       		.uleb128 0x32
+ 25005 172e DD0D0000 		.long	0xddd
+ 25006 1732 04       		.byte	0x4
+ 25007 1733 91       		.byte	0x91
+ 25008 1734 E0B97F   		.sleb128 -8992
+ 25009 1737 00       		.byte	0x0
+ 25010 1738 00       		.byte	0x0
+ 25011 1739 00       		.byte	0x0
+ 25012 173a 00       		.byte	0x0
+ 25013 173b 00       		.byte	0x0
+ 25014 173c 00       		.byte	0x0
+ 25015 173d 31       		.uleb128 0x31
+ 25016 173e D50B0000 		.long	0xbd5
+ 25017 1742 00000000 		.quad	.LBB754
+ 25017      00000000 
+ 25018 174a 00000000 		.quad	.LBE754
+ 25018      00000000 
+ 25019 1752 02       		.byte	0x2
+ 25020 1753 D106     		.value	0x6d1
+ 25021 1755 501C0000 		.long	0x1c50
+ 25022 1759 32       		.uleb128 0x32
+ 25023 175a F30B0000 		.long	0xbf3
+ 25024 175e 04       		.byte	0x4
+ 25025 175f 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 715
+
+
+ 25026 1760 FCB97F   		.sleb128 -8964
+ 25027 1763 32       		.uleb128 0x32
+ 25028 1764 E70B0000 		.long	0xbe7
+ 25029 1768 04       		.byte	0x4
+ 25030 1769 91       		.byte	0x91
+ 25031 176a 80BA7F   		.sleb128 -8960
+ 25032 176d 33       		.uleb128 0x33
+ 25033 176e 00000000 		.quad	.LBB755
+ 25033      00000000 
+ 25034 1776 00000000 		.quad	.LBE755
+ 25034      00000000 
+ 25035 177e 34       		.uleb128 0x34
+ 25036 177f FF0B0000 		.long	0xbff
+ 25037 1783 04       		.byte	0x4
+ 25038 1784 76       		.byte	0x76
+ 25039 1785 D0A97F   		.sleb128 -11056
+ 25040 1788 34       		.uleb128 0x34
+ 25041 1789 0B0C0000 		.long	0xc0b
+ 25042 178d 04       		.byte	0x4
+ 25043 178e 76       		.byte	0x76
+ 25044 178f C0A97F   		.sleb128 -11072
+ 25045 1792 31       		.uleb128 0x31
+ 25046 1793 540C0000 		.long	0xc54
+ 25047 1797 00000000 		.quad	.LBB756
+ 25047      00000000 
+ 25048 179f 00000000 		.quad	.LBE756
+ 25048      00000000 
+ 25049 17a7 02       		.byte	0x2
+ 25050 17a8 9106     		.value	0x691
+ 25051 17aa 04180000 		.long	0x1804
+ 25052 17ae 32       		.uleb128 0x32
+ 25053 17af 7E0C0000 		.long	0xc7e
+ 25054 17b3 04       		.byte	0x4
+ 25055 17b4 91       		.byte	0x91
+ 25056 17b5 98BA7F   		.sleb128 -8936
+ 25057 17b8 32       		.uleb128 0x32
+ 25058 17b9 720C0000 		.long	0xc72
+ 25059 17bd 04       		.byte	0x4
+ 25060 17be 91       		.byte	0x91
+ 25061 17bf 9CBA7F   		.sleb128 -8932
+ 25062 17c2 32       		.uleb128 0x32
+ 25063 17c3 660C0000 		.long	0xc66
+ 25064 17c7 04       		.byte	0x4
+ 25065 17c8 91       		.byte	0x91
+ 25066 17c9 A0BA7F   		.sleb128 -8928
+ 25067 17cc 35       		.uleb128 0x35
+ 25068 17cd 8B0C0000 		.long	0xc8b
+ 25069 17d1 00000000 		.quad	.LBB758
+ 25069      00000000 
+ 25070 17d9 00000000 		.quad	.LBE758
+ 25070      00000000 
+ 25071 17e1 02       		.byte	0x2
+ 25072 17e2 0702     		.value	0x207
+ 25073 17e4 32       		.uleb128 0x32
+ 25074 17e5 B40C0000 		.long	0xcb4
+ 25075 17e9 04       		.byte	0x4
+ 25076 17ea 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 716
+
+
+ 25077 17eb B8BA7F   		.sleb128 -8904
+ 25078 17ee 32       		.uleb128 0x32
+ 25079 17ef A90C0000 		.long	0xca9
+ 25080 17f3 04       		.byte	0x4
+ 25081 17f4 91       		.byte	0x91
+ 25082 17f5 BCBA7F   		.sleb128 -8900
+ 25083 17f8 32       		.uleb128 0x32
+ 25084 17f9 9D0C0000 		.long	0xc9d
+ 25085 17fd 04       		.byte	0x4
+ 25086 17fe 91       		.byte	0x91
+ 25087 17ff C0BA7F   		.sleb128 -8896
+ 25088 1802 00       		.byte	0x0
+ 25089 1803 00       		.byte	0x0
+ 25090 1804 31       		.uleb128 0x31
+ 25091 1805 C10C0000 		.long	0xcc1
+ 25092 1809 00000000 		.quad	.LBB760
+ 25092      00000000 
+ 25093 1811 00000000 		.quad	.LBE760
+ 25093      00000000 
+ 25094 1819 02       		.byte	0x2
+ 25095 181a 9206     		.value	0x692
+ 25096 181c AB1A0000 		.long	0x1aab
+ 25097 1820 32       		.uleb128 0x32
+ 25098 1821 D30C0000 		.long	0xcd3
+ 25099 1825 04       		.byte	0x4
+ 25100 1826 91       		.byte	0x91
+ 25101 1827 D0BA7F   		.sleb128 -8880
+ 25102 182a 35       		.uleb128 0x35
+ 25103 182b E00C0000 		.long	0xce0
+ 25104 182f 00000000 		.quad	.LBB762
+ 25104      00000000 
+ 25105 1837 00000000 		.quad	.LBE762
+ 25105      00000000 
+ 25106 183f 02       		.byte	0x2
+ 25107 1840 7D03     		.value	0x37d
+ 25108 1842 32       		.uleb128 0x32
+ 25109 1843 FE0C0000 		.long	0xcfe
+ 25110 1847 04       		.byte	0x4
+ 25111 1848 91       		.byte	0x91
+ 25112 1849 E8BA7F   		.sleb128 -8856
+ 25113 184c 32       		.uleb128 0x32
+ 25114 184d F20C0000 		.long	0xcf2
+ 25115 1851 04       		.byte	0x4
+ 25116 1852 91       		.byte	0x91
+ 25117 1853 F0BA7F   		.sleb128 -8848
+ 25118 1856 33       		.uleb128 0x33
+ 25119 1857 00000000 		.quad	.LBB763
+ 25119      00000000 
+ 25120 185f 00000000 		.quad	.LBE763
+ 25120      00000000 
+ 25121 1867 34       		.uleb128 0x34
+ 25122 1868 0A0D0000 		.long	0xd0a
+ 25123 186c 04       		.byte	0x4
+ 25124 186d 91       		.byte	0x91
+ 25125 186e C0BB7F   		.sleb128 -8768
+ 25126 1871 34       		.uleb128 0x34
+ 25127 1872 150D0000 		.long	0xd15
+
GAS LISTING /tmp/ccjbMjHD.s 			page 717
+
+
+ 25128 1876 04       		.byte	0x4
+ 25129 1877 91       		.byte	0x91
+ 25130 1878 B0BB7F   		.sleb128 -8784
+ 25131 187b 34       		.uleb128 0x34
+ 25132 187c 200D0000 		.long	0xd20
+ 25133 1880 04       		.byte	0x4
+ 25134 1881 91       		.byte	0x91
+ 25135 1882 A0BB7F   		.sleb128 -8800
+ 25136 1885 34       		.uleb128 0x34
+ 25137 1886 2C0D0000 		.long	0xd2c
+ 25138 188a 04       		.byte	0x4
+ 25139 188b 91       		.byte	0x91
+ 25140 188c 90BB7F   		.sleb128 -8816
+ 25141 188f 34       		.uleb128 0x34
+ 25142 1890 380D0000 		.long	0xd38
+ 25143 1894 04       		.byte	0x4
+ 25144 1895 91       		.byte	0x91
+ 25145 1896 8CBB7F   		.sleb128 -8820
+ 25146 1899 31       		.uleb128 0x31
+ 25147 189a 4F0D0000 		.long	0xd4f
+ 25148 189e 00000000 		.quad	.LBB764
+ 25148      00000000 
+ 25149 18a6 00000000 		.quad	.LBE764
+ 25149      00000000 
+ 25150 18ae 02       		.byte	0x2
+ 25151 18af 5603     		.value	0x356
+ 25152 18b1 CA180000 		.long	0x18ca
+ 25153 18b5 32       		.uleb128 0x32
+ 25154 18b6 6A0D0000 		.long	0xd6a
+ 25155 18ba 04       		.byte	0x4
+ 25156 18bb 91       		.byte	0x91
+ 25157 18bc D0BB7F   		.sleb128 -8752
+ 25158 18bf 32       		.uleb128 0x32
+ 25159 18c0 600D0000 		.long	0xd60
+ 25160 18c4 04       		.byte	0x4
+ 25161 18c5 91       		.byte	0x91
+ 25162 18c6 E0BB7F   		.sleb128 -8736
+ 25163 18c9 00       		.byte	0x0
+ 25164 18ca 31       		.uleb128 0x31
+ 25165 18cb 750D0000 		.long	0xd75
+ 25166 18cf 00000000 		.quad	.LBB766
+ 25166      00000000 
+ 25167 18d7 00000000 		.quad	.LBE766
+ 25167      00000000 
+ 25168 18df 02       		.byte	0x2
+ 25169 18e0 5903     		.value	0x359
+ 25170 18e2 FB180000 		.long	0x18fb
+ 25171 18e6 32       		.uleb128 0x32
+ 25172 18e7 930D0000 		.long	0xd93
+ 25173 18eb 04       		.byte	0x4
+ 25174 18ec 91       		.byte	0x91
+ 25175 18ed FCBB7F   		.sleb128 -8708
+ 25176 18f0 32       		.uleb128 0x32
+ 25177 18f1 870D0000 		.long	0xd87
+ 25178 18f5 04       		.byte	0x4
+ 25179 18f6 91       		.byte	0x91
+ 25180 18f7 80BC7F   		.sleb128 -8704
+
GAS LISTING /tmp/ccjbMjHD.s 			page 718
+
+
+ 25181 18fa 00       		.byte	0x0
+ 25182 18fb 31       		.uleb128 0x31
+ 25183 18fc 4F0D0000 		.long	0xd4f
+ 25184 1900 00000000 		.quad	.LBB768
+ 25184      00000000 
+ 25185 1908 00000000 		.quad	.LBE768
+ 25185      00000000 
+ 25186 1910 02       		.byte	0x2
+ 25187 1911 5B03     		.value	0x35b
+ 25188 1913 2C190000 		.long	0x192c
+ 25189 1917 32       		.uleb128 0x32
+ 25190 1918 6A0D0000 		.long	0xd6a
+ 25191 191c 04       		.byte	0x4
+ 25192 191d 91       		.byte	0x91
+ 25193 191e 90BC7F   		.sleb128 -8688
+ 25194 1921 32       		.uleb128 0x32
+ 25195 1922 600D0000 		.long	0xd60
+ 25196 1926 04       		.byte	0x4
+ 25197 1927 91       		.byte	0x91
+ 25198 1928 A0BC7F   		.sleb128 -8672
+ 25199 192b 00       		.byte	0x0
+ 25200 192c 31       		.uleb128 0x31
+ 25201 192d A00D0000 		.long	0xda0
+ 25202 1931 00000000 		.quad	.LBB770
+ 25202      00000000 
+ 25203 1939 00000000 		.quad	.LBE770
+ 25203      00000000 
+ 25204 1941 02       		.byte	0x2
+ 25205 1942 6403     		.value	0x364
+ 25206 1944 8A190000 		.long	0x198a
+ 25207 1948 32       		.uleb128 0x32
+ 25208 1949 BE0D0000 		.long	0xdbe
+ 25209 194d 04       		.byte	0x4
+ 25210 194e 91       		.byte	0x91
+ 25211 194f B0BC7F   		.sleb128 -8656
+ 25212 1952 32       		.uleb128 0x32
+ 25213 1953 B20D0000 		.long	0xdb2
+ 25214 1957 04       		.byte	0x4
+ 25215 1958 91       		.byte	0x91
+ 25216 1959 C0BC7F   		.sleb128 -8640
+ 25217 195c 35       		.uleb128 0x35
+ 25218 195d CB0D0000 		.long	0xdcb
+ 25219 1961 00000000 		.quad	.LBB772
+ 25219      00000000 
+ 25220 1969 00000000 		.quad	.LBE772
+ 25220      00000000 
+ 25221 1971 02       		.byte	0x2
+ 25222 1972 7501     		.value	0x175
+ 25223 1974 32       		.uleb128 0x32
+ 25224 1975 E90D0000 		.long	0xde9
+ 25225 1979 04       		.byte	0x4
+ 25226 197a 91       		.byte	0x91
+ 25227 197b D0BC7F   		.sleb128 -8624
+ 25228 197e 32       		.uleb128 0x32
+ 25229 197f DD0D0000 		.long	0xddd
+ 25230 1983 04       		.byte	0x4
+ 25231 1984 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 719
+
+
+ 25232 1985 E0BC7F   		.sleb128 -8608
+ 25233 1988 00       		.byte	0x0
+ 25234 1989 00       		.byte	0x0
+ 25235 198a 31       		.uleb128 0x31
+ 25236 198b FB0D0000 		.long	0xdfb
+ 25237 198f 00000000 		.quad	.LBB774
+ 25237      00000000 
+ 25238 1997 00000000 		.quad	.LBE774
+ 25238      00000000 
+ 25239 199f 02       		.byte	0x2
+ 25240 19a0 6603     		.value	0x366
+ 25241 19a2 BB190000 		.long	0x19bb
+ 25242 19a6 32       		.uleb128 0x32
+ 25243 19a7 160E0000 		.long	0xe16
+ 25244 19ab 04       		.byte	0x4
+ 25245 19ac 91       		.byte	0x91
+ 25246 19ad F0BC7F   		.sleb128 -8592
+ 25247 19b0 32       		.uleb128 0x32
+ 25248 19b1 0C0E0000 		.long	0xe0c
+ 25249 19b5 04       		.byte	0x4
+ 25250 19b6 91       		.byte	0x91
+ 25251 19b7 80BD7F   		.sleb128 -8576
+ 25252 19ba 00       		.byte	0x0
+ 25253 19bb 31       		.uleb128 0x31
+ 25254 19bc A00D0000 		.long	0xda0
+ 25255 19c0 00000000 		.quad	.LBB776
+ 25255      00000000 
+ 25256 19c8 00000000 		.quad	.LBE776
+ 25256      00000000 
+ 25257 19d0 02       		.byte	0x2
+ 25258 19d1 6803     		.value	0x368
+ 25259 19d3 191A0000 		.long	0x1a19
+ 25260 19d7 32       		.uleb128 0x32
+ 25261 19d8 BE0D0000 		.long	0xdbe
+ 25262 19dc 04       		.byte	0x4
+ 25263 19dd 91       		.byte	0x91
+ 25264 19de 90BD7F   		.sleb128 -8560
+ 25265 19e1 32       		.uleb128 0x32
+ 25266 19e2 B20D0000 		.long	0xdb2
+ 25267 19e6 04       		.byte	0x4
+ 25268 19e7 91       		.byte	0x91
+ 25269 19e8 A0BD7F   		.sleb128 -8544
+ 25270 19eb 35       		.uleb128 0x35
+ 25271 19ec CB0D0000 		.long	0xdcb
+ 25272 19f0 00000000 		.quad	.LBB778
+ 25272      00000000 
+ 25273 19f8 00000000 		.quad	.LBE778
+ 25273      00000000 
+ 25274 1a00 02       		.byte	0x2
+ 25275 1a01 7501     		.value	0x175
+ 25276 1a03 32       		.uleb128 0x32
+ 25277 1a04 E90D0000 		.long	0xde9
+ 25278 1a08 04       		.byte	0x4
+ 25279 1a09 91       		.byte	0x91
+ 25280 1a0a B0BD7F   		.sleb128 -8528
+ 25281 1a0d 32       		.uleb128 0x32
+ 25282 1a0e DD0D0000 		.long	0xddd
+
GAS LISTING /tmp/ccjbMjHD.s 			page 720
+
+
+ 25283 1a12 04       		.byte	0x4
+ 25284 1a13 91       		.byte	0x91
+ 25285 1a14 C0BD7F   		.sleb128 -8512
+ 25286 1a17 00       		.byte	0x0
+ 25287 1a18 00       		.byte	0x0
+ 25288 1a19 31       		.uleb128 0x31
+ 25289 1a1a FB0D0000 		.long	0xdfb
+ 25290 1a1e 00000000 		.quad	.LBB780
+ 25290      00000000 
+ 25291 1a26 00000000 		.quad	.LBE780
+ 25291      00000000 
+ 25292 1a2e 02       		.byte	0x2
+ 25293 1a2f 6A03     		.value	0x36a
+ 25294 1a31 4A1A0000 		.long	0x1a4a
+ 25295 1a35 32       		.uleb128 0x32
+ 25296 1a36 160E0000 		.long	0xe16
+ 25297 1a3a 04       		.byte	0x4
+ 25298 1a3b 91       		.byte	0x91
+ 25299 1a3c D0BD7F   		.sleb128 -8496
+ 25300 1a3f 32       		.uleb128 0x32
+ 25301 1a40 0C0E0000 		.long	0xe0c
+ 25302 1a44 04       		.byte	0x4
+ 25303 1a45 91       		.byte	0x91
+ 25304 1a46 E0BD7F   		.sleb128 -8480
+ 25305 1a49 00       		.byte	0x0
+ 25306 1a4a 31       		.uleb128 0x31
+ 25307 1a4b 210E0000 		.long	0xe21
+ 25308 1a4f 00000000 		.quad	.LBB782
+ 25308      00000000 
+ 25309 1a57 00000000 		.quad	.LBE782
+ 25309      00000000 
+ 25310 1a5f 02       		.byte	0x2
+ 25311 1a60 6C03     		.value	0x36c
+ 25312 1a62 7B1A0000 		.long	0x1a7b
+ 25313 1a66 32       		.uleb128 0x32
+ 25314 1a67 3E0E0000 		.long	0xe3e
+ 25315 1a6b 04       		.byte	0x4
+ 25316 1a6c 91       		.byte	0x91
+ 25317 1a6d F0BD7F   		.sleb128 -8464
+ 25318 1a70 32       		.uleb128 0x32
+ 25319 1a71 330E0000 		.long	0xe33
+ 25320 1a75 04       		.byte	0x4
+ 25321 1a76 91       		.byte	0x91
+ 25322 1a77 80BE7F   		.sleb128 -8448
+ 25323 1a7a 00       		.byte	0x0
+ 25324 1a7b 35       		.uleb128 0x35
+ 25325 1a7c 4F0D0000 		.long	0xd4f
+ 25326 1a80 00000000 		.quad	.LBB784
+ 25326      00000000 
+ 25327 1a88 00000000 		.quad	.LBE784
+ 25327      00000000 
+ 25328 1a90 02       		.byte	0x2
+ 25329 1a91 6E03     		.value	0x36e
+ 25330 1a93 32       		.uleb128 0x32
+ 25331 1a94 6A0D0000 		.long	0xd6a
+ 25332 1a98 04       		.byte	0x4
+ 25333 1a99 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 721
+
+
+ 25334 1a9a 90BE7F   		.sleb128 -8432
+ 25335 1a9d 32       		.uleb128 0x32
+ 25336 1a9e 600D0000 		.long	0xd60
+ 25337 1aa2 04       		.byte	0x4
+ 25338 1aa3 91       		.byte	0x91
+ 25339 1aa4 A0BE7F   		.sleb128 -8416
+ 25340 1aa7 00       		.byte	0x0
+ 25341 1aa8 00       		.byte	0x0
+ 25342 1aa9 00       		.byte	0x0
+ 25343 1aaa 00       		.byte	0x0
+ 25344 1aab 36       		.uleb128 0x36
+ 25345 1aac 00000000 		.quad	.LBB786
+ 25345      00000000 
+ 25346 1ab4 00000000 		.quad	.LBE786
+ 25346      00000000 
+ 25347 1abc CB1A0000 		.long	0x1acb
+ 25348 1ac0 34       		.uleb128 0x34
+ 25349 1ac1 1C0C0000 		.long	0xc1c
+ 25350 1ac5 04       		.byte	0x4
+ 25351 1ac6 91       		.byte	0x91
+ 25352 1ac7 E0AD7F   		.sleb128 -10528
+ 25353 1aca 00       		.byte	0x0
+ 25354 1acb 31       		.uleb128 0x31
+ 25355 1acc 4A0E0000 		.long	0xe4a
+ 25356 1ad0 00000000 		.quad	.LBB787
+ 25356      00000000 
+ 25357 1ad8 00000000 		.quad	.LBE787
+ 25357      00000000 
+ 25358 1ae0 02       		.byte	0x2
+ 25359 1ae1 9406     		.value	0x694
+ 25360 1ae3 6D1B0000 		.long	0x1b6d
+ 25361 1ae7 32       		.uleb128 0x32
+ 25362 1ae8 5C0E0000 		.long	0xe5c
+ 25363 1aec 04       		.byte	0x4
+ 25364 1aed 91       		.byte	0x91
+ 25365 1aee B0BE7F   		.sleb128 -8400
+ 25366 1af1 33       		.uleb128 0x33
+ 25367 1af2 00000000 		.quad	.LBB788
+ 25367      00000000 
+ 25368 1afa 00000000 		.quad	.LBE788
+ 25368      00000000 
+ 25369 1b02 34       		.uleb128 0x34
+ 25370 1b03 680E0000 		.long	0xe68
+ 25371 1b07 09       		.byte	0x9
+ 25372 1b08 03       		.byte	0x3
+ 25373 1b09 00000000 		.quad	ShiftRowTable.7385
+ 25373      00000000 
+ 25374 1b11 35       		.uleb128 0x35
+ 25375 1b12 A00D0000 		.long	0xda0
+ 25376 1b16 00000000 		.quad	.LBB789
+ 25376      00000000 
+ 25377 1b1e 00000000 		.quad	.LBE789
+ 25377      00000000 
+ 25378 1b26 02       		.byte	0x2
+ 25379 1b27 9B02     		.value	0x29b
+ 25380 1b29 32       		.uleb128 0x32
+ 25381 1b2a BE0D0000 		.long	0xdbe
+
GAS LISTING /tmp/ccjbMjHD.s 			page 722
+
+
+ 25382 1b2e 04       		.byte	0x4
+ 25383 1b2f 91       		.byte	0x91
+ 25384 1b30 C0BE7F   		.sleb128 -8384
+ 25385 1b33 32       		.uleb128 0x32
+ 25386 1b34 B20D0000 		.long	0xdb2
+ 25387 1b38 04       		.byte	0x4
+ 25388 1b39 91       		.byte	0x91
+ 25389 1b3a D0BE7F   		.sleb128 -8368
+ 25390 1b3d 35       		.uleb128 0x35
+ 25391 1b3e CB0D0000 		.long	0xdcb
+ 25392 1b42 00000000 		.quad	.LBB791
+ 25392      00000000 
+ 25393 1b4a 00000000 		.quad	.LBE791
+ 25393      00000000 
+ 25394 1b52 02       		.byte	0x2
+ 25395 1b53 7501     		.value	0x175
+ 25396 1b55 32       		.uleb128 0x32
+ 25397 1b56 E90D0000 		.long	0xde9
+ 25398 1b5a 04       		.byte	0x4
+ 25399 1b5b 91       		.byte	0x91
+ 25400 1b5c E0BE7F   		.sleb128 -8352
+ 25401 1b5f 32       		.uleb128 0x32
+ 25402 1b60 DD0D0000 		.long	0xddd
+ 25403 1b64 04       		.byte	0x4
+ 25404 1b65 91       		.byte	0x91
+ 25405 1b66 F0BE7F   		.sleb128 -8336
+ 25406 1b69 00       		.byte	0x0
+ 25407 1b6a 00       		.byte	0x0
+ 25408 1b6b 00       		.byte	0x0
+ 25409 1b6c 00       		.byte	0x0
+ 25410 1b6d 36       		.uleb128 0x36
+ 25411 1b6e 00000000 		.quad	.LBB793
+ 25411      00000000 
+ 25412 1b76 00000000 		.quad	.LBE793
+ 25412      00000000 
+ 25413 1b7e 8D1B0000 		.long	0x1b8d
+ 25414 1b82 34       		.uleb128 0x34
+ 25415 1b83 2C0C0000 		.long	0xc2c
+ 25416 1b87 04       		.byte	0x4
+ 25417 1b88 91       		.byte	0x91
+ 25418 1b89 D0AD7F   		.sleb128 -10544
+ 25419 1b8c 00       		.byte	0x0
+ 25420 1b8d 31       		.uleb128 0x31
+ 25421 1b8e 860E0000 		.long	0xe86
+ 25422 1b92 00000000 		.quad	.LBB794
+ 25422      00000000 
+ 25423 1b9a 00000000 		.quad	.LBE794
+ 25423      00000000 
+ 25424 1ba2 02       		.byte	0x2
+ 25425 1ba3 9606     		.value	0x696
+ 25426 1ba5 BE1B0000 		.long	0x1bbe
+ 25427 1ba9 32       		.uleb128 0x32
+ 25428 1baa A10E0000 		.long	0xea1
+ 25429 1bae 04       		.byte	0x4
+ 25430 1baf 91       		.byte	0x91
+ 25431 1bb0 80BF7F   		.sleb128 -8320
+ 25432 1bb3 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 723
+
+
+ 25433 1bb4 970E0000 		.long	0xe97
+ 25434 1bb8 04       		.byte	0x4
+ 25435 1bb9 91       		.byte	0x91
+ 25436 1bba 90BF7F   		.sleb128 -8304
+ 25437 1bbd 00       		.byte	0x0
+ 25438 1bbe 36       		.uleb128 0x36
+ 25439 1bbf 00000000 		.quad	.LBB796
+ 25439      00000000 
+ 25440 1bc7 00000000 		.quad	.LBE796
+ 25440      00000000 
+ 25441 1bcf DE1B0000 		.long	0x1bde
+ 25442 1bd3 34       		.uleb128 0x34
+ 25443 1bd4 3C0C0000 		.long	0xc3c
+ 25444 1bd8 04       		.byte	0x4
+ 25445 1bd9 91       		.byte	0x91
+ 25446 1bda C0AD7F   		.sleb128 -10560
+ 25447 1bdd 00       		.byte	0x0
+ 25448 1bde 31       		.uleb128 0x31
+ 25449 1bdf AC0E0000 		.long	0xeac
+ 25450 1be3 00000000 		.quad	.LBB797
+ 25450      00000000 
+ 25451 1beb 00000000 		.quad	.LBE797
+ 25451      00000000 
+ 25452 1bf3 02       		.byte	0x2
+ 25453 1bf4 9806     		.value	0x698
+ 25454 1bf6 321C0000 		.long	0x1c32
+ 25455 1bfa 32       		.uleb128 0x32
+ 25456 1bfb BE0E0000 		.long	0xebe
+ 25457 1bff 04       		.byte	0x4
+ 25458 1c00 91       		.byte	0x91
+ 25459 1c01 A0BF7F   		.sleb128 -8288
+ 25460 1c04 35       		.uleb128 0x35
+ 25461 1c05 CB0E0000 		.long	0xecb
+ 25462 1c09 00000000 		.quad	.LBB799
+ 25462      00000000 
+ 25463 1c11 00000000 		.quad	.LBE799
+ 25463      00000000 
+ 25464 1c19 02       		.byte	0x2
+ 25465 1c1a 4905     		.value	0x549
+ 25466 1c1c 32       		.uleb128 0x32
+ 25467 1c1d E90E0000 		.long	0xee9
+ 25468 1c21 04       		.byte	0x4
+ 25469 1c22 91       		.byte	0x91
+ 25470 1c23 BCBF7F   		.sleb128 -8260
+ 25471 1c26 32       		.uleb128 0x32
+ 25472 1c27 DD0E0000 		.long	0xedd
+ 25473 1c2b 04       		.byte	0x4
+ 25474 1c2c 91       		.byte	0x91
+ 25475 1c2d C0BF7F   		.sleb128 -8256
+ 25476 1c30 00       		.byte	0x0
+ 25477 1c31 00       		.byte	0x0
+ 25478 1c32 33       		.uleb128 0x33
+ 25479 1c33 00000000 		.quad	.LBB801
+ 25479      00000000 
+ 25480 1c3b 00000000 		.quad	.LBE801
+ 25480      00000000 
+ 25481 1c43 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s 			page 724
+
+
+ 25482 1c44 480C0000 		.long	0xc48
+ 25483 1c48 04       		.byte	0x4
+ 25484 1c49 91       		.byte	0x91
+ 25485 1c4a B0AD7F   		.sleb128 -10576
+ 25486 1c4d 00       		.byte	0x0
+ 25487 1c4e 00       		.byte	0x0
+ 25488 1c4f 00       		.byte	0x0
+ 25489 1c50 31       		.uleb128 0x31
+ 25490 1c51 F60E0000 		.long	0xef6
+ 25491 1c55 00000000 		.quad	.LBB802
+ 25491      00000000 
+ 25492 1c5d 00000000 		.quad	.LBE802
+ 25492      00000000 
+ 25493 1c65 02       		.byte	0x2
+ 25494 1c66 D106     		.value	0x6d1
+ 25495 1c68 681E0000 		.long	0x1e68
+ 25496 1c6c 32       		.uleb128 0x32
+ 25497 1c6d 080F0000 		.long	0xf08
+ 25498 1c71 04       		.byte	0x4
+ 25499 1c72 91       		.byte	0x91
+ 25500 1c73 D0BF7F   		.sleb128 -8240
+ 25501 1c76 33       		.uleb128 0x33
+ 25502 1c77 00000000 		.quad	.LBB803
+ 25502      00000000 
+ 25503 1c7f 00000000 		.quad	.LBE803
+ 25503      00000000 
+ 25504 1c87 34       		.uleb128 0x34
+ 25505 1c88 140F0000 		.long	0xf14
+ 25506 1c8c 04       		.byte	0x4
+ 25507 1c8d 76       		.byte	0x76
+ 25508 1c8e E0A97F   		.sleb128 -11040
+ 25509 1c91 31       		.uleb128 0x31
+ 25510 1c92 210F0000 		.long	0xf21
+ 25511 1c96 00000000 		.quad	.LBB804
+ 25511      00000000 
+ 25512 1c9e 00000000 		.quad	.LBE804
+ 25512      00000000 
+ 25513 1ca6 02       		.byte	0x2
+ 25514 1ca7 1F06     		.value	0x61f
+ 25515 1ca9 301D0000 		.long	0x1d30
+ 25516 1cad 32       		.uleb128 0x32
+ 25517 1cae 330F0000 		.long	0xf33
+ 25518 1cb2 04       		.byte	0x4
+ 25519 1cb3 91       		.byte	0x91
+ 25520 1cb4 E0BF7F   		.sleb128 -8224
+ 25521 1cb7 33       		.uleb128 0x33
+ 25522 1cb8 00000000 		.quad	.LBB805
+ 25522      00000000 
+ 25523 1cc0 00000000 		.quad	.LBE805
+ 25523      00000000 
+ 25524 1cc8 34       		.uleb128 0x34
+ 25525 1cc9 3F0F0000 		.long	0xf3f
+ 25526 1ccd 09       		.byte	0x9
+ 25527 1cce 03       		.byte	0x3
+ 25528 1ccf 00000000 		.quad	mask.7943
+ 25528      00000000 
+ 25529 1cd7 35       		.uleb128 0x35
+
GAS LISTING /tmp/ccjbMjHD.s 			page 725
+
+
+ 25530 1cd8 A00D0000 		.long	0xda0
+ 25531 1cdc 00000000 		.quad	.LBB806
+ 25531      00000000 
+ 25532 1ce4 00000000 		.quad	.LBE806
+ 25532      00000000 
+ 25533 1cec 02       		.byte	0x2
+ 25534 1ced FE04     		.value	0x4fe
+ 25535 1cef 32       		.uleb128 0x32
+ 25536 1cf0 BE0D0000 		.long	0xdbe
+ 25537 1cf4 04       		.byte	0x4
+ 25538 1cf5 91       		.byte	0x91
+ 25539 1cf6 F0BF7F   		.sleb128 -8208
+ 25540 1cf9 32       		.uleb128 0x32
+ 25541 1cfa B20D0000 		.long	0xdb2
+ 25542 1cfe 03       		.byte	0x3
+ 25543 1cff 91       		.byte	0x91
+ 25544 1d00 8040     		.sleb128 -8192
+ 25545 1d02 35       		.uleb128 0x35
+ 25546 1d03 CB0D0000 		.long	0xdcb
+ 25547 1d07 00000000 		.quad	.LBB808
+ 25547      00000000 
+ 25548 1d0f 00000000 		.quad	.LBE808
+ 25548      00000000 
+ 25549 1d17 02       		.byte	0x2
+ 25550 1d18 7501     		.value	0x175
+ 25551 1d1a 32       		.uleb128 0x32
+ 25552 1d1b E90D0000 		.long	0xde9
+ 25553 1d1f 03       		.byte	0x3
+ 25554 1d20 91       		.byte	0x91
+ 25555 1d21 9040     		.sleb128 -8176
+ 25556 1d23 32       		.uleb128 0x32
+ 25557 1d24 DD0D0000 		.long	0xddd
+ 25558 1d28 03       		.byte	0x3
+ 25559 1d29 91       		.byte	0x91
+ 25560 1d2a A040     		.sleb128 -8160
+ 25561 1d2c 00       		.byte	0x0
+ 25562 1d2d 00       		.byte	0x0
+ 25563 1d2e 00       		.byte	0x0
+ 25564 1d2f 00       		.byte	0x0
+ 25565 1d30 31       		.uleb128 0x31
+ 25566 1d31 210F0000 		.long	0xf21
+ 25567 1d35 00000000 		.quad	.LBB810
+ 25567      00000000 
+ 25568 1d3d 00000000 		.quad	.LBE810
+ 25568      00000000 
+ 25569 1d45 02       		.byte	0x2
+ 25570 1d46 2006     		.value	0x620
+ 25571 1d48 CD1D0000 		.long	0x1dcd
+ 25572 1d4c 32       		.uleb128 0x32
+ 25573 1d4d 330F0000 		.long	0xf33
+ 25574 1d51 03       		.byte	0x3
+ 25575 1d52 91       		.byte	0x91
+ 25576 1d53 B040     		.sleb128 -8144
+ 25577 1d55 33       		.uleb128 0x33
+ 25578 1d56 00000000 		.quad	.LBB811
+ 25578      00000000 
+ 25579 1d5e 00000000 		.quad	.LBE811
+
GAS LISTING /tmp/ccjbMjHD.s 			page 726
+
+
+ 25579      00000000 
+ 25580 1d66 34       		.uleb128 0x34
+ 25581 1d67 3F0F0000 		.long	0xf3f
+ 25582 1d6b 09       		.byte	0x9
+ 25583 1d6c 03       		.byte	0x3
+ 25584 1d6d 00000000 		.quad	mask.7943
+ 25584      00000000 
+ 25585 1d75 35       		.uleb128 0x35
+ 25586 1d76 A00D0000 		.long	0xda0
+ 25587 1d7a 00000000 		.quad	.LBB812
+ 25587      00000000 
+ 25588 1d82 00000000 		.quad	.LBE812
+ 25588      00000000 
+ 25589 1d8a 02       		.byte	0x2
+ 25590 1d8b FE04     		.value	0x4fe
+ 25591 1d8d 32       		.uleb128 0x32
+ 25592 1d8e BE0D0000 		.long	0xdbe
+ 25593 1d92 03       		.byte	0x3
+ 25594 1d93 91       		.byte	0x91
+ 25595 1d94 C040     		.sleb128 -8128
+ 25596 1d96 32       		.uleb128 0x32
+ 25597 1d97 B20D0000 		.long	0xdb2
+ 25598 1d9b 03       		.byte	0x3
+ 25599 1d9c 91       		.byte	0x91
+ 25600 1d9d D040     		.sleb128 -8112
+ 25601 1d9f 35       		.uleb128 0x35
+ 25602 1da0 CB0D0000 		.long	0xdcb
+ 25603 1da4 00000000 		.quad	.LBB814
+ 25603      00000000 
+ 25604 1dac 00000000 		.quad	.LBE814
+ 25604      00000000 
+ 25605 1db4 02       		.byte	0x2
+ 25606 1db5 7501     		.value	0x175
+ 25607 1db7 32       		.uleb128 0x32
+ 25608 1db8 E90D0000 		.long	0xde9
+ 25609 1dbc 03       		.byte	0x3
+ 25610 1dbd 91       		.byte	0x91
+ 25611 1dbe E040     		.sleb128 -8096
+ 25612 1dc0 32       		.uleb128 0x32
+ 25613 1dc1 DD0D0000 		.long	0xddd
+ 25614 1dc5 03       		.byte	0x3
+ 25615 1dc6 91       		.byte	0x91
+ 25616 1dc7 F040     		.sleb128 -8080
+ 25617 1dc9 00       		.byte	0x0
+ 25618 1dca 00       		.byte	0x0
+ 25619 1dcb 00       		.byte	0x0
+ 25620 1dcc 00       		.byte	0x0
+ 25621 1dcd 35       		.uleb128 0x35
+ 25622 1dce 210F0000 		.long	0xf21
+ 25623 1dd2 00000000 		.quad	.LBB816
+ 25623      00000000 
+ 25624 1dda 00000000 		.quad	.LBE816
+ 25624      00000000 
+ 25625 1de2 02       		.byte	0x2
+ 25626 1de3 2106     		.value	0x621
+ 25627 1de5 32       		.uleb128 0x32
+ 25628 1de6 330F0000 		.long	0xf33
+
GAS LISTING /tmp/ccjbMjHD.s 			page 727
+
+
+ 25629 1dea 03       		.byte	0x3
+ 25630 1deb 91       		.byte	0x91
+ 25631 1dec 8041     		.sleb128 -8064
+ 25632 1dee 33       		.uleb128 0x33
+ 25633 1def 00000000 		.quad	.LBB817
+ 25633      00000000 
+ 25634 1df7 00000000 		.quad	.LBE817
+ 25634      00000000 
+ 25635 1dff 34       		.uleb128 0x34
+ 25636 1e00 3F0F0000 		.long	0xf3f
+ 25637 1e04 09       		.byte	0x9
+ 25638 1e05 03       		.byte	0x3
+ 25639 1e06 00000000 		.quad	mask.7943
+ 25639      00000000 
+ 25640 1e0e 35       		.uleb128 0x35
+ 25641 1e0f A00D0000 		.long	0xda0
+ 25642 1e13 00000000 		.quad	.LBB818
+ 25642      00000000 
+ 25643 1e1b 00000000 		.quad	.LBE818
+ 25643      00000000 
+ 25644 1e23 02       		.byte	0x2
+ 25645 1e24 FE04     		.value	0x4fe
+ 25646 1e26 32       		.uleb128 0x32
+ 25647 1e27 BE0D0000 		.long	0xdbe
+ 25648 1e2b 03       		.byte	0x3
+ 25649 1e2c 91       		.byte	0x91
+ 25650 1e2d 9041     		.sleb128 -8048
+ 25651 1e2f 32       		.uleb128 0x32
+ 25652 1e30 B20D0000 		.long	0xdb2
+ 25653 1e34 03       		.byte	0x3
+ 25654 1e35 91       		.byte	0x91
+ 25655 1e36 A041     		.sleb128 -8032
+ 25656 1e38 35       		.uleb128 0x35
+ 25657 1e39 CB0D0000 		.long	0xdcb
+ 25658 1e3d 00000000 		.quad	.LBB820
+ 25658      00000000 
+ 25659 1e45 00000000 		.quad	.LBE820
+ 25659      00000000 
+ 25660 1e4d 02       		.byte	0x2
+ 25661 1e4e 7501     		.value	0x175
+ 25662 1e50 32       		.uleb128 0x32
+ 25663 1e51 E90D0000 		.long	0xde9
+ 25664 1e55 03       		.byte	0x3
+ 25665 1e56 91       		.byte	0x91
+ 25666 1e57 B041     		.sleb128 -8016
+ 25667 1e59 32       		.uleb128 0x32
+ 25668 1e5a DD0D0000 		.long	0xddd
+ 25669 1e5e 03       		.byte	0x3
+ 25670 1e5f 91       		.byte	0x91
+ 25671 1e60 C041     		.sleb128 -8000
+ 25672 1e62 00       		.byte	0x0
+ 25673 1e63 00       		.byte	0x0
+ 25674 1e64 00       		.byte	0x0
+ 25675 1e65 00       		.byte	0x0
+ 25676 1e66 00       		.byte	0x0
+ 25677 1e67 00       		.byte	0x0
+ 25678 1e68 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s 			page 728
+
+
+ 25679 1e69 D50B0000 		.long	0xbd5
+ 25680 1e6d 00000000 		.quad	.LBB822
+ 25680      00000000 
+ 25681 1e75 00000000 		.quad	.LBE822
+ 25681      00000000 
+ 25682 1e7d 02       		.byte	0x2
+ 25683 1e7e D206     		.value	0x6d2
+ 25684 1e80 4B230000 		.long	0x234b
+ 25685 1e84 32       		.uleb128 0x32
+ 25686 1e85 F30B0000 		.long	0xbf3
+ 25687 1e89 03       		.byte	0x3
+ 25688 1e8a 91       		.byte	0x91
+ 25689 1e8b DC41     		.sleb128 -7972
+ 25690 1e8d 32       		.uleb128 0x32
+ 25691 1e8e E70B0000 		.long	0xbe7
+ 25692 1e92 03       		.byte	0x3
+ 25693 1e93 91       		.byte	0x91
+ 25694 1e94 E041     		.sleb128 -7968
+ 25695 1e96 33       		.uleb128 0x33
+ 25696 1e97 00000000 		.quad	.LBB823
+ 25696      00000000 
+ 25697 1e9f 00000000 		.quad	.LBE823
+ 25697      00000000 
+ 25698 1ea7 34       		.uleb128 0x34
+ 25699 1ea8 FF0B0000 		.long	0xbff
+ 25700 1eac 04       		.byte	0x4
+ 25701 1ead 76       		.byte	0x76
+ 25702 1eae 80AA7F   		.sleb128 -11008
+ 25703 1eb1 34       		.uleb128 0x34
+ 25704 1eb2 0B0C0000 		.long	0xc0b
+ 25705 1eb6 04       		.byte	0x4
+ 25706 1eb7 76       		.byte	0x76
+ 25707 1eb8 F0A97F   		.sleb128 -11024
+ 25708 1ebb 31       		.uleb128 0x31
+ 25709 1ebc 540C0000 		.long	0xc54
+ 25710 1ec0 00000000 		.quad	.LBB824
+ 25710      00000000 
+ 25711 1ec8 00000000 		.quad	.LBE824
+ 25711      00000000 
+ 25712 1ed0 02       		.byte	0x2
+ 25713 1ed1 9106     		.value	0x691
+ 25714 1ed3 271F0000 		.long	0x1f27
+ 25715 1ed7 32       		.uleb128 0x32
+ 25716 1ed8 7E0C0000 		.long	0xc7e
+ 25717 1edc 03       		.byte	0x3
+ 25718 1edd 91       		.byte	0x91
+ 25719 1ede F841     		.sleb128 -7944
+ 25720 1ee0 32       		.uleb128 0x32
+ 25721 1ee1 720C0000 		.long	0xc72
+ 25722 1ee5 03       		.byte	0x3
+ 25723 1ee6 91       		.byte	0x91
+ 25724 1ee7 FC41     		.sleb128 -7940
+ 25725 1ee9 32       		.uleb128 0x32
+ 25726 1eea 660C0000 		.long	0xc66
+ 25727 1eee 03       		.byte	0x3
+ 25728 1eef 91       		.byte	0x91
+ 25729 1ef0 8042     		.sleb128 -7936
+
GAS LISTING /tmp/ccjbMjHD.s 			page 729
+
+
+ 25730 1ef2 35       		.uleb128 0x35
+ 25731 1ef3 8B0C0000 		.long	0xc8b
+ 25732 1ef7 00000000 		.quad	.LBB826
+ 25732      00000000 
+ 25733 1eff 00000000 		.quad	.LBE826
+ 25733      00000000 
+ 25734 1f07 02       		.byte	0x2
+ 25735 1f08 0702     		.value	0x207
+ 25736 1f0a 32       		.uleb128 0x32
+ 25737 1f0b B40C0000 		.long	0xcb4
+ 25738 1f0f 03       		.byte	0x3
+ 25739 1f10 91       		.byte	0x91
+ 25740 1f11 9842     		.sleb128 -7912
+ 25741 1f13 32       		.uleb128 0x32
+ 25742 1f14 A90C0000 		.long	0xca9
+ 25743 1f18 03       		.byte	0x3
+ 25744 1f19 91       		.byte	0x91
+ 25745 1f1a 9C42     		.sleb128 -7908
+ 25746 1f1c 32       		.uleb128 0x32
+ 25747 1f1d 9D0C0000 		.long	0xc9d
+ 25748 1f21 03       		.byte	0x3
+ 25749 1f22 91       		.byte	0x91
+ 25750 1f23 A042     		.sleb128 -7904
+ 25751 1f25 00       		.byte	0x0
+ 25752 1f26 00       		.byte	0x0
+ 25753 1f27 31       		.uleb128 0x31
+ 25754 1f28 C10C0000 		.long	0xcc1
+ 25755 1f2c 00000000 		.quad	.LBB828
+ 25755      00000000 
+ 25756 1f34 00000000 		.quad	.LBE828
+ 25756      00000000 
+ 25757 1f3c 02       		.byte	0x2
+ 25758 1f3d 9206     		.value	0x692
+ 25759 1f3f B0210000 		.long	0x21b0
+ 25760 1f43 32       		.uleb128 0x32
+ 25761 1f44 D30C0000 		.long	0xcd3
+ 25762 1f48 03       		.byte	0x3
+ 25763 1f49 91       		.byte	0x91
+ 25764 1f4a B042     		.sleb128 -7888
+ 25765 1f4c 35       		.uleb128 0x35
+ 25766 1f4d E00C0000 		.long	0xce0
+ 25767 1f51 00000000 		.quad	.LBB830
+ 25767      00000000 
+ 25768 1f59 00000000 		.quad	.LBE830
+ 25768      00000000 
+ 25769 1f61 02       		.byte	0x2
+ 25770 1f62 7D03     		.value	0x37d
+ 25771 1f64 32       		.uleb128 0x32
+ 25772 1f65 FE0C0000 		.long	0xcfe
+ 25773 1f69 03       		.byte	0x3
+ 25774 1f6a 91       		.byte	0x91
+ 25775 1f6b C842     		.sleb128 -7864
+ 25776 1f6d 32       		.uleb128 0x32
+ 25777 1f6e F20C0000 		.long	0xcf2
+ 25778 1f72 03       		.byte	0x3
+ 25779 1f73 91       		.byte	0x91
+ 25780 1f74 D042     		.sleb128 -7856
+
GAS LISTING /tmp/ccjbMjHD.s 			page 730
+
+
+ 25781 1f76 33       		.uleb128 0x33
+ 25782 1f77 00000000 		.quad	.LBB831
+ 25782      00000000 
+ 25783 1f7f 00000000 		.quad	.LBE831
+ 25783      00000000 
+ 25784 1f87 34       		.uleb128 0x34
+ 25785 1f88 0A0D0000 		.long	0xd0a
+ 25786 1f8c 03       		.byte	0x3
+ 25787 1f8d 91       		.byte	0x91
+ 25788 1f8e A043     		.sleb128 -7776
+ 25789 1f90 34       		.uleb128 0x34
+ 25790 1f91 150D0000 		.long	0xd15
+ 25791 1f95 03       		.byte	0x3
+ 25792 1f96 91       		.byte	0x91
+ 25793 1f97 9043     		.sleb128 -7792
+ 25794 1f99 34       		.uleb128 0x34
+ 25795 1f9a 200D0000 		.long	0xd20
+ 25796 1f9e 03       		.byte	0x3
+ 25797 1f9f 91       		.byte	0x91
+ 25798 1fa0 8043     		.sleb128 -7808
+ 25799 1fa2 34       		.uleb128 0x34
+ 25800 1fa3 2C0D0000 		.long	0xd2c
+ 25801 1fa7 03       		.byte	0x3
+ 25802 1fa8 91       		.byte	0x91
+ 25803 1fa9 F042     		.sleb128 -7824
+ 25804 1fab 34       		.uleb128 0x34
+ 25805 1fac 380D0000 		.long	0xd38
+ 25806 1fb0 03       		.byte	0x3
+ 25807 1fb1 91       		.byte	0x91
+ 25808 1fb2 EC42     		.sleb128 -7828
+ 25809 1fb4 31       		.uleb128 0x31
+ 25810 1fb5 4F0D0000 		.long	0xd4f
+ 25811 1fb9 00000000 		.quad	.LBB832
+ 25811      00000000 
+ 25812 1fc1 00000000 		.quad	.LBE832
+ 25812      00000000 
+ 25813 1fc9 02       		.byte	0x2
+ 25814 1fca 5603     		.value	0x356
+ 25815 1fcc E31F0000 		.long	0x1fe3
+ 25816 1fd0 32       		.uleb128 0x32
+ 25817 1fd1 6A0D0000 		.long	0xd6a
+ 25818 1fd5 03       		.byte	0x3
+ 25819 1fd6 91       		.byte	0x91
+ 25820 1fd7 B043     		.sleb128 -7760
+ 25821 1fd9 32       		.uleb128 0x32
+ 25822 1fda 600D0000 		.long	0xd60
+ 25823 1fde 03       		.byte	0x3
+ 25824 1fdf 91       		.byte	0x91
+ 25825 1fe0 C043     		.sleb128 -7744
+ 25826 1fe2 00       		.byte	0x0
+ 25827 1fe3 31       		.uleb128 0x31
+ 25828 1fe4 750D0000 		.long	0xd75
+ 25829 1fe8 00000000 		.quad	.LBB834
+ 25829      00000000 
+ 25830 1ff0 00000000 		.quad	.LBE834
+ 25830      00000000 
+ 25831 1ff8 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 731
+
+
+ 25832 1ff9 5903     		.value	0x359
+ 25833 1ffb 12200000 		.long	0x2012
+ 25834 1fff 32       		.uleb128 0x32
+ 25835 2000 930D0000 		.long	0xd93
+ 25836 2004 03       		.byte	0x3
+ 25837 2005 91       		.byte	0x91
+ 25838 2006 DC43     		.sleb128 -7716
+ 25839 2008 32       		.uleb128 0x32
+ 25840 2009 870D0000 		.long	0xd87
+ 25841 200d 03       		.byte	0x3
+ 25842 200e 91       		.byte	0x91
+ 25843 200f E043     		.sleb128 -7712
+ 25844 2011 00       		.byte	0x0
+ 25845 2012 31       		.uleb128 0x31
+ 25846 2013 4F0D0000 		.long	0xd4f
+ 25847 2017 00000000 		.quad	.LBB836
+ 25847      00000000 
+ 25848 201f 00000000 		.quad	.LBE836
+ 25848      00000000 
+ 25849 2027 02       		.byte	0x2
+ 25850 2028 5B03     		.value	0x35b
+ 25851 202a 41200000 		.long	0x2041
+ 25852 202e 32       		.uleb128 0x32
+ 25853 202f 6A0D0000 		.long	0xd6a
+ 25854 2033 03       		.byte	0x3
+ 25855 2034 91       		.byte	0x91
+ 25856 2035 F043     		.sleb128 -7696
+ 25857 2037 32       		.uleb128 0x32
+ 25858 2038 600D0000 		.long	0xd60
+ 25859 203c 03       		.byte	0x3
+ 25860 203d 91       		.byte	0x91
+ 25861 203e 8044     		.sleb128 -7680
+ 25862 2040 00       		.byte	0x0
+ 25863 2041 31       		.uleb128 0x31
+ 25864 2042 A00D0000 		.long	0xda0
+ 25865 2046 00000000 		.quad	.LBB838
+ 25865      00000000 
+ 25866 204e 00000000 		.quad	.LBE838
+ 25866      00000000 
+ 25867 2056 02       		.byte	0x2
+ 25868 2057 6403     		.value	0x364
+ 25869 2059 9B200000 		.long	0x209b
+ 25870 205d 32       		.uleb128 0x32
+ 25871 205e BE0D0000 		.long	0xdbe
+ 25872 2062 03       		.byte	0x3
+ 25873 2063 91       		.byte	0x91
+ 25874 2064 9044     		.sleb128 -7664
+ 25875 2066 32       		.uleb128 0x32
+ 25876 2067 B20D0000 		.long	0xdb2
+ 25877 206b 03       		.byte	0x3
+ 25878 206c 91       		.byte	0x91
+ 25879 206d A044     		.sleb128 -7648
+ 25880 206f 35       		.uleb128 0x35
+ 25881 2070 CB0D0000 		.long	0xdcb
+ 25882 2074 00000000 		.quad	.LBB840
+ 25882      00000000 
+ 25883 207c 00000000 		.quad	.LBE840
+
GAS LISTING /tmp/ccjbMjHD.s 			page 732
+
+
+ 25883      00000000 
+ 25884 2084 02       		.byte	0x2
+ 25885 2085 7501     		.value	0x175
+ 25886 2087 32       		.uleb128 0x32
+ 25887 2088 E90D0000 		.long	0xde9
+ 25888 208c 03       		.byte	0x3
+ 25889 208d 91       		.byte	0x91
+ 25890 208e B044     		.sleb128 -7632
+ 25891 2090 32       		.uleb128 0x32
+ 25892 2091 DD0D0000 		.long	0xddd
+ 25893 2095 03       		.byte	0x3
+ 25894 2096 91       		.byte	0x91
+ 25895 2097 C044     		.sleb128 -7616
+ 25896 2099 00       		.byte	0x0
+ 25897 209a 00       		.byte	0x0
+ 25898 209b 31       		.uleb128 0x31
+ 25899 209c FB0D0000 		.long	0xdfb
+ 25900 20a0 00000000 		.quad	.LBB842
+ 25900      00000000 
+ 25901 20a8 00000000 		.quad	.LBE842
+ 25901      00000000 
+ 25902 20b0 02       		.byte	0x2
+ 25903 20b1 6603     		.value	0x366
+ 25904 20b3 CA200000 		.long	0x20ca
+ 25905 20b7 32       		.uleb128 0x32
+ 25906 20b8 160E0000 		.long	0xe16
+ 25907 20bc 03       		.byte	0x3
+ 25908 20bd 91       		.byte	0x91
+ 25909 20be D044     		.sleb128 -7600
+ 25910 20c0 32       		.uleb128 0x32
+ 25911 20c1 0C0E0000 		.long	0xe0c
+ 25912 20c5 03       		.byte	0x3
+ 25913 20c6 91       		.byte	0x91
+ 25914 20c7 E044     		.sleb128 -7584
+ 25915 20c9 00       		.byte	0x0
+ 25916 20ca 31       		.uleb128 0x31
+ 25917 20cb A00D0000 		.long	0xda0
+ 25918 20cf 00000000 		.quad	.LBB844
+ 25918      00000000 
+ 25919 20d7 00000000 		.quad	.LBE844
+ 25919      00000000 
+ 25920 20df 02       		.byte	0x2
+ 25921 20e0 6803     		.value	0x368
+ 25922 20e2 24210000 		.long	0x2124
+ 25923 20e6 32       		.uleb128 0x32
+ 25924 20e7 BE0D0000 		.long	0xdbe
+ 25925 20eb 03       		.byte	0x3
+ 25926 20ec 91       		.byte	0x91
+ 25927 20ed F044     		.sleb128 -7568
+ 25928 20ef 32       		.uleb128 0x32
+ 25929 20f0 B20D0000 		.long	0xdb2
+ 25930 20f4 03       		.byte	0x3
+ 25931 20f5 91       		.byte	0x91
+ 25932 20f6 8045     		.sleb128 -7552
+ 25933 20f8 35       		.uleb128 0x35
+ 25934 20f9 CB0D0000 		.long	0xdcb
+ 25935 20fd 00000000 		.quad	.LBB846
+
GAS LISTING /tmp/ccjbMjHD.s 			page 733
+
+
+ 25935      00000000 
+ 25936 2105 00000000 		.quad	.LBE846
+ 25936      00000000 
+ 25937 210d 02       		.byte	0x2
+ 25938 210e 7501     		.value	0x175
+ 25939 2110 32       		.uleb128 0x32
+ 25940 2111 E90D0000 		.long	0xde9
+ 25941 2115 03       		.byte	0x3
+ 25942 2116 91       		.byte	0x91
+ 25943 2117 9045     		.sleb128 -7536
+ 25944 2119 32       		.uleb128 0x32
+ 25945 211a DD0D0000 		.long	0xddd
+ 25946 211e 03       		.byte	0x3
+ 25947 211f 91       		.byte	0x91
+ 25948 2120 A045     		.sleb128 -7520
+ 25949 2122 00       		.byte	0x0
+ 25950 2123 00       		.byte	0x0
+ 25951 2124 31       		.uleb128 0x31
+ 25952 2125 FB0D0000 		.long	0xdfb
+ 25953 2129 00000000 		.quad	.LBB848
+ 25953      00000000 
+ 25954 2131 00000000 		.quad	.LBE848
+ 25954      00000000 
+ 25955 2139 02       		.byte	0x2
+ 25956 213a 6A03     		.value	0x36a
+ 25957 213c 53210000 		.long	0x2153
+ 25958 2140 32       		.uleb128 0x32
+ 25959 2141 160E0000 		.long	0xe16
+ 25960 2145 03       		.byte	0x3
+ 25961 2146 91       		.byte	0x91
+ 25962 2147 B045     		.sleb128 -7504
+ 25963 2149 32       		.uleb128 0x32
+ 25964 214a 0C0E0000 		.long	0xe0c
+ 25965 214e 03       		.byte	0x3
+ 25966 214f 91       		.byte	0x91
+ 25967 2150 C045     		.sleb128 -7488
+ 25968 2152 00       		.byte	0x0
+ 25969 2153 31       		.uleb128 0x31
+ 25970 2154 210E0000 		.long	0xe21
+ 25971 2158 00000000 		.quad	.LBB850
+ 25971      00000000 
+ 25972 2160 00000000 		.quad	.LBE850
+ 25972      00000000 
+ 25973 2168 02       		.byte	0x2
+ 25974 2169 6C03     		.value	0x36c
+ 25975 216b 82210000 		.long	0x2182
+ 25976 216f 32       		.uleb128 0x32
+ 25977 2170 3E0E0000 		.long	0xe3e
+ 25978 2174 03       		.byte	0x3
+ 25979 2175 91       		.byte	0x91
+ 25980 2176 D045     		.sleb128 -7472
+ 25981 2178 32       		.uleb128 0x32
+ 25982 2179 330E0000 		.long	0xe33
+ 25983 217d 03       		.byte	0x3
+ 25984 217e 91       		.byte	0x91
+ 25985 217f E045     		.sleb128 -7456
+ 25986 2181 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 734
+
+
+ 25987 2182 35       		.uleb128 0x35
+ 25988 2183 4F0D0000 		.long	0xd4f
+ 25989 2187 00000000 		.quad	.LBB852
+ 25989      00000000 
+ 25990 218f 00000000 		.quad	.LBE852
+ 25990      00000000 
+ 25991 2197 02       		.byte	0x2
+ 25992 2198 6E03     		.value	0x36e
+ 25993 219a 32       		.uleb128 0x32
+ 25994 219b 6A0D0000 		.long	0xd6a
+ 25995 219f 03       		.byte	0x3
+ 25996 21a0 91       		.byte	0x91
+ 25997 21a1 F045     		.sleb128 -7440
+ 25998 21a3 32       		.uleb128 0x32
+ 25999 21a4 600D0000 		.long	0xd60
+ 26000 21a8 03       		.byte	0x3
+ 26001 21a9 91       		.byte	0x91
+ 26002 21aa 8046     		.sleb128 -7424
+ 26003 21ac 00       		.byte	0x0
+ 26004 21ad 00       		.byte	0x0
+ 26005 21ae 00       		.byte	0x0
+ 26006 21af 00       		.byte	0x0
+ 26007 21b0 36       		.uleb128 0x36
+ 26008 21b1 00000000 		.quad	.LBB854
+ 26008      00000000 
+ 26009 21b9 00000000 		.quad	.LBE854
+ 26009      00000000 
+ 26010 21c1 D0210000 		.long	0x21d0
+ 26011 21c5 34       		.uleb128 0x34
+ 26012 21c6 1C0C0000 		.long	0xc1c
+ 26013 21ca 04       		.byte	0x4
+ 26014 21cb 91       		.byte	0x91
+ 26015 21cc A0AE7F   		.sleb128 -10464
+ 26016 21cf 00       		.byte	0x0
+ 26017 21d0 31       		.uleb128 0x31
+ 26018 21d1 4A0E0000 		.long	0xe4a
+ 26019 21d5 00000000 		.quad	.LBB855
+ 26019      00000000 
+ 26020 21dd 00000000 		.quad	.LBE855
+ 26020      00000000 
+ 26021 21e5 02       		.byte	0x2
+ 26022 21e6 9406     		.value	0x694
+ 26023 21e8 6D220000 		.long	0x226d
+ 26024 21ec 32       		.uleb128 0x32
+ 26025 21ed 5C0E0000 		.long	0xe5c
+ 26026 21f1 03       		.byte	0x3
+ 26027 21f2 91       		.byte	0x91
+ 26028 21f3 9046     		.sleb128 -7408
+ 26029 21f5 33       		.uleb128 0x33
+ 26030 21f6 00000000 		.quad	.LBB856
+ 26030      00000000 
+ 26031 21fe 00000000 		.quad	.LBE856
+ 26031      00000000 
+ 26032 2206 34       		.uleb128 0x34
+ 26033 2207 680E0000 		.long	0xe68
+ 26034 220b 09       		.byte	0x9
+ 26035 220c 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 735
+
+
+ 26036 220d 00000000 		.quad	ShiftRowTable.7385
+ 26036      00000000 
+ 26037 2215 35       		.uleb128 0x35
+ 26038 2216 A00D0000 		.long	0xda0
+ 26039 221a 00000000 		.quad	.LBB857
+ 26039      00000000 
+ 26040 2222 00000000 		.quad	.LBE857
+ 26040      00000000 
+ 26041 222a 02       		.byte	0x2
+ 26042 222b 9B02     		.value	0x29b
+ 26043 222d 32       		.uleb128 0x32
+ 26044 222e BE0D0000 		.long	0xdbe
+ 26045 2232 03       		.byte	0x3
+ 26046 2233 91       		.byte	0x91
+ 26047 2234 A046     		.sleb128 -7392
+ 26048 2236 32       		.uleb128 0x32
+ 26049 2237 B20D0000 		.long	0xdb2
+ 26050 223b 03       		.byte	0x3
+ 26051 223c 91       		.byte	0x91
+ 26052 223d B046     		.sleb128 -7376
+ 26053 223f 35       		.uleb128 0x35
+ 26054 2240 CB0D0000 		.long	0xdcb
+ 26055 2244 00000000 		.quad	.LBB859
+ 26055      00000000 
+ 26056 224c 00000000 		.quad	.LBE859
+ 26056      00000000 
+ 26057 2254 02       		.byte	0x2
+ 26058 2255 7501     		.value	0x175
+ 26059 2257 32       		.uleb128 0x32
+ 26060 2258 E90D0000 		.long	0xde9
+ 26061 225c 03       		.byte	0x3
+ 26062 225d 91       		.byte	0x91
+ 26063 225e C046     		.sleb128 -7360
+ 26064 2260 32       		.uleb128 0x32
+ 26065 2261 DD0D0000 		.long	0xddd
+ 26066 2265 03       		.byte	0x3
+ 26067 2266 91       		.byte	0x91
+ 26068 2267 D046     		.sleb128 -7344
+ 26069 2269 00       		.byte	0x0
+ 26070 226a 00       		.byte	0x0
+ 26071 226b 00       		.byte	0x0
+ 26072 226c 00       		.byte	0x0
+ 26073 226d 36       		.uleb128 0x36
+ 26074 226e 00000000 		.quad	.LBB861
+ 26074      00000000 
+ 26075 2276 00000000 		.quad	.LBE861
+ 26075      00000000 
+ 26076 227e 8D220000 		.long	0x228d
+ 26077 2282 34       		.uleb128 0x34
+ 26078 2283 2C0C0000 		.long	0xc2c
+ 26079 2287 04       		.byte	0x4
+ 26080 2288 91       		.byte	0x91
+ 26081 2289 90AE7F   		.sleb128 -10480
+ 26082 228c 00       		.byte	0x0
+ 26083 228d 31       		.uleb128 0x31
+ 26084 228e 860E0000 		.long	0xe86
+ 26085 2292 00000000 		.quad	.LBB862
+
GAS LISTING /tmp/ccjbMjHD.s 			page 736
+
+
+ 26085      00000000 
+ 26086 229a 00000000 		.quad	.LBE862
+ 26086      00000000 
+ 26087 22a2 02       		.byte	0x2
+ 26088 22a3 9606     		.value	0x696
+ 26089 22a5 BC220000 		.long	0x22bc
+ 26090 22a9 32       		.uleb128 0x32
+ 26091 22aa A10E0000 		.long	0xea1
+ 26092 22ae 03       		.byte	0x3
+ 26093 22af 91       		.byte	0x91
+ 26094 22b0 E046     		.sleb128 -7328
+ 26095 22b2 32       		.uleb128 0x32
+ 26096 22b3 970E0000 		.long	0xe97
+ 26097 22b7 03       		.byte	0x3
+ 26098 22b8 91       		.byte	0x91
+ 26099 22b9 F046     		.sleb128 -7312
+ 26100 22bb 00       		.byte	0x0
+ 26101 22bc 36       		.uleb128 0x36
+ 26102 22bd 00000000 		.quad	.LBB864
+ 26102      00000000 
+ 26103 22c5 00000000 		.quad	.LBE864
+ 26103      00000000 
+ 26104 22cd DC220000 		.long	0x22dc
+ 26105 22d1 34       		.uleb128 0x34
+ 26106 22d2 3C0C0000 		.long	0xc3c
+ 26107 22d6 04       		.byte	0x4
+ 26108 22d7 91       		.byte	0x91
+ 26109 22d8 80AE7F   		.sleb128 -10496
+ 26110 22db 00       		.byte	0x0
+ 26111 22dc 31       		.uleb128 0x31
+ 26112 22dd AC0E0000 		.long	0xeac
+ 26113 22e1 00000000 		.quad	.LBB865
+ 26113      00000000 
+ 26114 22e9 00000000 		.quad	.LBE865
+ 26114      00000000 
+ 26115 22f1 02       		.byte	0x2
+ 26116 22f2 9806     		.value	0x698
+ 26117 22f4 2D230000 		.long	0x232d
+ 26118 22f8 32       		.uleb128 0x32
+ 26119 22f9 BE0E0000 		.long	0xebe
+ 26120 22fd 03       		.byte	0x3
+ 26121 22fe 91       		.byte	0x91
+ 26122 22ff 8047     		.sleb128 -7296
+ 26123 2301 35       		.uleb128 0x35
+ 26124 2302 CB0E0000 		.long	0xecb
+ 26125 2306 00000000 		.quad	.LBB867
+ 26125      00000000 
+ 26126 230e 00000000 		.quad	.LBE867
+ 26126      00000000 
+ 26127 2316 02       		.byte	0x2
+ 26128 2317 4905     		.value	0x549
+ 26129 2319 32       		.uleb128 0x32
+ 26130 231a E90E0000 		.long	0xee9
+ 26131 231e 03       		.byte	0x3
+ 26132 231f 91       		.byte	0x91
+ 26133 2320 9C47     		.sleb128 -7268
+ 26134 2322 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 737
+
+
+ 26135 2323 DD0E0000 		.long	0xedd
+ 26136 2327 03       		.byte	0x3
+ 26137 2328 91       		.byte	0x91
+ 26138 2329 A047     		.sleb128 -7264
+ 26139 232b 00       		.byte	0x0
+ 26140 232c 00       		.byte	0x0
+ 26141 232d 33       		.uleb128 0x33
+ 26142 232e 00000000 		.quad	.LBB869
+ 26142      00000000 
+ 26143 2336 00000000 		.quad	.LBE869
+ 26143      00000000 
+ 26144 233e 34       		.uleb128 0x34
+ 26145 233f 480C0000 		.long	0xc48
+ 26146 2343 04       		.byte	0x4
+ 26147 2344 91       		.byte	0x91
+ 26148 2345 F0AD7F   		.sleb128 -10512
+ 26149 2348 00       		.byte	0x0
+ 26150 2349 00       		.byte	0x0
+ 26151 234a 00       		.byte	0x0
+ 26152 234b 31       		.uleb128 0x31
+ 26153 234c F60E0000 		.long	0xef6
+ 26154 2350 00000000 		.quad	.LBB870
+ 26154      00000000 
+ 26155 2358 00000000 		.quad	.LBE870
+ 26155      00000000 
+ 26156 2360 02       		.byte	0x2
+ 26157 2361 D206     		.value	0x6d2
+ 26158 2363 60250000 		.long	0x2560
+ 26159 2367 32       		.uleb128 0x32
+ 26160 2368 080F0000 		.long	0xf08
+ 26161 236c 03       		.byte	0x3
+ 26162 236d 91       		.byte	0x91
+ 26163 236e B047     		.sleb128 -7248
+ 26164 2370 33       		.uleb128 0x33
+ 26165 2371 00000000 		.quad	.LBB871
+ 26165      00000000 
+ 26166 2379 00000000 		.quad	.LBE871
+ 26166      00000000 
+ 26167 2381 34       		.uleb128 0x34
+ 26168 2382 140F0000 		.long	0xf14
+ 26169 2386 04       		.byte	0x4
+ 26170 2387 76       		.byte	0x76
+ 26171 2388 90AA7F   		.sleb128 -10992
+ 26172 238b 31       		.uleb128 0x31
+ 26173 238c 210F0000 		.long	0xf21
+ 26174 2390 00000000 		.quad	.LBB872
+ 26174      00000000 
+ 26175 2398 00000000 		.quad	.LBE872
+ 26175      00000000 
+ 26176 23a0 02       		.byte	0x2
+ 26177 23a1 1F06     		.value	0x61f
+ 26178 23a3 28240000 		.long	0x2428
+ 26179 23a7 32       		.uleb128 0x32
+ 26180 23a8 330F0000 		.long	0xf33
+ 26181 23ac 03       		.byte	0x3
+ 26182 23ad 91       		.byte	0x91
+ 26183 23ae C047     		.sleb128 -7232
+
GAS LISTING /tmp/ccjbMjHD.s 			page 738
+
+
+ 26184 23b0 33       		.uleb128 0x33
+ 26185 23b1 00000000 		.quad	.LBB873
+ 26185      00000000 
+ 26186 23b9 00000000 		.quad	.LBE873
+ 26186      00000000 
+ 26187 23c1 34       		.uleb128 0x34
+ 26188 23c2 3F0F0000 		.long	0xf3f
+ 26189 23c6 09       		.byte	0x9
+ 26190 23c7 03       		.byte	0x3
+ 26191 23c8 00000000 		.quad	mask.7943
+ 26191      00000000 
+ 26192 23d0 35       		.uleb128 0x35
+ 26193 23d1 A00D0000 		.long	0xda0
+ 26194 23d5 00000000 		.quad	.LBB874
+ 26194      00000000 
+ 26195 23dd 00000000 		.quad	.LBE874
+ 26195      00000000 
+ 26196 23e5 02       		.byte	0x2
+ 26197 23e6 FE04     		.value	0x4fe
+ 26198 23e8 32       		.uleb128 0x32
+ 26199 23e9 BE0D0000 		.long	0xdbe
+ 26200 23ed 03       		.byte	0x3
+ 26201 23ee 91       		.byte	0x91
+ 26202 23ef D047     		.sleb128 -7216
+ 26203 23f1 32       		.uleb128 0x32
+ 26204 23f2 B20D0000 		.long	0xdb2
+ 26205 23f6 03       		.byte	0x3
+ 26206 23f7 91       		.byte	0x91
+ 26207 23f8 E047     		.sleb128 -7200
+ 26208 23fa 35       		.uleb128 0x35
+ 26209 23fb CB0D0000 		.long	0xdcb
+ 26210 23ff 00000000 		.quad	.LBB876
+ 26210      00000000 
+ 26211 2407 00000000 		.quad	.LBE876
+ 26211      00000000 
+ 26212 240f 02       		.byte	0x2
+ 26213 2410 7501     		.value	0x175
+ 26214 2412 32       		.uleb128 0x32
+ 26215 2413 E90D0000 		.long	0xde9
+ 26216 2417 03       		.byte	0x3
+ 26217 2418 91       		.byte	0x91
+ 26218 2419 F047     		.sleb128 -7184
+ 26219 241b 32       		.uleb128 0x32
+ 26220 241c DD0D0000 		.long	0xddd
+ 26221 2420 03       		.byte	0x3
+ 26222 2421 91       		.byte	0x91
+ 26223 2422 8048     		.sleb128 -7168
+ 26224 2424 00       		.byte	0x0
+ 26225 2425 00       		.byte	0x0
+ 26226 2426 00       		.byte	0x0
+ 26227 2427 00       		.byte	0x0
+ 26228 2428 31       		.uleb128 0x31
+ 26229 2429 210F0000 		.long	0xf21
+ 26230 242d 00000000 		.quad	.LBB878
+ 26230      00000000 
+ 26231 2435 00000000 		.quad	.LBE878
+ 26231      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 739
+
+
+ 26232 243d 02       		.byte	0x2
+ 26233 243e 2006     		.value	0x620
+ 26234 2440 C5240000 		.long	0x24c5
+ 26235 2444 32       		.uleb128 0x32
+ 26236 2445 330F0000 		.long	0xf33
+ 26237 2449 03       		.byte	0x3
+ 26238 244a 91       		.byte	0x91
+ 26239 244b 9048     		.sleb128 -7152
+ 26240 244d 33       		.uleb128 0x33
+ 26241 244e 00000000 		.quad	.LBB879
+ 26241      00000000 
+ 26242 2456 00000000 		.quad	.LBE879
+ 26242      00000000 
+ 26243 245e 34       		.uleb128 0x34
+ 26244 245f 3F0F0000 		.long	0xf3f
+ 26245 2463 09       		.byte	0x9
+ 26246 2464 03       		.byte	0x3
+ 26247 2465 00000000 		.quad	mask.7943
+ 26247      00000000 
+ 26248 246d 35       		.uleb128 0x35
+ 26249 246e A00D0000 		.long	0xda0
+ 26250 2472 00000000 		.quad	.LBB880
+ 26250      00000000 
+ 26251 247a 00000000 		.quad	.LBE880
+ 26251      00000000 
+ 26252 2482 02       		.byte	0x2
+ 26253 2483 FE04     		.value	0x4fe
+ 26254 2485 32       		.uleb128 0x32
+ 26255 2486 BE0D0000 		.long	0xdbe
+ 26256 248a 03       		.byte	0x3
+ 26257 248b 91       		.byte	0x91
+ 26258 248c A048     		.sleb128 -7136
+ 26259 248e 32       		.uleb128 0x32
+ 26260 248f B20D0000 		.long	0xdb2
+ 26261 2493 03       		.byte	0x3
+ 26262 2494 91       		.byte	0x91
+ 26263 2495 B048     		.sleb128 -7120
+ 26264 2497 35       		.uleb128 0x35
+ 26265 2498 CB0D0000 		.long	0xdcb
+ 26266 249c 00000000 		.quad	.LBB882
+ 26266      00000000 
+ 26267 24a4 00000000 		.quad	.LBE882
+ 26267      00000000 
+ 26268 24ac 02       		.byte	0x2
+ 26269 24ad 7501     		.value	0x175
+ 26270 24af 32       		.uleb128 0x32
+ 26271 24b0 E90D0000 		.long	0xde9
+ 26272 24b4 03       		.byte	0x3
+ 26273 24b5 91       		.byte	0x91
+ 26274 24b6 C048     		.sleb128 -7104
+ 26275 24b8 32       		.uleb128 0x32
+ 26276 24b9 DD0D0000 		.long	0xddd
+ 26277 24bd 03       		.byte	0x3
+ 26278 24be 91       		.byte	0x91
+ 26279 24bf D048     		.sleb128 -7088
+ 26280 24c1 00       		.byte	0x0
+ 26281 24c2 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 740
+
+
+ 26282 24c3 00       		.byte	0x0
+ 26283 24c4 00       		.byte	0x0
+ 26284 24c5 35       		.uleb128 0x35
+ 26285 24c6 210F0000 		.long	0xf21
+ 26286 24ca 00000000 		.quad	.LBB884
+ 26286      00000000 
+ 26287 24d2 00000000 		.quad	.LBE884
+ 26287      00000000 
+ 26288 24da 02       		.byte	0x2
+ 26289 24db 2106     		.value	0x621
+ 26290 24dd 32       		.uleb128 0x32
+ 26291 24de 330F0000 		.long	0xf33
+ 26292 24e2 03       		.byte	0x3
+ 26293 24e3 91       		.byte	0x91
+ 26294 24e4 E048     		.sleb128 -7072
+ 26295 24e6 33       		.uleb128 0x33
+ 26296 24e7 00000000 		.quad	.LBB885
+ 26296      00000000 
+ 26297 24ef 00000000 		.quad	.LBE885
+ 26297      00000000 
+ 26298 24f7 34       		.uleb128 0x34
+ 26299 24f8 3F0F0000 		.long	0xf3f
+ 26300 24fc 09       		.byte	0x9
+ 26301 24fd 03       		.byte	0x3
+ 26302 24fe 00000000 		.quad	mask.7943
+ 26302      00000000 
+ 26303 2506 35       		.uleb128 0x35
+ 26304 2507 A00D0000 		.long	0xda0
+ 26305 250b 00000000 		.quad	.LBB886
+ 26305      00000000 
+ 26306 2513 00000000 		.quad	.LBE886
+ 26306      00000000 
+ 26307 251b 02       		.byte	0x2
+ 26308 251c FE04     		.value	0x4fe
+ 26309 251e 32       		.uleb128 0x32
+ 26310 251f BE0D0000 		.long	0xdbe
+ 26311 2523 03       		.byte	0x3
+ 26312 2524 91       		.byte	0x91
+ 26313 2525 F048     		.sleb128 -7056
+ 26314 2527 32       		.uleb128 0x32
+ 26315 2528 B20D0000 		.long	0xdb2
+ 26316 252c 03       		.byte	0x3
+ 26317 252d 91       		.byte	0x91
+ 26318 252e 8049     		.sleb128 -7040
+ 26319 2530 35       		.uleb128 0x35
+ 26320 2531 CB0D0000 		.long	0xdcb
+ 26321 2535 00000000 		.quad	.LBB888
+ 26321      00000000 
+ 26322 253d 00000000 		.quad	.LBE888
+ 26322      00000000 
+ 26323 2545 02       		.byte	0x2
+ 26324 2546 7501     		.value	0x175
+ 26325 2548 32       		.uleb128 0x32
+ 26326 2549 E90D0000 		.long	0xde9
+ 26327 254d 03       		.byte	0x3
+ 26328 254e 91       		.byte	0x91
+ 26329 254f 9049     		.sleb128 -7024
+
GAS LISTING /tmp/ccjbMjHD.s 			page 741
+
+
+ 26330 2551 32       		.uleb128 0x32
+ 26331 2552 DD0D0000 		.long	0xddd
+ 26332 2556 03       		.byte	0x3
+ 26333 2557 91       		.byte	0x91
+ 26334 2558 A049     		.sleb128 -7008
+ 26335 255a 00       		.byte	0x0
+ 26336 255b 00       		.byte	0x0
+ 26337 255c 00       		.byte	0x0
+ 26338 255d 00       		.byte	0x0
+ 26339 255e 00       		.byte	0x0
+ 26340 255f 00       		.byte	0x0
+ 26341 2560 31       		.uleb128 0x31
+ 26342 2561 D50B0000 		.long	0xbd5
+ 26343 2565 00000000 		.quad	.LBB890
+ 26343      00000000 
+ 26344 256d 00000000 		.quad	.LBE890
+ 26344      00000000 
+ 26345 2575 02       		.byte	0x2
+ 26346 2576 D306     		.value	0x6d3
+ 26347 2578 432A0000 		.long	0x2a43
+ 26348 257c 32       		.uleb128 0x32
+ 26349 257d F30B0000 		.long	0xbf3
+ 26350 2581 03       		.byte	0x3
+ 26351 2582 91       		.byte	0x91
+ 26352 2583 BC49     		.sleb128 -6980
+ 26353 2585 32       		.uleb128 0x32
+ 26354 2586 E70B0000 		.long	0xbe7
+ 26355 258a 03       		.byte	0x3
+ 26356 258b 91       		.byte	0x91
+ 26357 258c C049     		.sleb128 -6976
+ 26358 258e 33       		.uleb128 0x33
+ 26359 258f 00000000 		.quad	.LBB891
+ 26359      00000000 
+ 26360 2597 00000000 		.quad	.LBE891
+ 26360      00000000 
+ 26361 259f 34       		.uleb128 0x34
+ 26362 25a0 FF0B0000 		.long	0xbff
+ 26363 25a4 04       		.byte	0x4
+ 26364 25a5 76       		.byte	0x76
+ 26365 25a6 B0AA7F   		.sleb128 -10960
+ 26366 25a9 34       		.uleb128 0x34
+ 26367 25aa 0B0C0000 		.long	0xc0b
+ 26368 25ae 04       		.byte	0x4
+ 26369 25af 76       		.byte	0x76
+ 26370 25b0 A0AA7F   		.sleb128 -10976
+ 26371 25b3 31       		.uleb128 0x31
+ 26372 25b4 540C0000 		.long	0xc54
+ 26373 25b8 00000000 		.quad	.LBB892
+ 26373      00000000 
+ 26374 25c0 00000000 		.quad	.LBE892
+ 26374      00000000 
+ 26375 25c8 02       		.byte	0x2
+ 26376 25c9 9106     		.value	0x691
+ 26377 25cb 1F260000 		.long	0x261f
+ 26378 25cf 32       		.uleb128 0x32
+ 26379 25d0 7E0C0000 		.long	0xc7e
+ 26380 25d4 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 742
+
+
+ 26381 25d5 91       		.byte	0x91
+ 26382 25d6 D849     		.sleb128 -6952
+ 26383 25d8 32       		.uleb128 0x32
+ 26384 25d9 720C0000 		.long	0xc72
+ 26385 25dd 03       		.byte	0x3
+ 26386 25de 91       		.byte	0x91
+ 26387 25df DC49     		.sleb128 -6948
+ 26388 25e1 32       		.uleb128 0x32
+ 26389 25e2 660C0000 		.long	0xc66
+ 26390 25e6 03       		.byte	0x3
+ 26391 25e7 91       		.byte	0x91
+ 26392 25e8 E049     		.sleb128 -6944
+ 26393 25ea 35       		.uleb128 0x35
+ 26394 25eb 8B0C0000 		.long	0xc8b
+ 26395 25ef 00000000 		.quad	.LBB894
+ 26395      00000000 
+ 26396 25f7 00000000 		.quad	.LBE894
+ 26396      00000000 
+ 26397 25ff 02       		.byte	0x2
+ 26398 2600 0702     		.value	0x207
+ 26399 2602 32       		.uleb128 0x32
+ 26400 2603 B40C0000 		.long	0xcb4
+ 26401 2607 03       		.byte	0x3
+ 26402 2608 91       		.byte	0x91
+ 26403 2609 F849     		.sleb128 -6920
+ 26404 260b 32       		.uleb128 0x32
+ 26405 260c A90C0000 		.long	0xca9
+ 26406 2610 03       		.byte	0x3
+ 26407 2611 91       		.byte	0x91
+ 26408 2612 FC49     		.sleb128 -6916
+ 26409 2614 32       		.uleb128 0x32
+ 26410 2615 9D0C0000 		.long	0xc9d
+ 26411 2619 03       		.byte	0x3
+ 26412 261a 91       		.byte	0x91
+ 26413 261b 804A     		.sleb128 -6912
+ 26414 261d 00       		.byte	0x0
+ 26415 261e 00       		.byte	0x0
+ 26416 261f 31       		.uleb128 0x31
+ 26417 2620 C10C0000 		.long	0xcc1
+ 26418 2624 00000000 		.quad	.LBB896
+ 26418      00000000 
+ 26419 262c 00000000 		.quad	.LBE896
+ 26419      00000000 
+ 26420 2634 02       		.byte	0x2
+ 26421 2635 9206     		.value	0x692
+ 26422 2637 A8280000 		.long	0x28a8
+ 26423 263b 32       		.uleb128 0x32
+ 26424 263c D30C0000 		.long	0xcd3
+ 26425 2640 03       		.byte	0x3
+ 26426 2641 91       		.byte	0x91
+ 26427 2642 904A     		.sleb128 -6896
+ 26428 2644 35       		.uleb128 0x35
+ 26429 2645 E00C0000 		.long	0xce0
+ 26430 2649 00000000 		.quad	.LBB898
+ 26430      00000000 
+ 26431 2651 00000000 		.quad	.LBE898
+ 26431      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 743
+
+
+ 26432 2659 02       		.byte	0x2
+ 26433 265a 7D03     		.value	0x37d
+ 26434 265c 32       		.uleb128 0x32
+ 26435 265d FE0C0000 		.long	0xcfe
+ 26436 2661 03       		.byte	0x3
+ 26437 2662 91       		.byte	0x91
+ 26438 2663 A84A     		.sleb128 -6872
+ 26439 2665 32       		.uleb128 0x32
+ 26440 2666 F20C0000 		.long	0xcf2
+ 26441 266a 03       		.byte	0x3
+ 26442 266b 91       		.byte	0x91
+ 26443 266c B04A     		.sleb128 -6864
+ 26444 266e 33       		.uleb128 0x33
+ 26445 266f 00000000 		.quad	.LBB899
+ 26445      00000000 
+ 26446 2677 00000000 		.quad	.LBE899
+ 26446      00000000 
+ 26447 267f 34       		.uleb128 0x34
+ 26448 2680 0A0D0000 		.long	0xd0a
+ 26449 2684 03       		.byte	0x3
+ 26450 2685 91       		.byte	0x91
+ 26451 2686 804B     		.sleb128 -6784
+ 26452 2688 34       		.uleb128 0x34
+ 26453 2689 150D0000 		.long	0xd15
+ 26454 268d 03       		.byte	0x3
+ 26455 268e 91       		.byte	0x91
+ 26456 268f F04A     		.sleb128 -6800
+ 26457 2691 34       		.uleb128 0x34
+ 26458 2692 200D0000 		.long	0xd20
+ 26459 2696 03       		.byte	0x3
+ 26460 2697 91       		.byte	0x91
+ 26461 2698 E04A     		.sleb128 -6816
+ 26462 269a 34       		.uleb128 0x34
+ 26463 269b 2C0D0000 		.long	0xd2c
+ 26464 269f 03       		.byte	0x3
+ 26465 26a0 91       		.byte	0x91
+ 26466 26a1 D04A     		.sleb128 -6832
+ 26467 26a3 34       		.uleb128 0x34
+ 26468 26a4 380D0000 		.long	0xd38
+ 26469 26a8 03       		.byte	0x3
+ 26470 26a9 91       		.byte	0x91
+ 26471 26aa CC4A     		.sleb128 -6836
+ 26472 26ac 31       		.uleb128 0x31
+ 26473 26ad 4F0D0000 		.long	0xd4f
+ 26474 26b1 00000000 		.quad	.LBB900
+ 26474      00000000 
+ 26475 26b9 00000000 		.quad	.LBE900
+ 26475      00000000 
+ 26476 26c1 02       		.byte	0x2
+ 26477 26c2 5603     		.value	0x356
+ 26478 26c4 DB260000 		.long	0x26db
+ 26479 26c8 32       		.uleb128 0x32
+ 26480 26c9 6A0D0000 		.long	0xd6a
+ 26481 26cd 03       		.byte	0x3
+ 26482 26ce 91       		.byte	0x91
+ 26483 26cf 904B     		.sleb128 -6768
+ 26484 26d1 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 744
+
+
+ 26485 26d2 600D0000 		.long	0xd60
+ 26486 26d6 03       		.byte	0x3
+ 26487 26d7 91       		.byte	0x91
+ 26488 26d8 A04B     		.sleb128 -6752
+ 26489 26da 00       		.byte	0x0
+ 26490 26db 31       		.uleb128 0x31
+ 26491 26dc 750D0000 		.long	0xd75
+ 26492 26e0 00000000 		.quad	.LBB902
+ 26492      00000000 
+ 26493 26e8 00000000 		.quad	.LBE902
+ 26493      00000000 
+ 26494 26f0 02       		.byte	0x2
+ 26495 26f1 5903     		.value	0x359
+ 26496 26f3 0A270000 		.long	0x270a
+ 26497 26f7 32       		.uleb128 0x32
+ 26498 26f8 930D0000 		.long	0xd93
+ 26499 26fc 03       		.byte	0x3
+ 26500 26fd 91       		.byte	0x91
+ 26501 26fe BC4B     		.sleb128 -6724
+ 26502 2700 32       		.uleb128 0x32
+ 26503 2701 870D0000 		.long	0xd87
+ 26504 2705 03       		.byte	0x3
+ 26505 2706 91       		.byte	0x91
+ 26506 2707 C04B     		.sleb128 -6720
+ 26507 2709 00       		.byte	0x0
+ 26508 270a 31       		.uleb128 0x31
+ 26509 270b 4F0D0000 		.long	0xd4f
+ 26510 270f 00000000 		.quad	.LBB904
+ 26510      00000000 
+ 26511 2717 00000000 		.quad	.LBE904
+ 26511      00000000 
+ 26512 271f 02       		.byte	0x2
+ 26513 2720 5B03     		.value	0x35b
+ 26514 2722 39270000 		.long	0x2739
+ 26515 2726 32       		.uleb128 0x32
+ 26516 2727 6A0D0000 		.long	0xd6a
+ 26517 272b 03       		.byte	0x3
+ 26518 272c 91       		.byte	0x91
+ 26519 272d D04B     		.sleb128 -6704
+ 26520 272f 32       		.uleb128 0x32
+ 26521 2730 600D0000 		.long	0xd60
+ 26522 2734 03       		.byte	0x3
+ 26523 2735 91       		.byte	0x91
+ 26524 2736 E04B     		.sleb128 -6688
+ 26525 2738 00       		.byte	0x0
+ 26526 2739 31       		.uleb128 0x31
+ 26527 273a A00D0000 		.long	0xda0
+ 26528 273e 00000000 		.quad	.LBB906
+ 26528      00000000 
+ 26529 2746 00000000 		.quad	.LBE906
+ 26529      00000000 
+ 26530 274e 02       		.byte	0x2
+ 26531 274f 6403     		.value	0x364
+ 26532 2751 93270000 		.long	0x2793
+ 26533 2755 32       		.uleb128 0x32
+ 26534 2756 BE0D0000 		.long	0xdbe
+ 26535 275a 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 745
+
+
+ 26536 275b 91       		.byte	0x91
+ 26537 275c F04B     		.sleb128 -6672
+ 26538 275e 32       		.uleb128 0x32
+ 26539 275f B20D0000 		.long	0xdb2
+ 26540 2763 03       		.byte	0x3
+ 26541 2764 91       		.byte	0x91
+ 26542 2765 804C     		.sleb128 -6656
+ 26543 2767 35       		.uleb128 0x35
+ 26544 2768 CB0D0000 		.long	0xdcb
+ 26545 276c 00000000 		.quad	.LBB908
+ 26545      00000000 
+ 26546 2774 00000000 		.quad	.LBE908
+ 26546      00000000 
+ 26547 277c 02       		.byte	0x2
+ 26548 277d 7501     		.value	0x175
+ 26549 277f 32       		.uleb128 0x32
+ 26550 2780 E90D0000 		.long	0xde9
+ 26551 2784 03       		.byte	0x3
+ 26552 2785 91       		.byte	0x91
+ 26553 2786 904C     		.sleb128 -6640
+ 26554 2788 32       		.uleb128 0x32
+ 26555 2789 DD0D0000 		.long	0xddd
+ 26556 278d 03       		.byte	0x3
+ 26557 278e 91       		.byte	0x91
+ 26558 278f A04C     		.sleb128 -6624
+ 26559 2791 00       		.byte	0x0
+ 26560 2792 00       		.byte	0x0
+ 26561 2793 31       		.uleb128 0x31
+ 26562 2794 FB0D0000 		.long	0xdfb
+ 26563 2798 00000000 		.quad	.LBB910
+ 26563      00000000 
+ 26564 27a0 00000000 		.quad	.LBE910
+ 26564      00000000 
+ 26565 27a8 02       		.byte	0x2
+ 26566 27a9 6603     		.value	0x366
+ 26567 27ab C2270000 		.long	0x27c2
+ 26568 27af 32       		.uleb128 0x32
+ 26569 27b0 160E0000 		.long	0xe16
+ 26570 27b4 03       		.byte	0x3
+ 26571 27b5 91       		.byte	0x91
+ 26572 27b6 B04C     		.sleb128 -6608
+ 26573 27b8 32       		.uleb128 0x32
+ 26574 27b9 0C0E0000 		.long	0xe0c
+ 26575 27bd 03       		.byte	0x3
+ 26576 27be 91       		.byte	0x91
+ 26577 27bf C04C     		.sleb128 -6592
+ 26578 27c1 00       		.byte	0x0
+ 26579 27c2 31       		.uleb128 0x31
+ 26580 27c3 A00D0000 		.long	0xda0
+ 26581 27c7 00000000 		.quad	.LBB912
+ 26581      00000000 
+ 26582 27cf 00000000 		.quad	.LBE912
+ 26582      00000000 
+ 26583 27d7 02       		.byte	0x2
+ 26584 27d8 6803     		.value	0x368
+ 26585 27da 1C280000 		.long	0x281c
+ 26586 27de 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 746
+
+
+ 26587 27df BE0D0000 		.long	0xdbe
+ 26588 27e3 03       		.byte	0x3
+ 26589 27e4 91       		.byte	0x91
+ 26590 27e5 D04C     		.sleb128 -6576
+ 26591 27e7 32       		.uleb128 0x32
+ 26592 27e8 B20D0000 		.long	0xdb2
+ 26593 27ec 03       		.byte	0x3
+ 26594 27ed 91       		.byte	0x91
+ 26595 27ee E04C     		.sleb128 -6560
+ 26596 27f0 35       		.uleb128 0x35
+ 26597 27f1 CB0D0000 		.long	0xdcb
+ 26598 27f5 00000000 		.quad	.LBB914
+ 26598      00000000 
+ 26599 27fd 00000000 		.quad	.LBE914
+ 26599      00000000 
+ 26600 2805 02       		.byte	0x2
+ 26601 2806 7501     		.value	0x175
+ 26602 2808 32       		.uleb128 0x32
+ 26603 2809 E90D0000 		.long	0xde9
+ 26604 280d 03       		.byte	0x3
+ 26605 280e 91       		.byte	0x91
+ 26606 280f F04C     		.sleb128 -6544
+ 26607 2811 32       		.uleb128 0x32
+ 26608 2812 DD0D0000 		.long	0xddd
+ 26609 2816 03       		.byte	0x3
+ 26610 2817 91       		.byte	0x91
+ 26611 2818 804D     		.sleb128 -6528
+ 26612 281a 00       		.byte	0x0
+ 26613 281b 00       		.byte	0x0
+ 26614 281c 31       		.uleb128 0x31
+ 26615 281d FB0D0000 		.long	0xdfb
+ 26616 2821 00000000 		.quad	.LBB916
+ 26616      00000000 
+ 26617 2829 00000000 		.quad	.LBE916
+ 26617      00000000 
+ 26618 2831 02       		.byte	0x2
+ 26619 2832 6A03     		.value	0x36a
+ 26620 2834 4B280000 		.long	0x284b
+ 26621 2838 32       		.uleb128 0x32
+ 26622 2839 160E0000 		.long	0xe16
+ 26623 283d 03       		.byte	0x3
+ 26624 283e 91       		.byte	0x91
+ 26625 283f 904D     		.sleb128 -6512
+ 26626 2841 32       		.uleb128 0x32
+ 26627 2842 0C0E0000 		.long	0xe0c
+ 26628 2846 03       		.byte	0x3
+ 26629 2847 91       		.byte	0x91
+ 26630 2848 A04D     		.sleb128 -6496
+ 26631 284a 00       		.byte	0x0
+ 26632 284b 31       		.uleb128 0x31
+ 26633 284c 210E0000 		.long	0xe21
+ 26634 2850 00000000 		.quad	.LBB918
+ 26634      00000000 
+ 26635 2858 00000000 		.quad	.LBE918
+ 26635      00000000 
+ 26636 2860 02       		.byte	0x2
+ 26637 2861 6C03     		.value	0x36c
+
GAS LISTING /tmp/ccjbMjHD.s 			page 747
+
+
+ 26638 2863 7A280000 		.long	0x287a
+ 26639 2867 32       		.uleb128 0x32
+ 26640 2868 3E0E0000 		.long	0xe3e
+ 26641 286c 03       		.byte	0x3
+ 26642 286d 91       		.byte	0x91
+ 26643 286e B04D     		.sleb128 -6480
+ 26644 2870 32       		.uleb128 0x32
+ 26645 2871 330E0000 		.long	0xe33
+ 26646 2875 03       		.byte	0x3
+ 26647 2876 91       		.byte	0x91
+ 26648 2877 C04D     		.sleb128 -6464
+ 26649 2879 00       		.byte	0x0
+ 26650 287a 35       		.uleb128 0x35
+ 26651 287b 4F0D0000 		.long	0xd4f
+ 26652 287f 00000000 		.quad	.LBB920
+ 26652      00000000 
+ 26653 2887 00000000 		.quad	.LBE920
+ 26653      00000000 
+ 26654 288f 02       		.byte	0x2
+ 26655 2890 6E03     		.value	0x36e
+ 26656 2892 32       		.uleb128 0x32
+ 26657 2893 6A0D0000 		.long	0xd6a
+ 26658 2897 03       		.byte	0x3
+ 26659 2898 91       		.byte	0x91
+ 26660 2899 D04D     		.sleb128 -6448
+ 26661 289b 32       		.uleb128 0x32
+ 26662 289c 600D0000 		.long	0xd60
+ 26663 28a0 03       		.byte	0x3
+ 26664 28a1 91       		.byte	0x91
+ 26665 28a2 E04D     		.sleb128 -6432
+ 26666 28a4 00       		.byte	0x0
+ 26667 28a5 00       		.byte	0x0
+ 26668 28a6 00       		.byte	0x0
+ 26669 28a7 00       		.byte	0x0
+ 26670 28a8 36       		.uleb128 0x36
+ 26671 28a9 00000000 		.quad	.LBB922
+ 26671      00000000 
+ 26672 28b1 00000000 		.quad	.LBE922
+ 26672      00000000 
+ 26673 28b9 C8280000 		.long	0x28c8
+ 26674 28bd 34       		.uleb128 0x34
+ 26675 28be 1C0C0000 		.long	0xc1c
+ 26676 28c2 04       		.byte	0x4
+ 26677 28c3 91       		.byte	0x91
+ 26678 28c4 E0AE7F   		.sleb128 -10400
+ 26679 28c7 00       		.byte	0x0
+ 26680 28c8 31       		.uleb128 0x31
+ 26681 28c9 4A0E0000 		.long	0xe4a
+ 26682 28cd 00000000 		.quad	.LBB923
+ 26682      00000000 
+ 26683 28d5 00000000 		.quad	.LBE923
+ 26683      00000000 
+ 26684 28dd 02       		.byte	0x2
+ 26685 28de 9406     		.value	0x694
+ 26686 28e0 65290000 		.long	0x2965
+ 26687 28e4 32       		.uleb128 0x32
+ 26688 28e5 5C0E0000 		.long	0xe5c
+
GAS LISTING /tmp/ccjbMjHD.s 			page 748
+
+
+ 26689 28e9 03       		.byte	0x3
+ 26690 28ea 91       		.byte	0x91
+ 26691 28eb F04D     		.sleb128 -6416
+ 26692 28ed 33       		.uleb128 0x33
+ 26693 28ee 00000000 		.quad	.LBB924
+ 26693      00000000 
+ 26694 28f6 00000000 		.quad	.LBE924
+ 26694      00000000 
+ 26695 28fe 34       		.uleb128 0x34
+ 26696 28ff 680E0000 		.long	0xe68
+ 26697 2903 09       		.byte	0x9
+ 26698 2904 03       		.byte	0x3
+ 26699 2905 00000000 		.quad	ShiftRowTable.7385
+ 26699      00000000 
+ 26700 290d 35       		.uleb128 0x35
+ 26701 290e A00D0000 		.long	0xda0
+ 26702 2912 00000000 		.quad	.LBB925
+ 26702      00000000 
+ 26703 291a 00000000 		.quad	.LBE925
+ 26703      00000000 
+ 26704 2922 02       		.byte	0x2
+ 26705 2923 9B02     		.value	0x29b
+ 26706 2925 32       		.uleb128 0x32
+ 26707 2926 BE0D0000 		.long	0xdbe
+ 26708 292a 03       		.byte	0x3
+ 26709 292b 91       		.byte	0x91
+ 26710 292c 804E     		.sleb128 -6400
+ 26711 292e 32       		.uleb128 0x32
+ 26712 292f B20D0000 		.long	0xdb2
+ 26713 2933 03       		.byte	0x3
+ 26714 2934 91       		.byte	0x91
+ 26715 2935 904E     		.sleb128 -6384
+ 26716 2937 35       		.uleb128 0x35
+ 26717 2938 CB0D0000 		.long	0xdcb
+ 26718 293c 00000000 		.quad	.LBB927
+ 26718      00000000 
+ 26719 2944 00000000 		.quad	.LBE927
+ 26719      00000000 
+ 26720 294c 02       		.byte	0x2
+ 26721 294d 7501     		.value	0x175
+ 26722 294f 32       		.uleb128 0x32
+ 26723 2950 E90D0000 		.long	0xde9
+ 26724 2954 03       		.byte	0x3
+ 26725 2955 91       		.byte	0x91
+ 26726 2956 A04E     		.sleb128 -6368
+ 26727 2958 32       		.uleb128 0x32
+ 26728 2959 DD0D0000 		.long	0xddd
+ 26729 295d 03       		.byte	0x3
+ 26730 295e 91       		.byte	0x91
+ 26731 295f B04E     		.sleb128 -6352
+ 26732 2961 00       		.byte	0x0
+ 26733 2962 00       		.byte	0x0
+ 26734 2963 00       		.byte	0x0
+ 26735 2964 00       		.byte	0x0
+ 26736 2965 36       		.uleb128 0x36
+ 26737 2966 00000000 		.quad	.LBB929
+ 26737      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 749
+
+
+ 26738 296e 00000000 		.quad	.LBE929
+ 26738      00000000 
+ 26739 2976 85290000 		.long	0x2985
+ 26740 297a 34       		.uleb128 0x34
+ 26741 297b 2C0C0000 		.long	0xc2c
+ 26742 297f 04       		.byte	0x4
+ 26743 2980 91       		.byte	0x91
+ 26744 2981 D0AE7F   		.sleb128 -10416
+ 26745 2984 00       		.byte	0x0
+ 26746 2985 31       		.uleb128 0x31
+ 26747 2986 860E0000 		.long	0xe86
+ 26748 298a 00000000 		.quad	.LBB930
+ 26748      00000000 
+ 26749 2992 00000000 		.quad	.LBE930
+ 26749      00000000 
+ 26750 299a 02       		.byte	0x2
+ 26751 299b 9606     		.value	0x696
+ 26752 299d B4290000 		.long	0x29b4
+ 26753 29a1 32       		.uleb128 0x32
+ 26754 29a2 A10E0000 		.long	0xea1
+ 26755 29a6 03       		.byte	0x3
+ 26756 29a7 91       		.byte	0x91
+ 26757 29a8 C04E     		.sleb128 -6336
+ 26758 29aa 32       		.uleb128 0x32
+ 26759 29ab 970E0000 		.long	0xe97
+ 26760 29af 03       		.byte	0x3
+ 26761 29b0 91       		.byte	0x91
+ 26762 29b1 D04E     		.sleb128 -6320
+ 26763 29b3 00       		.byte	0x0
+ 26764 29b4 36       		.uleb128 0x36
+ 26765 29b5 00000000 		.quad	.LBB932
+ 26765      00000000 
+ 26766 29bd 00000000 		.quad	.LBE932
+ 26766      00000000 
+ 26767 29c5 D4290000 		.long	0x29d4
+ 26768 29c9 34       		.uleb128 0x34
+ 26769 29ca 3C0C0000 		.long	0xc3c
+ 26770 29ce 04       		.byte	0x4
+ 26771 29cf 91       		.byte	0x91
+ 26772 29d0 C0AE7F   		.sleb128 -10432
+ 26773 29d3 00       		.byte	0x0
+ 26774 29d4 31       		.uleb128 0x31
+ 26775 29d5 AC0E0000 		.long	0xeac
+ 26776 29d9 00000000 		.quad	.LBB933
+ 26776      00000000 
+ 26777 29e1 00000000 		.quad	.LBE933
+ 26777      00000000 
+ 26778 29e9 02       		.byte	0x2
+ 26779 29ea 9806     		.value	0x698
+ 26780 29ec 252A0000 		.long	0x2a25
+ 26781 29f0 32       		.uleb128 0x32
+ 26782 29f1 BE0E0000 		.long	0xebe
+ 26783 29f5 03       		.byte	0x3
+ 26784 29f6 91       		.byte	0x91
+ 26785 29f7 E04E     		.sleb128 -6304
+ 26786 29f9 35       		.uleb128 0x35
+ 26787 29fa CB0E0000 		.long	0xecb
+
GAS LISTING /tmp/ccjbMjHD.s 			page 750
+
+
+ 26788 29fe 00000000 		.quad	.LBB935
+ 26788      00000000 
+ 26789 2a06 00000000 		.quad	.LBE935
+ 26789      00000000 
+ 26790 2a0e 02       		.byte	0x2
+ 26791 2a0f 4905     		.value	0x549
+ 26792 2a11 32       		.uleb128 0x32
+ 26793 2a12 E90E0000 		.long	0xee9
+ 26794 2a16 03       		.byte	0x3
+ 26795 2a17 91       		.byte	0x91
+ 26796 2a18 FC4E     		.sleb128 -6276
+ 26797 2a1a 32       		.uleb128 0x32
+ 26798 2a1b DD0E0000 		.long	0xedd
+ 26799 2a1f 03       		.byte	0x3
+ 26800 2a20 91       		.byte	0x91
+ 26801 2a21 804F     		.sleb128 -6272
+ 26802 2a23 00       		.byte	0x0
+ 26803 2a24 00       		.byte	0x0
+ 26804 2a25 33       		.uleb128 0x33
+ 26805 2a26 00000000 		.quad	.LBB937
+ 26805      00000000 
+ 26806 2a2e 00000000 		.quad	.LBE937
+ 26806      00000000 
+ 26807 2a36 34       		.uleb128 0x34
+ 26808 2a37 480C0000 		.long	0xc48
+ 26809 2a3b 04       		.byte	0x4
+ 26810 2a3c 91       		.byte	0x91
+ 26811 2a3d B0AE7F   		.sleb128 -10448
+ 26812 2a40 00       		.byte	0x0
+ 26813 2a41 00       		.byte	0x0
+ 26814 2a42 00       		.byte	0x0
+ 26815 2a43 31       		.uleb128 0x31
+ 26816 2a44 F60E0000 		.long	0xef6
+ 26817 2a48 00000000 		.quad	.LBB938
+ 26817      00000000 
+ 26818 2a50 00000000 		.quad	.LBE938
+ 26818      00000000 
+ 26819 2a58 02       		.byte	0x2
+ 26820 2a59 D306     		.value	0x6d3
+ 26821 2a5b 582C0000 		.long	0x2c58
+ 26822 2a5f 32       		.uleb128 0x32
+ 26823 2a60 080F0000 		.long	0xf08
+ 26824 2a64 03       		.byte	0x3
+ 26825 2a65 91       		.byte	0x91
+ 26826 2a66 904F     		.sleb128 -6256
+ 26827 2a68 33       		.uleb128 0x33
+ 26828 2a69 00000000 		.quad	.LBB939
+ 26828      00000000 
+ 26829 2a71 00000000 		.quad	.LBE939
+ 26829      00000000 
+ 26830 2a79 34       		.uleb128 0x34
+ 26831 2a7a 140F0000 		.long	0xf14
+ 26832 2a7e 04       		.byte	0x4
+ 26833 2a7f 76       		.byte	0x76
+ 26834 2a80 C0AA7F   		.sleb128 -10944
+ 26835 2a83 31       		.uleb128 0x31
+ 26836 2a84 210F0000 		.long	0xf21
+
GAS LISTING /tmp/ccjbMjHD.s 			page 751
+
+
+ 26837 2a88 00000000 		.quad	.LBB940
+ 26837      00000000 
+ 26838 2a90 00000000 		.quad	.LBE940
+ 26838      00000000 
+ 26839 2a98 02       		.byte	0x2
+ 26840 2a99 1F06     		.value	0x61f
+ 26841 2a9b 202B0000 		.long	0x2b20
+ 26842 2a9f 32       		.uleb128 0x32
+ 26843 2aa0 330F0000 		.long	0xf33
+ 26844 2aa4 03       		.byte	0x3
+ 26845 2aa5 91       		.byte	0x91
+ 26846 2aa6 A04F     		.sleb128 -6240
+ 26847 2aa8 33       		.uleb128 0x33
+ 26848 2aa9 00000000 		.quad	.LBB941
+ 26848      00000000 
+ 26849 2ab1 00000000 		.quad	.LBE941
+ 26849      00000000 
+ 26850 2ab9 34       		.uleb128 0x34
+ 26851 2aba 3F0F0000 		.long	0xf3f
+ 26852 2abe 09       		.byte	0x9
+ 26853 2abf 03       		.byte	0x3
+ 26854 2ac0 00000000 		.quad	mask.7943
+ 26854      00000000 
+ 26855 2ac8 35       		.uleb128 0x35
+ 26856 2ac9 A00D0000 		.long	0xda0
+ 26857 2acd 00000000 		.quad	.LBB942
+ 26857      00000000 
+ 26858 2ad5 00000000 		.quad	.LBE942
+ 26858      00000000 
+ 26859 2add 02       		.byte	0x2
+ 26860 2ade FE04     		.value	0x4fe
+ 26861 2ae0 32       		.uleb128 0x32
+ 26862 2ae1 BE0D0000 		.long	0xdbe
+ 26863 2ae5 03       		.byte	0x3
+ 26864 2ae6 91       		.byte	0x91
+ 26865 2ae7 B04F     		.sleb128 -6224
+ 26866 2ae9 32       		.uleb128 0x32
+ 26867 2aea B20D0000 		.long	0xdb2
+ 26868 2aee 03       		.byte	0x3
+ 26869 2aef 91       		.byte	0x91
+ 26870 2af0 C04F     		.sleb128 -6208
+ 26871 2af2 35       		.uleb128 0x35
+ 26872 2af3 CB0D0000 		.long	0xdcb
+ 26873 2af7 00000000 		.quad	.LBB944
+ 26873      00000000 
+ 26874 2aff 00000000 		.quad	.LBE944
+ 26874      00000000 
+ 26875 2b07 02       		.byte	0x2
+ 26876 2b08 7501     		.value	0x175
+ 26877 2b0a 32       		.uleb128 0x32
+ 26878 2b0b E90D0000 		.long	0xde9
+ 26879 2b0f 03       		.byte	0x3
+ 26880 2b10 91       		.byte	0x91
+ 26881 2b11 D04F     		.sleb128 -6192
+ 26882 2b13 32       		.uleb128 0x32
+ 26883 2b14 DD0D0000 		.long	0xddd
+ 26884 2b18 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 752
+
+
+ 26885 2b19 91       		.byte	0x91
+ 26886 2b1a E04F     		.sleb128 -6176
+ 26887 2b1c 00       		.byte	0x0
+ 26888 2b1d 00       		.byte	0x0
+ 26889 2b1e 00       		.byte	0x0
+ 26890 2b1f 00       		.byte	0x0
+ 26891 2b20 31       		.uleb128 0x31
+ 26892 2b21 210F0000 		.long	0xf21
+ 26893 2b25 00000000 		.quad	.LBB946
+ 26893      00000000 
+ 26894 2b2d 00000000 		.quad	.LBE946
+ 26894      00000000 
+ 26895 2b35 02       		.byte	0x2
+ 26896 2b36 2006     		.value	0x620
+ 26897 2b38 BD2B0000 		.long	0x2bbd
+ 26898 2b3c 32       		.uleb128 0x32
+ 26899 2b3d 330F0000 		.long	0xf33
+ 26900 2b41 03       		.byte	0x3
+ 26901 2b42 91       		.byte	0x91
+ 26902 2b43 F04F     		.sleb128 -6160
+ 26903 2b45 33       		.uleb128 0x33
+ 26904 2b46 00000000 		.quad	.LBB947
+ 26904      00000000 
+ 26905 2b4e 00000000 		.quad	.LBE947
+ 26905      00000000 
+ 26906 2b56 34       		.uleb128 0x34
+ 26907 2b57 3F0F0000 		.long	0xf3f
+ 26908 2b5b 09       		.byte	0x9
+ 26909 2b5c 03       		.byte	0x3
+ 26910 2b5d 00000000 		.quad	mask.7943
+ 26910      00000000 
+ 26911 2b65 35       		.uleb128 0x35
+ 26912 2b66 A00D0000 		.long	0xda0
+ 26913 2b6a 00000000 		.quad	.LBB948
+ 26913      00000000 
+ 26914 2b72 00000000 		.quad	.LBE948
+ 26914      00000000 
+ 26915 2b7a 02       		.byte	0x2
+ 26916 2b7b FE04     		.value	0x4fe
+ 26917 2b7d 32       		.uleb128 0x32
+ 26918 2b7e BE0D0000 		.long	0xdbe
+ 26919 2b82 03       		.byte	0x3
+ 26920 2b83 91       		.byte	0x91
+ 26921 2b84 8050     		.sleb128 -6144
+ 26922 2b86 32       		.uleb128 0x32
+ 26923 2b87 B20D0000 		.long	0xdb2
+ 26924 2b8b 03       		.byte	0x3
+ 26925 2b8c 91       		.byte	0x91
+ 26926 2b8d 9050     		.sleb128 -6128
+ 26927 2b8f 35       		.uleb128 0x35
+ 26928 2b90 CB0D0000 		.long	0xdcb
+ 26929 2b94 00000000 		.quad	.LBB950
+ 26929      00000000 
+ 26930 2b9c 00000000 		.quad	.LBE950
+ 26930      00000000 
+ 26931 2ba4 02       		.byte	0x2
+ 26932 2ba5 7501     		.value	0x175
+
GAS LISTING /tmp/ccjbMjHD.s 			page 753
+
+
+ 26933 2ba7 32       		.uleb128 0x32
+ 26934 2ba8 E90D0000 		.long	0xde9
+ 26935 2bac 03       		.byte	0x3
+ 26936 2bad 91       		.byte	0x91
+ 26937 2bae A050     		.sleb128 -6112
+ 26938 2bb0 32       		.uleb128 0x32
+ 26939 2bb1 DD0D0000 		.long	0xddd
+ 26940 2bb5 03       		.byte	0x3
+ 26941 2bb6 91       		.byte	0x91
+ 26942 2bb7 B050     		.sleb128 -6096
+ 26943 2bb9 00       		.byte	0x0
+ 26944 2bba 00       		.byte	0x0
+ 26945 2bbb 00       		.byte	0x0
+ 26946 2bbc 00       		.byte	0x0
+ 26947 2bbd 35       		.uleb128 0x35
+ 26948 2bbe 210F0000 		.long	0xf21
+ 26949 2bc2 00000000 		.quad	.LBB952
+ 26949      00000000 
+ 26950 2bca 00000000 		.quad	.LBE952
+ 26950      00000000 
+ 26951 2bd2 02       		.byte	0x2
+ 26952 2bd3 2106     		.value	0x621
+ 26953 2bd5 32       		.uleb128 0x32
+ 26954 2bd6 330F0000 		.long	0xf33
+ 26955 2bda 03       		.byte	0x3
+ 26956 2bdb 91       		.byte	0x91
+ 26957 2bdc C050     		.sleb128 -6080
+ 26958 2bde 33       		.uleb128 0x33
+ 26959 2bdf 00000000 		.quad	.LBB953
+ 26959      00000000 
+ 26960 2be7 00000000 		.quad	.LBE953
+ 26960      00000000 
+ 26961 2bef 34       		.uleb128 0x34
+ 26962 2bf0 3F0F0000 		.long	0xf3f
+ 26963 2bf4 09       		.byte	0x9
+ 26964 2bf5 03       		.byte	0x3
+ 26965 2bf6 00000000 		.quad	mask.7943
+ 26965      00000000 
+ 26966 2bfe 35       		.uleb128 0x35
+ 26967 2bff A00D0000 		.long	0xda0
+ 26968 2c03 00000000 		.quad	.LBB954
+ 26968      00000000 
+ 26969 2c0b 00000000 		.quad	.LBE954
+ 26969      00000000 
+ 26970 2c13 02       		.byte	0x2
+ 26971 2c14 FE04     		.value	0x4fe
+ 26972 2c16 32       		.uleb128 0x32
+ 26973 2c17 BE0D0000 		.long	0xdbe
+ 26974 2c1b 03       		.byte	0x3
+ 26975 2c1c 91       		.byte	0x91
+ 26976 2c1d D050     		.sleb128 -6064
+ 26977 2c1f 32       		.uleb128 0x32
+ 26978 2c20 B20D0000 		.long	0xdb2
+ 26979 2c24 03       		.byte	0x3
+ 26980 2c25 91       		.byte	0x91
+ 26981 2c26 E050     		.sleb128 -6048
+ 26982 2c28 35       		.uleb128 0x35
+
GAS LISTING /tmp/ccjbMjHD.s 			page 754
+
+
+ 26983 2c29 CB0D0000 		.long	0xdcb
+ 26984 2c2d 00000000 		.quad	.LBB956
+ 26984      00000000 
+ 26985 2c35 00000000 		.quad	.LBE956
+ 26985      00000000 
+ 26986 2c3d 02       		.byte	0x2
+ 26987 2c3e 7501     		.value	0x175
+ 26988 2c40 32       		.uleb128 0x32
+ 26989 2c41 E90D0000 		.long	0xde9
+ 26990 2c45 03       		.byte	0x3
+ 26991 2c46 91       		.byte	0x91
+ 26992 2c47 F050     		.sleb128 -6032
+ 26993 2c49 32       		.uleb128 0x32
+ 26994 2c4a DD0D0000 		.long	0xddd
+ 26995 2c4e 03       		.byte	0x3
+ 26996 2c4f 91       		.byte	0x91
+ 26997 2c50 8051     		.sleb128 -6016
+ 26998 2c52 00       		.byte	0x0
+ 26999 2c53 00       		.byte	0x0
+ 27000 2c54 00       		.byte	0x0
+ 27001 2c55 00       		.byte	0x0
+ 27002 2c56 00       		.byte	0x0
+ 27003 2c57 00       		.byte	0x0
+ 27004 2c58 31       		.uleb128 0x31
+ 27005 2c59 D50B0000 		.long	0xbd5
+ 27006 2c5d 00000000 		.quad	.LBB958
+ 27006      00000000 
+ 27007 2c65 00000000 		.quad	.LBE958
+ 27007      00000000 
+ 27008 2c6d 02       		.byte	0x2
+ 27009 2c6e D406     		.value	0x6d4
+ 27010 2c70 3B310000 		.long	0x313b
+ 27011 2c74 32       		.uleb128 0x32
+ 27012 2c75 F30B0000 		.long	0xbf3
+ 27013 2c79 03       		.byte	0x3
+ 27014 2c7a 91       		.byte	0x91
+ 27015 2c7b 9C51     		.sleb128 -5988
+ 27016 2c7d 32       		.uleb128 0x32
+ 27017 2c7e E70B0000 		.long	0xbe7
+ 27018 2c82 03       		.byte	0x3
+ 27019 2c83 91       		.byte	0x91
+ 27020 2c84 A051     		.sleb128 -5984
+ 27021 2c86 33       		.uleb128 0x33
+ 27022 2c87 00000000 		.quad	.LBB959
+ 27022      00000000 
+ 27023 2c8f 00000000 		.quad	.LBE959
+ 27023      00000000 
+ 27024 2c97 34       		.uleb128 0x34
+ 27025 2c98 FF0B0000 		.long	0xbff
+ 27026 2c9c 04       		.byte	0x4
+ 27027 2c9d 76       		.byte	0x76
+ 27028 2c9e E0AA7F   		.sleb128 -10912
+ 27029 2ca1 34       		.uleb128 0x34
+ 27030 2ca2 0B0C0000 		.long	0xc0b
+ 27031 2ca6 04       		.byte	0x4
+ 27032 2ca7 76       		.byte	0x76
+ 27033 2ca8 D0AA7F   		.sleb128 -10928
+
GAS LISTING /tmp/ccjbMjHD.s 			page 755
+
+
+ 27034 2cab 31       		.uleb128 0x31
+ 27035 2cac 540C0000 		.long	0xc54
+ 27036 2cb0 00000000 		.quad	.LBB960
+ 27036      00000000 
+ 27037 2cb8 00000000 		.quad	.LBE960
+ 27037      00000000 
+ 27038 2cc0 02       		.byte	0x2
+ 27039 2cc1 9106     		.value	0x691
+ 27040 2cc3 172D0000 		.long	0x2d17
+ 27041 2cc7 32       		.uleb128 0x32
+ 27042 2cc8 7E0C0000 		.long	0xc7e
+ 27043 2ccc 03       		.byte	0x3
+ 27044 2ccd 91       		.byte	0x91
+ 27045 2cce B851     		.sleb128 -5960
+ 27046 2cd0 32       		.uleb128 0x32
+ 27047 2cd1 720C0000 		.long	0xc72
+ 27048 2cd5 03       		.byte	0x3
+ 27049 2cd6 91       		.byte	0x91
+ 27050 2cd7 BC51     		.sleb128 -5956
+ 27051 2cd9 32       		.uleb128 0x32
+ 27052 2cda 660C0000 		.long	0xc66
+ 27053 2cde 03       		.byte	0x3
+ 27054 2cdf 91       		.byte	0x91
+ 27055 2ce0 C051     		.sleb128 -5952
+ 27056 2ce2 35       		.uleb128 0x35
+ 27057 2ce3 8B0C0000 		.long	0xc8b
+ 27058 2ce7 00000000 		.quad	.LBB962
+ 27058      00000000 
+ 27059 2cef 00000000 		.quad	.LBE962
+ 27059      00000000 
+ 27060 2cf7 02       		.byte	0x2
+ 27061 2cf8 0702     		.value	0x207
+ 27062 2cfa 32       		.uleb128 0x32
+ 27063 2cfb B40C0000 		.long	0xcb4
+ 27064 2cff 03       		.byte	0x3
+ 27065 2d00 91       		.byte	0x91
+ 27066 2d01 D851     		.sleb128 -5928
+ 27067 2d03 32       		.uleb128 0x32
+ 27068 2d04 A90C0000 		.long	0xca9
+ 27069 2d08 03       		.byte	0x3
+ 27070 2d09 91       		.byte	0x91
+ 27071 2d0a DC51     		.sleb128 -5924
+ 27072 2d0c 32       		.uleb128 0x32
+ 27073 2d0d 9D0C0000 		.long	0xc9d
+ 27074 2d11 03       		.byte	0x3
+ 27075 2d12 91       		.byte	0x91
+ 27076 2d13 E051     		.sleb128 -5920
+ 27077 2d15 00       		.byte	0x0
+ 27078 2d16 00       		.byte	0x0
+ 27079 2d17 31       		.uleb128 0x31
+ 27080 2d18 C10C0000 		.long	0xcc1
+ 27081 2d1c 00000000 		.quad	.LBB964
+ 27081      00000000 
+ 27082 2d24 00000000 		.quad	.LBE964
+ 27082      00000000 
+ 27083 2d2c 02       		.byte	0x2
+ 27084 2d2d 9206     		.value	0x692
+
GAS LISTING /tmp/ccjbMjHD.s 			page 756
+
+
+ 27085 2d2f A02F0000 		.long	0x2fa0
+ 27086 2d33 32       		.uleb128 0x32
+ 27087 2d34 D30C0000 		.long	0xcd3
+ 27088 2d38 03       		.byte	0x3
+ 27089 2d39 91       		.byte	0x91
+ 27090 2d3a F051     		.sleb128 -5904
+ 27091 2d3c 35       		.uleb128 0x35
+ 27092 2d3d E00C0000 		.long	0xce0
+ 27093 2d41 00000000 		.quad	.LBB966
+ 27093      00000000 
+ 27094 2d49 00000000 		.quad	.LBE966
+ 27094      00000000 
+ 27095 2d51 02       		.byte	0x2
+ 27096 2d52 7D03     		.value	0x37d
+ 27097 2d54 32       		.uleb128 0x32
+ 27098 2d55 FE0C0000 		.long	0xcfe
+ 27099 2d59 03       		.byte	0x3
+ 27100 2d5a 91       		.byte	0x91
+ 27101 2d5b 8852     		.sleb128 -5880
+ 27102 2d5d 32       		.uleb128 0x32
+ 27103 2d5e F20C0000 		.long	0xcf2
+ 27104 2d62 03       		.byte	0x3
+ 27105 2d63 91       		.byte	0x91
+ 27106 2d64 9052     		.sleb128 -5872
+ 27107 2d66 33       		.uleb128 0x33
+ 27108 2d67 00000000 		.quad	.LBB967
+ 27108      00000000 
+ 27109 2d6f 00000000 		.quad	.LBE967
+ 27109      00000000 
+ 27110 2d77 34       		.uleb128 0x34
+ 27111 2d78 0A0D0000 		.long	0xd0a
+ 27112 2d7c 03       		.byte	0x3
+ 27113 2d7d 91       		.byte	0x91
+ 27114 2d7e E052     		.sleb128 -5792
+ 27115 2d80 34       		.uleb128 0x34
+ 27116 2d81 150D0000 		.long	0xd15
+ 27117 2d85 03       		.byte	0x3
+ 27118 2d86 91       		.byte	0x91
+ 27119 2d87 D052     		.sleb128 -5808
+ 27120 2d89 34       		.uleb128 0x34
+ 27121 2d8a 200D0000 		.long	0xd20
+ 27122 2d8e 03       		.byte	0x3
+ 27123 2d8f 91       		.byte	0x91
+ 27124 2d90 C052     		.sleb128 -5824
+ 27125 2d92 34       		.uleb128 0x34
+ 27126 2d93 2C0D0000 		.long	0xd2c
+ 27127 2d97 03       		.byte	0x3
+ 27128 2d98 91       		.byte	0x91
+ 27129 2d99 B052     		.sleb128 -5840
+ 27130 2d9b 34       		.uleb128 0x34
+ 27131 2d9c 380D0000 		.long	0xd38
+ 27132 2da0 03       		.byte	0x3
+ 27133 2da1 91       		.byte	0x91
+ 27134 2da2 AC52     		.sleb128 -5844
+ 27135 2da4 31       		.uleb128 0x31
+ 27136 2da5 4F0D0000 		.long	0xd4f
+ 27137 2da9 00000000 		.quad	.LBB968
+
GAS LISTING /tmp/ccjbMjHD.s 			page 757
+
+
+ 27137      00000000 
+ 27138 2db1 00000000 		.quad	.LBE968
+ 27138      00000000 
+ 27139 2db9 02       		.byte	0x2
+ 27140 2dba 5603     		.value	0x356
+ 27141 2dbc D32D0000 		.long	0x2dd3
+ 27142 2dc0 32       		.uleb128 0x32
+ 27143 2dc1 6A0D0000 		.long	0xd6a
+ 27144 2dc5 03       		.byte	0x3
+ 27145 2dc6 91       		.byte	0x91
+ 27146 2dc7 F052     		.sleb128 -5776
+ 27147 2dc9 32       		.uleb128 0x32
+ 27148 2dca 600D0000 		.long	0xd60
+ 27149 2dce 03       		.byte	0x3
+ 27150 2dcf 91       		.byte	0x91
+ 27151 2dd0 8053     		.sleb128 -5760
+ 27152 2dd2 00       		.byte	0x0
+ 27153 2dd3 31       		.uleb128 0x31
+ 27154 2dd4 750D0000 		.long	0xd75
+ 27155 2dd8 00000000 		.quad	.LBB970
+ 27155      00000000 
+ 27156 2de0 00000000 		.quad	.LBE970
+ 27156      00000000 
+ 27157 2de8 02       		.byte	0x2
+ 27158 2de9 5903     		.value	0x359
+ 27159 2deb 022E0000 		.long	0x2e02
+ 27160 2def 32       		.uleb128 0x32
+ 27161 2df0 930D0000 		.long	0xd93
+ 27162 2df4 03       		.byte	0x3
+ 27163 2df5 91       		.byte	0x91
+ 27164 2df6 9C53     		.sleb128 -5732
+ 27165 2df8 32       		.uleb128 0x32
+ 27166 2df9 870D0000 		.long	0xd87
+ 27167 2dfd 03       		.byte	0x3
+ 27168 2dfe 91       		.byte	0x91
+ 27169 2dff A053     		.sleb128 -5728
+ 27170 2e01 00       		.byte	0x0
+ 27171 2e02 31       		.uleb128 0x31
+ 27172 2e03 4F0D0000 		.long	0xd4f
+ 27173 2e07 00000000 		.quad	.LBB972
+ 27173      00000000 
+ 27174 2e0f 00000000 		.quad	.LBE972
+ 27174      00000000 
+ 27175 2e17 02       		.byte	0x2
+ 27176 2e18 5B03     		.value	0x35b
+ 27177 2e1a 312E0000 		.long	0x2e31
+ 27178 2e1e 32       		.uleb128 0x32
+ 27179 2e1f 6A0D0000 		.long	0xd6a
+ 27180 2e23 03       		.byte	0x3
+ 27181 2e24 91       		.byte	0x91
+ 27182 2e25 B053     		.sleb128 -5712
+ 27183 2e27 32       		.uleb128 0x32
+ 27184 2e28 600D0000 		.long	0xd60
+ 27185 2e2c 03       		.byte	0x3
+ 27186 2e2d 91       		.byte	0x91
+ 27187 2e2e C053     		.sleb128 -5696
+ 27188 2e30 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 758
+
+
+ 27189 2e31 31       		.uleb128 0x31
+ 27190 2e32 A00D0000 		.long	0xda0
+ 27191 2e36 00000000 		.quad	.LBB974
+ 27191      00000000 
+ 27192 2e3e 00000000 		.quad	.LBE974
+ 27192      00000000 
+ 27193 2e46 02       		.byte	0x2
+ 27194 2e47 6403     		.value	0x364
+ 27195 2e49 8B2E0000 		.long	0x2e8b
+ 27196 2e4d 32       		.uleb128 0x32
+ 27197 2e4e BE0D0000 		.long	0xdbe
+ 27198 2e52 03       		.byte	0x3
+ 27199 2e53 91       		.byte	0x91
+ 27200 2e54 D053     		.sleb128 -5680
+ 27201 2e56 32       		.uleb128 0x32
+ 27202 2e57 B20D0000 		.long	0xdb2
+ 27203 2e5b 03       		.byte	0x3
+ 27204 2e5c 91       		.byte	0x91
+ 27205 2e5d E053     		.sleb128 -5664
+ 27206 2e5f 35       		.uleb128 0x35
+ 27207 2e60 CB0D0000 		.long	0xdcb
+ 27208 2e64 00000000 		.quad	.LBB976
+ 27208      00000000 
+ 27209 2e6c 00000000 		.quad	.LBE976
+ 27209      00000000 
+ 27210 2e74 02       		.byte	0x2
+ 27211 2e75 7501     		.value	0x175
+ 27212 2e77 32       		.uleb128 0x32
+ 27213 2e78 E90D0000 		.long	0xde9
+ 27214 2e7c 03       		.byte	0x3
+ 27215 2e7d 91       		.byte	0x91
+ 27216 2e7e F053     		.sleb128 -5648
+ 27217 2e80 32       		.uleb128 0x32
+ 27218 2e81 DD0D0000 		.long	0xddd
+ 27219 2e85 03       		.byte	0x3
+ 27220 2e86 91       		.byte	0x91
+ 27221 2e87 8054     		.sleb128 -5632
+ 27222 2e89 00       		.byte	0x0
+ 27223 2e8a 00       		.byte	0x0
+ 27224 2e8b 31       		.uleb128 0x31
+ 27225 2e8c FB0D0000 		.long	0xdfb
+ 27226 2e90 00000000 		.quad	.LBB978
+ 27226      00000000 
+ 27227 2e98 00000000 		.quad	.LBE978
+ 27227      00000000 
+ 27228 2ea0 02       		.byte	0x2
+ 27229 2ea1 6603     		.value	0x366
+ 27230 2ea3 BA2E0000 		.long	0x2eba
+ 27231 2ea7 32       		.uleb128 0x32
+ 27232 2ea8 160E0000 		.long	0xe16
+ 27233 2eac 03       		.byte	0x3
+ 27234 2ead 91       		.byte	0x91
+ 27235 2eae 9054     		.sleb128 -5616
+ 27236 2eb0 32       		.uleb128 0x32
+ 27237 2eb1 0C0E0000 		.long	0xe0c
+ 27238 2eb5 03       		.byte	0x3
+ 27239 2eb6 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 759
+
+
+ 27240 2eb7 A054     		.sleb128 -5600
+ 27241 2eb9 00       		.byte	0x0
+ 27242 2eba 31       		.uleb128 0x31
+ 27243 2ebb A00D0000 		.long	0xda0
+ 27244 2ebf 00000000 		.quad	.LBB980
+ 27244      00000000 
+ 27245 2ec7 00000000 		.quad	.LBE980
+ 27245      00000000 
+ 27246 2ecf 02       		.byte	0x2
+ 27247 2ed0 6803     		.value	0x368
+ 27248 2ed2 142F0000 		.long	0x2f14
+ 27249 2ed6 32       		.uleb128 0x32
+ 27250 2ed7 BE0D0000 		.long	0xdbe
+ 27251 2edb 03       		.byte	0x3
+ 27252 2edc 91       		.byte	0x91
+ 27253 2edd B054     		.sleb128 -5584
+ 27254 2edf 32       		.uleb128 0x32
+ 27255 2ee0 B20D0000 		.long	0xdb2
+ 27256 2ee4 03       		.byte	0x3
+ 27257 2ee5 91       		.byte	0x91
+ 27258 2ee6 C054     		.sleb128 -5568
+ 27259 2ee8 35       		.uleb128 0x35
+ 27260 2ee9 CB0D0000 		.long	0xdcb
+ 27261 2eed 00000000 		.quad	.LBB982
+ 27261      00000000 
+ 27262 2ef5 00000000 		.quad	.LBE982
+ 27262      00000000 
+ 27263 2efd 02       		.byte	0x2
+ 27264 2efe 7501     		.value	0x175
+ 27265 2f00 32       		.uleb128 0x32
+ 27266 2f01 E90D0000 		.long	0xde9
+ 27267 2f05 03       		.byte	0x3
+ 27268 2f06 91       		.byte	0x91
+ 27269 2f07 D054     		.sleb128 -5552
+ 27270 2f09 32       		.uleb128 0x32
+ 27271 2f0a DD0D0000 		.long	0xddd
+ 27272 2f0e 03       		.byte	0x3
+ 27273 2f0f 91       		.byte	0x91
+ 27274 2f10 E054     		.sleb128 -5536
+ 27275 2f12 00       		.byte	0x0
+ 27276 2f13 00       		.byte	0x0
+ 27277 2f14 31       		.uleb128 0x31
+ 27278 2f15 FB0D0000 		.long	0xdfb
+ 27279 2f19 00000000 		.quad	.LBB984
+ 27279      00000000 
+ 27280 2f21 00000000 		.quad	.LBE984
+ 27280      00000000 
+ 27281 2f29 02       		.byte	0x2
+ 27282 2f2a 6A03     		.value	0x36a
+ 27283 2f2c 432F0000 		.long	0x2f43
+ 27284 2f30 32       		.uleb128 0x32
+ 27285 2f31 160E0000 		.long	0xe16
+ 27286 2f35 03       		.byte	0x3
+ 27287 2f36 91       		.byte	0x91
+ 27288 2f37 F054     		.sleb128 -5520
+ 27289 2f39 32       		.uleb128 0x32
+ 27290 2f3a 0C0E0000 		.long	0xe0c
+
GAS LISTING /tmp/ccjbMjHD.s 			page 760
+
+
+ 27291 2f3e 03       		.byte	0x3
+ 27292 2f3f 91       		.byte	0x91
+ 27293 2f40 8055     		.sleb128 -5504
+ 27294 2f42 00       		.byte	0x0
+ 27295 2f43 31       		.uleb128 0x31
+ 27296 2f44 210E0000 		.long	0xe21
+ 27297 2f48 00000000 		.quad	.LBB986
+ 27297      00000000 
+ 27298 2f50 00000000 		.quad	.LBE986
+ 27298      00000000 
+ 27299 2f58 02       		.byte	0x2
+ 27300 2f59 6C03     		.value	0x36c
+ 27301 2f5b 722F0000 		.long	0x2f72
+ 27302 2f5f 32       		.uleb128 0x32
+ 27303 2f60 3E0E0000 		.long	0xe3e
+ 27304 2f64 03       		.byte	0x3
+ 27305 2f65 91       		.byte	0x91
+ 27306 2f66 9055     		.sleb128 -5488
+ 27307 2f68 32       		.uleb128 0x32
+ 27308 2f69 330E0000 		.long	0xe33
+ 27309 2f6d 03       		.byte	0x3
+ 27310 2f6e 91       		.byte	0x91
+ 27311 2f6f A055     		.sleb128 -5472
+ 27312 2f71 00       		.byte	0x0
+ 27313 2f72 35       		.uleb128 0x35
+ 27314 2f73 4F0D0000 		.long	0xd4f
+ 27315 2f77 00000000 		.quad	.LBB988
+ 27315      00000000 
+ 27316 2f7f 00000000 		.quad	.LBE988
+ 27316      00000000 
+ 27317 2f87 02       		.byte	0x2
+ 27318 2f88 6E03     		.value	0x36e
+ 27319 2f8a 32       		.uleb128 0x32
+ 27320 2f8b 6A0D0000 		.long	0xd6a
+ 27321 2f8f 03       		.byte	0x3
+ 27322 2f90 91       		.byte	0x91
+ 27323 2f91 B055     		.sleb128 -5456
+ 27324 2f93 32       		.uleb128 0x32
+ 27325 2f94 600D0000 		.long	0xd60
+ 27326 2f98 03       		.byte	0x3
+ 27327 2f99 91       		.byte	0x91
+ 27328 2f9a C055     		.sleb128 -5440
+ 27329 2f9c 00       		.byte	0x0
+ 27330 2f9d 00       		.byte	0x0
+ 27331 2f9e 00       		.byte	0x0
+ 27332 2f9f 00       		.byte	0x0
+ 27333 2fa0 36       		.uleb128 0x36
+ 27334 2fa1 00000000 		.quad	.LBB990
+ 27334      00000000 
+ 27335 2fa9 00000000 		.quad	.LBE990
+ 27335      00000000 
+ 27336 2fb1 C02F0000 		.long	0x2fc0
+ 27337 2fb5 34       		.uleb128 0x34
+ 27338 2fb6 1C0C0000 		.long	0xc1c
+ 27339 2fba 04       		.byte	0x4
+ 27340 2fbb 91       		.byte	0x91
+ 27341 2fbc A0AF7F   		.sleb128 -10336
+
GAS LISTING /tmp/ccjbMjHD.s 			page 761
+
+
+ 27342 2fbf 00       		.byte	0x0
+ 27343 2fc0 31       		.uleb128 0x31
+ 27344 2fc1 4A0E0000 		.long	0xe4a
+ 27345 2fc5 00000000 		.quad	.LBB991
+ 27345      00000000 
+ 27346 2fcd 00000000 		.quad	.LBE991
+ 27346      00000000 
+ 27347 2fd5 02       		.byte	0x2
+ 27348 2fd6 9406     		.value	0x694
+ 27349 2fd8 5D300000 		.long	0x305d
+ 27350 2fdc 32       		.uleb128 0x32
+ 27351 2fdd 5C0E0000 		.long	0xe5c
+ 27352 2fe1 03       		.byte	0x3
+ 27353 2fe2 91       		.byte	0x91
+ 27354 2fe3 D055     		.sleb128 -5424
+ 27355 2fe5 33       		.uleb128 0x33
+ 27356 2fe6 00000000 		.quad	.LBB992
+ 27356      00000000 
+ 27357 2fee 00000000 		.quad	.LBE992
+ 27357      00000000 
+ 27358 2ff6 34       		.uleb128 0x34
+ 27359 2ff7 680E0000 		.long	0xe68
+ 27360 2ffb 09       		.byte	0x9
+ 27361 2ffc 03       		.byte	0x3
+ 27362 2ffd 00000000 		.quad	ShiftRowTable.7385
+ 27362      00000000 
+ 27363 3005 35       		.uleb128 0x35
+ 27364 3006 A00D0000 		.long	0xda0
+ 27365 300a 00000000 		.quad	.LBB993
+ 27365      00000000 
+ 27366 3012 00000000 		.quad	.LBE993
+ 27366      00000000 
+ 27367 301a 02       		.byte	0x2
+ 27368 301b 9B02     		.value	0x29b
+ 27369 301d 32       		.uleb128 0x32
+ 27370 301e BE0D0000 		.long	0xdbe
+ 27371 3022 03       		.byte	0x3
+ 27372 3023 91       		.byte	0x91
+ 27373 3024 E055     		.sleb128 -5408
+ 27374 3026 32       		.uleb128 0x32
+ 27375 3027 B20D0000 		.long	0xdb2
+ 27376 302b 03       		.byte	0x3
+ 27377 302c 91       		.byte	0x91
+ 27378 302d F055     		.sleb128 -5392
+ 27379 302f 35       		.uleb128 0x35
+ 27380 3030 CB0D0000 		.long	0xdcb
+ 27381 3034 00000000 		.quad	.LBB995
+ 27381      00000000 
+ 27382 303c 00000000 		.quad	.LBE995
+ 27382      00000000 
+ 27383 3044 02       		.byte	0x2
+ 27384 3045 7501     		.value	0x175
+ 27385 3047 32       		.uleb128 0x32
+ 27386 3048 E90D0000 		.long	0xde9
+ 27387 304c 03       		.byte	0x3
+ 27388 304d 91       		.byte	0x91
+ 27389 304e 8056     		.sleb128 -5376
+
GAS LISTING /tmp/ccjbMjHD.s 			page 762
+
+
+ 27390 3050 32       		.uleb128 0x32
+ 27391 3051 DD0D0000 		.long	0xddd
+ 27392 3055 03       		.byte	0x3
+ 27393 3056 91       		.byte	0x91
+ 27394 3057 9056     		.sleb128 -5360
+ 27395 3059 00       		.byte	0x0
+ 27396 305a 00       		.byte	0x0
+ 27397 305b 00       		.byte	0x0
+ 27398 305c 00       		.byte	0x0
+ 27399 305d 36       		.uleb128 0x36
+ 27400 305e 00000000 		.quad	.LBB997
+ 27400      00000000 
+ 27401 3066 00000000 		.quad	.LBE997
+ 27401      00000000 
+ 27402 306e 7D300000 		.long	0x307d
+ 27403 3072 34       		.uleb128 0x34
+ 27404 3073 2C0C0000 		.long	0xc2c
+ 27405 3077 04       		.byte	0x4
+ 27406 3078 91       		.byte	0x91
+ 27407 3079 90AF7F   		.sleb128 -10352
+ 27408 307c 00       		.byte	0x0
+ 27409 307d 31       		.uleb128 0x31
+ 27410 307e 860E0000 		.long	0xe86
+ 27411 3082 00000000 		.quad	.LBB998
+ 27411      00000000 
+ 27412 308a 00000000 		.quad	.LBE998
+ 27412      00000000 
+ 27413 3092 02       		.byte	0x2
+ 27414 3093 9606     		.value	0x696
+ 27415 3095 AC300000 		.long	0x30ac
+ 27416 3099 32       		.uleb128 0x32
+ 27417 309a A10E0000 		.long	0xea1
+ 27418 309e 03       		.byte	0x3
+ 27419 309f 91       		.byte	0x91
+ 27420 30a0 A056     		.sleb128 -5344
+ 27421 30a2 32       		.uleb128 0x32
+ 27422 30a3 970E0000 		.long	0xe97
+ 27423 30a7 03       		.byte	0x3
+ 27424 30a8 91       		.byte	0x91
+ 27425 30a9 B056     		.sleb128 -5328
+ 27426 30ab 00       		.byte	0x0
+ 27427 30ac 36       		.uleb128 0x36
+ 27428 30ad 00000000 		.quad	.LBB1000
+ 27428      00000000 
+ 27429 30b5 00000000 		.quad	.LBE1000
+ 27429      00000000 
+ 27430 30bd CC300000 		.long	0x30cc
+ 27431 30c1 34       		.uleb128 0x34
+ 27432 30c2 3C0C0000 		.long	0xc3c
+ 27433 30c6 04       		.byte	0x4
+ 27434 30c7 91       		.byte	0x91
+ 27435 30c8 80AF7F   		.sleb128 -10368
+ 27436 30cb 00       		.byte	0x0
+ 27437 30cc 31       		.uleb128 0x31
+ 27438 30cd AC0E0000 		.long	0xeac
+ 27439 30d1 00000000 		.quad	.LBB1001
+ 27439      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 763
+
+
+ 27440 30d9 00000000 		.quad	.LBE1001
+ 27440      00000000 
+ 27441 30e1 02       		.byte	0x2
+ 27442 30e2 9806     		.value	0x698
+ 27443 30e4 1D310000 		.long	0x311d
+ 27444 30e8 32       		.uleb128 0x32
+ 27445 30e9 BE0E0000 		.long	0xebe
+ 27446 30ed 03       		.byte	0x3
+ 27447 30ee 91       		.byte	0x91
+ 27448 30ef C056     		.sleb128 -5312
+ 27449 30f1 35       		.uleb128 0x35
+ 27450 30f2 CB0E0000 		.long	0xecb
+ 27451 30f6 00000000 		.quad	.LBB1003
+ 27451      00000000 
+ 27452 30fe 00000000 		.quad	.LBE1003
+ 27452      00000000 
+ 27453 3106 02       		.byte	0x2
+ 27454 3107 4905     		.value	0x549
+ 27455 3109 32       		.uleb128 0x32
+ 27456 310a E90E0000 		.long	0xee9
+ 27457 310e 03       		.byte	0x3
+ 27458 310f 91       		.byte	0x91
+ 27459 3110 DC56     		.sleb128 -5284
+ 27460 3112 32       		.uleb128 0x32
+ 27461 3113 DD0E0000 		.long	0xedd
+ 27462 3117 03       		.byte	0x3
+ 27463 3118 91       		.byte	0x91
+ 27464 3119 E056     		.sleb128 -5280
+ 27465 311b 00       		.byte	0x0
+ 27466 311c 00       		.byte	0x0
+ 27467 311d 33       		.uleb128 0x33
+ 27468 311e 00000000 		.quad	.LBB1005
+ 27468      00000000 
+ 27469 3126 00000000 		.quad	.LBE1005
+ 27469      00000000 
+ 27470 312e 34       		.uleb128 0x34
+ 27471 312f 480C0000 		.long	0xc48
+ 27472 3133 04       		.byte	0x4
+ 27473 3134 91       		.byte	0x91
+ 27474 3135 F0AE7F   		.sleb128 -10384
+ 27475 3138 00       		.byte	0x0
+ 27476 3139 00       		.byte	0x0
+ 27477 313a 00       		.byte	0x0
+ 27478 313b 31       		.uleb128 0x31
+ 27479 313c F60E0000 		.long	0xef6
+ 27480 3140 00000000 		.quad	.LBB1006
+ 27480      00000000 
+ 27481 3148 00000000 		.quad	.LBE1006
+ 27481      00000000 
+ 27482 3150 02       		.byte	0x2
+ 27483 3151 D406     		.value	0x6d4
+ 27484 3153 50330000 		.long	0x3350
+ 27485 3157 32       		.uleb128 0x32
+ 27486 3158 080F0000 		.long	0xf08
+ 27487 315c 03       		.byte	0x3
+ 27488 315d 91       		.byte	0x91
+ 27489 315e F056     		.sleb128 -5264
+
GAS LISTING /tmp/ccjbMjHD.s 			page 764
+
+
+ 27490 3160 33       		.uleb128 0x33
+ 27491 3161 00000000 		.quad	.LBB1007
+ 27491      00000000 
+ 27492 3169 00000000 		.quad	.LBE1007
+ 27492      00000000 
+ 27493 3171 34       		.uleb128 0x34
+ 27494 3172 140F0000 		.long	0xf14
+ 27495 3176 04       		.byte	0x4
+ 27496 3177 76       		.byte	0x76
+ 27497 3178 F0AA7F   		.sleb128 -10896
+ 27498 317b 31       		.uleb128 0x31
+ 27499 317c 210F0000 		.long	0xf21
+ 27500 3180 00000000 		.quad	.LBB1008
+ 27500      00000000 
+ 27501 3188 00000000 		.quad	.LBE1008
+ 27501      00000000 
+ 27502 3190 02       		.byte	0x2
+ 27503 3191 1F06     		.value	0x61f
+ 27504 3193 18320000 		.long	0x3218
+ 27505 3197 32       		.uleb128 0x32
+ 27506 3198 330F0000 		.long	0xf33
+ 27507 319c 03       		.byte	0x3
+ 27508 319d 91       		.byte	0x91
+ 27509 319e 8057     		.sleb128 -5248
+ 27510 31a0 33       		.uleb128 0x33
+ 27511 31a1 00000000 		.quad	.LBB1009
+ 27511      00000000 
+ 27512 31a9 00000000 		.quad	.LBE1009
+ 27512      00000000 
+ 27513 31b1 34       		.uleb128 0x34
+ 27514 31b2 3F0F0000 		.long	0xf3f
+ 27515 31b6 09       		.byte	0x9
+ 27516 31b7 03       		.byte	0x3
+ 27517 31b8 00000000 		.quad	mask.7943
+ 27517      00000000 
+ 27518 31c0 35       		.uleb128 0x35
+ 27519 31c1 A00D0000 		.long	0xda0
+ 27520 31c5 00000000 		.quad	.LBB1010
+ 27520      00000000 
+ 27521 31cd 00000000 		.quad	.LBE1010
+ 27521      00000000 
+ 27522 31d5 02       		.byte	0x2
+ 27523 31d6 FE04     		.value	0x4fe
+ 27524 31d8 32       		.uleb128 0x32
+ 27525 31d9 BE0D0000 		.long	0xdbe
+ 27526 31dd 03       		.byte	0x3
+ 27527 31de 91       		.byte	0x91
+ 27528 31df 9057     		.sleb128 -5232
+ 27529 31e1 32       		.uleb128 0x32
+ 27530 31e2 B20D0000 		.long	0xdb2
+ 27531 31e6 03       		.byte	0x3
+ 27532 31e7 91       		.byte	0x91
+ 27533 31e8 A057     		.sleb128 -5216
+ 27534 31ea 35       		.uleb128 0x35
+ 27535 31eb CB0D0000 		.long	0xdcb
+ 27536 31ef 00000000 		.quad	.LBB1012
+ 27536      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 765
+
+
+ 27537 31f7 00000000 		.quad	.LBE1012
+ 27537      00000000 
+ 27538 31ff 02       		.byte	0x2
+ 27539 3200 7501     		.value	0x175
+ 27540 3202 32       		.uleb128 0x32
+ 27541 3203 E90D0000 		.long	0xde9
+ 27542 3207 03       		.byte	0x3
+ 27543 3208 91       		.byte	0x91
+ 27544 3209 B057     		.sleb128 -5200
+ 27545 320b 32       		.uleb128 0x32
+ 27546 320c DD0D0000 		.long	0xddd
+ 27547 3210 03       		.byte	0x3
+ 27548 3211 91       		.byte	0x91
+ 27549 3212 C057     		.sleb128 -5184
+ 27550 3214 00       		.byte	0x0
+ 27551 3215 00       		.byte	0x0
+ 27552 3216 00       		.byte	0x0
+ 27553 3217 00       		.byte	0x0
+ 27554 3218 31       		.uleb128 0x31
+ 27555 3219 210F0000 		.long	0xf21
+ 27556 321d 00000000 		.quad	.LBB1014
+ 27556      00000000 
+ 27557 3225 00000000 		.quad	.LBE1014
+ 27557      00000000 
+ 27558 322d 02       		.byte	0x2
+ 27559 322e 2006     		.value	0x620
+ 27560 3230 B5320000 		.long	0x32b5
+ 27561 3234 32       		.uleb128 0x32
+ 27562 3235 330F0000 		.long	0xf33
+ 27563 3239 03       		.byte	0x3
+ 27564 323a 91       		.byte	0x91
+ 27565 323b D057     		.sleb128 -5168
+ 27566 323d 33       		.uleb128 0x33
+ 27567 323e 00000000 		.quad	.LBB1015
+ 27567      00000000 
+ 27568 3246 00000000 		.quad	.LBE1015
+ 27568      00000000 
+ 27569 324e 34       		.uleb128 0x34
+ 27570 324f 3F0F0000 		.long	0xf3f
+ 27571 3253 09       		.byte	0x9
+ 27572 3254 03       		.byte	0x3
+ 27573 3255 00000000 		.quad	mask.7943
+ 27573      00000000 
+ 27574 325d 35       		.uleb128 0x35
+ 27575 325e A00D0000 		.long	0xda0
+ 27576 3262 00000000 		.quad	.LBB1016
+ 27576      00000000 
+ 27577 326a 00000000 		.quad	.LBE1016
+ 27577      00000000 
+ 27578 3272 02       		.byte	0x2
+ 27579 3273 FE04     		.value	0x4fe
+ 27580 3275 32       		.uleb128 0x32
+ 27581 3276 BE0D0000 		.long	0xdbe
+ 27582 327a 03       		.byte	0x3
+ 27583 327b 91       		.byte	0x91
+ 27584 327c E057     		.sleb128 -5152
+ 27585 327e 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 766
+
+
+ 27586 327f B20D0000 		.long	0xdb2
+ 27587 3283 03       		.byte	0x3
+ 27588 3284 91       		.byte	0x91
+ 27589 3285 F057     		.sleb128 -5136
+ 27590 3287 35       		.uleb128 0x35
+ 27591 3288 CB0D0000 		.long	0xdcb
+ 27592 328c 00000000 		.quad	.LBB1018
+ 27592      00000000 
+ 27593 3294 00000000 		.quad	.LBE1018
+ 27593      00000000 
+ 27594 329c 02       		.byte	0x2
+ 27595 329d 7501     		.value	0x175
+ 27596 329f 32       		.uleb128 0x32
+ 27597 32a0 E90D0000 		.long	0xde9
+ 27598 32a4 03       		.byte	0x3
+ 27599 32a5 91       		.byte	0x91
+ 27600 32a6 8058     		.sleb128 -5120
+ 27601 32a8 32       		.uleb128 0x32
+ 27602 32a9 DD0D0000 		.long	0xddd
+ 27603 32ad 03       		.byte	0x3
+ 27604 32ae 91       		.byte	0x91
+ 27605 32af 9058     		.sleb128 -5104
+ 27606 32b1 00       		.byte	0x0
+ 27607 32b2 00       		.byte	0x0
+ 27608 32b3 00       		.byte	0x0
+ 27609 32b4 00       		.byte	0x0
+ 27610 32b5 35       		.uleb128 0x35
+ 27611 32b6 210F0000 		.long	0xf21
+ 27612 32ba 00000000 		.quad	.LBB1020
+ 27612      00000000 
+ 27613 32c2 00000000 		.quad	.LBE1020
+ 27613      00000000 
+ 27614 32ca 02       		.byte	0x2
+ 27615 32cb 2106     		.value	0x621
+ 27616 32cd 32       		.uleb128 0x32
+ 27617 32ce 330F0000 		.long	0xf33
+ 27618 32d2 03       		.byte	0x3
+ 27619 32d3 91       		.byte	0x91
+ 27620 32d4 A058     		.sleb128 -5088
+ 27621 32d6 33       		.uleb128 0x33
+ 27622 32d7 00000000 		.quad	.LBB1021
+ 27622      00000000 
+ 27623 32df 00000000 		.quad	.LBE1021
+ 27623      00000000 
+ 27624 32e7 34       		.uleb128 0x34
+ 27625 32e8 3F0F0000 		.long	0xf3f
+ 27626 32ec 09       		.byte	0x9
+ 27627 32ed 03       		.byte	0x3
+ 27628 32ee 00000000 		.quad	mask.7943
+ 27628      00000000 
+ 27629 32f6 35       		.uleb128 0x35
+ 27630 32f7 A00D0000 		.long	0xda0
+ 27631 32fb 00000000 		.quad	.LBB1022
+ 27631      00000000 
+ 27632 3303 00000000 		.quad	.LBE1022
+ 27632      00000000 
+ 27633 330b 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 767
+
+
+ 27634 330c FE04     		.value	0x4fe
+ 27635 330e 32       		.uleb128 0x32
+ 27636 330f BE0D0000 		.long	0xdbe
+ 27637 3313 03       		.byte	0x3
+ 27638 3314 91       		.byte	0x91
+ 27639 3315 B058     		.sleb128 -5072
+ 27640 3317 32       		.uleb128 0x32
+ 27641 3318 B20D0000 		.long	0xdb2
+ 27642 331c 03       		.byte	0x3
+ 27643 331d 91       		.byte	0x91
+ 27644 331e C058     		.sleb128 -5056
+ 27645 3320 35       		.uleb128 0x35
+ 27646 3321 CB0D0000 		.long	0xdcb
+ 27647 3325 00000000 		.quad	.LBB1024
+ 27647      00000000 
+ 27648 332d 00000000 		.quad	.LBE1024
+ 27648      00000000 
+ 27649 3335 02       		.byte	0x2
+ 27650 3336 7501     		.value	0x175
+ 27651 3338 32       		.uleb128 0x32
+ 27652 3339 E90D0000 		.long	0xde9
+ 27653 333d 03       		.byte	0x3
+ 27654 333e 91       		.byte	0x91
+ 27655 333f D058     		.sleb128 -5040
+ 27656 3341 32       		.uleb128 0x32
+ 27657 3342 DD0D0000 		.long	0xddd
+ 27658 3346 03       		.byte	0x3
+ 27659 3347 91       		.byte	0x91
+ 27660 3348 E058     		.sleb128 -5024
+ 27661 334a 00       		.byte	0x0
+ 27662 334b 00       		.byte	0x0
+ 27663 334c 00       		.byte	0x0
+ 27664 334d 00       		.byte	0x0
+ 27665 334e 00       		.byte	0x0
+ 27666 334f 00       		.byte	0x0
+ 27667 3350 31       		.uleb128 0x31
+ 27668 3351 D50B0000 		.long	0xbd5
+ 27669 3355 00000000 		.quad	.LBB1026
+ 27669      00000000 
+ 27670 335d 00000000 		.quad	.LBE1026
+ 27670      00000000 
+ 27671 3365 02       		.byte	0x2
+ 27672 3366 D506     		.value	0x6d5
+ 27673 3368 33380000 		.long	0x3833
+ 27674 336c 32       		.uleb128 0x32
+ 27675 336d F30B0000 		.long	0xbf3
+ 27676 3371 03       		.byte	0x3
+ 27677 3372 91       		.byte	0x91
+ 27678 3373 FC58     		.sleb128 -4996
+ 27679 3375 32       		.uleb128 0x32
+ 27680 3376 E70B0000 		.long	0xbe7
+ 27681 337a 03       		.byte	0x3
+ 27682 337b 91       		.byte	0x91
+ 27683 337c 8059     		.sleb128 -4992
+ 27684 337e 33       		.uleb128 0x33
+ 27685 337f 00000000 		.quad	.LBB1027
+ 27685      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 768
+
+
+ 27686 3387 00000000 		.quad	.LBE1027
+ 27686      00000000 
+ 27687 338f 34       		.uleb128 0x34
+ 27688 3390 FF0B0000 		.long	0xbff
+ 27689 3394 04       		.byte	0x4
+ 27690 3395 76       		.byte	0x76
+ 27691 3396 90AB7F   		.sleb128 -10864
+ 27692 3399 34       		.uleb128 0x34
+ 27693 339a 0B0C0000 		.long	0xc0b
+ 27694 339e 04       		.byte	0x4
+ 27695 339f 76       		.byte	0x76
+ 27696 33a0 80AB7F   		.sleb128 -10880
+ 27697 33a3 31       		.uleb128 0x31
+ 27698 33a4 540C0000 		.long	0xc54
+ 27699 33a8 00000000 		.quad	.LBB1028
+ 27699      00000000 
+ 27700 33b0 00000000 		.quad	.LBE1028
+ 27700      00000000 
+ 27701 33b8 02       		.byte	0x2
+ 27702 33b9 9106     		.value	0x691
+ 27703 33bb 0F340000 		.long	0x340f
+ 27704 33bf 32       		.uleb128 0x32
+ 27705 33c0 7E0C0000 		.long	0xc7e
+ 27706 33c4 03       		.byte	0x3
+ 27707 33c5 91       		.byte	0x91
+ 27708 33c6 9859     		.sleb128 -4968
+ 27709 33c8 32       		.uleb128 0x32
+ 27710 33c9 720C0000 		.long	0xc72
+ 27711 33cd 03       		.byte	0x3
+ 27712 33ce 91       		.byte	0x91
+ 27713 33cf 9C59     		.sleb128 -4964
+ 27714 33d1 32       		.uleb128 0x32
+ 27715 33d2 660C0000 		.long	0xc66
+ 27716 33d6 03       		.byte	0x3
+ 27717 33d7 91       		.byte	0x91
+ 27718 33d8 A059     		.sleb128 -4960
+ 27719 33da 35       		.uleb128 0x35
+ 27720 33db 8B0C0000 		.long	0xc8b
+ 27721 33df 00000000 		.quad	.LBB1030
+ 27721      00000000 
+ 27722 33e7 00000000 		.quad	.LBE1030
+ 27722      00000000 
+ 27723 33ef 02       		.byte	0x2
+ 27724 33f0 0702     		.value	0x207
+ 27725 33f2 32       		.uleb128 0x32
+ 27726 33f3 B40C0000 		.long	0xcb4
+ 27727 33f7 03       		.byte	0x3
+ 27728 33f8 91       		.byte	0x91
+ 27729 33f9 B859     		.sleb128 -4936
+ 27730 33fb 32       		.uleb128 0x32
+ 27731 33fc A90C0000 		.long	0xca9
+ 27732 3400 03       		.byte	0x3
+ 27733 3401 91       		.byte	0x91
+ 27734 3402 BC59     		.sleb128 -4932
+ 27735 3404 32       		.uleb128 0x32
+ 27736 3405 9D0C0000 		.long	0xc9d
+ 27737 3409 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 769
+
+
+ 27738 340a 91       		.byte	0x91
+ 27739 340b C059     		.sleb128 -4928
+ 27740 340d 00       		.byte	0x0
+ 27741 340e 00       		.byte	0x0
+ 27742 340f 31       		.uleb128 0x31
+ 27743 3410 C10C0000 		.long	0xcc1
+ 27744 3414 00000000 		.quad	.LBB1032
+ 27744      00000000 
+ 27745 341c 00000000 		.quad	.LBE1032
+ 27745      00000000 
+ 27746 3424 02       		.byte	0x2
+ 27747 3425 9206     		.value	0x692
+ 27748 3427 98360000 		.long	0x3698
+ 27749 342b 32       		.uleb128 0x32
+ 27750 342c D30C0000 		.long	0xcd3
+ 27751 3430 03       		.byte	0x3
+ 27752 3431 91       		.byte	0x91
+ 27753 3432 D059     		.sleb128 -4912
+ 27754 3434 35       		.uleb128 0x35
+ 27755 3435 E00C0000 		.long	0xce0
+ 27756 3439 00000000 		.quad	.LBB1034
+ 27756      00000000 
+ 27757 3441 00000000 		.quad	.LBE1034
+ 27757      00000000 
+ 27758 3449 02       		.byte	0x2
+ 27759 344a 7D03     		.value	0x37d
+ 27760 344c 32       		.uleb128 0x32
+ 27761 344d FE0C0000 		.long	0xcfe
+ 27762 3451 03       		.byte	0x3
+ 27763 3452 91       		.byte	0x91
+ 27764 3453 E859     		.sleb128 -4888
+ 27765 3455 32       		.uleb128 0x32
+ 27766 3456 F20C0000 		.long	0xcf2
+ 27767 345a 03       		.byte	0x3
+ 27768 345b 91       		.byte	0x91
+ 27769 345c F059     		.sleb128 -4880
+ 27770 345e 33       		.uleb128 0x33
+ 27771 345f 00000000 		.quad	.LBB1035
+ 27771      00000000 
+ 27772 3467 00000000 		.quad	.LBE1035
+ 27772      00000000 
+ 27773 346f 34       		.uleb128 0x34
+ 27774 3470 0A0D0000 		.long	0xd0a
+ 27775 3474 03       		.byte	0x3
+ 27776 3475 91       		.byte	0x91
+ 27777 3476 C05A     		.sleb128 -4800
+ 27778 3478 34       		.uleb128 0x34
+ 27779 3479 150D0000 		.long	0xd15
+ 27780 347d 03       		.byte	0x3
+ 27781 347e 91       		.byte	0x91
+ 27782 347f B05A     		.sleb128 -4816
+ 27783 3481 34       		.uleb128 0x34
+ 27784 3482 200D0000 		.long	0xd20
+ 27785 3486 03       		.byte	0x3
+ 27786 3487 91       		.byte	0x91
+ 27787 3488 A05A     		.sleb128 -4832
+ 27788 348a 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s 			page 770
+
+
+ 27789 348b 2C0D0000 		.long	0xd2c
+ 27790 348f 03       		.byte	0x3
+ 27791 3490 91       		.byte	0x91
+ 27792 3491 905A     		.sleb128 -4848
+ 27793 3493 34       		.uleb128 0x34
+ 27794 3494 380D0000 		.long	0xd38
+ 27795 3498 03       		.byte	0x3
+ 27796 3499 91       		.byte	0x91
+ 27797 349a 8C5A     		.sleb128 -4852
+ 27798 349c 31       		.uleb128 0x31
+ 27799 349d 4F0D0000 		.long	0xd4f
+ 27800 34a1 00000000 		.quad	.LBB1036
+ 27800      00000000 
+ 27801 34a9 00000000 		.quad	.LBE1036
+ 27801      00000000 
+ 27802 34b1 02       		.byte	0x2
+ 27803 34b2 5603     		.value	0x356
+ 27804 34b4 CB340000 		.long	0x34cb
+ 27805 34b8 32       		.uleb128 0x32
+ 27806 34b9 6A0D0000 		.long	0xd6a
+ 27807 34bd 03       		.byte	0x3
+ 27808 34be 91       		.byte	0x91
+ 27809 34bf D05A     		.sleb128 -4784
+ 27810 34c1 32       		.uleb128 0x32
+ 27811 34c2 600D0000 		.long	0xd60
+ 27812 34c6 03       		.byte	0x3
+ 27813 34c7 91       		.byte	0x91
+ 27814 34c8 E05A     		.sleb128 -4768
+ 27815 34ca 00       		.byte	0x0
+ 27816 34cb 31       		.uleb128 0x31
+ 27817 34cc 750D0000 		.long	0xd75
+ 27818 34d0 00000000 		.quad	.LBB1038
+ 27818      00000000 
+ 27819 34d8 00000000 		.quad	.LBE1038
+ 27819      00000000 
+ 27820 34e0 02       		.byte	0x2
+ 27821 34e1 5903     		.value	0x359
+ 27822 34e3 FA340000 		.long	0x34fa
+ 27823 34e7 32       		.uleb128 0x32
+ 27824 34e8 930D0000 		.long	0xd93
+ 27825 34ec 03       		.byte	0x3
+ 27826 34ed 91       		.byte	0x91
+ 27827 34ee FC5A     		.sleb128 -4740
+ 27828 34f0 32       		.uleb128 0x32
+ 27829 34f1 870D0000 		.long	0xd87
+ 27830 34f5 03       		.byte	0x3
+ 27831 34f6 91       		.byte	0x91
+ 27832 34f7 805B     		.sleb128 -4736
+ 27833 34f9 00       		.byte	0x0
+ 27834 34fa 31       		.uleb128 0x31
+ 27835 34fb 4F0D0000 		.long	0xd4f
+ 27836 34ff 00000000 		.quad	.LBB1040
+ 27836      00000000 
+ 27837 3507 00000000 		.quad	.LBE1040
+ 27837      00000000 
+ 27838 350f 02       		.byte	0x2
+ 27839 3510 5B03     		.value	0x35b
+
GAS LISTING /tmp/ccjbMjHD.s 			page 771
+
+
+ 27840 3512 29350000 		.long	0x3529
+ 27841 3516 32       		.uleb128 0x32
+ 27842 3517 6A0D0000 		.long	0xd6a
+ 27843 351b 03       		.byte	0x3
+ 27844 351c 91       		.byte	0x91
+ 27845 351d 905B     		.sleb128 -4720
+ 27846 351f 32       		.uleb128 0x32
+ 27847 3520 600D0000 		.long	0xd60
+ 27848 3524 03       		.byte	0x3
+ 27849 3525 91       		.byte	0x91
+ 27850 3526 A05B     		.sleb128 -4704
+ 27851 3528 00       		.byte	0x0
+ 27852 3529 31       		.uleb128 0x31
+ 27853 352a A00D0000 		.long	0xda0
+ 27854 352e 00000000 		.quad	.LBB1042
+ 27854      00000000 
+ 27855 3536 00000000 		.quad	.LBE1042
+ 27855      00000000 
+ 27856 353e 02       		.byte	0x2
+ 27857 353f 6403     		.value	0x364
+ 27858 3541 83350000 		.long	0x3583
+ 27859 3545 32       		.uleb128 0x32
+ 27860 3546 BE0D0000 		.long	0xdbe
+ 27861 354a 03       		.byte	0x3
+ 27862 354b 91       		.byte	0x91
+ 27863 354c B05B     		.sleb128 -4688
+ 27864 354e 32       		.uleb128 0x32
+ 27865 354f B20D0000 		.long	0xdb2
+ 27866 3553 03       		.byte	0x3
+ 27867 3554 91       		.byte	0x91
+ 27868 3555 C05B     		.sleb128 -4672
+ 27869 3557 35       		.uleb128 0x35
+ 27870 3558 CB0D0000 		.long	0xdcb
+ 27871 355c 00000000 		.quad	.LBB1044
+ 27871      00000000 
+ 27872 3564 00000000 		.quad	.LBE1044
+ 27872      00000000 
+ 27873 356c 02       		.byte	0x2
+ 27874 356d 7501     		.value	0x175
+ 27875 356f 32       		.uleb128 0x32
+ 27876 3570 E90D0000 		.long	0xde9
+ 27877 3574 03       		.byte	0x3
+ 27878 3575 91       		.byte	0x91
+ 27879 3576 D05B     		.sleb128 -4656
+ 27880 3578 32       		.uleb128 0x32
+ 27881 3579 DD0D0000 		.long	0xddd
+ 27882 357d 03       		.byte	0x3
+ 27883 357e 91       		.byte	0x91
+ 27884 357f E05B     		.sleb128 -4640
+ 27885 3581 00       		.byte	0x0
+ 27886 3582 00       		.byte	0x0
+ 27887 3583 31       		.uleb128 0x31
+ 27888 3584 FB0D0000 		.long	0xdfb
+ 27889 3588 00000000 		.quad	.LBB1046
+ 27889      00000000 
+ 27890 3590 00000000 		.quad	.LBE1046
+ 27890      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 772
+
+
+ 27891 3598 02       		.byte	0x2
+ 27892 3599 6603     		.value	0x366
+ 27893 359b B2350000 		.long	0x35b2
+ 27894 359f 32       		.uleb128 0x32
+ 27895 35a0 160E0000 		.long	0xe16
+ 27896 35a4 03       		.byte	0x3
+ 27897 35a5 91       		.byte	0x91
+ 27898 35a6 F05B     		.sleb128 -4624
+ 27899 35a8 32       		.uleb128 0x32
+ 27900 35a9 0C0E0000 		.long	0xe0c
+ 27901 35ad 03       		.byte	0x3
+ 27902 35ae 91       		.byte	0x91
+ 27903 35af 805C     		.sleb128 -4608
+ 27904 35b1 00       		.byte	0x0
+ 27905 35b2 31       		.uleb128 0x31
+ 27906 35b3 A00D0000 		.long	0xda0
+ 27907 35b7 00000000 		.quad	.LBB1048
+ 27907      00000000 
+ 27908 35bf 00000000 		.quad	.LBE1048
+ 27908      00000000 
+ 27909 35c7 02       		.byte	0x2
+ 27910 35c8 6803     		.value	0x368
+ 27911 35ca 0C360000 		.long	0x360c
+ 27912 35ce 32       		.uleb128 0x32
+ 27913 35cf BE0D0000 		.long	0xdbe
+ 27914 35d3 03       		.byte	0x3
+ 27915 35d4 91       		.byte	0x91
+ 27916 35d5 905C     		.sleb128 -4592
+ 27917 35d7 32       		.uleb128 0x32
+ 27918 35d8 B20D0000 		.long	0xdb2
+ 27919 35dc 03       		.byte	0x3
+ 27920 35dd 91       		.byte	0x91
+ 27921 35de A05C     		.sleb128 -4576
+ 27922 35e0 35       		.uleb128 0x35
+ 27923 35e1 CB0D0000 		.long	0xdcb
+ 27924 35e5 00000000 		.quad	.LBB1050
+ 27924      00000000 
+ 27925 35ed 00000000 		.quad	.LBE1050
+ 27925      00000000 
+ 27926 35f5 02       		.byte	0x2
+ 27927 35f6 7501     		.value	0x175
+ 27928 35f8 32       		.uleb128 0x32
+ 27929 35f9 E90D0000 		.long	0xde9
+ 27930 35fd 03       		.byte	0x3
+ 27931 35fe 91       		.byte	0x91
+ 27932 35ff B05C     		.sleb128 -4560
+ 27933 3601 32       		.uleb128 0x32
+ 27934 3602 DD0D0000 		.long	0xddd
+ 27935 3606 03       		.byte	0x3
+ 27936 3607 91       		.byte	0x91
+ 27937 3608 C05C     		.sleb128 -4544
+ 27938 360a 00       		.byte	0x0
+ 27939 360b 00       		.byte	0x0
+ 27940 360c 31       		.uleb128 0x31
+ 27941 360d FB0D0000 		.long	0xdfb
+ 27942 3611 00000000 		.quad	.LBB1052
+ 27942      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 773
+
+
+ 27943 3619 00000000 		.quad	.LBE1052
+ 27943      00000000 
+ 27944 3621 02       		.byte	0x2
+ 27945 3622 6A03     		.value	0x36a
+ 27946 3624 3B360000 		.long	0x363b
+ 27947 3628 32       		.uleb128 0x32
+ 27948 3629 160E0000 		.long	0xe16
+ 27949 362d 03       		.byte	0x3
+ 27950 362e 91       		.byte	0x91
+ 27951 362f D05C     		.sleb128 -4528
+ 27952 3631 32       		.uleb128 0x32
+ 27953 3632 0C0E0000 		.long	0xe0c
+ 27954 3636 03       		.byte	0x3
+ 27955 3637 91       		.byte	0x91
+ 27956 3638 E05C     		.sleb128 -4512
+ 27957 363a 00       		.byte	0x0
+ 27958 363b 31       		.uleb128 0x31
+ 27959 363c 210E0000 		.long	0xe21
+ 27960 3640 00000000 		.quad	.LBB1054
+ 27960      00000000 
+ 27961 3648 00000000 		.quad	.LBE1054
+ 27961      00000000 
+ 27962 3650 02       		.byte	0x2
+ 27963 3651 6C03     		.value	0x36c
+ 27964 3653 6A360000 		.long	0x366a
+ 27965 3657 32       		.uleb128 0x32
+ 27966 3658 3E0E0000 		.long	0xe3e
+ 27967 365c 03       		.byte	0x3
+ 27968 365d 91       		.byte	0x91
+ 27969 365e F05C     		.sleb128 -4496
+ 27970 3660 32       		.uleb128 0x32
+ 27971 3661 330E0000 		.long	0xe33
+ 27972 3665 03       		.byte	0x3
+ 27973 3666 91       		.byte	0x91
+ 27974 3667 805D     		.sleb128 -4480
+ 27975 3669 00       		.byte	0x0
+ 27976 366a 35       		.uleb128 0x35
+ 27977 366b 4F0D0000 		.long	0xd4f
+ 27978 366f 00000000 		.quad	.LBB1056
+ 27978      00000000 
+ 27979 3677 00000000 		.quad	.LBE1056
+ 27979      00000000 
+ 27980 367f 02       		.byte	0x2
+ 27981 3680 6E03     		.value	0x36e
+ 27982 3682 32       		.uleb128 0x32
+ 27983 3683 6A0D0000 		.long	0xd6a
+ 27984 3687 03       		.byte	0x3
+ 27985 3688 91       		.byte	0x91
+ 27986 3689 905D     		.sleb128 -4464
+ 27987 368b 32       		.uleb128 0x32
+ 27988 368c 600D0000 		.long	0xd60
+ 27989 3690 03       		.byte	0x3
+ 27990 3691 91       		.byte	0x91
+ 27991 3692 A05D     		.sleb128 -4448
+ 27992 3694 00       		.byte	0x0
+ 27993 3695 00       		.byte	0x0
+ 27994 3696 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 774
+
+
+ 27995 3697 00       		.byte	0x0
+ 27996 3698 36       		.uleb128 0x36
+ 27997 3699 00000000 		.quad	.LBB1058
+ 27997      00000000 
+ 27998 36a1 00000000 		.quad	.LBE1058
+ 27998      00000000 
+ 27999 36a9 B8360000 		.long	0x36b8
+ 28000 36ad 34       		.uleb128 0x34
+ 28001 36ae 1C0C0000 		.long	0xc1c
+ 28002 36b2 04       		.byte	0x4
+ 28003 36b3 91       		.byte	0x91
+ 28004 36b4 E0AF7F   		.sleb128 -10272
+ 28005 36b7 00       		.byte	0x0
+ 28006 36b8 31       		.uleb128 0x31
+ 28007 36b9 4A0E0000 		.long	0xe4a
+ 28008 36bd 00000000 		.quad	.LBB1059
+ 28008      00000000 
+ 28009 36c5 00000000 		.quad	.LBE1059
+ 28009      00000000 
+ 28010 36cd 02       		.byte	0x2
+ 28011 36ce 9406     		.value	0x694
+ 28012 36d0 55370000 		.long	0x3755
+ 28013 36d4 32       		.uleb128 0x32
+ 28014 36d5 5C0E0000 		.long	0xe5c
+ 28015 36d9 03       		.byte	0x3
+ 28016 36da 91       		.byte	0x91
+ 28017 36db B05D     		.sleb128 -4432
+ 28018 36dd 33       		.uleb128 0x33
+ 28019 36de 00000000 		.quad	.LBB1060
+ 28019      00000000 
+ 28020 36e6 00000000 		.quad	.LBE1060
+ 28020      00000000 
+ 28021 36ee 34       		.uleb128 0x34
+ 28022 36ef 680E0000 		.long	0xe68
+ 28023 36f3 09       		.byte	0x9
+ 28024 36f4 03       		.byte	0x3
+ 28025 36f5 00000000 		.quad	ShiftRowTable.7385
+ 28025      00000000 
+ 28026 36fd 35       		.uleb128 0x35
+ 28027 36fe A00D0000 		.long	0xda0
+ 28028 3702 00000000 		.quad	.LBB1061
+ 28028      00000000 
+ 28029 370a 00000000 		.quad	.LBE1061
+ 28029      00000000 
+ 28030 3712 02       		.byte	0x2
+ 28031 3713 9B02     		.value	0x29b
+ 28032 3715 32       		.uleb128 0x32
+ 28033 3716 BE0D0000 		.long	0xdbe
+ 28034 371a 03       		.byte	0x3
+ 28035 371b 91       		.byte	0x91
+ 28036 371c C05D     		.sleb128 -4416
+ 28037 371e 32       		.uleb128 0x32
+ 28038 371f B20D0000 		.long	0xdb2
+ 28039 3723 03       		.byte	0x3
+ 28040 3724 91       		.byte	0x91
+ 28041 3725 D05D     		.sleb128 -4400
+ 28042 3727 35       		.uleb128 0x35
+
GAS LISTING /tmp/ccjbMjHD.s 			page 775
+
+
+ 28043 3728 CB0D0000 		.long	0xdcb
+ 28044 372c 00000000 		.quad	.LBB1063
+ 28044      00000000 
+ 28045 3734 00000000 		.quad	.LBE1063
+ 28045      00000000 
+ 28046 373c 02       		.byte	0x2
+ 28047 373d 7501     		.value	0x175
+ 28048 373f 32       		.uleb128 0x32
+ 28049 3740 E90D0000 		.long	0xde9
+ 28050 3744 03       		.byte	0x3
+ 28051 3745 91       		.byte	0x91
+ 28052 3746 E05D     		.sleb128 -4384
+ 28053 3748 32       		.uleb128 0x32
+ 28054 3749 DD0D0000 		.long	0xddd
+ 28055 374d 03       		.byte	0x3
+ 28056 374e 91       		.byte	0x91
+ 28057 374f F05D     		.sleb128 -4368
+ 28058 3751 00       		.byte	0x0
+ 28059 3752 00       		.byte	0x0
+ 28060 3753 00       		.byte	0x0
+ 28061 3754 00       		.byte	0x0
+ 28062 3755 36       		.uleb128 0x36
+ 28063 3756 00000000 		.quad	.LBB1065
+ 28063      00000000 
+ 28064 375e 00000000 		.quad	.LBE1065
+ 28064      00000000 
+ 28065 3766 75370000 		.long	0x3775
+ 28066 376a 34       		.uleb128 0x34
+ 28067 376b 2C0C0000 		.long	0xc2c
+ 28068 376f 04       		.byte	0x4
+ 28069 3770 91       		.byte	0x91
+ 28070 3771 D0AF7F   		.sleb128 -10288
+ 28071 3774 00       		.byte	0x0
+ 28072 3775 31       		.uleb128 0x31
+ 28073 3776 860E0000 		.long	0xe86
+ 28074 377a 00000000 		.quad	.LBB1066
+ 28074      00000000 
+ 28075 3782 00000000 		.quad	.LBE1066
+ 28075      00000000 
+ 28076 378a 02       		.byte	0x2
+ 28077 378b 9606     		.value	0x696
+ 28078 378d A4370000 		.long	0x37a4
+ 28079 3791 32       		.uleb128 0x32
+ 28080 3792 A10E0000 		.long	0xea1
+ 28081 3796 03       		.byte	0x3
+ 28082 3797 91       		.byte	0x91
+ 28083 3798 805E     		.sleb128 -4352
+ 28084 379a 32       		.uleb128 0x32
+ 28085 379b 970E0000 		.long	0xe97
+ 28086 379f 03       		.byte	0x3
+ 28087 37a0 91       		.byte	0x91
+ 28088 37a1 905E     		.sleb128 -4336
+ 28089 37a3 00       		.byte	0x0
+ 28090 37a4 36       		.uleb128 0x36
+ 28091 37a5 00000000 		.quad	.LBB1068
+ 28091      00000000 
+ 28092 37ad 00000000 		.quad	.LBE1068
+
GAS LISTING /tmp/ccjbMjHD.s 			page 776
+
+
+ 28092      00000000 
+ 28093 37b5 C4370000 		.long	0x37c4
+ 28094 37b9 34       		.uleb128 0x34
+ 28095 37ba 3C0C0000 		.long	0xc3c
+ 28096 37be 04       		.byte	0x4
+ 28097 37bf 91       		.byte	0x91
+ 28098 37c0 C0AF7F   		.sleb128 -10304
+ 28099 37c3 00       		.byte	0x0
+ 28100 37c4 31       		.uleb128 0x31
+ 28101 37c5 AC0E0000 		.long	0xeac
+ 28102 37c9 00000000 		.quad	.LBB1069
+ 28102      00000000 
+ 28103 37d1 00000000 		.quad	.LBE1069
+ 28103      00000000 
+ 28104 37d9 02       		.byte	0x2
+ 28105 37da 9806     		.value	0x698
+ 28106 37dc 15380000 		.long	0x3815
+ 28107 37e0 32       		.uleb128 0x32
+ 28108 37e1 BE0E0000 		.long	0xebe
+ 28109 37e5 03       		.byte	0x3
+ 28110 37e6 91       		.byte	0x91
+ 28111 37e7 A05E     		.sleb128 -4320
+ 28112 37e9 35       		.uleb128 0x35
+ 28113 37ea CB0E0000 		.long	0xecb
+ 28114 37ee 00000000 		.quad	.LBB1071
+ 28114      00000000 
+ 28115 37f6 00000000 		.quad	.LBE1071
+ 28115      00000000 
+ 28116 37fe 02       		.byte	0x2
+ 28117 37ff 4905     		.value	0x549
+ 28118 3801 32       		.uleb128 0x32
+ 28119 3802 E90E0000 		.long	0xee9
+ 28120 3806 03       		.byte	0x3
+ 28121 3807 91       		.byte	0x91
+ 28122 3808 BC5E     		.sleb128 -4292
+ 28123 380a 32       		.uleb128 0x32
+ 28124 380b DD0E0000 		.long	0xedd
+ 28125 380f 03       		.byte	0x3
+ 28126 3810 91       		.byte	0x91
+ 28127 3811 C05E     		.sleb128 -4288
+ 28128 3813 00       		.byte	0x0
+ 28129 3814 00       		.byte	0x0
+ 28130 3815 33       		.uleb128 0x33
+ 28131 3816 00000000 		.quad	.LBB1073
+ 28131      00000000 
+ 28132 381e 00000000 		.quad	.LBE1073
+ 28132      00000000 
+ 28133 3826 34       		.uleb128 0x34
+ 28134 3827 480C0000 		.long	0xc48
+ 28135 382b 04       		.byte	0x4
+ 28136 382c 91       		.byte	0x91
+ 28137 382d B0AF7F   		.sleb128 -10320
+ 28138 3830 00       		.byte	0x0
+ 28139 3831 00       		.byte	0x0
+ 28140 3832 00       		.byte	0x0
+ 28141 3833 31       		.uleb128 0x31
+ 28142 3834 F60E0000 		.long	0xef6
+
GAS LISTING /tmp/ccjbMjHD.s 			page 777
+
+
+ 28143 3838 00000000 		.quad	.LBB1074
+ 28143      00000000 
+ 28144 3840 00000000 		.quad	.LBE1074
+ 28144      00000000 
+ 28145 3848 02       		.byte	0x2
+ 28146 3849 D506     		.value	0x6d5
+ 28147 384b 483A0000 		.long	0x3a48
+ 28148 384f 32       		.uleb128 0x32
+ 28149 3850 080F0000 		.long	0xf08
+ 28150 3854 03       		.byte	0x3
+ 28151 3855 91       		.byte	0x91
+ 28152 3856 D05E     		.sleb128 -4272
+ 28153 3858 33       		.uleb128 0x33
+ 28154 3859 00000000 		.quad	.LBB1075
+ 28154      00000000 
+ 28155 3861 00000000 		.quad	.LBE1075
+ 28155      00000000 
+ 28156 3869 34       		.uleb128 0x34
+ 28157 386a 140F0000 		.long	0xf14
+ 28158 386e 04       		.byte	0x4
+ 28159 386f 76       		.byte	0x76
+ 28160 3870 A0AB7F   		.sleb128 -10848
+ 28161 3873 31       		.uleb128 0x31
+ 28162 3874 210F0000 		.long	0xf21
+ 28163 3878 00000000 		.quad	.LBB1076
+ 28163      00000000 
+ 28164 3880 00000000 		.quad	.LBE1076
+ 28164      00000000 
+ 28165 3888 02       		.byte	0x2
+ 28166 3889 1F06     		.value	0x61f
+ 28167 388b 10390000 		.long	0x3910
+ 28168 388f 32       		.uleb128 0x32
+ 28169 3890 330F0000 		.long	0xf33
+ 28170 3894 03       		.byte	0x3
+ 28171 3895 91       		.byte	0x91
+ 28172 3896 E05E     		.sleb128 -4256
+ 28173 3898 33       		.uleb128 0x33
+ 28174 3899 00000000 		.quad	.LBB1077
+ 28174      00000000 
+ 28175 38a1 00000000 		.quad	.LBE1077
+ 28175      00000000 
+ 28176 38a9 34       		.uleb128 0x34
+ 28177 38aa 3F0F0000 		.long	0xf3f
+ 28178 38ae 09       		.byte	0x9
+ 28179 38af 03       		.byte	0x3
+ 28180 38b0 00000000 		.quad	mask.7943
+ 28180      00000000 
+ 28181 38b8 35       		.uleb128 0x35
+ 28182 38b9 A00D0000 		.long	0xda0
+ 28183 38bd 00000000 		.quad	.LBB1078
+ 28183      00000000 
+ 28184 38c5 00000000 		.quad	.LBE1078
+ 28184      00000000 
+ 28185 38cd 02       		.byte	0x2
+ 28186 38ce FE04     		.value	0x4fe
+ 28187 38d0 32       		.uleb128 0x32
+ 28188 38d1 BE0D0000 		.long	0xdbe
+
GAS LISTING /tmp/ccjbMjHD.s 			page 778
+
+
+ 28189 38d5 03       		.byte	0x3
+ 28190 38d6 91       		.byte	0x91
+ 28191 38d7 F05E     		.sleb128 -4240
+ 28192 38d9 32       		.uleb128 0x32
+ 28193 38da B20D0000 		.long	0xdb2
+ 28194 38de 03       		.byte	0x3
+ 28195 38df 91       		.byte	0x91
+ 28196 38e0 805F     		.sleb128 -4224
+ 28197 38e2 35       		.uleb128 0x35
+ 28198 38e3 CB0D0000 		.long	0xdcb
+ 28199 38e7 00000000 		.quad	.LBB1080
+ 28199      00000000 
+ 28200 38ef 00000000 		.quad	.LBE1080
+ 28200      00000000 
+ 28201 38f7 02       		.byte	0x2
+ 28202 38f8 7501     		.value	0x175
+ 28203 38fa 32       		.uleb128 0x32
+ 28204 38fb E90D0000 		.long	0xde9
+ 28205 38ff 03       		.byte	0x3
+ 28206 3900 91       		.byte	0x91
+ 28207 3901 905F     		.sleb128 -4208
+ 28208 3903 32       		.uleb128 0x32
+ 28209 3904 DD0D0000 		.long	0xddd
+ 28210 3908 03       		.byte	0x3
+ 28211 3909 91       		.byte	0x91
+ 28212 390a A05F     		.sleb128 -4192
+ 28213 390c 00       		.byte	0x0
+ 28214 390d 00       		.byte	0x0
+ 28215 390e 00       		.byte	0x0
+ 28216 390f 00       		.byte	0x0
+ 28217 3910 31       		.uleb128 0x31
+ 28218 3911 210F0000 		.long	0xf21
+ 28219 3915 00000000 		.quad	.LBB1082
+ 28219      00000000 
+ 28220 391d 00000000 		.quad	.LBE1082
+ 28220      00000000 
+ 28221 3925 02       		.byte	0x2
+ 28222 3926 2006     		.value	0x620
+ 28223 3928 AD390000 		.long	0x39ad
+ 28224 392c 32       		.uleb128 0x32
+ 28225 392d 330F0000 		.long	0xf33
+ 28226 3931 03       		.byte	0x3
+ 28227 3932 91       		.byte	0x91
+ 28228 3933 B05F     		.sleb128 -4176
+ 28229 3935 33       		.uleb128 0x33
+ 28230 3936 00000000 		.quad	.LBB1083
+ 28230      00000000 
+ 28231 393e 00000000 		.quad	.LBE1083
+ 28231      00000000 
+ 28232 3946 34       		.uleb128 0x34
+ 28233 3947 3F0F0000 		.long	0xf3f
+ 28234 394b 09       		.byte	0x9
+ 28235 394c 03       		.byte	0x3
+ 28236 394d 00000000 		.quad	mask.7943
+ 28236      00000000 
+ 28237 3955 35       		.uleb128 0x35
+ 28238 3956 A00D0000 		.long	0xda0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 779
+
+
+ 28239 395a 00000000 		.quad	.LBB1084
+ 28239      00000000 
+ 28240 3962 00000000 		.quad	.LBE1084
+ 28240      00000000 
+ 28241 396a 02       		.byte	0x2
+ 28242 396b FE04     		.value	0x4fe
+ 28243 396d 32       		.uleb128 0x32
+ 28244 396e BE0D0000 		.long	0xdbe
+ 28245 3972 03       		.byte	0x3
+ 28246 3973 91       		.byte	0x91
+ 28247 3974 C05F     		.sleb128 -4160
+ 28248 3976 32       		.uleb128 0x32
+ 28249 3977 B20D0000 		.long	0xdb2
+ 28250 397b 03       		.byte	0x3
+ 28251 397c 91       		.byte	0x91
+ 28252 397d D05F     		.sleb128 -4144
+ 28253 397f 35       		.uleb128 0x35
+ 28254 3980 CB0D0000 		.long	0xdcb
+ 28255 3984 00000000 		.quad	.LBB1086
+ 28255      00000000 
+ 28256 398c 00000000 		.quad	.LBE1086
+ 28256      00000000 
+ 28257 3994 02       		.byte	0x2
+ 28258 3995 7501     		.value	0x175
+ 28259 3997 32       		.uleb128 0x32
+ 28260 3998 E90D0000 		.long	0xde9
+ 28261 399c 03       		.byte	0x3
+ 28262 399d 91       		.byte	0x91
+ 28263 399e E05F     		.sleb128 -4128
+ 28264 39a0 32       		.uleb128 0x32
+ 28265 39a1 DD0D0000 		.long	0xddd
+ 28266 39a5 03       		.byte	0x3
+ 28267 39a6 91       		.byte	0x91
+ 28268 39a7 F05F     		.sleb128 -4112
+ 28269 39a9 00       		.byte	0x0
+ 28270 39aa 00       		.byte	0x0
+ 28271 39ab 00       		.byte	0x0
+ 28272 39ac 00       		.byte	0x0
+ 28273 39ad 35       		.uleb128 0x35
+ 28274 39ae 210F0000 		.long	0xf21
+ 28275 39b2 00000000 		.quad	.LBB1088
+ 28275      00000000 
+ 28276 39ba 00000000 		.quad	.LBE1088
+ 28276      00000000 
+ 28277 39c2 02       		.byte	0x2
+ 28278 39c3 2106     		.value	0x621
+ 28279 39c5 32       		.uleb128 0x32
+ 28280 39c6 330F0000 		.long	0xf33
+ 28281 39ca 03       		.byte	0x3
+ 28282 39cb 91       		.byte	0x91
+ 28283 39cc 8060     		.sleb128 -4096
+ 28284 39ce 33       		.uleb128 0x33
+ 28285 39cf 00000000 		.quad	.LBB1089
+ 28285      00000000 
+ 28286 39d7 00000000 		.quad	.LBE1089
+ 28286      00000000 
+ 28287 39df 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s 			page 780
+
+
+ 28288 39e0 3F0F0000 		.long	0xf3f
+ 28289 39e4 09       		.byte	0x9
+ 28290 39e5 03       		.byte	0x3
+ 28291 39e6 00000000 		.quad	mask.7943
+ 28291      00000000 
+ 28292 39ee 35       		.uleb128 0x35
+ 28293 39ef A00D0000 		.long	0xda0
+ 28294 39f3 00000000 		.quad	.LBB1090
+ 28294      00000000 
+ 28295 39fb 00000000 		.quad	.LBE1090
+ 28295      00000000 
+ 28296 3a03 02       		.byte	0x2
+ 28297 3a04 FE04     		.value	0x4fe
+ 28298 3a06 32       		.uleb128 0x32
+ 28299 3a07 BE0D0000 		.long	0xdbe
+ 28300 3a0b 03       		.byte	0x3
+ 28301 3a0c 91       		.byte	0x91
+ 28302 3a0d 9060     		.sleb128 -4080
+ 28303 3a0f 32       		.uleb128 0x32
+ 28304 3a10 B20D0000 		.long	0xdb2
+ 28305 3a14 03       		.byte	0x3
+ 28306 3a15 91       		.byte	0x91
+ 28307 3a16 A060     		.sleb128 -4064
+ 28308 3a18 35       		.uleb128 0x35
+ 28309 3a19 CB0D0000 		.long	0xdcb
+ 28310 3a1d 00000000 		.quad	.LBB1092
+ 28310      00000000 
+ 28311 3a25 00000000 		.quad	.LBE1092
+ 28311      00000000 
+ 28312 3a2d 02       		.byte	0x2
+ 28313 3a2e 7501     		.value	0x175
+ 28314 3a30 32       		.uleb128 0x32
+ 28315 3a31 E90D0000 		.long	0xde9
+ 28316 3a35 03       		.byte	0x3
+ 28317 3a36 91       		.byte	0x91
+ 28318 3a37 B060     		.sleb128 -4048
+ 28319 3a39 32       		.uleb128 0x32
+ 28320 3a3a DD0D0000 		.long	0xddd
+ 28321 3a3e 03       		.byte	0x3
+ 28322 3a3f 91       		.byte	0x91
+ 28323 3a40 C060     		.sleb128 -4032
+ 28324 3a42 00       		.byte	0x0
+ 28325 3a43 00       		.byte	0x0
+ 28326 3a44 00       		.byte	0x0
+ 28327 3a45 00       		.byte	0x0
+ 28328 3a46 00       		.byte	0x0
+ 28329 3a47 00       		.byte	0x0
+ 28330 3a48 31       		.uleb128 0x31
+ 28331 3a49 D50B0000 		.long	0xbd5
+ 28332 3a4d 00000000 		.quad	.LBB1094
+ 28332      00000000 
+ 28333 3a55 00000000 		.quad	.LBE1094
+ 28333      00000000 
+ 28334 3a5d 02       		.byte	0x2
+ 28335 3a5e D606     		.value	0x6d6
+ 28336 3a60 2B3F0000 		.long	0x3f2b
+ 28337 3a64 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 781
+
+
+ 28338 3a65 F30B0000 		.long	0xbf3
+ 28339 3a69 03       		.byte	0x3
+ 28340 3a6a 91       		.byte	0x91
+ 28341 3a6b DC60     		.sleb128 -4004
+ 28342 3a6d 32       		.uleb128 0x32
+ 28343 3a6e E70B0000 		.long	0xbe7
+ 28344 3a72 03       		.byte	0x3
+ 28345 3a73 91       		.byte	0x91
+ 28346 3a74 E060     		.sleb128 -4000
+ 28347 3a76 33       		.uleb128 0x33
+ 28348 3a77 00000000 		.quad	.LBB1095
+ 28348      00000000 
+ 28349 3a7f 00000000 		.quad	.LBE1095
+ 28349      00000000 
+ 28350 3a87 34       		.uleb128 0x34
+ 28351 3a88 FF0B0000 		.long	0xbff
+ 28352 3a8c 04       		.byte	0x4
+ 28353 3a8d 76       		.byte	0x76
+ 28354 3a8e C0AB7F   		.sleb128 -10816
+ 28355 3a91 34       		.uleb128 0x34
+ 28356 3a92 0B0C0000 		.long	0xc0b
+ 28357 3a96 04       		.byte	0x4
+ 28358 3a97 76       		.byte	0x76
+ 28359 3a98 B0AB7F   		.sleb128 -10832
+ 28360 3a9b 31       		.uleb128 0x31
+ 28361 3a9c 540C0000 		.long	0xc54
+ 28362 3aa0 00000000 		.quad	.LBB1096
+ 28362      00000000 
+ 28363 3aa8 00000000 		.quad	.LBE1096
+ 28363      00000000 
+ 28364 3ab0 02       		.byte	0x2
+ 28365 3ab1 9106     		.value	0x691
+ 28366 3ab3 073B0000 		.long	0x3b07
+ 28367 3ab7 32       		.uleb128 0x32
+ 28368 3ab8 7E0C0000 		.long	0xc7e
+ 28369 3abc 03       		.byte	0x3
+ 28370 3abd 91       		.byte	0x91
+ 28371 3abe F860     		.sleb128 -3976
+ 28372 3ac0 32       		.uleb128 0x32
+ 28373 3ac1 720C0000 		.long	0xc72
+ 28374 3ac5 03       		.byte	0x3
+ 28375 3ac6 91       		.byte	0x91
+ 28376 3ac7 FC60     		.sleb128 -3972
+ 28377 3ac9 32       		.uleb128 0x32
+ 28378 3aca 660C0000 		.long	0xc66
+ 28379 3ace 03       		.byte	0x3
+ 28380 3acf 91       		.byte	0x91
+ 28381 3ad0 8061     		.sleb128 -3968
+ 28382 3ad2 35       		.uleb128 0x35
+ 28383 3ad3 8B0C0000 		.long	0xc8b
+ 28384 3ad7 00000000 		.quad	.LBB1098
+ 28384      00000000 
+ 28385 3adf 00000000 		.quad	.LBE1098
+ 28385      00000000 
+ 28386 3ae7 02       		.byte	0x2
+ 28387 3ae8 0702     		.value	0x207
+ 28388 3aea 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 782
+
+
+ 28389 3aeb B40C0000 		.long	0xcb4
+ 28390 3aef 03       		.byte	0x3
+ 28391 3af0 91       		.byte	0x91
+ 28392 3af1 9861     		.sleb128 -3944
+ 28393 3af3 32       		.uleb128 0x32
+ 28394 3af4 A90C0000 		.long	0xca9
+ 28395 3af8 03       		.byte	0x3
+ 28396 3af9 91       		.byte	0x91
+ 28397 3afa 9C61     		.sleb128 -3940
+ 28398 3afc 32       		.uleb128 0x32
+ 28399 3afd 9D0C0000 		.long	0xc9d
+ 28400 3b01 03       		.byte	0x3
+ 28401 3b02 91       		.byte	0x91
+ 28402 3b03 A061     		.sleb128 -3936
+ 28403 3b05 00       		.byte	0x0
+ 28404 3b06 00       		.byte	0x0
+ 28405 3b07 31       		.uleb128 0x31
+ 28406 3b08 C10C0000 		.long	0xcc1
+ 28407 3b0c 00000000 		.quad	.LBB1100
+ 28407      00000000 
+ 28408 3b14 00000000 		.quad	.LBE1100
+ 28408      00000000 
+ 28409 3b1c 02       		.byte	0x2
+ 28410 3b1d 9206     		.value	0x692
+ 28411 3b1f 903D0000 		.long	0x3d90
+ 28412 3b23 32       		.uleb128 0x32
+ 28413 3b24 D30C0000 		.long	0xcd3
+ 28414 3b28 03       		.byte	0x3
+ 28415 3b29 91       		.byte	0x91
+ 28416 3b2a B061     		.sleb128 -3920
+ 28417 3b2c 35       		.uleb128 0x35
+ 28418 3b2d E00C0000 		.long	0xce0
+ 28419 3b31 00000000 		.quad	.LBB1102
+ 28419      00000000 
+ 28420 3b39 00000000 		.quad	.LBE1102
+ 28420      00000000 
+ 28421 3b41 02       		.byte	0x2
+ 28422 3b42 7D03     		.value	0x37d
+ 28423 3b44 32       		.uleb128 0x32
+ 28424 3b45 FE0C0000 		.long	0xcfe
+ 28425 3b49 03       		.byte	0x3
+ 28426 3b4a 91       		.byte	0x91
+ 28427 3b4b C861     		.sleb128 -3896
+ 28428 3b4d 32       		.uleb128 0x32
+ 28429 3b4e F20C0000 		.long	0xcf2
+ 28430 3b52 03       		.byte	0x3
+ 28431 3b53 91       		.byte	0x91
+ 28432 3b54 D061     		.sleb128 -3888
+ 28433 3b56 33       		.uleb128 0x33
+ 28434 3b57 00000000 		.quad	.LBB1103
+ 28434      00000000 
+ 28435 3b5f 00000000 		.quad	.LBE1103
+ 28435      00000000 
+ 28436 3b67 34       		.uleb128 0x34
+ 28437 3b68 0A0D0000 		.long	0xd0a
+ 28438 3b6c 03       		.byte	0x3
+ 28439 3b6d 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 783
+
+
+ 28440 3b6e A062     		.sleb128 -3808
+ 28441 3b70 34       		.uleb128 0x34
+ 28442 3b71 150D0000 		.long	0xd15
+ 28443 3b75 03       		.byte	0x3
+ 28444 3b76 91       		.byte	0x91
+ 28445 3b77 9062     		.sleb128 -3824
+ 28446 3b79 34       		.uleb128 0x34
+ 28447 3b7a 200D0000 		.long	0xd20
+ 28448 3b7e 03       		.byte	0x3
+ 28449 3b7f 91       		.byte	0x91
+ 28450 3b80 8062     		.sleb128 -3840
+ 28451 3b82 34       		.uleb128 0x34
+ 28452 3b83 2C0D0000 		.long	0xd2c
+ 28453 3b87 03       		.byte	0x3
+ 28454 3b88 91       		.byte	0x91
+ 28455 3b89 F061     		.sleb128 -3856
+ 28456 3b8b 34       		.uleb128 0x34
+ 28457 3b8c 380D0000 		.long	0xd38
+ 28458 3b90 03       		.byte	0x3
+ 28459 3b91 91       		.byte	0x91
+ 28460 3b92 EC61     		.sleb128 -3860
+ 28461 3b94 31       		.uleb128 0x31
+ 28462 3b95 4F0D0000 		.long	0xd4f
+ 28463 3b99 00000000 		.quad	.LBB1104
+ 28463      00000000 
+ 28464 3ba1 00000000 		.quad	.LBE1104
+ 28464      00000000 
+ 28465 3ba9 02       		.byte	0x2
+ 28466 3baa 5603     		.value	0x356
+ 28467 3bac C33B0000 		.long	0x3bc3
+ 28468 3bb0 32       		.uleb128 0x32
+ 28469 3bb1 6A0D0000 		.long	0xd6a
+ 28470 3bb5 03       		.byte	0x3
+ 28471 3bb6 91       		.byte	0x91
+ 28472 3bb7 B062     		.sleb128 -3792
+ 28473 3bb9 32       		.uleb128 0x32
+ 28474 3bba 600D0000 		.long	0xd60
+ 28475 3bbe 03       		.byte	0x3
+ 28476 3bbf 91       		.byte	0x91
+ 28477 3bc0 C062     		.sleb128 -3776
+ 28478 3bc2 00       		.byte	0x0
+ 28479 3bc3 31       		.uleb128 0x31
+ 28480 3bc4 750D0000 		.long	0xd75
+ 28481 3bc8 00000000 		.quad	.LBB1106
+ 28481      00000000 
+ 28482 3bd0 00000000 		.quad	.LBE1106
+ 28482      00000000 
+ 28483 3bd8 02       		.byte	0x2
+ 28484 3bd9 5903     		.value	0x359
+ 28485 3bdb F23B0000 		.long	0x3bf2
+ 28486 3bdf 32       		.uleb128 0x32
+ 28487 3be0 930D0000 		.long	0xd93
+ 28488 3be4 03       		.byte	0x3
+ 28489 3be5 91       		.byte	0x91
+ 28490 3be6 DC62     		.sleb128 -3748
+ 28491 3be8 32       		.uleb128 0x32
+ 28492 3be9 870D0000 		.long	0xd87
+
GAS LISTING /tmp/ccjbMjHD.s 			page 784
+
+
+ 28493 3bed 03       		.byte	0x3
+ 28494 3bee 91       		.byte	0x91
+ 28495 3bef E062     		.sleb128 -3744
+ 28496 3bf1 00       		.byte	0x0
+ 28497 3bf2 31       		.uleb128 0x31
+ 28498 3bf3 4F0D0000 		.long	0xd4f
+ 28499 3bf7 00000000 		.quad	.LBB1108
+ 28499      00000000 
+ 28500 3bff 00000000 		.quad	.LBE1108
+ 28500      00000000 
+ 28501 3c07 02       		.byte	0x2
+ 28502 3c08 5B03     		.value	0x35b
+ 28503 3c0a 213C0000 		.long	0x3c21
+ 28504 3c0e 32       		.uleb128 0x32
+ 28505 3c0f 6A0D0000 		.long	0xd6a
+ 28506 3c13 03       		.byte	0x3
+ 28507 3c14 91       		.byte	0x91
+ 28508 3c15 F062     		.sleb128 -3728
+ 28509 3c17 32       		.uleb128 0x32
+ 28510 3c18 600D0000 		.long	0xd60
+ 28511 3c1c 03       		.byte	0x3
+ 28512 3c1d 91       		.byte	0x91
+ 28513 3c1e 8063     		.sleb128 -3712
+ 28514 3c20 00       		.byte	0x0
+ 28515 3c21 31       		.uleb128 0x31
+ 28516 3c22 A00D0000 		.long	0xda0
+ 28517 3c26 00000000 		.quad	.LBB1110
+ 28517      00000000 
+ 28518 3c2e 00000000 		.quad	.LBE1110
+ 28518      00000000 
+ 28519 3c36 02       		.byte	0x2
+ 28520 3c37 6403     		.value	0x364
+ 28521 3c39 7B3C0000 		.long	0x3c7b
+ 28522 3c3d 32       		.uleb128 0x32
+ 28523 3c3e BE0D0000 		.long	0xdbe
+ 28524 3c42 03       		.byte	0x3
+ 28525 3c43 91       		.byte	0x91
+ 28526 3c44 9063     		.sleb128 -3696
+ 28527 3c46 32       		.uleb128 0x32
+ 28528 3c47 B20D0000 		.long	0xdb2
+ 28529 3c4b 03       		.byte	0x3
+ 28530 3c4c 91       		.byte	0x91
+ 28531 3c4d A063     		.sleb128 -3680
+ 28532 3c4f 35       		.uleb128 0x35
+ 28533 3c50 CB0D0000 		.long	0xdcb
+ 28534 3c54 00000000 		.quad	.LBB1112
+ 28534      00000000 
+ 28535 3c5c 00000000 		.quad	.LBE1112
+ 28535      00000000 
+ 28536 3c64 02       		.byte	0x2
+ 28537 3c65 7501     		.value	0x175
+ 28538 3c67 32       		.uleb128 0x32
+ 28539 3c68 E90D0000 		.long	0xde9
+ 28540 3c6c 03       		.byte	0x3
+ 28541 3c6d 91       		.byte	0x91
+ 28542 3c6e B063     		.sleb128 -3664
+ 28543 3c70 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 785
+
+
+ 28544 3c71 DD0D0000 		.long	0xddd
+ 28545 3c75 03       		.byte	0x3
+ 28546 3c76 91       		.byte	0x91
+ 28547 3c77 C063     		.sleb128 -3648
+ 28548 3c79 00       		.byte	0x0
+ 28549 3c7a 00       		.byte	0x0
+ 28550 3c7b 31       		.uleb128 0x31
+ 28551 3c7c FB0D0000 		.long	0xdfb
+ 28552 3c80 00000000 		.quad	.LBB1114
+ 28552      00000000 
+ 28553 3c88 00000000 		.quad	.LBE1114
+ 28553      00000000 
+ 28554 3c90 02       		.byte	0x2
+ 28555 3c91 6603     		.value	0x366
+ 28556 3c93 AA3C0000 		.long	0x3caa
+ 28557 3c97 32       		.uleb128 0x32
+ 28558 3c98 160E0000 		.long	0xe16
+ 28559 3c9c 03       		.byte	0x3
+ 28560 3c9d 91       		.byte	0x91
+ 28561 3c9e D063     		.sleb128 -3632
+ 28562 3ca0 32       		.uleb128 0x32
+ 28563 3ca1 0C0E0000 		.long	0xe0c
+ 28564 3ca5 03       		.byte	0x3
+ 28565 3ca6 91       		.byte	0x91
+ 28566 3ca7 E063     		.sleb128 -3616
+ 28567 3ca9 00       		.byte	0x0
+ 28568 3caa 31       		.uleb128 0x31
+ 28569 3cab A00D0000 		.long	0xda0
+ 28570 3caf 00000000 		.quad	.LBB1116
+ 28570      00000000 
+ 28571 3cb7 00000000 		.quad	.LBE1116
+ 28571      00000000 
+ 28572 3cbf 02       		.byte	0x2
+ 28573 3cc0 6803     		.value	0x368
+ 28574 3cc2 043D0000 		.long	0x3d04
+ 28575 3cc6 32       		.uleb128 0x32
+ 28576 3cc7 BE0D0000 		.long	0xdbe
+ 28577 3ccb 03       		.byte	0x3
+ 28578 3ccc 91       		.byte	0x91
+ 28579 3ccd F063     		.sleb128 -3600
+ 28580 3ccf 32       		.uleb128 0x32
+ 28581 3cd0 B20D0000 		.long	0xdb2
+ 28582 3cd4 03       		.byte	0x3
+ 28583 3cd5 91       		.byte	0x91
+ 28584 3cd6 8064     		.sleb128 -3584
+ 28585 3cd8 35       		.uleb128 0x35
+ 28586 3cd9 CB0D0000 		.long	0xdcb
+ 28587 3cdd 00000000 		.quad	.LBB1118
+ 28587      00000000 
+ 28588 3ce5 00000000 		.quad	.LBE1118
+ 28588      00000000 
+ 28589 3ced 02       		.byte	0x2
+ 28590 3cee 7501     		.value	0x175
+ 28591 3cf0 32       		.uleb128 0x32
+ 28592 3cf1 E90D0000 		.long	0xde9
+ 28593 3cf5 03       		.byte	0x3
+ 28594 3cf6 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 786
+
+
+ 28595 3cf7 9064     		.sleb128 -3568
+ 28596 3cf9 32       		.uleb128 0x32
+ 28597 3cfa DD0D0000 		.long	0xddd
+ 28598 3cfe 03       		.byte	0x3
+ 28599 3cff 91       		.byte	0x91
+ 28600 3d00 A064     		.sleb128 -3552
+ 28601 3d02 00       		.byte	0x0
+ 28602 3d03 00       		.byte	0x0
+ 28603 3d04 31       		.uleb128 0x31
+ 28604 3d05 FB0D0000 		.long	0xdfb
+ 28605 3d09 00000000 		.quad	.LBB1120
+ 28605      00000000 
+ 28606 3d11 00000000 		.quad	.LBE1120
+ 28606      00000000 
+ 28607 3d19 02       		.byte	0x2
+ 28608 3d1a 6A03     		.value	0x36a
+ 28609 3d1c 333D0000 		.long	0x3d33
+ 28610 3d20 32       		.uleb128 0x32
+ 28611 3d21 160E0000 		.long	0xe16
+ 28612 3d25 03       		.byte	0x3
+ 28613 3d26 91       		.byte	0x91
+ 28614 3d27 B064     		.sleb128 -3536
+ 28615 3d29 32       		.uleb128 0x32
+ 28616 3d2a 0C0E0000 		.long	0xe0c
+ 28617 3d2e 03       		.byte	0x3
+ 28618 3d2f 91       		.byte	0x91
+ 28619 3d30 C064     		.sleb128 -3520
+ 28620 3d32 00       		.byte	0x0
+ 28621 3d33 31       		.uleb128 0x31
+ 28622 3d34 210E0000 		.long	0xe21
+ 28623 3d38 00000000 		.quad	.LBB1122
+ 28623      00000000 
+ 28624 3d40 00000000 		.quad	.LBE1122
+ 28624      00000000 
+ 28625 3d48 02       		.byte	0x2
+ 28626 3d49 6C03     		.value	0x36c
+ 28627 3d4b 623D0000 		.long	0x3d62
+ 28628 3d4f 32       		.uleb128 0x32
+ 28629 3d50 3E0E0000 		.long	0xe3e
+ 28630 3d54 03       		.byte	0x3
+ 28631 3d55 91       		.byte	0x91
+ 28632 3d56 D064     		.sleb128 -3504
+ 28633 3d58 32       		.uleb128 0x32
+ 28634 3d59 330E0000 		.long	0xe33
+ 28635 3d5d 03       		.byte	0x3
+ 28636 3d5e 91       		.byte	0x91
+ 28637 3d5f E064     		.sleb128 -3488
+ 28638 3d61 00       		.byte	0x0
+ 28639 3d62 35       		.uleb128 0x35
+ 28640 3d63 4F0D0000 		.long	0xd4f
+ 28641 3d67 00000000 		.quad	.LBB1124
+ 28641      00000000 
+ 28642 3d6f 00000000 		.quad	.LBE1124
+ 28642      00000000 
+ 28643 3d77 02       		.byte	0x2
+ 28644 3d78 6E03     		.value	0x36e
+ 28645 3d7a 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 787
+
+
+ 28646 3d7b 6A0D0000 		.long	0xd6a
+ 28647 3d7f 03       		.byte	0x3
+ 28648 3d80 91       		.byte	0x91
+ 28649 3d81 F064     		.sleb128 -3472
+ 28650 3d83 32       		.uleb128 0x32
+ 28651 3d84 600D0000 		.long	0xd60
+ 28652 3d88 03       		.byte	0x3
+ 28653 3d89 91       		.byte	0x91
+ 28654 3d8a 8065     		.sleb128 -3456
+ 28655 3d8c 00       		.byte	0x0
+ 28656 3d8d 00       		.byte	0x0
+ 28657 3d8e 00       		.byte	0x0
+ 28658 3d8f 00       		.byte	0x0
+ 28659 3d90 36       		.uleb128 0x36
+ 28660 3d91 00000000 		.quad	.LBB1126
+ 28660      00000000 
+ 28661 3d99 00000000 		.quad	.LBE1126
+ 28661      00000000 
+ 28662 3da1 B03D0000 		.long	0x3db0
+ 28663 3da5 34       		.uleb128 0x34
+ 28664 3da6 1C0C0000 		.long	0xc1c
+ 28665 3daa 04       		.byte	0x4
+ 28666 3dab 91       		.byte	0x91
+ 28667 3dac A0B07F   		.sleb128 -10208
+ 28668 3daf 00       		.byte	0x0
+ 28669 3db0 31       		.uleb128 0x31
+ 28670 3db1 4A0E0000 		.long	0xe4a
+ 28671 3db5 00000000 		.quad	.LBB1127
+ 28671      00000000 
+ 28672 3dbd 00000000 		.quad	.LBE1127
+ 28672      00000000 
+ 28673 3dc5 02       		.byte	0x2
+ 28674 3dc6 9406     		.value	0x694
+ 28675 3dc8 4D3E0000 		.long	0x3e4d
+ 28676 3dcc 32       		.uleb128 0x32
+ 28677 3dcd 5C0E0000 		.long	0xe5c
+ 28678 3dd1 03       		.byte	0x3
+ 28679 3dd2 91       		.byte	0x91
+ 28680 3dd3 9065     		.sleb128 -3440
+ 28681 3dd5 33       		.uleb128 0x33
+ 28682 3dd6 00000000 		.quad	.LBB1128
+ 28682      00000000 
+ 28683 3dde 00000000 		.quad	.LBE1128
+ 28683      00000000 
+ 28684 3de6 34       		.uleb128 0x34
+ 28685 3de7 680E0000 		.long	0xe68
+ 28686 3deb 09       		.byte	0x9
+ 28687 3dec 03       		.byte	0x3
+ 28688 3ded 00000000 		.quad	ShiftRowTable.7385
+ 28688      00000000 
+ 28689 3df5 35       		.uleb128 0x35
+ 28690 3df6 A00D0000 		.long	0xda0
+ 28691 3dfa 00000000 		.quad	.LBB1129
+ 28691      00000000 
+ 28692 3e02 00000000 		.quad	.LBE1129
+ 28692      00000000 
+ 28693 3e0a 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 788
+
+
+ 28694 3e0b 9B02     		.value	0x29b
+ 28695 3e0d 32       		.uleb128 0x32
+ 28696 3e0e BE0D0000 		.long	0xdbe
+ 28697 3e12 03       		.byte	0x3
+ 28698 3e13 91       		.byte	0x91
+ 28699 3e14 A065     		.sleb128 -3424
+ 28700 3e16 32       		.uleb128 0x32
+ 28701 3e17 B20D0000 		.long	0xdb2
+ 28702 3e1b 03       		.byte	0x3
+ 28703 3e1c 91       		.byte	0x91
+ 28704 3e1d B065     		.sleb128 -3408
+ 28705 3e1f 35       		.uleb128 0x35
+ 28706 3e20 CB0D0000 		.long	0xdcb
+ 28707 3e24 00000000 		.quad	.LBB1131
+ 28707      00000000 
+ 28708 3e2c 00000000 		.quad	.LBE1131
+ 28708      00000000 
+ 28709 3e34 02       		.byte	0x2
+ 28710 3e35 7501     		.value	0x175
+ 28711 3e37 32       		.uleb128 0x32
+ 28712 3e38 E90D0000 		.long	0xde9
+ 28713 3e3c 03       		.byte	0x3
+ 28714 3e3d 91       		.byte	0x91
+ 28715 3e3e C065     		.sleb128 -3392
+ 28716 3e40 32       		.uleb128 0x32
+ 28717 3e41 DD0D0000 		.long	0xddd
+ 28718 3e45 03       		.byte	0x3
+ 28719 3e46 91       		.byte	0x91
+ 28720 3e47 D065     		.sleb128 -3376
+ 28721 3e49 00       		.byte	0x0
+ 28722 3e4a 00       		.byte	0x0
+ 28723 3e4b 00       		.byte	0x0
+ 28724 3e4c 00       		.byte	0x0
+ 28725 3e4d 36       		.uleb128 0x36
+ 28726 3e4e 00000000 		.quad	.LBB1133
+ 28726      00000000 
+ 28727 3e56 00000000 		.quad	.LBE1133
+ 28727      00000000 
+ 28728 3e5e 6D3E0000 		.long	0x3e6d
+ 28729 3e62 34       		.uleb128 0x34
+ 28730 3e63 2C0C0000 		.long	0xc2c
+ 28731 3e67 04       		.byte	0x4
+ 28732 3e68 91       		.byte	0x91
+ 28733 3e69 90B07F   		.sleb128 -10224
+ 28734 3e6c 00       		.byte	0x0
+ 28735 3e6d 31       		.uleb128 0x31
+ 28736 3e6e 860E0000 		.long	0xe86
+ 28737 3e72 00000000 		.quad	.LBB1134
+ 28737      00000000 
+ 28738 3e7a 00000000 		.quad	.LBE1134
+ 28738      00000000 
+ 28739 3e82 02       		.byte	0x2
+ 28740 3e83 9606     		.value	0x696
+ 28741 3e85 9C3E0000 		.long	0x3e9c
+ 28742 3e89 32       		.uleb128 0x32
+ 28743 3e8a A10E0000 		.long	0xea1
+ 28744 3e8e 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 789
+
+
+ 28745 3e8f 91       		.byte	0x91
+ 28746 3e90 E065     		.sleb128 -3360
+ 28747 3e92 32       		.uleb128 0x32
+ 28748 3e93 970E0000 		.long	0xe97
+ 28749 3e97 03       		.byte	0x3
+ 28750 3e98 91       		.byte	0x91
+ 28751 3e99 F065     		.sleb128 -3344
+ 28752 3e9b 00       		.byte	0x0
+ 28753 3e9c 36       		.uleb128 0x36
+ 28754 3e9d 00000000 		.quad	.LBB1136
+ 28754      00000000 
+ 28755 3ea5 00000000 		.quad	.LBE1136
+ 28755      00000000 
+ 28756 3ead BC3E0000 		.long	0x3ebc
+ 28757 3eb1 34       		.uleb128 0x34
+ 28758 3eb2 3C0C0000 		.long	0xc3c
+ 28759 3eb6 04       		.byte	0x4
+ 28760 3eb7 91       		.byte	0x91
+ 28761 3eb8 80B07F   		.sleb128 -10240
+ 28762 3ebb 00       		.byte	0x0
+ 28763 3ebc 31       		.uleb128 0x31
+ 28764 3ebd AC0E0000 		.long	0xeac
+ 28765 3ec1 00000000 		.quad	.LBB1137
+ 28765      00000000 
+ 28766 3ec9 00000000 		.quad	.LBE1137
+ 28766      00000000 
+ 28767 3ed1 02       		.byte	0x2
+ 28768 3ed2 9806     		.value	0x698
+ 28769 3ed4 0D3F0000 		.long	0x3f0d
+ 28770 3ed8 32       		.uleb128 0x32
+ 28771 3ed9 BE0E0000 		.long	0xebe
+ 28772 3edd 03       		.byte	0x3
+ 28773 3ede 91       		.byte	0x91
+ 28774 3edf 8066     		.sleb128 -3328
+ 28775 3ee1 35       		.uleb128 0x35
+ 28776 3ee2 CB0E0000 		.long	0xecb
+ 28777 3ee6 00000000 		.quad	.LBB1139
+ 28777      00000000 
+ 28778 3eee 00000000 		.quad	.LBE1139
+ 28778      00000000 
+ 28779 3ef6 02       		.byte	0x2
+ 28780 3ef7 4905     		.value	0x549
+ 28781 3ef9 32       		.uleb128 0x32
+ 28782 3efa E90E0000 		.long	0xee9
+ 28783 3efe 03       		.byte	0x3
+ 28784 3eff 91       		.byte	0x91
+ 28785 3f00 9C66     		.sleb128 -3300
+ 28786 3f02 32       		.uleb128 0x32
+ 28787 3f03 DD0E0000 		.long	0xedd
+ 28788 3f07 03       		.byte	0x3
+ 28789 3f08 91       		.byte	0x91
+ 28790 3f09 A066     		.sleb128 -3296
+ 28791 3f0b 00       		.byte	0x0
+ 28792 3f0c 00       		.byte	0x0
+ 28793 3f0d 33       		.uleb128 0x33
+ 28794 3f0e 00000000 		.quad	.LBB1141
+ 28794      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 790
+
+
+ 28795 3f16 00000000 		.quad	.LBE1141
+ 28795      00000000 
+ 28796 3f1e 34       		.uleb128 0x34
+ 28797 3f1f 480C0000 		.long	0xc48
+ 28798 3f23 04       		.byte	0x4
+ 28799 3f24 91       		.byte	0x91
+ 28800 3f25 F0AF7F   		.sleb128 -10256
+ 28801 3f28 00       		.byte	0x0
+ 28802 3f29 00       		.byte	0x0
+ 28803 3f2a 00       		.byte	0x0
+ 28804 3f2b 31       		.uleb128 0x31
+ 28805 3f2c F60E0000 		.long	0xef6
+ 28806 3f30 00000000 		.quad	.LBB1142
+ 28806      00000000 
+ 28807 3f38 00000000 		.quad	.LBE1142
+ 28807      00000000 
+ 28808 3f40 02       		.byte	0x2
+ 28809 3f41 D606     		.value	0x6d6
+ 28810 3f43 40410000 		.long	0x4140
+ 28811 3f47 32       		.uleb128 0x32
+ 28812 3f48 080F0000 		.long	0xf08
+ 28813 3f4c 03       		.byte	0x3
+ 28814 3f4d 91       		.byte	0x91
+ 28815 3f4e B066     		.sleb128 -3280
+ 28816 3f50 33       		.uleb128 0x33
+ 28817 3f51 00000000 		.quad	.LBB1143
+ 28817      00000000 
+ 28818 3f59 00000000 		.quad	.LBE1143
+ 28818      00000000 
+ 28819 3f61 34       		.uleb128 0x34
+ 28820 3f62 140F0000 		.long	0xf14
+ 28821 3f66 04       		.byte	0x4
+ 28822 3f67 76       		.byte	0x76
+ 28823 3f68 D0AB7F   		.sleb128 -10800
+ 28824 3f6b 31       		.uleb128 0x31
+ 28825 3f6c 210F0000 		.long	0xf21
+ 28826 3f70 00000000 		.quad	.LBB1144
+ 28826      00000000 
+ 28827 3f78 00000000 		.quad	.LBE1144
+ 28827      00000000 
+ 28828 3f80 02       		.byte	0x2
+ 28829 3f81 1F06     		.value	0x61f
+ 28830 3f83 08400000 		.long	0x4008
+ 28831 3f87 32       		.uleb128 0x32
+ 28832 3f88 330F0000 		.long	0xf33
+ 28833 3f8c 03       		.byte	0x3
+ 28834 3f8d 91       		.byte	0x91
+ 28835 3f8e C066     		.sleb128 -3264
+ 28836 3f90 33       		.uleb128 0x33
+ 28837 3f91 00000000 		.quad	.LBB1145
+ 28837      00000000 
+ 28838 3f99 00000000 		.quad	.LBE1145
+ 28838      00000000 
+ 28839 3fa1 34       		.uleb128 0x34
+ 28840 3fa2 3F0F0000 		.long	0xf3f
+ 28841 3fa6 09       		.byte	0x9
+ 28842 3fa7 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 791
+
+
+ 28843 3fa8 00000000 		.quad	mask.7943
+ 28843      00000000 
+ 28844 3fb0 35       		.uleb128 0x35
+ 28845 3fb1 A00D0000 		.long	0xda0
+ 28846 3fb5 00000000 		.quad	.LBB1146
+ 28846      00000000 
+ 28847 3fbd 00000000 		.quad	.LBE1146
+ 28847      00000000 
+ 28848 3fc5 02       		.byte	0x2
+ 28849 3fc6 FE04     		.value	0x4fe
+ 28850 3fc8 32       		.uleb128 0x32
+ 28851 3fc9 BE0D0000 		.long	0xdbe
+ 28852 3fcd 03       		.byte	0x3
+ 28853 3fce 91       		.byte	0x91
+ 28854 3fcf D066     		.sleb128 -3248
+ 28855 3fd1 32       		.uleb128 0x32
+ 28856 3fd2 B20D0000 		.long	0xdb2
+ 28857 3fd6 03       		.byte	0x3
+ 28858 3fd7 91       		.byte	0x91
+ 28859 3fd8 E066     		.sleb128 -3232
+ 28860 3fda 35       		.uleb128 0x35
+ 28861 3fdb CB0D0000 		.long	0xdcb
+ 28862 3fdf 00000000 		.quad	.LBB1148
+ 28862      00000000 
+ 28863 3fe7 00000000 		.quad	.LBE1148
+ 28863      00000000 
+ 28864 3fef 02       		.byte	0x2
+ 28865 3ff0 7501     		.value	0x175
+ 28866 3ff2 32       		.uleb128 0x32
+ 28867 3ff3 E90D0000 		.long	0xde9
+ 28868 3ff7 03       		.byte	0x3
+ 28869 3ff8 91       		.byte	0x91
+ 28870 3ff9 F066     		.sleb128 -3216
+ 28871 3ffb 32       		.uleb128 0x32
+ 28872 3ffc DD0D0000 		.long	0xddd
+ 28873 4000 03       		.byte	0x3
+ 28874 4001 91       		.byte	0x91
+ 28875 4002 8067     		.sleb128 -3200
+ 28876 4004 00       		.byte	0x0
+ 28877 4005 00       		.byte	0x0
+ 28878 4006 00       		.byte	0x0
+ 28879 4007 00       		.byte	0x0
+ 28880 4008 31       		.uleb128 0x31
+ 28881 4009 210F0000 		.long	0xf21
+ 28882 400d 00000000 		.quad	.LBB1150
+ 28882      00000000 
+ 28883 4015 00000000 		.quad	.LBE1150
+ 28883      00000000 
+ 28884 401d 02       		.byte	0x2
+ 28885 401e 2006     		.value	0x620
+ 28886 4020 A5400000 		.long	0x40a5
+ 28887 4024 32       		.uleb128 0x32
+ 28888 4025 330F0000 		.long	0xf33
+ 28889 4029 03       		.byte	0x3
+ 28890 402a 91       		.byte	0x91
+ 28891 402b 9067     		.sleb128 -3184
+ 28892 402d 33       		.uleb128 0x33
+
GAS LISTING /tmp/ccjbMjHD.s 			page 792
+
+
+ 28893 402e 00000000 		.quad	.LBB1151
+ 28893      00000000 
+ 28894 4036 00000000 		.quad	.LBE1151
+ 28894      00000000 
+ 28895 403e 34       		.uleb128 0x34
+ 28896 403f 3F0F0000 		.long	0xf3f
+ 28897 4043 09       		.byte	0x9
+ 28898 4044 03       		.byte	0x3
+ 28899 4045 00000000 		.quad	mask.7943
+ 28899      00000000 
+ 28900 404d 35       		.uleb128 0x35
+ 28901 404e A00D0000 		.long	0xda0
+ 28902 4052 00000000 		.quad	.LBB1152
+ 28902      00000000 
+ 28903 405a 00000000 		.quad	.LBE1152
+ 28903      00000000 
+ 28904 4062 02       		.byte	0x2
+ 28905 4063 FE04     		.value	0x4fe
+ 28906 4065 32       		.uleb128 0x32
+ 28907 4066 BE0D0000 		.long	0xdbe
+ 28908 406a 03       		.byte	0x3
+ 28909 406b 91       		.byte	0x91
+ 28910 406c A067     		.sleb128 -3168
+ 28911 406e 32       		.uleb128 0x32
+ 28912 406f B20D0000 		.long	0xdb2
+ 28913 4073 03       		.byte	0x3
+ 28914 4074 91       		.byte	0x91
+ 28915 4075 B067     		.sleb128 -3152
+ 28916 4077 35       		.uleb128 0x35
+ 28917 4078 CB0D0000 		.long	0xdcb
+ 28918 407c 00000000 		.quad	.LBB1154
+ 28918      00000000 
+ 28919 4084 00000000 		.quad	.LBE1154
+ 28919      00000000 
+ 28920 408c 02       		.byte	0x2
+ 28921 408d 7501     		.value	0x175
+ 28922 408f 32       		.uleb128 0x32
+ 28923 4090 E90D0000 		.long	0xde9
+ 28924 4094 03       		.byte	0x3
+ 28925 4095 91       		.byte	0x91
+ 28926 4096 C067     		.sleb128 -3136
+ 28927 4098 32       		.uleb128 0x32
+ 28928 4099 DD0D0000 		.long	0xddd
+ 28929 409d 03       		.byte	0x3
+ 28930 409e 91       		.byte	0x91
+ 28931 409f D067     		.sleb128 -3120
+ 28932 40a1 00       		.byte	0x0
+ 28933 40a2 00       		.byte	0x0
+ 28934 40a3 00       		.byte	0x0
+ 28935 40a4 00       		.byte	0x0
+ 28936 40a5 35       		.uleb128 0x35
+ 28937 40a6 210F0000 		.long	0xf21
+ 28938 40aa 00000000 		.quad	.LBB1156
+ 28938      00000000 
+ 28939 40b2 00000000 		.quad	.LBE1156
+ 28939      00000000 
+ 28940 40ba 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 793
+
+
+ 28941 40bb 2106     		.value	0x621
+ 28942 40bd 32       		.uleb128 0x32
+ 28943 40be 330F0000 		.long	0xf33
+ 28944 40c2 03       		.byte	0x3
+ 28945 40c3 91       		.byte	0x91
+ 28946 40c4 E067     		.sleb128 -3104
+ 28947 40c6 33       		.uleb128 0x33
+ 28948 40c7 00000000 		.quad	.LBB1157
+ 28948      00000000 
+ 28949 40cf 00000000 		.quad	.LBE1157
+ 28949      00000000 
+ 28950 40d7 34       		.uleb128 0x34
+ 28951 40d8 3F0F0000 		.long	0xf3f
+ 28952 40dc 09       		.byte	0x9
+ 28953 40dd 03       		.byte	0x3
+ 28954 40de 00000000 		.quad	mask.7943
+ 28954      00000000 
+ 28955 40e6 35       		.uleb128 0x35
+ 28956 40e7 A00D0000 		.long	0xda0
+ 28957 40eb 00000000 		.quad	.LBB1158
+ 28957      00000000 
+ 28958 40f3 00000000 		.quad	.LBE1158
+ 28958      00000000 
+ 28959 40fb 02       		.byte	0x2
+ 28960 40fc FE04     		.value	0x4fe
+ 28961 40fe 32       		.uleb128 0x32
+ 28962 40ff BE0D0000 		.long	0xdbe
+ 28963 4103 03       		.byte	0x3
+ 28964 4104 91       		.byte	0x91
+ 28965 4105 F067     		.sleb128 -3088
+ 28966 4107 32       		.uleb128 0x32
+ 28967 4108 B20D0000 		.long	0xdb2
+ 28968 410c 03       		.byte	0x3
+ 28969 410d 91       		.byte	0x91
+ 28970 410e 8068     		.sleb128 -3072
+ 28971 4110 35       		.uleb128 0x35
+ 28972 4111 CB0D0000 		.long	0xdcb
+ 28973 4115 00000000 		.quad	.LBB1160
+ 28973      00000000 
+ 28974 411d 00000000 		.quad	.LBE1160
+ 28974      00000000 
+ 28975 4125 02       		.byte	0x2
+ 28976 4126 7501     		.value	0x175
+ 28977 4128 32       		.uleb128 0x32
+ 28978 4129 E90D0000 		.long	0xde9
+ 28979 412d 03       		.byte	0x3
+ 28980 412e 91       		.byte	0x91
+ 28981 412f 9068     		.sleb128 -3056
+ 28982 4131 32       		.uleb128 0x32
+ 28983 4132 DD0D0000 		.long	0xddd
+ 28984 4136 03       		.byte	0x3
+ 28985 4137 91       		.byte	0x91
+ 28986 4138 A068     		.sleb128 -3040
+ 28987 413a 00       		.byte	0x0
+ 28988 413b 00       		.byte	0x0
+ 28989 413c 00       		.byte	0x0
+ 28990 413d 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 794
+
+
+ 28991 413e 00       		.byte	0x0
+ 28992 413f 00       		.byte	0x0
+ 28993 4140 31       		.uleb128 0x31
+ 28994 4141 D50B0000 		.long	0xbd5
+ 28995 4145 00000000 		.quad	.LBB1162
+ 28995      00000000 
+ 28996 414d 00000000 		.quad	.LBE1162
+ 28996      00000000 
+ 28997 4155 02       		.byte	0x2
+ 28998 4156 D706     		.value	0x6d7
+ 28999 4158 23460000 		.long	0x4623
+ 29000 415c 32       		.uleb128 0x32
+ 29001 415d F30B0000 		.long	0xbf3
+ 29002 4161 03       		.byte	0x3
+ 29003 4162 91       		.byte	0x91
+ 29004 4163 BC68     		.sleb128 -3012
+ 29005 4165 32       		.uleb128 0x32
+ 29006 4166 E70B0000 		.long	0xbe7
+ 29007 416a 03       		.byte	0x3
+ 29008 416b 91       		.byte	0x91
+ 29009 416c C068     		.sleb128 -3008
+ 29010 416e 33       		.uleb128 0x33
+ 29011 416f 00000000 		.quad	.LBB1163
+ 29011      00000000 
+ 29012 4177 00000000 		.quad	.LBE1163
+ 29012      00000000 
+ 29013 417f 34       		.uleb128 0x34
+ 29014 4180 FF0B0000 		.long	0xbff
+ 29015 4184 04       		.byte	0x4
+ 29016 4185 76       		.byte	0x76
+ 29017 4186 F0AB7F   		.sleb128 -10768
+ 29018 4189 34       		.uleb128 0x34
+ 29019 418a 0B0C0000 		.long	0xc0b
+ 29020 418e 04       		.byte	0x4
+ 29021 418f 76       		.byte	0x76
+ 29022 4190 E0AB7F   		.sleb128 -10784
+ 29023 4193 31       		.uleb128 0x31
+ 29024 4194 540C0000 		.long	0xc54
+ 29025 4198 00000000 		.quad	.LBB1164
+ 29025      00000000 
+ 29026 41a0 00000000 		.quad	.LBE1164
+ 29026      00000000 
+ 29027 41a8 02       		.byte	0x2
+ 29028 41a9 9106     		.value	0x691
+ 29029 41ab FF410000 		.long	0x41ff
+ 29030 41af 32       		.uleb128 0x32
+ 29031 41b0 7E0C0000 		.long	0xc7e
+ 29032 41b4 03       		.byte	0x3
+ 29033 41b5 91       		.byte	0x91
+ 29034 41b6 D868     		.sleb128 -2984
+ 29035 41b8 32       		.uleb128 0x32
+ 29036 41b9 720C0000 		.long	0xc72
+ 29037 41bd 03       		.byte	0x3
+ 29038 41be 91       		.byte	0x91
+ 29039 41bf DC68     		.sleb128 -2980
+ 29040 41c1 32       		.uleb128 0x32
+ 29041 41c2 660C0000 		.long	0xc66
+
GAS LISTING /tmp/ccjbMjHD.s 			page 795
+
+
+ 29042 41c6 03       		.byte	0x3
+ 29043 41c7 91       		.byte	0x91
+ 29044 41c8 E068     		.sleb128 -2976
+ 29045 41ca 35       		.uleb128 0x35
+ 29046 41cb 8B0C0000 		.long	0xc8b
+ 29047 41cf 00000000 		.quad	.LBB1166
+ 29047      00000000 
+ 29048 41d7 00000000 		.quad	.LBE1166
+ 29048      00000000 
+ 29049 41df 02       		.byte	0x2
+ 29050 41e0 0702     		.value	0x207
+ 29051 41e2 32       		.uleb128 0x32
+ 29052 41e3 B40C0000 		.long	0xcb4
+ 29053 41e7 03       		.byte	0x3
+ 29054 41e8 91       		.byte	0x91
+ 29055 41e9 F868     		.sleb128 -2952
+ 29056 41eb 32       		.uleb128 0x32
+ 29057 41ec A90C0000 		.long	0xca9
+ 29058 41f0 03       		.byte	0x3
+ 29059 41f1 91       		.byte	0x91
+ 29060 41f2 FC68     		.sleb128 -2948
+ 29061 41f4 32       		.uleb128 0x32
+ 29062 41f5 9D0C0000 		.long	0xc9d
+ 29063 41f9 03       		.byte	0x3
+ 29064 41fa 91       		.byte	0x91
+ 29065 41fb 8069     		.sleb128 -2944
+ 29066 41fd 00       		.byte	0x0
+ 29067 41fe 00       		.byte	0x0
+ 29068 41ff 31       		.uleb128 0x31
+ 29069 4200 C10C0000 		.long	0xcc1
+ 29070 4204 00000000 		.quad	.LBB1168
+ 29070      00000000 
+ 29071 420c 00000000 		.quad	.LBE1168
+ 29071      00000000 
+ 29072 4214 02       		.byte	0x2
+ 29073 4215 9206     		.value	0x692
+ 29074 4217 88440000 		.long	0x4488
+ 29075 421b 32       		.uleb128 0x32
+ 29076 421c D30C0000 		.long	0xcd3
+ 29077 4220 03       		.byte	0x3
+ 29078 4221 91       		.byte	0x91
+ 29079 4222 9069     		.sleb128 -2928
+ 29080 4224 35       		.uleb128 0x35
+ 29081 4225 E00C0000 		.long	0xce0
+ 29082 4229 00000000 		.quad	.LBB1170
+ 29082      00000000 
+ 29083 4231 00000000 		.quad	.LBE1170
+ 29083      00000000 
+ 29084 4239 02       		.byte	0x2
+ 29085 423a 7D03     		.value	0x37d
+ 29086 423c 32       		.uleb128 0x32
+ 29087 423d FE0C0000 		.long	0xcfe
+ 29088 4241 03       		.byte	0x3
+ 29089 4242 91       		.byte	0x91
+ 29090 4243 A869     		.sleb128 -2904
+ 29091 4245 32       		.uleb128 0x32
+ 29092 4246 F20C0000 		.long	0xcf2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 796
+
+
+ 29093 424a 03       		.byte	0x3
+ 29094 424b 91       		.byte	0x91
+ 29095 424c B069     		.sleb128 -2896
+ 29096 424e 33       		.uleb128 0x33
+ 29097 424f 00000000 		.quad	.LBB1171
+ 29097      00000000 
+ 29098 4257 00000000 		.quad	.LBE1171
+ 29098      00000000 
+ 29099 425f 34       		.uleb128 0x34
+ 29100 4260 0A0D0000 		.long	0xd0a
+ 29101 4264 03       		.byte	0x3
+ 29102 4265 91       		.byte	0x91
+ 29103 4266 806A     		.sleb128 -2816
+ 29104 4268 34       		.uleb128 0x34
+ 29105 4269 150D0000 		.long	0xd15
+ 29106 426d 03       		.byte	0x3
+ 29107 426e 91       		.byte	0x91
+ 29108 426f F069     		.sleb128 -2832
+ 29109 4271 34       		.uleb128 0x34
+ 29110 4272 200D0000 		.long	0xd20
+ 29111 4276 03       		.byte	0x3
+ 29112 4277 91       		.byte	0x91
+ 29113 4278 E069     		.sleb128 -2848
+ 29114 427a 34       		.uleb128 0x34
+ 29115 427b 2C0D0000 		.long	0xd2c
+ 29116 427f 03       		.byte	0x3
+ 29117 4280 91       		.byte	0x91
+ 29118 4281 D069     		.sleb128 -2864
+ 29119 4283 34       		.uleb128 0x34
+ 29120 4284 380D0000 		.long	0xd38
+ 29121 4288 03       		.byte	0x3
+ 29122 4289 91       		.byte	0x91
+ 29123 428a CC69     		.sleb128 -2868
+ 29124 428c 31       		.uleb128 0x31
+ 29125 428d 4F0D0000 		.long	0xd4f
+ 29126 4291 00000000 		.quad	.LBB1172
+ 29126      00000000 
+ 29127 4299 00000000 		.quad	.LBE1172
+ 29127      00000000 
+ 29128 42a1 02       		.byte	0x2
+ 29129 42a2 5603     		.value	0x356
+ 29130 42a4 BB420000 		.long	0x42bb
+ 29131 42a8 32       		.uleb128 0x32
+ 29132 42a9 6A0D0000 		.long	0xd6a
+ 29133 42ad 03       		.byte	0x3
+ 29134 42ae 91       		.byte	0x91
+ 29135 42af 906A     		.sleb128 -2800
+ 29136 42b1 32       		.uleb128 0x32
+ 29137 42b2 600D0000 		.long	0xd60
+ 29138 42b6 03       		.byte	0x3
+ 29139 42b7 91       		.byte	0x91
+ 29140 42b8 A06A     		.sleb128 -2784
+ 29141 42ba 00       		.byte	0x0
+ 29142 42bb 31       		.uleb128 0x31
+ 29143 42bc 750D0000 		.long	0xd75
+ 29144 42c0 00000000 		.quad	.LBB1174
+ 29144      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 797
+
+
+ 29145 42c8 00000000 		.quad	.LBE1174
+ 29145      00000000 
+ 29146 42d0 02       		.byte	0x2
+ 29147 42d1 5903     		.value	0x359
+ 29148 42d3 EA420000 		.long	0x42ea
+ 29149 42d7 32       		.uleb128 0x32
+ 29150 42d8 930D0000 		.long	0xd93
+ 29151 42dc 03       		.byte	0x3
+ 29152 42dd 91       		.byte	0x91
+ 29153 42de BC6A     		.sleb128 -2756
+ 29154 42e0 32       		.uleb128 0x32
+ 29155 42e1 870D0000 		.long	0xd87
+ 29156 42e5 03       		.byte	0x3
+ 29157 42e6 91       		.byte	0x91
+ 29158 42e7 C06A     		.sleb128 -2752
+ 29159 42e9 00       		.byte	0x0
+ 29160 42ea 31       		.uleb128 0x31
+ 29161 42eb 4F0D0000 		.long	0xd4f
+ 29162 42ef 00000000 		.quad	.LBB1176
+ 29162      00000000 
+ 29163 42f7 00000000 		.quad	.LBE1176
+ 29163      00000000 
+ 29164 42ff 02       		.byte	0x2
+ 29165 4300 5B03     		.value	0x35b
+ 29166 4302 19430000 		.long	0x4319
+ 29167 4306 32       		.uleb128 0x32
+ 29168 4307 6A0D0000 		.long	0xd6a
+ 29169 430b 03       		.byte	0x3
+ 29170 430c 91       		.byte	0x91
+ 29171 430d D06A     		.sleb128 -2736
+ 29172 430f 32       		.uleb128 0x32
+ 29173 4310 600D0000 		.long	0xd60
+ 29174 4314 03       		.byte	0x3
+ 29175 4315 91       		.byte	0x91
+ 29176 4316 E06A     		.sleb128 -2720
+ 29177 4318 00       		.byte	0x0
+ 29178 4319 31       		.uleb128 0x31
+ 29179 431a A00D0000 		.long	0xda0
+ 29180 431e 00000000 		.quad	.LBB1178
+ 29180      00000000 
+ 29181 4326 00000000 		.quad	.LBE1178
+ 29181      00000000 
+ 29182 432e 02       		.byte	0x2
+ 29183 432f 6403     		.value	0x364
+ 29184 4331 73430000 		.long	0x4373
+ 29185 4335 32       		.uleb128 0x32
+ 29186 4336 BE0D0000 		.long	0xdbe
+ 29187 433a 03       		.byte	0x3
+ 29188 433b 91       		.byte	0x91
+ 29189 433c F06A     		.sleb128 -2704
+ 29190 433e 32       		.uleb128 0x32
+ 29191 433f B20D0000 		.long	0xdb2
+ 29192 4343 03       		.byte	0x3
+ 29193 4344 91       		.byte	0x91
+ 29194 4345 806B     		.sleb128 -2688
+ 29195 4347 35       		.uleb128 0x35
+ 29196 4348 CB0D0000 		.long	0xdcb
+
GAS LISTING /tmp/ccjbMjHD.s 			page 798
+
+
+ 29197 434c 00000000 		.quad	.LBB1180
+ 29197      00000000 
+ 29198 4354 00000000 		.quad	.LBE1180
+ 29198      00000000 
+ 29199 435c 02       		.byte	0x2
+ 29200 435d 7501     		.value	0x175
+ 29201 435f 32       		.uleb128 0x32
+ 29202 4360 E90D0000 		.long	0xde9
+ 29203 4364 03       		.byte	0x3
+ 29204 4365 91       		.byte	0x91
+ 29205 4366 906B     		.sleb128 -2672
+ 29206 4368 32       		.uleb128 0x32
+ 29207 4369 DD0D0000 		.long	0xddd
+ 29208 436d 03       		.byte	0x3
+ 29209 436e 91       		.byte	0x91
+ 29210 436f A06B     		.sleb128 -2656
+ 29211 4371 00       		.byte	0x0
+ 29212 4372 00       		.byte	0x0
+ 29213 4373 31       		.uleb128 0x31
+ 29214 4374 FB0D0000 		.long	0xdfb
+ 29215 4378 00000000 		.quad	.LBB1182
+ 29215      00000000 
+ 29216 4380 00000000 		.quad	.LBE1182
+ 29216      00000000 
+ 29217 4388 02       		.byte	0x2
+ 29218 4389 6603     		.value	0x366
+ 29219 438b A2430000 		.long	0x43a2
+ 29220 438f 32       		.uleb128 0x32
+ 29221 4390 160E0000 		.long	0xe16
+ 29222 4394 03       		.byte	0x3
+ 29223 4395 91       		.byte	0x91
+ 29224 4396 B06B     		.sleb128 -2640
+ 29225 4398 32       		.uleb128 0x32
+ 29226 4399 0C0E0000 		.long	0xe0c
+ 29227 439d 03       		.byte	0x3
+ 29228 439e 91       		.byte	0x91
+ 29229 439f C06B     		.sleb128 -2624
+ 29230 43a1 00       		.byte	0x0
+ 29231 43a2 31       		.uleb128 0x31
+ 29232 43a3 A00D0000 		.long	0xda0
+ 29233 43a7 00000000 		.quad	.LBB1184
+ 29233      00000000 
+ 29234 43af 00000000 		.quad	.LBE1184
+ 29234      00000000 
+ 29235 43b7 02       		.byte	0x2
+ 29236 43b8 6803     		.value	0x368
+ 29237 43ba FC430000 		.long	0x43fc
+ 29238 43be 32       		.uleb128 0x32
+ 29239 43bf BE0D0000 		.long	0xdbe
+ 29240 43c3 03       		.byte	0x3
+ 29241 43c4 91       		.byte	0x91
+ 29242 43c5 D06B     		.sleb128 -2608
+ 29243 43c7 32       		.uleb128 0x32
+ 29244 43c8 B20D0000 		.long	0xdb2
+ 29245 43cc 03       		.byte	0x3
+ 29246 43cd 91       		.byte	0x91
+ 29247 43ce E06B     		.sleb128 -2592
+
GAS LISTING /tmp/ccjbMjHD.s 			page 799
+
+
+ 29248 43d0 35       		.uleb128 0x35
+ 29249 43d1 CB0D0000 		.long	0xdcb
+ 29250 43d5 00000000 		.quad	.LBB1186
+ 29250      00000000 
+ 29251 43dd 00000000 		.quad	.LBE1186
+ 29251      00000000 
+ 29252 43e5 02       		.byte	0x2
+ 29253 43e6 7501     		.value	0x175
+ 29254 43e8 32       		.uleb128 0x32
+ 29255 43e9 E90D0000 		.long	0xde9
+ 29256 43ed 03       		.byte	0x3
+ 29257 43ee 91       		.byte	0x91
+ 29258 43ef F06B     		.sleb128 -2576
+ 29259 43f1 32       		.uleb128 0x32
+ 29260 43f2 DD0D0000 		.long	0xddd
+ 29261 43f6 03       		.byte	0x3
+ 29262 43f7 91       		.byte	0x91
+ 29263 43f8 806C     		.sleb128 -2560
+ 29264 43fa 00       		.byte	0x0
+ 29265 43fb 00       		.byte	0x0
+ 29266 43fc 31       		.uleb128 0x31
+ 29267 43fd FB0D0000 		.long	0xdfb
+ 29268 4401 00000000 		.quad	.LBB1188
+ 29268      00000000 
+ 29269 4409 00000000 		.quad	.LBE1188
+ 29269      00000000 
+ 29270 4411 02       		.byte	0x2
+ 29271 4412 6A03     		.value	0x36a
+ 29272 4414 2B440000 		.long	0x442b
+ 29273 4418 32       		.uleb128 0x32
+ 29274 4419 160E0000 		.long	0xe16
+ 29275 441d 03       		.byte	0x3
+ 29276 441e 91       		.byte	0x91
+ 29277 441f 906C     		.sleb128 -2544
+ 29278 4421 32       		.uleb128 0x32
+ 29279 4422 0C0E0000 		.long	0xe0c
+ 29280 4426 03       		.byte	0x3
+ 29281 4427 91       		.byte	0x91
+ 29282 4428 A06C     		.sleb128 -2528
+ 29283 442a 00       		.byte	0x0
+ 29284 442b 31       		.uleb128 0x31
+ 29285 442c 210E0000 		.long	0xe21
+ 29286 4430 00000000 		.quad	.LBB1190
+ 29286      00000000 
+ 29287 4438 00000000 		.quad	.LBE1190
+ 29287      00000000 
+ 29288 4440 02       		.byte	0x2
+ 29289 4441 6C03     		.value	0x36c
+ 29290 4443 5A440000 		.long	0x445a
+ 29291 4447 32       		.uleb128 0x32
+ 29292 4448 3E0E0000 		.long	0xe3e
+ 29293 444c 03       		.byte	0x3
+ 29294 444d 91       		.byte	0x91
+ 29295 444e B06C     		.sleb128 -2512
+ 29296 4450 32       		.uleb128 0x32
+ 29297 4451 330E0000 		.long	0xe33
+ 29298 4455 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 800
+
+
+ 29299 4456 91       		.byte	0x91
+ 29300 4457 C06C     		.sleb128 -2496
+ 29301 4459 00       		.byte	0x0
+ 29302 445a 35       		.uleb128 0x35
+ 29303 445b 4F0D0000 		.long	0xd4f
+ 29304 445f 00000000 		.quad	.LBB1192
+ 29304      00000000 
+ 29305 4467 00000000 		.quad	.LBE1192
+ 29305      00000000 
+ 29306 446f 02       		.byte	0x2
+ 29307 4470 6E03     		.value	0x36e
+ 29308 4472 32       		.uleb128 0x32
+ 29309 4473 6A0D0000 		.long	0xd6a
+ 29310 4477 03       		.byte	0x3
+ 29311 4478 91       		.byte	0x91
+ 29312 4479 D06C     		.sleb128 -2480
+ 29313 447b 32       		.uleb128 0x32
+ 29314 447c 600D0000 		.long	0xd60
+ 29315 4480 03       		.byte	0x3
+ 29316 4481 91       		.byte	0x91
+ 29317 4482 E06C     		.sleb128 -2464
+ 29318 4484 00       		.byte	0x0
+ 29319 4485 00       		.byte	0x0
+ 29320 4486 00       		.byte	0x0
+ 29321 4487 00       		.byte	0x0
+ 29322 4488 36       		.uleb128 0x36
+ 29323 4489 00000000 		.quad	.LBB1194
+ 29323      00000000 
+ 29324 4491 00000000 		.quad	.LBE1194
+ 29324      00000000 
+ 29325 4499 A8440000 		.long	0x44a8
+ 29326 449d 34       		.uleb128 0x34
+ 29327 449e 1C0C0000 		.long	0xc1c
+ 29328 44a2 04       		.byte	0x4
+ 29329 44a3 91       		.byte	0x91
+ 29330 44a4 E0B07F   		.sleb128 -10144
+ 29331 44a7 00       		.byte	0x0
+ 29332 44a8 31       		.uleb128 0x31
+ 29333 44a9 4A0E0000 		.long	0xe4a
+ 29334 44ad 00000000 		.quad	.LBB1195
+ 29334      00000000 
+ 29335 44b5 00000000 		.quad	.LBE1195
+ 29335      00000000 
+ 29336 44bd 02       		.byte	0x2
+ 29337 44be 9406     		.value	0x694
+ 29338 44c0 45450000 		.long	0x4545
+ 29339 44c4 32       		.uleb128 0x32
+ 29340 44c5 5C0E0000 		.long	0xe5c
+ 29341 44c9 03       		.byte	0x3
+ 29342 44ca 91       		.byte	0x91
+ 29343 44cb F06C     		.sleb128 -2448
+ 29344 44cd 33       		.uleb128 0x33
+ 29345 44ce 00000000 		.quad	.LBB1196
+ 29345      00000000 
+ 29346 44d6 00000000 		.quad	.LBE1196
+ 29346      00000000 
+ 29347 44de 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s 			page 801
+
+
+ 29348 44df 680E0000 		.long	0xe68
+ 29349 44e3 09       		.byte	0x9
+ 29350 44e4 03       		.byte	0x3
+ 29351 44e5 00000000 		.quad	ShiftRowTable.7385
+ 29351      00000000 
+ 29352 44ed 35       		.uleb128 0x35
+ 29353 44ee A00D0000 		.long	0xda0
+ 29354 44f2 00000000 		.quad	.LBB1197
+ 29354      00000000 
+ 29355 44fa 00000000 		.quad	.LBE1197
+ 29355      00000000 
+ 29356 4502 02       		.byte	0x2
+ 29357 4503 9B02     		.value	0x29b
+ 29358 4505 32       		.uleb128 0x32
+ 29359 4506 BE0D0000 		.long	0xdbe
+ 29360 450a 03       		.byte	0x3
+ 29361 450b 91       		.byte	0x91
+ 29362 450c 806D     		.sleb128 -2432
+ 29363 450e 32       		.uleb128 0x32
+ 29364 450f B20D0000 		.long	0xdb2
+ 29365 4513 03       		.byte	0x3
+ 29366 4514 91       		.byte	0x91
+ 29367 4515 906D     		.sleb128 -2416
+ 29368 4517 35       		.uleb128 0x35
+ 29369 4518 CB0D0000 		.long	0xdcb
+ 29370 451c 00000000 		.quad	.LBB1199
+ 29370      00000000 
+ 29371 4524 00000000 		.quad	.LBE1199
+ 29371      00000000 
+ 29372 452c 02       		.byte	0x2
+ 29373 452d 7501     		.value	0x175
+ 29374 452f 32       		.uleb128 0x32
+ 29375 4530 E90D0000 		.long	0xde9
+ 29376 4534 03       		.byte	0x3
+ 29377 4535 91       		.byte	0x91
+ 29378 4536 A06D     		.sleb128 -2400
+ 29379 4538 32       		.uleb128 0x32
+ 29380 4539 DD0D0000 		.long	0xddd
+ 29381 453d 03       		.byte	0x3
+ 29382 453e 91       		.byte	0x91
+ 29383 453f B06D     		.sleb128 -2384
+ 29384 4541 00       		.byte	0x0
+ 29385 4542 00       		.byte	0x0
+ 29386 4543 00       		.byte	0x0
+ 29387 4544 00       		.byte	0x0
+ 29388 4545 36       		.uleb128 0x36
+ 29389 4546 00000000 		.quad	.LBB1201
+ 29389      00000000 
+ 29390 454e 00000000 		.quad	.LBE1201
+ 29390      00000000 
+ 29391 4556 65450000 		.long	0x4565
+ 29392 455a 34       		.uleb128 0x34
+ 29393 455b 2C0C0000 		.long	0xc2c
+ 29394 455f 04       		.byte	0x4
+ 29395 4560 91       		.byte	0x91
+ 29396 4561 D0B07F   		.sleb128 -10160
+ 29397 4564 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 802
+
+
+ 29398 4565 31       		.uleb128 0x31
+ 29399 4566 860E0000 		.long	0xe86
+ 29400 456a 00000000 		.quad	.LBB1202
+ 29400      00000000 
+ 29401 4572 00000000 		.quad	.LBE1202
+ 29401      00000000 
+ 29402 457a 02       		.byte	0x2
+ 29403 457b 9606     		.value	0x696
+ 29404 457d 94450000 		.long	0x4594
+ 29405 4581 32       		.uleb128 0x32
+ 29406 4582 A10E0000 		.long	0xea1
+ 29407 4586 03       		.byte	0x3
+ 29408 4587 91       		.byte	0x91
+ 29409 4588 C06D     		.sleb128 -2368
+ 29410 458a 32       		.uleb128 0x32
+ 29411 458b 970E0000 		.long	0xe97
+ 29412 458f 03       		.byte	0x3
+ 29413 4590 91       		.byte	0x91
+ 29414 4591 D06D     		.sleb128 -2352
+ 29415 4593 00       		.byte	0x0
+ 29416 4594 36       		.uleb128 0x36
+ 29417 4595 00000000 		.quad	.LBB1204
+ 29417      00000000 
+ 29418 459d 00000000 		.quad	.LBE1204
+ 29418      00000000 
+ 29419 45a5 B4450000 		.long	0x45b4
+ 29420 45a9 34       		.uleb128 0x34
+ 29421 45aa 3C0C0000 		.long	0xc3c
+ 29422 45ae 04       		.byte	0x4
+ 29423 45af 91       		.byte	0x91
+ 29424 45b0 C0B07F   		.sleb128 -10176
+ 29425 45b3 00       		.byte	0x0
+ 29426 45b4 31       		.uleb128 0x31
+ 29427 45b5 AC0E0000 		.long	0xeac
+ 29428 45b9 00000000 		.quad	.LBB1205
+ 29428      00000000 
+ 29429 45c1 00000000 		.quad	.LBE1205
+ 29429      00000000 
+ 29430 45c9 02       		.byte	0x2
+ 29431 45ca 9806     		.value	0x698
+ 29432 45cc 05460000 		.long	0x4605
+ 29433 45d0 32       		.uleb128 0x32
+ 29434 45d1 BE0E0000 		.long	0xebe
+ 29435 45d5 03       		.byte	0x3
+ 29436 45d6 91       		.byte	0x91
+ 29437 45d7 E06D     		.sleb128 -2336
+ 29438 45d9 35       		.uleb128 0x35
+ 29439 45da CB0E0000 		.long	0xecb
+ 29440 45de 00000000 		.quad	.LBB1207
+ 29440      00000000 
+ 29441 45e6 00000000 		.quad	.LBE1207
+ 29441      00000000 
+ 29442 45ee 02       		.byte	0x2
+ 29443 45ef 4905     		.value	0x549
+ 29444 45f1 32       		.uleb128 0x32
+ 29445 45f2 E90E0000 		.long	0xee9
+ 29446 45f6 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 803
+
+
+ 29447 45f7 91       		.byte	0x91
+ 29448 45f8 FC6D     		.sleb128 -2308
+ 29449 45fa 32       		.uleb128 0x32
+ 29450 45fb DD0E0000 		.long	0xedd
+ 29451 45ff 03       		.byte	0x3
+ 29452 4600 91       		.byte	0x91
+ 29453 4601 806E     		.sleb128 -2304
+ 29454 4603 00       		.byte	0x0
+ 29455 4604 00       		.byte	0x0
+ 29456 4605 33       		.uleb128 0x33
+ 29457 4606 00000000 		.quad	.LBB1209
+ 29457      00000000 
+ 29458 460e 00000000 		.quad	.LBE1209
+ 29458      00000000 
+ 29459 4616 34       		.uleb128 0x34
+ 29460 4617 480C0000 		.long	0xc48
+ 29461 461b 04       		.byte	0x4
+ 29462 461c 91       		.byte	0x91
+ 29463 461d B0B07F   		.sleb128 -10192
+ 29464 4620 00       		.byte	0x0
+ 29465 4621 00       		.byte	0x0
+ 29466 4622 00       		.byte	0x0
+ 29467 4623 31       		.uleb128 0x31
+ 29468 4624 F60E0000 		.long	0xef6
+ 29469 4628 00000000 		.quad	.LBB1210
+ 29469      00000000 
+ 29470 4630 00000000 		.quad	.LBE1210
+ 29470      00000000 
+ 29471 4638 02       		.byte	0x2
+ 29472 4639 D706     		.value	0x6d7
+ 29473 463b 38480000 		.long	0x4838
+ 29474 463f 32       		.uleb128 0x32
+ 29475 4640 080F0000 		.long	0xf08
+ 29476 4644 03       		.byte	0x3
+ 29477 4645 91       		.byte	0x91
+ 29478 4646 906E     		.sleb128 -2288
+ 29479 4648 33       		.uleb128 0x33
+ 29480 4649 00000000 		.quad	.LBB1211
+ 29480      00000000 
+ 29481 4651 00000000 		.quad	.LBE1211
+ 29481      00000000 
+ 29482 4659 34       		.uleb128 0x34
+ 29483 465a 140F0000 		.long	0xf14
+ 29484 465e 04       		.byte	0x4
+ 29485 465f 76       		.byte	0x76
+ 29486 4660 80AC7F   		.sleb128 -10752
+ 29487 4663 31       		.uleb128 0x31
+ 29488 4664 210F0000 		.long	0xf21
+ 29489 4668 00000000 		.quad	.LBB1212
+ 29489      00000000 
+ 29490 4670 00000000 		.quad	.LBE1212
+ 29490      00000000 
+ 29491 4678 02       		.byte	0x2
+ 29492 4679 1F06     		.value	0x61f
+ 29493 467b 00470000 		.long	0x4700
+ 29494 467f 32       		.uleb128 0x32
+ 29495 4680 330F0000 		.long	0xf33
+
GAS LISTING /tmp/ccjbMjHD.s 			page 804
+
+
+ 29496 4684 03       		.byte	0x3
+ 29497 4685 91       		.byte	0x91
+ 29498 4686 A06E     		.sleb128 -2272
+ 29499 4688 33       		.uleb128 0x33
+ 29500 4689 00000000 		.quad	.LBB1213
+ 29500      00000000 
+ 29501 4691 00000000 		.quad	.LBE1213
+ 29501      00000000 
+ 29502 4699 34       		.uleb128 0x34
+ 29503 469a 3F0F0000 		.long	0xf3f
+ 29504 469e 09       		.byte	0x9
+ 29505 469f 03       		.byte	0x3
+ 29506 46a0 00000000 		.quad	mask.7943
+ 29506      00000000 
+ 29507 46a8 35       		.uleb128 0x35
+ 29508 46a9 A00D0000 		.long	0xda0
+ 29509 46ad 00000000 		.quad	.LBB1214
+ 29509      00000000 
+ 29510 46b5 00000000 		.quad	.LBE1214
+ 29510      00000000 
+ 29511 46bd 02       		.byte	0x2
+ 29512 46be FE04     		.value	0x4fe
+ 29513 46c0 32       		.uleb128 0x32
+ 29514 46c1 BE0D0000 		.long	0xdbe
+ 29515 46c5 03       		.byte	0x3
+ 29516 46c6 91       		.byte	0x91
+ 29517 46c7 B06E     		.sleb128 -2256
+ 29518 46c9 32       		.uleb128 0x32
+ 29519 46ca B20D0000 		.long	0xdb2
+ 29520 46ce 03       		.byte	0x3
+ 29521 46cf 91       		.byte	0x91
+ 29522 46d0 C06E     		.sleb128 -2240
+ 29523 46d2 35       		.uleb128 0x35
+ 29524 46d3 CB0D0000 		.long	0xdcb
+ 29525 46d7 00000000 		.quad	.LBB1216
+ 29525      00000000 
+ 29526 46df 00000000 		.quad	.LBE1216
+ 29526      00000000 
+ 29527 46e7 02       		.byte	0x2
+ 29528 46e8 7501     		.value	0x175
+ 29529 46ea 32       		.uleb128 0x32
+ 29530 46eb E90D0000 		.long	0xde9
+ 29531 46ef 03       		.byte	0x3
+ 29532 46f0 91       		.byte	0x91
+ 29533 46f1 D06E     		.sleb128 -2224
+ 29534 46f3 32       		.uleb128 0x32
+ 29535 46f4 DD0D0000 		.long	0xddd
+ 29536 46f8 03       		.byte	0x3
+ 29537 46f9 91       		.byte	0x91
+ 29538 46fa E06E     		.sleb128 -2208
+ 29539 46fc 00       		.byte	0x0
+ 29540 46fd 00       		.byte	0x0
+ 29541 46fe 00       		.byte	0x0
+ 29542 46ff 00       		.byte	0x0
+ 29543 4700 31       		.uleb128 0x31
+ 29544 4701 210F0000 		.long	0xf21
+ 29545 4705 00000000 		.quad	.LBB1218
+
GAS LISTING /tmp/ccjbMjHD.s 			page 805
+
+
+ 29545      00000000 
+ 29546 470d 00000000 		.quad	.LBE1218
+ 29546      00000000 
+ 29547 4715 02       		.byte	0x2
+ 29548 4716 2006     		.value	0x620
+ 29549 4718 9D470000 		.long	0x479d
+ 29550 471c 32       		.uleb128 0x32
+ 29551 471d 330F0000 		.long	0xf33
+ 29552 4721 03       		.byte	0x3
+ 29553 4722 91       		.byte	0x91
+ 29554 4723 F06E     		.sleb128 -2192
+ 29555 4725 33       		.uleb128 0x33
+ 29556 4726 00000000 		.quad	.LBB1219
+ 29556      00000000 
+ 29557 472e 00000000 		.quad	.LBE1219
+ 29557      00000000 
+ 29558 4736 34       		.uleb128 0x34
+ 29559 4737 3F0F0000 		.long	0xf3f
+ 29560 473b 09       		.byte	0x9
+ 29561 473c 03       		.byte	0x3
+ 29562 473d 00000000 		.quad	mask.7943
+ 29562      00000000 
+ 29563 4745 35       		.uleb128 0x35
+ 29564 4746 A00D0000 		.long	0xda0
+ 29565 474a 00000000 		.quad	.LBB1220
+ 29565      00000000 
+ 29566 4752 00000000 		.quad	.LBE1220
+ 29566      00000000 
+ 29567 475a 02       		.byte	0x2
+ 29568 475b FE04     		.value	0x4fe
+ 29569 475d 32       		.uleb128 0x32
+ 29570 475e BE0D0000 		.long	0xdbe
+ 29571 4762 03       		.byte	0x3
+ 29572 4763 91       		.byte	0x91
+ 29573 4764 806F     		.sleb128 -2176
+ 29574 4766 32       		.uleb128 0x32
+ 29575 4767 B20D0000 		.long	0xdb2
+ 29576 476b 03       		.byte	0x3
+ 29577 476c 91       		.byte	0x91
+ 29578 476d 906F     		.sleb128 -2160
+ 29579 476f 35       		.uleb128 0x35
+ 29580 4770 CB0D0000 		.long	0xdcb
+ 29581 4774 00000000 		.quad	.LBB1222
+ 29581      00000000 
+ 29582 477c 00000000 		.quad	.LBE1222
+ 29582      00000000 
+ 29583 4784 02       		.byte	0x2
+ 29584 4785 7501     		.value	0x175
+ 29585 4787 32       		.uleb128 0x32
+ 29586 4788 E90D0000 		.long	0xde9
+ 29587 478c 03       		.byte	0x3
+ 29588 478d 91       		.byte	0x91
+ 29589 478e A06F     		.sleb128 -2144
+ 29590 4790 32       		.uleb128 0x32
+ 29591 4791 DD0D0000 		.long	0xddd
+ 29592 4795 03       		.byte	0x3
+ 29593 4796 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 806
+
+
+ 29594 4797 B06F     		.sleb128 -2128
+ 29595 4799 00       		.byte	0x0
+ 29596 479a 00       		.byte	0x0
+ 29597 479b 00       		.byte	0x0
+ 29598 479c 00       		.byte	0x0
+ 29599 479d 35       		.uleb128 0x35
+ 29600 479e 210F0000 		.long	0xf21
+ 29601 47a2 00000000 		.quad	.LBB1224
+ 29601      00000000 
+ 29602 47aa 00000000 		.quad	.LBE1224
+ 29602      00000000 
+ 29603 47b2 02       		.byte	0x2
+ 29604 47b3 2106     		.value	0x621
+ 29605 47b5 32       		.uleb128 0x32
+ 29606 47b6 330F0000 		.long	0xf33
+ 29607 47ba 03       		.byte	0x3
+ 29608 47bb 91       		.byte	0x91
+ 29609 47bc C06F     		.sleb128 -2112
+ 29610 47be 33       		.uleb128 0x33
+ 29611 47bf 00000000 		.quad	.LBB1225
+ 29611      00000000 
+ 29612 47c7 00000000 		.quad	.LBE1225
+ 29612      00000000 
+ 29613 47cf 34       		.uleb128 0x34
+ 29614 47d0 3F0F0000 		.long	0xf3f
+ 29615 47d4 09       		.byte	0x9
+ 29616 47d5 03       		.byte	0x3
+ 29617 47d6 00000000 		.quad	mask.7943
+ 29617      00000000 
+ 29618 47de 35       		.uleb128 0x35
+ 29619 47df A00D0000 		.long	0xda0
+ 29620 47e3 00000000 		.quad	.LBB1226
+ 29620      00000000 
+ 29621 47eb 00000000 		.quad	.LBE1226
+ 29621      00000000 
+ 29622 47f3 02       		.byte	0x2
+ 29623 47f4 FE04     		.value	0x4fe
+ 29624 47f6 32       		.uleb128 0x32
+ 29625 47f7 BE0D0000 		.long	0xdbe
+ 29626 47fb 03       		.byte	0x3
+ 29627 47fc 91       		.byte	0x91
+ 29628 47fd D06F     		.sleb128 -2096
+ 29629 47ff 32       		.uleb128 0x32
+ 29630 4800 B20D0000 		.long	0xdb2
+ 29631 4804 03       		.byte	0x3
+ 29632 4805 91       		.byte	0x91
+ 29633 4806 E06F     		.sleb128 -2080
+ 29634 4808 35       		.uleb128 0x35
+ 29635 4809 CB0D0000 		.long	0xdcb
+ 29636 480d 00000000 		.quad	.LBB1228
+ 29636      00000000 
+ 29637 4815 00000000 		.quad	.LBE1228
+ 29637      00000000 
+ 29638 481d 02       		.byte	0x2
+ 29639 481e 7501     		.value	0x175
+ 29640 4820 32       		.uleb128 0x32
+ 29641 4821 E90D0000 		.long	0xde9
+
GAS LISTING /tmp/ccjbMjHD.s 			page 807
+
+
+ 29642 4825 03       		.byte	0x3
+ 29643 4826 91       		.byte	0x91
+ 29644 4827 F06F     		.sleb128 -2064
+ 29645 4829 32       		.uleb128 0x32
+ 29646 482a DD0D0000 		.long	0xddd
+ 29647 482e 03       		.byte	0x3
+ 29648 482f 91       		.byte	0x91
+ 29649 4830 8070     		.sleb128 -2048
+ 29650 4832 00       		.byte	0x0
+ 29651 4833 00       		.byte	0x0
+ 29652 4834 00       		.byte	0x0
+ 29653 4835 00       		.byte	0x0
+ 29654 4836 00       		.byte	0x0
+ 29655 4837 00       		.byte	0x0
+ 29656 4838 31       		.uleb128 0x31
+ 29657 4839 D50B0000 		.long	0xbd5
+ 29658 483d 00000000 		.quad	.LBB1230
+ 29658      00000000 
+ 29659 4845 00000000 		.quad	.LBE1230
+ 29659      00000000 
+ 29660 484d 02       		.byte	0x2
+ 29661 484e D806     		.value	0x6d8
+ 29662 4850 1B4D0000 		.long	0x4d1b
+ 29663 4854 32       		.uleb128 0x32
+ 29664 4855 F30B0000 		.long	0xbf3
+ 29665 4859 03       		.byte	0x3
+ 29666 485a 91       		.byte	0x91
+ 29667 485b 9C70     		.sleb128 -2020
+ 29668 485d 32       		.uleb128 0x32
+ 29669 485e E70B0000 		.long	0xbe7
+ 29670 4862 03       		.byte	0x3
+ 29671 4863 91       		.byte	0x91
+ 29672 4864 A070     		.sleb128 -2016
+ 29673 4866 33       		.uleb128 0x33
+ 29674 4867 00000000 		.quad	.LBB1231
+ 29674      00000000 
+ 29675 486f 00000000 		.quad	.LBE1231
+ 29675      00000000 
+ 29676 4877 34       		.uleb128 0x34
+ 29677 4878 FF0B0000 		.long	0xbff
+ 29678 487c 04       		.byte	0x4
+ 29679 487d 76       		.byte	0x76
+ 29680 487e A0AC7F   		.sleb128 -10720
+ 29681 4881 34       		.uleb128 0x34
+ 29682 4882 0B0C0000 		.long	0xc0b
+ 29683 4886 04       		.byte	0x4
+ 29684 4887 76       		.byte	0x76
+ 29685 4888 90AC7F   		.sleb128 -10736
+ 29686 488b 31       		.uleb128 0x31
+ 29687 488c 540C0000 		.long	0xc54
+ 29688 4890 00000000 		.quad	.LBB1232
+ 29688      00000000 
+ 29689 4898 00000000 		.quad	.LBE1232
+ 29689      00000000 
+ 29690 48a0 02       		.byte	0x2
+ 29691 48a1 9106     		.value	0x691
+ 29692 48a3 F7480000 		.long	0x48f7
+
GAS LISTING /tmp/ccjbMjHD.s 			page 808
+
+
+ 29693 48a7 32       		.uleb128 0x32
+ 29694 48a8 7E0C0000 		.long	0xc7e
+ 29695 48ac 03       		.byte	0x3
+ 29696 48ad 91       		.byte	0x91
+ 29697 48ae B870     		.sleb128 -1992
+ 29698 48b0 32       		.uleb128 0x32
+ 29699 48b1 720C0000 		.long	0xc72
+ 29700 48b5 03       		.byte	0x3
+ 29701 48b6 91       		.byte	0x91
+ 29702 48b7 BC70     		.sleb128 -1988
+ 29703 48b9 32       		.uleb128 0x32
+ 29704 48ba 660C0000 		.long	0xc66
+ 29705 48be 03       		.byte	0x3
+ 29706 48bf 91       		.byte	0x91
+ 29707 48c0 C070     		.sleb128 -1984
+ 29708 48c2 35       		.uleb128 0x35
+ 29709 48c3 8B0C0000 		.long	0xc8b
+ 29710 48c7 00000000 		.quad	.LBB1234
+ 29710      00000000 
+ 29711 48cf 00000000 		.quad	.LBE1234
+ 29711      00000000 
+ 29712 48d7 02       		.byte	0x2
+ 29713 48d8 0702     		.value	0x207
+ 29714 48da 32       		.uleb128 0x32
+ 29715 48db B40C0000 		.long	0xcb4
+ 29716 48df 03       		.byte	0x3
+ 29717 48e0 91       		.byte	0x91
+ 29718 48e1 D870     		.sleb128 -1960
+ 29719 48e3 32       		.uleb128 0x32
+ 29720 48e4 A90C0000 		.long	0xca9
+ 29721 48e8 03       		.byte	0x3
+ 29722 48e9 91       		.byte	0x91
+ 29723 48ea DC70     		.sleb128 -1956
+ 29724 48ec 32       		.uleb128 0x32
+ 29725 48ed 9D0C0000 		.long	0xc9d
+ 29726 48f1 03       		.byte	0x3
+ 29727 48f2 91       		.byte	0x91
+ 29728 48f3 E070     		.sleb128 -1952
+ 29729 48f5 00       		.byte	0x0
+ 29730 48f6 00       		.byte	0x0
+ 29731 48f7 31       		.uleb128 0x31
+ 29732 48f8 C10C0000 		.long	0xcc1
+ 29733 48fc 00000000 		.quad	.LBB1236
+ 29733      00000000 
+ 29734 4904 00000000 		.quad	.LBE1236
+ 29734      00000000 
+ 29735 490c 02       		.byte	0x2
+ 29736 490d 9206     		.value	0x692
+ 29737 490f 804B0000 		.long	0x4b80
+ 29738 4913 32       		.uleb128 0x32
+ 29739 4914 D30C0000 		.long	0xcd3
+ 29740 4918 03       		.byte	0x3
+ 29741 4919 91       		.byte	0x91
+ 29742 491a F070     		.sleb128 -1936
+ 29743 491c 35       		.uleb128 0x35
+ 29744 491d E00C0000 		.long	0xce0
+ 29745 4921 00000000 		.quad	.LBB1238
+
GAS LISTING /tmp/ccjbMjHD.s 			page 809
+
+
+ 29745      00000000 
+ 29746 4929 00000000 		.quad	.LBE1238
+ 29746      00000000 
+ 29747 4931 02       		.byte	0x2
+ 29748 4932 7D03     		.value	0x37d
+ 29749 4934 32       		.uleb128 0x32
+ 29750 4935 FE0C0000 		.long	0xcfe
+ 29751 4939 03       		.byte	0x3
+ 29752 493a 91       		.byte	0x91
+ 29753 493b 8871     		.sleb128 -1912
+ 29754 493d 32       		.uleb128 0x32
+ 29755 493e F20C0000 		.long	0xcf2
+ 29756 4942 03       		.byte	0x3
+ 29757 4943 91       		.byte	0x91
+ 29758 4944 9071     		.sleb128 -1904
+ 29759 4946 33       		.uleb128 0x33
+ 29760 4947 00000000 		.quad	.LBB1239
+ 29760      00000000 
+ 29761 494f 00000000 		.quad	.LBE1239
+ 29761      00000000 
+ 29762 4957 34       		.uleb128 0x34
+ 29763 4958 0A0D0000 		.long	0xd0a
+ 29764 495c 03       		.byte	0x3
+ 29765 495d 91       		.byte	0x91
+ 29766 495e E071     		.sleb128 -1824
+ 29767 4960 34       		.uleb128 0x34
+ 29768 4961 150D0000 		.long	0xd15
+ 29769 4965 03       		.byte	0x3
+ 29770 4966 91       		.byte	0x91
+ 29771 4967 D071     		.sleb128 -1840
+ 29772 4969 34       		.uleb128 0x34
+ 29773 496a 200D0000 		.long	0xd20
+ 29774 496e 03       		.byte	0x3
+ 29775 496f 91       		.byte	0x91
+ 29776 4970 C071     		.sleb128 -1856
+ 29777 4972 34       		.uleb128 0x34
+ 29778 4973 2C0D0000 		.long	0xd2c
+ 29779 4977 03       		.byte	0x3
+ 29780 4978 91       		.byte	0x91
+ 29781 4979 B071     		.sleb128 -1872
+ 29782 497b 34       		.uleb128 0x34
+ 29783 497c 380D0000 		.long	0xd38
+ 29784 4980 03       		.byte	0x3
+ 29785 4981 91       		.byte	0x91
+ 29786 4982 AC71     		.sleb128 -1876
+ 29787 4984 31       		.uleb128 0x31
+ 29788 4985 4F0D0000 		.long	0xd4f
+ 29789 4989 00000000 		.quad	.LBB1240
+ 29789      00000000 
+ 29790 4991 00000000 		.quad	.LBE1240
+ 29790      00000000 
+ 29791 4999 02       		.byte	0x2
+ 29792 499a 5603     		.value	0x356
+ 29793 499c B3490000 		.long	0x49b3
+ 29794 49a0 32       		.uleb128 0x32
+ 29795 49a1 6A0D0000 		.long	0xd6a
+ 29796 49a5 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 810
+
+
+ 29797 49a6 91       		.byte	0x91
+ 29798 49a7 F071     		.sleb128 -1808
+ 29799 49a9 32       		.uleb128 0x32
+ 29800 49aa 600D0000 		.long	0xd60
+ 29801 49ae 03       		.byte	0x3
+ 29802 49af 91       		.byte	0x91
+ 29803 49b0 8072     		.sleb128 -1792
+ 29804 49b2 00       		.byte	0x0
+ 29805 49b3 31       		.uleb128 0x31
+ 29806 49b4 750D0000 		.long	0xd75
+ 29807 49b8 00000000 		.quad	.LBB1242
+ 29807      00000000 
+ 29808 49c0 00000000 		.quad	.LBE1242
+ 29808      00000000 
+ 29809 49c8 02       		.byte	0x2
+ 29810 49c9 5903     		.value	0x359
+ 29811 49cb E2490000 		.long	0x49e2
+ 29812 49cf 32       		.uleb128 0x32
+ 29813 49d0 930D0000 		.long	0xd93
+ 29814 49d4 03       		.byte	0x3
+ 29815 49d5 91       		.byte	0x91
+ 29816 49d6 9C72     		.sleb128 -1764
+ 29817 49d8 32       		.uleb128 0x32
+ 29818 49d9 870D0000 		.long	0xd87
+ 29819 49dd 03       		.byte	0x3
+ 29820 49de 91       		.byte	0x91
+ 29821 49df A072     		.sleb128 -1760
+ 29822 49e1 00       		.byte	0x0
+ 29823 49e2 31       		.uleb128 0x31
+ 29824 49e3 4F0D0000 		.long	0xd4f
+ 29825 49e7 00000000 		.quad	.LBB1244
+ 29825      00000000 
+ 29826 49ef 00000000 		.quad	.LBE1244
+ 29826      00000000 
+ 29827 49f7 02       		.byte	0x2
+ 29828 49f8 5B03     		.value	0x35b
+ 29829 49fa 114A0000 		.long	0x4a11
+ 29830 49fe 32       		.uleb128 0x32
+ 29831 49ff 6A0D0000 		.long	0xd6a
+ 29832 4a03 03       		.byte	0x3
+ 29833 4a04 91       		.byte	0x91
+ 29834 4a05 B072     		.sleb128 -1744
+ 29835 4a07 32       		.uleb128 0x32
+ 29836 4a08 600D0000 		.long	0xd60
+ 29837 4a0c 03       		.byte	0x3
+ 29838 4a0d 91       		.byte	0x91
+ 29839 4a0e C072     		.sleb128 -1728
+ 29840 4a10 00       		.byte	0x0
+ 29841 4a11 31       		.uleb128 0x31
+ 29842 4a12 A00D0000 		.long	0xda0
+ 29843 4a16 00000000 		.quad	.LBB1246
+ 29843      00000000 
+ 29844 4a1e 00000000 		.quad	.LBE1246
+ 29844      00000000 
+ 29845 4a26 02       		.byte	0x2
+ 29846 4a27 6403     		.value	0x364
+ 29847 4a29 6B4A0000 		.long	0x4a6b
+
GAS LISTING /tmp/ccjbMjHD.s 			page 811
+
+
+ 29848 4a2d 32       		.uleb128 0x32
+ 29849 4a2e BE0D0000 		.long	0xdbe
+ 29850 4a32 03       		.byte	0x3
+ 29851 4a33 91       		.byte	0x91
+ 29852 4a34 D072     		.sleb128 -1712
+ 29853 4a36 32       		.uleb128 0x32
+ 29854 4a37 B20D0000 		.long	0xdb2
+ 29855 4a3b 03       		.byte	0x3
+ 29856 4a3c 91       		.byte	0x91
+ 29857 4a3d E072     		.sleb128 -1696
+ 29858 4a3f 35       		.uleb128 0x35
+ 29859 4a40 CB0D0000 		.long	0xdcb
+ 29860 4a44 00000000 		.quad	.LBB1248
+ 29860      00000000 
+ 29861 4a4c 00000000 		.quad	.LBE1248
+ 29861      00000000 
+ 29862 4a54 02       		.byte	0x2
+ 29863 4a55 7501     		.value	0x175
+ 29864 4a57 32       		.uleb128 0x32
+ 29865 4a58 E90D0000 		.long	0xde9
+ 29866 4a5c 03       		.byte	0x3
+ 29867 4a5d 91       		.byte	0x91
+ 29868 4a5e F072     		.sleb128 -1680
+ 29869 4a60 32       		.uleb128 0x32
+ 29870 4a61 DD0D0000 		.long	0xddd
+ 29871 4a65 03       		.byte	0x3
+ 29872 4a66 91       		.byte	0x91
+ 29873 4a67 8073     		.sleb128 -1664
+ 29874 4a69 00       		.byte	0x0
+ 29875 4a6a 00       		.byte	0x0
+ 29876 4a6b 31       		.uleb128 0x31
+ 29877 4a6c FB0D0000 		.long	0xdfb
+ 29878 4a70 00000000 		.quad	.LBB1250
+ 29878      00000000 
+ 29879 4a78 00000000 		.quad	.LBE1250
+ 29879      00000000 
+ 29880 4a80 02       		.byte	0x2
+ 29881 4a81 6603     		.value	0x366
+ 29882 4a83 9A4A0000 		.long	0x4a9a
+ 29883 4a87 32       		.uleb128 0x32
+ 29884 4a88 160E0000 		.long	0xe16
+ 29885 4a8c 03       		.byte	0x3
+ 29886 4a8d 91       		.byte	0x91
+ 29887 4a8e 9073     		.sleb128 -1648
+ 29888 4a90 32       		.uleb128 0x32
+ 29889 4a91 0C0E0000 		.long	0xe0c
+ 29890 4a95 03       		.byte	0x3
+ 29891 4a96 91       		.byte	0x91
+ 29892 4a97 A073     		.sleb128 -1632
+ 29893 4a99 00       		.byte	0x0
+ 29894 4a9a 31       		.uleb128 0x31
+ 29895 4a9b A00D0000 		.long	0xda0
+ 29896 4a9f 00000000 		.quad	.LBB1252
+ 29896      00000000 
+ 29897 4aa7 00000000 		.quad	.LBE1252
+ 29897      00000000 
+ 29898 4aaf 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 812
+
+
+ 29899 4ab0 6803     		.value	0x368
+ 29900 4ab2 F44A0000 		.long	0x4af4
+ 29901 4ab6 32       		.uleb128 0x32
+ 29902 4ab7 BE0D0000 		.long	0xdbe
+ 29903 4abb 03       		.byte	0x3
+ 29904 4abc 91       		.byte	0x91
+ 29905 4abd B073     		.sleb128 -1616
+ 29906 4abf 32       		.uleb128 0x32
+ 29907 4ac0 B20D0000 		.long	0xdb2
+ 29908 4ac4 03       		.byte	0x3
+ 29909 4ac5 91       		.byte	0x91
+ 29910 4ac6 C073     		.sleb128 -1600
+ 29911 4ac8 35       		.uleb128 0x35
+ 29912 4ac9 CB0D0000 		.long	0xdcb
+ 29913 4acd 00000000 		.quad	.LBB1254
+ 29913      00000000 
+ 29914 4ad5 00000000 		.quad	.LBE1254
+ 29914      00000000 
+ 29915 4add 02       		.byte	0x2
+ 29916 4ade 7501     		.value	0x175
+ 29917 4ae0 32       		.uleb128 0x32
+ 29918 4ae1 E90D0000 		.long	0xde9
+ 29919 4ae5 03       		.byte	0x3
+ 29920 4ae6 91       		.byte	0x91
+ 29921 4ae7 D073     		.sleb128 -1584
+ 29922 4ae9 32       		.uleb128 0x32
+ 29923 4aea DD0D0000 		.long	0xddd
+ 29924 4aee 03       		.byte	0x3
+ 29925 4aef 91       		.byte	0x91
+ 29926 4af0 E073     		.sleb128 -1568
+ 29927 4af2 00       		.byte	0x0
+ 29928 4af3 00       		.byte	0x0
+ 29929 4af4 31       		.uleb128 0x31
+ 29930 4af5 FB0D0000 		.long	0xdfb
+ 29931 4af9 00000000 		.quad	.LBB1256
+ 29931      00000000 
+ 29932 4b01 00000000 		.quad	.LBE1256
+ 29932      00000000 
+ 29933 4b09 02       		.byte	0x2
+ 29934 4b0a 6A03     		.value	0x36a
+ 29935 4b0c 234B0000 		.long	0x4b23
+ 29936 4b10 32       		.uleb128 0x32
+ 29937 4b11 160E0000 		.long	0xe16
+ 29938 4b15 03       		.byte	0x3
+ 29939 4b16 91       		.byte	0x91
+ 29940 4b17 F073     		.sleb128 -1552
+ 29941 4b19 32       		.uleb128 0x32
+ 29942 4b1a 0C0E0000 		.long	0xe0c
+ 29943 4b1e 03       		.byte	0x3
+ 29944 4b1f 91       		.byte	0x91
+ 29945 4b20 8074     		.sleb128 -1536
+ 29946 4b22 00       		.byte	0x0
+ 29947 4b23 31       		.uleb128 0x31
+ 29948 4b24 210E0000 		.long	0xe21
+ 29949 4b28 00000000 		.quad	.LBB1258
+ 29949      00000000 
+ 29950 4b30 00000000 		.quad	.LBE1258
+
GAS LISTING /tmp/ccjbMjHD.s 			page 813
+
+
+ 29950      00000000 
+ 29951 4b38 02       		.byte	0x2
+ 29952 4b39 6C03     		.value	0x36c
+ 29953 4b3b 524B0000 		.long	0x4b52
+ 29954 4b3f 32       		.uleb128 0x32
+ 29955 4b40 3E0E0000 		.long	0xe3e
+ 29956 4b44 03       		.byte	0x3
+ 29957 4b45 91       		.byte	0x91
+ 29958 4b46 9074     		.sleb128 -1520
+ 29959 4b48 32       		.uleb128 0x32
+ 29960 4b49 330E0000 		.long	0xe33
+ 29961 4b4d 03       		.byte	0x3
+ 29962 4b4e 91       		.byte	0x91
+ 29963 4b4f A074     		.sleb128 -1504
+ 29964 4b51 00       		.byte	0x0
+ 29965 4b52 35       		.uleb128 0x35
+ 29966 4b53 4F0D0000 		.long	0xd4f
+ 29967 4b57 00000000 		.quad	.LBB1260
+ 29967      00000000 
+ 29968 4b5f 00000000 		.quad	.LBE1260
+ 29968      00000000 
+ 29969 4b67 02       		.byte	0x2
+ 29970 4b68 6E03     		.value	0x36e
+ 29971 4b6a 32       		.uleb128 0x32
+ 29972 4b6b 6A0D0000 		.long	0xd6a
+ 29973 4b6f 03       		.byte	0x3
+ 29974 4b70 91       		.byte	0x91
+ 29975 4b71 B074     		.sleb128 -1488
+ 29976 4b73 32       		.uleb128 0x32
+ 29977 4b74 600D0000 		.long	0xd60
+ 29978 4b78 03       		.byte	0x3
+ 29979 4b79 91       		.byte	0x91
+ 29980 4b7a C074     		.sleb128 -1472
+ 29981 4b7c 00       		.byte	0x0
+ 29982 4b7d 00       		.byte	0x0
+ 29983 4b7e 00       		.byte	0x0
+ 29984 4b7f 00       		.byte	0x0
+ 29985 4b80 36       		.uleb128 0x36
+ 29986 4b81 00000000 		.quad	.LBB1262
+ 29986      00000000 
+ 29987 4b89 00000000 		.quad	.LBE1262
+ 29987      00000000 
+ 29988 4b91 A04B0000 		.long	0x4ba0
+ 29989 4b95 34       		.uleb128 0x34
+ 29990 4b96 1C0C0000 		.long	0xc1c
+ 29991 4b9a 04       		.byte	0x4
+ 29992 4b9b 91       		.byte	0x91
+ 29993 4b9c A0B17F   		.sleb128 -10080
+ 29994 4b9f 00       		.byte	0x0
+ 29995 4ba0 31       		.uleb128 0x31
+ 29996 4ba1 4A0E0000 		.long	0xe4a
+ 29997 4ba5 00000000 		.quad	.LBB1263
+ 29997      00000000 
+ 29998 4bad 00000000 		.quad	.LBE1263
+ 29998      00000000 
+ 29999 4bb5 02       		.byte	0x2
+ 30000 4bb6 9406     		.value	0x694
+
GAS LISTING /tmp/ccjbMjHD.s 			page 814
+
+
+ 30001 4bb8 3D4C0000 		.long	0x4c3d
+ 30002 4bbc 32       		.uleb128 0x32
+ 30003 4bbd 5C0E0000 		.long	0xe5c
+ 30004 4bc1 03       		.byte	0x3
+ 30005 4bc2 91       		.byte	0x91
+ 30006 4bc3 D074     		.sleb128 -1456
+ 30007 4bc5 33       		.uleb128 0x33
+ 30008 4bc6 00000000 		.quad	.LBB1264
+ 30008      00000000 
+ 30009 4bce 00000000 		.quad	.LBE1264
+ 30009      00000000 
+ 30010 4bd6 34       		.uleb128 0x34
+ 30011 4bd7 680E0000 		.long	0xe68
+ 30012 4bdb 09       		.byte	0x9
+ 30013 4bdc 03       		.byte	0x3
+ 30014 4bdd 00000000 		.quad	ShiftRowTable.7385
+ 30014      00000000 
+ 30015 4be5 35       		.uleb128 0x35
+ 30016 4be6 A00D0000 		.long	0xda0
+ 30017 4bea 00000000 		.quad	.LBB1265
+ 30017      00000000 
+ 30018 4bf2 00000000 		.quad	.LBE1265
+ 30018      00000000 
+ 30019 4bfa 02       		.byte	0x2
+ 30020 4bfb 9B02     		.value	0x29b
+ 30021 4bfd 32       		.uleb128 0x32
+ 30022 4bfe BE0D0000 		.long	0xdbe
+ 30023 4c02 03       		.byte	0x3
+ 30024 4c03 91       		.byte	0x91
+ 30025 4c04 E074     		.sleb128 -1440
+ 30026 4c06 32       		.uleb128 0x32
+ 30027 4c07 B20D0000 		.long	0xdb2
+ 30028 4c0b 03       		.byte	0x3
+ 30029 4c0c 91       		.byte	0x91
+ 30030 4c0d F074     		.sleb128 -1424
+ 30031 4c0f 35       		.uleb128 0x35
+ 30032 4c10 CB0D0000 		.long	0xdcb
+ 30033 4c14 00000000 		.quad	.LBB1267
+ 30033      00000000 
+ 30034 4c1c 00000000 		.quad	.LBE1267
+ 30034      00000000 
+ 30035 4c24 02       		.byte	0x2
+ 30036 4c25 7501     		.value	0x175
+ 30037 4c27 32       		.uleb128 0x32
+ 30038 4c28 E90D0000 		.long	0xde9
+ 30039 4c2c 03       		.byte	0x3
+ 30040 4c2d 91       		.byte	0x91
+ 30041 4c2e 8075     		.sleb128 -1408
+ 30042 4c30 32       		.uleb128 0x32
+ 30043 4c31 DD0D0000 		.long	0xddd
+ 30044 4c35 03       		.byte	0x3
+ 30045 4c36 91       		.byte	0x91
+ 30046 4c37 9075     		.sleb128 -1392
+ 30047 4c39 00       		.byte	0x0
+ 30048 4c3a 00       		.byte	0x0
+ 30049 4c3b 00       		.byte	0x0
+ 30050 4c3c 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 815
+
+
+ 30051 4c3d 36       		.uleb128 0x36
+ 30052 4c3e 00000000 		.quad	.LBB1269
+ 30052      00000000 
+ 30053 4c46 00000000 		.quad	.LBE1269
+ 30053      00000000 
+ 30054 4c4e 5D4C0000 		.long	0x4c5d
+ 30055 4c52 34       		.uleb128 0x34
+ 30056 4c53 2C0C0000 		.long	0xc2c
+ 30057 4c57 04       		.byte	0x4
+ 30058 4c58 91       		.byte	0x91
+ 30059 4c59 90B17F   		.sleb128 -10096
+ 30060 4c5c 00       		.byte	0x0
+ 30061 4c5d 31       		.uleb128 0x31
+ 30062 4c5e 860E0000 		.long	0xe86
+ 30063 4c62 00000000 		.quad	.LBB1270
+ 30063      00000000 
+ 30064 4c6a 00000000 		.quad	.LBE1270
+ 30064      00000000 
+ 30065 4c72 02       		.byte	0x2
+ 30066 4c73 9606     		.value	0x696
+ 30067 4c75 8C4C0000 		.long	0x4c8c
+ 30068 4c79 32       		.uleb128 0x32
+ 30069 4c7a A10E0000 		.long	0xea1
+ 30070 4c7e 03       		.byte	0x3
+ 30071 4c7f 91       		.byte	0x91
+ 30072 4c80 A075     		.sleb128 -1376
+ 30073 4c82 32       		.uleb128 0x32
+ 30074 4c83 970E0000 		.long	0xe97
+ 30075 4c87 03       		.byte	0x3
+ 30076 4c88 91       		.byte	0x91
+ 30077 4c89 B075     		.sleb128 -1360
+ 30078 4c8b 00       		.byte	0x0
+ 30079 4c8c 36       		.uleb128 0x36
+ 30080 4c8d 00000000 		.quad	.LBB1272
+ 30080      00000000 
+ 30081 4c95 00000000 		.quad	.LBE1272
+ 30081      00000000 
+ 30082 4c9d AC4C0000 		.long	0x4cac
+ 30083 4ca1 34       		.uleb128 0x34
+ 30084 4ca2 3C0C0000 		.long	0xc3c
+ 30085 4ca6 04       		.byte	0x4
+ 30086 4ca7 91       		.byte	0x91
+ 30087 4ca8 80B17F   		.sleb128 -10112
+ 30088 4cab 00       		.byte	0x0
+ 30089 4cac 31       		.uleb128 0x31
+ 30090 4cad AC0E0000 		.long	0xeac
+ 30091 4cb1 00000000 		.quad	.LBB1273
+ 30091      00000000 
+ 30092 4cb9 00000000 		.quad	.LBE1273
+ 30092      00000000 
+ 30093 4cc1 02       		.byte	0x2
+ 30094 4cc2 9806     		.value	0x698
+ 30095 4cc4 FD4C0000 		.long	0x4cfd
+ 30096 4cc8 32       		.uleb128 0x32
+ 30097 4cc9 BE0E0000 		.long	0xebe
+ 30098 4ccd 03       		.byte	0x3
+ 30099 4cce 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 816
+
+
+ 30100 4ccf C075     		.sleb128 -1344
+ 30101 4cd1 35       		.uleb128 0x35
+ 30102 4cd2 CB0E0000 		.long	0xecb
+ 30103 4cd6 00000000 		.quad	.LBB1275
+ 30103      00000000 
+ 30104 4cde 00000000 		.quad	.LBE1275
+ 30104      00000000 
+ 30105 4ce6 02       		.byte	0x2
+ 30106 4ce7 4905     		.value	0x549
+ 30107 4ce9 32       		.uleb128 0x32
+ 30108 4cea E90E0000 		.long	0xee9
+ 30109 4cee 03       		.byte	0x3
+ 30110 4cef 91       		.byte	0x91
+ 30111 4cf0 DC75     		.sleb128 -1316
+ 30112 4cf2 32       		.uleb128 0x32
+ 30113 4cf3 DD0E0000 		.long	0xedd
+ 30114 4cf7 03       		.byte	0x3
+ 30115 4cf8 91       		.byte	0x91
+ 30116 4cf9 E075     		.sleb128 -1312
+ 30117 4cfb 00       		.byte	0x0
+ 30118 4cfc 00       		.byte	0x0
+ 30119 4cfd 33       		.uleb128 0x33
+ 30120 4cfe 00000000 		.quad	.LBB1277
+ 30120      00000000 
+ 30121 4d06 00000000 		.quad	.LBE1277
+ 30121      00000000 
+ 30122 4d0e 34       		.uleb128 0x34
+ 30123 4d0f 480C0000 		.long	0xc48
+ 30124 4d13 04       		.byte	0x4
+ 30125 4d14 91       		.byte	0x91
+ 30126 4d15 F0B07F   		.sleb128 -10128
+ 30127 4d18 00       		.byte	0x0
+ 30128 4d19 00       		.byte	0x0
+ 30129 4d1a 00       		.byte	0x0
+ 30130 4d1b 31       		.uleb128 0x31
+ 30131 4d1c F60E0000 		.long	0xef6
+ 30132 4d20 00000000 		.quad	.LBB1278
+ 30132      00000000 
+ 30133 4d28 00000000 		.quad	.LBE1278
+ 30133      00000000 
+ 30134 4d30 02       		.byte	0x2
+ 30135 4d31 D806     		.value	0x6d8
+ 30136 4d33 304F0000 		.long	0x4f30
+ 30137 4d37 32       		.uleb128 0x32
+ 30138 4d38 080F0000 		.long	0xf08
+ 30139 4d3c 03       		.byte	0x3
+ 30140 4d3d 91       		.byte	0x91
+ 30141 4d3e F075     		.sleb128 -1296
+ 30142 4d40 33       		.uleb128 0x33
+ 30143 4d41 00000000 		.quad	.LBB1279
+ 30143      00000000 
+ 30144 4d49 00000000 		.quad	.LBE1279
+ 30144      00000000 
+ 30145 4d51 34       		.uleb128 0x34
+ 30146 4d52 140F0000 		.long	0xf14
+ 30147 4d56 04       		.byte	0x4
+ 30148 4d57 76       		.byte	0x76
+
GAS LISTING /tmp/ccjbMjHD.s 			page 817
+
+
+ 30149 4d58 B0AC7F   		.sleb128 -10704
+ 30150 4d5b 31       		.uleb128 0x31
+ 30151 4d5c 210F0000 		.long	0xf21
+ 30152 4d60 00000000 		.quad	.LBB1280
+ 30152      00000000 
+ 30153 4d68 00000000 		.quad	.LBE1280
+ 30153      00000000 
+ 30154 4d70 02       		.byte	0x2
+ 30155 4d71 1F06     		.value	0x61f
+ 30156 4d73 F84D0000 		.long	0x4df8
+ 30157 4d77 32       		.uleb128 0x32
+ 30158 4d78 330F0000 		.long	0xf33
+ 30159 4d7c 03       		.byte	0x3
+ 30160 4d7d 91       		.byte	0x91
+ 30161 4d7e 8076     		.sleb128 -1280
+ 30162 4d80 33       		.uleb128 0x33
+ 30163 4d81 00000000 		.quad	.LBB1281
+ 30163      00000000 
+ 30164 4d89 00000000 		.quad	.LBE1281
+ 30164      00000000 
+ 30165 4d91 34       		.uleb128 0x34
+ 30166 4d92 3F0F0000 		.long	0xf3f
+ 30167 4d96 09       		.byte	0x9
+ 30168 4d97 03       		.byte	0x3
+ 30169 4d98 00000000 		.quad	mask.7943
+ 30169      00000000 
+ 30170 4da0 35       		.uleb128 0x35
+ 30171 4da1 A00D0000 		.long	0xda0
+ 30172 4da5 00000000 		.quad	.LBB1282
+ 30172      00000000 
+ 30173 4dad 00000000 		.quad	.LBE1282
+ 30173      00000000 
+ 30174 4db5 02       		.byte	0x2
+ 30175 4db6 FE04     		.value	0x4fe
+ 30176 4db8 32       		.uleb128 0x32
+ 30177 4db9 BE0D0000 		.long	0xdbe
+ 30178 4dbd 03       		.byte	0x3
+ 30179 4dbe 91       		.byte	0x91
+ 30180 4dbf 9076     		.sleb128 -1264
+ 30181 4dc1 32       		.uleb128 0x32
+ 30182 4dc2 B20D0000 		.long	0xdb2
+ 30183 4dc6 03       		.byte	0x3
+ 30184 4dc7 91       		.byte	0x91
+ 30185 4dc8 A076     		.sleb128 -1248
+ 30186 4dca 35       		.uleb128 0x35
+ 30187 4dcb CB0D0000 		.long	0xdcb
+ 30188 4dcf 00000000 		.quad	.LBB1284
+ 30188      00000000 
+ 30189 4dd7 00000000 		.quad	.LBE1284
+ 30189      00000000 
+ 30190 4ddf 02       		.byte	0x2
+ 30191 4de0 7501     		.value	0x175
+ 30192 4de2 32       		.uleb128 0x32
+ 30193 4de3 E90D0000 		.long	0xde9
+ 30194 4de7 03       		.byte	0x3
+ 30195 4de8 91       		.byte	0x91
+ 30196 4de9 B076     		.sleb128 -1232
+
GAS LISTING /tmp/ccjbMjHD.s 			page 818
+
+
+ 30197 4deb 32       		.uleb128 0x32
+ 30198 4dec DD0D0000 		.long	0xddd
+ 30199 4df0 03       		.byte	0x3
+ 30200 4df1 91       		.byte	0x91
+ 30201 4df2 C076     		.sleb128 -1216
+ 30202 4df4 00       		.byte	0x0
+ 30203 4df5 00       		.byte	0x0
+ 30204 4df6 00       		.byte	0x0
+ 30205 4df7 00       		.byte	0x0
+ 30206 4df8 31       		.uleb128 0x31
+ 30207 4df9 210F0000 		.long	0xf21
+ 30208 4dfd 00000000 		.quad	.LBB1286
+ 30208      00000000 
+ 30209 4e05 00000000 		.quad	.LBE1286
+ 30209      00000000 
+ 30210 4e0d 02       		.byte	0x2
+ 30211 4e0e 2006     		.value	0x620
+ 30212 4e10 954E0000 		.long	0x4e95
+ 30213 4e14 32       		.uleb128 0x32
+ 30214 4e15 330F0000 		.long	0xf33
+ 30215 4e19 03       		.byte	0x3
+ 30216 4e1a 91       		.byte	0x91
+ 30217 4e1b D076     		.sleb128 -1200
+ 30218 4e1d 33       		.uleb128 0x33
+ 30219 4e1e 00000000 		.quad	.LBB1287
+ 30219      00000000 
+ 30220 4e26 00000000 		.quad	.LBE1287
+ 30220      00000000 
+ 30221 4e2e 34       		.uleb128 0x34
+ 30222 4e2f 3F0F0000 		.long	0xf3f
+ 30223 4e33 09       		.byte	0x9
+ 30224 4e34 03       		.byte	0x3
+ 30225 4e35 00000000 		.quad	mask.7943
+ 30225      00000000 
+ 30226 4e3d 35       		.uleb128 0x35
+ 30227 4e3e A00D0000 		.long	0xda0
+ 30228 4e42 00000000 		.quad	.LBB1288
+ 30228      00000000 
+ 30229 4e4a 00000000 		.quad	.LBE1288
+ 30229      00000000 
+ 30230 4e52 02       		.byte	0x2
+ 30231 4e53 FE04     		.value	0x4fe
+ 30232 4e55 32       		.uleb128 0x32
+ 30233 4e56 BE0D0000 		.long	0xdbe
+ 30234 4e5a 03       		.byte	0x3
+ 30235 4e5b 91       		.byte	0x91
+ 30236 4e5c E076     		.sleb128 -1184
+ 30237 4e5e 32       		.uleb128 0x32
+ 30238 4e5f B20D0000 		.long	0xdb2
+ 30239 4e63 03       		.byte	0x3
+ 30240 4e64 91       		.byte	0x91
+ 30241 4e65 F076     		.sleb128 -1168
+ 30242 4e67 35       		.uleb128 0x35
+ 30243 4e68 CB0D0000 		.long	0xdcb
+ 30244 4e6c 00000000 		.quad	.LBB1290
+ 30244      00000000 
+ 30245 4e74 00000000 		.quad	.LBE1290
+
GAS LISTING /tmp/ccjbMjHD.s 			page 819
+
+
+ 30245      00000000 
+ 30246 4e7c 02       		.byte	0x2
+ 30247 4e7d 7501     		.value	0x175
+ 30248 4e7f 32       		.uleb128 0x32
+ 30249 4e80 E90D0000 		.long	0xde9
+ 30250 4e84 03       		.byte	0x3
+ 30251 4e85 91       		.byte	0x91
+ 30252 4e86 8077     		.sleb128 -1152
+ 30253 4e88 32       		.uleb128 0x32
+ 30254 4e89 DD0D0000 		.long	0xddd
+ 30255 4e8d 03       		.byte	0x3
+ 30256 4e8e 91       		.byte	0x91
+ 30257 4e8f 9077     		.sleb128 -1136
+ 30258 4e91 00       		.byte	0x0
+ 30259 4e92 00       		.byte	0x0
+ 30260 4e93 00       		.byte	0x0
+ 30261 4e94 00       		.byte	0x0
+ 30262 4e95 35       		.uleb128 0x35
+ 30263 4e96 210F0000 		.long	0xf21
+ 30264 4e9a 00000000 		.quad	.LBB1292
+ 30264      00000000 
+ 30265 4ea2 00000000 		.quad	.LBE1292
+ 30265      00000000 
+ 30266 4eaa 02       		.byte	0x2
+ 30267 4eab 2106     		.value	0x621
+ 30268 4ead 32       		.uleb128 0x32
+ 30269 4eae 330F0000 		.long	0xf33
+ 30270 4eb2 03       		.byte	0x3
+ 30271 4eb3 91       		.byte	0x91
+ 30272 4eb4 A077     		.sleb128 -1120
+ 30273 4eb6 33       		.uleb128 0x33
+ 30274 4eb7 00000000 		.quad	.LBB1293
+ 30274      00000000 
+ 30275 4ebf 00000000 		.quad	.LBE1293
+ 30275      00000000 
+ 30276 4ec7 34       		.uleb128 0x34
+ 30277 4ec8 3F0F0000 		.long	0xf3f
+ 30278 4ecc 09       		.byte	0x9
+ 30279 4ecd 03       		.byte	0x3
+ 30280 4ece 00000000 		.quad	mask.7943
+ 30280      00000000 
+ 30281 4ed6 35       		.uleb128 0x35
+ 30282 4ed7 A00D0000 		.long	0xda0
+ 30283 4edb 00000000 		.quad	.LBB1294
+ 30283      00000000 
+ 30284 4ee3 00000000 		.quad	.LBE1294
+ 30284      00000000 
+ 30285 4eeb 02       		.byte	0x2
+ 30286 4eec FE04     		.value	0x4fe
+ 30287 4eee 32       		.uleb128 0x32
+ 30288 4eef BE0D0000 		.long	0xdbe
+ 30289 4ef3 03       		.byte	0x3
+ 30290 4ef4 91       		.byte	0x91
+ 30291 4ef5 B077     		.sleb128 -1104
+ 30292 4ef7 32       		.uleb128 0x32
+ 30293 4ef8 B20D0000 		.long	0xdb2
+ 30294 4efc 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 820
+
+
+ 30295 4efd 91       		.byte	0x91
+ 30296 4efe C077     		.sleb128 -1088
+ 30297 4f00 35       		.uleb128 0x35
+ 30298 4f01 CB0D0000 		.long	0xdcb
+ 30299 4f05 00000000 		.quad	.LBB1296
+ 30299      00000000 
+ 30300 4f0d 00000000 		.quad	.LBE1296
+ 30300      00000000 
+ 30301 4f15 02       		.byte	0x2
+ 30302 4f16 7501     		.value	0x175
+ 30303 4f18 32       		.uleb128 0x32
+ 30304 4f19 E90D0000 		.long	0xde9
+ 30305 4f1d 03       		.byte	0x3
+ 30306 4f1e 91       		.byte	0x91
+ 30307 4f1f D077     		.sleb128 -1072
+ 30308 4f21 32       		.uleb128 0x32
+ 30309 4f22 DD0D0000 		.long	0xddd
+ 30310 4f26 03       		.byte	0x3
+ 30311 4f27 91       		.byte	0x91
+ 30312 4f28 E077     		.sleb128 -1056
+ 30313 4f2a 00       		.byte	0x0
+ 30314 4f2b 00       		.byte	0x0
+ 30315 4f2c 00       		.byte	0x0
+ 30316 4f2d 00       		.byte	0x0
+ 30317 4f2e 00       		.byte	0x0
+ 30318 4f2f 00       		.byte	0x0
+ 30319 4f30 31       		.uleb128 0x31
+ 30320 4f31 D50B0000 		.long	0xbd5
+ 30321 4f35 00000000 		.quad	.LBB1298
+ 30321      00000000 
+ 30322 4f3d 00000000 		.quad	.LBE1298
+ 30322      00000000 
+ 30323 4f45 02       		.byte	0x2
+ 30324 4f46 D906     		.value	0x6d9
+ 30325 4f48 13540000 		.long	0x5413
+ 30326 4f4c 32       		.uleb128 0x32
+ 30327 4f4d F30B0000 		.long	0xbf3
+ 30328 4f51 03       		.byte	0x3
+ 30329 4f52 91       		.byte	0x91
+ 30330 4f53 FC77     		.sleb128 -1028
+ 30331 4f55 32       		.uleb128 0x32
+ 30332 4f56 E70B0000 		.long	0xbe7
+ 30333 4f5a 03       		.byte	0x3
+ 30334 4f5b 91       		.byte	0x91
+ 30335 4f5c 8078     		.sleb128 -1024
+ 30336 4f5e 33       		.uleb128 0x33
+ 30337 4f5f 00000000 		.quad	.LBB1299
+ 30337      00000000 
+ 30338 4f67 00000000 		.quad	.LBE1299
+ 30338      00000000 
+ 30339 4f6f 34       		.uleb128 0x34
+ 30340 4f70 FF0B0000 		.long	0xbff
+ 30341 4f74 04       		.byte	0x4
+ 30342 4f75 76       		.byte	0x76
+ 30343 4f76 D0AC7F   		.sleb128 -10672
+ 30344 4f79 34       		.uleb128 0x34
+ 30345 4f7a 0B0C0000 		.long	0xc0b
+
GAS LISTING /tmp/ccjbMjHD.s 			page 821
+
+
+ 30346 4f7e 04       		.byte	0x4
+ 30347 4f7f 76       		.byte	0x76
+ 30348 4f80 C0AC7F   		.sleb128 -10688
+ 30349 4f83 31       		.uleb128 0x31
+ 30350 4f84 540C0000 		.long	0xc54
+ 30351 4f88 00000000 		.quad	.LBB1300
+ 30351      00000000 
+ 30352 4f90 00000000 		.quad	.LBE1300
+ 30352      00000000 
+ 30353 4f98 02       		.byte	0x2
+ 30354 4f99 9106     		.value	0x691
+ 30355 4f9b EF4F0000 		.long	0x4fef
+ 30356 4f9f 32       		.uleb128 0x32
+ 30357 4fa0 7E0C0000 		.long	0xc7e
+ 30358 4fa4 03       		.byte	0x3
+ 30359 4fa5 91       		.byte	0x91
+ 30360 4fa6 9878     		.sleb128 -1000
+ 30361 4fa8 32       		.uleb128 0x32
+ 30362 4fa9 720C0000 		.long	0xc72
+ 30363 4fad 03       		.byte	0x3
+ 30364 4fae 91       		.byte	0x91
+ 30365 4faf 9C78     		.sleb128 -996
+ 30366 4fb1 32       		.uleb128 0x32
+ 30367 4fb2 660C0000 		.long	0xc66
+ 30368 4fb6 03       		.byte	0x3
+ 30369 4fb7 91       		.byte	0x91
+ 30370 4fb8 A078     		.sleb128 -992
+ 30371 4fba 35       		.uleb128 0x35
+ 30372 4fbb 8B0C0000 		.long	0xc8b
+ 30373 4fbf 00000000 		.quad	.LBB1302
+ 30373      00000000 
+ 30374 4fc7 00000000 		.quad	.LBE1302
+ 30374      00000000 
+ 30375 4fcf 02       		.byte	0x2
+ 30376 4fd0 0702     		.value	0x207
+ 30377 4fd2 32       		.uleb128 0x32
+ 30378 4fd3 B40C0000 		.long	0xcb4
+ 30379 4fd7 03       		.byte	0x3
+ 30380 4fd8 91       		.byte	0x91
+ 30381 4fd9 B878     		.sleb128 -968
+ 30382 4fdb 32       		.uleb128 0x32
+ 30383 4fdc A90C0000 		.long	0xca9
+ 30384 4fe0 03       		.byte	0x3
+ 30385 4fe1 91       		.byte	0x91
+ 30386 4fe2 BC78     		.sleb128 -964
+ 30387 4fe4 32       		.uleb128 0x32
+ 30388 4fe5 9D0C0000 		.long	0xc9d
+ 30389 4fe9 03       		.byte	0x3
+ 30390 4fea 91       		.byte	0x91
+ 30391 4feb C078     		.sleb128 -960
+ 30392 4fed 00       		.byte	0x0
+ 30393 4fee 00       		.byte	0x0
+ 30394 4fef 31       		.uleb128 0x31
+ 30395 4ff0 C10C0000 		.long	0xcc1
+ 30396 4ff4 00000000 		.quad	.LBB1304
+ 30396      00000000 
+ 30397 4ffc 00000000 		.quad	.LBE1304
+
GAS LISTING /tmp/ccjbMjHD.s 			page 822
+
+
+ 30397      00000000 
+ 30398 5004 02       		.byte	0x2
+ 30399 5005 9206     		.value	0x692
+ 30400 5007 78520000 		.long	0x5278
+ 30401 500b 32       		.uleb128 0x32
+ 30402 500c D30C0000 		.long	0xcd3
+ 30403 5010 03       		.byte	0x3
+ 30404 5011 91       		.byte	0x91
+ 30405 5012 D078     		.sleb128 -944
+ 30406 5014 35       		.uleb128 0x35
+ 30407 5015 E00C0000 		.long	0xce0
+ 30408 5019 00000000 		.quad	.LBB1306
+ 30408      00000000 
+ 30409 5021 00000000 		.quad	.LBE1306
+ 30409      00000000 
+ 30410 5029 02       		.byte	0x2
+ 30411 502a 7D03     		.value	0x37d
+ 30412 502c 32       		.uleb128 0x32
+ 30413 502d FE0C0000 		.long	0xcfe
+ 30414 5031 03       		.byte	0x3
+ 30415 5032 91       		.byte	0x91
+ 30416 5033 E878     		.sleb128 -920
+ 30417 5035 32       		.uleb128 0x32
+ 30418 5036 F20C0000 		.long	0xcf2
+ 30419 503a 03       		.byte	0x3
+ 30420 503b 91       		.byte	0x91
+ 30421 503c F078     		.sleb128 -912
+ 30422 503e 33       		.uleb128 0x33
+ 30423 503f 00000000 		.quad	.LBB1307
+ 30423      00000000 
+ 30424 5047 00000000 		.quad	.LBE1307
+ 30424      00000000 
+ 30425 504f 34       		.uleb128 0x34
+ 30426 5050 0A0D0000 		.long	0xd0a
+ 30427 5054 03       		.byte	0x3
+ 30428 5055 91       		.byte	0x91
+ 30429 5056 C079     		.sleb128 -832
+ 30430 5058 34       		.uleb128 0x34
+ 30431 5059 150D0000 		.long	0xd15
+ 30432 505d 03       		.byte	0x3
+ 30433 505e 91       		.byte	0x91
+ 30434 505f B079     		.sleb128 -848
+ 30435 5061 34       		.uleb128 0x34
+ 30436 5062 200D0000 		.long	0xd20
+ 30437 5066 03       		.byte	0x3
+ 30438 5067 91       		.byte	0x91
+ 30439 5068 A079     		.sleb128 -864
+ 30440 506a 34       		.uleb128 0x34
+ 30441 506b 2C0D0000 		.long	0xd2c
+ 30442 506f 03       		.byte	0x3
+ 30443 5070 91       		.byte	0x91
+ 30444 5071 9079     		.sleb128 -880
+ 30445 5073 34       		.uleb128 0x34
+ 30446 5074 380D0000 		.long	0xd38
+ 30447 5078 03       		.byte	0x3
+ 30448 5079 91       		.byte	0x91
+ 30449 507a 8C79     		.sleb128 -884
+
GAS LISTING /tmp/ccjbMjHD.s 			page 823
+
+
+ 30450 507c 31       		.uleb128 0x31
+ 30451 507d 4F0D0000 		.long	0xd4f
+ 30452 5081 00000000 		.quad	.LBB1308
+ 30452      00000000 
+ 30453 5089 00000000 		.quad	.LBE1308
+ 30453      00000000 
+ 30454 5091 02       		.byte	0x2
+ 30455 5092 5603     		.value	0x356
+ 30456 5094 AB500000 		.long	0x50ab
+ 30457 5098 32       		.uleb128 0x32
+ 30458 5099 6A0D0000 		.long	0xd6a
+ 30459 509d 03       		.byte	0x3
+ 30460 509e 91       		.byte	0x91
+ 30461 509f D079     		.sleb128 -816
+ 30462 50a1 32       		.uleb128 0x32
+ 30463 50a2 600D0000 		.long	0xd60
+ 30464 50a6 03       		.byte	0x3
+ 30465 50a7 91       		.byte	0x91
+ 30466 50a8 E079     		.sleb128 -800
+ 30467 50aa 00       		.byte	0x0
+ 30468 50ab 31       		.uleb128 0x31
+ 30469 50ac 750D0000 		.long	0xd75
+ 30470 50b0 00000000 		.quad	.LBB1310
+ 30470      00000000 
+ 30471 50b8 00000000 		.quad	.LBE1310
+ 30471      00000000 
+ 30472 50c0 02       		.byte	0x2
+ 30473 50c1 5903     		.value	0x359
+ 30474 50c3 DA500000 		.long	0x50da
+ 30475 50c7 32       		.uleb128 0x32
+ 30476 50c8 930D0000 		.long	0xd93
+ 30477 50cc 03       		.byte	0x3
+ 30478 50cd 91       		.byte	0x91
+ 30479 50ce FC79     		.sleb128 -772
+ 30480 50d0 32       		.uleb128 0x32
+ 30481 50d1 870D0000 		.long	0xd87
+ 30482 50d5 03       		.byte	0x3
+ 30483 50d6 91       		.byte	0x91
+ 30484 50d7 807A     		.sleb128 -768
+ 30485 50d9 00       		.byte	0x0
+ 30486 50da 31       		.uleb128 0x31
+ 30487 50db 4F0D0000 		.long	0xd4f
+ 30488 50df 00000000 		.quad	.LBB1312
+ 30488      00000000 
+ 30489 50e7 00000000 		.quad	.LBE1312
+ 30489      00000000 
+ 30490 50ef 02       		.byte	0x2
+ 30491 50f0 5B03     		.value	0x35b
+ 30492 50f2 09510000 		.long	0x5109
+ 30493 50f6 32       		.uleb128 0x32
+ 30494 50f7 6A0D0000 		.long	0xd6a
+ 30495 50fb 03       		.byte	0x3
+ 30496 50fc 91       		.byte	0x91
+ 30497 50fd 907A     		.sleb128 -752
+ 30498 50ff 32       		.uleb128 0x32
+ 30499 5100 600D0000 		.long	0xd60
+ 30500 5104 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 824
+
+
+ 30501 5105 91       		.byte	0x91
+ 30502 5106 A07A     		.sleb128 -736
+ 30503 5108 00       		.byte	0x0
+ 30504 5109 31       		.uleb128 0x31
+ 30505 510a A00D0000 		.long	0xda0
+ 30506 510e 00000000 		.quad	.LBB1314
+ 30506      00000000 
+ 30507 5116 00000000 		.quad	.LBE1314
+ 30507      00000000 
+ 30508 511e 02       		.byte	0x2
+ 30509 511f 6403     		.value	0x364
+ 30510 5121 63510000 		.long	0x5163
+ 30511 5125 32       		.uleb128 0x32
+ 30512 5126 BE0D0000 		.long	0xdbe
+ 30513 512a 03       		.byte	0x3
+ 30514 512b 91       		.byte	0x91
+ 30515 512c B07A     		.sleb128 -720
+ 30516 512e 32       		.uleb128 0x32
+ 30517 512f B20D0000 		.long	0xdb2
+ 30518 5133 03       		.byte	0x3
+ 30519 5134 91       		.byte	0x91
+ 30520 5135 C07A     		.sleb128 -704
+ 30521 5137 35       		.uleb128 0x35
+ 30522 5138 CB0D0000 		.long	0xdcb
+ 30523 513c 00000000 		.quad	.LBB1316
+ 30523      00000000 
+ 30524 5144 00000000 		.quad	.LBE1316
+ 30524      00000000 
+ 30525 514c 02       		.byte	0x2
+ 30526 514d 7501     		.value	0x175
+ 30527 514f 32       		.uleb128 0x32
+ 30528 5150 E90D0000 		.long	0xde9
+ 30529 5154 03       		.byte	0x3
+ 30530 5155 91       		.byte	0x91
+ 30531 5156 D07A     		.sleb128 -688
+ 30532 5158 32       		.uleb128 0x32
+ 30533 5159 DD0D0000 		.long	0xddd
+ 30534 515d 03       		.byte	0x3
+ 30535 515e 91       		.byte	0x91
+ 30536 515f E07A     		.sleb128 -672
+ 30537 5161 00       		.byte	0x0
+ 30538 5162 00       		.byte	0x0
+ 30539 5163 31       		.uleb128 0x31
+ 30540 5164 FB0D0000 		.long	0xdfb
+ 30541 5168 00000000 		.quad	.LBB1318
+ 30541      00000000 
+ 30542 5170 00000000 		.quad	.LBE1318
+ 30542      00000000 
+ 30543 5178 02       		.byte	0x2
+ 30544 5179 6603     		.value	0x366
+ 30545 517b 92510000 		.long	0x5192
+ 30546 517f 32       		.uleb128 0x32
+ 30547 5180 160E0000 		.long	0xe16
+ 30548 5184 03       		.byte	0x3
+ 30549 5185 91       		.byte	0x91
+ 30550 5186 F07A     		.sleb128 -656
+ 30551 5188 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 825
+
+
+ 30552 5189 0C0E0000 		.long	0xe0c
+ 30553 518d 03       		.byte	0x3
+ 30554 518e 91       		.byte	0x91
+ 30555 518f 807B     		.sleb128 -640
+ 30556 5191 00       		.byte	0x0
+ 30557 5192 31       		.uleb128 0x31
+ 30558 5193 A00D0000 		.long	0xda0
+ 30559 5197 00000000 		.quad	.LBB1320
+ 30559      00000000 
+ 30560 519f 00000000 		.quad	.LBE1320
+ 30560      00000000 
+ 30561 51a7 02       		.byte	0x2
+ 30562 51a8 6803     		.value	0x368
+ 30563 51aa EC510000 		.long	0x51ec
+ 30564 51ae 32       		.uleb128 0x32
+ 30565 51af BE0D0000 		.long	0xdbe
+ 30566 51b3 03       		.byte	0x3
+ 30567 51b4 91       		.byte	0x91
+ 30568 51b5 907B     		.sleb128 -624
+ 30569 51b7 32       		.uleb128 0x32
+ 30570 51b8 B20D0000 		.long	0xdb2
+ 30571 51bc 03       		.byte	0x3
+ 30572 51bd 91       		.byte	0x91
+ 30573 51be A07B     		.sleb128 -608
+ 30574 51c0 35       		.uleb128 0x35
+ 30575 51c1 CB0D0000 		.long	0xdcb
+ 30576 51c5 00000000 		.quad	.LBB1322
+ 30576      00000000 
+ 30577 51cd 00000000 		.quad	.LBE1322
+ 30577      00000000 
+ 30578 51d5 02       		.byte	0x2
+ 30579 51d6 7501     		.value	0x175
+ 30580 51d8 32       		.uleb128 0x32
+ 30581 51d9 E90D0000 		.long	0xde9
+ 30582 51dd 03       		.byte	0x3
+ 30583 51de 91       		.byte	0x91
+ 30584 51df B07B     		.sleb128 -592
+ 30585 51e1 32       		.uleb128 0x32
+ 30586 51e2 DD0D0000 		.long	0xddd
+ 30587 51e6 03       		.byte	0x3
+ 30588 51e7 91       		.byte	0x91
+ 30589 51e8 C07B     		.sleb128 -576
+ 30590 51ea 00       		.byte	0x0
+ 30591 51eb 00       		.byte	0x0
+ 30592 51ec 31       		.uleb128 0x31
+ 30593 51ed FB0D0000 		.long	0xdfb
+ 30594 51f1 00000000 		.quad	.LBB1324
+ 30594      00000000 
+ 30595 51f9 00000000 		.quad	.LBE1324
+ 30595      00000000 
+ 30596 5201 02       		.byte	0x2
+ 30597 5202 6A03     		.value	0x36a
+ 30598 5204 1B520000 		.long	0x521b
+ 30599 5208 32       		.uleb128 0x32
+ 30600 5209 160E0000 		.long	0xe16
+ 30601 520d 03       		.byte	0x3
+ 30602 520e 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 826
+
+
+ 30603 520f D07B     		.sleb128 -560
+ 30604 5211 32       		.uleb128 0x32
+ 30605 5212 0C0E0000 		.long	0xe0c
+ 30606 5216 03       		.byte	0x3
+ 30607 5217 91       		.byte	0x91
+ 30608 5218 E07B     		.sleb128 -544
+ 30609 521a 00       		.byte	0x0
+ 30610 521b 31       		.uleb128 0x31
+ 30611 521c 210E0000 		.long	0xe21
+ 30612 5220 00000000 		.quad	.LBB1326
+ 30612      00000000 
+ 30613 5228 00000000 		.quad	.LBE1326
+ 30613      00000000 
+ 30614 5230 02       		.byte	0x2
+ 30615 5231 6C03     		.value	0x36c
+ 30616 5233 4A520000 		.long	0x524a
+ 30617 5237 32       		.uleb128 0x32
+ 30618 5238 3E0E0000 		.long	0xe3e
+ 30619 523c 03       		.byte	0x3
+ 30620 523d 91       		.byte	0x91
+ 30621 523e F07B     		.sleb128 -528
+ 30622 5240 32       		.uleb128 0x32
+ 30623 5241 330E0000 		.long	0xe33
+ 30624 5245 03       		.byte	0x3
+ 30625 5246 91       		.byte	0x91
+ 30626 5247 807C     		.sleb128 -512
+ 30627 5249 00       		.byte	0x0
+ 30628 524a 35       		.uleb128 0x35
+ 30629 524b 4F0D0000 		.long	0xd4f
+ 30630 524f 00000000 		.quad	.LBB1328
+ 30630      00000000 
+ 30631 5257 00000000 		.quad	.LBE1328
+ 30631      00000000 
+ 30632 525f 02       		.byte	0x2
+ 30633 5260 6E03     		.value	0x36e
+ 30634 5262 32       		.uleb128 0x32
+ 30635 5263 6A0D0000 		.long	0xd6a
+ 30636 5267 03       		.byte	0x3
+ 30637 5268 91       		.byte	0x91
+ 30638 5269 907C     		.sleb128 -496
+ 30639 526b 32       		.uleb128 0x32
+ 30640 526c 600D0000 		.long	0xd60
+ 30641 5270 03       		.byte	0x3
+ 30642 5271 91       		.byte	0x91
+ 30643 5272 A07C     		.sleb128 -480
+ 30644 5274 00       		.byte	0x0
+ 30645 5275 00       		.byte	0x0
+ 30646 5276 00       		.byte	0x0
+ 30647 5277 00       		.byte	0x0
+ 30648 5278 36       		.uleb128 0x36
+ 30649 5279 00000000 		.quad	.LBB1330
+ 30649      00000000 
+ 30650 5281 00000000 		.quad	.LBE1330
+ 30650      00000000 
+ 30651 5289 98520000 		.long	0x5298
+ 30652 528d 34       		.uleb128 0x34
+ 30653 528e 1C0C0000 		.long	0xc1c
+
GAS LISTING /tmp/ccjbMjHD.s 			page 827
+
+
+ 30654 5292 04       		.byte	0x4
+ 30655 5293 91       		.byte	0x91
+ 30656 5294 E0B17F   		.sleb128 -10016
+ 30657 5297 00       		.byte	0x0
+ 30658 5298 31       		.uleb128 0x31
+ 30659 5299 4A0E0000 		.long	0xe4a
+ 30660 529d 00000000 		.quad	.LBB1331
+ 30660      00000000 
+ 30661 52a5 00000000 		.quad	.LBE1331
+ 30661      00000000 
+ 30662 52ad 02       		.byte	0x2
+ 30663 52ae 9406     		.value	0x694
+ 30664 52b0 35530000 		.long	0x5335
+ 30665 52b4 32       		.uleb128 0x32
+ 30666 52b5 5C0E0000 		.long	0xe5c
+ 30667 52b9 03       		.byte	0x3
+ 30668 52ba 91       		.byte	0x91
+ 30669 52bb B07C     		.sleb128 -464
+ 30670 52bd 33       		.uleb128 0x33
+ 30671 52be 00000000 		.quad	.LBB1332
+ 30671      00000000 
+ 30672 52c6 00000000 		.quad	.LBE1332
+ 30672      00000000 
+ 30673 52ce 34       		.uleb128 0x34
+ 30674 52cf 680E0000 		.long	0xe68
+ 30675 52d3 09       		.byte	0x9
+ 30676 52d4 03       		.byte	0x3
+ 30677 52d5 00000000 		.quad	ShiftRowTable.7385
+ 30677      00000000 
+ 30678 52dd 35       		.uleb128 0x35
+ 30679 52de A00D0000 		.long	0xda0
+ 30680 52e2 00000000 		.quad	.LBB1333
+ 30680      00000000 
+ 30681 52ea 00000000 		.quad	.LBE1333
+ 30681      00000000 
+ 30682 52f2 02       		.byte	0x2
+ 30683 52f3 9B02     		.value	0x29b
+ 30684 52f5 32       		.uleb128 0x32
+ 30685 52f6 BE0D0000 		.long	0xdbe
+ 30686 52fa 03       		.byte	0x3
+ 30687 52fb 91       		.byte	0x91
+ 30688 52fc C07C     		.sleb128 -448
+ 30689 52fe 32       		.uleb128 0x32
+ 30690 52ff B20D0000 		.long	0xdb2
+ 30691 5303 03       		.byte	0x3
+ 30692 5304 91       		.byte	0x91
+ 30693 5305 D07C     		.sleb128 -432
+ 30694 5307 35       		.uleb128 0x35
+ 30695 5308 CB0D0000 		.long	0xdcb
+ 30696 530c 00000000 		.quad	.LBB1335
+ 30696      00000000 
+ 30697 5314 00000000 		.quad	.LBE1335
+ 30697      00000000 
+ 30698 531c 02       		.byte	0x2
+ 30699 531d 7501     		.value	0x175
+ 30700 531f 32       		.uleb128 0x32
+ 30701 5320 E90D0000 		.long	0xde9
+
GAS LISTING /tmp/ccjbMjHD.s 			page 828
+
+
+ 30702 5324 03       		.byte	0x3
+ 30703 5325 91       		.byte	0x91
+ 30704 5326 E07C     		.sleb128 -416
+ 30705 5328 32       		.uleb128 0x32
+ 30706 5329 DD0D0000 		.long	0xddd
+ 30707 532d 03       		.byte	0x3
+ 30708 532e 91       		.byte	0x91
+ 30709 532f F07C     		.sleb128 -400
+ 30710 5331 00       		.byte	0x0
+ 30711 5332 00       		.byte	0x0
+ 30712 5333 00       		.byte	0x0
+ 30713 5334 00       		.byte	0x0
+ 30714 5335 36       		.uleb128 0x36
+ 30715 5336 00000000 		.quad	.LBB1337
+ 30715      00000000 
+ 30716 533e 00000000 		.quad	.LBE1337
+ 30716      00000000 
+ 30717 5346 55530000 		.long	0x5355
+ 30718 534a 34       		.uleb128 0x34
+ 30719 534b 2C0C0000 		.long	0xc2c
+ 30720 534f 04       		.byte	0x4
+ 30721 5350 91       		.byte	0x91
+ 30722 5351 D0B17F   		.sleb128 -10032
+ 30723 5354 00       		.byte	0x0
+ 30724 5355 31       		.uleb128 0x31
+ 30725 5356 860E0000 		.long	0xe86
+ 30726 535a 00000000 		.quad	.LBB1338
+ 30726      00000000 
+ 30727 5362 00000000 		.quad	.LBE1338
+ 30727      00000000 
+ 30728 536a 02       		.byte	0x2
+ 30729 536b 9606     		.value	0x696
+ 30730 536d 84530000 		.long	0x5384
+ 30731 5371 32       		.uleb128 0x32
+ 30732 5372 A10E0000 		.long	0xea1
+ 30733 5376 03       		.byte	0x3
+ 30734 5377 91       		.byte	0x91
+ 30735 5378 807D     		.sleb128 -384
+ 30736 537a 32       		.uleb128 0x32
+ 30737 537b 970E0000 		.long	0xe97
+ 30738 537f 03       		.byte	0x3
+ 30739 5380 91       		.byte	0x91
+ 30740 5381 907D     		.sleb128 -368
+ 30741 5383 00       		.byte	0x0
+ 30742 5384 36       		.uleb128 0x36
+ 30743 5385 00000000 		.quad	.LBB1340
+ 30743      00000000 
+ 30744 538d 00000000 		.quad	.LBE1340
+ 30744      00000000 
+ 30745 5395 A4530000 		.long	0x53a4
+ 30746 5399 34       		.uleb128 0x34
+ 30747 539a 3C0C0000 		.long	0xc3c
+ 30748 539e 04       		.byte	0x4
+ 30749 539f 91       		.byte	0x91
+ 30750 53a0 C0B17F   		.sleb128 -10048
+ 30751 53a3 00       		.byte	0x0
+ 30752 53a4 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s 			page 829
+
+
+ 30753 53a5 AC0E0000 		.long	0xeac
+ 30754 53a9 00000000 		.quad	.LBB1341
+ 30754      00000000 
+ 30755 53b1 00000000 		.quad	.LBE1341
+ 30755      00000000 
+ 30756 53b9 02       		.byte	0x2
+ 30757 53ba 9806     		.value	0x698
+ 30758 53bc F5530000 		.long	0x53f5
+ 30759 53c0 32       		.uleb128 0x32
+ 30760 53c1 BE0E0000 		.long	0xebe
+ 30761 53c5 03       		.byte	0x3
+ 30762 53c6 91       		.byte	0x91
+ 30763 53c7 A07D     		.sleb128 -352
+ 30764 53c9 35       		.uleb128 0x35
+ 30765 53ca CB0E0000 		.long	0xecb
+ 30766 53ce 00000000 		.quad	.LBB1343
+ 30766      00000000 
+ 30767 53d6 00000000 		.quad	.LBE1343
+ 30767      00000000 
+ 30768 53de 02       		.byte	0x2
+ 30769 53df 4905     		.value	0x549
+ 30770 53e1 32       		.uleb128 0x32
+ 30771 53e2 E90E0000 		.long	0xee9
+ 30772 53e6 03       		.byte	0x3
+ 30773 53e7 91       		.byte	0x91
+ 30774 53e8 BC7D     		.sleb128 -324
+ 30775 53ea 32       		.uleb128 0x32
+ 30776 53eb DD0E0000 		.long	0xedd
+ 30777 53ef 03       		.byte	0x3
+ 30778 53f0 91       		.byte	0x91
+ 30779 53f1 C07D     		.sleb128 -320
+ 30780 53f3 00       		.byte	0x0
+ 30781 53f4 00       		.byte	0x0
+ 30782 53f5 33       		.uleb128 0x33
+ 30783 53f6 00000000 		.quad	.LBB1345
+ 30783      00000000 
+ 30784 53fe 00000000 		.quad	.LBE1345
+ 30784      00000000 
+ 30785 5406 34       		.uleb128 0x34
+ 30786 5407 480C0000 		.long	0xc48
+ 30787 540b 04       		.byte	0x4
+ 30788 540c 91       		.byte	0x91
+ 30789 540d B0B17F   		.sleb128 -10064
+ 30790 5410 00       		.byte	0x0
+ 30791 5411 00       		.byte	0x0
+ 30792 5412 00       		.byte	0x0
+ 30793 5413 35       		.uleb128 0x35
+ 30794 5414 F60E0000 		.long	0xef6
+ 30795 5418 00000000 		.quad	.LBB1346
+ 30795      00000000 
+ 30796 5420 00000000 		.quad	.LBE1346
+ 30796      00000000 
+ 30797 5428 02       		.byte	0x2
+ 30798 5429 D906     		.value	0x6d9
+ 30799 542b 32       		.uleb128 0x32
+ 30800 542c 080F0000 		.long	0xf08
+ 30801 5430 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 830
+
+
+ 30802 5431 91       		.byte	0x91
+ 30803 5432 D07D     		.sleb128 -304
+ 30804 5434 33       		.uleb128 0x33
+ 30805 5435 00000000 		.quad	.LBB1347
+ 30805      00000000 
+ 30806 543d 00000000 		.quad	.LBE1347
+ 30806      00000000 
+ 30807 5445 34       		.uleb128 0x34
+ 30808 5446 140F0000 		.long	0xf14
+ 30809 544a 04       		.byte	0x4
+ 30810 544b 76       		.byte	0x76
+ 30811 544c E0AC7F   		.sleb128 -10656
+ 30812 544f 31       		.uleb128 0x31
+ 30813 5450 210F0000 		.long	0xf21
+ 30814 5454 00000000 		.quad	.LBB1348
+ 30814      00000000 
+ 30815 545c 00000000 		.quad	.LBE1348
+ 30815      00000000 
+ 30816 5464 02       		.byte	0x2
+ 30817 5465 1F06     		.value	0x61f
+ 30818 5467 EC540000 		.long	0x54ec
+ 30819 546b 32       		.uleb128 0x32
+ 30820 546c 330F0000 		.long	0xf33
+ 30821 5470 03       		.byte	0x3
+ 30822 5471 91       		.byte	0x91
+ 30823 5472 E07D     		.sleb128 -288
+ 30824 5474 33       		.uleb128 0x33
+ 30825 5475 00000000 		.quad	.LBB1349
+ 30825      00000000 
+ 30826 547d 00000000 		.quad	.LBE1349
+ 30826      00000000 
+ 30827 5485 34       		.uleb128 0x34
+ 30828 5486 3F0F0000 		.long	0xf3f
+ 30829 548a 09       		.byte	0x9
+ 30830 548b 03       		.byte	0x3
+ 30831 548c 00000000 		.quad	mask.7943
+ 30831      00000000 
+ 30832 5494 35       		.uleb128 0x35
+ 30833 5495 A00D0000 		.long	0xda0
+ 30834 5499 00000000 		.quad	.LBB1350
+ 30834      00000000 
+ 30835 54a1 00000000 		.quad	.LBE1350
+ 30835      00000000 
+ 30836 54a9 02       		.byte	0x2
+ 30837 54aa FE04     		.value	0x4fe
+ 30838 54ac 32       		.uleb128 0x32
+ 30839 54ad BE0D0000 		.long	0xdbe
+ 30840 54b1 03       		.byte	0x3
+ 30841 54b2 91       		.byte	0x91
+ 30842 54b3 F07D     		.sleb128 -272
+ 30843 54b5 32       		.uleb128 0x32
+ 30844 54b6 B20D0000 		.long	0xdb2
+ 30845 54ba 03       		.byte	0x3
+ 30846 54bb 91       		.byte	0x91
+ 30847 54bc 807E     		.sleb128 -256
+ 30848 54be 35       		.uleb128 0x35
+ 30849 54bf CB0D0000 		.long	0xdcb
+
GAS LISTING /tmp/ccjbMjHD.s 			page 831
+
+
+ 30850 54c3 00000000 		.quad	.LBB1352
+ 30850      00000000 
+ 30851 54cb 00000000 		.quad	.LBE1352
+ 30851      00000000 
+ 30852 54d3 02       		.byte	0x2
+ 30853 54d4 7501     		.value	0x175
+ 30854 54d6 32       		.uleb128 0x32
+ 30855 54d7 E90D0000 		.long	0xde9
+ 30856 54db 03       		.byte	0x3
+ 30857 54dc 91       		.byte	0x91
+ 30858 54dd 907E     		.sleb128 -240
+ 30859 54df 32       		.uleb128 0x32
+ 30860 54e0 DD0D0000 		.long	0xddd
+ 30861 54e4 03       		.byte	0x3
+ 30862 54e5 91       		.byte	0x91
+ 30863 54e6 A07E     		.sleb128 -224
+ 30864 54e8 00       		.byte	0x0
+ 30865 54e9 00       		.byte	0x0
+ 30866 54ea 00       		.byte	0x0
+ 30867 54eb 00       		.byte	0x0
+ 30868 54ec 31       		.uleb128 0x31
+ 30869 54ed 210F0000 		.long	0xf21
+ 30870 54f1 00000000 		.quad	.LBB1354
+ 30870      00000000 
+ 30871 54f9 00000000 		.quad	.LBE1354
+ 30871      00000000 
+ 30872 5501 02       		.byte	0x2
+ 30873 5502 2006     		.value	0x620
+ 30874 5504 89550000 		.long	0x5589
+ 30875 5508 32       		.uleb128 0x32
+ 30876 5509 330F0000 		.long	0xf33
+ 30877 550d 03       		.byte	0x3
+ 30878 550e 91       		.byte	0x91
+ 30879 550f B07E     		.sleb128 -208
+ 30880 5511 33       		.uleb128 0x33
+ 30881 5512 00000000 		.quad	.LBB1355
+ 30881      00000000 
+ 30882 551a 00000000 		.quad	.LBE1355
+ 30882      00000000 
+ 30883 5522 34       		.uleb128 0x34
+ 30884 5523 3F0F0000 		.long	0xf3f
+ 30885 5527 09       		.byte	0x9
+ 30886 5528 03       		.byte	0x3
+ 30887 5529 00000000 		.quad	mask.7943
+ 30887      00000000 
+ 30888 5531 35       		.uleb128 0x35
+ 30889 5532 A00D0000 		.long	0xda0
+ 30890 5536 00000000 		.quad	.LBB1356
+ 30890      00000000 
+ 30891 553e 00000000 		.quad	.LBE1356
+ 30891      00000000 
+ 30892 5546 02       		.byte	0x2
+ 30893 5547 FE04     		.value	0x4fe
+ 30894 5549 32       		.uleb128 0x32
+ 30895 554a BE0D0000 		.long	0xdbe
+ 30896 554e 03       		.byte	0x3
+ 30897 554f 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 832
+
+
+ 30898 5550 C07E     		.sleb128 -192
+ 30899 5552 32       		.uleb128 0x32
+ 30900 5553 B20D0000 		.long	0xdb2
+ 30901 5557 03       		.byte	0x3
+ 30902 5558 91       		.byte	0x91
+ 30903 5559 D07E     		.sleb128 -176
+ 30904 555b 35       		.uleb128 0x35
+ 30905 555c CB0D0000 		.long	0xdcb
+ 30906 5560 00000000 		.quad	.LBB1358
+ 30906      00000000 
+ 30907 5568 00000000 		.quad	.LBE1358
+ 30907      00000000 
+ 30908 5570 02       		.byte	0x2
+ 30909 5571 7501     		.value	0x175
+ 30910 5573 32       		.uleb128 0x32
+ 30911 5574 E90D0000 		.long	0xde9
+ 30912 5578 03       		.byte	0x3
+ 30913 5579 91       		.byte	0x91
+ 30914 557a E07E     		.sleb128 -160
+ 30915 557c 32       		.uleb128 0x32
+ 30916 557d DD0D0000 		.long	0xddd
+ 30917 5581 03       		.byte	0x3
+ 30918 5582 91       		.byte	0x91
+ 30919 5583 F07E     		.sleb128 -144
+ 30920 5585 00       		.byte	0x0
+ 30921 5586 00       		.byte	0x0
+ 30922 5587 00       		.byte	0x0
+ 30923 5588 00       		.byte	0x0
+ 30924 5589 35       		.uleb128 0x35
+ 30925 558a 210F0000 		.long	0xf21
+ 30926 558e 00000000 		.quad	.LBB1360
+ 30926      00000000 
+ 30927 5596 00000000 		.quad	.LBE1360
+ 30927      00000000 
+ 30928 559e 02       		.byte	0x2
+ 30929 559f 2106     		.value	0x621
+ 30930 55a1 32       		.uleb128 0x32
+ 30931 55a2 330F0000 		.long	0xf33
+ 30932 55a6 03       		.byte	0x3
+ 30933 55a7 91       		.byte	0x91
+ 30934 55a8 807F     		.sleb128 -128
+ 30935 55aa 33       		.uleb128 0x33
+ 30936 55ab 00000000 		.quad	.LBB1361
+ 30936      00000000 
+ 30937 55b3 00000000 		.quad	.LBE1361
+ 30937      00000000 
+ 30938 55bb 34       		.uleb128 0x34
+ 30939 55bc 3F0F0000 		.long	0xf3f
+ 30940 55c0 09       		.byte	0x9
+ 30941 55c1 03       		.byte	0x3
+ 30942 55c2 00000000 		.quad	mask.7943
+ 30942      00000000 
+ 30943 55ca 35       		.uleb128 0x35
+ 30944 55cb A00D0000 		.long	0xda0
+ 30945 55cf 00000000 		.quad	.LBB1362
+ 30945      00000000 
+ 30946 55d7 00000000 		.quad	.LBE1362
+
GAS LISTING /tmp/ccjbMjHD.s 			page 833
+
+
+ 30946      00000000 
+ 30947 55df 02       		.byte	0x2
+ 30948 55e0 FE04     		.value	0x4fe
+ 30949 55e2 32       		.uleb128 0x32
+ 30950 55e3 BE0D0000 		.long	0xdbe
+ 30951 55e7 03       		.byte	0x3
+ 30952 55e8 91       		.byte	0x91
+ 30953 55e9 907F     		.sleb128 -112
+ 30954 55eb 32       		.uleb128 0x32
+ 30955 55ec B20D0000 		.long	0xdb2
+ 30956 55f0 03       		.byte	0x3
+ 30957 55f1 91       		.byte	0x91
+ 30958 55f2 A07F     		.sleb128 -96
+ 30959 55f4 35       		.uleb128 0x35
+ 30960 55f5 CB0D0000 		.long	0xdcb
+ 30961 55f9 00000000 		.quad	.LBB1364
+ 30961      00000000 
+ 30962 5601 00000000 		.quad	.LBE1364
+ 30962      00000000 
+ 30963 5609 02       		.byte	0x2
+ 30964 560a 7501     		.value	0x175
+ 30965 560c 32       		.uleb128 0x32
+ 30966 560d E90D0000 		.long	0xde9
+ 30967 5611 03       		.byte	0x3
+ 30968 5612 91       		.byte	0x91
+ 30969 5613 B07F     		.sleb128 -80
+ 30970 5615 32       		.uleb128 0x32
+ 30971 5616 DD0D0000 		.long	0xddd
+ 30972 561a 02       		.byte	0x2
+ 30973 561b 91       		.byte	0x91
+ 30974 561c 40       		.sleb128 -64
+ 30975 561d 00       		.byte	0x0
+ 30976 561e 00       		.byte	0x0
+ 30977 561f 00       		.byte	0x0
+ 30978 5620 00       		.byte	0x0
+ 30979 5621 00       		.byte	0x0
+ 30980 5622 00       		.byte	0x0
+ 30981 5623 00       		.byte	0x0
+ 30982 5624 07       		.uleb128 0x7
+ 30983 5625 08       		.byte	0x8
+ 30984 5626 B3010000 		.long	0x1b3
+ 30985 562a 07       		.uleb128 0x7
+ 30986 562b 08       		.byte	0x8
+ 30987 562c 30560000 		.long	0x5630
+ 30988 5630 06       		.uleb128 0x6
+ 30989 5631 FE030000 		.long	0x3fe
+ 30990 5635 25       		.uleb128 0x25
+ 30991 5636 00000000 		.long	.LASF348
+ 30992 563a 02       		.byte	0x2
+ 30993 563b 1105     		.value	0x511
+ 30994 563d 01       		.byte	0x1
+ 30995 563e B3010000 		.long	0x1b3
+ 30996 5642 03       		.byte	0x3
+ 30997 5643 71560000 		.long	0x5671
+ 30998 5647 26       		.uleb128 0x26
+ 30999 5648 00000000 		.long	.LASF67
+ 31000 564c 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 834
+
+
+ 31001 564d 1105     		.value	0x511
+ 31002 564f B3010000 		.long	0x1b3
+ 31003 5653 2C       		.uleb128 0x2c
+ 31004 5654 00000000 		.long	.LASF334
+ 31005 5658 02       		.byte	0x2
+ 31006 5659 1405     		.value	0x514
+ 31007 565b 4A0D0000 		.long	0xd4a
+ 31008 565f 10       		.byte	0x10
+ 31009 5660 08       		.byte	0x8
+ 31010 5661 09       		.byte	0x9
+ 31011 5662 0A       		.byte	0xa
+ 31012 5663 0B       		.byte	0xb
+ 31013 5664 0C       		.byte	0xc
+ 31014 5665 0D       		.byte	0xd
+ 31015 5666 0E       		.byte	0xe
+ 31016 5667 0F       		.byte	0xf
+ 31017 5668 FF       		.byte	0xff
+ 31018 5669 FF       		.byte	0xff
+ 31019 566a FF       		.byte	0xff
+ 31020 566b FF       		.byte	0xff
+ 31021 566c FF       		.byte	0xff
+ 31022 566d FF       		.byte	0xff
+ 31023 566e FF       		.byte	0xff
+ 31024 566f FF       		.byte	0xff
+ 31025 5670 00       		.byte	0x0
+ 31026 5671 25       		.uleb128 0x25
+ 31027 5672 00000000 		.long	.LASF349
+ 31028 5676 02       		.byte	0x2
+ 31029 5677 5206     		.value	0x652
+ 31030 5679 01       		.byte	0x1
+ 31031 567a B3010000 		.long	0x1b3
+ 31032 567e 03       		.byte	0x3
+ 31033 567f BE560000 		.long	0x56be
+ 31034 5683 26       		.uleb128 0x26
+ 31035 5684 00000000 		.long	.LASF67
+ 31036 5688 02       		.byte	0x2
+ 31037 5689 5206     		.value	0x652
+ 31038 568b B3010000 		.long	0x1b3
+ 31039 568f 26       		.uleb128 0x26
+ 31040 5690 00000000 		.long	.LASF321
+ 31041 5694 02       		.byte	0x2
+ 31042 5695 5206     		.value	0x652
+ 31043 5697 B4000000 		.long	0xb4
+ 31044 569b 28       		.uleb128 0x28
+ 31045 569c 7500     		.string	"u"
+ 31046 569e 02       		.byte	0x2
+ 31047 569f 5906     		.value	0x659
+ 31048 56a1 29050000 		.long	0x529
+ 31049 56a5 27       		.uleb128 0x27
+ 31050 56a6 00000000 		.long	.LASF350
+ 31051 56aa 02       		.byte	0x2
+ 31052 56ab 5A06     		.value	0x65a
+ 31053 56ad 09040000 		.long	0x409
+ 31054 56b1 27       		.uleb128 0x27
+ 31055 56b2 00000000 		.long	.LASF351
+ 31056 56b6 02       		.byte	0x2
+ 31057 56b7 5B06     		.value	0x65b
+
GAS LISTING /tmp/ccjbMjHD.s 			page 835
+
+
+ 31058 56b9 09040000 		.long	0x409
+ 31059 56bd 00       		.byte	0x0
+ 31060 56be 25       		.uleb128 0x25
+ 31061 56bf 00000000 		.long	.LASF352
+ 31062 56c3 02       		.byte	0x2
+ 31063 56c4 DF02     		.value	0x2df
+ 31064 56c6 01       		.byte	0x1
+ 31065 56c7 09040000 		.long	0x409
+ 31066 56cb 03       		.byte	0x3
+ 31067 56cc F2560000 		.long	0x56f2
+ 31068 56d0 2B       		.uleb128 0x2b
+ 31069 56d1 7700     		.string	"w"
+ 31070 56d3 02       		.byte	0x2
+ 31071 56d4 DF02     		.value	0x2df
+ 31072 56d6 09040000 		.long	0x409
+ 31073 56da 28       		.uleb128 0x28
+ 31074 56db 636F6C00 		.string	"col"
+ 31075 56df 02       		.byte	0x2
+ 31076 56e0 E102     		.value	0x2e1
+ 31077 56e2 14040000 		.long	0x414
+ 31078 56e6 28       		.uleb128 0x28
+ 31079 56e7 697800   		.string	"ix"
+ 31080 56ea 02       		.byte	0x2
+ 31081 56eb E202     		.value	0x2e2
+ 31082 56ed 78000000 		.long	0x78
+ 31083 56f1 00       		.byte	0x0
+ 31084 56f2 25       		.uleb128 0x25
+ 31085 56f3 00000000 		.long	.LASF353
+ 31086 56f7 02       		.byte	0x2
+ 31087 56f8 AA04     		.value	0x4aa
+ 31088 56fa 01       		.byte	0x1
+ 31089 56fb 09040000 		.long	0x409
+ 31090 56ff 03       		.byte	0x3
+ 31091 5700 0F570000 		.long	0x570f
+ 31092 5704 2B       		.uleb128 0x2b
+ 31093 5705 7700     		.string	"w"
+ 31094 5707 02       		.byte	0x2
+ 31095 5708 AA04     		.value	0x4aa
+ 31096 570a 09040000 		.long	0x409
+ 31097 570e 00       		.byte	0x0
+ 31098 570f 25       		.uleb128 0x25
+ 31099 5710 00000000 		.long	.LASF354
+ 31100 5714 02       		.byte	0x2
+ 31101 5715 B705     		.value	0x5b7
+ 31102 5717 01       		.byte	0x1
+ 31103 5718 B3010000 		.long	0x1b3
+ 31104 571c 03       		.byte	0x3
+ 31105 571d 36570000 		.long	0x5736
+ 31106 5721 2B       		.uleb128 0x2b
+ 31107 5722 7700     		.string	"w"
+ 31108 5724 02       		.byte	0x2
+ 31109 5725 B705     		.value	0x5b7
+ 31110 5727 B3010000 		.long	0x1b3
+ 31111 572b 2B       		.uleb128 0x2b
+ 31112 572c 7800     		.string	"x"
+ 31113 572e 02       		.byte	0x2
+ 31114 572f B705     		.value	0x5b7
+
GAS LISTING /tmp/ccjbMjHD.s 			page 836
+
+
+ 31115 5731 B3010000 		.long	0x1b3
+ 31116 5735 00       		.byte	0x0
+ 31117 5736 25       		.uleb128 0x25
+ 31118 5737 00000000 		.long	.LASF355
+ 31119 573b 03       		.byte	0x3
+ 31120 573c 6C01     		.value	0x16c
+ 31121 573e 01       		.byte	0x1
+ 31122 573f E7000000 		.long	0xe7
+ 31123 5743 03       		.byte	0x3
+ 31124 5744 6D570000 		.long	0x576d
+ 31125 5748 26       		.uleb128 0x26
+ 31126 5749 00000000 		.long	.LASF356
+ 31127 574d 03       		.byte	0x3
+ 31128 574e 6C01     		.value	0x16c
+ 31129 5750 E7000000 		.long	0xe7
+ 31130 5754 26       		.uleb128 0x26
+ 31131 5755 00000000 		.long	.LASF357
+ 31132 5759 03       		.byte	0x3
+ 31133 575a 6C01     		.value	0x16c
+ 31134 575c E7000000 		.long	0xe7
+ 31135 5760 26       		.uleb128 0x26
+ 31136 5761 00000000 		.long	.LASF334
+ 31137 5765 03       		.byte	0x3
+ 31138 5766 6C01     		.value	0x16c
+ 31139 5768 B4000000 		.long	0xb4
+ 31140 576c 00       		.byte	0x0
+ 31141 576d 25       		.uleb128 0x25
+ 31142 576e 00000000 		.long	.LASF358
+ 31143 5772 02       		.byte	0x2
+ 31144 5773 D705     		.value	0x5d7
+ 31145 5775 01       		.byte	0x1
+ 31146 5776 B3010000 		.long	0x1b3
+ 31147 577a 03       		.byte	0x3
+ 31148 577b 94570000 		.long	0x5794
+ 31149 577f 2B       		.uleb128 0x2b
+ 31150 5780 7700     		.string	"w"
+ 31151 5782 02       		.byte	0x2
+ 31152 5783 D705     		.value	0x5d7
+ 31153 5785 B3010000 		.long	0x1b3
+ 31154 5789 2B       		.uleb128 0x2b
+ 31155 578a 7800     		.string	"x"
+ 31156 578c 02       		.byte	0x2
+ 31157 578d D705     		.value	0x5d7
+ 31158 578f B3010000 		.long	0x1b3
+ 31159 5793 00       		.byte	0x0
+ 31160 5794 2D       		.uleb128 0x2d
+ 31161 5795 00000000 		.long	.LASF360
+ 31162 5799 02       		.byte	0x2
+ 31163 579a E706     		.value	0x6e7
+ 31164 579c 01       		.byte	0x1
+ 31165 579d 00000000 		.quad	.LFB646
+ 31165      00000000 
+ 31166 57a5 00000000 		.quad	.LFE646
+ 31166      00000000 
+ 31167 57ad 00000000 		.long	.LLST2
+ 31168 57b1 8F940000 		.long	0x948f
+ 31169 57b5 2E       		.uleb128 0x2e
+
GAS LISTING /tmp/ccjbMjHD.s 			page 837
+
+
+ 31170 57b6 00000000 		.long	.LASF65
+ 31171 57ba 02       		.byte	0x2
+ 31172 57bb E706     		.value	0x6e7
+ 31173 57bd 24560000 		.long	0x5624
+ 31174 57c1 04       		.byte	0x4
+ 31175 57c2 91       		.byte	0x91
+ 31176 57c3 98BD7F   		.sleb128 -8552
+ 31177 57c6 2F       		.uleb128 0x2f
+ 31178 57c7 6B657900 		.string	"key"
+ 31179 57cb 02       		.byte	0x2
+ 31180 57cc E706     		.value	0x6e7
+ 31181 57ce 2A560000 		.long	0x562a
+ 31182 57d2 04       		.byte	0x4
+ 31183 57d3 91       		.byte	0x91
+ 31184 57d4 90BD7F   		.sleb128 -8560
+ 31185 57d7 37       		.uleb128 0x37
+ 31186 57d8 763000   		.string	"v0"
+ 31187 57db 02       		.byte	0x2
+ 31188 57dc EF06     		.value	0x6ef
+ 31189 57de B3010000 		.long	0x1b3
+ 31190 57e2 04       		.byte	0x4
+ 31191 57e3 76       		.byte	0x76
+ 31192 57e4 B0B97F   		.sleb128 -9040
+ 31193 57e7 37       		.uleb128 0x37
+ 31194 57e8 763100   		.string	"v1"
+ 31195 57eb 02       		.byte	0x2
+ 31196 57ec EF06     		.value	0x6ef
+ 31197 57ee B3010000 		.long	0x1b3
+ 31198 57f2 04       		.byte	0x4
+ 31199 57f3 76       		.byte	0x76
+ 31200 57f4 C0B97F   		.sleb128 -9024
+ 31201 57f7 37       		.uleb128 0x37
+ 31202 57f8 763200   		.string	"v2"
+ 31203 57fb 02       		.byte	0x2
+ 31204 57fc EF06     		.value	0x6ef
+ 31205 57fe B3010000 		.long	0x1b3
+ 31206 5802 04       		.byte	0x4
+ 31207 5803 76       		.byte	0x76
+ 31208 5804 D0B97F   		.sleb128 -9008
+ 31209 5807 37       		.uleb128 0x37
+ 31210 5808 763300   		.string	"v3"
+ 31211 580b 02       		.byte	0x2
+ 31212 580c EF06     		.value	0x6ef
+ 31213 580e B3010000 		.long	0x1b3
+ 31214 5812 04       		.byte	0x4
+ 31215 5813 76       		.byte	0x76
+ 31216 5814 E0B97F   		.sleb128 -8992
+ 31217 5817 37       		.uleb128 0x37
+ 31218 5818 763400   		.string	"v4"
+ 31219 581b 02       		.byte	0x2
+ 31220 581c EF06     		.value	0x6ef
+ 31221 581e B3010000 		.long	0x1b3
+ 31222 5822 04       		.byte	0x4
+ 31223 5823 76       		.byte	0x76
+ 31224 5824 F0B97F   		.sleb128 -8976
+ 31225 5827 37       		.uleb128 0x37
+ 31226 5828 6B00     		.string	"k"
+
GAS LISTING /tmp/ccjbMjHD.s 			page 838
+
+
+ 31227 582a 02       		.byte	0x2
+ 31228 582b F006     		.value	0x6f0
+ 31229 582d B3010000 		.long	0x1b3
+ 31230 5831 04       		.byte	0x4
+ 31231 5832 76       		.byte	0x76
+ 31232 5833 80BA7F   		.sleb128 -8960
+ 31233 5836 31       		.uleb128 0x31
+ 31234 5837 AD0B0000 		.long	0xbad
+ 31235 583b 00000000 		.quad	.LBB1952
+ 31235      00000000 
+ 31236 5843 00000000 		.quad	.LBE1952
+ 31236      00000000 
+ 31237 584b 02       		.byte	0x2
+ 31238 584c F306     		.value	0x6f3
+ 31239 584e 78580000 		.long	0x5878
+ 31240 5852 32       		.uleb128 0x32
+ 31241 5853 BE0B0000 		.long	0xbbe
+ 31242 5857 03       		.byte	0x3
+ 31243 5858 91       		.byte	0x91
+ 31244 5859 A040     		.sleb128 -8160
+ 31245 585b 33       		.uleb128 0x33
+ 31246 585c 00000000 		.quad	.LBB1953
+ 31246      00000000 
+ 31247 5864 00000000 		.quad	.LBE1953
+ 31247      00000000 
+ 31248 586c 34       		.uleb128 0x34
+ 31249 586d C90B0000 		.long	0xbc9
+ 31250 5871 04       		.byte	0x4
+ 31251 5872 76       		.byte	0x76
+ 31252 5873 90BA7F   		.sleb128 -8944
+ 31253 5876 00       		.byte	0x0
+ 31254 5877 00       		.byte	0x0
+ 31255 5878 31       		.uleb128 0x31
+ 31256 5879 AD0B0000 		.long	0xbad
+ 31257 587d 00000000 		.quad	.LBB1954
+ 31257      00000000 
+ 31258 5885 00000000 		.quad	.LBE1954
+ 31258      00000000 
+ 31259 588d 02       		.byte	0x2
+ 31260 588e F406     		.value	0x6f4
+ 31261 5890 BA580000 		.long	0x58ba
+ 31262 5894 32       		.uleb128 0x32
+ 31263 5895 BE0B0000 		.long	0xbbe
+ 31264 5899 03       		.byte	0x3
+ 31265 589a 91       		.byte	0x91
+ 31266 589b A840     		.sleb128 -8152
+ 31267 589d 33       		.uleb128 0x33
+ 31268 589e 00000000 		.quad	.LBB1955
+ 31268      00000000 
+ 31269 58a6 00000000 		.quad	.LBE1955
+ 31269      00000000 
+ 31270 58ae 34       		.uleb128 0x34
+ 31271 58af C90B0000 		.long	0xbc9
+ 31272 58b3 04       		.byte	0x4
+ 31273 58b4 76       		.byte	0x76
+ 31274 58b5 A0BA7F   		.sleb128 -8928
+ 31275 58b8 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 839
+
+
+ 31276 58b9 00       		.byte	0x0
+ 31277 58ba 31       		.uleb128 0x31
+ 31278 58bb 35560000 		.long	0x5635
+ 31279 58bf 00000000 		.quad	.LBB1956
+ 31279      00000000 
+ 31280 58c7 00000000 		.quad	.LBE1956
+ 31280      00000000 
+ 31281 58cf 02       		.byte	0x2
+ 31282 58d0 F506     		.value	0x6f5
+ 31283 58d2 57590000 		.long	0x5957
+ 31284 58d6 32       		.uleb128 0x32
+ 31285 58d7 47560000 		.long	0x5647
+ 31286 58db 03       		.byte	0x3
+ 31287 58dc 91       		.byte	0x91
+ 31288 58dd B040     		.sleb128 -8144
+ 31289 58df 33       		.uleb128 0x33
+ 31290 58e0 00000000 		.quad	.LBB1957
+ 31290      00000000 
+ 31291 58e8 00000000 		.quad	.LBE1957
+ 31291      00000000 
+ 31292 58f0 34       		.uleb128 0x34
+ 31293 58f1 53560000 		.long	0x5653
+ 31294 58f5 09       		.byte	0x9
+ 31295 58f6 03       		.byte	0x3
+ 31296 58f7 00000000 		.quad	mask.7952
+ 31296      00000000 
+ 31297 58ff 35       		.uleb128 0x35
+ 31298 5900 A00D0000 		.long	0xda0
+ 31299 5904 00000000 		.quad	.LBB1958
+ 31299      00000000 
+ 31300 590c 00000000 		.quad	.LBE1958
+ 31300      00000000 
+ 31301 5914 02       		.byte	0x2
+ 31302 5915 1505     		.value	0x515
+ 31303 5917 32       		.uleb128 0x32
+ 31304 5918 BE0D0000 		.long	0xdbe
+ 31305 591c 03       		.byte	0x3
+ 31306 591d 91       		.byte	0x91
+ 31307 591e C040     		.sleb128 -8128
+ 31308 5920 32       		.uleb128 0x32
+ 31309 5921 B20D0000 		.long	0xdb2
+ 31310 5925 03       		.byte	0x3
+ 31311 5926 91       		.byte	0x91
+ 31312 5927 D040     		.sleb128 -8112
+ 31313 5929 35       		.uleb128 0x35
+ 31314 592a CB0D0000 		.long	0xdcb
+ 31315 592e 00000000 		.quad	.LBB1960
+ 31315      00000000 
+ 31316 5936 00000000 		.quad	.LBE1960
+ 31316      00000000 
+ 31317 593e 02       		.byte	0x2
+ 31318 593f 7501     		.value	0x175
+ 31319 5941 32       		.uleb128 0x32
+ 31320 5942 E90D0000 		.long	0xde9
+ 31321 5946 03       		.byte	0x3
+ 31322 5947 91       		.byte	0x91
+ 31323 5948 E040     		.sleb128 -8096
+
GAS LISTING /tmp/ccjbMjHD.s 			page 840
+
+
+ 31324 594a 32       		.uleb128 0x32
+ 31325 594b DD0D0000 		.long	0xddd
+ 31326 594f 03       		.byte	0x3
+ 31327 5950 91       		.byte	0x91
+ 31328 5951 F040     		.sleb128 -8080
+ 31329 5953 00       		.byte	0x0
+ 31330 5954 00       		.byte	0x0
+ 31331 5955 00       		.byte	0x0
+ 31332 5956 00       		.byte	0x0
+ 31333 5957 31       		.uleb128 0x31
+ 31334 5958 71560000 		.long	0x5671
+ 31335 595c 00000000 		.quad	.LBB1962
+ 31335      00000000 
+ 31336 5964 00000000 		.quad	.LBE1962
+ 31336      00000000 
+ 31337 596c 02       		.byte	0x2
+ 31338 596d FC06     		.value	0x6fc
+ 31339 596f 215A0000 		.long	0x5a21
+ 31340 5973 32       		.uleb128 0x32
+ 31341 5974 8F560000 		.long	0x568f
+ 31342 5978 03       		.byte	0x3
+ 31343 5979 91       		.byte	0x91
+ 31344 597a 8C41     		.sleb128 -8052
+ 31345 597c 32       		.uleb128 0x32
+ 31346 597d 83560000 		.long	0x5683
+ 31347 5981 03       		.byte	0x3
+ 31348 5982 91       		.byte	0x91
+ 31349 5983 9041     		.sleb128 -8048
+ 31350 5985 33       		.uleb128 0x33
+ 31351 5986 00000000 		.quad	.LBB1963
+ 31351      00000000 
+ 31352 598e 00000000 		.quad	.LBE1963
+ 31352      00000000 
+ 31353 5996 34       		.uleb128 0x34
+ 31354 5997 9B560000 		.long	0x569b
+ 31355 599b 04       		.byte	0x4
+ 31356 599c 91       		.byte	0x91
+ 31357 599d B0BD7F   		.sleb128 -8528
+ 31358 59a0 34       		.uleb128 0x34
+ 31359 59a1 A5560000 		.long	0x56a5
+ 31360 59a5 03       		.byte	0x3
+ 31361 59a6 91       		.byte	0x91
+ 31362 59a7 B041     		.sleb128 -8016
+ 31363 59a9 34       		.uleb128 0x34
+ 31364 59aa B1560000 		.long	0x56b1
+ 31365 59ae 03       		.byte	0x3
+ 31366 59af 91       		.byte	0x91
+ 31367 59b0 AC41     		.sleb128 -8020
+ 31368 59b2 31       		.uleb128 0x31
+ 31369 59b3 BE560000 		.long	0x56be
+ 31370 59b7 00000000 		.quad	.LBB1964
+ 31370      00000000 
+ 31371 59bf 00000000 		.quad	.LBE1964
+ 31371      00000000 
+ 31372 59c7 02       		.byte	0x2
+ 31373 59c8 5F06     		.value	0x65f
+ 31374 59ca FD590000 		.long	0x59fd
+
GAS LISTING /tmp/ccjbMjHD.s 			page 841
+
+
+ 31375 59ce 32       		.uleb128 0x32
+ 31376 59cf D0560000 		.long	0x56d0
+ 31377 59d3 03       		.byte	0x3
+ 31378 59d4 91       		.byte	0x91
+ 31379 59d5 B441     		.sleb128 -8012
+ 31380 59d7 33       		.uleb128 0x33
+ 31381 59d8 00000000 		.quad	.LBB1965
+ 31381      00000000 
+ 31382 59e0 00000000 		.quad	.LBE1965
+ 31382      00000000 
+ 31383 59e8 34       		.uleb128 0x34
+ 31384 59e9 DA560000 		.long	0x56da
+ 31385 59ed 04       		.byte	0x4
+ 31386 59ee 91       		.byte	0x91
+ 31387 59ef A0BD7F   		.sleb128 -8544
+ 31388 59f2 34       		.uleb128 0x34
+ 31389 59f3 E6560000 		.long	0x56e6
+ 31390 59f7 03       		.byte	0x3
+ 31391 59f8 91       		.byte	0x91
+ 31392 59f9 B841     		.sleb128 -8008
+ 31393 59fb 00       		.byte	0x0
+ 31394 59fc 00       		.byte	0x0
+ 31395 59fd 35       		.uleb128 0x35
+ 31396 59fe F2560000 		.long	0x56f2
+ 31397 5a02 00000000 		.quad	.LBB1966
+ 31397      00000000 
+ 31398 5a0a 00000000 		.quad	.LBE1966
+ 31398      00000000 
+ 31399 5a12 02       		.byte	0x2
+ 31400 5a13 6006     		.value	0x660
+ 31401 5a15 32       		.uleb128 0x32
+ 31402 5a16 04570000 		.long	0x5704
+ 31403 5a1a 03       		.byte	0x3
+ 31404 5a1b 91       		.byte	0x91
+ 31405 5a1c BC41     		.sleb128 -8004
+ 31406 5a1e 00       		.byte	0x0
+ 31407 5a1f 00       		.byte	0x0
+ 31408 5a20 00       		.byte	0x0
+ 31409 5a21 31       		.uleb128 0x31
+ 31410 5a22 F60E0000 		.long	0xef6
+ 31411 5a26 00000000 		.quad	.LBB1968
+ 31411      00000000 
+ 31412 5a2e 00000000 		.quad	.LBE1968
+ 31412      00000000 
+ 31413 5a36 02       		.byte	0x2
+ 31414 5a37 FE06     		.value	0x6fe
+ 31415 5a39 365C0000 		.long	0x5c36
+ 31416 5a3d 32       		.uleb128 0x32
+ 31417 5a3e 080F0000 		.long	0xf08
+ 31418 5a42 03       		.byte	0x3
+ 31419 5a43 91       		.byte	0x91
+ 31420 5a44 C041     		.sleb128 -8000
+ 31421 5a46 33       		.uleb128 0x33
+ 31422 5a47 00000000 		.quad	.LBB1969
+ 31422      00000000 
+ 31423 5a4f 00000000 		.quad	.LBE1969
+ 31423      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 842
+
+
+ 31424 5a57 34       		.uleb128 0x34
+ 31425 5a58 140F0000 		.long	0xf14
+ 31426 5a5c 04       		.byte	0x4
+ 31427 5a5d 76       		.byte	0x76
+ 31428 5a5e B0BA7F   		.sleb128 -8912
+ 31429 5a61 31       		.uleb128 0x31
+ 31430 5a62 210F0000 		.long	0xf21
+ 31431 5a66 00000000 		.quad	.LBB1970
+ 31431      00000000 
+ 31432 5a6e 00000000 		.quad	.LBE1970
+ 31432      00000000 
+ 31433 5a76 02       		.byte	0x2
+ 31434 5a77 1F06     		.value	0x61f
+ 31435 5a79 FE5A0000 		.long	0x5afe
+ 31436 5a7d 32       		.uleb128 0x32
+ 31437 5a7e 330F0000 		.long	0xf33
+ 31438 5a82 03       		.byte	0x3
+ 31439 5a83 91       		.byte	0x91
+ 31440 5a84 D041     		.sleb128 -7984
+ 31441 5a86 33       		.uleb128 0x33
+ 31442 5a87 00000000 		.quad	.LBB1971
+ 31442      00000000 
+ 31443 5a8f 00000000 		.quad	.LBE1971
+ 31443      00000000 
+ 31444 5a97 34       		.uleb128 0x34
+ 31445 5a98 3F0F0000 		.long	0xf3f
+ 31446 5a9c 09       		.byte	0x9
+ 31447 5a9d 03       		.byte	0x3
+ 31448 5a9e 00000000 		.quad	mask.7943
+ 31448      00000000 
+ 31449 5aa6 35       		.uleb128 0x35
+ 31450 5aa7 A00D0000 		.long	0xda0
+ 31451 5aab 00000000 		.quad	.LBB1972
+ 31451      00000000 
+ 31452 5ab3 00000000 		.quad	.LBE1972
+ 31452      00000000 
+ 31453 5abb 02       		.byte	0x2
+ 31454 5abc FE04     		.value	0x4fe
+ 31455 5abe 32       		.uleb128 0x32
+ 31456 5abf BE0D0000 		.long	0xdbe
+ 31457 5ac3 03       		.byte	0x3
+ 31458 5ac4 91       		.byte	0x91
+ 31459 5ac5 E041     		.sleb128 -7968
+ 31460 5ac7 32       		.uleb128 0x32
+ 31461 5ac8 B20D0000 		.long	0xdb2
+ 31462 5acc 03       		.byte	0x3
+ 31463 5acd 91       		.byte	0x91
+ 31464 5ace F041     		.sleb128 -7952
+ 31465 5ad0 35       		.uleb128 0x35
+ 31466 5ad1 CB0D0000 		.long	0xdcb
+ 31467 5ad5 00000000 		.quad	.LBB1974
+ 31467      00000000 
+ 31468 5add 00000000 		.quad	.LBE1974
+ 31468      00000000 
+ 31469 5ae5 02       		.byte	0x2
+ 31470 5ae6 7501     		.value	0x175
+ 31471 5ae8 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 843
+
+
+ 31472 5ae9 E90D0000 		.long	0xde9
+ 31473 5aed 03       		.byte	0x3
+ 31474 5aee 91       		.byte	0x91
+ 31475 5aef 8042     		.sleb128 -7936
+ 31476 5af1 32       		.uleb128 0x32
+ 31477 5af2 DD0D0000 		.long	0xddd
+ 31478 5af6 03       		.byte	0x3
+ 31479 5af7 91       		.byte	0x91
+ 31480 5af8 9042     		.sleb128 -7920
+ 31481 5afa 00       		.byte	0x0
+ 31482 5afb 00       		.byte	0x0
+ 31483 5afc 00       		.byte	0x0
+ 31484 5afd 00       		.byte	0x0
+ 31485 5afe 31       		.uleb128 0x31
+ 31486 5aff 210F0000 		.long	0xf21
+ 31487 5b03 00000000 		.quad	.LBB1976
+ 31487      00000000 
+ 31488 5b0b 00000000 		.quad	.LBE1976
+ 31488      00000000 
+ 31489 5b13 02       		.byte	0x2
+ 31490 5b14 2006     		.value	0x620
+ 31491 5b16 9B5B0000 		.long	0x5b9b
+ 31492 5b1a 32       		.uleb128 0x32
+ 31493 5b1b 330F0000 		.long	0xf33
+ 31494 5b1f 03       		.byte	0x3
+ 31495 5b20 91       		.byte	0x91
+ 31496 5b21 A042     		.sleb128 -7904
+ 31497 5b23 33       		.uleb128 0x33
+ 31498 5b24 00000000 		.quad	.LBB1977
+ 31498      00000000 
+ 31499 5b2c 00000000 		.quad	.LBE1977
+ 31499      00000000 
+ 31500 5b34 34       		.uleb128 0x34
+ 31501 5b35 3F0F0000 		.long	0xf3f
+ 31502 5b39 09       		.byte	0x9
+ 31503 5b3a 03       		.byte	0x3
+ 31504 5b3b 00000000 		.quad	mask.7943
+ 31504      00000000 
+ 31505 5b43 35       		.uleb128 0x35
+ 31506 5b44 A00D0000 		.long	0xda0
+ 31507 5b48 00000000 		.quad	.LBB1978
+ 31507      00000000 
+ 31508 5b50 00000000 		.quad	.LBE1978
+ 31508      00000000 
+ 31509 5b58 02       		.byte	0x2
+ 31510 5b59 FE04     		.value	0x4fe
+ 31511 5b5b 32       		.uleb128 0x32
+ 31512 5b5c BE0D0000 		.long	0xdbe
+ 31513 5b60 03       		.byte	0x3
+ 31514 5b61 91       		.byte	0x91
+ 31515 5b62 B042     		.sleb128 -7888
+ 31516 5b64 32       		.uleb128 0x32
+ 31517 5b65 B20D0000 		.long	0xdb2
+ 31518 5b69 03       		.byte	0x3
+ 31519 5b6a 91       		.byte	0x91
+ 31520 5b6b C042     		.sleb128 -7872
+ 31521 5b6d 35       		.uleb128 0x35
+
GAS LISTING /tmp/ccjbMjHD.s 			page 844
+
+
+ 31522 5b6e CB0D0000 		.long	0xdcb
+ 31523 5b72 00000000 		.quad	.LBB1980
+ 31523      00000000 
+ 31524 5b7a 00000000 		.quad	.LBE1980
+ 31524      00000000 
+ 31525 5b82 02       		.byte	0x2
+ 31526 5b83 7501     		.value	0x175
+ 31527 5b85 32       		.uleb128 0x32
+ 31528 5b86 E90D0000 		.long	0xde9
+ 31529 5b8a 03       		.byte	0x3
+ 31530 5b8b 91       		.byte	0x91
+ 31531 5b8c D042     		.sleb128 -7856
+ 31532 5b8e 32       		.uleb128 0x32
+ 31533 5b8f DD0D0000 		.long	0xddd
+ 31534 5b93 03       		.byte	0x3
+ 31535 5b94 91       		.byte	0x91
+ 31536 5b95 E042     		.sleb128 -7840
+ 31537 5b97 00       		.byte	0x0
+ 31538 5b98 00       		.byte	0x0
+ 31539 5b99 00       		.byte	0x0
+ 31540 5b9a 00       		.byte	0x0
+ 31541 5b9b 35       		.uleb128 0x35
+ 31542 5b9c 210F0000 		.long	0xf21
+ 31543 5ba0 00000000 		.quad	.LBB1982
+ 31543      00000000 
+ 31544 5ba8 00000000 		.quad	.LBE1982
+ 31544      00000000 
+ 31545 5bb0 02       		.byte	0x2
+ 31546 5bb1 2106     		.value	0x621
+ 31547 5bb3 32       		.uleb128 0x32
+ 31548 5bb4 330F0000 		.long	0xf33
+ 31549 5bb8 03       		.byte	0x3
+ 31550 5bb9 91       		.byte	0x91
+ 31551 5bba F042     		.sleb128 -7824
+ 31552 5bbc 33       		.uleb128 0x33
+ 31553 5bbd 00000000 		.quad	.LBB1983
+ 31553      00000000 
+ 31554 5bc5 00000000 		.quad	.LBE1983
+ 31554      00000000 
+ 31555 5bcd 34       		.uleb128 0x34
+ 31556 5bce 3F0F0000 		.long	0xf3f
+ 31557 5bd2 09       		.byte	0x9
+ 31558 5bd3 03       		.byte	0x3
+ 31559 5bd4 00000000 		.quad	mask.7943
+ 31559      00000000 
+ 31560 5bdc 35       		.uleb128 0x35
+ 31561 5bdd A00D0000 		.long	0xda0
+ 31562 5be1 00000000 		.quad	.LBB1984
+ 31562      00000000 
+ 31563 5be9 00000000 		.quad	.LBE1984
+ 31563      00000000 
+ 31564 5bf1 02       		.byte	0x2
+ 31565 5bf2 FE04     		.value	0x4fe
+ 31566 5bf4 32       		.uleb128 0x32
+ 31567 5bf5 BE0D0000 		.long	0xdbe
+ 31568 5bf9 03       		.byte	0x3
+ 31569 5bfa 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 845
+
+
+ 31570 5bfb 8043     		.sleb128 -7808
+ 31571 5bfd 32       		.uleb128 0x32
+ 31572 5bfe B20D0000 		.long	0xdb2
+ 31573 5c02 03       		.byte	0x3
+ 31574 5c03 91       		.byte	0x91
+ 31575 5c04 9043     		.sleb128 -7792
+ 31576 5c06 35       		.uleb128 0x35
+ 31577 5c07 CB0D0000 		.long	0xdcb
+ 31578 5c0b 00000000 		.quad	.LBB1986
+ 31578      00000000 
+ 31579 5c13 00000000 		.quad	.LBE1986
+ 31579      00000000 
+ 31580 5c1b 02       		.byte	0x2
+ 31581 5c1c 7501     		.value	0x175
+ 31582 5c1e 32       		.uleb128 0x32
+ 31583 5c1f E90D0000 		.long	0xde9
+ 31584 5c23 03       		.byte	0x3
+ 31585 5c24 91       		.byte	0x91
+ 31586 5c25 A043     		.sleb128 -7776
+ 31587 5c27 32       		.uleb128 0x32
+ 31588 5c28 DD0D0000 		.long	0xddd
+ 31589 5c2c 03       		.byte	0x3
+ 31590 5c2d 91       		.byte	0x91
+ 31591 5c2e B043     		.sleb128 -7760
+ 31592 5c30 00       		.byte	0x0
+ 31593 5c31 00       		.byte	0x0
+ 31594 5c32 00       		.byte	0x0
+ 31595 5c33 00       		.byte	0x0
+ 31596 5c34 00       		.byte	0x0
+ 31597 5c35 00       		.byte	0x0
+ 31598 5c36 31       		.uleb128 0x31
+ 31599 5c37 F60E0000 		.long	0xef6
+ 31600 5c3b 00000000 		.quad	.LBB1988
+ 31600      00000000 
+ 31601 5c43 00000000 		.quad	.LBE1988
+ 31601      00000000 
+ 31602 5c4b 02       		.byte	0x2
+ 31603 5c4c 0007     		.value	0x700
+ 31604 5c4e 4B5E0000 		.long	0x5e4b
+ 31605 5c52 32       		.uleb128 0x32
+ 31606 5c53 080F0000 		.long	0xf08
+ 31607 5c57 03       		.byte	0x3
+ 31608 5c58 91       		.byte	0x91
+ 31609 5c59 C043     		.sleb128 -7744
+ 31610 5c5b 33       		.uleb128 0x33
+ 31611 5c5c 00000000 		.quad	.LBB1989
+ 31611      00000000 
+ 31612 5c64 00000000 		.quad	.LBE1989
+ 31612      00000000 
+ 31613 5c6c 34       		.uleb128 0x34
+ 31614 5c6d 140F0000 		.long	0xf14
+ 31615 5c71 04       		.byte	0x4
+ 31616 5c72 76       		.byte	0x76
+ 31617 5c73 C0BA7F   		.sleb128 -8896
+ 31618 5c76 31       		.uleb128 0x31
+ 31619 5c77 210F0000 		.long	0xf21
+ 31620 5c7b 00000000 		.quad	.LBB1990
+
GAS LISTING /tmp/ccjbMjHD.s 			page 846
+
+
+ 31620      00000000 
+ 31621 5c83 00000000 		.quad	.LBE1990
+ 31621      00000000 
+ 31622 5c8b 02       		.byte	0x2
+ 31623 5c8c 1F06     		.value	0x61f
+ 31624 5c8e 135D0000 		.long	0x5d13
+ 31625 5c92 32       		.uleb128 0x32
+ 31626 5c93 330F0000 		.long	0xf33
+ 31627 5c97 03       		.byte	0x3
+ 31628 5c98 91       		.byte	0x91
+ 31629 5c99 D043     		.sleb128 -7728
+ 31630 5c9b 33       		.uleb128 0x33
+ 31631 5c9c 00000000 		.quad	.LBB1991
+ 31631      00000000 
+ 31632 5ca4 00000000 		.quad	.LBE1991
+ 31632      00000000 
+ 31633 5cac 34       		.uleb128 0x34
+ 31634 5cad 3F0F0000 		.long	0xf3f
+ 31635 5cb1 09       		.byte	0x9
+ 31636 5cb2 03       		.byte	0x3
+ 31637 5cb3 00000000 		.quad	mask.7943
+ 31637      00000000 
+ 31638 5cbb 35       		.uleb128 0x35
+ 31639 5cbc A00D0000 		.long	0xda0
+ 31640 5cc0 00000000 		.quad	.LBB1992
+ 31640      00000000 
+ 31641 5cc8 00000000 		.quad	.LBE1992
+ 31641      00000000 
+ 31642 5cd0 02       		.byte	0x2
+ 31643 5cd1 FE04     		.value	0x4fe
+ 31644 5cd3 32       		.uleb128 0x32
+ 31645 5cd4 BE0D0000 		.long	0xdbe
+ 31646 5cd8 03       		.byte	0x3
+ 31647 5cd9 91       		.byte	0x91
+ 31648 5cda E043     		.sleb128 -7712
+ 31649 5cdc 32       		.uleb128 0x32
+ 31650 5cdd B20D0000 		.long	0xdb2
+ 31651 5ce1 03       		.byte	0x3
+ 31652 5ce2 91       		.byte	0x91
+ 31653 5ce3 F043     		.sleb128 -7696
+ 31654 5ce5 35       		.uleb128 0x35
+ 31655 5ce6 CB0D0000 		.long	0xdcb
+ 31656 5cea 00000000 		.quad	.LBB1994
+ 31656      00000000 
+ 31657 5cf2 00000000 		.quad	.LBE1994
+ 31657      00000000 
+ 31658 5cfa 02       		.byte	0x2
+ 31659 5cfb 7501     		.value	0x175
+ 31660 5cfd 32       		.uleb128 0x32
+ 31661 5cfe E90D0000 		.long	0xde9
+ 31662 5d02 03       		.byte	0x3
+ 31663 5d03 91       		.byte	0x91
+ 31664 5d04 8044     		.sleb128 -7680
+ 31665 5d06 32       		.uleb128 0x32
+ 31666 5d07 DD0D0000 		.long	0xddd
+ 31667 5d0b 03       		.byte	0x3
+ 31668 5d0c 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 847
+
+
+ 31669 5d0d 9044     		.sleb128 -7664
+ 31670 5d0f 00       		.byte	0x0
+ 31671 5d10 00       		.byte	0x0
+ 31672 5d11 00       		.byte	0x0
+ 31673 5d12 00       		.byte	0x0
+ 31674 5d13 31       		.uleb128 0x31
+ 31675 5d14 210F0000 		.long	0xf21
+ 31676 5d18 00000000 		.quad	.LBB1996
+ 31676      00000000 
+ 31677 5d20 00000000 		.quad	.LBE1996
+ 31677      00000000 
+ 31678 5d28 02       		.byte	0x2
+ 31679 5d29 2006     		.value	0x620
+ 31680 5d2b B05D0000 		.long	0x5db0
+ 31681 5d2f 32       		.uleb128 0x32
+ 31682 5d30 330F0000 		.long	0xf33
+ 31683 5d34 03       		.byte	0x3
+ 31684 5d35 91       		.byte	0x91
+ 31685 5d36 A044     		.sleb128 -7648
+ 31686 5d38 33       		.uleb128 0x33
+ 31687 5d39 00000000 		.quad	.LBB1997
+ 31687      00000000 
+ 31688 5d41 00000000 		.quad	.LBE1997
+ 31688      00000000 
+ 31689 5d49 34       		.uleb128 0x34
+ 31690 5d4a 3F0F0000 		.long	0xf3f
+ 31691 5d4e 09       		.byte	0x9
+ 31692 5d4f 03       		.byte	0x3
+ 31693 5d50 00000000 		.quad	mask.7943
+ 31693      00000000 
+ 31694 5d58 35       		.uleb128 0x35
+ 31695 5d59 A00D0000 		.long	0xda0
+ 31696 5d5d 00000000 		.quad	.LBB1998
+ 31696      00000000 
+ 31697 5d65 00000000 		.quad	.LBE1998
+ 31697      00000000 
+ 31698 5d6d 02       		.byte	0x2
+ 31699 5d6e FE04     		.value	0x4fe
+ 31700 5d70 32       		.uleb128 0x32
+ 31701 5d71 BE0D0000 		.long	0xdbe
+ 31702 5d75 03       		.byte	0x3
+ 31703 5d76 91       		.byte	0x91
+ 31704 5d77 B044     		.sleb128 -7632
+ 31705 5d79 32       		.uleb128 0x32
+ 31706 5d7a B20D0000 		.long	0xdb2
+ 31707 5d7e 03       		.byte	0x3
+ 31708 5d7f 91       		.byte	0x91
+ 31709 5d80 C044     		.sleb128 -7616
+ 31710 5d82 35       		.uleb128 0x35
+ 31711 5d83 CB0D0000 		.long	0xdcb
+ 31712 5d87 00000000 		.quad	.LBB2000
+ 31712      00000000 
+ 31713 5d8f 00000000 		.quad	.LBE2000
+ 31713      00000000 
+ 31714 5d97 02       		.byte	0x2
+ 31715 5d98 7501     		.value	0x175
+ 31716 5d9a 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 848
+
+
+ 31717 5d9b E90D0000 		.long	0xde9
+ 31718 5d9f 03       		.byte	0x3
+ 31719 5da0 91       		.byte	0x91
+ 31720 5da1 D044     		.sleb128 -7600
+ 31721 5da3 32       		.uleb128 0x32
+ 31722 5da4 DD0D0000 		.long	0xddd
+ 31723 5da8 03       		.byte	0x3
+ 31724 5da9 91       		.byte	0x91
+ 31725 5daa E044     		.sleb128 -7584
+ 31726 5dac 00       		.byte	0x0
+ 31727 5dad 00       		.byte	0x0
+ 31728 5dae 00       		.byte	0x0
+ 31729 5daf 00       		.byte	0x0
+ 31730 5db0 35       		.uleb128 0x35
+ 31731 5db1 210F0000 		.long	0xf21
+ 31732 5db5 00000000 		.quad	.LBB2002
+ 31732      00000000 
+ 31733 5dbd 00000000 		.quad	.LBE2002
+ 31733      00000000 
+ 31734 5dc5 02       		.byte	0x2
+ 31735 5dc6 2106     		.value	0x621
+ 31736 5dc8 32       		.uleb128 0x32
+ 31737 5dc9 330F0000 		.long	0xf33
+ 31738 5dcd 03       		.byte	0x3
+ 31739 5dce 91       		.byte	0x91
+ 31740 5dcf F044     		.sleb128 -7568
+ 31741 5dd1 33       		.uleb128 0x33
+ 31742 5dd2 00000000 		.quad	.LBB2003
+ 31742      00000000 
+ 31743 5dda 00000000 		.quad	.LBE2003
+ 31743      00000000 
+ 31744 5de2 34       		.uleb128 0x34
+ 31745 5de3 3F0F0000 		.long	0xf3f
+ 31746 5de7 09       		.byte	0x9
+ 31747 5de8 03       		.byte	0x3
+ 31748 5de9 00000000 		.quad	mask.7943
+ 31748      00000000 
+ 31749 5df1 35       		.uleb128 0x35
+ 31750 5df2 A00D0000 		.long	0xda0
+ 31751 5df6 00000000 		.quad	.LBB2004
+ 31751      00000000 
+ 31752 5dfe 00000000 		.quad	.LBE2004
+ 31752      00000000 
+ 31753 5e06 02       		.byte	0x2
+ 31754 5e07 FE04     		.value	0x4fe
+ 31755 5e09 32       		.uleb128 0x32
+ 31756 5e0a BE0D0000 		.long	0xdbe
+ 31757 5e0e 03       		.byte	0x3
+ 31758 5e0f 91       		.byte	0x91
+ 31759 5e10 8045     		.sleb128 -7552
+ 31760 5e12 32       		.uleb128 0x32
+ 31761 5e13 B20D0000 		.long	0xdb2
+ 31762 5e17 03       		.byte	0x3
+ 31763 5e18 91       		.byte	0x91
+ 31764 5e19 9045     		.sleb128 -7536
+ 31765 5e1b 35       		.uleb128 0x35
+ 31766 5e1c CB0D0000 		.long	0xdcb
+
GAS LISTING /tmp/ccjbMjHD.s 			page 849
+
+
+ 31767 5e20 00000000 		.quad	.LBB2006
+ 31767      00000000 
+ 31768 5e28 00000000 		.quad	.LBE2006
+ 31768      00000000 
+ 31769 5e30 02       		.byte	0x2
+ 31770 5e31 7501     		.value	0x175
+ 31771 5e33 32       		.uleb128 0x32
+ 31772 5e34 E90D0000 		.long	0xde9
+ 31773 5e38 03       		.byte	0x3
+ 31774 5e39 91       		.byte	0x91
+ 31775 5e3a A045     		.sleb128 -7520
+ 31776 5e3c 32       		.uleb128 0x32
+ 31777 5e3d DD0D0000 		.long	0xddd
+ 31778 5e41 03       		.byte	0x3
+ 31779 5e42 91       		.byte	0x91
+ 31780 5e43 B045     		.sleb128 -7504
+ 31781 5e45 00       		.byte	0x0
+ 31782 5e46 00       		.byte	0x0
+ 31783 5e47 00       		.byte	0x0
+ 31784 5e48 00       		.byte	0x0
+ 31785 5e49 00       		.byte	0x0
+ 31786 5e4a 00       		.byte	0x0
+ 31787 5e4b 31       		.uleb128 0x31
+ 31788 5e4c AC0E0000 		.long	0xeac
+ 31789 5e50 00000000 		.quad	.LBB2008
+ 31789      00000000 
+ 31790 5e58 00000000 		.quad	.LBE2008
+ 31790      00000000 
+ 31791 5e60 02       		.byte	0x2
+ 31792 5e61 0107     		.value	0x701
+ 31793 5e63 9C5E0000 		.long	0x5e9c
+ 31794 5e67 32       		.uleb128 0x32
+ 31795 5e68 BE0E0000 		.long	0xebe
+ 31796 5e6c 03       		.byte	0x3
+ 31797 5e6d 91       		.byte	0x91
+ 31798 5e6e C045     		.sleb128 -7488
+ 31799 5e70 35       		.uleb128 0x35
+ 31800 5e71 CB0E0000 		.long	0xecb
+ 31801 5e75 00000000 		.quad	.LBB2010
+ 31801      00000000 
+ 31802 5e7d 00000000 		.quad	.LBE2010
+ 31802      00000000 
+ 31803 5e85 02       		.byte	0x2
+ 31804 5e86 4905     		.value	0x549
+ 31805 5e88 32       		.uleb128 0x32
+ 31806 5e89 E90E0000 		.long	0xee9
+ 31807 5e8d 03       		.byte	0x3
+ 31808 5e8e 91       		.byte	0x91
+ 31809 5e8f DC45     		.sleb128 -7460
+ 31810 5e91 32       		.uleb128 0x32
+ 31811 5e92 DD0E0000 		.long	0xedd
+ 31812 5e96 03       		.byte	0x3
+ 31813 5e97 91       		.byte	0x91
+ 31814 5e98 E045     		.sleb128 -7456
+ 31815 5e9a 00       		.byte	0x0
+ 31816 5e9b 00       		.byte	0x0
+ 31817 5e9c 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s 			page 850
+
+
+ 31818 5e9d 0F570000 		.long	0x570f
+ 31819 5ea1 00000000 		.quad	.LBB2012
+ 31819      00000000 
+ 31820 5ea9 00000000 		.quad	.LBE2012
+ 31820      00000000 
+ 31821 5eb1 02       		.byte	0x2
+ 31822 5eb2 0307     		.value	0x703
+ 31823 5eb4 FF5E0000 		.long	0x5eff
+ 31824 5eb8 32       		.uleb128 0x32
+ 31825 5eb9 2B570000 		.long	0x572b
+ 31826 5ebd 03       		.byte	0x3
+ 31827 5ebe 91       		.byte	0x91
+ 31828 5ebf F045     		.sleb128 -7440
+ 31829 5ec1 32       		.uleb128 0x32
+ 31830 5ec2 21570000 		.long	0x5721
+ 31831 5ec6 03       		.byte	0x3
+ 31832 5ec7 91       		.byte	0x91
+ 31833 5ec8 8046     		.sleb128 -7424
+ 31834 5eca 35       		.uleb128 0x35
+ 31835 5ecb 36570000 		.long	0x5736
+ 31836 5ecf 00000000 		.quad	.LBB2014
+ 31836      00000000 
+ 31837 5ed7 00000000 		.quad	.LBE2014
+ 31837      00000000 
+ 31838 5edf 02       		.byte	0x2
+ 31839 5ee0 BA05     		.value	0x5ba
+ 31840 5ee2 32       		.uleb128 0x32
+ 31841 5ee3 60570000 		.long	0x5760
+ 31842 5ee7 03       		.byte	0x3
+ 31843 5ee8 91       		.byte	0x91
+ 31844 5ee9 9C46     		.sleb128 -7396
+ 31845 5eeb 32       		.uleb128 0x32
+ 31846 5eec 54570000 		.long	0x5754
+ 31847 5ef0 03       		.byte	0x3
+ 31848 5ef1 91       		.byte	0x91
+ 31849 5ef2 A046     		.sleb128 -7392
+ 31850 5ef4 32       		.uleb128 0x32
+ 31851 5ef5 48570000 		.long	0x5748
+ 31852 5ef9 03       		.byte	0x3
+ 31853 5efa 91       		.byte	0x91
+ 31854 5efb B046     		.sleb128 -7376
+ 31855 5efd 00       		.byte	0x0
+ 31856 5efe 00       		.byte	0x0
+ 31857 5eff 31       		.uleb128 0x31
+ 31858 5f00 6D570000 		.long	0x576d
+ 31859 5f04 00000000 		.quad	.LBB2016
+ 31859      00000000 
+ 31860 5f0c 00000000 		.quad	.LBE2016
+ 31860      00000000 
+ 31861 5f14 02       		.byte	0x2
+ 31862 5f15 0607     		.value	0x706
+ 31863 5f17 625F0000 		.long	0x5f62
+ 31864 5f1b 32       		.uleb128 0x32
+ 31865 5f1c 89570000 		.long	0x5789
+ 31866 5f20 03       		.byte	0x3
+ 31867 5f21 91       		.byte	0x91
+ 31868 5f22 C046     		.sleb128 -7360
+
GAS LISTING /tmp/ccjbMjHD.s 			page 851
+
+
+ 31869 5f24 32       		.uleb128 0x32
+ 31870 5f25 7F570000 		.long	0x577f
+ 31871 5f29 03       		.byte	0x3
+ 31872 5f2a 91       		.byte	0x91
+ 31873 5f2b D046     		.sleb128 -7344
+ 31874 5f2d 35       		.uleb128 0x35
+ 31875 5f2e 36570000 		.long	0x5736
+ 31876 5f32 00000000 		.quad	.LBB2018
+ 31876      00000000 
+ 31877 5f3a 00000000 		.quad	.LBE2018
+ 31877      00000000 
+ 31878 5f42 02       		.byte	0x2
+ 31879 5f43 DA05     		.value	0x5da
+ 31880 5f45 32       		.uleb128 0x32
+ 31881 5f46 60570000 		.long	0x5760
+ 31882 5f4a 03       		.byte	0x3
+ 31883 5f4b 91       		.byte	0x91
+ 31884 5f4c EC46     		.sleb128 -7316
+ 31885 5f4e 32       		.uleb128 0x32
+ 31886 5f4f 54570000 		.long	0x5754
+ 31887 5f53 03       		.byte	0x3
+ 31888 5f54 91       		.byte	0x91
+ 31889 5f55 F046     		.sleb128 -7312
+ 31890 5f57 32       		.uleb128 0x32
+ 31891 5f58 48570000 		.long	0x5748
+ 31892 5f5c 03       		.byte	0x3
+ 31893 5f5d 91       		.byte	0x91
+ 31894 5f5e 8047     		.sleb128 -7296
+ 31895 5f60 00       		.byte	0x0
+ 31896 5f61 00       		.byte	0x0
+ 31897 5f62 31       		.uleb128 0x31
+ 31898 5f63 F60E0000 		.long	0xef6
+ 31899 5f67 00000000 		.quad	.LBB2020
+ 31899      00000000 
+ 31900 5f6f 00000000 		.quad	.LBE2020
+ 31900      00000000 
+ 31901 5f77 02       		.byte	0x2
+ 31902 5f78 0A07     		.value	0x70a
+ 31903 5f7a 77610000 		.long	0x6177
+ 31904 5f7e 32       		.uleb128 0x32
+ 31905 5f7f 080F0000 		.long	0xf08
+ 31906 5f83 03       		.byte	0x3
+ 31907 5f84 91       		.byte	0x91
+ 31908 5f85 9047     		.sleb128 -7280
+ 31909 5f87 33       		.uleb128 0x33
+ 31910 5f88 00000000 		.quad	.LBB2021
+ 31910      00000000 
+ 31911 5f90 00000000 		.quad	.LBE2021
+ 31911      00000000 
+ 31912 5f98 34       		.uleb128 0x34
+ 31913 5f99 140F0000 		.long	0xf14
+ 31914 5f9d 04       		.byte	0x4
+ 31915 5f9e 76       		.byte	0x76
+ 31916 5f9f D0BA7F   		.sleb128 -8880
+ 31917 5fa2 31       		.uleb128 0x31
+ 31918 5fa3 210F0000 		.long	0xf21
+ 31919 5fa7 00000000 		.quad	.LBB2022
+
GAS LISTING /tmp/ccjbMjHD.s 			page 852
+
+
+ 31919      00000000 
+ 31920 5faf 00000000 		.quad	.LBE2022
+ 31920      00000000 
+ 31921 5fb7 02       		.byte	0x2
+ 31922 5fb8 1F06     		.value	0x61f
+ 31923 5fba 3F600000 		.long	0x603f
+ 31924 5fbe 32       		.uleb128 0x32
+ 31925 5fbf 330F0000 		.long	0xf33
+ 31926 5fc3 03       		.byte	0x3
+ 31927 5fc4 91       		.byte	0x91
+ 31928 5fc5 A047     		.sleb128 -7264
+ 31929 5fc7 33       		.uleb128 0x33
+ 31930 5fc8 00000000 		.quad	.LBB2023
+ 31930      00000000 
+ 31931 5fd0 00000000 		.quad	.LBE2023
+ 31931      00000000 
+ 31932 5fd8 34       		.uleb128 0x34
+ 31933 5fd9 3F0F0000 		.long	0xf3f
+ 31934 5fdd 09       		.byte	0x9
+ 31935 5fde 03       		.byte	0x3
+ 31936 5fdf 00000000 		.quad	mask.7943
+ 31936      00000000 
+ 31937 5fe7 35       		.uleb128 0x35
+ 31938 5fe8 A00D0000 		.long	0xda0
+ 31939 5fec 00000000 		.quad	.LBB2024
+ 31939      00000000 
+ 31940 5ff4 00000000 		.quad	.LBE2024
+ 31940      00000000 
+ 31941 5ffc 02       		.byte	0x2
+ 31942 5ffd FE04     		.value	0x4fe
+ 31943 5fff 32       		.uleb128 0x32
+ 31944 6000 BE0D0000 		.long	0xdbe
+ 31945 6004 03       		.byte	0x3
+ 31946 6005 91       		.byte	0x91
+ 31947 6006 B047     		.sleb128 -7248
+ 31948 6008 32       		.uleb128 0x32
+ 31949 6009 B20D0000 		.long	0xdb2
+ 31950 600d 03       		.byte	0x3
+ 31951 600e 91       		.byte	0x91
+ 31952 600f C047     		.sleb128 -7232
+ 31953 6011 35       		.uleb128 0x35
+ 31954 6012 CB0D0000 		.long	0xdcb
+ 31955 6016 00000000 		.quad	.LBB2026
+ 31955      00000000 
+ 31956 601e 00000000 		.quad	.LBE2026
+ 31956      00000000 
+ 31957 6026 02       		.byte	0x2
+ 31958 6027 7501     		.value	0x175
+ 31959 6029 32       		.uleb128 0x32
+ 31960 602a E90D0000 		.long	0xde9
+ 31961 602e 03       		.byte	0x3
+ 31962 602f 91       		.byte	0x91
+ 31963 6030 D047     		.sleb128 -7216
+ 31964 6032 32       		.uleb128 0x32
+ 31965 6033 DD0D0000 		.long	0xddd
+ 31966 6037 03       		.byte	0x3
+ 31967 6038 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 853
+
+
+ 31968 6039 E047     		.sleb128 -7200
+ 31969 603b 00       		.byte	0x0
+ 31970 603c 00       		.byte	0x0
+ 31971 603d 00       		.byte	0x0
+ 31972 603e 00       		.byte	0x0
+ 31973 603f 31       		.uleb128 0x31
+ 31974 6040 210F0000 		.long	0xf21
+ 31975 6044 00000000 		.quad	.LBB2028
+ 31975      00000000 
+ 31976 604c 00000000 		.quad	.LBE2028
+ 31976      00000000 
+ 31977 6054 02       		.byte	0x2
+ 31978 6055 2006     		.value	0x620
+ 31979 6057 DC600000 		.long	0x60dc
+ 31980 605b 32       		.uleb128 0x32
+ 31981 605c 330F0000 		.long	0xf33
+ 31982 6060 03       		.byte	0x3
+ 31983 6061 91       		.byte	0x91
+ 31984 6062 F047     		.sleb128 -7184
+ 31985 6064 33       		.uleb128 0x33
+ 31986 6065 00000000 		.quad	.LBB2029
+ 31986      00000000 
+ 31987 606d 00000000 		.quad	.LBE2029
+ 31987      00000000 
+ 31988 6075 34       		.uleb128 0x34
+ 31989 6076 3F0F0000 		.long	0xf3f
+ 31990 607a 09       		.byte	0x9
+ 31991 607b 03       		.byte	0x3
+ 31992 607c 00000000 		.quad	mask.7943
+ 31992      00000000 
+ 31993 6084 35       		.uleb128 0x35
+ 31994 6085 A00D0000 		.long	0xda0
+ 31995 6089 00000000 		.quad	.LBB2030
+ 31995      00000000 
+ 31996 6091 00000000 		.quad	.LBE2030
+ 31996      00000000 
+ 31997 6099 02       		.byte	0x2
+ 31998 609a FE04     		.value	0x4fe
+ 31999 609c 32       		.uleb128 0x32
+ 32000 609d BE0D0000 		.long	0xdbe
+ 32001 60a1 03       		.byte	0x3
+ 32002 60a2 91       		.byte	0x91
+ 32003 60a3 8048     		.sleb128 -7168
+ 32004 60a5 32       		.uleb128 0x32
+ 32005 60a6 B20D0000 		.long	0xdb2
+ 32006 60aa 03       		.byte	0x3
+ 32007 60ab 91       		.byte	0x91
+ 32008 60ac 9048     		.sleb128 -7152
+ 32009 60ae 35       		.uleb128 0x35
+ 32010 60af CB0D0000 		.long	0xdcb
+ 32011 60b3 00000000 		.quad	.LBB2032
+ 32011      00000000 
+ 32012 60bb 00000000 		.quad	.LBE2032
+ 32012      00000000 
+ 32013 60c3 02       		.byte	0x2
+ 32014 60c4 7501     		.value	0x175
+ 32015 60c6 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 854
+
+
+ 32016 60c7 E90D0000 		.long	0xde9
+ 32017 60cb 03       		.byte	0x3
+ 32018 60cc 91       		.byte	0x91
+ 32019 60cd A048     		.sleb128 -7136
+ 32020 60cf 32       		.uleb128 0x32
+ 32021 60d0 DD0D0000 		.long	0xddd
+ 32022 60d4 03       		.byte	0x3
+ 32023 60d5 91       		.byte	0x91
+ 32024 60d6 B048     		.sleb128 -7120
+ 32025 60d8 00       		.byte	0x0
+ 32026 60d9 00       		.byte	0x0
+ 32027 60da 00       		.byte	0x0
+ 32028 60db 00       		.byte	0x0
+ 32029 60dc 35       		.uleb128 0x35
+ 32030 60dd 210F0000 		.long	0xf21
+ 32031 60e1 00000000 		.quad	.LBB2034
+ 32031      00000000 
+ 32032 60e9 00000000 		.quad	.LBE2034
+ 32032      00000000 
+ 32033 60f1 02       		.byte	0x2
+ 32034 60f2 2106     		.value	0x621
+ 32035 60f4 32       		.uleb128 0x32
+ 32036 60f5 330F0000 		.long	0xf33
+ 32037 60f9 03       		.byte	0x3
+ 32038 60fa 91       		.byte	0x91
+ 32039 60fb C048     		.sleb128 -7104
+ 32040 60fd 33       		.uleb128 0x33
+ 32041 60fe 00000000 		.quad	.LBB2035
+ 32041      00000000 
+ 32042 6106 00000000 		.quad	.LBE2035
+ 32042      00000000 
+ 32043 610e 34       		.uleb128 0x34
+ 32044 610f 3F0F0000 		.long	0xf3f
+ 32045 6113 09       		.byte	0x9
+ 32046 6114 03       		.byte	0x3
+ 32047 6115 00000000 		.quad	mask.7943
+ 32047      00000000 
+ 32048 611d 35       		.uleb128 0x35
+ 32049 611e A00D0000 		.long	0xda0
+ 32050 6122 00000000 		.quad	.LBB2036
+ 32050      00000000 
+ 32051 612a 00000000 		.quad	.LBE2036
+ 32051      00000000 
+ 32052 6132 02       		.byte	0x2
+ 32053 6133 FE04     		.value	0x4fe
+ 32054 6135 32       		.uleb128 0x32
+ 32055 6136 BE0D0000 		.long	0xdbe
+ 32056 613a 03       		.byte	0x3
+ 32057 613b 91       		.byte	0x91
+ 32058 613c D048     		.sleb128 -7088
+ 32059 613e 32       		.uleb128 0x32
+ 32060 613f B20D0000 		.long	0xdb2
+ 32061 6143 03       		.byte	0x3
+ 32062 6144 91       		.byte	0x91
+ 32063 6145 E048     		.sleb128 -7072
+ 32064 6147 35       		.uleb128 0x35
+ 32065 6148 CB0D0000 		.long	0xdcb
+
GAS LISTING /tmp/ccjbMjHD.s 			page 855
+
+
+ 32066 614c 00000000 		.quad	.LBB2038
+ 32066      00000000 
+ 32067 6154 00000000 		.quad	.LBE2038
+ 32067      00000000 
+ 32068 615c 02       		.byte	0x2
+ 32069 615d 7501     		.value	0x175
+ 32070 615f 32       		.uleb128 0x32
+ 32071 6160 E90D0000 		.long	0xde9
+ 32072 6164 03       		.byte	0x3
+ 32073 6165 91       		.byte	0x91
+ 32074 6166 F048     		.sleb128 -7056
+ 32075 6168 32       		.uleb128 0x32
+ 32076 6169 DD0D0000 		.long	0xddd
+ 32077 616d 03       		.byte	0x3
+ 32078 616e 91       		.byte	0x91
+ 32079 616f 8049     		.sleb128 -7040
+ 32080 6171 00       		.byte	0x0
+ 32081 6172 00       		.byte	0x0
+ 32082 6173 00       		.byte	0x0
+ 32083 6174 00       		.byte	0x0
+ 32084 6175 00       		.byte	0x0
+ 32085 6176 00       		.byte	0x0
+ 32086 6177 31       		.uleb128 0x31
+ 32087 6178 F60E0000 		.long	0xef6
+ 32088 617c 00000000 		.quad	.LBB2040
+ 32088      00000000 
+ 32089 6184 00000000 		.quad	.LBE2040
+ 32089      00000000 
+ 32090 618c 02       		.byte	0x2
+ 32091 618d 0B07     		.value	0x70b
+ 32092 618f 8C630000 		.long	0x638c
+ 32093 6193 32       		.uleb128 0x32
+ 32094 6194 080F0000 		.long	0xf08
+ 32095 6198 03       		.byte	0x3
+ 32096 6199 91       		.byte	0x91
+ 32097 619a 9049     		.sleb128 -7024
+ 32098 619c 33       		.uleb128 0x33
+ 32099 619d 00000000 		.quad	.LBB2041
+ 32099      00000000 
+ 32100 61a5 00000000 		.quad	.LBE2041
+ 32100      00000000 
+ 32101 61ad 34       		.uleb128 0x34
+ 32102 61ae 140F0000 		.long	0xf14
+ 32103 61b2 04       		.byte	0x4
+ 32104 61b3 76       		.byte	0x76
+ 32105 61b4 E0BA7F   		.sleb128 -8864
+ 32106 61b7 31       		.uleb128 0x31
+ 32107 61b8 210F0000 		.long	0xf21
+ 32108 61bc 00000000 		.quad	.LBB2042
+ 32108      00000000 
+ 32109 61c4 00000000 		.quad	.LBE2042
+ 32109      00000000 
+ 32110 61cc 02       		.byte	0x2
+ 32111 61cd 1F06     		.value	0x61f
+ 32112 61cf 54620000 		.long	0x6254
+ 32113 61d3 32       		.uleb128 0x32
+ 32114 61d4 330F0000 		.long	0xf33
+
GAS LISTING /tmp/ccjbMjHD.s 			page 856
+
+
+ 32115 61d8 03       		.byte	0x3
+ 32116 61d9 91       		.byte	0x91
+ 32117 61da A049     		.sleb128 -7008
+ 32118 61dc 33       		.uleb128 0x33
+ 32119 61dd 00000000 		.quad	.LBB2043
+ 32119      00000000 
+ 32120 61e5 00000000 		.quad	.LBE2043
+ 32120      00000000 
+ 32121 61ed 34       		.uleb128 0x34
+ 32122 61ee 3F0F0000 		.long	0xf3f
+ 32123 61f2 09       		.byte	0x9
+ 32124 61f3 03       		.byte	0x3
+ 32125 61f4 00000000 		.quad	mask.7943
+ 32125      00000000 
+ 32126 61fc 35       		.uleb128 0x35
+ 32127 61fd A00D0000 		.long	0xda0
+ 32128 6201 00000000 		.quad	.LBB2044
+ 32128      00000000 
+ 32129 6209 00000000 		.quad	.LBE2044
+ 32129      00000000 
+ 32130 6211 02       		.byte	0x2
+ 32131 6212 FE04     		.value	0x4fe
+ 32132 6214 32       		.uleb128 0x32
+ 32133 6215 BE0D0000 		.long	0xdbe
+ 32134 6219 03       		.byte	0x3
+ 32135 621a 91       		.byte	0x91
+ 32136 621b B049     		.sleb128 -6992
+ 32137 621d 32       		.uleb128 0x32
+ 32138 621e B20D0000 		.long	0xdb2
+ 32139 6222 03       		.byte	0x3
+ 32140 6223 91       		.byte	0x91
+ 32141 6224 C049     		.sleb128 -6976
+ 32142 6226 35       		.uleb128 0x35
+ 32143 6227 CB0D0000 		.long	0xdcb
+ 32144 622b 00000000 		.quad	.LBB2046
+ 32144      00000000 
+ 32145 6233 00000000 		.quad	.LBE2046
+ 32145      00000000 
+ 32146 623b 02       		.byte	0x2
+ 32147 623c 7501     		.value	0x175
+ 32148 623e 32       		.uleb128 0x32
+ 32149 623f E90D0000 		.long	0xde9
+ 32150 6243 03       		.byte	0x3
+ 32151 6244 91       		.byte	0x91
+ 32152 6245 D049     		.sleb128 -6960
+ 32153 6247 32       		.uleb128 0x32
+ 32154 6248 DD0D0000 		.long	0xddd
+ 32155 624c 03       		.byte	0x3
+ 32156 624d 91       		.byte	0x91
+ 32157 624e E049     		.sleb128 -6944
+ 32158 6250 00       		.byte	0x0
+ 32159 6251 00       		.byte	0x0
+ 32160 6252 00       		.byte	0x0
+ 32161 6253 00       		.byte	0x0
+ 32162 6254 31       		.uleb128 0x31
+ 32163 6255 210F0000 		.long	0xf21
+ 32164 6259 00000000 		.quad	.LBB2048
+
GAS LISTING /tmp/ccjbMjHD.s 			page 857
+
+
+ 32164      00000000 
+ 32165 6261 00000000 		.quad	.LBE2048
+ 32165      00000000 
+ 32166 6269 02       		.byte	0x2
+ 32167 626a 2006     		.value	0x620
+ 32168 626c F1620000 		.long	0x62f1
+ 32169 6270 32       		.uleb128 0x32
+ 32170 6271 330F0000 		.long	0xf33
+ 32171 6275 03       		.byte	0x3
+ 32172 6276 91       		.byte	0x91
+ 32173 6277 F049     		.sleb128 -6928
+ 32174 6279 33       		.uleb128 0x33
+ 32175 627a 00000000 		.quad	.LBB2049
+ 32175      00000000 
+ 32176 6282 00000000 		.quad	.LBE2049
+ 32176      00000000 
+ 32177 628a 34       		.uleb128 0x34
+ 32178 628b 3F0F0000 		.long	0xf3f
+ 32179 628f 09       		.byte	0x9
+ 32180 6290 03       		.byte	0x3
+ 32181 6291 00000000 		.quad	mask.7943
+ 32181      00000000 
+ 32182 6299 35       		.uleb128 0x35
+ 32183 629a A00D0000 		.long	0xda0
+ 32184 629e 00000000 		.quad	.LBB2050
+ 32184      00000000 
+ 32185 62a6 00000000 		.quad	.LBE2050
+ 32185      00000000 
+ 32186 62ae 02       		.byte	0x2
+ 32187 62af FE04     		.value	0x4fe
+ 32188 62b1 32       		.uleb128 0x32
+ 32189 62b2 BE0D0000 		.long	0xdbe
+ 32190 62b6 03       		.byte	0x3
+ 32191 62b7 91       		.byte	0x91
+ 32192 62b8 804A     		.sleb128 -6912
+ 32193 62ba 32       		.uleb128 0x32
+ 32194 62bb B20D0000 		.long	0xdb2
+ 32195 62bf 03       		.byte	0x3
+ 32196 62c0 91       		.byte	0x91
+ 32197 62c1 904A     		.sleb128 -6896
+ 32198 62c3 35       		.uleb128 0x35
+ 32199 62c4 CB0D0000 		.long	0xdcb
+ 32200 62c8 00000000 		.quad	.LBB2052
+ 32200      00000000 
+ 32201 62d0 00000000 		.quad	.LBE2052
+ 32201      00000000 
+ 32202 62d8 02       		.byte	0x2
+ 32203 62d9 7501     		.value	0x175
+ 32204 62db 32       		.uleb128 0x32
+ 32205 62dc E90D0000 		.long	0xde9
+ 32206 62e0 03       		.byte	0x3
+ 32207 62e1 91       		.byte	0x91
+ 32208 62e2 A04A     		.sleb128 -6880
+ 32209 62e4 32       		.uleb128 0x32
+ 32210 62e5 DD0D0000 		.long	0xddd
+ 32211 62e9 03       		.byte	0x3
+ 32212 62ea 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 858
+
+
+ 32213 62eb B04A     		.sleb128 -6864
+ 32214 62ed 00       		.byte	0x0
+ 32215 62ee 00       		.byte	0x0
+ 32216 62ef 00       		.byte	0x0
+ 32217 62f0 00       		.byte	0x0
+ 32218 62f1 35       		.uleb128 0x35
+ 32219 62f2 210F0000 		.long	0xf21
+ 32220 62f6 00000000 		.quad	.LBB2054
+ 32220      00000000 
+ 32221 62fe 00000000 		.quad	.LBE2054
+ 32221      00000000 
+ 32222 6306 02       		.byte	0x2
+ 32223 6307 2106     		.value	0x621
+ 32224 6309 32       		.uleb128 0x32
+ 32225 630a 330F0000 		.long	0xf33
+ 32226 630e 03       		.byte	0x3
+ 32227 630f 91       		.byte	0x91
+ 32228 6310 C04A     		.sleb128 -6848
+ 32229 6312 33       		.uleb128 0x33
+ 32230 6313 00000000 		.quad	.LBB2055
+ 32230      00000000 
+ 32231 631b 00000000 		.quad	.LBE2055
+ 32231      00000000 
+ 32232 6323 34       		.uleb128 0x34
+ 32233 6324 3F0F0000 		.long	0xf3f
+ 32234 6328 09       		.byte	0x9
+ 32235 6329 03       		.byte	0x3
+ 32236 632a 00000000 		.quad	mask.7943
+ 32236      00000000 
+ 32237 6332 35       		.uleb128 0x35
+ 32238 6333 A00D0000 		.long	0xda0
+ 32239 6337 00000000 		.quad	.LBB2056
+ 32239      00000000 
+ 32240 633f 00000000 		.quad	.LBE2056
+ 32240      00000000 
+ 32241 6347 02       		.byte	0x2
+ 32242 6348 FE04     		.value	0x4fe
+ 32243 634a 32       		.uleb128 0x32
+ 32244 634b BE0D0000 		.long	0xdbe
+ 32245 634f 03       		.byte	0x3
+ 32246 6350 91       		.byte	0x91
+ 32247 6351 D04A     		.sleb128 -6832
+ 32248 6353 32       		.uleb128 0x32
+ 32249 6354 B20D0000 		.long	0xdb2
+ 32250 6358 03       		.byte	0x3
+ 32251 6359 91       		.byte	0x91
+ 32252 635a E04A     		.sleb128 -6816
+ 32253 635c 35       		.uleb128 0x35
+ 32254 635d CB0D0000 		.long	0xdcb
+ 32255 6361 00000000 		.quad	.LBB2058
+ 32255      00000000 
+ 32256 6369 00000000 		.quad	.LBE2058
+ 32256      00000000 
+ 32257 6371 02       		.byte	0x2
+ 32258 6372 7501     		.value	0x175
+ 32259 6374 32       		.uleb128 0x32
+ 32260 6375 E90D0000 		.long	0xde9
+
GAS LISTING /tmp/ccjbMjHD.s 			page 859
+
+
+ 32261 6379 03       		.byte	0x3
+ 32262 637a 91       		.byte	0x91
+ 32263 637b F04A     		.sleb128 -6800
+ 32264 637d 32       		.uleb128 0x32
+ 32265 637e DD0D0000 		.long	0xddd
+ 32266 6382 03       		.byte	0x3
+ 32267 6383 91       		.byte	0x91
+ 32268 6384 804B     		.sleb128 -6784
+ 32269 6386 00       		.byte	0x0
+ 32270 6387 00       		.byte	0x0
+ 32271 6388 00       		.byte	0x0
+ 32272 6389 00       		.byte	0x0
+ 32273 638a 00       		.byte	0x0
+ 32274 638b 00       		.byte	0x0
+ 32275 638c 31       		.uleb128 0x31
+ 32276 638d D50B0000 		.long	0xbd5
+ 32277 6391 00000000 		.quad	.LBB2060
+ 32277      00000000 
+ 32278 6399 00000000 		.quad	.LBE2060
+ 32278      00000000 
+ 32279 63a1 02       		.byte	0x2
+ 32280 63a2 0C07     		.value	0x70c
+ 32281 63a4 6F680000 		.long	0x686f
+ 32282 63a8 32       		.uleb128 0x32
+ 32283 63a9 F30B0000 		.long	0xbf3
+ 32284 63ad 03       		.byte	0x3
+ 32285 63ae 91       		.byte	0x91
+ 32286 63af 9C4B     		.sleb128 -6756
+ 32287 63b1 32       		.uleb128 0x32
+ 32288 63b2 E70B0000 		.long	0xbe7
+ 32289 63b6 03       		.byte	0x3
+ 32290 63b7 91       		.byte	0x91
+ 32291 63b8 A04B     		.sleb128 -6752
+ 32292 63ba 33       		.uleb128 0x33
+ 32293 63bb 00000000 		.quad	.LBB2061
+ 32293      00000000 
+ 32294 63c3 00000000 		.quad	.LBE2061
+ 32294      00000000 
+ 32295 63cb 34       		.uleb128 0x34
+ 32296 63cc FF0B0000 		.long	0xbff
+ 32297 63d0 04       		.byte	0x4
+ 32298 63d1 76       		.byte	0x76
+ 32299 63d2 80BB7F   		.sleb128 -8832
+ 32300 63d5 34       		.uleb128 0x34
+ 32301 63d6 0B0C0000 		.long	0xc0b
+ 32302 63da 04       		.byte	0x4
+ 32303 63db 76       		.byte	0x76
+ 32304 63dc F0BA7F   		.sleb128 -8848
+ 32305 63df 31       		.uleb128 0x31
+ 32306 63e0 540C0000 		.long	0xc54
+ 32307 63e4 00000000 		.quad	.LBB2062
+ 32307      00000000 
+ 32308 63ec 00000000 		.quad	.LBE2062
+ 32308      00000000 
+ 32309 63f4 02       		.byte	0x2
+ 32310 63f5 9106     		.value	0x691
+ 32311 63f7 4B640000 		.long	0x644b
+
GAS LISTING /tmp/ccjbMjHD.s 			page 860
+
+
+ 32312 63fb 32       		.uleb128 0x32
+ 32313 63fc 7E0C0000 		.long	0xc7e
+ 32314 6400 03       		.byte	0x3
+ 32315 6401 91       		.byte	0x91
+ 32316 6402 B84B     		.sleb128 -6728
+ 32317 6404 32       		.uleb128 0x32
+ 32318 6405 720C0000 		.long	0xc72
+ 32319 6409 03       		.byte	0x3
+ 32320 640a 91       		.byte	0x91
+ 32321 640b BC4B     		.sleb128 -6724
+ 32322 640d 32       		.uleb128 0x32
+ 32323 640e 660C0000 		.long	0xc66
+ 32324 6412 03       		.byte	0x3
+ 32325 6413 91       		.byte	0x91
+ 32326 6414 C04B     		.sleb128 -6720
+ 32327 6416 35       		.uleb128 0x35
+ 32328 6417 8B0C0000 		.long	0xc8b
+ 32329 641b 00000000 		.quad	.LBB2064
+ 32329      00000000 
+ 32330 6423 00000000 		.quad	.LBE2064
+ 32330      00000000 
+ 32331 642b 02       		.byte	0x2
+ 32332 642c 0702     		.value	0x207
+ 32333 642e 32       		.uleb128 0x32
+ 32334 642f B40C0000 		.long	0xcb4
+ 32335 6433 03       		.byte	0x3
+ 32336 6434 91       		.byte	0x91
+ 32337 6435 D84B     		.sleb128 -6696
+ 32338 6437 32       		.uleb128 0x32
+ 32339 6438 A90C0000 		.long	0xca9
+ 32340 643c 03       		.byte	0x3
+ 32341 643d 91       		.byte	0x91
+ 32342 643e DC4B     		.sleb128 -6692
+ 32343 6440 32       		.uleb128 0x32
+ 32344 6441 9D0C0000 		.long	0xc9d
+ 32345 6445 03       		.byte	0x3
+ 32346 6446 91       		.byte	0x91
+ 32347 6447 E04B     		.sleb128 -6688
+ 32348 6449 00       		.byte	0x0
+ 32349 644a 00       		.byte	0x0
+ 32350 644b 31       		.uleb128 0x31
+ 32351 644c C10C0000 		.long	0xcc1
+ 32352 6450 00000000 		.quad	.LBB2066
+ 32352      00000000 
+ 32353 6458 00000000 		.quad	.LBE2066
+ 32353      00000000 
+ 32354 6460 02       		.byte	0x2
+ 32355 6461 9206     		.value	0x692
+ 32356 6463 D4660000 		.long	0x66d4
+ 32357 6467 32       		.uleb128 0x32
+ 32358 6468 D30C0000 		.long	0xcd3
+ 32359 646c 03       		.byte	0x3
+ 32360 646d 91       		.byte	0x91
+ 32361 646e F04B     		.sleb128 -6672
+ 32362 6470 35       		.uleb128 0x35
+ 32363 6471 E00C0000 		.long	0xce0
+ 32364 6475 00000000 		.quad	.LBB2068
+
GAS LISTING /tmp/ccjbMjHD.s 			page 861
+
+
+ 32364      00000000 
+ 32365 647d 00000000 		.quad	.LBE2068
+ 32365      00000000 
+ 32366 6485 02       		.byte	0x2
+ 32367 6486 7D03     		.value	0x37d
+ 32368 6488 32       		.uleb128 0x32
+ 32369 6489 FE0C0000 		.long	0xcfe
+ 32370 648d 03       		.byte	0x3
+ 32371 648e 91       		.byte	0x91
+ 32372 648f 884C     		.sleb128 -6648
+ 32373 6491 32       		.uleb128 0x32
+ 32374 6492 F20C0000 		.long	0xcf2
+ 32375 6496 03       		.byte	0x3
+ 32376 6497 91       		.byte	0x91
+ 32377 6498 904C     		.sleb128 -6640
+ 32378 649a 33       		.uleb128 0x33
+ 32379 649b 00000000 		.quad	.LBB2069
+ 32379      00000000 
+ 32380 64a3 00000000 		.quad	.LBE2069
+ 32380      00000000 
+ 32381 64ab 34       		.uleb128 0x34
+ 32382 64ac 0A0D0000 		.long	0xd0a
+ 32383 64b0 03       		.byte	0x3
+ 32384 64b1 91       		.byte	0x91
+ 32385 64b2 E04C     		.sleb128 -6560
+ 32386 64b4 34       		.uleb128 0x34
+ 32387 64b5 150D0000 		.long	0xd15
+ 32388 64b9 03       		.byte	0x3
+ 32389 64ba 91       		.byte	0x91
+ 32390 64bb D04C     		.sleb128 -6576
+ 32391 64bd 34       		.uleb128 0x34
+ 32392 64be 200D0000 		.long	0xd20
+ 32393 64c2 03       		.byte	0x3
+ 32394 64c3 91       		.byte	0x91
+ 32395 64c4 C04C     		.sleb128 -6592
+ 32396 64c6 34       		.uleb128 0x34
+ 32397 64c7 2C0D0000 		.long	0xd2c
+ 32398 64cb 03       		.byte	0x3
+ 32399 64cc 91       		.byte	0x91
+ 32400 64cd B04C     		.sleb128 -6608
+ 32401 64cf 34       		.uleb128 0x34
+ 32402 64d0 380D0000 		.long	0xd38
+ 32403 64d4 03       		.byte	0x3
+ 32404 64d5 91       		.byte	0x91
+ 32405 64d6 AC4C     		.sleb128 -6612
+ 32406 64d8 31       		.uleb128 0x31
+ 32407 64d9 4F0D0000 		.long	0xd4f
+ 32408 64dd 00000000 		.quad	.LBB2070
+ 32408      00000000 
+ 32409 64e5 00000000 		.quad	.LBE2070
+ 32409      00000000 
+ 32410 64ed 02       		.byte	0x2
+ 32411 64ee 5603     		.value	0x356
+ 32412 64f0 07650000 		.long	0x6507
+ 32413 64f4 32       		.uleb128 0x32
+ 32414 64f5 6A0D0000 		.long	0xd6a
+ 32415 64f9 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 862
+
+
+ 32416 64fa 91       		.byte	0x91
+ 32417 64fb F04C     		.sleb128 -6544
+ 32418 64fd 32       		.uleb128 0x32
+ 32419 64fe 600D0000 		.long	0xd60
+ 32420 6502 03       		.byte	0x3
+ 32421 6503 91       		.byte	0x91
+ 32422 6504 804D     		.sleb128 -6528
+ 32423 6506 00       		.byte	0x0
+ 32424 6507 31       		.uleb128 0x31
+ 32425 6508 750D0000 		.long	0xd75
+ 32426 650c 00000000 		.quad	.LBB2072
+ 32426      00000000 
+ 32427 6514 00000000 		.quad	.LBE2072
+ 32427      00000000 
+ 32428 651c 02       		.byte	0x2
+ 32429 651d 5903     		.value	0x359
+ 32430 651f 36650000 		.long	0x6536
+ 32431 6523 32       		.uleb128 0x32
+ 32432 6524 930D0000 		.long	0xd93
+ 32433 6528 03       		.byte	0x3
+ 32434 6529 91       		.byte	0x91
+ 32435 652a 9C4D     		.sleb128 -6500
+ 32436 652c 32       		.uleb128 0x32
+ 32437 652d 870D0000 		.long	0xd87
+ 32438 6531 03       		.byte	0x3
+ 32439 6532 91       		.byte	0x91
+ 32440 6533 A04D     		.sleb128 -6496
+ 32441 6535 00       		.byte	0x0
+ 32442 6536 31       		.uleb128 0x31
+ 32443 6537 4F0D0000 		.long	0xd4f
+ 32444 653b 00000000 		.quad	.LBB2074
+ 32444      00000000 
+ 32445 6543 00000000 		.quad	.LBE2074
+ 32445      00000000 
+ 32446 654b 02       		.byte	0x2
+ 32447 654c 5B03     		.value	0x35b
+ 32448 654e 65650000 		.long	0x6565
+ 32449 6552 32       		.uleb128 0x32
+ 32450 6553 6A0D0000 		.long	0xd6a
+ 32451 6557 03       		.byte	0x3
+ 32452 6558 91       		.byte	0x91
+ 32453 6559 B04D     		.sleb128 -6480
+ 32454 655b 32       		.uleb128 0x32
+ 32455 655c 600D0000 		.long	0xd60
+ 32456 6560 03       		.byte	0x3
+ 32457 6561 91       		.byte	0x91
+ 32458 6562 C04D     		.sleb128 -6464
+ 32459 6564 00       		.byte	0x0
+ 32460 6565 31       		.uleb128 0x31
+ 32461 6566 A00D0000 		.long	0xda0
+ 32462 656a 00000000 		.quad	.LBB2076
+ 32462      00000000 
+ 32463 6572 00000000 		.quad	.LBE2076
+ 32463      00000000 
+ 32464 657a 02       		.byte	0x2
+ 32465 657b 6403     		.value	0x364
+ 32466 657d BF650000 		.long	0x65bf
+
GAS LISTING /tmp/ccjbMjHD.s 			page 863
+
+
+ 32467 6581 32       		.uleb128 0x32
+ 32468 6582 BE0D0000 		.long	0xdbe
+ 32469 6586 03       		.byte	0x3
+ 32470 6587 91       		.byte	0x91
+ 32471 6588 D04D     		.sleb128 -6448
+ 32472 658a 32       		.uleb128 0x32
+ 32473 658b B20D0000 		.long	0xdb2
+ 32474 658f 03       		.byte	0x3
+ 32475 6590 91       		.byte	0x91
+ 32476 6591 E04D     		.sleb128 -6432
+ 32477 6593 35       		.uleb128 0x35
+ 32478 6594 CB0D0000 		.long	0xdcb
+ 32479 6598 00000000 		.quad	.LBB2078
+ 32479      00000000 
+ 32480 65a0 00000000 		.quad	.LBE2078
+ 32480      00000000 
+ 32481 65a8 02       		.byte	0x2
+ 32482 65a9 7501     		.value	0x175
+ 32483 65ab 32       		.uleb128 0x32
+ 32484 65ac E90D0000 		.long	0xde9
+ 32485 65b0 03       		.byte	0x3
+ 32486 65b1 91       		.byte	0x91
+ 32487 65b2 F04D     		.sleb128 -6416
+ 32488 65b4 32       		.uleb128 0x32
+ 32489 65b5 DD0D0000 		.long	0xddd
+ 32490 65b9 03       		.byte	0x3
+ 32491 65ba 91       		.byte	0x91
+ 32492 65bb 804E     		.sleb128 -6400
+ 32493 65bd 00       		.byte	0x0
+ 32494 65be 00       		.byte	0x0
+ 32495 65bf 31       		.uleb128 0x31
+ 32496 65c0 FB0D0000 		.long	0xdfb
+ 32497 65c4 00000000 		.quad	.LBB2080
+ 32497      00000000 
+ 32498 65cc 00000000 		.quad	.LBE2080
+ 32498      00000000 
+ 32499 65d4 02       		.byte	0x2
+ 32500 65d5 6603     		.value	0x366
+ 32501 65d7 EE650000 		.long	0x65ee
+ 32502 65db 32       		.uleb128 0x32
+ 32503 65dc 160E0000 		.long	0xe16
+ 32504 65e0 03       		.byte	0x3
+ 32505 65e1 91       		.byte	0x91
+ 32506 65e2 904E     		.sleb128 -6384
+ 32507 65e4 32       		.uleb128 0x32
+ 32508 65e5 0C0E0000 		.long	0xe0c
+ 32509 65e9 03       		.byte	0x3
+ 32510 65ea 91       		.byte	0x91
+ 32511 65eb A04E     		.sleb128 -6368
+ 32512 65ed 00       		.byte	0x0
+ 32513 65ee 31       		.uleb128 0x31
+ 32514 65ef A00D0000 		.long	0xda0
+ 32515 65f3 00000000 		.quad	.LBB2082
+ 32515      00000000 
+ 32516 65fb 00000000 		.quad	.LBE2082
+ 32516      00000000 
+ 32517 6603 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 864
+
+
+ 32518 6604 6803     		.value	0x368
+ 32519 6606 48660000 		.long	0x6648
+ 32520 660a 32       		.uleb128 0x32
+ 32521 660b BE0D0000 		.long	0xdbe
+ 32522 660f 03       		.byte	0x3
+ 32523 6610 91       		.byte	0x91
+ 32524 6611 B04E     		.sleb128 -6352
+ 32525 6613 32       		.uleb128 0x32
+ 32526 6614 B20D0000 		.long	0xdb2
+ 32527 6618 03       		.byte	0x3
+ 32528 6619 91       		.byte	0x91
+ 32529 661a C04E     		.sleb128 -6336
+ 32530 661c 35       		.uleb128 0x35
+ 32531 661d CB0D0000 		.long	0xdcb
+ 32532 6621 00000000 		.quad	.LBB2084
+ 32532      00000000 
+ 32533 6629 00000000 		.quad	.LBE2084
+ 32533      00000000 
+ 32534 6631 02       		.byte	0x2
+ 32535 6632 7501     		.value	0x175
+ 32536 6634 32       		.uleb128 0x32
+ 32537 6635 E90D0000 		.long	0xde9
+ 32538 6639 03       		.byte	0x3
+ 32539 663a 91       		.byte	0x91
+ 32540 663b D04E     		.sleb128 -6320
+ 32541 663d 32       		.uleb128 0x32
+ 32542 663e DD0D0000 		.long	0xddd
+ 32543 6642 03       		.byte	0x3
+ 32544 6643 91       		.byte	0x91
+ 32545 6644 E04E     		.sleb128 -6304
+ 32546 6646 00       		.byte	0x0
+ 32547 6647 00       		.byte	0x0
+ 32548 6648 31       		.uleb128 0x31
+ 32549 6649 FB0D0000 		.long	0xdfb
+ 32550 664d 00000000 		.quad	.LBB2086
+ 32550      00000000 
+ 32551 6655 00000000 		.quad	.LBE2086
+ 32551      00000000 
+ 32552 665d 02       		.byte	0x2
+ 32553 665e 6A03     		.value	0x36a
+ 32554 6660 77660000 		.long	0x6677
+ 32555 6664 32       		.uleb128 0x32
+ 32556 6665 160E0000 		.long	0xe16
+ 32557 6669 03       		.byte	0x3
+ 32558 666a 91       		.byte	0x91
+ 32559 666b F04E     		.sleb128 -6288
+ 32560 666d 32       		.uleb128 0x32
+ 32561 666e 0C0E0000 		.long	0xe0c
+ 32562 6672 03       		.byte	0x3
+ 32563 6673 91       		.byte	0x91
+ 32564 6674 804F     		.sleb128 -6272
+ 32565 6676 00       		.byte	0x0
+ 32566 6677 31       		.uleb128 0x31
+ 32567 6678 210E0000 		.long	0xe21
+ 32568 667c 00000000 		.quad	.LBB2088
+ 32568      00000000 
+ 32569 6684 00000000 		.quad	.LBE2088
+
GAS LISTING /tmp/ccjbMjHD.s 			page 865
+
+
+ 32569      00000000 
+ 32570 668c 02       		.byte	0x2
+ 32571 668d 6C03     		.value	0x36c
+ 32572 668f A6660000 		.long	0x66a6
+ 32573 6693 32       		.uleb128 0x32
+ 32574 6694 3E0E0000 		.long	0xe3e
+ 32575 6698 03       		.byte	0x3
+ 32576 6699 91       		.byte	0x91
+ 32577 669a 904F     		.sleb128 -6256
+ 32578 669c 32       		.uleb128 0x32
+ 32579 669d 330E0000 		.long	0xe33
+ 32580 66a1 03       		.byte	0x3
+ 32581 66a2 91       		.byte	0x91
+ 32582 66a3 A04F     		.sleb128 -6240
+ 32583 66a5 00       		.byte	0x0
+ 32584 66a6 35       		.uleb128 0x35
+ 32585 66a7 4F0D0000 		.long	0xd4f
+ 32586 66ab 00000000 		.quad	.LBB2090
+ 32586      00000000 
+ 32587 66b3 00000000 		.quad	.LBE2090
+ 32587      00000000 
+ 32588 66bb 02       		.byte	0x2
+ 32589 66bc 6E03     		.value	0x36e
+ 32590 66be 32       		.uleb128 0x32
+ 32591 66bf 6A0D0000 		.long	0xd6a
+ 32592 66c3 03       		.byte	0x3
+ 32593 66c4 91       		.byte	0x91
+ 32594 66c5 B04F     		.sleb128 -6224
+ 32595 66c7 32       		.uleb128 0x32
+ 32596 66c8 600D0000 		.long	0xd60
+ 32597 66cc 03       		.byte	0x3
+ 32598 66cd 91       		.byte	0x91
+ 32599 66ce C04F     		.sleb128 -6208
+ 32600 66d0 00       		.byte	0x0
+ 32601 66d1 00       		.byte	0x0
+ 32602 66d2 00       		.byte	0x0
+ 32603 66d3 00       		.byte	0x0
+ 32604 66d4 36       		.uleb128 0x36
+ 32605 66d5 00000000 		.quad	.LBB2092
+ 32605      00000000 
+ 32606 66dd 00000000 		.quad	.LBE2092
+ 32606      00000000 
+ 32607 66e5 F4660000 		.long	0x66f4
+ 32608 66e9 34       		.uleb128 0x34
+ 32609 66ea 1C0C0000 		.long	0xc1c
+ 32610 66ee 04       		.byte	0x4
+ 32611 66ef 91       		.byte	0x91
+ 32612 66f0 F0BD7F   		.sleb128 -8464
+ 32613 66f3 00       		.byte	0x0
+ 32614 66f4 31       		.uleb128 0x31
+ 32615 66f5 4A0E0000 		.long	0xe4a
+ 32616 66f9 00000000 		.quad	.LBB2093
+ 32616      00000000 
+ 32617 6701 00000000 		.quad	.LBE2093
+ 32617      00000000 
+ 32618 6709 02       		.byte	0x2
+ 32619 670a 9406     		.value	0x694
+
GAS LISTING /tmp/ccjbMjHD.s 			page 866
+
+
+ 32620 670c 91670000 		.long	0x6791
+ 32621 6710 32       		.uleb128 0x32
+ 32622 6711 5C0E0000 		.long	0xe5c
+ 32623 6715 03       		.byte	0x3
+ 32624 6716 91       		.byte	0x91
+ 32625 6717 D04F     		.sleb128 -6192
+ 32626 6719 33       		.uleb128 0x33
+ 32627 671a 00000000 		.quad	.LBB2094
+ 32627      00000000 
+ 32628 6722 00000000 		.quad	.LBE2094
+ 32628      00000000 
+ 32629 672a 34       		.uleb128 0x34
+ 32630 672b 680E0000 		.long	0xe68
+ 32631 672f 09       		.byte	0x9
+ 32632 6730 03       		.byte	0x3
+ 32633 6731 00000000 		.quad	ShiftRowTable.7385
+ 32633      00000000 
+ 32634 6739 35       		.uleb128 0x35
+ 32635 673a A00D0000 		.long	0xda0
+ 32636 673e 00000000 		.quad	.LBB2095
+ 32636      00000000 
+ 32637 6746 00000000 		.quad	.LBE2095
+ 32637      00000000 
+ 32638 674e 02       		.byte	0x2
+ 32639 674f 9B02     		.value	0x29b
+ 32640 6751 32       		.uleb128 0x32
+ 32641 6752 BE0D0000 		.long	0xdbe
+ 32642 6756 03       		.byte	0x3
+ 32643 6757 91       		.byte	0x91
+ 32644 6758 E04F     		.sleb128 -6176
+ 32645 675a 32       		.uleb128 0x32
+ 32646 675b B20D0000 		.long	0xdb2
+ 32647 675f 03       		.byte	0x3
+ 32648 6760 91       		.byte	0x91
+ 32649 6761 F04F     		.sleb128 -6160
+ 32650 6763 35       		.uleb128 0x35
+ 32651 6764 CB0D0000 		.long	0xdcb
+ 32652 6768 00000000 		.quad	.LBB2097
+ 32652      00000000 
+ 32653 6770 00000000 		.quad	.LBE2097
+ 32653      00000000 
+ 32654 6778 02       		.byte	0x2
+ 32655 6779 7501     		.value	0x175
+ 32656 677b 32       		.uleb128 0x32
+ 32657 677c E90D0000 		.long	0xde9
+ 32658 6780 03       		.byte	0x3
+ 32659 6781 91       		.byte	0x91
+ 32660 6782 8050     		.sleb128 -6144
+ 32661 6784 32       		.uleb128 0x32
+ 32662 6785 DD0D0000 		.long	0xddd
+ 32663 6789 03       		.byte	0x3
+ 32664 678a 91       		.byte	0x91
+ 32665 678b 9050     		.sleb128 -6128
+ 32666 678d 00       		.byte	0x0
+ 32667 678e 00       		.byte	0x0
+ 32668 678f 00       		.byte	0x0
+ 32669 6790 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 867
+
+
+ 32670 6791 36       		.uleb128 0x36
+ 32671 6792 00000000 		.quad	.LBB2099
+ 32671      00000000 
+ 32672 679a 00000000 		.quad	.LBE2099
+ 32672      00000000 
+ 32673 67a2 B1670000 		.long	0x67b1
+ 32674 67a6 34       		.uleb128 0x34
+ 32675 67a7 2C0C0000 		.long	0xc2c
+ 32676 67ab 04       		.byte	0x4
+ 32677 67ac 91       		.byte	0x91
+ 32678 67ad E0BD7F   		.sleb128 -8480
+ 32679 67b0 00       		.byte	0x0
+ 32680 67b1 31       		.uleb128 0x31
+ 32681 67b2 860E0000 		.long	0xe86
+ 32682 67b6 00000000 		.quad	.LBB2100
+ 32682      00000000 
+ 32683 67be 00000000 		.quad	.LBE2100
+ 32683      00000000 
+ 32684 67c6 02       		.byte	0x2
+ 32685 67c7 9606     		.value	0x696
+ 32686 67c9 E0670000 		.long	0x67e0
+ 32687 67cd 32       		.uleb128 0x32
+ 32688 67ce A10E0000 		.long	0xea1
+ 32689 67d2 03       		.byte	0x3
+ 32690 67d3 91       		.byte	0x91
+ 32691 67d4 A050     		.sleb128 -6112
+ 32692 67d6 32       		.uleb128 0x32
+ 32693 67d7 970E0000 		.long	0xe97
+ 32694 67db 03       		.byte	0x3
+ 32695 67dc 91       		.byte	0x91
+ 32696 67dd B050     		.sleb128 -6096
+ 32697 67df 00       		.byte	0x0
+ 32698 67e0 36       		.uleb128 0x36
+ 32699 67e1 00000000 		.quad	.LBB2102
+ 32699      00000000 
+ 32700 67e9 00000000 		.quad	.LBE2102
+ 32700      00000000 
+ 32701 67f1 00680000 		.long	0x6800
+ 32702 67f5 34       		.uleb128 0x34
+ 32703 67f6 3C0C0000 		.long	0xc3c
+ 32704 67fa 04       		.byte	0x4
+ 32705 67fb 91       		.byte	0x91
+ 32706 67fc D0BD7F   		.sleb128 -8496
+ 32707 67ff 00       		.byte	0x0
+ 32708 6800 31       		.uleb128 0x31
+ 32709 6801 AC0E0000 		.long	0xeac
+ 32710 6805 00000000 		.quad	.LBB2103
+ 32710      00000000 
+ 32711 680d 00000000 		.quad	.LBE2103
+ 32711      00000000 
+ 32712 6815 02       		.byte	0x2
+ 32713 6816 9806     		.value	0x698
+ 32714 6818 51680000 		.long	0x6851
+ 32715 681c 32       		.uleb128 0x32
+ 32716 681d BE0E0000 		.long	0xebe
+ 32717 6821 03       		.byte	0x3
+ 32718 6822 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 868
+
+
+ 32719 6823 C050     		.sleb128 -6080
+ 32720 6825 35       		.uleb128 0x35
+ 32721 6826 CB0E0000 		.long	0xecb
+ 32722 682a 00000000 		.quad	.LBB2105
+ 32722      00000000 
+ 32723 6832 00000000 		.quad	.LBE2105
+ 32723      00000000 
+ 32724 683a 02       		.byte	0x2
+ 32725 683b 4905     		.value	0x549
+ 32726 683d 32       		.uleb128 0x32
+ 32727 683e E90E0000 		.long	0xee9
+ 32728 6842 03       		.byte	0x3
+ 32729 6843 91       		.byte	0x91
+ 32730 6844 DC50     		.sleb128 -6052
+ 32731 6846 32       		.uleb128 0x32
+ 32732 6847 DD0E0000 		.long	0xedd
+ 32733 684b 03       		.byte	0x3
+ 32734 684c 91       		.byte	0x91
+ 32735 684d E050     		.sleb128 -6048
+ 32736 684f 00       		.byte	0x0
+ 32737 6850 00       		.byte	0x0
+ 32738 6851 33       		.uleb128 0x33
+ 32739 6852 00000000 		.quad	.LBB2107
+ 32739      00000000 
+ 32740 685a 00000000 		.quad	.LBE2107
+ 32740      00000000 
+ 32741 6862 34       		.uleb128 0x34
+ 32742 6863 480C0000 		.long	0xc48
+ 32743 6867 04       		.byte	0x4
+ 32744 6868 91       		.byte	0x91
+ 32745 6869 C0BD7F   		.sleb128 -8512
+ 32746 686c 00       		.byte	0x0
+ 32747 686d 00       		.byte	0x0
+ 32748 686e 00       		.byte	0x0
+ 32749 686f 31       		.uleb128 0x31
+ 32750 6870 AC0E0000 		.long	0xeac
+ 32751 6874 00000000 		.quad	.LBB2108
+ 32751      00000000 
+ 32752 687c 00000000 		.quad	.LBE2108
+ 32752      00000000 
+ 32753 6884 02       		.byte	0x2
+ 32754 6885 1007     		.value	0x710
+ 32755 6887 C0680000 		.long	0x68c0
+ 32756 688b 32       		.uleb128 0x32
+ 32757 688c BE0E0000 		.long	0xebe
+ 32758 6890 03       		.byte	0x3
+ 32759 6891 91       		.byte	0x91
+ 32760 6892 F050     		.sleb128 -6032
+ 32761 6894 35       		.uleb128 0x35
+ 32762 6895 CB0E0000 		.long	0xecb
+ 32763 6899 00000000 		.quad	.LBB2110
+ 32763      00000000 
+ 32764 68a1 00000000 		.quad	.LBE2110
+ 32764      00000000 
+ 32765 68a9 02       		.byte	0x2
+ 32766 68aa 4905     		.value	0x549
+ 32767 68ac 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 869
+
+
+ 32768 68ad E90E0000 		.long	0xee9
+ 32769 68b1 03       		.byte	0x3
+ 32770 68b2 91       		.byte	0x91
+ 32771 68b3 8C51     		.sleb128 -6004
+ 32772 68b5 32       		.uleb128 0x32
+ 32773 68b6 DD0E0000 		.long	0xedd
+ 32774 68ba 03       		.byte	0x3
+ 32775 68bb 91       		.byte	0x91
+ 32776 68bc 9051     		.sleb128 -6000
+ 32777 68be 00       		.byte	0x0
+ 32778 68bf 00       		.byte	0x0
+ 32779 68c0 31       		.uleb128 0x31
+ 32780 68c1 71560000 		.long	0x5671
+ 32781 68c5 00000000 		.quad	.LBB2112
+ 32781      00000000 
+ 32782 68cd 00000000 		.quad	.LBE2112
+ 32782      00000000 
+ 32783 68d5 02       		.byte	0x2
+ 32784 68d6 1707     		.value	0x717
+ 32785 68d8 8A690000 		.long	0x698a
+ 32786 68dc 32       		.uleb128 0x32
+ 32787 68dd 8F560000 		.long	0x568f
+ 32788 68e1 03       		.byte	0x3
+ 32789 68e2 91       		.byte	0x91
+ 32790 68e3 AC51     		.sleb128 -5972
+ 32791 68e5 32       		.uleb128 0x32
+ 32792 68e6 83560000 		.long	0x5683
+ 32793 68ea 03       		.byte	0x3
+ 32794 68eb 91       		.byte	0x91
+ 32795 68ec B051     		.sleb128 -5968
+ 32796 68ee 33       		.uleb128 0x33
+ 32797 68ef 00000000 		.quad	.LBB2113
+ 32797      00000000 
+ 32798 68f7 00000000 		.quad	.LBE2113
+ 32798      00000000 
+ 32799 68ff 34       		.uleb128 0x34
+ 32800 6900 9B560000 		.long	0x569b
+ 32801 6904 04       		.byte	0x4
+ 32802 6905 91       		.byte	0x91
+ 32803 6906 90BE7F   		.sleb128 -8432
+ 32804 6909 34       		.uleb128 0x34
+ 32805 690a A5560000 		.long	0x56a5
+ 32806 690e 03       		.byte	0x3
+ 32807 690f 91       		.byte	0x91
+ 32808 6910 D051     		.sleb128 -5936
+ 32809 6912 34       		.uleb128 0x34
+ 32810 6913 B1560000 		.long	0x56b1
+ 32811 6917 03       		.byte	0x3
+ 32812 6918 91       		.byte	0x91
+ 32813 6919 CC51     		.sleb128 -5940
+ 32814 691b 31       		.uleb128 0x31
+ 32815 691c BE560000 		.long	0x56be
+ 32816 6920 00000000 		.quad	.LBB2114
+ 32816      00000000 
+ 32817 6928 00000000 		.quad	.LBE2114
+ 32817      00000000 
+ 32818 6930 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 870
+
+
+ 32819 6931 5F06     		.value	0x65f
+ 32820 6933 66690000 		.long	0x6966
+ 32821 6937 32       		.uleb128 0x32
+ 32822 6938 D0560000 		.long	0x56d0
+ 32823 693c 03       		.byte	0x3
+ 32824 693d 91       		.byte	0x91
+ 32825 693e D451     		.sleb128 -5932
+ 32826 6940 33       		.uleb128 0x33
+ 32827 6941 00000000 		.quad	.LBB2115
+ 32827      00000000 
+ 32828 6949 00000000 		.quad	.LBE2115
+ 32828      00000000 
+ 32829 6951 34       		.uleb128 0x34
+ 32830 6952 DA560000 		.long	0x56da
+ 32831 6956 04       		.byte	0x4
+ 32832 6957 91       		.byte	0x91
+ 32833 6958 80BE7F   		.sleb128 -8448
+ 32834 695b 34       		.uleb128 0x34
+ 32835 695c E6560000 		.long	0x56e6
+ 32836 6960 03       		.byte	0x3
+ 32837 6961 91       		.byte	0x91
+ 32838 6962 D851     		.sleb128 -5928
+ 32839 6964 00       		.byte	0x0
+ 32840 6965 00       		.byte	0x0
+ 32841 6966 35       		.uleb128 0x35
+ 32842 6967 F2560000 		.long	0x56f2
+ 32843 696b 00000000 		.quad	.LBB2116
+ 32843      00000000 
+ 32844 6973 00000000 		.quad	.LBE2116
+ 32844      00000000 
+ 32845 697b 02       		.byte	0x2
+ 32846 697c 6006     		.value	0x660
+ 32847 697e 32       		.uleb128 0x32
+ 32848 697f 04570000 		.long	0x5704
+ 32849 6983 03       		.byte	0x3
+ 32850 6984 91       		.byte	0x91
+ 32851 6985 DC51     		.sleb128 -5924
+ 32852 6987 00       		.byte	0x0
+ 32853 6988 00       		.byte	0x0
+ 32854 6989 00       		.byte	0x0
+ 32855 698a 31       		.uleb128 0x31
+ 32856 698b F60E0000 		.long	0xef6
+ 32857 698f 00000000 		.quad	.LBB2118
+ 32857      00000000 
+ 32858 6997 00000000 		.quad	.LBE2118
+ 32858      00000000 
+ 32859 699f 02       		.byte	0x2
+ 32860 69a0 1907     		.value	0x719
+ 32861 69a2 9F6B0000 		.long	0x6b9f
+ 32862 69a6 32       		.uleb128 0x32
+ 32863 69a7 080F0000 		.long	0xf08
+ 32864 69ab 03       		.byte	0x3
+ 32865 69ac 91       		.byte	0x91
+ 32866 69ad E051     		.sleb128 -5920
+ 32867 69af 33       		.uleb128 0x33
+ 32868 69b0 00000000 		.quad	.LBB2119
+ 32868      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 871
+
+
+ 32869 69b8 00000000 		.quad	.LBE2119
+ 32869      00000000 
+ 32870 69c0 34       		.uleb128 0x34
+ 32871 69c1 140F0000 		.long	0xf14
+ 32872 69c5 04       		.byte	0x4
+ 32873 69c6 76       		.byte	0x76
+ 32874 69c7 90BB7F   		.sleb128 -8816
+ 32875 69ca 31       		.uleb128 0x31
+ 32876 69cb 210F0000 		.long	0xf21
+ 32877 69cf 00000000 		.quad	.LBB2120
+ 32877      00000000 
+ 32878 69d7 00000000 		.quad	.LBE2120
+ 32878      00000000 
+ 32879 69df 02       		.byte	0x2
+ 32880 69e0 1F06     		.value	0x61f
+ 32881 69e2 676A0000 		.long	0x6a67
+ 32882 69e6 32       		.uleb128 0x32
+ 32883 69e7 330F0000 		.long	0xf33
+ 32884 69eb 03       		.byte	0x3
+ 32885 69ec 91       		.byte	0x91
+ 32886 69ed F051     		.sleb128 -5904
+ 32887 69ef 33       		.uleb128 0x33
+ 32888 69f0 00000000 		.quad	.LBB2121
+ 32888      00000000 
+ 32889 69f8 00000000 		.quad	.LBE2121
+ 32889      00000000 
+ 32890 6a00 34       		.uleb128 0x34
+ 32891 6a01 3F0F0000 		.long	0xf3f
+ 32892 6a05 09       		.byte	0x9
+ 32893 6a06 03       		.byte	0x3
+ 32894 6a07 00000000 		.quad	mask.7943
+ 32894      00000000 
+ 32895 6a0f 35       		.uleb128 0x35
+ 32896 6a10 A00D0000 		.long	0xda0
+ 32897 6a14 00000000 		.quad	.LBB2122
+ 32897      00000000 
+ 32898 6a1c 00000000 		.quad	.LBE2122
+ 32898      00000000 
+ 32899 6a24 02       		.byte	0x2
+ 32900 6a25 FE04     		.value	0x4fe
+ 32901 6a27 32       		.uleb128 0x32
+ 32902 6a28 BE0D0000 		.long	0xdbe
+ 32903 6a2c 03       		.byte	0x3
+ 32904 6a2d 91       		.byte	0x91
+ 32905 6a2e 8052     		.sleb128 -5888
+ 32906 6a30 32       		.uleb128 0x32
+ 32907 6a31 B20D0000 		.long	0xdb2
+ 32908 6a35 03       		.byte	0x3
+ 32909 6a36 91       		.byte	0x91
+ 32910 6a37 9052     		.sleb128 -5872
+ 32911 6a39 35       		.uleb128 0x35
+ 32912 6a3a CB0D0000 		.long	0xdcb
+ 32913 6a3e 00000000 		.quad	.LBB2124
+ 32913      00000000 
+ 32914 6a46 00000000 		.quad	.LBE2124
+ 32914      00000000 
+ 32915 6a4e 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 872
+
+
+ 32916 6a4f 7501     		.value	0x175
+ 32917 6a51 32       		.uleb128 0x32
+ 32918 6a52 E90D0000 		.long	0xde9
+ 32919 6a56 03       		.byte	0x3
+ 32920 6a57 91       		.byte	0x91
+ 32921 6a58 A052     		.sleb128 -5856
+ 32922 6a5a 32       		.uleb128 0x32
+ 32923 6a5b DD0D0000 		.long	0xddd
+ 32924 6a5f 03       		.byte	0x3
+ 32925 6a60 91       		.byte	0x91
+ 32926 6a61 B052     		.sleb128 -5840
+ 32927 6a63 00       		.byte	0x0
+ 32928 6a64 00       		.byte	0x0
+ 32929 6a65 00       		.byte	0x0
+ 32930 6a66 00       		.byte	0x0
+ 32931 6a67 31       		.uleb128 0x31
+ 32932 6a68 210F0000 		.long	0xf21
+ 32933 6a6c 00000000 		.quad	.LBB2126
+ 32933      00000000 
+ 32934 6a74 00000000 		.quad	.LBE2126
+ 32934      00000000 
+ 32935 6a7c 02       		.byte	0x2
+ 32936 6a7d 2006     		.value	0x620
+ 32937 6a7f 046B0000 		.long	0x6b04
+ 32938 6a83 32       		.uleb128 0x32
+ 32939 6a84 330F0000 		.long	0xf33
+ 32940 6a88 03       		.byte	0x3
+ 32941 6a89 91       		.byte	0x91
+ 32942 6a8a C052     		.sleb128 -5824
+ 32943 6a8c 33       		.uleb128 0x33
+ 32944 6a8d 00000000 		.quad	.LBB2127
+ 32944      00000000 
+ 32945 6a95 00000000 		.quad	.LBE2127
+ 32945      00000000 
+ 32946 6a9d 34       		.uleb128 0x34
+ 32947 6a9e 3F0F0000 		.long	0xf3f
+ 32948 6aa2 09       		.byte	0x9
+ 32949 6aa3 03       		.byte	0x3
+ 32950 6aa4 00000000 		.quad	mask.7943
+ 32950      00000000 
+ 32951 6aac 35       		.uleb128 0x35
+ 32952 6aad A00D0000 		.long	0xda0
+ 32953 6ab1 00000000 		.quad	.LBB2128
+ 32953      00000000 
+ 32954 6ab9 00000000 		.quad	.LBE2128
+ 32954      00000000 
+ 32955 6ac1 02       		.byte	0x2
+ 32956 6ac2 FE04     		.value	0x4fe
+ 32957 6ac4 32       		.uleb128 0x32
+ 32958 6ac5 BE0D0000 		.long	0xdbe
+ 32959 6ac9 03       		.byte	0x3
+ 32960 6aca 91       		.byte	0x91
+ 32961 6acb D052     		.sleb128 -5808
+ 32962 6acd 32       		.uleb128 0x32
+ 32963 6ace B20D0000 		.long	0xdb2
+ 32964 6ad2 03       		.byte	0x3
+ 32965 6ad3 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 873
+
+
+ 32966 6ad4 E052     		.sleb128 -5792
+ 32967 6ad6 35       		.uleb128 0x35
+ 32968 6ad7 CB0D0000 		.long	0xdcb
+ 32969 6adb 00000000 		.quad	.LBB2130
+ 32969      00000000 
+ 32970 6ae3 00000000 		.quad	.LBE2130
+ 32970      00000000 
+ 32971 6aeb 02       		.byte	0x2
+ 32972 6aec 7501     		.value	0x175
+ 32973 6aee 32       		.uleb128 0x32
+ 32974 6aef E90D0000 		.long	0xde9
+ 32975 6af3 03       		.byte	0x3
+ 32976 6af4 91       		.byte	0x91
+ 32977 6af5 F052     		.sleb128 -5776
+ 32978 6af7 32       		.uleb128 0x32
+ 32979 6af8 DD0D0000 		.long	0xddd
+ 32980 6afc 03       		.byte	0x3
+ 32981 6afd 91       		.byte	0x91
+ 32982 6afe 8053     		.sleb128 -5760
+ 32983 6b00 00       		.byte	0x0
+ 32984 6b01 00       		.byte	0x0
+ 32985 6b02 00       		.byte	0x0
+ 32986 6b03 00       		.byte	0x0
+ 32987 6b04 35       		.uleb128 0x35
+ 32988 6b05 210F0000 		.long	0xf21
+ 32989 6b09 00000000 		.quad	.LBB2132
+ 32989      00000000 
+ 32990 6b11 00000000 		.quad	.LBE2132
+ 32990      00000000 
+ 32991 6b19 02       		.byte	0x2
+ 32992 6b1a 2106     		.value	0x621
+ 32993 6b1c 32       		.uleb128 0x32
+ 32994 6b1d 330F0000 		.long	0xf33
+ 32995 6b21 03       		.byte	0x3
+ 32996 6b22 91       		.byte	0x91
+ 32997 6b23 9053     		.sleb128 -5744
+ 32998 6b25 33       		.uleb128 0x33
+ 32999 6b26 00000000 		.quad	.LBB2133
+ 32999      00000000 
+ 33000 6b2e 00000000 		.quad	.LBE2133
+ 33000      00000000 
+ 33001 6b36 34       		.uleb128 0x34
+ 33002 6b37 3F0F0000 		.long	0xf3f
+ 33003 6b3b 09       		.byte	0x9
+ 33004 6b3c 03       		.byte	0x3
+ 33005 6b3d 00000000 		.quad	mask.7943
+ 33005      00000000 
+ 33006 6b45 35       		.uleb128 0x35
+ 33007 6b46 A00D0000 		.long	0xda0
+ 33008 6b4a 00000000 		.quad	.LBB2134
+ 33008      00000000 
+ 33009 6b52 00000000 		.quad	.LBE2134
+ 33009      00000000 
+ 33010 6b5a 02       		.byte	0x2
+ 33011 6b5b FE04     		.value	0x4fe
+ 33012 6b5d 32       		.uleb128 0x32
+ 33013 6b5e BE0D0000 		.long	0xdbe
+
GAS LISTING /tmp/ccjbMjHD.s 			page 874
+
+
+ 33014 6b62 03       		.byte	0x3
+ 33015 6b63 91       		.byte	0x91
+ 33016 6b64 A053     		.sleb128 -5728
+ 33017 6b66 32       		.uleb128 0x32
+ 33018 6b67 B20D0000 		.long	0xdb2
+ 33019 6b6b 03       		.byte	0x3
+ 33020 6b6c 91       		.byte	0x91
+ 33021 6b6d B053     		.sleb128 -5712
+ 33022 6b6f 35       		.uleb128 0x35
+ 33023 6b70 CB0D0000 		.long	0xdcb
+ 33024 6b74 00000000 		.quad	.LBB2136
+ 33024      00000000 
+ 33025 6b7c 00000000 		.quad	.LBE2136
+ 33025      00000000 
+ 33026 6b84 02       		.byte	0x2
+ 33027 6b85 7501     		.value	0x175
+ 33028 6b87 32       		.uleb128 0x32
+ 33029 6b88 E90D0000 		.long	0xde9
+ 33030 6b8c 03       		.byte	0x3
+ 33031 6b8d 91       		.byte	0x91
+ 33032 6b8e C053     		.sleb128 -5696
+ 33033 6b90 32       		.uleb128 0x32
+ 33034 6b91 DD0D0000 		.long	0xddd
+ 33035 6b95 03       		.byte	0x3
+ 33036 6b96 91       		.byte	0x91
+ 33037 6b97 D053     		.sleb128 -5680
+ 33038 6b99 00       		.byte	0x0
+ 33039 6b9a 00       		.byte	0x0
+ 33040 6b9b 00       		.byte	0x0
+ 33041 6b9c 00       		.byte	0x0
+ 33042 6b9d 00       		.byte	0x0
+ 33043 6b9e 00       		.byte	0x0
+ 33044 6b9f 31       		.uleb128 0x31
+ 33045 6ba0 F60E0000 		.long	0xef6
+ 33046 6ba4 00000000 		.quad	.LBB2138
+ 33046      00000000 
+ 33047 6bac 00000000 		.quad	.LBE2138
+ 33047      00000000 
+ 33048 6bb4 02       		.byte	0x2
+ 33049 6bb5 1B07     		.value	0x71b
+ 33050 6bb7 B46D0000 		.long	0x6db4
+ 33051 6bbb 32       		.uleb128 0x32
+ 33052 6bbc 080F0000 		.long	0xf08
+ 33053 6bc0 03       		.byte	0x3
+ 33054 6bc1 91       		.byte	0x91
+ 33055 6bc2 E053     		.sleb128 -5664
+ 33056 6bc4 33       		.uleb128 0x33
+ 33057 6bc5 00000000 		.quad	.LBB2139
+ 33057      00000000 
+ 33058 6bcd 00000000 		.quad	.LBE2139
+ 33058      00000000 
+ 33059 6bd5 34       		.uleb128 0x34
+ 33060 6bd6 140F0000 		.long	0xf14
+ 33061 6bda 04       		.byte	0x4
+ 33062 6bdb 76       		.byte	0x76
+ 33063 6bdc A0BB7F   		.sleb128 -8800
+ 33064 6bdf 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s 			page 875
+
+
+ 33065 6be0 210F0000 		.long	0xf21
+ 33066 6be4 00000000 		.quad	.LBB2140
+ 33066      00000000 
+ 33067 6bec 00000000 		.quad	.LBE2140
+ 33067      00000000 
+ 33068 6bf4 02       		.byte	0x2
+ 33069 6bf5 1F06     		.value	0x61f
+ 33070 6bf7 7C6C0000 		.long	0x6c7c
+ 33071 6bfb 32       		.uleb128 0x32
+ 33072 6bfc 330F0000 		.long	0xf33
+ 33073 6c00 03       		.byte	0x3
+ 33074 6c01 91       		.byte	0x91
+ 33075 6c02 F053     		.sleb128 -5648
+ 33076 6c04 33       		.uleb128 0x33
+ 33077 6c05 00000000 		.quad	.LBB2141
+ 33077      00000000 
+ 33078 6c0d 00000000 		.quad	.LBE2141
+ 33078      00000000 
+ 33079 6c15 34       		.uleb128 0x34
+ 33080 6c16 3F0F0000 		.long	0xf3f
+ 33081 6c1a 09       		.byte	0x9
+ 33082 6c1b 03       		.byte	0x3
+ 33083 6c1c 00000000 		.quad	mask.7943
+ 33083      00000000 
+ 33084 6c24 35       		.uleb128 0x35
+ 33085 6c25 A00D0000 		.long	0xda0
+ 33086 6c29 00000000 		.quad	.LBB2142
+ 33086      00000000 
+ 33087 6c31 00000000 		.quad	.LBE2142
+ 33087      00000000 
+ 33088 6c39 02       		.byte	0x2
+ 33089 6c3a FE04     		.value	0x4fe
+ 33090 6c3c 32       		.uleb128 0x32
+ 33091 6c3d BE0D0000 		.long	0xdbe
+ 33092 6c41 03       		.byte	0x3
+ 33093 6c42 91       		.byte	0x91
+ 33094 6c43 8054     		.sleb128 -5632
+ 33095 6c45 32       		.uleb128 0x32
+ 33096 6c46 B20D0000 		.long	0xdb2
+ 33097 6c4a 03       		.byte	0x3
+ 33098 6c4b 91       		.byte	0x91
+ 33099 6c4c 9054     		.sleb128 -5616
+ 33100 6c4e 35       		.uleb128 0x35
+ 33101 6c4f CB0D0000 		.long	0xdcb
+ 33102 6c53 00000000 		.quad	.LBB2144
+ 33102      00000000 
+ 33103 6c5b 00000000 		.quad	.LBE2144
+ 33103      00000000 
+ 33104 6c63 02       		.byte	0x2
+ 33105 6c64 7501     		.value	0x175
+ 33106 6c66 32       		.uleb128 0x32
+ 33107 6c67 E90D0000 		.long	0xde9
+ 33108 6c6b 03       		.byte	0x3
+ 33109 6c6c 91       		.byte	0x91
+ 33110 6c6d A054     		.sleb128 -5600
+ 33111 6c6f 32       		.uleb128 0x32
+ 33112 6c70 DD0D0000 		.long	0xddd
+
GAS LISTING /tmp/ccjbMjHD.s 			page 876
+
+
+ 33113 6c74 03       		.byte	0x3
+ 33114 6c75 91       		.byte	0x91
+ 33115 6c76 B054     		.sleb128 -5584
+ 33116 6c78 00       		.byte	0x0
+ 33117 6c79 00       		.byte	0x0
+ 33118 6c7a 00       		.byte	0x0
+ 33119 6c7b 00       		.byte	0x0
+ 33120 6c7c 31       		.uleb128 0x31
+ 33121 6c7d 210F0000 		.long	0xf21
+ 33122 6c81 00000000 		.quad	.LBB2146
+ 33122      00000000 
+ 33123 6c89 00000000 		.quad	.LBE2146
+ 33123      00000000 
+ 33124 6c91 02       		.byte	0x2
+ 33125 6c92 2006     		.value	0x620
+ 33126 6c94 196D0000 		.long	0x6d19
+ 33127 6c98 32       		.uleb128 0x32
+ 33128 6c99 330F0000 		.long	0xf33
+ 33129 6c9d 03       		.byte	0x3
+ 33130 6c9e 91       		.byte	0x91
+ 33131 6c9f C054     		.sleb128 -5568
+ 33132 6ca1 33       		.uleb128 0x33
+ 33133 6ca2 00000000 		.quad	.LBB2147
+ 33133      00000000 
+ 33134 6caa 00000000 		.quad	.LBE2147
+ 33134      00000000 
+ 33135 6cb2 34       		.uleb128 0x34
+ 33136 6cb3 3F0F0000 		.long	0xf3f
+ 33137 6cb7 09       		.byte	0x9
+ 33138 6cb8 03       		.byte	0x3
+ 33139 6cb9 00000000 		.quad	mask.7943
+ 33139      00000000 
+ 33140 6cc1 35       		.uleb128 0x35
+ 33141 6cc2 A00D0000 		.long	0xda0
+ 33142 6cc6 00000000 		.quad	.LBB2148
+ 33142      00000000 
+ 33143 6cce 00000000 		.quad	.LBE2148
+ 33143      00000000 
+ 33144 6cd6 02       		.byte	0x2
+ 33145 6cd7 FE04     		.value	0x4fe
+ 33146 6cd9 32       		.uleb128 0x32
+ 33147 6cda BE0D0000 		.long	0xdbe
+ 33148 6cde 03       		.byte	0x3
+ 33149 6cdf 91       		.byte	0x91
+ 33150 6ce0 D054     		.sleb128 -5552
+ 33151 6ce2 32       		.uleb128 0x32
+ 33152 6ce3 B20D0000 		.long	0xdb2
+ 33153 6ce7 03       		.byte	0x3
+ 33154 6ce8 91       		.byte	0x91
+ 33155 6ce9 E054     		.sleb128 -5536
+ 33156 6ceb 35       		.uleb128 0x35
+ 33157 6cec CB0D0000 		.long	0xdcb
+ 33158 6cf0 00000000 		.quad	.LBB2150
+ 33158      00000000 
+ 33159 6cf8 00000000 		.quad	.LBE2150
+ 33159      00000000 
+ 33160 6d00 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 877
+
+
+ 33161 6d01 7501     		.value	0x175
+ 33162 6d03 32       		.uleb128 0x32
+ 33163 6d04 E90D0000 		.long	0xde9
+ 33164 6d08 03       		.byte	0x3
+ 33165 6d09 91       		.byte	0x91
+ 33166 6d0a F054     		.sleb128 -5520
+ 33167 6d0c 32       		.uleb128 0x32
+ 33168 6d0d DD0D0000 		.long	0xddd
+ 33169 6d11 03       		.byte	0x3
+ 33170 6d12 91       		.byte	0x91
+ 33171 6d13 8055     		.sleb128 -5504
+ 33172 6d15 00       		.byte	0x0
+ 33173 6d16 00       		.byte	0x0
+ 33174 6d17 00       		.byte	0x0
+ 33175 6d18 00       		.byte	0x0
+ 33176 6d19 35       		.uleb128 0x35
+ 33177 6d1a 210F0000 		.long	0xf21
+ 33178 6d1e 00000000 		.quad	.LBB2152
+ 33178      00000000 
+ 33179 6d26 00000000 		.quad	.LBE2152
+ 33179      00000000 
+ 33180 6d2e 02       		.byte	0x2
+ 33181 6d2f 2106     		.value	0x621
+ 33182 6d31 32       		.uleb128 0x32
+ 33183 6d32 330F0000 		.long	0xf33
+ 33184 6d36 03       		.byte	0x3
+ 33185 6d37 91       		.byte	0x91
+ 33186 6d38 9055     		.sleb128 -5488
+ 33187 6d3a 33       		.uleb128 0x33
+ 33188 6d3b 00000000 		.quad	.LBB2153
+ 33188      00000000 
+ 33189 6d43 00000000 		.quad	.LBE2153
+ 33189      00000000 
+ 33190 6d4b 34       		.uleb128 0x34
+ 33191 6d4c 3F0F0000 		.long	0xf3f
+ 33192 6d50 09       		.byte	0x9
+ 33193 6d51 03       		.byte	0x3
+ 33194 6d52 00000000 		.quad	mask.7943
+ 33194      00000000 
+ 33195 6d5a 35       		.uleb128 0x35
+ 33196 6d5b A00D0000 		.long	0xda0
+ 33197 6d5f 00000000 		.quad	.LBB2154
+ 33197      00000000 
+ 33198 6d67 00000000 		.quad	.LBE2154
+ 33198      00000000 
+ 33199 6d6f 02       		.byte	0x2
+ 33200 6d70 FE04     		.value	0x4fe
+ 33201 6d72 32       		.uleb128 0x32
+ 33202 6d73 BE0D0000 		.long	0xdbe
+ 33203 6d77 03       		.byte	0x3
+ 33204 6d78 91       		.byte	0x91
+ 33205 6d79 A055     		.sleb128 -5472
+ 33206 6d7b 32       		.uleb128 0x32
+ 33207 6d7c B20D0000 		.long	0xdb2
+ 33208 6d80 03       		.byte	0x3
+ 33209 6d81 91       		.byte	0x91
+ 33210 6d82 B055     		.sleb128 -5456
+
GAS LISTING /tmp/ccjbMjHD.s 			page 878
+
+
+ 33211 6d84 35       		.uleb128 0x35
+ 33212 6d85 CB0D0000 		.long	0xdcb
+ 33213 6d89 00000000 		.quad	.LBB2156
+ 33213      00000000 
+ 33214 6d91 00000000 		.quad	.LBE2156
+ 33214      00000000 
+ 33215 6d99 02       		.byte	0x2
+ 33216 6d9a 7501     		.value	0x175
+ 33217 6d9c 32       		.uleb128 0x32
+ 33218 6d9d E90D0000 		.long	0xde9
+ 33219 6da1 03       		.byte	0x3
+ 33220 6da2 91       		.byte	0x91
+ 33221 6da3 C055     		.sleb128 -5440
+ 33222 6da5 32       		.uleb128 0x32
+ 33223 6da6 DD0D0000 		.long	0xddd
+ 33224 6daa 03       		.byte	0x3
+ 33225 6dab 91       		.byte	0x91
+ 33226 6dac D055     		.sleb128 -5424
+ 33227 6dae 00       		.byte	0x0
+ 33228 6daf 00       		.byte	0x0
+ 33229 6db0 00       		.byte	0x0
+ 33230 6db1 00       		.byte	0x0
+ 33231 6db2 00       		.byte	0x0
+ 33232 6db3 00       		.byte	0x0
+ 33233 6db4 31       		.uleb128 0x31
+ 33234 6db5 AC0E0000 		.long	0xeac
+ 33235 6db9 00000000 		.quad	.LBB2158
+ 33235      00000000 
+ 33236 6dc1 00000000 		.quad	.LBE2158
+ 33236      00000000 
+ 33237 6dc9 02       		.byte	0x2
+ 33238 6dca 1C07     		.value	0x71c
+ 33239 6dcc 056E0000 		.long	0x6e05
+ 33240 6dd0 32       		.uleb128 0x32
+ 33241 6dd1 BE0E0000 		.long	0xebe
+ 33242 6dd5 03       		.byte	0x3
+ 33243 6dd6 91       		.byte	0x91
+ 33244 6dd7 E055     		.sleb128 -5408
+ 33245 6dd9 35       		.uleb128 0x35
+ 33246 6dda CB0E0000 		.long	0xecb
+ 33247 6dde 00000000 		.quad	.LBB2160
+ 33247      00000000 
+ 33248 6de6 00000000 		.quad	.LBE2160
+ 33248      00000000 
+ 33249 6dee 02       		.byte	0x2
+ 33250 6def 4905     		.value	0x549
+ 33251 6df1 32       		.uleb128 0x32
+ 33252 6df2 E90E0000 		.long	0xee9
+ 33253 6df6 03       		.byte	0x3
+ 33254 6df7 91       		.byte	0x91
+ 33255 6df8 FC55     		.sleb128 -5380
+ 33256 6dfa 32       		.uleb128 0x32
+ 33257 6dfb DD0E0000 		.long	0xedd
+ 33258 6dff 03       		.byte	0x3
+ 33259 6e00 91       		.byte	0x91
+ 33260 6e01 8056     		.sleb128 -5376
+ 33261 6e03 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 879
+
+
+ 33262 6e04 00       		.byte	0x0
+ 33263 6e05 31       		.uleb128 0x31
+ 33264 6e06 0F570000 		.long	0x570f
+ 33265 6e0a 00000000 		.quad	.LBB2162
+ 33265      00000000 
+ 33266 6e12 00000000 		.quad	.LBE2162
+ 33266      00000000 
+ 33267 6e1a 02       		.byte	0x2
+ 33268 6e1b 1E07     		.value	0x71e
+ 33269 6e1d 686E0000 		.long	0x6e68
+ 33270 6e21 32       		.uleb128 0x32
+ 33271 6e22 2B570000 		.long	0x572b
+ 33272 6e26 03       		.byte	0x3
+ 33273 6e27 91       		.byte	0x91
+ 33274 6e28 9056     		.sleb128 -5360
+ 33275 6e2a 32       		.uleb128 0x32
+ 33276 6e2b 21570000 		.long	0x5721
+ 33277 6e2f 03       		.byte	0x3
+ 33278 6e30 91       		.byte	0x91
+ 33279 6e31 A056     		.sleb128 -5344
+ 33280 6e33 35       		.uleb128 0x35
+ 33281 6e34 36570000 		.long	0x5736
+ 33282 6e38 00000000 		.quad	.LBB2164
+ 33282      00000000 
+ 33283 6e40 00000000 		.quad	.LBE2164
+ 33283      00000000 
+ 33284 6e48 02       		.byte	0x2
+ 33285 6e49 BA05     		.value	0x5ba
+ 33286 6e4b 32       		.uleb128 0x32
+ 33287 6e4c 60570000 		.long	0x5760
+ 33288 6e50 03       		.byte	0x3
+ 33289 6e51 91       		.byte	0x91
+ 33290 6e52 BC56     		.sleb128 -5316
+ 33291 6e54 32       		.uleb128 0x32
+ 33292 6e55 54570000 		.long	0x5754
+ 33293 6e59 03       		.byte	0x3
+ 33294 6e5a 91       		.byte	0x91
+ 33295 6e5b C056     		.sleb128 -5312
+ 33296 6e5d 32       		.uleb128 0x32
+ 33297 6e5e 48570000 		.long	0x5748
+ 33298 6e62 03       		.byte	0x3
+ 33299 6e63 91       		.byte	0x91
+ 33300 6e64 D056     		.sleb128 -5296
+ 33301 6e66 00       		.byte	0x0
+ 33302 6e67 00       		.byte	0x0
+ 33303 6e68 31       		.uleb128 0x31
+ 33304 6e69 6D570000 		.long	0x576d
+ 33305 6e6d 00000000 		.quad	.LBB2166
+ 33305      00000000 
+ 33306 6e75 00000000 		.quad	.LBE2166
+ 33306      00000000 
+ 33307 6e7d 02       		.byte	0x2
+ 33308 6e7e 2107     		.value	0x721
+ 33309 6e80 CB6E0000 		.long	0x6ecb
+ 33310 6e84 32       		.uleb128 0x32
+ 33311 6e85 89570000 		.long	0x5789
+ 33312 6e89 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 880
+
+
+ 33313 6e8a 91       		.byte	0x91
+ 33314 6e8b E056     		.sleb128 -5280
+ 33315 6e8d 32       		.uleb128 0x32
+ 33316 6e8e 7F570000 		.long	0x577f
+ 33317 6e92 03       		.byte	0x3
+ 33318 6e93 91       		.byte	0x91
+ 33319 6e94 F056     		.sleb128 -5264
+ 33320 6e96 35       		.uleb128 0x35
+ 33321 6e97 36570000 		.long	0x5736
+ 33322 6e9b 00000000 		.quad	.LBB2168
+ 33322      00000000 
+ 33323 6ea3 00000000 		.quad	.LBE2168
+ 33323      00000000 
+ 33324 6eab 02       		.byte	0x2
+ 33325 6eac DA05     		.value	0x5da
+ 33326 6eae 32       		.uleb128 0x32
+ 33327 6eaf 60570000 		.long	0x5760
+ 33328 6eb3 03       		.byte	0x3
+ 33329 6eb4 91       		.byte	0x91
+ 33330 6eb5 8C57     		.sleb128 -5236
+ 33331 6eb7 32       		.uleb128 0x32
+ 33332 6eb8 54570000 		.long	0x5754
+ 33333 6ebc 03       		.byte	0x3
+ 33334 6ebd 91       		.byte	0x91
+ 33335 6ebe 9057     		.sleb128 -5232
+ 33336 6ec0 32       		.uleb128 0x32
+ 33337 6ec1 48570000 		.long	0x5748
+ 33338 6ec5 03       		.byte	0x3
+ 33339 6ec6 91       		.byte	0x91
+ 33340 6ec7 A057     		.sleb128 -5216
+ 33341 6ec9 00       		.byte	0x0
+ 33342 6eca 00       		.byte	0x0
+ 33343 6ecb 31       		.uleb128 0x31
+ 33344 6ecc F60E0000 		.long	0xef6
+ 33345 6ed0 00000000 		.quad	.LBB2170
+ 33345      00000000 
+ 33346 6ed8 00000000 		.quad	.LBE2170
+ 33346      00000000 
+ 33347 6ee0 02       		.byte	0x2
+ 33348 6ee1 2507     		.value	0x725
+ 33349 6ee3 E0700000 		.long	0x70e0
+ 33350 6ee7 32       		.uleb128 0x32
+ 33351 6ee8 080F0000 		.long	0xf08
+ 33352 6eec 03       		.byte	0x3
+ 33353 6eed 91       		.byte	0x91
+ 33354 6eee B057     		.sleb128 -5200
+ 33355 6ef0 33       		.uleb128 0x33
+ 33356 6ef1 00000000 		.quad	.LBB2171
+ 33356      00000000 
+ 33357 6ef9 00000000 		.quad	.LBE2171
+ 33357      00000000 
+ 33358 6f01 34       		.uleb128 0x34
+ 33359 6f02 140F0000 		.long	0xf14
+ 33360 6f06 04       		.byte	0x4
+ 33361 6f07 76       		.byte	0x76
+ 33362 6f08 B0BB7F   		.sleb128 -8784
+ 33363 6f0b 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s 			page 881
+
+
+ 33364 6f0c 210F0000 		.long	0xf21
+ 33365 6f10 00000000 		.quad	.LBB2172
+ 33365      00000000 
+ 33366 6f18 00000000 		.quad	.LBE2172
+ 33366      00000000 
+ 33367 6f20 02       		.byte	0x2
+ 33368 6f21 1F06     		.value	0x61f
+ 33369 6f23 A86F0000 		.long	0x6fa8
+ 33370 6f27 32       		.uleb128 0x32
+ 33371 6f28 330F0000 		.long	0xf33
+ 33372 6f2c 03       		.byte	0x3
+ 33373 6f2d 91       		.byte	0x91
+ 33374 6f2e C057     		.sleb128 -5184
+ 33375 6f30 33       		.uleb128 0x33
+ 33376 6f31 00000000 		.quad	.LBB2173
+ 33376      00000000 
+ 33377 6f39 00000000 		.quad	.LBE2173
+ 33377      00000000 
+ 33378 6f41 34       		.uleb128 0x34
+ 33379 6f42 3F0F0000 		.long	0xf3f
+ 33380 6f46 09       		.byte	0x9
+ 33381 6f47 03       		.byte	0x3
+ 33382 6f48 00000000 		.quad	mask.7943
+ 33382      00000000 
+ 33383 6f50 35       		.uleb128 0x35
+ 33384 6f51 A00D0000 		.long	0xda0
+ 33385 6f55 00000000 		.quad	.LBB2174
+ 33385      00000000 
+ 33386 6f5d 00000000 		.quad	.LBE2174
+ 33386      00000000 
+ 33387 6f65 02       		.byte	0x2
+ 33388 6f66 FE04     		.value	0x4fe
+ 33389 6f68 32       		.uleb128 0x32
+ 33390 6f69 BE0D0000 		.long	0xdbe
+ 33391 6f6d 03       		.byte	0x3
+ 33392 6f6e 91       		.byte	0x91
+ 33393 6f6f D057     		.sleb128 -5168
+ 33394 6f71 32       		.uleb128 0x32
+ 33395 6f72 B20D0000 		.long	0xdb2
+ 33396 6f76 03       		.byte	0x3
+ 33397 6f77 91       		.byte	0x91
+ 33398 6f78 E057     		.sleb128 -5152
+ 33399 6f7a 35       		.uleb128 0x35
+ 33400 6f7b CB0D0000 		.long	0xdcb
+ 33401 6f7f 00000000 		.quad	.LBB2176
+ 33401      00000000 
+ 33402 6f87 00000000 		.quad	.LBE2176
+ 33402      00000000 
+ 33403 6f8f 02       		.byte	0x2
+ 33404 6f90 7501     		.value	0x175
+ 33405 6f92 32       		.uleb128 0x32
+ 33406 6f93 E90D0000 		.long	0xde9
+ 33407 6f97 03       		.byte	0x3
+ 33408 6f98 91       		.byte	0x91
+ 33409 6f99 F057     		.sleb128 -5136
+ 33410 6f9b 32       		.uleb128 0x32
+ 33411 6f9c DD0D0000 		.long	0xddd
+
GAS LISTING /tmp/ccjbMjHD.s 			page 882
+
+
+ 33412 6fa0 03       		.byte	0x3
+ 33413 6fa1 91       		.byte	0x91
+ 33414 6fa2 8058     		.sleb128 -5120
+ 33415 6fa4 00       		.byte	0x0
+ 33416 6fa5 00       		.byte	0x0
+ 33417 6fa6 00       		.byte	0x0
+ 33418 6fa7 00       		.byte	0x0
+ 33419 6fa8 31       		.uleb128 0x31
+ 33420 6fa9 210F0000 		.long	0xf21
+ 33421 6fad 00000000 		.quad	.LBB2178
+ 33421      00000000 
+ 33422 6fb5 00000000 		.quad	.LBE2178
+ 33422      00000000 
+ 33423 6fbd 02       		.byte	0x2
+ 33424 6fbe 2006     		.value	0x620
+ 33425 6fc0 45700000 		.long	0x7045
+ 33426 6fc4 32       		.uleb128 0x32
+ 33427 6fc5 330F0000 		.long	0xf33
+ 33428 6fc9 03       		.byte	0x3
+ 33429 6fca 91       		.byte	0x91
+ 33430 6fcb 9058     		.sleb128 -5104
+ 33431 6fcd 33       		.uleb128 0x33
+ 33432 6fce 00000000 		.quad	.LBB2179
+ 33432      00000000 
+ 33433 6fd6 00000000 		.quad	.LBE2179
+ 33433      00000000 
+ 33434 6fde 34       		.uleb128 0x34
+ 33435 6fdf 3F0F0000 		.long	0xf3f
+ 33436 6fe3 09       		.byte	0x9
+ 33437 6fe4 03       		.byte	0x3
+ 33438 6fe5 00000000 		.quad	mask.7943
+ 33438      00000000 
+ 33439 6fed 35       		.uleb128 0x35
+ 33440 6fee A00D0000 		.long	0xda0
+ 33441 6ff2 00000000 		.quad	.LBB2180
+ 33441      00000000 
+ 33442 6ffa 00000000 		.quad	.LBE2180
+ 33442      00000000 
+ 33443 7002 02       		.byte	0x2
+ 33444 7003 FE04     		.value	0x4fe
+ 33445 7005 32       		.uleb128 0x32
+ 33446 7006 BE0D0000 		.long	0xdbe
+ 33447 700a 03       		.byte	0x3
+ 33448 700b 91       		.byte	0x91
+ 33449 700c A058     		.sleb128 -5088
+ 33450 700e 32       		.uleb128 0x32
+ 33451 700f B20D0000 		.long	0xdb2
+ 33452 7013 03       		.byte	0x3
+ 33453 7014 91       		.byte	0x91
+ 33454 7015 B058     		.sleb128 -5072
+ 33455 7017 35       		.uleb128 0x35
+ 33456 7018 CB0D0000 		.long	0xdcb
+ 33457 701c 00000000 		.quad	.LBB2182
+ 33457      00000000 
+ 33458 7024 00000000 		.quad	.LBE2182
+ 33458      00000000 
+ 33459 702c 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 883
+
+
+ 33460 702d 7501     		.value	0x175
+ 33461 702f 32       		.uleb128 0x32
+ 33462 7030 E90D0000 		.long	0xde9
+ 33463 7034 03       		.byte	0x3
+ 33464 7035 91       		.byte	0x91
+ 33465 7036 C058     		.sleb128 -5056
+ 33466 7038 32       		.uleb128 0x32
+ 33467 7039 DD0D0000 		.long	0xddd
+ 33468 703d 03       		.byte	0x3
+ 33469 703e 91       		.byte	0x91
+ 33470 703f D058     		.sleb128 -5040
+ 33471 7041 00       		.byte	0x0
+ 33472 7042 00       		.byte	0x0
+ 33473 7043 00       		.byte	0x0
+ 33474 7044 00       		.byte	0x0
+ 33475 7045 35       		.uleb128 0x35
+ 33476 7046 210F0000 		.long	0xf21
+ 33477 704a 00000000 		.quad	.LBB2184
+ 33477      00000000 
+ 33478 7052 00000000 		.quad	.LBE2184
+ 33478      00000000 
+ 33479 705a 02       		.byte	0x2
+ 33480 705b 2106     		.value	0x621
+ 33481 705d 32       		.uleb128 0x32
+ 33482 705e 330F0000 		.long	0xf33
+ 33483 7062 03       		.byte	0x3
+ 33484 7063 91       		.byte	0x91
+ 33485 7064 E058     		.sleb128 -5024
+ 33486 7066 33       		.uleb128 0x33
+ 33487 7067 00000000 		.quad	.LBB2185
+ 33487      00000000 
+ 33488 706f 00000000 		.quad	.LBE2185
+ 33488      00000000 
+ 33489 7077 34       		.uleb128 0x34
+ 33490 7078 3F0F0000 		.long	0xf3f
+ 33491 707c 09       		.byte	0x9
+ 33492 707d 03       		.byte	0x3
+ 33493 707e 00000000 		.quad	mask.7943
+ 33493      00000000 
+ 33494 7086 35       		.uleb128 0x35
+ 33495 7087 A00D0000 		.long	0xda0
+ 33496 708b 00000000 		.quad	.LBB2186
+ 33496      00000000 
+ 33497 7093 00000000 		.quad	.LBE2186
+ 33497      00000000 
+ 33498 709b 02       		.byte	0x2
+ 33499 709c FE04     		.value	0x4fe
+ 33500 709e 32       		.uleb128 0x32
+ 33501 709f BE0D0000 		.long	0xdbe
+ 33502 70a3 03       		.byte	0x3
+ 33503 70a4 91       		.byte	0x91
+ 33504 70a5 F058     		.sleb128 -5008
+ 33505 70a7 32       		.uleb128 0x32
+ 33506 70a8 B20D0000 		.long	0xdb2
+ 33507 70ac 03       		.byte	0x3
+ 33508 70ad 91       		.byte	0x91
+ 33509 70ae 8059     		.sleb128 -4992
+
GAS LISTING /tmp/ccjbMjHD.s 			page 884
+
+
+ 33510 70b0 35       		.uleb128 0x35
+ 33511 70b1 CB0D0000 		.long	0xdcb
+ 33512 70b5 00000000 		.quad	.LBB2188
+ 33512      00000000 
+ 33513 70bd 00000000 		.quad	.LBE2188
+ 33513      00000000 
+ 33514 70c5 02       		.byte	0x2
+ 33515 70c6 7501     		.value	0x175
+ 33516 70c8 32       		.uleb128 0x32
+ 33517 70c9 E90D0000 		.long	0xde9
+ 33518 70cd 03       		.byte	0x3
+ 33519 70ce 91       		.byte	0x91
+ 33520 70cf 9059     		.sleb128 -4976
+ 33521 70d1 32       		.uleb128 0x32
+ 33522 70d2 DD0D0000 		.long	0xddd
+ 33523 70d6 03       		.byte	0x3
+ 33524 70d7 91       		.byte	0x91
+ 33525 70d8 A059     		.sleb128 -4960
+ 33526 70da 00       		.byte	0x0
+ 33527 70db 00       		.byte	0x0
+ 33528 70dc 00       		.byte	0x0
+ 33529 70dd 00       		.byte	0x0
+ 33530 70de 00       		.byte	0x0
+ 33531 70df 00       		.byte	0x0
+ 33532 70e0 31       		.uleb128 0x31
+ 33533 70e1 F60E0000 		.long	0xef6
+ 33534 70e5 00000000 		.quad	.LBB2190
+ 33534      00000000 
+ 33535 70ed 00000000 		.quad	.LBE2190
+ 33535      00000000 
+ 33536 70f5 02       		.byte	0x2
+ 33537 70f6 2607     		.value	0x726
+ 33538 70f8 F5720000 		.long	0x72f5
+ 33539 70fc 32       		.uleb128 0x32
+ 33540 70fd 080F0000 		.long	0xf08
+ 33541 7101 03       		.byte	0x3
+ 33542 7102 91       		.byte	0x91
+ 33543 7103 B059     		.sleb128 -4944
+ 33544 7105 33       		.uleb128 0x33
+ 33545 7106 00000000 		.quad	.LBB2191
+ 33545      00000000 
+ 33546 710e 00000000 		.quad	.LBE2191
+ 33546      00000000 
+ 33547 7116 34       		.uleb128 0x34
+ 33548 7117 140F0000 		.long	0xf14
+ 33549 711b 04       		.byte	0x4
+ 33550 711c 76       		.byte	0x76
+ 33551 711d C0BB7F   		.sleb128 -8768
+ 33552 7120 31       		.uleb128 0x31
+ 33553 7121 210F0000 		.long	0xf21
+ 33554 7125 00000000 		.quad	.LBB2192
+ 33554      00000000 
+ 33555 712d 00000000 		.quad	.LBE2192
+ 33555      00000000 
+ 33556 7135 02       		.byte	0x2
+ 33557 7136 1F06     		.value	0x61f
+ 33558 7138 BD710000 		.long	0x71bd
+
GAS LISTING /tmp/ccjbMjHD.s 			page 885
+
+
+ 33559 713c 32       		.uleb128 0x32
+ 33560 713d 330F0000 		.long	0xf33
+ 33561 7141 03       		.byte	0x3
+ 33562 7142 91       		.byte	0x91
+ 33563 7143 C059     		.sleb128 -4928
+ 33564 7145 33       		.uleb128 0x33
+ 33565 7146 00000000 		.quad	.LBB2193
+ 33565      00000000 
+ 33566 714e 00000000 		.quad	.LBE2193
+ 33566      00000000 
+ 33567 7156 34       		.uleb128 0x34
+ 33568 7157 3F0F0000 		.long	0xf3f
+ 33569 715b 09       		.byte	0x9
+ 33570 715c 03       		.byte	0x3
+ 33571 715d 00000000 		.quad	mask.7943
+ 33571      00000000 
+ 33572 7165 35       		.uleb128 0x35
+ 33573 7166 A00D0000 		.long	0xda0
+ 33574 716a 00000000 		.quad	.LBB2194
+ 33574      00000000 
+ 33575 7172 00000000 		.quad	.LBE2194
+ 33575      00000000 
+ 33576 717a 02       		.byte	0x2
+ 33577 717b FE04     		.value	0x4fe
+ 33578 717d 32       		.uleb128 0x32
+ 33579 717e BE0D0000 		.long	0xdbe
+ 33580 7182 03       		.byte	0x3
+ 33581 7183 91       		.byte	0x91
+ 33582 7184 D059     		.sleb128 -4912
+ 33583 7186 32       		.uleb128 0x32
+ 33584 7187 B20D0000 		.long	0xdb2
+ 33585 718b 03       		.byte	0x3
+ 33586 718c 91       		.byte	0x91
+ 33587 718d E059     		.sleb128 -4896
+ 33588 718f 35       		.uleb128 0x35
+ 33589 7190 CB0D0000 		.long	0xdcb
+ 33590 7194 00000000 		.quad	.LBB2196
+ 33590      00000000 
+ 33591 719c 00000000 		.quad	.LBE2196
+ 33591      00000000 
+ 33592 71a4 02       		.byte	0x2
+ 33593 71a5 7501     		.value	0x175
+ 33594 71a7 32       		.uleb128 0x32
+ 33595 71a8 E90D0000 		.long	0xde9
+ 33596 71ac 03       		.byte	0x3
+ 33597 71ad 91       		.byte	0x91
+ 33598 71ae F059     		.sleb128 -4880
+ 33599 71b0 32       		.uleb128 0x32
+ 33600 71b1 DD0D0000 		.long	0xddd
+ 33601 71b5 03       		.byte	0x3
+ 33602 71b6 91       		.byte	0x91
+ 33603 71b7 805A     		.sleb128 -4864
+ 33604 71b9 00       		.byte	0x0
+ 33605 71ba 00       		.byte	0x0
+ 33606 71bb 00       		.byte	0x0
+ 33607 71bc 00       		.byte	0x0
+ 33608 71bd 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s 			page 886
+
+
+ 33609 71be 210F0000 		.long	0xf21
+ 33610 71c2 00000000 		.quad	.LBB2198
+ 33610      00000000 
+ 33611 71ca 00000000 		.quad	.LBE2198
+ 33611      00000000 
+ 33612 71d2 02       		.byte	0x2
+ 33613 71d3 2006     		.value	0x620
+ 33614 71d5 5A720000 		.long	0x725a
+ 33615 71d9 32       		.uleb128 0x32
+ 33616 71da 330F0000 		.long	0xf33
+ 33617 71de 03       		.byte	0x3
+ 33618 71df 91       		.byte	0x91
+ 33619 71e0 905A     		.sleb128 -4848
+ 33620 71e2 33       		.uleb128 0x33
+ 33621 71e3 00000000 		.quad	.LBB2199
+ 33621      00000000 
+ 33622 71eb 00000000 		.quad	.LBE2199
+ 33622      00000000 
+ 33623 71f3 34       		.uleb128 0x34
+ 33624 71f4 3F0F0000 		.long	0xf3f
+ 33625 71f8 09       		.byte	0x9
+ 33626 71f9 03       		.byte	0x3
+ 33627 71fa 00000000 		.quad	mask.7943
+ 33627      00000000 
+ 33628 7202 35       		.uleb128 0x35
+ 33629 7203 A00D0000 		.long	0xda0
+ 33630 7207 00000000 		.quad	.LBB2200
+ 33630      00000000 
+ 33631 720f 00000000 		.quad	.LBE2200
+ 33631      00000000 
+ 33632 7217 02       		.byte	0x2
+ 33633 7218 FE04     		.value	0x4fe
+ 33634 721a 32       		.uleb128 0x32
+ 33635 721b BE0D0000 		.long	0xdbe
+ 33636 721f 03       		.byte	0x3
+ 33637 7220 91       		.byte	0x91
+ 33638 7221 A05A     		.sleb128 -4832
+ 33639 7223 32       		.uleb128 0x32
+ 33640 7224 B20D0000 		.long	0xdb2
+ 33641 7228 03       		.byte	0x3
+ 33642 7229 91       		.byte	0x91
+ 33643 722a B05A     		.sleb128 -4816
+ 33644 722c 35       		.uleb128 0x35
+ 33645 722d CB0D0000 		.long	0xdcb
+ 33646 7231 00000000 		.quad	.LBB2202
+ 33646      00000000 
+ 33647 7239 00000000 		.quad	.LBE2202
+ 33647      00000000 
+ 33648 7241 02       		.byte	0x2
+ 33649 7242 7501     		.value	0x175
+ 33650 7244 32       		.uleb128 0x32
+ 33651 7245 E90D0000 		.long	0xde9
+ 33652 7249 03       		.byte	0x3
+ 33653 724a 91       		.byte	0x91
+ 33654 724b C05A     		.sleb128 -4800
+ 33655 724d 32       		.uleb128 0x32
+ 33656 724e DD0D0000 		.long	0xddd
+
GAS LISTING /tmp/ccjbMjHD.s 			page 887
+
+
+ 33657 7252 03       		.byte	0x3
+ 33658 7253 91       		.byte	0x91
+ 33659 7254 D05A     		.sleb128 -4784
+ 33660 7256 00       		.byte	0x0
+ 33661 7257 00       		.byte	0x0
+ 33662 7258 00       		.byte	0x0
+ 33663 7259 00       		.byte	0x0
+ 33664 725a 35       		.uleb128 0x35
+ 33665 725b 210F0000 		.long	0xf21
+ 33666 725f 00000000 		.quad	.LBB2204
+ 33666      00000000 
+ 33667 7267 00000000 		.quad	.LBE2204
+ 33667      00000000 
+ 33668 726f 02       		.byte	0x2
+ 33669 7270 2106     		.value	0x621
+ 33670 7272 32       		.uleb128 0x32
+ 33671 7273 330F0000 		.long	0xf33
+ 33672 7277 03       		.byte	0x3
+ 33673 7278 91       		.byte	0x91
+ 33674 7279 E05A     		.sleb128 -4768
+ 33675 727b 33       		.uleb128 0x33
+ 33676 727c 00000000 		.quad	.LBB2205
+ 33676      00000000 
+ 33677 7284 00000000 		.quad	.LBE2205
+ 33677      00000000 
+ 33678 728c 34       		.uleb128 0x34
+ 33679 728d 3F0F0000 		.long	0xf3f
+ 33680 7291 09       		.byte	0x9
+ 33681 7292 03       		.byte	0x3
+ 33682 7293 00000000 		.quad	mask.7943
+ 33682      00000000 
+ 33683 729b 35       		.uleb128 0x35
+ 33684 729c A00D0000 		.long	0xda0
+ 33685 72a0 00000000 		.quad	.LBB2206
+ 33685      00000000 
+ 33686 72a8 00000000 		.quad	.LBE2206
+ 33686      00000000 
+ 33687 72b0 02       		.byte	0x2
+ 33688 72b1 FE04     		.value	0x4fe
+ 33689 72b3 32       		.uleb128 0x32
+ 33690 72b4 BE0D0000 		.long	0xdbe
+ 33691 72b8 03       		.byte	0x3
+ 33692 72b9 91       		.byte	0x91
+ 33693 72ba F05A     		.sleb128 -4752
+ 33694 72bc 32       		.uleb128 0x32
+ 33695 72bd B20D0000 		.long	0xdb2
+ 33696 72c1 03       		.byte	0x3
+ 33697 72c2 91       		.byte	0x91
+ 33698 72c3 805B     		.sleb128 -4736
+ 33699 72c5 35       		.uleb128 0x35
+ 33700 72c6 CB0D0000 		.long	0xdcb
+ 33701 72ca 00000000 		.quad	.LBB2208
+ 33701      00000000 
+ 33702 72d2 00000000 		.quad	.LBE2208
+ 33702      00000000 
+ 33703 72da 02       		.byte	0x2
+ 33704 72db 7501     		.value	0x175
+
GAS LISTING /tmp/ccjbMjHD.s 			page 888
+
+
+ 33705 72dd 32       		.uleb128 0x32
+ 33706 72de E90D0000 		.long	0xde9
+ 33707 72e2 03       		.byte	0x3
+ 33708 72e3 91       		.byte	0x91
+ 33709 72e4 905B     		.sleb128 -4720
+ 33710 72e6 32       		.uleb128 0x32
+ 33711 72e7 DD0D0000 		.long	0xddd
+ 33712 72eb 03       		.byte	0x3
+ 33713 72ec 91       		.byte	0x91
+ 33714 72ed A05B     		.sleb128 -4704
+ 33715 72ef 00       		.byte	0x0
+ 33716 72f0 00       		.byte	0x0
+ 33717 72f1 00       		.byte	0x0
+ 33718 72f2 00       		.byte	0x0
+ 33719 72f3 00       		.byte	0x0
+ 33720 72f4 00       		.byte	0x0
+ 33721 72f5 31       		.uleb128 0x31
+ 33722 72f6 D50B0000 		.long	0xbd5
+ 33723 72fa 00000000 		.quad	.LBB2210
+ 33723      00000000 
+ 33724 7302 00000000 		.quad	.LBE2210
+ 33724      00000000 
+ 33725 730a 02       		.byte	0x2
+ 33726 730b 2707     		.value	0x727
+ 33727 730d D8770000 		.long	0x77d8
+ 33728 7311 32       		.uleb128 0x32
+ 33729 7312 F30B0000 		.long	0xbf3
+ 33730 7316 03       		.byte	0x3
+ 33731 7317 91       		.byte	0x91
+ 33732 7318 BC5B     		.sleb128 -4676
+ 33733 731a 32       		.uleb128 0x32
+ 33734 731b E70B0000 		.long	0xbe7
+ 33735 731f 03       		.byte	0x3
+ 33736 7320 91       		.byte	0x91
+ 33737 7321 C05B     		.sleb128 -4672
+ 33738 7323 33       		.uleb128 0x33
+ 33739 7324 00000000 		.quad	.LBB2211
+ 33739      00000000 
+ 33740 732c 00000000 		.quad	.LBE2211
+ 33740      00000000 
+ 33741 7334 34       		.uleb128 0x34
+ 33742 7335 FF0B0000 		.long	0xbff
+ 33743 7339 04       		.byte	0x4
+ 33744 733a 76       		.byte	0x76
+ 33745 733b E0BB7F   		.sleb128 -8736
+ 33746 733e 34       		.uleb128 0x34
+ 33747 733f 0B0C0000 		.long	0xc0b
+ 33748 7343 04       		.byte	0x4
+ 33749 7344 76       		.byte	0x76
+ 33750 7345 D0BB7F   		.sleb128 -8752
+ 33751 7348 31       		.uleb128 0x31
+ 33752 7349 540C0000 		.long	0xc54
+ 33753 734d 00000000 		.quad	.LBB2212
+ 33753      00000000 
+ 33754 7355 00000000 		.quad	.LBE2212
+ 33754      00000000 
+ 33755 735d 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 889
+
+
+ 33756 735e 9106     		.value	0x691
+ 33757 7360 B4730000 		.long	0x73b4
+ 33758 7364 32       		.uleb128 0x32
+ 33759 7365 7E0C0000 		.long	0xc7e
+ 33760 7369 03       		.byte	0x3
+ 33761 736a 91       		.byte	0x91
+ 33762 736b D85B     		.sleb128 -4648
+ 33763 736d 32       		.uleb128 0x32
+ 33764 736e 720C0000 		.long	0xc72
+ 33765 7372 03       		.byte	0x3
+ 33766 7373 91       		.byte	0x91
+ 33767 7374 DC5B     		.sleb128 -4644
+ 33768 7376 32       		.uleb128 0x32
+ 33769 7377 660C0000 		.long	0xc66
+ 33770 737b 03       		.byte	0x3
+ 33771 737c 91       		.byte	0x91
+ 33772 737d E05B     		.sleb128 -4640
+ 33773 737f 35       		.uleb128 0x35
+ 33774 7380 8B0C0000 		.long	0xc8b
+ 33775 7384 00000000 		.quad	.LBB2214
+ 33775      00000000 
+ 33776 738c 00000000 		.quad	.LBE2214
+ 33776      00000000 
+ 33777 7394 02       		.byte	0x2
+ 33778 7395 0702     		.value	0x207
+ 33779 7397 32       		.uleb128 0x32
+ 33780 7398 B40C0000 		.long	0xcb4
+ 33781 739c 03       		.byte	0x3
+ 33782 739d 91       		.byte	0x91
+ 33783 739e F85B     		.sleb128 -4616
+ 33784 73a0 32       		.uleb128 0x32
+ 33785 73a1 A90C0000 		.long	0xca9
+ 33786 73a5 03       		.byte	0x3
+ 33787 73a6 91       		.byte	0x91
+ 33788 73a7 FC5B     		.sleb128 -4612
+ 33789 73a9 32       		.uleb128 0x32
+ 33790 73aa 9D0C0000 		.long	0xc9d
+ 33791 73ae 03       		.byte	0x3
+ 33792 73af 91       		.byte	0x91
+ 33793 73b0 805C     		.sleb128 -4608
+ 33794 73b2 00       		.byte	0x0
+ 33795 73b3 00       		.byte	0x0
+ 33796 73b4 31       		.uleb128 0x31
+ 33797 73b5 C10C0000 		.long	0xcc1
+ 33798 73b9 00000000 		.quad	.LBB2216
+ 33798      00000000 
+ 33799 73c1 00000000 		.quad	.LBE2216
+ 33799      00000000 
+ 33800 73c9 02       		.byte	0x2
+ 33801 73ca 9206     		.value	0x692
+ 33802 73cc 3D760000 		.long	0x763d
+ 33803 73d0 32       		.uleb128 0x32
+ 33804 73d1 D30C0000 		.long	0xcd3
+ 33805 73d5 03       		.byte	0x3
+ 33806 73d6 91       		.byte	0x91
+ 33807 73d7 905C     		.sleb128 -4592
+ 33808 73d9 35       		.uleb128 0x35
+
GAS LISTING /tmp/ccjbMjHD.s 			page 890
+
+
+ 33809 73da E00C0000 		.long	0xce0
+ 33810 73de 00000000 		.quad	.LBB2218
+ 33810      00000000 
+ 33811 73e6 00000000 		.quad	.LBE2218
+ 33811      00000000 
+ 33812 73ee 02       		.byte	0x2
+ 33813 73ef 7D03     		.value	0x37d
+ 33814 73f1 32       		.uleb128 0x32
+ 33815 73f2 FE0C0000 		.long	0xcfe
+ 33816 73f6 03       		.byte	0x3
+ 33817 73f7 91       		.byte	0x91
+ 33818 73f8 A85C     		.sleb128 -4568
+ 33819 73fa 32       		.uleb128 0x32
+ 33820 73fb F20C0000 		.long	0xcf2
+ 33821 73ff 03       		.byte	0x3
+ 33822 7400 91       		.byte	0x91
+ 33823 7401 B05C     		.sleb128 -4560
+ 33824 7403 33       		.uleb128 0x33
+ 33825 7404 00000000 		.quad	.LBB2219
+ 33825      00000000 
+ 33826 740c 00000000 		.quad	.LBE2219
+ 33826      00000000 
+ 33827 7414 34       		.uleb128 0x34
+ 33828 7415 0A0D0000 		.long	0xd0a
+ 33829 7419 03       		.byte	0x3
+ 33830 741a 91       		.byte	0x91
+ 33831 741b 805D     		.sleb128 -4480
+ 33832 741d 34       		.uleb128 0x34
+ 33833 741e 150D0000 		.long	0xd15
+ 33834 7422 03       		.byte	0x3
+ 33835 7423 91       		.byte	0x91
+ 33836 7424 F05C     		.sleb128 -4496
+ 33837 7426 34       		.uleb128 0x34
+ 33838 7427 200D0000 		.long	0xd20
+ 33839 742b 03       		.byte	0x3
+ 33840 742c 91       		.byte	0x91
+ 33841 742d E05C     		.sleb128 -4512
+ 33842 742f 34       		.uleb128 0x34
+ 33843 7430 2C0D0000 		.long	0xd2c
+ 33844 7434 03       		.byte	0x3
+ 33845 7435 91       		.byte	0x91
+ 33846 7436 D05C     		.sleb128 -4528
+ 33847 7438 34       		.uleb128 0x34
+ 33848 7439 380D0000 		.long	0xd38
+ 33849 743d 03       		.byte	0x3
+ 33850 743e 91       		.byte	0x91
+ 33851 743f CC5C     		.sleb128 -4532
+ 33852 7441 31       		.uleb128 0x31
+ 33853 7442 4F0D0000 		.long	0xd4f
+ 33854 7446 00000000 		.quad	.LBB2220
+ 33854      00000000 
+ 33855 744e 00000000 		.quad	.LBE2220
+ 33855      00000000 
+ 33856 7456 02       		.byte	0x2
+ 33857 7457 5603     		.value	0x356
+ 33858 7459 70740000 		.long	0x7470
+ 33859 745d 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 891
+
+
+ 33860 745e 6A0D0000 		.long	0xd6a
+ 33861 7462 03       		.byte	0x3
+ 33862 7463 91       		.byte	0x91
+ 33863 7464 905D     		.sleb128 -4464
+ 33864 7466 32       		.uleb128 0x32
+ 33865 7467 600D0000 		.long	0xd60
+ 33866 746b 03       		.byte	0x3
+ 33867 746c 91       		.byte	0x91
+ 33868 746d A05D     		.sleb128 -4448
+ 33869 746f 00       		.byte	0x0
+ 33870 7470 31       		.uleb128 0x31
+ 33871 7471 750D0000 		.long	0xd75
+ 33872 7475 00000000 		.quad	.LBB2222
+ 33872      00000000 
+ 33873 747d 00000000 		.quad	.LBE2222
+ 33873      00000000 
+ 33874 7485 02       		.byte	0x2
+ 33875 7486 5903     		.value	0x359
+ 33876 7488 9F740000 		.long	0x749f
+ 33877 748c 32       		.uleb128 0x32
+ 33878 748d 930D0000 		.long	0xd93
+ 33879 7491 03       		.byte	0x3
+ 33880 7492 91       		.byte	0x91
+ 33881 7493 BC5D     		.sleb128 -4420
+ 33882 7495 32       		.uleb128 0x32
+ 33883 7496 870D0000 		.long	0xd87
+ 33884 749a 03       		.byte	0x3
+ 33885 749b 91       		.byte	0x91
+ 33886 749c C05D     		.sleb128 -4416
+ 33887 749e 00       		.byte	0x0
+ 33888 749f 31       		.uleb128 0x31
+ 33889 74a0 4F0D0000 		.long	0xd4f
+ 33890 74a4 00000000 		.quad	.LBB2224
+ 33890      00000000 
+ 33891 74ac 00000000 		.quad	.LBE2224
+ 33891      00000000 
+ 33892 74b4 02       		.byte	0x2
+ 33893 74b5 5B03     		.value	0x35b
+ 33894 74b7 CE740000 		.long	0x74ce
+ 33895 74bb 32       		.uleb128 0x32
+ 33896 74bc 6A0D0000 		.long	0xd6a
+ 33897 74c0 03       		.byte	0x3
+ 33898 74c1 91       		.byte	0x91
+ 33899 74c2 D05D     		.sleb128 -4400
+ 33900 74c4 32       		.uleb128 0x32
+ 33901 74c5 600D0000 		.long	0xd60
+ 33902 74c9 03       		.byte	0x3
+ 33903 74ca 91       		.byte	0x91
+ 33904 74cb E05D     		.sleb128 -4384
+ 33905 74cd 00       		.byte	0x0
+ 33906 74ce 31       		.uleb128 0x31
+ 33907 74cf A00D0000 		.long	0xda0
+ 33908 74d3 00000000 		.quad	.LBB2226
+ 33908      00000000 
+ 33909 74db 00000000 		.quad	.LBE2226
+ 33909      00000000 
+ 33910 74e3 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 892
+
+
+ 33911 74e4 6403     		.value	0x364
+ 33912 74e6 28750000 		.long	0x7528
+ 33913 74ea 32       		.uleb128 0x32
+ 33914 74eb BE0D0000 		.long	0xdbe
+ 33915 74ef 03       		.byte	0x3
+ 33916 74f0 91       		.byte	0x91
+ 33917 74f1 F05D     		.sleb128 -4368
+ 33918 74f3 32       		.uleb128 0x32
+ 33919 74f4 B20D0000 		.long	0xdb2
+ 33920 74f8 03       		.byte	0x3
+ 33921 74f9 91       		.byte	0x91
+ 33922 74fa 805E     		.sleb128 -4352
+ 33923 74fc 35       		.uleb128 0x35
+ 33924 74fd CB0D0000 		.long	0xdcb
+ 33925 7501 00000000 		.quad	.LBB2228
+ 33925      00000000 
+ 33926 7509 00000000 		.quad	.LBE2228
+ 33926      00000000 
+ 33927 7511 02       		.byte	0x2
+ 33928 7512 7501     		.value	0x175
+ 33929 7514 32       		.uleb128 0x32
+ 33930 7515 E90D0000 		.long	0xde9
+ 33931 7519 03       		.byte	0x3
+ 33932 751a 91       		.byte	0x91
+ 33933 751b 905E     		.sleb128 -4336
+ 33934 751d 32       		.uleb128 0x32
+ 33935 751e DD0D0000 		.long	0xddd
+ 33936 7522 03       		.byte	0x3
+ 33937 7523 91       		.byte	0x91
+ 33938 7524 A05E     		.sleb128 -4320
+ 33939 7526 00       		.byte	0x0
+ 33940 7527 00       		.byte	0x0
+ 33941 7528 31       		.uleb128 0x31
+ 33942 7529 FB0D0000 		.long	0xdfb
+ 33943 752d 00000000 		.quad	.LBB2230
+ 33943      00000000 
+ 33944 7535 00000000 		.quad	.LBE2230
+ 33944      00000000 
+ 33945 753d 02       		.byte	0x2
+ 33946 753e 6603     		.value	0x366
+ 33947 7540 57750000 		.long	0x7557
+ 33948 7544 32       		.uleb128 0x32
+ 33949 7545 160E0000 		.long	0xe16
+ 33950 7549 03       		.byte	0x3
+ 33951 754a 91       		.byte	0x91
+ 33952 754b B05E     		.sleb128 -4304
+ 33953 754d 32       		.uleb128 0x32
+ 33954 754e 0C0E0000 		.long	0xe0c
+ 33955 7552 03       		.byte	0x3
+ 33956 7553 91       		.byte	0x91
+ 33957 7554 C05E     		.sleb128 -4288
+ 33958 7556 00       		.byte	0x0
+ 33959 7557 31       		.uleb128 0x31
+ 33960 7558 A00D0000 		.long	0xda0
+ 33961 755c 00000000 		.quad	.LBB2232
+ 33961      00000000 
+ 33962 7564 00000000 		.quad	.LBE2232
+
GAS LISTING /tmp/ccjbMjHD.s 			page 893
+
+
+ 33962      00000000 
+ 33963 756c 02       		.byte	0x2
+ 33964 756d 6803     		.value	0x368
+ 33965 756f B1750000 		.long	0x75b1
+ 33966 7573 32       		.uleb128 0x32
+ 33967 7574 BE0D0000 		.long	0xdbe
+ 33968 7578 03       		.byte	0x3
+ 33969 7579 91       		.byte	0x91
+ 33970 757a D05E     		.sleb128 -4272
+ 33971 757c 32       		.uleb128 0x32
+ 33972 757d B20D0000 		.long	0xdb2
+ 33973 7581 03       		.byte	0x3
+ 33974 7582 91       		.byte	0x91
+ 33975 7583 E05E     		.sleb128 -4256
+ 33976 7585 35       		.uleb128 0x35
+ 33977 7586 CB0D0000 		.long	0xdcb
+ 33978 758a 00000000 		.quad	.LBB2234
+ 33978      00000000 
+ 33979 7592 00000000 		.quad	.LBE2234
+ 33979      00000000 
+ 33980 759a 02       		.byte	0x2
+ 33981 759b 7501     		.value	0x175
+ 33982 759d 32       		.uleb128 0x32
+ 33983 759e E90D0000 		.long	0xde9
+ 33984 75a2 03       		.byte	0x3
+ 33985 75a3 91       		.byte	0x91
+ 33986 75a4 F05E     		.sleb128 -4240
+ 33987 75a6 32       		.uleb128 0x32
+ 33988 75a7 DD0D0000 		.long	0xddd
+ 33989 75ab 03       		.byte	0x3
+ 33990 75ac 91       		.byte	0x91
+ 33991 75ad 805F     		.sleb128 -4224
+ 33992 75af 00       		.byte	0x0
+ 33993 75b0 00       		.byte	0x0
+ 33994 75b1 31       		.uleb128 0x31
+ 33995 75b2 FB0D0000 		.long	0xdfb
+ 33996 75b6 00000000 		.quad	.LBB2236
+ 33996      00000000 
+ 33997 75be 00000000 		.quad	.LBE2236
+ 33997      00000000 
+ 33998 75c6 02       		.byte	0x2
+ 33999 75c7 6A03     		.value	0x36a
+ 34000 75c9 E0750000 		.long	0x75e0
+ 34001 75cd 32       		.uleb128 0x32
+ 34002 75ce 160E0000 		.long	0xe16
+ 34003 75d2 03       		.byte	0x3
+ 34004 75d3 91       		.byte	0x91
+ 34005 75d4 905F     		.sleb128 -4208
+ 34006 75d6 32       		.uleb128 0x32
+ 34007 75d7 0C0E0000 		.long	0xe0c
+ 34008 75db 03       		.byte	0x3
+ 34009 75dc 91       		.byte	0x91
+ 34010 75dd A05F     		.sleb128 -4192
+ 34011 75df 00       		.byte	0x0
+ 34012 75e0 31       		.uleb128 0x31
+ 34013 75e1 210E0000 		.long	0xe21
+ 34014 75e5 00000000 		.quad	.LBB2238
+
GAS LISTING /tmp/ccjbMjHD.s 			page 894
+
+
+ 34014      00000000 
+ 34015 75ed 00000000 		.quad	.LBE2238
+ 34015      00000000 
+ 34016 75f5 02       		.byte	0x2
+ 34017 75f6 6C03     		.value	0x36c
+ 34018 75f8 0F760000 		.long	0x760f
+ 34019 75fc 32       		.uleb128 0x32
+ 34020 75fd 3E0E0000 		.long	0xe3e
+ 34021 7601 03       		.byte	0x3
+ 34022 7602 91       		.byte	0x91
+ 34023 7603 B05F     		.sleb128 -4176
+ 34024 7605 32       		.uleb128 0x32
+ 34025 7606 330E0000 		.long	0xe33
+ 34026 760a 03       		.byte	0x3
+ 34027 760b 91       		.byte	0x91
+ 34028 760c C05F     		.sleb128 -4160
+ 34029 760e 00       		.byte	0x0
+ 34030 760f 35       		.uleb128 0x35
+ 34031 7610 4F0D0000 		.long	0xd4f
+ 34032 7614 00000000 		.quad	.LBB2240
+ 34032      00000000 
+ 34033 761c 00000000 		.quad	.LBE2240
+ 34033      00000000 
+ 34034 7624 02       		.byte	0x2
+ 34035 7625 6E03     		.value	0x36e
+ 34036 7627 32       		.uleb128 0x32
+ 34037 7628 6A0D0000 		.long	0xd6a
+ 34038 762c 03       		.byte	0x3
+ 34039 762d 91       		.byte	0x91
+ 34040 762e D05F     		.sleb128 -4144
+ 34041 7630 32       		.uleb128 0x32
+ 34042 7631 600D0000 		.long	0xd60
+ 34043 7635 03       		.byte	0x3
+ 34044 7636 91       		.byte	0x91
+ 34045 7637 E05F     		.sleb128 -4128
+ 34046 7639 00       		.byte	0x0
+ 34047 763a 00       		.byte	0x0
+ 34048 763b 00       		.byte	0x0
+ 34049 763c 00       		.byte	0x0
+ 34050 763d 36       		.uleb128 0x36
+ 34051 763e 00000000 		.quad	.LBB2242
+ 34051      00000000 
+ 34052 7646 00000000 		.quad	.LBE2242
+ 34052      00000000 
+ 34053 764e 5D760000 		.long	0x765d
+ 34054 7652 34       		.uleb128 0x34
+ 34055 7653 1C0C0000 		.long	0xc1c
+ 34056 7657 04       		.byte	0x4
+ 34057 7658 91       		.byte	0x91
+ 34058 7659 D0BE7F   		.sleb128 -8368
+ 34059 765c 00       		.byte	0x0
+ 34060 765d 31       		.uleb128 0x31
+ 34061 765e 4A0E0000 		.long	0xe4a
+ 34062 7662 00000000 		.quad	.LBB2243
+ 34062      00000000 
+ 34063 766a 00000000 		.quad	.LBE2243
+ 34063      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 895
+
+
+ 34064 7672 02       		.byte	0x2
+ 34065 7673 9406     		.value	0x694
+ 34066 7675 FA760000 		.long	0x76fa
+ 34067 7679 32       		.uleb128 0x32
+ 34068 767a 5C0E0000 		.long	0xe5c
+ 34069 767e 03       		.byte	0x3
+ 34070 767f 91       		.byte	0x91
+ 34071 7680 F05F     		.sleb128 -4112
+ 34072 7682 33       		.uleb128 0x33
+ 34073 7683 00000000 		.quad	.LBB2244
+ 34073      00000000 
+ 34074 768b 00000000 		.quad	.LBE2244
+ 34074      00000000 
+ 34075 7693 34       		.uleb128 0x34
+ 34076 7694 680E0000 		.long	0xe68
+ 34077 7698 09       		.byte	0x9
+ 34078 7699 03       		.byte	0x3
+ 34079 769a 00000000 		.quad	ShiftRowTable.7385
+ 34079      00000000 
+ 34080 76a2 35       		.uleb128 0x35
+ 34081 76a3 A00D0000 		.long	0xda0
+ 34082 76a7 00000000 		.quad	.LBB2245
+ 34082      00000000 
+ 34083 76af 00000000 		.quad	.LBE2245
+ 34083      00000000 
+ 34084 76b7 02       		.byte	0x2
+ 34085 76b8 9B02     		.value	0x29b
+ 34086 76ba 32       		.uleb128 0x32
+ 34087 76bb BE0D0000 		.long	0xdbe
+ 34088 76bf 03       		.byte	0x3
+ 34089 76c0 91       		.byte	0x91
+ 34090 76c1 8060     		.sleb128 -4096
+ 34091 76c3 32       		.uleb128 0x32
+ 34092 76c4 B20D0000 		.long	0xdb2
+ 34093 76c8 03       		.byte	0x3
+ 34094 76c9 91       		.byte	0x91
+ 34095 76ca 9060     		.sleb128 -4080
+ 34096 76cc 35       		.uleb128 0x35
+ 34097 76cd CB0D0000 		.long	0xdcb
+ 34098 76d1 00000000 		.quad	.LBB2247
+ 34098      00000000 
+ 34099 76d9 00000000 		.quad	.LBE2247
+ 34099      00000000 
+ 34100 76e1 02       		.byte	0x2
+ 34101 76e2 7501     		.value	0x175
+ 34102 76e4 32       		.uleb128 0x32
+ 34103 76e5 E90D0000 		.long	0xde9
+ 34104 76e9 03       		.byte	0x3
+ 34105 76ea 91       		.byte	0x91
+ 34106 76eb A060     		.sleb128 -4064
+ 34107 76ed 32       		.uleb128 0x32
+ 34108 76ee DD0D0000 		.long	0xddd
+ 34109 76f2 03       		.byte	0x3
+ 34110 76f3 91       		.byte	0x91
+ 34111 76f4 B060     		.sleb128 -4048
+ 34112 76f6 00       		.byte	0x0
+ 34113 76f7 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 896
+
+
+ 34114 76f8 00       		.byte	0x0
+ 34115 76f9 00       		.byte	0x0
+ 34116 76fa 36       		.uleb128 0x36
+ 34117 76fb 00000000 		.quad	.LBB2249
+ 34117      00000000 
+ 34118 7703 00000000 		.quad	.LBE2249
+ 34118      00000000 
+ 34119 770b 1A770000 		.long	0x771a
+ 34120 770f 34       		.uleb128 0x34
+ 34121 7710 2C0C0000 		.long	0xc2c
+ 34122 7714 04       		.byte	0x4
+ 34123 7715 91       		.byte	0x91
+ 34124 7716 C0BE7F   		.sleb128 -8384
+ 34125 7719 00       		.byte	0x0
+ 34126 771a 31       		.uleb128 0x31
+ 34127 771b 860E0000 		.long	0xe86
+ 34128 771f 00000000 		.quad	.LBB2250
+ 34128      00000000 
+ 34129 7727 00000000 		.quad	.LBE2250
+ 34129      00000000 
+ 34130 772f 02       		.byte	0x2
+ 34131 7730 9606     		.value	0x696
+ 34132 7732 49770000 		.long	0x7749
+ 34133 7736 32       		.uleb128 0x32
+ 34134 7737 A10E0000 		.long	0xea1
+ 34135 773b 03       		.byte	0x3
+ 34136 773c 91       		.byte	0x91
+ 34137 773d C060     		.sleb128 -4032
+ 34138 773f 32       		.uleb128 0x32
+ 34139 7740 970E0000 		.long	0xe97
+ 34140 7744 03       		.byte	0x3
+ 34141 7745 91       		.byte	0x91
+ 34142 7746 D060     		.sleb128 -4016
+ 34143 7748 00       		.byte	0x0
+ 34144 7749 36       		.uleb128 0x36
+ 34145 774a 00000000 		.quad	.LBB2252
+ 34145      00000000 
+ 34146 7752 00000000 		.quad	.LBE2252
+ 34146      00000000 
+ 34147 775a 69770000 		.long	0x7769
+ 34148 775e 34       		.uleb128 0x34
+ 34149 775f 3C0C0000 		.long	0xc3c
+ 34150 7763 04       		.byte	0x4
+ 34151 7764 91       		.byte	0x91
+ 34152 7765 B0BE7F   		.sleb128 -8400
+ 34153 7768 00       		.byte	0x0
+ 34154 7769 31       		.uleb128 0x31
+ 34155 776a AC0E0000 		.long	0xeac
+ 34156 776e 00000000 		.quad	.LBB2253
+ 34156      00000000 
+ 34157 7776 00000000 		.quad	.LBE2253
+ 34157      00000000 
+ 34158 777e 02       		.byte	0x2
+ 34159 777f 9806     		.value	0x698
+ 34160 7781 BA770000 		.long	0x77ba
+ 34161 7785 32       		.uleb128 0x32
+ 34162 7786 BE0E0000 		.long	0xebe
+
GAS LISTING /tmp/ccjbMjHD.s 			page 897
+
+
+ 34163 778a 03       		.byte	0x3
+ 34164 778b 91       		.byte	0x91
+ 34165 778c E060     		.sleb128 -4000
+ 34166 778e 35       		.uleb128 0x35
+ 34167 778f CB0E0000 		.long	0xecb
+ 34168 7793 00000000 		.quad	.LBB2255
+ 34168      00000000 
+ 34169 779b 00000000 		.quad	.LBE2255
+ 34169      00000000 
+ 34170 77a3 02       		.byte	0x2
+ 34171 77a4 4905     		.value	0x549
+ 34172 77a6 32       		.uleb128 0x32
+ 34173 77a7 E90E0000 		.long	0xee9
+ 34174 77ab 03       		.byte	0x3
+ 34175 77ac 91       		.byte	0x91
+ 34176 77ad FC60     		.sleb128 -3972
+ 34177 77af 32       		.uleb128 0x32
+ 34178 77b0 DD0E0000 		.long	0xedd
+ 34179 77b4 03       		.byte	0x3
+ 34180 77b5 91       		.byte	0x91
+ 34181 77b6 8061     		.sleb128 -3968
+ 34182 77b8 00       		.byte	0x0
+ 34183 77b9 00       		.byte	0x0
+ 34184 77ba 33       		.uleb128 0x33
+ 34185 77bb 00000000 		.quad	.LBB2257
+ 34185      00000000 
+ 34186 77c3 00000000 		.quad	.LBE2257
+ 34186      00000000 
+ 34187 77cb 34       		.uleb128 0x34
+ 34188 77cc 480C0000 		.long	0xc48
+ 34189 77d0 04       		.byte	0x4
+ 34190 77d1 91       		.byte	0x91
+ 34191 77d2 A0BE7F   		.sleb128 -8416
+ 34192 77d5 00       		.byte	0x0
+ 34193 77d6 00       		.byte	0x0
+ 34194 77d7 00       		.byte	0x0
+ 34195 77d8 31       		.uleb128 0x31
+ 34196 77d9 AC0E0000 		.long	0xeac
+ 34197 77dd 00000000 		.quad	.LBB2258
+ 34197      00000000 
+ 34198 77e5 00000000 		.quad	.LBE2258
+ 34198      00000000 
+ 34199 77ed 02       		.byte	0x2
+ 34200 77ee 2A07     		.value	0x72a
+ 34201 77f0 29780000 		.long	0x7829
+ 34202 77f4 32       		.uleb128 0x32
+ 34203 77f5 BE0E0000 		.long	0xebe
+ 34204 77f9 03       		.byte	0x3
+ 34205 77fa 91       		.byte	0x91
+ 34206 77fb 9061     		.sleb128 -3952
+ 34207 77fd 35       		.uleb128 0x35
+ 34208 77fe CB0E0000 		.long	0xecb
+ 34209 7802 00000000 		.quad	.LBB2260
+ 34209      00000000 
+ 34210 780a 00000000 		.quad	.LBE2260
+ 34210      00000000 
+ 34211 7812 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 898
+
+
+ 34212 7813 4905     		.value	0x549
+ 34213 7815 32       		.uleb128 0x32
+ 34214 7816 E90E0000 		.long	0xee9
+ 34215 781a 03       		.byte	0x3
+ 34216 781b 91       		.byte	0x91
+ 34217 781c AC61     		.sleb128 -3924
+ 34218 781e 32       		.uleb128 0x32
+ 34219 781f DD0E0000 		.long	0xedd
+ 34220 7823 03       		.byte	0x3
+ 34221 7824 91       		.byte	0x91
+ 34222 7825 B061     		.sleb128 -3920
+ 34223 7827 00       		.byte	0x0
+ 34224 7828 00       		.byte	0x0
+ 34225 7829 31       		.uleb128 0x31
+ 34226 782a 71560000 		.long	0x5671
+ 34227 782e 00000000 		.quad	.LBB2262
+ 34227      00000000 
+ 34228 7836 00000000 		.quad	.LBE2262
+ 34228      00000000 
+ 34229 783e 02       		.byte	0x2
+ 34230 783f 3207     		.value	0x732
+ 34231 7841 F3780000 		.long	0x78f3
+ 34232 7845 32       		.uleb128 0x32
+ 34233 7846 8F560000 		.long	0x568f
+ 34234 784a 03       		.byte	0x3
+ 34235 784b 91       		.byte	0x91
+ 34236 784c CC61     		.sleb128 -3892
+ 34237 784e 32       		.uleb128 0x32
+ 34238 784f 83560000 		.long	0x5683
+ 34239 7853 03       		.byte	0x3
+ 34240 7854 91       		.byte	0x91
+ 34241 7855 D061     		.sleb128 -3888
+ 34242 7857 33       		.uleb128 0x33
+ 34243 7858 00000000 		.quad	.LBB2263
+ 34243      00000000 
+ 34244 7860 00000000 		.quad	.LBE2263
+ 34244      00000000 
+ 34245 7868 34       		.uleb128 0x34
+ 34246 7869 9B560000 		.long	0x569b
+ 34247 786d 04       		.byte	0x4
+ 34248 786e 91       		.byte	0x91
+ 34249 786f F0BE7F   		.sleb128 -8336
+ 34250 7872 34       		.uleb128 0x34
+ 34251 7873 A5560000 		.long	0x56a5
+ 34252 7877 03       		.byte	0x3
+ 34253 7878 91       		.byte	0x91
+ 34254 7879 F061     		.sleb128 -3856
+ 34255 787b 34       		.uleb128 0x34
+ 34256 787c B1560000 		.long	0x56b1
+ 34257 7880 03       		.byte	0x3
+ 34258 7881 91       		.byte	0x91
+ 34259 7882 EC61     		.sleb128 -3860
+ 34260 7884 31       		.uleb128 0x31
+ 34261 7885 BE560000 		.long	0x56be
+ 34262 7889 00000000 		.quad	.LBB2264
+ 34262      00000000 
+ 34263 7891 00000000 		.quad	.LBE2264
+
GAS LISTING /tmp/ccjbMjHD.s 			page 899
+
+
+ 34263      00000000 
+ 34264 7899 02       		.byte	0x2
+ 34265 789a 5F06     		.value	0x65f
+ 34266 789c CF780000 		.long	0x78cf
+ 34267 78a0 32       		.uleb128 0x32
+ 34268 78a1 D0560000 		.long	0x56d0
+ 34269 78a5 03       		.byte	0x3
+ 34270 78a6 91       		.byte	0x91
+ 34271 78a7 F461     		.sleb128 -3852
+ 34272 78a9 33       		.uleb128 0x33
+ 34273 78aa 00000000 		.quad	.LBB2265
+ 34273      00000000 
+ 34274 78b2 00000000 		.quad	.LBE2265
+ 34274      00000000 
+ 34275 78ba 34       		.uleb128 0x34
+ 34276 78bb DA560000 		.long	0x56da
+ 34277 78bf 04       		.byte	0x4
+ 34278 78c0 91       		.byte	0x91
+ 34279 78c1 E0BE7F   		.sleb128 -8352
+ 34280 78c4 34       		.uleb128 0x34
+ 34281 78c5 E6560000 		.long	0x56e6
+ 34282 78c9 03       		.byte	0x3
+ 34283 78ca 91       		.byte	0x91
+ 34284 78cb F861     		.sleb128 -3848
+ 34285 78cd 00       		.byte	0x0
+ 34286 78ce 00       		.byte	0x0
+ 34287 78cf 35       		.uleb128 0x35
+ 34288 78d0 F2560000 		.long	0x56f2
+ 34289 78d4 00000000 		.quad	.LBB2266
+ 34289      00000000 
+ 34290 78dc 00000000 		.quad	.LBE2266
+ 34290      00000000 
+ 34291 78e4 02       		.byte	0x2
+ 34292 78e5 6006     		.value	0x660
+ 34293 78e7 32       		.uleb128 0x32
+ 34294 78e8 04570000 		.long	0x5704
+ 34295 78ec 03       		.byte	0x3
+ 34296 78ed 91       		.byte	0x91
+ 34297 78ee FC61     		.sleb128 -3844
+ 34298 78f0 00       		.byte	0x0
+ 34299 78f1 00       		.byte	0x0
+ 34300 78f2 00       		.byte	0x0
+ 34301 78f3 31       		.uleb128 0x31
+ 34302 78f4 F60E0000 		.long	0xef6
+ 34303 78f8 00000000 		.quad	.LBB2268
+ 34303      00000000 
+ 34304 7900 00000000 		.quad	.LBE2268
+ 34304      00000000 
+ 34305 7908 02       		.byte	0x2
+ 34306 7909 3407     		.value	0x734
+ 34307 790b 087B0000 		.long	0x7b08
+ 34308 790f 32       		.uleb128 0x32
+ 34309 7910 080F0000 		.long	0xf08
+ 34310 7914 03       		.byte	0x3
+ 34311 7915 91       		.byte	0x91
+ 34312 7916 8062     		.sleb128 -3840
+ 34313 7918 33       		.uleb128 0x33
+
GAS LISTING /tmp/ccjbMjHD.s 			page 900
+
+
+ 34314 7919 00000000 		.quad	.LBB2269
+ 34314      00000000 
+ 34315 7921 00000000 		.quad	.LBE2269
+ 34315      00000000 
+ 34316 7929 34       		.uleb128 0x34
+ 34317 792a 140F0000 		.long	0xf14
+ 34318 792e 04       		.byte	0x4
+ 34319 792f 76       		.byte	0x76
+ 34320 7930 F0BB7F   		.sleb128 -8720
+ 34321 7933 31       		.uleb128 0x31
+ 34322 7934 210F0000 		.long	0xf21
+ 34323 7938 00000000 		.quad	.LBB2270
+ 34323      00000000 
+ 34324 7940 00000000 		.quad	.LBE2270
+ 34324      00000000 
+ 34325 7948 02       		.byte	0x2
+ 34326 7949 1F06     		.value	0x61f
+ 34327 794b D0790000 		.long	0x79d0
+ 34328 794f 32       		.uleb128 0x32
+ 34329 7950 330F0000 		.long	0xf33
+ 34330 7954 03       		.byte	0x3
+ 34331 7955 91       		.byte	0x91
+ 34332 7956 9062     		.sleb128 -3824
+ 34333 7958 33       		.uleb128 0x33
+ 34334 7959 00000000 		.quad	.LBB2271
+ 34334      00000000 
+ 34335 7961 00000000 		.quad	.LBE2271
+ 34335      00000000 
+ 34336 7969 34       		.uleb128 0x34
+ 34337 796a 3F0F0000 		.long	0xf3f
+ 34338 796e 09       		.byte	0x9
+ 34339 796f 03       		.byte	0x3
+ 34340 7970 00000000 		.quad	mask.7943
+ 34340      00000000 
+ 34341 7978 35       		.uleb128 0x35
+ 34342 7979 A00D0000 		.long	0xda0
+ 34343 797d 00000000 		.quad	.LBB2272
+ 34343      00000000 
+ 34344 7985 00000000 		.quad	.LBE2272
+ 34344      00000000 
+ 34345 798d 02       		.byte	0x2
+ 34346 798e FE04     		.value	0x4fe
+ 34347 7990 32       		.uleb128 0x32
+ 34348 7991 BE0D0000 		.long	0xdbe
+ 34349 7995 03       		.byte	0x3
+ 34350 7996 91       		.byte	0x91
+ 34351 7997 A062     		.sleb128 -3808
+ 34352 7999 32       		.uleb128 0x32
+ 34353 799a B20D0000 		.long	0xdb2
+ 34354 799e 03       		.byte	0x3
+ 34355 799f 91       		.byte	0x91
+ 34356 79a0 B062     		.sleb128 -3792
+ 34357 79a2 35       		.uleb128 0x35
+ 34358 79a3 CB0D0000 		.long	0xdcb
+ 34359 79a7 00000000 		.quad	.LBB2274
+ 34359      00000000 
+ 34360 79af 00000000 		.quad	.LBE2274
+
GAS LISTING /tmp/ccjbMjHD.s 			page 901
+
+
+ 34360      00000000 
+ 34361 79b7 02       		.byte	0x2
+ 34362 79b8 7501     		.value	0x175
+ 34363 79ba 32       		.uleb128 0x32
+ 34364 79bb E90D0000 		.long	0xde9
+ 34365 79bf 03       		.byte	0x3
+ 34366 79c0 91       		.byte	0x91
+ 34367 79c1 C062     		.sleb128 -3776
+ 34368 79c3 32       		.uleb128 0x32
+ 34369 79c4 DD0D0000 		.long	0xddd
+ 34370 79c8 03       		.byte	0x3
+ 34371 79c9 91       		.byte	0x91
+ 34372 79ca D062     		.sleb128 -3760
+ 34373 79cc 00       		.byte	0x0
+ 34374 79cd 00       		.byte	0x0
+ 34375 79ce 00       		.byte	0x0
+ 34376 79cf 00       		.byte	0x0
+ 34377 79d0 31       		.uleb128 0x31
+ 34378 79d1 210F0000 		.long	0xf21
+ 34379 79d5 00000000 		.quad	.LBB2276
+ 34379      00000000 
+ 34380 79dd 00000000 		.quad	.LBE2276
+ 34380      00000000 
+ 34381 79e5 02       		.byte	0x2
+ 34382 79e6 2006     		.value	0x620
+ 34383 79e8 6D7A0000 		.long	0x7a6d
+ 34384 79ec 32       		.uleb128 0x32
+ 34385 79ed 330F0000 		.long	0xf33
+ 34386 79f1 03       		.byte	0x3
+ 34387 79f2 91       		.byte	0x91
+ 34388 79f3 E062     		.sleb128 -3744
+ 34389 79f5 33       		.uleb128 0x33
+ 34390 79f6 00000000 		.quad	.LBB2277
+ 34390      00000000 
+ 34391 79fe 00000000 		.quad	.LBE2277
+ 34391      00000000 
+ 34392 7a06 34       		.uleb128 0x34
+ 34393 7a07 3F0F0000 		.long	0xf3f
+ 34394 7a0b 09       		.byte	0x9
+ 34395 7a0c 03       		.byte	0x3
+ 34396 7a0d 00000000 		.quad	mask.7943
+ 34396      00000000 
+ 34397 7a15 35       		.uleb128 0x35
+ 34398 7a16 A00D0000 		.long	0xda0
+ 34399 7a1a 00000000 		.quad	.LBB2278
+ 34399      00000000 
+ 34400 7a22 00000000 		.quad	.LBE2278
+ 34400      00000000 
+ 34401 7a2a 02       		.byte	0x2
+ 34402 7a2b FE04     		.value	0x4fe
+ 34403 7a2d 32       		.uleb128 0x32
+ 34404 7a2e BE0D0000 		.long	0xdbe
+ 34405 7a32 03       		.byte	0x3
+ 34406 7a33 91       		.byte	0x91
+ 34407 7a34 F062     		.sleb128 -3728
+ 34408 7a36 32       		.uleb128 0x32
+ 34409 7a37 B20D0000 		.long	0xdb2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 902
+
+
+ 34410 7a3b 03       		.byte	0x3
+ 34411 7a3c 91       		.byte	0x91
+ 34412 7a3d 8063     		.sleb128 -3712
+ 34413 7a3f 35       		.uleb128 0x35
+ 34414 7a40 CB0D0000 		.long	0xdcb
+ 34415 7a44 00000000 		.quad	.LBB2280
+ 34415      00000000 
+ 34416 7a4c 00000000 		.quad	.LBE2280
+ 34416      00000000 
+ 34417 7a54 02       		.byte	0x2
+ 34418 7a55 7501     		.value	0x175
+ 34419 7a57 32       		.uleb128 0x32
+ 34420 7a58 E90D0000 		.long	0xde9
+ 34421 7a5c 03       		.byte	0x3
+ 34422 7a5d 91       		.byte	0x91
+ 34423 7a5e 9063     		.sleb128 -3696
+ 34424 7a60 32       		.uleb128 0x32
+ 34425 7a61 DD0D0000 		.long	0xddd
+ 34426 7a65 03       		.byte	0x3
+ 34427 7a66 91       		.byte	0x91
+ 34428 7a67 A063     		.sleb128 -3680
+ 34429 7a69 00       		.byte	0x0
+ 34430 7a6a 00       		.byte	0x0
+ 34431 7a6b 00       		.byte	0x0
+ 34432 7a6c 00       		.byte	0x0
+ 34433 7a6d 35       		.uleb128 0x35
+ 34434 7a6e 210F0000 		.long	0xf21
+ 34435 7a72 00000000 		.quad	.LBB2282
+ 34435      00000000 
+ 34436 7a7a 00000000 		.quad	.LBE2282
+ 34436      00000000 
+ 34437 7a82 02       		.byte	0x2
+ 34438 7a83 2106     		.value	0x621
+ 34439 7a85 32       		.uleb128 0x32
+ 34440 7a86 330F0000 		.long	0xf33
+ 34441 7a8a 03       		.byte	0x3
+ 34442 7a8b 91       		.byte	0x91
+ 34443 7a8c B063     		.sleb128 -3664
+ 34444 7a8e 33       		.uleb128 0x33
+ 34445 7a8f 00000000 		.quad	.LBB2283
+ 34445      00000000 
+ 34446 7a97 00000000 		.quad	.LBE2283
+ 34446      00000000 
+ 34447 7a9f 34       		.uleb128 0x34
+ 34448 7aa0 3F0F0000 		.long	0xf3f
+ 34449 7aa4 09       		.byte	0x9
+ 34450 7aa5 03       		.byte	0x3
+ 34451 7aa6 00000000 		.quad	mask.7943
+ 34451      00000000 
+ 34452 7aae 35       		.uleb128 0x35
+ 34453 7aaf A00D0000 		.long	0xda0
+ 34454 7ab3 00000000 		.quad	.LBB2284
+ 34454      00000000 
+ 34455 7abb 00000000 		.quad	.LBE2284
+ 34455      00000000 
+ 34456 7ac3 02       		.byte	0x2
+ 34457 7ac4 FE04     		.value	0x4fe
+
GAS LISTING /tmp/ccjbMjHD.s 			page 903
+
+
+ 34458 7ac6 32       		.uleb128 0x32
+ 34459 7ac7 BE0D0000 		.long	0xdbe
+ 34460 7acb 03       		.byte	0x3
+ 34461 7acc 91       		.byte	0x91
+ 34462 7acd C063     		.sleb128 -3648
+ 34463 7acf 32       		.uleb128 0x32
+ 34464 7ad0 B20D0000 		.long	0xdb2
+ 34465 7ad4 03       		.byte	0x3
+ 34466 7ad5 91       		.byte	0x91
+ 34467 7ad6 D063     		.sleb128 -3632
+ 34468 7ad8 35       		.uleb128 0x35
+ 34469 7ad9 CB0D0000 		.long	0xdcb
+ 34470 7add 00000000 		.quad	.LBB2286
+ 34470      00000000 
+ 34471 7ae5 00000000 		.quad	.LBE2286
+ 34471      00000000 
+ 34472 7aed 02       		.byte	0x2
+ 34473 7aee 7501     		.value	0x175
+ 34474 7af0 32       		.uleb128 0x32
+ 34475 7af1 E90D0000 		.long	0xde9
+ 34476 7af5 03       		.byte	0x3
+ 34477 7af6 91       		.byte	0x91
+ 34478 7af7 E063     		.sleb128 -3616
+ 34479 7af9 32       		.uleb128 0x32
+ 34480 7afa DD0D0000 		.long	0xddd
+ 34481 7afe 03       		.byte	0x3
+ 34482 7aff 91       		.byte	0x91
+ 34483 7b00 F063     		.sleb128 -3600
+ 34484 7b02 00       		.byte	0x0
+ 34485 7b03 00       		.byte	0x0
+ 34486 7b04 00       		.byte	0x0
+ 34487 7b05 00       		.byte	0x0
+ 34488 7b06 00       		.byte	0x0
+ 34489 7b07 00       		.byte	0x0
+ 34490 7b08 31       		.uleb128 0x31
+ 34491 7b09 F60E0000 		.long	0xef6
+ 34492 7b0d 00000000 		.quad	.LBB2288
+ 34492      00000000 
+ 34493 7b15 00000000 		.quad	.LBE2288
+ 34493      00000000 
+ 34494 7b1d 02       		.byte	0x2
+ 34495 7b1e 3607     		.value	0x736
+ 34496 7b20 1D7D0000 		.long	0x7d1d
+ 34497 7b24 32       		.uleb128 0x32
+ 34498 7b25 080F0000 		.long	0xf08
+ 34499 7b29 03       		.byte	0x3
+ 34500 7b2a 91       		.byte	0x91
+ 34501 7b2b 8064     		.sleb128 -3584
+ 34502 7b2d 33       		.uleb128 0x33
+ 34503 7b2e 00000000 		.quad	.LBB2289
+ 34503      00000000 
+ 34504 7b36 00000000 		.quad	.LBE2289
+ 34504      00000000 
+ 34505 7b3e 34       		.uleb128 0x34
+ 34506 7b3f 140F0000 		.long	0xf14
+ 34507 7b43 04       		.byte	0x4
+ 34508 7b44 76       		.byte	0x76
+
GAS LISTING /tmp/ccjbMjHD.s 			page 904
+
+
+ 34509 7b45 80BC7F   		.sleb128 -8704
+ 34510 7b48 31       		.uleb128 0x31
+ 34511 7b49 210F0000 		.long	0xf21
+ 34512 7b4d 00000000 		.quad	.LBB2290
+ 34512      00000000 
+ 34513 7b55 00000000 		.quad	.LBE2290
+ 34513      00000000 
+ 34514 7b5d 02       		.byte	0x2
+ 34515 7b5e 1F06     		.value	0x61f
+ 34516 7b60 E57B0000 		.long	0x7be5
+ 34517 7b64 32       		.uleb128 0x32
+ 34518 7b65 330F0000 		.long	0xf33
+ 34519 7b69 03       		.byte	0x3
+ 34520 7b6a 91       		.byte	0x91
+ 34521 7b6b 9064     		.sleb128 -3568
+ 34522 7b6d 33       		.uleb128 0x33
+ 34523 7b6e 00000000 		.quad	.LBB2291
+ 34523      00000000 
+ 34524 7b76 00000000 		.quad	.LBE2291
+ 34524      00000000 
+ 34525 7b7e 34       		.uleb128 0x34
+ 34526 7b7f 3F0F0000 		.long	0xf3f
+ 34527 7b83 09       		.byte	0x9
+ 34528 7b84 03       		.byte	0x3
+ 34529 7b85 00000000 		.quad	mask.7943
+ 34529      00000000 
+ 34530 7b8d 35       		.uleb128 0x35
+ 34531 7b8e A00D0000 		.long	0xda0
+ 34532 7b92 00000000 		.quad	.LBB2292
+ 34532      00000000 
+ 34533 7b9a 00000000 		.quad	.LBE2292
+ 34533      00000000 
+ 34534 7ba2 02       		.byte	0x2
+ 34535 7ba3 FE04     		.value	0x4fe
+ 34536 7ba5 32       		.uleb128 0x32
+ 34537 7ba6 BE0D0000 		.long	0xdbe
+ 34538 7baa 03       		.byte	0x3
+ 34539 7bab 91       		.byte	0x91
+ 34540 7bac A064     		.sleb128 -3552
+ 34541 7bae 32       		.uleb128 0x32
+ 34542 7baf B20D0000 		.long	0xdb2
+ 34543 7bb3 03       		.byte	0x3
+ 34544 7bb4 91       		.byte	0x91
+ 34545 7bb5 B064     		.sleb128 -3536
+ 34546 7bb7 35       		.uleb128 0x35
+ 34547 7bb8 CB0D0000 		.long	0xdcb
+ 34548 7bbc 00000000 		.quad	.LBB2294
+ 34548      00000000 
+ 34549 7bc4 00000000 		.quad	.LBE2294
+ 34549      00000000 
+ 34550 7bcc 02       		.byte	0x2
+ 34551 7bcd 7501     		.value	0x175
+ 34552 7bcf 32       		.uleb128 0x32
+ 34553 7bd0 E90D0000 		.long	0xde9
+ 34554 7bd4 03       		.byte	0x3
+ 34555 7bd5 91       		.byte	0x91
+ 34556 7bd6 C064     		.sleb128 -3520
+
GAS LISTING /tmp/ccjbMjHD.s 			page 905
+
+
+ 34557 7bd8 32       		.uleb128 0x32
+ 34558 7bd9 DD0D0000 		.long	0xddd
+ 34559 7bdd 03       		.byte	0x3
+ 34560 7bde 91       		.byte	0x91
+ 34561 7bdf D064     		.sleb128 -3504
+ 34562 7be1 00       		.byte	0x0
+ 34563 7be2 00       		.byte	0x0
+ 34564 7be3 00       		.byte	0x0
+ 34565 7be4 00       		.byte	0x0
+ 34566 7be5 31       		.uleb128 0x31
+ 34567 7be6 210F0000 		.long	0xf21
+ 34568 7bea 00000000 		.quad	.LBB2296
+ 34568      00000000 
+ 34569 7bf2 00000000 		.quad	.LBE2296
+ 34569      00000000 
+ 34570 7bfa 02       		.byte	0x2
+ 34571 7bfb 2006     		.value	0x620
+ 34572 7bfd 827C0000 		.long	0x7c82
+ 34573 7c01 32       		.uleb128 0x32
+ 34574 7c02 330F0000 		.long	0xf33
+ 34575 7c06 03       		.byte	0x3
+ 34576 7c07 91       		.byte	0x91
+ 34577 7c08 E064     		.sleb128 -3488
+ 34578 7c0a 33       		.uleb128 0x33
+ 34579 7c0b 00000000 		.quad	.LBB2297
+ 34579      00000000 
+ 34580 7c13 00000000 		.quad	.LBE2297
+ 34580      00000000 
+ 34581 7c1b 34       		.uleb128 0x34
+ 34582 7c1c 3F0F0000 		.long	0xf3f
+ 34583 7c20 09       		.byte	0x9
+ 34584 7c21 03       		.byte	0x3
+ 34585 7c22 00000000 		.quad	mask.7943
+ 34585      00000000 
+ 34586 7c2a 35       		.uleb128 0x35
+ 34587 7c2b A00D0000 		.long	0xda0
+ 34588 7c2f 00000000 		.quad	.LBB2298
+ 34588      00000000 
+ 34589 7c37 00000000 		.quad	.LBE2298
+ 34589      00000000 
+ 34590 7c3f 02       		.byte	0x2
+ 34591 7c40 FE04     		.value	0x4fe
+ 34592 7c42 32       		.uleb128 0x32
+ 34593 7c43 BE0D0000 		.long	0xdbe
+ 34594 7c47 03       		.byte	0x3
+ 34595 7c48 91       		.byte	0x91
+ 34596 7c49 F064     		.sleb128 -3472
+ 34597 7c4b 32       		.uleb128 0x32
+ 34598 7c4c B20D0000 		.long	0xdb2
+ 34599 7c50 03       		.byte	0x3
+ 34600 7c51 91       		.byte	0x91
+ 34601 7c52 8065     		.sleb128 -3456
+ 34602 7c54 35       		.uleb128 0x35
+ 34603 7c55 CB0D0000 		.long	0xdcb
+ 34604 7c59 00000000 		.quad	.LBB2300
+ 34604      00000000 
+ 34605 7c61 00000000 		.quad	.LBE2300
+
GAS LISTING /tmp/ccjbMjHD.s 			page 906
+
+
+ 34605      00000000 
+ 34606 7c69 02       		.byte	0x2
+ 34607 7c6a 7501     		.value	0x175
+ 34608 7c6c 32       		.uleb128 0x32
+ 34609 7c6d E90D0000 		.long	0xde9
+ 34610 7c71 03       		.byte	0x3
+ 34611 7c72 91       		.byte	0x91
+ 34612 7c73 9065     		.sleb128 -3440
+ 34613 7c75 32       		.uleb128 0x32
+ 34614 7c76 DD0D0000 		.long	0xddd
+ 34615 7c7a 03       		.byte	0x3
+ 34616 7c7b 91       		.byte	0x91
+ 34617 7c7c A065     		.sleb128 -3424
+ 34618 7c7e 00       		.byte	0x0
+ 34619 7c7f 00       		.byte	0x0
+ 34620 7c80 00       		.byte	0x0
+ 34621 7c81 00       		.byte	0x0
+ 34622 7c82 35       		.uleb128 0x35
+ 34623 7c83 210F0000 		.long	0xf21
+ 34624 7c87 00000000 		.quad	.LBB2302
+ 34624      00000000 
+ 34625 7c8f 00000000 		.quad	.LBE2302
+ 34625      00000000 
+ 34626 7c97 02       		.byte	0x2
+ 34627 7c98 2106     		.value	0x621
+ 34628 7c9a 32       		.uleb128 0x32
+ 34629 7c9b 330F0000 		.long	0xf33
+ 34630 7c9f 03       		.byte	0x3
+ 34631 7ca0 91       		.byte	0x91
+ 34632 7ca1 B065     		.sleb128 -3408
+ 34633 7ca3 33       		.uleb128 0x33
+ 34634 7ca4 00000000 		.quad	.LBB2303
+ 34634      00000000 
+ 34635 7cac 00000000 		.quad	.LBE2303
+ 34635      00000000 
+ 34636 7cb4 34       		.uleb128 0x34
+ 34637 7cb5 3F0F0000 		.long	0xf3f
+ 34638 7cb9 09       		.byte	0x9
+ 34639 7cba 03       		.byte	0x3
+ 34640 7cbb 00000000 		.quad	mask.7943
+ 34640      00000000 
+ 34641 7cc3 35       		.uleb128 0x35
+ 34642 7cc4 A00D0000 		.long	0xda0
+ 34643 7cc8 00000000 		.quad	.LBB2304
+ 34643      00000000 
+ 34644 7cd0 00000000 		.quad	.LBE2304
+ 34644      00000000 
+ 34645 7cd8 02       		.byte	0x2
+ 34646 7cd9 FE04     		.value	0x4fe
+ 34647 7cdb 32       		.uleb128 0x32
+ 34648 7cdc BE0D0000 		.long	0xdbe
+ 34649 7ce0 03       		.byte	0x3
+ 34650 7ce1 91       		.byte	0x91
+ 34651 7ce2 C065     		.sleb128 -3392
+ 34652 7ce4 32       		.uleb128 0x32
+ 34653 7ce5 B20D0000 		.long	0xdb2
+ 34654 7ce9 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 907
+
+
+ 34655 7cea 91       		.byte	0x91
+ 34656 7ceb D065     		.sleb128 -3376
+ 34657 7ced 35       		.uleb128 0x35
+ 34658 7cee CB0D0000 		.long	0xdcb
+ 34659 7cf2 00000000 		.quad	.LBB2306
+ 34659      00000000 
+ 34660 7cfa 00000000 		.quad	.LBE2306
+ 34660      00000000 
+ 34661 7d02 02       		.byte	0x2
+ 34662 7d03 7501     		.value	0x175
+ 34663 7d05 32       		.uleb128 0x32
+ 34664 7d06 E90D0000 		.long	0xde9
+ 34665 7d0a 03       		.byte	0x3
+ 34666 7d0b 91       		.byte	0x91
+ 34667 7d0c E065     		.sleb128 -3360
+ 34668 7d0e 32       		.uleb128 0x32
+ 34669 7d0f DD0D0000 		.long	0xddd
+ 34670 7d13 03       		.byte	0x3
+ 34671 7d14 91       		.byte	0x91
+ 34672 7d15 F065     		.sleb128 -3344
+ 34673 7d17 00       		.byte	0x0
+ 34674 7d18 00       		.byte	0x0
+ 34675 7d19 00       		.byte	0x0
+ 34676 7d1a 00       		.byte	0x0
+ 34677 7d1b 00       		.byte	0x0
+ 34678 7d1c 00       		.byte	0x0
+ 34679 7d1d 31       		.uleb128 0x31
+ 34680 7d1e AC0E0000 		.long	0xeac
+ 34681 7d22 00000000 		.quad	.LBB2308
+ 34681      00000000 
+ 34682 7d2a 00000000 		.quad	.LBE2308
+ 34682      00000000 
+ 34683 7d32 02       		.byte	0x2
+ 34684 7d33 3707     		.value	0x737
+ 34685 7d35 6E7D0000 		.long	0x7d6e
+ 34686 7d39 32       		.uleb128 0x32
+ 34687 7d3a BE0E0000 		.long	0xebe
+ 34688 7d3e 03       		.byte	0x3
+ 34689 7d3f 91       		.byte	0x91
+ 34690 7d40 8066     		.sleb128 -3328
+ 34691 7d42 35       		.uleb128 0x35
+ 34692 7d43 CB0E0000 		.long	0xecb
+ 34693 7d47 00000000 		.quad	.LBB2310
+ 34693      00000000 
+ 34694 7d4f 00000000 		.quad	.LBE2310
+ 34694      00000000 
+ 34695 7d57 02       		.byte	0x2
+ 34696 7d58 4905     		.value	0x549
+ 34697 7d5a 32       		.uleb128 0x32
+ 34698 7d5b E90E0000 		.long	0xee9
+ 34699 7d5f 03       		.byte	0x3
+ 34700 7d60 91       		.byte	0x91
+ 34701 7d61 9C66     		.sleb128 -3300
+ 34702 7d63 32       		.uleb128 0x32
+ 34703 7d64 DD0E0000 		.long	0xedd
+ 34704 7d68 03       		.byte	0x3
+ 34705 7d69 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 908
+
+
+ 34706 7d6a A066     		.sleb128 -3296
+ 34707 7d6c 00       		.byte	0x0
+ 34708 7d6d 00       		.byte	0x0
+ 34709 7d6e 31       		.uleb128 0x31
+ 34710 7d6f 0F570000 		.long	0x570f
+ 34711 7d73 00000000 		.quad	.LBB2312
+ 34711      00000000 
+ 34712 7d7b 00000000 		.quad	.LBE2312
+ 34712      00000000 
+ 34713 7d83 02       		.byte	0x2
+ 34714 7d84 3907     		.value	0x739
+ 34715 7d86 D17D0000 		.long	0x7dd1
+ 34716 7d8a 32       		.uleb128 0x32
+ 34717 7d8b 2B570000 		.long	0x572b
+ 34718 7d8f 03       		.byte	0x3
+ 34719 7d90 91       		.byte	0x91
+ 34720 7d91 B066     		.sleb128 -3280
+ 34721 7d93 32       		.uleb128 0x32
+ 34722 7d94 21570000 		.long	0x5721
+ 34723 7d98 03       		.byte	0x3
+ 34724 7d99 91       		.byte	0x91
+ 34725 7d9a C066     		.sleb128 -3264
+ 34726 7d9c 35       		.uleb128 0x35
+ 34727 7d9d 36570000 		.long	0x5736
+ 34728 7da1 00000000 		.quad	.LBB2314
+ 34728      00000000 
+ 34729 7da9 00000000 		.quad	.LBE2314
+ 34729      00000000 
+ 34730 7db1 02       		.byte	0x2
+ 34731 7db2 BA05     		.value	0x5ba
+ 34732 7db4 32       		.uleb128 0x32
+ 34733 7db5 60570000 		.long	0x5760
+ 34734 7db9 03       		.byte	0x3
+ 34735 7dba 91       		.byte	0x91
+ 34736 7dbb DC66     		.sleb128 -3236
+ 34737 7dbd 32       		.uleb128 0x32
+ 34738 7dbe 54570000 		.long	0x5754
+ 34739 7dc2 03       		.byte	0x3
+ 34740 7dc3 91       		.byte	0x91
+ 34741 7dc4 E066     		.sleb128 -3232
+ 34742 7dc6 32       		.uleb128 0x32
+ 34743 7dc7 48570000 		.long	0x5748
+ 34744 7dcb 03       		.byte	0x3
+ 34745 7dcc 91       		.byte	0x91
+ 34746 7dcd F066     		.sleb128 -3216
+ 34747 7dcf 00       		.byte	0x0
+ 34748 7dd0 00       		.byte	0x0
+ 34749 7dd1 31       		.uleb128 0x31
+ 34750 7dd2 6D570000 		.long	0x576d
+ 34751 7dd6 00000000 		.quad	.LBB2316
+ 34751      00000000 
+ 34752 7dde 00000000 		.quad	.LBE2316
+ 34752      00000000 
+ 34753 7de6 02       		.byte	0x2
+ 34754 7de7 3D07     		.value	0x73d
+ 34755 7de9 347E0000 		.long	0x7e34
+ 34756 7ded 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 909
+
+
+ 34757 7dee 89570000 		.long	0x5789
+ 34758 7df2 03       		.byte	0x3
+ 34759 7df3 91       		.byte	0x91
+ 34760 7df4 8067     		.sleb128 -3200
+ 34761 7df6 32       		.uleb128 0x32
+ 34762 7df7 7F570000 		.long	0x577f
+ 34763 7dfb 03       		.byte	0x3
+ 34764 7dfc 91       		.byte	0x91
+ 34765 7dfd 9067     		.sleb128 -3184
+ 34766 7dff 35       		.uleb128 0x35
+ 34767 7e00 36570000 		.long	0x5736
+ 34768 7e04 00000000 		.quad	.LBB2318
+ 34768      00000000 
+ 34769 7e0c 00000000 		.quad	.LBE2318
+ 34769      00000000 
+ 34770 7e14 02       		.byte	0x2
+ 34771 7e15 DA05     		.value	0x5da
+ 34772 7e17 32       		.uleb128 0x32
+ 34773 7e18 60570000 		.long	0x5760
+ 34774 7e1c 03       		.byte	0x3
+ 34775 7e1d 91       		.byte	0x91
+ 34776 7e1e AC67     		.sleb128 -3156
+ 34777 7e20 32       		.uleb128 0x32
+ 34778 7e21 54570000 		.long	0x5754
+ 34779 7e25 03       		.byte	0x3
+ 34780 7e26 91       		.byte	0x91
+ 34781 7e27 B067     		.sleb128 -3152
+ 34782 7e29 32       		.uleb128 0x32
+ 34783 7e2a 48570000 		.long	0x5748
+ 34784 7e2e 03       		.byte	0x3
+ 34785 7e2f 91       		.byte	0x91
+ 34786 7e30 C067     		.sleb128 -3136
+ 34787 7e32 00       		.byte	0x0
+ 34788 7e33 00       		.byte	0x0
+ 34789 7e34 31       		.uleb128 0x31
+ 34790 7e35 F60E0000 		.long	0xef6
+ 34791 7e39 00000000 		.quad	.LBB2320
+ 34791      00000000 
+ 34792 7e41 00000000 		.quad	.LBE2320
+ 34792      00000000 
+ 34793 7e49 02       		.byte	0x2
+ 34794 7e4a 4007     		.value	0x740
+ 34795 7e4c 49800000 		.long	0x8049
+ 34796 7e50 32       		.uleb128 0x32
+ 34797 7e51 080F0000 		.long	0xf08
+ 34798 7e55 03       		.byte	0x3
+ 34799 7e56 91       		.byte	0x91
+ 34800 7e57 D067     		.sleb128 -3120
+ 34801 7e59 33       		.uleb128 0x33
+ 34802 7e5a 00000000 		.quad	.LBB2321
+ 34802      00000000 
+ 34803 7e62 00000000 		.quad	.LBE2321
+ 34803      00000000 
+ 34804 7e6a 34       		.uleb128 0x34
+ 34805 7e6b 140F0000 		.long	0xf14
+ 34806 7e6f 04       		.byte	0x4
+ 34807 7e70 76       		.byte	0x76
+
GAS LISTING /tmp/ccjbMjHD.s 			page 910
+
+
+ 34808 7e71 90BC7F   		.sleb128 -8688
+ 34809 7e74 31       		.uleb128 0x31
+ 34810 7e75 210F0000 		.long	0xf21
+ 34811 7e79 00000000 		.quad	.LBB2322
+ 34811      00000000 
+ 34812 7e81 00000000 		.quad	.LBE2322
+ 34812      00000000 
+ 34813 7e89 02       		.byte	0x2
+ 34814 7e8a 1F06     		.value	0x61f
+ 34815 7e8c 117F0000 		.long	0x7f11
+ 34816 7e90 32       		.uleb128 0x32
+ 34817 7e91 330F0000 		.long	0xf33
+ 34818 7e95 03       		.byte	0x3
+ 34819 7e96 91       		.byte	0x91
+ 34820 7e97 E067     		.sleb128 -3104
+ 34821 7e99 33       		.uleb128 0x33
+ 34822 7e9a 00000000 		.quad	.LBB2323
+ 34822      00000000 
+ 34823 7ea2 00000000 		.quad	.LBE2323
+ 34823      00000000 
+ 34824 7eaa 34       		.uleb128 0x34
+ 34825 7eab 3F0F0000 		.long	0xf3f
+ 34826 7eaf 09       		.byte	0x9
+ 34827 7eb0 03       		.byte	0x3
+ 34828 7eb1 00000000 		.quad	mask.7943
+ 34828      00000000 
+ 34829 7eb9 35       		.uleb128 0x35
+ 34830 7eba A00D0000 		.long	0xda0
+ 34831 7ebe 00000000 		.quad	.LBB2324
+ 34831      00000000 
+ 34832 7ec6 00000000 		.quad	.LBE2324
+ 34832      00000000 
+ 34833 7ece 02       		.byte	0x2
+ 34834 7ecf FE04     		.value	0x4fe
+ 34835 7ed1 32       		.uleb128 0x32
+ 34836 7ed2 BE0D0000 		.long	0xdbe
+ 34837 7ed6 03       		.byte	0x3
+ 34838 7ed7 91       		.byte	0x91
+ 34839 7ed8 F067     		.sleb128 -3088
+ 34840 7eda 32       		.uleb128 0x32
+ 34841 7edb B20D0000 		.long	0xdb2
+ 34842 7edf 03       		.byte	0x3
+ 34843 7ee0 91       		.byte	0x91
+ 34844 7ee1 8068     		.sleb128 -3072
+ 34845 7ee3 35       		.uleb128 0x35
+ 34846 7ee4 CB0D0000 		.long	0xdcb
+ 34847 7ee8 00000000 		.quad	.LBB2326
+ 34847      00000000 
+ 34848 7ef0 00000000 		.quad	.LBE2326
+ 34848      00000000 
+ 34849 7ef8 02       		.byte	0x2
+ 34850 7ef9 7501     		.value	0x175
+ 34851 7efb 32       		.uleb128 0x32
+ 34852 7efc E90D0000 		.long	0xde9
+ 34853 7f00 03       		.byte	0x3
+ 34854 7f01 91       		.byte	0x91
+ 34855 7f02 9068     		.sleb128 -3056
+
GAS LISTING /tmp/ccjbMjHD.s 			page 911
+
+
+ 34856 7f04 32       		.uleb128 0x32
+ 34857 7f05 DD0D0000 		.long	0xddd
+ 34858 7f09 03       		.byte	0x3
+ 34859 7f0a 91       		.byte	0x91
+ 34860 7f0b A068     		.sleb128 -3040
+ 34861 7f0d 00       		.byte	0x0
+ 34862 7f0e 00       		.byte	0x0
+ 34863 7f0f 00       		.byte	0x0
+ 34864 7f10 00       		.byte	0x0
+ 34865 7f11 31       		.uleb128 0x31
+ 34866 7f12 210F0000 		.long	0xf21
+ 34867 7f16 00000000 		.quad	.LBB2328
+ 34867      00000000 
+ 34868 7f1e 00000000 		.quad	.LBE2328
+ 34868      00000000 
+ 34869 7f26 02       		.byte	0x2
+ 34870 7f27 2006     		.value	0x620
+ 34871 7f29 AE7F0000 		.long	0x7fae
+ 34872 7f2d 32       		.uleb128 0x32
+ 34873 7f2e 330F0000 		.long	0xf33
+ 34874 7f32 03       		.byte	0x3
+ 34875 7f33 91       		.byte	0x91
+ 34876 7f34 B068     		.sleb128 -3024
+ 34877 7f36 33       		.uleb128 0x33
+ 34878 7f37 00000000 		.quad	.LBB2329
+ 34878      00000000 
+ 34879 7f3f 00000000 		.quad	.LBE2329
+ 34879      00000000 
+ 34880 7f47 34       		.uleb128 0x34
+ 34881 7f48 3F0F0000 		.long	0xf3f
+ 34882 7f4c 09       		.byte	0x9
+ 34883 7f4d 03       		.byte	0x3
+ 34884 7f4e 00000000 		.quad	mask.7943
+ 34884      00000000 
+ 34885 7f56 35       		.uleb128 0x35
+ 34886 7f57 A00D0000 		.long	0xda0
+ 34887 7f5b 00000000 		.quad	.LBB2330
+ 34887      00000000 
+ 34888 7f63 00000000 		.quad	.LBE2330
+ 34888      00000000 
+ 34889 7f6b 02       		.byte	0x2
+ 34890 7f6c FE04     		.value	0x4fe
+ 34891 7f6e 32       		.uleb128 0x32
+ 34892 7f6f BE0D0000 		.long	0xdbe
+ 34893 7f73 03       		.byte	0x3
+ 34894 7f74 91       		.byte	0x91
+ 34895 7f75 C068     		.sleb128 -3008
+ 34896 7f77 32       		.uleb128 0x32
+ 34897 7f78 B20D0000 		.long	0xdb2
+ 34898 7f7c 03       		.byte	0x3
+ 34899 7f7d 91       		.byte	0x91
+ 34900 7f7e D068     		.sleb128 -2992
+ 34901 7f80 35       		.uleb128 0x35
+ 34902 7f81 CB0D0000 		.long	0xdcb
+ 34903 7f85 00000000 		.quad	.LBB2332
+ 34903      00000000 
+ 34904 7f8d 00000000 		.quad	.LBE2332
+
GAS LISTING /tmp/ccjbMjHD.s 			page 912
+
+
+ 34904      00000000 
+ 34905 7f95 02       		.byte	0x2
+ 34906 7f96 7501     		.value	0x175
+ 34907 7f98 32       		.uleb128 0x32
+ 34908 7f99 E90D0000 		.long	0xde9
+ 34909 7f9d 03       		.byte	0x3
+ 34910 7f9e 91       		.byte	0x91
+ 34911 7f9f E068     		.sleb128 -2976
+ 34912 7fa1 32       		.uleb128 0x32
+ 34913 7fa2 DD0D0000 		.long	0xddd
+ 34914 7fa6 03       		.byte	0x3
+ 34915 7fa7 91       		.byte	0x91
+ 34916 7fa8 F068     		.sleb128 -2960
+ 34917 7faa 00       		.byte	0x0
+ 34918 7fab 00       		.byte	0x0
+ 34919 7fac 00       		.byte	0x0
+ 34920 7fad 00       		.byte	0x0
+ 34921 7fae 35       		.uleb128 0x35
+ 34922 7faf 210F0000 		.long	0xf21
+ 34923 7fb3 00000000 		.quad	.LBB2334
+ 34923      00000000 
+ 34924 7fbb 00000000 		.quad	.LBE2334
+ 34924      00000000 
+ 34925 7fc3 02       		.byte	0x2
+ 34926 7fc4 2106     		.value	0x621
+ 34927 7fc6 32       		.uleb128 0x32
+ 34928 7fc7 330F0000 		.long	0xf33
+ 34929 7fcb 03       		.byte	0x3
+ 34930 7fcc 91       		.byte	0x91
+ 34931 7fcd 8069     		.sleb128 -2944
+ 34932 7fcf 33       		.uleb128 0x33
+ 34933 7fd0 00000000 		.quad	.LBB2335
+ 34933      00000000 
+ 34934 7fd8 00000000 		.quad	.LBE2335
+ 34934      00000000 
+ 34935 7fe0 34       		.uleb128 0x34
+ 34936 7fe1 3F0F0000 		.long	0xf3f
+ 34937 7fe5 09       		.byte	0x9
+ 34938 7fe6 03       		.byte	0x3
+ 34939 7fe7 00000000 		.quad	mask.7943
+ 34939      00000000 
+ 34940 7fef 35       		.uleb128 0x35
+ 34941 7ff0 A00D0000 		.long	0xda0
+ 34942 7ff4 00000000 		.quad	.LBB2336
+ 34942      00000000 
+ 34943 7ffc 00000000 		.quad	.LBE2336
+ 34943      00000000 
+ 34944 8004 02       		.byte	0x2
+ 34945 8005 FE04     		.value	0x4fe
+ 34946 8007 32       		.uleb128 0x32
+ 34947 8008 BE0D0000 		.long	0xdbe
+ 34948 800c 03       		.byte	0x3
+ 34949 800d 91       		.byte	0x91
+ 34950 800e 9069     		.sleb128 -2928
+ 34951 8010 32       		.uleb128 0x32
+ 34952 8011 B20D0000 		.long	0xdb2
+ 34953 8015 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 913
+
+
+ 34954 8016 91       		.byte	0x91
+ 34955 8017 A069     		.sleb128 -2912
+ 34956 8019 35       		.uleb128 0x35
+ 34957 801a CB0D0000 		.long	0xdcb
+ 34958 801e 00000000 		.quad	.LBB2338
+ 34958      00000000 
+ 34959 8026 00000000 		.quad	.LBE2338
+ 34959      00000000 
+ 34960 802e 02       		.byte	0x2
+ 34961 802f 7501     		.value	0x175
+ 34962 8031 32       		.uleb128 0x32
+ 34963 8032 E90D0000 		.long	0xde9
+ 34964 8036 03       		.byte	0x3
+ 34965 8037 91       		.byte	0x91
+ 34966 8038 B069     		.sleb128 -2896
+ 34967 803a 32       		.uleb128 0x32
+ 34968 803b DD0D0000 		.long	0xddd
+ 34969 803f 03       		.byte	0x3
+ 34970 8040 91       		.byte	0x91
+ 34971 8041 C069     		.sleb128 -2880
+ 34972 8043 00       		.byte	0x0
+ 34973 8044 00       		.byte	0x0
+ 34974 8045 00       		.byte	0x0
+ 34975 8046 00       		.byte	0x0
+ 34976 8047 00       		.byte	0x0
+ 34977 8048 00       		.byte	0x0
+ 34978 8049 31       		.uleb128 0x31
+ 34979 804a F60E0000 		.long	0xef6
+ 34980 804e 00000000 		.quad	.LBB2340
+ 34980      00000000 
+ 34981 8056 00000000 		.quad	.LBE2340
+ 34981      00000000 
+ 34982 805e 02       		.byte	0x2
+ 34983 805f 4107     		.value	0x741
+ 34984 8061 5E820000 		.long	0x825e
+ 34985 8065 32       		.uleb128 0x32
+ 34986 8066 080F0000 		.long	0xf08
+ 34987 806a 03       		.byte	0x3
+ 34988 806b 91       		.byte	0x91
+ 34989 806c D069     		.sleb128 -2864
+ 34990 806e 33       		.uleb128 0x33
+ 34991 806f 00000000 		.quad	.LBB2341
+ 34991      00000000 
+ 34992 8077 00000000 		.quad	.LBE2341
+ 34992      00000000 
+ 34993 807f 34       		.uleb128 0x34
+ 34994 8080 140F0000 		.long	0xf14
+ 34995 8084 04       		.byte	0x4
+ 34996 8085 76       		.byte	0x76
+ 34997 8086 A0BC7F   		.sleb128 -8672
+ 34998 8089 31       		.uleb128 0x31
+ 34999 808a 210F0000 		.long	0xf21
+ 35000 808e 00000000 		.quad	.LBB2342
+ 35000      00000000 
+ 35001 8096 00000000 		.quad	.LBE2342
+ 35001      00000000 
+ 35002 809e 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 914
+
+
+ 35003 809f 1F06     		.value	0x61f
+ 35004 80a1 26810000 		.long	0x8126
+ 35005 80a5 32       		.uleb128 0x32
+ 35006 80a6 330F0000 		.long	0xf33
+ 35007 80aa 03       		.byte	0x3
+ 35008 80ab 91       		.byte	0x91
+ 35009 80ac E069     		.sleb128 -2848
+ 35010 80ae 33       		.uleb128 0x33
+ 35011 80af 00000000 		.quad	.LBB2343
+ 35011      00000000 
+ 35012 80b7 00000000 		.quad	.LBE2343
+ 35012      00000000 
+ 35013 80bf 34       		.uleb128 0x34
+ 35014 80c0 3F0F0000 		.long	0xf3f
+ 35015 80c4 09       		.byte	0x9
+ 35016 80c5 03       		.byte	0x3
+ 35017 80c6 00000000 		.quad	mask.7943
+ 35017      00000000 
+ 35018 80ce 35       		.uleb128 0x35
+ 35019 80cf A00D0000 		.long	0xda0
+ 35020 80d3 00000000 		.quad	.LBB2344
+ 35020      00000000 
+ 35021 80db 00000000 		.quad	.LBE2344
+ 35021      00000000 
+ 35022 80e3 02       		.byte	0x2
+ 35023 80e4 FE04     		.value	0x4fe
+ 35024 80e6 32       		.uleb128 0x32
+ 35025 80e7 BE0D0000 		.long	0xdbe
+ 35026 80eb 03       		.byte	0x3
+ 35027 80ec 91       		.byte	0x91
+ 35028 80ed F069     		.sleb128 -2832
+ 35029 80ef 32       		.uleb128 0x32
+ 35030 80f0 B20D0000 		.long	0xdb2
+ 35031 80f4 03       		.byte	0x3
+ 35032 80f5 91       		.byte	0x91
+ 35033 80f6 806A     		.sleb128 -2816
+ 35034 80f8 35       		.uleb128 0x35
+ 35035 80f9 CB0D0000 		.long	0xdcb
+ 35036 80fd 00000000 		.quad	.LBB2346
+ 35036      00000000 
+ 35037 8105 00000000 		.quad	.LBE2346
+ 35037      00000000 
+ 35038 810d 02       		.byte	0x2
+ 35039 810e 7501     		.value	0x175
+ 35040 8110 32       		.uleb128 0x32
+ 35041 8111 E90D0000 		.long	0xde9
+ 35042 8115 03       		.byte	0x3
+ 35043 8116 91       		.byte	0x91
+ 35044 8117 906A     		.sleb128 -2800
+ 35045 8119 32       		.uleb128 0x32
+ 35046 811a DD0D0000 		.long	0xddd
+ 35047 811e 03       		.byte	0x3
+ 35048 811f 91       		.byte	0x91
+ 35049 8120 A06A     		.sleb128 -2784
+ 35050 8122 00       		.byte	0x0
+ 35051 8123 00       		.byte	0x0
+ 35052 8124 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 915
+
+
+ 35053 8125 00       		.byte	0x0
+ 35054 8126 31       		.uleb128 0x31
+ 35055 8127 210F0000 		.long	0xf21
+ 35056 812b 00000000 		.quad	.LBB2348
+ 35056      00000000 
+ 35057 8133 00000000 		.quad	.LBE2348
+ 35057      00000000 
+ 35058 813b 02       		.byte	0x2
+ 35059 813c 2006     		.value	0x620
+ 35060 813e C3810000 		.long	0x81c3
+ 35061 8142 32       		.uleb128 0x32
+ 35062 8143 330F0000 		.long	0xf33
+ 35063 8147 03       		.byte	0x3
+ 35064 8148 91       		.byte	0x91
+ 35065 8149 B06A     		.sleb128 -2768
+ 35066 814b 33       		.uleb128 0x33
+ 35067 814c 00000000 		.quad	.LBB2349
+ 35067      00000000 
+ 35068 8154 00000000 		.quad	.LBE2349
+ 35068      00000000 
+ 35069 815c 34       		.uleb128 0x34
+ 35070 815d 3F0F0000 		.long	0xf3f
+ 35071 8161 09       		.byte	0x9
+ 35072 8162 03       		.byte	0x3
+ 35073 8163 00000000 		.quad	mask.7943
+ 35073      00000000 
+ 35074 816b 35       		.uleb128 0x35
+ 35075 816c A00D0000 		.long	0xda0
+ 35076 8170 00000000 		.quad	.LBB2350
+ 35076      00000000 
+ 35077 8178 00000000 		.quad	.LBE2350
+ 35077      00000000 
+ 35078 8180 02       		.byte	0x2
+ 35079 8181 FE04     		.value	0x4fe
+ 35080 8183 32       		.uleb128 0x32
+ 35081 8184 BE0D0000 		.long	0xdbe
+ 35082 8188 03       		.byte	0x3
+ 35083 8189 91       		.byte	0x91
+ 35084 818a C06A     		.sleb128 -2752
+ 35085 818c 32       		.uleb128 0x32
+ 35086 818d B20D0000 		.long	0xdb2
+ 35087 8191 03       		.byte	0x3
+ 35088 8192 91       		.byte	0x91
+ 35089 8193 D06A     		.sleb128 -2736
+ 35090 8195 35       		.uleb128 0x35
+ 35091 8196 CB0D0000 		.long	0xdcb
+ 35092 819a 00000000 		.quad	.LBB2352
+ 35092      00000000 
+ 35093 81a2 00000000 		.quad	.LBE2352
+ 35093      00000000 
+ 35094 81aa 02       		.byte	0x2
+ 35095 81ab 7501     		.value	0x175
+ 35096 81ad 32       		.uleb128 0x32
+ 35097 81ae E90D0000 		.long	0xde9
+ 35098 81b2 03       		.byte	0x3
+ 35099 81b3 91       		.byte	0x91
+ 35100 81b4 E06A     		.sleb128 -2720
+
GAS LISTING /tmp/ccjbMjHD.s 			page 916
+
+
+ 35101 81b6 32       		.uleb128 0x32
+ 35102 81b7 DD0D0000 		.long	0xddd
+ 35103 81bb 03       		.byte	0x3
+ 35104 81bc 91       		.byte	0x91
+ 35105 81bd F06A     		.sleb128 -2704
+ 35106 81bf 00       		.byte	0x0
+ 35107 81c0 00       		.byte	0x0
+ 35108 81c1 00       		.byte	0x0
+ 35109 81c2 00       		.byte	0x0
+ 35110 81c3 35       		.uleb128 0x35
+ 35111 81c4 210F0000 		.long	0xf21
+ 35112 81c8 00000000 		.quad	.LBB2354
+ 35112      00000000 
+ 35113 81d0 00000000 		.quad	.LBE2354
+ 35113      00000000 
+ 35114 81d8 02       		.byte	0x2
+ 35115 81d9 2106     		.value	0x621
+ 35116 81db 32       		.uleb128 0x32
+ 35117 81dc 330F0000 		.long	0xf33
+ 35118 81e0 03       		.byte	0x3
+ 35119 81e1 91       		.byte	0x91
+ 35120 81e2 806B     		.sleb128 -2688
+ 35121 81e4 33       		.uleb128 0x33
+ 35122 81e5 00000000 		.quad	.LBB2355
+ 35122      00000000 
+ 35123 81ed 00000000 		.quad	.LBE2355
+ 35123      00000000 
+ 35124 81f5 34       		.uleb128 0x34
+ 35125 81f6 3F0F0000 		.long	0xf3f
+ 35126 81fa 09       		.byte	0x9
+ 35127 81fb 03       		.byte	0x3
+ 35128 81fc 00000000 		.quad	mask.7943
+ 35128      00000000 
+ 35129 8204 35       		.uleb128 0x35
+ 35130 8205 A00D0000 		.long	0xda0
+ 35131 8209 00000000 		.quad	.LBB2356
+ 35131      00000000 
+ 35132 8211 00000000 		.quad	.LBE2356
+ 35132      00000000 
+ 35133 8219 02       		.byte	0x2
+ 35134 821a FE04     		.value	0x4fe
+ 35135 821c 32       		.uleb128 0x32
+ 35136 821d BE0D0000 		.long	0xdbe
+ 35137 8221 03       		.byte	0x3
+ 35138 8222 91       		.byte	0x91
+ 35139 8223 906B     		.sleb128 -2672
+ 35140 8225 32       		.uleb128 0x32
+ 35141 8226 B20D0000 		.long	0xdb2
+ 35142 822a 03       		.byte	0x3
+ 35143 822b 91       		.byte	0x91
+ 35144 822c A06B     		.sleb128 -2656
+ 35145 822e 35       		.uleb128 0x35
+ 35146 822f CB0D0000 		.long	0xdcb
+ 35147 8233 00000000 		.quad	.LBB2358
+ 35147      00000000 
+ 35148 823b 00000000 		.quad	.LBE2358
+ 35148      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 917
+
+
+ 35149 8243 02       		.byte	0x2
+ 35150 8244 7501     		.value	0x175
+ 35151 8246 32       		.uleb128 0x32
+ 35152 8247 E90D0000 		.long	0xde9
+ 35153 824b 03       		.byte	0x3
+ 35154 824c 91       		.byte	0x91
+ 35155 824d B06B     		.sleb128 -2640
+ 35156 824f 32       		.uleb128 0x32
+ 35157 8250 DD0D0000 		.long	0xddd
+ 35158 8254 03       		.byte	0x3
+ 35159 8255 91       		.byte	0x91
+ 35160 8256 C06B     		.sleb128 -2624
+ 35161 8258 00       		.byte	0x0
+ 35162 8259 00       		.byte	0x0
+ 35163 825a 00       		.byte	0x0
+ 35164 825b 00       		.byte	0x0
+ 35165 825c 00       		.byte	0x0
+ 35166 825d 00       		.byte	0x0
+ 35167 825e 31       		.uleb128 0x31
+ 35168 825f D50B0000 		.long	0xbd5
+ 35169 8263 00000000 		.quad	.LBB2360
+ 35169      00000000 
+ 35170 826b 00000000 		.quad	.LBE2360
+ 35170      00000000 
+ 35171 8273 02       		.byte	0x2
+ 35172 8274 4207     		.value	0x742
+ 35173 8276 41870000 		.long	0x8741
+ 35174 827a 32       		.uleb128 0x32
+ 35175 827b F30B0000 		.long	0xbf3
+ 35176 827f 03       		.byte	0x3
+ 35177 8280 91       		.byte	0x91
+ 35178 8281 DC6B     		.sleb128 -2596
+ 35179 8283 32       		.uleb128 0x32
+ 35180 8284 E70B0000 		.long	0xbe7
+ 35181 8288 03       		.byte	0x3
+ 35182 8289 91       		.byte	0x91
+ 35183 828a E06B     		.sleb128 -2592
+ 35184 828c 33       		.uleb128 0x33
+ 35185 828d 00000000 		.quad	.LBB2361
+ 35185      00000000 
+ 35186 8295 00000000 		.quad	.LBE2361
+ 35186      00000000 
+ 35187 829d 34       		.uleb128 0x34
+ 35188 829e FF0B0000 		.long	0xbff
+ 35189 82a2 04       		.byte	0x4
+ 35190 82a3 76       		.byte	0x76
+ 35191 82a4 C0BC7F   		.sleb128 -8640
+ 35192 82a7 34       		.uleb128 0x34
+ 35193 82a8 0B0C0000 		.long	0xc0b
+ 35194 82ac 04       		.byte	0x4
+ 35195 82ad 76       		.byte	0x76
+ 35196 82ae B0BC7F   		.sleb128 -8656
+ 35197 82b1 31       		.uleb128 0x31
+ 35198 82b2 540C0000 		.long	0xc54
+ 35199 82b6 00000000 		.quad	.LBB2362
+ 35199      00000000 
+ 35200 82be 00000000 		.quad	.LBE2362
+
GAS LISTING /tmp/ccjbMjHD.s 			page 918
+
+
+ 35200      00000000 
+ 35201 82c6 02       		.byte	0x2
+ 35202 82c7 9106     		.value	0x691
+ 35203 82c9 1D830000 		.long	0x831d
+ 35204 82cd 32       		.uleb128 0x32
+ 35205 82ce 7E0C0000 		.long	0xc7e
+ 35206 82d2 03       		.byte	0x3
+ 35207 82d3 91       		.byte	0x91
+ 35208 82d4 F86B     		.sleb128 -2568
+ 35209 82d6 32       		.uleb128 0x32
+ 35210 82d7 720C0000 		.long	0xc72
+ 35211 82db 03       		.byte	0x3
+ 35212 82dc 91       		.byte	0x91
+ 35213 82dd FC6B     		.sleb128 -2564
+ 35214 82df 32       		.uleb128 0x32
+ 35215 82e0 660C0000 		.long	0xc66
+ 35216 82e4 03       		.byte	0x3
+ 35217 82e5 91       		.byte	0x91
+ 35218 82e6 806C     		.sleb128 -2560
+ 35219 82e8 35       		.uleb128 0x35
+ 35220 82e9 8B0C0000 		.long	0xc8b
+ 35221 82ed 00000000 		.quad	.LBB2364
+ 35221      00000000 
+ 35222 82f5 00000000 		.quad	.LBE2364
+ 35222      00000000 
+ 35223 82fd 02       		.byte	0x2
+ 35224 82fe 0702     		.value	0x207
+ 35225 8300 32       		.uleb128 0x32
+ 35226 8301 B40C0000 		.long	0xcb4
+ 35227 8305 03       		.byte	0x3
+ 35228 8306 91       		.byte	0x91
+ 35229 8307 986C     		.sleb128 -2536
+ 35230 8309 32       		.uleb128 0x32
+ 35231 830a A90C0000 		.long	0xca9
+ 35232 830e 03       		.byte	0x3
+ 35233 830f 91       		.byte	0x91
+ 35234 8310 9C6C     		.sleb128 -2532
+ 35235 8312 32       		.uleb128 0x32
+ 35236 8313 9D0C0000 		.long	0xc9d
+ 35237 8317 03       		.byte	0x3
+ 35238 8318 91       		.byte	0x91
+ 35239 8319 A06C     		.sleb128 -2528
+ 35240 831b 00       		.byte	0x0
+ 35241 831c 00       		.byte	0x0
+ 35242 831d 31       		.uleb128 0x31
+ 35243 831e C10C0000 		.long	0xcc1
+ 35244 8322 00000000 		.quad	.LBB2366
+ 35244      00000000 
+ 35245 832a 00000000 		.quad	.LBE2366
+ 35245      00000000 
+ 35246 8332 02       		.byte	0x2
+ 35247 8333 9206     		.value	0x692
+ 35248 8335 A6850000 		.long	0x85a6
+ 35249 8339 32       		.uleb128 0x32
+ 35250 833a D30C0000 		.long	0xcd3
+ 35251 833e 03       		.byte	0x3
+ 35252 833f 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 919
+
+
+ 35253 8340 B06C     		.sleb128 -2512
+ 35254 8342 35       		.uleb128 0x35
+ 35255 8343 E00C0000 		.long	0xce0
+ 35256 8347 00000000 		.quad	.LBB2368
+ 35256      00000000 
+ 35257 834f 00000000 		.quad	.LBE2368
+ 35257      00000000 
+ 35258 8357 02       		.byte	0x2
+ 35259 8358 7D03     		.value	0x37d
+ 35260 835a 32       		.uleb128 0x32
+ 35261 835b FE0C0000 		.long	0xcfe
+ 35262 835f 03       		.byte	0x3
+ 35263 8360 91       		.byte	0x91
+ 35264 8361 C86C     		.sleb128 -2488
+ 35265 8363 32       		.uleb128 0x32
+ 35266 8364 F20C0000 		.long	0xcf2
+ 35267 8368 03       		.byte	0x3
+ 35268 8369 91       		.byte	0x91
+ 35269 836a D06C     		.sleb128 -2480
+ 35270 836c 33       		.uleb128 0x33
+ 35271 836d 00000000 		.quad	.LBB2369
+ 35271      00000000 
+ 35272 8375 00000000 		.quad	.LBE2369
+ 35272      00000000 
+ 35273 837d 34       		.uleb128 0x34
+ 35274 837e 0A0D0000 		.long	0xd0a
+ 35275 8382 03       		.byte	0x3
+ 35276 8383 91       		.byte	0x91
+ 35277 8384 A06D     		.sleb128 -2400
+ 35278 8386 34       		.uleb128 0x34
+ 35279 8387 150D0000 		.long	0xd15
+ 35280 838b 03       		.byte	0x3
+ 35281 838c 91       		.byte	0x91
+ 35282 838d 906D     		.sleb128 -2416
+ 35283 838f 34       		.uleb128 0x34
+ 35284 8390 200D0000 		.long	0xd20
+ 35285 8394 03       		.byte	0x3
+ 35286 8395 91       		.byte	0x91
+ 35287 8396 806D     		.sleb128 -2432
+ 35288 8398 34       		.uleb128 0x34
+ 35289 8399 2C0D0000 		.long	0xd2c
+ 35290 839d 03       		.byte	0x3
+ 35291 839e 91       		.byte	0x91
+ 35292 839f F06C     		.sleb128 -2448
+ 35293 83a1 34       		.uleb128 0x34
+ 35294 83a2 380D0000 		.long	0xd38
+ 35295 83a6 03       		.byte	0x3
+ 35296 83a7 91       		.byte	0x91
+ 35297 83a8 EC6C     		.sleb128 -2452
+ 35298 83aa 31       		.uleb128 0x31
+ 35299 83ab 4F0D0000 		.long	0xd4f
+ 35300 83af 00000000 		.quad	.LBB2370
+ 35300      00000000 
+ 35301 83b7 00000000 		.quad	.LBE2370
+ 35301      00000000 
+ 35302 83bf 02       		.byte	0x2
+ 35303 83c0 5603     		.value	0x356
+
GAS LISTING /tmp/ccjbMjHD.s 			page 920
+
+
+ 35304 83c2 D9830000 		.long	0x83d9
+ 35305 83c6 32       		.uleb128 0x32
+ 35306 83c7 6A0D0000 		.long	0xd6a
+ 35307 83cb 03       		.byte	0x3
+ 35308 83cc 91       		.byte	0x91
+ 35309 83cd B06D     		.sleb128 -2384
+ 35310 83cf 32       		.uleb128 0x32
+ 35311 83d0 600D0000 		.long	0xd60
+ 35312 83d4 03       		.byte	0x3
+ 35313 83d5 91       		.byte	0x91
+ 35314 83d6 C06D     		.sleb128 -2368
+ 35315 83d8 00       		.byte	0x0
+ 35316 83d9 31       		.uleb128 0x31
+ 35317 83da 750D0000 		.long	0xd75
+ 35318 83de 00000000 		.quad	.LBB2372
+ 35318      00000000 
+ 35319 83e6 00000000 		.quad	.LBE2372
+ 35319      00000000 
+ 35320 83ee 02       		.byte	0x2
+ 35321 83ef 5903     		.value	0x359
+ 35322 83f1 08840000 		.long	0x8408
+ 35323 83f5 32       		.uleb128 0x32
+ 35324 83f6 930D0000 		.long	0xd93
+ 35325 83fa 03       		.byte	0x3
+ 35326 83fb 91       		.byte	0x91
+ 35327 83fc DC6D     		.sleb128 -2340
+ 35328 83fe 32       		.uleb128 0x32
+ 35329 83ff 870D0000 		.long	0xd87
+ 35330 8403 03       		.byte	0x3
+ 35331 8404 91       		.byte	0x91
+ 35332 8405 E06D     		.sleb128 -2336
+ 35333 8407 00       		.byte	0x0
+ 35334 8408 31       		.uleb128 0x31
+ 35335 8409 4F0D0000 		.long	0xd4f
+ 35336 840d 00000000 		.quad	.LBB2374
+ 35336      00000000 
+ 35337 8415 00000000 		.quad	.LBE2374
+ 35337      00000000 
+ 35338 841d 02       		.byte	0x2
+ 35339 841e 5B03     		.value	0x35b
+ 35340 8420 37840000 		.long	0x8437
+ 35341 8424 32       		.uleb128 0x32
+ 35342 8425 6A0D0000 		.long	0xd6a
+ 35343 8429 03       		.byte	0x3
+ 35344 842a 91       		.byte	0x91
+ 35345 842b F06D     		.sleb128 -2320
+ 35346 842d 32       		.uleb128 0x32
+ 35347 842e 600D0000 		.long	0xd60
+ 35348 8432 03       		.byte	0x3
+ 35349 8433 91       		.byte	0x91
+ 35350 8434 806E     		.sleb128 -2304
+ 35351 8436 00       		.byte	0x0
+ 35352 8437 31       		.uleb128 0x31
+ 35353 8438 A00D0000 		.long	0xda0
+ 35354 843c 00000000 		.quad	.LBB2376
+ 35354      00000000 
+ 35355 8444 00000000 		.quad	.LBE2376
+
GAS LISTING /tmp/ccjbMjHD.s 			page 921
+
+
+ 35355      00000000 
+ 35356 844c 02       		.byte	0x2
+ 35357 844d 6403     		.value	0x364
+ 35358 844f 91840000 		.long	0x8491
+ 35359 8453 32       		.uleb128 0x32
+ 35360 8454 BE0D0000 		.long	0xdbe
+ 35361 8458 03       		.byte	0x3
+ 35362 8459 91       		.byte	0x91
+ 35363 845a 906E     		.sleb128 -2288
+ 35364 845c 32       		.uleb128 0x32
+ 35365 845d B20D0000 		.long	0xdb2
+ 35366 8461 03       		.byte	0x3
+ 35367 8462 91       		.byte	0x91
+ 35368 8463 A06E     		.sleb128 -2272
+ 35369 8465 35       		.uleb128 0x35
+ 35370 8466 CB0D0000 		.long	0xdcb
+ 35371 846a 00000000 		.quad	.LBB2378
+ 35371      00000000 
+ 35372 8472 00000000 		.quad	.LBE2378
+ 35372      00000000 
+ 35373 847a 02       		.byte	0x2
+ 35374 847b 7501     		.value	0x175
+ 35375 847d 32       		.uleb128 0x32
+ 35376 847e E90D0000 		.long	0xde9
+ 35377 8482 03       		.byte	0x3
+ 35378 8483 91       		.byte	0x91
+ 35379 8484 B06E     		.sleb128 -2256
+ 35380 8486 32       		.uleb128 0x32
+ 35381 8487 DD0D0000 		.long	0xddd
+ 35382 848b 03       		.byte	0x3
+ 35383 848c 91       		.byte	0x91
+ 35384 848d C06E     		.sleb128 -2240
+ 35385 848f 00       		.byte	0x0
+ 35386 8490 00       		.byte	0x0
+ 35387 8491 31       		.uleb128 0x31
+ 35388 8492 FB0D0000 		.long	0xdfb
+ 35389 8496 00000000 		.quad	.LBB2380
+ 35389      00000000 
+ 35390 849e 00000000 		.quad	.LBE2380
+ 35390      00000000 
+ 35391 84a6 02       		.byte	0x2
+ 35392 84a7 6603     		.value	0x366
+ 35393 84a9 C0840000 		.long	0x84c0
+ 35394 84ad 32       		.uleb128 0x32
+ 35395 84ae 160E0000 		.long	0xe16
+ 35396 84b2 03       		.byte	0x3
+ 35397 84b3 91       		.byte	0x91
+ 35398 84b4 D06E     		.sleb128 -2224
+ 35399 84b6 32       		.uleb128 0x32
+ 35400 84b7 0C0E0000 		.long	0xe0c
+ 35401 84bb 03       		.byte	0x3
+ 35402 84bc 91       		.byte	0x91
+ 35403 84bd E06E     		.sleb128 -2208
+ 35404 84bf 00       		.byte	0x0
+ 35405 84c0 31       		.uleb128 0x31
+ 35406 84c1 A00D0000 		.long	0xda0
+ 35407 84c5 00000000 		.quad	.LBB2382
+
GAS LISTING /tmp/ccjbMjHD.s 			page 922
+
+
+ 35407      00000000 
+ 35408 84cd 00000000 		.quad	.LBE2382
+ 35408      00000000 
+ 35409 84d5 02       		.byte	0x2
+ 35410 84d6 6803     		.value	0x368
+ 35411 84d8 1A850000 		.long	0x851a
+ 35412 84dc 32       		.uleb128 0x32
+ 35413 84dd BE0D0000 		.long	0xdbe
+ 35414 84e1 03       		.byte	0x3
+ 35415 84e2 91       		.byte	0x91
+ 35416 84e3 F06E     		.sleb128 -2192
+ 35417 84e5 32       		.uleb128 0x32
+ 35418 84e6 B20D0000 		.long	0xdb2
+ 35419 84ea 03       		.byte	0x3
+ 35420 84eb 91       		.byte	0x91
+ 35421 84ec 806F     		.sleb128 -2176
+ 35422 84ee 35       		.uleb128 0x35
+ 35423 84ef CB0D0000 		.long	0xdcb
+ 35424 84f3 00000000 		.quad	.LBB2384
+ 35424      00000000 
+ 35425 84fb 00000000 		.quad	.LBE2384
+ 35425      00000000 
+ 35426 8503 02       		.byte	0x2
+ 35427 8504 7501     		.value	0x175
+ 35428 8506 32       		.uleb128 0x32
+ 35429 8507 E90D0000 		.long	0xde9
+ 35430 850b 03       		.byte	0x3
+ 35431 850c 91       		.byte	0x91
+ 35432 850d 906F     		.sleb128 -2160
+ 35433 850f 32       		.uleb128 0x32
+ 35434 8510 DD0D0000 		.long	0xddd
+ 35435 8514 03       		.byte	0x3
+ 35436 8515 91       		.byte	0x91
+ 35437 8516 A06F     		.sleb128 -2144
+ 35438 8518 00       		.byte	0x0
+ 35439 8519 00       		.byte	0x0
+ 35440 851a 31       		.uleb128 0x31
+ 35441 851b FB0D0000 		.long	0xdfb
+ 35442 851f 00000000 		.quad	.LBB2386
+ 35442      00000000 
+ 35443 8527 00000000 		.quad	.LBE2386
+ 35443      00000000 
+ 35444 852f 02       		.byte	0x2
+ 35445 8530 6A03     		.value	0x36a
+ 35446 8532 49850000 		.long	0x8549
+ 35447 8536 32       		.uleb128 0x32
+ 35448 8537 160E0000 		.long	0xe16
+ 35449 853b 03       		.byte	0x3
+ 35450 853c 91       		.byte	0x91
+ 35451 853d B06F     		.sleb128 -2128
+ 35452 853f 32       		.uleb128 0x32
+ 35453 8540 0C0E0000 		.long	0xe0c
+ 35454 8544 03       		.byte	0x3
+ 35455 8545 91       		.byte	0x91
+ 35456 8546 C06F     		.sleb128 -2112
+ 35457 8548 00       		.byte	0x0
+ 35458 8549 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s 			page 923
+
+
+ 35459 854a 210E0000 		.long	0xe21
+ 35460 854e 00000000 		.quad	.LBB2388
+ 35460      00000000 
+ 35461 8556 00000000 		.quad	.LBE2388
+ 35461      00000000 
+ 35462 855e 02       		.byte	0x2
+ 35463 855f 6C03     		.value	0x36c
+ 35464 8561 78850000 		.long	0x8578
+ 35465 8565 32       		.uleb128 0x32
+ 35466 8566 3E0E0000 		.long	0xe3e
+ 35467 856a 03       		.byte	0x3
+ 35468 856b 91       		.byte	0x91
+ 35469 856c D06F     		.sleb128 -2096
+ 35470 856e 32       		.uleb128 0x32
+ 35471 856f 330E0000 		.long	0xe33
+ 35472 8573 03       		.byte	0x3
+ 35473 8574 91       		.byte	0x91
+ 35474 8575 E06F     		.sleb128 -2080
+ 35475 8577 00       		.byte	0x0
+ 35476 8578 35       		.uleb128 0x35
+ 35477 8579 4F0D0000 		.long	0xd4f
+ 35478 857d 00000000 		.quad	.LBB2390
+ 35478      00000000 
+ 35479 8585 00000000 		.quad	.LBE2390
+ 35479      00000000 
+ 35480 858d 02       		.byte	0x2
+ 35481 858e 6E03     		.value	0x36e
+ 35482 8590 32       		.uleb128 0x32
+ 35483 8591 6A0D0000 		.long	0xd6a
+ 35484 8595 03       		.byte	0x3
+ 35485 8596 91       		.byte	0x91
+ 35486 8597 F06F     		.sleb128 -2064
+ 35487 8599 32       		.uleb128 0x32
+ 35488 859a 600D0000 		.long	0xd60
+ 35489 859e 03       		.byte	0x3
+ 35490 859f 91       		.byte	0x91
+ 35491 85a0 8070     		.sleb128 -2048
+ 35492 85a2 00       		.byte	0x0
+ 35493 85a3 00       		.byte	0x0
+ 35494 85a4 00       		.byte	0x0
+ 35495 85a5 00       		.byte	0x0
+ 35496 85a6 36       		.uleb128 0x36
+ 35497 85a7 00000000 		.quad	.LBB2392
+ 35497      00000000 
+ 35498 85af 00000000 		.quad	.LBE2392
+ 35498      00000000 
+ 35499 85b7 C6850000 		.long	0x85c6
+ 35500 85bb 34       		.uleb128 0x34
+ 35501 85bc 1C0C0000 		.long	0xc1c
+ 35502 85c0 04       		.byte	0x4
+ 35503 85c1 91       		.byte	0x91
+ 35504 85c2 B0BF7F   		.sleb128 -8272
+ 35505 85c5 00       		.byte	0x0
+ 35506 85c6 31       		.uleb128 0x31
+ 35507 85c7 4A0E0000 		.long	0xe4a
+ 35508 85cb 00000000 		.quad	.LBB2393
+ 35508      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 924
+
+
+ 35509 85d3 00000000 		.quad	.LBE2393
+ 35509      00000000 
+ 35510 85db 02       		.byte	0x2
+ 35511 85dc 9406     		.value	0x694
+ 35512 85de 63860000 		.long	0x8663
+ 35513 85e2 32       		.uleb128 0x32
+ 35514 85e3 5C0E0000 		.long	0xe5c
+ 35515 85e7 03       		.byte	0x3
+ 35516 85e8 91       		.byte	0x91
+ 35517 85e9 9070     		.sleb128 -2032
+ 35518 85eb 33       		.uleb128 0x33
+ 35519 85ec 00000000 		.quad	.LBB2394
+ 35519      00000000 
+ 35520 85f4 00000000 		.quad	.LBE2394
+ 35520      00000000 
+ 35521 85fc 34       		.uleb128 0x34
+ 35522 85fd 680E0000 		.long	0xe68
+ 35523 8601 09       		.byte	0x9
+ 35524 8602 03       		.byte	0x3
+ 35525 8603 00000000 		.quad	ShiftRowTable.7385
+ 35525      00000000 
+ 35526 860b 35       		.uleb128 0x35
+ 35527 860c A00D0000 		.long	0xda0
+ 35528 8610 00000000 		.quad	.LBB2395
+ 35528      00000000 
+ 35529 8618 00000000 		.quad	.LBE2395
+ 35529      00000000 
+ 35530 8620 02       		.byte	0x2
+ 35531 8621 9B02     		.value	0x29b
+ 35532 8623 32       		.uleb128 0x32
+ 35533 8624 BE0D0000 		.long	0xdbe
+ 35534 8628 03       		.byte	0x3
+ 35535 8629 91       		.byte	0x91
+ 35536 862a A070     		.sleb128 -2016
+ 35537 862c 32       		.uleb128 0x32
+ 35538 862d B20D0000 		.long	0xdb2
+ 35539 8631 03       		.byte	0x3
+ 35540 8632 91       		.byte	0x91
+ 35541 8633 B070     		.sleb128 -2000
+ 35542 8635 35       		.uleb128 0x35
+ 35543 8636 CB0D0000 		.long	0xdcb
+ 35544 863a 00000000 		.quad	.LBB2397
+ 35544      00000000 
+ 35545 8642 00000000 		.quad	.LBE2397
+ 35545      00000000 
+ 35546 864a 02       		.byte	0x2
+ 35547 864b 7501     		.value	0x175
+ 35548 864d 32       		.uleb128 0x32
+ 35549 864e E90D0000 		.long	0xde9
+ 35550 8652 03       		.byte	0x3
+ 35551 8653 91       		.byte	0x91
+ 35552 8654 C070     		.sleb128 -1984
+ 35553 8656 32       		.uleb128 0x32
+ 35554 8657 DD0D0000 		.long	0xddd
+ 35555 865b 03       		.byte	0x3
+ 35556 865c 91       		.byte	0x91
+ 35557 865d D070     		.sleb128 -1968
+
GAS LISTING /tmp/ccjbMjHD.s 			page 925
+
+
+ 35558 865f 00       		.byte	0x0
+ 35559 8660 00       		.byte	0x0
+ 35560 8661 00       		.byte	0x0
+ 35561 8662 00       		.byte	0x0
+ 35562 8663 36       		.uleb128 0x36
+ 35563 8664 00000000 		.quad	.LBB2399
+ 35563      00000000 
+ 35564 866c 00000000 		.quad	.LBE2399
+ 35564      00000000 
+ 35565 8674 83860000 		.long	0x8683
+ 35566 8678 34       		.uleb128 0x34
+ 35567 8679 2C0C0000 		.long	0xc2c
+ 35568 867d 04       		.byte	0x4
+ 35569 867e 91       		.byte	0x91
+ 35570 867f A0BF7F   		.sleb128 -8288
+ 35571 8682 00       		.byte	0x0
+ 35572 8683 31       		.uleb128 0x31
+ 35573 8684 860E0000 		.long	0xe86
+ 35574 8688 00000000 		.quad	.LBB2400
+ 35574      00000000 
+ 35575 8690 00000000 		.quad	.LBE2400
+ 35575      00000000 
+ 35576 8698 02       		.byte	0x2
+ 35577 8699 9606     		.value	0x696
+ 35578 869b B2860000 		.long	0x86b2
+ 35579 869f 32       		.uleb128 0x32
+ 35580 86a0 A10E0000 		.long	0xea1
+ 35581 86a4 03       		.byte	0x3
+ 35582 86a5 91       		.byte	0x91
+ 35583 86a6 E070     		.sleb128 -1952
+ 35584 86a8 32       		.uleb128 0x32
+ 35585 86a9 970E0000 		.long	0xe97
+ 35586 86ad 03       		.byte	0x3
+ 35587 86ae 91       		.byte	0x91
+ 35588 86af F070     		.sleb128 -1936
+ 35589 86b1 00       		.byte	0x0
+ 35590 86b2 36       		.uleb128 0x36
+ 35591 86b3 00000000 		.quad	.LBB2402
+ 35591      00000000 
+ 35592 86bb 00000000 		.quad	.LBE2402
+ 35592      00000000 
+ 35593 86c3 D2860000 		.long	0x86d2
+ 35594 86c7 34       		.uleb128 0x34
+ 35595 86c8 3C0C0000 		.long	0xc3c
+ 35596 86cc 04       		.byte	0x4
+ 35597 86cd 91       		.byte	0x91
+ 35598 86ce 90BF7F   		.sleb128 -8304
+ 35599 86d1 00       		.byte	0x0
+ 35600 86d2 31       		.uleb128 0x31
+ 35601 86d3 AC0E0000 		.long	0xeac
+ 35602 86d7 00000000 		.quad	.LBB2403
+ 35602      00000000 
+ 35603 86df 00000000 		.quad	.LBE2403
+ 35603      00000000 
+ 35604 86e7 02       		.byte	0x2
+ 35605 86e8 9806     		.value	0x698
+ 35606 86ea 23870000 		.long	0x8723
+
GAS LISTING /tmp/ccjbMjHD.s 			page 926
+
+
+ 35607 86ee 32       		.uleb128 0x32
+ 35608 86ef BE0E0000 		.long	0xebe
+ 35609 86f3 03       		.byte	0x3
+ 35610 86f4 91       		.byte	0x91
+ 35611 86f5 8071     		.sleb128 -1920
+ 35612 86f7 35       		.uleb128 0x35
+ 35613 86f8 CB0E0000 		.long	0xecb
+ 35614 86fc 00000000 		.quad	.LBB2405
+ 35614      00000000 
+ 35615 8704 00000000 		.quad	.LBE2405
+ 35615      00000000 
+ 35616 870c 02       		.byte	0x2
+ 35617 870d 4905     		.value	0x549
+ 35618 870f 32       		.uleb128 0x32
+ 35619 8710 E90E0000 		.long	0xee9
+ 35620 8714 03       		.byte	0x3
+ 35621 8715 91       		.byte	0x91
+ 35622 8716 9C71     		.sleb128 -1892
+ 35623 8718 32       		.uleb128 0x32
+ 35624 8719 DD0E0000 		.long	0xedd
+ 35625 871d 03       		.byte	0x3
+ 35626 871e 91       		.byte	0x91
+ 35627 871f A071     		.sleb128 -1888
+ 35628 8721 00       		.byte	0x0
+ 35629 8722 00       		.byte	0x0
+ 35630 8723 33       		.uleb128 0x33
+ 35631 8724 00000000 		.quad	.LBB2407
+ 35631      00000000 
+ 35632 872c 00000000 		.quad	.LBE2407
+ 35632      00000000 
+ 35633 8734 34       		.uleb128 0x34
+ 35634 8735 480C0000 		.long	0xc48
+ 35635 8739 04       		.byte	0x4
+ 35636 873a 91       		.byte	0x91
+ 35637 873b 80BF7F   		.sleb128 -8320
+ 35638 873e 00       		.byte	0x0
+ 35639 873f 00       		.byte	0x0
+ 35640 8740 00       		.byte	0x0
+ 35641 8741 31       		.uleb128 0x31
+ 35642 8742 AC0E0000 		.long	0xeac
+ 35643 8746 00000000 		.quad	.LBB2408
+ 35643      00000000 
+ 35644 874e 00000000 		.quad	.LBE2408
+ 35644      00000000 
+ 35645 8756 02       		.byte	0x2
+ 35646 8757 4507     		.value	0x745
+ 35647 8759 92870000 		.long	0x8792
+ 35648 875d 32       		.uleb128 0x32
+ 35649 875e BE0E0000 		.long	0xebe
+ 35650 8762 03       		.byte	0x3
+ 35651 8763 91       		.byte	0x91
+ 35652 8764 B071     		.sleb128 -1872
+ 35653 8766 35       		.uleb128 0x35
+ 35654 8767 CB0E0000 		.long	0xecb
+ 35655 876b 00000000 		.quad	.LBB2410
+ 35655      00000000 
+ 35656 8773 00000000 		.quad	.LBE2410
+
GAS LISTING /tmp/ccjbMjHD.s 			page 927
+
+
+ 35656      00000000 
+ 35657 877b 02       		.byte	0x2
+ 35658 877c 4905     		.value	0x549
+ 35659 877e 32       		.uleb128 0x32
+ 35660 877f E90E0000 		.long	0xee9
+ 35661 8783 03       		.byte	0x3
+ 35662 8784 91       		.byte	0x91
+ 35663 8785 CC71     		.sleb128 -1844
+ 35664 8787 32       		.uleb128 0x32
+ 35665 8788 DD0E0000 		.long	0xedd
+ 35666 878c 03       		.byte	0x3
+ 35667 878d 91       		.byte	0x91
+ 35668 878e D071     		.sleb128 -1840
+ 35669 8790 00       		.byte	0x0
+ 35670 8791 00       		.byte	0x0
+ 35671 8792 31       		.uleb128 0x31
+ 35672 8793 71560000 		.long	0x5671
+ 35673 8797 00000000 		.quad	.LBB2412
+ 35673      00000000 
+ 35674 879f 00000000 		.quad	.LBE2412
+ 35674      00000000 
+ 35675 87a7 02       		.byte	0x2
+ 35676 87a8 4D07     		.value	0x74d
+ 35677 87aa 5C880000 		.long	0x885c
+ 35678 87ae 32       		.uleb128 0x32
+ 35679 87af 8F560000 		.long	0x568f
+ 35680 87b3 03       		.byte	0x3
+ 35681 87b4 91       		.byte	0x91
+ 35682 87b5 EC71     		.sleb128 -1812
+ 35683 87b7 32       		.uleb128 0x32
+ 35684 87b8 83560000 		.long	0x5683
+ 35685 87bc 03       		.byte	0x3
+ 35686 87bd 91       		.byte	0x91
+ 35687 87be F071     		.sleb128 -1808
+ 35688 87c0 33       		.uleb128 0x33
+ 35689 87c1 00000000 		.quad	.LBB2413
+ 35689      00000000 
+ 35690 87c9 00000000 		.quad	.LBE2413
+ 35690      00000000 
+ 35691 87d1 34       		.uleb128 0x34
+ 35692 87d2 9B560000 		.long	0x569b
+ 35693 87d6 04       		.byte	0x4
+ 35694 87d7 91       		.byte	0x91
+ 35695 87d8 D0BF7F   		.sleb128 -8240
+ 35696 87db 34       		.uleb128 0x34
+ 35697 87dc A5560000 		.long	0x56a5
+ 35698 87e0 03       		.byte	0x3
+ 35699 87e1 91       		.byte	0x91
+ 35700 87e2 9072     		.sleb128 -1776
+ 35701 87e4 34       		.uleb128 0x34
+ 35702 87e5 B1560000 		.long	0x56b1
+ 35703 87e9 03       		.byte	0x3
+ 35704 87ea 91       		.byte	0x91
+ 35705 87eb 8C72     		.sleb128 -1780
+ 35706 87ed 31       		.uleb128 0x31
+ 35707 87ee BE560000 		.long	0x56be
+ 35708 87f2 00000000 		.quad	.LBB2414
+
GAS LISTING /tmp/ccjbMjHD.s 			page 928
+
+
+ 35708      00000000 
+ 35709 87fa 00000000 		.quad	.LBE2414
+ 35709      00000000 
+ 35710 8802 02       		.byte	0x2
+ 35711 8803 5F06     		.value	0x65f
+ 35712 8805 38880000 		.long	0x8838
+ 35713 8809 32       		.uleb128 0x32
+ 35714 880a D0560000 		.long	0x56d0
+ 35715 880e 03       		.byte	0x3
+ 35716 880f 91       		.byte	0x91
+ 35717 8810 9472     		.sleb128 -1772
+ 35718 8812 33       		.uleb128 0x33
+ 35719 8813 00000000 		.quad	.LBB2415
+ 35719      00000000 
+ 35720 881b 00000000 		.quad	.LBE2415
+ 35720      00000000 
+ 35721 8823 34       		.uleb128 0x34
+ 35722 8824 DA560000 		.long	0x56da
+ 35723 8828 04       		.byte	0x4
+ 35724 8829 91       		.byte	0x91
+ 35725 882a C0BF7F   		.sleb128 -8256
+ 35726 882d 34       		.uleb128 0x34
+ 35727 882e E6560000 		.long	0x56e6
+ 35728 8832 03       		.byte	0x3
+ 35729 8833 91       		.byte	0x91
+ 35730 8834 9872     		.sleb128 -1768
+ 35731 8836 00       		.byte	0x0
+ 35732 8837 00       		.byte	0x0
+ 35733 8838 35       		.uleb128 0x35
+ 35734 8839 F2560000 		.long	0x56f2
+ 35735 883d 00000000 		.quad	.LBB2416
+ 35735      00000000 
+ 35736 8845 00000000 		.quad	.LBE2416
+ 35736      00000000 
+ 35737 884d 02       		.byte	0x2
+ 35738 884e 6006     		.value	0x660
+ 35739 8850 32       		.uleb128 0x32
+ 35740 8851 04570000 		.long	0x5704
+ 35741 8855 03       		.byte	0x3
+ 35742 8856 91       		.byte	0x91
+ 35743 8857 9C72     		.sleb128 -1764
+ 35744 8859 00       		.byte	0x0
+ 35745 885a 00       		.byte	0x0
+ 35746 885b 00       		.byte	0x0
+ 35747 885c 31       		.uleb128 0x31
+ 35748 885d F60E0000 		.long	0xef6
+ 35749 8861 00000000 		.quad	.LBB2418
+ 35749      00000000 
+ 35750 8869 00000000 		.quad	.LBE2418
+ 35750      00000000 
+ 35751 8871 02       		.byte	0x2
+ 35752 8872 4F07     		.value	0x74f
+ 35753 8874 718A0000 		.long	0x8a71
+ 35754 8878 32       		.uleb128 0x32
+ 35755 8879 080F0000 		.long	0xf08
+ 35756 887d 03       		.byte	0x3
+ 35757 887e 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 929
+
+
+ 35758 887f A072     		.sleb128 -1760
+ 35759 8881 33       		.uleb128 0x33
+ 35760 8882 00000000 		.quad	.LBB2419
+ 35760      00000000 
+ 35761 888a 00000000 		.quad	.LBE2419
+ 35761      00000000 
+ 35762 8892 34       		.uleb128 0x34
+ 35763 8893 140F0000 		.long	0xf14
+ 35764 8897 04       		.byte	0x4
+ 35765 8898 76       		.byte	0x76
+ 35766 8899 D0BC7F   		.sleb128 -8624
+ 35767 889c 31       		.uleb128 0x31
+ 35768 889d 210F0000 		.long	0xf21
+ 35769 88a1 00000000 		.quad	.LBB2420
+ 35769      00000000 
+ 35770 88a9 00000000 		.quad	.LBE2420
+ 35770      00000000 
+ 35771 88b1 02       		.byte	0x2
+ 35772 88b2 1F06     		.value	0x61f
+ 35773 88b4 39890000 		.long	0x8939
+ 35774 88b8 32       		.uleb128 0x32
+ 35775 88b9 330F0000 		.long	0xf33
+ 35776 88bd 03       		.byte	0x3
+ 35777 88be 91       		.byte	0x91
+ 35778 88bf B072     		.sleb128 -1744
+ 35779 88c1 33       		.uleb128 0x33
+ 35780 88c2 00000000 		.quad	.LBB2421
+ 35780      00000000 
+ 35781 88ca 00000000 		.quad	.LBE2421
+ 35781      00000000 
+ 35782 88d2 34       		.uleb128 0x34
+ 35783 88d3 3F0F0000 		.long	0xf3f
+ 35784 88d7 09       		.byte	0x9
+ 35785 88d8 03       		.byte	0x3
+ 35786 88d9 00000000 		.quad	mask.7943
+ 35786      00000000 
+ 35787 88e1 35       		.uleb128 0x35
+ 35788 88e2 A00D0000 		.long	0xda0
+ 35789 88e6 00000000 		.quad	.LBB2422
+ 35789      00000000 
+ 35790 88ee 00000000 		.quad	.LBE2422
+ 35790      00000000 
+ 35791 88f6 02       		.byte	0x2
+ 35792 88f7 FE04     		.value	0x4fe
+ 35793 88f9 32       		.uleb128 0x32
+ 35794 88fa BE0D0000 		.long	0xdbe
+ 35795 88fe 03       		.byte	0x3
+ 35796 88ff 91       		.byte	0x91
+ 35797 8900 C072     		.sleb128 -1728
+ 35798 8902 32       		.uleb128 0x32
+ 35799 8903 B20D0000 		.long	0xdb2
+ 35800 8907 03       		.byte	0x3
+ 35801 8908 91       		.byte	0x91
+ 35802 8909 D072     		.sleb128 -1712
+ 35803 890b 35       		.uleb128 0x35
+ 35804 890c CB0D0000 		.long	0xdcb
+ 35805 8910 00000000 		.quad	.LBB2424
+
GAS LISTING /tmp/ccjbMjHD.s 			page 930
+
+
+ 35805      00000000 
+ 35806 8918 00000000 		.quad	.LBE2424
+ 35806      00000000 
+ 35807 8920 02       		.byte	0x2
+ 35808 8921 7501     		.value	0x175
+ 35809 8923 32       		.uleb128 0x32
+ 35810 8924 E90D0000 		.long	0xde9
+ 35811 8928 03       		.byte	0x3
+ 35812 8929 91       		.byte	0x91
+ 35813 892a E072     		.sleb128 -1696
+ 35814 892c 32       		.uleb128 0x32
+ 35815 892d DD0D0000 		.long	0xddd
+ 35816 8931 03       		.byte	0x3
+ 35817 8932 91       		.byte	0x91
+ 35818 8933 F072     		.sleb128 -1680
+ 35819 8935 00       		.byte	0x0
+ 35820 8936 00       		.byte	0x0
+ 35821 8937 00       		.byte	0x0
+ 35822 8938 00       		.byte	0x0
+ 35823 8939 31       		.uleb128 0x31
+ 35824 893a 210F0000 		.long	0xf21
+ 35825 893e 00000000 		.quad	.LBB2426
+ 35825      00000000 
+ 35826 8946 00000000 		.quad	.LBE2426
+ 35826      00000000 
+ 35827 894e 02       		.byte	0x2
+ 35828 894f 2006     		.value	0x620
+ 35829 8951 D6890000 		.long	0x89d6
+ 35830 8955 32       		.uleb128 0x32
+ 35831 8956 330F0000 		.long	0xf33
+ 35832 895a 03       		.byte	0x3
+ 35833 895b 91       		.byte	0x91
+ 35834 895c 8073     		.sleb128 -1664
+ 35835 895e 33       		.uleb128 0x33
+ 35836 895f 00000000 		.quad	.LBB2427
+ 35836      00000000 
+ 35837 8967 00000000 		.quad	.LBE2427
+ 35837      00000000 
+ 35838 896f 34       		.uleb128 0x34
+ 35839 8970 3F0F0000 		.long	0xf3f
+ 35840 8974 09       		.byte	0x9
+ 35841 8975 03       		.byte	0x3
+ 35842 8976 00000000 		.quad	mask.7943
+ 35842      00000000 
+ 35843 897e 35       		.uleb128 0x35
+ 35844 897f A00D0000 		.long	0xda0
+ 35845 8983 00000000 		.quad	.LBB2428
+ 35845      00000000 
+ 35846 898b 00000000 		.quad	.LBE2428
+ 35846      00000000 
+ 35847 8993 02       		.byte	0x2
+ 35848 8994 FE04     		.value	0x4fe
+ 35849 8996 32       		.uleb128 0x32
+ 35850 8997 BE0D0000 		.long	0xdbe
+ 35851 899b 03       		.byte	0x3
+ 35852 899c 91       		.byte	0x91
+ 35853 899d 9073     		.sleb128 -1648
+
GAS LISTING /tmp/ccjbMjHD.s 			page 931
+
+
+ 35854 899f 32       		.uleb128 0x32
+ 35855 89a0 B20D0000 		.long	0xdb2
+ 35856 89a4 03       		.byte	0x3
+ 35857 89a5 91       		.byte	0x91
+ 35858 89a6 A073     		.sleb128 -1632
+ 35859 89a8 35       		.uleb128 0x35
+ 35860 89a9 CB0D0000 		.long	0xdcb
+ 35861 89ad 00000000 		.quad	.LBB2430
+ 35861      00000000 
+ 35862 89b5 00000000 		.quad	.LBE2430
+ 35862      00000000 
+ 35863 89bd 02       		.byte	0x2
+ 35864 89be 7501     		.value	0x175
+ 35865 89c0 32       		.uleb128 0x32
+ 35866 89c1 E90D0000 		.long	0xde9
+ 35867 89c5 03       		.byte	0x3
+ 35868 89c6 91       		.byte	0x91
+ 35869 89c7 B073     		.sleb128 -1616
+ 35870 89c9 32       		.uleb128 0x32
+ 35871 89ca DD0D0000 		.long	0xddd
+ 35872 89ce 03       		.byte	0x3
+ 35873 89cf 91       		.byte	0x91
+ 35874 89d0 C073     		.sleb128 -1600
+ 35875 89d2 00       		.byte	0x0
+ 35876 89d3 00       		.byte	0x0
+ 35877 89d4 00       		.byte	0x0
+ 35878 89d5 00       		.byte	0x0
+ 35879 89d6 35       		.uleb128 0x35
+ 35880 89d7 210F0000 		.long	0xf21
+ 35881 89db 00000000 		.quad	.LBB2432
+ 35881      00000000 
+ 35882 89e3 00000000 		.quad	.LBE2432
+ 35882      00000000 
+ 35883 89eb 02       		.byte	0x2
+ 35884 89ec 2106     		.value	0x621
+ 35885 89ee 32       		.uleb128 0x32
+ 35886 89ef 330F0000 		.long	0xf33
+ 35887 89f3 03       		.byte	0x3
+ 35888 89f4 91       		.byte	0x91
+ 35889 89f5 D073     		.sleb128 -1584
+ 35890 89f7 33       		.uleb128 0x33
+ 35891 89f8 00000000 		.quad	.LBB2433
+ 35891      00000000 
+ 35892 8a00 00000000 		.quad	.LBE2433
+ 35892      00000000 
+ 35893 8a08 34       		.uleb128 0x34
+ 35894 8a09 3F0F0000 		.long	0xf3f
+ 35895 8a0d 09       		.byte	0x9
+ 35896 8a0e 03       		.byte	0x3
+ 35897 8a0f 00000000 		.quad	mask.7943
+ 35897      00000000 
+ 35898 8a17 35       		.uleb128 0x35
+ 35899 8a18 A00D0000 		.long	0xda0
+ 35900 8a1c 00000000 		.quad	.LBB2434
+ 35900      00000000 
+ 35901 8a24 00000000 		.quad	.LBE2434
+ 35901      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 932
+
+
+ 35902 8a2c 02       		.byte	0x2
+ 35903 8a2d FE04     		.value	0x4fe
+ 35904 8a2f 32       		.uleb128 0x32
+ 35905 8a30 BE0D0000 		.long	0xdbe
+ 35906 8a34 03       		.byte	0x3
+ 35907 8a35 91       		.byte	0x91
+ 35908 8a36 E073     		.sleb128 -1568
+ 35909 8a38 32       		.uleb128 0x32
+ 35910 8a39 B20D0000 		.long	0xdb2
+ 35911 8a3d 03       		.byte	0x3
+ 35912 8a3e 91       		.byte	0x91
+ 35913 8a3f F073     		.sleb128 -1552
+ 35914 8a41 35       		.uleb128 0x35
+ 35915 8a42 CB0D0000 		.long	0xdcb
+ 35916 8a46 00000000 		.quad	.LBB2436
+ 35916      00000000 
+ 35917 8a4e 00000000 		.quad	.LBE2436
+ 35917      00000000 
+ 35918 8a56 02       		.byte	0x2
+ 35919 8a57 7501     		.value	0x175
+ 35920 8a59 32       		.uleb128 0x32
+ 35921 8a5a E90D0000 		.long	0xde9
+ 35922 8a5e 03       		.byte	0x3
+ 35923 8a5f 91       		.byte	0x91
+ 35924 8a60 8074     		.sleb128 -1536
+ 35925 8a62 32       		.uleb128 0x32
+ 35926 8a63 DD0D0000 		.long	0xddd
+ 35927 8a67 03       		.byte	0x3
+ 35928 8a68 91       		.byte	0x91
+ 35929 8a69 9074     		.sleb128 -1520
+ 35930 8a6b 00       		.byte	0x0
+ 35931 8a6c 00       		.byte	0x0
+ 35932 8a6d 00       		.byte	0x0
+ 35933 8a6e 00       		.byte	0x0
+ 35934 8a6f 00       		.byte	0x0
+ 35935 8a70 00       		.byte	0x0
+ 35936 8a71 31       		.uleb128 0x31
+ 35937 8a72 F60E0000 		.long	0xef6
+ 35938 8a76 00000000 		.quad	.LBB2438
+ 35938      00000000 
+ 35939 8a7e 00000000 		.quad	.LBE2438
+ 35939      00000000 
+ 35940 8a86 02       		.byte	0x2
+ 35941 8a87 5007     		.value	0x750
+ 35942 8a89 868C0000 		.long	0x8c86
+ 35943 8a8d 32       		.uleb128 0x32
+ 35944 8a8e 080F0000 		.long	0xf08
+ 35945 8a92 03       		.byte	0x3
+ 35946 8a93 91       		.byte	0x91
+ 35947 8a94 A074     		.sleb128 -1504
+ 35948 8a96 33       		.uleb128 0x33
+ 35949 8a97 00000000 		.quad	.LBB2439
+ 35949      00000000 
+ 35950 8a9f 00000000 		.quad	.LBE2439
+ 35950      00000000 
+ 35951 8aa7 34       		.uleb128 0x34
+ 35952 8aa8 140F0000 		.long	0xf14
+
GAS LISTING /tmp/ccjbMjHD.s 			page 933
+
+
+ 35953 8aac 04       		.byte	0x4
+ 35954 8aad 76       		.byte	0x76
+ 35955 8aae E0BC7F   		.sleb128 -8608
+ 35956 8ab1 31       		.uleb128 0x31
+ 35957 8ab2 210F0000 		.long	0xf21
+ 35958 8ab6 00000000 		.quad	.LBB2440
+ 35958      00000000 
+ 35959 8abe 00000000 		.quad	.LBE2440
+ 35959      00000000 
+ 35960 8ac6 02       		.byte	0x2
+ 35961 8ac7 1F06     		.value	0x61f
+ 35962 8ac9 4E8B0000 		.long	0x8b4e
+ 35963 8acd 32       		.uleb128 0x32
+ 35964 8ace 330F0000 		.long	0xf33
+ 35965 8ad2 03       		.byte	0x3
+ 35966 8ad3 91       		.byte	0x91
+ 35967 8ad4 B074     		.sleb128 -1488
+ 35968 8ad6 33       		.uleb128 0x33
+ 35969 8ad7 00000000 		.quad	.LBB2441
+ 35969      00000000 
+ 35970 8adf 00000000 		.quad	.LBE2441
+ 35970      00000000 
+ 35971 8ae7 34       		.uleb128 0x34
+ 35972 8ae8 3F0F0000 		.long	0xf3f
+ 35973 8aec 09       		.byte	0x9
+ 35974 8aed 03       		.byte	0x3
+ 35975 8aee 00000000 		.quad	mask.7943
+ 35975      00000000 
+ 35976 8af6 35       		.uleb128 0x35
+ 35977 8af7 A00D0000 		.long	0xda0
+ 35978 8afb 00000000 		.quad	.LBB2442
+ 35978      00000000 
+ 35979 8b03 00000000 		.quad	.LBE2442
+ 35979      00000000 
+ 35980 8b0b 02       		.byte	0x2
+ 35981 8b0c FE04     		.value	0x4fe
+ 35982 8b0e 32       		.uleb128 0x32
+ 35983 8b0f BE0D0000 		.long	0xdbe
+ 35984 8b13 03       		.byte	0x3
+ 35985 8b14 91       		.byte	0x91
+ 35986 8b15 C074     		.sleb128 -1472
+ 35987 8b17 32       		.uleb128 0x32
+ 35988 8b18 B20D0000 		.long	0xdb2
+ 35989 8b1c 03       		.byte	0x3
+ 35990 8b1d 91       		.byte	0x91
+ 35991 8b1e D074     		.sleb128 -1456
+ 35992 8b20 35       		.uleb128 0x35
+ 35993 8b21 CB0D0000 		.long	0xdcb
+ 35994 8b25 00000000 		.quad	.LBB2444
+ 35994      00000000 
+ 35995 8b2d 00000000 		.quad	.LBE2444
+ 35995      00000000 
+ 35996 8b35 02       		.byte	0x2
+ 35997 8b36 7501     		.value	0x175
+ 35998 8b38 32       		.uleb128 0x32
+ 35999 8b39 E90D0000 		.long	0xde9
+ 36000 8b3d 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 934
+
+
+ 36001 8b3e 91       		.byte	0x91
+ 36002 8b3f E074     		.sleb128 -1440
+ 36003 8b41 32       		.uleb128 0x32
+ 36004 8b42 DD0D0000 		.long	0xddd
+ 36005 8b46 03       		.byte	0x3
+ 36006 8b47 91       		.byte	0x91
+ 36007 8b48 F074     		.sleb128 -1424
+ 36008 8b4a 00       		.byte	0x0
+ 36009 8b4b 00       		.byte	0x0
+ 36010 8b4c 00       		.byte	0x0
+ 36011 8b4d 00       		.byte	0x0
+ 36012 8b4e 31       		.uleb128 0x31
+ 36013 8b4f 210F0000 		.long	0xf21
+ 36014 8b53 00000000 		.quad	.LBB2446
+ 36014      00000000 
+ 36015 8b5b 00000000 		.quad	.LBE2446
+ 36015      00000000 
+ 36016 8b63 02       		.byte	0x2
+ 36017 8b64 2006     		.value	0x620
+ 36018 8b66 EB8B0000 		.long	0x8beb
+ 36019 8b6a 32       		.uleb128 0x32
+ 36020 8b6b 330F0000 		.long	0xf33
+ 36021 8b6f 03       		.byte	0x3
+ 36022 8b70 91       		.byte	0x91
+ 36023 8b71 8075     		.sleb128 -1408
+ 36024 8b73 33       		.uleb128 0x33
+ 36025 8b74 00000000 		.quad	.LBB2447
+ 36025      00000000 
+ 36026 8b7c 00000000 		.quad	.LBE2447
+ 36026      00000000 
+ 36027 8b84 34       		.uleb128 0x34
+ 36028 8b85 3F0F0000 		.long	0xf3f
+ 36029 8b89 09       		.byte	0x9
+ 36030 8b8a 03       		.byte	0x3
+ 36031 8b8b 00000000 		.quad	mask.7943
+ 36031      00000000 
+ 36032 8b93 35       		.uleb128 0x35
+ 36033 8b94 A00D0000 		.long	0xda0
+ 36034 8b98 00000000 		.quad	.LBB2448
+ 36034      00000000 
+ 36035 8ba0 00000000 		.quad	.LBE2448
+ 36035      00000000 
+ 36036 8ba8 02       		.byte	0x2
+ 36037 8ba9 FE04     		.value	0x4fe
+ 36038 8bab 32       		.uleb128 0x32
+ 36039 8bac BE0D0000 		.long	0xdbe
+ 36040 8bb0 03       		.byte	0x3
+ 36041 8bb1 91       		.byte	0x91
+ 36042 8bb2 9075     		.sleb128 -1392
+ 36043 8bb4 32       		.uleb128 0x32
+ 36044 8bb5 B20D0000 		.long	0xdb2
+ 36045 8bb9 03       		.byte	0x3
+ 36046 8bba 91       		.byte	0x91
+ 36047 8bbb A075     		.sleb128 -1376
+ 36048 8bbd 35       		.uleb128 0x35
+ 36049 8bbe CB0D0000 		.long	0xdcb
+ 36050 8bc2 00000000 		.quad	.LBB2450
+
GAS LISTING /tmp/ccjbMjHD.s 			page 935
+
+
+ 36050      00000000 
+ 36051 8bca 00000000 		.quad	.LBE2450
+ 36051      00000000 
+ 36052 8bd2 02       		.byte	0x2
+ 36053 8bd3 7501     		.value	0x175
+ 36054 8bd5 32       		.uleb128 0x32
+ 36055 8bd6 E90D0000 		.long	0xde9
+ 36056 8bda 03       		.byte	0x3
+ 36057 8bdb 91       		.byte	0x91
+ 36058 8bdc B075     		.sleb128 -1360
+ 36059 8bde 32       		.uleb128 0x32
+ 36060 8bdf DD0D0000 		.long	0xddd
+ 36061 8be3 03       		.byte	0x3
+ 36062 8be4 91       		.byte	0x91
+ 36063 8be5 C075     		.sleb128 -1344
+ 36064 8be7 00       		.byte	0x0
+ 36065 8be8 00       		.byte	0x0
+ 36066 8be9 00       		.byte	0x0
+ 36067 8bea 00       		.byte	0x0
+ 36068 8beb 35       		.uleb128 0x35
+ 36069 8bec 210F0000 		.long	0xf21
+ 36070 8bf0 00000000 		.quad	.LBB2452
+ 36070      00000000 
+ 36071 8bf8 00000000 		.quad	.LBE2452
+ 36071      00000000 
+ 36072 8c00 02       		.byte	0x2
+ 36073 8c01 2106     		.value	0x621
+ 36074 8c03 32       		.uleb128 0x32
+ 36075 8c04 330F0000 		.long	0xf33
+ 36076 8c08 03       		.byte	0x3
+ 36077 8c09 91       		.byte	0x91
+ 36078 8c0a D075     		.sleb128 -1328
+ 36079 8c0c 33       		.uleb128 0x33
+ 36080 8c0d 00000000 		.quad	.LBB2453
+ 36080      00000000 
+ 36081 8c15 00000000 		.quad	.LBE2453
+ 36081      00000000 
+ 36082 8c1d 34       		.uleb128 0x34
+ 36083 8c1e 3F0F0000 		.long	0xf3f
+ 36084 8c22 09       		.byte	0x9
+ 36085 8c23 03       		.byte	0x3
+ 36086 8c24 00000000 		.quad	mask.7943
+ 36086      00000000 
+ 36087 8c2c 35       		.uleb128 0x35
+ 36088 8c2d A00D0000 		.long	0xda0
+ 36089 8c31 00000000 		.quad	.LBB2454
+ 36089      00000000 
+ 36090 8c39 00000000 		.quad	.LBE2454
+ 36090      00000000 
+ 36091 8c41 02       		.byte	0x2
+ 36092 8c42 FE04     		.value	0x4fe
+ 36093 8c44 32       		.uleb128 0x32
+ 36094 8c45 BE0D0000 		.long	0xdbe
+ 36095 8c49 03       		.byte	0x3
+ 36096 8c4a 91       		.byte	0x91
+ 36097 8c4b E075     		.sleb128 -1312
+ 36098 8c4d 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 936
+
+
+ 36099 8c4e B20D0000 		.long	0xdb2
+ 36100 8c52 03       		.byte	0x3
+ 36101 8c53 91       		.byte	0x91
+ 36102 8c54 F075     		.sleb128 -1296
+ 36103 8c56 35       		.uleb128 0x35
+ 36104 8c57 CB0D0000 		.long	0xdcb
+ 36105 8c5b 00000000 		.quad	.LBB2456
+ 36105      00000000 
+ 36106 8c63 00000000 		.quad	.LBE2456
+ 36106      00000000 
+ 36107 8c6b 02       		.byte	0x2
+ 36108 8c6c 7501     		.value	0x175
+ 36109 8c6e 32       		.uleb128 0x32
+ 36110 8c6f E90D0000 		.long	0xde9
+ 36111 8c73 03       		.byte	0x3
+ 36112 8c74 91       		.byte	0x91
+ 36113 8c75 8076     		.sleb128 -1280
+ 36114 8c77 32       		.uleb128 0x32
+ 36115 8c78 DD0D0000 		.long	0xddd
+ 36116 8c7c 03       		.byte	0x3
+ 36117 8c7d 91       		.byte	0x91
+ 36118 8c7e 9076     		.sleb128 -1264
+ 36119 8c80 00       		.byte	0x0
+ 36120 8c81 00       		.byte	0x0
+ 36121 8c82 00       		.byte	0x0
+ 36122 8c83 00       		.byte	0x0
+ 36123 8c84 00       		.byte	0x0
+ 36124 8c85 00       		.byte	0x0
+ 36125 8c86 31       		.uleb128 0x31
+ 36126 8c87 AC0E0000 		.long	0xeac
+ 36127 8c8b 00000000 		.quad	.LBB2458
+ 36127      00000000 
+ 36128 8c93 00000000 		.quad	.LBE2458
+ 36128      00000000 
+ 36129 8c9b 02       		.byte	0x2
+ 36130 8c9c 5207     		.value	0x752
+ 36131 8c9e D78C0000 		.long	0x8cd7
+ 36132 8ca2 32       		.uleb128 0x32
+ 36133 8ca3 BE0E0000 		.long	0xebe
+ 36134 8ca7 03       		.byte	0x3
+ 36135 8ca8 91       		.byte	0x91
+ 36136 8ca9 A076     		.sleb128 -1248
+ 36137 8cab 35       		.uleb128 0x35
+ 36138 8cac CB0E0000 		.long	0xecb
+ 36139 8cb0 00000000 		.quad	.LBB2460
+ 36139      00000000 
+ 36140 8cb8 00000000 		.quad	.LBE2460
+ 36140      00000000 
+ 36141 8cc0 02       		.byte	0x2
+ 36142 8cc1 4905     		.value	0x549
+ 36143 8cc3 32       		.uleb128 0x32
+ 36144 8cc4 E90E0000 		.long	0xee9
+ 36145 8cc8 03       		.byte	0x3
+ 36146 8cc9 91       		.byte	0x91
+ 36147 8cca BC76     		.sleb128 -1220
+ 36148 8ccc 32       		.uleb128 0x32
+ 36149 8ccd DD0E0000 		.long	0xedd
+
GAS LISTING /tmp/ccjbMjHD.s 			page 937
+
+
+ 36150 8cd1 03       		.byte	0x3
+ 36151 8cd2 91       		.byte	0x91
+ 36152 8cd3 C076     		.sleb128 -1216
+ 36153 8cd5 00       		.byte	0x0
+ 36154 8cd6 00       		.byte	0x0
+ 36155 8cd7 31       		.uleb128 0x31
+ 36156 8cd8 0F570000 		.long	0x570f
+ 36157 8cdc 00000000 		.quad	.LBB2462
+ 36157      00000000 
+ 36158 8ce4 00000000 		.quad	.LBE2462
+ 36158      00000000 
+ 36159 8cec 02       		.byte	0x2
+ 36160 8ced 5407     		.value	0x754
+ 36161 8cef 3A8D0000 		.long	0x8d3a
+ 36162 8cf3 32       		.uleb128 0x32
+ 36163 8cf4 2B570000 		.long	0x572b
+ 36164 8cf8 03       		.byte	0x3
+ 36165 8cf9 91       		.byte	0x91
+ 36166 8cfa D076     		.sleb128 -1200
+ 36167 8cfc 32       		.uleb128 0x32
+ 36168 8cfd 21570000 		.long	0x5721
+ 36169 8d01 03       		.byte	0x3
+ 36170 8d02 91       		.byte	0x91
+ 36171 8d03 E076     		.sleb128 -1184
+ 36172 8d05 35       		.uleb128 0x35
+ 36173 8d06 36570000 		.long	0x5736
+ 36174 8d0a 00000000 		.quad	.LBB2464
+ 36174      00000000 
+ 36175 8d12 00000000 		.quad	.LBE2464
+ 36175      00000000 
+ 36176 8d1a 02       		.byte	0x2
+ 36177 8d1b BA05     		.value	0x5ba
+ 36178 8d1d 32       		.uleb128 0x32
+ 36179 8d1e 60570000 		.long	0x5760
+ 36180 8d22 03       		.byte	0x3
+ 36181 8d23 91       		.byte	0x91
+ 36182 8d24 FC76     		.sleb128 -1156
+ 36183 8d26 32       		.uleb128 0x32
+ 36184 8d27 54570000 		.long	0x5754
+ 36185 8d2b 03       		.byte	0x3
+ 36186 8d2c 91       		.byte	0x91
+ 36187 8d2d 8077     		.sleb128 -1152
+ 36188 8d2f 32       		.uleb128 0x32
+ 36189 8d30 48570000 		.long	0x5748
+ 36190 8d34 03       		.byte	0x3
+ 36191 8d35 91       		.byte	0x91
+ 36192 8d36 9077     		.sleb128 -1136
+ 36193 8d38 00       		.byte	0x0
+ 36194 8d39 00       		.byte	0x0
+ 36195 8d3a 31       		.uleb128 0x31
+ 36196 8d3b 6D570000 		.long	0x576d
+ 36197 8d3f 00000000 		.quad	.LBB2466
+ 36197      00000000 
+ 36198 8d47 00000000 		.quad	.LBE2466
+ 36198      00000000 
+ 36199 8d4f 02       		.byte	0x2
+ 36200 8d50 5607     		.value	0x756
+
GAS LISTING /tmp/ccjbMjHD.s 			page 938
+
+
+ 36201 8d52 9D8D0000 		.long	0x8d9d
+ 36202 8d56 32       		.uleb128 0x32
+ 36203 8d57 89570000 		.long	0x5789
+ 36204 8d5b 03       		.byte	0x3
+ 36205 8d5c 91       		.byte	0x91
+ 36206 8d5d A077     		.sleb128 -1120
+ 36207 8d5f 32       		.uleb128 0x32
+ 36208 8d60 7F570000 		.long	0x577f
+ 36209 8d64 03       		.byte	0x3
+ 36210 8d65 91       		.byte	0x91
+ 36211 8d66 B077     		.sleb128 -1104
+ 36212 8d68 35       		.uleb128 0x35
+ 36213 8d69 36570000 		.long	0x5736
+ 36214 8d6d 00000000 		.quad	.LBB2468
+ 36214      00000000 
+ 36215 8d75 00000000 		.quad	.LBE2468
+ 36215      00000000 
+ 36216 8d7d 02       		.byte	0x2
+ 36217 8d7e DA05     		.value	0x5da
+ 36218 8d80 32       		.uleb128 0x32
+ 36219 8d81 60570000 		.long	0x5760
+ 36220 8d85 03       		.byte	0x3
+ 36221 8d86 91       		.byte	0x91
+ 36222 8d87 CC77     		.sleb128 -1076
+ 36223 8d89 32       		.uleb128 0x32
+ 36224 8d8a 54570000 		.long	0x5754
+ 36225 8d8e 03       		.byte	0x3
+ 36226 8d8f 91       		.byte	0x91
+ 36227 8d90 D077     		.sleb128 -1072
+ 36228 8d92 32       		.uleb128 0x32
+ 36229 8d93 48570000 		.long	0x5748
+ 36230 8d97 03       		.byte	0x3
+ 36231 8d98 91       		.byte	0x91
+ 36232 8d99 E077     		.sleb128 -1056
+ 36233 8d9b 00       		.byte	0x0
+ 36234 8d9c 00       		.byte	0x0
+ 36235 8d9d 31       		.uleb128 0x31
+ 36236 8d9e F60E0000 		.long	0xef6
+ 36237 8da2 00000000 		.quad	.LBB2470
+ 36237      00000000 
+ 36238 8daa 00000000 		.quad	.LBE2470
+ 36238      00000000 
+ 36239 8db2 02       		.byte	0x2
+ 36240 8db3 5A07     		.value	0x75a
+ 36241 8db5 B28F0000 		.long	0x8fb2
+ 36242 8db9 32       		.uleb128 0x32
+ 36243 8dba 080F0000 		.long	0xf08
+ 36244 8dbe 03       		.byte	0x3
+ 36245 8dbf 91       		.byte	0x91
+ 36246 8dc0 F077     		.sleb128 -1040
+ 36247 8dc2 33       		.uleb128 0x33
+ 36248 8dc3 00000000 		.quad	.LBB2471
+ 36248      00000000 
+ 36249 8dcb 00000000 		.quad	.LBE2471
+ 36249      00000000 
+ 36250 8dd3 34       		.uleb128 0x34
+ 36251 8dd4 140F0000 		.long	0xf14
+
GAS LISTING /tmp/ccjbMjHD.s 			page 939
+
+
+ 36252 8dd8 04       		.byte	0x4
+ 36253 8dd9 76       		.byte	0x76
+ 36254 8dda F0BC7F   		.sleb128 -8592
+ 36255 8ddd 31       		.uleb128 0x31
+ 36256 8dde 210F0000 		.long	0xf21
+ 36257 8de2 00000000 		.quad	.LBB2472
+ 36257      00000000 
+ 36258 8dea 00000000 		.quad	.LBE2472
+ 36258      00000000 
+ 36259 8df2 02       		.byte	0x2
+ 36260 8df3 1F06     		.value	0x61f
+ 36261 8df5 7A8E0000 		.long	0x8e7a
+ 36262 8df9 32       		.uleb128 0x32
+ 36263 8dfa 330F0000 		.long	0xf33
+ 36264 8dfe 03       		.byte	0x3
+ 36265 8dff 91       		.byte	0x91
+ 36266 8e00 8078     		.sleb128 -1024
+ 36267 8e02 33       		.uleb128 0x33
+ 36268 8e03 00000000 		.quad	.LBB2473
+ 36268      00000000 
+ 36269 8e0b 00000000 		.quad	.LBE2473
+ 36269      00000000 
+ 36270 8e13 34       		.uleb128 0x34
+ 36271 8e14 3F0F0000 		.long	0xf3f
+ 36272 8e18 09       		.byte	0x9
+ 36273 8e19 03       		.byte	0x3
+ 36274 8e1a 00000000 		.quad	mask.7943
+ 36274      00000000 
+ 36275 8e22 35       		.uleb128 0x35
+ 36276 8e23 A00D0000 		.long	0xda0
+ 36277 8e27 00000000 		.quad	.LBB2474
+ 36277      00000000 
+ 36278 8e2f 00000000 		.quad	.LBE2474
+ 36278      00000000 
+ 36279 8e37 02       		.byte	0x2
+ 36280 8e38 FE04     		.value	0x4fe
+ 36281 8e3a 32       		.uleb128 0x32
+ 36282 8e3b BE0D0000 		.long	0xdbe
+ 36283 8e3f 03       		.byte	0x3
+ 36284 8e40 91       		.byte	0x91
+ 36285 8e41 9078     		.sleb128 -1008
+ 36286 8e43 32       		.uleb128 0x32
+ 36287 8e44 B20D0000 		.long	0xdb2
+ 36288 8e48 03       		.byte	0x3
+ 36289 8e49 91       		.byte	0x91
+ 36290 8e4a A078     		.sleb128 -992
+ 36291 8e4c 35       		.uleb128 0x35
+ 36292 8e4d CB0D0000 		.long	0xdcb
+ 36293 8e51 00000000 		.quad	.LBB2476
+ 36293      00000000 
+ 36294 8e59 00000000 		.quad	.LBE2476
+ 36294      00000000 
+ 36295 8e61 02       		.byte	0x2
+ 36296 8e62 7501     		.value	0x175
+ 36297 8e64 32       		.uleb128 0x32
+ 36298 8e65 E90D0000 		.long	0xde9
+ 36299 8e69 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 940
+
+
+ 36300 8e6a 91       		.byte	0x91
+ 36301 8e6b B078     		.sleb128 -976
+ 36302 8e6d 32       		.uleb128 0x32
+ 36303 8e6e DD0D0000 		.long	0xddd
+ 36304 8e72 03       		.byte	0x3
+ 36305 8e73 91       		.byte	0x91
+ 36306 8e74 C078     		.sleb128 -960
+ 36307 8e76 00       		.byte	0x0
+ 36308 8e77 00       		.byte	0x0
+ 36309 8e78 00       		.byte	0x0
+ 36310 8e79 00       		.byte	0x0
+ 36311 8e7a 31       		.uleb128 0x31
+ 36312 8e7b 210F0000 		.long	0xf21
+ 36313 8e7f 00000000 		.quad	.LBB2478
+ 36313      00000000 
+ 36314 8e87 00000000 		.quad	.LBE2478
+ 36314      00000000 
+ 36315 8e8f 02       		.byte	0x2
+ 36316 8e90 2006     		.value	0x620
+ 36317 8e92 178F0000 		.long	0x8f17
+ 36318 8e96 32       		.uleb128 0x32
+ 36319 8e97 330F0000 		.long	0xf33
+ 36320 8e9b 03       		.byte	0x3
+ 36321 8e9c 91       		.byte	0x91
+ 36322 8e9d D078     		.sleb128 -944
+ 36323 8e9f 33       		.uleb128 0x33
+ 36324 8ea0 00000000 		.quad	.LBB2479
+ 36324      00000000 
+ 36325 8ea8 00000000 		.quad	.LBE2479
+ 36325      00000000 
+ 36326 8eb0 34       		.uleb128 0x34
+ 36327 8eb1 3F0F0000 		.long	0xf3f
+ 36328 8eb5 09       		.byte	0x9
+ 36329 8eb6 03       		.byte	0x3
+ 36330 8eb7 00000000 		.quad	mask.7943
+ 36330      00000000 
+ 36331 8ebf 35       		.uleb128 0x35
+ 36332 8ec0 A00D0000 		.long	0xda0
+ 36333 8ec4 00000000 		.quad	.LBB2480
+ 36333      00000000 
+ 36334 8ecc 00000000 		.quad	.LBE2480
+ 36334      00000000 
+ 36335 8ed4 02       		.byte	0x2
+ 36336 8ed5 FE04     		.value	0x4fe
+ 36337 8ed7 32       		.uleb128 0x32
+ 36338 8ed8 BE0D0000 		.long	0xdbe
+ 36339 8edc 03       		.byte	0x3
+ 36340 8edd 91       		.byte	0x91
+ 36341 8ede E078     		.sleb128 -928
+ 36342 8ee0 32       		.uleb128 0x32
+ 36343 8ee1 B20D0000 		.long	0xdb2
+ 36344 8ee5 03       		.byte	0x3
+ 36345 8ee6 91       		.byte	0x91
+ 36346 8ee7 F078     		.sleb128 -912
+ 36347 8ee9 35       		.uleb128 0x35
+ 36348 8eea CB0D0000 		.long	0xdcb
+ 36349 8eee 00000000 		.quad	.LBB2482
+
GAS LISTING /tmp/ccjbMjHD.s 			page 941
+
+
+ 36349      00000000 
+ 36350 8ef6 00000000 		.quad	.LBE2482
+ 36350      00000000 
+ 36351 8efe 02       		.byte	0x2
+ 36352 8eff 7501     		.value	0x175
+ 36353 8f01 32       		.uleb128 0x32
+ 36354 8f02 E90D0000 		.long	0xde9
+ 36355 8f06 03       		.byte	0x3
+ 36356 8f07 91       		.byte	0x91
+ 36357 8f08 8079     		.sleb128 -896
+ 36358 8f0a 32       		.uleb128 0x32
+ 36359 8f0b DD0D0000 		.long	0xddd
+ 36360 8f0f 03       		.byte	0x3
+ 36361 8f10 91       		.byte	0x91
+ 36362 8f11 9079     		.sleb128 -880
+ 36363 8f13 00       		.byte	0x0
+ 36364 8f14 00       		.byte	0x0
+ 36365 8f15 00       		.byte	0x0
+ 36366 8f16 00       		.byte	0x0
+ 36367 8f17 35       		.uleb128 0x35
+ 36368 8f18 210F0000 		.long	0xf21
+ 36369 8f1c 00000000 		.quad	.LBB2484
+ 36369      00000000 
+ 36370 8f24 00000000 		.quad	.LBE2484
+ 36370      00000000 
+ 36371 8f2c 02       		.byte	0x2
+ 36372 8f2d 2106     		.value	0x621
+ 36373 8f2f 32       		.uleb128 0x32
+ 36374 8f30 330F0000 		.long	0xf33
+ 36375 8f34 03       		.byte	0x3
+ 36376 8f35 91       		.byte	0x91
+ 36377 8f36 A079     		.sleb128 -864
+ 36378 8f38 33       		.uleb128 0x33
+ 36379 8f39 00000000 		.quad	.LBB2485
+ 36379      00000000 
+ 36380 8f41 00000000 		.quad	.LBE2485
+ 36380      00000000 
+ 36381 8f49 34       		.uleb128 0x34
+ 36382 8f4a 3F0F0000 		.long	0xf3f
+ 36383 8f4e 09       		.byte	0x9
+ 36384 8f4f 03       		.byte	0x3
+ 36385 8f50 00000000 		.quad	mask.7943
+ 36385      00000000 
+ 36386 8f58 35       		.uleb128 0x35
+ 36387 8f59 A00D0000 		.long	0xda0
+ 36388 8f5d 00000000 		.quad	.LBB2486
+ 36388      00000000 
+ 36389 8f65 00000000 		.quad	.LBE2486
+ 36389      00000000 
+ 36390 8f6d 02       		.byte	0x2
+ 36391 8f6e FE04     		.value	0x4fe
+ 36392 8f70 32       		.uleb128 0x32
+ 36393 8f71 BE0D0000 		.long	0xdbe
+ 36394 8f75 03       		.byte	0x3
+ 36395 8f76 91       		.byte	0x91
+ 36396 8f77 B079     		.sleb128 -848
+ 36397 8f79 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 942
+
+
+ 36398 8f7a B20D0000 		.long	0xdb2
+ 36399 8f7e 03       		.byte	0x3
+ 36400 8f7f 91       		.byte	0x91
+ 36401 8f80 C079     		.sleb128 -832
+ 36402 8f82 35       		.uleb128 0x35
+ 36403 8f83 CB0D0000 		.long	0xdcb
+ 36404 8f87 00000000 		.quad	.LBB2488
+ 36404      00000000 
+ 36405 8f8f 00000000 		.quad	.LBE2488
+ 36405      00000000 
+ 36406 8f97 02       		.byte	0x2
+ 36407 8f98 7501     		.value	0x175
+ 36408 8f9a 32       		.uleb128 0x32
+ 36409 8f9b E90D0000 		.long	0xde9
+ 36410 8f9f 03       		.byte	0x3
+ 36411 8fa0 91       		.byte	0x91
+ 36412 8fa1 D079     		.sleb128 -816
+ 36413 8fa3 32       		.uleb128 0x32
+ 36414 8fa4 DD0D0000 		.long	0xddd
+ 36415 8fa8 03       		.byte	0x3
+ 36416 8fa9 91       		.byte	0x91
+ 36417 8faa E079     		.sleb128 -800
+ 36418 8fac 00       		.byte	0x0
+ 36419 8fad 00       		.byte	0x0
+ 36420 8fae 00       		.byte	0x0
+ 36421 8faf 00       		.byte	0x0
+ 36422 8fb0 00       		.byte	0x0
+ 36423 8fb1 00       		.byte	0x0
+ 36424 8fb2 35       		.uleb128 0x35
+ 36425 8fb3 D50B0000 		.long	0xbd5
+ 36426 8fb7 00000000 		.quad	.LBB2490
+ 36426      00000000 
+ 36427 8fbf 00000000 		.quad	.LBE2490
+ 36427      00000000 
+ 36428 8fc7 02       		.byte	0x2
+ 36429 8fc8 5B07     		.value	0x75b
+ 36430 8fca 32       		.uleb128 0x32
+ 36431 8fcb F30B0000 		.long	0xbf3
+ 36432 8fcf 03       		.byte	0x3
+ 36433 8fd0 91       		.byte	0x91
+ 36434 8fd1 FC79     		.sleb128 -772
+ 36435 8fd3 32       		.uleb128 0x32
+ 36436 8fd4 E70B0000 		.long	0xbe7
+ 36437 8fd8 03       		.byte	0x3
+ 36438 8fd9 91       		.byte	0x91
+ 36439 8fda 807A     		.sleb128 -768
+ 36440 8fdc 33       		.uleb128 0x33
+ 36441 8fdd 00000000 		.quad	.LBB2491
+ 36441      00000000 
+ 36442 8fe5 00000000 		.quad	.LBE2491
+ 36442      00000000 
+ 36443 8fed 34       		.uleb128 0x34
+ 36444 8fee FF0B0000 		.long	0xbff
+ 36445 8ff2 04       		.byte	0x4
+ 36446 8ff3 76       		.byte	0x76
+ 36447 8ff4 90BD7F   		.sleb128 -8560
+ 36448 8ff7 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s 			page 943
+
+
+ 36449 8ff8 0B0C0000 		.long	0xc0b
+ 36450 8ffc 04       		.byte	0x4
+ 36451 8ffd 76       		.byte	0x76
+ 36452 8ffe 80BD7F   		.sleb128 -8576
+ 36453 9001 31       		.uleb128 0x31
+ 36454 9002 540C0000 		.long	0xc54
+ 36455 9006 00000000 		.quad	.LBB2492
+ 36455      00000000 
+ 36456 900e 00000000 		.quad	.LBE2492
+ 36456      00000000 
+ 36457 9016 02       		.byte	0x2
+ 36458 9017 9106     		.value	0x691
+ 36459 9019 6D900000 		.long	0x906d
+ 36460 901d 32       		.uleb128 0x32
+ 36461 901e 7E0C0000 		.long	0xc7e
+ 36462 9022 03       		.byte	0x3
+ 36463 9023 91       		.byte	0x91
+ 36464 9024 987A     		.sleb128 -744
+ 36465 9026 32       		.uleb128 0x32
+ 36466 9027 720C0000 		.long	0xc72
+ 36467 902b 03       		.byte	0x3
+ 36468 902c 91       		.byte	0x91
+ 36469 902d 9C7A     		.sleb128 -740
+ 36470 902f 32       		.uleb128 0x32
+ 36471 9030 660C0000 		.long	0xc66
+ 36472 9034 03       		.byte	0x3
+ 36473 9035 91       		.byte	0x91
+ 36474 9036 A07A     		.sleb128 -736
+ 36475 9038 35       		.uleb128 0x35
+ 36476 9039 8B0C0000 		.long	0xc8b
+ 36477 903d 00000000 		.quad	.LBB2494
+ 36477      00000000 
+ 36478 9045 00000000 		.quad	.LBE2494
+ 36478      00000000 
+ 36479 904d 02       		.byte	0x2
+ 36480 904e 0702     		.value	0x207
+ 36481 9050 32       		.uleb128 0x32
+ 36482 9051 B40C0000 		.long	0xcb4
+ 36483 9055 03       		.byte	0x3
+ 36484 9056 91       		.byte	0x91
+ 36485 9057 B87A     		.sleb128 -712
+ 36486 9059 32       		.uleb128 0x32
+ 36487 905a A90C0000 		.long	0xca9
+ 36488 905e 03       		.byte	0x3
+ 36489 905f 91       		.byte	0x91
+ 36490 9060 BC7A     		.sleb128 -708
+ 36491 9062 32       		.uleb128 0x32
+ 36492 9063 9D0C0000 		.long	0xc9d
+ 36493 9067 03       		.byte	0x3
+ 36494 9068 91       		.byte	0x91
+ 36495 9069 C07A     		.sleb128 -704
+ 36496 906b 00       		.byte	0x0
+ 36497 906c 00       		.byte	0x0
+ 36498 906d 31       		.uleb128 0x31
+ 36499 906e C10C0000 		.long	0xcc1
+ 36500 9072 00000000 		.quad	.LBB2496
+ 36500      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 944
+
+
+ 36501 907a 00000000 		.quad	.LBE2496
+ 36501      00000000 
+ 36502 9082 02       		.byte	0x2
+ 36503 9083 9206     		.value	0x692
+ 36504 9085 F6920000 		.long	0x92f6
+ 36505 9089 32       		.uleb128 0x32
+ 36506 908a D30C0000 		.long	0xcd3
+ 36507 908e 03       		.byte	0x3
+ 36508 908f 91       		.byte	0x91
+ 36509 9090 D07A     		.sleb128 -688
+ 36510 9092 35       		.uleb128 0x35
+ 36511 9093 E00C0000 		.long	0xce0
+ 36512 9097 00000000 		.quad	.LBB2498
+ 36512      00000000 
+ 36513 909f 00000000 		.quad	.LBE2498
+ 36513      00000000 
+ 36514 90a7 02       		.byte	0x2
+ 36515 90a8 7D03     		.value	0x37d
+ 36516 90aa 32       		.uleb128 0x32
+ 36517 90ab FE0C0000 		.long	0xcfe
+ 36518 90af 03       		.byte	0x3
+ 36519 90b0 91       		.byte	0x91
+ 36520 90b1 E87A     		.sleb128 -664
+ 36521 90b3 32       		.uleb128 0x32
+ 36522 90b4 F20C0000 		.long	0xcf2
+ 36523 90b8 03       		.byte	0x3
+ 36524 90b9 91       		.byte	0x91
+ 36525 90ba F07A     		.sleb128 -656
+ 36526 90bc 33       		.uleb128 0x33
+ 36527 90bd 00000000 		.quad	.LBB2499
+ 36527      00000000 
+ 36528 90c5 00000000 		.quad	.LBE2499
+ 36528      00000000 
+ 36529 90cd 34       		.uleb128 0x34
+ 36530 90ce 0A0D0000 		.long	0xd0a
+ 36531 90d2 03       		.byte	0x3
+ 36532 90d3 91       		.byte	0x91
+ 36533 90d4 C07B     		.sleb128 -576
+ 36534 90d6 34       		.uleb128 0x34
+ 36535 90d7 150D0000 		.long	0xd15
+ 36536 90db 03       		.byte	0x3
+ 36537 90dc 91       		.byte	0x91
+ 36538 90dd B07B     		.sleb128 -592
+ 36539 90df 34       		.uleb128 0x34
+ 36540 90e0 200D0000 		.long	0xd20
+ 36541 90e4 03       		.byte	0x3
+ 36542 90e5 91       		.byte	0x91
+ 36543 90e6 A07B     		.sleb128 -608
+ 36544 90e8 34       		.uleb128 0x34
+ 36545 90e9 2C0D0000 		.long	0xd2c
+ 36546 90ed 03       		.byte	0x3
+ 36547 90ee 91       		.byte	0x91
+ 36548 90ef 907B     		.sleb128 -624
+ 36549 90f1 34       		.uleb128 0x34
+ 36550 90f2 380D0000 		.long	0xd38
+ 36551 90f6 03       		.byte	0x3
+ 36552 90f7 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 945
+
+
+ 36553 90f8 8C7B     		.sleb128 -628
+ 36554 90fa 31       		.uleb128 0x31
+ 36555 90fb 4F0D0000 		.long	0xd4f
+ 36556 90ff 00000000 		.quad	.LBB2500
+ 36556      00000000 
+ 36557 9107 00000000 		.quad	.LBE2500
+ 36557      00000000 
+ 36558 910f 02       		.byte	0x2
+ 36559 9110 5603     		.value	0x356
+ 36560 9112 29910000 		.long	0x9129
+ 36561 9116 32       		.uleb128 0x32
+ 36562 9117 6A0D0000 		.long	0xd6a
+ 36563 911b 03       		.byte	0x3
+ 36564 911c 91       		.byte	0x91
+ 36565 911d D07B     		.sleb128 -560
+ 36566 911f 32       		.uleb128 0x32
+ 36567 9120 600D0000 		.long	0xd60
+ 36568 9124 03       		.byte	0x3
+ 36569 9125 91       		.byte	0x91
+ 36570 9126 E07B     		.sleb128 -544
+ 36571 9128 00       		.byte	0x0
+ 36572 9129 31       		.uleb128 0x31
+ 36573 912a 750D0000 		.long	0xd75
+ 36574 912e 00000000 		.quad	.LBB2502
+ 36574      00000000 
+ 36575 9136 00000000 		.quad	.LBE2502
+ 36575      00000000 
+ 36576 913e 02       		.byte	0x2
+ 36577 913f 5903     		.value	0x359
+ 36578 9141 58910000 		.long	0x9158
+ 36579 9145 32       		.uleb128 0x32
+ 36580 9146 930D0000 		.long	0xd93
+ 36581 914a 03       		.byte	0x3
+ 36582 914b 91       		.byte	0x91
+ 36583 914c FC7B     		.sleb128 -516
+ 36584 914e 32       		.uleb128 0x32
+ 36585 914f 870D0000 		.long	0xd87
+ 36586 9153 03       		.byte	0x3
+ 36587 9154 91       		.byte	0x91
+ 36588 9155 807C     		.sleb128 -512
+ 36589 9157 00       		.byte	0x0
+ 36590 9158 31       		.uleb128 0x31
+ 36591 9159 4F0D0000 		.long	0xd4f
+ 36592 915d 00000000 		.quad	.LBB2504
+ 36592      00000000 
+ 36593 9165 00000000 		.quad	.LBE2504
+ 36593      00000000 
+ 36594 916d 02       		.byte	0x2
+ 36595 916e 5B03     		.value	0x35b
+ 36596 9170 87910000 		.long	0x9187
+ 36597 9174 32       		.uleb128 0x32
+ 36598 9175 6A0D0000 		.long	0xd6a
+ 36599 9179 03       		.byte	0x3
+ 36600 917a 91       		.byte	0x91
+ 36601 917b 907C     		.sleb128 -496
+ 36602 917d 32       		.uleb128 0x32
+ 36603 917e 600D0000 		.long	0xd60
+
GAS LISTING /tmp/ccjbMjHD.s 			page 946
+
+
+ 36604 9182 03       		.byte	0x3
+ 36605 9183 91       		.byte	0x91
+ 36606 9184 A07C     		.sleb128 -480
+ 36607 9186 00       		.byte	0x0
+ 36608 9187 31       		.uleb128 0x31
+ 36609 9188 A00D0000 		.long	0xda0
+ 36610 918c 00000000 		.quad	.LBB2506
+ 36610      00000000 
+ 36611 9194 00000000 		.quad	.LBE2506
+ 36611      00000000 
+ 36612 919c 02       		.byte	0x2
+ 36613 919d 6403     		.value	0x364
+ 36614 919f E1910000 		.long	0x91e1
+ 36615 91a3 32       		.uleb128 0x32
+ 36616 91a4 BE0D0000 		.long	0xdbe
+ 36617 91a8 03       		.byte	0x3
+ 36618 91a9 91       		.byte	0x91
+ 36619 91aa B07C     		.sleb128 -464
+ 36620 91ac 32       		.uleb128 0x32
+ 36621 91ad B20D0000 		.long	0xdb2
+ 36622 91b1 03       		.byte	0x3
+ 36623 91b2 91       		.byte	0x91
+ 36624 91b3 C07C     		.sleb128 -448
+ 36625 91b5 35       		.uleb128 0x35
+ 36626 91b6 CB0D0000 		.long	0xdcb
+ 36627 91ba 00000000 		.quad	.LBB2508
+ 36627      00000000 
+ 36628 91c2 00000000 		.quad	.LBE2508
+ 36628      00000000 
+ 36629 91ca 02       		.byte	0x2
+ 36630 91cb 7501     		.value	0x175
+ 36631 91cd 32       		.uleb128 0x32
+ 36632 91ce E90D0000 		.long	0xde9
+ 36633 91d2 03       		.byte	0x3
+ 36634 91d3 91       		.byte	0x91
+ 36635 91d4 D07C     		.sleb128 -432
+ 36636 91d6 32       		.uleb128 0x32
+ 36637 91d7 DD0D0000 		.long	0xddd
+ 36638 91db 03       		.byte	0x3
+ 36639 91dc 91       		.byte	0x91
+ 36640 91dd E07C     		.sleb128 -416
+ 36641 91df 00       		.byte	0x0
+ 36642 91e0 00       		.byte	0x0
+ 36643 91e1 31       		.uleb128 0x31
+ 36644 91e2 FB0D0000 		.long	0xdfb
+ 36645 91e6 00000000 		.quad	.LBB2510
+ 36645      00000000 
+ 36646 91ee 00000000 		.quad	.LBE2510
+ 36646      00000000 
+ 36647 91f6 02       		.byte	0x2
+ 36648 91f7 6603     		.value	0x366
+ 36649 91f9 10920000 		.long	0x9210
+ 36650 91fd 32       		.uleb128 0x32
+ 36651 91fe 160E0000 		.long	0xe16
+ 36652 9202 03       		.byte	0x3
+ 36653 9203 91       		.byte	0x91
+ 36654 9204 F07C     		.sleb128 -400
+
GAS LISTING /tmp/ccjbMjHD.s 			page 947
+
+
+ 36655 9206 32       		.uleb128 0x32
+ 36656 9207 0C0E0000 		.long	0xe0c
+ 36657 920b 03       		.byte	0x3
+ 36658 920c 91       		.byte	0x91
+ 36659 920d 807D     		.sleb128 -384
+ 36660 920f 00       		.byte	0x0
+ 36661 9210 31       		.uleb128 0x31
+ 36662 9211 A00D0000 		.long	0xda0
+ 36663 9215 00000000 		.quad	.LBB2512
+ 36663      00000000 
+ 36664 921d 00000000 		.quad	.LBE2512
+ 36664      00000000 
+ 36665 9225 02       		.byte	0x2
+ 36666 9226 6803     		.value	0x368
+ 36667 9228 6A920000 		.long	0x926a
+ 36668 922c 32       		.uleb128 0x32
+ 36669 922d BE0D0000 		.long	0xdbe
+ 36670 9231 03       		.byte	0x3
+ 36671 9232 91       		.byte	0x91
+ 36672 9233 907D     		.sleb128 -368
+ 36673 9235 32       		.uleb128 0x32
+ 36674 9236 B20D0000 		.long	0xdb2
+ 36675 923a 03       		.byte	0x3
+ 36676 923b 91       		.byte	0x91
+ 36677 923c A07D     		.sleb128 -352
+ 36678 923e 35       		.uleb128 0x35
+ 36679 923f CB0D0000 		.long	0xdcb
+ 36680 9243 00000000 		.quad	.LBB2514
+ 36680      00000000 
+ 36681 924b 00000000 		.quad	.LBE2514
+ 36681      00000000 
+ 36682 9253 02       		.byte	0x2
+ 36683 9254 7501     		.value	0x175
+ 36684 9256 32       		.uleb128 0x32
+ 36685 9257 E90D0000 		.long	0xde9
+ 36686 925b 03       		.byte	0x3
+ 36687 925c 91       		.byte	0x91
+ 36688 925d B07D     		.sleb128 -336
+ 36689 925f 32       		.uleb128 0x32
+ 36690 9260 DD0D0000 		.long	0xddd
+ 36691 9264 03       		.byte	0x3
+ 36692 9265 91       		.byte	0x91
+ 36693 9266 C07D     		.sleb128 -320
+ 36694 9268 00       		.byte	0x0
+ 36695 9269 00       		.byte	0x0
+ 36696 926a 31       		.uleb128 0x31
+ 36697 926b FB0D0000 		.long	0xdfb
+ 36698 926f 00000000 		.quad	.LBB2516
+ 36698      00000000 
+ 36699 9277 00000000 		.quad	.LBE2516
+ 36699      00000000 
+ 36700 927f 02       		.byte	0x2
+ 36701 9280 6A03     		.value	0x36a
+ 36702 9282 99920000 		.long	0x9299
+ 36703 9286 32       		.uleb128 0x32
+ 36704 9287 160E0000 		.long	0xe16
+ 36705 928b 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 948
+
+
+ 36706 928c 91       		.byte	0x91
+ 36707 928d D07D     		.sleb128 -304
+ 36708 928f 32       		.uleb128 0x32
+ 36709 9290 0C0E0000 		.long	0xe0c
+ 36710 9294 03       		.byte	0x3
+ 36711 9295 91       		.byte	0x91
+ 36712 9296 E07D     		.sleb128 -288
+ 36713 9298 00       		.byte	0x0
+ 36714 9299 31       		.uleb128 0x31
+ 36715 929a 210E0000 		.long	0xe21
+ 36716 929e 00000000 		.quad	.LBB2518
+ 36716      00000000 
+ 36717 92a6 00000000 		.quad	.LBE2518
+ 36717      00000000 
+ 36718 92ae 02       		.byte	0x2
+ 36719 92af 6C03     		.value	0x36c
+ 36720 92b1 C8920000 		.long	0x92c8
+ 36721 92b5 32       		.uleb128 0x32
+ 36722 92b6 3E0E0000 		.long	0xe3e
+ 36723 92ba 03       		.byte	0x3
+ 36724 92bb 91       		.byte	0x91
+ 36725 92bc F07D     		.sleb128 -272
+ 36726 92be 32       		.uleb128 0x32
+ 36727 92bf 330E0000 		.long	0xe33
+ 36728 92c3 03       		.byte	0x3
+ 36729 92c4 91       		.byte	0x91
+ 36730 92c5 807E     		.sleb128 -256
+ 36731 92c7 00       		.byte	0x0
+ 36732 92c8 35       		.uleb128 0x35
+ 36733 92c9 4F0D0000 		.long	0xd4f
+ 36734 92cd 00000000 		.quad	.LBB2520
+ 36734      00000000 
+ 36735 92d5 00000000 		.quad	.LBE2520
+ 36735      00000000 
+ 36736 92dd 02       		.byte	0x2
+ 36737 92de 6E03     		.value	0x36e
+ 36738 92e0 32       		.uleb128 0x32
+ 36739 92e1 6A0D0000 		.long	0xd6a
+ 36740 92e5 03       		.byte	0x3
+ 36741 92e6 91       		.byte	0x91
+ 36742 92e7 907E     		.sleb128 -240
+ 36743 92e9 32       		.uleb128 0x32
+ 36744 92ea 600D0000 		.long	0xd60
+ 36745 92ee 03       		.byte	0x3
+ 36746 92ef 91       		.byte	0x91
+ 36747 92f0 A07E     		.sleb128 -224
+ 36748 92f2 00       		.byte	0x0
+ 36749 92f3 00       		.byte	0x0
+ 36750 92f4 00       		.byte	0x0
+ 36751 92f5 00       		.byte	0x0
+ 36752 92f6 36       		.uleb128 0x36
+ 36753 92f7 00000000 		.quad	.LBB2522
+ 36753      00000000 
+ 36754 92ff 00000000 		.quad	.LBE2522
+ 36754      00000000 
+ 36755 9307 15930000 		.long	0x9315
+ 36756 930b 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s 			page 949
+
+
+ 36757 930c 1C0C0000 		.long	0xc1c
+ 36758 9310 03       		.byte	0x3
+ 36759 9311 91       		.byte	0x91
+ 36760 9312 9040     		.sleb128 -8176
+ 36761 9314 00       		.byte	0x0
+ 36762 9315 31       		.uleb128 0x31
+ 36763 9316 4A0E0000 		.long	0xe4a
+ 36764 931a 00000000 		.quad	.LBB2523
+ 36764      00000000 
+ 36765 9322 00000000 		.quad	.LBE2523
+ 36765      00000000 
+ 36766 932a 02       		.byte	0x2
+ 36767 932b 9406     		.value	0x694
+ 36768 932d B2930000 		.long	0x93b2
+ 36769 9331 32       		.uleb128 0x32
+ 36770 9332 5C0E0000 		.long	0xe5c
+ 36771 9336 03       		.byte	0x3
+ 36772 9337 91       		.byte	0x91
+ 36773 9338 B07E     		.sleb128 -208
+ 36774 933a 33       		.uleb128 0x33
+ 36775 933b 00000000 		.quad	.LBB2524
+ 36775      00000000 
+ 36776 9343 00000000 		.quad	.LBE2524
+ 36776      00000000 
+ 36777 934b 34       		.uleb128 0x34
+ 36778 934c 680E0000 		.long	0xe68
+ 36779 9350 09       		.byte	0x9
+ 36780 9351 03       		.byte	0x3
+ 36781 9352 00000000 		.quad	ShiftRowTable.7385
+ 36781      00000000 
+ 36782 935a 35       		.uleb128 0x35
+ 36783 935b A00D0000 		.long	0xda0
+ 36784 935f 00000000 		.quad	.LBB2525
+ 36784      00000000 
+ 36785 9367 00000000 		.quad	.LBE2525
+ 36785      00000000 
+ 36786 936f 02       		.byte	0x2
+ 36787 9370 9B02     		.value	0x29b
+ 36788 9372 32       		.uleb128 0x32
+ 36789 9373 BE0D0000 		.long	0xdbe
+ 36790 9377 03       		.byte	0x3
+ 36791 9378 91       		.byte	0x91
+ 36792 9379 C07E     		.sleb128 -192
+ 36793 937b 32       		.uleb128 0x32
+ 36794 937c B20D0000 		.long	0xdb2
+ 36795 9380 03       		.byte	0x3
+ 36796 9381 91       		.byte	0x91
+ 36797 9382 D07E     		.sleb128 -176
+ 36798 9384 35       		.uleb128 0x35
+ 36799 9385 CB0D0000 		.long	0xdcb
+ 36800 9389 00000000 		.quad	.LBB2527
+ 36800      00000000 
+ 36801 9391 00000000 		.quad	.LBE2527
+ 36801      00000000 
+ 36802 9399 02       		.byte	0x2
+ 36803 939a 7501     		.value	0x175
+ 36804 939c 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 950
+
+
+ 36805 939d E90D0000 		.long	0xde9
+ 36806 93a1 03       		.byte	0x3
+ 36807 93a2 91       		.byte	0x91
+ 36808 93a3 E07E     		.sleb128 -160
+ 36809 93a5 32       		.uleb128 0x32
+ 36810 93a6 DD0D0000 		.long	0xddd
+ 36811 93aa 03       		.byte	0x3
+ 36812 93ab 91       		.byte	0x91
+ 36813 93ac F07E     		.sleb128 -144
+ 36814 93ae 00       		.byte	0x0
+ 36815 93af 00       		.byte	0x0
+ 36816 93b0 00       		.byte	0x0
+ 36817 93b1 00       		.byte	0x0
+ 36818 93b2 36       		.uleb128 0x36
+ 36819 93b3 00000000 		.quad	.LBB2529
+ 36819      00000000 
+ 36820 93bb 00000000 		.quad	.LBE2529
+ 36820      00000000 
+ 36821 93c3 D1930000 		.long	0x93d1
+ 36822 93c7 34       		.uleb128 0x34
+ 36823 93c8 2C0C0000 		.long	0xc2c
+ 36824 93cc 03       		.byte	0x3
+ 36825 93cd 91       		.byte	0x91
+ 36826 93ce 8040     		.sleb128 -8192
+ 36827 93d0 00       		.byte	0x0
+ 36828 93d1 31       		.uleb128 0x31
+ 36829 93d2 860E0000 		.long	0xe86
+ 36830 93d6 00000000 		.quad	.LBB2530
+ 36830      00000000 
+ 36831 93de 00000000 		.quad	.LBE2530
+ 36831      00000000 
+ 36832 93e6 02       		.byte	0x2
+ 36833 93e7 9606     		.value	0x696
+ 36834 93e9 00940000 		.long	0x9400
+ 36835 93ed 32       		.uleb128 0x32
+ 36836 93ee A10E0000 		.long	0xea1
+ 36837 93f2 03       		.byte	0x3
+ 36838 93f3 91       		.byte	0x91
+ 36839 93f4 807F     		.sleb128 -128
+ 36840 93f6 32       		.uleb128 0x32
+ 36841 93f7 970E0000 		.long	0xe97
+ 36842 93fb 03       		.byte	0x3
+ 36843 93fc 91       		.byte	0x91
+ 36844 93fd 907F     		.sleb128 -112
+ 36845 93ff 00       		.byte	0x0
+ 36846 9400 36       		.uleb128 0x36
+ 36847 9401 00000000 		.quad	.LBB2532
+ 36847      00000000 
+ 36848 9409 00000000 		.quad	.LBE2532
+ 36848      00000000 
+ 36849 9411 20940000 		.long	0x9420
+ 36850 9415 34       		.uleb128 0x34
+ 36851 9416 3C0C0000 		.long	0xc3c
+ 36852 941a 04       		.byte	0x4
+ 36853 941b 91       		.byte	0x91
+ 36854 941c F0BF7F   		.sleb128 -8208
+ 36855 941f 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 951
+
+
+ 36856 9420 31       		.uleb128 0x31
+ 36857 9421 AC0E0000 		.long	0xeac
+ 36858 9425 00000000 		.quad	.LBB2533
+ 36858      00000000 
+ 36859 942d 00000000 		.quad	.LBE2533
+ 36859      00000000 
+ 36860 9435 02       		.byte	0x2
+ 36861 9436 9806     		.value	0x698
+ 36862 9438 70940000 		.long	0x9470
+ 36863 943c 32       		.uleb128 0x32
+ 36864 943d BE0E0000 		.long	0xebe
+ 36865 9441 03       		.byte	0x3
+ 36866 9442 91       		.byte	0x91
+ 36867 9443 A07F     		.sleb128 -96
+ 36868 9445 35       		.uleb128 0x35
+ 36869 9446 CB0E0000 		.long	0xecb
+ 36870 944a 00000000 		.quad	.LBB2535
+ 36870      00000000 
+ 36871 9452 00000000 		.quad	.LBE2535
+ 36871      00000000 
+ 36872 945a 02       		.byte	0x2
+ 36873 945b 4905     		.value	0x549
+ 36874 945d 32       		.uleb128 0x32
+ 36875 945e E90E0000 		.long	0xee9
+ 36876 9462 03       		.byte	0x3
+ 36877 9463 91       		.byte	0x91
+ 36878 9464 BC7F     		.sleb128 -68
+ 36879 9466 32       		.uleb128 0x32
+ 36880 9467 DD0E0000 		.long	0xedd
+ 36881 946b 02       		.byte	0x2
+ 36882 946c 91       		.byte	0x91
+ 36883 946d 40       		.sleb128 -64
+ 36884 946e 00       		.byte	0x0
+ 36885 946f 00       		.byte	0x0
+ 36886 9470 33       		.uleb128 0x33
+ 36887 9471 00000000 		.quad	.LBB2537
+ 36887      00000000 
+ 36888 9479 00000000 		.quad	.LBE2537
+ 36888      00000000 
+ 36889 9481 34       		.uleb128 0x34
+ 36890 9482 480C0000 		.long	0xc48
+ 36891 9486 04       		.byte	0x4
+ 36892 9487 91       		.byte	0x91
+ 36893 9488 E0BF7F   		.sleb128 -8224
+ 36894 948b 00       		.byte	0x0
+ 36895 948c 00       		.byte	0x0
+ 36896 948d 00       		.byte	0x0
+ 36897 948e 00       		.byte	0x0
+ 36898 948f 25       		.uleb128 0x25
+ 36899 9490 00000000 		.long	.LASF361
+ 36900 9494 02       		.byte	0x2
+ 36901 9495 6E06     		.value	0x66e
+ 36902 9497 01       		.byte	0x1
+ 36903 9498 B3010000 		.long	0x1b3
+ 36904 949c 03       		.byte	0x3
+ 36905 949d C4940000 		.long	0x94c4
+ 36906 94a1 26       		.uleb128 0x26
+
GAS LISTING /tmp/ccjbMjHD.s 			page 952
+
+
+ 36907 94a2 00000000 		.long	.LASF67
+ 36908 94a6 02       		.byte	0x2
+ 36909 94a7 6E06     		.value	0x66e
+ 36910 94a9 B3010000 		.long	0x1b3
+ 36911 94ad 28       		.uleb128 0x28
+ 36912 94ae 7500     		.string	"u"
+ 36913 94b0 02       		.byte	0x2
+ 36914 94b1 7506     		.value	0x675
+ 36915 94b3 29050000 		.long	0x529
+ 36916 94b7 27       		.uleb128 0x27
+ 36917 94b8 00000000 		.long	.LASF351
+ 36918 94bc 02       		.byte	0x2
+ 36919 94bd 7606     		.value	0x676
+ 36920 94bf 09040000 		.long	0x409
+ 36921 94c3 00       		.byte	0x0
+ 36922 94c4 2D       		.uleb128 0x2d
+ 36923 94c5 00000000 		.long	.LASF362
+ 36924 94c9 02       		.byte	0x2
+ 36925 94ca 6F07     		.value	0x76f
+ 36926 94cc 01       		.byte	0x1
+ 36927 94cd 00000000 		.quad	.LFB647
+ 36927      00000000 
+ 36928 94d5 00000000 		.quad	.LFE647
+ 36928      00000000 
+ 36929 94dd 00000000 		.long	.LLST3
+ 36930 94e1 0AD90000 		.long	0xd90a
+ 36931 94e5 2E       		.uleb128 0x2e
+ 36932 94e6 00000000 		.long	.LASF65
+ 36933 94ea 02       		.byte	0x2
+ 36934 94eb 6F07     		.value	0x76f
+ 36935 94ed 24560000 		.long	0x5624
+ 36936 94f1 04       		.byte	0x4
+ 36937 94f2 91       		.byte	0x91
+ 36938 94f3 88B37F   		.sleb128 -9848
+ 36939 94f6 2F       		.uleb128 0x2f
+ 36940 94f7 6B657900 		.string	"key"
+ 36941 94fb 02       		.byte	0x2
+ 36942 94fc 6F07     		.value	0x76f
+ 36943 94fe 2A560000 		.long	0x562a
+ 36944 9502 04       		.byte	0x4
+ 36945 9503 91       		.byte	0x91
+ 36946 9504 80B37F   		.sleb128 -9856
+ 36947 9507 37       		.uleb128 0x37
+ 36948 9508 763000   		.string	"v0"
+ 36949 950b 02       		.byte	0x2
+ 36950 950c 7107     		.value	0x771
+ 36951 950e B3010000 		.long	0x1b3
+ 36952 9512 04       		.byte	0x4
+ 36953 9513 91       		.byte	0x91
+ 36954 9514 90B87F   		.sleb128 -9200
+ 36955 9517 37       		.uleb128 0x37
+ 36956 9518 763100   		.string	"v1"
+ 36957 951b 02       		.byte	0x2
+ 36958 951c 7107     		.value	0x771
+ 36959 951e B3010000 		.long	0x1b3
+ 36960 9522 04       		.byte	0x4
+ 36961 9523 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 953
+
+
+ 36962 9524 A0B87F   		.sleb128 -9184
+ 36963 9527 37       		.uleb128 0x37
+ 36964 9528 6B00     		.string	"k"
+ 36965 952a 02       		.byte	0x2
+ 36966 952b 7207     		.value	0x772
+ 36967 952d B3010000 		.long	0x1b3
+ 36968 9531 04       		.byte	0x4
+ 36969 9532 91       		.byte	0x91
+ 36970 9533 B0B87F   		.sleb128 -9168
+ 36971 9536 31       		.uleb128 0x31
+ 36972 9537 AD0B0000 		.long	0xbad
+ 36973 953b 00000000 		.quad	.LBB3188
+ 36973      00000000 
+ 36974 9543 00000000 		.quad	.LBE3188
+ 36974      00000000 
+ 36975 954b 02       		.byte	0x2
+ 36976 954c 7407     		.value	0x774
+ 36977 954e 79950000 		.long	0x9579
+ 36978 9552 32       		.uleb128 0x32
+ 36979 9553 BE0B0000 		.long	0xbbe
+ 36980 9557 04       		.byte	0x4
+ 36981 9558 91       		.byte	0x91
+ 36982 9559 C8B87F   		.sleb128 -9144
+ 36983 955c 33       		.uleb128 0x33
+ 36984 955d 00000000 		.quad	.LBB3189
+ 36984      00000000 
+ 36985 9565 00000000 		.quad	.LBE3189
+ 36985      00000000 
+ 36986 956d 34       		.uleb128 0x34
+ 36987 956e C90B0000 		.long	0xbc9
+ 36988 9572 04       		.byte	0x4
+ 36989 9573 76       		.byte	0x76
+ 36990 9574 C0AF7F   		.sleb128 -10304
+ 36991 9577 00       		.byte	0x0
+ 36992 9578 00       		.byte	0x0
+ 36993 9579 31       		.uleb128 0x31
+ 36994 957a AD0B0000 		.long	0xbad
+ 36995 957e 00000000 		.quad	.LBB3190
+ 36995      00000000 
+ 36996 9586 00000000 		.quad	.LBE3190
+ 36996      00000000 
+ 36997 958e 02       		.byte	0x2
+ 36998 958f 7507     		.value	0x775
+ 36999 9591 BC950000 		.long	0x95bc
+ 37000 9595 32       		.uleb128 0x32
+ 37001 9596 BE0B0000 		.long	0xbbe
+ 37002 959a 04       		.byte	0x4
+ 37003 959b 91       		.byte	0x91
+ 37004 959c D0B87F   		.sleb128 -9136
+ 37005 959f 33       		.uleb128 0x33
+ 37006 95a0 00000000 		.quad	.LBB3191
+ 37006      00000000 
+ 37007 95a8 00000000 		.quad	.LBE3191
+ 37007      00000000 
+ 37008 95b0 34       		.uleb128 0x34
+ 37009 95b1 C90B0000 		.long	0xbc9
+ 37010 95b5 04       		.byte	0x4
+
GAS LISTING /tmp/ccjbMjHD.s 			page 954
+
+
+ 37011 95b6 76       		.byte	0x76
+ 37012 95b7 D0AF7F   		.sleb128 -10288
+ 37013 95ba 00       		.byte	0x0
+ 37014 95bb 00       		.byte	0x0
+ 37015 95bc 31       		.uleb128 0x31
+ 37016 95bd D50B0000 		.long	0xbd5
+ 37017 95c1 00000000 		.quad	.LBB3192
+ 37017      00000000 
+ 37018 95c9 00000000 		.quad	.LBE3192
+ 37018      00000000 
+ 37019 95d1 02       		.byte	0x2
+ 37020 95d2 8607     		.value	0x786
+ 37021 95d4 CF9A0000 		.long	0x9acf
+ 37022 95d8 32       		.uleb128 0x32
+ 37023 95d9 F30B0000 		.long	0xbf3
+ 37024 95dd 04       		.byte	0x4
+ 37025 95de 91       		.byte	0x91
+ 37026 95df DCB87F   		.sleb128 -9124
+ 37027 95e2 32       		.uleb128 0x32
+ 37028 95e3 E70B0000 		.long	0xbe7
+ 37029 95e7 04       		.byte	0x4
+ 37030 95e8 91       		.byte	0x91
+ 37031 95e9 E0B87F   		.sleb128 -9120
+ 37032 95ec 33       		.uleb128 0x33
+ 37033 95ed 00000000 		.quad	.LBB3193
+ 37033      00000000 
+ 37034 95f5 00000000 		.quad	.LBE3193
+ 37034      00000000 
+ 37035 95fd 34       		.uleb128 0x34
+ 37036 95fe FF0B0000 		.long	0xbff
+ 37037 9602 04       		.byte	0x4
+ 37038 9603 76       		.byte	0x76
+ 37039 9604 F0AF7F   		.sleb128 -10256
+ 37040 9607 34       		.uleb128 0x34
+ 37041 9608 0B0C0000 		.long	0xc0b
+ 37042 960c 04       		.byte	0x4
+ 37043 960d 76       		.byte	0x76
+ 37044 960e E0AF7F   		.sleb128 -10272
+ 37045 9611 31       		.uleb128 0x31
+ 37046 9612 540C0000 		.long	0xc54
+ 37047 9616 00000000 		.quad	.LBB3194
+ 37047      00000000 
+ 37048 961e 00000000 		.quad	.LBE3194
+ 37048      00000000 
+ 37049 9626 02       		.byte	0x2
+ 37050 9627 9106     		.value	0x691
+ 37051 9629 83960000 		.long	0x9683
+ 37052 962d 32       		.uleb128 0x32
+ 37053 962e 7E0C0000 		.long	0xc7e
+ 37054 9632 04       		.byte	0x4
+ 37055 9633 91       		.byte	0x91
+ 37056 9634 F8B87F   		.sleb128 -9096
+ 37057 9637 32       		.uleb128 0x32
+ 37058 9638 720C0000 		.long	0xc72
+ 37059 963c 04       		.byte	0x4
+ 37060 963d 91       		.byte	0x91
+ 37061 963e FCB87F   		.sleb128 -9092
+
GAS LISTING /tmp/ccjbMjHD.s 			page 955
+
+
+ 37062 9641 32       		.uleb128 0x32
+ 37063 9642 660C0000 		.long	0xc66
+ 37064 9646 04       		.byte	0x4
+ 37065 9647 91       		.byte	0x91
+ 37066 9648 80B97F   		.sleb128 -9088
+ 37067 964b 35       		.uleb128 0x35
+ 37068 964c 8B0C0000 		.long	0xc8b
+ 37069 9650 00000000 		.quad	.LBB3196
+ 37069      00000000 
+ 37070 9658 00000000 		.quad	.LBE3196
+ 37070      00000000 
+ 37071 9660 02       		.byte	0x2
+ 37072 9661 0702     		.value	0x207
+ 37073 9663 32       		.uleb128 0x32
+ 37074 9664 B40C0000 		.long	0xcb4
+ 37075 9668 04       		.byte	0x4
+ 37076 9669 91       		.byte	0x91
+ 37077 966a 98B97F   		.sleb128 -9064
+ 37078 966d 32       		.uleb128 0x32
+ 37079 966e A90C0000 		.long	0xca9
+ 37080 9672 04       		.byte	0x4
+ 37081 9673 91       		.byte	0x91
+ 37082 9674 9CB97F   		.sleb128 -9060
+ 37083 9677 32       		.uleb128 0x32
+ 37084 9678 9D0C0000 		.long	0xc9d
+ 37085 967c 04       		.byte	0x4
+ 37086 967d 91       		.byte	0x91
+ 37087 967e A0B97F   		.sleb128 -9056
+ 37088 9681 00       		.byte	0x0
+ 37089 9682 00       		.byte	0x0
+ 37090 9683 31       		.uleb128 0x31
+ 37091 9684 C10C0000 		.long	0xcc1
+ 37092 9688 00000000 		.quad	.LBB3198
+ 37092      00000000 
+ 37093 9690 00000000 		.quad	.LBE3198
+ 37093      00000000 
+ 37094 9698 02       		.byte	0x2
+ 37095 9699 9206     		.value	0x692
+ 37096 969b 2A990000 		.long	0x992a
+ 37097 969f 32       		.uleb128 0x32
+ 37098 96a0 D30C0000 		.long	0xcd3
+ 37099 96a4 04       		.byte	0x4
+ 37100 96a5 91       		.byte	0x91
+ 37101 96a6 B0B97F   		.sleb128 -9040
+ 37102 96a9 35       		.uleb128 0x35
+ 37103 96aa E00C0000 		.long	0xce0
+ 37104 96ae 00000000 		.quad	.LBB3200
+ 37104      00000000 
+ 37105 96b6 00000000 		.quad	.LBE3200
+ 37105      00000000 
+ 37106 96be 02       		.byte	0x2
+ 37107 96bf 7D03     		.value	0x37d
+ 37108 96c1 32       		.uleb128 0x32
+ 37109 96c2 FE0C0000 		.long	0xcfe
+ 37110 96c6 04       		.byte	0x4
+ 37111 96c7 91       		.byte	0x91
+ 37112 96c8 C8B97F   		.sleb128 -9016
+
GAS LISTING /tmp/ccjbMjHD.s 			page 956
+
+
+ 37113 96cb 32       		.uleb128 0x32
+ 37114 96cc F20C0000 		.long	0xcf2
+ 37115 96d0 04       		.byte	0x4
+ 37116 96d1 91       		.byte	0x91
+ 37117 96d2 D0B97F   		.sleb128 -9008
+ 37118 96d5 33       		.uleb128 0x33
+ 37119 96d6 00000000 		.quad	.LBB3201
+ 37119      00000000 
+ 37120 96de 00000000 		.quad	.LBE3201
+ 37120      00000000 
+ 37121 96e6 34       		.uleb128 0x34
+ 37122 96e7 0A0D0000 		.long	0xd0a
+ 37123 96eb 04       		.byte	0x4
+ 37124 96ec 91       		.byte	0x91
+ 37125 96ed A0BA7F   		.sleb128 -8928
+ 37126 96f0 34       		.uleb128 0x34
+ 37127 96f1 150D0000 		.long	0xd15
+ 37128 96f5 04       		.byte	0x4
+ 37129 96f6 91       		.byte	0x91
+ 37130 96f7 90BA7F   		.sleb128 -8944
+ 37131 96fa 34       		.uleb128 0x34
+ 37132 96fb 200D0000 		.long	0xd20
+ 37133 96ff 04       		.byte	0x4
+ 37134 9700 91       		.byte	0x91
+ 37135 9701 80BA7F   		.sleb128 -8960
+ 37136 9704 34       		.uleb128 0x34
+ 37137 9705 2C0D0000 		.long	0xd2c
+ 37138 9709 04       		.byte	0x4
+ 37139 970a 91       		.byte	0x91
+ 37140 970b F0B97F   		.sleb128 -8976
+ 37141 970e 34       		.uleb128 0x34
+ 37142 970f 380D0000 		.long	0xd38
+ 37143 9713 04       		.byte	0x4
+ 37144 9714 91       		.byte	0x91
+ 37145 9715 ECB97F   		.sleb128 -8980
+ 37146 9718 31       		.uleb128 0x31
+ 37147 9719 4F0D0000 		.long	0xd4f
+ 37148 971d 00000000 		.quad	.LBB3202
+ 37148      00000000 
+ 37149 9725 00000000 		.quad	.LBE3202
+ 37149      00000000 
+ 37150 972d 02       		.byte	0x2
+ 37151 972e 5603     		.value	0x356
+ 37152 9730 49970000 		.long	0x9749
+ 37153 9734 32       		.uleb128 0x32
+ 37154 9735 6A0D0000 		.long	0xd6a
+ 37155 9739 04       		.byte	0x4
+ 37156 973a 91       		.byte	0x91
+ 37157 973b B0BA7F   		.sleb128 -8912
+ 37158 973e 32       		.uleb128 0x32
+ 37159 973f 600D0000 		.long	0xd60
+ 37160 9743 04       		.byte	0x4
+ 37161 9744 91       		.byte	0x91
+ 37162 9745 C0BA7F   		.sleb128 -8896
+ 37163 9748 00       		.byte	0x0
+ 37164 9749 31       		.uleb128 0x31
+ 37165 974a 750D0000 		.long	0xd75
+
GAS LISTING /tmp/ccjbMjHD.s 			page 957
+
+
+ 37166 974e 00000000 		.quad	.LBB3204
+ 37166      00000000 
+ 37167 9756 00000000 		.quad	.LBE3204
+ 37167      00000000 
+ 37168 975e 02       		.byte	0x2
+ 37169 975f 5903     		.value	0x359
+ 37170 9761 7A970000 		.long	0x977a
+ 37171 9765 32       		.uleb128 0x32
+ 37172 9766 930D0000 		.long	0xd93
+ 37173 976a 04       		.byte	0x4
+ 37174 976b 91       		.byte	0x91
+ 37175 976c DCBA7F   		.sleb128 -8868
+ 37176 976f 32       		.uleb128 0x32
+ 37177 9770 870D0000 		.long	0xd87
+ 37178 9774 04       		.byte	0x4
+ 37179 9775 91       		.byte	0x91
+ 37180 9776 E0BA7F   		.sleb128 -8864
+ 37181 9779 00       		.byte	0x0
+ 37182 977a 31       		.uleb128 0x31
+ 37183 977b 4F0D0000 		.long	0xd4f
+ 37184 977f 00000000 		.quad	.LBB3206
+ 37184      00000000 
+ 37185 9787 00000000 		.quad	.LBE3206
+ 37185      00000000 
+ 37186 978f 02       		.byte	0x2
+ 37187 9790 5B03     		.value	0x35b
+ 37188 9792 AB970000 		.long	0x97ab
+ 37189 9796 32       		.uleb128 0x32
+ 37190 9797 6A0D0000 		.long	0xd6a
+ 37191 979b 04       		.byte	0x4
+ 37192 979c 91       		.byte	0x91
+ 37193 979d F0BA7F   		.sleb128 -8848
+ 37194 97a0 32       		.uleb128 0x32
+ 37195 97a1 600D0000 		.long	0xd60
+ 37196 97a5 04       		.byte	0x4
+ 37197 97a6 91       		.byte	0x91
+ 37198 97a7 80BB7F   		.sleb128 -8832
+ 37199 97aa 00       		.byte	0x0
+ 37200 97ab 31       		.uleb128 0x31
+ 37201 97ac A00D0000 		.long	0xda0
+ 37202 97b0 00000000 		.quad	.LBB3208
+ 37202      00000000 
+ 37203 97b8 00000000 		.quad	.LBE3208
+ 37203      00000000 
+ 37204 97c0 02       		.byte	0x2
+ 37205 97c1 6403     		.value	0x364
+ 37206 97c3 09980000 		.long	0x9809
+ 37207 97c7 32       		.uleb128 0x32
+ 37208 97c8 BE0D0000 		.long	0xdbe
+ 37209 97cc 04       		.byte	0x4
+ 37210 97cd 91       		.byte	0x91
+ 37211 97ce 90BB7F   		.sleb128 -8816
+ 37212 97d1 32       		.uleb128 0x32
+ 37213 97d2 B20D0000 		.long	0xdb2
+ 37214 97d6 04       		.byte	0x4
+ 37215 97d7 91       		.byte	0x91
+ 37216 97d8 A0BB7F   		.sleb128 -8800
+
GAS LISTING /tmp/ccjbMjHD.s 			page 958
+
+
+ 37217 97db 35       		.uleb128 0x35
+ 37218 97dc CB0D0000 		.long	0xdcb
+ 37219 97e0 00000000 		.quad	.LBB3210
+ 37219      00000000 
+ 37220 97e8 00000000 		.quad	.LBE3210
+ 37220      00000000 
+ 37221 97f0 02       		.byte	0x2
+ 37222 97f1 7501     		.value	0x175
+ 37223 97f3 32       		.uleb128 0x32
+ 37224 97f4 E90D0000 		.long	0xde9
+ 37225 97f8 04       		.byte	0x4
+ 37226 97f9 91       		.byte	0x91
+ 37227 97fa B0BB7F   		.sleb128 -8784
+ 37228 97fd 32       		.uleb128 0x32
+ 37229 97fe DD0D0000 		.long	0xddd
+ 37230 9802 04       		.byte	0x4
+ 37231 9803 91       		.byte	0x91
+ 37232 9804 C0BB7F   		.sleb128 -8768
+ 37233 9807 00       		.byte	0x0
+ 37234 9808 00       		.byte	0x0
+ 37235 9809 31       		.uleb128 0x31
+ 37236 980a FB0D0000 		.long	0xdfb
+ 37237 980e 00000000 		.quad	.LBB3212
+ 37237      00000000 
+ 37238 9816 00000000 		.quad	.LBE3212
+ 37238      00000000 
+ 37239 981e 02       		.byte	0x2
+ 37240 981f 6603     		.value	0x366
+ 37241 9821 3A980000 		.long	0x983a
+ 37242 9825 32       		.uleb128 0x32
+ 37243 9826 160E0000 		.long	0xe16
+ 37244 982a 04       		.byte	0x4
+ 37245 982b 91       		.byte	0x91
+ 37246 982c D0BB7F   		.sleb128 -8752
+ 37247 982f 32       		.uleb128 0x32
+ 37248 9830 0C0E0000 		.long	0xe0c
+ 37249 9834 04       		.byte	0x4
+ 37250 9835 91       		.byte	0x91
+ 37251 9836 E0BB7F   		.sleb128 -8736
+ 37252 9839 00       		.byte	0x0
+ 37253 983a 31       		.uleb128 0x31
+ 37254 983b A00D0000 		.long	0xda0
+ 37255 983f 00000000 		.quad	.LBB3214
+ 37255      00000000 
+ 37256 9847 00000000 		.quad	.LBE3214
+ 37256      00000000 
+ 37257 984f 02       		.byte	0x2
+ 37258 9850 6803     		.value	0x368
+ 37259 9852 98980000 		.long	0x9898
+ 37260 9856 32       		.uleb128 0x32
+ 37261 9857 BE0D0000 		.long	0xdbe
+ 37262 985b 04       		.byte	0x4
+ 37263 985c 91       		.byte	0x91
+ 37264 985d F0BB7F   		.sleb128 -8720
+ 37265 9860 32       		.uleb128 0x32
+ 37266 9861 B20D0000 		.long	0xdb2
+ 37267 9865 04       		.byte	0x4
+
GAS LISTING /tmp/ccjbMjHD.s 			page 959
+
+
+ 37268 9866 91       		.byte	0x91
+ 37269 9867 80BC7F   		.sleb128 -8704
+ 37270 986a 35       		.uleb128 0x35
+ 37271 986b CB0D0000 		.long	0xdcb
+ 37272 986f 00000000 		.quad	.LBB3216
+ 37272      00000000 
+ 37273 9877 00000000 		.quad	.LBE3216
+ 37273      00000000 
+ 37274 987f 02       		.byte	0x2
+ 37275 9880 7501     		.value	0x175
+ 37276 9882 32       		.uleb128 0x32
+ 37277 9883 E90D0000 		.long	0xde9
+ 37278 9887 04       		.byte	0x4
+ 37279 9888 91       		.byte	0x91
+ 37280 9889 90BC7F   		.sleb128 -8688
+ 37281 988c 32       		.uleb128 0x32
+ 37282 988d DD0D0000 		.long	0xddd
+ 37283 9891 04       		.byte	0x4
+ 37284 9892 91       		.byte	0x91
+ 37285 9893 A0BC7F   		.sleb128 -8672
+ 37286 9896 00       		.byte	0x0
+ 37287 9897 00       		.byte	0x0
+ 37288 9898 31       		.uleb128 0x31
+ 37289 9899 FB0D0000 		.long	0xdfb
+ 37290 989d 00000000 		.quad	.LBB3218
+ 37290      00000000 
+ 37291 98a5 00000000 		.quad	.LBE3218
+ 37291      00000000 
+ 37292 98ad 02       		.byte	0x2
+ 37293 98ae 6A03     		.value	0x36a
+ 37294 98b0 C9980000 		.long	0x98c9
+ 37295 98b4 32       		.uleb128 0x32
+ 37296 98b5 160E0000 		.long	0xe16
+ 37297 98b9 04       		.byte	0x4
+ 37298 98ba 91       		.byte	0x91
+ 37299 98bb B0BC7F   		.sleb128 -8656
+ 37300 98be 32       		.uleb128 0x32
+ 37301 98bf 0C0E0000 		.long	0xe0c
+ 37302 98c3 04       		.byte	0x4
+ 37303 98c4 91       		.byte	0x91
+ 37304 98c5 C0BC7F   		.sleb128 -8640
+ 37305 98c8 00       		.byte	0x0
+ 37306 98c9 31       		.uleb128 0x31
+ 37307 98ca 210E0000 		.long	0xe21
+ 37308 98ce 00000000 		.quad	.LBB3220
+ 37308      00000000 
+ 37309 98d6 00000000 		.quad	.LBE3220
+ 37309      00000000 
+ 37310 98de 02       		.byte	0x2
+ 37311 98df 6C03     		.value	0x36c
+ 37312 98e1 FA980000 		.long	0x98fa
+ 37313 98e5 32       		.uleb128 0x32
+ 37314 98e6 3E0E0000 		.long	0xe3e
+ 37315 98ea 04       		.byte	0x4
+ 37316 98eb 91       		.byte	0x91
+ 37317 98ec D0BC7F   		.sleb128 -8624
+ 37318 98ef 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 960
+
+
+ 37319 98f0 330E0000 		.long	0xe33
+ 37320 98f4 04       		.byte	0x4
+ 37321 98f5 91       		.byte	0x91
+ 37322 98f6 E0BC7F   		.sleb128 -8608
+ 37323 98f9 00       		.byte	0x0
+ 37324 98fa 35       		.uleb128 0x35
+ 37325 98fb 4F0D0000 		.long	0xd4f
+ 37326 98ff 00000000 		.quad	.LBB3222
+ 37326      00000000 
+ 37327 9907 00000000 		.quad	.LBE3222
+ 37327      00000000 
+ 37328 990f 02       		.byte	0x2
+ 37329 9910 6E03     		.value	0x36e
+ 37330 9912 32       		.uleb128 0x32
+ 37331 9913 6A0D0000 		.long	0xd6a
+ 37332 9917 04       		.byte	0x4
+ 37333 9918 91       		.byte	0x91
+ 37334 9919 F0BC7F   		.sleb128 -8592
+ 37335 991c 32       		.uleb128 0x32
+ 37336 991d 600D0000 		.long	0xd60
+ 37337 9921 04       		.byte	0x4
+ 37338 9922 91       		.byte	0x91
+ 37339 9923 80BD7F   		.sleb128 -8576
+ 37340 9926 00       		.byte	0x0
+ 37341 9927 00       		.byte	0x0
+ 37342 9928 00       		.byte	0x0
+ 37343 9929 00       		.byte	0x0
+ 37344 992a 36       		.uleb128 0x36
+ 37345 992b 00000000 		.quad	.LBB3224
+ 37345      00000000 
+ 37346 9933 00000000 		.quad	.LBE3224
+ 37346      00000000 
+ 37347 993b 4A990000 		.long	0x994a
+ 37348 993f 34       		.uleb128 0x34
+ 37349 9940 1C0C0000 		.long	0xc1c
+ 37350 9944 04       		.byte	0x4
+ 37351 9945 91       		.byte	0x91
+ 37352 9946 C0B37F   		.sleb128 -9792
+ 37353 9949 00       		.byte	0x0
+ 37354 994a 31       		.uleb128 0x31
+ 37355 994b 4A0E0000 		.long	0xe4a
+ 37356 994f 00000000 		.quad	.LBB3225
+ 37356      00000000 
+ 37357 9957 00000000 		.quad	.LBE3225
+ 37357      00000000 
+ 37358 995f 02       		.byte	0x2
+ 37359 9960 9406     		.value	0x694
+ 37360 9962 EC990000 		.long	0x99ec
+ 37361 9966 32       		.uleb128 0x32
+ 37362 9967 5C0E0000 		.long	0xe5c
+ 37363 996b 04       		.byte	0x4
+ 37364 996c 91       		.byte	0x91
+ 37365 996d 90BD7F   		.sleb128 -8560
+ 37366 9970 33       		.uleb128 0x33
+ 37367 9971 00000000 		.quad	.LBB3226
+ 37367      00000000 
+ 37368 9979 00000000 		.quad	.LBE3226
+
GAS LISTING /tmp/ccjbMjHD.s 			page 961
+
+
+ 37368      00000000 
+ 37369 9981 34       		.uleb128 0x34
+ 37370 9982 680E0000 		.long	0xe68
+ 37371 9986 09       		.byte	0x9
+ 37372 9987 03       		.byte	0x3
+ 37373 9988 00000000 		.quad	ShiftRowTable.7385
+ 37373      00000000 
+ 37374 9990 35       		.uleb128 0x35
+ 37375 9991 A00D0000 		.long	0xda0
+ 37376 9995 00000000 		.quad	.LBB3227
+ 37376      00000000 
+ 37377 999d 00000000 		.quad	.LBE3227
+ 37377      00000000 
+ 37378 99a5 02       		.byte	0x2
+ 37379 99a6 9B02     		.value	0x29b
+ 37380 99a8 32       		.uleb128 0x32
+ 37381 99a9 BE0D0000 		.long	0xdbe
+ 37382 99ad 04       		.byte	0x4
+ 37383 99ae 91       		.byte	0x91
+ 37384 99af A0BD7F   		.sleb128 -8544
+ 37385 99b2 32       		.uleb128 0x32
+ 37386 99b3 B20D0000 		.long	0xdb2
+ 37387 99b7 04       		.byte	0x4
+ 37388 99b8 91       		.byte	0x91
+ 37389 99b9 B0BD7F   		.sleb128 -8528
+ 37390 99bc 35       		.uleb128 0x35
+ 37391 99bd CB0D0000 		.long	0xdcb
+ 37392 99c1 00000000 		.quad	.LBB3229
+ 37392      00000000 
+ 37393 99c9 00000000 		.quad	.LBE3229
+ 37393      00000000 
+ 37394 99d1 02       		.byte	0x2
+ 37395 99d2 7501     		.value	0x175
+ 37396 99d4 32       		.uleb128 0x32
+ 37397 99d5 E90D0000 		.long	0xde9
+ 37398 99d9 04       		.byte	0x4
+ 37399 99da 91       		.byte	0x91
+ 37400 99db C0BD7F   		.sleb128 -8512
+ 37401 99de 32       		.uleb128 0x32
+ 37402 99df DD0D0000 		.long	0xddd
+ 37403 99e3 04       		.byte	0x4
+ 37404 99e4 91       		.byte	0x91
+ 37405 99e5 D0BD7F   		.sleb128 -8496
+ 37406 99e8 00       		.byte	0x0
+ 37407 99e9 00       		.byte	0x0
+ 37408 99ea 00       		.byte	0x0
+ 37409 99eb 00       		.byte	0x0
+ 37410 99ec 36       		.uleb128 0x36
+ 37411 99ed 00000000 		.quad	.LBB3231
+ 37411      00000000 
+ 37412 99f5 00000000 		.quad	.LBE3231
+ 37412      00000000 
+ 37413 99fd 0C9A0000 		.long	0x9a0c
+ 37414 9a01 34       		.uleb128 0x34
+ 37415 9a02 2C0C0000 		.long	0xc2c
+ 37416 9a06 04       		.byte	0x4
+ 37417 9a07 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 962
+
+
+ 37418 9a08 B0B37F   		.sleb128 -9808
+ 37419 9a0b 00       		.byte	0x0
+ 37420 9a0c 31       		.uleb128 0x31
+ 37421 9a0d 860E0000 		.long	0xe86
+ 37422 9a11 00000000 		.quad	.LBB3232
+ 37422      00000000 
+ 37423 9a19 00000000 		.quad	.LBE3232
+ 37423      00000000 
+ 37424 9a21 02       		.byte	0x2
+ 37425 9a22 9606     		.value	0x696
+ 37426 9a24 3D9A0000 		.long	0x9a3d
+ 37427 9a28 32       		.uleb128 0x32
+ 37428 9a29 A10E0000 		.long	0xea1
+ 37429 9a2d 04       		.byte	0x4
+ 37430 9a2e 91       		.byte	0x91
+ 37431 9a2f E0BD7F   		.sleb128 -8480
+ 37432 9a32 32       		.uleb128 0x32
+ 37433 9a33 970E0000 		.long	0xe97
+ 37434 9a37 04       		.byte	0x4
+ 37435 9a38 91       		.byte	0x91
+ 37436 9a39 F0BD7F   		.sleb128 -8464
+ 37437 9a3c 00       		.byte	0x0
+ 37438 9a3d 36       		.uleb128 0x36
+ 37439 9a3e 00000000 		.quad	.LBB3234
+ 37439      00000000 
+ 37440 9a46 00000000 		.quad	.LBE3234
+ 37440      00000000 
+ 37441 9a4e 5D9A0000 		.long	0x9a5d
+ 37442 9a52 34       		.uleb128 0x34
+ 37443 9a53 3C0C0000 		.long	0xc3c
+ 37444 9a57 04       		.byte	0x4
+ 37445 9a58 91       		.byte	0x91
+ 37446 9a59 A0B37F   		.sleb128 -9824
+ 37447 9a5c 00       		.byte	0x0
+ 37448 9a5d 31       		.uleb128 0x31
+ 37449 9a5e AC0E0000 		.long	0xeac
+ 37450 9a62 00000000 		.quad	.LBB3235
+ 37450      00000000 
+ 37451 9a6a 00000000 		.quad	.LBE3235
+ 37451      00000000 
+ 37452 9a72 02       		.byte	0x2
+ 37453 9a73 9806     		.value	0x698
+ 37454 9a75 B19A0000 		.long	0x9ab1
+ 37455 9a79 32       		.uleb128 0x32
+ 37456 9a7a BE0E0000 		.long	0xebe
+ 37457 9a7e 04       		.byte	0x4
+ 37458 9a7f 91       		.byte	0x91
+ 37459 9a80 80BE7F   		.sleb128 -8448
+ 37460 9a83 35       		.uleb128 0x35
+ 37461 9a84 CB0E0000 		.long	0xecb
+ 37462 9a88 00000000 		.quad	.LBB3237
+ 37462      00000000 
+ 37463 9a90 00000000 		.quad	.LBE3237
+ 37463      00000000 
+ 37464 9a98 02       		.byte	0x2
+ 37465 9a99 4905     		.value	0x549
+ 37466 9a9b 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 963
+
+
+ 37467 9a9c E90E0000 		.long	0xee9
+ 37468 9aa0 04       		.byte	0x4
+ 37469 9aa1 91       		.byte	0x91
+ 37470 9aa2 9CBE7F   		.sleb128 -8420
+ 37471 9aa5 32       		.uleb128 0x32
+ 37472 9aa6 DD0E0000 		.long	0xedd
+ 37473 9aaa 04       		.byte	0x4
+ 37474 9aab 91       		.byte	0x91
+ 37475 9aac A0BE7F   		.sleb128 -8416
+ 37476 9aaf 00       		.byte	0x0
+ 37477 9ab0 00       		.byte	0x0
+ 37478 9ab1 33       		.uleb128 0x33
+ 37479 9ab2 00000000 		.quad	.LBB3239
+ 37479      00000000 
+ 37480 9aba 00000000 		.quad	.LBE3239
+ 37480      00000000 
+ 37481 9ac2 34       		.uleb128 0x34
+ 37482 9ac3 480C0000 		.long	0xc48
+ 37483 9ac7 04       		.byte	0x4
+ 37484 9ac8 91       		.byte	0x91
+ 37485 9ac9 90B37F   		.sleb128 -9840
+ 37486 9acc 00       		.byte	0x0
+ 37487 9acd 00       		.byte	0x0
+ 37488 9ace 00       		.byte	0x0
+ 37489 9acf 31       		.uleb128 0x31
+ 37490 9ad0 F60E0000 		.long	0xef6
+ 37491 9ad4 00000000 		.quad	.LBB3240
+ 37491      00000000 
+ 37492 9adc 00000000 		.quad	.LBE3240
+ 37492      00000000 
+ 37493 9ae4 02       		.byte	0x2
+ 37494 9ae5 8607     		.value	0x786
+ 37495 9ae7 F19C0000 		.long	0x9cf1
+ 37496 9aeb 32       		.uleb128 0x32
+ 37497 9aec 080F0000 		.long	0xf08
+ 37498 9af0 04       		.byte	0x4
+ 37499 9af1 91       		.byte	0x91
+ 37500 9af2 B0BE7F   		.sleb128 -8400
+ 37501 9af5 33       		.uleb128 0x33
+ 37502 9af6 00000000 		.quad	.LBB3241
+ 37502      00000000 
+ 37503 9afe 00000000 		.quad	.LBE3241
+ 37503      00000000 
+ 37504 9b06 34       		.uleb128 0x34
+ 37505 9b07 140F0000 		.long	0xf14
+ 37506 9b0b 04       		.byte	0x4
+ 37507 9b0c 76       		.byte	0x76
+ 37508 9b0d 80B07F   		.sleb128 -10240
+ 37509 9b10 31       		.uleb128 0x31
+ 37510 9b11 210F0000 		.long	0xf21
+ 37511 9b15 00000000 		.quad	.LBB3242
+ 37511      00000000 
+ 37512 9b1d 00000000 		.quad	.LBE3242
+ 37512      00000000 
+ 37513 9b25 02       		.byte	0x2
+ 37514 9b26 1F06     		.value	0x61f
+ 37515 9b28 B29B0000 		.long	0x9bb2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 964
+
+
+ 37516 9b2c 32       		.uleb128 0x32
+ 37517 9b2d 330F0000 		.long	0xf33
+ 37518 9b31 04       		.byte	0x4
+ 37519 9b32 91       		.byte	0x91
+ 37520 9b33 C0BE7F   		.sleb128 -8384
+ 37521 9b36 33       		.uleb128 0x33
+ 37522 9b37 00000000 		.quad	.LBB3243
+ 37522      00000000 
+ 37523 9b3f 00000000 		.quad	.LBE3243
+ 37523      00000000 
+ 37524 9b47 34       		.uleb128 0x34
+ 37525 9b48 3F0F0000 		.long	0xf3f
+ 37526 9b4c 09       		.byte	0x9
+ 37527 9b4d 03       		.byte	0x3
+ 37528 9b4e 00000000 		.quad	mask.7943
+ 37528      00000000 
+ 37529 9b56 35       		.uleb128 0x35
+ 37530 9b57 A00D0000 		.long	0xda0
+ 37531 9b5b 00000000 		.quad	.LBB3244
+ 37531      00000000 
+ 37532 9b63 00000000 		.quad	.LBE3244
+ 37532      00000000 
+ 37533 9b6b 02       		.byte	0x2
+ 37534 9b6c FE04     		.value	0x4fe
+ 37535 9b6e 32       		.uleb128 0x32
+ 37536 9b6f BE0D0000 		.long	0xdbe
+ 37537 9b73 04       		.byte	0x4
+ 37538 9b74 91       		.byte	0x91
+ 37539 9b75 D0BE7F   		.sleb128 -8368
+ 37540 9b78 32       		.uleb128 0x32
+ 37541 9b79 B20D0000 		.long	0xdb2
+ 37542 9b7d 04       		.byte	0x4
+ 37543 9b7e 91       		.byte	0x91
+ 37544 9b7f E0BE7F   		.sleb128 -8352
+ 37545 9b82 35       		.uleb128 0x35
+ 37546 9b83 CB0D0000 		.long	0xdcb
+ 37547 9b87 00000000 		.quad	.LBB3246
+ 37547      00000000 
+ 37548 9b8f 00000000 		.quad	.LBE3246
+ 37548      00000000 
+ 37549 9b97 02       		.byte	0x2
+ 37550 9b98 7501     		.value	0x175
+ 37551 9b9a 32       		.uleb128 0x32
+ 37552 9b9b E90D0000 		.long	0xde9
+ 37553 9b9f 04       		.byte	0x4
+ 37554 9ba0 91       		.byte	0x91
+ 37555 9ba1 F0BE7F   		.sleb128 -8336
+ 37556 9ba4 32       		.uleb128 0x32
+ 37557 9ba5 DD0D0000 		.long	0xddd
+ 37558 9ba9 04       		.byte	0x4
+ 37559 9baa 91       		.byte	0x91
+ 37560 9bab 80BF7F   		.sleb128 -8320
+ 37561 9bae 00       		.byte	0x0
+ 37562 9baf 00       		.byte	0x0
+ 37563 9bb0 00       		.byte	0x0
+ 37564 9bb1 00       		.byte	0x0
+ 37565 9bb2 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s 			page 965
+
+
+ 37566 9bb3 210F0000 		.long	0xf21
+ 37567 9bb7 00000000 		.quad	.LBB3248
+ 37567      00000000 
+ 37568 9bbf 00000000 		.quad	.LBE3248
+ 37568      00000000 
+ 37569 9bc7 02       		.byte	0x2
+ 37570 9bc8 2006     		.value	0x620
+ 37571 9bca 549C0000 		.long	0x9c54
+ 37572 9bce 32       		.uleb128 0x32
+ 37573 9bcf 330F0000 		.long	0xf33
+ 37574 9bd3 04       		.byte	0x4
+ 37575 9bd4 91       		.byte	0x91
+ 37576 9bd5 90BF7F   		.sleb128 -8304
+ 37577 9bd8 33       		.uleb128 0x33
+ 37578 9bd9 00000000 		.quad	.LBB3249
+ 37578      00000000 
+ 37579 9be1 00000000 		.quad	.LBE3249
+ 37579      00000000 
+ 37580 9be9 34       		.uleb128 0x34
+ 37581 9bea 3F0F0000 		.long	0xf3f
+ 37582 9bee 09       		.byte	0x9
+ 37583 9bef 03       		.byte	0x3
+ 37584 9bf0 00000000 		.quad	mask.7943
+ 37584      00000000 
+ 37585 9bf8 35       		.uleb128 0x35
+ 37586 9bf9 A00D0000 		.long	0xda0
+ 37587 9bfd 00000000 		.quad	.LBB3250
+ 37587      00000000 
+ 37588 9c05 00000000 		.quad	.LBE3250
+ 37588      00000000 
+ 37589 9c0d 02       		.byte	0x2
+ 37590 9c0e FE04     		.value	0x4fe
+ 37591 9c10 32       		.uleb128 0x32
+ 37592 9c11 BE0D0000 		.long	0xdbe
+ 37593 9c15 04       		.byte	0x4
+ 37594 9c16 91       		.byte	0x91
+ 37595 9c17 A0BF7F   		.sleb128 -8288
+ 37596 9c1a 32       		.uleb128 0x32
+ 37597 9c1b B20D0000 		.long	0xdb2
+ 37598 9c1f 04       		.byte	0x4
+ 37599 9c20 91       		.byte	0x91
+ 37600 9c21 B0BF7F   		.sleb128 -8272
+ 37601 9c24 35       		.uleb128 0x35
+ 37602 9c25 CB0D0000 		.long	0xdcb
+ 37603 9c29 00000000 		.quad	.LBB3252
+ 37603      00000000 
+ 37604 9c31 00000000 		.quad	.LBE3252
+ 37604      00000000 
+ 37605 9c39 02       		.byte	0x2
+ 37606 9c3a 7501     		.value	0x175
+ 37607 9c3c 32       		.uleb128 0x32
+ 37608 9c3d E90D0000 		.long	0xde9
+ 37609 9c41 04       		.byte	0x4
+ 37610 9c42 91       		.byte	0x91
+ 37611 9c43 C0BF7F   		.sleb128 -8256
+ 37612 9c46 32       		.uleb128 0x32
+ 37613 9c47 DD0D0000 		.long	0xddd
+
GAS LISTING /tmp/ccjbMjHD.s 			page 966
+
+
+ 37614 9c4b 04       		.byte	0x4
+ 37615 9c4c 91       		.byte	0x91
+ 37616 9c4d D0BF7F   		.sleb128 -8240
+ 37617 9c50 00       		.byte	0x0
+ 37618 9c51 00       		.byte	0x0
+ 37619 9c52 00       		.byte	0x0
+ 37620 9c53 00       		.byte	0x0
+ 37621 9c54 35       		.uleb128 0x35
+ 37622 9c55 210F0000 		.long	0xf21
+ 37623 9c59 00000000 		.quad	.LBB3254
+ 37623      00000000 
+ 37624 9c61 00000000 		.quad	.LBE3254
+ 37624      00000000 
+ 37625 9c69 02       		.byte	0x2
+ 37626 9c6a 2106     		.value	0x621
+ 37627 9c6c 32       		.uleb128 0x32
+ 37628 9c6d 330F0000 		.long	0xf33
+ 37629 9c71 04       		.byte	0x4
+ 37630 9c72 91       		.byte	0x91
+ 37631 9c73 E0BF7F   		.sleb128 -8224
+ 37632 9c76 33       		.uleb128 0x33
+ 37633 9c77 00000000 		.quad	.LBB3255
+ 37633      00000000 
+ 37634 9c7f 00000000 		.quad	.LBE3255
+ 37634      00000000 
+ 37635 9c87 34       		.uleb128 0x34
+ 37636 9c88 3F0F0000 		.long	0xf3f
+ 37637 9c8c 09       		.byte	0x9
+ 37638 9c8d 03       		.byte	0x3
+ 37639 9c8e 00000000 		.quad	mask.7943
+ 37639      00000000 
+ 37640 9c96 35       		.uleb128 0x35
+ 37641 9c97 A00D0000 		.long	0xda0
+ 37642 9c9b 00000000 		.quad	.LBB3256
+ 37642      00000000 
+ 37643 9ca3 00000000 		.quad	.LBE3256
+ 37643      00000000 
+ 37644 9cab 02       		.byte	0x2
+ 37645 9cac FE04     		.value	0x4fe
+ 37646 9cae 32       		.uleb128 0x32
+ 37647 9caf BE0D0000 		.long	0xdbe
+ 37648 9cb3 04       		.byte	0x4
+ 37649 9cb4 91       		.byte	0x91
+ 37650 9cb5 F0BF7F   		.sleb128 -8208
+ 37651 9cb8 32       		.uleb128 0x32
+ 37652 9cb9 B20D0000 		.long	0xdb2
+ 37653 9cbd 03       		.byte	0x3
+ 37654 9cbe 91       		.byte	0x91
+ 37655 9cbf 8040     		.sleb128 -8192
+ 37656 9cc1 35       		.uleb128 0x35
+ 37657 9cc2 CB0D0000 		.long	0xdcb
+ 37658 9cc6 00000000 		.quad	.LBB3258
+ 37658      00000000 
+ 37659 9cce 00000000 		.quad	.LBE3258
+ 37659      00000000 
+ 37660 9cd6 02       		.byte	0x2
+ 37661 9cd7 7501     		.value	0x175
+
GAS LISTING /tmp/ccjbMjHD.s 			page 967
+
+
+ 37662 9cd9 32       		.uleb128 0x32
+ 37663 9cda E90D0000 		.long	0xde9
+ 37664 9cde 03       		.byte	0x3
+ 37665 9cdf 91       		.byte	0x91
+ 37666 9ce0 9040     		.sleb128 -8176
+ 37667 9ce2 32       		.uleb128 0x32
+ 37668 9ce3 DD0D0000 		.long	0xddd
+ 37669 9ce7 03       		.byte	0x3
+ 37670 9ce8 91       		.byte	0x91
+ 37671 9ce9 A040     		.sleb128 -8160
+ 37672 9ceb 00       		.byte	0x0
+ 37673 9cec 00       		.byte	0x0
+ 37674 9ced 00       		.byte	0x0
+ 37675 9cee 00       		.byte	0x0
+ 37676 9cef 00       		.byte	0x0
+ 37677 9cf0 00       		.byte	0x0
+ 37678 9cf1 31       		.uleb128 0x31
+ 37679 9cf2 860E0000 		.long	0xe86
+ 37680 9cf6 00000000 		.quad	.LBB3260
+ 37680      00000000 
+ 37681 9cfe 00000000 		.quad	.LBE3260
+ 37681      00000000 
+ 37682 9d06 02       		.byte	0x2
+ 37683 9d07 8607     		.value	0x786
+ 37684 9d09 209D0000 		.long	0x9d20
+ 37685 9d0d 32       		.uleb128 0x32
+ 37686 9d0e A10E0000 		.long	0xea1
+ 37687 9d12 03       		.byte	0x3
+ 37688 9d13 91       		.byte	0x91
+ 37689 9d14 B040     		.sleb128 -8144
+ 37690 9d16 32       		.uleb128 0x32
+ 37691 9d17 970E0000 		.long	0xe97
+ 37692 9d1b 03       		.byte	0x3
+ 37693 9d1c 91       		.byte	0x91
+ 37694 9d1d C040     		.sleb128 -8128
+ 37695 9d1f 00       		.byte	0x0
+ 37696 9d20 31       		.uleb128 0x31
+ 37697 9d21 8F940000 		.long	0x948f
+ 37698 9d25 00000000 		.quad	.LBB3262
+ 37698      00000000 
+ 37699 9d2d 00000000 		.quad	.LBE3262
+ 37699      00000000 
+ 37700 9d35 02       		.byte	0x2
+ 37701 9d36 8707     		.value	0x787
+ 37702 9d38 B29D0000 		.long	0x9db2
+ 37703 9d3c 32       		.uleb128 0x32
+ 37704 9d3d A1940000 		.long	0x94a1
+ 37705 9d41 03       		.byte	0x3
+ 37706 9d42 91       		.byte	0x91
+ 37707 9d43 D040     		.sleb128 -8112
+ 37708 9d45 33       		.uleb128 0x33
+ 37709 9d46 00000000 		.quad	.LBB3263
+ 37709      00000000 
+ 37710 9d4e 00000000 		.quad	.LBE3263
+ 37710      00000000 
+ 37711 9d56 34       		.uleb128 0x34
+ 37712 9d57 AD940000 		.long	0x94ad
+
GAS LISTING /tmp/ccjbMjHD.s 			page 968
+
+
+ 37713 9d5b 04       		.byte	0x4
+ 37714 9d5c 91       		.byte	0x91
+ 37715 9d5d E0B37F   		.sleb128 -9760
+ 37716 9d60 34       		.uleb128 0x34
+ 37717 9d61 B7940000 		.long	0x94b7
+ 37718 9d65 03       		.byte	0x3
+ 37719 9d66 91       		.byte	0x91
+ 37720 9d67 E440     		.sleb128 -8092
+ 37721 9d69 35       		.uleb128 0x35
+ 37722 9d6a BE560000 		.long	0x56be
+ 37723 9d6e 00000000 		.quad	.LBB3264
+ 37723      00000000 
+ 37724 9d76 00000000 		.quad	.LBE3264
+ 37724      00000000 
+ 37725 9d7e 02       		.byte	0x2
+ 37726 9d7f 7906     		.value	0x679
+ 37727 9d81 32       		.uleb128 0x32
+ 37728 9d82 D0560000 		.long	0x56d0
+ 37729 9d86 03       		.byte	0x3
+ 37730 9d87 91       		.byte	0x91
+ 37731 9d88 E840     		.sleb128 -8088
+ 37732 9d8a 33       		.uleb128 0x33
+ 37733 9d8b 00000000 		.quad	.LBB3265
+ 37733      00000000 
+ 37734 9d93 00000000 		.quad	.LBE3265
+ 37734      00000000 
+ 37735 9d9b 34       		.uleb128 0x34
+ 37736 9d9c DA560000 		.long	0x56da
+ 37737 9da0 04       		.byte	0x4
+ 37738 9da1 91       		.byte	0x91
+ 37739 9da2 D0B37F   		.sleb128 -9776
+ 37740 9da5 34       		.uleb128 0x34
+ 37741 9da6 E6560000 		.long	0x56e6
+ 37742 9daa 03       		.byte	0x3
+ 37743 9dab 91       		.byte	0x91
+ 37744 9dac EC40     		.sleb128 -8084
+ 37745 9dae 00       		.byte	0x0
+ 37746 9daf 00       		.byte	0x0
+ 37747 9db0 00       		.byte	0x0
+ 37748 9db1 00       		.byte	0x0
+ 37749 9db2 31       		.uleb128 0x31
+ 37750 9db3 F60E0000 		.long	0xef6
+ 37751 9db7 00000000 		.quad	.LBB3266
+ 37751      00000000 
+ 37752 9dbf 00000000 		.quad	.LBE3266
+ 37752      00000000 
+ 37753 9dc7 02       		.byte	0x2
+ 37754 9dc8 8707     		.value	0x787
+ 37755 9dca C79F0000 		.long	0x9fc7
+ 37756 9dce 32       		.uleb128 0x32
+ 37757 9dcf 080F0000 		.long	0xf08
+ 37758 9dd3 03       		.byte	0x3
+ 37759 9dd4 91       		.byte	0x91
+ 37760 9dd5 F040     		.sleb128 -8080
+ 37761 9dd7 33       		.uleb128 0x33
+ 37762 9dd8 00000000 		.quad	.LBB3267
+ 37762      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 969
+
+
+ 37763 9de0 00000000 		.quad	.LBE3267
+ 37763      00000000 
+ 37764 9de8 34       		.uleb128 0x34
+ 37765 9de9 140F0000 		.long	0xf14
+ 37766 9ded 04       		.byte	0x4
+ 37767 9dee 76       		.byte	0x76
+ 37768 9def 90B07F   		.sleb128 -10224
+ 37769 9df2 31       		.uleb128 0x31
+ 37770 9df3 210F0000 		.long	0xf21
+ 37771 9df7 00000000 		.quad	.LBB3268
+ 37771      00000000 
+ 37772 9dff 00000000 		.quad	.LBE3268
+ 37772      00000000 
+ 37773 9e07 02       		.byte	0x2
+ 37774 9e08 1F06     		.value	0x61f
+ 37775 9e0a 8F9E0000 		.long	0x9e8f
+ 37776 9e0e 32       		.uleb128 0x32
+ 37777 9e0f 330F0000 		.long	0xf33
+ 37778 9e13 03       		.byte	0x3
+ 37779 9e14 91       		.byte	0x91
+ 37780 9e15 8041     		.sleb128 -8064
+ 37781 9e17 33       		.uleb128 0x33
+ 37782 9e18 00000000 		.quad	.LBB3269
+ 37782      00000000 
+ 37783 9e20 00000000 		.quad	.LBE3269
+ 37783      00000000 
+ 37784 9e28 34       		.uleb128 0x34
+ 37785 9e29 3F0F0000 		.long	0xf3f
+ 37786 9e2d 09       		.byte	0x9
+ 37787 9e2e 03       		.byte	0x3
+ 37788 9e2f 00000000 		.quad	mask.7943
+ 37788      00000000 
+ 37789 9e37 35       		.uleb128 0x35
+ 37790 9e38 A00D0000 		.long	0xda0
+ 37791 9e3c 00000000 		.quad	.LBB3270
+ 37791      00000000 
+ 37792 9e44 00000000 		.quad	.LBE3270
+ 37792      00000000 
+ 37793 9e4c 02       		.byte	0x2
+ 37794 9e4d FE04     		.value	0x4fe
+ 37795 9e4f 32       		.uleb128 0x32
+ 37796 9e50 BE0D0000 		.long	0xdbe
+ 37797 9e54 03       		.byte	0x3
+ 37798 9e55 91       		.byte	0x91
+ 37799 9e56 9041     		.sleb128 -8048
+ 37800 9e58 32       		.uleb128 0x32
+ 37801 9e59 B20D0000 		.long	0xdb2
+ 37802 9e5d 03       		.byte	0x3
+ 37803 9e5e 91       		.byte	0x91
+ 37804 9e5f A041     		.sleb128 -8032
+ 37805 9e61 35       		.uleb128 0x35
+ 37806 9e62 CB0D0000 		.long	0xdcb
+ 37807 9e66 00000000 		.quad	.LBB3272
+ 37807      00000000 
+ 37808 9e6e 00000000 		.quad	.LBE3272
+ 37808      00000000 
+ 37809 9e76 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 970
+
+
+ 37810 9e77 7501     		.value	0x175
+ 37811 9e79 32       		.uleb128 0x32
+ 37812 9e7a E90D0000 		.long	0xde9
+ 37813 9e7e 03       		.byte	0x3
+ 37814 9e7f 91       		.byte	0x91
+ 37815 9e80 B041     		.sleb128 -8016
+ 37816 9e82 32       		.uleb128 0x32
+ 37817 9e83 DD0D0000 		.long	0xddd
+ 37818 9e87 03       		.byte	0x3
+ 37819 9e88 91       		.byte	0x91
+ 37820 9e89 C041     		.sleb128 -8000
+ 37821 9e8b 00       		.byte	0x0
+ 37822 9e8c 00       		.byte	0x0
+ 37823 9e8d 00       		.byte	0x0
+ 37824 9e8e 00       		.byte	0x0
+ 37825 9e8f 31       		.uleb128 0x31
+ 37826 9e90 210F0000 		.long	0xf21
+ 37827 9e94 00000000 		.quad	.LBB3274
+ 37827      00000000 
+ 37828 9e9c 00000000 		.quad	.LBE3274
+ 37828      00000000 
+ 37829 9ea4 02       		.byte	0x2
+ 37830 9ea5 2006     		.value	0x620
+ 37831 9ea7 2C9F0000 		.long	0x9f2c
+ 37832 9eab 32       		.uleb128 0x32
+ 37833 9eac 330F0000 		.long	0xf33
+ 37834 9eb0 03       		.byte	0x3
+ 37835 9eb1 91       		.byte	0x91
+ 37836 9eb2 D041     		.sleb128 -7984
+ 37837 9eb4 33       		.uleb128 0x33
+ 37838 9eb5 00000000 		.quad	.LBB3275
+ 37838      00000000 
+ 37839 9ebd 00000000 		.quad	.LBE3275
+ 37839      00000000 
+ 37840 9ec5 34       		.uleb128 0x34
+ 37841 9ec6 3F0F0000 		.long	0xf3f
+ 37842 9eca 09       		.byte	0x9
+ 37843 9ecb 03       		.byte	0x3
+ 37844 9ecc 00000000 		.quad	mask.7943
+ 37844      00000000 
+ 37845 9ed4 35       		.uleb128 0x35
+ 37846 9ed5 A00D0000 		.long	0xda0
+ 37847 9ed9 00000000 		.quad	.LBB3276
+ 37847      00000000 
+ 37848 9ee1 00000000 		.quad	.LBE3276
+ 37848      00000000 
+ 37849 9ee9 02       		.byte	0x2
+ 37850 9eea FE04     		.value	0x4fe
+ 37851 9eec 32       		.uleb128 0x32
+ 37852 9eed BE0D0000 		.long	0xdbe
+ 37853 9ef1 03       		.byte	0x3
+ 37854 9ef2 91       		.byte	0x91
+ 37855 9ef3 E041     		.sleb128 -7968
+ 37856 9ef5 32       		.uleb128 0x32
+ 37857 9ef6 B20D0000 		.long	0xdb2
+ 37858 9efa 03       		.byte	0x3
+ 37859 9efb 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 971
+
+
+ 37860 9efc F041     		.sleb128 -7952
+ 37861 9efe 35       		.uleb128 0x35
+ 37862 9eff CB0D0000 		.long	0xdcb
+ 37863 9f03 00000000 		.quad	.LBB3278
+ 37863      00000000 
+ 37864 9f0b 00000000 		.quad	.LBE3278
+ 37864      00000000 
+ 37865 9f13 02       		.byte	0x2
+ 37866 9f14 7501     		.value	0x175
+ 37867 9f16 32       		.uleb128 0x32
+ 37868 9f17 E90D0000 		.long	0xde9
+ 37869 9f1b 03       		.byte	0x3
+ 37870 9f1c 91       		.byte	0x91
+ 37871 9f1d 8042     		.sleb128 -7936
+ 37872 9f1f 32       		.uleb128 0x32
+ 37873 9f20 DD0D0000 		.long	0xddd
+ 37874 9f24 03       		.byte	0x3
+ 37875 9f25 91       		.byte	0x91
+ 37876 9f26 9042     		.sleb128 -7920
+ 37877 9f28 00       		.byte	0x0
+ 37878 9f29 00       		.byte	0x0
+ 37879 9f2a 00       		.byte	0x0
+ 37880 9f2b 00       		.byte	0x0
+ 37881 9f2c 35       		.uleb128 0x35
+ 37882 9f2d 210F0000 		.long	0xf21
+ 37883 9f31 00000000 		.quad	.LBB3280
+ 37883      00000000 
+ 37884 9f39 00000000 		.quad	.LBE3280
+ 37884      00000000 
+ 37885 9f41 02       		.byte	0x2
+ 37886 9f42 2106     		.value	0x621
+ 37887 9f44 32       		.uleb128 0x32
+ 37888 9f45 330F0000 		.long	0xf33
+ 37889 9f49 03       		.byte	0x3
+ 37890 9f4a 91       		.byte	0x91
+ 37891 9f4b A042     		.sleb128 -7904
+ 37892 9f4d 33       		.uleb128 0x33
+ 37893 9f4e 00000000 		.quad	.LBB3281
+ 37893      00000000 
+ 37894 9f56 00000000 		.quad	.LBE3281
+ 37894      00000000 
+ 37895 9f5e 34       		.uleb128 0x34
+ 37896 9f5f 3F0F0000 		.long	0xf3f
+ 37897 9f63 09       		.byte	0x9
+ 37898 9f64 03       		.byte	0x3
+ 37899 9f65 00000000 		.quad	mask.7943
+ 37899      00000000 
+ 37900 9f6d 35       		.uleb128 0x35
+ 37901 9f6e A00D0000 		.long	0xda0
+ 37902 9f72 00000000 		.quad	.LBB3282
+ 37902      00000000 
+ 37903 9f7a 00000000 		.quad	.LBE3282
+ 37903      00000000 
+ 37904 9f82 02       		.byte	0x2
+ 37905 9f83 FE04     		.value	0x4fe
+ 37906 9f85 32       		.uleb128 0x32
+ 37907 9f86 BE0D0000 		.long	0xdbe
+
GAS LISTING /tmp/ccjbMjHD.s 			page 972
+
+
+ 37908 9f8a 03       		.byte	0x3
+ 37909 9f8b 91       		.byte	0x91
+ 37910 9f8c B042     		.sleb128 -7888
+ 37911 9f8e 32       		.uleb128 0x32
+ 37912 9f8f B20D0000 		.long	0xdb2
+ 37913 9f93 03       		.byte	0x3
+ 37914 9f94 91       		.byte	0x91
+ 37915 9f95 C042     		.sleb128 -7872
+ 37916 9f97 35       		.uleb128 0x35
+ 37917 9f98 CB0D0000 		.long	0xdcb
+ 37918 9f9c 00000000 		.quad	.LBB3284
+ 37918      00000000 
+ 37919 9fa4 00000000 		.quad	.LBE3284
+ 37919      00000000 
+ 37920 9fac 02       		.byte	0x2
+ 37921 9fad 7501     		.value	0x175
+ 37922 9faf 32       		.uleb128 0x32
+ 37923 9fb0 E90D0000 		.long	0xde9
+ 37924 9fb4 03       		.byte	0x3
+ 37925 9fb5 91       		.byte	0x91
+ 37926 9fb6 D042     		.sleb128 -7856
+ 37927 9fb8 32       		.uleb128 0x32
+ 37928 9fb9 DD0D0000 		.long	0xddd
+ 37929 9fbd 03       		.byte	0x3
+ 37930 9fbe 91       		.byte	0x91
+ 37931 9fbf E042     		.sleb128 -7840
+ 37932 9fc1 00       		.byte	0x0
+ 37933 9fc2 00       		.byte	0x0
+ 37934 9fc3 00       		.byte	0x0
+ 37935 9fc4 00       		.byte	0x0
+ 37936 9fc5 00       		.byte	0x0
+ 37937 9fc6 00       		.byte	0x0
+ 37938 9fc7 31       		.uleb128 0x31
+ 37939 9fc8 860E0000 		.long	0xe86
+ 37940 9fcc 00000000 		.quad	.LBB3286
+ 37940      00000000 
+ 37941 9fd4 00000000 		.quad	.LBE3286
+ 37941      00000000 
+ 37942 9fdc 02       		.byte	0x2
+ 37943 9fdd 8707     		.value	0x787
+ 37944 9fdf F69F0000 		.long	0x9ff6
+ 37945 9fe3 32       		.uleb128 0x32
+ 37946 9fe4 A10E0000 		.long	0xea1
+ 37947 9fe8 03       		.byte	0x3
+ 37948 9fe9 91       		.byte	0x91
+ 37949 9fea F042     		.sleb128 -7824
+ 37950 9fec 32       		.uleb128 0x32
+ 37951 9fed 970E0000 		.long	0xe97
+ 37952 9ff1 03       		.byte	0x3
+ 37953 9ff2 91       		.byte	0x91
+ 37954 9ff3 8043     		.sleb128 -7808
+ 37955 9ff5 00       		.byte	0x0
+ 37956 9ff6 31       		.uleb128 0x31
+ 37957 9ff7 D50B0000 		.long	0xbd5
+ 37958 9ffb 00000000 		.quad	.LBB3288
+ 37958      00000000 
+ 37959 a003 00000000 		.quad	.LBE3288
+
GAS LISTING /tmp/ccjbMjHD.s 			page 973
+
+
+ 37959      00000000 
+ 37960 a00b 02       		.byte	0x2
+ 37961 a00c 8807     		.value	0x788
+ 37962 a00e D9A40000 		.long	0xa4d9
+ 37963 a012 32       		.uleb128 0x32
+ 37964 a013 F30B0000 		.long	0xbf3
+ 37965 a017 03       		.byte	0x3
+ 37966 a018 91       		.byte	0x91
+ 37967 a019 9C43     		.sleb128 -7780
+ 37968 a01b 32       		.uleb128 0x32
+ 37969 a01c E70B0000 		.long	0xbe7
+ 37970 a020 03       		.byte	0x3
+ 37971 a021 91       		.byte	0x91
+ 37972 a022 A043     		.sleb128 -7776
+ 37973 a024 33       		.uleb128 0x33
+ 37974 a025 00000000 		.quad	.LBB3289
+ 37974      00000000 
+ 37975 a02d 00000000 		.quad	.LBE3289
+ 37975      00000000 
+ 37976 a035 34       		.uleb128 0x34
+ 37977 a036 FF0B0000 		.long	0xbff
+ 37978 a03a 04       		.byte	0x4
+ 37979 a03b 76       		.byte	0x76
+ 37980 a03c B0B07F   		.sleb128 -10192
+ 37981 a03f 34       		.uleb128 0x34
+ 37982 a040 0B0C0000 		.long	0xc0b
+ 37983 a044 04       		.byte	0x4
+ 37984 a045 76       		.byte	0x76
+ 37985 a046 A0B07F   		.sleb128 -10208
+ 37986 a049 31       		.uleb128 0x31
+ 37987 a04a 540C0000 		.long	0xc54
+ 37988 a04e 00000000 		.quad	.LBB3290
+ 37988      00000000 
+ 37989 a056 00000000 		.quad	.LBE3290
+ 37989      00000000 
+ 37990 a05e 02       		.byte	0x2
+ 37991 a05f 9106     		.value	0x691
+ 37992 a061 B5A00000 		.long	0xa0b5
+ 37993 a065 32       		.uleb128 0x32
+ 37994 a066 7E0C0000 		.long	0xc7e
+ 37995 a06a 03       		.byte	0x3
+ 37996 a06b 91       		.byte	0x91
+ 37997 a06c B843     		.sleb128 -7752
+ 37998 a06e 32       		.uleb128 0x32
+ 37999 a06f 720C0000 		.long	0xc72
+ 38000 a073 03       		.byte	0x3
+ 38001 a074 91       		.byte	0x91
+ 38002 a075 BC43     		.sleb128 -7748
+ 38003 a077 32       		.uleb128 0x32
+ 38004 a078 660C0000 		.long	0xc66
+ 38005 a07c 03       		.byte	0x3
+ 38006 a07d 91       		.byte	0x91
+ 38007 a07e C043     		.sleb128 -7744
+ 38008 a080 35       		.uleb128 0x35
+ 38009 a081 8B0C0000 		.long	0xc8b
+ 38010 a085 00000000 		.quad	.LBB3292
+ 38010      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 974
+
+
+ 38011 a08d 00000000 		.quad	.LBE3292
+ 38011      00000000 
+ 38012 a095 02       		.byte	0x2
+ 38013 a096 0702     		.value	0x207
+ 38014 a098 32       		.uleb128 0x32
+ 38015 a099 B40C0000 		.long	0xcb4
+ 38016 a09d 03       		.byte	0x3
+ 38017 a09e 91       		.byte	0x91
+ 38018 a09f D843     		.sleb128 -7720
+ 38019 a0a1 32       		.uleb128 0x32
+ 38020 a0a2 A90C0000 		.long	0xca9
+ 38021 a0a6 03       		.byte	0x3
+ 38022 a0a7 91       		.byte	0x91
+ 38023 a0a8 DC43     		.sleb128 -7716
+ 38024 a0aa 32       		.uleb128 0x32
+ 38025 a0ab 9D0C0000 		.long	0xc9d
+ 38026 a0af 03       		.byte	0x3
+ 38027 a0b0 91       		.byte	0x91
+ 38028 a0b1 E043     		.sleb128 -7712
+ 38029 a0b3 00       		.byte	0x0
+ 38030 a0b4 00       		.byte	0x0
+ 38031 a0b5 31       		.uleb128 0x31
+ 38032 a0b6 C10C0000 		.long	0xcc1
+ 38033 a0ba 00000000 		.quad	.LBB3294
+ 38033      00000000 
+ 38034 a0c2 00000000 		.quad	.LBE3294
+ 38034      00000000 
+ 38035 a0ca 02       		.byte	0x2
+ 38036 a0cb 9206     		.value	0x692
+ 38037 a0cd 3EA30000 		.long	0xa33e
+ 38038 a0d1 32       		.uleb128 0x32
+ 38039 a0d2 D30C0000 		.long	0xcd3
+ 38040 a0d6 03       		.byte	0x3
+ 38041 a0d7 91       		.byte	0x91
+ 38042 a0d8 F043     		.sleb128 -7696
+ 38043 a0da 35       		.uleb128 0x35
+ 38044 a0db E00C0000 		.long	0xce0
+ 38045 a0df 00000000 		.quad	.LBB3296
+ 38045      00000000 
+ 38046 a0e7 00000000 		.quad	.LBE3296
+ 38046      00000000 
+ 38047 a0ef 02       		.byte	0x2
+ 38048 a0f0 7D03     		.value	0x37d
+ 38049 a0f2 32       		.uleb128 0x32
+ 38050 a0f3 FE0C0000 		.long	0xcfe
+ 38051 a0f7 03       		.byte	0x3
+ 38052 a0f8 91       		.byte	0x91
+ 38053 a0f9 8844     		.sleb128 -7672
+ 38054 a0fb 32       		.uleb128 0x32
+ 38055 a0fc F20C0000 		.long	0xcf2
+ 38056 a100 03       		.byte	0x3
+ 38057 a101 91       		.byte	0x91
+ 38058 a102 9044     		.sleb128 -7664
+ 38059 a104 33       		.uleb128 0x33
+ 38060 a105 00000000 		.quad	.LBB3297
+ 38060      00000000 
+ 38061 a10d 00000000 		.quad	.LBE3297
+
GAS LISTING /tmp/ccjbMjHD.s 			page 975
+
+
+ 38061      00000000 
+ 38062 a115 34       		.uleb128 0x34
+ 38063 a116 0A0D0000 		.long	0xd0a
+ 38064 a11a 03       		.byte	0x3
+ 38065 a11b 91       		.byte	0x91
+ 38066 a11c E044     		.sleb128 -7584
+ 38067 a11e 34       		.uleb128 0x34
+ 38068 a11f 150D0000 		.long	0xd15
+ 38069 a123 03       		.byte	0x3
+ 38070 a124 91       		.byte	0x91
+ 38071 a125 D044     		.sleb128 -7600
+ 38072 a127 34       		.uleb128 0x34
+ 38073 a128 200D0000 		.long	0xd20
+ 38074 a12c 03       		.byte	0x3
+ 38075 a12d 91       		.byte	0x91
+ 38076 a12e C044     		.sleb128 -7616
+ 38077 a130 34       		.uleb128 0x34
+ 38078 a131 2C0D0000 		.long	0xd2c
+ 38079 a135 03       		.byte	0x3
+ 38080 a136 91       		.byte	0x91
+ 38081 a137 B044     		.sleb128 -7632
+ 38082 a139 34       		.uleb128 0x34
+ 38083 a13a 380D0000 		.long	0xd38
+ 38084 a13e 03       		.byte	0x3
+ 38085 a13f 91       		.byte	0x91
+ 38086 a140 AC44     		.sleb128 -7636
+ 38087 a142 31       		.uleb128 0x31
+ 38088 a143 4F0D0000 		.long	0xd4f
+ 38089 a147 00000000 		.quad	.LBB3298
+ 38089      00000000 
+ 38090 a14f 00000000 		.quad	.LBE3298
+ 38090      00000000 
+ 38091 a157 02       		.byte	0x2
+ 38092 a158 5603     		.value	0x356
+ 38093 a15a 71A10000 		.long	0xa171
+ 38094 a15e 32       		.uleb128 0x32
+ 38095 a15f 6A0D0000 		.long	0xd6a
+ 38096 a163 03       		.byte	0x3
+ 38097 a164 91       		.byte	0x91
+ 38098 a165 F044     		.sleb128 -7568
+ 38099 a167 32       		.uleb128 0x32
+ 38100 a168 600D0000 		.long	0xd60
+ 38101 a16c 03       		.byte	0x3
+ 38102 a16d 91       		.byte	0x91
+ 38103 a16e 8045     		.sleb128 -7552
+ 38104 a170 00       		.byte	0x0
+ 38105 a171 31       		.uleb128 0x31
+ 38106 a172 750D0000 		.long	0xd75
+ 38107 a176 00000000 		.quad	.LBB3300
+ 38107      00000000 
+ 38108 a17e 00000000 		.quad	.LBE3300
+ 38108      00000000 
+ 38109 a186 02       		.byte	0x2
+ 38110 a187 5903     		.value	0x359
+ 38111 a189 A0A10000 		.long	0xa1a0
+ 38112 a18d 32       		.uleb128 0x32
+ 38113 a18e 930D0000 		.long	0xd93
+
GAS LISTING /tmp/ccjbMjHD.s 			page 976
+
+
+ 38114 a192 03       		.byte	0x3
+ 38115 a193 91       		.byte	0x91
+ 38116 a194 9C45     		.sleb128 -7524
+ 38117 a196 32       		.uleb128 0x32
+ 38118 a197 870D0000 		.long	0xd87
+ 38119 a19b 03       		.byte	0x3
+ 38120 a19c 91       		.byte	0x91
+ 38121 a19d A045     		.sleb128 -7520
+ 38122 a19f 00       		.byte	0x0
+ 38123 a1a0 31       		.uleb128 0x31
+ 38124 a1a1 4F0D0000 		.long	0xd4f
+ 38125 a1a5 00000000 		.quad	.LBB3302
+ 38125      00000000 
+ 38126 a1ad 00000000 		.quad	.LBE3302
+ 38126      00000000 
+ 38127 a1b5 02       		.byte	0x2
+ 38128 a1b6 5B03     		.value	0x35b
+ 38129 a1b8 CFA10000 		.long	0xa1cf
+ 38130 a1bc 32       		.uleb128 0x32
+ 38131 a1bd 6A0D0000 		.long	0xd6a
+ 38132 a1c1 03       		.byte	0x3
+ 38133 a1c2 91       		.byte	0x91
+ 38134 a1c3 B045     		.sleb128 -7504
+ 38135 a1c5 32       		.uleb128 0x32
+ 38136 a1c6 600D0000 		.long	0xd60
+ 38137 a1ca 03       		.byte	0x3
+ 38138 a1cb 91       		.byte	0x91
+ 38139 a1cc C045     		.sleb128 -7488
+ 38140 a1ce 00       		.byte	0x0
+ 38141 a1cf 31       		.uleb128 0x31
+ 38142 a1d0 A00D0000 		.long	0xda0
+ 38143 a1d4 00000000 		.quad	.LBB3304
+ 38143      00000000 
+ 38144 a1dc 00000000 		.quad	.LBE3304
+ 38144      00000000 
+ 38145 a1e4 02       		.byte	0x2
+ 38146 a1e5 6403     		.value	0x364
+ 38147 a1e7 29A20000 		.long	0xa229
+ 38148 a1eb 32       		.uleb128 0x32
+ 38149 a1ec BE0D0000 		.long	0xdbe
+ 38150 a1f0 03       		.byte	0x3
+ 38151 a1f1 91       		.byte	0x91
+ 38152 a1f2 D045     		.sleb128 -7472
+ 38153 a1f4 32       		.uleb128 0x32
+ 38154 a1f5 B20D0000 		.long	0xdb2
+ 38155 a1f9 03       		.byte	0x3
+ 38156 a1fa 91       		.byte	0x91
+ 38157 a1fb E045     		.sleb128 -7456
+ 38158 a1fd 35       		.uleb128 0x35
+ 38159 a1fe CB0D0000 		.long	0xdcb
+ 38160 a202 00000000 		.quad	.LBB3306
+ 38160      00000000 
+ 38161 a20a 00000000 		.quad	.LBE3306
+ 38161      00000000 
+ 38162 a212 02       		.byte	0x2
+ 38163 a213 7501     		.value	0x175
+ 38164 a215 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 977
+
+
+ 38165 a216 E90D0000 		.long	0xde9
+ 38166 a21a 03       		.byte	0x3
+ 38167 a21b 91       		.byte	0x91
+ 38168 a21c F045     		.sleb128 -7440
+ 38169 a21e 32       		.uleb128 0x32
+ 38170 a21f DD0D0000 		.long	0xddd
+ 38171 a223 03       		.byte	0x3
+ 38172 a224 91       		.byte	0x91
+ 38173 a225 8046     		.sleb128 -7424
+ 38174 a227 00       		.byte	0x0
+ 38175 a228 00       		.byte	0x0
+ 38176 a229 31       		.uleb128 0x31
+ 38177 a22a FB0D0000 		.long	0xdfb
+ 38178 a22e 00000000 		.quad	.LBB3308
+ 38178      00000000 
+ 38179 a236 00000000 		.quad	.LBE3308
+ 38179      00000000 
+ 38180 a23e 02       		.byte	0x2
+ 38181 a23f 6603     		.value	0x366
+ 38182 a241 58A20000 		.long	0xa258
+ 38183 a245 32       		.uleb128 0x32
+ 38184 a246 160E0000 		.long	0xe16
+ 38185 a24a 03       		.byte	0x3
+ 38186 a24b 91       		.byte	0x91
+ 38187 a24c 9046     		.sleb128 -7408
+ 38188 a24e 32       		.uleb128 0x32
+ 38189 a24f 0C0E0000 		.long	0xe0c
+ 38190 a253 03       		.byte	0x3
+ 38191 a254 91       		.byte	0x91
+ 38192 a255 A046     		.sleb128 -7392
+ 38193 a257 00       		.byte	0x0
+ 38194 a258 31       		.uleb128 0x31
+ 38195 a259 A00D0000 		.long	0xda0
+ 38196 a25d 00000000 		.quad	.LBB3310
+ 38196      00000000 
+ 38197 a265 00000000 		.quad	.LBE3310
+ 38197      00000000 
+ 38198 a26d 02       		.byte	0x2
+ 38199 a26e 6803     		.value	0x368
+ 38200 a270 B2A20000 		.long	0xa2b2
+ 38201 a274 32       		.uleb128 0x32
+ 38202 a275 BE0D0000 		.long	0xdbe
+ 38203 a279 03       		.byte	0x3
+ 38204 a27a 91       		.byte	0x91
+ 38205 a27b B046     		.sleb128 -7376
+ 38206 a27d 32       		.uleb128 0x32
+ 38207 a27e B20D0000 		.long	0xdb2
+ 38208 a282 03       		.byte	0x3
+ 38209 a283 91       		.byte	0x91
+ 38210 a284 C046     		.sleb128 -7360
+ 38211 a286 35       		.uleb128 0x35
+ 38212 a287 CB0D0000 		.long	0xdcb
+ 38213 a28b 00000000 		.quad	.LBB3312
+ 38213      00000000 
+ 38214 a293 00000000 		.quad	.LBE3312
+ 38214      00000000 
+ 38215 a29b 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 978
+
+
+ 38216 a29c 7501     		.value	0x175
+ 38217 a29e 32       		.uleb128 0x32
+ 38218 a29f E90D0000 		.long	0xde9
+ 38219 a2a3 03       		.byte	0x3
+ 38220 a2a4 91       		.byte	0x91
+ 38221 a2a5 D046     		.sleb128 -7344
+ 38222 a2a7 32       		.uleb128 0x32
+ 38223 a2a8 DD0D0000 		.long	0xddd
+ 38224 a2ac 03       		.byte	0x3
+ 38225 a2ad 91       		.byte	0x91
+ 38226 a2ae E046     		.sleb128 -7328
+ 38227 a2b0 00       		.byte	0x0
+ 38228 a2b1 00       		.byte	0x0
+ 38229 a2b2 31       		.uleb128 0x31
+ 38230 a2b3 FB0D0000 		.long	0xdfb
+ 38231 a2b7 00000000 		.quad	.LBB3314
+ 38231      00000000 
+ 38232 a2bf 00000000 		.quad	.LBE3314
+ 38232      00000000 
+ 38233 a2c7 02       		.byte	0x2
+ 38234 a2c8 6A03     		.value	0x36a
+ 38235 a2ca E1A20000 		.long	0xa2e1
+ 38236 a2ce 32       		.uleb128 0x32
+ 38237 a2cf 160E0000 		.long	0xe16
+ 38238 a2d3 03       		.byte	0x3
+ 38239 a2d4 91       		.byte	0x91
+ 38240 a2d5 F046     		.sleb128 -7312
+ 38241 a2d7 32       		.uleb128 0x32
+ 38242 a2d8 0C0E0000 		.long	0xe0c
+ 38243 a2dc 03       		.byte	0x3
+ 38244 a2dd 91       		.byte	0x91
+ 38245 a2de 8047     		.sleb128 -7296
+ 38246 a2e0 00       		.byte	0x0
+ 38247 a2e1 31       		.uleb128 0x31
+ 38248 a2e2 210E0000 		.long	0xe21
+ 38249 a2e6 00000000 		.quad	.LBB3316
+ 38249      00000000 
+ 38250 a2ee 00000000 		.quad	.LBE3316
+ 38250      00000000 
+ 38251 a2f6 02       		.byte	0x2
+ 38252 a2f7 6C03     		.value	0x36c
+ 38253 a2f9 10A30000 		.long	0xa310
+ 38254 a2fd 32       		.uleb128 0x32
+ 38255 a2fe 3E0E0000 		.long	0xe3e
+ 38256 a302 03       		.byte	0x3
+ 38257 a303 91       		.byte	0x91
+ 38258 a304 9047     		.sleb128 -7280
+ 38259 a306 32       		.uleb128 0x32
+ 38260 a307 330E0000 		.long	0xe33
+ 38261 a30b 03       		.byte	0x3
+ 38262 a30c 91       		.byte	0x91
+ 38263 a30d A047     		.sleb128 -7264
+ 38264 a30f 00       		.byte	0x0
+ 38265 a310 35       		.uleb128 0x35
+ 38266 a311 4F0D0000 		.long	0xd4f
+ 38267 a315 00000000 		.quad	.LBB3318
+ 38267      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 979
+
+
+ 38268 a31d 00000000 		.quad	.LBE3318
+ 38268      00000000 
+ 38269 a325 02       		.byte	0x2
+ 38270 a326 6E03     		.value	0x36e
+ 38271 a328 32       		.uleb128 0x32
+ 38272 a329 6A0D0000 		.long	0xd6a
+ 38273 a32d 03       		.byte	0x3
+ 38274 a32e 91       		.byte	0x91
+ 38275 a32f B047     		.sleb128 -7248
+ 38276 a331 32       		.uleb128 0x32
+ 38277 a332 600D0000 		.long	0xd60
+ 38278 a336 03       		.byte	0x3
+ 38279 a337 91       		.byte	0x91
+ 38280 a338 C047     		.sleb128 -7232
+ 38281 a33a 00       		.byte	0x0
+ 38282 a33b 00       		.byte	0x0
+ 38283 a33c 00       		.byte	0x0
+ 38284 a33d 00       		.byte	0x0
+ 38285 a33e 36       		.uleb128 0x36
+ 38286 a33f 00000000 		.quad	.LBB3320
+ 38286      00000000 
+ 38287 a347 00000000 		.quad	.LBE3320
+ 38287      00000000 
+ 38288 a34f 5EA30000 		.long	0xa35e
+ 38289 a353 34       		.uleb128 0x34
+ 38290 a354 1C0C0000 		.long	0xc1c
+ 38291 a358 04       		.byte	0x4
+ 38292 a359 91       		.byte	0x91
+ 38293 a35a A0B47F   		.sleb128 -9696
+ 38294 a35d 00       		.byte	0x0
+ 38295 a35e 31       		.uleb128 0x31
+ 38296 a35f 4A0E0000 		.long	0xe4a
+ 38297 a363 00000000 		.quad	.LBB3321
+ 38297      00000000 
+ 38298 a36b 00000000 		.quad	.LBE3321
+ 38298      00000000 
+ 38299 a373 02       		.byte	0x2
+ 38300 a374 9406     		.value	0x694
+ 38301 a376 FBA30000 		.long	0xa3fb
+ 38302 a37a 32       		.uleb128 0x32
+ 38303 a37b 5C0E0000 		.long	0xe5c
+ 38304 a37f 03       		.byte	0x3
+ 38305 a380 91       		.byte	0x91
+ 38306 a381 D047     		.sleb128 -7216
+ 38307 a383 33       		.uleb128 0x33
+ 38308 a384 00000000 		.quad	.LBB3322
+ 38308      00000000 
+ 38309 a38c 00000000 		.quad	.LBE3322
+ 38309      00000000 
+ 38310 a394 34       		.uleb128 0x34
+ 38311 a395 680E0000 		.long	0xe68
+ 38312 a399 09       		.byte	0x9
+ 38313 a39a 03       		.byte	0x3
+ 38314 a39b 00000000 		.quad	ShiftRowTable.7385
+ 38314      00000000 
+ 38315 a3a3 35       		.uleb128 0x35
+ 38316 a3a4 A00D0000 		.long	0xda0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 980
+
+
+ 38317 a3a8 00000000 		.quad	.LBB3323
+ 38317      00000000 
+ 38318 a3b0 00000000 		.quad	.LBE3323
+ 38318      00000000 
+ 38319 a3b8 02       		.byte	0x2
+ 38320 a3b9 9B02     		.value	0x29b
+ 38321 a3bb 32       		.uleb128 0x32
+ 38322 a3bc BE0D0000 		.long	0xdbe
+ 38323 a3c0 03       		.byte	0x3
+ 38324 a3c1 91       		.byte	0x91
+ 38325 a3c2 E047     		.sleb128 -7200
+ 38326 a3c4 32       		.uleb128 0x32
+ 38327 a3c5 B20D0000 		.long	0xdb2
+ 38328 a3c9 03       		.byte	0x3
+ 38329 a3ca 91       		.byte	0x91
+ 38330 a3cb F047     		.sleb128 -7184
+ 38331 a3cd 35       		.uleb128 0x35
+ 38332 a3ce CB0D0000 		.long	0xdcb
+ 38333 a3d2 00000000 		.quad	.LBB3325
+ 38333      00000000 
+ 38334 a3da 00000000 		.quad	.LBE3325
+ 38334      00000000 
+ 38335 a3e2 02       		.byte	0x2
+ 38336 a3e3 7501     		.value	0x175
+ 38337 a3e5 32       		.uleb128 0x32
+ 38338 a3e6 E90D0000 		.long	0xde9
+ 38339 a3ea 03       		.byte	0x3
+ 38340 a3eb 91       		.byte	0x91
+ 38341 a3ec 8048     		.sleb128 -7168
+ 38342 a3ee 32       		.uleb128 0x32
+ 38343 a3ef DD0D0000 		.long	0xddd
+ 38344 a3f3 03       		.byte	0x3
+ 38345 a3f4 91       		.byte	0x91
+ 38346 a3f5 9048     		.sleb128 -7152
+ 38347 a3f7 00       		.byte	0x0
+ 38348 a3f8 00       		.byte	0x0
+ 38349 a3f9 00       		.byte	0x0
+ 38350 a3fa 00       		.byte	0x0
+ 38351 a3fb 36       		.uleb128 0x36
+ 38352 a3fc 00000000 		.quad	.LBB3327
+ 38352      00000000 
+ 38353 a404 00000000 		.quad	.LBE3327
+ 38353      00000000 
+ 38354 a40c 1BA40000 		.long	0xa41b
+ 38355 a410 34       		.uleb128 0x34
+ 38356 a411 2C0C0000 		.long	0xc2c
+ 38357 a415 04       		.byte	0x4
+ 38358 a416 91       		.byte	0x91
+ 38359 a417 90B47F   		.sleb128 -9712
+ 38360 a41a 00       		.byte	0x0
+ 38361 a41b 31       		.uleb128 0x31
+ 38362 a41c 860E0000 		.long	0xe86
+ 38363 a420 00000000 		.quad	.LBB3328
+ 38363      00000000 
+ 38364 a428 00000000 		.quad	.LBE3328
+ 38364      00000000 
+ 38365 a430 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 981
+
+
+ 38366 a431 9606     		.value	0x696
+ 38367 a433 4AA40000 		.long	0xa44a
+ 38368 a437 32       		.uleb128 0x32
+ 38369 a438 A10E0000 		.long	0xea1
+ 38370 a43c 03       		.byte	0x3
+ 38371 a43d 91       		.byte	0x91
+ 38372 a43e A048     		.sleb128 -7136
+ 38373 a440 32       		.uleb128 0x32
+ 38374 a441 970E0000 		.long	0xe97
+ 38375 a445 03       		.byte	0x3
+ 38376 a446 91       		.byte	0x91
+ 38377 a447 B048     		.sleb128 -7120
+ 38378 a449 00       		.byte	0x0
+ 38379 a44a 36       		.uleb128 0x36
+ 38380 a44b 00000000 		.quad	.LBB3330
+ 38380      00000000 
+ 38381 a453 00000000 		.quad	.LBE3330
+ 38381      00000000 
+ 38382 a45b 6AA40000 		.long	0xa46a
+ 38383 a45f 34       		.uleb128 0x34
+ 38384 a460 3C0C0000 		.long	0xc3c
+ 38385 a464 04       		.byte	0x4
+ 38386 a465 91       		.byte	0x91
+ 38387 a466 80B47F   		.sleb128 -9728
+ 38388 a469 00       		.byte	0x0
+ 38389 a46a 31       		.uleb128 0x31
+ 38390 a46b AC0E0000 		.long	0xeac
+ 38391 a46f 00000000 		.quad	.LBB3331
+ 38391      00000000 
+ 38392 a477 00000000 		.quad	.LBE3331
+ 38392      00000000 
+ 38393 a47f 02       		.byte	0x2
+ 38394 a480 9806     		.value	0x698
+ 38395 a482 BBA40000 		.long	0xa4bb
+ 38396 a486 32       		.uleb128 0x32
+ 38397 a487 BE0E0000 		.long	0xebe
+ 38398 a48b 03       		.byte	0x3
+ 38399 a48c 91       		.byte	0x91
+ 38400 a48d C048     		.sleb128 -7104
+ 38401 a48f 35       		.uleb128 0x35
+ 38402 a490 CB0E0000 		.long	0xecb
+ 38403 a494 00000000 		.quad	.LBB3333
+ 38403      00000000 
+ 38404 a49c 00000000 		.quad	.LBE3333
+ 38404      00000000 
+ 38405 a4a4 02       		.byte	0x2
+ 38406 a4a5 4905     		.value	0x549
+ 38407 a4a7 32       		.uleb128 0x32
+ 38408 a4a8 E90E0000 		.long	0xee9
+ 38409 a4ac 03       		.byte	0x3
+ 38410 a4ad 91       		.byte	0x91
+ 38411 a4ae DC48     		.sleb128 -7076
+ 38412 a4b0 32       		.uleb128 0x32
+ 38413 a4b1 DD0E0000 		.long	0xedd
+ 38414 a4b5 03       		.byte	0x3
+ 38415 a4b6 91       		.byte	0x91
+ 38416 a4b7 E048     		.sleb128 -7072
+
GAS LISTING /tmp/ccjbMjHD.s 			page 982
+
+
+ 38417 a4b9 00       		.byte	0x0
+ 38418 a4ba 00       		.byte	0x0
+ 38419 a4bb 33       		.uleb128 0x33
+ 38420 a4bc 00000000 		.quad	.LBB3335
+ 38420      00000000 
+ 38421 a4c4 00000000 		.quad	.LBE3335
+ 38421      00000000 
+ 38422 a4cc 34       		.uleb128 0x34
+ 38423 a4cd 480C0000 		.long	0xc48
+ 38424 a4d1 04       		.byte	0x4
+ 38425 a4d2 91       		.byte	0x91
+ 38426 a4d3 F0B37F   		.sleb128 -9744
+ 38427 a4d6 00       		.byte	0x0
+ 38428 a4d7 00       		.byte	0x0
+ 38429 a4d8 00       		.byte	0x0
+ 38430 a4d9 31       		.uleb128 0x31
+ 38431 a4da F60E0000 		.long	0xef6
+ 38432 a4de 00000000 		.quad	.LBB3336
+ 38432      00000000 
+ 38433 a4e6 00000000 		.quad	.LBE3336
+ 38433      00000000 
+ 38434 a4ee 02       		.byte	0x2
+ 38435 a4ef 8807     		.value	0x788
+ 38436 a4f1 EEA60000 		.long	0xa6ee
+ 38437 a4f5 32       		.uleb128 0x32
+ 38438 a4f6 080F0000 		.long	0xf08
+ 38439 a4fa 03       		.byte	0x3
+ 38440 a4fb 91       		.byte	0x91
+ 38441 a4fc F048     		.sleb128 -7056
+ 38442 a4fe 33       		.uleb128 0x33
+ 38443 a4ff 00000000 		.quad	.LBB3337
+ 38443      00000000 
+ 38444 a507 00000000 		.quad	.LBE3337
+ 38444      00000000 
+ 38445 a50f 34       		.uleb128 0x34
+ 38446 a510 140F0000 		.long	0xf14
+ 38447 a514 04       		.byte	0x4
+ 38448 a515 76       		.byte	0x76
+ 38449 a516 C0B07F   		.sleb128 -10176
+ 38450 a519 31       		.uleb128 0x31
+ 38451 a51a 210F0000 		.long	0xf21
+ 38452 a51e 00000000 		.quad	.LBB3338
+ 38452      00000000 
+ 38453 a526 00000000 		.quad	.LBE3338
+ 38453      00000000 
+ 38454 a52e 02       		.byte	0x2
+ 38455 a52f 1F06     		.value	0x61f
+ 38456 a531 B6A50000 		.long	0xa5b6
+ 38457 a535 32       		.uleb128 0x32
+ 38458 a536 330F0000 		.long	0xf33
+ 38459 a53a 03       		.byte	0x3
+ 38460 a53b 91       		.byte	0x91
+ 38461 a53c 8049     		.sleb128 -7040
+ 38462 a53e 33       		.uleb128 0x33
+ 38463 a53f 00000000 		.quad	.LBB3339
+ 38463      00000000 
+ 38464 a547 00000000 		.quad	.LBE3339
+
GAS LISTING /tmp/ccjbMjHD.s 			page 983
+
+
+ 38464      00000000 
+ 38465 a54f 34       		.uleb128 0x34
+ 38466 a550 3F0F0000 		.long	0xf3f
+ 38467 a554 09       		.byte	0x9
+ 38468 a555 03       		.byte	0x3
+ 38469 a556 00000000 		.quad	mask.7943
+ 38469      00000000 
+ 38470 a55e 35       		.uleb128 0x35
+ 38471 a55f A00D0000 		.long	0xda0
+ 38472 a563 00000000 		.quad	.LBB3340
+ 38472      00000000 
+ 38473 a56b 00000000 		.quad	.LBE3340
+ 38473      00000000 
+ 38474 a573 02       		.byte	0x2
+ 38475 a574 FE04     		.value	0x4fe
+ 38476 a576 32       		.uleb128 0x32
+ 38477 a577 BE0D0000 		.long	0xdbe
+ 38478 a57b 03       		.byte	0x3
+ 38479 a57c 91       		.byte	0x91
+ 38480 a57d 9049     		.sleb128 -7024
+ 38481 a57f 32       		.uleb128 0x32
+ 38482 a580 B20D0000 		.long	0xdb2
+ 38483 a584 03       		.byte	0x3
+ 38484 a585 91       		.byte	0x91
+ 38485 a586 A049     		.sleb128 -7008
+ 38486 a588 35       		.uleb128 0x35
+ 38487 a589 CB0D0000 		.long	0xdcb
+ 38488 a58d 00000000 		.quad	.LBB3342
+ 38488      00000000 
+ 38489 a595 00000000 		.quad	.LBE3342
+ 38489      00000000 
+ 38490 a59d 02       		.byte	0x2
+ 38491 a59e 7501     		.value	0x175
+ 38492 a5a0 32       		.uleb128 0x32
+ 38493 a5a1 E90D0000 		.long	0xde9
+ 38494 a5a5 03       		.byte	0x3
+ 38495 a5a6 91       		.byte	0x91
+ 38496 a5a7 B049     		.sleb128 -6992
+ 38497 a5a9 32       		.uleb128 0x32
+ 38498 a5aa DD0D0000 		.long	0xddd
+ 38499 a5ae 03       		.byte	0x3
+ 38500 a5af 91       		.byte	0x91
+ 38501 a5b0 C049     		.sleb128 -6976
+ 38502 a5b2 00       		.byte	0x0
+ 38503 a5b3 00       		.byte	0x0
+ 38504 a5b4 00       		.byte	0x0
+ 38505 a5b5 00       		.byte	0x0
+ 38506 a5b6 31       		.uleb128 0x31
+ 38507 a5b7 210F0000 		.long	0xf21
+ 38508 a5bb 00000000 		.quad	.LBB3344
+ 38508      00000000 
+ 38509 a5c3 00000000 		.quad	.LBE3344
+ 38509      00000000 
+ 38510 a5cb 02       		.byte	0x2
+ 38511 a5cc 2006     		.value	0x620
+ 38512 a5ce 53A60000 		.long	0xa653
+ 38513 a5d2 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 984
+
+
+ 38514 a5d3 330F0000 		.long	0xf33
+ 38515 a5d7 03       		.byte	0x3
+ 38516 a5d8 91       		.byte	0x91
+ 38517 a5d9 D049     		.sleb128 -6960
+ 38518 a5db 33       		.uleb128 0x33
+ 38519 a5dc 00000000 		.quad	.LBB3345
+ 38519      00000000 
+ 38520 a5e4 00000000 		.quad	.LBE3345
+ 38520      00000000 
+ 38521 a5ec 34       		.uleb128 0x34
+ 38522 a5ed 3F0F0000 		.long	0xf3f
+ 38523 a5f1 09       		.byte	0x9
+ 38524 a5f2 03       		.byte	0x3
+ 38525 a5f3 00000000 		.quad	mask.7943
+ 38525      00000000 
+ 38526 a5fb 35       		.uleb128 0x35
+ 38527 a5fc A00D0000 		.long	0xda0
+ 38528 a600 00000000 		.quad	.LBB3346
+ 38528      00000000 
+ 38529 a608 00000000 		.quad	.LBE3346
+ 38529      00000000 
+ 38530 a610 02       		.byte	0x2
+ 38531 a611 FE04     		.value	0x4fe
+ 38532 a613 32       		.uleb128 0x32
+ 38533 a614 BE0D0000 		.long	0xdbe
+ 38534 a618 03       		.byte	0x3
+ 38535 a619 91       		.byte	0x91
+ 38536 a61a E049     		.sleb128 -6944
+ 38537 a61c 32       		.uleb128 0x32
+ 38538 a61d B20D0000 		.long	0xdb2
+ 38539 a621 03       		.byte	0x3
+ 38540 a622 91       		.byte	0x91
+ 38541 a623 F049     		.sleb128 -6928
+ 38542 a625 35       		.uleb128 0x35
+ 38543 a626 CB0D0000 		.long	0xdcb
+ 38544 a62a 00000000 		.quad	.LBB3348
+ 38544      00000000 
+ 38545 a632 00000000 		.quad	.LBE3348
+ 38545      00000000 
+ 38546 a63a 02       		.byte	0x2
+ 38547 a63b 7501     		.value	0x175
+ 38548 a63d 32       		.uleb128 0x32
+ 38549 a63e E90D0000 		.long	0xde9
+ 38550 a642 03       		.byte	0x3
+ 38551 a643 91       		.byte	0x91
+ 38552 a644 804A     		.sleb128 -6912
+ 38553 a646 32       		.uleb128 0x32
+ 38554 a647 DD0D0000 		.long	0xddd
+ 38555 a64b 03       		.byte	0x3
+ 38556 a64c 91       		.byte	0x91
+ 38557 a64d 904A     		.sleb128 -6896
+ 38558 a64f 00       		.byte	0x0
+ 38559 a650 00       		.byte	0x0
+ 38560 a651 00       		.byte	0x0
+ 38561 a652 00       		.byte	0x0
+ 38562 a653 35       		.uleb128 0x35
+ 38563 a654 210F0000 		.long	0xf21
+
GAS LISTING /tmp/ccjbMjHD.s 			page 985
+
+
+ 38564 a658 00000000 		.quad	.LBB3350
+ 38564      00000000 
+ 38565 a660 00000000 		.quad	.LBE3350
+ 38565      00000000 
+ 38566 a668 02       		.byte	0x2
+ 38567 a669 2106     		.value	0x621
+ 38568 a66b 32       		.uleb128 0x32
+ 38569 a66c 330F0000 		.long	0xf33
+ 38570 a670 03       		.byte	0x3
+ 38571 a671 91       		.byte	0x91
+ 38572 a672 A04A     		.sleb128 -6880
+ 38573 a674 33       		.uleb128 0x33
+ 38574 a675 00000000 		.quad	.LBB3351
+ 38574      00000000 
+ 38575 a67d 00000000 		.quad	.LBE3351
+ 38575      00000000 
+ 38576 a685 34       		.uleb128 0x34
+ 38577 a686 3F0F0000 		.long	0xf3f
+ 38578 a68a 09       		.byte	0x9
+ 38579 a68b 03       		.byte	0x3
+ 38580 a68c 00000000 		.quad	mask.7943
+ 38580      00000000 
+ 38581 a694 35       		.uleb128 0x35
+ 38582 a695 A00D0000 		.long	0xda0
+ 38583 a699 00000000 		.quad	.LBB3352
+ 38583      00000000 
+ 38584 a6a1 00000000 		.quad	.LBE3352
+ 38584      00000000 
+ 38585 a6a9 02       		.byte	0x2
+ 38586 a6aa FE04     		.value	0x4fe
+ 38587 a6ac 32       		.uleb128 0x32
+ 38588 a6ad BE0D0000 		.long	0xdbe
+ 38589 a6b1 03       		.byte	0x3
+ 38590 a6b2 91       		.byte	0x91
+ 38591 a6b3 B04A     		.sleb128 -6864
+ 38592 a6b5 32       		.uleb128 0x32
+ 38593 a6b6 B20D0000 		.long	0xdb2
+ 38594 a6ba 03       		.byte	0x3
+ 38595 a6bb 91       		.byte	0x91
+ 38596 a6bc C04A     		.sleb128 -6848
+ 38597 a6be 35       		.uleb128 0x35
+ 38598 a6bf CB0D0000 		.long	0xdcb
+ 38599 a6c3 00000000 		.quad	.LBB3354
+ 38599      00000000 
+ 38600 a6cb 00000000 		.quad	.LBE3354
+ 38600      00000000 
+ 38601 a6d3 02       		.byte	0x2
+ 38602 a6d4 7501     		.value	0x175
+ 38603 a6d6 32       		.uleb128 0x32
+ 38604 a6d7 E90D0000 		.long	0xde9
+ 38605 a6db 03       		.byte	0x3
+ 38606 a6dc 91       		.byte	0x91
+ 38607 a6dd D04A     		.sleb128 -6832
+ 38608 a6df 32       		.uleb128 0x32
+ 38609 a6e0 DD0D0000 		.long	0xddd
+ 38610 a6e4 03       		.byte	0x3
+ 38611 a6e5 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 986
+
+
+ 38612 a6e6 E04A     		.sleb128 -6816
+ 38613 a6e8 00       		.byte	0x0
+ 38614 a6e9 00       		.byte	0x0
+ 38615 a6ea 00       		.byte	0x0
+ 38616 a6eb 00       		.byte	0x0
+ 38617 a6ec 00       		.byte	0x0
+ 38618 a6ed 00       		.byte	0x0
+ 38619 a6ee 31       		.uleb128 0x31
+ 38620 a6ef 860E0000 		.long	0xe86
+ 38621 a6f3 00000000 		.quad	.LBB3356
+ 38621      00000000 
+ 38622 a6fb 00000000 		.quad	.LBE3356
+ 38622      00000000 
+ 38623 a703 02       		.byte	0x2
+ 38624 a704 8807     		.value	0x788
+ 38625 a706 1DA70000 		.long	0xa71d
+ 38626 a70a 32       		.uleb128 0x32
+ 38627 a70b A10E0000 		.long	0xea1
+ 38628 a70f 03       		.byte	0x3
+ 38629 a710 91       		.byte	0x91
+ 38630 a711 F04A     		.sleb128 -6800
+ 38631 a713 32       		.uleb128 0x32
+ 38632 a714 970E0000 		.long	0xe97
+ 38633 a718 03       		.byte	0x3
+ 38634 a719 91       		.byte	0x91
+ 38635 a71a 804B     		.sleb128 -6784
+ 38636 a71c 00       		.byte	0x0
+ 38637 a71d 31       		.uleb128 0x31
+ 38638 a71e 8F940000 		.long	0x948f
+ 38639 a722 00000000 		.quad	.LBB3358
+ 38639      00000000 
+ 38640 a72a 00000000 		.quad	.LBE3358
+ 38640      00000000 
+ 38641 a732 02       		.byte	0x2
+ 38642 a733 8907     		.value	0x789
+ 38643 a735 AFA70000 		.long	0xa7af
+ 38644 a739 32       		.uleb128 0x32
+ 38645 a73a A1940000 		.long	0x94a1
+ 38646 a73e 03       		.byte	0x3
+ 38647 a73f 91       		.byte	0x91
+ 38648 a740 904B     		.sleb128 -6768
+ 38649 a742 33       		.uleb128 0x33
+ 38650 a743 00000000 		.quad	.LBB3359
+ 38650      00000000 
+ 38651 a74b 00000000 		.quad	.LBE3359
+ 38651      00000000 
+ 38652 a753 34       		.uleb128 0x34
+ 38653 a754 AD940000 		.long	0x94ad
+ 38654 a758 04       		.byte	0x4
+ 38655 a759 91       		.byte	0x91
+ 38656 a75a C0B47F   		.sleb128 -9664
+ 38657 a75d 34       		.uleb128 0x34
+ 38658 a75e B7940000 		.long	0x94b7
+ 38659 a762 03       		.byte	0x3
+ 38660 a763 91       		.byte	0x91
+ 38661 a764 A44B     		.sleb128 -6748
+ 38662 a766 35       		.uleb128 0x35
+
GAS LISTING /tmp/ccjbMjHD.s 			page 987
+
+
+ 38663 a767 BE560000 		.long	0x56be
+ 38664 a76b 00000000 		.quad	.LBB3360
+ 38664      00000000 
+ 38665 a773 00000000 		.quad	.LBE3360
+ 38665      00000000 
+ 38666 a77b 02       		.byte	0x2
+ 38667 a77c 7906     		.value	0x679
+ 38668 a77e 32       		.uleb128 0x32
+ 38669 a77f D0560000 		.long	0x56d0
+ 38670 a783 03       		.byte	0x3
+ 38671 a784 91       		.byte	0x91
+ 38672 a785 A84B     		.sleb128 -6744
+ 38673 a787 33       		.uleb128 0x33
+ 38674 a788 00000000 		.quad	.LBB3361
+ 38674      00000000 
+ 38675 a790 00000000 		.quad	.LBE3361
+ 38675      00000000 
+ 38676 a798 34       		.uleb128 0x34
+ 38677 a799 DA560000 		.long	0x56da
+ 38678 a79d 04       		.byte	0x4
+ 38679 a79e 91       		.byte	0x91
+ 38680 a79f B0B47F   		.sleb128 -9680
+ 38681 a7a2 34       		.uleb128 0x34
+ 38682 a7a3 E6560000 		.long	0x56e6
+ 38683 a7a7 03       		.byte	0x3
+ 38684 a7a8 91       		.byte	0x91
+ 38685 a7a9 AC4B     		.sleb128 -6740
+ 38686 a7ab 00       		.byte	0x0
+ 38687 a7ac 00       		.byte	0x0
+ 38688 a7ad 00       		.byte	0x0
+ 38689 a7ae 00       		.byte	0x0
+ 38690 a7af 31       		.uleb128 0x31
+ 38691 a7b0 F60E0000 		.long	0xef6
+ 38692 a7b4 00000000 		.quad	.LBB3362
+ 38692      00000000 
+ 38693 a7bc 00000000 		.quad	.LBE3362
+ 38693      00000000 
+ 38694 a7c4 02       		.byte	0x2
+ 38695 a7c5 8907     		.value	0x789
+ 38696 a7c7 C4A90000 		.long	0xa9c4
+ 38697 a7cb 32       		.uleb128 0x32
+ 38698 a7cc 080F0000 		.long	0xf08
+ 38699 a7d0 03       		.byte	0x3
+ 38700 a7d1 91       		.byte	0x91
+ 38701 a7d2 B04B     		.sleb128 -6736
+ 38702 a7d4 33       		.uleb128 0x33
+ 38703 a7d5 00000000 		.quad	.LBB3363
+ 38703      00000000 
+ 38704 a7dd 00000000 		.quad	.LBE3363
+ 38704      00000000 
+ 38705 a7e5 34       		.uleb128 0x34
+ 38706 a7e6 140F0000 		.long	0xf14
+ 38707 a7ea 04       		.byte	0x4
+ 38708 a7eb 76       		.byte	0x76
+ 38709 a7ec D0B07F   		.sleb128 -10160
+ 38710 a7ef 31       		.uleb128 0x31
+ 38711 a7f0 210F0000 		.long	0xf21
+
GAS LISTING /tmp/ccjbMjHD.s 			page 988
+
+
+ 38712 a7f4 00000000 		.quad	.LBB3364
+ 38712      00000000 
+ 38713 a7fc 00000000 		.quad	.LBE3364
+ 38713      00000000 
+ 38714 a804 02       		.byte	0x2
+ 38715 a805 1F06     		.value	0x61f
+ 38716 a807 8CA80000 		.long	0xa88c
+ 38717 a80b 32       		.uleb128 0x32
+ 38718 a80c 330F0000 		.long	0xf33
+ 38719 a810 03       		.byte	0x3
+ 38720 a811 91       		.byte	0x91
+ 38721 a812 C04B     		.sleb128 -6720
+ 38722 a814 33       		.uleb128 0x33
+ 38723 a815 00000000 		.quad	.LBB3365
+ 38723      00000000 
+ 38724 a81d 00000000 		.quad	.LBE3365
+ 38724      00000000 
+ 38725 a825 34       		.uleb128 0x34
+ 38726 a826 3F0F0000 		.long	0xf3f
+ 38727 a82a 09       		.byte	0x9
+ 38728 a82b 03       		.byte	0x3
+ 38729 a82c 00000000 		.quad	mask.7943
+ 38729      00000000 
+ 38730 a834 35       		.uleb128 0x35
+ 38731 a835 A00D0000 		.long	0xda0
+ 38732 a839 00000000 		.quad	.LBB3366
+ 38732      00000000 
+ 38733 a841 00000000 		.quad	.LBE3366
+ 38733      00000000 
+ 38734 a849 02       		.byte	0x2
+ 38735 a84a FE04     		.value	0x4fe
+ 38736 a84c 32       		.uleb128 0x32
+ 38737 a84d BE0D0000 		.long	0xdbe
+ 38738 a851 03       		.byte	0x3
+ 38739 a852 91       		.byte	0x91
+ 38740 a853 D04B     		.sleb128 -6704
+ 38741 a855 32       		.uleb128 0x32
+ 38742 a856 B20D0000 		.long	0xdb2
+ 38743 a85a 03       		.byte	0x3
+ 38744 a85b 91       		.byte	0x91
+ 38745 a85c E04B     		.sleb128 -6688
+ 38746 a85e 35       		.uleb128 0x35
+ 38747 a85f CB0D0000 		.long	0xdcb
+ 38748 a863 00000000 		.quad	.LBB3368
+ 38748      00000000 
+ 38749 a86b 00000000 		.quad	.LBE3368
+ 38749      00000000 
+ 38750 a873 02       		.byte	0x2
+ 38751 a874 7501     		.value	0x175
+ 38752 a876 32       		.uleb128 0x32
+ 38753 a877 E90D0000 		.long	0xde9
+ 38754 a87b 03       		.byte	0x3
+ 38755 a87c 91       		.byte	0x91
+ 38756 a87d F04B     		.sleb128 -6672
+ 38757 a87f 32       		.uleb128 0x32
+ 38758 a880 DD0D0000 		.long	0xddd
+ 38759 a884 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 989
+
+
+ 38760 a885 91       		.byte	0x91
+ 38761 a886 804C     		.sleb128 -6656
+ 38762 a888 00       		.byte	0x0
+ 38763 a889 00       		.byte	0x0
+ 38764 a88a 00       		.byte	0x0
+ 38765 a88b 00       		.byte	0x0
+ 38766 a88c 31       		.uleb128 0x31
+ 38767 a88d 210F0000 		.long	0xf21
+ 38768 a891 00000000 		.quad	.LBB3370
+ 38768      00000000 
+ 38769 a899 00000000 		.quad	.LBE3370
+ 38769      00000000 
+ 38770 a8a1 02       		.byte	0x2
+ 38771 a8a2 2006     		.value	0x620
+ 38772 a8a4 29A90000 		.long	0xa929
+ 38773 a8a8 32       		.uleb128 0x32
+ 38774 a8a9 330F0000 		.long	0xf33
+ 38775 a8ad 03       		.byte	0x3
+ 38776 a8ae 91       		.byte	0x91
+ 38777 a8af 904C     		.sleb128 -6640
+ 38778 a8b1 33       		.uleb128 0x33
+ 38779 a8b2 00000000 		.quad	.LBB3371
+ 38779      00000000 
+ 38780 a8ba 00000000 		.quad	.LBE3371
+ 38780      00000000 
+ 38781 a8c2 34       		.uleb128 0x34
+ 38782 a8c3 3F0F0000 		.long	0xf3f
+ 38783 a8c7 09       		.byte	0x9
+ 38784 a8c8 03       		.byte	0x3
+ 38785 a8c9 00000000 		.quad	mask.7943
+ 38785      00000000 
+ 38786 a8d1 35       		.uleb128 0x35
+ 38787 a8d2 A00D0000 		.long	0xda0
+ 38788 a8d6 00000000 		.quad	.LBB3372
+ 38788      00000000 
+ 38789 a8de 00000000 		.quad	.LBE3372
+ 38789      00000000 
+ 38790 a8e6 02       		.byte	0x2
+ 38791 a8e7 FE04     		.value	0x4fe
+ 38792 a8e9 32       		.uleb128 0x32
+ 38793 a8ea BE0D0000 		.long	0xdbe
+ 38794 a8ee 03       		.byte	0x3
+ 38795 a8ef 91       		.byte	0x91
+ 38796 a8f0 A04C     		.sleb128 -6624
+ 38797 a8f2 32       		.uleb128 0x32
+ 38798 a8f3 B20D0000 		.long	0xdb2
+ 38799 a8f7 03       		.byte	0x3
+ 38800 a8f8 91       		.byte	0x91
+ 38801 a8f9 B04C     		.sleb128 -6608
+ 38802 a8fb 35       		.uleb128 0x35
+ 38803 a8fc CB0D0000 		.long	0xdcb
+ 38804 a900 00000000 		.quad	.LBB3374
+ 38804      00000000 
+ 38805 a908 00000000 		.quad	.LBE3374
+ 38805      00000000 
+ 38806 a910 02       		.byte	0x2
+ 38807 a911 7501     		.value	0x175
+
GAS LISTING /tmp/ccjbMjHD.s 			page 990
+
+
+ 38808 a913 32       		.uleb128 0x32
+ 38809 a914 E90D0000 		.long	0xde9
+ 38810 a918 03       		.byte	0x3
+ 38811 a919 91       		.byte	0x91
+ 38812 a91a C04C     		.sleb128 -6592
+ 38813 a91c 32       		.uleb128 0x32
+ 38814 a91d DD0D0000 		.long	0xddd
+ 38815 a921 03       		.byte	0x3
+ 38816 a922 91       		.byte	0x91
+ 38817 a923 D04C     		.sleb128 -6576
+ 38818 a925 00       		.byte	0x0
+ 38819 a926 00       		.byte	0x0
+ 38820 a927 00       		.byte	0x0
+ 38821 a928 00       		.byte	0x0
+ 38822 a929 35       		.uleb128 0x35
+ 38823 a92a 210F0000 		.long	0xf21
+ 38824 a92e 00000000 		.quad	.LBB3376
+ 38824      00000000 
+ 38825 a936 00000000 		.quad	.LBE3376
+ 38825      00000000 
+ 38826 a93e 02       		.byte	0x2
+ 38827 a93f 2106     		.value	0x621
+ 38828 a941 32       		.uleb128 0x32
+ 38829 a942 330F0000 		.long	0xf33
+ 38830 a946 03       		.byte	0x3
+ 38831 a947 91       		.byte	0x91
+ 38832 a948 E04C     		.sleb128 -6560
+ 38833 a94a 33       		.uleb128 0x33
+ 38834 a94b 00000000 		.quad	.LBB3377
+ 38834      00000000 
+ 38835 a953 00000000 		.quad	.LBE3377
+ 38835      00000000 
+ 38836 a95b 34       		.uleb128 0x34
+ 38837 a95c 3F0F0000 		.long	0xf3f
+ 38838 a960 09       		.byte	0x9
+ 38839 a961 03       		.byte	0x3
+ 38840 a962 00000000 		.quad	mask.7943
+ 38840      00000000 
+ 38841 a96a 35       		.uleb128 0x35
+ 38842 a96b A00D0000 		.long	0xda0
+ 38843 a96f 00000000 		.quad	.LBB3378
+ 38843      00000000 
+ 38844 a977 00000000 		.quad	.LBE3378
+ 38844      00000000 
+ 38845 a97f 02       		.byte	0x2
+ 38846 a980 FE04     		.value	0x4fe
+ 38847 a982 32       		.uleb128 0x32
+ 38848 a983 BE0D0000 		.long	0xdbe
+ 38849 a987 03       		.byte	0x3
+ 38850 a988 91       		.byte	0x91
+ 38851 a989 F04C     		.sleb128 -6544
+ 38852 a98b 32       		.uleb128 0x32
+ 38853 a98c B20D0000 		.long	0xdb2
+ 38854 a990 03       		.byte	0x3
+ 38855 a991 91       		.byte	0x91
+ 38856 a992 804D     		.sleb128 -6528
+ 38857 a994 35       		.uleb128 0x35
+
GAS LISTING /tmp/ccjbMjHD.s 			page 991
+
+
+ 38858 a995 CB0D0000 		.long	0xdcb
+ 38859 a999 00000000 		.quad	.LBB3380
+ 38859      00000000 
+ 38860 a9a1 00000000 		.quad	.LBE3380
+ 38860      00000000 
+ 38861 a9a9 02       		.byte	0x2
+ 38862 a9aa 7501     		.value	0x175
+ 38863 a9ac 32       		.uleb128 0x32
+ 38864 a9ad E90D0000 		.long	0xde9
+ 38865 a9b1 03       		.byte	0x3
+ 38866 a9b2 91       		.byte	0x91
+ 38867 a9b3 904D     		.sleb128 -6512
+ 38868 a9b5 32       		.uleb128 0x32
+ 38869 a9b6 DD0D0000 		.long	0xddd
+ 38870 a9ba 03       		.byte	0x3
+ 38871 a9bb 91       		.byte	0x91
+ 38872 a9bc A04D     		.sleb128 -6496
+ 38873 a9be 00       		.byte	0x0
+ 38874 a9bf 00       		.byte	0x0
+ 38875 a9c0 00       		.byte	0x0
+ 38876 a9c1 00       		.byte	0x0
+ 38877 a9c2 00       		.byte	0x0
+ 38878 a9c3 00       		.byte	0x0
+ 38879 a9c4 31       		.uleb128 0x31
+ 38880 a9c5 860E0000 		.long	0xe86
+ 38881 a9c9 00000000 		.quad	.LBB3382
+ 38881      00000000 
+ 38882 a9d1 00000000 		.quad	.LBE3382
+ 38882      00000000 
+ 38883 a9d9 02       		.byte	0x2
+ 38884 a9da 8907     		.value	0x789
+ 38885 a9dc F3A90000 		.long	0xa9f3
+ 38886 a9e0 32       		.uleb128 0x32
+ 38887 a9e1 A10E0000 		.long	0xea1
+ 38888 a9e5 03       		.byte	0x3
+ 38889 a9e6 91       		.byte	0x91
+ 38890 a9e7 B04D     		.sleb128 -6480
+ 38891 a9e9 32       		.uleb128 0x32
+ 38892 a9ea 970E0000 		.long	0xe97
+ 38893 a9ee 03       		.byte	0x3
+ 38894 a9ef 91       		.byte	0x91
+ 38895 a9f0 C04D     		.sleb128 -6464
+ 38896 a9f2 00       		.byte	0x0
+ 38897 a9f3 31       		.uleb128 0x31
+ 38898 a9f4 D50B0000 		.long	0xbd5
+ 38899 a9f8 00000000 		.quad	.LBB3384
+ 38899      00000000 
+ 38900 aa00 00000000 		.quad	.LBE3384
+ 38900      00000000 
+ 38901 aa08 02       		.byte	0x2
+ 38902 aa09 8A07     		.value	0x78a
+ 38903 aa0b D6AE0000 		.long	0xaed6
+ 38904 aa0f 32       		.uleb128 0x32
+ 38905 aa10 F30B0000 		.long	0xbf3
+ 38906 aa14 03       		.byte	0x3
+ 38907 aa15 91       		.byte	0x91
+ 38908 aa16 DC4D     		.sleb128 -6436
+
GAS LISTING /tmp/ccjbMjHD.s 			page 992
+
+
+ 38909 aa18 32       		.uleb128 0x32
+ 38910 aa19 E70B0000 		.long	0xbe7
+ 38911 aa1d 03       		.byte	0x3
+ 38912 aa1e 91       		.byte	0x91
+ 38913 aa1f E04D     		.sleb128 -6432
+ 38914 aa21 33       		.uleb128 0x33
+ 38915 aa22 00000000 		.quad	.LBB3385
+ 38915      00000000 
+ 38916 aa2a 00000000 		.quad	.LBE3385
+ 38916      00000000 
+ 38917 aa32 34       		.uleb128 0x34
+ 38918 aa33 FF0B0000 		.long	0xbff
+ 38919 aa37 04       		.byte	0x4
+ 38920 aa38 76       		.byte	0x76
+ 38921 aa39 F0B07F   		.sleb128 -10128
+ 38922 aa3c 34       		.uleb128 0x34
+ 38923 aa3d 0B0C0000 		.long	0xc0b
+ 38924 aa41 04       		.byte	0x4
+ 38925 aa42 76       		.byte	0x76
+ 38926 aa43 E0B07F   		.sleb128 -10144
+ 38927 aa46 31       		.uleb128 0x31
+ 38928 aa47 540C0000 		.long	0xc54
+ 38929 aa4b 00000000 		.quad	.LBB3386
+ 38929      00000000 
+ 38930 aa53 00000000 		.quad	.LBE3386
+ 38930      00000000 
+ 38931 aa5b 02       		.byte	0x2
+ 38932 aa5c 9106     		.value	0x691
+ 38933 aa5e B2AA0000 		.long	0xaab2
+ 38934 aa62 32       		.uleb128 0x32
+ 38935 aa63 7E0C0000 		.long	0xc7e
+ 38936 aa67 03       		.byte	0x3
+ 38937 aa68 91       		.byte	0x91
+ 38938 aa69 F84D     		.sleb128 -6408
+ 38939 aa6b 32       		.uleb128 0x32
+ 38940 aa6c 720C0000 		.long	0xc72
+ 38941 aa70 03       		.byte	0x3
+ 38942 aa71 91       		.byte	0x91
+ 38943 aa72 FC4D     		.sleb128 -6404
+ 38944 aa74 32       		.uleb128 0x32
+ 38945 aa75 660C0000 		.long	0xc66
+ 38946 aa79 03       		.byte	0x3
+ 38947 aa7a 91       		.byte	0x91
+ 38948 aa7b 804E     		.sleb128 -6400
+ 38949 aa7d 35       		.uleb128 0x35
+ 38950 aa7e 8B0C0000 		.long	0xc8b
+ 38951 aa82 00000000 		.quad	.LBB3388
+ 38951      00000000 
+ 38952 aa8a 00000000 		.quad	.LBE3388
+ 38952      00000000 
+ 38953 aa92 02       		.byte	0x2
+ 38954 aa93 0702     		.value	0x207
+ 38955 aa95 32       		.uleb128 0x32
+ 38956 aa96 B40C0000 		.long	0xcb4
+ 38957 aa9a 03       		.byte	0x3
+ 38958 aa9b 91       		.byte	0x91
+ 38959 aa9c 984E     		.sleb128 -6376
+
GAS LISTING /tmp/ccjbMjHD.s 			page 993
+
+
+ 38960 aa9e 32       		.uleb128 0x32
+ 38961 aa9f A90C0000 		.long	0xca9
+ 38962 aaa3 03       		.byte	0x3
+ 38963 aaa4 91       		.byte	0x91
+ 38964 aaa5 9C4E     		.sleb128 -6372
+ 38965 aaa7 32       		.uleb128 0x32
+ 38966 aaa8 9D0C0000 		.long	0xc9d
+ 38967 aaac 03       		.byte	0x3
+ 38968 aaad 91       		.byte	0x91
+ 38969 aaae A04E     		.sleb128 -6368
+ 38970 aab0 00       		.byte	0x0
+ 38971 aab1 00       		.byte	0x0
+ 38972 aab2 31       		.uleb128 0x31
+ 38973 aab3 C10C0000 		.long	0xcc1
+ 38974 aab7 00000000 		.quad	.LBB3390
+ 38974      00000000 
+ 38975 aabf 00000000 		.quad	.LBE3390
+ 38975      00000000 
+ 38976 aac7 02       		.byte	0x2
+ 38977 aac8 9206     		.value	0x692
+ 38978 aaca 3BAD0000 		.long	0xad3b
+ 38979 aace 32       		.uleb128 0x32
+ 38980 aacf D30C0000 		.long	0xcd3
+ 38981 aad3 03       		.byte	0x3
+ 38982 aad4 91       		.byte	0x91
+ 38983 aad5 B04E     		.sleb128 -6352
+ 38984 aad7 35       		.uleb128 0x35
+ 38985 aad8 E00C0000 		.long	0xce0
+ 38986 aadc 00000000 		.quad	.LBB3392
+ 38986      00000000 
+ 38987 aae4 00000000 		.quad	.LBE3392
+ 38987      00000000 
+ 38988 aaec 02       		.byte	0x2
+ 38989 aaed 7D03     		.value	0x37d
+ 38990 aaef 32       		.uleb128 0x32
+ 38991 aaf0 FE0C0000 		.long	0xcfe
+ 38992 aaf4 03       		.byte	0x3
+ 38993 aaf5 91       		.byte	0x91
+ 38994 aaf6 C84E     		.sleb128 -6328
+ 38995 aaf8 32       		.uleb128 0x32
+ 38996 aaf9 F20C0000 		.long	0xcf2
+ 38997 aafd 03       		.byte	0x3
+ 38998 aafe 91       		.byte	0x91
+ 38999 aaff D04E     		.sleb128 -6320
+ 39000 ab01 33       		.uleb128 0x33
+ 39001 ab02 00000000 		.quad	.LBB3393
+ 39001      00000000 
+ 39002 ab0a 00000000 		.quad	.LBE3393
+ 39002      00000000 
+ 39003 ab12 34       		.uleb128 0x34
+ 39004 ab13 0A0D0000 		.long	0xd0a
+ 39005 ab17 03       		.byte	0x3
+ 39006 ab18 91       		.byte	0x91
+ 39007 ab19 A04F     		.sleb128 -6240
+ 39008 ab1b 34       		.uleb128 0x34
+ 39009 ab1c 150D0000 		.long	0xd15
+ 39010 ab20 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 994
+
+
+ 39011 ab21 91       		.byte	0x91
+ 39012 ab22 904F     		.sleb128 -6256
+ 39013 ab24 34       		.uleb128 0x34
+ 39014 ab25 200D0000 		.long	0xd20
+ 39015 ab29 03       		.byte	0x3
+ 39016 ab2a 91       		.byte	0x91
+ 39017 ab2b 804F     		.sleb128 -6272
+ 39018 ab2d 34       		.uleb128 0x34
+ 39019 ab2e 2C0D0000 		.long	0xd2c
+ 39020 ab32 03       		.byte	0x3
+ 39021 ab33 91       		.byte	0x91
+ 39022 ab34 F04E     		.sleb128 -6288
+ 39023 ab36 34       		.uleb128 0x34
+ 39024 ab37 380D0000 		.long	0xd38
+ 39025 ab3b 03       		.byte	0x3
+ 39026 ab3c 91       		.byte	0x91
+ 39027 ab3d EC4E     		.sleb128 -6292
+ 39028 ab3f 31       		.uleb128 0x31
+ 39029 ab40 4F0D0000 		.long	0xd4f
+ 39030 ab44 00000000 		.quad	.LBB3394
+ 39030      00000000 
+ 39031 ab4c 00000000 		.quad	.LBE3394
+ 39031      00000000 
+ 39032 ab54 02       		.byte	0x2
+ 39033 ab55 5603     		.value	0x356
+ 39034 ab57 6EAB0000 		.long	0xab6e
+ 39035 ab5b 32       		.uleb128 0x32
+ 39036 ab5c 6A0D0000 		.long	0xd6a
+ 39037 ab60 03       		.byte	0x3
+ 39038 ab61 91       		.byte	0x91
+ 39039 ab62 B04F     		.sleb128 -6224
+ 39040 ab64 32       		.uleb128 0x32
+ 39041 ab65 600D0000 		.long	0xd60
+ 39042 ab69 03       		.byte	0x3
+ 39043 ab6a 91       		.byte	0x91
+ 39044 ab6b C04F     		.sleb128 -6208
+ 39045 ab6d 00       		.byte	0x0
+ 39046 ab6e 31       		.uleb128 0x31
+ 39047 ab6f 750D0000 		.long	0xd75
+ 39048 ab73 00000000 		.quad	.LBB3396
+ 39048      00000000 
+ 39049 ab7b 00000000 		.quad	.LBE3396
+ 39049      00000000 
+ 39050 ab83 02       		.byte	0x2
+ 39051 ab84 5903     		.value	0x359
+ 39052 ab86 9DAB0000 		.long	0xab9d
+ 39053 ab8a 32       		.uleb128 0x32
+ 39054 ab8b 930D0000 		.long	0xd93
+ 39055 ab8f 03       		.byte	0x3
+ 39056 ab90 91       		.byte	0x91
+ 39057 ab91 DC4F     		.sleb128 -6180
+ 39058 ab93 32       		.uleb128 0x32
+ 39059 ab94 870D0000 		.long	0xd87
+ 39060 ab98 03       		.byte	0x3
+ 39061 ab99 91       		.byte	0x91
+ 39062 ab9a E04F     		.sleb128 -6176
+ 39063 ab9c 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 995
+
+
+ 39064 ab9d 31       		.uleb128 0x31
+ 39065 ab9e 4F0D0000 		.long	0xd4f
+ 39066 aba2 00000000 		.quad	.LBB3398
+ 39066      00000000 
+ 39067 abaa 00000000 		.quad	.LBE3398
+ 39067      00000000 
+ 39068 abb2 02       		.byte	0x2
+ 39069 abb3 5B03     		.value	0x35b
+ 39070 abb5 CCAB0000 		.long	0xabcc
+ 39071 abb9 32       		.uleb128 0x32
+ 39072 abba 6A0D0000 		.long	0xd6a
+ 39073 abbe 03       		.byte	0x3
+ 39074 abbf 91       		.byte	0x91
+ 39075 abc0 F04F     		.sleb128 -6160
+ 39076 abc2 32       		.uleb128 0x32
+ 39077 abc3 600D0000 		.long	0xd60
+ 39078 abc7 03       		.byte	0x3
+ 39079 abc8 91       		.byte	0x91
+ 39080 abc9 8050     		.sleb128 -6144
+ 39081 abcb 00       		.byte	0x0
+ 39082 abcc 31       		.uleb128 0x31
+ 39083 abcd A00D0000 		.long	0xda0
+ 39084 abd1 00000000 		.quad	.LBB3400
+ 39084      00000000 
+ 39085 abd9 00000000 		.quad	.LBE3400
+ 39085      00000000 
+ 39086 abe1 02       		.byte	0x2
+ 39087 abe2 6403     		.value	0x364
+ 39088 abe4 26AC0000 		.long	0xac26
+ 39089 abe8 32       		.uleb128 0x32
+ 39090 abe9 BE0D0000 		.long	0xdbe
+ 39091 abed 03       		.byte	0x3
+ 39092 abee 91       		.byte	0x91
+ 39093 abef 9050     		.sleb128 -6128
+ 39094 abf1 32       		.uleb128 0x32
+ 39095 abf2 B20D0000 		.long	0xdb2
+ 39096 abf6 03       		.byte	0x3
+ 39097 abf7 91       		.byte	0x91
+ 39098 abf8 A050     		.sleb128 -6112
+ 39099 abfa 35       		.uleb128 0x35
+ 39100 abfb CB0D0000 		.long	0xdcb
+ 39101 abff 00000000 		.quad	.LBB3402
+ 39101      00000000 
+ 39102 ac07 00000000 		.quad	.LBE3402
+ 39102      00000000 
+ 39103 ac0f 02       		.byte	0x2
+ 39104 ac10 7501     		.value	0x175
+ 39105 ac12 32       		.uleb128 0x32
+ 39106 ac13 E90D0000 		.long	0xde9
+ 39107 ac17 03       		.byte	0x3
+ 39108 ac18 91       		.byte	0x91
+ 39109 ac19 B050     		.sleb128 -6096
+ 39110 ac1b 32       		.uleb128 0x32
+ 39111 ac1c DD0D0000 		.long	0xddd
+ 39112 ac20 03       		.byte	0x3
+ 39113 ac21 91       		.byte	0x91
+ 39114 ac22 C050     		.sleb128 -6080
+
GAS LISTING /tmp/ccjbMjHD.s 			page 996
+
+
+ 39115 ac24 00       		.byte	0x0
+ 39116 ac25 00       		.byte	0x0
+ 39117 ac26 31       		.uleb128 0x31
+ 39118 ac27 FB0D0000 		.long	0xdfb
+ 39119 ac2b 00000000 		.quad	.LBB3404
+ 39119      00000000 
+ 39120 ac33 00000000 		.quad	.LBE3404
+ 39120      00000000 
+ 39121 ac3b 02       		.byte	0x2
+ 39122 ac3c 6603     		.value	0x366
+ 39123 ac3e 55AC0000 		.long	0xac55
+ 39124 ac42 32       		.uleb128 0x32
+ 39125 ac43 160E0000 		.long	0xe16
+ 39126 ac47 03       		.byte	0x3
+ 39127 ac48 91       		.byte	0x91
+ 39128 ac49 D050     		.sleb128 -6064
+ 39129 ac4b 32       		.uleb128 0x32
+ 39130 ac4c 0C0E0000 		.long	0xe0c
+ 39131 ac50 03       		.byte	0x3
+ 39132 ac51 91       		.byte	0x91
+ 39133 ac52 E050     		.sleb128 -6048
+ 39134 ac54 00       		.byte	0x0
+ 39135 ac55 31       		.uleb128 0x31
+ 39136 ac56 A00D0000 		.long	0xda0
+ 39137 ac5a 00000000 		.quad	.LBB3406
+ 39137      00000000 
+ 39138 ac62 00000000 		.quad	.LBE3406
+ 39138      00000000 
+ 39139 ac6a 02       		.byte	0x2
+ 39140 ac6b 6803     		.value	0x368
+ 39141 ac6d AFAC0000 		.long	0xacaf
+ 39142 ac71 32       		.uleb128 0x32
+ 39143 ac72 BE0D0000 		.long	0xdbe
+ 39144 ac76 03       		.byte	0x3
+ 39145 ac77 91       		.byte	0x91
+ 39146 ac78 F050     		.sleb128 -6032
+ 39147 ac7a 32       		.uleb128 0x32
+ 39148 ac7b B20D0000 		.long	0xdb2
+ 39149 ac7f 03       		.byte	0x3
+ 39150 ac80 91       		.byte	0x91
+ 39151 ac81 8051     		.sleb128 -6016
+ 39152 ac83 35       		.uleb128 0x35
+ 39153 ac84 CB0D0000 		.long	0xdcb
+ 39154 ac88 00000000 		.quad	.LBB3408
+ 39154      00000000 
+ 39155 ac90 00000000 		.quad	.LBE3408
+ 39155      00000000 
+ 39156 ac98 02       		.byte	0x2
+ 39157 ac99 7501     		.value	0x175
+ 39158 ac9b 32       		.uleb128 0x32
+ 39159 ac9c E90D0000 		.long	0xde9
+ 39160 aca0 03       		.byte	0x3
+ 39161 aca1 91       		.byte	0x91
+ 39162 aca2 9051     		.sleb128 -6000
+ 39163 aca4 32       		.uleb128 0x32
+ 39164 aca5 DD0D0000 		.long	0xddd
+ 39165 aca9 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 997
+
+
+ 39166 acaa 91       		.byte	0x91
+ 39167 acab A051     		.sleb128 -5984
+ 39168 acad 00       		.byte	0x0
+ 39169 acae 00       		.byte	0x0
+ 39170 acaf 31       		.uleb128 0x31
+ 39171 acb0 FB0D0000 		.long	0xdfb
+ 39172 acb4 00000000 		.quad	.LBB3410
+ 39172      00000000 
+ 39173 acbc 00000000 		.quad	.LBE3410
+ 39173      00000000 
+ 39174 acc4 02       		.byte	0x2
+ 39175 acc5 6A03     		.value	0x36a
+ 39176 acc7 DEAC0000 		.long	0xacde
+ 39177 accb 32       		.uleb128 0x32
+ 39178 accc 160E0000 		.long	0xe16
+ 39179 acd0 03       		.byte	0x3
+ 39180 acd1 91       		.byte	0x91
+ 39181 acd2 B051     		.sleb128 -5968
+ 39182 acd4 32       		.uleb128 0x32
+ 39183 acd5 0C0E0000 		.long	0xe0c
+ 39184 acd9 03       		.byte	0x3
+ 39185 acda 91       		.byte	0x91
+ 39186 acdb C051     		.sleb128 -5952
+ 39187 acdd 00       		.byte	0x0
+ 39188 acde 31       		.uleb128 0x31
+ 39189 acdf 210E0000 		.long	0xe21
+ 39190 ace3 00000000 		.quad	.LBB3412
+ 39190      00000000 
+ 39191 aceb 00000000 		.quad	.LBE3412
+ 39191      00000000 
+ 39192 acf3 02       		.byte	0x2
+ 39193 acf4 6C03     		.value	0x36c
+ 39194 acf6 0DAD0000 		.long	0xad0d
+ 39195 acfa 32       		.uleb128 0x32
+ 39196 acfb 3E0E0000 		.long	0xe3e
+ 39197 acff 03       		.byte	0x3
+ 39198 ad00 91       		.byte	0x91
+ 39199 ad01 D051     		.sleb128 -5936
+ 39200 ad03 32       		.uleb128 0x32
+ 39201 ad04 330E0000 		.long	0xe33
+ 39202 ad08 03       		.byte	0x3
+ 39203 ad09 91       		.byte	0x91
+ 39204 ad0a E051     		.sleb128 -5920
+ 39205 ad0c 00       		.byte	0x0
+ 39206 ad0d 35       		.uleb128 0x35
+ 39207 ad0e 4F0D0000 		.long	0xd4f
+ 39208 ad12 00000000 		.quad	.LBB3414
+ 39208      00000000 
+ 39209 ad1a 00000000 		.quad	.LBE3414
+ 39209      00000000 
+ 39210 ad22 02       		.byte	0x2
+ 39211 ad23 6E03     		.value	0x36e
+ 39212 ad25 32       		.uleb128 0x32
+ 39213 ad26 6A0D0000 		.long	0xd6a
+ 39214 ad2a 03       		.byte	0x3
+ 39215 ad2b 91       		.byte	0x91
+ 39216 ad2c F051     		.sleb128 -5904
+
GAS LISTING /tmp/ccjbMjHD.s 			page 998
+
+
+ 39217 ad2e 32       		.uleb128 0x32
+ 39218 ad2f 600D0000 		.long	0xd60
+ 39219 ad33 03       		.byte	0x3
+ 39220 ad34 91       		.byte	0x91
+ 39221 ad35 8052     		.sleb128 -5888
+ 39222 ad37 00       		.byte	0x0
+ 39223 ad38 00       		.byte	0x0
+ 39224 ad39 00       		.byte	0x0
+ 39225 ad3a 00       		.byte	0x0
+ 39226 ad3b 36       		.uleb128 0x36
+ 39227 ad3c 00000000 		.quad	.LBB3416
+ 39227      00000000 
+ 39228 ad44 00000000 		.quad	.LBE3416
+ 39228      00000000 
+ 39229 ad4c 5BAD0000 		.long	0xad5b
+ 39230 ad50 34       		.uleb128 0x34
+ 39231 ad51 1C0C0000 		.long	0xc1c
+ 39232 ad55 04       		.byte	0x4
+ 39233 ad56 91       		.byte	0x91
+ 39234 ad57 80B57F   		.sleb128 -9600
+ 39235 ad5a 00       		.byte	0x0
+ 39236 ad5b 31       		.uleb128 0x31
+ 39237 ad5c 4A0E0000 		.long	0xe4a
+ 39238 ad60 00000000 		.quad	.LBB3417
+ 39238      00000000 
+ 39239 ad68 00000000 		.quad	.LBE3417
+ 39239      00000000 
+ 39240 ad70 02       		.byte	0x2
+ 39241 ad71 9406     		.value	0x694
+ 39242 ad73 F8AD0000 		.long	0xadf8
+ 39243 ad77 32       		.uleb128 0x32
+ 39244 ad78 5C0E0000 		.long	0xe5c
+ 39245 ad7c 03       		.byte	0x3
+ 39246 ad7d 91       		.byte	0x91
+ 39247 ad7e 9052     		.sleb128 -5872
+ 39248 ad80 33       		.uleb128 0x33
+ 39249 ad81 00000000 		.quad	.LBB3418
+ 39249      00000000 
+ 39250 ad89 00000000 		.quad	.LBE3418
+ 39250      00000000 
+ 39251 ad91 34       		.uleb128 0x34
+ 39252 ad92 680E0000 		.long	0xe68
+ 39253 ad96 09       		.byte	0x9
+ 39254 ad97 03       		.byte	0x3
+ 39255 ad98 00000000 		.quad	ShiftRowTable.7385
+ 39255      00000000 
+ 39256 ada0 35       		.uleb128 0x35
+ 39257 ada1 A00D0000 		.long	0xda0
+ 39258 ada5 00000000 		.quad	.LBB3419
+ 39258      00000000 
+ 39259 adad 00000000 		.quad	.LBE3419
+ 39259      00000000 
+ 39260 adb5 02       		.byte	0x2
+ 39261 adb6 9B02     		.value	0x29b
+ 39262 adb8 32       		.uleb128 0x32
+ 39263 adb9 BE0D0000 		.long	0xdbe
+ 39264 adbd 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 999
+
+
+ 39265 adbe 91       		.byte	0x91
+ 39266 adbf A052     		.sleb128 -5856
+ 39267 adc1 32       		.uleb128 0x32
+ 39268 adc2 B20D0000 		.long	0xdb2
+ 39269 adc6 03       		.byte	0x3
+ 39270 adc7 91       		.byte	0x91
+ 39271 adc8 B052     		.sleb128 -5840
+ 39272 adca 35       		.uleb128 0x35
+ 39273 adcb CB0D0000 		.long	0xdcb
+ 39274 adcf 00000000 		.quad	.LBB3421
+ 39274      00000000 
+ 39275 add7 00000000 		.quad	.LBE3421
+ 39275      00000000 
+ 39276 addf 02       		.byte	0x2
+ 39277 ade0 7501     		.value	0x175
+ 39278 ade2 32       		.uleb128 0x32
+ 39279 ade3 E90D0000 		.long	0xde9
+ 39280 ade7 03       		.byte	0x3
+ 39281 ade8 91       		.byte	0x91
+ 39282 ade9 C052     		.sleb128 -5824
+ 39283 adeb 32       		.uleb128 0x32
+ 39284 adec DD0D0000 		.long	0xddd
+ 39285 adf0 03       		.byte	0x3
+ 39286 adf1 91       		.byte	0x91
+ 39287 adf2 D052     		.sleb128 -5808
+ 39288 adf4 00       		.byte	0x0
+ 39289 adf5 00       		.byte	0x0
+ 39290 adf6 00       		.byte	0x0
+ 39291 adf7 00       		.byte	0x0
+ 39292 adf8 36       		.uleb128 0x36
+ 39293 adf9 00000000 		.quad	.LBB3423
+ 39293      00000000 
+ 39294 ae01 00000000 		.quad	.LBE3423
+ 39294      00000000 
+ 39295 ae09 18AE0000 		.long	0xae18
+ 39296 ae0d 34       		.uleb128 0x34
+ 39297 ae0e 2C0C0000 		.long	0xc2c
+ 39298 ae12 04       		.byte	0x4
+ 39299 ae13 91       		.byte	0x91
+ 39300 ae14 F0B47F   		.sleb128 -9616
+ 39301 ae17 00       		.byte	0x0
+ 39302 ae18 31       		.uleb128 0x31
+ 39303 ae19 860E0000 		.long	0xe86
+ 39304 ae1d 00000000 		.quad	.LBB3424
+ 39304      00000000 
+ 39305 ae25 00000000 		.quad	.LBE3424
+ 39305      00000000 
+ 39306 ae2d 02       		.byte	0x2
+ 39307 ae2e 9606     		.value	0x696
+ 39308 ae30 47AE0000 		.long	0xae47
+ 39309 ae34 32       		.uleb128 0x32
+ 39310 ae35 A10E0000 		.long	0xea1
+ 39311 ae39 03       		.byte	0x3
+ 39312 ae3a 91       		.byte	0x91
+ 39313 ae3b E052     		.sleb128 -5792
+ 39314 ae3d 32       		.uleb128 0x32
+ 39315 ae3e 970E0000 		.long	0xe97
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1000
+
+
+ 39316 ae42 03       		.byte	0x3
+ 39317 ae43 91       		.byte	0x91
+ 39318 ae44 F052     		.sleb128 -5776
+ 39319 ae46 00       		.byte	0x0
+ 39320 ae47 36       		.uleb128 0x36
+ 39321 ae48 00000000 		.quad	.LBB3426
+ 39321      00000000 
+ 39322 ae50 00000000 		.quad	.LBE3426
+ 39322      00000000 
+ 39323 ae58 67AE0000 		.long	0xae67
+ 39324 ae5c 34       		.uleb128 0x34
+ 39325 ae5d 3C0C0000 		.long	0xc3c
+ 39326 ae61 04       		.byte	0x4
+ 39327 ae62 91       		.byte	0x91
+ 39328 ae63 E0B47F   		.sleb128 -9632
+ 39329 ae66 00       		.byte	0x0
+ 39330 ae67 31       		.uleb128 0x31
+ 39331 ae68 AC0E0000 		.long	0xeac
+ 39332 ae6c 00000000 		.quad	.LBB3427
+ 39332      00000000 
+ 39333 ae74 00000000 		.quad	.LBE3427
+ 39333      00000000 
+ 39334 ae7c 02       		.byte	0x2
+ 39335 ae7d 9806     		.value	0x698
+ 39336 ae7f B8AE0000 		.long	0xaeb8
+ 39337 ae83 32       		.uleb128 0x32
+ 39338 ae84 BE0E0000 		.long	0xebe
+ 39339 ae88 03       		.byte	0x3
+ 39340 ae89 91       		.byte	0x91
+ 39341 ae8a 8053     		.sleb128 -5760
+ 39342 ae8c 35       		.uleb128 0x35
+ 39343 ae8d CB0E0000 		.long	0xecb
+ 39344 ae91 00000000 		.quad	.LBB3429
+ 39344      00000000 
+ 39345 ae99 00000000 		.quad	.LBE3429
+ 39345      00000000 
+ 39346 aea1 02       		.byte	0x2
+ 39347 aea2 4905     		.value	0x549
+ 39348 aea4 32       		.uleb128 0x32
+ 39349 aea5 E90E0000 		.long	0xee9
+ 39350 aea9 03       		.byte	0x3
+ 39351 aeaa 91       		.byte	0x91
+ 39352 aeab 9C53     		.sleb128 -5732
+ 39353 aead 32       		.uleb128 0x32
+ 39354 aeae DD0E0000 		.long	0xedd
+ 39355 aeb2 03       		.byte	0x3
+ 39356 aeb3 91       		.byte	0x91
+ 39357 aeb4 A053     		.sleb128 -5728
+ 39358 aeb6 00       		.byte	0x0
+ 39359 aeb7 00       		.byte	0x0
+ 39360 aeb8 33       		.uleb128 0x33
+ 39361 aeb9 00000000 		.quad	.LBB3431
+ 39361      00000000 
+ 39362 aec1 00000000 		.quad	.LBE3431
+ 39362      00000000 
+ 39363 aec9 34       		.uleb128 0x34
+ 39364 aeca 480C0000 		.long	0xc48
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1001
+
+
+ 39365 aece 04       		.byte	0x4
+ 39366 aecf 91       		.byte	0x91
+ 39367 aed0 D0B47F   		.sleb128 -9648
+ 39368 aed3 00       		.byte	0x0
+ 39369 aed4 00       		.byte	0x0
+ 39370 aed5 00       		.byte	0x0
+ 39371 aed6 31       		.uleb128 0x31
+ 39372 aed7 F60E0000 		.long	0xef6
+ 39373 aedb 00000000 		.quad	.LBB3432
+ 39373      00000000 
+ 39374 aee3 00000000 		.quad	.LBE3432
+ 39374      00000000 
+ 39375 aeeb 02       		.byte	0x2
+ 39376 aeec 8A07     		.value	0x78a
+ 39377 aeee EBB00000 		.long	0xb0eb
+ 39378 aef2 32       		.uleb128 0x32
+ 39379 aef3 080F0000 		.long	0xf08
+ 39380 aef7 03       		.byte	0x3
+ 39381 aef8 91       		.byte	0x91
+ 39382 aef9 B053     		.sleb128 -5712
+ 39383 aefb 33       		.uleb128 0x33
+ 39384 aefc 00000000 		.quad	.LBB3433
+ 39384      00000000 
+ 39385 af04 00000000 		.quad	.LBE3433
+ 39385      00000000 
+ 39386 af0c 34       		.uleb128 0x34
+ 39387 af0d 140F0000 		.long	0xf14
+ 39388 af11 04       		.byte	0x4
+ 39389 af12 76       		.byte	0x76
+ 39390 af13 80B17F   		.sleb128 -10112
+ 39391 af16 31       		.uleb128 0x31
+ 39392 af17 210F0000 		.long	0xf21
+ 39393 af1b 00000000 		.quad	.LBB3434
+ 39393      00000000 
+ 39394 af23 00000000 		.quad	.LBE3434
+ 39394      00000000 
+ 39395 af2b 02       		.byte	0x2
+ 39396 af2c 1F06     		.value	0x61f
+ 39397 af2e B3AF0000 		.long	0xafb3
+ 39398 af32 32       		.uleb128 0x32
+ 39399 af33 330F0000 		.long	0xf33
+ 39400 af37 03       		.byte	0x3
+ 39401 af38 91       		.byte	0x91
+ 39402 af39 C053     		.sleb128 -5696
+ 39403 af3b 33       		.uleb128 0x33
+ 39404 af3c 00000000 		.quad	.LBB3435
+ 39404      00000000 
+ 39405 af44 00000000 		.quad	.LBE3435
+ 39405      00000000 
+ 39406 af4c 34       		.uleb128 0x34
+ 39407 af4d 3F0F0000 		.long	0xf3f
+ 39408 af51 09       		.byte	0x9
+ 39409 af52 03       		.byte	0x3
+ 39410 af53 00000000 		.quad	mask.7943
+ 39410      00000000 
+ 39411 af5b 35       		.uleb128 0x35
+ 39412 af5c A00D0000 		.long	0xda0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1002
+
+
+ 39413 af60 00000000 		.quad	.LBB3436
+ 39413      00000000 
+ 39414 af68 00000000 		.quad	.LBE3436
+ 39414      00000000 
+ 39415 af70 02       		.byte	0x2
+ 39416 af71 FE04     		.value	0x4fe
+ 39417 af73 32       		.uleb128 0x32
+ 39418 af74 BE0D0000 		.long	0xdbe
+ 39419 af78 03       		.byte	0x3
+ 39420 af79 91       		.byte	0x91
+ 39421 af7a D053     		.sleb128 -5680
+ 39422 af7c 32       		.uleb128 0x32
+ 39423 af7d B20D0000 		.long	0xdb2
+ 39424 af81 03       		.byte	0x3
+ 39425 af82 91       		.byte	0x91
+ 39426 af83 E053     		.sleb128 -5664
+ 39427 af85 35       		.uleb128 0x35
+ 39428 af86 CB0D0000 		.long	0xdcb
+ 39429 af8a 00000000 		.quad	.LBB3438
+ 39429      00000000 
+ 39430 af92 00000000 		.quad	.LBE3438
+ 39430      00000000 
+ 39431 af9a 02       		.byte	0x2
+ 39432 af9b 7501     		.value	0x175
+ 39433 af9d 32       		.uleb128 0x32
+ 39434 af9e E90D0000 		.long	0xde9
+ 39435 afa2 03       		.byte	0x3
+ 39436 afa3 91       		.byte	0x91
+ 39437 afa4 F053     		.sleb128 -5648
+ 39438 afa6 32       		.uleb128 0x32
+ 39439 afa7 DD0D0000 		.long	0xddd
+ 39440 afab 03       		.byte	0x3
+ 39441 afac 91       		.byte	0x91
+ 39442 afad 8054     		.sleb128 -5632
+ 39443 afaf 00       		.byte	0x0
+ 39444 afb0 00       		.byte	0x0
+ 39445 afb1 00       		.byte	0x0
+ 39446 afb2 00       		.byte	0x0
+ 39447 afb3 31       		.uleb128 0x31
+ 39448 afb4 210F0000 		.long	0xf21
+ 39449 afb8 00000000 		.quad	.LBB3440
+ 39449      00000000 
+ 39450 afc0 00000000 		.quad	.LBE3440
+ 39450      00000000 
+ 39451 afc8 02       		.byte	0x2
+ 39452 afc9 2006     		.value	0x620
+ 39453 afcb 50B00000 		.long	0xb050
+ 39454 afcf 32       		.uleb128 0x32
+ 39455 afd0 330F0000 		.long	0xf33
+ 39456 afd4 03       		.byte	0x3
+ 39457 afd5 91       		.byte	0x91
+ 39458 afd6 9054     		.sleb128 -5616
+ 39459 afd8 33       		.uleb128 0x33
+ 39460 afd9 00000000 		.quad	.LBB3441
+ 39460      00000000 
+ 39461 afe1 00000000 		.quad	.LBE3441
+ 39461      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1003
+
+
+ 39462 afe9 34       		.uleb128 0x34
+ 39463 afea 3F0F0000 		.long	0xf3f
+ 39464 afee 09       		.byte	0x9
+ 39465 afef 03       		.byte	0x3
+ 39466 aff0 00000000 		.quad	mask.7943
+ 39466      00000000 
+ 39467 aff8 35       		.uleb128 0x35
+ 39468 aff9 A00D0000 		.long	0xda0
+ 39469 affd 00000000 		.quad	.LBB3442
+ 39469      00000000 
+ 39470 b005 00000000 		.quad	.LBE3442
+ 39470      00000000 
+ 39471 b00d 02       		.byte	0x2
+ 39472 b00e FE04     		.value	0x4fe
+ 39473 b010 32       		.uleb128 0x32
+ 39474 b011 BE0D0000 		.long	0xdbe
+ 39475 b015 03       		.byte	0x3
+ 39476 b016 91       		.byte	0x91
+ 39477 b017 A054     		.sleb128 -5600
+ 39478 b019 32       		.uleb128 0x32
+ 39479 b01a B20D0000 		.long	0xdb2
+ 39480 b01e 03       		.byte	0x3
+ 39481 b01f 91       		.byte	0x91
+ 39482 b020 B054     		.sleb128 -5584
+ 39483 b022 35       		.uleb128 0x35
+ 39484 b023 CB0D0000 		.long	0xdcb
+ 39485 b027 00000000 		.quad	.LBB3444
+ 39485      00000000 
+ 39486 b02f 00000000 		.quad	.LBE3444
+ 39486      00000000 
+ 39487 b037 02       		.byte	0x2
+ 39488 b038 7501     		.value	0x175
+ 39489 b03a 32       		.uleb128 0x32
+ 39490 b03b E90D0000 		.long	0xde9
+ 39491 b03f 03       		.byte	0x3
+ 39492 b040 91       		.byte	0x91
+ 39493 b041 C054     		.sleb128 -5568
+ 39494 b043 32       		.uleb128 0x32
+ 39495 b044 DD0D0000 		.long	0xddd
+ 39496 b048 03       		.byte	0x3
+ 39497 b049 91       		.byte	0x91
+ 39498 b04a D054     		.sleb128 -5552
+ 39499 b04c 00       		.byte	0x0
+ 39500 b04d 00       		.byte	0x0
+ 39501 b04e 00       		.byte	0x0
+ 39502 b04f 00       		.byte	0x0
+ 39503 b050 35       		.uleb128 0x35
+ 39504 b051 210F0000 		.long	0xf21
+ 39505 b055 00000000 		.quad	.LBB3446
+ 39505      00000000 
+ 39506 b05d 00000000 		.quad	.LBE3446
+ 39506      00000000 
+ 39507 b065 02       		.byte	0x2
+ 39508 b066 2106     		.value	0x621
+ 39509 b068 32       		.uleb128 0x32
+ 39510 b069 330F0000 		.long	0xf33
+ 39511 b06d 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1004
+
+
+ 39512 b06e 91       		.byte	0x91
+ 39513 b06f E054     		.sleb128 -5536
+ 39514 b071 33       		.uleb128 0x33
+ 39515 b072 00000000 		.quad	.LBB3447
+ 39515      00000000 
+ 39516 b07a 00000000 		.quad	.LBE3447
+ 39516      00000000 
+ 39517 b082 34       		.uleb128 0x34
+ 39518 b083 3F0F0000 		.long	0xf3f
+ 39519 b087 09       		.byte	0x9
+ 39520 b088 03       		.byte	0x3
+ 39521 b089 00000000 		.quad	mask.7943
+ 39521      00000000 
+ 39522 b091 35       		.uleb128 0x35
+ 39523 b092 A00D0000 		.long	0xda0
+ 39524 b096 00000000 		.quad	.LBB3448
+ 39524      00000000 
+ 39525 b09e 00000000 		.quad	.LBE3448
+ 39525      00000000 
+ 39526 b0a6 02       		.byte	0x2
+ 39527 b0a7 FE04     		.value	0x4fe
+ 39528 b0a9 32       		.uleb128 0x32
+ 39529 b0aa BE0D0000 		.long	0xdbe
+ 39530 b0ae 03       		.byte	0x3
+ 39531 b0af 91       		.byte	0x91
+ 39532 b0b0 F054     		.sleb128 -5520
+ 39533 b0b2 32       		.uleb128 0x32
+ 39534 b0b3 B20D0000 		.long	0xdb2
+ 39535 b0b7 03       		.byte	0x3
+ 39536 b0b8 91       		.byte	0x91
+ 39537 b0b9 8055     		.sleb128 -5504
+ 39538 b0bb 35       		.uleb128 0x35
+ 39539 b0bc CB0D0000 		.long	0xdcb
+ 39540 b0c0 00000000 		.quad	.LBB3450
+ 39540      00000000 
+ 39541 b0c8 00000000 		.quad	.LBE3450
+ 39541      00000000 
+ 39542 b0d0 02       		.byte	0x2
+ 39543 b0d1 7501     		.value	0x175
+ 39544 b0d3 32       		.uleb128 0x32
+ 39545 b0d4 E90D0000 		.long	0xde9
+ 39546 b0d8 03       		.byte	0x3
+ 39547 b0d9 91       		.byte	0x91
+ 39548 b0da 9055     		.sleb128 -5488
+ 39549 b0dc 32       		.uleb128 0x32
+ 39550 b0dd DD0D0000 		.long	0xddd
+ 39551 b0e1 03       		.byte	0x3
+ 39552 b0e2 91       		.byte	0x91
+ 39553 b0e3 A055     		.sleb128 -5472
+ 39554 b0e5 00       		.byte	0x0
+ 39555 b0e6 00       		.byte	0x0
+ 39556 b0e7 00       		.byte	0x0
+ 39557 b0e8 00       		.byte	0x0
+ 39558 b0e9 00       		.byte	0x0
+ 39559 b0ea 00       		.byte	0x0
+ 39560 b0eb 31       		.uleb128 0x31
+ 39561 b0ec 860E0000 		.long	0xe86
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1005
+
+
+ 39562 b0f0 00000000 		.quad	.LBB3452
+ 39562      00000000 
+ 39563 b0f8 00000000 		.quad	.LBE3452
+ 39563      00000000 
+ 39564 b100 02       		.byte	0x2
+ 39565 b101 8A07     		.value	0x78a
+ 39566 b103 1AB10000 		.long	0xb11a
+ 39567 b107 32       		.uleb128 0x32
+ 39568 b108 A10E0000 		.long	0xea1
+ 39569 b10c 03       		.byte	0x3
+ 39570 b10d 91       		.byte	0x91
+ 39571 b10e B055     		.sleb128 -5456
+ 39572 b110 32       		.uleb128 0x32
+ 39573 b111 970E0000 		.long	0xe97
+ 39574 b115 03       		.byte	0x3
+ 39575 b116 91       		.byte	0x91
+ 39576 b117 C055     		.sleb128 -5440
+ 39577 b119 00       		.byte	0x0
+ 39578 b11a 31       		.uleb128 0x31
+ 39579 b11b 8F940000 		.long	0x948f
+ 39580 b11f 00000000 		.quad	.LBB3454
+ 39580      00000000 
+ 39581 b127 00000000 		.quad	.LBE3454
+ 39581      00000000 
+ 39582 b12f 02       		.byte	0x2
+ 39583 b130 8B07     		.value	0x78b
+ 39584 b132 ACB10000 		.long	0xb1ac
+ 39585 b136 32       		.uleb128 0x32
+ 39586 b137 A1940000 		.long	0x94a1
+ 39587 b13b 03       		.byte	0x3
+ 39588 b13c 91       		.byte	0x91
+ 39589 b13d D055     		.sleb128 -5424
+ 39590 b13f 33       		.uleb128 0x33
+ 39591 b140 00000000 		.quad	.LBB3455
+ 39591      00000000 
+ 39592 b148 00000000 		.quad	.LBE3455
+ 39592      00000000 
+ 39593 b150 34       		.uleb128 0x34
+ 39594 b151 AD940000 		.long	0x94ad
+ 39595 b155 04       		.byte	0x4
+ 39596 b156 91       		.byte	0x91
+ 39597 b157 A0B57F   		.sleb128 -9568
+ 39598 b15a 34       		.uleb128 0x34
+ 39599 b15b B7940000 		.long	0x94b7
+ 39600 b15f 03       		.byte	0x3
+ 39601 b160 91       		.byte	0x91
+ 39602 b161 E455     		.sleb128 -5404
+ 39603 b163 35       		.uleb128 0x35
+ 39604 b164 BE560000 		.long	0x56be
+ 39605 b168 00000000 		.quad	.LBB3456
+ 39605      00000000 
+ 39606 b170 00000000 		.quad	.LBE3456
+ 39606      00000000 
+ 39607 b178 02       		.byte	0x2
+ 39608 b179 7906     		.value	0x679
+ 39609 b17b 32       		.uleb128 0x32
+ 39610 b17c D0560000 		.long	0x56d0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1006
+
+
+ 39611 b180 03       		.byte	0x3
+ 39612 b181 91       		.byte	0x91
+ 39613 b182 E855     		.sleb128 -5400
+ 39614 b184 33       		.uleb128 0x33
+ 39615 b185 00000000 		.quad	.LBB3457
+ 39615      00000000 
+ 39616 b18d 00000000 		.quad	.LBE3457
+ 39616      00000000 
+ 39617 b195 34       		.uleb128 0x34
+ 39618 b196 DA560000 		.long	0x56da
+ 39619 b19a 04       		.byte	0x4
+ 39620 b19b 91       		.byte	0x91
+ 39621 b19c 90B57F   		.sleb128 -9584
+ 39622 b19f 34       		.uleb128 0x34
+ 39623 b1a0 E6560000 		.long	0x56e6
+ 39624 b1a4 03       		.byte	0x3
+ 39625 b1a5 91       		.byte	0x91
+ 39626 b1a6 EC55     		.sleb128 -5396
+ 39627 b1a8 00       		.byte	0x0
+ 39628 b1a9 00       		.byte	0x0
+ 39629 b1aa 00       		.byte	0x0
+ 39630 b1ab 00       		.byte	0x0
+ 39631 b1ac 31       		.uleb128 0x31
+ 39632 b1ad F60E0000 		.long	0xef6
+ 39633 b1b1 00000000 		.quad	.LBB3458
+ 39633      00000000 
+ 39634 b1b9 00000000 		.quad	.LBE3458
+ 39634      00000000 
+ 39635 b1c1 02       		.byte	0x2
+ 39636 b1c2 8B07     		.value	0x78b
+ 39637 b1c4 C1B30000 		.long	0xb3c1
+ 39638 b1c8 32       		.uleb128 0x32
+ 39639 b1c9 080F0000 		.long	0xf08
+ 39640 b1cd 03       		.byte	0x3
+ 39641 b1ce 91       		.byte	0x91
+ 39642 b1cf F055     		.sleb128 -5392
+ 39643 b1d1 33       		.uleb128 0x33
+ 39644 b1d2 00000000 		.quad	.LBB3459
+ 39644      00000000 
+ 39645 b1da 00000000 		.quad	.LBE3459
+ 39645      00000000 
+ 39646 b1e2 34       		.uleb128 0x34
+ 39647 b1e3 140F0000 		.long	0xf14
+ 39648 b1e7 04       		.byte	0x4
+ 39649 b1e8 76       		.byte	0x76
+ 39650 b1e9 90B17F   		.sleb128 -10096
+ 39651 b1ec 31       		.uleb128 0x31
+ 39652 b1ed 210F0000 		.long	0xf21
+ 39653 b1f1 00000000 		.quad	.LBB3460
+ 39653      00000000 
+ 39654 b1f9 00000000 		.quad	.LBE3460
+ 39654      00000000 
+ 39655 b201 02       		.byte	0x2
+ 39656 b202 1F06     		.value	0x61f
+ 39657 b204 89B20000 		.long	0xb289
+ 39658 b208 32       		.uleb128 0x32
+ 39659 b209 330F0000 		.long	0xf33
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1007
+
+
+ 39660 b20d 03       		.byte	0x3
+ 39661 b20e 91       		.byte	0x91
+ 39662 b20f 8056     		.sleb128 -5376
+ 39663 b211 33       		.uleb128 0x33
+ 39664 b212 00000000 		.quad	.LBB3461
+ 39664      00000000 
+ 39665 b21a 00000000 		.quad	.LBE3461
+ 39665      00000000 
+ 39666 b222 34       		.uleb128 0x34
+ 39667 b223 3F0F0000 		.long	0xf3f
+ 39668 b227 09       		.byte	0x9
+ 39669 b228 03       		.byte	0x3
+ 39670 b229 00000000 		.quad	mask.7943
+ 39670      00000000 
+ 39671 b231 35       		.uleb128 0x35
+ 39672 b232 A00D0000 		.long	0xda0
+ 39673 b236 00000000 		.quad	.LBB3462
+ 39673      00000000 
+ 39674 b23e 00000000 		.quad	.LBE3462
+ 39674      00000000 
+ 39675 b246 02       		.byte	0x2
+ 39676 b247 FE04     		.value	0x4fe
+ 39677 b249 32       		.uleb128 0x32
+ 39678 b24a BE0D0000 		.long	0xdbe
+ 39679 b24e 03       		.byte	0x3
+ 39680 b24f 91       		.byte	0x91
+ 39681 b250 9056     		.sleb128 -5360
+ 39682 b252 32       		.uleb128 0x32
+ 39683 b253 B20D0000 		.long	0xdb2
+ 39684 b257 03       		.byte	0x3
+ 39685 b258 91       		.byte	0x91
+ 39686 b259 A056     		.sleb128 -5344
+ 39687 b25b 35       		.uleb128 0x35
+ 39688 b25c CB0D0000 		.long	0xdcb
+ 39689 b260 00000000 		.quad	.LBB3464
+ 39689      00000000 
+ 39690 b268 00000000 		.quad	.LBE3464
+ 39690      00000000 
+ 39691 b270 02       		.byte	0x2
+ 39692 b271 7501     		.value	0x175
+ 39693 b273 32       		.uleb128 0x32
+ 39694 b274 E90D0000 		.long	0xde9
+ 39695 b278 03       		.byte	0x3
+ 39696 b279 91       		.byte	0x91
+ 39697 b27a B056     		.sleb128 -5328
+ 39698 b27c 32       		.uleb128 0x32
+ 39699 b27d DD0D0000 		.long	0xddd
+ 39700 b281 03       		.byte	0x3
+ 39701 b282 91       		.byte	0x91
+ 39702 b283 C056     		.sleb128 -5312
+ 39703 b285 00       		.byte	0x0
+ 39704 b286 00       		.byte	0x0
+ 39705 b287 00       		.byte	0x0
+ 39706 b288 00       		.byte	0x0
+ 39707 b289 31       		.uleb128 0x31
+ 39708 b28a 210F0000 		.long	0xf21
+ 39709 b28e 00000000 		.quad	.LBB3466
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1008
+
+
+ 39709      00000000 
+ 39710 b296 00000000 		.quad	.LBE3466
+ 39710      00000000 
+ 39711 b29e 02       		.byte	0x2
+ 39712 b29f 2006     		.value	0x620
+ 39713 b2a1 26B30000 		.long	0xb326
+ 39714 b2a5 32       		.uleb128 0x32
+ 39715 b2a6 330F0000 		.long	0xf33
+ 39716 b2aa 03       		.byte	0x3
+ 39717 b2ab 91       		.byte	0x91
+ 39718 b2ac D056     		.sleb128 -5296
+ 39719 b2ae 33       		.uleb128 0x33
+ 39720 b2af 00000000 		.quad	.LBB3467
+ 39720      00000000 
+ 39721 b2b7 00000000 		.quad	.LBE3467
+ 39721      00000000 
+ 39722 b2bf 34       		.uleb128 0x34
+ 39723 b2c0 3F0F0000 		.long	0xf3f
+ 39724 b2c4 09       		.byte	0x9
+ 39725 b2c5 03       		.byte	0x3
+ 39726 b2c6 00000000 		.quad	mask.7943
+ 39726      00000000 
+ 39727 b2ce 35       		.uleb128 0x35
+ 39728 b2cf A00D0000 		.long	0xda0
+ 39729 b2d3 00000000 		.quad	.LBB3468
+ 39729      00000000 
+ 39730 b2db 00000000 		.quad	.LBE3468
+ 39730      00000000 
+ 39731 b2e3 02       		.byte	0x2
+ 39732 b2e4 FE04     		.value	0x4fe
+ 39733 b2e6 32       		.uleb128 0x32
+ 39734 b2e7 BE0D0000 		.long	0xdbe
+ 39735 b2eb 03       		.byte	0x3
+ 39736 b2ec 91       		.byte	0x91
+ 39737 b2ed E056     		.sleb128 -5280
+ 39738 b2ef 32       		.uleb128 0x32
+ 39739 b2f0 B20D0000 		.long	0xdb2
+ 39740 b2f4 03       		.byte	0x3
+ 39741 b2f5 91       		.byte	0x91
+ 39742 b2f6 F056     		.sleb128 -5264
+ 39743 b2f8 35       		.uleb128 0x35
+ 39744 b2f9 CB0D0000 		.long	0xdcb
+ 39745 b2fd 00000000 		.quad	.LBB3470
+ 39745      00000000 
+ 39746 b305 00000000 		.quad	.LBE3470
+ 39746      00000000 
+ 39747 b30d 02       		.byte	0x2
+ 39748 b30e 7501     		.value	0x175
+ 39749 b310 32       		.uleb128 0x32
+ 39750 b311 E90D0000 		.long	0xde9
+ 39751 b315 03       		.byte	0x3
+ 39752 b316 91       		.byte	0x91
+ 39753 b317 8057     		.sleb128 -5248
+ 39754 b319 32       		.uleb128 0x32
+ 39755 b31a DD0D0000 		.long	0xddd
+ 39756 b31e 03       		.byte	0x3
+ 39757 b31f 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1009
+
+
+ 39758 b320 9057     		.sleb128 -5232
+ 39759 b322 00       		.byte	0x0
+ 39760 b323 00       		.byte	0x0
+ 39761 b324 00       		.byte	0x0
+ 39762 b325 00       		.byte	0x0
+ 39763 b326 35       		.uleb128 0x35
+ 39764 b327 210F0000 		.long	0xf21
+ 39765 b32b 00000000 		.quad	.LBB3472
+ 39765      00000000 
+ 39766 b333 00000000 		.quad	.LBE3472
+ 39766      00000000 
+ 39767 b33b 02       		.byte	0x2
+ 39768 b33c 2106     		.value	0x621
+ 39769 b33e 32       		.uleb128 0x32
+ 39770 b33f 330F0000 		.long	0xf33
+ 39771 b343 03       		.byte	0x3
+ 39772 b344 91       		.byte	0x91
+ 39773 b345 A057     		.sleb128 -5216
+ 39774 b347 33       		.uleb128 0x33
+ 39775 b348 00000000 		.quad	.LBB3473
+ 39775      00000000 
+ 39776 b350 00000000 		.quad	.LBE3473
+ 39776      00000000 
+ 39777 b358 34       		.uleb128 0x34
+ 39778 b359 3F0F0000 		.long	0xf3f
+ 39779 b35d 09       		.byte	0x9
+ 39780 b35e 03       		.byte	0x3
+ 39781 b35f 00000000 		.quad	mask.7943
+ 39781      00000000 
+ 39782 b367 35       		.uleb128 0x35
+ 39783 b368 A00D0000 		.long	0xda0
+ 39784 b36c 00000000 		.quad	.LBB3474
+ 39784      00000000 
+ 39785 b374 00000000 		.quad	.LBE3474
+ 39785      00000000 
+ 39786 b37c 02       		.byte	0x2
+ 39787 b37d FE04     		.value	0x4fe
+ 39788 b37f 32       		.uleb128 0x32
+ 39789 b380 BE0D0000 		.long	0xdbe
+ 39790 b384 03       		.byte	0x3
+ 39791 b385 91       		.byte	0x91
+ 39792 b386 B057     		.sleb128 -5200
+ 39793 b388 32       		.uleb128 0x32
+ 39794 b389 B20D0000 		.long	0xdb2
+ 39795 b38d 03       		.byte	0x3
+ 39796 b38e 91       		.byte	0x91
+ 39797 b38f C057     		.sleb128 -5184
+ 39798 b391 35       		.uleb128 0x35
+ 39799 b392 CB0D0000 		.long	0xdcb
+ 39800 b396 00000000 		.quad	.LBB3476
+ 39800      00000000 
+ 39801 b39e 00000000 		.quad	.LBE3476
+ 39801      00000000 
+ 39802 b3a6 02       		.byte	0x2
+ 39803 b3a7 7501     		.value	0x175
+ 39804 b3a9 32       		.uleb128 0x32
+ 39805 b3aa E90D0000 		.long	0xde9
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1010
+
+
+ 39806 b3ae 03       		.byte	0x3
+ 39807 b3af 91       		.byte	0x91
+ 39808 b3b0 D057     		.sleb128 -5168
+ 39809 b3b2 32       		.uleb128 0x32
+ 39810 b3b3 DD0D0000 		.long	0xddd
+ 39811 b3b7 03       		.byte	0x3
+ 39812 b3b8 91       		.byte	0x91
+ 39813 b3b9 E057     		.sleb128 -5152
+ 39814 b3bb 00       		.byte	0x0
+ 39815 b3bc 00       		.byte	0x0
+ 39816 b3bd 00       		.byte	0x0
+ 39817 b3be 00       		.byte	0x0
+ 39818 b3bf 00       		.byte	0x0
+ 39819 b3c0 00       		.byte	0x0
+ 39820 b3c1 31       		.uleb128 0x31
+ 39821 b3c2 860E0000 		.long	0xe86
+ 39822 b3c6 00000000 		.quad	.LBB3478
+ 39822      00000000 
+ 39823 b3ce 00000000 		.quad	.LBE3478
+ 39823      00000000 
+ 39824 b3d6 02       		.byte	0x2
+ 39825 b3d7 8B07     		.value	0x78b
+ 39826 b3d9 F0B30000 		.long	0xb3f0
+ 39827 b3dd 32       		.uleb128 0x32
+ 39828 b3de A10E0000 		.long	0xea1
+ 39829 b3e2 03       		.byte	0x3
+ 39830 b3e3 91       		.byte	0x91
+ 39831 b3e4 F057     		.sleb128 -5136
+ 39832 b3e6 32       		.uleb128 0x32
+ 39833 b3e7 970E0000 		.long	0xe97
+ 39834 b3eb 03       		.byte	0x3
+ 39835 b3ec 91       		.byte	0x91
+ 39836 b3ed 8058     		.sleb128 -5120
+ 39837 b3ef 00       		.byte	0x0
+ 39838 b3f0 31       		.uleb128 0x31
+ 39839 b3f1 D50B0000 		.long	0xbd5
+ 39840 b3f5 00000000 		.quad	.LBB3480
+ 39840      00000000 
+ 39841 b3fd 00000000 		.quad	.LBE3480
+ 39841      00000000 
+ 39842 b405 02       		.byte	0x2
+ 39843 b406 8C07     		.value	0x78c
+ 39844 b408 D3B80000 		.long	0xb8d3
+ 39845 b40c 32       		.uleb128 0x32
+ 39846 b40d F30B0000 		.long	0xbf3
+ 39847 b411 03       		.byte	0x3
+ 39848 b412 91       		.byte	0x91
+ 39849 b413 9C58     		.sleb128 -5092
+ 39850 b415 32       		.uleb128 0x32
+ 39851 b416 E70B0000 		.long	0xbe7
+ 39852 b41a 03       		.byte	0x3
+ 39853 b41b 91       		.byte	0x91
+ 39854 b41c A058     		.sleb128 -5088
+ 39855 b41e 33       		.uleb128 0x33
+ 39856 b41f 00000000 		.quad	.LBB3481
+ 39856      00000000 
+ 39857 b427 00000000 		.quad	.LBE3481
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1011
+
+
+ 39857      00000000 
+ 39858 b42f 34       		.uleb128 0x34
+ 39859 b430 FF0B0000 		.long	0xbff
+ 39860 b434 04       		.byte	0x4
+ 39861 b435 76       		.byte	0x76
+ 39862 b436 B0B17F   		.sleb128 -10064
+ 39863 b439 34       		.uleb128 0x34
+ 39864 b43a 0B0C0000 		.long	0xc0b
+ 39865 b43e 04       		.byte	0x4
+ 39866 b43f 76       		.byte	0x76
+ 39867 b440 A0B17F   		.sleb128 -10080
+ 39868 b443 31       		.uleb128 0x31
+ 39869 b444 540C0000 		.long	0xc54
+ 39870 b448 00000000 		.quad	.LBB3482
+ 39870      00000000 
+ 39871 b450 00000000 		.quad	.LBE3482
+ 39871      00000000 
+ 39872 b458 02       		.byte	0x2
+ 39873 b459 9106     		.value	0x691
+ 39874 b45b AFB40000 		.long	0xb4af
+ 39875 b45f 32       		.uleb128 0x32
+ 39876 b460 7E0C0000 		.long	0xc7e
+ 39877 b464 03       		.byte	0x3
+ 39878 b465 91       		.byte	0x91
+ 39879 b466 B858     		.sleb128 -5064
+ 39880 b468 32       		.uleb128 0x32
+ 39881 b469 720C0000 		.long	0xc72
+ 39882 b46d 03       		.byte	0x3
+ 39883 b46e 91       		.byte	0x91
+ 39884 b46f BC58     		.sleb128 -5060
+ 39885 b471 32       		.uleb128 0x32
+ 39886 b472 660C0000 		.long	0xc66
+ 39887 b476 03       		.byte	0x3
+ 39888 b477 91       		.byte	0x91
+ 39889 b478 C058     		.sleb128 -5056
+ 39890 b47a 35       		.uleb128 0x35
+ 39891 b47b 8B0C0000 		.long	0xc8b
+ 39892 b47f 00000000 		.quad	.LBB3484
+ 39892      00000000 
+ 39893 b487 00000000 		.quad	.LBE3484
+ 39893      00000000 
+ 39894 b48f 02       		.byte	0x2
+ 39895 b490 0702     		.value	0x207
+ 39896 b492 32       		.uleb128 0x32
+ 39897 b493 B40C0000 		.long	0xcb4
+ 39898 b497 03       		.byte	0x3
+ 39899 b498 91       		.byte	0x91
+ 39900 b499 D858     		.sleb128 -5032
+ 39901 b49b 32       		.uleb128 0x32
+ 39902 b49c A90C0000 		.long	0xca9
+ 39903 b4a0 03       		.byte	0x3
+ 39904 b4a1 91       		.byte	0x91
+ 39905 b4a2 DC58     		.sleb128 -5028
+ 39906 b4a4 32       		.uleb128 0x32
+ 39907 b4a5 9D0C0000 		.long	0xc9d
+ 39908 b4a9 03       		.byte	0x3
+ 39909 b4aa 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1012
+
+
+ 39910 b4ab E058     		.sleb128 -5024
+ 39911 b4ad 00       		.byte	0x0
+ 39912 b4ae 00       		.byte	0x0
+ 39913 b4af 31       		.uleb128 0x31
+ 39914 b4b0 C10C0000 		.long	0xcc1
+ 39915 b4b4 00000000 		.quad	.LBB3486
+ 39915      00000000 
+ 39916 b4bc 00000000 		.quad	.LBE3486
+ 39916      00000000 
+ 39917 b4c4 02       		.byte	0x2
+ 39918 b4c5 9206     		.value	0x692
+ 39919 b4c7 38B70000 		.long	0xb738
+ 39920 b4cb 32       		.uleb128 0x32
+ 39921 b4cc D30C0000 		.long	0xcd3
+ 39922 b4d0 03       		.byte	0x3
+ 39923 b4d1 91       		.byte	0x91
+ 39924 b4d2 F058     		.sleb128 -5008
+ 39925 b4d4 35       		.uleb128 0x35
+ 39926 b4d5 E00C0000 		.long	0xce0
+ 39927 b4d9 00000000 		.quad	.LBB3488
+ 39927      00000000 
+ 39928 b4e1 00000000 		.quad	.LBE3488
+ 39928      00000000 
+ 39929 b4e9 02       		.byte	0x2
+ 39930 b4ea 7D03     		.value	0x37d
+ 39931 b4ec 32       		.uleb128 0x32
+ 39932 b4ed FE0C0000 		.long	0xcfe
+ 39933 b4f1 03       		.byte	0x3
+ 39934 b4f2 91       		.byte	0x91
+ 39935 b4f3 8859     		.sleb128 -4984
+ 39936 b4f5 32       		.uleb128 0x32
+ 39937 b4f6 F20C0000 		.long	0xcf2
+ 39938 b4fa 03       		.byte	0x3
+ 39939 b4fb 91       		.byte	0x91
+ 39940 b4fc 9059     		.sleb128 -4976
+ 39941 b4fe 33       		.uleb128 0x33
+ 39942 b4ff 00000000 		.quad	.LBB3489
+ 39942      00000000 
+ 39943 b507 00000000 		.quad	.LBE3489
+ 39943      00000000 
+ 39944 b50f 34       		.uleb128 0x34
+ 39945 b510 0A0D0000 		.long	0xd0a
+ 39946 b514 03       		.byte	0x3
+ 39947 b515 91       		.byte	0x91
+ 39948 b516 E059     		.sleb128 -4896
+ 39949 b518 34       		.uleb128 0x34
+ 39950 b519 150D0000 		.long	0xd15
+ 39951 b51d 03       		.byte	0x3
+ 39952 b51e 91       		.byte	0x91
+ 39953 b51f D059     		.sleb128 -4912
+ 39954 b521 34       		.uleb128 0x34
+ 39955 b522 200D0000 		.long	0xd20
+ 39956 b526 03       		.byte	0x3
+ 39957 b527 91       		.byte	0x91
+ 39958 b528 C059     		.sleb128 -4928
+ 39959 b52a 34       		.uleb128 0x34
+ 39960 b52b 2C0D0000 		.long	0xd2c
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1013
+
+
+ 39961 b52f 03       		.byte	0x3
+ 39962 b530 91       		.byte	0x91
+ 39963 b531 B059     		.sleb128 -4944
+ 39964 b533 34       		.uleb128 0x34
+ 39965 b534 380D0000 		.long	0xd38
+ 39966 b538 03       		.byte	0x3
+ 39967 b539 91       		.byte	0x91
+ 39968 b53a AC59     		.sleb128 -4948
+ 39969 b53c 31       		.uleb128 0x31
+ 39970 b53d 4F0D0000 		.long	0xd4f
+ 39971 b541 00000000 		.quad	.LBB3490
+ 39971      00000000 
+ 39972 b549 00000000 		.quad	.LBE3490
+ 39972      00000000 
+ 39973 b551 02       		.byte	0x2
+ 39974 b552 5603     		.value	0x356
+ 39975 b554 6BB50000 		.long	0xb56b
+ 39976 b558 32       		.uleb128 0x32
+ 39977 b559 6A0D0000 		.long	0xd6a
+ 39978 b55d 03       		.byte	0x3
+ 39979 b55e 91       		.byte	0x91
+ 39980 b55f F059     		.sleb128 -4880
+ 39981 b561 32       		.uleb128 0x32
+ 39982 b562 600D0000 		.long	0xd60
+ 39983 b566 03       		.byte	0x3
+ 39984 b567 91       		.byte	0x91
+ 39985 b568 805A     		.sleb128 -4864
+ 39986 b56a 00       		.byte	0x0
+ 39987 b56b 31       		.uleb128 0x31
+ 39988 b56c 750D0000 		.long	0xd75
+ 39989 b570 00000000 		.quad	.LBB3492
+ 39989      00000000 
+ 39990 b578 00000000 		.quad	.LBE3492
+ 39990      00000000 
+ 39991 b580 02       		.byte	0x2
+ 39992 b581 5903     		.value	0x359
+ 39993 b583 9AB50000 		.long	0xb59a
+ 39994 b587 32       		.uleb128 0x32
+ 39995 b588 930D0000 		.long	0xd93
+ 39996 b58c 03       		.byte	0x3
+ 39997 b58d 91       		.byte	0x91
+ 39998 b58e 9C5A     		.sleb128 -4836
+ 39999 b590 32       		.uleb128 0x32
+ 40000 b591 870D0000 		.long	0xd87
+ 40001 b595 03       		.byte	0x3
+ 40002 b596 91       		.byte	0x91
+ 40003 b597 A05A     		.sleb128 -4832
+ 40004 b599 00       		.byte	0x0
+ 40005 b59a 31       		.uleb128 0x31
+ 40006 b59b 4F0D0000 		.long	0xd4f
+ 40007 b59f 00000000 		.quad	.LBB3494
+ 40007      00000000 
+ 40008 b5a7 00000000 		.quad	.LBE3494
+ 40008      00000000 
+ 40009 b5af 02       		.byte	0x2
+ 40010 b5b0 5B03     		.value	0x35b
+ 40011 b5b2 C9B50000 		.long	0xb5c9
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1014
+
+
+ 40012 b5b6 32       		.uleb128 0x32
+ 40013 b5b7 6A0D0000 		.long	0xd6a
+ 40014 b5bb 03       		.byte	0x3
+ 40015 b5bc 91       		.byte	0x91
+ 40016 b5bd B05A     		.sleb128 -4816
+ 40017 b5bf 32       		.uleb128 0x32
+ 40018 b5c0 600D0000 		.long	0xd60
+ 40019 b5c4 03       		.byte	0x3
+ 40020 b5c5 91       		.byte	0x91
+ 40021 b5c6 C05A     		.sleb128 -4800
+ 40022 b5c8 00       		.byte	0x0
+ 40023 b5c9 31       		.uleb128 0x31
+ 40024 b5ca A00D0000 		.long	0xda0
+ 40025 b5ce 00000000 		.quad	.LBB3496
+ 40025      00000000 
+ 40026 b5d6 00000000 		.quad	.LBE3496
+ 40026      00000000 
+ 40027 b5de 02       		.byte	0x2
+ 40028 b5df 6403     		.value	0x364
+ 40029 b5e1 23B60000 		.long	0xb623
+ 40030 b5e5 32       		.uleb128 0x32
+ 40031 b5e6 BE0D0000 		.long	0xdbe
+ 40032 b5ea 03       		.byte	0x3
+ 40033 b5eb 91       		.byte	0x91
+ 40034 b5ec D05A     		.sleb128 -4784
+ 40035 b5ee 32       		.uleb128 0x32
+ 40036 b5ef B20D0000 		.long	0xdb2
+ 40037 b5f3 03       		.byte	0x3
+ 40038 b5f4 91       		.byte	0x91
+ 40039 b5f5 E05A     		.sleb128 -4768
+ 40040 b5f7 35       		.uleb128 0x35
+ 40041 b5f8 CB0D0000 		.long	0xdcb
+ 40042 b5fc 00000000 		.quad	.LBB3498
+ 40042      00000000 
+ 40043 b604 00000000 		.quad	.LBE3498
+ 40043      00000000 
+ 40044 b60c 02       		.byte	0x2
+ 40045 b60d 7501     		.value	0x175
+ 40046 b60f 32       		.uleb128 0x32
+ 40047 b610 E90D0000 		.long	0xde9
+ 40048 b614 03       		.byte	0x3
+ 40049 b615 91       		.byte	0x91
+ 40050 b616 F05A     		.sleb128 -4752
+ 40051 b618 32       		.uleb128 0x32
+ 40052 b619 DD0D0000 		.long	0xddd
+ 40053 b61d 03       		.byte	0x3
+ 40054 b61e 91       		.byte	0x91
+ 40055 b61f 805B     		.sleb128 -4736
+ 40056 b621 00       		.byte	0x0
+ 40057 b622 00       		.byte	0x0
+ 40058 b623 31       		.uleb128 0x31
+ 40059 b624 FB0D0000 		.long	0xdfb
+ 40060 b628 00000000 		.quad	.LBB3500
+ 40060      00000000 
+ 40061 b630 00000000 		.quad	.LBE3500
+ 40061      00000000 
+ 40062 b638 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1015
+
+
+ 40063 b639 6603     		.value	0x366
+ 40064 b63b 52B60000 		.long	0xb652
+ 40065 b63f 32       		.uleb128 0x32
+ 40066 b640 160E0000 		.long	0xe16
+ 40067 b644 03       		.byte	0x3
+ 40068 b645 91       		.byte	0x91
+ 40069 b646 905B     		.sleb128 -4720
+ 40070 b648 32       		.uleb128 0x32
+ 40071 b649 0C0E0000 		.long	0xe0c
+ 40072 b64d 03       		.byte	0x3
+ 40073 b64e 91       		.byte	0x91
+ 40074 b64f A05B     		.sleb128 -4704
+ 40075 b651 00       		.byte	0x0
+ 40076 b652 31       		.uleb128 0x31
+ 40077 b653 A00D0000 		.long	0xda0
+ 40078 b657 00000000 		.quad	.LBB3502
+ 40078      00000000 
+ 40079 b65f 00000000 		.quad	.LBE3502
+ 40079      00000000 
+ 40080 b667 02       		.byte	0x2
+ 40081 b668 6803     		.value	0x368
+ 40082 b66a ACB60000 		.long	0xb6ac
+ 40083 b66e 32       		.uleb128 0x32
+ 40084 b66f BE0D0000 		.long	0xdbe
+ 40085 b673 03       		.byte	0x3
+ 40086 b674 91       		.byte	0x91
+ 40087 b675 B05B     		.sleb128 -4688
+ 40088 b677 32       		.uleb128 0x32
+ 40089 b678 B20D0000 		.long	0xdb2
+ 40090 b67c 03       		.byte	0x3
+ 40091 b67d 91       		.byte	0x91
+ 40092 b67e C05B     		.sleb128 -4672
+ 40093 b680 35       		.uleb128 0x35
+ 40094 b681 CB0D0000 		.long	0xdcb
+ 40095 b685 00000000 		.quad	.LBB3504
+ 40095      00000000 
+ 40096 b68d 00000000 		.quad	.LBE3504
+ 40096      00000000 
+ 40097 b695 02       		.byte	0x2
+ 40098 b696 7501     		.value	0x175
+ 40099 b698 32       		.uleb128 0x32
+ 40100 b699 E90D0000 		.long	0xde9
+ 40101 b69d 03       		.byte	0x3
+ 40102 b69e 91       		.byte	0x91
+ 40103 b69f D05B     		.sleb128 -4656
+ 40104 b6a1 32       		.uleb128 0x32
+ 40105 b6a2 DD0D0000 		.long	0xddd
+ 40106 b6a6 03       		.byte	0x3
+ 40107 b6a7 91       		.byte	0x91
+ 40108 b6a8 E05B     		.sleb128 -4640
+ 40109 b6aa 00       		.byte	0x0
+ 40110 b6ab 00       		.byte	0x0
+ 40111 b6ac 31       		.uleb128 0x31
+ 40112 b6ad FB0D0000 		.long	0xdfb
+ 40113 b6b1 00000000 		.quad	.LBB3506
+ 40113      00000000 
+ 40114 b6b9 00000000 		.quad	.LBE3506
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1016
+
+
+ 40114      00000000 
+ 40115 b6c1 02       		.byte	0x2
+ 40116 b6c2 6A03     		.value	0x36a
+ 40117 b6c4 DBB60000 		.long	0xb6db
+ 40118 b6c8 32       		.uleb128 0x32
+ 40119 b6c9 160E0000 		.long	0xe16
+ 40120 b6cd 03       		.byte	0x3
+ 40121 b6ce 91       		.byte	0x91
+ 40122 b6cf F05B     		.sleb128 -4624
+ 40123 b6d1 32       		.uleb128 0x32
+ 40124 b6d2 0C0E0000 		.long	0xe0c
+ 40125 b6d6 03       		.byte	0x3
+ 40126 b6d7 91       		.byte	0x91
+ 40127 b6d8 805C     		.sleb128 -4608
+ 40128 b6da 00       		.byte	0x0
+ 40129 b6db 31       		.uleb128 0x31
+ 40130 b6dc 210E0000 		.long	0xe21
+ 40131 b6e0 00000000 		.quad	.LBB3508
+ 40131      00000000 
+ 40132 b6e8 00000000 		.quad	.LBE3508
+ 40132      00000000 
+ 40133 b6f0 02       		.byte	0x2
+ 40134 b6f1 6C03     		.value	0x36c
+ 40135 b6f3 0AB70000 		.long	0xb70a
+ 40136 b6f7 32       		.uleb128 0x32
+ 40137 b6f8 3E0E0000 		.long	0xe3e
+ 40138 b6fc 03       		.byte	0x3
+ 40139 b6fd 91       		.byte	0x91
+ 40140 b6fe 905C     		.sleb128 -4592
+ 40141 b700 32       		.uleb128 0x32
+ 40142 b701 330E0000 		.long	0xe33
+ 40143 b705 03       		.byte	0x3
+ 40144 b706 91       		.byte	0x91
+ 40145 b707 A05C     		.sleb128 -4576
+ 40146 b709 00       		.byte	0x0
+ 40147 b70a 35       		.uleb128 0x35
+ 40148 b70b 4F0D0000 		.long	0xd4f
+ 40149 b70f 00000000 		.quad	.LBB3510
+ 40149      00000000 
+ 40150 b717 00000000 		.quad	.LBE3510
+ 40150      00000000 
+ 40151 b71f 02       		.byte	0x2
+ 40152 b720 6E03     		.value	0x36e
+ 40153 b722 32       		.uleb128 0x32
+ 40154 b723 6A0D0000 		.long	0xd6a
+ 40155 b727 03       		.byte	0x3
+ 40156 b728 91       		.byte	0x91
+ 40157 b729 B05C     		.sleb128 -4560
+ 40158 b72b 32       		.uleb128 0x32
+ 40159 b72c 600D0000 		.long	0xd60
+ 40160 b730 03       		.byte	0x3
+ 40161 b731 91       		.byte	0x91
+ 40162 b732 C05C     		.sleb128 -4544
+ 40163 b734 00       		.byte	0x0
+ 40164 b735 00       		.byte	0x0
+ 40165 b736 00       		.byte	0x0
+ 40166 b737 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1017
+
+
+ 40167 b738 36       		.uleb128 0x36
+ 40168 b739 00000000 		.quad	.LBB3512
+ 40168      00000000 
+ 40169 b741 00000000 		.quad	.LBE3512
+ 40169      00000000 
+ 40170 b749 58B70000 		.long	0xb758
+ 40171 b74d 34       		.uleb128 0x34
+ 40172 b74e 1C0C0000 		.long	0xc1c
+ 40173 b752 04       		.byte	0x4
+ 40174 b753 91       		.byte	0x91
+ 40175 b754 E0B57F   		.sleb128 -9504
+ 40176 b757 00       		.byte	0x0
+ 40177 b758 31       		.uleb128 0x31
+ 40178 b759 4A0E0000 		.long	0xe4a
+ 40179 b75d 00000000 		.quad	.LBB3513
+ 40179      00000000 
+ 40180 b765 00000000 		.quad	.LBE3513
+ 40180      00000000 
+ 40181 b76d 02       		.byte	0x2
+ 40182 b76e 9406     		.value	0x694
+ 40183 b770 F5B70000 		.long	0xb7f5
+ 40184 b774 32       		.uleb128 0x32
+ 40185 b775 5C0E0000 		.long	0xe5c
+ 40186 b779 03       		.byte	0x3
+ 40187 b77a 91       		.byte	0x91
+ 40188 b77b D05C     		.sleb128 -4528
+ 40189 b77d 33       		.uleb128 0x33
+ 40190 b77e 00000000 		.quad	.LBB3514
+ 40190      00000000 
+ 40191 b786 00000000 		.quad	.LBE3514
+ 40191      00000000 
+ 40192 b78e 34       		.uleb128 0x34
+ 40193 b78f 680E0000 		.long	0xe68
+ 40194 b793 09       		.byte	0x9
+ 40195 b794 03       		.byte	0x3
+ 40196 b795 00000000 		.quad	ShiftRowTable.7385
+ 40196      00000000 
+ 40197 b79d 35       		.uleb128 0x35
+ 40198 b79e A00D0000 		.long	0xda0
+ 40199 b7a2 00000000 		.quad	.LBB3515
+ 40199      00000000 
+ 40200 b7aa 00000000 		.quad	.LBE3515
+ 40200      00000000 
+ 40201 b7b2 02       		.byte	0x2
+ 40202 b7b3 9B02     		.value	0x29b
+ 40203 b7b5 32       		.uleb128 0x32
+ 40204 b7b6 BE0D0000 		.long	0xdbe
+ 40205 b7ba 03       		.byte	0x3
+ 40206 b7bb 91       		.byte	0x91
+ 40207 b7bc E05C     		.sleb128 -4512
+ 40208 b7be 32       		.uleb128 0x32
+ 40209 b7bf B20D0000 		.long	0xdb2
+ 40210 b7c3 03       		.byte	0x3
+ 40211 b7c4 91       		.byte	0x91
+ 40212 b7c5 F05C     		.sleb128 -4496
+ 40213 b7c7 35       		.uleb128 0x35
+ 40214 b7c8 CB0D0000 		.long	0xdcb
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1018
+
+
+ 40215 b7cc 00000000 		.quad	.LBB3517
+ 40215      00000000 
+ 40216 b7d4 00000000 		.quad	.LBE3517
+ 40216      00000000 
+ 40217 b7dc 02       		.byte	0x2
+ 40218 b7dd 7501     		.value	0x175
+ 40219 b7df 32       		.uleb128 0x32
+ 40220 b7e0 E90D0000 		.long	0xde9
+ 40221 b7e4 03       		.byte	0x3
+ 40222 b7e5 91       		.byte	0x91
+ 40223 b7e6 805D     		.sleb128 -4480
+ 40224 b7e8 32       		.uleb128 0x32
+ 40225 b7e9 DD0D0000 		.long	0xddd
+ 40226 b7ed 03       		.byte	0x3
+ 40227 b7ee 91       		.byte	0x91
+ 40228 b7ef 905D     		.sleb128 -4464
+ 40229 b7f1 00       		.byte	0x0
+ 40230 b7f2 00       		.byte	0x0
+ 40231 b7f3 00       		.byte	0x0
+ 40232 b7f4 00       		.byte	0x0
+ 40233 b7f5 36       		.uleb128 0x36
+ 40234 b7f6 00000000 		.quad	.LBB3519
+ 40234      00000000 
+ 40235 b7fe 00000000 		.quad	.LBE3519
+ 40235      00000000 
+ 40236 b806 15B80000 		.long	0xb815
+ 40237 b80a 34       		.uleb128 0x34
+ 40238 b80b 2C0C0000 		.long	0xc2c
+ 40239 b80f 04       		.byte	0x4
+ 40240 b810 91       		.byte	0x91
+ 40241 b811 D0B57F   		.sleb128 -9520
+ 40242 b814 00       		.byte	0x0
+ 40243 b815 31       		.uleb128 0x31
+ 40244 b816 860E0000 		.long	0xe86
+ 40245 b81a 00000000 		.quad	.LBB3520
+ 40245      00000000 
+ 40246 b822 00000000 		.quad	.LBE3520
+ 40246      00000000 
+ 40247 b82a 02       		.byte	0x2
+ 40248 b82b 9606     		.value	0x696
+ 40249 b82d 44B80000 		.long	0xb844
+ 40250 b831 32       		.uleb128 0x32
+ 40251 b832 A10E0000 		.long	0xea1
+ 40252 b836 03       		.byte	0x3
+ 40253 b837 91       		.byte	0x91
+ 40254 b838 A05D     		.sleb128 -4448
+ 40255 b83a 32       		.uleb128 0x32
+ 40256 b83b 970E0000 		.long	0xe97
+ 40257 b83f 03       		.byte	0x3
+ 40258 b840 91       		.byte	0x91
+ 40259 b841 B05D     		.sleb128 -4432
+ 40260 b843 00       		.byte	0x0
+ 40261 b844 36       		.uleb128 0x36
+ 40262 b845 00000000 		.quad	.LBB3522
+ 40262      00000000 
+ 40263 b84d 00000000 		.quad	.LBE3522
+ 40263      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1019
+
+
+ 40264 b855 64B80000 		.long	0xb864
+ 40265 b859 34       		.uleb128 0x34
+ 40266 b85a 3C0C0000 		.long	0xc3c
+ 40267 b85e 04       		.byte	0x4
+ 40268 b85f 91       		.byte	0x91
+ 40269 b860 C0B57F   		.sleb128 -9536
+ 40270 b863 00       		.byte	0x0
+ 40271 b864 31       		.uleb128 0x31
+ 40272 b865 AC0E0000 		.long	0xeac
+ 40273 b869 00000000 		.quad	.LBB3523
+ 40273      00000000 
+ 40274 b871 00000000 		.quad	.LBE3523
+ 40274      00000000 
+ 40275 b879 02       		.byte	0x2
+ 40276 b87a 9806     		.value	0x698
+ 40277 b87c B5B80000 		.long	0xb8b5
+ 40278 b880 32       		.uleb128 0x32
+ 40279 b881 BE0E0000 		.long	0xebe
+ 40280 b885 03       		.byte	0x3
+ 40281 b886 91       		.byte	0x91
+ 40282 b887 C05D     		.sleb128 -4416
+ 40283 b889 35       		.uleb128 0x35
+ 40284 b88a CB0E0000 		.long	0xecb
+ 40285 b88e 00000000 		.quad	.LBB3525
+ 40285      00000000 
+ 40286 b896 00000000 		.quad	.LBE3525
+ 40286      00000000 
+ 40287 b89e 02       		.byte	0x2
+ 40288 b89f 4905     		.value	0x549
+ 40289 b8a1 32       		.uleb128 0x32
+ 40290 b8a2 E90E0000 		.long	0xee9
+ 40291 b8a6 03       		.byte	0x3
+ 40292 b8a7 91       		.byte	0x91
+ 40293 b8a8 DC5D     		.sleb128 -4388
+ 40294 b8aa 32       		.uleb128 0x32
+ 40295 b8ab DD0E0000 		.long	0xedd
+ 40296 b8af 03       		.byte	0x3
+ 40297 b8b0 91       		.byte	0x91
+ 40298 b8b1 E05D     		.sleb128 -4384
+ 40299 b8b3 00       		.byte	0x0
+ 40300 b8b4 00       		.byte	0x0
+ 40301 b8b5 33       		.uleb128 0x33
+ 40302 b8b6 00000000 		.quad	.LBB3527
+ 40302      00000000 
+ 40303 b8be 00000000 		.quad	.LBE3527
+ 40303      00000000 
+ 40304 b8c6 34       		.uleb128 0x34
+ 40305 b8c7 480C0000 		.long	0xc48
+ 40306 b8cb 04       		.byte	0x4
+ 40307 b8cc 91       		.byte	0x91
+ 40308 b8cd B0B57F   		.sleb128 -9552
+ 40309 b8d0 00       		.byte	0x0
+ 40310 b8d1 00       		.byte	0x0
+ 40311 b8d2 00       		.byte	0x0
+ 40312 b8d3 31       		.uleb128 0x31
+ 40313 b8d4 F60E0000 		.long	0xef6
+ 40314 b8d8 00000000 		.quad	.LBB3528
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1020
+
+
+ 40314      00000000 
+ 40315 b8e0 00000000 		.quad	.LBE3528
+ 40315      00000000 
+ 40316 b8e8 02       		.byte	0x2
+ 40317 b8e9 8C07     		.value	0x78c
+ 40318 b8eb E8BA0000 		.long	0xbae8
+ 40319 b8ef 32       		.uleb128 0x32
+ 40320 b8f0 080F0000 		.long	0xf08
+ 40321 b8f4 03       		.byte	0x3
+ 40322 b8f5 91       		.byte	0x91
+ 40323 b8f6 F05D     		.sleb128 -4368
+ 40324 b8f8 33       		.uleb128 0x33
+ 40325 b8f9 00000000 		.quad	.LBB3529
+ 40325      00000000 
+ 40326 b901 00000000 		.quad	.LBE3529
+ 40326      00000000 
+ 40327 b909 34       		.uleb128 0x34
+ 40328 b90a 140F0000 		.long	0xf14
+ 40329 b90e 04       		.byte	0x4
+ 40330 b90f 76       		.byte	0x76
+ 40331 b910 C0B17F   		.sleb128 -10048
+ 40332 b913 31       		.uleb128 0x31
+ 40333 b914 210F0000 		.long	0xf21
+ 40334 b918 00000000 		.quad	.LBB3530
+ 40334      00000000 
+ 40335 b920 00000000 		.quad	.LBE3530
+ 40335      00000000 
+ 40336 b928 02       		.byte	0x2
+ 40337 b929 1F06     		.value	0x61f
+ 40338 b92b B0B90000 		.long	0xb9b0
+ 40339 b92f 32       		.uleb128 0x32
+ 40340 b930 330F0000 		.long	0xf33
+ 40341 b934 03       		.byte	0x3
+ 40342 b935 91       		.byte	0x91
+ 40343 b936 805E     		.sleb128 -4352
+ 40344 b938 33       		.uleb128 0x33
+ 40345 b939 00000000 		.quad	.LBB3531
+ 40345      00000000 
+ 40346 b941 00000000 		.quad	.LBE3531
+ 40346      00000000 
+ 40347 b949 34       		.uleb128 0x34
+ 40348 b94a 3F0F0000 		.long	0xf3f
+ 40349 b94e 09       		.byte	0x9
+ 40350 b94f 03       		.byte	0x3
+ 40351 b950 00000000 		.quad	mask.7943
+ 40351      00000000 
+ 40352 b958 35       		.uleb128 0x35
+ 40353 b959 A00D0000 		.long	0xda0
+ 40354 b95d 00000000 		.quad	.LBB3532
+ 40354      00000000 
+ 40355 b965 00000000 		.quad	.LBE3532
+ 40355      00000000 
+ 40356 b96d 02       		.byte	0x2
+ 40357 b96e FE04     		.value	0x4fe
+ 40358 b970 32       		.uleb128 0x32
+ 40359 b971 BE0D0000 		.long	0xdbe
+ 40360 b975 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1021
+
+
+ 40361 b976 91       		.byte	0x91
+ 40362 b977 905E     		.sleb128 -4336
+ 40363 b979 32       		.uleb128 0x32
+ 40364 b97a B20D0000 		.long	0xdb2
+ 40365 b97e 03       		.byte	0x3
+ 40366 b97f 91       		.byte	0x91
+ 40367 b980 A05E     		.sleb128 -4320
+ 40368 b982 35       		.uleb128 0x35
+ 40369 b983 CB0D0000 		.long	0xdcb
+ 40370 b987 00000000 		.quad	.LBB3534
+ 40370      00000000 
+ 40371 b98f 00000000 		.quad	.LBE3534
+ 40371      00000000 
+ 40372 b997 02       		.byte	0x2
+ 40373 b998 7501     		.value	0x175
+ 40374 b99a 32       		.uleb128 0x32
+ 40375 b99b E90D0000 		.long	0xde9
+ 40376 b99f 03       		.byte	0x3
+ 40377 b9a0 91       		.byte	0x91
+ 40378 b9a1 B05E     		.sleb128 -4304
+ 40379 b9a3 32       		.uleb128 0x32
+ 40380 b9a4 DD0D0000 		.long	0xddd
+ 40381 b9a8 03       		.byte	0x3
+ 40382 b9a9 91       		.byte	0x91
+ 40383 b9aa C05E     		.sleb128 -4288
+ 40384 b9ac 00       		.byte	0x0
+ 40385 b9ad 00       		.byte	0x0
+ 40386 b9ae 00       		.byte	0x0
+ 40387 b9af 00       		.byte	0x0
+ 40388 b9b0 31       		.uleb128 0x31
+ 40389 b9b1 210F0000 		.long	0xf21
+ 40390 b9b5 00000000 		.quad	.LBB3536
+ 40390      00000000 
+ 40391 b9bd 00000000 		.quad	.LBE3536
+ 40391      00000000 
+ 40392 b9c5 02       		.byte	0x2
+ 40393 b9c6 2006     		.value	0x620
+ 40394 b9c8 4DBA0000 		.long	0xba4d
+ 40395 b9cc 32       		.uleb128 0x32
+ 40396 b9cd 330F0000 		.long	0xf33
+ 40397 b9d1 03       		.byte	0x3
+ 40398 b9d2 91       		.byte	0x91
+ 40399 b9d3 D05E     		.sleb128 -4272
+ 40400 b9d5 33       		.uleb128 0x33
+ 40401 b9d6 00000000 		.quad	.LBB3537
+ 40401      00000000 
+ 40402 b9de 00000000 		.quad	.LBE3537
+ 40402      00000000 
+ 40403 b9e6 34       		.uleb128 0x34
+ 40404 b9e7 3F0F0000 		.long	0xf3f
+ 40405 b9eb 09       		.byte	0x9
+ 40406 b9ec 03       		.byte	0x3
+ 40407 b9ed 00000000 		.quad	mask.7943
+ 40407      00000000 
+ 40408 b9f5 35       		.uleb128 0x35
+ 40409 b9f6 A00D0000 		.long	0xda0
+ 40410 b9fa 00000000 		.quad	.LBB3538
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1022
+
+
+ 40410      00000000 
+ 40411 ba02 00000000 		.quad	.LBE3538
+ 40411      00000000 
+ 40412 ba0a 02       		.byte	0x2
+ 40413 ba0b FE04     		.value	0x4fe
+ 40414 ba0d 32       		.uleb128 0x32
+ 40415 ba0e BE0D0000 		.long	0xdbe
+ 40416 ba12 03       		.byte	0x3
+ 40417 ba13 91       		.byte	0x91
+ 40418 ba14 E05E     		.sleb128 -4256
+ 40419 ba16 32       		.uleb128 0x32
+ 40420 ba17 B20D0000 		.long	0xdb2
+ 40421 ba1b 03       		.byte	0x3
+ 40422 ba1c 91       		.byte	0x91
+ 40423 ba1d F05E     		.sleb128 -4240
+ 40424 ba1f 35       		.uleb128 0x35
+ 40425 ba20 CB0D0000 		.long	0xdcb
+ 40426 ba24 00000000 		.quad	.LBB3540
+ 40426      00000000 
+ 40427 ba2c 00000000 		.quad	.LBE3540
+ 40427      00000000 
+ 40428 ba34 02       		.byte	0x2
+ 40429 ba35 7501     		.value	0x175
+ 40430 ba37 32       		.uleb128 0x32
+ 40431 ba38 E90D0000 		.long	0xde9
+ 40432 ba3c 03       		.byte	0x3
+ 40433 ba3d 91       		.byte	0x91
+ 40434 ba3e 805F     		.sleb128 -4224
+ 40435 ba40 32       		.uleb128 0x32
+ 40436 ba41 DD0D0000 		.long	0xddd
+ 40437 ba45 03       		.byte	0x3
+ 40438 ba46 91       		.byte	0x91
+ 40439 ba47 905F     		.sleb128 -4208
+ 40440 ba49 00       		.byte	0x0
+ 40441 ba4a 00       		.byte	0x0
+ 40442 ba4b 00       		.byte	0x0
+ 40443 ba4c 00       		.byte	0x0
+ 40444 ba4d 35       		.uleb128 0x35
+ 40445 ba4e 210F0000 		.long	0xf21
+ 40446 ba52 00000000 		.quad	.LBB3542
+ 40446      00000000 
+ 40447 ba5a 00000000 		.quad	.LBE3542
+ 40447      00000000 
+ 40448 ba62 02       		.byte	0x2
+ 40449 ba63 2106     		.value	0x621
+ 40450 ba65 32       		.uleb128 0x32
+ 40451 ba66 330F0000 		.long	0xf33
+ 40452 ba6a 03       		.byte	0x3
+ 40453 ba6b 91       		.byte	0x91
+ 40454 ba6c A05F     		.sleb128 -4192
+ 40455 ba6e 33       		.uleb128 0x33
+ 40456 ba6f 00000000 		.quad	.LBB3543
+ 40456      00000000 
+ 40457 ba77 00000000 		.quad	.LBE3543
+ 40457      00000000 
+ 40458 ba7f 34       		.uleb128 0x34
+ 40459 ba80 3F0F0000 		.long	0xf3f
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1023
+
+
+ 40460 ba84 09       		.byte	0x9
+ 40461 ba85 03       		.byte	0x3
+ 40462 ba86 00000000 		.quad	mask.7943
+ 40462      00000000 
+ 40463 ba8e 35       		.uleb128 0x35
+ 40464 ba8f A00D0000 		.long	0xda0
+ 40465 ba93 00000000 		.quad	.LBB3544
+ 40465      00000000 
+ 40466 ba9b 00000000 		.quad	.LBE3544
+ 40466      00000000 
+ 40467 baa3 02       		.byte	0x2
+ 40468 baa4 FE04     		.value	0x4fe
+ 40469 baa6 32       		.uleb128 0x32
+ 40470 baa7 BE0D0000 		.long	0xdbe
+ 40471 baab 03       		.byte	0x3
+ 40472 baac 91       		.byte	0x91
+ 40473 baad B05F     		.sleb128 -4176
+ 40474 baaf 32       		.uleb128 0x32
+ 40475 bab0 B20D0000 		.long	0xdb2
+ 40476 bab4 03       		.byte	0x3
+ 40477 bab5 91       		.byte	0x91
+ 40478 bab6 C05F     		.sleb128 -4160
+ 40479 bab8 35       		.uleb128 0x35
+ 40480 bab9 CB0D0000 		.long	0xdcb
+ 40481 babd 00000000 		.quad	.LBB3546
+ 40481      00000000 
+ 40482 bac5 00000000 		.quad	.LBE3546
+ 40482      00000000 
+ 40483 bacd 02       		.byte	0x2
+ 40484 bace 7501     		.value	0x175
+ 40485 bad0 32       		.uleb128 0x32
+ 40486 bad1 E90D0000 		.long	0xde9
+ 40487 bad5 03       		.byte	0x3
+ 40488 bad6 91       		.byte	0x91
+ 40489 bad7 D05F     		.sleb128 -4144
+ 40490 bad9 32       		.uleb128 0x32
+ 40491 bada DD0D0000 		.long	0xddd
+ 40492 bade 03       		.byte	0x3
+ 40493 badf 91       		.byte	0x91
+ 40494 bae0 E05F     		.sleb128 -4128
+ 40495 bae2 00       		.byte	0x0
+ 40496 bae3 00       		.byte	0x0
+ 40497 bae4 00       		.byte	0x0
+ 40498 bae5 00       		.byte	0x0
+ 40499 bae6 00       		.byte	0x0
+ 40500 bae7 00       		.byte	0x0
+ 40501 bae8 31       		.uleb128 0x31
+ 40502 bae9 860E0000 		.long	0xe86
+ 40503 baed 00000000 		.quad	.LBB3548
+ 40503      00000000 
+ 40504 baf5 00000000 		.quad	.LBE3548
+ 40504      00000000 
+ 40505 bafd 02       		.byte	0x2
+ 40506 bafe 8C07     		.value	0x78c
+ 40507 bb00 17BB0000 		.long	0xbb17
+ 40508 bb04 32       		.uleb128 0x32
+ 40509 bb05 A10E0000 		.long	0xea1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1024
+
+
+ 40510 bb09 03       		.byte	0x3
+ 40511 bb0a 91       		.byte	0x91
+ 40512 bb0b F05F     		.sleb128 -4112
+ 40513 bb0d 32       		.uleb128 0x32
+ 40514 bb0e 970E0000 		.long	0xe97
+ 40515 bb12 03       		.byte	0x3
+ 40516 bb13 91       		.byte	0x91
+ 40517 bb14 8060     		.sleb128 -4096
+ 40518 bb16 00       		.byte	0x0
+ 40519 bb17 31       		.uleb128 0x31
+ 40520 bb18 8F940000 		.long	0x948f
+ 40521 bb1c 00000000 		.quad	.LBB3550
+ 40521      00000000 
+ 40522 bb24 00000000 		.quad	.LBE3550
+ 40522      00000000 
+ 40523 bb2c 02       		.byte	0x2
+ 40524 bb2d 8D07     		.value	0x78d
+ 40525 bb2f A9BB0000 		.long	0xbba9
+ 40526 bb33 32       		.uleb128 0x32
+ 40527 bb34 A1940000 		.long	0x94a1
+ 40528 bb38 03       		.byte	0x3
+ 40529 bb39 91       		.byte	0x91
+ 40530 bb3a 9060     		.sleb128 -4080
+ 40531 bb3c 33       		.uleb128 0x33
+ 40532 bb3d 00000000 		.quad	.LBB3551
+ 40532      00000000 
+ 40533 bb45 00000000 		.quad	.LBE3551
+ 40533      00000000 
+ 40534 bb4d 34       		.uleb128 0x34
+ 40535 bb4e AD940000 		.long	0x94ad
+ 40536 bb52 04       		.byte	0x4
+ 40537 bb53 91       		.byte	0x91
+ 40538 bb54 80B67F   		.sleb128 -9472
+ 40539 bb57 34       		.uleb128 0x34
+ 40540 bb58 B7940000 		.long	0x94b7
+ 40541 bb5c 03       		.byte	0x3
+ 40542 bb5d 91       		.byte	0x91
+ 40543 bb5e A460     		.sleb128 -4060
+ 40544 bb60 35       		.uleb128 0x35
+ 40545 bb61 BE560000 		.long	0x56be
+ 40546 bb65 00000000 		.quad	.LBB3552
+ 40546      00000000 
+ 40547 bb6d 00000000 		.quad	.LBE3552
+ 40547      00000000 
+ 40548 bb75 02       		.byte	0x2
+ 40549 bb76 7906     		.value	0x679
+ 40550 bb78 32       		.uleb128 0x32
+ 40551 bb79 D0560000 		.long	0x56d0
+ 40552 bb7d 03       		.byte	0x3
+ 40553 bb7e 91       		.byte	0x91
+ 40554 bb7f A860     		.sleb128 -4056
+ 40555 bb81 33       		.uleb128 0x33
+ 40556 bb82 00000000 		.quad	.LBB3553
+ 40556      00000000 
+ 40557 bb8a 00000000 		.quad	.LBE3553
+ 40557      00000000 
+ 40558 bb92 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1025
+
+
+ 40559 bb93 DA560000 		.long	0x56da
+ 40560 bb97 04       		.byte	0x4
+ 40561 bb98 91       		.byte	0x91
+ 40562 bb99 F0B57F   		.sleb128 -9488
+ 40563 bb9c 34       		.uleb128 0x34
+ 40564 bb9d E6560000 		.long	0x56e6
+ 40565 bba1 03       		.byte	0x3
+ 40566 bba2 91       		.byte	0x91
+ 40567 bba3 AC60     		.sleb128 -4052
+ 40568 bba5 00       		.byte	0x0
+ 40569 bba6 00       		.byte	0x0
+ 40570 bba7 00       		.byte	0x0
+ 40571 bba8 00       		.byte	0x0
+ 40572 bba9 31       		.uleb128 0x31
+ 40573 bbaa F60E0000 		.long	0xef6
+ 40574 bbae 00000000 		.quad	.LBB3554
+ 40574      00000000 
+ 40575 bbb6 00000000 		.quad	.LBE3554
+ 40575      00000000 
+ 40576 bbbe 02       		.byte	0x2
+ 40577 bbbf 8D07     		.value	0x78d
+ 40578 bbc1 BEBD0000 		.long	0xbdbe
+ 40579 bbc5 32       		.uleb128 0x32
+ 40580 bbc6 080F0000 		.long	0xf08
+ 40581 bbca 03       		.byte	0x3
+ 40582 bbcb 91       		.byte	0x91
+ 40583 bbcc B060     		.sleb128 -4048
+ 40584 bbce 33       		.uleb128 0x33
+ 40585 bbcf 00000000 		.quad	.LBB3555
+ 40585      00000000 
+ 40586 bbd7 00000000 		.quad	.LBE3555
+ 40586      00000000 
+ 40587 bbdf 34       		.uleb128 0x34
+ 40588 bbe0 140F0000 		.long	0xf14
+ 40589 bbe4 04       		.byte	0x4
+ 40590 bbe5 76       		.byte	0x76
+ 40591 bbe6 D0B17F   		.sleb128 -10032
+ 40592 bbe9 31       		.uleb128 0x31
+ 40593 bbea 210F0000 		.long	0xf21
+ 40594 bbee 00000000 		.quad	.LBB3556
+ 40594      00000000 
+ 40595 bbf6 00000000 		.quad	.LBE3556
+ 40595      00000000 
+ 40596 bbfe 02       		.byte	0x2
+ 40597 bbff 1F06     		.value	0x61f
+ 40598 bc01 86BC0000 		.long	0xbc86
+ 40599 bc05 32       		.uleb128 0x32
+ 40600 bc06 330F0000 		.long	0xf33
+ 40601 bc0a 03       		.byte	0x3
+ 40602 bc0b 91       		.byte	0x91
+ 40603 bc0c C060     		.sleb128 -4032
+ 40604 bc0e 33       		.uleb128 0x33
+ 40605 bc0f 00000000 		.quad	.LBB3557
+ 40605      00000000 
+ 40606 bc17 00000000 		.quad	.LBE3557
+ 40606      00000000 
+ 40607 bc1f 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1026
+
+
+ 40608 bc20 3F0F0000 		.long	0xf3f
+ 40609 bc24 09       		.byte	0x9
+ 40610 bc25 03       		.byte	0x3
+ 40611 bc26 00000000 		.quad	mask.7943
+ 40611      00000000 
+ 40612 bc2e 35       		.uleb128 0x35
+ 40613 bc2f A00D0000 		.long	0xda0
+ 40614 bc33 00000000 		.quad	.LBB3558
+ 40614      00000000 
+ 40615 bc3b 00000000 		.quad	.LBE3558
+ 40615      00000000 
+ 40616 bc43 02       		.byte	0x2
+ 40617 bc44 FE04     		.value	0x4fe
+ 40618 bc46 32       		.uleb128 0x32
+ 40619 bc47 BE0D0000 		.long	0xdbe
+ 40620 bc4b 03       		.byte	0x3
+ 40621 bc4c 91       		.byte	0x91
+ 40622 bc4d D060     		.sleb128 -4016
+ 40623 bc4f 32       		.uleb128 0x32
+ 40624 bc50 B20D0000 		.long	0xdb2
+ 40625 bc54 03       		.byte	0x3
+ 40626 bc55 91       		.byte	0x91
+ 40627 bc56 E060     		.sleb128 -4000
+ 40628 bc58 35       		.uleb128 0x35
+ 40629 bc59 CB0D0000 		.long	0xdcb
+ 40630 bc5d 00000000 		.quad	.LBB3560
+ 40630      00000000 
+ 40631 bc65 00000000 		.quad	.LBE3560
+ 40631      00000000 
+ 40632 bc6d 02       		.byte	0x2
+ 40633 bc6e 7501     		.value	0x175
+ 40634 bc70 32       		.uleb128 0x32
+ 40635 bc71 E90D0000 		.long	0xde9
+ 40636 bc75 03       		.byte	0x3
+ 40637 bc76 91       		.byte	0x91
+ 40638 bc77 F060     		.sleb128 -3984
+ 40639 bc79 32       		.uleb128 0x32
+ 40640 bc7a DD0D0000 		.long	0xddd
+ 40641 bc7e 03       		.byte	0x3
+ 40642 bc7f 91       		.byte	0x91
+ 40643 bc80 8061     		.sleb128 -3968
+ 40644 bc82 00       		.byte	0x0
+ 40645 bc83 00       		.byte	0x0
+ 40646 bc84 00       		.byte	0x0
+ 40647 bc85 00       		.byte	0x0
+ 40648 bc86 31       		.uleb128 0x31
+ 40649 bc87 210F0000 		.long	0xf21
+ 40650 bc8b 00000000 		.quad	.LBB3562
+ 40650      00000000 
+ 40651 bc93 00000000 		.quad	.LBE3562
+ 40651      00000000 
+ 40652 bc9b 02       		.byte	0x2
+ 40653 bc9c 2006     		.value	0x620
+ 40654 bc9e 23BD0000 		.long	0xbd23
+ 40655 bca2 32       		.uleb128 0x32
+ 40656 bca3 330F0000 		.long	0xf33
+ 40657 bca7 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1027
+
+
+ 40658 bca8 91       		.byte	0x91
+ 40659 bca9 9061     		.sleb128 -3952
+ 40660 bcab 33       		.uleb128 0x33
+ 40661 bcac 00000000 		.quad	.LBB3563
+ 40661      00000000 
+ 40662 bcb4 00000000 		.quad	.LBE3563
+ 40662      00000000 
+ 40663 bcbc 34       		.uleb128 0x34
+ 40664 bcbd 3F0F0000 		.long	0xf3f
+ 40665 bcc1 09       		.byte	0x9
+ 40666 bcc2 03       		.byte	0x3
+ 40667 bcc3 00000000 		.quad	mask.7943
+ 40667      00000000 
+ 40668 bccb 35       		.uleb128 0x35
+ 40669 bccc A00D0000 		.long	0xda0
+ 40670 bcd0 00000000 		.quad	.LBB3564
+ 40670      00000000 
+ 40671 bcd8 00000000 		.quad	.LBE3564
+ 40671      00000000 
+ 40672 bce0 02       		.byte	0x2
+ 40673 bce1 FE04     		.value	0x4fe
+ 40674 bce3 32       		.uleb128 0x32
+ 40675 bce4 BE0D0000 		.long	0xdbe
+ 40676 bce8 03       		.byte	0x3
+ 40677 bce9 91       		.byte	0x91
+ 40678 bcea A061     		.sleb128 -3936
+ 40679 bcec 32       		.uleb128 0x32
+ 40680 bced B20D0000 		.long	0xdb2
+ 40681 bcf1 03       		.byte	0x3
+ 40682 bcf2 91       		.byte	0x91
+ 40683 bcf3 B061     		.sleb128 -3920
+ 40684 bcf5 35       		.uleb128 0x35
+ 40685 bcf6 CB0D0000 		.long	0xdcb
+ 40686 bcfa 00000000 		.quad	.LBB3566
+ 40686      00000000 
+ 40687 bd02 00000000 		.quad	.LBE3566
+ 40687      00000000 
+ 40688 bd0a 02       		.byte	0x2
+ 40689 bd0b 7501     		.value	0x175
+ 40690 bd0d 32       		.uleb128 0x32
+ 40691 bd0e E90D0000 		.long	0xde9
+ 40692 bd12 03       		.byte	0x3
+ 40693 bd13 91       		.byte	0x91
+ 40694 bd14 C061     		.sleb128 -3904
+ 40695 bd16 32       		.uleb128 0x32
+ 40696 bd17 DD0D0000 		.long	0xddd
+ 40697 bd1b 03       		.byte	0x3
+ 40698 bd1c 91       		.byte	0x91
+ 40699 bd1d D061     		.sleb128 -3888
+ 40700 bd1f 00       		.byte	0x0
+ 40701 bd20 00       		.byte	0x0
+ 40702 bd21 00       		.byte	0x0
+ 40703 bd22 00       		.byte	0x0
+ 40704 bd23 35       		.uleb128 0x35
+ 40705 bd24 210F0000 		.long	0xf21
+ 40706 bd28 00000000 		.quad	.LBB3568
+ 40706      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1028
+
+
+ 40707 bd30 00000000 		.quad	.LBE3568
+ 40707      00000000 
+ 40708 bd38 02       		.byte	0x2
+ 40709 bd39 2106     		.value	0x621
+ 40710 bd3b 32       		.uleb128 0x32
+ 40711 bd3c 330F0000 		.long	0xf33
+ 40712 bd40 03       		.byte	0x3
+ 40713 bd41 91       		.byte	0x91
+ 40714 bd42 E061     		.sleb128 -3872
+ 40715 bd44 33       		.uleb128 0x33
+ 40716 bd45 00000000 		.quad	.LBB3569
+ 40716      00000000 
+ 40717 bd4d 00000000 		.quad	.LBE3569
+ 40717      00000000 
+ 40718 bd55 34       		.uleb128 0x34
+ 40719 bd56 3F0F0000 		.long	0xf3f
+ 40720 bd5a 09       		.byte	0x9
+ 40721 bd5b 03       		.byte	0x3
+ 40722 bd5c 00000000 		.quad	mask.7943
+ 40722      00000000 
+ 40723 bd64 35       		.uleb128 0x35
+ 40724 bd65 A00D0000 		.long	0xda0
+ 40725 bd69 00000000 		.quad	.LBB3570
+ 40725      00000000 
+ 40726 bd71 00000000 		.quad	.LBE3570
+ 40726      00000000 
+ 40727 bd79 02       		.byte	0x2
+ 40728 bd7a FE04     		.value	0x4fe
+ 40729 bd7c 32       		.uleb128 0x32
+ 40730 bd7d BE0D0000 		.long	0xdbe
+ 40731 bd81 03       		.byte	0x3
+ 40732 bd82 91       		.byte	0x91
+ 40733 bd83 F061     		.sleb128 -3856
+ 40734 bd85 32       		.uleb128 0x32
+ 40735 bd86 B20D0000 		.long	0xdb2
+ 40736 bd8a 03       		.byte	0x3
+ 40737 bd8b 91       		.byte	0x91
+ 40738 bd8c 8062     		.sleb128 -3840
+ 40739 bd8e 35       		.uleb128 0x35
+ 40740 bd8f CB0D0000 		.long	0xdcb
+ 40741 bd93 00000000 		.quad	.LBB3572
+ 40741      00000000 
+ 40742 bd9b 00000000 		.quad	.LBE3572
+ 40742      00000000 
+ 40743 bda3 02       		.byte	0x2
+ 40744 bda4 7501     		.value	0x175
+ 40745 bda6 32       		.uleb128 0x32
+ 40746 bda7 E90D0000 		.long	0xde9
+ 40747 bdab 03       		.byte	0x3
+ 40748 bdac 91       		.byte	0x91
+ 40749 bdad 9062     		.sleb128 -3824
+ 40750 bdaf 32       		.uleb128 0x32
+ 40751 bdb0 DD0D0000 		.long	0xddd
+ 40752 bdb4 03       		.byte	0x3
+ 40753 bdb5 91       		.byte	0x91
+ 40754 bdb6 A062     		.sleb128 -3808
+ 40755 bdb8 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1029
+
+
+ 40756 bdb9 00       		.byte	0x0
+ 40757 bdba 00       		.byte	0x0
+ 40758 bdbb 00       		.byte	0x0
+ 40759 bdbc 00       		.byte	0x0
+ 40760 bdbd 00       		.byte	0x0
+ 40761 bdbe 31       		.uleb128 0x31
+ 40762 bdbf 860E0000 		.long	0xe86
+ 40763 bdc3 00000000 		.quad	.LBB3574
+ 40763      00000000 
+ 40764 bdcb 00000000 		.quad	.LBE3574
+ 40764      00000000 
+ 40765 bdd3 02       		.byte	0x2
+ 40766 bdd4 8D07     		.value	0x78d
+ 40767 bdd6 EDBD0000 		.long	0xbded
+ 40768 bdda 32       		.uleb128 0x32
+ 40769 bddb A10E0000 		.long	0xea1
+ 40770 bddf 03       		.byte	0x3
+ 40771 bde0 91       		.byte	0x91
+ 40772 bde1 B062     		.sleb128 -3792
+ 40773 bde3 32       		.uleb128 0x32
+ 40774 bde4 970E0000 		.long	0xe97
+ 40775 bde8 03       		.byte	0x3
+ 40776 bde9 91       		.byte	0x91
+ 40777 bdea C062     		.sleb128 -3776
+ 40778 bdec 00       		.byte	0x0
+ 40779 bded 31       		.uleb128 0x31
+ 40780 bdee D50B0000 		.long	0xbd5
+ 40781 bdf2 00000000 		.quad	.LBB3576
+ 40781      00000000 
+ 40782 bdfa 00000000 		.quad	.LBE3576
+ 40782      00000000 
+ 40783 be02 02       		.byte	0x2
+ 40784 be03 8E07     		.value	0x78e
+ 40785 be05 D0C20000 		.long	0xc2d0
+ 40786 be09 32       		.uleb128 0x32
+ 40787 be0a F30B0000 		.long	0xbf3
+ 40788 be0e 03       		.byte	0x3
+ 40789 be0f 91       		.byte	0x91
+ 40790 be10 DC62     		.sleb128 -3748
+ 40791 be12 32       		.uleb128 0x32
+ 40792 be13 E70B0000 		.long	0xbe7
+ 40793 be17 03       		.byte	0x3
+ 40794 be18 91       		.byte	0x91
+ 40795 be19 E062     		.sleb128 -3744
+ 40796 be1b 33       		.uleb128 0x33
+ 40797 be1c 00000000 		.quad	.LBB3577
+ 40797      00000000 
+ 40798 be24 00000000 		.quad	.LBE3577
+ 40798      00000000 
+ 40799 be2c 34       		.uleb128 0x34
+ 40800 be2d FF0B0000 		.long	0xbff
+ 40801 be31 04       		.byte	0x4
+ 40802 be32 76       		.byte	0x76
+ 40803 be33 F0B17F   		.sleb128 -10000
+ 40804 be36 34       		.uleb128 0x34
+ 40805 be37 0B0C0000 		.long	0xc0b
+ 40806 be3b 04       		.byte	0x4
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1030
+
+
+ 40807 be3c 76       		.byte	0x76
+ 40808 be3d E0B17F   		.sleb128 -10016
+ 40809 be40 31       		.uleb128 0x31
+ 40810 be41 540C0000 		.long	0xc54
+ 40811 be45 00000000 		.quad	.LBB3578
+ 40811      00000000 
+ 40812 be4d 00000000 		.quad	.LBE3578
+ 40812      00000000 
+ 40813 be55 02       		.byte	0x2
+ 40814 be56 9106     		.value	0x691
+ 40815 be58 ACBE0000 		.long	0xbeac
+ 40816 be5c 32       		.uleb128 0x32
+ 40817 be5d 7E0C0000 		.long	0xc7e
+ 40818 be61 03       		.byte	0x3
+ 40819 be62 91       		.byte	0x91
+ 40820 be63 F862     		.sleb128 -3720
+ 40821 be65 32       		.uleb128 0x32
+ 40822 be66 720C0000 		.long	0xc72
+ 40823 be6a 03       		.byte	0x3
+ 40824 be6b 91       		.byte	0x91
+ 40825 be6c FC62     		.sleb128 -3716
+ 40826 be6e 32       		.uleb128 0x32
+ 40827 be6f 660C0000 		.long	0xc66
+ 40828 be73 03       		.byte	0x3
+ 40829 be74 91       		.byte	0x91
+ 40830 be75 8063     		.sleb128 -3712
+ 40831 be77 35       		.uleb128 0x35
+ 40832 be78 8B0C0000 		.long	0xc8b
+ 40833 be7c 00000000 		.quad	.LBB3580
+ 40833      00000000 
+ 40834 be84 00000000 		.quad	.LBE3580
+ 40834      00000000 
+ 40835 be8c 02       		.byte	0x2
+ 40836 be8d 0702     		.value	0x207
+ 40837 be8f 32       		.uleb128 0x32
+ 40838 be90 B40C0000 		.long	0xcb4
+ 40839 be94 03       		.byte	0x3
+ 40840 be95 91       		.byte	0x91
+ 40841 be96 9863     		.sleb128 -3688
+ 40842 be98 32       		.uleb128 0x32
+ 40843 be99 A90C0000 		.long	0xca9
+ 40844 be9d 03       		.byte	0x3
+ 40845 be9e 91       		.byte	0x91
+ 40846 be9f 9C63     		.sleb128 -3684
+ 40847 bea1 32       		.uleb128 0x32
+ 40848 bea2 9D0C0000 		.long	0xc9d
+ 40849 bea6 03       		.byte	0x3
+ 40850 bea7 91       		.byte	0x91
+ 40851 bea8 A063     		.sleb128 -3680
+ 40852 beaa 00       		.byte	0x0
+ 40853 beab 00       		.byte	0x0
+ 40854 beac 31       		.uleb128 0x31
+ 40855 bead C10C0000 		.long	0xcc1
+ 40856 beb1 00000000 		.quad	.LBB3582
+ 40856      00000000 
+ 40857 beb9 00000000 		.quad	.LBE3582
+ 40857      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1031
+
+
+ 40858 bec1 02       		.byte	0x2
+ 40859 bec2 9206     		.value	0x692
+ 40860 bec4 35C10000 		.long	0xc135
+ 40861 bec8 32       		.uleb128 0x32
+ 40862 bec9 D30C0000 		.long	0xcd3
+ 40863 becd 03       		.byte	0x3
+ 40864 bece 91       		.byte	0x91
+ 40865 becf B063     		.sleb128 -3664
+ 40866 bed1 35       		.uleb128 0x35
+ 40867 bed2 E00C0000 		.long	0xce0
+ 40868 bed6 00000000 		.quad	.LBB3584
+ 40868      00000000 
+ 40869 bede 00000000 		.quad	.LBE3584
+ 40869      00000000 
+ 40870 bee6 02       		.byte	0x2
+ 40871 bee7 7D03     		.value	0x37d
+ 40872 bee9 32       		.uleb128 0x32
+ 40873 beea FE0C0000 		.long	0xcfe
+ 40874 beee 03       		.byte	0x3
+ 40875 beef 91       		.byte	0x91
+ 40876 bef0 C863     		.sleb128 -3640
+ 40877 bef2 32       		.uleb128 0x32
+ 40878 bef3 F20C0000 		.long	0xcf2
+ 40879 bef7 03       		.byte	0x3
+ 40880 bef8 91       		.byte	0x91
+ 40881 bef9 D063     		.sleb128 -3632
+ 40882 befb 33       		.uleb128 0x33
+ 40883 befc 00000000 		.quad	.LBB3585
+ 40883      00000000 
+ 40884 bf04 00000000 		.quad	.LBE3585
+ 40884      00000000 
+ 40885 bf0c 34       		.uleb128 0x34
+ 40886 bf0d 0A0D0000 		.long	0xd0a
+ 40887 bf11 03       		.byte	0x3
+ 40888 bf12 91       		.byte	0x91
+ 40889 bf13 A064     		.sleb128 -3552
+ 40890 bf15 34       		.uleb128 0x34
+ 40891 bf16 150D0000 		.long	0xd15
+ 40892 bf1a 03       		.byte	0x3
+ 40893 bf1b 91       		.byte	0x91
+ 40894 bf1c 9064     		.sleb128 -3568
+ 40895 bf1e 34       		.uleb128 0x34
+ 40896 bf1f 200D0000 		.long	0xd20
+ 40897 bf23 03       		.byte	0x3
+ 40898 bf24 91       		.byte	0x91
+ 40899 bf25 8064     		.sleb128 -3584
+ 40900 bf27 34       		.uleb128 0x34
+ 40901 bf28 2C0D0000 		.long	0xd2c
+ 40902 bf2c 03       		.byte	0x3
+ 40903 bf2d 91       		.byte	0x91
+ 40904 bf2e F063     		.sleb128 -3600
+ 40905 bf30 34       		.uleb128 0x34
+ 40906 bf31 380D0000 		.long	0xd38
+ 40907 bf35 03       		.byte	0x3
+ 40908 bf36 91       		.byte	0x91
+ 40909 bf37 EC63     		.sleb128 -3604
+ 40910 bf39 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1032
+
+
+ 40911 bf3a 4F0D0000 		.long	0xd4f
+ 40912 bf3e 00000000 		.quad	.LBB3586
+ 40912      00000000 
+ 40913 bf46 00000000 		.quad	.LBE3586
+ 40913      00000000 
+ 40914 bf4e 02       		.byte	0x2
+ 40915 bf4f 5603     		.value	0x356
+ 40916 bf51 68BF0000 		.long	0xbf68
+ 40917 bf55 32       		.uleb128 0x32
+ 40918 bf56 6A0D0000 		.long	0xd6a
+ 40919 bf5a 03       		.byte	0x3
+ 40920 bf5b 91       		.byte	0x91
+ 40921 bf5c B064     		.sleb128 -3536
+ 40922 bf5e 32       		.uleb128 0x32
+ 40923 bf5f 600D0000 		.long	0xd60
+ 40924 bf63 03       		.byte	0x3
+ 40925 bf64 91       		.byte	0x91
+ 40926 bf65 C064     		.sleb128 -3520
+ 40927 bf67 00       		.byte	0x0
+ 40928 bf68 31       		.uleb128 0x31
+ 40929 bf69 750D0000 		.long	0xd75
+ 40930 bf6d 00000000 		.quad	.LBB3588
+ 40930      00000000 
+ 40931 bf75 00000000 		.quad	.LBE3588
+ 40931      00000000 
+ 40932 bf7d 02       		.byte	0x2
+ 40933 bf7e 5903     		.value	0x359
+ 40934 bf80 97BF0000 		.long	0xbf97
+ 40935 bf84 32       		.uleb128 0x32
+ 40936 bf85 930D0000 		.long	0xd93
+ 40937 bf89 03       		.byte	0x3
+ 40938 bf8a 91       		.byte	0x91
+ 40939 bf8b DC64     		.sleb128 -3492
+ 40940 bf8d 32       		.uleb128 0x32
+ 40941 bf8e 870D0000 		.long	0xd87
+ 40942 bf92 03       		.byte	0x3
+ 40943 bf93 91       		.byte	0x91
+ 40944 bf94 E064     		.sleb128 -3488
+ 40945 bf96 00       		.byte	0x0
+ 40946 bf97 31       		.uleb128 0x31
+ 40947 bf98 4F0D0000 		.long	0xd4f
+ 40948 bf9c 00000000 		.quad	.LBB3590
+ 40948      00000000 
+ 40949 bfa4 00000000 		.quad	.LBE3590
+ 40949      00000000 
+ 40950 bfac 02       		.byte	0x2
+ 40951 bfad 5B03     		.value	0x35b
+ 40952 bfaf C6BF0000 		.long	0xbfc6
+ 40953 bfb3 32       		.uleb128 0x32
+ 40954 bfb4 6A0D0000 		.long	0xd6a
+ 40955 bfb8 03       		.byte	0x3
+ 40956 bfb9 91       		.byte	0x91
+ 40957 bfba F064     		.sleb128 -3472
+ 40958 bfbc 32       		.uleb128 0x32
+ 40959 bfbd 600D0000 		.long	0xd60
+ 40960 bfc1 03       		.byte	0x3
+ 40961 bfc2 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1033
+
+
+ 40962 bfc3 8065     		.sleb128 -3456
+ 40963 bfc5 00       		.byte	0x0
+ 40964 bfc6 31       		.uleb128 0x31
+ 40965 bfc7 A00D0000 		.long	0xda0
+ 40966 bfcb 00000000 		.quad	.LBB3592
+ 40966      00000000 
+ 40967 bfd3 00000000 		.quad	.LBE3592
+ 40967      00000000 
+ 40968 bfdb 02       		.byte	0x2
+ 40969 bfdc 6403     		.value	0x364
+ 40970 bfde 20C00000 		.long	0xc020
+ 40971 bfe2 32       		.uleb128 0x32
+ 40972 bfe3 BE0D0000 		.long	0xdbe
+ 40973 bfe7 03       		.byte	0x3
+ 40974 bfe8 91       		.byte	0x91
+ 40975 bfe9 9065     		.sleb128 -3440
+ 40976 bfeb 32       		.uleb128 0x32
+ 40977 bfec B20D0000 		.long	0xdb2
+ 40978 bff0 03       		.byte	0x3
+ 40979 bff1 91       		.byte	0x91
+ 40980 bff2 A065     		.sleb128 -3424
+ 40981 bff4 35       		.uleb128 0x35
+ 40982 bff5 CB0D0000 		.long	0xdcb
+ 40983 bff9 00000000 		.quad	.LBB3594
+ 40983      00000000 
+ 40984 c001 00000000 		.quad	.LBE3594
+ 40984      00000000 
+ 40985 c009 02       		.byte	0x2
+ 40986 c00a 7501     		.value	0x175
+ 40987 c00c 32       		.uleb128 0x32
+ 40988 c00d E90D0000 		.long	0xde9
+ 40989 c011 03       		.byte	0x3
+ 40990 c012 91       		.byte	0x91
+ 40991 c013 B065     		.sleb128 -3408
+ 40992 c015 32       		.uleb128 0x32
+ 40993 c016 DD0D0000 		.long	0xddd
+ 40994 c01a 03       		.byte	0x3
+ 40995 c01b 91       		.byte	0x91
+ 40996 c01c C065     		.sleb128 -3392
+ 40997 c01e 00       		.byte	0x0
+ 40998 c01f 00       		.byte	0x0
+ 40999 c020 31       		.uleb128 0x31
+ 41000 c021 FB0D0000 		.long	0xdfb
+ 41001 c025 00000000 		.quad	.LBB3596
+ 41001      00000000 
+ 41002 c02d 00000000 		.quad	.LBE3596
+ 41002      00000000 
+ 41003 c035 02       		.byte	0x2
+ 41004 c036 6603     		.value	0x366
+ 41005 c038 4FC00000 		.long	0xc04f
+ 41006 c03c 32       		.uleb128 0x32
+ 41007 c03d 160E0000 		.long	0xe16
+ 41008 c041 03       		.byte	0x3
+ 41009 c042 91       		.byte	0x91
+ 41010 c043 D065     		.sleb128 -3376
+ 41011 c045 32       		.uleb128 0x32
+ 41012 c046 0C0E0000 		.long	0xe0c
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1034
+
+
+ 41013 c04a 03       		.byte	0x3
+ 41014 c04b 91       		.byte	0x91
+ 41015 c04c E065     		.sleb128 -3360
+ 41016 c04e 00       		.byte	0x0
+ 41017 c04f 31       		.uleb128 0x31
+ 41018 c050 A00D0000 		.long	0xda0
+ 41019 c054 00000000 		.quad	.LBB3598
+ 41019      00000000 
+ 41020 c05c 00000000 		.quad	.LBE3598
+ 41020      00000000 
+ 41021 c064 02       		.byte	0x2
+ 41022 c065 6803     		.value	0x368
+ 41023 c067 A9C00000 		.long	0xc0a9
+ 41024 c06b 32       		.uleb128 0x32
+ 41025 c06c BE0D0000 		.long	0xdbe
+ 41026 c070 03       		.byte	0x3
+ 41027 c071 91       		.byte	0x91
+ 41028 c072 F065     		.sleb128 -3344
+ 41029 c074 32       		.uleb128 0x32
+ 41030 c075 B20D0000 		.long	0xdb2
+ 41031 c079 03       		.byte	0x3
+ 41032 c07a 91       		.byte	0x91
+ 41033 c07b 8066     		.sleb128 -3328
+ 41034 c07d 35       		.uleb128 0x35
+ 41035 c07e CB0D0000 		.long	0xdcb
+ 41036 c082 00000000 		.quad	.LBB3600
+ 41036      00000000 
+ 41037 c08a 00000000 		.quad	.LBE3600
+ 41037      00000000 
+ 41038 c092 02       		.byte	0x2
+ 41039 c093 7501     		.value	0x175
+ 41040 c095 32       		.uleb128 0x32
+ 41041 c096 E90D0000 		.long	0xde9
+ 41042 c09a 03       		.byte	0x3
+ 41043 c09b 91       		.byte	0x91
+ 41044 c09c 9066     		.sleb128 -3312
+ 41045 c09e 32       		.uleb128 0x32
+ 41046 c09f DD0D0000 		.long	0xddd
+ 41047 c0a3 03       		.byte	0x3
+ 41048 c0a4 91       		.byte	0x91
+ 41049 c0a5 A066     		.sleb128 -3296
+ 41050 c0a7 00       		.byte	0x0
+ 41051 c0a8 00       		.byte	0x0
+ 41052 c0a9 31       		.uleb128 0x31
+ 41053 c0aa FB0D0000 		.long	0xdfb
+ 41054 c0ae 00000000 		.quad	.LBB3602
+ 41054      00000000 
+ 41055 c0b6 00000000 		.quad	.LBE3602
+ 41055      00000000 
+ 41056 c0be 02       		.byte	0x2
+ 41057 c0bf 6A03     		.value	0x36a
+ 41058 c0c1 D8C00000 		.long	0xc0d8
+ 41059 c0c5 32       		.uleb128 0x32
+ 41060 c0c6 160E0000 		.long	0xe16
+ 41061 c0ca 03       		.byte	0x3
+ 41062 c0cb 91       		.byte	0x91
+ 41063 c0cc B066     		.sleb128 -3280
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1035
+
+
+ 41064 c0ce 32       		.uleb128 0x32
+ 41065 c0cf 0C0E0000 		.long	0xe0c
+ 41066 c0d3 03       		.byte	0x3
+ 41067 c0d4 91       		.byte	0x91
+ 41068 c0d5 C066     		.sleb128 -3264
+ 41069 c0d7 00       		.byte	0x0
+ 41070 c0d8 31       		.uleb128 0x31
+ 41071 c0d9 210E0000 		.long	0xe21
+ 41072 c0dd 00000000 		.quad	.LBB3604
+ 41072      00000000 
+ 41073 c0e5 00000000 		.quad	.LBE3604
+ 41073      00000000 
+ 41074 c0ed 02       		.byte	0x2
+ 41075 c0ee 6C03     		.value	0x36c
+ 41076 c0f0 07C10000 		.long	0xc107
+ 41077 c0f4 32       		.uleb128 0x32
+ 41078 c0f5 3E0E0000 		.long	0xe3e
+ 41079 c0f9 03       		.byte	0x3
+ 41080 c0fa 91       		.byte	0x91
+ 41081 c0fb D066     		.sleb128 -3248
+ 41082 c0fd 32       		.uleb128 0x32
+ 41083 c0fe 330E0000 		.long	0xe33
+ 41084 c102 03       		.byte	0x3
+ 41085 c103 91       		.byte	0x91
+ 41086 c104 E066     		.sleb128 -3232
+ 41087 c106 00       		.byte	0x0
+ 41088 c107 35       		.uleb128 0x35
+ 41089 c108 4F0D0000 		.long	0xd4f
+ 41090 c10c 00000000 		.quad	.LBB3606
+ 41090      00000000 
+ 41091 c114 00000000 		.quad	.LBE3606
+ 41091      00000000 
+ 41092 c11c 02       		.byte	0x2
+ 41093 c11d 6E03     		.value	0x36e
+ 41094 c11f 32       		.uleb128 0x32
+ 41095 c120 6A0D0000 		.long	0xd6a
+ 41096 c124 03       		.byte	0x3
+ 41097 c125 91       		.byte	0x91
+ 41098 c126 F066     		.sleb128 -3216
+ 41099 c128 32       		.uleb128 0x32
+ 41100 c129 600D0000 		.long	0xd60
+ 41101 c12d 03       		.byte	0x3
+ 41102 c12e 91       		.byte	0x91
+ 41103 c12f 8067     		.sleb128 -3200
+ 41104 c131 00       		.byte	0x0
+ 41105 c132 00       		.byte	0x0
+ 41106 c133 00       		.byte	0x0
+ 41107 c134 00       		.byte	0x0
+ 41108 c135 36       		.uleb128 0x36
+ 41109 c136 00000000 		.quad	.LBB3608
+ 41109      00000000 
+ 41110 c13e 00000000 		.quad	.LBE3608
+ 41110      00000000 
+ 41111 c146 55C10000 		.long	0xc155
+ 41112 c14a 34       		.uleb128 0x34
+ 41113 c14b 1C0C0000 		.long	0xc1c
+ 41114 c14f 04       		.byte	0x4
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1036
+
+
+ 41115 c150 91       		.byte	0x91
+ 41116 c151 C0B67F   		.sleb128 -9408
+ 41117 c154 00       		.byte	0x0
+ 41118 c155 31       		.uleb128 0x31
+ 41119 c156 4A0E0000 		.long	0xe4a
+ 41120 c15a 00000000 		.quad	.LBB3609
+ 41120      00000000 
+ 41121 c162 00000000 		.quad	.LBE3609
+ 41121      00000000 
+ 41122 c16a 02       		.byte	0x2
+ 41123 c16b 9406     		.value	0x694
+ 41124 c16d F2C10000 		.long	0xc1f2
+ 41125 c171 32       		.uleb128 0x32
+ 41126 c172 5C0E0000 		.long	0xe5c
+ 41127 c176 03       		.byte	0x3
+ 41128 c177 91       		.byte	0x91
+ 41129 c178 9067     		.sleb128 -3184
+ 41130 c17a 33       		.uleb128 0x33
+ 41131 c17b 00000000 		.quad	.LBB3610
+ 41131      00000000 
+ 41132 c183 00000000 		.quad	.LBE3610
+ 41132      00000000 
+ 41133 c18b 34       		.uleb128 0x34
+ 41134 c18c 680E0000 		.long	0xe68
+ 41135 c190 09       		.byte	0x9
+ 41136 c191 03       		.byte	0x3
+ 41137 c192 00000000 		.quad	ShiftRowTable.7385
+ 41137      00000000 
+ 41138 c19a 35       		.uleb128 0x35
+ 41139 c19b A00D0000 		.long	0xda0
+ 41140 c19f 00000000 		.quad	.LBB3611
+ 41140      00000000 
+ 41141 c1a7 00000000 		.quad	.LBE3611
+ 41141      00000000 
+ 41142 c1af 02       		.byte	0x2
+ 41143 c1b0 9B02     		.value	0x29b
+ 41144 c1b2 32       		.uleb128 0x32
+ 41145 c1b3 BE0D0000 		.long	0xdbe
+ 41146 c1b7 03       		.byte	0x3
+ 41147 c1b8 91       		.byte	0x91
+ 41148 c1b9 A067     		.sleb128 -3168
+ 41149 c1bb 32       		.uleb128 0x32
+ 41150 c1bc B20D0000 		.long	0xdb2
+ 41151 c1c0 03       		.byte	0x3
+ 41152 c1c1 91       		.byte	0x91
+ 41153 c1c2 B067     		.sleb128 -3152
+ 41154 c1c4 35       		.uleb128 0x35
+ 41155 c1c5 CB0D0000 		.long	0xdcb
+ 41156 c1c9 00000000 		.quad	.LBB3613
+ 41156      00000000 
+ 41157 c1d1 00000000 		.quad	.LBE3613
+ 41157      00000000 
+ 41158 c1d9 02       		.byte	0x2
+ 41159 c1da 7501     		.value	0x175
+ 41160 c1dc 32       		.uleb128 0x32
+ 41161 c1dd E90D0000 		.long	0xde9
+ 41162 c1e1 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1037
+
+
+ 41163 c1e2 91       		.byte	0x91
+ 41164 c1e3 C067     		.sleb128 -3136
+ 41165 c1e5 32       		.uleb128 0x32
+ 41166 c1e6 DD0D0000 		.long	0xddd
+ 41167 c1ea 03       		.byte	0x3
+ 41168 c1eb 91       		.byte	0x91
+ 41169 c1ec D067     		.sleb128 -3120
+ 41170 c1ee 00       		.byte	0x0
+ 41171 c1ef 00       		.byte	0x0
+ 41172 c1f0 00       		.byte	0x0
+ 41173 c1f1 00       		.byte	0x0
+ 41174 c1f2 36       		.uleb128 0x36
+ 41175 c1f3 00000000 		.quad	.LBB3615
+ 41175      00000000 
+ 41176 c1fb 00000000 		.quad	.LBE3615
+ 41176      00000000 
+ 41177 c203 12C20000 		.long	0xc212
+ 41178 c207 34       		.uleb128 0x34
+ 41179 c208 2C0C0000 		.long	0xc2c
+ 41180 c20c 04       		.byte	0x4
+ 41181 c20d 91       		.byte	0x91
+ 41182 c20e B0B67F   		.sleb128 -9424
+ 41183 c211 00       		.byte	0x0
+ 41184 c212 31       		.uleb128 0x31
+ 41185 c213 860E0000 		.long	0xe86
+ 41186 c217 00000000 		.quad	.LBB3616
+ 41186      00000000 
+ 41187 c21f 00000000 		.quad	.LBE3616
+ 41187      00000000 
+ 41188 c227 02       		.byte	0x2
+ 41189 c228 9606     		.value	0x696
+ 41190 c22a 41C20000 		.long	0xc241
+ 41191 c22e 32       		.uleb128 0x32
+ 41192 c22f A10E0000 		.long	0xea1
+ 41193 c233 03       		.byte	0x3
+ 41194 c234 91       		.byte	0x91
+ 41195 c235 E067     		.sleb128 -3104
+ 41196 c237 32       		.uleb128 0x32
+ 41197 c238 970E0000 		.long	0xe97
+ 41198 c23c 03       		.byte	0x3
+ 41199 c23d 91       		.byte	0x91
+ 41200 c23e F067     		.sleb128 -3088
+ 41201 c240 00       		.byte	0x0
+ 41202 c241 36       		.uleb128 0x36
+ 41203 c242 00000000 		.quad	.LBB3618
+ 41203      00000000 
+ 41204 c24a 00000000 		.quad	.LBE3618
+ 41204      00000000 
+ 41205 c252 61C20000 		.long	0xc261
+ 41206 c256 34       		.uleb128 0x34
+ 41207 c257 3C0C0000 		.long	0xc3c
+ 41208 c25b 04       		.byte	0x4
+ 41209 c25c 91       		.byte	0x91
+ 41210 c25d A0B67F   		.sleb128 -9440
+ 41211 c260 00       		.byte	0x0
+ 41212 c261 31       		.uleb128 0x31
+ 41213 c262 AC0E0000 		.long	0xeac
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1038
+
+
+ 41214 c266 00000000 		.quad	.LBB3619
+ 41214      00000000 
+ 41215 c26e 00000000 		.quad	.LBE3619
+ 41215      00000000 
+ 41216 c276 02       		.byte	0x2
+ 41217 c277 9806     		.value	0x698
+ 41218 c279 B2C20000 		.long	0xc2b2
+ 41219 c27d 32       		.uleb128 0x32
+ 41220 c27e BE0E0000 		.long	0xebe
+ 41221 c282 03       		.byte	0x3
+ 41222 c283 91       		.byte	0x91
+ 41223 c284 8068     		.sleb128 -3072
+ 41224 c286 35       		.uleb128 0x35
+ 41225 c287 CB0E0000 		.long	0xecb
+ 41226 c28b 00000000 		.quad	.LBB3621
+ 41226      00000000 
+ 41227 c293 00000000 		.quad	.LBE3621
+ 41227      00000000 
+ 41228 c29b 02       		.byte	0x2
+ 41229 c29c 4905     		.value	0x549
+ 41230 c29e 32       		.uleb128 0x32
+ 41231 c29f E90E0000 		.long	0xee9
+ 41232 c2a3 03       		.byte	0x3
+ 41233 c2a4 91       		.byte	0x91
+ 41234 c2a5 9C68     		.sleb128 -3044
+ 41235 c2a7 32       		.uleb128 0x32
+ 41236 c2a8 DD0E0000 		.long	0xedd
+ 41237 c2ac 03       		.byte	0x3
+ 41238 c2ad 91       		.byte	0x91
+ 41239 c2ae A068     		.sleb128 -3040
+ 41240 c2b0 00       		.byte	0x0
+ 41241 c2b1 00       		.byte	0x0
+ 41242 c2b2 33       		.uleb128 0x33
+ 41243 c2b3 00000000 		.quad	.LBB3623
+ 41243      00000000 
+ 41244 c2bb 00000000 		.quad	.LBE3623
+ 41244      00000000 
+ 41245 c2c3 34       		.uleb128 0x34
+ 41246 c2c4 480C0000 		.long	0xc48
+ 41247 c2c8 04       		.byte	0x4
+ 41248 c2c9 91       		.byte	0x91
+ 41249 c2ca 90B67F   		.sleb128 -9456
+ 41250 c2cd 00       		.byte	0x0
+ 41251 c2ce 00       		.byte	0x0
+ 41252 c2cf 00       		.byte	0x0
+ 41253 c2d0 31       		.uleb128 0x31
+ 41254 c2d1 F60E0000 		.long	0xef6
+ 41255 c2d5 00000000 		.quad	.LBB3624
+ 41255      00000000 
+ 41256 c2dd 00000000 		.quad	.LBE3624
+ 41256      00000000 
+ 41257 c2e5 02       		.byte	0x2
+ 41258 c2e6 8E07     		.value	0x78e
+ 41259 c2e8 E5C40000 		.long	0xc4e5
+ 41260 c2ec 32       		.uleb128 0x32
+ 41261 c2ed 080F0000 		.long	0xf08
+ 41262 c2f1 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1039
+
+
+ 41263 c2f2 91       		.byte	0x91
+ 41264 c2f3 B068     		.sleb128 -3024
+ 41265 c2f5 33       		.uleb128 0x33
+ 41266 c2f6 00000000 		.quad	.LBB3625
+ 41266      00000000 
+ 41267 c2fe 00000000 		.quad	.LBE3625
+ 41267      00000000 
+ 41268 c306 34       		.uleb128 0x34
+ 41269 c307 140F0000 		.long	0xf14
+ 41270 c30b 04       		.byte	0x4
+ 41271 c30c 76       		.byte	0x76
+ 41272 c30d 80B27F   		.sleb128 -9984
+ 41273 c310 31       		.uleb128 0x31
+ 41274 c311 210F0000 		.long	0xf21
+ 41275 c315 00000000 		.quad	.LBB3626
+ 41275      00000000 
+ 41276 c31d 00000000 		.quad	.LBE3626
+ 41276      00000000 
+ 41277 c325 02       		.byte	0x2
+ 41278 c326 1F06     		.value	0x61f
+ 41279 c328 ADC30000 		.long	0xc3ad
+ 41280 c32c 32       		.uleb128 0x32
+ 41281 c32d 330F0000 		.long	0xf33
+ 41282 c331 03       		.byte	0x3
+ 41283 c332 91       		.byte	0x91
+ 41284 c333 C068     		.sleb128 -3008
+ 41285 c335 33       		.uleb128 0x33
+ 41286 c336 00000000 		.quad	.LBB3627
+ 41286      00000000 
+ 41287 c33e 00000000 		.quad	.LBE3627
+ 41287      00000000 
+ 41288 c346 34       		.uleb128 0x34
+ 41289 c347 3F0F0000 		.long	0xf3f
+ 41290 c34b 09       		.byte	0x9
+ 41291 c34c 03       		.byte	0x3
+ 41292 c34d 00000000 		.quad	mask.7943
+ 41292      00000000 
+ 41293 c355 35       		.uleb128 0x35
+ 41294 c356 A00D0000 		.long	0xda0
+ 41295 c35a 00000000 		.quad	.LBB3628
+ 41295      00000000 
+ 41296 c362 00000000 		.quad	.LBE3628
+ 41296      00000000 
+ 41297 c36a 02       		.byte	0x2
+ 41298 c36b FE04     		.value	0x4fe
+ 41299 c36d 32       		.uleb128 0x32
+ 41300 c36e BE0D0000 		.long	0xdbe
+ 41301 c372 03       		.byte	0x3
+ 41302 c373 91       		.byte	0x91
+ 41303 c374 D068     		.sleb128 -2992
+ 41304 c376 32       		.uleb128 0x32
+ 41305 c377 B20D0000 		.long	0xdb2
+ 41306 c37b 03       		.byte	0x3
+ 41307 c37c 91       		.byte	0x91
+ 41308 c37d E068     		.sleb128 -2976
+ 41309 c37f 35       		.uleb128 0x35
+ 41310 c380 CB0D0000 		.long	0xdcb
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1040
+
+
+ 41311 c384 00000000 		.quad	.LBB3630
+ 41311      00000000 
+ 41312 c38c 00000000 		.quad	.LBE3630
+ 41312      00000000 
+ 41313 c394 02       		.byte	0x2
+ 41314 c395 7501     		.value	0x175
+ 41315 c397 32       		.uleb128 0x32
+ 41316 c398 E90D0000 		.long	0xde9
+ 41317 c39c 03       		.byte	0x3
+ 41318 c39d 91       		.byte	0x91
+ 41319 c39e F068     		.sleb128 -2960
+ 41320 c3a0 32       		.uleb128 0x32
+ 41321 c3a1 DD0D0000 		.long	0xddd
+ 41322 c3a5 03       		.byte	0x3
+ 41323 c3a6 91       		.byte	0x91
+ 41324 c3a7 8069     		.sleb128 -2944
+ 41325 c3a9 00       		.byte	0x0
+ 41326 c3aa 00       		.byte	0x0
+ 41327 c3ab 00       		.byte	0x0
+ 41328 c3ac 00       		.byte	0x0
+ 41329 c3ad 31       		.uleb128 0x31
+ 41330 c3ae 210F0000 		.long	0xf21
+ 41331 c3b2 00000000 		.quad	.LBB3632
+ 41331      00000000 
+ 41332 c3ba 00000000 		.quad	.LBE3632
+ 41332      00000000 
+ 41333 c3c2 02       		.byte	0x2
+ 41334 c3c3 2006     		.value	0x620
+ 41335 c3c5 4AC40000 		.long	0xc44a
+ 41336 c3c9 32       		.uleb128 0x32
+ 41337 c3ca 330F0000 		.long	0xf33
+ 41338 c3ce 03       		.byte	0x3
+ 41339 c3cf 91       		.byte	0x91
+ 41340 c3d0 9069     		.sleb128 -2928
+ 41341 c3d2 33       		.uleb128 0x33
+ 41342 c3d3 00000000 		.quad	.LBB3633
+ 41342      00000000 
+ 41343 c3db 00000000 		.quad	.LBE3633
+ 41343      00000000 
+ 41344 c3e3 34       		.uleb128 0x34
+ 41345 c3e4 3F0F0000 		.long	0xf3f
+ 41346 c3e8 09       		.byte	0x9
+ 41347 c3e9 03       		.byte	0x3
+ 41348 c3ea 00000000 		.quad	mask.7943
+ 41348      00000000 
+ 41349 c3f2 35       		.uleb128 0x35
+ 41350 c3f3 A00D0000 		.long	0xda0
+ 41351 c3f7 00000000 		.quad	.LBB3634
+ 41351      00000000 
+ 41352 c3ff 00000000 		.quad	.LBE3634
+ 41352      00000000 
+ 41353 c407 02       		.byte	0x2
+ 41354 c408 FE04     		.value	0x4fe
+ 41355 c40a 32       		.uleb128 0x32
+ 41356 c40b BE0D0000 		.long	0xdbe
+ 41357 c40f 03       		.byte	0x3
+ 41358 c410 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1041
+
+
+ 41359 c411 A069     		.sleb128 -2912
+ 41360 c413 32       		.uleb128 0x32
+ 41361 c414 B20D0000 		.long	0xdb2
+ 41362 c418 03       		.byte	0x3
+ 41363 c419 91       		.byte	0x91
+ 41364 c41a B069     		.sleb128 -2896
+ 41365 c41c 35       		.uleb128 0x35
+ 41366 c41d CB0D0000 		.long	0xdcb
+ 41367 c421 00000000 		.quad	.LBB3636
+ 41367      00000000 
+ 41368 c429 00000000 		.quad	.LBE3636
+ 41368      00000000 
+ 41369 c431 02       		.byte	0x2
+ 41370 c432 7501     		.value	0x175
+ 41371 c434 32       		.uleb128 0x32
+ 41372 c435 E90D0000 		.long	0xde9
+ 41373 c439 03       		.byte	0x3
+ 41374 c43a 91       		.byte	0x91
+ 41375 c43b C069     		.sleb128 -2880
+ 41376 c43d 32       		.uleb128 0x32
+ 41377 c43e DD0D0000 		.long	0xddd
+ 41378 c442 03       		.byte	0x3
+ 41379 c443 91       		.byte	0x91
+ 41380 c444 D069     		.sleb128 -2864
+ 41381 c446 00       		.byte	0x0
+ 41382 c447 00       		.byte	0x0
+ 41383 c448 00       		.byte	0x0
+ 41384 c449 00       		.byte	0x0
+ 41385 c44a 35       		.uleb128 0x35
+ 41386 c44b 210F0000 		.long	0xf21
+ 41387 c44f 00000000 		.quad	.LBB3638
+ 41387      00000000 
+ 41388 c457 00000000 		.quad	.LBE3638
+ 41388      00000000 
+ 41389 c45f 02       		.byte	0x2
+ 41390 c460 2106     		.value	0x621
+ 41391 c462 32       		.uleb128 0x32
+ 41392 c463 330F0000 		.long	0xf33
+ 41393 c467 03       		.byte	0x3
+ 41394 c468 91       		.byte	0x91
+ 41395 c469 E069     		.sleb128 -2848
+ 41396 c46b 33       		.uleb128 0x33
+ 41397 c46c 00000000 		.quad	.LBB3639
+ 41397      00000000 
+ 41398 c474 00000000 		.quad	.LBE3639
+ 41398      00000000 
+ 41399 c47c 34       		.uleb128 0x34
+ 41400 c47d 3F0F0000 		.long	0xf3f
+ 41401 c481 09       		.byte	0x9
+ 41402 c482 03       		.byte	0x3
+ 41403 c483 00000000 		.quad	mask.7943
+ 41403      00000000 
+ 41404 c48b 35       		.uleb128 0x35
+ 41405 c48c A00D0000 		.long	0xda0
+ 41406 c490 00000000 		.quad	.LBB3640
+ 41406      00000000 
+ 41407 c498 00000000 		.quad	.LBE3640
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1042
+
+
+ 41407      00000000 
+ 41408 c4a0 02       		.byte	0x2
+ 41409 c4a1 FE04     		.value	0x4fe
+ 41410 c4a3 32       		.uleb128 0x32
+ 41411 c4a4 BE0D0000 		.long	0xdbe
+ 41412 c4a8 03       		.byte	0x3
+ 41413 c4a9 91       		.byte	0x91
+ 41414 c4aa F069     		.sleb128 -2832
+ 41415 c4ac 32       		.uleb128 0x32
+ 41416 c4ad B20D0000 		.long	0xdb2
+ 41417 c4b1 03       		.byte	0x3
+ 41418 c4b2 91       		.byte	0x91
+ 41419 c4b3 806A     		.sleb128 -2816
+ 41420 c4b5 35       		.uleb128 0x35
+ 41421 c4b6 CB0D0000 		.long	0xdcb
+ 41422 c4ba 00000000 		.quad	.LBB3642
+ 41422      00000000 
+ 41423 c4c2 00000000 		.quad	.LBE3642
+ 41423      00000000 
+ 41424 c4ca 02       		.byte	0x2
+ 41425 c4cb 7501     		.value	0x175
+ 41426 c4cd 32       		.uleb128 0x32
+ 41427 c4ce E90D0000 		.long	0xde9
+ 41428 c4d2 03       		.byte	0x3
+ 41429 c4d3 91       		.byte	0x91
+ 41430 c4d4 906A     		.sleb128 -2800
+ 41431 c4d6 32       		.uleb128 0x32
+ 41432 c4d7 DD0D0000 		.long	0xddd
+ 41433 c4db 03       		.byte	0x3
+ 41434 c4dc 91       		.byte	0x91
+ 41435 c4dd A06A     		.sleb128 -2784
+ 41436 c4df 00       		.byte	0x0
+ 41437 c4e0 00       		.byte	0x0
+ 41438 c4e1 00       		.byte	0x0
+ 41439 c4e2 00       		.byte	0x0
+ 41440 c4e3 00       		.byte	0x0
+ 41441 c4e4 00       		.byte	0x0
+ 41442 c4e5 31       		.uleb128 0x31
+ 41443 c4e6 860E0000 		.long	0xe86
+ 41444 c4ea 00000000 		.quad	.LBB3644
+ 41444      00000000 
+ 41445 c4f2 00000000 		.quad	.LBE3644
+ 41445      00000000 
+ 41446 c4fa 02       		.byte	0x2
+ 41447 c4fb 8E07     		.value	0x78e
+ 41448 c4fd 14C50000 		.long	0xc514
+ 41449 c501 32       		.uleb128 0x32
+ 41450 c502 A10E0000 		.long	0xea1
+ 41451 c506 03       		.byte	0x3
+ 41452 c507 91       		.byte	0x91
+ 41453 c508 B06A     		.sleb128 -2768
+ 41454 c50a 32       		.uleb128 0x32
+ 41455 c50b 970E0000 		.long	0xe97
+ 41456 c50f 03       		.byte	0x3
+ 41457 c510 91       		.byte	0x91
+ 41458 c511 C06A     		.sleb128 -2752
+ 41459 c513 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1043
+
+
+ 41460 c514 31       		.uleb128 0x31
+ 41461 c515 8F940000 		.long	0x948f
+ 41462 c519 00000000 		.quad	.LBB3646
+ 41462      00000000 
+ 41463 c521 00000000 		.quad	.LBE3646
+ 41463      00000000 
+ 41464 c529 02       		.byte	0x2
+ 41465 c52a 8F07     		.value	0x78f
+ 41466 c52c A6C50000 		.long	0xc5a6
+ 41467 c530 32       		.uleb128 0x32
+ 41468 c531 A1940000 		.long	0x94a1
+ 41469 c535 03       		.byte	0x3
+ 41470 c536 91       		.byte	0x91
+ 41471 c537 D06A     		.sleb128 -2736
+ 41472 c539 33       		.uleb128 0x33
+ 41473 c53a 00000000 		.quad	.LBB3647
+ 41473      00000000 
+ 41474 c542 00000000 		.quad	.LBE3647
+ 41474      00000000 
+ 41475 c54a 34       		.uleb128 0x34
+ 41476 c54b AD940000 		.long	0x94ad
+ 41477 c54f 04       		.byte	0x4
+ 41478 c550 91       		.byte	0x91
+ 41479 c551 E0B67F   		.sleb128 -9376
+ 41480 c554 34       		.uleb128 0x34
+ 41481 c555 B7940000 		.long	0x94b7
+ 41482 c559 03       		.byte	0x3
+ 41483 c55a 91       		.byte	0x91
+ 41484 c55b E46A     		.sleb128 -2716
+ 41485 c55d 35       		.uleb128 0x35
+ 41486 c55e BE560000 		.long	0x56be
+ 41487 c562 00000000 		.quad	.LBB3648
+ 41487      00000000 
+ 41488 c56a 00000000 		.quad	.LBE3648
+ 41488      00000000 
+ 41489 c572 02       		.byte	0x2
+ 41490 c573 7906     		.value	0x679
+ 41491 c575 32       		.uleb128 0x32
+ 41492 c576 D0560000 		.long	0x56d0
+ 41493 c57a 03       		.byte	0x3
+ 41494 c57b 91       		.byte	0x91
+ 41495 c57c E86A     		.sleb128 -2712
+ 41496 c57e 33       		.uleb128 0x33
+ 41497 c57f 00000000 		.quad	.LBB3649
+ 41497      00000000 
+ 41498 c587 00000000 		.quad	.LBE3649
+ 41498      00000000 
+ 41499 c58f 34       		.uleb128 0x34
+ 41500 c590 DA560000 		.long	0x56da
+ 41501 c594 04       		.byte	0x4
+ 41502 c595 91       		.byte	0x91
+ 41503 c596 D0B67F   		.sleb128 -9392
+ 41504 c599 34       		.uleb128 0x34
+ 41505 c59a E6560000 		.long	0x56e6
+ 41506 c59e 03       		.byte	0x3
+ 41507 c59f 91       		.byte	0x91
+ 41508 c5a0 EC6A     		.sleb128 -2708
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1044
+
+
+ 41509 c5a2 00       		.byte	0x0
+ 41510 c5a3 00       		.byte	0x0
+ 41511 c5a4 00       		.byte	0x0
+ 41512 c5a5 00       		.byte	0x0
+ 41513 c5a6 31       		.uleb128 0x31
+ 41514 c5a7 F60E0000 		.long	0xef6
+ 41515 c5ab 00000000 		.quad	.LBB3650
+ 41515      00000000 
+ 41516 c5b3 00000000 		.quad	.LBE3650
+ 41516      00000000 
+ 41517 c5bb 02       		.byte	0x2
+ 41518 c5bc 8F07     		.value	0x78f
+ 41519 c5be BBC70000 		.long	0xc7bb
+ 41520 c5c2 32       		.uleb128 0x32
+ 41521 c5c3 080F0000 		.long	0xf08
+ 41522 c5c7 03       		.byte	0x3
+ 41523 c5c8 91       		.byte	0x91
+ 41524 c5c9 F06A     		.sleb128 -2704
+ 41525 c5cb 33       		.uleb128 0x33
+ 41526 c5cc 00000000 		.quad	.LBB3651
+ 41526      00000000 
+ 41527 c5d4 00000000 		.quad	.LBE3651
+ 41527      00000000 
+ 41528 c5dc 34       		.uleb128 0x34
+ 41529 c5dd 140F0000 		.long	0xf14
+ 41530 c5e1 04       		.byte	0x4
+ 41531 c5e2 76       		.byte	0x76
+ 41532 c5e3 90B27F   		.sleb128 -9968
+ 41533 c5e6 31       		.uleb128 0x31
+ 41534 c5e7 210F0000 		.long	0xf21
+ 41535 c5eb 00000000 		.quad	.LBB3652
+ 41535      00000000 
+ 41536 c5f3 00000000 		.quad	.LBE3652
+ 41536      00000000 
+ 41537 c5fb 02       		.byte	0x2
+ 41538 c5fc 1F06     		.value	0x61f
+ 41539 c5fe 83C60000 		.long	0xc683
+ 41540 c602 32       		.uleb128 0x32
+ 41541 c603 330F0000 		.long	0xf33
+ 41542 c607 03       		.byte	0x3
+ 41543 c608 91       		.byte	0x91
+ 41544 c609 806B     		.sleb128 -2688
+ 41545 c60b 33       		.uleb128 0x33
+ 41546 c60c 00000000 		.quad	.LBB3653
+ 41546      00000000 
+ 41547 c614 00000000 		.quad	.LBE3653
+ 41547      00000000 
+ 41548 c61c 34       		.uleb128 0x34
+ 41549 c61d 3F0F0000 		.long	0xf3f
+ 41550 c621 09       		.byte	0x9
+ 41551 c622 03       		.byte	0x3
+ 41552 c623 00000000 		.quad	mask.7943
+ 41552      00000000 
+ 41553 c62b 35       		.uleb128 0x35
+ 41554 c62c A00D0000 		.long	0xda0
+ 41555 c630 00000000 		.quad	.LBB3654
+ 41555      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1045
+
+
+ 41556 c638 00000000 		.quad	.LBE3654
+ 41556      00000000 
+ 41557 c640 02       		.byte	0x2
+ 41558 c641 FE04     		.value	0x4fe
+ 41559 c643 32       		.uleb128 0x32
+ 41560 c644 BE0D0000 		.long	0xdbe
+ 41561 c648 03       		.byte	0x3
+ 41562 c649 91       		.byte	0x91
+ 41563 c64a 906B     		.sleb128 -2672
+ 41564 c64c 32       		.uleb128 0x32
+ 41565 c64d B20D0000 		.long	0xdb2
+ 41566 c651 03       		.byte	0x3
+ 41567 c652 91       		.byte	0x91
+ 41568 c653 A06B     		.sleb128 -2656
+ 41569 c655 35       		.uleb128 0x35
+ 41570 c656 CB0D0000 		.long	0xdcb
+ 41571 c65a 00000000 		.quad	.LBB3656
+ 41571      00000000 
+ 41572 c662 00000000 		.quad	.LBE3656
+ 41572      00000000 
+ 41573 c66a 02       		.byte	0x2
+ 41574 c66b 7501     		.value	0x175
+ 41575 c66d 32       		.uleb128 0x32
+ 41576 c66e E90D0000 		.long	0xde9
+ 41577 c672 03       		.byte	0x3
+ 41578 c673 91       		.byte	0x91
+ 41579 c674 B06B     		.sleb128 -2640
+ 41580 c676 32       		.uleb128 0x32
+ 41581 c677 DD0D0000 		.long	0xddd
+ 41582 c67b 03       		.byte	0x3
+ 41583 c67c 91       		.byte	0x91
+ 41584 c67d C06B     		.sleb128 -2624
+ 41585 c67f 00       		.byte	0x0
+ 41586 c680 00       		.byte	0x0
+ 41587 c681 00       		.byte	0x0
+ 41588 c682 00       		.byte	0x0
+ 41589 c683 31       		.uleb128 0x31
+ 41590 c684 210F0000 		.long	0xf21
+ 41591 c688 00000000 		.quad	.LBB3658
+ 41591      00000000 
+ 41592 c690 00000000 		.quad	.LBE3658
+ 41592      00000000 
+ 41593 c698 02       		.byte	0x2
+ 41594 c699 2006     		.value	0x620
+ 41595 c69b 20C70000 		.long	0xc720
+ 41596 c69f 32       		.uleb128 0x32
+ 41597 c6a0 330F0000 		.long	0xf33
+ 41598 c6a4 03       		.byte	0x3
+ 41599 c6a5 91       		.byte	0x91
+ 41600 c6a6 D06B     		.sleb128 -2608
+ 41601 c6a8 33       		.uleb128 0x33
+ 41602 c6a9 00000000 		.quad	.LBB3659
+ 41602      00000000 
+ 41603 c6b1 00000000 		.quad	.LBE3659
+ 41603      00000000 
+ 41604 c6b9 34       		.uleb128 0x34
+ 41605 c6ba 3F0F0000 		.long	0xf3f
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1046
+
+
+ 41606 c6be 09       		.byte	0x9
+ 41607 c6bf 03       		.byte	0x3
+ 41608 c6c0 00000000 		.quad	mask.7943
+ 41608      00000000 
+ 41609 c6c8 35       		.uleb128 0x35
+ 41610 c6c9 A00D0000 		.long	0xda0
+ 41611 c6cd 00000000 		.quad	.LBB3660
+ 41611      00000000 
+ 41612 c6d5 00000000 		.quad	.LBE3660
+ 41612      00000000 
+ 41613 c6dd 02       		.byte	0x2
+ 41614 c6de FE04     		.value	0x4fe
+ 41615 c6e0 32       		.uleb128 0x32
+ 41616 c6e1 BE0D0000 		.long	0xdbe
+ 41617 c6e5 03       		.byte	0x3
+ 41618 c6e6 91       		.byte	0x91
+ 41619 c6e7 E06B     		.sleb128 -2592
+ 41620 c6e9 32       		.uleb128 0x32
+ 41621 c6ea B20D0000 		.long	0xdb2
+ 41622 c6ee 03       		.byte	0x3
+ 41623 c6ef 91       		.byte	0x91
+ 41624 c6f0 F06B     		.sleb128 -2576
+ 41625 c6f2 35       		.uleb128 0x35
+ 41626 c6f3 CB0D0000 		.long	0xdcb
+ 41627 c6f7 00000000 		.quad	.LBB3662
+ 41627      00000000 
+ 41628 c6ff 00000000 		.quad	.LBE3662
+ 41628      00000000 
+ 41629 c707 02       		.byte	0x2
+ 41630 c708 7501     		.value	0x175
+ 41631 c70a 32       		.uleb128 0x32
+ 41632 c70b E90D0000 		.long	0xde9
+ 41633 c70f 03       		.byte	0x3
+ 41634 c710 91       		.byte	0x91
+ 41635 c711 806C     		.sleb128 -2560
+ 41636 c713 32       		.uleb128 0x32
+ 41637 c714 DD0D0000 		.long	0xddd
+ 41638 c718 03       		.byte	0x3
+ 41639 c719 91       		.byte	0x91
+ 41640 c71a 906C     		.sleb128 -2544
+ 41641 c71c 00       		.byte	0x0
+ 41642 c71d 00       		.byte	0x0
+ 41643 c71e 00       		.byte	0x0
+ 41644 c71f 00       		.byte	0x0
+ 41645 c720 35       		.uleb128 0x35
+ 41646 c721 210F0000 		.long	0xf21
+ 41647 c725 00000000 		.quad	.LBB3664
+ 41647      00000000 
+ 41648 c72d 00000000 		.quad	.LBE3664
+ 41648      00000000 
+ 41649 c735 02       		.byte	0x2
+ 41650 c736 2106     		.value	0x621
+ 41651 c738 32       		.uleb128 0x32
+ 41652 c739 330F0000 		.long	0xf33
+ 41653 c73d 03       		.byte	0x3
+ 41654 c73e 91       		.byte	0x91
+ 41655 c73f A06C     		.sleb128 -2528
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1047
+
+
+ 41656 c741 33       		.uleb128 0x33
+ 41657 c742 00000000 		.quad	.LBB3665
+ 41657      00000000 
+ 41658 c74a 00000000 		.quad	.LBE3665
+ 41658      00000000 
+ 41659 c752 34       		.uleb128 0x34
+ 41660 c753 3F0F0000 		.long	0xf3f
+ 41661 c757 09       		.byte	0x9
+ 41662 c758 03       		.byte	0x3
+ 41663 c759 00000000 		.quad	mask.7943
+ 41663      00000000 
+ 41664 c761 35       		.uleb128 0x35
+ 41665 c762 A00D0000 		.long	0xda0
+ 41666 c766 00000000 		.quad	.LBB3666
+ 41666      00000000 
+ 41667 c76e 00000000 		.quad	.LBE3666
+ 41667      00000000 
+ 41668 c776 02       		.byte	0x2
+ 41669 c777 FE04     		.value	0x4fe
+ 41670 c779 32       		.uleb128 0x32
+ 41671 c77a BE0D0000 		.long	0xdbe
+ 41672 c77e 03       		.byte	0x3
+ 41673 c77f 91       		.byte	0x91
+ 41674 c780 B06C     		.sleb128 -2512
+ 41675 c782 32       		.uleb128 0x32
+ 41676 c783 B20D0000 		.long	0xdb2
+ 41677 c787 03       		.byte	0x3
+ 41678 c788 91       		.byte	0x91
+ 41679 c789 C06C     		.sleb128 -2496
+ 41680 c78b 35       		.uleb128 0x35
+ 41681 c78c CB0D0000 		.long	0xdcb
+ 41682 c790 00000000 		.quad	.LBB3668
+ 41682      00000000 
+ 41683 c798 00000000 		.quad	.LBE3668
+ 41683      00000000 
+ 41684 c7a0 02       		.byte	0x2
+ 41685 c7a1 7501     		.value	0x175
+ 41686 c7a3 32       		.uleb128 0x32
+ 41687 c7a4 E90D0000 		.long	0xde9
+ 41688 c7a8 03       		.byte	0x3
+ 41689 c7a9 91       		.byte	0x91
+ 41690 c7aa D06C     		.sleb128 -2480
+ 41691 c7ac 32       		.uleb128 0x32
+ 41692 c7ad DD0D0000 		.long	0xddd
+ 41693 c7b1 03       		.byte	0x3
+ 41694 c7b2 91       		.byte	0x91
+ 41695 c7b3 E06C     		.sleb128 -2464
+ 41696 c7b5 00       		.byte	0x0
+ 41697 c7b6 00       		.byte	0x0
+ 41698 c7b7 00       		.byte	0x0
+ 41699 c7b8 00       		.byte	0x0
+ 41700 c7b9 00       		.byte	0x0
+ 41701 c7ba 00       		.byte	0x0
+ 41702 c7bb 31       		.uleb128 0x31
+ 41703 c7bc 860E0000 		.long	0xe86
+ 41704 c7c0 00000000 		.quad	.LBB3670
+ 41704      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1048
+
+
+ 41705 c7c8 00000000 		.quad	.LBE3670
+ 41705      00000000 
+ 41706 c7d0 02       		.byte	0x2
+ 41707 c7d1 8F07     		.value	0x78f
+ 41708 c7d3 EAC70000 		.long	0xc7ea
+ 41709 c7d7 32       		.uleb128 0x32
+ 41710 c7d8 A10E0000 		.long	0xea1
+ 41711 c7dc 03       		.byte	0x3
+ 41712 c7dd 91       		.byte	0x91
+ 41713 c7de F06C     		.sleb128 -2448
+ 41714 c7e0 32       		.uleb128 0x32
+ 41715 c7e1 970E0000 		.long	0xe97
+ 41716 c7e5 03       		.byte	0x3
+ 41717 c7e6 91       		.byte	0x91
+ 41718 c7e7 806D     		.sleb128 -2432
+ 41719 c7e9 00       		.byte	0x0
+ 41720 c7ea 31       		.uleb128 0x31
+ 41721 c7eb D50B0000 		.long	0xbd5
+ 41722 c7ef 00000000 		.quad	.LBB3672
+ 41722      00000000 
+ 41723 c7f7 00000000 		.quad	.LBE3672
+ 41723      00000000 
+ 41724 c7ff 02       		.byte	0x2
+ 41725 c800 9007     		.value	0x790
+ 41726 c802 CDCC0000 		.long	0xcccd
+ 41727 c806 32       		.uleb128 0x32
+ 41728 c807 F30B0000 		.long	0xbf3
+ 41729 c80b 03       		.byte	0x3
+ 41730 c80c 91       		.byte	0x91
+ 41731 c80d 9C6D     		.sleb128 -2404
+ 41732 c80f 32       		.uleb128 0x32
+ 41733 c810 E70B0000 		.long	0xbe7
+ 41734 c814 03       		.byte	0x3
+ 41735 c815 91       		.byte	0x91
+ 41736 c816 A06D     		.sleb128 -2400
+ 41737 c818 33       		.uleb128 0x33
+ 41738 c819 00000000 		.quad	.LBB3673
+ 41738      00000000 
+ 41739 c821 00000000 		.quad	.LBE3673
+ 41739      00000000 
+ 41740 c829 34       		.uleb128 0x34
+ 41741 c82a FF0B0000 		.long	0xbff
+ 41742 c82e 04       		.byte	0x4
+ 41743 c82f 76       		.byte	0x76
+ 41744 c830 B0B27F   		.sleb128 -9936
+ 41745 c833 34       		.uleb128 0x34
+ 41746 c834 0B0C0000 		.long	0xc0b
+ 41747 c838 04       		.byte	0x4
+ 41748 c839 76       		.byte	0x76
+ 41749 c83a A0B27F   		.sleb128 -9952
+ 41750 c83d 31       		.uleb128 0x31
+ 41751 c83e 540C0000 		.long	0xc54
+ 41752 c842 00000000 		.quad	.LBB3674
+ 41752      00000000 
+ 41753 c84a 00000000 		.quad	.LBE3674
+ 41753      00000000 
+ 41754 c852 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1049
+
+
+ 41755 c853 9106     		.value	0x691
+ 41756 c855 A9C80000 		.long	0xc8a9
+ 41757 c859 32       		.uleb128 0x32
+ 41758 c85a 7E0C0000 		.long	0xc7e
+ 41759 c85e 03       		.byte	0x3
+ 41760 c85f 91       		.byte	0x91
+ 41761 c860 B86D     		.sleb128 -2376
+ 41762 c862 32       		.uleb128 0x32
+ 41763 c863 720C0000 		.long	0xc72
+ 41764 c867 03       		.byte	0x3
+ 41765 c868 91       		.byte	0x91
+ 41766 c869 BC6D     		.sleb128 -2372
+ 41767 c86b 32       		.uleb128 0x32
+ 41768 c86c 660C0000 		.long	0xc66
+ 41769 c870 03       		.byte	0x3
+ 41770 c871 91       		.byte	0x91
+ 41771 c872 C06D     		.sleb128 -2368
+ 41772 c874 35       		.uleb128 0x35
+ 41773 c875 8B0C0000 		.long	0xc8b
+ 41774 c879 00000000 		.quad	.LBB3676
+ 41774      00000000 
+ 41775 c881 00000000 		.quad	.LBE3676
+ 41775      00000000 
+ 41776 c889 02       		.byte	0x2
+ 41777 c88a 0702     		.value	0x207
+ 41778 c88c 32       		.uleb128 0x32
+ 41779 c88d B40C0000 		.long	0xcb4
+ 41780 c891 03       		.byte	0x3
+ 41781 c892 91       		.byte	0x91
+ 41782 c893 D86D     		.sleb128 -2344
+ 41783 c895 32       		.uleb128 0x32
+ 41784 c896 A90C0000 		.long	0xca9
+ 41785 c89a 03       		.byte	0x3
+ 41786 c89b 91       		.byte	0x91
+ 41787 c89c DC6D     		.sleb128 -2340
+ 41788 c89e 32       		.uleb128 0x32
+ 41789 c89f 9D0C0000 		.long	0xc9d
+ 41790 c8a3 03       		.byte	0x3
+ 41791 c8a4 91       		.byte	0x91
+ 41792 c8a5 E06D     		.sleb128 -2336
+ 41793 c8a7 00       		.byte	0x0
+ 41794 c8a8 00       		.byte	0x0
+ 41795 c8a9 31       		.uleb128 0x31
+ 41796 c8aa C10C0000 		.long	0xcc1
+ 41797 c8ae 00000000 		.quad	.LBB3678
+ 41797      00000000 
+ 41798 c8b6 00000000 		.quad	.LBE3678
+ 41798      00000000 
+ 41799 c8be 02       		.byte	0x2
+ 41800 c8bf 9206     		.value	0x692
+ 41801 c8c1 32CB0000 		.long	0xcb32
+ 41802 c8c5 32       		.uleb128 0x32
+ 41803 c8c6 D30C0000 		.long	0xcd3
+ 41804 c8ca 03       		.byte	0x3
+ 41805 c8cb 91       		.byte	0x91
+ 41806 c8cc F06D     		.sleb128 -2320
+ 41807 c8ce 35       		.uleb128 0x35
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1050
+
+
+ 41808 c8cf E00C0000 		.long	0xce0
+ 41809 c8d3 00000000 		.quad	.LBB3680
+ 41809      00000000 
+ 41810 c8db 00000000 		.quad	.LBE3680
+ 41810      00000000 
+ 41811 c8e3 02       		.byte	0x2
+ 41812 c8e4 7D03     		.value	0x37d
+ 41813 c8e6 32       		.uleb128 0x32
+ 41814 c8e7 FE0C0000 		.long	0xcfe
+ 41815 c8eb 03       		.byte	0x3
+ 41816 c8ec 91       		.byte	0x91
+ 41817 c8ed 886E     		.sleb128 -2296
+ 41818 c8ef 32       		.uleb128 0x32
+ 41819 c8f0 F20C0000 		.long	0xcf2
+ 41820 c8f4 03       		.byte	0x3
+ 41821 c8f5 91       		.byte	0x91
+ 41822 c8f6 906E     		.sleb128 -2288
+ 41823 c8f8 33       		.uleb128 0x33
+ 41824 c8f9 00000000 		.quad	.LBB3681
+ 41824      00000000 
+ 41825 c901 00000000 		.quad	.LBE3681
+ 41825      00000000 
+ 41826 c909 34       		.uleb128 0x34
+ 41827 c90a 0A0D0000 		.long	0xd0a
+ 41828 c90e 03       		.byte	0x3
+ 41829 c90f 91       		.byte	0x91
+ 41830 c910 E06E     		.sleb128 -2208
+ 41831 c912 34       		.uleb128 0x34
+ 41832 c913 150D0000 		.long	0xd15
+ 41833 c917 03       		.byte	0x3
+ 41834 c918 91       		.byte	0x91
+ 41835 c919 D06E     		.sleb128 -2224
+ 41836 c91b 34       		.uleb128 0x34
+ 41837 c91c 200D0000 		.long	0xd20
+ 41838 c920 03       		.byte	0x3
+ 41839 c921 91       		.byte	0x91
+ 41840 c922 C06E     		.sleb128 -2240
+ 41841 c924 34       		.uleb128 0x34
+ 41842 c925 2C0D0000 		.long	0xd2c
+ 41843 c929 03       		.byte	0x3
+ 41844 c92a 91       		.byte	0x91
+ 41845 c92b B06E     		.sleb128 -2256
+ 41846 c92d 34       		.uleb128 0x34
+ 41847 c92e 380D0000 		.long	0xd38
+ 41848 c932 03       		.byte	0x3
+ 41849 c933 91       		.byte	0x91
+ 41850 c934 AC6E     		.sleb128 -2260
+ 41851 c936 31       		.uleb128 0x31
+ 41852 c937 4F0D0000 		.long	0xd4f
+ 41853 c93b 00000000 		.quad	.LBB3682
+ 41853      00000000 
+ 41854 c943 00000000 		.quad	.LBE3682
+ 41854      00000000 
+ 41855 c94b 02       		.byte	0x2
+ 41856 c94c 5603     		.value	0x356
+ 41857 c94e 65C90000 		.long	0xc965
+ 41858 c952 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1051
+
+
+ 41859 c953 6A0D0000 		.long	0xd6a
+ 41860 c957 03       		.byte	0x3
+ 41861 c958 91       		.byte	0x91
+ 41862 c959 F06E     		.sleb128 -2192
+ 41863 c95b 32       		.uleb128 0x32
+ 41864 c95c 600D0000 		.long	0xd60
+ 41865 c960 03       		.byte	0x3
+ 41866 c961 91       		.byte	0x91
+ 41867 c962 806F     		.sleb128 -2176
+ 41868 c964 00       		.byte	0x0
+ 41869 c965 31       		.uleb128 0x31
+ 41870 c966 750D0000 		.long	0xd75
+ 41871 c96a 00000000 		.quad	.LBB3684
+ 41871      00000000 
+ 41872 c972 00000000 		.quad	.LBE3684
+ 41872      00000000 
+ 41873 c97a 02       		.byte	0x2
+ 41874 c97b 5903     		.value	0x359
+ 41875 c97d 94C90000 		.long	0xc994
+ 41876 c981 32       		.uleb128 0x32
+ 41877 c982 930D0000 		.long	0xd93
+ 41878 c986 03       		.byte	0x3
+ 41879 c987 91       		.byte	0x91
+ 41880 c988 9C6F     		.sleb128 -2148
+ 41881 c98a 32       		.uleb128 0x32
+ 41882 c98b 870D0000 		.long	0xd87
+ 41883 c98f 03       		.byte	0x3
+ 41884 c990 91       		.byte	0x91
+ 41885 c991 A06F     		.sleb128 -2144
+ 41886 c993 00       		.byte	0x0
+ 41887 c994 31       		.uleb128 0x31
+ 41888 c995 4F0D0000 		.long	0xd4f
+ 41889 c999 00000000 		.quad	.LBB3686
+ 41889      00000000 
+ 41890 c9a1 00000000 		.quad	.LBE3686
+ 41890      00000000 
+ 41891 c9a9 02       		.byte	0x2
+ 41892 c9aa 5B03     		.value	0x35b
+ 41893 c9ac C3C90000 		.long	0xc9c3
+ 41894 c9b0 32       		.uleb128 0x32
+ 41895 c9b1 6A0D0000 		.long	0xd6a
+ 41896 c9b5 03       		.byte	0x3
+ 41897 c9b6 91       		.byte	0x91
+ 41898 c9b7 B06F     		.sleb128 -2128
+ 41899 c9b9 32       		.uleb128 0x32
+ 41900 c9ba 600D0000 		.long	0xd60
+ 41901 c9be 03       		.byte	0x3
+ 41902 c9bf 91       		.byte	0x91
+ 41903 c9c0 C06F     		.sleb128 -2112
+ 41904 c9c2 00       		.byte	0x0
+ 41905 c9c3 31       		.uleb128 0x31
+ 41906 c9c4 A00D0000 		.long	0xda0
+ 41907 c9c8 00000000 		.quad	.LBB3688
+ 41907      00000000 
+ 41908 c9d0 00000000 		.quad	.LBE3688
+ 41908      00000000 
+ 41909 c9d8 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1052
+
+
+ 41910 c9d9 6403     		.value	0x364
+ 41911 c9db 1DCA0000 		.long	0xca1d
+ 41912 c9df 32       		.uleb128 0x32
+ 41913 c9e0 BE0D0000 		.long	0xdbe
+ 41914 c9e4 03       		.byte	0x3
+ 41915 c9e5 91       		.byte	0x91
+ 41916 c9e6 D06F     		.sleb128 -2096
+ 41917 c9e8 32       		.uleb128 0x32
+ 41918 c9e9 B20D0000 		.long	0xdb2
+ 41919 c9ed 03       		.byte	0x3
+ 41920 c9ee 91       		.byte	0x91
+ 41921 c9ef E06F     		.sleb128 -2080
+ 41922 c9f1 35       		.uleb128 0x35
+ 41923 c9f2 CB0D0000 		.long	0xdcb
+ 41924 c9f6 00000000 		.quad	.LBB3690
+ 41924      00000000 
+ 41925 c9fe 00000000 		.quad	.LBE3690
+ 41925      00000000 
+ 41926 ca06 02       		.byte	0x2
+ 41927 ca07 7501     		.value	0x175
+ 41928 ca09 32       		.uleb128 0x32
+ 41929 ca0a E90D0000 		.long	0xde9
+ 41930 ca0e 03       		.byte	0x3
+ 41931 ca0f 91       		.byte	0x91
+ 41932 ca10 F06F     		.sleb128 -2064
+ 41933 ca12 32       		.uleb128 0x32
+ 41934 ca13 DD0D0000 		.long	0xddd
+ 41935 ca17 03       		.byte	0x3
+ 41936 ca18 91       		.byte	0x91
+ 41937 ca19 8070     		.sleb128 -2048
+ 41938 ca1b 00       		.byte	0x0
+ 41939 ca1c 00       		.byte	0x0
+ 41940 ca1d 31       		.uleb128 0x31
+ 41941 ca1e FB0D0000 		.long	0xdfb
+ 41942 ca22 00000000 		.quad	.LBB3692
+ 41942      00000000 
+ 41943 ca2a 00000000 		.quad	.LBE3692
+ 41943      00000000 
+ 41944 ca32 02       		.byte	0x2
+ 41945 ca33 6603     		.value	0x366
+ 41946 ca35 4CCA0000 		.long	0xca4c
+ 41947 ca39 32       		.uleb128 0x32
+ 41948 ca3a 160E0000 		.long	0xe16
+ 41949 ca3e 03       		.byte	0x3
+ 41950 ca3f 91       		.byte	0x91
+ 41951 ca40 9070     		.sleb128 -2032
+ 41952 ca42 32       		.uleb128 0x32
+ 41953 ca43 0C0E0000 		.long	0xe0c
+ 41954 ca47 03       		.byte	0x3
+ 41955 ca48 91       		.byte	0x91
+ 41956 ca49 A070     		.sleb128 -2016
+ 41957 ca4b 00       		.byte	0x0
+ 41958 ca4c 31       		.uleb128 0x31
+ 41959 ca4d A00D0000 		.long	0xda0
+ 41960 ca51 00000000 		.quad	.LBB3694
+ 41960      00000000 
+ 41961 ca59 00000000 		.quad	.LBE3694
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1053
+
+
+ 41961      00000000 
+ 41962 ca61 02       		.byte	0x2
+ 41963 ca62 6803     		.value	0x368
+ 41964 ca64 A6CA0000 		.long	0xcaa6
+ 41965 ca68 32       		.uleb128 0x32
+ 41966 ca69 BE0D0000 		.long	0xdbe
+ 41967 ca6d 03       		.byte	0x3
+ 41968 ca6e 91       		.byte	0x91
+ 41969 ca6f B070     		.sleb128 -2000
+ 41970 ca71 32       		.uleb128 0x32
+ 41971 ca72 B20D0000 		.long	0xdb2
+ 41972 ca76 03       		.byte	0x3
+ 41973 ca77 91       		.byte	0x91
+ 41974 ca78 C070     		.sleb128 -1984
+ 41975 ca7a 35       		.uleb128 0x35
+ 41976 ca7b CB0D0000 		.long	0xdcb
+ 41977 ca7f 00000000 		.quad	.LBB3696
+ 41977      00000000 
+ 41978 ca87 00000000 		.quad	.LBE3696
+ 41978      00000000 
+ 41979 ca8f 02       		.byte	0x2
+ 41980 ca90 7501     		.value	0x175
+ 41981 ca92 32       		.uleb128 0x32
+ 41982 ca93 E90D0000 		.long	0xde9
+ 41983 ca97 03       		.byte	0x3
+ 41984 ca98 91       		.byte	0x91
+ 41985 ca99 D070     		.sleb128 -1968
+ 41986 ca9b 32       		.uleb128 0x32
+ 41987 ca9c DD0D0000 		.long	0xddd
+ 41988 caa0 03       		.byte	0x3
+ 41989 caa1 91       		.byte	0x91
+ 41990 caa2 E070     		.sleb128 -1952
+ 41991 caa4 00       		.byte	0x0
+ 41992 caa5 00       		.byte	0x0
+ 41993 caa6 31       		.uleb128 0x31
+ 41994 caa7 FB0D0000 		.long	0xdfb
+ 41995 caab 00000000 		.quad	.LBB3698
+ 41995      00000000 
+ 41996 cab3 00000000 		.quad	.LBE3698
+ 41996      00000000 
+ 41997 cabb 02       		.byte	0x2
+ 41998 cabc 6A03     		.value	0x36a
+ 41999 cabe D5CA0000 		.long	0xcad5
+ 42000 cac2 32       		.uleb128 0x32
+ 42001 cac3 160E0000 		.long	0xe16
+ 42002 cac7 03       		.byte	0x3
+ 42003 cac8 91       		.byte	0x91
+ 42004 cac9 F070     		.sleb128 -1936
+ 42005 cacb 32       		.uleb128 0x32
+ 42006 cacc 0C0E0000 		.long	0xe0c
+ 42007 cad0 03       		.byte	0x3
+ 42008 cad1 91       		.byte	0x91
+ 42009 cad2 8071     		.sleb128 -1920
+ 42010 cad4 00       		.byte	0x0
+ 42011 cad5 31       		.uleb128 0x31
+ 42012 cad6 210E0000 		.long	0xe21
+ 42013 cada 00000000 		.quad	.LBB3700
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1054
+
+
+ 42013      00000000 
+ 42014 cae2 00000000 		.quad	.LBE3700
+ 42014      00000000 
+ 42015 caea 02       		.byte	0x2
+ 42016 caeb 6C03     		.value	0x36c
+ 42017 caed 04CB0000 		.long	0xcb04
+ 42018 caf1 32       		.uleb128 0x32
+ 42019 caf2 3E0E0000 		.long	0xe3e
+ 42020 caf6 03       		.byte	0x3
+ 42021 caf7 91       		.byte	0x91
+ 42022 caf8 9071     		.sleb128 -1904
+ 42023 cafa 32       		.uleb128 0x32
+ 42024 cafb 330E0000 		.long	0xe33
+ 42025 caff 03       		.byte	0x3
+ 42026 cb00 91       		.byte	0x91
+ 42027 cb01 A071     		.sleb128 -1888
+ 42028 cb03 00       		.byte	0x0
+ 42029 cb04 35       		.uleb128 0x35
+ 42030 cb05 4F0D0000 		.long	0xd4f
+ 42031 cb09 00000000 		.quad	.LBB3702
+ 42031      00000000 
+ 42032 cb11 00000000 		.quad	.LBE3702
+ 42032      00000000 
+ 42033 cb19 02       		.byte	0x2
+ 42034 cb1a 6E03     		.value	0x36e
+ 42035 cb1c 32       		.uleb128 0x32
+ 42036 cb1d 6A0D0000 		.long	0xd6a
+ 42037 cb21 03       		.byte	0x3
+ 42038 cb22 91       		.byte	0x91
+ 42039 cb23 B071     		.sleb128 -1872
+ 42040 cb25 32       		.uleb128 0x32
+ 42041 cb26 600D0000 		.long	0xd60
+ 42042 cb2a 03       		.byte	0x3
+ 42043 cb2b 91       		.byte	0x91
+ 42044 cb2c C071     		.sleb128 -1856
+ 42045 cb2e 00       		.byte	0x0
+ 42046 cb2f 00       		.byte	0x0
+ 42047 cb30 00       		.byte	0x0
+ 42048 cb31 00       		.byte	0x0
+ 42049 cb32 36       		.uleb128 0x36
+ 42050 cb33 00000000 		.quad	.LBB3704
+ 42050      00000000 
+ 42051 cb3b 00000000 		.quad	.LBE3704
+ 42051      00000000 
+ 42052 cb43 52CB0000 		.long	0xcb52
+ 42053 cb47 34       		.uleb128 0x34
+ 42054 cb48 1C0C0000 		.long	0xc1c
+ 42055 cb4c 04       		.byte	0x4
+ 42056 cb4d 91       		.byte	0x91
+ 42057 cb4e A0B77F   		.sleb128 -9312
+ 42058 cb51 00       		.byte	0x0
+ 42059 cb52 31       		.uleb128 0x31
+ 42060 cb53 4A0E0000 		.long	0xe4a
+ 42061 cb57 00000000 		.quad	.LBB3705
+ 42061      00000000 
+ 42062 cb5f 00000000 		.quad	.LBE3705
+ 42062      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1055
+
+
+ 42063 cb67 02       		.byte	0x2
+ 42064 cb68 9406     		.value	0x694
+ 42065 cb6a EFCB0000 		.long	0xcbef
+ 42066 cb6e 32       		.uleb128 0x32
+ 42067 cb6f 5C0E0000 		.long	0xe5c
+ 42068 cb73 03       		.byte	0x3
+ 42069 cb74 91       		.byte	0x91
+ 42070 cb75 D071     		.sleb128 -1840
+ 42071 cb77 33       		.uleb128 0x33
+ 42072 cb78 00000000 		.quad	.LBB3706
+ 42072      00000000 
+ 42073 cb80 00000000 		.quad	.LBE3706
+ 42073      00000000 
+ 42074 cb88 34       		.uleb128 0x34
+ 42075 cb89 680E0000 		.long	0xe68
+ 42076 cb8d 09       		.byte	0x9
+ 42077 cb8e 03       		.byte	0x3
+ 42078 cb8f 00000000 		.quad	ShiftRowTable.7385
+ 42078      00000000 
+ 42079 cb97 35       		.uleb128 0x35
+ 42080 cb98 A00D0000 		.long	0xda0
+ 42081 cb9c 00000000 		.quad	.LBB3707
+ 42081      00000000 
+ 42082 cba4 00000000 		.quad	.LBE3707
+ 42082      00000000 
+ 42083 cbac 02       		.byte	0x2
+ 42084 cbad 9B02     		.value	0x29b
+ 42085 cbaf 32       		.uleb128 0x32
+ 42086 cbb0 BE0D0000 		.long	0xdbe
+ 42087 cbb4 03       		.byte	0x3
+ 42088 cbb5 91       		.byte	0x91
+ 42089 cbb6 E071     		.sleb128 -1824
+ 42090 cbb8 32       		.uleb128 0x32
+ 42091 cbb9 B20D0000 		.long	0xdb2
+ 42092 cbbd 03       		.byte	0x3
+ 42093 cbbe 91       		.byte	0x91
+ 42094 cbbf F071     		.sleb128 -1808
+ 42095 cbc1 35       		.uleb128 0x35
+ 42096 cbc2 CB0D0000 		.long	0xdcb
+ 42097 cbc6 00000000 		.quad	.LBB3709
+ 42097      00000000 
+ 42098 cbce 00000000 		.quad	.LBE3709
+ 42098      00000000 
+ 42099 cbd6 02       		.byte	0x2
+ 42100 cbd7 7501     		.value	0x175
+ 42101 cbd9 32       		.uleb128 0x32
+ 42102 cbda E90D0000 		.long	0xde9
+ 42103 cbde 03       		.byte	0x3
+ 42104 cbdf 91       		.byte	0x91
+ 42105 cbe0 8072     		.sleb128 -1792
+ 42106 cbe2 32       		.uleb128 0x32
+ 42107 cbe3 DD0D0000 		.long	0xddd
+ 42108 cbe7 03       		.byte	0x3
+ 42109 cbe8 91       		.byte	0x91
+ 42110 cbe9 9072     		.sleb128 -1776
+ 42111 cbeb 00       		.byte	0x0
+ 42112 cbec 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1056
+
+
+ 42113 cbed 00       		.byte	0x0
+ 42114 cbee 00       		.byte	0x0
+ 42115 cbef 36       		.uleb128 0x36
+ 42116 cbf0 00000000 		.quad	.LBB3711
+ 42116      00000000 
+ 42117 cbf8 00000000 		.quad	.LBE3711
+ 42117      00000000 
+ 42118 cc00 0FCC0000 		.long	0xcc0f
+ 42119 cc04 34       		.uleb128 0x34
+ 42120 cc05 2C0C0000 		.long	0xc2c
+ 42121 cc09 04       		.byte	0x4
+ 42122 cc0a 91       		.byte	0x91
+ 42123 cc0b 90B77F   		.sleb128 -9328
+ 42124 cc0e 00       		.byte	0x0
+ 42125 cc0f 31       		.uleb128 0x31
+ 42126 cc10 860E0000 		.long	0xe86
+ 42127 cc14 00000000 		.quad	.LBB3712
+ 42127      00000000 
+ 42128 cc1c 00000000 		.quad	.LBE3712
+ 42128      00000000 
+ 42129 cc24 02       		.byte	0x2
+ 42130 cc25 9606     		.value	0x696
+ 42131 cc27 3ECC0000 		.long	0xcc3e
+ 42132 cc2b 32       		.uleb128 0x32
+ 42133 cc2c A10E0000 		.long	0xea1
+ 42134 cc30 03       		.byte	0x3
+ 42135 cc31 91       		.byte	0x91
+ 42136 cc32 A072     		.sleb128 -1760
+ 42137 cc34 32       		.uleb128 0x32
+ 42138 cc35 970E0000 		.long	0xe97
+ 42139 cc39 03       		.byte	0x3
+ 42140 cc3a 91       		.byte	0x91
+ 42141 cc3b B072     		.sleb128 -1744
+ 42142 cc3d 00       		.byte	0x0
+ 42143 cc3e 36       		.uleb128 0x36
+ 42144 cc3f 00000000 		.quad	.LBB3714
+ 42144      00000000 
+ 42145 cc47 00000000 		.quad	.LBE3714
+ 42145      00000000 
+ 42146 cc4f 5ECC0000 		.long	0xcc5e
+ 42147 cc53 34       		.uleb128 0x34
+ 42148 cc54 3C0C0000 		.long	0xc3c
+ 42149 cc58 04       		.byte	0x4
+ 42150 cc59 91       		.byte	0x91
+ 42151 cc5a 80B77F   		.sleb128 -9344
+ 42152 cc5d 00       		.byte	0x0
+ 42153 cc5e 31       		.uleb128 0x31
+ 42154 cc5f AC0E0000 		.long	0xeac
+ 42155 cc63 00000000 		.quad	.LBB3715
+ 42155      00000000 
+ 42156 cc6b 00000000 		.quad	.LBE3715
+ 42156      00000000 
+ 42157 cc73 02       		.byte	0x2
+ 42158 cc74 9806     		.value	0x698
+ 42159 cc76 AFCC0000 		.long	0xccaf
+ 42160 cc7a 32       		.uleb128 0x32
+ 42161 cc7b BE0E0000 		.long	0xebe
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1057
+
+
+ 42162 cc7f 03       		.byte	0x3
+ 42163 cc80 91       		.byte	0x91
+ 42164 cc81 C072     		.sleb128 -1728
+ 42165 cc83 35       		.uleb128 0x35
+ 42166 cc84 CB0E0000 		.long	0xecb
+ 42167 cc88 00000000 		.quad	.LBB3717
+ 42167      00000000 
+ 42168 cc90 00000000 		.quad	.LBE3717
+ 42168      00000000 
+ 42169 cc98 02       		.byte	0x2
+ 42170 cc99 4905     		.value	0x549
+ 42171 cc9b 32       		.uleb128 0x32
+ 42172 cc9c E90E0000 		.long	0xee9
+ 42173 cca0 03       		.byte	0x3
+ 42174 cca1 91       		.byte	0x91
+ 42175 cca2 DC72     		.sleb128 -1700
+ 42176 cca4 32       		.uleb128 0x32
+ 42177 cca5 DD0E0000 		.long	0xedd
+ 42178 cca9 03       		.byte	0x3
+ 42179 ccaa 91       		.byte	0x91
+ 42180 ccab E072     		.sleb128 -1696
+ 42181 ccad 00       		.byte	0x0
+ 42182 ccae 00       		.byte	0x0
+ 42183 ccaf 33       		.uleb128 0x33
+ 42184 ccb0 00000000 		.quad	.LBB3719
+ 42184      00000000 
+ 42185 ccb8 00000000 		.quad	.LBE3719
+ 42185      00000000 
+ 42186 ccc0 34       		.uleb128 0x34
+ 42187 ccc1 480C0000 		.long	0xc48
+ 42188 ccc5 04       		.byte	0x4
+ 42189 ccc6 91       		.byte	0x91
+ 42190 ccc7 F0B67F   		.sleb128 -9360
+ 42191 ccca 00       		.byte	0x0
+ 42192 cccb 00       		.byte	0x0
+ 42193 cccc 00       		.byte	0x0
+ 42194 cccd 31       		.uleb128 0x31
+ 42195 ccce F60E0000 		.long	0xef6
+ 42196 ccd2 00000000 		.quad	.LBB3720
+ 42196      00000000 
+ 42197 ccda 00000000 		.quad	.LBE3720
+ 42197      00000000 
+ 42198 cce2 02       		.byte	0x2
+ 42199 cce3 9007     		.value	0x790
+ 42200 cce5 E2CE0000 		.long	0xcee2
+ 42201 cce9 32       		.uleb128 0x32
+ 42202 ccea 080F0000 		.long	0xf08
+ 42203 ccee 03       		.byte	0x3
+ 42204 ccef 91       		.byte	0x91
+ 42205 ccf0 F072     		.sleb128 -1680
+ 42206 ccf2 33       		.uleb128 0x33
+ 42207 ccf3 00000000 		.quad	.LBB3721
+ 42207      00000000 
+ 42208 ccfb 00000000 		.quad	.LBE3721
+ 42208      00000000 
+ 42209 cd03 34       		.uleb128 0x34
+ 42210 cd04 140F0000 		.long	0xf14
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1058
+
+
+ 42211 cd08 04       		.byte	0x4
+ 42212 cd09 76       		.byte	0x76
+ 42213 cd0a C0B27F   		.sleb128 -9920
+ 42214 cd0d 31       		.uleb128 0x31
+ 42215 cd0e 210F0000 		.long	0xf21
+ 42216 cd12 00000000 		.quad	.LBB3722
+ 42216      00000000 
+ 42217 cd1a 00000000 		.quad	.LBE3722
+ 42217      00000000 
+ 42218 cd22 02       		.byte	0x2
+ 42219 cd23 1F06     		.value	0x61f
+ 42220 cd25 AACD0000 		.long	0xcdaa
+ 42221 cd29 32       		.uleb128 0x32
+ 42222 cd2a 330F0000 		.long	0xf33
+ 42223 cd2e 03       		.byte	0x3
+ 42224 cd2f 91       		.byte	0x91
+ 42225 cd30 8073     		.sleb128 -1664
+ 42226 cd32 33       		.uleb128 0x33
+ 42227 cd33 00000000 		.quad	.LBB3723
+ 42227      00000000 
+ 42228 cd3b 00000000 		.quad	.LBE3723
+ 42228      00000000 
+ 42229 cd43 34       		.uleb128 0x34
+ 42230 cd44 3F0F0000 		.long	0xf3f
+ 42231 cd48 09       		.byte	0x9
+ 42232 cd49 03       		.byte	0x3
+ 42233 cd4a 00000000 		.quad	mask.7943
+ 42233      00000000 
+ 42234 cd52 35       		.uleb128 0x35
+ 42235 cd53 A00D0000 		.long	0xda0
+ 42236 cd57 00000000 		.quad	.LBB3724
+ 42236      00000000 
+ 42237 cd5f 00000000 		.quad	.LBE3724
+ 42237      00000000 
+ 42238 cd67 02       		.byte	0x2
+ 42239 cd68 FE04     		.value	0x4fe
+ 42240 cd6a 32       		.uleb128 0x32
+ 42241 cd6b BE0D0000 		.long	0xdbe
+ 42242 cd6f 03       		.byte	0x3
+ 42243 cd70 91       		.byte	0x91
+ 42244 cd71 9073     		.sleb128 -1648
+ 42245 cd73 32       		.uleb128 0x32
+ 42246 cd74 B20D0000 		.long	0xdb2
+ 42247 cd78 03       		.byte	0x3
+ 42248 cd79 91       		.byte	0x91
+ 42249 cd7a A073     		.sleb128 -1632
+ 42250 cd7c 35       		.uleb128 0x35
+ 42251 cd7d CB0D0000 		.long	0xdcb
+ 42252 cd81 00000000 		.quad	.LBB3726
+ 42252      00000000 
+ 42253 cd89 00000000 		.quad	.LBE3726
+ 42253      00000000 
+ 42254 cd91 02       		.byte	0x2
+ 42255 cd92 7501     		.value	0x175
+ 42256 cd94 32       		.uleb128 0x32
+ 42257 cd95 E90D0000 		.long	0xde9
+ 42258 cd99 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1059
+
+
+ 42259 cd9a 91       		.byte	0x91
+ 42260 cd9b B073     		.sleb128 -1616
+ 42261 cd9d 32       		.uleb128 0x32
+ 42262 cd9e DD0D0000 		.long	0xddd
+ 42263 cda2 03       		.byte	0x3
+ 42264 cda3 91       		.byte	0x91
+ 42265 cda4 C073     		.sleb128 -1600
+ 42266 cda6 00       		.byte	0x0
+ 42267 cda7 00       		.byte	0x0
+ 42268 cda8 00       		.byte	0x0
+ 42269 cda9 00       		.byte	0x0
+ 42270 cdaa 31       		.uleb128 0x31
+ 42271 cdab 210F0000 		.long	0xf21
+ 42272 cdaf 00000000 		.quad	.LBB3728
+ 42272      00000000 
+ 42273 cdb7 00000000 		.quad	.LBE3728
+ 42273      00000000 
+ 42274 cdbf 02       		.byte	0x2
+ 42275 cdc0 2006     		.value	0x620
+ 42276 cdc2 47CE0000 		.long	0xce47
+ 42277 cdc6 32       		.uleb128 0x32
+ 42278 cdc7 330F0000 		.long	0xf33
+ 42279 cdcb 03       		.byte	0x3
+ 42280 cdcc 91       		.byte	0x91
+ 42281 cdcd D073     		.sleb128 -1584
+ 42282 cdcf 33       		.uleb128 0x33
+ 42283 cdd0 00000000 		.quad	.LBB3729
+ 42283      00000000 
+ 42284 cdd8 00000000 		.quad	.LBE3729
+ 42284      00000000 
+ 42285 cde0 34       		.uleb128 0x34
+ 42286 cde1 3F0F0000 		.long	0xf3f
+ 42287 cde5 09       		.byte	0x9
+ 42288 cde6 03       		.byte	0x3
+ 42289 cde7 00000000 		.quad	mask.7943
+ 42289      00000000 
+ 42290 cdef 35       		.uleb128 0x35
+ 42291 cdf0 A00D0000 		.long	0xda0
+ 42292 cdf4 00000000 		.quad	.LBB3730
+ 42292      00000000 
+ 42293 cdfc 00000000 		.quad	.LBE3730
+ 42293      00000000 
+ 42294 ce04 02       		.byte	0x2
+ 42295 ce05 FE04     		.value	0x4fe
+ 42296 ce07 32       		.uleb128 0x32
+ 42297 ce08 BE0D0000 		.long	0xdbe
+ 42298 ce0c 03       		.byte	0x3
+ 42299 ce0d 91       		.byte	0x91
+ 42300 ce0e E073     		.sleb128 -1568
+ 42301 ce10 32       		.uleb128 0x32
+ 42302 ce11 B20D0000 		.long	0xdb2
+ 42303 ce15 03       		.byte	0x3
+ 42304 ce16 91       		.byte	0x91
+ 42305 ce17 F073     		.sleb128 -1552
+ 42306 ce19 35       		.uleb128 0x35
+ 42307 ce1a CB0D0000 		.long	0xdcb
+ 42308 ce1e 00000000 		.quad	.LBB3732
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1060
+
+
+ 42308      00000000 
+ 42309 ce26 00000000 		.quad	.LBE3732
+ 42309      00000000 
+ 42310 ce2e 02       		.byte	0x2
+ 42311 ce2f 7501     		.value	0x175
+ 42312 ce31 32       		.uleb128 0x32
+ 42313 ce32 E90D0000 		.long	0xde9
+ 42314 ce36 03       		.byte	0x3
+ 42315 ce37 91       		.byte	0x91
+ 42316 ce38 8074     		.sleb128 -1536
+ 42317 ce3a 32       		.uleb128 0x32
+ 42318 ce3b DD0D0000 		.long	0xddd
+ 42319 ce3f 03       		.byte	0x3
+ 42320 ce40 91       		.byte	0x91
+ 42321 ce41 9074     		.sleb128 -1520
+ 42322 ce43 00       		.byte	0x0
+ 42323 ce44 00       		.byte	0x0
+ 42324 ce45 00       		.byte	0x0
+ 42325 ce46 00       		.byte	0x0
+ 42326 ce47 35       		.uleb128 0x35
+ 42327 ce48 210F0000 		.long	0xf21
+ 42328 ce4c 00000000 		.quad	.LBB3734
+ 42328      00000000 
+ 42329 ce54 00000000 		.quad	.LBE3734
+ 42329      00000000 
+ 42330 ce5c 02       		.byte	0x2
+ 42331 ce5d 2106     		.value	0x621
+ 42332 ce5f 32       		.uleb128 0x32
+ 42333 ce60 330F0000 		.long	0xf33
+ 42334 ce64 03       		.byte	0x3
+ 42335 ce65 91       		.byte	0x91
+ 42336 ce66 A074     		.sleb128 -1504
+ 42337 ce68 33       		.uleb128 0x33
+ 42338 ce69 00000000 		.quad	.LBB3735
+ 42338      00000000 
+ 42339 ce71 00000000 		.quad	.LBE3735
+ 42339      00000000 
+ 42340 ce79 34       		.uleb128 0x34
+ 42341 ce7a 3F0F0000 		.long	0xf3f
+ 42342 ce7e 09       		.byte	0x9
+ 42343 ce7f 03       		.byte	0x3
+ 42344 ce80 00000000 		.quad	mask.7943
+ 42344      00000000 
+ 42345 ce88 35       		.uleb128 0x35
+ 42346 ce89 A00D0000 		.long	0xda0
+ 42347 ce8d 00000000 		.quad	.LBB3736
+ 42347      00000000 
+ 42348 ce95 00000000 		.quad	.LBE3736
+ 42348      00000000 
+ 42349 ce9d 02       		.byte	0x2
+ 42350 ce9e FE04     		.value	0x4fe
+ 42351 cea0 32       		.uleb128 0x32
+ 42352 cea1 BE0D0000 		.long	0xdbe
+ 42353 cea5 03       		.byte	0x3
+ 42354 cea6 91       		.byte	0x91
+ 42355 cea7 B074     		.sleb128 -1488
+ 42356 cea9 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1061
+
+
+ 42357 ceaa B20D0000 		.long	0xdb2
+ 42358 ceae 03       		.byte	0x3
+ 42359 ceaf 91       		.byte	0x91
+ 42360 ceb0 C074     		.sleb128 -1472
+ 42361 ceb2 35       		.uleb128 0x35
+ 42362 ceb3 CB0D0000 		.long	0xdcb
+ 42363 ceb7 00000000 		.quad	.LBB3738
+ 42363      00000000 
+ 42364 cebf 00000000 		.quad	.LBE3738
+ 42364      00000000 
+ 42365 cec7 02       		.byte	0x2
+ 42366 cec8 7501     		.value	0x175
+ 42367 ceca 32       		.uleb128 0x32
+ 42368 cecb E90D0000 		.long	0xde9
+ 42369 cecf 03       		.byte	0x3
+ 42370 ced0 91       		.byte	0x91
+ 42371 ced1 D074     		.sleb128 -1456
+ 42372 ced3 32       		.uleb128 0x32
+ 42373 ced4 DD0D0000 		.long	0xddd
+ 42374 ced8 03       		.byte	0x3
+ 42375 ced9 91       		.byte	0x91
+ 42376 ceda E074     		.sleb128 -1440
+ 42377 cedc 00       		.byte	0x0
+ 42378 cedd 00       		.byte	0x0
+ 42379 cede 00       		.byte	0x0
+ 42380 cedf 00       		.byte	0x0
+ 42381 cee0 00       		.byte	0x0
+ 42382 cee1 00       		.byte	0x0
+ 42383 cee2 31       		.uleb128 0x31
+ 42384 cee3 860E0000 		.long	0xe86
+ 42385 cee7 00000000 		.quad	.LBB3740
+ 42385      00000000 
+ 42386 ceef 00000000 		.quad	.LBE3740
+ 42386      00000000 
+ 42387 cef7 02       		.byte	0x2
+ 42388 cef8 9007     		.value	0x790
+ 42389 cefa 11CF0000 		.long	0xcf11
+ 42390 cefe 32       		.uleb128 0x32
+ 42391 ceff A10E0000 		.long	0xea1
+ 42392 cf03 03       		.byte	0x3
+ 42393 cf04 91       		.byte	0x91
+ 42394 cf05 F074     		.sleb128 -1424
+ 42395 cf07 32       		.uleb128 0x32
+ 42396 cf08 970E0000 		.long	0xe97
+ 42397 cf0c 03       		.byte	0x3
+ 42398 cf0d 91       		.byte	0x91
+ 42399 cf0e 8075     		.sleb128 -1408
+ 42400 cf10 00       		.byte	0x0
+ 42401 cf11 31       		.uleb128 0x31
+ 42402 cf12 8F940000 		.long	0x948f
+ 42403 cf16 00000000 		.quad	.LBB3742
+ 42403      00000000 
+ 42404 cf1e 00000000 		.quad	.LBE3742
+ 42404      00000000 
+ 42405 cf26 02       		.byte	0x2
+ 42406 cf27 9107     		.value	0x791
+ 42407 cf29 A3CF0000 		.long	0xcfa3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1062
+
+
+ 42408 cf2d 32       		.uleb128 0x32
+ 42409 cf2e A1940000 		.long	0x94a1
+ 42410 cf32 03       		.byte	0x3
+ 42411 cf33 91       		.byte	0x91
+ 42412 cf34 9075     		.sleb128 -1392
+ 42413 cf36 33       		.uleb128 0x33
+ 42414 cf37 00000000 		.quad	.LBB3743
+ 42414      00000000 
+ 42415 cf3f 00000000 		.quad	.LBE3743
+ 42415      00000000 
+ 42416 cf47 34       		.uleb128 0x34
+ 42417 cf48 AD940000 		.long	0x94ad
+ 42418 cf4c 04       		.byte	0x4
+ 42419 cf4d 91       		.byte	0x91
+ 42420 cf4e C0B77F   		.sleb128 -9280
+ 42421 cf51 34       		.uleb128 0x34
+ 42422 cf52 B7940000 		.long	0x94b7
+ 42423 cf56 03       		.byte	0x3
+ 42424 cf57 91       		.byte	0x91
+ 42425 cf58 A475     		.sleb128 -1372
+ 42426 cf5a 35       		.uleb128 0x35
+ 42427 cf5b BE560000 		.long	0x56be
+ 42428 cf5f 00000000 		.quad	.LBB3744
+ 42428      00000000 
+ 42429 cf67 00000000 		.quad	.LBE3744
+ 42429      00000000 
+ 42430 cf6f 02       		.byte	0x2
+ 42431 cf70 7906     		.value	0x679
+ 42432 cf72 32       		.uleb128 0x32
+ 42433 cf73 D0560000 		.long	0x56d0
+ 42434 cf77 03       		.byte	0x3
+ 42435 cf78 91       		.byte	0x91
+ 42436 cf79 A875     		.sleb128 -1368
+ 42437 cf7b 33       		.uleb128 0x33
+ 42438 cf7c 00000000 		.quad	.LBB3745
+ 42438      00000000 
+ 42439 cf84 00000000 		.quad	.LBE3745
+ 42439      00000000 
+ 42440 cf8c 34       		.uleb128 0x34
+ 42441 cf8d DA560000 		.long	0x56da
+ 42442 cf91 04       		.byte	0x4
+ 42443 cf92 91       		.byte	0x91
+ 42444 cf93 B0B77F   		.sleb128 -9296
+ 42445 cf96 34       		.uleb128 0x34
+ 42446 cf97 E6560000 		.long	0x56e6
+ 42447 cf9b 03       		.byte	0x3
+ 42448 cf9c 91       		.byte	0x91
+ 42449 cf9d AC75     		.sleb128 -1364
+ 42450 cf9f 00       		.byte	0x0
+ 42451 cfa0 00       		.byte	0x0
+ 42452 cfa1 00       		.byte	0x0
+ 42453 cfa2 00       		.byte	0x0
+ 42454 cfa3 31       		.uleb128 0x31
+ 42455 cfa4 F60E0000 		.long	0xef6
+ 42456 cfa8 00000000 		.quad	.LBB3746
+ 42456      00000000 
+ 42457 cfb0 00000000 		.quad	.LBE3746
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1063
+
+
+ 42457      00000000 
+ 42458 cfb8 02       		.byte	0x2
+ 42459 cfb9 9107     		.value	0x791
+ 42460 cfbb B8D10000 		.long	0xd1b8
+ 42461 cfbf 32       		.uleb128 0x32
+ 42462 cfc0 080F0000 		.long	0xf08
+ 42463 cfc4 03       		.byte	0x3
+ 42464 cfc5 91       		.byte	0x91
+ 42465 cfc6 B075     		.sleb128 -1360
+ 42466 cfc8 33       		.uleb128 0x33
+ 42467 cfc9 00000000 		.quad	.LBB3747
+ 42467      00000000 
+ 42468 cfd1 00000000 		.quad	.LBE3747
+ 42468      00000000 
+ 42469 cfd9 34       		.uleb128 0x34
+ 42470 cfda 140F0000 		.long	0xf14
+ 42471 cfde 04       		.byte	0x4
+ 42472 cfdf 76       		.byte	0x76
+ 42473 cfe0 D0B27F   		.sleb128 -9904
+ 42474 cfe3 31       		.uleb128 0x31
+ 42475 cfe4 210F0000 		.long	0xf21
+ 42476 cfe8 00000000 		.quad	.LBB3748
+ 42476      00000000 
+ 42477 cff0 00000000 		.quad	.LBE3748
+ 42477      00000000 
+ 42478 cff8 02       		.byte	0x2
+ 42479 cff9 1F06     		.value	0x61f
+ 42480 cffb 80D00000 		.long	0xd080
+ 42481 cfff 32       		.uleb128 0x32
+ 42482 d000 330F0000 		.long	0xf33
+ 42483 d004 03       		.byte	0x3
+ 42484 d005 91       		.byte	0x91
+ 42485 d006 C075     		.sleb128 -1344
+ 42486 d008 33       		.uleb128 0x33
+ 42487 d009 00000000 		.quad	.LBB3749
+ 42487      00000000 
+ 42488 d011 00000000 		.quad	.LBE3749
+ 42488      00000000 
+ 42489 d019 34       		.uleb128 0x34
+ 42490 d01a 3F0F0000 		.long	0xf3f
+ 42491 d01e 09       		.byte	0x9
+ 42492 d01f 03       		.byte	0x3
+ 42493 d020 00000000 		.quad	mask.7943
+ 42493      00000000 
+ 42494 d028 35       		.uleb128 0x35
+ 42495 d029 A00D0000 		.long	0xda0
+ 42496 d02d 00000000 		.quad	.LBB3750
+ 42496      00000000 
+ 42497 d035 00000000 		.quad	.LBE3750
+ 42497      00000000 
+ 42498 d03d 02       		.byte	0x2
+ 42499 d03e FE04     		.value	0x4fe
+ 42500 d040 32       		.uleb128 0x32
+ 42501 d041 BE0D0000 		.long	0xdbe
+ 42502 d045 03       		.byte	0x3
+ 42503 d046 91       		.byte	0x91
+ 42504 d047 D075     		.sleb128 -1328
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1064
+
+
+ 42505 d049 32       		.uleb128 0x32
+ 42506 d04a B20D0000 		.long	0xdb2
+ 42507 d04e 03       		.byte	0x3
+ 42508 d04f 91       		.byte	0x91
+ 42509 d050 E075     		.sleb128 -1312
+ 42510 d052 35       		.uleb128 0x35
+ 42511 d053 CB0D0000 		.long	0xdcb
+ 42512 d057 00000000 		.quad	.LBB3752
+ 42512      00000000 
+ 42513 d05f 00000000 		.quad	.LBE3752
+ 42513      00000000 
+ 42514 d067 02       		.byte	0x2
+ 42515 d068 7501     		.value	0x175
+ 42516 d06a 32       		.uleb128 0x32
+ 42517 d06b E90D0000 		.long	0xde9
+ 42518 d06f 03       		.byte	0x3
+ 42519 d070 91       		.byte	0x91
+ 42520 d071 F075     		.sleb128 -1296
+ 42521 d073 32       		.uleb128 0x32
+ 42522 d074 DD0D0000 		.long	0xddd
+ 42523 d078 03       		.byte	0x3
+ 42524 d079 91       		.byte	0x91
+ 42525 d07a 8076     		.sleb128 -1280
+ 42526 d07c 00       		.byte	0x0
+ 42527 d07d 00       		.byte	0x0
+ 42528 d07e 00       		.byte	0x0
+ 42529 d07f 00       		.byte	0x0
+ 42530 d080 31       		.uleb128 0x31
+ 42531 d081 210F0000 		.long	0xf21
+ 42532 d085 00000000 		.quad	.LBB3754
+ 42532      00000000 
+ 42533 d08d 00000000 		.quad	.LBE3754
+ 42533      00000000 
+ 42534 d095 02       		.byte	0x2
+ 42535 d096 2006     		.value	0x620
+ 42536 d098 1DD10000 		.long	0xd11d
+ 42537 d09c 32       		.uleb128 0x32
+ 42538 d09d 330F0000 		.long	0xf33
+ 42539 d0a1 03       		.byte	0x3
+ 42540 d0a2 91       		.byte	0x91
+ 42541 d0a3 9076     		.sleb128 -1264
+ 42542 d0a5 33       		.uleb128 0x33
+ 42543 d0a6 00000000 		.quad	.LBB3755
+ 42543      00000000 
+ 42544 d0ae 00000000 		.quad	.LBE3755
+ 42544      00000000 
+ 42545 d0b6 34       		.uleb128 0x34
+ 42546 d0b7 3F0F0000 		.long	0xf3f
+ 42547 d0bb 09       		.byte	0x9
+ 42548 d0bc 03       		.byte	0x3
+ 42549 d0bd 00000000 		.quad	mask.7943
+ 42549      00000000 
+ 42550 d0c5 35       		.uleb128 0x35
+ 42551 d0c6 A00D0000 		.long	0xda0
+ 42552 d0ca 00000000 		.quad	.LBB3756
+ 42552      00000000 
+ 42553 d0d2 00000000 		.quad	.LBE3756
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1065
+
+
+ 42553      00000000 
+ 42554 d0da 02       		.byte	0x2
+ 42555 d0db FE04     		.value	0x4fe
+ 42556 d0dd 32       		.uleb128 0x32
+ 42557 d0de BE0D0000 		.long	0xdbe
+ 42558 d0e2 03       		.byte	0x3
+ 42559 d0e3 91       		.byte	0x91
+ 42560 d0e4 A076     		.sleb128 -1248
+ 42561 d0e6 32       		.uleb128 0x32
+ 42562 d0e7 B20D0000 		.long	0xdb2
+ 42563 d0eb 03       		.byte	0x3
+ 42564 d0ec 91       		.byte	0x91
+ 42565 d0ed B076     		.sleb128 -1232
+ 42566 d0ef 35       		.uleb128 0x35
+ 42567 d0f0 CB0D0000 		.long	0xdcb
+ 42568 d0f4 00000000 		.quad	.LBB3758
+ 42568      00000000 
+ 42569 d0fc 00000000 		.quad	.LBE3758
+ 42569      00000000 
+ 42570 d104 02       		.byte	0x2
+ 42571 d105 7501     		.value	0x175
+ 42572 d107 32       		.uleb128 0x32
+ 42573 d108 E90D0000 		.long	0xde9
+ 42574 d10c 03       		.byte	0x3
+ 42575 d10d 91       		.byte	0x91
+ 42576 d10e C076     		.sleb128 -1216
+ 42577 d110 32       		.uleb128 0x32
+ 42578 d111 DD0D0000 		.long	0xddd
+ 42579 d115 03       		.byte	0x3
+ 42580 d116 91       		.byte	0x91
+ 42581 d117 D076     		.sleb128 -1200
+ 42582 d119 00       		.byte	0x0
+ 42583 d11a 00       		.byte	0x0
+ 42584 d11b 00       		.byte	0x0
+ 42585 d11c 00       		.byte	0x0
+ 42586 d11d 35       		.uleb128 0x35
+ 42587 d11e 210F0000 		.long	0xf21
+ 42588 d122 00000000 		.quad	.LBB3760
+ 42588      00000000 
+ 42589 d12a 00000000 		.quad	.LBE3760
+ 42589      00000000 
+ 42590 d132 02       		.byte	0x2
+ 42591 d133 2106     		.value	0x621
+ 42592 d135 32       		.uleb128 0x32
+ 42593 d136 330F0000 		.long	0xf33
+ 42594 d13a 03       		.byte	0x3
+ 42595 d13b 91       		.byte	0x91
+ 42596 d13c E076     		.sleb128 -1184
+ 42597 d13e 33       		.uleb128 0x33
+ 42598 d13f 00000000 		.quad	.LBB3761
+ 42598      00000000 
+ 42599 d147 00000000 		.quad	.LBE3761
+ 42599      00000000 
+ 42600 d14f 34       		.uleb128 0x34
+ 42601 d150 3F0F0000 		.long	0xf3f
+ 42602 d154 09       		.byte	0x9
+ 42603 d155 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1066
+
+
+ 42604 d156 00000000 		.quad	mask.7943
+ 42604      00000000 
+ 42605 d15e 35       		.uleb128 0x35
+ 42606 d15f A00D0000 		.long	0xda0
+ 42607 d163 00000000 		.quad	.LBB3762
+ 42607      00000000 
+ 42608 d16b 00000000 		.quad	.LBE3762
+ 42608      00000000 
+ 42609 d173 02       		.byte	0x2
+ 42610 d174 FE04     		.value	0x4fe
+ 42611 d176 32       		.uleb128 0x32
+ 42612 d177 BE0D0000 		.long	0xdbe
+ 42613 d17b 03       		.byte	0x3
+ 42614 d17c 91       		.byte	0x91
+ 42615 d17d F076     		.sleb128 -1168
+ 42616 d17f 32       		.uleb128 0x32
+ 42617 d180 B20D0000 		.long	0xdb2
+ 42618 d184 03       		.byte	0x3
+ 42619 d185 91       		.byte	0x91
+ 42620 d186 8077     		.sleb128 -1152
+ 42621 d188 35       		.uleb128 0x35
+ 42622 d189 CB0D0000 		.long	0xdcb
+ 42623 d18d 00000000 		.quad	.LBB3764
+ 42623      00000000 
+ 42624 d195 00000000 		.quad	.LBE3764
+ 42624      00000000 
+ 42625 d19d 02       		.byte	0x2
+ 42626 d19e 7501     		.value	0x175
+ 42627 d1a0 32       		.uleb128 0x32
+ 42628 d1a1 E90D0000 		.long	0xde9
+ 42629 d1a5 03       		.byte	0x3
+ 42630 d1a6 91       		.byte	0x91
+ 42631 d1a7 9077     		.sleb128 -1136
+ 42632 d1a9 32       		.uleb128 0x32
+ 42633 d1aa DD0D0000 		.long	0xddd
+ 42634 d1ae 03       		.byte	0x3
+ 42635 d1af 91       		.byte	0x91
+ 42636 d1b0 A077     		.sleb128 -1120
+ 42637 d1b2 00       		.byte	0x0
+ 42638 d1b3 00       		.byte	0x0
+ 42639 d1b4 00       		.byte	0x0
+ 42640 d1b5 00       		.byte	0x0
+ 42641 d1b6 00       		.byte	0x0
+ 42642 d1b7 00       		.byte	0x0
+ 42643 d1b8 31       		.uleb128 0x31
+ 42644 d1b9 860E0000 		.long	0xe86
+ 42645 d1bd 00000000 		.quad	.LBB3766
+ 42645      00000000 
+ 42646 d1c5 00000000 		.quad	.LBE3766
+ 42646      00000000 
+ 42647 d1cd 02       		.byte	0x2
+ 42648 d1ce 9107     		.value	0x791
+ 42649 d1d0 E7D10000 		.long	0xd1e7
+ 42650 d1d4 32       		.uleb128 0x32
+ 42651 d1d5 A10E0000 		.long	0xea1
+ 42652 d1d9 03       		.byte	0x3
+ 42653 d1da 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1067
+
+
+ 42654 d1db B077     		.sleb128 -1104
+ 42655 d1dd 32       		.uleb128 0x32
+ 42656 d1de 970E0000 		.long	0xe97
+ 42657 d1e2 03       		.byte	0x3
+ 42658 d1e3 91       		.byte	0x91
+ 42659 d1e4 C077     		.sleb128 -1088
+ 42660 d1e6 00       		.byte	0x0
+ 42661 d1e7 31       		.uleb128 0x31
+ 42662 d1e8 D50B0000 		.long	0xbd5
+ 42663 d1ec 00000000 		.quad	.LBB3768
+ 42663      00000000 
+ 42664 d1f4 00000000 		.quad	.LBE3768
+ 42664      00000000 
+ 42665 d1fc 02       		.byte	0x2
+ 42666 d1fd 9207     		.value	0x792
+ 42667 d1ff CAD60000 		.long	0xd6ca
+ 42668 d203 32       		.uleb128 0x32
+ 42669 d204 F30B0000 		.long	0xbf3
+ 42670 d208 03       		.byte	0x3
+ 42671 d209 91       		.byte	0x91
+ 42672 d20a DC77     		.sleb128 -1060
+ 42673 d20c 32       		.uleb128 0x32
+ 42674 d20d E70B0000 		.long	0xbe7
+ 42675 d211 03       		.byte	0x3
+ 42676 d212 91       		.byte	0x91
+ 42677 d213 E077     		.sleb128 -1056
+ 42678 d215 33       		.uleb128 0x33
+ 42679 d216 00000000 		.quad	.LBB3769
+ 42679      00000000 
+ 42680 d21e 00000000 		.quad	.LBE3769
+ 42680      00000000 
+ 42681 d226 34       		.uleb128 0x34
+ 42682 d227 FF0B0000 		.long	0xbff
+ 42683 d22b 04       		.byte	0x4
+ 42684 d22c 76       		.byte	0x76
+ 42685 d22d F0B27F   		.sleb128 -9872
+ 42686 d230 34       		.uleb128 0x34
+ 42687 d231 0B0C0000 		.long	0xc0b
+ 42688 d235 04       		.byte	0x4
+ 42689 d236 76       		.byte	0x76
+ 42690 d237 E0B27F   		.sleb128 -9888
+ 42691 d23a 31       		.uleb128 0x31
+ 42692 d23b 540C0000 		.long	0xc54
+ 42693 d23f 00000000 		.quad	.LBB3770
+ 42693      00000000 
+ 42694 d247 00000000 		.quad	.LBE3770
+ 42694      00000000 
+ 42695 d24f 02       		.byte	0x2
+ 42696 d250 9106     		.value	0x691
+ 42697 d252 A6D20000 		.long	0xd2a6
+ 42698 d256 32       		.uleb128 0x32
+ 42699 d257 7E0C0000 		.long	0xc7e
+ 42700 d25b 03       		.byte	0x3
+ 42701 d25c 91       		.byte	0x91
+ 42702 d25d F877     		.sleb128 -1032
+ 42703 d25f 32       		.uleb128 0x32
+ 42704 d260 720C0000 		.long	0xc72
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1068
+
+
+ 42705 d264 03       		.byte	0x3
+ 42706 d265 91       		.byte	0x91
+ 42707 d266 FC77     		.sleb128 -1028
+ 42708 d268 32       		.uleb128 0x32
+ 42709 d269 660C0000 		.long	0xc66
+ 42710 d26d 03       		.byte	0x3
+ 42711 d26e 91       		.byte	0x91
+ 42712 d26f 8078     		.sleb128 -1024
+ 42713 d271 35       		.uleb128 0x35
+ 42714 d272 8B0C0000 		.long	0xc8b
+ 42715 d276 00000000 		.quad	.LBB3772
+ 42715      00000000 
+ 42716 d27e 00000000 		.quad	.LBE3772
+ 42716      00000000 
+ 42717 d286 02       		.byte	0x2
+ 42718 d287 0702     		.value	0x207
+ 42719 d289 32       		.uleb128 0x32
+ 42720 d28a B40C0000 		.long	0xcb4
+ 42721 d28e 03       		.byte	0x3
+ 42722 d28f 91       		.byte	0x91
+ 42723 d290 9878     		.sleb128 -1000
+ 42724 d292 32       		.uleb128 0x32
+ 42725 d293 A90C0000 		.long	0xca9
+ 42726 d297 03       		.byte	0x3
+ 42727 d298 91       		.byte	0x91
+ 42728 d299 9C78     		.sleb128 -996
+ 42729 d29b 32       		.uleb128 0x32
+ 42730 d29c 9D0C0000 		.long	0xc9d
+ 42731 d2a0 03       		.byte	0x3
+ 42732 d2a1 91       		.byte	0x91
+ 42733 d2a2 A078     		.sleb128 -992
+ 42734 d2a4 00       		.byte	0x0
+ 42735 d2a5 00       		.byte	0x0
+ 42736 d2a6 31       		.uleb128 0x31
+ 42737 d2a7 C10C0000 		.long	0xcc1
+ 42738 d2ab 00000000 		.quad	.LBB3774
+ 42738      00000000 
+ 42739 d2b3 00000000 		.quad	.LBE3774
+ 42739      00000000 
+ 42740 d2bb 02       		.byte	0x2
+ 42741 d2bc 9206     		.value	0x692
+ 42742 d2be 2FD50000 		.long	0xd52f
+ 42743 d2c2 32       		.uleb128 0x32
+ 42744 d2c3 D30C0000 		.long	0xcd3
+ 42745 d2c7 03       		.byte	0x3
+ 42746 d2c8 91       		.byte	0x91
+ 42747 d2c9 B078     		.sleb128 -976
+ 42748 d2cb 35       		.uleb128 0x35
+ 42749 d2cc E00C0000 		.long	0xce0
+ 42750 d2d0 00000000 		.quad	.LBB3776
+ 42750      00000000 
+ 42751 d2d8 00000000 		.quad	.LBE3776
+ 42751      00000000 
+ 42752 d2e0 02       		.byte	0x2
+ 42753 d2e1 7D03     		.value	0x37d
+ 42754 d2e3 32       		.uleb128 0x32
+ 42755 d2e4 FE0C0000 		.long	0xcfe
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1069
+
+
+ 42756 d2e8 03       		.byte	0x3
+ 42757 d2e9 91       		.byte	0x91
+ 42758 d2ea C878     		.sleb128 -952
+ 42759 d2ec 32       		.uleb128 0x32
+ 42760 d2ed F20C0000 		.long	0xcf2
+ 42761 d2f1 03       		.byte	0x3
+ 42762 d2f2 91       		.byte	0x91
+ 42763 d2f3 D078     		.sleb128 -944
+ 42764 d2f5 33       		.uleb128 0x33
+ 42765 d2f6 00000000 		.quad	.LBB3777
+ 42765      00000000 
+ 42766 d2fe 00000000 		.quad	.LBE3777
+ 42766      00000000 
+ 42767 d306 34       		.uleb128 0x34
+ 42768 d307 0A0D0000 		.long	0xd0a
+ 42769 d30b 03       		.byte	0x3
+ 42770 d30c 91       		.byte	0x91
+ 42771 d30d A079     		.sleb128 -864
+ 42772 d30f 34       		.uleb128 0x34
+ 42773 d310 150D0000 		.long	0xd15
+ 42774 d314 03       		.byte	0x3
+ 42775 d315 91       		.byte	0x91
+ 42776 d316 9079     		.sleb128 -880
+ 42777 d318 34       		.uleb128 0x34
+ 42778 d319 200D0000 		.long	0xd20
+ 42779 d31d 03       		.byte	0x3
+ 42780 d31e 91       		.byte	0x91
+ 42781 d31f 8079     		.sleb128 -896
+ 42782 d321 34       		.uleb128 0x34
+ 42783 d322 2C0D0000 		.long	0xd2c
+ 42784 d326 03       		.byte	0x3
+ 42785 d327 91       		.byte	0x91
+ 42786 d328 F078     		.sleb128 -912
+ 42787 d32a 34       		.uleb128 0x34
+ 42788 d32b 380D0000 		.long	0xd38
+ 42789 d32f 03       		.byte	0x3
+ 42790 d330 91       		.byte	0x91
+ 42791 d331 EC78     		.sleb128 -916
+ 42792 d333 31       		.uleb128 0x31
+ 42793 d334 4F0D0000 		.long	0xd4f
+ 42794 d338 00000000 		.quad	.LBB3778
+ 42794      00000000 
+ 42795 d340 00000000 		.quad	.LBE3778
+ 42795      00000000 
+ 42796 d348 02       		.byte	0x2
+ 42797 d349 5603     		.value	0x356
+ 42798 d34b 62D30000 		.long	0xd362
+ 42799 d34f 32       		.uleb128 0x32
+ 42800 d350 6A0D0000 		.long	0xd6a
+ 42801 d354 03       		.byte	0x3
+ 42802 d355 91       		.byte	0x91
+ 42803 d356 B079     		.sleb128 -848
+ 42804 d358 32       		.uleb128 0x32
+ 42805 d359 600D0000 		.long	0xd60
+ 42806 d35d 03       		.byte	0x3
+ 42807 d35e 91       		.byte	0x91
+ 42808 d35f C079     		.sleb128 -832
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1070
+
+
+ 42809 d361 00       		.byte	0x0
+ 42810 d362 31       		.uleb128 0x31
+ 42811 d363 750D0000 		.long	0xd75
+ 42812 d367 00000000 		.quad	.LBB3780
+ 42812      00000000 
+ 42813 d36f 00000000 		.quad	.LBE3780
+ 42813      00000000 
+ 42814 d377 02       		.byte	0x2
+ 42815 d378 5903     		.value	0x359
+ 42816 d37a 91D30000 		.long	0xd391
+ 42817 d37e 32       		.uleb128 0x32
+ 42818 d37f 930D0000 		.long	0xd93
+ 42819 d383 03       		.byte	0x3
+ 42820 d384 91       		.byte	0x91
+ 42821 d385 DC79     		.sleb128 -804
+ 42822 d387 32       		.uleb128 0x32
+ 42823 d388 870D0000 		.long	0xd87
+ 42824 d38c 03       		.byte	0x3
+ 42825 d38d 91       		.byte	0x91
+ 42826 d38e E079     		.sleb128 -800
+ 42827 d390 00       		.byte	0x0
+ 42828 d391 31       		.uleb128 0x31
+ 42829 d392 4F0D0000 		.long	0xd4f
+ 42830 d396 00000000 		.quad	.LBB3782
+ 42830      00000000 
+ 42831 d39e 00000000 		.quad	.LBE3782
+ 42831      00000000 
+ 42832 d3a6 02       		.byte	0x2
+ 42833 d3a7 5B03     		.value	0x35b
+ 42834 d3a9 C0D30000 		.long	0xd3c0
+ 42835 d3ad 32       		.uleb128 0x32
+ 42836 d3ae 6A0D0000 		.long	0xd6a
+ 42837 d3b2 03       		.byte	0x3
+ 42838 d3b3 91       		.byte	0x91
+ 42839 d3b4 F079     		.sleb128 -784
+ 42840 d3b6 32       		.uleb128 0x32
+ 42841 d3b7 600D0000 		.long	0xd60
+ 42842 d3bb 03       		.byte	0x3
+ 42843 d3bc 91       		.byte	0x91
+ 42844 d3bd 807A     		.sleb128 -768
+ 42845 d3bf 00       		.byte	0x0
+ 42846 d3c0 31       		.uleb128 0x31
+ 42847 d3c1 A00D0000 		.long	0xda0
+ 42848 d3c5 00000000 		.quad	.LBB3784
+ 42848      00000000 
+ 42849 d3cd 00000000 		.quad	.LBE3784
+ 42849      00000000 
+ 42850 d3d5 02       		.byte	0x2
+ 42851 d3d6 6403     		.value	0x364
+ 42852 d3d8 1AD40000 		.long	0xd41a
+ 42853 d3dc 32       		.uleb128 0x32
+ 42854 d3dd BE0D0000 		.long	0xdbe
+ 42855 d3e1 03       		.byte	0x3
+ 42856 d3e2 91       		.byte	0x91
+ 42857 d3e3 907A     		.sleb128 -752
+ 42858 d3e5 32       		.uleb128 0x32
+ 42859 d3e6 B20D0000 		.long	0xdb2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1071
+
+
+ 42860 d3ea 03       		.byte	0x3
+ 42861 d3eb 91       		.byte	0x91
+ 42862 d3ec A07A     		.sleb128 -736
+ 42863 d3ee 35       		.uleb128 0x35
+ 42864 d3ef CB0D0000 		.long	0xdcb
+ 42865 d3f3 00000000 		.quad	.LBB3786
+ 42865      00000000 
+ 42866 d3fb 00000000 		.quad	.LBE3786
+ 42866      00000000 
+ 42867 d403 02       		.byte	0x2
+ 42868 d404 7501     		.value	0x175
+ 42869 d406 32       		.uleb128 0x32
+ 42870 d407 E90D0000 		.long	0xde9
+ 42871 d40b 03       		.byte	0x3
+ 42872 d40c 91       		.byte	0x91
+ 42873 d40d B07A     		.sleb128 -720
+ 42874 d40f 32       		.uleb128 0x32
+ 42875 d410 DD0D0000 		.long	0xddd
+ 42876 d414 03       		.byte	0x3
+ 42877 d415 91       		.byte	0x91
+ 42878 d416 C07A     		.sleb128 -704
+ 42879 d418 00       		.byte	0x0
+ 42880 d419 00       		.byte	0x0
+ 42881 d41a 31       		.uleb128 0x31
+ 42882 d41b FB0D0000 		.long	0xdfb
+ 42883 d41f 00000000 		.quad	.LBB3788
+ 42883      00000000 
+ 42884 d427 00000000 		.quad	.LBE3788
+ 42884      00000000 
+ 42885 d42f 02       		.byte	0x2
+ 42886 d430 6603     		.value	0x366
+ 42887 d432 49D40000 		.long	0xd449
+ 42888 d436 32       		.uleb128 0x32
+ 42889 d437 160E0000 		.long	0xe16
+ 42890 d43b 03       		.byte	0x3
+ 42891 d43c 91       		.byte	0x91
+ 42892 d43d D07A     		.sleb128 -688
+ 42893 d43f 32       		.uleb128 0x32
+ 42894 d440 0C0E0000 		.long	0xe0c
+ 42895 d444 03       		.byte	0x3
+ 42896 d445 91       		.byte	0x91
+ 42897 d446 E07A     		.sleb128 -672
+ 42898 d448 00       		.byte	0x0
+ 42899 d449 31       		.uleb128 0x31
+ 42900 d44a A00D0000 		.long	0xda0
+ 42901 d44e 00000000 		.quad	.LBB3790
+ 42901      00000000 
+ 42902 d456 00000000 		.quad	.LBE3790
+ 42902      00000000 
+ 42903 d45e 02       		.byte	0x2
+ 42904 d45f 6803     		.value	0x368
+ 42905 d461 A3D40000 		.long	0xd4a3
+ 42906 d465 32       		.uleb128 0x32
+ 42907 d466 BE0D0000 		.long	0xdbe
+ 42908 d46a 03       		.byte	0x3
+ 42909 d46b 91       		.byte	0x91
+ 42910 d46c F07A     		.sleb128 -656
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1072
+
+
+ 42911 d46e 32       		.uleb128 0x32
+ 42912 d46f B20D0000 		.long	0xdb2
+ 42913 d473 03       		.byte	0x3
+ 42914 d474 91       		.byte	0x91
+ 42915 d475 807B     		.sleb128 -640
+ 42916 d477 35       		.uleb128 0x35
+ 42917 d478 CB0D0000 		.long	0xdcb
+ 42918 d47c 00000000 		.quad	.LBB3792
+ 42918      00000000 
+ 42919 d484 00000000 		.quad	.LBE3792
+ 42919      00000000 
+ 42920 d48c 02       		.byte	0x2
+ 42921 d48d 7501     		.value	0x175
+ 42922 d48f 32       		.uleb128 0x32
+ 42923 d490 E90D0000 		.long	0xde9
+ 42924 d494 03       		.byte	0x3
+ 42925 d495 91       		.byte	0x91
+ 42926 d496 907B     		.sleb128 -624
+ 42927 d498 32       		.uleb128 0x32
+ 42928 d499 DD0D0000 		.long	0xddd
+ 42929 d49d 03       		.byte	0x3
+ 42930 d49e 91       		.byte	0x91
+ 42931 d49f A07B     		.sleb128 -608
+ 42932 d4a1 00       		.byte	0x0
+ 42933 d4a2 00       		.byte	0x0
+ 42934 d4a3 31       		.uleb128 0x31
+ 42935 d4a4 FB0D0000 		.long	0xdfb
+ 42936 d4a8 00000000 		.quad	.LBB3794
+ 42936      00000000 
+ 42937 d4b0 00000000 		.quad	.LBE3794
+ 42937      00000000 
+ 42938 d4b8 02       		.byte	0x2
+ 42939 d4b9 6A03     		.value	0x36a
+ 42940 d4bb D2D40000 		.long	0xd4d2
+ 42941 d4bf 32       		.uleb128 0x32
+ 42942 d4c0 160E0000 		.long	0xe16
+ 42943 d4c4 03       		.byte	0x3
+ 42944 d4c5 91       		.byte	0x91
+ 42945 d4c6 B07B     		.sleb128 -592
+ 42946 d4c8 32       		.uleb128 0x32
+ 42947 d4c9 0C0E0000 		.long	0xe0c
+ 42948 d4cd 03       		.byte	0x3
+ 42949 d4ce 91       		.byte	0x91
+ 42950 d4cf C07B     		.sleb128 -576
+ 42951 d4d1 00       		.byte	0x0
+ 42952 d4d2 31       		.uleb128 0x31
+ 42953 d4d3 210E0000 		.long	0xe21
+ 42954 d4d7 00000000 		.quad	.LBB3796
+ 42954      00000000 
+ 42955 d4df 00000000 		.quad	.LBE3796
+ 42955      00000000 
+ 42956 d4e7 02       		.byte	0x2
+ 42957 d4e8 6C03     		.value	0x36c
+ 42958 d4ea 01D50000 		.long	0xd501
+ 42959 d4ee 32       		.uleb128 0x32
+ 42960 d4ef 3E0E0000 		.long	0xe3e
+ 42961 d4f3 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1073
+
+
+ 42962 d4f4 91       		.byte	0x91
+ 42963 d4f5 D07B     		.sleb128 -560
+ 42964 d4f7 32       		.uleb128 0x32
+ 42965 d4f8 330E0000 		.long	0xe33
+ 42966 d4fc 03       		.byte	0x3
+ 42967 d4fd 91       		.byte	0x91
+ 42968 d4fe E07B     		.sleb128 -544
+ 42969 d500 00       		.byte	0x0
+ 42970 d501 35       		.uleb128 0x35
+ 42971 d502 4F0D0000 		.long	0xd4f
+ 42972 d506 00000000 		.quad	.LBB3798
+ 42972      00000000 
+ 42973 d50e 00000000 		.quad	.LBE3798
+ 42973      00000000 
+ 42974 d516 02       		.byte	0x2
+ 42975 d517 6E03     		.value	0x36e
+ 42976 d519 32       		.uleb128 0x32
+ 42977 d51a 6A0D0000 		.long	0xd6a
+ 42978 d51e 03       		.byte	0x3
+ 42979 d51f 91       		.byte	0x91
+ 42980 d520 F07B     		.sleb128 -528
+ 42981 d522 32       		.uleb128 0x32
+ 42982 d523 600D0000 		.long	0xd60
+ 42983 d527 03       		.byte	0x3
+ 42984 d528 91       		.byte	0x91
+ 42985 d529 807C     		.sleb128 -512
+ 42986 d52b 00       		.byte	0x0
+ 42987 d52c 00       		.byte	0x0
+ 42988 d52d 00       		.byte	0x0
+ 42989 d52e 00       		.byte	0x0
+ 42990 d52f 36       		.uleb128 0x36
+ 42991 d530 00000000 		.quad	.LBB3800
+ 42991      00000000 
+ 42992 d538 00000000 		.quad	.LBE3800
+ 42992      00000000 
+ 42993 d540 4FD50000 		.long	0xd54f
+ 42994 d544 34       		.uleb128 0x34
+ 42995 d545 1C0C0000 		.long	0xc1c
+ 42996 d549 04       		.byte	0x4
+ 42997 d54a 91       		.byte	0x91
+ 42998 d54b 80B87F   		.sleb128 -9216
+ 42999 d54e 00       		.byte	0x0
+ 43000 d54f 31       		.uleb128 0x31
+ 43001 d550 4A0E0000 		.long	0xe4a
+ 43002 d554 00000000 		.quad	.LBB3801
+ 43002      00000000 
+ 43003 d55c 00000000 		.quad	.LBE3801
+ 43003      00000000 
+ 43004 d564 02       		.byte	0x2
+ 43005 d565 9406     		.value	0x694
+ 43006 d567 ECD50000 		.long	0xd5ec
+ 43007 d56b 32       		.uleb128 0x32
+ 43008 d56c 5C0E0000 		.long	0xe5c
+ 43009 d570 03       		.byte	0x3
+ 43010 d571 91       		.byte	0x91
+ 43011 d572 907C     		.sleb128 -496
+ 43012 d574 33       		.uleb128 0x33
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1074
+
+
+ 43013 d575 00000000 		.quad	.LBB3802
+ 43013      00000000 
+ 43014 d57d 00000000 		.quad	.LBE3802
+ 43014      00000000 
+ 43015 d585 34       		.uleb128 0x34
+ 43016 d586 680E0000 		.long	0xe68
+ 43017 d58a 09       		.byte	0x9
+ 43018 d58b 03       		.byte	0x3
+ 43019 d58c 00000000 		.quad	ShiftRowTable.7385
+ 43019      00000000 
+ 43020 d594 35       		.uleb128 0x35
+ 43021 d595 A00D0000 		.long	0xda0
+ 43022 d599 00000000 		.quad	.LBB3803
+ 43022      00000000 
+ 43023 d5a1 00000000 		.quad	.LBE3803
+ 43023      00000000 
+ 43024 d5a9 02       		.byte	0x2
+ 43025 d5aa 9B02     		.value	0x29b
+ 43026 d5ac 32       		.uleb128 0x32
+ 43027 d5ad BE0D0000 		.long	0xdbe
+ 43028 d5b1 03       		.byte	0x3
+ 43029 d5b2 91       		.byte	0x91
+ 43030 d5b3 A07C     		.sleb128 -480
+ 43031 d5b5 32       		.uleb128 0x32
+ 43032 d5b6 B20D0000 		.long	0xdb2
+ 43033 d5ba 03       		.byte	0x3
+ 43034 d5bb 91       		.byte	0x91
+ 43035 d5bc B07C     		.sleb128 -464
+ 43036 d5be 35       		.uleb128 0x35
+ 43037 d5bf CB0D0000 		.long	0xdcb
+ 43038 d5c3 00000000 		.quad	.LBB3805
+ 43038      00000000 
+ 43039 d5cb 00000000 		.quad	.LBE3805
+ 43039      00000000 
+ 43040 d5d3 02       		.byte	0x2
+ 43041 d5d4 7501     		.value	0x175
+ 43042 d5d6 32       		.uleb128 0x32
+ 43043 d5d7 E90D0000 		.long	0xde9
+ 43044 d5db 03       		.byte	0x3
+ 43045 d5dc 91       		.byte	0x91
+ 43046 d5dd C07C     		.sleb128 -448
+ 43047 d5df 32       		.uleb128 0x32
+ 43048 d5e0 DD0D0000 		.long	0xddd
+ 43049 d5e4 03       		.byte	0x3
+ 43050 d5e5 91       		.byte	0x91
+ 43051 d5e6 D07C     		.sleb128 -432
+ 43052 d5e8 00       		.byte	0x0
+ 43053 d5e9 00       		.byte	0x0
+ 43054 d5ea 00       		.byte	0x0
+ 43055 d5eb 00       		.byte	0x0
+ 43056 d5ec 36       		.uleb128 0x36
+ 43057 d5ed 00000000 		.quad	.LBB3807
+ 43057      00000000 
+ 43058 d5f5 00000000 		.quad	.LBE3807
+ 43058      00000000 
+ 43059 d5fd 0CD60000 		.long	0xd60c
+ 43060 d601 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1075
+
+
+ 43061 d602 2C0C0000 		.long	0xc2c
+ 43062 d606 04       		.byte	0x4
+ 43063 d607 91       		.byte	0x91
+ 43064 d608 F0B77F   		.sleb128 -9232
+ 43065 d60b 00       		.byte	0x0
+ 43066 d60c 31       		.uleb128 0x31
+ 43067 d60d 860E0000 		.long	0xe86
+ 43068 d611 00000000 		.quad	.LBB3808
+ 43068      00000000 
+ 43069 d619 00000000 		.quad	.LBE3808
+ 43069      00000000 
+ 43070 d621 02       		.byte	0x2
+ 43071 d622 9606     		.value	0x696
+ 43072 d624 3BD60000 		.long	0xd63b
+ 43073 d628 32       		.uleb128 0x32
+ 43074 d629 A10E0000 		.long	0xea1
+ 43075 d62d 03       		.byte	0x3
+ 43076 d62e 91       		.byte	0x91
+ 43077 d62f E07C     		.sleb128 -416
+ 43078 d631 32       		.uleb128 0x32
+ 43079 d632 970E0000 		.long	0xe97
+ 43080 d636 03       		.byte	0x3
+ 43081 d637 91       		.byte	0x91
+ 43082 d638 F07C     		.sleb128 -400
+ 43083 d63a 00       		.byte	0x0
+ 43084 d63b 36       		.uleb128 0x36
+ 43085 d63c 00000000 		.quad	.LBB3810
+ 43085      00000000 
+ 43086 d644 00000000 		.quad	.LBE3810
+ 43086      00000000 
+ 43087 d64c 5BD60000 		.long	0xd65b
+ 43088 d650 34       		.uleb128 0x34
+ 43089 d651 3C0C0000 		.long	0xc3c
+ 43090 d655 04       		.byte	0x4
+ 43091 d656 91       		.byte	0x91
+ 43092 d657 E0B77F   		.sleb128 -9248
+ 43093 d65a 00       		.byte	0x0
+ 43094 d65b 31       		.uleb128 0x31
+ 43095 d65c AC0E0000 		.long	0xeac
+ 43096 d660 00000000 		.quad	.LBB3811
+ 43096      00000000 
+ 43097 d668 00000000 		.quad	.LBE3811
+ 43097      00000000 
+ 43098 d670 02       		.byte	0x2
+ 43099 d671 9806     		.value	0x698
+ 43100 d673 ACD60000 		.long	0xd6ac
+ 43101 d677 32       		.uleb128 0x32
+ 43102 d678 BE0E0000 		.long	0xebe
+ 43103 d67c 03       		.byte	0x3
+ 43104 d67d 91       		.byte	0x91
+ 43105 d67e 807D     		.sleb128 -384
+ 43106 d680 35       		.uleb128 0x35
+ 43107 d681 CB0E0000 		.long	0xecb
+ 43108 d685 00000000 		.quad	.LBB3813
+ 43108      00000000 
+ 43109 d68d 00000000 		.quad	.LBE3813
+ 43109      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1076
+
+
+ 43110 d695 02       		.byte	0x2
+ 43111 d696 4905     		.value	0x549
+ 43112 d698 32       		.uleb128 0x32
+ 43113 d699 E90E0000 		.long	0xee9
+ 43114 d69d 03       		.byte	0x3
+ 43115 d69e 91       		.byte	0x91
+ 43116 d69f 9C7D     		.sleb128 -356
+ 43117 d6a1 32       		.uleb128 0x32
+ 43118 d6a2 DD0E0000 		.long	0xedd
+ 43119 d6a6 03       		.byte	0x3
+ 43120 d6a7 91       		.byte	0x91
+ 43121 d6a8 A07D     		.sleb128 -352
+ 43122 d6aa 00       		.byte	0x0
+ 43123 d6ab 00       		.byte	0x0
+ 43124 d6ac 33       		.uleb128 0x33
+ 43125 d6ad 00000000 		.quad	.LBB3815
+ 43125      00000000 
+ 43126 d6b5 00000000 		.quad	.LBE3815
+ 43126      00000000 
+ 43127 d6bd 34       		.uleb128 0x34
+ 43128 d6be 480C0000 		.long	0xc48
+ 43129 d6c2 04       		.byte	0x4
+ 43130 d6c3 91       		.byte	0x91
+ 43131 d6c4 D0B77F   		.sleb128 -9264
+ 43132 d6c7 00       		.byte	0x0
+ 43133 d6c8 00       		.byte	0x0
+ 43134 d6c9 00       		.byte	0x0
+ 43135 d6ca 31       		.uleb128 0x31
+ 43136 d6cb F60E0000 		.long	0xef6
+ 43137 d6cf 00000000 		.quad	.LBB3816
+ 43137      00000000 
+ 43138 d6d7 00000000 		.quad	.LBE3816
+ 43138      00000000 
+ 43139 d6df 02       		.byte	0x2
+ 43140 d6e0 9207     		.value	0x792
+ 43141 d6e2 DFD80000 		.long	0xd8df
+ 43142 d6e6 32       		.uleb128 0x32
+ 43143 d6e7 080F0000 		.long	0xf08
+ 43144 d6eb 03       		.byte	0x3
+ 43145 d6ec 91       		.byte	0x91
+ 43146 d6ed B07D     		.sleb128 -336
+ 43147 d6ef 33       		.uleb128 0x33
+ 43148 d6f0 00000000 		.quad	.LBB3817
+ 43148      00000000 
+ 43149 d6f8 00000000 		.quad	.LBE3817
+ 43149      00000000 
+ 43150 d700 34       		.uleb128 0x34
+ 43151 d701 140F0000 		.long	0xf14
+ 43152 d705 04       		.byte	0x4
+ 43153 d706 76       		.byte	0x76
+ 43154 d707 80B37F   		.sleb128 -9856
+ 43155 d70a 31       		.uleb128 0x31
+ 43156 d70b 210F0000 		.long	0xf21
+ 43157 d70f 00000000 		.quad	.LBB3818
+ 43157      00000000 
+ 43158 d717 00000000 		.quad	.LBE3818
+ 43158      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1077
+
+
+ 43159 d71f 02       		.byte	0x2
+ 43160 d720 1F06     		.value	0x61f
+ 43161 d722 A7D70000 		.long	0xd7a7
+ 43162 d726 32       		.uleb128 0x32
+ 43163 d727 330F0000 		.long	0xf33
+ 43164 d72b 03       		.byte	0x3
+ 43165 d72c 91       		.byte	0x91
+ 43166 d72d C07D     		.sleb128 -320
+ 43167 d72f 33       		.uleb128 0x33
+ 43168 d730 00000000 		.quad	.LBB3819
+ 43168      00000000 
+ 43169 d738 00000000 		.quad	.LBE3819
+ 43169      00000000 
+ 43170 d740 34       		.uleb128 0x34
+ 43171 d741 3F0F0000 		.long	0xf3f
+ 43172 d745 09       		.byte	0x9
+ 43173 d746 03       		.byte	0x3
+ 43174 d747 00000000 		.quad	mask.7943
+ 43174      00000000 
+ 43175 d74f 35       		.uleb128 0x35
+ 43176 d750 A00D0000 		.long	0xda0
+ 43177 d754 00000000 		.quad	.LBB3820
+ 43177      00000000 
+ 43178 d75c 00000000 		.quad	.LBE3820
+ 43178      00000000 
+ 43179 d764 02       		.byte	0x2
+ 43180 d765 FE04     		.value	0x4fe
+ 43181 d767 32       		.uleb128 0x32
+ 43182 d768 BE0D0000 		.long	0xdbe
+ 43183 d76c 03       		.byte	0x3
+ 43184 d76d 91       		.byte	0x91
+ 43185 d76e D07D     		.sleb128 -304
+ 43186 d770 32       		.uleb128 0x32
+ 43187 d771 B20D0000 		.long	0xdb2
+ 43188 d775 03       		.byte	0x3
+ 43189 d776 91       		.byte	0x91
+ 43190 d777 E07D     		.sleb128 -288
+ 43191 d779 35       		.uleb128 0x35
+ 43192 d77a CB0D0000 		.long	0xdcb
+ 43193 d77e 00000000 		.quad	.LBB3822
+ 43193      00000000 
+ 43194 d786 00000000 		.quad	.LBE3822
+ 43194      00000000 
+ 43195 d78e 02       		.byte	0x2
+ 43196 d78f 7501     		.value	0x175
+ 43197 d791 32       		.uleb128 0x32
+ 43198 d792 E90D0000 		.long	0xde9
+ 43199 d796 03       		.byte	0x3
+ 43200 d797 91       		.byte	0x91
+ 43201 d798 F07D     		.sleb128 -272
+ 43202 d79a 32       		.uleb128 0x32
+ 43203 d79b DD0D0000 		.long	0xddd
+ 43204 d79f 03       		.byte	0x3
+ 43205 d7a0 91       		.byte	0x91
+ 43206 d7a1 807E     		.sleb128 -256
+ 43207 d7a3 00       		.byte	0x0
+ 43208 d7a4 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1078
+
+
+ 43209 d7a5 00       		.byte	0x0
+ 43210 d7a6 00       		.byte	0x0
+ 43211 d7a7 31       		.uleb128 0x31
+ 43212 d7a8 210F0000 		.long	0xf21
+ 43213 d7ac 00000000 		.quad	.LBB3824
+ 43213      00000000 
+ 43214 d7b4 00000000 		.quad	.LBE3824
+ 43214      00000000 
+ 43215 d7bc 02       		.byte	0x2
+ 43216 d7bd 2006     		.value	0x620
+ 43217 d7bf 44D80000 		.long	0xd844
+ 43218 d7c3 32       		.uleb128 0x32
+ 43219 d7c4 330F0000 		.long	0xf33
+ 43220 d7c8 03       		.byte	0x3
+ 43221 d7c9 91       		.byte	0x91
+ 43222 d7ca 907E     		.sleb128 -240
+ 43223 d7cc 33       		.uleb128 0x33
+ 43224 d7cd 00000000 		.quad	.LBB3825
+ 43224      00000000 
+ 43225 d7d5 00000000 		.quad	.LBE3825
+ 43225      00000000 
+ 43226 d7dd 34       		.uleb128 0x34
+ 43227 d7de 3F0F0000 		.long	0xf3f
+ 43228 d7e2 09       		.byte	0x9
+ 43229 d7e3 03       		.byte	0x3
+ 43230 d7e4 00000000 		.quad	mask.7943
+ 43230      00000000 
+ 43231 d7ec 35       		.uleb128 0x35
+ 43232 d7ed A00D0000 		.long	0xda0
+ 43233 d7f1 00000000 		.quad	.LBB3826
+ 43233      00000000 
+ 43234 d7f9 00000000 		.quad	.LBE3826
+ 43234      00000000 
+ 43235 d801 02       		.byte	0x2
+ 43236 d802 FE04     		.value	0x4fe
+ 43237 d804 32       		.uleb128 0x32
+ 43238 d805 BE0D0000 		.long	0xdbe
+ 43239 d809 03       		.byte	0x3
+ 43240 d80a 91       		.byte	0x91
+ 43241 d80b A07E     		.sleb128 -224
+ 43242 d80d 32       		.uleb128 0x32
+ 43243 d80e B20D0000 		.long	0xdb2
+ 43244 d812 03       		.byte	0x3
+ 43245 d813 91       		.byte	0x91
+ 43246 d814 B07E     		.sleb128 -208
+ 43247 d816 35       		.uleb128 0x35
+ 43248 d817 CB0D0000 		.long	0xdcb
+ 43249 d81b 00000000 		.quad	.LBB3828
+ 43249      00000000 
+ 43250 d823 00000000 		.quad	.LBE3828
+ 43250      00000000 
+ 43251 d82b 02       		.byte	0x2
+ 43252 d82c 7501     		.value	0x175
+ 43253 d82e 32       		.uleb128 0x32
+ 43254 d82f E90D0000 		.long	0xde9
+ 43255 d833 03       		.byte	0x3
+ 43256 d834 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1079
+
+
+ 43257 d835 C07E     		.sleb128 -192
+ 43258 d837 32       		.uleb128 0x32
+ 43259 d838 DD0D0000 		.long	0xddd
+ 43260 d83c 03       		.byte	0x3
+ 43261 d83d 91       		.byte	0x91
+ 43262 d83e D07E     		.sleb128 -176
+ 43263 d840 00       		.byte	0x0
+ 43264 d841 00       		.byte	0x0
+ 43265 d842 00       		.byte	0x0
+ 43266 d843 00       		.byte	0x0
+ 43267 d844 35       		.uleb128 0x35
+ 43268 d845 210F0000 		.long	0xf21
+ 43269 d849 00000000 		.quad	.LBB3830
+ 43269      00000000 
+ 43270 d851 00000000 		.quad	.LBE3830
+ 43270      00000000 
+ 43271 d859 02       		.byte	0x2
+ 43272 d85a 2106     		.value	0x621
+ 43273 d85c 32       		.uleb128 0x32
+ 43274 d85d 330F0000 		.long	0xf33
+ 43275 d861 03       		.byte	0x3
+ 43276 d862 91       		.byte	0x91
+ 43277 d863 E07E     		.sleb128 -160
+ 43278 d865 33       		.uleb128 0x33
+ 43279 d866 00000000 		.quad	.LBB3831
+ 43279      00000000 
+ 43280 d86e 00000000 		.quad	.LBE3831
+ 43280      00000000 
+ 43281 d876 34       		.uleb128 0x34
+ 43282 d877 3F0F0000 		.long	0xf3f
+ 43283 d87b 09       		.byte	0x9
+ 43284 d87c 03       		.byte	0x3
+ 43285 d87d 00000000 		.quad	mask.7943
+ 43285      00000000 
+ 43286 d885 35       		.uleb128 0x35
+ 43287 d886 A00D0000 		.long	0xda0
+ 43288 d88a 00000000 		.quad	.LBB3832
+ 43288      00000000 
+ 43289 d892 00000000 		.quad	.LBE3832
+ 43289      00000000 
+ 43290 d89a 02       		.byte	0x2
+ 43291 d89b FE04     		.value	0x4fe
+ 43292 d89d 32       		.uleb128 0x32
+ 43293 d89e BE0D0000 		.long	0xdbe
+ 43294 d8a2 03       		.byte	0x3
+ 43295 d8a3 91       		.byte	0x91
+ 43296 d8a4 F07E     		.sleb128 -144
+ 43297 d8a6 32       		.uleb128 0x32
+ 43298 d8a7 B20D0000 		.long	0xdb2
+ 43299 d8ab 03       		.byte	0x3
+ 43300 d8ac 91       		.byte	0x91
+ 43301 d8ad 807F     		.sleb128 -128
+ 43302 d8af 35       		.uleb128 0x35
+ 43303 d8b0 CB0D0000 		.long	0xdcb
+ 43304 d8b4 00000000 		.quad	.LBB3834
+ 43304      00000000 
+ 43305 d8bc 00000000 		.quad	.LBE3834
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1080
+
+
+ 43305      00000000 
+ 43306 d8c4 02       		.byte	0x2
+ 43307 d8c5 7501     		.value	0x175
+ 43308 d8c7 32       		.uleb128 0x32
+ 43309 d8c8 E90D0000 		.long	0xde9
+ 43310 d8cc 03       		.byte	0x3
+ 43311 d8cd 91       		.byte	0x91
+ 43312 d8ce 907F     		.sleb128 -112
+ 43313 d8d0 32       		.uleb128 0x32
+ 43314 d8d1 DD0D0000 		.long	0xddd
+ 43315 d8d5 03       		.byte	0x3
+ 43316 d8d6 91       		.byte	0x91
+ 43317 d8d7 A07F     		.sleb128 -96
+ 43318 d8d9 00       		.byte	0x0
+ 43319 d8da 00       		.byte	0x0
+ 43320 d8db 00       		.byte	0x0
+ 43321 d8dc 00       		.byte	0x0
+ 43322 d8dd 00       		.byte	0x0
+ 43323 d8de 00       		.byte	0x0
+ 43324 d8df 35       		.uleb128 0x35
+ 43325 d8e0 860E0000 		.long	0xe86
+ 43326 d8e4 00000000 		.quad	.LBB3836
+ 43326      00000000 
+ 43327 d8ec 00000000 		.quad	.LBE3836
+ 43327      00000000 
+ 43328 d8f4 02       		.byte	0x2
+ 43329 d8f5 9207     		.value	0x792
+ 43330 d8f7 32       		.uleb128 0x32
+ 43331 d8f8 A10E0000 		.long	0xea1
+ 43332 d8fc 03       		.byte	0x3
+ 43333 d8fd 91       		.byte	0x91
+ 43334 d8fe B07F     		.sleb128 -80
+ 43335 d900 32       		.uleb128 0x32
+ 43336 d901 970E0000 		.long	0xe97
+ 43337 d905 02       		.byte	0x2
+ 43338 d906 91       		.byte	0x91
+ 43339 d907 40       		.sleb128 -64
+ 43340 d908 00       		.byte	0x0
+ 43341 d909 00       		.byte	0x0
+ 43342 d90a 25       		.uleb128 0x25
+ 43343 d90b 00000000 		.long	.LASF363
+ 43344 d90f 02       		.byte	0x2
+ 43345 d910 4B04     		.value	0x44b
+ 43346 d912 01       		.byte	0x1
+ 43347 d913 B3010000 		.long	0x1b3
+ 43348 d917 03       		.byte	0x3
+ 43349 d918 6BD90000 		.long	0xd96b
+ 43350 d91c 26       		.uleb128 0x26
+ 43351 d91d 00000000 		.long	.LASF67
+ 43352 d921 02       		.byte	0x2
+ 43353 d922 4B04     		.value	0x44b
+ 43354 d924 B3010000 		.long	0x1b3
+ 43355 d928 28       		.uleb128 0x28
+ 43356 d929 723100   		.string	"r1"
+ 43357 d92c 02       		.byte	0x2
+ 43358 d92d 5004     		.value	0x450
+ 43359 d92f B3010000 		.long	0x1b3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1081
+
+
+ 43360 d933 28       		.uleb128 0x28
+ 43361 d934 723200   		.string	"r2"
+ 43362 d937 02       		.byte	0x2
+ 43363 d938 5004     		.value	0x450
+ 43364 d93a B3010000 		.long	0x1b3
+ 43365 d93e 28       		.uleb128 0x28
+ 43366 d93f 723300   		.string	"r3"
+ 43367 d942 02       		.byte	0x2
+ 43368 d943 5004     		.value	0x450
+ 43369 d945 B3010000 		.long	0x1b3
+ 43370 d949 28       		.uleb128 0x28
+ 43371 d94a 663200   		.string	"f2"
+ 43372 d94d 02       		.byte	0x2
+ 43373 d94e 5004     		.value	0x450
+ 43374 d950 B3010000 		.long	0x1b3
+ 43375 d954 28       		.uleb128 0x28
+ 43376 d955 663400   		.string	"f4"
+ 43377 d958 02       		.byte	0x2
+ 43378 d959 5004     		.value	0x450
+ 43379 d95b B3010000 		.long	0x1b3
+ 43380 d95f 28       		.uleb128 0x28
+ 43381 d960 663800   		.string	"f8"
+ 43382 d963 02       		.byte	0x2
+ 43383 d964 5004     		.value	0x450
+ 43384 d966 B3010000 		.long	0x1b3
+ 43385 d96a 00       		.byte	0x0
+ 43386 d96b 25       		.uleb128 0x25
+ 43387 d96c 00000000 		.long	.LASF364
+ 43388 d970 02       		.byte	0x2
+ 43389 d971 9F03     		.value	0x39f
+ 43390 d973 01       		.byte	0x1
+ 43391 d974 B3010000 		.long	0x1b3
+ 43392 d978 03       		.byte	0x3
+ 43393 d979 E6D90000 		.long	0xd9e6
+ 43394 d97d 26       		.uleb128 0x26
+ 43395 d97e 00000000 		.long	.LASF67
+ 43396 d982 02       		.byte	0x2
+ 43397 d983 9F03     		.value	0x39f
+ 43398 d985 B3010000 		.long	0x1b3
+ 43399 d989 26       		.uleb128 0x26
+ 43400 d98a 00000000 		.long	.LASF365
+ 43401 d98e 02       		.byte	0x2
+ 43402 d98f 9F03     		.value	0x39f
+ 43403 d991 B4000000 		.long	0xb4
+ 43404 d995 28       		.uleb128 0x28
+ 43405 d996 736C00   		.string	"sl"
+ 43406 d999 02       		.byte	0x2
+ 43407 d99a A103     		.value	0x3a1
+ 43408 d99c B3010000 		.long	0x1b3
+ 43409 d9a0 28       		.uleb128 0x28
+ 43410 d9a1 737200   		.string	"sr"
+ 43411 d9a4 02       		.byte	0x2
+ 43412 d9a5 A103     		.value	0x3a1
+ 43413 d9a7 B3010000 		.long	0x1b3
+ 43414 d9ab 38       		.uleb128 0x38
+ 43415 d9ac 00000000 		.long	.LASF366
+ 43416 d9b0 F6D90000 		.long	0xd9f6
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1082
+
+
+ 43417 d9b4 01       		.byte	0x1
+ 43418 d9b5 00000000 		.long	.LASF364
+ 43419 d9b9 29       		.uleb128 0x29
+ 43420 d9ba C9D90000 		.long	0xd9c9
+ 43421 d9be 28       		.uleb128 0x28
+ 43422 d9bf 7600     		.string	"v"
+ 43423 d9c1 02       		.byte	0x2
+ 43424 d9c2 A503     		.value	0x3a5
+ 43425 d9c4 29050000 		.long	0x529
+ 43426 d9c8 00       		.byte	0x0
+ 43427 d9c9 29       		.uleb128 0x29
+ 43428 d9ca D9D90000 		.long	0xd9d9
+ 43429 d9ce 28       		.uleb128 0x28
+ 43430 d9cf 7600     		.string	"v"
+ 43431 d9d1 02       		.byte	0x2
+ 43432 d9d2 A703     		.value	0x3a7
+ 43433 d9d4 29050000 		.long	0x529
+ 43434 d9d8 00       		.byte	0x0
+ 43435 d9d9 2A       		.uleb128 0x2a
+ 43436 d9da 28       		.uleb128 0x28
+ 43437 d9db 7600     		.string	"v"
+ 43438 d9dd 02       		.byte	0x2
+ 43439 d9de A903     		.value	0x3a9
+ 43440 d9e0 29050000 		.long	0x529
+ 43441 d9e4 00       		.byte	0x0
+ 43442 d9e5 00       		.byte	0x0
+ 43443 d9e6 19       		.uleb128 0x19
+ 43444 d9e7 9F000000 		.long	0x9f
+ 43445 d9eb F6D90000 		.long	0xd9f6
+ 43446 d9ef 1A       		.uleb128 0x1a
+ 43447 d9f0 9C000000 		.long	0x9c
+ 43448 d9f4 1B       		.byte	0x1b
+ 43449 d9f5 00       		.byte	0x0
+ 43450 d9f6 06       		.uleb128 0x6
+ 43451 d9f7 E6D90000 		.long	0xd9e6
+ 43452 d9fb 25       		.uleb128 0x25
+ 43453 d9fc 00000000 		.long	.LASF367
+ 43454 da00 02       		.byte	0x2
+ 43455 da01 CF01     		.value	0x1cf
+ 43456 da03 01       		.byte	0x1
+ 43457 da04 B3010000 		.long	0x1b3
+ 43458 da08 03       		.byte	0x3
+ 43459 da09 BFDA0000 		.long	0xdabf
+ 43460 da0d 2B       		.uleb128 0x2b
+ 43461 da0e 7600     		.string	"v"
+ 43462 da10 02       		.byte	0x2
+ 43463 da11 CF01     		.value	0x1cf
+ 43464 da13 B3010000 		.long	0x1b3
+ 43465 da17 2B       		.uleb128 0x2b
+ 43466 da18 6B00     		.string	"k"
+ 43467 da1a 02       		.byte	0x2
+ 43468 da1b CF01     		.value	0x1cf
+ 43469 da1d B4000000 		.long	0xb4
+ 43470 da21 2C       		.uleb128 0x2c
+ 43471 da22 00000000 		.long	.LASF368
+ 43472 da26 02       		.byte	0x2
+ 43473 da27 D201     		.value	0x1d2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1083
+
+
+ 43474 da29 CFDA0000 		.long	0xdacf
+ 43475 da2d 90       		.byte	0x90
+ 43476 da2e FF       		.byte	0xff
+ 43477 da2f FF       		.byte	0xff
+ 43478 da30 FF       		.byte	0xff
+ 43479 da31 FF       		.byte	0xff
+ 43480 da32 FF       		.byte	0xff
+ 43481 da33 FF       		.byte	0xff
+ 43482 da34 FF       		.byte	0xff
+ 43483 da35 FF       		.byte	0xff
+ 43484 da36 FF       		.byte	0xff
+ 43485 da37 FF       		.byte	0xff
+ 43486 da38 FF       		.byte	0xff
+ 43487 da39 FF       		.byte	0xff
+ 43488 da3a FF       		.byte	0xff
+ 43489 da3b FF       		.byte	0xff
+ 43490 da3c FF       		.byte	0xff
+ 43491 da3d FF       		.byte	0xff
+ 43492 da3e 7F       		.byte	0x7f
+ 43493 da3f 7F       		.byte	0x7f
+ 43494 da40 7F       		.byte	0x7f
+ 43495 da41 7F       		.byte	0x7f
+ 43496 da42 7F       		.byte	0x7f
+ 43497 da43 7F       		.byte	0x7f
+ 43498 da44 7F       		.byte	0x7f
+ 43499 da45 7F       		.byte	0x7f
+ 43500 da46 7F       		.byte	0x7f
+ 43501 da47 7F       		.byte	0x7f
+ 43502 da48 7F       		.byte	0x7f
+ 43503 da49 7F       		.byte	0x7f
+ 43504 da4a 7F       		.byte	0x7f
+ 43505 da4b 7F       		.byte	0x7f
+ 43506 da4c 7F       		.byte	0x7f
+ 43507 da4d 7F       		.byte	0x7f
+ 43508 da4e 3F       		.byte	0x3f
+ 43509 da4f 3F       		.byte	0x3f
+ 43510 da50 3F       		.byte	0x3f
+ 43511 da51 3F       		.byte	0x3f
+ 43512 da52 3F       		.byte	0x3f
+ 43513 da53 3F       		.byte	0x3f
+ 43514 da54 3F       		.byte	0x3f
+ 43515 da55 3F       		.byte	0x3f
+ 43516 da56 3F       		.byte	0x3f
+ 43517 da57 3F       		.byte	0x3f
+ 43518 da58 3F       		.byte	0x3f
+ 43519 da59 3F       		.byte	0x3f
+ 43520 da5a 3F       		.byte	0x3f
+ 43521 da5b 3F       		.byte	0x3f
+ 43522 da5c 3F       		.byte	0x3f
+ 43523 da5d 3F       		.byte	0x3f
+ 43524 da5e 1F       		.byte	0x1f
+ 43525 da5f 1F       		.byte	0x1f
+ 43526 da60 1F       		.byte	0x1f
+ 43527 da61 1F       		.byte	0x1f
+ 43528 da62 1F       		.byte	0x1f
+ 43529 da63 1F       		.byte	0x1f
+ 43530 da64 1F       		.byte	0x1f
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1084
+
+
+ 43531 da65 1F       		.byte	0x1f
+ 43532 da66 1F       		.byte	0x1f
+ 43533 da67 1F       		.byte	0x1f
+ 43534 da68 1F       		.byte	0x1f
+ 43535 da69 1F       		.byte	0x1f
+ 43536 da6a 1F       		.byte	0x1f
+ 43537 da6b 1F       		.byte	0x1f
+ 43538 da6c 1F       		.byte	0x1f
+ 43539 da6d 1F       		.byte	0x1f
+ 43540 da6e 0F       		.byte	0xf
+ 43541 da6f 0F       		.byte	0xf
+ 43542 da70 0F       		.byte	0xf
+ 43543 da71 0F       		.byte	0xf
+ 43544 da72 0F       		.byte	0xf
+ 43545 da73 0F       		.byte	0xf
+ 43546 da74 0F       		.byte	0xf
+ 43547 da75 0F       		.byte	0xf
+ 43548 da76 0F       		.byte	0xf
+ 43549 da77 0F       		.byte	0xf
+ 43550 da78 0F       		.byte	0xf
+ 43551 da79 0F       		.byte	0xf
+ 43552 da7a 0F       		.byte	0xf
+ 43553 da7b 0F       		.byte	0xf
+ 43554 da7c 0F       		.byte	0xf
+ 43555 da7d 0F       		.byte	0xf
+ 43556 da7e 07       		.byte	0x7
+ 43557 da7f 07       		.byte	0x7
+ 43558 da80 07       		.byte	0x7
+ 43559 da81 07       		.byte	0x7
+ 43560 da82 07       		.byte	0x7
+ 43561 da83 07       		.byte	0x7
+ 43562 da84 07       		.byte	0x7
+ 43563 da85 07       		.byte	0x7
+ 43564 da86 07       		.byte	0x7
+ 43565 da87 07       		.byte	0x7
+ 43566 da88 07       		.byte	0x7
+ 43567 da89 07       		.byte	0x7
+ 43568 da8a 07       		.byte	0x7
+ 43569 da8b 07       		.byte	0x7
+ 43570 da8c 07       		.byte	0x7
+ 43571 da8d 07       		.byte	0x7
+ 43572 da8e 03       		.byte	0x3
+ 43573 da8f 03       		.byte	0x3
+ 43574 da90 03       		.byte	0x3
+ 43575 da91 03       		.byte	0x3
+ 43576 da92 03       		.byte	0x3
+ 43577 da93 03       		.byte	0x3
+ 43578 da94 03       		.byte	0x3
+ 43579 da95 03       		.byte	0x3
+ 43580 da96 03       		.byte	0x3
+ 43581 da97 03       		.byte	0x3
+ 43582 da98 03       		.byte	0x3
+ 43583 da99 03       		.byte	0x3
+ 43584 da9a 03       		.byte	0x3
+ 43585 da9b 03       		.byte	0x3
+ 43586 da9c 03       		.byte	0x3
+ 43587 da9d 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1085
+
+
+ 43588 da9e 01       		.byte	0x1
+ 43589 da9f 01       		.byte	0x1
+ 43590 daa0 01       		.byte	0x1
+ 43591 daa1 01       		.byte	0x1
+ 43592 daa2 01       		.byte	0x1
+ 43593 daa3 01       		.byte	0x1
+ 43594 daa4 01       		.byte	0x1
+ 43595 daa5 01       		.byte	0x1
+ 43596 daa6 01       		.byte	0x1
+ 43597 daa7 01       		.byte	0x1
+ 43598 daa8 01       		.byte	0x1
+ 43599 daa9 01       		.byte	0x1
+ 43600 daaa 01       		.byte	0x1
+ 43601 daab 01       		.byte	0x1
+ 43602 daac 01       		.byte	0x1
+ 43603 daad 01       		.byte	0x1
+ 43604 daae 00       		.byte	0x0
+ 43605 daaf 00       		.byte	0x0
+ 43606 dab0 00       		.byte	0x0
+ 43607 dab1 00       		.byte	0x0
+ 43608 dab2 00       		.byte	0x0
+ 43609 dab3 00       		.byte	0x0
+ 43610 dab4 00       		.byte	0x0
+ 43611 dab5 00       		.byte	0x0
+ 43612 dab6 00       		.byte	0x0
+ 43613 dab7 00       		.byte	0x0
+ 43614 dab8 00       		.byte	0x0
+ 43615 dab9 00       		.byte	0x0
+ 43616 daba 00       		.byte	0x0
+ 43617 dabb 00       		.byte	0x0
+ 43618 dabc 00       		.byte	0x0
+ 43619 dabd 00       		.byte	0x0
+ 43620 dabe 00       		.byte	0x0
+ 43621 dabf 19       		.uleb128 0x19
+ 43622 dac0 B3010000 		.long	0x1b3
+ 43623 dac4 CFDA0000 		.long	0xdacf
+ 43624 dac8 1A       		.uleb128 0x1a
+ 43625 dac9 9C000000 		.long	0x9c
+ 43626 dacd 08       		.byte	0x8
+ 43627 dace 00       		.byte	0x0
+ 43628 dacf 06       		.uleb128 0x6
+ 43629 dad0 BFDA0000 		.long	0xdabf
+ 43630 dad4 25       		.uleb128 0x25
+ 43631 dad5 00000000 		.long	.LASF369
+ 43632 dad9 02       		.byte	0x2
+ 43633 dada 9201     		.value	0x192
+ 43634 dadc 01       		.byte	0x1
+ 43635 dadd B3010000 		.long	0x1b3
+ 43636 dae1 03       		.byte	0x3
+ 43637 dae2 B1DB0000 		.long	0xdbb1
+ 43638 dae6 2B       		.uleb128 0x2b
+ 43639 dae7 7600     		.string	"v"
+ 43640 dae9 02       		.byte	0x2
+ 43641 daea 9201     		.value	0x192
+ 43642 daec B3010000 		.long	0x1b3
+ 43643 daf0 2B       		.uleb128 0x2b
+ 43644 daf1 6B00     		.string	"k"
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1086
+
+
+ 43645 daf3 02       		.byte	0x2
+ 43646 daf4 9201     		.value	0x192
+ 43647 daf6 B4000000 		.long	0xb4
+ 43648 dafa 2C       		.uleb128 0x2c
+ 43649 dafb 00000000 		.long	.LASF370
+ 43650 daff 02       		.byte	0x2
+ 43651 db00 9501     		.value	0x195
+ 43652 db02 B1DB0000 		.long	0xdbb1
+ 43653 db06 90       		.byte	0x90
+ 43654 db07 FF       		.byte	0xff
+ 43655 db08 FF       		.byte	0xff
+ 43656 db09 FF       		.byte	0xff
+ 43657 db0a FF       		.byte	0xff
+ 43658 db0b FF       		.byte	0xff
+ 43659 db0c FF       		.byte	0xff
+ 43660 db0d FF       		.byte	0xff
+ 43661 db0e FF       		.byte	0xff
+ 43662 db0f FF       		.byte	0xff
+ 43663 db10 FF       		.byte	0xff
+ 43664 db11 FF       		.byte	0xff
+ 43665 db12 FF       		.byte	0xff
+ 43666 db13 FF       		.byte	0xff
+ 43667 db14 FF       		.byte	0xff
+ 43668 db15 FF       		.byte	0xff
+ 43669 db16 FF       		.byte	0xff
+ 43670 db17 FE       		.byte	0xfe
+ 43671 db18 FE       		.byte	0xfe
+ 43672 db19 FE       		.byte	0xfe
+ 43673 db1a FE       		.byte	0xfe
+ 43674 db1b FE       		.byte	0xfe
+ 43675 db1c FE       		.byte	0xfe
+ 43676 db1d FE       		.byte	0xfe
+ 43677 db1e FE       		.byte	0xfe
+ 43678 db1f FE       		.byte	0xfe
+ 43679 db20 FE       		.byte	0xfe
+ 43680 db21 FE       		.byte	0xfe
+ 43681 db22 FE       		.byte	0xfe
+ 43682 db23 FE       		.byte	0xfe
+ 43683 db24 FE       		.byte	0xfe
+ 43684 db25 FE       		.byte	0xfe
+ 43685 db26 FE       		.byte	0xfe
+ 43686 db27 FC       		.byte	0xfc
+ 43687 db28 FC       		.byte	0xfc
+ 43688 db29 FC       		.byte	0xfc
+ 43689 db2a FC       		.byte	0xfc
+ 43690 db2b FC       		.byte	0xfc
+ 43691 db2c FC       		.byte	0xfc
+ 43692 db2d FC       		.byte	0xfc
+ 43693 db2e FC       		.byte	0xfc
+ 43694 db2f FC       		.byte	0xfc
+ 43695 db30 FC       		.byte	0xfc
+ 43696 db31 FC       		.byte	0xfc
+ 43697 db32 FC       		.byte	0xfc
+ 43698 db33 FC       		.byte	0xfc
+ 43699 db34 FC       		.byte	0xfc
+ 43700 db35 FC       		.byte	0xfc
+ 43701 db36 FC       		.byte	0xfc
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1087
+
+
+ 43702 db37 F8       		.byte	0xf8
+ 43703 db38 F8       		.byte	0xf8
+ 43704 db39 F8       		.byte	0xf8
+ 43705 db3a F8       		.byte	0xf8
+ 43706 db3b F8       		.byte	0xf8
+ 43707 db3c F8       		.byte	0xf8
+ 43708 db3d F8       		.byte	0xf8
+ 43709 db3e F8       		.byte	0xf8
+ 43710 db3f F8       		.byte	0xf8
+ 43711 db40 F8       		.byte	0xf8
+ 43712 db41 F8       		.byte	0xf8
+ 43713 db42 F8       		.byte	0xf8
+ 43714 db43 F8       		.byte	0xf8
+ 43715 db44 F8       		.byte	0xf8
+ 43716 db45 F8       		.byte	0xf8
+ 43717 db46 F8       		.byte	0xf8
+ 43718 db47 F0       		.byte	0xf0
+ 43719 db48 F0       		.byte	0xf0
+ 43720 db49 F0       		.byte	0xf0
+ 43721 db4a F0       		.byte	0xf0
+ 43722 db4b F0       		.byte	0xf0
+ 43723 db4c F0       		.byte	0xf0
+ 43724 db4d F0       		.byte	0xf0
+ 43725 db4e F0       		.byte	0xf0
+ 43726 db4f F0       		.byte	0xf0
+ 43727 db50 F0       		.byte	0xf0
+ 43728 db51 F0       		.byte	0xf0
+ 43729 db52 F0       		.byte	0xf0
+ 43730 db53 F0       		.byte	0xf0
+ 43731 db54 F0       		.byte	0xf0
+ 43732 db55 F0       		.byte	0xf0
+ 43733 db56 F0       		.byte	0xf0
+ 43734 db57 E0       		.byte	0xe0
+ 43735 db58 E0       		.byte	0xe0
+ 43736 db59 E0       		.byte	0xe0
+ 43737 db5a E0       		.byte	0xe0
+ 43738 db5b E0       		.byte	0xe0
+ 43739 db5c E0       		.byte	0xe0
+ 43740 db5d E0       		.byte	0xe0
+ 43741 db5e E0       		.byte	0xe0
+ 43742 db5f E0       		.byte	0xe0
+ 43743 db60 E0       		.byte	0xe0
+ 43744 db61 E0       		.byte	0xe0
+ 43745 db62 E0       		.byte	0xe0
+ 43746 db63 E0       		.byte	0xe0
+ 43747 db64 E0       		.byte	0xe0
+ 43748 db65 E0       		.byte	0xe0
+ 43749 db66 E0       		.byte	0xe0
+ 43750 db67 C0       		.byte	0xc0
+ 43751 db68 C0       		.byte	0xc0
+ 43752 db69 C0       		.byte	0xc0
+ 43753 db6a C0       		.byte	0xc0
+ 43754 db6b C0       		.byte	0xc0
+ 43755 db6c C0       		.byte	0xc0
+ 43756 db6d C0       		.byte	0xc0
+ 43757 db6e C0       		.byte	0xc0
+ 43758 db6f C0       		.byte	0xc0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1088
+
+
+ 43759 db70 C0       		.byte	0xc0
+ 43760 db71 C0       		.byte	0xc0
+ 43761 db72 C0       		.byte	0xc0
+ 43762 db73 C0       		.byte	0xc0
+ 43763 db74 C0       		.byte	0xc0
+ 43764 db75 C0       		.byte	0xc0
+ 43765 db76 C0       		.byte	0xc0
+ 43766 db77 80       		.byte	0x80
+ 43767 db78 80       		.byte	0x80
+ 43768 db79 80       		.byte	0x80
+ 43769 db7a 80       		.byte	0x80
+ 43770 db7b 80       		.byte	0x80
+ 43771 db7c 80       		.byte	0x80
+ 43772 db7d 80       		.byte	0x80
+ 43773 db7e 80       		.byte	0x80
+ 43774 db7f 80       		.byte	0x80
+ 43775 db80 80       		.byte	0x80
+ 43776 db81 80       		.byte	0x80
+ 43777 db82 80       		.byte	0x80
+ 43778 db83 80       		.byte	0x80
+ 43779 db84 80       		.byte	0x80
+ 43780 db85 80       		.byte	0x80
+ 43781 db86 80       		.byte	0x80
+ 43782 db87 00       		.byte	0x0
+ 43783 db88 00       		.byte	0x0
+ 43784 db89 00       		.byte	0x0
+ 43785 db8a 00       		.byte	0x0
+ 43786 db8b 00       		.byte	0x0
+ 43787 db8c 00       		.byte	0x0
+ 43788 db8d 00       		.byte	0x0
+ 43789 db8e 00       		.byte	0x0
+ 43790 db8f 00       		.byte	0x0
+ 43791 db90 00       		.byte	0x0
+ 43792 db91 00       		.byte	0x0
+ 43793 db92 00       		.byte	0x0
+ 43794 db93 00       		.byte	0x0
+ 43795 db94 00       		.byte	0x0
+ 43796 db95 00       		.byte	0x0
+ 43797 db96 00       		.byte	0x0
+ 43798 db97 28       		.uleb128 0x28
+ 43799 db98 767600   		.string	"vv"
+ 43800 db9b 02       		.byte	0x2
+ 43801 db9c AA01     		.value	0x1aa
+ 43802 db9e B3010000 		.long	0x1b3
+ 43803 dba2 38       		.uleb128 0x38
+ 43804 dba3 00000000 		.long	.LASF366
+ 43805 dba7 C6DB0000 		.long	0xdbc6
+ 43806 dbab 01       		.byte	0x1
+ 43807 dbac 00000000 		.long	.LASF369
+ 43808 dbb0 00       		.byte	0x0
+ 43809 dbb1 06       		.uleb128 0x6
+ 43810 dbb2 BFDA0000 		.long	0xdabf
+ 43811 dbb6 19       		.uleb128 0x19
+ 43812 dbb7 9F000000 		.long	0x9f
+ 43813 dbbb C6DB0000 		.long	0xdbc6
+ 43814 dbbf 1A       		.uleb128 0x1a
+ 43815 dbc0 9C000000 		.long	0x9c
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1089
+
+
+ 43816 dbc4 1D       		.byte	0x1d
+ 43817 dbc5 00       		.byte	0x0
+ 43818 dbc6 06       		.uleb128 0x6
+ 43819 dbc7 B6DB0000 		.long	0xdbb6
+ 43820 dbcb 25       		.uleb128 0x25
+ 43821 dbcc 00000000 		.long	.LASF371
+ 43822 dbd0 03       		.byte	0x3
+ 43823 dbd1 9E01     		.value	0x19e
+ 43824 dbd3 01       		.byte	0x1
+ 43825 dbd4 E7000000 		.long	0xe7
+ 43826 dbd8 03       		.byte	0x3
+ 43827 dbd9 F6DB0000 		.long	0xdbf6
+ 43828 dbdd 2B       		.uleb128 0x2b
+ 43829 dbde 76696E00 		.string	"vin"
+ 43830 dbe2 03       		.byte	0x3
+ 43831 dbe3 9E01     		.value	0x19e
+ 43832 dbe5 E7000000 		.long	0xe7
+ 43833 dbe9 26       		.uleb128 0x26
+ 43834 dbea 00000000 		.long	.LASF331
+ 43835 dbee 03       		.byte	0x3
+ 43836 dbef 9E01     		.value	0x19e
+ 43837 dbf1 B4000000 		.long	0xb4
+ 43838 dbf5 00       		.byte	0x0
+ 43839 dbf6 2D       		.uleb128 0x2d
+ 43840 dbf7 00000000 		.long	.LASF372
+ 43841 dbfb 02       		.byte	0x2
+ 43842 dbfc 9E07     		.value	0x79e
+ 43843 dbfe 01       		.byte	0x1
+ 43844 dbff 00000000 		.quad	.LFB648
+ 43844      00000000 
+ 43845 dc07 00000000 		.quad	.LFE648
+ 43845      00000000 
+ 43846 dc0f 00000000 		.long	.LLST4
+ 43847 dc13 26E80000 		.long	0xe826
+ 43848 dc17 2F       		.uleb128 0x2f
+ 43849 dc18 7200     		.string	"r"
+ 43850 dc1a 02       		.byte	0x2
+ 43851 dc1b 9E07     		.value	0x79e
+ 43852 dc1d 24560000 		.long	0x5624
+ 43853 dc21 03       		.byte	0x3
+ 43854 dc22 91       		.byte	0x91
+ 43855 dc23 D871     		.sleb128 -1832
+ 43856 dc25 2F       		.uleb128 0x2f
+ 43857 dc26 647200   		.string	"dr"
+ 43858 dc29 02       		.byte	0x2
+ 43859 dc2a 9E07     		.value	0x79e
+ 43860 dc2c 440D0000 		.long	0xd44
+ 43861 dc30 03       		.byte	0x3
+ 43862 dc31 91       		.byte	0x91
+ 43863 dc32 D071     		.sleb128 -1840
+ 43864 dc34 2F       		.uleb128 0x2f
+ 43865 dc35 4E7200   		.string	"Nr"
+ 43866 dc38 02       		.byte	0x2
+ 43867 dc39 9E07     		.value	0x79e
+ 43868 dc3b 78000000 		.long	0x78
+ 43869 dc3f 03       		.byte	0x3
+ 43870 dc40 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1090
+
+
+ 43871 dc41 CC71     		.sleb128 -1844
+ 43872 dc43 37       		.uleb128 0x37
+ 43873 dc44 697800   		.string	"ix"
+ 43874 dc47 02       		.byte	0x2
+ 43875 dc48 A007     		.value	0x7a0
+ 43876 dc4a 78000000 		.long	0x78
+ 43877 dc4e 03       		.byte	0x3
+ 43878 dc4f 91       		.byte	0x91
+ 43879 dc50 F872     		.sleb128 -1672
+ 43880 dc52 37       		.uleb128 0x37
+ 43881 dc53 6A7800   		.string	"jx"
+ 43882 dc56 02       		.byte	0x2
+ 43883 dc57 A007     		.value	0x7a0
+ 43884 dc59 78000000 		.long	0x78
+ 43885 dc5d 03       		.byte	0x3
+ 43886 dc5e 91       		.byte	0x91
+ 43887 dc5f FC72     		.sleb128 -1668
+ 43888 dc61 35       		.uleb128 0x35
+ 43889 dc62 0AD90000 		.long	0xd90a
+ 43890 dc66 00000000 		.quad	.LBB3943
+ 43890      00000000 
+ 43891 dc6e 00000000 		.quad	.LBE3943
+ 43891      00000000 
+ 43892 dc76 02       		.byte	0x2
+ 43893 dc77 A607     		.value	0x7a6
+ 43894 dc79 32       		.uleb128 0x32
+ 43895 dc7a 1CD90000 		.long	0xd91c
+ 43896 dc7e 03       		.byte	0x3
+ 43897 dc7f 91       		.byte	0x91
+ 43898 dc80 8073     		.sleb128 -1664
+ 43899 dc82 33       		.uleb128 0x33
+ 43900 dc83 00000000 		.quad	.LBB3944
+ 43900      00000000 
+ 43901 dc8b 00000000 		.quad	.LBE3944
+ 43901      00000000 
+ 43902 dc93 34       		.uleb128 0x34
+ 43903 dc94 28D90000 		.long	0xd928
+ 43904 dc98 03       		.byte	0x3
+ 43905 dc99 76       		.byte	0x76
+ 43906 dc9a C071     		.sleb128 -1856
+ 43907 dc9c 34       		.uleb128 0x34
+ 43908 dc9d 33D90000 		.long	0xd933
+ 43909 dca1 03       		.byte	0x3
+ 43910 dca2 76       		.byte	0x76
+ 43911 dca3 B071     		.sleb128 -1872
+ 43912 dca5 34       		.uleb128 0x34
+ 43913 dca6 3ED90000 		.long	0xd93e
+ 43914 dcaa 03       		.byte	0x3
+ 43915 dcab 76       		.byte	0x76
+ 43916 dcac A071     		.sleb128 -1888
+ 43917 dcae 34       		.uleb128 0x34
+ 43918 dcaf 49D90000 		.long	0xd949
+ 43919 dcb3 03       		.byte	0x3
+ 43920 dcb4 76       		.byte	0x76
+ 43921 dcb5 9071     		.sleb128 -1904
+ 43922 dcb7 34       		.uleb128 0x34
+ 43923 dcb8 54D90000 		.long	0xd954
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1091
+
+
+ 43924 dcbc 03       		.byte	0x3
+ 43925 dcbd 76       		.byte	0x76
+ 43926 dcbe 8071     		.sleb128 -1920
+ 43927 dcc0 34       		.uleb128 0x34
+ 43928 dcc1 5FD90000 		.long	0xd95f
+ 43929 dcc5 03       		.byte	0x3
+ 43930 dcc6 76       		.byte	0x76
+ 43931 dcc7 F070     		.sleb128 -1936
+ 43932 dcc9 31       		.uleb128 0x31
+ 43933 dcca 4A0E0000 		.long	0xe4a
+ 43934 dcce 00000000 		.quad	.LBB3945
+ 43934      00000000 
+ 43935 dcd6 00000000 		.quad	.LBE3945
+ 43935      00000000 
+ 43936 dcde 02       		.byte	0x2
+ 43937 dcdf 5204     		.value	0x452
+ 43938 dce1 66DD0000 		.long	0xdd66
+ 43939 dce5 32       		.uleb128 0x32
+ 43940 dce6 5C0E0000 		.long	0xe5c
+ 43941 dcea 03       		.byte	0x3
+ 43942 dceb 91       		.byte	0x91
+ 43943 dcec 9073     		.sleb128 -1648
+ 43944 dcee 33       		.uleb128 0x33
+ 43945 dcef 00000000 		.quad	.LBB3946
+ 43945      00000000 
+ 43946 dcf7 00000000 		.quad	.LBE3946
+ 43946      00000000 
+ 43947 dcff 34       		.uleb128 0x34
+ 43948 dd00 680E0000 		.long	0xe68
+ 43949 dd04 09       		.byte	0x9
+ 43950 dd05 03       		.byte	0x3
+ 43951 dd06 00000000 		.quad	ShiftRowTable.7385
+ 43951      00000000 
+ 43952 dd0e 35       		.uleb128 0x35
+ 43953 dd0f A00D0000 		.long	0xda0
+ 43954 dd13 00000000 		.quad	.LBB3947
+ 43954      00000000 
+ 43955 dd1b 00000000 		.quad	.LBE3947
+ 43955      00000000 
+ 43956 dd23 02       		.byte	0x2
+ 43957 dd24 9B02     		.value	0x29b
+ 43958 dd26 32       		.uleb128 0x32
+ 43959 dd27 BE0D0000 		.long	0xdbe
+ 43960 dd2b 03       		.byte	0x3
+ 43961 dd2c 91       		.byte	0x91
+ 43962 dd2d A073     		.sleb128 -1632
+ 43963 dd2f 32       		.uleb128 0x32
+ 43964 dd30 B20D0000 		.long	0xdb2
+ 43965 dd34 03       		.byte	0x3
+ 43966 dd35 91       		.byte	0x91
+ 43967 dd36 B073     		.sleb128 -1616
+ 43968 dd38 35       		.uleb128 0x35
+ 43969 dd39 CB0D0000 		.long	0xdcb
+ 43970 dd3d 00000000 		.quad	.LBB3949
+ 43970      00000000 
+ 43971 dd45 00000000 		.quad	.LBE3949
+ 43971      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1092
+
+
+ 43972 dd4d 02       		.byte	0x2
+ 43973 dd4e 7501     		.value	0x175
+ 43974 dd50 32       		.uleb128 0x32
+ 43975 dd51 E90D0000 		.long	0xde9
+ 43976 dd55 03       		.byte	0x3
+ 43977 dd56 91       		.byte	0x91
+ 43978 dd57 C073     		.sleb128 -1600
+ 43979 dd59 32       		.uleb128 0x32
+ 43980 dd5a DD0D0000 		.long	0xddd
+ 43981 dd5e 03       		.byte	0x3
+ 43982 dd5f 91       		.byte	0x91
+ 43983 dd60 D073     		.sleb128 -1584
+ 43984 dd62 00       		.byte	0x0
+ 43985 dd63 00       		.byte	0x0
+ 43986 dd64 00       		.byte	0x0
+ 43987 dd65 00       		.byte	0x0
+ 43988 dd66 31       		.uleb128 0x31
+ 43989 dd67 4A0E0000 		.long	0xe4a
+ 43990 dd6b 00000000 		.quad	.LBB3951
+ 43990      00000000 
+ 43991 dd73 00000000 		.quad	.LBE3951
+ 43991      00000000 
+ 43992 dd7b 02       		.byte	0x2
+ 43993 dd7c 5304     		.value	0x453
+ 43994 dd7e 03DE0000 		.long	0xde03
+ 43995 dd82 32       		.uleb128 0x32
+ 43996 dd83 5C0E0000 		.long	0xe5c
+ 43997 dd87 03       		.byte	0x3
+ 43998 dd88 91       		.byte	0x91
+ 43999 dd89 E073     		.sleb128 -1568
+ 44000 dd8b 33       		.uleb128 0x33
+ 44001 dd8c 00000000 		.quad	.LBB3952
+ 44001      00000000 
+ 44002 dd94 00000000 		.quad	.LBE3952
+ 44002      00000000 
+ 44003 dd9c 34       		.uleb128 0x34
+ 44004 dd9d 680E0000 		.long	0xe68
+ 44005 dda1 09       		.byte	0x9
+ 44006 dda2 03       		.byte	0x3
+ 44007 dda3 00000000 		.quad	ShiftRowTable.7385
+ 44007      00000000 
+ 44008 ddab 35       		.uleb128 0x35
+ 44009 ddac A00D0000 		.long	0xda0
+ 44010 ddb0 00000000 		.quad	.LBB3953
+ 44010      00000000 
+ 44011 ddb8 00000000 		.quad	.LBE3953
+ 44011      00000000 
+ 44012 ddc0 02       		.byte	0x2
+ 44013 ddc1 9B02     		.value	0x29b
+ 44014 ddc3 32       		.uleb128 0x32
+ 44015 ddc4 BE0D0000 		.long	0xdbe
+ 44016 ddc8 03       		.byte	0x3
+ 44017 ddc9 91       		.byte	0x91
+ 44018 ddca F073     		.sleb128 -1552
+ 44019 ddcc 32       		.uleb128 0x32
+ 44020 ddcd B20D0000 		.long	0xdb2
+ 44021 ddd1 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1093
+
+
+ 44022 ddd2 91       		.byte	0x91
+ 44023 ddd3 8074     		.sleb128 -1536
+ 44024 ddd5 35       		.uleb128 0x35
+ 44025 ddd6 CB0D0000 		.long	0xdcb
+ 44026 ddda 00000000 		.quad	.LBB3955
+ 44026      00000000 
+ 44027 dde2 00000000 		.quad	.LBE3955
+ 44027      00000000 
+ 44028 ddea 02       		.byte	0x2
+ 44029 ddeb 7501     		.value	0x175
+ 44030 dded 32       		.uleb128 0x32
+ 44031 ddee E90D0000 		.long	0xde9
+ 44032 ddf2 03       		.byte	0x3
+ 44033 ddf3 91       		.byte	0x91
+ 44034 ddf4 9074     		.sleb128 -1520
+ 44035 ddf6 32       		.uleb128 0x32
+ 44036 ddf7 DD0D0000 		.long	0xddd
+ 44037 ddfb 03       		.byte	0x3
+ 44038 ddfc 91       		.byte	0x91
+ 44039 ddfd A074     		.sleb128 -1504
+ 44040 ddff 00       		.byte	0x0
+ 44041 de00 00       		.byte	0x0
+ 44042 de01 00       		.byte	0x0
+ 44043 de02 00       		.byte	0x0
+ 44044 de03 31       		.uleb128 0x31
+ 44045 de04 4A0E0000 		.long	0xe4a
+ 44046 de08 00000000 		.quad	.LBB3957
+ 44046      00000000 
+ 44047 de10 00000000 		.quad	.LBE3957
+ 44047      00000000 
+ 44048 de18 02       		.byte	0x2
+ 44049 de19 5404     		.value	0x454
+ 44050 de1b A0DE0000 		.long	0xdea0
+ 44051 de1f 32       		.uleb128 0x32
+ 44052 de20 5C0E0000 		.long	0xe5c
+ 44053 de24 03       		.byte	0x3
+ 44054 de25 91       		.byte	0x91
+ 44055 de26 B074     		.sleb128 -1488
+ 44056 de28 33       		.uleb128 0x33
+ 44057 de29 00000000 		.quad	.LBB3958
+ 44057      00000000 
+ 44058 de31 00000000 		.quad	.LBE3958
+ 44058      00000000 
+ 44059 de39 34       		.uleb128 0x34
+ 44060 de3a 680E0000 		.long	0xe68
+ 44061 de3e 09       		.byte	0x9
+ 44062 de3f 03       		.byte	0x3
+ 44063 de40 00000000 		.quad	ShiftRowTable.7385
+ 44063      00000000 
+ 44064 de48 35       		.uleb128 0x35
+ 44065 de49 A00D0000 		.long	0xda0
+ 44066 de4d 00000000 		.quad	.LBB3959
+ 44066      00000000 
+ 44067 de55 00000000 		.quad	.LBE3959
+ 44067      00000000 
+ 44068 de5d 02       		.byte	0x2
+ 44069 de5e 9B02     		.value	0x29b
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1094
+
+
+ 44070 de60 32       		.uleb128 0x32
+ 44071 de61 BE0D0000 		.long	0xdbe
+ 44072 de65 03       		.byte	0x3
+ 44073 de66 91       		.byte	0x91
+ 44074 de67 C074     		.sleb128 -1472
+ 44075 de69 32       		.uleb128 0x32
+ 44076 de6a B20D0000 		.long	0xdb2
+ 44077 de6e 03       		.byte	0x3
+ 44078 de6f 91       		.byte	0x91
+ 44079 de70 D074     		.sleb128 -1456
+ 44080 de72 35       		.uleb128 0x35
+ 44081 de73 CB0D0000 		.long	0xdcb
+ 44082 de77 00000000 		.quad	.LBB3961
+ 44082      00000000 
+ 44083 de7f 00000000 		.quad	.LBE3961
+ 44083      00000000 
+ 44084 de87 02       		.byte	0x2
+ 44085 de88 7501     		.value	0x175
+ 44086 de8a 32       		.uleb128 0x32
+ 44087 de8b E90D0000 		.long	0xde9
+ 44088 de8f 03       		.byte	0x3
+ 44089 de90 91       		.byte	0x91
+ 44090 de91 E074     		.sleb128 -1440
+ 44091 de93 32       		.uleb128 0x32
+ 44092 de94 DD0D0000 		.long	0xddd
+ 44093 de98 03       		.byte	0x3
+ 44094 de99 91       		.byte	0x91
+ 44095 de9a F074     		.sleb128 -1424
+ 44096 de9c 00       		.byte	0x0
+ 44097 de9d 00       		.byte	0x0
+ 44098 de9e 00       		.byte	0x0
+ 44099 de9f 00       		.byte	0x0
+ 44100 dea0 31       		.uleb128 0x31
+ 44101 dea1 860E0000 		.long	0xe86
+ 44102 dea5 00000000 		.quad	.LBB3963
+ 44102      00000000 
+ 44103 dead 00000000 		.quad	.LBE3963
+ 44103      00000000 
+ 44104 deb5 02       		.byte	0x2
+ 44105 deb6 5604     		.value	0x456
+ 44106 deb8 CFDE0000 		.long	0xdecf
+ 44107 debc 32       		.uleb128 0x32
+ 44108 debd A10E0000 		.long	0xea1
+ 44109 dec1 03       		.byte	0x3
+ 44110 dec2 91       		.byte	0x91
+ 44111 dec3 8075     		.sleb128 -1408
+ 44112 dec5 32       		.uleb128 0x32
+ 44113 dec6 970E0000 		.long	0xe97
+ 44114 deca 03       		.byte	0x3
+ 44115 decb 91       		.byte	0x91
+ 44116 decc 9075     		.sleb128 -1392
+ 44117 dece 00       		.byte	0x0
+ 44118 decf 31       		.uleb128 0x31
+ 44119 ded0 860E0000 		.long	0xe86
+ 44120 ded4 00000000 		.quad	.LBB3965
+ 44120      00000000 
+ 44121 dedc 00000000 		.quad	.LBE3965
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1095
+
+
+ 44121      00000000 
+ 44122 dee4 02       		.byte	0x2
+ 44123 dee5 5704     		.value	0x457
+ 44124 dee7 FEDE0000 		.long	0xdefe
+ 44125 deeb 32       		.uleb128 0x32
+ 44126 deec A10E0000 		.long	0xea1
+ 44127 def0 03       		.byte	0x3
+ 44128 def1 91       		.byte	0x91
+ 44129 def2 A075     		.sleb128 -1376
+ 44130 def4 32       		.uleb128 0x32
+ 44131 def5 970E0000 		.long	0xe97
+ 44132 def9 03       		.byte	0x3
+ 44133 defa 91       		.byte	0x91
+ 44134 defb B075     		.sleb128 -1360
+ 44135 defd 00       		.byte	0x0
+ 44136 defe 31       		.uleb128 0x31
+ 44137 deff 860E0000 		.long	0xe86
+ 44138 df03 00000000 		.quad	.LBB3967
+ 44138      00000000 
+ 44139 df0b 00000000 		.quad	.LBE3967
+ 44139      00000000 
+ 44140 df13 02       		.byte	0x2
+ 44141 df14 5804     		.value	0x458
+ 44142 df16 2DDF0000 		.long	0xdf2d
+ 44143 df1a 32       		.uleb128 0x32
+ 44144 df1b A10E0000 		.long	0xea1
+ 44145 df1f 03       		.byte	0x3
+ 44146 df20 91       		.byte	0x91
+ 44147 df21 C075     		.sleb128 -1344
+ 44148 df23 32       		.uleb128 0x32
+ 44149 df24 970E0000 		.long	0xe97
+ 44150 df28 03       		.byte	0x3
+ 44151 df29 91       		.byte	0x91
+ 44152 df2a D075     		.sleb128 -1328
+ 44153 df2c 00       		.byte	0x0
+ 44154 df2d 31       		.uleb128 0x31
+ 44155 df2e 860E0000 		.long	0xe86
+ 44156 df32 00000000 		.quad	.LBB3969
+ 44156      00000000 
+ 44157 df3a 00000000 		.quad	.LBE3969
+ 44157      00000000 
+ 44158 df42 02       		.byte	0x2
+ 44159 df43 5904     		.value	0x459
+ 44160 df45 5CDF0000 		.long	0xdf5c
+ 44161 df49 32       		.uleb128 0x32
+ 44162 df4a A10E0000 		.long	0xea1
+ 44163 df4e 03       		.byte	0x3
+ 44164 df4f 91       		.byte	0x91
+ 44165 df50 E075     		.sleb128 -1312
+ 44166 df52 32       		.uleb128 0x32
+ 44167 df53 970E0000 		.long	0xe97
+ 44168 df57 03       		.byte	0x3
+ 44169 df58 91       		.byte	0x91
+ 44170 df59 F075     		.sleb128 -1296
+ 44171 df5b 00       		.byte	0x0
+ 44172 df5c 31       		.uleb128 0x31
+ 44173 df5d 860E0000 		.long	0xe86
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1096
+
+
+ 44174 df61 00000000 		.quad	.LBB3971
+ 44174      00000000 
+ 44175 df69 00000000 		.quad	.LBE3971
+ 44175      00000000 
+ 44176 df71 02       		.byte	0x2
+ 44177 df72 5A04     		.value	0x45a
+ 44178 df74 8BDF0000 		.long	0xdf8b
+ 44179 df78 32       		.uleb128 0x32
+ 44180 df79 A10E0000 		.long	0xea1
+ 44181 df7d 03       		.byte	0x3
+ 44182 df7e 91       		.byte	0x91
+ 44183 df7f 8076     		.sleb128 -1280
+ 44184 df81 32       		.uleb128 0x32
+ 44185 df82 970E0000 		.long	0xe97
+ 44186 df86 03       		.byte	0x3
+ 44187 df87 91       		.byte	0x91
+ 44188 df88 9076     		.sleb128 -1264
+ 44189 df8a 00       		.byte	0x0
+ 44190 df8b 31       		.uleb128 0x31
+ 44191 df8c 6BD90000 		.long	0xd96b
+ 44192 df90 00000000 		.quad	.LBB3973
+ 44192      00000000 
+ 44193 df98 00000000 		.quad	.LBE3973
+ 44193      00000000 
+ 44194 dfa0 02       		.byte	0x2
+ 44195 dfa1 5E04     		.value	0x45e
+ 44196 dfa3 3BE20000 		.long	0xe23b
+ 44197 dfa7 32       		.uleb128 0x32
+ 44198 dfa8 89D90000 		.long	0xd989
+ 44199 dfac 03       		.byte	0x3
+ 44200 dfad 91       		.byte	0x91
+ 44201 dfae AC76     		.sleb128 -1236
+ 44202 dfb0 32       		.uleb128 0x32
+ 44203 dfb1 7DD90000 		.long	0xd97d
+ 44204 dfb5 03       		.byte	0x3
+ 44205 dfb6 91       		.byte	0x91
+ 44206 dfb7 B076     		.sleb128 -1232
+ 44207 dfb9 33       		.uleb128 0x33
+ 44208 dfba 00000000 		.quad	.LBB3974
+ 44208      00000000 
+ 44209 dfc2 00000000 		.quad	.LBE3974
+ 44209      00000000 
+ 44210 dfca 34       		.uleb128 0x34
+ 44211 dfcb 95D90000 		.long	0xd995
+ 44212 dfcf 03       		.byte	0x3
+ 44213 dfd0 91       		.byte	0x91
+ 44214 dfd1 D076     		.sleb128 -1200
+ 44215 dfd3 34       		.uleb128 0x34
+ 44216 dfd4 A0D90000 		.long	0xd9a0
+ 44217 dfd8 03       		.byte	0x3
+ 44218 dfd9 91       		.byte	0x91
+ 44219 dfda C076     		.sleb128 -1216
+ 44220 dfdc 34       		.uleb128 0x34
+ 44221 dfdd ABD90000 		.long	0xd9ab
+ 44222 dfe1 09       		.byte	0x9
+ 44223 dfe2 03       		.byte	0x3
+ 44224 dfe3 00000000 		.quad	__PRETTY_FUNCTION__.7467
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1097
+
+
+ 44224      00000000 
+ 44225 dfeb 36       		.uleb128 0x36
+ 44226 dfec 00000000 		.quad	.LBB3975
+ 44226      00000000 
+ 44227 dff4 00000000 		.quad	.LBE3975
+ 44227      00000000 
+ 44228 dffc 0AE00000 		.long	0xe00a
+ 44229 e000 34       		.uleb128 0x34
+ 44230 e001 BED90000 		.long	0xd9be
+ 44231 e005 03       		.byte	0x3
+ 44232 e006 91       		.byte	0x91
+ 44233 e007 8072     		.sleb128 -1792
+ 44234 e009 00       		.byte	0x0
+ 44235 e00a 31       		.uleb128 0x31
+ 44236 e00b FBD90000 		.long	0xd9fb
+ 44237 e00f 00000000 		.quad	.LBB3976
+ 44237      00000000 
+ 44238 e017 00000000 		.quad	.LBE3976
+ 44238      00000000 
+ 44239 e01f 02       		.byte	0x2
+ 44240 e020 A603     		.value	0x3a6
+ 44241 e022 B4E00000 		.long	0xe0b4
+ 44242 e026 32       		.uleb128 0x32
+ 44243 e027 17DA0000 		.long	0xda17
+ 44244 e02b 03       		.byte	0x3
+ 44245 e02c 91       		.byte	0x91
+ 44246 e02d EC76     		.sleb128 -1172
+ 44247 e02f 32       		.uleb128 0x32
+ 44248 e030 0DDA0000 		.long	0xda0d
+ 44249 e034 03       		.byte	0x3
+ 44250 e035 91       		.byte	0x91
+ 44251 e036 F076     		.sleb128 -1168
+ 44252 e038 33       		.uleb128 0x33
+ 44253 e039 00000000 		.quad	.LBB3977
+ 44253      00000000 
+ 44254 e041 00000000 		.quad	.LBE3977
+ 44254      00000000 
+ 44255 e049 34       		.uleb128 0x34
+ 44256 e04a 21DA0000 		.long	0xda21
+ 44257 e04e 09       		.byte	0x9
+ 44258 e04f 03       		.byte	0x3
+ 44259 e050 00000000 		.quad	sr_mask.7327
+ 44259      00000000 
+ 44260 e058 31       		.uleb128 0x31
+ 44261 e059 750D0000 		.long	0xd75
+ 44262 e05d 00000000 		.quad	.LBB3978
+ 44262      00000000 
+ 44263 e065 00000000 		.quad	.LBE3978
+ 44263      00000000 
+ 44264 e06d 02       		.byte	0x2
+ 44265 e06e E801     		.value	0x1e8
+ 44266 e070 87E00000 		.long	0xe087
+ 44267 e074 32       		.uleb128 0x32
+ 44268 e075 930D0000 		.long	0xd93
+ 44269 e079 03       		.byte	0x3
+ 44270 e07a 91       		.byte	0x91
+ 44271 e07b 8C77     		.sleb128 -1140
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1098
+
+
+ 44272 e07d 32       		.uleb128 0x32
+ 44273 e07e 870D0000 		.long	0xd87
+ 44274 e082 03       		.byte	0x3
+ 44275 e083 91       		.byte	0x91
+ 44276 e084 9077     		.sleb128 -1136
+ 44277 e086 00       		.byte	0x0
+ 44278 e087 35       		.uleb128 0x35
+ 44279 e088 4F0D0000 		.long	0xd4f
+ 44280 e08c 00000000 		.quad	.LBB3980
+ 44280      00000000 
+ 44281 e094 00000000 		.quad	.LBE3980
+ 44281      00000000 
+ 44282 e09c 02       		.byte	0x2
+ 44283 e09d E901     		.value	0x1e9
+ 44284 e09f 32       		.uleb128 0x32
+ 44285 e0a0 6A0D0000 		.long	0xd6a
+ 44286 e0a4 03       		.byte	0x3
+ 44287 e0a5 91       		.byte	0x91
+ 44288 e0a6 A077     		.sleb128 -1120
+ 44289 e0a8 32       		.uleb128 0x32
+ 44290 e0a9 600D0000 		.long	0xd60
+ 44291 e0ad 03       		.byte	0x3
+ 44292 e0ae 91       		.byte	0x91
+ 44293 e0af B077     		.sleb128 -1104
+ 44294 e0b1 00       		.byte	0x0
+ 44295 e0b2 00       		.byte	0x0
+ 44296 e0b3 00       		.byte	0x0
+ 44297 e0b4 36       		.uleb128 0x36
+ 44298 e0b5 00000000 		.quad	.LBB3982
+ 44298      00000000 
+ 44299 e0bd 00000000 		.quad	.LBE3982
+ 44299      00000000 
+ 44300 e0c5 D3E00000 		.long	0xe0d3
+ 44301 e0c9 34       		.uleb128 0x34
+ 44302 e0ca CED90000 		.long	0xd9ce
+ 44303 e0ce 03       		.byte	0x3
+ 44304 e0cf 91       		.byte	0x91
+ 44305 e0d0 F071     		.sleb128 -1808
+ 44306 e0d2 00       		.byte	0x0
+ 44307 e0d3 31       		.uleb128 0x31
+ 44308 e0d4 D4DA0000 		.long	0xdad4
+ 44309 e0d8 00000000 		.quad	.LBB3983
+ 44309      00000000 
+ 44310 e0e0 00000000 		.quad	.LBE3983
+ 44310      00000000 
+ 44311 e0e8 02       		.byte	0x2
+ 44312 e0e9 A803     		.value	0x3a8
+ 44313 e0eb 95E10000 		.long	0xe195
+ 44314 e0ef 32       		.uleb128 0x32
+ 44315 e0f0 F0DA0000 		.long	0xdaf0
+ 44316 e0f4 03       		.byte	0x3
+ 44317 e0f5 91       		.byte	0x91
+ 44318 e0f6 CC77     		.sleb128 -1076
+ 44319 e0f8 32       		.uleb128 0x32
+ 44320 e0f9 E6DA0000 		.long	0xdae6
+ 44321 e0fd 03       		.byte	0x3
+ 44322 e0fe 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1099
+
+
+ 44323 e0ff D077     		.sleb128 -1072
+ 44324 e101 33       		.uleb128 0x33
+ 44325 e102 00000000 		.quad	.LBB3984
+ 44325      00000000 
+ 44326 e10a 00000000 		.quad	.LBE3984
+ 44326      00000000 
+ 44327 e112 34       		.uleb128 0x34
+ 44328 e113 97DB0000 		.long	0xdb97
+ 44329 e117 03       		.byte	0x3
+ 44330 e118 91       		.byte	0x91
+ 44331 e119 E077     		.sleb128 -1056
+ 44332 e11b 34       		.uleb128 0x34
+ 44333 e11c FADA0000 		.long	0xdafa
+ 44334 e120 09       		.byte	0x9
+ 44335 e121 03       		.byte	0x3
+ 44336 e122 00000000 		.quad	sl_mask.7310
+ 44336      00000000 
+ 44337 e12a 34       		.uleb128 0x34
+ 44338 e12b A2DB0000 		.long	0xdba2
+ 44339 e12f 09       		.byte	0x9
+ 44340 e130 03       		.byte	0x3
+ 44341 e131 00000000 		.quad	__PRETTY_FUNCTION__.7312
+ 44341      00000000 
+ 44342 e139 31       		.uleb128 0x31
+ 44343 e13a CBDB0000 		.long	0xdbcb
+ 44344 e13e 00000000 		.quad	.LBB3985
+ 44344      00000000 
+ 44345 e146 00000000 		.quad	.LBE3985
+ 44345      00000000 
+ 44346 e14e 02       		.byte	0x2
+ 44347 e14f B101     		.value	0x1b1
+ 44348 e151 68E10000 		.long	0xe168
+ 44349 e155 32       		.uleb128 0x32
+ 44350 e156 E9DB0000 		.long	0xdbe9
+ 44351 e15a 03       		.byte	0x3
+ 44352 e15b 91       		.byte	0x91
+ 44353 e15c FC77     		.sleb128 -1028
+ 44354 e15e 32       		.uleb128 0x32
+ 44355 e15f DDDB0000 		.long	0xdbdd
+ 44356 e163 03       		.byte	0x3
+ 44357 e164 91       		.byte	0x91
+ 44358 e165 8078     		.sleb128 -1024
+ 44359 e167 00       		.byte	0x0
+ 44360 e168 35       		.uleb128 0x35
+ 44361 e169 4F0D0000 		.long	0xd4f
+ 44362 e16d 00000000 		.quad	.LBB3987
+ 44362      00000000 
+ 44363 e175 00000000 		.quad	.LBE3987
+ 44363      00000000 
+ 44364 e17d 02       		.byte	0x2
+ 44365 e17e B301     		.value	0x1b3
+ 44366 e180 32       		.uleb128 0x32
+ 44367 e181 6A0D0000 		.long	0xd6a
+ 44368 e185 03       		.byte	0x3
+ 44369 e186 91       		.byte	0x91
+ 44370 e187 9078     		.sleb128 -1008
+ 44371 e189 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1100
+
+
+ 44372 e18a 600D0000 		.long	0xd60
+ 44373 e18e 03       		.byte	0x3
+ 44374 e18f 91       		.byte	0x91
+ 44375 e190 A078     		.sleb128 -992
+ 44376 e192 00       		.byte	0x0
+ 44377 e193 00       		.byte	0x0
+ 44378 e194 00       		.byte	0x0
+ 44379 e195 36       		.uleb128 0x36
+ 44380 e196 00000000 		.quad	.LBB3989
+ 44380      00000000 
+ 44381 e19e 00000000 		.quad	.LBE3989
+ 44381      00000000 
+ 44382 e1a6 B4E10000 		.long	0xe1b4
+ 44383 e1aa 34       		.uleb128 0x34
+ 44384 e1ab DAD90000 		.long	0xd9da
+ 44385 e1af 03       		.byte	0x3
+ 44386 e1b0 91       		.byte	0x91
+ 44387 e1b1 E071     		.sleb128 -1824
+ 44388 e1b3 00       		.byte	0x0
+ 44389 e1b4 31       		.uleb128 0x31
+ 44390 e1b5 A00D0000 		.long	0xda0
+ 44391 e1b9 00000000 		.quad	.LBB3990
+ 44391      00000000 
+ 44392 e1c1 00000000 		.quad	.LBE3990
+ 44392      00000000 
+ 44393 e1c9 02       		.byte	0x2
+ 44394 e1ca AA03     		.value	0x3aa
+ 44395 e1cc 0EE20000 		.long	0xe20e
+ 44396 e1d0 32       		.uleb128 0x32
+ 44397 e1d1 BE0D0000 		.long	0xdbe
+ 44398 e1d5 03       		.byte	0x3
+ 44399 e1d6 91       		.byte	0x91
+ 44400 e1d7 B078     		.sleb128 -976
+ 44401 e1d9 32       		.uleb128 0x32
+ 44402 e1da B20D0000 		.long	0xdb2
+ 44403 e1de 03       		.byte	0x3
+ 44404 e1df 91       		.byte	0x91
+ 44405 e1e0 C078     		.sleb128 -960
+ 44406 e1e2 35       		.uleb128 0x35
+ 44407 e1e3 CB0D0000 		.long	0xdcb
+ 44408 e1e7 00000000 		.quad	.LBB3992
+ 44408      00000000 
+ 44409 e1ef 00000000 		.quad	.LBE3992
+ 44409      00000000 
+ 44410 e1f7 02       		.byte	0x2
+ 44411 e1f8 7501     		.value	0x175
+ 44412 e1fa 32       		.uleb128 0x32
+ 44413 e1fb E90D0000 		.long	0xde9
+ 44414 e1ff 03       		.byte	0x3
+ 44415 e200 91       		.byte	0x91
+ 44416 e201 D078     		.sleb128 -944
+ 44417 e203 32       		.uleb128 0x32
+ 44418 e204 DD0D0000 		.long	0xddd
+ 44419 e208 03       		.byte	0x3
+ 44420 e209 91       		.byte	0x91
+ 44421 e20a E078     		.sleb128 -928
+ 44422 e20c 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1101
+
+
+ 44423 e20d 00       		.byte	0x0
+ 44424 e20e 35       		.uleb128 0x35
+ 44425 e20f 860E0000 		.long	0xe86
+ 44426 e213 00000000 		.quad	.LBB3994
+ 44426      00000000 
+ 44427 e21b 00000000 		.quad	.LBE3994
+ 44427      00000000 
+ 44428 e223 02       		.byte	0x2
+ 44429 e224 AB03     		.value	0x3ab
+ 44430 e226 32       		.uleb128 0x32
+ 44431 e227 A10E0000 		.long	0xea1
+ 44432 e22b 03       		.byte	0x3
+ 44433 e22c 91       		.byte	0x91
+ 44434 e22d F078     		.sleb128 -912
+ 44435 e22f 32       		.uleb128 0x32
+ 44436 e230 970E0000 		.long	0xe97
+ 44437 e234 03       		.byte	0x3
+ 44438 e235 91       		.byte	0x91
+ 44439 e236 8079     		.sleb128 -896
+ 44440 e238 00       		.byte	0x0
+ 44441 e239 00       		.byte	0x0
+ 44442 e23a 00       		.byte	0x0
+ 44443 e23b 31       		.uleb128 0x31
+ 44444 e23c 6BD90000 		.long	0xd96b
+ 44445 e240 00000000 		.quad	.LBB3996
+ 44445      00000000 
+ 44446 e248 00000000 		.quad	.LBE3996
+ 44446      00000000 
+ 44447 e250 02       		.byte	0x2
+ 44448 e251 5F04     		.value	0x45f
+ 44449 e253 EBE40000 		.long	0xe4eb
+ 44450 e257 32       		.uleb128 0x32
+ 44451 e258 89D90000 		.long	0xd989
+ 44452 e25c 03       		.byte	0x3
+ 44453 e25d 91       		.byte	0x91
+ 44454 e25e 9C79     		.sleb128 -868
+ 44455 e260 32       		.uleb128 0x32
+ 44456 e261 7DD90000 		.long	0xd97d
+ 44457 e265 03       		.byte	0x3
+ 44458 e266 91       		.byte	0x91
+ 44459 e267 A079     		.sleb128 -864
+ 44460 e269 33       		.uleb128 0x33
+ 44461 e26a 00000000 		.quad	.LBB3997
+ 44461      00000000 
+ 44462 e272 00000000 		.quad	.LBE3997
+ 44462      00000000 
+ 44463 e27a 34       		.uleb128 0x34
+ 44464 e27b 95D90000 		.long	0xd995
+ 44465 e27f 03       		.byte	0x3
+ 44466 e280 91       		.byte	0x91
+ 44467 e281 C079     		.sleb128 -832
+ 44468 e283 34       		.uleb128 0x34
+ 44469 e284 A0D90000 		.long	0xd9a0
+ 44470 e288 03       		.byte	0x3
+ 44471 e289 91       		.byte	0x91
+ 44472 e28a B079     		.sleb128 -848
+ 44473 e28c 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1102
+
+
+ 44474 e28d ABD90000 		.long	0xd9ab
+ 44475 e291 09       		.byte	0x9
+ 44476 e292 03       		.byte	0x3
+ 44477 e293 00000000 		.quad	__PRETTY_FUNCTION__.7467
+ 44477      00000000 
+ 44478 e29b 36       		.uleb128 0x36
+ 44479 e29c 00000000 		.quad	.LBB3998
+ 44479      00000000 
+ 44480 e2a4 00000000 		.quad	.LBE3998
+ 44480      00000000 
+ 44481 e2ac BAE20000 		.long	0xe2ba
+ 44482 e2b0 34       		.uleb128 0x34
+ 44483 e2b1 BED90000 		.long	0xd9be
+ 44484 e2b5 03       		.byte	0x3
+ 44485 e2b6 91       		.byte	0x91
+ 44486 e2b7 B072     		.sleb128 -1744
+ 44487 e2b9 00       		.byte	0x0
+ 44488 e2ba 31       		.uleb128 0x31
+ 44489 e2bb FBD90000 		.long	0xd9fb
+ 44490 e2bf 00000000 		.quad	.LBB3999
+ 44490      00000000 
+ 44491 e2c7 00000000 		.quad	.LBE3999
+ 44491      00000000 
+ 44492 e2cf 02       		.byte	0x2
+ 44493 e2d0 A603     		.value	0x3a6
+ 44494 e2d2 64E30000 		.long	0xe364
+ 44495 e2d6 32       		.uleb128 0x32
+ 44496 e2d7 17DA0000 		.long	0xda17
+ 44497 e2db 03       		.byte	0x3
+ 44498 e2dc 91       		.byte	0x91
+ 44499 e2dd DC79     		.sleb128 -804
+ 44500 e2df 32       		.uleb128 0x32
+ 44501 e2e0 0DDA0000 		.long	0xda0d
+ 44502 e2e4 03       		.byte	0x3
+ 44503 e2e5 91       		.byte	0x91
+ 44504 e2e6 E079     		.sleb128 -800
+ 44505 e2e8 33       		.uleb128 0x33
+ 44506 e2e9 00000000 		.quad	.LBB4000
+ 44506      00000000 
+ 44507 e2f1 00000000 		.quad	.LBE4000
+ 44507      00000000 
+ 44508 e2f9 34       		.uleb128 0x34
+ 44509 e2fa 21DA0000 		.long	0xda21
+ 44510 e2fe 09       		.byte	0x9
+ 44511 e2ff 03       		.byte	0x3
+ 44512 e300 00000000 		.quad	sr_mask.7327
+ 44512      00000000 
+ 44513 e308 31       		.uleb128 0x31
+ 44514 e309 750D0000 		.long	0xd75
+ 44515 e30d 00000000 		.quad	.LBB4001
+ 44515      00000000 
+ 44516 e315 00000000 		.quad	.LBE4001
+ 44516      00000000 
+ 44517 e31d 02       		.byte	0x2
+ 44518 e31e E801     		.value	0x1e8
+ 44519 e320 37E30000 		.long	0xe337
+ 44520 e324 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1103
+
+
+ 44521 e325 930D0000 		.long	0xd93
+ 44522 e329 03       		.byte	0x3
+ 44523 e32a 91       		.byte	0x91
+ 44524 e32b FC79     		.sleb128 -772
+ 44525 e32d 32       		.uleb128 0x32
+ 44526 e32e 870D0000 		.long	0xd87
+ 44527 e332 03       		.byte	0x3
+ 44528 e333 91       		.byte	0x91
+ 44529 e334 807A     		.sleb128 -768
+ 44530 e336 00       		.byte	0x0
+ 44531 e337 35       		.uleb128 0x35
+ 44532 e338 4F0D0000 		.long	0xd4f
+ 44533 e33c 00000000 		.quad	.LBB4003
+ 44533      00000000 
+ 44534 e344 00000000 		.quad	.LBE4003
+ 44534      00000000 
+ 44535 e34c 02       		.byte	0x2
+ 44536 e34d E901     		.value	0x1e9
+ 44537 e34f 32       		.uleb128 0x32
+ 44538 e350 6A0D0000 		.long	0xd6a
+ 44539 e354 03       		.byte	0x3
+ 44540 e355 91       		.byte	0x91
+ 44541 e356 907A     		.sleb128 -752
+ 44542 e358 32       		.uleb128 0x32
+ 44543 e359 600D0000 		.long	0xd60
+ 44544 e35d 03       		.byte	0x3
+ 44545 e35e 91       		.byte	0x91
+ 44546 e35f A07A     		.sleb128 -736
+ 44547 e361 00       		.byte	0x0
+ 44548 e362 00       		.byte	0x0
+ 44549 e363 00       		.byte	0x0
+ 44550 e364 36       		.uleb128 0x36
+ 44551 e365 00000000 		.quad	.LBB4005
+ 44551      00000000 
+ 44552 e36d 00000000 		.quad	.LBE4005
+ 44552      00000000 
+ 44553 e375 83E30000 		.long	0xe383
+ 44554 e379 34       		.uleb128 0x34
+ 44555 e37a CED90000 		.long	0xd9ce
+ 44556 e37e 03       		.byte	0x3
+ 44557 e37f 91       		.byte	0x91
+ 44558 e380 A072     		.sleb128 -1760
+ 44559 e382 00       		.byte	0x0
+ 44560 e383 31       		.uleb128 0x31
+ 44561 e384 D4DA0000 		.long	0xdad4
+ 44562 e388 00000000 		.quad	.LBB4006
+ 44562      00000000 
+ 44563 e390 00000000 		.quad	.LBE4006
+ 44563      00000000 
+ 44564 e398 02       		.byte	0x2
+ 44565 e399 A803     		.value	0x3a8
+ 44566 e39b 45E40000 		.long	0xe445
+ 44567 e39f 32       		.uleb128 0x32
+ 44568 e3a0 F0DA0000 		.long	0xdaf0
+ 44569 e3a4 03       		.byte	0x3
+ 44570 e3a5 91       		.byte	0x91
+ 44571 e3a6 BC7A     		.sleb128 -708
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1104
+
+
+ 44572 e3a8 32       		.uleb128 0x32
+ 44573 e3a9 E6DA0000 		.long	0xdae6
+ 44574 e3ad 03       		.byte	0x3
+ 44575 e3ae 91       		.byte	0x91
+ 44576 e3af C07A     		.sleb128 -704
+ 44577 e3b1 33       		.uleb128 0x33
+ 44578 e3b2 00000000 		.quad	.LBB4007
+ 44578      00000000 
+ 44579 e3ba 00000000 		.quad	.LBE4007
+ 44579      00000000 
+ 44580 e3c2 34       		.uleb128 0x34
+ 44581 e3c3 97DB0000 		.long	0xdb97
+ 44582 e3c7 03       		.byte	0x3
+ 44583 e3c8 91       		.byte	0x91
+ 44584 e3c9 D07A     		.sleb128 -688
+ 44585 e3cb 34       		.uleb128 0x34
+ 44586 e3cc FADA0000 		.long	0xdafa
+ 44587 e3d0 09       		.byte	0x9
+ 44588 e3d1 03       		.byte	0x3
+ 44589 e3d2 00000000 		.quad	sl_mask.7310
+ 44589      00000000 
+ 44590 e3da 34       		.uleb128 0x34
+ 44591 e3db A2DB0000 		.long	0xdba2
+ 44592 e3df 09       		.byte	0x9
+ 44593 e3e0 03       		.byte	0x3
+ 44594 e3e1 00000000 		.quad	__PRETTY_FUNCTION__.7312
+ 44594      00000000 
+ 44595 e3e9 31       		.uleb128 0x31
+ 44596 e3ea CBDB0000 		.long	0xdbcb
+ 44597 e3ee 00000000 		.quad	.LBB4008
+ 44597      00000000 
+ 44598 e3f6 00000000 		.quad	.LBE4008
+ 44598      00000000 
+ 44599 e3fe 02       		.byte	0x2
+ 44600 e3ff B101     		.value	0x1b1
+ 44601 e401 18E40000 		.long	0xe418
+ 44602 e405 32       		.uleb128 0x32
+ 44603 e406 E9DB0000 		.long	0xdbe9
+ 44604 e40a 03       		.byte	0x3
+ 44605 e40b 91       		.byte	0x91
+ 44606 e40c EC7A     		.sleb128 -660
+ 44607 e40e 32       		.uleb128 0x32
+ 44608 e40f DDDB0000 		.long	0xdbdd
+ 44609 e413 03       		.byte	0x3
+ 44610 e414 91       		.byte	0x91
+ 44611 e415 F07A     		.sleb128 -656
+ 44612 e417 00       		.byte	0x0
+ 44613 e418 35       		.uleb128 0x35
+ 44614 e419 4F0D0000 		.long	0xd4f
+ 44615 e41d 00000000 		.quad	.LBB4010
+ 44615      00000000 
+ 44616 e425 00000000 		.quad	.LBE4010
+ 44616      00000000 
+ 44617 e42d 02       		.byte	0x2
+ 44618 e42e B301     		.value	0x1b3
+ 44619 e430 32       		.uleb128 0x32
+ 44620 e431 6A0D0000 		.long	0xd6a
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1105
+
+
+ 44621 e435 03       		.byte	0x3
+ 44622 e436 91       		.byte	0x91
+ 44623 e437 807B     		.sleb128 -640
+ 44624 e439 32       		.uleb128 0x32
+ 44625 e43a 600D0000 		.long	0xd60
+ 44626 e43e 03       		.byte	0x3
+ 44627 e43f 91       		.byte	0x91
+ 44628 e440 907B     		.sleb128 -624
+ 44629 e442 00       		.byte	0x0
+ 44630 e443 00       		.byte	0x0
+ 44631 e444 00       		.byte	0x0
+ 44632 e445 36       		.uleb128 0x36
+ 44633 e446 00000000 		.quad	.LBB4012
+ 44633      00000000 
+ 44634 e44e 00000000 		.quad	.LBE4012
+ 44634      00000000 
+ 44635 e456 64E40000 		.long	0xe464
+ 44636 e45a 34       		.uleb128 0x34
+ 44637 e45b DAD90000 		.long	0xd9da
+ 44638 e45f 03       		.byte	0x3
+ 44639 e460 91       		.byte	0x91
+ 44640 e461 9072     		.sleb128 -1776
+ 44641 e463 00       		.byte	0x0
+ 44642 e464 31       		.uleb128 0x31
+ 44643 e465 A00D0000 		.long	0xda0
+ 44644 e469 00000000 		.quad	.LBB4013
+ 44644      00000000 
+ 44645 e471 00000000 		.quad	.LBE4013
+ 44645      00000000 
+ 44646 e479 02       		.byte	0x2
+ 44647 e47a AA03     		.value	0x3aa
+ 44648 e47c BEE40000 		.long	0xe4be
+ 44649 e480 32       		.uleb128 0x32
+ 44650 e481 BE0D0000 		.long	0xdbe
+ 44651 e485 03       		.byte	0x3
+ 44652 e486 91       		.byte	0x91
+ 44653 e487 A07B     		.sleb128 -608
+ 44654 e489 32       		.uleb128 0x32
+ 44655 e48a B20D0000 		.long	0xdb2
+ 44656 e48e 03       		.byte	0x3
+ 44657 e48f 91       		.byte	0x91
+ 44658 e490 B07B     		.sleb128 -592
+ 44659 e492 35       		.uleb128 0x35
+ 44660 e493 CB0D0000 		.long	0xdcb
+ 44661 e497 00000000 		.quad	.LBB4015
+ 44661      00000000 
+ 44662 e49f 00000000 		.quad	.LBE4015
+ 44662      00000000 
+ 44663 e4a7 02       		.byte	0x2
+ 44664 e4a8 7501     		.value	0x175
+ 44665 e4aa 32       		.uleb128 0x32
+ 44666 e4ab E90D0000 		.long	0xde9
+ 44667 e4af 03       		.byte	0x3
+ 44668 e4b0 91       		.byte	0x91
+ 44669 e4b1 C07B     		.sleb128 -576
+ 44670 e4b3 32       		.uleb128 0x32
+ 44671 e4b4 DD0D0000 		.long	0xddd
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1106
+
+
+ 44672 e4b8 03       		.byte	0x3
+ 44673 e4b9 91       		.byte	0x91
+ 44674 e4ba D07B     		.sleb128 -560
+ 44675 e4bc 00       		.byte	0x0
+ 44676 e4bd 00       		.byte	0x0
+ 44677 e4be 35       		.uleb128 0x35
+ 44678 e4bf 860E0000 		.long	0xe86
+ 44679 e4c3 00000000 		.quad	.LBB4017
+ 44679      00000000 
+ 44680 e4cb 00000000 		.quad	.LBE4017
+ 44680      00000000 
+ 44681 e4d3 02       		.byte	0x2
+ 44682 e4d4 AB03     		.value	0x3ab
+ 44683 e4d6 32       		.uleb128 0x32
+ 44684 e4d7 A10E0000 		.long	0xea1
+ 44685 e4db 03       		.byte	0x3
+ 44686 e4dc 91       		.byte	0x91
+ 44687 e4dd E07B     		.sleb128 -544
+ 44688 e4df 32       		.uleb128 0x32
+ 44689 e4e0 970E0000 		.long	0xe97
+ 44690 e4e4 03       		.byte	0x3
+ 44691 e4e5 91       		.byte	0x91
+ 44692 e4e6 F07B     		.sleb128 -528
+ 44693 e4e8 00       		.byte	0x0
+ 44694 e4e9 00       		.byte	0x0
+ 44695 e4ea 00       		.byte	0x0
+ 44696 e4eb 31       		.uleb128 0x31
+ 44697 e4ec 6BD90000 		.long	0xd96b
+ 44698 e4f0 00000000 		.quad	.LBB4019
+ 44698      00000000 
+ 44699 e4f8 00000000 		.quad	.LBE4019
+ 44699      00000000 
+ 44700 e500 02       		.byte	0x2
+ 44701 e501 6004     		.value	0x460
+ 44702 e503 9BE70000 		.long	0xe79b
+ 44703 e507 32       		.uleb128 0x32
+ 44704 e508 89D90000 		.long	0xd989
+ 44705 e50c 03       		.byte	0x3
+ 44706 e50d 91       		.byte	0x91
+ 44707 e50e 8C7C     		.sleb128 -500
+ 44708 e510 32       		.uleb128 0x32
+ 44709 e511 7DD90000 		.long	0xd97d
+ 44710 e515 03       		.byte	0x3
+ 44711 e516 91       		.byte	0x91
+ 44712 e517 907C     		.sleb128 -496
+ 44713 e519 33       		.uleb128 0x33
+ 44714 e51a 00000000 		.quad	.LBB4020
+ 44714      00000000 
+ 44715 e522 00000000 		.quad	.LBE4020
+ 44715      00000000 
+ 44716 e52a 34       		.uleb128 0x34
+ 44717 e52b 95D90000 		.long	0xd995
+ 44718 e52f 03       		.byte	0x3
+ 44719 e530 91       		.byte	0x91
+ 44720 e531 B07C     		.sleb128 -464
+ 44721 e533 34       		.uleb128 0x34
+ 44722 e534 A0D90000 		.long	0xd9a0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1107
+
+
+ 44723 e538 03       		.byte	0x3
+ 44724 e539 91       		.byte	0x91
+ 44725 e53a A07C     		.sleb128 -480
+ 44726 e53c 34       		.uleb128 0x34
+ 44727 e53d ABD90000 		.long	0xd9ab
+ 44728 e541 09       		.byte	0x9
+ 44729 e542 03       		.byte	0x3
+ 44730 e543 00000000 		.quad	__PRETTY_FUNCTION__.7467
+ 44730      00000000 
+ 44731 e54b 36       		.uleb128 0x36
+ 44732 e54c 00000000 		.quad	.LBB4021
+ 44732      00000000 
+ 44733 e554 00000000 		.quad	.LBE4021
+ 44733      00000000 
+ 44734 e55c 6AE50000 		.long	0xe56a
+ 44735 e560 34       		.uleb128 0x34
+ 44736 e561 BED90000 		.long	0xd9be
+ 44737 e565 03       		.byte	0x3
+ 44738 e566 91       		.byte	0x91
+ 44739 e567 E072     		.sleb128 -1696
+ 44740 e569 00       		.byte	0x0
+ 44741 e56a 31       		.uleb128 0x31
+ 44742 e56b FBD90000 		.long	0xd9fb
+ 44743 e56f 00000000 		.quad	.LBB4022
+ 44743      00000000 
+ 44744 e577 00000000 		.quad	.LBE4022
+ 44744      00000000 
+ 44745 e57f 02       		.byte	0x2
+ 44746 e580 A603     		.value	0x3a6
+ 44747 e582 14E60000 		.long	0xe614
+ 44748 e586 32       		.uleb128 0x32
+ 44749 e587 17DA0000 		.long	0xda17
+ 44750 e58b 03       		.byte	0x3
+ 44751 e58c 91       		.byte	0x91
+ 44752 e58d CC7C     		.sleb128 -436
+ 44753 e58f 32       		.uleb128 0x32
+ 44754 e590 0DDA0000 		.long	0xda0d
+ 44755 e594 03       		.byte	0x3
+ 44756 e595 91       		.byte	0x91
+ 44757 e596 D07C     		.sleb128 -432
+ 44758 e598 33       		.uleb128 0x33
+ 44759 e599 00000000 		.quad	.LBB4023
+ 44759      00000000 
+ 44760 e5a1 00000000 		.quad	.LBE4023
+ 44760      00000000 
+ 44761 e5a9 34       		.uleb128 0x34
+ 44762 e5aa 21DA0000 		.long	0xda21
+ 44763 e5ae 09       		.byte	0x9
+ 44764 e5af 03       		.byte	0x3
+ 44765 e5b0 00000000 		.quad	sr_mask.7327
+ 44765      00000000 
+ 44766 e5b8 31       		.uleb128 0x31
+ 44767 e5b9 750D0000 		.long	0xd75
+ 44768 e5bd 00000000 		.quad	.LBB4024
+ 44768      00000000 
+ 44769 e5c5 00000000 		.quad	.LBE4024
+ 44769      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1108
+
+
+ 44770 e5cd 02       		.byte	0x2
+ 44771 e5ce E801     		.value	0x1e8
+ 44772 e5d0 E7E50000 		.long	0xe5e7
+ 44773 e5d4 32       		.uleb128 0x32
+ 44774 e5d5 930D0000 		.long	0xd93
+ 44775 e5d9 03       		.byte	0x3
+ 44776 e5da 91       		.byte	0x91
+ 44777 e5db EC7C     		.sleb128 -404
+ 44778 e5dd 32       		.uleb128 0x32
+ 44779 e5de 870D0000 		.long	0xd87
+ 44780 e5e2 03       		.byte	0x3
+ 44781 e5e3 91       		.byte	0x91
+ 44782 e5e4 F07C     		.sleb128 -400
+ 44783 e5e6 00       		.byte	0x0
+ 44784 e5e7 35       		.uleb128 0x35
+ 44785 e5e8 4F0D0000 		.long	0xd4f
+ 44786 e5ec 00000000 		.quad	.LBB4026
+ 44786      00000000 
+ 44787 e5f4 00000000 		.quad	.LBE4026
+ 44787      00000000 
+ 44788 e5fc 02       		.byte	0x2
+ 44789 e5fd E901     		.value	0x1e9
+ 44790 e5ff 32       		.uleb128 0x32
+ 44791 e600 6A0D0000 		.long	0xd6a
+ 44792 e604 03       		.byte	0x3
+ 44793 e605 91       		.byte	0x91
+ 44794 e606 807D     		.sleb128 -384
+ 44795 e608 32       		.uleb128 0x32
+ 44796 e609 600D0000 		.long	0xd60
+ 44797 e60d 03       		.byte	0x3
+ 44798 e60e 91       		.byte	0x91
+ 44799 e60f 907D     		.sleb128 -368
+ 44800 e611 00       		.byte	0x0
+ 44801 e612 00       		.byte	0x0
+ 44802 e613 00       		.byte	0x0
+ 44803 e614 36       		.uleb128 0x36
+ 44804 e615 00000000 		.quad	.LBB4028
+ 44804      00000000 
+ 44805 e61d 00000000 		.quad	.LBE4028
+ 44805      00000000 
+ 44806 e625 33E60000 		.long	0xe633
+ 44807 e629 34       		.uleb128 0x34
+ 44808 e62a CED90000 		.long	0xd9ce
+ 44809 e62e 03       		.byte	0x3
+ 44810 e62f 91       		.byte	0x91
+ 44811 e630 D072     		.sleb128 -1712
+ 44812 e632 00       		.byte	0x0
+ 44813 e633 31       		.uleb128 0x31
+ 44814 e634 D4DA0000 		.long	0xdad4
+ 44815 e638 00000000 		.quad	.LBB4029
+ 44815      00000000 
+ 44816 e640 00000000 		.quad	.LBE4029
+ 44816      00000000 
+ 44817 e648 02       		.byte	0x2
+ 44818 e649 A803     		.value	0x3a8
+ 44819 e64b F5E60000 		.long	0xe6f5
+ 44820 e64f 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1109
+
+
+ 44821 e650 F0DA0000 		.long	0xdaf0
+ 44822 e654 03       		.byte	0x3
+ 44823 e655 91       		.byte	0x91
+ 44824 e656 AC7D     		.sleb128 -340
+ 44825 e658 32       		.uleb128 0x32
+ 44826 e659 E6DA0000 		.long	0xdae6
+ 44827 e65d 03       		.byte	0x3
+ 44828 e65e 91       		.byte	0x91
+ 44829 e65f B07D     		.sleb128 -336
+ 44830 e661 33       		.uleb128 0x33
+ 44831 e662 00000000 		.quad	.LBB4030
+ 44831      00000000 
+ 44832 e66a 00000000 		.quad	.LBE4030
+ 44832      00000000 
+ 44833 e672 34       		.uleb128 0x34
+ 44834 e673 97DB0000 		.long	0xdb97
+ 44835 e677 03       		.byte	0x3
+ 44836 e678 91       		.byte	0x91
+ 44837 e679 C07D     		.sleb128 -320
+ 44838 e67b 34       		.uleb128 0x34
+ 44839 e67c FADA0000 		.long	0xdafa
+ 44840 e680 09       		.byte	0x9
+ 44841 e681 03       		.byte	0x3
+ 44842 e682 00000000 		.quad	sl_mask.7310
+ 44842      00000000 
+ 44843 e68a 34       		.uleb128 0x34
+ 44844 e68b A2DB0000 		.long	0xdba2
+ 44845 e68f 09       		.byte	0x9
+ 44846 e690 03       		.byte	0x3
+ 44847 e691 00000000 		.quad	__PRETTY_FUNCTION__.7312
+ 44847      00000000 
+ 44848 e699 31       		.uleb128 0x31
+ 44849 e69a CBDB0000 		.long	0xdbcb
+ 44850 e69e 00000000 		.quad	.LBB4031
+ 44850      00000000 
+ 44851 e6a6 00000000 		.quad	.LBE4031
+ 44851      00000000 
+ 44852 e6ae 02       		.byte	0x2
+ 44853 e6af B101     		.value	0x1b1
+ 44854 e6b1 C8E60000 		.long	0xe6c8
+ 44855 e6b5 32       		.uleb128 0x32
+ 44856 e6b6 E9DB0000 		.long	0xdbe9
+ 44857 e6ba 03       		.byte	0x3
+ 44858 e6bb 91       		.byte	0x91
+ 44859 e6bc DC7D     		.sleb128 -292
+ 44860 e6be 32       		.uleb128 0x32
+ 44861 e6bf DDDB0000 		.long	0xdbdd
+ 44862 e6c3 03       		.byte	0x3
+ 44863 e6c4 91       		.byte	0x91
+ 44864 e6c5 E07D     		.sleb128 -288
+ 44865 e6c7 00       		.byte	0x0
+ 44866 e6c8 35       		.uleb128 0x35
+ 44867 e6c9 4F0D0000 		.long	0xd4f
+ 44868 e6cd 00000000 		.quad	.LBB4033
+ 44868      00000000 
+ 44869 e6d5 00000000 		.quad	.LBE4033
+ 44869      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1110
+
+
+ 44870 e6dd 02       		.byte	0x2
+ 44871 e6de B301     		.value	0x1b3
+ 44872 e6e0 32       		.uleb128 0x32
+ 44873 e6e1 6A0D0000 		.long	0xd6a
+ 44874 e6e5 03       		.byte	0x3
+ 44875 e6e6 91       		.byte	0x91
+ 44876 e6e7 F07D     		.sleb128 -272
+ 44877 e6e9 32       		.uleb128 0x32
+ 44878 e6ea 600D0000 		.long	0xd60
+ 44879 e6ee 03       		.byte	0x3
+ 44880 e6ef 91       		.byte	0x91
+ 44881 e6f0 807E     		.sleb128 -256
+ 44882 e6f2 00       		.byte	0x0
+ 44883 e6f3 00       		.byte	0x0
+ 44884 e6f4 00       		.byte	0x0
+ 44885 e6f5 36       		.uleb128 0x36
+ 44886 e6f6 00000000 		.quad	.LBB4035
+ 44886      00000000 
+ 44887 e6fe 00000000 		.quad	.LBE4035
+ 44887      00000000 
+ 44888 e706 14E70000 		.long	0xe714
+ 44889 e70a 34       		.uleb128 0x34
+ 44890 e70b DAD90000 		.long	0xd9da
+ 44891 e70f 03       		.byte	0x3
+ 44892 e710 91       		.byte	0x91
+ 44893 e711 C072     		.sleb128 -1728
+ 44894 e713 00       		.byte	0x0
+ 44895 e714 31       		.uleb128 0x31
+ 44896 e715 A00D0000 		.long	0xda0
+ 44897 e719 00000000 		.quad	.LBB4036
+ 44897      00000000 
+ 44898 e721 00000000 		.quad	.LBE4036
+ 44898      00000000 
+ 44899 e729 02       		.byte	0x2
+ 44900 e72a AA03     		.value	0x3aa
+ 44901 e72c 6EE70000 		.long	0xe76e
+ 44902 e730 32       		.uleb128 0x32
+ 44903 e731 BE0D0000 		.long	0xdbe
+ 44904 e735 03       		.byte	0x3
+ 44905 e736 91       		.byte	0x91
+ 44906 e737 907E     		.sleb128 -240
+ 44907 e739 32       		.uleb128 0x32
+ 44908 e73a B20D0000 		.long	0xdb2
+ 44909 e73e 03       		.byte	0x3
+ 44910 e73f 91       		.byte	0x91
+ 44911 e740 A07E     		.sleb128 -224
+ 44912 e742 35       		.uleb128 0x35
+ 44913 e743 CB0D0000 		.long	0xdcb
+ 44914 e747 00000000 		.quad	.LBB4038
+ 44914      00000000 
+ 44915 e74f 00000000 		.quad	.LBE4038
+ 44915      00000000 
+ 44916 e757 02       		.byte	0x2
+ 44917 e758 7501     		.value	0x175
+ 44918 e75a 32       		.uleb128 0x32
+ 44919 e75b E90D0000 		.long	0xde9
+ 44920 e75f 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1111
+
+
+ 44921 e760 91       		.byte	0x91
+ 44922 e761 B07E     		.sleb128 -208
+ 44923 e763 32       		.uleb128 0x32
+ 44924 e764 DD0D0000 		.long	0xddd
+ 44925 e768 03       		.byte	0x3
+ 44926 e769 91       		.byte	0x91
+ 44927 e76a C07E     		.sleb128 -192
+ 44928 e76c 00       		.byte	0x0
+ 44929 e76d 00       		.byte	0x0
+ 44930 e76e 35       		.uleb128 0x35
+ 44931 e76f 860E0000 		.long	0xe86
+ 44932 e773 00000000 		.quad	.LBB4040
+ 44932      00000000 
+ 44933 e77b 00000000 		.quad	.LBE4040
+ 44933      00000000 
+ 44934 e783 02       		.byte	0x2
+ 44935 e784 AB03     		.value	0x3ab
+ 44936 e786 32       		.uleb128 0x32
+ 44937 e787 A10E0000 		.long	0xea1
+ 44938 e78b 03       		.byte	0x3
+ 44939 e78c 91       		.byte	0x91
+ 44940 e78d D07E     		.sleb128 -176
+ 44941 e78f 32       		.uleb128 0x32
+ 44942 e790 970E0000 		.long	0xe97
+ 44943 e794 03       		.byte	0x3
+ 44944 e795 91       		.byte	0x91
+ 44945 e796 E07E     		.sleb128 -160
+ 44946 e798 00       		.byte	0x0
+ 44947 e799 00       		.byte	0x0
+ 44948 e79a 00       		.byte	0x0
+ 44949 e79b 31       		.uleb128 0x31
+ 44950 e79c 860E0000 		.long	0xe86
+ 44951 e7a0 00000000 		.quad	.LBB4042
+ 44951      00000000 
+ 44952 e7a8 00000000 		.quad	.LBE4042
+ 44952      00000000 
+ 44953 e7b0 02       		.byte	0x2
+ 44954 e7b1 7604     		.value	0x476
+ 44955 e7b3 CAE70000 		.long	0xe7ca
+ 44956 e7b7 32       		.uleb128 0x32
+ 44957 e7b8 A10E0000 		.long	0xea1
+ 44958 e7bc 03       		.byte	0x3
+ 44959 e7bd 91       		.byte	0x91
+ 44960 e7be F07E     		.sleb128 -144
+ 44961 e7c0 32       		.uleb128 0x32
+ 44962 e7c1 970E0000 		.long	0xe97
+ 44963 e7c5 03       		.byte	0x3
+ 44964 e7c6 91       		.byte	0x91
+ 44965 e7c7 807F     		.sleb128 -128
+ 44966 e7c9 00       		.byte	0x0
+ 44967 e7ca 31       		.uleb128 0x31
+ 44968 e7cb 860E0000 		.long	0xe86
+ 44969 e7cf 00000000 		.quad	.LBB4044
+ 44969      00000000 
+ 44970 e7d7 00000000 		.quad	.LBE4044
+ 44970      00000000 
+ 44971 e7df 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1112
+
+
+ 44972 e7e0 7704     		.value	0x477
+ 44973 e7e2 F9E70000 		.long	0xe7f9
+ 44974 e7e6 32       		.uleb128 0x32
+ 44975 e7e7 A10E0000 		.long	0xea1
+ 44976 e7eb 03       		.byte	0x3
+ 44977 e7ec 91       		.byte	0x91
+ 44978 e7ed 907F     		.sleb128 -112
+ 44979 e7ef 32       		.uleb128 0x32
+ 44980 e7f0 970E0000 		.long	0xe97
+ 44981 e7f4 03       		.byte	0x3
+ 44982 e7f5 91       		.byte	0x91
+ 44983 e7f6 A07F     		.sleb128 -96
+ 44984 e7f8 00       		.byte	0x0
+ 44985 e7f9 35       		.uleb128 0x35
+ 44986 e7fa 860E0000 		.long	0xe86
+ 44987 e7fe 00000000 		.quad	.LBB4046
+ 44987      00000000 
+ 44988 e806 00000000 		.quad	.LBE4046
+ 44988      00000000 
+ 44989 e80e 02       		.byte	0x2
+ 44990 e80f 7804     		.value	0x478
+ 44991 e811 32       		.uleb128 0x32
+ 44992 e812 A10E0000 		.long	0xea1
+ 44993 e816 03       		.byte	0x3
+ 44994 e817 91       		.byte	0x91
+ 44995 e818 B07F     		.sleb128 -80
+ 44996 e81a 32       		.uleb128 0x32
+ 44997 e81b 970E0000 		.long	0xe97
+ 44998 e81f 02       		.byte	0x2
+ 44999 e820 91       		.byte	0x91
+ 45000 e821 40       		.sleb128 -64
+ 45001 e822 00       		.byte	0x0
+ 45002 e823 00       		.byte	0x0
+ 45003 e824 00       		.byte	0x0
+ 45004 e825 00       		.byte	0x0
+ 45005 e826 2D       		.uleb128 0x2d
+ 45006 e827 00000000 		.long	.LASF373
+ 45007 e82b 02       		.byte	0x2
+ 45008 e82c AC07     		.value	0x7ac
+ 45009 e82e 01       		.byte	0x1
+ 45010 e82f 00000000 		.quad	.LFB649
+ 45010      00000000 
+ 45011 e837 00000000 		.quad	.LFE649
+ 45011      00000000 
+ 45012 e83f 00000000 		.long	.LLST5
+ 45013 e843 63E80000 		.long	0xe863
+ 45014 e847 2F       		.uleb128 0x2f
+ 45015 e848 7700     		.string	"w"
+ 45016 e84a 02       		.byte	0x2
+ 45017 e84b AC07     		.value	0x7ac
+ 45018 e84d 24560000 		.long	0x5624
+ 45019 e851 02       		.byte	0x2
+ 45020 e852 91       		.byte	0x91
+ 45021 e853 68       		.sleb128 -24
+ 45022 e854 2F       		.uleb128 0x2f
+ 45023 e855 6B7700   		.string	"kw"
+ 45024 e858 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1113
+
+
+ 45025 e859 AC07     		.value	0x7ac
+ 45026 e85b 440D0000 		.long	0xd44
+ 45027 e85f 02       		.byte	0x2
+ 45028 e860 91       		.byte	0x91
+ 45029 e861 60       		.sleb128 -32
+ 45030 e862 00       		.byte	0x0
+ 45031 e863 2D       		.uleb128 0x2d
+ 45032 e864 00000000 		.long	.LASF374
+ 45033 e868 02       		.byte	0x2
+ 45034 e869 B307     		.value	0x7b3
+ 45035 e86b 01       		.byte	0x1
+ 45036 e86c 00000000 		.quad	.LFB650
+ 45036      00000000 
+ 45037 e874 00000000 		.quad	.LFE650
+ 45037      00000000 
+ 45038 e87c 00000000 		.long	.LLST6
+ 45039 e880 A0E80000 		.long	0xe8a0
+ 45040 e884 2F       		.uleb128 0x2f
+ 45041 e885 7700     		.string	"w"
+ 45042 e887 02       		.byte	0x2
+ 45043 e888 B307     		.value	0x7b3
+ 45044 e88a 24560000 		.long	0x5624
+ 45045 e88e 02       		.byte	0x2
+ 45046 e88f 91       		.byte	0x91
+ 45047 e890 68       		.sleb128 -24
+ 45048 e891 2F       		.uleb128 0x2f
+ 45049 e892 6B7700   		.string	"kw"
+ 45050 e895 02       		.byte	0x2
+ 45051 e896 B307     		.value	0x7b3
+ 45052 e898 440D0000 		.long	0xd44
+ 45053 e89c 02       		.byte	0x2
+ 45054 e89d 91       		.byte	0x91
+ 45055 e89e 60       		.sleb128 -32
+ 45056 e89f 00       		.byte	0x0
+ 45057 e8a0 2D       		.uleb128 0x2d
+ 45058 e8a1 00000000 		.long	.LASF375
+ 45059 e8a5 02       		.byte	0x2
+ 45060 e8a6 BA07     		.value	0x7ba
+ 45061 e8a8 01       		.byte	0x1
+ 45062 e8a9 00000000 		.quad	.LFB651
+ 45062      00000000 
+ 45063 e8b1 00000000 		.quad	.LFE651
+ 45063      00000000 
+ 45064 e8b9 00000000 		.long	.LLST7
+ 45065 e8bd DDE80000 		.long	0xe8dd
+ 45066 e8c1 2F       		.uleb128 0x2f
+ 45067 e8c2 7700     		.string	"w"
+ 45068 e8c4 02       		.byte	0x2
+ 45069 e8c5 BA07     		.value	0x7ba
+ 45070 e8c7 24560000 		.long	0x5624
+ 45071 e8cb 02       		.byte	0x2
+ 45072 e8cc 91       		.byte	0x91
+ 45073 e8cd 68       		.sleb128 -24
+ 45074 e8ce 2F       		.uleb128 0x2f
+ 45075 e8cf 6B7700   		.string	"kw"
+ 45076 e8d2 02       		.byte	0x2
+ 45077 e8d3 BA07     		.value	0x7ba
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1114
+
+
+ 45078 e8d5 440D0000 		.long	0xd44
+ 45079 e8d9 02       		.byte	0x2
+ 45080 e8da 91       		.byte	0x91
+ 45081 e8db 60       		.sleb128 -32
+ 45082 e8dc 00       		.byte	0x0
+ 45083 e8dd 25       		.uleb128 0x25
+ 45084 e8de 00000000 		.long	.LASF376
+ 45085 e8e2 02       		.byte	0x2
+ 45086 e8e3 C807     		.value	0x7c8
+ 45087 e8e5 01       		.byte	0x1
+ 45088 e8e6 B3010000 		.long	0x1b3
+ 45089 e8ea 03       		.byte	0x3
+ 45090 e8eb 34E90000 		.long	0xe934
+ 45091 e8ef 26       		.uleb128 0x26
+ 45092 e8f0 00000000 		.long	.LASF67
+ 45093 e8f4 02       		.byte	0x2
+ 45094 e8f5 C807     		.value	0x7c8
+ 45095 e8f7 B3010000 		.long	0x1b3
+ 45096 e8fb 26       		.uleb128 0x26
+ 45097 e8fc 00000000 		.long	.LASF65
+ 45098 e900 02       		.byte	0x2
+ 45099 e901 C807     		.value	0x7c8
+ 45100 e903 4A0D0000 		.long	0xd4a
+ 45101 e907 29       		.uleb128 0x29
+ 45102 e908 17E90000 		.long	0xe917
+ 45103 e90c 28       		.uleb128 0x28
+ 45104 e90d 7600     		.string	"v"
+ 45105 e90f 02       		.byte	0x2
+ 45106 e910 CA07     		.value	0x7ca
+ 45107 e912 29050000 		.long	0x529
+ 45108 e916 00       		.byte	0x0
+ 45109 e917 29       		.uleb128 0x29
+ 45110 e918 27E90000 		.long	0xe927
+ 45111 e91c 28       		.uleb128 0x28
+ 45112 e91d 7600     		.string	"v"
+ 45113 e91f 02       		.byte	0x2
+ 45114 e920 CC07     		.value	0x7cc
+ 45115 e922 29050000 		.long	0x529
+ 45116 e926 00       		.byte	0x0
+ 45117 e927 2A       		.uleb128 0x2a
+ 45118 e928 28       		.uleb128 0x28
+ 45119 e929 7600     		.string	"v"
+ 45120 e92b 02       		.byte	0x2
+ 45121 e92c D007     		.value	0x7d0
+ 45122 e92e 29050000 		.long	0x529
+ 45123 e932 00       		.byte	0x0
+ 45124 e933 00       		.byte	0x0
+ 45125 e934 25       		.uleb128 0x25
+ 45126 e935 00000000 		.long	.LASF377
+ 45127 e939 02       		.byte	0x2
+ 45128 e93a 2102     		.value	0x221
+ 45129 e93c 01       		.byte	0x1
+ 45130 e93d B3010000 		.long	0x1b3
+ 45131 e941 03       		.byte	0x3
+ 45132 e942 5FE90000 		.long	0xe95f
+ 45133 e946 26       		.uleb128 0x26
+ 45134 e947 00000000 		.long	.LASF67
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1115
+
+
+ 45135 e94b 02       		.byte	0x2
+ 45136 e94c 2102     		.value	0x221
+ 45137 e94e B3010000 		.long	0x1b3
+ 45138 e952 26       		.uleb128 0x26
+ 45139 e953 00000000 		.long	.LASF378
+ 45140 e957 02       		.byte	0x2
+ 45141 e958 2102     		.value	0x221
+ 45142 e95a B3010000 		.long	0x1b3
+ 45143 e95e 00       		.byte	0x0
+ 45144 e95f 25       		.uleb128 0x25
+ 45145 e960 00000000 		.long	.LASF379
+ 45146 e964 02       		.byte	0x2
+ 45147 e965 DC07     		.value	0x7dc
+ 45148 e967 01       		.byte	0x1
+ 45149 e968 B3010000 		.long	0x1b3
+ 45150 e96c 03       		.byte	0x3
+ 45151 e96d FEE90000 		.long	0xe9fe
+ 45152 e971 26       		.uleb128 0x26
+ 45153 e972 00000000 		.long	.LASF67
+ 45154 e976 02       		.byte	0x2
+ 45155 e977 DC07     		.value	0x7dc
+ 45156 e979 B3010000 		.long	0x1b3
+ 45157 e97d 26       		.uleb128 0x26
+ 45158 e97e 00000000 		.long	.LASF65
+ 45159 e982 02       		.byte	0x2
+ 45160 e983 DD07     		.value	0x7dd
+ 45161 e985 4A0D0000 		.long	0xd4a
+ 45162 e989 27       		.uleb128 0x27
+ 45163 e98a 00000000 		.long	.LASF380
+ 45164 e98e 02       		.byte	0x2
+ 45165 e98f E007     		.value	0x7e0
+ 45166 e991 B3010000 		.long	0x1b3
+ 45167 e995 27       		.uleb128 0x27
+ 45168 e996 00000000 		.long	.LASF381
+ 45169 e99a 02       		.byte	0x2
+ 45170 e99b E107     		.value	0x7e1
+ 45171 e99d B3010000 		.long	0x1b3
+ 45172 e9a1 29       		.uleb128 0x29
+ 45173 e9a2 B1E90000 		.long	0xe9b1
+ 45174 e9a6 28       		.uleb128 0x28
+ 45175 e9a7 7600     		.string	"v"
+ 45176 e9a9 02       		.byte	0x2
+ 45177 e9aa E607     		.value	0x7e6
+ 45178 e9ac 29050000 		.long	0x529
+ 45179 e9b0 00       		.byte	0x0
+ 45180 e9b1 29       		.uleb128 0x29
+ 45181 e9b2 C1E90000 		.long	0xe9c1
+ 45182 e9b6 28       		.uleb128 0x28
+ 45183 e9b7 7600     		.string	"v"
+ 45184 e9b9 02       		.byte	0x2
+ 45185 e9ba EF07     		.value	0x7ef
+ 45186 e9bc 29050000 		.long	0x529
+ 45187 e9c0 00       		.byte	0x0
+ 45188 e9c1 29       		.uleb128 0x29
+ 45189 e9c2 D1E90000 		.long	0xe9d1
+ 45190 e9c6 28       		.uleb128 0x28
+ 45191 e9c7 7600     		.string	"v"
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1116
+
+
+ 45192 e9c9 02       		.byte	0x2
+ 45193 e9ca F307     		.value	0x7f3
+ 45194 e9cc 29050000 		.long	0x529
+ 45195 e9d0 00       		.byte	0x0
+ 45196 e9d1 29       		.uleb128 0x29
+ 45197 e9d2 E1E90000 		.long	0xe9e1
+ 45198 e9d6 28       		.uleb128 0x28
+ 45199 e9d7 7600     		.string	"v"
+ 45200 e9d9 02       		.byte	0x2
+ 45201 e9da F807     		.value	0x7f8
+ 45202 e9dc 29050000 		.long	0x529
+ 45203 e9e0 00       		.byte	0x0
+ 45204 e9e1 29       		.uleb128 0x29
+ 45205 e9e2 F1E90000 		.long	0xe9f1
+ 45206 e9e6 28       		.uleb128 0x28
+ 45207 e9e7 7600     		.string	"v"
+ 45208 e9e9 02       		.byte	0x2
+ 45209 e9ea FC07     		.value	0x7fc
+ 45210 e9ec 29050000 		.long	0x529
+ 45211 e9f0 00       		.byte	0x0
+ 45212 e9f1 2A       		.uleb128 0x2a
+ 45213 e9f2 28       		.uleb128 0x28
+ 45214 e9f3 7600     		.string	"v"
+ 45215 e9f5 02       		.byte	0x2
+ 45216 e9f6 FD07     		.value	0x7fd
+ 45217 e9f8 29050000 		.long	0x529
+ 45218 e9fc 00       		.byte	0x0
+ 45219 e9fd 00       		.byte	0x0
+ 45220 e9fe 25       		.uleb128 0x25
+ 45221 e9ff 00000000 		.long	.LASF382
+ 45222 ea03 02       		.byte	0x2
+ 45223 ea04 3E02     		.value	0x23e
+ 45224 ea06 01       		.byte	0x1
+ 45225 ea07 B3010000 		.long	0x1b3
+ 45226 ea0b 03       		.byte	0x3
+ 45227 ea0c 3AEA0000 		.long	0xea3a
+ 45228 ea10 26       		.uleb128 0x26
+ 45229 ea11 00000000 		.long	.LASF67
+ 45230 ea15 02       		.byte	0x2
+ 45231 ea16 3E02     		.value	0x23e
+ 45232 ea18 B3010000 		.long	0x1b3
+ 45233 ea1c 2C       		.uleb128 0x2c
+ 45234 ea1d 00000000 		.long	.LASF340
+ 45235 ea21 02       		.byte	0x2
+ 45236 ea22 4102     		.value	0x241
+ 45237 ea24 4A0D0000 		.long	0xd4a
+ 45238 ea28 10       		.byte	0x10
+ 45239 ea29 00       		.byte	0x0
+ 45240 ea2a 05       		.byte	0x5
+ 45241 ea2b 0A       		.byte	0xa
+ 45242 ea2c 0F       		.byte	0xf
+ 45243 ea2d 04       		.byte	0x4
+ 45244 ea2e 09       		.byte	0x9
+ 45245 ea2f 0E       		.byte	0xe
+ 45246 ea30 03       		.byte	0x3
+ 45247 ea31 08       		.byte	0x8
+ 45248 ea32 0D       		.byte	0xd
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1117
+
+
+ 45249 ea33 02       		.byte	0x2
+ 45250 ea34 07       		.byte	0x7
+ 45251 ea35 0C       		.byte	0xc
+ 45252 ea36 01       		.byte	0x1
+ 45253 ea37 06       		.byte	0x6
+ 45254 ea38 0B       		.byte	0xb
+ 45255 ea39 00       		.byte	0x0
+ 45256 ea3a 25       		.uleb128 0x25
+ 45257 ea3b 00000000 		.long	.LASF383
+ 45258 ea3f 02       		.byte	0x2
+ 45259 ea40 1304     		.value	0x413
+ 45260 ea42 01       		.byte	0x1
+ 45261 ea43 B3010000 		.long	0x1b3
+ 45262 ea47 03       		.byte	0x3
+ 45263 ea48 85EA0000 		.long	0xea85
+ 45264 ea4c 26       		.uleb128 0x26
+ 45265 ea4d 00000000 		.long	.LASF67
+ 45266 ea51 02       		.byte	0x2
+ 45267 ea52 1304     		.value	0x413
+ 45268 ea54 B3010000 		.long	0x1b3
+ 45269 ea58 28       		.uleb128 0x28
+ 45270 ea59 633000   		.string	"c0"
+ 45271 ea5c 02       		.byte	0x2
+ 45272 ea5d 1504     		.value	0x415
+ 45273 ea5f B3010000 		.long	0x1b3
+ 45274 ea63 28       		.uleb128 0x28
+ 45275 ea64 633100   		.string	"c1"
+ 45276 ea67 02       		.byte	0x2
+ 45277 ea68 1504     		.value	0x415
+ 45278 ea6a B3010000 		.long	0x1b3
+ 45279 ea6e 28       		.uleb128 0x28
+ 45280 ea6f 633200   		.string	"c2"
+ 45281 ea72 02       		.byte	0x2
+ 45282 ea73 1504     		.value	0x415
+ 45283 ea75 B3010000 		.long	0x1b3
+ 45284 ea79 28       		.uleb128 0x28
+ 45285 ea7a 633300   		.string	"c3"
+ 45286 ea7d 02       		.byte	0x2
+ 45287 ea7e 1504     		.value	0x415
+ 45288 ea80 B3010000 		.long	0x1b3
+ 45289 ea84 00       		.byte	0x0
+ 45290 ea85 25       		.uleb128 0x25
+ 45291 ea86 00000000 		.long	.LASF384
+ 45292 ea8a 02       		.byte	0x2
+ 45293 ea8b B403     		.value	0x3b4
+ 45294 ea8d 01       		.byte	0x1
+ 45295 ea8e B3010000 		.long	0x1b3
+ 45296 ea92 03       		.byte	0x3
+ 45297 ea93 C0EA0000 		.long	0xeac0
+ 45298 ea97 26       		.uleb128 0x26
+ 45299 ea98 00000000 		.long	.LASF67
+ 45300 ea9c 02       		.byte	0x2
+ 45301 ea9d B403     		.value	0x3b4
+ 45302 ea9f B3010000 		.long	0x1b3
+ 45303 eaa3 29       		.uleb128 0x29
+ 45304 eaa4 B3EA0000 		.long	0xeab3
+ 45305 eaa8 28       		.uleb128 0x28
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1118
+
+
+ 45306 eaa9 7600     		.string	"v"
+ 45307 eaab 02       		.byte	0x2
+ 45308 eaac B603     		.value	0x3b6
+ 45309 eaae 29050000 		.long	0x529
+ 45310 eab2 00       		.byte	0x0
+ 45311 eab3 2A       		.uleb128 0x2a
+ 45312 eab4 28       		.uleb128 0x28
+ 45313 eab5 7600     		.string	"v"
+ 45314 eab7 02       		.byte	0x2
+ 45315 eab8 B903     		.value	0x3b9
+ 45316 eaba 29050000 		.long	0x529
+ 45317 eabe 00       		.byte	0x0
+ 45318 eabf 00       		.byte	0x0
+ 45319 eac0 25       		.uleb128 0x25
+ 45320 eac1 00000000 		.long	.LASF385
+ 45321 eac5 02       		.byte	0x2
+ 45322 eac6 0808     		.value	0x808
+ 45323 eac8 01       		.byte	0x1
+ 45324 eac9 B3010000 		.long	0x1b3
+ 45325 eacd 03       		.byte	0x3
+ 45326 eace 37EB0000 		.long	0xeb37
+ 45327 ead2 26       		.uleb128 0x26
+ 45328 ead3 00000000 		.long	.LASF67
+ 45329 ead7 02       		.byte	0x2
+ 45330 ead8 0808     		.value	0x808
+ 45331 eada B3010000 		.long	0x1b3
+ 45332 eade 26       		.uleb128 0x26
+ 45333 eadf 00000000 		.long	.LASF65
+ 45334 eae3 02       		.byte	0x2
+ 45335 eae4 0808     		.value	0x808
+ 45336 eae6 B3010000 		.long	0x1b3
+ 45337 eaea 29       		.uleb128 0x29
+ 45338 eaeb FAEA0000 		.long	0xeafa
+ 45339 eaef 28       		.uleb128 0x28
+ 45340 eaf0 7600     		.string	"v"
+ 45341 eaf2 02       		.byte	0x2
+ 45342 eaf3 0A08     		.value	0x80a
+ 45343 eaf5 29050000 		.long	0x529
+ 45344 eaf9 00       		.byte	0x0
+ 45345 eafa 29       		.uleb128 0x29
+ 45346 eafb 0AEB0000 		.long	0xeb0a
+ 45347 eaff 28       		.uleb128 0x28
+ 45348 eb00 7600     		.string	"v"
+ 45349 eb02 02       		.byte	0x2
+ 45350 eb03 1108     		.value	0x811
+ 45351 eb05 29050000 		.long	0x529
+ 45352 eb09 00       		.byte	0x0
+ 45353 eb0a 29       		.uleb128 0x29
+ 45354 eb0b 1AEB0000 		.long	0xeb1a
+ 45355 eb0f 28       		.uleb128 0x28
+ 45356 eb10 7600     		.string	"v"
+ 45357 eb12 02       		.byte	0x2
+ 45358 eb13 1508     		.value	0x815
+ 45359 eb15 29050000 		.long	0x529
+ 45360 eb19 00       		.byte	0x0
+ 45361 eb1a 29       		.uleb128 0x29
+ 45362 eb1b 2AEB0000 		.long	0xeb2a
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1119
+
+
+ 45363 eb1f 28       		.uleb128 0x28
+ 45364 eb20 7600     		.string	"v"
+ 45365 eb22 02       		.byte	0x2
+ 45366 eb23 1908     		.value	0x819
+ 45367 eb25 29050000 		.long	0x529
+ 45368 eb29 00       		.byte	0x0
+ 45369 eb2a 2A       		.uleb128 0x2a
+ 45370 eb2b 28       		.uleb128 0x28
+ 45371 eb2c 7600     		.string	"v"
+ 45372 eb2e 02       		.byte	0x2
+ 45373 eb2f 1A08     		.value	0x81a
+ 45374 eb31 29050000 		.long	0x529
+ 45375 eb35 00       		.byte	0x0
+ 45376 eb36 00       		.byte	0x0
+ 45377 eb37 39       		.uleb128 0x39
+ 45378 eb38 00000000 		.long	.LASF387
+ 45379 eb3c 02       		.byte	0x2
+ 45380 eb3d 2C08     		.value	0x82c
+ 45381 eb3f 01       		.byte	0x1
+ 45382 eb40 B3010000 		.long	0x1b3
+ 45383 eb44 00000000 		.quad	.LFB655
+ 45383      00000000 
+ 45384 eb4c 00000000 		.quad	.LFE655
+ 45384      00000000 
+ 45385 eb54 00000000 		.long	.LLST8
+ 45386 eb58 42FB0000 		.long	0xfb42
+ 45387 eb5c 2E       		.uleb128 0x2e
+ 45388 eb5d 00000000 		.long	.LASF67
+ 45389 eb61 02       		.byte	0x2
+ 45390 eb62 2C08     		.value	0x82c
+ 45391 eb64 B3010000 		.long	0x1b3
+ 45392 eb68 03       		.byte	0x3
+ 45393 eb69 91       		.byte	0x91
+ 45394 eb6a E06B     		.sleb128 -2592
+ 45395 eb6c 2F       		.uleb128 0x2f
+ 45396 eb6d 6B657900 		.string	"key"
+ 45397 eb71 02       		.byte	0x2
+ 45398 eb72 2C08     		.value	0x82c
+ 45399 eb74 440D0000 		.long	0xd44
+ 45400 eb78 03       		.byte	0x3
+ 45401 eb79 91       		.byte	0x91
+ 45402 eb7a D86B     		.sleb128 -2600
+ 45403 eb7c 2F       		.uleb128 0x2f
+ 45404 eb7d 4E7200   		.string	"Nr"
+ 45405 eb80 02       		.byte	0x2
+ 45406 eb81 2D08     		.value	0x82d
+ 45407 eb83 78000000 		.long	0x78
+ 45408 eb87 03       		.byte	0x3
+ 45409 eb88 91       		.byte	0x91
+ 45410 eb89 D46B     		.sleb128 -2604
+ 45411 eb8b 37       		.uleb128 0x37
+ 45412 eb8c 697800   		.string	"ix"
+ 45413 eb8f 02       		.byte	0x2
+ 45414 eb90 2F08     		.value	0x82f
+ 45415 eb92 78000000 		.long	0x78
+ 45416 eb96 03       		.byte	0x3
+ 45417 eb97 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1120
+
+
+ 45418 eb98 AC6E     		.sleb128 -2260
+ 45419 eb9a 31       		.uleb128 0x31
+ 45420 eb9b DDE80000 		.long	0xe8dd
+ 45421 eb9f 00000000 		.quad	.LBB4199
+ 45421      00000000 
+ 45422 eba7 00000000 		.quad	.LBE4199
+ 45422      00000000 
+ 45423 ebaf 02       		.byte	0x2
+ 45424 ebb0 3108     		.value	0x831
+ 45425 ebb2 7CEC0000 		.long	0xec7c
+ 45426 ebb6 32       		.uleb128 0x32
+ 45427 ebb7 FBE80000 		.long	0xe8fb
+ 45428 ebbb 03       		.byte	0x3
+ 45429 ebbc 91       		.byte	0x91
+ 45430 ebbd B06E     		.sleb128 -2256
+ 45431 ebbf 32       		.uleb128 0x32
+ 45432 ebc0 EFE80000 		.long	0xe8ef
+ 45433 ebc4 03       		.byte	0x3
+ 45434 ebc5 91       		.byte	0x91
+ 45435 ebc6 C06E     		.sleb128 -2240
+ 45436 ebc8 36       		.uleb128 0x36
+ 45437 ebc9 00000000 		.quad	.LBB4201
+ 45437      00000000 
+ 45438 ebd1 00000000 		.quad	.LBE4201
+ 45438      00000000 
+ 45439 ebd9 E7EB0000 		.long	0xebe7
+ 45440 ebdd 34       		.uleb128 0x34
+ 45441 ebde 0CE90000 		.long	0xe90c
+ 45442 ebe2 03       		.byte	0x3
+ 45443 ebe3 91       		.byte	0x91
+ 45444 ebe4 906C     		.sleb128 -2544
+ 45445 ebe6 00       		.byte	0x0
+ 45446 ebe7 36       		.uleb128 0x36
+ 45447 ebe8 00000000 		.quad	.LBB4202
+ 45447      00000000 
+ 45448 ebf0 00000000 		.quad	.LBE4202
+ 45448      00000000 
+ 45449 ebf8 06EC0000 		.long	0xec06
+ 45450 ebfc 34       		.uleb128 0x34
+ 45451 ebfd 1CE90000 		.long	0xe91c
+ 45452 ec01 03       		.byte	0x3
+ 45453 ec02 91       		.byte	0x91
+ 45454 ec03 806C     		.sleb128 -2560
+ 45455 ec05 00       		.byte	0x0
+ 45456 ec06 31       		.uleb128 0x31
+ 45457 ec07 34E90000 		.long	0xe934
+ 45458 ec0b 00000000 		.quad	.LBB4203
+ 45458      00000000 
+ 45459 ec13 00000000 		.quad	.LBE4203
+ 45459      00000000 
+ 45460 ec1b 02       		.byte	0x2
+ 45461 ec1c CE07     		.value	0x7ce
+ 45462 ec1e 60EC0000 		.long	0xec60
+ 45463 ec22 32       		.uleb128 0x32
+ 45464 ec23 52E90000 		.long	0xe952
+ 45465 ec27 03       		.byte	0x3
+ 45466 ec28 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1121
+
+
+ 45467 ec29 D06E     		.sleb128 -2224
+ 45468 ec2b 32       		.uleb128 0x32
+ 45469 ec2c 46E90000 		.long	0xe946
+ 45470 ec30 03       		.byte	0x3
+ 45471 ec31 91       		.byte	0x91
+ 45472 ec32 E06E     		.sleb128 -2208
+ 45473 ec34 35       		.uleb128 0x35
+ 45474 ec35 860E0000 		.long	0xe86
+ 45475 ec39 00000000 		.quad	.LBB4205
+ 45475      00000000 
+ 45476 ec41 00000000 		.quad	.LBE4205
+ 45476      00000000 
+ 45477 ec49 02       		.byte	0x2
+ 45478 ec4a 2302     		.value	0x223
+ 45479 ec4c 32       		.uleb128 0x32
+ 45480 ec4d A10E0000 		.long	0xea1
+ 45481 ec51 03       		.byte	0x3
+ 45482 ec52 91       		.byte	0x91
+ 45483 ec53 F06E     		.sleb128 -2192
+ 45484 ec55 32       		.uleb128 0x32
+ 45485 ec56 970E0000 		.long	0xe97
+ 45486 ec5a 03       		.byte	0x3
+ 45487 ec5b 91       		.byte	0x91
+ 45488 ec5c 806F     		.sleb128 -2176
+ 45489 ec5e 00       		.byte	0x0
+ 45490 ec5f 00       		.byte	0x0
+ 45491 ec60 33       		.uleb128 0x33
+ 45492 ec61 00000000 		.quad	.LBB4207
+ 45492      00000000 
+ 45493 ec69 00000000 		.quad	.LBE4207
+ 45493      00000000 
+ 45494 ec71 34       		.uleb128 0x34
+ 45495 ec72 28E90000 		.long	0xe928
+ 45496 ec76 03       		.byte	0x3
+ 45497 ec77 91       		.byte	0x91
+ 45498 ec78 F06B     		.sleb128 -2576
+ 45499 ec7a 00       		.byte	0x0
+ 45500 ec7b 00       		.byte	0x0
+ 45501 ec7c 31       		.uleb128 0x31
+ 45502 ec7d 5FE90000 		.long	0xe95f
+ 45503 ec81 00000000 		.quad	.LBB4208
+ 45503      00000000 
+ 45504 ec89 00000000 		.quad	.LBE4208
+ 45504      00000000 
+ 45505 ec91 02       		.byte	0x2
+ 45506 ec92 3408     		.value	0x834
+ 45507 ec94 00F70000 		.long	0xf700
+ 45508 ec98 32       		.uleb128 0x32
+ 45509 ec99 7DE90000 		.long	0xe97d
+ 45510 ec9d 03       		.byte	0x3
+ 45511 ec9e 91       		.byte	0x91
+ 45512 ec9f 906F     		.sleb128 -2160
+ 45513 eca1 32       		.uleb128 0x32
+ 45514 eca2 71E90000 		.long	0xe971
+ 45515 eca6 03       		.byte	0x3
+ 45516 eca7 91       		.byte	0x91
+ 45517 eca8 A06F     		.sleb128 -2144
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1122
+
+
+ 45518 ecaa 33       		.uleb128 0x33
+ 45519 ecab 00000000 		.quad	.LBB4209
+ 45519      00000000 
+ 45520 ecb3 00000000 		.quad	.LBE4209
+ 45520      00000000 
+ 45521 ecbb 34       		.uleb128 0x34
+ 45522 ecbc 89E90000 		.long	0xe989
+ 45523 ecc0 03       		.byte	0x3
+ 45524 ecc1 91       		.byte	0x91
+ 45525 ecc2 C06F     		.sleb128 -2112
+ 45526 ecc4 34       		.uleb128 0x34
+ 45527 ecc5 95E90000 		.long	0xe995
+ 45528 ecc9 03       		.byte	0x3
+ 45529 ecca 91       		.byte	0x91
+ 45530 eccb B06F     		.sleb128 -2128
+ 45531 eccd 36       		.uleb128 0x36
+ 45532 ecce 00000000 		.quad	.LBB4210
+ 45532      00000000 
+ 45533 ecd6 00000000 		.quad	.LBE4210
+ 45533      00000000 
+ 45534 ecde ECEC0000 		.long	0xecec
+ 45535 ece2 34       		.uleb128 0x34
+ 45536 ece3 A6E90000 		.long	0xe9a6
+ 45537 ece7 03       		.byte	0x3
+ 45538 ece8 91       		.byte	0x91
+ 45539 ece9 F06C     		.sleb128 -2448
+ 45540 eceb 00       		.byte	0x0
+ 45541 ecec 31       		.uleb128 0x31
+ 45542 eced C10C0000 		.long	0xcc1
+ 45543 ecf1 00000000 		.quad	.LBB4211
+ 45543      00000000 
+ 45544 ecf9 00000000 		.quad	.LBE4211
+ 45544      00000000 
+ 45545 ed01 02       		.byte	0x2
+ 45546 ed02 ED07     		.value	0x7ed
+ 45547 ed04 75EF0000 		.long	0xef75
+ 45548 ed08 32       		.uleb128 0x32
+ 45549 ed09 D30C0000 		.long	0xcd3
+ 45550 ed0d 03       		.byte	0x3
+ 45551 ed0e 91       		.byte	0x91
+ 45552 ed0f D06F     		.sleb128 -2096
+ 45553 ed11 35       		.uleb128 0x35
+ 45554 ed12 E00C0000 		.long	0xce0
+ 45555 ed16 00000000 		.quad	.LBB4213
+ 45555      00000000 
+ 45556 ed1e 00000000 		.quad	.LBE4213
+ 45556      00000000 
+ 45557 ed26 02       		.byte	0x2
+ 45558 ed27 7D03     		.value	0x37d
+ 45559 ed29 32       		.uleb128 0x32
+ 45560 ed2a FE0C0000 		.long	0xcfe
+ 45561 ed2e 03       		.byte	0x3
+ 45562 ed2f 91       		.byte	0x91
+ 45563 ed30 E86F     		.sleb128 -2072
+ 45564 ed32 32       		.uleb128 0x32
+ 45565 ed33 F20C0000 		.long	0xcf2
+ 45566 ed37 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1123
+
+
+ 45567 ed38 91       		.byte	0x91
+ 45568 ed39 F06F     		.sleb128 -2064
+ 45569 ed3b 33       		.uleb128 0x33
+ 45570 ed3c 00000000 		.quad	.LBB4214
+ 45570      00000000 
+ 45571 ed44 00000000 		.quad	.LBE4214
+ 45571      00000000 
+ 45572 ed4c 34       		.uleb128 0x34
+ 45573 ed4d 0A0D0000 		.long	0xd0a
+ 45574 ed51 03       		.byte	0x3
+ 45575 ed52 91       		.byte	0x91
+ 45576 ed53 C070     		.sleb128 -1984
+ 45577 ed55 34       		.uleb128 0x34
+ 45578 ed56 150D0000 		.long	0xd15
+ 45579 ed5a 03       		.byte	0x3
+ 45580 ed5b 91       		.byte	0x91
+ 45581 ed5c B070     		.sleb128 -2000
+ 45582 ed5e 34       		.uleb128 0x34
+ 45583 ed5f 200D0000 		.long	0xd20
+ 45584 ed63 03       		.byte	0x3
+ 45585 ed64 91       		.byte	0x91
+ 45586 ed65 A070     		.sleb128 -2016
+ 45587 ed67 34       		.uleb128 0x34
+ 45588 ed68 2C0D0000 		.long	0xd2c
+ 45589 ed6c 03       		.byte	0x3
+ 45590 ed6d 91       		.byte	0x91
+ 45591 ed6e 9070     		.sleb128 -2032
+ 45592 ed70 34       		.uleb128 0x34
+ 45593 ed71 380D0000 		.long	0xd38
+ 45594 ed75 03       		.byte	0x3
+ 45595 ed76 91       		.byte	0x91
+ 45596 ed77 8C70     		.sleb128 -2036
+ 45597 ed79 31       		.uleb128 0x31
+ 45598 ed7a 4F0D0000 		.long	0xd4f
+ 45599 ed7e 00000000 		.quad	.LBB4215
+ 45599      00000000 
+ 45600 ed86 00000000 		.quad	.LBE4215
+ 45600      00000000 
+ 45601 ed8e 02       		.byte	0x2
+ 45602 ed8f 5603     		.value	0x356
+ 45603 ed91 A8ED0000 		.long	0xeda8
+ 45604 ed95 32       		.uleb128 0x32
+ 45605 ed96 6A0D0000 		.long	0xd6a
+ 45606 ed9a 03       		.byte	0x3
+ 45607 ed9b 91       		.byte	0x91
+ 45608 ed9c D070     		.sleb128 -1968
+ 45609 ed9e 32       		.uleb128 0x32
+ 45610 ed9f 600D0000 		.long	0xd60
+ 45611 eda3 03       		.byte	0x3
+ 45612 eda4 91       		.byte	0x91
+ 45613 eda5 E070     		.sleb128 -1952
+ 45614 eda7 00       		.byte	0x0
+ 45615 eda8 31       		.uleb128 0x31
+ 45616 eda9 750D0000 		.long	0xd75
+ 45617 edad 00000000 		.quad	.LBB4217
+ 45617      00000000 
+ 45618 edb5 00000000 		.quad	.LBE4217
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1124
+
+
+ 45618      00000000 
+ 45619 edbd 02       		.byte	0x2
+ 45620 edbe 5903     		.value	0x359
+ 45621 edc0 D7ED0000 		.long	0xedd7
+ 45622 edc4 32       		.uleb128 0x32
+ 45623 edc5 930D0000 		.long	0xd93
+ 45624 edc9 03       		.byte	0x3
+ 45625 edca 91       		.byte	0x91
+ 45626 edcb FC70     		.sleb128 -1924
+ 45627 edcd 32       		.uleb128 0x32
+ 45628 edce 870D0000 		.long	0xd87
+ 45629 edd2 03       		.byte	0x3
+ 45630 edd3 91       		.byte	0x91
+ 45631 edd4 8071     		.sleb128 -1920
+ 45632 edd6 00       		.byte	0x0
+ 45633 edd7 31       		.uleb128 0x31
+ 45634 edd8 4F0D0000 		.long	0xd4f
+ 45635 eddc 00000000 		.quad	.LBB4219
+ 45635      00000000 
+ 45636 ede4 00000000 		.quad	.LBE4219
+ 45636      00000000 
+ 45637 edec 02       		.byte	0x2
+ 45638 eded 5B03     		.value	0x35b
+ 45639 edef 06EE0000 		.long	0xee06
+ 45640 edf3 32       		.uleb128 0x32
+ 45641 edf4 6A0D0000 		.long	0xd6a
+ 45642 edf8 03       		.byte	0x3
+ 45643 edf9 91       		.byte	0x91
+ 45644 edfa 9071     		.sleb128 -1904
+ 45645 edfc 32       		.uleb128 0x32
+ 45646 edfd 600D0000 		.long	0xd60
+ 45647 ee01 03       		.byte	0x3
+ 45648 ee02 91       		.byte	0x91
+ 45649 ee03 A071     		.sleb128 -1888
+ 45650 ee05 00       		.byte	0x0
+ 45651 ee06 31       		.uleb128 0x31
+ 45652 ee07 A00D0000 		.long	0xda0
+ 45653 ee0b 00000000 		.quad	.LBB4221
+ 45653      00000000 
+ 45654 ee13 00000000 		.quad	.LBE4221
+ 45654      00000000 
+ 45655 ee1b 02       		.byte	0x2
+ 45656 ee1c 6403     		.value	0x364
+ 45657 ee1e 60EE0000 		.long	0xee60
+ 45658 ee22 32       		.uleb128 0x32
+ 45659 ee23 BE0D0000 		.long	0xdbe
+ 45660 ee27 03       		.byte	0x3
+ 45661 ee28 91       		.byte	0x91
+ 45662 ee29 B071     		.sleb128 -1872
+ 45663 ee2b 32       		.uleb128 0x32
+ 45664 ee2c B20D0000 		.long	0xdb2
+ 45665 ee30 03       		.byte	0x3
+ 45666 ee31 91       		.byte	0x91
+ 45667 ee32 C071     		.sleb128 -1856
+ 45668 ee34 35       		.uleb128 0x35
+ 45669 ee35 CB0D0000 		.long	0xdcb
+ 45670 ee39 00000000 		.quad	.LBB4223
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1125
+
+
+ 45670      00000000 
+ 45671 ee41 00000000 		.quad	.LBE4223
+ 45671      00000000 
+ 45672 ee49 02       		.byte	0x2
+ 45673 ee4a 7501     		.value	0x175
+ 45674 ee4c 32       		.uleb128 0x32
+ 45675 ee4d E90D0000 		.long	0xde9
+ 45676 ee51 03       		.byte	0x3
+ 45677 ee52 91       		.byte	0x91
+ 45678 ee53 D071     		.sleb128 -1840
+ 45679 ee55 32       		.uleb128 0x32
+ 45680 ee56 DD0D0000 		.long	0xddd
+ 45681 ee5a 03       		.byte	0x3
+ 45682 ee5b 91       		.byte	0x91
+ 45683 ee5c E071     		.sleb128 -1824
+ 45684 ee5e 00       		.byte	0x0
+ 45685 ee5f 00       		.byte	0x0
+ 45686 ee60 31       		.uleb128 0x31
+ 45687 ee61 FB0D0000 		.long	0xdfb
+ 45688 ee65 00000000 		.quad	.LBB4225
+ 45688      00000000 
+ 45689 ee6d 00000000 		.quad	.LBE4225
+ 45689      00000000 
+ 45690 ee75 02       		.byte	0x2
+ 45691 ee76 6603     		.value	0x366
+ 45692 ee78 8FEE0000 		.long	0xee8f
+ 45693 ee7c 32       		.uleb128 0x32
+ 45694 ee7d 160E0000 		.long	0xe16
+ 45695 ee81 03       		.byte	0x3
+ 45696 ee82 91       		.byte	0x91
+ 45697 ee83 F071     		.sleb128 -1808
+ 45698 ee85 32       		.uleb128 0x32
+ 45699 ee86 0C0E0000 		.long	0xe0c
+ 45700 ee8a 03       		.byte	0x3
+ 45701 ee8b 91       		.byte	0x91
+ 45702 ee8c 8072     		.sleb128 -1792
+ 45703 ee8e 00       		.byte	0x0
+ 45704 ee8f 31       		.uleb128 0x31
+ 45705 ee90 A00D0000 		.long	0xda0
+ 45706 ee94 00000000 		.quad	.LBB4227
+ 45706      00000000 
+ 45707 ee9c 00000000 		.quad	.LBE4227
+ 45707      00000000 
+ 45708 eea4 02       		.byte	0x2
+ 45709 eea5 6803     		.value	0x368
+ 45710 eea7 E9EE0000 		.long	0xeee9
+ 45711 eeab 32       		.uleb128 0x32
+ 45712 eeac BE0D0000 		.long	0xdbe
+ 45713 eeb0 03       		.byte	0x3
+ 45714 eeb1 91       		.byte	0x91
+ 45715 eeb2 9072     		.sleb128 -1776
+ 45716 eeb4 32       		.uleb128 0x32
+ 45717 eeb5 B20D0000 		.long	0xdb2
+ 45718 eeb9 03       		.byte	0x3
+ 45719 eeba 91       		.byte	0x91
+ 45720 eebb A072     		.sleb128 -1760
+ 45721 eebd 35       		.uleb128 0x35
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1126
+
+
+ 45722 eebe CB0D0000 		.long	0xdcb
+ 45723 eec2 00000000 		.quad	.LBB4229
+ 45723      00000000 
+ 45724 eeca 00000000 		.quad	.LBE4229
+ 45724      00000000 
+ 45725 eed2 02       		.byte	0x2
+ 45726 eed3 7501     		.value	0x175
+ 45727 eed5 32       		.uleb128 0x32
+ 45728 eed6 E90D0000 		.long	0xde9
+ 45729 eeda 03       		.byte	0x3
+ 45730 eedb 91       		.byte	0x91
+ 45731 eedc B072     		.sleb128 -1744
+ 45732 eede 32       		.uleb128 0x32
+ 45733 eedf DD0D0000 		.long	0xddd
+ 45734 eee3 03       		.byte	0x3
+ 45735 eee4 91       		.byte	0x91
+ 45736 eee5 C072     		.sleb128 -1728
+ 45737 eee7 00       		.byte	0x0
+ 45738 eee8 00       		.byte	0x0
+ 45739 eee9 31       		.uleb128 0x31
+ 45740 eeea FB0D0000 		.long	0xdfb
+ 45741 eeee 00000000 		.quad	.LBB4231
+ 45741      00000000 
+ 45742 eef6 00000000 		.quad	.LBE4231
+ 45742      00000000 
+ 45743 eefe 02       		.byte	0x2
+ 45744 eeff 6A03     		.value	0x36a
+ 45745 ef01 18EF0000 		.long	0xef18
+ 45746 ef05 32       		.uleb128 0x32
+ 45747 ef06 160E0000 		.long	0xe16
+ 45748 ef0a 03       		.byte	0x3
+ 45749 ef0b 91       		.byte	0x91
+ 45750 ef0c D072     		.sleb128 -1712
+ 45751 ef0e 32       		.uleb128 0x32
+ 45752 ef0f 0C0E0000 		.long	0xe0c
+ 45753 ef13 03       		.byte	0x3
+ 45754 ef14 91       		.byte	0x91
+ 45755 ef15 E072     		.sleb128 -1696
+ 45756 ef17 00       		.byte	0x0
+ 45757 ef18 31       		.uleb128 0x31
+ 45758 ef19 210E0000 		.long	0xe21
+ 45759 ef1d 00000000 		.quad	.LBB4233
+ 45759      00000000 
+ 45760 ef25 00000000 		.quad	.LBE4233
+ 45760      00000000 
+ 45761 ef2d 02       		.byte	0x2
+ 45762 ef2e 6C03     		.value	0x36c
+ 45763 ef30 47EF0000 		.long	0xef47
+ 45764 ef34 32       		.uleb128 0x32
+ 45765 ef35 3E0E0000 		.long	0xe3e
+ 45766 ef39 03       		.byte	0x3
+ 45767 ef3a 91       		.byte	0x91
+ 45768 ef3b F072     		.sleb128 -1680
+ 45769 ef3d 32       		.uleb128 0x32
+ 45770 ef3e 330E0000 		.long	0xe33
+ 45771 ef42 03       		.byte	0x3
+ 45772 ef43 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1127
+
+
+ 45773 ef44 8073     		.sleb128 -1664
+ 45774 ef46 00       		.byte	0x0
+ 45775 ef47 35       		.uleb128 0x35
+ 45776 ef48 4F0D0000 		.long	0xd4f
+ 45777 ef4c 00000000 		.quad	.LBB4235
+ 45777      00000000 
+ 45778 ef54 00000000 		.quad	.LBE4235
+ 45778      00000000 
+ 45779 ef5c 02       		.byte	0x2
+ 45780 ef5d 6E03     		.value	0x36e
+ 45781 ef5f 32       		.uleb128 0x32
+ 45782 ef60 6A0D0000 		.long	0xd6a
+ 45783 ef64 03       		.byte	0x3
+ 45784 ef65 91       		.byte	0x91
+ 45785 ef66 9073     		.sleb128 -1648
+ 45786 ef68 32       		.uleb128 0x32
+ 45787 ef69 600D0000 		.long	0xd60
+ 45788 ef6d 03       		.byte	0x3
+ 45789 ef6e 91       		.byte	0x91
+ 45790 ef6f A073     		.sleb128 -1632
+ 45791 ef71 00       		.byte	0x0
+ 45792 ef72 00       		.byte	0x0
+ 45793 ef73 00       		.byte	0x0
+ 45794 ef74 00       		.byte	0x0
+ 45795 ef75 36       		.uleb128 0x36
+ 45796 ef76 00000000 		.quad	.LBB4237
+ 45796      00000000 
+ 45797 ef7e 00000000 		.quad	.LBE4237
+ 45797      00000000 
+ 45798 ef86 94EF0000 		.long	0xef94
+ 45799 ef8a 34       		.uleb128 0x34
+ 45800 ef8b B6E90000 		.long	0xe9b6
+ 45801 ef8f 03       		.byte	0x3
+ 45802 ef90 91       		.byte	0x91
+ 45803 ef91 E06C     		.sleb128 -2464
+ 45804 ef93 00       		.byte	0x0
+ 45805 ef94 31       		.uleb128 0x31
+ 45806 ef95 FEE90000 		.long	0xe9fe
+ 45807 ef99 00000000 		.quad	.LBB4238
+ 45807      00000000 
+ 45808 efa1 00000000 		.quad	.LBE4238
+ 45808      00000000 
+ 45809 efa9 02       		.byte	0x2
+ 45810 efaa F107     		.value	0x7f1
+ 45811 efac 31F00000 		.long	0xf031
+ 45812 efb0 32       		.uleb128 0x32
+ 45813 efb1 10EA0000 		.long	0xea10
+ 45814 efb5 03       		.byte	0x3
+ 45815 efb6 91       		.byte	0x91
+ 45816 efb7 B073     		.sleb128 -1616
+ 45817 efb9 33       		.uleb128 0x33
+ 45818 efba 00000000 		.quad	.LBB4239
+ 45818      00000000 
+ 45819 efc2 00000000 		.quad	.LBE4239
+ 45819      00000000 
+ 45820 efca 34       		.uleb128 0x34
+ 45821 efcb 1CEA0000 		.long	0xea1c
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1128
+
+
+ 45822 efcf 09       		.byte	0x9
+ 45823 efd0 03       		.byte	0x3
+ 45824 efd1 00000000 		.quad	ShiftRowTable.7358
+ 45824      00000000 
+ 45825 efd9 35       		.uleb128 0x35
+ 45826 efda A00D0000 		.long	0xda0
+ 45827 efde 00000000 		.quad	.LBB4240
+ 45827      00000000 
+ 45828 efe6 00000000 		.quad	.LBE4240
+ 45828      00000000 
+ 45829 efee 02       		.byte	0x2
+ 45830 efef 4502     		.value	0x245
+ 45831 eff1 32       		.uleb128 0x32
+ 45832 eff2 BE0D0000 		.long	0xdbe
+ 45833 eff6 03       		.byte	0x3
+ 45834 eff7 91       		.byte	0x91
+ 45835 eff8 C073     		.sleb128 -1600
+ 45836 effa 32       		.uleb128 0x32
+ 45837 effb B20D0000 		.long	0xdb2
+ 45838 efff 03       		.byte	0x3
+ 45839 f000 91       		.byte	0x91
+ 45840 f001 D073     		.sleb128 -1584
+ 45841 f003 35       		.uleb128 0x35
+ 45842 f004 CB0D0000 		.long	0xdcb
+ 45843 f008 00000000 		.quad	.LBB4242
+ 45843      00000000 
+ 45844 f010 00000000 		.quad	.LBE4242
+ 45844      00000000 
+ 45845 f018 02       		.byte	0x2
+ 45846 f019 7501     		.value	0x175
+ 45847 f01b 32       		.uleb128 0x32
+ 45848 f01c E90D0000 		.long	0xde9
+ 45849 f020 03       		.byte	0x3
+ 45850 f021 91       		.byte	0x91
+ 45851 f022 E073     		.sleb128 -1568
+ 45852 f024 32       		.uleb128 0x32
+ 45853 f025 DD0D0000 		.long	0xddd
+ 45854 f029 03       		.byte	0x3
+ 45855 f02a 91       		.byte	0x91
+ 45856 f02b F073     		.sleb128 -1552
+ 45857 f02d 00       		.byte	0x0
+ 45858 f02e 00       		.byte	0x0
+ 45859 f02f 00       		.byte	0x0
+ 45860 f030 00       		.byte	0x0
+ 45861 f031 36       		.uleb128 0x36
+ 45862 f032 00000000 		.quad	.LBB4244
+ 45862      00000000 
+ 45863 f03a 00000000 		.quad	.LBE4244
+ 45863      00000000 
+ 45864 f042 50F00000 		.long	0xf050
+ 45865 f046 34       		.uleb128 0x34
+ 45866 f047 C6E90000 		.long	0xe9c6
+ 45867 f04b 03       		.byte	0x3
+ 45868 f04c 91       		.byte	0x91
+ 45869 f04d D06C     		.sleb128 -2480
+ 45870 f04f 00       		.byte	0x0
+ 45871 f050 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1129
+
+
+ 45872 f051 3AEA0000 		.long	0xea3a
+ 45873 f055 00000000 		.quad	.LBB4245
+ 45873      00000000 
+ 45874 f05d 00000000 		.quad	.LBE4245
+ 45874      00000000 
+ 45875 f065 02       		.byte	0x2
+ 45876 f066 F507     		.value	0x7f5
+ 45877 f068 4BF60000 		.long	0xf64b
+ 45878 f06c 32       		.uleb128 0x32
+ 45879 f06d 4CEA0000 		.long	0xea4c
+ 45880 f071 03       		.byte	0x3
+ 45881 f072 91       		.byte	0x91
+ 45882 f073 8074     		.sleb128 -1536
+ 45883 f075 33       		.uleb128 0x33
+ 45884 f076 00000000 		.quad	.LBB4246
+ 45884      00000000 
+ 45885 f07e 00000000 		.quad	.LBE4246
+ 45885      00000000 
+ 45886 f086 34       		.uleb128 0x34
+ 45887 f087 58EA0000 		.long	0xea58
+ 45888 f08b 03       		.byte	0x3
+ 45889 f08c 76       		.byte	0x76
+ 45890 f08d D06B     		.sleb128 -2608
+ 45891 f08f 34       		.uleb128 0x34
+ 45892 f090 63EA0000 		.long	0xea63
+ 45893 f094 03       		.byte	0x3
+ 45894 f095 76       		.byte	0x76
+ 45895 f096 C06B     		.sleb128 -2624
+ 45896 f098 34       		.uleb128 0x34
+ 45897 f099 6EEA0000 		.long	0xea6e
+ 45898 f09d 03       		.byte	0x3
+ 45899 f09e 76       		.byte	0x76
+ 45900 f09f B06B     		.sleb128 -2640
+ 45901 f0a1 34       		.uleb128 0x34
+ 45902 f0a2 79EA0000 		.long	0xea79
+ 45903 f0a6 03       		.byte	0x3
+ 45904 f0a7 76       		.byte	0x76
+ 45905 f0a8 A06B     		.sleb128 -2656
+ 45906 f0aa 31       		.uleb128 0x31
+ 45907 f0ab 4A0E0000 		.long	0xe4a
+ 45908 f0af 00000000 		.quad	.LBB4247
+ 45908      00000000 
+ 45909 f0b7 00000000 		.quad	.LBE4247
+ 45909      00000000 
+ 45910 f0bf 02       		.byte	0x2
+ 45911 f0c0 1704     		.value	0x417
+ 45912 f0c2 47F10000 		.long	0xf147
+ 45913 f0c6 32       		.uleb128 0x32
+ 45914 f0c7 5C0E0000 		.long	0xe5c
+ 45915 f0cb 03       		.byte	0x3
+ 45916 f0cc 91       		.byte	0x91
+ 45917 f0cd 9074     		.sleb128 -1520
+ 45918 f0cf 33       		.uleb128 0x33
+ 45919 f0d0 00000000 		.quad	.LBB4248
+ 45919      00000000 
+ 45920 f0d8 00000000 		.quad	.LBE4248
+ 45920      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1130
+
+
+ 45921 f0e0 34       		.uleb128 0x34
+ 45922 f0e1 680E0000 		.long	0xe68
+ 45923 f0e5 09       		.byte	0x9
+ 45924 f0e6 03       		.byte	0x3
+ 45925 f0e7 00000000 		.quad	ShiftRowTable.7385
+ 45925      00000000 
+ 45926 f0ef 35       		.uleb128 0x35
+ 45927 f0f0 A00D0000 		.long	0xda0
+ 45928 f0f4 00000000 		.quad	.LBB4249
+ 45928      00000000 
+ 45929 f0fc 00000000 		.quad	.LBE4249
+ 45929      00000000 
+ 45930 f104 02       		.byte	0x2
+ 45931 f105 9B02     		.value	0x29b
+ 45932 f107 32       		.uleb128 0x32
+ 45933 f108 BE0D0000 		.long	0xdbe
+ 45934 f10c 03       		.byte	0x3
+ 45935 f10d 91       		.byte	0x91
+ 45936 f10e A074     		.sleb128 -1504
+ 45937 f110 32       		.uleb128 0x32
+ 45938 f111 B20D0000 		.long	0xdb2
+ 45939 f115 03       		.byte	0x3
+ 45940 f116 91       		.byte	0x91
+ 45941 f117 B074     		.sleb128 -1488
+ 45942 f119 35       		.uleb128 0x35
+ 45943 f11a CB0D0000 		.long	0xdcb
+ 45944 f11e 00000000 		.quad	.LBB4251
+ 45944      00000000 
+ 45945 f126 00000000 		.quad	.LBE4251
+ 45945      00000000 
+ 45946 f12e 02       		.byte	0x2
+ 45947 f12f 7501     		.value	0x175
+ 45948 f131 32       		.uleb128 0x32
+ 45949 f132 E90D0000 		.long	0xde9
+ 45950 f136 03       		.byte	0x3
+ 45951 f137 91       		.byte	0x91
+ 45952 f138 C074     		.sleb128 -1472
+ 45953 f13a 32       		.uleb128 0x32
+ 45954 f13b DD0D0000 		.long	0xddd
+ 45955 f13f 03       		.byte	0x3
+ 45956 f140 91       		.byte	0x91
+ 45957 f141 D074     		.sleb128 -1456
+ 45958 f143 00       		.byte	0x0
+ 45959 f144 00       		.byte	0x0
+ 45960 f145 00       		.byte	0x0
+ 45961 f146 00       		.byte	0x0
+ 45962 f147 31       		.uleb128 0x31
+ 45963 f148 4A0E0000 		.long	0xe4a
+ 45964 f14c 00000000 		.quad	.LBB4253
+ 45964      00000000 
+ 45965 f154 00000000 		.quad	.LBE4253
+ 45965      00000000 
+ 45966 f15c 02       		.byte	0x2
+ 45967 f15d 1804     		.value	0x418
+ 45968 f15f E4F10000 		.long	0xf1e4
+ 45969 f163 32       		.uleb128 0x32
+ 45970 f164 5C0E0000 		.long	0xe5c
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1131
+
+
+ 45971 f168 03       		.byte	0x3
+ 45972 f169 91       		.byte	0x91
+ 45973 f16a E074     		.sleb128 -1440
+ 45974 f16c 33       		.uleb128 0x33
+ 45975 f16d 00000000 		.quad	.LBB4254
+ 45975      00000000 
+ 45976 f175 00000000 		.quad	.LBE4254
+ 45976      00000000 
+ 45977 f17d 34       		.uleb128 0x34
+ 45978 f17e 680E0000 		.long	0xe68
+ 45979 f182 09       		.byte	0x9
+ 45980 f183 03       		.byte	0x3
+ 45981 f184 00000000 		.quad	ShiftRowTable.7385
+ 45981      00000000 
+ 45982 f18c 35       		.uleb128 0x35
+ 45983 f18d A00D0000 		.long	0xda0
+ 45984 f191 00000000 		.quad	.LBB4255
+ 45984      00000000 
+ 45985 f199 00000000 		.quad	.LBE4255
+ 45985      00000000 
+ 45986 f1a1 02       		.byte	0x2
+ 45987 f1a2 9B02     		.value	0x29b
+ 45988 f1a4 32       		.uleb128 0x32
+ 45989 f1a5 BE0D0000 		.long	0xdbe
+ 45990 f1a9 03       		.byte	0x3
+ 45991 f1aa 91       		.byte	0x91
+ 45992 f1ab F074     		.sleb128 -1424
+ 45993 f1ad 32       		.uleb128 0x32
+ 45994 f1ae B20D0000 		.long	0xdb2
+ 45995 f1b2 03       		.byte	0x3
+ 45996 f1b3 91       		.byte	0x91
+ 45997 f1b4 8075     		.sleb128 -1408
+ 45998 f1b6 35       		.uleb128 0x35
+ 45999 f1b7 CB0D0000 		.long	0xdcb
+ 46000 f1bb 00000000 		.quad	.LBB4257
+ 46000      00000000 
+ 46001 f1c3 00000000 		.quad	.LBE4257
+ 46001      00000000 
+ 46002 f1cb 02       		.byte	0x2
+ 46003 f1cc 7501     		.value	0x175
+ 46004 f1ce 32       		.uleb128 0x32
+ 46005 f1cf E90D0000 		.long	0xde9
+ 46006 f1d3 03       		.byte	0x3
+ 46007 f1d4 91       		.byte	0x91
+ 46008 f1d5 9075     		.sleb128 -1392
+ 46009 f1d7 32       		.uleb128 0x32
+ 46010 f1d8 DD0D0000 		.long	0xddd
+ 46011 f1dc 03       		.byte	0x3
+ 46012 f1dd 91       		.byte	0x91
+ 46013 f1de A075     		.sleb128 -1376
+ 46014 f1e0 00       		.byte	0x0
+ 46015 f1e1 00       		.byte	0x0
+ 46016 f1e2 00       		.byte	0x0
+ 46017 f1e3 00       		.byte	0x0
+ 46018 f1e4 31       		.uleb128 0x31
+ 46019 f1e5 4A0E0000 		.long	0xe4a
+ 46020 f1e9 00000000 		.quad	.LBB4259
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1132
+
+
+ 46020      00000000 
+ 46021 f1f1 00000000 		.quad	.LBE4259
+ 46021      00000000 
+ 46022 f1f9 02       		.byte	0x2
+ 46023 f1fa 1904     		.value	0x419
+ 46024 f1fc 81F20000 		.long	0xf281
+ 46025 f200 32       		.uleb128 0x32
+ 46026 f201 5C0E0000 		.long	0xe5c
+ 46027 f205 03       		.byte	0x3
+ 46028 f206 91       		.byte	0x91
+ 46029 f207 B075     		.sleb128 -1360
+ 46030 f209 33       		.uleb128 0x33
+ 46031 f20a 00000000 		.quad	.LBB4260
+ 46031      00000000 
+ 46032 f212 00000000 		.quad	.LBE4260
+ 46032      00000000 
+ 46033 f21a 34       		.uleb128 0x34
+ 46034 f21b 680E0000 		.long	0xe68
+ 46035 f21f 09       		.byte	0x9
+ 46036 f220 03       		.byte	0x3
+ 46037 f221 00000000 		.quad	ShiftRowTable.7385
+ 46037      00000000 
+ 46038 f229 35       		.uleb128 0x35
+ 46039 f22a A00D0000 		.long	0xda0
+ 46040 f22e 00000000 		.quad	.LBB4261
+ 46040      00000000 
+ 46041 f236 00000000 		.quad	.LBE4261
+ 46041      00000000 
+ 46042 f23e 02       		.byte	0x2
+ 46043 f23f 9B02     		.value	0x29b
+ 46044 f241 32       		.uleb128 0x32
+ 46045 f242 BE0D0000 		.long	0xdbe
+ 46046 f246 03       		.byte	0x3
+ 46047 f247 91       		.byte	0x91
+ 46048 f248 C075     		.sleb128 -1344
+ 46049 f24a 32       		.uleb128 0x32
+ 46050 f24b B20D0000 		.long	0xdb2
+ 46051 f24f 03       		.byte	0x3
+ 46052 f250 91       		.byte	0x91
+ 46053 f251 D075     		.sleb128 -1328
+ 46054 f253 35       		.uleb128 0x35
+ 46055 f254 CB0D0000 		.long	0xdcb
+ 46056 f258 00000000 		.quad	.LBB4263
+ 46056      00000000 
+ 46057 f260 00000000 		.quad	.LBE4263
+ 46057      00000000 
+ 46058 f268 02       		.byte	0x2
+ 46059 f269 7501     		.value	0x175
+ 46060 f26b 32       		.uleb128 0x32
+ 46061 f26c E90D0000 		.long	0xde9
+ 46062 f270 03       		.byte	0x3
+ 46063 f271 91       		.byte	0x91
+ 46064 f272 E075     		.sleb128 -1312
+ 46065 f274 32       		.uleb128 0x32
+ 46066 f275 DD0D0000 		.long	0xddd
+ 46067 f279 03       		.byte	0x3
+ 46068 f27a 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1133
+
+
+ 46069 f27b F075     		.sleb128 -1296
+ 46070 f27d 00       		.byte	0x0
+ 46071 f27e 00       		.byte	0x0
+ 46072 f27f 00       		.byte	0x0
+ 46073 f280 00       		.byte	0x0
+ 46074 f281 31       		.uleb128 0x31
+ 46075 f282 860E0000 		.long	0xe86
+ 46076 f286 00000000 		.quad	.LBB4265
+ 46076      00000000 
+ 46077 f28e 00000000 		.quad	.LBE4265
+ 46077      00000000 
+ 46078 f296 02       		.byte	0x2
+ 46079 f297 1A04     		.value	0x41a
+ 46080 f299 B0F20000 		.long	0xf2b0
+ 46081 f29d 32       		.uleb128 0x32
+ 46082 f29e A10E0000 		.long	0xea1
+ 46083 f2a2 03       		.byte	0x3
+ 46084 f2a3 91       		.byte	0x91
+ 46085 f2a4 8076     		.sleb128 -1280
+ 46086 f2a6 32       		.uleb128 0x32
+ 46087 f2a7 970E0000 		.long	0xe97
+ 46088 f2ab 03       		.byte	0x3
+ 46089 f2ac 91       		.byte	0x91
+ 46090 f2ad 9076     		.sleb128 -1264
+ 46091 f2af 00       		.byte	0x0
+ 46092 f2b0 31       		.uleb128 0x31
+ 46093 f2b1 85EA0000 		.long	0xea85
+ 46094 f2b5 00000000 		.quad	.LBB4267
+ 46094      00000000 
+ 46095 f2bd 00000000 		.quad	.LBE4267
+ 46095      00000000 
+ 46096 f2c5 02       		.byte	0x2
+ 46097 f2c6 1E04     		.value	0x41e
+ 46098 f2c8 C0F50000 		.long	0xf5c0
+ 46099 f2cc 32       		.uleb128 0x32
+ 46100 f2cd 97EA0000 		.long	0xea97
+ 46101 f2d1 03       		.byte	0x3
+ 46102 f2d2 91       		.byte	0x91
+ 46103 f2d3 A076     		.sleb128 -1248
+ 46104 f2d5 36       		.uleb128 0x36
+ 46105 f2d6 00000000 		.quad	.LBB4269
+ 46105      00000000 
+ 46106 f2de 00000000 		.quad	.LBE4269
+ 46106      00000000 
+ 46107 f2e6 F4F20000 		.long	0xf2f4
+ 46108 f2ea 34       		.uleb128 0x34
+ 46109 f2eb A8EA0000 		.long	0xeaa8
+ 46110 f2ef 03       		.byte	0x3
+ 46111 f2f0 91       		.byte	0x91
+ 46112 f2f1 906D     		.sleb128 -2416
+ 46113 f2f3 00       		.byte	0x0
+ 46114 f2f4 31       		.uleb128 0x31
+ 46115 f2f5 6BD90000 		.long	0xd96b
+ 46116 f2f9 00000000 		.quad	.LBB4270
+ 46116      00000000 
+ 46117 f301 00000000 		.quad	.LBE4270
+ 46117      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1134
+
+
+ 46118 f309 02       		.byte	0x2
+ 46119 f30a B803     		.value	0x3b8
+ 46120 f30c A4F50000 		.long	0xf5a4
+ 46121 f310 32       		.uleb128 0x32
+ 46122 f311 89D90000 		.long	0xd989
+ 46123 f315 03       		.byte	0x3
+ 46124 f316 91       		.byte	0x91
+ 46125 f317 BC76     		.sleb128 -1220
+ 46126 f319 32       		.uleb128 0x32
+ 46127 f31a 7DD90000 		.long	0xd97d
+ 46128 f31e 03       		.byte	0x3
+ 46129 f31f 91       		.byte	0x91
+ 46130 f320 C076     		.sleb128 -1216
+ 46131 f322 33       		.uleb128 0x33
+ 46132 f323 00000000 		.quad	.LBB4271
+ 46132      00000000 
+ 46133 f32b 00000000 		.quad	.LBE4271
+ 46133      00000000 
+ 46134 f333 34       		.uleb128 0x34
+ 46135 f334 95D90000 		.long	0xd995
+ 46136 f338 03       		.byte	0x3
+ 46137 f339 91       		.byte	0x91
+ 46138 f33a E076     		.sleb128 -1184
+ 46139 f33c 34       		.uleb128 0x34
+ 46140 f33d A0D90000 		.long	0xd9a0
+ 46141 f341 03       		.byte	0x3
+ 46142 f342 91       		.byte	0x91
+ 46143 f343 D076     		.sleb128 -1200
+ 46144 f345 34       		.uleb128 0x34
+ 46145 f346 ABD90000 		.long	0xd9ab
+ 46146 f34a 09       		.byte	0x9
+ 46147 f34b 03       		.byte	0x3
+ 46148 f34c 00000000 		.quad	__PRETTY_FUNCTION__.7467
+ 46148      00000000 
+ 46149 f354 36       		.uleb128 0x36
+ 46150 f355 00000000 		.quad	.LBB4272
+ 46150      00000000 
+ 46151 f35d 00000000 		.quad	.LBE4272
+ 46151      00000000 
+ 46152 f365 73F30000 		.long	0xf373
+ 46153 f369 34       		.uleb128 0x34
+ 46154 f36a BED90000 		.long	0xd9be
+ 46155 f36e 03       		.byte	0x3
+ 46156 f36f 91       		.byte	0x91
+ 46157 f370 C06D     		.sleb128 -2368
+ 46158 f372 00       		.byte	0x0
+ 46159 f373 31       		.uleb128 0x31
+ 46160 f374 FBD90000 		.long	0xd9fb
+ 46161 f378 00000000 		.quad	.LBB4273
+ 46161      00000000 
+ 46162 f380 00000000 		.quad	.LBE4273
+ 46162      00000000 
+ 46163 f388 02       		.byte	0x2
+ 46164 f389 A603     		.value	0x3a6
+ 46165 f38b 1DF40000 		.long	0xf41d
+ 46166 f38f 32       		.uleb128 0x32
+ 46167 f390 17DA0000 		.long	0xda17
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1135
+
+
+ 46168 f394 03       		.byte	0x3
+ 46169 f395 91       		.byte	0x91
+ 46170 f396 FC76     		.sleb128 -1156
+ 46171 f398 32       		.uleb128 0x32
+ 46172 f399 0DDA0000 		.long	0xda0d
+ 46173 f39d 03       		.byte	0x3
+ 46174 f39e 91       		.byte	0x91
+ 46175 f39f 8077     		.sleb128 -1152
+ 46176 f3a1 33       		.uleb128 0x33
+ 46177 f3a2 00000000 		.quad	.LBB4274
+ 46177      00000000 
+ 46178 f3aa 00000000 		.quad	.LBE4274
+ 46178      00000000 
+ 46179 f3b2 34       		.uleb128 0x34
+ 46180 f3b3 21DA0000 		.long	0xda21
+ 46181 f3b7 09       		.byte	0x9
+ 46182 f3b8 03       		.byte	0x3
+ 46183 f3b9 00000000 		.quad	sr_mask.7327
+ 46183      00000000 
+ 46184 f3c1 31       		.uleb128 0x31
+ 46185 f3c2 750D0000 		.long	0xd75
+ 46186 f3c6 00000000 		.quad	.LBB4275
+ 46186      00000000 
+ 46187 f3ce 00000000 		.quad	.LBE4275
+ 46187      00000000 
+ 46188 f3d6 02       		.byte	0x2
+ 46189 f3d7 E801     		.value	0x1e8
+ 46190 f3d9 F0F30000 		.long	0xf3f0
+ 46191 f3dd 32       		.uleb128 0x32
+ 46192 f3de 930D0000 		.long	0xd93
+ 46193 f3e2 03       		.byte	0x3
+ 46194 f3e3 91       		.byte	0x91
+ 46195 f3e4 9C77     		.sleb128 -1124
+ 46196 f3e6 32       		.uleb128 0x32
+ 46197 f3e7 870D0000 		.long	0xd87
+ 46198 f3eb 03       		.byte	0x3
+ 46199 f3ec 91       		.byte	0x91
+ 46200 f3ed A077     		.sleb128 -1120
+ 46201 f3ef 00       		.byte	0x0
+ 46202 f3f0 35       		.uleb128 0x35
+ 46203 f3f1 4F0D0000 		.long	0xd4f
+ 46204 f3f5 00000000 		.quad	.LBB4277
+ 46204      00000000 
+ 46205 f3fd 00000000 		.quad	.LBE4277
+ 46205      00000000 
+ 46206 f405 02       		.byte	0x2
+ 46207 f406 E901     		.value	0x1e9
+ 46208 f408 32       		.uleb128 0x32
+ 46209 f409 6A0D0000 		.long	0xd6a
+ 46210 f40d 03       		.byte	0x3
+ 46211 f40e 91       		.byte	0x91
+ 46212 f40f B077     		.sleb128 -1104
+ 46213 f411 32       		.uleb128 0x32
+ 46214 f412 600D0000 		.long	0xd60
+ 46215 f416 03       		.byte	0x3
+ 46216 f417 91       		.byte	0x91
+ 46217 f418 C077     		.sleb128 -1088
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1136
+
+
+ 46218 f41a 00       		.byte	0x0
+ 46219 f41b 00       		.byte	0x0
+ 46220 f41c 00       		.byte	0x0
+ 46221 f41d 36       		.uleb128 0x36
+ 46222 f41e 00000000 		.quad	.LBB4279
+ 46222      00000000 
+ 46223 f426 00000000 		.quad	.LBE4279
+ 46223      00000000 
+ 46224 f42e 3CF40000 		.long	0xf43c
+ 46225 f432 34       		.uleb128 0x34
+ 46226 f433 CED90000 		.long	0xd9ce
+ 46227 f437 03       		.byte	0x3
+ 46228 f438 91       		.byte	0x91
+ 46229 f439 B06D     		.sleb128 -2384
+ 46230 f43b 00       		.byte	0x0
+ 46231 f43c 31       		.uleb128 0x31
+ 46232 f43d D4DA0000 		.long	0xdad4
+ 46233 f441 00000000 		.quad	.LBB4280
+ 46233      00000000 
+ 46234 f449 00000000 		.quad	.LBE4280
+ 46234      00000000 
+ 46235 f451 02       		.byte	0x2
+ 46236 f452 A803     		.value	0x3a8
+ 46237 f454 FEF40000 		.long	0xf4fe
+ 46238 f458 32       		.uleb128 0x32
+ 46239 f459 F0DA0000 		.long	0xdaf0
+ 46240 f45d 03       		.byte	0x3
+ 46241 f45e 91       		.byte	0x91
+ 46242 f45f DC77     		.sleb128 -1060
+ 46243 f461 32       		.uleb128 0x32
+ 46244 f462 E6DA0000 		.long	0xdae6
+ 46245 f466 03       		.byte	0x3
+ 46246 f467 91       		.byte	0x91
+ 46247 f468 E077     		.sleb128 -1056
+ 46248 f46a 33       		.uleb128 0x33
+ 46249 f46b 00000000 		.quad	.LBB4281
+ 46249      00000000 
+ 46250 f473 00000000 		.quad	.LBE4281
+ 46250      00000000 
+ 46251 f47b 34       		.uleb128 0x34
+ 46252 f47c 97DB0000 		.long	0xdb97
+ 46253 f480 03       		.byte	0x3
+ 46254 f481 91       		.byte	0x91
+ 46255 f482 F077     		.sleb128 -1040
+ 46256 f484 34       		.uleb128 0x34
+ 46257 f485 FADA0000 		.long	0xdafa
+ 46258 f489 09       		.byte	0x9
+ 46259 f48a 03       		.byte	0x3
+ 46260 f48b 00000000 		.quad	sl_mask.7310
+ 46260      00000000 
+ 46261 f493 34       		.uleb128 0x34
+ 46262 f494 A2DB0000 		.long	0xdba2
+ 46263 f498 09       		.byte	0x9
+ 46264 f499 03       		.byte	0x3
+ 46265 f49a 00000000 		.quad	__PRETTY_FUNCTION__.7312
+ 46265      00000000 
+ 46266 f4a2 31       		.uleb128 0x31
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1137
+
+
+ 46267 f4a3 CBDB0000 		.long	0xdbcb
+ 46268 f4a7 00000000 		.quad	.LBB4282
+ 46268      00000000 
+ 46269 f4af 00000000 		.quad	.LBE4282
+ 46269      00000000 
+ 46270 f4b7 02       		.byte	0x2
+ 46271 f4b8 B101     		.value	0x1b1
+ 46272 f4ba D1F40000 		.long	0xf4d1
+ 46273 f4be 32       		.uleb128 0x32
+ 46274 f4bf E9DB0000 		.long	0xdbe9
+ 46275 f4c3 03       		.byte	0x3
+ 46276 f4c4 91       		.byte	0x91
+ 46277 f4c5 8C78     		.sleb128 -1012
+ 46278 f4c7 32       		.uleb128 0x32
+ 46279 f4c8 DDDB0000 		.long	0xdbdd
+ 46280 f4cc 03       		.byte	0x3
+ 46281 f4cd 91       		.byte	0x91
+ 46282 f4ce 9078     		.sleb128 -1008
+ 46283 f4d0 00       		.byte	0x0
+ 46284 f4d1 35       		.uleb128 0x35
+ 46285 f4d2 4F0D0000 		.long	0xd4f
+ 46286 f4d6 00000000 		.quad	.LBB4284
+ 46286      00000000 
+ 46287 f4de 00000000 		.quad	.LBE4284
+ 46287      00000000 
+ 46288 f4e6 02       		.byte	0x2
+ 46289 f4e7 B301     		.value	0x1b3
+ 46290 f4e9 32       		.uleb128 0x32
+ 46291 f4ea 6A0D0000 		.long	0xd6a
+ 46292 f4ee 03       		.byte	0x3
+ 46293 f4ef 91       		.byte	0x91
+ 46294 f4f0 A078     		.sleb128 -992
+ 46295 f4f2 32       		.uleb128 0x32
+ 46296 f4f3 600D0000 		.long	0xd60
+ 46297 f4f7 03       		.byte	0x3
+ 46298 f4f8 91       		.byte	0x91
+ 46299 f4f9 B078     		.sleb128 -976
+ 46300 f4fb 00       		.byte	0x0
+ 46301 f4fc 00       		.byte	0x0
+ 46302 f4fd 00       		.byte	0x0
+ 46303 f4fe 36       		.uleb128 0x36
+ 46304 f4ff 00000000 		.quad	.LBB4286
+ 46304      00000000 
+ 46305 f507 00000000 		.quad	.LBE4286
+ 46305      00000000 
+ 46306 f50f 1DF50000 		.long	0xf51d
+ 46307 f513 34       		.uleb128 0x34
+ 46308 f514 DAD90000 		.long	0xd9da
+ 46309 f518 03       		.byte	0x3
+ 46310 f519 91       		.byte	0x91
+ 46311 f51a A06D     		.sleb128 -2400
+ 46312 f51c 00       		.byte	0x0
+ 46313 f51d 31       		.uleb128 0x31
+ 46314 f51e A00D0000 		.long	0xda0
+ 46315 f522 00000000 		.quad	.LBB4287
+ 46315      00000000 
+ 46316 f52a 00000000 		.quad	.LBE4287
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1138
+
+
+ 46316      00000000 
+ 46317 f532 02       		.byte	0x2
+ 46318 f533 AA03     		.value	0x3aa
+ 46319 f535 77F50000 		.long	0xf577
+ 46320 f539 32       		.uleb128 0x32
+ 46321 f53a BE0D0000 		.long	0xdbe
+ 46322 f53e 03       		.byte	0x3
+ 46323 f53f 91       		.byte	0x91
+ 46324 f540 C078     		.sleb128 -960
+ 46325 f542 32       		.uleb128 0x32
+ 46326 f543 B20D0000 		.long	0xdb2
+ 46327 f547 03       		.byte	0x3
+ 46328 f548 91       		.byte	0x91
+ 46329 f549 D078     		.sleb128 -944
+ 46330 f54b 35       		.uleb128 0x35
+ 46331 f54c CB0D0000 		.long	0xdcb
+ 46332 f550 00000000 		.quad	.LBB4289
+ 46332      00000000 
+ 46333 f558 00000000 		.quad	.LBE4289
+ 46333      00000000 
+ 46334 f560 02       		.byte	0x2
+ 46335 f561 7501     		.value	0x175
+ 46336 f563 32       		.uleb128 0x32
+ 46337 f564 E90D0000 		.long	0xde9
+ 46338 f568 03       		.byte	0x3
+ 46339 f569 91       		.byte	0x91
+ 46340 f56a E078     		.sleb128 -928
+ 46341 f56c 32       		.uleb128 0x32
+ 46342 f56d DD0D0000 		.long	0xddd
+ 46343 f571 03       		.byte	0x3
+ 46344 f572 91       		.byte	0x91
+ 46345 f573 F078     		.sleb128 -912
+ 46346 f575 00       		.byte	0x0
+ 46347 f576 00       		.byte	0x0
+ 46348 f577 35       		.uleb128 0x35
+ 46349 f578 860E0000 		.long	0xe86
+ 46350 f57c 00000000 		.quad	.LBB4291
+ 46350      00000000 
+ 46351 f584 00000000 		.quad	.LBE4291
+ 46351      00000000 
+ 46352 f58c 02       		.byte	0x2
+ 46353 f58d AB03     		.value	0x3ab
+ 46354 f58f 32       		.uleb128 0x32
+ 46355 f590 A10E0000 		.long	0xea1
+ 46356 f594 03       		.byte	0x3
+ 46357 f595 91       		.byte	0x91
+ 46358 f596 8079     		.sleb128 -896
+ 46359 f598 32       		.uleb128 0x32
+ 46360 f599 970E0000 		.long	0xe97
+ 46361 f59d 03       		.byte	0x3
+ 46362 f59e 91       		.byte	0x91
+ 46363 f59f 9079     		.sleb128 -880
+ 46364 f5a1 00       		.byte	0x0
+ 46365 f5a2 00       		.byte	0x0
+ 46366 f5a3 00       		.byte	0x0
+ 46367 f5a4 33       		.uleb128 0x33
+ 46368 f5a5 00000000 		.quad	.LBB4293
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1139
+
+
+ 46368      00000000 
+ 46369 f5ad 00000000 		.quad	.LBE4293
+ 46369      00000000 
+ 46370 f5b5 34       		.uleb128 0x34
+ 46371 f5b6 B4EA0000 		.long	0xeab4
+ 46372 f5ba 03       		.byte	0x3
+ 46373 f5bb 91       		.byte	0x91
+ 46374 f5bc 806D     		.sleb128 -2432
+ 46375 f5be 00       		.byte	0x0
+ 46376 f5bf 00       		.byte	0x0
+ 46377 f5c0 31       		.uleb128 0x31
+ 46378 f5c1 860E0000 		.long	0xe86
+ 46379 f5c5 00000000 		.quad	.LBB4294
+ 46379      00000000 
+ 46380 f5cd 00000000 		.quad	.LBE4294
+ 46380      00000000 
+ 46381 f5d5 02       		.byte	0x2
+ 46382 f5d6 2B04     		.value	0x42b
+ 46383 f5d8 EFF50000 		.long	0xf5ef
+ 46384 f5dc 32       		.uleb128 0x32
+ 46385 f5dd A10E0000 		.long	0xea1
+ 46386 f5e1 03       		.byte	0x3
+ 46387 f5e2 91       		.byte	0x91
+ 46388 f5e3 A079     		.sleb128 -864
+ 46389 f5e5 32       		.uleb128 0x32
+ 46390 f5e6 970E0000 		.long	0xe97
+ 46391 f5ea 03       		.byte	0x3
+ 46392 f5eb 91       		.byte	0x91
+ 46393 f5ec B079     		.sleb128 -848
+ 46394 f5ee 00       		.byte	0x0
+ 46395 f5ef 31       		.uleb128 0x31
+ 46396 f5f0 860E0000 		.long	0xe86
+ 46397 f5f4 00000000 		.quad	.LBB4296
+ 46397      00000000 
+ 46398 f5fc 00000000 		.quad	.LBE4296
+ 46398      00000000 
+ 46399 f604 02       		.byte	0x2
+ 46400 f605 2C04     		.value	0x42c
+ 46401 f607 1EF60000 		.long	0xf61e
+ 46402 f60b 32       		.uleb128 0x32
+ 46403 f60c A10E0000 		.long	0xea1
+ 46404 f610 03       		.byte	0x3
+ 46405 f611 91       		.byte	0x91
+ 46406 f612 C079     		.sleb128 -832
+ 46407 f614 32       		.uleb128 0x32
+ 46408 f615 970E0000 		.long	0xe97
+ 46409 f619 03       		.byte	0x3
+ 46410 f61a 91       		.byte	0x91
+ 46411 f61b D079     		.sleb128 -816
+ 46412 f61d 00       		.byte	0x0
+ 46413 f61e 35       		.uleb128 0x35
+ 46414 f61f 860E0000 		.long	0xe86
+ 46415 f623 00000000 		.quad	.LBB4298
+ 46415      00000000 
+ 46416 f62b 00000000 		.quad	.LBE4298
+ 46416      00000000 
+ 46417 f633 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1140
+
+
+ 46418 f634 2D04     		.value	0x42d
+ 46419 f636 32       		.uleb128 0x32
+ 46420 f637 A10E0000 		.long	0xea1
+ 46421 f63b 03       		.byte	0x3
+ 46422 f63c 91       		.byte	0x91
+ 46423 f63d E079     		.sleb128 -800
+ 46424 f63f 32       		.uleb128 0x32
+ 46425 f640 970E0000 		.long	0xe97
+ 46426 f644 03       		.byte	0x3
+ 46427 f645 91       		.byte	0x91
+ 46428 f646 F079     		.sleb128 -784
+ 46429 f648 00       		.byte	0x0
+ 46430 f649 00       		.byte	0x0
+ 46431 f64a 00       		.byte	0x0
+ 46432 f64b 36       		.uleb128 0x36
+ 46433 f64c 00000000 		.quad	.LBB4300
+ 46433      00000000 
+ 46434 f654 00000000 		.quad	.LBE4300
+ 46434      00000000 
+ 46435 f65c 6AF60000 		.long	0xf66a
+ 46436 f660 34       		.uleb128 0x34
+ 46437 f661 D6E90000 		.long	0xe9d6
+ 46438 f665 03       		.byte	0x3
+ 46439 f666 91       		.byte	0x91
+ 46440 f667 C06C     		.sleb128 -2496
+ 46441 f669 00       		.byte	0x0
+ 46442 f66a 31       		.uleb128 0x31
+ 46443 f66b 34E90000 		.long	0xe934
+ 46444 f66f 00000000 		.quad	.LBB4301
+ 46444      00000000 
+ 46445 f677 00000000 		.quad	.LBE4301
+ 46445      00000000 
+ 46446 f67f 02       		.byte	0x2
+ 46447 f680 FA07     		.value	0x7fa
+ 46448 f682 C4F60000 		.long	0xf6c4
+ 46449 f686 32       		.uleb128 0x32
+ 46450 f687 52E90000 		.long	0xe952
+ 46451 f68b 03       		.byte	0x3
+ 46452 f68c 91       		.byte	0x91
+ 46453 f68d 807A     		.sleb128 -768
+ 46454 f68f 32       		.uleb128 0x32
+ 46455 f690 46E90000 		.long	0xe946
+ 46456 f694 03       		.byte	0x3
+ 46457 f695 91       		.byte	0x91
+ 46458 f696 907A     		.sleb128 -752
+ 46459 f698 35       		.uleb128 0x35
+ 46460 f699 860E0000 		.long	0xe86
+ 46461 f69d 00000000 		.quad	.LBB4303
+ 46461      00000000 
+ 46462 f6a5 00000000 		.quad	.LBE4303
+ 46462      00000000 
+ 46463 f6ad 02       		.byte	0x2
+ 46464 f6ae 2302     		.value	0x223
+ 46465 f6b0 32       		.uleb128 0x32
+ 46466 f6b1 A10E0000 		.long	0xea1
+ 46467 f6b5 03       		.byte	0x3
+ 46468 f6b6 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1141
+
+
+ 46469 f6b7 A07A     		.sleb128 -736
+ 46470 f6b9 32       		.uleb128 0x32
+ 46471 f6ba 970E0000 		.long	0xe97
+ 46472 f6be 03       		.byte	0x3
+ 46473 f6bf 91       		.byte	0x91
+ 46474 f6c0 B07A     		.sleb128 -720
+ 46475 f6c2 00       		.byte	0x0
+ 46476 f6c3 00       		.byte	0x0
+ 46477 f6c4 36       		.uleb128 0x36
+ 46478 f6c5 00000000 		.quad	.LBB4305
+ 46478      00000000 
+ 46479 f6cd 00000000 		.quad	.LBE4305
+ 46479      00000000 
+ 46480 f6d5 E3F60000 		.long	0xf6e3
+ 46481 f6d9 34       		.uleb128 0x34
+ 46482 f6da E6E90000 		.long	0xe9e6
+ 46483 f6de 03       		.byte	0x3
+ 46484 f6df 91       		.byte	0x91
+ 46485 f6e0 B06C     		.sleb128 -2512
+ 46486 f6e2 00       		.byte	0x0
+ 46487 f6e3 33       		.uleb128 0x33
+ 46488 f6e4 00000000 		.quad	.LBB4306
+ 46488      00000000 
+ 46489 f6ec 00000000 		.quad	.LBE4306
+ 46489      00000000 
+ 46490 f6f4 34       		.uleb128 0x34
+ 46491 f6f5 F2E90000 		.long	0xe9f2
+ 46492 f6f9 03       		.byte	0x3
+ 46493 f6fa 91       		.byte	0x91
+ 46494 f6fb A06C     		.sleb128 -2528
+ 46495 f6fd 00       		.byte	0x0
+ 46496 f6fe 00       		.byte	0x0
+ 46497 f6ff 00       		.byte	0x0
+ 46498 f700 35       		.uleb128 0x35
+ 46499 f701 C0EA0000 		.long	0xeac0
+ 46500 f705 00000000 		.quad	.LBB4307
+ 46500      00000000 
+ 46501 f70d 00000000 		.quad	.LBE4307
+ 46501      00000000 
+ 46502 f715 02       		.byte	0x2
+ 46503 f716 3608     		.value	0x836
+ 46504 f718 32       		.uleb128 0x32
+ 46505 f719 DEEA0000 		.long	0xeade
+ 46506 f71d 03       		.byte	0x3
+ 46507 f71e 91       		.byte	0x91
+ 46508 f71f C07A     		.sleb128 -704
+ 46509 f721 32       		.uleb128 0x32
+ 46510 f722 D2EA0000 		.long	0xead2
+ 46511 f726 03       		.byte	0x3
+ 46512 f727 91       		.byte	0x91
+ 46513 f728 D07A     		.sleb128 -688
+ 46514 f72a 36       		.uleb128 0x36
+ 46515 f72b 00000000 		.quad	.LBB4309
+ 46515      00000000 
+ 46516 f733 00000000 		.quad	.LBE4309
+ 46516      00000000 
+ 46517 f73b 49F70000 		.long	0xf749
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1142
+
+
+ 46518 f73f 34       		.uleb128 0x34
+ 46519 f740 EFEA0000 		.long	0xeaef
+ 46520 f744 03       		.byte	0x3
+ 46521 f745 91       		.byte	0x91
+ 46522 f746 906E     		.sleb128 -2288
+ 46523 f748 00       		.byte	0x0
+ 46524 f749 31       		.uleb128 0x31
+ 46525 f74a C10C0000 		.long	0xcc1
+ 46526 f74e 00000000 		.quad	.LBB4310
+ 46526      00000000 
+ 46527 f756 00000000 		.quad	.LBE4310
+ 46527      00000000 
+ 46528 f75e 02       		.byte	0x2
+ 46529 f75f 0F08     		.value	0x80f
+ 46530 f761 D2F90000 		.long	0xf9d2
+ 46531 f765 32       		.uleb128 0x32
+ 46532 f766 D30C0000 		.long	0xcd3
+ 46533 f76a 03       		.byte	0x3
+ 46534 f76b 91       		.byte	0x91
+ 46535 f76c E07A     		.sleb128 -672
+ 46536 f76e 35       		.uleb128 0x35
+ 46537 f76f E00C0000 		.long	0xce0
+ 46538 f773 00000000 		.quad	.LBB4312
+ 46538      00000000 
+ 46539 f77b 00000000 		.quad	.LBE4312
+ 46539      00000000 
+ 46540 f783 02       		.byte	0x2
+ 46541 f784 7D03     		.value	0x37d
+ 46542 f786 32       		.uleb128 0x32
+ 46543 f787 FE0C0000 		.long	0xcfe
+ 46544 f78b 03       		.byte	0x3
+ 46545 f78c 91       		.byte	0x91
+ 46546 f78d F87A     		.sleb128 -648
+ 46547 f78f 32       		.uleb128 0x32
+ 46548 f790 F20C0000 		.long	0xcf2
+ 46549 f794 03       		.byte	0x3
+ 46550 f795 91       		.byte	0x91
+ 46551 f796 807B     		.sleb128 -640
+ 46552 f798 33       		.uleb128 0x33
+ 46553 f799 00000000 		.quad	.LBB4313
+ 46553      00000000 
+ 46554 f7a1 00000000 		.quad	.LBE4313
+ 46554      00000000 
+ 46555 f7a9 34       		.uleb128 0x34
+ 46556 f7aa 0A0D0000 		.long	0xd0a
+ 46557 f7ae 03       		.byte	0x3
+ 46558 f7af 91       		.byte	0x91
+ 46559 f7b0 D07B     		.sleb128 -560
+ 46560 f7b2 34       		.uleb128 0x34
+ 46561 f7b3 150D0000 		.long	0xd15
+ 46562 f7b7 03       		.byte	0x3
+ 46563 f7b8 91       		.byte	0x91
+ 46564 f7b9 C07B     		.sleb128 -576
+ 46565 f7bb 34       		.uleb128 0x34
+ 46566 f7bc 200D0000 		.long	0xd20
+ 46567 f7c0 03       		.byte	0x3
+ 46568 f7c1 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1143
+
+
+ 46569 f7c2 B07B     		.sleb128 -592
+ 46570 f7c4 34       		.uleb128 0x34
+ 46571 f7c5 2C0D0000 		.long	0xd2c
+ 46572 f7c9 03       		.byte	0x3
+ 46573 f7ca 91       		.byte	0x91
+ 46574 f7cb A07B     		.sleb128 -608
+ 46575 f7cd 34       		.uleb128 0x34
+ 46576 f7ce 380D0000 		.long	0xd38
+ 46577 f7d2 03       		.byte	0x3
+ 46578 f7d3 91       		.byte	0x91
+ 46579 f7d4 9C7B     		.sleb128 -612
+ 46580 f7d6 31       		.uleb128 0x31
+ 46581 f7d7 4F0D0000 		.long	0xd4f
+ 46582 f7db 00000000 		.quad	.LBB4314
+ 46582      00000000 
+ 46583 f7e3 00000000 		.quad	.LBE4314
+ 46583      00000000 
+ 46584 f7eb 02       		.byte	0x2
+ 46585 f7ec 5603     		.value	0x356
+ 46586 f7ee 05F80000 		.long	0xf805
+ 46587 f7f2 32       		.uleb128 0x32
+ 46588 f7f3 6A0D0000 		.long	0xd6a
+ 46589 f7f7 03       		.byte	0x3
+ 46590 f7f8 91       		.byte	0x91
+ 46591 f7f9 E07B     		.sleb128 -544
+ 46592 f7fb 32       		.uleb128 0x32
+ 46593 f7fc 600D0000 		.long	0xd60
+ 46594 f800 03       		.byte	0x3
+ 46595 f801 91       		.byte	0x91
+ 46596 f802 F07B     		.sleb128 -528
+ 46597 f804 00       		.byte	0x0
+ 46598 f805 31       		.uleb128 0x31
+ 46599 f806 750D0000 		.long	0xd75
+ 46600 f80a 00000000 		.quad	.LBB4316
+ 46600      00000000 
+ 46601 f812 00000000 		.quad	.LBE4316
+ 46601      00000000 
+ 46602 f81a 02       		.byte	0x2
+ 46603 f81b 5903     		.value	0x359
+ 46604 f81d 34F80000 		.long	0xf834
+ 46605 f821 32       		.uleb128 0x32
+ 46606 f822 930D0000 		.long	0xd93
+ 46607 f826 03       		.byte	0x3
+ 46608 f827 91       		.byte	0x91
+ 46609 f828 8C7C     		.sleb128 -500
+ 46610 f82a 32       		.uleb128 0x32
+ 46611 f82b 870D0000 		.long	0xd87
+ 46612 f82f 03       		.byte	0x3
+ 46613 f830 91       		.byte	0x91
+ 46614 f831 907C     		.sleb128 -496
+ 46615 f833 00       		.byte	0x0
+ 46616 f834 31       		.uleb128 0x31
+ 46617 f835 4F0D0000 		.long	0xd4f
+ 46618 f839 00000000 		.quad	.LBB4318
+ 46618      00000000 
+ 46619 f841 00000000 		.quad	.LBE4318
+ 46619      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1144
+
+
+ 46620 f849 02       		.byte	0x2
+ 46621 f84a 5B03     		.value	0x35b
+ 46622 f84c 63F80000 		.long	0xf863
+ 46623 f850 32       		.uleb128 0x32
+ 46624 f851 6A0D0000 		.long	0xd6a
+ 46625 f855 03       		.byte	0x3
+ 46626 f856 91       		.byte	0x91
+ 46627 f857 A07C     		.sleb128 -480
+ 46628 f859 32       		.uleb128 0x32
+ 46629 f85a 600D0000 		.long	0xd60
+ 46630 f85e 03       		.byte	0x3
+ 46631 f85f 91       		.byte	0x91
+ 46632 f860 B07C     		.sleb128 -464
+ 46633 f862 00       		.byte	0x0
+ 46634 f863 31       		.uleb128 0x31
+ 46635 f864 A00D0000 		.long	0xda0
+ 46636 f868 00000000 		.quad	.LBB4320
+ 46636      00000000 
+ 46637 f870 00000000 		.quad	.LBE4320
+ 46637      00000000 
+ 46638 f878 02       		.byte	0x2
+ 46639 f879 6403     		.value	0x364
+ 46640 f87b BDF80000 		.long	0xf8bd
+ 46641 f87f 32       		.uleb128 0x32
+ 46642 f880 BE0D0000 		.long	0xdbe
+ 46643 f884 03       		.byte	0x3
+ 46644 f885 91       		.byte	0x91
+ 46645 f886 C07C     		.sleb128 -448
+ 46646 f888 32       		.uleb128 0x32
+ 46647 f889 B20D0000 		.long	0xdb2
+ 46648 f88d 03       		.byte	0x3
+ 46649 f88e 91       		.byte	0x91
+ 46650 f88f D07C     		.sleb128 -432
+ 46651 f891 35       		.uleb128 0x35
+ 46652 f892 CB0D0000 		.long	0xdcb
+ 46653 f896 00000000 		.quad	.LBB4322
+ 46653      00000000 
+ 46654 f89e 00000000 		.quad	.LBE4322
+ 46654      00000000 
+ 46655 f8a6 02       		.byte	0x2
+ 46656 f8a7 7501     		.value	0x175
+ 46657 f8a9 32       		.uleb128 0x32
+ 46658 f8aa E90D0000 		.long	0xde9
+ 46659 f8ae 03       		.byte	0x3
+ 46660 f8af 91       		.byte	0x91
+ 46661 f8b0 E07C     		.sleb128 -416
+ 46662 f8b2 32       		.uleb128 0x32
+ 46663 f8b3 DD0D0000 		.long	0xddd
+ 46664 f8b7 03       		.byte	0x3
+ 46665 f8b8 91       		.byte	0x91
+ 46666 f8b9 F07C     		.sleb128 -400
+ 46667 f8bb 00       		.byte	0x0
+ 46668 f8bc 00       		.byte	0x0
+ 46669 f8bd 31       		.uleb128 0x31
+ 46670 f8be FB0D0000 		.long	0xdfb
+ 46671 f8c2 00000000 		.quad	.LBB4324
+ 46671      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1145
+
+
+ 46672 f8ca 00000000 		.quad	.LBE4324
+ 46672      00000000 
+ 46673 f8d2 02       		.byte	0x2
+ 46674 f8d3 6603     		.value	0x366
+ 46675 f8d5 ECF80000 		.long	0xf8ec
+ 46676 f8d9 32       		.uleb128 0x32
+ 46677 f8da 160E0000 		.long	0xe16
+ 46678 f8de 03       		.byte	0x3
+ 46679 f8df 91       		.byte	0x91
+ 46680 f8e0 807D     		.sleb128 -384
+ 46681 f8e2 32       		.uleb128 0x32
+ 46682 f8e3 0C0E0000 		.long	0xe0c
+ 46683 f8e7 03       		.byte	0x3
+ 46684 f8e8 91       		.byte	0x91
+ 46685 f8e9 907D     		.sleb128 -368
+ 46686 f8eb 00       		.byte	0x0
+ 46687 f8ec 31       		.uleb128 0x31
+ 46688 f8ed A00D0000 		.long	0xda0
+ 46689 f8f1 00000000 		.quad	.LBB4326
+ 46689      00000000 
+ 46690 f8f9 00000000 		.quad	.LBE4326
+ 46690      00000000 
+ 46691 f901 02       		.byte	0x2
+ 46692 f902 6803     		.value	0x368
+ 46693 f904 46F90000 		.long	0xf946
+ 46694 f908 32       		.uleb128 0x32
+ 46695 f909 BE0D0000 		.long	0xdbe
+ 46696 f90d 03       		.byte	0x3
+ 46697 f90e 91       		.byte	0x91
+ 46698 f90f A07D     		.sleb128 -352
+ 46699 f911 32       		.uleb128 0x32
+ 46700 f912 B20D0000 		.long	0xdb2
+ 46701 f916 03       		.byte	0x3
+ 46702 f917 91       		.byte	0x91
+ 46703 f918 B07D     		.sleb128 -336
+ 46704 f91a 35       		.uleb128 0x35
+ 46705 f91b CB0D0000 		.long	0xdcb
+ 46706 f91f 00000000 		.quad	.LBB4328
+ 46706      00000000 
+ 46707 f927 00000000 		.quad	.LBE4328
+ 46707      00000000 
+ 46708 f92f 02       		.byte	0x2
+ 46709 f930 7501     		.value	0x175
+ 46710 f932 32       		.uleb128 0x32
+ 46711 f933 E90D0000 		.long	0xde9
+ 46712 f937 03       		.byte	0x3
+ 46713 f938 91       		.byte	0x91
+ 46714 f939 C07D     		.sleb128 -320
+ 46715 f93b 32       		.uleb128 0x32
+ 46716 f93c DD0D0000 		.long	0xddd
+ 46717 f940 03       		.byte	0x3
+ 46718 f941 91       		.byte	0x91
+ 46719 f942 D07D     		.sleb128 -304
+ 46720 f944 00       		.byte	0x0
+ 46721 f945 00       		.byte	0x0
+ 46722 f946 31       		.uleb128 0x31
+ 46723 f947 FB0D0000 		.long	0xdfb
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1146
+
+
+ 46724 f94b 00000000 		.quad	.LBB4330
+ 46724      00000000 
+ 46725 f953 00000000 		.quad	.LBE4330
+ 46725      00000000 
+ 46726 f95b 02       		.byte	0x2
+ 46727 f95c 6A03     		.value	0x36a
+ 46728 f95e 75F90000 		.long	0xf975
+ 46729 f962 32       		.uleb128 0x32
+ 46730 f963 160E0000 		.long	0xe16
+ 46731 f967 03       		.byte	0x3
+ 46732 f968 91       		.byte	0x91
+ 46733 f969 E07D     		.sleb128 -288
+ 46734 f96b 32       		.uleb128 0x32
+ 46735 f96c 0C0E0000 		.long	0xe0c
+ 46736 f970 03       		.byte	0x3
+ 46737 f971 91       		.byte	0x91
+ 46738 f972 F07D     		.sleb128 -272
+ 46739 f974 00       		.byte	0x0
+ 46740 f975 31       		.uleb128 0x31
+ 46741 f976 210E0000 		.long	0xe21
+ 46742 f97a 00000000 		.quad	.LBB4332
+ 46742      00000000 
+ 46743 f982 00000000 		.quad	.LBE4332
+ 46743      00000000 
+ 46744 f98a 02       		.byte	0x2
+ 46745 f98b 6C03     		.value	0x36c
+ 46746 f98d A4F90000 		.long	0xf9a4
+ 46747 f991 32       		.uleb128 0x32
+ 46748 f992 3E0E0000 		.long	0xe3e
+ 46749 f996 03       		.byte	0x3
+ 46750 f997 91       		.byte	0x91
+ 46751 f998 807E     		.sleb128 -256
+ 46752 f99a 32       		.uleb128 0x32
+ 46753 f99b 330E0000 		.long	0xe33
+ 46754 f99f 03       		.byte	0x3
+ 46755 f9a0 91       		.byte	0x91
+ 46756 f9a1 907E     		.sleb128 -240
+ 46757 f9a3 00       		.byte	0x0
+ 46758 f9a4 35       		.uleb128 0x35
+ 46759 f9a5 4F0D0000 		.long	0xd4f
+ 46760 f9a9 00000000 		.quad	.LBB4334
+ 46760      00000000 
+ 46761 f9b1 00000000 		.quad	.LBE4334
+ 46761      00000000 
+ 46762 f9b9 02       		.byte	0x2
+ 46763 f9ba 6E03     		.value	0x36e
+ 46764 f9bc 32       		.uleb128 0x32
+ 46765 f9bd 6A0D0000 		.long	0xd6a
+ 46766 f9c1 03       		.byte	0x3
+ 46767 f9c2 91       		.byte	0x91
+ 46768 f9c3 A07E     		.sleb128 -224
+ 46769 f9c5 32       		.uleb128 0x32
+ 46770 f9c6 600D0000 		.long	0xd60
+ 46771 f9ca 03       		.byte	0x3
+ 46772 f9cb 91       		.byte	0x91
+ 46773 f9cc B07E     		.sleb128 -208
+ 46774 f9ce 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1147
+
+
+ 46775 f9cf 00       		.byte	0x0
+ 46776 f9d0 00       		.byte	0x0
+ 46777 f9d1 00       		.byte	0x0
+ 46778 f9d2 36       		.uleb128 0x36
+ 46779 f9d3 00000000 		.quad	.LBB4336
+ 46779      00000000 
+ 46780 f9db 00000000 		.quad	.LBE4336
+ 46780      00000000 
+ 46781 f9e3 F1F90000 		.long	0xf9f1
+ 46782 f9e7 34       		.uleb128 0x34
+ 46783 f9e8 FFEA0000 		.long	0xeaff
+ 46784 f9ec 03       		.byte	0x3
+ 46785 f9ed 91       		.byte	0x91
+ 46786 f9ee 806E     		.sleb128 -2304
+ 46787 f9f0 00       		.byte	0x0
+ 46788 f9f1 31       		.uleb128 0x31
+ 46789 f9f2 FEE90000 		.long	0xe9fe
+ 46790 f9f6 00000000 		.quad	.LBB4337
+ 46790      00000000 
+ 46791 f9fe 00000000 		.quad	.LBE4337
+ 46791      00000000 
+ 46792 fa06 02       		.byte	0x2
+ 46793 fa07 1308     		.value	0x813
+ 46794 fa09 8EFA0000 		.long	0xfa8e
+ 46795 fa0d 32       		.uleb128 0x32
+ 46796 fa0e 10EA0000 		.long	0xea10
+ 46797 fa12 03       		.byte	0x3
+ 46798 fa13 91       		.byte	0x91
+ 46799 fa14 C07E     		.sleb128 -192
+ 46800 fa16 33       		.uleb128 0x33
+ 46801 fa17 00000000 		.quad	.LBB4338
+ 46801      00000000 
+ 46802 fa1f 00000000 		.quad	.LBE4338
+ 46802      00000000 
+ 46803 fa27 34       		.uleb128 0x34
+ 46804 fa28 1CEA0000 		.long	0xea1c
+ 46805 fa2c 09       		.byte	0x9
+ 46806 fa2d 03       		.byte	0x3
+ 46807 fa2e 00000000 		.quad	ShiftRowTable.7358
+ 46807      00000000 
+ 46808 fa36 35       		.uleb128 0x35
+ 46809 fa37 A00D0000 		.long	0xda0
+ 46810 fa3b 00000000 		.quad	.LBB4339
+ 46810      00000000 
+ 46811 fa43 00000000 		.quad	.LBE4339
+ 46811      00000000 
+ 46812 fa4b 02       		.byte	0x2
+ 46813 fa4c 4502     		.value	0x245
+ 46814 fa4e 32       		.uleb128 0x32
+ 46815 fa4f BE0D0000 		.long	0xdbe
+ 46816 fa53 03       		.byte	0x3
+ 46817 fa54 91       		.byte	0x91
+ 46818 fa55 D07E     		.sleb128 -176
+ 46819 fa57 32       		.uleb128 0x32
+ 46820 fa58 B20D0000 		.long	0xdb2
+ 46821 fa5c 03       		.byte	0x3
+ 46822 fa5d 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1148
+
+
+ 46823 fa5e E07E     		.sleb128 -160
+ 46824 fa60 35       		.uleb128 0x35
+ 46825 fa61 CB0D0000 		.long	0xdcb
+ 46826 fa65 00000000 		.quad	.LBB4341
+ 46826      00000000 
+ 46827 fa6d 00000000 		.quad	.LBE4341
+ 46827      00000000 
+ 46828 fa75 02       		.byte	0x2
+ 46829 fa76 7501     		.value	0x175
+ 46830 fa78 32       		.uleb128 0x32
+ 46831 fa79 E90D0000 		.long	0xde9
+ 46832 fa7d 03       		.byte	0x3
+ 46833 fa7e 91       		.byte	0x91
+ 46834 fa7f F07E     		.sleb128 -144
+ 46835 fa81 32       		.uleb128 0x32
+ 46836 fa82 DD0D0000 		.long	0xddd
+ 46837 fa86 03       		.byte	0x3
+ 46838 fa87 91       		.byte	0x91
+ 46839 fa88 807F     		.sleb128 -128
+ 46840 fa8a 00       		.byte	0x0
+ 46841 fa8b 00       		.byte	0x0
+ 46842 fa8c 00       		.byte	0x0
+ 46843 fa8d 00       		.byte	0x0
+ 46844 fa8e 36       		.uleb128 0x36
+ 46845 fa8f 00000000 		.quad	.LBB4343
+ 46845      00000000 
+ 46846 fa97 00000000 		.quad	.LBE4343
+ 46846      00000000 
+ 46847 fa9f ADFA0000 		.long	0xfaad
+ 46848 faa3 34       		.uleb128 0x34
+ 46849 faa4 0FEB0000 		.long	0xeb0f
+ 46850 faa8 03       		.byte	0x3
+ 46851 faa9 91       		.byte	0x91
+ 46852 faaa F06D     		.sleb128 -2320
+ 46853 faac 00       		.byte	0x0
+ 46854 faad 31       		.uleb128 0x31
+ 46855 faae 34E90000 		.long	0xe934
+ 46856 fab2 00000000 		.quad	.LBB4344
+ 46856      00000000 
+ 46857 faba 00000000 		.quad	.LBE4344
+ 46857      00000000 
+ 46858 fac2 02       		.byte	0x2
+ 46859 fac3 1708     		.value	0x817
+ 46860 fac5 06FB0000 		.long	0xfb06
+ 46861 fac9 32       		.uleb128 0x32
+ 46862 faca 52E90000 		.long	0xe952
+ 46863 face 03       		.byte	0x3
+ 46864 facf 91       		.byte	0x91
+ 46865 fad0 907F     		.sleb128 -112
+ 46866 fad2 32       		.uleb128 0x32
+ 46867 fad3 46E90000 		.long	0xe946
+ 46868 fad7 03       		.byte	0x3
+ 46869 fad8 91       		.byte	0x91
+ 46870 fad9 A07F     		.sleb128 -96
+ 46871 fadb 35       		.uleb128 0x35
+ 46872 fadc 860E0000 		.long	0xe86
+ 46873 fae0 00000000 		.quad	.LBB4346
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1149
+
+
+ 46873      00000000 
+ 46874 fae8 00000000 		.quad	.LBE4346
+ 46874      00000000 
+ 46875 faf0 02       		.byte	0x2
+ 46876 faf1 2302     		.value	0x223
+ 46877 faf3 32       		.uleb128 0x32
+ 46878 faf4 A10E0000 		.long	0xea1
+ 46879 faf8 03       		.byte	0x3
+ 46880 faf9 91       		.byte	0x91
+ 46881 fafa B07F     		.sleb128 -80
+ 46882 fafc 32       		.uleb128 0x32
+ 46883 fafd 970E0000 		.long	0xe97
+ 46884 fb01 02       		.byte	0x2
+ 46885 fb02 91       		.byte	0x91
+ 46886 fb03 40       		.sleb128 -64
+ 46887 fb04 00       		.byte	0x0
+ 46888 fb05 00       		.byte	0x0
+ 46889 fb06 36       		.uleb128 0x36
+ 46890 fb07 00000000 		.quad	.LBB4348
+ 46890      00000000 
+ 46891 fb0f 00000000 		.quad	.LBE4348
+ 46891      00000000 
+ 46892 fb17 25FB0000 		.long	0xfb25
+ 46893 fb1b 34       		.uleb128 0x34
+ 46894 fb1c 1FEB0000 		.long	0xeb1f
+ 46895 fb20 03       		.byte	0x3
+ 46896 fb21 91       		.byte	0x91
+ 46897 fb22 E06D     		.sleb128 -2336
+ 46898 fb24 00       		.byte	0x0
+ 46899 fb25 33       		.uleb128 0x33
+ 46900 fb26 00000000 		.quad	.LBB4349
+ 46900      00000000 
+ 46901 fb2e 00000000 		.quad	.LBE4349
+ 46901      00000000 
+ 46902 fb36 34       		.uleb128 0x34
+ 46903 fb37 2BEB0000 		.long	0xeb2b
+ 46904 fb3b 03       		.byte	0x3
+ 46905 fb3c 91       		.byte	0x91
+ 46906 fb3d D06D     		.sleb128 -2352
+ 46907 fb3f 00       		.byte	0x0
+ 46908 fb40 00       		.byte	0x0
+ 46909 fb41 00       		.byte	0x0
+ 46910 fb42 25       		.uleb128 0x25
+ 46911 fb43 00000000 		.long	.LASF388
+ 46912 fb47 02       		.byte	0x2
+ 46913 fb48 5308     		.value	0x853
+ 46914 fb4a 01       		.byte	0x1
+ 46915 fb4b B3010000 		.long	0x1b3
+ 46916 fb4f 03       		.byte	0x3
+ 46917 fb50 99FB0000 		.long	0xfb99
+ 46918 fb54 26       		.uleb128 0x26
+ 46919 fb55 00000000 		.long	.LASF67
+ 46920 fb59 02       		.byte	0x2
+ 46921 fb5a 5308     		.value	0x853
+ 46922 fb5c B3010000 		.long	0x1b3
+ 46923 fb60 26       		.uleb128 0x26
+ 46924 fb61 00000000 		.long	.LASF65
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1150
+
+
+ 46925 fb65 02       		.byte	0x2
+ 46926 fb66 5308     		.value	0x853
+ 46927 fb68 B3010000 		.long	0x1b3
+ 46928 fb6c 29       		.uleb128 0x29
+ 46929 fb6d 7CFB0000 		.long	0xfb7c
+ 46930 fb71 28       		.uleb128 0x28
+ 46931 fb72 7600     		.string	"v"
+ 46932 fb74 02       		.byte	0x2
+ 46933 fb75 5508     		.value	0x855
+ 46934 fb77 29050000 		.long	0x529
+ 46935 fb7b 00       		.byte	0x0
+ 46936 fb7c 29       		.uleb128 0x29
+ 46937 fb7d 8CFB0000 		.long	0xfb8c
+ 46938 fb81 28       		.uleb128 0x28
+ 46939 fb82 7600     		.string	"v"
+ 46940 fb84 02       		.byte	0x2
+ 46941 fb85 5908     		.value	0x859
+ 46942 fb87 29050000 		.long	0x529
+ 46943 fb8b 00       		.byte	0x0
+ 46944 fb8c 2A       		.uleb128 0x2a
+ 46945 fb8d 28       		.uleb128 0x28
+ 46946 fb8e 7600     		.string	"v"
+ 46947 fb90 02       		.byte	0x2
+ 46948 fb91 5A08     		.value	0x85a
+ 46949 fb93 29050000 		.long	0x529
+ 46950 fb97 00       		.byte	0x0
+ 46951 fb98 00       		.byte	0x0
+ 46952 fb99 25       		.uleb128 0x25
+ 46953 fb9a 00000000 		.long	.LASF389
+ 46954 fb9e 02       		.byte	0x2
+ 46955 fb9f 7008     		.value	0x870
+ 46956 fba1 01       		.byte	0x1
+ 46957 fba2 B3010000 		.long	0x1b3
+ 46958 fba6 03       		.byte	0x3
+ 46959 fba7 38FC0000 		.long	0xfc38
+ 46960 fbab 26       		.uleb128 0x26
+ 46961 fbac 00000000 		.long	.LASF67
+ 46962 fbb0 02       		.byte	0x2
+ 46963 fbb1 7008     		.value	0x870
+ 46964 fbb3 B3010000 		.long	0x1b3
+ 46965 fbb7 26       		.uleb128 0x26
+ 46966 fbb8 00000000 		.long	.LASF65
+ 46967 fbbc 02       		.byte	0x2
+ 46968 fbbd 7108     		.value	0x871
+ 46969 fbbf B3010000 		.long	0x1b3
+ 46970 fbc3 27       		.uleb128 0x27
+ 46971 fbc4 00000000 		.long	.LASF380
+ 46972 fbc8 02       		.byte	0x2
+ 46973 fbc9 7408     		.value	0x874
+ 46974 fbcb B3010000 		.long	0x1b3
+ 46975 fbcf 27       		.uleb128 0x27
+ 46976 fbd0 00000000 		.long	.LASF381
+ 46977 fbd4 02       		.byte	0x2
+ 46978 fbd5 7508     		.value	0x875
+ 46979 fbd7 B3010000 		.long	0x1b3
+ 46980 fbdb 29       		.uleb128 0x29
+ 46981 fbdc EBFB0000 		.long	0xfbeb
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1151
+
+
+ 46982 fbe0 28       		.uleb128 0x28
+ 46983 fbe1 7600     		.string	"v"
+ 46984 fbe3 02       		.byte	0x2
+ 46985 fbe4 7B08     		.value	0x87b
+ 46986 fbe6 29050000 		.long	0x529
+ 46987 fbea 00       		.byte	0x0
+ 46988 fbeb 29       		.uleb128 0x29
+ 46989 fbec FBFB0000 		.long	0xfbfb
+ 46990 fbf0 28       		.uleb128 0x28
+ 46991 fbf1 7600     		.string	"v"
+ 46992 fbf3 02       		.byte	0x2
+ 46993 fbf4 8E08     		.value	0x88e
+ 46994 fbf6 29050000 		.long	0x529
+ 46995 fbfa 00       		.byte	0x0
+ 46996 fbfb 29       		.uleb128 0x29
+ 46997 fbfc 0BFC0000 		.long	0xfc0b
+ 46998 fc00 28       		.uleb128 0x28
+ 46999 fc01 7600     		.string	"v"
+ 47000 fc03 02       		.byte	0x2
+ 47001 fc04 9608     		.value	0x896
+ 47002 fc06 29050000 		.long	0x529
+ 47003 fc0a 00       		.byte	0x0
+ 47004 fc0b 29       		.uleb128 0x29
+ 47005 fc0c 1BFC0000 		.long	0xfc1b
+ 47006 fc10 28       		.uleb128 0x28
+ 47007 fc11 7600     		.string	"v"
+ 47008 fc13 02       		.byte	0x2
+ 47009 fc14 9E08     		.value	0x89e
+ 47010 fc16 29050000 		.long	0x529
+ 47011 fc1a 00       		.byte	0x0
+ 47012 fc1b 29       		.uleb128 0x29
+ 47013 fc1c 2BFC0000 		.long	0xfc2b
+ 47014 fc20 28       		.uleb128 0x28
+ 47015 fc21 7600     		.string	"v"
+ 47016 fc23 02       		.byte	0x2
+ 47017 fc24 A708     		.value	0x8a7
+ 47018 fc26 29050000 		.long	0x529
+ 47019 fc2a 00       		.byte	0x0
+ 47020 fc2b 2A       		.uleb128 0x2a
+ 47021 fc2c 28       		.uleb128 0x28
+ 47022 fc2d 7600     		.string	"v"
+ 47023 fc2f 02       		.byte	0x2
+ 47024 fc30 A908     		.value	0x8a9
+ 47025 fc32 29050000 		.long	0x529
+ 47026 fc36 00       		.byte	0x0
+ 47027 fc37 00       		.byte	0x0
+ 47028 fc38 25       		.uleb128 0x25
+ 47029 fc39 00000000 		.long	.LASF390
+ 47030 fc3d 02       		.byte	0x2
+ 47031 fc3e 8603     		.value	0x386
+ 47032 fc40 01       		.byte	0x1
+ 47033 fc41 B3010000 		.long	0x1b3
+ 47034 fc45 03       		.byte	0x3
+ 47035 fc46 57FC0000 		.long	0xfc57
+ 47036 fc4a 26       		.uleb128 0x26
+ 47037 fc4b 00000000 		.long	.LASF67
+ 47038 fc4f 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1152
+
+
+ 47039 fc50 8603     		.value	0x386
+ 47040 fc52 B3010000 		.long	0x1b3
+ 47041 fc56 00       		.byte	0x0
+ 47042 fc57 25       		.uleb128 0x25
+ 47043 fc58 00000000 		.long	.LASF391
+ 47044 fc5c 02       		.byte	0x2
+ 47045 fc5d 5E02     		.value	0x25e
+ 47046 fc5f 01       		.byte	0x1
+ 47047 fc60 B3010000 		.long	0x1b3
+ 47048 fc64 03       		.byte	0x3
+ 47049 fc65 93FC0000 		.long	0xfc93
+ 47050 fc69 26       		.uleb128 0x26
+ 47051 fc6a 00000000 		.long	.LASF67
+ 47052 fc6e 02       		.byte	0x2
+ 47053 fc6f 5E02     		.value	0x25e
+ 47054 fc71 B3010000 		.long	0x1b3
+ 47055 fc75 2C       		.uleb128 0x2c
+ 47056 fc76 00000000 		.long	.LASF392
+ 47057 fc7a 02       		.byte	0x2
+ 47058 fc7b 6002     		.value	0x260
+ 47059 fc7d 93FC0000 		.long	0xfc93
+ 47060 fc81 10       		.byte	0x10
+ 47061 fc82 00       		.byte	0x0
+ 47062 fc83 0D       		.byte	0xd
+ 47063 fc84 0A       		.byte	0xa
+ 47064 fc85 07       		.byte	0x7
+ 47065 fc86 04       		.byte	0x4
+ 47066 fc87 01       		.byte	0x1
+ 47067 fc88 0E       		.byte	0xe
+ 47068 fc89 0B       		.byte	0xb
+ 47069 fc8a 08       		.byte	0x8
+ 47070 fc8b 05       		.byte	0x5
+ 47071 fc8c 02       		.byte	0x2
+ 47072 fc8d 0F       		.byte	0xf
+ 47073 fc8e 0C       		.byte	0xc
+ 47074 fc8f 09       		.byte	0x9
+ 47075 fc90 06       		.byte	0x6
+ 47076 fc91 03       		.byte	0x3
+ 47077 fc92 00       		.byte	0x0
+ 47078 fc93 06       		.uleb128 0x6
+ 47079 fc94 62040000 		.long	0x462
+ 47080 fc98 25       		.uleb128 0x25
+ 47081 fc99 00000000 		.long	.LASF393
+ 47082 fc9d 02       		.byte	0x2
+ 47083 fc9e BA08     		.value	0x8ba
+ 47084 fca0 01       		.byte	0x1
+ 47085 fca1 B3010000 		.long	0x1b3
+ 47086 fca5 03       		.byte	0x3
+ 47087 fca6 0FFD0000 		.long	0xfd0f
+ 47088 fcaa 26       		.uleb128 0x26
+ 47089 fcab 00000000 		.long	.LASF67
+ 47090 fcaf 02       		.byte	0x2
+ 47091 fcb0 BA08     		.value	0x8ba
+ 47092 fcb2 B3010000 		.long	0x1b3
+ 47093 fcb6 26       		.uleb128 0x26
+ 47094 fcb7 00000000 		.long	.LASF65
+ 47095 fcbb 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1153
+
+
+ 47096 fcbc BB08     		.value	0x8bb
+ 47097 fcbe B3010000 		.long	0x1b3
+ 47098 fcc2 29       		.uleb128 0x29
+ 47099 fcc3 D2FC0000 		.long	0xfcd2
+ 47100 fcc7 28       		.uleb128 0x28
+ 47101 fcc8 7600     		.string	"v"
+ 47102 fcca 02       		.byte	0x2
+ 47103 fccb BD08     		.value	0x8bd
+ 47104 fccd 29050000 		.long	0x529
+ 47105 fcd1 00       		.byte	0x0
+ 47106 fcd2 29       		.uleb128 0x29
+ 47107 fcd3 E2FC0000 		.long	0xfce2
+ 47108 fcd7 28       		.uleb128 0x28
+ 47109 fcd8 7600     		.string	"v"
+ 47110 fcda 02       		.byte	0x2
+ 47111 fcdb C508     		.value	0x8c5
+ 47112 fcdd 29050000 		.long	0x529
+ 47113 fce1 00       		.byte	0x0
+ 47114 fce2 29       		.uleb128 0x29
+ 47115 fce3 F2FC0000 		.long	0xfcf2
+ 47116 fce7 28       		.uleb128 0x28
+ 47117 fce8 7600     		.string	"v"
+ 47118 fcea 02       		.byte	0x2
+ 47119 fceb C908     		.value	0x8c9
+ 47120 fced 29050000 		.long	0x529
+ 47121 fcf1 00       		.byte	0x0
+ 47122 fcf2 29       		.uleb128 0x29
+ 47123 fcf3 02FD0000 		.long	0xfd02
+ 47124 fcf7 28       		.uleb128 0x28
+ 47125 fcf8 7600     		.string	"v"
+ 47126 fcfa 02       		.byte	0x2
+ 47127 fcfb CD08     		.value	0x8cd
+ 47128 fcfd 29050000 		.long	0x529
+ 47129 fd01 00       		.byte	0x0
+ 47130 fd02 2A       		.uleb128 0x2a
+ 47131 fd03 28       		.uleb128 0x28
+ 47132 fd04 7600     		.string	"v"
+ 47133 fd06 02       		.byte	0x2
+ 47134 fd07 CE08     		.value	0x8ce
+ 47135 fd09 29050000 		.long	0x529
+ 47136 fd0d 00       		.byte	0x0
+ 47137 fd0e 00       		.byte	0x0
+ 47138 fd0f 39       		.uleb128 0x39
+ 47139 fd10 00000000 		.long	.LASF394
+ 47140 fd14 02       		.byte	0x2
+ 47141 fd15 DD08     		.value	0x8dd
+ 47142 fd17 01       		.byte	0x1
+ 47143 fd18 B3010000 		.long	0x1b3
+ 47144 fd1c 00000000 		.quad	.LFB659
+ 47144      00000000 
+ 47145 fd24 00000000 		.quad	.LFE659
+ 47145      00000000 
+ 47146 fd2c 00000000 		.long	.LLST9
+ 47147 fd30 E8120100 		.long	0x112e8
+ 47148 fd34 2E       		.uleb128 0x2e
+ 47149 fd35 00000000 		.long	.LASF67
+ 47150 fd39 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1154
+
+
+ 47151 fd3a DD08     		.value	0x8dd
+ 47152 fd3c B3010000 		.long	0x1b3
+ 47153 fd40 03       		.byte	0x3
+ 47154 fd41 91       		.byte	0x91
+ 47155 fd42 D064     		.sleb128 -3504
+ 47156 fd44 2F       		.uleb128 0x2f
+ 47157 fd45 6B657900 		.string	"key"
+ 47158 fd49 02       		.byte	0x2
+ 47159 fd4a DD08     		.value	0x8dd
+ 47160 fd4c 440D0000 		.long	0xd44
+ 47161 fd50 03       		.byte	0x3
+ 47162 fd51 91       		.byte	0x91
+ 47163 fd52 C864     		.sleb128 -3512
+ 47164 fd54 2F       		.uleb128 0x2f
+ 47165 fd55 4E7200   		.string	"Nr"
+ 47166 fd58 02       		.byte	0x2
+ 47167 fd59 DE08     		.value	0x8de
+ 47168 fd5b 78000000 		.long	0x78
+ 47169 fd5f 03       		.byte	0x3
+ 47170 fd60 91       		.byte	0x91
+ 47171 fd61 C464     		.sleb128 -3516
+ 47172 fd63 37       		.uleb128 0x37
+ 47173 fd64 697800   		.string	"ix"
+ 47174 fd67 02       		.byte	0x2
+ 47175 fd68 E008     		.value	0x8e0
+ 47176 fd6a 78000000 		.long	0x78
+ 47177 fd6e 03       		.byte	0x3
+ 47178 fd6f 91       		.byte	0x91
+ 47179 fd70 DC67     		.sleb128 -3108
+ 47180 fd72 31       		.uleb128 0x31
+ 47181 fd73 42FB0000 		.long	0xfb42
+ 47182 fd77 00000000 		.quad	.LBB4551
+ 47182      00000000 
+ 47183 fd7f 00000000 		.quad	.LBE4551
+ 47183      00000000 
+ 47184 fd87 02       		.byte	0x2
+ 47185 fd88 E208     		.value	0x8e2
+ 47186 fd8a 54FE0000 		.long	0xfe54
+ 47187 fd8e 32       		.uleb128 0x32
+ 47188 fd8f 60FB0000 		.long	0xfb60
+ 47189 fd93 03       		.byte	0x3
+ 47190 fd94 91       		.byte	0x91
+ 47191 fd95 E067     		.sleb128 -3104
+ 47192 fd97 32       		.uleb128 0x32
+ 47193 fd98 54FB0000 		.long	0xfb54
+ 47194 fd9c 03       		.byte	0x3
+ 47195 fd9d 91       		.byte	0x91
+ 47196 fd9e F067     		.sleb128 -3088
+ 47197 fda0 36       		.uleb128 0x36
+ 47198 fda1 00000000 		.quad	.LBB4553
+ 47198      00000000 
+ 47199 fda9 00000000 		.quad	.LBE4553
+ 47199      00000000 
+ 47200 fdb1 BFFD0000 		.long	0xfdbf
+ 47201 fdb5 34       		.uleb128 0x34
+ 47202 fdb6 71FB0000 		.long	0xfb71
+ 47203 fdba 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1155
+
+
+ 47204 fdbb 91       		.byte	0x91
+ 47205 fdbc 8065     		.sleb128 -3456
+ 47206 fdbe 00       		.byte	0x0
+ 47207 fdbf 31       		.uleb128 0x31
+ 47208 fdc0 34E90000 		.long	0xe934
+ 47209 fdc4 00000000 		.quad	.LBB4554
+ 47209      00000000 
+ 47210 fdcc 00000000 		.quad	.LBE4554
+ 47210      00000000 
+ 47211 fdd4 02       		.byte	0x2
+ 47212 fdd5 5708     		.value	0x857
+ 47213 fdd7 19FE0000 		.long	0xfe19
+ 47214 fddb 32       		.uleb128 0x32
+ 47215 fddc 52E90000 		.long	0xe952
+ 47216 fde0 03       		.byte	0x3
+ 47217 fde1 91       		.byte	0x91
+ 47218 fde2 8068     		.sleb128 -3072
+ 47219 fde4 32       		.uleb128 0x32
+ 47220 fde5 46E90000 		.long	0xe946
+ 47221 fde9 03       		.byte	0x3
+ 47222 fdea 91       		.byte	0x91
+ 47223 fdeb 9068     		.sleb128 -3056
+ 47224 fded 35       		.uleb128 0x35
+ 47225 fdee 860E0000 		.long	0xe86
+ 47226 fdf2 00000000 		.quad	.LBB4556
+ 47226      00000000 
+ 47227 fdfa 00000000 		.quad	.LBE4556
+ 47227      00000000 
+ 47228 fe02 02       		.byte	0x2
+ 47229 fe03 2302     		.value	0x223
+ 47230 fe05 32       		.uleb128 0x32
+ 47231 fe06 A10E0000 		.long	0xea1
+ 47232 fe0a 03       		.byte	0x3
+ 47233 fe0b 91       		.byte	0x91
+ 47234 fe0c A068     		.sleb128 -3040
+ 47235 fe0e 32       		.uleb128 0x32
+ 47236 fe0f 970E0000 		.long	0xe97
+ 47237 fe13 03       		.byte	0x3
+ 47238 fe14 91       		.byte	0x91
+ 47239 fe15 B068     		.sleb128 -3024
+ 47240 fe17 00       		.byte	0x0
+ 47241 fe18 00       		.byte	0x0
+ 47242 fe19 36       		.uleb128 0x36
+ 47243 fe1a 00000000 		.quad	.LBB4558
+ 47243      00000000 
+ 47244 fe22 00000000 		.quad	.LBE4558
+ 47244      00000000 
+ 47245 fe2a 38FE0000 		.long	0xfe38
+ 47246 fe2e 34       		.uleb128 0x34
+ 47247 fe2f 81FB0000 		.long	0xfb81
+ 47248 fe33 03       		.byte	0x3
+ 47249 fe34 91       		.byte	0x91
+ 47250 fe35 F064     		.sleb128 -3472
+ 47251 fe37 00       		.byte	0x0
+ 47252 fe38 33       		.uleb128 0x33
+ 47253 fe39 00000000 		.quad	.LBB4559
+ 47253      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1156
+
+
+ 47254 fe41 00000000 		.quad	.LBE4559
+ 47254      00000000 
+ 47255 fe49 34       		.uleb128 0x34
+ 47256 fe4a 8DFB0000 		.long	0xfb8d
+ 47257 fe4e 03       		.byte	0x3
+ 47258 fe4f 91       		.byte	0x91
+ 47259 fe50 E064     		.sleb128 -3488
+ 47260 fe52 00       		.byte	0x0
+ 47261 fe53 00       		.byte	0x0
+ 47262 fe54 31       		.uleb128 0x31
+ 47263 fe55 99FB0000 		.long	0xfb99
+ 47264 fe59 00000000 		.quad	.LBB4560
+ 47264      00000000 
+ 47265 fe61 00000000 		.quad	.LBE4560
+ 47265      00000000 
+ 47266 fe69 02       		.byte	0x2
+ 47267 fe6a E508     		.value	0x8e5
+ 47268 fe6c A60E0100 		.long	0x10ea6
+ 47269 fe70 32       		.uleb128 0x32
+ 47270 fe71 B7FB0000 		.long	0xfbb7
+ 47271 fe75 03       		.byte	0x3
+ 47272 fe76 91       		.byte	0x91
+ 47273 fe77 C068     		.sleb128 -3008
+ 47274 fe79 32       		.uleb128 0x32
+ 47275 fe7a ABFB0000 		.long	0xfbab
+ 47276 fe7e 03       		.byte	0x3
+ 47277 fe7f 91       		.byte	0x91
+ 47278 fe80 D068     		.sleb128 -2992
+ 47279 fe82 33       		.uleb128 0x33
+ 47280 fe83 00000000 		.quad	.LBB4561
+ 47280      00000000 
+ 47281 fe8b 00000000 		.quad	.LBE4561
+ 47281      00000000 
+ 47282 fe93 34       		.uleb128 0x34
+ 47283 fe94 C3FB0000 		.long	0xfbc3
+ 47284 fe98 03       		.byte	0x3
+ 47285 fe99 91       		.byte	0x91
+ 47286 fe9a F068     		.sleb128 -2960
+ 47287 fe9c 34       		.uleb128 0x34
+ 47288 fe9d CFFB0000 		.long	0xfbcf
+ 47289 fea1 03       		.byte	0x3
+ 47290 fea2 91       		.byte	0x91
+ 47291 fea3 E068     		.sleb128 -2976
+ 47292 fea5 36       		.uleb128 0x36
+ 47293 fea6 00000000 		.quad	.LBB4562
+ 47293      00000000 
+ 47294 feae 00000000 		.quad	.LBE4562
+ 47294      00000000 
+ 47295 feb6 C4FE0000 		.long	0xfec4
+ 47296 feba 34       		.uleb128 0x34
+ 47297 febb E0FB0000 		.long	0xfbe0
+ 47298 febf 03       		.byte	0x3
+ 47299 fec0 91       		.byte	0x91
+ 47300 fec1 E065     		.sleb128 -3360
+ 47301 fec3 00       		.byte	0x0
+ 47302 fec4 31       		.uleb128 0x31
+ 47303 fec5 38FC0000 		.long	0xfc38
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1157
+
+
+ 47304 fec9 00000000 		.quad	.LBB4563
+ 47304      00000000 
+ 47305 fed1 00000000 		.quad	.LBE4563
+ 47305      00000000 
+ 47306 fed9 02       		.byte	0x2
+ 47307 feda 8908     		.value	0x889
+ 47308 fedc 4D010100 		.long	0x1014d
+ 47309 fee0 32       		.uleb128 0x32
+ 47310 fee1 4AFC0000 		.long	0xfc4a
+ 47311 fee5 03       		.byte	0x3
+ 47312 fee6 91       		.byte	0x91
+ 47313 fee7 8069     		.sleb128 -2944
+ 47314 fee9 35       		.uleb128 0x35
+ 47315 feea E00C0000 		.long	0xce0
+ 47316 feee 00000000 		.quad	.LBB4565
+ 47316      00000000 
+ 47317 fef6 00000000 		.quad	.LBE4565
+ 47317      00000000 
+ 47318 fefe 02       		.byte	0x2
+ 47319 feff 8803     		.value	0x388
+ 47320 ff01 32       		.uleb128 0x32
+ 47321 ff02 FE0C0000 		.long	0xcfe
+ 47322 ff06 03       		.byte	0x3
+ 47323 ff07 91       		.byte	0x91
+ 47324 ff08 9869     		.sleb128 -2920
+ 47325 ff0a 32       		.uleb128 0x32
+ 47326 ff0b F20C0000 		.long	0xcf2
+ 47327 ff0f 03       		.byte	0x3
+ 47328 ff10 91       		.byte	0x91
+ 47329 ff11 A069     		.sleb128 -2912
+ 47330 ff13 33       		.uleb128 0x33
+ 47331 ff14 00000000 		.quad	.LBB4566
+ 47331      00000000 
+ 47332 ff1c 00000000 		.quad	.LBE4566
+ 47332      00000000 
+ 47333 ff24 34       		.uleb128 0x34
+ 47334 ff25 0A0D0000 		.long	0xd0a
+ 47335 ff29 03       		.byte	0x3
+ 47336 ff2a 91       		.byte	0x91
+ 47337 ff2b F069     		.sleb128 -2832
+ 47338 ff2d 34       		.uleb128 0x34
+ 47339 ff2e 150D0000 		.long	0xd15
+ 47340 ff32 03       		.byte	0x3
+ 47341 ff33 91       		.byte	0x91
+ 47342 ff34 E069     		.sleb128 -2848
+ 47343 ff36 34       		.uleb128 0x34
+ 47344 ff37 200D0000 		.long	0xd20
+ 47345 ff3b 03       		.byte	0x3
+ 47346 ff3c 91       		.byte	0x91
+ 47347 ff3d D069     		.sleb128 -2864
+ 47348 ff3f 34       		.uleb128 0x34
+ 47349 ff40 2C0D0000 		.long	0xd2c
+ 47350 ff44 03       		.byte	0x3
+ 47351 ff45 91       		.byte	0x91
+ 47352 ff46 C069     		.sleb128 -2880
+ 47353 ff48 34       		.uleb128 0x34
+ 47354 ff49 380D0000 		.long	0xd38
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1158
+
+
+ 47355 ff4d 03       		.byte	0x3
+ 47356 ff4e 91       		.byte	0x91
+ 47357 ff4f BC69     		.sleb128 -2884
+ 47358 ff51 31       		.uleb128 0x31
+ 47359 ff52 4F0D0000 		.long	0xd4f
+ 47360 ff56 00000000 		.quad	.LBB4567
+ 47360      00000000 
+ 47361 ff5e 00000000 		.quad	.LBE4567
+ 47361      00000000 
+ 47362 ff66 02       		.byte	0x2
+ 47363 ff67 5603     		.value	0x356
+ 47364 ff69 80FF0000 		.long	0xff80
+ 47365 ff6d 32       		.uleb128 0x32
+ 47366 ff6e 6A0D0000 		.long	0xd6a
+ 47367 ff72 03       		.byte	0x3
+ 47368 ff73 91       		.byte	0x91
+ 47369 ff74 806A     		.sleb128 -2816
+ 47370 ff76 32       		.uleb128 0x32
+ 47371 ff77 600D0000 		.long	0xd60
+ 47372 ff7b 03       		.byte	0x3
+ 47373 ff7c 91       		.byte	0x91
+ 47374 ff7d 906A     		.sleb128 -2800
+ 47375 ff7f 00       		.byte	0x0
+ 47376 ff80 31       		.uleb128 0x31
+ 47377 ff81 750D0000 		.long	0xd75
+ 47378 ff85 00000000 		.quad	.LBB4569
+ 47378      00000000 
+ 47379 ff8d 00000000 		.quad	.LBE4569
+ 47379      00000000 
+ 47380 ff95 02       		.byte	0x2
+ 47381 ff96 5903     		.value	0x359
+ 47382 ff98 AFFF0000 		.long	0xffaf
+ 47383 ff9c 32       		.uleb128 0x32
+ 47384 ff9d 930D0000 		.long	0xd93
+ 47385 ffa1 03       		.byte	0x3
+ 47386 ffa2 91       		.byte	0x91
+ 47387 ffa3 AC6A     		.sleb128 -2772
+ 47388 ffa5 32       		.uleb128 0x32
+ 47389 ffa6 870D0000 		.long	0xd87
+ 47390 ffaa 03       		.byte	0x3
+ 47391 ffab 91       		.byte	0x91
+ 47392 ffac B06A     		.sleb128 -2768
+ 47393 ffae 00       		.byte	0x0
+ 47394 ffaf 31       		.uleb128 0x31
+ 47395 ffb0 4F0D0000 		.long	0xd4f
+ 47396 ffb4 00000000 		.quad	.LBB4571
+ 47396      00000000 
+ 47397 ffbc 00000000 		.quad	.LBE4571
+ 47397      00000000 
+ 47398 ffc4 02       		.byte	0x2
+ 47399 ffc5 5B03     		.value	0x35b
+ 47400 ffc7 DEFF0000 		.long	0xffde
+ 47401 ffcb 32       		.uleb128 0x32
+ 47402 ffcc 6A0D0000 		.long	0xd6a
+ 47403 ffd0 03       		.byte	0x3
+ 47404 ffd1 91       		.byte	0x91
+ 47405 ffd2 C06A     		.sleb128 -2752
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1159
+
+
+ 47406 ffd4 32       		.uleb128 0x32
+ 47407 ffd5 600D0000 		.long	0xd60
+ 47408 ffd9 03       		.byte	0x3
+ 47409 ffda 91       		.byte	0x91
+ 47410 ffdb D06A     		.sleb128 -2736
+ 47411 ffdd 00       		.byte	0x0
+ 47412 ffde 31       		.uleb128 0x31
+ 47413 ffdf A00D0000 		.long	0xda0
+ 47414 ffe3 00000000 		.quad	.LBB4573
+ 47414      00000000 
+ 47415 ffeb 00000000 		.quad	.LBE4573
+ 47415      00000000 
+ 47416 fff3 02       		.byte	0x2
+ 47417 fff4 6403     		.value	0x364
+ 47418 fff6 38000100 		.long	0x10038
+ 47419 fffa 32       		.uleb128 0x32
+ 47420 fffb BE0D0000 		.long	0xdbe
+ 47421 ffff 03       		.byte	0x3
+ 47422 10000 91       		.byte	0x91
+ 47423 10001 E06A     		.sleb128 -2720
+ 47424 10003 32       		.uleb128 0x32
+ 47425 10004 B20D0000 		.long	0xdb2
+ 47426 10008 03       		.byte	0x3
+ 47427 10009 91       		.byte	0x91
+ 47428 1000a F06A     		.sleb128 -2704
+ 47429 1000c 35       		.uleb128 0x35
+ 47430 1000d CB0D0000 		.long	0xdcb
+ 47431 10011 00000000 		.quad	.LBB4575
+ 47431      00000000 
+ 47432 10019 00000000 		.quad	.LBE4575
+ 47432      00000000 
+ 47433 10021 02       		.byte	0x2
+ 47434 10022 7501     		.value	0x175
+ 47435 10024 32       		.uleb128 0x32
+ 47436 10025 E90D0000 		.long	0xde9
+ 47437 10029 03       		.byte	0x3
+ 47438 1002a 91       		.byte	0x91
+ 47439 1002b 806B     		.sleb128 -2688
+ 47440 1002d 32       		.uleb128 0x32
+ 47441 1002e DD0D0000 		.long	0xddd
+ 47442 10032 03       		.byte	0x3
+ 47443 10033 91       		.byte	0x91
+ 47444 10034 906B     		.sleb128 -2672
+ 47445 10036 00       		.byte	0x0
+ 47446 10037 00       		.byte	0x0
+ 47447 10038 31       		.uleb128 0x31
+ 47448 10039 FB0D0000 		.long	0xdfb
+ 47449 1003d 00000000 		.quad	.LBB4577
+ 47449      00000000 
+ 47450 10045 00000000 		.quad	.LBE4577
+ 47450      00000000 
+ 47451 1004d 02       		.byte	0x2
+ 47452 1004e 6603     		.value	0x366
+ 47453 10050 67000100 		.long	0x10067
+ 47454 10054 32       		.uleb128 0x32
+ 47455 10055 160E0000 		.long	0xe16
+ 47456 10059 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1160
+
+
+ 47457 1005a 91       		.byte	0x91
+ 47458 1005b A06B     		.sleb128 -2656
+ 47459 1005d 32       		.uleb128 0x32
+ 47460 1005e 0C0E0000 		.long	0xe0c
+ 47461 10062 03       		.byte	0x3
+ 47462 10063 91       		.byte	0x91
+ 47463 10064 B06B     		.sleb128 -2640
+ 47464 10066 00       		.byte	0x0
+ 47465 10067 31       		.uleb128 0x31
+ 47466 10068 A00D0000 		.long	0xda0
+ 47467 1006c 00000000 		.quad	.LBB4579
+ 47467      00000000 
+ 47468 10074 00000000 		.quad	.LBE4579
+ 47468      00000000 
+ 47469 1007c 02       		.byte	0x2
+ 47470 1007d 6803     		.value	0x368
+ 47471 1007f C1000100 		.long	0x100c1
+ 47472 10083 32       		.uleb128 0x32
+ 47473 10084 BE0D0000 		.long	0xdbe
+ 47474 10088 03       		.byte	0x3
+ 47475 10089 91       		.byte	0x91
+ 47476 1008a C06B     		.sleb128 -2624
+ 47477 1008c 32       		.uleb128 0x32
+ 47478 1008d B20D0000 		.long	0xdb2
+ 47479 10091 03       		.byte	0x3
+ 47480 10092 91       		.byte	0x91
+ 47481 10093 D06B     		.sleb128 -2608
+ 47482 10095 35       		.uleb128 0x35
+ 47483 10096 CB0D0000 		.long	0xdcb
+ 47484 1009a 00000000 		.quad	.LBB4581
+ 47484      00000000 
+ 47485 100a2 00000000 		.quad	.LBE4581
+ 47485      00000000 
+ 47486 100aa 02       		.byte	0x2
+ 47487 100ab 7501     		.value	0x175
+ 47488 100ad 32       		.uleb128 0x32
+ 47489 100ae E90D0000 		.long	0xde9
+ 47490 100b2 03       		.byte	0x3
+ 47491 100b3 91       		.byte	0x91
+ 47492 100b4 E06B     		.sleb128 -2592
+ 47493 100b6 32       		.uleb128 0x32
+ 47494 100b7 DD0D0000 		.long	0xddd
+ 47495 100bb 03       		.byte	0x3
+ 47496 100bc 91       		.byte	0x91
+ 47497 100bd F06B     		.sleb128 -2576
+ 47498 100bf 00       		.byte	0x0
+ 47499 100c0 00       		.byte	0x0
+ 47500 100c1 31       		.uleb128 0x31
+ 47501 100c2 FB0D0000 		.long	0xdfb
+ 47502 100c6 00000000 		.quad	.LBB4583
+ 47502      00000000 
+ 47503 100ce 00000000 		.quad	.LBE4583
+ 47503      00000000 
+ 47504 100d6 02       		.byte	0x2
+ 47505 100d7 6A03     		.value	0x36a
+ 47506 100d9 F0000100 		.long	0x100f0
+ 47507 100dd 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1161
+
+
+ 47508 100de 160E0000 		.long	0xe16
+ 47509 100e2 03       		.byte	0x3
+ 47510 100e3 91       		.byte	0x91
+ 47511 100e4 806C     		.sleb128 -2560
+ 47512 100e6 32       		.uleb128 0x32
+ 47513 100e7 0C0E0000 		.long	0xe0c
+ 47514 100eb 03       		.byte	0x3
+ 47515 100ec 91       		.byte	0x91
+ 47516 100ed 906C     		.sleb128 -2544
+ 47517 100ef 00       		.byte	0x0
+ 47518 100f0 31       		.uleb128 0x31
+ 47519 100f1 210E0000 		.long	0xe21
+ 47520 100f5 00000000 		.quad	.LBB4585
+ 47520      00000000 
+ 47521 100fd 00000000 		.quad	.LBE4585
+ 47521      00000000 
+ 47522 10105 02       		.byte	0x2
+ 47523 10106 6C03     		.value	0x36c
+ 47524 10108 1F010100 		.long	0x1011f
+ 47525 1010c 32       		.uleb128 0x32
+ 47526 1010d 3E0E0000 		.long	0xe3e
+ 47527 10111 03       		.byte	0x3
+ 47528 10112 91       		.byte	0x91
+ 47529 10113 A06C     		.sleb128 -2528
+ 47530 10115 32       		.uleb128 0x32
+ 47531 10116 330E0000 		.long	0xe33
+ 47532 1011a 03       		.byte	0x3
+ 47533 1011b 91       		.byte	0x91
+ 47534 1011c B06C     		.sleb128 -2512
+ 47535 1011e 00       		.byte	0x0
+ 47536 1011f 35       		.uleb128 0x35
+ 47537 10120 4F0D0000 		.long	0xd4f
+ 47538 10124 00000000 		.quad	.LBB4587
+ 47538      00000000 
+ 47539 1012c 00000000 		.quad	.LBE4587
+ 47539      00000000 
+ 47540 10134 02       		.byte	0x2
+ 47541 10135 6E03     		.value	0x36e
+ 47542 10137 32       		.uleb128 0x32
+ 47543 10138 6A0D0000 		.long	0xd6a
+ 47544 1013c 03       		.byte	0x3
+ 47545 1013d 91       		.byte	0x91
+ 47546 1013e C06C     		.sleb128 -2496
+ 47547 10140 32       		.uleb128 0x32
+ 47548 10141 600D0000 		.long	0xd60
+ 47549 10145 03       		.byte	0x3
+ 47550 10146 91       		.byte	0x91
+ 47551 10147 D06C     		.sleb128 -2480
+ 47552 10149 00       		.byte	0x0
+ 47553 1014a 00       		.byte	0x0
+ 47554 1014b 00       		.byte	0x0
+ 47555 1014c 00       		.byte	0x0
+ 47556 1014d 36       		.uleb128 0x36
+ 47557 1014e 00000000 		.quad	.LBB4589
+ 47557      00000000 
+ 47558 10156 00000000 		.quad	.LBE4589
+ 47558      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1162
+
+
+ 47559 1015e 6C010100 		.long	0x1016c
+ 47560 10162 34       		.uleb128 0x34
+ 47561 10163 F0FB0000 		.long	0xfbf0
+ 47562 10167 03       		.byte	0x3
+ 47563 10168 91       		.byte	0x91
+ 47564 10169 D065     		.sleb128 -3376
+ 47565 1016b 00       		.byte	0x0
+ 47566 1016c 31       		.uleb128 0x31
+ 47567 1016d 57FC0000 		.long	0xfc57
+ 47568 10171 00000000 		.quad	.LBB4590
+ 47568      00000000 
+ 47569 10179 00000000 		.quad	.LBE4590
+ 47569      00000000 
+ 47570 10181 02       		.byte	0x2
+ 47571 10182 9108     		.value	0x891
+ 47572 10184 09020100 		.long	0x10209
+ 47573 10188 32       		.uleb128 0x32
+ 47574 10189 69FC0000 		.long	0xfc69
+ 47575 1018d 03       		.byte	0x3
+ 47576 1018e 91       		.byte	0x91
+ 47577 1018f E06C     		.sleb128 -2464
+ 47578 10191 33       		.uleb128 0x33
+ 47579 10192 00000000 		.quad	.LBB4591
+ 47579      00000000 
+ 47580 1019a 00000000 		.quad	.LBE4591
+ 47580      00000000 
+ 47581 101a2 34       		.uleb128 0x34
+ 47582 101a3 75FC0000 		.long	0xfc75
+ 47583 101a7 09       		.byte	0x9
+ 47584 101a8 03       		.byte	0x3
+ 47585 101a9 00000000 		.quad	InvShiftRowTable.7367
+ 47585      00000000 
+ 47586 101b1 35       		.uleb128 0x35
+ 47587 101b2 A00D0000 		.long	0xda0
+ 47588 101b6 00000000 		.quad	.LBB4592
+ 47588      00000000 
+ 47589 101be 00000000 		.quad	.LBE4592
+ 47589      00000000 
+ 47590 101c6 02       		.byte	0x2
+ 47591 101c7 6402     		.value	0x264
+ 47592 101c9 32       		.uleb128 0x32
+ 47593 101ca BE0D0000 		.long	0xdbe
+ 47594 101ce 03       		.byte	0x3
+ 47595 101cf 91       		.byte	0x91
+ 47596 101d0 F06C     		.sleb128 -2448
+ 47597 101d2 32       		.uleb128 0x32
+ 47598 101d3 B20D0000 		.long	0xdb2
+ 47599 101d7 03       		.byte	0x3
+ 47600 101d8 91       		.byte	0x91
+ 47601 101d9 806D     		.sleb128 -2432
+ 47602 101db 35       		.uleb128 0x35
+ 47603 101dc CB0D0000 		.long	0xdcb
+ 47604 101e0 00000000 		.quad	.LBB4594
+ 47604      00000000 
+ 47605 101e8 00000000 		.quad	.LBE4594
+ 47605      00000000 
+ 47606 101f0 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1163
+
+
+ 47607 101f1 7501     		.value	0x175
+ 47608 101f3 32       		.uleb128 0x32
+ 47609 101f4 E90D0000 		.long	0xde9
+ 47610 101f8 03       		.byte	0x3
+ 47611 101f9 91       		.byte	0x91
+ 47612 101fa 906D     		.sleb128 -2416
+ 47613 101fc 32       		.uleb128 0x32
+ 47614 101fd DD0D0000 		.long	0xddd
+ 47615 10201 03       		.byte	0x3
+ 47616 10202 91       		.byte	0x91
+ 47617 10203 A06D     		.sleb128 -2400
+ 47618 10205 00       		.byte	0x0
+ 47619 10206 00       		.byte	0x0
+ 47620 10207 00       		.byte	0x0
+ 47621 10208 00       		.byte	0x0
+ 47622 10209 36       		.uleb128 0x36
+ 47623 1020a 00000000 		.quad	.LBB4596
+ 47623      00000000 
+ 47624 10212 00000000 		.quad	.LBE4596
+ 47624      00000000 
+ 47625 1021a 28020100 		.long	0x10228
+ 47626 1021e 34       		.uleb128 0x34
+ 47627 1021f 00FC0000 		.long	0xfc00
+ 47628 10223 03       		.byte	0x3
+ 47629 10224 91       		.byte	0x91
+ 47630 10225 C065     		.sleb128 -3392
+ 47631 10227 00       		.byte	0x0
+ 47632 10228 31       		.uleb128 0x31
+ 47633 10229 0AD90000 		.long	0xd90a
+ 47634 1022d 00000000 		.quad	.LBB4597
+ 47634      00000000 
+ 47635 10235 00000000 		.quad	.LBE4597
+ 47635      00000000 
+ 47636 1023d 02       		.byte	0x2
+ 47637 1023e 9908     		.value	0x899
+ 47638 10240 F10D0100 		.long	0x10df1
+ 47639 10244 32       		.uleb128 0x32
+ 47640 10245 1CD90000 		.long	0xd91c
+ 47641 10249 03       		.byte	0x3
+ 47642 1024a 91       		.byte	0x91
+ 47643 1024b B06D     		.sleb128 -2384
+ 47644 1024d 33       		.uleb128 0x33
+ 47645 1024e 00000000 		.quad	.LBB4598
+ 47645      00000000 
+ 47646 10256 00000000 		.quad	.LBE4598
+ 47646      00000000 
+ 47647 1025e 34       		.uleb128 0x34
+ 47648 1025f 28D90000 		.long	0xd928
+ 47649 10263 03       		.byte	0x3
+ 47650 10264 76       		.byte	0x76
+ 47651 10265 C064     		.sleb128 -3520
+ 47652 10267 34       		.uleb128 0x34
+ 47653 10268 33D90000 		.long	0xd933
+ 47654 1026c 03       		.byte	0x3
+ 47655 1026d 76       		.byte	0x76
+ 47656 1026e B064     		.sleb128 -3536
+ 47657 10270 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1164
+
+
+ 47658 10271 3ED90000 		.long	0xd93e
+ 47659 10275 03       		.byte	0x3
+ 47660 10276 76       		.byte	0x76
+ 47661 10277 A064     		.sleb128 -3552
+ 47662 10279 34       		.uleb128 0x34
+ 47663 1027a 49D90000 		.long	0xd949
+ 47664 1027e 03       		.byte	0x3
+ 47665 1027f 76       		.byte	0x76
+ 47666 10280 9064     		.sleb128 -3568
+ 47667 10282 34       		.uleb128 0x34
+ 47668 10283 54D90000 		.long	0xd954
+ 47669 10287 03       		.byte	0x3
+ 47670 10288 76       		.byte	0x76
+ 47671 10289 8064     		.sleb128 -3584
+ 47672 1028b 34       		.uleb128 0x34
+ 47673 1028c 5FD90000 		.long	0xd95f
+ 47674 10290 03       		.byte	0x3
+ 47675 10291 76       		.byte	0x76
+ 47676 10292 F063     		.sleb128 -3600
+ 47677 10294 31       		.uleb128 0x31
+ 47678 10295 4A0E0000 		.long	0xe4a
+ 47679 10299 00000000 		.quad	.LBB4599
+ 47679      00000000 
+ 47680 102a1 00000000 		.quad	.LBE4599
+ 47680      00000000 
+ 47681 102a9 02       		.byte	0x2
+ 47682 102aa 5204     		.value	0x452
+ 47683 102ac 31030100 		.long	0x10331
+ 47684 102b0 32       		.uleb128 0x32
+ 47685 102b1 5C0E0000 		.long	0xe5c
+ 47686 102b5 03       		.byte	0x3
+ 47687 102b6 91       		.byte	0x91
+ 47688 102b7 C06D     		.sleb128 -2368
+ 47689 102b9 33       		.uleb128 0x33
+ 47690 102ba 00000000 		.quad	.LBB4600
+ 47690      00000000 
+ 47691 102c2 00000000 		.quad	.LBE4600
+ 47691      00000000 
+ 47692 102ca 34       		.uleb128 0x34
+ 47693 102cb 680E0000 		.long	0xe68
+ 47694 102cf 09       		.byte	0x9
+ 47695 102d0 03       		.byte	0x3
+ 47696 102d1 00000000 		.quad	ShiftRowTable.7385
+ 47696      00000000 
+ 47697 102d9 35       		.uleb128 0x35
+ 47698 102da A00D0000 		.long	0xda0
+ 47699 102de 00000000 		.quad	.LBB4601
+ 47699      00000000 
+ 47700 102e6 00000000 		.quad	.LBE4601
+ 47700      00000000 
+ 47701 102ee 02       		.byte	0x2
+ 47702 102ef 9B02     		.value	0x29b
+ 47703 102f1 32       		.uleb128 0x32
+ 47704 102f2 BE0D0000 		.long	0xdbe
+ 47705 102f6 03       		.byte	0x3
+ 47706 102f7 91       		.byte	0x91
+ 47707 102f8 D06D     		.sleb128 -2352
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1165
+
+
+ 47708 102fa 32       		.uleb128 0x32
+ 47709 102fb B20D0000 		.long	0xdb2
+ 47710 102ff 03       		.byte	0x3
+ 47711 10300 91       		.byte	0x91
+ 47712 10301 E06D     		.sleb128 -2336
+ 47713 10303 35       		.uleb128 0x35
+ 47714 10304 CB0D0000 		.long	0xdcb
+ 47715 10308 00000000 		.quad	.LBB4603
+ 47715      00000000 
+ 47716 10310 00000000 		.quad	.LBE4603
+ 47716      00000000 
+ 47717 10318 02       		.byte	0x2
+ 47718 10319 7501     		.value	0x175
+ 47719 1031b 32       		.uleb128 0x32
+ 47720 1031c E90D0000 		.long	0xde9
+ 47721 10320 03       		.byte	0x3
+ 47722 10321 91       		.byte	0x91
+ 47723 10322 F06D     		.sleb128 -2320
+ 47724 10324 32       		.uleb128 0x32
+ 47725 10325 DD0D0000 		.long	0xddd
+ 47726 10329 03       		.byte	0x3
+ 47727 1032a 91       		.byte	0x91
+ 47728 1032b 806E     		.sleb128 -2304
+ 47729 1032d 00       		.byte	0x0
+ 47730 1032e 00       		.byte	0x0
+ 47731 1032f 00       		.byte	0x0
+ 47732 10330 00       		.byte	0x0
+ 47733 10331 31       		.uleb128 0x31
+ 47734 10332 4A0E0000 		.long	0xe4a
+ 47735 10336 00000000 		.quad	.LBB4605
+ 47735      00000000 
+ 47736 1033e 00000000 		.quad	.LBE4605
+ 47736      00000000 
+ 47737 10346 02       		.byte	0x2
+ 47738 10347 5304     		.value	0x453
+ 47739 10349 CE030100 		.long	0x103ce
+ 47740 1034d 32       		.uleb128 0x32
+ 47741 1034e 5C0E0000 		.long	0xe5c
+ 47742 10352 03       		.byte	0x3
+ 47743 10353 91       		.byte	0x91
+ 47744 10354 906E     		.sleb128 -2288
+ 47745 10356 33       		.uleb128 0x33
+ 47746 10357 00000000 		.quad	.LBB4606
+ 47746      00000000 
+ 47747 1035f 00000000 		.quad	.LBE4606
+ 47747      00000000 
+ 47748 10367 34       		.uleb128 0x34
+ 47749 10368 680E0000 		.long	0xe68
+ 47750 1036c 09       		.byte	0x9
+ 47751 1036d 03       		.byte	0x3
+ 47752 1036e 00000000 		.quad	ShiftRowTable.7385
+ 47752      00000000 
+ 47753 10376 35       		.uleb128 0x35
+ 47754 10377 A00D0000 		.long	0xda0
+ 47755 1037b 00000000 		.quad	.LBB4607
+ 47755      00000000 
+ 47756 10383 00000000 		.quad	.LBE4607
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1166
+
+
+ 47756      00000000 
+ 47757 1038b 02       		.byte	0x2
+ 47758 1038c 9B02     		.value	0x29b
+ 47759 1038e 32       		.uleb128 0x32
+ 47760 1038f BE0D0000 		.long	0xdbe
+ 47761 10393 03       		.byte	0x3
+ 47762 10394 91       		.byte	0x91
+ 47763 10395 A06E     		.sleb128 -2272
+ 47764 10397 32       		.uleb128 0x32
+ 47765 10398 B20D0000 		.long	0xdb2
+ 47766 1039c 03       		.byte	0x3
+ 47767 1039d 91       		.byte	0x91
+ 47768 1039e B06E     		.sleb128 -2256
+ 47769 103a0 35       		.uleb128 0x35
+ 47770 103a1 CB0D0000 		.long	0xdcb
+ 47771 103a5 00000000 		.quad	.LBB4609
+ 47771      00000000 
+ 47772 103ad 00000000 		.quad	.LBE4609
+ 47772      00000000 
+ 47773 103b5 02       		.byte	0x2
+ 47774 103b6 7501     		.value	0x175
+ 47775 103b8 32       		.uleb128 0x32
+ 47776 103b9 E90D0000 		.long	0xde9
+ 47777 103bd 03       		.byte	0x3
+ 47778 103be 91       		.byte	0x91
+ 47779 103bf C06E     		.sleb128 -2240
+ 47780 103c1 32       		.uleb128 0x32
+ 47781 103c2 DD0D0000 		.long	0xddd
+ 47782 103c6 03       		.byte	0x3
+ 47783 103c7 91       		.byte	0x91
+ 47784 103c8 D06E     		.sleb128 -2224
+ 47785 103ca 00       		.byte	0x0
+ 47786 103cb 00       		.byte	0x0
+ 47787 103cc 00       		.byte	0x0
+ 47788 103cd 00       		.byte	0x0
+ 47789 103ce 31       		.uleb128 0x31
+ 47790 103cf 4A0E0000 		.long	0xe4a
+ 47791 103d3 00000000 		.quad	.LBB4611
+ 47791      00000000 
+ 47792 103db 00000000 		.quad	.LBE4611
+ 47792      00000000 
+ 47793 103e3 02       		.byte	0x2
+ 47794 103e4 5404     		.value	0x454
+ 47795 103e6 6B040100 		.long	0x1046b
+ 47796 103ea 32       		.uleb128 0x32
+ 47797 103eb 5C0E0000 		.long	0xe5c
+ 47798 103ef 03       		.byte	0x3
+ 47799 103f0 91       		.byte	0x91
+ 47800 103f1 E06E     		.sleb128 -2208
+ 47801 103f3 33       		.uleb128 0x33
+ 47802 103f4 00000000 		.quad	.LBB4612
+ 47802      00000000 
+ 47803 103fc 00000000 		.quad	.LBE4612
+ 47803      00000000 
+ 47804 10404 34       		.uleb128 0x34
+ 47805 10405 680E0000 		.long	0xe68
+ 47806 10409 09       		.byte	0x9
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1167
+
+
+ 47807 1040a 03       		.byte	0x3
+ 47808 1040b 00000000 		.quad	ShiftRowTable.7385
+ 47808      00000000 
+ 47809 10413 35       		.uleb128 0x35
+ 47810 10414 A00D0000 		.long	0xda0
+ 47811 10418 00000000 		.quad	.LBB4613
+ 47811      00000000 
+ 47812 10420 00000000 		.quad	.LBE4613
+ 47812      00000000 
+ 47813 10428 02       		.byte	0x2
+ 47814 10429 9B02     		.value	0x29b
+ 47815 1042b 32       		.uleb128 0x32
+ 47816 1042c BE0D0000 		.long	0xdbe
+ 47817 10430 03       		.byte	0x3
+ 47818 10431 91       		.byte	0x91
+ 47819 10432 F06E     		.sleb128 -2192
+ 47820 10434 32       		.uleb128 0x32
+ 47821 10435 B20D0000 		.long	0xdb2
+ 47822 10439 03       		.byte	0x3
+ 47823 1043a 91       		.byte	0x91
+ 47824 1043b 806F     		.sleb128 -2176
+ 47825 1043d 35       		.uleb128 0x35
+ 47826 1043e CB0D0000 		.long	0xdcb
+ 47827 10442 00000000 		.quad	.LBB4615
+ 47827      00000000 
+ 47828 1044a 00000000 		.quad	.LBE4615
+ 47828      00000000 
+ 47829 10452 02       		.byte	0x2
+ 47830 10453 7501     		.value	0x175
+ 47831 10455 32       		.uleb128 0x32
+ 47832 10456 E90D0000 		.long	0xde9
+ 47833 1045a 03       		.byte	0x3
+ 47834 1045b 91       		.byte	0x91
+ 47835 1045c 906F     		.sleb128 -2160
+ 47836 1045e 32       		.uleb128 0x32
+ 47837 1045f DD0D0000 		.long	0xddd
+ 47838 10463 03       		.byte	0x3
+ 47839 10464 91       		.byte	0x91
+ 47840 10465 A06F     		.sleb128 -2144
+ 47841 10467 00       		.byte	0x0
+ 47842 10468 00       		.byte	0x0
+ 47843 10469 00       		.byte	0x0
+ 47844 1046a 00       		.byte	0x0
+ 47845 1046b 31       		.uleb128 0x31
+ 47846 1046c 860E0000 		.long	0xe86
+ 47847 10470 00000000 		.quad	.LBB4617
+ 47847      00000000 
+ 47848 10478 00000000 		.quad	.LBE4617
+ 47848      00000000 
+ 47849 10480 02       		.byte	0x2
+ 47850 10481 5604     		.value	0x456
+ 47851 10483 9A040100 		.long	0x1049a
+ 47852 10487 32       		.uleb128 0x32
+ 47853 10488 A10E0000 		.long	0xea1
+ 47854 1048c 03       		.byte	0x3
+ 47855 1048d 91       		.byte	0x91
+ 47856 1048e B06F     		.sleb128 -2128
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1168
+
+
+ 47857 10490 32       		.uleb128 0x32
+ 47858 10491 970E0000 		.long	0xe97
+ 47859 10495 03       		.byte	0x3
+ 47860 10496 91       		.byte	0x91
+ 47861 10497 C06F     		.sleb128 -2112
+ 47862 10499 00       		.byte	0x0
+ 47863 1049a 31       		.uleb128 0x31
+ 47864 1049b 860E0000 		.long	0xe86
+ 47865 1049f 00000000 		.quad	.LBB4619
+ 47865      00000000 
+ 47866 104a7 00000000 		.quad	.LBE4619
+ 47866      00000000 
+ 47867 104af 02       		.byte	0x2
+ 47868 104b0 5704     		.value	0x457
+ 47869 104b2 C9040100 		.long	0x104c9
+ 47870 104b6 32       		.uleb128 0x32
+ 47871 104b7 A10E0000 		.long	0xea1
+ 47872 104bb 03       		.byte	0x3
+ 47873 104bc 91       		.byte	0x91
+ 47874 104bd D06F     		.sleb128 -2096
+ 47875 104bf 32       		.uleb128 0x32
+ 47876 104c0 970E0000 		.long	0xe97
+ 47877 104c4 03       		.byte	0x3
+ 47878 104c5 91       		.byte	0x91
+ 47879 104c6 E06F     		.sleb128 -2080
+ 47880 104c8 00       		.byte	0x0
+ 47881 104c9 31       		.uleb128 0x31
+ 47882 104ca 860E0000 		.long	0xe86
+ 47883 104ce 00000000 		.quad	.LBB4621
+ 47883      00000000 
+ 47884 104d6 00000000 		.quad	.LBE4621
+ 47884      00000000 
+ 47885 104de 02       		.byte	0x2
+ 47886 104df 5804     		.value	0x458
+ 47887 104e1 F8040100 		.long	0x104f8
+ 47888 104e5 32       		.uleb128 0x32
+ 47889 104e6 A10E0000 		.long	0xea1
+ 47890 104ea 03       		.byte	0x3
+ 47891 104eb 91       		.byte	0x91
+ 47892 104ec F06F     		.sleb128 -2064
+ 47893 104ee 32       		.uleb128 0x32
+ 47894 104ef 970E0000 		.long	0xe97
+ 47895 104f3 03       		.byte	0x3
+ 47896 104f4 91       		.byte	0x91
+ 47897 104f5 8070     		.sleb128 -2048
+ 47898 104f7 00       		.byte	0x0
+ 47899 104f8 31       		.uleb128 0x31
+ 47900 104f9 860E0000 		.long	0xe86
+ 47901 104fd 00000000 		.quad	.LBB4623
+ 47901      00000000 
+ 47902 10505 00000000 		.quad	.LBE4623
+ 47902      00000000 
+ 47903 1050d 02       		.byte	0x2
+ 47904 1050e 5904     		.value	0x459
+ 47905 10510 27050100 		.long	0x10527
+ 47906 10514 32       		.uleb128 0x32
+ 47907 10515 A10E0000 		.long	0xea1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1169
+
+
+ 47908 10519 03       		.byte	0x3
+ 47909 1051a 91       		.byte	0x91
+ 47910 1051b 9070     		.sleb128 -2032
+ 47911 1051d 32       		.uleb128 0x32
+ 47912 1051e 970E0000 		.long	0xe97
+ 47913 10522 03       		.byte	0x3
+ 47914 10523 91       		.byte	0x91
+ 47915 10524 A070     		.sleb128 -2016
+ 47916 10526 00       		.byte	0x0
+ 47917 10527 31       		.uleb128 0x31
+ 47918 10528 860E0000 		.long	0xe86
+ 47919 1052c 00000000 		.quad	.LBB4625
+ 47919      00000000 
+ 47920 10534 00000000 		.quad	.LBE4625
+ 47920      00000000 
+ 47921 1053c 02       		.byte	0x2
+ 47922 1053d 5A04     		.value	0x45a
+ 47923 1053f 56050100 		.long	0x10556
+ 47924 10543 32       		.uleb128 0x32
+ 47925 10544 A10E0000 		.long	0xea1
+ 47926 10548 03       		.byte	0x3
+ 47927 10549 91       		.byte	0x91
+ 47928 1054a B070     		.sleb128 -2000
+ 47929 1054c 32       		.uleb128 0x32
+ 47930 1054d 970E0000 		.long	0xe97
+ 47931 10551 03       		.byte	0x3
+ 47932 10552 91       		.byte	0x91
+ 47933 10553 C070     		.sleb128 -1984
+ 47934 10555 00       		.byte	0x0
+ 47935 10556 31       		.uleb128 0x31
+ 47936 10557 6BD90000 		.long	0xd96b
+ 47937 1055b 00000000 		.quad	.LBB4627
+ 47937      00000000 
+ 47938 10563 00000000 		.quad	.LBE4627
+ 47938      00000000 
+ 47939 1056b 02       		.byte	0x2
+ 47940 1056c 5E04     		.value	0x45e
+ 47941 1056e 06080100 		.long	0x10806
+ 47942 10572 32       		.uleb128 0x32
+ 47943 10573 89D90000 		.long	0xd989
+ 47944 10577 03       		.byte	0x3
+ 47945 10578 91       		.byte	0x91
+ 47946 10579 DC70     		.sleb128 -1956
+ 47947 1057b 32       		.uleb128 0x32
+ 47948 1057c 7DD90000 		.long	0xd97d
+ 47949 10580 03       		.byte	0x3
+ 47950 10581 91       		.byte	0x91
+ 47951 10582 E070     		.sleb128 -1952
+ 47952 10584 33       		.uleb128 0x33
+ 47953 10585 00000000 		.quad	.LBB4628
+ 47953      00000000 
+ 47954 1058d 00000000 		.quad	.LBE4628
+ 47954      00000000 
+ 47955 10595 34       		.uleb128 0x34
+ 47956 10596 95D90000 		.long	0xd995
+ 47957 1059a 03       		.byte	0x3
+ 47958 1059b 91       		.byte	0x91
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1170
+
+
+ 47959 1059c 8071     		.sleb128 -1920
+ 47960 1059e 34       		.uleb128 0x34
+ 47961 1059f A0D90000 		.long	0xd9a0
+ 47962 105a3 03       		.byte	0x3
+ 47963 105a4 91       		.byte	0x91
+ 47964 105a5 F070     		.sleb128 -1936
+ 47965 105a7 34       		.uleb128 0x34
+ 47966 105a8 ABD90000 		.long	0xd9ab
+ 47967 105ac 09       		.byte	0x9
+ 47968 105ad 03       		.byte	0x3
+ 47969 105ae 00000000 		.quad	__PRETTY_FUNCTION__.7467
+ 47969      00000000 
+ 47970 105b6 36       		.uleb128 0x36
+ 47971 105b7 00000000 		.quad	.LBB4629
+ 47971      00000000 
+ 47972 105bf 00000000 		.quad	.LBE4629
+ 47972      00000000 
+ 47973 105c7 D5050100 		.long	0x105d5
+ 47974 105cb 34       		.uleb128 0x34
+ 47975 105cc BED90000 		.long	0xd9be
+ 47976 105d0 03       		.byte	0x3
+ 47977 105d1 91       		.byte	0x91
+ 47978 105d2 9066     		.sleb128 -3312
+ 47979 105d4 00       		.byte	0x0
+ 47980 105d5 31       		.uleb128 0x31
+ 47981 105d6 FBD90000 		.long	0xd9fb
+ 47982 105da 00000000 		.quad	.LBB4630
+ 47982      00000000 
+ 47983 105e2 00000000 		.quad	.LBE4630
+ 47983      00000000 
+ 47984 105ea 02       		.byte	0x2
+ 47985 105eb A603     		.value	0x3a6
+ 47986 105ed 7F060100 		.long	0x1067f
+ 47987 105f1 32       		.uleb128 0x32
+ 47988 105f2 17DA0000 		.long	0xda17
+ 47989 105f6 03       		.byte	0x3
+ 47990 105f7 91       		.byte	0x91
+ 47991 105f8 9C71     		.sleb128 -1892
+ 47992 105fa 32       		.uleb128 0x32
+ 47993 105fb 0DDA0000 		.long	0xda0d
+ 47994 105ff 03       		.byte	0x3
+ 47995 10600 91       		.byte	0x91
+ 47996 10601 A071     		.sleb128 -1888
+ 47997 10603 33       		.uleb128 0x33
+ 47998 10604 00000000 		.quad	.LBB4631
+ 47998      00000000 
+ 47999 1060c 00000000 		.quad	.LBE4631
+ 47999      00000000 
+ 48000 10614 34       		.uleb128 0x34
+ 48001 10615 21DA0000 		.long	0xda21
+ 48002 10619 09       		.byte	0x9
+ 48003 1061a 03       		.byte	0x3
+ 48004 1061b 00000000 		.quad	sr_mask.7327
+ 48004      00000000 
+ 48005 10623 31       		.uleb128 0x31
+ 48006 10624 750D0000 		.long	0xd75
+ 48007 10628 00000000 		.quad	.LBB4632
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1171
+
+
+ 48007      00000000 
+ 48008 10630 00000000 		.quad	.LBE4632
+ 48008      00000000 
+ 48009 10638 02       		.byte	0x2
+ 48010 10639 E801     		.value	0x1e8
+ 48011 1063b 52060100 		.long	0x10652
+ 48012 1063f 32       		.uleb128 0x32
+ 48013 10640 930D0000 		.long	0xd93
+ 48014 10644 03       		.byte	0x3
+ 48015 10645 91       		.byte	0x91
+ 48016 10646 BC71     		.sleb128 -1860
+ 48017 10648 32       		.uleb128 0x32
+ 48018 10649 870D0000 		.long	0xd87
+ 48019 1064d 03       		.byte	0x3
+ 48020 1064e 91       		.byte	0x91
+ 48021 1064f C071     		.sleb128 -1856
+ 48022 10651 00       		.byte	0x0
+ 48023 10652 35       		.uleb128 0x35
+ 48024 10653 4F0D0000 		.long	0xd4f
+ 48025 10657 00000000 		.quad	.LBB4634
+ 48025      00000000 
+ 48026 1065f 00000000 		.quad	.LBE4634
+ 48026      00000000 
+ 48027 10667 02       		.byte	0x2
+ 48028 10668 E901     		.value	0x1e9
+ 48029 1066a 32       		.uleb128 0x32
+ 48030 1066b 6A0D0000 		.long	0xd6a
+ 48031 1066f 03       		.byte	0x3
+ 48032 10670 91       		.byte	0x91
+ 48033 10671 D071     		.sleb128 -1840
+ 48034 10673 32       		.uleb128 0x32
+ 48035 10674 600D0000 		.long	0xd60
+ 48036 10678 03       		.byte	0x3
+ 48037 10679 91       		.byte	0x91
+ 48038 1067a E071     		.sleb128 -1824
+ 48039 1067c 00       		.byte	0x0
+ 48040 1067d 00       		.byte	0x0
+ 48041 1067e 00       		.byte	0x0
+ 48042 1067f 36       		.uleb128 0x36
+ 48043 10680 00000000 		.quad	.LBB4636
+ 48043      00000000 
+ 48044 10688 00000000 		.quad	.LBE4636
+ 48044      00000000 
+ 48045 10690 9E060100 		.long	0x1069e
+ 48046 10694 34       		.uleb128 0x34
+ 48047 10695 CED90000 		.long	0xd9ce
+ 48048 10699 03       		.byte	0x3
+ 48049 1069a 91       		.byte	0x91
+ 48050 1069b 8066     		.sleb128 -3328
+ 48051 1069d 00       		.byte	0x0
+ 48052 1069e 31       		.uleb128 0x31
+ 48053 1069f D4DA0000 		.long	0xdad4
+ 48054 106a3 00000000 		.quad	.LBB4637
+ 48054      00000000 
+ 48055 106ab 00000000 		.quad	.LBE4637
+ 48055      00000000 
+ 48056 106b3 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1172
+
+
+ 48057 106b4 A803     		.value	0x3a8
+ 48058 106b6 60070100 		.long	0x10760
+ 48059 106ba 32       		.uleb128 0x32
+ 48060 106bb F0DA0000 		.long	0xdaf0
+ 48061 106bf 03       		.byte	0x3
+ 48062 106c0 91       		.byte	0x91
+ 48063 106c1 FC71     		.sleb128 -1796
+ 48064 106c3 32       		.uleb128 0x32
+ 48065 106c4 E6DA0000 		.long	0xdae6
+ 48066 106c8 03       		.byte	0x3
+ 48067 106c9 91       		.byte	0x91
+ 48068 106ca 8072     		.sleb128 -1792
+ 48069 106cc 33       		.uleb128 0x33
+ 48070 106cd 00000000 		.quad	.LBB4638
+ 48070      00000000 
+ 48071 106d5 00000000 		.quad	.LBE4638
+ 48071      00000000 
+ 48072 106dd 34       		.uleb128 0x34
+ 48073 106de 97DB0000 		.long	0xdb97
+ 48074 106e2 03       		.byte	0x3
+ 48075 106e3 91       		.byte	0x91
+ 48076 106e4 9072     		.sleb128 -1776
+ 48077 106e6 34       		.uleb128 0x34
+ 48078 106e7 FADA0000 		.long	0xdafa
+ 48079 106eb 09       		.byte	0x9
+ 48080 106ec 03       		.byte	0x3
+ 48081 106ed 00000000 		.quad	sl_mask.7310
+ 48081      00000000 
+ 48082 106f5 34       		.uleb128 0x34
+ 48083 106f6 A2DB0000 		.long	0xdba2
+ 48084 106fa 09       		.byte	0x9
+ 48085 106fb 03       		.byte	0x3
+ 48086 106fc 00000000 		.quad	__PRETTY_FUNCTION__.7312
+ 48086      00000000 
+ 48087 10704 31       		.uleb128 0x31
+ 48088 10705 CBDB0000 		.long	0xdbcb
+ 48089 10709 00000000 		.quad	.LBB4639
+ 48089      00000000 
+ 48090 10711 00000000 		.quad	.LBE4639
+ 48090      00000000 
+ 48091 10719 02       		.byte	0x2
+ 48092 1071a B101     		.value	0x1b1
+ 48093 1071c 33070100 		.long	0x10733
+ 48094 10720 32       		.uleb128 0x32
+ 48095 10721 E9DB0000 		.long	0xdbe9
+ 48096 10725 03       		.byte	0x3
+ 48097 10726 91       		.byte	0x91
+ 48098 10727 AC72     		.sleb128 -1748
+ 48099 10729 32       		.uleb128 0x32
+ 48100 1072a DDDB0000 		.long	0xdbdd
+ 48101 1072e 03       		.byte	0x3
+ 48102 1072f 91       		.byte	0x91
+ 48103 10730 B072     		.sleb128 -1744
+ 48104 10732 00       		.byte	0x0
+ 48105 10733 35       		.uleb128 0x35
+ 48106 10734 4F0D0000 		.long	0xd4f
+ 48107 10738 00000000 		.quad	.LBB4641
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1173
+
+
+ 48107      00000000 
+ 48108 10740 00000000 		.quad	.LBE4641
+ 48108      00000000 
+ 48109 10748 02       		.byte	0x2
+ 48110 10749 B301     		.value	0x1b3
+ 48111 1074b 32       		.uleb128 0x32
+ 48112 1074c 6A0D0000 		.long	0xd6a
+ 48113 10750 03       		.byte	0x3
+ 48114 10751 91       		.byte	0x91
+ 48115 10752 C072     		.sleb128 -1728
+ 48116 10754 32       		.uleb128 0x32
+ 48117 10755 600D0000 		.long	0xd60
+ 48118 10759 03       		.byte	0x3
+ 48119 1075a 91       		.byte	0x91
+ 48120 1075b D072     		.sleb128 -1712
+ 48121 1075d 00       		.byte	0x0
+ 48122 1075e 00       		.byte	0x0
+ 48123 1075f 00       		.byte	0x0
+ 48124 10760 36       		.uleb128 0x36
+ 48125 10761 00000000 		.quad	.LBB4643
+ 48125      00000000 
+ 48126 10769 00000000 		.quad	.LBE4643
+ 48126      00000000 
+ 48127 10771 7F070100 		.long	0x1077f
+ 48128 10775 34       		.uleb128 0x34
+ 48129 10776 DAD90000 		.long	0xd9da
+ 48130 1077a 03       		.byte	0x3
+ 48131 1077b 91       		.byte	0x91
+ 48132 1077c F065     		.sleb128 -3344
+ 48133 1077e 00       		.byte	0x0
+ 48134 1077f 31       		.uleb128 0x31
+ 48135 10780 A00D0000 		.long	0xda0
+ 48136 10784 00000000 		.quad	.LBB4644
+ 48136      00000000 
+ 48137 1078c 00000000 		.quad	.LBE4644
+ 48137      00000000 
+ 48138 10794 02       		.byte	0x2
+ 48139 10795 AA03     		.value	0x3aa
+ 48140 10797 D9070100 		.long	0x107d9
+ 48141 1079b 32       		.uleb128 0x32
+ 48142 1079c BE0D0000 		.long	0xdbe
+ 48143 107a0 03       		.byte	0x3
+ 48144 107a1 91       		.byte	0x91
+ 48145 107a2 E072     		.sleb128 -1696
+ 48146 107a4 32       		.uleb128 0x32
+ 48147 107a5 B20D0000 		.long	0xdb2
+ 48148 107a9 03       		.byte	0x3
+ 48149 107aa 91       		.byte	0x91
+ 48150 107ab F072     		.sleb128 -1680
+ 48151 107ad 35       		.uleb128 0x35
+ 48152 107ae CB0D0000 		.long	0xdcb
+ 48153 107b2 00000000 		.quad	.LBB4646
+ 48153      00000000 
+ 48154 107ba 00000000 		.quad	.LBE4646
+ 48154      00000000 
+ 48155 107c2 02       		.byte	0x2
+ 48156 107c3 7501     		.value	0x175
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1174
+
+
+ 48157 107c5 32       		.uleb128 0x32
+ 48158 107c6 E90D0000 		.long	0xde9
+ 48159 107ca 03       		.byte	0x3
+ 48160 107cb 91       		.byte	0x91
+ 48161 107cc 8073     		.sleb128 -1664
+ 48162 107ce 32       		.uleb128 0x32
+ 48163 107cf DD0D0000 		.long	0xddd
+ 48164 107d3 03       		.byte	0x3
+ 48165 107d4 91       		.byte	0x91
+ 48166 107d5 9073     		.sleb128 -1648
+ 48167 107d7 00       		.byte	0x0
+ 48168 107d8 00       		.byte	0x0
+ 48169 107d9 35       		.uleb128 0x35
+ 48170 107da 860E0000 		.long	0xe86
+ 48171 107de 00000000 		.quad	.LBB4648
+ 48171      00000000 
+ 48172 107e6 00000000 		.quad	.LBE4648
+ 48172      00000000 
+ 48173 107ee 02       		.byte	0x2
+ 48174 107ef AB03     		.value	0x3ab
+ 48175 107f1 32       		.uleb128 0x32
+ 48176 107f2 A10E0000 		.long	0xea1
+ 48177 107f6 03       		.byte	0x3
+ 48178 107f7 91       		.byte	0x91
+ 48179 107f8 A073     		.sleb128 -1632
+ 48180 107fa 32       		.uleb128 0x32
+ 48181 107fb 970E0000 		.long	0xe97
+ 48182 107ff 03       		.byte	0x3
+ 48183 10800 91       		.byte	0x91
+ 48184 10801 B073     		.sleb128 -1616
+ 48185 10803 00       		.byte	0x0
+ 48186 10804 00       		.byte	0x0
+ 48187 10805 00       		.byte	0x0
+ 48188 10806 31       		.uleb128 0x31
+ 48189 10807 6BD90000 		.long	0xd96b
+ 48190 1080b 00000000 		.quad	.LBB4650
+ 48190      00000000 
+ 48191 10813 00000000 		.quad	.LBE4650
+ 48191      00000000 
+ 48192 1081b 02       		.byte	0x2
+ 48193 1081c 5F04     		.value	0x45f
+ 48194 1081e B60A0100 		.long	0x10ab6
+ 48195 10822 32       		.uleb128 0x32
+ 48196 10823 89D90000 		.long	0xd989
+ 48197 10827 03       		.byte	0x3
+ 48198 10828 91       		.byte	0x91
+ 48199 10829 CC73     		.sleb128 -1588
+ 48200 1082b 32       		.uleb128 0x32
+ 48201 1082c 7DD90000 		.long	0xd97d
+ 48202 10830 03       		.byte	0x3
+ 48203 10831 91       		.byte	0x91
+ 48204 10832 D073     		.sleb128 -1584
+ 48205 10834 33       		.uleb128 0x33
+ 48206 10835 00000000 		.quad	.LBB4651
+ 48206      00000000 
+ 48207 1083d 00000000 		.quad	.LBE4651
+ 48207      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1175
+
+
+ 48208 10845 34       		.uleb128 0x34
+ 48209 10846 95D90000 		.long	0xd995
+ 48210 1084a 03       		.byte	0x3
+ 48211 1084b 91       		.byte	0x91
+ 48212 1084c F073     		.sleb128 -1552
+ 48213 1084e 34       		.uleb128 0x34
+ 48214 1084f A0D90000 		.long	0xd9a0
+ 48215 10853 03       		.byte	0x3
+ 48216 10854 91       		.byte	0x91
+ 48217 10855 E073     		.sleb128 -1568
+ 48218 10857 34       		.uleb128 0x34
+ 48219 10858 ABD90000 		.long	0xd9ab
+ 48220 1085c 09       		.byte	0x9
+ 48221 1085d 03       		.byte	0x3
+ 48222 1085e 00000000 		.quad	__PRETTY_FUNCTION__.7467
+ 48222      00000000 
+ 48223 10866 36       		.uleb128 0x36
+ 48224 10867 00000000 		.quad	.LBB4652
+ 48224      00000000 
+ 48225 1086f 00000000 		.quad	.LBE4652
+ 48225      00000000 
+ 48226 10877 85080100 		.long	0x10885
+ 48227 1087b 34       		.uleb128 0x34
+ 48228 1087c BED90000 		.long	0xd9be
+ 48229 10880 03       		.byte	0x3
+ 48230 10881 91       		.byte	0x91
+ 48231 10882 C066     		.sleb128 -3264
+ 48232 10884 00       		.byte	0x0
+ 48233 10885 31       		.uleb128 0x31
+ 48234 10886 FBD90000 		.long	0xd9fb
+ 48235 1088a 00000000 		.quad	.LBB4653
+ 48235      00000000 
+ 48236 10892 00000000 		.quad	.LBE4653
+ 48236      00000000 
+ 48237 1089a 02       		.byte	0x2
+ 48238 1089b A603     		.value	0x3a6
+ 48239 1089d 2F090100 		.long	0x1092f
+ 48240 108a1 32       		.uleb128 0x32
+ 48241 108a2 17DA0000 		.long	0xda17
+ 48242 108a6 03       		.byte	0x3
+ 48243 108a7 91       		.byte	0x91
+ 48244 108a8 8C74     		.sleb128 -1524
+ 48245 108aa 32       		.uleb128 0x32
+ 48246 108ab 0DDA0000 		.long	0xda0d
+ 48247 108af 03       		.byte	0x3
+ 48248 108b0 91       		.byte	0x91
+ 48249 108b1 9074     		.sleb128 -1520
+ 48250 108b3 33       		.uleb128 0x33
+ 48251 108b4 00000000 		.quad	.LBB4654
+ 48251      00000000 
+ 48252 108bc 00000000 		.quad	.LBE4654
+ 48252      00000000 
+ 48253 108c4 34       		.uleb128 0x34
+ 48254 108c5 21DA0000 		.long	0xda21
+ 48255 108c9 09       		.byte	0x9
+ 48256 108ca 03       		.byte	0x3
+ 48257 108cb 00000000 		.quad	sr_mask.7327
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1176
+
+
+ 48257      00000000 
+ 48258 108d3 31       		.uleb128 0x31
+ 48259 108d4 750D0000 		.long	0xd75
+ 48260 108d8 00000000 		.quad	.LBB4655
+ 48260      00000000 
+ 48261 108e0 00000000 		.quad	.LBE4655
+ 48261      00000000 
+ 48262 108e8 02       		.byte	0x2
+ 48263 108e9 E801     		.value	0x1e8
+ 48264 108eb 02090100 		.long	0x10902
+ 48265 108ef 32       		.uleb128 0x32
+ 48266 108f0 930D0000 		.long	0xd93
+ 48267 108f4 03       		.byte	0x3
+ 48268 108f5 91       		.byte	0x91
+ 48269 108f6 AC74     		.sleb128 -1492
+ 48270 108f8 32       		.uleb128 0x32
+ 48271 108f9 870D0000 		.long	0xd87
+ 48272 108fd 03       		.byte	0x3
+ 48273 108fe 91       		.byte	0x91
+ 48274 108ff B074     		.sleb128 -1488
+ 48275 10901 00       		.byte	0x0
+ 48276 10902 35       		.uleb128 0x35
+ 48277 10903 4F0D0000 		.long	0xd4f
+ 48278 10907 00000000 		.quad	.LBB4657
+ 48278      00000000 
+ 48279 1090f 00000000 		.quad	.LBE4657
+ 48279      00000000 
+ 48280 10917 02       		.byte	0x2
+ 48281 10918 E901     		.value	0x1e9
+ 48282 1091a 32       		.uleb128 0x32
+ 48283 1091b 6A0D0000 		.long	0xd6a
+ 48284 1091f 03       		.byte	0x3
+ 48285 10920 91       		.byte	0x91
+ 48286 10921 C074     		.sleb128 -1472
+ 48287 10923 32       		.uleb128 0x32
+ 48288 10924 600D0000 		.long	0xd60
+ 48289 10928 03       		.byte	0x3
+ 48290 10929 91       		.byte	0x91
+ 48291 1092a D074     		.sleb128 -1456
+ 48292 1092c 00       		.byte	0x0
+ 48293 1092d 00       		.byte	0x0
+ 48294 1092e 00       		.byte	0x0
+ 48295 1092f 36       		.uleb128 0x36
+ 48296 10930 00000000 		.quad	.LBB4659
+ 48296      00000000 
+ 48297 10938 00000000 		.quad	.LBE4659
+ 48297      00000000 
+ 48298 10940 4E090100 		.long	0x1094e
+ 48299 10944 34       		.uleb128 0x34
+ 48300 10945 CED90000 		.long	0xd9ce
+ 48301 10949 03       		.byte	0x3
+ 48302 1094a 91       		.byte	0x91
+ 48303 1094b B066     		.sleb128 -3280
+ 48304 1094d 00       		.byte	0x0
+ 48305 1094e 31       		.uleb128 0x31
+ 48306 1094f D4DA0000 		.long	0xdad4
+ 48307 10953 00000000 		.quad	.LBB4660
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1177
+
+
+ 48307      00000000 
+ 48308 1095b 00000000 		.quad	.LBE4660
+ 48308      00000000 
+ 48309 10963 02       		.byte	0x2
+ 48310 10964 A803     		.value	0x3a8
+ 48311 10966 100A0100 		.long	0x10a10
+ 48312 1096a 32       		.uleb128 0x32
+ 48313 1096b F0DA0000 		.long	0xdaf0
+ 48314 1096f 03       		.byte	0x3
+ 48315 10970 91       		.byte	0x91
+ 48316 10971 EC74     		.sleb128 -1428
+ 48317 10973 32       		.uleb128 0x32
+ 48318 10974 E6DA0000 		.long	0xdae6
+ 48319 10978 03       		.byte	0x3
+ 48320 10979 91       		.byte	0x91
+ 48321 1097a F074     		.sleb128 -1424
+ 48322 1097c 33       		.uleb128 0x33
+ 48323 1097d 00000000 		.quad	.LBB4661
+ 48323      00000000 
+ 48324 10985 00000000 		.quad	.LBE4661
+ 48324      00000000 
+ 48325 1098d 34       		.uleb128 0x34
+ 48326 1098e 97DB0000 		.long	0xdb97
+ 48327 10992 03       		.byte	0x3
+ 48328 10993 91       		.byte	0x91
+ 48329 10994 8075     		.sleb128 -1408
+ 48330 10996 34       		.uleb128 0x34
+ 48331 10997 FADA0000 		.long	0xdafa
+ 48332 1099b 09       		.byte	0x9
+ 48333 1099c 03       		.byte	0x3
+ 48334 1099d 00000000 		.quad	sl_mask.7310
+ 48334      00000000 
+ 48335 109a5 34       		.uleb128 0x34
+ 48336 109a6 A2DB0000 		.long	0xdba2
+ 48337 109aa 09       		.byte	0x9
+ 48338 109ab 03       		.byte	0x3
+ 48339 109ac 00000000 		.quad	__PRETTY_FUNCTION__.7312
+ 48339      00000000 
+ 48340 109b4 31       		.uleb128 0x31
+ 48341 109b5 CBDB0000 		.long	0xdbcb
+ 48342 109b9 00000000 		.quad	.LBB4662
+ 48342      00000000 
+ 48343 109c1 00000000 		.quad	.LBE4662
+ 48343      00000000 
+ 48344 109c9 02       		.byte	0x2
+ 48345 109ca B101     		.value	0x1b1
+ 48346 109cc E3090100 		.long	0x109e3
+ 48347 109d0 32       		.uleb128 0x32
+ 48348 109d1 E9DB0000 		.long	0xdbe9
+ 48349 109d5 03       		.byte	0x3
+ 48350 109d6 91       		.byte	0x91
+ 48351 109d7 9C75     		.sleb128 -1380
+ 48352 109d9 32       		.uleb128 0x32
+ 48353 109da DDDB0000 		.long	0xdbdd
+ 48354 109de 03       		.byte	0x3
+ 48355 109df 91       		.byte	0x91
+ 48356 109e0 A075     		.sleb128 -1376
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1178
+
+
+ 48357 109e2 00       		.byte	0x0
+ 48358 109e3 35       		.uleb128 0x35
+ 48359 109e4 4F0D0000 		.long	0xd4f
+ 48360 109e8 00000000 		.quad	.LBB4664
+ 48360      00000000 
+ 48361 109f0 00000000 		.quad	.LBE4664
+ 48361      00000000 
+ 48362 109f8 02       		.byte	0x2
+ 48363 109f9 B301     		.value	0x1b3
+ 48364 109fb 32       		.uleb128 0x32
+ 48365 109fc 6A0D0000 		.long	0xd6a
+ 48366 10a00 03       		.byte	0x3
+ 48367 10a01 91       		.byte	0x91
+ 48368 10a02 B075     		.sleb128 -1360
+ 48369 10a04 32       		.uleb128 0x32
+ 48370 10a05 600D0000 		.long	0xd60
+ 48371 10a09 03       		.byte	0x3
+ 48372 10a0a 91       		.byte	0x91
+ 48373 10a0b C075     		.sleb128 -1344
+ 48374 10a0d 00       		.byte	0x0
+ 48375 10a0e 00       		.byte	0x0
+ 48376 10a0f 00       		.byte	0x0
+ 48377 10a10 36       		.uleb128 0x36
+ 48378 10a11 00000000 		.quad	.LBB4666
+ 48378      00000000 
+ 48379 10a19 00000000 		.quad	.LBE4666
+ 48379      00000000 
+ 48380 10a21 2F0A0100 		.long	0x10a2f
+ 48381 10a25 34       		.uleb128 0x34
+ 48382 10a26 DAD90000 		.long	0xd9da
+ 48383 10a2a 03       		.byte	0x3
+ 48384 10a2b 91       		.byte	0x91
+ 48385 10a2c A066     		.sleb128 -3296
+ 48386 10a2e 00       		.byte	0x0
+ 48387 10a2f 31       		.uleb128 0x31
+ 48388 10a30 A00D0000 		.long	0xda0
+ 48389 10a34 00000000 		.quad	.LBB4667
+ 48389      00000000 
+ 48390 10a3c 00000000 		.quad	.LBE4667
+ 48390      00000000 
+ 48391 10a44 02       		.byte	0x2
+ 48392 10a45 AA03     		.value	0x3aa
+ 48393 10a47 890A0100 		.long	0x10a89
+ 48394 10a4b 32       		.uleb128 0x32
+ 48395 10a4c BE0D0000 		.long	0xdbe
+ 48396 10a50 03       		.byte	0x3
+ 48397 10a51 91       		.byte	0x91
+ 48398 10a52 D075     		.sleb128 -1328
+ 48399 10a54 32       		.uleb128 0x32
+ 48400 10a55 B20D0000 		.long	0xdb2
+ 48401 10a59 03       		.byte	0x3
+ 48402 10a5a 91       		.byte	0x91
+ 48403 10a5b E075     		.sleb128 -1312
+ 48404 10a5d 35       		.uleb128 0x35
+ 48405 10a5e CB0D0000 		.long	0xdcb
+ 48406 10a62 00000000 		.quad	.LBB4669
+ 48406      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1179
+
+
+ 48407 10a6a 00000000 		.quad	.LBE4669
+ 48407      00000000 
+ 48408 10a72 02       		.byte	0x2
+ 48409 10a73 7501     		.value	0x175
+ 48410 10a75 32       		.uleb128 0x32
+ 48411 10a76 E90D0000 		.long	0xde9
+ 48412 10a7a 03       		.byte	0x3
+ 48413 10a7b 91       		.byte	0x91
+ 48414 10a7c F075     		.sleb128 -1296
+ 48415 10a7e 32       		.uleb128 0x32
+ 48416 10a7f DD0D0000 		.long	0xddd
+ 48417 10a83 03       		.byte	0x3
+ 48418 10a84 91       		.byte	0x91
+ 48419 10a85 8076     		.sleb128 -1280
+ 48420 10a87 00       		.byte	0x0
+ 48421 10a88 00       		.byte	0x0
+ 48422 10a89 35       		.uleb128 0x35
+ 48423 10a8a 860E0000 		.long	0xe86
+ 48424 10a8e 00000000 		.quad	.LBB4671
+ 48424      00000000 
+ 48425 10a96 00000000 		.quad	.LBE4671
+ 48425      00000000 
+ 48426 10a9e 02       		.byte	0x2
+ 48427 10a9f AB03     		.value	0x3ab
+ 48428 10aa1 32       		.uleb128 0x32
+ 48429 10aa2 A10E0000 		.long	0xea1
+ 48430 10aa6 03       		.byte	0x3
+ 48431 10aa7 91       		.byte	0x91
+ 48432 10aa8 9076     		.sleb128 -1264
+ 48433 10aaa 32       		.uleb128 0x32
+ 48434 10aab 970E0000 		.long	0xe97
+ 48435 10aaf 03       		.byte	0x3
+ 48436 10ab0 91       		.byte	0x91
+ 48437 10ab1 A076     		.sleb128 -1248
+ 48438 10ab3 00       		.byte	0x0
+ 48439 10ab4 00       		.byte	0x0
+ 48440 10ab5 00       		.byte	0x0
+ 48441 10ab6 31       		.uleb128 0x31
+ 48442 10ab7 6BD90000 		.long	0xd96b
+ 48443 10abb 00000000 		.quad	.LBB4673
+ 48443      00000000 
+ 48444 10ac3 00000000 		.quad	.LBE4673
+ 48444      00000000 
+ 48445 10acb 02       		.byte	0x2
+ 48446 10acc 6004     		.value	0x460
+ 48447 10ace 660D0100 		.long	0x10d66
+ 48448 10ad2 32       		.uleb128 0x32
+ 48449 10ad3 89D90000 		.long	0xd989
+ 48450 10ad7 03       		.byte	0x3
+ 48451 10ad8 91       		.byte	0x91
+ 48452 10ad9 BC76     		.sleb128 -1220
+ 48453 10adb 32       		.uleb128 0x32
+ 48454 10adc 7DD90000 		.long	0xd97d
+ 48455 10ae0 03       		.byte	0x3
+ 48456 10ae1 91       		.byte	0x91
+ 48457 10ae2 C076     		.sleb128 -1216
+ 48458 10ae4 33       		.uleb128 0x33
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1180
+
+
+ 48459 10ae5 00000000 		.quad	.LBB4674
+ 48459      00000000 
+ 48460 10aed 00000000 		.quad	.LBE4674
+ 48460      00000000 
+ 48461 10af5 34       		.uleb128 0x34
+ 48462 10af6 95D90000 		.long	0xd995
+ 48463 10afa 03       		.byte	0x3
+ 48464 10afb 91       		.byte	0x91
+ 48465 10afc E076     		.sleb128 -1184
+ 48466 10afe 34       		.uleb128 0x34
+ 48467 10aff A0D90000 		.long	0xd9a0
+ 48468 10b03 03       		.byte	0x3
+ 48469 10b04 91       		.byte	0x91
+ 48470 10b05 D076     		.sleb128 -1200
+ 48471 10b07 34       		.uleb128 0x34
+ 48472 10b08 ABD90000 		.long	0xd9ab
+ 48473 10b0c 09       		.byte	0x9
+ 48474 10b0d 03       		.byte	0x3
+ 48475 10b0e 00000000 		.quad	__PRETTY_FUNCTION__.7467
+ 48475      00000000 
+ 48476 10b16 36       		.uleb128 0x36
+ 48477 10b17 00000000 		.quad	.LBB4675
+ 48477      00000000 
+ 48478 10b1f 00000000 		.quad	.LBE4675
+ 48478      00000000 
+ 48479 10b27 350B0100 		.long	0x10b35
+ 48480 10b2b 34       		.uleb128 0x34
+ 48481 10b2c BED90000 		.long	0xd9be
+ 48482 10b30 03       		.byte	0x3
+ 48483 10b31 91       		.byte	0x91
+ 48484 10b32 F066     		.sleb128 -3216
+ 48485 10b34 00       		.byte	0x0
+ 48486 10b35 31       		.uleb128 0x31
+ 48487 10b36 FBD90000 		.long	0xd9fb
+ 48488 10b3a 00000000 		.quad	.LBB4676
+ 48488      00000000 
+ 48489 10b42 00000000 		.quad	.LBE4676
+ 48489      00000000 
+ 48490 10b4a 02       		.byte	0x2
+ 48491 10b4b A603     		.value	0x3a6
+ 48492 10b4d DF0B0100 		.long	0x10bdf
+ 48493 10b51 32       		.uleb128 0x32
+ 48494 10b52 17DA0000 		.long	0xda17
+ 48495 10b56 03       		.byte	0x3
+ 48496 10b57 91       		.byte	0x91
+ 48497 10b58 FC76     		.sleb128 -1156
+ 48498 10b5a 32       		.uleb128 0x32
+ 48499 10b5b 0DDA0000 		.long	0xda0d
+ 48500 10b5f 03       		.byte	0x3
+ 48501 10b60 91       		.byte	0x91
+ 48502 10b61 8077     		.sleb128 -1152
+ 48503 10b63 33       		.uleb128 0x33
+ 48504 10b64 00000000 		.quad	.LBB4677
+ 48504      00000000 
+ 48505 10b6c 00000000 		.quad	.LBE4677
+ 48505      00000000 
+ 48506 10b74 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1181
+
+
+ 48507 10b75 21DA0000 		.long	0xda21
+ 48508 10b79 09       		.byte	0x9
+ 48509 10b7a 03       		.byte	0x3
+ 48510 10b7b 00000000 		.quad	sr_mask.7327
+ 48510      00000000 
+ 48511 10b83 31       		.uleb128 0x31
+ 48512 10b84 750D0000 		.long	0xd75
+ 48513 10b88 00000000 		.quad	.LBB4678
+ 48513      00000000 
+ 48514 10b90 00000000 		.quad	.LBE4678
+ 48514      00000000 
+ 48515 10b98 02       		.byte	0x2
+ 48516 10b99 E801     		.value	0x1e8
+ 48517 10b9b B20B0100 		.long	0x10bb2
+ 48518 10b9f 32       		.uleb128 0x32
+ 48519 10ba0 930D0000 		.long	0xd93
+ 48520 10ba4 03       		.byte	0x3
+ 48521 10ba5 91       		.byte	0x91
+ 48522 10ba6 9C77     		.sleb128 -1124
+ 48523 10ba8 32       		.uleb128 0x32
+ 48524 10ba9 870D0000 		.long	0xd87
+ 48525 10bad 03       		.byte	0x3
+ 48526 10bae 91       		.byte	0x91
+ 48527 10baf A077     		.sleb128 -1120
+ 48528 10bb1 00       		.byte	0x0
+ 48529 10bb2 35       		.uleb128 0x35
+ 48530 10bb3 4F0D0000 		.long	0xd4f
+ 48531 10bb7 00000000 		.quad	.LBB4680
+ 48531      00000000 
+ 48532 10bbf 00000000 		.quad	.LBE4680
+ 48532      00000000 
+ 48533 10bc7 02       		.byte	0x2
+ 48534 10bc8 E901     		.value	0x1e9
+ 48535 10bca 32       		.uleb128 0x32
+ 48536 10bcb 6A0D0000 		.long	0xd6a
+ 48537 10bcf 03       		.byte	0x3
+ 48538 10bd0 91       		.byte	0x91
+ 48539 10bd1 B077     		.sleb128 -1104
+ 48540 10bd3 32       		.uleb128 0x32
+ 48541 10bd4 600D0000 		.long	0xd60
+ 48542 10bd8 03       		.byte	0x3
+ 48543 10bd9 91       		.byte	0x91
+ 48544 10bda C077     		.sleb128 -1088
+ 48545 10bdc 00       		.byte	0x0
+ 48546 10bdd 00       		.byte	0x0
+ 48547 10bde 00       		.byte	0x0
+ 48548 10bdf 36       		.uleb128 0x36
+ 48549 10be0 00000000 		.quad	.LBB4682
+ 48549      00000000 
+ 48550 10be8 00000000 		.quad	.LBE4682
+ 48550      00000000 
+ 48551 10bf0 FE0B0100 		.long	0x10bfe
+ 48552 10bf4 34       		.uleb128 0x34
+ 48553 10bf5 CED90000 		.long	0xd9ce
+ 48554 10bf9 03       		.byte	0x3
+ 48555 10bfa 91       		.byte	0x91
+ 48556 10bfb E066     		.sleb128 -3232
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1182
+
+
+ 48557 10bfd 00       		.byte	0x0
+ 48558 10bfe 31       		.uleb128 0x31
+ 48559 10bff D4DA0000 		.long	0xdad4
+ 48560 10c03 00000000 		.quad	.LBB4683
+ 48560      00000000 
+ 48561 10c0b 00000000 		.quad	.LBE4683
+ 48561      00000000 
+ 48562 10c13 02       		.byte	0x2
+ 48563 10c14 A803     		.value	0x3a8
+ 48564 10c16 C00C0100 		.long	0x10cc0
+ 48565 10c1a 32       		.uleb128 0x32
+ 48566 10c1b F0DA0000 		.long	0xdaf0
+ 48567 10c1f 03       		.byte	0x3
+ 48568 10c20 91       		.byte	0x91
+ 48569 10c21 DC77     		.sleb128 -1060
+ 48570 10c23 32       		.uleb128 0x32
+ 48571 10c24 E6DA0000 		.long	0xdae6
+ 48572 10c28 03       		.byte	0x3
+ 48573 10c29 91       		.byte	0x91
+ 48574 10c2a E077     		.sleb128 -1056
+ 48575 10c2c 33       		.uleb128 0x33
+ 48576 10c2d 00000000 		.quad	.LBB4684
+ 48576      00000000 
+ 48577 10c35 00000000 		.quad	.LBE4684
+ 48577      00000000 
+ 48578 10c3d 34       		.uleb128 0x34
+ 48579 10c3e 97DB0000 		.long	0xdb97
+ 48580 10c42 03       		.byte	0x3
+ 48581 10c43 91       		.byte	0x91
+ 48582 10c44 F077     		.sleb128 -1040
+ 48583 10c46 34       		.uleb128 0x34
+ 48584 10c47 FADA0000 		.long	0xdafa
+ 48585 10c4b 09       		.byte	0x9
+ 48586 10c4c 03       		.byte	0x3
+ 48587 10c4d 00000000 		.quad	sl_mask.7310
+ 48587      00000000 
+ 48588 10c55 34       		.uleb128 0x34
+ 48589 10c56 A2DB0000 		.long	0xdba2
+ 48590 10c5a 09       		.byte	0x9
+ 48591 10c5b 03       		.byte	0x3
+ 48592 10c5c 00000000 		.quad	__PRETTY_FUNCTION__.7312
+ 48592      00000000 
+ 48593 10c64 31       		.uleb128 0x31
+ 48594 10c65 CBDB0000 		.long	0xdbcb
+ 48595 10c69 00000000 		.quad	.LBB4685
+ 48595      00000000 
+ 48596 10c71 00000000 		.quad	.LBE4685
+ 48596      00000000 
+ 48597 10c79 02       		.byte	0x2
+ 48598 10c7a B101     		.value	0x1b1
+ 48599 10c7c 930C0100 		.long	0x10c93
+ 48600 10c80 32       		.uleb128 0x32
+ 48601 10c81 E9DB0000 		.long	0xdbe9
+ 48602 10c85 03       		.byte	0x3
+ 48603 10c86 91       		.byte	0x91
+ 48604 10c87 8C78     		.sleb128 -1012
+ 48605 10c89 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1183
+
+
+ 48606 10c8a DDDB0000 		.long	0xdbdd
+ 48607 10c8e 03       		.byte	0x3
+ 48608 10c8f 91       		.byte	0x91
+ 48609 10c90 9078     		.sleb128 -1008
+ 48610 10c92 00       		.byte	0x0
+ 48611 10c93 35       		.uleb128 0x35
+ 48612 10c94 4F0D0000 		.long	0xd4f
+ 48613 10c98 00000000 		.quad	.LBB4687
+ 48613      00000000 
+ 48614 10ca0 00000000 		.quad	.LBE4687
+ 48614      00000000 
+ 48615 10ca8 02       		.byte	0x2
+ 48616 10ca9 B301     		.value	0x1b3
+ 48617 10cab 32       		.uleb128 0x32
+ 48618 10cac 6A0D0000 		.long	0xd6a
+ 48619 10cb0 03       		.byte	0x3
+ 48620 10cb1 91       		.byte	0x91
+ 48621 10cb2 A078     		.sleb128 -992
+ 48622 10cb4 32       		.uleb128 0x32
+ 48623 10cb5 600D0000 		.long	0xd60
+ 48624 10cb9 03       		.byte	0x3
+ 48625 10cba 91       		.byte	0x91
+ 48626 10cbb B078     		.sleb128 -976
+ 48627 10cbd 00       		.byte	0x0
+ 48628 10cbe 00       		.byte	0x0
+ 48629 10cbf 00       		.byte	0x0
+ 48630 10cc0 36       		.uleb128 0x36
+ 48631 10cc1 00000000 		.quad	.LBB4689
+ 48631      00000000 
+ 48632 10cc9 00000000 		.quad	.LBE4689
+ 48632      00000000 
+ 48633 10cd1 DF0C0100 		.long	0x10cdf
+ 48634 10cd5 34       		.uleb128 0x34
+ 48635 10cd6 DAD90000 		.long	0xd9da
+ 48636 10cda 03       		.byte	0x3
+ 48637 10cdb 91       		.byte	0x91
+ 48638 10cdc D066     		.sleb128 -3248
+ 48639 10cde 00       		.byte	0x0
+ 48640 10cdf 31       		.uleb128 0x31
+ 48641 10ce0 A00D0000 		.long	0xda0
+ 48642 10ce4 00000000 		.quad	.LBB4690
+ 48642      00000000 
+ 48643 10cec 00000000 		.quad	.LBE4690
+ 48643      00000000 
+ 48644 10cf4 02       		.byte	0x2
+ 48645 10cf5 AA03     		.value	0x3aa
+ 48646 10cf7 390D0100 		.long	0x10d39
+ 48647 10cfb 32       		.uleb128 0x32
+ 48648 10cfc BE0D0000 		.long	0xdbe
+ 48649 10d00 03       		.byte	0x3
+ 48650 10d01 91       		.byte	0x91
+ 48651 10d02 C078     		.sleb128 -960
+ 48652 10d04 32       		.uleb128 0x32
+ 48653 10d05 B20D0000 		.long	0xdb2
+ 48654 10d09 03       		.byte	0x3
+ 48655 10d0a 91       		.byte	0x91
+ 48656 10d0b D078     		.sleb128 -944
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1184
+
+
+ 48657 10d0d 35       		.uleb128 0x35
+ 48658 10d0e CB0D0000 		.long	0xdcb
+ 48659 10d12 00000000 		.quad	.LBB4692
+ 48659      00000000 
+ 48660 10d1a 00000000 		.quad	.LBE4692
+ 48660      00000000 
+ 48661 10d22 02       		.byte	0x2
+ 48662 10d23 7501     		.value	0x175
+ 48663 10d25 32       		.uleb128 0x32
+ 48664 10d26 E90D0000 		.long	0xde9
+ 48665 10d2a 03       		.byte	0x3
+ 48666 10d2b 91       		.byte	0x91
+ 48667 10d2c E078     		.sleb128 -928
+ 48668 10d2e 32       		.uleb128 0x32
+ 48669 10d2f DD0D0000 		.long	0xddd
+ 48670 10d33 03       		.byte	0x3
+ 48671 10d34 91       		.byte	0x91
+ 48672 10d35 F078     		.sleb128 -912
+ 48673 10d37 00       		.byte	0x0
+ 48674 10d38 00       		.byte	0x0
+ 48675 10d39 35       		.uleb128 0x35
+ 48676 10d3a 860E0000 		.long	0xe86
+ 48677 10d3e 00000000 		.quad	.LBB4694
+ 48677      00000000 
+ 48678 10d46 00000000 		.quad	.LBE4694
+ 48678      00000000 
+ 48679 10d4e 02       		.byte	0x2
+ 48680 10d4f AB03     		.value	0x3ab
+ 48681 10d51 32       		.uleb128 0x32
+ 48682 10d52 A10E0000 		.long	0xea1
+ 48683 10d56 03       		.byte	0x3
+ 48684 10d57 91       		.byte	0x91
+ 48685 10d58 8079     		.sleb128 -896
+ 48686 10d5a 32       		.uleb128 0x32
+ 48687 10d5b 970E0000 		.long	0xe97
+ 48688 10d5f 03       		.byte	0x3
+ 48689 10d60 91       		.byte	0x91
+ 48690 10d61 9079     		.sleb128 -880
+ 48691 10d63 00       		.byte	0x0
+ 48692 10d64 00       		.byte	0x0
+ 48693 10d65 00       		.byte	0x0
+ 48694 10d66 31       		.uleb128 0x31
+ 48695 10d67 860E0000 		.long	0xe86
+ 48696 10d6b 00000000 		.quad	.LBB4696
+ 48696      00000000 
+ 48697 10d73 00000000 		.quad	.LBE4696
+ 48697      00000000 
+ 48698 10d7b 02       		.byte	0x2
+ 48699 10d7c 7604     		.value	0x476
+ 48700 10d7e 950D0100 		.long	0x10d95
+ 48701 10d82 32       		.uleb128 0x32
+ 48702 10d83 A10E0000 		.long	0xea1
+ 48703 10d87 03       		.byte	0x3
+ 48704 10d88 91       		.byte	0x91
+ 48705 10d89 A079     		.sleb128 -864
+ 48706 10d8b 32       		.uleb128 0x32
+ 48707 10d8c 970E0000 		.long	0xe97
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1185
+
+
+ 48708 10d90 03       		.byte	0x3
+ 48709 10d91 91       		.byte	0x91
+ 48710 10d92 B079     		.sleb128 -848
+ 48711 10d94 00       		.byte	0x0
+ 48712 10d95 31       		.uleb128 0x31
+ 48713 10d96 860E0000 		.long	0xe86
+ 48714 10d9a 00000000 		.quad	.LBB4698
+ 48714      00000000 
+ 48715 10da2 00000000 		.quad	.LBE4698
+ 48715      00000000 
+ 48716 10daa 02       		.byte	0x2
+ 48717 10dab 7704     		.value	0x477
+ 48718 10dad C40D0100 		.long	0x10dc4
+ 48719 10db1 32       		.uleb128 0x32
+ 48720 10db2 A10E0000 		.long	0xea1
+ 48721 10db6 03       		.byte	0x3
+ 48722 10db7 91       		.byte	0x91
+ 48723 10db8 C079     		.sleb128 -832
+ 48724 10dba 32       		.uleb128 0x32
+ 48725 10dbb 970E0000 		.long	0xe97
+ 48726 10dbf 03       		.byte	0x3
+ 48727 10dc0 91       		.byte	0x91
+ 48728 10dc1 D079     		.sleb128 -816
+ 48729 10dc3 00       		.byte	0x0
+ 48730 10dc4 35       		.uleb128 0x35
+ 48731 10dc5 860E0000 		.long	0xe86
+ 48732 10dc9 00000000 		.quad	.LBB4700
+ 48732      00000000 
+ 48733 10dd1 00000000 		.quad	.LBE4700
+ 48733      00000000 
+ 48734 10dd9 02       		.byte	0x2
+ 48735 10dda 7804     		.value	0x478
+ 48736 10ddc 32       		.uleb128 0x32
+ 48737 10ddd A10E0000 		.long	0xea1
+ 48738 10de1 03       		.byte	0x3
+ 48739 10de2 91       		.byte	0x91
+ 48740 10de3 E079     		.sleb128 -800
+ 48741 10de5 32       		.uleb128 0x32
+ 48742 10de6 970E0000 		.long	0xe97
+ 48743 10dea 03       		.byte	0x3
+ 48744 10deb 91       		.byte	0x91
+ 48745 10dec F079     		.sleb128 -784
+ 48746 10dee 00       		.byte	0x0
+ 48747 10def 00       		.byte	0x0
+ 48748 10df0 00       		.byte	0x0
+ 48749 10df1 36       		.uleb128 0x36
+ 48750 10df2 00000000 		.quad	.LBB4702
+ 48750      00000000 
+ 48751 10dfa 00000000 		.quad	.LBE4702
+ 48751      00000000 
+ 48752 10e02 100E0100 		.long	0x10e10
+ 48753 10e06 34       		.uleb128 0x34
+ 48754 10e07 10FC0000 		.long	0xfc10
+ 48755 10e0b 03       		.byte	0x3
+ 48756 10e0c 91       		.byte	0x91
+ 48757 10e0d B065     		.sleb128 -3408
+ 48758 10e0f 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1186
+
+
+ 48759 10e10 31       		.uleb128 0x31
+ 48760 10e11 34E90000 		.long	0xe934
+ 48761 10e15 00000000 		.quad	.LBB4703
+ 48761      00000000 
+ 48762 10e1d 00000000 		.quad	.LBE4703
+ 48762      00000000 
+ 48763 10e25 02       		.byte	0x2
+ 48764 10e26 A108     		.value	0x8a1
+ 48765 10e28 6A0E0100 		.long	0x10e6a
+ 48766 10e2c 32       		.uleb128 0x32
+ 48767 10e2d 52E90000 		.long	0xe952
+ 48768 10e31 03       		.byte	0x3
+ 48769 10e32 91       		.byte	0x91
+ 48770 10e33 807A     		.sleb128 -768
+ 48771 10e35 32       		.uleb128 0x32
+ 48772 10e36 46E90000 		.long	0xe946
+ 48773 10e3a 03       		.byte	0x3
+ 48774 10e3b 91       		.byte	0x91
+ 48775 10e3c 907A     		.sleb128 -752
+ 48776 10e3e 35       		.uleb128 0x35
+ 48777 10e3f 860E0000 		.long	0xe86
+ 48778 10e43 00000000 		.quad	.LBB4705
+ 48778      00000000 
+ 48779 10e4b 00000000 		.quad	.LBE4705
+ 48779      00000000 
+ 48780 10e53 02       		.byte	0x2
+ 48781 10e54 2302     		.value	0x223
+ 48782 10e56 32       		.uleb128 0x32
+ 48783 10e57 A10E0000 		.long	0xea1
+ 48784 10e5b 03       		.byte	0x3
+ 48785 10e5c 91       		.byte	0x91
+ 48786 10e5d A07A     		.sleb128 -736
+ 48787 10e5f 32       		.uleb128 0x32
+ 48788 10e60 970E0000 		.long	0xe97
+ 48789 10e64 03       		.byte	0x3
+ 48790 10e65 91       		.byte	0x91
+ 48791 10e66 B07A     		.sleb128 -720
+ 48792 10e68 00       		.byte	0x0
+ 48793 10e69 00       		.byte	0x0
+ 48794 10e6a 36       		.uleb128 0x36
+ 48795 10e6b 00000000 		.quad	.LBB4707
+ 48795      00000000 
+ 48796 10e73 00000000 		.quad	.LBE4707
+ 48796      00000000 
+ 48797 10e7b 890E0100 		.long	0x10e89
+ 48798 10e7f 34       		.uleb128 0x34
+ 48799 10e80 20FC0000 		.long	0xfc20
+ 48800 10e84 03       		.byte	0x3
+ 48801 10e85 91       		.byte	0x91
+ 48802 10e86 A065     		.sleb128 -3424
+ 48803 10e88 00       		.byte	0x0
+ 48804 10e89 33       		.uleb128 0x33
+ 48805 10e8a 00000000 		.quad	.LBB4708
+ 48805      00000000 
+ 48806 10e92 00000000 		.quad	.LBE4708
+ 48806      00000000 
+ 48807 10e9a 34       		.uleb128 0x34
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1187
+
+
+ 48808 10e9b 2CFC0000 		.long	0xfc2c
+ 48809 10e9f 03       		.byte	0x3
+ 48810 10ea0 91       		.byte	0x91
+ 48811 10ea1 9065     		.sleb128 -3440
+ 48812 10ea3 00       		.byte	0x0
+ 48813 10ea4 00       		.byte	0x0
+ 48814 10ea5 00       		.byte	0x0
+ 48815 10ea6 35       		.uleb128 0x35
+ 48816 10ea7 98FC0000 		.long	0xfc98
+ 48817 10eab 00000000 		.quad	.LBB4709
+ 48817      00000000 
+ 48818 10eb3 00000000 		.quad	.LBE4709
+ 48818      00000000 
+ 48819 10ebb 02       		.byte	0x2
+ 48820 10ebc E708     		.value	0x8e7
+ 48821 10ebe 32       		.uleb128 0x32
+ 48822 10ebf B6FC0000 		.long	0xfcb6
+ 48823 10ec3 03       		.byte	0x3
+ 48824 10ec4 91       		.byte	0x91
+ 48825 10ec5 C07A     		.sleb128 -704
+ 48826 10ec7 32       		.uleb128 0x32
+ 48827 10ec8 AAFC0000 		.long	0xfcaa
+ 48828 10ecc 03       		.byte	0x3
+ 48829 10ecd 91       		.byte	0x91
+ 48830 10ece D07A     		.sleb128 -688
+ 48831 10ed0 36       		.uleb128 0x36
+ 48832 10ed1 00000000 		.quad	.LBB4711
+ 48832      00000000 
+ 48833 10ed9 00000000 		.quad	.LBE4711
+ 48833      00000000 
+ 48834 10ee1 EF0E0100 		.long	0x10eef
+ 48835 10ee5 34       		.uleb128 0x34
+ 48836 10ee6 C7FC0000 		.long	0xfcc7
+ 48837 10eea 03       		.byte	0x3
+ 48838 10eeb 91       		.byte	0x91
+ 48839 10eec C067     		.sleb128 -3136
+ 48840 10eee 00       		.byte	0x0
+ 48841 10eef 31       		.uleb128 0x31
+ 48842 10ef0 38FC0000 		.long	0xfc38
+ 48843 10ef4 00000000 		.quad	.LBB4712
+ 48843      00000000 
+ 48844 10efc 00000000 		.quad	.LBE4712
+ 48844      00000000 
+ 48845 10f04 02       		.byte	0x2
+ 48846 10f05 C308     		.value	0x8c3
+ 48847 10f07 78110100 		.long	0x11178
+ 48848 10f0b 32       		.uleb128 0x32
+ 48849 10f0c 4AFC0000 		.long	0xfc4a
+ 48850 10f10 03       		.byte	0x3
+ 48851 10f11 91       		.byte	0x91
+ 48852 10f12 E07A     		.sleb128 -672
+ 48853 10f14 35       		.uleb128 0x35
+ 48854 10f15 E00C0000 		.long	0xce0
+ 48855 10f19 00000000 		.quad	.LBB4714
+ 48855      00000000 
+ 48856 10f21 00000000 		.quad	.LBE4714
+ 48856      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1188
+
+
+ 48857 10f29 02       		.byte	0x2
+ 48858 10f2a 8803     		.value	0x388
+ 48859 10f2c 32       		.uleb128 0x32
+ 48860 10f2d FE0C0000 		.long	0xcfe
+ 48861 10f31 03       		.byte	0x3
+ 48862 10f32 91       		.byte	0x91
+ 48863 10f33 F87A     		.sleb128 -648
+ 48864 10f35 32       		.uleb128 0x32
+ 48865 10f36 F20C0000 		.long	0xcf2
+ 48866 10f3a 03       		.byte	0x3
+ 48867 10f3b 91       		.byte	0x91
+ 48868 10f3c 807B     		.sleb128 -640
+ 48869 10f3e 33       		.uleb128 0x33
+ 48870 10f3f 00000000 		.quad	.LBB4715
+ 48870      00000000 
+ 48871 10f47 00000000 		.quad	.LBE4715
+ 48871      00000000 
+ 48872 10f4f 34       		.uleb128 0x34
+ 48873 10f50 0A0D0000 		.long	0xd0a
+ 48874 10f54 03       		.byte	0x3
+ 48875 10f55 91       		.byte	0x91
+ 48876 10f56 D07B     		.sleb128 -560
+ 48877 10f58 34       		.uleb128 0x34
+ 48878 10f59 150D0000 		.long	0xd15
+ 48879 10f5d 03       		.byte	0x3
+ 48880 10f5e 91       		.byte	0x91
+ 48881 10f5f C07B     		.sleb128 -576
+ 48882 10f61 34       		.uleb128 0x34
+ 48883 10f62 200D0000 		.long	0xd20
+ 48884 10f66 03       		.byte	0x3
+ 48885 10f67 91       		.byte	0x91
+ 48886 10f68 B07B     		.sleb128 -592
+ 48887 10f6a 34       		.uleb128 0x34
+ 48888 10f6b 2C0D0000 		.long	0xd2c
+ 48889 10f6f 03       		.byte	0x3
+ 48890 10f70 91       		.byte	0x91
+ 48891 10f71 A07B     		.sleb128 -608
+ 48892 10f73 34       		.uleb128 0x34
+ 48893 10f74 380D0000 		.long	0xd38
+ 48894 10f78 03       		.byte	0x3
+ 48895 10f79 91       		.byte	0x91
+ 48896 10f7a 9C7B     		.sleb128 -612
+ 48897 10f7c 31       		.uleb128 0x31
+ 48898 10f7d 4F0D0000 		.long	0xd4f
+ 48899 10f81 00000000 		.quad	.LBB4716
+ 48899      00000000 
+ 48900 10f89 00000000 		.quad	.LBE4716
+ 48900      00000000 
+ 48901 10f91 02       		.byte	0x2
+ 48902 10f92 5603     		.value	0x356
+ 48903 10f94 AB0F0100 		.long	0x10fab
+ 48904 10f98 32       		.uleb128 0x32
+ 48905 10f99 6A0D0000 		.long	0xd6a
+ 48906 10f9d 03       		.byte	0x3
+ 48907 10f9e 91       		.byte	0x91
+ 48908 10f9f E07B     		.sleb128 -544
+ 48909 10fa1 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1189
+
+
+ 48910 10fa2 600D0000 		.long	0xd60
+ 48911 10fa6 03       		.byte	0x3
+ 48912 10fa7 91       		.byte	0x91
+ 48913 10fa8 F07B     		.sleb128 -528
+ 48914 10faa 00       		.byte	0x0
+ 48915 10fab 31       		.uleb128 0x31
+ 48916 10fac 750D0000 		.long	0xd75
+ 48917 10fb0 00000000 		.quad	.LBB4718
+ 48917      00000000 
+ 48918 10fb8 00000000 		.quad	.LBE4718
+ 48918      00000000 
+ 48919 10fc0 02       		.byte	0x2
+ 48920 10fc1 5903     		.value	0x359
+ 48921 10fc3 DA0F0100 		.long	0x10fda
+ 48922 10fc7 32       		.uleb128 0x32
+ 48923 10fc8 930D0000 		.long	0xd93
+ 48924 10fcc 03       		.byte	0x3
+ 48925 10fcd 91       		.byte	0x91
+ 48926 10fce 8C7C     		.sleb128 -500
+ 48927 10fd0 32       		.uleb128 0x32
+ 48928 10fd1 870D0000 		.long	0xd87
+ 48929 10fd5 03       		.byte	0x3
+ 48930 10fd6 91       		.byte	0x91
+ 48931 10fd7 907C     		.sleb128 -496
+ 48932 10fd9 00       		.byte	0x0
+ 48933 10fda 31       		.uleb128 0x31
+ 48934 10fdb 4F0D0000 		.long	0xd4f
+ 48935 10fdf 00000000 		.quad	.LBB4720
+ 48935      00000000 
+ 48936 10fe7 00000000 		.quad	.LBE4720
+ 48936      00000000 
+ 48937 10fef 02       		.byte	0x2
+ 48938 10ff0 5B03     		.value	0x35b
+ 48939 10ff2 09100100 		.long	0x11009
+ 48940 10ff6 32       		.uleb128 0x32
+ 48941 10ff7 6A0D0000 		.long	0xd6a
+ 48942 10ffb 03       		.byte	0x3
+ 48943 10ffc 91       		.byte	0x91
+ 48944 10ffd A07C     		.sleb128 -480
+ 48945 10fff 32       		.uleb128 0x32
+ 48946 11000 600D0000 		.long	0xd60
+ 48947 11004 03       		.byte	0x3
+ 48948 11005 91       		.byte	0x91
+ 48949 11006 B07C     		.sleb128 -464
+ 48950 11008 00       		.byte	0x0
+ 48951 11009 31       		.uleb128 0x31
+ 48952 1100a A00D0000 		.long	0xda0
+ 48953 1100e 00000000 		.quad	.LBB4722
+ 48953      00000000 
+ 48954 11016 00000000 		.quad	.LBE4722
+ 48954      00000000 
+ 48955 1101e 02       		.byte	0x2
+ 48956 1101f 6403     		.value	0x364
+ 48957 11021 63100100 		.long	0x11063
+ 48958 11025 32       		.uleb128 0x32
+ 48959 11026 BE0D0000 		.long	0xdbe
+ 48960 1102a 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1190
+
+
+ 48961 1102b 91       		.byte	0x91
+ 48962 1102c C07C     		.sleb128 -448
+ 48963 1102e 32       		.uleb128 0x32
+ 48964 1102f B20D0000 		.long	0xdb2
+ 48965 11033 03       		.byte	0x3
+ 48966 11034 91       		.byte	0x91
+ 48967 11035 D07C     		.sleb128 -432
+ 48968 11037 35       		.uleb128 0x35
+ 48969 11038 CB0D0000 		.long	0xdcb
+ 48970 1103c 00000000 		.quad	.LBB4724
+ 48970      00000000 
+ 48971 11044 00000000 		.quad	.LBE4724
+ 48971      00000000 
+ 48972 1104c 02       		.byte	0x2
+ 48973 1104d 7501     		.value	0x175
+ 48974 1104f 32       		.uleb128 0x32
+ 48975 11050 E90D0000 		.long	0xde9
+ 48976 11054 03       		.byte	0x3
+ 48977 11055 91       		.byte	0x91
+ 48978 11056 E07C     		.sleb128 -416
+ 48979 11058 32       		.uleb128 0x32
+ 48980 11059 DD0D0000 		.long	0xddd
+ 48981 1105d 03       		.byte	0x3
+ 48982 1105e 91       		.byte	0x91
+ 48983 1105f F07C     		.sleb128 -400
+ 48984 11061 00       		.byte	0x0
+ 48985 11062 00       		.byte	0x0
+ 48986 11063 31       		.uleb128 0x31
+ 48987 11064 FB0D0000 		.long	0xdfb
+ 48988 11068 00000000 		.quad	.LBB4726
+ 48988      00000000 
+ 48989 11070 00000000 		.quad	.LBE4726
+ 48989      00000000 
+ 48990 11078 02       		.byte	0x2
+ 48991 11079 6603     		.value	0x366
+ 48992 1107b 92100100 		.long	0x11092
+ 48993 1107f 32       		.uleb128 0x32
+ 48994 11080 160E0000 		.long	0xe16
+ 48995 11084 03       		.byte	0x3
+ 48996 11085 91       		.byte	0x91
+ 48997 11086 807D     		.sleb128 -384
+ 48998 11088 32       		.uleb128 0x32
+ 48999 11089 0C0E0000 		.long	0xe0c
+ 49000 1108d 03       		.byte	0x3
+ 49001 1108e 91       		.byte	0x91
+ 49002 1108f 907D     		.sleb128 -368
+ 49003 11091 00       		.byte	0x0
+ 49004 11092 31       		.uleb128 0x31
+ 49005 11093 A00D0000 		.long	0xda0
+ 49006 11097 00000000 		.quad	.LBB4728
+ 49006      00000000 
+ 49007 1109f 00000000 		.quad	.LBE4728
+ 49007      00000000 
+ 49008 110a7 02       		.byte	0x2
+ 49009 110a8 6803     		.value	0x368
+ 49010 110aa EC100100 		.long	0x110ec
+ 49011 110ae 32       		.uleb128 0x32
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1191
+
+
+ 49012 110af BE0D0000 		.long	0xdbe
+ 49013 110b3 03       		.byte	0x3
+ 49014 110b4 91       		.byte	0x91
+ 49015 110b5 A07D     		.sleb128 -352
+ 49016 110b7 32       		.uleb128 0x32
+ 49017 110b8 B20D0000 		.long	0xdb2
+ 49018 110bc 03       		.byte	0x3
+ 49019 110bd 91       		.byte	0x91
+ 49020 110be B07D     		.sleb128 -336
+ 49021 110c0 35       		.uleb128 0x35
+ 49022 110c1 CB0D0000 		.long	0xdcb
+ 49023 110c5 00000000 		.quad	.LBB4730
+ 49023      00000000 
+ 49024 110cd 00000000 		.quad	.LBE4730
+ 49024      00000000 
+ 49025 110d5 02       		.byte	0x2
+ 49026 110d6 7501     		.value	0x175
+ 49027 110d8 32       		.uleb128 0x32
+ 49028 110d9 E90D0000 		.long	0xde9
+ 49029 110dd 03       		.byte	0x3
+ 49030 110de 91       		.byte	0x91
+ 49031 110df C07D     		.sleb128 -320
+ 49032 110e1 32       		.uleb128 0x32
+ 49033 110e2 DD0D0000 		.long	0xddd
+ 49034 110e6 03       		.byte	0x3
+ 49035 110e7 91       		.byte	0x91
+ 49036 110e8 D07D     		.sleb128 -304
+ 49037 110ea 00       		.byte	0x0
+ 49038 110eb 00       		.byte	0x0
+ 49039 110ec 31       		.uleb128 0x31
+ 49040 110ed FB0D0000 		.long	0xdfb
+ 49041 110f1 00000000 		.quad	.LBB4732
+ 49041      00000000 
+ 49042 110f9 00000000 		.quad	.LBE4732
+ 49042      00000000 
+ 49043 11101 02       		.byte	0x2
+ 49044 11102 6A03     		.value	0x36a
+ 49045 11104 1B110100 		.long	0x1111b
+ 49046 11108 32       		.uleb128 0x32
+ 49047 11109 160E0000 		.long	0xe16
+ 49048 1110d 03       		.byte	0x3
+ 49049 1110e 91       		.byte	0x91
+ 49050 1110f E07D     		.sleb128 -288
+ 49051 11111 32       		.uleb128 0x32
+ 49052 11112 0C0E0000 		.long	0xe0c
+ 49053 11116 03       		.byte	0x3
+ 49054 11117 91       		.byte	0x91
+ 49055 11118 F07D     		.sleb128 -272
+ 49056 1111a 00       		.byte	0x0
+ 49057 1111b 31       		.uleb128 0x31
+ 49058 1111c 210E0000 		.long	0xe21
+ 49059 11120 00000000 		.quad	.LBB4734
+ 49059      00000000 
+ 49060 11128 00000000 		.quad	.LBE4734
+ 49060      00000000 
+ 49061 11130 02       		.byte	0x2
+ 49062 11131 6C03     		.value	0x36c
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1192
+
+
+ 49063 11133 4A110100 		.long	0x1114a
+ 49064 11137 32       		.uleb128 0x32
+ 49065 11138 3E0E0000 		.long	0xe3e
+ 49066 1113c 03       		.byte	0x3
+ 49067 1113d 91       		.byte	0x91
+ 49068 1113e 807E     		.sleb128 -256
+ 49069 11140 32       		.uleb128 0x32
+ 49070 11141 330E0000 		.long	0xe33
+ 49071 11145 03       		.byte	0x3
+ 49072 11146 91       		.byte	0x91
+ 49073 11147 907E     		.sleb128 -240
+ 49074 11149 00       		.byte	0x0
+ 49075 1114a 35       		.uleb128 0x35
+ 49076 1114b 4F0D0000 		.long	0xd4f
+ 49077 1114f 00000000 		.quad	.LBB4736
+ 49077      00000000 
+ 49078 11157 00000000 		.quad	.LBE4736
+ 49078      00000000 
+ 49079 1115f 02       		.byte	0x2
+ 49080 11160 6E03     		.value	0x36e
+ 49081 11162 32       		.uleb128 0x32
+ 49082 11163 6A0D0000 		.long	0xd6a
+ 49083 11167 03       		.byte	0x3
+ 49084 11168 91       		.byte	0x91
+ 49085 11169 A07E     		.sleb128 -224
+ 49086 1116b 32       		.uleb128 0x32
+ 49087 1116c 600D0000 		.long	0xd60
+ 49088 11170 03       		.byte	0x3
+ 49089 11171 91       		.byte	0x91
+ 49090 11172 B07E     		.sleb128 -208
+ 49091 11174 00       		.byte	0x0
+ 49092 11175 00       		.byte	0x0
+ 49093 11176 00       		.byte	0x0
+ 49094 11177 00       		.byte	0x0
+ 49095 11178 36       		.uleb128 0x36
+ 49096 11179 00000000 		.quad	.LBB4738
+ 49096      00000000 
+ 49097 11181 00000000 		.quad	.LBE4738
+ 49097      00000000 
+ 49098 11189 97110100 		.long	0x11197
+ 49099 1118d 34       		.uleb128 0x34
+ 49100 1118e D7FC0000 		.long	0xfcd7
+ 49101 11192 03       		.byte	0x3
+ 49102 11193 91       		.byte	0x91
+ 49103 11194 B067     		.sleb128 -3152
+ 49104 11196 00       		.byte	0x0
+ 49105 11197 31       		.uleb128 0x31
+ 49106 11198 57FC0000 		.long	0xfc57
+ 49107 1119c 00000000 		.quad	.LBB4739
+ 49107      00000000 
+ 49108 111a4 00000000 		.quad	.LBE4739
+ 49108      00000000 
+ 49109 111ac 02       		.byte	0x2
+ 49110 111ad C708     		.value	0x8c7
+ 49111 111af 34120100 		.long	0x11234
+ 49112 111b3 32       		.uleb128 0x32
+ 49113 111b4 69FC0000 		.long	0xfc69
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1193
+
+
+ 49114 111b8 03       		.byte	0x3
+ 49115 111b9 91       		.byte	0x91
+ 49116 111ba C07E     		.sleb128 -192
+ 49117 111bc 33       		.uleb128 0x33
+ 49118 111bd 00000000 		.quad	.LBB4740
+ 49118      00000000 
+ 49119 111c5 00000000 		.quad	.LBE4740
+ 49119      00000000 
+ 49120 111cd 34       		.uleb128 0x34
+ 49121 111ce 75FC0000 		.long	0xfc75
+ 49122 111d2 09       		.byte	0x9
+ 49123 111d3 03       		.byte	0x3
+ 49124 111d4 00000000 		.quad	InvShiftRowTable.7367
+ 49124      00000000 
+ 49125 111dc 35       		.uleb128 0x35
+ 49126 111dd A00D0000 		.long	0xda0
+ 49127 111e1 00000000 		.quad	.LBB4741
+ 49127      00000000 
+ 49128 111e9 00000000 		.quad	.LBE4741
+ 49128      00000000 
+ 49129 111f1 02       		.byte	0x2
+ 49130 111f2 6402     		.value	0x264
+ 49131 111f4 32       		.uleb128 0x32
+ 49132 111f5 BE0D0000 		.long	0xdbe
+ 49133 111f9 03       		.byte	0x3
+ 49134 111fa 91       		.byte	0x91
+ 49135 111fb D07E     		.sleb128 -176
+ 49136 111fd 32       		.uleb128 0x32
+ 49137 111fe B20D0000 		.long	0xdb2
+ 49138 11202 03       		.byte	0x3
+ 49139 11203 91       		.byte	0x91
+ 49140 11204 E07E     		.sleb128 -160
+ 49141 11206 35       		.uleb128 0x35
+ 49142 11207 CB0D0000 		.long	0xdcb
+ 49143 1120b 00000000 		.quad	.LBB4743
+ 49143      00000000 
+ 49144 11213 00000000 		.quad	.LBE4743
+ 49144      00000000 
+ 49145 1121b 02       		.byte	0x2
+ 49146 1121c 7501     		.value	0x175
+ 49147 1121e 32       		.uleb128 0x32
+ 49148 1121f E90D0000 		.long	0xde9
+ 49149 11223 03       		.byte	0x3
+ 49150 11224 91       		.byte	0x91
+ 49151 11225 F07E     		.sleb128 -144
+ 49152 11227 32       		.uleb128 0x32
+ 49153 11228 DD0D0000 		.long	0xddd
+ 49154 1122c 03       		.byte	0x3
+ 49155 1122d 91       		.byte	0x91
+ 49156 1122e 807F     		.sleb128 -128
+ 49157 11230 00       		.byte	0x0
+ 49158 11231 00       		.byte	0x0
+ 49159 11232 00       		.byte	0x0
+ 49160 11233 00       		.byte	0x0
+ 49161 11234 36       		.uleb128 0x36
+ 49162 11235 00000000 		.quad	.LBB4745
+ 49162      00000000 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1194
+
+
+ 49163 1123d 00000000 		.quad	.LBE4745
+ 49163      00000000 
+ 49164 11245 53120100 		.long	0x11253
+ 49165 11249 34       		.uleb128 0x34
+ 49166 1124a E7FC0000 		.long	0xfce7
+ 49167 1124e 03       		.byte	0x3
+ 49168 1124f 91       		.byte	0x91
+ 49169 11250 A067     		.sleb128 -3168
+ 49170 11252 00       		.byte	0x0
+ 49171 11253 31       		.uleb128 0x31
+ 49172 11254 34E90000 		.long	0xe934
+ 49173 11258 00000000 		.quad	.LBB4746
+ 49173      00000000 
+ 49174 11260 00000000 		.quad	.LBE4746
+ 49174      00000000 
+ 49175 11268 02       		.byte	0x2
+ 49176 11269 CB08     		.value	0x8cb
+ 49177 1126b AC120100 		.long	0x112ac
+ 49178 1126f 32       		.uleb128 0x32
+ 49179 11270 52E90000 		.long	0xe952
+ 49180 11274 03       		.byte	0x3
+ 49181 11275 91       		.byte	0x91
+ 49182 11276 907F     		.sleb128 -112
+ 49183 11278 32       		.uleb128 0x32
+ 49184 11279 46E90000 		.long	0xe946
+ 49185 1127d 03       		.byte	0x3
+ 49186 1127e 91       		.byte	0x91
+ 49187 1127f A07F     		.sleb128 -96
+ 49188 11281 35       		.uleb128 0x35
+ 49189 11282 860E0000 		.long	0xe86
+ 49190 11286 00000000 		.quad	.LBB4748
+ 49190      00000000 
+ 49191 1128e 00000000 		.quad	.LBE4748
+ 49191      00000000 
+ 49192 11296 02       		.byte	0x2
+ 49193 11297 2302     		.value	0x223
+ 49194 11299 32       		.uleb128 0x32
+ 49195 1129a A10E0000 		.long	0xea1
+ 49196 1129e 03       		.byte	0x3
+ 49197 1129f 91       		.byte	0x91
+ 49198 112a0 B07F     		.sleb128 -80
+ 49199 112a2 32       		.uleb128 0x32
+ 49200 112a3 970E0000 		.long	0xe97
+ 49201 112a7 02       		.byte	0x2
+ 49202 112a8 91       		.byte	0x91
+ 49203 112a9 40       		.sleb128 -64
+ 49204 112aa 00       		.byte	0x0
+ 49205 112ab 00       		.byte	0x0
+ 49206 112ac 36       		.uleb128 0x36
+ 49207 112ad 00000000 		.quad	.LBB4750
+ 49207      00000000 
+ 49208 112b5 00000000 		.quad	.LBE4750
+ 49208      00000000 
+ 49209 112bd CB120100 		.long	0x112cb
+ 49210 112c1 34       		.uleb128 0x34
+ 49211 112c2 F7FC0000 		.long	0xfcf7
+ 49212 112c6 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1195
+
+
+ 49213 112c7 91       		.byte	0x91
+ 49214 112c8 9067     		.sleb128 -3184
+ 49215 112ca 00       		.byte	0x0
+ 49216 112cb 33       		.uleb128 0x33
+ 49217 112cc 00000000 		.quad	.LBB4751
+ 49217      00000000 
+ 49218 112d4 00000000 		.quad	.LBE4751
+ 49218      00000000 
+ 49219 112dc 34       		.uleb128 0x34
+ 49220 112dd 03FD0000 		.long	0xfd03
+ 49221 112e1 03       		.byte	0x3
+ 49222 112e2 91       		.byte	0x91
+ 49223 112e3 8067     		.sleb128 -3200
+ 49224 112e5 00       		.byte	0x0
+ 49225 112e6 00       		.byte	0x0
+ 49226 112e7 00       		.byte	0x0
+ 49227 112e8 2D       		.uleb128 0x2d
+ 49228 112e9 00000000 		.long	.LASF395
+ 49229 112ed 02       		.byte	0x2
+ 49230 112ee 0309     		.value	0x903
+ 49231 112f0 01       		.byte	0x1
+ 49232 112f1 00000000 		.quad	.LFB660
+ 49232      00000000 
+ 49233 112f9 00000000 		.quad	.LFE660
+ 49233      00000000 
+ 49234 11301 00000000 		.long	.LLST10
+ 49235 11305 19130100 		.long	0x11319
+ 49236 11309 2E       		.uleb128 0x2e
+ 49237 1130a 00000000 		.long	.LASF396
+ 49238 1130e 02       		.byte	0x2
+ 49239 1130f 0309     		.value	0x903
+ 49240 11311 D2030000 		.long	0x3d2
+ 49241 11315 02       		.byte	0x2
+ 49242 11316 91       		.byte	0x91
+ 49243 11317 68       		.sleb128 -24
+ 49244 11318 00       		.byte	0x0
+ 49245 11319 3A       		.uleb128 0x3a
+ 49246 1131a 00000000 		.long	.LASF397
+ 49247 1131e 02       		.byte	0x2
+ 49248 1131f 0D09     		.value	0x90d
+ 49249 11321 6D000000 		.long	0x6d
+ 49250 11325 00000000 		.quad	.LFB661
+ 49250      00000000 
+ 49251 1132d 00000000 		.quad	.LFE661
+ 49251      00000000 
+ 49252 11335 00000000 		.long	.LLST11
+ 49253 11339 3A       		.uleb128 0x3a
+ 49254 1133a 00000000 		.long	.LASF398
+ 49255 1133e 02       		.byte	0x2
+ 49256 1133f 1C09     		.value	0x91c
+ 49257 11341 6D000000 		.long	0x6d
+ 49258 11345 00000000 		.quad	.LFB662
+ 49258      00000000 
+ 49259 1134d 00000000 		.quad	.LFE662
+ 49259      00000000 
+ 49260 11355 00000000 		.long	.LLST12
+ 49261 11359 39       		.uleb128 0x39
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1196
+
+
+ 49262 1135a 00000000 		.long	.LASF399
+ 49263 1135e 02       		.byte	0x2
+ 49264 1135f 2909     		.value	0x929
+ 49265 11361 01       		.byte	0x1
+ 49266 11362 91000000 		.long	0x91
+ 49267 11366 00000000 		.quad	.LFB663
+ 49267      00000000 
+ 49268 1136e 00000000 		.quad	.LFE663
+ 49268      00000000 
+ 49269 11376 00000000 		.long	.LLST13
+ 49270 1137a F1130100 		.long	0x113f1
+ 49271 1137e 2E       		.uleb128 0x2e
+ 49272 1137f 00000000 		.long	.LASF400
+ 49273 11383 02       		.byte	0x2
+ 49274 11384 2909     		.value	0x929
+ 49275 11386 C4000000 		.long	0xc4
+ 49276 1138a 02       		.byte	0x2
+ 49277 1138b 91       		.byte	0x91
+ 49278 1138c 58       		.sleb128 -40
+ 49279 1138d 2E       		.uleb128 0x2e
+ 49280 1138e 00000000 		.long	.LASF401
+ 49281 11392 02       		.byte	0x2
+ 49282 11393 2909     		.value	0x929
+ 49283 11395 B9000000 		.long	0xb9
+ 49284 11399 02       		.byte	0x2
+ 49285 1139a 91       		.byte	0x91
+ 49286 1139b 50       		.sleb128 -48
+ 49287 1139c 2E       		.uleb128 0x2e
+ 49288 1139d 00000000 		.long	.LASF402
+ 49289 113a1 02       		.byte	0x2
+ 49290 113a2 2A09     		.value	0x92a
+ 49291 113a4 6D000000 		.long	0x6d
+ 49292 113a8 02       		.byte	0x2
+ 49293 113a9 91       		.byte	0x91
+ 49294 113aa 4C       		.sleb128 -52
+ 49295 113ab 37       		.uleb128 0x37
+ 49296 113ac 726300   		.string	"rc"
+ 49297 113af 02       		.byte	0x2
+ 49298 113b0 2C09     		.value	0x92c
+ 49299 113b2 91000000 		.long	0x91
+ 49300 113b6 02       		.byte	0x2
+ 49301 113b7 91       		.byte	0x91
+ 49302 113b8 64       		.sleb128 -28
+ 49303 113b9 37       		.uleb128 0x37
+ 49304 113ba 6B657900 		.string	"key"
+ 49305 113be 02       		.byte	0x2
+ 49306 113bf 2D09     		.value	0x92d
+ 49307 113c1 F1130100 		.long	0x113f1
+ 49308 113c5 02       		.byte	0x2
+ 49309 113c6 91       		.byte	0x91
+ 49310 113c7 68       		.sleb128 -24
+ 49311 113c8 3B       		.uleb128 0x3b
+ 49312 113c9 00000000 		.long	.LASF366
+ 49313 113cd 07140100 		.long	0x11407
+ 49314 113d1 01       		.byte	0x1
+ 49315 113d2 09       		.byte	0x9
+ 49316 113d3 03       		.byte	0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1197
+
+
+ 49317 113d4 00000000 		.quad	__PRETTY_FUNCTION__.9026
+ 49317      00000000 
+ 49318 113dc 3B       		.uleb128 0x3b
+ 49319 113dd 00000000 		.long	.LASF403
+ 49320 113e1 0C140100 		.long	0x1140c
+ 49321 113e5 01       		.byte	0x1
+ 49322 113e6 09       		.byte	0x9
+ 49323 113e7 03       		.byte	0x3
+ 49324 113e8 00000000 		.quad	__func__.9027
+ 49324      00000000 
+ 49325 113f0 00       		.byte	0x0
+ 49326 113f1 07       		.uleb128 0x7
+ 49327 113f2 08       		.byte	0x8
+ 49328 113f3 6D040000 		.long	0x46d
+ 49329 113f7 19       		.uleb128 0x19
+ 49330 113f8 9F000000 		.long	0x9f
+ 49331 113fc 07140100 		.long	0x11407
+ 49332 11400 1A       		.uleb128 0x1a
+ 49333 11401 9C000000 		.long	0x9c
+ 49334 11405 22       		.byte	0x22
+ 49335 11406 00       		.byte	0x0
+ 49336 11407 06       		.uleb128 0x6
+ 49337 11408 F7130100 		.long	0x113f7
+ 49338 1140c 06       		.uleb128 0x6
+ 49339 1140d F7130100 		.long	0x113f7
+ 49340 11411 39       		.uleb128 0x39
+ 49341 11412 00000000 		.long	.LASF404
+ 49342 11416 02       		.byte	0x2
+ 49343 11417 5409     		.value	0x954
+ 49344 11419 01       		.byte	0x1
+ 49345 1141a 91000000 		.long	0x91
+ 49346 1141e 00000000 		.quad	.LFB664
+ 49346      00000000 
+ 49347 11426 00000000 		.quad	.LFE664
+ 49347      00000000 
+ 49348 1142e 00000000 		.long	.LLST14
+ 49349 11432 A6140100 		.long	0x114a6
+ 49350 11436 2E       		.uleb128 0x2e
+ 49351 11437 00000000 		.long	.LASF405
+ 49352 1143b 02       		.byte	0x2
+ 49353 1143c 5409     		.value	0x954
+ 49354 1143e C4000000 		.long	0xc4
+ 49355 11442 03       		.byte	0x3
+ 49356 11443 91       		.byte	0x91
+ 49357 11444 D87D     		.sleb128 -296
+ 49358 11446 2E       		.uleb128 0x2e
+ 49359 11447 00000000 		.long	.LASF401
+ 49360 1144b 02       		.byte	0x2
+ 49361 1144c 5509     		.value	0x955
+ 49362 1144e B9000000 		.long	0xb9
+ 49363 11452 03       		.byte	0x3
+ 49364 11453 91       		.byte	0x91
+ 49365 11454 D07D     		.sleb128 -304
+ 49366 11456 2E       		.uleb128 0x2e
+ 49367 11457 00000000 		.long	.LASF402
+ 49368 1145b 02       		.byte	0x2
+ 49369 1145c 5609     		.value	0x956
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1198
+
+
+ 49370 1145e 6D000000 		.long	0x6d
+ 49371 11462 03       		.byte	0x3
+ 49372 11463 91       		.byte	0x91
+ 49373 11464 CC7D     		.sleb128 -308
+ 49374 11466 30       		.uleb128 0x30
+ 49375 11467 00000000 		.long	.LASF400
+ 49376 1146b 02       		.byte	0x2
+ 49377 1146c 5809     		.value	0x958
+ 49378 1146e 6D040000 		.long	0x46d
+ 49379 11472 03       		.byte	0x3
+ 49380 11473 91       		.byte	0x91
+ 49381 11474 E07D     		.sleb128 -288
+ 49382 11476 37       		.uleb128 0x37
+ 49383 11477 726300   		.string	"rc"
+ 49384 1147a 02       		.byte	0x2
+ 49385 1147b 5909     		.value	0x959
+ 49386 1147d 91000000 		.long	0x91
+ 49387 11481 02       		.byte	0x2
+ 49388 11482 91       		.byte	0x91
+ 49389 11483 64       		.sleb128 -28
+ 49390 11484 33       		.uleb128 0x33
+ 49391 11485 00000000 		.quad	.LBB4752
+ 49391      00000000 
+ 49392 1148d 00000000 		.quad	.LBE4752
+ 49392      00000000 
+ 49393 11495 37       		.uleb128 0x37
+ 49394 11496 6B657900 		.string	"key"
+ 49395 1149a 02       		.byte	0x2
+ 49396 1149b 5E09     		.value	0x95e
+ 49397 1149d F1130100 		.long	0x113f1
+ 49398 114a1 02       		.byte	0x2
+ 49399 114a2 91       		.byte	0x91
+ 49400 114a3 68       		.sleb128 -24
+ 49401 114a4 00       		.byte	0x0
+ 49402 114a5 00       		.byte	0x0
+ 49403 114a6 39       		.uleb128 0x39
+ 49404 114a7 00000000 		.long	.LASF406
+ 49405 114ab 02       		.byte	0x2
+ 49406 114ac 8009     		.value	0x980
+ 49407 114ae 01       		.byte	0x1
+ 49408 114af B3010000 		.long	0x1b3
+ 49409 114b3 00000000 		.quad	.LFB665
+ 49409      00000000 
+ 49410 114bb 00000000 		.quad	.LFE665
+ 49410      00000000 
+ 49411 114c3 00000000 		.long	.LLST15
+ 49412 114c7 0D150100 		.long	0x1150d
+ 49413 114cb 2E       		.uleb128 0x2e
+ 49414 114cc 00000000 		.long	.LASF67
+ 49415 114d0 02       		.byte	0x2
+ 49416 114d1 8009     		.value	0x980
+ 49417 114d3 B3010000 		.long	0x1b3
+ 49418 114d7 02       		.byte	0x2
+ 49419 114d8 91       		.byte	0x91
+ 49420 114d9 50       		.sleb128 -48
+ 49421 114da 2E       		.uleb128 0x2e
+ 49422 114db 00000000 		.long	.LASF400
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1199
+
+
+ 49423 114df 02       		.byte	0x2
+ 49424 114e0 8109     		.value	0x981
+ 49425 114e2 D3000000 		.long	0xd3
+ 49426 114e6 02       		.byte	0x2
+ 49427 114e7 91       		.byte	0x91
+ 49428 114e8 48       		.sleb128 -56
+ 49429 114e9 37       		.uleb128 0x37
+ 49430 114ea 6B657900 		.string	"key"
+ 49431 114ee 02       		.byte	0x2
+ 49432 114ef 8309     		.value	0x983
+ 49433 114f1 0D150100 		.long	0x1150d
+ 49434 114f5 02       		.byte	0x2
+ 49435 114f6 91       		.byte	0x91
+ 49436 114f7 68       		.sleb128 -24
+ 49437 114f8 3B       		.uleb128 0x3b
+ 49438 114f9 00000000 		.long	.LASF366
+ 49439 114fd 28150100 		.long	0x11528
+ 49440 11501 01       		.byte	0x1
+ 49441 11502 09       		.byte	0x9
+ 49442 11503 03       		.byte	0x3
+ 49443 11504 00000000 		.quad	__PRETTY_FUNCTION__.9063
+ 49443      00000000 
+ 49444 1150c 00       		.byte	0x0
+ 49445 1150d 07       		.uleb128 0x7
+ 49446 1150e 08       		.byte	0x8
+ 49447 1150f 13150100 		.long	0x11513
+ 49448 11513 06       		.uleb128 0x6
+ 49449 11514 6D040000 		.long	0x46d
+ 49450 11518 19       		.uleb128 0x19
+ 49451 11519 9F000000 		.long	0x9f
+ 49452 1151d 28150100 		.long	0x11528
+ 49453 11521 1A       		.uleb128 0x1a
+ 49454 11522 9C000000 		.long	0x9c
+ 49455 11526 1C       		.byte	0x1c
+ 49456 11527 00       		.byte	0x0
+ 49457 11528 06       		.uleb128 0x6
+ 49458 11529 18150100 		.long	0x11518
+ 49459 1152d 39       		.uleb128 0x39
+ 49460 1152e 00000000 		.long	.LASF407
+ 49461 11532 02       		.byte	0x2
+ 49462 11533 A409     		.value	0x9a4
+ 49463 11535 01       		.byte	0x1
+ 49464 11536 B3010000 		.long	0x1b3
+ 49465 1153a 00000000 		.quad	.LFB666
+ 49465      00000000 
+ 49466 11542 00000000 		.quad	.LFE666
+ 49466      00000000 
+ 49467 1154a 00000000 		.long	.LLST16
+ 49468 1154e 94150100 		.long	0x11594
+ 49469 11552 2E       		.uleb128 0x2e
+ 49470 11553 00000000 		.long	.LASF67
+ 49471 11557 02       		.byte	0x2
+ 49472 11558 A409     		.value	0x9a4
+ 49473 1155a B3010000 		.long	0x1b3
+ 49474 1155e 02       		.byte	0x2
+ 49475 1155f 91       		.byte	0x91
+ 49476 11560 50       		.sleb128 -48
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1200
+
+
+ 49477 11561 2E       		.uleb128 0x2e
+ 49478 11562 00000000 		.long	.LASF405
+ 49479 11566 02       		.byte	0x2
+ 49480 11567 A509     		.value	0x9a5
+ 49481 11569 D3000000 		.long	0xd3
+ 49482 1156d 02       		.byte	0x2
+ 49483 1156e 91       		.byte	0x91
+ 49484 1156f 48       		.sleb128 -56
+ 49485 11570 37       		.uleb128 0x37
+ 49486 11571 6B657900 		.string	"key"
+ 49487 11575 02       		.byte	0x2
+ 49488 11576 A709     		.value	0x9a7
+ 49489 11578 0D150100 		.long	0x1150d
+ 49490 1157c 02       		.byte	0x2
+ 49491 1157d 91       		.byte	0x91
+ 49492 1157e 68       		.sleb128 -24
+ 49493 1157f 3B       		.uleb128 0x3b
+ 49494 11580 00000000 		.long	.LASF366
+ 49495 11584 94150100 		.long	0x11594
+ 49496 11588 01       		.byte	0x1
+ 49497 11589 09       		.byte	0x9
+ 49498 1158a 03       		.byte	0x3
+ 49499 1158b 00000000 		.quad	__PRETTY_FUNCTION__.9084
+ 49499      00000000 
+ 49500 11593 00       		.byte	0x0
+ 49501 11594 06       		.uleb128 0x6
+ 49502 11595 18150100 		.long	0x11518
+ 49503 11599 3C       		.uleb128 0x3c
+ 49504 1159a 00000000 		.long	.LASF408
+ 49505 1159e 02       		.byte	0x2
+ 49506 1159f CC09     		.value	0x9cc
+ 49507 115a1 24160100 		.long	0x11624
+ 49508 115a5 00000000 		.quad	.LFB667
+ 49508      00000000 
+ 49509 115ad 00000000 		.quad	.LFE667
+ 49509      00000000 
+ 49510 115b5 00000000 		.long	.LLST17
+ 49511 115b9 24160100 		.long	0x11624
+ 49512 115bd 30       		.uleb128 0x30
+ 49513 115be 00000000 		.long	.LASF409
+ 49514 115c2 02       		.byte	0x2
+ 49515 115c3 CE09     		.value	0x9ce
+ 49516 115c5 6D000000 		.long	0x6d
+ 49517 115c9 02       		.byte	0x2
+ 49518 115ca 91       		.byte	0x91
+ 49519 115cb 48       		.sleb128 -56
+ 49520 115cc 37       		.uleb128 0x37
+ 49521 115cd 6100     		.string	"a"
+ 49522 115cf 02       		.byte	0x2
+ 49523 115d0 CE09     		.value	0x9ce
+ 49524 115d2 6D000000 		.long	0x6d
+ 49525 115d6 02       		.byte	0x2
+ 49526 115d7 91       		.byte	0x91
+ 49527 115d8 4C       		.sleb128 -52
+ 49528 115d9 37       		.uleb128 0x37
+ 49529 115da 6200     		.string	"b"
+ 49530 115dc 02       		.byte	0x2
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1201
+
+
+ 49531 115dd CE09     		.value	0x9ce
+ 49532 115df 6D000000 		.long	0x6d
+ 49533 115e3 02       		.byte	0x2
+ 49534 115e4 91       		.byte	0x91
+ 49535 115e5 50       		.sleb128 -48
+ 49536 115e6 37       		.uleb128 0x37
+ 49537 115e7 6300     		.string	"c"
+ 49538 115e9 02       		.byte	0x2
+ 49539 115ea CE09     		.value	0x9ce
+ 49540 115ec 6D000000 		.long	0x6d
+ 49541 115f0 02       		.byte	0x2
+ 49542 115f1 91       		.byte	0x91
+ 49543 115f2 54       		.sleb128 -44
+ 49544 115f3 37       		.uleb128 0x37
+ 49545 115f4 6400     		.string	"d"
+ 49546 115f6 02       		.byte	0x2
+ 49547 115f7 CE09     		.value	0x9ce
+ 49548 115f9 6D000000 		.long	0x6d
+ 49549 115fd 02       		.byte	0x2
+ 49550 115fe 91       		.byte	0x91
+ 49551 115ff 58       		.sleb128 -40
+ 49552 11600 37       		.uleb128 0x37
+ 49553 11601 72657400 		.string	"ret"
+ 49554 11605 02       		.byte	0x2
+ 49555 11606 CF09     		.value	0x9cf
+ 49556 11608 24160100 		.long	0x11624
+ 49557 1160c 02       		.byte	0x2
+ 49558 1160d 91       		.byte	0x91
+ 49559 1160e 5F       		.sleb128 -33
+ 49560 1160f 3B       		.uleb128 0x3b
+ 49561 11610 00000000 		.long	.LASF403
+ 49562 11614 3B160100 		.long	0x1163b
+ 49563 11618 01       		.byte	0x1
+ 49564 11619 09       		.byte	0x9
+ 49565 1161a 03       		.byte	0x3
+ 49566 1161b 00000000 		.quad	__func__.9108
+ 49566      00000000 
+ 49567 11623 00       		.byte	0x0
+ 49568 11624 02       		.uleb128 0x2
+ 49569 11625 01       		.byte	0x1
+ 49570 11626 02       		.byte	0x2
+ 49571 11627 00000000 		.long	.LASF410
+ 49572 1162b 19       		.uleb128 0x19
+ 49573 1162c 9F000000 		.long	0x9f
+ 49574 11630 3B160100 		.long	0x1163b
+ 49575 11634 1A       		.uleb128 0x1a
+ 49576 11635 9C000000 		.long	0x9c
+ 49577 11639 25       		.byte	0x25
+ 49578 1163a 00       		.byte	0x0
+ 49579 1163b 06       		.uleb128 0x6
+ 49580 1163c 2B160100 		.long	0x1162b
+ 49581 11640 3D       		.uleb128 0x3d
+ 49582 11641 01       		.byte	0x1
+ 49583 11642 00000000 		.long	.LASF428
+ 49584 11646 02       		.byte	0x2
+ 49585 11647 390A     		.value	0xa39
+ 49586 11649 01       		.byte	0x1
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1202
+
+
+ 49587 1164a 91000000 		.long	0x91
+ 49588 1164e 00000000 		.quad	.LFB668
+ 49588      00000000 
+ 49589 11656 00000000 		.quad	.LFE668
+ 49589      00000000 
+ 49590 1165e 00000000 		.long	.LLST18
+ 49591 11662 AC160100 		.long	0x116ac
+ 49592 11666 2E       		.uleb128 0x2e
+ 49593 11667 00000000 		.long	.LASF411
+ 49594 1166b 02       		.byte	0x2
+ 49595 1166c 390A     		.value	0xa39
+ 49596 1166e AC160100 		.long	0x116ac
+ 49597 11672 02       		.byte	0x2
+ 49598 11673 91       		.byte	0x91
+ 49599 11674 58       		.sleb128 -40
+ 49600 11675 37       		.uleb128 0x37
+ 49601 11676 726300   		.string	"rc"
+ 49602 11679 02       		.byte	0x2
+ 49603 1167a 3B0A     		.value	0xa3b
+ 49604 1167c 91000000 		.long	0x91
+ 49605 11680 02       		.byte	0x2
+ 49606 11681 91       		.byte	0x91
+ 49607 11682 6C       		.sleb128 -20
+ 49608 11683 3B       		.uleb128 0x3b
+ 49609 11684 00000000 		.long	.LASF403
+ 49610 11688 C8160100 		.long	0x116c8
+ 49611 1168c 01       		.byte	0x1
+ 49612 1168d 09       		.byte	0x9
+ 49613 1168e 03       		.byte	0x3
+ 49614 1168f 00000000 		.quad	__func__.9198
+ 49614      00000000 
+ 49615 11697 3B       		.uleb128 0x3b
+ 49616 11698 00000000 		.long	.LASF366
+ 49617 1169c CD160100 		.long	0x116cd
+ 49618 116a0 01       		.byte	0x1
+ 49619 116a1 09       		.byte	0x9
+ 49620 116a2 03       		.byte	0x3
+ 49621 116a3 00000000 		.quad	__PRETTY_FUNCTION__.9199
+ 49621      00000000 
+ 49622 116ab 00       		.byte	0x0
+ 49623 116ac 07       		.uleb128 0x7
+ 49624 116ad 08       		.byte	0x8
+ 49625 116ae B2160100 		.long	0x116b2
+ 49626 116b2 07       		.uleb128 0x7
+ 49627 116b3 08       		.byte	0x8
+ 49628 116b4 34050000 		.long	0x534
+ 49629 116b8 19       		.uleb128 0x19
+ 49630 116b9 9F000000 		.long	0x9f
+ 49631 116bd C8160100 		.long	0x116c8
+ 49632 116c1 1A       		.uleb128 0x1a
+ 49633 116c2 9C000000 		.long	0x9c
+ 49634 116c6 19       		.byte	0x19
+ 49635 116c7 00       		.byte	0x0
+ 49636 116c8 06       		.uleb128 0x6
+ 49637 116c9 B8160100 		.long	0x116b8
+ 49638 116cd 06       		.uleb128 0x6
+ 49639 116ce B8160100 		.long	0x116b8
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1203
+
+
+ 49640 116d2 3E       		.uleb128 0x3e
+ 49641 116d3 00000000 		.long	.LASF412
+ 49642 116d7 02       		.byte	0x2
+ 49643 116d8 53       		.byte	0x53
+ 49644 116d9 4A0D0000 		.long	0xd4a
+ 49645 116dd 09       		.byte	0x9
+ 49646 116de 03       		.byte	0x3
+ 49647 116df 00000000 		.quad	vec_00
+ 49647      00000000 
+ 49648 116e7 3E       		.uleb128 0x3e
+ 49649 116e8 00000000 		.long	.LASF413
+ 49650 116ec 02       		.byte	0x2
+ 49651 116ed 57       		.byte	0x57
+ 49652 116ee 4A0D0000 		.long	0xd4a
+ 49653 116f2 09       		.byte	0x9
+ 49654 116f3 03       		.byte	0x3
+ 49655 116f4 00000000 		.quad	vec_01
+ 49655      00000000 
+ 49656 116fc 3E       		.uleb128 0x3e
+ 49657 116fd 00000000 		.long	.LASF414
+ 49658 11701 02       		.byte	0x2
+ 49659 11702 5B       		.byte	0x5b
+ 49660 11703 4A0D0000 		.long	0xd4a
+ 49661 11707 09       		.byte	0x9
+ 49662 11708 03       		.byte	0x3
+ 49663 11709 00000000 		.quad	vec_0F
+ 49663      00000000 
+ 49664 11711 3E       		.uleb128 0x3e
+ 49665 11712 00000000 		.long	.LASF415
+ 49666 11716 02       		.byte	0x2
+ 49667 11717 5F       		.byte	0x5f
+ 49668 11718 4A0D0000 		.long	0xd4a
+ 49669 1171c 09       		.byte	0x9
+ 49670 1171d 03       		.byte	0x3
+ 49671 1171e 00000000 		.quad	vec_10
+ 49671      00000000 
+ 49672 11726 19       		.uleb128 0x19
+ 49673 11727 FE030000 		.long	0x3fe
+ 49674 1172b 36170100 		.long	0x11736
+ 49675 1172f 1A       		.uleb128 0x1a
+ 49676 11730 9C000000 		.long	0x9c
+ 49677 11734 FF       		.byte	0xff
+ 49678 11735 00       		.byte	0x0
+ 49679 11736 30       		.uleb128 0x30
+ 49680 11737 00000000 		.long	.LASF416
+ 49681 1173b 02       		.byte	0x2
+ 49682 1173c AA02     		.value	0x2aa
+ 49683 1173e 4C170100 		.long	0x1174c
+ 49684 11742 09       		.byte	0x9
+ 49685 11743 03       		.byte	0x3
+ 49686 11744 00000000 		.quad	KAESBlockCipherVecRegRijndaelSBox
+ 49686      00000000 
+ 49687 1174c 06       		.uleb128 0x6
+ 49688 1174d 26170100 		.long	0x11726
+ 49689 11751 19       		.uleb128 0x19
+ 49690 11752 B3010000 		.long	0x1b3
+ 49691 11756 61170100 		.long	0x11761
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1204
+
+
+ 49692 1175a 1A       		.uleb128 0x1a
+ 49693 1175b 9C000000 		.long	0x9c
+ 49694 1175f 0F       		.byte	0xf
+ 49695 11760 00       		.byte	0x0
+ 49696 11761 30       		.uleb128 0x30
+ 49697 11762 00000000 		.long	.LASF417
+ 49698 11766 02       		.byte	0x2
+ 49699 11767 1903     		.value	0x319
+ 49700 11769 77170100 		.long	0x11777
+ 49701 1176d 09       		.byte	0x9
+ 49702 1176e 03       		.byte	0x3
+ 49703 1176f 00000000 		.quad	KAESBlockCipherVecRegRijndaelSBoxV
+ 49703      00000000 
+ 49704 11777 06       		.uleb128 0x6
+ 49705 11778 51170100 		.long	0x11751
+ 49706 1177c 30       		.uleb128 0x30
+ 49707 1177d 00000000 		.long	.LASF418
+ 49708 11781 02       		.byte	0x2
+ 49709 11782 2F03     		.value	0x32f
+ 49710 11784 92170100 		.long	0x11792
+ 49711 11788 09       		.byte	0x9
+ 49712 11789 03       		.byte	0x3
+ 49713 1178a 00000000 		.quad	KAESBlockCipherVecRegRijndaelInvSBoxV
+ 49713      00000000 
+ 49714 11792 06       		.uleb128 0x6
+ 49715 11793 51170100 		.long	0x11751
+ 49716 11797 30       		.uleb128 0x30
+ 49717 11798 00000000 		.long	.LASF419
+ 49718 1179c 02       		.byte	0x2
+ 49719 1179d 4603     		.value	0x346
+ 49720 1179f 4A0D0000 		.long	0xd4a
+ 49721 117a3 09       		.byte	0x9
+ 49722 117a4 03       		.byte	0x3
+ 49723 117a5 00000000 		.quad	lo_filter
+ 49723      00000000 
+ 49724 117ad 30       		.uleb128 0x30
+ 49725 117ae 00000000 		.long	.LASF420
+ 49726 117b2 02       		.byte	0x2
+ 49727 117b3 9703     		.value	0x397
+ 49728 117b5 4A0D0000 		.long	0xd4a
+ 49729 117b9 09       		.byte	0x9
+ 49730 117ba 03       		.byte	0x3
+ 49731 117bb 00000000 		.quad	FF_tab
+ 49731      00000000 
+ 49732 117c3 19       		.uleb128 0x19
+ 49733 117c4 FE030000 		.long	0x3fe
+ 49734 117c8 D3170100 		.long	0x117d3
+ 49735 117cc 1A       		.uleb128 0x1a
+ 49736 117cd 9C000000 		.long	0x9c
+ 49737 117d1 07       		.byte	0x7
+ 49738 117d2 00       		.byte	0x0
+ 49739 117d3 30       		.uleb128 0x30
+ 49740 117d4 00000000 		.long	.LASF421
+ 49741 117d8 02       		.byte	0x2
+ 49742 117d9 DF03     		.value	0x3df
+ 49743 117db C3170100 		.long	0x117c3
+ 49744 117df 09       		.byte	0x9
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1205
+
+
+ 49745 117e0 03       		.byte	0x3
+ 49746 117e1 00000000 		.quad	KAESBlockCipherVecRegFFtable
+ 49746      00000000 
+ 49747 117e9 19       		.uleb128 0x19
+ 49748 117ea 09040000 		.long	0x409
+ 49749 117ee F9170100 		.long	0x117f9
+ 49750 117f2 1A       		.uleb128 0x1a
+ 49751 117f3 9C000000 		.long	0x9c
+ 49752 117f7 09       		.byte	0x9
+ 49753 117f8 00       		.byte	0x0
+ 49754 117f9 30       		.uleb128 0x30
+ 49755 117fa 00000000 		.long	.LASF422
+ 49756 117fe 02       		.byte	0x2
+ 49757 117ff 9E04     		.value	0x49e
+ 49758 11801 0F180100 		.long	0x1180f
+ 49759 11805 09       		.byte	0x9
+ 49760 11806 03       		.byte	0x3
+ 49761 11807 00000000 		.quad	KAESBlockCipherVecRegRcon
+ 49761      00000000 
+ 49762 1180f 06       		.uleb128 0x6
+ 49763 11810 E9170100 		.long	0x117e9
+ 49764 11814 19       		.uleb128 0x19
+ 49765 11815 9F000000 		.long	0x9f
+ 49766 11819 24180100 		.long	0x11824
+ 49767 1181d 1A       		.uleb128 0x1a
+ 49768 1181e 9C000000 		.long	0x9c
+ 49769 11822 09       		.byte	0x9
+ 49770 11823 00       		.byte	0x0
+ 49771 11824 30       		.uleb128 0x30
+ 49772 11825 00000000 		.long	.LASF423
+ 49773 11829 02       		.byte	0x2
+ 49774 1182a F708     		.value	0x8f7
+ 49775 1182c 3A180100 		.long	0x1183a
+ 49776 11830 09       		.byte	0x9
+ 49777 11831 03       		.byte	0x3
+ 49778 11832 00000000 		.quad	KAESBlockCipherVecRegaes_ncbi_name
+ 49778      00000000 
+ 49779 1183a 06       		.uleb128 0x6
+ 49780 1183b 14180100 		.long	0x11814
+ 49781 1183f 30       		.uleb128 0x30
+ 49782 11840 00000000 		.long	.LASF424
+ 49783 11844 02       		.byte	0x2
+ 49784 11845 240A     		.value	0xa24
+ 49785 11847 55180100 		.long	0x11855
+ 49786 1184b 09       		.byte	0x9
+ 49787 1184c 03       		.byte	0x3
+ 49788 1184d 00000000 		.quad	KAESBlockCipherVecReg_vt_
+ 49788      00000000 
+ 49789 11855 06       		.uleb128 0x6
+ 49790 11856 11030000 		.long	0x311
+ 49791 1185a 00       		.byte	0x0
+ 49792              		.section	.debug_abbrev
+ 49793 0000 01       		.uleb128 0x1
+ 49794 0001 11       		.uleb128 0x11
+ 49795 0002 01       		.byte	0x1
+ 49796 0003 25       		.uleb128 0x25
+ 49797 0004 0E       		.uleb128 0xe
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1206
+
+
+ 49798 0005 13       		.uleb128 0x13
+ 49799 0006 0B       		.uleb128 0xb
+ 49800 0007 03       		.uleb128 0x3
+ 49801 0008 0E       		.uleb128 0xe
+ 49802 0009 1B       		.uleb128 0x1b
+ 49803 000a 0E       		.uleb128 0xe
+ 49804 000b 11       		.uleb128 0x11
+ 49805 000c 01       		.uleb128 0x1
+ 49806 000d 12       		.uleb128 0x12
+ 49807 000e 01       		.uleb128 0x1
+ 49808 000f 10       		.uleb128 0x10
+ 49809 0010 06       		.uleb128 0x6
+ 49810 0011 00       		.byte	0x0
+ 49811 0012 00       		.byte	0x0
+ 49812 0013 02       		.uleb128 0x2
+ 49813 0014 24       		.uleb128 0x24
+ 49814 0015 00       		.byte	0x0
+ 49815 0016 0B       		.uleb128 0xb
+ 49816 0017 0B       		.uleb128 0xb
+ 49817 0018 3E       		.uleb128 0x3e
+ 49818 0019 0B       		.uleb128 0xb
+ 49819 001a 03       		.uleb128 0x3
+ 49820 001b 0E       		.uleb128 0xe
+ 49821 001c 00       		.byte	0x0
+ 49822 001d 00       		.byte	0x0
+ 49823 001e 03       		.uleb128 0x3
+ 49824 001f 16       		.uleb128 0x16
+ 49825 0020 00       		.byte	0x0
+ 49826 0021 03       		.uleb128 0x3
+ 49827 0022 0E       		.uleb128 0xe
+ 49828 0023 3A       		.uleb128 0x3a
+ 49829 0024 0B       		.uleb128 0xb
+ 49830 0025 3B       		.uleb128 0x3b
+ 49831 0026 0B       		.uleb128 0xb
+ 49832 0027 49       		.uleb128 0x49
+ 49833 0028 13       		.uleb128 0x13
+ 49834 0029 00       		.byte	0x0
+ 49835 002a 00       		.byte	0x0
+ 49836 002b 04       		.uleb128 0x4
+ 49837 002c 24       		.uleb128 0x24
+ 49838 002d 00       		.byte	0x0
+ 49839 002e 0B       		.uleb128 0xb
+ 49840 002f 0B       		.uleb128 0xb
+ 49841 0030 3E       		.uleb128 0x3e
+ 49842 0031 0B       		.uleb128 0xb
+ 49843 0032 03       		.uleb128 0x3
+ 49844 0033 08       		.uleb128 0x8
+ 49845 0034 00       		.byte	0x0
+ 49846 0035 00       		.byte	0x0
+ 49847 0036 05       		.uleb128 0x5
+ 49848 0037 24       		.uleb128 0x24
+ 49849 0038 00       		.byte	0x0
+ 49850 0039 0B       		.uleb128 0xb
+ 49851 003a 0B       		.uleb128 0xb
+ 49852 003b 3E       		.uleb128 0x3e
+ 49853 003c 0B       		.uleb128 0xb
+ 49854 003d 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1207
+
+
+ 49855 003e 00       		.byte	0x0
+ 49856 003f 06       		.uleb128 0x6
+ 49857 0040 26       		.uleb128 0x26
+ 49858 0041 00       		.byte	0x0
+ 49859 0042 49       		.uleb128 0x49
+ 49860 0043 13       		.uleb128 0x13
+ 49861 0044 00       		.byte	0x0
+ 49862 0045 00       		.byte	0x0
+ 49863 0046 07       		.uleb128 0x7
+ 49864 0047 0F       		.uleb128 0xf
+ 49865 0048 00       		.byte	0x0
+ 49866 0049 0B       		.uleb128 0xb
+ 49867 004a 0B       		.uleb128 0xb
+ 49868 004b 49       		.uleb128 0x49
+ 49869 004c 13       		.uleb128 0x13
+ 49870 004d 00       		.byte	0x0
+ 49871 004e 00       		.byte	0x0
+ 49872 004f 08       		.uleb128 0x8
+ 49873 0050 0F       		.uleb128 0xf
+ 49874 0051 00       		.byte	0x0
+ 49875 0052 0B       		.uleb128 0xb
+ 49876 0053 0B       		.uleb128 0xb
+ 49877 0054 00       		.byte	0x0
+ 49878 0055 00       		.byte	0x0
+ 49879 0056 09       		.uleb128 0x9
+ 49880 0057 26       		.uleb128 0x26
+ 49881 0058 00       		.byte	0x0
+ 49882 0059 00       		.byte	0x0
+ 49883 005a 00       		.byte	0x0
+ 49884 005b 0A       		.uleb128 0xa
+ 49885 005c 01       		.uleb128 0x1
+ 49886 005d 00       		.byte	0x0
+ 49887 005e 8742     		.uleb128 0x2107
+ 49888 0060 0C       		.uleb128 0xc
+ 49889 0061 49       		.uleb128 0x49
+ 49890 0062 13       		.uleb128 0x13
+ 49891 0063 00       		.byte	0x0
+ 49892 0064 00       		.byte	0x0
+ 49893 0065 0B       		.uleb128 0xb
+ 49894 0066 04       		.uleb128 0x4
+ 49895 0067 01       		.byte	0x1
+ 49896 0068 0B       		.uleb128 0xb
+ 49897 0069 0B       		.uleb128 0xb
+ 49898 006a 3A       		.uleb128 0x3a
+ 49899 006b 0B       		.uleb128 0xb
+ 49900 006c 3B       		.uleb128 0x3b
+ 49901 006d 0B       		.uleb128 0xb
+ 49902 006e 01       		.uleb128 0x1
+ 49903 006f 13       		.uleb128 0x13
+ 49904 0070 00       		.byte	0x0
+ 49905 0071 00       		.byte	0x0
+ 49906 0072 0C       		.uleb128 0xc
+ 49907 0073 28       		.uleb128 0x28
+ 49908 0074 00       		.byte	0x0
+ 49909 0075 03       		.uleb128 0x3
+ 49910 0076 0E       		.uleb128 0xe
+ 49911 0077 1C       		.uleb128 0x1c
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1208
+
+
+ 49912 0078 0D       		.uleb128 0xd
+ 49913 0079 00       		.byte	0x0
+ 49914 007a 00       		.byte	0x0
+ 49915 007b 0D       		.uleb128 0xd
+ 49916 007c 04       		.uleb128 0x4
+ 49917 007d 01       		.byte	0x1
+ 49918 007e 0B       		.uleb128 0xb
+ 49919 007f 0B       		.uleb128 0xb
+ 49920 0080 3A       		.uleb128 0x3a
+ 49921 0081 0B       		.uleb128 0xb
+ 49922 0082 3B       		.uleb128 0x3b
+ 49923 0083 05       		.uleb128 0x5
+ 49924 0084 01       		.uleb128 0x1
+ 49925 0085 13       		.uleb128 0x13
+ 49926 0086 00       		.byte	0x0
+ 49927 0087 00       		.byte	0x0
+ 49928 0088 0E       		.uleb128 0xe
+ 49929 0089 13       		.uleb128 0x13
+ 49930 008a 01       		.byte	0x1
+ 49931 008b 03       		.uleb128 0x3
+ 49932 008c 0E       		.uleb128 0xe
+ 49933 008d 0B       		.uleb128 0xb
+ 49934 008e 0B       		.uleb128 0xb
+ 49935 008f 3A       		.uleb128 0x3a
+ 49936 0090 0B       		.uleb128 0xb
+ 49937 0091 3B       		.uleb128 0x3b
+ 49938 0092 0B       		.uleb128 0xb
+ 49939 0093 01       		.uleb128 0x1
+ 49940 0094 13       		.uleb128 0x13
+ 49941 0095 00       		.byte	0x0
+ 49942 0096 00       		.byte	0x0
+ 49943 0097 0F       		.uleb128 0xf
+ 49944 0098 0D       		.uleb128 0xd
+ 49945 0099 00       		.byte	0x0
+ 49946 009a 03       		.uleb128 0x3
+ 49947 009b 08       		.uleb128 0x8
+ 49948 009c 3A       		.uleb128 0x3a
+ 49949 009d 0B       		.uleb128 0xb
+ 49950 009e 3B       		.uleb128 0x3b
+ 49951 009f 0B       		.uleb128 0xb
+ 49952 00a0 49       		.uleb128 0x49
+ 49953 00a1 13       		.uleb128 0x13
+ 49954 00a2 38       		.uleb128 0x38
+ 49955 00a3 0A       		.uleb128 0xa
+ 49956 00a4 00       		.byte	0x0
+ 49957 00a5 00       		.byte	0x0
+ 49958 00a6 10       		.uleb128 0x10
+ 49959 00a7 0D       		.uleb128 0xd
+ 49960 00a8 00       		.byte	0x0
+ 49961 00a9 03       		.uleb128 0x3
+ 49962 00aa 0E       		.uleb128 0xe
+ 49963 00ab 3A       		.uleb128 0x3a
+ 49964 00ac 0B       		.uleb128 0xb
+ 49965 00ad 3B       		.uleb128 0x3b
+ 49966 00ae 0B       		.uleb128 0xb
+ 49967 00af 49       		.uleb128 0x49
+ 49968 00b0 13       		.uleb128 0x13
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1209
+
+
+ 49969 00b1 38       		.uleb128 0x38
+ 49970 00b2 0A       		.uleb128 0xa
+ 49971 00b3 00       		.byte	0x0
+ 49972 00b4 00       		.byte	0x0
+ 49973 00b5 11       		.uleb128 0x11
+ 49974 00b6 17       		.uleb128 0x17
+ 49975 00b7 01       		.byte	0x1
+ 49976 00b8 03       		.uleb128 0x3
+ 49977 00b9 0E       		.uleb128 0xe
+ 49978 00ba 0B       		.uleb128 0xb
+ 49979 00bb 0B       		.uleb128 0xb
+ 49980 00bc 3A       		.uleb128 0x3a
+ 49981 00bd 0B       		.uleb128 0xb
+ 49982 00be 3B       		.uleb128 0x3b
+ 49983 00bf 0B       		.uleb128 0xb
+ 49984 00c0 01       		.uleb128 0x1
+ 49985 00c1 13       		.uleb128 0x13
+ 49986 00c2 00       		.byte	0x0
+ 49987 00c3 00       		.byte	0x0
+ 49988 00c4 12       		.uleb128 0x12
+ 49989 00c5 0D       		.uleb128 0xd
+ 49990 00c6 00       		.byte	0x0
+ 49991 00c7 03       		.uleb128 0x3
+ 49992 00c8 0E       		.uleb128 0xe
+ 49993 00c9 3A       		.uleb128 0x3a
+ 49994 00ca 0B       		.uleb128 0xb
+ 49995 00cb 3B       		.uleb128 0x3b
+ 49996 00cc 0B       		.uleb128 0xb
+ 49997 00cd 49       		.uleb128 0x49
+ 49998 00ce 13       		.uleb128 0x13
+ 49999 00cf 00       		.byte	0x0
+ 50000 00d0 00       		.byte	0x0
+ 50001 00d1 13       		.uleb128 0x13
+ 50002 00d2 0D       		.uleb128 0xd
+ 50003 00d3 00       		.byte	0x0
+ 50004 00d4 03       		.uleb128 0x3
+ 50005 00d5 08       		.uleb128 0x8
+ 50006 00d6 3A       		.uleb128 0x3a
+ 50007 00d7 0B       		.uleb128 0xb
+ 50008 00d8 3B       		.uleb128 0x3b
+ 50009 00d9 0B       		.uleb128 0xb
+ 50010 00da 49       		.uleb128 0x49
+ 50011 00db 13       		.uleb128 0x13
+ 50012 00dc 00       		.byte	0x0
+ 50013 00dd 00       		.byte	0x0
+ 50014 00de 14       		.uleb128 0x14
+ 50015 00df 15       		.uleb128 0x15
+ 50016 00e0 01       		.byte	0x1
+ 50017 00e1 27       		.uleb128 0x27
+ 50018 00e2 0C       		.uleb128 0xc
+ 50019 00e3 01       		.uleb128 0x1
+ 50020 00e4 13       		.uleb128 0x13
+ 50021 00e5 00       		.byte	0x0
+ 50022 00e6 00       		.byte	0x0
+ 50023 00e7 15       		.uleb128 0x15
+ 50024 00e8 05       		.uleb128 0x5
+ 50025 00e9 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1210
+
+
+ 50026 00ea 49       		.uleb128 0x49
+ 50027 00eb 13       		.uleb128 0x13
+ 50028 00ec 00       		.byte	0x0
+ 50029 00ed 00       		.byte	0x0
+ 50030 00ee 16       		.uleb128 0x16
+ 50031 00ef 15       		.uleb128 0x15
+ 50032 00f0 01       		.byte	0x1
+ 50033 00f1 49       		.uleb128 0x49
+ 50034 00f2 13       		.uleb128 0x13
+ 50035 00f3 01       		.uleb128 0x1
+ 50036 00f4 13       		.uleb128 0x13
+ 50037 00f5 00       		.byte	0x0
+ 50038 00f6 00       		.byte	0x0
+ 50039 00f7 17       		.uleb128 0x17
+ 50040 00f8 18       		.uleb128 0x18
+ 50041 00f9 00       		.byte	0x0
+ 50042 00fa 00       		.byte	0x0
+ 50043 00fb 00       		.byte	0x0
+ 50044 00fc 18       		.uleb128 0x18
+ 50045 00fd 15       		.uleb128 0x15
+ 50046 00fe 01       		.byte	0x1
+ 50047 00ff 27       		.uleb128 0x27
+ 50048 0100 0C       		.uleb128 0xc
+ 50049 0101 49       		.uleb128 0x49
+ 50050 0102 13       		.uleb128 0x13
+ 50051 0103 01       		.uleb128 0x1
+ 50052 0104 13       		.uleb128 0x13
+ 50053 0105 00       		.byte	0x0
+ 50054 0106 00       		.byte	0x0
+ 50055 0107 19       		.uleb128 0x19
+ 50056 0108 01       		.uleb128 0x1
+ 50057 0109 01       		.byte	0x1
+ 50058 010a 49       		.uleb128 0x49
+ 50059 010b 13       		.uleb128 0x13
+ 50060 010c 01       		.uleb128 0x1
+ 50061 010d 13       		.uleb128 0x13
+ 50062 010e 00       		.byte	0x0
+ 50063 010f 00       		.byte	0x0
+ 50064 0110 1A       		.uleb128 0x1a
+ 50065 0111 21       		.uleb128 0x21
+ 50066 0112 00       		.byte	0x0
+ 50067 0113 49       		.uleb128 0x49
+ 50068 0114 13       		.uleb128 0x13
+ 50069 0115 2F       		.uleb128 0x2f
+ 50070 0116 0B       		.uleb128 0xb
+ 50071 0117 00       		.byte	0x0
+ 50072 0118 00       		.byte	0x0
+ 50073 0119 1B       		.uleb128 0x1b
+ 50074 011a 13       		.uleb128 0x13
+ 50075 011b 01       		.byte	0x1
+ 50076 011c 03       		.uleb128 0x3
+ 50077 011d 0E       		.uleb128 0xe
+ 50078 011e 0B       		.uleb128 0xb
+ 50079 011f 05       		.uleb128 0x5
+ 50080 0120 3A       		.uleb128 0x3a
+ 50081 0121 0B       		.uleb128 0xb
+ 50082 0122 3B       		.uleb128 0x3b
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1211
+
+
+ 50083 0123 0B       		.uleb128 0xb
+ 50084 0124 01       		.uleb128 0x1
+ 50085 0125 13       		.uleb128 0x13
+ 50086 0126 00       		.byte	0x0
+ 50087 0127 00       		.byte	0x0
+ 50088 0128 1C       		.uleb128 0x1c
+ 50089 0129 17       		.uleb128 0x17
+ 50090 012a 01       		.byte	0x1
+ 50091 012b 0B       		.uleb128 0xb
+ 50092 012c 0B       		.uleb128 0xb
+ 50093 012d 3A       		.uleb128 0x3a
+ 50094 012e 0B       		.uleb128 0xb
+ 50095 012f 3B       		.uleb128 0x3b
+ 50096 0130 0B       		.uleb128 0xb
+ 50097 0131 01       		.uleb128 0x1
+ 50098 0132 13       		.uleb128 0x13
+ 50099 0133 00       		.byte	0x0
+ 50100 0134 00       		.byte	0x0
+ 50101 0135 1D       		.uleb128 0x1d
+ 50102 0136 04       		.uleb128 0x4
+ 50103 0137 01       		.byte	0x1
+ 50104 0138 03       		.uleb128 0x3
+ 50105 0139 0E       		.uleb128 0xe
+ 50106 013a 0B       		.uleb128 0xb
+ 50107 013b 0B       		.uleb128 0xb
+ 50108 013c 3A       		.uleb128 0x3a
+ 50109 013d 0B       		.uleb128 0xb
+ 50110 013e 3B       		.uleb128 0x3b
+ 50111 013f 0B       		.uleb128 0xb
+ 50112 0140 01       		.uleb128 0x1
+ 50113 0141 13       		.uleb128 0x13
+ 50114 0142 00       		.byte	0x0
+ 50115 0143 00       		.byte	0x0
+ 50116 0144 1E       		.uleb128 0x1e
+ 50117 0145 04       		.uleb128 0x4
+ 50118 0146 01       		.byte	0x1
+ 50119 0147 03       		.uleb128 0x3
+ 50120 0148 0E       		.uleb128 0xe
+ 50121 0149 0B       		.uleb128 0xb
+ 50122 014a 0B       		.uleb128 0xb
+ 50123 014b 3A       		.uleb128 0x3a
+ 50124 014c 0B       		.uleb128 0xb
+ 50125 014d 3B       		.uleb128 0x3b
+ 50126 014e 05       		.uleb128 0x5
+ 50127 014f 01       		.uleb128 0x1
+ 50128 0150 13       		.uleb128 0x13
+ 50129 0151 00       		.byte	0x0
+ 50130 0152 00       		.byte	0x0
+ 50131 0153 1F       		.uleb128 0x1f
+ 50132 0154 2E       		.uleb128 0x2e
+ 50133 0155 01       		.byte	0x1
+ 50134 0156 03       		.uleb128 0x3
+ 50135 0157 0E       		.uleb128 0xe
+ 50136 0158 3A       		.uleb128 0x3a
+ 50137 0159 0B       		.uleb128 0xb
+ 50138 015a 3B       		.uleb128 0x3b
+ 50139 015b 0B       		.uleb128 0xb
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1212
+
+
+ 50140 015c 27       		.uleb128 0x27
+ 50141 015d 0C       		.uleb128 0xc
+ 50142 015e 49       		.uleb128 0x49
+ 50143 015f 13       		.uleb128 0x13
+ 50144 0160 11       		.uleb128 0x11
+ 50145 0161 01       		.uleb128 0x1
+ 50146 0162 12       		.uleb128 0x12
+ 50147 0163 01       		.uleb128 0x1
+ 50148 0164 40       		.uleb128 0x40
+ 50149 0165 06       		.uleb128 0x6
+ 50150 0166 01       		.uleb128 0x1
+ 50151 0167 13       		.uleb128 0x13
+ 50152 0168 00       		.byte	0x0
+ 50153 0169 00       		.byte	0x0
+ 50154 016a 20       		.uleb128 0x20
+ 50155 016b 05       		.uleb128 0x5
+ 50156 016c 00       		.byte	0x0
+ 50157 016d 03       		.uleb128 0x3
+ 50158 016e 08       		.uleb128 0x8
+ 50159 016f 3A       		.uleb128 0x3a
+ 50160 0170 0B       		.uleb128 0xb
+ 50161 0171 3B       		.uleb128 0x3b
+ 50162 0172 0B       		.uleb128 0xb
+ 50163 0173 49       		.uleb128 0x49
+ 50164 0174 13       		.uleb128 0x13
+ 50165 0175 02       		.uleb128 0x2
+ 50166 0176 0A       		.uleb128 0xa
+ 50167 0177 00       		.byte	0x0
+ 50168 0178 00       		.byte	0x0
+ 50169 0179 21       		.uleb128 0x21
+ 50170 017a 34       		.uleb128 0x34
+ 50171 017b 00       		.byte	0x0
+ 50172 017c 03       		.uleb128 0x3
+ 50173 017d 08       		.uleb128 0x8
+ 50174 017e 3A       		.uleb128 0x3a
+ 50175 017f 0B       		.uleb128 0xb
+ 50176 0180 3B       		.uleb128 0x3b
+ 50177 0181 0B       		.uleb128 0xb
+ 50178 0182 49       		.uleb128 0x49
+ 50179 0183 13       		.uleb128 0x13
+ 50180 0184 02       		.uleb128 0x2
+ 50181 0185 0A       		.uleb128 0xa
+ 50182 0186 00       		.byte	0x0
+ 50183 0187 00       		.byte	0x0
+ 50184 0188 22       		.uleb128 0x22
+ 50185 0189 2E       		.uleb128 0x2e
+ 50186 018a 01       		.byte	0x1
+ 50187 018b 03       		.uleb128 0x3
+ 50188 018c 0E       		.uleb128 0xe
+ 50189 018d 3A       		.uleb128 0x3a
+ 50190 018e 0B       		.uleb128 0xb
+ 50191 018f 3B       		.uleb128 0x3b
+ 50192 0190 0B       		.uleb128 0xb
+ 50193 0191 27       		.uleb128 0x27
+ 50194 0192 0C       		.uleb128 0xc
+ 50195 0193 49       		.uleb128 0x49
+ 50196 0194 13       		.uleb128 0x13
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1213
+
+
+ 50197 0195 20       		.uleb128 0x20
+ 50198 0196 0B       		.uleb128 0xb
+ 50199 0197 01       		.uleb128 0x1
+ 50200 0198 13       		.uleb128 0x13
+ 50201 0199 00       		.byte	0x0
+ 50202 019a 00       		.byte	0x0
+ 50203 019b 23       		.uleb128 0x23
+ 50204 019c 05       		.uleb128 0x5
+ 50205 019d 00       		.byte	0x0
+ 50206 019e 03       		.uleb128 0x3
+ 50207 019f 08       		.uleb128 0x8
+ 50208 01a0 3A       		.uleb128 0x3a
+ 50209 01a1 0B       		.uleb128 0xb
+ 50210 01a2 3B       		.uleb128 0x3b
+ 50211 01a3 0B       		.uleb128 0xb
+ 50212 01a4 49       		.uleb128 0x49
+ 50213 01a5 13       		.uleb128 0x13
+ 50214 01a6 00       		.byte	0x0
+ 50215 01a7 00       		.byte	0x0
+ 50216 01a8 24       		.uleb128 0x24
+ 50217 01a9 34       		.uleb128 0x34
+ 50218 01aa 00       		.byte	0x0
+ 50219 01ab 03       		.uleb128 0x3
+ 50220 01ac 08       		.uleb128 0x8
+ 50221 01ad 3A       		.uleb128 0x3a
+ 50222 01ae 0B       		.uleb128 0xb
+ 50223 01af 3B       		.uleb128 0x3b
+ 50224 01b0 0B       		.uleb128 0xb
+ 50225 01b1 49       		.uleb128 0x49
+ 50226 01b2 13       		.uleb128 0x13
+ 50227 01b3 00       		.byte	0x0
+ 50228 01b4 00       		.byte	0x0
+ 50229 01b5 25       		.uleb128 0x25
+ 50230 01b6 2E       		.uleb128 0x2e
+ 50231 01b7 01       		.byte	0x1
+ 50232 01b8 03       		.uleb128 0x3
+ 50233 01b9 0E       		.uleb128 0xe
+ 50234 01ba 3A       		.uleb128 0x3a
+ 50235 01bb 0B       		.uleb128 0xb
+ 50236 01bc 3B       		.uleb128 0x3b
+ 50237 01bd 05       		.uleb128 0x5
+ 50238 01be 27       		.uleb128 0x27
+ 50239 01bf 0C       		.uleb128 0xc
+ 50240 01c0 49       		.uleb128 0x49
+ 50241 01c1 13       		.uleb128 0x13
+ 50242 01c2 20       		.uleb128 0x20
+ 50243 01c3 0B       		.uleb128 0xb
+ 50244 01c4 01       		.uleb128 0x1
+ 50245 01c5 13       		.uleb128 0x13
+ 50246 01c6 00       		.byte	0x0
+ 50247 01c7 00       		.byte	0x0
+ 50248 01c8 26       		.uleb128 0x26
+ 50249 01c9 05       		.uleb128 0x5
+ 50250 01ca 00       		.byte	0x0
+ 50251 01cb 03       		.uleb128 0x3
+ 50252 01cc 0E       		.uleb128 0xe
+ 50253 01cd 3A       		.uleb128 0x3a
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1214
+
+
+ 50254 01ce 0B       		.uleb128 0xb
+ 50255 01cf 3B       		.uleb128 0x3b
+ 50256 01d0 05       		.uleb128 0x5
+ 50257 01d1 49       		.uleb128 0x49
+ 50258 01d2 13       		.uleb128 0x13
+ 50259 01d3 00       		.byte	0x0
+ 50260 01d4 00       		.byte	0x0
+ 50261 01d5 27       		.uleb128 0x27
+ 50262 01d6 34       		.uleb128 0x34
+ 50263 01d7 00       		.byte	0x0
+ 50264 01d8 03       		.uleb128 0x3
+ 50265 01d9 0E       		.uleb128 0xe
+ 50266 01da 3A       		.uleb128 0x3a
+ 50267 01db 0B       		.uleb128 0xb
+ 50268 01dc 3B       		.uleb128 0x3b
+ 50269 01dd 05       		.uleb128 0x5
+ 50270 01de 49       		.uleb128 0x49
+ 50271 01df 13       		.uleb128 0x13
+ 50272 01e0 00       		.byte	0x0
+ 50273 01e1 00       		.byte	0x0
+ 50274 01e2 28       		.uleb128 0x28
+ 50275 01e3 34       		.uleb128 0x34
+ 50276 01e4 00       		.byte	0x0
+ 50277 01e5 03       		.uleb128 0x3
+ 50278 01e6 08       		.uleb128 0x8
+ 50279 01e7 3A       		.uleb128 0x3a
+ 50280 01e8 0B       		.uleb128 0xb
+ 50281 01e9 3B       		.uleb128 0x3b
+ 50282 01ea 05       		.uleb128 0x5
+ 50283 01eb 49       		.uleb128 0x49
+ 50284 01ec 13       		.uleb128 0x13
+ 50285 01ed 00       		.byte	0x0
+ 50286 01ee 00       		.byte	0x0
+ 50287 01ef 29       		.uleb128 0x29
+ 50288 01f0 0B       		.uleb128 0xb
+ 50289 01f1 01       		.byte	0x1
+ 50290 01f2 01       		.uleb128 0x1
+ 50291 01f3 13       		.uleb128 0x13
+ 50292 01f4 00       		.byte	0x0
+ 50293 01f5 00       		.byte	0x0
+ 50294 01f6 2A       		.uleb128 0x2a
+ 50295 01f7 0B       		.uleb128 0xb
+ 50296 01f8 01       		.byte	0x1
+ 50297 01f9 00       		.byte	0x0
+ 50298 01fa 00       		.byte	0x0
+ 50299 01fb 2B       		.uleb128 0x2b
+ 50300 01fc 05       		.uleb128 0x5
+ 50301 01fd 00       		.byte	0x0
+ 50302 01fe 03       		.uleb128 0x3
+ 50303 01ff 08       		.uleb128 0x8
+ 50304 0200 3A       		.uleb128 0x3a
+ 50305 0201 0B       		.uleb128 0xb
+ 50306 0202 3B       		.uleb128 0x3b
+ 50307 0203 05       		.uleb128 0x5
+ 50308 0204 49       		.uleb128 0x49
+ 50309 0205 13       		.uleb128 0x13
+ 50310 0206 00       		.byte	0x0
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1215
+
+
+ 50311 0207 00       		.byte	0x0
+ 50312 0208 2C       		.uleb128 0x2c
+ 50313 0209 34       		.uleb128 0x34
+ 50314 020a 00       		.byte	0x0
+ 50315 020b 03       		.uleb128 0x3
+ 50316 020c 0E       		.uleb128 0xe
+ 50317 020d 3A       		.uleb128 0x3a
+ 50318 020e 0B       		.uleb128 0xb
+ 50319 020f 3B       		.uleb128 0x3b
+ 50320 0210 05       		.uleb128 0x5
+ 50321 0211 49       		.uleb128 0x49
+ 50322 0212 13       		.uleb128 0x13
+ 50323 0213 1C       		.uleb128 0x1c
+ 50324 0214 0A       		.uleb128 0xa
+ 50325 0215 00       		.byte	0x0
+ 50326 0216 00       		.byte	0x0
+ 50327 0217 2D       		.uleb128 0x2d
+ 50328 0218 2E       		.uleb128 0x2e
+ 50329 0219 01       		.byte	0x1
+ 50330 021a 03       		.uleb128 0x3
+ 50331 021b 0E       		.uleb128 0xe
+ 50332 021c 3A       		.uleb128 0x3a
+ 50333 021d 0B       		.uleb128 0xb
+ 50334 021e 3B       		.uleb128 0x3b
+ 50335 021f 05       		.uleb128 0x5
+ 50336 0220 27       		.uleb128 0x27
+ 50337 0221 0C       		.uleb128 0xc
+ 50338 0222 11       		.uleb128 0x11
+ 50339 0223 01       		.uleb128 0x1
+ 50340 0224 12       		.uleb128 0x12
+ 50341 0225 01       		.uleb128 0x1
+ 50342 0226 40       		.uleb128 0x40
+ 50343 0227 06       		.uleb128 0x6
+ 50344 0228 01       		.uleb128 0x1
+ 50345 0229 13       		.uleb128 0x13
+ 50346 022a 00       		.byte	0x0
+ 50347 022b 00       		.byte	0x0
+ 50348 022c 2E       		.uleb128 0x2e
+ 50349 022d 05       		.uleb128 0x5
+ 50350 022e 00       		.byte	0x0
+ 50351 022f 03       		.uleb128 0x3
+ 50352 0230 0E       		.uleb128 0xe
+ 50353 0231 3A       		.uleb128 0x3a
+ 50354 0232 0B       		.uleb128 0xb
+ 50355 0233 3B       		.uleb128 0x3b
+ 50356 0234 05       		.uleb128 0x5
+ 50357 0235 49       		.uleb128 0x49
+ 50358 0236 13       		.uleb128 0x13
+ 50359 0237 02       		.uleb128 0x2
+ 50360 0238 0A       		.uleb128 0xa
+ 50361 0239 00       		.byte	0x0
+ 50362 023a 00       		.byte	0x0
+ 50363 023b 2F       		.uleb128 0x2f
+ 50364 023c 05       		.uleb128 0x5
+ 50365 023d 00       		.byte	0x0
+ 50366 023e 03       		.uleb128 0x3
+ 50367 023f 08       		.uleb128 0x8
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1216
+
+
+ 50368 0240 3A       		.uleb128 0x3a
+ 50369 0241 0B       		.uleb128 0xb
+ 50370 0242 3B       		.uleb128 0x3b
+ 50371 0243 05       		.uleb128 0x5
+ 50372 0244 49       		.uleb128 0x49
+ 50373 0245 13       		.uleb128 0x13
+ 50374 0246 02       		.uleb128 0x2
+ 50375 0247 0A       		.uleb128 0xa
+ 50376 0248 00       		.byte	0x0
+ 50377 0249 00       		.byte	0x0
+ 50378 024a 30       		.uleb128 0x30
+ 50379 024b 34       		.uleb128 0x34
+ 50380 024c 00       		.byte	0x0
+ 50381 024d 03       		.uleb128 0x3
+ 50382 024e 0E       		.uleb128 0xe
+ 50383 024f 3A       		.uleb128 0x3a
+ 50384 0250 0B       		.uleb128 0xb
+ 50385 0251 3B       		.uleb128 0x3b
+ 50386 0252 05       		.uleb128 0x5
+ 50387 0253 49       		.uleb128 0x49
+ 50388 0254 13       		.uleb128 0x13
+ 50389 0255 02       		.uleb128 0x2
+ 50390 0256 0A       		.uleb128 0xa
+ 50391 0257 00       		.byte	0x0
+ 50392 0258 00       		.byte	0x0
+ 50393 0259 31       		.uleb128 0x31
+ 50394 025a 1D       		.uleb128 0x1d
+ 50395 025b 01       		.byte	0x1
+ 50396 025c 31       		.uleb128 0x31
+ 50397 025d 13       		.uleb128 0x13
+ 50398 025e 11       		.uleb128 0x11
+ 50399 025f 01       		.uleb128 0x1
+ 50400 0260 12       		.uleb128 0x12
+ 50401 0261 01       		.uleb128 0x1
+ 50402 0262 58       		.uleb128 0x58
+ 50403 0263 0B       		.uleb128 0xb
+ 50404 0264 59       		.uleb128 0x59
+ 50405 0265 05       		.uleb128 0x5
+ 50406 0266 01       		.uleb128 0x1
+ 50407 0267 13       		.uleb128 0x13
+ 50408 0268 00       		.byte	0x0
+ 50409 0269 00       		.byte	0x0
+ 50410 026a 32       		.uleb128 0x32
+ 50411 026b 05       		.uleb128 0x5
+ 50412 026c 00       		.byte	0x0
+ 50413 026d 31       		.uleb128 0x31
+ 50414 026e 13       		.uleb128 0x13
+ 50415 026f 02       		.uleb128 0x2
+ 50416 0270 0A       		.uleb128 0xa
+ 50417 0271 00       		.byte	0x0
+ 50418 0272 00       		.byte	0x0
+ 50419 0273 33       		.uleb128 0x33
+ 50420 0274 0B       		.uleb128 0xb
+ 50421 0275 01       		.byte	0x1
+ 50422 0276 11       		.uleb128 0x11
+ 50423 0277 01       		.uleb128 0x1
+ 50424 0278 12       		.uleb128 0x12
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1217
+
+
+ 50425 0279 01       		.uleb128 0x1
+ 50426 027a 00       		.byte	0x0
+ 50427 027b 00       		.byte	0x0
+ 50428 027c 34       		.uleb128 0x34
+ 50429 027d 34       		.uleb128 0x34
+ 50430 027e 00       		.byte	0x0
+ 50431 027f 31       		.uleb128 0x31
+ 50432 0280 13       		.uleb128 0x13
+ 50433 0281 02       		.uleb128 0x2
+ 50434 0282 0A       		.uleb128 0xa
+ 50435 0283 00       		.byte	0x0
+ 50436 0284 00       		.byte	0x0
+ 50437 0285 35       		.uleb128 0x35
+ 50438 0286 1D       		.uleb128 0x1d
+ 50439 0287 01       		.byte	0x1
+ 50440 0288 31       		.uleb128 0x31
+ 50441 0289 13       		.uleb128 0x13
+ 50442 028a 11       		.uleb128 0x11
+ 50443 028b 01       		.uleb128 0x1
+ 50444 028c 12       		.uleb128 0x12
+ 50445 028d 01       		.uleb128 0x1
+ 50446 028e 58       		.uleb128 0x58
+ 50447 028f 0B       		.uleb128 0xb
+ 50448 0290 59       		.uleb128 0x59
+ 50449 0291 05       		.uleb128 0x5
+ 50450 0292 00       		.byte	0x0
+ 50451 0293 00       		.byte	0x0
+ 50452 0294 36       		.uleb128 0x36
+ 50453 0295 0B       		.uleb128 0xb
+ 50454 0296 01       		.byte	0x1
+ 50455 0297 11       		.uleb128 0x11
+ 50456 0298 01       		.uleb128 0x1
+ 50457 0299 12       		.uleb128 0x12
+ 50458 029a 01       		.uleb128 0x1
+ 50459 029b 01       		.uleb128 0x1
+ 50460 029c 13       		.uleb128 0x13
+ 50461 029d 00       		.byte	0x0
+ 50462 029e 00       		.byte	0x0
+ 50463 029f 37       		.uleb128 0x37
+ 50464 02a0 34       		.uleb128 0x34
+ 50465 02a1 00       		.byte	0x0
+ 50466 02a2 03       		.uleb128 0x3
+ 50467 02a3 08       		.uleb128 0x8
+ 50468 02a4 3A       		.uleb128 0x3a
+ 50469 02a5 0B       		.uleb128 0xb
+ 50470 02a6 3B       		.uleb128 0x3b
+ 50471 02a7 05       		.uleb128 0x5
+ 50472 02a8 49       		.uleb128 0x49
+ 50473 02a9 13       		.uleb128 0x13
+ 50474 02aa 02       		.uleb128 0x2
+ 50475 02ab 0A       		.uleb128 0xa
+ 50476 02ac 00       		.byte	0x0
+ 50477 02ad 00       		.byte	0x0
+ 50478 02ae 38       		.uleb128 0x38
+ 50479 02af 34       		.uleb128 0x34
+ 50480 02b0 00       		.byte	0x0
+ 50481 02b1 03       		.uleb128 0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1218
+
+
+ 50482 02b2 0E       		.uleb128 0xe
+ 50483 02b3 49       		.uleb128 0x49
+ 50484 02b4 13       		.uleb128 0x13
+ 50485 02b5 34       		.uleb128 0x34
+ 50486 02b6 0C       		.uleb128 0xc
+ 50487 02b7 1C       		.uleb128 0x1c
+ 50488 02b8 0E       		.uleb128 0xe
+ 50489 02b9 00       		.byte	0x0
+ 50490 02ba 00       		.byte	0x0
+ 50491 02bb 39       		.uleb128 0x39
+ 50492 02bc 2E       		.uleb128 0x2e
+ 50493 02bd 01       		.byte	0x1
+ 50494 02be 03       		.uleb128 0x3
+ 50495 02bf 0E       		.uleb128 0xe
+ 50496 02c0 3A       		.uleb128 0x3a
+ 50497 02c1 0B       		.uleb128 0xb
+ 50498 02c2 3B       		.uleb128 0x3b
+ 50499 02c3 05       		.uleb128 0x5
+ 50500 02c4 27       		.uleb128 0x27
+ 50501 02c5 0C       		.uleb128 0xc
+ 50502 02c6 49       		.uleb128 0x49
+ 50503 02c7 13       		.uleb128 0x13
+ 50504 02c8 11       		.uleb128 0x11
+ 50505 02c9 01       		.uleb128 0x1
+ 50506 02ca 12       		.uleb128 0x12
+ 50507 02cb 01       		.uleb128 0x1
+ 50508 02cc 40       		.uleb128 0x40
+ 50509 02cd 06       		.uleb128 0x6
+ 50510 02ce 01       		.uleb128 0x1
+ 50511 02cf 13       		.uleb128 0x13
+ 50512 02d0 00       		.byte	0x0
+ 50513 02d1 00       		.byte	0x0
+ 50514 02d2 3A       		.uleb128 0x3a
+ 50515 02d3 2E       		.uleb128 0x2e
+ 50516 02d4 00       		.byte	0x0
+ 50517 02d5 03       		.uleb128 0x3
+ 50518 02d6 0E       		.uleb128 0xe
+ 50519 02d7 3A       		.uleb128 0x3a
+ 50520 02d8 0B       		.uleb128 0xb
+ 50521 02d9 3B       		.uleb128 0x3b
+ 50522 02da 05       		.uleb128 0x5
+ 50523 02db 49       		.uleb128 0x49
+ 50524 02dc 13       		.uleb128 0x13
+ 50525 02dd 11       		.uleb128 0x11
+ 50526 02de 01       		.uleb128 0x1
+ 50527 02df 12       		.uleb128 0x12
+ 50528 02e0 01       		.uleb128 0x1
+ 50529 02e1 40       		.uleb128 0x40
+ 50530 02e2 06       		.uleb128 0x6
+ 50531 02e3 00       		.byte	0x0
+ 50532 02e4 00       		.byte	0x0
+ 50533 02e5 3B       		.uleb128 0x3b
+ 50534 02e6 34       		.uleb128 0x34
+ 50535 02e7 00       		.byte	0x0
+ 50536 02e8 03       		.uleb128 0x3
+ 50537 02e9 0E       		.uleb128 0xe
+ 50538 02ea 49       		.uleb128 0x49
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1219
+
+
+ 50539 02eb 13       		.uleb128 0x13
+ 50540 02ec 34       		.uleb128 0x34
+ 50541 02ed 0C       		.uleb128 0xc
+ 50542 02ee 02       		.uleb128 0x2
+ 50543 02ef 0A       		.uleb128 0xa
+ 50544 02f0 00       		.byte	0x0
+ 50545 02f1 00       		.byte	0x0
+ 50546 02f2 3C       		.uleb128 0x3c
+ 50547 02f3 2E       		.uleb128 0x2e
+ 50548 02f4 01       		.byte	0x1
+ 50549 02f5 03       		.uleb128 0x3
+ 50550 02f6 0E       		.uleb128 0xe
+ 50551 02f7 3A       		.uleb128 0x3a
+ 50552 02f8 0B       		.uleb128 0xb
+ 50553 02f9 3B       		.uleb128 0x3b
+ 50554 02fa 05       		.uleb128 0x5
+ 50555 02fb 49       		.uleb128 0x49
+ 50556 02fc 13       		.uleb128 0x13
+ 50557 02fd 11       		.uleb128 0x11
+ 50558 02fe 01       		.uleb128 0x1
+ 50559 02ff 12       		.uleb128 0x12
+ 50560 0300 01       		.uleb128 0x1
+ 50561 0301 40       		.uleb128 0x40
+ 50562 0302 06       		.uleb128 0x6
+ 50563 0303 01       		.uleb128 0x1
+ 50564 0304 13       		.uleb128 0x13
+ 50565 0305 00       		.byte	0x0
+ 50566 0306 00       		.byte	0x0
+ 50567 0307 3D       		.uleb128 0x3d
+ 50568 0308 2E       		.uleb128 0x2e
+ 50569 0309 01       		.byte	0x1
+ 50570 030a 3F       		.uleb128 0x3f
+ 50571 030b 0C       		.uleb128 0xc
+ 50572 030c 03       		.uleb128 0x3
+ 50573 030d 0E       		.uleb128 0xe
+ 50574 030e 3A       		.uleb128 0x3a
+ 50575 030f 0B       		.uleb128 0xb
+ 50576 0310 3B       		.uleb128 0x3b
+ 50577 0311 05       		.uleb128 0x5
+ 50578 0312 27       		.uleb128 0x27
+ 50579 0313 0C       		.uleb128 0xc
+ 50580 0314 49       		.uleb128 0x49
+ 50581 0315 13       		.uleb128 0x13
+ 50582 0316 11       		.uleb128 0x11
+ 50583 0317 01       		.uleb128 0x1
+ 50584 0318 12       		.uleb128 0x12
+ 50585 0319 01       		.uleb128 0x1
+ 50586 031a 40       		.uleb128 0x40
+ 50587 031b 06       		.uleb128 0x6
+ 50588 031c 01       		.uleb128 0x1
+ 50589 031d 13       		.uleb128 0x13
+ 50590 031e 00       		.byte	0x0
+ 50591 031f 00       		.byte	0x0
+ 50592 0320 3E       		.uleb128 0x3e
+ 50593 0321 34       		.uleb128 0x34
+ 50594 0322 00       		.byte	0x0
+ 50595 0323 03       		.uleb128 0x3
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1220
+
+
+ 50596 0324 0E       		.uleb128 0xe
+ 50597 0325 3A       		.uleb128 0x3a
+ 50598 0326 0B       		.uleb128 0xb
+ 50599 0327 3B       		.uleb128 0x3b
+ 50600 0328 0B       		.uleb128 0xb
+ 50601 0329 49       		.uleb128 0x49
+ 50602 032a 13       		.uleb128 0x13
+ 50603 032b 02       		.uleb128 0x2
+ 50604 032c 0A       		.uleb128 0xa
+ 50605 032d 00       		.byte	0x0
+ 50606 032e 00       		.byte	0x0
+ 50607 032f 00       		.byte	0x0
+ 50608              		.section	.debug_pubnames,"", at progbits
+ 50609 0000 2C000000 		.long	0x2c
+ 50610 0004 0200     		.value	0x2
+ 50611 0006 00000000 		.long	.Ldebug_info0
+ 50612 000a 5B180100 		.long	0x1185b
+ 50613 000e 40160100 		.long	0x11640
+ 50614 0012 4B414553 		.string	"KAESBlockCipherVecRegMake"
+ 50614      426C6F63 
+ 50614      6B436970 
+ 50614      68657256 
+ 50614      65635265 
+ 50615 002c 00000000 		.long	0x0
+ 50616              		.section	.debug_aranges,"", at progbits
+ 50617 0000 2C000000 		.long	0x2c
+ 50618 0004 0200     		.value	0x2
+ 50619 0006 00000000 		.long	.Ldebug_info0
+ 50620 000a 08       		.byte	0x8
+ 50621 000b 00       		.byte	0x0
+ 50622 000c 0000     		.value	0x0
+ 50623 000e 0000     		.value	0x0
+ 50624 0010 00000000 		.quad	.Ltext0
+ 50624      00000000 
+ 50625 0018 52330100 		.quad	.Letext0-.Ltext0
+ 50625      00000000 
+ 50626 0020 00000000 		.quad	0x0
+ 50626      00000000 
+ 50627 0028 00000000 		.quad	0x0
+ 50627      00000000 
+ 50628              		.section	.debug_str,"MS", at progbits,1
+ 50629              	.LASF70:
+ 50630 0000 43697068 		.string	"CipherVec_AES_u"
+ 50630      65725665 
+ 50630      635F4145 
+ 50630      535F7500 
+ 50631              	.LASF288:
+ 50632 0010 7263496E 		.string	"rcInsufficient"
+ 50632      73756666 
+ 50632      69636965 
+ 50632      6E7400
+ 50633              	.LASF305:
+ 50634 001f 72634475 		.string	"rcDuplicate"
+ 50634      706C6963 
+ 50634      61746500 
+ 50635              	.LASF328:
+ 50636 002b 4B414553 		.string	"KAESBlockCipherVecRegSubBytesInt"
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1221
+
+
+ 50636      426C6F63 
+ 50636      6B436970 
+ 50636      68657256 
+ 50636      65635265 
+ 50637              	.LASF108:
+ 50638 004c 7263436F 		.string	"rcCondition"
+ 50638      6E646974 
+ 50638      696F6E00 
+ 50639              	.LASF222:
+ 50640 0058 7263456E 		.string	"rcEncrypting"
+ 50640      63727970 
+ 50640      74696E67 
+ 50640      00
+ 50641              	.LASF181:
+ 50642 0065 72634F70 		.string	"rcOpening"
+ 50642      656E696E 
+ 50642      6700
+ 50643              	.LASF398:
+ 50644 006f 4B414553 		.string	"KAESBlockCipherVecRegKeySize"
+ 50644      426C6F63 
+ 50644      6B436970 
+ 50644      68657256 
+ 50644      65635265 
+ 50645              	.LASF189:
+ 50646 008c 72635065 		.string	"rcPersisting"
+ 50646      72736973 
+ 50646      74696E67 
+ 50646      00
+ 50647              	.LASF227:
+ 50648 0099 72635365 		.string	"rcSending"
+ 50648      6E64696E 
+ 50648      6700
+ 50649              	.LASF221:
+ 50650 00a3 72634170 		.string	"rcAppending"
+ 50650      70656E64 
+ 50650      696E6700 
+ 50651              	.LASF207:
+ 50652 00af 72635369 		.string	"rcSignaling"
+ 50652      676E616C 
+ 50652      696E6700 
+ 50653              	.LASF342:
+ 50654 00bb 4B414553 		.string	"KAESBlockCipherVecRegStateDupColumn3"
+ 50654      426C6F63 
+ 50654      6B436970 
+ 50654      68657256 
+ 50654      65635265 
+ 50655              	.LASF20:
+ 50656 00e0 4442475F 		.string	"DBG_BLAST"
+ 50656      424C4153 
+ 50656      5400
+ 50657              	.LASF263:
+ 50658 00ea 72635369 		.string	"rcSignalSet"
+ 50658      676E616C 
+ 50658      53657400 
+ 50659              	.LASF209:
+ 50660 00f6 72634174 		.string	"rcAttaching"
+ 50660      74616368 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1222
+
+
+ 50660      696E6700 
+ 50661              	.LASF141:
+ 50662 0102 72635461 		.string	"rcTable"
+ 50662      626C6500 
+ 50663              	.LASF419:
+ 50664 010a 6C6F5F66 		.string	"lo_filter"
+ 50664      696C7465 
+ 50664      7200
+ 50665              	.LASF105:
+ 50666 0114 72634275 		.string	"rcBuffer"
+ 50666      66666572 
+ 50666      00
+ 50667              	.LASF3:
+ 50668 011d 696E7433 		.string	"int32_t"
+ 50668      325F7400 
+ 50669              	.LASF237:
+ 50670 0125 72634D65 		.string	"rcMemory"
+ 50670      6D6F7279 
+ 50670      00
+ 50671              	.LASF170:
+ 50672 012e 72634C6F 		.string	"rcLocking"
+ 50672      636B696E 
+ 50672      6700
+ 50673              	.LASF205:
+ 50674 0138 72635061 		.string	"rcParsing"
+ 50674      7273696E 
+ 50674      6700
+ 50675              	.LASF234:
+ 50676 0142 72635365 		.string	"rcSelf"
+ 50676      6C6600
+ 50677              	.LASF127:
+ 50678 0149 72634D65 		.string	"rcMetadata"
+ 50678      74616461 
+ 50678      746100
+ 50679              	.LASF250:
+ 50680 0154 72634172 		.string	"rcArcHardLink"
+ 50680      63486172 
+ 50680      644C696E 
+ 50680      6B00
+ 50681              	.LASF76:
+ 50682 0162 7263436F 		.string	"rcCont"
+ 50682      6E7400
+ 50683              	.LASF258:
+ 50684 0169 72634368 		.string	"rcChecksum"
+ 50684      65636B73 
+ 50684      756D00
+ 50685              	.LASF403:
+ 50686 0174 5F5F6675 		.string	"__func__"
+ 50686      6E635F5F 
+ 50686      00
+ 50687              	.LASF302:
+ 50688 017d 7263546F 		.string	"rcTooShort"
+ 50688      6F53686F 
+ 50688      727400
+ 50689              	.LASF132:
+ 50690 0188 72635061 		.string	"rcPagemap"
+ 50690      67656D61 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1223
+
+
+ 50690      7000
+ 50691              	.LASF428:
+ 50692 0192 4B414553 		.string	"KAESBlockCipherVecRegMake"
+ 50692      426C6F63 
+ 50692      6B436970 
+ 50692      68657256 
+ 50692      65635265 
+ 50693              	.LASF348:
+ 50694 01ac 4B414553 		.string	"KAESBlockCipherVecRegStateShiftRight64"
+ 50694      426C6F63 
+ 50694      6B436970 
+ 50694      68657256 
+ 50694      65635265 
+ 50695              	.LASF84:
+ 50696 01d3 72634170 		.string	"rcApp"
+ 50696      7000
+ 50697              	.LASF115:
+ 50698 01d9 72634669 		.string	"rcFileDesc"
+ 50698      6C654465 
+ 50698      736300
+ 50699              	.LASF254:
+ 50700 01e4 72634974 		.string	"rcItem"
+ 50700      656D00
+ 50701              	.LASF146:
+ 50702 01eb 72635472 		.string	"rcTrie"
+ 50702      696500
+ 50703              	.LASF87:
+ 50704 01f2 72634C61 		.string	"rcLastModule_v1_0"
+ 50704      73744D6F 
+ 50704      64756C65 
+ 50704      5F76315F 
+ 50704      3000
+ 50705              	.LASF67:
+ 50706 0204 73746174 		.string	"state"
+ 50706      6500
+ 50707              	.LASF245:
+ 50708 020a 72634279 		.string	"rcByteOrder"
+ 50708      74654F72 
+ 50708      64657200 
+ 50709              	.LASF64:
+ 50710 0216 4145534B 		.string	"AESKeySchedule"
+ 50710      65795363 
+ 50710      68656475 
+ 50710      6C6500
+ 50711              	.LASF65:
+ 50712 0225 726F756E 		.string	"round_keys"
+ 50712      645F6B65 
+ 50712      797300
+ 50713              	.LASF163:
+ 50714 0230 7263436F 		.string	"rcConstructing"
+ 50714      6E737472 
+ 50714      75637469 
+ 50714      6E6700
+ 50715              	.LASF11:
+ 50716 023f 72635F74 		.string	"rc_t"
+ 50716      00
+ 50717              	.LASF239:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1224
+
+
+ 50718 0244 7263466F 		.string	"rcFormat"
+ 50718      726D6174 
+ 50718      00
+ 50719              	.LASF297:
+ 50720 024d 7263556E 		.string	"rcUnauthorized"
+ 50720      61757468 
+ 50720      6F72697A 
+ 50720      656400
+ 50721              	.LASF399:
+ 50722 025c 4B414553 		.string	"KAESBlockCipherVecRegSetEncryptKey"
+ 50722      426C6F63 
+ 50722      6B436970 
+ 50722      68657256 
+ 50722      65635265 
+ 50723              	.LASF380:
+ 50724 027f 6D737461 		.string	"mstate"
+ 50724      746500
+ 50725              	.LASF177:
+ 50726 0286 72635265 		.string	"rcRemoving"
+ 50726      6D6F7669 
+ 50726      6E6700
+ 50727              	.LASF90:
+ 50728 0291 72634B72 		.string	"rcKrypto"
+ 50728      7970746F 
+ 50728      00
+ 50729              	.LASF410:
+ 50730 029a 5F426F6F 		.string	"_Bool"
+ 50730      6C00
+ 50731              	.LASF168:
+ 50732 02a0 72635669 		.string	"rcVisiting"
+ 50732      73697469 
+ 50732      6E6700
+ 50733              	.LASF98:
+ 50734 02ab 72634172 		.string	"rcArc"
+ 50734      6300
+ 50735              	.LASF422:
+ 50736 02b1 4B414553 		.string	"KAESBlockCipherVecRegRcon"
+ 50736      426C6F63 
+ 50736      6B436970 
+ 50736      68657256 
+ 50736      65635265 
+ 50737              	.LASF73:
+ 50738 02cb 72634578 		.string	"rcExe"
+ 50738      6500
+ 50739              	.LASF303:
+ 50740 02d1 7263546F 		.string	"rcTooLong"
+ 50740      6F4C6F6E 
+ 50740      6700
+ 50741              	.LASF343:
+ 50742 02db 6F705F50 		.string	"op_PSHUFD128"
+ 50742      53485546 
+ 50742      44313238 
+ 50742      00
+ 50743              	.LASF231:
+ 50744 02e8 52434F62 		.string	"RCObject"
+ 50744      6A656374 
+ 50744      00
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1225
+
+
+ 50745              	.LASF241:
+ 50746 02f1 7263496E 		.string	"rcInterface"
+ 50746      74657266 
+ 50746      61636500 
+ 50747              	.LASF169:
+ 50748 02fd 72635265 		.string	"rcResolving"
+ 50748      736F6C76 
+ 50748      696E6700 
+ 50749              	.LASF111:
+ 50750 0309 72634469 		.string	"rcDirectory"
+ 50750      72656374 
+ 50750      6F727900 
+ 50751              	.LASF2:
+ 50752 0315 6C6F6E67 		.string	"long int"
+ 50752      20696E74 
+ 50752      00
+ 50753              	.LASF59:
+ 50754 031e 41455357 		.string	"AESWord"
+ 50754      6F726400 
+ 50755              	.LASF199:
+ 50756 0326 72635661 		.string	"rcValidating"
+ 50756      6C696461 
+ 50756      74696E67 
+ 50756      00
+ 50757              	.LASF101:
+ 50758 0333 72634172 		.string	"rcArgv"
+ 50758      677600
+ 50759              	.LASF77:
+ 50760 033a 72634353 		.string	"rcCS"
+ 50760      00
+ 50761              	.LASF158:
+ 50762 033f 72635572 		.string	"rcUri"
+ 50762      6900
+ 50763              	.LASF180:
+ 50764 0345 72634372 		.string	"rcCreating"
+ 50764      65617469 
+ 50764      6E6700
+ 50765              	.LASF347:
+ 50766 0350 6B676173 		.string	"kgastate"
+ 50766      74617465 
+ 50766      00
+ 50767              	.LASF53:
+ 50768 0359 656E6372 		.string	"encrypt"
+ 50768      79707400 
+ 50769              	.LASF17:
+ 50770 0361 76313238 		.string	"v128_u8_t"
+ 50770      5F75385F 
+ 50770      7400
+ 50771              	.LASF25:
+ 50772 036b 4442475F 		.string	"DBG_XML"
+ 50772      584D4C00 
+ 50773              	.LASF345:
+ 50774 0373 73686966 		.string	"shift"
+ 50774      7400
+ 50775              	.LASF37:
+ 50776 0379 4442475F 		.string	"DBG_MOD_COUNT"
+ 50776      4D4F445F 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1226
+
+
+ 50776      434F554E 
+ 50776      5400
+ 50777              	.LASF82:
+ 50778 0387 72634442 		.string	"rcDB"
+ 50778      00
+ 50779              	.LASF369:
+ 50780 038c 4B414553 		.string	"KAESBlockCipherVecRegVecSLLBI"
+ 50780      426C6F63 
+ 50780      6B436970 
+ 50780      68657256 
+ 50780      65635265 
+ 50781              	.LASF260:
+ 50782 03aa 7263436F 		.string	"rcConnection"
+ 50782      6E6E6563 
+ 50782      74696F6E 
+ 50782      00
+ 50783              	.LASF128:
+ 50784 03b7 72634D67 		.string	"rcMgr"
+ 50784      7200
+ 50785              	.LASF290:
+ 50786 03bd 72635669 		.string	"rcViolated"
+ 50786      6F6C6174 
+ 50786      656400
+ 50787              	.LASF223:
+ 50788 03c8 72634465 		.string	"rcDecrypting"
+ 50788      63727970 
+ 50788      74696E67 
+ 50788      00
+ 50789              	.LASF0:
+ 50790 03d5 7369676E 		.string	"signed char"
+ 50790      65642063 
+ 50790      68617200 
+ 50791              	.LASF4:
+ 50792 03e1 75696E74 		.string	"uint8_t"
+ 50792      385F7400 
+ 50793              	.LASF106:
+ 50794 03e9 72634368 		.string	"rcChar"
+ 50794      617200
+ 50795              	.LASF367:
+ 50796 03f0 4B414553 		.string	"KAESBlockCipherVecRegVecSRLBI"
+ 50796      426C6F63 
+ 50796      6B436970 
+ 50796      68657256 
+ 50796      65635265 
+ 50797              	.LASF91:
+ 50798 040e 72635244 		.string	"rcRDBMS"
+ 50798      424D5300 
+ 50799              	.LASF392:
+ 50800 0416 496E7653 		.string	"InvShiftRowTable"
+ 50800      68696674 
+ 50800      526F7754 
+ 50800      61626C65 
+ 50800      00
+ 50801              	.LASF200:
+ 50802 0427 72634578 		.string	"rcExecuting"
+ 50802      65637574 
+ 50802      696E6700 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1227
+
+
+ 50803              	.LASF366:
+ 50804 0433 5F5F5052 		.string	"__PRETTY_FUNCTION__"
+ 50804      45545459 
+ 50804      5F46554E 
+ 50804      4354494F 
+ 50804      4E5F5F00 
+ 50805              	.LASF18:
+ 50806 0447 4442475F 		.string	"DBG_MOD_NOT_FOUND"
+ 50806      4D4F445F 
+ 50806      4E4F545F 
+ 50806      464F554E 
+ 50806      4400
+ 50807              	.LASF324:
+ 50808 0459 636F6C75 		.string	"column"
+ 50808      6D6E00
+ 50809              	.LASF187:
+ 50810 0460 72635265 		.string	"rcReverting"
+ 50810      76657274 
+ 50810      696E6700 
+ 50811              	.LASF103:
+ 50812 046c 72634261 		.string	"rcBarrier"
+ 50812      72726965 
+ 50812      7200
+ 50813              	.LASF287:
+ 50814 0476 72634578 		.string	"rcExhausted"
+ 50814      68617573 
+ 50814      74656400 
+ 50815              	.LASF5:
+ 50816 0482 756E7369 		.string	"unsigned char"
+ 50816      676E6564 
+ 50816      20636861 
+ 50816      7200
+ 50817              	.LASF160:
+ 50818 0490 5243436F 		.string	"RCContext"
+ 50818      6E746578 
+ 50818      7400
+ 50819              	.LASF123:
+ 50820 049a 72634C6F 		.string	"rcLock"
+ 50820      636B00
+ 50821              	.LASF276:
+ 50822 04a1 72634261 		.string	"rcBadVersion"
+ 50822      64566572 
+ 50822      73696F6E 
+ 50822      00
+ 50823              	.LASF277:
+ 50824 04ae 72634465 		.string	"rcDestroyed"
+ 50824      7374726F 
+ 50824      79656400 
+ 50825              	.LASF140:
+ 50826 04ba 72635374 		.string	"rcString"
+ 50826      72696E67 
+ 50826      00
+ 50827              	.LASF353:
+ 50828 04c3 4B414553 		.string	"KAESBlockCipherVecRegRotWord"
+ 50828      426C6F63 
+ 50828      6B436970 
+ 50828      68657256 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1228
+
+
+ 50828      65635265 
+ 50829              	.LASF102:
+ 50830 04e0 72634174 		.string	"rcAttr"
+ 50830      747200
+ 50831              	.LASF124:
+ 50832 04e7 72634C6F 		.string	"rcLog"
+ 50832      6700
+ 50833              	.LASF411:
+ 50834 04ed 6E65775F 		.string	"new_obj"
+ 50834      6F626A00 
+ 50835              	.LASF319:
+ 50836 04f5 4B414553 		.string	"KAESBlockCipherVecRegStateIn"
+ 50836      426C6F63 
+ 50836      6B436970 
+ 50836      68657256 
+ 50836      65635265 
+ 50837              	.LASF21:
+ 50838 0512 4442475F 		.string	"DBG_KDB"
+ 50838      4B444200 
+ 50839              	.LASF228:
+ 50840 051a 72635072 		.string	"rcProcessing"
+ 50840      6F636573 
+ 50840      73696E67 
+ 50840      00
+ 50841              	.LASF78:
+ 50842 0527 72634646 		.string	"rcFF"
+ 50842      00
+ 50843              	.LASF357:
+ 50844 052c 76696E32 		.string	"vin2"
+ 50844      00
+ 50845              	.LASF79:
+ 50846 0531 72634653 		.string	"rcFS"
+ 50846      00
+ 50847              	.LASF62:
+ 50848 0536 62797465 		.string	"bytes"
+ 50848      7300
+ 50849              	.LASF364:
+ 50850 053c 4B414553 		.string	"KAESBlockCipherVecRegFF_mul"
+ 50850      426C6F63 
+ 50850      6B436970 
+ 50850      68657256 
+ 50850      65635265 
+ 50851              	.LASF166:
+ 50852 0558 72634163 		.string	"rcAccessing"
+ 50852      63657373 
+ 50852      696E6700 
+ 50853              	.LASF408:
+ 50854 0564 4B414553 		.string	"KAESBlockCipherVecRegProcessorSupport"
+ 50854      426C6F63 
+ 50854      6B436970 
+ 50854      68657256 
+ 50854      65635265 
+ 50855              	.LASF284:
+ 50856 058a 7263496E 		.string	"rcInterrupted"
+ 50856      74657272 
+ 50856      75707465 
+ 50856      6400
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1229
+
+
+ 50857              	.LASF292:
+ 50858 0598 72634E6F 		.string	"rcNotFound"
+ 50858      74466F75 
+ 50858      6E6400
+ 50859              	.LASF331:
+ 50860 05a3 6269745F 		.string	"bit_count"
+ 50860      636F756E 
+ 50860      7400
+ 50861              	.LASF340:
+ 50862 05ad 53686966 		.string	"ShiftRowTable"
+ 50862      74526F77 
+ 50862      5461626C 
+ 50862      6500
+ 50863              	.LASF12:
+ 50864 05bb 63686172 		.string	"char"
+ 50864      00
+ 50865              	.LASF130:
+ 50866 05c0 72634E6F 		.string	"rcNode"
+ 50866      646500
+ 50867              	.LASF35:
+ 50868 05c7 4442475F 		.string	"DBG_AES"
+ 50868      41455300 
+ 50869              	.LASF261:
+ 50870 05cf 72634572 		.string	"rcError"
+ 50870      726F7200 
+ 50871              	.LASF350:
+ 50872 05d7 72636F6E 		.string	"rconw"
+ 50872      7700
+ 50873              	.LASF330:
+ 50874 05dd 6F705F50 		.string	"op_PSRLDI128"
+ 50874      53524C44 
+ 50874      49313238 
+ 50874      00
+ 50875              	.LASF178:
+ 50876 05ea 7263436C 		.string	"rcClearing"
+ 50876      65617269 
+ 50876      6E6700
+ 50877              	.LASF236:
+ 50878 05f5 72634F66 		.string	"rcOffset"
+ 50878      66736574 
+ 50878      00
+ 50879              	.LASF182:
+ 50880 05fe 7263436C 		.string	"rcClosing"
+ 50880      6F73696E 
+ 50880      6700
+ 50881              	.LASF114:
+ 50882 0608 72634669 		.string	"rcFile"
+ 50882      6C6500
+ 50883              	.LASF143:
+ 50884 060f 72635469 		.string	"rcTimeout"
+ 50884      6D656F75 
+ 50884      7400
+ 50885              	.LASF332:
+ 50886 0619 4B414553 		.string	"KAESBlockCipherVecRegPackShuffleBytes"
+ 50886      426C6F63 
+ 50886      6B436970 
+ 50886      68657256 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1230
+
+
+ 50886      65635265 
+ 50887              	.LASF404:
+ 50888 063f 4B414553 		.string	"KAESBlockCipherVecRegSetDecryptKey"
+ 50888      426C6F63 
+ 50888      6B436970 
+ 50888      68657256 
+ 50888      65635265 
+ 50889              	.LASF131:
+ 50890 0662 72634E75 		.string	"rcNumeral"
+ 50890      6D657261 
+ 50890      6C00
+ 50891              	.LASF373:
+ 50892 066c 4B414553 		.string	"KAESBlockCipherVecRegEqInvKeyExpansion128"
+ 50892      426C6F63 
+ 50892      6B436970 
+ 50892      68657256 
+ 50892      65635265 
+ 50893              	.LASF208:
+ 50894 0696 72635761 		.string	"rcWaiting"
+ 50894      6974696E 
+ 50894      6700
+ 50895              	.LASF360:
+ 50896 06a0 4B414553 		.string	"KAESBlockCipherVecRegKeyExpansion192"
+ 50896      426C6F63 
+ 50896      6B436970 
+ 50896      68657256 
+ 50896      65635265 
+ 50897              	.LASF212:
+ 50898 06c5 72634650 		.string	"rcFPCoding"
+ 50898      436F6469 
+ 50898      6E6700
+ 50899              	.LASF264:
+ 50900 06d0 72635369 		.string	"rcSize"
+ 50900      7A6500
+ 50901              	.LASF249:
+ 50902 06d7 72634469 		.string	"rcDirEntry"
+ 50902      72456E74 
+ 50902      727900
+ 50903              	.LASF390:
+ 50904 06e2 4B414553 		.string	"KAESBlockCipherVecRegInvSubBytes"
+ 50904      426C6F63 
+ 50904      6B436970 
+ 50904      68657256 
+ 50904      65635265 
+ 50905              	.LASF201:
+ 50906 0703 72634875 		.string	"rcHuffmanCoding"
+ 50906      66666D61 
+ 50906      6E436F64 
+ 50906      696E6700 
+ 50907              	.LASF30:
+ 50908 0713 4442475F 		.string	"DBG_KFG"
+ 50908      4B464700 
+ 50909              	.LASF68:
+ 50910 071b 636F6C75 		.string	"columns"
+ 50910      6D6E7300 
+ 50911              	.LASF407:
+ 50912 0723 4B414553 		.string	"KAESBlockCipherVecRegDecrypt"
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1231
+
+
+ 50912      426C6F63 
+ 50912      6B436970 
+ 50912      68657256 
+ 50912      65635265 
+ 50913              	.LASF282:
+ 50914 0740 72634275 		.string	"rcBusy"
+ 50914      737900
+ 50915              	.LASF27:
+ 50916 0747 4442475F 		.string	"DBG_SRA"
+ 50916      53524100 
+ 50917              	.LASF240:
+ 50918 074f 72635472 		.string	"rcTransfer"
+ 50918      616E7366 
+ 50918      657200
+ 50919              	.LASF24:
+ 50920 075a 4442475F 		.string	"DBG_KFS"
+ 50920      4B465300 
+ 50921              	.LASF368:
+ 50922 0762 73725F6D 		.string	"sr_mask"
+ 50922      61736B00 
+ 50923              	.LASF195:
+ 50924 076a 72635061 		.string	"rcPacking"
+ 50924      636B696E 
+ 50924      6700
+ 50925              	.LASF191:
+ 50926 0774 7263436F 		.string	"rcCopying"
+ 50926      7079696E 
+ 50926      6700
+ 50927              	.LASF359:
+ 50928 077e 4B414553 		.string	"KAESBlockCipherVecRegKeyExpansion128"
+ 50928      426C6F63 
+ 50928      6B436970 
+ 50928      68657256 
+ 50928      65635265 
+ 50929              	.LASF335:
+ 50930 07a3 6F705F50 		.string	"op_PSHUFB128"
+ 50930      53485546 
+ 50930      42313238 
+ 50930      00
+ 50931              	.LASF198:
+ 50932 07b0 72634465 		.string	"rcDecoding"
+ 50932      636F6469 
+ 50932      6E6700
+ 50933              	.LASF171:
+ 50934 07bb 7263556E 		.string	"rcUnlocking"
+ 50934      6C6F636B 
+ 50934      696E6700 
+ 50935              	.LASF56:
+ 50936 07c7 4B426C6F 		.string	"KBlockCipherVec_vt_v1"
+ 50936      636B4369 
+ 50936      70686572 
+ 50936      5665635F 
+ 50936      76745F76 
+ 50937              	.LASF23:
+ 50938 07dd 4442475F 		.string	"DBG_LEGREF"
+ 50938      4C454752 
+ 50938      454600
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1232
+
+
+ 50939              	.LASF172:
+ 50940 07e8 72635265 		.string	"rcRenaming"
+ 50940      6E616D69 
+ 50940      6E6700
+ 50941              	.LASF401:
+ 50942 07f3 75736572 		.string	"user_key"
+ 50942      5F6B6579 
+ 50942      00
+ 50943              	.LASF242:
+ 50944 07fc 72634964 		.string	"rcId"
+ 50944      00
+ 50945              	.LASF155:
+ 50946 0801 7263436D 		.string	"rcCmd"
+ 50946      6400
+ 50947              	.LASF33:
+ 50948 0807 4442475F 		.string	"DBG_LOADLIB"
+ 50948      4C4F4144 
+ 50948      4C494200 
+ 50949              	.LASF294:
+ 50950 0813 7263556E 		.string	"rcUnlocked"
+ 50950      6C6F636B 
+ 50950      656400
+ 50951              	.LASF95:
+ 50952 081e 52434D6F 		.string	"RCModule"
+ 50952      64756C65 
+ 50952      00
+ 50953              	.LASF256:
+ 50954 0827 7263456E 		.string	"rcEncryption"
+ 50954      63727970 
+ 50954      74696F6E 
+ 50954      00
+ 50955              	.LASF291:
+ 50956 0834 72634578 		.string	"rcExists"
+ 50956      69737473 
+ 50956      00
+ 50957              	.LASF44:
+ 50958 083d 43697068 		.string	"CipherVec"
+ 50958      65725665 
+ 50958      6300
+ 50959              	.LASF362:
+ 50960 0847 4B414553 		.string	"KAESBlockCipherVecRegKeyExpansion256"
+ 50960      426C6F63 
+ 50960      6B436970 
+ 50960      68657256 
+ 50960      65635265 
+ 50961              	.LASF310:
+ 50962 086c 72634F70 		.string	"rcOpen"
+ 50962      656E00
+ 50963              	.LASF296:
+ 50964 0873 72634465 		.string	"rcDeadlock"
+ 50964      61646C6F 
+ 50964      636B00
+ 50965              	.LASF233:
+ 50966 087e 72634C69 		.string	"rcLink"
+ 50966      6E6B00
+ 50967              	.LASF220:
+ 50968 0885 7263466C 		.string	"rcFlushing"
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1233
+
+
+ 50968      75736869 
+ 50968      6E6700
+ 50969              	.LASF395:
+ 50970 0890 4B414553 		.string	"KAESBlockCipherVecRegDestroy"
+ 50970      426C6F63 
+ 50970      6B436970 
+ 50970      68657256 
+ 50970      65635265 
+ 50971              	.LASF268:
+ 50972 08ad 72634E6F 		.string	"rcNoErr"
+ 50972      45727200 
+ 50973              	.LASF393:
+ 50974 08b5 4B414553 		.string	"KAESBlockCipherVecRegEqInvLastRound"
+ 50974      426C6F63 
+ 50974      6B436970 
+ 50974      68657256 
+ 50974      65635265 
+ 50975              	.LASF412:
+ 50976 08d9 7665635F 		.string	"vec_00"
+ 50976      303000
+ 50977              	.LASF413:
+ 50978 08e0 7665635F 		.string	"vec_01"
+ 50978      303100
+ 50979              	.LASF247:
+ 50980 08e7 72635461 		.string	"rcTag"
+ 50980      6700
+ 50981              	.LASF416:
+ 50982 08ed 4B414553 		.string	"KAESBlockCipherVecRegRijndaelSBox"
+ 50982      426C6F63 
+ 50982      6B436970 
+ 50982      68657256 
+ 50982      65635265 
+ 50983              	.LASF29:
+ 50984 090f 4442475F 		.string	"DBG_ALIGN"
+ 50984      414C4947 
+ 50984      4E00
+ 50985              	.LASF211:
+ 50986 0919 72634C6F 		.string	"rcLogging"
+ 50986      6767696E 
+ 50986      6700
+ 50987              	.LASF304:
+ 50988 0923 7263546F 		.string	"rcTooBig"
+ 50988      6F426967 
+ 50988      00
+ 50989              	.LASF148:
+ 50990 092c 72635665 		.string	"rcVector"
+ 50990      63746F72 
+ 50990      00
+ 50991              	.LASF183:
+ 50992 0935 72635265 		.string	"rcResizing"
+ 50992      73697A69 
+ 50992      6E6700
+ 50993              	.LASF157:
+ 50994 0940 72635175 		.string	"rcQuery"
+ 50994      65727900 
+ 50995              	.LASF10:
+ 50996 0948 6C6F6E67 		.string	"long unsigned int"
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1234
+
+
+ 50996      20756E73 
+ 50996      69676E65 
+ 50996      6420696E 
+ 50996      7400
+ 50997              	.LASF289:
+ 50998 095a 72634578 		.string	"rcExcessive"
+ 50998      63657373 
+ 50998      69766500 
+ 50999              	.LASF352:
+ 51000 0966 4B414553 		.string	"KAESBlockCipherVecRegSubWord"
+ 51000      426C6F63 
+ 51000      6B436970 
+ 51000      68657256 
+ 51000      65635265 
+ 51001              	.LASF421:
+ 51002 0983 4B414553 		.string	"KAESBlockCipherVecRegFFtable"
+ 51002      426C6F63 
+ 51002      6B436970 
+ 51002      68657256 
+ 51002      65635265 
+ 51003              	.LASF217:
+ 51004 09a0 72634576 		.string	"rcEvaluating"
+ 51004      616C7561 
+ 51004      74696E67 
+ 51004      00
+ 51005              	.LASF154:
+ 51006 09ad 7263526E 		.string	"rcRng"
+ 51006      6700
+ 51007              	.LASF162:
+ 51008 09b3 72634361 		.string	"rcCasting"
+ 51008      7374696E 
+ 51008      6700
+ 51009              	.LASF396:
+ 51010 09bd 73656C66 		.string	"self"
+ 51010      00
+ 51011              	.LASF122:
+ 51012 09c2 72634974 		.string	"rcIterator"
+ 51012      65726174 
+ 51012      6F7200
+ 51013              	.LASF57:
+ 51014 09cd 4B426C6F 		.string	"KBlockCipherVec"
+ 51014      636B4369 
+ 51014      70686572 
+ 51014      56656300 
+ 51015              	.LASF415:
+ 51016 09dd 7665635F 		.string	"vec_10"
+ 51016      313000
+ 51017              	.LASF355:
+ 51018 09e4 6F705F53 		.string	"op_SHUFPD"
+ 51018      48554650 
+ 51018      4400
+ 51019              	.LASF358:
+ 51020 09ee 4B414553 		.string	"KAESBlockCipherVecRegStateMerge2"
+ 51020      426C6F63 
+ 51020      6B436970 
+ 51020      68657256 
+ 51020      65635265 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1235
+
+
+ 51021              	.LASF139:
+ 51022 0a0f 72635374 		.string	"rcStorage"
+ 51022      6F726167 
+ 51022      6500
+ 51023              	.LASF394:
+ 51024 0a19 4B414553 		.string	"KAESBlockCipherVecRegEqInvCipher"
+ 51024      426C6F63 
+ 51024      6B436970 
+ 51024      68657256 
+ 51024      65635265 
+ 51025              	.LASF325:
+ 51026 0a3a 77686963 		.string	"which"
+ 51026      6800
+ 51027              	.LASF372:
+ 51028 0a40 4B414553 		.string	"KAESBlockCipherVecRegEqInvKeyExpansion"
+ 51028      426C6F63 
+ 51028      6B436970 
+ 51028      68657256 
+ 51028      65635265 
+ 51029              	.LASF306:
+ 51030 0a67 72634F75 		.string	"rcOutOfKDirectory"
+ 51030      744F664B 
+ 51030      44697265 
+ 51030      63746F72 
+ 51030      7900
+ 51031              	.LASF251:
+ 51032 0a79 7263526F 		.string	"rcRow"
+ 51032      7700
+ 51033              	.LASF26:
+ 51034 0a7f 4442475F 		.string	"DBG_VDB"
+ 51034      56444200 
+ 51035              	.LASF151:
+ 51036 0a87 72634C61 		.string	"rcLastTarget_v1_0"
+ 51036      73745461 
+ 51036      72676574 
+ 51036      5F76315F 
+ 51036      3000
+ 51037              	.LASF159:
+ 51038 0a99 72634C61 		.string	"rcLastTarget_v1_1"
+ 51038      73745461 
+ 51038      72676574 
+ 51038      5F76315F 
+ 51038      3100
+ 51039              	.LASF138:
+ 51040 0aab 72635365 		.string	"rcSemaphore"
+ 51040      6D617068 
+ 51040      6F726500 
+ 51041              	.LASF283:
+ 51042 0ab7 7263496E 		.string	"rcIncomplete"
+ 51042      636F6D70 
+ 51042      6C657465 
+ 51042      00
+ 51043              	.LASF312:
+ 51044 0ac4 72634E6F 		.string	"rcNotOpen"
+ 51044      744F7065 
+ 51044      6E00
+ 51045              	.LASF121:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1236
+
+
+ 51046 0ace 7263496E 		.string	"rcIndex"
+ 51046      64657800 
+ 51047              	.LASF28:
+ 51048 0ad6 4442475F 		.string	"DBG_XARC"
+ 51048      58415243 
+ 51048      00
+ 51049              	.LASF425:
+ 51050 0adf 474E5520 		.string	"GNU C 4.4.2"
+ 51050      4320342E 
+ 51050      342E3200 
+ 51051              	.LASF74:
+ 51052 0aeb 72635275 		.string	"rcRuntime"
+ 51052      6E74696D 
+ 51052      6500
+ 51053              	.LASF113:
+ 51054 0af5 7263586D 		.string	"rcXmlDoc"
+ 51054      6C446F63 
+ 51054      00
+ 51055              	.LASF382:
+ 51056 0afe 4B414553 		.string	"KAESBlockCipherVecRegShiftRows"
+ 51056      426C6F63 
+ 51056      6B436970 
+ 51056      68657256 
+ 51056      65635265 
+ 51057              	.LASF13:
+ 51058 0b1d 6C6F6E67 		.string	"long long int"
+ 51058      206C6F6E 
+ 51058      6720696E 
+ 51058      7400
+ 51059              	.LASF194:
+ 51060 0b2b 7263506F 		.string	"rcPositioning"
+ 51060      73697469 
+ 51060      6F6E696E 
+ 51060      6700
+ 51061              	.LASF135:
+ 51062 0b39 72635175 		.string	"rcQueue"
+ 51062      65756500 
+ 51063              	.LASF210:
+ 51064 0b41 72634465 		.string	"rcDetaching"
+ 51064      74616368 
+ 51064      696E6700 
+ 51065              	.LASF125:
+ 51066 0b4d 72634D44 		.string	"rcMD5SumFmt"
+ 51066      3553756D 
+ 51066      466D7400 
+ 51067              	.LASF176:
+ 51068 0b59 7263496E 		.string	"rcInserting"
+ 51068      73657274 
+ 51068      696E6700 
+ 51069              	.LASF224:
+ 51070 0b65 7263436F 		.string	"rcComparing"
+ 51070      6D706172 
+ 51070      696E6700 
+ 51071              	.LASF286:
+ 51072 0b71 7263456D 		.string	"rcEmpty"
+ 51072      70747900 
+ 51073              	.LASF118:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1237
+
+
+ 51074 0b79 7263466F 		.string	"rcFormatter"
+ 51074      726D6174 
+ 51074      74657200 
+ 51075              	.LASF381:
+ 51076 0b85 6D726F75 		.string	"mround_keys"
+ 51076      6E645F6B 
+ 51076      65797300 
+ 51077              	.LASF341:
+ 51078 0b91 4B414553 		.string	"KAESBlockCipherVecRegVecXor"
+ 51078      426C6F63 
+ 51078      6B436970 
+ 51078      68657256 
+ 51078      65635265 
+ 51079              	.LASF16:
+ 51080 0bad 646F7562 		.string	"double"
+ 51080      6C6500
+ 51081              	.LASF203:
+ 51082 0bb4 72635265 		.string	"rcRegistering"
+ 51082      67697374 
+ 51082      6572696E 
+ 51082      6700
+ 51083              	.LASF92:
+ 51084 0bc2 72634E53 		.string	"rcNS"
+ 51084      00
+ 51085              	.LASF235:
+ 51086 0bc7 72635061 		.string	"rcParam"
+ 51086      72616D00 
+ 51087              	.LASF374:
+ 51088 0bcf 4B414553 		.string	"KAESBlockCipherVecRegEqInvKeyExpansion192"
+ 51088      426C6F63 
+ 51088      6B436970 
+ 51088      68657256 
+ 51088      65635265 
+ 51089              	.LASF96:
+ 51090 0bf9 52435461 		.string	"RCTarget"
+ 51090      72676574 
+ 51090      00
+ 51091              	.LASF42:
+ 51092 0c02 4442475F 		.string	"DBG_AES_OBJECT"
+ 51092      4145535F 
+ 51092      4F424A45 
+ 51092      435400
+ 51093              	.LASF334:
+ 51094 0c11 6D61736B 		.string	"mask"
+ 51094      00
+ 51095              	.LASF257:
+ 51096 0c16 72634372 		.string	"rcCrc"
+ 51096      6300
+ 51097              	.LASF386:
+ 51098 0c1c 62737761 		.string	"bswap_32"
+ 51098      705F3332 
+ 51098      00
+ 51099              	.LASF32:
+ 51100 0c25 4442475F 		.string	"DBG_SEARCH"
+ 51100      53454152 
+ 51100      434800
+ 51101              	.LASF85:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1238
+
+
+ 51102 0c30 7263584D 		.string	"rcXML"
+ 51102      4C00
+ 51103              	.LASF384:
+ 51104 0c36 4B414553 		.string	"KAESBlockCipherVecRegFF_mul_02"
+ 51104      426C6F63 
+ 51104      6B436970 
+ 51104      68657256 
+ 51104      65635265 
+ 51105              	.LASF34:
+ 51106 0c55 4442475F 		.string	"DBG_VFS"
+ 51106      56465300 
+ 51107              	.LASF38:
+ 51108 0c5d 4442475F 		.string	"DBG_AES_KEYEXP"
+ 51108      4145535F 
+ 51108      4B455945 
+ 51108      585000
+ 51109              	.LASF426:
+ 51110 0c6c 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi.c"
+ 51110      652F726F 
+ 51110      6461726D 
+ 51110      65722F73 
+ 51110      72615F73 
+ 51111              	.LASF14:
+ 51112 0ca2 666C6F61 		.string	"float"
+ 51112      7400
+ 51113              	.LASF179:
+ 51114 0ca8 72635570 		.string	"rcUpdating"
+ 51114      64617469 
+ 51114      6E6700
+ 51115              	.LASF206:
+ 51116 0cb3 7263436F 		.string	"rcConverting"
+ 51116      6E766572 
+ 51116      74696E67 
+ 51116      00
+ 51117              	.LASF192:
+ 51118 0cc0 7263436F 		.string	"rcConcatenating"
+ 51118      6E636174 
+ 51118      656E6174 
+ 51118      696E6700 
+ 51119              	.LASF71:
+ 51120 0cd0 4B426C6F 		.string	"KBlockCipher"
+ 51120      636B4369 
+ 51120      70686572 
+ 51120      00
+ 51121              	.LASF149:
+ 51122 0cdd 72634479 		.string	"rcDylib"
+ 51122      6C696200 
+ 51123              	.LASF298:
+ 51124 0ce5 72635265 		.string	"rcReadonly"
+ 51124      61646F6E 
+ 51124      6C7900
+ 51125              	.LASF8:
+ 51126 0cf0 756E7369 		.string	"unsigned int"
+ 51126      676E6564 
+ 51126      20696E74 
+ 51126      00
+ 51127              	.LASF69:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1239
+
+
+ 51128 0cfd 67726964 		.string	"grid"
+ 51128      00
+ 51129              	.LASF41:
+ 51130 0d02 4442475F 		.string	"DBG_AES_INVCIPHER"
+ 51130      4145535F 
+ 51130      494E5643 
+ 51130      49504845 
+ 51130      5200
+ 51131              	.LASF299:
+ 51132 0d14 72635772 		.string	"rcWriteonly"
+ 51132      6974656F 
+ 51132      6E6C7900 
+ 51133              	.LASF293:
+ 51134 0d20 72634C6F 		.string	"rcLocked"
+ 51134      636B6564 
+ 51134      00
+ 51135              	.LASF175:
+ 51136 0d29 72635072 		.string	"rcProjecting"
+ 51136      6F6A6563 
+ 51136      74696E67 
+ 51136      00
+ 51137              	.LASF80:
+ 51138 0d36 72635053 		.string	"rcPS"
+ 51138      00
+ 51139              	.LASF265:
+ 51140 0d3b 72635265 		.string	"rcRefcount"
+ 51140      66636F75 
+ 51140      6E7400
+ 51141              	.LASF100:
+ 51142 0d46 7263546F 		.string	"rcTocEntry"
+ 51142      63456E74 
+ 51142      727900
+ 51143              	.LASF255:
+ 51144 0d51 72634D6F 		.string	"rcMode"
+ 51144      646500
+ 51145              	.LASF365:
+ 51146 0d58 62697473 		.string	"bits"
+ 51146      00
+ 51147              	.LASF314:
+ 51148 0d5d 7263556E 		.string	"rcUnequal"
+ 51148      65717561 
+ 51148      6C00
+ 51149              	.LASF295:
+ 51150 0d67 72634465 		.string	"rcDetached"
+ 51150      74616368 
+ 51150      656400
+ 51151              	.LASF375:
+ 51152 0d72 4B414553 		.string	"KAESBlockCipherVecRegEqInvKeyExpansion256"
+ 51152      426C6F63 
+ 51152      6B436970 
+ 51152      68657256 
+ 51152      65635265 
+ 51153              	.LASF301:
+ 51154 0d9c 7263496E 		.string	"rcInPlaceNotAllowed"
+ 51154      506C6163 
+ 51154      654E6F74 
+ 51154      416C6C6F 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1240
+
+
+ 51154      77656400 
+ 51155              	.LASF346:
+ 51156 0db0 4B414553 		.string	"KAESBlockCipherVecRegStateShiftLeft32"
+ 51156      426C6F63 
+ 51156      6B436970 
+ 51156      68657256 
+ 51156      65635265 
+ 51157              	.LASF243:
+ 51158 0dd6 72635261 		.string	"rcRange"
+ 51158      6E676500 
+ 51159              	.LASF336:
+ 51160 0dde 76746162 		.string	"vtab"
+ 51160      00
+ 51161              	.LASF427:
+ 51162 0de3 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 51162      652F726F 
+ 51162      6461726D 
+ 51162      65722F73 
+ 51162      72615F73 
+ 51163              	.LASF253:
+ 51164 0e2b 72634C61 		.string	"rcLastObject_v1_0"
+ 51164      73744F62 
+ 51164      6A656374 
+ 51164      5F76315F 
+ 51164      3000
+ 51165              	.LASF266:
+ 51166 0e3d 72634C61 		.string	"rcLastObject_v1_1"
+ 51166      73744F62 
+ 51166      6A656374 
+ 51166      5F76315F 
+ 51166      3100
+ 51167              	.LASF219:
+ 51168 0e4f 72634C61 		.string	"rcLastContext_v1_0"
+ 51168      7374436F 
+ 51168      6E746578 
+ 51168      745F7631 
+ 51168      5F3000
+ 51169              	.LASF230:
+ 51170 0e62 72634C61 		.string	"rcLastContext_v1_1"
+ 51170      7374436F 
+ 51170      6E746578 
+ 51170      745F7631 
+ 51170      5F3100
+ 51171              	.LASF321:
+ 51172 0e75 72636F6E 		.string	"rcon"
+ 51172      00
+ 51173              	.LASF379:
+ 51174 0e7a 4B414553 		.string	"KAESBlockCipherVecRegMiddleRound"
+ 51174      426C6F63 
+ 51174      6B436970 
+ 51174      68657256 
+ 51174      65635265 
+ 51175              	.LASF126:
+ 51176 0e9b 72634D65 		.string	"rcMemMap"
+ 51176      6D4D6170 
+ 51176      00
+ 51177              	.LASF423:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1241
+
+
+ 51178 0ea4 4B414553 		.string	"KAESBlockCipherVecRegaes_ncbi_name"
+ 51178      426C6F63 
+ 51178      6B436970 
+ 51178      68657256 
+ 51178      65635265 
+ 51179              	.LASF58:
+ 51180 0ec7 41455342 		.string	"AESByte"
+ 51180      79746500 
+ 51181              	.LASF150:
+ 51182 0ecf 72634578 		.string	"rcExpression"
+ 51182      70726573 
+ 51182      73696F6E 
+ 51182      00
+ 51183              	.LASF418:
+ 51184 0edc 4B414553 		.string	"KAESBlockCipherVecRegRijndaelInvSBoxV"
+ 51184      426C6F63 
+ 51184      6B436970 
+ 51184      68657256 
+ 51184      65635265 
+ 51185              	.LASF196:
+ 51186 0f02 7263556E 		.string	"rcUnpacking"
+ 51186      7061636B 
+ 51186      696E6700 
+ 51187              	.LASF112:
+ 51188 0f0e 7263446F 		.string	"rcDoc"
+ 51188      6300
+ 51189              	.LASF19:
+ 51190 0f14 4442475F 		.string	"DBG_APP"
+ 51190      41505000 
+ 51191              	.LASF213:
+ 51192 0f1c 72634D75 		.string	"rcMultiplexing"
+ 51192      6C746970 
+ 51192      6C657869 
+ 51192      6E6700
+ 51193              	.LASF215:
+ 51194 0f2b 72635365 		.string	"rcSearching"
+ 51194      61726368 
+ 51194      696E6700 
+ 51195              	.LASF420:
+ 51196 0f37 46465F74 		.string	"FF_tab"
+ 51196      616200
+ 51197              	.LASF315:
+ 51198 0f3e 72634661 		.string	"rcFailed"
+ 51198      696C6564 
+ 51198      00
+ 51199              	.LASF40:
+ 51200 0f47 4442475F 		.string	"DBG_AES_INVKEYEXP"
+ 51200      4145535F 
+ 51200      494E564B 
+ 51200      45594558 
+ 51200      5000
+ 51201              	.LASF119:
+ 51202 0f59 72634675 		.string	"rcFunctParam"
+ 51202      6E637450 
+ 51202      6172616D 
+ 51202      00
+ 51203              	.LASF280:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1242
+
+
+ 51204 0f66 7263496E 		.string	"rcIncorrect"
+ 51204      636F7272 
+ 51204      65637400 
+ 51205              	.LASF61:
+ 51206 0f72 776F7264 		.string	"word"
+ 51206      00
+ 51207              	.LASF371:
+ 51208 0f77 6F705F50 		.string	"op_PSLLDI128"
+ 51208      534C4C44 
+ 51208      49313238 
+ 51208      00
+ 51209              	.LASF229:
+ 51210 0f84 72634964 		.string	"rcIdentifying"
+ 51210      656E7469 
+ 51210      6679696E 
+ 51210      6700
+ 51211              	.LASF244:
+ 51212 0f92 7263436F 		.string	"rcConstraint"
+ 51212      6E737472 
+ 51212      61696E74 
+ 51212      00
+ 51213              	.LASF270:
+ 51214 0f9f 7263556E 		.string	"rcUnknown"
+ 51214      6B6E6F77 
+ 51214      6E00
+ 51215              	.LASF109:
+ 51216 0fa9 72634375 		.string	"rcCursor"
+ 51216      72736F72 
+ 51216      00
+ 51217              	.LASF267:
+ 51218 0fb2 52435374 		.string	"RCState"
+ 51218      61746500 
+ 51219              	.LASF55:
+ 51220 0fba 4B426C6F 		.string	"KBlockCipherByte"
+ 51220      636B4369 
+ 51220      70686572 
+ 51220      42797465 
+ 51220      00
+ 51221              	.LASF377:
+ 51222 0fcb 4B414553 		.string	"KAESBlockCipherVecRegAddRoundKey"
+ 51222      426C6F63 
+ 51222      6B436970 
+ 51222      68657256 
+ 51222      65635265 
+ 51223              	.LASF46:
+ 51224 0fec 4B426C6F 		.string	"KBlockCipherByte_vt_v1"
+ 51224      636B4369 
+ 51224      70686572 
+ 51224      42797465 
+ 51224      5F76745F 
+ 51225              	.LASF307:
+ 51226 1003 72634967 		.string	"rcIgnored"
+ 51226      6E6F7265 
+ 51226      6400
+ 51227              	.LASF165:
+ 51228 100d 72635265 		.string	"rcReleasing"
+ 51228      6C656173 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1243
+
+
+ 51228      696E6700 
+ 51229              	.LASF389:
+ 51230 1019 4B414553 		.string	"KAESBlockCipherVecRegEqInvMiddleRound"
+ 51230      426C6F63 
+ 51230      6B436970 
+ 51230      68657256 
+ 51230      65635265 
+ 51231              	.LASF88:
+ 51232 103f 72634B46 		.string	"rcKFG"
+ 51232      4700
+ 51233              	.LASF246:
+ 51234 1045 72634D65 		.string	"rcMessage"
+ 51234      73736167 
+ 51234      6500
+ 51235              	.LASF193:
+ 51236 104f 7263466F 		.string	"rcFormatting"
+ 51236      726D6174 
+ 51236      74696E67 
+ 51236      00
+ 51237              	.LASF86:
+ 51238 105c 72635352 		.string	"rcSRA"
+ 51238      4100
+ 51239              	.LASF344:
+ 51240 1062 4B414553 		.string	"KAESBlockCipherVecRegShiftXorColumns"
+ 51240      426C6F63 
+ 51240      6B436970 
+ 51240      68657256 
+ 51240      65635265 
+ 51241              	.LASF262:
+ 51242 1087 7263456E 		.string	"rcEnvironment"
+ 51242      7669726F 
+ 51242      6E6D656E 
+ 51242      7400
+ 51243              	.LASF15:
+ 51244 1095 6C6F6E67 		.string	"long long unsigned int"
+ 51244      206C6F6E 
+ 51244      6720756E 
+ 51244      7369676E 
+ 51244      65642069 
+ 51245              	.LASF48:
+ 51246 10ac 64657374 		.string	"destroy"
+ 51246      726F7900 
+ 51247              	.LASF144:
+ 51248 10b4 7263546F 		.string	"rcToken"
+ 51248      6B656E00 
+ 51249              	.LASF204:
+ 51250 10bc 7263546F 		.string	"rcTokenizing"
+ 51250      6B656E69 
+ 51250      7A696E67 
+ 51250      00
+ 51251              	.LASF22:
+ 51252 10c9 4442475F 		.string	"DBG_REF"
+ 51252      52454600 
+ 51253              	.LASF338:
+ 51254 10d1 4B414553 		.string	"KAESBlockCipherVecRegVecSub"
+ 51254      426C6F63 
+ 51254      6B436970 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1244
+
+
+ 51254      68657256 
+ 51254      65635265 
+ 51255              	.LASF185:
+ 51256 10ed 72635772 		.string	"rcWriting"
+ 51256      6974696E 
+ 51256      6700
+ 51257              	.LASF161:
+ 51258 10f7 7263416C 		.string	"rcAllocating"
+ 51258      6C6F6361 
+ 51258      74696E67 
+ 51258      00
+ 51259              	.LASF376:
+ 51260 1104 4B414553 		.string	"KAESBlockCipherVecRegFirstRound"
+ 51260      426C6F63 
+ 51260      6B436970 
+ 51260      68657256 
+ 51260      65635265 
+ 51261              	.LASF327:
+ 51262 1124 4B414553 		.string	"KAESBlockCipherVecRegSubBytes"
+ 51262      426C6F63 
+ 51262      6B436970 
+ 51262      68657256 
+ 51262      65635265 
+ 51263              	.LASF147:
+ 51264 1142 72635479 		.string	"rcType"
+ 51264      706500
+ 51265              	.LASF248:
+ 51266 1149 72635265 		.string	"rcResources"
+ 51266      736F7572 
+ 51266      63657300 
+ 51267              	.LASF354:
+ 51268 1155 4B414553 		.string	"KAESBlockCipherVecRegStateMerge1"
+ 51268      426C6F63 
+ 51268      6B436970 
+ 51268      68657256 
+ 51268      65635265 
+ 51269              	.LASF129:
+ 51270 1176 72634E61 		.string	"rcNamelist"
+ 51270      6D656C69 
+ 51270      737400
+ 51271              	.LASF387:
+ 51272 1181 4B414553 		.string	"KAESBlockCipherVecRegCipher"
+ 51272      426C6F63 
+ 51272      6B436970 
+ 51272      68657256 
+ 51272      65635265 
+ 51273              	.LASF337:
+ 51274 119d 4B414553 		.string	"KAESBlockCipherVecRegVecOr"
+ 51274      426C6F63 
+ 51274      6B436970 
+ 51274      68657256 
+ 51274      65635265 
+ 51275              	.LASF313:
+ 51276 11b8 7263556E 		.string	"rcUndefined"
+ 51276      64656669 
+ 51276      6E656400 
+ 51277              	.LASF385:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1245
+
+
+ 51278 11c4 4B414553 		.string	"KAESBlockCipherVecRegLastRound"
+ 51278      426C6F63 
+ 51278      6B436970 
+ 51278      68657256 
+ 51278      65635265 
+ 51279              	.LASF281:
+ 51280 11e3 7263496E 		.string	"rcInconsistent"
+ 51280      636F6E73 
+ 51280      69737465 
+ 51280      6E7400
+ 51281              	.LASF226:
+ 51282 11f2 72635265 		.string	"rcRetrieving"
+ 51282      74726965 
+ 51282      76696E67 
+ 51282      00
+ 51283              	.LASF400:
+ 51284 11ff 656E6372 		.string	"encrypt_key"
+ 51284      7970745F 
+ 51284      6B657900 
+ 51285              	.LASF54:
+ 51286 120b 64656372 		.string	"decrypt"
+ 51286      79707400 
+ 51287              	.LASF47:
+ 51288 1213 76657273 		.string	"version"
+ 51288      696F6E00 
+ 51289              	.LASF238:
+ 51290 121b 72634E61 		.string	"rcName"
+ 51290      6D6500
+ 51291              	.LASF275:
+ 51292 1222 72634E75 		.string	"rcNull"
+ 51292      6C6C00
+ 51293              	.LASF197:
+ 51294 1229 7263456E 		.string	"rcEncoding"
+ 51294      636F6469 
+ 51294      6E6700
+ 51295              	.LASF116:
+ 51296 1234 72634669 		.string	"rcFileFormat"
+ 51296      6C65466F 
+ 51296      726D6174 
+ 51296      00
+ 51297              	.LASF153:
+ 51298 1241 7263456E 		.string	"rcEncryptionKey"
+ 51298      63727970 
+ 51298      74696F6E 
+ 51298      4B657900 
+ 51299              	.LASF218:
+ 51300 1251 7263496E 		.string	"rcInflating"
+ 51300      666C6174 
+ 51300      696E6700 
+ 51301              	.LASF323:
+ 51302 125d 4B414553 		.string	"KAESBlockCipherVecRegSetColumn"
+ 51302      426C6F63 
+ 51302      6B436970 
+ 51302      68657256 
+ 51302      65635265 
+ 51303              	.LASF300:
+ 51304 127c 72634E6F 		.string	"rcNoPerm"
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1246
+
+
+ 51304      5065726D 
+ 51304      00
+ 51305              	.LASF333:
+ 51306 1285 64657374 		.string	"dest"
+ 51306      00
+ 51307              	.LASF188:
+ 51308 128a 72635265 		.string	"rcResetting"
+ 51308      73657474 
+ 51308      696E6700 
+ 51309              	.LASF49:
+ 51310 1296 626C6F63 		.string	"block_size"
+ 51310      6B5F7369 
+ 51310      7A6500
+ 51311              	.LASF136:
+ 51312 12a1 72635257 		.string	"rcRWLock"
+ 51312      4C6F636B 
+ 51312      00
+ 51313              	.LASF167:
+ 51314 12aa 72634C69 		.string	"rcListing"
+ 51314      7374696E 
+ 51314      6700
+ 51315              	.LASF414:
+ 51316 12b4 7665635F 		.string	"vec_0F"
+ 51316      304600
+ 51317              	.LASF117:
+ 51318 12bb 72634675 		.string	"rcFunction"
+ 51318      6E637469 
+ 51318      6F6E00
+ 51319              	.LASF39:
+ 51320 12c6 4442475F 		.string	"DBG_AES_CIPHER"
+ 51320      4145535F 
+ 51320      43495048 
+ 51320      455200
+ 51321              	.LASF273:
+ 51322 12d5 7263556E 		.string	"rcUnrecognized"
+ 51322      7265636F 
+ 51322      676E697A 
+ 51322      656400
+ 51323              	.LASF66:
+ 51324 12e4 6E756D62 		.string	"number_of_rounds"
+ 51324      65725F6F 
+ 51324      665F726F 
+ 51324      756E6473 
+ 51324      00
+ 51325              	.LASF356:
+ 51326 12f5 76696E31 		.string	"vin1"
+ 51326      00
+ 51327              	.LASF89:
+ 51328 12fa 7263416C 		.string	"rcAlign"
+ 51328      69676E00 
+ 51329              	.LASF152:
+ 51330 1302 72635072 		.string	"rcProduction"
+ 51330      6F647563 
+ 51330      74696F6E 
+ 51330      00
+ 51331              	.LASF94:
+ 51332 130f 72634C61 		.string	"rcLastModule_v1_1"
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1247
+
+
+ 51332      73744D6F 
+ 51332      64756C65 
+ 51332      5F76315F 
+ 51332      3100
+ 51333              	.LASF142:
+ 51334 1321 72635468 		.string	"rcThread"
+ 51334      72656164 
+ 51334      00
+ 51335              	.LASF391:
+ 51336 132a 4B414553 		.string	"KAESBlockCipherVecRegInvShiftRows"
+ 51336      426C6F63 
+ 51336      6B436970 
+ 51336      68657256 
+ 51336      65635265 
+ 51337              	.LASF190:
+ 51338 134c 72634672 		.string	"rcFreezing"
+ 51338      65657A69 
+ 51338      6E6700
+ 51339              	.LASF52:
+ 51340 1357 7365745F 		.string	"set_decrypt_key"
+ 51340      64656372 
+ 51340      7970745F 
+ 51340      6B657900 
+ 51341              	.LASF72:
+ 51342 1367 62797465 		.string	"byte"
+ 51342      00
+ 51343              	.LASF45:
+ 51344 136c 4B426C6F 		.string	"KBlockCipher_vt"
+ 51344      636B4369 
+ 51344      70686572 
+ 51344      5F767400 
+ 51345              	.LASF405:
+ 51346 137c 64656372 		.string	"decrypt_key"
+ 51346      7970745F 
+ 51346      6B657900 
+ 51347              	.LASF378:
+ 51348 1388 726F756E 		.string	"round_key"
+ 51348      645F6B65 
+ 51348      7900
+ 51349              	.LASF259:
+ 51350 1392 72635365 		.string	"rcSeed"
+ 51350      656400
+ 51351              	.LASF216:
+ 51352 1399 72634C6F 		.string	"rcLoading"
+ 51352      6164696E 
+ 51352      6700
+ 51353              	.LASF1:
+ 51354 13a3 73686F72 		.string	"short int"
+ 51354      7420696E 
+ 51354      7400
+ 51355              	.LASF397:
+ 51356 13ad 4B414553 		.string	"KAESBlockCipherVecRegBlockSize"
+ 51356      426C6F63 
+ 51356      6B436970 
+ 51356      68657256 
+ 51356      65635265 
+ 51357              	.LASF9:
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1248
+
+
+ 51358 13cc 75696E74 		.string	"uint64_t"
+ 51358      36345F74 
+ 51358      00
+ 51359              	.LASF309:
+ 51360 13d5 72634C61 		.string	"rcLastState_v1_0"
+ 51360      73745374 
+ 51360      6174655F 
+ 51360      76315F30 
+ 51360      00
+ 51361              	.LASF318:
+ 51362 13e6 72634C61 		.string	"rcLastState_v1_1"
+ 51362      73745374 
+ 51362      6174655F 
+ 51362      76315F31 
+ 51362      00
+ 51363              	.LASF83:
+ 51364 13f7 72635644 		.string	"rcVDB"
+ 51364      4200
+ 51365              	.LASF51:
+ 51366 13fd 7365745F 		.string	"set_encrypt_key"
+ 51366      656E6372 
+ 51366      7970745F 
+ 51366      6B657900 
+ 51367              	.LASF329:
+ 51368 140d 4B414553 		.string	"KAESBlockCipherVecRegVecAnd"
+ 51368      426C6F63 
+ 51368      6B436970 
+ 51368      68657256 
+ 51368      65635265 
+ 51369              	.LASF81:
+ 51370 1429 72635846 		.string	"rcXF"
+ 51370      00
+ 51371              	.LASF322:
+ 51372 142e 7672636F 		.string	"vrcon"
+ 51372      6E00
+ 51373              	.LASF164:
+ 51374 1434 72634465 		.string	"rcDestroying"
+ 51374      7374726F 
+ 51374      79696E67 
+ 51374      00
+ 51375              	.LASF269:
+ 51376 1441 7263446F 		.string	"rcDone"
+ 51376      6E6500
+ 51377              	.LASF99:
+ 51378 1448 7263546F 		.string	"rcToc"
+ 51378      6300
+ 51379              	.LASF63:
+ 51380 144e 43697068 		.string	"CipherVecByte"
+ 51380      65725665 
+ 51380      63427974 
+ 51380      6500
+ 51381              	.LASF173:
+ 51382 145c 7263416C 		.string	"rcAliasing"
+ 51382      69617369 
+ 51382      6E6700
+ 51383              	.LASF388:
+ 51384 1467 4B414553 		.string	"KAESBlockCipherVecRegEqInvFirstRound"
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1249
+
+
+ 51384      426C6F63 
+ 51384      6B436970 
+ 51384      68657256 
+ 51384      65635265 
+ 51385              	.LASF134:
+ 51386 148c 72635072 		.string	"rcProcess"
+ 51386      6F636573 
+ 51386      7300
+ 51387              	.LASF232:
+ 51388 1496 72634E6F 		.string	"rcNoObj"
+ 51388      4F626A00 
+ 51389              	.LASF406:
+ 51390 149e 4B414553 		.string	"KAESBlockCipherVecRegEncrypt"
+ 51390      426C6F63 
+ 51390      6B436970 
+ 51390      68657256 
+ 51390      65635265 
+ 51391              	.LASF271:
+ 51392 14bb 7263556E 		.string	"rcUnsupported"
+ 51392      73757070 
+ 51392      6F727465 
+ 51392      6400
+ 51393              	.LASF383:
+ 51394 14c9 4B414553 		.string	"KAESBlockCipherVecRegMixColumns"
+ 51394      426C6F63 
+ 51394      6B436970 
+ 51394      68657256 
+ 51394      65635265 
+ 51395              	.LASF339:
+ 51396 14e9 4B414553 		.string	"KAESBlockCipherVecRegRotBytesLeft"
+ 51396      426C6F63 
+ 51396      6B436970 
+ 51396      68657256 
+ 51396      65635265 
+ 51397              	.LASF107:
+ 51398 150b 7263436F 		.string	"rcColumn"
+ 51398      6C756D6E 
+ 51398      00
+ 51399              	.LASF272:
+ 51400 1514 7263556E 		.string	"rcUnexpected"
+ 51400      65787065 
+ 51400      63746564 
+ 51400      00
+ 51401              	.LASF7:
+ 51402 1521 75696E74 		.string	"uint32_t"
+ 51402      33325F74 
+ 51402      00
+ 51403              	.LASF93:
+ 51404 152a 72635646 		.string	"rcVFS"
+ 51404      5300
+ 51405              	.LASF31:
+ 51406 1530 4442475F 		.string	"DBG_KRYPTO"
+ 51406      4B525950 
+ 51406      544F00
+ 51407              	.LASF43:
+ 51408 153b 4442475F 		.string	"DBG_AES_COUNT"
+ 51408      4145535F 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1250
+
+
+ 51408      434F554E 
+ 51408      5400
+ 51409              	.LASF60:
+ 51410 1549 41455343 		.string	"AESColumn"
+ 51410      6F6C756D 
+ 51410      6E00
+ 51411              	.LASF409:
+ 51412 1553 6C657665 		.string	"level"
+ 51412      6C00
+ 51413              	.LASF363:
+ 51414 1559 4B414553 		.string	"KAESBlockCipherVecRegInvMixColumns"
+ 51414      426C6F63 
+ 51414      6B436970 
+ 51414      68657256 
+ 51414      65635265 
+ 51415              	.LASF317:
+ 51416 157c 72635772 		.string	"rcWrongType"
+ 51416      6F6E6754 
+ 51416      79706500 
+ 51417              	.LASF252:
+ 51418 1588 72634C69 		.string	"rcLibrary"
+ 51418      62726172 
+ 51418      7900
+ 51419              	.LASF285:
+ 51420 1592 72634361 		.string	"rcCanceled"
+ 51420      6E63656C 
+ 51420      656400
+ 51421              	.LASF156:
+ 51422 159d 72634461 		.string	"rcData"
+ 51422      746100
+ 51423              	.LASF120:
+ 51424 15a4 72634865 		.string	"rcHeader"
+ 51424      61646572 
+ 51424      00
+ 51425              	.LASF6:
+ 51426 15ad 73686F72 		.string	"short unsigned int"
+ 51426      7420756E 
+ 51426      7369676E 
+ 51426      65642069 
+ 51426      6E7400
+ 51427              	.LASF424:
+ 51428 15c0 4B414553 		.string	"KAESBlockCipherVecReg_vt_"
+ 51428      426C6F63 
+ 51428      6B436970 
+ 51428      68657256 
+ 51428      65635265 
+ 51429              	.LASF110:
+ 51430 15da 72634461 		.string	"rcDatabase"
+ 51430      74616261 
+ 51430      736500
+ 51431              	.LASF186:
+ 51432 15e5 7263436F 		.string	"rcCommitting"
+ 51432      6D6D6974 
+ 51432      74696E67 
+ 51432      00
+ 51433              	.LASF214:
+ 51434 15f2 7263436C 		.string	"rcClassifying"
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1251
+
+
+ 51434      61737369 
+ 51434      6679696E 
+ 51434      6700
+ 51435              	.LASF145:
+ 51436 1600 72635472 		.string	"rcTree"
+ 51436      656500
+ 51437              	.LASF36:
+ 51438 1607 4442475F 		.string	"DBG_ARGS"
+ 51438      41524753 
+ 51438      00
+ 51439              	.LASF349:
+ 51440 1610 4B414553 		.string	"KAESBlockCipherVecRegAesKeyGenAssistColumn1"
+ 51440      426C6F63 
+ 51440      6B436970 
+ 51440      68657256 
+ 51440      65635265 
+ 51441              	.LASF361:
+ 51442 163c 4B414553 		.string	"KAESBlockCipherVecRegAesKeyGenAssistColumn2"
+ 51442      426C6F63 
+ 51442      6B436970 
+ 51442      68657256 
+ 51442      65635265 
+ 51443              	.LASF320:
+ 51444 1668 4B414553 		.string	"KAESBlockCipherVecRegAesKeyGenAssistColumn3"
+ 51444      426C6F63 
+ 51444      6B436970 
+ 51444      68657256 
+ 51444      65635265 
+ 51445              	.LASF174:
+ 51446 1694 72635365 		.string	"rcSelecting"
+ 51446      6C656374 
+ 51446      696E6700 
+ 51447              	.LASF75:
+ 51448 16a0 72635465 		.string	"rcText"
+ 51448      787400
+ 51449              	.LASF311:
+ 51450 16a7 72634F75 		.string	"rcOutoforder"
+ 51450      746F666F 
+ 51450      72646572 
+ 51450      00
+ 51451              	.LASF278:
+ 51452 16b4 7263496E 		.string	"rcInvalid"
+ 51452      76616C69 
+ 51452      6400
+ 51453              	.LASF402:
+ 51454 16be 75736572 		.string	"user_key_size"
+ 51454      5F6B6579 
+ 51454      5F73697A 
+ 51454      6500
+ 51455              	.LASF225:
+ 51456 16cc 7263496E 		.string	"rcInitializing"
+ 51456      69746961 
+ 51456      6C697A69 
+ 51456      6E6700
+ 51457              	.LASF104:
+ 51458 16db 7263426C 		.string	"rcBlob"
+ 51458      6F6200
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1252
+
+
+ 51459              	.LASF326:
+ 51460 16e2 6F705F50 		.string	"op_PINSRUD"
+ 51460      494E5352 
+ 51460      554400
+ 51461              	.LASF351:
+ 51462 16ed 74656D70 		.string	"temp"
+ 51462      00
+ 51463              	.LASF202:
+ 51464 16f2 72635265 		.string	"rcReindexing"
+ 51464      696E6465 
+ 51464      78696E67 
+ 51464      00
+ 51465              	.LASF97:
+ 51466 16ff 72634E6F 		.string	"rcNoTarg"
+ 51466      54617267 
+ 51466      00
+ 51467              	.LASF279:
+ 51468 1708 7263436F 		.string	"rcCorrupt"
+ 51468      72727570 
+ 51468      7400
+ 51469              	.LASF308:
+ 51470 1712 72634F75 		.string	"rcOutofrange"
+ 51470      746F6672 
+ 51470      616E6765 
+ 51470      00
+ 51471              	.LASF137:
+ 51472 171f 72635363 		.string	"rcSchema"
+ 51472      68656D61 
+ 51472      00
+ 51473              	.LASF417:
+ 51474 1728 4B414553 		.string	"KAESBlockCipherVecRegRijndaelSBoxV"
+ 51474      426C6F63 
+ 51474      6B436970 
+ 51474      68657256 
+ 51474      65635265 
+ 51475              	.LASF370:
+ 51476 174b 736C5F6D 		.string	"sl_mask"
+ 51476      61736B00 
+ 51477              	.LASF133:
+ 51478 1753 72635061 		.string	"rcPath"
+ 51478      746800
+ 51479              	.LASF184:
+ 51480 175a 72635265 		.string	"rcReading"
+ 51480      6164696E 
+ 51480      6700
+ 51481              	.LASF50:
+ 51482 1764 6B65795F 		.string	"key_size"
+ 51482      73697A65 
+ 51482      00
+ 51483              	.LASF316:
+ 51484 176d 72634E6F 		.string	"rcNotAvailable"
+ 51484      74417661 
+ 51484      696C6162 
+ 51484      6C6500
+ 51485              	.LASF274:
+ 51486 177c 7263416D 		.string	"rcAmbiguous"
+ 51486      62696775 
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1253
+
+
+ 51486      6F757300 
+ 51487              		.ident	"GCC: (GNU) 4.4.2"
+ 51488              		.section	.note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1254
+
+
+DEFINED SYMBOLS
+                            *ABS*:0000000000000000 aes-ncbi.c
+     /tmp/ccjbMjHD.s:11     .text:0000000000000000 bswap_32
+     /tmp/ccjbMjHD.s:47     .rodata:0000000000000000 vec_00
+     /tmp/ccjbMjHD.s:52     .rodata:0000000000000010 vec_01
+     /tmp/ccjbMjHD.s:72     .rodata:0000000000000020 vec_0F
+     /tmp/ccjbMjHD.s:92     .rodata:0000000000000030 vec_10
+     /tmp/ccjbMjHD.s:112    .rodata:0000000000000040 KAESBlockCipherVecRegRijndaelSBox
+     /tmp/ccjbMjHD.s:372    .rodata:0000000000000140 KAESBlockCipherVecRegRijndaelSBoxV
+     /tmp/ccjbMjHD.s:632    .rodata:0000000000000240 KAESBlockCipherVecRegRijndaelInvSBoxV
+     /tmp/ccjbMjHD.s:892    .rodata:0000000000000340 lo_filter
+     /tmp/ccjbMjHD.s:912    .rodata:0000000000000350 FF_tab
+     /tmp/ccjbMjHD.s:932    .data:0000000000000000 KAESBlockCipherVecRegFFtable
+     /tmp/ccjbMjHD.s:945    .rodata:0000000000000360 KAESBlockCipherVecRegRcon
+     /tmp/ccjbMjHD.s:968    .text:0000000000000014 KAESBlockCipherVecRegKeyExpansion128
+     /tmp/ccjbMjHD.s:21622  .rodata:0000000000000600 ShiftRowTable.7385
+     /tmp/ccjbMjHD.s:21958  .rodata:0000000000000810 mask.7943
+     /tmp/ccjbMjHD.s:6545   .text:00000000000054ef KAESBlockCipherVecRegKeyExpansion192
+     /tmp/ccjbMjHD.s:21978  .rodata:0000000000000820 mask.7952
+     /tmp/ccjbMjHD.s:10799  .text:000000000000967d KAESBlockCipherVecRegKeyExpansion256
+     /tmp/ccjbMjHD.s:15920  .text:000000000000e479 KAESBlockCipherVecRegEqInvKeyExpansion
+     /tmp/ccjbMjHD.s:21647  .rodata:0000000000000640 sr_mask.7327
+     /tmp/ccjbMjHD.s:21800  .rodata:0000000000000700 sl_mask.7310
+     /tmp/ccjbMjHD.s:16983  .text:000000000000f439 KAESBlockCipherVecRegEqInvKeyExpansion128
+     /tmp/ccjbMjHD.s:17011  .text:000000000000f463 KAESBlockCipherVecRegEqInvKeyExpansion192
+     /tmp/ccjbMjHD.s:17039  .text:000000000000f48d KAESBlockCipherVecRegEqInvKeyExpansion256
+     /tmp/ccjbMjHD.s:17083  .text:000000000000f4b7 KAESBlockCipherVecRegCipher
+     /tmp/ccjbMjHD.s:21602  .rodata:00000000000005f0 ShiftRowTable.7358
+     /tmp/ccjbMjHD.s:18729  .text:0000000000010d03 KAESBlockCipherVecRegEqInvCipher
+     /tmp/ccjbMjHD.s:21998  .rodata:0000000000000830 InvShiftRowTable.7367
+     /tmp/ccjbMjHD.s:20859  .rodata:000000000000046c KAESBlockCipherVecRegaes_ncbi_name
+     /tmp/ccjbMjHD.s:20863  .text:0000000000012cd9 KAESBlockCipherVecRegDestroy
+     /tmp/ccjbMjHD.s:20882  .text:0000000000012ce3 KAESBlockCipherVecRegBlockSize
+     /tmp/ccjbMjHD.s:20902  .text:0000000000012cee KAESBlockCipherVecRegKeySize
+     /tmp/ccjbMjHD.s:20927  .text:0000000000012cf9 KAESBlockCipherVecRegSetEncryptKey
+     /tmp/ccjbMjHD.s:21948  .rodata:00000000000007a0 __func__.9027
+     /tmp/ccjbMjHD.s:21018  .text:0000000000012de2 KAESBlockCipherVecRegSetDecryptKey
+     /tmp/ccjbMjHD.s:21100  .text:0000000000012ea5 KAESBlockCipherVecRegEncrypt
+     /tmp/ccjbMjHD.s:21597  .rodata:00000000000005d0 __PRETTY_FUNCTION__.9063
+     /tmp/ccjbMjHD.s:21178  .text:0000000000012f68 KAESBlockCipherVecRegDecrypt
+     /tmp/ccjbMjHD.s:21592  .rodata:00000000000005b0 __PRETTY_FUNCTION__.9084
+     /tmp/ccjbMjHD.s:21271  .text:000000000001302b KAESBlockCipherVecRegProcessorSupport
+     /tmp/ccjbMjHD.s:21587  .rodata:0000000000000580 __func__.9108
+     /tmp/ccjbMjHD.s:21481  .data.rel.ro.local:0000000000000000 KAESBlockCipherVecReg_vt_
+     /tmp/ccjbMjHD.s:21497  .text:0000000000013281 KAESBlockCipherVecRegMake
+     /tmp/ccjbMjHD.s:21577  .rodata:0000000000000540 __func__.9198
+     /tmp/ccjbMjHD.s:21582  .rodata:0000000000000560 __PRETTY_FUNCTION__.9199
+     /tmp/ccjbMjHD.s:21642  .rodata:0000000000000610 __PRETTY_FUNCTION__.7467
+     /tmp/ccjbMjHD.s:21795  .rodata:00000000000006d0 __PRETTY_FUNCTION__.7312
+     /tmp/ccjbMjHD.s:21953  .rodata:00000000000007e0 __PRETTY_FUNCTION__.9026
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+KDbgWriterGet
+KDbgCondToFlag
+KDbgTestModConds
+KDbgMsg
+
GAS LISTING /tmp/ccjbMjHD.s 			page 1255
+
+
+memset
+SetRCFileFuncLine
+__assert_fail
diff --git a/libs/krypto/aes-priv.h b/libs/krypto/aes-priv.h
new file mode 100644
index 0000000..4ebdbb0
--- /dev/null
+++ b/libs/krypto/aes-priv.h
@@ -0,0 +1,94 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#ifndef _h_krypto_aes_priv_
+#define _h_krypto_aes_priv_
+
+/*
+ * This header file was written to integrate the public domain AES code
+ * with the SRA project
+ */
+
+#define AES_ENCRYPT	1
+#define AES_DECRYPT	0
+
+/* Because array size can't be a const in C, the following two are macros.
+   Both sizes are in bytes. */
+#define AES_MAXNR (14)
+#define AES_BLOCK_SIZE (16)
+
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+typedef uint8_t AES_BYTE;
+typedef uint32_t AES_WORD;
+
+
+
+
+/* typedef int64_t AESState  __attribute__ ((vector_size (AES_BLOCK_SIZE))); */
+
+typedef struct AES_KEY AES_KEY;
+struct AES_KEY
+{
+    uint32_t rd_key [sizeof (AES_WORD) * (AES_MAXNR + 1)];
+    uint32_t rounds;
+};
+
+
+int AES_set_encrypt_key(const uint8_t *userKey, const uint32_t bits,
+                        AES_KEY *key);
+
+int AES_set_decrypt_key(const uint8_t *userKey, const uint32_t bits,
+                        AES_KEY *key);
+
+void AES_encrypt(const uint8_t *in, uint8_t *out,
+                 const AES_KEY *key);
+void AES_decrypt(const uint8_t *in, uint8_t *out,
+                 const AES_KEY *key);
+
+
+int AESx86_set_encrypt_key(const uint8_t *userKey, const uint32_t bits,
+                        AES_KEY *key);
+
+int AESx86_set_decrypt_key(const uint8_t *userKey, const uint32_t bits,
+                        AES_KEY *key);
+
+void AESx86_encrypt(const uint8_t *in, uint8_t *out,
+                 const AES_KEY *key);
+void AES_decrypt(const uint8_t *in, uint8_t *out,
+                 const AES_KEY *key);
+
+
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif /* #ifndef _h_krypto_aes_priv_ */
+
+
diff --git a/libs/krypto/aes.c b/libs/krypto/aes.c
new file mode 100644
index 0000000..328ba6d
--- /dev/null
+++ b/libs/krypto/aes.c
@@ -0,0 +1 @@
+#error "Obsolete do not use"
diff --git a/libs/krypto/aes_core.c b/libs/krypto/aes_core.c
new file mode 100644
index 0000000..b4d4239
--- /dev/null
+++ b/libs/krypto/aes_core.c
@@ -0,0 +1,1181 @@
+/*
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was modified as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *  Tweaked to match standards of the NCBI SRA project
+ * We obatined this file from version 1.0.0e of OpenSSL but we have
+ * eliminated the OpenSSL code where it could be identified
+ *
+ * We created our own header file as there was no public domain
+ * header file associated with this public domain C file.
+ */
+
+/**
+ * rijndael-alg-fst.c
+ *
+ * @version 3.0 (December 2000)
+ *
+ * Optimised ANSI C code for the Rijndael cipher (now AES)
+ *
+ * @author Vincent Rijmen <vincent.rijmen at esat.kuleuven.ac.be>
+ * @author Antoon Bosselaers <antoon.bosselaers at esat.kuleuven.ac.be>
+ * @author Paulo Barreto <paulo.barreto at terra.com.br>
+ *
+ * This code is hereby placed in the public domain.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#include <krypto/extern.h>
+#include <klib/defs.h>
+
+#include "aes-priv.h"
+
+#include <assert.h>
+
+
+#define FULL_UNROLL (true)
+
+# define GETU32(pt) (((uint32_t)(pt)[0] << 24) ^ ((uint32_t)(pt)[1] << 16) ^ ((uint32_t)(pt)[2] <<  8) ^ ((uint32_t)(pt)[3]))
+# define PUTU32(ct, st) (((ct)[0] = (uint8_t)((st) >> 24)), ((ct)[1] = (uint8_t)((st) >> 16)),((ct)[2] = (uint8_t)((st) >>  8)),((ct)[3] = (uint8_t)(st)))
+
+/*
+Te0[x] = S [x].[02, 01, 01, 03];
+Te1[x] = S [x].[03, 02, 01, 01];
+Te2[x] = S [x].[01, 03, 02, 01];
+Te3[x] = S [x].[01, 01, 03, 02];
+
+Td0[x] = Si[x].[0e, 09, 0d, 0b];
+Td1[x] = Si[x].[0b, 0e, 09, 0d];
+Td2[x] = Si[x].[0d, 0b, 0e, 09];
+Td3[x] = Si[x].[09, 0d, 0b, 0e];
+Td4[x] = Si[x].[01];
+*/
+
+static const uint32_t Te0[256] = {
+    0xc66363a5U, 0xf87c7c84U, 0xee777799U, 0xf67b7b8dU,
+    0xfff2f20dU, 0xd66b6bbdU, 0xde6f6fb1U, 0x91c5c554U,
+    0x60303050U, 0x02010103U, 0xce6767a9U, 0x562b2b7dU,
+    0xe7fefe19U, 0xb5d7d762U, 0x4dababe6U, 0xec76769aU,
+    0x8fcaca45U, 0x1f82829dU, 0x89c9c940U, 0xfa7d7d87U,
+    0xeffafa15U, 0xb25959ebU, 0x8e4747c9U, 0xfbf0f00bU,
+    0x41adadecU, 0xb3d4d467U, 0x5fa2a2fdU, 0x45afafeaU,
+    0x239c9cbfU, 0x53a4a4f7U, 0xe4727296U, 0x9bc0c05bU,
+    0x75b7b7c2U, 0xe1fdfd1cU, 0x3d9393aeU, 0x4c26266aU,
+    0x6c36365aU, 0x7e3f3f41U, 0xf5f7f702U, 0x83cccc4fU,
+    0x6834345cU, 0x51a5a5f4U, 0xd1e5e534U, 0xf9f1f108U,
+    0xe2717193U, 0xabd8d873U, 0x62313153U, 0x2a15153fU,
+    0x0804040cU, 0x95c7c752U, 0x46232365U, 0x9dc3c35eU,
+    0x30181828U, 0x379696a1U, 0x0a05050fU, 0x2f9a9ab5U,
+    0x0e070709U, 0x24121236U, 0x1b80809bU, 0xdfe2e23dU,
+    0xcdebeb26U, 0x4e272769U, 0x7fb2b2cdU, 0xea75759fU,
+    0x1209091bU, 0x1d83839eU, 0x582c2c74U, 0x341a1a2eU,
+    0x361b1b2dU, 0xdc6e6eb2U, 0xb45a5aeeU, 0x5ba0a0fbU,
+    0xa45252f6U, 0x763b3b4dU, 0xb7d6d661U, 0x7db3b3ceU,
+    0x5229297bU, 0xdde3e33eU, 0x5e2f2f71U, 0x13848497U,
+    0xa65353f5U, 0xb9d1d168U, 0x00000000U, 0xc1eded2cU,
+    0x40202060U, 0xe3fcfc1fU, 0x79b1b1c8U, 0xb65b5bedU,
+    0xd46a6abeU, 0x8dcbcb46U, 0x67bebed9U, 0x7239394bU,
+    0x944a4adeU, 0x984c4cd4U, 0xb05858e8U, 0x85cfcf4aU,
+    0xbbd0d06bU, 0xc5efef2aU, 0x4faaaae5U, 0xedfbfb16U,
+    0x864343c5U, 0x9a4d4dd7U, 0x66333355U, 0x11858594U,
+    0x8a4545cfU, 0xe9f9f910U, 0x04020206U, 0xfe7f7f81U,
+    0xa05050f0U, 0x783c3c44U, 0x259f9fbaU, 0x4ba8a8e3U,
+    0xa25151f3U, 0x5da3a3feU, 0x804040c0U, 0x058f8f8aU,
+    0x3f9292adU, 0x219d9dbcU, 0x70383848U, 0xf1f5f504U,
+    0x63bcbcdfU, 0x77b6b6c1U, 0xafdada75U, 0x42212163U,
+    0x20101030U, 0xe5ffff1aU, 0xfdf3f30eU, 0xbfd2d26dU,
+    0x81cdcd4cU, 0x180c0c14U, 0x26131335U, 0xc3ecec2fU,
+    0xbe5f5fe1U, 0x359797a2U, 0x884444ccU, 0x2e171739U,
+    0x93c4c457U, 0x55a7a7f2U, 0xfc7e7e82U, 0x7a3d3d47U,
+    0xc86464acU, 0xba5d5de7U, 0x3219192bU, 0xe6737395U,
+    0xc06060a0U, 0x19818198U, 0x9e4f4fd1U, 0xa3dcdc7fU,
+    0x44222266U, 0x542a2a7eU, 0x3b9090abU, 0x0b888883U,
+    0x8c4646caU, 0xc7eeee29U, 0x6bb8b8d3U, 0x2814143cU,
+    0xa7dede79U, 0xbc5e5ee2U, 0x160b0b1dU, 0xaddbdb76U,
+    0xdbe0e03bU, 0x64323256U, 0x743a3a4eU, 0x140a0a1eU,
+    0x924949dbU, 0x0c06060aU, 0x4824246cU, 0xb85c5ce4U,
+    0x9fc2c25dU, 0xbdd3d36eU, 0x43acacefU, 0xc46262a6U,
+    0x399191a8U, 0x319595a4U, 0xd3e4e437U, 0xf279798bU,
+    0xd5e7e732U, 0x8bc8c843U, 0x6e373759U, 0xda6d6db7U,
+    0x018d8d8cU, 0xb1d5d564U, 0x9c4e4ed2U, 0x49a9a9e0U,
+    0xd86c6cb4U, 0xac5656faU, 0xf3f4f407U, 0xcfeaea25U,
+    0xca6565afU, 0xf47a7a8eU, 0x47aeaee9U, 0x10080818U,
+    0x6fbabad5U, 0xf0787888U, 0x4a25256fU, 0x5c2e2e72U,
+    0x381c1c24U, 0x57a6a6f1U, 0x73b4b4c7U, 0x97c6c651U,
+    0xcbe8e823U, 0xa1dddd7cU, 0xe874749cU, 0x3e1f1f21U,
+    0x964b4bddU, 0x61bdbddcU, 0x0d8b8b86U, 0x0f8a8a85U,
+    0xe0707090U, 0x7c3e3e42U, 0x71b5b5c4U, 0xcc6666aaU,
+    0x904848d8U, 0x06030305U, 0xf7f6f601U, 0x1c0e0e12U,
+    0xc26161a3U, 0x6a35355fU, 0xae5757f9U, 0x69b9b9d0U,
+    0x17868691U, 0x99c1c158U, 0x3a1d1d27U, 0x279e9eb9U,
+    0xd9e1e138U, 0xebf8f813U, 0x2b9898b3U, 0x22111133U,
+    0xd26969bbU, 0xa9d9d970U, 0x078e8e89U, 0x339494a7U,
+    0x2d9b9bb6U, 0x3c1e1e22U, 0x15878792U, 0xc9e9e920U,
+    0x87cece49U, 0xaa5555ffU, 0x50282878U, 0xa5dfdf7aU,
+    0x038c8c8fU, 0x59a1a1f8U, 0x09898980U, 0x1a0d0d17U,
+    0x65bfbfdaU, 0xd7e6e631U, 0x844242c6U, 0xd06868b8U,
+    0x824141c3U, 0x299999b0U, 0x5a2d2d77U, 0x1e0f0f11U,
+    0x7bb0b0cbU, 0xa85454fcU, 0x6dbbbbd6U, 0x2c16163aU,
+};
+static const uint32_t Te1[256] = {
+    0xa5c66363U, 0x84f87c7cU, 0x99ee7777U, 0x8df67b7bU,
+    0x0dfff2f2U, 0xbdd66b6bU, 0xb1de6f6fU, 0x5491c5c5U,
+    0x50603030U, 0x03020101U, 0xa9ce6767U, 0x7d562b2bU,
+    0x19e7fefeU, 0x62b5d7d7U, 0xe64dababU, 0x9aec7676U,
+    0x458fcacaU, 0x9d1f8282U, 0x4089c9c9U, 0x87fa7d7dU,
+    0x15effafaU, 0xebb25959U, 0xc98e4747U, 0x0bfbf0f0U,
+    0xec41adadU, 0x67b3d4d4U, 0xfd5fa2a2U, 0xea45afafU,
+    0xbf239c9cU, 0xf753a4a4U, 0x96e47272U, 0x5b9bc0c0U,
+    0xc275b7b7U, 0x1ce1fdfdU, 0xae3d9393U, 0x6a4c2626U,
+    0x5a6c3636U, 0x417e3f3fU, 0x02f5f7f7U, 0x4f83ccccU,
+    0x5c683434U, 0xf451a5a5U, 0x34d1e5e5U, 0x08f9f1f1U,
+    0x93e27171U, 0x73abd8d8U, 0x53623131U, 0x3f2a1515U,
+    0x0c080404U, 0x5295c7c7U, 0x65462323U, 0x5e9dc3c3U,
+    0x28301818U, 0xa1379696U, 0x0f0a0505U, 0xb52f9a9aU,
+    0x090e0707U, 0x36241212U, 0x9b1b8080U, 0x3ddfe2e2U,
+    0x26cdebebU, 0x694e2727U, 0xcd7fb2b2U, 0x9fea7575U,
+    0x1b120909U, 0x9e1d8383U, 0x74582c2cU, 0x2e341a1aU,
+    0x2d361b1bU, 0xb2dc6e6eU, 0xeeb45a5aU, 0xfb5ba0a0U,
+    0xf6a45252U, 0x4d763b3bU, 0x61b7d6d6U, 0xce7db3b3U,
+    0x7b522929U, 0x3edde3e3U, 0x715e2f2fU, 0x97138484U,
+    0xf5a65353U, 0x68b9d1d1U, 0x00000000U, 0x2cc1ededU,
+    0x60402020U, 0x1fe3fcfcU, 0xc879b1b1U, 0xedb65b5bU,
+    0xbed46a6aU, 0x468dcbcbU, 0xd967bebeU, 0x4b723939U,
+    0xde944a4aU, 0xd4984c4cU, 0xe8b05858U, 0x4a85cfcfU,
+    0x6bbbd0d0U, 0x2ac5efefU, 0xe54faaaaU, 0x16edfbfbU,
+    0xc5864343U, 0xd79a4d4dU, 0x55663333U, 0x94118585U,
+    0xcf8a4545U, 0x10e9f9f9U, 0x06040202U, 0x81fe7f7fU,
+    0xf0a05050U, 0x44783c3cU, 0xba259f9fU, 0xe34ba8a8U,
+    0xf3a25151U, 0xfe5da3a3U, 0xc0804040U, 0x8a058f8fU,
+    0xad3f9292U, 0xbc219d9dU, 0x48703838U, 0x04f1f5f5U,
+    0xdf63bcbcU, 0xc177b6b6U, 0x75afdadaU, 0x63422121U,
+    0x30201010U, 0x1ae5ffffU, 0x0efdf3f3U, 0x6dbfd2d2U,
+    0x4c81cdcdU, 0x14180c0cU, 0x35261313U, 0x2fc3ececU,
+    0xe1be5f5fU, 0xa2359797U, 0xcc884444U, 0x392e1717U,
+    0x5793c4c4U, 0xf255a7a7U, 0x82fc7e7eU, 0x477a3d3dU,
+    0xacc86464U, 0xe7ba5d5dU, 0x2b321919U, 0x95e67373U,
+    0xa0c06060U, 0x98198181U, 0xd19e4f4fU, 0x7fa3dcdcU,
+    0x66442222U, 0x7e542a2aU, 0xab3b9090U, 0x830b8888U,
+    0xca8c4646U, 0x29c7eeeeU, 0xd36bb8b8U, 0x3c281414U,
+    0x79a7dedeU, 0xe2bc5e5eU, 0x1d160b0bU, 0x76addbdbU,
+    0x3bdbe0e0U, 0x56643232U, 0x4e743a3aU, 0x1e140a0aU,
+    0xdb924949U, 0x0a0c0606U, 0x6c482424U, 0xe4b85c5cU,
+    0x5d9fc2c2U, 0x6ebdd3d3U, 0xef43acacU, 0xa6c46262U,
+    0xa8399191U, 0xa4319595U, 0x37d3e4e4U, 0x8bf27979U,
+    0x32d5e7e7U, 0x438bc8c8U, 0x596e3737U, 0xb7da6d6dU,
+    0x8c018d8dU, 0x64b1d5d5U, 0xd29c4e4eU, 0xe049a9a9U,
+    0xb4d86c6cU, 0xfaac5656U, 0x07f3f4f4U, 0x25cfeaeaU,
+    0xafca6565U, 0x8ef47a7aU, 0xe947aeaeU, 0x18100808U,
+    0xd56fbabaU, 0x88f07878U, 0x6f4a2525U, 0x725c2e2eU,
+    0x24381c1cU, 0xf157a6a6U, 0xc773b4b4U, 0x5197c6c6U,
+    0x23cbe8e8U, 0x7ca1ddddU, 0x9ce87474U, 0x213e1f1fU,
+    0xdd964b4bU, 0xdc61bdbdU, 0x860d8b8bU, 0x850f8a8aU,
+    0x90e07070U, 0x427c3e3eU, 0xc471b5b5U, 0xaacc6666U,
+    0xd8904848U, 0x05060303U, 0x01f7f6f6U, 0x121c0e0eU,
+    0xa3c26161U, 0x5f6a3535U, 0xf9ae5757U, 0xd069b9b9U,
+    0x91178686U, 0x5899c1c1U, 0x273a1d1dU, 0xb9279e9eU,
+    0x38d9e1e1U, 0x13ebf8f8U, 0xb32b9898U, 0x33221111U,
+    0xbbd26969U, 0x70a9d9d9U, 0x89078e8eU, 0xa7339494U,
+    0xb62d9b9bU, 0x223c1e1eU, 0x92158787U, 0x20c9e9e9U,
+    0x4987ceceU, 0xffaa5555U, 0x78502828U, 0x7aa5dfdfU,
+    0x8f038c8cU, 0xf859a1a1U, 0x80098989U, 0x171a0d0dU,
+    0xda65bfbfU, 0x31d7e6e6U, 0xc6844242U, 0xb8d06868U,
+    0xc3824141U, 0xb0299999U, 0x775a2d2dU, 0x111e0f0fU,
+    0xcb7bb0b0U, 0xfca85454U, 0xd66dbbbbU, 0x3a2c1616U,
+};
+static const uint32_t Te2[256] = {
+    0x63a5c663U, 0x7c84f87cU, 0x7799ee77U, 0x7b8df67bU,
+    0xf20dfff2U, 0x6bbdd66bU, 0x6fb1de6fU, 0xc55491c5U,
+    0x30506030U, 0x01030201U, 0x67a9ce67U, 0x2b7d562bU,
+    0xfe19e7feU, 0xd762b5d7U, 0xabe64dabU, 0x769aec76U,
+    0xca458fcaU, 0x829d1f82U, 0xc94089c9U, 0x7d87fa7dU,
+    0xfa15effaU, 0x59ebb259U, 0x47c98e47U, 0xf00bfbf0U,
+    0xadec41adU, 0xd467b3d4U, 0xa2fd5fa2U, 0xafea45afU,
+    0x9cbf239cU, 0xa4f753a4U, 0x7296e472U, 0xc05b9bc0U,
+    0xb7c275b7U, 0xfd1ce1fdU, 0x93ae3d93U, 0x266a4c26U,
+    0x365a6c36U, 0x3f417e3fU, 0xf702f5f7U, 0xcc4f83ccU,
+    0x345c6834U, 0xa5f451a5U, 0xe534d1e5U, 0xf108f9f1U,
+    0x7193e271U, 0xd873abd8U, 0x31536231U, 0x153f2a15U,
+    0x040c0804U, 0xc75295c7U, 0x23654623U, 0xc35e9dc3U,
+    0x18283018U, 0x96a13796U, 0x050f0a05U, 0x9ab52f9aU,
+    0x07090e07U, 0x12362412U, 0x809b1b80U, 0xe23ddfe2U,
+    0xeb26cdebU, 0x27694e27U, 0xb2cd7fb2U, 0x759fea75U,
+    0x091b1209U, 0x839e1d83U, 0x2c74582cU, 0x1a2e341aU,
+    0x1b2d361bU, 0x6eb2dc6eU, 0x5aeeb45aU, 0xa0fb5ba0U,
+    0x52f6a452U, 0x3b4d763bU, 0xd661b7d6U, 0xb3ce7db3U,
+    0x297b5229U, 0xe33edde3U, 0x2f715e2fU, 0x84971384U,
+    0x53f5a653U, 0xd168b9d1U, 0x00000000U, 0xed2cc1edU,
+    0x20604020U, 0xfc1fe3fcU, 0xb1c879b1U, 0x5bedb65bU,
+    0x6abed46aU, 0xcb468dcbU, 0xbed967beU, 0x394b7239U,
+    0x4ade944aU, 0x4cd4984cU, 0x58e8b058U, 0xcf4a85cfU,
+    0xd06bbbd0U, 0xef2ac5efU, 0xaae54faaU, 0xfb16edfbU,
+    0x43c58643U, 0x4dd79a4dU, 0x33556633U, 0x85941185U,
+    0x45cf8a45U, 0xf910e9f9U, 0x02060402U, 0x7f81fe7fU,
+    0x50f0a050U, 0x3c44783cU, 0x9fba259fU, 0xa8e34ba8U,
+    0x51f3a251U, 0xa3fe5da3U, 0x40c08040U, 0x8f8a058fU,
+    0x92ad3f92U, 0x9dbc219dU, 0x38487038U, 0xf504f1f5U,
+    0xbcdf63bcU, 0xb6c177b6U, 0xda75afdaU, 0x21634221U,
+    0x10302010U, 0xff1ae5ffU, 0xf30efdf3U, 0xd26dbfd2U,
+    0xcd4c81cdU, 0x0c14180cU, 0x13352613U, 0xec2fc3ecU,
+    0x5fe1be5fU, 0x97a23597U, 0x44cc8844U, 0x17392e17U,
+    0xc45793c4U, 0xa7f255a7U, 0x7e82fc7eU, 0x3d477a3dU,
+    0x64acc864U, 0x5de7ba5dU, 0x192b3219U, 0x7395e673U,
+    0x60a0c060U, 0x81981981U, 0x4fd19e4fU, 0xdc7fa3dcU,
+    0x22664422U, 0x2a7e542aU, 0x90ab3b90U, 0x88830b88U,
+    0x46ca8c46U, 0xee29c7eeU, 0xb8d36bb8U, 0x143c2814U,
+    0xde79a7deU, 0x5ee2bc5eU, 0x0b1d160bU, 0xdb76addbU,
+    0xe03bdbe0U, 0x32566432U, 0x3a4e743aU, 0x0a1e140aU,
+    0x49db9249U, 0x060a0c06U, 0x246c4824U, 0x5ce4b85cU,
+    0xc25d9fc2U, 0xd36ebdd3U, 0xacef43acU, 0x62a6c462U,
+    0x91a83991U, 0x95a43195U, 0xe437d3e4U, 0x798bf279U,
+    0xe732d5e7U, 0xc8438bc8U, 0x37596e37U, 0x6db7da6dU,
+    0x8d8c018dU, 0xd564b1d5U, 0x4ed29c4eU, 0xa9e049a9U,
+    0x6cb4d86cU, 0x56faac56U, 0xf407f3f4U, 0xea25cfeaU,
+    0x65afca65U, 0x7a8ef47aU, 0xaee947aeU, 0x08181008U,
+    0xbad56fbaU, 0x7888f078U, 0x256f4a25U, 0x2e725c2eU,
+    0x1c24381cU, 0xa6f157a6U, 0xb4c773b4U, 0xc65197c6U,
+    0xe823cbe8U, 0xdd7ca1ddU, 0x749ce874U, 0x1f213e1fU,
+    0x4bdd964bU, 0xbddc61bdU, 0x8b860d8bU, 0x8a850f8aU,
+    0x7090e070U, 0x3e427c3eU, 0xb5c471b5U, 0x66aacc66U,
+    0x48d89048U, 0x03050603U, 0xf601f7f6U, 0x0e121c0eU,
+    0x61a3c261U, 0x355f6a35U, 0x57f9ae57U, 0xb9d069b9U,
+    0x86911786U, 0xc15899c1U, 0x1d273a1dU, 0x9eb9279eU,
+    0xe138d9e1U, 0xf813ebf8U, 0x98b32b98U, 0x11332211U,
+    0x69bbd269U, 0xd970a9d9U, 0x8e89078eU, 0x94a73394U,
+    0x9bb62d9bU, 0x1e223c1eU, 0x87921587U, 0xe920c9e9U,
+    0xce4987ceU, 0x55ffaa55U, 0x28785028U, 0xdf7aa5dfU,
+    0x8c8f038cU, 0xa1f859a1U, 0x89800989U, 0x0d171a0dU,
+    0xbfda65bfU, 0xe631d7e6U, 0x42c68442U, 0x68b8d068U,
+    0x41c38241U, 0x99b02999U, 0x2d775a2dU, 0x0f111e0fU,
+    0xb0cb7bb0U, 0x54fca854U, 0xbbd66dbbU, 0x163a2c16U,
+};
+static const uint32_t Te3[256] = {
+    0x6363a5c6U, 0x7c7c84f8U, 0x777799eeU, 0x7b7b8df6U,
+    0xf2f20dffU, 0x6b6bbdd6U, 0x6f6fb1deU, 0xc5c55491U,
+    0x30305060U, 0x01010302U, 0x6767a9ceU, 0x2b2b7d56U,
+    0xfefe19e7U, 0xd7d762b5U, 0xababe64dU, 0x76769aecU,
+    0xcaca458fU, 0x82829d1fU, 0xc9c94089U, 0x7d7d87faU,
+    0xfafa15efU, 0x5959ebb2U, 0x4747c98eU, 0xf0f00bfbU,
+    0xadadec41U, 0xd4d467b3U, 0xa2a2fd5fU, 0xafafea45U,
+    0x9c9cbf23U, 0xa4a4f753U, 0x727296e4U, 0xc0c05b9bU,
+    0xb7b7c275U, 0xfdfd1ce1U, 0x9393ae3dU, 0x26266a4cU,
+    0x36365a6cU, 0x3f3f417eU, 0xf7f702f5U, 0xcccc4f83U,
+    0x34345c68U, 0xa5a5f451U, 0xe5e534d1U, 0xf1f108f9U,
+    0x717193e2U, 0xd8d873abU, 0x31315362U, 0x15153f2aU,
+    0x04040c08U, 0xc7c75295U, 0x23236546U, 0xc3c35e9dU,
+    0x18182830U, 0x9696a137U, 0x05050f0aU, 0x9a9ab52fU,
+    0x0707090eU, 0x12123624U, 0x80809b1bU, 0xe2e23ddfU,
+    0xebeb26cdU, 0x2727694eU, 0xb2b2cd7fU, 0x75759feaU,
+    0x09091b12U, 0x83839e1dU, 0x2c2c7458U, 0x1a1a2e34U,
+    0x1b1b2d36U, 0x6e6eb2dcU, 0x5a5aeeb4U, 0xa0a0fb5bU,
+    0x5252f6a4U, 0x3b3b4d76U, 0xd6d661b7U, 0xb3b3ce7dU,
+    0x29297b52U, 0xe3e33eddU, 0x2f2f715eU, 0x84849713U,
+    0x5353f5a6U, 0xd1d168b9U, 0x00000000U, 0xeded2cc1U,
+    0x20206040U, 0xfcfc1fe3U, 0xb1b1c879U, 0x5b5bedb6U,
+    0x6a6abed4U, 0xcbcb468dU, 0xbebed967U, 0x39394b72U,
+    0x4a4ade94U, 0x4c4cd498U, 0x5858e8b0U, 0xcfcf4a85U,
+    0xd0d06bbbU, 0xefef2ac5U, 0xaaaae54fU, 0xfbfb16edU,
+    0x4343c586U, 0x4d4dd79aU, 0x33335566U, 0x85859411U,
+    0x4545cf8aU, 0xf9f910e9U, 0x02020604U, 0x7f7f81feU,
+    0x5050f0a0U, 0x3c3c4478U, 0x9f9fba25U, 0xa8a8e34bU,
+    0x5151f3a2U, 0xa3a3fe5dU, 0x4040c080U, 0x8f8f8a05U,
+    0x9292ad3fU, 0x9d9dbc21U, 0x38384870U, 0xf5f504f1U,
+    0xbcbcdf63U, 0xb6b6c177U, 0xdada75afU, 0x21216342U,
+    0x10103020U, 0xffff1ae5U, 0xf3f30efdU, 0xd2d26dbfU,
+    0xcdcd4c81U, 0x0c0c1418U, 0x13133526U, 0xecec2fc3U,
+    0x5f5fe1beU, 0x9797a235U, 0x4444cc88U, 0x1717392eU,
+    0xc4c45793U, 0xa7a7f255U, 0x7e7e82fcU, 0x3d3d477aU,
+    0x6464acc8U, 0x5d5de7baU, 0x19192b32U, 0x737395e6U,
+    0x6060a0c0U, 0x81819819U, 0x4f4fd19eU, 0xdcdc7fa3U,
+    0x22226644U, 0x2a2a7e54U, 0x9090ab3bU, 0x8888830bU,
+    0x4646ca8cU, 0xeeee29c7U, 0xb8b8d36bU, 0x14143c28U,
+    0xdede79a7U, 0x5e5ee2bcU, 0x0b0b1d16U, 0xdbdb76adU,
+    0xe0e03bdbU, 0x32325664U, 0x3a3a4e74U, 0x0a0a1e14U,
+    0x4949db92U, 0x06060a0cU, 0x24246c48U, 0x5c5ce4b8U,
+    0xc2c25d9fU, 0xd3d36ebdU, 0xacacef43U, 0x6262a6c4U,
+    0x9191a839U, 0x9595a431U, 0xe4e437d3U, 0x79798bf2U,
+    0xe7e732d5U, 0xc8c8438bU, 0x3737596eU, 0x6d6db7daU,
+    0x8d8d8c01U, 0xd5d564b1U, 0x4e4ed29cU, 0xa9a9e049U,
+    0x6c6cb4d8U, 0x5656faacU, 0xf4f407f3U, 0xeaea25cfU,
+    0x6565afcaU, 0x7a7a8ef4U, 0xaeaee947U, 0x08081810U,
+    0xbabad56fU, 0x787888f0U, 0x25256f4aU, 0x2e2e725cU,
+    0x1c1c2438U, 0xa6a6f157U, 0xb4b4c773U, 0xc6c65197U,
+    0xe8e823cbU, 0xdddd7ca1U, 0x74749ce8U, 0x1f1f213eU,
+    0x4b4bdd96U, 0xbdbddc61U, 0x8b8b860dU, 0x8a8a850fU,
+    0x707090e0U, 0x3e3e427cU, 0xb5b5c471U, 0x6666aaccU,
+    0x4848d890U, 0x03030506U, 0xf6f601f7U, 0x0e0e121cU,
+    0x6161a3c2U, 0x35355f6aU, 0x5757f9aeU, 0xb9b9d069U,
+    0x86869117U, 0xc1c15899U, 0x1d1d273aU, 0x9e9eb927U,
+    0xe1e138d9U, 0xf8f813ebU, 0x9898b32bU, 0x11113322U,
+    0x6969bbd2U, 0xd9d970a9U, 0x8e8e8907U, 0x9494a733U,
+    0x9b9bb62dU, 0x1e1e223cU, 0x87879215U, 0xe9e920c9U,
+    0xcece4987U, 0x5555ffaaU, 0x28287850U, 0xdfdf7aa5U,
+    0x8c8c8f03U, 0xa1a1f859U, 0x89898009U, 0x0d0d171aU,
+    0xbfbfda65U, 0xe6e631d7U, 0x4242c684U, 0x6868b8d0U,
+    0x4141c382U, 0x9999b029U, 0x2d2d775aU, 0x0f0f111eU,
+    0xb0b0cb7bU, 0x5454fca8U, 0xbbbbd66dU, 0x16163a2cU,
+};
+
+static const uint32_t Td0[256] = {
+    0x51f4a750U, 0x7e416553U, 0x1a17a4c3U, 0x3a275e96U,
+    0x3bab6bcbU, 0x1f9d45f1U, 0xacfa58abU, 0x4be30393U,
+    0x2030fa55U, 0xad766df6U, 0x88cc7691U, 0xf5024c25U,
+    0x4fe5d7fcU, 0xc52acbd7U, 0x26354480U, 0xb562a38fU,
+    0xdeb15a49U, 0x25ba1b67U, 0x45ea0e98U, 0x5dfec0e1U,
+    0xc32f7502U, 0x814cf012U, 0x8d4697a3U, 0x6bd3f9c6U,
+    0x038f5fe7U, 0x15929c95U, 0xbf6d7aebU, 0x955259daU,
+    0xd4be832dU, 0x587421d3U, 0x49e06929U, 0x8ec9c844U,
+    0x75c2896aU, 0xf48e7978U, 0x99583e6bU, 0x27b971ddU,
+    0xbee14fb6U, 0xf088ad17U, 0xc920ac66U, 0x7dce3ab4U,
+    0x63df4a18U, 0xe51a3182U, 0x97513360U, 0x62537f45U,
+    0xb16477e0U, 0xbb6bae84U, 0xfe81a01cU, 0xf9082b94U,
+    0x70486858U, 0x8f45fd19U, 0x94de6c87U, 0x527bf8b7U,
+    0xab73d323U, 0x724b02e2U, 0xe31f8f57U, 0x6655ab2aU,
+    0xb2eb2807U, 0x2fb5c203U, 0x86c57b9aU, 0xd33708a5U,
+    0x302887f2U, 0x23bfa5b2U, 0x02036abaU, 0xed16825cU,
+    0x8acf1c2bU, 0xa779b492U, 0xf307f2f0U, 0x4e69e2a1U,
+    0x65daf4cdU, 0x0605bed5U, 0xd134621fU, 0xc4a6fe8aU,
+    0x342e539dU, 0xa2f355a0U, 0x058ae132U, 0xa4f6eb75U,
+    0x0b83ec39U, 0x4060efaaU, 0x5e719f06U, 0xbd6e1051U,
+    0x3e218af9U, 0x96dd063dU, 0xdd3e05aeU, 0x4de6bd46U,
+    0x91548db5U, 0x71c45d05U, 0x0406d46fU, 0x605015ffU,
+    0x1998fb24U, 0xd6bde997U, 0x894043ccU, 0x67d99e77U,
+    0xb0e842bdU, 0x07898b88U, 0xe7195b38U, 0x79c8eedbU,
+    0xa17c0a47U, 0x7c420fe9U, 0xf8841ec9U, 0x00000000U,
+    0x09808683U, 0x322bed48U, 0x1e1170acU, 0x6c5a724eU,
+    0xfd0efffbU, 0x0f853856U, 0x3daed51eU, 0x362d3927U,
+    0x0a0fd964U, 0x685ca621U, 0x9b5b54d1U, 0x24362e3aU,
+    0x0c0a67b1U, 0x9357e70fU, 0xb4ee96d2U, 0x1b9b919eU,
+    0x80c0c54fU, 0x61dc20a2U, 0x5a774b69U, 0x1c121a16U,
+    0xe293ba0aU, 0xc0a02ae5U, 0x3c22e043U, 0x121b171dU,
+    0x0e090d0bU, 0xf28bc7adU, 0x2db6a8b9U, 0x141ea9c8U,
+    0x57f11985U, 0xaf75074cU, 0xee99ddbbU, 0xa37f60fdU,
+    0xf701269fU, 0x5c72f5bcU, 0x44663bc5U, 0x5bfb7e34U,
+    0x8b432976U, 0xcb23c6dcU, 0xb6edfc68U, 0xb8e4f163U,
+    0xd731dccaU, 0x42638510U, 0x13972240U, 0x84c61120U,
+    0x854a247dU, 0xd2bb3df8U, 0xaef93211U, 0xc729a16dU,
+    0x1d9e2f4bU, 0xdcb230f3U, 0x0d8652ecU, 0x77c1e3d0U,
+    0x2bb3166cU, 0xa970b999U, 0x119448faU, 0x47e96422U,
+    0xa8fc8cc4U, 0xa0f03f1aU, 0x567d2cd8U, 0x223390efU,
+    0x87494ec7U, 0xd938d1c1U, 0x8ccaa2feU, 0x98d40b36U,
+    0xa6f581cfU, 0xa57ade28U, 0xdab78e26U, 0x3fadbfa4U,
+    0x2c3a9de4U, 0x5078920dU, 0x6a5fcc9bU, 0x547e4662U,
+    0xf68d13c2U, 0x90d8b8e8U, 0x2e39f75eU, 0x82c3aff5U,
+    0x9f5d80beU, 0x69d0937cU, 0x6fd52da9U, 0xcf2512b3U,
+    0xc8ac993bU, 0x10187da7U, 0xe89c636eU, 0xdb3bbb7bU,
+    0xcd267809U, 0x6e5918f4U, 0xec9ab701U, 0x834f9aa8U,
+    0xe6956e65U, 0xaaffe67eU, 0x21bccf08U, 0xef15e8e6U,
+    0xbae79bd9U, 0x4a6f36ceU, 0xea9f09d4U, 0x29b07cd6U,
+    0x31a4b2afU, 0x2a3f2331U, 0xc6a59430U, 0x35a266c0U,
+    0x744ebc37U, 0xfc82caa6U, 0xe090d0b0U, 0x33a7d815U,
+    0xf104984aU, 0x41ecdaf7U, 0x7fcd500eU, 0x1791f62fU,
+    0x764dd68dU, 0x43efb04dU, 0xccaa4d54U, 0xe49604dfU,
+    0x9ed1b5e3U, 0x4c6a881bU, 0xc12c1fb8U, 0x4665517fU,
+    0x9d5eea04U, 0x018c355dU, 0xfa877473U, 0xfb0b412eU,
+    0xb3671d5aU, 0x92dbd252U, 0xe9105633U, 0x6dd64713U,
+    0x9ad7618cU, 0x37a10c7aU, 0x59f8148eU, 0xeb133c89U,
+    0xcea927eeU, 0xb761c935U, 0xe11ce5edU, 0x7a47b13cU,
+    0x9cd2df59U, 0x55f2733fU, 0x1814ce79U, 0x73c737bfU,
+    0x53f7cdeaU, 0x5ffdaa5bU, 0xdf3d6f14U, 0x7844db86U,
+    0xcaaff381U, 0xb968c43eU, 0x3824342cU, 0xc2a3405fU,
+    0x161dc372U, 0xbce2250cU, 0x283c498bU, 0xff0d9541U,
+    0x39a80171U, 0x080cb3deU, 0xd8b4e49cU, 0x6456c190U,
+    0x7bcb8461U, 0xd532b670U, 0x486c5c74U, 0xd0b85742U,
+};
+static const uint32_t Td1[256] = {
+    0x5051f4a7U, 0x537e4165U, 0xc31a17a4U, 0x963a275eU,
+    0xcb3bab6bU, 0xf11f9d45U, 0xabacfa58U, 0x934be303U,
+    0x552030faU, 0xf6ad766dU, 0x9188cc76U, 0x25f5024cU,
+    0xfc4fe5d7U, 0xd7c52acbU, 0x80263544U, 0x8fb562a3U,
+    0x49deb15aU, 0x6725ba1bU, 0x9845ea0eU, 0xe15dfec0U,
+    0x02c32f75U, 0x12814cf0U, 0xa38d4697U, 0xc66bd3f9U,
+    0xe7038f5fU, 0x9515929cU, 0xebbf6d7aU, 0xda955259U,
+    0x2dd4be83U, 0xd3587421U, 0x2949e069U, 0x448ec9c8U,
+    0x6a75c289U, 0x78f48e79U, 0x6b99583eU, 0xdd27b971U,
+    0xb6bee14fU, 0x17f088adU, 0x66c920acU, 0xb47dce3aU,
+    0x1863df4aU, 0x82e51a31U, 0x60975133U, 0x4562537fU,
+    0xe0b16477U, 0x84bb6baeU, 0x1cfe81a0U, 0x94f9082bU,
+    0x58704868U, 0x198f45fdU, 0x8794de6cU, 0xb7527bf8U,
+    0x23ab73d3U, 0xe2724b02U, 0x57e31f8fU, 0x2a6655abU,
+    0x07b2eb28U, 0x032fb5c2U, 0x9a86c57bU, 0xa5d33708U,
+    0xf2302887U, 0xb223bfa5U, 0xba02036aU, 0x5ced1682U,
+    0x2b8acf1cU, 0x92a779b4U, 0xf0f307f2U, 0xa14e69e2U,
+    0xcd65daf4U, 0xd50605beU, 0x1fd13462U, 0x8ac4a6feU,
+    0x9d342e53U, 0xa0a2f355U, 0x32058ae1U, 0x75a4f6ebU,
+    0x390b83ecU, 0xaa4060efU, 0x065e719fU, 0x51bd6e10U,
+    0xf93e218aU, 0x3d96dd06U, 0xaedd3e05U, 0x464de6bdU,
+    0xb591548dU, 0x0571c45dU, 0x6f0406d4U, 0xff605015U,
+    0x241998fbU, 0x97d6bde9U, 0xcc894043U, 0x7767d99eU,
+    0xbdb0e842U, 0x8807898bU, 0x38e7195bU, 0xdb79c8eeU,
+    0x47a17c0aU, 0xe97c420fU, 0xc9f8841eU, 0x00000000U,
+    0x83098086U, 0x48322bedU, 0xac1e1170U, 0x4e6c5a72U,
+    0xfbfd0effU, 0x560f8538U, 0x1e3daed5U, 0x27362d39U,
+    0x640a0fd9U, 0x21685ca6U, 0xd19b5b54U, 0x3a24362eU,
+    0xb10c0a67U, 0x0f9357e7U, 0xd2b4ee96U, 0x9e1b9b91U,
+    0x4f80c0c5U, 0xa261dc20U, 0x695a774bU, 0x161c121aU,
+    0x0ae293baU, 0xe5c0a02aU, 0x433c22e0U, 0x1d121b17U,
+    0x0b0e090dU, 0xadf28bc7U, 0xb92db6a8U, 0xc8141ea9U,
+    0x8557f119U, 0x4caf7507U, 0xbbee99ddU, 0xfda37f60U,
+    0x9ff70126U, 0xbc5c72f5U, 0xc544663bU, 0x345bfb7eU,
+    0x768b4329U, 0xdccb23c6U, 0x68b6edfcU, 0x63b8e4f1U,
+    0xcad731dcU, 0x10426385U, 0x40139722U, 0x2084c611U,
+    0x7d854a24U, 0xf8d2bb3dU, 0x11aef932U, 0x6dc729a1U,
+    0x4b1d9e2fU, 0xf3dcb230U, 0xec0d8652U, 0xd077c1e3U,
+    0x6c2bb316U, 0x99a970b9U, 0xfa119448U, 0x2247e964U,
+    0xc4a8fc8cU, 0x1aa0f03fU, 0xd8567d2cU, 0xef223390U,
+    0xc787494eU, 0xc1d938d1U, 0xfe8ccaa2U, 0x3698d40bU,
+    0xcfa6f581U, 0x28a57adeU, 0x26dab78eU, 0xa43fadbfU,
+    0xe42c3a9dU, 0x0d507892U, 0x9b6a5fccU, 0x62547e46U,
+    0xc2f68d13U, 0xe890d8b8U, 0x5e2e39f7U, 0xf582c3afU,
+    0xbe9f5d80U, 0x7c69d093U, 0xa96fd52dU, 0xb3cf2512U,
+    0x3bc8ac99U, 0xa710187dU, 0x6ee89c63U, 0x7bdb3bbbU,
+    0x09cd2678U, 0xf46e5918U, 0x01ec9ab7U, 0xa8834f9aU,
+    0x65e6956eU, 0x7eaaffe6U, 0x0821bccfU, 0xe6ef15e8U,
+    0xd9bae79bU, 0xce4a6f36U, 0xd4ea9f09U, 0xd629b07cU,
+    0xaf31a4b2U, 0x312a3f23U, 0x30c6a594U, 0xc035a266U,
+    0x37744ebcU, 0xa6fc82caU, 0xb0e090d0U, 0x1533a7d8U,
+    0x4af10498U, 0xf741ecdaU, 0x0e7fcd50U, 0x2f1791f6U,
+    0x8d764dd6U, 0x4d43efb0U, 0x54ccaa4dU, 0xdfe49604U,
+    0xe39ed1b5U, 0x1b4c6a88U, 0xb8c12c1fU, 0x7f466551U,
+    0x049d5eeaU, 0x5d018c35U, 0x73fa8774U, 0x2efb0b41U,
+    0x5ab3671dU, 0x5292dbd2U, 0x33e91056U, 0x136dd647U,
+    0x8c9ad761U, 0x7a37a10cU, 0x8e59f814U, 0x89eb133cU,
+    0xeecea927U, 0x35b761c9U, 0xede11ce5U, 0x3c7a47b1U,
+    0x599cd2dfU, 0x3f55f273U, 0x791814ceU, 0xbf73c737U,
+    0xea53f7cdU, 0x5b5ffdaaU, 0x14df3d6fU, 0x867844dbU,
+    0x81caaff3U, 0x3eb968c4U, 0x2c382434U, 0x5fc2a340U,
+    0x72161dc3U, 0x0cbce225U, 0x8b283c49U, 0x41ff0d95U,
+    0x7139a801U, 0xde080cb3U, 0x9cd8b4e4U, 0x906456c1U,
+    0x617bcb84U, 0x70d532b6U, 0x74486c5cU, 0x42d0b857U,
+};
+static const uint32_t Td2[256] = {
+    0xa75051f4U, 0x65537e41U, 0xa4c31a17U, 0x5e963a27U,
+    0x6bcb3babU, 0x45f11f9dU, 0x58abacfaU, 0x03934be3U,
+    0xfa552030U, 0x6df6ad76U, 0x769188ccU, 0x4c25f502U,
+    0xd7fc4fe5U, 0xcbd7c52aU, 0x44802635U, 0xa38fb562U,
+    0x5a49deb1U, 0x1b6725baU, 0x0e9845eaU, 0xc0e15dfeU,
+    0x7502c32fU, 0xf012814cU, 0x97a38d46U, 0xf9c66bd3U,
+    0x5fe7038fU, 0x9c951592U, 0x7aebbf6dU, 0x59da9552U,
+    0x832dd4beU, 0x21d35874U, 0x692949e0U, 0xc8448ec9U,
+    0x896a75c2U, 0x7978f48eU, 0x3e6b9958U, 0x71dd27b9U,
+    0x4fb6bee1U, 0xad17f088U, 0xac66c920U, 0x3ab47dceU,
+    0x4a1863dfU, 0x3182e51aU, 0x33609751U, 0x7f456253U,
+    0x77e0b164U, 0xae84bb6bU, 0xa01cfe81U, 0x2b94f908U,
+    0x68587048U, 0xfd198f45U, 0x6c8794deU, 0xf8b7527bU,
+    0xd323ab73U, 0x02e2724bU, 0x8f57e31fU, 0xab2a6655U,
+    0x2807b2ebU, 0xc2032fb5U, 0x7b9a86c5U, 0x08a5d337U,
+    0x87f23028U, 0xa5b223bfU, 0x6aba0203U, 0x825ced16U,
+    0x1c2b8acfU, 0xb492a779U, 0xf2f0f307U, 0xe2a14e69U,
+    0xf4cd65daU, 0xbed50605U, 0x621fd134U, 0xfe8ac4a6U,
+    0x539d342eU, 0x55a0a2f3U, 0xe132058aU, 0xeb75a4f6U,
+    0xec390b83U, 0xefaa4060U, 0x9f065e71U, 0x1051bd6eU,
+    0x8af93e21U, 0x063d96ddU, 0x05aedd3eU, 0xbd464de6U,
+    0x8db59154U, 0x5d0571c4U, 0xd46f0406U, 0x15ff6050U,
+    0xfb241998U, 0xe997d6bdU, 0x43cc8940U, 0x9e7767d9U,
+    0x42bdb0e8U, 0x8b880789U, 0x5b38e719U, 0xeedb79c8U,
+    0x0a47a17cU, 0x0fe97c42U, 0x1ec9f884U, 0x00000000U,
+    0x86830980U, 0xed48322bU, 0x70ac1e11U, 0x724e6c5aU,
+    0xfffbfd0eU, 0x38560f85U, 0xd51e3daeU, 0x3927362dU,
+    0xd9640a0fU, 0xa621685cU, 0x54d19b5bU, 0x2e3a2436U,
+    0x67b10c0aU, 0xe70f9357U, 0x96d2b4eeU, 0x919e1b9bU,
+    0xc54f80c0U, 0x20a261dcU, 0x4b695a77U, 0x1a161c12U,
+    0xba0ae293U, 0x2ae5c0a0U, 0xe0433c22U, 0x171d121bU,
+    0x0d0b0e09U, 0xc7adf28bU, 0xa8b92db6U, 0xa9c8141eU,
+    0x198557f1U, 0x074caf75U, 0xddbbee99U, 0x60fda37fU,
+    0x269ff701U, 0xf5bc5c72U, 0x3bc54466U, 0x7e345bfbU,
+    0x29768b43U, 0xc6dccb23U, 0xfc68b6edU, 0xf163b8e4U,
+    0xdccad731U, 0x85104263U, 0x22401397U, 0x112084c6U,
+    0x247d854aU, 0x3df8d2bbU, 0x3211aef9U, 0xa16dc729U,
+    0x2f4b1d9eU, 0x30f3dcb2U, 0x52ec0d86U, 0xe3d077c1U,
+    0x166c2bb3U, 0xb999a970U, 0x48fa1194U, 0x642247e9U,
+    0x8cc4a8fcU, 0x3f1aa0f0U, 0x2cd8567dU, 0x90ef2233U,
+    0x4ec78749U, 0xd1c1d938U, 0xa2fe8ccaU, 0x0b3698d4U,
+    0x81cfa6f5U, 0xde28a57aU, 0x8e26dab7U, 0xbfa43fadU,
+    0x9de42c3aU, 0x920d5078U, 0xcc9b6a5fU, 0x4662547eU,
+    0x13c2f68dU, 0xb8e890d8U, 0xf75e2e39U, 0xaff582c3U,
+    0x80be9f5dU, 0x937c69d0U, 0x2da96fd5U, 0x12b3cf25U,
+    0x993bc8acU, 0x7da71018U, 0x636ee89cU, 0xbb7bdb3bU,
+    0x7809cd26U, 0x18f46e59U, 0xb701ec9aU, 0x9aa8834fU,
+    0x6e65e695U, 0xe67eaaffU, 0xcf0821bcU, 0xe8e6ef15U,
+    0x9bd9bae7U, 0x36ce4a6fU, 0x09d4ea9fU, 0x7cd629b0U,
+    0xb2af31a4U, 0x23312a3fU, 0x9430c6a5U, 0x66c035a2U,
+    0xbc37744eU, 0xcaa6fc82U, 0xd0b0e090U, 0xd81533a7U,
+    0x984af104U, 0xdaf741ecU, 0x500e7fcdU, 0xf62f1791U,
+    0xd68d764dU, 0xb04d43efU, 0x4d54ccaaU, 0x04dfe496U,
+    0xb5e39ed1U, 0x881b4c6aU, 0x1fb8c12cU, 0x517f4665U,
+    0xea049d5eU, 0x355d018cU, 0x7473fa87U, 0x412efb0bU,
+    0x1d5ab367U, 0xd25292dbU, 0x5633e910U, 0x47136dd6U,
+    0x618c9ad7U, 0x0c7a37a1U, 0x148e59f8U, 0x3c89eb13U,
+    0x27eecea9U, 0xc935b761U, 0xe5ede11cU, 0xb13c7a47U,
+    0xdf599cd2U, 0x733f55f2U, 0xce791814U, 0x37bf73c7U,
+    0xcdea53f7U, 0xaa5b5ffdU, 0x6f14df3dU, 0xdb867844U,
+    0xf381caafU, 0xc43eb968U, 0x342c3824U, 0x405fc2a3U,
+    0xc372161dU, 0x250cbce2U, 0x498b283cU, 0x9541ff0dU,
+    0x017139a8U, 0xb3de080cU, 0xe49cd8b4U, 0xc1906456U,
+    0x84617bcbU, 0xb670d532U, 0x5c74486cU, 0x5742d0b8U,
+};
+static const uint32_t Td3[256] = {
+    0xf4a75051U, 0x4165537eU, 0x17a4c31aU, 0x275e963aU,
+    0xab6bcb3bU, 0x9d45f11fU, 0xfa58abacU, 0xe303934bU,
+    0x30fa5520U, 0x766df6adU, 0xcc769188U, 0x024c25f5U,
+    0xe5d7fc4fU, 0x2acbd7c5U, 0x35448026U, 0x62a38fb5U,
+    0xb15a49deU, 0xba1b6725U, 0xea0e9845U, 0xfec0e15dU,
+    0x2f7502c3U, 0x4cf01281U, 0x4697a38dU, 0xd3f9c66bU,
+    0x8f5fe703U, 0x929c9515U, 0x6d7aebbfU, 0x5259da95U,
+    0xbe832dd4U, 0x7421d358U, 0xe0692949U, 0xc9c8448eU,
+    0xc2896a75U, 0x8e7978f4U, 0x583e6b99U, 0xb971dd27U,
+    0xe14fb6beU, 0x88ad17f0U, 0x20ac66c9U, 0xce3ab47dU,
+    0xdf4a1863U, 0x1a3182e5U, 0x51336097U, 0x537f4562U,
+    0x6477e0b1U, 0x6bae84bbU, 0x81a01cfeU, 0x082b94f9U,
+    0x48685870U, 0x45fd198fU, 0xde6c8794U, 0x7bf8b752U,
+    0x73d323abU, 0x4b02e272U, 0x1f8f57e3U, 0x55ab2a66U,
+    0xeb2807b2U, 0xb5c2032fU, 0xc57b9a86U, 0x3708a5d3U,
+    0x2887f230U, 0xbfa5b223U, 0x036aba02U, 0x16825cedU,
+    0xcf1c2b8aU, 0x79b492a7U, 0x07f2f0f3U, 0x69e2a14eU,
+    0xdaf4cd65U, 0x05bed506U, 0x34621fd1U, 0xa6fe8ac4U,
+    0x2e539d34U, 0xf355a0a2U, 0x8ae13205U, 0xf6eb75a4U,
+    0x83ec390bU, 0x60efaa40U, 0x719f065eU, 0x6e1051bdU,
+    0x218af93eU, 0xdd063d96U, 0x3e05aeddU, 0xe6bd464dU,
+    0x548db591U, 0xc45d0571U, 0x06d46f04U, 0x5015ff60U,
+    0x98fb2419U, 0xbde997d6U, 0x4043cc89U, 0xd99e7767U,
+    0xe842bdb0U, 0x898b8807U, 0x195b38e7U, 0xc8eedb79U,
+    0x7c0a47a1U, 0x420fe97cU, 0x841ec9f8U, 0x00000000U,
+    0x80868309U, 0x2bed4832U, 0x1170ac1eU, 0x5a724e6cU,
+    0x0efffbfdU, 0x8538560fU, 0xaed51e3dU, 0x2d392736U,
+    0x0fd9640aU, 0x5ca62168U, 0x5b54d19bU, 0x362e3a24U,
+    0x0a67b10cU, 0x57e70f93U, 0xee96d2b4U, 0x9b919e1bU,
+    0xc0c54f80U, 0xdc20a261U, 0x774b695aU, 0x121a161cU,
+    0x93ba0ae2U, 0xa02ae5c0U, 0x22e0433cU, 0x1b171d12U,
+    0x090d0b0eU, 0x8bc7adf2U, 0xb6a8b92dU, 0x1ea9c814U,
+    0xf1198557U, 0x75074cafU, 0x99ddbbeeU, 0x7f60fda3U,
+    0x01269ff7U, 0x72f5bc5cU, 0x663bc544U, 0xfb7e345bU,
+    0x4329768bU, 0x23c6dccbU, 0xedfc68b6U, 0xe4f163b8U,
+    0x31dccad7U, 0x63851042U, 0x97224013U, 0xc6112084U,
+    0x4a247d85U, 0xbb3df8d2U, 0xf93211aeU, 0x29a16dc7U,
+    0x9e2f4b1dU, 0xb230f3dcU, 0x8652ec0dU, 0xc1e3d077U,
+    0xb3166c2bU, 0x70b999a9U, 0x9448fa11U, 0xe9642247U,
+    0xfc8cc4a8U, 0xf03f1aa0U, 0x7d2cd856U, 0x3390ef22U,
+    0x494ec787U, 0x38d1c1d9U, 0xcaa2fe8cU, 0xd40b3698U,
+    0xf581cfa6U, 0x7ade28a5U, 0xb78e26daU, 0xadbfa43fU,
+    0x3a9de42cU, 0x78920d50U, 0x5fcc9b6aU, 0x7e466254U,
+    0x8d13c2f6U, 0xd8b8e890U, 0x39f75e2eU, 0xc3aff582U,
+    0x5d80be9fU, 0xd0937c69U, 0xd52da96fU, 0x2512b3cfU,
+    0xac993bc8U, 0x187da710U, 0x9c636ee8U, 0x3bbb7bdbU,
+    0x267809cdU, 0x5918f46eU, 0x9ab701ecU, 0x4f9aa883U,
+    0x956e65e6U, 0xffe67eaaU, 0xbccf0821U, 0x15e8e6efU,
+    0xe79bd9baU, 0x6f36ce4aU, 0x9f09d4eaU, 0xb07cd629U,
+    0xa4b2af31U, 0x3f23312aU, 0xa59430c6U, 0xa266c035U,
+    0x4ebc3774U, 0x82caa6fcU, 0x90d0b0e0U, 0xa7d81533U,
+    0x04984af1U, 0xecdaf741U, 0xcd500e7fU, 0x91f62f17U,
+    0x4dd68d76U, 0xefb04d43U, 0xaa4d54ccU, 0x9604dfe4U,
+    0xd1b5e39eU, 0x6a881b4cU, 0x2c1fb8c1U, 0x65517f46U,
+    0x5eea049dU, 0x8c355d01U, 0x877473faU, 0x0b412efbU,
+    0x671d5ab3U, 0xdbd25292U, 0x105633e9U, 0xd647136dU,
+    0xd7618c9aU, 0xa10c7a37U, 0xf8148e59U, 0x133c89ebU,
+    0xa927eeceU, 0x61c935b7U, 0x1ce5ede1U, 0x47b13c7aU,
+    0xd2df599cU, 0xf2733f55U, 0x14ce7918U, 0xc737bf73U,
+    0xf7cdea53U, 0xfdaa5b5fU, 0x3d6f14dfU, 0x44db8678U,
+    0xaff381caU, 0x68c43eb9U, 0x24342c38U, 0xa3405fc2U,
+    0x1dc37216U, 0xe2250cbcU, 0x3c498b28U, 0x0d9541ffU,
+    0xa8017139U, 0x0cb3de08U, 0xb4e49cd8U, 0x56c19064U,
+    0xcb84617bU, 0x32b670d5U, 0x6c5c7448U, 0xb85742d0U,
+};
+static const uint8_t Td4[256] = {
+    0x52U, 0x09U, 0x6aU, 0xd5U, 0x30U, 0x36U, 0xa5U, 0x38U,
+    0xbfU, 0x40U, 0xa3U, 0x9eU, 0x81U, 0xf3U, 0xd7U, 0xfbU,
+    0x7cU, 0xe3U, 0x39U, 0x82U, 0x9bU, 0x2fU, 0xffU, 0x87U,
+    0x34U, 0x8eU, 0x43U, 0x44U, 0xc4U, 0xdeU, 0xe9U, 0xcbU,
+    0x54U, 0x7bU, 0x94U, 0x32U, 0xa6U, 0xc2U, 0x23U, 0x3dU,
+    0xeeU, 0x4cU, 0x95U, 0x0bU, 0x42U, 0xfaU, 0xc3U, 0x4eU,
+    0x08U, 0x2eU, 0xa1U, 0x66U, 0x28U, 0xd9U, 0x24U, 0xb2U,
+    0x76U, 0x5bU, 0xa2U, 0x49U, 0x6dU, 0x8bU, 0xd1U, 0x25U,
+    0x72U, 0xf8U, 0xf6U, 0x64U, 0x86U, 0x68U, 0x98U, 0x16U,
+    0xd4U, 0xa4U, 0x5cU, 0xccU, 0x5dU, 0x65U, 0xb6U, 0x92U,
+    0x6cU, 0x70U, 0x48U, 0x50U, 0xfdU, 0xedU, 0xb9U, 0xdaU,
+    0x5eU, 0x15U, 0x46U, 0x57U, 0xa7U, 0x8dU, 0x9dU, 0x84U,
+    0x90U, 0xd8U, 0xabU, 0x00U, 0x8cU, 0xbcU, 0xd3U, 0x0aU,
+    0xf7U, 0xe4U, 0x58U, 0x05U, 0xb8U, 0xb3U, 0x45U, 0x06U,
+    0xd0U, 0x2cU, 0x1eU, 0x8fU, 0xcaU, 0x3fU, 0x0fU, 0x02U,
+    0xc1U, 0xafU, 0xbdU, 0x03U, 0x01U, 0x13U, 0x8aU, 0x6bU,
+    0x3aU, 0x91U, 0x11U, 0x41U, 0x4fU, 0x67U, 0xdcU, 0xeaU,
+    0x97U, 0xf2U, 0xcfU, 0xceU, 0xf0U, 0xb4U, 0xe6U, 0x73U,
+    0x96U, 0xacU, 0x74U, 0x22U, 0xe7U, 0xadU, 0x35U, 0x85U,
+    0xe2U, 0xf9U, 0x37U, 0xe8U, 0x1cU, 0x75U, 0xdfU, 0x6eU,
+    0x47U, 0xf1U, 0x1aU, 0x71U, 0x1dU, 0x29U, 0xc5U, 0x89U,
+    0x6fU, 0xb7U, 0x62U, 0x0eU, 0xaaU, 0x18U, 0xbeU, 0x1bU,
+    0xfcU, 0x56U, 0x3eU, 0x4bU, 0xc6U, 0xd2U, 0x79U, 0x20U,
+    0x9aU, 0xdbU, 0xc0U, 0xfeU, 0x78U, 0xcdU, 0x5aU, 0xf4U,
+    0x1fU, 0xddU, 0xa8U, 0x33U, 0x88U, 0x07U, 0xc7U, 0x31U,
+    0xb1U, 0x12U, 0x10U, 0x59U, 0x27U, 0x80U, 0xecU, 0x5fU,
+    0x60U, 0x51U, 0x7fU, 0xa9U, 0x19U, 0xb5U, 0x4aU, 0x0dU,
+    0x2dU, 0xe5U, 0x7aU, 0x9fU, 0x93U, 0xc9U, 0x9cU, 0xefU,
+    0xa0U, 0xe0U, 0x3bU, 0x4dU, 0xaeU, 0x2aU, 0xf5U, 0xb0U,
+    0xc8U, 0xebU, 0xbbU, 0x3cU, 0x83U, 0x53U, 0x99U, 0x61U,
+    0x17U, 0x2bU, 0x04U, 0x7eU, 0xbaU, 0x77U, 0xd6U, 0x26U,
+    0xe1U, 0x69U, 0x14U, 0x63U, 0x55U, 0x21U, 0x0cU, 0x7dU,
+};
+static const uint32_t rcon[] = {
+	0x01000000, 0x02000000, 0x04000000, 0x08000000,
+	0x10000000, 0x20000000, 0x40000000, 0x80000000,
+	0x1B000000, 0x36000000, /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */
+};
+
+/**
+ * Expand the cipher key into the encryption key schedule.
+ */
+int AES_set_encrypt_key(const uint8_t *userKey, uint32_t bits,
+			AES_KEY *key) {
+
+	uint32_t *rk;
+   	int i = 0;
+	uint32_t temp;
+
+	if (!userKey || !key)
+		return -1;
+	if (bits != 128 && bits != 192 && bits != 256)
+		return -2;
+
+	rk = key->rd_key;
+
+	if (bits==128)
+		key->rounds = 10;
+	else if (bits==192)
+		key->rounds = 12;
+	else
+		key->rounds = 14;
+
+	rk[0] = GETU32(userKey     );
+	rk[1] = GETU32(userKey +  4);
+	rk[2] = GETU32(userKey +  8);
+	rk[3] = GETU32(userKey + 12);
+	if (bits == 128) {
+		while (1) {
+			temp  = rk[3];
+			rk[4] = rk[0] ^
+				(Te2[(temp >> 16) & 0xff] & 0xff000000) ^
+				(Te3[(temp >>  8) & 0xff] & 0x00ff0000) ^
+				(Te0[(temp      ) & 0xff] & 0x0000ff00) ^
+				(Te1[(temp >> 24)       ] & 0x000000ff) ^
+				rcon[i];
+			rk[5] = rk[1] ^ rk[4];
+			rk[6] = rk[2] ^ rk[5];
+			rk[7] = rk[3] ^ rk[6];
+			if (++i == 10) {
+				return 0;
+			}
+			rk += 4;
+		}
+	}
+	rk[4] = GETU32(userKey + 16);
+	rk[5] = GETU32(userKey + 20);
+	if (bits == 192) {
+		while (1) {
+			temp = rk[ 5];
+			rk[ 6] = rk[ 0] ^
+				(Te2[(temp >> 16) & 0xff] & 0xff000000) ^
+				(Te3[(temp >>  8) & 0xff] & 0x00ff0000) ^
+				(Te0[(temp      ) & 0xff] & 0x0000ff00) ^
+				(Te1[(temp >> 24)       ] & 0x000000ff) ^
+				rcon[i];
+			rk[ 7] = rk[ 1] ^ rk[ 6];
+			rk[ 8] = rk[ 2] ^ rk[ 7];
+			rk[ 9] = rk[ 3] ^ rk[ 8];
+			if (++i == 8) {
+				return 0;
+			}
+			rk[10] = rk[ 4] ^ rk[ 9];
+			rk[11] = rk[ 5] ^ rk[10];
+			rk += 6;
+		}
+	}
+	rk[6] = GETU32(userKey + 24);
+	rk[7] = GETU32(userKey + 28);
+	if (bits == 256) {
+		while (1) {
+			temp = rk[ 7];
+			rk[ 8] = rk[ 0] ^
+				(Te2[(temp >> 16) & 0xff] & 0xff000000) ^
+				(Te3[(temp >>  8) & 0xff] & 0x00ff0000) ^
+				(Te0[(temp      ) & 0xff] & 0x0000ff00) ^
+				(Te1[(temp >> 24)       ] & 0x000000ff) ^
+				rcon[i];
+			rk[ 9] = rk[ 1] ^ rk[ 8];
+			rk[10] = rk[ 2] ^ rk[ 9];
+			rk[11] = rk[ 3] ^ rk[10];
+			if (++i == 7) {
+				return 0;
+			}
+			temp = rk[11];
+			rk[12] = rk[ 4] ^
+				(Te2[(temp >> 24)       ] & 0xff000000) ^
+				(Te3[(temp >> 16) & 0xff] & 0x00ff0000) ^
+				(Te0[(temp >>  8) & 0xff] & 0x0000ff00) ^
+				(Te1[(temp      ) & 0xff] & 0x000000ff);
+			rk[13] = rk[ 5] ^ rk[12];
+			rk[14] = rk[ 6] ^ rk[13];
+			rk[15] = rk[ 7] ^ rk[14];
+
+			rk += 8;
+        	}
+	}
+	return 0;
+}
+
+/**
+ * Expand the cipher key into the decryption key schedule.
+ */
+int AES_set_decrypt_key(const uint8_t *userKey, const uint32_t bits,
+                        AES_KEY *key) {
+
+        uint32_t *rk;
+	int i, j, status;
+	uint32_t temp;
+
+	/* first, start with an encryption schedule */
+	status = AES_set_encrypt_key(userKey, bits, key);
+	if (status < 0)
+		return status;
+
+	rk = key->rd_key;
+
+	/* invert the order of the round keys: */
+	for (i = 0, j = 4*(key->rounds); i < j; i += 4, j -= 4) {
+		temp = rk[i    ]; rk[i    ] = rk[j    ]; rk[j    ] = temp;
+		temp = rk[i + 1]; rk[i + 1] = rk[j + 1]; rk[j + 1] = temp;
+		temp = rk[i + 2]; rk[i + 2] = rk[j + 2]; rk[j + 2] = temp;
+		temp = rk[i + 3]; rk[i + 3] = rk[j + 3]; rk[j + 3] = temp;
+	}
+	/* apply the inverse MixColumn transform to all round keys but the first and the last: */
+	for (i = 1; i < (key->rounds); i++) {
+		rk += 4;
+		rk[0] =
+			Td0[Te1[(rk[0] >> 24)       ] & 0xff] ^
+			Td1[Te1[(rk[0] >> 16) & 0xff] & 0xff] ^
+			Td2[Te1[(rk[0] >>  8) & 0xff] & 0xff] ^
+			Td3[Te1[(rk[0]      ) & 0xff] & 0xff];
+		rk[1] =
+			Td0[Te1[(rk[1] >> 24)       ] & 0xff] ^
+			Td1[Te1[(rk[1] >> 16) & 0xff] & 0xff] ^
+			Td2[Te1[(rk[1] >>  8) & 0xff] & 0xff] ^
+			Td3[Te1[(rk[1]      ) & 0xff] & 0xff];
+		rk[2] =
+			Td0[Te1[(rk[2] >> 24)       ] & 0xff] ^
+			Td1[Te1[(rk[2] >> 16) & 0xff] & 0xff] ^
+			Td2[Te1[(rk[2] >>  8) & 0xff] & 0xff] ^
+			Td3[Te1[(rk[2]      ) & 0xff] & 0xff];
+		rk[3] =
+			Td0[Te1[(rk[3] >> 24)       ] & 0xff] ^
+			Td1[Te1[(rk[3] >> 16) & 0xff] & 0xff] ^
+			Td2[Te1[(rk[3] >>  8) & 0xff] & 0xff] ^
+			Td3[Te1[(rk[3]      ) & 0xff] & 0xff];
+	}
+	return 0;
+}
+
+/*
+ * Encrypt a single block
+ * in and out can overlap
+ */
+void AES_encrypt(const uint8_t *in, uint8_t *out,
+		 const AES_KEY *key) {
+
+	const uint32_t *rk;
+	uint32_t s0, s1, s2, s3, t0, t1, t2, t3;
+#ifndef FULL_UNROLL
+	int r;
+#endif /* ?FULL_UNROLL */
+
+	assert(in && out && key);
+	rk = key->rd_key;
+
+	/*
+	 * map byte array block to cipher state
+	 * and add initial round key:
+	 */
+	s0 = GETU32(in     ) ^ rk[0];
+	s1 = GETU32(in +  4) ^ rk[1];
+	s2 = GETU32(in +  8) ^ rk[2];
+	s3 = GETU32(in + 12) ^ rk[3];
+#ifdef FULL_UNROLL
+	/* round 1: */
+   	t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[ 4];
+   	t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[ 5];
+   	t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[ 6];
+   	t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[ 7];
+   	/* round 2: */
+   	s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[ 8];
+   	s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[ 9];
+   	s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[10];
+   	s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[11];
+	/* round 3: */
+   	t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[12];
+   	t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[13];
+   	t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[14];
+   	t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[15];
+   	/* round 4: */
+   	s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[16];
+   	s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[17];
+   	s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[18];
+   	s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[19];
+	/* round 5: */
+   	t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[20];
+   	t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[21];
+   	t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[22];
+   	t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[23];
+   	/* round 6: */
+   	s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[24];
+   	s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[25];
+   	s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[26];
+   	s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[27];
+	/* round 7: */
+   	t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[28];
+   	t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[29];
+   	t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[30];
+   	t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[31];
+   	/* round 8: */
+   	s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[32];
+   	s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[33];
+   	s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[34];
+   	s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[35];
+	/* round 9: */
+   	t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[36];
+   	t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[37];
+   	t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[38];
+   	t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[39];
+    if (key->rounds > 10) {
+        /* round 10: */
+        s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[40];
+        s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[41];
+        s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[42];
+        s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[43];
+        /* round 11: */
+        t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[44];
+        t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[45];
+        t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[46];
+        t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[47];
+        if (key->rounds > 12) {
+            /* round 12: */
+            s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >>  8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[48];
+            s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >>  8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[49];
+            s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >>  8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[50];
+            s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >>  8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[51];
+            /* round 13: */
+            t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >>  8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[52];
+            t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >>  8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[53];
+            t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >>  8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[54];
+            t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >>  8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[55];
+        }
+    }
+    rk += key->rounds << 2;
+#else  /* !FULL_UNROLL */
+    /*
+     * Nr - 1 full rounds:
+     */
+    r = key->rounds >> 1;
+    for (;;) {
+        t0 =
+            Te0[(s0 >> 24)       ] ^
+            Te1[(s1 >> 16) & 0xff] ^
+            Te2[(s2 >>  8) & 0xff] ^
+            Te3[(s3      ) & 0xff] ^
+            rk[4];
+        t1 =
+            Te0[(s1 >> 24)       ] ^
+            Te1[(s2 >> 16) & 0xff] ^
+            Te2[(s3 >>  8) & 0xff] ^
+            Te3[(s0      ) & 0xff] ^
+            rk[5];
+        t2 =
+            Te0[(s2 >> 24)       ] ^
+            Te1[(s3 >> 16) & 0xff] ^
+            Te2[(s0 >>  8) & 0xff] ^
+            Te3[(s1      ) & 0xff] ^
+            rk[6];
+        t3 =
+            Te0[(s3 >> 24)       ] ^
+            Te1[(s0 >> 16) & 0xff] ^
+            Te2[(s1 >>  8) & 0xff] ^
+            Te3[(s2      ) & 0xff] ^
+            rk[7];
+
+        rk += 8;
+        if (--r == 0) {
+            break;
+        }
+
+        s0 =
+            Te0[(t0 >> 24)       ] ^
+            Te1[(t1 >> 16) & 0xff] ^
+            Te2[(t2 >>  8) & 0xff] ^
+            Te3[(t3      ) & 0xff] ^
+            rk[0];
+        s1 =
+            Te0[(t1 >> 24)       ] ^
+            Te1[(t2 >> 16) & 0xff] ^
+            Te2[(t3 >>  8) & 0xff] ^
+            Te3[(t0      ) & 0xff] ^
+            rk[1];
+        s2 =
+            Te0[(t2 >> 24)       ] ^
+            Te1[(t3 >> 16) & 0xff] ^
+            Te2[(t0 >>  8) & 0xff] ^
+            Te3[(t1      ) & 0xff] ^
+            rk[2];
+        s3 =
+            Te0[(t3 >> 24)       ] ^
+            Te1[(t0 >> 16) & 0xff] ^
+            Te2[(t1 >>  8) & 0xff] ^
+            Te3[(t2      ) & 0xff] ^
+            rk[3];
+    }
+#endif /* ?FULL_UNROLL */
+    /*
+	 * apply last round and
+	 * map cipher state to byte array block:
+	 */
+	s0 =
+		(Te2[(t0 >> 24)       ] & 0xff000000) ^
+		(Te3[(t1 >> 16) & 0xff] & 0x00ff0000) ^
+		(Te0[(t2 >>  8) & 0xff] & 0x0000ff00) ^
+		(Te1[(t3      ) & 0xff] & 0x000000ff) ^
+		rk[0];
+	PUTU32(out     , s0);
+	s1 =
+		(Te2[(t1 >> 24)       ] & 0xff000000) ^
+		(Te3[(t2 >> 16) & 0xff] & 0x00ff0000) ^
+		(Te0[(t3 >>  8) & 0xff] & 0x0000ff00) ^
+		(Te1[(t0      ) & 0xff] & 0x000000ff) ^
+		rk[1];
+	PUTU32(out +  4, s1);
+	s2 =
+		(Te2[(t2 >> 24)       ] & 0xff000000) ^
+		(Te3[(t3 >> 16) & 0xff] & 0x00ff0000) ^
+		(Te0[(t0 >>  8) & 0xff] & 0x0000ff00) ^
+		(Te1[(t1      ) & 0xff] & 0x000000ff) ^
+		rk[2];
+	PUTU32(out +  8, s2);
+	s3 =
+		(Te2[(t3 >> 24)       ] & 0xff000000) ^
+		(Te3[(t0 >> 16) & 0xff] & 0x00ff0000) ^
+		(Te0[(t1 >>  8) & 0xff] & 0x0000ff00) ^
+		(Te1[(t2      ) & 0xff] & 0x000000ff) ^
+		rk[3];
+	PUTU32(out + 12, s3);
+}
+
+/*
+ * Decrypt a single block
+ * in and out can overlap
+ */
+void AES_decrypt(const uint8_t *in, uint8_t *out,
+		 const AES_KEY *key) {
+
+	const uint32_t *rk;
+	uint32_t s0, s1, s2, s3, t0, t1, t2, t3;
+#ifndef FULL_UNROLL
+	int r;
+#endif /* ?FULL_UNROLL */
+
+	assert(in && out && key);
+	rk = key->rd_key;
+
+	/*
+	 * map byte array block to cipher state
+	 * and add initial round key:
+	 */
+    s0 = GETU32(in     ) ^ rk[0];
+    s1 = GETU32(in +  4) ^ rk[1];
+    s2 = GETU32(in +  8) ^ rk[2];
+    s3 = GETU32(in + 12) ^ rk[3];
+#ifdef FULL_UNROLL
+    /* round 1: */
+    t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[ 4];
+    t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[ 5];
+    t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[ 6];
+    t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[ 7];
+    /* round 2: */
+    s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >>  8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[ 8];
+    s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >>  8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[ 9];
+    s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >>  8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[10];
+    s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >>  8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[11];
+    /* round 3: */
+    t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[12];
+    t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[13];
+    t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[14];
+    t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[15];
+    /* round 4: */
+    s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >>  8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[16];
+    s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >>  8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[17];
+    s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >>  8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[18];
+    s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >>  8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[19];
+    /* round 5: */
+    t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[20];
+    t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[21];
+    t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[22];
+    t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[23];
+    /* round 6: */
+    s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >>  8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[24];
+    s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >>  8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[25];
+    s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >>  8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[26];
+    s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >>  8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[27];
+    /* round 7: */
+    t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[28];
+    t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[29];
+    t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[30];
+    t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[31];
+    /* round 8: */
+    s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >>  8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[32];
+    s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >>  8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[33];
+    s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >>  8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[34];
+    s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >>  8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[35];
+    /* round 9: */
+    t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[36];
+    t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[37];
+    t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[38];
+    t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[39];
+    if (key->rounds > 10) {
+        /* round 10: */
+        s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >>  8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[40];
+        s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >>  8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[41];
+        s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >>  8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[42];
+        s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >>  8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[43];
+        /* round 11: */
+        t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[44];
+        t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[45];
+        t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[46];
+        t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[47];
+        if (key->rounds > 12) {
+            /* round 12: */
+            s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >>  8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[48];
+            s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >>  8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[49];
+            s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >>  8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[50];
+            s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >>  8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[51];
+            /* round 13: */
+            t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[52];
+            t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[53];
+            t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[54];
+            t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[55];
+        }
+    }
+	rk += key->rounds << 2;
+#else  /* !FULL_UNROLL */
+    /*
+     * Nr - 1 full rounds:
+     */
+    r = key->rounds >> 1;
+    for (;;) {
+        t0 =
+            Td0[(s0 >> 24)       ] ^
+            Td1[(s3 >> 16) & 0xff] ^
+            Td2[(s2 >>  8) & 0xff] ^
+            Td3[(s1      ) & 0xff] ^
+            rk[4];
+        t1 =
+            Td0[(s1 >> 24)       ] ^
+            Td1[(s0 >> 16) & 0xff] ^
+            Td2[(s3 >>  8) & 0xff] ^
+            Td3[(s2      ) & 0xff] ^
+            rk[5];
+        t2 =
+            Td0[(s2 >> 24)       ] ^
+            Td1[(s1 >> 16) & 0xff] ^
+            Td2[(s0 >>  8) & 0xff] ^
+            Td3[(s3      ) & 0xff] ^
+            rk[6];
+        t3 =
+            Td0[(s3 >> 24)       ] ^
+            Td1[(s2 >> 16) & 0xff] ^
+            Td2[(s1 >>  8) & 0xff] ^
+            Td3[(s0      ) & 0xff] ^
+            rk[7];
+
+        rk += 8;
+        if (--r == 0) {
+            break;
+        }
+
+        s0 =
+            Td0[(t0 >> 24)       ] ^
+            Td1[(t3 >> 16) & 0xff] ^
+            Td2[(t2 >>  8) & 0xff] ^
+            Td3[(t1      ) & 0xff] ^
+            rk[0];
+        s1 =
+            Td0[(t1 >> 24)       ] ^
+            Td1[(t0 >> 16) & 0xff] ^
+            Td2[(t3 >>  8) & 0xff] ^
+            Td3[(t2      ) & 0xff] ^
+            rk[1];
+        s2 =
+            Td0[(t2 >> 24)       ] ^
+            Td1[(t1 >> 16) & 0xff] ^
+            Td2[(t0 >>  8) & 0xff] ^
+            Td3[(t3      ) & 0xff] ^
+            rk[2];
+        s3 =
+            Td0[(t3 >> 24)       ] ^
+            Td1[(t2 >> 16) & 0xff] ^
+            Td2[(t1 >>  8) & 0xff] ^
+            Td3[(t0      ) & 0xff] ^
+            rk[3];
+    }
+#endif /* ?FULL_UNROLL */
+    /*
+	 * apply last round and
+	 * map cipher state to byte array block:
+	 */
+   	s0 =
+   		(Td4[(t0 >> 24)       ] << 24) ^
+   		(Td4[(t3 >> 16) & 0xff] << 16) ^
+   		(Td4[(t2 >>  8) & 0xff] <<  8) ^
+   		(Td4[(t1      ) & 0xff])       ^
+   		rk[0];
+	PUTU32(out     , s0);
+   	s1 =
+   		(Td4[(t1 >> 24)       ] << 24) ^
+   		(Td4[(t0 >> 16) & 0xff] << 16) ^
+   		(Td4[(t3 >>  8) & 0xff] <<  8) ^
+   		(Td4[(t2      ) & 0xff])       ^
+   		rk[1];
+	PUTU32(out +  4, s1);
+   	s2 =
+   		(Td4[(t2 >> 24)       ] << 24) ^
+   		(Td4[(t1 >> 16) & 0xff] << 16) ^
+   		(Td4[(t0 >>  8) & 0xff] <<  8) ^
+   		(Td4[(t3      ) & 0xff])       ^
+   		rk[2];
+	PUTU32(out +  8, s2);
+   	s3 =
+   		(Td4[(t3 >> 24)       ] << 24) ^
+   		(Td4[(t2 >> 16) & 0xff] << 16) ^
+   		(Td4[(t1 >>  8) & 0xff] <<  8) ^
+   		(Td4[(t0      ) & 0xff])       ^
+   		rk[3];
+	PUTU32(out + 12, s3);
+}
+
diff --git a/libs/krypto/blockcipher-impl.h b/libs/krypto/blockcipher-impl.h
new file mode 100644
index 0000000..5d7d257
--- /dev/null
+++ b/libs/krypto/blockcipher-impl.h
@@ -0,0 +1,187 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_krypto_blockcipher_impl_
+#define _h_krypto_blockcipher_impl_
+
+/* 
+ * NOTE:  Currently this is being written to support cipher blocks of
+ * exactly 128 bits.  It will have to be amended if alternative block
+ * sizes are need for other cipher blocks
+ */
+
+#include <krypto/extern.h>
+#include <klib/defs.h>
+
+/*
+ * we need to know whether we are supporting vectors as 
+ * XMM type registers or as structs
+ */
+#include "ncbi-priv.h"
+
+
+#ifndef USE_VEC
+#error "USE_VEC most be defined true or false"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CIPHER_BLOCK_MAX (16)
+
+typedef char CipherBlock [CIPHER_BLOCK_MAX];
+
+#if USEVEC
+#include <v128.h>
+typedef v128_u8_t CipherVec;
+#else
+typedef struct CipherVec
+{
+    CipherBlock block;
+} CipherVec;
+#endif
+
+typedef struct KBlockCipher_vt KBlockCipher_vt;
+struct KBlockCipher_vt
+{
+    uint32_t maj;
+    uint32_t min;
+};
+
+typedef uint32_t BlockCipherType;
+enum block_cipher_type
+{
+    blockcipher_type_byte,
+    blockcipher_type_vec
+};
+
+
+typedef struct KBlockCipherByte_vt_v1 KBlockCipherByte_vt_v1;
+typedef union KBlockCipherByte KBlockCipherByte;
+
+#ifndef BLOCKCIPHER_BYTE_IMPL
+#define BLOCKCIPHER_BYTE_IMPL KBlockCipherByte
+#else
+typedef union KBlockCipherByte BLOCKCIPHER_BYTE_IMPL;
+#endif
+
+
+struct KBlockCipherByte_vt_v1
+{
+    KBlockCipher_vt version;
+
+    /* version == 1.x */
+
+    /* start minor version == 0 */
+    void        (* destroy         )(const BLOCKCIPHER_BYTE_IMPL * self);
+
+    uint32_t    (* block_size      )();
+
+    uint32_t    (* key_size        )();
+
+    rc_t        (* set_encrypt_key )(void * encrypt_key,
+                                     const char * user_key,
+                                     uint32_t user_key_bits);
+
+    rc_t        (* set_decrypt_key )(void * decrypt_key,
+                                     const char * user_key,
+                                     uint32_t user_key_bits);
+
+    void        (* encrypt         )(const CipherBlock in,
+                                     CipherBlock out,
+                                     const void * encrypt_key);
+
+    void        (* decrypt         )(const CipherBlock in,
+                                     CipherBlock out,
+                                     const void * encrypt_key);
+
+    /* end minor version == 0 */
+
+};
+
+union KBlockCipherByte
+{
+    KBlockCipher_vt        version;
+    KBlockCipherByte_vt_v1 v1;
+};
+
+
+typedef struct KBlockCipherVec_vt_v1 KBlockCipherVec_vt_v1;
+typedef union KBlockCipherVec KBlockCipherVec;
+
+#ifndef BLOCKCIPHER_VEC_IMPL
+#define BLOCKCIPHER_VEC_IMPL KBlockCipherVec
+#else
+typedef union KBlockCipherVec BLOCKCIPHER_VEC_IMPL;
+#endif
+
+
+struct KBlockCipherVec_vt_v1
+{
+    KBlockCipher_vt version;
+
+    /* version == 1.x */
+
+    /* start minor version == 0 */
+    void        (* destroy         )(const BLOCKCIPHER_VEC_IMPL * self);
+
+    uint32_t    (* block_size      )();
+
+    uint32_t    (* key_size        )();
+
+    rc_t        (* set_encrypt_key )(void * encrypt_key,
+                                     const char * user_key,
+                                     uint32_t user_key_size);
+
+    rc_t        (* set_decrypt_key )(void * decrypt_key,
+                                     const char * user_key,
+                                     uint32_t user_key_size);
+
+    CipherVec   (* encrypt         )(CipherVec block,
+                                     const void * encrypt_key);
+
+    CipherVec   (* decrypt         )(CipherVec block,
+                                     const void * decrypt_key);
+
+    /* end minor version == 0 */
+
+};
+
+union KBlockCipherVec
+{
+    KBlockCipher_vt       version;
+    KBlockCipherVec_vt_v1 v1;
+};
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#endif /* _h_krypto_blockcipher_impl_ */
+
diff --git a/libs/krypto/blockcipher-priv.h b/libs/krypto/blockcipher-priv.h
new file mode 100644
index 0000000..d812f23
--- /dev/null
+++ b/libs/krypto/blockcipher-priv.h
@@ -0,0 +1,90 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_krypto_blockcipher_priv_
+#define _h_krypto_blockcipher_priv_
+
+#include <krypto/extern.h>
+#include "cipher-impl.h"
+
+#include "blockcipher-impl.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ======================================================================
+ */
+/* typedef struct KBlockCipher KBlockCipher; */
+/*     typedef union KBlockCipher_vt KBlockCipher_vt; */
+
+/* ----------------------------------------------------------------------
+ * Init
+ *
+ *   Initialize the fields of this object.  The derived class will call this
+ *   during it's initialization.
+ *
+ * self      object to initialze
+ * vt        the virtual table of the derived class
+ * mgr       the cipher manager that is the construction factory block cipher
+ *           objects hold references to the manager while the manager merely
+ *           points at the block ciphers when all block ciphers are destroyed
+ *           the manager loses its references and it too can be destroyed if not
+ *           held elsewhere
+ * name      ASCIZ c-string the name of this class
+ */
+/* rc_t KBlockCipherInit (KBlockCipher * self, */
+/*                        const KBlockCipher_vt * vt, */
+/*                        const char * name); */
+
+
+typedef union KBlockCipher KBlockCipher;
+union KBlockCipher
+{
+    KBlockCipherByte byte;
+    KBlockCipherVec  vec;
+};
+
+
+rc_t KAESBlockCipherVecAesNiMake  (KBlockCipher ** vec_cipher);
+rc_t KAESBlockCipherVecRegMake    (KBlockCipher ** vec_cipher);
+rc_t KAESBlockCipherVecMake       (KBlockCipher ** vec_cipher);
+rc_t KAESBlockCipherByteMake      (KBlockCipher ** byte_cipher);
+
+rc_t KNullBlockCipherVecAesNiMake (KBlockCipher ** vec_cipher);
+rc_t KNullBlockCipherVecRegMake   (KBlockCipher ** vec_cipher);
+rc_t KNullBlockCipherVecMake      (KBlockCipher ** vec_cipher);
+rc_t KNullBlockCipherByteMake     (KBlockCipher ** byte_cipher);
+
+
+/* KRYPTO_EXTERN rc_t CC KBlockCipherAlloc (KBlockCipher ** obj, size_t z); */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* #ifndef _h_krypto_blockcipher_priv_ */
diff --git a/libs/krypto/blockcipher.c b/libs/krypto/blockcipher.c
new file mode 100644
index 0000000..22539eb
--- /dev/null
+++ b/libs/krypto/blockcipher.c
@@ -0,0 +1,3 @@
+#error "OBSOLETE do not use"
+
+
diff --git a/libs/krypto/cipher-byte.c b/libs/krypto/cipher-byte.c
new file mode 100644
index 0000000..feb05c2
--- /dev/null
+++ b/libs/krypto/cipher-byte.c
@@ -0,0 +1,522 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+/*
+ * KCipherByte is a byte oriented KCipher that can work on all processors
+ * and be built with all compilers
+ */
+#include <krypto/extern.h>
+#include <klib/defs.h>
+#include <krypto/cipher.h>
+
+#include "ncbi-priv.h"
+
+#include "blockcipher-impl.h"
+
+#include "cipher-impl.h"
+#include "cipher-priv.h"
+#include "blockcipher-priv.h"
+
+#include <klib/rc.h>
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+const char MEMBER(ClassName)[] = CLASS_STRING(CIPHER_IMPL);
+
+/* 
+ * KCipher with unaligned data.  Byte alignment.
+ */
+struct KCipherByte
+{
+    KCipher dad;
+
+    const KBlockCipherByte * block_cipher;
+};
+
+
+static rc_t MEMBER(Destroy) (KCipherByte * self)
+{
+    rc_t rc = 0;
+
+    if (self)
+    {
+        rc =  KCipherDestroy (&self->dad);
+        free (self);
+    }
+    return rc;
+}
+
+
+static rc_t MEMBER(SetEncryptKey) (KCipherByte * self,
+                                   const char * user_key,
+                                   uint32_t user_key_bits)
+{
+    rc_t rc = 0;
+
+    switch (self->block_cipher->version.maj)
+    {
+    default:
+        rc = RC (rcKrypto, rcCipher, rcUpdating, rcBlockCipher, rcBadVersion);
+        break;
+
+    case 1:
+        rc = self->block_cipher->v1.set_encrypt_key (self->dad.encrypt_key, user_key,
+                                                     user_key_bits);
+        break;
+    }
+    return rc;
+}
+
+
+static rc_t MEMBER(SetDecryptKey) (KCipherByte * self,
+                                   const char * user_key,
+                                   uint32_t user_key_bits)
+{
+    rc_t rc = 0;
+
+    switch (self->block_cipher->version.maj)
+    {
+    default:
+        rc = RC (rcKrypto, rcCipher, rcDestroying, rcBlockCipher, rcBadVersion);
+        break;
+
+    case 1:
+        rc = self->block_cipher->v1.set_decrypt_key (self->dad.decrypt_key, user_key,
+                                                     user_key_bits);
+        break;
+    }
+    return rc;
+}
+
+
+static rc_t MEMBER(SetEncryptIvec)(KCipherByte * self,
+                                   const void * ivec)
+{
+    assert (self);
+    assert (ivec);
+
+    memcpy (self->dad.encrypt_ivec, ivec, self->dad.block_size);
+
+    return 0;
+}
+
+
+static rc_t MEMBER(SetDecryptIvec)(KCipherByte * self,
+                                   const void * ivec)
+{
+    assert (self);
+    assert (ivec);
+
+    memcpy (self->dad.decrypt_ivec, ivec, self->dad.block_size);
+
+    return 0;
+}
+
+
+static rc_t MEMBER(SetEncryptCounterFunc)(KCipherByte * self,
+                                          cipher_ctr_func func)
+{
+    assert (self);
+    assert (func);
+
+    self->dad.encrypt_counter_func = func;
+
+    return 0;
+}
+
+
+static rc_t MEMBER(SetDecryptCounterFunc)(KCipherByte * self,
+                                          cipher_ctr_func func)
+{
+    assert (self);
+    assert (func);
+
+    self->dad.decrypt_counter_func = func;
+
+    return 0;
+}
+
+
+static rc_t MEMBER(Encrypt)(const KCipherByte * self,
+                            const void * in, void * out)
+{
+    rc_t rc = 0;
+
+    switch (self->block_cipher->version.maj)
+    {
+    default:
+        rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+        break;
+
+    case 1:
+        self->block_cipher->v1.encrypt (in, out, self->dad.encrypt_key);
+        break;
+    }
+    return rc;
+}
+
+
+static rc_t MEMBER(Decrypt)(const KCipherByte * self,
+                            const void * in, void * out)
+{
+    rc_t rc = 0;
+
+    switch (self->block_cipher->version.maj)
+    {
+    default:
+        rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+        break;
+
+    case 1:
+        self->block_cipher->v1.decrypt (in, out, self->dad.decrypt_key);
+        break;
+    }
+    return rc;
+}
+
+
+static rc_t MEMBER(EncryptEcb)(const KCipherByte * self,
+                               const void * in, void * out,
+                               uint32_t block_count)
+{
+    rc_t rc = 0;
+    const char * pin = in;
+    char * pout = out;
+
+    switch (self->block_cipher->version.maj)
+    {
+    default:
+        rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+        break;
+
+    case 1:
+        for (; block_count; --block_count)
+        {
+            self->block_cipher->v1.encrypt (pin, pout, self->dad.encrypt_key);
+
+            pin += self->dad.block_size;
+            pout += self->dad.block_size;
+        }
+        break;
+    }
+    return rc;
+}
+
+
+static rc_t MEMBER(DecryptEcb)(const KCipherByte * self,
+                               const void * in, void * out,
+                               uint32_t block_count)
+{
+    rc_t rc = 0;
+    const char * pin = in;
+    char * pout = out;
+
+    switch (self->block_cipher->version.maj)
+    {
+    default:
+        rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+        break;
+
+    case 1:
+        for (; block_count; --block_count)
+        {
+            self->block_cipher->v1.decrypt (pin, pout, self->dad.decrypt_key);
+
+            pin += self->dad.block_size;
+            pout += self->dad.block_size;
+        }
+        break;
+    }
+    return rc;
+}
+
+
+static rc_t MEMBER(EncryptCbc)(KCipherByte * self,
+                               const void * in, void * out,
+                               uint32_t block_count)
+{
+    rc_t rc = 0;
+    const char * pin = in;
+    char * pout = out;
+
+    switch (self->block_cipher->version.maj)
+    {
+    default:
+        rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+        break;
+
+    case 1:
+        if (block_count)
+        {
+            CipherBlock block;
+            unsigned ix;
+
+            memcpy (block, self->dad.encrypt_ivec, self->dad.block_size);
+
+            do
+            {
+                for (ix = 0; ix < self->dad.block_size; ++ix)
+                    block[ix] ^= pin[ix];
+
+                self->block_cipher->v1.encrypt (block, block,
+                                                self->dad.encrypt_key);
+
+                memcpy (pout, block, self->dad.block_size);
+
+                pin += self->dad.block_size;
+                pout += self->dad.block_size;
+
+            } while (--block_count);
+
+            memcpy (self->dad.encrypt_ivec, block, self->dad.block_size);
+        }
+        break;
+    }
+    return rc;
+}
+
+
+static rc_t MEMBER(DecryptCbc)(KCipherByte * self,
+                               const void * in, void * out,
+                               uint32_t block_count)
+{
+    rc_t rc = 0;
+    const char * pin = in;
+    char * pout = out;
+
+    switch (self->block_cipher->version.maj)
+    {
+    default:
+        rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+        break;
+
+    case 1:
+        if (block_count)
+        {
+            CipherBlock ivec;
+            CipherBlock block;
+            unsigned ix;
+
+            memcpy (ivec, self->dad.decrypt_ivec, self->dad.block_size);
+
+            do
+            {
+                self->block_cipher->v1.decrypt (pin, block,
+                                                self->dad.decrypt_key);
+
+                for (ix = 0; ix < self->dad.block_size; ++ix)
+                    pout[ix] = block[ix] ^ ivec[ix];
+
+                memcpy (ivec, pin, self->dad.block_size); 
+
+                pin += self->dad.block_size;
+                pout += self->dad.block_size;
+
+            } while (--block_count);
+
+            memcpy (self->dad.decrypt_ivec, ivec, self->dad.block_size);
+        }
+        break;
+    }
+    return rc;
+}
+
+
+static rc_t MEMBER(EncryptPcbc)(KCipherByte * self,
+                                const void * in, void * out,
+                                uint32_t block_count)
+{
+    return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+}
+
+
+static rc_t MEMBER(DecryptPcbc)(KCipherByte * self,
+                                const void * in, void * out,
+                                uint32_t block_count)
+{
+    return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+}
+
+
+static rc_t MEMBER(EncryptCfb)(KCipherByte * self,
+                               const void * in, void * out,
+                               uint32_t block_count)
+{
+    return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+}
+
+
+static rc_t MEMBER(DecryptCfb)(KCipherByte * self,
+                               const void * in, void * out,
+                               uint32_t block_count)
+{
+    return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+}
+
+
+static rc_t MEMBER(EncryptOfb)(KCipherByte * self,
+                               const void * in, void * out,
+                               uint32_t block_count)
+{
+    return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+}
+
+
+static rc_t MEMBER(DecryptOfb)(KCipherByte * self,
+                               const void * in, void * out,
+                               uint32_t block_count)
+{
+    return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+}
+
+
+static rc_t MEMBER(EncryptCtr)(KCipherByte * self,
+                               const void * in, void * out,
+                               uint32_t block_count)
+{
+    return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+}
+
+
+static rc_t MEMBER(DecryptCtr)(KCipherByte * self,
+                               const void * in, void * out,
+                               uint32_t block_count)
+{
+    return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+}
+
+
+static struct KCipher_vt_v1 MEMBER(_vt_v1) =
+{
+    { 1, 0 },
+
+    MEMBER(Destroy),
+    MEMBER(SetEncryptKey),
+    MEMBER(SetDecryptKey),
+    MEMBER(SetEncryptIvec),
+    MEMBER(SetDecryptIvec),
+    MEMBER(SetEncryptCounterFunc),
+    MEMBER(SetDecryptCounterFunc),
+    MEMBER(Encrypt),
+    MEMBER(Decrypt),
+    MEMBER(EncryptEcb),
+    MEMBER(DecryptEcb),
+    MEMBER(EncryptCbc),
+    MEMBER(DecryptCbc),
+    MEMBER(EncryptPcbc),
+    MEMBER(DecryptPcbc),
+    MEMBER(EncryptCfb),
+    MEMBER(DecryptCfb),
+    MEMBER(EncryptOfb),
+    MEMBER(DecryptOfb),
+    MEMBER(EncryptCtr),
+    MEMBER(DecryptCtr)
+};
+
+
+static __inline__ rc_t MEMBER(Alloc)(KCipherByte ** pobj,
+                                     const KBlockCipher * block_cipher)
+{
+    size_t block_size = block_cipher->byte.v1.block_size();
+    size_t key_size = block_cipher->byte.v1.key_size();
+    rc_t rc = 0;
+
+    *pobj = calloc (1, sizeof (**pobj) + 2 * key_size + 2 * block_size);
+    if (*pobj == NULL)
+        rc = RC (rcKrypto, rcCipher, rcConstructing, rcMemory, rcExhausted);
+
+    return rc;
+}
+
+
+static __inline__ rc_t MEMBER(Init)(KCipherByte * self,
+                                    const KBlockCipher * block_cipher)
+{
+    KCipher * dad = &self->dad;
+    size_t block_size = block_cipher->byte.v1.block_size();
+    size_t key_size = block_cipher->byte.v1.key_size();
+
+    KCipherInit (dad, block_size,
+                 (const KCipher_vt*)&MEMBER(_vt_v1),
+                 MEMBER(ClassName));
+
+    dad->encrypt_key = (uint8_t *)(self + 1);
+    dad->decrypt_key = ((uint8_t *)dad->encrypt_key) + key_size;
+    dad->encrypt_ivec = ((uint8_t *)dad->decrypt_key) + key_size;
+    dad->decrypt_ivec = ((uint8_t *)dad->encrypt_ivec) + block_size;
+
+    self->block_cipher = &block_cipher->byte;
+
+    return 0;
+}
+
+
+rc_t MEMBER(Make) (KCipher ** new_obj, kcipher_type type)
+{
+    rc_t rc;
+    KBlockCipher * block_cipher;
+
+    if (new_obj == NULL)
+        return RC (rcKrypto, rcCipher, rcConstructing, rcSelf, rcNull);
+
+    *new_obj = NULL;
+
+    switch (type)
+    {
+    default:
+        return RC (rcKrypto, rcCipher, rcConstructing, rcParam, rcInvalid);
+
+    case kcipher_null:
+        rc = NULLBCMEMBER(Make)(&block_cipher);
+        break;
+
+    case kcipher_AES:
+        rc = AESBCMEMBER(Make)(&block_cipher);
+        break;
+    }
+
+    if (rc == 0)
+    {
+        KCipherByte * obj;
+
+        rc = MEMBER(Alloc)(&obj, block_cipher);
+        if (rc == 0)
+        {
+            rc = MEMBER(Init)(obj, block_cipher);
+            if (rc == 0)
+                *new_obj = &obj->dad;
+            else
+                free (obj);
+        }
+    }
+    return rc;
+}
+
+/* EOF */
diff --git a/libs/krypto/cipher-impl.h b/libs/krypto/cipher-impl.h
new file mode 100644
index 0000000..fbccdb5
--- /dev/null
+++ b/libs/krypto/cipher-impl.h
@@ -0,0 +1,174 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_krypto_cipher_impl_
+#define _h_krypto_cipher_impl_
+
+#include <krypto/extern.h>
+#include <klib/defs.h>
+#include <klib/refcount.h>
+#include <krypto/cipher.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#ifndef CIPHER_IMPL
+#define CIPHER_IMPL KCipher
+#else
+struct CIPHER_IMPL;
+typedef struct CIPHER_IMPL CIPHER_IMPL;
+#endif
+
+typedef struct KCipher_vt KCipher_vt;
+struct KCipher_vt
+{
+    uint32_t maj;
+    uint32_t min;
+};
+
+
+typedef struct KCipher_vt_v1 KCipher_vt_v1;
+struct KCipher_vt_v1
+{
+    KCipher_vt version;
+
+    /* version == 1.x */
+    /* start minor version == 0 */
+    rc_t ( CC * destroy             )(CIPHER_IMPL * self);
+
+    rc_t ( CC * set_encrypt_key     )(CIPHER_IMPL * self,
+                                      const char * user_key,
+                                      uint32_t user_key_bits);
+
+    rc_t ( CC * set_decrypt_key     )(CIPHER_IMPL * self,
+                                      const char * user_key,
+                                      uint32_t user_key_bits);
+
+    rc_t ( CC * set_encrypt_ivec    )(CIPHER_IMPL * self,
+                                      const void * ivec);
+
+    rc_t ( CC * set_decrypt_ivec    )(CIPHER_IMPL * self,
+                                      const void * ivec);
+
+    rc_t ( CC * set_encrypt_ctr_func)(CIPHER_IMPL * self,
+                                      cipher_ctr_func enc_ctr_func);
+
+    rc_t ( CC * set_decrypt_ctr_func)(CIPHER_IMPL * self,
+                                      cipher_ctr_func enc_ctr_func);
+
+    /* single block encryption */
+    rc_t ( CC * encrypt             )(const CIPHER_IMPL * self,
+                                      const void * in,
+                                      void * out);
+    rc_t ( CC * decrypt             )(const CIPHER_IMPL * self,
+                                      const void * in,
+                                      void * out);
+
+    /* electronic code book */
+    rc_t ( CC * encrypt_ecb         )(const CIPHER_IMPL * self,
+                                      const void * in,
+                                      void * out,
+                                      uint32_t block_count);
+
+    rc_t ( CC * decrypt_ecb         )(const CIPHER_IMPL * self,
+                                      const void * in,
+                                      void * out,
+                                      uint32_t block_count);
+
+    /* cipher-block chaining */
+    rc_t ( CC * encrypt_cbc         )(CIPHER_IMPL * self,
+                                      const void * in,
+                                      void * out,
+                                      uint32_t block_count);
+    rc_t ( CC * decrypt_cbc         )(CIPHER_IMPL * self,
+                                      const void * in,
+                                      void * out,
+                                      uint32_t block_count);
+
+    /* propagating cipher-block chaining */
+    rc_t ( CC * encrypt_pcbc        )(CIPHER_IMPL * self, const void * in,
+                                      void * out, uint32_t block_count);
+    rc_t ( CC * decrypt_pcbc        )(CIPHER_IMPL * self, const void * in,
+                                      void * out, uint32_t block_count);
+
+    /* cipher feedback */
+    rc_t ( CC * encrypt_cfb         )(CIPHER_IMPL * self, const void * in,
+                                      void * out, uint32_t block_count);
+    rc_t ( CC * decrypt_cfb         )(CIPHER_IMPL * self, const void * in,
+                                      void * out, uint32_t block_count);
+
+    /* output feedback */
+    rc_t ( CC * encrypt_ofb         )(CIPHER_IMPL * self, const void * in,
+                                      void * out, uint32_t block_count);
+    rc_t ( CC * decrypt_ofb         )(CIPHER_IMPL * self, const void * in,
+                                      void * out, uint32_t block_count);
+
+    /* Counter */
+    rc_t ( CC * encrypt_ctr         )(CIPHER_IMPL * self, const void * in,
+                                      void * out, uint32_t block_count);
+    rc_t ( CC * decrypt_ctr         )(CIPHER_IMPL * self, const void * in,
+                                      void * out, uint32_t block_count);
+
+    /* end minor version == 0 */
+
+    /* ANY NEW ENTRIES MUST BE REFLECTED IN libs/krypto/cipher.c
+       BY BOTH THE CORRESPONDING MESSAGE DISPATCH FUNCTION(s) AND
+       VTABLE VALIDITY CHECKS IN CIPHERInit */
+};
+
+typedef union KCipher_ptr KCipher_ptr;
+union KCipher_ptr
+{
+    const KCipher_vt    * version;
+    const KCipher_vt_v1 * v1;
+};
+
+
+struct KCipher
+{
+    KRefcount refcount;
+    uint32_t block_size;
+    KCipher_ptr vt;
+    const char * name;
+    void * encrypt_key;
+    void * decrypt_key;
+    void * encrypt_ivec;
+    void * decrypt_ivec;
+    cipher_ctr_func encrypt_counter_func;
+    cipher_ctr_func decrypt_counter_func;
+};
+
+void KCipherInit (KCipher * self, uint32_t block_size,
+                  const KCipher_vt * vt, const char * name);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_krypto_cipher_impl_ */
diff --git a/libs/krypto/cipher-no-vec.c b/libs/krypto/cipher-no-vec.c
new file mode 100644
index 0000000..7e0eded
--- /dev/null
+++ b/libs/krypto/cipher-no-vec.c
@@ -0,0 +1,41 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#include <krypto/extern.h>
+#include <klib/defs.h>
+#include <klib/rc.h>
+
+#include <krypto/ciphermgr.h>
+#include "cipher-priv.h"
+#include "ncbi-priv.h"
+
+struct KCipher;
+
+rc_t CMEMBER(Make) (struct KCipher ** new_obj, kcipher_type type)
+{
+    return RC (rcKrypto, rcCipher, rcConstructing, rcFunction, rcUnsupported);
+}
+
+
+/* EOF */
diff --git a/libs/krypto/cipher-priv.h b/libs/krypto/cipher-priv.h
new file mode 100644
index 0000000..bcc39e5
--- /dev/null
+++ b/libs/krypto/cipher-priv.h
@@ -0,0 +1,79 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#ifndef _h_krypto_cipher_priv_
+#define _h_krypto_cipher_priv_
+
+#include <krypto/extern.h>
+#include <krypto/ciphermgr.h>
+#include <krypto/cipher.h>
+
+#include <klib/refcount.h>
+
+/*
+ * klib/rc.h ran out of room for new targets so we'll fake it for now
+ * with a now unused target that will unfortunately leave some
+ * confusing rc to english translations
+ */
+#define rcBlockCipher rcRng
+#define rcCipher      rcRng
+
+/*
+ * for use within krypto and krypto testing
+ */
+
+enum e_aes_type
+{
+    kcipher_AES_core,     /* Rijndael aes_core.c portable */
+    kcipher_AES_ncbi_sim, /* clean AES written for NCBI specifically from the  */
+    kcipher_AES_ncbi_vec, /* xmm vector version version */
+    kcipher_AES_ncbi_ni,  /* 64 bit AES-NI version */
+    kcipher_AES_count
+};
+
+rc_t KCipherMake         (struct KCipher ** new_cipher,
+                          kcipher_type type);
+rc_t KCipherVecAesNiMake (struct KCipher ** new_cipher,
+                          kcipher_type type);
+rc_t KCipherVecRegMake   (struct KCipher ** new_cipher,
+                          kcipher_type type);
+rc_t KCipherVecMake      (struct KCipher ** new_cipher,
+                          kcipher_type type);
+rc_t KCipherByteMake     (struct KCipher ** new_cipher,
+                          kcipher_type type);
+
+/*
+ * not for use outside krypto
+ */
+rc_t KCipherDestroy (struct KCipher * self);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* #ifndef _h_krypto_cipher_priv_ */
diff --git a/libs/krypto/cipher-vec.aes-ni.pic.o.list b/libs/krypto/cipher-vec.aes-ni.pic.o.list
new file mode 100644
index 0000000..6ca59f3
--- /dev/null
+++ b/libs/krypto/cipher-vec.aes-ni.pic.o.list
@@ -0,0 +1,10909 @@
+GAS LISTING /tmp/ccWvEaWW.s 			page 1
+
+
+   1              		.file	"cipher-vec.c"
+   2              		.section	.debug_abbrev,"", at progbits
+   3              	.Ldebug_abbrev0:
+   4              		.section	.debug_info,"", at progbits
+   5              	.Ldebug_info0:
+   6              		.section	.debug_line,"", at progbits
+   7              	.Ldebug_line0:
+   8 0000 D9030000 		.text
+   8      0200F201 
+   8      00000101 
+   8      FB0E0D00 
+   8      01010101 
+   9              	.Ltext0:
+  10              	.globl KCipherVecAesNiClassName
+  11              		.section	.rodata
+  12              		.type	KCipherVecAesNiClassName, @object
+  13              		.size	KCipherVecAesNiClassName, 12
+  14              	KCipherVecAesNiClassName:
+  15 0000 43495048 		.string	"CIPHER_IMPL"
+  15      45525F49 
+  15      4D504C00 
+  16              		.text
+  17              		.type	CipherVecIn, @function
+  18              	CipherVecIn:
+  19              	.LFB601:
+  20              		.file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c"
+   1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /*===========================================================================
+   2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+   3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *                            PUBLIC DOMAIN NOTICE
+   4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *               National Center for Biotechnology Information
+   5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+   6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  This software/database is a "United States Government Work" under the
+   7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  terms of the United States Copyright Act.  It was written as part of
+   8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  the author's official duties as a United States Government employee and
+   9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  thus cannot be copyrighted.  This software/database is freely available
+  10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  to the public for use. The National Library of Medicine and the U.S.
+  11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  Government have not placed any restriction on its use or reproduction.
+  12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+  13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  Although all reasonable efforts have been taken to ensure the accuracy
+  14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  and reliability of the software and data, the NLM and the U.S.
+  15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  Government do not and cannot warrant the performance or results that
+  16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  may be obtained by using this software or data. The NLM and the U.S.
+  17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  Government disclaim all warranties, express or implied, including
+  18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  warranties of performance, merchantability or fitness for any particular
+  19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  purpose.
+  20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+  21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  Please cite the author in any work or product based on this material.
+  22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+  23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * ===========================================================================
+  24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+  25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <krypto/extern.h>
+  27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/defs.h>
+  28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* CIPHER_IMPL and BLOCKCIPHER_IMPL are defined in this header */
+  30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "ncbi-priv.h"
+  31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* CIPHER_IMPL is used in this header */
+
GAS LISTING /tmp/ccWvEaWW.s 			page 2
+
+
+  32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "cipher-impl.h"
+  33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* BLOCKCIPHER_IMPL is used in this header */
+  34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "blockcipher-impl.h"
+  35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "aes-ncbi-priv.h"
+  37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "null-ncbi-priv.h"
+  38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "cipher-priv.h"
+  39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "blockcipher-priv.h"
+  40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <krypto/cipher.h>
+  42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <krypto/ciphermgr.h>
+  43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/defs.h>
+  45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/refcount.h>
+  46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/out.h>
+  47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/rc.h>
+  48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <sysalloc.h>
+  50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <stdlib.h>
+  52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <string.h>
+  53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <assert.h>
+  54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const char CMEMBER(ClassName)[] = CLASS_STRING(CIPHER_IMPL);
+  57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  58:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  59:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  60:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** struct CIPHER_IMPL
+  61:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+  62:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     KCipher dad;
+  63:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const KBlockCipherVec * block_cipher;
+  64:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** };
+  65:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  66:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** typedef union CipherVec_u
+  67:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+  68:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec   vec;
+  69:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherBlock block;
+  70:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** } CipherVec_u;
+  71:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  72:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /*
+  73:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Read a blocks worth of bytes into an AESState
+  74:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+  75:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ CipherVec CipherVecIn (const void * cvin)
+  76:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+  21              		.loc 1 76 0
+  22              		.cfi_startproc
+  23 0000 55       		pushq	%rbp
+  24              	.LCFI0:
+  25              		.cfi_def_cfa_offset 16
+  26 0001 4889E5   		movq	%rsp, %rbp
+  27              		.cfi_offset 6, -16
+  28              	.LCFI1:
+  29              		.cfi_def_cfa_register 6
+  30 0004 48897DF8 		movq	%rdi, -8(%rbp)
+  77:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if USE_VEC_REG
+  78:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     register CipherVec cv;
+
GAS LISTING /tmp/ccWvEaWW.s 			page 3
+
+
+  79:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  80:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     __asm__ (
+  31              		.loc 1 80 0
+  32 0008 488B45F8 		movq	-8(%rbp), %rax
+  33 000c 4889C7   		movq	%rax, %rdi
+  34              	#APP
+  35              	# 80 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c" 1
+  81              	        "movdqu (%[a]),%[s]" : [s] "=x" (cv) : [a] "D" (cvin)
+  36              		movdqu (%rdi),%xmm0
+  37              	# 0 "" 2
+  38              	#NO_APP
+  39 0013 660F7F45 		movdqa	%xmm0, -32(%rbp)
+  39      E0
+  82:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         );
+  83:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  84:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return cv;
+  40              		.loc 1 84 0
+  41 0018 660F6F45 		movdqa	-32(%rbp), %xmm0
+  41      E0
+  85:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+  86:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec_u u;
+  87:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  88:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     memmove (&u.block, cvin, sizeof (u));
+  89:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return u.vec;
+  90:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+  91:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+  42              		.loc 1 91 0
+  43 001d C9       		leave
+  44 001e C3       		ret
+  45              		.cfi_endproc
+  46              	.LFE601:
+  47              		.size	CipherVecIn, .-CipherVecIn
+  48              		.type	CipherVecOut, @function
+  49              	CipherVecOut:
+  50              	.LFB602:
+  92:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  93:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  94:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  95:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /*
+  96:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Write a block's worth of bytes out from an AESState
+  97:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+  98:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ void CipherVecOut (const CipherVec cv, void * cvout)
+  99:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+  51              		.loc 1 99 0
+  52              		.cfi_startproc
+  53 001f 55       		pushq	%rbp
+  54              	.LCFI2:
+  55              		.cfi_def_cfa_offset 16
+  56 0020 4889E5   		movq	%rsp, %rbp
+  57              		.cfi_offset 6, -16
+  58              	.LCFI3:
+  59              		.cfi_def_cfa_register 6
+  60 0023 660F7F45 		movdqa	%xmm0, -16(%rbp)
+  60      F0
+  61 0028 48897DE8 		movq	%rdi, -24(%rbp)
+ 100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if USE_VEC_REG
+ 101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     register CipherVec rcv = cv;
+
GAS LISTING /tmp/ccWvEaWW.s 			page 4
+
+
+  62              		.loc 1 101 0
+  63 002c 660F6F45 		movdqa	-16(%rbp), %xmm0
+  63      F0
+  64 0031 660F7F45 		movdqa	%xmm0, -48(%rbp)
+  64      D0
+ 102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     __asm__ (
+  65              		.loc 1 103 0
+  66 0036 488B45E8 		movq	-24(%rbp), %rax
+  67 003a 660F6F45 		movdqa	-48(%rbp), %xmm0
+  67      D0
+  68 003f 4889C7   		movq	%rax, %rdi
+  69              	#APP
+  70              	# 103 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c" 1
+ 104              	        "movdqu %[s],(%[a])" : : [s] "x" (rcv), [a] "D" (cvout)
+ 105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         );
+ 106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec lcv = cv;
+ 108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     memmove (cvout, &lcv, sizeof (lcv));
+ 109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+  71              		movdqu %xmm0,(%rdi)
+  72              	# 0 "" 2
+  73              		.loc 1 110 0
+  74              	#NO_APP
+  75 0046 C9       		leave
+  76 0047 C3       		ret
+  77              		.cfi_endproc
+  78              	.LFE602:
+  79              		.size	CipherVecOut, .-CipherVecOut
+  80              		.type	KCipherVecAesNiDestroy, @function
+  81              	KCipherVecAesNiDestroy:
+  82              	.LFB603:
+ 111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(Destroy) (CIPHER_IMPL * self)
+ 114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+  83              		.loc 1 114 0
+  84              		.cfi_startproc
+  85 0048 55       		pushq	%rbp
+  86              	.LCFI4:
+  87              		.cfi_def_cfa_offset 16
+  88 0049 4889E5   		movq	%rsp, %rbp
+  89              		.cfi_offset 6, -16
+  90              	.LCFI5:
+  91              		.cfi_def_cfa_register 6
+  92 004c 4883EC20 		subq	$32, %rsp
+  93 0050 48897DE8 		movq	%rdi, -24(%rbp)
+ 115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     rc_t rc = 0;
+  94              		.loc 1 115 0
+  95 0054 C745FC00 		movl	$0, -4(%rbp)
+  95      000000
+ 116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     if (self)
+  96              		.loc 1 117 0
+  97 005b 48837DE8 		cmpq	$0, -24(%rbp)
+  97      00
+
GAS LISTING /tmp/ccWvEaWW.s 			page 5
+
+
+  98 0060 741B     		je	.L6
+ 118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc =  KCipherDestroy (&self->dad);
+  99              		.loc 1 119 0
+ 100 0062 488B45E8 		movq	-24(%rbp), %rax
+ 101 0066 4889C7   		movq	%rax, %rdi
+ 102 0069 E8000000 		call	KCipherDestroy at PLT
+ 102      00
+ 103 006e 8945FC   		movl	%eax, -4(%rbp)
+ 120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         free (self);
+ 104              		.loc 1 120 0
+ 105 0071 488B45E8 		movq	-24(%rbp), %rax
+ 106 0075 4889C7   		movq	%rax, %rdi
+ 107 0078 E8000000 		call	free at PLT
+ 107      00
+ 108              	.L6:
+ 121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return rc;
+ 109              		.loc 1 122 0
+ 110 007d 8B45FC   		movl	-4(%rbp), %eax
+ 123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 111              		.loc 1 123 0
+ 112 0080 C9       		leave
+ 113 0081 C3       		ret
+ 114              		.cfi_endproc
+ 115              	.LFE603:
+ 116              		.size	KCipherVecAesNiDestroy, .-KCipherVecAesNiDestroy
+ 117              		.section	.rodata
+ 118 000c 00000000 		.align 8
+ 119              	.LC0:
+ 120 0010 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c"
+ 120      652F726F 
+ 120      6461726D 
+ 120      65722F73 
+ 120      72615F73 
+ 121              	.LC1:
+ 122 0048 73656C66 		.string	"self"
+ 122      00
+ 123              	.LC2:
+ 124 004d 75736572 		.string	"user_key"
+ 124      5F6B6579 
+ 124      00
+ 125              	.LC3:
+ 126 0056 75736572 		.string	"user_key_bits"
+ 126      5F6B6579 
+ 126      5F626974 
+ 126      7300
+ 127              		.text
+ 128              		.type	KCipherVecAesNiSetEncryptKey, @function
+ 129              	KCipherVecAesNiSetEncryptKey:
+ 130              	.LFB604:
+ 124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(SetEncryptKey)(CIPHER_IMPL * self,
+ 127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                   const char * user_key,
+ 128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                   uint32_t user_key_bits)
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+
GAS LISTING /tmp/ccWvEaWW.s 			page 6
+
+
+ 131              		.loc 1 129 0
+ 132              		.cfi_startproc
+ 133 0082 55       		pushq	%rbp
+ 134              	.LCFI6:
+ 135              		.cfi_def_cfa_offset 16
+ 136 0083 4889E5   		movq	%rsp, %rbp
+ 137              		.cfi_offset 6, -16
+ 138              	.LCFI7:
+ 139              		.cfi_def_cfa_register 6
+ 140 0086 53       		pushq	%rbx
+ 141 0087 4883EC38 		subq	$56, %rsp
+ 142 008b 48897DD8 		movq	%rdi, -40(%rbp)
+ 143 008f 488975D0 		movq	%rsi, -48(%rbp)
+ 144 0093 8955CC   		movl	%edx, -52(%rbp)
+ 130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     rc_t rc = 0;
+ 145              		.loc 1 130 0
+ 146 0096 C745EC00 		movl	$0, -20(%rbp)
+ 146      000000
+ 131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (self);
+ 147              		.loc 1 132 0
+ 148 009d 48837DD8 		cmpq	$0, -40(%rbp)
+ 148      00
+ 149 00a2 751F     		jne	.L9
+ 150              		.cfi_offset 3, -24
+ 151 00a4 488D0D00 		leaq	__PRETTY_FUNCTION__.7296(%rip), %rcx
+ 151      000000
+ 152 00ab BA840000 		movl	$132, %edx
+ 152      00
+ 153 00b0 488D3500 		leaq	.LC0(%rip), %rsi
+ 153      000000
+ 154 00b7 488D3D00 		leaq	.LC1(%rip), %rdi
+ 154      000000
+ 155 00be E8000000 		call	__assert_fail at PLT
+ 155      00
+ 156              	.L9:
+ 133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (user_key);
+ 157              		.loc 1 133 0
+ 158 00c3 48837DD0 		cmpq	$0, -48(%rbp)
+ 158      00
+ 159 00c8 751F     		jne	.L10
+ 160 00ca 488D0D00 		leaq	__PRETTY_FUNCTION__.7296(%rip), %rcx
+ 160      000000
+ 161 00d1 BA850000 		movl	$133, %edx
+ 161      00
+ 162 00d6 488D3500 		leaq	.LC0(%rip), %rsi
+ 162      000000
+ 163 00dd 488D3D00 		leaq	.LC2(%rip), %rdi
+ 163      000000
+ 164 00e4 E8000000 		call	__assert_fail at PLT
+ 164      00
+ 165              	.L10:
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (user_key_bits);
+ 166              		.loc 1 134 0
+ 167 00e9 837DCC00 		cmpl	$0, -52(%rbp)
+ 168 00ed 751F     		jne	.L11
+ 169 00ef 488D0D00 		leaq	__PRETTY_FUNCTION__.7296(%rip), %rcx
+
GAS LISTING /tmp/ccWvEaWW.s 			page 7
+
+
+ 169      000000
+ 170 00f6 BA860000 		movl	$134, %edx
+ 170      00
+ 171 00fb 488D3500 		leaq	.LC0(%rip), %rsi
+ 171      000000
+ 172 0102 488D3D00 		leaq	.LC3(%rip), %rdi
+ 172      000000
+ 173 0109 E8000000 		call	__assert_fail at PLT
+ 173      00
+ 174              	.L11:
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     switch (self->block_cipher->version.maj)
+ 175              		.loc 1 136 0
+ 176 010e 488B45D8 		movq	-40(%rbp), %rax
+ 177 0112 488B4048 		movq	72(%rax), %rax
+ 178 0116 8B00     		movl	(%rax), %eax
+ 179 0118 83F801   		cmpl	$1, %eax
+ 180 011b 7422     		je	.L13
+ 137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     default:
+ 139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = RC (rcKrypto, rcCipher, rcUpdating, rcBlockCipher, rcBadVersion);
+ 181              		.loc 1 139 0
+ 182 011d B98B0000 		movl	$139, %ecx
+ 182      00
+ 183 0122 488D1500 		leaq	__func__.7298(%rip), %rdx
+ 183      000000
+ 184 0129 488D3500 		leaq	.LC0(%rip), %rsi
+ 184      000000
+ 185 0130 BF088E04 		movl	$-2029744632, %edi
+ 185      87
+ 186 0135 E8000000 		call	SetRCFileFuncLine at PLT
+ 186      00
+ 187 013a 8945EC   		movl	%eax, -20(%rbp)
+ 140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 188              		.loc 1 140 0
+ 189 013d EB23     		jmp	.L14
+ 190              	.L13:
+ 141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     case 1:
+ 143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         self->block_cipher->v1.set_encrypt_key (self->dad.encrypt_key, user_key,
+ 191              		.loc 1 143 0
+ 192 013f 488B45D8 		movq	-40(%rbp), %rax
+ 193 0143 488B4048 		movq	72(%rax), %rax
+ 194 0147 488B5820 		movq	32(%rax), %rbx
+ 195 014b 488B45D8 		movq	-40(%rbp), %rax
+ 196 014f 488B4018 		movq	24(%rax), %rax
+ 197 0153 8B55CC   		movl	-52(%rbp), %edx
+ 198 0156 488B4DD0 		movq	-48(%rbp), %rcx
+ 199 015a 4889CE   		movq	%rcx, %rsi
+ 200 015d 4889C7   		movq	%rax, %rdi
+ 201 0160 FFD3     		call	*%rbx
+ 202              	.L14:
+ 144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                                 user_key_bits);
+ 145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return rc;
+ 203              		.loc 1 147 0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 8
+
+
+ 204 0162 8B45EC   		movl	-20(%rbp), %eax
+ 148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 205              		.loc 1 148 0
+ 206 0165 4883C438 		addq	$56, %rsp
+ 207 0169 5B       		popq	%rbx
+ 208 016a C9       		leave
+ 209 016b C3       		ret
+ 210              		.cfi_endproc
+ 211              	.LFE604:
+ 212              		.size	KCipherVecAesNiSetEncryptKey, .-KCipherVecAesNiSetEncryptKey
+ 213              		.type	KCipherVecAesNiSetDecryptKey, @function
+ 214              	KCipherVecAesNiSetDecryptKey:
+ 215              	.LFB605:
+ 149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(SetDecryptKey)(CIPHER_IMPL * self,
+ 152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                   const char * user_key,
+ 153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                   uint32_t user_key_bits)
+ 154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 216              		.loc 1 154 0
+ 217              		.cfi_startproc
+ 218 016c 55       		pushq	%rbp
+ 219              	.LCFI8:
+ 220              		.cfi_def_cfa_offset 16
+ 221 016d 4889E5   		movq	%rsp, %rbp
+ 222              		.cfi_offset 6, -16
+ 223              	.LCFI9:
+ 224              		.cfi_def_cfa_register 6
+ 225 0170 53       		pushq	%rbx
+ 226 0171 4883EC38 		subq	$56, %rsp
+ 227 0175 48897DD8 		movq	%rdi, -40(%rbp)
+ 228 0179 488975D0 		movq	%rsi, -48(%rbp)
+ 229 017d 8955CC   		movl	%edx, -52(%rbp)
+ 155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     rc_t rc = 0;
+ 230              		.loc 1 155 0
+ 231 0180 C745EC00 		movl	$0, -20(%rbp)
+ 231      000000
+ 156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (self);
+ 232              		.loc 1 157 0
+ 233 0187 48837DD8 		cmpq	$0, -40(%rbp)
+ 233      00
+ 234 018c 751F     		jne	.L17
+ 235              		.cfi_offset 3, -24
+ 236 018e 488D0D00 		leaq	__PRETTY_FUNCTION__.7320(%rip), %rcx
+ 236      000000
+ 237 0195 BA9D0000 		movl	$157, %edx
+ 237      00
+ 238 019a 488D3500 		leaq	.LC0(%rip), %rsi
+ 238      000000
+ 239 01a1 488D3D00 		leaq	.LC1(%rip), %rdi
+ 239      000000
+ 240 01a8 E8000000 		call	__assert_fail at PLT
+ 240      00
+ 241              	.L17:
+ 158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (user_key);
+ 242              		.loc 1 158 0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 9
+
+
+ 243 01ad 48837DD0 		cmpq	$0, -48(%rbp)
+ 243      00
+ 244 01b2 751F     		jne	.L18
+ 245 01b4 488D0D00 		leaq	__PRETTY_FUNCTION__.7320(%rip), %rcx
+ 245      000000
+ 246 01bb BA9E0000 		movl	$158, %edx
+ 246      00
+ 247 01c0 488D3500 		leaq	.LC0(%rip), %rsi
+ 247      000000
+ 248 01c7 488D3D00 		leaq	.LC2(%rip), %rdi
+ 248      000000
+ 249 01ce E8000000 		call	__assert_fail at PLT
+ 249      00
+ 250              	.L18:
+ 159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (user_key_bits);
+ 251              		.loc 1 159 0
+ 252 01d3 837DCC00 		cmpl	$0, -52(%rbp)
+ 253 01d7 751F     		jne	.L19
+ 254 01d9 488D0D00 		leaq	__PRETTY_FUNCTION__.7320(%rip), %rcx
+ 254      000000
+ 255 01e0 BA9F0000 		movl	$159, %edx
+ 255      00
+ 256 01e5 488D3500 		leaq	.LC0(%rip), %rsi
+ 256      000000
+ 257 01ec 488D3D00 		leaq	.LC3(%rip), %rdi
+ 257      000000
+ 258 01f3 E8000000 		call	__assert_fail at PLT
+ 258      00
+ 259              	.L19:
+ 160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     switch (self->block_cipher->version.maj)
+ 260              		.loc 1 161 0
+ 261 01f8 488B45D8 		movq	-40(%rbp), %rax
+ 262 01fc 488B4048 		movq	72(%rax), %rax
+ 263 0200 8B00     		movl	(%rax), %eax
+ 264 0202 83F801   		cmpl	$1, %eax
+ 265 0205 7422     		je	.L21
+ 162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     default:
+ 164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = RC (rcKrypto, rcCipher, rcUpdating, rcBlockCipher, rcBadVersion);
+ 266              		.loc 1 164 0
+ 267 0207 B9A40000 		movl	$164, %ecx
+ 267      00
+ 268 020c 488D1500 		leaq	__func__.7322(%rip), %rdx
+ 268      000000
+ 269 0213 488D3500 		leaq	.LC0(%rip), %rsi
+ 269      000000
+ 270 021a BF088E04 		movl	$-2029744632, %edi
+ 270      87
+ 271 021f E8000000 		call	SetRCFileFuncLine at PLT
+ 271      00
+ 272 0224 8945EC   		movl	%eax, -20(%rbp)
+ 165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 273              		.loc 1 165 0
+ 274 0227 EB23     		jmp	.L22
+ 275              	.L21:
+ 166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 10
+
+
+ 167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     case 1:
+ 168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         self->block_cipher->v1.set_decrypt_key (self->dad.decrypt_key, user_key,
+ 276              		.loc 1 168 0
+ 277 0229 488B45D8 		movq	-40(%rbp), %rax
+ 278 022d 488B4048 		movq	72(%rax), %rax
+ 279 0231 488B5828 		movq	40(%rax), %rbx
+ 280 0235 488B45D8 		movq	-40(%rbp), %rax
+ 281 0239 488B4020 		movq	32(%rax), %rax
+ 282 023d 8B55CC   		movl	-52(%rbp), %edx
+ 283 0240 488B4DD0 		movq	-48(%rbp), %rcx
+ 284 0244 4889CE   		movq	%rcx, %rsi
+ 285 0247 4889C7   		movq	%rax, %rdi
+ 286 024a FFD3     		call	*%rbx
+ 287              	.L22:
+ 169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                                     user_key_bits);
+ 170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return rc;
+ 288              		.loc 1 172 0
+ 289 024c 8B45EC   		movl	-20(%rbp), %eax
+ 173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 290              		.loc 1 173 0
+ 291 024f 4883C438 		addq	$56, %rsp
+ 292 0253 5B       		popq	%rbx
+ 293 0254 C9       		leave
+ 294 0255 C3       		ret
+ 295              		.cfi_endproc
+ 296              	.LFE605:
+ 297              		.size	KCipherVecAesNiSetDecryptKey, .-KCipherVecAesNiSetDecryptKey
+ 298              		.section	.rodata
+ 299              	.LC4:
+ 300 0064 69766563 		.string	"ivec"
+ 300      00
+ 301              		.text
+ 302              		.type	KCipherVecAesNiSetEncryptIvec, @function
+ 303              	KCipherVecAesNiSetEncryptIvec:
+ 304              	.LFB606:
+ 174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetEncryptIvec) (CIPHER_IMPL * self,
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                              const void * ivec)
+ 179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 305              		.loc 1 179 0
+ 306              		.cfi_startproc
+ 307 0256 55       		pushq	%rbp
+ 308              	.LCFI10:
+ 309              		.cfi_def_cfa_offset 16
+ 310 0257 4889E5   		movq	%rsp, %rbp
+ 311              		.cfi_offset 6, -16
+ 312              	.LCFI11:
+ 313              		.cfi_def_cfa_register 6
+ 314 025a 4883EC10 		subq	$16, %rsp
+ 315 025e 48897DF8 		movq	%rdi, -8(%rbp)
+ 316 0262 488975F0 		movq	%rsi, -16(%rbp)
+ 180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (self);
+ 317              		.loc 1 180 0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 11
+
+
+ 318 0266 48837DF8 		cmpq	$0, -8(%rbp)
+ 318      00
+ 319 026b 751F     		jne	.L25
+ 320 026d 488D0D00 		leaq	__PRETTY_FUNCTION__.7342(%rip), %rcx
+ 320      000000
+ 321 0274 BAB40000 		movl	$180, %edx
+ 321      00
+ 322 0279 488D3500 		leaq	.LC0(%rip), %rsi
+ 322      000000
+ 323 0280 488D3D00 		leaq	.LC1(%rip), %rdi
+ 323      000000
+ 324 0287 E8000000 		call	__assert_fail at PLT
+ 324      00
+ 325              	.L25:
+ 181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (ivec);
+ 326              		.loc 1 181 0
+ 327 028c 48837DF0 		cmpq	$0, -16(%rbp)
+ 327      00
+ 328 0291 751F     		jne	.L26
+ 329 0293 488D0D00 		leaq	__PRETTY_FUNCTION__.7342(%rip), %rcx
+ 329      000000
+ 330 029a BAB50000 		movl	$181, %edx
+ 330      00
+ 331 029f 488D3500 		leaq	.LC0(%rip), %rsi
+ 331      000000
+ 332 02a6 488D3D00 		leaq	.LC4(%rip), %rdi
+ 332      000000
+ 333 02ad E8000000 		call	__assert_fail at PLT
+ 333      00
+ 334              	.L26:
+ 182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     memcpy (self->dad.encrypt_ivec, ivec, self->dad.block_size);
+ 335              		.loc 1 183 0
+ 336 02b2 488B45F8 		movq	-8(%rbp), %rax
+ 337 02b6 8B4004   		movl	4(%rax), %eax
+ 338 02b9 89C2     		mov	%eax, %edx
+ 339 02bb 488B45F8 		movq	-8(%rbp), %rax
+ 340 02bf 488B4028 		movq	40(%rax), %rax
+ 341 02c3 488B4DF0 		movq	-16(%rbp), %rcx
+ 342 02c7 4889CE   		movq	%rcx, %rsi
+ 343 02ca 4889C7   		movq	%rax, %rdi
+ 344 02cd E8000000 		call	memcpy at PLT
+ 344      00
+ 184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 345              		.loc 1 185 0
+ 346 02d2 B8000000 		movl	$0, %eax
+ 346      00
+ 186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 347              		.loc 1 186 0
+ 348 02d7 C9       		leave
+ 349 02d8 C3       		ret
+ 350              		.cfi_endproc
+ 351              	.LFE606:
+ 352              		.size	KCipherVecAesNiSetEncryptIvec, .-KCipherVecAesNiSetEncryptIvec
+ 353              		.type	KCipherVecAesNiSetDecryptIvec, @function
+ 354              	KCipherVecAesNiSetDecryptIvec:
+
GAS LISTING /tmp/ccWvEaWW.s 			page 12
+
+
+ 355              	.LFB607:
+ 187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetDecryptIvec) (CIPHER_IMPL * self,
+ 191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                              const void * ivec)
+ 192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 356              		.loc 1 192 0
+ 357              		.cfi_startproc
+ 358 02d9 55       		pushq	%rbp
+ 359              	.LCFI12:
+ 360              		.cfi_def_cfa_offset 16
+ 361 02da 4889E5   		movq	%rsp, %rbp
+ 362              		.cfi_offset 6, -16
+ 363              	.LCFI13:
+ 364              		.cfi_def_cfa_register 6
+ 365 02dd 4883EC10 		subq	$16, %rsp
+ 366 02e1 48897DF8 		movq	%rdi, -8(%rbp)
+ 367 02e5 488975F0 		movq	%rsi, -16(%rbp)
+ 193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (self);
+ 368              		.loc 1 193 0
+ 369 02e9 48837DF8 		cmpq	$0, -8(%rbp)
+ 369      00
+ 370 02ee 751F     		jne	.L29
+ 371 02f0 488D0D00 		leaq	__PRETTY_FUNCTION__.7355(%rip), %rcx
+ 371      000000
+ 372 02f7 BAC10000 		movl	$193, %edx
+ 372      00
+ 373 02fc 488D3500 		leaq	.LC0(%rip), %rsi
+ 373      000000
+ 374 0303 488D3D00 		leaq	.LC1(%rip), %rdi
+ 374      000000
+ 375 030a E8000000 		call	__assert_fail at PLT
+ 375      00
+ 376              	.L29:
+ 194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (ivec);
+ 377              		.loc 1 194 0
+ 378 030f 48837DF0 		cmpq	$0, -16(%rbp)
+ 378      00
+ 379 0314 751F     		jne	.L30
+ 380 0316 488D0D00 		leaq	__PRETTY_FUNCTION__.7355(%rip), %rcx
+ 380      000000
+ 381 031d BAC20000 		movl	$194, %edx
+ 381      00
+ 382 0322 488D3500 		leaq	.LC0(%rip), %rsi
+ 382      000000
+ 383 0329 488D3D00 		leaq	.LC4(%rip), %rdi
+ 383      000000
+ 384 0330 E8000000 		call	__assert_fail at PLT
+ 384      00
+ 385              	.L30:
+ 195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     memcpy (self->dad.decrypt_ivec, ivec, self->dad.block_size);
+ 386              		.loc 1 196 0
+ 387 0335 488B45F8 		movq	-8(%rbp), %rax
+ 388 0339 8B4004   		movl	4(%rax), %eax
+ 389 033c 89C2     		mov	%eax, %edx
+
GAS LISTING /tmp/ccWvEaWW.s 			page 13
+
+
+ 390 033e 488B45F8 		movq	-8(%rbp), %rax
+ 391 0342 488B4030 		movq	48(%rax), %rax
+ 392 0346 488B4DF0 		movq	-16(%rbp), %rcx
+ 393 034a 4889CE   		movq	%rcx, %rsi
+ 394 034d 4889C7   		movq	%rax, %rdi
+ 395 0350 E8000000 		call	memcpy at PLT
+ 395      00
+ 197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 396              		.loc 1 198 0
+ 397 0355 B8000000 		movl	$0, %eax
+ 397      00
+ 199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 398              		.loc 1 199 0
+ 399 035a C9       		leave
+ 400 035b C3       		ret
+ 401              		.cfi_endproc
+ 402              	.LFE607:
+ 403              		.size	KCipherVecAesNiSetDecryptIvec, .-KCipherVecAesNiSetDecryptIvec
+ 404              		.section	.rodata
+ 405              	.LC5:
+ 406 0069 66756E63 		.string	"func"
+ 406      00
+ 407              		.text
+ 408              		.type	KCipherVecAesNiSetEncryptCounterFunc, @function
+ 409              	KCipherVecAesNiSetEncryptCounterFunc:
+ 410              	.LFB608:
+ 200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetEncryptCounterFunc) (CIPHER_IMPL * self,
+ 204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                     cipher_ctr_func func)
+ 205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 411              		.loc 1 205 0
+ 412              		.cfi_startproc
+ 413 035c 55       		pushq	%rbp
+ 414              	.LCFI14:
+ 415              		.cfi_def_cfa_offset 16
+ 416 035d 4889E5   		movq	%rsp, %rbp
+ 417              		.cfi_offset 6, -16
+ 418              	.LCFI15:
+ 419              		.cfi_def_cfa_register 6
+ 420 0360 4883EC10 		subq	$16, %rsp
+ 421 0364 48897DF8 		movq	%rdi, -8(%rbp)
+ 422 0368 488975F0 		movq	%rsi, -16(%rbp)
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (self);
+ 423              		.loc 1 206 0
+ 424 036c 48837DF8 		cmpq	$0, -8(%rbp)
+ 424      00
+ 425 0371 751F     		jne	.L33
+ 426 0373 488D0D00 		leaq	__PRETTY_FUNCTION__.7368(%rip), %rcx
+ 426      000000
+ 427 037a BACE0000 		movl	$206, %edx
+ 427      00
+ 428 037f 488D3500 		leaq	.LC0(%rip), %rsi
+ 428      000000
+ 429 0386 488D3D00 		leaq	.LC1(%rip), %rdi
+
GAS LISTING /tmp/ccWvEaWW.s 			page 14
+
+
+ 429      000000
+ 430 038d E8000000 		call	__assert_fail at PLT
+ 430      00
+ 431              	.L33:
+ 207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (func);
+ 432              		.loc 1 207 0
+ 433 0392 48837DF0 		cmpq	$0, -16(%rbp)
+ 433      00
+ 434 0397 751F     		jne	.L34
+ 435 0399 488D0D00 		leaq	__PRETTY_FUNCTION__.7368(%rip), %rcx
+ 435      000000
+ 436 03a0 BACF0000 		movl	$207, %edx
+ 436      00
+ 437 03a5 488D3500 		leaq	.LC0(%rip), %rsi
+ 437      000000
+ 438 03ac 488D3D00 		leaq	.LC5(%rip), %rdi
+ 438      000000
+ 439 03b3 E8000000 		call	__assert_fail at PLT
+ 439      00
+ 440              	.L34:
+ 208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     self->dad.encrypt_counter_func = func;
+ 441              		.loc 1 209 0
+ 442 03b8 488B45F8 		movq	-8(%rbp), %rax
+ 443 03bc 488B55F0 		movq	-16(%rbp), %rdx
+ 444 03c0 48895038 		movq	%rdx, 56(%rax)
+ 210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 445              		.loc 1 211 0
+ 446 03c4 B8000000 		movl	$0, %eax
+ 446      00
+ 212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 447              		.loc 1 212 0
+ 448 03c9 C9       		leave
+ 449 03ca C3       		ret
+ 450              		.cfi_endproc
+ 451              	.LFE608:
+ 452              		.size	KCipherVecAesNiSetEncryptCounterFunc, .-KCipherVecAesNiSetEncryptCounterFunc
+ 453              		.type	KCipherVecAesNiSetDecryptCounterFunc, @function
+ 454              	KCipherVecAesNiSetDecryptCounterFunc:
+ 455              	.LFB609:
+ 213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetDecryptCounterFunc) (CIPHER_IMPL * self,
+ 217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                     cipher_ctr_func func)
+ 218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 456              		.loc 1 218 0
+ 457              		.cfi_startproc
+ 458 03cb 55       		pushq	%rbp
+ 459              	.LCFI16:
+ 460              		.cfi_def_cfa_offset 16
+ 461 03cc 4889E5   		movq	%rsp, %rbp
+ 462              		.cfi_offset 6, -16
+ 463              	.LCFI17:
+ 464              		.cfi_def_cfa_register 6
+ 465 03cf 4883EC10 		subq	$16, %rsp
+
GAS LISTING /tmp/ccWvEaWW.s 			page 15
+
+
+ 466 03d3 48897DF8 		movq	%rdi, -8(%rbp)
+ 467 03d7 488975F0 		movq	%rsi, -16(%rbp)
+ 219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (self);
+ 468              		.loc 1 219 0
+ 469 03db 48837DF8 		cmpq	$0, -8(%rbp)
+ 469      00
+ 470 03e0 751F     		jne	.L37
+ 471 03e2 488D0D00 		leaq	__PRETTY_FUNCTION__.7378(%rip), %rcx
+ 471      000000
+ 472 03e9 BADB0000 		movl	$219, %edx
+ 472      00
+ 473 03ee 488D3500 		leaq	.LC0(%rip), %rsi
+ 473      000000
+ 474 03f5 488D3D00 		leaq	.LC1(%rip), %rdi
+ 474      000000
+ 475 03fc E8000000 		call	__assert_fail at PLT
+ 475      00
+ 476              	.L37:
+ 220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (func);
+ 477              		.loc 1 220 0
+ 478 0401 48837DF0 		cmpq	$0, -16(%rbp)
+ 478      00
+ 479 0406 751F     		jne	.L38
+ 480 0408 488D0D00 		leaq	__PRETTY_FUNCTION__.7378(%rip), %rcx
+ 480      000000
+ 481 040f BADC0000 		movl	$220, %edx
+ 481      00
+ 482 0414 488D3500 		leaq	.LC0(%rip), %rsi
+ 482      000000
+ 483 041b 488D3D00 		leaq	.LC5(%rip), %rdi
+ 483      000000
+ 484 0422 E8000000 		call	__assert_fail at PLT
+ 484      00
+ 485              	.L38:
+ 221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     self->dad.decrypt_counter_func = func;
+ 486              		.loc 1 222 0
+ 487 0427 488B45F8 		movq	-8(%rbp), %rax
+ 488 042b 488B55F0 		movq	-16(%rbp), %rdx
+ 489 042f 48895040 		movq	%rdx, 64(%rax)
+ 223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 490              		.loc 1 224 0
+ 491 0433 B8000000 		movl	$0, %eax
+ 491      00
+ 225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 492              		.loc 1 225 0
+ 493 0438 C9       		leave
+ 494 0439 C3       		ret
+ 495              		.cfi_endproc
+ 496              	.LFE609:
+ 497              		.size	KCipherVecAesNiSetDecryptCounterFunc, .-KCipherVecAesNiSetDecryptCounterFunc
+ 498              		.type	KCipherVecAesNiEncryptV1, @function
+ 499              	KCipherVecAesNiEncryptV1:
+ 500              	.LFB610:
+ 226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 16
+
+
+ 228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ CipherVec CMEMBER(EncryptV1)(const CIPHER_IMPL * self,
+ 229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                               register CipherVec cv)
+ 230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 501              		.loc 1 230 0
+ 502              		.cfi_startproc
+ 503 043a 55       		pushq	%rbp
+ 504              	.LCFI18:
+ 505              		.cfi_def_cfa_offset 16
+ 506 043b 4889E5   		movq	%rsp, %rbp
+ 507              		.cfi_offset 6, -16
+ 508              	.LCFI19:
+ 509              		.cfi_def_cfa_register 6
+ 510 043e 4883EC10 		subq	$16, %rsp
+ 511 0442 48897DF8 		movq	%rdi, -8(%rbp)
+ 231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return self->block_cipher->v1.encrypt (cv, self->dad.encrypt_key);
+ 512              		.loc 1 231 0
+ 513 0446 488B45F8 		movq	-8(%rbp), %rax
+ 514 044a 488B4048 		movq	72(%rax), %rax
+ 515 044e 488B5030 		movq	48(%rax), %rdx
+ 516 0452 488B45F8 		movq	-8(%rbp), %rax
+ 517 0456 488B4018 		movq	24(%rax), %rax
+ 518 045a 4889C7   		movq	%rax, %rdi
+ 519 045d FFD2     		call	*%rdx
+ 232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 520              		.loc 1 232 0
+ 521 045f C9       		leave
+ 522 0460 C3       		ret
+ 523              		.cfi_endproc
+ 524              	.LFE610:
+ 525              		.size	KCipherVecAesNiEncryptV1, .-KCipherVecAesNiEncryptV1
+ 526              		.type	KCipherVecAesNiDecryptV1, @function
+ 527              	KCipherVecAesNiDecryptV1:
+ 528              	.LFB611:
+ 233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ CipherVec  CMEMBER(DecryptV1)(const CIPHER_IMPL * self,
+ 236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                               register CipherVec cv)
+ 237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 529              		.loc 1 237 0
+ 530              		.cfi_startproc
+ 531 0461 55       		pushq	%rbp
+ 532              	.LCFI20:
+ 533              		.cfi_def_cfa_offset 16
+ 534 0462 4889E5   		movq	%rsp, %rbp
+ 535              		.cfi_offset 6, -16
+ 536              	.LCFI21:
+ 537              		.cfi_def_cfa_register 6
+ 538 0465 4883EC10 		subq	$16, %rsp
+ 539 0469 48897DF8 		movq	%rdi, -8(%rbp)
+ 238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return self->block_cipher->v1.decrypt (cv, self->dad.decrypt_key);
+ 540              		.loc 1 238 0
+ 541 046d 488B45F8 		movq	-8(%rbp), %rax
+ 542 0471 488B4048 		movq	72(%rax), %rax
+ 543 0475 488B5038 		movq	56(%rax), %rdx
+ 544 0479 488B45F8 		movq	-8(%rbp), %rax
+ 545 047d 488B4020 		movq	32(%rax), %rax
+ 546 0481 4889C7   		movq	%rax, %rdi
+
GAS LISTING /tmp/ccWvEaWW.s 			page 17
+
+
+ 547 0484 FFD2     		call	*%rdx
+ 239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 548              		.loc 1 239 0
+ 549 0486 C9       		leave
+ 550 0487 C3       		ret
+ 551              		.cfi_endproc
+ 552              	.LFE611:
+ 553              		.size	KCipherVecAesNiDecryptV1, .-KCipherVecAesNiDecryptV1
+ 554              		.type	KCipherVecAesNiEncryptV1Int, @function
+ 555              	KCipherVecAesNiEncryptV1Int:
+ 556              	.LFB612:
+ 240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ rc_t CMEMBER(EncryptV1Int)(const CIPHER_IMPL * self,
+ 243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                             const void * in, void * out)
+ 244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 557              		.loc 1 244 0
+ 558              		.cfi_startproc
+ 559 0488 55       		pushq	%rbp
+ 560              	.LCFI22:
+ 561              		.cfi_def_cfa_offset 16
+ 562 0489 4889E5   		movq	%rsp, %rbp
+ 563              		.cfi_offset 6, -16
+ 564              	.LCFI23:
+ 565              		.cfi_def_cfa_register 6
+ 566 048c 4883EC30 		subq	$48, %rsp
+ 567 0490 48897DE8 		movq	%rdi, -24(%rbp)
+ 568 0494 488975E0 		movq	%rsi, -32(%rbp)
+ 569 0498 488955D8 		movq	%rdx, -40(%rbp)
+ 245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     cv = CipherVecIn(in);
+ 570              		.loc 1 247 0
+ 571 049c 488B45E0 		movq	-32(%rbp), %rax
+ 572 04a0 4889C7   		movq	%rax, %rdi
+ 573 04a3 E858FBFF 		call	CipherVecIn
+ 573      FF
+ 574 04a8 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 574      F0
+ 248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     cv = CMEMBER(EncryptV1)(self, cv);
+ 575              		.loc 1 248 0
+ 576 04ad F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 576      F0
+ 577 04b2 488B45E8 		movq	-24(%rbp), %rax
+ 578 04b6 4889C7   		movq	%rax, %rdi
+ 579 04b9 E87CFFFF 		call	KCipherVecAesNiEncryptV1
+ 579      FF
+ 580 04be F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 580      F0
+ 249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVecOut(cv, out);
+ 581              		.loc 1 249 0
+ 582 04c3 488B45D8 		movq	-40(%rbp), %rax
+ 583 04c7 F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 583      F0
+ 584 04cc 4889C7   		movq	%rax, %rdi
+ 585 04cf E84BFBFF 		call	CipherVecOut
+ 585      FF
+
GAS LISTING /tmp/ccWvEaWW.s 			page 18
+
+
+ 250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 586              		.loc 1 250 0
+ 587 04d4 B8000000 		movl	$0, %eax
+ 587      00
+ 251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 588              		.loc 1 251 0
+ 589 04d9 C9       		leave
+ 590 04da C3       		ret
+ 591              		.cfi_endproc
+ 592              	.LFE612:
+ 593              		.size	KCipherVecAesNiEncryptV1Int, .-KCipherVecAesNiEncryptV1Int
+ 594              		.type	KCipherVecAesNiDecryptV1Int, @function
+ 595              	KCipherVecAesNiDecryptV1Int:
+ 596              	.LFB613:
+ 252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ rc_t CMEMBER(DecryptV1Int)(const CIPHER_IMPL * self,
+ 255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                             const void * in, void * out)
+ 256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 597              		.loc 1 256 0
+ 598              		.cfi_startproc
+ 599 04db 55       		pushq	%rbp
+ 600              	.LCFI24:
+ 601              		.cfi_def_cfa_offset 16
+ 602 04dc 4889E5   		movq	%rsp, %rbp
+ 603              		.cfi_offset 6, -16
+ 604              	.LCFI25:
+ 605              		.cfi_def_cfa_register 6
+ 606 04df 4883EC30 		subq	$48, %rsp
+ 607 04e3 48897DE8 		movq	%rdi, -24(%rbp)
+ 608 04e7 488975E0 		movq	%rsi, -32(%rbp)
+ 609 04eb 488955D8 		movq	%rdx, -40(%rbp)
+ 257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     cv = CipherVecIn(in);
+ 610              		.loc 1 259 0
+ 611 04ef 488B45E0 		movq	-32(%rbp), %rax
+ 612 04f3 4889C7   		movq	%rax, %rdi
+ 613 04f6 E805FBFF 		call	CipherVecIn
+ 613      FF
+ 614 04fb F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 614      F0
+ 260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     cv = CMEMBER(DecryptV1)(self, cv);
+ 615              		.loc 1 260 0
+ 616 0500 F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 616      F0
+ 617 0505 488B45E8 		movq	-24(%rbp), %rax
+ 618 0509 4889C7   		movq	%rax, %rdi
+ 619 050c E850FFFF 		call	KCipherVecAesNiDecryptV1
+ 619      FF
+ 620 0511 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 620      F0
+ 261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVecOut(cv, out);
+ 621              		.loc 1 261 0
+ 622 0516 488B45D8 		movq	-40(%rbp), %rax
+ 623 051a F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 623      F0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 19
+
+
+ 624 051f 4889C7   		movq	%rax, %rdi
+ 625 0522 E8F8FAFF 		call	CipherVecOut
+ 625      FF
+ 262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 626              		.loc 1 262 0
+ 627 0527 B8000000 		movl	$0, %eax
+ 627      00
+ 263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 628              		.loc 1 263 0
+ 629 052c C9       		leave
+ 630 052d C3       		ret
+ 631              		.cfi_endproc
+ 632              	.LFE613:
+ 633              		.size	KCipherVecAesNiDecryptV1Int, .-KCipherVecAesNiDecryptV1Int
+ 634              		.type	KCipherVecAesNiEncrypt, @function
+ 635              	KCipherVecAesNiEncrypt:
+ 636              	.LFB614:
+ 264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(Encrypt) (const CIPHER_IMPL * self, const void * in, void * out)
+ 267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 637              		.loc 1 267 0
+ 638              		.cfi_startproc
+ 639 052e 55       		pushq	%rbp
+ 640              	.LCFI26:
+ 641              		.cfi_def_cfa_offset 16
+ 642 052f 4889E5   		movq	%rsp, %rbp
+ 643              		.cfi_offset 6, -16
+ 644              	.LCFI27:
+ 645              		.cfi_def_cfa_register 6
+ 646 0532 4883EC30 		subq	$48, %rsp
+ 647 0536 48897DE8 		movq	%rdi, -24(%rbp)
+ 648 053a 488975E0 		movq	%rsi, -32(%rbp)
+ 649 053e 488955D8 		movq	%rdx, -40(%rbp)
+ 268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     rc_t rc;
+ 269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     switch (self->block_cipher->version.maj)
+ 650              		.loc 1 270 0
+ 651 0542 488B45E8 		movq	-24(%rbp), %rax
+ 652 0546 488B4048 		movq	72(%rax), %rax
+ 653 054a 8B00     		movl	(%rax), %eax
+ 654 054c 83F801   		cmpl	$1, %eax
+ 655 054f 7422     		je	.L50
+ 271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     default:
+ 273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+ 656              		.loc 1 273 0
+ 657 0551 B9110100 		movl	$273, %ecx
+ 657      00
+ 658 0556 488D1500 		leaq	__func__.7428(%rip), %rdx
+ 658      000000
+ 659 055d 488D3500 		leaq	.LC0(%rip), %rsi
+ 659      000000
+ 660 0564 BF080E09 		movl	$-2029449720, %edi
+ 660      87
+ 661 0569 E8000000 		call	SetRCFileFuncLine at PLT
+ 661      00
+
GAS LISTING /tmp/ccWvEaWW.s 			page 20
+
+
+ 662 056e 8945FC   		movl	%eax, -4(%rbp)
+ 274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 663              		.loc 1 274 0
+ 664 0571 EB1A     		jmp	.L51
+ 665              	.L50:
+ 275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     case 1:
+ 277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = CMEMBER(EncryptV1Int)(self, in, out);
+ 666              		.loc 1 277 0
+ 667 0573 488B55D8 		movq	-40(%rbp), %rdx
+ 668 0577 488B4DE0 		movq	-32(%rbp), %rcx
+ 669 057b 488B45E8 		movq	-24(%rbp), %rax
+ 670 057f 4889CE   		movq	%rcx, %rsi
+ 671 0582 4889C7   		movq	%rax, %rdi
+ 672 0585 E8FEFEFF 		call	KCipherVecAesNiEncryptV1Int
+ 672      FF
+ 673 058a 8945FC   		movl	%eax, -4(%rbp)
+ 674              	.L51:
+ 278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return rc;
+ 675              		.loc 1 281 0
+ 676 058d 8B45FC   		movl	-4(%rbp), %eax
+ 282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 677              		.loc 1 282 0
+ 678 0590 C9       		leave
+ 679 0591 C3       		ret
+ 680              		.cfi_endproc
+ 681              	.LFE614:
+ 682              		.size	KCipherVecAesNiEncrypt, .-KCipherVecAesNiEncrypt
+ 683              		.type	KCipherVecAesNiDecrypt, @function
+ 684              	KCipherVecAesNiDecrypt:
+ 685              	.LFB615:
+ 283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(Decrypt) (const CIPHER_IMPL * self, const void * in, void * out)
+ 287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 686              		.loc 1 287 0
+ 687              		.cfi_startproc
+ 688 0592 55       		pushq	%rbp
+ 689              	.LCFI28:
+ 690              		.cfi_def_cfa_offset 16
+ 691 0593 4889E5   		movq	%rsp, %rbp
+ 692              		.cfi_offset 6, -16
+ 693              	.LCFI29:
+ 694              		.cfi_def_cfa_register 6
+ 695 0596 4883EC30 		subq	$48, %rsp
+ 696 059a 48897DE8 		movq	%rdi, -24(%rbp)
+ 697 059e 488975E0 		movq	%rsi, -32(%rbp)
+ 698 05a2 488955D8 		movq	%rdx, -40(%rbp)
+ 288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     rc_t rc = 0;
+ 699              		.loc 1 288 0
+ 700 05a6 C745FC00 		movl	$0, -4(%rbp)
+ 700      000000
+ 289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 21
+
+
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     switch (self->block_cipher->version.maj)
+ 701              		.loc 1 290 0
+ 702 05ad 488B45E8 		movq	-24(%rbp), %rax
+ 703 05b1 488B4048 		movq	72(%rax), %rax
+ 704 05b5 8B00     		movl	(%rax), %eax
+ 705 05b7 83F801   		cmpl	$1, %eax
+ 706 05ba 7422     		je	.L55
+ 291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     default:
+ 293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+ 707              		.loc 1 293 0
+ 708 05bc B9250100 		movl	$293, %ecx
+ 708      00
+ 709 05c1 488D1500 		leaq	__func__.7444(%rip), %rdx
+ 709      000000
+ 710 05c8 488D3500 		leaq	.LC0(%rip), %rsi
+ 710      000000
+ 711 05cf BF080E09 		movl	$-2029449720, %edi
+ 711      87
+ 712 05d4 E8000000 		call	SetRCFileFuncLine at PLT
+ 712      00
+ 713 05d9 8945FC   		movl	%eax, -4(%rbp)
+ 294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 714              		.loc 1 294 0
+ 715 05dc EB1A     		jmp	.L56
+ 716              	.L55:
+ 295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     case 1:
+ 297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = CMEMBER(DecryptV1Int)(self, in, out);
+ 717              		.loc 1 297 0
+ 718 05de 488B55D8 		movq	-40(%rbp), %rdx
+ 719 05e2 488B4DE0 		movq	-32(%rbp), %rcx
+ 720 05e6 488B45E8 		movq	-24(%rbp), %rax
+ 721 05ea 4889CE   		movq	%rcx, %rsi
+ 722 05ed 4889C7   		movq	%rax, %rdi
+ 723 05f0 E8E6FEFF 		call	KCipherVecAesNiDecryptV1Int
+ 723      FF
+ 724 05f5 8945FC   		movl	%eax, -4(%rbp)
+ 725              	.L56:
+ 298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return rc;
+ 726              		.loc 1 301 0
+ 727 05f8 8B45FC   		movl	-4(%rbp), %eax
+ 302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 728              		.loc 1 302 0
+ 729 05fb C9       		leave
+ 730 05fc C3       		ret
+ 731              		.cfi_endproc
+ 732              	.LFE615:
+ 733              		.size	KCipherVecAesNiDecrypt, .-KCipherVecAesNiDecrypt
+ 734              		.type	KCipherVecAesNiEncryptEcb, @function
+ 735              	KCipherVecAesNiEncryptEcb:
+ 736              	.LFB616:
+ 303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 22
+
+
+ 305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ====================
+ 306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * longer runs of multiple blocks.
+ 307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+ 308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * The algorithms are well defined and standard in most cases
+ 309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+ 310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * These aremore or elss equivalent to class functions as they do not depend upon
+ 311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * the operation of the cipher and the algorithms are independent of anything about
+ 312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * the cipher other than its block size.
+ 313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+ 314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * PT: plain text block
+ 315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * CT: cipher text block
+ 316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * EK: encryption key
+ 317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * DK: decryption key (might be sthe same as EK)
+ 318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * ENC: encrypt cipher function on a block using a key
+ 319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * DEC: decrypt cipher function on a block using a key
+ 320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * IV: initialization vector - used as feedback for chaining
+ 321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * N:  number used once (nonce)
+ 322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * FB: feedback is the next IV in a chained/feedback mode
+ 323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* -----
+ 327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * NOTE:
+ 328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * 'in' can be the same as 'out' but other overlaps are dangers as a block at a
+ 329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * time is written. The code does not look for overlaps at this point.
+ 330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Electronic Code Book - simple cipher with no chaining feedback  just iterate
+ 334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * simple encrypt/decrypt with the plain, text, cipher text and key/
+ 335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+ 336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * CT = ENC (PT,EK)
+ 337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * PT = DEC (CT,DK)
+ 338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* -----
+ 341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * NOTE: currently an implmentation detail limits us to 8192 bit cipher block
+ 342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * size.  Changing MAX_BLOCK_SIZE in cipher.c can up that limit without 
+ 343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * causing any other compatibility issues. 
+ 344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+ 345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Two local byte arrays are defined on the stack of 1024 bytes or 8192 bits.
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptEcb) (const CIPHER_IMPL * self, const void * in, void * out, uint32_t block_cou
+ 349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 737              		.loc 1 349 0
+ 738              		.cfi_startproc
+ 739 05fd 55       		pushq	%rbp
+ 740              	.LCFI30:
+ 741              		.cfi_def_cfa_offset 16
+ 742 05fe 4889E5   		movq	%rsp, %rbp
+ 743              		.cfi_offset 6, -16
+ 744              	.LCFI31:
+ 745              		.cfi_def_cfa_register 6
+ 746 0601 4883EC30 		subq	$48, %rsp
+ 747 0605 48897DE8 		movq	%rdi, -24(%rbp)
+ 748 0609 488975E0 		movq	%rsi, -32(%rbp)
+
GAS LISTING /tmp/ccWvEaWW.s 			page 23
+
+
+ 749 060d 488955D8 		movq	%rdx, -40(%rbp)
+ 750 0611 894DD4   		movl	%ecx, -44(%rbp)
+ 350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 751              		.loc 1 353 0
+ 752 0614 488B45E0 		movq	-32(%rbp), %rax
+ 753 0618 488945F0 		movq	%rax, -16(%rbp)
+ 754 061c 488B45D8 		movq	-40(%rbp), %rax
+ 755 0620 488945F8 		movq	%rax, -8(%rbp)
+ 756 0624 EB31     		jmp	.L59
+ 757              	.L60:
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CMEMBER(EncryptV1Int)(self, pin, pout);
+ 758              		.loc 1 357 0
+ 759 0626 488B55F8 		movq	-8(%rbp), %rdx
+ 760 062a 488B4DF0 		movq	-16(%rbp), %rcx
+ 761 062e 488B45E8 		movq	-24(%rbp), %rax
+ 762 0632 4889CE   		movq	%rcx, %rsi
+ 763 0635 4889C7   		movq	%rax, %rdi
+ 764 0638 E84BFEFF 		call	KCipherVecAesNiEncryptV1Int
+ 764      FF
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 765              		.loc 1 355 0
+ 766 063d 488B45E8 		movq	-24(%rbp), %rax
+ 767 0641 8B4004   		movl	4(%rax), %eax
+ 768 0644 89C0     		mov	%eax, %eax
+ 769 0646 480145F0 		addq	%rax, -16(%rbp)
+ 770 064a 488B45E8 		movq	-24(%rbp), %rax
+ 771 064e 8B4004   		movl	4(%rax), %eax
+ 772 0651 89C0     		mov	%eax, %eax
+ 773 0653 480145F8 		addq	%rax, -8(%rbp)
+ 774              	.L59:
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 775              		.loc 1 354 0
+ 776 0657 837DD400 		cmpl	$0, -44(%rbp)
+ 777 065b 0F95C0   		setne	%al
+ 778 065e 836DD401 		subl	$1, -44(%rbp)
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 779              		.loc 1 353 0
+ 780 0662 84C0     		testb	%al, %al
+ 781 0664 75C0     		jne	.L60
+ 358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 782              		.loc 1 359 0
+ 783 0666 B8000000 		movl	$0, %eax
+ 783      00
+ 360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 784              		.loc 1 360 0
+ 785 066b C9       		leave
+ 786 066c C3       		ret
+ 787              		.cfi_endproc
+ 788              	.LFE616:
+ 789              		.size	KCipherVecAesNiEncryptEcb, .-KCipherVecAesNiEncryptEcb
+
GAS LISTING /tmp/ccWvEaWW.s 			page 24
+
+
+ 790              		.type	KCipherVecAesNiDecryptEcb, @function
+ 791              	KCipherVecAesNiDecryptEcb:
+ 792              	.LFB617:
+ 361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptEcb) (const CIPHER_IMPL * self, const void * in, void * out, uint32_t block_cou
+ 365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 793              		.loc 1 365 0
+ 794              		.cfi_startproc
+ 795 066d 55       		pushq	%rbp
+ 796              	.LCFI32:
+ 797              		.cfi_def_cfa_offset 16
+ 798 066e 4889E5   		movq	%rsp, %rbp
+ 799              		.cfi_offset 6, -16
+ 800              	.LCFI33:
+ 801              		.cfi_def_cfa_register 6
+ 802 0671 4883EC30 		subq	$48, %rsp
+ 803 0675 48897DE8 		movq	%rdi, -24(%rbp)
+ 804 0679 488975E0 		movq	%rsi, -32(%rbp)
+ 805 067d 488955D8 		movq	%rdx, -40(%rbp)
+ 806 0681 894DD4   		movl	%ecx, -44(%rbp)
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 807              		.loc 1 369 0
+ 808 0684 488B45E0 		movq	-32(%rbp), %rax
+ 809 0688 488945F0 		movq	%rax, -16(%rbp)
+ 810 068c 488B45D8 		movq	-40(%rbp), %rax
+ 811 0690 488945F8 		movq	%rax, -8(%rbp)
+ 812 0694 EB31     		jmp	.L63
+ 813              	.L64:
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CMEMBER(DecryptV1Int)(self, pin, pout);
+ 814              		.loc 1 373 0
+ 815 0696 488B55F8 		movq	-8(%rbp), %rdx
+ 816 069a 488B4DF0 		movq	-16(%rbp), %rcx
+ 817 069e 488B45E8 		movq	-24(%rbp), %rax
+ 818 06a2 4889CE   		movq	%rcx, %rsi
+ 819 06a5 4889C7   		movq	%rax, %rdi
+ 820 06a8 E82EFEFF 		call	KCipherVecAesNiDecryptV1Int
+ 820      FF
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 821              		.loc 1 371 0
+ 822 06ad 488B45E8 		movq	-24(%rbp), %rax
+ 823 06b1 8B4004   		movl	4(%rax), %eax
+ 824 06b4 89C0     		mov	%eax, %eax
+ 825 06b6 480145F0 		addq	%rax, -16(%rbp)
+ 826 06ba 488B45E8 		movq	-24(%rbp), %rax
+ 827 06be 8B4004   		movl	4(%rax), %eax
+ 828 06c1 89C0     		mov	%eax, %eax
+ 829 06c3 480145F8 		addq	%rax, -8(%rbp)
+ 830              	.L63:
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 25
+
+
+ 831              		.loc 1 370 0
+ 832 06c7 837DD400 		cmpl	$0, -44(%rbp)
+ 833 06cb 0F95C0   		setne	%al
+ 834 06ce 836DD401 		subl	$1, -44(%rbp)
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 835              		.loc 1 369 0
+ 836 06d2 84C0     		testb	%al, %al
+ 837 06d4 75C0     		jne	.L64
+ 374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 838              		.loc 1 376 0
+ 839 06d6 B8000000 		movl	$0, %eax
+ 839      00
+ 377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 840              		.loc 1 377 0
+ 841 06db C9       		leave
+ 842 06dc C3       		ret
+ 843              		.cfi_endproc
+ 844              	.LFE617:
+ 845              		.size	KCipherVecAesNiDecryptEcb, .-KCipherVecAesNiDecryptEcb
+ 846              		.type	KCipherVecAesNiEncryptCbc, @function
+ 847              	KCipherVecAesNiEncryptCbc:
+ 848              	.LFB618:
+ 378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Cipher-Block Chaining
+ 382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * CT = (FB = ENC (PT^IV, EK))
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * PT = DEC ((FB = CT), DK)
+ 384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptCbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 849              		.loc 1 387 0
+ 850              		.cfi_startproc
+ 851 06dd 55       		pushq	%rbp
+ 852              	.LCFI34:
+ 853              		.cfi_def_cfa_offset 16
+ 854 06de 4889E5   		movq	%rsp, %rbp
+ 855              		.cfi_offset 6, -16
+ 856              	.LCFI35:
+ 857              		.cfi_def_cfa_register 6
+ 858 06e1 4883EC50 		subq	$80, %rsp
+ 859 06e5 48897DC8 		movq	%rdi, -56(%rbp)
+ 860 06e9 488975C0 		movq	%rsi, -64(%rbp)
+ 861 06ed 488955B8 		movq	%rdx, -72(%rbp)
+ 862 06f1 894DB4   		movl	%ecx, -76(%rbp)
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 0
+ 394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = CipherVecIn (self->dad.encrypt_ivec);
+
GAS LISTING /tmp/ccWvEaWW.s 			page 26
+
+
+ 863              		.loc 1 396 0
+ 864 06f4 488B45C8 		movq	-56(%rbp), %rax
+ 865 06f8 488B4028 		movq	40(%rax), %rax
+ 866 06fc 4889C7   		movq	%rax, %rdi
+ 867 06ff E8FCF8FF 		call	CipherVecIn
+ 867      FF
+ 868 0704 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 868      E0
+ 397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 869              		.loc 1 399 0
+ 870 0709 488B45C0 		movq	-64(%rbp), %rax
+ 871 070d 488945F0 		movq	%rax, -16(%rbp)
+ 872 0711 488B45B8 		movq	-72(%rbp), %rax
+ 873 0715 488945F8 		movq	%rax, -8(%rbp)
+ 874 0719 EB65     		jmp	.L67
+ 875              	.L68:
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CipherVecIn (pin);
+ 876              		.loc 1 403 0
+ 877 071b 488B45F0 		movq	-16(%rbp), %rax
+ 878 071f 4889C7   		movq	%rax, %rdi
+ 879 0722 E8D9F8FF 		call	CipherVecIn
+ 879      FF
+ 880 0727 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 880      D0
+ 404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv ^= ivec;
+ 881              		.loc 1 404 0
+ 882 072c F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 882      E0
+ 883 0731 F30F6F4D 		movdqu	-48(%rbp), %xmm1
+ 883      D0
+ 884 0736 660FEFC1 		pxor	%xmm1, %xmm0
+ 885 073a F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 885      D0
+ 405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec = CMEMBER(EncryptV1)(self, cv);
+ 886              		.loc 1 405 0
+ 887 073f F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 887      D0
+ 888 0744 488B45C8 		movq	-56(%rbp), %rax
+ 889 0748 4889C7   		movq	%rax, %rdi
+ 890 074b E8EAFCFF 		call	KCipherVecAesNiEncryptV1
+ 890      FF
+ 891 0750 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 891      E0
+ 406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (ivec, pout);
+ 892              		.loc 1 406 0
+ 893 0755 488B45F8 		movq	-8(%rbp), %rax
+ 894 0759 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 894      E0
+ 895 075e 4889C7   		movq	%rax, %rdi
+ 896 0761 E8B9F8FF 		call	CipherVecOut
+ 896      FF
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+
GAS LISTING /tmp/ccWvEaWW.s 			page 27
+
+
+ 897              		.loc 1 401 0
+ 898 0766 488B45C8 		movq	-56(%rbp), %rax
+ 899 076a 8B4004   		movl	4(%rax), %eax
+ 900 076d 89C0     		mov	%eax, %eax
+ 901 076f 480145F0 		addq	%rax, -16(%rbp)
+ 902 0773 488B45C8 		movq	-56(%rbp), %rax
+ 903 0777 8B4004   		movl	4(%rax), %eax
+ 904 077a 89C0     		mov	%eax, %eax
+ 905 077c 480145F8 		addq	%rax, -8(%rbp)
+ 906              	.L67:
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 907              		.loc 1 400 0
+ 908 0780 837DB400 		cmpl	$0, -76(%rbp)
+ 909 0784 0F95C0   		setne	%al
+ 910 0787 836DB401 		subl	$1, -76(%rbp)
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 911              		.loc 1 399 0
+ 912 078b 84C0     		testb	%al, %al
+ 913 078d 758C     		jne	.L68
+ 407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 0
+ 410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVecOut (ivec, self->dad.encrypt_ivec);
+ 914              		.loc 1 412 0
+ 915 078f 488B45C8 		movq	-56(%rbp), %rax
+ 916 0793 488B4028 		movq	40(%rax), %rax
+ 917 0797 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 917      E0
+ 918 079c 4889C7   		movq	%rax, %rdi
+ 919 079f E87BF8FF 		call	CipherVecOut
+ 919      FF
+ 413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 920              		.loc 1 415 0
+ 921 07a4 B8000000 		movl	$0, %eax
+ 921      00
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }    
+ 922              		.loc 1 416 0
+ 923 07a9 C9       		leave
+ 924 07aa C3       		ret
+ 925              		.cfi_endproc
+ 926              	.LFE618:
+ 927              		.size	KCipherVecAesNiEncryptCbc, .-KCipherVecAesNiEncryptCbc
+ 928              		.type	KCipherVecAesNiDecryptCbc, @function
+ 929              	KCipherVecAesNiDecryptCbc:
+ 930              	.LFB619:
+ 417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptCbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 931              		.loc 1 421 0
+ 932              		.cfi_startproc
+ 933 07ab 55       		pushq	%rbp
+
GAS LISTING /tmp/ccWvEaWW.s 			page 28
+
+
+ 934              	.LCFI36:
+ 935              		.cfi_def_cfa_offset 16
+ 936 07ac 4889E5   		movq	%rsp, %rbp
+ 937              		.cfi_offset 6, -16
+ 938              	.LCFI37:
+ 939              		.cfi_def_cfa_register 6
+ 940 07af 4883EC60 		subq	$96, %rsp
+ 941 07b3 48897DB8 		movq	%rdi, -72(%rbp)
+ 942 07b7 488975B0 		movq	%rsi, -80(%rbp)
+ 943 07bb 488955A8 		movq	%rdx, -88(%rbp)
+ 944 07bf 894DA4   		movl	%ecx, -92(%rbp)
+ 422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = CipherVecIn (self->dad.decrypt_ivec);
+ 945              		.loc 1 427 0
+ 946 07c2 488B45B8 		movq	-72(%rbp), %rax
+ 947 07c6 488B4030 		movq	48(%rax), %rax
+ 948 07ca 4889C7   		movq	%rax, %rdi
+ 949 07cd E82EF8FF 		call	CipherVecIn
+ 949      FF
+ 950 07d2 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 950      D0
+ 428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 951              		.loc 1 429 0
+ 952 07d7 488B45B0 		movq	-80(%rbp), %rax
+ 953 07db 488945E0 		movq	%rax, -32(%rbp)
+ 954 07df 488B45A8 		movq	-88(%rbp), %rax
+ 955 07e3 488945E8 		movq	%rax, -24(%rbp)
+ 956 07e7 EB6F     		jmp	.L71
+ 957              	.L72:
+ 958              	.LBB2:
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVec temp;
+ 434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CipherVecIn (pin);
+ 959              		.loc 1 435 0
+ 960 07e9 488B45E0 		movq	-32(%rbp), %rax
+ 961 07ed 4889C7   		movq	%rax, %rdi
+ 962 07f0 E80BF8FF 		call	CipherVecIn
+ 962      FF
+ 963 07f5 F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 963      C0
+ 436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 0
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp = cv;
+ 438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp = CMEMBER(DecryptV1)(self, temp);
+ 439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp = CMEMBER(DecryptV1)(self, cv);
+ 964              		.loc 1 440 0
+ 965 07fa F30F6F45 		movdqu	-64(%rbp), %xmm0
+ 965      C0
+ 966 07ff 488B45B8 		movq	-72(%rbp), %rax
+
GAS LISTING /tmp/ccWvEaWW.s 			page 29
+
+
+ 967 0803 4889C7   		movq	%rax, %rdi
+ 968 0806 E856FCFF 		call	KCipherVecAesNiDecryptV1
+ 968      FF
+ 969 080b F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 969      F0
+ 441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp ^= ivec;
+ 970              		.loc 1 442 0
+ 971 0810 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 971      D0
+ 972 0815 F30F6F4D 		movdqu	-16(%rbp), %xmm1
+ 972      F0
+ 973 081a 660FEFC1 		pxor	%xmm1, %xmm0
+ 974 081e F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 974      F0
+ 443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (temp, pout);
+ 975              		.loc 1 443 0
+ 976 0823 488B45E8 		movq	-24(%rbp), %rax
+ 977 0827 F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 977      F0
+ 978 082c 4889C7   		movq	%rax, %rdi
+ 979 082f E8EBF7FF 		call	CipherVecOut
+ 979      FF
+ 444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec = cv;
+ 980              		.loc 1 444 0
+ 981 0834 F30F6F45 		movdqu	-64(%rbp), %xmm0
+ 981      C0
+ 982 0839 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 982      D0
+ 983              	.LBE2:
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 984              		.loc 1 431 0
+ 985 083e 488B45B8 		movq	-72(%rbp), %rax
+ 986 0842 8B4004   		movl	4(%rax), %eax
+ 987 0845 89C0     		mov	%eax, %eax
+ 988 0847 480145E0 		addq	%rax, -32(%rbp)
+ 989 084b 488B45B8 		movq	-72(%rbp), %rax
+ 990 084f 8B4004   		movl	4(%rax), %eax
+ 991 0852 89C0     		mov	%eax, %eax
+ 992 0854 480145E8 		addq	%rax, -24(%rbp)
+ 993              	.L71:
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 994              		.loc 1 430 0
+ 995 0858 837DA400 		cmpl	$0, -92(%rbp)
+ 996 085c 0F95C0   		setne	%al
+ 997 085f 836DA401 		subl	$1, -92(%rbp)
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 998              		.loc 1 429 0
+ 999 0863 84C0     		testb	%al, %al
+ 1000 0865 7582     		jne	.L72
+ 445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.decrypt_ivec = ivec;
+ 1001              		.loc 1 447 0
+ 1002 0867 488B45B8 		movq	-72(%rbp), %rax
+ 1003 086b 488B4030 		movq	48(%rax), %rax
+ 1004 086f F30F6F45 		movdqu	-48(%rbp), %xmm0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 30
+
+
+ 1004      D0
+ 1005 0874 F30F7F00 		movdqu	%xmm0, (%rax)
+ 448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1006              		.loc 1 448 0
+ 1007 0878 B8000000 		movl	$0, %eax
+ 1007      00
+ 449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1008              		.loc 1 449 0
+ 1009 087d C9       		leave
+ 1010 087e C3       		ret
+ 1011              		.cfi_endproc
+ 1012              	.LFE619:
+ 1013              		.size	KCipherVecAesNiDecryptCbc, .-KCipherVecAesNiDecryptCbc
+ 1014              		.type	KCipherVecAesNiEncryptPcbc, @function
+ 1015              	KCipherVecAesNiEncryptPcbc:
+ 1016              	.LFB620:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Propagating cipher-block chaining
+ 454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * FB = PT ^ (CT = ENC ((PT^IV), EK))
+ 455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * FB = CT ^ (PT = DEC (CT,DK) ^ IV)
+ 456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptPcbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1017              		.loc 1 459 0
+ 1018              		.cfi_startproc
+ 1019 087f 55       		pushq	%rbp
+ 1020              	.LCFI38:
+ 1021              		.cfi_def_cfa_offset 16
+ 1022 0880 4889E5   		movq	%rsp, %rbp
+ 1023              		.cfi_offset 6, -16
+ 1024              	.LCFI39:
+ 1025              		.cfi_def_cfa_register 6
+ 1026 0883 4883EC60 		subq	$96, %rsp
+ 1027 0887 48897DB8 		movq	%rdi, -72(%rbp)
+ 1028 088b 488975B0 		movq	%rsi, -80(%rbp)
+ 1029 088f 488955A8 		movq	%rdx, -88(%rbp)
+ 1030 0893 894DA4   		movl	%ecx, -92(%rbp)
+ 460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1031              		.loc 1 466 0
+ 1032 0896 488B45B8 		movq	-72(%rbp), %rax
+ 1033 089a 488B4028 		movq	40(%rax), %rax
+ 1034 089e 660F6F00 		movdqa	(%rax), %xmm0
+ 1035 08a2 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1035      D0
+ 467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1036              		.loc 1 468 0
+ 1037 08a7 488B45B0 		movq	-80(%rbp), %rax
+
GAS LISTING /tmp/ccWvEaWW.s 			page 31
+
+
+ 1038 08ab 488945E0 		movq	%rax, -32(%rbp)
+ 1039 08af 488B45A8 		movq	-88(%rbp), %rax
+ 1040 08b3 488945E8 		movq	%rax, -24(%rbp)
+ 1041 08b7 EB78     		jmp	.L75
+ 1042              	.L76:
+ 1043              	.LBB3:
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVec temp;
+ 473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CipherVecIn (pin);
+ 1044              		.loc 1 474 0
+ 1045 08b9 488B45E0 		movq	-32(%rbp), %rax
+ 1046 08bd 4889C7   		movq	%rax, %rdi
+ 1047 08c0 E83BF7FF 		call	CipherVecIn
+ 1047      FF
+ 1048 08c5 F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 1048      C0
+ 475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp = cv ^ ivec;
+ 1049              		.loc 1 475 0
+ 1050 08ca F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 1050      D0
+ 1051 08cf F30F6F4D 		movdqu	-64(%rbp), %xmm1
+ 1051      C0
+ 1052 08d4 660FEFC1 		pxor	%xmm1, %xmm0
+ 1053 08d8 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 1053      F0
+ 476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp = CMEMBER(EncryptV1)(self, temp); 
+ 1054              		.loc 1 476 0
+ 1055 08dd F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 1055      F0
+ 1056 08e2 488B45B8 		movq	-72(%rbp), %rax
+ 1057 08e6 4889C7   		movq	%rax, %rdi
+ 1058 08e9 E84CFBFF 		call	KCipherVecAesNiEncryptV1
+ 1058      FF
+ 1059 08ee F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 1059      F0
+ 477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec = cv ^ temp;
+ 1060              		.loc 1 477 0
+ 1061 08f3 F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 1061      F0
+ 1062 08f8 F30F6F4D 		movdqu	-64(%rbp), %xmm1
+ 1062      C0
+ 1063 08fd 660FEFC1 		pxor	%xmm1, %xmm0
+ 1064 0901 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1064      D0
+ 478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (temp, pout);
+ 1065              		.loc 1 478 0
+ 1066 0906 488B45E8 		movq	-24(%rbp), %rax
+ 1067 090a F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 1067      F0
+ 1068 090f 4889C7   		movq	%rax, %rdi
+ 1069 0912 E808F7FF 		call	CipherVecOut
+ 1069      FF
+ 1070              	.LBE3:
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+
GAS LISTING /tmp/ccWvEaWW.s 			page 32
+
+
+ 1071              		.loc 1 470 0
+ 1072 0917 488B45B8 		movq	-72(%rbp), %rax
+ 1073 091b 8B4004   		movl	4(%rax), %eax
+ 1074 091e 89C0     		mov	%eax, %eax
+ 1075 0920 480145E0 		addq	%rax, -32(%rbp)
+ 1076 0924 488B45B8 		movq	-72(%rbp), %rax
+ 1077 0928 8B4004   		movl	4(%rax), %eax
+ 1078 092b 89C0     		mov	%eax, %eax
+ 1079 092d 480145E8 		addq	%rax, -24(%rbp)
+ 1080              	.L75:
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 1081              		.loc 1 469 0
+ 1082 0931 837DA400 		cmpl	$0, -92(%rbp)
+ 1083 0935 0F95C0   		setne	%al
+ 1084 0938 836DA401 		subl	$1, -92(%rbp)
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1085              		.loc 1 468 0
+ 1086 093c 84C0     		testb	%al, %al
+ 1087 093e 0F8575FF 		jne	.L76
+ 1087      FFFF
+ 479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1088              		.loc 1 481 0
+ 1089 0944 488B45B8 		movq	-72(%rbp), %rax
+ 1090 0948 488B4028 		movq	40(%rax), %rax
+ 1091 094c F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 1091      D0
+ 1092 0951 F30F7F00 		movdqu	%xmm0, (%rax)
+ 482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1093              		.loc 1 483 0
+ 1094 0955 B8000000 		movl	$0, %eax
+ 1094      00
+ 484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1095              		.loc 1 487 0
+ 1096 095a C9       		leave
+ 1097 095b C3       		ret
+ 1098              		.cfi_endproc
+ 1099              	.LFE620:
+ 1100              		.size	KCipherVecAesNiEncryptPcbc, .-KCipherVecAesNiEncryptPcbc
+ 1101              		.type	KCipherVecAesNiDecryptPcbc, @function
+ 1102              	KCipherVecAesNiDecryptPcbc:
+ 1103              	.LFB621:
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptPcbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1104              		.loc 1 492 0
+ 1105              		.cfi_startproc
+ 1106 095c 55       		pushq	%rbp
+ 1107              	.LCFI40:
+ 1108              		.cfi_def_cfa_offset 16
+
GAS LISTING /tmp/ccWvEaWW.s 			page 33
+
+
+ 1109 095d 4889E5   		movq	%rsp, %rbp
+ 1110              		.cfi_offset 6, -16
+ 1111              	.LCFI41:
+ 1112              		.cfi_def_cfa_register 6
+ 1113 0960 4883EC60 		subq	$96, %rsp
+ 1114 0964 48897DB8 		movq	%rdi, -72(%rbp)
+ 1115 0968 488975B0 		movq	%rsi, -80(%rbp)
+ 1116 096c 488955A8 		movq	%rdx, -88(%rbp)
+ 1117 0970 894DA4   		movl	%ecx, -92(%rbp)
+ 493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1118              		.loc 1 499 0
+ 1119 0973 488B45B8 		movq	-72(%rbp), %rax
+ 1120 0977 488B4028 		movq	40(%rax), %rax
+ 1121 097b 660F6F00 		movdqa	(%rax), %xmm0
+ 1122 097f F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1122      D0
+ 500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1123              		.loc 1 501 0
+ 1124 0984 488B45B0 		movq	-80(%rbp), %rax
+ 1125 0988 488945E0 		movq	%rax, -32(%rbp)
+ 1126 098c 488B45A8 		movq	-88(%rbp), %rax
+ 1127 0990 488945E8 		movq	%rax, -24(%rbp)
+ 1128 0994 EB65     		jmp	.L79
+ 1129              	.L80:
+ 1130              	.LBB4:
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVec temp;
+ 506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CipherVecIn (pin);
+ 1131              		.loc 1 507 0
+ 1132 0996 488B45E0 		movq	-32(%rbp), %rax
+ 1133 099a 4889C7   		movq	%rax, %rdi
+ 1134 099d E85EF6FF 		call	CipherVecIn
+ 1134      FF
+ 1135 09a2 F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 1135      C0
+ 508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp = CMEMBER(DecryptV1)(self, cv);
+ 1136              		.loc 1 508 0
+ 1137 09a7 F30F6F45 		movdqu	-64(%rbp), %xmm0
+ 1137      C0
+ 1138 09ac 488B45B8 		movq	-72(%rbp), %rax
+ 1139 09b0 4889C7   		movq	%rax, %rdi
+ 1140 09b3 E8A9FAFF 		call	KCipherVecAesNiDecryptV1
+ 1140      FF
+ 1141 09b8 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 1141      F0
+ 509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec ^= temp;
+ 1142              		.loc 1 509 0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 34
+
+
+ 1143 09bd F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 1143      F0
+ 1144 09c2 F30F6F4D 		movdqu	-48(%rbp), %xmm1
+ 1144      D0
+ 1145 09c7 660FEFC1 		pxor	%xmm1, %xmm0
+ 1146 09cb F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1146      D0
+ 510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (temp, pout);
+ 1147              		.loc 1 510 0
+ 1148 09d0 488B45E8 		movq	-24(%rbp), %rax
+ 1149 09d4 F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 1149      F0
+ 1150 09d9 4889C7   		movq	%rax, %rdi
+ 1151 09dc E83EF6FF 		call	CipherVecOut
+ 1151      FF
+ 1152              	.LBE4:
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1153              		.loc 1 503 0
+ 1154 09e1 488B45B8 		movq	-72(%rbp), %rax
+ 1155 09e5 8B4004   		movl	4(%rax), %eax
+ 1156 09e8 89C0     		mov	%eax, %eax
+ 1157 09ea 480145E0 		addq	%rax, -32(%rbp)
+ 1158 09ee 488B45B8 		movq	-72(%rbp), %rax
+ 1159 09f2 8B4004   		movl	4(%rax), %eax
+ 1160 09f5 89C0     		mov	%eax, %eax
+ 1161 09f7 480145E8 		addq	%rax, -24(%rbp)
+ 1162              	.L79:
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 1163              		.loc 1 502 0
+ 1164 09fb 837DA400 		cmpl	$0, -92(%rbp)
+ 1165 09ff 0F95C0   		setne	%al
+ 1166 0a02 836DA401 		subl	$1, -92(%rbp)
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1167              		.loc 1 501 0
+ 1168 0a06 84C0     		testb	%al, %al
+ 1169 0a08 758C     		jne	.L80
+ 511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1170              		.loc 1 513 0
+ 1171 0a0a 488B45B8 		movq	-72(%rbp), %rax
+ 1172 0a0e 488B4028 		movq	40(%rax), %rax
+ 1173 0a12 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 1173      D0
+ 1174 0a17 F30F7F00 		movdqu	%xmm0, (%rax)
+ 514:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1175              		.loc 1 515 0
+ 1176 0a1b B8000000 		movl	$0, %eax
+ 1176      00
+ 516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1177              		.loc 1 519 0
+ 1178 0a20 C9       		leave
+ 1179 0a21 C3       		ret
+
GAS LISTING /tmp/ccWvEaWW.s 			page 35
+
+
+ 1180              		.cfi_endproc
+ 1181              	.LFE621:
+ 1182              		.size	KCipherVecAesNiDecryptPcbc, .-KCipherVecAesNiDecryptPcbc
+ 1183              		.type	KCipherVecAesNiEncryptCfb, @function
+ 1184              	KCipherVecAesNiEncryptCfb:
+ 1185              	.LFB622:
+ 520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Cipher Feedback
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * CT = (FB = PT) ^ ENC (IV, EK))
+ 525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * PT = (FB = CT) ^ DEC (IV, DK)
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptCfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1186              		.loc 1 529 0
+ 1187              		.cfi_startproc
+ 1188 0a22 55       		pushq	%rbp
+ 1189              	.LCFI42:
+ 1190              		.cfi_def_cfa_offset 16
+ 1191 0a23 4889E5   		movq	%rsp, %rbp
+ 1192              		.cfi_offset 6, -16
+ 1193              	.LCFI43:
+ 1194              		.cfi_def_cfa_register 6
+ 1195 0a26 4883EC50 		subq	$80, %rsp
+ 1196 0a2a 48897DC8 		movq	%rdi, -56(%rbp)
+ 1197 0a2e 488975C0 		movq	%rsi, -64(%rbp)
+ 1198 0a32 488955B8 		movq	%rdx, -72(%rbp)
+ 1199 0a36 894DB4   		movl	%ecx, -76(%rbp)
+ 530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1200              		.loc 1 536 0
+ 1201 0a39 488B45C8 		movq	-56(%rbp), %rax
+ 1202 0a3d 488B4028 		movq	40(%rax), %rax
+ 1203 0a41 660F6F00 		movdqa	(%rax), %xmm0
+ 1204 0a45 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1204      E0
+ 537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1205              		.loc 1 538 0
+ 1206 0a4a 488B45C0 		movq	-64(%rbp), %rax
+ 1207 0a4e 488945F0 		movq	%rax, -16(%rbp)
+ 1208 0a52 488B45B8 		movq	-72(%rbp), %rax
+ 1209 0a56 488945F8 		movq	%rax, -8(%rbp)
+ 1210 0a5a EB65     		jmp	.L83
+ 1211              	.L84:
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec = CMEMBER(EncryptV1)(self, ivec); 
+ 1212              		.loc 1 542 0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 36
+
+
+ 1213 0a5c F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1213      E0
+ 1214 0a61 488B45C8 		movq	-56(%rbp), %rax
+ 1215 0a65 4889C7   		movq	%rax, %rdi
+ 1216 0a68 E8CDF9FF 		call	KCipherVecAesNiEncryptV1
+ 1216      FF
+ 1217 0a6d F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1217      E0
+ 543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CipherVecIn (pin);
+ 1218              		.loc 1 543 0
+ 1219 0a72 488B45F0 		movq	-16(%rbp), %rax
+ 1220 0a76 4889C7   		movq	%rax, %rdi
+ 1221 0a79 E882F5FF 		call	CipherVecIn
+ 1221      FF
+ 1222 0a7e F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1222      D0
+ 544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec ^= cv;
+ 1223              		.loc 1 544 0
+ 1224 0a83 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 1224      D0
+ 1225 0a88 F30F6F4D 		movdqu	-32(%rbp), %xmm1
+ 1225      E0
+ 1226 0a8d 660FEFC1 		pxor	%xmm1, %xmm0
+ 1227 0a91 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1227      E0
+ 545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (ivec, pout);
+ 1228              		.loc 1 545 0
+ 1229 0a96 488B45F8 		movq	-8(%rbp), %rax
+ 1230 0a9a F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1230      E0
+ 1231 0a9f 4889C7   		movq	%rax, %rdi
+ 1232 0aa2 E878F5FF 		call	CipherVecOut
+ 1232      FF
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1233              		.loc 1 540 0
+ 1234 0aa7 488B45C8 		movq	-56(%rbp), %rax
+ 1235 0aab 8B4004   		movl	4(%rax), %eax
+ 1236 0aae 89C0     		mov	%eax, %eax
+ 1237 0ab0 480145F0 		addq	%rax, -16(%rbp)
+ 1238 0ab4 488B45C8 		movq	-56(%rbp), %rax
+ 1239 0ab8 8B4004   		movl	4(%rax), %eax
+ 1240 0abb 89C0     		mov	%eax, %eax
+ 1241 0abd 480145F8 		addq	%rax, -8(%rbp)
+ 1242              	.L83:
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 1243              		.loc 1 539 0
+ 1244 0ac1 837DB400 		cmpl	$0, -76(%rbp)
+ 1245 0ac5 0F95C0   		setne	%al
+ 1246 0ac8 836DB401 		subl	$1, -76(%rbp)
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1247              		.loc 1 538 0
+ 1248 0acc 84C0     		testb	%al, %al
+ 1249 0ace 758C     		jne	.L84
+ 546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1250              		.loc 1 548 0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 37
+
+
+ 1251 0ad0 488B45C8 		movq	-56(%rbp), %rax
+ 1252 0ad4 488B4028 		movq	40(%rax), %rax
+ 1253 0ad8 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1253      E0
+ 1254 0add F30F7F00 		movdqu	%xmm0, (%rax)
+ 549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1255              		.loc 1 550 0
+ 1256 0ae1 B8000000 		movl	$0, %eax
+ 1256      00
+ 551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1257              		.loc 1 554 0
+ 1258 0ae6 C9       		leave
+ 1259 0ae7 C3       		ret
+ 1260              		.cfi_endproc
+ 1261              	.LFE622:
+ 1262              		.size	KCipherVecAesNiEncryptCfb, .-KCipherVecAesNiEncryptCfb
+ 1263              		.type	KCipherVecAesNiDecryptCfb, @function
+ 1264              	KCipherVecAesNiDecryptCfb:
+ 1265              	.LFB623:
+ 555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptCfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1266              		.loc 1 559 0
+ 1267              		.cfi_startproc
+ 1268 0ae8 55       		pushq	%rbp
+ 1269              	.LCFI44:
+ 1270              		.cfi_def_cfa_offset 16
+ 1271 0ae9 4889E5   		movq	%rsp, %rbp
+ 1272              		.cfi_offset 6, -16
+ 1273              	.LCFI45:
+ 1274              		.cfi_def_cfa_register 6
+ 1275 0aec 4883EC50 		subq	$80, %rsp
+ 1276 0af0 48897DC8 		movq	%rdi, -56(%rbp)
+ 1277 0af4 488975C0 		movq	%rsi, -64(%rbp)
+ 1278 0af8 488955B8 		movq	%rdx, -72(%rbp)
+ 1279 0afc 894DB4   		movl	%ecx, -76(%rbp)
+ 560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1280              		.loc 1 566 0
+ 1281 0aff 488B45C8 		movq	-56(%rbp), %rax
+ 1282 0b03 488B4028 		movq	40(%rax), %rax
+ 1283 0b07 660F6F00 		movdqa	(%rax), %xmm0
+ 1284 0b0b F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1284      E0
+ 567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+
GAS LISTING /tmp/ccWvEaWW.s 			page 38
+
+
+ 1285              		.loc 1 568 0
+ 1286 0b10 488B45C0 		movq	-64(%rbp), %rax
+ 1287 0b14 488945F0 		movq	%rax, -16(%rbp)
+ 1288 0b18 488B45B8 		movq	-72(%rbp), %rax
+ 1289 0b1c 488945F8 		movq	%rax, -8(%rbp)
+ 1290 0b20 EB65     		jmp	.L87
+ 1291              	.L88:
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CMEMBER(EncryptV1)(self, ivec); 
+ 1292              		.loc 1 572 0
+ 1293 0b22 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1293      E0
+ 1294 0b27 488B45C8 		movq	-56(%rbp), %rax
+ 1295 0b2b 4889C7   		movq	%rax, %rdi
+ 1296 0b2e E807F9FF 		call	KCipherVecAesNiEncryptV1
+ 1296      FF
+ 1297 0b33 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1297      D0
+ 573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec = CipherVecIn (pin);
+ 1298              		.loc 1 573 0
+ 1299 0b38 488B45F0 		movq	-16(%rbp), %rax
+ 1300 0b3c 4889C7   		movq	%rax, %rdi
+ 1301 0b3f E8BCF4FF 		call	CipherVecIn
+ 1301      FF
+ 1302 0b44 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1302      E0
+ 574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv ^= ivec;
+ 1303              		.loc 1 574 0
+ 1304 0b49 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1304      E0
+ 1305 0b4e F30F6F4D 		movdqu	-48(%rbp), %xmm1
+ 1305      D0
+ 1306 0b53 660FEFC1 		pxor	%xmm1, %xmm0
+ 1307 0b57 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1307      D0
+ 575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (cv, pout);
+ 1308              		.loc 1 575 0
+ 1309 0b5c 488B45F8 		movq	-8(%rbp), %rax
+ 1310 0b60 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 1310      D0
+ 1311 0b65 4889C7   		movq	%rax, %rdi
+ 1312 0b68 E8B2F4FF 		call	CipherVecOut
+ 1312      FF
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1313              		.loc 1 570 0
+ 1314 0b6d 488B45C8 		movq	-56(%rbp), %rax
+ 1315 0b71 8B4004   		movl	4(%rax), %eax
+ 1316 0b74 89C0     		mov	%eax, %eax
+ 1317 0b76 480145F0 		addq	%rax, -16(%rbp)
+ 1318 0b7a 488B45C8 		movq	-56(%rbp), %rax
+ 1319 0b7e 8B4004   		movl	4(%rax), %eax
+ 1320 0b81 89C0     		mov	%eax, %eax
+ 1321 0b83 480145F8 		addq	%rax, -8(%rbp)
+ 1322              	.L87:
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 39
+
+
+ 1323              		.loc 1 569 0
+ 1324 0b87 837DB400 		cmpl	$0, -76(%rbp)
+ 1325 0b8b 0F95C0   		setne	%al
+ 1326 0b8e 836DB401 		subl	$1, -76(%rbp)
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1327              		.loc 1 568 0
+ 1328 0b92 84C0     		testb	%al, %al
+ 1329 0b94 758C     		jne	.L88
+ 576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1330              		.loc 1 578 0
+ 1331 0b96 488B45C8 		movq	-56(%rbp), %rax
+ 1332 0b9a 488B4028 		movq	40(%rax), %rax
+ 1333 0b9e F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1333      E0
+ 1334 0ba3 F30F7F00 		movdqu	%xmm0, (%rax)
+ 579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1335              		.loc 1 580 0
+ 1336 0ba7 B8000000 		movl	$0, %eax
+ 1336      00
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1337              		.loc 1 584 0
+ 1338 0bac C9       		leave
+ 1339 0bad C3       		ret
+ 1340              		.cfi_endproc
+ 1341              	.LFE623:
+ 1342              		.size	KCipherVecAesNiDecryptCfb, .-KCipherVecAesNiDecryptCfb
+ 1343              		.type	KCipherVecAesNiEncryptOfb, @function
+ 1344              	KCipherVecAesNiEncryptOfb:
+ 1345              	.LFB624:
+ 585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Output Feedback
+ 589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * CT = PT ^ (FB = ENC (IV, EK))
+ 590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * PT = CT ^ (FB = DEC (IV, DK))
+ 591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptOfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1346              		.loc 1 594 0
+ 1347              		.cfi_startproc
+ 1348 0bae 55       		pushq	%rbp
+ 1349              	.LCFI46:
+ 1350              		.cfi_def_cfa_offset 16
+ 1351 0baf 4889E5   		movq	%rsp, %rbp
+ 1352              		.cfi_offset 6, -16
+ 1353              	.LCFI47:
+ 1354              		.cfi_def_cfa_register 6
+ 1355 0bb2 4883EC50 		subq	$80, %rsp
+ 1356 0bb6 48897DC8 		movq	%rdi, -56(%rbp)
+ 1357 0bba 488975C0 		movq	%rsi, -64(%rbp)
+
GAS LISTING /tmp/ccWvEaWW.s 			page 40
+
+
+ 1358 0bbe 488955B8 		movq	%rdx, -72(%rbp)
+ 1359 0bc2 894DB4   		movl	%ecx, -76(%rbp)
+ 595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1360              		.loc 1 601 0
+ 1361 0bc5 488B45C8 		movq	-56(%rbp), %rax
+ 1362 0bc9 488B4028 		movq	40(%rax), %rax
+ 1363 0bcd 660F6F00 		movdqa	(%rax), %xmm0
+ 1364 0bd1 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1364      E0
+ 602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1365              		.loc 1 603 0
+ 1366 0bd6 488B45C0 		movq	-64(%rbp), %rax
+ 1367 0bda 488945F0 		movq	%rax, -16(%rbp)
+ 1368 0bde 488B45B8 		movq	-72(%rbp), %rax
+ 1369 0be2 488945F8 		movq	%rax, -8(%rbp)
+ 1370 0be6 EB65     		jmp	.L91
+ 1371              	.L92:
+ 604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec = CMEMBER(EncryptV1)(self, ivec); 
+ 1372              		.loc 1 607 0
+ 1373 0be8 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1373      E0
+ 1374 0bed 488B45C8 		movq	-56(%rbp), %rax
+ 1375 0bf1 4889C7   		movq	%rax, %rdi
+ 1376 0bf4 E841F8FF 		call	KCipherVecAesNiEncryptV1
+ 1376      FF
+ 1377 0bf9 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1377      E0
+ 608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CipherVecIn (pin);
+ 1378              		.loc 1 608 0
+ 1379 0bfe 488B45F0 		movq	-16(%rbp), %rax
+ 1380 0c02 4889C7   		movq	%rax, %rdi
+ 1381 0c05 E8F6F3FF 		call	CipherVecIn
+ 1381      FF
+ 1382 0c0a F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1382      D0
+ 609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv ^= ivec;
+ 1383              		.loc 1 609 0
+ 1384 0c0f F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1384      E0
+ 1385 0c14 F30F6F4D 		movdqu	-48(%rbp), %xmm1
+ 1385      D0
+ 1386 0c19 660FEFC1 		pxor	%xmm1, %xmm0
+ 1387 0c1d F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1387      D0
+ 610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (cv, pout);
+ 1388              		.loc 1 610 0
+ 1389 0c22 488B45F8 		movq	-8(%rbp), %rax
+
GAS LISTING /tmp/ccWvEaWW.s 			page 41
+
+
+ 1390 0c26 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 1390      D0
+ 1391 0c2b 4889C7   		movq	%rax, %rdi
+ 1392 0c2e E8ECF3FF 		call	CipherVecOut
+ 1392      FF
+ 605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1393              		.loc 1 605 0
+ 1394 0c33 488B45C8 		movq	-56(%rbp), %rax
+ 1395 0c37 8B4004   		movl	4(%rax), %eax
+ 1396 0c3a 89C0     		mov	%eax, %eax
+ 1397 0c3c 480145F0 		addq	%rax, -16(%rbp)
+ 1398 0c40 488B45C8 		movq	-56(%rbp), %rax
+ 1399 0c44 8B4004   		movl	4(%rax), %eax
+ 1400 0c47 89C0     		mov	%eax, %eax
+ 1401 0c49 480145F8 		addq	%rax, -8(%rbp)
+ 1402              	.L91:
+ 604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 1403              		.loc 1 604 0
+ 1404 0c4d 837DB400 		cmpl	$0, -76(%rbp)
+ 1405 0c51 0F95C0   		setne	%al
+ 1406 0c54 836DB401 		subl	$1, -76(%rbp)
+ 603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1407              		.loc 1 603 0
+ 1408 0c58 84C0     		testb	%al, %al
+ 1409 0c5a 758C     		jne	.L92
+ 611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1410              		.loc 1 613 0
+ 1411 0c5c 488B45C8 		movq	-56(%rbp), %rax
+ 1412 0c60 488B4028 		movq	40(%rax), %rax
+ 1413 0c64 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1413      E0
+ 1414 0c69 F30F7F00 		movdqu	%xmm0, (%rax)
+ 614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1415              		.loc 1 615 0
+ 1416 0c6d B8000000 		movl	$0, %eax
+ 1416      00
+ 616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1417              		.loc 1 619 0
+ 1418 0c72 C9       		leave
+ 1419 0c73 C3       		ret
+ 1420              		.cfi_endproc
+ 1421              	.LFE624:
+ 1422              		.size	KCipherVecAesNiEncryptOfb, .-KCipherVecAesNiEncryptOfb
+ 1423              		.type	KCipherVecAesNiDecryptOfb, @function
+ 1424              	KCipherVecAesNiDecryptOfb:
+ 1425              	.LFB625:
+ 620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptOfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+
GAS LISTING /tmp/ccWvEaWW.s 			page 42
+
+
+ 1426              		.loc 1 624 0
+ 1427              		.cfi_startproc
+ 1428 0c74 55       		pushq	%rbp
+ 1429              	.LCFI48:
+ 1430              		.cfi_def_cfa_offset 16
+ 1431 0c75 4889E5   		movq	%rsp, %rbp
+ 1432              		.cfi_offset 6, -16
+ 1433              	.LCFI49:
+ 1434              		.cfi_def_cfa_register 6
+ 1435 0c78 53       		pushq	%rbx
+ 1436 0c79 4883EC28 		subq	$40, %rsp
+ 1437 0c7d 48897DE8 		movq	%rdi, -24(%rbp)
+ 1438 0c81 488975E0 		movq	%rsi, -32(%rbp)
+ 1439 0c85 488955D8 		movq	%rdx, -40(%rbp)
+ 1440 0c89 894DD4   		movl	%ecx, -44(%rbp)
+ 625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return CMEMBER(EncryptOfb)(self, in, out, block_count);
+ 1441              		.loc 1 625 0
+ 1442 0c8c 8B4DD4   		movl	-44(%rbp), %ecx
+ 1443 0c8f 488B55D8 		movq	-40(%rbp), %rdx
+ 1444 0c93 488B5DE0 		movq	-32(%rbp), %rbx
+ 1445              		.cfi_offset 3, -24
+ 1446 0c97 488B45E8 		movq	-24(%rbp), %rax
+ 1447 0c9b 4889DE   		movq	%rbx, %rsi
+ 1448 0c9e 4889C7   		movq	%rax, %rdi
+ 1449 0ca1 E808FFFF 		call	KCipherVecAesNiEncryptOfb
+ 1449      FF
+ 626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1450              		.loc 1 626 0
+ 1451 0ca6 4883C428 		addq	$40, %rsp
+ 1452 0caa 5B       		popq	%rbx
+ 1453 0cab C9       		leave
+ 1454 0cac C3       		ret
+ 1455              		.cfi_endproc
+ 1456              	.LFE625:
+ 1457              		.size	KCipherVecAesNiDecryptOfb, .-KCipherVecAesNiDecryptOfb
+ 1458              		.type	KCipherVecAesNiEncryptCtr, @function
+ 1459              	KCipherVecAesNiEncryptCtr:
+ 1460              	.LFB626:
+ 627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* Counter
+ 630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * IV is a nonce and not re-used as FB
+ 631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * CT = PT ^ ENC (N, EK)
+ 632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * PT = CT ^ ENC (N, DK) 
+ 633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Note decrypt is encrypt.
+ 634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * nonce is a function that given an iv generates the next iv
+ 635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptCtr) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1461              		.loc 1 638 0
+ 1462              		.cfi_startproc
+ 1463 0cad 55       		pushq	%rbp
+ 1464              	.LCFI50:
+ 1465              		.cfi_def_cfa_offset 16
+ 1466 0cae 4889E5   		movq	%rsp, %rbp
+ 1467              		.cfi_offset 6, -16
+
GAS LISTING /tmp/ccWvEaWW.s 			page 43
+
+
+ 1468              	.LCFI51:
+ 1469              		.cfi_def_cfa_register 6
+ 1470 0cb1 4883EC20 		subq	$32, %rsp
+ 1471 0cb5 48897DF8 		movq	%rdi, -8(%rbp)
+ 1472 0cb9 488975F0 		movq	%rsi, -16(%rbp)
+ 1473 0cbd 488955E8 		movq	%rdx, -24(%rbp)
+ 1474 0cc1 894DE4   		movl	%ecx, -28(%rbp)
+ 639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 1475              		.loc 1 639 0
+ 1476 0cc4 B97F0200 		movl	$639, %ecx
+ 1476      00
+ 1477 0cc9 488D1500 		leaq	__func__.7678(%rip), %rdx
+ 1477      000000
+ 1478 0cd0 488D3500 		leaq	.LC0(%rip), %rsi
+ 1478      000000
+ 1479 0cd7 BF030509 		movl	$-2029452029, %edi
+ 1479      87
+ 1480 0cdc E8000000 		call	SetRCFileFuncLine at PLT
+ 1480      00
+ 640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1481              		.loc 1 640 0
+ 1482 0ce1 C9       		leave
+ 1483 0ce2 C3       		ret
+ 1484              		.cfi_endproc
+ 1485              	.LFE626:
+ 1486              		.size	KCipherVecAesNiEncryptCtr, .-KCipherVecAesNiEncryptCtr
+ 1487              		.type	KCipherVecAesNiDecryptCtr, @function
+ 1488              	KCipherVecAesNiDecryptCtr:
+ 1489              	.LFB627:
+ 641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 643:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 644:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptCtr) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 645:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1490              		.loc 1 645 0
+ 1491              		.cfi_startproc
+ 1492 0ce3 55       		pushq	%rbp
+ 1493              	.LCFI52:
+ 1494              		.cfi_def_cfa_offset 16
+ 1495 0ce4 4889E5   		movq	%rsp, %rbp
+ 1496              		.cfi_offset 6, -16
+ 1497              	.LCFI53:
+ 1498              		.cfi_def_cfa_register 6
+ 1499 0ce7 4883EC20 		subq	$32, %rsp
+ 1500 0ceb 48897DF8 		movq	%rdi, -8(%rbp)
+ 1501 0cef 488975F0 		movq	%rsi, -16(%rbp)
+ 1502 0cf3 488955E8 		movq	%rdx, -24(%rbp)
+ 1503 0cf7 894DE4   		movl	%ecx, -28(%rbp)
+ 646:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 1504              		.loc 1 646 0
+ 1505 0cfa B9860200 		movl	$646, %ecx
+ 1505      00
+ 1506 0cff 488D1500 		leaq	__func__.7688(%rip), %rdx
+ 1506      000000
+ 1507 0d06 488D3500 		leaq	.LC0(%rip), %rsi
+ 1507      000000
+ 1508 0d0d BF030509 		movl	$-2029452029, %edi
+
GAS LISTING /tmp/ccWvEaWW.s 			page 44
+
+
+ 1508      87
+ 1509 0d12 E8000000 		call	SetRCFileFuncLine at PLT
+ 1509      00
+ 647:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1510              		.loc 1 647 0
+ 1511 0d17 C9       		leave
+ 1512 0d18 C3       		ret
+ 1513              		.cfi_endproc
+ 1514              	.LFE627:
+ 1515              		.size	KCipherVecAesNiDecryptCtr, .-KCipherVecAesNiDecryptCtr
+ 1516              		.section	.data.rel.local,"aw", at progbits
+ 1517              		.align 32
+ 1518              		.type	KCipherVecAesNi_vt_v1, @object
+ 1519              		.size	KCipherVecAesNi_vt_v1, 176
+ 1520              	KCipherVecAesNi_vt_v1:
+ 1521 0000 01000000 		.long	1
+ 1522 0004 00000000 		.long	0
+ 1523 0008 00000000 		.quad	KCipherVecAesNiDestroy
+ 1523      00000000 
+ 1524 0010 00000000 		.quad	KCipherVecAesNiSetEncryptKey
+ 1524      00000000 
+ 1525 0018 00000000 		.quad	KCipherVecAesNiSetDecryptKey
+ 1525      00000000 
+ 1526 0020 00000000 		.quad	KCipherVecAesNiSetEncryptIvec
+ 1526      00000000 
+ 1527 0028 00000000 		.quad	KCipherVecAesNiSetDecryptIvec
+ 1527      00000000 
+ 1528 0030 00000000 		.quad	KCipherVecAesNiSetEncryptCounterFunc
+ 1528      00000000 
+ 1529 0038 00000000 		.quad	KCipherVecAesNiSetDecryptCounterFunc
+ 1529      00000000 
+ 1530 0040 00000000 		.quad	KCipherVecAesNiEncrypt
+ 1530      00000000 
+ 1531 0048 00000000 		.quad	KCipherVecAesNiDecrypt
+ 1531      00000000 
+ 1532 0050 00000000 		.quad	KCipherVecAesNiEncryptEcb
+ 1532      00000000 
+ 1533 0058 00000000 		.quad	KCipherVecAesNiDecryptEcb
+ 1533      00000000 
+ 1534 0060 00000000 		.quad	KCipherVecAesNiEncryptCbc
+ 1534      00000000 
+ 1535 0068 00000000 		.quad	KCipherVecAesNiDecryptCbc
+ 1535      00000000 
+ 1536 0070 00000000 		.quad	KCipherVecAesNiEncryptPcbc
+ 1536      00000000 
+ 1537 0078 00000000 		.quad	KCipherVecAesNiDecryptPcbc
+ 1537      00000000 
+ 1538 0080 00000000 		.quad	KCipherVecAesNiEncryptCfb
+ 1538      00000000 
+ 1539 0088 00000000 		.quad	KCipherVecAesNiDecryptCfb
+ 1539      00000000 
+ 1540 0090 00000000 		.quad	KCipherVecAesNiEncryptOfb
+ 1540      00000000 
+ 1541 0098 00000000 		.quad	KCipherVecAesNiDecryptOfb
+ 1541      00000000 
+ 1542 00a0 00000000 		.quad	KCipherVecAesNiEncryptCtr
+ 1542      00000000 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 45
+
+
+ 1543 00a8 00000000 		.quad	KCipherVecAesNiDecryptCtr
+ 1543      00000000 
+ 1544              		.text
+ 1545              		.type	KCipherVecAesNiAllocAes, @function
+ 1546              	KCipherVecAesNiAllocAes:
+ 1547              	.LFB628:
+ 648:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** struct KCipher_vt_v1 CMEMBER(_vt_v1) =
+ 651:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 652:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     { 1, 0 },
+ 653:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 654:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(Destroy),
+ 655:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(SetEncryptKey),
+ 656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(SetDecryptKey),
+ 657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(SetEncryptIvec),
+ 658:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(SetDecryptIvec),
+ 659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(SetEncryptCounterFunc),
+ 660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(SetDecryptCounterFunc),
+ 661:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(Encrypt),
+ 662:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(Decrypt),
+ 663:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(EncryptEcb),
+ 664:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(DecryptEcb),
+ 665:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(EncryptCbc),
+ 666:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(DecryptCbc),
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(EncryptPcbc),
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(DecryptPcbc),
+ 669:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(EncryptCfb),
+ 670:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(DecryptCfb),
+ 671:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(EncryptOfb),
+ 672:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(DecryptOfb),
+ 673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(EncryptCtr),
+ 674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(DecryptCtr)
+ 675:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** };
+ 676:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 677:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 678:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 679:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(AllocAes)(CIPHER_IMPL ** pobj,
+ 680:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                        const KBlockCipher * block_cipher)
+ 681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1548              		.loc 1 681 0
+ 1549              		.cfi_startproc
+ 1550 0d19 55       		pushq	%rbp
+ 1551              	.LCFI54:
+ 1552              		.cfi_def_cfa_offset 16
+ 1553 0d1a 4889E5   		movq	%rsp, %rbp
+ 1554              		.cfi_offset 6, -16
+ 1555              	.LCFI55:
+ 1556              		.cfi_def_cfa_register 6
+ 1557 0d1d 4883EC20 		subq	$32, %rsp
+ 1558 0d21 48897DE8 		movq	%rdi, -24(%rbp)
+ 1559 0d25 488975E0 		movq	%rsi, -32(%rbp)
+ 682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherAes * obj;
+ 683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     obj = calloc (1, sizeof (*obj));
+ 1560              		.loc 1 684 0
+ 1561 0d29 BE700200 		movl	$624, %esi
+
GAS LISTING /tmp/ccWvEaWW.s 			page 46
+
+
+ 1561      00
+ 1562 0d2e BF010000 		movl	$1, %edi
+ 1562      00
+ 1563 0d33 E8000000 		call	calloc at PLT
+ 1563      00
+ 1564 0d38 488945F8 		movq	%rax, -8(%rbp)
+ 685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *pobj = (CIPHER_IMPL*)obj;
+ 1565              		.loc 1 685 0
+ 1566 0d3c 488B55F8 		movq	-8(%rbp), %rdx
+ 1567 0d40 488B45E8 		movq	-24(%rbp), %rax
+ 1568 0d44 488910   		movq	%rdx, (%rax)
+ 686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return (obj ? 0 : RC (rcKrypto, rcCipher, rcConstructing, rcMemory, rcExhausted));
+ 1569              		.loc 1 687 0
+ 1570 0d47 48837DF8 		cmpq	$0, -8(%rbp)
+ 1570      00
+ 1571 0d4c 751F     		jne	.L101
+ 1572 0d4e B9AF0200 		movl	$687, %ecx
+ 1572      00
+ 1573 0d53 488D1500 		leaq	__func__.7698(%rip), %rdx
+ 1573      000000
+ 1574 0d5a 488D3500 		leaq	.LC0(%rip), %rsi
+ 1574      000000
+ 1575 0d61 BF539000 		movl	$-2030006189, %edi
+ 1575      87
+ 1576 0d66 E8000000 		call	SetRCFileFuncLine at PLT
+ 1576      00
+ 1577 0d6b EB05     		jmp	.L102
+ 1578              	.L101:
+ 1579 0d6d B8000000 		movl	$0, %eax
+ 1579      00
+ 1580              	.L102:
+ 688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1581              		.loc 1 688 0
+ 1582 0d72 C9       		leave
+ 1583 0d73 C3       		ret
+ 1584              		.cfi_endproc
+ 1585              	.LFE628:
+ 1586              		.size	KCipherVecAesNiAllocAes, .-KCipherVecAesNiAllocAes
+ 1587              		.type	KCipherVecAesNiInitAes, @function
+ 1588              	KCipherVecAesNiInitAes:
+ 1589              	.LFB629:
+ 689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 691:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 692:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(InitAes) (CIPHER_IMPL * self,
+ 693:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                       const KBlockCipher * block_cipher)
+ 694:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1590              		.loc 1 694 0
+ 1591              		.cfi_startproc
+ 1592 0d74 55       		pushq	%rbp
+ 1593              	.LCFI56:
+ 1594              		.cfi_def_cfa_offset 16
+ 1595 0d75 4889E5   		movq	%rsp, %rbp
+ 1596              		.cfi_offset 6, -16
+ 1597              	.LCFI57:
+ 1598              		.cfi_def_cfa_register 6
+
GAS LISTING /tmp/ccWvEaWW.s 			page 47
+
+
+ 1599 0d78 4883EC20 		subq	$32, %rsp
+ 1600 0d7c 48897DE8 		movq	%rdi, -24(%rbp)
+ 1601 0d80 488975E0 		movq	%rsi, -32(%rbp)
+ 695:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     KCipher * dad = &self->dad;
+ 1602              		.loc 1 695 0
+ 1603 0d84 488B45E8 		movq	-24(%rbp), %rax
+ 1604 0d88 488945F0 		movq	%rax, -16(%rbp)
+ 696:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherAes * aes = (struct CipherAes*)self;
+ 1605              		.loc 1 696 0
+ 1606 0d8c 488B45E8 		movq	-24(%rbp), %rax
+ 1607 0d90 488945F8 		movq	%rax, -8(%rbp)
+ 697:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 698:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     KCipherInit (dad, sizeof (CipherVec),
+ 1608              		.loc 1 698 0
+ 1609 0d94 488B45F0 		movq	-16(%rbp), %rax
+ 1610 0d98 488B1500 		movq	KCipherVecAesNiClassName at GOTPCREL(%rip), %rdx
+ 1610      000000
+ 1611 0d9f 4889D1   		movq	%rdx, %rcx
+ 1612 0da2 488D1500 		leaq	KCipherVecAesNi_vt_v1(%rip), %rdx
+ 1612      000000
+ 1613 0da9 BE100000 		movl	$16, %esi
+ 1613      00
+ 1614 0dae 4889C7   		movq	%rax, %rdi
+ 1615 0db1 E8000000 		call	KCipherInit at PLT
+ 1615      00
+ 699:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                  (const KCipher_vt*)&CMEMBER(_vt_v1),
+ 700:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                  CMEMBER(ClassName));
+ 701:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 702:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->encrypt_key = &aes->e_key;
+ 1616              		.loc 1 702 0
+ 1617 0db6 488B45F8 		movq	-8(%rbp), %rax
+ 1618 0dba 488D5050 		leaq	80(%rax), %rdx
+ 1619 0dbe 488B45F0 		movq	-16(%rbp), %rax
+ 1620 0dc2 48895018 		movq	%rdx, 24(%rax)
+ 703:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->decrypt_key = &aes->d_key;
+ 1621              		.loc 1 703 0
+ 1622 0dc6 488B45F8 		movq	-8(%rbp), %rax
+ 1623 0dca 488D9050 		leaq	336(%rax), %rdx
+ 1623      010000
+ 1624 0dd1 488B45F0 		movq	-16(%rbp), %rax
+ 1625 0dd5 48895020 		movq	%rdx, 32(%rax)
+ 704:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->encrypt_ivec = &aes->e_ivec;
+ 1626              		.loc 1 704 0
+ 1627 0dd9 488B45F8 		movq	-8(%rbp), %rax
+ 1628 0ddd 488D9050 		leaq	592(%rax), %rdx
+ 1628      020000
+ 1629 0de4 488B45F0 		movq	-16(%rbp), %rax
+ 1630 0de8 48895028 		movq	%rdx, 40(%rax)
+ 705:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->decrypt_ivec = &aes->d_ivec;
+ 1631              		.loc 1 705 0
+ 1632 0dec 488B45F8 		movq	-8(%rbp), %rax
+ 1633 0df0 488D9060 		leaq	608(%rax), %rdx
+ 1633      020000
+ 1634 0df7 488B45F0 		movq	-16(%rbp), %rax
+ 1635 0dfb 48895030 		movq	%rdx, 48(%rax)
+ 706:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 707:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     self->block_cipher = &block_cipher->vec;
+
GAS LISTING /tmp/ccWvEaWW.s 			page 48
+
+
+ 1636              		.loc 1 707 0
+ 1637 0dff 488B55E0 		movq	-32(%rbp), %rdx
+ 1638 0e03 488B45E8 		movq	-24(%rbp), %rax
+ 1639 0e07 48895048 		movq	%rdx, 72(%rax)
+ 708:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 709:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1640              		.loc 1 709 0
+ 1641 0e0b B8000000 		movl	$0, %eax
+ 1641      00
+ 710:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1642              		.loc 1 710 0
+ 1643 0e10 C9       		leave
+ 1644 0e11 C3       		ret
+ 1645              		.cfi_endproc
+ 1646              	.LFE629:
+ 1647              		.size	KCipherVecAesNiInitAes, .-KCipherVecAesNiInitAes
+ 1648              		.type	KCipherVecAesNiAllocNull, @function
+ 1649              	KCipherVecAesNiAllocNull:
+ 1650              	.LFB630:
+ 711:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 712:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 713:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 714:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(AllocNull)(CIPHER_IMPL ** pobj,
+ 715:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                         const KBlockCipher * block_cipher)
+ 716:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1651              		.loc 1 716 0
+ 1652              		.cfi_startproc
+ 1653 0e12 55       		pushq	%rbp
+ 1654              	.LCFI58:
+ 1655              		.cfi_def_cfa_offset 16
+ 1656 0e13 4889E5   		movq	%rsp, %rbp
+ 1657              		.cfi_offset 6, -16
+ 1658              	.LCFI59:
+ 1659              		.cfi_def_cfa_register 6
+ 1660 0e16 4883EC20 		subq	$32, %rsp
+ 1661 0e1a 48897DE8 		movq	%rdi, -24(%rbp)
+ 1662 0e1e 488975E0 		movq	%rsi, -32(%rbp)
+ 717:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherNull * obj;
+ 718:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 719:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     obj = calloc (1, sizeof (*obj));
+ 1663              		.loc 1 719 0
+ 1664 0e22 BE700000 		movl	$112, %esi
+ 1664      00
+ 1665 0e27 BF010000 		movl	$1, %edi
+ 1665      00
+ 1666 0e2c E8000000 		call	calloc at PLT
+ 1666      00
+ 1667 0e31 488945F8 		movq	%rax, -8(%rbp)
+ 720:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *pobj = (CIPHER_IMPL*)obj;
+ 1668              		.loc 1 720 0
+ 1669 0e35 488B55F8 		movq	-8(%rbp), %rdx
+ 1670 0e39 488B45E8 		movq	-24(%rbp), %rax
+ 1671 0e3d 488910   		movq	%rdx, (%rax)
+ 721:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 722:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return (obj ? 0 : RC (rcKrypto, rcCipher, rcConstructing, rcMemory, rcExhausted));
+ 1672              		.loc 1 722 0
+ 1673 0e40 48837DF8 		cmpq	$0, -8(%rbp)
+
GAS LISTING /tmp/ccWvEaWW.s 			page 49
+
+
+ 1673      00
+ 1674 0e45 751F     		jne	.L107
+ 1675 0e47 B9D20200 		movl	$722, %ecx
+ 1675      00
+ 1676 0e4c 488D1500 		leaq	__func__.7725(%rip), %rdx
+ 1676      000000
+ 1677 0e53 488D3500 		leaq	.LC0(%rip), %rsi
+ 1677      000000
+ 1678 0e5a BF539000 		movl	$-2030006189, %edi
+ 1678      87
+ 1679 0e5f E8000000 		call	SetRCFileFuncLine at PLT
+ 1679      00
+ 1680 0e64 EB05     		jmp	.L108
+ 1681              	.L107:
+ 1682 0e66 B8000000 		movl	$0, %eax
+ 1682      00
+ 1683              	.L108:
+ 723:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1684              		.loc 1 723 0
+ 1685 0e6b C9       		leave
+ 1686 0e6c C3       		ret
+ 1687              		.cfi_endproc
+ 1688              	.LFE630:
+ 1689              		.size	KCipherVecAesNiAllocNull, .-KCipherVecAesNiAllocNull
+ 1690              		.type	KCipherVecAesNiInitNull, @function
+ 1691              	KCipherVecAesNiInitNull:
+ 1692              	.LFB631:
+ 724:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 725:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 726:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 727:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(InitNull) (CIPHER_IMPL * self,
+ 728:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                         const KBlockCipher * block_cipher)
+ 729:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1693              		.loc 1 729 0
+ 1694              		.cfi_startproc
+ 1695 0e6d 55       		pushq	%rbp
+ 1696              	.LCFI60:
+ 1697              		.cfi_def_cfa_offset 16
+ 1698 0e6e 4889E5   		movq	%rsp, %rbp
+ 1699              		.cfi_offset 6, -16
+ 1700              	.LCFI61:
+ 1701              		.cfi_def_cfa_register 6
+ 1702 0e71 4883EC20 		subq	$32, %rsp
+ 1703 0e75 48897DE8 		movq	%rdi, -24(%rbp)
+ 1704 0e79 488975E0 		movq	%rsi, -32(%rbp)
+ 730:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     KCipher * dad = &self->dad;
+ 1705              		.loc 1 730 0
+ 1706 0e7d 488B45E8 		movq	-24(%rbp), %rax
+ 1707 0e81 488945F0 		movq	%rax, -16(%rbp)
+ 731:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherNull * null = (CipherNull*)self;
+ 1708              		.loc 1 731 0
+ 1709 0e85 488B45E8 		movq	-24(%rbp), %rax
+ 1710 0e89 488945F8 		movq	%rax, -8(%rbp)
+ 732:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 733:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     KCipherInit (dad, sizeof (CipherVec),
+ 1711              		.loc 1 733 0
+ 1712 0e8d 488B45F0 		movq	-16(%rbp), %rax
+
GAS LISTING /tmp/ccWvEaWW.s 			page 50
+
+
+ 1713 0e91 488B1500 		movq	KCipherVecAesNiClassName at GOTPCREL(%rip), %rdx
+ 1713      000000
+ 1714 0e98 4889D1   		movq	%rdx, %rcx
+ 1715 0e9b 488D1500 		leaq	KCipherVecAesNi_vt_v1(%rip), %rdx
+ 1715      000000
+ 1716 0ea2 BE100000 		movl	$16, %esi
+ 1716      00
+ 1717 0ea7 4889C7   		movq	%rax, %rdi
+ 1718 0eaa E8000000 		call	KCipherInit at PLT
+ 1718      00
+ 734:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                  (const KCipher_vt*)&CMEMBER(_vt_v1),
+ 735:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                  CMEMBER(ClassName));
+ 736:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 737:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->encrypt_key = &null->e_ivec;
+ 1719              		.loc 1 737 0
+ 1720 0eaf 488B45F8 		movq	-8(%rbp), %rax
+ 1721 0eb3 488D5050 		leaq	80(%rax), %rdx
+ 1722 0eb7 488B45F0 		movq	-16(%rbp), %rax
+ 1723 0ebb 48895018 		movq	%rdx, 24(%rax)
+ 738:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->decrypt_key = &null->d_ivec;
+ 1724              		.loc 1 738 0
+ 1725 0ebf 488B45F8 		movq	-8(%rbp), %rax
+ 1726 0ec3 488D5060 		leaq	96(%rax), %rdx
+ 1727 0ec7 488B45F0 		movq	-16(%rbp), %rax
+ 1728 0ecb 48895020 		movq	%rdx, 32(%rax)
+ 739:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->encrypt_ivec = &null->e_ivec;
+ 1729              		.loc 1 739 0
+ 1730 0ecf 488B45F8 		movq	-8(%rbp), %rax
+ 1731 0ed3 488D5050 		leaq	80(%rax), %rdx
+ 1732 0ed7 488B45F0 		movq	-16(%rbp), %rax
+ 1733 0edb 48895028 		movq	%rdx, 40(%rax)
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->decrypt_ivec = &null->d_ivec;
+ 1734              		.loc 1 740 0
+ 1735 0edf 488B45F8 		movq	-8(%rbp), %rax
+ 1736 0ee3 488D5060 		leaq	96(%rax), %rdx
+ 1737 0ee7 488B45F0 		movq	-16(%rbp), %rax
+ 1738 0eeb 48895030 		movq	%rdx, 48(%rax)
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     self->block_cipher = &block_cipher->vec;
+ 1739              		.loc 1 742 0
+ 1740 0eef 488B55E0 		movq	-32(%rbp), %rdx
+ 1741 0ef3 488B45E8 		movq	-24(%rbp), %rax
+ 1742 0ef7 48895048 		movq	%rdx, 72(%rax)
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1743              		.loc 1 744 0
+ 1744 0efb B8000000 		movl	$0, %eax
+ 1744      00
+ 745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1745              		.loc 1 745 0
+ 1746 0f00 C9       		leave
+ 1747 0f01 C3       		ret
+ 1748              		.cfi_endproc
+ 1749              	.LFE631:
+ 1750              		.size	KCipherVecAesNiInitNull, .-KCipherVecAesNiInitNull
+ 1751              	.globl KCipherVecAesNiMake
+ 1752              		.type	KCipherVecAesNiMake, @function
+
GAS LISTING /tmp/ccWvEaWW.s 			page 51
+
+
+ 1753              	KCipherVecAesNiMake:
+ 1754              	.LFB632:
+ 746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(Make) (KCipher ** new_obj, kcipher_type type)
+ 749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1755              		.loc 1 749 0
+ 1756              		.cfi_startproc
+ 1757 0f02 55       		pushq	%rbp
+ 1758              	.LCFI62:
+ 1759              		.cfi_def_cfa_offset 16
+ 1760 0f03 4889E5   		movq	%rsp, %rbp
+ 1761              		.cfi_offset 6, -16
+ 1762              	.LCFI63:
+ 1763              		.cfi_def_cfa_register 6
+ 1764 0f06 4883EC30 		subq	$48, %rsp
+ 1765 0f0a 48897DD8 		movq	%rdi, -40(%rbp)
+ 1766 0f0e 8975D4   		movl	%esi, -44(%rbp)
+ 750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     rc_t rc;
+ 751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     KBlockCipher * block_cipher;
+ 752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     if (new_obj == NULL)
+ 1767              		.loc 1 753 0
+ 1768 0f11 48837DD8 		cmpq	$0, -40(%rbp)
+ 1768      00
+ 1769 0f16 7522     		jne	.L113
+ 754:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         return RC (rcKrypto, rcCipher, rcConstructing, rcSelf, rcNull);
+ 1770              		.loc 1 754 0
+ 1771 0f18 B9F20200 		movl	$754, %ecx
+ 1771      00
+ 1772 0f1d 488D1500 		leaq	__func__.7753(%rip), %rdx
+ 1772      000000
+ 1773 0f24 488D3500 		leaq	.LC0(%rip), %rsi
+ 1773      000000
+ 1774 0f2b BF878F00 		movl	$-2030006393, %edi
+ 1774      87
+ 1775 0f30 E8000000 		call	SetRCFileFuncLine at PLT
+ 1775      00
+ 1776 0f35 E9280100 		jmp	.L114
+ 1776      00
+ 1777              	.L113:
+ 755:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 756:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *new_obj = NULL;
+ 1778              		.loc 1 756 0
+ 1779 0f3a 488B45D8 		movq	-40(%rbp), %rax
+ 1780 0f3e 48C70000 		movq	$0, (%rax)
+ 1780      000000
+ 757:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 758:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     switch (type)
+ 1781              		.loc 1 758 0
+ 1782 0f45 8B45D4   		movl	-44(%rbp), %eax
+ 1783 0f48 85C0     		testl	%eax, %eax
+ 1784 0f4a 7427     		je	.L116
+ 1785 0f4c 83F801   		cmpl	$1, %eax
+ 1786 0f4f 7433     		je	.L117
+ 759:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 760:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     default:
+
GAS LISTING /tmp/ccWvEaWW.s 			page 52
+
+
+ 761:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         return RC (rcKrypto, rcCipher, rcConstructing, rcParam, rcInvalid);
+ 1787              		.loc 1 761 0
+ 1788 0f51 B9F90200 		movl	$761, %ecx
+ 1788      00
+ 1789 0f56 488D1500 		leaq	__func__.7753(%rip), %rdx
+ 1789      000000
+ 1790 0f5d 488D3500 		leaq	.LC0(%rip), %rsi
+ 1790      000000
+ 1791 0f64 BFCA8F00 		movl	$-2030006326, %edi
+ 1791      87
+ 1792 0f69 E8000000 		call	SetRCFileFuncLine at PLT
+ 1792      00
+ 1793 0f6e E9EF0000 		jmp	.L114
+ 1793      00
+ 1794              	.L116:
+ 762:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 763:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     case kcipher_null:
+ 764:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = NULLBCMEMBER(Make)(&block_cipher);
+ 1795              		.loc 1 764 0
+ 1796 0f73 488D45F0 		leaq	-16(%rbp), %rax
+ 1797 0f77 4889C7   		movq	%rax, %rdi
+ 1798 0f7a E8000000 		call	KNullBlockCipherVecAesNiMake at PLT
+ 1798      00
+ 1799 0f7f 8945FC   		movl	%eax, -4(%rbp)
+ 765:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 1800              		.loc 1 765 0
+ 1801 0f82 EB0F     		jmp	.L118
+ 1802              	.L117:
+ 766:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 767:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     case kcipher_AES:
+ 768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = AESBCMEMBER(Make)(&block_cipher);
+ 1803              		.loc 1 768 0
+ 1804 0f84 488D45F0 		leaq	-16(%rbp), %rax
+ 1805 0f88 4889C7   		movq	%rax, %rdi
+ 1806 0f8b E8000000 		call	KAESBlockCipherVecAesNiMake at PLT
+ 1806      00
+ 1807 0f90 8945FC   		movl	%eax, -4(%rbp)
+ 1808              	.L118:
+ 769:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 770:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 771:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 772:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     if (rc == 0)
+ 1809              		.loc 1 772 0
+ 1810 0f93 837DFC00 		cmpl	$0, -4(%rbp)
+ 1811 0f97 0F85C200 		jne	.L119
+ 1811      0000
+ 1812              	.LBB5:
+ 773:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 774:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CIPHER_IMPL * obj;
+ 775:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 776:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         switch (type)
+ 1813              		.loc 1 776 0
+ 1814 0f9d 8B45D4   		movl	-44(%rbp), %eax
+ 1815 0fa0 85C0     		testl	%eax, %eax
+ 1816 0fa2 740A     		je	.L120
+ 1817 0fa4 83F801   		cmpl	$1, %eax
+ 1818 0fa7 745F     		je	.L121
+
GAS LISTING /tmp/ccWvEaWW.s 			page 53
+
+
+ 1819 0fa9 E9B10000 		jmp	.L119
+ 1819      00
+ 1820              	.L120:
+ 777:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         {
+ 778:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         case kcipher_null:
+ 779:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             rc = CMEMBER(AllocNull) (&obj, block_cipher);
+ 1821              		.loc 1 779 0
+ 1822 0fae 488B55F0 		movq	-16(%rbp), %rdx
+ 1823 0fb2 488D45E8 		leaq	-24(%rbp), %rax
+ 1824 0fb6 4889D6   		movq	%rdx, %rsi
+ 1825 0fb9 4889C7   		movq	%rax, %rdi
+ 1826 0fbc E851FEFF 		call	KCipherVecAesNiAllocNull
+ 1826      FF
+ 1827 0fc1 8945FC   		movl	%eax, -4(%rbp)
+ 780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             if (rc == 0)
+ 1828              		.loc 1 780 0
+ 1829 0fc4 837DFC00 		cmpl	$0, -4(%rbp)
+ 1830 0fc8 0F859000 		jne	.L126
+ 1830      0000
+ 781:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             {
+ 782:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                 rc = CMEMBER(InitNull) (obj, block_cipher);
+ 1831              		.loc 1 782 0
+ 1832 0fce 488B55F0 		movq	-16(%rbp), %rdx
+ 1833 0fd2 488B45E8 		movq	-24(%rbp), %rax
+ 1834 0fd6 4889D6   		movq	%rdx, %rsi
+ 1835 0fd9 4889C7   		movq	%rax, %rdi
+ 1836 0fdc E88CFEFF 		call	KCipherVecAesNiInitNull
+ 1836      FF
+ 1837 0fe1 8945FC   		movl	%eax, -4(%rbp)
+ 783:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                 if (rc == 0)
+ 1838              		.loc 1 783 0
+ 1839 0fe4 837DFC00 		cmpl	$0, -4(%rbp)
+ 1840 0fe8 7510     		jne	.L123
+ 784:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                     *new_obj = (KCipher*)obj;
+ 1841              		.loc 1 784 0
+ 1842 0fea 488B45E8 		movq	-24(%rbp), %rax
+ 1843 0fee 4889C2   		movq	%rax, %rdx
+ 1844 0ff1 488B45D8 		movq	-40(%rbp), %rax
+ 1845 0ff5 488910   		movq	%rdx, (%rax)
+ 785:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                 else
+ 786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                     free (obj);
+ 787:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             }
+ 788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             break;
+ 1846              		.loc 1 788 0
+ 1847 0ff8 EB65     		jmp	.L119
+ 1848              	.L123:
+ 786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                     free (obj);
+ 1849              		.loc 1 786 0
+ 1850 0ffa 488B45E8 		movq	-24(%rbp), %rax
+ 1851 0ffe 4889C7   		movq	%rax, %rdi
+ 1852 1001 E8000000 		call	free at PLT
+ 1852      00
+ 1853              		.loc 1 788 0
+ 1854 1006 EB57     		jmp	.L119
+ 1855              	.L121:
+ 789:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         case kcipher_AES:
+ 790:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             rc = CMEMBER(AllocAes) (&obj, block_cipher);
+
GAS LISTING /tmp/ccWvEaWW.s 			page 54
+
+
+ 1856              		.loc 1 790 0
+ 1857 1008 488B55F0 		movq	-16(%rbp), %rdx
+ 1858 100c 488D45E8 		leaq	-24(%rbp), %rax
+ 1859 1010 4889D6   		movq	%rdx, %rsi
+ 1860 1013 4889C7   		movq	%rax, %rdi
+ 1861 1016 E8FEFCFF 		call	KCipherVecAesNiAllocAes
+ 1861      FF
+ 1862 101b 8945FC   		movl	%eax, -4(%rbp)
+ 791:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             if (rc == 0)
+ 1863              		.loc 1 791 0
+ 1864 101e 837DFC00 		cmpl	$0, -4(%rbp)
+ 1865 1022 753B     		jne	.L119
+ 792:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             {
+ 793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                 rc = CMEMBER(InitAes) (obj, block_cipher);
+ 1866              		.loc 1 793 0
+ 1867 1024 488B55F0 		movq	-16(%rbp), %rdx
+ 1868 1028 488B45E8 		movq	-24(%rbp), %rax
+ 1869 102c 4889D6   		movq	%rdx, %rsi
+ 1870 102f 4889C7   		movq	%rax, %rdi
+ 1871 1032 E83DFDFF 		call	KCipherVecAesNiInitAes
+ 1871      FF
+ 1872 1037 8945FC   		movl	%eax, -4(%rbp)
+ 794:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                 if (rc == 0)
+ 1873              		.loc 1 794 0
+ 1874 103a 837DFC00 		cmpl	$0, -4(%rbp)
+ 1875 103e 7510     		jne	.L124
+ 795:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                     *new_obj = (KCipher*)obj;
+ 1876              		.loc 1 795 0
+ 1877 1040 488B45E8 		movq	-24(%rbp), %rax
+ 1878 1044 4889C2   		movq	%rax, %rdx
+ 1879 1047 488B45D8 		movq	-40(%rbp), %rax
+ 1880 104b 488910   		movq	%rdx, (%rax)
+ 1881 104e EB0F     		jmp	.L119
+ 1882              	.L124:
+ 796:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                 else
+ 797:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                     free (obj);
+ 1883              		.loc 1 797 0
+ 1884 1050 488B45E8 		movq	-24(%rbp), %rax
+ 1885 1054 4889C7   		movq	%rax, %rdi
+ 1886 1057 E8000000 		call	free at PLT
+ 1886      00
+ 1887 105c EB01     		jmp	.L119
+ 1888              	.L126:
+ 788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             break;
+ 1889              		.loc 1 788 0
+ 1890 105e 90       		nop
+ 1891              	.L119:
+ 1892              	.LBE5:
+ 798:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             }
+ 799:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         default:
+ 800:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             /* can't really get here */
+ 801:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             break;
+ 802:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         }
+ 803:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return rc;
+ 1893              		.loc 1 804 0
+ 1894 105f 8B45FC   		movl	-4(%rbp), %eax
+
GAS LISTING /tmp/ccWvEaWW.s 			page 55
+
+
+ 1895              	.L114:
+ 805:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1896              		.loc 1 805 0
+ 1897 1062 C9       		leave
+ 1898 1063 C3       		ret
+ 1899              		.cfi_endproc
+ 1900              	.LFE632:
+ 1901              		.size	KCipherVecAesNiMake, .-KCipherVecAesNiMake
+ 1902              		.section	.rodata
+ 1903 006e 0000     		.align 16
+ 1904              		.type	__func__.7753, @object
+ 1905              		.size	__func__.7753, 20
+ 1906              	__func__.7753:
+ 1907 0070 4B436970 		.string	"KCipherVecAesNiMake"
+ 1907      68657256 
+ 1907      65634165 
+ 1907      734E694D 
+ 1907      616B6500 
+ 1908 0084 00000000 		.align 16
+ 1908      00000000 
+ 1908      00000000 
+ 1909              		.type	__PRETTY_FUNCTION__.7752, @object
+ 1910              		.size	__PRETTY_FUNCTION__.7752, 20
+ 1911              	__PRETTY_FUNCTION__.7752:
+ 1912 0090 4B436970 		.string	"KCipherVecAesNiMake"
+ 1912      68657256 
+ 1912      65634165 
+ 1912      734E694D 
+ 1912      616B6500 
+ 1913 00a4 00000000 		.align 16
+ 1913      00000000 
+ 1913      00000000 
+ 1914              		.type	__func__.7725, @object
+ 1915              		.size	__func__.7725, 25
+ 1916              	__func__.7725:
+ 1917 00b0 4B436970 		.string	"KCipherVecAesNiAllocNull"
+ 1917      68657256 
+ 1917      65634165 
+ 1917      734E6941 
+ 1917      6C6C6F63 
+ 1918 00c9 00000000 		.align 16
+ 1918      000000
+ 1919              		.type	__PRETTY_FUNCTION__.7724, @object
+ 1920              		.size	__PRETTY_FUNCTION__.7724, 25
+ 1921              	__PRETTY_FUNCTION__.7724:
+ 1922 00d0 4B436970 		.string	"KCipherVecAesNiAllocNull"
+ 1922      68657256 
+ 1922      65634165 
+ 1922      734E6941 
+ 1922      6C6C6F63 
+ 1923 00e9 00000000 		.align 16
+ 1923      000000
+ 1924              		.type	__func__.7698, @object
+ 1925              		.size	__func__.7698, 24
+ 1926              	__func__.7698:
+ 1927 00f0 4B436970 		.string	"KCipherVecAesNiAllocAes"
+ 1927      68657256 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 56
+
+
+ 1927      65634165 
+ 1927      734E6941 
+ 1927      6C6C6F63 
+ 1928 0108 00000000 		.align 16
+ 1928      00000000 
+ 1929              		.type	__PRETTY_FUNCTION__.7697, @object
+ 1930              		.size	__PRETTY_FUNCTION__.7697, 24
+ 1931              	__PRETTY_FUNCTION__.7697:
+ 1932 0110 4B436970 		.string	"KCipherVecAesNiAllocAes"
+ 1932      68657256 
+ 1932      65634165 
+ 1932      734E6941 
+ 1932      6C6C6F63 
+ 1933 0128 00000000 		.align 16
+ 1933      00000000 
+ 1934              		.type	__func__.7688, @object
+ 1935              		.size	__func__.7688, 26
+ 1936              	__func__.7688:
+ 1937 0130 4B436970 		.string	"KCipherVecAesNiDecryptCtr"
+ 1937      68657256 
+ 1937      65634165 
+ 1937      734E6944 
+ 1937      65637279 
+ 1938 014a 00000000 		.align 16
+ 1938      0000
+ 1939              		.type	__PRETTY_FUNCTION__.7687, @object
+ 1940              		.size	__PRETTY_FUNCTION__.7687, 26
+ 1941              	__PRETTY_FUNCTION__.7687:
+ 1942 0150 4B436970 		.string	"KCipherVecAesNiDecryptCtr"
+ 1942      68657256 
+ 1942      65634165 
+ 1942      734E6944 
+ 1942      65637279 
+ 1943 016a 00000000 		.align 16
+ 1943      0000
+ 1944              		.type	__func__.7678, @object
+ 1945              		.size	__func__.7678, 26
+ 1946              	__func__.7678:
+ 1947 0170 4B436970 		.string	"KCipherVecAesNiEncryptCtr"
+ 1947      68657256 
+ 1947      65634165 
+ 1947      734E6945 
+ 1947      6E637279 
+ 1948 018a 00000000 		.align 16
+ 1948      0000
+ 1949              		.type	__PRETTY_FUNCTION__.7677, @object
+ 1950              		.size	__PRETTY_FUNCTION__.7677, 26
+ 1951              	__PRETTY_FUNCTION__.7677:
+ 1952 0190 4B436970 		.string	"KCipherVecAesNiEncryptCtr"
+ 1952      68657256 
+ 1952      65634165 
+ 1952      734E6945 
+ 1952      6E637279 
+ 1953 01aa 00000000 		.align 16
+ 1953      0000
+ 1954              		.type	__func__.7444, @object
+ 1955              		.size	__func__.7444, 23
+
GAS LISTING /tmp/ccWvEaWW.s 			page 57
+
+
+ 1956              	__func__.7444:
+ 1957 01b0 4B436970 		.string	"KCipherVecAesNiDecrypt"
+ 1957      68657256 
+ 1957      65634165 
+ 1957      734E6944 
+ 1957      65637279 
+ 1958 01c7 00000000 		.align 16
+ 1958      00000000 
+ 1958      00
+ 1959              		.type	__PRETTY_FUNCTION__.7443, @object
+ 1960              		.size	__PRETTY_FUNCTION__.7443, 23
+ 1961              	__PRETTY_FUNCTION__.7443:
+ 1962 01d0 4B436970 		.string	"KCipherVecAesNiDecrypt"
+ 1962      68657256 
+ 1962      65634165 
+ 1962      734E6944 
+ 1962      65637279 
+ 1963 01e7 00000000 		.align 16
+ 1963      00000000 
+ 1963      00
+ 1964              		.type	__func__.7428, @object
+ 1965              		.size	__func__.7428, 23
+ 1966              	__func__.7428:
+ 1967 01f0 4B436970 		.string	"KCipherVecAesNiEncrypt"
+ 1967      68657256 
+ 1967      65634165 
+ 1967      734E6945 
+ 1967      6E637279 
+ 1968 0207 00000000 		.align 16
+ 1968      00000000 
+ 1968      00
+ 1969              		.type	__PRETTY_FUNCTION__.7427, @object
+ 1970              		.size	__PRETTY_FUNCTION__.7427, 23
+ 1971              	__PRETTY_FUNCTION__.7427:
+ 1972 0210 4B436970 		.string	"KCipherVecAesNiEncrypt"
+ 1972      68657256 
+ 1972      65634165 
+ 1972      734E6945 
+ 1972      6E637279 
+ 1973 0227 00000000 		.align 32
+ 1973      00000000 
+ 1973      00000000 
+ 1973      00000000 
+ 1973      00000000 
+ 1974              		.type	__PRETTY_FUNCTION__.7378, @object
+ 1975              		.size	__PRETTY_FUNCTION__.7378, 37
+ 1976              	__PRETTY_FUNCTION__.7378:
+ 1977 0240 4B436970 		.string	"KCipherVecAesNiSetDecryptCounterFunc"
+ 1977      68657256 
+ 1977      65634165 
+ 1977      734E6953 
+ 1977      65744465 
+ 1978 0265 00000000 		.align 32
+ 1978      00000000 
+ 1978      00000000 
+ 1978      00000000 
+ 1978      00000000 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 58
+
+
+ 1979              		.type	__PRETTY_FUNCTION__.7368, @object
+ 1980              		.size	__PRETTY_FUNCTION__.7368, 37
+ 1981              	__PRETTY_FUNCTION__.7368:
+ 1982 0280 4B436970 		.string	"KCipherVecAesNiSetEncryptCounterFunc"
+ 1982      68657256 
+ 1982      65634165 
+ 1982      734E6953 
+ 1982      6574456E 
+ 1983 02a5 00000000 		.align 16
+ 1983      00000000 
+ 1983      000000
+ 1984              		.type	__PRETTY_FUNCTION__.7355, @object
+ 1985              		.size	__PRETTY_FUNCTION__.7355, 30
+ 1986              	__PRETTY_FUNCTION__.7355:
+ 1987 02b0 4B436970 		.string	"KCipherVecAesNiSetDecryptIvec"
+ 1987      68657256 
+ 1987      65634165 
+ 1987      734E6953 
+ 1987      65744465 
+ 1988 02ce 0000     		.align 16
+ 1989              		.type	__PRETTY_FUNCTION__.7342, @object
+ 1990              		.size	__PRETTY_FUNCTION__.7342, 30
+ 1991              	__PRETTY_FUNCTION__.7342:
+ 1992 02d0 4B436970 		.string	"KCipherVecAesNiSetEncryptIvec"
+ 1992      68657256 
+ 1992      65634165 
+ 1992      734E6953 
+ 1992      6574456E 
+ 1993 02ee 0000     		.align 16
+ 1994              		.type	__PRETTY_FUNCTION__.7320, @object
+ 1995              		.size	__PRETTY_FUNCTION__.7320, 29
+ 1996              	__PRETTY_FUNCTION__.7320:
+ 1997 02f0 4B436970 		.string	"KCipherVecAesNiSetDecryptKey"
+ 1997      68657256 
+ 1997      65634165 
+ 1997      734E6953 
+ 1997      65744465 
+ 1998 030d 000000   		.align 16
+ 1999              		.type	__func__.7322, @object
+ 2000              		.size	__func__.7322, 29
+ 2001              	__func__.7322:
+ 2002 0310 4B436970 		.string	"KCipherVecAesNiSetDecryptKey"
+ 2002      68657256 
+ 2002      65634165 
+ 2002      734E6953 
+ 2002      65744465 
+ 2003 032d 000000   		.align 16
+ 2004              		.type	__PRETTY_FUNCTION__.7296, @object
+ 2005              		.size	__PRETTY_FUNCTION__.7296, 29
+ 2006              	__PRETTY_FUNCTION__.7296:
+ 2007 0330 4B436970 		.string	"KCipherVecAesNiSetEncryptKey"
+ 2007      68657256 
+ 2007      65634165 
+ 2007      734E6953 
+ 2007      6574456E 
+ 2008 034d 000000   		.align 16
+ 2009              		.type	__func__.7298, @object
+
GAS LISTING /tmp/ccWvEaWW.s 			page 59
+
+
+ 2010              		.size	__func__.7298, 29
+ 2011              	__func__.7298:
+ 2012 0350 4B436970 		.string	"KCipherVecAesNiSetEncryptKey"
+ 2012      68657256 
+ 2012      65634165 
+ 2012      734E6953 
+ 2012      6574456E 
+ 2013              		.text
+ 2014              	.Letext0:
+ 2015              		.section	.debug_loc,"", at progbits
+ 2016              	.Ldebug_loc0:
+ 2017              	.LLST0:
+ 2018 0000 00000000 		.quad	.LFB601-.Ltext0
+ 2018      00000000 
+ 2019 0008 01000000 		.quad	.LCFI0-.Ltext0
+ 2019      00000000 
+ 2020 0010 0200     		.value	0x2
+ 2021 0012 77       		.byte	0x77
+ 2022 0013 08       		.sleb128 8
+ 2023 0014 01000000 		.quad	.LCFI0-.Ltext0
+ 2023      00000000 
+ 2024 001c 04000000 		.quad	.LCFI1-.Ltext0
+ 2024      00000000 
+ 2025 0024 0200     		.value	0x2
+ 2026 0026 77       		.byte	0x77
+ 2027 0027 10       		.sleb128 16
+ 2028 0028 04000000 		.quad	.LCFI1-.Ltext0
+ 2028      00000000 
+ 2029 0030 1F000000 		.quad	.LFE601-.Ltext0
+ 2029      00000000 
+ 2030 0038 0200     		.value	0x2
+ 2031 003a 76       		.byte	0x76
+ 2032 003b 10       		.sleb128 16
+ 2033 003c 00000000 		.quad	0x0
+ 2033      00000000 
+ 2034 0044 00000000 		.quad	0x0
+ 2034      00000000 
+ 2035              	.LLST1:
+ 2036 004c 1F000000 		.quad	.LFB602-.Ltext0
+ 2036      00000000 
+ 2037 0054 20000000 		.quad	.LCFI2-.Ltext0
+ 2037      00000000 
+ 2038 005c 0200     		.value	0x2
+ 2039 005e 77       		.byte	0x77
+ 2040 005f 08       		.sleb128 8
+ 2041 0060 20000000 		.quad	.LCFI2-.Ltext0
+ 2041      00000000 
+ 2042 0068 23000000 		.quad	.LCFI3-.Ltext0
+ 2042      00000000 
+ 2043 0070 0200     		.value	0x2
+ 2044 0072 77       		.byte	0x77
+ 2045 0073 10       		.sleb128 16
+ 2046 0074 23000000 		.quad	.LCFI3-.Ltext0
+ 2046      00000000 
+ 2047 007c 48000000 		.quad	.LFE602-.Ltext0
+ 2047      00000000 
+ 2048 0084 0200     		.value	0x2
+
GAS LISTING /tmp/ccWvEaWW.s 			page 60
+
+
+ 2049 0086 76       		.byte	0x76
+ 2050 0087 10       		.sleb128 16
+ 2051 0088 00000000 		.quad	0x0
+ 2051      00000000 
+ 2052 0090 00000000 		.quad	0x0
+ 2052      00000000 
+ 2053              	.LLST2:
+ 2054 0098 48000000 		.quad	.LFB603-.Ltext0
+ 2054      00000000 
+ 2055 00a0 49000000 		.quad	.LCFI4-.Ltext0
+ 2055      00000000 
+ 2056 00a8 0200     		.value	0x2
+ 2057 00aa 77       		.byte	0x77
+ 2058 00ab 08       		.sleb128 8
+ 2059 00ac 49000000 		.quad	.LCFI4-.Ltext0
+ 2059      00000000 
+ 2060 00b4 4C000000 		.quad	.LCFI5-.Ltext0
+ 2060      00000000 
+ 2061 00bc 0200     		.value	0x2
+ 2062 00be 77       		.byte	0x77
+ 2063 00bf 10       		.sleb128 16
+ 2064 00c0 4C000000 		.quad	.LCFI5-.Ltext0
+ 2064      00000000 
+ 2065 00c8 82000000 		.quad	.LFE603-.Ltext0
+ 2065      00000000 
+ 2066 00d0 0200     		.value	0x2
+ 2067 00d2 76       		.byte	0x76
+ 2068 00d3 10       		.sleb128 16
+ 2069 00d4 00000000 		.quad	0x0
+ 2069      00000000 
+ 2070 00dc 00000000 		.quad	0x0
+ 2070      00000000 
+ 2071              	.LLST3:
+ 2072 00e4 82000000 		.quad	.LFB604-.Ltext0
+ 2072      00000000 
+ 2073 00ec 83000000 		.quad	.LCFI6-.Ltext0
+ 2073      00000000 
+ 2074 00f4 0200     		.value	0x2
+ 2075 00f6 77       		.byte	0x77
+ 2076 00f7 08       		.sleb128 8
+ 2077 00f8 83000000 		.quad	.LCFI6-.Ltext0
+ 2077      00000000 
+ 2078 0100 86000000 		.quad	.LCFI7-.Ltext0
+ 2078      00000000 
+ 2079 0108 0200     		.value	0x2
+ 2080 010a 77       		.byte	0x77
+ 2081 010b 10       		.sleb128 16
+ 2082 010c 86000000 		.quad	.LCFI7-.Ltext0
+ 2082      00000000 
+ 2083 0114 6C010000 		.quad	.LFE604-.Ltext0
+ 2083      00000000 
+ 2084 011c 0200     		.value	0x2
+ 2085 011e 76       		.byte	0x76
+ 2086 011f 10       		.sleb128 16
+ 2087 0120 00000000 		.quad	0x0
+ 2087      00000000 
+ 2088 0128 00000000 		.quad	0x0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 61
+
+
+ 2088      00000000 
+ 2089              	.LLST4:
+ 2090 0130 6C010000 		.quad	.LFB605-.Ltext0
+ 2090      00000000 
+ 2091 0138 6D010000 		.quad	.LCFI8-.Ltext0
+ 2091      00000000 
+ 2092 0140 0200     		.value	0x2
+ 2093 0142 77       		.byte	0x77
+ 2094 0143 08       		.sleb128 8
+ 2095 0144 6D010000 		.quad	.LCFI8-.Ltext0
+ 2095      00000000 
+ 2096 014c 70010000 		.quad	.LCFI9-.Ltext0
+ 2096      00000000 
+ 2097 0154 0200     		.value	0x2
+ 2098 0156 77       		.byte	0x77
+ 2099 0157 10       		.sleb128 16
+ 2100 0158 70010000 		.quad	.LCFI9-.Ltext0
+ 2100      00000000 
+ 2101 0160 56020000 		.quad	.LFE605-.Ltext0
+ 2101      00000000 
+ 2102 0168 0200     		.value	0x2
+ 2103 016a 76       		.byte	0x76
+ 2104 016b 10       		.sleb128 16
+ 2105 016c 00000000 		.quad	0x0
+ 2105      00000000 
+ 2106 0174 00000000 		.quad	0x0
+ 2106      00000000 
+ 2107              	.LLST5:
+ 2108 017c 56020000 		.quad	.LFB606-.Ltext0
+ 2108      00000000 
+ 2109 0184 57020000 		.quad	.LCFI10-.Ltext0
+ 2109      00000000 
+ 2110 018c 0200     		.value	0x2
+ 2111 018e 77       		.byte	0x77
+ 2112 018f 08       		.sleb128 8
+ 2113 0190 57020000 		.quad	.LCFI10-.Ltext0
+ 2113      00000000 
+ 2114 0198 5A020000 		.quad	.LCFI11-.Ltext0
+ 2114      00000000 
+ 2115 01a0 0200     		.value	0x2
+ 2116 01a2 77       		.byte	0x77
+ 2117 01a3 10       		.sleb128 16
+ 2118 01a4 5A020000 		.quad	.LCFI11-.Ltext0
+ 2118      00000000 
+ 2119 01ac D9020000 		.quad	.LFE606-.Ltext0
+ 2119      00000000 
+ 2120 01b4 0200     		.value	0x2
+ 2121 01b6 76       		.byte	0x76
+ 2122 01b7 10       		.sleb128 16
+ 2123 01b8 00000000 		.quad	0x0
+ 2123      00000000 
+ 2124 01c0 00000000 		.quad	0x0
+ 2124      00000000 
+ 2125              	.LLST6:
+ 2126 01c8 D9020000 		.quad	.LFB607-.Ltext0
+ 2126      00000000 
+ 2127 01d0 DA020000 		.quad	.LCFI12-.Ltext0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 62
+
+
+ 2127      00000000 
+ 2128 01d8 0200     		.value	0x2
+ 2129 01da 77       		.byte	0x77
+ 2130 01db 08       		.sleb128 8
+ 2131 01dc DA020000 		.quad	.LCFI12-.Ltext0
+ 2131      00000000 
+ 2132 01e4 DD020000 		.quad	.LCFI13-.Ltext0
+ 2132      00000000 
+ 2133 01ec 0200     		.value	0x2
+ 2134 01ee 77       		.byte	0x77
+ 2135 01ef 10       		.sleb128 16
+ 2136 01f0 DD020000 		.quad	.LCFI13-.Ltext0
+ 2136      00000000 
+ 2137 01f8 5C030000 		.quad	.LFE607-.Ltext0
+ 2137      00000000 
+ 2138 0200 0200     		.value	0x2
+ 2139 0202 76       		.byte	0x76
+ 2140 0203 10       		.sleb128 16
+ 2141 0204 00000000 		.quad	0x0
+ 2141      00000000 
+ 2142 020c 00000000 		.quad	0x0
+ 2142      00000000 
+ 2143              	.LLST7:
+ 2144 0214 5C030000 		.quad	.LFB608-.Ltext0
+ 2144      00000000 
+ 2145 021c 5D030000 		.quad	.LCFI14-.Ltext0
+ 2145      00000000 
+ 2146 0224 0200     		.value	0x2
+ 2147 0226 77       		.byte	0x77
+ 2148 0227 08       		.sleb128 8
+ 2149 0228 5D030000 		.quad	.LCFI14-.Ltext0
+ 2149      00000000 
+ 2150 0230 60030000 		.quad	.LCFI15-.Ltext0
+ 2150      00000000 
+ 2151 0238 0200     		.value	0x2
+ 2152 023a 77       		.byte	0x77
+ 2153 023b 10       		.sleb128 16
+ 2154 023c 60030000 		.quad	.LCFI15-.Ltext0
+ 2154      00000000 
+ 2155 0244 CB030000 		.quad	.LFE608-.Ltext0
+ 2155      00000000 
+ 2156 024c 0200     		.value	0x2
+ 2157 024e 76       		.byte	0x76
+ 2158 024f 10       		.sleb128 16
+ 2159 0250 00000000 		.quad	0x0
+ 2159      00000000 
+ 2160 0258 00000000 		.quad	0x0
+ 2160      00000000 
+ 2161              	.LLST8:
+ 2162 0260 CB030000 		.quad	.LFB609-.Ltext0
+ 2162      00000000 
+ 2163 0268 CC030000 		.quad	.LCFI16-.Ltext0
+ 2163      00000000 
+ 2164 0270 0200     		.value	0x2
+ 2165 0272 77       		.byte	0x77
+ 2166 0273 08       		.sleb128 8
+ 2167 0274 CC030000 		.quad	.LCFI16-.Ltext0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 63
+
+
+ 2167      00000000 
+ 2168 027c CF030000 		.quad	.LCFI17-.Ltext0
+ 2168      00000000 
+ 2169 0284 0200     		.value	0x2
+ 2170 0286 77       		.byte	0x77
+ 2171 0287 10       		.sleb128 16
+ 2172 0288 CF030000 		.quad	.LCFI17-.Ltext0
+ 2172      00000000 
+ 2173 0290 3A040000 		.quad	.LFE609-.Ltext0
+ 2173      00000000 
+ 2174 0298 0200     		.value	0x2
+ 2175 029a 76       		.byte	0x76
+ 2176 029b 10       		.sleb128 16
+ 2177 029c 00000000 		.quad	0x0
+ 2177      00000000 
+ 2178 02a4 00000000 		.quad	0x0
+ 2178      00000000 
+ 2179              	.LLST9:
+ 2180 02ac 3A040000 		.quad	.LFB610-.Ltext0
+ 2180      00000000 
+ 2181 02b4 3B040000 		.quad	.LCFI18-.Ltext0
+ 2181      00000000 
+ 2182 02bc 0200     		.value	0x2
+ 2183 02be 77       		.byte	0x77
+ 2184 02bf 08       		.sleb128 8
+ 2185 02c0 3B040000 		.quad	.LCFI18-.Ltext0
+ 2185      00000000 
+ 2186 02c8 3E040000 		.quad	.LCFI19-.Ltext0
+ 2186      00000000 
+ 2187 02d0 0200     		.value	0x2
+ 2188 02d2 77       		.byte	0x77
+ 2189 02d3 10       		.sleb128 16
+ 2190 02d4 3E040000 		.quad	.LCFI19-.Ltext0
+ 2190      00000000 
+ 2191 02dc 61040000 		.quad	.LFE610-.Ltext0
+ 2191      00000000 
+ 2192 02e4 0200     		.value	0x2
+ 2193 02e6 76       		.byte	0x76
+ 2194 02e7 10       		.sleb128 16
+ 2195 02e8 00000000 		.quad	0x0
+ 2195      00000000 
+ 2196 02f0 00000000 		.quad	0x0
+ 2196      00000000 
+ 2197              	.LLST10:
+ 2198 02f8 61040000 		.quad	.LFB611-.Ltext0
+ 2198      00000000 
+ 2199 0300 62040000 		.quad	.LCFI20-.Ltext0
+ 2199      00000000 
+ 2200 0308 0200     		.value	0x2
+ 2201 030a 77       		.byte	0x77
+ 2202 030b 08       		.sleb128 8
+ 2203 030c 62040000 		.quad	.LCFI20-.Ltext0
+ 2203      00000000 
+ 2204 0314 65040000 		.quad	.LCFI21-.Ltext0
+ 2204      00000000 
+ 2205 031c 0200     		.value	0x2
+ 2206 031e 77       		.byte	0x77
+
GAS LISTING /tmp/ccWvEaWW.s 			page 64
+
+
+ 2207 031f 10       		.sleb128 16
+ 2208 0320 65040000 		.quad	.LCFI21-.Ltext0
+ 2208      00000000 
+ 2209 0328 88040000 		.quad	.LFE611-.Ltext0
+ 2209      00000000 
+ 2210 0330 0200     		.value	0x2
+ 2211 0332 76       		.byte	0x76
+ 2212 0333 10       		.sleb128 16
+ 2213 0334 00000000 		.quad	0x0
+ 2213      00000000 
+ 2214 033c 00000000 		.quad	0x0
+ 2214      00000000 
+ 2215              	.LLST11:
+ 2216 0344 88040000 		.quad	.LFB612-.Ltext0
+ 2216      00000000 
+ 2217 034c 89040000 		.quad	.LCFI22-.Ltext0
+ 2217      00000000 
+ 2218 0354 0200     		.value	0x2
+ 2219 0356 77       		.byte	0x77
+ 2220 0357 08       		.sleb128 8
+ 2221 0358 89040000 		.quad	.LCFI22-.Ltext0
+ 2221      00000000 
+ 2222 0360 8C040000 		.quad	.LCFI23-.Ltext0
+ 2222      00000000 
+ 2223 0368 0200     		.value	0x2
+ 2224 036a 77       		.byte	0x77
+ 2225 036b 10       		.sleb128 16
+ 2226 036c 8C040000 		.quad	.LCFI23-.Ltext0
+ 2226      00000000 
+ 2227 0374 DB040000 		.quad	.LFE612-.Ltext0
+ 2227      00000000 
+ 2228 037c 0200     		.value	0x2
+ 2229 037e 76       		.byte	0x76
+ 2230 037f 10       		.sleb128 16
+ 2231 0380 00000000 		.quad	0x0
+ 2231      00000000 
+ 2232 0388 00000000 		.quad	0x0
+ 2232      00000000 
+ 2233              	.LLST12:
+ 2234 0390 DB040000 		.quad	.LFB613-.Ltext0
+ 2234      00000000 
+ 2235 0398 DC040000 		.quad	.LCFI24-.Ltext0
+ 2235      00000000 
+ 2236 03a0 0200     		.value	0x2
+ 2237 03a2 77       		.byte	0x77
+ 2238 03a3 08       		.sleb128 8
+ 2239 03a4 DC040000 		.quad	.LCFI24-.Ltext0
+ 2239      00000000 
+ 2240 03ac DF040000 		.quad	.LCFI25-.Ltext0
+ 2240      00000000 
+ 2241 03b4 0200     		.value	0x2
+ 2242 03b6 77       		.byte	0x77
+ 2243 03b7 10       		.sleb128 16
+ 2244 03b8 DF040000 		.quad	.LCFI25-.Ltext0
+ 2244      00000000 
+ 2245 03c0 2E050000 		.quad	.LFE613-.Ltext0
+ 2245      00000000 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 65
+
+
+ 2246 03c8 0200     		.value	0x2
+ 2247 03ca 76       		.byte	0x76
+ 2248 03cb 10       		.sleb128 16
+ 2249 03cc 00000000 		.quad	0x0
+ 2249      00000000 
+ 2250 03d4 00000000 		.quad	0x0
+ 2250      00000000 
+ 2251              	.LLST13:
+ 2252 03dc 2E050000 		.quad	.LFB614-.Ltext0
+ 2252      00000000 
+ 2253 03e4 2F050000 		.quad	.LCFI26-.Ltext0
+ 2253      00000000 
+ 2254 03ec 0200     		.value	0x2
+ 2255 03ee 77       		.byte	0x77
+ 2256 03ef 08       		.sleb128 8
+ 2257 03f0 2F050000 		.quad	.LCFI26-.Ltext0
+ 2257      00000000 
+ 2258 03f8 32050000 		.quad	.LCFI27-.Ltext0
+ 2258      00000000 
+ 2259 0400 0200     		.value	0x2
+ 2260 0402 77       		.byte	0x77
+ 2261 0403 10       		.sleb128 16
+ 2262 0404 32050000 		.quad	.LCFI27-.Ltext0
+ 2262      00000000 
+ 2263 040c 92050000 		.quad	.LFE614-.Ltext0
+ 2263      00000000 
+ 2264 0414 0200     		.value	0x2
+ 2265 0416 76       		.byte	0x76
+ 2266 0417 10       		.sleb128 16
+ 2267 0418 00000000 		.quad	0x0
+ 2267      00000000 
+ 2268 0420 00000000 		.quad	0x0
+ 2268      00000000 
+ 2269              	.LLST14:
+ 2270 0428 92050000 		.quad	.LFB615-.Ltext0
+ 2270      00000000 
+ 2271 0430 93050000 		.quad	.LCFI28-.Ltext0
+ 2271      00000000 
+ 2272 0438 0200     		.value	0x2
+ 2273 043a 77       		.byte	0x77
+ 2274 043b 08       		.sleb128 8
+ 2275 043c 93050000 		.quad	.LCFI28-.Ltext0
+ 2275      00000000 
+ 2276 0444 96050000 		.quad	.LCFI29-.Ltext0
+ 2276      00000000 
+ 2277 044c 0200     		.value	0x2
+ 2278 044e 77       		.byte	0x77
+ 2279 044f 10       		.sleb128 16
+ 2280 0450 96050000 		.quad	.LCFI29-.Ltext0
+ 2280      00000000 
+ 2281 0458 FD050000 		.quad	.LFE615-.Ltext0
+ 2281      00000000 
+ 2282 0460 0200     		.value	0x2
+ 2283 0462 76       		.byte	0x76
+ 2284 0463 10       		.sleb128 16
+ 2285 0464 00000000 		.quad	0x0
+ 2285      00000000 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 66
+
+
+ 2286 046c 00000000 		.quad	0x0
+ 2286      00000000 
+ 2287              	.LLST15:
+ 2288 0474 FD050000 		.quad	.LFB616-.Ltext0
+ 2288      00000000 
+ 2289 047c FE050000 		.quad	.LCFI30-.Ltext0
+ 2289      00000000 
+ 2290 0484 0200     		.value	0x2
+ 2291 0486 77       		.byte	0x77
+ 2292 0487 08       		.sleb128 8
+ 2293 0488 FE050000 		.quad	.LCFI30-.Ltext0
+ 2293      00000000 
+ 2294 0490 01060000 		.quad	.LCFI31-.Ltext0
+ 2294      00000000 
+ 2295 0498 0200     		.value	0x2
+ 2296 049a 77       		.byte	0x77
+ 2297 049b 10       		.sleb128 16
+ 2298 049c 01060000 		.quad	.LCFI31-.Ltext0
+ 2298      00000000 
+ 2299 04a4 6D060000 		.quad	.LFE616-.Ltext0
+ 2299      00000000 
+ 2300 04ac 0200     		.value	0x2
+ 2301 04ae 76       		.byte	0x76
+ 2302 04af 10       		.sleb128 16
+ 2303 04b0 00000000 		.quad	0x0
+ 2303      00000000 
+ 2304 04b8 00000000 		.quad	0x0
+ 2304      00000000 
+ 2305              	.LLST16:
+ 2306 04c0 6D060000 		.quad	.LFB617-.Ltext0
+ 2306      00000000 
+ 2307 04c8 6E060000 		.quad	.LCFI32-.Ltext0
+ 2307      00000000 
+ 2308 04d0 0200     		.value	0x2
+ 2309 04d2 77       		.byte	0x77
+ 2310 04d3 08       		.sleb128 8
+ 2311 04d4 6E060000 		.quad	.LCFI32-.Ltext0
+ 2311      00000000 
+ 2312 04dc 71060000 		.quad	.LCFI33-.Ltext0
+ 2312      00000000 
+ 2313 04e4 0200     		.value	0x2
+ 2314 04e6 77       		.byte	0x77
+ 2315 04e7 10       		.sleb128 16
+ 2316 04e8 71060000 		.quad	.LCFI33-.Ltext0
+ 2316      00000000 
+ 2317 04f0 DD060000 		.quad	.LFE617-.Ltext0
+ 2317      00000000 
+ 2318 04f8 0200     		.value	0x2
+ 2319 04fa 76       		.byte	0x76
+ 2320 04fb 10       		.sleb128 16
+ 2321 04fc 00000000 		.quad	0x0
+ 2321      00000000 
+ 2322 0504 00000000 		.quad	0x0
+ 2322      00000000 
+ 2323              	.LLST17:
+ 2324 050c DD060000 		.quad	.LFB618-.Ltext0
+ 2324      00000000 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 67
+
+
+ 2325 0514 DE060000 		.quad	.LCFI34-.Ltext0
+ 2325      00000000 
+ 2326 051c 0200     		.value	0x2
+ 2327 051e 77       		.byte	0x77
+ 2328 051f 08       		.sleb128 8
+ 2329 0520 DE060000 		.quad	.LCFI34-.Ltext0
+ 2329      00000000 
+ 2330 0528 E1060000 		.quad	.LCFI35-.Ltext0
+ 2330      00000000 
+ 2331 0530 0200     		.value	0x2
+ 2332 0532 77       		.byte	0x77
+ 2333 0533 10       		.sleb128 16
+ 2334 0534 E1060000 		.quad	.LCFI35-.Ltext0
+ 2334      00000000 
+ 2335 053c AB070000 		.quad	.LFE618-.Ltext0
+ 2335      00000000 
+ 2336 0544 0200     		.value	0x2
+ 2337 0546 76       		.byte	0x76
+ 2338 0547 10       		.sleb128 16
+ 2339 0548 00000000 		.quad	0x0
+ 2339      00000000 
+ 2340 0550 00000000 		.quad	0x0
+ 2340      00000000 
+ 2341              	.LLST18:
+ 2342 0558 AB070000 		.quad	.LFB619-.Ltext0
+ 2342      00000000 
+ 2343 0560 AC070000 		.quad	.LCFI36-.Ltext0
+ 2343      00000000 
+ 2344 0568 0200     		.value	0x2
+ 2345 056a 77       		.byte	0x77
+ 2346 056b 08       		.sleb128 8
+ 2347 056c AC070000 		.quad	.LCFI36-.Ltext0
+ 2347      00000000 
+ 2348 0574 AF070000 		.quad	.LCFI37-.Ltext0
+ 2348      00000000 
+ 2349 057c 0200     		.value	0x2
+ 2350 057e 77       		.byte	0x77
+ 2351 057f 10       		.sleb128 16
+ 2352 0580 AF070000 		.quad	.LCFI37-.Ltext0
+ 2352      00000000 
+ 2353 0588 7F080000 		.quad	.LFE619-.Ltext0
+ 2353      00000000 
+ 2354 0590 0200     		.value	0x2
+ 2355 0592 76       		.byte	0x76
+ 2356 0593 10       		.sleb128 16
+ 2357 0594 00000000 		.quad	0x0
+ 2357      00000000 
+ 2358 059c 00000000 		.quad	0x0
+ 2358      00000000 
+ 2359              	.LLST19:
+ 2360 05a4 7F080000 		.quad	.LFB620-.Ltext0
+ 2360      00000000 
+ 2361 05ac 80080000 		.quad	.LCFI38-.Ltext0
+ 2361      00000000 
+ 2362 05b4 0200     		.value	0x2
+ 2363 05b6 77       		.byte	0x77
+ 2364 05b7 08       		.sleb128 8
+
GAS LISTING /tmp/ccWvEaWW.s 			page 68
+
+
+ 2365 05b8 80080000 		.quad	.LCFI38-.Ltext0
+ 2365      00000000 
+ 2366 05c0 83080000 		.quad	.LCFI39-.Ltext0
+ 2366      00000000 
+ 2367 05c8 0200     		.value	0x2
+ 2368 05ca 77       		.byte	0x77
+ 2369 05cb 10       		.sleb128 16
+ 2370 05cc 83080000 		.quad	.LCFI39-.Ltext0
+ 2370      00000000 
+ 2371 05d4 5C090000 		.quad	.LFE620-.Ltext0
+ 2371      00000000 
+ 2372 05dc 0200     		.value	0x2
+ 2373 05de 76       		.byte	0x76
+ 2374 05df 10       		.sleb128 16
+ 2375 05e0 00000000 		.quad	0x0
+ 2375      00000000 
+ 2376 05e8 00000000 		.quad	0x0
+ 2376      00000000 
+ 2377              	.LLST20:
+ 2378 05f0 5C090000 		.quad	.LFB621-.Ltext0
+ 2378      00000000 
+ 2379 05f8 5D090000 		.quad	.LCFI40-.Ltext0
+ 2379      00000000 
+ 2380 0600 0200     		.value	0x2
+ 2381 0602 77       		.byte	0x77
+ 2382 0603 08       		.sleb128 8
+ 2383 0604 5D090000 		.quad	.LCFI40-.Ltext0
+ 2383      00000000 
+ 2384 060c 60090000 		.quad	.LCFI41-.Ltext0
+ 2384      00000000 
+ 2385 0614 0200     		.value	0x2
+ 2386 0616 77       		.byte	0x77
+ 2387 0617 10       		.sleb128 16
+ 2388 0618 60090000 		.quad	.LCFI41-.Ltext0
+ 2388      00000000 
+ 2389 0620 220A0000 		.quad	.LFE621-.Ltext0
+ 2389      00000000 
+ 2390 0628 0200     		.value	0x2
+ 2391 062a 76       		.byte	0x76
+ 2392 062b 10       		.sleb128 16
+ 2393 062c 00000000 		.quad	0x0
+ 2393      00000000 
+ 2394 0634 00000000 		.quad	0x0
+ 2394      00000000 
+ 2395              	.LLST21:
+ 2396 063c 220A0000 		.quad	.LFB622-.Ltext0
+ 2396      00000000 
+ 2397 0644 230A0000 		.quad	.LCFI42-.Ltext0
+ 2397      00000000 
+ 2398 064c 0200     		.value	0x2
+ 2399 064e 77       		.byte	0x77
+ 2400 064f 08       		.sleb128 8
+ 2401 0650 230A0000 		.quad	.LCFI42-.Ltext0
+ 2401      00000000 
+ 2402 0658 260A0000 		.quad	.LCFI43-.Ltext0
+ 2402      00000000 
+ 2403 0660 0200     		.value	0x2
+
GAS LISTING /tmp/ccWvEaWW.s 			page 69
+
+
+ 2404 0662 77       		.byte	0x77
+ 2405 0663 10       		.sleb128 16
+ 2406 0664 260A0000 		.quad	.LCFI43-.Ltext0
+ 2406      00000000 
+ 2407 066c E80A0000 		.quad	.LFE622-.Ltext0
+ 2407      00000000 
+ 2408 0674 0200     		.value	0x2
+ 2409 0676 76       		.byte	0x76
+ 2410 0677 10       		.sleb128 16
+ 2411 0678 00000000 		.quad	0x0
+ 2411      00000000 
+ 2412 0680 00000000 		.quad	0x0
+ 2412      00000000 
+ 2413              	.LLST22:
+ 2414 0688 E80A0000 		.quad	.LFB623-.Ltext0
+ 2414      00000000 
+ 2415 0690 E90A0000 		.quad	.LCFI44-.Ltext0
+ 2415      00000000 
+ 2416 0698 0200     		.value	0x2
+ 2417 069a 77       		.byte	0x77
+ 2418 069b 08       		.sleb128 8
+ 2419 069c E90A0000 		.quad	.LCFI44-.Ltext0
+ 2419      00000000 
+ 2420 06a4 EC0A0000 		.quad	.LCFI45-.Ltext0
+ 2420      00000000 
+ 2421 06ac 0200     		.value	0x2
+ 2422 06ae 77       		.byte	0x77
+ 2423 06af 10       		.sleb128 16
+ 2424 06b0 EC0A0000 		.quad	.LCFI45-.Ltext0
+ 2424      00000000 
+ 2425 06b8 AE0B0000 		.quad	.LFE623-.Ltext0
+ 2425      00000000 
+ 2426 06c0 0200     		.value	0x2
+ 2427 06c2 76       		.byte	0x76
+ 2428 06c3 10       		.sleb128 16
+ 2429 06c4 00000000 		.quad	0x0
+ 2429      00000000 
+ 2430 06cc 00000000 		.quad	0x0
+ 2430      00000000 
+ 2431              	.LLST23:
+ 2432 06d4 AE0B0000 		.quad	.LFB624-.Ltext0
+ 2432      00000000 
+ 2433 06dc AF0B0000 		.quad	.LCFI46-.Ltext0
+ 2433      00000000 
+ 2434 06e4 0200     		.value	0x2
+ 2435 06e6 77       		.byte	0x77
+ 2436 06e7 08       		.sleb128 8
+ 2437 06e8 AF0B0000 		.quad	.LCFI46-.Ltext0
+ 2437      00000000 
+ 2438 06f0 B20B0000 		.quad	.LCFI47-.Ltext0
+ 2438      00000000 
+ 2439 06f8 0200     		.value	0x2
+ 2440 06fa 77       		.byte	0x77
+ 2441 06fb 10       		.sleb128 16
+ 2442 06fc B20B0000 		.quad	.LCFI47-.Ltext0
+ 2442      00000000 
+ 2443 0704 740C0000 		.quad	.LFE624-.Ltext0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 70
+
+
+ 2443      00000000 
+ 2444 070c 0200     		.value	0x2
+ 2445 070e 76       		.byte	0x76
+ 2446 070f 10       		.sleb128 16
+ 2447 0710 00000000 		.quad	0x0
+ 2447      00000000 
+ 2448 0718 00000000 		.quad	0x0
+ 2448      00000000 
+ 2449              	.LLST24:
+ 2450 0720 740C0000 		.quad	.LFB625-.Ltext0
+ 2450      00000000 
+ 2451 0728 750C0000 		.quad	.LCFI48-.Ltext0
+ 2451      00000000 
+ 2452 0730 0200     		.value	0x2
+ 2453 0732 77       		.byte	0x77
+ 2454 0733 08       		.sleb128 8
+ 2455 0734 750C0000 		.quad	.LCFI48-.Ltext0
+ 2455      00000000 
+ 2456 073c 780C0000 		.quad	.LCFI49-.Ltext0
+ 2456      00000000 
+ 2457 0744 0200     		.value	0x2
+ 2458 0746 77       		.byte	0x77
+ 2459 0747 10       		.sleb128 16
+ 2460 0748 780C0000 		.quad	.LCFI49-.Ltext0
+ 2460      00000000 
+ 2461 0750 AD0C0000 		.quad	.LFE625-.Ltext0
+ 2461      00000000 
+ 2462 0758 0200     		.value	0x2
+ 2463 075a 76       		.byte	0x76
+ 2464 075b 10       		.sleb128 16
+ 2465 075c 00000000 		.quad	0x0
+ 2465      00000000 
+ 2466 0764 00000000 		.quad	0x0
+ 2466      00000000 
+ 2467              	.LLST25:
+ 2468 076c AD0C0000 		.quad	.LFB626-.Ltext0
+ 2468      00000000 
+ 2469 0774 AE0C0000 		.quad	.LCFI50-.Ltext0
+ 2469      00000000 
+ 2470 077c 0200     		.value	0x2
+ 2471 077e 77       		.byte	0x77
+ 2472 077f 08       		.sleb128 8
+ 2473 0780 AE0C0000 		.quad	.LCFI50-.Ltext0
+ 2473      00000000 
+ 2474 0788 B10C0000 		.quad	.LCFI51-.Ltext0
+ 2474      00000000 
+ 2475 0790 0200     		.value	0x2
+ 2476 0792 77       		.byte	0x77
+ 2477 0793 10       		.sleb128 16
+ 2478 0794 B10C0000 		.quad	.LCFI51-.Ltext0
+ 2478      00000000 
+ 2479 079c E30C0000 		.quad	.LFE626-.Ltext0
+ 2479      00000000 
+ 2480 07a4 0200     		.value	0x2
+ 2481 07a6 76       		.byte	0x76
+ 2482 07a7 10       		.sleb128 16
+ 2483 07a8 00000000 		.quad	0x0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 71
+
+
+ 2483      00000000 
+ 2484 07b0 00000000 		.quad	0x0
+ 2484      00000000 
+ 2485              	.LLST26:
+ 2486 07b8 E30C0000 		.quad	.LFB627-.Ltext0
+ 2486      00000000 
+ 2487 07c0 E40C0000 		.quad	.LCFI52-.Ltext0
+ 2487      00000000 
+ 2488 07c8 0200     		.value	0x2
+ 2489 07ca 77       		.byte	0x77
+ 2490 07cb 08       		.sleb128 8
+ 2491 07cc E40C0000 		.quad	.LCFI52-.Ltext0
+ 2491      00000000 
+ 2492 07d4 E70C0000 		.quad	.LCFI53-.Ltext0
+ 2492      00000000 
+ 2493 07dc 0200     		.value	0x2
+ 2494 07de 77       		.byte	0x77
+ 2495 07df 10       		.sleb128 16
+ 2496 07e0 E70C0000 		.quad	.LCFI53-.Ltext0
+ 2496      00000000 
+ 2497 07e8 190D0000 		.quad	.LFE627-.Ltext0
+ 2497      00000000 
+ 2498 07f0 0200     		.value	0x2
+ 2499 07f2 76       		.byte	0x76
+ 2500 07f3 10       		.sleb128 16
+ 2501 07f4 00000000 		.quad	0x0
+ 2501      00000000 
+ 2502 07fc 00000000 		.quad	0x0
+ 2502      00000000 
+ 2503              	.LLST27:
+ 2504 0804 190D0000 		.quad	.LFB628-.Ltext0
+ 2504      00000000 
+ 2505 080c 1A0D0000 		.quad	.LCFI54-.Ltext0
+ 2505      00000000 
+ 2506 0814 0200     		.value	0x2
+ 2507 0816 77       		.byte	0x77
+ 2508 0817 08       		.sleb128 8
+ 2509 0818 1A0D0000 		.quad	.LCFI54-.Ltext0
+ 2509      00000000 
+ 2510 0820 1D0D0000 		.quad	.LCFI55-.Ltext0
+ 2510      00000000 
+ 2511 0828 0200     		.value	0x2
+ 2512 082a 77       		.byte	0x77
+ 2513 082b 10       		.sleb128 16
+ 2514 082c 1D0D0000 		.quad	.LCFI55-.Ltext0
+ 2514      00000000 
+ 2515 0834 740D0000 		.quad	.LFE628-.Ltext0
+ 2515      00000000 
+ 2516 083c 0200     		.value	0x2
+ 2517 083e 76       		.byte	0x76
+ 2518 083f 10       		.sleb128 16
+ 2519 0840 00000000 		.quad	0x0
+ 2519      00000000 
+ 2520 0848 00000000 		.quad	0x0
+ 2520      00000000 
+ 2521              	.LLST28:
+ 2522 0850 740D0000 		.quad	.LFB629-.Ltext0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 72
+
+
+ 2522      00000000 
+ 2523 0858 750D0000 		.quad	.LCFI56-.Ltext0
+ 2523      00000000 
+ 2524 0860 0200     		.value	0x2
+ 2525 0862 77       		.byte	0x77
+ 2526 0863 08       		.sleb128 8
+ 2527 0864 750D0000 		.quad	.LCFI56-.Ltext0
+ 2527      00000000 
+ 2528 086c 780D0000 		.quad	.LCFI57-.Ltext0
+ 2528      00000000 
+ 2529 0874 0200     		.value	0x2
+ 2530 0876 77       		.byte	0x77
+ 2531 0877 10       		.sleb128 16
+ 2532 0878 780D0000 		.quad	.LCFI57-.Ltext0
+ 2532      00000000 
+ 2533 0880 120E0000 		.quad	.LFE629-.Ltext0
+ 2533      00000000 
+ 2534 0888 0200     		.value	0x2
+ 2535 088a 76       		.byte	0x76
+ 2536 088b 10       		.sleb128 16
+ 2537 088c 00000000 		.quad	0x0
+ 2537      00000000 
+ 2538 0894 00000000 		.quad	0x0
+ 2538      00000000 
+ 2539              	.LLST29:
+ 2540 089c 120E0000 		.quad	.LFB630-.Ltext0
+ 2540      00000000 
+ 2541 08a4 130E0000 		.quad	.LCFI58-.Ltext0
+ 2541      00000000 
+ 2542 08ac 0200     		.value	0x2
+ 2543 08ae 77       		.byte	0x77
+ 2544 08af 08       		.sleb128 8
+ 2545 08b0 130E0000 		.quad	.LCFI58-.Ltext0
+ 2545      00000000 
+ 2546 08b8 160E0000 		.quad	.LCFI59-.Ltext0
+ 2546      00000000 
+ 2547 08c0 0200     		.value	0x2
+ 2548 08c2 77       		.byte	0x77
+ 2549 08c3 10       		.sleb128 16
+ 2550 08c4 160E0000 		.quad	.LCFI59-.Ltext0
+ 2550      00000000 
+ 2551 08cc 6D0E0000 		.quad	.LFE630-.Ltext0
+ 2551      00000000 
+ 2552 08d4 0200     		.value	0x2
+ 2553 08d6 76       		.byte	0x76
+ 2554 08d7 10       		.sleb128 16
+ 2555 08d8 00000000 		.quad	0x0
+ 2555      00000000 
+ 2556 08e0 00000000 		.quad	0x0
+ 2556      00000000 
+ 2557              	.LLST30:
+ 2558 08e8 6D0E0000 		.quad	.LFB631-.Ltext0
+ 2558      00000000 
+ 2559 08f0 6E0E0000 		.quad	.LCFI60-.Ltext0
+ 2559      00000000 
+ 2560 08f8 0200     		.value	0x2
+ 2561 08fa 77       		.byte	0x77
+
GAS LISTING /tmp/ccWvEaWW.s 			page 73
+
+
+ 2562 08fb 08       		.sleb128 8
+ 2563 08fc 6E0E0000 		.quad	.LCFI60-.Ltext0
+ 2563      00000000 
+ 2564 0904 710E0000 		.quad	.LCFI61-.Ltext0
+ 2564      00000000 
+ 2565 090c 0200     		.value	0x2
+ 2566 090e 77       		.byte	0x77
+ 2567 090f 10       		.sleb128 16
+ 2568 0910 710E0000 		.quad	.LCFI61-.Ltext0
+ 2568      00000000 
+ 2569 0918 020F0000 		.quad	.LFE631-.Ltext0
+ 2569      00000000 
+ 2570 0920 0200     		.value	0x2
+ 2571 0922 76       		.byte	0x76
+ 2572 0923 10       		.sleb128 16
+ 2573 0924 00000000 		.quad	0x0
+ 2573      00000000 
+ 2574 092c 00000000 		.quad	0x0
+ 2574      00000000 
+ 2575              	.LLST31:
+ 2576 0934 020F0000 		.quad	.LFB632-.Ltext0
+ 2576      00000000 
+ 2577 093c 030F0000 		.quad	.LCFI62-.Ltext0
+ 2577      00000000 
+ 2578 0944 0200     		.value	0x2
+ 2579 0946 77       		.byte	0x77
+ 2580 0947 08       		.sleb128 8
+ 2581 0948 030F0000 		.quad	.LCFI62-.Ltext0
+ 2581      00000000 
+ 2582 0950 060F0000 		.quad	.LCFI63-.Ltext0
+ 2582      00000000 
+ 2583 0958 0200     		.value	0x2
+ 2584 095a 77       		.byte	0x77
+ 2585 095b 10       		.sleb128 16
+ 2586 095c 060F0000 		.quad	.LCFI63-.Ltext0
+ 2586      00000000 
+ 2587 0964 64100000 		.quad	.LFE632-.Ltext0
+ 2587      00000000 
+ 2588 096c 0200     		.value	0x2
+ 2589 096e 76       		.byte	0x76
+ 2590 096f 10       		.sleb128 16
+ 2591 0970 00000000 		.quad	0x0
+ 2591      00000000 
+ 2592 0978 00000000 		.quad	0x0
+ 2592      00000000 
+ 2593              		.file 2 "/usr/include/stdint.h"
+ 2594              		.file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+ 2595              		.file 4 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/atomic32.h"
+ 2596              		.file 5 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/refcount.h"
+ 2597              		.file 6 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/krypto/cipher.h"
+ 2598              		.file 7 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-impl.h"
+ 2599              		.file 8 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+ 2600              		.file 9 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 2601              		.file 10 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi-priv.h"
+ 2602              		.file 11 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi-priv.h"
+ 2603              		.file 12 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/krypto/ciphermgr.h"
+ 2604              		.file 13 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/debug.h"
+
GAS LISTING /tmp/ccWvEaWW.s 			page 74
+
+
+ 2605              		.file 14 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-priv.h"
+ 2606              		.file 15 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+ 2607              		.section	.debug_info
+ 2608 0000 4D1F0000 		.long	0x1f4d
+ 2609 0004 0200     		.value	0x2
+ 2610 0006 00000000 		.long	.Ldebug_abbrev0
+ 2611 000a 08       		.byte	0x8
+ 2612 000b 01       		.uleb128 0x1
+ 2613 000c 00000000 		.long	.LASF392
+ 2614 0010 01       		.byte	0x1
+ 2615 0011 00000000 		.long	.LASF393
+ 2616 0015 00000000 		.long	.LASF394
+ 2617 0019 00000000 		.quad	.Ltext0
+ 2617      00000000 
+ 2618 0021 00000000 		.quad	.Letext0
+ 2618      00000000 
+ 2619 0029 00000000 		.long	.Ldebug_line0
+ 2620 002d 02       		.uleb128 0x2
+ 2621 002e 01       		.byte	0x1
+ 2622 002f 06       		.byte	0x6
+ 2623 0030 00000000 		.long	.LASF0
+ 2624 0034 02       		.uleb128 0x2
+ 2625 0035 02       		.byte	0x2
+ 2626 0036 05       		.byte	0x5
+ 2627 0037 00000000 		.long	.LASF1
+ 2628 003b 03       		.uleb128 0x3
+ 2629 003c 04       		.byte	0x4
+ 2630 003d 05       		.byte	0x5
+ 2631 003e 696E7400 		.string	"int"
+ 2632 0042 02       		.uleb128 0x2
+ 2633 0043 08       		.byte	0x8
+ 2634 0044 05       		.byte	0x5
+ 2635 0045 00000000 		.long	.LASF2
+ 2636 0049 04       		.uleb128 0x4
+ 2637 004a 00000000 		.long	.LASF5
+ 2638 004e 02       		.byte	0x2
+ 2639 004f 31       		.byte	0x31
+ 2640 0050 54000000 		.long	0x54
+ 2641 0054 02       		.uleb128 0x2
+ 2642 0055 01       		.byte	0x1
+ 2643 0056 08       		.byte	0x8
+ 2644 0057 00000000 		.long	.LASF3
+ 2645 005b 02       		.uleb128 0x2
+ 2646 005c 02       		.byte	0x2
+ 2647 005d 07       		.byte	0x7
+ 2648 005e 00000000 		.long	.LASF4
+ 2649 0062 04       		.uleb128 0x4
+ 2650 0063 00000000 		.long	.LASF6
+ 2651 0067 02       		.byte	0x2
+ 2652 0068 34       		.byte	0x34
+ 2653 0069 6D000000 		.long	0x6d
+ 2654 006d 02       		.uleb128 0x2
+ 2655 006e 04       		.byte	0x4
+ 2656 006f 07       		.byte	0x7
+ 2657 0070 00000000 		.long	.LASF7
+ 2658 0074 02       		.uleb128 0x2
+ 2659 0075 08       		.byte	0x8
+
GAS LISTING /tmp/ccWvEaWW.s 			page 75
+
+
+ 2660 0076 07       		.byte	0x7
+ 2661 0077 00000000 		.long	.LASF8
+ 2662 007b 04       		.uleb128 0x4
+ 2663 007c 00000000 		.long	.LASF9
+ 2664 0080 03       		.byte	0x3
+ 2665 0081 30       		.byte	0x30
+ 2666 0082 62000000 		.long	0x62
+ 2667 0086 04       		.uleb128 0x4
+ 2668 0087 00000000 		.long	.LASF10
+ 2669 008b 04       		.byte	0x4
+ 2670 008c 27       		.byte	0x27
+ 2671 008d 91000000 		.long	0x91
+ 2672 0091 05       		.uleb128 0x5
+ 2673 0092 00000000 		.long	.LASF10
+ 2674 0096 04       		.byte	0x4
+ 2675 0097 04       		.byte	0x4
+ 2676 0098 27       		.byte	0x27
+ 2677 0099 AC000000 		.long	0xac
+ 2678 009d 06       		.uleb128 0x6
+ 2679 009e 00000000 		.long	.LASF34
+ 2680 00a2 04       		.byte	0x4
+ 2681 00a3 2A       		.byte	0x2a
+ 2682 00a4 AC000000 		.long	0xac
+ 2683 00a8 02       		.byte	0x2
+ 2684 00a9 23       		.byte	0x23
+ 2685 00aa 00       		.uleb128 0x0
+ 2686 00ab 00       		.byte	0x0
+ 2687 00ac 07       		.uleb128 0x7
+ 2688 00ad 3B000000 		.long	0x3b
+ 2689 00b1 08       		.uleb128 0x8
+ 2690 00b2 08       		.byte	0x8
+ 2691 00b3 07       		.byte	0x7
+ 2692 00b4 09       		.uleb128 0x9
+ 2693 00b5 08       		.byte	0x8
+ 2694 00b6 0A       		.uleb128 0xa
+ 2695 00b7 08       		.byte	0x8
+ 2696 00b8 BC000000 		.long	0xbc
+ 2697 00bc 0B       		.uleb128 0xb
+ 2698 00bd C1000000 		.long	0xc1
+ 2699 00c1 02       		.uleb128 0x2
+ 2700 00c2 01       		.byte	0x1
+ 2701 00c3 06       		.byte	0x6
+ 2702 00c4 00000000 		.long	.LASF11
+ 2703 00c8 0C       		.uleb128 0xc
+ 2704 00c9 04       		.byte	0x4
+ 2705 00ca 0D       		.byte	0xd
+ 2706 00cb D6       		.byte	0xd6
+ 2707 00cc 49010000 		.long	0x149
+ 2708 00d0 0D       		.uleb128 0xd
+ 2709 00d1 00000000 		.long	.LASF12
+ 2710 00d5 7F       		.sleb128 -1
+ 2711 00d6 0D       		.uleb128 0xd
+ 2712 00d7 00000000 		.long	.LASF13
+ 2713 00db 00       		.sleb128 0
+ 2714 00dc 0D       		.uleb128 0xd
+ 2715 00dd 00000000 		.long	.LASF14
+ 2716 00e1 01       		.sleb128 1
+
GAS LISTING /tmp/ccWvEaWW.s 			page 76
+
+
+ 2717 00e2 0D       		.uleb128 0xd
+ 2718 00e3 00000000 		.long	.LASF15
+ 2719 00e7 02       		.sleb128 2
+ 2720 00e8 0D       		.uleb128 0xd
+ 2721 00e9 00000000 		.long	.LASF16
+ 2722 00ed 03       		.sleb128 3
+ 2723 00ee 0D       		.uleb128 0xd
+ 2724 00ef 00000000 		.long	.LASF17
+ 2725 00f3 04       		.sleb128 4
+ 2726 00f4 0D       		.uleb128 0xd
+ 2727 00f5 00000000 		.long	.LASF18
+ 2728 00f9 05       		.sleb128 5
+ 2729 00fa 0D       		.uleb128 0xd
+ 2730 00fb 00000000 		.long	.LASF19
+ 2731 00ff 06       		.sleb128 6
+ 2732 0100 0D       		.uleb128 0xd
+ 2733 0101 00000000 		.long	.LASF20
+ 2734 0105 07       		.sleb128 7
+ 2735 0106 0D       		.uleb128 0xd
+ 2736 0107 00000000 		.long	.LASF21
+ 2737 010b 08       		.sleb128 8
+ 2738 010c 0D       		.uleb128 0xd
+ 2739 010d 00000000 		.long	.LASF22
+ 2740 0111 09       		.sleb128 9
+ 2741 0112 0D       		.uleb128 0xd
+ 2742 0113 00000000 		.long	.LASF23
+ 2743 0117 0A       		.sleb128 10
+ 2744 0118 0D       		.uleb128 0xd
+ 2745 0119 00000000 		.long	.LASF24
+ 2746 011d 0B       		.sleb128 11
+ 2747 011e 0D       		.uleb128 0xd
+ 2748 011f 00000000 		.long	.LASF25
+ 2749 0123 0C       		.sleb128 12
+ 2750 0124 0D       		.uleb128 0xd
+ 2751 0125 00000000 		.long	.LASF26
+ 2752 0129 0D       		.sleb128 13
+ 2753 012a 0D       		.uleb128 0xd
+ 2754 012b 00000000 		.long	.LASF27
+ 2755 012f 0E       		.sleb128 14
+ 2756 0130 0D       		.uleb128 0xd
+ 2757 0131 00000000 		.long	.LASF28
+ 2758 0135 0F       		.sleb128 15
+ 2759 0136 0D       		.uleb128 0xd
+ 2760 0137 00000000 		.long	.LASF29
+ 2761 013b 10       		.sleb128 16
+ 2762 013c 0D       		.uleb128 0xd
+ 2763 013d 00000000 		.long	.LASF30
+ 2764 0141 11       		.sleb128 17
+ 2765 0142 0D       		.uleb128 0xd
+ 2766 0143 00000000 		.long	.LASF31
+ 2767 0147 12       		.sleb128 18
+ 2768 0148 00       		.byte	0x0
+ 2769 0149 04       		.uleb128 0x4
+ 2770 014a 00000000 		.long	.LASF32
+ 2771 014e 05       		.byte	0x5
+ 2772 014f 42       		.byte	0x42
+ 2773 0150 86000000 		.long	0x86
+
GAS LISTING /tmp/ccWvEaWW.s 			page 77
+
+
+ 2774 0154 04       		.uleb128 0x4
+ 2775 0155 00000000 		.long	.LASF33
+ 2776 0159 06       		.byte	0x6
+ 2777 015a 20       		.byte	0x20
+ 2778 015b 5F010000 		.long	0x15f
+ 2779 015f 05       		.uleb128 0x5
+ 2780 0160 00000000 		.long	.LASF33
+ 2781 0164 48       		.byte	0x48
+ 2782 0165 06       		.byte	0x6
+ 2783 0166 20       		.byte	0x20
+ 2784 0167 F7010000 		.long	0x1f7
+ 2785 016b 06       		.uleb128 0x6
+ 2786 016c 00000000 		.long	.LASF35
+ 2787 0170 07       		.byte	0x7
+ 2788 0171 9A       		.byte	0x9a
+ 2789 0172 49010000 		.long	0x149
+ 2790 0176 02       		.byte	0x2
+ 2791 0177 23       		.byte	0x23
+ 2792 0178 00       		.uleb128 0x0
+ 2793 0179 06       		.uleb128 0x6
+ 2794 017a 00000000 		.long	.LASF36
+ 2795 017e 07       		.byte	0x7
+ 2796 017f 9B       		.byte	0x9b
+ 2797 0180 62000000 		.long	0x62
+ 2798 0184 02       		.byte	0x2
+ 2799 0185 23       		.byte	0x23
+ 2800 0186 04       		.uleb128 0x4
+ 2801 0187 0E       		.uleb128 0xe
+ 2802 0188 767400   		.string	"vt"
+ 2803 018b 07       		.byte	0x7
+ 2804 018c 9C       		.byte	0x9c
+ 2805 018d BC040000 		.long	0x4bc
+ 2806 0191 02       		.byte	0x2
+ 2807 0192 23       		.byte	0x23
+ 2808 0193 08       		.uleb128 0x8
+ 2809 0194 06       		.uleb128 0x6
+ 2810 0195 00000000 		.long	.LASF37
+ 2811 0199 07       		.byte	0x7
+ 2812 019a 9D       		.byte	0x9d
+ 2813 019b B6000000 		.long	0xb6
+ 2814 019f 02       		.byte	0x2
+ 2815 01a0 23       		.byte	0x23
+ 2816 01a1 10       		.uleb128 0x10
+ 2817 01a2 06       		.uleb128 0x6
+ 2818 01a3 00000000 		.long	.LASF38
+ 2819 01a7 07       		.byte	0x7
+ 2820 01a8 9E       		.byte	0x9e
+ 2821 01a9 B4000000 		.long	0xb4
+ 2822 01ad 02       		.byte	0x2
+ 2823 01ae 23       		.byte	0x23
+ 2824 01af 18       		.uleb128 0x18
+ 2825 01b0 06       		.uleb128 0x6
+ 2826 01b1 00000000 		.long	.LASF39
+ 2827 01b5 07       		.byte	0x7
+ 2828 01b6 9F       		.byte	0x9f
+ 2829 01b7 B4000000 		.long	0xb4
+ 2830 01bb 02       		.byte	0x2
+
GAS LISTING /tmp/ccWvEaWW.s 			page 78
+
+
+ 2831 01bc 23       		.byte	0x23
+ 2832 01bd 20       		.uleb128 0x20
+ 2833 01be 06       		.uleb128 0x6
+ 2834 01bf 00000000 		.long	.LASF40
+ 2835 01c3 07       		.byte	0x7
+ 2836 01c4 A0       		.byte	0xa0
+ 2837 01c5 B4000000 		.long	0xb4
+ 2838 01c9 02       		.byte	0x2
+ 2839 01ca 23       		.byte	0x23
+ 2840 01cb 28       		.uleb128 0x28
+ 2841 01cc 06       		.uleb128 0x6
+ 2842 01cd 00000000 		.long	.LASF41
+ 2843 01d1 07       		.byte	0x7
+ 2844 01d2 A1       		.byte	0xa1
+ 2845 01d3 B4000000 		.long	0xb4
+ 2846 01d7 02       		.byte	0x2
+ 2847 01d8 23       		.byte	0x23
+ 2848 01d9 30       		.uleb128 0x30
+ 2849 01da 06       		.uleb128 0x6
+ 2850 01db 00000000 		.long	.LASF42
+ 2851 01df 07       		.byte	0x7
+ 2852 01e0 A2       		.byte	0xa2
+ 2853 01e1 F7010000 		.long	0x1f7
+ 2854 01e5 02       		.byte	0x2
+ 2855 01e6 23       		.byte	0x23
+ 2856 01e7 38       		.uleb128 0x38
+ 2857 01e8 06       		.uleb128 0x6
+ 2858 01e9 00000000 		.long	.LASF43
+ 2859 01ed 07       		.byte	0x7
+ 2860 01ee A3       		.byte	0xa3
+ 2861 01ef F7010000 		.long	0x1f7
+ 2862 01f3 02       		.byte	0x2
+ 2863 01f4 23       		.byte	0x23
+ 2864 01f5 40       		.uleb128 0x40
+ 2865 01f6 00       		.byte	0x0
+ 2866 01f7 04       		.uleb128 0x4
+ 2867 01f8 00000000 		.long	.LASF44
+ 2868 01fc 06       		.byte	0x6
+ 2869 01fd 40       		.byte	0x40
+ 2870 01fe 02020000 		.long	0x202
+ 2871 0202 0A       		.uleb128 0xa
+ 2872 0203 08       		.byte	0x8
+ 2873 0204 08020000 		.long	0x208
+ 2874 0208 0F       		.uleb128 0xf
+ 2875 0209 01       		.byte	0x1
+ 2876 020a 14020000 		.long	0x214
+ 2877 020e 10       		.uleb128 0x10
+ 2878 020f B4000000 		.long	0xb4
+ 2879 0213 00       		.byte	0x0
+ 2880 0214 04       		.uleb128 0x4
+ 2881 0215 00000000 		.long	.LASF45
+ 2882 0219 07       		.byte	0x7
+ 2883 021a 2C       		.byte	0x2c
+ 2884 021b 1F020000 		.long	0x21f
+ 2885 021f 05       		.uleb128 0x5
+ 2886 0220 00000000 		.long	.LASF45
+ 2887 0224 50       		.byte	0x50
+
GAS LISTING /tmp/ccWvEaWW.s 			page 79
+
+
+ 2888 0225 07       		.byte	0x7
+ 2889 0226 2B       		.byte	0x2b
+ 2890 0227 48020000 		.long	0x248
+ 2891 022b 0E       		.uleb128 0xe
+ 2892 022c 64616400 		.string	"dad"
+ 2893 0230 01       		.byte	0x1
+ 2894 0231 3E       		.byte	0x3e
+ 2895 0232 54010000 		.long	0x154
+ 2896 0236 02       		.byte	0x2
+ 2897 0237 23       		.byte	0x23
+ 2898 0238 00       		.uleb128 0x0
+ 2899 0239 06       		.uleb128 0x6
+ 2900 023a 00000000 		.long	.LASF46
+ 2901 023e 01       		.byte	0x1
+ 2902 023f 3F       		.byte	0x3f
+ 2903 0240 5C070000 		.long	0x75c
+ 2904 0244 02       		.byte	0x2
+ 2905 0245 23       		.byte	0x23
+ 2906 0246 48       		.uleb128 0x48
+ 2907 0247 00       		.byte	0x0
+ 2908 0248 04       		.uleb128 0x4
+ 2909 0249 00000000 		.long	.LASF47
+ 2910 024d 07       		.byte	0x7
+ 2911 024e 2F       		.byte	0x2f
+ 2912 024f 53020000 		.long	0x253
+ 2913 0253 05       		.uleb128 0x5
+ 2914 0254 00000000 		.long	.LASF47
+ 2915 0258 08       		.byte	0x8
+ 2916 0259 07       		.byte	0x7
+ 2917 025a 2F       		.byte	0x2f
+ 2918 025b 7C020000 		.long	0x27c
+ 2919 025f 0E       		.uleb128 0xe
+ 2920 0260 6D616A00 		.string	"maj"
+ 2921 0264 07       		.byte	0x7
+ 2922 0265 32       		.byte	0x32
+ 2923 0266 62000000 		.long	0x62
+ 2924 026a 02       		.byte	0x2
+ 2925 026b 23       		.byte	0x23
+ 2926 026c 00       		.uleb128 0x0
+ 2927 026d 0E       		.uleb128 0xe
+ 2928 026e 6D696E00 		.string	"min"
+ 2929 0272 07       		.byte	0x7
+ 2930 0273 33       		.byte	0x33
+ 2931 0274 62000000 		.long	0x62
+ 2932 0278 02       		.byte	0x2
+ 2933 0279 23       		.byte	0x23
+ 2934 027a 04       		.uleb128 0x4
+ 2935 027b 00       		.byte	0x0
+ 2936 027c 04       		.uleb128 0x4
+ 2937 027d 00000000 		.long	.LASF48
+ 2938 0281 07       		.byte	0x7
+ 2939 0282 37       		.byte	0x37
+ 2940 0283 87020000 		.long	0x287
+ 2941 0287 05       		.uleb128 0x5
+ 2942 0288 00000000 		.long	.LASF48
+ 2943 028c B0       		.byte	0xb0
+ 2944 028d 07       		.byte	0x7
+
GAS LISTING /tmp/ccWvEaWW.s 			page 80
+
+
+ 2945 028e 37       		.byte	0x37
+ 2946 028f CE030000 		.long	0x3ce
+ 2947 0293 06       		.uleb128 0x6
+ 2948 0294 00000000 		.long	.LASF49
+ 2949 0298 07       		.byte	0x7
+ 2950 0299 3A       		.byte	0x3a
+ 2951 029a 48020000 		.long	0x248
+ 2952 029e 02       		.byte	0x2
+ 2953 029f 23       		.byte	0x23
+ 2954 02a0 00       		.uleb128 0x0
+ 2955 02a1 06       		.uleb128 0x6
+ 2956 02a2 00000000 		.long	.LASF50
+ 2957 02a6 07       		.byte	0x7
+ 2958 02a7 3E       		.byte	0x3e
+ 2959 02a8 E4030000 		.long	0x3e4
+ 2960 02ac 02       		.byte	0x2
+ 2961 02ad 23       		.byte	0x23
+ 2962 02ae 08       		.uleb128 0x8
+ 2963 02af 06       		.uleb128 0x6
+ 2964 02b0 00000000 		.long	.LASF51
+ 2965 02b4 07       		.byte	0x7
+ 2966 02b5 40       		.byte	0x40
+ 2967 02b6 04040000 		.long	0x404
+ 2968 02ba 02       		.byte	0x2
+ 2969 02bb 23       		.byte	0x23
+ 2970 02bc 10       		.uleb128 0x10
+ 2971 02bd 06       		.uleb128 0x6
+ 2972 02be 00000000 		.long	.LASF52
+ 2973 02c2 07       		.byte	0x7
+ 2974 02c3 44       		.byte	0x44
+ 2975 02c4 04040000 		.long	0x404
+ 2976 02c8 02       		.byte	0x2
+ 2977 02c9 23       		.byte	0x23
+ 2978 02ca 18       		.uleb128 0x18
+ 2979 02cb 06       		.uleb128 0x6
+ 2980 02cc 00000000 		.long	.LASF53
+ 2981 02d0 07       		.byte	0x7
+ 2982 02d1 48       		.byte	0x48
+ 2983 02d2 26040000 		.long	0x426
+ 2984 02d6 02       		.byte	0x2
+ 2985 02d7 23       		.byte	0x23
+ 2986 02d8 20       		.uleb128 0x20
+ 2987 02d9 06       		.uleb128 0x6
+ 2988 02da 00000000 		.long	.LASF54
+ 2989 02de 07       		.byte	0x7
+ 2990 02df 4B       		.byte	0x4b
+ 2991 02e0 26040000 		.long	0x426
+ 2992 02e4 02       		.byte	0x2
+ 2993 02e5 23       		.byte	0x23
+ 2994 02e6 28       		.uleb128 0x28
+ 2995 02e7 06       		.uleb128 0x6
+ 2996 02e8 00000000 		.long	.LASF55
+ 2997 02ec 07       		.byte	0x7
+ 2998 02ed 4E       		.byte	0x4e
+ 2999 02ee 41040000 		.long	0x441
+ 3000 02f2 02       		.byte	0x2
+ 3001 02f3 23       		.byte	0x23
+
GAS LISTING /tmp/ccWvEaWW.s 			page 81
+
+
+ 3002 02f4 30       		.uleb128 0x30
+ 3003 02f5 06       		.uleb128 0x6
+ 3004 02f6 00000000 		.long	.LASF56
+ 3005 02fa 07       		.byte	0x7
+ 3006 02fb 51       		.byte	0x51
+ 3007 02fc 41040000 		.long	0x441
+ 3008 0300 02       		.byte	0x2
+ 3009 0301 23       		.byte	0x23
+ 3010 0302 38       		.uleb128 0x38
+ 3011 0303 06       		.uleb128 0x6
+ 3012 0304 00000000 		.long	.LASF57
+ 3013 0308 07       		.byte	0x7
+ 3014 0309 55       		.byte	0x55
+ 3015 030a 6C040000 		.long	0x46c
+ 3016 030e 02       		.byte	0x2
+ 3017 030f 23       		.byte	0x23
+ 3018 0310 40       		.uleb128 0x40
+ 3019 0311 06       		.uleb128 0x6
+ 3020 0312 00000000 		.long	.LASF58
+ 3021 0316 07       		.byte	0x7
+ 3022 0317 58       		.byte	0x58
+ 3023 0318 6C040000 		.long	0x46c
+ 3024 031c 02       		.byte	0x2
+ 3025 031d 23       		.byte	0x23
+ 3026 031e 48       		.uleb128 0x48
+ 3027 031f 06       		.uleb128 0x6
+ 3028 0320 00000000 		.long	.LASF59
+ 3029 0324 07       		.byte	0x7
+ 3030 0325 5D       		.byte	0x5d
+ 3031 0326 91040000 		.long	0x491
+ 3032 032a 02       		.byte	0x2
+ 3033 032b 23       		.byte	0x23
+ 3034 032c 50       		.uleb128 0x50
+ 3035 032d 06       		.uleb128 0x6
+ 3036 032e 00000000 		.long	.LASF60
+ 3037 0332 07       		.byte	0x7
+ 3038 0333 62       		.byte	0x62
+ 3039 0334 91040000 		.long	0x491
+ 3040 0338 02       		.byte	0x2
+ 3041 0339 23       		.byte	0x23
+ 3042 033a 58       		.uleb128 0x58
+ 3043 033b 06       		.uleb128 0x6
+ 3044 033c 00000000 		.long	.LASF61
+ 3045 0340 07       		.byte	0x7
+ 3046 0341 68       		.byte	0x68
+ 3047 0342 B6040000 		.long	0x4b6
+ 3048 0346 02       		.byte	0x2
+ 3049 0347 23       		.byte	0x23
+ 3050 0348 60       		.uleb128 0x60
+ 3051 0349 06       		.uleb128 0x6
+ 3052 034a 00000000 		.long	.LASF62
+ 3053 034e 07       		.byte	0x7
+ 3054 034f 6C       		.byte	0x6c
+ 3055 0350 B6040000 		.long	0x4b6
+ 3056 0354 02       		.byte	0x2
+ 3057 0355 23       		.byte	0x23
+ 3058 0356 68       		.uleb128 0x68
+
GAS LISTING /tmp/ccWvEaWW.s 			page 82
+
+
+ 3059 0357 06       		.uleb128 0x6
+ 3060 0358 00000000 		.long	.LASF63
+ 3061 035c 07       		.byte	0x7
+ 3062 035d 72       		.byte	0x72
+ 3063 035e B6040000 		.long	0x4b6
+ 3064 0362 02       		.byte	0x2
+ 3065 0363 23       		.byte	0x23
+ 3066 0364 70       		.uleb128 0x70
+ 3067 0365 06       		.uleb128 0x6
+ 3068 0366 00000000 		.long	.LASF64
+ 3069 036a 07       		.byte	0x7
+ 3070 036b 74       		.byte	0x74
+ 3071 036c B6040000 		.long	0x4b6
+ 3072 0370 02       		.byte	0x2
+ 3073 0371 23       		.byte	0x23
+ 3074 0372 78       		.uleb128 0x78
+ 3075 0373 06       		.uleb128 0x6
+ 3076 0374 00000000 		.long	.LASF65
+ 3077 0378 07       		.byte	0x7
+ 3078 0379 78       		.byte	0x78
+ 3079 037a B6040000 		.long	0x4b6
+ 3080 037e 03       		.byte	0x3
+ 3081 037f 23       		.byte	0x23
+ 3082 0380 8001     		.uleb128 0x80
+ 3083 0382 06       		.uleb128 0x6
+ 3084 0383 00000000 		.long	.LASF66
+ 3085 0387 07       		.byte	0x7
+ 3086 0388 7A       		.byte	0x7a
+ 3087 0389 B6040000 		.long	0x4b6
+ 3088 038d 03       		.byte	0x3
+ 3089 038e 23       		.byte	0x23
+ 3090 038f 8801     		.uleb128 0x88
+ 3091 0391 06       		.uleb128 0x6
+ 3092 0392 00000000 		.long	.LASF67
+ 3093 0396 07       		.byte	0x7
+ 3094 0397 7E       		.byte	0x7e
+ 3095 0398 B6040000 		.long	0x4b6
+ 3096 039c 03       		.byte	0x3
+ 3097 039d 23       		.byte	0x23
+ 3098 039e 9001     		.uleb128 0x90
+ 3099 03a0 06       		.uleb128 0x6
+ 3100 03a1 00000000 		.long	.LASF68
+ 3101 03a5 07       		.byte	0x7
+ 3102 03a6 80       		.byte	0x80
+ 3103 03a7 B6040000 		.long	0x4b6
+ 3104 03ab 03       		.byte	0x3
+ 3105 03ac 23       		.byte	0x23
+ 3106 03ad 9801     		.uleb128 0x98
+ 3107 03af 06       		.uleb128 0x6
+ 3108 03b0 00000000 		.long	.LASF69
+ 3109 03b4 07       		.byte	0x7
+ 3110 03b5 84       		.byte	0x84
+ 3111 03b6 B6040000 		.long	0x4b6
+ 3112 03ba 03       		.byte	0x3
+ 3113 03bb 23       		.byte	0x23
+ 3114 03bc A001     		.uleb128 0xa0
+ 3115 03be 06       		.uleb128 0x6
+
GAS LISTING /tmp/ccWvEaWW.s 			page 83
+
+
+ 3116 03bf 00000000 		.long	.LASF70
+ 3117 03c3 07       		.byte	0x7
+ 3118 03c4 86       		.byte	0x86
+ 3119 03c5 B6040000 		.long	0x4b6
+ 3120 03c9 03       		.byte	0x3
+ 3121 03ca 23       		.byte	0x23
+ 3122 03cb A801     		.uleb128 0xa8
+ 3123 03cd 00       		.byte	0x0
+ 3124 03ce 11       		.uleb128 0x11
+ 3125 03cf 01       		.byte	0x1
+ 3126 03d0 7B000000 		.long	0x7b
+ 3127 03d4 DE030000 		.long	0x3de
+ 3128 03d8 10       		.uleb128 0x10
+ 3129 03d9 DE030000 		.long	0x3de
+ 3130 03dd 00       		.byte	0x0
+ 3131 03de 0A       		.uleb128 0xa
+ 3132 03df 08       		.byte	0x8
+ 3133 03e0 14020000 		.long	0x214
+ 3134 03e4 0A       		.uleb128 0xa
+ 3135 03e5 08       		.byte	0x8
+ 3136 03e6 CE030000 		.long	0x3ce
+ 3137 03ea 11       		.uleb128 0x11
+ 3138 03eb 01       		.byte	0x1
+ 3139 03ec 7B000000 		.long	0x7b
+ 3140 03f0 04040000 		.long	0x404
+ 3141 03f4 10       		.uleb128 0x10
+ 3142 03f5 DE030000 		.long	0x3de
+ 3143 03f9 10       		.uleb128 0x10
+ 3144 03fa B6000000 		.long	0xb6
+ 3145 03fe 10       		.uleb128 0x10
+ 3146 03ff 62000000 		.long	0x62
+ 3147 0403 00       		.byte	0x0
+ 3148 0404 0A       		.uleb128 0xa
+ 3149 0405 08       		.byte	0x8
+ 3150 0406 EA030000 		.long	0x3ea
+ 3151 040a 11       		.uleb128 0x11
+ 3152 040b 01       		.byte	0x1
+ 3153 040c 7B000000 		.long	0x7b
+ 3154 0410 1F040000 		.long	0x41f
+ 3155 0414 10       		.uleb128 0x10
+ 3156 0415 DE030000 		.long	0x3de
+ 3157 0419 10       		.uleb128 0x10
+ 3158 041a 1F040000 		.long	0x41f
+ 3159 041e 00       		.byte	0x0
+ 3160 041f 0A       		.uleb128 0xa
+ 3161 0420 08       		.byte	0x8
+ 3162 0421 25040000 		.long	0x425
+ 3163 0425 12       		.uleb128 0x12
+ 3164 0426 0A       		.uleb128 0xa
+ 3165 0427 08       		.byte	0x8
+ 3166 0428 0A040000 		.long	0x40a
+ 3167 042c 11       		.uleb128 0x11
+ 3168 042d 01       		.byte	0x1
+ 3169 042e 7B000000 		.long	0x7b
+ 3170 0432 41040000 		.long	0x441
+ 3171 0436 10       		.uleb128 0x10
+ 3172 0437 DE030000 		.long	0x3de
+
GAS LISTING /tmp/ccWvEaWW.s 			page 84
+
+
+ 3173 043b 10       		.uleb128 0x10
+ 3174 043c F7010000 		.long	0x1f7
+ 3175 0440 00       		.byte	0x0
+ 3176 0441 0A       		.uleb128 0xa
+ 3177 0442 08       		.byte	0x8
+ 3178 0443 2C040000 		.long	0x42c
+ 3179 0447 11       		.uleb128 0x11
+ 3180 0448 01       		.byte	0x1
+ 3181 0449 7B000000 		.long	0x7b
+ 3182 044d 61040000 		.long	0x461
+ 3183 0451 10       		.uleb128 0x10
+ 3184 0452 61040000 		.long	0x461
+ 3185 0456 10       		.uleb128 0x10
+ 3186 0457 1F040000 		.long	0x41f
+ 3187 045b 10       		.uleb128 0x10
+ 3188 045c B4000000 		.long	0xb4
+ 3189 0460 00       		.byte	0x0
+ 3190 0461 0A       		.uleb128 0xa
+ 3191 0462 08       		.byte	0x8
+ 3192 0463 67040000 		.long	0x467
+ 3193 0467 0B       		.uleb128 0xb
+ 3194 0468 14020000 		.long	0x214
+ 3195 046c 0A       		.uleb128 0xa
+ 3196 046d 08       		.byte	0x8
+ 3197 046e 47040000 		.long	0x447
+ 3198 0472 11       		.uleb128 0x11
+ 3199 0473 01       		.byte	0x1
+ 3200 0474 7B000000 		.long	0x7b
+ 3201 0478 91040000 		.long	0x491
+ 3202 047c 10       		.uleb128 0x10
+ 3203 047d 61040000 		.long	0x461
+ 3204 0481 10       		.uleb128 0x10
+ 3205 0482 1F040000 		.long	0x41f
+ 3206 0486 10       		.uleb128 0x10
+ 3207 0487 B4000000 		.long	0xb4
+ 3208 048b 10       		.uleb128 0x10
+ 3209 048c 62000000 		.long	0x62
+ 3210 0490 00       		.byte	0x0
+ 3211 0491 0A       		.uleb128 0xa
+ 3212 0492 08       		.byte	0x8
+ 3213 0493 72040000 		.long	0x472
+ 3214 0497 11       		.uleb128 0x11
+ 3215 0498 01       		.byte	0x1
+ 3216 0499 7B000000 		.long	0x7b
+ 3217 049d B6040000 		.long	0x4b6
+ 3218 04a1 10       		.uleb128 0x10
+ 3219 04a2 DE030000 		.long	0x3de
+ 3220 04a6 10       		.uleb128 0x10
+ 3221 04a7 1F040000 		.long	0x41f
+ 3222 04ab 10       		.uleb128 0x10
+ 3223 04ac B4000000 		.long	0xb4
+ 3224 04b0 10       		.uleb128 0x10
+ 3225 04b1 62000000 		.long	0x62
+ 3226 04b5 00       		.byte	0x0
+ 3227 04b6 0A       		.uleb128 0xa
+ 3228 04b7 08       		.byte	0x8
+ 3229 04b8 97040000 		.long	0x497
+
GAS LISTING /tmp/ccWvEaWW.s 			page 85
+
+
+ 3230 04bc 04       		.uleb128 0x4
+ 3231 04bd 00000000 		.long	.LASF71
+ 3232 04c1 07       		.byte	0x7
+ 3233 04c2 90       		.byte	0x90
+ 3234 04c3 C7040000 		.long	0x4c7
+ 3235 04c7 13       		.uleb128 0x13
+ 3236 04c8 00000000 		.long	.LASF71
+ 3237 04cc 08       		.byte	0x8
+ 3238 04cd 07       		.byte	0x7
+ 3239 04ce 90       		.byte	0x90
+ 3240 04cf E9040000 		.long	0x4e9
+ 3241 04d3 14       		.uleb128 0x14
+ 3242 04d4 00000000 		.long	.LASF49
+ 3243 04d8 07       		.byte	0x7
+ 3244 04d9 93       		.byte	0x93
+ 3245 04da E9040000 		.long	0x4e9
+ 3246 04de 15       		.uleb128 0x15
+ 3247 04df 763100   		.string	"v1"
+ 3248 04e2 07       		.byte	0x7
+ 3249 04e3 94       		.byte	0x94
+ 3250 04e4 F4040000 		.long	0x4f4
+ 3251 04e8 00       		.byte	0x0
+ 3252 04e9 0A       		.uleb128 0xa
+ 3253 04ea 08       		.byte	0x8
+ 3254 04eb EF040000 		.long	0x4ef
+ 3255 04ef 0B       		.uleb128 0xb
+ 3256 04f0 48020000 		.long	0x248
+ 3257 04f4 0A       		.uleb128 0xa
+ 3258 04f5 08       		.byte	0x8
+ 3259 04f6 FA040000 		.long	0x4fa
+ 3260 04fa 0B       		.uleb128 0xb
+ 3261 04fb 7C020000 		.long	0x27c
+ 3262 04ff 02       		.uleb128 0x2
+ 3263 0500 08       		.byte	0x8
+ 3264 0501 05       		.byte	0x5
+ 3265 0502 00000000 		.long	.LASF72
+ 3266 0506 02       		.uleb128 0x2
+ 3267 0507 04       		.byte	0x4
+ 3268 0508 04       		.byte	0x4
+ 3269 0509 00000000 		.long	.LASF73
+ 3270 050d 0A       		.uleb128 0xa
+ 3271 050e 08       		.byte	0x8
+ 3272 050f C1000000 		.long	0xc1
+ 3273 0513 02       		.uleb128 0x2
+ 3274 0514 08       		.byte	0x8
+ 3275 0515 07       		.byte	0x7
+ 3276 0516 00000000 		.long	.LASF74
+ 3277 051a 02       		.uleb128 0x2
+ 3278 051b 08       		.byte	0x8
+ 3279 051c 04       		.byte	0x4
+ 3280 051d 00000000 		.long	.LASF75
+ 3281 0521 04       		.uleb128 0x4
+ 3282 0522 00000000 		.long	.LASF76
+ 3283 0526 08       		.byte	0x8
+ 3284 0527 26       		.byte	0x26
+ 3285 0528 2C050000 		.long	0x52c
+ 3286 052c 16       		.uleb128 0x16
+
GAS LISTING /tmp/ccWvEaWW.s 			page 86
+
+
+ 3287 052d 01       		.byte	0x1
+ 3288 052e 49000000 		.long	0x49
+ 3289 0532 3D050000 		.long	0x53d
+ 3290 0536 17       		.uleb128 0x17
+ 3291 0537 B1000000 		.long	0xb1
+ 3292 053b 0F       		.byte	0xf
+ 3293 053c 00       		.byte	0x0
+ 3294 053d 04       		.uleb128 0x4
+ 3295 053e 00000000 		.long	.LASF77
+ 3296 0542 09       		.byte	0x9
+ 3297 0543 3B       		.byte	0x3b
+ 3298 0544 21050000 		.long	0x521
+ 3299 0548 04       		.uleb128 0x4
+ 3300 0549 00000000 		.long	.LASF78
+ 3301 054d 09       		.byte	0x9
+ 3302 054e 43       		.byte	0x43
+ 3303 054f 53050000 		.long	0x553
+ 3304 0553 05       		.uleb128 0x5
+ 3305 0554 00000000 		.long	.LASF78
+ 3306 0558 08       		.byte	0x8
+ 3307 0559 09       		.byte	0x9
+ 3308 055a 43       		.byte	0x43
+ 3309 055b 7C050000 		.long	0x57c
+ 3310 055f 0E       		.uleb128 0xe
+ 3311 0560 6D616A00 		.string	"maj"
+ 3312 0564 09       		.byte	0x9
+ 3313 0565 46       		.byte	0x46
+ 3314 0566 62000000 		.long	0x62
+ 3315 056a 02       		.byte	0x2
+ 3316 056b 23       		.byte	0x23
+ 3317 056c 00       		.uleb128 0x0
+ 3318 056d 0E       		.uleb128 0xe
+ 3319 056e 6D696E00 		.string	"min"
+ 3320 0572 09       		.byte	0x9
+ 3321 0573 47       		.byte	0x47
+ 3322 0574 62000000 		.long	0x62
+ 3323 0578 02       		.byte	0x2
+ 3324 0579 23       		.byte	0x23
+ 3325 057a 04       		.uleb128 0x4
+ 3326 057b 00       		.byte	0x0
+ 3327 057c 04       		.uleb128 0x4
+ 3328 057d 00000000 		.long	.LASF79
+ 3329 0581 09       		.byte	0x9
+ 3330 0582 52       		.byte	0x52
+ 3331 0583 87050000 		.long	0x587
+ 3332 0587 05       		.uleb128 0x5
+ 3333 0588 00000000 		.long	.LASF79
+ 3334 058c 40       		.byte	0x40
+ 3335 058d 09       		.byte	0x9
+ 3336 058e 52       		.byte	0x52
+ 3337 058f 04060000 		.long	0x604
+ 3338 0593 06       		.uleb128 0x6
+ 3339 0594 00000000 		.long	.LASF49
+ 3340 0598 09       		.byte	0x9
+ 3341 0599 5E       		.byte	0x5e
+ 3342 059a 48050000 		.long	0x548
+ 3343 059e 02       		.byte	0x2
+
GAS LISTING /tmp/ccWvEaWW.s 			page 87
+
+
+ 3344 059f 23       		.byte	0x23
+ 3345 05a0 00       		.uleb128 0x0
+ 3346 05a1 06       		.uleb128 0x6
+ 3347 05a2 00000000 		.long	.LASF50
+ 3348 05a6 09       		.byte	0x9
+ 3349 05a7 63       		.byte	0x63
+ 3350 05a8 48060000 		.long	0x648
+ 3351 05ac 02       		.byte	0x2
+ 3352 05ad 23       		.byte	0x23
+ 3353 05ae 08       		.uleb128 0x8
+ 3354 05af 06       		.uleb128 0x6
+ 3355 05b0 00000000 		.long	.LASF36
+ 3356 05b4 09       		.byte	0x9
+ 3357 05b5 65       		.byte	0x65
+ 3358 05b6 59060000 		.long	0x659
+ 3359 05ba 02       		.byte	0x2
+ 3360 05bb 23       		.byte	0x23
+ 3361 05bc 10       		.uleb128 0x10
+ 3362 05bd 06       		.uleb128 0x6
+ 3363 05be 00000000 		.long	.LASF80
+ 3364 05c2 09       		.byte	0x9
+ 3365 05c3 67       		.byte	0x67
+ 3366 05c4 59060000 		.long	0x659
+ 3367 05c8 02       		.byte	0x2
+ 3368 05c9 23       		.byte	0x23
+ 3369 05ca 18       		.uleb128 0x18
+ 3370 05cb 06       		.uleb128 0x6
+ 3371 05cc 00000000 		.long	.LASF51
+ 3372 05d0 09       		.byte	0x9
+ 3373 05d1 69       		.byte	0x69
+ 3374 05d2 79060000 		.long	0x679
+ 3375 05d6 02       		.byte	0x2
+ 3376 05d7 23       		.byte	0x23
+ 3377 05d8 20       		.uleb128 0x20
+ 3378 05d9 06       		.uleb128 0x6
+ 3379 05da 00000000 		.long	.LASF52
+ 3380 05de 09       		.byte	0x9
+ 3381 05df 6D       		.byte	0x6d
+ 3382 05e0 79060000 		.long	0x679
+ 3383 05e4 02       		.byte	0x2
+ 3384 05e5 23       		.byte	0x23
+ 3385 05e6 28       		.uleb128 0x28
+ 3386 05e7 06       		.uleb128 0x6
+ 3387 05e8 00000000 		.long	.LASF57
+ 3388 05ec 09       		.byte	0x9
+ 3389 05ed 71       		.byte	0x71
+ 3390 05ee 95060000 		.long	0x695
+ 3391 05f2 02       		.byte	0x2
+ 3392 05f3 23       		.byte	0x23
+ 3393 05f4 30       		.uleb128 0x30
+ 3394 05f5 06       		.uleb128 0x6
+ 3395 05f6 00000000 		.long	.LASF58
+ 3396 05fa 09       		.byte	0x9
+ 3397 05fb 75       		.byte	0x75
+ 3398 05fc 95060000 		.long	0x695
+ 3399 0600 02       		.byte	0x2
+ 3400 0601 23       		.byte	0x23
+
GAS LISTING /tmp/ccWvEaWW.s 			page 88
+
+
+ 3401 0602 38       		.uleb128 0x38
+ 3402 0603 00       		.byte	0x0
+ 3403 0604 04       		.uleb128 0x4
+ 3404 0605 00000000 		.long	.LASF81
+ 3405 0609 09       		.byte	0x9
+ 3406 060a 53       		.byte	0x53
+ 3407 060b 0F060000 		.long	0x60f
+ 3408 060f 13       		.uleb128 0x13
+ 3409 0610 00000000 		.long	.LASF81
+ 3410 0614 40       		.byte	0x40
+ 3411 0615 09       		.byte	0x9
+ 3412 0616 53       		.byte	0x53
+ 3413 0617 31060000 		.long	0x631
+ 3414 061b 14       		.uleb128 0x14
+ 3415 061c 00000000 		.long	.LASF49
+ 3416 0620 09       		.byte	0x9
+ 3417 0621 7F       		.byte	0x7f
+ 3418 0622 48050000 		.long	0x548
+ 3419 0626 15       		.uleb128 0x15
+ 3420 0627 763100   		.string	"v1"
+ 3421 062a 09       		.byte	0x9
+ 3422 062b 80       		.byte	0x80
+ 3423 062c 7C050000 		.long	0x57c
+ 3424 0630 00       		.byte	0x0
+ 3425 0631 0F       		.uleb128 0xf
+ 3426 0632 01       		.byte	0x1
+ 3427 0633 3D060000 		.long	0x63d
+ 3428 0637 10       		.uleb128 0x10
+ 3429 0638 3D060000 		.long	0x63d
+ 3430 063c 00       		.byte	0x0
+ 3431 063d 0A       		.uleb128 0xa
+ 3432 063e 08       		.byte	0x8
+ 3433 063f 43060000 		.long	0x643
+ 3434 0643 0B       		.uleb128 0xb
+ 3435 0644 04060000 		.long	0x604
+ 3436 0648 0A       		.uleb128 0xa
+ 3437 0649 08       		.byte	0x8
+ 3438 064a 31060000 		.long	0x631
+ 3439 064e 18       		.uleb128 0x18
+ 3440 064f 62000000 		.long	0x62
+ 3441 0653 59060000 		.long	0x659
+ 3442 0657 19       		.uleb128 0x19
+ 3443 0658 00       		.byte	0x0
+ 3444 0659 0A       		.uleb128 0xa
+ 3445 065a 08       		.byte	0x8
+ 3446 065b 4E060000 		.long	0x64e
+ 3447 065f 11       		.uleb128 0x11
+ 3448 0660 01       		.byte	0x1
+ 3449 0661 7B000000 		.long	0x7b
+ 3450 0665 79060000 		.long	0x679
+ 3451 0669 10       		.uleb128 0x10
+ 3452 066a B4000000 		.long	0xb4
+ 3453 066e 10       		.uleb128 0x10
+ 3454 066f B6000000 		.long	0xb6
+ 3455 0673 10       		.uleb128 0x10
+ 3456 0674 62000000 		.long	0x62
+ 3457 0678 00       		.byte	0x0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 89
+
+
+ 3458 0679 0A       		.uleb128 0xa
+ 3459 067a 08       		.byte	0x8
+ 3460 067b 5F060000 		.long	0x65f
+ 3461 067f 0F       		.uleb128 0xf
+ 3462 0680 01       		.byte	0x1
+ 3463 0681 95060000 		.long	0x695
+ 3464 0685 10       		.uleb128 0x10
+ 3465 0686 B6000000 		.long	0xb6
+ 3466 068a 10       		.uleb128 0x10
+ 3467 068b 0D050000 		.long	0x50d
+ 3468 068f 10       		.uleb128 0x10
+ 3469 0690 1F040000 		.long	0x41f
+ 3470 0694 00       		.byte	0x0
+ 3471 0695 0A       		.uleb128 0xa
+ 3472 0696 08       		.byte	0x8
+ 3473 0697 7F060000 		.long	0x67f
+ 3474 069b 04       		.uleb128 0x4
+ 3475 069c 00000000 		.long	.LASF82
+ 3476 06a0 09       		.byte	0x9
+ 3477 06a1 84       		.byte	0x84
+ 3478 06a2 A6060000 		.long	0x6a6
+ 3479 06a6 05       		.uleb128 0x5
+ 3480 06a7 00000000 		.long	.LASF82
+ 3481 06ab 40       		.byte	0x40
+ 3482 06ac 09       		.byte	0x9
+ 3483 06ad 84       		.byte	0x84
+ 3484 06ae 23070000 		.long	0x723
+ 3485 06b2 06       		.uleb128 0x6
+ 3486 06b3 00000000 		.long	.LASF49
+ 3487 06b7 09       		.byte	0x9
+ 3488 06b8 90       		.byte	0x90
+ 3489 06b9 48050000 		.long	0x548
+ 3490 06bd 02       		.byte	0x2
+ 3491 06be 23       		.byte	0x23
+ 3492 06bf 00       		.uleb128 0x0
+ 3493 06c0 06       		.uleb128 0x6
+ 3494 06c1 00000000 		.long	.LASF50
+ 3495 06c5 09       		.byte	0x9
+ 3496 06c6 95       		.byte	0x95
+ 3497 06c7 67070000 		.long	0x767
+ 3498 06cb 02       		.byte	0x2
+ 3499 06cc 23       		.byte	0x23
+ 3500 06cd 08       		.uleb128 0x8
+ 3501 06ce 06       		.uleb128 0x6
+ 3502 06cf 00000000 		.long	.LASF36
+ 3503 06d3 09       		.byte	0x9
+ 3504 06d4 97       		.byte	0x97
+ 3505 06d5 59060000 		.long	0x659
+ 3506 06d9 02       		.byte	0x2
+ 3507 06da 23       		.byte	0x23
+ 3508 06db 10       		.uleb128 0x10
+ 3509 06dc 06       		.uleb128 0x6
+ 3510 06dd 00000000 		.long	.LASF80
+ 3511 06e1 09       		.byte	0x9
+ 3512 06e2 99       		.byte	0x99
+ 3513 06e3 59060000 		.long	0x659
+ 3514 06e7 02       		.byte	0x2
+
GAS LISTING /tmp/ccWvEaWW.s 			page 90
+
+
+ 3515 06e8 23       		.byte	0x23
+ 3516 06e9 18       		.uleb128 0x18
+ 3517 06ea 06       		.uleb128 0x6
+ 3518 06eb 00000000 		.long	.LASF51
+ 3519 06ef 09       		.byte	0x9
+ 3520 06f0 9B       		.byte	0x9b
+ 3521 06f1 79060000 		.long	0x679
+ 3522 06f5 02       		.byte	0x2
+ 3523 06f6 23       		.byte	0x23
+ 3524 06f7 20       		.uleb128 0x20
+ 3525 06f8 06       		.uleb128 0x6
+ 3526 06f9 00000000 		.long	.LASF52
+ 3527 06fd 09       		.byte	0x9
+ 3528 06fe 9F       		.byte	0x9f
+ 3529 06ff 79060000 		.long	0x679
+ 3530 0703 02       		.byte	0x2
+ 3531 0704 23       		.byte	0x23
+ 3532 0705 28       		.uleb128 0x28
+ 3533 0706 06       		.uleb128 0x6
+ 3534 0707 00000000 		.long	.LASF57
+ 3535 070b 09       		.byte	0x9
+ 3536 070c A3       		.byte	0xa3
+ 3537 070d 82070000 		.long	0x782
+ 3538 0711 02       		.byte	0x2
+ 3539 0712 23       		.byte	0x23
+ 3540 0713 30       		.uleb128 0x30
+ 3541 0714 06       		.uleb128 0x6
+ 3542 0715 00000000 		.long	.LASF58
+ 3543 0719 09       		.byte	0x9
+ 3544 071a A6       		.byte	0xa6
+ 3545 071b 82070000 		.long	0x782
+ 3546 071f 02       		.byte	0x2
+ 3547 0720 23       		.byte	0x23
+ 3548 0721 38       		.uleb128 0x38
+ 3549 0722 00       		.byte	0x0
+ 3550 0723 04       		.uleb128 0x4
+ 3551 0724 00000000 		.long	.LASF83
+ 3552 0728 09       		.byte	0x9
+ 3553 0729 85       		.byte	0x85
+ 3554 072a 2E070000 		.long	0x72e
+ 3555 072e 13       		.uleb128 0x13
+ 3556 072f 00000000 		.long	.LASF83
+ 3557 0733 40       		.byte	0x40
+ 3558 0734 09       		.byte	0x9
+ 3559 0735 85       		.byte	0x85
+ 3560 0736 50070000 		.long	0x750
+ 3561 073a 14       		.uleb128 0x14
+ 3562 073b 00000000 		.long	.LASF49
+ 3563 073f 09       		.byte	0x9
+ 3564 0740 AF       		.byte	0xaf
+ 3565 0741 48050000 		.long	0x548
+ 3566 0745 15       		.uleb128 0x15
+ 3567 0746 763100   		.string	"v1"
+ 3568 0749 09       		.byte	0x9
+ 3569 074a B0       		.byte	0xb0
+ 3570 074b 9B060000 		.long	0x69b
+ 3571 074f 00       		.byte	0x0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 91
+
+
+ 3572 0750 0F       		.uleb128 0xf
+ 3573 0751 01       		.byte	0x1
+ 3574 0752 5C070000 		.long	0x75c
+ 3575 0756 10       		.uleb128 0x10
+ 3576 0757 5C070000 		.long	0x75c
+ 3577 075b 00       		.byte	0x0
+ 3578 075c 0A       		.uleb128 0xa
+ 3579 075d 08       		.byte	0x8
+ 3580 075e 62070000 		.long	0x762
+ 3581 0762 0B       		.uleb128 0xb
+ 3582 0763 23070000 		.long	0x723
+ 3583 0767 0A       		.uleb128 0xa
+ 3584 0768 08       		.byte	0x8
+ 3585 0769 50070000 		.long	0x750
+ 3586 076d 11       		.uleb128 0x11
+ 3587 076e 01       		.byte	0x1
+ 3588 076f 3D050000 		.long	0x53d
+ 3589 0773 82070000 		.long	0x782
+ 3590 0777 10       		.uleb128 0x10
+ 3591 0778 3D050000 		.long	0x53d
+ 3592 077c 10       		.uleb128 0x10
+ 3593 077d 1F040000 		.long	0x41f
+ 3594 0781 00       		.byte	0x0
+ 3595 0782 0A       		.uleb128 0xa
+ 3596 0783 08       		.byte	0x8
+ 3597 0784 6D070000 		.long	0x76d
+ 3598 0788 04       		.uleb128 0x4
+ 3599 0789 00000000 		.long	.LASF84
+ 3600 078d 0A       		.byte	0xa
+ 3601 078e B0       		.byte	0xb0
+ 3602 078f 93070000 		.long	0x793
+ 3603 0793 1A       		.uleb128 0x1a
+ 3604 0794 00000000 		.long	.LASF84
+ 3605 0798 0001     		.value	0x100
+ 3606 079a 0A       		.byte	0xa
+ 3607 079b B0       		.byte	0xb0
+ 3608 079c BE070000 		.long	0x7be
+ 3609 07a0 06       		.uleb128 0x6
+ 3610 07a1 00000000 		.long	.LASF85
+ 3611 07a5 0A       		.byte	0xa
+ 3612 07a6 B3       		.byte	0xb3
+ 3613 07a7 BE070000 		.long	0x7be
+ 3614 07ab 02       		.byte	0x2
+ 3615 07ac 23       		.byte	0x23
+ 3616 07ad 00       		.uleb128 0x0
+ 3617 07ae 06       		.uleb128 0x6
+ 3618 07af 00000000 		.long	.LASF86
+ 3619 07b3 0A       		.byte	0xa
+ 3620 07b4 B4       		.byte	0xb4
+ 3621 07b5 62000000 		.long	0x62
+ 3622 07b9 03       		.byte	0x3
+ 3623 07ba 23       		.byte	0x23
+ 3624 07bb F001     		.uleb128 0xf0
+ 3625 07bd 00       		.byte	0x0
+ 3626 07be 1B       		.uleb128 0x1b
+ 3627 07bf 3D050000 		.long	0x53d
+ 3628 07c3 CE070000 		.long	0x7ce
+
GAS LISTING /tmp/ccWvEaWW.s 			page 92
+
+
+ 3629 07c7 17       		.uleb128 0x17
+ 3630 07c8 B1000000 		.long	0xb1
+ 3631 07cc 0E       		.byte	0xe
+ 3632 07cd 00       		.byte	0x0
+ 3633 07ce 04       		.uleb128 0x4
+ 3634 07cf 00000000 		.long	.LASF87
+ 3635 07d3 0A       		.byte	0xa
+ 3636 07d4 D2       		.byte	0xd2
+ 3637 07d5 D9070000 		.long	0x7d9
+ 3638 07d9 1A       		.uleb128 0x1a
+ 3639 07da 00000000 		.long	.LASF87
+ 3640 07de 7002     		.value	0x270
+ 3641 07e0 0A       		.byte	0xa
+ 3642 07e1 D2       		.byte	0xd2
+ 3643 07e2 30080000 		.long	0x830
+ 3644 07e6 0E       		.uleb128 0xe
+ 3645 07e7 64616400 		.string	"dad"
+ 3646 07eb 0A       		.byte	0xa
+ 3647 07ec D5       		.byte	0xd5
+ 3648 07ed 54010000 		.long	0x154
+ 3649 07f1 02       		.byte	0x2
+ 3650 07f2 23       		.byte	0x23
+ 3651 07f3 00       		.uleb128 0x0
+ 3652 07f4 06       		.uleb128 0x6
+ 3653 07f5 00000000 		.long	.LASF88
+ 3654 07f9 0A       		.byte	0xa
+ 3655 07fa D6       		.byte	0xd6
+ 3656 07fb 88070000 		.long	0x788
+ 3657 07ff 02       		.byte	0x2
+ 3658 0800 23       		.byte	0x23
+ 3659 0801 50       		.uleb128 0x50
+ 3660 0802 06       		.uleb128 0x6
+ 3661 0803 00000000 		.long	.LASF89
+ 3662 0807 0A       		.byte	0xa
+ 3663 0808 D7       		.byte	0xd7
+ 3664 0809 88070000 		.long	0x788
+ 3665 080d 03       		.byte	0x3
+ 3666 080e 23       		.byte	0x23
+ 3667 080f D002     		.uleb128 0x150
+ 3668 0811 06       		.uleb128 0x6
+ 3669 0812 00000000 		.long	.LASF90
+ 3670 0816 0A       		.byte	0xa
+ 3671 0817 D8       		.byte	0xd8
+ 3672 0818 3D050000 		.long	0x53d
+ 3673 081c 03       		.byte	0x3
+ 3674 081d 23       		.byte	0x23
+ 3675 081e D004     		.uleb128 0x250
+ 3676 0820 06       		.uleb128 0x6
+ 3677 0821 00000000 		.long	.LASF91
+ 3678 0825 0A       		.byte	0xa
+ 3679 0826 D9       		.byte	0xd9
+ 3680 0827 3D050000 		.long	0x53d
+ 3681 082b 03       		.byte	0x3
+ 3682 082c 23       		.byte	0x23
+ 3683 082d E004     		.uleb128 0x260
+ 3684 082f 00       		.byte	0x0
+ 3685 0830 04       		.uleb128 0x4
+
GAS LISTING /tmp/ccWvEaWW.s 			page 93
+
+
+ 3686 0831 00000000 		.long	.LASF92
+ 3687 0835 0B       		.byte	0xb
+ 3688 0836 29       		.byte	0x29
+ 3689 0837 3B080000 		.long	0x83b
+ 3690 083b 05       		.uleb128 0x5
+ 3691 083c 00000000 		.long	.LASF92
+ 3692 0840 70       		.byte	0x70
+ 3693 0841 0B       		.byte	0xb
+ 3694 0842 29       		.byte	0x29
+ 3695 0843 72080000 		.long	0x872
+ 3696 0847 0E       		.uleb128 0xe
+ 3697 0848 64616400 		.string	"dad"
+ 3698 084c 0B       		.byte	0xb
+ 3699 084d 2C       		.byte	0x2c
+ 3700 084e 54010000 		.long	0x154
+ 3701 0852 02       		.byte	0x2
+ 3702 0853 23       		.byte	0x23
+ 3703 0854 00       		.uleb128 0x0
+ 3704 0855 06       		.uleb128 0x6
+ 3705 0856 00000000 		.long	.LASF90
+ 3706 085a 0B       		.byte	0xb
+ 3707 085b 2D       		.byte	0x2d
+ 3708 085c 3D050000 		.long	0x53d
+ 3709 0860 02       		.byte	0x2
+ 3710 0861 23       		.byte	0x23
+ 3711 0862 50       		.uleb128 0x50
+ 3712 0863 06       		.uleb128 0x6
+ 3713 0864 00000000 		.long	.LASF91
+ 3714 0868 0B       		.byte	0xb
+ 3715 0869 2E       		.byte	0x2e
+ 3716 086a 3D050000 		.long	0x53d
+ 3717 086e 02       		.byte	0x2
+ 3718 086f 23       		.byte	0x23
+ 3719 0870 60       		.uleb128 0x60
+ 3720 0871 00       		.byte	0x0
+ 3721 0872 04       		.uleb128 0x4
+ 3722 0873 00000000 		.long	.LASF93
+ 3723 0877 0C       		.byte	0xc
+ 3724 0878 48       		.byte	0x48
+ 3725 0879 62000000 		.long	0x62
+ 3726 087d 0C       		.uleb128 0xc
+ 3727 087e 04       		.byte	0x4
+ 3728 087f 0C       		.byte	0xc
+ 3729 0880 4A       		.byte	0x4a
+ 3730 0881 98080000 		.long	0x898
+ 3731 0885 0D       		.uleb128 0xd
+ 3732 0886 00000000 		.long	.LASF94
+ 3733 088a 00       		.sleb128 0
+ 3734 088b 0D       		.uleb128 0xd
+ 3735 088c 00000000 		.long	.LASF95
+ 3736 0890 01       		.sleb128 1
+ 3737 0891 0D       		.uleb128 0xd
+ 3738 0892 00000000 		.long	.LASF96
+ 3739 0896 02       		.sleb128 2
+ 3740 0897 00       		.byte	0x0
+ 3741 0898 04       		.uleb128 0x4
+ 3742 0899 00000000 		.long	.LASF97
+
GAS LISTING /tmp/ccWvEaWW.s 			page 94
+
+
+ 3743 089d 0E       		.byte	0xe
+ 3744 089e 40       		.byte	0x40
+ 3745 089f A3080000 		.long	0x8a3
+ 3746 08a3 13       		.uleb128 0x13
+ 3747 08a4 00000000 		.long	.LASF97
+ 3748 08a8 40       		.byte	0x40
+ 3749 08a9 0E       		.byte	0xe
+ 3750 08aa 40       		.byte	0x40
+ 3751 08ab C6080000 		.long	0x8c6
+ 3752 08af 14       		.uleb128 0x14
+ 3753 08b0 00000000 		.long	.LASF98
+ 3754 08b4 0E       		.byte	0xe
+ 3755 08b5 43       		.byte	0x43
+ 3756 08b6 04060000 		.long	0x604
+ 3757 08ba 15       		.uleb128 0x15
+ 3758 08bb 76656300 		.string	"vec"
+ 3759 08bf 0E       		.byte	0xe
+ 3760 08c0 44       		.byte	0x44
+ 3761 08c1 23070000 		.long	0x723
+ 3762 08c5 00       		.byte	0x0
+ 3763 08c6 1C       		.uleb128 0x1c
+ 3764 08c7 00000000 		.long	.LASF121
+ 3765 08cb 04       		.byte	0x4
+ 3766 08cc 0F       		.byte	0xf
+ 3767 08cd 5A       		.byte	0x5a
+ 3768 08ce 57090000 		.long	0x957
+ 3769 08d2 0D       		.uleb128 0xd
+ 3770 08d3 00000000 		.long	.LASF99
+ 3771 08d7 00       		.sleb128 0
+ 3772 08d8 0D       		.uleb128 0xd
+ 3773 08d9 00000000 		.long	.LASF100
+ 3774 08dd 01       		.sleb128 1
+ 3775 08de 0D       		.uleb128 0xd
+ 3776 08df 00000000 		.long	.LASF101
+ 3777 08e3 02       		.sleb128 2
+ 3778 08e4 0D       		.uleb128 0xd
+ 3779 08e5 00000000 		.long	.LASF102
+ 3780 08e9 03       		.sleb128 3
+ 3781 08ea 0D       		.uleb128 0xd
+ 3782 08eb 00000000 		.long	.LASF103
+ 3783 08ef 04       		.sleb128 4
+ 3784 08f0 0D       		.uleb128 0xd
+ 3785 08f1 00000000 		.long	.LASF104
+ 3786 08f5 05       		.sleb128 5
+ 3787 08f6 0D       		.uleb128 0xd
+ 3788 08f7 00000000 		.long	.LASF105
+ 3789 08fb 06       		.sleb128 6
+ 3790 08fc 0D       		.uleb128 0xd
+ 3791 08fd 00000000 		.long	.LASF106
+ 3792 0901 07       		.sleb128 7
+ 3793 0902 0D       		.uleb128 0xd
+ 3794 0903 00000000 		.long	.LASF107
+ 3795 0907 08       		.sleb128 8
+ 3796 0908 0D       		.uleb128 0xd
+ 3797 0909 00000000 		.long	.LASF108
+ 3798 090d 09       		.sleb128 9
+ 3799 090e 0D       		.uleb128 0xd
+
GAS LISTING /tmp/ccWvEaWW.s 			page 95
+
+
+ 3800 090f 00000000 		.long	.LASF109
+ 3801 0913 0A       		.sleb128 10
+ 3802 0914 0D       		.uleb128 0xd
+ 3803 0915 00000000 		.long	.LASF110
+ 3804 0919 0B       		.sleb128 11
+ 3805 091a 0D       		.uleb128 0xd
+ 3806 091b 00000000 		.long	.LASF111
+ 3807 091f 0C       		.sleb128 12
+ 3808 0920 0D       		.uleb128 0xd
+ 3809 0921 00000000 		.long	.LASF112
+ 3810 0925 0D       		.sleb128 13
+ 3811 0926 0D       		.uleb128 0xd
+ 3812 0927 00000000 		.long	.LASF113
+ 3813 092b 0E       		.sleb128 14
+ 3814 092c 0D       		.uleb128 0xd
+ 3815 092d 00000000 		.long	.LASF114
+ 3816 0931 0E       		.sleb128 14
+ 3817 0932 0D       		.uleb128 0xd
+ 3818 0933 00000000 		.long	.LASF115
+ 3819 0937 0F       		.sleb128 15
+ 3820 0938 0D       		.uleb128 0xd
+ 3821 0939 00000000 		.long	.LASF116
+ 3822 093d 10       		.sleb128 16
+ 3823 093e 0D       		.uleb128 0xd
+ 3824 093f 00000000 		.long	.LASF117
+ 3825 0943 11       		.sleb128 17
+ 3826 0944 0D       		.uleb128 0xd
+ 3827 0945 00000000 		.long	.LASF118
+ 3828 0949 12       		.sleb128 18
+ 3829 094a 0D       		.uleb128 0xd
+ 3830 094b 00000000 		.long	.LASF119
+ 3831 094f 13       		.sleb128 19
+ 3832 0950 0D       		.uleb128 0xd
+ 3833 0951 00000000 		.long	.LASF120
+ 3834 0955 14       		.sleb128 20
+ 3835 0956 00       		.byte	0x0
+ 3836 0957 1C       		.uleb128 0x1c
+ 3837 0958 00000000 		.long	.LASF122
+ 3838 095c 04       		.byte	0x4
+ 3839 095d 0F       		.byte	0xf
+ 3840 095e 77       		.byte	0x77
+ 3841 095f DE0A0000 		.long	0xade
+ 3842 0963 0D       		.uleb128 0xd
+ 3843 0964 00000000 		.long	.LASF123
+ 3844 0968 00       		.sleb128 0
+ 3845 0969 0D       		.uleb128 0xd
+ 3846 096a 00000000 		.long	.LASF124
+ 3847 096e 01       		.sleb128 1
+ 3848 096f 0D       		.uleb128 0xd
+ 3849 0970 00000000 		.long	.LASF125
+ 3850 0974 02       		.sleb128 2
+ 3851 0975 0D       		.uleb128 0xd
+ 3852 0976 00000000 		.long	.LASF126
+ 3853 097a 03       		.sleb128 3
+ 3854 097b 0D       		.uleb128 0xd
+ 3855 097c 00000000 		.long	.LASF127
+ 3856 0980 04       		.sleb128 4
+
GAS LISTING /tmp/ccWvEaWW.s 			page 96
+
+
+ 3857 0981 0D       		.uleb128 0xd
+ 3858 0982 00000000 		.long	.LASF128
+ 3859 0986 05       		.sleb128 5
+ 3860 0987 0D       		.uleb128 0xd
+ 3861 0988 00000000 		.long	.LASF129
+ 3862 098c 06       		.sleb128 6
+ 3863 098d 0D       		.uleb128 0xd
+ 3864 098e 00000000 		.long	.LASF130
+ 3865 0992 07       		.sleb128 7
+ 3866 0993 0D       		.uleb128 0xd
+ 3867 0994 00000000 		.long	.LASF131
+ 3868 0998 08       		.sleb128 8
+ 3869 0999 0D       		.uleb128 0xd
+ 3870 099a 00000000 		.long	.LASF132
+ 3871 099e 09       		.sleb128 9
+ 3872 099f 0D       		.uleb128 0xd
+ 3873 09a0 00000000 		.long	.LASF133
+ 3874 09a4 0A       		.sleb128 10
+ 3875 09a5 0D       		.uleb128 0xd
+ 3876 09a6 00000000 		.long	.LASF134
+ 3877 09aa 0B       		.sleb128 11
+ 3878 09ab 0D       		.uleb128 0xd
+ 3879 09ac 00000000 		.long	.LASF135
+ 3880 09b0 0C       		.sleb128 12
+ 3881 09b1 0D       		.uleb128 0xd
+ 3882 09b2 00000000 		.long	.LASF136
+ 3883 09b6 0D       		.sleb128 13
+ 3884 09b7 0D       		.uleb128 0xd
+ 3885 09b8 00000000 		.long	.LASF137
+ 3886 09bc 0E       		.sleb128 14
+ 3887 09bd 0D       		.uleb128 0xd
+ 3888 09be 00000000 		.long	.LASF138
+ 3889 09c2 0F       		.sleb128 15
+ 3890 09c3 0D       		.uleb128 0xd
+ 3891 09c4 00000000 		.long	.LASF139
+ 3892 09c8 10       		.sleb128 16
+ 3893 09c9 0D       		.uleb128 0xd
+ 3894 09ca 00000000 		.long	.LASF140
+ 3895 09ce 11       		.sleb128 17
+ 3896 09cf 0D       		.uleb128 0xd
+ 3897 09d0 00000000 		.long	.LASF141
+ 3898 09d4 12       		.sleb128 18
+ 3899 09d5 0D       		.uleb128 0xd
+ 3900 09d6 00000000 		.long	.LASF142
+ 3901 09da 13       		.sleb128 19
+ 3902 09db 0D       		.uleb128 0xd
+ 3903 09dc 00000000 		.long	.LASF143
+ 3904 09e0 14       		.sleb128 20
+ 3905 09e1 0D       		.uleb128 0xd
+ 3906 09e2 00000000 		.long	.LASF144
+ 3907 09e6 15       		.sleb128 21
+ 3908 09e7 0D       		.uleb128 0xd
+ 3909 09e8 00000000 		.long	.LASF145
+ 3910 09ec 16       		.sleb128 22
+ 3911 09ed 0D       		.uleb128 0xd
+ 3912 09ee 00000000 		.long	.LASF146
+ 3913 09f2 17       		.sleb128 23
+
GAS LISTING /tmp/ccWvEaWW.s 			page 97
+
+
+ 3914 09f3 0D       		.uleb128 0xd
+ 3915 09f4 00000000 		.long	.LASF147
+ 3916 09f8 18       		.sleb128 24
+ 3917 09f9 0D       		.uleb128 0xd
+ 3918 09fa 00000000 		.long	.LASF148
+ 3919 09fe 19       		.sleb128 25
+ 3920 09ff 0D       		.uleb128 0xd
+ 3921 0a00 00000000 		.long	.LASF149
+ 3922 0a04 1A       		.sleb128 26
+ 3923 0a05 0D       		.uleb128 0xd
+ 3924 0a06 00000000 		.long	.LASF150
+ 3925 0a0a 1B       		.sleb128 27
+ 3926 0a0b 0D       		.uleb128 0xd
+ 3927 0a0c 00000000 		.long	.LASF151
+ 3928 0a10 1C       		.sleb128 28
+ 3929 0a11 0D       		.uleb128 0xd
+ 3930 0a12 00000000 		.long	.LASF152
+ 3931 0a16 1D       		.sleb128 29
+ 3932 0a17 0D       		.uleb128 0xd
+ 3933 0a18 00000000 		.long	.LASF153
+ 3934 0a1c 1E       		.sleb128 30
+ 3935 0a1d 0D       		.uleb128 0xd
+ 3936 0a1e 00000000 		.long	.LASF154
+ 3937 0a22 1F       		.sleb128 31
+ 3938 0a23 0D       		.uleb128 0xd
+ 3939 0a24 00000000 		.long	.LASF155
+ 3940 0a28 20       		.sleb128 32
+ 3941 0a29 0D       		.uleb128 0xd
+ 3942 0a2a 00000000 		.long	.LASF156
+ 3943 0a2e 21       		.sleb128 33
+ 3944 0a2f 0D       		.uleb128 0xd
+ 3945 0a30 00000000 		.long	.LASF157
+ 3946 0a34 22       		.sleb128 34
+ 3947 0a35 0D       		.uleb128 0xd
+ 3948 0a36 00000000 		.long	.LASF158
+ 3949 0a3a 23       		.sleb128 35
+ 3950 0a3b 0D       		.uleb128 0xd
+ 3951 0a3c 00000000 		.long	.LASF159
+ 3952 0a40 24       		.sleb128 36
+ 3953 0a41 0D       		.uleb128 0xd
+ 3954 0a42 00000000 		.long	.LASF160
+ 3955 0a46 25       		.sleb128 37
+ 3956 0a47 0D       		.uleb128 0xd
+ 3957 0a48 00000000 		.long	.LASF161
+ 3958 0a4c 26       		.sleb128 38
+ 3959 0a4d 0D       		.uleb128 0xd
+ 3960 0a4e 00000000 		.long	.LASF162
+ 3961 0a52 27       		.sleb128 39
+ 3962 0a53 0D       		.uleb128 0xd
+ 3963 0a54 00000000 		.long	.LASF163
+ 3964 0a58 28       		.sleb128 40
+ 3965 0a59 0D       		.uleb128 0xd
+ 3966 0a5a 00000000 		.long	.LASF164
+ 3967 0a5e 29       		.sleb128 41
+ 3968 0a5f 0D       		.uleb128 0xd
+ 3969 0a60 00000000 		.long	.LASF165
+ 3970 0a64 2A       		.sleb128 42
+
GAS LISTING /tmp/ccWvEaWW.s 			page 98
+
+
+ 3971 0a65 0D       		.uleb128 0xd
+ 3972 0a66 00000000 		.long	.LASF166
+ 3973 0a6a 2B       		.sleb128 43
+ 3974 0a6b 0D       		.uleb128 0xd
+ 3975 0a6c 00000000 		.long	.LASF167
+ 3976 0a70 2C       		.sleb128 44
+ 3977 0a71 0D       		.uleb128 0xd
+ 3978 0a72 00000000 		.long	.LASF168
+ 3979 0a76 2D       		.sleb128 45
+ 3980 0a77 0D       		.uleb128 0xd
+ 3981 0a78 00000000 		.long	.LASF169
+ 3982 0a7c 2E       		.sleb128 46
+ 3983 0a7d 0D       		.uleb128 0xd
+ 3984 0a7e 00000000 		.long	.LASF170
+ 3985 0a82 2F       		.sleb128 47
+ 3986 0a83 0D       		.uleb128 0xd
+ 3987 0a84 00000000 		.long	.LASF171
+ 3988 0a88 30       		.sleb128 48
+ 3989 0a89 0D       		.uleb128 0xd
+ 3990 0a8a 00000000 		.long	.LASF172
+ 3991 0a8e 31       		.sleb128 49
+ 3992 0a8f 0D       		.uleb128 0xd
+ 3993 0a90 00000000 		.long	.LASF173
+ 3994 0a94 32       		.sleb128 50
+ 3995 0a95 0D       		.uleb128 0xd
+ 3996 0a96 00000000 		.long	.LASF174
+ 3997 0a9a 33       		.sleb128 51
+ 3998 0a9b 0D       		.uleb128 0xd
+ 3999 0a9c 00000000 		.long	.LASF175
+ 4000 0aa0 34       		.sleb128 52
+ 4001 0aa1 0D       		.uleb128 0xd
+ 4002 0aa2 00000000 		.long	.LASF176
+ 4003 0aa6 35       		.sleb128 53
+ 4004 0aa7 0D       		.uleb128 0xd
+ 4005 0aa8 00000000 		.long	.LASF177
+ 4006 0aac 36       		.sleb128 54
+ 4007 0aad 0D       		.uleb128 0xd
+ 4008 0aae 00000000 		.long	.LASF178
+ 4009 0ab2 36       		.sleb128 54
+ 4010 0ab3 0D       		.uleb128 0xd
+ 4011 0ab4 00000000 		.long	.LASF179
+ 4012 0ab8 37       		.sleb128 55
+ 4013 0ab9 0D       		.uleb128 0xd
+ 4014 0aba 00000000 		.long	.LASF180
+ 4015 0abe 38       		.sleb128 56
+ 4016 0abf 0D       		.uleb128 0xd
+ 4017 0ac0 00000000 		.long	.LASF181
+ 4018 0ac4 39       		.sleb128 57
+ 4019 0ac5 0D       		.uleb128 0xd
+ 4020 0ac6 00000000 		.long	.LASF182
+ 4021 0aca 3A       		.sleb128 58
+ 4022 0acb 0D       		.uleb128 0xd
+ 4023 0acc 00000000 		.long	.LASF183
+ 4024 0ad0 3B       		.sleb128 59
+ 4025 0ad1 0D       		.uleb128 0xd
+ 4026 0ad2 00000000 		.long	.LASF184
+ 4027 0ad6 3C       		.sleb128 60
+
GAS LISTING /tmp/ccWvEaWW.s 			page 99
+
+
+ 4028 0ad7 0D       		.uleb128 0xd
+ 4029 0ad8 00000000 		.long	.LASF185
+ 4030 0adc 3D       		.sleb128 61
+ 4031 0add 00       		.byte	0x0
+ 4032 0ade 1C       		.uleb128 0x1c
+ 4033 0adf 00000000 		.long	.LASF186
+ 4034 0ae3 04       		.byte	0x4
+ 4035 0ae4 0F       		.byte	0xf
+ 4036 0ae5 BD       		.byte	0xbd
+ 4037 0ae6 940C0000 		.long	0xc94
+ 4038 0aea 0D       		.uleb128 0xd
+ 4039 0aeb 00000000 		.long	.LASF187
+ 4040 0aef 00       		.sleb128 0
+ 4041 0af0 0D       		.uleb128 0xd
+ 4042 0af1 00000000 		.long	.LASF188
+ 4043 0af5 01       		.sleb128 1
+ 4044 0af6 0D       		.uleb128 0xd
+ 4045 0af7 00000000 		.long	.LASF189
+ 4046 0afb 02       		.sleb128 2
+ 4047 0afc 0D       		.uleb128 0xd
+ 4048 0afd 00000000 		.long	.LASF190
+ 4049 0b01 03       		.sleb128 3
+ 4050 0b02 0D       		.uleb128 0xd
+ 4051 0b03 00000000 		.long	.LASF191
+ 4052 0b07 04       		.sleb128 4
+ 4053 0b08 0D       		.uleb128 0xd
+ 4054 0b09 00000000 		.long	.LASF192
+ 4055 0b0d 05       		.sleb128 5
+ 4056 0b0e 0D       		.uleb128 0xd
+ 4057 0b0f 00000000 		.long	.LASF193
+ 4058 0b13 06       		.sleb128 6
+ 4059 0b14 0D       		.uleb128 0xd
+ 4060 0b15 00000000 		.long	.LASF194
+ 4061 0b19 07       		.sleb128 7
+ 4062 0b1a 0D       		.uleb128 0xd
+ 4063 0b1b 00000000 		.long	.LASF195
+ 4064 0b1f 08       		.sleb128 8
+ 4065 0b20 0D       		.uleb128 0xd
+ 4066 0b21 00000000 		.long	.LASF196
+ 4067 0b25 09       		.sleb128 9
+ 4068 0b26 0D       		.uleb128 0xd
+ 4069 0b27 00000000 		.long	.LASF197
+ 4070 0b2b 0A       		.sleb128 10
+ 4071 0b2c 0D       		.uleb128 0xd
+ 4072 0b2d 00000000 		.long	.LASF198
+ 4073 0b31 0B       		.sleb128 11
+ 4074 0b32 0D       		.uleb128 0xd
+ 4075 0b33 00000000 		.long	.LASF199
+ 4076 0b37 0C       		.sleb128 12
+ 4077 0b38 0D       		.uleb128 0xd
+ 4078 0b39 00000000 		.long	.LASF200
+ 4079 0b3d 0D       		.sleb128 13
+ 4080 0b3e 0D       		.uleb128 0xd
+ 4081 0b3f 00000000 		.long	.LASF201
+ 4082 0b43 0E       		.sleb128 14
+ 4083 0b44 0D       		.uleb128 0xd
+ 4084 0b45 00000000 		.long	.LASF202
+
GAS LISTING /tmp/ccWvEaWW.s 			page 100
+
+
+ 4085 0b49 0F       		.sleb128 15
+ 4086 0b4a 0D       		.uleb128 0xd
+ 4087 0b4b 00000000 		.long	.LASF203
+ 4088 0b4f 10       		.sleb128 16
+ 4089 0b50 0D       		.uleb128 0xd
+ 4090 0b51 00000000 		.long	.LASF204
+ 4091 0b55 11       		.sleb128 17
+ 4092 0b56 0D       		.uleb128 0xd
+ 4093 0b57 00000000 		.long	.LASF205
+ 4094 0b5b 12       		.sleb128 18
+ 4095 0b5c 0D       		.uleb128 0xd
+ 4096 0b5d 00000000 		.long	.LASF206
+ 4097 0b61 13       		.sleb128 19
+ 4098 0b62 0D       		.uleb128 0xd
+ 4099 0b63 00000000 		.long	.LASF207
+ 4100 0b67 14       		.sleb128 20
+ 4101 0b68 0D       		.uleb128 0xd
+ 4102 0b69 00000000 		.long	.LASF208
+ 4103 0b6d 15       		.sleb128 21
+ 4104 0b6e 0D       		.uleb128 0xd
+ 4105 0b6f 00000000 		.long	.LASF209
+ 4106 0b73 16       		.sleb128 22
+ 4107 0b74 0D       		.uleb128 0xd
+ 4108 0b75 00000000 		.long	.LASF210
+ 4109 0b79 17       		.sleb128 23
+ 4110 0b7a 0D       		.uleb128 0xd
+ 4111 0b7b 00000000 		.long	.LASF211
+ 4112 0b7f 18       		.sleb128 24
+ 4113 0b80 0D       		.uleb128 0xd
+ 4114 0b81 00000000 		.long	.LASF212
+ 4115 0b85 19       		.sleb128 25
+ 4116 0b86 0D       		.uleb128 0xd
+ 4117 0b87 00000000 		.long	.LASF213
+ 4118 0b8b 1A       		.sleb128 26
+ 4119 0b8c 0D       		.uleb128 0xd
+ 4120 0b8d 00000000 		.long	.LASF214
+ 4121 0b91 1B       		.sleb128 27
+ 4122 0b92 0D       		.uleb128 0xd
+ 4123 0b93 00000000 		.long	.LASF215
+ 4124 0b97 1C       		.sleb128 28
+ 4125 0b98 0D       		.uleb128 0xd
+ 4126 0b99 00000000 		.long	.LASF216
+ 4127 0b9d 1D       		.sleb128 29
+ 4128 0b9e 0D       		.uleb128 0xd
+ 4129 0b9f 00000000 		.long	.LASF217
+ 4130 0ba3 1E       		.sleb128 30
+ 4131 0ba4 0D       		.uleb128 0xd
+ 4132 0ba5 00000000 		.long	.LASF218
+ 4133 0ba9 1F       		.sleb128 31
+ 4134 0baa 0D       		.uleb128 0xd
+ 4135 0bab 00000000 		.long	.LASF219
+ 4136 0baf 20       		.sleb128 32
+ 4137 0bb0 0D       		.uleb128 0xd
+ 4138 0bb1 00000000 		.long	.LASF220
+ 4139 0bb5 21       		.sleb128 33
+ 4140 0bb6 0D       		.uleb128 0xd
+ 4141 0bb7 00000000 		.long	.LASF221
+
GAS LISTING /tmp/ccWvEaWW.s 			page 101
+
+
+ 4142 0bbb 22       		.sleb128 34
+ 4143 0bbc 0D       		.uleb128 0xd
+ 4144 0bbd 00000000 		.long	.LASF222
+ 4145 0bc1 23       		.sleb128 35
+ 4146 0bc2 0D       		.uleb128 0xd
+ 4147 0bc3 00000000 		.long	.LASF223
+ 4148 0bc7 24       		.sleb128 36
+ 4149 0bc8 0D       		.uleb128 0xd
+ 4150 0bc9 00000000 		.long	.LASF224
+ 4151 0bcd 25       		.sleb128 37
+ 4152 0bce 0D       		.uleb128 0xd
+ 4153 0bcf 00000000 		.long	.LASF225
+ 4154 0bd3 26       		.sleb128 38
+ 4155 0bd4 0D       		.uleb128 0xd
+ 4156 0bd5 00000000 		.long	.LASF226
+ 4157 0bd9 27       		.sleb128 39
+ 4158 0bda 0D       		.uleb128 0xd
+ 4159 0bdb 00000000 		.long	.LASF227
+ 4160 0bdf 28       		.sleb128 40
+ 4161 0be0 0D       		.uleb128 0xd
+ 4162 0be1 00000000 		.long	.LASF228
+ 4163 0be5 29       		.sleb128 41
+ 4164 0be6 0D       		.uleb128 0xd
+ 4165 0be7 00000000 		.long	.LASF229
+ 4166 0beb 2A       		.sleb128 42
+ 4167 0bec 0D       		.uleb128 0xd
+ 4168 0bed 00000000 		.long	.LASF230
+ 4169 0bf1 2B       		.sleb128 43
+ 4170 0bf2 0D       		.uleb128 0xd
+ 4171 0bf3 00000000 		.long	.LASF231
+ 4172 0bf7 2C       		.sleb128 44
+ 4173 0bf8 0D       		.uleb128 0xd
+ 4174 0bf9 00000000 		.long	.LASF232
+ 4175 0bfd 2D       		.sleb128 45
+ 4176 0bfe 0D       		.uleb128 0xd
+ 4177 0bff 00000000 		.long	.LASF233
+ 4178 0c03 2E       		.sleb128 46
+ 4179 0c04 0D       		.uleb128 0xd
+ 4180 0c05 00000000 		.long	.LASF234
+ 4181 0c09 2F       		.sleb128 47
+ 4182 0c0a 0D       		.uleb128 0xd
+ 4183 0c0b 00000000 		.long	.LASF235
+ 4184 0c0f 30       		.sleb128 48
+ 4185 0c10 0D       		.uleb128 0xd
+ 4186 0c11 00000000 		.long	.LASF236
+ 4187 0c15 31       		.sleb128 49
+ 4188 0c16 0D       		.uleb128 0xd
+ 4189 0c17 00000000 		.long	.LASF237
+ 4190 0c1b 32       		.sleb128 50
+ 4191 0c1c 0D       		.uleb128 0xd
+ 4192 0c1d 00000000 		.long	.LASF238
+ 4193 0c21 33       		.sleb128 51
+ 4194 0c22 0D       		.uleb128 0xd
+ 4195 0c23 00000000 		.long	.LASF239
+ 4196 0c27 34       		.sleb128 52
+ 4197 0c28 0D       		.uleb128 0xd
+ 4198 0c29 00000000 		.long	.LASF240
+
GAS LISTING /tmp/ccWvEaWW.s 			page 102
+
+
+ 4199 0c2d 35       		.sleb128 53
+ 4200 0c2e 0D       		.uleb128 0xd
+ 4201 0c2f 00000000 		.long	.LASF241
+ 4202 0c33 36       		.sleb128 54
+ 4203 0c34 0D       		.uleb128 0xd
+ 4204 0c35 00000000 		.long	.LASF242
+ 4205 0c39 37       		.sleb128 55
+ 4206 0c3a 0D       		.uleb128 0xd
+ 4207 0c3b 00000000 		.long	.LASF243
+ 4208 0c3f 38       		.sleb128 56
+ 4209 0c40 0D       		.uleb128 0xd
+ 4210 0c41 00000000 		.long	.LASF244
+ 4211 0c45 39       		.sleb128 57
+ 4212 0c46 0D       		.uleb128 0xd
+ 4213 0c47 00000000 		.long	.LASF245
+ 4214 0c4b 3A       		.sleb128 58
+ 4215 0c4c 0D       		.uleb128 0xd
+ 4216 0c4d 00000000 		.long	.LASF246
+ 4217 0c51 3A       		.sleb128 58
+ 4218 0c52 0D       		.uleb128 0xd
+ 4219 0c53 00000000 		.long	.LASF247
+ 4220 0c57 3B       		.sleb128 59
+ 4221 0c58 0D       		.uleb128 0xd
+ 4222 0c59 00000000 		.long	.LASF248
+ 4223 0c5d 3C       		.sleb128 60
+ 4224 0c5e 0D       		.uleb128 0xd
+ 4225 0c5f 00000000 		.long	.LASF249
+ 4226 0c63 3D       		.sleb128 61
+ 4227 0c64 0D       		.uleb128 0xd
+ 4228 0c65 00000000 		.long	.LASF250
+ 4229 0c69 3E       		.sleb128 62
+ 4230 0c6a 0D       		.uleb128 0xd
+ 4231 0c6b 00000000 		.long	.LASF251
+ 4232 0c6f 3F       		.sleb128 63
+ 4233 0c70 0D       		.uleb128 0xd
+ 4234 0c71 00000000 		.long	.LASF252
+ 4235 0c75 C000     		.sleb128 64
+ 4236 0c77 0D       		.uleb128 0xd
+ 4237 0c78 00000000 		.long	.LASF253
+ 4238 0c7c C100     		.sleb128 65
+ 4239 0c7e 0D       		.uleb128 0xd
+ 4240 0c7f 00000000 		.long	.LASF254
+ 4241 0c83 C200     		.sleb128 66
+ 4242 0c85 0D       		.uleb128 0xd
+ 4243 0c86 00000000 		.long	.LASF255
+ 4244 0c8a C300     		.sleb128 67
+ 4245 0c8c 0D       		.uleb128 0xd
+ 4246 0c8d 00000000 		.long	.LASF256
+ 4247 0c91 C400     		.sleb128 68
+ 4248 0c93 00       		.byte	0x0
+ 4249 0c94 1D       		.uleb128 0x1d
+ 4250 0c95 00000000 		.long	.LASF257
+ 4251 0c99 04       		.byte	0x4
+ 4252 0c9a 0F       		.byte	0xf
+ 4253 0c9b 0A01     		.value	0x10a
+ 4254 0c9d 930D0000 		.long	0xd93
+ 4255 0ca1 0D       		.uleb128 0xd
+
GAS LISTING /tmp/ccWvEaWW.s 			page 103
+
+
+ 4256 0ca2 00000000 		.long	.LASF258
+ 4257 0ca6 00       		.sleb128 0
+ 4258 0ca7 0D       		.uleb128 0xd
+ 4259 0ca8 00000000 		.long	.LASF259
+ 4260 0cac 3D       		.sleb128 61
+ 4261 0cad 0D       		.uleb128 0xd
+ 4262 0cae 00000000 		.long	.LASF260
+ 4263 0cb2 3E       		.sleb128 62
+ 4264 0cb3 0D       		.uleb128 0xd
+ 4265 0cb4 00000000 		.long	.LASF261
+ 4266 0cb8 3F       		.sleb128 63
+ 4267 0cb9 0D       		.uleb128 0xd
+ 4268 0cba 00000000 		.long	.LASF262
+ 4269 0cbe C000     		.sleb128 64
+ 4270 0cc0 0D       		.uleb128 0xd
+ 4271 0cc1 00000000 		.long	.LASF263
+ 4272 0cc5 C100     		.sleb128 65
+ 4273 0cc7 0D       		.uleb128 0xd
+ 4274 0cc8 00000000 		.long	.LASF264
+ 4275 0ccc C200     		.sleb128 66
+ 4276 0cce 0D       		.uleb128 0xd
+ 4277 0ccf 00000000 		.long	.LASF265
+ 4278 0cd3 C300     		.sleb128 67
+ 4279 0cd5 0D       		.uleb128 0xd
+ 4280 0cd6 00000000 		.long	.LASF266
+ 4281 0cda C400     		.sleb128 68
+ 4282 0cdc 0D       		.uleb128 0xd
+ 4283 0cdd 00000000 		.long	.LASF267
+ 4284 0ce1 C500     		.sleb128 69
+ 4285 0ce3 0D       		.uleb128 0xd
+ 4286 0ce4 00000000 		.long	.LASF268
+ 4287 0ce8 C600     		.sleb128 70
+ 4288 0cea 0D       		.uleb128 0xd
+ 4289 0ceb 00000000 		.long	.LASF269
+ 4290 0cef C700     		.sleb128 71
+ 4291 0cf1 0D       		.uleb128 0xd
+ 4292 0cf2 00000000 		.long	.LASF270
+ 4293 0cf6 C800     		.sleb128 72
+ 4294 0cf8 0D       		.uleb128 0xd
+ 4295 0cf9 00000000 		.long	.LASF271
+ 4296 0cfd C900     		.sleb128 73
+ 4297 0cff 0D       		.uleb128 0xd
+ 4298 0d00 00000000 		.long	.LASF272
+ 4299 0d04 CA00     		.sleb128 74
+ 4300 0d06 0D       		.uleb128 0xd
+ 4301 0d07 00000000 		.long	.LASF273
+ 4302 0d0b CB00     		.sleb128 75
+ 4303 0d0d 0D       		.uleb128 0xd
+ 4304 0d0e 00000000 		.long	.LASF274
+ 4305 0d12 CC00     		.sleb128 76
+ 4306 0d14 0D       		.uleb128 0xd
+ 4307 0d15 00000000 		.long	.LASF275
+ 4308 0d19 CD00     		.sleb128 77
+ 4309 0d1b 0D       		.uleb128 0xd
+ 4310 0d1c 00000000 		.long	.LASF276
+ 4311 0d20 CE00     		.sleb128 78
+ 4312 0d22 0D       		.uleb128 0xd
+
GAS LISTING /tmp/ccWvEaWW.s 			page 104
+
+
+ 4313 0d23 00000000 		.long	.LASF277
+ 4314 0d27 CF00     		.sleb128 79
+ 4315 0d29 0D       		.uleb128 0xd
+ 4316 0d2a 00000000 		.long	.LASF278
+ 4317 0d2e D000     		.sleb128 80
+ 4318 0d30 0D       		.uleb128 0xd
+ 4319 0d31 00000000 		.long	.LASF279
+ 4320 0d35 D100     		.sleb128 81
+ 4321 0d37 0D       		.uleb128 0xd
+ 4322 0d38 00000000 		.long	.LASF280
+ 4323 0d3c D100     		.sleb128 81
+ 4324 0d3e 0D       		.uleb128 0xd
+ 4325 0d3f 00000000 		.long	.LASF281
+ 4326 0d43 D200     		.sleb128 82
+ 4327 0d45 0D       		.uleb128 0xd
+ 4328 0d46 00000000 		.long	.LASF282
+ 4329 0d4a D300     		.sleb128 83
+ 4330 0d4c 0D       		.uleb128 0xd
+ 4331 0d4d 00000000 		.long	.LASF283
+ 4332 0d51 D400     		.sleb128 84
+ 4333 0d53 0D       		.uleb128 0xd
+ 4334 0d54 00000000 		.long	.LASF284
+ 4335 0d58 D500     		.sleb128 85
+ 4336 0d5a 0D       		.uleb128 0xd
+ 4337 0d5b 00000000 		.long	.LASF285
+ 4338 0d5f D600     		.sleb128 86
+ 4339 0d61 0D       		.uleb128 0xd
+ 4340 0d62 00000000 		.long	.LASF286
+ 4341 0d66 D700     		.sleb128 87
+ 4342 0d68 0D       		.uleb128 0xd
+ 4343 0d69 00000000 		.long	.LASF287
+ 4344 0d6d D800     		.sleb128 88
+ 4345 0d6f 0D       		.uleb128 0xd
+ 4346 0d70 00000000 		.long	.LASF288
+ 4347 0d74 D900     		.sleb128 89
+ 4348 0d76 0D       		.uleb128 0xd
+ 4349 0d77 00000000 		.long	.LASF289
+ 4350 0d7b DA00     		.sleb128 90
+ 4351 0d7d 0D       		.uleb128 0xd
+ 4352 0d7e 00000000 		.long	.LASF290
+ 4353 0d82 DB00     		.sleb128 91
+ 4354 0d84 0D       		.uleb128 0xd
+ 4355 0d85 00000000 		.long	.LASF291
+ 4356 0d89 DC00     		.sleb128 92
+ 4357 0d8b 0D       		.uleb128 0xd
+ 4358 0d8c 00000000 		.long	.LASF292
+ 4359 0d90 DD00     		.sleb128 93
+ 4360 0d92 00       		.byte	0x0
+ 4361 0d93 1D       		.uleb128 0x1d
+ 4362 0d94 00000000 		.long	.LASF293
+ 4363 0d98 04       		.byte	0x4
+ 4364 0d99 0F       		.byte	0xf
+ 4365 0d9a 3401     		.value	0x134
+ 4366 0d9c D30E0000 		.long	0xed3
+ 4367 0da0 0D       		.uleb128 0xd
+ 4368 0da1 00000000 		.long	.LASF294
+ 4369 0da5 00       		.sleb128 0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 105
+
+
+ 4370 0da6 0D       		.uleb128 0xd
+ 4371 0da7 00000000 		.long	.LASF295
+ 4372 0dab 01       		.sleb128 1
+ 4373 0dac 0D       		.uleb128 0xd
+ 4374 0dad 00000000 		.long	.LASF296
+ 4375 0db1 02       		.sleb128 2
+ 4376 0db2 0D       		.uleb128 0xd
+ 4377 0db3 00000000 		.long	.LASF297
+ 4378 0db7 03       		.sleb128 3
+ 4379 0db8 0D       		.uleb128 0xd
+ 4380 0db9 00000000 		.long	.LASF298
+ 4381 0dbd 04       		.sleb128 4
+ 4382 0dbe 0D       		.uleb128 0xd
+ 4383 0dbf 00000000 		.long	.LASF299
+ 4384 0dc3 05       		.sleb128 5
+ 4385 0dc4 0D       		.uleb128 0xd
+ 4386 0dc5 00000000 		.long	.LASF300
+ 4387 0dc9 06       		.sleb128 6
+ 4388 0dca 0D       		.uleb128 0xd
+ 4389 0dcb 00000000 		.long	.LASF301
+ 4390 0dcf 07       		.sleb128 7
+ 4391 0dd0 0D       		.uleb128 0xd
+ 4392 0dd1 00000000 		.long	.LASF302
+ 4393 0dd5 08       		.sleb128 8
+ 4394 0dd6 0D       		.uleb128 0xd
+ 4395 0dd7 00000000 		.long	.LASF303
+ 4396 0ddb 09       		.sleb128 9
+ 4397 0ddc 0D       		.uleb128 0xd
+ 4398 0ddd 00000000 		.long	.LASF304
+ 4399 0de1 0A       		.sleb128 10
+ 4400 0de2 0D       		.uleb128 0xd
+ 4401 0de3 00000000 		.long	.LASF305
+ 4402 0de7 0B       		.sleb128 11
+ 4403 0de8 0D       		.uleb128 0xd
+ 4404 0de9 00000000 		.long	.LASF306
+ 4405 0ded 0C       		.sleb128 12
+ 4406 0dee 0D       		.uleb128 0xd
+ 4407 0def 00000000 		.long	.LASF307
+ 4408 0df3 0D       		.sleb128 13
+ 4409 0df4 0D       		.uleb128 0xd
+ 4410 0df5 00000000 		.long	.LASF308
+ 4411 0df9 0E       		.sleb128 14
+ 4412 0dfa 0D       		.uleb128 0xd
+ 4413 0dfb 00000000 		.long	.LASF309
+ 4414 0dff 0F       		.sleb128 15
+ 4415 0e00 0D       		.uleb128 0xd
+ 4416 0e01 00000000 		.long	.LASF310
+ 4417 0e05 10       		.sleb128 16
+ 4418 0e06 0D       		.uleb128 0xd
+ 4419 0e07 00000000 		.long	.LASF311
+ 4420 0e0b 11       		.sleb128 17
+ 4421 0e0c 0D       		.uleb128 0xd
+ 4422 0e0d 00000000 		.long	.LASF312
+ 4423 0e11 12       		.sleb128 18
+ 4424 0e12 0D       		.uleb128 0xd
+ 4425 0e13 00000000 		.long	.LASF313
+ 4426 0e17 13       		.sleb128 19
+
GAS LISTING /tmp/ccWvEaWW.s 			page 106
+
+
+ 4427 0e18 0D       		.uleb128 0xd
+ 4428 0e19 00000000 		.long	.LASF314
+ 4429 0e1d 14       		.sleb128 20
+ 4430 0e1e 0D       		.uleb128 0xd
+ 4431 0e1f 00000000 		.long	.LASF315
+ 4432 0e23 15       		.sleb128 21
+ 4433 0e24 0D       		.uleb128 0xd
+ 4434 0e25 00000000 		.long	.LASF316
+ 4435 0e29 16       		.sleb128 22
+ 4436 0e2a 0D       		.uleb128 0xd
+ 4437 0e2b 00000000 		.long	.LASF317
+ 4438 0e2f 17       		.sleb128 23
+ 4439 0e30 0D       		.uleb128 0xd
+ 4440 0e31 00000000 		.long	.LASF318
+ 4441 0e35 18       		.sleb128 24
+ 4442 0e36 0D       		.uleb128 0xd
+ 4443 0e37 00000000 		.long	.LASF319
+ 4444 0e3b 19       		.sleb128 25
+ 4445 0e3c 0D       		.uleb128 0xd
+ 4446 0e3d 00000000 		.long	.LASF320
+ 4447 0e41 1A       		.sleb128 26
+ 4448 0e42 0D       		.uleb128 0xd
+ 4449 0e43 00000000 		.long	.LASF321
+ 4450 0e47 1B       		.sleb128 27
+ 4451 0e48 0D       		.uleb128 0xd
+ 4452 0e49 00000000 		.long	.LASF322
+ 4453 0e4d 1C       		.sleb128 28
+ 4454 0e4e 0D       		.uleb128 0xd
+ 4455 0e4f 00000000 		.long	.LASF323
+ 4456 0e53 1D       		.sleb128 29
+ 4457 0e54 0D       		.uleb128 0xd
+ 4458 0e55 00000000 		.long	.LASF324
+ 4459 0e59 1E       		.sleb128 30
+ 4460 0e5a 0D       		.uleb128 0xd
+ 4461 0e5b 00000000 		.long	.LASF325
+ 4462 0e5f 1F       		.sleb128 31
+ 4463 0e60 0D       		.uleb128 0xd
+ 4464 0e61 00000000 		.long	.LASF326
+ 4465 0e65 20       		.sleb128 32
+ 4466 0e66 0D       		.uleb128 0xd
+ 4467 0e67 00000000 		.long	.LASF327
+ 4468 0e6b 21       		.sleb128 33
+ 4469 0e6c 0D       		.uleb128 0xd
+ 4470 0e6d 00000000 		.long	.LASF328
+ 4471 0e71 22       		.sleb128 34
+ 4472 0e72 0D       		.uleb128 0xd
+ 4473 0e73 00000000 		.long	.LASF329
+ 4474 0e77 23       		.sleb128 35
+ 4475 0e78 0D       		.uleb128 0xd
+ 4476 0e79 00000000 		.long	.LASF330
+ 4477 0e7d 24       		.sleb128 36
+ 4478 0e7e 0D       		.uleb128 0xd
+ 4479 0e7f 00000000 		.long	.LASF331
+ 4480 0e83 25       		.sleb128 37
+ 4481 0e84 0D       		.uleb128 0xd
+ 4482 0e85 00000000 		.long	.LASF332
+ 4483 0e89 26       		.sleb128 38
+
GAS LISTING /tmp/ccWvEaWW.s 			page 107
+
+
+ 4484 0e8a 0D       		.uleb128 0xd
+ 4485 0e8b 00000000 		.long	.LASF333
+ 4486 0e8f 27       		.sleb128 39
+ 4487 0e90 0D       		.uleb128 0xd
+ 4488 0e91 00000000 		.long	.LASF334
+ 4489 0e95 28       		.sleb128 40
+ 4490 0e96 0D       		.uleb128 0xd
+ 4491 0e97 00000000 		.long	.LASF335
+ 4492 0e9b 29       		.sleb128 41
+ 4493 0e9c 0D       		.uleb128 0xd
+ 4494 0e9d 00000000 		.long	.LASF336
+ 4495 0ea1 29       		.sleb128 41
+ 4496 0ea2 0D       		.uleb128 0xd
+ 4497 0ea3 00000000 		.long	.LASF337
+ 4498 0ea7 2A       		.sleb128 42
+ 4499 0ea8 0D       		.uleb128 0xd
+ 4500 0ea9 00000000 		.long	.LASF338
+ 4501 0ead 2B       		.sleb128 43
+ 4502 0eae 0D       		.uleb128 0xd
+ 4503 0eaf 00000000 		.long	.LASF339
+ 4504 0eb3 2C       		.sleb128 44
+ 4505 0eb4 0D       		.uleb128 0xd
+ 4506 0eb5 00000000 		.long	.LASF340
+ 4507 0eb9 2D       		.sleb128 45
+ 4508 0eba 0D       		.uleb128 0xd
+ 4509 0ebb 00000000 		.long	.LASF341
+ 4510 0ebf 2E       		.sleb128 46
+ 4511 0ec0 0D       		.uleb128 0xd
+ 4512 0ec1 00000000 		.long	.LASF342
+ 4513 0ec5 2F       		.sleb128 47
+ 4514 0ec6 0D       		.uleb128 0xd
+ 4515 0ec7 00000000 		.long	.LASF343
+ 4516 0ecb 30       		.sleb128 48
+ 4517 0ecc 0D       		.uleb128 0xd
+ 4518 0ecd 00000000 		.long	.LASF344
+ 4519 0ed1 31       		.sleb128 49
+ 4520 0ed2 00       		.byte	0x0
+ 4521 0ed3 1E       		.uleb128 0x1e
+ 4522 0ed4 00000000 		.long	.LASF347
+ 4523 0ed8 01       		.byte	0x1
+ 4524 0ed9 4B       		.byte	0x4b
+ 4525 0eda 01       		.byte	0x1
+ 4526 0edb 3D050000 		.long	0x53d
+ 4527 0edf 00000000 		.quad	.LFB601
+ 4527      00000000 
+ 4528 0ee7 00000000 		.quad	.LFE601
+ 4528      00000000 
+ 4529 0eef 00000000 		.long	.LLST0
+ 4530 0ef3 130F0000 		.long	0xf13
+ 4531 0ef7 1F       		.uleb128 0x1f
+ 4532 0ef8 00000000 		.long	.LASF345
+ 4533 0efc 01       		.byte	0x1
+ 4534 0efd 4B       		.byte	0x4b
+ 4535 0efe 1F040000 		.long	0x41f
+ 4536 0f02 02       		.byte	0x2
+ 4537 0f03 91       		.byte	0x91
+ 4538 0f04 68       		.sleb128 -24
+
GAS LISTING /tmp/ccWvEaWW.s 			page 108
+
+
+ 4539 0f05 20       		.uleb128 0x20
+ 4540 0f06 637600   		.string	"cv"
+ 4541 0f09 01       		.byte	0x1
+ 4542 0f0a 4E       		.byte	0x4e
+ 4543 0f0b 3D050000 		.long	0x53d
+ 4544 0f0f 02       		.byte	0x2
+ 4545 0f10 76       		.byte	0x76
+ 4546 0f11 60       		.sleb128 -32
+ 4547 0f12 00       		.byte	0x0
+ 4548 0f13 21       		.uleb128 0x21
+ 4549 0f14 00000000 		.long	.LASF395
+ 4550 0f18 01       		.byte	0x1
+ 4551 0f19 62       		.byte	0x62
+ 4552 0f1a 01       		.byte	0x1
+ 4553 0f1b 00000000 		.quad	.LFB602
+ 4553      00000000 
+ 4554 0f23 00000000 		.quad	.LFE602
+ 4554      00000000 
+ 4555 0f2b 00000000 		.long	.LLST1
+ 4556 0f2f 5D0F0000 		.long	0xf5d
+ 4557 0f33 22       		.uleb128 0x22
+ 4558 0f34 637600   		.string	"cv"
+ 4559 0f37 01       		.byte	0x1
+ 4560 0f38 62       		.byte	0x62
+ 4561 0f39 5D0F0000 		.long	0xf5d
+ 4562 0f3d 02       		.byte	0x2
+ 4563 0f3e 91       		.byte	0x91
+ 4564 0f3f 60       		.sleb128 -32
+ 4565 0f40 1F       		.uleb128 0x1f
+ 4566 0f41 00000000 		.long	.LASF346
+ 4567 0f45 01       		.byte	0x1
+ 4568 0f46 62       		.byte	0x62
+ 4569 0f47 B4000000 		.long	0xb4
+ 4570 0f4b 02       		.byte	0x2
+ 4571 0f4c 91       		.byte	0x91
+ 4572 0f4d 58       		.sleb128 -40
+ 4573 0f4e 20       		.uleb128 0x20
+ 4574 0f4f 72637600 		.string	"rcv"
+ 4575 0f53 01       		.byte	0x1
+ 4576 0f54 65       		.byte	0x65
+ 4577 0f55 3D050000 		.long	0x53d
+ 4578 0f59 02       		.byte	0x2
+ 4579 0f5a 76       		.byte	0x76
+ 4580 0f5b 50       		.sleb128 -48
+ 4581 0f5c 00       		.byte	0x0
+ 4582 0f5d 0B       		.uleb128 0xb
+ 4583 0f5e 3D050000 		.long	0x53d
+ 4584 0f62 1E       		.uleb128 0x1e
+ 4585 0f63 00000000 		.long	.LASF348
+ 4586 0f67 01       		.byte	0x1
+ 4587 0f68 71       		.byte	0x71
+ 4588 0f69 01       		.byte	0x1
+ 4589 0f6a 7B000000 		.long	0x7b
+ 4590 0f6e 00000000 		.quad	.LFB603
+ 4590      00000000 
+ 4591 0f76 00000000 		.quad	.LFE603
+ 4591      00000000 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 109
+
+
+ 4592 0f7e 00000000 		.long	.LLST2
+ 4593 0f82 A20F0000 		.long	0xfa2
+ 4594 0f86 1F       		.uleb128 0x1f
+ 4595 0f87 00000000 		.long	.LASF349
+ 4596 0f8b 01       		.byte	0x1
+ 4597 0f8c 71       		.byte	0x71
+ 4598 0f8d DE030000 		.long	0x3de
+ 4599 0f91 02       		.byte	0x2
+ 4600 0f92 91       		.byte	0x91
+ 4601 0f93 58       		.sleb128 -40
+ 4602 0f94 20       		.uleb128 0x20
+ 4603 0f95 726300   		.string	"rc"
+ 4604 0f98 01       		.byte	0x1
+ 4605 0f99 73       		.byte	0x73
+ 4606 0f9a 7B000000 		.long	0x7b
+ 4607 0f9e 02       		.byte	0x2
+ 4608 0f9f 91       		.byte	0x91
+ 4609 0fa0 6C       		.sleb128 -20
+ 4610 0fa1 00       		.byte	0x0
+ 4611 0fa2 1E       		.uleb128 0x1e
+ 4612 0fa3 00000000 		.long	.LASF350
+ 4613 0fa7 01       		.byte	0x1
+ 4614 0fa8 7E       		.byte	0x7e
+ 4615 0fa9 01       		.byte	0x1
+ 4616 0faa 7B000000 		.long	0x7b
+ 4617 0fae 00000000 		.quad	.LFB604
+ 4617      00000000 
+ 4618 0fb6 00000000 		.quad	.LFE604
+ 4618      00000000 
+ 4619 0fbe 00000000 		.long	.LLST3
+ 4620 0fc2 27100000 		.long	0x1027
+ 4621 0fc6 1F       		.uleb128 0x1f
+ 4622 0fc7 00000000 		.long	.LASF349
+ 4623 0fcb 01       		.byte	0x1
+ 4624 0fcc 7E       		.byte	0x7e
+ 4625 0fcd DE030000 		.long	0x3de
+ 4626 0fd1 02       		.byte	0x2
+ 4627 0fd2 91       		.byte	0x91
+ 4628 0fd3 48       		.sleb128 -56
+ 4629 0fd4 1F       		.uleb128 0x1f
+ 4630 0fd5 00000000 		.long	.LASF351
+ 4631 0fd9 01       		.byte	0x1
+ 4632 0fda 7F       		.byte	0x7f
+ 4633 0fdb B6000000 		.long	0xb6
+ 4634 0fdf 02       		.byte	0x2
+ 4635 0fe0 91       		.byte	0x91
+ 4636 0fe1 40       		.sleb128 -64
+ 4637 0fe2 1F       		.uleb128 0x1f
+ 4638 0fe3 00000000 		.long	.LASF352
+ 4639 0fe7 01       		.byte	0x1
+ 4640 0fe8 80       		.byte	0x80
+ 4641 0fe9 62000000 		.long	0x62
+ 4642 0fed 03       		.byte	0x3
+ 4643 0fee 91       		.byte	0x91
+ 4644 0fef BC7F     		.sleb128 -68
+ 4645 0ff1 20       		.uleb128 0x20
+ 4646 0ff2 726300   		.string	"rc"
+
GAS LISTING /tmp/ccWvEaWW.s 			page 110
+
+
+ 4647 0ff5 01       		.byte	0x1
+ 4648 0ff6 82       		.byte	0x82
+ 4649 0ff7 7B000000 		.long	0x7b
+ 4650 0ffb 02       		.byte	0x2
+ 4651 0ffc 91       		.byte	0x91
+ 4652 0ffd 5C       		.sleb128 -36
+ 4653 0ffe 23       		.uleb128 0x23
+ 4654 0fff 00000000 		.long	.LASF353
+ 4655 1003 37100000 		.long	0x1037
+ 4656 1007 01       		.byte	0x1
+ 4657 1008 09       		.byte	0x9
+ 4658 1009 03       		.byte	0x3
+ 4659 100a 00000000 		.quad	__PRETTY_FUNCTION__.7296
+ 4659      00000000 
+ 4660 1012 23       		.uleb128 0x23
+ 4661 1013 00000000 		.long	.LASF354
+ 4662 1017 3C100000 		.long	0x103c
+ 4663 101b 01       		.byte	0x1
+ 4664 101c 09       		.byte	0x9
+ 4665 101d 03       		.byte	0x3
+ 4666 101e 00000000 		.quad	__func__.7298
+ 4666      00000000 
+ 4667 1026 00       		.byte	0x0
+ 4668 1027 1B       		.uleb128 0x1b
+ 4669 1028 C1000000 		.long	0xc1
+ 4670 102c 37100000 		.long	0x1037
+ 4671 1030 17       		.uleb128 0x17
+ 4672 1031 B1000000 		.long	0xb1
+ 4673 1035 1C       		.byte	0x1c
+ 4674 1036 00       		.byte	0x0
+ 4675 1037 0B       		.uleb128 0xb
+ 4676 1038 27100000 		.long	0x1027
+ 4677 103c 0B       		.uleb128 0xb
+ 4678 103d 27100000 		.long	0x1027
+ 4679 1041 1E       		.uleb128 0x1e
+ 4680 1042 00000000 		.long	.LASF355
+ 4681 1046 01       		.byte	0x1
+ 4682 1047 97       		.byte	0x97
+ 4683 1048 01       		.byte	0x1
+ 4684 1049 7B000000 		.long	0x7b
+ 4685 104d 00000000 		.quad	.LFB605
+ 4685      00000000 
+ 4686 1055 00000000 		.quad	.LFE605
+ 4686      00000000 
+ 4687 105d 00000000 		.long	.LLST4
+ 4688 1061 C6100000 		.long	0x10c6
+ 4689 1065 1F       		.uleb128 0x1f
+ 4690 1066 00000000 		.long	.LASF349
+ 4691 106a 01       		.byte	0x1
+ 4692 106b 97       		.byte	0x97
+ 4693 106c DE030000 		.long	0x3de
+ 4694 1070 02       		.byte	0x2
+ 4695 1071 91       		.byte	0x91
+ 4696 1072 48       		.sleb128 -56
+ 4697 1073 1F       		.uleb128 0x1f
+ 4698 1074 00000000 		.long	.LASF351
+ 4699 1078 01       		.byte	0x1
+
GAS LISTING /tmp/ccWvEaWW.s 			page 111
+
+
+ 4700 1079 98       		.byte	0x98
+ 4701 107a B6000000 		.long	0xb6
+ 4702 107e 02       		.byte	0x2
+ 4703 107f 91       		.byte	0x91
+ 4704 1080 40       		.sleb128 -64
+ 4705 1081 1F       		.uleb128 0x1f
+ 4706 1082 00000000 		.long	.LASF352
+ 4707 1086 01       		.byte	0x1
+ 4708 1087 99       		.byte	0x99
+ 4709 1088 62000000 		.long	0x62
+ 4710 108c 03       		.byte	0x3
+ 4711 108d 91       		.byte	0x91
+ 4712 108e BC7F     		.sleb128 -68
+ 4713 1090 20       		.uleb128 0x20
+ 4714 1091 726300   		.string	"rc"
+ 4715 1094 01       		.byte	0x1
+ 4716 1095 9B       		.byte	0x9b
+ 4717 1096 7B000000 		.long	0x7b
+ 4718 109a 02       		.byte	0x2
+ 4719 109b 91       		.byte	0x91
+ 4720 109c 5C       		.sleb128 -36
+ 4721 109d 23       		.uleb128 0x23
+ 4722 109e 00000000 		.long	.LASF353
+ 4723 10a2 C6100000 		.long	0x10c6
+ 4724 10a6 01       		.byte	0x1
+ 4725 10a7 09       		.byte	0x9
+ 4726 10a8 03       		.byte	0x3
+ 4727 10a9 00000000 		.quad	__PRETTY_FUNCTION__.7320
+ 4727      00000000 
+ 4728 10b1 23       		.uleb128 0x23
+ 4729 10b2 00000000 		.long	.LASF354
+ 4730 10b6 CB100000 		.long	0x10cb
+ 4731 10ba 01       		.byte	0x1
+ 4732 10bb 09       		.byte	0x9
+ 4733 10bc 03       		.byte	0x3
+ 4734 10bd 00000000 		.quad	__func__.7322
+ 4734      00000000 
+ 4735 10c5 00       		.byte	0x0
+ 4736 10c6 0B       		.uleb128 0xb
+ 4737 10c7 27100000 		.long	0x1027
+ 4738 10cb 0B       		.uleb128 0xb
+ 4739 10cc 27100000 		.long	0x1027
+ 4740 10d0 1E       		.uleb128 0x1e
+ 4741 10d1 00000000 		.long	.LASF356
+ 4742 10d5 01       		.byte	0x1
+ 4743 10d6 B1       		.byte	0xb1
+ 4744 10d7 01       		.byte	0x1
+ 4745 10d8 7B000000 		.long	0x7b
+ 4746 10dc 00000000 		.quad	.LFB606
+ 4746      00000000 
+ 4747 10e4 00000000 		.quad	.LFE606
+ 4747      00000000 
+ 4748 10ec 00000000 		.long	.LLST5
+ 4749 10f0 25110000 		.long	0x1125
+ 4750 10f4 1F       		.uleb128 0x1f
+ 4751 10f5 00000000 		.long	.LASF349
+ 4752 10f9 01       		.byte	0x1
+
GAS LISTING /tmp/ccWvEaWW.s 			page 112
+
+
+ 4753 10fa B1       		.byte	0xb1
+ 4754 10fb DE030000 		.long	0x3de
+ 4755 10ff 02       		.byte	0x2
+ 4756 1100 91       		.byte	0x91
+ 4757 1101 68       		.sleb128 -24
+ 4758 1102 1F       		.uleb128 0x1f
+ 4759 1103 00000000 		.long	.LASF357
+ 4760 1107 01       		.byte	0x1
+ 4761 1108 B2       		.byte	0xb2
+ 4762 1109 1F040000 		.long	0x41f
+ 4763 110d 02       		.byte	0x2
+ 4764 110e 91       		.byte	0x91
+ 4765 110f 60       		.sleb128 -32
+ 4766 1110 23       		.uleb128 0x23
+ 4767 1111 00000000 		.long	.LASF353
+ 4768 1115 35110000 		.long	0x1135
+ 4769 1119 01       		.byte	0x1
+ 4770 111a 09       		.byte	0x9
+ 4771 111b 03       		.byte	0x3
+ 4772 111c 00000000 		.quad	__PRETTY_FUNCTION__.7342
+ 4772      00000000 
+ 4773 1124 00       		.byte	0x0
+ 4774 1125 1B       		.uleb128 0x1b
+ 4775 1126 C1000000 		.long	0xc1
+ 4776 112a 35110000 		.long	0x1135
+ 4777 112e 17       		.uleb128 0x17
+ 4778 112f B1000000 		.long	0xb1
+ 4779 1133 1D       		.byte	0x1d
+ 4780 1134 00       		.byte	0x0
+ 4781 1135 0B       		.uleb128 0xb
+ 4782 1136 25110000 		.long	0x1125
+ 4783 113a 1E       		.uleb128 0x1e
+ 4784 113b 00000000 		.long	.LASF358
+ 4785 113f 01       		.byte	0x1
+ 4786 1140 BE       		.byte	0xbe
+ 4787 1141 01       		.byte	0x1
+ 4788 1142 7B000000 		.long	0x7b
+ 4789 1146 00000000 		.quad	.LFB607
+ 4789      00000000 
+ 4790 114e 00000000 		.quad	.LFE607
+ 4790      00000000 
+ 4791 1156 00000000 		.long	.LLST6
+ 4792 115a 8F110000 		.long	0x118f
+ 4793 115e 1F       		.uleb128 0x1f
+ 4794 115f 00000000 		.long	.LASF349
+ 4795 1163 01       		.byte	0x1
+ 4796 1164 BE       		.byte	0xbe
+ 4797 1165 DE030000 		.long	0x3de
+ 4798 1169 02       		.byte	0x2
+ 4799 116a 91       		.byte	0x91
+ 4800 116b 68       		.sleb128 -24
+ 4801 116c 1F       		.uleb128 0x1f
+ 4802 116d 00000000 		.long	.LASF357
+ 4803 1171 01       		.byte	0x1
+ 4804 1172 BF       		.byte	0xbf
+ 4805 1173 1F040000 		.long	0x41f
+ 4806 1177 02       		.byte	0x2
+
GAS LISTING /tmp/ccWvEaWW.s 			page 113
+
+
+ 4807 1178 91       		.byte	0x91
+ 4808 1179 60       		.sleb128 -32
+ 4809 117a 23       		.uleb128 0x23
+ 4810 117b 00000000 		.long	.LASF353
+ 4811 117f 8F110000 		.long	0x118f
+ 4812 1183 01       		.byte	0x1
+ 4813 1184 09       		.byte	0x9
+ 4814 1185 03       		.byte	0x3
+ 4815 1186 00000000 		.quad	__PRETTY_FUNCTION__.7355
+ 4815      00000000 
+ 4816 118e 00       		.byte	0x0
+ 4817 118f 0B       		.uleb128 0xb
+ 4818 1190 25110000 		.long	0x1125
+ 4819 1194 1E       		.uleb128 0x1e
+ 4820 1195 00000000 		.long	.LASF359
+ 4821 1199 01       		.byte	0x1
+ 4822 119a CB       		.byte	0xcb
+ 4823 119b 01       		.byte	0x1
+ 4824 119c 7B000000 		.long	0x7b
+ 4825 11a0 00000000 		.quad	.LFB608
+ 4825      00000000 
+ 4826 11a8 00000000 		.quad	.LFE608
+ 4826      00000000 
+ 4827 11b0 00000000 		.long	.LLST7
+ 4828 11b4 E9110000 		.long	0x11e9
+ 4829 11b8 1F       		.uleb128 0x1f
+ 4830 11b9 00000000 		.long	.LASF349
+ 4831 11bd 01       		.byte	0x1
+ 4832 11be CB       		.byte	0xcb
+ 4833 11bf DE030000 		.long	0x3de
+ 4834 11c3 02       		.byte	0x2
+ 4835 11c4 91       		.byte	0x91
+ 4836 11c5 68       		.sleb128 -24
+ 4837 11c6 1F       		.uleb128 0x1f
+ 4838 11c7 00000000 		.long	.LASF360
+ 4839 11cb 01       		.byte	0x1
+ 4840 11cc CC       		.byte	0xcc
+ 4841 11cd F7010000 		.long	0x1f7
+ 4842 11d1 02       		.byte	0x2
+ 4843 11d2 91       		.byte	0x91
+ 4844 11d3 60       		.sleb128 -32
+ 4845 11d4 23       		.uleb128 0x23
+ 4846 11d5 00000000 		.long	.LASF353
+ 4847 11d9 F9110000 		.long	0x11f9
+ 4848 11dd 01       		.byte	0x1
+ 4849 11de 09       		.byte	0x9
+ 4850 11df 03       		.byte	0x3
+ 4851 11e0 00000000 		.quad	__PRETTY_FUNCTION__.7368
+ 4851      00000000 
+ 4852 11e8 00       		.byte	0x0
+ 4853 11e9 1B       		.uleb128 0x1b
+ 4854 11ea C1000000 		.long	0xc1
+ 4855 11ee F9110000 		.long	0x11f9
+ 4856 11f2 17       		.uleb128 0x17
+ 4857 11f3 B1000000 		.long	0xb1
+ 4858 11f7 24       		.byte	0x24
+ 4859 11f8 00       		.byte	0x0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 114
+
+
+ 4860 11f9 0B       		.uleb128 0xb
+ 4861 11fa E9110000 		.long	0x11e9
+ 4862 11fe 1E       		.uleb128 0x1e
+ 4863 11ff 00000000 		.long	.LASF361
+ 4864 1203 01       		.byte	0x1
+ 4865 1204 D8       		.byte	0xd8
+ 4866 1205 01       		.byte	0x1
+ 4867 1206 7B000000 		.long	0x7b
+ 4868 120a 00000000 		.quad	.LFB609
+ 4868      00000000 
+ 4869 1212 00000000 		.quad	.LFE609
+ 4869      00000000 
+ 4870 121a 00000000 		.long	.LLST8
+ 4871 121e 53120000 		.long	0x1253
+ 4872 1222 1F       		.uleb128 0x1f
+ 4873 1223 00000000 		.long	.LASF349
+ 4874 1227 01       		.byte	0x1
+ 4875 1228 D8       		.byte	0xd8
+ 4876 1229 DE030000 		.long	0x3de
+ 4877 122d 02       		.byte	0x2
+ 4878 122e 91       		.byte	0x91
+ 4879 122f 68       		.sleb128 -24
+ 4880 1230 1F       		.uleb128 0x1f
+ 4881 1231 00000000 		.long	.LASF360
+ 4882 1235 01       		.byte	0x1
+ 4883 1236 D9       		.byte	0xd9
+ 4884 1237 F7010000 		.long	0x1f7
+ 4885 123b 02       		.byte	0x2
+ 4886 123c 91       		.byte	0x91
+ 4887 123d 60       		.sleb128 -32
+ 4888 123e 23       		.uleb128 0x23
+ 4889 123f 00000000 		.long	.LASF353
+ 4890 1243 53120000 		.long	0x1253
+ 4891 1247 01       		.byte	0x1
+ 4892 1248 09       		.byte	0x9
+ 4893 1249 03       		.byte	0x3
+ 4894 124a 00000000 		.quad	__PRETTY_FUNCTION__.7378
+ 4894      00000000 
+ 4895 1252 00       		.byte	0x0
+ 4896 1253 0B       		.uleb128 0xb
+ 4897 1254 E9110000 		.long	0x11e9
+ 4898 1258 1E       		.uleb128 0x1e
+ 4899 1259 00000000 		.long	.LASF362
+ 4900 125d 01       		.byte	0x1
+ 4901 125e E4       		.byte	0xe4
+ 4902 125f 01       		.byte	0x1
+ 4903 1260 3D050000 		.long	0x53d
+ 4904 1264 00000000 		.quad	.LFB610
+ 4904      00000000 
+ 4905 126c 00000000 		.quad	.LFE610
+ 4905      00000000 
+ 4906 1274 00000000 		.long	.LLST9
+ 4907 1278 97120000 		.long	0x1297
+ 4908 127c 1F       		.uleb128 0x1f
+ 4909 127d 00000000 		.long	.LASF349
+ 4910 1281 01       		.byte	0x1
+ 4911 1282 E4       		.byte	0xe4
+
GAS LISTING /tmp/ccWvEaWW.s 			page 115
+
+
+ 4912 1283 61040000 		.long	0x461
+ 4913 1287 02       		.byte	0x2
+ 4914 1288 91       		.byte	0x91
+ 4915 1289 68       		.sleb128 -24
+ 4916 128a 22       		.uleb128 0x22
+ 4917 128b 637600   		.string	"cv"
+ 4918 128e 01       		.byte	0x1
+ 4919 128f E5       		.byte	0xe5
+ 4920 1290 3D050000 		.long	0x53d
+ 4921 1294 01       		.byte	0x1
+ 4922 1295 61       		.byte	0x61
+ 4923 1296 00       		.byte	0x0
+ 4924 1297 1E       		.uleb128 0x1e
+ 4925 1298 00000000 		.long	.LASF363
+ 4926 129c 01       		.byte	0x1
+ 4927 129d EB       		.byte	0xeb
+ 4928 129e 01       		.byte	0x1
+ 4929 129f 3D050000 		.long	0x53d
+ 4930 12a3 00000000 		.quad	.LFB611
+ 4930      00000000 
+ 4931 12ab 00000000 		.quad	.LFE611
+ 4931      00000000 
+ 4932 12b3 00000000 		.long	.LLST10
+ 4933 12b7 D6120000 		.long	0x12d6
+ 4934 12bb 1F       		.uleb128 0x1f
+ 4935 12bc 00000000 		.long	.LASF349
+ 4936 12c0 01       		.byte	0x1
+ 4937 12c1 EB       		.byte	0xeb
+ 4938 12c2 61040000 		.long	0x461
+ 4939 12c6 02       		.byte	0x2
+ 4940 12c7 91       		.byte	0x91
+ 4941 12c8 68       		.sleb128 -24
+ 4942 12c9 22       		.uleb128 0x22
+ 4943 12ca 637600   		.string	"cv"
+ 4944 12cd 01       		.byte	0x1
+ 4945 12ce EC       		.byte	0xec
+ 4946 12cf 3D050000 		.long	0x53d
+ 4947 12d3 01       		.byte	0x1
+ 4948 12d4 61       		.byte	0x61
+ 4949 12d5 00       		.byte	0x0
+ 4950 12d6 1E       		.uleb128 0x1e
+ 4951 12d7 00000000 		.long	.LASF364
+ 4952 12db 01       		.byte	0x1
+ 4953 12dc F2       		.byte	0xf2
+ 4954 12dd 01       		.byte	0x1
+ 4955 12de 7B000000 		.long	0x7b
+ 4956 12e2 00000000 		.quad	.LFB612
+ 4956      00000000 
+ 4957 12ea 00000000 		.quad	.LFE612
+ 4957      00000000 
+ 4958 12f2 00000000 		.long	.LLST11
+ 4959 12f6 31130000 		.long	0x1331
+ 4960 12fa 1F       		.uleb128 0x1f
+ 4961 12fb 00000000 		.long	.LASF349
+ 4962 12ff 01       		.byte	0x1
+ 4963 1300 F2       		.byte	0xf2
+ 4964 1301 61040000 		.long	0x461
+
GAS LISTING /tmp/ccWvEaWW.s 			page 116
+
+
+ 4965 1305 02       		.byte	0x2
+ 4966 1306 91       		.byte	0x91
+ 4967 1307 58       		.sleb128 -40
+ 4968 1308 22       		.uleb128 0x22
+ 4969 1309 696E00   		.string	"in"
+ 4970 130c 01       		.byte	0x1
+ 4971 130d F3       		.byte	0xf3
+ 4972 130e 1F040000 		.long	0x41f
+ 4973 1312 02       		.byte	0x2
+ 4974 1313 91       		.byte	0x91
+ 4975 1314 50       		.sleb128 -48
+ 4976 1315 22       		.uleb128 0x22
+ 4977 1316 6F757400 		.string	"out"
+ 4978 131a 01       		.byte	0x1
+ 4979 131b F3       		.byte	0xf3
+ 4980 131c B4000000 		.long	0xb4
+ 4981 1320 02       		.byte	0x2
+ 4982 1321 91       		.byte	0x91
+ 4983 1322 48       		.sleb128 -56
+ 4984 1323 20       		.uleb128 0x20
+ 4985 1324 637600   		.string	"cv"
+ 4986 1327 01       		.byte	0x1
+ 4987 1328 F5       		.byte	0xf5
+ 4988 1329 3D050000 		.long	0x53d
+ 4989 132d 02       		.byte	0x2
+ 4990 132e 91       		.byte	0x91
+ 4991 132f 60       		.sleb128 -32
+ 4992 1330 00       		.byte	0x0
+ 4993 1331 1E       		.uleb128 0x1e
+ 4994 1332 00000000 		.long	.LASF365
+ 4995 1336 01       		.byte	0x1
+ 4996 1337 FE       		.byte	0xfe
+ 4997 1338 01       		.byte	0x1
+ 4998 1339 7B000000 		.long	0x7b
+ 4999 133d 00000000 		.quad	.LFB613
+ 4999      00000000 
+ 5000 1345 00000000 		.quad	.LFE613
+ 5000      00000000 
+ 5001 134d 00000000 		.long	.LLST12
+ 5002 1351 8D130000 		.long	0x138d
+ 5003 1355 1F       		.uleb128 0x1f
+ 5004 1356 00000000 		.long	.LASF349
+ 5005 135a 01       		.byte	0x1
+ 5006 135b FE       		.byte	0xfe
+ 5007 135c 61040000 		.long	0x461
+ 5008 1360 02       		.byte	0x2
+ 5009 1361 91       		.byte	0x91
+ 5010 1362 58       		.sleb128 -40
+ 5011 1363 22       		.uleb128 0x22
+ 5012 1364 696E00   		.string	"in"
+ 5013 1367 01       		.byte	0x1
+ 5014 1368 FF       		.byte	0xff
+ 5015 1369 1F040000 		.long	0x41f
+ 5016 136d 02       		.byte	0x2
+ 5017 136e 91       		.byte	0x91
+ 5018 136f 50       		.sleb128 -48
+ 5019 1370 22       		.uleb128 0x22
+
GAS LISTING /tmp/ccWvEaWW.s 			page 117
+
+
+ 5020 1371 6F757400 		.string	"out"
+ 5021 1375 01       		.byte	0x1
+ 5022 1376 FF       		.byte	0xff
+ 5023 1377 B4000000 		.long	0xb4
+ 5024 137b 02       		.byte	0x2
+ 5025 137c 91       		.byte	0x91
+ 5026 137d 48       		.sleb128 -56
+ 5027 137e 24       		.uleb128 0x24
+ 5028 137f 637600   		.string	"cv"
+ 5029 1382 01       		.byte	0x1
+ 5030 1383 0101     		.value	0x101
+ 5031 1385 3D050000 		.long	0x53d
+ 5032 1389 02       		.byte	0x2
+ 5033 138a 91       		.byte	0x91
+ 5034 138b 60       		.sleb128 -32
+ 5035 138c 00       		.byte	0x0
+ 5036 138d 25       		.uleb128 0x25
+ 5037 138e 00000000 		.long	.LASF366
+ 5038 1392 01       		.byte	0x1
+ 5039 1393 0A01     		.value	0x10a
+ 5040 1395 01       		.byte	0x1
+ 5041 1396 7B000000 		.long	0x7b
+ 5042 139a 00000000 		.quad	.LFB614
+ 5042      00000000 
+ 5043 13a2 00000000 		.quad	.LFE614
+ 5043      00000000 
+ 5044 13aa 00000000 		.long	.LLST13
+ 5045 13ae 15140000 		.long	0x1415
+ 5046 13b2 26       		.uleb128 0x26
+ 5047 13b3 00000000 		.long	.LASF349
+ 5048 13b7 01       		.byte	0x1
+ 5049 13b8 0A01     		.value	0x10a
+ 5050 13ba 61040000 		.long	0x461
+ 5051 13be 02       		.byte	0x2
+ 5052 13bf 91       		.byte	0x91
+ 5053 13c0 58       		.sleb128 -40
+ 5054 13c1 27       		.uleb128 0x27
+ 5055 13c2 696E00   		.string	"in"
+ 5056 13c5 01       		.byte	0x1
+ 5057 13c6 0A01     		.value	0x10a
+ 5058 13c8 1F040000 		.long	0x41f
+ 5059 13cc 02       		.byte	0x2
+ 5060 13cd 91       		.byte	0x91
+ 5061 13ce 50       		.sleb128 -48
+ 5062 13cf 27       		.uleb128 0x27
+ 5063 13d0 6F757400 		.string	"out"
+ 5064 13d4 01       		.byte	0x1
+ 5065 13d5 0A01     		.value	0x10a
+ 5066 13d7 B4000000 		.long	0xb4
+ 5067 13db 02       		.byte	0x2
+ 5068 13dc 91       		.byte	0x91
+ 5069 13dd 48       		.sleb128 -56
+ 5070 13de 24       		.uleb128 0x24
+ 5071 13df 726300   		.string	"rc"
+ 5072 13e2 01       		.byte	0x1
+ 5073 13e3 0C01     		.value	0x10c
+ 5074 13e5 7B000000 		.long	0x7b
+
GAS LISTING /tmp/ccWvEaWW.s 			page 118
+
+
+ 5075 13e9 02       		.byte	0x2
+ 5076 13ea 91       		.byte	0x91
+ 5077 13eb 6C       		.sleb128 -20
+ 5078 13ec 23       		.uleb128 0x23
+ 5079 13ed 00000000 		.long	.LASF353
+ 5080 13f1 25140000 		.long	0x1425
+ 5081 13f5 01       		.byte	0x1
+ 5082 13f6 09       		.byte	0x9
+ 5083 13f7 03       		.byte	0x3
+ 5084 13f8 00000000 		.quad	__PRETTY_FUNCTION__.7427
+ 5084      00000000 
+ 5085 1400 23       		.uleb128 0x23
+ 5086 1401 00000000 		.long	.LASF354
+ 5087 1405 2A140000 		.long	0x142a
+ 5088 1409 01       		.byte	0x1
+ 5089 140a 09       		.byte	0x9
+ 5090 140b 03       		.byte	0x3
+ 5091 140c 00000000 		.quad	__func__.7428
+ 5091      00000000 
+ 5092 1414 00       		.byte	0x0
+ 5093 1415 1B       		.uleb128 0x1b
+ 5094 1416 C1000000 		.long	0xc1
+ 5095 141a 25140000 		.long	0x1425
+ 5096 141e 17       		.uleb128 0x17
+ 5097 141f B1000000 		.long	0xb1
+ 5098 1423 16       		.byte	0x16
+ 5099 1424 00       		.byte	0x0
+ 5100 1425 0B       		.uleb128 0xb
+ 5101 1426 15140000 		.long	0x1415
+ 5102 142a 0B       		.uleb128 0xb
+ 5103 142b 15140000 		.long	0x1415
+ 5104 142f 25       		.uleb128 0x25
+ 5105 1430 00000000 		.long	.LASF367
+ 5106 1434 01       		.byte	0x1
+ 5107 1435 1E01     		.value	0x11e
+ 5108 1437 01       		.byte	0x1
+ 5109 1438 7B000000 		.long	0x7b
+ 5110 143c 00000000 		.quad	.LFB615
+ 5110      00000000 
+ 5111 1444 00000000 		.quad	.LFE615
+ 5111      00000000 
+ 5112 144c 00000000 		.long	.LLST14
+ 5113 1450 B7140000 		.long	0x14b7
+ 5114 1454 26       		.uleb128 0x26
+ 5115 1455 00000000 		.long	.LASF349
+ 5116 1459 01       		.byte	0x1
+ 5117 145a 1E01     		.value	0x11e
+ 5118 145c 61040000 		.long	0x461
+ 5119 1460 02       		.byte	0x2
+ 5120 1461 91       		.byte	0x91
+ 5121 1462 58       		.sleb128 -40
+ 5122 1463 27       		.uleb128 0x27
+ 5123 1464 696E00   		.string	"in"
+ 5124 1467 01       		.byte	0x1
+ 5125 1468 1E01     		.value	0x11e
+ 5126 146a 1F040000 		.long	0x41f
+ 5127 146e 02       		.byte	0x2
+
GAS LISTING /tmp/ccWvEaWW.s 			page 119
+
+
+ 5128 146f 91       		.byte	0x91
+ 5129 1470 50       		.sleb128 -48
+ 5130 1471 27       		.uleb128 0x27
+ 5131 1472 6F757400 		.string	"out"
+ 5132 1476 01       		.byte	0x1
+ 5133 1477 1E01     		.value	0x11e
+ 5134 1479 B4000000 		.long	0xb4
+ 5135 147d 02       		.byte	0x2
+ 5136 147e 91       		.byte	0x91
+ 5137 147f 48       		.sleb128 -56
+ 5138 1480 24       		.uleb128 0x24
+ 5139 1481 726300   		.string	"rc"
+ 5140 1484 01       		.byte	0x1
+ 5141 1485 2001     		.value	0x120
+ 5142 1487 7B000000 		.long	0x7b
+ 5143 148b 02       		.byte	0x2
+ 5144 148c 91       		.byte	0x91
+ 5145 148d 6C       		.sleb128 -20
+ 5146 148e 23       		.uleb128 0x23
+ 5147 148f 00000000 		.long	.LASF353
+ 5148 1493 B7140000 		.long	0x14b7
+ 5149 1497 01       		.byte	0x1
+ 5150 1498 09       		.byte	0x9
+ 5151 1499 03       		.byte	0x3
+ 5152 149a 00000000 		.quad	__PRETTY_FUNCTION__.7443
+ 5152      00000000 
+ 5153 14a2 23       		.uleb128 0x23
+ 5154 14a3 00000000 		.long	.LASF354
+ 5155 14a7 BC140000 		.long	0x14bc
+ 5156 14ab 01       		.byte	0x1
+ 5157 14ac 09       		.byte	0x9
+ 5158 14ad 03       		.byte	0x3
+ 5159 14ae 00000000 		.quad	__func__.7444
+ 5159      00000000 
+ 5160 14b6 00       		.byte	0x0
+ 5161 14b7 0B       		.uleb128 0xb
+ 5162 14b8 15140000 		.long	0x1415
+ 5163 14bc 0B       		.uleb128 0xb
+ 5164 14bd 15140000 		.long	0x1415
+ 5165 14c1 25       		.uleb128 0x25
+ 5166 14c2 00000000 		.long	.LASF368
+ 5167 14c6 01       		.byte	0x1
+ 5168 14c7 5C01     		.value	0x15c
+ 5169 14c9 01       		.byte	0x1
+ 5170 14ca 7B000000 		.long	0x7b
+ 5171 14ce 00000000 		.quad	.LFB616
+ 5171      00000000 
+ 5172 14d6 00000000 		.quad	.LFE616
+ 5172      00000000 
+ 5173 14de 00000000 		.long	.LLST15
+ 5174 14e2 40150000 		.long	0x1540
+ 5175 14e6 26       		.uleb128 0x26
+ 5176 14e7 00000000 		.long	.LASF349
+ 5177 14eb 01       		.byte	0x1
+ 5178 14ec 5C01     		.value	0x15c
+ 5179 14ee 61040000 		.long	0x461
+ 5180 14f2 02       		.byte	0x2
+
GAS LISTING /tmp/ccWvEaWW.s 			page 120
+
+
+ 5181 14f3 91       		.byte	0x91
+ 5182 14f4 58       		.sleb128 -40
+ 5183 14f5 27       		.uleb128 0x27
+ 5184 14f6 696E00   		.string	"in"
+ 5185 14f9 01       		.byte	0x1
+ 5186 14fa 5C01     		.value	0x15c
+ 5187 14fc 1F040000 		.long	0x41f
+ 5188 1500 02       		.byte	0x2
+ 5189 1501 91       		.byte	0x91
+ 5190 1502 50       		.sleb128 -48
+ 5191 1503 27       		.uleb128 0x27
+ 5192 1504 6F757400 		.string	"out"
+ 5193 1508 01       		.byte	0x1
+ 5194 1509 5C01     		.value	0x15c
+ 5195 150b B4000000 		.long	0xb4
+ 5196 150f 02       		.byte	0x2
+ 5197 1510 91       		.byte	0x91
+ 5198 1511 48       		.sleb128 -56
+ 5199 1512 26       		.uleb128 0x26
+ 5200 1513 00000000 		.long	.LASF369
+ 5201 1517 01       		.byte	0x1
+ 5202 1518 5C01     		.value	0x15c
+ 5203 151a 62000000 		.long	0x62
+ 5204 151e 02       		.byte	0x2
+ 5205 151f 91       		.byte	0x91
+ 5206 1520 44       		.sleb128 -60
+ 5207 1521 24       		.uleb128 0x24
+ 5208 1522 70696E00 		.string	"pin"
+ 5209 1526 01       		.byte	0x1
+ 5210 1527 5E01     		.value	0x15e
+ 5211 1529 40150000 		.long	0x1540
+ 5212 152d 02       		.byte	0x2
+ 5213 152e 91       		.byte	0x91
+ 5214 152f 60       		.sleb128 -32
+ 5215 1530 28       		.uleb128 0x28
+ 5216 1531 00000000 		.long	.LASF370
+ 5217 1535 01       		.byte	0x1
+ 5218 1536 5F01     		.value	0x15f
+ 5219 1538 4B150000 		.long	0x154b
+ 5220 153c 02       		.byte	0x2
+ 5221 153d 91       		.byte	0x91
+ 5222 153e 68       		.sleb128 -24
+ 5223 153f 00       		.byte	0x0
+ 5224 1540 0A       		.uleb128 0xa
+ 5225 1541 08       		.byte	0x8
+ 5226 1542 46150000 		.long	0x1546
+ 5227 1546 0B       		.uleb128 0xb
+ 5228 1547 49000000 		.long	0x49
+ 5229 154b 0A       		.uleb128 0xa
+ 5230 154c 08       		.byte	0x8
+ 5231 154d 49000000 		.long	0x49
+ 5232 1551 25       		.uleb128 0x25
+ 5233 1552 00000000 		.long	.LASF371
+ 5234 1556 01       		.byte	0x1
+ 5235 1557 6C01     		.value	0x16c
+ 5236 1559 01       		.byte	0x1
+ 5237 155a 7B000000 		.long	0x7b
+
GAS LISTING /tmp/ccWvEaWW.s 			page 121
+
+
+ 5238 155e 00000000 		.quad	.LFB617
+ 5238      00000000 
+ 5239 1566 00000000 		.quad	.LFE617
+ 5239      00000000 
+ 5240 156e 00000000 		.long	.LLST16
+ 5241 1572 D0150000 		.long	0x15d0
+ 5242 1576 26       		.uleb128 0x26
+ 5243 1577 00000000 		.long	.LASF349
+ 5244 157b 01       		.byte	0x1
+ 5245 157c 6C01     		.value	0x16c
+ 5246 157e 61040000 		.long	0x461
+ 5247 1582 02       		.byte	0x2
+ 5248 1583 91       		.byte	0x91
+ 5249 1584 58       		.sleb128 -40
+ 5250 1585 27       		.uleb128 0x27
+ 5251 1586 696E00   		.string	"in"
+ 5252 1589 01       		.byte	0x1
+ 5253 158a 6C01     		.value	0x16c
+ 5254 158c 1F040000 		.long	0x41f
+ 5255 1590 02       		.byte	0x2
+ 5256 1591 91       		.byte	0x91
+ 5257 1592 50       		.sleb128 -48
+ 5258 1593 27       		.uleb128 0x27
+ 5259 1594 6F757400 		.string	"out"
+ 5260 1598 01       		.byte	0x1
+ 5261 1599 6C01     		.value	0x16c
+ 5262 159b B4000000 		.long	0xb4
+ 5263 159f 02       		.byte	0x2
+ 5264 15a0 91       		.byte	0x91
+ 5265 15a1 48       		.sleb128 -56
+ 5266 15a2 26       		.uleb128 0x26
+ 5267 15a3 00000000 		.long	.LASF369
+ 5268 15a7 01       		.byte	0x1
+ 5269 15a8 6C01     		.value	0x16c
+ 5270 15aa 62000000 		.long	0x62
+ 5271 15ae 02       		.byte	0x2
+ 5272 15af 91       		.byte	0x91
+ 5273 15b0 44       		.sleb128 -60
+ 5274 15b1 24       		.uleb128 0x24
+ 5275 15b2 70696E00 		.string	"pin"
+ 5276 15b6 01       		.byte	0x1
+ 5277 15b7 6E01     		.value	0x16e
+ 5278 15b9 40150000 		.long	0x1540
+ 5279 15bd 02       		.byte	0x2
+ 5280 15be 91       		.byte	0x91
+ 5281 15bf 60       		.sleb128 -32
+ 5282 15c0 28       		.uleb128 0x28
+ 5283 15c1 00000000 		.long	.LASF370
+ 5284 15c5 01       		.byte	0x1
+ 5285 15c6 6F01     		.value	0x16f
+ 5286 15c8 4B150000 		.long	0x154b
+ 5287 15cc 02       		.byte	0x2
+ 5288 15cd 91       		.byte	0x91
+ 5289 15ce 68       		.sleb128 -24
+ 5290 15cf 00       		.byte	0x0
+ 5291 15d0 25       		.uleb128 0x25
+ 5292 15d1 00000000 		.long	.LASF372
+
GAS LISTING /tmp/ccWvEaWW.s 			page 122
+
+
+ 5293 15d5 01       		.byte	0x1
+ 5294 15d6 8201     		.value	0x182
+ 5295 15d8 01       		.byte	0x1
+ 5296 15d9 7B000000 		.long	0x7b
+ 5297 15dd 00000000 		.quad	.LFB618
+ 5297      00000000 
+ 5298 15e5 00000000 		.quad	.LFE618
+ 5298      00000000 
+ 5299 15ed 00000000 		.long	.LLST17
+ 5300 15f1 70160000 		.long	0x1670
+ 5301 15f5 26       		.uleb128 0x26
+ 5302 15f6 00000000 		.long	.LASF349
+ 5303 15fa 01       		.byte	0x1
+ 5304 15fb 8201     		.value	0x182
+ 5305 15fd DE030000 		.long	0x3de
+ 5306 1601 03       		.byte	0x3
+ 5307 1602 91       		.byte	0x91
+ 5308 1603 B87F     		.sleb128 -72
+ 5309 1605 27       		.uleb128 0x27
+ 5310 1606 696E00   		.string	"in"
+ 5311 1609 01       		.byte	0x1
+ 5312 160a 8201     		.value	0x182
+ 5313 160c 1F040000 		.long	0x41f
+ 5314 1610 03       		.byte	0x3
+ 5315 1611 91       		.byte	0x91
+ 5316 1612 B07F     		.sleb128 -80
+ 5317 1614 27       		.uleb128 0x27
+ 5318 1615 6F757400 		.string	"out"
+ 5319 1619 01       		.byte	0x1
+ 5320 161a 8201     		.value	0x182
+ 5321 161c B4000000 		.long	0xb4
+ 5322 1620 03       		.byte	0x3
+ 5323 1621 91       		.byte	0x91
+ 5324 1622 A87F     		.sleb128 -88
+ 5325 1624 26       		.uleb128 0x26
+ 5326 1625 00000000 		.long	.LASF369
+ 5327 1629 01       		.byte	0x1
+ 5328 162a 8201     		.value	0x182
+ 5329 162c 62000000 		.long	0x62
+ 5330 1630 03       		.byte	0x3
+ 5331 1631 91       		.byte	0x91
+ 5332 1632 A47F     		.sleb128 -92
+ 5333 1634 24       		.uleb128 0x24
+ 5334 1635 637600   		.string	"cv"
+ 5335 1638 01       		.byte	0x1
+ 5336 1639 8401     		.value	0x184
+ 5337 163b 3D050000 		.long	0x53d
+ 5338 163f 02       		.byte	0x2
+ 5339 1640 91       		.byte	0x91
+ 5340 1641 40       		.sleb128 -64
+ 5341 1642 28       		.uleb128 0x28
+ 5342 1643 00000000 		.long	.LASF357
+ 5343 1647 01       		.byte	0x1
+ 5344 1648 8501     		.value	0x185
+ 5345 164a 3D050000 		.long	0x53d
+ 5346 164e 02       		.byte	0x2
+ 5347 164f 91       		.byte	0x91
+
GAS LISTING /tmp/ccWvEaWW.s 			page 123
+
+
+ 5348 1650 50       		.sleb128 -48
+ 5349 1651 24       		.uleb128 0x24
+ 5350 1652 70696E00 		.string	"pin"
+ 5351 1656 01       		.byte	0x1
+ 5352 1657 8601     		.value	0x186
+ 5353 1659 40150000 		.long	0x1540
+ 5354 165d 02       		.byte	0x2
+ 5355 165e 91       		.byte	0x91
+ 5356 165f 60       		.sleb128 -32
+ 5357 1660 28       		.uleb128 0x28
+ 5358 1661 00000000 		.long	.LASF370
+ 5359 1665 01       		.byte	0x1
+ 5360 1666 8701     		.value	0x187
+ 5361 1668 4B150000 		.long	0x154b
+ 5362 166c 02       		.byte	0x2
+ 5363 166d 91       		.byte	0x91
+ 5364 166e 68       		.sleb128 -24
+ 5365 166f 00       		.byte	0x0
+ 5366 1670 25       		.uleb128 0x25
+ 5367 1671 00000000 		.long	.LASF373
+ 5368 1675 01       		.byte	0x1
+ 5369 1676 A401     		.value	0x1a4
+ 5370 1678 01       		.byte	0x1
+ 5371 1679 7B000000 		.long	0x7b
+ 5372 167d 00000000 		.quad	.LFB619
+ 5372      00000000 
+ 5373 1685 00000000 		.quad	.LFE619
+ 5373      00000000 
+ 5374 168d 00000000 		.long	.LLST18
+ 5375 1691 32170000 		.long	0x1732
+ 5376 1695 26       		.uleb128 0x26
+ 5377 1696 00000000 		.long	.LASF349
+ 5378 169a 01       		.byte	0x1
+ 5379 169b A401     		.value	0x1a4
+ 5380 169d DE030000 		.long	0x3de
+ 5381 16a1 03       		.byte	0x3
+ 5382 16a2 91       		.byte	0x91
+ 5383 16a3 A87F     		.sleb128 -88
+ 5384 16a5 27       		.uleb128 0x27
+ 5385 16a6 696E00   		.string	"in"
+ 5386 16a9 01       		.byte	0x1
+ 5387 16aa A401     		.value	0x1a4
+ 5388 16ac 1F040000 		.long	0x41f
+ 5389 16b0 03       		.byte	0x3
+ 5390 16b1 91       		.byte	0x91
+ 5391 16b2 A07F     		.sleb128 -96
+ 5392 16b4 27       		.uleb128 0x27
+ 5393 16b5 6F757400 		.string	"out"
+ 5394 16b9 01       		.byte	0x1
+ 5395 16ba A401     		.value	0x1a4
+ 5396 16bc B4000000 		.long	0xb4
+ 5397 16c0 03       		.byte	0x3
+ 5398 16c1 91       		.byte	0x91
+ 5399 16c2 987F     		.sleb128 -104
+ 5400 16c4 26       		.uleb128 0x26
+ 5401 16c5 00000000 		.long	.LASF369
+ 5402 16c9 01       		.byte	0x1
+
GAS LISTING /tmp/ccWvEaWW.s 			page 124
+
+
+ 5403 16ca A401     		.value	0x1a4
+ 5404 16cc 62000000 		.long	0x62
+ 5405 16d0 03       		.byte	0x3
+ 5406 16d1 91       		.byte	0x91
+ 5407 16d2 947F     		.sleb128 -108
+ 5408 16d4 24       		.uleb128 0x24
+ 5409 16d5 637600   		.string	"cv"
+ 5410 16d8 01       		.byte	0x1
+ 5411 16d9 A601     		.value	0x1a6
+ 5412 16db 3D050000 		.long	0x53d
+ 5413 16df 03       		.byte	0x3
+ 5414 16e0 91       		.byte	0x91
+ 5415 16e1 B07F     		.sleb128 -80
+ 5416 16e3 28       		.uleb128 0x28
+ 5417 16e4 00000000 		.long	.LASF357
+ 5418 16e8 01       		.byte	0x1
+ 5419 16e9 A701     		.value	0x1a7
+ 5420 16eb 3D050000 		.long	0x53d
+ 5421 16ef 02       		.byte	0x2
+ 5422 16f0 91       		.byte	0x91
+ 5423 16f1 40       		.sleb128 -64
+ 5424 16f2 24       		.uleb128 0x24
+ 5425 16f3 70696E00 		.string	"pin"
+ 5426 16f7 01       		.byte	0x1
+ 5427 16f8 A801     		.value	0x1a8
+ 5428 16fa 40150000 		.long	0x1540
+ 5429 16fe 02       		.byte	0x2
+ 5430 16ff 91       		.byte	0x91
+ 5431 1700 50       		.sleb128 -48
+ 5432 1701 28       		.uleb128 0x28
+ 5433 1702 00000000 		.long	.LASF370
+ 5434 1706 01       		.byte	0x1
+ 5435 1707 A901     		.value	0x1a9
+ 5436 1709 4B150000 		.long	0x154b
+ 5437 170d 02       		.byte	0x2
+ 5438 170e 91       		.byte	0x91
+ 5439 170f 58       		.sleb128 -40
+ 5440 1710 29       		.uleb128 0x29
+ 5441 1711 00000000 		.quad	.LBB2
+ 5441      00000000 
+ 5442 1719 00000000 		.quad	.LBE2
+ 5442      00000000 
+ 5443 1721 28       		.uleb128 0x28
+ 5444 1722 00000000 		.long	.LASF374
+ 5445 1726 01       		.byte	0x1
+ 5446 1727 B101     		.value	0x1b1
+ 5447 1729 3D050000 		.long	0x53d
+ 5448 172d 02       		.byte	0x2
+ 5449 172e 91       		.byte	0x91
+ 5450 172f 60       		.sleb128 -32
+ 5451 1730 00       		.byte	0x0
+ 5452 1731 00       		.byte	0x0
+ 5453 1732 25       		.uleb128 0x25
+ 5454 1733 00000000 		.long	.LASF375
+ 5455 1737 01       		.byte	0x1
+ 5456 1738 CA01     		.value	0x1ca
+ 5457 173a 01       		.byte	0x1
+
GAS LISTING /tmp/ccWvEaWW.s 			page 125
+
+
+ 5458 173b 7B000000 		.long	0x7b
+ 5459 173f 00000000 		.quad	.LFB620
+ 5459      00000000 
+ 5460 1747 00000000 		.quad	.LFE620
+ 5460      00000000 
+ 5461 174f 00000000 		.long	.LLST19
+ 5462 1753 F4170000 		.long	0x17f4
+ 5463 1757 26       		.uleb128 0x26
+ 5464 1758 00000000 		.long	.LASF349
+ 5465 175c 01       		.byte	0x1
+ 5466 175d CA01     		.value	0x1ca
+ 5467 175f DE030000 		.long	0x3de
+ 5468 1763 03       		.byte	0x3
+ 5469 1764 91       		.byte	0x91
+ 5470 1765 A87F     		.sleb128 -88
+ 5471 1767 27       		.uleb128 0x27
+ 5472 1768 696E00   		.string	"in"
+ 5473 176b 01       		.byte	0x1
+ 5474 176c CA01     		.value	0x1ca
+ 5475 176e 1F040000 		.long	0x41f
+ 5476 1772 03       		.byte	0x3
+ 5477 1773 91       		.byte	0x91
+ 5478 1774 A07F     		.sleb128 -96
+ 5479 1776 27       		.uleb128 0x27
+ 5480 1777 6F757400 		.string	"out"
+ 5481 177b 01       		.byte	0x1
+ 5482 177c CA01     		.value	0x1ca
+ 5483 177e B4000000 		.long	0xb4
+ 5484 1782 03       		.byte	0x3
+ 5485 1783 91       		.byte	0x91
+ 5486 1784 987F     		.sleb128 -104
+ 5487 1786 26       		.uleb128 0x26
+ 5488 1787 00000000 		.long	.LASF369
+ 5489 178b 01       		.byte	0x1
+ 5490 178c CA01     		.value	0x1ca
+ 5491 178e 62000000 		.long	0x62
+ 5492 1792 03       		.byte	0x3
+ 5493 1793 91       		.byte	0x91
+ 5494 1794 947F     		.sleb128 -108
+ 5495 1796 24       		.uleb128 0x24
+ 5496 1797 637600   		.string	"cv"
+ 5497 179a 01       		.byte	0x1
+ 5498 179b CD01     		.value	0x1cd
+ 5499 179d 3D050000 		.long	0x53d
+ 5500 17a1 03       		.byte	0x3
+ 5501 17a2 91       		.byte	0x91
+ 5502 17a3 B07F     		.sleb128 -80
+ 5503 17a5 28       		.uleb128 0x28
+ 5504 17a6 00000000 		.long	.LASF357
+ 5505 17aa 01       		.byte	0x1
+ 5506 17ab CE01     		.value	0x1ce
+ 5507 17ad 3D050000 		.long	0x53d
+ 5508 17b1 02       		.byte	0x2
+ 5509 17b2 91       		.byte	0x91
+ 5510 17b3 40       		.sleb128 -64
+ 5511 17b4 24       		.uleb128 0x24
+ 5512 17b5 70696E00 		.string	"pin"
+
GAS LISTING /tmp/ccWvEaWW.s 			page 126
+
+
+ 5513 17b9 01       		.byte	0x1
+ 5514 17ba CF01     		.value	0x1cf
+ 5515 17bc 40150000 		.long	0x1540
+ 5516 17c0 02       		.byte	0x2
+ 5517 17c1 91       		.byte	0x91
+ 5518 17c2 50       		.sleb128 -48
+ 5519 17c3 28       		.uleb128 0x28
+ 5520 17c4 00000000 		.long	.LASF370
+ 5521 17c8 01       		.byte	0x1
+ 5522 17c9 D001     		.value	0x1d0
+ 5523 17cb 4B150000 		.long	0x154b
+ 5524 17cf 02       		.byte	0x2
+ 5525 17d0 91       		.byte	0x91
+ 5526 17d1 58       		.sleb128 -40
+ 5527 17d2 29       		.uleb128 0x29
+ 5528 17d3 00000000 		.quad	.LBB3
+ 5528      00000000 
+ 5529 17db 00000000 		.quad	.LBE3
+ 5529      00000000 
+ 5530 17e3 28       		.uleb128 0x28
+ 5531 17e4 00000000 		.long	.LASF374
+ 5532 17e8 01       		.byte	0x1
+ 5533 17e9 D801     		.value	0x1d8
+ 5534 17eb 3D050000 		.long	0x53d
+ 5535 17ef 02       		.byte	0x2
+ 5536 17f0 91       		.byte	0x91
+ 5537 17f1 60       		.sleb128 -32
+ 5538 17f2 00       		.byte	0x0
+ 5539 17f3 00       		.byte	0x0
+ 5540 17f4 25       		.uleb128 0x25
+ 5541 17f5 00000000 		.long	.LASF376
+ 5542 17f9 01       		.byte	0x1
+ 5543 17fa EB01     		.value	0x1eb
+ 5544 17fc 01       		.byte	0x1
+ 5545 17fd 7B000000 		.long	0x7b
+ 5546 1801 00000000 		.quad	.LFB621
+ 5546      00000000 
+ 5547 1809 00000000 		.quad	.LFE621
+ 5547      00000000 
+ 5548 1811 00000000 		.long	.LLST20
+ 5549 1815 B6180000 		.long	0x18b6
+ 5550 1819 26       		.uleb128 0x26
+ 5551 181a 00000000 		.long	.LASF349
+ 5552 181e 01       		.byte	0x1
+ 5553 181f EB01     		.value	0x1eb
+ 5554 1821 DE030000 		.long	0x3de
+ 5555 1825 03       		.byte	0x3
+ 5556 1826 91       		.byte	0x91
+ 5557 1827 A87F     		.sleb128 -88
+ 5558 1829 27       		.uleb128 0x27
+ 5559 182a 696E00   		.string	"in"
+ 5560 182d 01       		.byte	0x1
+ 5561 182e EB01     		.value	0x1eb
+ 5562 1830 1F040000 		.long	0x41f
+ 5563 1834 03       		.byte	0x3
+ 5564 1835 91       		.byte	0x91
+ 5565 1836 A07F     		.sleb128 -96
+
GAS LISTING /tmp/ccWvEaWW.s 			page 127
+
+
+ 5566 1838 27       		.uleb128 0x27
+ 5567 1839 6F757400 		.string	"out"
+ 5568 183d 01       		.byte	0x1
+ 5569 183e EB01     		.value	0x1eb
+ 5570 1840 B4000000 		.long	0xb4
+ 5571 1844 03       		.byte	0x3
+ 5572 1845 91       		.byte	0x91
+ 5573 1846 987F     		.sleb128 -104
+ 5574 1848 26       		.uleb128 0x26
+ 5575 1849 00000000 		.long	.LASF369
+ 5576 184d 01       		.byte	0x1
+ 5577 184e EB01     		.value	0x1eb
+ 5578 1850 62000000 		.long	0x62
+ 5579 1854 03       		.byte	0x3
+ 5580 1855 91       		.byte	0x91
+ 5581 1856 947F     		.sleb128 -108
+ 5582 1858 24       		.uleb128 0x24
+ 5583 1859 637600   		.string	"cv"
+ 5584 185c 01       		.byte	0x1
+ 5585 185d EE01     		.value	0x1ee
+ 5586 185f 3D050000 		.long	0x53d
+ 5587 1863 03       		.byte	0x3
+ 5588 1864 91       		.byte	0x91
+ 5589 1865 B07F     		.sleb128 -80
+ 5590 1867 28       		.uleb128 0x28
+ 5591 1868 00000000 		.long	.LASF357
+ 5592 186c 01       		.byte	0x1
+ 5593 186d EF01     		.value	0x1ef
+ 5594 186f 3D050000 		.long	0x53d
+ 5595 1873 02       		.byte	0x2
+ 5596 1874 91       		.byte	0x91
+ 5597 1875 40       		.sleb128 -64
+ 5598 1876 24       		.uleb128 0x24
+ 5599 1877 70696E00 		.string	"pin"
+ 5600 187b 01       		.byte	0x1
+ 5601 187c F001     		.value	0x1f0
+ 5602 187e 40150000 		.long	0x1540
+ 5603 1882 02       		.byte	0x2
+ 5604 1883 91       		.byte	0x91
+ 5605 1884 50       		.sleb128 -48
+ 5606 1885 28       		.uleb128 0x28
+ 5607 1886 00000000 		.long	.LASF370
+ 5608 188a 01       		.byte	0x1
+ 5609 188b F101     		.value	0x1f1
+ 5610 188d 4B150000 		.long	0x154b
+ 5611 1891 02       		.byte	0x2
+ 5612 1892 91       		.byte	0x91
+ 5613 1893 58       		.sleb128 -40
+ 5614 1894 29       		.uleb128 0x29
+ 5615 1895 00000000 		.quad	.LBB4
+ 5615      00000000 
+ 5616 189d 00000000 		.quad	.LBE4
+ 5616      00000000 
+ 5617 18a5 28       		.uleb128 0x28
+ 5618 18a6 00000000 		.long	.LASF374
+ 5619 18aa 01       		.byte	0x1
+ 5620 18ab F901     		.value	0x1f9
+
GAS LISTING /tmp/ccWvEaWW.s 			page 128
+
+
+ 5621 18ad 3D050000 		.long	0x53d
+ 5622 18b1 02       		.byte	0x2
+ 5623 18b2 91       		.byte	0x91
+ 5624 18b3 60       		.sleb128 -32
+ 5625 18b4 00       		.byte	0x0
+ 5626 18b5 00       		.byte	0x0
+ 5627 18b6 25       		.uleb128 0x25
+ 5628 18b7 00000000 		.long	.LASF377
+ 5629 18bb 01       		.byte	0x1
+ 5630 18bc 1002     		.value	0x210
+ 5631 18be 01       		.byte	0x1
+ 5632 18bf 7B000000 		.long	0x7b
+ 5633 18c3 00000000 		.quad	.LFB622
+ 5633      00000000 
+ 5634 18cb 00000000 		.quad	.LFE622
+ 5634      00000000 
+ 5635 18d3 00000000 		.long	.LLST21
+ 5636 18d7 56190000 		.long	0x1956
+ 5637 18db 26       		.uleb128 0x26
+ 5638 18dc 00000000 		.long	.LASF349
+ 5639 18e0 01       		.byte	0x1
+ 5640 18e1 1002     		.value	0x210
+ 5641 18e3 DE030000 		.long	0x3de
+ 5642 18e7 03       		.byte	0x3
+ 5643 18e8 91       		.byte	0x91
+ 5644 18e9 B87F     		.sleb128 -72
+ 5645 18eb 27       		.uleb128 0x27
+ 5646 18ec 696E00   		.string	"in"
+ 5647 18ef 01       		.byte	0x1
+ 5648 18f0 1002     		.value	0x210
+ 5649 18f2 1F040000 		.long	0x41f
+ 5650 18f6 03       		.byte	0x3
+ 5651 18f7 91       		.byte	0x91
+ 5652 18f8 B07F     		.sleb128 -80
+ 5653 18fa 27       		.uleb128 0x27
+ 5654 18fb 6F757400 		.string	"out"
+ 5655 18ff 01       		.byte	0x1
+ 5656 1900 1002     		.value	0x210
+ 5657 1902 B4000000 		.long	0xb4
+ 5658 1906 03       		.byte	0x3
+ 5659 1907 91       		.byte	0x91
+ 5660 1908 A87F     		.sleb128 -88
+ 5661 190a 26       		.uleb128 0x26
+ 5662 190b 00000000 		.long	.LASF369
+ 5663 190f 01       		.byte	0x1
+ 5664 1910 1002     		.value	0x210
+ 5665 1912 62000000 		.long	0x62
+ 5666 1916 03       		.byte	0x3
+ 5667 1917 91       		.byte	0x91
+ 5668 1918 A47F     		.sleb128 -92
+ 5669 191a 24       		.uleb128 0x24
+ 5670 191b 637600   		.string	"cv"
+ 5671 191e 01       		.byte	0x1
+ 5672 191f 1302     		.value	0x213
+ 5673 1921 3D050000 		.long	0x53d
+ 5674 1925 02       		.byte	0x2
+ 5675 1926 91       		.byte	0x91
+
GAS LISTING /tmp/ccWvEaWW.s 			page 129
+
+
+ 5676 1927 40       		.sleb128 -64
+ 5677 1928 28       		.uleb128 0x28
+ 5678 1929 00000000 		.long	.LASF357
+ 5679 192d 01       		.byte	0x1
+ 5680 192e 1402     		.value	0x214
+ 5681 1930 3D050000 		.long	0x53d
+ 5682 1934 02       		.byte	0x2
+ 5683 1935 91       		.byte	0x91
+ 5684 1936 50       		.sleb128 -48
+ 5685 1937 24       		.uleb128 0x24
+ 5686 1938 70696E00 		.string	"pin"
+ 5687 193c 01       		.byte	0x1
+ 5688 193d 1502     		.value	0x215
+ 5689 193f 40150000 		.long	0x1540
+ 5690 1943 02       		.byte	0x2
+ 5691 1944 91       		.byte	0x91
+ 5692 1945 60       		.sleb128 -32
+ 5693 1946 28       		.uleb128 0x28
+ 5694 1947 00000000 		.long	.LASF370
+ 5695 194b 01       		.byte	0x1
+ 5696 194c 1602     		.value	0x216
+ 5697 194e 4B150000 		.long	0x154b
+ 5698 1952 02       		.byte	0x2
+ 5699 1953 91       		.byte	0x91
+ 5700 1954 68       		.sleb128 -24
+ 5701 1955 00       		.byte	0x0
+ 5702 1956 25       		.uleb128 0x25
+ 5703 1957 00000000 		.long	.LASF378
+ 5704 195b 01       		.byte	0x1
+ 5705 195c 2E02     		.value	0x22e
+ 5706 195e 01       		.byte	0x1
+ 5707 195f 7B000000 		.long	0x7b
+ 5708 1963 00000000 		.quad	.LFB623
+ 5708      00000000 
+ 5709 196b 00000000 		.quad	.LFE623
+ 5709      00000000 
+ 5710 1973 00000000 		.long	.LLST22
+ 5711 1977 F6190000 		.long	0x19f6
+ 5712 197b 26       		.uleb128 0x26
+ 5713 197c 00000000 		.long	.LASF349
+ 5714 1980 01       		.byte	0x1
+ 5715 1981 2E02     		.value	0x22e
+ 5716 1983 DE030000 		.long	0x3de
+ 5717 1987 03       		.byte	0x3
+ 5718 1988 91       		.byte	0x91
+ 5719 1989 B87F     		.sleb128 -72
+ 5720 198b 27       		.uleb128 0x27
+ 5721 198c 696E00   		.string	"in"
+ 5722 198f 01       		.byte	0x1
+ 5723 1990 2E02     		.value	0x22e
+ 5724 1992 1F040000 		.long	0x41f
+ 5725 1996 03       		.byte	0x3
+ 5726 1997 91       		.byte	0x91
+ 5727 1998 B07F     		.sleb128 -80
+ 5728 199a 27       		.uleb128 0x27
+ 5729 199b 6F757400 		.string	"out"
+ 5730 199f 01       		.byte	0x1
+
GAS LISTING /tmp/ccWvEaWW.s 			page 130
+
+
+ 5731 19a0 2E02     		.value	0x22e
+ 5732 19a2 B4000000 		.long	0xb4
+ 5733 19a6 03       		.byte	0x3
+ 5734 19a7 91       		.byte	0x91
+ 5735 19a8 A87F     		.sleb128 -88
+ 5736 19aa 26       		.uleb128 0x26
+ 5737 19ab 00000000 		.long	.LASF369
+ 5738 19af 01       		.byte	0x1
+ 5739 19b0 2E02     		.value	0x22e
+ 5740 19b2 62000000 		.long	0x62
+ 5741 19b6 03       		.byte	0x3
+ 5742 19b7 91       		.byte	0x91
+ 5743 19b8 A47F     		.sleb128 -92
+ 5744 19ba 24       		.uleb128 0x24
+ 5745 19bb 637600   		.string	"cv"
+ 5746 19be 01       		.byte	0x1
+ 5747 19bf 3102     		.value	0x231
+ 5748 19c1 3D050000 		.long	0x53d
+ 5749 19c5 02       		.byte	0x2
+ 5750 19c6 91       		.byte	0x91
+ 5751 19c7 40       		.sleb128 -64
+ 5752 19c8 28       		.uleb128 0x28
+ 5753 19c9 00000000 		.long	.LASF357
+ 5754 19cd 01       		.byte	0x1
+ 5755 19ce 3202     		.value	0x232
+ 5756 19d0 3D050000 		.long	0x53d
+ 5757 19d4 02       		.byte	0x2
+ 5758 19d5 91       		.byte	0x91
+ 5759 19d6 50       		.sleb128 -48
+ 5760 19d7 24       		.uleb128 0x24
+ 5761 19d8 70696E00 		.string	"pin"
+ 5762 19dc 01       		.byte	0x1
+ 5763 19dd 3302     		.value	0x233
+ 5764 19df 40150000 		.long	0x1540
+ 5765 19e3 02       		.byte	0x2
+ 5766 19e4 91       		.byte	0x91
+ 5767 19e5 60       		.sleb128 -32
+ 5768 19e6 28       		.uleb128 0x28
+ 5769 19e7 00000000 		.long	.LASF370
+ 5770 19eb 01       		.byte	0x1
+ 5771 19ec 3402     		.value	0x234
+ 5772 19ee 4B150000 		.long	0x154b
+ 5773 19f2 02       		.byte	0x2
+ 5774 19f3 91       		.byte	0x91
+ 5775 19f4 68       		.sleb128 -24
+ 5776 19f5 00       		.byte	0x0
+ 5777 19f6 25       		.uleb128 0x25
+ 5778 19f7 00000000 		.long	.LASF379
+ 5779 19fb 01       		.byte	0x1
+ 5780 19fc 5102     		.value	0x251
+ 5781 19fe 01       		.byte	0x1
+ 5782 19ff 7B000000 		.long	0x7b
+ 5783 1a03 00000000 		.quad	.LFB624
+ 5783      00000000 
+ 5784 1a0b 00000000 		.quad	.LFE624
+ 5784      00000000 
+ 5785 1a13 00000000 		.long	.LLST23
+
GAS LISTING /tmp/ccWvEaWW.s 			page 131
+
+
+ 5786 1a17 961A0000 		.long	0x1a96
+ 5787 1a1b 26       		.uleb128 0x26
+ 5788 1a1c 00000000 		.long	.LASF349
+ 5789 1a20 01       		.byte	0x1
+ 5790 1a21 5102     		.value	0x251
+ 5791 1a23 DE030000 		.long	0x3de
+ 5792 1a27 03       		.byte	0x3
+ 5793 1a28 91       		.byte	0x91
+ 5794 1a29 B87F     		.sleb128 -72
+ 5795 1a2b 27       		.uleb128 0x27
+ 5796 1a2c 696E00   		.string	"in"
+ 5797 1a2f 01       		.byte	0x1
+ 5798 1a30 5102     		.value	0x251
+ 5799 1a32 1F040000 		.long	0x41f
+ 5800 1a36 03       		.byte	0x3
+ 5801 1a37 91       		.byte	0x91
+ 5802 1a38 B07F     		.sleb128 -80
+ 5803 1a3a 27       		.uleb128 0x27
+ 5804 1a3b 6F757400 		.string	"out"
+ 5805 1a3f 01       		.byte	0x1
+ 5806 1a40 5102     		.value	0x251
+ 5807 1a42 B4000000 		.long	0xb4
+ 5808 1a46 03       		.byte	0x3
+ 5809 1a47 91       		.byte	0x91
+ 5810 1a48 A87F     		.sleb128 -88
+ 5811 1a4a 26       		.uleb128 0x26
+ 5812 1a4b 00000000 		.long	.LASF369
+ 5813 1a4f 01       		.byte	0x1
+ 5814 1a50 5102     		.value	0x251
+ 5815 1a52 62000000 		.long	0x62
+ 5816 1a56 03       		.byte	0x3
+ 5817 1a57 91       		.byte	0x91
+ 5818 1a58 A47F     		.sleb128 -92
+ 5819 1a5a 24       		.uleb128 0x24
+ 5820 1a5b 637600   		.string	"cv"
+ 5821 1a5e 01       		.byte	0x1
+ 5822 1a5f 5402     		.value	0x254
+ 5823 1a61 3D050000 		.long	0x53d
+ 5824 1a65 02       		.byte	0x2
+ 5825 1a66 91       		.byte	0x91
+ 5826 1a67 40       		.sleb128 -64
+ 5827 1a68 28       		.uleb128 0x28
+ 5828 1a69 00000000 		.long	.LASF357
+ 5829 1a6d 01       		.byte	0x1
+ 5830 1a6e 5502     		.value	0x255
+ 5831 1a70 3D050000 		.long	0x53d
+ 5832 1a74 02       		.byte	0x2
+ 5833 1a75 91       		.byte	0x91
+ 5834 1a76 50       		.sleb128 -48
+ 5835 1a77 24       		.uleb128 0x24
+ 5836 1a78 70696E00 		.string	"pin"
+ 5837 1a7c 01       		.byte	0x1
+ 5838 1a7d 5602     		.value	0x256
+ 5839 1a7f 40150000 		.long	0x1540
+ 5840 1a83 02       		.byte	0x2
+ 5841 1a84 91       		.byte	0x91
+ 5842 1a85 60       		.sleb128 -32
+
GAS LISTING /tmp/ccWvEaWW.s 			page 132
+
+
+ 5843 1a86 28       		.uleb128 0x28
+ 5844 1a87 00000000 		.long	.LASF370
+ 5845 1a8b 01       		.byte	0x1
+ 5846 1a8c 5702     		.value	0x257
+ 5847 1a8e 4B150000 		.long	0x154b
+ 5848 1a92 02       		.byte	0x2
+ 5849 1a93 91       		.byte	0x91
+ 5850 1a94 68       		.sleb128 -24
+ 5851 1a95 00       		.byte	0x0
+ 5852 1a96 25       		.uleb128 0x25
+ 5853 1a97 00000000 		.long	.LASF380
+ 5854 1a9b 01       		.byte	0x1
+ 5855 1a9c 6F02     		.value	0x26f
+ 5856 1a9e 01       		.byte	0x1
+ 5857 1a9f 7B000000 		.long	0x7b
+ 5858 1aa3 00000000 		.quad	.LFB625
+ 5858      00000000 
+ 5859 1aab 00000000 		.quad	.LFE625
+ 5859      00000000 
+ 5860 1ab3 00000000 		.long	.LLST24
+ 5861 1ab7 F71A0000 		.long	0x1af7
+ 5862 1abb 26       		.uleb128 0x26
+ 5863 1abc 00000000 		.long	.LASF349
+ 5864 1ac0 01       		.byte	0x1
+ 5865 1ac1 6F02     		.value	0x26f
+ 5866 1ac3 DE030000 		.long	0x3de
+ 5867 1ac7 02       		.byte	0x2
+ 5868 1ac8 91       		.byte	0x91
+ 5869 1ac9 58       		.sleb128 -40
+ 5870 1aca 27       		.uleb128 0x27
+ 5871 1acb 696E00   		.string	"in"
+ 5872 1ace 01       		.byte	0x1
+ 5873 1acf 6F02     		.value	0x26f
+ 5874 1ad1 1F040000 		.long	0x41f
+ 5875 1ad5 02       		.byte	0x2
+ 5876 1ad6 91       		.byte	0x91
+ 5877 1ad7 50       		.sleb128 -48
+ 5878 1ad8 27       		.uleb128 0x27
+ 5879 1ad9 6F757400 		.string	"out"
+ 5880 1add 01       		.byte	0x1
+ 5881 1ade 6F02     		.value	0x26f
+ 5882 1ae0 B4000000 		.long	0xb4
+ 5883 1ae4 02       		.byte	0x2
+ 5884 1ae5 91       		.byte	0x91
+ 5885 1ae6 48       		.sleb128 -56
+ 5886 1ae7 26       		.uleb128 0x26
+ 5887 1ae8 00000000 		.long	.LASF369
+ 5888 1aec 01       		.byte	0x1
+ 5889 1aed 6F02     		.value	0x26f
+ 5890 1aef 62000000 		.long	0x62
+ 5891 1af3 02       		.byte	0x2
+ 5892 1af4 91       		.byte	0x91
+ 5893 1af5 44       		.sleb128 -60
+ 5894 1af6 00       		.byte	0x0
+ 5895 1af7 25       		.uleb128 0x25
+ 5896 1af8 00000000 		.long	.LASF381
+ 5897 1afc 01       		.byte	0x1
+
GAS LISTING /tmp/ccWvEaWW.s 			page 133
+
+
+ 5898 1afd 7D02     		.value	0x27d
+ 5899 1aff 01       		.byte	0x1
+ 5900 1b00 7B000000 		.long	0x7b
+ 5901 1b04 00000000 		.quad	.LFB626
+ 5901      00000000 
+ 5902 1b0c 00000000 		.quad	.LFE626
+ 5902      00000000 
+ 5903 1b14 00000000 		.long	.LLST25
+ 5904 1b18 801B0000 		.long	0x1b80
+ 5905 1b1c 26       		.uleb128 0x26
+ 5906 1b1d 00000000 		.long	.LASF349
+ 5907 1b21 01       		.byte	0x1
+ 5908 1b22 7D02     		.value	0x27d
+ 5909 1b24 DE030000 		.long	0x3de
+ 5910 1b28 02       		.byte	0x2
+ 5911 1b29 91       		.byte	0x91
+ 5912 1b2a 68       		.sleb128 -24
+ 5913 1b2b 27       		.uleb128 0x27
+ 5914 1b2c 696E00   		.string	"in"
+ 5915 1b2f 01       		.byte	0x1
+ 5916 1b30 7D02     		.value	0x27d
+ 5917 1b32 1F040000 		.long	0x41f
+ 5918 1b36 02       		.byte	0x2
+ 5919 1b37 91       		.byte	0x91
+ 5920 1b38 60       		.sleb128 -32
+ 5921 1b39 27       		.uleb128 0x27
+ 5922 1b3a 6F757400 		.string	"out"
+ 5923 1b3e 01       		.byte	0x1
+ 5924 1b3f 7D02     		.value	0x27d
+ 5925 1b41 B4000000 		.long	0xb4
+ 5926 1b45 02       		.byte	0x2
+ 5927 1b46 91       		.byte	0x91
+ 5928 1b47 58       		.sleb128 -40
+ 5929 1b48 26       		.uleb128 0x26
+ 5930 1b49 00000000 		.long	.LASF369
+ 5931 1b4d 01       		.byte	0x1
+ 5932 1b4e 7D02     		.value	0x27d
+ 5933 1b50 62000000 		.long	0x62
+ 5934 1b54 02       		.byte	0x2
+ 5935 1b55 91       		.byte	0x91
+ 5936 1b56 54       		.sleb128 -44
+ 5937 1b57 23       		.uleb128 0x23
+ 5938 1b58 00000000 		.long	.LASF353
+ 5939 1b5c 901B0000 		.long	0x1b90
+ 5940 1b60 01       		.byte	0x1
+ 5941 1b61 09       		.byte	0x9
+ 5942 1b62 03       		.byte	0x3
+ 5943 1b63 00000000 		.quad	__PRETTY_FUNCTION__.7677
+ 5943      00000000 
+ 5944 1b6b 23       		.uleb128 0x23
+ 5945 1b6c 00000000 		.long	.LASF354
+ 5946 1b70 951B0000 		.long	0x1b95
+ 5947 1b74 01       		.byte	0x1
+ 5948 1b75 09       		.byte	0x9
+ 5949 1b76 03       		.byte	0x3
+ 5950 1b77 00000000 		.quad	__func__.7678
+ 5950      00000000 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 134
+
+
+ 5951 1b7f 00       		.byte	0x0
+ 5952 1b80 1B       		.uleb128 0x1b
+ 5953 1b81 C1000000 		.long	0xc1
+ 5954 1b85 901B0000 		.long	0x1b90
+ 5955 1b89 17       		.uleb128 0x17
+ 5956 1b8a B1000000 		.long	0xb1
+ 5957 1b8e 19       		.byte	0x19
+ 5958 1b8f 00       		.byte	0x0
+ 5959 1b90 0B       		.uleb128 0xb
+ 5960 1b91 801B0000 		.long	0x1b80
+ 5961 1b95 0B       		.uleb128 0xb
+ 5962 1b96 801B0000 		.long	0x1b80
+ 5963 1b9a 25       		.uleb128 0x25
+ 5964 1b9b 00000000 		.long	.LASF382
+ 5965 1b9f 01       		.byte	0x1
+ 5966 1ba0 8402     		.value	0x284
+ 5967 1ba2 01       		.byte	0x1
+ 5968 1ba3 7B000000 		.long	0x7b
+ 5969 1ba7 00000000 		.quad	.LFB627
+ 5969      00000000 
+ 5970 1baf 00000000 		.quad	.LFE627
+ 5970      00000000 
+ 5971 1bb7 00000000 		.long	.LLST26
+ 5972 1bbb 231C0000 		.long	0x1c23
+ 5973 1bbf 26       		.uleb128 0x26
+ 5974 1bc0 00000000 		.long	.LASF349
+ 5975 1bc4 01       		.byte	0x1
+ 5976 1bc5 8402     		.value	0x284
+ 5977 1bc7 DE030000 		.long	0x3de
+ 5978 1bcb 02       		.byte	0x2
+ 5979 1bcc 91       		.byte	0x91
+ 5980 1bcd 68       		.sleb128 -24
+ 5981 1bce 27       		.uleb128 0x27
+ 5982 1bcf 696E00   		.string	"in"
+ 5983 1bd2 01       		.byte	0x1
+ 5984 1bd3 8402     		.value	0x284
+ 5985 1bd5 1F040000 		.long	0x41f
+ 5986 1bd9 02       		.byte	0x2
+ 5987 1bda 91       		.byte	0x91
+ 5988 1bdb 60       		.sleb128 -32
+ 5989 1bdc 27       		.uleb128 0x27
+ 5990 1bdd 6F757400 		.string	"out"
+ 5991 1be1 01       		.byte	0x1
+ 5992 1be2 8402     		.value	0x284
+ 5993 1be4 B4000000 		.long	0xb4
+ 5994 1be8 02       		.byte	0x2
+ 5995 1be9 91       		.byte	0x91
+ 5996 1bea 58       		.sleb128 -40
+ 5997 1beb 26       		.uleb128 0x26
+ 5998 1bec 00000000 		.long	.LASF369
+ 5999 1bf0 01       		.byte	0x1
+ 6000 1bf1 8402     		.value	0x284
+ 6001 1bf3 62000000 		.long	0x62
+ 6002 1bf7 02       		.byte	0x2
+ 6003 1bf8 91       		.byte	0x91
+ 6004 1bf9 54       		.sleb128 -44
+ 6005 1bfa 23       		.uleb128 0x23
+
GAS LISTING /tmp/ccWvEaWW.s 			page 135
+
+
+ 6006 1bfb 00000000 		.long	.LASF353
+ 6007 1bff 231C0000 		.long	0x1c23
+ 6008 1c03 01       		.byte	0x1
+ 6009 1c04 09       		.byte	0x9
+ 6010 1c05 03       		.byte	0x3
+ 6011 1c06 00000000 		.quad	__PRETTY_FUNCTION__.7687
+ 6011      00000000 
+ 6012 1c0e 23       		.uleb128 0x23
+ 6013 1c0f 00000000 		.long	.LASF354
+ 6014 1c13 281C0000 		.long	0x1c28
+ 6015 1c17 01       		.byte	0x1
+ 6016 1c18 09       		.byte	0x9
+ 6017 1c19 03       		.byte	0x3
+ 6018 1c1a 00000000 		.quad	__func__.7688
+ 6018      00000000 
+ 6019 1c22 00       		.byte	0x0
+ 6020 1c23 0B       		.uleb128 0xb
+ 6021 1c24 801B0000 		.long	0x1b80
+ 6022 1c28 0B       		.uleb128 0xb
+ 6023 1c29 801B0000 		.long	0x1b80
+ 6024 1c2d 25       		.uleb128 0x25
+ 6025 1c2e 00000000 		.long	.LASF383
+ 6026 1c32 01       		.byte	0x1
+ 6027 1c33 A702     		.value	0x2a7
+ 6028 1c35 01       		.byte	0x1
+ 6029 1c36 7B000000 		.long	0x7b
+ 6030 1c3a 00000000 		.quad	.LFB628
+ 6030      00000000 
+ 6031 1c42 00000000 		.quad	.LFE628
+ 6031      00000000 
+ 6032 1c4a 00000000 		.long	.LLST27
+ 6033 1c4e A81C0000 		.long	0x1ca8
+ 6034 1c52 26       		.uleb128 0x26
+ 6035 1c53 00000000 		.long	.LASF384
+ 6036 1c57 01       		.byte	0x1
+ 6037 1c58 A702     		.value	0x2a7
+ 6038 1c5a A81C0000 		.long	0x1ca8
+ 6039 1c5e 02       		.byte	0x2
+ 6040 1c5f 91       		.byte	0x91
+ 6041 1c60 58       		.sleb128 -40
+ 6042 1c61 26       		.uleb128 0x26
+ 6043 1c62 00000000 		.long	.LASF46
+ 6044 1c66 01       		.byte	0x1
+ 6045 1c67 A802     		.value	0x2a8
+ 6046 1c69 AE1C0000 		.long	0x1cae
+ 6047 1c6d 02       		.byte	0x2
+ 6048 1c6e 91       		.byte	0x91
+ 6049 1c6f 50       		.sleb128 -48
+ 6050 1c70 24       		.uleb128 0x24
+ 6051 1c71 6F626A00 		.string	"obj"
+ 6052 1c75 01       		.byte	0x1
+ 6053 1c76 AA02     		.value	0x2aa
+ 6054 1c78 B91C0000 		.long	0x1cb9
+ 6055 1c7c 02       		.byte	0x2
+ 6056 1c7d 91       		.byte	0x91
+ 6057 1c7e 68       		.sleb128 -24
+ 6058 1c7f 23       		.uleb128 0x23
+
GAS LISTING /tmp/ccWvEaWW.s 			page 136
+
+
+ 6059 1c80 00000000 		.long	.LASF353
+ 6060 1c84 CF1C0000 		.long	0x1ccf
+ 6061 1c88 01       		.byte	0x1
+ 6062 1c89 09       		.byte	0x9
+ 6063 1c8a 03       		.byte	0x3
+ 6064 1c8b 00000000 		.quad	__PRETTY_FUNCTION__.7697
+ 6064      00000000 
+ 6065 1c93 23       		.uleb128 0x23
+ 6066 1c94 00000000 		.long	.LASF354
+ 6067 1c98 D41C0000 		.long	0x1cd4
+ 6068 1c9c 01       		.byte	0x1
+ 6069 1c9d 09       		.byte	0x9
+ 6070 1c9e 03       		.byte	0x3
+ 6071 1c9f 00000000 		.quad	__func__.7698
+ 6071      00000000 
+ 6072 1ca7 00       		.byte	0x0
+ 6073 1ca8 0A       		.uleb128 0xa
+ 6074 1ca9 08       		.byte	0x8
+ 6075 1caa DE030000 		.long	0x3de
+ 6076 1cae 0A       		.uleb128 0xa
+ 6077 1caf 08       		.byte	0x8
+ 6078 1cb0 B41C0000 		.long	0x1cb4
+ 6079 1cb4 0B       		.uleb128 0xb
+ 6080 1cb5 98080000 		.long	0x898
+ 6081 1cb9 0A       		.uleb128 0xa
+ 6082 1cba 08       		.byte	0x8
+ 6083 1cbb CE070000 		.long	0x7ce
+ 6084 1cbf 1B       		.uleb128 0x1b
+ 6085 1cc0 C1000000 		.long	0xc1
+ 6086 1cc4 CF1C0000 		.long	0x1ccf
+ 6087 1cc8 17       		.uleb128 0x17
+ 6088 1cc9 B1000000 		.long	0xb1
+ 6089 1ccd 17       		.byte	0x17
+ 6090 1cce 00       		.byte	0x0
+ 6091 1ccf 0B       		.uleb128 0xb
+ 6092 1cd0 BF1C0000 		.long	0x1cbf
+ 6093 1cd4 0B       		.uleb128 0xb
+ 6094 1cd5 BF1C0000 		.long	0x1cbf
+ 6095 1cd9 25       		.uleb128 0x25
+ 6096 1cda 00000000 		.long	.LASF385
+ 6097 1cde 01       		.byte	0x1
+ 6098 1cdf B402     		.value	0x2b4
+ 6099 1ce1 01       		.byte	0x1
+ 6100 1ce2 7B000000 		.long	0x7b
+ 6101 1ce6 00000000 		.quad	.LFB629
+ 6101      00000000 
+ 6102 1cee 00000000 		.quad	.LFE629
+ 6102      00000000 
+ 6103 1cf6 00000000 		.long	.LLST28
+ 6104 1cfa 3B1D0000 		.long	0x1d3b
+ 6105 1cfe 26       		.uleb128 0x26
+ 6106 1cff 00000000 		.long	.LASF349
+ 6107 1d03 01       		.byte	0x1
+ 6108 1d04 B402     		.value	0x2b4
+ 6109 1d06 DE030000 		.long	0x3de
+ 6110 1d0a 02       		.byte	0x2
+ 6111 1d0b 91       		.byte	0x91
+
GAS LISTING /tmp/ccWvEaWW.s 			page 137
+
+
+ 6112 1d0c 58       		.sleb128 -40
+ 6113 1d0d 26       		.uleb128 0x26
+ 6114 1d0e 00000000 		.long	.LASF46
+ 6115 1d12 01       		.byte	0x1
+ 6116 1d13 B502     		.value	0x2b5
+ 6117 1d15 AE1C0000 		.long	0x1cae
+ 6118 1d19 02       		.byte	0x2
+ 6119 1d1a 91       		.byte	0x91
+ 6120 1d1b 50       		.sleb128 -48
+ 6121 1d1c 24       		.uleb128 0x24
+ 6122 1d1d 64616400 		.string	"dad"
+ 6123 1d21 01       		.byte	0x1
+ 6124 1d22 B702     		.value	0x2b7
+ 6125 1d24 3B1D0000 		.long	0x1d3b
+ 6126 1d28 02       		.byte	0x2
+ 6127 1d29 91       		.byte	0x91
+ 6128 1d2a 60       		.sleb128 -32
+ 6129 1d2b 24       		.uleb128 0x24
+ 6130 1d2c 61657300 		.string	"aes"
+ 6131 1d30 01       		.byte	0x1
+ 6132 1d31 B802     		.value	0x2b8
+ 6133 1d33 B91C0000 		.long	0x1cb9
+ 6134 1d37 02       		.byte	0x2
+ 6135 1d38 91       		.byte	0x91
+ 6136 1d39 68       		.sleb128 -24
+ 6137 1d3a 00       		.byte	0x0
+ 6138 1d3b 0A       		.uleb128 0xa
+ 6139 1d3c 08       		.byte	0x8
+ 6140 1d3d 54010000 		.long	0x154
+ 6141 1d41 25       		.uleb128 0x25
+ 6142 1d42 00000000 		.long	.LASF386
+ 6143 1d46 01       		.byte	0x1
+ 6144 1d47 CA02     		.value	0x2ca
+ 6145 1d49 01       		.byte	0x1
+ 6146 1d4a 7B000000 		.long	0x7b
+ 6147 1d4e 00000000 		.quad	.LFB630
+ 6147      00000000 
+ 6148 1d56 00000000 		.quad	.LFE630
+ 6148      00000000 
+ 6149 1d5e 00000000 		.long	.LLST29
+ 6150 1d62 BC1D0000 		.long	0x1dbc
+ 6151 1d66 26       		.uleb128 0x26
+ 6152 1d67 00000000 		.long	.LASF384
+ 6153 1d6b 01       		.byte	0x1
+ 6154 1d6c CA02     		.value	0x2ca
+ 6155 1d6e A81C0000 		.long	0x1ca8
+ 6156 1d72 02       		.byte	0x2
+ 6157 1d73 91       		.byte	0x91
+ 6158 1d74 58       		.sleb128 -40
+ 6159 1d75 26       		.uleb128 0x26
+ 6160 1d76 00000000 		.long	.LASF46
+ 6161 1d7a 01       		.byte	0x1
+ 6162 1d7b CB02     		.value	0x2cb
+ 6163 1d7d AE1C0000 		.long	0x1cae
+ 6164 1d81 02       		.byte	0x2
+ 6165 1d82 91       		.byte	0x91
+ 6166 1d83 50       		.sleb128 -48
+
GAS LISTING /tmp/ccWvEaWW.s 			page 138
+
+
+ 6167 1d84 24       		.uleb128 0x24
+ 6168 1d85 6F626A00 		.string	"obj"
+ 6169 1d89 01       		.byte	0x1
+ 6170 1d8a CD02     		.value	0x2cd
+ 6171 1d8c BC1D0000 		.long	0x1dbc
+ 6172 1d90 02       		.byte	0x2
+ 6173 1d91 91       		.byte	0x91
+ 6174 1d92 68       		.sleb128 -24
+ 6175 1d93 23       		.uleb128 0x23
+ 6176 1d94 00000000 		.long	.LASF353
+ 6177 1d98 D21D0000 		.long	0x1dd2
+ 6178 1d9c 01       		.byte	0x1
+ 6179 1d9d 09       		.byte	0x9
+ 6180 1d9e 03       		.byte	0x3
+ 6181 1d9f 00000000 		.quad	__PRETTY_FUNCTION__.7724
+ 6181      00000000 
+ 6182 1da7 23       		.uleb128 0x23
+ 6183 1da8 00000000 		.long	.LASF354
+ 6184 1dac D71D0000 		.long	0x1dd7
+ 6185 1db0 01       		.byte	0x1
+ 6186 1db1 09       		.byte	0x9
+ 6187 1db2 03       		.byte	0x3
+ 6188 1db3 00000000 		.quad	__func__.7725
+ 6188      00000000 
+ 6189 1dbb 00       		.byte	0x0
+ 6190 1dbc 0A       		.uleb128 0xa
+ 6191 1dbd 08       		.byte	0x8
+ 6192 1dbe 30080000 		.long	0x830
+ 6193 1dc2 1B       		.uleb128 0x1b
+ 6194 1dc3 C1000000 		.long	0xc1
+ 6195 1dc7 D21D0000 		.long	0x1dd2
+ 6196 1dcb 17       		.uleb128 0x17
+ 6197 1dcc B1000000 		.long	0xb1
+ 6198 1dd0 18       		.byte	0x18
+ 6199 1dd1 00       		.byte	0x0
+ 6200 1dd2 0B       		.uleb128 0xb
+ 6201 1dd3 C21D0000 		.long	0x1dc2
+ 6202 1dd7 0B       		.uleb128 0xb
+ 6203 1dd8 C21D0000 		.long	0x1dc2
+ 6204 1ddc 25       		.uleb128 0x25
+ 6205 1ddd 00000000 		.long	.LASF387
+ 6206 1de1 01       		.byte	0x1
+ 6207 1de2 D702     		.value	0x2d7
+ 6208 1de4 01       		.byte	0x1
+ 6209 1de5 7B000000 		.long	0x7b
+ 6210 1de9 00000000 		.quad	.LFB631
+ 6210      00000000 
+ 6211 1df1 00000000 		.quad	.LFE631
+ 6211      00000000 
+ 6212 1df9 00000000 		.long	.LLST30
+ 6213 1dfd 3E1E0000 		.long	0x1e3e
+ 6214 1e01 26       		.uleb128 0x26
+ 6215 1e02 00000000 		.long	.LASF349
+ 6216 1e06 01       		.byte	0x1
+ 6217 1e07 D702     		.value	0x2d7
+ 6218 1e09 DE030000 		.long	0x3de
+ 6219 1e0d 02       		.byte	0x2
+
GAS LISTING /tmp/ccWvEaWW.s 			page 139
+
+
+ 6220 1e0e 91       		.byte	0x91
+ 6221 1e0f 58       		.sleb128 -40
+ 6222 1e10 26       		.uleb128 0x26
+ 6223 1e11 00000000 		.long	.LASF46
+ 6224 1e15 01       		.byte	0x1
+ 6225 1e16 D802     		.value	0x2d8
+ 6226 1e18 AE1C0000 		.long	0x1cae
+ 6227 1e1c 02       		.byte	0x2
+ 6228 1e1d 91       		.byte	0x91
+ 6229 1e1e 50       		.sleb128 -48
+ 6230 1e1f 24       		.uleb128 0x24
+ 6231 1e20 64616400 		.string	"dad"
+ 6232 1e24 01       		.byte	0x1
+ 6233 1e25 DA02     		.value	0x2da
+ 6234 1e27 3B1D0000 		.long	0x1d3b
+ 6235 1e2b 02       		.byte	0x2
+ 6236 1e2c 91       		.byte	0x91
+ 6237 1e2d 60       		.sleb128 -32
+ 6238 1e2e 28       		.uleb128 0x28
+ 6239 1e2f 00000000 		.long	.LASF388
+ 6240 1e33 01       		.byte	0x1
+ 6241 1e34 DB02     		.value	0x2db
+ 6242 1e36 BC1D0000 		.long	0x1dbc
+ 6243 1e3a 02       		.byte	0x2
+ 6244 1e3b 91       		.byte	0x91
+ 6245 1e3c 68       		.sleb128 -24
+ 6246 1e3d 00       		.byte	0x0
+ 6247 1e3e 2A       		.uleb128 0x2a
+ 6248 1e3f 01       		.byte	0x1
+ 6249 1e40 00000000 		.long	.LASF396
+ 6250 1e44 01       		.byte	0x1
+ 6251 1e45 EC02     		.value	0x2ec
+ 6252 1e47 01       		.byte	0x1
+ 6253 1e48 7B000000 		.long	0x7b
+ 6254 1e4c 00000000 		.quad	.LFB632
+ 6254      00000000 
+ 6255 1e54 00000000 		.quad	.LFE632
+ 6255      00000000 
+ 6256 1e5c 00000000 		.long	.LLST31
+ 6257 1e60 E91E0000 		.long	0x1ee9
+ 6258 1e64 26       		.uleb128 0x26
+ 6259 1e65 00000000 		.long	.LASF389
+ 6260 1e69 01       		.byte	0x1
+ 6261 1e6a EC02     		.value	0x2ec
+ 6262 1e6c E91E0000 		.long	0x1ee9
+ 6263 1e70 02       		.byte	0x2
+ 6264 1e71 91       		.byte	0x91
+ 6265 1e72 48       		.sleb128 -56
+ 6266 1e73 26       		.uleb128 0x26
+ 6267 1e74 00000000 		.long	.LASF390
+ 6268 1e78 01       		.byte	0x1
+ 6269 1e79 EC02     		.value	0x2ec
+ 6270 1e7b 72080000 		.long	0x872
+ 6271 1e7f 02       		.byte	0x2
+ 6272 1e80 91       		.byte	0x91
+ 6273 1e81 44       		.sleb128 -60
+ 6274 1e82 24       		.uleb128 0x24
+
GAS LISTING /tmp/ccWvEaWW.s 			page 140
+
+
+ 6275 1e83 726300   		.string	"rc"
+ 6276 1e86 01       		.byte	0x1
+ 6277 1e87 EE02     		.value	0x2ee
+ 6278 1e89 7B000000 		.long	0x7b
+ 6279 1e8d 02       		.byte	0x2
+ 6280 1e8e 91       		.byte	0x91
+ 6281 1e8f 6C       		.sleb128 -20
+ 6282 1e90 28       		.uleb128 0x28
+ 6283 1e91 00000000 		.long	.LASF46
+ 6284 1e95 01       		.byte	0x1
+ 6285 1e96 EF02     		.value	0x2ef
+ 6286 1e98 EF1E0000 		.long	0x1eef
+ 6287 1e9c 02       		.byte	0x2
+ 6288 1e9d 91       		.byte	0x91
+ 6289 1e9e 60       		.sleb128 -32
+ 6290 1e9f 23       		.uleb128 0x23
+ 6291 1ea0 00000000 		.long	.LASF353
+ 6292 1ea4 051F0000 		.long	0x1f05
+ 6293 1ea8 01       		.byte	0x1
+ 6294 1ea9 09       		.byte	0x9
+ 6295 1eaa 03       		.byte	0x3
+ 6296 1eab 00000000 		.quad	__PRETTY_FUNCTION__.7752
+ 6296      00000000 
+ 6297 1eb3 23       		.uleb128 0x23
+ 6298 1eb4 00000000 		.long	.LASF354
+ 6299 1eb8 0A1F0000 		.long	0x1f0a
+ 6300 1ebc 01       		.byte	0x1
+ 6301 1ebd 09       		.byte	0x9
+ 6302 1ebe 03       		.byte	0x3
+ 6303 1ebf 00000000 		.quad	__func__.7753
+ 6303      00000000 
+ 6304 1ec7 29       		.uleb128 0x29
+ 6305 1ec8 00000000 		.quad	.LBB5
+ 6305      00000000 
+ 6306 1ed0 00000000 		.quad	.LBE5
+ 6306      00000000 
+ 6307 1ed8 24       		.uleb128 0x24
+ 6308 1ed9 6F626A00 		.string	"obj"
+ 6309 1edd 01       		.byte	0x1
+ 6310 1ede 0603     		.value	0x306
+ 6311 1ee0 DE030000 		.long	0x3de
+ 6312 1ee4 02       		.byte	0x2
+ 6313 1ee5 91       		.byte	0x91
+ 6314 1ee6 58       		.sleb128 -40
+ 6315 1ee7 00       		.byte	0x0
+ 6316 1ee8 00       		.byte	0x0
+ 6317 1ee9 0A       		.uleb128 0xa
+ 6318 1eea 08       		.byte	0x8
+ 6319 1eeb 3B1D0000 		.long	0x1d3b
+ 6320 1eef 0A       		.uleb128 0xa
+ 6321 1ef0 08       		.byte	0x8
+ 6322 1ef1 98080000 		.long	0x898
+ 6323 1ef5 1B       		.uleb128 0x1b
+ 6324 1ef6 C1000000 		.long	0xc1
+ 6325 1efa 051F0000 		.long	0x1f05
+ 6326 1efe 17       		.uleb128 0x17
+ 6327 1eff B1000000 		.long	0xb1
+
GAS LISTING /tmp/ccWvEaWW.s 			page 141
+
+
+ 6328 1f03 13       		.byte	0x13
+ 6329 1f04 00       		.byte	0x0
+ 6330 1f05 0B       		.uleb128 0xb
+ 6331 1f06 F51E0000 		.long	0x1ef5
+ 6332 1f0a 0B       		.uleb128 0xb
+ 6333 1f0b F51E0000 		.long	0x1ef5
+ 6334 1f0f 28       		.uleb128 0x28
+ 6335 1f10 00000000 		.long	.LASF391
+ 6336 1f14 01       		.byte	0x1
+ 6337 1f15 8A02     		.value	0x28a
+ 6338 1f17 87020000 		.long	0x287
+ 6339 1f1b 09       		.byte	0x9
+ 6340 1f1c 03       		.byte	0x3
+ 6341 1f1d 00000000 		.quad	KCipherVecAesNi_vt_v1
+ 6341      00000000 
+ 6342 1f25 1B       		.uleb128 0x1b
+ 6343 1f26 C1000000 		.long	0xc1
+ 6344 1f2a 351F0000 		.long	0x1f35
+ 6345 1f2e 17       		.uleb128 0x17
+ 6346 1f2f B1000000 		.long	0xb1
+ 6347 1f33 0B       		.byte	0xb
+ 6348 1f34 00       		.byte	0x0
+ 6349 1f35 2B       		.uleb128 0x2b
+ 6350 1f36 00000000 		.long	.LASF397
+ 6351 1f3a 01       		.byte	0x1
+ 6352 1f3b 38       		.byte	0x38
+ 6353 1f3c 4B1F0000 		.long	0x1f4b
+ 6354 1f40 01       		.byte	0x1
+ 6355 1f41 09       		.byte	0x9
+ 6356 1f42 03       		.byte	0x3
+ 6357 1f43 00000000 		.quad	KCipherVecAesNiClassName
+ 6357      00000000 
+ 6358 1f4b 0B       		.uleb128 0xb
+ 6359 1f4c 251F0000 		.long	0x1f25
+ 6360 1f50 00       		.byte	0x0
+ 6361              		.section	.debug_abbrev
+ 6362 0000 01       		.uleb128 0x1
+ 6363 0001 11       		.uleb128 0x11
+ 6364 0002 01       		.byte	0x1
+ 6365 0003 25       		.uleb128 0x25
+ 6366 0004 0E       		.uleb128 0xe
+ 6367 0005 13       		.uleb128 0x13
+ 6368 0006 0B       		.uleb128 0xb
+ 6369 0007 03       		.uleb128 0x3
+ 6370 0008 0E       		.uleb128 0xe
+ 6371 0009 1B       		.uleb128 0x1b
+ 6372 000a 0E       		.uleb128 0xe
+ 6373 000b 11       		.uleb128 0x11
+ 6374 000c 01       		.uleb128 0x1
+ 6375 000d 12       		.uleb128 0x12
+ 6376 000e 01       		.uleb128 0x1
+ 6377 000f 10       		.uleb128 0x10
+ 6378 0010 06       		.uleb128 0x6
+ 6379 0011 00       		.byte	0x0
+ 6380 0012 00       		.byte	0x0
+ 6381 0013 02       		.uleb128 0x2
+ 6382 0014 24       		.uleb128 0x24
+
GAS LISTING /tmp/ccWvEaWW.s 			page 142
+
+
+ 6383 0015 00       		.byte	0x0
+ 6384 0016 0B       		.uleb128 0xb
+ 6385 0017 0B       		.uleb128 0xb
+ 6386 0018 3E       		.uleb128 0x3e
+ 6387 0019 0B       		.uleb128 0xb
+ 6388 001a 03       		.uleb128 0x3
+ 6389 001b 0E       		.uleb128 0xe
+ 6390 001c 00       		.byte	0x0
+ 6391 001d 00       		.byte	0x0
+ 6392 001e 03       		.uleb128 0x3
+ 6393 001f 24       		.uleb128 0x24
+ 6394 0020 00       		.byte	0x0
+ 6395 0021 0B       		.uleb128 0xb
+ 6396 0022 0B       		.uleb128 0xb
+ 6397 0023 3E       		.uleb128 0x3e
+ 6398 0024 0B       		.uleb128 0xb
+ 6399 0025 03       		.uleb128 0x3
+ 6400 0026 08       		.uleb128 0x8
+ 6401 0027 00       		.byte	0x0
+ 6402 0028 00       		.byte	0x0
+ 6403 0029 04       		.uleb128 0x4
+ 6404 002a 16       		.uleb128 0x16
+ 6405 002b 00       		.byte	0x0
+ 6406 002c 03       		.uleb128 0x3
+ 6407 002d 0E       		.uleb128 0xe
+ 6408 002e 3A       		.uleb128 0x3a
+ 6409 002f 0B       		.uleb128 0xb
+ 6410 0030 3B       		.uleb128 0x3b
+ 6411 0031 0B       		.uleb128 0xb
+ 6412 0032 49       		.uleb128 0x49
+ 6413 0033 13       		.uleb128 0x13
+ 6414 0034 00       		.byte	0x0
+ 6415 0035 00       		.byte	0x0
+ 6416 0036 05       		.uleb128 0x5
+ 6417 0037 13       		.uleb128 0x13
+ 6418 0038 01       		.byte	0x1
+ 6419 0039 03       		.uleb128 0x3
+ 6420 003a 0E       		.uleb128 0xe
+ 6421 003b 0B       		.uleb128 0xb
+ 6422 003c 0B       		.uleb128 0xb
+ 6423 003d 3A       		.uleb128 0x3a
+ 6424 003e 0B       		.uleb128 0xb
+ 6425 003f 3B       		.uleb128 0x3b
+ 6426 0040 0B       		.uleb128 0xb
+ 6427 0041 01       		.uleb128 0x1
+ 6428 0042 13       		.uleb128 0x13
+ 6429 0043 00       		.byte	0x0
+ 6430 0044 00       		.byte	0x0
+ 6431 0045 06       		.uleb128 0x6
+ 6432 0046 0D       		.uleb128 0xd
+ 6433 0047 00       		.byte	0x0
+ 6434 0048 03       		.uleb128 0x3
+ 6435 0049 0E       		.uleb128 0xe
+ 6436 004a 3A       		.uleb128 0x3a
+ 6437 004b 0B       		.uleb128 0xb
+ 6438 004c 3B       		.uleb128 0x3b
+ 6439 004d 0B       		.uleb128 0xb
+
GAS LISTING /tmp/ccWvEaWW.s 			page 143
+
+
+ 6440 004e 49       		.uleb128 0x49
+ 6441 004f 13       		.uleb128 0x13
+ 6442 0050 38       		.uleb128 0x38
+ 6443 0051 0A       		.uleb128 0xa
+ 6444 0052 00       		.byte	0x0
+ 6445 0053 00       		.byte	0x0
+ 6446 0054 07       		.uleb128 0x7
+ 6447 0055 35       		.uleb128 0x35
+ 6448 0056 00       		.byte	0x0
+ 6449 0057 49       		.uleb128 0x49
+ 6450 0058 13       		.uleb128 0x13
+ 6451 0059 00       		.byte	0x0
+ 6452 005a 00       		.byte	0x0
+ 6453 005b 08       		.uleb128 0x8
+ 6454 005c 24       		.uleb128 0x24
+ 6455 005d 00       		.byte	0x0
+ 6456 005e 0B       		.uleb128 0xb
+ 6457 005f 0B       		.uleb128 0xb
+ 6458 0060 3E       		.uleb128 0x3e
+ 6459 0061 0B       		.uleb128 0xb
+ 6460 0062 00       		.byte	0x0
+ 6461 0063 00       		.byte	0x0
+ 6462 0064 09       		.uleb128 0x9
+ 6463 0065 0F       		.uleb128 0xf
+ 6464 0066 00       		.byte	0x0
+ 6465 0067 0B       		.uleb128 0xb
+ 6466 0068 0B       		.uleb128 0xb
+ 6467 0069 00       		.byte	0x0
+ 6468 006a 00       		.byte	0x0
+ 6469 006b 0A       		.uleb128 0xa
+ 6470 006c 0F       		.uleb128 0xf
+ 6471 006d 00       		.byte	0x0
+ 6472 006e 0B       		.uleb128 0xb
+ 6473 006f 0B       		.uleb128 0xb
+ 6474 0070 49       		.uleb128 0x49
+ 6475 0071 13       		.uleb128 0x13
+ 6476 0072 00       		.byte	0x0
+ 6477 0073 00       		.byte	0x0
+ 6478 0074 0B       		.uleb128 0xb
+ 6479 0075 26       		.uleb128 0x26
+ 6480 0076 00       		.byte	0x0
+ 6481 0077 49       		.uleb128 0x49
+ 6482 0078 13       		.uleb128 0x13
+ 6483 0079 00       		.byte	0x0
+ 6484 007a 00       		.byte	0x0
+ 6485 007b 0C       		.uleb128 0xc
+ 6486 007c 04       		.uleb128 0x4
+ 6487 007d 01       		.byte	0x1
+ 6488 007e 0B       		.uleb128 0xb
+ 6489 007f 0B       		.uleb128 0xb
+ 6490 0080 3A       		.uleb128 0x3a
+ 6491 0081 0B       		.uleb128 0xb
+ 6492 0082 3B       		.uleb128 0x3b
+ 6493 0083 0B       		.uleb128 0xb
+ 6494 0084 01       		.uleb128 0x1
+ 6495 0085 13       		.uleb128 0x13
+ 6496 0086 00       		.byte	0x0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 144
+
+
+ 6497 0087 00       		.byte	0x0
+ 6498 0088 0D       		.uleb128 0xd
+ 6499 0089 28       		.uleb128 0x28
+ 6500 008a 00       		.byte	0x0
+ 6501 008b 03       		.uleb128 0x3
+ 6502 008c 0E       		.uleb128 0xe
+ 6503 008d 1C       		.uleb128 0x1c
+ 6504 008e 0D       		.uleb128 0xd
+ 6505 008f 00       		.byte	0x0
+ 6506 0090 00       		.byte	0x0
+ 6507 0091 0E       		.uleb128 0xe
+ 6508 0092 0D       		.uleb128 0xd
+ 6509 0093 00       		.byte	0x0
+ 6510 0094 03       		.uleb128 0x3
+ 6511 0095 08       		.uleb128 0x8
+ 6512 0096 3A       		.uleb128 0x3a
+ 6513 0097 0B       		.uleb128 0xb
+ 6514 0098 3B       		.uleb128 0x3b
+ 6515 0099 0B       		.uleb128 0xb
+ 6516 009a 49       		.uleb128 0x49
+ 6517 009b 13       		.uleb128 0x13
+ 6518 009c 38       		.uleb128 0x38
+ 6519 009d 0A       		.uleb128 0xa
+ 6520 009e 00       		.byte	0x0
+ 6521 009f 00       		.byte	0x0
+ 6522 00a0 0F       		.uleb128 0xf
+ 6523 00a1 15       		.uleb128 0x15
+ 6524 00a2 01       		.byte	0x1
+ 6525 00a3 27       		.uleb128 0x27
+ 6526 00a4 0C       		.uleb128 0xc
+ 6527 00a5 01       		.uleb128 0x1
+ 6528 00a6 13       		.uleb128 0x13
+ 6529 00a7 00       		.byte	0x0
+ 6530 00a8 00       		.byte	0x0
+ 6531 00a9 10       		.uleb128 0x10
+ 6532 00aa 05       		.uleb128 0x5
+ 6533 00ab 00       		.byte	0x0
+ 6534 00ac 49       		.uleb128 0x49
+ 6535 00ad 13       		.uleb128 0x13
+ 6536 00ae 00       		.byte	0x0
+ 6537 00af 00       		.byte	0x0
+ 6538 00b0 11       		.uleb128 0x11
+ 6539 00b1 15       		.uleb128 0x15
+ 6540 00b2 01       		.byte	0x1
+ 6541 00b3 27       		.uleb128 0x27
+ 6542 00b4 0C       		.uleb128 0xc
+ 6543 00b5 49       		.uleb128 0x49
+ 6544 00b6 13       		.uleb128 0x13
+ 6545 00b7 01       		.uleb128 0x1
+ 6546 00b8 13       		.uleb128 0x13
+ 6547 00b9 00       		.byte	0x0
+ 6548 00ba 00       		.byte	0x0
+ 6549 00bb 12       		.uleb128 0x12
+ 6550 00bc 26       		.uleb128 0x26
+ 6551 00bd 00       		.byte	0x0
+ 6552 00be 00       		.byte	0x0
+ 6553 00bf 00       		.byte	0x0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 145
+
+
+ 6554 00c0 13       		.uleb128 0x13
+ 6555 00c1 17       		.uleb128 0x17
+ 6556 00c2 01       		.byte	0x1
+ 6557 00c3 03       		.uleb128 0x3
+ 6558 00c4 0E       		.uleb128 0xe
+ 6559 00c5 0B       		.uleb128 0xb
+ 6560 00c6 0B       		.uleb128 0xb
+ 6561 00c7 3A       		.uleb128 0x3a
+ 6562 00c8 0B       		.uleb128 0xb
+ 6563 00c9 3B       		.uleb128 0x3b
+ 6564 00ca 0B       		.uleb128 0xb
+ 6565 00cb 01       		.uleb128 0x1
+ 6566 00cc 13       		.uleb128 0x13
+ 6567 00cd 00       		.byte	0x0
+ 6568 00ce 00       		.byte	0x0
+ 6569 00cf 14       		.uleb128 0x14
+ 6570 00d0 0D       		.uleb128 0xd
+ 6571 00d1 00       		.byte	0x0
+ 6572 00d2 03       		.uleb128 0x3
+ 6573 00d3 0E       		.uleb128 0xe
+ 6574 00d4 3A       		.uleb128 0x3a
+ 6575 00d5 0B       		.uleb128 0xb
+ 6576 00d6 3B       		.uleb128 0x3b
+ 6577 00d7 0B       		.uleb128 0xb
+ 6578 00d8 49       		.uleb128 0x49
+ 6579 00d9 13       		.uleb128 0x13
+ 6580 00da 00       		.byte	0x0
+ 6581 00db 00       		.byte	0x0
+ 6582 00dc 15       		.uleb128 0x15
+ 6583 00dd 0D       		.uleb128 0xd
+ 6584 00de 00       		.byte	0x0
+ 6585 00df 03       		.uleb128 0x3
+ 6586 00e0 08       		.uleb128 0x8
+ 6587 00e1 3A       		.uleb128 0x3a
+ 6588 00e2 0B       		.uleb128 0xb
+ 6589 00e3 3B       		.uleb128 0x3b
+ 6590 00e4 0B       		.uleb128 0xb
+ 6591 00e5 49       		.uleb128 0x49
+ 6592 00e6 13       		.uleb128 0x13
+ 6593 00e7 00       		.byte	0x0
+ 6594 00e8 00       		.byte	0x0
+ 6595 00e9 16       		.uleb128 0x16
+ 6596 00ea 01       		.uleb128 0x1
+ 6597 00eb 01       		.byte	0x1
+ 6598 00ec 8742     		.uleb128 0x2107
+ 6599 00ee 0C       		.uleb128 0xc
+ 6600 00ef 49       		.uleb128 0x49
+ 6601 00f0 13       		.uleb128 0x13
+ 6602 00f1 01       		.uleb128 0x1
+ 6603 00f2 13       		.uleb128 0x13
+ 6604 00f3 00       		.byte	0x0
+ 6605 00f4 00       		.byte	0x0
+ 6606 00f5 17       		.uleb128 0x17
+ 6607 00f6 21       		.uleb128 0x21
+ 6608 00f7 00       		.byte	0x0
+ 6609 00f8 49       		.uleb128 0x49
+ 6610 00f9 13       		.uleb128 0x13
+
GAS LISTING /tmp/ccWvEaWW.s 			page 146
+
+
+ 6611 00fa 2F       		.uleb128 0x2f
+ 6612 00fb 0B       		.uleb128 0xb
+ 6613 00fc 00       		.byte	0x0
+ 6614 00fd 00       		.byte	0x0
+ 6615 00fe 18       		.uleb128 0x18
+ 6616 00ff 15       		.uleb128 0x15
+ 6617 0100 01       		.byte	0x1
+ 6618 0101 49       		.uleb128 0x49
+ 6619 0102 13       		.uleb128 0x13
+ 6620 0103 01       		.uleb128 0x1
+ 6621 0104 13       		.uleb128 0x13
+ 6622 0105 00       		.byte	0x0
+ 6623 0106 00       		.byte	0x0
+ 6624 0107 19       		.uleb128 0x19
+ 6625 0108 18       		.uleb128 0x18
+ 6626 0109 00       		.byte	0x0
+ 6627 010a 00       		.byte	0x0
+ 6628 010b 00       		.byte	0x0
+ 6629 010c 1A       		.uleb128 0x1a
+ 6630 010d 13       		.uleb128 0x13
+ 6631 010e 01       		.byte	0x1
+ 6632 010f 03       		.uleb128 0x3
+ 6633 0110 0E       		.uleb128 0xe
+ 6634 0111 0B       		.uleb128 0xb
+ 6635 0112 05       		.uleb128 0x5
+ 6636 0113 3A       		.uleb128 0x3a
+ 6637 0114 0B       		.uleb128 0xb
+ 6638 0115 3B       		.uleb128 0x3b
+ 6639 0116 0B       		.uleb128 0xb
+ 6640 0117 01       		.uleb128 0x1
+ 6641 0118 13       		.uleb128 0x13
+ 6642 0119 00       		.byte	0x0
+ 6643 011a 00       		.byte	0x0
+ 6644 011b 1B       		.uleb128 0x1b
+ 6645 011c 01       		.uleb128 0x1
+ 6646 011d 01       		.byte	0x1
+ 6647 011e 49       		.uleb128 0x49
+ 6648 011f 13       		.uleb128 0x13
+ 6649 0120 01       		.uleb128 0x1
+ 6650 0121 13       		.uleb128 0x13
+ 6651 0122 00       		.byte	0x0
+ 6652 0123 00       		.byte	0x0
+ 6653 0124 1C       		.uleb128 0x1c
+ 6654 0125 04       		.uleb128 0x4
+ 6655 0126 01       		.byte	0x1
+ 6656 0127 03       		.uleb128 0x3
+ 6657 0128 0E       		.uleb128 0xe
+ 6658 0129 0B       		.uleb128 0xb
+ 6659 012a 0B       		.uleb128 0xb
+ 6660 012b 3A       		.uleb128 0x3a
+ 6661 012c 0B       		.uleb128 0xb
+ 6662 012d 3B       		.uleb128 0x3b
+ 6663 012e 0B       		.uleb128 0xb
+ 6664 012f 01       		.uleb128 0x1
+ 6665 0130 13       		.uleb128 0x13
+ 6666 0131 00       		.byte	0x0
+ 6667 0132 00       		.byte	0x0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 147
+
+
+ 6668 0133 1D       		.uleb128 0x1d
+ 6669 0134 04       		.uleb128 0x4
+ 6670 0135 01       		.byte	0x1
+ 6671 0136 03       		.uleb128 0x3
+ 6672 0137 0E       		.uleb128 0xe
+ 6673 0138 0B       		.uleb128 0xb
+ 6674 0139 0B       		.uleb128 0xb
+ 6675 013a 3A       		.uleb128 0x3a
+ 6676 013b 0B       		.uleb128 0xb
+ 6677 013c 3B       		.uleb128 0x3b
+ 6678 013d 05       		.uleb128 0x5
+ 6679 013e 01       		.uleb128 0x1
+ 6680 013f 13       		.uleb128 0x13
+ 6681 0140 00       		.byte	0x0
+ 6682 0141 00       		.byte	0x0
+ 6683 0142 1E       		.uleb128 0x1e
+ 6684 0143 2E       		.uleb128 0x2e
+ 6685 0144 01       		.byte	0x1
+ 6686 0145 03       		.uleb128 0x3
+ 6687 0146 0E       		.uleb128 0xe
+ 6688 0147 3A       		.uleb128 0x3a
+ 6689 0148 0B       		.uleb128 0xb
+ 6690 0149 3B       		.uleb128 0x3b
+ 6691 014a 0B       		.uleb128 0xb
+ 6692 014b 27       		.uleb128 0x27
+ 6693 014c 0C       		.uleb128 0xc
+ 6694 014d 49       		.uleb128 0x49
+ 6695 014e 13       		.uleb128 0x13
+ 6696 014f 11       		.uleb128 0x11
+ 6697 0150 01       		.uleb128 0x1
+ 6698 0151 12       		.uleb128 0x12
+ 6699 0152 01       		.uleb128 0x1
+ 6700 0153 40       		.uleb128 0x40
+ 6701 0154 06       		.uleb128 0x6
+ 6702 0155 01       		.uleb128 0x1
+ 6703 0156 13       		.uleb128 0x13
+ 6704 0157 00       		.byte	0x0
+ 6705 0158 00       		.byte	0x0
+ 6706 0159 1F       		.uleb128 0x1f
+ 6707 015a 05       		.uleb128 0x5
+ 6708 015b 00       		.byte	0x0
+ 6709 015c 03       		.uleb128 0x3
+ 6710 015d 0E       		.uleb128 0xe
+ 6711 015e 3A       		.uleb128 0x3a
+ 6712 015f 0B       		.uleb128 0xb
+ 6713 0160 3B       		.uleb128 0x3b
+ 6714 0161 0B       		.uleb128 0xb
+ 6715 0162 49       		.uleb128 0x49
+ 6716 0163 13       		.uleb128 0x13
+ 6717 0164 02       		.uleb128 0x2
+ 6718 0165 0A       		.uleb128 0xa
+ 6719 0166 00       		.byte	0x0
+ 6720 0167 00       		.byte	0x0
+ 6721 0168 20       		.uleb128 0x20
+ 6722 0169 34       		.uleb128 0x34
+ 6723 016a 00       		.byte	0x0
+ 6724 016b 03       		.uleb128 0x3
+
GAS LISTING /tmp/ccWvEaWW.s 			page 148
+
+
+ 6725 016c 08       		.uleb128 0x8
+ 6726 016d 3A       		.uleb128 0x3a
+ 6727 016e 0B       		.uleb128 0xb
+ 6728 016f 3B       		.uleb128 0x3b
+ 6729 0170 0B       		.uleb128 0xb
+ 6730 0171 49       		.uleb128 0x49
+ 6731 0172 13       		.uleb128 0x13
+ 6732 0173 02       		.uleb128 0x2
+ 6733 0174 0A       		.uleb128 0xa
+ 6734 0175 00       		.byte	0x0
+ 6735 0176 00       		.byte	0x0
+ 6736 0177 21       		.uleb128 0x21
+ 6737 0178 2E       		.uleb128 0x2e
+ 6738 0179 01       		.byte	0x1
+ 6739 017a 03       		.uleb128 0x3
+ 6740 017b 0E       		.uleb128 0xe
+ 6741 017c 3A       		.uleb128 0x3a
+ 6742 017d 0B       		.uleb128 0xb
+ 6743 017e 3B       		.uleb128 0x3b
+ 6744 017f 0B       		.uleb128 0xb
+ 6745 0180 27       		.uleb128 0x27
+ 6746 0181 0C       		.uleb128 0xc
+ 6747 0182 11       		.uleb128 0x11
+ 6748 0183 01       		.uleb128 0x1
+ 6749 0184 12       		.uleb128 0x12
+ 6750 0185 01       		.uleb128 0x1
+ 6751 0186 40       		.uleb128 0x40
+ 6752 0187 06       		.uleb128 0x6
+ 6753 0188 01       		.uleb128 0x1
+ 6754 0189 13       		.uleb128 0x13
+ 6755 018a 00       		.byte	0x0
+ 6756 018b 00       		.byte	0x0
+ 6757 018c 22       		.uleb128 0x22
+ 6758 018d 05       		.uleb128 0x5
+ 6759 018e 00       		.byte	0x0
+ 6760 018f 03       		.uleb128 0x3
+ 6761 0190 08       		.uleb128 0x8
+ 6762 0191 3A       		.uleb128 0x3a
+ 6763 0192 0B       		.uleb128 0xb
+ 6764 0193 3B       		.uleb128 0x3b
+ 6765 0194 0B       		.uleb128 0xb
+ 6766 0195 49       		.uleb128 0x49
+ 6767 0196 13       		.uleb128 0x13
+ 6768 0197 02       		.uleb128 0x2
+ 6769 0198 0A       		.uleb128 0xa
+ 6770 0199 00       		.byte	0x0
+ 6771 019a 00       		.byte	0x0
+ 6772 019b 23       		.uleb128 0x23
+ 6773 019c 34       		.uleb128 0x34
+ 6774 019d 00       		.byte	0x0
+ 6775 019e 03       		.uleb128 0x3
+ 6776 019f 0E       		.uleb128 0xe
+ 6777 01a0 49       		.uleb128 0x49
+ 6778 01a1 13       		.uleb128 0x13
+ 6779 01a2 34       		.uleb128 0x34
+ 6780 01a3 0C       		.uleb128 0xc
+ 6781 01a4 02       		.uleb128 0x2
+
GAS LISTING /tmp/ccWvEaWW.s 			page 149
+
+
+ 6782 01a5 0A       		.uleb128 0xa
+ 6783 01a6 00       		.byte	0x0
+ 6784 01a7 00       		.byte	0x0
+ 6785 01a8 24       		.uleb128 0x24
+ 6786 01a9 34       		.uleb128 0x34
+ 6787 01aa 00       		.byte	0x0
+ 6788 01ab 03       		.uleb128 0x3
+ 6789 01ac 08       		.uleb128 0x8
+ 6790 01ad 3A       		.uleb128 0x3a
+ 6791 01ae 0B       		.uleb128 0xb
+ 6792 01af 3B       		.uleb128 0x3b
+ 6793 01b0 05       		.uleb128 0x5
+ 6794 01b1 49       		.uleb128 0x49
+ 6795 01b2 13       		.uleb128 0x13
+ 6796 01b3 02       		.uleb128 0x2
+ 6797 01b4 0A       		.uleb128 0xa
+ 6798 01b5 00       		.byte	0x0
+ 6799 01b6 00       		.byte	0x0
+ 6800 01b7 25       		.uleb128 0x25
+ 6801 01b8 2E       		.uleb128 0x2e
+ 6802 01b9 01       		.byte	0x1
+ 6803 01ba 03       		.uleb128 0x3
+ 6804 01bb 0E       		.uleb128 0xe
+ 6805 01bc 3A       		.uleb128 0x3a
+ 6806 01bd 0B       		.uleb128 0xb
+ 6807 01be 3B       		.uleb128 0x3b
+ 6808 01bf 05       		.uleb128 0x5
+ 6809 01c0 27       		.uleb128 0x27
+ 6810 01c1 0C       		.uleb128 0xc
+ 6811 01c2 49       		.uleb128 0x49
+ 6812 01c3 13       		.uleb128 0x13
+ 6813 01c4 11       		.uleb128 0x11
+ 6814 01c5 01       		.uleb128 0x1
+ 6815 01c6 12       		.uleb128 0x12
+ 6816 01c7 01       		.uleb128 0x1
+ 6817 01c8 40       		.uleb128 0x40
+ 6818 01c9 06       		.uleb128 0x6
+ 6819 01ca 01       		.uleb128 0x1
+ 6820 01cb 13       		.uleb128 0x13
+ 6821 01cc 00       		.byte	0x0
+ 6822 01cd 00       		.byte	0x0
+ 6823 01ce 26       		.uleb128 0x26
+ 6824 01cf 05       		.uleb128 0x5
+ 6825 01d0 00       		.byte	0x0
+ 6826 01d1 03       		.uleb128 0x3
+ 6827 01d2 0E       		.uleb128 0xe
+ 6828 01d3 3A       		.uleb128 0x3a
+ 6829 01d4 0B       		.uleb128 0xb
+ 6830 01d5 3B       		.uleb128 0x3b
+ 6831 01d6 05       		.uleb128 0x5
+ 6832 01d7 49       		.uleb128 0x49
+ 6833 01d8 13       		.uleb128 0x13
+ 6834 01d9 02       		.uleb128 0x2
+ 6835 01da 0A       		.uleb128 0xa
+ 6836 01db 00       		.byte	0x0
+ 6837 01dc 00       		.byte	0x0
+ 6838 01dd 27       		.uleb128 0x27
+
GAS LISTING /tmp/ccWvEaWW.s 			page 150
+
+
+ 6839 01de 05       		.uleb128 0x5
+ 6840 01df 00       		.byte	0x0
+ 6841 01e0 03       		.uleb128 0x3
+ 6842 01e1 08       		.uleb128 0x8
+ 6843 01e2 3A       		.uleb128 0x3a
+ 6844 01e3 0B       		.uleb128 0xb
+ 6845 01e4 3B       		.uleb128 0x3b
+ 6846 01e5 05       		.uleb128 0x5
+ 6847 01e6 49       		.uleb128 0x49
+ 6848 01e7 13       		.uleb128 0x13
+ 6849 01e8 02       		.uleb128 0x2
+ 6850 01e9 0A       		.uleb128 0xa
+ 6851 01ea 00       		.byte	0x0
+ 6852 01eb 00       		.byte	0x0
+ 6853 01ec 28       		.uleb128 0x28
+ 6854 01ed 34       		.uleb128 0x34
+ 6855 01ee 00       		.byte	0x0
+ 6856 01ef 03       		.uleb128 0x3
+ 6857 01f0 0E       		.uleb128 0xe
+ 6858 01f1 3A       		.uleb128 0x3a
+ 6859 01f2 0B       		.uleb128 0xb
+ 6860 01f3 3B       		.uleb128 0x3b
+ 6861 01f4 05       		.uleb128 0x5
+ 6862 01f5 49       		.uleb128 0x49
+ 6863 01f6 13       		.uleb128 0x13
+ 6864 01f7 02       		.uleb128 0x2
+ 6865 01f8 0A       		.uleb128 0xa
+ 6866 01f9 00       		.byte	0x0
+ 6867 01fa 00       		.byte	0x0
+ 6868 01fb 29       		.uleb128 0x29
+ 6869 01fc 0B       		.uleb128 0xb
+ 6870 01fd 01       		.byte	0x1
+ 6871 01fe 11       		.uleb128 0x11
+ 6872 01ff 01       		.uleb128 0x1
+ 6873 0200 12       		.uleb128 0x12
+ 6874 0201 01       		.uleb128 0x1
+ 6875 0202 00       		.byte	0x0
+ 6876 0203 00       		.byte	0x0
+ 6877 0204 2A       		.uleb128 0x2a
+ 6878 0205 2E       		.uleb128 0x2e
+ 6879 0206 01       		.byte	0x1
+ 6880 0207 3F       		.uleb128 0x3f
+ 6881 0208 0C       		.uleb128 0xc
+ 6882 0209 03       		.uleb128 0x3
+ 6883 020a 0E       		.uleb128 0xe
+ 6884 020b 3A       		.uleb128 0x3a
+ 6885 020c 0B       		.uleb128 0xb
+ 6886 020d 3B       		.uleb128 0x3b
+ 6887 020e 05       		.uleb128 0x5
+ 6888 020f 27       		.uleb128 0x27
+ 6889 0210 0C       		.uleb128 0xc
+ 6890 0211 49       		.uleb128 0x49
+ 6891 0212 13       		.uleb128 0x13
+ 6892 0213 11       		.uleb128 0x11
+ 6893 0214 01       		.uleb128 0x1
+ 6894 0215 12       		.uleb128 0x12
+ 6895 0216 01       		.uleb128 0x1
+
GAS LISTING /tmp/ccWvEaWW.s 			page 151
+
+
+ 6896 0217 40       		.uleb128 0x40
+ 6897 0218 06       		.uleb128 0x6
+ 6898 0219 01       		.uleb128 0x1
+ 6899 021a 13       		.uleb128 0x13
+ 6900 021b 00       		.byte	0x0
+ 6901 021c 00       		.byte	0x0
+ 6902 021d 2B       		.uleb128 0x2b
+ 6903 021e 34       		.uleb128 0x34
+ 6904 021f 00       		.byte	0x0
+ 6905 0220 03       		.uleb128 0x3
+ 6906 0221 0E       		.uleb128 0xe
+ 6907 0222 3A       		.uleb128 0x3a
+ 6908 0223 0B       		.uleb128 0xb
+ 6909 0224 3B       		.uleb128 0x3b
+ 6910 0225 0B       		.uleb128 0xb
+ 6911 0226 49       		.uleb128 0x49
+ 6912 0227 13       		.uleb128 0x13
+ 6913 0228 3F       		.uleb128 0x3f
+ 6914 0229 0C       		.uleb128 0xc
+ 6915 022a 02       		.uleb128 0x2
+ 6916 022b 0A       		.uleb128 0xa
+ 6917 022c 00       		.byte	0x0
+ 6918 022d 00       		.byte	0x0
+ 6919 022e 00       		.byte	0x0
+ 6920              		.section	.debug_pubnames,"", at progbits
+ 6921 0000 43000000 		.long	0x43
+ 6922 0004 0200     		.value	0x2
+ 6923 0006 00000000 		.long	.Ldebug_info0
+ 6924 000a 511F0000 		.long	0x1f51
+ 6925 000e 3E1E0000 		.long	0x1e3e
+ 6926 0012 4B436970 		.string	"KCipherVecAesNiMake"
+ 6926      68657256 
+ 6926      65634165 
+ 6926      734E694D 
+ 6926      616B6500 
+ 6927 0026 351F0000 		.long	0x1f35
+ 6928 002a 4B436970 		.string	"KCipherVecAesNiClassName"
+ 6928      68657256 
+ 6928      65634165 
+ 6928      734E6943 
+ 6928      6C617373 
+ 6929 0043 00000000 		.long	0x0
+ 6930              		.section	.debug_aranges,"", at progbits
+ 6931 0000 2C000000 		.long	0x2c
+ 6932 0004 0200     		.value	0x2
+ 6933 0006 00000000 		.long	.Ldebug_info0
+ 6934 000a 08       		.byte	0x8
+ 6935 000b 00       		.byte	0x0
+ 6936 000c 0000     		.value	0x0
+ 6937 000e 0000     		.value	0x0
+ 6938 0010 00000000 		.quad	.Ltext0
+ 6938      00000000 
+ 6939 0018 64100000 		.quad	.Letext0-.Ltext0
+ 6939      00000000 
+ 6940 0020 00000000 		.quad	0x0
+ 6940      00000000 
+ 6941 0028 00000000 		.quad	0x0
+
GAS LISTING /tmp/ccWvEaWW.s 			page 152
+
+
+ 6941      00000000 
+ 6942              		.section	.debug_str,"MS", at progbits,1
+ 6943              	.LASF89:
+ 6944 0000 645F6B65 		.string	"d_key"
+ 6944      7900
+ 6945              	.LASF331:
+ 6946 0006 72634475 		.string	"rcDuplicate"
+ 6946      706C6963 
+ 6946      61746500 
+ 6947              	.LASF134:
+ 6948 0012 7263436F 		.string	"rcCondition"
+ 6948      6E646974 
+ 6948      696F6E00 
+ 6949              	.LASF248:
+ 6950 001e 7263456E 		.string	"rcEncrypting"
+ 6950      63727970 
+ 6950      74696E67 
+ 6950      00
+ 6951              	.LASF207:
+ 6952 002b 72634F70 		.string	"rcOpening"
+ 6952      656E696E 
+ 6952      6700
+ 6953              	.LASF378:
+ 6954 0035 4B436970 		.string	"KCipherVecAesNiDecryptCfb"
+ 6954      68657256 
+ 6954      65634165 
+ 6954      734E6944 
+ 6954      65637279 
+ 6955              	.LASF215:
+ 6956 004f 72635065 		.string	"rcPersisting"
+ 6956      72736973 
+ 6956      74696E67 
+ 6956      00
+ 6957              	.LASF253:
+ 6958 005c 72635365 		.string	"rcSending"
+ 6958      6E64696E 
+ 6958      6700
+ 6959              	.LASF363:
+ 6960 0066 4B436970 		.string	"KCipherVecAesNiDecryptV1"
+ 6960      68657256 
+ 6960      65634165 
+ 6960      734E6944 
+ 6960      65637279 
+ 6961              	.LASF247:
+ 6962 007f 72634170 		.string	"rcAppending"
+ 6962      70656E64 
+ 6962      696E6700 
+ 6963              	.LASF233:
+ 6964 008b 72635369 		.string	"rcSignaling"
+ 6964      676E616C 
+ 6964      696E6700 
+ 6965              	.LASF14:
+ 6966 0097 4442475F 		.string	"DBG_BLAST"
+ 6966      424C4153 
+ 6966      5400
+ 6967              	.LASF289:
+ 6968 00a1 72635369 		.string	"rcSignalSet"
+
GAS LISTING /tmp/ccWvEaWW.s 			page 153
+
+
+ 6968      676E616C 
+ 6968      53657400 
+ 6969              	.LASF235:
+ 6970 00ad 72634174 		.string	"rcAttaching"
+ 6970      74616368 
+ 6970      696E6700 
+ 6971              	.LASF167:
+ 6972 00b9 72635461 		.string	"rcTable"
+ 6972      626C6500 
+ 6973              	.LASF66:
+ 6974 00c1 64656372 		.string	"decrypt_cfb"
+ 6974      7970745F 
+ 6974      63666200 
+ 6975              	.LASF131:
+ 6976 00cd 72634275 		.string	"rcBuffer"
+ 6976      66666572 
+ 6976      00
+ 6977              	.LASF263:
+ 6978 00d6 72634D65 		.string	"rcMemory"
+ 6978      6D6F7279 
+ 6978      00
+ 6979              	.LASF196:
+ 6980 00df 72634C6F 		.string	"rcLocking"
+ 6980      636B696E 
+ 6980      6700
+ 6981              	.LASF231:
+ 6982 00e9 72635061 		.string	"rcParsing"
+ 6982      7273696E 
+ 6982      6700
+ 6983              	.LASF260:
+ 6984 00f3 72635365 		.string	"rcSelf"
+ 6984      6C6600
+ 6985              	.LASF153:
+ 6986 00fa 72634D65 		.string	"rcMetadata"
+ 6986      74616461 
+ 6986      746100
+ 6987              	.LASF276:
+ 6988 0105 72634172 		.string	"rcArcHardLink"
+ 6988      63486172 
+ 6988      644C696E 
+ 6988      6B00
+ 6989              	.LASF102:
+ 6990 0113 7263436F 		.string	"rcCont"
+ 6990      6E7400
+ 6991              	.LASF284:
+ 6992 011a 72634368 		.string	"rcChecksum"
+ 6992      65636B73 
+ 6992      756D00
+ 6993              	.LASF354:
+ 6994 0125 5F5F6675 		.string	"__func__"
+ 6994      6E635F5F 
+ 6994      00
+ 6995              	.LASF328:
+ 6996 012e 7263546F 		.string	"rcTooShort"
+ 6996      6F53686F 
+ 6996      727400
+ 6997              	.LASF158:
+
GAS LISTING /tmp/ccWvEaWW.s 			page 154
+
+
+ 6998 0139 72635061 		.string	"rcPagemap"
+ 6998      67656D61 
+ 6998      7000
+ 6999              	.LASF110:
+ 7000 0143 72634170 		.string	"rcApp"
+ 7000      7000
+ 7001              	.LASF10:
+ 7002 0149 61746F6D 		.string	"atomic32_t"
+ 7002      69633332 
+ 7002      5F7400
+ 7003              	.LASF56:
+ 7004 0154 7365745F 		.string	"set_decrypt_ctr_func"
+ 7004      64656372 
+ 7004      7970745F 
+ 7004      6374725F 
+ 7004      66756E63 
+ 7005              	.LASF65:
+ 7006 0169 656E6372 		.string	"encrypt_cfb"
+ 7006      7970745F 
+ 7006      63666200 
+ 7007              	.LASF172:
+ 7008 0175 72635472 		.string	"rcTrie"
+ 7008      696500
+ 7009              	.LASF113:
+ 7010 017c 72634C61 		.string	"rcLastModule_v1_0"
+ 7010      73744D6F 
+ 7010      64756C65 
+ 7010      5F76315F 
+ 7010      3000
+ 7011              	.LASF120:
+ 7012 018e 72634C61 		.string	"rcLastModule_v1_1"
+ 7012      73744D6F 
+ 7012      64756C65 
+ 7012      5F76315F 
+ 7012      3100
+ 7013              	.LASF271:
+ 7014 01a0 72634279 		.string	"rcByteOrder"
+ 7014      74654F72 
+ 7014      64657200 
+ 7015              	.LASF84:
+ 7016 01ac 4145534B 		.string	"AESKeySchedule"
+ 7016      65795363 
+ 7016      68656475 
+ 7016      6C6500
+ 7017              	.LASF359:
+ 7018 01bb 4B436970 		.string	"KCipherVecAesNiSetEncryptCounterFunc"
+ 7018      68657256 
+ 7018      65634165 
+ 7018      734E6953 
+ 7018      6574456E 
+ 7019              	.LASF332:
+ 7020 01e0 72634F75 		.string	"rcOutOfKDirectory"
+ 7020      744F664B 
+ 7020      44697265 
+ 7020      63746F72 
+ 7020      7900
+ 7021              	.LASF85:
+
GAS LISTING /tmp/ccWvEaWW.s 			page 155
+
+
+ 7022 01f2 726F756E 		.string	"round_keys"
+ 7022      645F6B65 
+ 7022      797300
+ 7023              	.LASF189:
+ 7024 01fd 7263436F 		.string	"rcConstructing"
+ 7024      6E737472 
+ 7024      75637469 
+ 7024      6E6700
+ 7025              	.LASF95:
+ 7026 020c 6B636970 		.string	"kcipher_AES"
+ 7026      6865725F 
+ 7026      41455300 
+ 7027              	.LASF96:
+ 7028 0218 6B636970 		.string	"kcipher_count"
+ 7028      6865725F 
+ 7028      636F756E 
+ 7028      7400
+ 7029              	.LASF390:
+ 7030 0226 74797065 		.string	"type"
+ 7030      00
+ 7031              	.LASF9:
+ 7032 022b 72635F74 		.string	"rc_t"
+ 7032      00
+ 7033              	.LASF265:
+ 7034 0230 7263466F 		.string	"rcFormat"
+ 7034      726D6174 
+ 7034      00
+ 7035              	.LASF367:
+ 7036 0239 4B436970 		.string	"KCipherVecAesNiDecrypt"
+ 7036      68657256 
+ 7036      65634165 
+ 7036      734E6944 
+ 7036      65637279 
+ 7037              	.LASF323:
+ 7038 0250 7263556E 		.string	"rcUnauthorized"
+ 7038      61757468 
+ 7038      6F72697A 
+ 7038      656400
+ 7039              	.LASF355:
+ 7040 025f 4B436970 		.string	"KCipherVecAesNiSetDecryptKey"
+ 7040      68657256 
+ 7040      65634165 
+ 7040      734E6953 
+ 7040      65744465 
+ 7041              	.LASF346:
+ 7042 027c 63766F75 		.string	"cvout"
+ 7042      7400
+ 7043              	.LASF203:
+ 7044 0282 72635265 		.string	"rcRemoving"
+ 7044      6D6F7669 
+ 7044      6E6700
+ 7045              	.LASF116:
+ 7046 028d 72634B72 		.string	"rcKrypto"
+ 7046      7970746F 
+ 7046      00
+ 7047              	.LASF379:
+ 7048 0296 4B436970 		.string	"KCipherVecAesNiEncryptOfb"
+
GAS LISTING /tmp/ccWvEaWW.s 			page 156
+
+
+ 7048      68657256 
+ 7048      65634165 
+ 7048      734E6945 
+ 7048      6E637279 
+ 7049              	.LASF194:
+ 7050 02b0 72635669 		.string	"rcVisiting"
+ 7050      73697469 
+ 7050      6E6700
+ 7051              	.LASF124:
+ 7052 02bb 72634172 		.string	"rcArc"
+ 7052      6300
+ 7053              	.LASF99:
+ 7054 02c1 72634578 		.string	"rcExe"
+ 7054      6500
+ 7055              	.LASF368:
+ 7056 02c7 4B436970 		.string	"KCipherVecAesNiEncryptEcb"
+ 7056      68657256 
+ 7056      65634165 
+ 7056      734E6945 
+ 7056      6E637279 
+ 7057              	.LASF358:
+ 7058 02e1 4B436970 		.string	"KCipherVecAesNiSetDecryptIvec"
+ 7058      68657256 
+ 7058      65634165 
+ 7058      734E6953 
+ 7058      65744465 
+ 7059              	.LASF329:
+ 7060 02ff 7263546F 		.string	"rcTooLong"
+ 7060      6F4C6F6E 
+ 7060      6700
+ 7061              	.LASF257:
+ 7062 0309 52434F62 		.string	"RCObject"
+ 7062      6A656374 
+ 7062      00
+ 7063              	.LASF267:
+ 7064 0312 7263496E 		.string	"rcInterface"
+ 7064      74657266 
+ 7064      61636500 
+ 7065              	.LASF195:
+ 7066 031e 72635265 		.string	"rcResolving"
+ 7066      736F6C76 
+ 7066      696E6700 
+ 7067              	.LASF87:
+ 7068 032a 43697068 		.string	"CipherAes"
+ 7068      65724165 
+ 7068      7300
+ 7069              	.LASF137:
+ 7070 0334 72634469 		.string	"rcDirectory"
+ 7070      72656374 
+ 7070      6F727900 
+ 7071              	.LASF2:
+ 7072 0340 6C6F6E67 		.string	"long int"
+ 7072      20696E74 
+ 7072      00
+ 7073              	.LASF225:
+ 7074 0349 72635661 		.string	"rcValidating"
+ 7074      6C696461 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 157
+
+
+ 7074      74696E67 
+ 7074      00
+ 7075              	.LASF44:
+ 7076 0356 63697068 		.string	"cipher_ctr_func"
+ 7076      65725F63 
+ 7076      74725F66 
+ 7076      756E6300 
+ 7077              	.LASF127:
+ 7078 0366 72634172 		.string	"rcArgv"
+ 7078      677600
+ 7079              	.LASF103:
+ 7080 036d 72634353 		.string	"rcCS"
+ 7080      00
+ 7081              	.LASF184:
+ 7082 0372 72635572 		.string	"rcUri"
+ 7082      6900
+ 7083              	.LASF206:
+ 7084 0378 72634372 		.string	"rcCreating"
+ 7084      65617469 
+ 7084      6E6700
+ 7085              	.LASF40:
+ 7086 0383 656E6372 		.string	"encrypt_ivec"
+ 7086      7970745F 
+ 7086      69766563 
+ 7086      00
+ 7087              	.LASF57:
+ 7088 0390 656E6372 		.string	"encrypt"
+ 7088      79707400 
+ 7089              	.LASF76:
+ 7090 0398 76313238 		.string	"v128_u8_t"
+ 7090      5F75385F 
+ 7090      7400
+ 7091              	.LASF19:
+ 7092 03a2 4442475F 		.string	"DBG_XML"
+ 7092      584D4C00 
+ 7093              	.LASF31:
+ 7094 03aa 4442475F 		.string	"DBG_MOD_COUNT"
+ 7094      4D4F445F 
+ 7094      434F554E 
+ 7094      5400
+ 7095              	.LASF396:
+ 7096 03b8 4B436970 		.string	"KCipherVecAesNiMake"
+ 7096      68657256 
+ 7096      65634165 
+ 7096      734E694D 
+ 7096      616B6500 
+ 7097              	.LASF352:
+ 7098 03cc 75736572 		.string	"user_key_bits"
+ 7098      5F6B6579 
+ 7098      5F626974 
+ 7098      7300
+ 7099              	.LASF108:
+ 7100 03da 72634442 		.string	"rcDB"
+ 7100      00
+ 7101              	.LASF348:
+ 7102 03df 4B436970 		.string	"KCipherVecAesNiDestroy"
+ 7102      68657256 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 158
+
+
+ 7102      65634165 
+ 7102      734E6944 
+ 7102      65737472 
+ 7103              	.LASF286:
+ 7104 03f6 7263436F 		.string	"rcConnection"
+ 7104      6E6E6563 
+ 7104      74696F6E 
+ 7104      00
+ 7105              	.LASF154:
+ 7106 0403 72634D67 		.string	"rcMgr"
+ 7106      7200
+ 7107              	.LASF316:
+ 7108 0409 72635669 		.string	"rcViolated"
+ 7108      6F6C6174 
+ 7108      656400
+ 7109              	.LASF249:
+ 7110 0414 72634465 		.string	"rcDecrypting"
+ 7110      63727970 
+ 7110      74696E67 
+ 7110      00
+ 7111              	.LASF0:
+ 7112 0421 7369676E 		.string	"signed char"
+ 7112      65642063 
+ 7112      68617200 
+ 7113              	.LASF5:
+ 7114 042d 75696E74 		.string	"uint8_t"
+ 7114      385F7400 
+ 7115              	.LASF132:
+ 7116 0435 72634368 		.string	"rcChar"
+ 7116      617200
+ 7117              	.LASF117:
+ 7118 043c 72635244 		.string	"rcRDBMS"
+ 7118      424D5300 
+ 7119              	.LASF161:
+ 7120 0444 72635175 		.string	"rcQueue"
+ 7120      65756500 
+ 7121              	.LASF353:
+ 7122 044c 5F5F5052 		.string	"__PRETTY_FUNCTION__"
+ 7122      45545459 
+ 7122      5F46554E 
+ 7122      4354494F 
+ 7122      4E5F5F00 
+ 7123              	.LASF12:
+ 7124 0460 4442475F 		.string	"DBG_MOD_NOT_FOUND"
+ 7124      4D4F445F 
+ 7124      4E4F545F 
+ 7124      464F554E 
+ 7124      4400
+ 7125              	.LASF213:
+ 7126 0472 72635265 		.string	"rcReverting"
+ 7126      76657274 
+ 7126      696E6700 
+ 7127              	.LASF129:
+ 7128 047e 72634261 		.string	"rcBarrier"
+ 7128      72726965 
+ 7128      7200
+ 7129              	.LASF313:
+
GAS LISTING /tmp/ccWvEaWW.s 			page 159
+
+
+ 7130 0488 72634578 		.string	"rcExhausted"
+ 7130      68617573 
+ 7130      74656400 
+ 7131              	.LASF3:
+ 7132 0494 756E7369 		.string	"unsigned char"
+ 7132      676E6564 
+ 7132      20636861 
+ 7132      7200
+ 7133              	.LASF186:
+ 7134 04a2 5243436F 		.string	"RCContext"
+ 7134      6E746578 
+ 7134      7400
+ 7135              	.LASF149:
+ 7136 04ac 72634C6F 		.string	"rcLock"
+ 7136      636B00
+ 7137              	.LASF302:
+ 7138 04b3 72634261 		.string	"rcBadVersion"
+ 7138      64566572 
+ 7138      73696F6E 
+ 7138      00
+ 7139              	.LASF303:
+ 7140 04c0 72634465 		.string	"rcDestroyed"
+ 7140      7374726F 
+ 7140      79656400 
+ 7141              	.LASF166:
+ 7142 04cc 72635374 		.string	"rcString"
+ 7142      72696E67 
+ 7142      00
+ 7143              	.LASF128:
+ 7144 04d5 72634174 		.string	"rcAttr"
+ 7144      747200
+ 7145              	.LASF150:
+ 7146 04dc 72634C6F 		.string	"rcLog"
+ 7146      6700
+ 7147              	.LASF389:
+ 7148 04e2 6E65775F 		.string	"new_obj"
+ 7148      6F626A00 
+ 7149              	.LASF15:
+ 7150 04ea 4442475F 		.string	"DBG_KDB"
+ 7150      4B444200 
+ 7151              	.LASF254:
+ 7152 04f2 72635072 		.string	"rcProcessing"
+ 7152      6F636573 
+ 7152      73696E67 
+ 7152      00
+ 7153              	.LASF104:
+ 7154 04ff 72634646 		.string	"rcFF"
+ 7154      00
+ 7155              	.LASF393:
+ 7156 0504 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c"
+ 7156      652F726F 
+ 7156      6461726D 
+ 7156      65722F73 
+ 7156      72615F73 
+ 7157              	.LASF105:
+ 7158 053c 72634653 		.string	"rcFS"
+ 7158      00
+
GAS LISTING /tmp/ccWvEaWW.s 			page 160
+
+
+ 7159              	.LASF347:
+ 7160 0541 43697068 		.string	"CipherVecIn"
+ 7160      65725665 
+ 7160      63496E00 
+ 7161              	.LASF192:
+ 7162 054d 72634163 		.string	"rcAccessing"
+ 7162      63657373 
+ 7162      696E6700 
+ 7163              	.LASF310:
+ 7164 0559 7263496E 		.string	"rcInterrupted"
+ 7164      74657272 
+ 7164      75707465 
+ 7164      6400
+ 7165              	.LASF318:
+ 7166 0567 72634E6F 		.string	"rcNotFound"
+ 7166      74466F75 
+ 7166      6E6400
+ 7167              	.LASF11:
+ 7168 0572 63686172 		.string	"char"
+ 7168      00
+ 7169              	.LASF156:
+ 7170 0577 72634E6F 		.string	"rcNode"
+ 7170      646500
+ 7171              	.LASF29:
+ 7172 057e 4442475F 		.string	"DBG_AES"
+ 7172      41455300 
+ 7173              	.LASF287:
+ 7174 0586 72634572 		.string	"rcError"
+ 7174      726F7200 
+ 7175              	.LASF384:
+ 7176 058e 706F626A 		.string	"pobj"
+ 7176      00
+ 7177              	.LASF204:
+ 7178 0593 7263436C 		.string	"rcClearing"
+ 7178      65617269 
+ 7178      6E6700
+ 7179              	.LASF262:
+ 7180 059e 72634F66 		.string	"rcOffset"
+ 7180      66736574 
+ 7180      00
+ 7181              	.LASF208:
+ 7182 05a7 7263436C 		.string	"rcClosing"
+ 7182      6F73696E 
+ 7182      6700
+ 7183              	.LASF140:
+ 7184 05b1 72634669 		.string	"rcFile"
+ 7184      6C6500
+ 7185              	.LASF376:
+ 7186 05b8 4B436970 		.string	"KCipherVecAesNiDecryptPcbc"
+ 7186      68657256 
+ 7186      65634165 
+ 7186      734E6944 
+ 7186      65637279 
+ 7187              	.LASF169:
+ 7188 05d3 72635469 		.string	"rcTimeout"
+ 7188      6D656F75 
+ 7188      7400
+
GAS LISTING /tmp/ccWvEaWW.s 			page 161
+
+
+ 7189              	.LASF385:
+ 7190 05dd 4B436970 		.string	"KCipherVecAesNiInitAes"
+ 7190      68657256 
+ 7190      65634165 
+ 7190      734E6949 
+ 7190      6E697441 
+ 7191              	.LASF157:
+ 7192 05f4 72634E75 		.string	"rcNumeral"
+ 7192      6D657261 
+ 7192      6C00
+ 7193              	.LASF234:
+ 7194 05fe 72635761 		.string	"rcWaiting"
+ 7194      6974696E 
+ 7194      6700
+ 7195              	.LASF381:
+ 7196 0608 4B436970 		.string	"KCipherVecAesNiEncryptCtr"
+ 7196      68657256 
+ 7196      65634165 
+ 7196      734E6945 
+ 7196      6E637279 
+ 7197              	.LASF362:
+ 7198 0622 4B436970 		.string	"KCipherVecAesNiEncryptV1"
+ 7198      68657256 
+ 7198      65634165 
+ 7198      734E6945 
+ 7198      6E637279 
+ 7199              	.LASF238:
+ 7200 063b 72634650 		.string	"rcFPCoding"
+ 7200      436F6469 
+ 7200      6E6700
+ 7201              	.LASF290:
+ 7202 0646 72635369 		.string	"rcSize"
+ 7202      7A6500
+ 7203              	.LASF275:
+ 7204 064d 72634469 		.string	"rcDirEntry"
+ 7204      72456E74 
+ 7204      727900
+ 7205              	.LASF227:
+ 7206 0658 72634875 		.string	"rcHuffmanCoding"
+ 7206      66666D61 
+ 7206      6E436F64 
+ 7206      696E6700 
+ 7207              	.LASF24:
+ 7208 0668 4442475F 		.string	"DBG_KFG"
+ 7208      4B464700 
+ 7209              	.LASF308:
+ 7210 0670 72634275 		.string	"rcBusy"
+ 7210      737900
+ 7211              	.LASF21:
+ 7212 0677 4442475F 		.string	"DBG_SRA"
+ 7212      53524100 
+ 7213              	.LASF371:
+ 7214 067f 4B436970 		.string	"KCipherVecAesNiDecryptEcb"
+ 7214      68657256 
+ 7214      65634165 
+ 7214      734E6944 
+ 7214      65637279 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 162
+
+
+ 7215              	.LASF266:
+ 7216 0699 72635472 		.string	"rcTransfer"
+ 7216      616E7366 
+ 7216      657200
+ 7217              	.LASF18:
+ 7218 06a4 4442475F 		.string	"DBG_KFS"
+ 7218      4B465300 
+ 7219              	.LASF221:
+ 7220 06ac 72635061 		.string	"rcPacking"
+ 7220      636B696E 
+ 7220      6700
+ 7221              	.LASF217:
+ 7222 06b6 7263436F 		.string	"rcCopying"
+ 7222      7079696E 
+ 7222      6700
+ 7223              	.LASF255:
+ 7224 06c0 72634964 		.string	"rcIdentifying"
+ 7224      656E7469 
+ 7224      6679696E 
+ 7224      6700
+ 7225              	.LASF391:
+ 7226 06ce 4B436970 		.string	"KCipherVecAesNi_vt_v1"
+ 7226      68657256 
+ 7226      65634165 
+ 7226      734E695F 
+ 7226      76745F76 
+ 7227              	.LASF60:
+ 7228 06e4 64656372 		.string	"decrypt_ecb"
+ 7228      7970745F 
+ 7228      65636200 
+ 7229              	.LASF224:
+ 7230 06f0 72634465 		.string	"rcDecoding"
+ 7230      636F6469 
+ 7230      6E6700
+ 7231              	.LASF152:
+ 7232 06fb 72634D65 		.string	"rcMemMap"
+ 7232      6D4D6170 
+ 7232      00
+ 7233              	.LASF197:
+ 7234 0704 7263556E 		.string	"rcUnlocking"
+ 7234      6C6F636B 
+ 7234      696E6700 
+ 7235              	.LASF280:
+ 7236 0710 72634974 		.string	"rcItem"
+ 7236      656D00
+ 7237              	.LASF82:
+ 7238 0717 4B426C6F 		.string	"KBlockCipherVec_vt_v1"
+ 7238      636B4369 
+ 7238      70686572 
+ 7238      5665635F 
+ 7238      76745F76 
+ 7239              	.LASF17:
+ 7240 072d 4442475F 		.string	"DBG_LEGREF"
+ 7240      4C454752 
+ 7240      454600
+ 7241              	.LASF345:
+ 7242 0738 6376696E 		.string	"cvin"
+
GAS LISTING /tmp/ccWvEaWW.s 			page 163
+
+
+ 7242      00
+ 7243              	.LASF198:
+ 7244 073d 72635265 		.string	"rcRenaming"
+ 7244      6E616D69 
+ 7244      6E6700
+ 7245              	.LASF351:
+ 7246 0748 75736572 		.string	"user_key"
+ 7246      5F6B6579 
+ 7246      00
+ 7247              	.LASF268:
+ 7248 0751 72634964 		.string	"rcId"
+ 7248      00
+ 7249              	.LASF181:
+ 7250 0756 7263436D 		.string	"rcCmd"
+ 7250      6400
+ 7251              	.LASF395:
+ 7252 075c 43697068 		.string	"CipherVecOut"
+ 7252      65725665 
+ 7252      634F7574 
+ 7252      00
+ 7253              	.LASF27:
+ 7254 0769 4442475F 		.string	"DBG_LOADLIB"
+ 7254      4C4F4144 
+ 7254      4C494200 
+ 7255              	.LASF320:
+ 7256 0775 7263556E 		.string	"rcUnlocked"
+ 7256      6C6F636B 
+ 7256      656400
+ 7257              	.LASF121:
+ 7258 0780 52434D6F 		.string	"RCModule"
+ 7258      64756C65 
+ 7258      00
+ 7259              	.LASF282:
+ 7260 0789 7263456E 		.string	"rcEncryption"
+ 7260      63727970 
+ 7260      74696F6E 
+ 7260      00
+ 7261              	.LASF317:
+ 7262 0796 72634578 		.string	"rcExists"
+ 7262      69737473 
+ 7262      00
+ 7263              	.LASF77:
+ 7264 079f 43697068 		.string	"CipherVec"
+ 7264      65725665 
+ 7264      6300
+ 7265              	.LASF59:
+ 7266 07a9 656E6372 		.string	"encrypt_ecb"
+ 7266      7970745F 
+ 7266      65636200 
+ 7267              	.LASF336:
+ 7268 07b5 72634F70 		.string	"rcOpen"
+ 7268      656E00
+ 7269              	.LASF322:
+ 7270 07bc 72634465 		.string	"rcDeadlock"
+ 7270      61646C6F 
+ 7270      636B00
+ 7271              	.LASF259:
+
GAS LISTING /tmp/ccWvEaWW.s 			page 164
+
+
+ 7272 07c7 72634C69 		.string	"rcLink"
+ 7272      6E6B00
+ 7273              	.LASF246:
+ 7274 07ce 7263466C 		.string	"rcFlushing"
+ 7274      75736869 
+ 7274      6E6700
+ 7275              	.LASF294:
+ 7276 07d9 72634E6F 		.string	"rcNoErr"
+ 7276      45727200 
+ 7277              	.LASF273:
+ 7278 07e1 72635461 		.string	"rcTag"
+ 7278      6700
+ 7279              	.LASF23:
+ 7280 07e7 4442475F 		.string	"DBG_ALIGN"
+ 7280      414C4947 
+ 7280      4E00
+ 7281              	.LASF237:
+ 7282 07f1 72634C6F 		.string	"rcLogging"
+ 7282      6767696E 
+ 7282      6700
+ 7283              	.LASF364:
+ 7284 07fb 4B436970 		.string	"KCipherVecAesNiEncryptV1Int"
+ 7284      68657256 
+ 7284      65634165 
+ 7284      734E6945 
+ 7284      6E637279 
+ 7285              	.LASF330:
+ 7286 0817 7263546F 		.string	"rcTooBig"
+ 7286      6F426967 
+ 7286      00
+ 7287              	.LASF174:
+ 7288 0820 72635665 		.string	"rcVector"
+ 7288      63746F72 
+ 7288      00
+ 7289              	.LASF209:
+ 7290 0829 72635265 		.string	"rcResizing"
+ 7290      73697A69 
+ 7290      6E6700
+ 7291              	.LASF183:
+ 7292 0834 72635175 		.string	"rcQuery"
+ 7292      65727900 
+ 7293              	.LASF8:
+ 7294 083c 6C6F6E67 		.string	"long unsigned int"
+ 7294      20756E73 
+ 7294      69676E65 
+ 7294      6420696E 
+ 7294      7400
+ 7295              	.LASF315:
+ 7296 084e 72634578 		.string	"rcExcessive"
+ 7296      63657373 
+ 7296      69766500 
+ 7297              	.LASF243:
+ 7298 085a 72634576 		.string	"rcEvaluating"
+ 7298      616C7561 
+ 7298      74696E67 
+ 7298      00
+ 7299              	.LASF180:
+
GAS LISTING /tmp/ccWvEaWW.s 			page 165
+
+
+ 7300 0867 7263526E 		.string	"rcRng"
+ 7300      6700
+ 7301              	.LASF188:
+ 7302 086d 72634361 		.string	"rcCasting"
+ 7302      7374696E 
+ 7302      6700
+ 7303              	.LASF349:
+ 7304 0877 73656C66 		.string	"self"
+ 7304      00
+ 7305              	.LASF148:
+ 7306 087c 72634974 		.string	"rcIterator"
+ 7306      65726174 
+ 7306      6F7200
+ 7307              	.LASF83:
+ 7308 0887 4B426C6F 		.string	"KBlockCipherVec"
+ 7308      636B4369 
+ 7308      70686572 
+ 7308      56656300 
+ 7309              	.LASF380:
+ 7310 0897 4B436970 		.string	"KCipherVecAesNiDecryptOfb"
+ 7310      68657256 
+ 7310      65634165 
+ 7310      734E6944 
+ 7310      65637279 
+ 7311              	.LASF387:
+ 7312 08b1 4B436970 		.string	"KCipherVecAesNiInitNull"
+ 7312      68657256 
+ 7312      65634165 
+ 7312      734E6949 
+ 7312      6E69744E 
+ 7313              	.LASF165:
+ 7314 08c9 72635374 		.string	"rcStorage"
+ 7314      6F726167 
+ 7314      6500
+ 7315              	.LASF383:
+ 7316 08d3 4B436970 		.string	"KCipherVecAesNiAllocAes"
+ 7316      68657256 
+ 7316      65634165 
+ 7316      734E6941 
+ 7316      6C6C6F63 
+ 7317              	.LASF68:
+ 7318 08eb 64656372 		.string	"decrypt_ofb"
+ 7318      7970745F 
+ 7318      6F666200 
+ 7319              	.LASF46:
+ 7320 08f7 626C6F63 		.string	"block_cipher"
+ 7320      6B5F6369 
+ 7320      70686572 
+ 7320      00
+ 7321              	.LASF369:
+ 7322 0904 626C6F63 		.string	"block_count"
+ 7322      6B5F636F 
+ 7322      756E7400 
+ 7323              	.LASF277:
+ 7324 0910 7263526F 		.string	"rcRow"
+ 7324      7700
+ 7325              	.LASF20:
+
GAS LISTING /tmp/ccWvEaWW.s 			page 166
+
+
+ 7326 0916 4442475F 		.string	"DBG_VDB"
+ 7326      56444200 
+ 7327              	.LASF93:
+ 7328 091e 6B636970 		.string	"kcipher_type"
+ 7328      6865725F 
+ 7328      74797065 
+ 7328      00
+ 7329              	.LASF177:
+ 7330 092b 72634C61 		.string	"rcLastTarget_v1_0"
+ 7330      73745461 
+ 7330      72676574 
+ 7330      5F76315F 
+ 7330      3000
+ 7331              	.LASF185:
+ 7332 093d 72634C61 		.string	"rcLastTarget_v1_1"
+ 7332      73745461 
+ 7332      72676574 
+ 7332      5F76315F 
+ 7332      3100
+ 7333              	.LASF164:
+ 7334 094f 72635365 		.string	"rcSemaphore"
+ 7334      6D617068 
+ 7334      6F726500 
+ 7335              	.LASF218:
+ 7336 095b 7263436F 		.string	"rcConcatenating"
+ 7336      6E636174 
+ 7336      656E6174 
+ 7336      696E6700 
+ 7337              	.LASF309:
+ 7338 096b 7263496E 		.string	"rcIncomplete"
+ 7338      636F6D70 
+ 7338      6C657465 
+ 7338      00
+ 7339              	.LASF338:
+ 7340 0978 72634E6F 		.string	"rcNotOpen"
+ 7340      744F7065 
+ 7340      6E00
+ 7341              	.LASF382:
+ 7342 0982 4B436970 		.string	"KCipherVecAesNiDecryptCtr"
+ 7342      68657256 
+ 7342      65634165 
+ 7342      734E6944 
+ 7342      65637279 
+ 7343              	.LASF147:
+ 7344 099c 7263496E 		.string	"rcIndex"
+ 7344      64657800 
+ 7345              	.LASF67:
+ 7346 09a4 656E6372 		.string	"encrypt_ofb"
+ 7346      7970745F 
+ 7346      6F666200 
+ 7347              	.LASF55:
+ 7348 09b0 7365745F 		.string	"set_encrypt_ctr_func"
+ 7348      656E6372 
+ 7348      7970745F 
+ 7348      6374725F 
+ 7348      66756E63 
+ 7349              	.LASF356:
+
GAS LISTING /tmp/ccWvEaWW.s 			page 167
+
+
+ 7350 09c5 4B436970 		.string	"KCipherVecAesNiSetEncryptIvec"
+ 7350      68657256 
+ 7350      65634165 
+ 7350      734E6953 
+ 7350      6574456E 
+ 7351              	.LASF22:
+ 7352 09e3 4442475F 		.string	"DBG_XARC"
+ 7352      58415243 
+ 7352      00
+ 7353              	.LASF392:
+ 7354 09ec 474E5520 		.string	"GNU C 4.4.2"
+ 7354      4320342E 
+ 7354      342E3200 
+ 7355              	.LASF357:
+ 7356 09f8 69766563 		.string	"ivec"
+ 7356      00
+ 7357              	.LASF100:
+ 7358 09fd 72635275 		.string	"rcRuntime"
+ 7358      6E74696D 
+ 7358      6500
+ 7359              	.LASF139:
+ 7360 0a07 7263586D 		.string	"rcXmlDoc"
+ 7360      6C446F63 
+ 7360      00
+ 7361              	.LASF72:
+ 7362 0a10 6C6F6E67 		.string	"long long int"
+ 7362      206C6F6E 
+ 7362      6720696E 
+ 7362      7400
+ 7363              	.LASF220:
+ 7364 0a1e 7263506F 		.string	"rcPositioning"
+ 7364      73697469 
+ 7364      6F6E696E 
+ 7364      6700
+ 7365              	.LASF34:
+ 7366 0a2c 636F756E 		.string	"counter"
+ 7366      74657200 
+ 7367              	.LASF70:
+ 7368 0a34 64656372 		.string	"decrypt_ctr"
+ 7368      7970745F 
+ 7368      63747200 
+ 7369              	.LASF94:
+ 7370 0a40 6B636970 		.string	"kcipher_null"
+ 7370      6865725F 
+ 7370      6E756C6C 
+ 7370      00
+ 7371              	.LASF151:
+ 7372 0a4d 72634D44 		.string	"rcMD5SumFmt"
+ 7372      3553756D 
+ 7372      466D7400 
+ 7373              	.LASF365:
+ 7374 0a59 4B436970 		.string	"KCipherVecAesNiDecryptV1Int"
+ 7374      68657256 
+ 7374      65634165 
+ 7374      734E6944 
+ 7374      65637279 
+ 7375              	.LASF202:
+
GAS LISTING /tmp/ccWvEaWW.s 			page 168
+
+
+ 7376 0a75 7263496E 		.string	"rcInserting"
+ 7376      73657274 
+ 7376      696E6700 
+ 7377              	.LASF250:
+ 7378 0a81 7263436F 		.string	"rcComparing"
+ 7378      6D706172 
+ 7378      696E6700 
+ 7379              	.LASF312:
+ 7380 0a8d 7263456D 		.string	"rcEmpty"
+ 7380      70747900 
+ 7381              	.LASF144:
+ 7382 0a95 7263466F 		.string	"rcFormatter"
+ 7382      726D6174 
+ 7382      74657200 
+ 7383              	.LASF75:
+ 7384 0aa1 646F7562 		.string	"double"
+ 7384      6C6500
+ 7385              	.LASF229:
+ 7386 0aa8 72635265 		.string	"rcRegistering"
+ 7386      67697374 
+ 7386      6572696E 
+ 7386      6700
+ 7387              	.LASF35:
+ 7388 0ab6 72656663 		.string	"refcount"
+ 7388      6F756E74 
+ 7388      00
+ 7389              	.LASF118:
+ 7390 0abf 72634E53 		.string	"rcNS"
+ 7390      00
+ 7391              	.LASF261:
+ 7392 0ac4 72635061 		.string	"rcParam"
+ 7392      72616D00 
+ 7393              	.LASF226:
+ 7394 0acc 72634578 		.string	"rcExecuting"
+ 7394      65637574 
+ 7394      696E6700 
+ 7395              	.LASF122:
+ 7396 0ad8 52435461 		.string	"RCTarget"
+ 7396      72676574 
+ 7396      00
+ 7397              	.LASF283:
+ 7398 0ae1 72634372 		.string	"rcCrc"
+ 7398      6300
+ 7399              	.LASF26:
+ 7400 0ae7 4442475F 		.string	"DBG_SEARCH"
+ 7400      53454152 
+ 7400      434800
+ 7401              	.LASF111:
+ 7402 0af2 7263584D 		.string	"rcXML"
+ 7402      4C00
+ 7403              	.LASF69:
+ 7404 0af8 656E6372 		.string	"encrypt_ctr"
+ 7404      7970745F 
+ 7404      63747200 
+ 7405              	.LASF28:
+ 7406 0b04 4442475F 		.string	"DBG_VFS"
+ 7406      56465300 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 169
+
+
+ 7407              	.LASF73:
+ 7408 0b0c 666C6F61 		.string	"float"
+ 7408      7400
+ 7409              	.LASF205:
+ 7410 0b12 72635570 		.string	"rcUpdating"
+ 7410      64617469 
+ 7410      6E6700
+ 7411              	.LASF232:
+ 7412 0b1d 7263436F 		.string	"rcConverting"
+ 7412      6E766572 
+ 7412      74696E67 
+ 7412      00
+ 7413              	.LASF64:
+ 7414 0b2a 64656372 		.string	"decrypt_pcbc"
+ 7414      7970745F 
+ 7414      70636263 
+ 7414      00
+ 7415              	.LASF97:
+ 7416 0b37 4B426C6F 		.string	"KBlockCipher"
+ 7416      636B4369 
+ 7416      70686572 
+ 7416      00
+ 7417              	.LASF175:
+ 7418 0b44 72634479 		.string	"rcDylib"
+ 7418      6C696200 
+ 7419              	.LASF324:
+ 7420 0b4c 72635265 		.string	"rcReadonly"
+ 7420      61646F6E 
+ 7420      6C7900
+ 7421              	.LASF7:
+ 7422 0b57 756E7369 		.string	"unsigned int"
+ 7422      676E6564 
+ 7422      20696E74 
+ 7422      00
+ 7423              	.LASF325:
+ 7424 0b64 72635772 		.string	"rcWriteonly"
+ 7424      6974656F 
+ 7424      6E6C7900 
+ 7425              	.LASF47:
+ 7426 0b70 4B436970 		.string	"KCipher_vt"
+ 7426      6865725F 
+ 7426      767400
+ 7427              	.LASF319:
+ 7428 0b7b 72634C6F 		.string	"rcLocked"
+ 7428      636B6564 
+ 7428      00
+ 7429              	.LASF201:
+ 7430 0b84 72635072 		.string	"rcProjecting"
+ 7430      6F6A6563 
+ 7430      74696E67 
+ 7430      00
+ 7431              	.LASF106:
+ 7432 0b91 72635053 		.string	"rcPS"
+ 7432      00
+ 7433              	.LASF291:
+ 7434 0b96 72635265 		.string	"rcRefcount"
+ 7434      66636F75 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 170
+
+
+ 7434      6E7400
+ 7435              	.LASF126:
+ 7436 0ba1 7263546F 		.string	"rcTocEntry"
+ 7436      63456E74 
+ 7436      727900
+ 7437              	.LASF281:
+ 7438 0bac 72634D6F 		.string	"rcMode"
+ 7438      646500
+ 7439              	.LASF350:
+ 7440 0bb3 4B436970 		.string	"KCipherVecAesNiSetEncryptKey"
+ 7440      68657256 
+ 7440      65634165 
+ 7440      734E6953 
+ 7440      6574456E 
+ 7441              	.LASF340:
+ 7442 0bd0 7263556E 		.string	"rcUnequal"
+ 7442      65717561 
+ 7442      6C00
+ 7443              	.LASF321:
+ 7444 0bda 72634465 		.string	"rcDetached"
+ 7444      74616368 
+ 7444      656400
+ 7445              	.LASF327:
+ 7446 0be5 7263496E 		.string	"rcInPlaceNotAllowed"
+ 7446      506C6163 
+ 7446      654E6F74 
+ 7446      416C6C6F 
+ 7446      77656400 
+ 7447              	.LASF269:
+ 7448 0bf9 72635261 		.string	"rcRange"
+ 7448      6E676500 
+ 7449              	.LASF394:
+ 7450 0c01 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 7450      652F726F 
+ 7450      6461726D 
+ 7450      65722F73 
+ 7450      72615F73 
+ 7451              	.LASF279:
+ 7452 0c49 72634C61 		.string	"rcLastObject_v1_0"
+ 7452      73744F62 
+ 7452      6A656374 
+ 7452      5F76315F 
+ 7452      3000
+ 7453              	.LASF292:
+ 7454 0c5b 72634C61 		.string	"rcLastObject_v1_1"
+ 7454      73744F62 
+ 7454      6A656374 
+ 7454      5F76315F 
+ 7454      3100
+ 7455              	.LASF386:
+ 7456 0c6d 4B436970 		.string	"KCipherVecAesNiAllocNull"
+ 7456      68657256 
+ 7456      65634165 
+ 7456      734E6941 
+ 7456      6C6C6F63 
+ 7457              	.LASF98:
+ 7458 0c86 62797465 		.string	"byte"
+
GAS LISTING /tmp/ccWvEaWW.s 			page 171
+
+
+ 7458      00
+ 7459              	.LASF314:
+ 7460 0c8b 7263496E 		.string	"rcInsufficient"
+ 7460      73756666 
+ 7460      69636965 
+ 7460      6E7400
+ 7461              	.LASF245:
+ 7462 0c9a 72634C61 		.string	"rcLastContext_v1_0"
+ 7462      7374436F 
+ 7462      6E746578 
+ 7462      745F7631 
+ 7462      5F3000
+ 7463              	.LASF256:
+ 7464 0cad 72634C61 		.string	"rcLastContext_v1_1"
+ 7464      7374436F 
+ 7464      6E746578 
+ 7464      745F7631 
+ 7464      5F3100
+ 7465              	.LASF39:
+ 7466 0cc0 64656372 		.string	"decrypt_key"
+ 7466      7970745F 
+ 7466      6B657900 
+ 7467              	.LASF176:
+ 7468 0ccc 72634578 		.string	"rcExpression"
+ 7468      70726573 
+ 7468      73696F6E 
+ 7468      00
+ 7469              	.LASF222:
+ 7470 0cd9 7263556E 		.string	"rcUnpacking"
+ 7470      7061636B 
+ 7470      696E6700 
+ 7471              	.LASF138:
+ 7472 0ce5 7263446F 		.string	"rcDoc"
+ 7472      6300
+ 7473              	.LASF13:
+ 7474 0ceb 4442475F 		.string	"DBG_APP"
+ 7474      41505000 
+ 7475              	.LASF239:
+ 7476 0cf3 72634D75 		.string	"rcMultiplexing"
+ 7476      6C746970 
+ 7476      6C657869 
+ 7476      6E6700
+ 7477              	.LASF241:
+ 7478 0d02 72635365 		.string	"rcSearching"
+ 7478      61726368 
+ 7478      696E6700 
+ 7479              	.LASF341:
+ 7480 0d0e 72634661 		.string	"rcFailed"
+ 7480      696C6564 
+ 7480      00
+ 7481              	.LASF48:
+ 7482 0d17 4B436970 		.string	"KCipher_vt_v1"
+ 7482      6865725F 
+ 7482      76745F76 
+ 7482      3100
+ 7483              	.LASF306:
+ 7484 0d25 7263496E 		.string	"rcIncorrect"
+
GAS LISTING /tmp/ccWvEaWW.s 			page 172
+
+
+ 7484      636F7272 
+ 7484      65637400 
+ 7485              	.LASF145:
+ 7486 0d31 72634675 		.string	"rcFunctParam"
+ 7486      6E637450 
+ 7486      6172616D 
+ 7486      00
+ 7487              	.LASF366:
+ 7488 0d3e 4B436970 		.string	"KCipherVecAesNiEncrypt"
+ 7488      68657256 
+ 7488      65634165 
+ 7488      734E6945 
+ 7488      6E637279 
+ 7489              	.LASF38:
+ 7490 0d55 656E6372 		.string	"encrypt_key"
+ 7490      7970745F 
+ 7490      6B657900 
+ 7491              	.LASF270:
+ 7492 0d61 7263436F 		.string	"rcConstraint"
+ 7492      6E737472 
+ 7492      61696E74 
+ 7492      00
+ 7493              	.LASF216:
+ 7494 0d6e 72634672 		.string	"rcFreezing"
+ 7494      65657A69 
+ 7494      6E6700
+ 7495              	.LASF296:
+ 7496 0d79 7263556E 		.string	"rcUnknown"
+ 7496      6B6E6F77 
+ 7496      6E00
+ 7497              	.LASF135:
+ 7498 0d83 72634375 		.string	"rcCursor"
+ 7498      72736F72 
+ 7498      00
+ 7499              	.LASF293:
+ 7500 0d8c 52435374 		.string	"RCState"
+ 7500      61746500 
+ 7501              	.LASF81:
+ 7502 0d94 4B426C6F 		.string	"KBlockCipherByte"
+ 7502      636B4369 
+ 7502      70686572 
+ 7502      42797465 
+ 7502      00
+ 7503              	.LASF141:
+ 7504 0da5 72634669 		.string	"rcFileDesc"
+ 7504      6C654465 
+ 7504      736300
+ 7505              	.LASF79:
+ 7506 0db0 4B426C6F 		.string	"KBlockCipherByte_vt_v1"
+ 7506      636B4369 
+ 7506      70686572 
+ 7506      42797465 
+ 7506      5F76745F 
+ 7507              	.LASF333:
+ 7508 0dc7 72634967 		.string	"rcIgnored"
+ 7508      6E6F7265 
+ 7508      6400
+
GAS LISTING /tmp/ccWvEaWW.s 			page 173
+
+
+ 7509              	.LASF90:
+ 7510 0dd1 655F6976 		.string	"e_ivec"
+ 7510      656300
+ 7511              	.LASF191:
+ 7512 0dd8 72635265 		.string	"rcReleasing"
+ 7512      6C656173 
+ 7512      696E6700 
+ 7513              	.LASF114:
+ 7514 0de4 72634B46 		.string	"rcKFG"
+ 7514      4700
+ 7515              	.LASF272:
+ 7516 0dea 72634D65 		.string	"rcMessage"
+ 7516      73736167 
+ 7516      6500
+ 7517              	.LASF219:
+ 7518 0df4 7263466F 		.string	"rcFormatting"
+ 7518      726D6174 
+ 7518      74696E67 
+ 7518      00
+ 7519              	.LASF112:
+ 7520 0e01 72635352 		.string	"rcSRA"
+ 7520      4100
+ 7521              	.LASF288:
+ 7522 0e07 7263456E 		.string	"rcEnvironment"
+ 7522      7669726F 
+ 7522      6E6D656E 
+ 7522      7400
+ 7523              	.LASF74:
+ 7524 0e15 6C6F6E67 		.string	"long long unsigned int"
+ 7524      206C6F6E 
+ 7524      6720756E 
+ 7524      7369676E 
+ 7524      65642069 
+ 7525              	.LASF50:
+ 7526 0e2c 64657374 		.string	"destroy"
+ 7526      726F7900 
+ 7527              	.LASF170:
+ 7528 0e34 7263546F 		.string	"rcToken"
+ 7528      6B656E00 
+ 7529              	.LASF230:
+ 7530 0e3c 7263546F 		.string	"rcTokenizing"
+ 7530      6B656E69 
+ 7530      7A696E67 
+ 7530      00
+ 7531              	.LASF16:
+ 7532 0e49 4442475F 		.string	"DBG_REF"
+ 7532      52454600 
+ 7533              	.LASF372:
+ 7534 0e51 4B436970 		.string	"KCipherVecAesNiEncryptCbc"
+ 7534      68657256 
+ 7534      65634165 
+ 7534      734E6945 
+ 7534      6E637279 
+ 7535              	.LASF211:
+ 7536 0e6b 72635772 		.string	"rcWriting"
+ 7536      6974696E 
+ 7536      6700
+
GAS LISTING /tmp/ccWvEaWW.s 			page 174
+
+
+ 7537              	.LASF187:
+ 7538 0e75 7263416C 		.string	"rcAllocating"
+ 7538      6C6F6361 
+ 7538      74696E67 
+ 7538      00
+ 7539              	.LASF173:
+ 7540 0e82 72635479 		.string	"rcType"
+ 7540      706500
+ 7541              	.LASF274:
+ 7542 0e89 72635265 		.string	"rcResources"
+ 7542      736F7572 
+ 7542      63657300 
+ 7543              	.LASF155:
+ 7544 0e95 72634E61 		.string	"rcNamelist"
+ 7544      6D656C69 
+ 7544      737400
+ 7545              	.LASF339:
+ 7546 0ea0 7263556E 		.string	"rcUndefined"
+ 7546      64656669 
+ 7546      6E656400 
+ 7547              	.LASF91:
+ 7548 0eac 645F6976 		.string	"d_ivec"
+ 7548      656300
+ 7549              	.LASF307:
+ 7550 0eb3 7263496E 		.string	"rcInconsistent"
+ 7550      636F6E73 
+ 7550      69737465 
+ 7550      6E7400
+ 7551              	.LASF252:
+ 7552 0ec2 72635265 		.string	"rcRetrieving"
+ 7552      74726965 
+ 7552      76696E67 
+ 7552      00
+ 7553              	.LASF58:
+ 7554 0ecf 64656372 		.string	"decrypt"
+ 7554      79707400 
+ 7555              	.LASF49:
+ 7556 0ed7 76657273 		.string	"version"
+ 7556      696F6E00 
+ 7557              	.LASF264:
+ 7558 0edf 72634E61 		.string	"rcName"
+ 7558      6D6500
+ 7559              	.LASF54:
+ 7560 0ee6 7365745F 		.string	"set_decrypt_ivec"
+ 7560      64656372 
+ 7560      7970745F 
+ 7560      69766563 
+ 7560      00
+ 7561              	.LASF301:
+ 7562 0ef7 72634E75 		.string	"rcNull"
+ 7562      6C6C00
+ 7563              	.LASF223:
+ 7564 0efe 7263456E 		.string	"rcEncoding"
+ 7564      636F6469 
+ 7564      6E6700
+ 7565              	.LASF142:
+ 7566 0f09 72634669 		.string	"rcFileFormat"
+
GAS LISTING /tmp/ccWvEaWW.s 			page 175
+
+
+ 7566      6C65466F 
+ 7566      726D6174 
+ 7566      00
+ 7567              	.LASF179:
+ 7568 0f16 7263456E 		.string	"rcEncryptionKey"
+ 7568      63727970 
+ 7568      74696F6E 
+ 7568      4B657900 
+ 7569              	.LASF244:
+ 7570 0f26 7263496E 		.string	"rcInflating"
+ 7570      666C6174 
+ 7570      696E6700 
+ 7571              	.LASF326:
+ 7572 0f32 72634E6F 		.string	"rcNoPerm"
+ 7572      5065726D 
+ 7572      00
+ 7573              	.LASF214:
+ 7574 0f3b 72635265 		.string	"rcResetting"
+ 7574      73657474 
+ 7574      696E6700 
+ 7575              	.LASF36:
+ 7576 0f47 626C6F63 		.string	"block_size"
+ 7576      6B5F7369 
+ 7576      7A6500
+ 7577              	.LASF162:
+ 7578 0f52 72635257 		.string	"rcRWLock"
+ 7578      4C6F636B 
+ 7578      00
+ 7579              	.LASF193:
+ 7580 0f5b 72634C69 		.string	"rcListing"
+ 7580      7374696E 
+ 7580      6700
+ 7581              	.LASF63:
+ 7582 0f65 656E6372 		.string	"encrypt_pcbc"
+ 7582      7970745F 
+ 7582      70636263 
+ 7582      00
+ 7583              	.LASF32:
+ 7584 0f72 4B526566 		.string	"KRefcount"
+ 7584      636F756E 
+ 7584      7400
+ 7585              	.LASF143:
+ 7586 0f7c 72634675 		.string	"rcFunction"
+ 7586      6E637469 
+ 7586      6F6E00
+ 7587              	.LASF88:
+ 7588 0f87 655F6B65 		.string	"e_key"
+ 7588      7900
+ 7589              	.LASF299:
+ 7590 0f8d 7263556E 		.string	"rcUnrecognized"
+ 7590      7265636F 
+ 7590      676E697A 
+ 7590      656400
+ 7591              	.LASF86:
+ 7592 0f9c 6E756D62 		.string	"number_of_rounds"
+ 7592      65725F6F 
+ 7592      665F726F 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 176
+
+
+ 7592      756E6473 
+ 7592      00
+ 7593              	.LASF115:
+ 7594 0fad 7263416C 		.string	"rcAlign"
+ 7594      69676E00 
+ 7595              	.LASF178:
+ 7596 0fb5 72635072 		.string	"rcProduction"
+ 7596      6F647563 
+ 7596      74696F6E 
+ 7596      00
+ 7597              	.LASF168:
+ 7598 0fc2 72635468 		.string	"rcThread"
+ 7598      72656164 
+ 7598      00
+ 7599              	.LASF37:
+ 7600 0fcb 6E616D65 		.string	"name"
+ 7600      00
+ 7601              	.LASF397:
+ 7602 0fd0 4B436970 		.string	"KCipherVecAesNiClassName"
+ 7602      68657256 
+ 7602      65634165 
+ 7602      734E6943 
+ 7602      6C617373 
+ 7603              	.LASF388:
+ 7604 0fe9 6E756C6C 		.string	"null"
+ 7604      00
+ 7605              	.LASF52:
+ 7606 0fee 7365745F 		.string	"set_decrypt_key"
+ 7606      64656372 
+ 7606      7970745F 
+ 7606      6B657900 
+ 7607              	.LASF370:
+ 7608 0ffe 706F7574 		.string	"pout"
+ 7608      00
+ 7609              	.LASF33:
+ 7610 1003 4B436970 		.string	"KCipher"
+ 7610      68657200 
+ 7611              	.LASF78:
+ 7612 100b 4B426C6F 		.string	"KBlockCipher_vt"
+ 7612      636B4369 
+ 7612      70686572 
+ 7612      5F767400 
+ 7613              	.LASF285:
+ 7614 101b 72635365 		.string	"rcSeed"
+ 7614      656400
+ 7615              	.LASF242:
+ 7616 1022 72634C6F 		.string	"rcLoading"
+ 7616      6164696E 
+ 7616      6700
+ 7617              	.LASF1:
+ 7618 102c 73686F72 		.string	"short int"
+ 7618      7420696E 
+ 7618      7400
+ 7619              	.LASF360:
+ 7620 1036 66756E63 		.string	"func"
+ 7620      00
+ 7621              	.LASF377:
+
GAS LISTING /tmp/ccWvEaWW.s 			page 177
+
+
+ 7622 103b 4B436970 		.string	"KCipherVecAesNiEncryptCfb"
+ 7622      68657256 
+ 7622      65634165 
+ 7622      734E6945 
+ 7622      6E637279 
+ 7623              	.LASF335:
+ 7624 1055 72634C61 		.string	"rcLastState_v1_0"
+ 7624      73745374 
+ 7624      6174655F 
+ 7624      76315F30 
+ 7624      00
+ 7625              	.LASF344:
+ 7626 1066 72634C61 		.string	"rcLastState_v1_1"
+ 7626      73745374 
+ 7626      6174655F 
+ 7626      76315F31 
+ 7626      00
+ 7627              	.LASF109:
+ 7628 1077 72635644 		.string	"rcVDB"
+ 7628      4200
+ 7629              	.LASF92:
+ 7630 107d 43697068 		.string	"CipherNull"
+ 7630      65724E75 
+ 7630      6C6C00
+ 7631              	.LASF51:
+ 7632 1088 7365745F 		.string	"set_encrypt_key"
+ 7632      656E6372 
+ 7632      7970745F 
+ 7632      6B657900 
+ 7633              	.LASF107:
+ 7634 1098 72635846 		.string	"rcXF"
+ 7634      00
+ 7635              	.LASF71:
+ 7636 109d 4B436970 		.string	"KCipher_ptr"
+ 7636      6865725F 
+ 7636      70747200 
+ 7637              	.LASF45:
+ 7638 10a9 4B436970 		.string	"KCipherVecAesNi"
+ 7638      68657256 
+ 7638      65634165 
+ 7638      734E6900 
+ 7639              	.LASF190:
+ 7640 10b9 72634465 		.string	"rcDestroying"
+ 7640      7374726F 
+ 7640      79696E67 
+ 7640      00
+ 7641              	.LASF295:
+ 7642 10c6 7263446F 		.string	"rcDone"
+ 7642      6E6500
+ 7643              	.LASF125:
+ 7644 10cd 7263546F 		.string	"rcToc"
+ 7644      6300
+ 7645              	.LASF43:
+ 7646 10d3 64656372 		.string	"decrypt_counter_func"
+ 7646      7970745F 
+ 7646      636F756E 
+ 7646      7465725F 
+
GAS LISTING /tmp/ccWvEaWW.s 			page 178
+
+
+ 7646      66756E63 
+ 7647              	.LASF199:
+ 7648 10e8 7263416C 		.string	"rcAliasing"
+ 7648      69617369 
+ 7648      6E6700
+ 7649              	.LASF160:
+ 7650 10f3 72635072 		.string	"rcProcess"
+ 7650      6F636573 
+ 7650      7300
+ 7651              	.LASF258:
+ 7652 10fd 72634E6F 		.string	"rcNoObj"
+ 7652      4F626A00 
+ 7653              	.LASF297:
+ 7654 1105 7263556E 		.string	"rcUnsupported"
+ 7654      73757070 
+ 7654      6F727465 
+ 7654      6400
+ 7655              	.LASF373:
+ 7656 1113 4B436970 		.string	"KCipherVecAesNiDecryptCbc"
+ 7656      68657256 
+ 7656      65634165 
+ 7656      734E6944 
+ 7656      65637279 
+ 7657              	.LASF361:
+ 7658 112d 4B436970 		.string	"KCipherVecAesNiSetDecryptCounterFunc"
+ 7658      68657256 
+ 7658      65634165 
+ 7658      734E6953 
+ 7658      65744465 
+ 7659              	.LASF236:
+ 7660 1152 72634465 		.string	"rcDetaching"
+ 7660      74616368 
+ 7660      696E6700 
+ 7661              	.LASF133:
+ 7662 115e 7263436F 		.string	"rcColumn"
+ 7662      6C756D6E 
+ 7662      00
+ 7663              	.LASF42:
+ 7664 1167 656E6372 		.string	"encrypt_counter_func"
+ 7664      7970745F 
+ 7664      636F756E 
+ 7664      7465725F 
+ 7664      66756E63 
+ 7665              	.LASF298:
+ 7666 117c 7263556E 		.string	"rcUnexpected"
+ 7666      65787065 
+ 7666      63746564 
+ 7666      00
+ 7667              	.LASF62:
+ 7668 1189 64656372 		.string	"decrypt_cbc"
+ 7668      7970745F 
+ 7668      63626300 
+ 7669              	.LASF6:
+ 7670 1195 75696E74 		.string	"uint32_t"
+ 7670      33325F74 
+ 7670      00
+ 7671              	.LASF119:
+
GAS LISTING /tmp/ccWvEaWW.s 			page 179
+
+
+ 7672 119e 72635646 		.string	"rcVFS"
+ 7672      5300
+ 7673              	.LASF25:
+ 7674 11a4 4442475F 		.string	"DBG_KRYPTO"
+ 7674      4B525950 
+ 7674      544F00
+ 7675              	.LASF343:
+ 7676 11af 72635772 		.string	"rcWrongType"
+ 7676      6F6E6754 
+ 7676      79706500 
+ 7677              	.LASF278:
+ 7678 11bb 72634C69 		.string	"rcLibrary"
+ 7678      62726172 
+ 7678      7900
+ 7679              	.LASF311:
+ 7680 11c5 72634361 		.string	"rcCanceled"
+ 7680      6E63656C 
+ 7680      656400
+ 7681              	.LASF182:
+ 7682 11d0 72634461 		.string	"rcData"
+ 7682      746100
+ 7683              	.LASF146:
+ 7684 11d7 72634865 		.string	"rcHeader"
+ 7684      61646572 
+ 7684      00
+ 7685              	.LASF4:
+ 7686 11e0 73686F72 		.string	"short unsigned int"
+ 7686      7420756E 
+ 7686      7369676E 
+ 7686      65642069 
+ 7686      6E7400
+ 7687              	.LASF136:
+ 7688 11f3 72634461 		.string	"rcDatabase"
+ 7688      74616261 
+ 7688      736500
+ 7689              	.LASF61:
+ 7690 11fe 656E6372 		.string	"encrypt_cbc"
+ 7690      7970745F 
+ 7690      63626300 
+ 7691              	.LASF212:
+ 7692 120a 7263436F 		.string	"rcCommitting"
+ 7692      6D6D6974 
+ 7692      74696E67 
+ 7692      00
+ 7693              	.LASF240:
+ 7694 1217 7263436C 		.string	"rcClassifying"
+ 7694      61737369 
+ 7694      6679696E 
+ 7694      6700
+ 7695              	.LASF171:
+ 7696 1225 72635472 		.string	"rcTree"
+ 7696      656500
+ 7697              	.LASF41:
+ 7698 122c 64656372 		.string	"decrypt_ivec"
+ 7698      7970745F 
+ 7698      69766563 
+ 7698      00
+
GAS LISTING /tmp/ccWvEaWW.s 			page 180
+
+
+ 7699              	.LASF30:
+ 7700 1239 4442475F 		.string	"DBG_ARGS"
+ 7700      41524753 
+ 7700      00
+ 7701              	.LASF200:
+ 7702 1242 72635365 		.string	"rcSelecting"
+ 7702      6C656374 
+ 7702      696E6700 
+ 7703              	.LASF101:
+ 7704 124e 72635465 		.string	"rcText"
+ 7704      787400
+ 7705              	.LASF337:
+ 7706 1255 72634F75 		.string	"rcOutoforder"
+ 7706      746F666F 
+ 7706      72646572 
+ 7706      00
+ 7707              	.LASF304:
+ 7708 1262 7263496E 		.string	"rcInvalid"
+ 7708      76616C69 
+ 7708      6400
+ 7709              	.LASF251:
+ 7710 126c 7263496E 		.string	"rcInitializing"
+ 7710      69746961 
+ 7710      6C697A69 
+ 7710      6E6700
+ 7711              	.LASF130:
+ 7712 127b 7263426C 		.string	"rcBlob"
+ 7712      6F6200
+ 7713              	.LASF53:
+ 7714 1282 7365745F 		.string	"set_encrypt_ivec"
+ 7714      656E6372 
+ 7714      7970745F 
+ 7714      69766563 
+ 7714      00
+ 7715              	.LASF374:
+ 7716 1293 74656D70 		.string	"temp"
+ 7716      00
+ 7717              	.LASF228:
+ 7718 1298 72635265 		.string	"rcReindexing"
+ 7718      696E6465 
+ 7718      78696E67 
+ 7718      00
+ 7719              	.LASF123:
+ 7720 12a5 72634E6F 		.string	"rcNoTarg"
+ 7720      54617267 
+ 7720      00
+ 7721              	.LASF305:
+ 7722 12ae 7263436F 		.string	"rcCorrupt"
+ 7722      72727570 
+ 7722      7400
+ 7723              	.LASF334:
+ 7724 12b8 72634F75 		.string	"rcOutofrange"
+ 7724      746F6672 
+ 7724      616E6765 
+ 7724      00
+ 7725              	.LASF163:
+ 7726 12c5 72635363 		.string	"rcSchema"
+
GAS LISTING /tmp/ccWvEaWW.s 			page 181
+
+
+ 7726      68656D61 
+ 7726      00
+ 7727              	.LASF159:
+ 7728 12ce 72635061 		.string	"rcPath"
+ 7728      746800
+ 7729              	.LASF210:
+ 7730 12d5 72635265 		.string	"rcReading"
+ 7730      6164696E 
+ 7730      6700
+ 7731              	.LASF80:
+ 7732 12df 6B65795F 		.string	"key_size"
+ 7732      73697A65 
+ 7732      00
+ 7733              	.LASF342:
+ 7734 12e8 72634E6F 		.string	"rcNotAvailable"
+ 7734      74417661 
+ 7734      696C6162 
+ 7734      6C6500
+ 7735              	.LASF375:
+ 7736 12f7 4B436970 		.string	"KCipherVecAesNiEncryptPcbc"
+ 7736      68657256 
+ 7736      65634165 
+ 7736      734E6945 
+ 7736      6E637279 
+ 7737              	.LASF300:
+ 7738 1312 7263416D 		.string	"rcAmbiguous"
+ 7738      62696775 
+ 7738      6F757300 
+ 7739              		.ident	"GCC: (GNU) 4.4.2"
+ 7740              		.section	.note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/ccWvEaWW.s 			page 182
+
+
+DEFINED SYMBOLS
+                            *ABS*:0000000000000000 cipher-vec.c
+     /tmp/ccWvEaWW.s:14     .rodata:0000000000000000 KCipherVecAesNiClassName
+     /tmp/ccWvEaWW.s:18     .text:0000000000000000 CipherVecIn
+     /tmp/ccWvEaWW.s:49     .text:000000000000001f CipherVecOut
+     /tmp/ccWvEaWW.s:81     .text:0000000000000048 KCipherVecAesNiDestroy
+     /tmp/ccWvEaWW.s:129    .text:0000000000000082 KCipherVecAesNiSetEncryptKey
+     /tmp/ccWvEaWW.s:2006   .rodata:0000000000000330 __PRETTY_FUNCTION__.7296
+     /tmp/ccWvEaWW.s:2011   .rodata:0000000000000350 __func__.7298
+     /tmp/ccWvEaWW.s:214    .text:000000000000016c KCipherVecAesNiSetDecryptKey
+     /tmp/ccWvEaWW.s:1996   .rodata:00000000000002f0 __PRETTY_FUNCTION__.7320
+     /tmp/ccWvEaWW.s:2001   .rodata:0000000000000310 __func__.7322
+     /tmp/ccWvEaWW.s:303    .text:0000000000000256 KCipherVecAesNiSetEncryptIvec
+     /tmp/ccWvEaWW.s:1991   .rodata:00000000000002d0 __PRETTY_FUNCTION__.7342
+     /tmp/ccWvEaWW.s:354    .text:00000000000002d9 KCipherVecAesNiSetDecryptIvec
+     /tmp/ccWvEaWW.s:1986   .rodata:00000000000002b0 __PRETTY_FUNCTION__.7355
+     /tmp/ccWvEaWW.s:409    .text:000000000000035c KCipherVecAesNiSetEncryptCounterFunc
+     /tmp/ccWvEaWW.s:1981   .rodata:0000000000000280 __PRETTY_FUNCTION__.7368
+     /tmp/ccWvEaWW.s:454    .text:00000000000003cb KCipherVecAesNiSetDecryptCounterFunc
+     /tmp/ccWvEaWW.s:1976   .rodata:0000000000000240 __PRETTY_FUNCTION__.7378
+     /tmp/ccWvEaWW.s:499    .text:000000000000043a KCipherVecAesNiEncryptV1
+     /tmp/ccWvEaWW.s:527    .text:0000000000000461 KCipherVecAesNiDecryptV1
+     /tmp/ccWvEaWW.s:555    .text:0000000000000488 KCipherVecAesNiEncryptV1Int
+     /tmp/ccWvEaWW.s:595    .text:00000000000004db KCipherVecAesNiDecryptV1Int
+     /tmp/ccWvEaWW.s:635    .text:000000000000052e KCipherVecAesNiEncrypt
+     /tmp/ccWvEaWW.s:1966   .rodata:00000000000001f0 __func__.7428
+     /tmp/ccWvEaWW.s:684    .text:0000000000000592 KCipherVecAesNiDecrypt
+     /tmp/ccWvEaWW.s:1956   .rodata:00000000000001b0 __func__.7444
+     /tmp/ccWvEaWW.s:735    .text:00000000000005fd KCipherVecAesNiEncryptEcb
+     /tmp/ccWvEaWW.s:791    .text:000000000000066d KCipherVecAesNiDecryptEcb
+     /tmp/ccWvEaWW.s:847    .text:00000000000006dd KCipherVecAesNiEncryptCbc
+     /tmp/ccWvEaWW.s:929    .text:00000000000007ab KCipherVecAesNiDecryptCbc
+     /tmp/ccWvEaWW.s:1015   .text:000000000000087f KCipherVecAesNiEncryptPcbc
+     /tmp/ccWvEaWW.s:1102   .text:000000000000095c KCipherVecAesNiDecryptPcbc
+     /tmp/ccWvEaWW.s:1184   .text:0000000000000a22 KCipherVecAesNiEncryptCfb
+     /tmp/ccWvEaWW.s:1264   .text:0000000000000ae8 KCipherVecAesNiDecryptCfb
+     /tmp/ccWvEaWW.s:1344   .text:0000000000000bae KCipherVecAesNiEncryptOfb
+     /tmp/ccWvEaWW.s:1424   .text:0000000000000c74 KCipherVecAesNiDecryptOfb
+     /tmp/ccWvEaWW.s:1459   .text:0000000000000cad KCipherVecAesNiEncryptCtr
+     /tmp/ccWvEaWW.s:1946   .rodata:0000000000000170 __func__.7678
+     /tmp/ccWvEaWW.s:1488   .text:0000000000000ce3 KCipherVecAesNiDecryptCtr
+     /tmp/ccWvEaWW.s:1936   .rodata:0000000000000130 __func__.7688
+     /tmp/ccWvEaWW.s:1520   .data.rel.local:0000000000000000 KCipherVecAesNi_vt_v1
+     /tmp/ccWvEaWW.s:1546   .text:0000000000000d19 KCipherVecAesNiAllocAes
+     /tmp/ccWvEaWW.s:1926   .rodata:00000000000000f0 __func__.7698
+     /tmp/ccWvEaWW.s:1588   .text:0000000000000d74 KCipherVecAesNiInitAes
+     /tmp/ccWvEaWW.s:1649   .text:0000000000000e12 KCipherVecAesNiAllocNull
+     /tmp/ccWvEaWW.s:1916   .rodata:00000000000000b0 __func__.7725
+     /tmp/ccWvEaWW.s:1691   .text:0000000000000e6d KCipherVecAesNiInitNull
+     /tmp/ccWvEaWW.s:1753   .text:0000000000000f02 KCipherVecAesNiMake
+     /tmp/ccWvEaWW.s:1906   .rodata:0000000000000070 __func__.7753
+     /tmp/ccWvEaWW.s:1911   .rodata:0000000000000090 __PRETTY_FUNCTION__.7752
+     /tmp/ccWvEaWW.s:1921   .rodata:00000000000000d0 __PRETTY_FUNCTION__.7724
+     /tmp/ccWvEaWW.s:1931   .rodata:0000000000000110 __PRETTY_FUNCTION__.7697
+     /tmp/ccWvEaWW.s:1941   .rodata:0000000000000150 __PRETTY_FUNCTION__.7687
+     /tmp/ccWvEaWW.s:1951   .rodata:0000000000000190 __PRETTY_FUNCTION__.7677
+     /tmp/ccWvEaWW.s:1961   .rodata:00000000000001d0 __PRETTY_FUNCTION__.7443
+
GAS LISTING /tmp/ccWvEaWW.s 			page 183
+
+
+     /tmp/ccWvEaWW.s:1971   .rodata:0000000000000210 __PRETTY_FUNCTION__.7427
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+KCipherDestroy
+free
+__assert_fail
+SetRCFileFuncLine
+memcpy
+calloc
+KCipherInit
+KNullBlockCipherVecAesNiMake
+KAESBlockCipherVecAesNiMake
diff --git a/libs/krypto/cipher-vec.c b/libs/krypto/cipher-vec.c
new file mode 100644
index 0000000..6b61c9e
--- /dev/null
+++ b/libs/krypto/cipher-vec.c
@@ -0,0 +1,808 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <krypto/extern.h>
+#include <klib/defs.h>
+
+/* CIPHER_IMPL and BLOCKCIPHER_IMPL are defined in this header */
+#include "ncbi-priv.h"
+/* CIPHER_IMPL is used in this header */
+#include "cipher-impl.h"
+/* BLOCKCIPHER_IMPL is used in this header */
+#include "blockcipher-impl.h"
+
+#include "aes-ncbi-priv.h"
+#include "null-ncbi-priv.h"
+#include "cipher-priv.h"
+#include "blockcipher-priv.h"
+
+#include <krypto/cipher.h>
+#include <krypto/ciphermgr.h>
+
+#include <klib/defs.h>
+#include <klib/refcount.h>
+#include <klib/out.h>
+#include <klib/rc.h>
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+const char CMEMBER(ClassName)[] = CLASS_STRING(CIPHER_IMPL);
+
+
+
+struct CIPHER_IMPL
+{
+    KCipher dad;
+    const KBlockCipherVec * block_cipher;
+};
+
+typedef union CipherVec_u
+{
+    CipherVec   vec;
+    CipherBlock block;
+} CipherVec_u;
+
+/*
+ * Read a blocks worth of bytes into an AESState
+ */
+static __inline__ CipherVec CipherVecIn (const void * cvin)
+{
+#if USE_VEC_REG
+    register CipherVec cv;
+
+    __asm__ (
+        "movdqu (%[a]),%[s]" : [s] "=x" (cv) : [a] "D" (cvin)
+        );
+
+    return cv;
+#else
+    CipherVec_u u;
+
+    memmove (&u.block, cvin, sizeof (u));
+    return u.vec;
+#endif
+}
+
+
+
+/*
+ * Write a block's worth of bytes out from an AESState
+ */
+static __inline__ void CipherVecOut (const CipherVec cv, void * cvout)
+{
+#if USE_VEC_REG
+    register CipherVec rcv = cv;
+
+    __asm__ (
+        "movdqu %[s],(%[a])" : : [s] "x" (rcv), [a] "D" (cvout)
+        );
+#else
+    CipherVec lcv = cv;
+    memmove (cvout, &lcv, sizeof (lcv));
+#endif
+}
+
+
+static rc_t CMEMBER(Destroy) (CIPHER_IMPL * self)
+{
+    rc_t rc = 0;
+
+    if (self)
+    {
+        rc =  KCipherDestroy (&self->dad);
+        free (self);
+    }
+    return rc;
+}
+
+
+static rc_t CMEMBER(SetEncryptKey)(CIPHER_IMPL * self,
+                                  const char * user_key,
+                                  uint32_t user_key_bits)
+{
+    rc_t rc = 0;
+
+    assert (self);
+    assert (user_key);
+    assert (user_key_bits);
+
+    switch (self->block_cipher->version.maj)
+    {
+    default:
+        rc = RC (rcKrypto, rcCipher, rcUpdating, rcBlockCipher, rcBadVersion);
+        break;
+
+    case 1:
+        self->block_cipher->v1.set_encrypt_key (self->dad.encrypt_key, user_key,
+                                                user_key_bits);
+        break;
+    }
+    return rc;
+}
+
+
+static rc_t CMEMBER(SetDecryptKey)(CIPHER_IMPL * self,
+                                  const char * user_key,
+                                  uint32_t user_key_bits)
+{
+    rc_t rc = 0;
+
+    assert (self);
+    assert (user_key);
+    assert (user_key_bits);
+
+    switch (self->block_cipher->version.maj)
+    {
+    default:
+        rc = RC (rcKrypto, rcCipher, rcUpdating, rcBlockCipher, rcBadVersion);
+        break;
+
+    case 1:
+        self->block_cipher->v1.set_decrypt_key (self->dad.decrypt_key, user_key,
+                                                    user_key_bits);
+        break;
+    }
+    return rc;
+}
+
+
+static
+rc_t CMEMBER(SetEncryptIvec) (CIPHER_IMPL * self,
+                             const void * ivec)
+{
+    assert (self);
+    assert (ivec);
+
+    memcpy (self->dad.encrypt_ivec, ivec, self->dad.block_size);
+
+    return 0;
+}
+
+
+static
+rc_t CMEMBER(SetDecryptIvec) (CIPHER_IMPL * self,
+                             const void * ivec)
+{
+    assert (self);
+    assert (ivec);
+
+    memcpy (self->dad.decrypt_ivec, ivec, self->dad.block_size);
+
+    return 0;
+}
+
+
+static
+rc_t CMEMBER(SetEncryptCounterFunc) (CIPHER_IMPL * self,
+                                    cipher_ctr_func func)
+{
+    assert (self);
+    assert (func);
+
+    self->dad.encrypt_counter_func = func;
+
+    return 0;
+}
+
+
+static
+rc_t CMEMBER(SetDecryptCounterFunc) (CIPHER_IMPL * self,
+                                    cipher_ctr_func func)
+{
+    assert (self);
+    assert (func);
+
+    self->dad.decrypt_counter_func = func;
+
+    return 0;
+}
+
+
+static __inline__ CipherVec CMEMBER(EncryptV1)(const CIPHER_IMPL * self,
+                                              register CipherVec cv)
+{
+    return self->block_cipher->v1.encrypt (cv, self->dad.encrypt_key);
+}
+
+
+static __inline__ CipherVec  CMEMBER(DecryptV1)(const CIPHER_IMPL * self,
+                                              register CipherVec cv)
+{
+    return self->block_cipher->v1.decrypt (cv, self->dad.decrypt_key);
+}
+
+
+static __inline__ rc_t CMEMBER(EncryptV1Int)(const CIPHER_IMPL * self,
+                                            const void * in, void * out)
+{
+    CipherVec cv;
+
+    cv = CipherVecIn(in);
+    cv = CMEMBER(EncryptV1)(self, cv);
+    CipherVecOut(cv, out);
+    return 0;
+}
+
+
+static __inline__ rc_t CMEMBER(DecryptV1Int)(const CIPHER_IMPL * self,
+                                            const void * in, void * out)
+{
+    CipherVec cv;
+
+    cv = CipherVecIn(in);
+    cv = CMEMBER(DecryptV1)(self, cv);
+    CipherVecOut(cv, out);
+    return 0;
+}
+
+
+static rc_t CMEMBER(Encrypt) (const CIPHER_IMPL * self, const void * in, void * out)
+{
+    rc_t rc;
+
+    switch (self->block_cipher->version.maj)
+    {
+    default:
+        rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+        break;
+
+    case 1:
+        rc = CMEMBER(EncryptV1Int)(self, in, out);
+        break;
+    }
+
+    return rc;
+}
+
+
+static
+rc_t CMEMBER(Decrypt) (const CIPHER_IMPL * self, const void * in, void * out)
+{
+    rc_t rc = 0;
+
+    switch (self->block_cipher->version.maj)
+    {
+    default:
+        rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+        break;
+
+    case 1:
+        rc = CMEMBER(DecryptV1Int)(self, in, out);
+        break;
+    }
+
+    return rc;
+}
+
+
+/* ====================
+ * longer runs of multiple blocks.
+ *
+ * The algorithms are well defined and standard in most cases
+ *
+ * These aremore or elss equivalent to class functions as they do not depend upon
+ * the operation of the cipher and the algorithms are independent of anything about
+ * the cipher other than its block size.
+ *
+ * PT: plain text block
+ * CT: cipher text block
+ * EK: encryption key
+ * DK: decryption key (might be sthe same as EK)
+ * ENC: encrypt cipher function on a block using a key
+ * DEC: decrypt cipher function on a block using a key
+ * IV: initialization vector - used as feedback for chaining
+ * N:  number used once (nonce)
+ * FB: feedback is the next IV in a chained/feedback mode
+ */
+
+
+/* -----
+ * NOTE:
+ * 'in' can be the same as 'out' but other overlaps are dangers as a block at a
+ * time is written. The code does not look for overlaps at this point.
+ */
+
+/* ----------
+ * Electronic Code Book - simple cipher with no chaining feedback  just iterate
+ * simple encrypt/decrypt with the plain, text, cipher text and key/
+ *
+ * CT = ENC (PT,EK)
+ * PT = DEC (CT,DK)
+ */
+
+/* -----
+ * NOTE: currently an implmentation detail limits us to 8192 bit cipher block
+ * size.  Changing MAX_BLOCK_SIZE in cipher.c can up that limit without 
+ * causing any other compatibility issues. 
+ *
+ * Two local byte arrays are defined on the stack of 1024 bytes or 8192 bits.
+ */
+static
+rc_t CMEMBER(EncryptEcb) (const CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+    const uint8_t * pin;
+    uint8_t * pout;
+
+    for ((pin = in), (pout = out);
+         block_count --; 
+         (pin += self->dad.block_size), (pout += self->dad.block_size))
+    {
+        CMEMBER(EncryptV1Int)(self, pin, pout);
+    }
+    return 0;
+}
+
+
+static
+rc_t CMEMBER(DecryptEcb) (const CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+    const uint8_t * pin;
+    uint8_t * pout;
+
+    for ((pin = in), (pout = out);
+         block_count --; 
+         (pin += self->dad.block_size), (pout += self->dad.block_size))
+    {
+        CMEMBER(DecryptV1Int)(self, pin, pout);
+    }
+
+    return 0;
+}
+
+
+/* ----------
+ * Cipher-Block Chaining
+ * CT = (FB = ENC (PT^IV, EK))
+ * PT = DEC ((FB = CT), DK)
+ */
+static
+rc_t CMEMBER(EncryptCbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+    CipherVec cv;
+    CipherVec ivec;
+    const uint8_t * pin;
+    uint8_t * pout;
+
+#if 0
+    ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+#else
+    ivec = CipherVecIn (self->dad.encrypt_ivec);
+#endif
+
+    for ((pin = in), (pout = out);
+         block_count --; 
+         (pin += self->dad.block_size), (pout += self->dad.block_size))
+    {
+        cv = CipherVecIn (pin);
+        cv ^= ivec;
+        ivec = CMEMBER(EncryptV1)(self, cv);
+        CipherVecOut (ivec, pout);
+    }
+
+#if 0
+    *(CipherVec*)self->dad.encrypt_ivec = ivec;
+#else
+    CipherVecOut (ivec, self->dad.encrypt_ivec);
+#endif
+
+    return 0;
+}    
+
+
+static
+rc_t CMEMBER(DecryptCbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+    CipherVec cv;
+    CipherVec ivec;
+    const uint8_t * pin;
+    uint8_t * pout;
+
+    ivec = CipherVecIn (self->dad.decrypt_ivec);
+
+    for ((pin = in), (pout = out);
+         block_count --; 
+         (pin += self->dad.block_size), (pout += self->dad.block_size))
+    {
+        CipherVec temp;
+
+        cv = CipherVecIn (pin);
+#if 0
+        temp = cv;
+        temp = CMEMBER(DecryptV1)(self, temp);
+#else
+        temp = CMEMBER(DecryptV1)(self, cv);
+#endif
+        temp ^= ivec;
+        CipherVecOut (temp, pout);
+        ivec = cv;
+    }
+
+    *(CipherVec*)self->dad.decrypt_ivec = ivec;
+    return 0;
+}
+
+
+/* ----------
+ * Propagating cipher-block chaining
+ * FB = PT ^ (CT = ENC ((PT^IV), EK))
+ * FB = CT ^ (PT = DEC (CT,DK) ^ IV)
+ */
+static
+rc_t CMEMBER(EncryptPcbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+#if 1
+    CipherVec cv;
+    CipherVec ivec;
+    const uint8_t * pin;
+    uint8_t * pout;
+
+    ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+
+    for ((pin = in), (pout = out);
+         block_count --; 
+         (pin += self->dad.block_size), (pout += self->dad.block_size))
+    {
+        CipherVec temp;
+
+        cv = CipherVecIn (pin);
+        temp = cv ^ ivec;
+        temp = CMEMBER(EncryptV1)(self, temp); 
+        ivec = cv ^ temp;
+        CipherVecOut (temp, pout);
+    }
+
+    *(CipherVec*)self->dad.encrypt_ivec = ivec;
+
+    return 0;
+#else
+    return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+#endif
+}
+
+
+static
+rc_t CMEMBER(DecryptPcbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+#if 1
+    CipherVec cv;
+    CipherVec ivec;
+    const uint8_t * pin;
+    uint8_t * pout;
+
+    ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+
+    for ((pin = in), (pout = out);
+         block_count --; 
+         (pin += self->dad.block_size), (pout += self->dad.block_size))
+    {
+        CipherVec temp;
+
+        cv = CipherVecIn (pin);
+        temp = CMEMBER(DecryptV1)(self, cv);
+        ivec ^= temp;
+        CipherVecOut (temp, pout);
+    }
+
+    *(CipherVec*)self->dad.encrypt_ivec = ivec;
+
+    return 0;
+#else
+    return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+#endif
+}
+
+
+/* ----------
+ * Cipher Feedback
+ * CT = (FB = PT) ^ ENC (IV, EK))
+ * PT = (FB = CT) ^ DEC (IV, DK)
+ */
+static
+rc_t CMEMBER(EncryptCfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+#if 1
+    CipherVec cv;
+    CipherVec ivec;
+    const uint8_t * pin;
+    uint8_t * pout;
+
+    ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+
+    for ((pin = in), (pout = out);
+         block_count --; 
+         (pin += self->dad.block_size), (pout += self->dad.block_size))
+    {
+        ivec = CMEMBER(EncryptV1)(self, ivec); 
+        cv = CipherVecIn (pin);
+        ivec ^= cv;
+        CipherVecOut (ivec, pout);
+    }
+
+    *(CipherVec*)self->dad.encrypt_ivec = ivec;
+
+    return 0;
+#else
+    return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+#endif
+}
+
+
+static
+rc_t CMEMBER(DecryptCfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+#if 1
+    CipherVec cv;
+    CipherVec ivec;
+    const uint8_t * pin;
+    uint8_t * pout;
+
+    ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+
+    for ((pin = in), (pout = out);
+         block_count --; 
+         (pin += self->dad.block_size), (pout += self->dad.block_size))
+    {
+        cv = CMEMBER(EncryptV1)(self, ivec); 
+        ivec = CipherVecIn (pin);
+        cv ^= ivec;
+        CipherVecOut (cv, pout);
+    }
+
+    *(CipherVec*)self->dad.encrypt_ivec = ivec;
+
+    return 0;
+#else
+    return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+#endif
+}
+
+
+/* ----------
+ * Output Feedback
+ * CT = PT ^ (FB = ENC (IV, EK))
+ * PT = CT ^ (FB = DEC (IV, DK))
+ */
+static
+rc_t CMEMBER(EncryptOfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+#if 1
+    CipherVec cv;
+    CipherVec ivec;
+    const uint8_t * pin;
+    uint8_t * pout;
+
+    ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+
+    for ((pin = in), (pout = out);
+         block_count --; 
+         (pin += self->dad.block_size), (pout += self->dad.block_size))
+    {
+        ivec = CMEMBER(EncryptV1)(self, ivec); 
+        cv = CipherVecIn (pin);
+        cv ^= ivec;
+        CipherVecOut (cv, pout);
+    }
+
+    *(CipherVec*)self->dad.encrypt_ivec = ivec;
+
+    return 0;
+#else
+    return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+#endif
+}
+
+
+static
+rc_t CMEMBER(DecryptOfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+    return CMEMBER(EncryptOfb)(self, in, out, block_count);
+}
+
+
+/* Counter
+ * IV is a nonce and not re-used as FB
+ * CT = PT ^ ENC (N, EK)
+ * PT = CT ^ ENC (N, DK) 
+ * Note decrypt is encrypt.
+ * nonce is a function that given an iv generates the next iv
+ */
+static
+rc_t CMEMBER(EncryptCtr) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+    return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+}
+
+
+static
+rc_t CMEMBER(DecryptCtr) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+{
+    return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+}
+
+static
+struct KCipher_vt_v1 CMEMBER(_vt_v1) =
+{
+    { 1, 0 },
+
+    CMEMBER(Destroy),
+    CMEMBER(SetEncryptKey),
+    CMEMBER(SetDecryptKey),
+    CMEMBER(SetEncryptIvec),
+    CMEMBER(SetDecryptIvec),
+    CMEMBER(SetEncryptCounterFunc),
+    CMEMBER(SetDecryptCounterFunc),
+    CMEMBER(Encrypt),
+    CMEMBER(Decrypt),
+    CMEMBER(EncryptEcb),
+    CMEMBER(DecryptEcb),
+    CMEMBER(EncryptCbc),
+    CMEMBER(DecryptCbc),
+    CMEMBER(EncryptPcbc),
+    CMEMBER(DecryptPcbc),
+    CMEMBER(EncryptCfb),
+    CMEMBER(DecryptCfb),
+    CMEMBER(EncryptOfb),
+    CMEMBER(DecryptOfb),
+    CMEMBER(EncryptCtr),
+    CMEMBER(DecryptCtr)
+};
+
+
+static __inline__
+rc_t CMEMBER(AllocAes)(CIPHER_IMPL ** pobj,
+                       const KBlockCipher * block_cipher)
+{
+    CipherAes * obj;
+
+    obj = calloc (1, sizeof (*obj));
+    *pobj = (CIPHER_IMPL*)obj;
+
+    return (obj ? 0 : RC (rcKrypto, rcCipher, rcConstructing, rcMemory, rcExhausted));
+}
+
+
+static __inline__
+rc_t CMEMBER(InitAes) (CIPHER_IMPL * self,
+                      const KBlockCipher * block_cipher)
+{
+    KCipher * dad = &self->dad;
+    CipherAes * aes = (struct CipherAes*)self;
+
+    KCipherInit (dad, sizeof (CipherVec),
+                 (const KCipher_vt*)&CMEMBER(_vt_v1),
+                 CMEMBER(ClassName));
+
+    dad->encrypt_key = &aes->e_key;
+    dad->decrypt_key = &aes->d_key;
+    dad->encrypt_ivec = &aes->e_ivec;
+    dad->decrypt_ivec = &aes->d_ivec;
+
+    self->block_cipher = &block_cipher->vec;
+
+    return 0;
+}
+
+
+static __inline__
+rc_t CMEMBER(AllocNull)(CIPHER_IMPL ** pobj,
+                        const KBlockCipher * block_cipher)
+{
+    CipherNull * obj;
+
+    obj = calloc (1, sizeof (*obj));
+    *pobj = (CIPHER_IMPL*)obj;
+
+    return (obj ? 0 : RC (rcKrypto, rcCipher, rcConstructing, rcMemory, rcExhausted));
+}
+
+
+static __inline__
+rc_t CMEMBER(InitNull) (CIPHER_IMPL * self,
+                        const KBlockCipher * block_cipher)
+{
+    KCipher * dad = &self->dad;
+    CipherNull * null = (CipherNull*)self;
+
+    KCipherInit (dad, sizeof (CipherVec),
+                 (const KCipher_vt*)&CMEMBER(_vt_v1),
+                 CMEMBER(ClassName));
+
+    dad->encrypt_key = &null->e_ivec;
+    dad->decrypt_key = &null->d_ivec;
+    dad->encrypt_ivec = &null->e_ivec;
+    dad->decrypt_ivec = &null->d_ivec;
+
+    self->block_cipher = &block_cipher->vec;
+
+    return 0;
+}
+
+
+rc_t CMEMBER(Make) (KCipher ** new_obj, kcipher_type type)
+{
+    rc_t rc;
+    KBlockCipher * block_cipher;
+
+    if (new_obj == NULL)
+        return RC (rcKrypto, rcCipher, rcConstructing, rcSelf, rcNull);
+
+    *new_obj = NULL;
+
+    switch (type)
+    {
+    default:
+        return RC (rcKrypto, rcCipher, rcConstructing, rcParam, rcInvalid);
+
+    case kcipher_null:
+        rc = NULLBCMEMBER(Make)(&block_cipher);
+        break;
+
+    case kcipher_AES:
+        rc = AESBCMEMBER(Make)(&block_cipher);
+        break;
+    }
+
+    if (rc == 0)
+    {
+        CIPHER_IMPL * obj;
+
+        switch (type)
+        {
+        case kcipher_null:
+            rc = CMEMBER(AllocNull) (&obj, block_cipher);
+            if (rc == 0)
+            {
+                rc = CMEMBER(InitNull) (obj, block_cipher);
+                if (rc == 0)
+                    *new_obj = (KCipher*)obj;
+                else
+                    free (obj);
+            }
+            break;
+        case kcipher_AES:
+            rc = CMEMBER(AllocAes) (&obj, block_cipher);
+            if (rc == 0)
+            {
+                rc = CMEMBER(InitAes) (obj, block_cipher);
+                if (rc == 0)
+                    *new_obj = (KCipher*)obj;
+                else
+                    free (obj);
+            }
+        default:
+            /* can't really get here */
+            break;
+        }
+    }
+    return rc;
+}
+
+
+/* EOF */
diff --git a/libs/krypto/cipher-vec.vec.pic.o.list b/libs/krypto/cipher-vec.vec.pic.o.list
new file mode 100644
index 0000000..90554b0
--- /dev/null
+++ b/libs/krypto/cipher-vec.vec.pic.o.list
@@ -0,0 +1,10959 @@
+GAS LISTING /tmp/ccq6ONvw.s 			page 1
+
+
+   1              		.file	"cipher-vec.c"
+   2              		.section	.debug_abbrev,"", at progbits
+   3              	.Ldebug_abbrev0:
+   4              		.section	.debug_info,"", at progbits
+   5              	.Ldebug_info0:
+   6              		.section	.debug_line,"", at progbits
+   7              	.Ldebug_line0:
+   8 0000 DE030000 		.text
+   8      0200F201 
+   8      00000101 
+   8      FB0E0D00 
+   8      01010101 
+   9              	.Ltext0:
+  10              	.globl KCipherVecClassName
+  11              		.section	.rodata
+  12              		.type	KCipherVecClassName, @object
+  13              		.size	KCipherVecClassName, 12
+  14              	KCipherVecClassName:
+  15 0000 43495048 		.string	"CIPHER_IMPL"
+  15      45525F49 
+  15      4D504C00 
+  16              		.text
+  17              		.type	CipherVecIn, @function
+  18              	CipherVecIn:
+  19              	.LFB508:
+  20              		.file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c"
+   1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /*===========================================================================
+   2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+   3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *                            PUBLIC DOMAIN NOTICE
+   4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *               National Center for Biotechnology Information
+   5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+   6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  This software/database is a "United States Government Work" under the
+   7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  terms of the United States Copyright Act.  It was written as part of
+   8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  the author's official duties as a United States Government employee and
+   9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  thus cannot be copyrighted.  This software/database is freely available
+  10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  to the public for use. The National Library of Medicine and the U.S.
+  11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  Government have not placed any restriction on its use or reproduction.
+  12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+  13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  Although all reasonable efforts have been taken to ensure the accuracy
+  14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  and reliability of the software and data, the NLM and the U.S.
+  15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  Government do not and cannot warrant the performance or results that
+  16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  may be obtained by using this software or data. The NLM and the U.S.
+  17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  Government disclaim all warranties, express or implied, including
+  18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  warranties of performance, merchantability or fitness for any particular
+  19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  purpose.
+  20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+  21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  Please cite the author in any work or product based on this material.
+  22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+  23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * ===========================================================================
+  24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+  25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <krypto/extern.h>
+  27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/defs.h>
+  28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* CIPHER_IMPL and BLOCKCIPHER_IMPL are defined in this header */
+  30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "ncbi-priv.h"
+  31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* CIPHER_IMPL is used in this header */
+
GAS LISTING /tmp/ccq6ONvw.s 			page 2
+
+
+  32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "cipher-impl.h"
+  33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* BLOCKCIPHER_IMPL is used in this header */
+  34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "blockcipher-impl.h"
+  35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "aes-ncbi-priv.h"
+  37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "null-ncbi-priv.h"
+  38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "cipher-priv.h"
+  39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "blockcipher-priv.h"
+  40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <krypto/cipher.h>
+  42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <krypto/ciphermgr.h>
+  43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/defs.h>
+  45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/refcount.h>
+  46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/out.h>
+  47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/rc.h>
+  48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <sysalloc.h>
+  50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <stdlib.h>
+  52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <string.h>
+  53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <assert.h>
+  54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const char CMEMBER(ClassName)[] = CLASS_STRING(CIPHER_IMPL);
+  57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  58:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  59:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  60:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** struct CIPHER_IMPL
+  61:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+  62:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     KCipher dad;
+  63:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const KBlockCipherVec * block_cipher;
+  64:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** };
+  65:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  66:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** typedef union CipherVec_u
+  67:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+  68:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec   vec;
+  69:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherBlock block;
+  70:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** } CipherVec_u;
+  71:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  72:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /*
+  73:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Read a blocks worth of bytes into an AESState
+  74:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+  75:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ CipherVec CipherVecIn (const void * cvin)
+  76:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+  21              		.loc 1 76 0
+  22              		.cfi_startproc
+  23 0000 55       		pushq	%rbp
+  24              	.LCFI0:
+  25              		.cfi_def_cfa_offset 16
+  26 0001 4889E5   		movq	%rsp, %rbp
+  27              		.cfi_offset 6, -16
+  28              	.LCFI1:
+  29              		.cfi_def_cfa_register 6
+  30 0004 4883EC20 		subq	$32, %rsp
+  31 0008 48897DE8 		movq	%rdi, -24(%rbp)
+  77:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if USE_VEC_REG
+
GAS LISTING /tmp/ccq6ONvw.s 			page 3
+
+
+  78:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     register CipherVec cv;
+  79:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  80:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     __asm__ (
+  81:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         "movdqu (%[a]),%[s]" : [s] "=x" (cv) : [a] "D" (cvin)
+  82:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         );
+  83:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  84:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return cv;
+  85:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+  86:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec_u u;
+  87:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  88:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     memmove (&u.block, cvin, sizeof (u));
+  32              		.loc 1 88 0
+  33 000c 488B4DE8 		movq	-24(%rbp), %rcx
+  34 0010 488D45F0 		leaq	-16(%rbp), %rax
+  35 0014 BA100000 		movl	$16, %edx
+  35      00
+  36 0019 4889CE   		movq	%rcx, %rsi
+  37 001c 4889C7   		movq	%rax, %rdi
+  38 001f E8000000 		call	memmove at PLT
+  38      00
+  89:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return u.vec;
+  39              		.loc 1 89 0
+  40 0024 F30F6F45 		movdqu	-16(%rbp), %xmm0
+  40      F0
+  90:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+  91:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+  41              		.loc 1 91 0
+  42 0029 C9       		leave
+  43 002a C3       		ret
+  44              		.cfi_endproc
+  45              	.LFE508:
+  46              		.size	CipherVecIn, .-CipherVecIn
+  47              		.type	CipherVecOut, @function
+  48              	CipherVecOut:
+  49              	.LFB509:
+  92:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  93:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  94:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  95:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /*
+  96:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Write a block's worth of bytes out from an AESState
+  97:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+  98:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ void CipherVecOut (const CipherVec cv, void * cvout)
+  99:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+  50              		.loc 1 99 0
+  51              		.cfi_startproc
+  52 002b 55       		pushq	%rbp
+  53              	.LCFI2:
+  54              		.cfi_def_cfa_offset 16
+  55 002c 4889E5   		movq	%rsp, %rbp
+  56              		.cfi_offset 6, -16
+  57              	.LCFI3:
+  58              		.cfi_def_cfa_register 6
+  59 002f 4883EC30 		subq	$48, %rsp
+  60 0033 660F7F45 		movdqa	%xmm0, -32(%rbp)
+  60      E0
+  61 0038 48897DD8 		movq	%rdi, -40(%rbp)
+ 100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if USE_VEC_REG
+
GAS LISTING /tmp/ccq6ONvw.s 			page 4
+
+
+ 101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     register CipherVec rcv = cv;
+ 102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     __asm__ (
+ 104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         "movdqu %[s],(%[a])" : : [s] "x" (rcv), [a] "D" (cvout)
+ 105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         );
+ 106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec lcv = cv;
+  62              		.loc 1 107 0
+  63 003c 660F6F45 		movdqa	-32(%rbp), %xmm0
+  63      E0
+  64 0041 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+  64      F0
+ 108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     memmove (cvout, &lcv, sizeof (lcv));
+  65              		.loc 1 108 0
+  66 0046 488D4DF0 		leaq	-16(%rbp), %rcx
+  67 004a 488B45D8 		movq	-40(%rbp), %rax
+  68 004e BA100000 		movl	$16, %edx
+  68      00
+  69 0053 4889CE   		movq	%rcx, %rsi
+  70 0056 4889C7   		movq	%rax, %rdi
+  71 0059 E8000000 		call	memmove at PLT
+  71      00
+ 109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+  72              		.loc 1 110 0
+  73 005e C9       		leave
+  74 005f C3       		ret
+  75              		.cfi_endproc
+  76              	.LFE509:
+  77              		.size	CipherVecOut, .-CipherVecOut
+  78              		.type	KCipherVecDestroy, @function
+  79              	KCipherVecDestroy:
+  80              	.LFB510:
+ 111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(Destroy) (CIPHER_IMPL * self)
+ 114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+  81              		.loc 1 114 0
+  82              		.cfi_startproc
+  83 0060 55       		pushq	%rbp
+  84              	.LCFI4:
+  85              		.cfi_def_cfa_offset 16
+  86 0061 4889E5   		movq	%rsp, %rbp
+  87              		.cfi_offset 6, -16
+  88              	.LCFI5:
+  89              		.cfi_def_cfa_register 6
+  90 0064 4883EC20 		subq	$32, %rsp
+  91 0068 48897DE8 		movq	%rdi, -24(%rbp)
+ 115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     rc_t rc = 0;
+  92              		.loc 1 115 0
+  93 006c C745FC00 		movl	$0, -4(%rbp)
+  93      000000
+ 116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     if (self)
+  94              		.loc 1 117 0
+  95 0073 48837DE8 		cmpq	$0, -24(%rbp)
+  95      00
+
GAS LISTING /tmp/ccq6ONvw.s 			page 5
+
+
+  96 0078 741B     		je	.L6
+ 118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc =  KCipherDestroy (&self->dad);
+  97              		.loc 1 119 0
+  98 007a 488B45E8 		movq	-24(%rbp), %rax
+  99 007e 4889C7   		movq	%rax, %rdi
+ 100 0081 E8000000 		call	KCipherDestroy at PLT
+ 100      00
+ 101 0086 8945FC   		movl	%eax, -4(%rbp)
+ 120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         free (self);
+ 102              		.loc 1 120 0
+ 103 0089 488B45E8 		movq	-24(%rbp), %rax
+ 104 008d 4889C7   		movq	%rax, %rdi
+ 105 0090 E8000000 		call	free at PLT
+ 105      00
+ 106              	.L6:
+ 121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return rc;
+ 107              		.loc 1 122 0
+ 108 0095 8B45FC   		movl	-4(%rbp), %eax
+ 123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 109              		.loc 1 123 0
+ 110 0098 C9       		leave
+ 111 0099 C3       		ret
+ 112              		.cfi_endproc
+ 113              	.LFE510:
+ 114              		.size	KCipherVecDestroy, .-KCipherVecDestroy
+ 115              		.section	.rodata
+ 116 000c 00000000 		.align 8
+ 117              	.LC0:
+ 118 0010 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c"
+ 118      652F726F 
+ 118      6461726D 
+ 118      65722F73 
+ 118      72615F73 
+ 119              	.LC1:
+ 120 0048 73656C66 		.string	"self"
+ 120      00
+ 121              	.LC2:
+ 122 004d 75736572 		.string	"user_key"
+ 122      5F6B6579 
+ 122      00
+ 123              	.LC3:
+ 124 0056 75736572 		.string	"user_key_bits"
+ 124      5F6B6579 
+ 124      5F626974 
+ 124      7300
+ 125              		.text
+ 126              		.type	KCipherVecSetEncryptKey, @function
+ 127              	KCipherVecSetEncryptKey:
+ 128              	.LFB511:
+ 124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(SetEncryptKey)(CIPHER_IMPL * self,
+ 127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                   const char * user_key,
+ 128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                   uint32_t user_key_bits)
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+
GAS LISTING /tmp/ccq6ONvw.s 			page 6
+
+
+ 129              		.loc 1 129 0
+ 130              		.cfi_startproc
+ 131 009a 55       		pushq	%rbp
+ 132              	.LCFI6:
+ 133              		.cfi_def_cfa_offset 16
+ 134 009b 4889E5   		movq	%rsp, %rbp
+ 135              		.cfi_offset 6, -16
+ 136              	.LCFI7:
+ 137              		.cfi_def_cfa_register 6
+ 138 009e 53       		pushq	%rbx
+ 139 009f 4883EC38 		subq	$56, %rsp
+ 140 00a3 48897DD8 		movq	%rdi, -40(%rbp)
+ 141 00a7 488975D0 		movq	%rsi, -48(%rbp)
+ 142 00ab 8955CC   		movl	%edx, -52(%rbp)
+ 130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     rc_t rc = 0;
+ 143              		.loc 1 130 0
+ 144 00ae C745EC00 		movl	$0, -20(%rbp)
+ 144      000000
+ 131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (self);
+ 145              		.loc 1 132 0
+ 146 00b5 48837DD8 		cmpq	$0, -40(%rbp)
+ 146      00
+ 147 00ba 751F     		jne	.L9
+ 148              		.cfi_offset 3, -24
+ 149 00bc 488D0D00 		leaq	__PRETTY_FUNCTION__.6562(%rip), %rcx
+ 149      000000
+ 150 00c3 BA840000 		movl	$132, %edx
+ 150      00
+ 151 00c8 488D3500 		leaq	.LC0(%rip), %rsi
+ 151      000000
+ 152 00cf 488D3D00 		leaq	.LC1(%rip), %rdi
+ 152      000000
+ 153 00d6 E8000000 		call	__assert_fail at PLT
+ 153      00
+ 154              	.L9:
+ 133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (user_key);
+ 155              		.loc 1 133 0
+ 156 00db 48837DD0 		cmpq	$0, -48(%rbp)
+ 156      00
+ 157 00e0 751F     		jne	.L10
+ 158 00e2 488D0D00 		leaq	__PRETTY_FUNCTION__.6562(%rip), %rcx
+ 158      000000
+ 159 00e9 BA850000 		movl	$133, %edx
+ 159      00
+ 160 00ee 488D3500 		leaq	.LC0(%rip), %rsi
+ 160      000000
+ 161 00f5 488D3D00 		leaq	.LC2(%rip), %rdi
+ 161      000000
+ 162 00fc E8000000 		call	__assert_fail at PLT
+ 162      00
+ 163              	.L10:
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (user_key_bits);
+ 164              		.loc 1 134 0
+ 165 0101 837DCC00 		cmpl	$0, -52(%rbp)
+ 166 0105 751F     		jne	.L11
+ 167 0107 488D0D00 		leaq	__PRETTY_FUNCTION__.6562(%rip), %rcx
+
GAS LISTING /tmp/ccq6ONvw.s 			page 7
+
+
+ 167      000000
+ 168 010e BA860000 		movl	$134, %edx
+ 168      00
+ 169 0113 488D3500 		leaq	.LC0(%rip), %rsi
+ 169      000000
+ 170 011a 488D3D00 		leaq	.LC3(%rip), %rdi
+ 170      000000
+ 171 0121 E8000000 		call	__assert_fail at PLT
+ 171      00
+ 172              	.L11:
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     switch (self->block_cipher->version.maj)
+ 173              		.loc 1 136 0
+ 174 0126 488B45D8 		movq	-40(%rbp), %rax
+ 175 012a 488B4048 		movq	72(%rax), %rax
+ 176 012e 8B00     		movl	(%rax), %eax
+ 177 0130 83F801   		cmpl	$1, %eax
+ 178 0133 7422     		je	.L13
+ 137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     default:
+ 139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = RC (rcKrypto, rcCipher, rcUpdating, rcBlockCipher, rcBadVersion);
+ 179              		.loc 1 139 0
+ 180 0135 B98B0000 		movl	$139, %ecx
+ 180      00
+ 181 013a 488D1500 		leaq	__func__.6564(%rip), %rdx
+ 181      000000
+ 182 0141 488D3500 		leaq	.LC0(%rip), %rsi
+ 182      000000
+ 183 0148 BF088E04 		movl	$-2029744632, %edi
+ 183      87
+ 184 014d E8000000 		call	SetRCFileFuncLine at PLT
+ 184      00
+ 185 0152 8945EC   		movl	%eax, -20(%rbp)
+ 140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 186              		.loc 1 140 0
+ 187 0155 EB23     		jmp	.L14
+ 188              	.L13:
+ 141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     case 1:
+ 143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         self->block_cipher->v1.set_encrypt_key (self->dad.encrypt_key, user_key,
+ 189              		.loc 1 143 0
+ 190 0157 488B45D8 		movq	-40(%rbp), %rax
+ 191 015b 488B4048 		movq	72(%rax), %rax
+ 192 015f 488B5820 		movq	32(%rax), %rbx
+ 193 0163 488B45D8 		movq	-40(%rbp), %rax
+ 194 0167 488B4018 		movq	24(%rax), %rax
+ 195 016b 8B55CC   		movl	-52(%rbp), %edx
+ 196 016e 488B4DD0 		movq	-48(%rbp), %rcx
+ 197 0172 4889CE   		movq	%rcx, %rsi
+ 198 0175 4889C7   		movq	%rax, %rdi
+ 199 0178 FFD3     		call	*%rbx
+ 200              	.L14:
+ 144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                                 user_key_bits);
+ 145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return rc;
+ 201              		.loc 1 147 0
+
GAS LISTING /tmp/ccq6ONvw.s 			page 8
+
+
+ 202 017a 8B45EC   		movl	-20(%rbp), %eax
+ 148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 203              		.loc 1 148 0
+ 204 017d 4883C438 		addq	$56, %rsp
+ 205 0181 5B       		popq	%rbx
+ 206 0182 C9       		leave
+ 207 0183 C3       		ret
+ 208              		.cfi_endproc
+ 209              	.LFE511:
+ 210              		.size	KCipherVecSetEncryptKey, .-KCipherVecSetEncryptKey
+ 211              		.type	KCipherVecSetDecryptKey, @function
+ 212              	KCipherVecSetDecryptKey:
+ 213              	.LFB512:
+ 149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(SetDecryptKey)(CIPHER_IMPL * self,
+ 152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                   const char * user_key,
+ 153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                   uint32_t user_key_bits)
+ 154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 214              		.loc 1 154 0
+ 215              		.cfi_startproc
+ 216 0184 55       		pushq	%rbp
+ 217              	.LCFI8:
+ 218              		.cfi_def_cfa_offset 16
+ 219 0185 4889E5   		movq	%rsp, %rbp
+ 220              		.cfi_offset 6, -16
+ 221              	.LCFI9:
+ 222              		.cfi_def_cfa_register 6
+ 223 0188 53       		pushq	%rbx
+ 224 0189 4883EC38 		subq	$56, %rsp
+ 225 018d 48897DD8 		movq	%rdi, -40(%rbp)
+ 226 0191 488975D0 		movq	%rsi, -48(%rbp)
+ 227 0195 8955CC   		movl	%edx, -52(%rbp)
+ 155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     rc_t rc = 0;
+ 228              		.loc 1 155 0
+ 229 0198 C745EC00 		movl	$0, -20(%rbp)
+ 229      000000
+ 156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (self);
+ 230              		.loc 1 157 0
+ 231 019f 48837DD8 		cmpq	$0, -40(%rbp)
+ 231      00
+ 232 01a4 751F     		jne	.L17
+ 233              		.cfi_offset 3, -24
+ 234 01a6 488D0D00 		leaq	__PRETTY_FUNCTION__.6586(%rip), %rcx
+ 234      000000
+ 235 01ad BA9D0000 		movl	$157, %edx
+ 235      00
+ 236 01b2 488D3500 		leaq	.LC0(%rip), %rsi
+ 236      000000
+ 237 01b9 488D3D00 		leaq	.LC1(%rip), %rdi
+ 237      000000
+ 238 01c0 E8000000 		call	__assert_fail at PLT
+ 238      00
+ 239              	.L17:
+ 158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (user_key);
+ 240              		.loc 1 158 0
+
GAS LISTING /tmp/ccq6ONvw.s 			page 9
+
+
+ 241 01c5 48837DD0 		cmpq	$0, -48(%rbp)
+ 241      00
+ 242 01ca 751F     		jne	.L18
+ 243 01cc 488D0D00 		leaq	__PRETTY_FUNCTION__.6586(%rip), %rcx
+ 243      000000
+ 244 01d3 BA9E0000 		movl	$158, %edx
+ 244      00
+ 245 01d8 488D3500 		leaq	.LC0(%rip), %rsi
+ 245      000000
+ 246 01df 488D3D00 		leaq	.LC2(%rip), %rdi
+ 246      000000
+ 247 01e6 E8000000 		call	__assert_fail at PLT
+ 247      00
+ 248              	.L18:
+ 159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (user_key_bits);
+ 249              		.loc 1 159 0
+ 250 01eb 837DCC00 		cmpl	$0, -52(%rbp)
+ 251 01ef 751F     		jne	.L19
+ 252 01f1 488D0D00 		leaq	__PRETTY_FUNCTION__.6586(%rip), %rcx
+ 252      000000
+ 253 01f8 BA9F0000 		movl	$159, %edx
+ 253      00
+ 254 01fd 488D3500 		leaq	.LC0(%rip), %rsi
+ 254      000000
+ 255 0204 488D3D00 		leaq	.LC3(%rip), %rdi
+ 255      000000
+ 256 020b E8000000 		call	__assert_fail at PLT
+ 256      00
+ 257              	.L19:
+ 160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     switch (self->block_cipher->version.maj)
+ 258              		.loc 1 161 0
+ 259 0210 488B45D8 		movq	-40(%rbp), %rax
+ 260 0214 488B4048 		movq	72(%rax), %rax
+ 261 0218 8B00     		movl	(%rax), %eax
+ 262 021a 83F801   		cmpl	$1, %eax
+ 263 021d 7422     		je	.L21
+ 162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     default:
+ 164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = RC (rcKrypto, rcCipher, rcUpdating, rcBlockCipher, rcBadVersion);
+ 264              		.loc 1 164 0
+ 265 021f B9A40000 		movl	$164, %ecx
+ 265      00
+ 266 0224 488D1500 		leaq	__func__.6588(%rip), %rdx
+ 266      000000
+ 267 022b 488D3500 		leaq	.LC0(%rip), %rsi
+ 267      000000
+ 268 0232 BF088E04 		movl	$-2029744632, %edi
+ 268      87
+ 269 0237 E8000000 		call	SetRCFileFuncLine at PLT
+ 269      00
+ 270 023c 8945EC   		movl	%eax, -20(%rbp)
+ 165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 271              		.loc 1 165 0
+ 272 023f EB23     		jmp	.L22
+ 273              	.L21:
+ 166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 10
+
+
+ 167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     case 1:
+ 168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         self->block_cipher->v1.set_decrypt_key (self->dad.decrypt_key, user_key,
+ 274              		.loc 1 168 0
+ 275 0241 488B45D8 		movq	-40(%rbp), %rax
+ 276 0245 488B4048 		movq	72(%rax), %rax
+ 277 0249 488B5828 		movq	40(%rax), %rbx
+ 278 024d 488B45D8 		movq	-40(%rbp), %rax
+ 279 0251 488B4020 		movq	32(%rax), %rax
+ 280 0255 8B55CC   		movl	-52(%rbp), %edx
+ 281 0258 488B4DD0 		movq	-48(%rbp), %rcx
+ 282 025c 4889CE   		movq	%rcx, %rsi
+ 283 025f 4889C7   		movq	%rax, %rdi
+ 284 0262 FFD3     		call	*%rbx
+ 285              	.L22:
+ 169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                                     user_key_bits);
+ 170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return rc;
+ 286              		.loc 1 172 0
+ 287 0264 8B45EC   		movl	-20(%rbp), %eax
+ 173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 288              		.loc 1 173 0
+ 289 0267 4883C438 		addq	$56, %rsp
+ 290 026b 5B       		popq	%rbx
+ 291 026c C9       		leave
+ 292 026d C3       		ret
+ 293              		.cfi_endproc
+ 294              	.LFE512:
+ 295              		.size	KCipherVecSetDecryptKey, .-KCipherVecSetDecryptKey
+ 296              		.section	.rodata
+ 297              	.LC4:
+ 298 0064 69766563 		.string	"ivec"
+ 298      00
+ 299              		.text
+ 300              		.type	KCipherVecSetEncryptIvec, @function
+ 301              	KCipherVecSetEncryptIvec:
+ 302              	.LFB513:
+ 174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetEncryptIvec) (CIPHER_IMPL * self,
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                              const void * ivec)
+ 179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 303              		.loc 1 179 0
+ 304              		.cfi_startproc
+ 305 026e 55       		pushq	%rbp
+ 306              	.LCFI10:
+ 307              		.cfi_def_cfa_offset 16
+ 308 026f 4889E5   		movq	%rsp, %rbp
+ 309              		.cfi_offset 6, -16
+ 310              	.LCFI11:
+ 311              		.cfi_def_cfa_register 6
+ 312 0272 4883EC10 		subq	$16, %rsp
+ 313 0276 48897DF8 		movq	%rdi, -8(%rbp)
+ 314 027a 488975F0 		movq	%rsi, -16(%rbp)
+ 180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (self);
+ 315              		.loc 1 180 0
+
GAS LISTING /tmp/ccq6ONvw.s 			page 11
+
+
+ 316 027e 48837DF8 		cmpq	$0, -8(%rbp)
+ 316      00
+ 317 0283 751F     		jne	.L25
+ 318 0285 488D0D00 		leaq	__PRETTY_FUNCTION__.6608(%rip), %rcx
+ 318      000000
+ 319 028c BAB40000 		movl	$180, %edx
+ 319      00
+ 320 0291 488D3500 		leaq	.LC0(%rip), %rsi
+ 320      000000
+ 321 0298 488D3D00 		leaq	.LC1(%rip), %rdi
+ 321      000000
+ 322 029f E8000000 		call	__assert_fail at PLT
+ 322      00
+ 323              	.L25:
+ 181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (ivec);
+ 324              		.loc 1 181 0
+ 325 02a4 48837DF0 		cmpq	$0, -16(%rbp)
+ 325      00
+ 326 02a9 751F     		jne	.L26
+ 327 02ab 488D0D00 		leaq	__PRETTY_FUNCTION__.6608(%rip), %rcx
+ 327      000000
+ 328 02b2 BAB50000 		movl	$181, %edx
+ 328      00
+ 329 02b7 488D3500 		leaq	.LC0(%rip), %rsi
+ 329      000000
+ 330 02be 488D3D00 		leaq	.LC4(%rip), %rdi
+ 330      000000
+ 331 02c5 E8000000 		call	__assert_fail at PLT
+ 331      00
+ 332              	.L26:
+ 182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     memcpy (self->dad.encrypt_ivec, ivec, self->dad.block_size);
+ 333              		.loc 1 183 0
+ 334 02ca 488B45F8 		movq	-8(%rbp), %rax
+ 335 02ce 8B4004   		movl	4(%rax), %eax
+ 336 02d1 89C2     		mov	%eax, %edx
+ 337 02d3 488B45F8 		movq	-8(%rbp), %rax
+ 338 02d7 488B4028 		movq	40(%rax), %rax
+ 339 02db 488B4DF0 		movq	-16(%rbp), %rcx
+ 340 02df 4889CE   		movq	%rcx, %rsi
+ 341 02e2 4889C7   		movq	%rax, %rdi
+ 342 02e5 E8000000 		call	memcpy at PLT
+ 342      00
+ 184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 343              		.loc 1 185 0
+ 344 02ea B8000000 		movl	$0, %eax
+ 344      00
+ 186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 345              		.loc 1 186 0
+ 346 02ef C9       		leave
+ 347 02f0 C3       		ret
+ 348              		.cfi_endproc
+ 349              	.LFE513:
+ 350              		.size	KCipherVecSetEncryptIvec, .-KCipherVecSetEncryptIvec
+ 351              		.type	KCipherVecSetDecryptIvec, @function
+ 352              	KCipherVecSetDecryptIvec:
+
GAS LISTING /tmp/ccq6ONvw.s 			page 12
+
+
+ 353              	.LFB514:
+ 187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetDecryptIvec) (CIPHER_IMPL * self,
+ 191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                              const void * ivec)
+ 192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 354              		.loc 1 192 0
+ 355              		.cfi_startproc
+ 356 02f1 55       		pushq	%rbp
+ 357              	.LCFI12:
+ 358              		.cfi_def_cfa_offset 16
+ 359 02f2 4889E5   		movq	%rsp, %rbp
+ 360              		.cfi_offset 6, -16
+ 361              	.LCFI13:
+ 362              		.cfi_def_cfa_register 6
+ 363 02f5 4883EC10 		subq	$16, %rsp
+ 364 02f9 48897DF8 		movq	%rdi, -8(%rbp)
+ 365 02fd 488975F0 		movq	%rsi, -16(%rbp)
+ 193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (self);
+ 366              		.loc 1 193 0
+ 367 0301 48837DF8 		cmpq	$0, -8(%rbp)
+ 367      00
+ 368 0306 751F     		jne	.L29
+ 369 0308 488D0D00 		leaq	__PRETTY_FUNCTION__.6621(%rip), %rcx
+ 369      000000
+ 370 030f BAC10000 		movl	$193, %edx
+ 370      00
+ 371 0314 488D3500 		leaq	.LC0(%rip), %rsi
+ 371      000000
+ 372 031b 488D3D00 		leaq	.LC1(%rip), %rdi
+ 372      000000
+ 373 0322 E8000000 		call	__assert_fail at PLT
+ 373      00
+ 374              	.L29:
+ 194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (ivec);
+ 375              		.loc 1 194 0
+ 376 0327 48837DF0 		cmpq	$0, -16(%rbp)
+ 376      00
+ 377 032c 751F     		jne	.L30
+ 378 032e 488D0D00 		leaq	__PRETTY_FUNCTION__.6621(%rip), %rcx
+ 378      000000
+ 379 0335 BAC20000 		movl	$194, %edx
+ 379      00
+ 380 033a 488D3500 		leaq	.LC0(%rip), %rsi
+ 380      000000
+ 381 0341 488D3D00 		leaq	.LC4(%rip), %rdi
+ 381      000000
+ 382 0348 E8000000 		call	__assert_fail at PLT
+ 382      00
+ 383              	.L30:
+ 195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     memcpy (self->dad.decrypt_ivec, ivec, self->dad.block_size);
+ 384              		.loc 1 196 0
+ 385 034d 488B45F8 		movq	-8(%rbp), %rax
+ 386 0351 8B4004   		movl	4(%rax), %eax
+ 387 0354 89C2     		mov	%eax, %edx
+
GAS LISTING /tmp/ccq6ONvw.s 			page 13
+
+
+ 388 0356 488B45F8 		movq	-8(%rbp), %rax
+ 389 035a 488B4030 		movq	48(%rax), %rax
+ 390 035e 488B4DF0 		movq	-16(%rbp), %rcx
+ 391 0362 4889CE   		movq	%rcx, %rsi
+ 392 0365 4889C7   		movq	%rax, %rdi
+ 393 0368 E8000000 		call	memcpy at PLT
+ 393      00
+ 197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 394              		.loc 1 198 0
+ 395 036d B8000000 		movl	$0, %eax
+ 395      00
+ 199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 396              		.loc 1 199 0
+ 397 0372 C9       		leave
+ 398 0373 C3       		ret
+ 399              		.cfi_endproc
+ 400              	.LFE514:
+ 401              		.size	KCipherVecSetDecryptIvec, .-KCipherVecSetDecryptIvec
+ 402              		.section	.rodata
+ 403              	.LC5:
+ 404 0069 66756E63 		.string	"func"
+ 404      00
+ 405              		.text
+ 406              		.type	KCipherVecSetEncryptCounterFunc, @function
+ 407              	KCipherVecSetEncryptCounterFunc:
+ 408              	.LFB515:
+ 200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetEncryptCounterFunc) (CIPHER_IMPL * self,
+ 204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                     cipher_ctr_func func)
+ 205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 409              		.loc 1 205 0
+ 410              		.cfi_startproc
+ 411 0374 55       		pushq	%rbp
+ 412              	.LCFI14:
+ 413              		.cfi_def_cfa_offset 16
+ 414 0375 4889E5   		movq	%rsp, %rbp
+ 415              		.cfi_offset 6, -16
+ 416              	.LCFI15:
+ 417              		.cfi_def_cfa_register 6
+ 418 0378 4883EC10 		subq	$16, %rsp
+ 419 037c 48897DF8 		movq	%rdi, -8(%rbp)
+ 420 0380 488975F0 		movq	%rsi, -16(%rbp)
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (self);
+ 421              		.loc 1 206 0
+ 422 0384 48837DF8 		cmpq	$0, -8(%rbp)
+ 422      00
+ 423 0389 751F     		jne	.L33
+ 424 038b 488D0D00 		leaq	__PRETTY_FUNCTION__.6634(%rip), %rcx
+ 424      000000
+ 425 0392 BACE0000 		movl	$206, %edx
+ 425      00
+ 426 0397 488D3500 		leaq	.LC0(%rip), %rsi
+ 426      000000
+ 427 039e 488D3D00 		leaq	.LC1(%rip), %rdi
+
GAS LISTING /tmp/ccq6ONvw.s 			page 14
+
+
+ 427      000000
+ 428 03a5 E8000000 		call	__assert_fail at PLT
+ 428      00
+ 429              	.L33:
+ 207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (func);
+ 430              		.loc 1 207 0
+ 431 03aa 48837DF0 		cmpq	$0, -16(%rbp)
+ 431      00
+ 432 03af 751F     		jne	.L34
+ 433 03b1 488D0D00 		leaq	__PRETTY_FUNCTION__.6634(%rip), %rcx
+ 433      000000
+ 434 03b8 BACF0000 		movl	$207, %edx
+ 434      00
+ 435 03bd 488D3500 		leaq	.LC0(%rip), %rsi
+ 435      000000
+ 436 03c4 488D3D00 		leaq	.LC5(%rip), %rdi
+ 436      000000
+ 437 03cb E8000000 		call	__assert_fail at PLT
+ 437      00
+ 438              	.L34:
+ 208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     self->dad.encrypt_counter_func = func;
+ 439              		.loc 1 209 0
+ 440 03d0 488B45F8 		movq	-8(%rbp), %rax
+ 441 03d4 488B55F0 		movq	-16(%rbp), %rdx
+ 442 03d8 48895038 		movq	%rdx, 56(%rax)
+ 210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 443              		.loc 1 211 0
+ 444 03dc B8000000 		movl	$0, %eax
+ 444      00
+ 212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 445              		.loc 1 212 0
+ 446 03e1 C9       		leave
+ 447 03e2 C3       		ret
+ 448              		.cfi_endproc
+ 449              	.LFE515:
+ 450              		.size	KCipherVecSetEncryptCounterFunc, .-KCipherVecSetEncryptCounterFunc
+ 451              		.type	KCipherVecSetDecryptCounterFunc, @function
+ 452              	KCipherVecSetDecryptCounterFunc:
+ 453              	.LFB516:
+ 213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetDecryptCounterFunc) (CIPHER_IMPL * self,
+ 217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                     cipher_ctr_func func)
+ 218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 454              		.loc 1 218 0
+ 455              		.cfi_startproc
+ 456 03e3 55       		pushq	%rbp
+ 457              	.LCFI16:
+ 458              		.cfi_def_cfa_offset 16
+ 459 03e4 4889E5   		movq	%rsp, %rbp
+ 460              		.cfi_offset 6, -16
+ 461              	.LCFI17:
+ 462              		.cfi_def_cfa_register 6
+ 463 03e7 4883EC10 		subq	$16, %rsp
+
GAS LISTING /tmp/ccq6ONvw.s 			page 15
+
+
+ 464 03eb 48897DF8 		movq	%rdi, -8(%rbp)
+ 465 03ef 488975F0 		movq	%rsi, -16(%rbp)
+ 219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (self);
+ 466              		.loc 1 219 0
+ 467 03f3 48837DF8 		cmpq	$0, -8(%rbp)
+ 467      00
+ 468 03f8 751F     		jne	.L37
+ 469 03fa 488D0D00 		leaq	__PRETTY_FUNCTION__.6644(%rip), %rcx
+ 469      000000
+ 470 0401 BADB0000 		movl	$219, %edx
+ 470      00
+ 471 0406 488D3500 		leaq	.LC0(%rip), %rsi
+ 471      000000
+ 472 040d 488D3D00 		leaq	.LC1(%rip), %rdi
+ 472      000000
+ 473 0414 E8000000 		call	__assert_fail at PLT
+ 473      00
+ 474              	.L37:
+ 220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (func);
+ 475              		.loc 1 220 0
+ 476 0419 48837DF0 		cmpq	$0, -16(%rbp)
+ 476      00
+ 477 041e 751F     		jne	.L38
+ 478 0420 488D0D00 		leaq	__PRETTY_FUNCTION__.6644(%rip), %rcx
+ 478      000000
+ 479 0427 BADC0000 		movl	$220, %edx
+ 479      00
+ 480 042c 488D3500 		leaq	.LC0(%rip), %rsi
+ 480      000000
+ 481 0433 488D3D00 		leaq	.LC5(%rip), %rdi
+ 481      000000
+ 482 043a E8000000 		call	__assert_fail at PLT
+ 482      00
+ 483              	.L38:
+ 221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     self->dad.decrypt_counter_func = func;
+ 484              		.loc 1 222 0
+ 485 043f 488B45F8 		movq	-8(%rbp), %rax
+ 486 0443 488B55F0 		movq	-16(%rbp), %rdx
+ 487 0447 48895040 		movq	%rdx, 64(%rax)
+ 223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 488              		.loc 1 224 0
+ 489 044b B8000000 		movl	$0, %eax
+ 489      00
+ 225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 490              		.loc 1 225 0
+ 491 0450 C9       		leave
+ 492 0451 C3       		ret
+ 493              		.cfi_endproc
+ 494              	.LFE516:
+ 495              		.size	KCipherVecSetDecryptCounterFunc, .-KCipherVecSetDecryptCounterFunc
+ 496              		.type	KCipherVecEncryptV1, @function
+ 497              	KCipherVecEncryptV1:
+ 498              	.LFB517:
+ 226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 16
+
+
+ 228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ CipherVec CMEMBER(EncryptV1)(const CIPHER_IMPL * self,
+ 229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                               register CipherVec cv)
+ 230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 499              		.loc 1 230 0
+ 500              		.cfi_startproc
+ 501 0452 55       		pushq	%rbp
+ 502              	.LCFI18:
+ 503              		.cfi_def_cfa_offset 16
+ 504 0453 4889E5   		movq	%rsp, %rbp
+ 505              		.cfi_offset 6, -16
+ 506              	.LCFI19:
+ 507              		.cfi_def_cfa_register 6
+ 508 0456 4883EC10 		subq	$16, %rsp
+ 509 045a 48897DF8 		movq	%rdi, -8(%rbp)
+ 231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return self->block_cipher->v1.encrypt (cv, self->dad.encrypt_key);
+ 510              		.loc 1 231 0
+ 511 045e 488B45F8 		movq	-8(%rbp), %rax
+ 512 0462 488B4048 		movq	72(%rax), %rax
+ 513 0466 488B5030 		movq	48(%rax), %rdx
+ 514 046a 488B45F8 		movq	-8(%rbp), %rax
+ 515 046e 488B4018 		movq	24(%rax), %rax
+ 516 0472 4889C7   		movq	%rax, %rdi
+ 517 0475 FFD2     		call	*%rdx
+ 232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 518              		.loc 1 232 0
+ 519 0477 C9       		leave
+ 520 0478 C3       		ret
+ 521              		.cfi_endproc
+ 522              	.LFE517:
+ 523              		.size	KCipherVecEncryptV1, .-KCipherVecEncryptV1
+ 524              		.type	KCipherVecDecryptV1, @function
+ 525              	KCipherVecDecryptV1:
+ 526              	.LFB518:
+ 233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ CipherVec  CMEMBER(DecryptV1)(const CIPHER_IMPL * self,
+ 236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                               register CipherVec cv)
+ 237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 527              		.loc 1 237 0
+ 528              		.cfi_startproc
+ 529 0479 55       		pushq	%rbp
+ 530              	.LCFI20:
+ 531              		.cfi_def_cfa_offset 16
+ 532 047a 4889E5   		movq	%rsp, %rbp
+ 533              		.cfi_offset 6, -16
+ 534              	.LCFI21:
+ 535              		.cfi_def_cfa_register 6
+ 536 047d 4883EC10 		subq	$16, %rsp
+ 537 0481 48897DF8 		movq	%rdi, -8(%rbp)
+ 238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return self->block_cipher->v1.decrypt (cv, self->dad.decrypt_key);
+ 538              		.loc 1 238 0
+ 539 0485 488B45F8 		movq	-8(%rbp), %rax
+ 540 0489 488B4048 		movq	72(%rax), %rax
+ 541 048d 488B5038 		movq	56(%rax), %rdx
+ 542 0491 488B45F8 		movq	-8(%rbp), %rax
+ 543 0495 488B4020 		movq	32(%rax), %rax
+ 544 0499 4889C7   		movq	%rax, %rdi
+
GAS LISTING /tmp/ccq6ONvw.s 			page 17
+
+
+ 545 049c FFD2     		call	*%rdx
+ 239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 546              		.loc 1 239 0
+ 547 049e C9       		leave
+ 548 049f C3       		ret
+ 549              		.cfi_endproc
+ 550              	.LFE518:
+ 551              		.size	KCipherVecDecryptV1, .-KCipherVecDecryptV1
+ 552              		.type	KCipherVecEncryptV1Int, @function
+ 553              	KCipherVecEncryptV1Int:
+ 554              	.LFB519:
+ 240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ rc_t CMEMBER(EncryptV1Int)(const CIPHER_IMPL * self,
+ 243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                             const void * in, void * out)
+ 244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 555              		.loc 1 244 0
+ 556              		.cfi_startproc
+ 557 04a0 55       		pushq	%rbp
+ 558              	.LCFI22:
+ 559              		.cfi_def_cfa_offset 16
+ 560 04a1 4889E5   		movq	%rsp, %rbp
+ 561              		.cfi_offset 6, -16
+ 562              	.LCFI23:
+ 563              		.cfi_def_cfa_register 6
+ 564 04a4 4883EC30 		subq	$48, %rsp
+ 565 04a8 48897DE8 		movq	%rdi, -24(%rbp)
+ 566 04ac 488975E0 		movq	%rsi, -32(%rbp)
+ 567 04b0 488955D8 		movq	%rdx, -40(%rbp)
+ 245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     cv = CipherVecIn(in);
+ 568              		.loc 1 247 0
+ 569 04b4 488B45E0 		movq	-32(%rbp), %rax
+ 570 04b8 4889C7   		movq	%rax, %rdi
+ 571 04bb E840FBFF 		call	CipherVecIn
+ 571      FF
+ 572 04c0 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 572      F0
+ 248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     cv = CMEMBER(EncryptV1)(self, cv);
+ 573              		.loc 1 248 0
+ 574 04c5 F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 574      F0
+ 575 04ca 488B45E8 		movq	-24(%rbp), %rax
+ 576 04ce 4889C7   		movq	%rax, %rdi
+ 577 04d1 E87CFFFF 		call	KCipherVecEncryptV1
+ 577      FF
+ 578 04d6 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 578      F0
+ 249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVecOut(cv, out);
+ 579              		.loc 1 249 0
+ 580 04db 488B45D8 		movq	-40(%rbp), %rax
+ 581 04df F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 581      F0
+ 582 04e4 4889C7   		movq	%rax, %rdi
+ 583 04e7 E83FFBFF 		call	CipherVecOut
+ 583      FF
+
GAS LISTING /tmp/ccq6ONvw.s 			page 18
+
+
+ 250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 584              		.loc 1 250 0
+ 585 04ec B8000000 		movl	$0, %eax
+ 585      00
+ 251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 586              		.loc 1 251 0
+ 587 04f1 C9       		leave
+ 588 04f2 C3       		ret
+ 589              		.cfi_endproc
+ 590              	.LFE519:
+ 591              		.size	KCipherVecEncryptV1Int, .-KCipherVecEncryptV1Int
+ 592              		.type	KCipherVecDecryptV1Int, @function
+ 593              	KCipherVecDecryptV1Int:
+ 594              	.LFB520:
+ 252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ rc_t CMEMBER(DecryptV1Int)(const CIPHER_IMPL * self,
+ 255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                             const void * in, void * out)
+ 256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 595              		.loc 1 256 0
+ 596              		.cfi_startproc
+ 597 04f3 55       		pushq	%rbp
+ 598              	.LCFI24:
+ 599              		.cfi_def_cfa_offset 16
+ 600 04f4 4889E5   		movq	%rsp, %rbp
+ 601              		.cfi_offset 6, -16
+ 602              	.LCFI25:
+ 603              		.cfi_def_cfa_register 6
+ 604 04f7 4883EC30 		subq	$48, %rsp
+ 605 04fb 48897DE8 		movq	%rdi, -24(%rbp)
+ 606 04ff 488975E0 		movq	%rsi, -32(%rbp)
+ 607 0503 488955D8 		movq	%rdx, -40(%rbp)
+ 257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     cv = CipherVecIn(in);
+ 608              		.loc 1 259 0
+ 609 0507 488B45E0 		movq	-32(%rbp), %rax
+ 610 050b 4889C7   		movq	%rax, %rdi
+ 611 050e E8EDFAFF 		call	CipherVecIn
+ 611      FF
+ 612 0513 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 612      F0
+ 260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     cv = CMEMBER(DecryptV1)(self, cv);
+ 613              		.loc 1 260 0
+ 614 0518 F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 614      F0
+ 615 051d 488B45E8 		movq	-24(%rbp), %rax
+ 616 0521 4889C7   		movq	%rax, %rdi
+ 617 0524 E850FFFF 		call	KCipherVecDecryptV1
+ 617      FF
+ 618 0529 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 618      F0
+ 261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVecOut(cv, out);
+ 619              		.loc 1 261 0
+ 620 052e 488B45D8 		movq	-40(%rbp), %rax
+ 621 0532 F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 621      F0
+
GAS LISTING /tmp/ccq6ONvw.s 			page 19
+
+
+ 622 0537 4889C7   		movq	%rax, %rdi
+ 623 053a E8ECFAFF 		call	CipherVecOut
+ 623      FF
+ 262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 624              		.loc 1 262 0
+ 625 053f B8000000 		movl	$0, %eax
+ 625      00
+ 263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 626              		.loc 1 263 0
+ 627 0544 C9       		leave
+ 628 0545 C3       		ret
+ 629              		.cfi_endproc
+ 630              	.LFE520:
+ 631              		.size	KCipherVecDecryptV1Int, .-KCipherVecDecryptV1Int
+ 632              		.type	KCipherVecEncrypt, @function
+ 633              	KCipherVecEncrypt:
+ 634              	.LFB521:
+ 264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(Encrypt) (const CIPHER_IMPL * self, const void * in, void * out)
+ 267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 635              		.loc 1 267 0
+ 636              		.cfi_startproc
+ 637 0546 55       		pushq	%rbp
+ 638              	.LCFI26:
+ 639              		.cfi_def_cfa_offset 16
+ 640 0547 4889E5   		movq	%rsp, %rbp
+ 641              		.cfi_offset 6, -16
+ 642              	.LCFI27:
+ 643              		.cfi_def_cfa_register 6
+ 644 054a 4883EC30 		subq	$48, %rsp
+ 645 054e 48897DE8 		movq	%rdi, -24(%rbp)
+ 646 0552 488975E0 		movq	%rsi, -32(%rbp)
+ 647 0556 488955D8 		movq	%rdx, -40(%rbp)
+ 268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     rc_t rc;
+ 269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     switch (self->block_cipher->version.maj)
+ 648              		.loc 1 270 0
+ 649 055a 488B45E8 		movq	-24(%rbp), %rax
+ 650 055e 488B4048 		movq	72(%rax), %rax
+ 651 0562 8B00     		movl	(%rax), %eax
+ 652 0564 83F801   		cmpl	$1, %eax
+ 653 0567 7422     		je	.L50
+ 271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     default:
+ 273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+ 654              		.loc 1 273 0
+ 655 0569 B9110100 		movl	$273, %ecx
+ 655      00
+ 656 056e 488D1500 		leaq	__func__.6694(%rip), %rdx
+ 656      000000
+ 657 0575 488D3500 		leaq	.LC0(%rip), %rsi
+ 657      000000
+ 658 057c BF080E09 		movl	$-2029449720, %edi
+ 658      87
+ 659 0581 E8000000 		call	SetRCFileFuncLine at PLT
+ 659      00
+
GAS LISTING /tmp/ccq6ONvw.s 			page 20
+
+
+ 660 0586 8945FC   		movl	%eax, -4(%rbp)
+ 274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 661              		.loc 1 274 0
+ 662 0589 EB1A     		jmp	.L51
+ 663              	.L50:
+ 275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     case 1:
+ 277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = CMEMBER(EncryptV1Int)(self, in, out);
+ 664              		.loc 1 277 0
+ 665 058b 488B55D8 		movq	-40(%rbp), %rdx
+ 666 058f 488B4DE0 		movq	-32(%rbp), %rcx
+ 667 0593 488B45E8 		movq	-24(%rbp), %rax
+ 668 0597 4889CE   		movq	%rcx, %rsi
+ 669 059a 4889C7   		movq	%rax, %rdi
+ 670 059d E8FEFEFF 		call	KCipherVecEncryptV1Int
+ 670      FF
+ 671 05a2 8945FC   		movl	%eax, -4(%rbp)
+ 672              	.L51:
+ 278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return rc;
+ 673              		.loc 1 281 0
+ 674 05a5 8B45FC   		movl	-4(%rbp), %eax
+ 282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 675              		.loc 1 282 0
+ 676 05a8 C9       		leave
+ 677 05a9 C3       		ret
+ 678              		.cfi_endproc
+ 679              	.LFE521:
+ 680              		.size	KCipherVecEncrypt, .-KCipherVecEncrypt
+ 681              		.type	KCipherVecDecrypt, @function
+ 682              	KCipherVecDecrypt:
+ 683              	.LFB522:
+ 283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(Decrypt) (const CIPHER_IMPL * self, const void * in, void * out)
+ 287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 684              		.loc 1 287 0
+ 685              		.cfi_startproc
+ 686 05aa 55       		pushq	%rbp
+ 687              	.LCFI28:
+ 688              		.cfi_def_cfa_offset 16
+ 689 05ab 4889E5   		movq	%rsp, %rbp
+ 690              		.cfi_offset 6, -16
+ 691              	.LCFI29:
+ 692              		.cfi_def_cfa_register 6
+ 693 05ae 4883EC30 		subq	$48, %rsp
+ 694 05b2 48897DE8 		movq	%rdi, -24(%rbp)
+ 695 05b6 488975E0 		movq	%rsi, -32(%rbp)
+ 696 05ba 488955D8 		movq	%rdx, -40(%rbp)
+ 288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     rc_t rc = 0;
+ 697              		.loc 1 288 0
+ 698 05be C745FC00 		movl	$0, -4(%rbp)
+ 698      000000
+ 289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 21
+
+
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     switch (self->block_cipher->version.maj)
+ 699              		.loc 1 290 0
+ 700 05c5 488B45E8 		movq	-24(%rbp), %rax
+ 701 05c9 488B4048 		movq	72(%rax), %rax
+ 702 05cd 8B00     		movl	(%rax), %eax
+ 703 05cf 83F801   		cmpl	$1, %eax
+ 704 05d2 7422     		je	.L55
+ 291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     default:
+ 293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+ 705              		.loc 1 293 0
+ 706 05d4 B9250100 		movl	$293, %ecx
+ 706      00
+ 707 05d9 488D1500 		leaq	__func__.6710(%rip), %rdx
+ 707      000000
+ 708 05e0 488D3500 		leaq	.LC0(%rip), %rsi
+ 708      000000
+ 709 05e7 BF080E09 		movl	$-2029449720, %edi
+ 709      87
+ 710 05ec E8000000 		call	SetRCFileFuncLine at PLT
+ 710      00
+ 711 05f1 8945FC   		movl	%eax, -4(%rbp)
+ 294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 712              		.loc 1 294 0
+ 713 05f4 EB1A     		jmp	.L56
+ 714              	.L55:
+ 295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     case 1:
+ 297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = CMEMBER(DecryptV1Int)(self, in, out);
+ 715              		.loc 1 297 0
+ 716 05f6 488B55D8 		movq	-40(%rbp), %rdx
+ 717 05fa 488B4DE0 		movq	-32(%rbp), %rcx
+ 718 05fe 488B45E8 		movq	-24(%rbp), %rax
+ 719 0602 4889CE   		movq	%rcx, %rsi
+ 720 0605 4889C7   		movq	%rax, %rdi
+ 721 0608 E8E6FEFF 		call	KCipherVecDecryptV1Int
+ 721      FF
+ 722 060d 8945FC   		movl	%eax, -4(%rbp)
+ 723              	.L56:
+ 298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return rc;
+ 724              		.loc 1 301 0
+ 725 0610 8B45FC   		movl	-4(%rbp), %eax
+ 302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 726              		.loc 1 302 0
+ 727 0613 C9       		leave
+ 728 0614 C3       		ret
+ 729              		.cfi_endproc
+ 730              	.LFE522:
+ 731              		.size	KCipherVecDecrypt, .-KCipherVecDecrypt
+ 732              		.type	KCipherVecEncryptEcb, @function
+ 733              	KCipherVecEncryptEcb:
+ 734              	.LFB523:
+ 303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 22
+
+
+ 305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ====================
+ 306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * longer runs of multiple blocks.
+ 307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+ 308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * The algorithms are well defined and standard in most cases
+ 309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+ 310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * These aremore or elss equivalent to class functions as they do not depend upon
+ 311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * the operation of the cipher and the algorithms are independent of anything about
+ 312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * the cipher other than its block size.
+ 313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+ 314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * PT: plain text block
+ 315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * CT: cipher text block
+ 316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * EK: encryption key
+ 317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * DK: decryption key (might be sthe same as EK)
+ 318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * ENC: encrypt cipher function on a block using a key
+ 319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * DEC: decrypt cipher function on a block using a key
+ 320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * IV: initialization vector - used as feedback for chaining
+ 321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * N:  number used once (nonce)
+ 322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * FB: feedback is the next IV in a chained/feedback mode
+ 323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* -----
+ 327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * NOTE:
+ 328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * 'in' can be the same as 'out' but other overlaps are dangers as a block at a
+ 329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * time is written. The code does not look for overlaps at this point.
+ 330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Electronic Code Book - simple cipher with no chaining feedback  just iterate
+ 334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * simple encrypt/decrypt with the plain, text, cipher text and key/
+ 335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+ 336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * CT = ENC (PT,EK)
+ 337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * PT = DEC (CT,DK)
+ 338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* -----
+ 341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * NOTE: currently an implmentation detail limits us to 8192 bit cipher block
+ 342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * size.  Changing MAX_BLOCK_SIZE in cipher.c can up that limit without 
+ 343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * causing any other compatibility issues. 
+ 344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+ 345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Two local byte arrays are defined on the stack of 1024 bytes or 8192 bits.
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptEcb) (const CIPHER_IMPL * self, const void * in, void * out, uint32_t block_cou
+ 349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 735              		.loc 1 349 0
+ 736              		.cfi_startproc
+ 737 0615 55       		pushq	%rbp
+ 738              	.LCFI30:
+ 739              		.cfi_def_cfa_offset 16
+ 740 0616 4889E5   		movq	%rsp, %rbp
+ 741              		.cfi_offset 6, -16
+ 742              	.LCFI31:
+ 743              		.cfi_def_cfa_register 6
+ 744 0619 4883EC30 		subq	$48, %rsp
+ 745 061d 48897DE8 		movq	%rdi, -24(%rbp)
+ 746 0621 488975E0 		movq	%rsi, -32(%rbp)
+
GAS LISTING /tmp/ccq6ONvw.s 			page 23
+
+
+ 747 0625 488955D8 		movq	%rdx, -40(%rbp)
+ 748 0629 894DD4   		movl	%ecx, -44(%rbp)
+ 350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 749              		.loc 1 353 0
+ 750 062c 488B45E0 		movq	-32(%rbp), %rax
+ 751 0630 488945F0 		movq	%rax, -16(%rbp)
+ 752 0634 488B45D8 		movq	-40(%rbp), %rax
+ 753 0638 488945F8 		movq	%rax, -8(%rbp)
+ 754 063c EB31     		jmp	.L59
+ 755              	.L60:
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CMEMBER(EncryptV1Int)(self, pin, pout);
+ 756              		.loc 1 357 0
+ 757 063e 488B55F8 		movq	-8(%rbp), %rdx
+ 758 0642 488B4DF0 		movq	-16(%rbp), %rcx
+ 759 0646 488B45E8 		movq	-24(%rbp), %rax
+ 760 064a 4889CE   		movq	%rcx, %rsi
+ 761 064d 4889C7   		movq	%rax, %rdi
+ 762 0650 E84BFEFF 		call	KCipherVecEncryptV1Int
+ 762      FF
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 763              		.loc 1 355 0
+ 764 0655 488B45E8 		movq	-24(%rbp), %rax
+ 765 0659 8B4004   		movl	4(%rax), %eax
+ 766 065c 89C0     		mov	%eax, %eax
+ 767 065e 480145F0 		addq	%rax, -16(%rbp)
+ 768 0662 488B45E8 		movq	-24(%rbp), %rax
+ 769 0666 8B4004   		movl	4(%rax), %eax
+ 770 0669 89C0     		mov	%eax, %eax
+ 771 066b 480145F8 		addq	%rax, -8(%rbp)
+ 772              	.L59:
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 773              		.loc 1 354 0
+ 774 066f 837DD400 		cmpl	$0, -44(%rbp)
+ 775 0673 0F95C0   		setne	%al
+ 776 0676 836DD401 		subl	$1, -44(%rbp)
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 777              		.loc 1 353 0
+ 778 067a 84C0     		testb	%al, %al
+ 779 067c 75C0     		jne	.L60
+ 358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 780              		.loc 1 359 0
+ 781 067e B8000000 		movl	$0, %eax
+ 781      00
+ 360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 782              		.loc 1 360 0
+ 783 0683 C9       		leave
+ 784 0684 C3       		ret
+ 785              		.cfi_endproc
+ 786              	.LFE523:
+ 787              		.size	KCipherVecEncryptEcb, .-KCipherVecEncryptEcb
+
GAS LISTING /tmp/ccq6ONvw.s 			page 24
+
+
+ 788              		.type	KCipherVecDecryptEcb, @function
+ 789              	KCipherVecDecryptEcb:
+ 790              	.LFB524:
+ 361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptEcb) (const CIPHER_IMPL * self, const void * in, void * out, uint32_t block_cou
+ 365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 791              		.loc 1 365 0
+ 792              		.cfi_startproc
+ 793 0685 55       		pushq	%rbp
+ 794              	.LCFI32:
+ 795              		.cfi_def_cfa_offset 16
+ 796 0686 4889E5   		movq	%rsp, %rbp
+ 797              		.cfi_offset 6, -16
+ 798              	.LCFI33:
+ 799              		.cfi_def_cfa_register 6
+ 800 0689 4883EC30 		subq	$48, %rsp
+ 801 068d 48897DE8 		movq	%rdi, -24(%rbp)
+ 802 0691 488975E0 		movq	%rsi, -32(%rbp)
+ 803 0695 488955D8 		movq	%rdx, -40(%rbp)
+ 804 0699 894DD4   		movl	%ecx, -44(%rbp)
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 805              		.loc 1 369 0
+ 806 069c 488B45E0 		movq	-32(%rbp), %rax
+ 807 06a0 488945F0 		movq	%rax, -16(%rbp)
+ 808 06a4 488B45D8 		movq	-40(%rbp), %rax
+ 809 06a8 488945F8 		movq	%rax, -8(%rbp)
+ 810 06ac EB31     		jmp	.L63
+ 811              	.L64:
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CMEMBER(DecryptV1Int)(self, pin, pout);
+ 812              		.loc 1 373 0
+ 813 06ae 488B55F8 		movq	-8(%rbp), %rdx
+ 814 06b2 488B4DF0 		movq	-16(%rbp), %rcx
+ 815 06b6 488B45E8 		movq	-24(%rbp), %rax
+ 816 06ba 4889CE   		movq	%rcx, %rsi
+ 817 06bd 4889C7   		movq	%rax, %rdi
+ 818 06c0 E82EFEFF 		call	KCipherVecDecryptV1Int
+ 818      FF
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 819              		.loc 1 371 0
+ 820 06c5 488B45E8 		movq	-24(%rbp), %rax
+ 821 06c9 8B4004   		movl	4(%rax), %eax
+ 822 06cc 89C0     		mov	%eax, %eax
+ 823 06ce 480145F0 		addq	%rax, -16(%rbp)
+ 824 06d2 488B45E8 		movq	-24(%rbp), %rax
+ 825 06d6 8B4004   		movl	4(%rax), %eax
+ 826 06d9 89C0     		mov	%eax, %eax
+ 827 06db 480145F8 		addq	%rax, -8(%rbp)
+ 828              	.L63:
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 25
+
+
+ 829              		.loc 1 370 0
+ 830 06df 837DD400 		cmpl	$0, -44(%rbp)
+ 831 06e3 0F95C0   		setne	%al
+ 832 06e6 836DD401 		subl	$1, -44(%rbp)
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 833              		.loc 1 369 0
+ 834 06ea 84C0     		testb	%al, %al
+ 835 06ec 75C0     		jne	.L64
+ 374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 836              		.loc 1 376 0
+ 837 06ee B8000000 		movl	$0, %eax
+ 837      00
+ 377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 838              		.loc 1 377 0
+ 839 06f3 C9       		leave
+ 840 06f4 C3       		ret
+ 841              		.cfi_endproc
+ 842              	.LFE524:
+ 843              		.size	KCipherVecDecryptEcb, .-KCipherVecDecryptEcb
+ 844              		.type	KCipherVecEncryptCbc, @function
+ 845              	KCipherVecEncryptCbc:
+ 846              	.LFB525:
+ 378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Cipher-Block Chaining
+ 382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * CT = (FB = ENC (PT^IV, EK))
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * PT = DEC ((FB = CT), DK)
+ 384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptCbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 847              		.loc 1 387 0
+ 848              		.cfi_startproc
+ 849 06f5 55       		pushq	%rbp
+ 850              	.LCFI34:
+ 851              		.cfi_def_cfa_offset 16
+ 852 06f6 4889E5   		movq	%rsp, %rbp
+ 853              		.cfi_offset 6, -16
+ 854              	.LCFI35:
+ 855              		.cfi_def_cfa_register 6
+ 856 06f9 4883EC50 		subq	$80, %rsp
+ 857 06fd 48897DC8 		movq	%rdi, -56(%rbp)
+ 858 0701 488975C0 		movq	%rsi, -64(%rbp)
+ 859 0705 488955B8 		movq	%rdx, -72(%rbp)
+ 860 0709 894DB4   		movl	%ecx, -76(%rbp)
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 0
+ 394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = CipherVecIn (self->dad.encrypt_ivec);
+
GAS LISTING /tmp/ccq6ONvw.s 			page 26
+
+
+ 861              		.loc 1 396 0
+ 862 070c 488B45C8 		movq	-56(%rbp), %rax
+ 863 0710 488B4028 		movq	40(%rax), %rax
+ 864 0714 4889C7   		movq	%rax, %rdi
+ 865 0717 E8E4F8FF 		call	CipherVecIn
+ 865      FF
+ 866 071c F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 866      E0
+ 397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 867              		.loc 1 399 0
+ 868 0721 488B45C0 		movq	-64(%rbp), %rax
+ 869 0725 488945F0 		movq	%rax, -16(%rbp)
+ 870 0729 488B45B8 		movq	-72(%rbp), %rax
+ 871 072d 488945F8 		movq	%rax, -8(%rbp)
+ 872 0731 EB65     		jmp	.L67
+ 873              	.L68:
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CipherVecIn (pin);
+ 874              		.loc 1 403 0
+ 875 0733 488B45F0 		movq	-16(%rbp), %rax
+ 876 0737 4889C7   		movq	%rax, %rdi
+ 877 073a E8C1F8FF 		call	CipherVecIn
+ 877      FF
+ 878 073f F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 878      D0
+ 404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv ^= ivec;
+ 879              		.loc 1 404 0
+ 880 0744 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 880      E0
+ 881 0749 F30F6F4D 		movdqu	-48(%rbp), %xmm1
+ 881      D0
+ 882 074e 660FEFC1 		pxor	%xmm1, %xmm0
+ 883 0752 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 883      D0
+ 405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec = CMEMBER(EncryptV1)(self, cv);
+ 884              		.loc 1 405 0
+ 885 0757 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 885      D0
+ 886 075c 488B45C8 		movq	-56(%rbp), %rax
+ 887 0760 4889C7   		movq	%rax, %rdi
+ 888 0763 E8EAFCFF 		call	KCipherVecEncryptV1
+ 888      FF
+ 889 0768 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 889      E0
+ 406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (ivec, pout);
+ 890              		.loc 1 406 0
+ 891 076d 488B45F8 		movq	-8(%rbp), %rax
+ 892 0771 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 892      E0
+ 893 0776 4889C7   		movq	%rax, %rdi
+ 894 0779 E8ADF8FF 		call	CipherVecOut
+ 894      FF
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+
GAS LISTING /tmp/ccq6ONvw.s 			page 27
+
+
+ 895              		.loc 1 401 0
+ 896 077e 488B45C8 		movq	-56(%rbp), %rax
+ 897 0782 8B4004   		movl	4(%rax), %eax
+ 898 0785 89C0     		mov	%eax, %eax
+ 899 0787 480145F0 		addq	%rax, -16(%rbp)
+ 900 078b 488B45C8 		movq	-56(%rbp), %rax
+ 901 078f 8B4004   		movl	4(%rax), %eax
+ 902 0792 89C0     		mov	%eax, %eax
+ 903 0794 480145F8 		addq	%rax, -8(%rbp)
+ 904              	.L67:
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 905              		.loc 1 400 0
+ 906 0798 837DB400 		cmpl	$0, -76(%rbp)
+ 907 079c 0F95C0   		setne	%al
+ 908 079f 836DB401 		subl	$1, -76(%rbp)
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 909              		.loc 1 399 0
+ 910 07a3 84C0     		testb	%al, %al
+ 911 07a5 758C     		jne	.L68
+ 407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 0
+ 410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVecOut (ivec, self->dad.encrypt_ivec);
+ 912              		.loc 1 412 0
+ 913 07a7 488B45C8 		movq	-56(%rbp), %rax
+ 914 07ab 488B4028 		movq	40(%rax), %rax
+ 915 07af F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 915      E0
+ 916 07b4 4889C7   		movq	%rax, %rdi
+ 917 07b7 E86FF8FF 		call	CipherVecOut
+ 917      FF
+ 413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 918              		.loc 1 415 0
+ 919 07bc B8000000 		movl	$0, %eax
+ 919      00
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }    
+ 920              		.loc 1 416 0
+ 921 07c1 C9       		leave
+ 922 07c2 C3       		ret
+ 923              		.cfi_endproc
+ 924              	.LFE525:
+ 925              		.size	KCipherVecEncryptCbc, .-KCipherVecEncryptCbc
+ 926              		.type	KCipherVecDecryptCbc, @function
+ 927              	KCipherVecDecryptCbc:
+ 928              	.LFB526:
+ 417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptCbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 929              		.loc 1 421 0
+ 930              		.cfi_startproc
+ 931 07c3 55       		pushq	%rbp
+
GAS LISTING /tmp/ccq6ONvw.s 			page 28
+
+
+ 932              	.LCFI36:
+ 933              		.cfi_def_cfa_offset 16
+ 934 07c4 4889E5   		movq	%rsp, %rbp
+ 935              		.cfi_offset 6, -16
+ 936              	.LCFI37:
+ 937              		.cfi_def_cfa_register 6
+ 938 07c7 4883EC60 		subq	$96, %rsp
+ 939 07cb 48897DB8 		movq	%rdi, -72(%rbp)
+ 940 07cf 488975B0 		movq	%rsi, -80(%rbp)
+ 941 07d3 488955A8 		movq	%rdx, -88(%rbp)
+ 942 07d7 894DA4   		movl	%ecx, -92(%rbp)
+ 422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = CipherVecIn (self->dad.decrypt_ivec);
+ 943              		.loc 1 427 0
+ 944 07da 488B45B8 		movq	-72(%rbp), %rax
+ 945 07de 488B4030 		movq	48(%rax), %rax
+ 946 07e2 4889C7   		movq	%rax, %rdi
+ 947 07e5 E816F8FF 		call	CipherVecIn
+ 947      FF
+ 948 07ea F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 948      D0
+ 428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 949              		.loc 1 429 0
+ 950 07ef 488B45B0 		movq	-80(%rbp), %rax
+ 951 07f3 488945E0 		movq	%rax, -32(%rbp)
+ 952 07f7 488B45A8 		movq	-88(%rbp), %rax
+ 953 07fb 488945E8 		movq	%rax, -24(%rbp)
+ 954 07ff EB6F     		jmp	.L71
+ 955              	.L72:
+ 956              	.LBB2:
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVec temp;
+ 434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CipherVecIn (pin);
+ 957              		.loc 1 435 0
+ 958 0801 488B45E0 		movq	-32(%rbp), %rax
+ 959 0805 4889C7   		movq	%rax, %rdi
+ 960 0808 E8F3F7FF 		call	CipherVecIn
+ 960      FF
+ 961 080d F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 961      C0
+ 436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 0
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp = cv;
+ 438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp = CMEMBER(DecryptV1)(self, temp);
+ 439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp = CMEMBER(DecryptV1)(self, cv);
+ 962              		.loc 1 440 0
+ 963 0812 F30F6F45 		movdqu	-64(%rbp), %xmm0
+ 963      C0
+ 964 0817 488B45B8 		movq	-72(%rbp), %rax
+
GAS LISTING /tmp/ccq6ONvw.s 			page 29
+
+
+ 965 081b 4889C7   		movq	%rax, %rdi
+ 966 081e E856FCFF 		call	KCipherVecDecryptV1
+ 966      FF
+ 967 0823 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 967      F0
+ 441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp ^= ivec;
+ 968              		.loc 1 442 0
+ 969 0828 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 969      D0
+ 970 082d F30F6F4D 		movdqu	-16(%rbp), %xmm1
+ 970      F0
+ 971 0832 660FEFC1 		pxor	%xmm1, %xmm0
+ 972 0836 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 972      F0
+ 443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (temp, pout);
+ 973              		.loc 1 443 0
+ 974 083b 488B45E8 		movq	-24(%rbp), %rax
+ 975 083f F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 975      F0
+ 976 0844 4889C7   		movq	%rax, %rdi
+ 977 0847 E8DFF7FF 		call	CipherVecOut
+ 977      FF
+ 444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec = cv;
+ 978              		.loc 1 444 0
+ 979 084c F30F6F45 		movdqu	-64(%rbp), %xmm0
+ 979      C0
+ 980 0851 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 980      D0
+ 981              	.LBE2:
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 982              		.loc 1 431 0
+ 983 0856 488B45B8 		movq	-72(%rbp), %rax
+ 984 085a 8B4004   		movl	4(%rax), %eax
+ 985 085d 89C0     		mov	%eax, %eax
+ 986 085f 480145E0 		addq	%rax, -32(%rbp)
+ 987 0863 488B45B8 		movq	-72(%rbp), %rax
+ 988 0867 8B4004   		movl	4(%rax), %eax
+ 989 086a 89C0     		mov	%eax, %eax
+ 990 086c 480145E8 		addq	%rax, -24(%rbp)
+ 991              	.L71:
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 992              		.loc 1 430 0
+ 993 0870 837DA400 		cmpl	$0, -92(%rbp)
+ 994 0874 0F95C0   		setne	%al
+ 995 0877 836DA401 		subl	$1, -92(%rbp)
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 996              		.loc 1 429 0
+ 997 087b 84C0     		testb	%al, %al
+ 998 087d 7582     		jne	.L72
+ 445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.decrypt_ivec = ivec;
+ 999              		.loc 1 447 0
+ 1000 087f 488B45B8 		movq	-72(%rbp), %rax
+ 1001 0883 488B4030 		movq	48(%rax), %rax
+ 1002 0887 F30F6F45 		movdqu	-48(%rbp), %xmm0
+
GAS LISTING /tmp/ccq6ONvw.s 			page 30
+
+
+ 1002      D0
+ 1003 088c F30F7F00 		movdqu	%xmm0, (%rax)
+ 448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1004              		.loc 1 448 0
+ 1005 0890 B8000000 		movl	$0, %eax
+ 1005      00
+ 449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1006              		.loc 1 449 0
+ 1007 0895 C9       		leave
+ 1008 0896 C3       		ret
+ 1009              		.cfi_endproc
+ 1010              	.LFE526:
+ 1011              		.size	KCipherVecDecryptCbc, .-KCipherVecDecryptCbc
+ 1012              		.type	KCipherVecEncryptPcbc, @function
+ 1013              	KCipherVecEncryptPcbc:
+ 1014              	.LFB527:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Propagating cipher-block chaining
+ 454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * FB = PT ^ (CT = ENC ((PT^IV), EK))
+ 455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * FB = CT ^ (PT = DEC (CT,DK) ^ IV)
+ 456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptPcbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1015              		.loc 1 459 0
+ 1016              		.cfi_startproc
+ 1017 0897 55       		pushq	%rbp
+ 1018              	.LCFI38:
+ 1019              		.cfi_def_cfa_offset 16
+ 1020 0898 4889E5   		movq	%rsp, %rbp
+ 1021              		.cfi_offset 6, -16
+ 1022              	.LCFI39:
+ 1023              		.cfi_def_cfa_register 6
+ 1024 089b 4883EC60 		subq	$96, %rsp
+ 1025 089f 48897DB8 		movq	%rdi, -72(%rbp)
+ 1026 08a3 488975B0 		movq	%rsi, -80(%rbp)
+ 1027 08a7 488955A8 		movq	%rdx, -88(%rbp)
+ 1028 08ab 894DA4   		movl	%ecx, -92(%rbp)
+ 460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1029              		.loc 1 466 0
+ 1030 08ae 488B45B8 		movq	-72(%rbp), %rax
+ 1031 08b2 488B4028 		movq	40(%rax), %rax
+ 1032 08b6 660F6F00 		movdqa	(%rax), %xmm0
+ 1033 08ba F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1033      D0
+ 467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1034              		.loc 1 468 0
+ 1035 08bf 488B45B0 		movq	-80(%rbp), %rax
+
GAS LISTING /tmp/ccq6ONvw.s 			page 31
+
+
+ 1036 08c3 488945E0 		movq	%rax, -32(%rbp)
+ 1037 08c7 488B45A8 		movq	-88(%rbp), %rax
+ 1038 08cb 488945E8 		movq	%rax, -24(%rbp)
+ 1039 08cf EB78     		jmp	.L75
+ 1040              	.L76:
+ 1041              	.LBB3:
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVec temp;
+ 473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CipherVecIn (pin);
+ 1042              		.loc 1 474 0
+ 1043 08d1 488B45E0 		movq	-32(%rbp), %rax
+ 1044 08d5 4889C7   		movq	%rax, %rdi
+ 1045 08d8 E823F7FF 		call	CipherVecIn
+ 1045      FF
+ 1046 08dd F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 1046      C0
+ 475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp = cv ^ ivec;
+ 1047              		.loc 1 475 0
+ 1048 08e2 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 1048      D0
+ 1049 08e7 F30F6F4D 		movdqu	-64(%rbp), %xmm1
+ 1049      C0
+ 1050 08ec 660FEFC1 		pxor	%xmm1, %xmm0
+ 1051 08f0 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 1051      F0
+ 476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp = CMEMBER(EncryptV1)(self, temp); 
+ 1052              		.loc 1 476 0
+ 1053 08f5 F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 1053      F0
+ 1054 08fa 488B45B8 		movq	-72(%rbp), %rax
+ 1055 08fe 4889C7   		movq	%rax, %rdi
+ 1056 0901 E84CFBFF 		call	KCipherVecEncryptV1
+ 1056      FF
+ 1057 0906 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 1057      F0
+ 477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec = cv ^ temp;
+ 1058              		.loc 1 477 0
+ 1059 090b F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 1059      F0
+ 1060 0910 F30F6F4D 		movdqu	-64(%rbp), %xmm1
+ 1060      C0
+ 1061 0915 660FEFC1 		pxor	%xmm1, %xmm0
+ 1062 0919 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1062      D0
+ 478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (temp, pout);
+ 1063              		.loc 1 478 0
+ 1064 091e 488B45E8 		movq	-24(%rbp), %rax
+ 1065 0922 F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 1065      F0
+ 1066 0927 4889C7   		movq	%rax, %rdi
+ 1067 092a E8FCF6FF 		call	CipherVecOut
+ 1067      FF
+ 1068              	.LBE3:
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+
GAS LISTING /tmp/ccq6ONvw.s 			page 32
+
+
+ 1069              		.loc 1 470 0
+ 1070 092f 488B45B8 		movq	-72(%rbp), %rax
+ 1071 0933 8B4004   		movl	4(%rax), %eax
+ 1072 0936 89C0     		mov	%eax, %eax
+ 1073 0938 480145E0 		addq	%rax, -32(%rbp)
+ 1074 093c 488B45B8 		movq	-72(%rbp), %rax
+ 1075 0940 8B4004   		movl	4(%rax), %eax
+ 1076 0943 89C0     		mov	%eax, %eax
+ 1077 0945 480145E8 		addq	%rax, -24(%rbp)
+ 1078              	.L75:
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 1079              		.loc 1 469 0
+ 1080 0949 837DA400 		cmpl	$0, -92(%rbp)
+ 1081 094d 0F95C0   		setne	%al
+ 1082 0950 836DA401 		subl	$1, -92(%rbp)
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1083              		.loc 1 468 0
+ 1084 0954 84C0     		testb	%al, %al
+ 1085 0956 0F8575FF 		jne	.L76
+ 1085      FFFF
+ 479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1086              		.loc 1 481 0
+ 1087 095c 488B45B8 		movq	-72(%rbp), %rax
+ 1088 0960 488B4028 		movq	40(%rax), %rax
+ 1089 0964 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 1089      D0
+ 1090 0969 F30F7F00 		movdqu	%xmm0, (%rax)
+ 482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1091              		.loc 1 483 0
+ 1092 096d B8000000 		movl	$0, %eax
+ 1092      00
+ 484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1093              		.loc 1 487 0
+ 1094 0972 C9       		leave
+ 1095 0973 C3       		ret
+ 1096              		.cfi_endproc
+ 1097              	.LFE527:
+ 1098              		.size	KCipherVecEncryptPcbc, .-KCipherVecEncryptPcbc
+ 1099              		.type	KCipherVecDecryptPcbc, @function
+ 1100              	KCipherVecDecryptPcbc:
+ 1101              	.LFB528:
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptPcbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1102              		.loc 1 492 0
+ 1103              		.cfi_startproc
+ 1104 0974 55       		pushq	%rbp
+ 1105              	.LCFI40:
+ 1106              		.cfi_def_cfa_offset 16
+
GAS LISTING /tmp/ccq6ONvw.s 			page 33
+
+
+ 1107 0975 4889E5   		movq	%rsp, %rbp
+ 1108              		.cfi_offset 6, -16
+ 1109              	.LCFI41:
+ 1110              		.cfi_def_cfa_register 6
+ 1111 0978 4883EC60 		subq	$96, %rsp
+ 1112 097c 48897DB8 		movq	%rdi, -72(%rbp)
+ 1113 0980 488975B0 		movq	%rsi, -80(%rbp)
+ 1114 0984 488955A8 		movq	%rdx, -88(%rbp)
+ 1115 0988 894DA4   		movl	%ecx, -92(%rbp)
+ 493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1116              		.loc 1 499 0
+ 1117 098b 488B45B8 		movq	-72(%rbp), %rax
+ 1118 098f 488B4028 		movq	40(%rax), %rax
+ 1119 0993 660F6F00 		movdqa	(%rax), %xmm0
+ 1120 0997 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1120      D0
+ 500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1121              		.loc 1 501 0
+ 1122 099c 488B45B0 		movq	-80(%rbp), %rax
+ 1123 09a0 488945E0 		movq	%rax, -32(%rbp)
+ 1124 09a4 488B45A8 		movq	-88(%rbp), %rax
+ 1125 09a8 488945E8 		movq	%rax, -24(%rbp)
+ 1126 09ac EB65     		jmp	.L79
+ 1127              	.L80:
+ 1128              	.LBB4:
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVec temp;
+ 506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CipherVecIn (pin);
+ 1129              		.loc 1 507 0
+ 1130 09ae 488B45E0 		movq	-32(%rbp), %rax
+ 1131 09b2 4889C7   		movq	%rax, %rdi
+ 1132 09b5 E846F6FF 		call	CipherVecIn
+ 1132      FF
+ 1133 09ba F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 1133      C0
+ 508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp = CMEMBER(DecryptV1)(self, cv);
+ 1134              		.loc 1 508 0
+ 1135 09bf F30F6F45 		movdqu	-64(%rbp), %xmm0
+ 1135      C0
+ 1136 09c4 488B45B8 		movq	-72(%rbp), %rax
+ 1137 09c8 4889C7   		movq	%rax, %rdi
+ 1138 09cb E8A9FAFF 		call	KCipherVecDecryptV1
+ 1138      FF
+ 1139 09d0 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 1139      F0
+ 509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec ^= temp;
+ 1140              		.loc 1 509 0
+
GAS LISTING /tmp/ccq6ONvw.s 			page 34
+
+
+ 1141 09d5 F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 1141      F0
+ 1142 09da F30F6F4D 		movdqu	-48(%rbp), %xmm1
+ 1142      D0
+ 1143 09df 660FEFC1 		pxor	%xmm1, %xmm0
+ 1144 09e3 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1144      D0
+ 510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (temp, pout);
+ 1145              		.loc 1 510 0
+ 1146 09e8 488B45E8 		movq	-24(%rbp), %rax
+ 1147 09ec F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 1147      F0
+ 1148 09f1 4889C7   		movq	%rax, %rdi
+ 1149 09f4 E832F6FF 		call	CipherVecOut
+ 1149      FF
+ 1150              	.LBE4:
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1151              		.loc 1 503 0
+ 1152 09f9 488B45B8 		movq	-72(%rbp), %rax
+ 1153 09fd 8B4004   		movl	4(%rax), %eax
+ 1154 0a00 89C0     		mov	%eax, %eax
+ 1155 0a02 480145E0 		addq	%rax, -32(%rbp)
+ 1156 0a06 488B45B8 		movq	-72(%rbp), %rax
+ 1157 0a0a 8B4004   		movl	4(%rax), %eax
+ 1158 0a0d 89C0     		mov	%eax, %eax
+ 1159 0a0f 480145E8 		addq	%rax, -24(%rbp)
+ 1160              	.L79:
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 1161              		.loc 1 502 0
+ 1162 0a13 837DA400 		cmpl	$0, -92(%rbp)
+ 1163 0a17 0F95C0   		setne	%al
+ 1164 0a1a 836DA401 		subl	$1, -92(%rbp)
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1165              		.loc 1 501 0
+ 1166 0a1e 84C0     		testb	%al, %al
+ 1167 0a20 758C     		jne	.L80
+ 511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1168              		.loc 1 513 0
+ 1169 0a22 488B45B8 		movq	-72(%rbp), %rax
+ 1170 0a26 488B4028 		movq	40(%rax), %rax
+ 1171 0a2a F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 1171      D0
+ 1172 0a2f F30F7F00 		movdqu	%xmm0, (%rax)
+ 514:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1173              		.loc 1 515 0
+ 1174 0a33 B8000000 		movl	$0, %eax
+ 1174      00
+ 516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1175              		.loc 1 519 0
+ 1176 0a38 C9       		leave
+ 1177 0a39 C3       		ret
+
GAS LISTING /tmp/ccq6ONvw.s 			page 35
+
+
+ 1178              		.cfi_endproc
+ 1179              	.LFE528:
+ 1180              		.size	KCipherVecDecryptPcbc, .-KCipherVecDecryptPcbc
+ 1181              		.type	KCipherVecEncryptCfb, @function
+ 1182              	KCipherVecEncryptCfb:
+ 1183              	.LFB529:
+ 520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Cipher Feedback
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * CT = (FB = PT) ^ ENC (IV, EK))
+ 525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * PT = (FB = CT) ^ DEC (IV, DK)
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptCfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1184              		.loc 1 529 0
+ 1185              		.cfi_startproc
+ 1186 0a3a 55       		pushq	%rbp
+ 1187              	.LCFI42:
+ 1188              		.cfi_def_cfa_offset 16
+ 1189 0a3b 4889E5   		movq	%rsp, %rbp
+ 1190              		.cfi_offset 6, -16
+ 1191              	.LCFI43:
+ 1192              		.cfi_def_cfa_register 6
+ 1193 0a3e 4883EC50 		subq	$80, %rsp
+ 1194 0a42 48897DC8 		movq	%rdi, -56(%rbp)
+ 1195 0a46 488975C0 		movq	%rsi, -64(%rbp)
+ 1196 0a4a 488955B8 		movq	%rdx, -72(%rbp)
+ 1197 0a4e 894DB4   		movl	%ecx, -76(%rbp)
+ 530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1198              		.loc 1 536 0
+ 1199 0a51 488B45C8 		movq	-56(%rbp), %rax
+ 1200 0a55 488B4028 		movq	40(%rax), %rax
+ 1201 0a59 660F6F00 		movdqa	(%rax), %xmm0
+ 1202 0a5d F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1202      E0
+ 537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1203              		.loc 1 538 0
+ 1204 0a62 488B45C0 		movq	-64(%rbp), %rax
+ 1205 0a66 488945F0 		movq	%rax, -16(%rbp)
+ 1206 0a6a 488B45B8 		movq	-72(%rbp), %rax
+ 1207 0a6e 488945F8 		movq	%rax, -8(%rbp)
+ 1208 0a72 EB65     		jmp	.L83
+ 1209              	.L84:
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec = CMEMBER(EncryptV1)(self, ivec); 
+ 1210              		.loc 1 542 0
+
GAS LISTING /tmp/ccq6ONvw.s 			page 36
+
+
+ 1211 0a74 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1211      E0
+ 1212 0a79 488B45C8 		movq	-56(%rbp), %rax
+ 1213 0a7d 4889C7   		movq	%rax, %rdi
+ 1214 0a80 E8CDF9FF 		call	KCipherVecEncryptV1
+ 1214      FF
+ 1215 0a85 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1215      E0
+ 543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CipherVecIn (pin);
+ 1216              		.loc 1 543 0
+ 1217 0a8a 488B45F0 		movq	-16(%rbp), %rax
+ 1218 0a8e 4889C7   		movq	%rax, %rdi
+ 1219 0a91 E86AF5FF 		call	CipherVecIn
+ 1219      FF
+ 1220 0a96 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1220      D0
+ 544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec ^= cv;
+ 1221              		.loc 1 544 0
+ 1222 0a9b F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 1222      D0
+ 1223 0aa0 F30F6F4D 		movdqu	-32(%rbp), %xmm1
+ 1223      E0
+ 1224 0aa5 660FEFC1 		pxor	%xmm1, %xmm0
+ 1225 0aa9 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1225      E0
+ 545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (ivec, pout);
+ 1226              		.loc 1 545 0
+ 1227 0aae 488B45F8 		movq	-8(%rbp), %rax
+ 1228 0ab2 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1228      E0
+ 1229 0ab7 4889C7   		movq	%rax, %rdi
+ 1230 0aba E86CF5FF 		call	CipherVecOut
+ 1230      FF
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1231              		.loc 1 540 0
+ 1232 0abf 488B45C8 		movq	-56(%rbp), %rax
+ 1233 0ac3 8B4004   		movl	4(%rax), %eax
+ 1234 0ac6 89C0     		mov	%eax, %eax
+ 1235 0ac8 480145F0 		addq	%rax, -16(%rbp)
+ 1236 0acc 488B45C8 		movq	-56(%rbp), %rax
+ 1237 0ad0 8B4004   		movl	4(%rax), %eax
+ 1238 0ad3 89C0     		mov	%eax, %eax
+ 1239 0ad5 480145F8 		addq	%rax, -8(%rbp)
+ 1240              	.L83:
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 1241              		.loc 1 539 0
+ 1242 0ad9 837DB400 		cmpl	$0, -76(%rbp)
+ 1243 0add 0F95C0   		setne	%al
+ 1244 0ae0 836DB401 		subl	$1, -76(%rbp)
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1245              		.loc 1 538 0
+ 1246 0ae4 84C0     		testb	%al, %al
+ 1247 0ae6 758C     		jne	.L84
+ 546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1248              		.loc 1 548 0
+
GAS LISTING /tmp/ccq6ONvw.s 			page 37
+
+
+ 1249 0ae8 488B45C8 		movq	-56(%rbp), %rax
+ 1250 0aec 488B4028 		movq	40(%rax), %rax
+ 1251 0af0 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1251      E0
+ 1252 0af5 F30F7F00 		movdqu	%xmm0, (%rax)
+ 549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1253              		.loc 1 550 0
+ 1254 0af9 B8000000 		movl	$0, %eax
+ 1254      00
+ 551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1255              		.loc 1 554 0
+ 1256 0afe C9       		leave
+ 1257 0aff C3       		ret
+ 1258              		.cfi_endproc
+ 1259              	.LFE529:
+ 1260              		.size	KCipherVecEncryptCfb, .-KCipherVecEncryptCfb
+ 1261              		.type	KCipherVecDecryptCfb, @function
+ 1262              	KCipherVecDecryptCfb:
+ 1263              	.LFB530:
+ 555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptCfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1264              		.loc 1 559 0
+ 1265              		.cfi_startproc
+ 1266 0b00 55       		pushq	%rbp
+ 1267              	.LCFI44:
+ 1268              		.cfi_def_cfa_offset 16
+ 1269 0b01 4889E5   		movq	%rsp, %rbp
+ 1270              		.cfi_offset 6, -16
+ 1271              	.LCFI45:
+ 1272              		.cfi_def_cfa_register 6
+ 1273 0b04 4883EC50 		subq	$80, %rsp
+ 1274 0b08 48897DC8 		movq	%rdi, -56(%rbp)
+ 1275 0b0c 488975C0 		movq	%rsi, -64(%rbp)
+ 1276 0b10 488955B8 		movq	%rdx, -72(%rbp)
+ 1277 0b14 894DB4   		movl	%ecx, -76(%rbp)
+ 560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1278              		.loc 1 566 0
+ 1279 0b17 488B45C8 		movq	-56(%rbp), %rax
+ 1280 0b1b 488B4028 		movq	40(%rax), %rax
+ 1281 0b1f 660F6F00 		movdqa	(%rax), %xmm0
+ 1282 0b23 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1282      E0
+ 567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+
GAS LISTING /tmp/ccq6ONvw.s 			page 38
+
+
+ 1283              		.loc 1 568 0
+ 1284 0b28 488B45C0 		movq	-64(%rbp), %rax
+ 1285 0b2c 488945F0 		movq	%rax, -16(%rbp)
+ 1286 0b30 488B45B8 		movq	-72(%rbp), %rax
+ 1287 0b34 488945F8 		movq	%rax, -8(%rbp)
+ 1288 0b38 EB65     		jmp	.L87
+ 1289              	.L88:
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CMEMBER(EncryptV1)(self, ivec); 
+ 1290              		.loc 1 572 0
+ 1291 0b3a F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1291      E0
+ 1292 0b3f 488B45C8 		movq	-56(%rbp), %rax
+ 1293 0b43 4889C7   		movq	%rax, %rdi
+ 1294 0b46 E807F9FF 		call	KCipherVecEncryptV1
+ 1294      FF
+ 1295 0b4b F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1295      D0
+ 573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec = CipherVecIn (pin);
+ 1296              		.loc 1 573 0
+ 1297 0b50 488B45F0 		movq	-16(%rbp), %rax
+ 1298 0b54 4889C7   		movq	%rax, %rdi
+ 1299 0b57 E8A4F4FF 		call	CipherVecIn
+ 1299      FF
+ 1300 0b5c F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1300      E0
+ 574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv ^= ivec;
+ 1301              		.loc 1 574 0
+ 1302 0b61 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1302      E0
+ 1303 0b66 F30F6F4D 		movdqu	-48(%rbp), %xmm1
+ 1303      D0
+ 1304 0b6b 660FEFC1 		pxor	%xmm1, %xmm0
+ 1305 0b6f F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1305      D0
+ 575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (cv, pout);
+ 1306              		.loc 1 575 0
+ 1307 0b74 488B45F8 		movq	-8(%rbp), %rax
+ 1308 0b78 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 1308      D0
+ 1309 0b7d 4889C7   		movq	%rax, %rdi
+ 1310 0b80 E8A6F4FF 		call	CipherVecOut
+ 1310      FF
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1311              		.loc 1 570 0
+ 1312 0b85 488B45C8 		movq	-56(%rbp), %rax
+ 1313 0b89 8B4004   		movl	4(%rax), %eax
+ 1314 0b8c 89C0     		mov	%eax, %eax
+ 1315 0b8e 480145F0 		addq	%rax, -16(%rbp)
+ 1316 0b92 488B45C8 		movq	-56(%rbp), %rax
+ 1317 0b96 8B4004   		movl	4(%rax), %eax
+ 1318 0b99 89C0     		mov	%eax, %eax
+ 1319 0b9b 480145F8 		addq	%rax, -8(%rbp)
+ 1320              	.L87:
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 39
+
+
+ 1321              		.loc 1 569 0
+ 1322 0b9f 837DB400 		cmpl	$0, -76(%rbp)
+ 1323 0ba3 0F95C0   		setne	%al
+ 1324 0ba6 836DB401 		subl	$1, -76(%rbp)
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1325              		.loc 1 568 0
+ 1326 0baa 84C0     		testb	%al, %al
+ 1327 0bac 758C     		jne	.L88
+ 576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1328              		.loc 1 578 0
+ 1329 0bae 488B45C8 		movq	-56(%rbp), %rax
+ 1330 0bb2 488B4028 		movq	40(%rax), %rax
+ 1331 0bb6 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1331      E0
+ 1332 0bbb F30F7F00 		movdqu	%xmm0, (%rax)
+ 579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1333              		.loc 1 580 0
+ 1334 0bbf B8000000 		movl	$0, %eax
+ 1334      00
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1335              		.loc 1 584 0
+ 1336 0bc4 C9       		leave
+ 1337 0bc5 C3       		ret
+ 1338              		.cfi_endproc
+ 1339              	.LFE530:
+ 1340              		.size	KCipherVecDecryptCfb, .-KCipherVecDecryptCfb
+ 1341              		.type	KCipherVecEncryptOfb, @function
+ 1342              	KCipherVecEncryptOfb:
+ 1343              	.LFB531:
+ 585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Output Feedback
+ 589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * CT = PT ^ (FB = ENC (IV, EK))
+ 590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * PT = CT ^ (FB = DEC (IV, DK))
+ 591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptOfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1344              		.loc 1 594 0
+ 1345              		.cfi_startproc
+ 1346 0bc6 55       		pushq	%rbp
+ 1347              	.LCFI46:
+ 1348              		.cfi_def_cfa_offset 16
+ 1349 0bc7 4889E5   		movq	%rsp, %rbp
+ 1350              		.cfi_offset 6, -16
+ 1351              	.LCFI47:
+ 1352              		.cfi_def_cfa_register 6
+ 1353 0bca 4883EC50 		subq	$80, %rsp
+ 1354 0bce 48897DC8 		movq	%rdi, -56(%rbp)
+ 1355 0bd2 488975C0 		movq	%rsi, -64(%rbp)
+
GAS LISTING /tmp/ccq6ONvw.s 			page 40
+
+
+ 1356 0bd6 488955B8 		movq	%rdx, -72(%rbp)
+ 1357 0bda 894DB4   		movl	%ecx, -76(%rbp)
+ 595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1358              		.loc 1 601 0
+ 1359 0bdd 488B45C8 		movq	-56(%rbp), %rax
+ 1360 0be1 488B4028 		movq	40(%rax), %rax
+ 1361 0be5 660F6F00 		movdqa	(%rax), %xmm0
+ 1362 0be9 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1362      E0
+ 602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1363              		.loc 1 603 0
+ 1364 0bee 488B45C0 		movq	-64(%rbp), %rax
+ 1365 0bf2 488945F0 		movq	%rax, -16(%rbp)
+ 1366 0bf6 488B45B8 		movq	-72(%rbp), %rax
+ 1367 0bfa 488945F8 		movq	%rax, -8(%rbp)
+ 1368 0bfe EB65     		jmp	.L91
+ 1369              	.L92:
+ 604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec = CMEMBER(EncryptV1)(self, ivec); 
+ 1370              		.loc 1 607 0
+ 1371 0c00 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1371      E0
+ 1372 0c05 488B45C8 		movq	-56(%rbp), %rax
+ 1373 0c09 4889C7   		movq	%rax, %rdi
+ 1374 0c0c E841F8FF 		call	KCipherVecEncryptV1
+ 1374      FF
+ 1375 0c11 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1375      E0
+ 608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CipherVecIn (pin);
+ 1376              		.loc 1 608 0
+ 1377 0c16 488B45F0 		movq	-16(%rbp), %rax
+ 1378 0c1a 4889C7   		movq	%rax, %rdi
+ 1379 0c1d E8DEF3FF 		call	CipherVecIn
+ 1379      FF
+ 1380 0c22 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1380      D0
+ 609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv ^= ivec;
+ 1381              		.loc 1 609 0
+ 1382 0c27 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1382      E0
+ 1383 0c2c F30F6F4D 		movdqu	-48(%rbp), %xmm1
+ 1383      D0
+ 1384 0c31 660FEFC1 		pxor	%xmm1, %xmm0
+ 1385 0c35 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1385      D0
+ 610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (cv, pout);
+ 1386              		.loc 1 610 0
+ 1387 0c3a 488B45F8 		movq	-8(%rbp), %rax
+
GAS LISTING /tmp/ccq6ONvw.s 			page 41
+
+
+ 1388 0c3e F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 1388      D0
+ 1389 0c43 4889C7   		movq	%rax, %rdi
+ 1390 0c46 E8E0F3FF 		call	CipherVecOut
+ 1390      FF
+ 605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1391              		.loc 1 605 0
+ 1392 0c4b 488B45C8 		movq	-56(%rbp), %rax
+ 1393 0c4f 8B4004   		movl	4(%rax), %eax
+ 1394 0c52 89C0     		mov	%eax, %eax
+ 1395 0c54 480145F0 		addq	%rax, -16(%rbp)
+ 1396 0c58 488B45C8 		movq	-56(%rbp), %rax
+ 1397 0c5c 8B4004   		movl	4(%rax), %eax
+ 1398 0c5f 89C0     		mov	%eax, %eax
+ 1399 0c61 480145F8 		addq	%rax, -8(%rbp)
+ 1400              	.L91:
+ 604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 1401              		.loc 1 604 0
+ 1402 0c65 837DB400 		cmpl	$0, -76(%rbp)
+ 1403 0c69 0F95C0   		setne	%al
+ 1404 0c6c 836DB401 		subl	$1, -76(%rbp)
+ 603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1405              		.loc 1 603 0
+ 1406 0c70 84C0     		testb	%al, %al
+ 1407 0c72 758C     		jne	.L92
+ 611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1408              		.loc 1 613 0
+ 1409 0c74 488B45C8 		movq	-56(%rbp), %rax
+ 1410 0c78 488B4028 		movq	40(%rax), %rax
+ 1411 0c7c F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1411      E0
+ 1412 0c81 F30F7F00 		movdqu	%xmm0, (%rax)
+ 614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1413              		.loc 1 615 0
+ 1414 0c85 B8000000 		movl	$0, %eax
+ 1414      00
+ 616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1415              		.loc 1 619 0
+ 1416 0c8a C9       		leave
+ 1417 0c8b C3       		ret
+ 1418              		.cfi_endproc
+ 1419              	.LFE531:
+ 1420              		.size	KCipherVecEncryptOfb, .-KCipherVecEncryptOfb
+ 1421              		.type	KCipherVecDecryptOfb, @function
+ 1422              	KCipherVecDecryptOfb:
+ 1423              	.LFB532:
+ 620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptOfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+
GAS LISTING /tmp/ccq6ONvw.s 			page 42
+
+
+ 1424              		.loc 1 624 0
+ 1425              		.cfi_startproc
+ 1426 0c8c 55       		pushq	%rbp
+ 1427              	.LCFI48:
+ 1428              		.cfi_def_cfa_offset 16
+ 1429 0c8d 4889E5   		movq	%rsp, %rbp
+ 1430              		.cfi_offset 6, -16
+ 1431              	.LCFI49:
+ 1432              		.cfi_def_cfa_register 6
+ 1433 0c90 53       		pushq	%rbx
+ 1434 0c91 4883EC28 		subq	$40, %rsp
+ 1435 0c95 48897DE8 		movq	%rdi, -24(%rbp)
+ 1436 0c99 488975E0 		movq	%rsi, -32(%rbp)
+ 1437 0c9d 488955D8 		movq	%rdx, -40(%rbp)
+ 1438 0ca1 894DD4   		movl	%ecx, -44(%rbp)
+ 625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return CMEMBER(EncryptOfb)(self, in, out, block_count);
+ 1439              		.loc 1 625 0
+ 1440 0ca4 8B4DD4   		movl	-44(%rbp), %ecx
+ 1441 0ca7 488B55D8 		movq	-40(%rbp), %rdx
+ 1442 0cab 488B5DE0 		movq	-32(%rbp), %rbx
+ 1443              		.cfi_offset 3, -24
+ 1444 0caf 488B45E8 		movq	-24(%rbp), %rax
+ 1445 0cb3 4889DE   		movq	%rbx, %rsi
+ 1446 0cb6 4889C7   		movq	%rax, %rdi
+ 1447 0cb9 E808FFFF 		call	KCipherVecEncryptOfb
+ 1447      FF
+ 626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1448              		.loc 1 626 0
+ 1449 0cbe 4883C428 		addq	$40, %rsp
+ 1450 0cc2 5B       		popq	%rbx
+ 1451 0cc3 C9       		leave
+ 1452 0cc4 C3       		ret
+ 1453              		.cfi_endproc
+ 1454              	.LFE532:
+ 1455              		.size	KCipherVecDecryptOfb, .-KCipherVecDecryptOfb
+ 1456              		.type	KCipherVecEncryptCtr, @function
+ 1457              	KCipherVecEncryptCtr:
+ 1458              	.LFB533:
+ 627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* Counter
+ 630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * IV is a nonce and not re-used as FB
+ 631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * CT = PT ^ ENC (N, EK)
+ 632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * PT = CT ^ ENC (N, DK) 
+ 633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Note decrypt is encrypt.
+ 634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * nonce is a function that given an iv generates the next iv
+ 635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptCtr) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1459              		.loc 1 638 0
+ 1460              		.cfi_startproc
+ 1461 0cc5 55       		pushq	%rbp
+ 1462              	.LCFI50:
+ 1463              		.cfi_def_cfa_offset 16
+ 1464 0cc6 4889E5   		movq	%rsp, %rbp
+ 1465              		.cfi_offset 6, -16
+
GAS LISTING /tmp/ccq6ONvw.s 			page 43
+
+
+ 1466              	.LCFI51:
+ 1467              		.cfi_def_cfa_register 6
+ 1468 0cc9 4883EC20 		subq	$32, %rsp
+ 1469 0ccd 48897DF8 		movq	%rdi, -8(%rbp)
+ 1470 0cd1 488975F0 		movq	%rsi, -16(%rbp)
+ 1471 0cd5 488955E8 		movq	%rdx, -24(%rbp)
+ 1472 0cd9 894DE4   		movl	%ecx, -28(%rbp)
+ 639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 1473              		.loc 1 639 0
+ 1474 0cdc B97F0200 		movl	$639, %ecx
+ 1474      00
+ 1475 0ce1 488D1500 		leaq	__func__.6944(%rip), %rdx
+ 1475      000000
+ 1476 0ce8 488D3500 		leaq	.LC0(%rip), %rsi
+ 1476      000000
+ 1477 0cef BF030509 		movl	$-2029452029, %edi
+ 1477      87
+ 1478 0cf4 E8000000 		call	SetRCFileFuncLine at PLT
+ 1478      00
+ 640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1479              		.loc 1 640 0
+ 1480 0cf9 C9       		leave
+ 1481 0cfa C3       		ret
+ 1482              		.cfi_endproc
+ 1483              	.LFE533:
+ 1484              		.size	KCipherVecEncryptCtr, .-KCipherVecEncryptCtr
+ 1485              		.type	KCipherVecDecryptCtr, @function
+ 1486              	KCipherVecDecryptCtr:
+ 1487              	.LFB534:
+ 641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 643:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 644:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptCtr) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 645:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1488              		.loc 1 645 0
+ 1489              		.cfi_startproc
+ 1490 0cfb 55       		pushq	%rbp
+ 1491              	.LCFI52:
+ 1492              		.cfi_def_cfa_offset 16
+ 1493 0cfc 4889E5   		movq	%rsp, %rbp
+ 1494              		.cfi_offset 6, -16
+ 1495              	.LCFI53:
+ 1496              		.cfi_def_cfa_register 6
+ 1497 0cff 4883EC20 		subq	$32, %rsp
+ 1498 0d03 48897DF8 		movq	%rdi, -8(%rbp)
+ 1499 0d07 488975F0 		movq	%rsi, -16(%rbp)
+ 1500 0d0b 488955E8 		movq	%rdx, -24(%rbp)
+ 1501 0d0f 894DE4   		movl	%ecx, -28(%rbp)
+ 646:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 1502              		.loc 1 646 0
+ 1503 0d12 B9860200 		movl	$646, %ecx
+ 1503      00
+ 1504 0d17 488D1500 		leaq	__func__.6954(%rip), %rdx
+ 1504      000000
+ 1505 0d1e 488D3500 		leaq	.LC0(%rip), %rsi
+ 1505      000000
+ 1506 0d25 BF030509 		movl	$-2029452029, %edi
+
GAS LISTING /tmp/ccq6ONvw.s 			page 44
+
+
+ 1506      87
+ 1507 0d2a E8000000 		call	SetRCFileFuncLine at PLT
+ 1507      00
+ 647:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1508              		.loc 1 647 0
+ 1509 0d2f C9       		leave
+ 1510 0d30 C3       		ret
+ 1511              		.cfi_endproc
+ 1512              	.LFE534:
+ 1513              		.size	KCipherVecDecryptCtr, .-KCipherVecDecryptCtr
+ 1514              		.section	.data.rel.local,"aw", at progbits
+ 1515              		.align 32
+ 1516              		.type	KCipherVec_vt_v1, @object
+ 1517              		.size	KCipherVec_vt_v1, 176
+ 1518              	KCipherVec_vt_v1:
+ 1519 0000 01000000 		.long	1
+ 1520 0004 00000000 		.long	0
+ 1521 0008 00000000 		.quad	KCipherVecDestroy
+ 1521      00000000 
+ 1522 0010 00000000 		.quad	KCipherVecSetEncryptKey
+ 1522      00000000 
+ 1523 0018 00000000 		.quad	KCipherVecSetDecryptKey
+ 1523      00000000 
+ 1524 0020 00000000 		.quad	KCipherVecSetEncryptIvec
+ 1524      00000000 
+ 1525 0028 00000000 		.quad	KCipherVecSetDecryptIvec
+ 1525      00000000 
+ 1526 0030 00000000 		.quad	KCipherVecSetEncryptCounterFunc
+ 1526      00000000 
+ 1527 0038 00000000 		.quad	KCipherVecSetDecryptCounterFunc
+ 1527      00000000 
+ 1528 0040 00000000 		.quad	KCipherVecEncrypt
+ 1528      00000000 
+ 1529 0048 00000000 		.quad	KCipherVecDecrypt
+ 1529      00000000 
+ 1530 0050 00000000 		.quad	KCipherVecEncryptEcb
+ 1530      00000000 
+ 1531 0058 00000000 		.quad	KCipherVecDecryptEcb
+ 1531      00000000 
+ 1532 0060 00000000 		.quad	KCipherVecEncryptCbc
+ 1532      00000000 
+ 1533 0068 00000000 		.quad	KCipherVecDecryptCbc
+ 1533      00000000 
+ 1534 0070 00000000 		.quad	KCipherVecEncryptPcbc
+ 1534      00000000 
+ 1535 0078 00000000 		.quad	KCipherVecDecryptPcbc
+ 1535      00000000 
+ 1536 0080 00000000 		.quad	KCipherVecEncryptCfb
+ 1536      00000000 
+ 1537 0088 00000000 		.quad	KCipherVecDecryptCfb
+ 1537      00000000 
+ 1538 0090 00000000 		.quad	KCipherVecEncryptOfb
+ 1538      00000000 
+ 1539 0098 00000000 		.quad	KCipherVecDecryptOfb
+ 1539      00000000 
+ 1540 00a0 00000000 		.quad	KCipherVecEncryptCtr
+ 1540      00000000 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 45
+
+
+ 1541 00a8 00000000 		.quad	KCipherVecDecryptCtr
+ 1541      00000000 
+ 1542              		.text
+ 1543              		.type	KCipherVecAllocAes, @function
+ 1544              	KCipherVecAllocAes:
+ 1545              	.LFB535:
+ 648:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** struct KCipher_vt_v1 CMEMBER(_vt_v1) =
+ 651:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 652:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     { 1, 0 },
+ 653:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 654:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(Destroy),
+ 655:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(SetEncryptKey),
+ 656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(SetDecryptKey),
+ 657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(SetEncryptIvec),
+ 658:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(SetDecryptIvec),
+ 659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(SetEncryptCounterFunc),
+ 660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(SetDecryptCounterFunc),
+ 661:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(Encrypt),
+ 662:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(Decrypt),
+ 663:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(EncryptEcb),
+ 664:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(DecryptEcb),
+ 665:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(EncryptCbc),
+ 666:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(DecryptCbc),
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(EncryptPcbc),
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(DecryptPcbc),
+ 669:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(EncryptCfb),
+ 670:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(DecryptCfb),
+ 671:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(EncryptOfb),
+ 672:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(DecryptOfb),
+ 673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(EncryptCtr),
+ 674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(DecryptCtr)
+ 675:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** };
+ 676:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 677:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 678:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 679:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(AllocAes)(CIPHER_IMPL ** pobj,
+ 680:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                        const KBlockCipher * block_cipher)
+ 681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1546              		.loc 1 681 0
+ 1547              		.cfi_startproc
+ 1548 0d31 55       		pushq	%rbp
+ 1549              	.LCFI54:
+ 1550              		.cfi_def_cfa_offset 16
+ 1551 0d32 4889E5   		movq	%rsp, %rbp
+ 1552              		.cfi_offset 6, -16
+ 1553              	.LCFI55:
+ 1554              		.cfi_def_cfa_register 6
+ 1555 0d35 4883EC20 		subq	$32, %rsp
+ 1556 0d39 48897DE8 		movq	%rdi, -24(%rbp)
+ 1557 0d3d 488975E0 		movq	%rsi, -32(%rbp)
+ 682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherAes * obj;
+ 683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     obj = calloc (1, sizeof (*obj));
+ 1558              		.loc 1 684 0
+ 1559 0d41 BE700200 		movl	$624, %esi
+
GAS LISTING /tmp/ccq6ONvw.s 			page 46
+
+
+ 1559      00
+ 1560 0d46 BF010000 		movl	$1, %edi
+ 1560      00
+ 1561 0d4b E8000000 		call	calloc at PLT
+ 1561      00
+ 1562 0d50 488945F8 		movq	%rax, -8(%rbp)
+ 685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *pobj = (CIPHER_IMPL*)obj;
+ 1563              		.loc 1 685 0
+ 1564 0d54 488B55F8 		movq	-8(%rbp), %rdx
+ 1565 0d58 488B45E8 		movq	-24(%rbp), %rax
+ 1566 0d5c 488910   		movq	%rdx, (%rax)
+ 686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return (obj ? 0 : RC (rcKrypto, rcCipher, rcConstructing, rcMemory, rcExhausted));
+ 1567              		.loc 1 687 0
+ 1568 0d5f 48837DF8 		cmpq	$0, -8(%rbp)
+ 1568      00
+ 1569 0d64 751F     		jne	.L101
+ 1570 0d66 B9AF0200 		movl	$687, %ecx
+ 1570      00
+ 1571 0d6b 488D1500 		leaq	__func__.6964(%rip), %rdx
+ 1571      000000
+ 1572 0d72 488D3500 		leaq	.LC0(%rip), %rsi
+ 1572      000000
+ 1573 0d79 BF539000 		movl	$-2030006189, %edi
+ 1573      87
+ 1574 0d7e E8000000 		call	SetRCFileFuncLine at PLT
+ 1574      00
+ 1575 0d83 EB05     		jmp	.L102
+ 1576              	.L101:
+ 1577 0d85 B8000000 		movl	$0, %eax
+ 1577      00
+ 1578              	.L102:
+ 688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1579              		.loc 1 688 0
+ 1580 0d8a C9       		leave
+ 1581 0d8b C3       		ret
+ 1582              		.cfi_endproc
+ 1583              	.LFE535:
+ 1584              		.size	KCipherVecAllocAes, .-KCipherVecAllocAes
+ 1585              		.type	KCipherVecInitAes, @function
+ 1586              	KCipherVecInitAes:
+ 1587              	.LFB536:
+ 689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 691:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 692:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(InitAes) (CIPHER_IMPL * self,
+ 693:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                       const KBlockCipher * block_cipher)
+ 694:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1588              		.loc 1 694 0
+ 1589              		.cfi_startproc
+ 1590 0d8c 55       		pushq	%rbp
+ 1591              	.LCFI56:
+ 1592              		.cfi_def_cfa_offset 16
+ 1593 0d8d 4889E5   		movq	%rsp, %rbp
+ 1594              		.cfi_offset 6, -16
+ 1595              	.LCFI57:
+ 1596              		.cfi_def_cfa_register 6
+
GAS LISTING /tmp/ccq6ONvw.s 			page 47
+
+
+ 1597 0d90 4883EC20 		subq	$32, %rsp
+ 1598 0d94 48897DE8 		movq	%rdi, -24(%rbp)
+ 1599 0d98 488975E0 		movq	%rsi, -32(%rbp)
+ 695:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     KCipher * dad = &self->dad;
+ 1600              		.loc 1 695 0
+ 1601 0d9c 488B45E8 		movq	-24(%rbp), %rax
+ 1602 0da0 488945F0 		movq	%rax, -16(%rbp)
+ 696:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherAes * aes = (struct CipherAes*)self;
+ 1603              		.loc 1 696 0
+ 1604 0da4 488B45E8 		movq	-24(%rbp), %rax
+ 1605 0da8 488945F8 		movq	%rax, -8(%rbp)
+ 697:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 698:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     KCipherInit (dad, sizeof (CipherVec),
+ 1606              		.loc 1 698 0
+ 1607 0dac 488B45F0 		movq	-16(%rbp), %rax
+ 1608 0db0 488B1500 		movq	KCipherVecClassName at GOTPCREL(%rip), %rdx
+ 1608      000000
+ 1609 0db7 4889D1   		movq	%rdx, %rcx
+ 1610 0dba 488D1500 		leaq	KCipherVec_vt_v1(%rip), %rdx
+ 1610      000000
+ 1611 0dc1 BE100000 		movl	$16, %esi
+ 1611      00
+ 1612 0dc6 4889C7   		movq	%rax, %rdi
+ 1613 0dc9 E8000000 		call	KCipherInit at PLT
+ 1613      00
+ 699:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                  (const KCipher_vt*)&CMEMBER(_vt_v1),
+ 700:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                  CMEMBER(ClassName));
+ 701:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 702:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->encrypt_key = &aes->e_key;
+ 1614              		.loc 1 702 0
+ 1615 0dce 488B45F8 		movq	-8(%rbp), %rax
+ 1616 0dd2 488D5050 		leaq	80(%rax), %rdx
+ 1617 0dd6 488B45F0 		movq	-16(%rbp), %rax
+ 1618 0dda 48895018 		movq	%rdx, 24(%rax)
+ 703:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->decrypt_key = &aes->d_key;
+ 1619              		.loc 1 703 0
+ 1620 0dde 488B45F8 		movq	-8(%rbp), %rax
+ 1621 0de2 488D9050 		leaq	336(%rax), %rdx
+ 1621      010000
+ 1622 0de9 488B45F0 		movq	-16(%rbp), %rax
+ 1623 0ded 48895020 		movq	%rdx, 32(%rax)
+ 704:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->encrypt_ivec = &aes->e_ivec;
+ 1624              		.loc 1 704 0
+ 1625 0df1 488B45F8 		movq	-8(%rbp), %rax
+ 1626 0df5 488D9050 		leaq	592(%rax), %rdx
+ 1626      020000
+ 1627 0dfc 488B45F0 		movq	-16(%rbp), %rax
+ 1628 0e00 48895028 		movq	%rdx, 40(%rax)
+ 705:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->decrypt_ivec = &aes->d_ivec;
+ 1629              		.loc 1 705 0
+ 1630 0e04 488B45F8 		movq	-8(%rbp), %rax
+ 1631 0e08 488D9060 		leaq	608(%rax), %rdx
+ 1631      020000
+ 1632 0e0f 488B45F0 		movq	-16(%rbp), %rax
+ 1633 0e13 48895030 		movq	%rdx, 48(%rax)
+ 706:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 707:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     self->block_cipher = &block_cipher->vec;
+
GAS LISTING /tmp/ccq6ONvw.s 			page 48
+
+
+ 1634              		.loc 1 707 0
+ 1635 0e17 488B55E0 		movq	-32(%rbp), %rdx
+ 1636 0e1b 488B45E8 		movq	-24(%rbp), %rax
+ 1637 0e1f 48895048 		movq	%rdx, 72(%rax)
+ 708:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 709:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1638              		.loc 1 709 0
+ 1639 0e23 B8000000 		movl	$0, %eax
+ 1639      00
+ 710:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1640              		.loc 1 710 0
+ 1641 0e28 C9       		leave
+ 1642 0e29 C3       		ret
+ 1643              		.cfi_endproc
+ 1644              	.LFE536:
+ 1645              		.size	KCipherVecInitAes, .-KCipherVecInitAes
+ 1646              		.type	KCipherVecAllocNull, @function
+ 1647              	KCipherVecAllocNull:
+ 1648              	.LFB537:
+ 711:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 712:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 713:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 714:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(AllocNull)(CIPHER_IMPL ** pobj,
+ 715:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                         const KBlockCipher * block_cipher)
+ 716:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1649              		.loc 1 716 0
+ 1650              		.cfi_startproc
+ 1651 0e2a 55       		pushq	%rbp
+ 1652              	.LCFI58:
+ 1653              		.cfi_def_cfa_offset 16
+ 1654 0e2b 4889E5   		movq	%rsp, %rbp
+ 1655              		.cfi_offset 6, -16
+ 1656              	.LCFI59:
+ 1657              		.cfi_def_cfa_register 6
+ 1658 0e2e 4883EC20 		subq	$32, %rsp
+ 1659 0e32 48897DE8 		movq	%rdi, -24(%rbp)
+ 1660 0e36 488975E0 		movq	%rsi, -32(%rbp)
+ 717:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherNull * obj;
+ 718:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 719:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     obj = calloc (1, sizeof (*obj));
+ 1661              		.loc 1 719 0
+ 1662 0e3a BE700000 		movl	$112, %esi
+ 1662      00
+ 1663 0e3f BF010000 		movl	$1, %edi
+ 1663      00
+ 1664 0e44 E8000000 		call	calloc at PLT
+ 1664      00
+ 1665 0e49 488945F8 		movq	%rax, -8(%rbp)
+ 720:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *pobj = (CIPHER_IMPL*)obj;
+ 1666              		.loc 1 720 0
+ 1667 0e4d 488B55F8 		movq	-8(%rbp), %rdx
+ 1668 0e51 488B45E8 		movq	-24(%rbp), %rax
+ 1669 0e55 488910   		movq	%rdx, (%rax)
+ 721:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 722:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return (obj ? 0 : RC (rcKrypto, rcCipher, rcConstructing, rcMemory, rcExhausted));
+ 1670              		.loc 1 722 0
+ 1671 0e58 48837DF8 		cmpq	$0, -8(%rbp)
+
GAS LISTING /tmp/ccq6ONvw.s 			page 49
+
+
+ 1671      00
+ 1672 0e5d 751F     		jne	.L107
+ 1673 0e5f B9D20200 		movl	$722, %ecx
+ 1673      00
+ 1674 0e64 488D1500 		leaq	__func__.6991(%rip), %rdx
+ 1674      000000
+ 1675 0e6b 488D3500 		leaq	.LC0(%rip), %rsi
+ 1675      000000
+ 1676 0e72 BF539000 		movl	$-2030006189, %edi
+ 1676      87
+ 1677 0e77 E8000000 		call	SetRCFileFuncLine at PLT
+ 1677      00
+ 1678 0e7c EB05     		jmp	.L108
+ 1679              	.L107:
+ 1680 0e7e B8000000 		movl	$0, %eax
+ 1680      00
+ 1681              	.L108:
+ 723:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1682              		.loc 1 723 0
+ 1683 0e83 C9       		leave
+ 1684 0e84 C3       		ret
+ 1685              		.cfi_endproc
+ 1686              	.LFE537:
+ 1687              		.size	KCipherVecAllocNull, .-KCipherVecAllocNull
+ 1688              		.type	KCipherVecInitNull, @function
+ 1689              	KCipherVecInitNull:
+ 1690              	.LFB538:
+ 724:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 725:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 726:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 727:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(InitNull) (CIPHER_IMPL * self,
+ 728:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                         const KBlockCipher * block_cipher)
+ 729:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1691              		.loc 1 729 0
+ 1692              		.cfi_startproc
+ 1693 0e85 55       		pushq	%rbp
+ 1694              	.LCFI60:
+ 1695              		.cfi_def_cfa_offset 16
+ 1696 0e86 4889E5   		movq	%rsp, %rbp
+ 1697              		.cfi_offset 6, -16
+ 1698              	.LCFI61:
+ 1699              		.cfi_def_cfa_register 6
+ 1700 0e89 4883EC20 		subq	$32, %rsp
+ 1701 0e8d 48897DE8 		movq	%rdi, -24(%rbp)
+ 1702 0e91 488975E0 		movq	%rsi, -32(%rbp)
+ 730:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     KCipher * dad = &self->dad;
+ 1703              		.loc 1 730 0
+ 1704 0e95 488B45E8 		movq	-24(%rbp), %rax
+ 1705 0e99 488945F0 		movq	%rax, -16(%rbp)
+ 731:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherNull * null = (CipherNull*)self;
+ 1706              		.loc 1 731 0
+ 1707 0e9d 488B45E8 		movq	-24(%rbp), %rax
+ 1708 0ea1 488945F8 		movq	%rax, -8(%rbp)
+ 732:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 733:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     KCipherInit (dad, sizeof (CipherVec),
+ 1709              		.loc 1 733 0
+ 1710 0ea5 488B45F0 		movq	-16(%rbp), %rax
+
GAS LISTING /tmp/ccq6ONvw.s 			page 50
+
+
+ 1711 0ea9 488B1500 		movq	KCipherVecClassName at GOTPCREL(%rip), %rdx
+ 1711      000000
+ 1712 0eb0 4889D1   		movq	%rdx, %rcx
+ 1713 0eb3 488D1500 		leaq	KCipherVec_vt_v1(%rip), %rdx
+ 1713      000000
+ 1714 0eba BE100000 		movl	$16, %esi
+ 1714      00
+ 1715 0ebf 4889C7   		movq	%rax, %rdi
+ 1716 0ec2 E8000000 		call	KCipherInit at PLT
+ 1716      00
+ 734:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                  (const KCipher_vt*)&CMEMBER(_vt_v1),
+ 735:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                  CMEMBER(ClassName));
+ 736:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 737:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->encrypt_key = &null->e_ivec;
+ 1717              		.loc 1 737 0
+ 1718 0ec7 488B45F8 		movq	-8(%rbp), %rax
+ 1719 0ecb 488D5050 		leaq	80(%rax), %rdx
+ 1720 0ecf 488B45F0 		movq	-16(%rbp), %rax
+ 1721 0ed3 48895018 		movq	%rdx, 24(%rax)
+ 738:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->decrypt_key = &null->d_ivec;
+ 1722              		.loc 1 738 0
+ 1723 0ed7 488B45F8 		movq	-8(%rbp), %rax
+ 1724 0edb 488D5060 		leaq	96(%rax), %rdx
+ 1725 0edf 488B45F0 		movq	-16(%rbp), %rax
+ 1726 0ee3 48895020 		movq	%rdx, 32(%rax)
+ 739:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->encrypt_ivec = &null->e_ivec;
+ 1727              		.loc 1 739 0
+ 1728 0ee7 488B45F8 		movq	-8(%rbp), %rax
+ 1729 0eeb 488D5050 		leaq	80(%rax), %rdx
+ 1730 0eef 488B45F0 		movq	-16(%rbp), %rax
+ 1731 0ef3 48895028 		movq	%rdx, 40(%rax)
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->decrypt_ivec = &null->d_ivec;
+ 1732              		.loc 1 740 0
+ 1733 0ef7 488B45F8 		movq	-8(%rbp), %rax
+ 1734 0efb 488D5060 		leaq	96(%rax), %rdx
+ 1735 0eff 488B45F0 		movq	-16(%rbp), %rax
+ 1736 0f03 48895030 		movq	%rdx, 48(%rax)
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     self->block_cipher = &block_cipher->vec;
+ 1737              		.loc 1 742 0
+ 1738 0f07 488B55E0 		movq	-32(%rbp), %rdx
+ 1739 0f0b 488B45E8 		movq	-24(%rbp), %rax
+ 1740 0f0f 48895048 		movq	%rdx, 72(%rax)
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1741              		.loc 1 744 0
+ 1742 0f13 B8000000 		movl	$0, %eax
+ 1742      00
+ 745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1743              		.loc 1 745 0
+ 1744 0f18 C9       		leave
+ 1745 0f19 C3       		ret
+ 1746              		.cfi_endproc
+ 1747              	.LFE538:
+ 1748              		.size	KCipherVecInitNull, .-KCipherVecInitNull
+ 1749              	.globl KCipherVecMake
+ 1750              		.type	KCipherVecMake, @function
+
GAS LISTING /tmp/ccq6ONvw.s 			page 51
+
+
+ 1751              	KCipherVecMake:
+ 1752              	.LFB539:
+ 746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(Make) (KCipher ** new_obj, kcipher_type type)
+ 749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1753              		.loc 1 749 0
+ 1754              		.cfi_startproc
+ 1755 0f1a 55       		pushq	%rbp
+ 1756              	.LCFI62:
+ 1757              		.cfi_def_cfa_offset 16
+ 1758 0f1b 4889E5   		movq	%rsp, %rbp
+ 1759              		.cfi_offset 6, -16
+ 1760              	.LCFI63:
+ 1761              		.cfi_def_cfa_register 6
+ 1762 0f1e 4883EC30 		subq	$48, %rsp
+ 1763 0f22 48897DD8 		movq	%rdi, -40(%rbp)
+ 1764 0f26 8975D4   		movl	%esi, -44(%rbp)
+ 750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     rc_t rc;
+ 751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     KBlockCipher * block_cipher;
+ 752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     if (new_obj == NULL)
+ 1765              		.loc 1 753 0
+ 1766 0f29 48837DD8 		cmpq	$0, -40(%rbp)
+ 1766      00
+ 1767 0f2e 7522     		jne	.L113
+ 754:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         return RC (rcKrypto, rcCipher, rcConstructing, rcSelf, rcNull);
+ 1768              		.loc 1 754 0
+ 1769 0f30 B9F20200 		movl	$754, %ecx
+ 1769      00
+ 1770 0f35 488D1500 		leaq	__func__.7019(%rip), %rdx
+ 1770      000000
+ 1771 0f3c 488D3500 		leaq	.LC0(%rip), %rsi
+ 1771      000000
+ 1772 0f43 BF878F00 		movl	$-2030006393, %edi
+ 1772      87
+ 1773 0f48 E8000000 		call	SetRCFileFuncLine at PLT
+ 1773      00
+ 1774 0f4d E9280100 		jmp	.L114
+ 1774      00
+ 1775              	.L113:
+ 755:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 756:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *new_obj = NULL;
+ 1776              		.loc 1 756 0
+ 1777 0f52 488B45D8 		movq	-40(%rbp), %rax
+ 1778 0f56 48C70000 		movq	$0, (%rax)
+ 1778      000000
+ 757:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 758:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     switch (type)
+ 1779              		.loc 1 758 0
+ 1780 0f5d 8B45D4   		movl	-44(%rbp), %eax
+ 1781 0f60 85C0     		testl	%eax, %eax
+ 1782 0f62 7427     		je	.L116
+ 1783 0f64 83F801   		cmpl	$1, %eax
+ 1784 0f67 7433     		je	.L117
+ 759:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 760:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     default:
+
GAS LISTING /tmp/ccq6ONvw.s 			page 52
+
+
+ 761:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         return RC (rcKrypto, rcCipher, rcConstructing, rcParam, rcInvalid);
+ 1785              		.loc 1 761 0
+ 1786 0f69 B9F90200 		movl	$761, %ecx
+ 1786      00
+ 1787 0f6e 488D1500 		leaq	__func__.7019(%rip), %rdx
+ 1787      000000
+ 1788 0f75 488D3500 		leaq	.LC0(%rip), %rsi
+ 1788      000000
+ 1789 0f7c BFCA8F00 		movl	$-2030006326, %edi
+ 1789      87
+ 1790 0f81 E8000000 		call	SetRCFileFuncLine at PLT
+ 1790      00
+ 1791 0f86 E9EF0000 		jmp	.L114
+ 1791      00
+ 1792              	.L116:
+ 762:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 763:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     case kcipher_null:
+ 764:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = NULLBCMEMBER(Make)(&block_cipher);
+ 1793              		.loc 1 764 0
+ 1794 0f8b 488D45F0 		leaq	-16(%rbp), %rax
+ 1795 0f8f 4889C7   		movq	%rax, %rdi
+ 1796 0f92 E8000000 		call	KNullBlockCipherVecMake at PLT
+ 1796      00
+ 1797 0f97 8945FC   		movl	%eax, -4(%rbp)
+ 765:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 1798              		.loc 1 765 0
+ 1799 0f9a EB0F     		jmp	.L118
+ 1800              	.L117:
+ 766:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 767:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     case kcipher_AES:
+ 768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = AESBCMEMBER(Make)(&block_cipher);
+ 1801              		.loc 1 768 0
+ 1802 0f9c 488D45F0 		leaq	-16(%rbp), %rax
+ 1803 0fa0 4889C7   		movq	%rax, %rdi
+ 1804 0fa3 E8000000 		call	KAESBlockCipherVecMake at PLT
+ 1804      00
+ 1805 0fa8 8945FC   		movl	%eax, -4(%rbp)
+ 1806              	.L118:
+ 769:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 770:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 771:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 772:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     if (rc == 0)
+ 1807              		.loc 1 772 0
+ 1808 0fab 837DFC00 		cmpl	$0, -4(%rbp)
+ 1809 0faf 0F85C200 		jne	.L119
+ 1809      0000
+ 1810              	.LBB5:
+ 773:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 774:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CIPHER_IMPL * obj;
+ 775:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 776:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         switch (type)
+ 1811              		.loc 1 776 0
+ 1812 0fb5 8B45D4   		movl	-44(%rbp), %eax
+ 1813 0fb8 85C0     		testl	%eax, %eax
+ 1814 0fba 740A     		je	.L120
+ 1815 0fbc 83F801   		cmpl	$1, %eax
+ 1816 0fbf 745F     		je	.L121
+
GAS LISTING /tmp/ccq6ONvw.s 			page 53
+
+
+ 1817 0fc1 E9B10000 		jmp	.L119
+ 1817      00
+ 1818              	.L120:
+ 777:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         {
+ 778:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         case kcipher_null:
+ 779:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             rc = CMEMBER(AllocNull) (&obj, block_cipher);
+ 1819              		.loc 1 779 0
+ 1820 0fc6 488B55F0 		movq	-16(%rbp), %rdx
+ 1821 0fca 488D45E8 		leaq	-24(%rbp), %rax
+ 1822 0fce 4889D6   		movq	%rdx, %rsi
+ 1823 0fd1 4889C7   		movq	%rax, %rdi
+ 1824 0fd4 E851FEFF 		call	KCipherVecAllocNull
+ 1824      FF
+ 1825 0fd9 8945FC   		movl	%eax, -4(%rbp)
+ 780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             if (rc == 0)
+ 1826              		.loc 1 780 0
+ 1827 0fdc 837DFC00 		cmpl	$0, -4(%rbp)
+ 1828 0fe0 0F859000 		jne	.L126
+ 1828      0000
+ 781:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             {
+ 782:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                 rc = CMEMBER(InitNull) (obj, block_cipher);
+ 1829              		.loc 1 782 0
+ 1830 0fe6 488B55F0 		movq	-16(%rbp), %rdx
+ 1831 0fea 488B45E8 		movq	-24(%rbp), %rax
+ 1832 0fee 4889D6   		movq	%rdx, %rsi
+ 1833 0ff1 4889C7   		movq	%rax, %rdi
+ 1834 0ff4 E88CFEFF 		call	KCipherVecInitNull
+ 1834      FF
+ 1835 0ff9 8945FC   		movl	%eax, -4(%rbp)
+ 783:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                 if (rc == 0)
+ 1836              		.loc 1 783 0
+ 1837 0ffc 837DFC00 		cmpl	$0, -4(%rbp)
+ 1838 1000 7510     		jne	.L123
+ 784:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                     *new_obj = (KCipher*)obj;
+ 1839              		.loc 1 784 0
+ 1840 1002 488B45E8 		movq	-24(%rbp), %rax
+ 1841 1006 4889C2   		movq	%rax, %rdx
+ 1842 1009 488B45D8 		movq	-40(%rbp), %rax
+ 1843 100d 488910   		movq	%rdx, (%rax)
+ 785:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                 else
+ 786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                     free (obj);
+ 787:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             }
+ 788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             break;
+ 1844              		.loc 1 788 0
+ 1845 1010 EB65     		jmp	.L119
+ 1846              	.L123:
+ 786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                     free (obj);
+ 1847              		.loc 1 786 0
+ 1848 1012 488B45E8 		movq	-24(%rbp), %rax
+ 1849 1016 4889C7   		movq	%rax, %rdi
+ 1850 1019 E8000000 		call	free at PLT
+ 1850      00
+ 1851              		.loc 1 788 0
+ 1852 101e EB57     		jmp	.L119
+ 1853              	.L121:
+ 789:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         case kcipher_AES:
+ 790:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             rc = CMEMBER(AllocAes) (&obj, block_cipher);
+
GAS LISTING /tmp/ccq6ONvw.s 			page 54
+
+
+ 1854              		.loc 1 790 0
+ 1855 1020 488B55F0 		movq	-16(%rbp), %rdx
+ 1856 1024 488D45E8 		leaq	-24(%rbp), %rax
+ 1857 1028 4889D6   		movq	%rdx, %rsi
+ 1858 102b 4889C7   		movq	%rax, %rdi
+ 1859 102e E8FEFCFF 		call	KCipherVecAllocAes
+ 1859      FF
+ 1860 1033 8945FC   		movl	%eax, -4(%rbp)
+ 791:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             if (rc == 0)
+ 1861              		.loc 1 791 0
+ 1862 1036 837DFC00 		cmpl	$0, -4(%rbp)
+ 1863 103a 753B     		jne	.L119
+ 792:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             {
+ 793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                 rc = CMEMBER(InitAes) (obj, block_cipher);
+ 1864              		.loc 1 793 0
+ 1865 103c 488B55F0 		movq	-16(%rbp), %rdx
+ 1866 1040 488B45E8 		movq	-24(%rbp), %rax
+ 1867 1044 4889D6   		movq	%rdx, %rsi
+ 1868 1047 4889C7   		movq	%rax, %rdi
+ 1869 104a E83DFDFF 		call	KCipherVecInitAes
+ 1869      FF
+ 1870 104f 8945FC   		movl	%eax, -4(%rbp)
+ 794:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                 if (rc == 0)
+ 1871              		.loc 1 794 0
+ 1872 1052 837DFC00 		cmpl	$0, -4(%rbp)
+ 1873 1056 7510     		jne	.L124
+ 795:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                     *new_obj = (KCipher*)obj;
+ 1874              		.loc 1 795 0
+ 1875 1058 488B45E8 		movq	-24(%rbp), %rax
+ 1876 105c 4889C2   		movq	%rax, %rdx
+ 1877 105f 488B45D8 		movq	-40(%rbp), %rax
+ 1878 1063 488910   		movq	%rdx, (%rax)
+ 1879 1066 EB0F     		jmp	.L119
+ 1880              	.L124:
+ 796:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                 else
+ 797:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                     free (obj);
+ 1881              		.loc 1 797 0
+ 1882 1068 488B45E8 		movq	-24(%rbp), %rax
+ 1883 106c 4889C7   		movq	%rax, %rdi
+ 1884 106f E8000000 		call	free at PLT
+ 1884      00
+ 1885 1074 EB01     		jmp	.L119
+ 1886              	.L126:
+ 788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             break;
+ 1887              		.loc 1 788 0
+ 1888 1076 90       		nop
+ 1889              	.L119:
+ 1890              	.LBE5:
+ 798:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             }
+ 799:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         default:
+ 800:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             /* can't really get here */
+ 801:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             break;
+ 802:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         }
+ 803:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return rc;
+ 1891              		.loc 1 804 0
+ 1892 1077 8B45FC   		movl	-4(%rbp), %eax
+
GAS LISTING /tmp/ccq6ONvw.s 			page 55
+
+
+ 1893              	.L114:
+ 805:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1894              		.loc 1 805 0
+ 1895 107a C9       		leave
+ 1896 107b C3       		ret
+ 1897              		.cfi_endproc
+ 1898              	.LFE539:
+ 1899              		.size	KCipherVecMake, .-KCipherVecMake
+ 1900              		.section	.rodata
+ 1901              		.type	__func__.7019, @object
+ 1902              		.size	__func__.7019, 15
+ 1903              	__func__.7019:
+ 1904 006e 4B436970 		.string	"KCipherVecMake"
+ 1904      68657256 
+ 1904      65634D61 
+ 1904      6B6500
+ 1905              		.type	__PRETTY_FUNCTION__.7018, @object
+ 1906              		.size	__PRETTY_FUNCTION__.7018, 15
+ 1907              	__PRETTY_FUNCTION__.7018:
+ 1908 007d 4B436970 		.string	"KCipherVecMake"
+ 1908      68657256 
+ 1908      65634D61 
+ 1908      6B6500
+ 1909 008c 00000000 		.align 16
+ 1910              		.type	__func__.6991, @object
+ 1911              		.size	__func__.6991, 20
+ 1912              	__func__.6991:
+ 1913 0090 4B436970 		.string	"KCipherVecAllocNull"
+ 1913      68657256 
+ 1913      6563416C 
+ 1913      6C6F634E 
+ 1913      756C6C00 
+ 1914 00a4 00000000 		.align 16
+ 1914      00000000 
+ 1914      00000000 
+ 1915              		.type	__PRETTY_FUNCTION__.6990, @object
+ 1916              		.size	__PRETTY_FUNCTION__.6990, 20
+ 1917              	__PRETTY_FUNCTION__.6990:
+ 1918 00b0 4B436970 		.string	"KCipherVecAllocNull"
+ 1918      68657256 
+ 1918      6563416C 
+ 1918      6C6F634E 
+ 1918      756C6C00 
+ 1919 00c4 00000000 		.align 16
+ 1919      00000000 
+ 1919      00000000 
+ 1920              		.type	__func__.6964, @object
+ 1921              		.size	__func__.6964, 19
+ 1922              	__func__.6964:
+ 1923 00d0 4B436970 		.string	"KCipherVecAllocAes"
+ 1923      68657256 
+ 1923      6563416C 
+ 1923      6C6F6341 
+ 1923      657300
+ 1924 00e3 00000000 		.align 16
+ 1924      00000000 
+ 1924      00000000 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 56
+
+
+ 1924      00
+ 1925              		.type	__PRETTY_FUNCTION__.6963, @object
+ 1926              		.size	__PRETTY_FUNCTION__.6963, 19
+ 1927              	__PRETTY_FUNCTION__.6963:
+ 1928 00f0 4B436970 		.string	"KCipherVecAllocAes"
+ 1928      68657256 
+ 1928      6563416C 
+ 1928      6C6F6341 
+ 1928      657300
+ 1929 0103 00000000 		.align 16
+ 1929      00000000 
+ 1929      00000000 
+ 1929      00
+ 1930              		.type	__func__.6954, @object
+ 1931              		.size	__func__.6954, 21
+ 1932              	__func__.6954:
+ 1933 0110 4B436970 		.string	"KCipherVecDecryptCtr"
+ 1933      68657256 
+ 1933      65634465 
+ 1933      63727970 
+ 1933      74437472 
+ 1934 0125 00000000 		.align 16
+ 1934      00000000 
+ 1934      000000
+ 1935              		.type	__PRETTY_FUNCTION__.6953, @object
+ 1936              		.size	__PRETTY_FUNCTION__.6953, 21
+ 1937              	__PRETTY_FUNCTION__.6953:
+ 1938 0130 4B436970 		.string	"KCipherVecDecryptCtr"
+ 1938      68657256 
+ 1938      65634465 
+ 1938      63727970 
+ 1938      74437472 
+ 1939 0145 00000000 		.align 16
+ 1939      00000000 
+ 1939      000000
+ 1940              		.type	__func__.6944, @object
+ 1941              		.size	__func__.6944, 21
+ 1942              	__func__.6944:
+ 1943 0150 4B436970 		.string	"KCipherVecEncryptCtr"
+ 1943      68657256 
+ 1943      6563456E 
+ 1943      63727970 
+ 1943      74437472 
+ 1944 0165 00000000 		.align 16
+ 1944      00000000 
+ 1944      000000
+ 1945              		.type	__PRETTY_FUNCTION__.6943, @object
+ 1946              		.size	__PRETTY_FUNCTION__.6943, 21
+ 1947              	__PRETTY_FUNCTION__.6943:
+ 1948 0170 4B436970 		.string	"KCipherVecEncryptCtr"
+ 1948      68657256 
+ 1948      6563456E 
+ 1948      63727970 
+ 1948      74437472 
+ 1949 0185 00000000 		.align 16
+ 1949      00000000 
+ 1949      000000
+
GAS LISTING /tmp/ccq6ONvw.s 			page 57
+
+
+ 1950              		.type	__func__.6710, @object
+ 1951              		.size	__func__.6710, 18
+ 1952              	__func__.6710:
+ 1953 0190 4B436970 		.string	"KCipherVecDecrypt"
+ 1953      68657256 
+ 1953      65634465 
+ 1953      63727970 
+ 1953      7400
+ 1954 01a2 00000000 		.align 16
+ 1954      00000000 
+ 1954      00000000 
+ 1954      0000
+ 1955              		.type	__PRETTY_FUNCTION__.6709, @object
+ 1956              		.size	__PRETTY_FUNCTION__.6709, 18
+ 1957              	__PRETTY_FUNCTION__.6709:
+ 1958 01b0 4B436970 		.string	"KCipherVecDecrypt"
+ 1958      68657256 
+ 1958      65634465 
+ 1958      63727970 
+ 1958      7400
+ 1959 01c2 00000000 		.align 16
+ 1959      00000000 
+ 1959      00000000 
+ 1959      0000
+ 1960              		.type	__func__.6694, @object
+ 1961              		.size	__func__.6694, 18
+ 1962              	__func__.6694:
+ 1963 01d0 4B436970 		.string	"KCipherVecEncrypt"
+ 1963      68657256 
+ 1963      6563456E 
+ 1963      63727970 
+ 1963      7400
+ 1964 01e2 00000000 		.align 16
+ 1964      00000000 
+ 1964      00000000 
+ 1964      0000
+ 1965              		.type	__PRETTY_FUNCTION__.6693, @object
+ 1966              		.size	__PRETTY_FUNCTION__.6693, 18
+ 1967              	__PRETTY_FUNCTION__.6693:
+ 1968 01f0 4B436970 		.string	"KCipherVecEncrypt"
+ 1968      68657256 
+ 1968      6563456E 
+ 1968      63727970 
+ 1968      7400
+ 1969 0202 00000000 		.align 32
+ 1969      00000000 
+ 1969      00000000 
+ 1969      00000000 
+ 1969      00000000 
+ 1970              		.type	__PRETTY_FUNCTION__.6644, @object
+ 1971              		.size	__PRETTY_FUNCTION__.6644, 32
+ 1972              	__PRETTY_FUNCTION__.6644:
+ 1973 0220 4B436970 		.string	"KCipherVecSetDecryptCounterFunc"
+ 1973      68657256 
+ 1973      65635365 
+ 1973      74446563 
+ 1973      72797074 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 58
+
+
+ 1974              		.align 32
+ 1975              		.type	__PRETTY_FUNCTION__.6634, @object
+ 1976              		.size	__PRETTY_FUNCTION__.6634, 32
+ 1977              	__PRETTY_FUNCTION__.6634:
+ 1978 0240 4B436970 		.string	"KCipherVecSetEncryptCounterFunc"
+ 1978      68657256 
+ 1978      65635365 
+ 1978      74456E63 
+ 1978      72797074 
+ 1979              		.align 16
+ 1980              		.type	__PRETTY_FUNCTION__.6621, @object
+ 1981              		.size	__PRETTY_FUNCTION__.6621, 25
+ 1982              	__PRETTY_FUNCTION__.6621:
+ 1983 0260 4B436970 		.string	"KCipherVecSetDecryptIvec"
+ 1983      68657256 
+ 1983      65635365 
+ 1983      74446563 
+ 1983      72797074 
+ 1984 0279 00000000 		.align 16
+ 1984      000000
+ 1985              		.type	__PRETTY_FUNCTION__.6608, @object
+ 1986              		.size	__PRETTY_FUNCTION__.6608, 25
+ 1987              	__PRETTY_FUNCTION__.6608:
+ 1988 0280 4B436970 		.string	"KCipherVecSetEncryptIvec"
+ 1988      68657256 
+ 1988      65635365 
+ 1988      74456E63 
+ 1988      72797074 
+ 1989 0299 00000000 		.align 16
+ 1989      000000
+ 1990              		.type	__PRETTY_FUNCTION__.6586, @object
+ 1991              		.size	__PRETTY_FUNCTION__.6586, 24
+ 1992              	__PRETTY_FUNCTION__.6586:
+ 1993 02a0 4B436970 		.string	"KCipherVecSetDecryptKey"
+ 1993      68657256 
+ 1993      65635365 
+ 1993      74446563 
+ 1993      72797074 
+ 1994 02b8 00000000 		.align 16
+ 1994      00000000 
+ 1995              		.type	__func__.6588, @object
+ 1996              		.size	__func__.6588, 24
+ 1997              	__func__.6588:
+ 1998 02c0 4B436970 		.string	"KCipherVecSetDecryptKey"
+ 1998      68657256 
+ 1998      65635365 
+ 1998      74446563 
+ 1998      72797074 
+ 1999 02d8 00000000 		.align 16
+ 1999      00000000 
+ 2000              		.type	__PRETTY_FUNCTION__.6562, @object
+ 2001              		.size	__PRETTY_FUNCTION__.6562, 24
+ 2002              	__PRETTY_FUNCTION__.6562:
+ 2003 02e0 4B436970 		.string	"KCipherVecSetEncryptKey"
+ 2003      68657256 
+ 2003      65635365 
+ 2003      74456E63 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 59
+
+
+ 2003      72797074 
+ 2004 02f8 00000000 		.align 16
+ 2004      00000000 
+ 2005              		.type	__func__.6564, @object
+ 2006              		.size	__func__.6564, 24
+ 2007              	__func__.6564:
+ 2008 0300 4B436970 		.string	"KCipherVecSetEncryptKey"
+ 2008      68657256 
+ 2008      65635365 
+ 2008      74456E63 
+ 2008      72797074 
+ 2009              		.text
+ 2010              	.Letext0:
+ 2011              		.section	.debug_loc,"", at progbits
+ 2012              	.Ldebug_loc0:
+ 2013              	.LLST0:
+ 2014 0000 00000000 		.quad	.LFB508-.Ltext0
+ 2014      00000000 
+ 2015 0008 01000000 		.quad	.LCFI0-.Ltext0
+ 2015      00000000 
+ 2016 0010 0200     		.value	0x2
+ 2017 0012 77       		.byte	0x77
+ 2018 0013 08       		.sleb128 8
+ 2019 0014 01000000 		.quad	.LCFI0-.Ltext0
+ 2019      00000000 
+ 2020 001c 04000000 		.quad	.LCFI1-.Ltext0
+ 2020      00000000 
+ 2021 0024 0200     		.value	0x2
+ 2022 0026 77       		.byte	0x77
+ 2023 0027 10       		.sleb128 16
+ 2024 0028 04000000 		.quad	.LCFI1-.Ltext0
+ 2024      00000000 
+ 2025 0030 2B000000 		.quad	.LFE508-.Ltext0
+ 2025      00000000 
+ 2026 0038 0200     		.value	0x2
+ 2027 003a 76       		.byte	0x76
+ 2028 003b 10       		.sleb128 16
+ 2029 003c 00000000 		.quad	0x0
+ 2029      00000000 
+ 2030 0044 00000000 		.quad	0x0
+ 2030      00000000 
+ 2031              	.LLST1:
+ 2032 004c 2B000000 		.quad	.LFB509-.Ltext0
+ 2032      00000000 
+ 2033 0054 2C000000 		.quad	.LCFI2-.Ltext0
+ 2033      00000000 
+ 2034 005c 0200     		.value	0x2
+ 2035 005e 77       		.byte	0x77
+ 2036 005f 08       		.sleb128 8
+ 2037 0060 2C000000 		.quad	.LCFI2-.Ltext0
+ 2037      00000000 
+ 2038 0068 2F000000 		.quad	.LCFI3-.Ltext0
+ 2038      00000000 
+ 2039 0070 0200     		.value	0x2
+ 2040 0072 77       		.byte	0x77
+ 2041 0073 10       		.sleb128 16
+ 2042 0074 2F000000 		.quad	.LCFI3-.Ltext0
+
GAS LISTING /tmp/ccq6ONvw.s 			page 60
+
+
+ 2042      00000000 
+ 2043 007c 60000000 		.quad	.LFE509-.Ltext0
+ 2043      00000000 
+ 2044 0084 0200     		.value	0x2
+ 2045 0086 76       		.byte	0x76
+ 2046 0087 10       		.sleb128 16
+ 2047 0088 00000000 		.quad	0x0
+ 2047      00000000 
+ 2048 0090 00000000 		.quad	0x0
+ 2048      00000000 
+ 2049              	.LLST2:
+ 2050 0098 60000000 		.quad	.LFB510-.Ltext0
+ 2050      00000000 
+ 2051 00a0 61000000 		.quad	.LCFI4-.Ltext0
+ 2051      00000000 
+ 2052 00a8 0200     		.value	0x2
+ 2053 00aa 77       		.byte	0x77
+ 2054 00ab 08       		.sleb128 8
+ 2055 00ac 61000000 		.quad	.LCFI4-.Ltext0
+ 2055      00000000 
+ 2056 00b4 64000000 		.quad	.LCFI5-.Ltext0
+ 2056      00000000 
+ 2057 00bc 0200     		.value	0x2
+ 2058 00be 77       		.byte	0x77
+ 2059 00bf 10       		.sleb128 16
+ 2060 00c0 64000000 		.quad	.LCFI5-.Ltext0
+ 2060      00000000 
+ 2061 00c8 9A000000 		.quad	.LFE510-.Ltext0
+ 2061      00000000 
+ 2062 00d0 0200     		.value	0x2
+ 2063 00d2 76       		.byte	0x76
+ 2064 00d3 10       		.sleb128 16
+ 2065 00d4 00000000 		.quad	0x0
+ 2065      00000000 
+ 2066 00dc 00000000 		.quad	0x0
+ 2066      00000000 
+ 2067              	.LLST3:
+ 2068 00e4 9A000000 		.quad	.LFB511-.Ltext0
+ 2068      00000000 
+ 2069 00ec 9B000000 		.quad	.LCFI6-.Ltext0
+ 2069      00000000 
+ 2070 00f4 0200     		.value	0x2
+ 2071 00f6 77       		.byte	0x77
+ 2072 00f7 08       		.sleb128 8
+ 2073 00f8 9B000000 		.quad	.LCFI6-.Ltext0
+ 2073      00000000 
+ 2074 0100 9E000000 		.quad	.LCFI7-.Ltext0
+ 2074      00000000 
+ 2075 0108 0200     		.value	0x2
+ 2076 010a 77       		.byte	0x77
+ 2077 010b 10       		.sleb128 16
+ 2078 010c 9E000000 		.quad	.LCFI7-.Ltext0
+ 2078      00000000 
+ 2079 0114 84010000 		.quad	.LFE511-.Ltext0
+ 2079      00000000 
+ 2080 011c 0200     		.value	0x2
+ 2081 011e 76       		.byte	0x76
+
GAS LISTING /tmp/ccq6ONvw.s 			page 61
+
+
+ 2082 011f 10       		.sleb128 16
+ 2083 0120 00000000 		.quad	0x0
+ 2083      00000000 
+ 2084 0128 00000000 		.quad	0x0
+ 2084      00000000 
+ 2085              	.LLST4:
+ 2086 0130 84010000 		.quad	.LFB512-.Ltext0
+ 2086      00000000 
+ 2087 0138 85010000 		.quad	.LCFI8-.Ltext0
+ 2087      00000000 
+ 2088 0140 0200     		.value	0x2
+ 2089 0142 77       		.byte	0x77
+ 2090 0143 08       		.sleb128 8
+ 2091 0144 85010000 		.quad	.LCFI8-.Ltext0
+ 2091      00000000 
+ 2092 014c 88010000 		.quad	.LCFI9-.Ltext0
+ 2092      00000000 
+ 2093 0154 0200     		.value	0x2
+ 2094 0156 77       		.byte	0x77
+ 2095 0157 10       		.sleb128 16
+ 2096 0158 88010000 		.quad	.LCFI9-.Ltext0
+ 2096      00000000 
+ 2097 0160 6E020000 		.quad	.LFE512-.Ltext0
+ 2097      00000000 
+ 2098 0168 0200     		.value	0x2
+ 2099 016a 76       		.byte	0x76
+ 2100 016b 10       		.sleb128 16
+ 2101 016c 00000000 		.quad	0x0
+ 2101      00000000 
+ 2102 0174 00000000 		.quad	0x0
+ 2102      00000000 
+ 2103              	.LLST5:
+ 2104 017c 6E020000 		.quad	.LFB513-.Ltext0
+ 2104      00000000 
+ 2105 0184 6F020000 		.quad	.LCFI10-.Ltext0
+ 2105      00000000 
+ 2106 018c 0200     		.value	0x2
+ 2107 018e 77       		.byte	0x77
+ 2108 018f 08       		.sleb128 8
+ 2109 0190 6F020000 		.quad	.LCFI10-.Ltext0
+ 2109      00000000 
+ 2110 0198 72020000 		.quad	.LCFI11-.Ltext0
+ 2110      00000000 
+ 2111 01a0 0200     		.value	0x2
+ 2112 01a2 77       		.byte	0x77
+ 2113 01a3 10       		.sleb128 16
+ 2114 01a4 72020000 		.quad	.LCFI11-.Ltext0
+ 2114      00000000 
+ 2115 01ac F1020000 		.quad	.LFE513-.Ltext0
+ 2115      00000000 
+ 2116 01b4 0200     		.value	0x2
+ 2117 01b6 76       		.byte	0x76
+ 2118 01b7 10       		.sleb128 16
+ 2119 01b8 00000000 		.quad	0x0
+ 2119      00000000 
+ 2120 01c0 00000000 		.quad	0x0
+ 2120      00000000 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 62
+
+
+ 2121              	.LLST6:
+ 2122 01c8 F1020000 		.quad	.LFB514-.Ltext0
+ 2122      00000000 
+ 2123 01d0 F2020000 		.quad	.LCFI12-.Ltext0
+ 2123      00000000 
+ 2124 01d8 0200     		.value	0x2
+ 2125 01da 77       		.byte	0x77
+ 2126 01db 08       		.sleb128 8
+ 2127 01dc F2020000 		.quad	.LCFI12-.Ltext0
+ 2127      00000000 
+ 2128 01e4 F5020000 		.quad	.LCFI13-.Ltext0
+ 2128      00000000 
+ 2129 01ec 0200     		.value	0x2
+ 2130 01ee 77       		.byte	0x77
+ 2131 01ef 10       		.sleb128 16
+ 2132 01f0 F5020000 		.quad	.LCFI13-.Ltext0
+ 2132      00000000 
+ 2133 01f8 74030000 		.quad	.LFE514-.Ltext0
+ 2133      00000000 
+ 2134 0200 0200     		.value	0x2
+ 2135 0202 76       		.byte	0x76
+ 2136 0203 10       		.sleb128 16
+ 2137 0204 00000000 		.quad	0x0
+ 2137      00000000 
+ 2138 020c 00000000 		.quad	0x0
+ 2138      00000000 
+ 2139              	.LLST7:
+ 2140 0214 74030000 		.quad	.LFB515-.Ltext0
+ 2140      00000000 
+ 2141 021c 75030000 		.quad	.LCFI14-.Ltext0
+ 2141      00000000 
+ 2142 0224 0200     		.value	0x2
+ 2143 0226 77       		.byte	0x77
+ 2144 0227 08       		.sleb128 8
+ 2145 0228 75030000 		.quad	.LCFI14-.Ltext0
+ 2145      00000000 
+ 2146 0230 78030000 		.quad	.LCFI15-.Ltext0
+ 2146      00000000 
+ 2147 0238 0200     		.value	0x2
+ 2148 023a 77       		.byte	0x77
+ 2149 023b 10       		.sleb128 16
+ 2150 023c 78030000 		.quad	.LCFI15-.Ltext0
+ 2150      00000000 
+ 2151 0244 E3030000 		.quad	.LFE515-.Ltext0
+ 2151      00000000 
+ 2152 024c 0200     		.value	0x2
+ 2153 024e 76       		.byte	0x76
+ 2154 024f 10       		.sleb128 16
+ 2155 0250 00000000 		.quad	0x0
+ 2155      00000000 
+ 2156 0258 00000000 		.quad	0x0
+ 2156      00000000 
+ 2157              	.LLST8:
+ 2158 0260 E3030000 		.quad	.LFB516-.Ltext0
+ 2158      00000000 
+ 2159 0268 E4030000 		.quad	.LCFI16-.Ltext0
+ 2159      00000000 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 63
+
+
+ 2160 0270 0200     		.value	0x2
+ 2161 0272 77       		.byte	0x77
+ 2162 0273 08       		.sleb128 8
+ 2163 0274 E4030000 		.quad	.LCFI16-.Ltext0
+ 2163      00000000 
+ 2164 027c E7030000 		.quad	.LCFI17-.Ltext0
+ 2164      00000000 
+ 2165 0284 0200     		.value	0x2
+ 2166 0286 77       		.byte	0x77
+ 2167 0287 10       		.sleb128 16
+ 2168 0288 E7030000 		.quad	.LCFI17-.Ltext0
+ 2168      00000000 
+ 2169 0290 52040000 		.quad	.LFE516-.Ltext0
+ 2169      00000000 
+ 2170 0298 0200     		.value	0x2
+ 2171 029a 76       		.byte	0x76
+ 2172 029b 10       		.sleb128 16
+ 2173 029c 00000000 		.quad	0x0
+ 2173      00000000 
+ 2174 02a4 00000000 		.quad	0x0
+ 2174      00000000 
+ 2175              	.LLST9:
+ 2176 02ac 52040000 		.quad	.LFB517-.Ltext0
+ 2176      00000000 
+ 2177 02b4 53040000 		.quad	.LCFI18-.Ltext0
+ 2177      00000000 
+ 2178 02bc 0200     		.value	0x2
+ 2179 02be 77       		.byte	0x77
+ 2180 02bf 08       		.sleb128 8
+ 2181 02c0 53040000 		.quad	.LCFI18-.Ltext0
+ 2181      00000000 
+ 2182 02c8 56040000 		.quad	.LCFI19-.Ltext0
+ 2182      00000000 
+ 2183 02d0 0200     		.value	0x2
+ 2184 02d2 77       		.byte	0x77
+ 2185 02d3 10       		.sleb128 16
+ 2186 02d4 56040000 		.quad	.LCFI19-.Ltext0
+ 2186      00000000 
+ 2187 02dc 79040000 		.quad	.LFE517-.Ltext0
+ 2187      00000000 
+ 2188 02e4 0200     		.value	0x2
+ 2189 02e6 76       		.byte	0x76
+ 2190 02e7 10       		.sleb128 16
+ 2191 02e8 00000000 		.quad	0x0
+ 2191      00000000 
+ 2192 02f0 00000000 		.quad	0x0
+ 2192      00000000 
+ 2193              	.LLST10:
+ 2194 02f8 79040000 		.quad	.LFB518-.Ltext0
+ 2194      00000000 
+ 2195 0300 7A040000 		.quad	.LCFI20-.Ltext0
+ 2195      00000000 
+ 2196 0308 0200     		.value	0x2
+ 2197 030a 77       		.byte	0x77
+ 2198 030b 08       		.sleb128 8
+ 2199 030c 7A040000 		.quad	.LCFI20-.Ltext0
+ 2199      00000000 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 64
+
+
+ 2200 0314 7D040000 		.quad	.LCFI21-.Ltext0
+ 2200      00000000 
+ 2201 031c 0200     		.value	0x2
+ 2202 031e 77       		.byte	0x77
+ 2203 031f 10       		.sleb128 16
+ 2204 0320 7D040000 		.quad	.LCFI21-.Ltext0
+ 2204      00000000 
+ 2205 0328 A0040000 		.quad	.LFE518-.Ltext0
+ 2205      00000000 
+ 2206 0330 0200     		.value	0x2
+ 2207 0332 76       		.byte	0x76
+ 2208 0333 10       		.sleb128 16
+ 2209 0334 00000000 		.quad	0x0
+ 2209      00000000 
+ 2210 033c 00000000 		.quad	0x0
+ 2210      00000000 
+ 2211              	.LLST11:
+ 2212 0344 A0040000 		.quad	.LFB519-.Ltext0
+ 2212      00000000 
+ 2213 034c A1040000 		.quad	.LCFI22-.Ltext0
+ 2213      00000000 
+ 2214 0354 0200     		.value	0x2
+ 2215 0356 77       		.byte	0x77
+ 2216 0357 08       		.sleb128 8
+ 2217 0358 A1040000 		.quad	.LCFI22-.Ltext0
+ 2217      00000000 
+ 2218 0360 A4040000 		.quad	.LCFI23-.Ltext0
+ 2218      00000000 
+ 2219 0368 0200     		.value	0x2
+ 2220 036a 77       		.byte	0x77
+ 2221 036b 10       		.sleb128 16
+ 2222 036c A4040000 		.quad	.LCFI23-.Ltext0
+ 2222      00000000 
+ 2223 0374 F3040000 		.quad	.LFE519-.Ltext0
+ 2223      00000000 
+ 2224 037c 0200     		.value	0x2
+ 2225 037e 76       		.byte	0x76
+ 2226 037f 10       		.sleb128 16
+ 2227 0380 00000000 		.quad	0x0
+ 2227      00000000 
+ 2228 0388 00000000 		.quad	0x0
+ 2228      00000000 
+ 2229              	.LLST12:
+ 2230 0390 F3040000 		.quad	.LFB520-.Ltext0
+ 2230      00000000 
+ 2231 0398 F4040000 		.quad	.LCFI24-.Ltext0
+ 2231      00000000 
+ 2232 03a0 0200     		.value	0x2
+ 2233 03a2 77       		.byte	0x77
+ 2234 03a3 08       		.sleb128 8
+ 2235 03a4 F4040000 		.quad	.LCFI24-.Ltext0
+ 2235      00000000 
+ 2236 03ac F7040000 		.quad	.LCFI25-.Ltext0
+ 2236      00000000 
+ 2237 03b4 0200     		.value	0x2
+ 2238 03b6 77       		.byte	0x77
+ 2239 03b7 10       		.sleb128 16
+
GAS LISTING /tmp/ccq6ONvw.s 			page 65
+
+
+ 2240 03b8 F7040000 		.quad	.LCFI25-.Ltext0
+ 2240      00000000 
+ 2241 03c0 46050000 		.quad	.LFE520-.Ltext0
+ 2241      00000000 
+ 2242 03c8 0200     		.value	0x2
+ 2243 03ca 76       		.byte	0x76
+ 2244 03cb 10       		.sleb128 16
+ 2245 03cc 00000000 		.quad	0x0
+ 2245      00000000 
+ 2246 03d4 00000000 		.quad	0x0
+ 2246      00000000 
+ 2247              	.LLST13:
+ 2248 03dc 46050000 		.quad	.LFB521-.Ltext0
+ 2248      00000000 
+ 2249 03e4 47050000 		.quad	.LCFI26-.Ltext0
+ 2249      00000000 
+ 2250 03ec 0200     		.value	0x2
+ 2251 03ee 77       		.byte	0x77
+ 2252 03ef 08       		.sleb128 8
+ 2253 03f0 47050000 		.quad	.LCFI26-.Ltext0
+ 2253      00000000 
+ 2254 03f8 4A050000 		.quad	.LCFI27-.Ltext0
+ 2254      00000000 
+ 2255 0400 0200     		.value	0x2
+ 2256 0402 77       		.byte	0x77
+ 2257 0403 10       		.sleb128 16
+ 2258 0404 4A050000 		.quad	.LCFI27-.Ltext0
+ 2258      00000000 
+ 2259 040c AA050000 		.quad	.LFE521-.Ltext0
+ 2259      00000000 
+ 2260 0414 0200     		.value	0x2
+ 2261 0416 76       		.byte	0x76
+ 2262 0417 10       		.sleb128 16
+ 2263 0418 00000000 		.quad	0x0
+ 2263      00000000 
+ 2264 0420 00000000 		.quad	0x0
+ 2264      00000000 
+ 2265              	.LLST14:
+ 2266 0428 AA050000 		.quad	.LFB522-.Ltext0
+ 2266      00000000 
+ 2267 0430 AB050000 		.quad	.LCFI28-.Ltext0
+ 2267      00000000 
+ 2268 0438 0200     		.value	0x2
+ 2269 043a 77       		.byte	0x77
+ 2270 043b 08       		.sleb128 8
+ 2271 043c AB050000 		.quad	.LCFI28-.Ltext0
+ 2271      00000000 
+ 2272 0444 AE050000 		.quad	.LCFI29-.Ltext0
+ 2272      00000000 
+ 2273 044c 0200     		.value	0x2
+ 2274 044e 77       		.byte	0x77
+ 2275 044f 10       		.sleb128 16
+ 2276 0450 AE050000 		.quad	.LCFI29-.Ltext0
+ 2276      00000000 
+ 2277 0458 15060000 		.quad	.LFE522-.Ltext0
+ 2277      00000000 
+ 2278 0460 0200     		.value	0x2
+
GAS LISTING /tmp/ccq6ONvw.s 			page 66
+
+
+ 2279 0462 76       		.byte	0x76
+ 2280 0463 10       		.sleb128 16
+ 2281 0464 00000000 		.quad	0x0
+ 2281      00000000 
+ 2282 046c 00000000 		.quad	0x0
+ 2282      00000000 
+ 2283              	.LLST15:
+ 2284 0474 15060000 		.quad	.LFB523-.Ltext0
+ 2284      00000000 
+ 2285 047c 16060000 		.quad	.LCFI30-.Ltext0
+ 2285      00000000 
+ 2286 0484 0200     		.value	0x2
+ 2287 0486 77       		.byte	0x77
+ 2288 0487 08       		.sleb128 8
+ 2289 0488 16060000 		.quad	.LCFI30-.Ltext0
+ 2289      00000000 
+ 2290 0490 19060000 		.quad	.LCFI31-.Ltext0
+ 2290      00000000 
+ 2291 0498 0200     		.value	0x2
+ 2292 049a 77       		.byte	0x77
+ 2293 049b 10       		.sleb128 16
+ 2294 049c 19060000 		.quad	.LCFI31-.Ltext0
+ 2294      00000000 
+ 2295 04a4 85060000 		.quad	.LFE523-.Ltext0
+ 2295      00000000 
+ 2296 04ac 0200     		.value	0x2
+ 2297 04ae 76       		.byte	0x76
+ 2298 04af 10       		.sleb128 16
+ 2299 04b0 00000000 		.quad	0x0
+ 2299      00000000 
+ 2300 04b8 00000000 		.quad	0x0
+ 2300      00000000 
+ 2301              	.LLST16:
+ 2302 04c0 85060000 		.quad	.LFB524-.Ltext0
+ 2302      00000000 
+ 2303 04c8 86060000 		.quad	.LCFI32-.Ltext0
+ 2303      00000000 
+ 2304 04d0 0200     		.value	0x2
+ 2305 04d2 77       		.byte	0x77
+ 2306 04d3 08       		.sleb128 8
+ 2307 04d4 86060000 		.quad	.LCFI32-.Ltext0
+ 2307      00000000 
+ 2308 04dc 89060000 		.quad	.LCFI33-.Ltext0
+ 2308      00000000 
+ 2309 04e4 0200     		.value	0x2
+ 2310 04e6 77       		.byte	0x77
+ 2311 04e7 10       		.sleb128 16
+ 2312 04e8 89060000 		.quad	.LCFI33-.Ltext0
+ 2312      00000000 
+ 2313 04f0 F5060000 		.quad	.LFE524-.Ltext0
+ 2313      00000000 
+ 2314 04f8 0200     		.value	0x2
+ 2315 04fa 76       		.byte	0x76
+ 2316 04fb 10       		.sleb128 16
+ 2317 04fc 00000000 		.quad	0x0
+ 2317      00000000 
+ 2318 0504 00000000 		.quad	0x0
+
GAS LISTING /tmp/ccq6ONvw.s 			page 67
+
+
+ 2318      00000000 
+ 2319              	.LLST17:
+ 2320 050c F5060000 		.quad	.LFB525-.Ltext0
+ 2320      00000000 
+ 2321 0514 F6060000 		.quad	.LCFI34-.Ltext0
+ 2321      00000000 
+ 2322 051c 0200     		.value	0x2
+ 2323 051e 77       		.byte	0x77
+ 2324 051f 08       		.sleb128 8
+ 2325 0520 F6060000 		.quad	.LCFI34-.Ltext0
+ 2325      00000000 
+ 2326 0528 F9060000 		.quad	.LCFI35-.Ltext0
+ 2326      00000000 
+ 2327 0530 0200     		.value	0x2
+ 2328 0532 77       		.byte	0x77
+ 2329 0533 10       		.sleb128 16
+ 2330 0534 F9060000 		.quad	.LCFI35-.Ltext0
+ 2330      00000000 
+ 2331 053c C3070000 		.quad	.LFE525-.Ltext0
+ 2331      00000000 
+ 2332 0544 0200     		.value	0x2
+ 2333 0546 76       		.byte	0x76
+ 2334 0547 10       		.sleb128 16
+ 2335 0548 00000000 		.quad	0x0
+ 2335      00000000 
+ 2336 0550 00000000 		.quad	0x0
+ 2336      00000000 
+ 2337              	.LLST18:
+ 2338 0558 C3070000 		.quad	.LFB526-.Ltext0
+ 2338      00000000 
+ 2339 0560 C4070000 		.quad	.LCFI36-.Ltext0
+ 2339      00000000 
+ 2340 0568 0200     		.value	0x2
+ 2341 056a 77       		.byte	0x77
+ 2342 056b 08       		.sleb128 8
+ 2343 056c C4070000 		.quad	.LCFI36-.Ltext0
+ 2343      00000000 
+ 2344 0574 C7070000 		.quad	.LCFI37-.Ltext0
+ 2344      00000000 
+ 2345 057c 0200     		.value	0x2
+ 2346 057e 77       		.byte	0x77
+ 2347 057f 10       		.sleb128 16
+ 2348 0580 C7070000 		.quad	.LCFI37-.Ltext0
+ 2348      00000000 
+ 2349 0588 97080000 		.quad	.LFE526-.Ltext0
+ 2349      00000000 
+ 2350 0590 0200     		.value	0x2
+ 2351 0592 76       		.byte	0x76
+ 2352 0593 10       		.sleb128 16
+ 2353 0594 00000000 		.quad	0x0
+ 2353      00000000 
+ 2354 059c 00000000 		.quad	0x0
+ 2354      00000000 
+ 2355              	.LLST19:
+ 2356 05a4 97080000 		.quad	.LFB527-.Ltext0
+ 2356      00000000 
+ 2357 05ac 98080000 		.quad	.LCFI38-.Ltext0
+
GAS LISTING /tmp/ccq6ONvw.s 			page 68
+
+
+ 2357      00000000 
+ 2358 05b4 0200     		.value	0x2
+ 2359 05b6 77       		.byte	0x77
+ 2360 05b7 08       		.sleb128 8
+ 2361 05b8 98080000 		.quad	.LCFI38-.Ltext0
+ 2361      00000000 
+ 2362 05c0 9B080000 		.quad	.LCFI39-.Ltext0
+ 2362      00000000 
+ 2363 05c8 0200     		.value	0x2
+ 2364 05ca 77       		.byte	0x77
+ 2365 05cb 10       		.sleb128 16
+ 2366 05cc 9B080000 		.quad	.LCFI39-.Ltext0
+ 2366      00000000 
+ 2367 05d4 74090000 		.quad	.LFE527-.Ltext0
+ 2367      00000000 
+ 2368 05dc 0200     		.value	0x2
+ 2369 05de 76       		.byte	0x76
+ 2370 05df 10       		.sleb128 16
+ 2371 05e0 00000000 		.quad	0x0
+ 2371      00000000 
+ 2372 05e8 00000000 		.quad	0x0
+ 2372      00000000 
+ 2373              	.LLST20:
+ 2374 05f0 74090000 		.quad	.LFB528-.Ltext0
+ 2374      00000000 
+ 2375 05f8 75090000 		.quad	.LCFI40-.Ltext0
+ 2375      00000000 
+ 2376 0600 0200     		.value	0x2
+ 2377 0602 77       		.byte	0x77
+ 2378 0603 08       		.sleb128 8
+ 2379 0604 75090000 		.quad	.LCFI40-.Ltext0
+ 2379      00000000 
+ 2380 060c 78090000 		.quad	.LCFI41-.Ltext0
+ 2380      00000000 
+ 2381 0614 0200     		.value	0x2
+ 2382 0616 77       		.byte	0x77
+ 2383 0617 10       		.sleb128 16
+ 2384 0618 78090000 		.quad	.LCFI41-.Ltext0
+ 2384      00000000 
+ 2385 0620 3A0A0000 		.quad	.LFE528-.Ltext0
+ 2385      00000000 
+ 2386 0628 0200     		.value	0x2
+ 2387 062a 76       		.byte	0x76
+ 2388 062b 10       		.sleb128 16
+ 2389 062c 00000000 		.quad	0x0
+ 2389      00000000 
+ 2390 0634 00000000 		.quad	0x0
+ 2390      00000000 
+ 2391              	.LLST21:
+ 2392 063c 3A0A0000 		.quad	.LFB529-.Ltext0
+ 2392      00000000 
+ 2393 0644 3B0A0000 		.quad	.LCFI42-.Ltext0
+ 2393      00000000 
+ 2394 064c 0200     		.value	0x2
+ 2395 064e 77       		.byte	0x77
+ 2396 064f 08       		.sleb128 8
+ 2397 0650 3B0A0000 		.quad	.LCFI42-.Ltext0
+
GAS LISTING /tmp/ccq6ONvw.s 			page 69
+
+
+ 2397      00000000 
+ 2398 0658 3E0A0000 		.quad	.LCFI43-.Ltext0
+ 2398      00000000 
+ 2399 0660 0200     		.value	0x2
+ 2400 0662 77       		.byte	0x77
+ 2401 0663 10       		.sleb128 16
+ 2402 0664 3E0A0000 		.quad	.LCFI43-.Ltext0
+ 2402      00000000 
+ 2403 066c 000B0000 		.quad	.LFE529-.Ltext0
+ 2403      00000000 
+ 2404 0674 0200     		.value	0x2
+ 2405 0676 76       		.byte	0x76
+ 2406 0677 10       		.sleb128 16
+ 2407 0678 00000000 		.quad	0x0
+ 2407      00000000 
+ 2408 0680 00000000 		.quad	0x0
+ 2408      00000000 
+ 2409              	.LLST22:
+ 2410 0688 000B0000 		.quad	.LFB530-.Ltext0
+ 2410      00000000 
+ 2411 0690 010B0000 		.quad	.LCFI44-.Ltext0
+ 2411      00000000 
+ 2412 0698 0200     		.value	0x2
+ 2413 069a 77       		.byte	0x77
+ 2414 069b 08       		.sleb128 8
+ 2415 069c 010B0000 		.quad	.LCFI44-.Ltext0
+ 2415      00000000 
+ 2416 06a4 040B0000 		.quad	.LCFI45-.Ltext0
+ 2416      00000000 
+ 2417 06ac 0200     		.value	0x2
+ 2418 06ae 77       		.byte	0x77
+ 2419 06af 10       		.sleb128 16
+ 2420 06b0 040B0000 		.quad	.LCFI45-.Ltext0
+ 2420      00000000 
+ 2421 06b8 C60B0000 		.quad	.LFE530-.Ltext0
+ 2421      00000000 
+ 2422 06c0 0200     		.value	0x2
+ 2423 06c2 76       		.byte	0x76
+ 2424 06c3 10       		.sleb128 16
+ 2425 06c4 00000000 		.quad	0x0
+ 2425      00000000 
+ 2426 06cc 00000000 		.quad	0x0
+ 2426      00000000 
+ 2427              	.LLST23:
+ 2428 06d4 C60B0000 		.quad	.LFB531-.Ltext0
+ 2428      00000000 
+ 2429 06dc C70B0000 		.quad	.LCFI46-.Ltext0
+ 2429      00000000 
+ 2430 06e4 0200     		.value	0x2
+ 2431 06e6 77       		.byte	0x77
+ 2432 06e7 08       		.sleb128 8
+ 2433 06e8 C70B0000 		.quad	.LCFI46-.Ltext0
+ 2433      00000000 
+ 2434 06f0 CA0B0000 		.quad	.LCFI47-.Ltext0
+ 2434      00000000 
+ 2435 06f8 0200     		.value	0x2
+ 2436 06fa 77       		.byte	0x77
+
GAS LISTING /tmp/ccq6ONvw.s 			page 70
+
+
+ 2437 06fb 10       		.sleb128 16
+ 2438 06fc CA0B0000 		.quad	.LCFI47-.Ltext0
+ 2438      00000000 
+ 2439 0704 8C0C0000 		.quad	.LFE531-.Ltext0
+ 2439      00000000 
+ 2440 070c 0200     		.value	0x2
+ 2441 070e 76       		.byte	0x76
+ 2442 070f 10       		.sleb128 16
+ 2443 0710 00000000 		.quad	0x0
+ 2443      00000000 
+ 2444 0718 00000000 		.quad	0x0
+ 2444      00000000 
+ 2445              	.LLST24:
+ 2446 0720 8C0C0000 		.quad	.LFB532-.Ltext0
+ 2446      00000000 
+ 2447 0728 8D0C0000 		.quad	.LCFI48-.Ltext0
+ 2447      00000000 
+ 2448 0730 0200     		.value	0x2
+ 2449 0732 77       		.byte	0x77
+ 2450 0733 08       		.sleb128 8
+ 2451 0734 8D0C0000 		.quad	.LCFI48-.Ltext0
+ 2451      00000000 
+ 2452 073c 900C0000 		.quad	.LCFI49-.Ltext0
+ 2452      00000000 
+ 2453 0744 0200     		.value	0x2
+ 2454 0746 77       		.byte	0x77
+ 2455 0747 10       		.sleb128 16
+ 2456 0748 900C0000 		.quad	.LCFI49-.Ltext0
+ 2456      00000000 
+ 2457 0750 C50C0000 		.quad	.LFE532-.Ltext0
+ 2457      00000000 
+ 2458 0758 0200     		.value	0x2
+ 2459 075a 76       		.byte	0x76
+ 2460 075b 10       		.sleb128 16
+ 2461 075c 00000000 		.quad	0x0
+ 2461      00000000 
+ 2462 0764 00000000 		.quad	0x0
+ 2462      00000000 
+ 2463              	.LLST25:
+ 2464 076c C50C0000 		.quad	.LFB533-.Ltext0
+ 2464      00000000 
+ 2465 0774 C60C0000 		.quad	.LCFI50-.Ltext0
+ 2465      00000000 
+ 2466 077c 0200     		.value	0x2
+ 2467 077e 77       		.byte	0x77
+ 2468 077f 08       		.sleb128 8
+ 2469 0780 C60C0000 		.quad	.LCFI50-.Ltext0
+ 2469      00000000 
+ 2470 0788 C90C0000 		.quad	.LCFI51-.Ltext0
+ 2470      00000000 
+ 2471 0790 0200     		.value	0x2
+ 2472 0792 77       		.byte	0x77
+ 2473 0793 10       		.sleb128 16
+ 2474 0794 C90C0000 		.quad	.LCFI51-.Ltext0
+ 2474      00000000 
+ 2475 079c FB0C0000 		.quad	.LFE533-.Ltext0
+ 2475      00000000 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 71
+
+
+ 2476 07a4 0200     		.value	0x2
+ 2477 07a6 76       		.byte	0x76
+ 2478 07a7 10       		.sleb128 16
+ 2479 07a8 00000000 		.quad	0x0
+ 2479      00000000 
+ 2480 07b0 00000000 		.quad	0x0
+ 2480      00000000 
+ 2481              	.LLST26:
+ 2482 07b8 FB0C0000 		.quad	.LFB534-.Ltext0
+ 2482      00000000 
+ 2483 07c0 FC0C0000 		.quad	.LCFI52-.Ltext0
+ 2483      00000000 
+ 2484 07c8 0200     		.value	0x2
+ 2485 07ca 77       		.byte	0x77
+ 2486 07cb 08       		.sleb128 8
+ 2487 07cc FC0C0000 		.quad	.LCFI52-.Ltext0
+ 2487      00000000 
+ 2488 07d4 FF0C0000 		.quad	.LCFI53-.Ltext0
+ 2488      00000000 
+ 2489 07dc 0200     		.value	0x2
+ 2490 07de 77       		.byte	0x77
+ 2491 07df 10       		.sleb128 16
+ 2492 07e0 FF0C0000 		.quad	.LCFI53-.Ltext0
+ 2492      00000000 
+ 2493 07e8 310D0000 		.quad	.LFE534-.Ltext0
+ 2493      00000000 
+ 2494 07f0 0200     		.value	0x2
+ 2495 07f2 76       		.byte	0x76
+ 2496 07f3 10       		.sleb128 16
+ 2497 07f4 00000000 		.quad	0x0
+ 2497      00000000 
+ 2498 07fc 00000000 		.quad	0x0
+ 2498      00000000 
+ 2499              	.LLST27:
+ 2500 0804 310D0000 		.quad	.LFB535-.Ltext0
+ 2500      00000000 
+ 2501 080c 320D0000 		.quad	.LCFI54-.Ltext0
+ 2501      00000000 
+ 2502 0814 0200     		.value	0x2
+ 2503 0816 77       		.byte	0x77
+ 2504 0817 08       		.sleb128 8
+ 2505 0818 320D0000 		.quad	.LCFI54-.Ltext0
+ 2505      00000000 
+ 2506 0820 350D0000 		.quad	.LCFI55-.Ltext0
+ 2506      00000000 
+ 2507 0828 0200     		.value	0x2
+ 2508 082a 77       		.byte	0x77
+ 2509 082b 10       		.sleb128 16
+ 2510 082c 350D0000 		.quad	.LCFI55-.Ltext0
+ 2510      00000000 
+ 2511 0834 8C0D0000 		.quad	.LFE535-.Ltext0
+ 2511      00000000 
+ 2512 083c 0200     		.value	0x2
+ 2513 083e 76       		.byte	0x76
+ 2514 083f 10       		.sleb128 16
+ 2515 0840 00000000 		.quad	0x0
+ 2515      00000000 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 72
+
+
+ 2516 0848 00000000 		.quad	0x0
+ 2516      00000000 
+ 2517              	.LLST28:
+ 2518 0850 8C0D0000 		.quad	.LFB536-.Ltext0
+ 2518      00000000 
+ 2519 0858 8D0D0000 		.quad	.LCFI56-.Ltext0
+ 2519      00000000 
+ 2520 0860 0200     		.value	0x2
+ 2521 0862 77       		.byte	0x77
+ 2522 0863 08       		.sleb128 8
+ 2523 0864 8D0D0000 		.quad	.LCFI56-.Ltext0
+ 2523      00000000 
+ 2524 086c 900D0000 		.quad	.LCFI57-.Ltext0
+ 2524      00000000 
+ 2525 0874 0200     		.value	0x2
+ 2526 0876 77       		.byte	0x77
+ 2527 0877 10       		.sleb128 16
+ 2528 0878 900D0000 		.quad	.LCFI57-.Ltext0
+ 2528      00000000 
+ 2529 0880 2A0E0000 		.quad	.LFE536-.Ltext0
+ 2529      00000000 
+ 2530 0888 0200     		.value	0x2
+ 2531 088a 76       		.byte	0x76
+ 2532 088b 10       		.sleb128 16
+ 2533 088c 00000000 		.quad	0x0
+ 2533      00000000 
+ 2534 0894 00000000 		.quad	0x0
+ 2534      00000000 
+ 2535              	.LLST29:
+ 2536 089c 2A0E0000 		.quad	.LFB537-.Ltext0
+ 2536      00000000 
+ 2537 08a4 2B0E0000 		.quad	.LCFI58-.Ltext0
+ 2537      00000000 
+ 2538 08ac 0200     		.value	0x2
+ 2539 08ae 77       		.byte	0x77
+ 2540 08af 08       		.sleb128 8
+ 2541 08b0 2B0E0000 		.quad	.LCFI58-.Ltext0
+ 2541      00000000 
+ 2542 08b8 2E0E0000 		.quad	.LCFI59-.Ltext0
+ 2542      00000000 
+ 2543 08c0 0200     		.value	0x2
+ 2544 08c2 77       		.byte	0x77
+ 2545 08c3 10       		.sleb128 16
+ 2546 08c4 2E0E0000 		.quad	.LCFI59-.Ltext0
+ 2546      00000000 
+ 2547 08cc 850E0000 		.quad	.LFE537-.Ltext0
+ 2547      00000000 
+ 2548 08d4 0200     		.value	0x2
+ 2549 08d6 76       		.byte	0x76
+ 2550 08d7 10       		.sleb128 16
+ 2551 08d8 00000000 		.quad	0x0
+ 2551      00000000 
+ 2552 08e0 00000000 		.quad	0x0
+ 2552      00000000 
+ 2553              	.LLST30:
+ 2554 08e8 850E0000 		.quad	.LFB538-.Ltext0
+ 2554      00000000 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 73
+
+
+ 2555 08f0 860E0000 		.quad	.LCFI60-.Ltext0
+ 2555      00000000 
+ 2556 08f8 0200     		.value	0x2
+ 2557 08fa 77       		.byte	0x77
+ 2558 08fb 08       		.sleb128 8
+ 2559 08fc 860E0000 		.quad	.LCFI60-.Ltext0
+ 2559      00000000 
+ 2560 0904 890E0000 		.quad	.LCFI61-.Ltext0
+ 2560      00000000 
+ 2561 090c 0200     		.value	0x2
+ 2562 090e 77       		.byte	0x77
+ 2563 090f 10       		.sleb128 16
+ 2564 0910 890E0000 		.quad	.LCFI61-.Ltext0
+ 2564      00000000 
+ 2565 0918 1A0F0000 		.quad	.LFE538-.Ltext0
+ 2565      00000000 
+ 2566 0920 0200     		.value	0x2
+ 2567 0922 76       		.byte	0x76
+ 2568 0923 10       		.sleb128 16
+ 2569 0924 00000000 		.quad	0x0
+ 2569      00000000 
+ 2570 092c 00000000 		.quad	0x0
+ 2570      00000000 
+ 2571              	.LLST31:
+ 2572 0934 1A0F0000 		.quad	.LFB539-.Ltext0
+ 2572      00000000 
+ 2573 093c 1B0F0000 		.quad	.LCFI62-.Ltext0
+ 2573      00000000 
+ 2574 0944 0200     		.value	0x2
+ 2575 0946 77       		.byte	0x77
+ 2576 0947 08       		.sleb128 8
+ 2577 0948 1B0F0000 		.quad	.LCFI62-.Ltext0
+ 2577      00000000 
+ 2578 0950 1E0F0000 		.quad	.LCFI63-.Ltext0
+ 2578      00000000 
+ 2579 0958 0200     		.value	0x2
+ 2580 095a 77       		.byte	0x77
+ 2581 095b 10       		.sleb128 16
+ 2582 095c 1E0F0000 		.quad	.LCFI63-.Ltext0
+ 2582      00000000 
+ 2583 0964 7C100000 		.quad	.LFE539-.Ltext0
+ 2583      00000000 
+ 2584 096c 0200     		.value	0x2
+ 2585 096e 76       		.byte	0x76
+ 2586 096f 10       		.sleb128 16
+ 2587 0970 00000000 		.quad	0x0
+ 2587      00000000 
+ 2588 0978 00000000 		.quad	0x0
+ 2588      00000000 
+ 2589              		.file 2 "/usr/include/stdint.h"
+ 2590              		.file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+ 2591              		.file 4 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/atomic32.h"
+ 2592              		.file 5 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/refcount.h"
+ 2593              		.file 6 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/krypto/cipher.h"
+ 2594              		.file 7 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-impl.h"
+ 2595              		.file 8 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 2596              		.file 9 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+
GAS LISTING /tmp/ccq6ONvw.s 			page 74
+
+
+ 2597              		.file 10 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi-priv.h"
+ 2598              		.file 11 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi-priv.h"
+ 2599              		.file 12 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/krypto/ciphermgr.h"
+ 2600              		.file 13 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/debug.h"
+ 2601              		.file 14 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-priv.h"
+ 2602              		.file 15 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+ 2603              		.section	.debug_info
+ 2604 0000 951F0000 		.long	0x1f95
+ 2605 0004 0200     		.value	0x2
+ 2606 0006 00000000 		.long	.Ldebug_abbrev0
+ 2607 000a 08       		.byte	0x8
+ 2608 000b 01       		.uleb128 0x1
+ 2609 000c 00000000 		.long	.LASF395
+ 2610 0010 01       		.byte	0x1
+ 2611 0011 00000000 		.long	.LASF396
+ 2612 0015 00000000 		.long	.LASF397
+ 2613 0019 00000000 		.quad	.Ltext0
+ 2613      00000000 
+ 2614 0021 00000000 		.quad	.Letext0
+ 2614      00000000 
+ 2615 0029 00000000 		.long	.Ldebug_line0
+ 2616 002d 02       		.uleb128 0x2
+ 2617 002e 01       		.byte	0x1
+ 2618 002f 06       		.byte	0x6
+ 2619 0030 00000000 		.long	.LASF0
+ 2620 0034 02       		.uleb128 0x2
+ 2621 0035 02       		.byte	0x2
+ 2622 0036 05       		.byte	0x5
+ 2623 0037 00000000 		.long	.LASF1
+ 2624 003b 03       		.uleb128 0x3
+ 2625 003c 04       		.byte	0x4
+ 2626 003d 05       		.byte	0x5
+ 2627 003e 696E7400 		.string	"int"
+ 2628 0042 02       		.uleb128 0x2
+ 2629 0043 08       		.byte	0x8
+ 2630 0044 05       		.byte	0x5
+ 2631 0045 00000000 		.long	.LASF2
+ 2632 0049 04       		.uleb128 0x4
+ 2633 004a 00000000 		.long	.LASF5
+ 2634 004e 02       		.byte	0x2
+ 2635 004f 31       		.byte	0x31
+ 2636 0050 54000000 		.long	0x54
+ 2637 0054 02       		.uleb128 0x2
+ 2638 0055 01       		.byte	0x1
+ 2639 0056 08       		.byte	0x8
+ 2640 0057 00000000 		.long	.LASF3
+ 2641 005b 02       		.uleb128 0x2
+ 2642 005c 02       		.byte	0x2
+ 2643 005d 07       		.byte	0x7
+ 2644 005e 00000000 		.long	.LASF4
+ 2645 0062 04       		.uleb128 0x4
+ 2646 0063 00000000 		.long	.LASF6
+ 2647 0067 02       		.byte	0x2
+ 2648 0068 34       		.byte	0x34
+ 2649 0069 6D000000 		.long	0x6d
+ 2650 006d 02       		.uleb128 0x2
+ 2651 006e 04       		.byte	0x4
+
GAS LISTING /tmp/ccq6ONvw.s 			page 75
+
+
+ 2652 006f 07       		.byte	0x7
+ 2653 0070 00000000 		.long	.LASF7
+ 2654 0074 02       		.uleb128 0x2
+ 2655 0075 08       		.byte	0x8
+ 2656 0076 07       		.byte	0x7
+ 2657 0077 00000000 		.long	.LASF8
+ 2658 007b 04       		.uleb128 0x4
+ 2659 007c 00000000 		.long	.LASF9
+ 2660 0080 03       		.byte	0x3
+ 2661 0081 30       		.byte	0x30
+ 2662 0082 62000000 		.long	0x62
+ 2663 0086 04       		.uleb128 0x4
+ 2664 0087 00000000 		.long	.LASF10
+ 2665 008b 04       		.byte	0x4
+ 2666 008c 27       		.byte	0x27
+ 2667 008d 91000000 		.long	0x91
+ 2668 0091 05       		.uleb128 0x5
+ 2669 0092 00000000 		.long	.LASF10
+ 2670 0096 04       		.byte	0x4
+ 2671 0097 04       		.byte	0x4
+ 2672 0098 27       		.byte	0x27
+ 2673 0099 AC000000 		.long	0xac
+ 2674 009d 06       		.uleb128 0x6
+ 2675 009e 00000000 		.long	.LASF34
+ 2676 00a2 04       		.byte	0x4
+ 2677 00a3 2A       		.byte	0x2a
+ 2678 00a4 AC000000 		.long	0xac
+ 2679 00a8 02       		.byte	0x2
+ 2680 00a9 23       		.byte	0x23
+ 2681 00aa 00       		.uleb128 0x0
+ 2682 00ab 00       		.byte	0x0
+ 2683 00ac 07       		.uleb128 0x7
+ 2684 00ad 3B000000 		.long	0x3b
+ 2685 00b1 08       		.uleb128 0x8
+ 2686 00b2 08       		.byte	0x8
+ 2687 00b3 07       		.byte	0x7
+ 2688 00b4 09       		.uleb128 0x9
+ 2689 00b5 08       		.byte	0x8
+ 2690 00b6 0A       		.uleb128 0xa
+ 2691 00b7 08       		.byte	0x8
+ 2692 00b8 BC000000 		.long	0xbc
+ 2693 00bc 0B       		.uleb128 0xb
+ 2694 00bd C1000000 		.long	0xc1
+ 2695 00c1 02       		.uleb128 0x2
+ 2696 00c2 01       		.byte	0x1
+ 2697 00c3 06       		.byte	0x6
+ 2698 00c4 00000000 		.long	.LASF11
+ 2699 00c8 0C       		.uleb128 0xc
+ 2700 00c9 04       		.byte	0x4
+ 2701 00ca 0D       		.byte	0xd
+ 2702 00cb D6       		.byte	0xd6
+ 2703 00cc 49010000 		.long	0x149
+ 2704 00d0 0D       		.uleb128 0xd
+ 2705 00d1 00000000 		.long	.LASF12
+ 2706 00d5 7F       		.sleb128 -1
+ 2707 00d6 0D       		.uleb128 0xd
+ 2708 00d7 00000000 		.long	.LASF13
+
GAS LISTING /tmp/ccq6ONvw.s 			page 76
+
+
+ 2709 00db 00       		.sleb128 0
+ 2710 00dc 0D       		.uleb128 0xd
+ 2711 00dd 00000000 		.long	.LASF14
+ 2712 00e1 01       		.sleb128 1
+ 2713 00e2 0D       		.uleb128 0xd
+ 2714 00e3 00000000 		.long	.LASF15
+ 2715 00e7 02       		.sleb128 2
+ 2716 00e8 0D       		.uleb128 0xd
+ 2717 00e9 00000000 		.long	.LASF16
+ 2718 00ed 03       		.sleb128 3
+ 2719 00ee 0D       		.uleb128 0xd
+ 2720 00ef 00000000 		.long	.LASF17
+ 2721 00f3 04       		.sleb128 4
+ 2722 00f4 0D       		.uleb128 0xd
+ 2723 00f5 00000000 		.long	.LASF18
+ 2724 00f9 05       		.sleb128 5
+ 2725 00fa 0D       		.uleb128 0xd
+ 2726 00fb 00000000 		.long	.LASF19
+ 2727 00ff 06       		.sleb128 6
+ 2728 0100 0D       		.uleb128 0xd
+ 2729 0101 00000000 		.long	.LASF20
+ 2730 0105 07       		.sleb128 7
+ 2731 0106 0D       		.uleb128 0xd
+ 2732 0107 00000000 		.long	.LASF21
+ 2733 010b 08       		.sleb128 8
+ 2734 010c 0D       		.uleb128 0xd
+ 2735 010d 00000000 		.long	.LASF22
+ 2736 0111 09       		.sleb128 9
+ 2737 0112 0D       		.uleb128 0xd
+ 2738 0113 00000000 		.long	.LASF23
+ 2739 0117 0A       		.sleb128 10
+ 2740 0118 0D       		.uleb128 0xd
+ 2741 0119 00000000 		.long	.LASF24
+ 2742 011d 0B       		.sleb128 11
+ 2743 011e 0D       		.uleb128 0xd
+ 2744 011f 00000000 		.long	.LASF25
+ 2745 0123 0C       		.sleb128 12
+ 2746 0124 0D       		.uleb128 0xd
+ 2747 0125 00000000 		.long	.LASF26
+ 2748 0129 0D       		.sleb128 13
+ 2749 012a 0D       		.uleb128 0xd
+ 2750 012b 00000000 		.long	.LASF27
+ 2751 012f 0E       		.sleb128 14
+ 2752 0130 0D       		.uleb128 0xd
+ 2753 0131 00000000 		.long	.LASF28
+ 2754 0135 0F       		.sleb128 15
+ 2755 0136 0D       		.uleb128 0xd
+ 2756 0137 00000000 		.long	.LASF29
+ 2757 013b 10       		.sleb128 16
+ 2758 013c 0D       		.uleb128 0xd
+ 2759 013d 00000000 		.long	.LASF30
+ 2760 0141 11       		.sleb128 17
+ 2761 0142 0D       		.uleb128 0xd
+ 2762 0143 00000000 		.long	.LASF31
+ 2763 0147 12       		.sleb128 18
+ 2764 0148 00       		.byte	0x0
+ 2765 0149 04       		.uleb128 0x4
+
GAS LISTING /tmp/ccq6ONvw.s 			page 77
+
+
+ 2766 014a 00000000 		.long	.LASF32
+ 2767 014e 05       		.byte	0x5
+ 2768 014f 42       		.byte	0x42
+ 2769 0150 86000000 		.long	0x86
+ 2770 0154 04       		.uleb128 0x4
+ 2771 0155 00000000 		.long	.LASF33
+ 2772 0159 06       		.byte	0x6
+ 2773 015a 20       		.byte	0x20
+ 2774 015b 5F010000 		.long	0x15f
+ 2775 015f 05       		.uleb128 0x5
+ 2776 0160 00000000 		.long	.LASF33
+ 2777 0164 48       		.byte	0x48
+ 2778 0165 06       		.byte	0x6
+ 2779 0166 20       		.byte	0x20
+ 2780 0167 F7010000 		.long	0x1f7
+ 2781 016b 06       		.uleb128 0x6
+ 2782 016c 00000000 		.long	.LASF35
+ 2783 0170 07       		.byte	0x7
+ 2784 0171 9A       		.byte	0x9a
+ 2785 0172 49010000 		.long	0x149
+ 2786 0176 02       		.byte	0x2
+ 2787 0177 23       		.byte	0x23
+ 2788 0178 00       		.uleb128 0x0
+ 2789 0179 06       		.uleb128 0x6
+ 2790 017a 00000000 		.long	.LASF36
+ 2791 017e 07       		.byte	0x7
+ 2792 017f 9B       		.byte	0x9b
+ 2793 0180 62000000 		.long	0x62
+ 2794 0184 02       		.byte	0x2
+ 2795 0185 23       		.byte	0x23
+ 2796 0186 04       		.uleb128 0x4
+ 2797 0187 0E       		.uleb128 0xe
+ 2798 0188 767400   		.string	"vt"
+ 2799 018b 07       		.byte	0x7
+ 2800 018c 9C       		.byte	0x9c
+ 2801 018d BC040000 		.long	0x4bc
+ 2802 0191 02       		.byte	0x2
+ 2803 0192 23       		.byte	0x23
+ 2804 0193 08       		.uleb128 0x8
+ 2805 0194 06       		.uleb128 0x6
+ 2806 0195 00000000 		.long	.LASF37
+ 2807 0199 07       		.byte	0x7
+ 2808 019a 9D       		.byte	0x9d
+ 2809 019b B6000000 		.long	0xb6
+ 2810 019f 02       		.byte	0x2
+ 2811 01a0 23       		.byte	0x23
+ 2812 01a1 10       		.uleb128 0x10
+ 2813 01a2 06       		.uleb128 0x6
+ 2814 01a3 00000000 		.long	.LASF38
+ 2815 01a7 07       		.byte	0x7
+ 2816 01a8 9E       		.byte	0x9e
+ 2817 01a9 B4000000 		.long	0xb4
+ 2818 01ad 02       		.byte	0x2
+ 2819 01ae 23       		.byte	0x23
+ 2820 01af 18       		.uleb128 0x18
+ 2821 01b0 06       		.uleb128 0x6
+ 2822 01b1 00000000 		.long	.LASF39
+
GAS LISTING /tmp/ccq6ONvw.s 			page 78
+
+
+ 2823 01b5 07       		.byte	0x7
+ 2824 01b6 9F       		.byte	0x9f
+ 2825 01b7 B4000000 		.long	0xb4
+ 2826 01bb 02       		.byte	0x2
+ 2827 01bc 23       		.byte	0x23
+ 2828 01bd 20       		.uleb128 0x20
+ 2829 01be 06       		.uleb128 0x6
+ 2830 01bf 00000000 		.long	.LASF40
+ 2831 01c3 07       		.byte	0x7
+ 2832 01c4 A0       		.byte	0xa0
+ 2833 01c5 B4000000 		.long	0xb4
+ 2834 01c9 02       		.byte	0x2
+ 2835 01ca 23       		.byte	0x23
+ 2836 01cb 28       		.uleb128 0x28
+ 2837 01cc 06       		.uleb128 0x6
+ 2838 01cd 00000000 		.long	.LASF41
+ 2839 01d1 07       		.byte	0x7
+ 2840 01d2 A1       		.byte	0xa1
+ 2841 01d3 B4000000 		.long	0xb4
+ 2842 01d7 02       		.byte	0x2
+ 2843 01d8 23       		.byte	0x23
+ 2844 01d9 30       		.uleb128 0x30
+ 2845 01da 06       		.uleb128 0x6
+ 2846 01db 00000000 		.long	.LASF42
+ 2847 01df 07       		.byte	0x7
+ 2848 01e0 A2       		.byte	0xa2
+ 2849 01e1 F7010000 		.long	0x1f7
+ 2850 01e5 02       		.byte	0x2
+ 2851 01e6 23       		.byte	0x23
+ 2852 01e7 38       		.uleb128 0x38
+ 2853 01e8 06       		.uleb128 0x6
+ 2854 01e9 00000000 		.long	.LASF43
+ 2855 01ed 07       		.byte	0x7
+ 2856 01ee A3       		.byte	0xa3
+ 2857 01ef F7010000 		.long	0x1f7
+ 2858 01f3 02       		.byte	0x2
+ 2859 01f4 23       		.byte	0x23
+ 2860 01f5 40       		.uleb128 0x40
+ 2861 01f6 00       		.byte	0x0
+ 2862 01f7 04       		.uleb128 0x4
+ 2863 01f8 00000000 		.long	.LASF44
+ 2864 01fc 06       		.byte	0x6
+ 2865 01fd 40       		.byte	0x40
+ 2866 01fe 02020000 		.long	0x202
+ 2867 0202 0A       		.uleb128 0xa
+ 2868 0203 08       		.byte	0x8
+ 2869 0204 08020000 		.long	0x208
+ 2870 0208 0F       		.uleb128 0xf
+ 2871 0209 01       		.byte	0x1
+ 2872 020a 14020000 		.long	0x214
+ 2873 020e 10       		.uleb128 0x10
+ 2874 020f B4000000 		.long	0xb4
+ 2875 0213 00       		.byte	0x0
+ 2876 0214 04       		.uleb128 0x4
+ 2877 0215 00000000 		.long	.LASF45
+ 2878 0219 07       		.byte	0x7
+ 2879 021a 2C       		.byte	0x2c
+
GAS LISTING /tmp/ccq6ONvw.s 			page 79
+
+
+ 2880 021b 1F020000 		.long	0x21f
+ 2881 021f 05       		.uleb128 0x5
+ 2882 0220 00000000 		.long	.LASF45
+ 2883 0224 50       		.byte	0x50
+ 2884 0225 07       		.byte	0x7
+ 2885 0226 2B       		.byte	0x2b
+ 2886 0227 48020000 		.long	0x248
+ 2887 022b 0E       		.uleb128 0xe
+ 2888 022c 64616400 		.string	"dad"
+ 2889 0230 01       		.byte	0x1
+ 2890 0231 3E       		.byte	0x3e
+ 2891 0232 54010000 		.long	0x154
+ 2892 0236 02       		.byte	0x2
+ 2893 0237 23       		.byte	0x23
+ 2894 0238 00       		.uleb128 0x0
+ 2895 0239 06       		.uleb128 0x6
+ 2896 023a 00000000 		.long	.LASF46
+ 2897 023e 01       		.byte	0x1
+ 2898 023f 3F       		.byte	0x3f
+ 2899 0240 87070000 		.long	0x787
+ 2900 0244 02       		.byte	0x2
+ 2901 0245 23       		.byte	0x23
+ 2902 0246 48       		.uleb128 0x48
+ 2903 0247 00       		.byte	0x0
+ 2904 0248 04       		.uleb128 0x4
+ 2905 0249 00000000 		.long	.LASF47
+ 2906 024d 07       		.byte	0x7
+ 2907 024e 2F       		.byte	0x2f
+ 2908 024f 53020000 		.long	0x253
+ 2909 0253 05       		.uleb128 0x5
+ 2910 0254 00000000 		.long	.LASF47
+ 2911 0258 08       		.byte	0x8
+ 2912 0259 07       		.byte	0x7
+ 2913 025a 2F       		.byte	0x2f
+ 2914 025b 7C020000 		.long	0x27c
+ 2915 025f 0E       		.uleb128 0xe
+ 2916 0260 6D616A00 		.string	"maj"
+ 2917 0264 07       		.byte	0x7
+ 2918 0265 32       		.byte	0x32
+ 2919 0266 62000000 		.long	0x62
+ 2920 026a 02       		.byte	0x2
+ 2921 026b 23       		.byte	0x23
+ 2922 026c 00       		.uleb128 0x0
+ 2923 026d 0E       		.uleb128 0xe
+ 2924 026e 6D696E00 		.string	"min"
+ 2925 0272 07       		.byte	0x7
+ 2926 0273 33       		.byte	0x33
+ 2927 0274 62000000 		.long	0x62
+ 2928 0278 02       		.byte	0x2
+ 2929 0279 23       		.byte	0x23
+ 2930 027a 04       		.uleb128 0x4
+ 2931 027b 00       		.byte	0x0
+ 2932 027c 04       		.uleb128 0x4
+ 2933 027d 00000000 		.long	.LASF48
+ 2934 0281 07       		.byte	0x7
+ 2935 0282 37       		.byte	0x37
+ 2936 0283 87020000 		.long	0x287
+
GAS LISTING /tmp/ccq6ONvw.s 			page 80
+
+
+ 2937 0287 05       		.uleb128 0x5
+ 2938 0288 00000000 		.long	.LASF48
+ 2939 028c B0       		.byte	0xb0
+ 2940 028d 07       		.byte	0x7
+ 2941 028e 37       		.byte	0x37
+ 2942 028f CE030000 		.long	0x3ce
+ 2943 0293 06       		.uleb128 0x6
+ 2944 0294 00000000 		.long	.LASF49
+ 2945 0298 07       		.byte	0x7
+ 2946 0299 3A       		.byte	0x3a
+ 2947 029a 48020000 		.long	0x248
+ 2948 029e 02       		.byte	0x2
+ 2949 029f 23       		.byte	0x23
+ 2950 02a0 00       		.uleb128 0x0
+ 2951 02a1 06       		.uleb128 0x6
+ 2952 02a2 00000000 		.long	.LASF50
+ 2953 02a6 07       		.byte	0x7
+ 2954 02a7 3E       		.byte	0x3e
+ 2955 02a8 E4030000 		.long	0x3e4
+ 2956 02ac 02       		.byte	0x2
+ 2957 02ad 23       		.byte	0x23
+ 2958 02ae 08       		.uleb128 0x8
+ 2959 02af 06       		.uleb128 0x6
+ 2960 02b0 00000000 		.long	.LASF51
+ 2961 02b4 07       		.byte	0x7
+ 2962 02b5 40       		.byte	0x40
+ 2963 02b6 04040000 		.long	0x404
+ 2964 02ba 02       		.byte	0x2
+ 2965 02bb 23       		.byte	0x23
+ 2966 02bc 10       		.uleb128 0x10
+ 2967 02bd 06       		.uleb128 0x6
+ 2968 02be 00000000 		.long	.LASF52
+ 2969 02c2 07       		.byte	0x7
+ 2970 02c3 44       		.byte	0x44
+ 2971 02c4 04040000 		.long	0x404
+ 2972 02c8 02       		.byte	0x2
+ 2973 02c9 23       		.byte	0x23
+ 2974 02ca 18       		.uleb128 0x18
+ 2975 02cb 06       		.uleb128 0x6
+ 2976 02cc 00000000 		.long	.LASF53
+ 2977 02d0 07       		.byte	0x7
+ 2978 02d1 48       		.byte	0x48
+ 2979 02d2 26040000 		.long	0x426
+ 2980 02d6 02       		.byte	0x2
+ 2981 02d7 23       		.byte	0x23
+ 2982 02d8 20       		.uleb128 0x20
+ 2983 02d9 06       		.uleb128 0x6
+ 2984 02da 00000000 		.long	.LASF54
+ 2985 02de 07       		.byte	0x7
+ 2986 02df 4B       		.byte	0x4b
+ 2987 02e0 26040000 		.long	0x426
+ 2988 02e4 02       		.byte	0x2
+ 2989 02e5 23       		.byte	0x23
+ 2990 02e6 28       		.uleb128 0x28
+ 2991 02e7 06       		.uleb128 0x6
+ 2992 02e8 00000000 		.long	.LASF55
+ 2993 02ec 07       		.byte	0x7
+
GAS LISTING /tmp/ccq6ONvw.s 			page 81
+
+
+ 2994 02ed 4E       		.byte	0x4e
+ 2995 02ee 41040000 		.long	0x441
+ 2996 02f2 02       		.byte	0x2
+ 2997 02f3 23       		.byte	0x23
+ 2998 02f4 30       		.uleb128 0x30
+ 2999 02f5 06       		.uleb128 0x6
+ 3000 02f6 00000000 		.long	.LASF56
+ 3001 02fa 07       		.byte	0x7
+ 3002 02fb 51       		.byte	0x51
+ 3003 02fc 41040000 		.long	0x441
+ 3004 0300 02       		.byte	0x2
+ 3005 0301 23       		.byte	0x23
+ 3006 0302 38       		.uleb128 0x38
+ 3007 0303 06       		.uleb128 0x6
+ 3008 0304 00000000 		.long	.LASF57
+ 3009 0308 07       		.byte	0x7
+ 3010 0309 55       		.byte	0x55
+ 3011 030a 6C040000 		.long	0x46c
+ 3012 030e 02       		.byte	0x2
+ 3013 030f 23       		.byte	0x23
+ 3014 0310 40       		.uleb128 0x40
+ 3015 0311 06       		.uleb128 0x6
+ 3016 0312 00000000 		.long	.LASF58
+ 3017 0316 07       		.byte	0x7
+ 3018 0317 58       		.byte	0x58
+ 3019 0318 6C040000 		.long	0x46c
+ 3020 031c 02       		.byte	0x2
+ 3021 031d 23       		.byte	0x23
+ 3022 031e 48       		.uleb128 0x48
+ 3023 031f 06       		.uleb128 0x6
+ 3024 0320 00000000 		.long	.LASF59
+ 3025 0324 07       		.byte	0x7
+ 3026 0325 5D       		.byte	0x5d
+ 3027 0326 91040000 		.long	0x491
+ 3028 032a 02       		.byte	0x2
+ 3029 032b 23       		.byte	0x23
+ 3030 032c 50       		.uleb128 0x50
+ 3031 032d 06       		.uleb128 0x6
+ 3032 032e 00000000 		.long	.LASF60
+ 3033 0332 07       		.byte	0x7
+ 3034 0333 62       		.byte	0x62
+ 3035 0334 91040000 		.long	0x491
+ 3036 0338 02       		.byte	0x2
+ 3037 0339 23       		.byte	0x23
+ 3038 033a 58       		.uleb128 0x58
+ 3039 033b 06       		.uleb128 0x6
+ 3040 033c 00000000 		.long	.LASF61
+ 3041 0340 07       		.byte	0x7
+ 3042 0341 68       		.byte	0x68
+ 3043 0342 B6040000 		.long	0x4b6
+ 3044 0346 02       		.byte	0x2
+ 3045 0347 23       		.byte	0x23
+ 3046 0348 60       		.uleb128 0x60
+ 3047 0349 06       		.uleb128 0x6
+ 3048 034a 00000000 		.long	.LASF62
+ 3049 034e 07       		.byte	0x7
+ 3050 034f 6C       		.byte	0x6c
+
GAS LISTING /tmp/ccq6ONvw.s 			page 82
+
+
+ 3051 0350 B6040000 		.long	0x4b6
+ 3052 0354 02       		.byte	0x2
+ 3053 0355 23       		.byte	0x23
+ 3054 0356 68       		.uleb128 0x68
+ 3055 0357 06       		.uleb128 0x6
+ 3056 0358 00000000 		.long	.LASF63
+ 3057 035c 07       		.byte	0x7
+ 3058 035d 72       		.byte	0x72
+ 3059 035e B6040000 		.long	0x4b6
+ 3060 0362 02       		.byte	0x2
+ 3061 0363 23       		.byte	0x23
+ 3062 0364 70       		.uleb128 0x70
+ 3063 0365 06       		.uleb128 0x6
+ 3064 0366 00000000 		.long	.LASF64
+ 3065 036a 07       		.byte	0x7
+ 3066 036b 74       		.byte	0x74
+ 3067 036c B6040000 		.long	0x4b6
+ 3068 0370 02       		.byte	0x2
+ 3069 0371 23       		.byte	0x23
+ 3070 0372 78       		.uleb128 0x78
+ 3071 0373 06       		.uleb128 0x6
+ 3072 0374 00000000 		.long	.LASF65
+ 3073 0378 07       		.byte	0x7
+ 3074 0379 78       		.byte	0x78
+ 3075 037a B6040000 		.long	0x4b6
+ 3076 037e 03       		.byte	0x3
+ 3077 037f 23       		.byte	0x23
+ 3078 0380 8001     		.uleb128 0x80
+ 3079 0382 06       		.uleb128 0x6
+ 3080 0383 00000000 		.long	.LASF66
+ 3081 0387 07       		.byte	0x7
+ 3082 0388 7A       		.byte	0x7a
+ 3083 0389 B6040000 		.long	0x4b6
+ 3084 038d 03       		.byte	0x3
+ 3085 038e 23       		.byte	0x23
+ 3086 038f 8801     		.uleb128 0x88
+ 3087 0391 06       		.uleb128 0x6
+ 3088 0392 00000000 		.long	.LASF67
+ 3089 0396 07       		.byte	0x7
+ 3090 0397 7E       		.byte	0x7e
+ 3091 0398 B6040000 		.long	0x4b6
+ 3092 039c 03       		.byte	0x3
+ 3093 039d 23       		.byte	0x23
+ 3094 039e 9001     		.uleb128 0x90
+ 3095 03a0 06       		.uleb128 0x6
+ 3096 03a1 00000000 		.long	.LASF68
+ 3097 03a5 07       		.byte	0x7
+ 3098 03a6 80       		.byte	0x80
+ 3099 03a7 B6040000 		.long	0x4b6
+ 3100 03ab 03       		.byte	0x3
+ 3101 03ac 23       		.byte	0x23
+ 3102 03ad 9801     		.uleb128 0x98
+ 3103 03af 06       		.uleb128 0x6
+ 3104 03b0 00000000 		.long	.LASF69
+ 3105 03b4 07       		.byte	0x7
+ 3106 03b5 84       		.byte	0x84
+ 3107 03b6 B6040000 		.long	0x4b6
+
GAS LISTING /tmp/ccq6ONvw.s 			page 83
+
+
+ 3108 03ba 03       		.byte	0x3
+ 3109 03bb 23       		.byte	0x23
+ 3110 03bc A001     		.uleb128 0xa0
+ 3111 03be 06       		.uleb128 0x6
+ 3112 03bf 00000000 		.long	.LASF70
+ 3113 03c3 07       		.byte	0x7
+ 3114 03c4 86       		.byte	0x86
+ 3115 03c5 B6040000 		.long	0x4b6
+ 3116 03c9 03       		.byte	0x3
+ 3117 03ca 23       		.byte	0x23
+ 3118 03cb A801     		.uleb128 0xa8
+ 3119 03cd 00       		.byte	0x0
+ 3120 03ce 11       		.uleb128 0x11
+ 3121 03cf 01       		.byte	0x1
+ 3122 03d0 7B000000 		.long	0x7b
+ 3123 03d4 DE030000 		.long	0x3de
+ 3124 03d8 10       		.uleb128 0x10
+ 3125 03d9 DE030000 		.long	0x3de
+ 3126 03dd 00       		.byte	0x0
+ 3127 03de 0A       		.uleb128 0xa
+ 3128 03df 08       		.byte	0x8
+ 3129 03e0 14020000 		.long	0x214
+ 3130 03e4 0A       		.uleb128 0xa
+ 3131 03e5 08       		.byte	0x8
+ 3132 03e6 CE030000 		.long	0x3ce
+ 3133 03ea 11       		.uleb128 0x11
+ 3134 03eb 01       		.byte	0x1
+ 3135 03ec 7B000000 		.long	0x7b
+ 3136 03f0 04040000 		.long	0x404
+ 3137 03f4 10       		.uleb128 0x10
+ 3138 03f5 DE030000 		.long	0x3de
+ 3139 03f9 10       		.uleb128 0x10
+ 3140 03fa B6000000 		.long	0xb6
+ 3141 03fe 10       		.uleb128 0x10
+ 3142 03ff 62000000 		.long	0x62
+ 3143 0403 00       		.byte	0x0
+ 3144 0404 0A       		.uleb128 0xa
+ 3145 0405 08       		.byte	0x8
+ 3146 0406 EA030000 		.long	0x3ea
+ 3147 040a 11       		.uleb128 0x11
+ 3148 040b 01       		.byte	0x1
+ 3149 040c 7B000000 		.long	0x7b
+ 3150 0410 1F040000 		.long	0x41f
+ 3151 0414 10       		.uleb128 0x10
+ 3152 0415 DE030000 		.long	0x3de
+ 3153 0419 10       		.uleb128 0x10
+ 3154 041a 1F040000 		.long	0x41f
+ 3155 041e 00       		.byte	0x0
+ 3156 041f 0A       		.uleb128 0xa
+ 3157 0420 08       		.byte	0x8
+ 3158 0421 25040000 		.long	0x425
+ 3159 0425 12       		.uleb128 0x12
+ 3160 0426 0A       		.uleb128 0xa
+ 3161 0427 08       		.byte	0x8
+ 3162 0428 0A040000 		.long	0x40a
+ 3163 042c 11       		.uleb128 0x11
+ 3164 042d 01       		.byte	0x1
+
GAS LISTING /tmp/ccq6ONvw.s 			page 84
+
+
+ 3165 042e 7B000000 		.long	0x7b
+ 3166 0432 41040000 		.long	0x441
+ 3167 0436 10       		.uleb128 0x10
+ 3168 0437 DE030000 		.long	0x3de
+ 3169 043b 10       		.uleb128 0x10
+ 3170 043c F7010000 		.long	0x1f7
+ 3171 0440 00       		.byte	0x0
+ 3172 0441 0A       		.uleb128 0xa
+ 3173 0442 08       		.byte	0x8
+ 3174 0443 2C040000 		.long	0x42c
+ 3175 0447 11       		.uleb128 0x11
+ 3176 0448 01       		.byte	0x1
+ 3177 0449 7B000000 		.long	0x7b
+ 3178 044d 61040000 		.long	0x461
+ 3179 0451 10       		.uleb128 0x10
+ 3180 0452 61040000 		.long	0x461
+ 3181 0456 10       		.uleb128 0x10
+ 3182 0457 1F040000 		.long	0x41f
+ 3183 045b 10       		.uleb128 0x10
+ 3184 045c B4000000 		.long	0xb4
+ 3185 0460 00       		.byte	0x0
+ 3186 0461 0A       		.uleb128 0xa
+ 3187 0462 08       		.byte	0x8
+ 3188 0463 67040000 		.long	0x467
+ 3189 0467 0B       		.uleb128 0xb
+ 3190 0468 14020000 		.long	0x214
+ 3191 046c 0A       		.uleb128 0xa
+ 3192 046d 08       		.byte	0x8
+ 3193 046e 47040000 		.long	0x447
+ 3194 0472 11       		.uleb128 0x11
+ 3195 0473 01       		.byte	0x1
+ 3196 0474 7B000000 		.long	0x7b
+ 3197 0478 91040000 		.long	0x491
+ 3198 047c 10       		.uleb128 0x10
+ 3199 047d 61040000 		.long	0x461
+ 3200 0481 10       		.uleb128 0x10
+ 3201 0482 1F040000 		.long	0x41f
+ 3202 0486 10       		.uleb128 0x10
+ 3203 0487 B4000000 		.long	0xb4
+ 3204 048b 10       		.uleb128 0x10
+ 3205 048c 62000000 		.long	0x62
+ 3206 0490 00       		.byte	0x0
+ 3207 0491 0A       		.uleb128 0xa
+ 3208 0492 08       		.byte	0x8
+ 3209 0493 72040000 		.long	0x472
+ 3210 0497 11       		.uleb128 0x11
+ 3211 0498 01       		.byte	0x1
+ 3212 0499 7B000000 		.long	0x7b
+ 3213 049d B6040000 		.long	0x4b6
+ 3214 04a1 10       		.uleb128 0x10
+ 3215 04a2 DE030000 		.long	0x3de
+ 3216 04a6 10       		.uleb128 0x10
+ 3217 04a7 1F040000 		.long	0x41f
+ 3218 04ab 10       		.uleb128 0x10
+ 3219 04ac B4000000 		.long	0xb4
+ 3220 04b0 10       		.uleb128 0x10
+ 3221 04b1 62000000 		.long	0x62
+
GAS LISTING /tmp/ccq6ONvw.s 			page 85
+
+
+ 3222 04b5 00       		.byte	0x0
+ 3223 04b6 0A       		.uleb128 0xa
+ 3224 04b7 08       		.byte	0x8
+ 3225 04b8 97040000 		.long	0x497
+ 3226 04bc 04       		.uleb128 0x4
+ 3227 04bd 00000000 		.long	.LASF71
+ 3228 04c1 07       		.byte	0x7
+ 3229 04c2 90       		.byte	0x90
+ 3230 04c3 C7040000 		.long	0x4c7
+ 3231 04c7 13       		.uleb128 0x13
+ 3232 04c8 00000000 		.long	.LASF71
+ 3233 04cc 08       		.byte	0x8
+ 3234 04cd 07       		.byte	0x7
+ 3235 04ce 90       		.byte	0x90
+ 3236 04cf E9040000 		.long	0x4e9
+ 3237 04d3 14       		.uleb128 0x14
+ 3238 04d4 00000000 		.long	.LASF49
+ 3239 04d8 07       		.byte	0x7
+ 3240 04d9 93       		.byte	0x93
+ 3241 04da E9040000 		.long	0x4e9
+ 3242 04de 15       		.uleb128 0x15
+ 3243 04df 763100   		.string	"v1"
+ 3244 04e2 07       		.byte	0x7
+ 3245 04e3 94       		.byte	0x94
+ 3246 04e4 F4040000 		.long	0x4f4
+ 3247 04e8 00       		.byte	0x0
+ 3248 04e9 0A       		.uleb128 0xa
+ 3249 04ea 08       		.byte	0x8
+ 3250 04eb EF040000 		.long	0x4ef
+ 3251 04ef 0B       		.uleb128 0xb
+ 3252 04f0 48020000 		.long	0x248
+ 3253 04f4 0A       		.uleb128 0xa
+ 3254 04f5 08       		.byte	0x8
+ 3255 04f6 FA040000 		.long	0x4fa
+ 3256 04fa 0B       		.uleb128 0xb
+ 3257 04fb 7C020000 		.long	0x27c
+ 3258 04ff 04       		.uleb128 0x4
+ 3259 0500 00000000 		.long	.LASF72
+ 3260 0504 08       		.byte	0x8
+ 3261 0505 37       		.byte	0x37
+ 3262 0506 0A050000 		.long	0x50a
+ 3263 050a 16       		.uleb128 0x16
+ 3264 050b C1000000 		.long	0xc1
+ 3265 050f 1A050000 		.long	0x51a
+ 3266 0513 17       		.uleb128 0x17
+ 3267 0514 B1000000 		.long	0xb1
+ 3268 0518 0F       		.byte	0xf
+ 3269 0519 00       		.byte	0x0
+ 3270 051a 02       		.uleb128 0x2
+ 3271 051b 08       		.byte	0x8
+ 3272 051c 05       		.byte	0x5
+ 3273 051d 00000000 		.long	.LASF73
+ 3274 0521 02       		.uleb128 0x2
+ 3275 0522 04       		.byte	0x4
+ 3276 0523 04       		.byte	0x4
+ 3277 0524 00000000 		.long	.LASF74
+ 3278 0528 0A       		.uleb128 0xa
+
GAS LISTING /tmp/ccq6ONvw.s 			page 86
+
+
+ 3279 0529 08       		.byte	0x8
+ 3280 052a C1000000 		.long	0xc1
+ 3281 052e 02       		.uleb128 0x2
+ 3282 052f 08       		.byte	0x8
+ 3283 0530 07       		.byte	0x7
+ 3284 0531 00000000 		.long	.LASF75
+ 3285 0535 16       		.uleb128 0x16
+ 3286 0536 C1000000 		.long	0xc1
+ 3287 053a 45050000 		.long	0x545
+ 3288 053e 17       		.uleb128 0x17
+ 3289 053f B1000000 		.long	0xb1
+ 3290 0543 1F       		.byte	0x1f
+ 3291 0544 00       		.byte	0x0
+ 3292 0545 02       		.uleb128 0x2
+ 3293 0546 08       		.byte	0x8
+ 3294 0547 04       		.byte	0x4
+ 3295 0548 00000000 		.long	.LASF76
+ 3296 054c 04       		.uleb128 0x4
+ 3297 054d 00000000 		.long	.LASF77
+ 3298 0551 09       		.byte	0x9
+ 3299 0552 26       		.byte	0x26
+ 3300 0553 57050000 		.long	0x557
+ 3301 0557 18       		.uleb128 0x18
+ 3302 0558 01       		.byte	0x1
+ 3303 0559 49000000 		.long	0x49
+ 3304 055d 68050000 		.long	0x568
+ 3305 0561 17       		.uleb128 0x17
+ 3306 0562 B1000000 		.long	0xb1
+ 3307 0566 0F       		.byte	0xf
+ 3308 0567 00       		.byte	0x0
+ 3309 0568 04       		.uleb128 0x4
+ 3310 0569 00000000 		.long	.LASF78
+ 3311 056d 08       		.byte	0x8
+ 3312 056e 3B       		.byte	0x3b
+ 3313 056f 4C050000 		.long	0x54c
+ 3314 0573 04       		.uleb128 0x4
+ 3315 0574 00000000 		.long	.LASF79
+ 3316 0578 08       		.byte	0x8
+ 3317 0579 43       		.byte	0x43
+ 3318 057a 7E050000 		.long	0x57e
+ 3319 057e 05       		.uleb128 0x5
+ 3320 057f 00000000 		.long	.LASF79
+ 3321 0583 08       		.byte	0x8
+ 3322 0584 08       		.byte	0x8
+ 3323 0585 43       		.byte	0x43
+ 3324 0586 A7050000 		.long	0x5a7
+ 3325 058a 0E       		.uleb128 0xe
+ 3326 058b 6D616A00 		.string	"maj"
+ 3327 058f 08       		.byte	0x8
+ 3328 0590 46       		.byte	0x46
+ 3329 0591 62000000 		.long	0x62
+ 3330 0595 02       		.byte	0x2
+ 3331 0596 23       		.byte	0x23
+ 3332 0597 00       		.uleb128 0x0
+ 3333 0598 0E       		.uleb128 0xe
+ 3334 0599 6D696E00 		.string	"min"
+ 3335 059d 08       		.byte	0x8
+
GAS LISTING /tmp/ccq6ONvw.s 			page 87
+
+
+ 3336 059e 47       		.byte	0x47
+ 3337 059f 62000000 		.long	0x62
+ 3338 05a3 02       		.byte	0x2
+ 3339 05a4 23       		.byte	0x23
+ 3340 05a5 04       		.uleb128 0x4
+ 3341 05a6 00       		.byte	0x0
+ 3342 05a7 04       		.uleb128 0x4
+ 3343 05a8 00000000 		.long	.LASF80
+ 3344 05ac 08       		.byte	0x8
+ 3345 05ad 52       		.byte	0x52
+ 3346 05ae B2050000 		.long	0x5b2
+ 3347 05b2 05       		.uleb128 0x5
+ 3348 05b3 00000000 		.long	.LASF80
+ 3349 05b7 40       		.byte	0x40
+ 3350 05b8 08       		.byte	0x8
+ 3351 05b9 52       		.byte	0x52
+ 3352 05ba 2F060000 		.long	0x62f
+ 3353 05be 06       		.uleb128 0x6
+ 3354 05bf 00000000 		.long	.LASF49
+ 3355 05c3 08       		.byte	0x8
+ 3356 05c4 5E       		.byte	0x5e
+ 3357 05c5 73050000 		.long	0x573
+ 3358 05c9 02       		.byte	0x2
+ 3359 05ca 23       		.byte	0x23
+ 3360 05cb 00       		.uleb128 0x0
+ 3361 05cc 06       		.uleb128 0x6
+ 3362 05cd 00000000 		.long	.LASF50
+ 3363 05d1 08       		.byte	0x8
+ 3364 05d2 63       		.byte	0x63
+ 3365 05d3 73060000 		.long	0x673
+ 3366 05d7 02       		.byte	0x2
+ 3367 05d8 23       		.byte	0x23
+ 3368 05d9 08       		.uleb128 0x8
+ 3369 05da 06       		.uleb128 0x6
+ 3370 05db 00000000 		.long	.LASF36
+ 3371 05df 08       		.byte	0x8
+ 3372 05e0 65       		.byte	0x65
+ 3373 05e1 84060000 		.long	0x684
+ 3374 05e5 02       		.byte	0x2
+ 3375 05e6 23       		.byte	0x23
+ 3376 05e7 10       		.uleb128 0x10
+ 3377 05e8 06       		.uleb128 0x6
+ 3378 05e9 00000000 		.long	.LASF81
+ 3379 05ed 08       		.byte	0x8
+ 3380 05ee 67       		.byte	0x67
+ 3381 05ef 84060000 		.long	0x684
+ 3382 05f3 02       		.byte	0x2
+ 3383 05f4 23       		.byte	0x23
+ 3384 05f5 18       		.uleb128 0x18
+ 3385 05f6 06       		.uleb128 0x6
+ 3386 05f7 00000000 		.long	.LASF51
+ 3387 05fb 08       		.byte	0x8
+ 3388 05fc 69       		.byte	0x69
+ 3389 05fd A4060000 		.long	0x6a4
+ 3390 0601 02       		.byte	0x2
+ 3391 0602 23       		.byte	0x23
+ 3392 0603 20       		.uleb128 0x20
+
GAS LISTING /tmp/ccq6ONvw.s 			page 88
+
+
+ 3393 0604 06       		.uleb128 0x6
+ 3394 0605 00000000 		.long	.LASF52
+ 3395 0609 08       		.byte	0x8
+ 3396 060a 6D       		.byte	0x6d
+ 3397 060b A4060000 		.long	0x6a4
+ 3398 060f 02       		.byte	0x2
+ 3399 0610 23       		.byte	0x23
+ 3400 0611 28       		.uleb128 0x28
+ 3401 0612 06       		.uleb128 0x6
+ 3402 0613 00000000 		.long	.LASF57
+ 3403 0617 08       		.byte	0x8
+ 3404 0618 71       		.byte	0x71
+ 3405 0619 C0060000 		.long	0x6c0
+ 3406 061d 02       		.byte	0x2
+ 3407 061e 23       		.byte	0x23
+ 3408 061f 30       		.uleb128 0x30
+ 3409 0620 06       		.uleb128 0x6
+ 3410 0621 00000000 		.long	.LASF58
+ 3411 0625 08       		.byte	0x8
+ 3412 0626 75       		.byte	0x75
+ 3413 0627 C0060000 		.long	0x6c0
+ 3414 062b 02       		.byte	0x2
+ 3415 062c 23       		.byte	0x23
+ 3416 062d 38       		.uleb128 0x38
+ 3417 062e 00       		.byte	0x0
+ 3418 062f 04       		.uleb128 0x4
+ 3419 0630 00000000 		.long	.LASF82
+ 3420 0634 08       		.byte	0x8
+ 3421 0635 53       		.byte	0x53
+ 3422 0636 3A060000 		.long	0x63a
+ 3423 063a 13       		.uleb128 0x13
+ 3424 063b 00000000 		.long	.LASF82
+ 3425 063f 40       		.byte	0x40
+ 3426 0640 08       		.byte	0x8
+ 3427 0641 53       		.byte	0x53
+ 3428 0642 5C060000 		.long	0x65c
+ 3429 0646 14       		.uleb128 0x14
+ 3430 0647 00000000 		.long	.LASF49
+ 3431 064b 08       		.byte	0x8
+ 3432 064c 7F       		.byte	0x7f
+ 3433 064d 73050000 		.long	0x573
+ 3434 0651 15       		.uleb128 0x15
+ 3435 0652 763100   		.string	"v1"
+ 3436 0655 08       		.byte	0x8
+ 3437 0656 80       		.byte	0x80
+ 3438 0657 A7050000 		.long	0x5a7
+ 3439 065b 00       		.byte	0x0
+ 3440 065c 0F       		.uleb128 0xf
+ 3441 065d 01       		.byte	0x1
+ 3442 065e 68060000 		.long	0x668
+ 3443 0662 10       		.uleb128 0x10
+ 3444 0663 68060000 		.long	0x668
+ 3445 0667 00       		.byte	0x0
+ 3446 0668 0A       		.uleb128 0xa
+ 3447 0669 08       		.byte	0x8
+ 3448 066a 6E060000 		.long	0x66e
+ 3449 066e 0B       		.uleb128 0xb
+
GAS LISTING /tmp/ccq6ONvw.s 			page 89
+
+
+ 3450 066f 2F060000 		.long	0x62f
+ 3451 0673 0A       		.uleb128 0xa
+ 3452 0674 08       		.byte	0x8
+ 3453 0675 5C060000 		.long	0x65c
+ 3454 0679 19       		.uleb128 0x19
+ 3455 067a 62000000 		.long	0x62
+ 3456 067e 84060000 		.long	0x684
+ 3457 0682 1A       		.uleb128 0x1a
+ 3458 0683 00       		.byte	0x0
+ 3459 0684 0A       		.uleb128 0xa
+ 3460 0685 08       		.byte	0x8
+ 3461 0686 79060000 		.long	0x679
+ 3462 068a 11       		.uleb128 0x11
+ 3463 068b 01       		.byte	0x1
+ 3464 068c 7B000000 		.long	0x7b
+ 3465 0690 A4060000 		.long	0x6a4
+ 3466 0694 10       		.uleb128 0x10
+ 3467 0695 B4000000 		.long	0xb4
+ 3468 0699 10       		.uleb128 0x10
+ 3469 069a B6000000 		.long	0xb6
+ 3470 069e 10       		.uleb128 0x10
+ 3471 069f 62000000 		.long	0x62
+ 3472 06a3 00       		.byte	0x0
+ 3473 06a4 0A       		.uleb128 0xa
+ 3474 06a5 08       		.byte	0x8
+ 3475 06a6 8A060000 		.long	0x68a
+ 3476 06aa 0F       		.uleb128 0xf
+ 3477 06ab 01       		.byte	0x1
+ 3478 06ac C0060000 		.long	0x6c0
+ 3479 06b0 10       		.uleb128 0x10
+ 3480 06b1 B6000000 		.long	0xb6
+ 3481 06b5 10       		.uleb128 0x10
+ 3482 06b6 28050000 		.long	0x528
+ 3483 06ba 10       		.uleb128 0x10
+ 3484 06bb 1F040000 		.long	0x41f
+ 3485 06bf 00       		.byte	0x0
+ 3486 06c0 0A       		.uleb128 0xa
+ 3487 06c1 08       		.byte	0x8
+ 3488 06c2 AA060000 		.long	0x6aa
+ 3489 06c6 04       		.uleb128 0x4
+ 3490 06c7 00000000 		.long	.LASF83
+ 3491 06cb 08       		.byte	0x8
+ 3492 06cc 84       		.byte	0x84
+ 3493 06cd D1060000 		.long	0x6d1
+ 3494 06d1 05       		.uleb128 0x5
+ 3495 06d2 00000000 		.long	.LASF83
+ 3496 06d6 40       		.byte	0x40
+ 3497 06d7 08       		.byte	0x8
+ 3498 06d8 84       		.byte	0x84
+ 3499 06d9 4E070000 		.long	0x74e
+ 3500 06dd 06       		.uleb128 0x6
+ 3501 06de 00000000 		.long	.LASF49
+ 3502 06e2 08       		.byte	0x8
+ 3503 06e3 90       		.byte	0x90
+ 3504 06e4 73050000 		.long	0x573
+ 3505 06e8 02       		.byte	0x2
+ 3506 06e9 23       		.byte	0x23
+
GAS LISTING /tmp/ccq6ONvw.s 			page 90
+
+
+ 3507 06ea 00       		.uleb128 0x0
+ 3508 06eb 06       		.uleb128 0x6
+ 3509 06ec 00000000 		.long	.LASF50
+ 3510 06f0 08       		.byte	0x8
+ 3511 06f1 95       		.byte	0x95
+ 3512 06f2 92070000 		.long	0x792
+ 3513 06f6 02       		.byte	0x2
+ 3514 06f7 23       		.byte	0x23
+ 3515 06f8 08       		.uleb128 0x8
+ 3516 06f9 06       		.uleb128 0x6
+ 3517 06fa 00000000 		.long	.LASF36
+ 3518 06fe 08       		.byte	0x8
+ 3519 06ff 97       		.byte	0x97
+ 3520 0700 84060000 		.long	0x684
+ 3521 0704 02       		.byte	0x2
+ 3522 0705 23       		.byte	0x23
+ 3523 0706 10       		.uleb128 0x10
+ 3524 0707 06       		.uleb128 0x6
+ 3525 0708 00000000 		.long	.LASF81
+ 3526 070c 08       		.byte	0x8
+ 3527 070d 99       		.byte	0x99
+ 3528 070e 84060000 		.long	0x684
+ 3529 0712 02       		.byte	0x2
+ 3530 0713 23       		.byte	0x23
+ 3531 0714 18       		.uleb128 0x18
+ 3532 0715 06       		.uleb128 0x6
+ 3533 0716 00000000 		.long	.LASF51
+ 3534 071a 08       		.byte	0x8
+ 3535 071b 9B       		.byte	0x9b
+ 3536 071c A4060000 		.long	0x6a4
+ 3537 0720 02       		.byte	0x2
+ 3538 0721 23       		.byte	0x23
+ 3539 0722 20       		.uleb128 0x20
+ 3540 0723 06       		.uleb128 0x6
+ 3541 0724 00000000 		.long	.LASF52
+ 3542 0728 08       		.byte	0x8
+ 3543 0729 9F       		.byte	0x9f
+ 3544 072a A4060000 		.long	0x6a4
+ 3545 072e 02       		.byte	0x2
+ 3546 072f 23       		.byte	0x23
+ 3547 0730 28       		.uleb128 0x28
+ 3548 0731 06       		.uleb128 0x6
+ 3549 0732 00000000 		.long	.LASF57
+ 3550 0736 08       		.byte	0x8
+ 3551 0737 A3       		.byte	0xa3
+ 3552 0738 AD070000 		.long	0x7ad
+ 3553 073c 02       		.byte	0x2
+ 3554 073d 23       		.byte	0x23
+ 3555 073e 30       		.uleb128 0x30
+ 3556 073f 06       		.uleb128 0x6
+ 3557 0740 00000000 		.long	.LASF58
+ 3558 0744 08       		.byte	0x8
+ 3559 0745 A6       		.byte	0xa6
+ 3560 0746 AD070000 		.long	0x7ad
+ 3561 074a 02       		.byte	0x2
+ 3562 074b 23       		.byte	0x23
+ 3563 074c 38       		.uleb128 0x38
+
GAS LISTING /tmp/ccq6ONvw.s 			page 91
+
+
+ 3564 074d 00       		.byte	0x0
+ 3565 074e 04       		.uleb128 0x4
+ 3566 074f 00000000 		.long	.LASF84
+ 3567 0753 08       		.byte	0x8
+ 3568 0754 85       		.byte	0x85
+ 3569 0755 59070000 		.long	0x759
+ 3570 0759 13       		.uleb128 0x13
+ 3571 075a 00000000 		.long	.LASF84
+ 3572 075e 40       		.byte	0x40
+ 3573 075f 08       		.byte	0x8
+ 3574 0760 85       		.byte	0x85
+ 3575 0761 7B070000 		.long	0x77b
+ 3576 0765 14       		.uleb128 0x14
+ 3577 0766 00000000 		.long	.LASF49
+ 3578 076a 08       		.byte	0x8
+ 3579 076b AF       		.byte	0xaf
+ 3580 076c 73050000 		.long	0x573
+ 3581 0770 15       		.uleb128 0x15
+ 3582 0771 763100   		.string	"v1"
+ 3583 0774 08       		.byte	0x8
+ 3584 0775 B0       		.byte	0xb0
+ 3585 0776 C6060000 		.long	0x6c6
+ 3586 077a 00       		.byte	0x0
+ 3587 077b 0F       		.uleb128 0xf
+ 3588 077c 01       		.byte	0x1
+ 3589 077d 87070000 		.long	0x787
+ 3590 0781 10       		.uleb128 0x10
+ 3591 0782 87070000 		.long	0x787
+ 3592 0786 00       		.byte	0x0
+ 3593 0787 0A       		.uleb128 0xa
+ 3594 0788 08       		.byte	0x8
+ 3595 0789 8D070000 		.long	0x78d
+ 3596 078d 0B       		.uleb128 0xb
+ 3597 078e 4E070000 		.long	0x74e
+ 3598 0792 0A       		.uleb128 0xa
+ 3599 0793 08       		.byte	0x8
+ 3600 0794 7B070000 		.long	0x77b
+ 3601 0798 11       		.uleb128 0x11
+ 3602 0799 01       		.byte	0x1
+ 3603 079a 68050000 		.long	0x568
+ 3604 079e AD070000 		.long	0x7ad
+ 3605 07a2 10       		.uleb128 0x10
+ 3606 07a3 68050000 		.long	0x568
+ 3607 07a7 10       		.uleb128 0x10
+ 3608 07a8 1F040000 		.long	0x41f
+ 3609 07ac 00       		.byte	0x0
+ 3610 07ad 0A       		.uleb128 0xa
+ 3611 07ae 08       		.byte	0x8
+ 3612 07af 98070000 		.long	0x798
+ 3613 07b3 04       		.uleb128 0x4
+ 3614 07b4 00000000 		.long	.LASF85
+ 3615 07b8 0A       		.byte	0xa
+ 3616 07b9 B0       		.byte	0xb0
+ 3617 07ba BE070000 		.long	0x7be
+ 3618 07be 1B       		.uleb128 0x1b
+ 3619 07bf 00000000 		.long	.LASF85
+ 3620 07c3 0001     		.value	0x100
+
GAS LISTING /tmp/ccq6ONvw.s 			page 92
+
+
+ 3621 07c5 0A       		.byte	0xa
+ 3622 07c6 B0       		.byte	0xb0
+ 3623 07c7 E9070000 		.long	0x7e9
+ 3624 07cb 06       		.uleb128 0x6
+ 3625 07cc 00000000 		.long	.LASF86
+ 3626 07d0 0A       		.byte	0xa
+ 3627 07d1 B3       		.byte	0xb3
+ 3628 07d2 E9070000 		.long	0x7e9
+ 3629 07d6 02       		.byte	0x2
+ 3630 07d7 23       		.byte	0x23
+ 3631 07d8 00       		.uleb128 0x0
+ 3632 07d9 06       		.uleb128 0x6
+ 3633 07da 00000000 		.long	.LASF87
+ 3634 07de 0A       		.byte	0xa
+ 3635 07df B4       		.byte	0xb4
+ 3636 07e0 62000000 		.long	0x62
+ 3637 07e4 03       		.byte	0x3
+ 3638 07e5 23       		.byte	0x23
+ 3639 07e6 F001     		.uleb128 0xf0
+ 3640 07e8 00       		.byte	0x0
+ 3641 07e9 16       		.uleb128 0x16
+ 3642 07ea 68050000 		.long	0x568
+ 3643 07ee F9070000 		.long	0x7f9
+ 3644 07f2 17       		.uleb128 0x17
+ 3645 07f3 B1000000 		.long	0xb1
+ 3646 07f7 0E       		.byte	0xe
+ 3647 07f8 00       		.byte	0x0
+ 3648 07f9 04       		.uleb128 0x4
+ 3649 07fa 00000000 		.long	.LASF88
+ 3650 07fe 0A       		.byte	0xa
+ 3651 07ff D2       		.byte	0xd2
+ 3652 0800 04080000 		.long	0x804
+ 3653 0804 1B       		.uleb128 0x1b
+ 3654 0805 00000000 		.long	.LASF88
+ 3655 0809 7002     		.value	0x270
+ 3656 080b 0A       		.byte	0xa
+ 3657 080c D2       		.byte	0xd2
+ 3658 080d 5B080000 		.long	0x85b
+ 3659 0811 0E       		.uleb128 0xe
+ 3660 0812 64616400 		.string	"dad"
+ 3661 0816 0A       		.byte	0xa
+ 3662 0817 D5       		.byte	0xd5
+ 3663 0818 54010000 		.long	0x154
+ 3664 081c 02       		.byte	0x2
+ 3665 081d 23       		.byte	0x23
+ 3666 081e 00       		.uleb128 0x0
+ 3667 081f 06       		.uleb128 0x6
+ 3668 0820 00000000 		.long	.LASF89
+ 3669 0824 0A       		.byte	0xa
+ 3670 0825 D6       		.byte	0xd6
+ 3671 0826 B3070000 		.long	0x7b3
+ 3672 082a 02       		.byte	0x2
+ 3673 082b 23       		.byte	0x23
+ 3674 082c 50       		.uleb128 0x50
+ 3675 082d 06       		.uleb128 0x6
+ 3676 082e 00000000 		.long	.LASF90
+ 3677 0832 0A       		.byte	0xa
+
GAS LISTING /tmp/ccq6ONvw.s 			page 93
+
+
+ 3678 0833 D7       		.byte	0xd7
+ 3679 0834 B3070000 		.long	0x7b3
+ 3680 0838 03       		.byte	0x3
+ 3681 0839 23       		.byte	0x23
+ 3682 083a D002     		.uleb128 0x150
+ 3683 083c 06       		.uleb128 0x6
+ 3684 083d 00000000 		.long	.LASF91
+ 3685 0841 0A       		.byte	0xa
+ 3686 0842 D8       		.byte	0xd8
+ 3687 0843 68050000 		.long	0x568
+ 3688 0847 03       		.byte	0x3
+ 3689 0848 23       		.byte	0x23
+ 3690 0849 D004     		.uleb128 0x250
+ 3691 084b 06       		.uleb128 0x6
+ 3692 084c 00000000 		.long	.LASF92
+ 3693 0850 0A       		.byte	0xa
+ 3694 0851 D9       		.byte	0xd9
+ 3695 0852 68050000 		.long	0x568
+ 3696 0856 03       		.byte	0x3
+ 3697 0857 23       		.byte	0x23
+ 3698 0858 E004     		.uleb128 0x260
+ 3699 085a 00       		.byte	0x0
+ 3700 085b 04       		.uleb128 0x4
+ 3701 085c 00000000 		.long	.LASF93
+ 3702 0860 0B       		.byte	0xb
+ 3703 0861 29       		.byte	0x29
+ 3704 0862 66080000 		.long	0x866
+ 3705 0866 05       		.uleb128 0x5
+ 3706 0867 00000000 		.long	.LASF93
+ 3707 086b 70       		.byte	0x70
+ 3708 086c 0B       		.byte	0xb
+ 3709 086d 29       		.byte	0x29
+ 3710 086e 9D080000 		.long	0x89d
+ 3711 0872 0E       		.uleb128 0xe
+ 3712 0873 64616400 		.string	"dad"
+ 3713 0877 0B       		.byte	0xb
+ 3714 0878 2C       		.byte	0x2c
+ 3715 0879 54010000 		.long	0x154
+ 3716 087d 02       		.byte	0x2
+ 3717 087e 23       		.byte	0x23
+ 3718 087f 00       		.uleb128 0x0
+ 3719 0880 06       		.uleb128 0x6
+ 3720 0881 00000000 		.long	.LASF91
+ 3721 0885 0B       		.byte	0xb
+ 3722 0886 2D       		.byte	0x2d
+ 3723 0887 68050000 		.long	0x568
+ 3724 088b 02       		.byte	0x2
+ 3725 088c 23       		.byte	0x23
+ 3726 088d 50       		.uleb128 0x50
+ 3727 088e 06       		.uleb128 0x6
+ 3728 088f 00000000 		.long	.LASF92
+ 3729 0893 0B       		.byte	0xb
+ 3730 0894 2E       		.byte	0x2e
+ 3731 0895 68050000 		.long	0x568
+ 3732 0899 02       		.byte	0x2
+ 3733 089a 23       		.byte	0x23
+ 3734 089b 60       		.uleb128 0x60
+
GAS LISTING /tmp/ccq6ONvw.s 			page 94
+
+
+ 3735 089c 00       		.byte	0x0
+ 3736 089d 04       		.uleb128 0x4
+ 3737 089e 00000000 		.long	.LASF94
+ 3738 08a2 0C       		.byte	0xc
+ 3739 08a3 48       		.byte	0x48
+ 3740 08a4 62000000 		.long	0x62
+ 3741 08a8 0C       		.uleb128 0xc
+ 3742 08a9 04       		.byte	0x4
+ 3743 08aa 0C       		.byte	0xc
+ 3744 08ab 4A       		.byte	0x4a
+ 3745 08ac C3080000 		.long	0x8c3
+ 3746 08b0 0D       		.uleb128 0xd
+ 3747 08b1 00000000 		.long	.LASF95
+ 3748 08b5 00       		.sleb128 0
+ 3749 08b6 0D       		.uleb128 0xd
+ 3750 08b7 00000000 		.long	.LASF96
+ 3751 08bb 01       		.sleb128 1
+ 3752 08bc 0D       		.uleb128 0xd
+ 3753 08bd 00000000 		.long	.LASF97
+ 3754 08c1 02       		.sleb128 2
+ 3755 08c2 00       		.byte	0x0
+ 3756 08c3 04       		.uleb128 0x4
+ 3757 08c4 00000000 		.long	.LASF98
+ 3758 08c8 0E       		.byte	0xe
+ 3759 08c9 40       		.byte	0x40
+ 3760 08ca CE080000 		.long	0x8ce
+ 3761 08ce 13       		.uleb128 0x13
+ 3762 08cf 00000000 		.long	.LASF98
+ 3763 08d3 40       		.byte	0x40
+ 3764 08d4 0E       		.byte	0xe
+ 3765 08d5 40       		.byte	0x40
+ 3766 08d6 F1080000 		.long	0x8f1
+ 3767 08da 14       		.uleb128 0x14
+ 3768 08db 00000000 		.long	.LASF99
+ 3769 08df 0E       		.byte	0xe
+ 3770 08e0 43       		.byte	0x43
+ 3771 08e1 2F060000 		.long	0x62f
+ 3772 08e5 15       		.uleb128 0x15
+ 3773 08e6 76656300 		.string	"vec"
+ 3774 08ea 0E       		.byte	0xe
+ 3775 08eb 44       		.byte	0x44
+ 3776 08ec 4E070000 		.long	0x74e
+ 3777 08f0 00       		.byte	0x0
+ 3778 08f1 1C       		.uleb128 0x1c
+ 3779 08f2 00000000 		.long	.LASF122
+ 3780 08f6 04       		.byte	0x4
+ 3781 08f7 0F       		.byte	0xf
+ 3782 08f8 5A       		.byte	0x5a
+ 3783 08f9 82090000 		.long	0x982
+ 3784 08fd 0D       		.uleb128 0xd
+ 3785 08fe 00000000 		.long	.LASF100
+ 3786 0902 00       		.sleb128 0
+ 3787 0903 0D       		.uleb128 0xd
+ 3788 0904 00000000 		.long	.LASF101
+ 3789 0908 01       		.sleb128 1
+ 3790 0909 0D       		.uleb128 0xd
+ 3791 090a 00000000 		.long	.LASF102
+
GAS LISTING /tmp/ccq6ONvw.s 			page 95
+
+
+ 3792 090e 02       		.sleb128 2
+ 3793 090f 0D       		.uleb128 0xd
+ 3794 0910 00000000 		.long	.LASF103
+ 3795 0914 03       		.sleb128 3
+ 3796 0915 0D       		.uleb128 0xd
+ 3797 0916 00000000 		.long	.LASF104
+ 3798 091a 04       		.sleb128 4
+ 3799 091b 0D       		.uleb128 0xd
+ 3800 091c 00000000 		.long	.LASF105
+ 3801 0920 05       		.sleb128 5
+ 3802 0921 0D       		.uleb128 0xd
+ 3803 0922 00000000 		.long	.LASF106
+ 3804 0926 06       		.sleb128 6
+ 3805 0927 0D       		.uleb128 0xd
+ 3806 0928 00000000 		.long	.LASF107
+ 3807 092c 07       		.sleb128 7
+ 3808 092d 0D       		.uleb128 0xd
+ 3809 092e 00000000 		.long	.LASF108
+ 3810 0932 08       		.sleb128 8
+ 3811 0933 0D       		.uleb128 0xd
+ 3812 0934 00000000 		.long	.LASF109
+ 3813 0938 09       		.sleb128 9
+ 3814 0939 0D       		.uleb128 0xd
+ 3815 093a 00000000 		.long	.LASF110
+ 3816 093e 0A       		.sleb128 10
+ 3817 093f 0D       		.uleb128 0xd
+ 3818 0940 00000000 		.long	.LASF111
+ 3819 0944 0B       		.sleb128 11
+ 3820 0945 0D       		.uleb128 0xd
+ 3821 0946 00000000 		.long	.LASF112
+ 3822 094a 0C       		.sleb128 12
+ 3823 094b 0D       		.uleb128 0xd
+ 3824 094c 00000000 		.long	.LASF113
+ 3825 0950 0D       		.sleb128 13
+ 3826 0951 0D       		.uleb128 0xd
+ 3827 0952 00000000 		.long	.LASF114
+ 3828 0956 0E       		.sleb128 14
+ 3829 0957 0D       		.uleb128 0xd
+ 3830 0958 00000000 		.long	.LASF115
+ 3831 095c 0E       		.sleb128 14
+ 3832 095d 0D       		.uleb128 0xd
+ 3833 095e 00000000 		.long	.LASF116
+ 3834 0962 0F       		.sleb128 15
+ 3835 0963 0D       		.uleb128 0xd
+ 3836 0964 00000000 		.long	.LASF117
+ 3837 0968 10       		.sleb128 16
+ 3838 0969 0D       		.uleb128 0xd
+ 3839 096a 00000000 		.long	.LASF118
+ 3840 096e 11       		.sleb128 17
+ 3841 096f 0D       		.uleb128 0xd
+ 3842 0970 00000000 		.long	.LASF119
+ 3843 0974 12       		.sleb128 18
+ 3844 0975 0D       		.uleb128 0xd
+ 3845 0976 00000000 		.long	.LASF120
+ 3846 097a 13       		.sleb128 19
+ 3847 097b 0D       		.uleb128 0xd
+ 3848 097c 00000000 		.long	.LASF121
+
GAS LISTING /tmp/ccq6ONvw.s 			page 96
+
+
+ 3849 0980 14       		.sleb128 20
+ 3850 0981 00       		.byte	0x0
+ 3851 0982 1C       		.uleb128 0x1c
+ 3852 0983 00000000 		.long	.LASF123
+ 3853 0987 04       		.byte	0x4
+ 3854 0988 0F       		.byte	0xf
+ 3855 0989 77       		.byte	0x77
+ 3856 098a 090B0000 		.long	0xb09
+ 3857 098e 0D       		.uleb128 0xd
+ 3858 098f 00000000 		.long	.LASF124
+ 3859 0993 00       		.sleb128 0
+ 3860 0994 0D       		.uleb128 0xd
+ 3861 0995 00000000 		.long	.LASF125
+ 3862 0999 01       		.sleb128 1
+ 3863 099a 0D       		.uleb128 0xd
+ 3864 099b 00000000 		.long	.LASF126
+ 3865 099f 02       		.sleb128 2
+ 3866 09a0 0D       		.uleb128 0xd
+ 3867 09a1 00000000 		.long	.LASF127
+ 3868 09a5 03       		.sleb128 3
+ 3869 09a6 0D       		.uleb128 0xd
+ 3870 09a7 00000000 		.long	.LASF128
+ 3871 09ab 04       		.sleb128 4
+ 3872 09ac 0D       		.uleb128 0xd
+ 3873 09ad 00000000 		.long	.LASF129
+ 3874 09b1 05       		.sleb128 5
+ 3875 09b2 0D       		.uleb128 0xd
+ 3876 09b3 00000000 		.long	.LASF130
+ 3877 09b7 06       		.sleb128 6
+ 3878 09b8 0D       		.uleb128 0xd
+ 3879 09b9 00000000 		.long	.LASF131
+ 3880 09bd 07       		.sleb128 7
+ 3881 09be 0D       		.uleb128 0xd
+ 3882 09bf 00000000 		.long	.LASF132
+ 3883 09c3 08       		.sleb128 8
+ 3884 09c4 0D       		.uleb128 0xd
+ 3885 09c5 00000000 		.long	.LASF133
+ 3886 09c9 09       		.sleb128 9
+ 3887 09ca 0D       		.uleb128 0xd
+ 3888 09cb 00000000 		.long	.LASF134
+ 3889 09cf 0A       		.sleb128 10
+ 3890 09d0 0D       		.uleb128 0xd
+ 3891 09d1 00000000 		.long	.LASF135
+ 3892 09d5 0B       		.sleb128 11
+ 3893 09d6 0D       		.uleb128 0xd
+ 3894 09d7 00000000 		.long	.LASF136
+ 3895 09db 0C       		.sleb128 12
+ 3896 09dc 0D       		.uleb128 0xd
+ 3897 09dd 00000000 		.long	.LASF137
+ 3898 09e1 0D       		.sleb128 13
+ 3899 09e2 0D       		.uleb128 0xd
+ 3900 09e3 00000000 		.long	.LASF138
+ 3901 09e7 0E       		.sleb128 14
+ 3902 09e8 0D       		.uleb128 0xd
+ 3903 09e9 00000000 		.long	.LASF139
+ 3904 09ed 0F       		.sleb128 15
+ 3905 09ee 0D       		.uleb128 0xd
+
GAS LISTING /tmp/ccq6ONvw.s 			page 97
+
+
+ 3906 09ef 00000000 		.long	.LASF140
+ 3907 09f3 10       		.sleb128 16
+ 3908 09f4 0D       		.uleb128 0xd
+ 3909 09f5 00000000 		.long	.LASF141
+ 3910 09f9 11       		.sleb128 17
+ 3911 09fa 0D       		.uleb128 0xd
+ 3912 09fb 00000000 		.long	.LASF142
+ 3913 09ff 12       		.sleb128 18
+ 3914 0a00 0D       		.uleb128 0xd
+ 3915 0a01 00000000 		.long	.LASF143
+ 3916 0a05 13       		.sleb128 19
+ 3917 0a06 0D       		.uleb128 0xd
+ 3918 0a07 00000000 		.long	.LASF144
+ 3919 0a0b 14       		.sleb128 20
+ 3920 0a0c 0D       		.uleb128 0xd
+ 3921 0a0d 00000000 		.long	.LASF145
+ 3922 0a11 15       		.sleb128 21
+ 3923 0a12 0D       		.uleb128 0xd
+ 3924 0a13 00000000 		.long	.LASF146
+ 3925 0a17 16       		.sleb128 22
+ 3926 0a18 0D       		.uleb128 0xd
+ 3927 0a19 00000000 		.long	.LASF147
+ 3928 0a1d 17       		.sleb128 23
+ 3929 0a1e 0D       		.uleb128 0xd
+ 3930 0a1f 00000000 		.long	.LASF148
+ 3931 0a23 18       		.sleb128 24
+ 3932 0a24 0D       		.uleb128 0xd
+ 3933 0a25 00000000 		.long	.LASF149
+ 3934 0a29 19       		.sleb128 25
+ 3935 0a2a 0D       		.uleb128 0xd
+ 3936 0a2b 00000000 		.long	.LASF150
+ 3937 0a2f 1A       		.sleb128 26
+ 3938 0a30 0D       		.uleb128 0xd
+ 3939 0a31 00000000 		.long	.LASF151
+ 3940 0a35 1B       		.sleb128 27
+ 3941 0a36 0D       		.uleb128 0xd
+ 3942 0a37 00000000 		.long	.LASF152
+ 3943 0a3b 1C       		.sleb128 28
+ 3944 0a3c 0D       		.uleb128 0xd
+ 3945 0a3d 00000000 		.long	.LASF153
+ 3946 0a41 1D       		.sleb128 29
+ 3947 0a42 0D       		.uleb128 0xd
+ 3948 0a43 00000000 		.long	.LASF154
+ 3949 0a47 1E       		.sleb128 30
+ 3950 0a48 0D       		.uleb128 0xd
+ 3951 0a49 00000000 		.long	.LASF155
+ 3952 0a4d 1F       		.sleb128 31
+ 3953 0a4e 0D       		.uleb128 0xd
+ 3954 0a4f 00000000 		.long	.LASF156
+ 3955 0a53 20       		.sleb128 32
+ 3956 0a54 0D       		.uleb128 0xd
+ 3957 0a55 00000000 		.long	.LASF157
+ 3958 0a59 21       		.sleb128 33
+ 3959 0a5a 0D       		.uleb128 0xd
+ 3960 0a5b 00000000 		.long	.LASF158
+ 3961 0a5f 22       		.sleb128 34
+ 3962 0a60 0D       		.uleb128 0xd
+
GAS LISTING /tmp/ccq6ONvw.s 			page 98
+
+
+ 3963 0a61 00000000 		.long	.LASF159
+ 3964 0a65 23       		.sleb128 35
+ 3965 0a66 0D       		.uleb128 0xd
+ 3966 0a67 00000000 		.long	.LASF160
+ 3967 0a6b 24       		.sleb128 36
+ 3968 0a6c 0D       		.uleb128 0xd
+ 3969 0a6d 00000000 		.long	.LASF161
+ 3970 0a71 25       		.sleb128 37
+ 3971 0a72 0D       		.uleb128 0xd
+ 3972 0a73 00000000 		.long	.LASF162
+ 3973 0a77 26       		.sleb128 38
+ 3974 0a78 0D       		.uleb128 0xd
+ 3975 0a79 00000000 		.long	.LASF163
+ 3976 0a7d 27       		.sleb128 39
+ 3977 0a7e 0D       		.uleb128 0xd
+ 3978 0a7f 00000000 		.long	.LASF164
+ 3979 0a83 28       		.sleb128 40
+ 3980 0a84 0D       		.uleb128 0xd
+ 3981 0a85 00000000 		.long	.LASF165
+ 3982 0a89 29       		.sleb128 41
+ 3983 0a8a 0D       		.uleb128 0xd
+ 3984 0a8b 00000000 		.long	.LASF166
+ 3985 0a8f 2A       		.sleb128 42
+ 3986 0a90 0D       		.uleb128 0xd
+ 3987 0a91 00000000 		.long	.LASF167
+ 3988 0a95 2B       		.sleb128 43
+ 3989 0a96 0D       		.uleb128 0xd
+ 3990 0a97 00000000 		.long	.LASF168
+ 3991 0a9b 2C       		.sleb128 44
+ 3992 0a9c 0D       		.uleb128 0xd
+ 3993 0a9d 00000000 		.long	.LASF169
+ 3994 0aa1 2D       		.sleb128 45
+ 3995 0aa2 0D       		.uleb128 0xd
+ 3996 0aa3 00000000 		.long	.LASF170
+ 3997 0aa7 2E       		.sleb128 46
+ 3998 0aa8 0D       		.uleb128 0xd
+ 3999 0aa9 00000000 		.long	.LASF171
+ 4000 0aad 2F       		.sleb128 47
+ 4001 0aae 0D       		.uleb128 0xd
+ 4002 0aaf 00000000 		.long	.LASF172
+ 4003 0ab3 30       		.sleb128 48
+ 4004 0ab4 0D       		.uleb128 0xd
+ 4005 0ab5 00000000 		.long	.LASF173
+ 4006 0ab9 31       		.sleb128 49
+ 4007 0aba 0D       		.uleb128 0xd
+ 4008 0abb 00000000 		.long	.LASF174
+ 4009 0abf 32       		.sleb128 50
+ 4010 0ac0 0D       		.uleb128 0xd
+ 4011 0ac1 00000000 		.long	.LASF175
+ 4012 0ac5 33       		.sleb128 51
+ 4013 0ac6 0D       		.uleb128 0xd
+ 4014 0ac7 00000000 		.long	.LASF176
+ 4015 0acb 34       		.sleb128 52
+ 4016 0acc 0D       		.uleb128 0xd
+ 4017 0acd 00000000 		.long	.LASF177
+ 4018 0ad1 35       		.sleb128 53
+ 4019 0ad2 0D       		.uleb128 0xd
+
GAS LISTING /tmp/ccq6ONvw.s 			page 99
+
+
+ 4020 0ad3 00000000 		.long	.LASF178
+ 4021 0ad7 36       		.sleb128 54
+ 4022 0ad8 0D       		.uleb128 0xd
+ 4023 0ad9 00000000 		.long	.LASF179
+ 4024 0add 36       		.sleb128 54
+ 4025 0ade 0D       		.uleb128 0xd
+ 4026 0adf 00000000 		.long	.LASF180
+ 4027 0ae3 37       		.sleb128 55
+ 4028 0ae4 0D       		.uleb128 0xd
+ 4029 0ae5 00000000 		.long	.LASF181
+ 4030 0ae9 38       		.sleb128 56
+ 4031 0aea 0D       		.uleb128 0xd
+ 4032 0aeb 00000000 		.long	.LASF182
+ 4033 0aef 39       		.sleb128 57
+ 4034 0af0 0D       		.uleb128 0xd
+ 4035 0af1 00000000 		.long	.LASF183
+ 4036 0af5 3A       		.sleb128 58
+ 4037 0af6 0D       		.uleb128 0xd
+ 4038 0af7 00000000 		.long	.LASF184
+ 4039 0afb 3B       		.sleb128 59
+ 4040 0afc 0D       		.uleb128 0xd
+ 4041 0afd 00000000 		.long	.LASF185
+ 4042 0b01 3C       		.sleb128 60
+ 4043 0b02 0D       		.uleb128 0xd
+ 4044 0b03 00000000 		.long	.LASF186
+ 4045 0b07 3D       		.sleb128 61
+ 4046 0b08 00       		.byte	0x0
+ 4047 0b09 1C       		.uleb128 0x1c
+ 4048 0b0a 00000000 		.long	.LASF187
+ 4049 0b0e 04       		.byte	0x4
+ 4050 0b0f 0F       		.byte	0xf
+ 4051 0b10 BD       		.byte	0xbd
+ 4052 0b11 BF0C0000 		.long	0xcbf
+ 4053 0b15 0D       		.uleb128 0xd
+ 4054 0b16 00000000 		.long	.LASF188
+ 4055 0b1a 00       		.sleb128 0
+ 4056 0b1b 0D       		.uleb128 0xd
+ 4057 0b1c 00000000 		.long	.LASF189
+ 4058 0b20 01       		.sleb128 1
+ 4059 0b21 0D       		.uleb128 0xd
+ 4060 0b22 00000000 		.long	.LASF190
+ 4061 0b26 02       		.sleb128 2
+ 4062 0b27 0D       		.uleb128 0xd
+ 4063 0b28 00000000 		.long	.LASF191
+ 4064 0b2c 03       		.sleb128 3
+ 4065 0b2d 0D       		.uleb128 0xd
+ 4066 0b2e 00000000 		.long	.LASF192
+ 4067 0b32 04       		.sleb128 4
+ 4068 0b33 0D       		.uleb128 0xd
+ 4069 0b34 00000000 		.long	.LASF193
+ 4070 0b38 05       		.sleb128 5
+ 4071 0b39 0D       		.uleb128 0xd
+ 4072 0b3a 00000000 		.long	.LASF194
+ 4073 0b3e 06       		.sleb128 6
+ 4074 0b3f 0D       		.uleb128 0xd
+ 4075 0b40 00000000 		.long	.LASF195
+ 4076 0b44 07       		.sleb128 7
+
GAS LISTING /tmp/ccq6ONvw.s 			page 100
+
+
+ 4077 0b45 0D       		.uleb128 0xd
+ 4078 0b46 00000000 		.long	.LASF196
+ 4079 0b4a 08       		.sleb128 8
+ 4080 0b4b 0D       		.uleb128 0xd
+ 4081 0b4c 00000000 		.long	.LASF197
+ 4082 0b50 09       		.sleb128 9
+ 4083 0b51 0D       		.uleb128 0xd
+ 4084 0b52 00000000 		.long	.LASF198
+ 4085 0b56 0A       		.sleb128 10
+ 4086 0b57 0D       		.uleb128 0xd
+ 4087 0b58 00000000 		.long	.LASF199
+ 4088 0b5c 0B       		.sleb128 11
+ 4089 0b5d 0D       		.uleb128 0xd
+ 4090 0b5e 00000000 		.long	.LASF200
+ 4091 0b62 0C       		.sleb128 12
+ 4092 0b63 0D       		.uleb128 0xd
+ 4093 0b64 00000000 		.long	.LASF201
+ 4094 0b68 0D       		.sleb128 13
+ 4095 0b69 0D       		.uleb128 0xd
+ 4096 0b6a 00000000 		.long	.LASF202
+ 4097 0b6e 0E       		.sleb128 14
+ 4098 0b6f 0D       		.uleb128 0xd
+ 4099 0b70 00000000 		.long	.LASF203
+ 4100 0b74 0F       		.sleb128 15
+ 4101 0b75 0D       		.uleb128 0xd
+ 4102 0b76 00000000 		.long	.LASF204
+ 4103 0b7a 10       		.sleb128 16
+ 4104 0b7b 0D       		.uleb128 0xd
+ 4105 0b7c 00000000 		.long	.LASF205
+ 4106 0b80 11       		.sleb128 17
+ 4107 0b81 0D       		.uleb128 0xd
+ 4108 0b82 00000000 		.long	.LASF206
+ 4109 0b86 12       		.sleb128 18
+ 4110 0b87 0D       		.uleb128 0xd
+ 4111 0b88 00000000 		.long	.LASF207
+ 4112 0b8c 13       		.sleb128 19
+ 4113 0b8d 0D       		.uleb128 0xd
+ 4114 0b8e 00000000 		.long	.LASF208
+ 4115 0b92 14       		.sleb128 20
+ 4116 0b93 0D       		.uleb128 0xd
+ 4117 0b94 00000000 		.long	.LASF209
+ 4118 0b98 15       		.sleb128 21
+ 4119 0b99 0D       		.uleb128 0xd
+ 4120 0b9a 00000000 		.long	.LASF210
+ 4121 0b9e 16       		.sleb128 22
+ 4122 0b9f 0D       		.uleb128 0xd
+ 4123 0ba0 00000000 		.long	.LASF211
+ 4124 0ba4 17       		.sleb128 23
+ 4125 0ba5 0D       		.uleb128 0xd
+ 4126 0ba6 00000000 		.long	.LASF212
+ 4127 0baa 18       		.sleb128 24
+ 4128 0bab 0D       		.uleb128 0xd
+ 4129 0bac 00000000 		.long	.LASF213
+ 4130 0bb0 19       		.sleb128 25
+ 4131 0bb1 0D       		.uleb128 0xd
+ 4132 0bb2 00000000 		.long	.LASF214
+ 4133 0bb6 1A       		.sleb128 26
+
GAS LISTING /tmp/ccq6ONvw.s 			page 101
+
+
+ 4134 0bb7 0D       		.uleb128 0xd
+ 4135 0bb8 00000000 		.long	.LASF215
+ 4136 0bbc 1B       		.sleb128 27
+ 4137 0bbd 0D       		.uleb128 0xd
+ 4138 0bbe 00000000 		.long	.LASF216
+ 4139 0bc2 1C       		.sleb128 28
+ 4140 0bc3 0D       		.uleb128 0xd
+ 4141 0bc4 00000000 		.long	.LASF217
+ 4142 0bc8 1D       		.sleb128 29
+ 4143 0bc9 0D       		.uleb128 0xd
+ 4144 0bca 00000000 		.long	.LASF218
+ 4145 0bce 1E       		.sleb128 30
+ 4146 0bcf 0D       		.uleb128 0xd
+ 4147 0bd0 00000000 		.long	.LASF219
+ 4148 0bd4 1F       		.sleb128 31
+ 4149 0bd5 0D       		.uleb128 0xd
+ 4150 0bd6 00000000 		.long	.LASF220
+ 4151 0bda 20       		.sleb128 32
+ 4152 0bdb 0D       		.uleb128 0xd
+ 4153 0bdc 00000000 		.long	.LASF221
+ 4154 0be0 21       		.sleb128 33
+ 4155 0be1 0D       		.uleb128 0xd
+ 4156 0be2 00000000 		.long	.LASF222
+ 4157 0be6 22       		.sleb128 34
+ 4158 0be7 0D       		.uleb128 0xd
+ 4159 0be8 00000000 		.long	.LASF223
+ 4160 0bec 23       		.sleb128 35
+ 4161 0bed 0D       		.uleb128 0xd
+ 4162 0bee 00000000 		.long	.LASF224
+ 4163 0bf2 24       		.sleb128 36
+ 4164 0bf3 0D       		.uleb128 0xd
+ 4165 0bf4 00000000 		.long	.LASF225
+ 4166 0bf8 25       		.sleb128 37
+ 4167 0bf9 0D       		.uleb128 0xd
+ 4168 0bfa 00000000 		.long	.LASF226
+ 4169 0bfe 26       		.sleb128 38
+ 4170 0bff 0D       		.uleb128 0xd
+ 4171 0c00 00000000 		.long	.LASF227
+ 4172 0c04 27       		.sleb128 39
+ 4173 0c05 0D       		.uleb128 0xd
+ 4174 0c06 00000000 		.long	.LASF228
+ 4175 0c0a 28       		.sleb128 40
+ 4176 0c0b 0D       		.uleb128 0xd
+ 4177 0c0c 00000000 		.long	.LASF229
+ 4178 0c10 29       		.sleb128 41
+ 4179 0c11 0D       		.uleb128 0xd
+ 4180 0c12 00000000 		.long	.LASF230
+ 4181 0c16 2A       		.sleb128 42
+ 4182 0c17 0D       		.uleb128 0xd
+ 4183 0c18 00000000 		.long	.LASF231
+ 4184 0c1c 2B       		.sleb128 43
+ 4185 0c1d 0D       		.uleb128 0xd
+ 4186 0c1e 00000000 		.long	.LASF232
+ 4187 0c22 2C       		.sleb128 44
+ 4188 0c23 0D       		.uleb128 0xd
+ 4189 0c24 00000000 		.long	.LASF233
+ 4190 0c28 2D       		.sleb128 45
+
GAS LISTING /tmp/ccq6ONvw.s 			page 102
+
+
+ 4191 0c29 0D       		.uleb128 0xd
+ 4192 0c2a 00000000 		.long	.LASF234
+ 4193 0c2e 2E       		.sleb128 46
+ 4194 0c2f 0D       		.uleb128 0xd
+ 4195 0c30 00000000 		.long	.LASF235
+ 4196 0c34 2F       		.sleb128 47
+ 4197 0c35 0D       		.uleb128 0xd
+ 4198 0c36 00000000 		.long	.LASF236
+ 4199 0c3a 30       		.sleb128 48
+ 4200 0c3b 0D       		.uleb128 0xd
+ 4201 0c3c 00000000 		.long	.LASF237
+ 4202 0c40 31       		.sleb128 49
+ 4203 0c41 0D       		.uleb128 0xd
+ 4204 0c42 00000000 		.long	.LASF238
+ 4205 0c46 32       		.sleb128 50
+ 4206 0c47 0D       		.uleb128 0xd
+ 4207 0c48 00000000 		.long	.LASF239
+ 4208 0c4c 33       		.sleb128 51
+ 4209 0c4d 0D       		.uleb128 0xd
+ 4210 0c4e 00000000 		.long	.LASF240
+ 4211 0c52 34       		.sleb128 52
+ 4212 0c53 0D       		.uleb128 0xd
+ 4213 0c54 00000000 		.long	.LASF241
+ 4214 0c58 35       		.sleb128 53
+ 4215 0c59 0D       		.uleb128 0xd
+ 4216 0c5a 00000000 		.long	.LASF242
+ 4217 0c5e 36       		.sleb128 54
+ 4218 0c5f 0D       		.uleb128 0xd
+ 4219 0c60 00000000 		.long	.LASF243
+ 4220 0c64 37       		.sleb128 55
+ 4221 0c65 0D       		.uleb128 0xd
+ 4222 0c66 00000000 		.long	.LASF244
+ 4223 0c6a 38       		.sleb128 56
+ 4224 0c6b 0D       		.uleb128 0xd
+ 4225 0c6c 00000000 		.long	.LASF245
+ 4226 0c70 39       		.sleb128 57
+ 4227 0c71 0D       		.uleb128 0xd
+ 4228 0c72 00000000 		.long	.LASF246
+ 4229 0c76 3A       		.sleb128 58
+ 4230 0c77 0D       		.uleb128 0xd
+ 4231 0c78 00000000 		.long	.LASF247
+ 4232 0c7c 3A       		.sleb128 58
+ 4233 0c7d 0D       		.uleb128 0xd
+ 4234 0c7e 00000000 		.long	.LASF248
+ 4235 0c82 3B       		.sleb128 59
+ 4236 0c83 0D       		.uleb128 0xd
+ 4237 0c84 00000000 		.long	.LASF249
+ 4238 0c88 3C       		.sleb128 60
+ 4239 0c89 0D       		.uleb128 0xd
+ 4240 0c8a 00000000 		.long	.LASF250
+ 4241 0c8e 3D       		.sleb128 61
+ 4242 0c8f 0D       		.uleb128 0xd
+ 4243 0c90 00000000 		.long	.LASF251
+ 4244 0c94 3E       		.sleb128 62
+ 4245 0c95 0D       		.uleb128 0xd
+ 4246 0c96 00000000 		.long	.LASF252
+ 4247 0c9a 3F       		.sleb128 63
+
GAS LISTING /tmp/ccq6ONvw.s 			page 103
+
+
+ 4248 0c9b 0D       		.uleb128 0xd
+ 4249 0c9c 00000000 		.long	.LASF253
+ 4250 0ca0 C000     		.sleb128 64
+ 4251 0ca2 0D       		.uleb128 0xd
+ 4252 0ca3 00000000 		.long	.LASF254
+ 4253 0ca7 C100     		.sleb128 65
+ 4254 0ca9 0D       		.uleb128 0xd
+ 4255 0caa 00000000 		.long	.LASF255
+ 4256 0cae C200     		.sleb128 66
+ 4257 0cb0 0D       		.uleb128 0xd
+ 4258 0cb1 00000000 		.long	.LASF256
+ 4259 0cb5 C300     		.sleb128 67
+ 4260 0cb7 0D       		.uleb128 0xd
+ 4261 0cb8 00000000 		.long	.LASF257
+ 4262 0cbc C400     		.sleb128 68
+ 4263 0cbe 00       		.byte	0x0
+ 4264 0cbf 1D       		.uleb128 0x1d
+ 4265 0cc0 00000000 		.long	.LASF258
+ 4266 0cc4 04       		.byte	0x4
+ 4267 0cc5 0F       		.byte	0xf
+ 4268 0cc6 0A01     		.value	0x10a
+ 4269 0cc8 BE0D0000 		.long	0xdbe
+ 4270 0ccc 0D       		.uleb128 0xd
+ 4271 0ccd 00000000 		.long	.LASF259
+ 4272 0cd1 00       		.sleb128 0
+ 4273 0cd2 0D       		.uleb128 0xd
+ 4274 0cd3 00000000 		.long	.LASF260
+ 4275 0cd7 3D       		.sleb128 61
+ 4276 0cd8 0D       		.uleb128 0xd
+ 4277 0cd9 00000000 		.long	.LASF261
+ 4278 0cdd 3E       		.sleb128 62
+ 4279 0cde 0D       		.uleb128 0xd
+ 4280 0cdf 00000000 		.long	.LASF262
+ 4281 0ce3 3F       		.sleb128 63
+ 4282 0ce4 0D       		.uleb128 0xd
+ 4283 0ce5 00000000 		.long	.LASF263
+ 4284 0ce9 C000     		.sleb128 64
+ 4285 0ceb 0D       		.uleb128 0xd
+ 4286 0cec 00000000 		.long	.LASF264
+ 4287 0cf0 C100     		.sleb128 65
+ 4288 0cf2 0D       		.uleb128 0xd
+ 4289 0cf3 00000000 		.long	.LASF265
+ 4290 0cf7 C200     		.sleb128 66
+ 4291 0cf9 0D       		.uleb128 0xd
+ 4292 0cfa 00000000 		.long	.LASF266
+ 4293 0cfe C300     		.sleb128 67
+ 4294 0d00 0D       		.uleb128 0xd
+ 4295 0d01 00000000 		.long	.LASF267
+ 4296 0d05 C400     		.sleb128 68
+ 4297 0d07 0D       		.uleb128 0xd
+ 4298 0d08 00000000 		.long	.LASF268
+ 4299 0d0c C500     		.sleb128 69
+ 4300 0d0e 0D       		.uleb128 0xd
+ 4301 0d0f 00000000 		.long	.LASF269
+ 4302 0d13 C600     		.sleb128 70
+ 4303 0d15 0D       		.uleb128 0xd
+ 4304 0d16 00000000 		.long	.LASF270
+
GAS LISTING /tmp/ccq6ONvw.s 			page 104
+
+
+ 4305 0d1a C700     		.sleb128 71
+ 4306 0d1c 0D       		.uleb128 0xd
+ 4307 0d1d 00000000 		.long	.LASF271
+ 4308 0d21 C800     		.sleb128 72
+ 4309 0d23 0D       		.uleb128 0xd
+ 4310 0d24 00000000 		.long	.LASF272
+ 4311 0d28 C900     		.sleb128 73
+ 4312 0d2a 0D       		.uleb128 0xd
+ 4313 0d2b 00000000 		.long	.LASF273
+ 4314 0d2f CA00     		.sleb128 74
+ 4315 0d31 0D       		.uleb128 0xd
+ 4316 0d32 00000000 		.long	.LASF274
+ 4317 0d36 CB00     		.sleb128 75
+ 4318 0d38 0D       		.uleb128 0xd
+ 4319 0d39 00000000 		.long	.LASF275
+ 4320 0d3d CC00     		.sleb128 76
+ 4321 0d3f 0D       		.uleb128 0xd
+ 4322 0d40 00000000 		.long	.LASF276
+ 4323 0d44 CD00     		.sleb128 77
+ 4324 0d46 0D       		.uleb128 0xd
+ 4325 0d47 00000000 		.long	.LASF277
+ 4326 0d4b CE00     		.sleb128 78
+ 4327 0d4d 0D       		.uleb128 0xd
+ 4328 0d4e 00000000 		.long	.LASF278
+ 4329 0d52 CF00     		.sleb128 79
+ 4330 0d54 0D       		.uleb128 0xd
+ 4331 0d55 00000000 		.long	.LASF279
+ 4332 0d59 D000     		.sleb128 80
+ 4333 0d5b 0D       		.uleb128 0xd
+ 4334 0d5c 00000000 		.long	.LASF280
+ 4335 0d60 D100     		.sleb128 81
+ 4336 0d62 0D       		.uleb128 0xd
+ 4337 0d63 00000000 		.long	.LASF281
+ 4338 0d67 D100     		.sleb128 81
+ 4339 0d69 0D       		.uleb128 0xd
+ 4340 0d6a 00000000 		.long	.LASF282
+ 4341 0d6e D200     		.sleb128 82
+ 4342 0d70 0D       		.uleb128 0xd
+ 4343 0d71 00000000 		.long	.LASF283
+ 4344 0d75 D300     		.sleb128 83
+ 4345 0d77 0D       		.uleb128 0xd
+ 4346 0d78 00000000 		.long	.LASF284
+ 4347 0d7c D400     		.sleb128 84
+ 4348 0d7e 0D       		.uleb128 0xd
+ 4349 0d7f 00000000 		.long	.LASF285
+ 4350 0d83 D500     		.sleb128 85
+ 4351 0d85 0D       		.uleb128 0xd
+ 4352 0d86 00000000 		.long	.LASF286
+ 4353 0d8a D600     		.sleb128 86
+ 4354 0d8c 0D       		.uleb128 0xd
+ 4355 0d8d 00000000 		.long	.LASF287
+ 4356 0d91 D700     		.sleb128 87
+ 4357 0d93 0D       		.uleb128 0xd
+ 4358 0d94 00000000 		.long	.LASF288
+ 4359 0d98 D800     		.sleb128 88
+ 4360 0d9a 0D       		.uleb128 0xd
+ 4361 0d9b 00000000 		.long	.LASF289
+
GAS LISTING /tmp/ccq6ONvw.s 			page 105
+
+
+ 4362 0d9f D900     		.sleb128 89
+ 4363 0da1 0D       		.uleb128 0xd
+ 4364 0da2 00000000 		.long	.LASF290
+ 4365 0da6 DA00     		.sleb128 90
+ 4366 0da8 0D       		.uleb128 0xd
+ 4367 0da9 00000000 		.long	.LASF291
+ 4368 0dad DB00     		.sleb128 91
+ 4369 0daf 0D       		.uleb128 0xd
+ 4370 0db0 00000000 		.long	.LASF292
+ 4371 0db4 DC00     		.sleb128 92
+ 4372 0db6 0D       		.uleb128 0xd
+ 4373 0db7 00000000 		.long	.LASF293
+ 4374 0dbb DD00     		.sleb128 93
+ 4375 0dbd 00       		.byte	0x0
+ 4376 0dbe 1D       		.uleb128 0x1d
+ 4377 0dbf 00000000 		.long	.LASF294
+ 4378 0dc3 04       		.byte	0x4
+ 4379 0dc4 0F       		.byte	0xf
+ 4380 0dc5 3401     		.value	0x134
+ 4381 0dc7 FE0E0000 		.long	0xefe
+ 4382 0dcb 0D       		.uleb128 0xd
+ 4383 0dcc 00000000 		.long	.LASF295
+ 4384 0dd0 00       		.sleb128 0
+ 4385 0dd1 0D       		.uleb128 0xd
+ 4386 0dd2 00000000 		.long	.LASF296
+ 4387 0dd6 01       		.sleb128 1
+ 4388 0dd7 0D       		.uleb128 0xd
+ 4389 0dd8 00000000 		.long	.LASF297
+ 4390 0ddc 02       		.sleb128 2
+ 4391 0ddd 0D       		.uleb128 0xd
+ 4392 0dde 00000000 		.long	.LASF298
+ 4393 0de2 03       		.sleb128 3
+ 4394 0de3 0D       		.uleb128 0xd
+ 4395 0de4 00000000 		.long	.LASF299
+ 4396 0de8 04       		.sleb128 4
+ 4397 0de9 0D       		.uleb128 0xd
+ 4398 0dea 00000000 		.long	.LASF300
+ 4399 0dee 05       		.sleb128 5
+ 4400 0def 0D       		.uleb128 0xd
+ 4401 0df0 00000000 		.long	.LASF301
+ 4402 0df4 06       		.sleb128 6
+ 4403 0df5 0D       		.uleb128 0xd
+ 4404 0df6 00000000 		.long	.LASF302
+ 4405 0dfa 07       		.sleb128 7
+ 4406 0dfb 0D       		.uleb128 0xd
+ 4407 0dfc 00000000 		.long	.LASF303
+ 4408 0e00 08       		.sleb128 8
+ 4409 0e01 0D       		.uleb128 0xd
+ 4410 0e02 00000000 		.long	.LASF304
+ 4411 0e06 09       		.sleb128 9
+ 4412 0e07 0D       		.uleb128 0xd
+ 4413 0e08 00000000 		.long	.LASF305
+ 4414 0e0c 0A       		.sleb128 10
+ 4415 0e0d 0D       		.uleb128 0xd
+ 4416 0e0e 00000000 		.long	.LASF306
+ 4417 0e12 0B       		.sleb128 11
+ 4418 0e13 0D       		.uleb128 0xd
+
GAS LISTING /tmp/ccq6ONvw.s 			page 106
+
+
+ 4419 0e14 00000000 		.long	.LASF307
+ 4420 0e18 0C       		.sleb128 12
+ 4421 0e19 0D       		.uleb128 0xd
+ 4422 0e1a 00000000 		.long	.LASF308
+ 4423 0e1e 0D       		.sleb128 13
+ 4424 0e1f 0D       		.uleb128 0xd
+ 4425 0e20 00000000 		.long	.LASF309
+ 4426 0e24 0E       		.sleb128 14
+ 4427 0e25 0D       		.uleb128 0xd
+ 4428 0e26 00000000 		.long	.LASF310
+ 4429 0e2a 0F       		.sleb128 15
+ 4430 0e2b 0D       		.uleb128 0xd
+ 4431 0e2c 00000000 		.long	.LASF311
+ 4432 0e30 10       		.sleb128 16
+ 4433 0e31 0D       		.uleb128 0xd
+ 4434 0e32 00000000 		.long	.LASF312
+ 4435 0e36 11       		.sleb128 17
+ 4436 0e37 0D       		.uleb128 0xd
+ 4437 0e38 00000000 		.long	.LASF313
+ 4438 0e3c 12       		.sleb128 18
+ 4439 0e3d 0D       		.uleb128 0xd
+ 4440 0e3e 00000000 		.long	.LASF314
+ 4441 0e42 13       		.sleb128 19
+ 4442 0e43 0D       		.uleb128 0xd
+ 4443 0e44 00000000 		.long	.LASF315
+ 4444 0e48 14       		.sleb128 20
+ 4445 0e49 0D       		.uleb128 0xd
+ 4446 0e4a 00000000 		.long	.LASF316
+ 4447 0e4e 15       		.sleb128 21
+ 4448 0e4f 0D       		.uleb128 0xd
+ 4449 0e50 00000000 		.long	.LASF317
+ 4450 0e54 16       		.sleb128 22
+ 4451 0e55 0D       		.uleb128 0xd
+ 4452 0e56 00000000 		.long	.LASF318
+ 4453 0e5a 17       		.sleb128 23
+ 4454 0e5b 0D       		.uleb128 0xd
+ 4455 0e5c 00000000 		.long	.LASF319
+ 4456 0e60 18       		.sleb128 24
+ 4457 0e61 0D       		.uleb128 0xd
+ 4458 0e62 00000000 		.long	.LASF320
+ 4459 0e66 19       		.sleb128 25
+ 4460 0e67 0D       		.uleb128 0xd
+ 4461 0e68 00000000 		.long	.LASF321
+ 4462 0e6c 1A       		.sleb128 26
+ 4463 0e6d 0D       		.uleb128 0xd
+ 4464 0e6e 00000000 		.long	.LASF322
+ 4465 0e72 1B       		.sleb128 27
+ 4466 0e73 0D       		.uleb128 0xd
+ 4467 0e74 00000000 		.long	.LASF323
+ 4468 0e78 1C       		.sleb128 28
+ 4469 0e79 0D       		.uleb128 0xd
+ 4470 0e7a 00000000 		.long	.LASF324
+ 4471 0e7e 1D       		.sleb128 29
+ 4472 0e7f 0D       		.uleb128 0xd
+ 4473 0e80 00000000 		.long	.LASF325
+ 4474 0e84 1E       		.sleb128 30
+ 4475 0e85 0D       		.uleb128 0xd
+
GAS LISTING /tmp/ccq6ONvw.s 			page 107
+
+
+ 4476 0e86 00000000 		.long	.LASF326
+ 4477 0e8a 1F       		.sleb128 31
+ 4478 0e8b 0D       		.uleb128 0xd
+ 4479 0e8c 00000000 		.long	.LASF327
+ 4480 0e90 20       		.sleb128 32
+ 4481 0e91 0D       		.uleb128 0xd
+ 4482 0e92 00000000 		.long	.LASF328
+ 4483 0e96 21       		.sleb128 33
+ 4484 0e97 0D       		.uleb128 0xd
+ 4485 0e98 00000000 		.long	.LASF329
+ 4486 0e9c 22       		.sleb128 34
+ 4487 0e9d 0D       		.uleb128 0xd
+ 4488 0e9e 00000000 		.long	.LASF330
+ 4489 0ea2 23       		.sleb128 35
+ 4490 0ea3 0D       		.uleb128 0xd
+ 4491 0ea4 00000000 		.long	.LASF331
+ 4492 0ea8 24       		.sleb128 36
+ 4493 0ea9 0D       		.uleb128 0xd
+ 4494 0eaa 00000000 		.long	.LASF332
+ 4495 0eae 25       		.sleb128 37
+ 4496 0eaf 0D       		.uleb128 0xd
+ 4497 0eb0 00000000 		.long	.LASF333
+ 4498 0eb4 26       		.sleb128 38
+ 4499 0eb5 0D       		.uleb128 0xd
+ 4500 0eb6 00000000 		.long	.LASF334
+ 4501 0eba 27       		.sleb128 39
+ 4502 0ebb 0D       		.uleb128 0xd
+ 4503 0ebc 00000000 		.long	.LASF335
+ 4504 0ec0 28       		.sleb128 40
+ 4505 0ec1 0D       		.uleb128 0xd
+ 4506 0ec2 00000000 		.long	.LASF336
+ 4507 0ec6 29       		.sleb128 41
+ 4508 0ec7 0D       		.uleb128 0xd
+ 4509 0ec8 00000000 		.long	.LASF337
+ 4510 0ecc 29       		.sleb128 41
+ 4511 0ecd 0D       		.uleb128 0xd
+ 4512 0ece 00000000 		.long	.LASF338
+ 4513 0ed2 2A       		.sleb128 42
+ 4514 0ed3 0D       		.uleb128 0xd
+ 4515 0ed4 00000000 		.long	.LASF339
+ 4516 0ed8 2B       		.sleb128 43
+ 4517 0ed9 0D       		.uleb128 0xd
+ 4518 0eda 00000000 		.long	.LASF340
+ 4519 0ede 2C       		.sleb128 44
+ 4520 0edf 0D       		.uleb128 0xd
+ 4521 0ee0 00000000 		.long	.LASF341
+ 4522 0ee4 2D       		.sleb128 45
+ 4523 0ee5 0D       		.uleb128 0xd
+ 4524 0ee6 00000000 		.long	.LASF342
+ 4525 0eea 2E       		.sleb128 46
+ 4526 0eeb 0D       		.uleb128 0xd
+ 4527 0eec 00000000 		.long	.LASF343
+ 4528 0ef0 2F       		.sleb128 47
+ 4529 0ef1 0D       		.uleb128 0xd
+ 4530 0ef2 00000000 		.long	.LASF344
+ 4531 0ef6 30       		.sleb128 48
+ 4532 0ef7 0D       		.uleb128 0xd
+
GAS LISTING /tmp/ccq6ONvw.s 			page 108
+
+
+ 4533 0ef8 00000000 		.long	.LASF345
+ 4534 0efc 31       		.sleb128 49
+ 4535 0efd 00       		.byte	0x0
+ 4536 0efe 13       		.uleb128 0x13
+ 4537 0eff 00000000 		.long	.LASF346
+ 4538 0f03 10       		.byte	0x10
+ 4539 0f04 01       		.byte	0x1
+ 4540 0f05 43       		.byte	0x43
+ 4541 0f06 210F0000 		.long	0xf21
+ 4542 0f0a 15       		.uleb128 0x15
+ 4543 0f0b 76656300 		.string	"vec"
+ 4544 0f0f 01       		.byte	0x1
+ 4545 0f10 44       		.byte	0x44
+ 4546 0f11 68050000 		.long	0x568
+ 4547 0f15 14       		.uleb128 0x14
+ 4548 0f16 00000000 		.long	.LASF347
+ 4549 0f1a 01       		.byte	0x1
+ 4550 0f1b 45       		.byte	0x45
+ 4551 0f1c FF040000 		.long	0x4ff
+ 4552 0f20 00       		.byte	0x0
+ 4553 0f21 04       		.uleb128 0x4
+ 4554 0f22 00000000 		.long	.LASF346
+ 4555 0f26 01       		.byte	0x1
+ 4556 0f27 46       		.byte	0x46
+ 4557 0f28 FE0E0000 		.long	0xefe
+ 4558 0f2c 1E       		.uleb128 0x1e
+ 4559 0f2d 00000000 		.long	.LASF350
+ 4560 0f31 01       		.byte	0x1
+ 4561 0f32 4B       		.byte	0x4b
+ 4562 0f33 01       		.byte	0x1
+ 4563 0f34 68050000 		.long	0x568
+ 4564 0f38 00000000 		.quad	.LFB508
+ 4564      00000000 
+ 4565 0f40 00000000 		.quad	.LFE508
+ 4565      00000000 
+ 4566 0f48 00000000 		.long	.LLST0
+ 4567 0f4c 6B0F0000 		.long	0xf6b
+ 4568 0f50 1F       		.uleb128 0x1f
+ 4569 0f51 00000000 		.long	.LASF348
+ 4570 0f55 01       		.byte	0x1
+ 4571 0f56 4B       		.byte	0x4b
+ 4572 0f57 1F040000 		.long	0x41f
+ 4573 0f5b 02       		.byte	0x2
+ 4574 0f5c 91       		.byte	0x91
+ 4575 0f5d 58       		.sleb128 -40
+ 4576 0f5e 20       		.uleb128 0x20
+ 4577 0f5f 7500     		.string	"u"
+ 4578 0f61 01       		.byte	0x1
+ 4579 0f62 56       		.byte	0x56
+ 4580 0f63 210F0000 		.long	0xf21
+ 4581 0f67 02       		.byte	0x2
+ 4582 0f68 91       		.byte	0x91
+ 4583 0f69 60       		.sleb128 -32
+ 4584 0f6a 00       		.byte	0x0
+ 4585 0f6b 21       		.uleb128 0x21
+ 4586 0f6c 00000000 		.long	.LASF398
+ 4587 0f70 01       		.byte	0x1
+
GAS LISTING /tmp/ccq6ONvw.s 			page 109
+
+
+ 4588 0f71 62       		.byte	0x62
+ 4589 0f72 01       		.byte	0x1
+ 4590 0f73 00000000 		.quad	.LFB509
+ 4590      00000000 
+ 4591 0f7b 00000000 		.quad	.LFE509
+ 4591      00000000 
+ 4592 0f83 00000000 		.long	.LLST1
+ 4593 0f87 B50F0000 		.long	0xfb5
+ 4594 0f8b 22       		.uleb128 0x22
+ 4595 0f8c 637600   		.string	"cv"
+ 4596 0f8f 01       		.byte	0x1
+ 4597 0f90 62       		.byte	0x62
+ 4598 0f91 B50F0000 		.long	0xfb5
+ 4599 0f95 02       		.byte	0x2
+ 4600 0f96 91       		.byte	0x91
+ 4601 0f97 50       		.sleb128 -48
+ 4602 0f98 1F       		.uleb128 0x1f
+ 4603 0f99 00000000 		.long	.LASF349
+ 4604 0f9d 01       		.byte	0x1
+ 4605 0f9e 62       		.byte	0x62
+ 4606 0f9f B4000000 		.long	0xb4
+ 4607 0fa3 02       		.byte	0x2
+ 4608 0fa4 91       		.byte	0x91
+ 4609 0fa5 48       		.sleb128 -56
+ 4610 0fa6 20       		.uleb128 0x20
+ 4611 0fa7 6C637600 		.string	"lcv"
+ 4612 0fab 01       		.byte	0x1
+ 4613 0fac 6B       		.byte	0x6b
+ 4614 0fad 68050000 		.long	0x568
+ 4615 0fb1 02       		.byte	0x2
+ 4616 0fb2 91       		.byte	0x91
+ 4617 0fb3 60       		.sleb128 -32
+ 4618 0fb4 00       		.byte	0x0
+ 4619 0fb5 0B       		.uleb128 0xb
+ 4620 0fb6 68050000 		.long	0x568
+ 4621 0fba 1E       		.uleb128 0x1e
+ 4622 0fbb 00000000 		.long	.LASF351
+ 4623 0fbf 01       		.byte	0x1
+ 4624 0fc0 71       		.byte	0x71
+ 4625 0fc1 01       		.byte	0x1
+ 4626 0fc2 7B000000 		.long	0x7b
+ 4627 0fc6 00000000 		.quad	.LFB510
+ 4627      00000000 
+ 4628 0fce 00000000 		.quad	.LFE510
+ 4628      00000000 
+ 4629 0fd6 00000000 		.long	.LLST2
+ 4630 0fda FA0F0000 		.long	0xffa
+ 4631 0fde 1F       		.uleb128 0x1f
+ 4632 0fdf 00000000 		.long	.LASF352
+ 4633 0fe3 01       		.byte	0x1
+ 4634 0fe4 71       		.byte	0x71
+ 4635 0fe5 DE030000 		.long	0x3de
+ 4636 0fe9 02       		.byte	0x2
+ 4637 0fea 91       		.byte	0x91
+ 4638 0feb 58       		.sleb128 -40
+ 4639 0fec 20       		.uleb128 0x20
+ 4640 0fed 726300   		.string	"rc"
+
GAS LISTING /tmp/ccq6ONvw.s 			page 110
+
+
+ 4641 0ff0 01       		.byte	0x1
+ 4642 0ff1 73       		.byte	0x73
+ 4643 0ff2 7B000000 		.long	0x7b
+ 4644 0ff6 02       		.byte	0x2
+ 4645 0ff7 91       		.byte	0x91
+ 4646 0ff8 6C       		.sleb128 -20
+ 4647 0ff9 00       		.byte	0x0
+ 4648 0ffa 1E       		.uleb128 0x1e
+ 4649 0ffb 00000000 		.long	.LASF353
+ 4650 0fff 01       		.byte	0x1
+ 4651 1000 7E       		.byte	0x7e
+ 4652 1001 01       		.byte	0x1
+ 4653 1002 7B000000 		.long	0x7b
+ 4654 1006 00000000 		.quad	.LFB511
+ 4654      00000000 
+ 4655 100e 00000000 		.quad	.LFE511
+ 4655      00000000 
+ 4656 1016 00000000 		.long	.LLST3
+ 4657 101a 7F100000 		.long	0x107f
+ 4658 101e 1F       		.uleb128 0x1f
+ 4659 101f 00000000 		.long	.LASF352
+ 4660 1023 01       		.byte	0x1
+ 4661 1024 7E       		.byte	0x7e
+ 4662 1025 DE030000 		.long	0x3de
+ 4663 1029 02       		.byte	0x2
+ 4664 102a 91       		.byte	0x91
+ 4665 102b 48       		.sleb128 -56
+ 4666 102c 1F       		.uleb128 0x1f
+ 4667 102d 00000000 		.long	.LASF354
+ 4668 1031 01       		.byte	0x1
+ 4669 1032 7F       		.byte	0x7f
+ 4670 1033 B6000000 		.long	0xb6
+ 4671 1037 02       		.byte	0x2
+ 4672 1038 91       		.byte	0x91
+ 4673 1039 40       		.sleb128 -64
+ 4674 103a 1F       		.uleb128 0x1f
+ 4675 103b 00000000 		.long	.LASF355
+ 4676 103f 01       		.byte	0x1
+ 4677 1040 80       		.byte	0x80
+ 4678 1041 62000000 		.long	0x62
+ 4679 1045 03       		.byte	0x3
+ 4680 1046 91       		.byte	0x91
+ 4681 1047 BC7F     		.sleb128 -68
+ 4682 1049 20       		.uleb128 0x20
+ 4683 104a 726300   		.string	"rc"
+ 4684 104d 01       		.byte	0x1
+ 4685 104e 82       		.byte	0x82
+ 4686 104f 7B000000 		.long	0x7b
+ 4687 1053 02       		.byte	0x2
+ 4688 1054 91       		.byte	0x91
+ 4689 1055 5C       		.sleb128 -36
+ 4690 1056 23       		.uleb128 0x23
+ 4691 1057 00000000 		.long	.LASF356
+ 4692 105b 8F100000 		.long	0x108f
+ 4693 105f 01       		.byte	0x1
+ 4694 1060 09       		.byte	0x9
+ 4695 1061 03       		.byte	0x3
+
GAS LISTING /tmp/ccq6ONvw.s 			page 111
+
+
+ 4696 1062 00000000 		.quad	__PRETTY_FUNCTION__.6562
+ 4696      00000000 
+ 4697 106a 23       		.uleb128 0x23
+ 4698 106b 00000000 		.long	.LASF357
+ 4699 106f 94100000 		.long	0x1094
+ 4700 1073 01       		.byte	0x1
+ 4701 1074 09       		.byte	0x9
+ 4702 1075 03       		.byte	0x3
+ 4703 1076 00000000 		.quad	__func__.6564
+ 4703      00000000 
+ 4704 107e 00       		.byte	0x0
+ 4705 107f 16       		.uleb128 0x16
+ 4706 1080 C1000000 		.long	0xc1
+ 4707 1084 8F100000 		.long	0x108f
+ 4708 1088 17       		.uleb128 0x17
+ 4709 1089 B1000000 		.long	0xb1
+ 4710 108d 17       		.byte	0x17
+ 4711 108e 00       		.byte	0x0
+ 4712 108f 0B       		.uleb128 0xb
+ 4713 1090 7F100000 		.long	0x107f
+ 4714 1094 0B       		.uleb128 0xb
+ 4715 1095 7F100000 		.long	0x107f
+ 4716 1099 1E       		.uleb128 0x1e
+ 4717 109a 00000000 		.long	.LASF358
+ 4718 109e 01       		.byte	0x1
+ 4719 109f 97       		.byte	0x97
+ 4720 10a0 01       		.byte	0x1
+ 4721 10a1 7B000000 		.long	0x7b
+ 4722 10a5 00000000 		.quad	.LFB512
+ 4722      00000000 
+ 4723 10ad 00000000 		.quad	.LFE512
+ 4723      00000000 
+ 4724 10b5 00000000 		.long	.LLST4
+ 4725 10b9 1E110000 		.long	0x111e
+ 4726 10bd 1F       		.uleb128 0x1f
+ 4727 10be 00000000 		.long	.LASF352
+ 4728 10c2 01       		.byte	0x1
+ 4729 10c3 97       		.byte	0x97
+ 4730 10c4 DE030000 		.long	0x3de
+ 4731 10c8 02       		.byte	0x2
+ 4732 10c9 91       		.byte	0x91
+ 4733 10ca 48       		.sleb128 -56
+ 4734 10cb 1F       		.uleb128 0x1f
+ 4735 10cc 00000000 		.long	.LASF354
+ 4736 10d0 01       		.byte	0x1
+ 4737 10d1 98       		.byte	0x98
+ 4738 10d2 B6000000 		.long	0xb6
+ 4739 10d6 02       		.byte	0x2
+ 4740 10d7 91       		.byte	0x91
+ 4741 10d8 40       		.sleb128 -64
+ 4742 10d9 1F       		.uleb128 0x1f
+ 4743 10da 00000000 		.long	.LASF355
+ 4744 10de 01       		.byte	0x1
+ 4745 10df 99       		.byte	0x99
+ 4746 10e0 62000000 		.long	0x62
+ 4747 10e4 03       		.byte	0x3
+ 4748 10e5 91       		.byte	0x91
+
GAS LISTING /tmp/ccq6ONvw.s 			page 112
+
+
+ 4749 10e6 BC7F     		.sleb128 -68
+ 4750 10e8 20       		.uleb128 0x20
+ 4751 10e9 726300   		.string	"rc"
+ 4752 10ec 01       		.byte	0x1
+ 4753 10ed 9B       		.byte	0x9b
+ 4754 10ee 7B000000 		.long	0x7b
+ 4755 10f2 02       		.byte	0x2
+ 4756 10f3 91       		.byte	0x91
+ 4757 10f4 5C       		.sleb128 -36
+ 4758 10f5 23       		.uleb128 0x23
+ 4759 10f6 00000000 		.long	.LASF356
+ 4760 10fa 1E110000 		.long	0x111e
+ 4761 10fe 01       		.byte	0x1
+ 4762 10ff 09       		.byte	0x9
+ 4763 1100 03       		.byte	0x3
+ 4764 1101 00000000 		.quad	__PRETTY_FUNCTION__.6586
+ 4764      00000000 
+ 4765 1109 23       		.uleb128 0x23
+ 4766 110a 00000000 		.long	.LASF357
+ 4767 110e 23110000 		.long	0x1123
+ 4768 1112 01       		.byte	0x1
+ 4769 1113 09       		.byte	0x9
+ 4770 1114 03       		.byte	0x3
+ 4771 1115 00000000 		.quad	__func__.6588
+ 4771      00000000 
+ 4772 111d 00       		.byte	0x0
+ 4773 111e 0B       		.uleb128 0xb
+ 4774 111f 7F100000 		.long	0x107f
+ 4775 1123 0B       		.uleb128 0xb
+ 4776 1124 7F100000 		.long	0x107f
+ 4777 1128 1E       		.uleb128 0x1e
+ 4778 1129 00000000 		.long	.LASF359
+ 4779 112d 01       		.byte	0x1
+ 4780 112e B1       		.byte	0xb1
+ 4781 112f 01       		.byte	0x1
+ 4782 1130 7B000000 		.long	0x7b
+ 4783 1134 00000000 		.quad	.LFB513
+ 4783      00000000 
+ 4784 113c 00000000 		.quad	.LFE513
+ 4784      00000000 
+ 4785 1144 00000000 		.long	.LLST5
+ 4786 1148 7D110000 		.long	0x117d
+ 4787 114c 1F       		.uleb128 0x1f
+ 4788 114d 00000000 		.long	.LASF352
+ 4789 1151 01       		.byte	0x1
+ 4790 1152 B1       		.byte	0xb1
+ 4791 1153 DE030000 		.long	0x3de
+ 4792 1157 02       		.byte	0x2
+ 4793 1158 91       		.byte	0x91
+ 4794 1159 68       		.sleb128 -24
+ 4795 115a 1F       		.uleb128 0x1f
+ 4796 115b 00000000 		.long	.LASF360
+ 4797 115f 01       		.byte	0x1
+ 4798 1160 B2       		.byte	0xb2
+ 4799 1161 1F040000 		.long	0x41f
+ 4800 1165 02       		.byte	0x2
+ 4801 1166 91       		.byte	0x91
+
GAS LISTING /tmp/ccq6ONvw.s 			page 113
+
+
+ 4802 1167 60       		.sleb128 -32
+ 4803 1168 23       		.uleb128 0x23
+ 4804 1169 00000000 		.long	.LASF356
+ 4805 116d 8D110000 		.long	0x118d
+ 4806 1171 01       		.byte	0x1
+ 4807 1172 09       		.byte	0x9
+ 4808 1173 03       		.byte	0x3
+ 4809 1174 00000000 		.quad	__PRETTY_FUNCTION__.6608
+ 4809      00000000 
+ 4810 117c 00       		.byte	0x0
+ 4811 117d 16       		.uleb128 0x16
+ 4812 117e C1000000 		.long	0xc1
+ 4813 1182 8D110000 		.long	0x118d
+ 4814 1186 17       		.uleb128 0x17
+ 4815 1187 B1000000 		.long	0xb1
+ 4816 118b 18       		.byte	0x18
+ 4817 118c 00       		.byte	0x0
+ 4818 118d 0B       		.uleb128 0xb
+ 4819 118e 7D110000 		.long	0x117d
+ 4820 1192 1E       		.uleb128 0x1e
+ 4821 1193 00000000 		.long	.LASF361
+ 4822 1197 01       		.byte	0x1
+ 4823 1198 BE       		.byte	0xbe
+ 4824 1199 01       		.byte	0x1
+ 4825 119a 7B000000 		.long	0x7b
+ 4826 119e 00000000 		.quad	.LFB514
+ 4826      00000000 
+ 4827 11a6 00000000 		.quad	.LFE514
+ 4827      00000000 
+ 4828 11ae 00000000 		.long	.LLST6
+ 4829 11b2 E7110000 		.long	0x11e7
+ 4830 11b6 1F       		.uleb128 0x1f
+ 4831 11b7 00000000 		.long	.LASF352
+ 4832 11bb 01       		.byte	0x1
+ 4833 11bc BE       		.byte	0xbe
+ 4834 11bd DE030000 		.long	0x3de
+ 4835 11c1 02       		.byte	0x2
+ 4836 11c2 91       		.byte	0x91
+ 4837 11c3 68       		.sleb128 -24
+ 4838 11c4 1F       		.uleb128 0x1f
+ 4839 11c5 00000000 		.long	.LASF360
+ 4840 11c9 01       		.byte	0x1
+ 4841 11ca BF       		.byte	0xbf
+ 4842 11cb 1F040000 		.long	0x41f
+ 4843 11cf 02       		.byte	0x2
+ 4844 11d0 91       		.byte	0x91
+ 4845 11d1 60       		.sleb128 -32
+ 4846 11d2 23       		.uleb128 0x23
+ 4847 11d3 00000000 		.long	.LASF356
+ 4848 11d7 E7110000 		.long	0x11e7
+ 4849 11db 01       		.byte	0x1
+ 4850 11dc 09       		.byte	0x9
+ 4851 11dd 03       		.byte	0x3
+ 4852 11de 00000000 		.quad	__PRETTY_FUNCTION__.6621
+ 4852      00000000 
+ 4853 11e6 00       		.byte	0x0
+ 4854 11e7 0B       		.uleb128 0xb
+
GAS LISTING /tmp/ccq6ONvw.s 			page 114
+
+
+ 4855 11e8 7D110000 		.long	0x117d
+ 4856 11ec 1E       		.uleb128 0x1e
+ 4857 11ed 00000000 		.long	.LASF362
+ 4858 11f1 01       		.byte	0x1
+ 4859 11f2 CB       		.byte	0xcb
+ 4860 11f3 01       		.byte	0x1
+ 4861 11f4 7B000000 		.long	0x7b
+ 4862 11f8 00000000 		.quad	.LFB515
+ 4862      00000000 
+ 4863 1200 00000000 		.quad	.LFE515
+ 4863      00000000 
+ 4864 1208 00000000 		.long	.LLST7
+ 4865 120c 41120000 		.long	0x1241
+ 4866 1210 1F       		.uleb128 0x1f
+ 4867 1211 00000000 		.long	.LASF352
+ 4868 1215 01       		.byte	0x1
+ 4869 1216 CB       		.byte	0xcb
+ 4870 1217 DE030000 		.long	0x3de
+ 4871 121b 02       		.byte	0x2
+ 4872 121c 91       		.byte	0x91
+ 4873 121d 68       		.sleb128 -24
+ 4874 121e 1F       		.uleb128 0x1f
+ 4875 121f 00000000 		.long	.LASF363
+ 4876 1223 01       		.byte	0x1
+ 4877 1224 CC       		.byte	0xcc
+ 4878 1225 F7010000 		.long	0x1f7
+ 4879 1229 02       		.byte	0x2
+ 4880 122a 91       		.byte	0x91
+ 4881 122b 60       		.sleb128 -32
+ 4882 122c 23       		.uleb128 0x23
+ 4883 122d 00000000 		.long	.LASF356
+ 4884 1231 41120000 		.long	0x1241
+ 4885 1235 01       		.byte	0x1
+ 4886 1236 09       		.byte	0x9
+ 4887 1237 03       		.byte	0x3
+ 4888 1238 00000000 		.quad	__PRETTY_FUNCTION__.6634
+ 4888      00000000 
+ 4889 1240 00       		.byte	0x0
+ 4890 1241 0B       		.uleb128 0xb
+ 4891 1242 35050000 		.long	0x535
+ 4892 1246 1E       		.uleb128 0x1e
+ 4893 1247 00000000 		.long	.LASF364
+ 4894 124b 01       		.byte	0x1
+ 4895 124c D8       		.byte	0xd8
+ 4896 124d 01       		.byte	0x1
+ 4897 124e 7B000000 		.long	0x7b
+ 4898 1252 00000000 		.quad	.LFB516
+ 4898      00000000 
+ 4899 125a 00000000 		.quad	.LFE516
+ 4899      00000000 
+ 4900 1262 00000000 		.long	.LLST8
+ 4901 1266 9B120000 		.long	0x129b
+ 4902 126a 1F       		.uleb128 0x1f
+ 4903 126b 00000000 		.long	.LASF352
+ 4904 126f 01       		.byte	0x1
+ 4905 1270 D8       		.byte	0xd8
+ 4906 1271 DE030000 		.long	0x3de
+
GAS LISTING /tmp/ccq6ONvw.s 			page 115
+
+
+ 4907 1275 02       		.byte	0x2
+ 4908 1276 91       		.byte	0x91
+ 4909 1277 68       		.sleb128 -24
+ 4910 1278 1F       		.uleb128 0x1f
+ 4911 1279 00000000 		.long	.LASF363
+ 4912 127d 01       		.byte	0x1
+ 4913 127e D9       		.byte	0xd9
+ 4914 127f F7010000 		.long	0x1f7
+ 4915 1283 02       		.byte	0x2
+ 4916 1284 91       		.byte	0x91
+ 4917 1285 60       		.sleb128 -32
+ 4918 1286 23       		.uleb128 0x23
+ 4919 1287 00000000 		.long	.LASF356
+ 4920 128b 9B120000 		.long	0x129b
+ 4921 128f 01       		.byte	0x1
+ 4922 1290 09       		.byte	0x9
+ 4923 1291 03       		.byte	0x3
+ 4924 1292 00000000 		.quad	__PRETTY_FUNCTION__.6644
+ 4924      00000000 
+ 4925 129a 00       		.byte	0x0
+ 4926 129b 0B       		.uleb128 0xb
+ 4927 129c 35050000 		.long	0x535
+ 4928 12a0 1E       		.uleb128 0x1e
+ 4929 12a1 00000000 		.long	.LASF365
+ 4930 12a5 01       		.byte	0x1
+ 4931 12a6 E4       		.byte	0xe4
+ 4932 12a7 01       		.byte	0x1
+ 4933 12a8 68050000 		.long	0x568
+ 4934 12ac 00000000 		.quad	.LFB517
+ 4934      00000000 
+ 4935 12b4 00000000 		.quad	.LFE517
+ 4935      00000000 
+ 4936 12bc 00000000 		.long	.LLST9
+ 4937 12c0 DF120000 		.long	0x12df
+ 4938 12c4 1F       		.uleb128 0x1f
+ 4939 12c5 00000000 		.long	.LASF352
+ 4940 12c9 01       		.byte	0x1
+ 4941 12ca E4       		.byte	0xe4
+ 4942 12cb 61040000 		.long	0x461
+ 4943 12cf 02       		.byte	0x2
+ 4944 12d0 91       		.byte	0x91
+ 4945 12d1 68       		.sleb128 -24
+ 4946 12d2 22       		.uleb128 0x22
+ 4947 12d3 637600   		.string	"cv"
+ 4948 12d6 01       		.byte	0x1
+ 4949 12d7 E5       		.byte	0xe5
+ 4950 12d8 68050000 		.long	0x568
+ 4951 12dc 01       		.byte	0x1
+ 4952 12dd 61       		.byte	0x61
+ 4953 12de 00       		.byte	0x0
+ 4954 12df 1E       		.uleb128 0x1e
+ 4955 12e0 00000000 		.long	.LASF366
+ 4956 12e4 01       		.byte	0x1
+ 4957 12e5 EB       		.byte	0xeb
+ 4958 12e6 01       		.byte	0x1
+ 4959 12e7 68050000 		.long	0x568
+ 4960 12eb 00000000 		.quad	.LFB518
+
GAS LISTING /tmp/ccq6ONvw.s 			page 116
+
+
+ 4960      00000000 
+ 4961 12f3 00000000 		.quad	.LFE518
+ 4961      00000000 
+ 4962 12fb 00000000 		.long	.LLST10
+ 4963 12ff 1E130000 		.long	0x131e
+ 4964 1303 1F       		.uleb128 0x1f
+ 4965 1304 00000000 		.long	.LASF352
+ 4966 1308 01       		.byte	0x1
+ 4967 1309 EB       		.byte	0xeb
+ 4968 130a 61040000 		.long	0x461
+ 4969 130e 02       		.byte	0x2
+ 4970 130f 91       		.byte	0x91
+ 4971 1310 68       		.sleb128 -24
+ 4972 1311 22       		.uleb128 0x22
+ 4973 1312 637600   		.string	"cv"
+ 4974 1315 01       		.byte	0x1
+ 4975 1316 EC       		.byte	0xec
+ 4976 1317 68050000 		.long	0x568
+ 4977 131b 01       		.byte	0x1
+ 4978 131c 61       		.byte	0x61
+ 4979 131d 00       		.byte	0x0
+ 4980 131e 1E       		.uleb128 0x1e
+ 4981 131f 00000000 		.long	.LASF367
+ 4982 1323 01       		.byte	0x1
+ 4983 1324 F2       		.byte	0xf2
+ 4984 1325 01       		.byte	0x1
+ 4985 1326 7B000000 		.long	0x7b
+ 4986 132a 00000000 		.quad	.LFB519
+ 4986      00000000 
+ 4987 1332 00000000 		.quad	.LFE519
+ 4987      00000000 
+ 4988 133a 00000000 		.long	.LLST11
+ 4989 133e 79130000 		.long	0x1379
+ 4990 1342 1F       		.uleb128 0x1f
+ 4991 1343 00000000 		.long	.LASF352
+ 4992 1347 01       		.byte	0x1
+ 4993 1348 F2       		.byte	0xf2
+ 4994 1349 61040000 		.long	0x461
+ 4995 134d 02       		.byte	0x2
+ 4996 134e 91       		.byte	0x91
+ 4997 134f 58       		.sleb128 -40
+ 4998 1350 22       		.uleb128 0x22
+ 4999 1351 696E00   		.string	"in"
+ 5000 1354 01       		.byte	0x1
+ 5001 1355 F3       		.byte	0xf3
+ 5002 1356 1F040000 		.long	0x41f
+ 5003 135a 02       		.byte	0x2
+ 5004 135b 91       		.byte	0x91
+ 5005 135c 50       		.sleb128 -48
+ 5006 135d 22       		.uleb128 0x22
+ 5007 135e 6F757400 		.string	"out"
+ 5008 1362 01       		.byte	0x1
+ 5009 1363 F3       		.byte	0xf3
+ 5010 1364 B4000000 		.long	0xb4
+ 5011 1368 02       		.byte	0x2
+ 5012 1369 91       		.byte	0x91
+ 5013 136a 48       		.sleb128 -56
+
GAS LISTING /tmp/ccq6ONvw.s 			page 117
+
+
+ 5014 136b 20       		.uleb128 0x20
+ 5015 136c 637600   		.string	"cv"
+ 5016 136f 01       		.byte	0x1
+ 5017 1370 F5       		.byte	0xf5
+ 5018 1371 68050000 		.long	0x568
+ 5019 1375 02       		.byte	0x2
+ 5020 1376 91       		.byte	0x91
+ 5021 1377 60       		.sleb128 -32
+ 5022 1378 00       		.byte	0x0
+ 5023 1379 1E       		.uleb128 0x1e
+ 5024 137a 00000000 		.long	.LASF368
+ 5025 137e 01       		.byte	0x1
+ 5026 137f FE       		.byte	0xfe
+ 5027 1380 01       		.byte	0x1
+ 5028 1381 7B000000 		.long	0x7b
+ 5029 1385 00000000 		.quad	.LFB520
+ 5029      00000000 
+ 5030 138d 00000000 		.quad	.LFE520
+ 5030      00000000 
+ 5031 1395 00000000 		.long	.LLST12
+ 5032 1399 D5130000 		.long	0x13d5
+ 5033 139d 1F       		.uleb128 0x1f
+ 5034 139e 00000000 		.long	.LASF352
+ 5035 13a2 01       		.byte	0x1
+ 5036 13a3 FE       		.byte	0xfe
+ 5037 13a4 61040000 		.long	0x461
+ 5038 13a8 02       		.byte	0x2
+ 5039 13a9 91       		.byte	0x91
+ 5040 13aa 58       		.sleb128 -40
+ 5041 13ab 22       		.uleb128 0x22
+ 5042 13ac 696E00   		.string	"in"
+ 5043 13af 01       		.byte	0x1
+ 5044 13b0 FF       		.byte	0xff
+ 5045 13b1 1F040000 		.long	0x41f
+ 5046 13b5 02       		.byte	0x2
+ 5047 13b6 91       		.byte	0x91
+ 5048 13b7 50       		.sleb128 -48
+ 5049 13b8 22       		.uleb128 0x22
+ 5050 13b9 6F757400 		.string	"out"
+ 5051 13bd 01       		.byte	0x1
+ 5052 13be FF       		.byte	0xff
+ 5053 13bf B4000000 		.long	0xb4
+ 5054 13c3 02       		.byte	0x2
+ 5055 13c4 91       		.byte	0x91
+ 5056 13c5 48       		.sleb128 -56
+ 5057 13c6 24       		.uleb128 0x24
+ 5058 13c7 637600   		.string	"cv"
+ 5059 13ca 01       		.byte	0x1
+ 5060 13cb 0101     		.value	0x101
+ 5061 13cd 68050000 		.long	0x568
+ 5062 13d1 02       		.byte	0x2
+ 5063 13d2 91       		.byte	0x91
+ 5064 13d3 60       		.sleb128 -32
+ 5065 13d4 00       		.byte	0x0
+ 5066 13d5 25       		.uleb128 0x25
+ 5067 13d6 00000000 		.long	.LASF369
+ 5068 13da 01       		.byte	0x1
+
GAS LISTING /tmp/ccq6ONvw.s 			page 118
+
+
+ 5069 13db 0A01     		.value	0x10a
+ 5070 13dd 01       		.byte	0x1
+ 5071 13de 7B000000 		.long	0x7b
+ 5072 13e2 00000000 		.quad	.LFB521
+ 5072      00000000 
+ 5073 13ea 00000000 		.quad	.LFE521
+ 5073      00000000 
+ 5074 13f2 00000000 		.long	.LLST13
+ 5075 13f6 5D140000 		.long	0x145d
+ 5076 13fa 26       		.uleb128 0x26
+ 5077 13fb 00000000 		.long	.LASF352
+ 5078 13ff 01       		.byte	0x1
+ 5079 1400 0A01     		.value	0x10a
+ 5080 1402 61040000 		.long	0x461
+ 5081 1406 02       		.byte	0x2
+ 5082 1407 91       		.byte	0x91
+ 5083 1408 58       		.sleb128 -40
+ 5084 1409 27       		.uleb128 0x27
+ 5085 140a 696E00   		.string	"in"
+ 5086 140d 01       		.byte	0x1
+ 5087 140e 0A01     		.value	0x10a
+ 5088 1410 1F040000 		.long	0x41f
+ 5089 1414 02       		.byte	0x2
+ 5090 1415 91       		.byte	0x91
+ 5091 1416 50       		.sleb128 -48
+ 5092 1417 27       		.uleb128 0x27
+ 5093 1418 6F757400 		.string	"out"
+ 5094 141c 01       		.byte	0x1
+ 5095 141d 0A01     		.value	0x10a
+ 5096 141f B4000000 		.long	0xb4
+ 5097 1423 02       		.byte	0x2
+ 5098 1424 91       		.byte	0x91
+ 5099 1425 48       		.sleb128 -56
+ 5100 1426 24       		.uleb128 0x24
+ 5101 1427 726300   		.string	"rc"
+ 5102 142a 01       		.byte	0x1
+ 5103 142b 0C01     		.value	0x10c
+ 5104 142d 7B000000 		.long	0x7b
+ 5105 1431 02       		.byte	0x2
+ 5106 1432 91       		.byte	0x91
+ 5107 1433 6C       		.sleb128 -20
+ 5108 1434 23       		.uleb128 0x23
+ 5109 1435 00000000 		.long	.LASF356
+ 5110 1439 6D140000 		.long	0x146d
+ 5111 143d 01       		.byte	0x1
+ 5112 143e 09       		.byte	0x9
+ 5113 143f 03       		.byte	0x3
+ 5114 1440 00000000 		.quad	__PRETTY_FUNCTION__.6693
+ 5114      00000000 
+ 5115 1448 23       		.uleb128 0x23
+ 5116 1449 00000000 		.long	.LASF357
+ 5117 144d 72140000 		.long	0x1472
+ 5118 1451 01       		.byte	0x1
+ 5119 1452 09       		.byte	0x9
+ 5120 1453 03       		.byte	0x3
+ 5121 1454 00000000 		.quad	__func__.6694
+ 5121      00000000 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 119
+
+
+ 5122 145c 00       		.byte	0x0
+ 5123 145d 16       		.uleb128 0x16
+ 5124 145e C1000000 		.long	0xc1
+ 5125 1462 6D140000 		.long	0x146d
+ 5126 1466 17       		.uleb128 0x17
+ 5127 1467 B1000000 		.long	0xb1
+ 5128 146b 11       		.byte	0x11
+ 5129 146c 00       		.byte	0x0
+ 5130 146d 0B       		.uleb128 0xb
+ 5131 146e 5D140000 		.long	0x145d
+ 5132 1472 0B       		.uleb128 0xb
+ 5133 1473 5D140000 		.long	0x145d
+ 5134 1477 25       		.uleb128 0x25
+ 5135 1478 00000000 		.long	.LASF370
+ 5136 147c 01       		.byte	0x1
+ 5137 147d 1E01     		.value	0x11e
+ 5138 147f 01       		.byte	0x1
+ 5139 1480 7B000000 		.long	0x7b
+ 5140 1484 00000000 		.quad	.LFB522
+ 5140      00000000 
+ 5141 148c 00000000 		.quad	.LFE522
+ 5141      00000000 
+ 5142 1494 00000000 		.long	.LLST14
+ 5143 1498 FF140000 		.long	0x14ff
+ 5144 149c 26       		.uleb128 0x26
+ 5145 149d 00000000 		.long	.LASF352
+ 5146 14a1 01       		.byte	0x1
+ 5147 14a2 1E01     		.value	0x11e
+ 5148 14a4 61040000 		.long	0x461
+ 5149 14a8 02       		.byte	0x2
+ 5150 14a9 91       		.byte	0x91
+ 5151 14aa 58       		.sleb128 -40
+ 5152 14ab 27       		.uleb128 0x27
+ 5153 14ac 696E00   		.string	"in"
+ 5154 14af 01       		.byte	0x1
+ 5155 14b0 1E01     		.value	0x11e
+ 5156 14b2 1F040000 		.long	0x41f
+ 5157 14b6 02       		.byte	0x2
+ 5158 14b7 91       		.byte	0x91
+ 5159 14b8 50       		.sleb128 -48
+ 5160 14b9 27       		.uleb128 0x27
+ 5161 14ba 6F757400 		.string	"out"
+ 5162 14be 01       		.byte	0x1
+ 5163 14bf 1E01     		.value	0x11e
+ 5164 14c1 B4000000 		.long	0xb4
+ 5165 14c5 02       		.byte	0x2
+ 5166 14c6 91       		.byte	0x91
+ 5167 14c7 48       		.sleb128 -56
+ 5168 14c8 24       		.uleb128 0x24
+ 5169 14c9 726300   		.string	"rc"
+ 5170 14cc 01       		.byte	0x1
+ 5171 14cd 2001     		.value	0x120
+ 5172 14cf 7B000000 		.long	0x7b
+ 5173 14d3 02       		.byte	0x2
+ 5174 14d4 91       		.byte	0x91
+ 5175 14d5 6C       		.sleb128 -20
+ 5176 14d6 23       		.uleb128 0x23
+
GAS LISTING /tmp/ccq6ONvw.s 			page 120
+
+
+ 5177 14d7 00000000 		.long	.LASF356
+ 5178 14db FF140000 		.long	0x14ff
+ 5179 14df 01       		.byte	0x1
+ 5180 14e0 09       		.byte	0x9
+ 5181 14e1 03       		.byte	0x3
+ 5182 14e2 00000000 		.quad	__PRETTY_FUNCTION__.6709
+ 5182      00000000 
+ 5183 14ea 23       		.uleb128 0x23
+ 5184 14eb 00000000 		.long	.LASF357
+ 5185 14ef 04150000 		.long	0x1504
+ 5186 14f3 01       		.byte	0x1
+ 5187 14f4 09       		.byte	0x9
+ 5188 14f5 03       		.byte	0x3
+ 5189 14f6 00000000 		.quad	__func__.6710
+ 5189      00000000 
+ 5190 14fe 00       		.byte	0x0
+ 5191 14ff 0B       		.uleb128 0xb
+ 5192 1500 5D140000 		.long	0x145d
+ 5193 1504 0B       		.uleb128 0xb
+ 5194 1505 5D140000 		.long	0x145d
+ 5195 1509 25       		.uleb128 0x25
+ 5196 150a 00000000 		.long	.LASF371
+ 5197 150e 01       		.byte	0x1
+ 5198 150f 5C01     		.value	0x15c
+ 5199 1511 01       		.byte	0x1
+ 5200 1512 7B000000 		.long	0x7b
+ 5201 1516 00000000 		.quad	.LFB523
+ 5201      00000000 
+ 5202 151e 00000000 		.quad	.LFE523
+ 5202      00000000 
+ 5203 1526 00000000 		.long	.LLST15
+ 5204 152a 88150000 		.long	0x1588
+ 5205 152e 26       		.uleb128 0x26
+ 5206 152f 00000000 		.long	.LASF352
+ 5207 1533 01       		.byte	0x1
+ 5208 1534 5C01     		.value	0x15c
+ 5209 1536 61040000 		.long	0x461
+ 5210 153a 02       		.byte	0x2
+ 5211 153b 91       		.byte	0x91
+ 5212 153c 58       		.sleb128 -40
+ 5213 153d 27       		.uleb128 0x27
+ 5214 153e 696E00   		.string	"in"
+ 5215 1541 01       		.byte	0x1
+ 5216 1542 5C01     		.value	0x15c
+ 5217 1544 1F040000 		.long	0x41f
+ 5218 1548 02       		.byte	0x2
+ 5219 1549 91       		.byte	0x91
+ 5220 154a 50       		.sleb128 -48
+ 5221 154b 27       		.uleb128 0x27
+ 5222 154c 6F757400 		.string	"out"
+ 5223 1550 01       		.byte	0x1
+ 5224 1551 5C01     		.value	0x15c
+ 5225 1553 B4000000 		.long	0xb4
+ 5226 1557 02       		.byte	0x2
+ 5227 1558 91       		.byte	0x91
+ 5228 1559 48       		.sleb128 -56
+ 5229 155a 26       		.uleb128 0x26
+
GAS LISTING /tmp/ccq6ONvw.s 			page 121
+
+
+ 5230 155b 00000000 		.long	.LASF372
+ 5231 155f 01       		.byte	0x1
+ 5232 1560 5C01     		.value	0x15c
+ 5233 1562 62000000 		.long	0x62
+ 5234 1566 02       		.byte	0x2
+ 5235 1567 91       		.byte	0x91
+ 5236 1568 44       		.sleb128 -60
+ 5237 1569 24       		.uleb128 0x24
+ 5238 156a 70696E00 		.string	"pin"
+ 5239 156e 01       		.byte	0x1
+ 5240 156f 5E01     		.value	0x15e
+ 5241 1571 88150000 		.long	0x1588
+ 5242 1575 02       		.byte	0x2
+ 5243 1576 91       		.byte	0x91
+ 5244 1577 60       		.sleb128 -32
+ 5245 1578 28       		.uleb128 0x28
+ 5246 1579 00000000 		.long	.LASF373
+ 5247 157d 01       		.byte	0x1
+ 5248 157e 5F01     		.value	0x15f
+ 5249 1580 93150000 		.long	0x1593
+ 5250 1584 02       		.byte	0x2
+ 5251 1585 91       		.byte	0x91
+ 5252 1586 68       		.sleb128 -24
+ 5253 1587 00       		.byte	0x0
+ 5254 1588 0A       		.uleb128 0xa
+ 5255 1589 08       		.byte	0x8
+ 5256 158a 8E150000 		.long	0x158e
+ 5257 158e 0B       		.uleb128 0xb
+ 5258 158f 49000000 		.long	0x49
+ 5259 1593 0A       		.uleb128 0xa
+ 5260 1594 08       		.byte	0x8
+ 5261 1595 49000000 		.long	0x49
+ 5262 1599 25       		.uleb128 0x25
+ 5263 159a 00000000 		.long	.LASF374
+ 5264 159e 01       		.byte	0x1
+ 5265 159f 6C01     		.value	0x16c
+ 5266 15a1 01       		.byte	0x1
+ 5267 15a2 7B000000 		.long	0x7b
+ 5268 15a6 00000000 		.quad	.LFB524
+ 5268      00000000 
+ 5269 15ae 00000000 		.quad	.LFE524
+ 5269      00000000 
+ 5270 15b6 00000000 		.long	.LLST16
+ 5271 15ba 18160000 		.long	0x1618
+ 5272 15be 26       		.uleb128 0x26
+ 5273 15bf 00000000 		.long	.LASF352
+ 5274 15c3 01       		.byte	0x1
+ 5275 15c4 6C01     		.value	0x16c
+ 5276 15c6 61040000 		.long	0x461
+ 5277 15ca 02       		.byte	0x2
+ 5278 15cb 91       		.byte	0x91
+ 5279 15cc 58       		.sleb128 -40
+ 5280 15cd 27       		.uleb128 0x27
+ 5281 15ce 696E00   		.string	"in"
+ 5282 15d1 01       		.byte	0x1
+ 5283 15d2 6C01     		.value	0x16c
+ 5284 15d4 1F040000 		.long	0x41f
+
GAS LISTING /tmp/ccq6ONvw.s 			page 122
+
+
+ 5285 15d8 02       		.byte	0x2
+ 5286 15d9 91       		.byte	0x91
+ 5287 15da 50       		.sleb128 -48
+ 5288 15db 27       		.uleb128 0x27
+ 5289 15dc 6F757400 		.string	"out"
+ 5290 15e0 01       		.byte	0x1
+ 5291 15e1 6C01     		.value	0x16c
+ 5292 15e3 B4000000 		.long	0xb4
+ 5293 15e7 02       		.byte	0x2
+ 5294 15e8 91       		.byte	0x91
+ 5295 15e9 48       		.sleb128 -56
+ 5296 15ea 26       		.uleb128 0x26
+ 5297 15eb 00000000 		.long	.LASF372
+ 5298 15ef 01       		.byte	0x1
+ 5299 15f0 6C01     		.value	0x16c
+ 5300 15f2 62000000 		.long	0x62
+ 5301 15f6 02       		.byte	0x2
+ 5302 15f7 91       		.byte	0x91
+ 5303 15f8 44       		.sleb128 -60
+ 5304 15f9 24       		.uleb128 0x24
+ 5305 15fa 70696E00 		.string	"pin"
+ 5306 15fe 01       		.byte	0x1
+ 5307 15ff 6E01     		.value	0x16e
+ 5308 1601 88150000 		.long	0x1588
+ 5309 1605 02       		.byte	0x2
+ 5310 1606 91       		.byte	0x91
+ 5311 1607 60       		.sleb128 -32
+ 5312 1608 28       		.uleb128 0x28
+ 5313 1609 00000000 		.long	.LASF373
+ 5314 160d 01       		.byte	0x1
+ 5315 160e 6F01     		.value	0x16f
+ 5316 1610 93150000 		.long	0x1593
+ 5317 1614 02       		.byte	0x2
+ 5318 1615 91       		.byte	0x91
+ 5319 1616 68       		.sleb128 -24
+ 5320 1617 00       		.byte	0x0
+ 5321 1618 25       		.uleb128 0x25
+ 5322 1619 00000000 		.long	.LASF375
+ 5323 161d 01       		.byte	0x1
+ 5324 161e 8201     		.value	0x182
+ 5325 1620 01       		.byte	0x1
+ 5326 1621 7B000000 		.long	0x7b
+ 5327 1625 00000000 		.quad	.LFB525
+ 5327      00000000 
+ 5328 162d 00000000 		.quad	.LFE525
+ 5328      00000000 
+ 5329 1635 00000000 		.long	.LLST17
+ 5330 1639 B8160000 		.long	0x16b8
+ 5331 163d 26       		.uleb128 0x26
+ 5332 163e 00000000 		.long	.LASF352
+ 5333 1642 01       		.byte	0x1
+ 5334 1643 8201     		.value	0x182
+ 5335 1645 DE030000 		.long	0x3de
+ 5336 1649 03       		.byte	0x3
+ 5337 164a 91       		.byte	0x91
+ 5338 164b B87F     		.sleb128 -72
+ 5339 164d 27       		.uleb128 0x27
+
GAS LISTING /tmp/ccq6ONvw.s 			page 123
+
+
+ 5340 164e 696E00   		.string	"in"
+ 5341 1651 01       		.byte	0x1
+ 5342 1652 8201     		.value	0x182
+ 5343 1654 1F040000 		.long	0x41f
+ 5344 1658 03       		.byte	0x3
+ 5345 1659 91       		.byte	0x91
+ 5346 165a B07F     		.sleb128 -80
+ 5347 165c 27       		.uleb128 0x27
+ 5348 165d 6F757400 		.string	"out"
+ 5349 1661 01       		.byte	0x1
+ 5350 1662 8201     		.value	0x182
+ 5351 1664 B4000000 		.long	0xb4
+ 5352 1668 03       		.byte	0x3
+ 5353 1669 91       		.byte	0x91
+ 5354 166a A87F     		.sleb128 -88
+ 5355 166c 26       		.uleb128 0x26
+ 5356 166d 00000000 		.long	.LASF372
+ 5357 1671 01       		.byte	0x1
+ 5358 1672 8201     		.value	0x182
+ 5359 1674 62000000 		.long	0x62
+ 5360 1678 03       		.byte	0x3
+ 5361 1679 91       		.byte	0x91
+ 5362 167a A47F     		.sleb128 -92
+ 5363 167c 24       		.uleb128 0x24
+ 5364 167d 637600   		.string	"cv"
+ 5365 1680 01       		.byte	0x1
+ 5366 1681 8401     		.value	0x184
+ 5367 1683 68050000 		.long	0x568
+ 5368 1687 02       		.byte	0x2
+ 5369 1688 91       		.byte	0x91
+ 5370 1689 40       		.sleb128 -64
+ 5371 168a 28       		.uleb128 0x28
+ 5372 168b 00000000 		.long	.LASF360
+ 5373 168f 01       		.byte	0x1
+ 5374 1690 8501     		.value	0x185
+ 5375 1692 68050000 		.long	0x568
+ 5376 1696 02       		.byte	0x2
+ 5377 1697 91       		.byte	0x91
+ 5378 1698 50       		.sleb128 -48
+ 5379 1699 24       		.uleb128 0x24
+ 5380 169a 70696E00 		.string	"pin"
+ 5381 169e 01       		.byte	0x1
+ 5382 169f 8601     		.value	0x186
+ 5383 16a1 88150000 		.long	0x1588
+ 5384 16a5 02       		.byte	0x2
+ 5385 16a6 91       		.byte	0x91
+ 5386 16a7 60       		.sleb128 -32
+ 5387 16a8 28       		.uleb128 0x28
+ 5388 16a9 00000000 		.long	.LASF373
+ 5389 16ad 01       		.byte	0x1
+ 5390 16ae 8701     		.value	0x187
+ 5391 16b0 93150000 		.long	0x1593
+ 5392 16b4 02       		.byte	0x2
+ 5393 16b5 91       		.byte	0x91
+ 5394 16b6 68       		.sleb128 -24
+ 5395 16b7 00       		.byte	0x0
+ 5396 16b8 25       		.uleb128 0x25
+
GAS LISTING /tmp/ccq6ONvw.s 			page 124
+
+
+ 5397 16b9 00000000 		.long	.LASF376
+ 5398 16bd 01       		.byte	0x1
+ 5399 16be A401     		.value	0x1a4
+ 5400 16c0 01       		.byte	0x1
+ 5401 16c1 7B000000 		.long	0x7b
+ 5402 16c5 00000000 		.quad	.LFB526
+ 5402      00000000 
+ 5403 16cd 00000000 		.quad	.LFE526
+ 5403      00000000 
+ 5404 16d5 00000000 		.long	.LLST18
+ 5405 16d9 7A170000 		.long	0x177a
+ 5406 16dd 26       		.uleb128 0x26
+ 5407 16de 00000000 		.long	.LASF352
+ 5408 16e2 01       		.byte	0x1
+ 5409 16e3 A401     		.value	0x1a4
+ 5410 16e5 DE030000 		.long	0x3de
+ 5411 16e9 03       		.byte	0x3
+ 5412 16ea 91       		.byte	0x91
+ 5413 16eb A87F     		.sleb128 -88
+ 5414 16ed 27       		.uleb128 0x27
+ 5415 16ee 696E00   		.string	"in"
+ 5416 16f1 01       		.byte	0x1
+ 5417 16f2 A401     		.value	0x1a4
+ 5418 16f4 1F040000 		.long	0x41f
+ 5419 16f8 03       		.byte	0x3
+ 5420 16f9 91       		.byte	0x91
+ 5421 16fa A07F     		.sleb128 -96
+ 5422 16fc 27       		.uleb128 0x27
+ 5423 16fd 6F757400 		.string	"out"
+ 5424 1701 01       		.byte	0x1
+ 5425 1702 A401     		.value	0x1a4
+ 5426 1704 B4000000 		.long	0xb4
+ 5427 1708 03       		.byte	0x3
+ 5428 1709 91       		.byte	0x91
+ 5429 170a 987F     		.sleb128 -104
+ 5430 170c 26       		.uleb128 0x26
+ 5431 170d 00000000 		.long	.LASF372
+ 5432 1711 01       		.byte	0x1
+ 5433 1712 A401     		.value	0x1a4
+ 5434 1714 62000000 		.long	0x62
+ 5435 1718 03       		.byte	0x3
+ 5436 1719 91       		.byte	0x91
+ 5437 171a 947F     		.sleb128 -108
+ 5438 171c 24       		.uleb128 0x24
+ 5439 171d 637600   		.string	"cv"
+ 5440 1720 01       		.byte	0x1
+ 5441 1721 A601     		.value	0x1a6
+ 5442 1723 68050000 		.long	0x568
+ 5443 1727 03       		.byte	0x3
+ 5444 1728 91       		.byte	0x91
+ 5445 1729 B07F     		.sleb128 -80
+ 5446 172b 28       		.uleb128 0x28
+ 5447 172c 00000000 		.long	.LASF360
+ 5448 1730 01       		.byte	0x1
+ 5449 1731 A701     		.value	0x1a7
+ 5450 1733 68050000 		.long	0x568
+ 5451 1737 02       		.byte	0x2
+
GAS LISTING /tmp/ccq6ONvw.s 			page 125
+
+
+ 5452 1738 91       		.byte	0x91
+ 5453 1739 40       		.sleb128 -64
+ 5454 173a 24       		.uleb128 0x24
+ 5455 173b 70696E00 		.string	"pin"
+ 5456 173f 01       		.byte	0x1
+ 5457 1740 A801     		.value	0x1a8
+ 5458 1742 88150000 		.long	0x1588
+ 5459 1746 02       		.byte	0x2
+ 5460 1747 91       		.byte	0x91
+ 5461 1748 50       		.sleb128 -48
+ 5462 1749 28       		.uleb128 0x28
+ 5463 174a 00000000 		.long	.LASF373
+ 5464 174e 01       		.byte	0x1
+ 5465 174f A901     		.value	0x1a9
+ 5466 1751 93150000 		.long	0x1593
+ 5467 1755 02       		.byte	0x2
+ 5468 1756 91       		.byte	0x91
+ 5469 1757 58       		.sleb128 -40
+ 5470 1758 29       		.uleb128 0x29
+ 5471 1759 00000000 		.quad	.LBB2
+ 5471      00000000 
+ 5472 1761 00000000 		.quad	.LBE2
+ 5472      00000000 
+ 5473 1769 28       		.uleb128 0x28
+ 5474 176a 00000000 		.long	.LASF377
+ 5475 176e 01       		.byte	0x1
+ 5476 176f B101     		.value	0x1b1
+ 5477 1771 68050000 		.long	0x568
+ 5478 1775 02       		.byte	0x2
+ 5479 1776 91       		.byte	0x91
+ 5480 1777 60       		.sleb128 -32
+ 5481 1778 00       		.byte	0x0
+ 5482 1779 00       		.byte	0x0
+ 5483 177a 25       		.uleb128 0x25
+ 5484 177b 00000000 		.long	.LASF378
+ 5485 177f 01       		.byte	0x1
+ 5486 1780 CA01     		.value	0x1ca
+ 5487 1782 01       		.byte	0x1
+ 5488 1783 7B000000 		.long	0x7b
+ 5489 1787 00000000 		.quad	.LFB527
+ 5489      00000000 
+ 5490 178f 00000000 		.quad	.LFE527
+ 5490      00000000 
+ 5491 1797 00000000 		.long	.LLST19
+ 5492 179b 3C180000 		.long	0x183c
+ 5493 179f 26       		.uleb128 0x26
+ 5494 17a0 00000000 		.long	.LASF352
+ 5495 17a4 01       		.byte	0x1
+ 5496 17a5 CA01     		.value	0x1ca
+ 5497 17a7 DE030000 		.long	0x3de
+ 5498 17ab 03       		.byte	0x3
+ 5499 17ac 91       		.byte	0x91
+ 5500 17ad A87F     		.sleb128 -88
+ 5501 17af 27       		.uleb128 0x27
+ 5502 17b0 696E00   		.string	"in"
+ 5503 17b3 01       		.byte	0x1
+ 5504 17b4 CA01     		.value	0x1ca
+
GAS LISTING /tmp/ccq6ONvw.s 			page 126
+
+
+ 5505 17b6 1F040000 		.long	0x41f
+ 5506 17ba 03       		.byte	0x3
+ 5507 17bb 91       		.byte	0x91
+ 5508 17bc A07F     		.sleb128 -96
+ 5509 17be 27       		.uleb128 0x27
+ 5510 17bf 6F757400 		.string	"out"
+ 5511 17c3 01       		.byte	0x1
+ 5512 17c4 CA01     		.value	0x1ca
+ 5513 17c6 B4000000 		.long	0xb4
+ 5514 17ca 03       		.byte	0x3
+ 5515 17cb 91       		.byte	0x91
+ 5516 17cc 987F     		.sleb128 -104
+ 5517 17ce 26       		.uleb128 0x26
+ 5518 17cf 00000000 		.long	.LASF372
+ 5519 17d3 01       		.byte	0x1
+ 5520 17d4 CA01     		.value	0x1ca
+ 5521 17d6 62000000 		.long	0x62
+ 5522 17da 03       		.byte	0x3
+ 5523 17db 91       		.byte	0x91
+ 5524 17dc 947F     		.sleb128 -108
+ 5525 17de 24       		.uleb128 0x24
+ 5526 17df 637600   		.string	"cv"
+ 5527 17e2 01       		.byte	0x1
+ 5528 17e3 CD01     		.value	0x1cd
+ 5529 17e5 68050000 		.long	0x568
+ 5530 17e9 03       		.byte	0x3
+ 5531 17ea 91       		.byte	0x91
+ 5532 17eb B07F     		.sleb128 -80
+ 5533 17ed 28       		.uleb128 0x28
+ 5534 17ee 00000000 		.long	.LASF360
+ 5535 17f2 01       		.byte	0x1
+ 5536 17f3 CE01     		.value	0x1ce
+ 5537 17f5 68050000 		.long	0x568
+ 5538 17f9 02       		.byte	0x2
+ 5539 17fa 91       		.byte	0x91
+ 5540 17fb 40       		.sleb128 -64
+ 5541 17fc 24       		.uleb128 0x24
+ 5542 17fd 70696E00 		.string	"pin"
+ 5543 1801 01       		.byte	0x1
+ 5544 1802 CF01     		.value	0x1cf
+ 5545 1804 88150000 		.long	0x1588
+ 5546 1808 02       		.byte	0x2
+ 5547 1809 91       		.byte	0x91
+ 5548 180a 50       		.sleb128 -48
+ 5549 180b 28       		.uleb128 0x28
+ 5550 180c 00000000 		.long	.LASF373
+ 5551 1810 01       		.byte	0x1
+ 5552 1811 D001     		.value	0x1d0
+ 5553 1813 93150000 		.long	0x1593
+ 5554 1817 02       		.byte	0x2
+ 5555 1818 91       		.byte	0x91
+ 5556 1819 58       		.sleb128 -40
+ 5557 181a 29       		.uleb128 0x29
+ 5558 181b 00000000 		.quad	.LBB3
+ 5558      00000000 
+ 5559 1823 00000000 		.quad	.LBE3
+ 5559      00000000 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 127
+
+
+ 5560 182b 28       		.uleb128 0x28
+ 5561 182c 00000000 		.long	.LASF377
+ 5562 1830 01       		.byte	0x1
+ 5563 1831 D801     		.value	0x1d8
+ 5564 1833 68050000 		.long	0x568
+ 5565 1837 02       		.byte	0x2
+ 5566 1838 91       		.byte	0x91
+ 5567 1839 60       		.sleb128 -32
+ 5568 183a 00       		.byte	0x0
+ 5569 183b 00       		.byte	0x0
+ 5570 183c 25       		.uleb128 0x25
+ 5571 183d 00000000 		.long	.LASF379
+ 5572 1841 01       		.byte	0x1
+ 5573 1842 EB01     		.value	0x1eb
+ 5574 1844 01       		.byte	0x1
+ 5575 1845 7B000000 		.long	0x7b
+ 5576 1849 00000000 		.quad	.LFB528
+ 5576      00000000 
+ 5577 1851 00000000 		.quad	.LFE528
+ 5577      00000000 
+ 5578 1859 00000000 		.long	.LLST20
+ 5579 185d FE180000 		.long	0x18fe
+ 5580 1861 26       		.uleb128 0x26
+ 5581 1862 00000000 		.long	.LASF352
+ 5582 1866 01       		.byte	0x1
+ 5583 1867 EB01     		.value	0x1eb
+ 5584 1869 DE030000 		.long	0x3de
+ 5585 186d 03       		.byte	0x3
+ 5586 186e 91       		.byte	0x91
+ 5587 186f A87F     		.sleb128 -88
+ 5588 1871 27       		.uleb128 0x27
+ 5589 1872 696E00   		.string	"in"
+ 5590 1875 01       		.byte	0x1
+ 5591 1876 EB01     		.value	0x1eb
+ 5592 1878 1F040000 		.long	0x41f
+ 5593 187c 03       		.byte	0x3
+ 5594 187d 91       		.byte	0x91
+ 5595 187e A07F     		.sleb128 -96
+ 5596 1880 27       		.uleb128 0x27
+ 5597 1881 6F757400 		.string	"out"
+ 5598 1885 01       		.byte	0x1
+ 5599 1886 EB01     		.value	0x1eb
+ 5600 1888 B4000000 		.long	0xb4
+ 5601 188c 03       		.byte	0x3
+ 5602 188d 91       		.byte	0x91
+ 5603 188e 987F     		.sleb128 -104
+ 5604 1890 26       		.uleb128 0x26
+ 5605 1891 00000000 		.long	.LASF372
+ 5606 1895 01       		.byte	0x1
+ 5607 1896 EB01     		.value	0x1eb
+ 5608 1898 62000000 		.long	0x62
+ 5609 189c 03       		.byte	0x3
+ 5610 189d 91       		.byte	0x91
+ 5611 189e 947F     		.sleb128 -108
+ 5612 18a0 24       		.uleb128 0x24
+ 5613 18a1 637600   		.string	"cv"
+ 5614 18a4 01       		.byte	0x1
+
GAS LISTING /tmp/ccq6ONvw.s 			page 128
+
+
+ 5615 18a5 EE01     		.value	0x1ee
+ 5616 18a7 68050000 		.long	0x568
+ 5617 18ab 03       		.byte	0x3
+ 5618 18ac 91       		.byte	0x91
+ 5619 18ad B07F     		.sleb128 -80
+ 5620 18af 28       		.uleb128 0x28
+ 5621 18b0 00000000 		.long	.LASF360
+ 5622 18b4 01       		.byte	0x1
+ 5623 18b5 EF01     		.value	0x1ef
+ 5624 18b7 68050000 		.long	0x568
+ 5625 18bb 02       		.byte	0x2
+ 5626 18bc 91       		.byte	0x91
+ 5627 18bd 40       		.sleb128 -64
+ 5628 18be 24       		.uleb128 0x24
+ 5629 18bf 70696E00 		.string	"pin"
+ 5630 18c3 01       		.byte	0x1
+ 5631 18c4 F001     		.value	0x1f0
+ 5632 18c6 88150000 		.long	0x1588
+ 5633 18ca 02       		.byte	0x2
+ 5634 18cb 91       		.byte	0x91
+ 5635 18cc 50       		.sleb128 -48
+ 5636 18cd 28       		.uleb128 0x28
+ 5637 18ce 00000000 		.long	.LASF373
+ 5638 18d2 01       		.byte	0x1
+ 5639 18d3 F101     		.value	0x1f1
+ 5640 18d5 93150000 		.long	0x1593
+ 5641 18d9 02       		.byte	0x2
+ 5642 18da 91       		.byte	0x91
+ 5643 18db 58       		.sleb128 -40
+ 5644 18dc 29       		.uleb128 0x29
+ 5645 18dd 00000000 		.quad	.LBB4
+ 5645      00000000 
+ 5646 18e5 00000000 		.quad	.LBE4
+ 5646      00000000 
+ 5647 18ed 28       		.uleb128 0x28
+ 5648 18ee 00000000 		.long	.LASF377
+ 5649 18f2 01       		.byte	0x1
+ 5650 18f3 F901     		.value	0x1f9
+ 5651 18f5 68050000 		.long	0x568
+ 5652 18f9 02       		.byte	0x2
+ 5653 18fa 91       		.byte	0x91
+ 5654 18fb 60       		.sleb128 -32
+ 5655 18fc 00       		.byte	0x0
+ 5656 18fd 00       		.byte	0x0
+ 5657 18fe 25       		.uleb128 0x25
+ 5658 18ff 00000000 		.long	.LASF380
+ 5659 1903 01       		.byte	0x1
+ 5660 1904 1002     		.value	0x210
+ 5661 1906 01       		.byte	0x1
+ 5662 1907 7B000000 		.long	0x7b
+ 5663 190b 00000000 		.quad	.LFB529
+ 5663      00000000 
+ 5664 1913 00000000 		.quad	.LFE529
+ 5664      00000000 
+ 5665 191b 00000000 		.long	.LLST21
+ 5666 191f 9E190000 		.long	0x199e
+ 5667 1923 26       		.uleb128 0x26
+
GAS LISTING /tmp/ccq6ONvw.s 			page 129
+
+
+ 5668 1924 00000000 		.long	.LASF352
+ 5669 1928 01       		.byte	0x1
+ 5670 1929 1002     		.value	0x210
+ 5671 192b DE030000 		.long	0x3de
+ 5672 192f 03       		.byte	0x3
+ 5673 1930 91       		.byte	0x91
+ 5674 1931 B87F     		.sleb128 -72
+ 5675 1933 27       		.uleb128 0x27
+ 5676 1934 696E00   		.string	"in"
+ 5677 1937 01       		.byte	0x1
+ 5678 1938 1002     		.value	0x210
+ 5679 193a 1F040000 		.long	0x41f
+ 5680 193e 03       		.byte	0x3
+ 5681 193f 91       		.byte	0x91
+ 5682 1940 B07F     		.sleb128 -80
+ 5683 1942 27       		.uleb128 0x27
+ 5684 1943 6F757400 		.string	"out"
+ 5685 1947 01       		.byte	0x1
+ 5686 1948 1002     		.value	0x210
+ 5687 194a B4000000 		.long	0xb4
+ 5688 194e 03       		.byte	0x3
+ 5689 194f 91       		.byte	0x91
+ 5690 1950 A87F     		.sleb128 -88
+ 5691 1952 26       		.uleb128 0x26
+ 5692 1953 00000000 		.long	.LASF372
+ 5693 1957 01       		.byte	0x1
+ 5694 1958 1002     		.value	0x210
+ 5695 195a 62000000 		.long	0x62
+ 5696 195e 03       		.byte	0x3
+ 5697 195f 91       		.byte	0x91
+ 5698 1960 A47F     		.sleb128 -92
+ 5699 1962 24       		.uleb128 0x24
+ 5700 1963 637600   		.string	"cv"
+ 5701 1966 01       		.byte	0x1
+ 5702 1967 1302     		.value	0x213
+ 5703 1969 68050000 		.long	0x568
+ 5704 196d 02       		.byte	0x2
+ 5705 196e 91       		.byte	0x91
+ 5706 196f 40       		.sleb128 -64
+ 5707 1970 28       		.uleb128 0x28
+ 5708 1971 00000000 		.long	.LASF360
+ 5709 1975 01       		.byte	0x1
+ 5710 1976 1402     		.value	0x214
+ 5711 1978 68050000 		.long	0x568
+ 5712 197c 02       		.byte	0x2
+ 5713 197d 91       		.byte	0x91
+ 5714 197e 50       		.sleb128 -48
+ 5715 197f 24       		.uleb128 0x24
+ 5716 1980 70696E00 		.string	"pin"
+ 5717 1984 01       		.byte	0x1
+ 5718 1985 1502     		.value	0x215
+ 5719 1987 88150000 		.long	0x1588
+ 5720 198b 02       		.byte	0x2
+ 5721 198c 91       		.byte	0x91
+ 5722 198d 60       		.sleb128 -32
+ 5723 198e 28       		.uleb128 0x28
+ 5724 198f 00000000 		.long	.LASF373
+
GAS LISTING /tmp/ccq6ONvw.s 			page 130
+
+
+ 5725 1993 01       		.byte	0x1
+ 5726 1994 1602     		.value	0x216
+ 5727 1996 93150000 		.long	0x1593
+ 5728 199a 02       		.byte	0x2
+ 5729 199b 91       		.byte	0x91
+ 5730 199c 68       		.sleb128 -24
+ 5731 199d 00       		.byte	0x0
+ 5732 199e 25       		.uleb128 0x25
+ 5733 199f 00000000 		.long	.LASF381
+ 5734 19a3 01       		.byte	0x1
+ 5735 19a4 2E02     		.value	0x22e
+ 5736 19a6 01       		.byte	0x1
+ 5737 19a7 7B000000 		.long	0x7b
+ 5738 19ab 00000000 		.quad	.LFB530
+ 5738      00000000 
+ 5739 19b3 00000000 		.quad	.LFE530
+ 5739      00000000 
+ 5740 19bb 00000000 		.long	.LLST22
+ 5741 19bf 3E1A0000 		.long	0x1a3e
+ 5742 19c3 26       		.uleb128 0x26
+ 5743 19c4 00000000 		.long	.LASF352
+ 5744 19c8 01       		.byte	0x1
+ 5745 19c9 2E02     		.value	0x22e
+ 5746 19cb DE030000 		.long	0x3de
+ 5747 19cf 03       		.byte	0x3
+ 5748 19d0 91       		.byte	0x91
+ 5749 19d1 B87F     		.sleb128 -72
+ 5750 19d3 27       		.uleb128 0x27
+ 5751 19d4 696E00   		.string	"in"
+ 5752 19d7 01       		.byte	0x1
+ 5753 19d8 2E02     		.value	0x22e
+ 5754 19da 1F040000 		.long	0x41f
+ 5755 19de 03       		.byte	0x3
+ 5756 19df 91       		.byte	0x91
+ 5757 19e0 B07F     		.sleb128 -80
+ 5758 19e2 27       		.uleb128 0x27
+ 5759 19e3 6F757400 		.string	"out"
+ 5760 19e7 01       		.byte	0x1
+ 5761 19e8 2E02     		.value	0x22e
+ 5762 19ea B4000000 		.long	0xb4
+ 5763 19ee 03       		.byte	0x3
+ 5764 19ef 91       		.byte	0x91
+ 5765 19f0 A87F     		.sleb128 -88
+ 5766 19f2 26       		.uleb128 0x26
+ 5767 19f3 00000000 		.long	.LASF372
+ 5768 19f7 01       		.byte	0x1
+ 5769 19f8 2E02     		.value	0x22e
+ 5770 19fa 62000000 		.long	0x62
+ 5771 19fe 03       		.byte	0x3
+ 5772 19ff 91       		.byte	0x91
+ 5773 1a00 A47F     		.sleb128 -92
+ 5774 1a02 24       		.uleb128 0x24
+ 5775 1a03 637600   		.string	"cv"
+ 5776 1a06 01       		.byte	0x1
+ 5777 1a07 3102     		.value	0x231
+ 5778 1a09 68050000 		.long	0x568
+ 5779 1a0d 02       		.byte	0x2
+
GAS LISTING /tmp/ccq6ONvw.s 			page 131
+
+
+ 5780 1a0e 91       		.byte	0x91
+ 5781 1a0f 40       		.sleb128 -64
+ 5782 1a10 28       		.uleb128 0x28
+ 5783 1a11 00000000 		.long	.LASF360
+ 5784 1a15 01       		.byte	0x1
+ 5785 1a16 3202     		.value	0x232
+ 5786 1a18 68050000 		.long	0x568
+ 5787 1a1c 02       		.byte	0x2
+ 5788 1a1d 91       		.byte	0x91
+ 5789 1a1e 50       		.sleb128 -48
+ 5790 1a1f 24       		.uleb128 0x24
+ 5791 1a20 70696E00 		.string	"pin"
+ 5792 1a24 01       		.byte	0x1
+ 5793 1a25 3302     		.value	0x233
+ 5794 1a27 88150000 		.long	0x1588
+ 5795 1a2b 02       		.byte	0x2
+ 5796 1a2c 91       		.byte	0x91
+ 5797 1a2d 60       		.sleb128 -32
+ 5798 1a2e 28       		.uleb128 0x28
+ 5799 1a2f 00000000 		.long	.LASF373
+ 5800 1a33 01       		.byte	0x1
+ 5801 1a34 3402     		.value	0x234
+ 5802 1a36 93150000 		.long	0x1593
+ 5803 1a3a 02       		.byte	0x2
+ 5804 1a3b 91       		.byte	0x91
+ 5805 1a3c 68       		.sleb128 -24
+ 5806 1a3d 00       		.byte	0x0
+ 5807 1a3e 25       		.uleb128 0x25
+ 5808 1a3f 00000000 		.long	.LASF382
+ 5809 1a43 01       		.byte	0x1
+ 5810 1a44 5102     		.value	0x251
+ 5811 1a46 01       		.byte	0x1
+ 5812 1a47 7B000000 		.long	0x7b
+ 5813 1a4b 00000000 		.quad	.LFB531
+ 5813      00000000 
+ 5814 1a53 00000000 		.quad	.LFE531
+ 5814      00000000 
+ 5815 1a5b 00000000 		.long	.LLST23
+ 5816 1a5f DE1A0000 		.long	0x1ade
+ 5817 1a63 26       		.uleb128 0x26
+ 5818 1a64 00000000 		.long	.LASF352
+ 5819 1a68 01       		.byte	0x1
+ 5820 1a69 5102     		.value	0x251
+ 5821 1a6b DE030000 		.long	0x3de
+ 5822 1a6f 03       		.byte	0x3
+ 5823 1a70 91       		.byte	0x91
+ 5824 1a71 B87F     		.sleb128 -72
+ 5825 1a73 27       		.uleb128 0x27
+ 5826 1a74 696E00   		.string	"in"
+ 5827 1a77 01       		.byte	0x1
+ 5828 1a78 5102     		.value	0x251
+ 5829 1a7a 1F040000 		.long	0x41f
+ 5830 1a7e 03       		.byte	0x3
+ 5831 1a7f 91       		.byte	0x91
+ 5832 1a80 B07F     		.sleb128 -80
+ 5833 1a82 27       		.uleb128 0x27
+ 5834 1a83 6F757400 		.string	"out"
+
GAS LISTING /tmp/ccq6ONvw.s 			page 132
+
+
+ 5835 1a87 01       		.byte	0x1
+ 5836 1a88 5102     		.value	0x251
+ 5837 1a8a B4000000 		.long	0xb4
+ 5838 1a8e 03       		.byte	0x3
+ 5839 1a8f 91       		.byte	0x91
+ 5840 1a90 A87F     		.sleb128 -88
+ 5841 1a92 26       		.uleb128 0x26
+ 5842 1a93 00000000 		.long	.LASF372
+ 5843 1a97 01       		.byte	0x1
+ 5844 1a98 5102     		.value	0x251
+ 5845 1a9a 62000000 		.long	0x62
+ 5846 1a9e 03       		.byte	0x3
+ 5847 1a9f 91       		.byte	0x91
+ 5848 1aa0 A47F     		.sleb128 -92
+ 5849 1aa2 24       		.uleb128 0x24
+ 5850 1aa3 637600   		.string	"cv"
+ 5851 1aa6 01       		.byte	0x1
+ 5852 1aa7 5402     		.value	0x254
+ 5853 1aa9 68050000 		.long	0x568
+ 5854 1aad 02       		.byte	0x2
+ 5855 1aae 91       		.byte	0x91
+ 5856 1aaf 40       		.sleb128 -64
+ 5857 1ab0 28       		.uleb128 0x28
+ 5858 1ab1 00000000 		.long	.LASF360
+ 5859 1ab5 01       		.byte	0x1
+ 5860 1ab6 5502     		.value	0x255
+ 5861 1ab8 68050000 		.long	0x568
+ 5862 1abc 02       		.byte	0x2
+ 5863 1abd 91       		.byte	0x91
+ 5864 1abe 50       		.sleb128 -48
+ 5865 1abf 24       		.uleb128 0x24
+ 5866 1ac0 70696E00 		.string	"pin"
+ 5867 1ac4 01       		.byte	0x1
+ 5868 1ac5 5602     		.value	0x256
+ 5869 1ac7 88150000 		.long	0x1588
+ 5870 1acb 02       		.byte	0x2
+ 5871 1acc 91       		.byte	0x91
+ 5872 1acd 60       		.sleb128 -32
+ 5873 1ace 28       		.uleb128 0x28
+ 5874 1acf 00000000 		.long	.LASF373
+ 5875 1ad3 01       		.byte	0x1
+ 5876 1ad4 5702     		.value	0x257
+ 5877 1ad6 93150000 		.long	0x1593
+ 5878 1ada 02       		.byte	0x2
+ 5879 1adb 91       		.byte	0x91
+ 5880 1adc 68       		.sleb128 -24
+ 5881 1add 00       		.byte	0x0
+ 5882 1ade 25       		.uleb128 0x25
+ 5883 1adf 00000000 		.long	.LASF383
+ 5884 1ae3 01       		.byte	0x1
+ 5885 1ae4 6F02     		.value	0x26f
+ 5886 1ae6 01       		.byte	0x1
+ 5887 1ae7 7B000000 		.long	0x7b
+ 5888 1aeb 00000000 		.quad	.LFB532
+ 5888      00000000 
+ 5889 1af3 00000000 		.quad	.LFE532
+ 5889      00000000 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 133
+
+
+ 5890 1afb 00000000 		.long	.LLST24
+ 5891 1aff 3F1B0000 		.long	0x1b3f
+ 5892 1b03 26       		.uleb128 0x26
+ 5893 1b04 00000000 		.long	.LASF352
+ 5894 1b08 01       		.byte	0x1
+ 5895 1b09 6F02     		.value	0x26f
+ 5896 1b0b DE030000 		.long	0x3de
+ 5897 1b0f 02       		.byte	0x2
+ 5898 1b10 91       		.byte	0x91
+ 5899 1b11 58       		.sleb128 -40
+ 5900 1b12 27       		.uleb128 0x27
+ 5901 1b13 696E00   		.string	"in"
+ 5902 1b16 01       		.byte	0x1
+ 5903 1b17 6F02     		.value	0x26f
+ 5904 1b19 1F040000 		.long	0x41f
+ 5905 1b1d 02       		.byte	0x2
+ 5906 1b1e 91       		.byte	0x91
+ 5907 1b1f 50       		.sleb128 -48
+ 5908 1b20 27       		.uleb128 0x27
+ 5909 1b21 6F757400 		.string	"out"
+ 5910 1b25 01       		.byte	0x1
+ 5911 1b26 6F02     		.value	0x26f
+ 5912 1b28 B4000000 		.long	0xb4
+ 5913 1b2c 02       		.byte	0x2
+ 5914 1b2d 91       		.byte	0x91
+ 5915 1b2e 48       		.sleb128 -56
+ 5916 1b2f 26       		.uleb128 0x26
+ 5917 1b30 00000000 		.long	.LASF372
+ 5918 1b34 01       		.byte	0x1
+ 5919 1b35 6F02     		.value	0x26f
+ 5920 1b37 62000000 		.long	0x62
+ 5921 1b3b 02       		.byte	0x2
+ 5922 1b3c 91       		.byte	0x91
+ 5923 1b3d 44       		.sleb128 -60
+ 5924 1b3e 00       		.byte	0x0
+ 5925 1b3f 25       		.uleb128 0x25
+ 5926 1b40 00000000 		.long	.LASF384
+ 5927 1b44 01       		.byte	0x1
+ 5928 1b45 7D02     		.value	0x27d
+ 5929 1b47 01       		.byte	0x1
+ 5930 1b48 7B000000 		.long	0x7b
+ 5931 1b4c 00000000 		.quad	.LFB533
+ 5931      00000000 
+ 5932 1b54 00000000 		.quad	.LFE533
+ 5932      00000000 
+ 5933 1b5c 00000000 		.long	.LLST25
+ 5934 1b60 C81B0000 		.long	0x1bc8
+ 5935 1b64 26       		.uleb128 0x26
+ 5936 1b65 00000000 		.long	.LASF352
+ 5937 1b69 01       		.byte	0x1
+ 5938 1b6a 7D02     		.value	0x27d
+ 5939 1b6c DE030000 		.long	0x3de
+ 5940 1b70 02       		.byte	0x2
+ 5941 1b71 91       		.byte	0x91
+ 5942 1b72 68       		.sleb128 -24
+ 5943 1b73 27       		.uleb128 0x27
+ 5944 1b74 696E00   		.string	"in"
+
GAS LISTING /tmp/ccq6ONvw.s 			page 134
+
+
+ 5945 1b77 01       		.byte	0x1
+ 5946 1b78 7D02     		.value	0x27d
+ 5947 1b7a 1F040000 		.long	0x41f
+ 5948 1b7e 02       		.byte	0x2
+ 5949 1b7f 91       		.byte	0x91
+ 5950 1b80 60       		.sleb128 -32
+ 5951 1b81 27       		.uleb128 0x27
+ 5952 1b82 6F757400 		.string	"out"
+ 5953 1b86 01       		.byte	0x1
+ 5954 1b87 7D02     		.value	0x27d
+ 5955 1b89 B4000000 		.long	0xb4
+ 5956 1b8d 02       		.byte	0x2
+ 5957 1b8e 91       		.byte	0x91
+ 5958 1b8f 58       		.sleb128 -40
+ 5959 1b90 26       		.uleb128 0x26
+ 5960 1b91 00000000 		.long	.LASF372
+ 5961 1b95 01       		.byte	0x1
+ 5962 1b96 7D02     		.value	0x27d
+ 5963 1b98 62000000 		.long	0x62
+ 5964 1b9c 02       		.byte	0x2
+ 5965 1b9d 91       		.byte	0x91
+ 5966 1b9e 54       		.sleb128 -44
+ 5967 1b9f 23       		.uleb128 0x23
+ 5968 1ba0 00000000 		.long	.LASF356
+ 5969 1ba4 D81B0000 		.long	0x1bd8
+ 5970 1ba8 01       		.byte	0x1
+ 5971 1ba9 09       		.byte	0x9
+ 5972 1baa 03       		.byte	0x3
+ 5973 1bab 00000000 		.quad	__PRETTY_FUNCTION__.6943
+ 5973      00000000 
+ 5974 1bb3 23       		.uleb128 0x23
+ 5975 1bb4 00000000 		.long	.LASF357
+ 5976 1bb8 DD1B0000 		.long	0x1bdd
+ 5977 1bbc 01       		.byte	0x1
+ 5978 1bbd 09       		.byte	0x9
+ 5979 1bbe 03       		.byte	0x3
+ 5980 1bbf 00000000 		.quad	__func__.6944
+ 5980      00000000 
+ 5981 1bc7 00       		.byte	0x0
+ 5982 1bc8 16       		.uleb128 0x16
+ 5983 1bc9 C1000000 		.long	0xc1
+ 5984 1bcd D81B0000 		.long	0x1bd8
+ 5985 1bd1 17       		.uleb128 0x17
+ 5986 1bd2 B1000000 		.long	0xb1
+ 5987 1bd6 14       		.byte	0x14
+ 5988 1bd7 00       		.byte	0x0
+ 5989 1bd8 0B       		.uleb128 0xb
+ 5990 1bd9 C81B0000 		.long	0x1bc8
+ 5991 1bdd 0B       		.uleb128 0xb
+ 5992 1bde C81B0000 		.long	0x1bc8
+ 5993 1be2 25       		.uleb128 0x25
+ 5994 1be3 00000000 		.long	.LASF385
+ 5995 1be7 01       		.byte	0x1
+ 5996 1be8 8402     		.value	0x284
+ 5997 1bea 01       		.byte	0x1
+ 5998 1beb 7B000000 		.long	0x7b
+ 5999 1bef 00000000 		.quad	.LFB534
+
GAS LISTING /tmp/ccq6ONvw.s 			page 135
+
+
+ 5999      00000000 
+ 6000 1bf7 00000000 		.quad	.LFE534
+ 6000      00000000 
+ 6001 1bff 00000000 		.long	.LLST26
+ 6002 1c03 6B1C0000 		.long	0x1c6b
+ 6003 1c07 26       		.uleb128 0x26
+ 6004 1c08 00000000 		.long	.LASF352
+ 6005 1c0c 01       		.byte	0x1
+ 6006 1c0d 8402     		.value	0x284
+ 6007 1c0f DE030000 		.long	0x3de
+ 6008 1c13 02       		.byte	0x2
+ 6009 1c14 91       		.byte	0x91
+ 6010 1c15 68       		.sleb128 -24
+ 6011 1c16 27       		.uleb128 0x27
+ 6012 1c17 696E00   		.string	"in"
+ 6013 1c1a 01       		.byte	0x1
+ 6014 1c1b 8402     		.value	0x284
+ 6015 1c1d 1F040000 		.long	0x41f
+ 6016 1c21 02       		.byte	0x2
+ 6017 1c22 91       		.byte	0x91
+ 6018 1c23 60       		.sleb128 -32
+ 6019 1c24 27       		.uleb128 0x27
+ 6020 1c25 6F757400 		.string	"out"
+ 6021 1c29 01       		.byte	0x1
+ 6022 1c2a 8402     		.value	0x284
+ 6023 1c2c B4000000 		.long	0xb4
+ 6024 1c30 02       		.byte	0x2
+ 6025 1c31 91       		.byte	0x91
+ 6026 1c32 58       		.sleb128 -40
+ 6027 1c33 26       		.uleb128 0x26
+ 6028 1c34 00000000 		.long	.LASF372
+ 6029 1c38 01       		.byte	0x1
+ 6030 1c39 8402     		.value	0x284
+ 6031 1c3b 62000000 		.long	0x62
+ 6032 1c3f 02       		.byte	0x2
+ 6033 1c40 91       		.byte	0x91
+ 6034 1c41 54       		.sleb128 -44
+ 6035 1c42 23       		.uleb128 0x23
+ 6036 1c43 00000000 		.long	.LASF356
+ 6037 1c47 6B1C0000 		.long	0x1c6b
+ 6038 1c4b 01       		.byte	0x1
+ 6039 1c4c 09       		.byte	0x9
+ 6040 1c4d 03       		.byte	0x3
+ 6041 1c4e 00000000 		.quad	__PRETTY_FUNCTION__.6953
+ 6041      00000000 
+ 6042 1c56 23       		.uleb128 0x23
+ 6043 1c57 00000000 		.long	.LASF357
+ 6044 1c5b 701C0000 		.long	0x1c70
+ 6045 1c5f 01       		.byte	0x1
+ 6046 1c60 09       		.byte	0x9
+ 6047 1c61 03       		.byte	0x3
+ 6048 1c62 00000000 		.quad	__func__.6954
+ 6048      00000000 
+ 6049 1c6a 00       		.byte	0x0
+ 6050 1c6b 0B       		.uleb128 0xb
+ 6051 1c6c C81B0000 		.long	0x1bc8
+ 6052 1c70 0B       		.uleb128 0xb
+
GAS LISTING /tmp/ccq6ONvw.s 			page 136
+
+
+ 6053 1c71 C81B0000 		.long	0x1bc8
+ 6054 1c75 25       		.uleb128 0x25
+ 6055 1c76 00000000 		.long	.LASF386
+ 6056 1c7a 01       		.byte	0x1
+ 6057 1c7b A702     		.value	0x2a7
+ 6058 1c7d 01       		.byte	0x1
+ 6059 1c7e 7B000000 		.long	0x7b
+ 6060 1c82 00000000 		.quad	.LFB535
+ 6060      00000000 
+ 6061 1c8a 00000000 		.quad	.LFE535
+ 6061      00000000 
+ 6062 1c92 00000000 		.long	.LLST27
+ 6063 1c96 F01C0000 		.long	0x1cf0
+ 6064 1c9a 26       		.uleb128 0x26
+ 6065 1c9b 00000000 		.long	.LASF387
+ 6066 1c9f 01       		.byte	0x1
+ 6067 1ca0 A702     		.value	0x2a7
+ 6068 1ca2 F01C0000 		.long	0x1cf0
+ 6069 1ca6 02       		.byte	0x2
+ 6070 1ca7 91       		.byte	0x91
+ 6071 1ca8 58       		.sleb128 -40
+ 6072 1ca9 26       		.uleb128 0x26
+ 6073 1caa 00000000 		.long	.LASF46
+ 6074 1cae 01       		.byte	0x1
+ 6075 1caf A802     		.value	0x2a8
+ 6076 1cb1 F61C0000 		.long	0x1cf6
+ 6077 1cb5 02       		.byte	0x2
+ 6078 1cb6 91       		.byte	0x91
+ 6079 1cb7 50       		.sleb128 -48
+ 6080 1cb8 24       		.uleb128 0x24
+ 6081 1cb9 6F626A00 		.string	"obj"
+ 6082 1cbd 01       		.byte	0x1
+ 6083 1cbe AA02     		.value	0x2aa
+ 6084 1cc0 011D0000 		.long	0x1d01
+ 6085 1cc4 02       		.byte	0x2
+ 6086 1cc5 91       		.byte	0x91
+ 6087 1cc6 68       		.sleb128 -24
+ 6088 1cc7 23       		.uleb128 0x23
+ 6089 1cc8 00000000 		.long	.LASF356
+ 6090 1ccc 171D0000 		.long	0x1d17
+ 6091 1cd0 01       		.byte	0x1
+ 6092 1cd1 09       		.byte	0x9
+ 6093 1cd2 03       		.byte	0x3
+ 6094 1cd3 00000000 		.quad	__PRETTY_FUNCTION__.6963
+ 6094      00000000 
+ 6095 1cdb 23       		.uleb128 0x23
+ 6096 1cdc 00000000 		.long	.LASF357
+ 6097 1ce0 1C1D0000 		.long	0x1d1c
+ 6098 1ce4 01       		.byte	0x1
+ 6099 1ce5 09       		.byte	0x9
+ 6100 1ce6 03       		.byte	0x3
+ 6101 1ce7 00000000 		.quad	__func__.6964
+ 6101      00000000 
+ 6102 1cef 00       		.byte	0x0
+ 6103 1cf0 0A       		.uleb128 0xa
+ 6104 1cf1 08       		.byte	0x8
+ 6105 1cf2 DE030000 		.long	0x3de
+
GAS LISTING /tmp/ccq6ONvw.s 			page 137
+
+
+ 6106 1cf6 0A       		.uleb128 0xa
+ 6107 1cf7 08       		.byte	0x8
+ 6108 1cf8 FC1C0000 		.long	0x1cfc
+ 6109 1cfc 0B       		.uleb128 0xb
+ 6110 1cfd C3080000 		.long	0x8c3
+ 6111 1d01 0A       		.uleb128 0xa
+ 6112 1d02 08       		.byte	0x8
+ 6113 1d03 F9070000 		.long	0x7f9
+ 6114 1d07 16       		.uleb128 0x16
+ 6115 1d08 C1000000 		.long	0xc1
+ 6116 1d0c 171D0000 		.long	0x1d17
+ 6117 1d10 17       		.uleb128 0x17
+ 6118 1d11 B1000000 		.long	0xb1
+ 6119 1d15 12       		.byte	0x12
+ 6120 1d16 00       		.byte	0x0
+ 6121 1d17 0B       		.uleb128 0xb
+ 6122 1d18 071D0000 		.long	0x1d07
+ 6123 1d1c 0B       		.uleb128 0xb
+ 6124 1d1d 071D0000 		.long	0x1d07
+ 6125 1d21 25       		.uleb128 0x25
+ 6126 1d22 00000000 		.long	.LASF388
+ 6127 1d26 01       		.byte	0x1
+ 6128 1d27 B402     		.value	0x2b4
+ 6129 1d29 01       		.byte	0x1
+ 6130 1d2a 7B000000 		.long	0x7b
+ 6131 1d2e 00000000 		.quad	.LFB536
+ 6131      00000000 
+ 6132 1d36 00000000 		.quad	.LFE536
+ 6132      00000000 
+ 6133 1d3e 00000000 		.long	.LLST28
+ 6134 1d42 831D0000 		.long	0x1d83
+ 6135 1d46 26       		.uleb128 0x26
+ 6136 1d47 00000000 		.long	.LASF352
+ 6137 1d4b 01       		.byte	0x1
+ 6138 1d4c B402     		.value	0x2b4
+ 6139 1d4e DE030000 		.long	0x3de
+ 6140 1d52 02       		.byte	0x2
+ 6141 1d53 91       		.byte	0x91
+ 6142 1d54 58       		.sleb128 -40
+ 6143 1d55 26       		.uleb128 0x26
+ 6144 1d56 00000000 		.long	.LASF46
+ 6145 1d5a 01       		.byte	0x1
+ 6146 1d5b B502     		.value	0x2b5
+ 6147 1d5d F61C0000 		.long	0x1cf6
+ 6148 1d61 02       		.byte	0x2
+ 6149 1d62 91       		.byte	0x91
+ 6150 1d63 50       		.sleb128 -48
+ 6151 1d64 24       		.uleb128 0x24
+ 6152 1d65 64616400 		.string	"dad"
+ 6153 1d69 01       		.byte	0x1
+ 6154 1d6a B702     		.value	0x2b7
+ 6155 1d6c 831D0000 		.long	0x1d83
+ 6156 1d70 02       		.byte	0x2
+ 6157 1d71 91       		.byte	0x91
+ 6158 1d72 60       		.sleb128 -32
+ 6159 1d73 24       		.uleb128 0x24
+ 6160 1d74 61657300 		.string	"aes"
+
GAS LISTING /tmp/ccq6ONvw.s 			page 138
+
+
+ 6161 1d78 01       		.byte	0x1
+ 6162 1d79 B802     		.value	0x2b8
+ 6163 1d7b 011D0000 		.long	0x1d01
+ 6164 1d7f 02       		.byte	0x2
+ 6165 1d80 91       		.byte	0x91
+ 6166 1d81 68       		.sleb128 -24
+ 6167 1d82 00       		.byte	0x0
+ 6168 1d83 0A       		.uleb128 0xa
+ 6169 1d84 08       		.byte	0x8
+ 6170 1d85 54010000 		.long	0x154
+ 6171 1d89 25       		.uleb128 0x25
+ 6172 1d8a 00000000 		.long	.LASF389
+ 6173 1d8e 01       		.byte	0x1
+ 6174 1d8f CA02     		.value	0x2ca
+ 6175 1d91 01       		.byte	0x1
+ 6176 1d92 7B000000 		.long	0x7b
+ 6177 1d96 00000000 		.quad	.LFB537
+ 6177      00000000 
+ 6178 1d9e 00000000 		.quad	.LFE537
+ 6178      00000000 
+ 6179 1da6 00000000 		.long	.LLST29
+ 6180 1daa 041E0000 		.long	0x1e04
+ 6181 1dae 26       		.uleb128 0x26
+ 6182 1daf 00000000 		.long	.LASF387
+ 6183 1db3 01       		.byte	0x1
+ 6184 1db4 CA02     		.value	0x2ca
+ 6185 1db6 F01C0000 		.long	0x1cf0
+ 6186 1dba 02       		.byte	0x2
+ 6187 1dbb 91       		.byte	0x91
+ 6188 1dbc 58       		.sleb128 -40
+ 6189 1dbd 26       		.uleb128 0x26
+ 6190 1dbe 00000000 		.long	.LASF46
+ 6191 1dc2 01       		.byte	0x1
+ 6192 1dc3 CB02     		.value	0x2cb
+ 6193 1dc5 F61C0000 		.long	0x1cf6
+ 6194 1dc9 02       		.byte	0x2
+ 6195 1dca 91       		.byte	0x91
+ 6196 1dcb 50       		.sleb128 -48
+ 6197 1dcc 24       		.uleb128 0x24
+ 6198 1dcd 6F626A00 		.string	"obj"
+ 6199 1dd1 01       		.byte	0x1
+ 6200 1dd2 CD02     		.value	0x2cd
+ 6201 1dd4 041E0000 		.long	0x1e04
+ 6202 1dd8 02       		.byte	0x2
+ 6203 1dd9 91       		.byte	0x91
+ 6204 1dda 68       		.sleb128 -24
+ 6205 1ddb 23       		.uleb128 0x23
+ 6206 1ddc 00000000 		.long	.LASF356
+ 6207 1de0 1A1E0000 		.long	0x1e1a
+ 6208 1de4 01       		.byte	0x1
+ 6209 1de5 09       		.byte	0x9
+ 6210 1de6 03       		.byte	0x3
+ 6211 1de7 00000000 		.quad	__PRETTY_FUNCTION__.6990
+ 6211      00000000 
+ 6212 1def 23       		.uleb128 0x23
+ 6213 1df0 00000000 		.long	.LASF357
+ 6214 1df4 1F1E0000 		.long	0x1e1f
+
GAS LISTING /tmp/ccq6ONvw.s 			page 139
+
+
+ 6215 1df8 01       		.byte	0x1
+ 6216 1df9 09       		.byte	0x9
+ 6217 1dfa 03       		.byte	0x3
+ 6218 1dfb 00000000 		.quad	__func__.6991
+ 6218      00000000 
+ 6219 1e03 00       		.byte	0x0
+ 6220 1e04 0A       		.uleb128 0xa
+ 6221 1e05 08       		.byte	0x8
+ 6222 1e06 5B080000 		.long	0x85b
+ 6223 1e0a 16       		.uleb128 0x16
+ 6224 1e0b C1000000 		.long	0xc1
+ 6225 1e0f 1A1E0000 		.long	0x1e1a
+ 6226 1e13 17       		.uleb128 0x17
+ 6227 1e14 B1000000 		.long	0xb1
+ 6228 1e18 13       		.byte	0x13
+ 6229 1e19 00       		.byte	0x0
+ 6230 1e1a 0B       		.uleb128 0xb
+ 6231 1e1b 0A1E0000 		.long	0x1e0a
+ 6232 1e1f 0B       		.uleb128 0xb
+ 6233 1e20 0A1E0000 		.long	0x1e0a
+ 6234 1e24 25       		.uleb128 0x25
+ 6235 1e25 00000000 		.long	.LASF390
+ 6236 1e29 01       		.byte	0x1
+ 6237 1e2a D702     		.value	0x2d7
+ 6238 1e2c 01       		.byte	0x1
+ 6239 1e2d 7B000000 		.long	0x7b
+ 6240 1e31 00000000 		.quad	.LFB538
+ 6240      00000000 
+ 6241 1e39 00000000 		.quad	.LFE538
+ 6241      00000000 
+ 6242 1e41 00000000 		.long	.LLST30
+ 6243 1e45 861E0000 		.long	0x1e86
+ 6244 1e49 26       		.uleb128 0x26
+ 6245 1e4a 00000000 		.long	.LASF352
+ 6246 1e4e 01       		.byte	0x1
+ 6247 1e4f D702     		.value	0x2d7
+ 6248 1e51 DE030000 		.long	0x3de
+ 6249 1e55 02       		.byte	0x2
+ 6250 1e56 91       		.byte	0x91
+ 6251 1e57 58       		.sleb128 -40
+ 6252 1e58 26       		.uleb128 0x26
+ 6253 1e59 00000000 		.long	.LASF46
+ 6254 1e5d 01       		.byte	0x1
+ 6255 1e5e D802     		.value	0x2d8
+ 6256 1e60 F61C0000 		.long	0x1cf6
+ 6257 1e64 02       		.byte	0x2
+ 6258 1e65 91       		.byte	0x91
+ 6259 1e66 50       		.sleb128 -48
+ 6260 1e67 24       		.uleb128 0x24
+ 6261 1e68 64616400 		.string	"dad"
+ 6262 1e6c 01       		.byte	0x1
+ 6263 1e6d DA02     		.value	0x2da
+ 6264 1e6f 831D0000 		.long	0x1d83
+ 6265 1e73 02       		.byte	0x2
+ 6266 1e74 91       		.byte	0x91
+ 6267 1e75 60       		.sleb128 -32
+ 6268 1e76 28       		.uleb128 0x28
+
GAS LISTING /tmp/ccq6ONvw.s 			page 140
+
+
+ 6269 1e77 00000000 		.long	.LASF391
+ 6270 1e7b 01       		.byte	0x1
+ 6271 1e7c DB02     		.value	0x2db
+ 6272 1e7e 041E0000 		.long	0x1e04
+ 6273 1e82 02       		.byte	0x2
+ 6274 1e83 91       		.byte	0x91
+ 6275 1e84 68       		.sleb128 -24
+ 6276 1e85 00       		.byte	0x0
+ 6277 1e86 2A       		.uleb128 0x2a
+ 6278 1e87 01       		.byte	0x1
+ 6279 1e88 00000000 		.long	.LASF399
+ 6280 1e8c 01       		.byte	0x1
+ 6281 1e8d EC02     		.value	0x2ec
+ 6282 1e8f 01       		.byte	0x1
+ 6283 1e90 7B000000 		.long	0x7b
+ 6284 1e94 00000000 		.quad	.LFB539
+ 6284      00000000 
+ 6285 1e9c 00000000 		.quad	.LFE539
+ 6285      00000000 
+ 6286 1ea4 00000000 		.long	.LLST31
+ 6287 1ea8 311F0000 		.long	0x1f31
+ 6288 1eac 26       		.uleb128 0x26
+ 6289 1ead 00000000 		.long	.LASF392
+ 6290 1eb1 01       		.byte	0x1
+ 6291 1eb2 EC02     		.value	0x2ec
+ 6292 1eb4 311F0000 		.long	0x1f31
+ 6293 1eb8 02       		.byte	0x2
+ 6294 1eb9 91       		.byte	0x91
+ 6295 1eba 48       		.sleb128 -56
+ 6296 1ebb 26       		.uleb128 0x26
+ 6297 1ebc 00000000 		.long	.LASF393
+ 6298 1ec0 01       		.byte	0x1
+ 6299 1ec1 EC02     		.value	0x2ec
+ 6300 1ec3 9D080000 		.long	0x89d
+ 6301 1ec7 02       		.byte	0x2
+ 6302 1ec8 91       		.byte	0x91
+ 6303 1ec9 44       		.sleb128 -60
+ 6304 1eca 24       		.uleb128 0x24
+ 6305 1ecb 726300   		.string	"rc"
+ 6306 1ece 01       		.byte	0x1
+ 6307 1ecf EE02     		.value	0x2ee
+ 6308 1ed1 7B000000 		.long	0x7b
+ 6309 1ed5 02       		.byte	0x2
+ 6310 1ed6 91       		.byte	0x91
+ 6311 1ed7 6C       		.sleb128 -20
+ 6312 1ed8 28       		.uleb128 0x28
+ 6313 1ed9 00000000 		.long	.LASF46
+ 6314 1edd 01       		.byte	0x1
+ 6315 1ede EF02     		.value	0x2ef
+ 6316 1ee0 371F0000 		.long	0x1f37
+ 6317 1ee4 02       		.byte	0x2
+ 6318 1ee5 91       		.byte	0x91
+ 6319 1ee6 60       		.sleb128 -32
+ 6320 1ee7 23       		.uleb128 0x23
+ 6321 1ee8 00000000 		.long	.LASF356
+ 6322 1eec 4D1F0000 		.long	0x1f4d
+ 6323 1ef0 01       		.byte	0x1
+
GAS LISTING /tmp/ccq6ONvw.s 			page 141
+
+
+ 6324 1ef1 09       		.byte	0x9
+ 6325 1ef2 03       		.byte	0x3
+ 6326 1ef3 00000000 		.quad	__PRETTY_FUNCTION__.7018
+ 6326      00000000 
+ 6327 1efb 23       		.uleb128 0x23
+ 6328 1efc 00000000 		.long	.LASF357
+ 6329 1f00 521F0000 		.long	0x1f52
+ 6330 1f04 01       		.byte	0x1
+ 6331 1f05 09       		.byte	0x9
+ 6332 1f06 03       		.byte	0x3
+ 6333 1f07 00000000 		.quad	__func__.7019
+ 6333      00000000 
+ 6334 1f0f 29       		.uleb128 0x29
+ 6335 1f10 00000000 		.quad	.LBB5
+ 6335      00000000 
+ 6336 1f18 00000000 		.quad	.LBE5
+ 6336      00000000 
+ 6337 1f20 24       		.uleb128 0x24
+ 6338 1f21 6F626A00 		.string	"obj"
+ 6339 1f25 01       		.byte	0x1
+ 6340 1f26 0603     		.value	0x306
+ 6341 1f28 DE030000 		.long	0x3de
+ 6342 1f2c 02       		.byte	0x2
+ 6343 1f2d 91       		.byte	0x91
+ 6344 1f2e 58       		.sleb128 -40
+ 6345 1f2f 00       		.byte	0x0
+ 6346 1f30 00       		.byte	0x0
+ 6347 1f31 0A       		.uleb128 0xa
+ 6348 1f32 08       		.byte	0x8
+ 6349 1f33 831D0000 		.long	0x1d83
+ 6350 1f37 0A       		.uleb128 0xa
+ 6351 1f38 08       		.byte	0x8
+ 6352 1f39 C3080000 		.long	0x8c3
+ 6353 1f3d 16       		.uleb128 0x16
+ 6354 1f3e C1000000 		.long	0xc1
+ 6355 1f42 4D1F0000 		.long	0x1f4d
+ 6356 1f46 17       		.uleb128 0x17
+ 6357 1f47 B1000000 		.long	0xb1
+ 6358 1f4b 0E       		.byte	0xe
+ 6359 1f4c 00       		.byte	0x0
+ 6360 1f4d 0B       		.uleb128 0xb
+ 6361 1f4e 3D1F0000 		.long	0x1f3d
+ 6362 1f52 0B       		.uleb128 0xb
+ 6363 1f53 3D1F0000 		.long	0x1f3d
+ 6364 1f57 28       		.uleb128 0x28
+ 6365 1f58 00000000 		.long	.LASF394
+ 6366 1f5c 01       		.byte	0x1
+ 6367 1f5d 8A02     		.value	0x28a
+ 6368 1f5f 87020000 		.long	0x287
+ 6369 1f63 09       		.byte	0x9
+ 6370 1f64 03       		.byte	0x3
+ 6371 1f65 00000000 		.quad	KCipherVec_vt_v1
+ 6371      00000000 
+ 6372 1f6d 16       		.uleb128 0x16
+ 6373 1f6e C1000000 		.long	0xc1
+ 6374 1f72 7D1F0000 		.long	0x1f7d
+ 6375 1f76 17       		.uleb128 0x17
+
GAS LISTING /tmp/ccq6ONvw.s 			page 142
+
+
+ 6376 1f77 B1000000 		.long	0xb1
+ 6377 1f7b 0B       		.byte	0xb
+ 6378 1f7c 00       		.byte	0x0
+ 6379 1f7d 2B       		.uleb128 0x2b
+ 6380 1f7e 00000000 		.long	.LASF400
+ 6381 1f82 01       		.byte	0x1
+ 6382 1f83 38       		.byte	0x38
+ 6383 1f84 931F0000 		.long	0x1f93
+ 6384 1f88 01       		.byte	0x1
+ 6385 1f89 09       		.byte	0x9
+ 6386 1f8a 03       		.byte	0x3
+ 6387 1f8b 00000000 		.quad	KCipherVecClassName
+ 6387      00000000 
+ 6388 1f93 0B       		.uleb128 0xb
+ 6389 1f94 6D1F0000 		.long	0x1f6d
+ 6390 1f98 00       		.byte	0x0
+ 6391              		.section	.debug_abbrev
+ 6392 0000 01       		.uleb128 0x1
+ 6393 0001 11       		.uleb128 0x11
+ 6394 0002 01       		.byte	0x1
+ 6395 0003 25       		.uleb128 0x25
+ 6396 0004 0E       		.uleb128 0xe
+ 6397 0005 13       		.uleb128 0x13
+ 6398 0006 0B       		.uleb128 0xb
+ 6399 0007 03       		.uleb128 0x3
+ 6400 0008 0E       		.uleb128 0xe
+ 6401 0009 1B       		.uleb128 0x1b
+ 6402 000a 0E       		.uleb128 0xe
+ 6403 000b 11       		.uleb128 0x11
+ 6404 000c 01       		.uleb128 0x1
+ 6405 000d 12       		.uleb128 0x12
+ 6406 000e 01       		.uleb128 0x1
+ 6407 000f 10       		.uleb128 0x10
+ 6408 0010 06       		.uleb128 0x6
+ 6409 0011 00       		.byte	0x0
+ 6410 0012 00       		.byte	0x0
+ 6411 0013 02       		.uleb128 0x2
+ 6412 0014 24       		.uleb128 0x24
+ 6413 0015 00       		.byte	0x0
+ 6414 0016 0B       		.uleb128 0xb
+ 6415 0017 0B       		.uleb128 0xb
+ 6416 0018 3E       		.uleb128 0x3e
+ 6417 0019 0B       		.uleb128 0xb
+ 6418 001a 03       		.uleb128 0x3
+ 6419 001b 0E       		.uleb128 0xe
+ 6420 001c 00       		.byte	0x0
+ 6421 001d 00       		.byte	0x0
+ 6422 001e 03       		.uleb128 0x3
+ 6423 001f 24       		.uleb128 0x24
+ 6424 0020 00       		.byte	0x0
+ 6425 0021 0B       		.uleb128 0xb
+ 6426 0022 0B       		.uleb128 0xb
+ 6427 0023 3E       		.uleb128 0x3e
+ 6428 0024 0B       		.uleb128 0xb
+ 6429 0025 03       		.uleb128 0x3
+ 6430 0026 08       		.uleb128 0x8
+ 6431 0027 00       		.byte	0x0
+
GAS LISTING /tmp/ccq6ONvw.s 			page 143
+
+
+ 6432 0028 00       		.byte	0x0
+ 6433 0029 04       		.uleb128 0x4
+ 6434 002a 16       		.uleb128 0x16
+ 6435 002b 00       		.byte	0x0
+ 6436 002c 03       		.uleb128 0x3
+ 6437 002d 0E       		.uleb128 0xe
+ 6438 002e 3A       		.uleb128 0x3a
+ 6439 002f 0B       		.uleb128 0xb
+ 6440 0030 3B       		.uleb128 0x3b
+ 6441 0031 0B       		.uleb128 0xb
+ 6442 0032 49       		.uleb128 0x49
+ 6443 0033 13       		.uleb128 0x13
+ 6444 0034 00       		.byte	0x0
+ 6445 0035 00       		.byte	0x0
+ 6446 0036 05       		.uleb128 0x5
+ 6447 0037 13       		.uleb128 0x13
+ 6448 0038 01       		.byte	0x1
+ 6449 0039 03       		.uleb128 0x3
+ 6450 003a 0E       		.uleb128 0xe
+ 6451 003b 0B       		.uleb128 0xb
+ 6452 003c 0B       		.uleb128 0xb
+ 6453 003d 3A       		.uleb128 0x3a
+ 6454 003e 0B       		.uleb128 0xb
+ 6455 003f 3B       		.uleb128 0x3b
+ 6456 0040 0B       		.uleb128 0xb
+ 6457 0041 01       		.uleb128 0x1
+ 6458 0042 13       		.uleb128 0x13
+ 6459 0043 00       		.byte	0x0
+ 6460 0044 00       		.byte	0x0
+ 6461 0045 06       		.uleb128 0x6
+ 6462 0046 0D       		.uleb128 0xd
+ 6463 0047 00       		.byte	0x0
+ 6464 0048 03       		.uleb128 0x3
+ 6465 0049 0E       		.uleb128 0xe
+ 6466 004a 3A       		.uleb128 0x3a
+ 6467 004b 0B       		.uleb128 0xb
+ 6468 004c 3B       		.uleb128 0x3b
+ 6469 004d 0B       		.uleb128 0xb
+ 6470 004e 49       		.uleb128 0x49
+ 6471 004f 13       		.uleb128 0x13
+ 6472 0050 38       		.uleb128 0x38
+ 6473 0051 0A       		.uleb128 0xa
+ 6474 0052 00       		.byte	0x0
+ 6475 0053 00       		.byte	0x0
+ 6476 0054 07       		.uleb128 0x7
+ 6477 0055 35       		.uleb128 0x35
+ 6478 0056 00       		.byte	0x0
+ 6479 0057 49       		.uleb128 0x49
+ 6480 0058 13       		.uleb128 0x13
+ 6481 0059 00       		.byte	0x0
+ 6482 005a 00       		.byte	0x0
+ 6483 005b 08       		.uleb128 0x8
+ 6484 005c 24       		.uleb128 0x24
+ 6485 005d 00       		.byte	0x0
+ 6486 005e 0B       		.uleb128 0xb
+ 6487 005f 0B       		.uleb128 0xb
+ 6488 0060 3E       		.uleb128 0x3e
+
GAS LISTING /tmp/ccq6ONvw.s 			page 144
+
+
+ 6489 0061 0B       		.uleb128 0xb
+ 6490 0062 00       		.byte	0x0
+ 6491 0063 00       		.byte	0x0
+ 6492 0064 09       		.uleb128 0x9
+ 6493 0065 0F       		.uleb128 0xf
+ 6494 0066 00       		.byte	0x0
+ 6495 0067 0B       		.uleb128 0xb
+ 6496 0068 0B       		.uleb128 0xb
+ 6497 0069 00       		.byte	0x0
+ 6498 006a 00       		.byte	0x0
+ 6499 006b 0A       		.uleb128 0xa
+ 6500 006c 0F       		.uleb128 0xf
+ 6501 006d 00       		.byte	0x0
+ 6502 006e 0B       		.uleb128 0xb
+ 6503 006f 0B       		.uleb128 0xb
+ 6504 0070 49       		.uleb128 0x49
+ 6505 0071 13       		.uleb128 0x13
+ 6506 0072 00       		.byte	0x0
+ 6507 0073 00       		.byte	0x0
+ 6508 0074 0B       		.uleb128 0xb
+ 6509 0075 26       		.uleb128 0x26
+ 6510 0076 00       		.byte	0x0
+ 6511 0077 49       		.uleb128 0x49
+ 6512 0078 13       		.uleb128 0x13
+ 6513 0079 00       		.byte	0x0
+ 6514 007a 00       		.byte	0x0
+ 6515 007b 0C       		.uleb128 0xc
+ 6516 007c 04       		.uleb128 0x4
+ 6517 007d 01       		.byte	0x1
+ 6518 007e 0B       		.uleb128 0xb
+ 6519 007f 0B       		.uleb128 0xb
+ 6520 0080 3A       		.uleb128 0x3a
+ 6521 0081 0B       		.uleb128 0xb
+ 6522 0082 3B       		.uleb128 0x3b
+ 6523 0083 0B       		.uleb128 0xb
+ 6524 0084 01       		.uleb128 0x1
+ 6525 0085 13       		.uleb128 0x13
+ 6526 0086 00       		.byte	0x0
+ 6527 0087 00       		.byte	0x0
+ 6528 0088 0D       		.uleb128 0xd
+ 6529 0089 28       		.uleb128 0x28
+ 6530 008a 00       		.byte	0x0
+ 6531 008b 03       		.uleb128 0x3
+ 6532 008c 0E       		.uleb128 0xe
+ 6533 008d 1C       		.uleb128 0x1c
+ 6534 008e 0D       		.uleb128 0xd
+ 6535 008f 00       		.byte	0x0
+ 6536 0090 00       		.byte	0x0
+ 6537 0091 0E       		.uleb128 0xe
+ 6538 0092 0D       		.uleb128 0xd
+ 6539 0093 00       		.byte	0x0
+ 6540 0094 03       		.uleb128 0x3
+ 6541 0095 08       		.uleb128 0x8
+ 6542 0096 3A       		.uleb128 0x3a
+ 6543 0097 0B       		.uleb128 0xb
+ 6544 0098 3B       		.uleb128 0x3b
+ 6545 0099 0B       		.uleb128 0xb
+
GAS LISTING /tmp/ccq6ONvw.s 			page 145
+
+
+ 6546 009a 49       		.uleb128 0x49
+ 6547 009b 13       		.uleb128 0x13
+ 6548 009c 38       		.uleb128 0x38
+ 6549 009d 0A       		.uleb128 0xa
+ 6550 009e 00       		.byte	0x0
+ 6551 009f 00       		.byte	0x0
+ 6552 00a0 0F       		.uleb128 0xf
+ 6553 00a1 15       		.uleb128 0x15
+ 6554 00a2 01       		.byte	0x1
+ 6555 00a3 27       		.uleb128 0x27
+ 6556 00a4 0C       		.uleb128 0xc
+ 6557 00a5 01       		.uleb128 0x1
+ 6558 00a6 13       		.uleb128 0x13
+ 6559 00a7 00       		.byte	0x0
+ 6560 00a8 00       		.byte	0x0
+ 6561 00a9 10       		.uleb128 0x10
+ 6562 00aa 05       		.uleb128 0x5
+ 6563 00ab 00       		.byte	0x0
+ 6564 00ac 49       		.uleb128 0x49
+ 6565 00ad 13       		.uleb128 0x13
+ 6566 00ae 00       		.byte	0x0
+ 6567 00af 00       		.byte	0x0
+ 6568 00b0 11       		.uleb128 0x11
+ 6569 00b1 15       		.uleb128 0x15
+ 6570 00b2 01       		.byte	0x1
+ 6571 00b3 27       		.uleb128 0x27
+ 6572 00b4 0C       		.uleb128 0xc
+ 6573 00b5 49       		.uleb128 0x49
+ 6574 00b6 13       		.uleb128 0x13
+ 6575 00b7 01       		.uleb128 0x1
+ 6576 00b8 13       		.uleb128 0x13
+ 6577 00b9 00       		.byte	0x0
+ 6578 00ba 00       		.byte	0x0
+ 6579 00bb 12       		.uleb128 0x12
+ 6580 00bc 26       		.uleb128 0x26
+ 6581 00bd 00       		.byte	0x0
+ 6582 00be 00       		.byte	0x0
+ 6583 00bf 00       		.byte	0x0
+ 6584 00c0 13       		.uleb128 0x13
+ 6585 00c1 17       		.uleb128 0x17
+ 6586 00c2 01       		.byte	0x1
+ 6587 00c3 03       		.uleb128 0x3
+ 6588 00c4 0E       		.uleb128 0xe
+ 6589 00c5 0B       		.uleb128 0xb
+ 6590 00c6 0B       		.uleb128 0xb
+ 6591 00c7 3A       		.uleb128 0x3a
+ 6592 00c8 0B       		.uleb128 0xb
+ 6593 00c9 3B       		.uleb128 0x3b
+ 6594 00ca 0B       		.uleb128 0xb
+ 6595 00cb 01       		.uleb128 0x1
+ 6596 00cc 13       		.uleb128 0x13
+ 6597 00cd 00       		.byte	0x0
+ 6598 00ce 00       		.byte	0x0
+ 6599 00cf 14       		.uleb128 0x14
+ 6600 00d0 0D       		.uleb128 0xd
+ 6601 00d1 00       		.byte	0x0
+ 6602 00d2 03       		.uleb128 0x3
+
GAS LISTING /tmp/ccq6ONvw.s 			page 146
+
+
+ 6603 00d3 0E       		.uleb128 0xe
+ 6604 00d4 3A       		.uleb128 0x3a
+ 6605 00d5 0B       		.uleb128 0xb
+ 6606 00d6 3B       		.uleb128 0x3b
+ 6607 00d7 0B       		.uleb128 0xb
+ 6608 00d8 49       		.uleb128 0x49
+ 6609 00d9 13       		.uleb128 0x13
+ 6610 00da 00       		.byte	0x0
+ 6611 00db 00       		.byte	0x0
+ 6612 00dc 15       		.uleb128 0x15
+ 6613 00dd 0D       		.uleb128 0xd
+ 6614 00de 00       		.byte	0x0
+ 6615 00df 03       		.uleb128 0x3
+ 6616 00e0 08       		.uleb128 0x8
+ 6617 00e1 3A       		.uleb128 0x3a
+ 6618 00e2 0B       		.uleb128 0xb
+ 6619 00e3 3B       		.uleb128 0x3b
+ 6620 00e4 0B       		.uleb128 0xb
+ 6621 00e5 49       		.uleb128 0x49
+ 6622 00e6 13       		.uleb128 0x13
+ 6623 00e7 00       		.byte	0x0
+ 6624 00e8 00       		.byte	0x0
+ 6625 00e9 16       		.uleb128 0x16
+ 6626 00ea 01       		.uleb128 0x1
+ 6627 00eb 01       		.byte	0x1
+ 6628 00ec 49       		.uleb128 0x49
+ 6629 00ed 13       		.uleb128 0x13
+ 6630 00ee 01       		.uleb128 0x1
+ 6631 00ef 13       		.uleb128 0x13
+ 6632 00f0 00       		.byte	0x0
+ 6633 00f1 00       		.byte	0x0
+ 6634 00f2 17       		.uleb128 0x17
+ 6635 00f3 21       		.uleb128 0x21
+ 6636 00f4 00       		.byte	0x0
+ 6637 00f5 49       		.uleb128 0x49
+ 6638 00f6 13       		.uleb128 0x13
+ 6639 00f7 2F       		.uleb128 0x2f
+ 6640 00f8 0B       		.uleb128 0xb
+ 6641 00f9 00       		.byte	0x0
+ 6642 00fa 00       		.byte	0x0
+ 6643 00fb 18       		.uleb128 0x18
+ 6644 00fc 01       		.uleb128 0x1
+ 6645 00fd 01       		.byte	0x1
+ 6646 00fe 8742     		.uleb128 0x2107
+ 6647 0100 0C       		.uleb128 0xc
+ 6648 0101 49       		.uleb128 0x49
+ 6649 0102 13       		.uleb128 0x13
+ 6650 0103 01       		.uleb128 0x1
+ 6651 0104 13       		.uleb128 0x13
+ 6652 0105 00       		.byte	0x0
+ 6653 0106 00       		.byte	0x0
+ 6654 0107 19       		.uleb128 0x19
+ 6655 0108 15       		.uleb128 0x15
+ 6656 0109 01       		.byte	0x1
+ 6657 010a 49       		.uleb128 0x49
+ 6658 010b 13       		.uleb128 0x13
+ 6659 010c 01       		.uleb128 0x1
+
GAS LISTING /tmp/ccq6ONvw.s 			page 147
+
+
+ 6660 010d 13       		.uleb128 0x13
+ 6661 010e 00       		.byte	0x0
+ 6662 010f 00       		.byte	0x0
+ 6663 0110 1A       		.uleb128 0x1a
+ 6664 0111 18       		.uleb128 0x18
+ 6665 0112 00       		.byte	0x0
+ 6666 0113 00       		.byte	0x0
+ 6667 0114 00       		.byte	0x0
+ 6668 0115 1B       		.uleb128 0x1b
+ 6669 0116 13       		.uleb128 0x13
+ 6670 0117 01       		.byte	0x1
+ 6671 0118 03       		.uleb128 0x3
+ 6672 0119 0E       		.uleb128 0xe
+ 6673 011a 0B       		.uleb128 0xb
+ 6674 011b 05       		.uleb128 0x5
+ 6675 011c 3A       		.uleb128 0x3a
+ 6676 011d 0B       		.uleb128 0xb
+ 6677 011e 3B       		.uleb128 0x3b
+ 6678 011f 0B       		.uleb128 0xb
+ 6679 0120 01       		.uleb128 0x1
+ 6680 0121 13       		.uleb128 0x13
+ 6681 0122 00       		.byte	0x0
+ 6682 0123 00       		.byte	0x0
+ 6683 0124 1C       		.uleb128 0x1c
+ 6684 0125 04       		.uleb128 0x4
+ 6685 0126 01       		.byte	0x1
+ 6686 0127 03       		.uleb128 0x3
+ 6687 0128 0E       		.uleb128 0xe
+ 6688 0129 0B       		.uleb128 0xb
+ 6689 012a 0B       		.uleb128 0xb
+ 6690 012b 3A       		.uleb128 0x3a
+ 6691 012c 0B       		.uleb128 0xb
+ 6692 012d 3B       		.uleb128 0x3b
+ 6693 012e 0B       		.uleb128 0xb
+ 6694 012f 01       		.uleb128 0x1
+ 6695 0130 13       		.uleb128 0x13
+ 6696 0131 00       		.byte	0x0
+ 6697 0132 00       		.byte	0x0
+ 6698 0133 1D       		.uleb128 0x1d
+ 6699 0134 04       		.uleb128 0x4
+ 6700 0135 01       		.byte	0x1
+ 6701 0136 03       		.uleb128 0x3
+ 6702 0137 0E       		.uleb128 0xe
+ 6703 0138 0B       		.uleb128 0xb
+ 6704 0139 0B       		.uleb128 0xb
+ 6705 013a 3A       		.uleb128 0x3a
+ 6706 013b 0B       		.uleb128 0xb
+ 6707 013c 3B       		.uleb128 0x3b
+ 6708 013d 05       		.uleb128 0x5
+ 6709 013e 01       		.uleb128 0x1
+ 6710 013f 13       		.uleb128 0x13
+ 6711 0140 00       		.byte	0x0
+ 6712 0141 00       		.byte	0x0
+ 6713 0142 1E       		.uleb128 0x1e
+ 6714 0143 2E       		.uleb128 0x2e
+ 6715 0144 01       		.byte	0x1
+ 6716 0145 03       		.uleb128 0x3
+
GAS LISTING /tmp/ccq6ONvw.s 			page 148
+
+
+ 6717 0146 0E       		.uleb128 0xe
+ 6718 0147 3A       		.uleb128 0x3a
+ 6719 0148 0B       		.uleb128 0xb
+ 6720 0149 3B       		.uleb128 0x3b
+ 6721 014a 0B       		.uleb128 0xb
+ 6722 014b 27       		.uleb128 0x27
+ 6723 014c 0C       		.uleb128 0xc
+ 6724 014d 49       		.uleb128 0x49
+ 6725 014e 13       		.uleb128 0x13
+ 6726 014f 11       		.uleb128 0x11
+ 6727 0150 01       		.uleb128 0x1
+ 6728 0151 12       		.uleb128 0x12
+ 6729 0152 01       		.uleb128 0x1
+ 6730 0153 40       		.uleb128 0x40
+ 6731 0154 06       		.uleb128 0x6
+ 6732 0155 01       		.uleb128 0x1
+ 6733 0156 13       		.uleb128 0x13
+ 6734 0157 00       		.byte	0x0
+ 6735 0158 00       		.byte	0x0
+ 6736 0159 1F       		.uleb128 0x1f
+ 6737 015a 05       		.uleb128 0x5
+ 6738 015b 00       		.byte	0x0
+ 6739 015c 03       		.uleb128 0x3
+ 6740 015d 0E       		.uleb128 0xe
+ 6741 015e 3A       		.uleb128 0x3a
+ 6742 015f 0B       		.uleb128 0xb
+ 6743 0160 3B       		.uleb128 0x3b
+ 6744 0161 0B       		.uleb128 0xb
+ 6745 0162 49       		.uleb128 0x49
+ 6746 0163 13       		.uleb128 0x13
+ 6747 0164 02       		.uleb128 0x2
+ 6748 0165 0A       		.uleb128 0xa
+ 6749 0166 00       		.byte	0x0
+ 6750 0167 00       		.byte	0x0
+ 6751 0168 20       		.uleb128 0x20
+ 6752 0169 34       		.uleb128 0x34
+ 6753 016a 00       		.byte	0x0
+ 6754 016b 03       		.uleb128 0x3
+ 6755 016c 08       		.uleb128 0x8
+ 6756 016d 3A       		.uleb128 0x3a
+ 6757 016e 0B       		.uleb128 0xb
+ 6758 016f 3B       		.uleb128 0x3b
+ 6759 0170 0B       		.uleb128 0xb
+ 6760 0171 49       		.uleb128 0x49
+ 6761 0172 13       		.uleb128 0x13
+ 6762 0173 02       		.uleb128 0x2
+ 6763 0174 0A       		.uleb128 0xa
+ 6764 0175 00       		.byte	0x0
+ 6765 0176 00       		.byte	0x0
+ 6766 0177 21       		.uleb128 0x21
+ 6767 0178 2E       		.uleb128 0x2e
+ 6768 0179 01       		.byte	0x1
+ 6769 017a 03       		.uleb128 0x3
+ 6770 017b 0E       		.uleb128 0xe
+ 6771 017c 3A       		.uleb128 0x3a
+ 6772 017d 0B       		.uleb128 0xb
+ 6773 017e 3B       		.uleb128 0x3b
+
GAS LISTING /tmp/ccq6ONvw.s 			page 149
+
+
+ 6774 017f 0B       		.uleb128 0xb
+ 6775 0180 27       		.uleb128 0x27
+ 6776 0181 0C       		.uleb128 0xc
+ 6777 0182 11       		.uleb128 0x11
+ 6778 0183 01       		.uleb128 0x1
+ 6779 0184 12       		.uleb128 0x12
+ 6780 0185 01       		.uleb128 0x1
+ 6781 0186 40       		.uleb128 0x40
+ 6782 0187 06       		.uleb128 0x6
+ 6783 0188 01       		.uleb128 0x1
+ 6784 0189 13       		.uleb128 0x13
+ 6785 018a 00       		.byte	0x0
+ 6786 018b 00       		.byte	0x0
+ 6787 018c 22       		.uleb128 0x22
+ 6788 018d 05       		.uleb128 0x5
+ 6789 018e 00       		.byte	0x0
+ 6790 018f 03       		.uleb128 0x3
+ 6791 0190 08       		.uleb128 0x8
+ 6792 0191 3A       		.uleb128 0x3a
+ 6793 0192 0B       		.uleb128 0xb
+ 6794 0193 3B       		.uleb128 0x3b
+ 6795 0194 0B       		.uleb128 0xb
+ 6796 0195 49       		.uleb128 0x49
+ 6797 0196 13       		.uleb128 0x13
+ 6798 0197 02       		.uleb128 0x2
+ 6799 0198 0A       		.uleb128 0xa
+ 6800 0199 00       		.byte	0x0
+ 6801 019a 00       		.byte	0x0
+ 6802 019b 23       		.uleb128 0x23
+ 6803 019c 34       		.uleb128 0x34
+ 6804 019d 00       		.byte	0x0
+ 6805 019e 03       		.uleb128 0x3
+ 6806 019f 0E       		.uleb128 0xe
+ 6807 01a0 49       		.uleb128 0x49
+ 6808 01a1 13       		.uleb128 0x13
+ 6809 01a2 34       		.uleb128 0x34
+ 6810 01a3 0C       		.uleb128 0xc
+ 6811 01a4 02       		.uleb128 0x2
+ 6812 01a5 0A       		.uleb128 0xa
+ 6813 01a6 00       		.byte	0x0
+ 6814 01a7 00       		.byte	0x0
+ 6815 01a8 24       		.uleb128 0x24
+ 6816 01a9 34       		.uleb128 0x34
+ 6817 01aa 00       		.byte	0x0
+ 6818 01ab 03       		.uleb128 0x3
+ 6819 01ac 08       		.uleb128 0x8
+ 6820 01ad 3A       		.uleb128 0x3a
+ 6821 01ae 0B       		.uleb128 0xb
+ 6822 01af 3B       		.uleb128 0x3b
+ 6823 01b0 05       		.uleb128 0x5
+ 6824 01b1 49       		.uleb128 0x49
+ 6825 01b2 13       		.uleb128 0x13
+ 6826 01b3 02       		.uleb128 0x2
+ 6827 01b4 0A       		.uleb128 0xa
+ 6828 01b5 00       		.byte	0x0
+ 6829 01b6 00       		.byte	0x0
+ 6830 01b7 25       		.uleb128 0x25
+
GAS LISTING /tmp/ccq6ONvw.s 			page 150
+
+
+ 6831 01b8 2E       		.uleb128 0x2e
+ 6832 01b9 01       		.byte	0x1
+ 6833 01ba 03       		.uleb128 0x3
+ 6834 01bb 0E       		.uleb128 0xe
+ 6835 01bc 3A       		.uleb128 0x3a
+ 6836 01bd 0B       		.uleb128 0xb
+ 6837 01be 3B       		.uleb128 0x3b
+ 6838 01bf 05       		.uleb128 0x5
+ 6839 01c0 27       		.uleb128 0x27
+ 6840 01c1 0C       		.uleb128 0xc
+ 6841 01c2 49       		.uleb128 0x49
+ 6842 01c3 13       		.uleb128 0x13
+ 6843 01c4 11       		.uleb128 0x11
+ 6844 01c5 01       		.uleb128 0x1
+ 6845 01c6 12       		.uleb128 0x12
+ 6846 01c7 01       		.uleb128 0x1
+ 6847 01c8 40       		.uleb128 0x40
+ 6848 01c9 06       		.uleb128 0x6
+ 6849 01ca 01       		.uleb128 0x1
+ 6850 01cb 13       		.uleb128 0x13
+ 6851 01cc 00       		.byte	0x0
+ 6852 01cd 00       		.byte	0x0
+ 6853 01ce 26       		.uleb128 0x26
+ 6854 01cf 05       		.uleb128 0x5
+ 6855 01d0 00       		.byte	0x0
+ 6856 01d1 03       		.uleb128 0x3
+ 6857 01d2 0E       		.uleb128 0xe
+ 6858 01d3 3A       		.uleb128 0x3a
+ 6859 01d4 0B       		.uleb128 0xb
+ 6860 01d5 3B       		.uleb128 0x3b
+ 6861 01d6 05       		.uleb128 0x5
+ 6862 01d7 49       		.uleb128 0x49
+ 6863 01d8 13       		.uleb128 0x13
+ 6864 01d9 02       		.uleb128 0x2
+ 6865 01da 0A       		.uleb128 0xa
+ 6866 01db 00       		.byte	0x0
+ 6867 01dc 00       		.byte	0x0
+ 6868 01dd 27       		.uleb128 0x27
+ 6869 01de 05       		.uleb128 0x5
+ 6870 01df 00       		.byte	0x0
+ 6871 01e0 03       		.uleb128 0x3
+ 6872 01e1 08       		.uleb128 0x8
+ 6873 01e2 3A       		.uleb128 0x3a
+ 6874 01e3 0B       		.uleb128 0xb
+ 6875 01e4 3B       		.uleb128 0x3b
+ 6876 01e5 05       		.uleb128 0x5
+ 6877 01e6 49       		.uleb128 0x49
+ 6878 01e7 13       		.uleb128 0x13
+ 6879 01e8 02       		.uleb128 0x2
+ 6880 01e9 0A       		.uleb128 0xa
+ 6881 01ea 00       		.byte	0x0
+ 6882 01eb 00       		.byte	0x0
+ 6883 01ec 28       		.uleb128 0x28
+ 6884 01ed 34       		.uleb128 0x34
+ 6885 01ee 00       		.byte	0x0
+ 6886 01ef 03       		.uleb128 0x3
+ 6887 01f0 0E       		.uleb128 0xe
+
GAS LISTING /tmp/ccq6ONvw.s 			page 151
+
+
+ 6888 01f1 3A       		.uleb128 0x3a
+ 6889 01f2 0B       		.uleb128 0xb
+ 6890 01f3 3B       		.uleb128 0x3b
+ 6891 01f4 05       		.uleb128 0x5
+ 6892 01f5 49       		.uleb128 0x49
+ 6893 01f6 13       		.uleb128 0x13
+ 6894 01f7 02       		.uleb128 0x2
+ 6895 01f8 0A       		.uleb128 0xa
+ 6896 01f9 00       		.byte	0x0
+ 6897 01fa 00       		.byte	0x0
+ 6898 01fb 29       		.uleb128 0x29
+ 6899 01fc 0B       		.uleb128 0xb
+ 6900 01fd 01       		.byte	0x1
+ 6901 01fe 11       		.uleb128 0x11
+ 6902 01ff 01       		.uleb128 0x1
+ 6903 0200 12       		.uleb128 0x12
+ 6904 0201 01       		.uleb128 0x1
+ 6905 0202 00       		.byte	0x0
+ 6906 0203 00       		.byte	0x0
+ 6907 0204 2A       		.uleb128 0x2a
+ 6908 0205 2E       		.uleb128 0x2e
+ 6909 0206 01       		.byte	0x1
+ 6910 0207 3F       		.uleb128 0x3f
+ 6911 0208 0C       		.uleb128 0xc
+ 6912 0209 03       		.uleb128 0x3
+ 6913 020a 0E       		.uleb128 0xe
+ 6914 020b 3A       		.uleb128 0x3a
+ 6915 020c 0B       		.uleb128 0xb
+ 6916 020d 3B       		.uleb128 0x3b
+ 6917 020e 05       		.uleb128 0x5
+ 6918 020f 27       		.uleb128 0x27
+ 6919 0210 0C       		.uleb128 0xc
+ 6920 0211 49       		.uleb128 0x49
+ 6921 0212 13       		.uleb128 0x13
+ 6922 0213 11       		.uleb128 0x11
+ 6923 0214 01       		.uleb128 0x1
+ 6924 0215 12       		.uleb128 0x12
+ 6925 0216 01       		.uleb128 0x1
+ 6926 0217 40       		.uleb128 0x40
+ 6927 0218 06       		.uleb128 0x6
+ 6928 0219 01       		.uleb128 0x1
+ 6929 021a 13       		.uleb128 0x13
+ 6930 021b 00       		.byte	0x0
+ 6931 021c 00       		.byte	0x0
+ 6932 021d 2B       		.uleb128 0x2b
+ 6933 021e 34       		.uleb128 0x34
+ 6934 021f 00       		.byte	0x0
+ 6935 0220 03       		.uleb128 0x3
+ 6936 0221 0E       		.uleb128 0xe
+ 6937 0222 3A       		.uleb128 0x3a
+ 6938 0223 0B       		.uleb128 0xb
+ 6939 0224 3B       		.uleb128 0x3b
+ 6940 0225 0B       		.uleb128 0xb
+ 6941 0226 49       		.uleb128 0x49
+ 6942 0227 13       		.uleb128 0x13
+ 6943 0228 3F       		.uleb128 0x3f
+ 6944 0229 0C       		.uleb128 0xc
+
GAS LISTING /tmp/ccq6ONvw.s 			page 152
+
+
+ 6945 022a 02       		.uleb128 0x2
+ 6946 022b 0A       		.uleb128 0xa
+ 6947 022c 00       		.byte	0x0
+ 6948 022d 00       		.byte	0x0
+ 6949 022e 00       		.byte	0x0
+ 6950              		.section	.debug_pubnames,"", at progbits
+ 6951 0000 39000000 		.long	0x39
+ 6952 0004 0200     		.value	0x2
+ 6953 0006 00000000 		.long	.Ldebug_info0
+ 6954 000a 991F0000 		.long	0x1f99
+ 6955 000e 861E0000 		.long	0x1e86
+ 6956 0012 4B436970 		.string	"KCipherVecMake"
+ 6956      68657256 
+ 6956      65634D61 
+ 6956      6B6500
+ 6957 0021 7D1F0000 		.long	0x1f7d
+ 6958 0025 4B436970 		.string	"KCipherVecClassName"
+ 6958      68657256 
+ 6958      6563436C 
+ 6958      6173734E 
+ 6958      616D6500 
+ 6959 0039 00000000 		.long	0x0
+ 6960              		.section	.debug_aranges,"", at progbits
+ 6961 0000 2C000000 		.long	0x2c
+ 6962 0004 0200     		.value	0x2
+ 6963 0006 00000000 		.long	.Ldebug_info0
+ 6964 000a 08       		.byte	0x8
+ 6965 000b 00       		.byte	0x0
+ 6966 000c 0000     		.value	0x0
+ 6967 000e 0000     		.value	0x0
+ 6968 0010 00000000 		.quad	.Ltext0
+ 6968      00000000 
+ 6969 0018 7C100000 		.quad	.Letext0-.Ltext0
+ 6969      00000000 
+ 6970 0020 00000000 		.quad	0x0
+ 6970      00000000 
+ 6971 0028 00000000 		.quad	0x0
+ 6971      00000000 
+ 6972              		.section	.debug_str,"MS", at progbits,1
+ 6973              	.LASF90:
+ 6974 0000 645F6B65 		.string	"d_key"
+ 6974      7900
+ 6975              	.LASF332:
+ 6976 0006 72634475 		.string	"rcDuplicate"
+ 6976      706C6963 
+ 6976      61746500 
+ 6977              	.LASF359:
+ 6978 0012 4B436970 		.string	"KCipherVecSetEncryptIvec"
+ 6978      68657256 
+ 6978      65635365 
+ 6978      74456E63 
+ 6978      72797074 
+ 6979              	.LASF135:
+ 6980 002b 7263436F 		.string	"rcCondition"
+ 6980      6E646974 
+ 6980      696F6E00 
+ 6981              	.LASF249:
+
GAS LISTING /tmp/ccq6ONvw.s 			page 153
+
+
+ 6982 0037 7263456E 		.string	"rcEncrypting"
+ 6982      63727970 
+ 6982      74696E67 
+ 6982      00
+ 6983              	.LASF208:
+ 6984 0044 72634F70 		.string	"rcOpening"
+ 6984      656E696E 
+ 6984      6700
+ 6985              	.LASF216:
+ 6986 004e 72635065 		.string	"rcPersisting"
+ 6986      72736973 
+ 6986      74696E67 
+ 6986      00
+ 6987              	.LASF385:
+ 6988 005b 4B436970 		.string	"KCipherVecDecryptCtr"
+ 6988      68657256 
+ 6988      65634465 
+ 6988      63727970 
+ 6988      74437472 
+ 6989              	.LASF254:
+ 6990 0070 72635365 		.string	"rcSending"
+ 6990      6E64696E 
+ 6990      6700
+ 6991              	.LASF248:
+ 6992 007a 72634170 		.string	"rcAppending"
+ 6992      70656E64 
+ 6992      696E6700 
+ 6993              	.LASF234:
+ 6994 0086 72635369 		.string	"rcSignaling"
+ 6994      676E616C 
+ 6994      696E6700 
+ 6995              	.LASF14:
+ 6996 0092 4442475F 		.string	"DBG_BLAST"
+ 6996      424C4153 
+ 6996      5400
+ 6997              	.LASF290:
+ 6998 009c 72635369 		.string	"rcSignalSet"
+ 6998      676E616C 
+ 6998      53657400 
+ 6999              	.LASF236:
+ 7000 00a8 72634174 		.string	"rcAttaching"
+ 7000      74616368 
+ 7000      696E6700 
+ 7001              	.LASF168:
+ 7002 00b4 72635461 		.string	"rcTable"
+ 7002      626C6500 
+ 7003              	.LASF66:
+ 7004 00bc 64656372 		.string	"decrypt_cfb"
+ 7004      7970745F 
+ 7004      63666200 
+ 7005              	.LASF132:
+ 7006 00c8 72634275 		.string	"rcBuffer"
+ 7006      66666572 
+ 7006      00
+ 7007              	.LASF264:
+ 7008 00d1 72634D65 		.string	"rcMemory"
+ 7008      6D6F7279 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 154
+
+
+ 7008      00
+ 7009              	.LASF197:
+ 7010 00da 72634C6F 		.string	"rcLocking"
+ 7010      636B696E 
+ 7010      6700
+ 7011              	.LASF232:
+ 7012 00e4 72635061 		.string	"rcParsing"
+ 7012      7273696E 
+ 7012      6700
+ 7013              	.LASF261:
+ 7014 00ee 72635365 		.string	"rcSelf"
+ 7014      6C6600
+ 7015              	.LASF154:
+ 7016 00f5 72634D65 		.string	"rcMetadata"
+ 7016      74616461 
+ 7016      746100
+ 7017              	.LASF277:
+ 7018 0100 72634172 		.string	"rcArcHardLink"
+ 7018      63486172 
+ 7018      644C696E 
+ 7018      6B00
+ 7019              	.LASF103:
+ 7020 010e 7263436F 		.string	"rcCont"
+ 7020      6E7400
+ 7021              	.LASF285:
+ 7022 0115 72634368 		.string	"rcChecksum"
+ 7022      65636B73 
+ 7022      756D00
+ 7023              	.LASF357:
+ 7024 0120 5F5F6675 		.string	"__func__"
+ 7024      6E635F5F 
+ 7024      00
+ 7025              	.LASF329:
+ 7026 0129 7263546F 		.string	"rcTooShort"
+ 7026      6F53686F 
+ 7026      727400
+ 7027              	.LASF159:
+ 7028 0134 72635061 		.string	"rcPagemap"
+ 7028      67656D61 
+ 7028      7000
+ 7029              	.LASF111:
+ 7030 013e 72634170 		.string	"rcApp"
+ 7030      7000
+ 7031              	.LASF10:
+ 7032 0144 61746F6D 		.string	"atomic32_t"
+ 7032      69633332 
+ 7032      5F7400
+ 7033              	.LASF56:
+ 7034 014f 7365745F 		.string	"set_decrypt_ctr_func"
+ 7034      64656372 
+ 7034      7970745F 
+ 7034      6374725F 
+ 7034      66756E63 
+ 7035              	.LASF65:
+ 7036 0164 656E6372 		.string	"encrypt_cfb"
+ 7036      7970745F 
+ 7036      63666200 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 155
+
+
+ 7037              	.LASF173:
+ 7038 0170 72635472 		.string	"rcTrie"
+ 7038      696500
+ 7039              	.LASF114:
+ 7040 0177 72634C61 		.string	"rcLastModule_v1_0"
+ 7040      73744D6F 
+ 7040      64756C65 
+ 7040      5F76315F 
+ 7040      3000
+ 7041              	.LASF121:
+ 7042 0189 72634C61 		.string	"rcLastModule_v1_1"
+ 7042      73744D6F 
+ 7042      64756C65 
+ 7042      5F76315F 
+ 7042      3100
+ 7043              	.LASF272:
+ 7044 019b 72634279 		.string	"rcByteOrder"
+ 7044      74654F72 
+ 7044      64657200 
+ 7045              	.LASF85:
+ 7046 01a7 4145534B 		.string	"AESKeySchedule"
+ 7046      65795363 
+ 7046      68656475 
+ 7046      6C6500
+ 7047              	.LASF333:
+ 7048 01b6 72634F75 		.string	"rcOutOfKDirectory"
+ 7048      744F664B 
+ 7048      44697265 
+ 7048      63746F72 
+ 7048      7900
+ 7049              	.LASF86:
+ 7050 01c8 726F756E 		.string	"round_keys"
+ 7050      645F6B65 
+ 7050      797300
+ 7051              	.LASF190:
+ 7052 01d3 7263436F 		.string	"rcConstructing"
+ 7052      6E737472 
+ 7052      75637469 
+ 7052      6E6700
+ 7053              	.LASF96:
+ 7054 01e2 6B636970 		.string	"kcipher_AES"
+ 7054      6865725F 
+ 7054      41455300 
+ 7055              	.LASF97:
+ 7056 01ee 6B636970 		.string	"kcipher_count"
+ 7056      6865725F 
+ 7056      636F756E 
+ 7056      7400
+ 7057              	.LASF379:
+ 7058 01fc 4B436970 		.string	"KCipherVecDecryptPcbc"
+ 7058      68657256 
+ 7058      65634465 
+ 7058      63727970 
+ 7058      74506362 
+ 7059              	.LASF393:
+ 7060 0212 74797065 		.string	"type"
+ 7060      00
+
GAS LISTING /tmp/ccq6ONvw.s 			page 156
+
+
+ 7061              	.LASF347:
+ 7062 0217 626C6F63 		.string	"block"
+ 7062      6B00
+ 7063              	.LASF9:
+ 7064 021d 72635F74 		.string	"rc_t"
+ 7064      00
+ 7065              	.LASF266:
+ 7066 0222 7263466F 		.string	"rcFormat"
+ 7066      726D6174 
+ 7066      00
+ 7067              	.LASF324:
+ 7068 022b 7263556E 		.string	"rcUnauthorized"
+ 7068      61757468 
+ 7068      6F72697A 
+ 7068      656400
+ 7069              	.LASF349:
+ 7070 023a 63766F75 		.string	"cvout"
+ 7070      7400
+ 7071              	.LASF204:
+ 7072 0240 72635265 		.string	"rcRemoving"
+ 7072      6D6F7669 
+ 7072      6E6700
+ 7073              	.LASF117:
+ 7074 024b 72634B72 		.string	"rcKrypto"
+ 7074      7970746F 
+ 7074      00
+ 7075              	.LASF378:
+ 7076 0254 4B436970 		.string	"KCipherVecEncryptPcbc"
+ 7076      68657256 
+ 7076      6563456E 
+ 7076      63727970 
+ 7076      74506362 
+ 7077              	.LASF195:
+ 7078 026a 72635669 		.string	"rcVisiting"
+ 7078      73697469 
+ 7078      6E6700
+ 7079              	.LASF125:
+ 7080 0275 72634172 		.string	"rcArc"
+ 7080      6300
+ 7081              	.LASF362:
+ 7082 027b 4B436970 		.string	"KCipherVecSetEncryptCounterFunc"
+ 7082      68657256 
+ 7082      65635365 
+ 7082      74456E63 
+ 7082      72797074 
+ 7083              	.LASF100:
+ 7084 029b 72634578 		.string	"rcExe"
+ 7084      6500
+ 7085              	.LASF330:
+ 7086 02a1 7263546F 		.string	"rcTooLong"
+ 7086      6F4C6F6E 
+ 7086      6700
+ 7087              	.LASF258:
+ 7088 02ab 52434F62 		.string	"RCObject"
+ 7088      6A656374 
+ 7088      00
+ 7089              	.LASF268:
+
GAS LISTING /tmp/ccq6ONvw.s 			page 157
+
+
+ 7090 02b4 7263496E 		.string	"rcInterface"
+ 7090      74657266 
+ 7090      61636500 
+ 7091              	.LASF196:
+ 7092 02c0 72635265 		.string	"rcResolving"
+ 7092      736F6C76 
+ 7092      696E6700 
+ 7093              	.LASF394:
+ 7094 02cc 4B436970 		.string	"KCipherVec_vt_v1"
+ 7094      68657256 
+ 7094      65635F76 
+ 7094      745F7631 
+ 7094      00
+ 7095              	.LASF88:
+ 7096 02dd 43697068 		.string	"CipherAes"
+ 7096      65724165 
+ 7096      7300
+ 7097              	.LASF138:
+ 7098 02e7 72634469 		.string	"rcDirectory"
+ 7098      72656374 
+ 7098      6F727900 
+ 7099              	.LASF2:
+ 7100 02f3 6C6F6E67 		.string	"long int"
+ 7100      20696E74 
+ 7100      00
+ 7101              	.LASF226:
+ 7102 02fc 72635661 		.string	"rcValidating"
+ 7102      6C696461 
+ 7102      74696E67 
+ 7102      00
+ 7103              	.LASF44:
+ 7104 0309 63697068 		.string	"cipher_ctr_func"
+ 7104      65725F63 
+ 7104      74725F66 
+ 7104      756E6300 
+ 7105              	.LASF128:
+ 7106 0319 72634172 		.string	"rcArgv"
+ 7106      677600
+ 7107              	.LASF104:
+ 7108 0320 72634353 		.string	"rcCS"
+ 7108      00
+ 7109              	.LASF185:
+ 7110 0325 72635572 		.string	"rcUri"
+ 7110      6900
+ 7111              	.LASF207:
+ 7112 032b 72634372 		.string	"rcCreating"
+ 7112      65617469 
+ 7112      6E6700
+ 7113              	.LASF40:
+ 7114 0336 656E6372 		.string	"encrypt_ivec"
+ 7114      7970745F 
+ 7114      69766563 
+ 7114      00
+ 7115              	.LASF57:
+ 7116 0343 656E6372 		.string	"encrypt"
+ 7116      79707400 
+ 7117              	.LASF72:
+
GAS LISTING /tmp/ccq6ONvw.s 			page 158
+
+
+ 7118 034b 43697068 		.string	"CipherBlock"
+ 7118      6572426C 
+ 7118      6F636B00 
+ 7119              	.LASF77:
+ 7120 0357 76313238 		.string	"v128_u8_t"
+ 7120      5F75385F 
+ 7120      7400
+ 7121              	.LASF19:
+ 7122 0361 4442475F 		.string	"DBG_XML"
+ 7122      584D4C00 
+ 7123              	.LASF31:
+ 7124 0369 4442475F 		.string	"DBG_MOD_COUNT"
+ 7124      4D4F445F 
+ 7124      434F554E 
+ 7124      5400
+ 7125              	.LASF355:
+ 7126 0377 75736572 		.string	"user_key_bits"
+ 7126      5F6B6579 
+ 7126      5F626974 
+ 7126      7300
+ 7127              	.LASF109:
+ 7128 0385 72634442 		.string	"rcDB"
+ 7128      00
+ 7129              	.LASF287:
+ 7130 038a 7263436F 		.string	"rcConnection"
+ 7130      6E6E6563 
+ 7130      74696F6E 
+ 7130      00
+ 7131              	.LASF155:
+ 7132 0397 72634D67 		.string	"rcMgr"
+ 7132      7200
+ 7133              	.LASF317:
+ 7134 039d 72635669 		.string	"rcViolated"
+ 7134      6F6C6174 
+ 7134      656400
+ 7135              	.LASF45:
+ 7136 03a8 4B436970 		.string	"KCipherVec"
+ 7136      68657256 
+ 7136      656300
+ 7137              	.LASF250:
+ 7138 03b3 72634465 		.string	"rcDecrypting"
+ 7138      63727970 
+ 7138      74696E67 
+ 7138      00
+ 7139              	.LASF0:
+ 7140 03c0 7369676E 		.string	"signed char"
+ 7140      65642063 
+ 7140      68617200 
+ 7141              	.LASF5:
+ 7142 03cc 75696E74 		.string	"uint8_t"
+ 7142      385F7400 
+ 7143              	.LASF133:
+ 7144 03d4 72634368 		.string	"rcChar"
+ 7144      617200
+ 7145              	.LASF118:
+ 7146 03db 72635244 		.string	"rcRDBMS"
+ 7146      424D5300 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 159
+
+
+ 7147              	.LASF162:
+ 7148 03e3 72635175 		.string	"rcQueue"
+ 7148      65756500 
+ 7149              	.LASF356:
+ 7150 03eb 5F5F5052 		.string	"__PRETTY_FUNCTION__"
+ 7150      45545459 
+ 7150      5F46554E 
+ 7150      4354494F 
+ 7150      4E5F5F00 
+ 7151              	.LASF12:
+ 7152 03ff 4442475F 		.string	"DBG_MOD_NOT_FOUND"
+ 7152      4D4F445F 
+ 7152      4E4F545F 
+ 7152      464F554E 
+ 7152      4400
+ 7153              	.LASF214:
+ 7154 0411 72635265 		.string	"rcReverting"
+ 7154      76657274 
+ 7154      696E6700 
+ 7155              	.LASF130:
+ 7156 041d 72634261 		.string	"rcBarrier"
+ 7156      72726965 
+ 7156      7200
+ 7157              	.LASF314:
+ 7158 0427 72634578 		.string	"rcExhausted"
+ 7158      68617573 
+ 7158      74656400 
+ 7159              	.LASF3:
+ 7160 0433 756E7369 		.string	"unsigned char"
+ 7160      676E6564 
+ 7160      20636861 
+ 7160      7200
+ 7161              	.LASF187:
+ 7162 0441 5243436F 		.string	"RCContext"
+ 7162      6E746578 
+ 7162      7400
+ 7163              	.LASF150:
+ 7164 044b 72634C6F 		.string	"rcLock"
+ 7164      636B00
+ 7165              	.LASF303:
+ 7166 0452 72634261 		.string	"rcBadVersion"
+ 7166      64566572 
+ 7166      73696F6E 
+ 7166      00
+ 7167              	.LASF304:
+ 7168 045f 72634465 		.string	"rcDestroyed"
+ 7168      7374726F 
+ 7168      79656400 
+ 7169              	.LASF167:
+ 7170 046b 72635374 		.string	"rcString"
+ 7170      72696E67 
+ 7170      00
+ 7171              	.LASF129:
+ 7172 0474 72634174 		.string	"rcAttr"
+ 7172      747200
+ 7173              	.LASF371:
+ 7174 047b 4B436970 		.string	"KCipherVecEncryptEcb"
+
GAS LISTING /tmp/ccq6ONvw.s 			page 160
+
+
+ 7174      68657256 
+ 7174      6563456E 
+ 7174      63727970 
+ 7174      74456362 
+ 7175              	.LASF151:
+ 7176 0490 72634C6F 		.string	"rcLog"
+ 7176      6700
+ 7177              	.LASF392:
+ 7178 0496 6E65775F 		.string	"new_obj"
+ 7178      6F626A00 
+ 7179              	.LASF15:
+ 7180 049e 4442475F 		.string	"DBG_KDB"
+ 7180      4B444200 
+ 7181              	.LASF255:
+ 7182 04a6 72635072 		.string	"rcProcessing"
+ 7182      6F636573 
+ 7182      73696E67 
+ 7182      00
+ 7183              	.LASF105:
+ 7184 04b3 72634646 		.string	"rcFF"
+ 7184      00
+ 7185              	.LASF396:
+ 7186 04b8 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c"
+ 7186      652F726F 
+ 7186      6461726D 
+ 7186      65722F73 
+ 7186      72615F73 
+ 7187              	.LASF106:
+ 7188 04f0 72634653 		.string	"rcFS"
+ 7188      00
+ 7189              	.LASF350:
+ 7190 04f5 43697068 		.string	"CipherVecIn"
+ 7190      65725665 
+ 7190      63496E00 
+ 7191              	.LASF193:
+ 7192 0501 72634163 		.string	"rcAccessing"
+ 7192      63657373 
+ 7192      696E6700 
+ 7193              	.LASF311:
+ 7194 050d 7263496E 		.string	"rcInterrupted"
+ 7194      74657272 
+ 7194      75707465 
+ 7194      6400
+ 7195              	.LASF319:
+ 7196 051b 72634E6F 		.string	"rcNotFound"
+ 7196      74466F75 
+ 7196      6E6400
+ 7197              	.LASF11:
+ 7198 0526 63686172 		.string	"char"
+ 7198      00
+ 7199              	.LASF157:
+ 7200 052b 72634E6F 		.string	"rcNode"
+ 7200      646500
+ 7201              	.LASF366:
+ 7202 0532 4B436970 		.string	"KCipherVecDecryptV1"
+ 7202      68657256 
+ 7202      65634465 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 161
+
+
+ 7202      63727970 
+ 7202      74563100 
+ 7203              	.LASF29:
+ 7204 0546 4442475F 		.string	"DBG_AES"
+ 7204      41455300 
+ 7205              	.LASF288:
+ 7206 054e 72634572 		.string	"rcError"
+ 7206      726F7200 
+ 7207              	.LASF387:
+ 7208 0556 706F626A 		.string	"pobj"
+ 7208      00
+ 7209              	.LASF205:
+ 7210 055b 7263436C 		.string	"rcClearing"
+ 7210      65617269 
+ 7210      6E6700
+ 7211              	.LASF263:
+ 7212 0566 72634F66 		.string	"rcOffset"
+ 7212      66736574 
+ 7212      00
+ 7213              	.LASF209:
+ 7214 056f 7263436C 		.string	"rcClosing"
+ 7214      6F73696E 
+ 7214      6700
+ 7215              	.LASF141:
+ 7216 0579 72634669 		.string	"rcFile"
+ 7216      6C6500
+ 7217              	.LASF170:
+ 7218 0580 72635469 		.string	"rcTimeout"
+ 7218      6D656F75 
+ 7218      7400
+ 7219              	.LASF158:
+ 7220 058a 72634E75 		.string	"rcNumeral"
+ 7220      6D657261 
+ 7220      6C00
+ 7221              	.LASF235:
+ 7222 0594 72635761 		.string	"rcWaiting"
+ 7222      6974696E 
+ 7222      6700
+ 7223              	.LASF239:
+ 7224 059e 72634650 		.string	"rcFPCoding"
+ 7224      436F6469 
+ 7224      6E6700
+ 7225              	.LASF291:
+ 7226 05a9 72635369 		.string	"rcSize"
+ 7226      7A6500
+ 7227              	.LASF276:
+ 7228 05b0 72634469 		.string	"rcDirEntry"
+ 7228      72456E74 
+ 7228      727900
+ 7229              	.LASF228:
+ 7230 05bb 72634875 		.string	"rcHuffmanCoding"
+ 7230      66666D61 
+ 7230      6E436F64 
+ 7230      696E6700 
+ 7231              	.LASF24:
+ 7232 05cb 4442475F 		.string	"DBG_KFG"
+ 7232      4B464700 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 162
+
+
+ 7233              	.LASF309:
+ 7234 05d3 72634275 		.string	"rcBusy"
+ 7234      737900
+ 7235              	.LASF21:
+ 7236 05da 4442475F 		.string	"DBG_SRA"
+ 7236      53524100 
+ 7237              	.LASF267:
+ 7238 05e2 72635472 		.string	"rcTransfer"
+ 7238      616E7366 
+ 7238      657200
+ 7239              	.LASF18:
+ 7240 05ed 4442475F 		.string	"DBG_KFS"
+ 7240      4B465300 
+ 7241              	.LASF222:
+ 7242 05f5 72635061 		.string	"rcPacking"
+ 7242      636B696E 
+ 7242      6700
+ 7243              	.LASF218:
+ 7244 05ff 7263436F 		.string	"rcCopying"
+ 7244      7079696E 
+ 7244      6700
+ 7245              	.LASF256:
+ 7246 0609 72634964 		.string	"rcIdentifying"
+ 7246      656E7469 
+ 7246      6679696E 
+ 7246      6700
+ 7247              	.LASF365:
+ 7248 0617 4B436970 		.string	"KCipherVecEncryptV1"
+ 7248      68657256 
+ 7248      6563456E 
+ 7248      63727970 
+ 7248      74563100 
+ 7249              	.LASF60:
+ 7250 062b 64656372 		.string	"decrypt_ecb"
+ 7250      7970745F 
+ 7250      65636200 
+ 7251              	.LASF225:
+ 7252 0637 72634465 		.string	"rcDecoding"
+ 7252      636F6469 
+ 7252      6E6700
+ 7253              	.LASF389:
+ 7254 0642 4B436970 		.string	"KCipherVecAllocNull"
+ 7254      68657256 
+ 7254      6563416C 
+ 7254      6C6F634E 
+ 7254      756C6C00 
+ 7255              	.LASF153:
+ 7256 0656 72634D65 		.string	"rcMemMap"
+ 7256      6D4D6170 
+ 7256      00
+ 7257              	.LASF198:
+ 7258 065f 7263556E 		.string	"rcUnlocking"
+ 7258      6C6F636B 
+ 7258      696E6700 
+ 7259              	.LASF281:
+ 7260 066b 72634974 		.string	"rcItem"
+ 7260      656D00
+
GAS LISTING /tmp/ccq6ONvw.s 			page 163
+
+
+ 7261              	.LASF83:
+ 7262 0672 4B426C6F 		.string	"KBlockCipherVec_vt_v1"
+ 7262      636B4369 
+ 7262      70686572 
+ 7262      5665635F 
+ 7262      76745F76 
+ 7263              	.LASF17:
+ 7264 0688 4442475F 		.string	"DBG_LEGREF"
+ 7264      4C454752 
+ 7264      454600
+ 7265              	.LASF348:
+ 7266 0693 6376696E 		.string	"cvin"
+ 7266      00
+ 7267              	.LASF199:
+ 7268 0698 72635265 		.string	"rcRenaming"
+ 7268      6E616D69 
+ 7268      6E6700
+ 7269              	.LASF354:
+ 7270 06a3 75736572 		.string	"user_key"
+ 7270      5F6B6579 
+ 7270      00
+ 7271              	.LASF269:
+ 7272 06ac 72634964 		.string	"rcId"
+ 7272      00
+ 7273              	.LASF182:
+ 7274 06b1 7263436D 		.string	"rcCmd"
+ 7274      6400
+ 7275              	.LASF398:
+ 7276 06b7 43697068 		.string	"CipherVecOut"
+ 7276      65725665 
+ 7276      634F7574 
+ 7276      00
+ 7277              	.LASF27:
+ 7278 06c4 4442475F 		.string	"DBG_LOADLIB"
+ 7278      4C4F4144 
+ 7278      4C494200 
+ 7279              	.LASF321:
+ 7280 06d0 7263556E 		.string	"rcUnlocked"
+ 7280      6C6F636B 
+ 7280      656400
+ 7281              	.LASF122:
+ 7282 06db 52434D6F 		.string	"RCModule"
+ 7282      64756C65 
+ 7282      00
+ 7283              	.LASF283:
+ 7284 06e4 7263456E 		.string	"rcEncryption"
+ 7284      63727970 
+ 7284      74696F6E 
+ 7284      00
+ 7285              	.LASF318:
+ 7286 06f1 72634578 		.string	"rcExists"
+ 7286      69737473 
+ 7286      00
+ 7287              	.LASF78:
+ 7288 06fa 43697068 		.string	"CipherVec"
+ 7288      65725665 
+ 7288      6300
+
GAS LISTING /tmp/ccq6ONvw.s 			page 164
+
+
+ 7289              	.LASF59:
+ 7290 0704 656E6372 		.string	"encrypt_ecb"
+ 7290      7970745F 
+ 7290      65636200 
+ 7291              	.LASF337:
+ 7292 0710 72634F70 		.string	"rcOpen"
+ 7292      656E00
+ 7293              	.LASF323:
+ 7294 0717 72634465 		.string	"rcDeadlock"
+ 7294      61646C6F 
+ 7294      636B00
+ 7295              	.LASF260:
+ 7296 0722 72634C69 		.string	"rcLink"
+ 7296      6E6B00
+ 7297              	.LASF247:
+ 7298 0729 7263466C 		.string	"rcFlushing"
+ 7298      75736869 
+ 7298      6E6700
+ 7299              	.LASF295:
+ 7300 0734 72634E6F 		.string	"rcNoErr"
+ 7300      45727200 
+ 7301              	.LASF274:
+ 7302 073c 72635461 		.string	"rcTag"
+ 7302      6700
+ 7303              	.LASF23:
+ 7304 0742 4442475F 		.string	"DBG_ALIGN"
+ 7304      414C4947 
+ 7304      4E00
+ 7305              	.LASF238:
+ 7306 074c 72634C6F 		.string	"rcLogging"
+ 7306      6767696E 
+ 7306      6700
+ 7307              	.LASF331:
+ 7308 0756 7263546F 		.string	"rcTooBig"
+ 7308      6F426967 
+ 7308      00
+ 7309              	.LASF175:
+ 7310 075f 72635665 		.string	"rcVector"
+ 7310      63746F72 
+ 7310      00
+ 7311              	.LASF210:
+ 7312 0768 72635265 		.string	"rcResizing"
+ 7312      73697A69 
+ 7312      6E6700
+ 7313              	.LASF184:
+ 7314 0773 72635175 		.string	"rcQuery"
+ 7314      65727900 
+ 7315              	.LASF8:
+ 7316 077b 6C6F6E67 		.string	"long unsigned int"
+ 7316      20756E73 
+ 7316      69676E65 
+ 7316      6420696E 
+ 7316      7400
+ 7317              	.LASF316:
+ 7318 078d 72634578 		.string	"rcExcessive"
+ 7318      63657373 
+ 7318      69766500 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 165
+
+
+ 7319              	.LASF244:
+ 7320 0799 72634576 		.string	"rcEvaluating"
+ 7320      616C7561 
+ 7320      74696E67 
+ 7320      00
+ 7321              	.LASF181:
+ 7322 07a6 7263526E 		.string	"rcRng"
+ 7322      6700
+ 7323              	.LASF189:
+ 7324 07ac 72634361 		.string	"rcCasting"
+ 7324      7374696E 
+ 7324      6700
+ 7325              	.LASF352:
+ 7326 07b6 73656C66 		.string	"self"
+ 7326      00
+ 7327              	.LASF149:
+ 7328 07bb 72634974 		.string	"rcIterator"
+ 7328      65726174 
+ 7328      6F7200
+ 7329              	.LASF376:
+ 7330 07c6 4B436970 		.string	"KCipherVecDecryptCbc"
+ 7330      68657256 
+ 7330      65634465 
+ 7330      63727970 
+ 7330      74436263 
+ 7331              	.LASF84:
+ 7332 07db 4B426C6F 		.string	"KBlockCipherVec"
+ 7332      636B4369 
+ 7332      70686572 
+ 7332      56656300 
+ 7333              	.LASF166:
+ 7334 07eb 72635374 		.string	"rcStorage"
+ 7334      6F726167 
+ 7334      6500
+ 7335              	.LASF68:
+ 7336 07f5 64656372 		.string	"decrypt_ofb"
+ 7336      7970745F 
+ 7336      6F666200 
+ 7337              	.LASF46:
+ 7338 0801 626C6F63 		.string	"block_cipher"
+ 7338      6B5F6369 
+ 7338      70686572 
+ 7338      00
+ 7339              	.LASF372:
+ 7340 080e 626C6F63 		.string	"block_count"
+ 7340      6B5F636F 
+ 7340      756E7400 
+ 7341              	.LASF278:
+ 7342 081a 7263526F 		.string	"rcRow"
+ 7342      7700
+ 7343              	.LASF382:
+ 7344 0820 4B436970 		.string	"KCipherVecEncryptOfb"
+ 7344      68657256 
+ 7344      6563456E 
+ 7344      63727970 
+ 7344      744F6662 
+ 7345              	.LASF20:
+
GAS LISTING /tmp/ccq6ONvw.s 			page 166
+
+
+ 7346 0835 4442475F 		.string	"DBG_VDB"
+ 7346      56444200 
+ 7347              	.LASF94:
+ 7348 083d 6B636970 		.string	"kcipher_type"
+ 7348      6865725F 
+ 7348      74797065 
+ 7348      00
+ 7349              	.LASF178:
+ 7350 084a 72634C61 		.string	"rcLastTarget_v1_0"
+ 7350      73745461 
+ 7350      72676574 
+ 7350      5F76315F 
+ 7350      3000
+ 7351              	.LASF186:
+ 7352 085c 72634C61 		.string	"rcLastTarget_v1_1"
+ 7352      73745461 
+ 7352      72676574 
+ 7352      5F76315F 
+ 7352      3100
+ 7353              	.LASF165:
+ 7354 086e 72635365 		.string	"rcSemaphore"
+ 7354      6D617068 
+ 7354      6F726500 
+ 7355              	.LASF219:
+ 7356 087a 7263436F 		.string	"rcConcatenating"
+ 7356      6E636174 
+ 7356      656E6174 
+ 7356      696E6700 
+ 7357              	.LASF310:
+ 7358 088a 7263496E 		.string	"rcIncomplete"
+ 7358      636F6D70 
+ 7358      6C657465 
+ 7358      00
+ 7359              	.LASF339:
+ 7360 0897 72634E6F 		.string	"rcNotOpen"
+ 7360      744F7065 
+ 7360      6E00
+ 7361              	.LASF148:
+ 7362 08a1 7263496E 		.string	"rcIndex"
+ 7362      64657800 
+ 7363              	.LASF67:
+ 7364 08a9 656E6372 		.string	"encrypt_ofb"
+ 7364      7970745F 
+ 7364      6F666200 
+ 7365              	.LASF55:
+ 7366 08b5 7365745F 		.string	"set_encrypt_ctr_func"
+ 7366      656E6372 
+ 7366      7970745F 
+ 7366      6374725F 
+ 7366      66756E63 
+ 7367              	.LASF22:
+ 7368 08ca 4442475F 		.string	"DBG_XARC"
+ 7368      58415243 
+ 7368      00
+ 7369              	.LASF395:
+ 7370 08d3 474E5520 		.string	"GNU C 4.4.2"
+ 7370      4320342E 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 167
+
+
+ 7370      342E3200 
+ 7371              	.LASF360:
+ 7372 08df 69766563 		.string	"ivec"
+ 7372      00
+ 7373              	.LASF101:
+ 7374 08e4 72635275 		.string	"rcRuntime"
+ 7374      6E74696D 
+ 7374      6500
+ 7375              	.LASF140:
+ 7376 08ee 7263586D 		.string	"rcXmlDoc"
+ 7376      6C446F63 
+ 7376      00
+ 7377              	.LASF73:
+ 7378 08f7 6C6F6E67 		.string	"long long int"
+ 7378      206C6F6E 
+ 7378      6720696E 
+ 7378      7400
+ 7379              	.LASF221:
+ 7380 0905 7263506F 		.string	"rcPositioning"
+ 7380      73697469 
+ 7380      6F6E696E 
+ 7380      6700
+ 7381              	.LASF34:
+ 7382 0913 636F756E 		.string	"counter"
+ 7382      74657200 
+ 7383              	.LASF70:
+ 7384 091b 64656372 		.string	"decrypt_ctr"
+ 7384      7970745F 
+ 7384      63747200 
+ 7385              	.LASF95:
+ 7386 0927 6B636970 		.string	"kcipher_null"
+ 7386      6865725F 
+ 7386      6E756C6C 
+ 7386      00
+ 7387              	.LASF152:
+ 7388 0934 72634D44 		.string	"rcMD5SumFmt"
+ 7388      3553756D 
+ 7388      466D7400 
+ 7389              	.LASF388:
+ 7390 0940 4B436970 		.string	"KCipherVecInitAes"
+ 7390      68657256 
+ 7390      6563496E 
+ 7390      69744165 
+ 7390      7300
+ 7391              	.LASF203:
+ 7392 0952 7263496E 		.string	"rcInserting"
+ 7392      73657274 
+ 7392      696E6700 
+ 7393              	.LASF384:
+ 7394 095e 4B436970 		.string	"KCipherVecEncryptCtr"
+ 7394      68657256 
+ 7394      6563456E 
+ 7394      63727970 
+ 7394      74437472 
+ 7395              	.LASF251:
+ 7396 0973 7263436F 		.string	"rcComparing"
+ 7396      6D706172 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 168
+
+
+ 7396      696E6700 
+ 7397              	.LASF313:
+ 7398 097f 7263456D 		.string	"rcEmpty"
+ 7398      70747900 
+ 7399              	.LASF145:
+ 7400 0987 7263466F 		.string	"rcFormatter"
+ 7400      726D6174 
+ 7400      74657200 
+ 7401              	.LASF76:
+ 7402 0993 646F7562 		.string	"double"
+ 7402      6C6500
+ 7403              	.LASF230:
+ 7404 099a 72635265 		.string	"rcRegistering"
+ 7404      67697374 
+ 7404      6572696E 
+ 7404      6700
+ 7405              	.LASF35:
+ 7406 09a8 72656663 		.string	"refcount"
+ 7406      6F756E74 
+ 7406      00
+ 7407              	.LASF119:
+ 7408 09b1 72634E53 		.string	"rcNS"
+ 7408      00
+ 7409              	.LASF262:
+ 7410 09b6 72635061 		.string	"rcParam"
+ 7410      72616D00 
+ 7411              	.LASF227:
+ 7412 09be 72634578 		.string	"rcExecuting"
+ 7412      65637574 
+ 7412      696E6700 
+ 7413              	.LASF123:
+ 7414 09ca 52435461 		.string	"RCTarget"
+ 7414      72676574 
+ 7414      00
+ 7415              	.LASF368:
+ 7416 09d3 4B436970 		.string	"KCipherVecDecryptV1Int"
+ 7416      68657256 
+ 7416      65634465 
+ 7416      63727970 
+ 7416      74563149 
+ 7417              	.LASF284:
+ 7418 09ea 72634372 		.string	"rcCrc"
+ 7418      6300
+ 7419              	.LASF26:
+ 7420 09f0 4442475F 		.string	"DBG_SEARCH"
+ 7420      53454152 
+ 7420      434800
+ 7421              	.LASF112:
+ 7422 09fb 7263584D 		.string	"rcXML"
+ 7422      4C00
+ 7423              	.LASF69:
+ 7424 0a01 656E6372 		.string	"encrypt_ctr"
+ 7424      7970745F 
+ 7424      63747200 
+ 7425              	.LASF400:
+ 7426 0a0d 4B436970 		.string	"KCipherVecClassName"
+ 7426      68657256 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 169
+
+
+ 7426      6563436C 
+ 7426      6173734E 
+ 7426      616D6500 
+ 7427              	.LASF28:
+ 7428 0a21 4442475F 		.string	"DBG_VFS"
+ 7428      56465300 
+ 7429              	.LASF74:
+ 7430 0a29 666C6F61 		.string	"float"
+ 7430      7400
+ 7431              	.LASF206:
+ 7432 0a2f 72635570 		.string	"rcUpdating"
+ 7432      64617469 
+ 7432      6E6700
+ 7433              	.LASF399:
+ 7434 0a3a 4B436970 		.string	"KCipherVecMake"
+ 7434      68657256 
+ 7434      65634D61 
+ 7434      6B6500
+ 7435              	.LASF233:
+ 7436 0a49 7263436F 		.string	"rcConverting"
+ 7436      6E766572 
+ 7436      74696E67 
+ 7436      00
+ 7437              	.LASF64:
+ 7438 0a56 64656372 		.string	"decrypt_pcbc"
+ 7438      7970745F 
+ 7438      70636263 
+ 7438      00
+ 7439              	.LASF98:
+ 7440 0a63 4B426C6F 		.string	"KBlockCipher"
+ 7440      636B4369 
+ 7440      70686572 
+ 7440      00
+ 7441              	.LASF176:
+ 7442 0a70 72634479 		.string	"rcDylib"
+ 7442      6C696200 
+ 7443              	.LASF325:
+ 7444 0a78 72635265 		.string	"rcReadonly"
+ 7444      61646F6E 
+ 7444      6C7900
+ 7445              	.LASF369:
+ 7446 0a83 4B436970 		.string	"KCipherVecEncrypt"
+ 7446      68657256 
+ 7446      6563456E 
+ 7446      63727970 
+ 7446      7400
+ 7447              	.LASF381:
+ 7448 0a95 4B436970 		.string	"KCipherVecDecryptCfb"
+ 7448      68657256 
+ 7448      65634465 
+ 7448      63727970 
+ 7448      74436662 
+ 7449              	.LASF7:
+ 7450 0aaa 756E7369 		.string	"unsigned int"
+ 7450      676E6564 
+ 7450      20696E74 
+ 7450      00
+
GAS LISTING /tmp/ccq6ONvw.s 			page 170
+
+
+ 7451              	.LASF326:
+ 7452 0ab7 72635772 		.string	"rcWriteonly"
+ 7452      6974656F 
+ 7452      6E6C7900 
+ 7453              	.LASF47:
+ 7454 0ac3 4B436970 		.string	"KCipher_vt"
+ 7454      6865725F 
+ 7454      767400
+ 7455              	.LASF320:
+ 7456 0ace 72634C6F 		.string	"rcLocked"
+ 7456      636B6564 
+ 7456      00
+ 7457              	.LASF202:
+ 7458 0ad7 72635072 		.string	"rcProjecting"
+ 7458      6F6A6563 
+ 7458      74696E67 
+ 7458      00
+ 7459              	.LASF107:
+ 7460 0ae4 72635053 		.string	"rcPS"
+ 7460      00
+ 7461              	.LASF292:
+ 7462 0ae9 72635265 		.string	"rcRefcount"
+ 7462      66636F75 
+ 7462      6E7400
+ 7463              	.LASF127:
+ 7464 0af4 7263546F 		.string	"rcTocEntry"
+ 7464      63456E74 
+ 7464      727900
+ 7465              	.LASF383:
+ 7466 0aff 4B436970 		.string	"KCipherVecDecryptOfb"
+ 7466      68657256 
+ 7466      65634465 
+ 7466      63727970 
+ 7466      744F6662 
+ 7467              	.LASF282:
+ 7468 0b14 72634D6F 		.string	"rcMode"
+ 7468      646500
+ 7469              	.LASF341:
+ 7470 0b1b 7263556E 		.string	"rcUnequal"
+ 7470      65717561 
+ 7470      6C00
+ 7471              	.LASF322:
+ 7472 0b25 72634465 		.string	"rcDetached"
+ 7472      74616368 
+ 7472      656400
+ 7473              	.LASF328:
+ 7474 0b30 7263496E 		.string	"rcInPlaceNotAllowed"
+ 7474      506C6163 
+ 7474      654E6F74 
+ 7474      416C6C6F 
+ 7474      77656400 
+ 7475              	.LASF270:
+ 7476 0b44 72635261 		.string	"rcRange"
+ 7476      6E676500 
+ 7477              	.LASF397:
+ 7478 0b4c 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 7478      652F726F 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 171
+
+
+ 7478      6461726D 
+ 7478      65722F73 
+ 7478      72615F73 
+ 7479              	.LASF280:
+ 7480 0b94 72634C61 		.string	"rcLastObject_v1_0"
+ 7480      73744F62 
+ 7480      6A656374 
+ 7480      5F76315F 
+ 7480      3000
+ 7481              	.LASF293:
+ 7482 0ba6 72634C61 		.string	"rcLastObject_v1_1"
+ 7482      73744F62 
+ 7482      6A656374 
+ 7482      5F76315F 
+ 7482      3100
+ 7483              	.LASF99:
+ 7484 0bb8 62797465 		.string	"byte"
+ 7484      00
+ 7485              	.LASF315:
+ 7486 0bbd 7263496E 		.string	"rcInsufficient"
+ 7486      73756666 
+ 7486      69636965 
+ 7486      6E7400
+ 7487              	.LASF246:
+ 7488 0bcc 72634C61 		.string	"rcLastContext_v1_0"
+ 7488      7374436F 
+ 7488      6E746578 
+ 7488      745F7631 
+ 7488      5F3000
+ 7489              	.LASF257:
+ 7490 0bdf 72634C61 		.string	"rcLastContext_v1_1"
+ 7490      7374436F 
+ 7490      6E746578 
+ 7490      745F7631 
+ 7490      5F3100
+ 7491              	.LASF390:
+ 7492 0bf2 4B436970 		.string	"KCipherVecInitNull"
+ 7492      68657256 
+ 7492      6563496E 
+ 7492      69744E75 
+ 7492      6C6C00
+ 7493              	.LASF39:
+ 7494 0c05 64656372 		.string	"decrypt_key"
+ 7494      7970745F 
+ 7494      6B657900 
+ 7495              	.LASF177:
+ 7496 0c11 72634578 		.string	"rcExpression"
+ 7496      70726573 
+ 7496      73696F6E 
+ 7496      00
+ 7497              	.LASF223:
+ 7498 0c1e 7263556E 		.string	"rcUnpacking"
+ 7498      7061636B 
+ 7498      696E6700 
+ 7499              	.LASF139:
+ 7500 0c2a 7263446F 		.string	"rcDoc"
+ 7500      6300
+
GAS LISTING /tmp/ccq6ONvw.s 			page 172
+
+
+ 7501              	.LASF380:
+ 7502 0c30 4B436970 		.string	"KCipherVecEncryptCfb"
+ 7502      68657256 
+ 7502      6563456E 
+ 7502      63727970 
+ 7502      74436662 
+ 7503              	.LASF13:
+ 7504 0c45 4442475F 		.string	"DBG_APP"
+ 7504      41505000 
+ 7505              	.LASF240:
+ 7506 0c4d 72634D75 		.string	"rcMultiplexing"
+ 7506      6C746970 
+ 7506      6C657869 
+ 7506      6E6700
+ 7507              	.LASF242:
+ 7508 0c5c 72635365 		.string	"rcSearching"
+ 7508      61726368 
+ 7508      696E6700 
+ 7509              	.LASF342:
+ 7510 0c68 72634661 		.string	"rcFailed"
+ 7510      696C6564 
+ 7510      00
+ 7511              	.LASF48:
+ 7512 0c71 4B436970 		.string	"KCipher_vt_v1"
+ 7512      6865725F 
+ 7512      76745F76 
+ 7512      3100
+ 7513              	.LASF361:
+ 7514 0c7f 4B436970 		.string	"KCipherVecSetDecryptIvec"
+ 7514      68657256 
+ 7514      65635365 
+ 7514      74446563 
+ 7514      72797074 
+ 7515              	.LASF307:
+ 7516 0c98 7263496E 		.string	"rcIncorrect"
+ 7516      636F7272 
+ 7516      65637400 
+ 7517              	.LASF146:
+ 7518 0ca4 72634675 		.string	"rcFunctParam"
+ 7518      6E637450 
+ 7518      6172616D 
+ 7518      00
+ 7519              	.LASF38:
+ 7520 0cb1 656E6372 		.string	"encrypt_key"
+ 7520      7970745F 
+ 7520      6B657900 
+ 7521              	.LASF271:
+ 7522 0cbd 7263436F 		.string	"rcConstraint"
+ 7522      6E737472 
+ 7522      61696E74 
+ 7522      00
+ 7523              	.LASF217:
+ 7524 0cca 72634672 		.string	"rcFreezing"
+ 7524      65657A69 
+ 7524      6E6700
+ 7525              	.LASF297:
+ 7526 0cd5 7263556E 		.string	"rcUnknown"
+
GAS LISTING /tmp/ccq6ONvw.s 			page 173
+
+
+ 7526      6B6E6F77 
+ 7526      6E00
+ 7527              	.LASF136:
+ 7528 0cdf 72634375 		.string	"rcCursor"
+ 7528      72736F72 
+ 7528      00
+ 7529              	.LASF294:
+ 7530 0ce8 52435374 		.string	"RCState"
+ 7530      61746500 
+ 7531              	.LASF82:
+ 7532 0cf0 4B426C6F 		.string	"KBlockCipherByte"
+ 7532      636B4369 
+ 7532      70686572 
+ 7532      42797465 
+ 7532      00
+ 7533              	.LASF142:
+ 7534 0d01 72634669 		.string	"rcFileDesc"
+ 7534      6C654465 
+ 7534      736300
+ 7535              	.LASF80:
+ 7536 0d0c 4B426C6F 		.string	"KBlockCipherByte_vt_v1"
+ 7536      636B4369 
+ 7536      70686572 
+ 7536      42797465 
+ 7536      5F76745F 
+ 7537              	.LASF334:
+ 7538 0d23 72634967 		.string	"rcIgnored"
+ 7538      6E6F7265 
+ 7538      6400
+ 7539              	.LASF91:
+ 7540 0d2d 655F6976 		.string	"e_ivec"
+ 7540      656300
+ 7541              	.LASF192:
+ 7542 0d34 72635265 		.string	"rcReleasing"
+ 7542      6C656173 
+ 7542      696E6700 
+ 7543              	.LASF115:
+ 7544 0d40 72634B46 		.string	"rcKFG"
+ 7544      4700
+ 7545              	.LASF273:
+ 7546 0d46 72634D65 		.string	"rcMessage"
+ 7546      73736167 
+ 7546      6500
+ 7547              	.LASF220:
+ 7548 0d50 7263466F 		.string	"rcFormatting"
+ 7548      726D6174 
+ 7548      74696E67 
+ 7548      00
+ 7549              	.LASF113:
+ 7550 0d5d 72635352 		.string	"rcSRA"
+ 7550      4100
+ 7551              	.LASF289:
+ 7552 0d63 7263456E 		.string	"rcEnvironment"
+ 7552      7669726F 
+ 7552      6E6D656E 
+ 7552      7400
+ 7553              	.LASF75:
+
GAS LISTING /tmp/ccq6ONvw.s 			page 174
+
+
+ 7554 0d71 6C6F6E67 		.string	"long long unsigned int"
+ 7554      206C6F6E 
+ 7554      6720756E 
+ 7554      7369676E 
+ 7554      65642069 
+ 7555              	.LASF50:
+ 7556 0d88 64657374 		.string	"destroy"
+ 7556      726F7900 
+ 7557              	.LASF171:
+ 7558 0d90 7263546F 		.string	"rcToken"
+ 7558      6B656E00 
+ 7559              	.LASF231:
+ 7560 0d98 7263546F 		.string	"rcTokenizing"
+ 7560      6B656E69 
+ 7560      7A696E67 
+ 7560      00
+ 7561              	.LASF16:
+ 7562 0da5 4442475F 		.string	"DBG_REF"
+ 7562      52454600 
+ 7563              	.LASF212:
+ 7564 0dad 72635772 		.string	"rcWriting"
+ 7564      6974696E 
+ 7564      6700
+ 7565              	.LASF188:
+ 7566 0db7 7263416C 		.string	"rcAllocating"
+ 7566      6C6F6361 
+ 7566      74696E67 
+ 7566      00
+ 7567              	.LASF174:
+ 7568 0dc4 72635479 		.string	"rcType"
+ 7568      706500
+ 7569              	.LASF275:
+ 7570 0dcb 72635265 		.string	"rcResources"
+ 7570      736F7572 
+ 7570      63657300 
+ 7571              	.LASF156:
+ 7572 0dd7 72634E61 		.string	"rcNamelist"
+ 7572      6D656C69 
+ 7572      737400
+ 7573              	.LASF340:
+ 7574 0de2 7263556E 		.string	"rcUndefined"
+ 7574      64656669 
+ 7574      6E656400 
+ 7575              	.LASF92:
+ 7576 0dee 645F6976 		.string	"d_ivec"
+ 7576      656300
+ 7577              	.LASF308:
+ 7578 0df5 7263496E 		.string	"rcInconsistent"
+ 7578      636F6E73 
+ 7578      69737465 
+ 7578      6E7400
+ 7579              	.LASF253:
+ 7580 0e04 72635265 		.string	"rcRetrieving"
+ 7580      74726965 
+ 7580      76696E67 
+ 7580      00
+ 7581              	.LASF58:
+
GAS LISTING /tmp/ccq6ONvw.s 			page 175
+
+
+ 7582 0e11 64656372 		.string	"decrypt"
+ 7582      79707400 
+ 7583              	.LASF49:
+ 7584 0e19 76657273 		.string	"version"
+ 7584      696F6E00 
+ 7585              	.LASF265:
+ 7586 0e21 72634E61 		.string	"rcName"
+ 7586      6D6500
+ 7587              	.LASF367:
+ 7588 0e28 4B436970 		.string	"KCipherVecEncryptV1Int"
+ 7588      68657256 
+ 7588      6563456E 
+ 7588      63727970 
+ 7588      74563149 
+ 7589              	.LASF54:
+ 7590 0e3f 7365745F 		.string	"set_decrypt_ivec"
+ 7590      64656372 
+ 7590      7970745F 
+ 7590      69766563 
+ 7590      00
+ 7591              	.LASF302:
+ 7592 0e50 72634E75 		.string	"rcNull"
+ 7592      6C6C00
+ 7593              	.LASF224:
+ 7594 0e57 7263456E 		.string	"rcEncoding"
+ 7594      636F6469 
+ 7594      6E6700
+ 7595              	.LASF143:
+ 7596 0e62 72634669 		.string	"rcFileFormat"
+ 7596      6C65466F 
+ 7596      726D6174 
+ 7596      00
+ 7597              	.LASF180:
+ 7598 0e6f 7263456E 		.string	"rcEncryptionKey"
+ 7598      63727970 
+ 7598      74696F6E 
+ 7598      4B657900 
+ 7599              	.LASF245:
+ 7600 0e7f 7263496E 		.string	"rcInflating"
+ 7600      666C6174 
+ 7600      696E6700 
+ 7601              	.LASF327:
+ 7602 0e8b 72634E6F 		.string	"rcNoPerm"
+ 7602      5065726D 
+ 7602      00
+ 7603              	.LASF353:
+ 7604 0e94 4B436970 		.string	"KCipherVecSetEncryptKey"
+ 7604      68657256 
+ 7604      65635365 
+ 7604      74456E63 
+ 7604      72797074 
+ 7605              	.LASF358:
+ 7606 0eac 4B436970 		.string	"KCipherVecSetDecryptKey"
+ 7606      68657256 
+ 7606      65635365 
+ 7606      74446563 
+ 7606      72797074 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 176
+
+
+ 7607              	.LASF215:
+ 7608 0ec4 72635265 		.string	"rcResetting"
+ 7608      73657474 
+ 7608      696E6700 
+ 7609              	.LASF36:
+ 7610 0ed0 626C6F63 		.string	"block_size"
+ 7610      6B5F7369 
+ 7610      7A6500
+ 7611              	.LASF163:
+ 7612 0edb 72635257 		.string	"rcRWLock"
+ 7612      4C6F636B 
+ 7612      00
+ 7613              	.LASF194:
+ 7614 0ee4 72634C69 		.string	"rcListing"
+ 7614      7374696E 
+ 7614      6700
+ 7615              	.LASF63:
+ 7616 0eee 656E6372 		.string	"encrypt_pcbc"
+ 7616      7970745F 
+ 7616      70636263 
+ 7616      00
+ 7617              	.LASF32:
+ 7618 0efb 4B526566 		.string	"KRefcount"
+ 7618      636F756E 
+ 7618      7400
+ 7619              	.LASF144:
+ 7620 0f05 72634675 		.string	"rcFunction"
+ 7620      6E637469 
+ 7620      6F6E00
+ 7621              	.LASF300:
+ 7622 0f10 7263556E 		.string	"rcUnrecognized"
+ 7622      7265636F 
+ 7622      676E697A 
+ 7622      656400
+ 7623              	.LASF87:
+ 7624 0f1f 6E756D62 		.string	"number_of_rounds"
+ 7624      65725F6F 
+ 7624      665F726F 
+ 7624      756E6473 
+ 7624      00
+ 7625              	.LASF116:
+ 7626 0f30 7263416C 		.string	"rcAlign"
+ 7626      69676E00 
+ 7627              	.LASF179:
+ 7628 0f38 72635072 		.string	"rcProduction"
+ 7628      6F647563 
+ 7628      74696F6E 
+ 7628      00
+ 7629              	.LASF169:
+ 7630 0f45 72635468 		.string	"rcThread"
+ 7630      72656164 
+ 7630      00
+ 7631              	.LASF37:
+ 7632 0f4e 6E616D65 		.string	"name"
+ 7632      00
+ 7633              	.LASF391:
+ 7634 0f53 6E756C6C 		.string	"null"
+
GAS LISTING /tmp/ccq6ONvw.s 			page 177
+
+
+ 7634      00
+ 7635              	.LASF52:
+ 7636 0f58 7365745F 		.string	"set_decrypt_key"
+ 7636      64656372 
+ 7636      7970745F 
+ 7636      6B657900 
+ 7637              	.LASF373:
+ 7638 0f68 706F7574 		.string	"pout"
+ 7638      00
+ 7639              	.LASF33:
+ 7640 0f6d 4B436970 		.string	"KCipher"
+ 7640      68657200 
+ 7641              	.LASF79:
+ 7642 0f75 4B426C6F 		.string	"KBlockCipher_vt"
+ 7642      636B4369 
+ 7642      70686572 
+ 7642      5F767400 
+ 7643              	.LASF286:
+ 7644 0f85 72635365 		.string	"rcSeed"
+ 7644      656400
+ 7645              	.LASF243:
+ 7646 0f8c 72634C6F 		.string	"rcLoading"
+ 7646      6164696E 
+ 7646      6700
+ 7647              	.LASF1:
+ 7648 0f96 73686F72 		.string	"short int"
+ 7648      7420696E 
+ 7648      7400
+ 7649              	.LASF364:
+ 7650 0fa0 4B436970 		.string	"KCipherVecSetDecryptCounterFunc"
+ 7650      68657256 
+ 7650      65635365 
+ 7650      74446563 
+ 7650      72797074 
+ 7651              	.LASF351:
+ 7652 0fc0 4B436970 		.string	"KCipherVecDestroy"
+ 7652      68657256 
+ 7652      65634465 
+ 7652      7374726F 
+ 7652      7900
+ 7653              	.LASF363:
+ 7654 0fd2 66756E63 		.string	"func"
+ 7654      00
+ 7655              	.LASF336:
+ 7656 0fd7 72634C61 		.string	"rcLastState_v1_0"
+ 7656      73745374 
+ 7656      6174655F 
+ 7656      76315F30 
+ 7656      00
+ 7657              	.LASF345:
+ 7658 0fe8 72634C61 		.string	"rcLastState_v1_1"
+ 7658      73745374 
+ 7658      6174655F 
+ 7658      76315F31 
+ 7658      00
+ 7659              	.LASF110:
+ 7660 0ff9 72635644 		.string	"rcVDB"
+
GAS LISTING /tmp/ccq6ONvw.s 			page 178
+
+
+ 7660      4200
+ 7661              	.LASF93:
+ 7662 0fff 43697068 		.string	"CipherNull"
+ 7662      65724E75 
+ 7662      6C6C00
+ 7663              	.LASF51:
+ 7664 100a 7365745F 		.string	"set_encrypt_key"
+ 7664      656E6372 
+ 7664      7970745F 
+ 7664      6B657900 
+ 7665              	.LASF108:
+ 7666 101a 72635846 		.string	"rcXF"
+ 7666      00
+ 7667              	.LASF71:
+ 7668 101f 4B436970 		.string	"KCipher_ptr"
+ 7668      6865725F 
+ 7668      70747200 
+ 7669              	.LASF89:
+ 7670 102b 655F6B65 		.string	"e_key"
+ 7670      7900
+ 7671              	.LASF191:
+ 7672 1031 72634465 		.string	"rcDestroying"
+ 7672      7374726F 
+ 7672      79696E67 
+ 7672      00
+ 7673              	.LASF296:
+ 7674 103e 7263446F 		.string	"rcDone"
+ 7674      6E6500
+ 7675              	.LASF126:
+ 7676 1045 7263546F 		.string	"rcToc"
+ 7676      6300
+ 7677              	.LASF43:
+ 7678 104b 64656372 		.string	"decrypt_counter_func"
+ 7678      7970745F 
+ 7678      636F756E 
+ 7678      7465725F 
+ 7678      66756E63 
+ 7679              	.LASF374:
+ 7680 1060 4B436970 		.string	"KCipherVecDecryptEcb"
+ 7680      68657256 
+ 7680      65634465 
+ 7680      63727970 
+ 7680      74456362 
+ 7681              	.LASF200:
+ 7682 1075 7263416C 		.string	"rcAliasing"
+ 7682      69617369 
+ 7682      6E6700
+ 7683              	.LASF161:
+ 7684 1080 72635072 		.string	"rcProcess"
+ 7684      6F636573 
+ 7684      7300
+ 7685              	.LASF259:
+ 7686 108a 72634E6F 		.string	"rcNoObj"
+ 7686      4F626A00 
+ 7687              	.LASF298:
+ 7688 1092 7263556E 		.string	"rcUnsupported"
+ 7688      73757070 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 179
+
+
+ 7688      6F727465 
+ 7688      6400
+ 7689              	.LASF237:
+ 7690 10a0 72634465 		.string	"rcDetaching"
+ 7690      74616368 
+ 7690      696E6700 
+ 7691              	.LASF134:
+ 7692 10ac 7263436F 		.string	"rcColumn"
+ 7692      6C756D6E 
+ 7692      00
+ 7693              	.LASF42:
+ 7694 10b5 656E6372 		.string	"encrypt_counter_func"
+ 7694      7970745F 
+ 7694      636F756E 
+ 7694      7465725F 
+ 7694      66756E63 
+ 7695              	.LASF299:
+ 7696 10ca 7263556E 		.string	"rcUnexpected"
+ 7696      65787065 
+ 7696      63746564 
+ 7696      00
+ 7697              	.LASF62:
+ 7698 10d7 64656372 		.string	"decrypt_cbc"
+ 7698      7970745F 
+ 7698      63626300 
+ 7699              	.LASF6:
+ 7700 10e3 75696E74 		.string	"uint32_t"
+ 7700      33325F74 
+ 7700      00
+ 7701              	.LASF120:
+ 7702 10ec 72635646 		.string	"rcVFS"
+ 7702      5300
+ 7703              	.LASF25:
+ 7704 10f2 4442475F 		.string	"DBG_KRYPTO"
+ 7704      4B525950 
+ 7704      544F00
+ 7705              	.LASF375:
+ 7706 10fd 4B436970 		.string	"KCipherVecEncryptCbc"
+ 7706      68657256 
+ 7706      6563456E 
+ 7706      63727970 
+ 7706      74436263 
+ 7707              	.LASF344:
+ 7708 1112 72635772 		.string	"rcWrongType"
+ 7708      6F6E6754 
+ 7708      79706500 
+ 7709              	.LASF279:
+ 7710 111e 72634C69 		.string	"rcLibrary"
+ 7710      62726172 
+ 7710      7900
+ 7711              	.LASF312:
+ 7712 1128 72634361 		.string	"rcCanceled"
+ 7712      6E63656C 
+ 7712      656400
+ 7713              	.LASF183:
+ 7714 1133 72634461 		.string	"rcData"
+ 7714      746100
+
GAS LISTING /tmp/ccq6ONvw.s 			page 180
+
+
+ 7715              	.LASF147:
+ 7716 113a 72634865 		.string	"rcHeader"
+ 7716      61646572 
+ 7716      00
+ 7717              	.LASF4:
+ 7718 1143 73686F72 		.string	"short unsigned int"
+ 7718      7420756E 
+ 7718      7369676E 
+ 7718      65642069 
+ 7718      6E7400
+ 7719              	.LASF137:
+ 7720 1156 72634461 		.string	"rcDatabase"
+ 7720      74616261 
+ 7720      736500
+ 7721              	.LASF61:
+ 7722 1161 656E6372 		.string	"encrypt_cbc"
+ 7722      7970745F 
+ 7722      63626300 
+ 7723              	.LASF213:
+ 7724 116d 7263436F 		.string	"rcCommitting"
+ 7724      6D6D6974 
+ 7724      74696E67 
+ 7724      00
+ 7725              	.LASF241:
+ 7726 117a 7263436C 		.string	"rcClassifying"
+ 7726      61737369 
+ 7726      6679696E 
+ 7726      6700
+ 7727              	.LASF172:
+ 7728 1188 72635472 		.string	"rcTree"
+ 7728      656500
+ 7729              	.LASF41:
+ 7730 118f 64656372 		.string	"decrypt_ivec"
+ 7730      7970745F 
+ 7730      69766563 
+ 7730      00
+ 7731              	.LASF30:
+ 7732 119c 4442475F 		.string	"DBG_ARGS"
+ 7732      41524753 
+ 7732      00
+ 7733              	.LASF201:
+ 7734 11a5 72635365 		.string	"rcSelecting"
+ 7734      6C656374 
+ 7734      696E6700 
+ 7735              	.LASF102:
+ 7736 11b1 72635465 		.string	"rcText"
+ 7736      787400
+ 7737              	.LASF338:
+ 7738 11b8 72634F75 		.string	"rcOutoforder"
+ 7738      746F666F 
+ 7738      72646572 
+ 7738      00
+ 7739              	.LASF386:
+ 7740 11c5 4B436970 		.string	"KCipherVecAllocAes"
+ 7740      68657256 
+ 7740      6563416C 
+ 7740      6C6F6341 
+
GAS LISTING /tmp/ccq6ONvw.s 			page 181
+
+
+ 7740      657300
+ 7741              	.LASF305:
+ 7742 11d8 7263496E 		.string	"rcInvalid"
+ 7742      76616C69 
+ 7742      6400
+ 7743              	.LASF252:
+ 7744 11e2 7263496E 		.string	"rcInitializing"
+ 7744      69746961 
+ 7744      6C697A69 
+ 7744      6E6700
+ 7745              	.LASF131:
+ 7746 11f1 7263426C 		.string	"rcBlob"
+ 7746      6F6200
+ 7747              	.LASF53:
+ 7748 11f8 7365745F 		.string	"set_encrypt_ivec"
+ 7748      656E6372 
+ 7748      7970745F 
+ 7748      69766563 
+ 7748      00
+ 7749              	.LASF377:
+ 7750 1209 74656D70 		.string	"temp"
+ 7750      00
+ 7751              	.LASF229:
+ 7752 120e 72635265 		.string	"rcReindexing"
+ 7752      696E6465 
+ 7752      78696E67 
+ 7752      00
+ 7753              	.LASF124:
+ 7754 121b 72634E6F 		.string	"rcNoTarg"
+ 7754      54617267 
+ 7754      00
+ 7755              	.LASF306:
+ 7756 1224 7263436F 		.string	"rcCorrupt"
+ 7756      72727570 
+ 7756      7400
+ 7757              	.LASF335:
+ 7758 122e 72634F75 		.string	"rcOutofrange"
+ 7758      746F6672 
+ 7758      616E6765 
+ 7758      00
+ 7759              	.LASF164:
+ 7760 123b 72635363 		.string	"rcSchema"
+ 7760      68656D61 
+ 7760      00
+ 7761              	.LASF346:
+ 7762 1244 43697068 		.string	"CipherVec_u"
+ 7762      65725665 
+ 7762      635F7500 
+ 7763              	.LASF160:
+ 7764 1250 72635061 		.string	"rcPath"
+ 7764      746800
+ 7765              	.LASF211:
+ 7766 1257 72635265 		.string	"rcReading"
+ 7766      6164696E 
+ 7766      6700
+ 7767              	.LASF81:
+ 7768 1261 6B65795F 		.string	"key_size"
+
GAS LISTING /tmp/ccq6ONvw.s 			page 182
+
+
+ 7768      73697A65 
+ 7768      00
+ 7769              	.LASF343:
+ 7770 126a 72634E6F 		.string	"rcNotAvailable"
+ 7770      74417661 
+ 7770      696C6162 
+ 7770      6C6500
+ 7771              	.LASF370:
+ 7772 1279 4B436970 		.string	"KCipherVecDecrypt"
+ 7772      68657256 
+ 7772      65634465 
+ 7772      63727970 
+ 7772      7400
+ 7773              	.LASF301:
+ 7774 128b 7263416D 		.string	"rcAmbiguous"
+ 7774      62696775 
+ 7774      6F757300 
+ 7775              		.ident	"GCC: (GNU) 4.4.2"
+ 7776              		.section	.note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/ccq6ONvw.s 			page 183
+
+
+DEFINED SYMBOLS
+                            *ABS*:0000000000000000 cipher-vec.c
+     /tmp/ccq6ONvw.s:14     .rodata:0000000000000000 KCipherVecClassName
+     /tmp/ccq6ONvw.s:18     .text:0000000000000000 CipherVecIn
+     /tmp/ccq6ONvw.s:48     .text:000000000000002b CipherVecOut
+     /tmp/ccq6ONvw.s:79     .text:0000000000000060 KCipherVecDestroy
+     /tmp/ccq6ONvw.s:127    .text:000000000000009a KCipherVecSetEncryptKey
+     /tmp/ccq6ONvw.s:2002   .rodata:00000000000002e0 __PRETTY_FUNCTION__.6562
+     /tmp/ccq6ONvw.s:2007   .rodata:0000000000000300 __func__.6564
+     /tmp/ccq6ONvw.s:212    .text:0000000000000184 KCipherVecSetDecryptKey
+     /tmp/ccq6ONvw.s:1992   .rodata:00000000000002a0 __PRETTY_FUNCTION__.6586
+     /tmp/ccq6ONvw.s:1997   .rodata:00000000000002c0 __func__.6588
+     /tmp/ccq6ONvw.s:301    .text:000000000000026e KCipherVecSetEncryptIvec
+     /tmp/ccq6ONvw.s:1987   .rodata:0000000000000280 __PRETTY_FUNCTION__.6608
+     /tmp/ccq6ONvw.s:352    .text:00000000000002f1 KCipherVecSetDecryptIvec
+     /tmp/ccq6ONvw.s:1982   .rodata:0000000000000260 __PRETTY_FUNCTION__.6621
+     /tmp/ccq6ONvw.s:407    .text:0000000000000374 KCipherVecSetEncryptCounterFunc
+     /tmp/ccq6ONvw.s:1977   .rodata:0000000000000240 __PRETTY_FUNCTION__.6634
+     /tmp/ccq6ONvw.s:452    .text:00000000000003e3 KCipherVecSetDecryptCounterFunc
+     /tmp/ccq6ONvw.s:1972   .rodata:0000000000000220 __PRETTY_FUNCTION__.6644
+     /tmp/ccq6ONvw.s:497    .text:0000000000000452 KCipherVecEncryptV1
+     /tmp/ccq6ONvw.s:525    .text:0000000000000479 KCipherVecDecryptV1
+     /tmp/ccq6ONvw.s:553    .text:00000000000004a0 KCipherVecEncryptV1Int
+     /tmp/ccq6ONvw.s:593    .text:00000000000004f3 KCipherVecDecryptV1Int
+     /tmp/ccq6ONvw.s:633    .text:0000000000000546 KCipherVecEncrypt
+     /tmp/ccq6ONvw.s:1962   .rodata:00000000000001d0 __func__.6694
+     /tmp/ccq6ONvw.s:682    .text:00000000000005aa KCipherVecDecrypt
+     /tmp/ccq6ONvw.s:1952   .rodata:0000000000000190 __func__.6710
+     /tmp/ccq6ONvw.s:733    .text:0000000000000615 KCipherVecEncryptEcb
+     /tmp/ccq6ONvw.s:789    .text:0000000000000685 KCipherVecDecryptEcb
+     /tmp/ccq6ONvw.s:845    .text:00000000000006f5 KCipherVecEncryptCbc
+     /tmp/ccq6ONvw.s:927    .text:00000000000007c3 KCipherVecDecryptCbc
+     /tmp/ccq6ONvw.s:1013   .text:0000000000000897 KCipherVecEncryptPcbc
+     /tmp/ccq6ONvw.s:1100   .text:0000000000000974 KCipherVecDecryptPcbc
+     /tmp/ccq6ONvw.s:1182   .text:0000000000000a3a KCipherVecEncryptCfb
+     /tmp/ccq6ONvw.s:1262   .text:0000000000000b00 KCipherVecDecryptCfb
+     /tmp/ccq6ONvw.s:1342   .text:0000000000000bc6 KCipherVecEncryptOfb
+     /tmp/ccq6ONvw.s:1422   .text:0000000000000c8c KCipherVecDecryptOfb
+     /tmp/ccq6ONvw.s:1457   .text:0000000000000cc5 KCipherVecEncryptCtr
+     /tmp/ccq6ONvw.s:1942   .rodata:0000000000000150 __func__.6944
+     /tmp/ccq6ONvw.s:1486   .text:0000000000000cfb KCipherVecDecryptCtr
+     /tmp/ccq6ONvw.s:1932   .rodata:0000000000000110 __func__.6954
+     /tmp/ccq6ONvw.s:1518   .data.rel.local:0000000000000000 KCipherVec_vt_v1
+     /tmp/ccq6ONvw.s:1544   .text:0000000000000d31 KCipherVecAllocAes
+     /tmp/ccq6ONvw.s:1922   .rodata:00000000000000d0 __func__.6964
+     /tmp/ccq6ONvw.s:1586   .text:0000000000000d8c KCipherVecInitAes
+     /tmp/ccq6ONvw.s:1647   .text:0000000000000e2a KCipherVecAllocNull
+     /tmp/ccq6ONvw.s:1912   .rodata:0000000000000090 __func__.6991
+     /tmp/ccq6ONvw.s:1689   .text:0000000000000e85 KCipherVecInitNull
+     /tmp/ccq6ONvw.s:1751   .text:0000000000000f1a KCipherVecMake
+     /tmp/ccq6ONvw.s:1903   .rodata:000000000000006e __func__.7019
+     /tmp/ccq6ONvw.s:1907   .rodata:000000000000007d __PRETTY_FUNCTION__.7018
+     /tmp/ccq6ONvw.s:1917   .rodata:00000000000000b0 __PRETTY_FUNCTION__.6990
+     /tmp/ccq6ONvw.s:1927   .rodata:00000000000000f0 __PRETTY_FUNCTION__.6963
+     /tmp/ccq6ONvw.s:1937   .rodata:0000000000000130 __PRETTY_FUNCTION__.6953
+     /tmp/ccq6ONvw.s:1947   .rodata:0000000000000170 __PRETTY_FUNCTION__.6943
+     /tmp/ccq6ONvw.s:1957   .rodata:00000000000001b0 __PRETTY_FUNCTION__.6709
+
GAS LISTING /tmp/ccq6ONvw.s 			page 184
+
+
+     /tmp/ccq6ONvw.s:1967   .rodata:00000000000001f0 __PRETTY_FUNCTION__.6693
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+memmove
+KCipherDestroy
+free
+__assert_fail
+SetRCFileFuncLine
+memcpy
+calloc
+KCipherInit
+KNullBlockCipherVecMake
+KAESBlockCipherVecMake
diff --git a/libs/krypto/cipher-vec.vecreg.pic.o.list b/libs/krypto/cipher-vec.vecreg.pic.o.list
new file mode 100644
index 0000000..408133d
--- /dev/null
+++ b/libs/krypto/cipher-vec.vecreg.pic.o.list
@@ -0,0 +1,10919 @@
+GAS LISTING /tmp/ccXzRABk.s 			page 1
+
+
+   1              		.file	"cipher-vec.c"
+   2              		.section	.debug_abbrev,"", at progbits
+   3              	.Ldebug_abbrev0:
+   4              		.section	.debug_info,"", at progbits
+   5              	.Ldebug_info0:
+   6              		.section	.debug_line,"", at progbits
+   7              	.Ldebug_line0:
+   8 0000 D9030000 		.text
+   8      0200F201 
+   8      00000101 
+   8      FB0E0D00 
+   8      01010101 
+   9              	.Ltext0:
+  10              	.globl KCipherVecRegClassName
+  11              		.section	.rodata
+  12              		.type	KCipherVecRegClassName, @object
+  13              		.size	KCipherVecRegClassName, 12
+  14              	KCipherVecRegClassName:
+  15 0000 43495048 		.string	"CIPHER_IMPL"
+  15      45525F49 
+  15      4D504C00 
+  16              		.text
+  17              		.type	CipherVecIn, @function
+  18              	CipherVecIn:
+  19              	.LFB590:
+  20              		.file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c"
+   1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /*===========================================================================
+   2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+   3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *                            PUBLIC DOMAIN NOTICE
+   4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *               National Center for Biotechnology Information
+   5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+   6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  This software/database is a "United States Government Work" under the
+   7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  terms of the United States Copyright Act.  It was written as part of
+   8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  the author's official duties as a United States Government employee and
+   9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  thus cannot be copyrighted.  This software/database is freely available
+  10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  to the public for use. The National Library of Medicine and the U.S.
+  11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  Government have not placed any restriction on its use or reproduction.
+  12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+  13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  Although all reasonable efforts have been taken to ensure the accuracy
+  14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  and reliability of the software and data, the NLM and the U.S.
+  15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  Government do not and cannot warrant the performance or results that
+  16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  may be obtained by using this software or data. The NLM and the U.S.
+  17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  Government disclaim all warranties, express or implied, including
+  18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  warranties of performance, merchantability or fitness for any particular
+  19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  purpose.
+  20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+  21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *  Please cite the author in any work or product based on this material.
+  22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+  23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * ===========================================================================
+  24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+  25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <krypto/extern.h>
+  27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/defs.h>
+  28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* CIPHER_IMPL and BLOCKCIPHER_IMPL are defined in this header */
+  30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "ncbi-priv.h"
+  31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* CIPHER_IMPL is used in this header */
+
GAS LISTING /tmp/ccXzRABk.s 			page 2
+
+
+  32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "cipher-impl.h"
+  33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* BLOCKCIPHER_IMPL is used in this header */
+  34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "blockcipher-impl.h"
+  35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "aes-ncbi-priv.h"
+  37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "null-ncbi-priv.h"
+  38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "cipher-priv.h"
+  39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include "blockcipher-priv.h"
+  40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <krypto/cipher.h>
+  42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <krypto/ciphermgr.h>
+  43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/defs.h>
+  45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/refcount.h>
+  46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/out.h>
+  47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <klib/rc.h>
+  48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <sysalloc.h>
+  50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <stdlib.h>
+  52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <string.h>
+  53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #include <assert.h>
+  54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** const char CMEMBER(ClassName)[] = CLASS_STRING(CIPHER_IMPL);
+  57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  58:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  59:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  60:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** struct CIPHER_IMPL
+  61:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+  62:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     KCipher dad;
+  63:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const KBlockCipherVec * block_cipher;
+  64:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** };
+  65:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  66:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** typedef union CipherVec_u
+  67:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+  68:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec   vec;
+  69:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherBlock block;
+  70:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** } CipherVec_u;
+  71:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  72:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /*
+  73:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Read a blocks worth of bytes into an AESState
+  74:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+  75:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ CipherVec CipherVecIn (const void * cvin)
+  76:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+  21              		.loc 1 76 0
+  22              		.cfi_startproc
+  23 0000 55       		pushq	%rbp
+  24              	.LCFI0:
+  25              		.cfi_def_cfa_offset 16
+  26 0001 4889E5   		movq	%rsp, %rbp
+  27              		.cfi_offset 6, -16
+  28              	.LCFI1:
+  29              		.cfi_def_cfa_register 6
+  30 0004 48897DF8 		movq	%rdi, -8(%rbp)
+  77:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if USE_VEC_REG
+  78:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     register CipherVec cv;
+
GAS LISTING /tmp/ccXzRABk.s 			page 3
+
+
+  79:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  80:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     __asm__ (
+  31              		.loc 1 80 0
+  32 0008 488B45F8 		movq	-8(%rbp), %rax
+  33 000c 4889C7   		movq	%rax, %rdi
+  34              	#APP
+  35              	# 80 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c" 1
+  81              	        "movdqu (%[a]),%[s]" : [s] "=x" (cv) : [a] "D" (cvin)
+  36              		movdqu (%rdi),%xmm0
+  37              	# 0 "" 2
+  38              	#NO_APP
+  39 0013 660F7F45 		movdqa	%xmm0, -32(%rbp)
+  39      E0
+  82:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         );
+  83:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  84:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return cv;
+  40              		.loc 1 84 0
+  41 0018 660F6F45 		movdqa	-32(%rbp), %xmm0
+  41      E0
+  85:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+  86:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec_u u;
+  87:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  88:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     memmove (&u.block, cvin, sizeof (u));
+  89:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return u.vec;
+  90:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+  91:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+  42              		.loc 1 91 0
+  43 001d C9       		leave
+  44 001e C3       		ret
+  45              		.cfi_endproc
+  46              	.LFE590:
+  47              		.size	CipherVecIn, .-CipherVecIn
+  48              		.type	CipherVecOut, @function
+  49              	CipherVecOut:
+  50              	.LFB591:
+  92:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  93:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  94:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+  95:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /*
+  96:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Write a block's worth of bytes out from an AESState
+  97:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+  98:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ void CipherVecOut (const CipherVec cv, void * cvout)
+  99:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+  51              		.loc 1 99 0
+  52              		.cfi_startproc
+  53 001f 55       		pushq	%rbp
+  54              	.LCFI2:
+  55              		.cfi_def_cfa_offset 16
+  56 0020 4889E5   		movq	%rsp, %rbp
+  57              		.cfi_offset 6, -16
+  58              	.LCFI3:
+  59              		.cfi_def_cfa_register 6
+  60 0023 660F7F45 		movdqa	%xmm0, -16(%rbp)
+  60      F0
+  61 0028 48897DE8 		movq	%rdi, -24(%rbp)
+ 100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if USE_VEC_REG
+ 101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     register CipherVec rcv = cv;
+
GAS LISTING /tmp/ccXzRABk.s 			page 4
+
+
+  62              		.loc 1 101 0
+  63 002c 660F6F45 		movdqa	-16(%rbp), %xmm0
+  63      F0
+  64 0031 660F7F45 		movdqa	%xmm0, -48(%rbp)
+  64      D0
+ 102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     __asm__ (
+  65              		.loc 1 103 0
+  66 0036 488B45E8 		movq	-24(%rbp), %rax
+  67 003a 660F6F45 		movdqa	-48(%rbp), %xmm0
+  67      D0
+  68 003f 4889C7   		movq	%rax, %rdi
+  69              	#APP
+  70              	# 103 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c" 1
+ 104              	        "movdqu %[s],(%[a])" : : [s] "x" (rcv), [a] "D" (cvout)
+ 105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         );
+ 106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec lcv = cv;
+ 108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     memmove (cvout, &lcv, sizeof (lcv));
+ 109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+  71              		movdqu %xmm0,(%rdi)
+  72              	# 0 "" 2
+  73              		.loc 1 110 0
+  74              	#NO_APP
+  75 0046 C9       		leave
+  76 0047 C3       		ret
+  77              		.cfi_endproc
+  78              	.LFE591:
+  79              		.size	CipherVecOut, .-CipherVecOut
+  80              		.type	KCipherVecRegDestroy, @function
+  81              	KCipherVecRegDestroy:
+  82              	.LFB592:
+ 111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(Destroy) (CIPHER_IMPL * self)
+ 114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+  83              		.loc 1 114 0
+  84              		.cfi_startproc
+  85 0048 55       		pushq	%rbp
+  86              	.LCFI4:
+  87              		.cfi_def_cfa_offset 16
+  88 0049 4889E5   		movq	%rsp, %rbp
+  89              		.cfi_offset 6, -16
+  90              	.LCFI5:
+  91              		.cfi_def_cfa_register 6
+  92 004c 4883EC20 		subq	$32, %rsp
+  93 0050 48897DE8 		movq	%rdi, -24(%rbp)
+ 115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     rc_t rc = 0;
+  94              		.loc 1 115 0
+  95 0054 C745FC00 		movl	$0, -4(%rbp)
+  95      000000
+ 116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     if (self)
+  96              		.loc 1 117 0
+  97 005b 48837DE8 		cmpq	$0, -24(%rbp)
+  97      00
+
GAS LISTING /tmp/ccXzRABk.s 			page 5
+
+
+  98 0060 741B     		je	.L6
+ 118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc =  KCipherDestroy (&self->dad);
+  99              		.loc 1 119 0
+ 100 0062 488B45E8 		movq	-24(%rbp), %rax
+ 101 0066 4889C7   		movq	%rax, %rdi
+ 102 0069 E8000000 		call	KCipherDestroy at PLT
+ 102      00
+ 103 006e 8945FC   		movl	%eax, -4(%rbp)
+ 120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         free (self);
+ 104              		.loc 1 120 0
+ 105 0071 488B45E8 		movq	-24(%rbp), %rax
+ 106 0075 4889C7   		movq	%rax, %rdi
+ 107 0078 E8000000 		call	free at PLT
+ 107      00
+ 108              	.L6:
+ 121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return rc;
+ 109              		.loc 1 122 0
+ 110 007d 8B45FC   		movl	-4(%rbp), %eax
+ 123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 111              		.loc 1 123 0
+ 112 0080 C9       		leave
+ 113 0081 C3       		ret
+ 114              		.cfi_endproc
+ 115              	.LFE592:
+ 116              		.size	KCipherVecRegDestroy, .-KCipherVecRegDestroy
+ 117              		.section	.rodata
+ 118 000c 00000000 		.align 8
+ 119              	.LC0:
+ 120 0010 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c"
+ 120      652F726F 
+ 120      6461726D 
+ 120      65722F73 
+ 120      72615F73 
+ 121              	.LC1:
+ 122 0048 73656C66 		.string	"self"
+ 122      00
+ 123              	.LC2:
+ 124 004d 75736572 		.string	"user_key"
+ 124      5F6B6579 
+ 124      00
+ 125              	.LC3:
+ 126 0056 75736572 		.string	"user_key_bits"
+ 126      5F6B6579 
+ 126      5F626974 
+ 126      7300
+ 127              		.text
+ 128              		.type	KCipherVecRegSetEncryptKey, @function
+ 129              	KCipherVecRegSetEncryptKey:
+ 130              	.LFB593:
+ 124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(SetEncryptKey)(CIPHER_IMPL * self,
+ 127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                   const char * user_key,
+ 128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                   uint32_t user_key_bits)
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+
GAS LISTING /tmp/ccXzRABk.s 			page 6
+
+
+ 131              		.loc 1 129 0
+ 132              		.cfi_startproc
+ 133 0082 55       		pushq	%rbp
+ 134              	.LCFI6:
+ 135              		.cfi_def_cfa_offset 16
+ 136 0083 4889E5   		movq	%rsp, %rbp
+ 137              		.cfi_offset 6, -16
+ 138              	.LCFI7:
+ 139              		.cfi_def_cfa_register 6
+ 140 0086 53       		pushq	%rbx
+ 141 0087 4883EC38 		subq	$56, %rsp
+ 142 008b 48897DD8 		movq	%rdi, -40(%rbp)
+ 143 008f 488975D0 		movq	%rsi, -48(%rbp)
+ 144 0093 8955CC   		movl	%edx, -52(%rbp)
+ 130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     rc_t rc = 0;
+ 145              		.loc 1 130 0
+ 146 0096 C745EC00 		movl	$0, -20(%rbp)
+ 146      000000
+ 131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (self);
+ 147              		.loc 1 132 0
+ 148 009d 48837DD8 		cmpq	$0, -40(%rbp)
+ 148      00
+ 149 00a2 751F     		jne	.L9
+ 150              		.cfi_offset 3, -24
+ 151 00a4 488D0D00 		leaq	__PRETTY_FUNCTION__.7218(%rip), %rcx
+ 151      000000
+ 152 00ab BA840000 		movl	$132, %edx
+ 152      00
+ 153 00b0 488D3500 		leaq	.LC0(%rip), %rsi
+ 153      000000
+ 154 00b7 488D3D00 		leaq	.LC1(%rip), %rdi
+ 154      000000
+ 155 00be E8000000 		call	__assert_fail at PLT
+ 155      00
+ 156              	.L9:
+ 133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (user_key);
+ 157              		.loc 1 133 0
+ 158 00c3 48837DD0 		cmpq	$0, -48(%rbp)
+ 158      00
+ 159 00c8 751F     		jne	.L10
+ 160 00ca 488D0D00 		leaq	__PRETTY_FUNCTION__.7218(%rip), %rcx
+ 160      000000
+ 161 00d1 BA850000 		movl	$133, %edx
+ 161      00
+ 162 00d6 488D3500 		leaq	.LC0(%rip), %rsi
+ 162      000000
+ 163 00dd 488D3D00 		leaq	.LC2(%rip), %rdi
+ 163      000000
+ 164 00e4 E8000000 		call	__assert_fail at PLT
+ 164      00
+ 165              	.L10:
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (user_key_bits);
+ 166              		.loc 1 134 0
+ 167 00e9 837DCC00 		cmpl	$0, -52(%rbp)
+ 168 00ed 751F     		jne	.L11
+ 169 00ef 488D0D00 		leaq	__PRETTY_FUNCTION__.7218(%rip), %rcx
+
GAS LISTING /tmp/ccXzRABk.s 			page 7
+
+
+ 169      000000
+ 170 00f6 BA860000 		movl	$134, %edx
+ 170      00
+ 171 00fb 488D3500 		leaq	.LC0(%rip), %rsi
+ 171      000000
+ 172 0102 488D3D00 		leaq	.LC3(%rip), %rdi
+ 172      000000
+ 173 0109 E8000000 		call	__assert_fail at PLT
+ 173      00
+ 174              	.L11:
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     switch (self->block_cipher->version.maj)
+ 175              		.loc 1 136 0
+ 176 010e 488B45D8 		movq	-40(%rbp), %rax
+ 177 0112 488B4048 		movq	72(%rax), %rax
+ 178 0116 8B00     		movl	(%rax), %eax
+ 179 0118 83F801   		cmpl	$1, %eax
+ 180 011b 7422     		je	.L13
+ 137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     default:
+ 139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = RC (rcKrypto, rcCipher, rcUpdating, rcBlockCipher, rcBadVersion);
+ 181              		.loc 1 139 0
+ 182 011d B98B0000 		movl	$139, %ecx
+ 182      00
+ 183 0122 488D1500 		leaq	__func__.7220(%rip), %rdx
+ 183      000000
+ 184 0129 488D3500 		leaq	.LC0(%rip), %rsi
+ 184      000000
+ 185 0130 BF088E04 		movl	$-2029744632, %edi
+ 185      87
+ 186 0135 E8000000 		call	SetRCFileFuncLine at PLT
+ 186      00
+ 187 013a 8945EC   		movl	%eax, -20(%rbp)
+ 140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 188              		.loc 1 140 0
+ 189 013d EB23     		jmp	.L14
+ 190              	.L13:
+ 141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     case 1:
+ 143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         self->block_cipher->v1.set_encrypt_key (self->dad.encrypt_key, user_key,
+ 191              		.loc 1 143 0
+ 192 013f 488B45D8 		movq	-40(%rbp), %rax
+ 193 0143 488B4048 		movq	72(%rax), %rax
+ 194 0147 488B5820 		movq	32(%rax), %rbx
+ 195 014b 488B45D8 		movq	-40(%rbp), %rax
+ 196 014f 488B4018 		movq	24(%rax), %rax
+ 197 0153 8B55CC   		movl	-52(%rbp), %edx
+ 198 0156 488B4DD0 		movq	-48(%rbp), %rcx
+ 199 015a 4889CE   		movq	%rcx, %rsi
+ 200 015d 4889C7   		movq	%rax, %rdi
+ 201 0160 FFD3     		call	*%rbx
+ 202              	.L14:
+ 144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                                 user_key_bits);
+ 145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return rc;
+ 203              		.loc 1 147 0
+
GAS LISTING /tmp/ccXzRABk.s 			page 8
+
+
+ 204 0162 8B45EC   		movl	-20(%rbp), %eax
+ 148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 205              		.loc 1 148 0
+ 206 0165 4883C438 		addq	$56, %rsp
+ 207 0169 5B       		popq	%rbx
+ 208 016a C9       		leave
+ 209 016b C3       		ret
+ 210              		.cfi_endproc
+ 211              	.LFE593:
+ 212              		.size	KCipherVecRegSetEncryptKey, .-KCipherVecRegSetEncryptKey
+ 213              		.type	KCipherVecRegSetDecryptKey, @function
+ 214              	KCipherVecRegSetDecryptKey:
+ 215              	.LFB594:
+ 149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(SetDecryptKey)(CIPHER_IMPL * self,
+ 152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                   const char * user_key,
+ 153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                   uint32_t user_key_bits)
+ 154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 216              		.loc 1 154 0
+ 217              		.cfi_startproc
+ 218 016c 55       		pushq	%rbp
+ 219              	.LCFI8:
+ 220              		.cfi_def_cfa_offset 16
+ 221 016d 4889E5   		movq	%rsp, %rbp
+ 222              		.cfi_offset 6, -16
+ 223              	.LCFI9:
+ 224              		.cfi_def_cfa_register 6
+ 225 0170 53       		pushq	%rbx
+ 226 0171 4883EC38 		subq	$56, %rsp
+ 227 0175 48897DD8 		movq	%rdi, -40(%rbp)
+ 228 0179 488975D0 		movq	%rsi, -48(%rbp)
+ 229 017d 8955CC   		movl	%edx, -52(%rbp)
+ 155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     rc_t rc = 0;
+ 230              		.loc 1 155 0
+ 231 0180 C745EC00 		movl	$0, -20(%rbp)
+ 231      000000
+ 156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (self);
+ 232              		.loc 1 157 0
+ 233 0187 48837DD8 		cmpq	$0, -40(%rbp)
+ 233      00
+ 234 018c 751F     		jne	.L17
+ 235              		.cfi_offset 3, -24
+ 236 018e 488D0D00 		leaq	__PRETTY_FUNCTION__.7242(%rip), %rcx
+ 236      000000
+ 237 0195 BA9D0000 		movl	$157, %edx
+ 237      00
+ 238 019a 488D3500 		leaq	.LC0(%rip), %rsi
+ 238      000000
+ 239 01a1 488D3D00 		leaq	.LC1(%rip), %rdi
+ 239      000000
+ 240 01a8 E8000000 		call	__assert_fail at PLT
+ 240      00
+ 241              	.L17:
+ 158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (user_key);
+ 242              		.loc 1 158 0
+
GAS LISTING /tmp/ccXzRABk.s 			page 9
+
+
+ 243 01ad 48837DD0 		cmpq	$0, -48(%rbp)
+ 243      00
+ 244 01b2 751F     		jne	.L18
+ 245 01b4 488D0D00 		leaq	__PRETTY_FUNCTION__.7242(%rip), %rcx
+ 245      000000
+ 246 01bb BA9E0000 		movl	$158, %edx
+ 246      00
+ 247 01c0 488D3500 		leaq	.LC0(%rip), %rsi
+ 247      000000
+ 248 01c7 488D3D00 		leaq	.LC2(%rip), %rdi
+ 248      000000
+ 249 01ce E8000000 		call	__assert_fail at PLT
+ 249      00
+ 250              	.L18:
+ 159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (user_key_bits);
+ 251              		.loc 1 159 0
+ 252 01d3 837DCC00 		cmpl	$0, -52(%rbp)
+ 253 01d7 751F     		jne	.L19
+ 254 01d9 488D0D00 		leaq	__PRETTY_FUNCTION__.7242(%rip), %rcx
+ 254      000000
+ 255 01e0 BA9F0000 		movl	$159, %edx
+ 255      00
+ 256 01e5 488D3500 		leaq	.LC0(%rip), %rsi
+ 256      000000
+ 257 01ec 488D3D00 		leaq	.LC3(%rip), %rdi
+ 257      000000
+ 258 01f3 E8000000 		call	__assert_fail at PLT
+ 258      00
+ 259              	.L19:
+ 160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     switch (self->block_cipher->version.maj)
+ 260              		.loc 1 161 0
+ 261 01f8 488B45D8 		movq	-40(%rbp), %rax
+ 262 01fc 488B4048 		movq	72(%rax), %rax
+ 263 0200 8B00     		movl	(%rax), %eax
+ 264 0202 83F801   		cmpl	$1, %eax
+ 265 0205 7422     		je	.L21
+ 162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     default:
+ 164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = RC (rcKrypto, rcCipher, rcUpdating, rcBlockCipher, rcBadVersion);
+ 266              		.loc 1 164 0
+ 267 0207 B9A40000 		movl	$164, %ecx
+ 267      00
+ 268 020c 488D1500 		leaq	__func__.7244(%rip), %rdx
+ 268      000000
+ 269 0213 488D3500 		leaq	.LC0(%rip), %rsi
+ 269      000000
+ 270 021a BF088E04 		movl	$-2029744632, %edi
+ 270      87
+ 271 021f E8000000 		call	SetRCFileFuncLine at PLT
+ 271      00
+ 272 0224 8945EC   		movl	%eax, -20(%rbp)
+ 165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 273              		.loc 1 165 0
+ 274 0227 EB23     		jmp	.L22
+ 275              	.L21:
+ 166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+
GAS LISTING /tmp/ccXzRABk.s 			page 10
+
+
+ 167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     case 1:
+ 168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         self->block_cipher->v1.set_decrypt_key (self->dad.decrypt_key, user_key,
+ 276              		.loc 1 168 0
+ 277 0229 488B45D8 		movq	-40(%rbp), %rax
+ 278 022d 488B4048 		movq	72(%rax), %rax
+ 279 0231 488B5828 		movq	40(%rax), %rbx
+ 280 0235 488B45D8 		movq	-40(%rbp), %rax
+ 281 0239 488B4020 		movq	32(%rax), %rax
+ 282 023d 8B55CC   		movl	-52(%rbp), %edx
+ 283 0240 488B4DD0 		movq	-48(%rbp), %rcx
+ 284 0244 4889CE   		movq	%rcx, %rsi
+ 285 0247 4889C7   		movq	%rax, %rdi
+ 286 024a FFD3     		call	*%rbx
+ 287              	.L22:
+ 169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                                     user_key_bits);
+ 170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return rc;
+ 288              		.loc 1 172 0
+ 289 024c 8B45EC   		movl	-20(%rbp), %eax
+ 173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 290              		.loc 1 173 0
+ 291 024f 4883C438 		addq	$56, %rsp
+ 292 0253 5B       		popq	%rbx
+ 293 0254 C9       		leave
+ 294 0255 C3       		ret
+ 295              		.cfi_endproc
+ 296              	.LFE594:
+ 297              		.size	KCipherVecRegSetDecryptKey, .-KCipherVecRegSetDecryptKey
+ 298              		.section	.rodata
+ 299              	.LC4:
+ 300 0064 69766563 		.string	"ivec"
+ 300      00
+ 301              		.text
+ 302              		.type	KCipherVecRegSetEncryptIvec, @function
+ 303              	KCipherVecRegSetEncryptIvec:
+ 304              	.LFB595:
+ 174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetEncryptIvec) (CIPHER_IMPL * self,
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                              const void * ivec)
+ 179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 305              		.loc 1 179 0
+ 306              		.cfi_startproc
+ 307 0256 55       		pushq	%rbp
+ 308              	.LCFI10:
+ 309              		.cfi_def_cfa_offset 16
+ 310 0257 4889E5   		movq	%rsp, %rbp
+ 311              		.cfi_offset 6, -16
+ 312              	.LCFI11:
+ 313              		.cfi_def_cfa_register 6
+ 314 025a 4883EC10 		subq	$16, %rsp
+ 315 025e 48897DF8 		movq	%rdi, -8(%rbp)
+ 316 0262 488975F0 		movq	%rsi, -16(%rbp)
+ 180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (self);
+ 317              		.loc 1 180 0
+
GAS LISTING /tmp/ccXzRABk.s 			page 11
+
+
+ 318 0266 48837DF8 		cmpq	$0, -8(%rbp)
+ 318      00
+ 319 026b 751F     		jne	.L25
+ 320 026d 488D0D00 		leaq	__PRETTY_FUNCTION__.7264(%rip), %rcx
+ 320      000000
+ 321 0274 BAB40000 		movl	$180, %edx
+ 321      00
+ 322 0279 488D3500 		leaq	.LC0(%rip), %rsi
+ 322      000000
+ 323 0280 488D3D00 		leaq	.LC1(%rip), %rdi
+ 323      000000
+ 324 0287 E8000000 		call	__assert_fail at PLT
+ 324      00
+ 325              	.L25:
+ 181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (ivec);
+ 326              		.loc 1 181 0
+ 327 028c 48837DF0 		cmpq	$0, -16(%rbp)
+ 327      00
+ 328 0291 751F     		jne	.L26
+ 329 0293 488D0D00 		leaq	__PRETTY_FUNCTION__.7264(%rip), %rcx
+ 329      000000
+ 330 029a BAB50000 		movl	$181, %edx
+ 330      00
+ 331 029f 488D3500 		leaq	.LC0(%rip), %rsi
+ 331      000000
+ 332 02a6 488D3D00 		leaq	.LC4(%rip), %rdi
+ 332      000000
+ 333 02ad E8000000 		call	__assert_fail at PLT
+ 333      00
+ 334              	.L26:
+ 182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     memcpy (self->dad.encrypt_ivec, ivec, self->dad.block_size);
+ 335              		.loc 1 183 0
+ 336 02b2 488B45F8 		movq	-8(%rbp), %rax
+ 337 02b6 8B4004   		movl	4(%rax), %eax
+ 338 02b9 89C2     		mov	%eax, %edx
+ 339 02bb 488B45F8 		movq	-8(%rbp), %rax
+ 340 02bf 488B4028 		movq	40(%rax), %rax
+ 341 02c3 488B4DF0 		movq	-16(%rbp), %rcx
+ 342 02c7 4889CE   		movq	%rcx, %rsi
+ 343 02ca 4889C7   		movq	%rax, %rdi
+ 344 02cd E8000000 		call	memcpy at PLT
+ 344      00
+ 184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 345              		.loc 1 185 0
+ 346 02d2 B8000000 		movl	$0, %eax
+ 346      00
+ 186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 347              		.loc 1 186 0
+ 348 02d7 C9       		leave
+ 349 02d8 C3       		ret
+ 350              		.cfi_endproc
+ 351              	.LFE595:
+ 352              		.size	KCipherVecRegSetEncryptIvec, .-KCipherVecRegSetEncryptIvec
+ 353              		.type	KCipherVecRegSetDecryptIvec, @function
+ 354              	KCipherVecRegSetDecryptIvec:
+
GAS LISTING /tmp/ccXzRABk.s 			page 12
+
+
+ 355              	.LFB596:
+ 187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetDecryptIvec) (CIPHER_IMPL * self,
+ 191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                              const void * ivec)
+ 192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 356              		.loc 1 192 0
+ 357              		.cfi_startproc
+ 358 02d9 55       		pushq	%rbp
+ 359              	.LCFI12:
+ 360              		.cfi_def_cfa_offset 16
+ 361 02da 4889E5   		movq	%rsp, %rbp
+ 362              		.cfi_offset 6, -16
+ 363              	.LCFI13:
+ 364              		.cfi_def_cfa_register 6
+ 365 02dd 4883EC10 		subq	$16, %rsp
+ 366 02e1 48897DF8 		movq	%rdi, -8(%rbp)
+ 367 02e5 488975F0 		movq	%rsi, -16(%rbp)
+ 193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (self);
+ 368              		.loc 1 193 0
+ 369 02e9 48837DF8 		cmpq	$0, -8(%rbp)
+ 369      00
+ 370 02ee 751F     		jne	.L29
+ 371 02f0 488D0D00 		leaq	__PRETTY_FUNCTION__.7277(%rip), %rcx
+ 371      000000
+ 372 02f7 BAC10000 		movl	$193, %edx
+ 372      00
+ 373 02fc 488D3500 		leaq	.LC0(%rip), %rsi
+ 373      000000
+ 374 0303 488D3D00 		leaq	.LC1(%rip), %rdi
+ 374      000000
+ 375 030a E8000000 		call	__assert_fail at PLT
+ 375      00
+ 376              	.L29:
+ 194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (ivec);
+ 377              		.loc 1 194 0
+ 378 030f 48837DF0 		cmpq	$0, -16(%rbp)
+ 378      00
+ 379 0314 751F     		jne	.L30
+ 380 0316 488D0D00 		leaq	__PRETTY_FUNCTION__.7277(%rip), %rcx
+ 380      000000
+ 381 031d BAC20000 		movl	$194, %edx
+ 381      00
+ 382 0322 488D3500 		leaq	.LC0(%rip), %rsi
+ 382      000000
+ 383 0329 488D3D00 		leaq	.LC4(%rip), %rdi
+ 383      000000
+ 384 0330 E8000000 		call	__assert_fail at PLT
+ 384      00
+ 385              	.L30:
+ 195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     memcpy (self->dad.decrypt_ivec, ivec, self->dad.block_size);
+ 386              		.loc 1 196 0
+ 387 0335 488B45F8 		movq	-8(%rbp), %rax
+ 388 0339 8B4004   		movl	4(%rax), %eax
+ 389 033c 89C2     		mov	%eax, %edx
+
GAS LISTING /tmp/ccXzRABk.s 			page 13
+
+
+ 390 033e 488B45F8 		movq	-8(%rbp), %rax
+ 391 0342 488B4030 		movq	48(%rax), %rax
+ 392 0346 488B4DF0 		movq	-16(%rbp), %rcx
+ 393 034a 4889CE   		movq	%rcx, %rsi
+ 394 034d 4889C7   		movq	%rax, %rdi
+ 395 0350 E8000000 		call	memcpy at PLT
+ 395      00
+ 197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 396              		.loc 1 198 0
+ 397 0355 B8000000 		movl	$0, %eax
+ 397      00
+ 199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 398              		.loc 1 199 0
+ 399 035a C9       		leave
+ 400 035b C3       		ret
+ 401              		.cfi_endproc
+ 402              	.LFE596:
+ 403              		.size	KCipherVecRegSetDecryptIvec, .-KCipherVecRegSetDecryptIvec
+ 404              		.section	.rodata
+ 405              	.LC5:
+ 406 0069 66756E63 		.string	"func"
+ 406      00
+ 407              		.text
+ 408              		.type	KCipherVecRegSetEncryptCounterFunc, @function
+ 409              	KCipherVecRegSetEncryptCounterFunc:
+ 410              	.LFB597:
+ 200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetEncryptCounterFunc) (CIPHER_IMPL * self,
+ 204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                     cipher_ctr_func func)
+ 205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 411              		.loc 1 205 0
+ 412              		.cfi_startproc
+ 413 035c 55       		pushq	%rbp
+ 414              	.LCFI14:
+ 415              		.cfi_def_cfa_offset 16
+ 416 035d 4889E5   		movq	%rsp, %rbp
+ 417              		.cfi_offset 6, -16
+ 418              	.LCFI15:
+ 419              		.cfi_def_cfa_register 6
+ 420 0360 4883EC10 		subq	$16, %rsp
+ 421 0364 48897DF8 		movq	%rdi, -8(%rbp)
+ 422 0368 488975F0 		movq	%rsi, -16(%rbp)
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (self);
+ 423              		.loc 1 206 0
+ 424 036c 48837DF8 		cmpq	$0, -8(%rbp)
+ 424      00
+ 425 0371 751F     		jne	.L33
+ 426 0373 488D0D00 		leaq	__PRETTY_FUNCTION__.7290(%rip), %rcx
+ 426      000000
+ 427 037a BACE0000 		movl	$206, %edx
+ 427      00
+ 428 037f 488D3500 		leaq	.LC0(%rip), %rsi
+ 428      000000
+ 429 0386 488D3D00 		leaq	.LC1(%rip), %rdi
+
GAS LISTING /tmp/ccXzRABk.s 			page 14
+
+
+ 429      000000
+ 430 038d E8000000 		call	__assert_fail at PLT
+ 430      00
+ 431              	.L33:
+ 207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (func);
+ 432              		.loc 1 207 0
+ 433 0392 48837DF0 		cmpq	$0, -16(%rbp)
+ 433      00
+ 434 0397 751F     		jne	.L34
+ 435 0399 488D0D00 		leaq	__PRETTY_FUNCTION__.7290(%rip), %rcx
+ 435      000000
+ 436 03a0 BACF0000 		movl	$207, %edx
+ 436      00
+ 437 03a5 488D3500 		leaq	.LC0(%rip), %rsi
+ 437      000000
+ 438 03ac 488D3D00 		leaq	.LC5(%rip), %rdi
+ 438      000000
+ 439 03b3 E8000000 		call	__assert_fail at PLT
+ 439      00
+ 440              	.L34:
+ 208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     self->dad.encrypt_counter_func = func;
+ 441              		.loc 1 209 0
+ 442 03b8 488B45F8 		movq	-8(%rbp), %rax
+ 443 03bc 488B55F0 		movq	-16(%rbp), %rdx
+ 444 03c0 48895038 		movq	%rdx, 56(%rax)
+ 210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 445              		.loc 1 211 0
+ 446 03c4 B8000000 		movl	$0, %eax
+ 446      00
+ 212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 447              		.loc 1 212 0
+ 448 03c9 C9       		leave
+ 449 03ca C3       		ret
+ 450              		.cfi_endproc
+ 451              	.LFE597:
+ 452              		.size	KCipherVecRegSetEncryptCounterFunc, .-KCipherVecRegSetEncryptCounterFunc
+ 453              		.type	KCipherVecRegSetDecryptCounterFunc, @function
+ 454              	KCipherVecRegSetDecryptCounterFunc:
+ 455              	.LFB598:
+ 213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(SetDecryptCounterFunc) (CIPHER_IMPL * self,
+ 217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                     cipher_ctr_func func)
+ 218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 456              		.loc 1 218 0
+ 457              		.cfi_startproc
+ 458 03cb 55       		pushq	%rbp
+ 459              	.LCFI16:
+ 460              		.cfi_def_cfa_offset 16
+ 461 03cc 4889E5   		movq	%rsp, %rbp
+ 462              		.cfi_offset 6, -16
+ 463              	.LCFI17:
+ 464              		.cfi_def_cfa_register 6
+ 465 03cf 4883EC10 		subq	$16, %rsp
+
GAS LISTING /tmp/ccXzRABk.s 			page 15
+
+
+ 466 03d3 48897DF8 		movq	%rdi, -8(%rbp)
+ 467 03d7 488975F0 		movq	%rsi, -16(%rbp)
+ 219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (self);
+ 468              		.loc 1 219 0
+ 469 03db 48837DF8 		cmpq	$0, -8(%rbp)
+ 469      00
+ 470 03e0 751F     		jne	.L37
+ 471 03e2 488D0D00 		leaq	__PRETTY_FUNCTION__.7300(%rip), %rcx
+ 471      000000
+ 472 03e9 BADB0000 		movl	$219, %edx
+ 472      00
+ 473 03ee 488D3500 		leaq	.LC0(%rip), %rsi
+ 473      000000
+ 474 03f5 488D3D00 		leaq	.LC1(%rip), %rdi
+ 474      000000
+ 475 03fc E8000000 		call	__assert_fail at PLT
+ 475      00
+ 476              	.L37:
+ 220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     assert (func);
+ 477              		.loc 1 220 0
+ 478 0401 48837DF0 		cmpq	$0, -16(%rbp)
+ 478      00
+ 479 0406 751F     		jne	.L38
+ 480 0408 488D0D00 		leaq	__PRETTY_FUNCTION__.7300(%rip), %rcx
+ 480      000000
+ 481 040f BADC0000 		movl	$220, %edx
+ 481      00
+ 482 0414 488D3500 		leaq	.LC0(%rip), %rsi
+ 482      000000
+ 483 041b 488D3D00 		leaq	.LC5(%rip), %rdi
+ 483      000000
+ 484 0422 E8000000 		call	__assert_fail at PLT
+ 484      00
+ 485              	.L38:
+ 221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     self->dad.decrypt_counter_func = func;
+ 486              		.loc 1 222 0
+ 487 0427 488B45F8 		movq	-8(%rbp), %rax
+ 488 042b 488B55F0 		movq	-16(%rbp), %rdx
+ 489 042f 48895040 		movq	%rdx, 64(%rax)
+ 223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 490              		.loc 1 224 0
+ 491 0433 B8000000 		movl	$0, %eax
+ 491      00
+ 225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 492              		.loc 1 225 0
+ 493 0438 C9       		leave
+ 494 0439 C3       		ret
+ 495              		.cfi_endproc
+ 496              	.LFE598:
+ 497              		.size	KCipherVecRegSetDecryptCounterFunc, .-KCipherVecRegSetDecryptCounterFunc
+ 498              		.type	KCipherVecRegEncryptV1, @function
+ 499              	KCipherVecRegEncryptV1:
+ 500              	.LFB599:
+ 226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+
GAS LISTING /tmp/ccXzRABk.s 			page 16
+
+
+ 228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ CipherVec CMEMBER(EncryptV1)(const CIPHER_IMPL * self,
+ 229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                               register CipherVec cv)
+ 230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 501              		.loc 1 230 0
+ 502              		.cfi_startproc
+ 503 043a 55       		pushq	%rbp
+ 504              	.LCFI18:
+ 505              		.cfi_def_cfa_offset 16
+ 506 043b 4889E5   		movq	%rsp, %rbp
+ 507              		.cfi_offset 6, -16
+ 508              	.LCFI19:
+ 509              		.cfi_def_cfa_register 6
+ 510 043e 4883EC10 		subq	$16, %rsp
+ 511 0442 48897DF8 		movq	%rdi, -8(%rbp)
+ 231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return self->block_cipher->v1.encrypt (cv, self->dad.encrypt_key);
+ 512              		.loc 1 231 0
+ 513 0446 488B45F8 		movq	-8(%rbp), %rax
+ 514 044a 488B4048 		movq	72(%rax), %rax
+ 515 044e 488B5030 		movq	48(%rax), %rdx
+ 516 0452 488B45F8 		movq	-8(%rbp), %rax
+ 517 0456 488B4018 		movq	24(%rax), %rax
+ 518 045a 4889C7   		movq	%rax, %rdi
+ 519 045d FFD2     		call	*%rdx
+ 232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 520              		.loc 1 232 0
+ 521 045f C9       		leave
+ 522 0460 C3       		ret
+ 523              		.cfi_endproc
+ 524              	.LFE599:
+ 525              		.size	KCipherVecRegEncryptV1, .-KCipherVecRegEncryptV1
+ 526              		.type	KCipherVecRegDecryptV1, @function
+ 527              	KCipherVecRegDecryptV1:
+ 528              	.LFB600:
+ 233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ CipherVec  CMEMBER(DecryptV1)(const CIPHER_IMPL * self,
+ 236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                               register CipherVec cv)
+ 237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 529              		.loc 1 237 0
+ 530              		.cfi_startproc
+ 531 0461 55       		pushq	%rbp
+ 532              	.LCFI20:
+ 533              		.cfi_def_cfa_offset 16
+ 534 0462 4889E5   		movq	%rsp, %rbp
+ 535              		.cfi_offset 6, -16
+ 536              	.LCFI21:
+ 537              		.cfi_def_cfa_register 6
+ 538 0465 4883EC10 		subq	$16, %rsp
+ 539 0469 48897DF8 		movq	%rdi, -8(%rbp)
+ 238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return self->block_cipher->v1.decrypt (cv, self->dad.decrypt_key);
+ 540              		.loc 1 238 0
+ 541 046d 488B45F8 		movq	-8(%rbp), %rax
+ 542 0471 488B4048 		movq	72(%rax), %rax
+ 543 0475 488B5038 		movq	56(%rax), %rdx
+ 544 0479 488B45F8 		movq	-8(%rbp), %rax
+ 545 047d 488B4020 		movq	32(%rax), %rax
+ 546 0481 4889C7   		movq	%rax, %rdi
+
GAS LISTING /tmp/ccXzRABk.s 			page 17
+
+
+ 547 0484 FFD2     		call	*%rdx
+ 239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 548              		.loc 1 239 0
+ 549 0486 C9       		leave
+ 550 0487 C3       		ret
+ 551              		.cfi_endproc
+ 552              	.LFE600:
+ 553              		.size	KCipherVecRegDecryptV1, .-KCipherVecRegDecryptV1
+ 554              		.type	KCipherVecRegEncryptV1Int, @function
+ 555              	KCipherVecRegEncryptV1Int:
+ 556              	.LFB601:
+ 240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ rc_t CMEMBER(EncryptV1Int)(const CIPHER_IMPL * self,
+ 243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                             const void * in, void * out)
+ 244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 557              		.loc 1 244 0
+ 558              		.cfi_startproc
+ 559 0488 55       		pushq	%rbp
+ 560              	.LCFI22:
+ 561              		.cfi_def_cfa_offset 16
+ 562 0489 4889E5   		movq	%rsp, %rbp
+ 563              		.cfi_offset 6, -16
+ 564              	.LCFI23:
+ 565              		.cfi_def_cfa_register 6
+ 566 048c 4883EC30 		subq	$48, %rsp
+ 567 0490 48897DE8 		movq	%rdi, -24(%rbp)
+ 568 0494 488975E0 		movq	%rsi, -32(%rbp)
+ 569 0498 488955D8 		movq	%rdx, -40(%rbp)
+ 245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     cv = CipherVecIn(in);
+ 570              		.loc 1 247 0
+ 571 049c 488B45E0 		movq	-32(%rbp), %rax
+ 572 04a0 4889C7   		movq	%rax, %rdi
+ 573 04a3 E858FBFF 		call	CipherVecIn
+ 573      FF
+ 574 04a8 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 574      F0
+ 248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     cv = CMEMBER(EncryptV1)(self, cv);
+ 575              		.loc 1 248 0
+ 576 04ad F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 576      F0
+ 577 04b2 488B45E8 		movq	-24(%rbp), %rax
+ 578 04b6 4889C7   		movq	%rax, %rdi
+ 579 04b9 E87CFFFF 		call	KCipherVecRegEncryptV1
+ 579      FF
+ 580 04be F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 580      F0
+ 249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVecOut(cv, out);
+ 581              		.loc 1 249 0
+ 582 04c3 488B45D8 		movq	-40(%rbp), %rax
+ 583 04c7 F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 583      F0
+ 584 04cc 4889C7   		movq	%rax, %rdi
+ 585 04cf E84BFBFF 		call	CipherVecOut
+ 585      FF
+
GAS LISTING /tmp/ccXzRABk.s 			page 18
+
+
+ 250:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 586              		.loc 1 250 0
+ 587 04d4 B8000000 		movl	$0, %eax
+ 587      00
+ 251:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 588              		.loc 1 251 0
+ 589 04d9 C9       		leave
+ 590 04da C3       		ret
+ 591              		.cfi_endproc
+ 592              	.LFE601:
+ 593              		.size	KCipherVecRegEncryptV1Int, .-KCipherVecRegEncryptV1Int
+ 594              		.type	KCipherVecRegDecryptV1Int, @function
+ 595              	KCipherVecRegDecryptV1Int:
+ 596              	.LFB602:
+ 252:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 253:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 254:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__ rc_t CMEMBER(DecryptV1Int)(const CIPHER_IMPL * self,
+ 255:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                                             const void * in, void * out)
+ 256:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 597              		.loc 1 256 0
+ 598              		.cfi_startproc
+ 599 04db 55       		pushq	%rbp
+ 600              	.LCFI24:
+ 601              		.cfi_def_cfa_offset 16
+ 602 04dc 4889E5   		movq	%rsp, %rbp
+ 603              		.cfi_offset 6, -16
+ 604              	.LCFI25:
+ 605              		.cfi_def_cfa_register 6
+ 606 04df 4883EC30 		subq	$48, %rsp
+ 607 04e3 48897DE8 		movq	%rdi, -24(%rbp)
+ 608 04e7 488975E0 		movq	%rsi, -32(%rbp)
+ 609 04eb 488955D8 		movq	%rdx, -40(%rbp)
+ 257:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 258:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 259:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     cv = CipherVecIn(in);
+ 610              		.loc 1 259 0
+ 611 04ef 488B45E0 		movq	-32(%rbp), %rax
+ 612 04f3 4889C7   		movq	%rax, %rdi
+ 613 04f6 E805FBFF 		call	CipherVecIn
+ 613      FF
+ 614 04fb F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 614      F0
+ 260:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     cv = CMEMBER(DecryptV1)(self, cv);
+ 615              		.loc 1 260 0
+ 616 0500 F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 616      F0
+ 617 0505 488B45E8 		movq	-24(%rbp), %rax
+ 618 0509 4889C7   		movq	%rax, %rdi
+ 619 050c E850FFFF 		call	KCipherVecRegDecryptV1
+ 619      FF
+ 620 0511 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 620      F0
+ 261:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVecOut(cv, out);
+ 621              		.loc 1 261 0
+ 622 0516 488B45D8 		movq	-40(%rbp), %rax
+ 623 051a F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 623      F0
+
GAS LISTING /tmp/ccXzRABk.s 			page 19
+
+
+ 624 051f 4889C7   		movq	%rax, %rdi
+ 625 0522 E8F8FAFF 		call	CipherVecOut
+ 625      FF
+ 262:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 626              		.loc 1 262 0
+ 627 0527 B8000000 		movl	$0, %eax
+ 627      00
+ 263:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 628              		.loc 1 263 0
+ 629 052c C9       		leave
+ 630 052d C3       		ret
+ 631              		.cfi_endproc
+ 632              	.LFE602:
+ 633              		.size	KCipherVecRegDecryptV1Int, .-KCipherVecRegDecryptV1Int
+ 634              		.type	KCipherVecRegEncrypt, @function
+ 635              	KCipherVecRegEncrypt:
+ 636              	.LFB603:
+ 264:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 265:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 266:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static rc_t CMEMBER(Encrypt) (const CIPHER_IMPL * self, const void * in, void * out)
+ 267:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 637              		.loc 1 267 0
+ 638              		.cfi_startproc
+ 639 052e 55       		pushq	%rbp
+ 640              	.LCFI26:
+ 641              		.cfi_def_cfa_offset 16
+ 642 052f 4889E5   		movq	%rsp, %rbp
+ 643              		.cfi_offset 6, -16
+ 644              	.LCFI27:
+ 645              		.cfi_def_cfa_register 6
+ 646 0532 4883EC30 		subq	$48, %rsp
+ 647 0536 48897DE8 		movq	%rdi, -24(%rbp)
+ 648 053a 488975E0 		movq	%rsi, -32(%rbp)
+ 649 053e 488955D8 		movq	%rdx, -40(%rbp)
+ 268:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     rc_t rc;
+ 269:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 270:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     switch (self->block_cipher->version.maj)
+ 650              		.loc 1 270 0
+ 651 0542 488B45E8 		movq	-24(%rbp), %rax
+ 652 0546 488B4048 		movq	72(%rax), %rax
+ 653 054a 8B00     		movl	(%rax), %eax
+ 654 054c 83F801   		cmpl	$1, %eax
+ 655 054f 7422     		je	.L50
+ 271:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 272:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     default:
+ 273:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+ 656              		.loc 1 273 0
+ 657 0551 B9110100 		movl	$273, %ecx
+ 657      00
+ 658 0556 488D1500 		leaq	__func__.7350(%rip), %rdx
+ 658      000000
+ 659 055d 488D3500 		leaq	.LC0(%rip), %rsi
+ 659      000000
+ 660 0564 BF080E09 		movl	$-2029449720, %edi
+ 660      87
+ 661 0569 E8000000 		call	SetRCFileFuncLine at PLT
+ 661      00
+
GAS LISTING /tmp/ccXzRABk.s 			page 20
+
+
+ 662 056e 8945FC   		movl	%eax, -4(%rbp)
+ 274:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 663              		.loc 1 274 0
+ 664 0571 EB1A     		jmp	.L51
+ 665              	.L50:
+ 275:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 276:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     case 1:
+ 277:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = CMEMBER(EncryptV1Int)(self, in, out);
+ 666              		.loc 1 277 0
+ 667 0573 488B55D8 		movq	-40(%rbp), %rdx
+ 668 0577 488B4DE0 		movq	-32(%rbp), %rcx
+ 669 057b 488B45E8 		movq	-24(%rbp), %rax
+ 670 057f 4889CE   		movq	%rcx, %rsi
+ 671 0582 4889C7   		movq	%rax, %rdi
+ 672 0585 E8FEFEFF 		call	KCipherVecRegEncryptV1Int
+ 672      FF
+ 673 058a 8945FC   		movl	%eax, -4(%rbp)
+ 674              	.L51:
+ 278:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 279:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 280:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 281:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return rc;
+ 675              		.loc 1 281 0
+ 676 058d 8B45FC   		movl	-4(%rbp), %eax
+ 282:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 677              		.loc 1 282 0
+ 678 0590 C9       		leave
+ 679 0591 C3       		ret
+ 680              		.cfi_endproc
+ 681              	.LFE603:
+ 682              		.size	KCipherVecRegEncrypt, .-KCipherVecRegEncrypt
+ 683              		.type	KCipherVecRegDecrypt, @function
+ 684              	KCipherVecRegDecrypt:
+ 685              	.LFB604:
+ 283:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 284:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 285:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 286:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(Decrypt) (const CIPHER_IMPL * self, const void * in, void * out)
+ 287:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 686              		.loc 1 287 0
+ 687              		.cfi_startproc
+ 688 0592 55       		pushq	%rbp
+ 689              	.LCFI28:
+ 690              		.cfi_def_cfa_offset 16
+ 691 0593 4889E5   		movq	%rsp, %rbp
+ 692              		.cfi_offset 6, -16
+ 693              	.LCFI29:
+ 694              		.cfi_def_cfa_register 6
+ 695 0596 4883EC30 		subq	$48, %rsp
+ 696 059a 48897DE8 		movq	%rdi, -24(%rbp)
+ 697 059e 488975E0 		movq	%rsi, -32(%rbp)
+ 698 05a2 488955D8 		movq	%rdx, -40(%rbp)
+ 288:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     rc_t rc = 0;
+ 699              		.loc 1 288 0
+ 700 05a6 C745FC00 		movl	$0, -4(%rbp)
+ 700      000000
+ 289:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+
GAS LISTING /tmp/ccXzRABk.s 			page 21
+
+
+ 290:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     switch (self->block_cipher->version.maj)
+ 701              		.loc 1 290 0
+ 702 05ad 488B45E8 		movq	-24(%rbp), %rax
+ 703 05b1 488B4048 		movq	72(%rax), %rax
+ 704 05b5 8B00     		movl	(%rax), %eax
+ 705 05b7 83F801   		cmpl	$1, %eax
+ 706 05ba 7422     		je	.L55
+ 291:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 292:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     default:
+ 293:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = RC (rcKrypto, rcCipher, rcEncoding, rcBlockCipher, rcBadVersion);
+ 707              		.loc 1 293 0
+ 708 05bc B9250100 		movl	$293, %ecx
+ 708      00
+ 709 05c1 488D1500 		leaq	__func__.7366(%rip), %rdx
+ 709      000000
+ 710 05c8 488D3500 		leaq	.LC0(%rip), %rsi
+ 710      000000
+ 711 05cf BF080E09 		movl	$-2029449720, %edi
+ 711      87
+ 712 05d4 E8000000 		call	SetRCFileFuncLine at PLT
+ 712      00
+ 713 05d9 8945FC   		movl	%eax, -4(%rbp)
+ 294:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 714              		.loc 1 294 0
+ 715 05dc EB1A     		jmp	.L56
+ 716              	.L55:
+ 295:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 296:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     case 1:
+ 297:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = CMEMBER(DecryptV1Int)(self, in, out);
+ 717              		.loc 1 297 0
+ 718 05de 488B55D8 		movq	-40(%rbp), %rdx
+ 719 05e2 488B4DE0 		movq	-32(%rbp), %rcx
+ 720 05e6 488B45E8 		movq	-24(%rbp), %rax
+ 721 05ea 4889CE   		movq	%rcx, %rsi
+ 722 05ed 4889C7   		movq	%rax, %rdi
+ 723 05f0 E8E6FEFF 		call	KCipherVecRegDecryptV1Int
+ 723      FF
+ 724 05f5 8945FC   		movl	%eax, -4(%rbp)
+ 725              	.L56:
+ 298:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 299:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 300:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 301:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return rc;
+ 726              		.loc 1 301 0
+ 727 05f8 8B45FC   		movl	-4(%rbp), %eax
+ 302:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 728              		.loc 1 302 0
+ 729 05fb C9       		leave
+ 730 05fc C3       		ret
+ 731              		.cfi_endproc
+ 732              	.LFE604:
+ 733              		.size	KCipherVecRegDecrypt, .-KCipherVecRegDecrypt
+ 734              		.type	KCipherVecRegEncryptEcb, @function
+ 735              	KCipherVecRegEncryptEcb:
+ 736              	.LFB605:
+ 303:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 304:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+
GAS LISTING /tmp/ccXzRABk.s 			page 22
+
+
+ 305:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ====================
+ 306:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * longer runs of multiple blocks.
+ 307:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+ 308:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * The algorithms are well defined and standard in most cases
+ 309:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+ 310:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * These aremore or elss equivalent to class functions as they do not depend upon
+ 311:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * the operation of the cipher and the algorithms are independent of anything about
+ 312:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * the cipher other than its block size.
+ 313:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+ 314:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * PT: plain text block
+ 315:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * CT: cipher text block
+ 316:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * EK: encryption key
+ 317:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * DK: decryption key (might be sthe same as EK)
+ 318:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * ENC: encrypt cipher function on a block using a key
+ 319:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * DEC: decrypt cipher function on a block using a key
+ 320:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * IV: initialization vector - used as feedback for chaining
+ 321:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * N:  number used once (nonce)
+ 322:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * FB: feedback is the next IV in a chained/feedback mode
+ 323:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 324:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 325:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 326:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* -----
+ 327:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * NOTE:
+ 328:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * 'in' can be the same as 'out' but other overlaps are dangers as a block at a
+ 329:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * time is written. The code does not look for overlaps at this point.
+ 330:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 331:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 332:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 333:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Electronic Code Book - simple cipher with no chaining feedback  just iterate
+ 334:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * simple encrypt/decrypt with the plain, text, cipher text and key/
+ 335:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+ 336:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * CT = ENC (PT,EK)
+ 337:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * PT = DEC (CT,DK)
+ 338:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 339:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 340:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* -----
+ 341:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * NOTE: currently an implmentation detail limits us to 8192 bit cipher block
+ 342:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * size.  Changing MAX_BLOCK_SIZE in cipher.c can up that limit without 
+ 343:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * causing any other compatibility issues. 
+ 344:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  *
+ 345:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Two local byte arrays are defined on the stack of 1024 bytes or 8192 bits.
+ 346:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 347:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 348:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptEcb) (const CIPHER_IMPL * self, const void * in, void * out, uint32_t block_cou
+ 349:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 737              		.loc 1 349 0
+ 738              		.cfi_startproc
+ 739 05fd 55       		pushq	%rbp
+ 740              	.LCFI30:
+ 741              		.cfi_def_cfa_offset 16
+ 742 05fe 4889E5   		movq	%rsp, %rbp
+ 743              		.cfi_offset 6, -16
+ 744              	.LCFI31:
+ 745              		.cfi_def_cfa_register 6
+ 746 0601 4883EC30 		subq	$48, %rsp
+ 747 0605 48897DE8 		movq	%rdi, -24(%rbp)
+ 748 0609 488975E0 		movq	%rsi, -32(%rbp)
+
GAS LISTING /tmp/ccXzRABk.s 			page 23
+
+
+ 749 060d 488955D8 		movq	%rdx, -40(%rbp)
+ 750 0611 894DD4   		movl	%ecx, -44(%rbp)
+ 350:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 351:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 352:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 751              		.loc 1 353 0
+ 752 0614 488B45E0 		movq	-32(%rbp), %rax
+ 753 0618 488945F0 		movq	%rax, -16(%rbp)
+ 754 061c 488B45D8 		movq	-40(%rbp), %rax
+ 755 0620 488945F8 		movq	%rax, -8(%rbp)
+ 756 0624 EB31     		jmp	.L59
+ 757              	.L60:
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 356:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 357:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CMEMBER(EncryptV1Int)(self, pin, pout);
+ 758              		.loc 1 357 0
+ 759 0626 488B55F8 		movq	-8(%rbp), %rdx
+ 760 062a 488B4DF0 		movq	-16(%rbp), %rcx
+ 761 062e 488B45E8 		movq	-24(%rbp), %rax
+ 762 0632 4889CE   		movq	%rcx, %rsi
+ 763 0635 4889C7   		movq	%rax, %rdi
+ 764 0638 E84BFEFF 		call	KCipherVecRegEncryptV1Int
+ 764      FF
+ 355:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 765              		.loc 1 355 0
+ 766 063d 488B45E8 		movq	-24(%rbp), %rax
+ 767 0641 8B4004   		movl	4(%rax), %eax
+ 768 0644 89C0     		mov	%eax, %eax
+ 769 0646 480145F0 		addq	%rax, -16(%rbp)
+ 770 064a 488B45E8 		movq	-24(%rbp), %rax
+ 771 064e 8B4004   		movl	4(%rax), %eax
+ 772 0651 89C0     		mov	%eax, %eax
+ 773 0653 480145F8 		addq	%rax, -8(%rbp)
+ 774              	.L59:
+ 354:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 775              		.loc 1 354 0
+ 776 0657 837DD400 		cmpl	$0, -44(%rbp)
+ 777 065b 0F95C0   		setne	%al
+ 778 065e 836DD401 		subl	$1, -44(%rbp)
+ 353:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 779              		.loc 1 353 0
+ 780 0662 84C0     		testb	%al, %al
+ 781 0664 75C0     		jne	.L60
+ 358:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 359:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 782              		.loc 1 359 0
+ 783 0666 B8000000 		movl	$0, %eax
+ 783      00
+ 360:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 784              		.loc 1 360 0
+ 785 066b C9       		leave
+ 786 066c C3       		ret
+ 787              		.cfi_endproc
+ 788              	.LFE605:
+ 789              		.size	KCipherVecRegEncryptEcb, .-KCipherVecRegEncryptEcb
+
GAS LISTING /tmp/ccXzRABk.s 			page 24
+
+
+ 790              		.type	KCipherVecRegDecryptEcb, @function
+ 791              	KCipherVecRegDecryptEcb:
+ 792              	.LFB606:
+ 361:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 362:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 363:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 364:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptEcb) (const CIPHER_IMPL * self, const void * in, void * out, uint32_t block_cou
+ 365:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 793              		.loc 1 365 0
+ 794              		.cfi_startproc
+ 795 066d 55       		pushq	%rbp
+ 796              	.LCFI32:
+ 797              		.cfi_def_cfa_offset 16
+ 798 066e 4889E5   		movq	%rsp, %rbp
+ 799              		.cfi_offset 6, -16
+ 800              	.LCFI33:
+ 801              		.cfi_def_cfa_register 6
+ 802 0671 4883EC30 		subq	$48, %rsp
+ 803 0675 48897DE8 		movq	%rdi, -24(%rbp)
+ 804 0679 488975E0 		movq	%rsi, -32(%rbp)
+ 805 067d 488955D8 		movq	%rdx, -40(%rbp)
+ 806 0681 894DD4   		movl	%ecx, -44(%rbp)
+ 366:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 367:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 368:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 807              		.loc 1 369 0
+ 808 0684 488B45E0 		movq	-32(%rbp), %rax
+ 809 0688 488945F0 		movq	%rax, -16(%rbp)
+ 810 068c 488B45D8 		movq	-40(%rbp), %rax
+ 811 0690 488945F8 		movq	%rax, -8(%rbp)
+ 812 0694 EB31     		jmp	.L63
+ 813              	.L64:
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 372:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 373:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CMEMBER(DecryptV1Int)(self, pin, pout);
+ 814              		.loc 1 373 0
+ 815 0696 488B55F8 		movq	-8(%rbp), %rdx
+ 816 069a 488B4DF0 		movq	-16(%rbp), %rcx
+ 817 069e 488B45E8 		movq	-24(%rbp), %rax
+ 818 06a2 4889CE   		movq	%rcx, %rsi
+ 819 06a5 4889C7   		movq	%rax, %rdi
+ 820 06a8 E82EFEFF 		call	KCipherVecRegDecryptV1Int
+ 820      FF
+ 371:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 821              		.loc 1 371 0
+ 822 06ad 488B45E8 		movq	-24(%rbp), %rax
+ 823 06b1 8B4004   		movl	4(%rax), %eax
+ 824 06b4 89C0     		mov	%eax, %eax
+ 825 06b6 480145F0 		addq	%rax, -16(%rbp)
+ 826 06ba 488B45E8 		movq	-24(%rbp), %rax
+ 827 06be 8B4004   		movl	4(%rax), %eax
+ 828 06c1 89C0     		mov	%eax, %eax
+ 829 06c3 480145F8 		addq	%rax, -8(%rbp)
+ 830              	.L63:
+ 370:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+
GAS LISTING /tmp/ccXzRABk.s 			page 25
+
+
+ 831              		.loc 1 370 0
+ 832 06c7 837DD400 		cmpl	$0, -44(%rbp)
+ 833 06cb 0F95C0   		setne	%al
+ 834 06ce 836DD401 		subl	$1, -44(%rbp)
+ 369:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 835              		.loc 1 369 0
+ 836 06d2 84C0     		testb	%al, %al
+ 837 06d4 75C0     		jne	.L64
+ 374:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 375:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 376:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 838              		.loc 1 376 0
+ 839 06d6 B8000000 		movl	$0, %eax
+ 839      00
+ 377:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 840              		.loc 1 377 0
+ 841 06db C9       		leave
+ 842 06dc C3       		ret
+ 843              		.cfi_endproc
+ 844              	.LFE606:
+ 845              		.size	KCipherVecRegDecryptEcb, .-KCipherVecRegDecryptEcb
+ 846              		.type	KCipherVecRegEncryptCbc, @function
+ 847              	KCipherVecRegEncryptCbc:
+ 848              	.LFB607:
+ 378:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 379:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 380:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 381:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Cipher-Block Chaining
+ 382:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * CT = (FB = ENC (PT^IV, EK))
+ 383:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * PT = DEC ((FB = CT), DK)
+ 384:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 385:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 386:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptCbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 387:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 849              		.loc 1 387 0
+ 850              		.cfi_startproc
+ 851 06dd 55       		pushq	%rbp
+ 852              	.LCFI34:
+ 853              		.cfi_def_cfa_offset 16
+ 854 06de 4889E5   		movq	%rsp, %rbp
+ 855              		.cfi_offset 6, -16
+ 856              	.LCFI35:
+ 857              		.cfi_def_cfa_register 6
+ 858 06e1 4883EC50 		subq	$80, %rsp
+ 859 06e5 48897DC8 		movq	%rdi, -56(%rbp)
+ 860 06e9 488975C0 		movq	%rsi, -64(%rbp)
+ 861 06ed 488955B8 		movq	%rdx, -72(%rbp)
+ 862 06f1 894DB4   		movl	%ecx, -76(%rbp)
+ 388:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 389:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 390:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 391:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 392:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 393:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 0
+ 394:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 395:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 396:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = CipherVecIn (self->dad.encrypt_ivec);
+
GAS LISTING /tmp/ccXzRABk.s 			page 26
+
+
+ 863              		.loc 1 396 0
+ 864 06f4 488B45C8 		movq	-56(%rbp), %rax
+ 865 06f8 488B4028 		movq	40(%rax), %rax
+ 866 06fc 4889C7   		movq	%rax, %rdi
+ 867 06ff E8FCF8FF 		call	CipherVecIn
+ 867      FF
+ 868 0704 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 868      E0
+ 397:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 398:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 869              		.loc 1 399 0
+ 870 0709 488B45C0 		movq	-64(%rbp), %rax
+ 871 070d 488945F0 		movq	%rax, -16(%rbp)
+ 872 0711 488B45B8 		movq	-72(%rbp), %rax
+ 873 0715 488945F8 		movq	%rax, -8(%rbp)
+ 874 0719 EB65     		jmp	.L67
+ 875              	.L68:
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 402:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 403:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CipherVecIn (pin);
+ 876              		.loc 1 403 0
+ 877 071b 488B45F0 		movq	-16(%rbp), %rax
+ 878 071f 4889C7   		movq	%rax, %rdi
+ 879 0722 E8D9F8FF 		call	CipherVecIn
+ 879      FF
+ 880 0727 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 880      D0
+ 404:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv ^= ivec;
+ 881              		.loc 1 404 0
+ 882 072c F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 882      E0
+ 883 0731 F30F6F4D 		movdqu	-48(%rbp), %xmm1
+ 883      D0
+ 884 0736 660FEFC1 		pxor	%xmm1, %xmm0
+ 885 073a F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 885      D0
+ 405:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec = CMEMBER(EncryptV1)(self, cv);
+ 886              		.loc 1 405 0
+ 887 073f F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 887      D0
+ 888 0744 488B45C8 		movq	-56(%rbp), %rax
+ 889 0748 4889C7   		movq	%rax, %rdi
+ 890 074b E8EAFCFF 		call	KCipherVecRegEncryptV1
+ 890      FF
+ 891 0750 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 891      E0
+ 406:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (ivec, pout);
+ 892              		.loc 1 406 0
+ 893 0755 488B45F8 		movq	-8(%rbp), %rax
+ 894 0759 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 894      E0
+ 895 075e 4889C7   		movq	%rax, %rdi
+ 896 0761 E8B9F8FF 		call	CipherVecOut
+ 896      FF
+ 401:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+
GAS LISTING /tmp/ccXzRABk.s 			page 27
+
+
+ 897              		.loc 1 401 0
+ 898 0766 488B45C8 		movq	-56(%rbp), %rax
+ 899 076a 8B4004   		movl	4(%rax), %eax
+ 900 076d 89C0     		mov	%eax, %eax
+ 901 076f 480145F0 		addq	%rax, -16(%rbp)
+ 902 0773 488B45C8 		movq	-56(%rbp), %rax
+ 903 0777 8B4004   		movl	4(%rax), %eax
+ 904 077a 89C0     		mov	%eax, %eax
+ 905 077c 480145F8 		addq	%rax, -8(%rbp)
+ 906              	.L67:
+ 400:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 907              		.loc 1 400 0
+ 908 0780 837DB400 		cmpl	$0, -76(%rbp)
+ 909 0784 0F95C0   		setne	%al
+ 910 0787 836DB401 		subl	$1, -76(%rbp)
+ 399:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 911              		.loc 1 399 0
+ 912 078b 84C0     		testb	%al, %al
+ 913 078d 758C     		jne	.L68
+ 407:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 408:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 409:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 0
+ 410:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 411:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 412:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVecOut (ivec, self->dad.encrypt_ivec);
+ 914              		.loc 1 412 0
+ 915 078f 488B45C8 		movq	-56(%rbp), %rax
+ 916 0793 488B4028 		movq	40(%rax), %rax
+ 917 0797 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 917      E0
+ 918 079c 4889C7   		movq	%rax, %rdi
+ 919 079f E87BF8FF 		call	CipherVecOut
+ 919      FF
+ 413:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 414:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 415:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 920              		.loc 1 415 0
+ 921 07a4 B8000000 		movl	$0, %eax
+ 921      00
+ 416:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }    
+ 922              		.loc 1 416 0
+ 923 07a9 C9       		leave
+ 924 07aa C3       		ret
+ 925              		.cfi_endproc
+ 926              	.LFE607:
+ 927              		.size	KCipherVecRegEncryptCbc, .-KCipherVecRegEncryptCbc
+ 928              		.type	KCipherVecRegDecryptCbc, @function
+ 929              	KCipherVecRegDecryptCbc:
+ 930              	.LFB608:
+ 417:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 418:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 419:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 420:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptCbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 421:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 931              		.loc 1 421 0
+ 932              		.cfi_startproc
+ 933 07ab 55       		pushq	%rbp
+
GAS LISTING /tmp/ccXzRABk.s 			page 28
+
+
+ 934              	.LCFI36:
+ 935              		.cfi_def_cfa_offset 16
+ 936 07ac 4889E5   		movq	%rsp, %rbp
+ 937              		.cfi_offset 6, -16
+ 938              	.LCFI37:
+ 939              		.cfi_def_cfa_register 6
+ 940 07af 4883EC60 		subq	$96, %rsp
+ 941 07b3 48897DB8 		movq	%rdi, -72(%rbp)
+ 942 07b7 488975B0 		movq	%rsi, -80(%rbp)
+ 943 07bb 488955A8 		movq	%rdx, -88(%rbp)
+ 944 07bf 894DA4   		movl	%ecx, -92(%rbp)
+ 422:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 423:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 424:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 425:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 426:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 427:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = CipherVecIn (self->dad.decrypt_ivec);
+ 945              		.loc 1 427 0
+ 946 07c2 488B45B8 		movq	-72(%rbp), %rax
+ 947 07c6 488B4030 		movq	48(%rax), %rax
+ 948 07ca 4889C7   		movq	%rax, %rdi
+ 949 07cd E82EF8FF 		call	CipherVecIn
+ 949      FF
+ 950 07d2 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 950      D0
+ 428:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 951              		.loc 1 429 0
+ 952 07d7 488B45B0 		movq	-80(%rbp), %rax
+ 953 07db 488945E0 		movq	%rax, -32(%rbp)
+ 954 07df 488B45A8 		movq	-88(%rbp), %rax
+ 955 07e3 488945E8 		movq	%rax, -24(%rbp)
+ 956 07e7 EB6F     		jmp	.L71
+ 957              	.L72:
+ 958              	.LBB2:
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 432:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 433:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVec temp;
+ 434:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 435:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CipherVecIn (pin);
+ 959              		.loc 1 435 0
+ 960 07e9 488B45E0 		movq	-32(%rbp), %rax
+ 961 07ed 4889C7   		movq	%rax, %rdi
+ 962 07f0 E80BF8FF 		call	CipherVecIn
+ 962      FF
+ 963 07f5 F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 963      C0
+ 436:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 0
+ 437:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp = cv;
+ 438:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp = CMEMBER(DecryptV1)(self, temp);
+ 439:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 440:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp = CMEMBER(DecryptV1)(self, cv);
+ 964              		.loc 1 440 0
+ 965 07fa F30F6F45 		movdqu	-64(%rbp), %xmm0
+ 965      C0
+ 966 07ff 488B45B8 		movq	-72(%rbp), %rax
+
GAS LISTING /tmp/ccXzRABk.s 			page 29
+
+
+ 967 0803 4889C7   		movq	%rax, %rdi
+ 968 0806 E856FCFF 		call	KCipherVecRegDecryptV1
+ 968      FF
+ 969 080b F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 969      F0
+ 441:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 442:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp ^= ivec;
+ 970              		.loc 1 442 0
+ 971 0810 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 971      D0
+ 972 0815 F30F6F4D 		movdqu	-16(%rbp), %xmm1
+ 972      F0
+ 973 081a 660FEFC1 		pxor	%xmm1, %xmm0
+ 974 081e F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 974      F0
+ 443:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (temp, pout);
+ 975              		.loc 1 443 0
+ 976 0823 488B45E8 		movq	-24(%rbp), %rax
+ 977 0827 F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 977      F0
+ 978 082c 4889C7   		movq	%rax, %rdi
+ 979 082f E8EBF7FF 		call	CipherVecOut
+ 979      FF
+ 444:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec = cv;
+ 980              		.loc 1 444 0
+ 981 0834 F30F6F45 		movdqu	-64(%rbp), %xmm0
+ 981      C0
+ 982 0839 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 982      D0
+ 983              	.LBE2:
+ 431:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 984              		.loc 1 431 0
+ 985 083e 488B45B8 		movq	-72(%rbp), %rax
+ 986 0842 8B4004   		movl	4(%rax), %eax
+ 987 0845 89C0     		mov	%eax, %eax
+ 988 0847 480145E0 		addq	%rax, -32(%rbp)
+ 989 084b 488B45B8 		movq	-72(%rbp), %rax
+ 990 084f 8B4004   		movl	4(%rax), %eax
+ 991 0852 89C0     		mov	%eax, %eax
+ 992 0854 480145E8 		addq	%rax, -24(%rbp)
+ 993              	.L71:
+ 430:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 994              		.loc 1 430 0
+ 995 0858 837DA400 		cmpl	$0, -92(%rbp)
+ 996 085c 0F95C0   		setne	%al
+ 997 085f 836DA401 		subl	$1, -92(%rbp)
+ 429:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 998              		.loc 1 429 0
+ 999 0863 84C0     		testb	%al, %al
+ 1000 0865 7582     		jne	.L72
+ 445:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 446:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 447:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.decrypt_ivec = ivec;
+ 1001              		.loc 1 447 0
+ 1002 0867 488B45B8 		movq	-72(%rbp), %rax
+ 1003 086b 488B4030 		movq	48(%rax), %rax
+ 1004 086f F30F6F45 		movdqu	-48(%rbp), %xmm0
+
GAS LISTING /tmp/ccXzRABk.s 			page 30
+
+
+ 1004      D0
+ 1005 0874 F30F7F00 		movdqu	%xmm0, (%rax)
+ 448:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1006              		.loc 1 448 0
+ 1007 0878 B8000000 		movl	$0, %eax
+ 1007      00
+ 449:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1008              		.loc 1 449 0
+ 1009 087d C9       		leave
+ 1010 087e C3       		ret
+ 1011              		.cfi_endproc
+ 1012              	.LFE608:
+ 1013              		.size	KCipherVecRegDecryptCbc, .-KCipherVecRegDecryptCbc
+ 1014              		.type	KCipherVecRegEncryptPcbc, @function
+ 1015              	KCipherVecRegEncryptPcbc:
+ 1016              	.LFB609:
+ 450:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 451:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 452:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 453:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Propagating cipher-block chaining
+ 454:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * FB = PT ^ (CT = ENC ((PT^IV), EK))
+ 455:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * FB = CT ^ (PT = DEC (CT,DK) ^ IV)
+ 456:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 457:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 458:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptPcbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 459:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1017              		.loc 1 459 0
+ 1018              		.cfi_startproc
+ 1019 087f 55       		pushq	%rbp
+ 1020              	.LCFI38:
+ 1021              		.cfi_def_cfa_offset 16
+ 1022 0880 4889E5   		movq	%rsp, %rbp
+ 1023              		.cfi_offset 6, -16
+ 1024              	.LCFI39:
+ 1025              		.cfi_def_cfa_register 6
+ 1026 0883 4883EC60 		subq	$96, %rsp
+ 1027 0887 48897DB8 		movq	%rdi, -72(%rbp)
+ 1028 088b 488975B0 		movq	%rsi, -80(%rbp)
+ 1029 088f 488955A8 		movq	%rdx, -88(%rbp)
+ 1030 0893 894DA4   		movl	%ecx, -92(%rbp)
+ 460:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 461:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 462:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 463:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 464:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 465:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 466:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1031              		.loc 1 466 0
+ 1032 0896 488B45B8 		movq	-72(%rbp), %rax
+ 1033 089a 488B4028 		movq	40(%rax), %rax
+ 1034 089e 660F6F00 		movdqa	(%rax), %xmm0
+ 1035 08a2 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1035      D0
+ 467:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1036              		.loc 1 468 0
+ 1037 08a7 488B45B0 		movq	-80(%rbp), %rax
+
GAS LISTING /tmp/ccXzRABk.s 			page 31
+
+
+ 1038 08ab 488945E0 		movq	%rax, -32(%rbp)
+ 1039 08af 488B45A8 		movq	-88(%rbp), %rax
+ 1040 08b3 488945E8 		movq	%rax, -24(%rbp)
+ 1041 08b7 EB78     		jmp	.L75
+ 1042              	.L76:
+ 1043              	.LBB3:
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 471:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 472:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVec temp;
+ 473:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 474:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CipherVecIn (pin);
+ 1044              		.loc 1 474 0
+ 1045 08b9 488B45E0 		movq	-32(%rbp), %rax
+ 1046 08bd 4889C7   		movq	%rax, %rdi
+ 1047 08c0 E83BF7FF 		call	CipherVecIn
+ 1047      FF
+ 1048 08c5 F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 1048      C0
+ 475:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp = cv ^ ivec;
+ 1049              		.loc 1 475 0
+ 1050 08ca F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 1050      D0
+ 1051 08cf F30F6F4D 		movdqu	-64(%rbp), %xmm1
+ 1051      C0
+ 1052 08d4 660FEFC1 		pxor	%xmm1, %xmm0
+ 1053 08d8 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 1053      F0
+ 476:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp = CMEMBER(EncryptV1)(self, temp); 
+ 1054              		.loc 1 476 0
+ 1055 08dd F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 1055      F0
+ 1056 08e2 488B45B8 		movq	-72(%rbp), %rax
+ 1057 08e6 4889C7   		movq	%rax, %rdi
+ 1058 08e9 E84CFBFF 		call	KCipherVecRegEncryptV1
+ 1058      FF
+ 1059 08ee F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 1059      F0
+ 477:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec = cv ^ temp;
+ 1060              		.loc 1 477 0
+ 1061 08f3 F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 1061      F0
+ 1062 08f8 F30F6F4D 		movdqu	-64(%rbp), %xmm1
+ 1062      C0
+ 1063 08fd 660FEFC1 		pxor	%xmm1, %xmm0
+ 1064 0901 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1064      D0
+ 478:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (temp, pout);
+ 1065              		.loc 1 478 0
+ 1066 0906 488B45E8 		movq	-24(%rbp), %rax
+ 1067 090a F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 1067      F0
+ 1068 090f 4889C7   		movq	%rax, %rdi
+ 1069 0912 E808F7FF 		call	CipherVecOut
+ 1069      FF
+ 1070              	.LBE3:
+ 470:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+
GAS LISTING /tmp/ccXzRABk.s 			page 32
+
+
+ 1071              		.loc 1 470 0
+ 1072 0917 488B45B8 		movq	-72(%rbp), %rax
+ 1073 091b 8B4004   		movl	4(%rax), %eax
+ 1074 091e 89C0     		mov	%eax, %eax
+ 1075 0920 480145E0 		addq	%rax, -32(%rbp)
+ 1076 0924 488B45B8 		movq	-72(%rbp), %rax
+ 1077 0928 8B4004   		movl	4(%rax), %eax
+ 1078 092b 89C0     		mov	%eax, %eax
+ 1079 092d 480145E8 		addq	%rax, -24(%rbp)
+ 1080              	.L75:
+ 469:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 1081              		.loc 1 469 0
+ 1082 0931 837DA400 		cmpl	$0, -92(%rbp)
+ 1083 0935 0F95C0   		setne	%al
+ 1084 0938 836DA401 		subl	$1, -92(%rbp)
+ 468:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1085              		.loc 1 468 0
+ 1086 093c 84C0     		testb	%al, %al
+ 1087 093e 0F8575FF 		jne	.L76
+ 1087      FFFF
+ 479:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 480:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 481:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1088              		.loc 1 481 0
+ 1089 0944 488B45B8 		movq	-72(%rbp), %rax
+ 1090 0948 488B4028 		movq	40(%rax), %rax
+ 1091 094c F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 1091      D0
+ 1092 0951 F30F7F00 		movdqu	%xmm0, (%rax)
+ 482:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 483:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1093              		.loc 1 483 0
+ 1094 0955 B8000000 		movl	$0, %eax
+ 1094      00
+ 484:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 485:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 486:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 487:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1095              		.loc 1 487 0
+ 1096 095a C9       		leave
+ 1097 095b C3       		ret
+ 1098              		.cfi_endproc
+ 1099              	.LFE609:
+ 1100              		.size	KCipherVecRegEncryptPcbc, .-KCipherVecRegEncryptPcbc
+ 1101              		.type	KCipherVecRegDecryptPcbc, @function
+ 1102              	KCipherVecRegDecryptPcbc:
+ 1103              	.LFB610:
+ 488:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 489:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 490:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 491:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptPcbc) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 492:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1104              		.loc 1 492 0
+ 1105              		.cfi_startproc
+ 1106 095c 55       		pushq	%rbp
+ 1107              	.LCFI40:
+ 1108              		.cfi_def_cfa_offset 16
+
GAS LISTING /tmp/ccXzRABk.s 			page 33
+
+
+ 1109 095d 4889E5   		movq	%rsp, %rbp
+ 1110              		.cfi_offset 6, -16
+ 1111              	.LCFI41:
+ 1112              		.cfi_def_cfa_register 6
+ 1113 0960 4883EC60 		subq	$96, %rsp
+ 1114 0964 48897DB8 		movq	%rdi, -72(%rbp)
+ 1115 0968 488975B0 		movq	%rsi, -80(%rbp)
+ 1116 096c 488955A8 		movq	%rdx, -88(%rbp)
+ 1117 0970 894DA4   		movl	%ecx, -92(%rbp)
+ 493:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 494:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 495:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 496:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 497:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 498:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 499:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1118              		.loc 1 499 0
+ 1119 0973 488B45B8 		movq	-72(%rbp), %rax
+ 1120 0977 488B4028 		movq	40(%rax), %rax
+ 1121 097b 660F6F00 		movdqa	(%rax), %xmm0
+ 1122 097f F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1122      D0
+ 500:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1123              		.loc 1 501 0
+ 1124 0984 488B45B0 		movq	-80(%rbp), %rax
+ 1125 0988 488945E0 		movq	%rax, -32(%rbp)
+ 1126 098c 488B45A8 		movq	-88(%rbp), %rax
+ 1127 0990 488945E8 		movq	%rax, -24(%rbp)
+ 1128 0994 EB65     		jmp	.L79
+ 1129              	.L80:
+ 1130              	.LBB4:
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 504:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 505:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVec temp;
+ 506:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 507:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CipherVecIn (pin);
+ 1131              		.loc 1 507 0
+ 1132 0996 488B45E0 		movq	-32(%rbp), %rax
+ 1133 099a 4889C7   		movq	%rax, %rdi
+ 1134 099d E85EF6FF 		call	CipherVecIn
+ 1134      FF
+ 1135 09a2 F30F7F45 		movdqu	%xmm0, -64(%rbp)
+ 1135      C0
+ 508:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         temp = CMEMBER(DecryptV1)(self, cv);
+ 1136              		.loc 1 508 0
+ 1137 09a7 F30F6F45 		movdqu	-64(%rbp), %xmm0
+ 1137      C0
+ 1138 09ac 488B45B8 		movq	-72(%rbp), %rax
+ 1139 09b0 4889C7   		movq	%rax, %rdi
+ 1140 09b3 E8A9FAFF 		call	KCipherVecRegDecryptV1
+ 1140      FF
+ 1141 09b8 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+ 1141      F0
+ 509:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec ^= temp;
+ 1142              		.loc 1 509 0
+
GAS LISTING /tmp/ccXzRABk.s 			page 34
+
+
+ 1143 09bd F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 1143      F0
+ 1144 09c2 F30F6F4D 		movdqu	-48(%rbp), %xmm1
+ 1144      D0
+ 1145 09c7 660FEFC1 		pxor	%xmm1, %xmm0
+ 1146 09cb F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1146      D0
+ 510:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (temp, pout);
+ 1147              		.loc 1 510 0
+ 1148 09d0 488B45E8 		movq	-24(%rbp), %rax
+ 1149 09d4 F30F6F45 		movdqu	-16(%rbp), %xmm0
+ 1149      F0
+ 1150 09d9 4889C7   		movq	%rax, %rdi
+ 1151 09dc E83EF6FF 		call	CipherVecOut
+ 1151      FF
+ 1152              	.LBE4:
+ 503:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1153              		.loc 1 503 0
+ 1154 09e1 488B45B8 		movq	-72(%rbp), %rax
+ 1155 09e5 8B4004   		movl	4(%rax), %eax
+ 1156 09e8 89C0     		mov	%eax, %eax
+ 1157 09ea 480145E0 		addq	%rax, -32(%rbp)
+ 1158 09ee 488B45B8 		movq	-72(%rbp), %rax
+ 1159 09f2 8B4004   		movl	4(%rax), %eax
+ 1160 09f5 89C0     		mov	%eax, %eax
+ 1161 09f7 480145E8 		addq	%rax, -24(%rbp)
+ 1162              	.L79:
+ 502:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 1163              		.loc 1 502 0
+ 1164 09fb 837DA400 		cmpl	$0, -92(%rbp)
+ 1165 09ff 0F95C0   		setne	%al
+ 1166 0a02 836DA401 		subl	$1, -92(%rbp)
+ 501:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1167              		.loc 1 501 0
+ 1168 0a06 84C0     		testb	%al, %al
+ 1169 0a08 758C     		jne	.L80
+ 511:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 512:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 513:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1170              		.loc 1 513 0
+ 1171 0a0a 488B45B8 		movq	-72(%rbp), %rax
+ 1172 0a0e 488B4028 		movq	40(%rax), %rax
+ 1173 0a12 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 1173      D0
+ 1174 0a17 F30F7F00 		movdqu	%xmm0, (%rax)
+ 514:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 515:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1175              		.loc 1 515 0
+ 1176 0a1b B8000000 		movl	$0, %eax
+ 1176      00
+ 516:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 517:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 518:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 519:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1177              		.loc 1 519 0
+ 1178 0a20 C9       		leave
+ 1179 0a21 C3       		ret
+
GAS LISTING /tmp/ccXzRABk.s 			page 35
+
+
+ 1180              		.cfi_endproc
+ 1181              	.LFE610:
+ 1182              		.size	KCipherVecRegDecryptPcbc, .-KCipherVecRegDecryptPcbc
+ 1183              		.type	KCipherVecRegEncryptCfb, @function
+ 1184              	KCipherVecRegEncryptCfb:
+ 1185              	.LFB611:
+ 520:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 521:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 522:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 523:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Cipher Feedback
+ 524:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * CT = (FB = PT) ^ ENC (IV, EK))
+ 525:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * PT = (FB = CT) ^ DEC (IV, DK)
+ 526:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 527:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 528:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptCfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 529:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1186              		.loc 1 529 0
+ 1187              		.cfi_startproc
+ 1188 0a22 55       		pushq	%rbp
+ 1189              	.LCFI42:
+ 1190              		.cfi_def_cfa_offset 16
+ 1191 0a23 4889E5   		movq	%rsp, %rbp
+ 1192              		.cfi_offset 6, -16
+ 1193              	.LCFI43:
+ 1194              		.cfi_def_cfa_register 6
+ 1195 0a26 4883EC50 		subq	$80, %rsp
+ 1196 0a2a 48897DC8 		movq	%rdi, -56(%rbp)
+ 1197 0a2e 488975C0 		movq	%rsi, -64(%rbp)
+ 1198 0a32 488955B8 		movq	%rdx, -72(%rbp)
+ 1199 0a36 894DB4   		movl	%ecx, -76(%rbp)
+ 530:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 531:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 532:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 533:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 534:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 535:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 536:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1200              		.loc 1 536 0
+ 1201 0a39 488B45C8 		movq	-56(%rbp), %rax
+ 1202 0a3d 488B4028 		movq	40(%rax), %rax
+ 1203 0a41 660F6F00 		movdqa	(%rax), %xmm0
+ 1204 0a45 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1204      E0
+ 537:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1205              		.loc 1 538 0
+ 1206 0a4a 488B45C0 		movq	-64(%rbp), %rax
+ 1207 0a4e 488945F0 		movq	%rax, -16(%rbp)
+ 1208 0a52 488B45B8 		movq	-72(%rbp), %rax
+ 1209 0a56 488945F8 		movq	%rax, -8(%rbp)
+ 1210 0a5a EB65     		jmp	.L83
+ 1211              	.L84:
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 541:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 542:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec = CMEMBER(EncryptV1)(self, ivec); 
+ 1212              		.loc 1 542 0
+
GAS LISTING /tmp/ccXzRABk.s 			page 36
+
+
+ 1213 0a5c F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1213      E0
+ 1214 0a61 488B45C8 		movq	-56(%rbp), %rax
+ 1215 0a65 4889C7   		movq	%rax, %rdi
+ 1216 0a68 E8CDF9FF 		call	KCipherVecRegEncryptV1
+ 1216      FF
+ 1217 0a6d F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1217      E0
+ 543:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CipherVecIn (pin);
+ 1218              		.loc 1 543 0
+ 1219 0a72 488B45F0 		movq	-16(%rbp), %rax
+ 1220 0a76 4889C7   		movq	%rax, %rdi
+ 1221 0a79 E882F5FF 		call	CipherVecIn
+ 1221      FF
+ 1222 0a7e F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1222      D0
+ 544:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec ^= cv;
+ 1223              		.loc 1 544 0
+ 1224 0a83 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 1224      D0
+ 1225 0a88 F30F6F4D 		movdqu	-32(%rbp), %xmm1
+ 1225      E0
+ 1226 0a8d 660FEFC1 		pxor	%xmm1, %xmm0
+ 1227 0a91 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1227      E0
+ 545:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (ivec, pout);
+ 1228              		.loc 1 545 0
+ 1229 0a96 488B45F8 		movq	-8(%rbp), %rax
+ 1230 0a9a F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1230      E0
+ 1231 0a9f 4889C7   		movq	%rax, %rdi
+ 1232 0aa2 E878F5FF 		call	CipherVecOut
+ 1232      FF
+ 540:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1233              		.loc 1 540 0
+ 1234 0aa7 488B45C8 		movq	-56(%rbp), %rax
+ 1235 0aab 8B4004   		movl	4(%rax), %eax
+ 1236 0aae 89C0     		mov	%eax, %eax
+ 1237 0ab0 480145F0 		addq	%rax, -16(%rbp)
+ 1238 0ab4 488B45C8 		movq	-56(%rbp), %rax
+ 1239 0ab8 8B4004   		movl	4(%rax), %eax
+ 1240 0abb 89C0     		mov	%eax, %eax
+ 1241 0abd 480145F8 		addq	%rax, -8(%rbp)
+ 1242              	.L83:
+ 539:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 1243              		.loc 1 539 0
+ 1244 0ac1 837DB400 		cmpl	$0, -76(%rbp)
+ 1245 0ac5 0F95C0   		setne	%al
+ 1246 0ac8 836DB401 		subl	$1, -76(%rbp)
+ 538:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1247              		.loc 1 538 0
+ 1248 0acc 84C0     		testb	%al, %al
+ 1249 0ace 758C     		jne	.L84
+ 546:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 547:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 548:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1250              		.loc 1 548 0
+
GAS LISTING /tmp/ccXzRABk.s 			page 37
+
+
+ 1251 0ad0 488B45C8 		movq	-56(%rbp), %rax
+ 1252 0ad4 488B4028 		movq	40(%rax), %rax
+ 1253 0ad8 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1253      E0
+ 1254 0add F30F7F00 		movdqu	%xmm0, (%rax)
+ 549:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 550:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1255              		.loc 1 550 0
+ 1256 0ae1 B8000000 		movl	$0, %eax
+ 1256      00
+ 551:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 552:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 553:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 554:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1257              		.loc 1 554 0
+ 1258 0ae6 C9       		leave
+ 1259 0ae7 C3       		ret
+ 1260              		.cfi_endproc
+ 1261              	.LFE611:
+ 1262              		.size	KCipherVecRegEncryptCfb, .-KCipherVecRegEncryptCfb
+ 1263              		.type	KCipherVecRegDecryptCfb, @function
+ 1264              	KCipherVecRegDecryptCfb:
+ 1265              	.LFB612:
+ 555:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 556:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 557:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 558:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptCfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 559:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1266              		.loc 1 559 0
+ 1267              		.cfi_startproc
+ 1268 0ae8 55       		pushq	%rbp
+ 1269              	.LCFI44:
+ 1270              		.cfi_def_cfa_offset 16
+ 1271 0ae9 4889E5   		movq	%rsp, %rbp
+ 1272              		.cfi_offset 6, -16
+ 1273              	.LCFI45:
+ 1274              		.cfi_def_cfa_register 6
+ 1275 0aec 4883EC50 		subq	$80, %rsp
+ 1276 0af0 48897DC8 		movq	%rdi, -56(%rbp)
+ 1277 0af4 488975C0 		movq	%rsi, -64(%rbp)
+ 1278 0af8 488955B8 		movq	%rdx, -72(%rbp)
+ 1279 0afc 894DB4   		movl	%ecx, -76(%rbp)
+ 560:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 561:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 562:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 563:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 564:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 565:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 566:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1280              		.loc 1 566 0
+ 1281 0aff 488B45C8 		movq	-56(%rbp), %rax
+ 1282 0b03 488B4028 		movq	40(%rax), %rax
+ 1283 0b07 660F6F00 		movdqa	(%rax), %xmm0
+ 1284 0b0b F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1284      E0
+ 567:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+
GAS LISTING /tmp/ccXzRABk.s 			page 38
+
+
+ 1285              		.loc 1 568 0
+ 1286 0b10 488B45C0 		movq	-64(%rbp), %rax
+ 1287 0b14 488945F0 		movq	%rax, -16(%rbp)
+ 1288 0b18 488B45B8 		movq	-72(%rbp), %rax
+ 1289 0b1c 488945F8 		movq	%rax, -8(%rbp)
+ 1290 0b20 EB65     		jmp	.L87
+ 1291              	.L88:
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 571:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 572:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CMEMBER(EncryptV1)(self, ivec); 
+ 1292              		.loc 1 572 0
+ 1293 0b22 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1293      E0
+ 1294 0b27 488B45C8 		movq	-56(%rbp), %rax
+ 1295 0b2b 4889C7   		movq	%rax, %rdi
+ 1296 0b2e E807F9FF 		call	KCipherVecRegEncryptV1
+ 1296      FF
+ 1297 0b33 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1297      D0
+ 573:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec = CipherVecIn (pin);
+ 1298              		.loc 1 573 0
+ 1299 0b38 488B45F0 		movq	-16(%rbp), %rax
+ 1300 0b3c 4889C7   		movq	%rax, %rdi
+ 1301 0b3f E8BCF4FF 		call	CipherVecIn
+ 1301      FF
+ 1302 0b44 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1302      E0
+ 574:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv ^= ivec;
+ 1303              		.loc 1 574 0
+ 1304 0b49 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1304      E0
+ 1305 0b4e F30F6F4D 		movdqu	-48(%rbp), %xmm1
+ 1305      D0
+ 1306 0b53 660FEFC1 		pxor	%xmm1, %xmm0
+ 1307 0b57 F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1307      D0
+ 575:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (cv, pout);
+ 1308              		.loc 1 575 0
+ 1309 0b5c 488B45F8 		movq	-8(%rbp), %rax
+ 1310 0b60 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 1310      D0
+ 1311 0b65 4889C7   		movq	%rax, %rdi
+ 1312 0b68 E8B2F4FF 		call	CipherVecOut
+ 1312      FF
+ 570:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1313              		.loc 1 570 0
+ 1314 0b6d 488B45C8 		movq	-56(%rbp), %rax
+ 1315 0b71 8B4004   		movl	4(%rax), %eax
+ 1316 0b74 89C0     		mov	%eax, %eax
+ 1317 0b76 480145F0 		addq	%rax, -16(%rbp)
+ 1318 0b7a 488B45C8 		movq	-56(%rbp), %rax
+ 1319 0b7e 8B4004   		movl	4(%rax), %eax
+ 1320 0b81 89C0     		mov	%eax, %eax
+ 1321 0b83 480145F8 		addq	%rax, -8(%rbp)
+ 1322              	.L87:
+ 569:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+
GAS LISTING /tmp/ccXzRABk.s 			page 39
+
+
+ 1323              		.loc 1 569 0
+ 1324 0b87 837DB400 		cmpl	$0, -76(%rbp)
+ 1325 0b8b 0F95C0   		setne	%al
+ 1326 0b8e 836DB401 		subl	$1, -76(%rbp)
+ 568:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1327              		.loc 1 568 0
+ 1328 0b92 84C0     		testb	%al, %al
+ 1329 0b94 758C     		jne	.L88
+ 576:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 577:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 578:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1330              		.loc 1 578 0
+ 1331 0b96 488B45C8 		movq	-56(%rbp), %rax
+ 1332 0b9a 488B4028 		movq	40(%rax), %rax
+ 1333 0b9e F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1333      E0
+ 1334 0ba3 F30F7F00 		movdqu	%xmm0, (%rax)
+ 579:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 580:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1335              		.loc 1 580 0
+ 1336 0ba7 B8000000 		movl	$0, %eax
+ 1336      00
+ 581:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 582:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 583:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 584:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1337              		.loc 1 584 0
+ 1338 0bac C9       		leave
+ 1339 0bad C3       		ret
+ 1340              		.cfi_endproc
+ 1341              	.LFE612:
+ 1342              		.size	KCipherVecRegDecryptCfb, .-KCipherVecRegDecryptCfb
+ 1343              		.type	KCipherVecRegEncryptOfb, @function
+ 1344              	KCipherVecRegEncryptOfb:
+ 1345              	.LFB613:
+ 585:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 586:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 587:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* ----------
+ 588:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Output Feedback
+ 589:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * CT = PT ^ (FB = ENC (IV, EK))
+ 590:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * PT = CT ^ (FB = DEC (IV, DK))
+ 591:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 592:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 593:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptOfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 594:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1346              		.loc 1 594 0
+ 1347              		.cfi_startproc
+ 1348 0bae 55       		pushq	%rbp
+ 1349              	.LCFI46:
+ 1350              		.cfi_def_cfa_offset 16
+ 1351 0baf 4889E5   		movq	%rsp, %rbp
+ 1352              		.cfi_offset 6, -16
+ 1353              	.LCFI47:
+ 1354              		.cfi_def_cfa_register 6
+ 1355 0bb2 4883EC50 		subq	$80, %rsp
+ 1356 0bb6 48897DC8 		movq	%rdi, -56(%rbp)
+ 1357 0bba 488975C0 		movq	%rsi, -64(%rbp)
+
GAS LISTING /tmp/ccXzRABk.s 			page 40
+
+
+ 1358 0bbe 488955B8 		movq	%rdx, -72(%rbp)
+ 1359 0bc2 894DB4   		movl	%ecx, -76(%rbp)
+ 595:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #if 1
+ 596:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec cv;
+ 597:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherVec ivec;
+ 598:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     const uint8_t * pin;
+ 599:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     uint8_t * pout;
+ 600:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 601:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     ivec = *(const CipherVec*)self->dad.encrypt_ivec;
+ 1360              		.loc 1 601 0
+ 1361 0bc5 488B45C8 		movq	-56(%rbp), %rax
+ 1362 0bc9 488B4028 		movq	40(%rax), %rax
+ 1363 0bcd 660F6F00 		movdqa	(%rax), %xmm0
+ 1364 0bd1 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1364      E0
+ 602:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1365              		.loc 1 603 0
+ 1366 0bd6 488B45C0 		movq	-64(%rbp), %rax
+ 1367 0bda 488945F0 		movq	%rax, -16(%rbp)
+ 1368 0bde 488B45B8 		movq	-72(%rbp), %rax
+ 1369 0be2 488945F8 		movq	%rax, -8(%rbp)
+ 1370 0be6 EB65     		jmp	.L91
+ 1371              	.L92:
+ 604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 606:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 607:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         ivec = CMEMBER(EncryptV1)(self, ivec); 
+ 1372              		.loc 1 607 0
+ 1373 0be8 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1373      E0
+ 1374 0bed 488B45C8 		movq	-56(%rbp), %rax
+ 1375 0bf1 4889C7   		movq	%rax, %rdi
+ 1376 0bf4 E841F8FF 		call	KCipherVecRegEncryptV1
+ 1376      FF
+ 1377 0bf9 F30F7F45 		movdqu	%xmm0, -32(%rbp)
+ 1377      E0
+ 608:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv = CipherVecIn (pin);
+ 1378              		.loc 1 608 0
+ 1379 0bfe 488B45F0 		movq	-16(%rbp), %rax
+ 1380 0c02 4889C7   		movq	%rax, %rdi
+ 1381 0c05 E8F6F3FF 		call	CipherVecIn
+ 1381      FF
+ 1382 0c0a F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1382      D0
+ 609:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         cv ^= ivec;
+ 1383              		.loc 1 609 0
+ 1384 0c0f F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1384      E0
+ 1385 0c14 F30F6F4D 		movdqu	-48(%rbp), %xmm1
+ 1385      D0
+ 1386 0c19 660FEFC1 		pxor	%xmm1, %xmm0
+ 1387 0c1d F30F7F45 		movdqu	%xmm0, -48(%rbp)
+ 1387      D0
+ 610:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CipherVecOut (cv, pout);
+ 1388              		.loc 1 610 0
+ 1389 0c22 488B45F8 		movq	-8(%rbp), %rax
+
GAS LISTING /tmp/ccXzRABk.s 			page 41
+
+
+ 1390 0c26 F30F6F45 		movdqu	-48(%rbp), %xmm0
+ 1390      D0
+ 1391 0c2b 4889C7   		movq	%rax, %rdi
+ 1392 0c2e E8ECF3FF 		call	CipherVecOut
+ 1392      FF
+ 605:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          (pin += self->dad.block_size), (pout += self->dad.block_size))
+ 1393              		.loc 1 605 0
+ 1394 0c33 488B45C8 		movq	-56(%rbp), %rax
+ 1395 0c37 8B4004   		movl	4(%rax), %eax
+ 1396 0c3a 89C0     		mov	%eax, %eax
+ 1397 0c3c 480145F0 		addq	%rax, -16(%rbp)
+ 1398 0c40 488B45C8 		movq	-56(%rbp), %rax
+ 1399 0c44 8B4004   		movl	4(%rax), %eax
+ 1400 0c47 89C0     		mov	%eax, %eax
+ 1401 0c49 480145F8 		addq	%rax, -8(%rbp)
+ 1402              	.L91:
+ 604:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****          block_count --; 
+ 1403              		.loc 1 604 0
+ 1404 0c4d 837DB400 		cmpl	$0, -76(%rbp)
+ 1405 0c51 0F95C0   		setne	%al
+ 1406 0c54 836DB401 		subl	$1, -76(%rbp)
+ 603:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     for ((pin = in), (pout = out);
+ 1407              		.loc 1 603 0
+ 1408 0c58 84C0     		testb	%al, %al
+ 1409 0c5a 758C     		jne	.L92
+ 611:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 612:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 613:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *(CipherVec*)self->dad.encrypt_ivec = ivec;
+ 1410              		.loc 1 613 0
+ 1411 0c5c 488B45C8 		movq	-56(%rbp), %rax
+ 1412 0c60 488B4028 		movq	40(%rax), %rax
+ 1413 0c64 F30F6F45 		movdqu	-32(%rbp), %xmm0
+ 1413      E0
+ 1414 0c69 F30F7F00 		movdqu	%xmm0, (%rax)
+ 614:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 615:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1415              		.loc 1 615 0
+ 1416 0c6d B8000000 		movl	$0, %eax
+ 1416      00
+ 616:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #else
+ 617:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 618:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** #endif
+ 619:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1417              		.loc 1 619 0
+ 1418 0c72 C9       		leave
+ 1419 0c73 C3       		ret
+ 1420              		.cfi_endproc
+ 1421              	.LFE613:
+ 1422              		.size	KCipherVecRegEncryptOfb, .-KCipherVecRegEncryptOfb
+ 1423              		.type	KCipherVecRegDecryptOfb, @function
+ 1424              	KCipherVecRegDecryptOfb:
+ 1425              	.LFB614:
+ 620:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 621:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 622:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 623:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptOfb) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 624:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+
GAS LISTING /tmp/ccXzRABk.s 			page 42
+
+
+ 1426              		.loc 1 624 0
+ 1427              		.cfi_startproc
+ 1428 0c74 55       		pushq	%rbp
+ 1429              	.LCFI48:
+ 1430              		.cfi_def_cfa_offset 16
+ 1431 0c75 4889E5   		movq	%rsp, %rbp
+ 1432              		.cfi_offset 6, -16
+ 1433              	.LCFI49:
+ 1434              		.cfi_def_cfa_register 6
+ 1435 0c78 53       		pushq	%rbx
+ 1436 0c79 4883EC28 		subq	$40, %rsp
+ 1437 0c7d 48897DE8 		movq	%rdi, -24(%rbp)
+ 1438 0c81 488975E0 		movq	%rsi, -32(%rbp)
+ 1439 0c85 488955D8 		movq	%rdx, -40(%rbp)
+ 1440 0c89 894DD4   		movl	%ecx, -44(%rbp)
+ 625:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return CMEMBER(EncryptOfb)(self, in, out, block_count);
+ 1441              		.loc 1 625 0
+ 1442 0c8c 8B4DD4   		movl	-44(%rbp), %ecx
+ 1443 0c8f 488B55D8 		movq	-40(%rbp), %rdx
+ 1444 0c93 488B5DE0 		movq	-32(%rbp), %rbx
+ 1445              		.cfi_offset 3, -24
+ 1446 0c97 488B45E8 		movq	-24(%rbp), %rax
+ 1447 0c9b 4889DE   		movq	%rbx, %rsi
+ 1448 0c9e 4889C7   		movq	%rax, %rdi
+ 1449 0ca1 E808FFFF 		call	KCipherVecRegEncryptOfb
+ 1449      FF
+ 626:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1450              		.loc 1 626 0
+ 1451 0ca6 4883C428 		addq	$40, %rsp
+ 1452 0caa 5B       		popq	%rbx
+ 1453 0cab C9       		leave
+ 1454 0cac C3       		ret
+ 1455              		.cfi_endproc
+ 1456              	.LFE614:
+ 1457              		.size	KCipherVecRegDecryptOfb, .-KCipherVecRegDecryptOfb
+ 1458              		.type	KCipherVecRegEncryptCtr, @function
+ 1459              	KCipherVecRegEncryptCtr:
+ 1460              	.LFB615:
+ 627:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 628:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 629:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** /* Counter
+ 630:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * IV is a nonce and not re-used as FB
+ 631:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * CT = PT ^ ENC (N, EK)
+ 632:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * PT = CT ^ ENC (N, DK) 
+ 633:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * Note decrypt is encrypt.
+ 634:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  * nonce is a function that given an iv generates the next iv
+ 635:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****  */
+ 636:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 637:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(EncryptCtr) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 638:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1461              		.loc 1 638 0
+ 1462              		.cfi_startproc
+ 1463 0cad 55       		pushq	%rbp
+ 1464              	.LCFI50:
+ 1465              		.cfi_def_cfa_offset 16
+ 1466 0cae 4889E5   		movq	%rsp, %rbp
+ 1467              		.cfi_offset 6, -16
+
GAS LISTING /tmp/ccXzRABk.s 			page 43
+
+
+ 1468              	.LCFI51:
+ 1469              		.cfi_def_cfa_register 6
+ 1470 0cb1 4883EC20 		subq	$32, %rsp
+ 1471 0cb5 48897DF8 		movq	%rdi, -8(%rbp)
+ 1472 0cb9 488975F0 		movq	%rsi, -16(%rbp)
+ 1473 0cbd 488955E8 		movq	%rdx, -24(%rbp)
+ 1474 0cc1 894DE4   		movl	%ecx, -28(%rbp)
+ 639:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 1475              		.loc 1 639 0
+ 1476 0cc4 B97F0200 		movl	$639, %ecx
+ 1476      00
+ 1477 0cc9 488D1500 		leaq	__func__.7600(%rip), %rdx
+ 1477      000000
+ 1478 0cd0 488D3500 		leaq	.LC0(%rip), %rsi
+ 1478      000000
+ 1479 0cd7 BF030509 		movl	$-2029452029, %edi
+ 1479      87
+ 1480 0cdc E8000000 		call	SetRCFileFuncLine at PLT
+ 1480      00
+ 640:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1481              		.loc 1 640 0
+ 1482 0ce1 C9       		leave
+ 1483 0ce2 C3       		ret
+ 1484              		.cfi_endproc
+ 1485              	.LFE615:
+ 1486              		.size	KCipherVecRegEncryptCtr, .-KCipherVecRegEncryptCtr
+ 1487              		.type	KCipherVecRegDecryptCtr, @function
+ 1488              	KCipherVecRegDecryptCtr:
+ 1489              	.LFB616:
+ 641:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 642:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 643:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 644:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(DecryptCtr) (CIPHER_IMPL * self, const void * in, void * out, uint32_t block_count)
+ 645:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1490              		.loc 1 645 0
+ 1491              		.cfi_startproc
+ 1492 0ce3 55       		pushq	%rbp
+ 1493              	.LCFI52:
+ 1494              		.cfi_def_cfa_offset 16
+ 1495 0ce4 4889E5   		movq	%rsp, %rbp
+ 1496              		.cfi_offset 6, -16
+ 1497              	.LCFI53:
+ 1498              		.cfi_def_cfa_register 6
+ 1499 0ce7 4883EC20 		subq	$32, %rsp
+ 1500 0ceb 48897DF8 		movq	%rdi, -8(%rbp)
+ 1501 0cef 488975F0 		movq	%rsi, -16(%rbp)
+ 1502 0cf3 488955E8 		movq	%rdx, -24(%rbp)
+ 1503 0cf7 894DE4   		movl	%ecx, -28(%rbp)
+ 646:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return RC (rcKrypto, rcCipher, rcEncoding, rcFunction, rcUnsupported);
+ 1504              		.loc 1 646 0
+ 1505 0cfa B9860200 		movl	$646, %ecx
+ 1505      00
+ 1506 0cff 488D1500 		leaq	__func__.7610(%rip), %rdx
+ 1506      000000
+ 1507 0d06 488D3500 		leaq	.LC0(%rip), %rsi
+ 1507      000000
+ 1508 0d0d BF030509 		movl	$-2029452029, %edi
+
GAS LISTING /tmp/ccXzRABk.s 			page 44
+
+
+ 1508      87
+ 1509 0d12 E8000000 		call	SetRCFileFuncLine at PLT
+ 1509      00
+ 647:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1510              		.loc 1 647 0
+ 1511 0d17 C9       		leave
+ 1512 0d18 C3       		ret
+ 1513              		.cfi_endproc
+ 1514              	.LFE616:
+ 1515              		.size	KCipherVecRegDecryptCtr, .-KCipherVecRegDecryptCtr
+ 1516              		.section	.data.rel.local,"aw", at progbits
+ 1517              		.align 32
+ 1518              		.type	KCipherVecReg_vt_v1, @object
+ 1519              		.size	KCipherVecReg_vt_v1, 176
+ 1520              	KCipherVecReg_vt_v1:
+ 1521 0000 01000000 		.long	1
+ 1522 0004 00000000 		.long	0
+ 1523 0008 00000000 		.quad	KCipherVecRegDestroy
+ 1523      00000000 
+ 1524 0010 00000000 		.quad	KCipherVecRegSetEncryptKey
+ 1524      00000000 
+ 1525 0018 00000000 		.quad	KCipherVecRegSetDecryptKey
+ 1525      00000000 
+ 1526 0020 00000000 		.quad	KCipherVecRegSetEncryptIvec
+ 1526      00000000 
+ 1527 0028 00000000 		.quad	KCipherVecRegSetDecryptIvec
+ 1527      00000000 
+ 1528 0030 00000000 		.quad	KCipherVecRegSetEncryptCounterFunc
+ 1528      00000000 
+ 1529 0038 00000000 		.quad	KCipherVecRegSetDecryptCounterFunc
+ 1529      00000000 
+ 1530 0040 00000000 		.quad	KCipherVecRegEncrypt
+ 1530      00000000 
+ 1531 0048 00000000 		.quad	KCipherVecRegDecrypt
+ 1531      00000000 
+ 1532 0050 00000000 		.quad	KCipherVecRegEncryptEcb
+ 1532      00000000 
+ 1533 0058 00000000 		.quad	KCipherVecRegDecryptEcb
+ 1533      00000000 
+ 1534 0060 00000000 		.quad	KCipherVecRegEncryptCbc
+ 1534      00000000 
+ 1535 0068 00000000 		.quad	KCipherVecRegDecryptCbc
+ 1535      00000000 
+ 1536 0070 00000000 		.quad	KCipherVecRegEncryptPcbc
+ 1536      00000000 
+ 1537 0078 00000000 		.quad	KCipherVecRegDecryptPcbc
+ 1537      00000000 
+ 1538 0080 00000000 		.quad	KCipherVecRegEncryptCfb
+ 1538      00000000 
+ 1539 0088 00000000 		.quad	KCipherVecRegDecryptCfb
+ 1539      00000000 
+ 1540 0090 00000000 		.quad	KCipherVecRegEncryptOfb
+ 1540      00000000 
+ 1541 0098 00000000 		.quad	KCipherVecRegDecryptOfb
+ 1541      00000000 
+ 1542 00a0 00000000 		.quad	KCipherVecRegEncryptCtr
+ 1542      00000000 
+
GAS LISTING /tmp/ccXzRABk.s 			page 45
+
+
+ 1543 00a8 00000000 		.quad	KCipherVecRegDecryptCtr
+ 1543      00000000 
+ 1544              		.text
+ 1545              		.type	KCipherVecRegAllocAes, @function
+ 1546              	KCipherVecRegAllocAes:
+ 1547              	.LFB617:
+ 648:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 649:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static
+ 650:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** struct KCipher_vt_v1 CMEMBER(_vt_v1) =
+ 651:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 652:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     { 1, 0 },
+ 653:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 654:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(Destroy),
+ 655:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(SetEncryptKey),
+ 656:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(SetDecryptKey),
+ 657:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(SetEncryptIvec),
+ 658:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(SetDecryptIvec),
+ 659:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(SetEncryptCounterFunc),
+ 660:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(SetDecryptCounterFunc),
+ 661:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(Encrypt),
+ 662:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(Decrypt),
+ 663:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(EncryptEcb),
+ 664:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(DecryptEcb),
+ 665:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(EncryptCbc),
+ 666:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(DecryptCbc),
+ 667:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(EncryptPcbc),
+ 668:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(DecryptPcbc),
+ 669:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(EncryptCfb),
+ 670:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(DecryptCfb),
+ 671:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(EncryptOfb),
+ 672:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(DecryptOfb),
+ 673:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(EncryptCtr),
+ 674:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CMEMBER(DecryptCtr)
+ 675:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** };
+ 676:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 677:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 678:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 679:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(AllocAes)(CIPHER_IMPL ** pobj,
+ 680:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                        const KBlockCipher * block_cipher)
+ 681:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1548              		.loc 1 681 0
+ 1549              		.cfi_startproc
+ 1550 0d19 55       		pushq	%rbp
+ 1551              	.LCFI54:
+ 1552              		.cfi_def_cfa_offset 16
+ 1553 0d1a 4889E5   		movq	%rsp, %rbp
+ 1554              		.cfi_offset 6, -16
+ 1555              	.LCFI55:
+ 1556              		.cfi_def_cfa_register 6
+ 1557 0d1d 4883EC20 		subq	$32, %rsp
+ 1558 0d21 48897DE8 		movq	%rdi, -24(%rbp)
+ 1559 0d25 488975E0 		movq	%rsi, -32(%rbp)
+ 682:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherAes * obj;
+ 683:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 684:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     obj = calloc (1, sizeof (*obj));
+ 1560              		.loc 1 684 0
+ 1561 0d29 BE700200 		movl	$624, %esi
+
GAS LISTING /tmp/ccXzRABk.s 			page 46
+
+
+ 1561      00
+ 1562 0d2e BF010000 		movl	$1, %edi
+ 1562      00
+ 1563 0d33 E8000000 		call	calloc at PLT
+ 1563      00
+ 1564 0d38 488945F8 		movq	%rax, -8(%rbp)
+ 685:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *pobj = (CIPHER_IMPL*)obj;
+ 1565              		.loc 1 685 0
+ 1566 0d3c 488B55F8 		movq	-8(%rbp), %rdx
+ 1567 0d40 488B45E8 		movq	-24(%rbp), %rax
+ 1568 0d44 488910   		movq	%rdx, (%rax)
+ 686:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 687:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return (obj ? 0 : RC (rcKrypto, rcCipher, rcConstructing, rcMemory, rcExhausted));
+ 1569              		.loc 1 687 0
+ 1570 0d47 48837DF8 		cmpq	$0, -8(%rbp)
+ 1570      00
+ 1571 0d4c 751F     		jne	.L101
+ 1572 0d4e B9AF0200 		movl	$687, %ecx
+ 1572      00
+ 1573 0d53 488D1500 		leaq	__func__.7620(%rip), %rdx
+ 1573      000000
+ 1574 0d5a 488D3500 		leaq	.LC0(%rip), %rsi
+ 1574      000000
+ 1575 0d61 BF539000 		movl	$-2030006189, %edi
+ 1575      87
+ 1576 0d66 E8000000 		call	SetRCFileFuncLine at PLT
+ 1576      00
+ 1577 0d6b EB05     		jmp	.L102
+ 1578              	.L101:
+ 1579 0d6d B8000000 		movl	$0, %eax
+ 1579      00
+ 1580              	.L102:
+ 688:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1581              		.loc 1 688 0
+ 1582 0d72 C9       		leave
+ 1583 0d73 C3       		ret
+ 1584              		.cfi_endproc
+ 1585              	.LFE617:
+ 1586              		.size	KCipherVecRegAllocAes, .-KCipherVecRegAllocAes
+ 1587              		.type	KCipherVecRegInitAes, @function
+ 1588              	KCipherVecRegInitAes:
+ 1589              	.LFB618:
+ 689:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 690:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 691:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 692:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(InitAes) (CIPHER_IMPL * self,
+ 693:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                       const KBlockCipher * block_cipher)
+ 694:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1590              		.loc 1 694 0
+ 1591              		.cfi_startproc
+ 1592 0d74 55       		pushq	%rbp
+ 1593              	.LCFI56:
+ 1594              		.cfi_def_cfa_offset 16
+ 1595 0d75 4889E5   		movq	%rsp, %rbp
+ 1596              		.cfi_offset 6, -16
+ 1597              	.LCFI57:
+ 1598              		.cfi_def_cfa_register 6
+
GAS LISTING /tmp/ccXzRABk.s 			page 47
+
+
+ 1599 0d78 4883EC20 		subq	$32, %rsp
+ 1600 0d7c 48897DE8 		movq	%rdi, -24(%rbp)
+ 1601 0d80 488975E0 		movq	%rsi, -32(%rbp)
+ 695:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     KCipher * dad = &self->dad;
+ 1602              		.loc 1 695 0
+ 1603 0d84 488B45E8 		movq	-24(%rbp), %rax
+ 1604 0d88 488945F0 		movq	%rax, -16(%rbp)
+ 696:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherAes * aes = (struct CipherAes*)self;
+ 1605              		.loc 1 696 0
+ 1606 0d8c 488B45E8 		movq	-24(%rbp), %rax
+ 1607 0d90 488945F8 		movq	%rax, -8(%rbp)
+ 697:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 698:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     KCipherInit (dad, sizeof (CipherVec),
+ 1608              		.loc 1 698 0
+ 1609 0d94 488B45F0 		movq	-16(%rbp), %rax
+ 1610 0d98 488B1500 		movq	KCipherVecRegClassName at GOTPCREL(%rip), %rdx
+ 1610      000000
+ 1611 0d9f 4889D1   		movq	%rdx, %rcx
+ 1612 0da2 488D1500 		leaq	KCipherVecReg_vt_v1(%rip), %rdx
+ 1612      000000
+ 1613 0da9 BE100000 		movl	$16, %esi
+ 1613      00
+ 1614 0dae 4889C7   		movq	%rax, %rdi
+ 1615 0db1 E8000000 		call	KCipherInit at PLT
+ 1615      00
+ 699:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                  (const KCipher_vt*)&CMEMBER(_vt_v1),
+ 700:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                  CMEMBER(ClassName));
+ 701:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 702:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->encrypt_key = &aes->e_key;
+ 1616              		.loc 1 702 0
+ 1617 0db6 488B45F8 		movq	-8(%rbp), %rax
+ 1618 0dba 488D5050 		leaq	80(%rax), %rdx
+ 1619 0dbe 488B45F0 		movq	-16(%rbp), %rax
+ 1620 0dc2 48895018 		movq	%rdx, 24(%rax)
+ 703:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->decrypt_key = &aes->d_key;
+ 1621              		.loc 1 703 0
+ 1622 0dc6 488B45F8 		movq	-8(%rbp), %rax
+ 1623 0dca 488D9050 		leaq	336(%rax), %rdx
+ 1623      010000
+ 1624 0dd1 488B45F0 		movq	-16(%rbp), %rax
+ 1625 0dd5 48895020 		movq	%rdx, 32(%rax)
+ 704:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->encrypt_ivec = &aes->e_ivec;
+ 1626              		.loc 1 704 0
+ 1627 0dd9 488B45F8 		movq	-8(%rbp), %rax
+ 1628 0ddd 488D9050 		leaq	592(%rax), %rdx
+ 1628      020000
+ 1629 0de4 488B45F0 		movq	-16(%rbp), %rax
+ 1630 0de8 48895028 		movq	%rdx, 40(%rax)
+ 705:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->decrypt_ivec = &aes->d_ivec;
+ 1631              		.loc 1 705 0
+ 1632 0dec 488B45F8 		movq	-8(%rbp), %rax
+ 1633 0df0 488D9060 		leaq	608(%rax), %rdx
+ 1633      020000
+ 1634 0df7 488B45F0 		movq	-16(%rbp), %rax
+ 1635 0dfb 48895030 		movq	%rdx, 48(%rax)
+ 706:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 707:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     self->block_cipher = &block_cipher->vec;
+
GAS LISTING /tmp/ccXzRABk.s 			page 48
+
+
+ 1636              		.loc 1 707 0
+ 1637 0dff 488B55E0 		movq	-32(%rbp), %rdx
+ 1638 0e03 488B45E8 		movq	-24(%rbp), %rax
+ 1639 0e07 48895048 		movq	%rdx, 72(%rax)
+ 708:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 709:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1640              		.loc 1 709 0
+ 1641 0e0b B8000000 		movl	$0, %eax
+ 1641      00
+ 710:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1642              		.loc 1 710 0
+ 1643 0e10 C9       		leave
+ 1644 0e11 C3       		ret
+ 1645              		.cfi_endproc
+ 1646              	.LFE618:
+ 1647              		.size	KCipherVecRegInitAes, .-KCipherVecRegInitAes
+ 1648              		.type	KCipherVecRegAllocNull, @function
+ 1649              	KCipherVecRegAllocNull:
+ 1650              	.LFB619:
+ 711:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 712:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 713:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 714:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(AllocNull)(CIPHER_IMPL ** pobj,
+ 715:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                         const KBlockCipher * block_cipher)
+ 716:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1651              		.loc 1 716 0
+ 1652              		.cfi_startproc
+ 1653 0e12 55       		pushq	%rbp
+ 1654              	.LCFI58:
+ 1655              		.cfi_def_cfa_offset 16
+ 1656 0e13 4889E5   		movq	%rsp, %rbp
+ 1657              		.cfi_offset 6, -16
+ 1658              	.LCFI59:
+ 1659              		.cfi_def_cfa_register 6
+ 1660 0e16 4883EC20 		subq	$32, %rsp
+ 1661 0e1a 48897DE8 		movq	%rdi, -24(%rbp)
+ 1662 0e1e 488975E0 		movq	%rsi, -32(%rbp)
+ 717:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherNull * obj;
+ 718:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 719:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     obj = calloc (1, sizeof (*obj));
+ 1663              		.loc 1 719 0
+ 1664 0e22 BE700000 		movl	$112, %esi
+ 1664      00
+ 1665 0e27 BF010000 		movl	$1, %edi
+ 1665      00
+ 1666 0e2c E8000000 		call	calloc at PLT
+ 1666      00
+ 1667 0e31 488945F8 		movq	%rax, -8(%rbp)
+ 720:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *pobj = (CIPHER_IMPL*)obj;
+ 1668              		.loc 1 720 0
+ 1669 0e35 488B55F8 		movq	-8(%rbp), %rdx
+ 1670 0e39 488B45E8 		movq	-24(%rbp), %rax
+ 1671 0e3d 488910   		movq	%rdx, (%rax)
+ 721:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 722:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return (obj ? 0 : RC (rcKrypto, rcCipher, rcConstructing, rcMemory, rcExhausted));
+ 1672              		.loc 1 722 0
+ 1673 0e40 48837DF8 		cmpq	$0, -8(%rbp)
+
GAS LISTING /tmp/ccXzRABk.s 			page 49
+
+
+ 1673      00
+ 1674 0e45 751F     		jne	.L107
+ 1675 0e47 B9D20200 		movl	$722, %ecx
+ 1675      00
+ 1676 0e4c 488D1500 		leaq	__func__.7647(%rip), %rdx
+ 1676      000000
+ 1677 0e53 488D3500 		leaq	.LC0(%rip), %rsi
+ 1677      000000
+ 1678 0e5a BF539000 		movl	$-2030006189, %edi
+ 1678      87
+ 1679 0e5f E8000000 		call	SetRCFileFuncLine at PLT
+ 1679      00
+ 1680 0e64 EB05     		jmp	.L108
+ 1681              	.L107:
+ 1682 0e66 B8000000 		movl	$0, %eax
+ 1682      00
+ 1683              	.L108:
+ 723:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1684              		.loc 1 723 0
+ 1685 0e6b C9       		leave
+ 1686 0e6c C3       		ret
+ 1687              		.cfi_endproc
+ 1688              	.LFE619:
+ 1689              		.size	KCipherVecRegAllocNull, .-KCipherVecRegAllocNull
+ 1690              		.type	KCipherVecRegInitNull, @function
+ 1691              	KCipherVecRegInitNull:
+ 1692              	.LFB620:
+ 724:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 725:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 726:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** static __inline__
+ 727:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(InitNull) (CIPHER_IMPL * self,
+ 728:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                         const KBlockCipher * block_cipher)
+ 729:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1693              		.loc 1 729 0
+ 1694              		.cfi_startproc
+ 1695 0e6d 55       		pushq	%rbp
+ 1696              	.LCFI60:
+ 1697              		.cfi_def_cfa_offset 16
+ 1698 0e6e 4889E5   		movq	%rsp, %rbp
+ 1699              		.cfi_offset 6, -16
+ 1700              	.LCFI61:
+ 1701              		.cfi_def_cfa_register 6
+ 1702 0e71 4883EC20 		subq	$32, %rsp
+ 1703 0e75 48897DE8 		movq	%rdi, -24(%rbp)
+ 1704 0e79 488975E0 		movq	%rsi, -32(%rbp)
+ 730:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     KCipher * dad = &self->dad;
+ 1705              		.loc 1 730 0
+ 1706 0e7d 488B45E8 		movq	-24(%rbp), %rax
+ 1707 0e81 488945F0 		movq	%rax, -16(%rbp)
+ 731:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     CipherNull * null = (CipherNull*)self;
+ 1708              		.loc 1 731 0
+ 1709 0e85 488B45E8 		movq	-24(%rbp), %rax
+ 1710 0e89 488945F8 		movq	%rax, -8(%rbp)
+ 732:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 733:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     KCipherInit (dad, sizeof (CipherVec),
+ 1711              		.loc 1 733 0
+ 1712 0e8d 488B45F0 		movq	-16(%rbp), %rax
+
GAS LISTING /tmp/ccXzRABk.s 			page 50
+
+
+ 1713 0e91 488B1500 		movq	KCipherVecRegClassName at GOTPCREL(%rip), %rdx
+ 1713      000000
+ 1714 0e98 4889D1   		movq	%rdx, %rcx
+ 1715 0e9b 488D1500 		leaq	KCipherVecReg_vt_v1(%rip), %rdx
+ 1715      000000
+ 1716 0ea2 BE100000 		movl	$16, %esi
+ 1716      00
+ 1717 0ea7 4889C7   		movq	%rax, %rdi
+ 1718 0eaa E8000000 		call	KCipherInit at PLT
+ 1718      00
+ 734:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                  (const KCipher_vt*)&CMEMBER(_vt_v1),
+ 735:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                  CMEMBER(ClassName));
+ 736:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 737:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->encrypt_key = &null->e_ivec;
+ 1719              		.loc 1 737 0
+ 1720 0eaf 488B45F8 		movq	-8(%rbp), %rax
+ 1721 0eb3 488D5050 		leaq	80(%rax), %rdx
+ 1722 0eb7 488B45F0 		movq	-16(%rbp), %rax
+ 1723 0ebb 48895018 		movq	%rdx, 24(%rax)
+ 738:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->decrypt_key = &null->d_ivec;
+ 1724              		.loc 1 738 0
+ 1725 0ebf 488B45F8 		movq	-8(%rbp), %rax
+ 1726 0ec3 488D5060 		leaq	96(%rax), %rdx
+ 1727 0ec7 488B45F0 		movq	-16(%rbp), %rax
+ 1728 0ecb 48895020 		movq	%rdx, 32(%rax)
+ 739:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->encrypt_ivec = &null->e_ivec;
+ 1729              		.loc 1 739 0
+ 1730 0ecf 488B45F8 		movq	-8(%rbp), %rax
+ 1731 0ed3 488D5050 		leaq	80(%rax), %rdx
+ 1732 0ed7 488B45F0 		movq	-16(%rbp), %rax
+ 1733 0edb 48895028 		movq	%rdx, 40(%rax)
+ 740:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     dad->decrypt_ivec = &null->d_ivec;
+ 1734              		.loc 1 740 0
+ 1735 0edf 488B45F8 		movq	-8(%rbp), %rax
+ 1736 0ee3 488D5060 		leaq	96(%rax), %rdx
+ 1737 0ee7 488B45F0 		movq	-16(%rbp), %rax
+ 1738 0eeb 48895030 		movq	%rdx, 48(%rax)
+ 741:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 742:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     self->block_cipher = &block_cipher->vec;
+ 1739              		.loc 1 742 0
+ 1740 0eef 488B55E0 		movq	-32(%rbp), %rdx
+ 1741 0ef3 488B45E8 		movq	-24(%rbp), %rax
+ 1742 0ef7 48895048 		movq	%rdx, 72(%rax)
+ 743:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 744:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return 0;
+ 1743              		.loc 1 744 0
+ 1744 0efb B8000000 		movl	$0, %eax
+ 1744      00
+ 745:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1745              		.loc 1 745 0
+ 1746 0f00 C9       		leave
+ 1747 0f01 C3       		ret
+ 1748              		.cfi_endproc
+ 1749              	.LFE620:
+ 1750              		.size	KCipherVecRegInitNull, .-KCipherVecRegInitNull
+ 1751              	.globl KCipherVecRegMake
+ 1752              		.type	KCipherVecRegMake, @function
+
GAS LISTING /tmp/ccXzRABk.s 			page 51
+
+
+ 1753              	KCipherVecRegMake:
+ 1754              	.LFB621:
+ 746:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 747:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 748:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** rc_t CMEMBER(Make) (KCipher ** new_obj, kcipher_type type)
+ 749:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** {
+ 1755              		.loc 1 749 0
+ 1756              		.cfi_startproc
+ 1757 0f02 55       		pushq	%rbp
+ 1758              	.LCFI62:
+ 1759              		.cfi_def_cfa_offset 16
+ 1760 0f03 4889E5   		movq	%rsp, %rbp
+ 1761              		.cfi_offset 6, -16
+ 1762              	.LCFI63:
+ 1763              		.cfi_def_cfa_register 6
+ 1764 0f06 4883EC30 		subq	$48, %rsp
+ 1765 0f0a 48897DD8 		movq	%rdi, -40(%rbp)
+ 1766 0f0e 8975D4   		movl	%esi, -44(%rbp)
+ 750:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     rc_t rc;
+ 751:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     KBlockCipher * block_cipher;
+ 752:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 753:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     if (new_obj == NULL)
+ 1767              		.loc 1 753 0
+ 1768 0f11 48837DD8 		cmpq	$0, -40(%rbp)
+ 1768      00
+ 1769 0f16 7522     		jne	.L113
+ 754:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         return RC (rcKrypto, rcCipher, rcConstructing, rcSelf, rcNull);
+ 1770              		.loc 1 754 0
+ 1771 0f18 B9F20200 		movl	$754, %ecx
+ 1771      00
+ 1772 0f1d 488D1500 		leaq	__func__.7675(%rip), %rdx
+ 1772      000000
+ 1773 0f24 488D3500 		leaq	.LC0(%rip), %rsi
+ 1773      000000
+ 1774 0f2b BF878F00 		movl	$-2030006393, %edi
+ 1774      87
+ 1775 0f30 E8000000 		call	SetRCFileFuncLine at PLT
+ 1775      00
+ 1776 0f35 E9280100 		jmp	.L114
+ 1776      00
+ 1777              	.L113:
+ 755:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 756:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     *new_obj = NULL;
+ 1778              		.loc 1 756 0
+ 1779 0f3a 488B45D8 		movq	-40(%rbp), %rax
+ 1780 0f3e 48C70000 		movq	$0, (%rax)
+ 1780      000000
+ 757:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 758:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     switch (type)
+ 1781              		.loc 1 758 0
+ 1782 0f45 8B45D4   		movl	-44(%rbp), %eax
+ 1783 0f48 85C0     		testl	%eax, %eax
+ 1784 0f4a 7427     		je	.L116
+ 1785 0f4c 83F801   		cmpl	$1, %eax
+ 1786 0f4f 7433     		je	.L117
+ 759:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 760:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     default:
+
GAS LISTING /tmp/ccXzRABk.s 			page 52
+
+
+ 761:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         return RC (rcKrypto, rcCipher, rcConstructing, rcParam, rcInvalid);
+ 1787              		.loc 1 761 0
+ 1788 0f51 B9F90200 		movl	$761, %ecx
+ 1788      00
+ 1789 0f56 488D1500 		leaq	__func__.7675(%rip), %rdx
+ 1789      000000
+ 1790 0f5d 488D3500 		leaq	.LC0(%rip), %rsi
+ 1790      000000
+ 1791 0f64 BFCA8F00 		movl	$-2030006326, %edi
+ 1791      87
+ 1792 0f69 E8000000 		call	SetRCFileFuncLine at PLT
+ 1792      00
+ 1793 0f6e E9EF0000 		jmp	.L114
+ 1793      00
+ 1794              	.L116:
+ 762:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 763:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     case kcipher_null:
+ 764:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = NULLBCMEMBER(Make)(&block_cipher);
+ 1795              		.loc 1 764 0
+ 1796 0f73 488D45F0 		leaq	-16(%rbp), %rax
+ 1797 0f77 4889C7   		movq	%rax, %rdi
+ 1798 0f7a E8000000 		call	KNullBlockCipherVecRegMake at PLT
+ 1798      00
+ 1799 0f7f 8945FC   		movl	%eax, -4(%rbp)
+ 765:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 1800              		.loc 1 765 0
+ 1801 0f82 EB0F     		jmp	.L118
+ 1802              	.L117:
+ 766:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 767:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     case kcipher_AES:
+ 768:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         rc = AESBCMEMBER(Make)(&block_cipher);
+ 1803              		.loc 1 768 0
+ 1804 0f84 488D45F0 		leaq	-16(%rbp), %rax
+ 1805 0f88 4889C7   		movq	%rax, %rdi
+ 1806 0f8b E8000000 		call	KAESBlockCipherVecRegMake at PLT
+ 1806      00
+ 1807 0f90 8945FC   		movl	%eax, -4(%rbp)
+ 1808              	.L118:
+ 769:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         break;
+ 770:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 771:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 772:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     if (rc == 0)
+ 1809              		.loc 1 772 0
+ 1810 0f93 837DFC00 		cmpl	$0, -4(%rbp)
+ 1811 0f97 0F85C200 		jne	.L119
+ 1811      0000
+ 1812              	.LBB5:
+ 773:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     {
+ 774:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         CIPHER_IMPL * obj;
+ 775:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** 
+ 776:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         switch (type)
+ 1813              		.loc 1 776 0
+ 1814 0f9d 8B45D4   		movl	-44(%rbp), %eax
+ 1815 0fa0 85C0     		testl	%eax, %eax
+ 1816 0fa2 740A     		je	.L120
+ 1817 0fa4 83F801   		cmpl	$1, %eax
+ 1818 0fa7 745F     		je	.L121
+
GAS LISTING /tmp/ccXzRABk.s 			page 53
+
+
+ 1819 0fa9 E9B10000 		jmp	.L119
+ 1819      00
+ 1820              	.L120:
+ 777:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         {
+ 778:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         case kcipher_null:
+ 779:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             rc = CMEMBER(AllocNull) (&obj, block_cipher);
+ 1821              		.loc 1 779 0
+ 1822 0fae 488B55F0 		movq	-16(%rbp), %rdx
+ 1823 0fb2 488D45E8 		leaq	-24(%rbp), %rax
+ 1824 0fb6 4889D6   		movq	%rdx, %rsi
+ 1825 0fb9 4889C7   		movq	%rax, %rdi
+ 1826 0fbc E851FEFF 		call	KCipherVecRegAllocNull
+ 1826      FF
+ 1827 0fc1 8945FC   		movl	%eax, -4(%rbp)
+ 780:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             if (rc == 0)
+ 1828              		.loc 1 780 0
+ 1829 0fc4 837DFC00 		cmpl	$0, -4(%rbp)
+ 1830 0fc8 0F859000 		jne	.L126
+ 1830      0000
+ 781:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             {
+ 782:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                 rc = CMEMBER(InitNull) (obj, block_cipher);
+ 1831              		.loc 1 782 0
+ 1832 0fce 488B55F0 		movq	-16(%rbp), %rdx
+ 1833 0fd2 488B45E8 		movq	-24(%rbp), %rax
+ 1834 0fd6 4889D6   		movq	%rdx, %rsi
+ 1835 0fd9 4889C7   		movq	%rax, %rdi
+ 1836 0fdc E88CFEFF 		call	KCipherVecRegInitNull
+ 1836      FF
+ 1837 0fe1 8945FC   		movl	%eax, -4(%rbp)
+ 783:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                 if (rc == 0)
+ 1838              		.loc 1 783 0
+ 1839 0fe4 837DFC00 		cmpl	$0, -4(%rbp)
+ 1840 0fe8 7510     		jne	.L123
+ 784:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                     *new_obj = (KCipher*)obj;
+ 1841              		.loc 1 784 0
+ 1842 0fea 488B45E8 		movq	-24(%rbp), %rax
+ 1843 0fee 4889C2   		movq	%rax, %rdx
+ 1844 0ff1 488B45D8 		movq	-40(%rbp), %rax
+ 1845 0ff5 488910   		movq	%rdx, (%rax)
+ 785:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                 else
+ 786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                     free (obj);
+ 787:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             }
+ 788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             break;
+ 1846              		.loc 1 788 0
+ 1847 0ff8 EB65     		jmp	.L119
+ 1848              	.L123:
+ 786:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                     free (obj);
+ 1849              		.loc 1 786 0
+ 1850 0ffa 488B45E8 		movq	-24(%rbp), %rax
+ 1851 0ffe 4889C7   		movq	%rax, %rdi
+ 1852 1001 E8000000 		call	free at PLT
+ 1852      00
+ 1853              		.loc 1 788 0
+ 1854 1006 EB57     		jmp	.L119
+ 1855              	.L121:
+ 789:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         case kcipher_AES:
+ 790:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             rc = CMEMBER(AllocAes) (&obj, block_cipher);
+
GAS LISTING /tmp/ccXzRABk.s 			page 54
+
+
+ 1856              		.loc 1 790 0
+ 1857 1008 488B55F0 		movq	-16(%rbp), %rdx
+ 1858 100c 488D45E8 		leaq	-24(%rbp), %rax
+ 1859 1010 4889D6   		movq	%rdx, %rsi
+ 1860 1013 4889C7   		movq	%rax, %rdi
+ 1861 1016 E8FEFCFF 		call	KCipherVecRegAllocAes
+ 1861      FF
+ 1862 101b 8945FC   		movl	%eax, -4(%rbp)
+ 791:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             if (rc == 0)
+ 1863              		.loc 1 791 0
+ 1864 101e 837DFC00 		cmpl	$0, -4(%rbp)
+ 1865 1022 753B     		jne	.L119
+ 792:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             {
+ 793:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                 rc = CMEMBER(InitAes) (obj, block_cipher);
+ 1866              		.loc 1 793 0
+ 1867 1024 488B55F0 		movq	-16(%rbp), %rdx
+ 1868 1028 488B45E8 		movq	-24(%rbp), %rax
+ 1869 102c 4889D6   		movq	%rdx, %rsi
+ 1870 102f 4889C7   		movq	%rax, %rdi
+ 1871 1032 E83DFDFF 		call	KCipherVecRegInitAes
+ 1871      FF
+ 1872 1037 8945FC   		movl	%eax, -4(%rbp)
+ 794:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                 if (rc == 0)
+ 1873              		.loc 1 794 0
+ 1874 103a 837DFC00 		cmpl	$0, -4(%rbp)
+ 1875 103e 7510     		jne	.L124
+ 795:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                     *new_obj = (KCipher*)obj;
+ 1876              		.loc 1 795 0
+ 1877 1040 488B45E8 		movq	-24(%rbp), %rax
+ 1878 1044 4889C2   		movq	%rax, %rdx
+ 1879 1047 488B45D8 		movq	-40(%rbp), %rax
+ 1880 104b 488910   		movq	%rdx, (%rax)
+ 1881 104e EB0F     		jmp	.L119
+ 1882              	.L124:
+ 796:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                 else
+ 797:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****                     free (obj);
+ 1883              		.loc 1 797 0
+ 1884 1050 488B45E8 		movq	-24(%rbp), %rax
+ 1885 1054 4889C7   		movq	%rax, %rdi
+ 1886 1057 E8000000 		call	free at PLT
+ 1886      00
+ 1887 105c EB01     		jmp	.L119
+ 1888              	.L126:
+ 788:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             break;
+ 1889              		.loc 1 788 0
+ 1890 105e 90       		nop
+ 1891              	.L119:
+ 1892              	.LBE5:
+ 798:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             }
+ 799:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         default:
+ 800:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             /* can't really get here */
+ 801:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****             break;
+ 802:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****         }
+ 803:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     }
+ 804:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c ****     return rc;
+ 1893              		.loc 1 804 0
+ 1894 105f 8B45FC   		movl	-4(%rbp), %eax
+
GAS LISTING /tmp/ccXzRABk.s 			page 55
+
+
+ 1895              	.L114:
+ 805:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c **** }
+ 1896              		.loc 1 805 0
+ 1897 1062 C9       		leave
+ 1898 1063 C3       		ret
+ 1899              		.cfi_endproc
+ 1900              	.LFE621:
+ 1901              		.size	KCipherVecRegMake, .-KCipherVecRegMake
+ 1902              		.section	.rodata
+ 1903 006e 0000     		.align 16
+ 1904              		.type	__func__.7675, @object
+ 1905              		.size	__func__.7675, 18
+ 1906              	__func__.7675:
+ 1907 0070 4B436970 		.string	"KCipherVecRegMake"
+ 1907      68657256 
+ 1907      65635265 
+ 1907      674D616B 
+ 1907      6500
+ 1908 0082 00000000 		.align 16
+ 1908      00000000 
+ 1908      00000000 
+ 1908      0000
+ 1909              		.type	__PRETTY_FUNCTION__.7674, @object
+ 1910              		.size	__PRETTY_FUNCTION__.7674, 18
+ 1911              	__PRETTY_FUNCTION__.7674:
+ 1912 0090 4B436970 		.string	"KCipherVecRegMake"
+ 1912      68657256 
+ 1912      65635265 
+ 1912      674D616B 
+ 1912      6500
+ 1913 00a2 00000000 		.align 16
+ 1913      00000000 
+ 1913      00000000 
+ 1913      0000
+ 1914              		.type	__func__.7647, @object
+ 1915              		.size	__func__.7647, 23
+ 1916              	__func__.7647:
+ 1917 00b0 4B436970 		.string	"KCipherVecRegAllocNull"
+ 1917      68657256 
+ 1917      65635265 
+ 1917      67416C6C 
+ 1917      6F634E75 
+ 1918 00c7 00000000 		.align 16
+ 1918      00000000 
+ 1918      00
+ 1919              		.type	__PRETTY_FUNCTION__.7646, @object
+ 1920              		.size	__PRETTY_FUNCTION__.7646, 23
+ 1921              	__PRETTY_FUNCTION__.7646:
+ 1922 00d0 4B436970 		.string	"KCipherVecRegAllocNull"
+ 1922      68657256 
+ 1922      65635265 
+ 1922      67416C6C 
+ 1922      6F634E75 
+ 1923 00e7 00000000 		.align 16
+ 1923      00000000 
+ 1923      00
+ 1924              		.type	__func__.7620, @object
+
GAS LISTING /tmp/ccXzRABk.s 			page 56
+
+
+ 1925              		.size	__func__.7620, 22
+ 1926              	__func__.7620:
+ 1927 00f0 4B436970 		.string	"KCipherVecRegAllocAes"
+ 1927      68657256 
+ 1927      65635265 
+ 1927      67416C6C 
+ 1927      6F634165 
+ 1928 0106 00000000 		.align 16
+ 1928      00000000 
+ 1928      0000
+ 1929              		.type	__PRETTY_FUNCTION__.7619, @object
+ 1930              		.size	__PRETTY_FUNCTION__.7619, 22
+ 1931              	__PRETTY_FUNCTION__.7619:
+ 1932 0110 4B436970 		.string	"KCipherVecRegAllocAes"
+ 1932      68657256 
+ 1932      65635265 
+ 1932      67416C6C 
+ 1932      6F634165 
+ 1933 0126 00000000 		.align 16
+ 1933      00000000 
+ 1933      0000
+ 1934              		.type	__func__.7610, @object
+ 1935              		.size	__func__.7610, 24
+ 1936              	__func__.7610:
+ 1937 0130 4B436970 		.string	"KCipherVecRegDecryptCtr"
+ 1937      68657256 
+ 1937      65635265 
+ 1937      67446563 
+ 1937      72797074 
+ 1938 0148 00000000 		.align 16
+ 1938      00000000 
+ 1939              		.type	__PRETTY_FUNCTION__.7609, @object
+ 1940              		.size	__PRETTY_FUNCTION__.7609, 24
+ 1941              	__PRETTY_FUNCTION__.7609:
+ 1942 0150 4B436970 		.string	"KCipherVecRegDecryptCtr"
+ 1942      68657256 
+ 1942      65635265 
+ 1942      67446563 
+ 1942      72797074 
+ 1943 0168 00000000 		.align 16
+ 1943      00000000 
+ 1944              		.type	__func__.7600, @object
+ 1945              		.size	__func__.7600, 24
+ 1946              	__func__.7600:
+ 1947 0170 4B436970 		.string	"KCipherVecRegEncryptCtr"
+ 1947      68657256 
+ 1947      65635265 
+ 1947      67456E63 
+ 1947      72797074 
+ 1948 0188 00000000 		.align 16
+ 1948      00000000 
+ 1949              		.type	__PRETTY_FUNCTION__.7599, @object
+ 1950              		.size	__PRETTY_FUNCTION__.7599, 24
+ 1951              	__PRETTY_FUNCTION__.7599:
+ 1952 0190 4B436970 		.string	"KCipherVecRegEncryptCtr"
+ 1952      68657256 
+ 1952      65635265 
+
GAS LISTING /tmp/ccXzRABk.s 			page 57
+
+
+ 1952      67456E63 
+ 1952      72797074 
+ 1953 01a8 00000000 		.align 16
+ 1953      00000000 
+ 1954              		.type	__func__.7366, @object
+ 1955              		.size	__func__.7366, 21
+ 1956              	__func__.7366:
+ 1957 01b0 4B436970 		.string	"KCipherVecRegDecrypt"
+ 1957      68657256 
+ 1957      65635265 
+ 1957      67446563 
+ 1957      72797074 
+ 1958 01c5 00000000 		.align 16
+ 1958      00000000 
+ 1958      000000
+ 1959              		.type	__PRETTY_FUNCTION__.7365, @object
+ 1960              		.size	__PRETTY_FUNCTION__.7365, 21
+ 1961              	__PRETTY_FUNCTION__.7365:
+ 1962 01d0 4B436970 		.string	"KCipherVecRegDecrypt"
+ 1962      68657256 
+ 1962      65635265 
+ 1962      67446563 
+ 1962      72797074 
+ 1963 01e5 00000000 		.align 16
+ 1963      00000000 
+ 1963      000000
+ 1964              		.type	__func__.7350, @object
+ 1965              		.size	__func__.7350, 21
+ 1966              	__func__.7350:
+ 1967 01f0 4B436970 		.string	"KCipherVecRegEncrypt"
+ 1967      68657256 
+ 1967      65635265 
+ 1967      67456E63 
+ 1967      72797074 
+ 1968 0205 00000000 		.align 16
+ 1968      00000000 
+ 1968      000000
+ 1969              		.type	__PRETTY_FUNCTION__.7349, @object
+ 1970              		.size	__PRETTY_FUNCTION__.7349, 21
+ 1971              	__PRETTY_FUNCTION__.7349:
+ 1972 0210 4B436970 		.string	"KCipherVecRegEncrypt"
+ 1972      68657256 
+ 1972      65635265 
+ 1972      67456E63 
+ 1972      72797074 
+ 1973 0225 00000000 		.align 32
+ 1973      00000000 
+ 1973      00000000 
+ 1973      00000000 
+ 1973      00000000 
+ 1974              		.type	__PRETTY_FUNCTION__.7300, @object
+ 1975              		.size	__PRETTY_FUNCTION__.7300, 35
+ 1976              	__PRETTY_FUNCTION__.7300:
+ 1977 0240 4B436970 		.string	"KCipherVecRegSetDecryptCounterFunc"
+ 1977      68657256 
+ 1977      65635265 
+ 1977      67536574 
+
GAS LISTING /tmp/ccXzRABk.s 			page 58
+
+
+ 1977      44656372 
+ 1978 0263 00000000 		.align 32
+ 1978      00000000 
+ 1978      00000000 
+ 1978      00000000 
+ 1978      00000000 
+ 1979              		.type	__PRETTY_FUNCTION__.7290, @object
+ 1980              		.size	__PRETTY_FUNCTION__.7290, 35
+ 1981              	__PRETTY_FUNCTION__.7290:
+ 1982 0280 4B436970 		.string	"KCipherVecRegSetEncryptCounterFunc"
+ 1982      68657256 
+ 1982      65635265 
+ 1982      67536574 
+ 1982      456E6372 
+ 1983 02a3 00000000 		.align 16
+ 1983      00000000 
+ 1983      00000000 
+ 1983      00
+ 1984              		.type	__PRETTY_FUNCTION__.7277, @object
+ 1985              		.size	__PRETTY_FUNCTION__.7277, 28
+ 1986              	__PRETTY_FUNCTION__.7277:
+ 1987 02b0 4B436970 		.string	"KCipherVecRegSetDecryptIvec"
+ 1987      68657256 
+ 1987      65635265 
+ 1987      67536574 
+ 1987      44656372 
+ 1988 02cc 00000000 		.align 16
+ 1989              		.type	__PRETTY_FUNCTION__.7264, @object
+ 1990              		.size	__PRETTY_FUNCTION__.7264, 28
+ 1991              	__PRETTY_FUNCTION__.7264:
+ 1992 02d0 4B436970 		.string	"KCipherVecRegSetEncryptIvec"
+ 1992      68657256 
+ 1992      65635265 
+ 1992      67536574 
+ 1992      456E6372 
+ 1993 02ec 00000000 		.align 16
+ 1994              		.type	__PRETTY_FUNCTION__.7242, @object
+ 1995              		.size	__PRETTY_FUNCTION__.7242, 27
+ 1996              	__PRETTY_FUNCTION__.7242:
+ 1997 02f0 4B436970 		.string	"KCipherVecRegSetDecryptKey"
+ 1997      68657256 
+ 1997      65635265 
+ 1997      67536574 
+ 1997      44656372 
+ 1998 030b 00000000 		.align 16
+ 1998      00
+ 1999              		.type	__func__.7244, @object
+ 2000              		.size	__func__.7244, 27
+ 2001              	__func__.7244:
+ 2002 0310 4B436970 		.string	"KCipherVecRegSetDecryptKey"
+ 2002      68657256 
+ 2002      65635265 
+ 2002      67536574 
+ 2002      44656372 
+ 2003 032b 00000000 		.align 16
+ 2003      00
+ 2004              		.type	__PRETTY_FUNCTION__.7218, @object
+
GAS LISTING /tmp/ccXzRABk.s 			page 59
+
+
+ 2005              		.size	__PRETTY_FUNCTION__.7218, 27
+ 2006              	__PRETTY_FUNCTION__.7218:
+ 2007 0330 4B436970 		.string	"KCipherVecRegSetEncryptKey"
+ 2007      68657256 
+ 2007      65635265 
+ 2007      67536574 
+ 2007      456E6372 
+ 2008 034b 00000000 		.align 16
+ 2008      00
+ 2009              		.type	__func__.7220, @object
+ 2010              		.size	__func__.7220, 27
+ 2011              	__func__.7220:
+ 2012 0350 4B436970 		.string	"KCipherVecRegSetEncryptKey"
+ 2012      68657256 
+ 2012      65635265 
+ 2012      67536574 
+ 2012      456E6372 
+ 2013              		.text
+ 2014              	.Letext0:
+ 2015              		.section	.debug_loc,"", at progbits
+ 2016              	.Ldebug_loc0:
+ 2017              	.LLST0:
+ 2018 0000 00000000 		.quad	.LFB590-.Ltext0
+ 2018      00000000 
+ 2019 0008 01000000 		.quad	.LCFI0-.Ltext0
+ 2019      00000000 
+ 2020 0010 0200     		.value	0x2
+ 2021 0012 77       		.byte	0x77
+ 2022 0013 08       		.sleb128 8
+ 2023 0014 01000000 		.quad	.LCFI0-.Ltext0
+ 2023      00000000 
+ 2024 001c 04000000 		.quad	.LCFI1-.Ltext0
+ 2024      00000000 
+ 2025 0024 0200     		.value	0x2
+ 2026 0026 77       		.byte	0x77
+ 2027 0027 10       		.sleb128 16
+ 2028 0028 04000000 		.quad	.LCFI1-.Ltext0
+ 2028      00000000 
+ 2029 0030 1F000000 		.quad	.LFE590-.Ltext0
+ 2029      00000000 
+ 2030 0038 0200     		.value	0x2
+ 2031 003a 76       		.byte	0x76
+ 2032 003b 10       		.sleb128 16
+ 2033 003c 00000000 		.quad	0x0
+ 2033      00000000 
+ 2034 0044 00000000 		.quad	0x0
+ 2034      00000000 
+ 2035              	.LLST1:
+ 2036 004c 1F000000 		.quad	.LFB591-.Ltext0
+ 2036      00000000 
+ 2037 0054 20000000 		.quad	.LCFI2-.Ltext0
+ 2037      00000000 
+ 2038 005c 0200     		.value	0x2
+ 2039 005e 77       		.byte	0x77
+ 2040 005f 08       		.sleb128 8
+ 2041 0060 20000000 		.quad	.LCFI2-.Ltext0
+ 2041      00000000 
+
GAS LISTING /tmp/ccXzRABk.s 			page 60
+
+
+ 2042 0068 23000000 		.quad	.LCFI3-.Ltext0
+ 2042      00000000 
+ 2043 0070 0200     		.value	0x2
+ 2044 0072 77       		.byte	0x77
+ 2045 0073 10       		.sleb128 16
+ 2046 0074 23000000 		.quad	.LCFI3-.Ltext0
+ 2046      00000000 
+ 2047 007c 48000000 		.quad	.LFE591-.Ltext0
+ 2047      00000000 
+ 2048 0084 0200     		.value	0x2
+ 2049 0086 76       		.byte	0x76
+ 2050 0087 10       		.sleb128 16
+ 2051 0088 00000000 		.quad	0x0
+ 2051      00000000 
+ 2052 0090 00000000 		.quad	0x0
+ 2052      00000000 
+ 2053              	.LLST2:
+ 2054 0098 48000000 		.quad	.LFB592-.Ltext0
+ 2054      00000000 
+ 2055 00a0 49000000 		.quad	.LCFI4-.Ltext0
+ 2055      00000000 
+ 2056 00a8 0200     		.value	0x2
+ 2057 00aa 77       		.byte	0x77
+ 2058 00ab 08       		.sleb128 8
+ 2059 00ac 49000000 		.quad	.LCFI4-.Ltext0
+ 2059      00000000 
+ 2060 00b4 4C000000 		.quad	.LCFI5-.Ltext0
+ 2060      00000000 
+ 2061 00bc 0200     		.value	0x2
+ 2062 00be 77       		.byte	0x77
+ 2063 00bf 10       		.sleb128 16
+ 2064 00c0 4C000000 		.quad	.LCFI5-.Ltext0
+ 2064      00000000 
+ 2065 00c8 82000000 		.quad	.LFE592-.Ltext0
+ 2065      00000000 
+ 2066 00d0 0200     		.value	0x2
+ 2067 00d2 76       		.byte	0x76
+ 2068 00d3 10       		.sleb128 16
+ 2069 00d4 00000000 		.quad	0x0
+ 2069      00000000 
+ 2070 00dc 00000000 		.quad	0x0
+ 2070      00000000 
+ 2071              	.LLST3:
+ 2072 00e4 82000000 		.quad	.LFB593-.Ltext0
+ 2072      00000000 
+ 2073 00ec 83000000 		.quad	.LCFI6-.Ltext0
+ 2073      00000000 
+ 2074 00f4 0200     		.value	0x2
+ 2075 00f6 77       		.byte	0x77
+ 2076 00f7 08       		.sleb128 8
+ 2077 00f8 83000000 		.quad	.LCFI6-.Ltext0
+ 2077      00000000 
+ 2078 0100 86000000 		.quad	.LCFI7-.Ltext0
+ 2078      00000000 
+ 2079 0108 0200     		.value	0x2
+ 2080 010a 77       		.byte	0x77
+ 2081 010b 10       		.sleb128 16
+
GAS LISTING /tmp/ccXzRABk.s 			page 61
+
+
+ 2082 010c 86000000 		.quad	.LCFI7-.Ltext0
+ 2082      00000000 
+ 2083 0114 6C010000 		.quad	.LFE593-.Ltext0
+ 2083      00000000 
+ 2084 011c 0200     		.value	0x2
+ 2085 011e 76       		.byte	0x76
+ 2086 011f 10       		.sleb128 16
+ 2087 0120 00000000 		.quad	0x0
+ 2087      00000000 
+ 2088 0128 00000000 		.quad	0x0
+ 2088      00000000 
+ 2089              	.LLST4:
+ 2090 0130 6C010000 		.quad	.LFB594-.Ltext0
+ 2090      00000000 
+ 2091 0138 6D010000 		.quad	.LCFI8-.Ltext0
+ 2091      00000000 
+ 2092 0140 0200     		.value	0x2
+ 2093 0142 77       		.byte	0x77
+ 2094 0143 08       		.sleb128 8
+ 2095 0144 6D010000 		.quad	.LCFI8-.Ltext0
+ 2095      00000000 
+ 2096 014c 70010000 		.quad	.LCFI9-.Ltext0
+ 2096      00000000 
+ 2097 0154 0200     		.value	0x2
+ 2098 0156 77       		.byte	0x77
+ 2099 0157 10       		.sleb128 16
+ 2100 0158 70010000 		.quad	.LCFI9-.Ltext0
+ 2100      00000000 
+ 2101 0160 56020000 		.quad	.LFE594-.Ltext0
+ 2101      00000000 
+ 2102 0168 0200     		.value	0x2
+ 2103 016a 76       		.byte	0x76
+ 2104 016b 10       		.sleb128 16
+ 2105 016c 00000000 		.quad	0x0
+ 2105      00000000 
+ 2106 0174 00000000 		.quad	0x0
+ 2106      00000000 
+ 2107              	.LLST5:
+ 2108 017c 56020000 		.quad	.LFB595-.Ltext0
+ 2108      00000000 
+ 2109 0184 57020000 		.quad	.LCFI10-.Ltext0
+ 2109      00000000 
+ 2110 018c 0200     		.value	0x2
+ 2111 018e 77       		.byte	0x77
+ 2112 018f 08       		.sleb128 8
+ 2113 0190 57020000 		.quad	.LCFI10-.Ltext0
+ 2113      00000000 
+ 2114 0198 5A020000 		.quad	.LCFI11-.Ltext0
+ 2114      00000000 
+ 2115 01a0 0200     		.value	0x2
+ 2116 01a2 77       		.byte	0x77
+ 2117 01a3 10       		.sleb128 16
+ 2118 01a4 5A020000 		.quad	.LCFI11-.Ltext0
+ 2118      00000000 
+ 2119 01ac D9020000 		.quad	.LFE595-.Ltext0
+ 2119      00000000 
+ 2120 01b4 0200     		.value	0x2
+
GAS LISTING /tmp/ccXzRABk.s 			page 62
+
+
+ 2121 01b6 76       		.byte	0x76
+ 2122 01b7 10       		.sleb128 16
+ 2123 01b8 00000000 		.quad	0x0
+ 2123      00000000 
+ 2124 01c0 00000000 		.quad	0x0
+ 2124      00000000 
+ 2125              	.LLST6:
+ 2126 01c8 D9020000 		.quad	.LFB596-.Ltext0
+ 2126      00000000 
+ 2127 01d0 DA020000 		.quad	.LCFI12-.Ltext0
+ 2127      00000000 
+ 2128 01d8 0200     		.value	0x2
+ 2129 01da 77       		.byte	0x77
+ 2130 01db 08       		.sleb128 8
+ 2131 01dc DA020000 		.quad	.LCFI12-.Ltext0
+ 2131      00000000 
+ 2132 01e4 DD020000 		.quad	.LCFI13-.Ltext0
+ 2132      00000000 
+ 2133 01ec 0200     		.value	0x2
+ 2134 01ee 77       		.byte	0x77
+ 2135 01ef 10       		.sleb128 16
+ 2136 01f0 DD020000 		.quad	.LCFI13-.Ltext0
+ 2136      00000000 
+ 2137 01f8 5C030000 		.quad	.LFE596-.Ltext0
+ 2137      00000000 
+ 2138 0200 0200     		.value	0x2
+ 2139 0202 76       		.byte	0x76
+ 2140 0203 10       		.sleb128 16
+ 2141 0204 00000000 		.quad	0x0
+ 2141      00000000 
+ 2142 020c 00000000 		.quad	0x0
+ 2142      00000000 
+ 2143              	.LLST7:
+ 2144 0214 5C030000 		.quad	.LFB597-.Ltext0
+ 2144      00000000 
+ 2145 021c 5D030000 		.quad	.LCFI14-.Ltext0
+ 2145      00000000 
+ 2146 0224 0200     		.value	0x2
+ 2147 0226 77       		.byte	0x77
+ 2148 0227 08       		.sleb128 8
+ 2149 0228 5D030000 		.quad	.LCFI14-.Ltext0
+ 2149      00000000 
+ 2150 0230 60030000 		.quad	.LCFI15-.Ltext0
+ 2150      00000000 
+ 2151 0238 0200     		.value	0x2
+ 2152 023a 77       		.byte	0x77
+ 2153 023b 10       		.sleb128 16
+ 2154 023c 60030000 		.quad	.LCFI15-.Ltext0
+ 2154      00000000 
+ 2155 0244 CB030000 		.quad	.LFE597-.Ltext0
+ 2155      00000000 
+ 2156 024c 0200     		.value	0x2
+ 2157 024e 76       		.byte	0x76
+ 2158 024f 10       		.sleb128 16
+ 2159 0250 00000000 		.quad	0x0
+ 2159      00000000 
+ 2160 0258 00000000 		.quad	0x0
+
GAS LISTING /tmp/ccXzRABk.s 			page 63
+
+
+ 2160      00000000 
+ 2161              	.LLST8:
+ 2162 0260 CB030000 		.quad	.LFB598-.Ltext0
+ 2162      00000000 
+ 2163 0268 CC030000 		.quad	.LCFI16-.Ltext0
+ 2163      00000000 
+ 2164 0270 0200     		.value	0x2
+ 2165 0272 77       		.byte	0x77
+ 2166 0273 08       		.sleb128 8
+ 2167 0274 CC030000 		.quad	.LCFI16-.Ltext0
+ 2167      00000000 
+ 2168 027c CF030000 		.quad	.LCFI17-.Ltext0
+ 2168      00000000 
+ 2169 0284 0200     		.value	0x2
+ 2170 0286 77       		.byte	0x77
+ 2171 0287 10       		.sleb128 16
+ 2172 0288 CF030000 		.quad	.LCFI17-.Ltext0
+ 2172      00000000 
+ 2173 0290 3A040000 		.quad	.LFE598-.Ltext0
+ 2173      00000000 
+ 2174 0298 0200     		.value	0x2
+ 2175 029a 76       		.byte	0x76
+ 2176 029b 10       		.sleb128 16
+ 2177 029c 00000000 		.quad	0x0
+ 2177      00000000 
+ 2178 02a4 00000000 		.quad	0x0
+ 2178      00000000 
+ 2179              	.LLST9:
+ 2180 02ac 3A040000 		.quad	.LFB599-.Ltext0
+ 2180      00000000 
+ 2181 02b4 3B040000 		.quad	.LCFI18-.Ltext0
+ 2181      00000000 
+ 2182 02bc 0200     		.value	0x2
+ 2183 02be 77       		.byte	0x77
+ 2184 02bf 08       		.sleb128 8
+ 2185 02c0 3B040000 		.quad	.LCFI18-.Ltext0
+ 2185      00000000 
+ 2186 02c8 3E040000 		.quad	.LCFI19-.Ltext0
+ 2186      00000000 
+ 2187 02d0 0200     		.value	0x2
+ 2188 02d2 77       		.byte	0x77
+ 2189 02d3 10       		.sleb128 16
+ 2190 02d4 3E040000 		.quad	.LCFI19-.Ltext0
+ 2190      00000000 
+ 2191 02dc 61040000 		.quad	.LFE599-.Ltext0
+ 2191      00000000 
+ 2192 02e4 0200     		.value	0x2
+ 2193 02e6 76       		.byte	0x76
+ 2194 02e7 10       		.sleb128 16
+ 2195 02e8 00000000 		.quad	0x0
+ 2195      00000000 
+ 2196 02f0 00000000 		.quad	0x0
+ 2196      00000000 
+ 2197              	.LLST10:
+ 2198 02f8 61040000 		.quad	.LFB600-.Ltext0
+ 2198      00000000 
+ 2199 0300 62040000 		.quad	.LCFI20-.Ltext0
+
GAS LISTING /tmp/ccXzRABk.s 			page 64
+
+
+ 2199      00000000 
+ 2200 0308 0200     		.value	0x2
+ 2201 030a 77       		.byte	0x77
+ 2202 030b 08       		.sleb128 8
+ 2203 030c 62040000 		.quad	.LCFI20-.Ltext0
+ 2203      00000000 
+ 2204 0314 65040000 		.quad	.LCFI21-.Ltext0
+ 2204      00000000 
+ 2205 031c 0200     		.value	0x2
+ 2206 031e 77       		.byte	0x77
+ 2207 031f 10       		.sleb128 16
+ 2208 0320 65040000 		.quad	.LCFI21-.Ltext0
+ 2208      00000000 
+ 2209 0328 88040000 		.quad	.LFE600-.Ltext0
+ 2209      00000000 
+ 2210 0330 0200     		.value	0x2
+ 2211 0332 76       		.byte	0x76
+ 2212 0333 10       		.sleb128 16
+ 2213 0334 00000000 		.quad	0x0
+ 2213      00000000 
+ 2214 033c 00000000 		.quad	0x0
+ 2214      00000000 
+ 2215              	.LLST11:
+ 2216 0344 88040000 		.quad	.LFB601-.Ltext0
+ 2216      00000000 
+ 2217 034c 89040000 		.quad	.LCFI22-.Ltext0
+ 2217      00000000 
+ 2218 0354 0200     		.value	0x2
+ 2219 0356 77       		.byte	0x77
+ 2220 0357 08       		.sleb128 8
+ 2221 0358 89040000 		.quad	.LCFI22-.Ltext0
+ 2221      00000000 
+ 2222 0360 8C040000 		.quad	.LCFI23-.Ltext0
+ 2222      00000000 
+ 2223 0368 0200     		.value	0x2
+ 2224 036a 77       		.byte	0x77
+ 2225 036b 10       		.sleb128 16
+ 2226 036c 8C040000 		.quad	.LCFI23-.Ltext0
+ 2226      00000000 
+ 2227 0374 DB040000 		.quad	.LFE601-.Ltext0
+ 2227      00000000 
+ 2228 037c 0200     		.value	0x2
+ 2229 037e 76       		.byte	0x76
+ 2230 037f 10       		.sleb128 16
+ 2231 0380 00000000 		.quad	0x0
+ 2231      00000000 
+ 2232 0388 00000000 		.quad	0x0
+ 2232      00000000 
+ 2233              	.LLST12:
+ 2234 0390 DB040000 		.quad	.LFB602-.Ltext0
+ 2234      00000000 
+ 2235 0398 DC040000 		.quad	.LCFI24-.Ltext0
+ 2235      00000000 
+ 2236 03a0 0200     		.value	0x2
+ 2237 03a2 77       		.byte	0x77
+ 2238 03a3 08       		.sleb128 8
+ 2239 03a4 DC040000 		.quad	.LCFI24-.Ltext0
+
GAS LISTING /tmp/ccXzRABk.s 			page 65
+
+
+ 2239      00000000 
+ 2240 03ac DF040000 		.quad	.LCFI25-.Ltext0
+ 2240      00000000 
+ 2241 03b4 0200     		.value	0x2
+ 2242 03b6 77       		.byte	0x77
+ 2243 03b7 10       		.sleb128 16
+ 2244 03b8 DF040000 		.quad	.LCFI25-.Ltext0
+ 2244      00000000 
+ 2245 03c0 2E050000 		.quad	.LFE602-.Ltext0
+ 2245      00000000 
+ 2246 03c8 0200     		.value	0x2
+ 2247 03ca 76       		.byte	0x76
+ 2248 03cb 10       		.sleb128 16
+ 2249 03cc 00000000 		.quad	0x0
+ 2249      00000000 
+ 2250 03d4 00000000 		.quad	0x0
+ 2250      00000000 
+ 2251              	.LLST13:
+ 2252 03dc 2E050000 		.quad	.LFB603-.Ltext0
+ 2252      00000000 
+ 2253 03e4 2F050000 		.quad	.LCFI26-.Ltext0
+ 2253      00000000 
+ 2254 03ec 0200     		.value	0x2
+ 2255 03ee 77       		.byte	0x77
+ 2256 03ef 08       		.sleb128 8
+ 2257 03f0 2F050000 		.quad	.LCFI26-.Ltext0
+ 2257      00000000 
+ 2258 03f8 32050000 		.quad	.LCFI27-.Ltext0
+ 2258      00000000 
+ 2259 0400 0200     		.value	0x2
+ 2260 0402 77       		.byte	0x77
+ 2261 0403 10       		.sleb128 16
+ 2262 0404 32050000 		.quad	.LCFI27-.Ltext0
+ 2262      00000000 
+ 2263 040c 92050000 		.quad	.LFE603-.Ltext0
+ 2263      00000000 
+ 2264 0414 0200     		.value	0x2
+ 2265 0416 76       		.byte	0x76
+ 2266 0417 10       		.sleb128 16
+ 2267 0418 00000000 		.quad	0x0
+ 2267      00000000 
+ 2268 0420 00000000 		.quad	0x0
+ 2268      00000000 
+ 2269              	.LLST14:
+ 2270 0428 92050000 		.quad	.LFB604-.Ltext0
+ 2270      00000000 
+ 2271 0430 93050000 		.quad	.LCFI28-.Ltext0
+ 2271      00000000 
+ 2272 0438 0200     		.value	0x2
+ 2273 043a 77       		.byte	0x77
+ 2274 043b 08       		.sleb128 8
+ 2275 043c 93050000 		.quad	.LCFI28-.Ltext0
+ 2275      00000000 
+ 2276 0444 96050000 		.quad	.LCFI29-.Ltext0
+ 2276      00000000 
+ 2277 044c 0200     		.value	0x2
+ 2278 044e 77       		.byte	0x77
+
GAS LISTING /tmp/ccXzRABk.s 			page 66
+
+
+ 2279 044f 10       		.sleb128 16
+ 2280 0450 96050000 		.quad	.LCFI29-.Ltext0
+ 2280      00000000 
+ 2281 0458 FD050000 		.quad	.LFE604-.Ltext0
+ 2281      00000000 
+ 2282 0460 0200     		.value	0x2
+ 2283 0462 76       		.byte	0x76
+ 2284 0463 10       		.sleb128 16
+ 2285 0464 00000000 		.quad	0x0
+ 2285      00000000 
+ 2286 046c 00000000 		.quad	0x0
+ 2286      00000000 
+ 2287              	.LLST15:
+ 2288 0474 FD050000 		.quad	.LFB605-.Ltext0
+ 2288      00000000 
+ 2289 047c FE050000 		.quad	.LCFI30-.Ltext0
+ 2289      00000000 
+ 2290 0484 0200     		.value	0x2
+ 2291 0486 77       		.byte	0x77
+ 2292 0487 08       		.sleb128 8
+ 2293 0488 FE050000 		.quad	.LCFI30-.Ltext0
+ 2293      00000000 
+ 2294 0490 01060000 		.quad	.LCFI31-.Ltext0
+ 2294      00000000 
+ 2295 0498 0200     		.value	0x2
+ 2296 049a 77       		.byte	0x77
+ 2297 049b 10       		.sleb128 16
+ 2298 049c 01060000 		.quad	.LCFI31-.Ltext0
+ 2298      00000000 
+ 2299 04a4 6D060000 		.quad	.LFE605-.Ltext0
+ 2299      00000000 
+ 2300 04ac 0200     		.value	0x2
+ 2301 04ae 76       		.byte	0x76
+ 2302 04af 10       		.sleb128 16
+ 2303 04b0 00000000 		.quad	0x0
+ 2303      00000000 
+ 2304 04b8 00000000 		.quad	0x0
+ 2304      00000000 
+ 2305              	.LLST16:
+ 2306 04c0 6D060000 		.quad	.LFB606-.Ltext0
+ 2306      00000000 
+ 2307 04c8 6E060000 		.quad	.LCFI32-.Ltext0
+ 2307      00000000 
+ 2308 04d0 0200     		.value	0x2
+ 2309 04d2 77       		.byte	0x77
+ 2310 04d3 08       		.sleb128 8
+ 2311 04d4 6E060000 		.quad	.LCFI32-.Ltext0
+ 2311      00000000 
+ 2312 04dc 71060000 		.quad	.LCFI33-.Ltext0
+ 2312      00000000 
+ 2313 04e4 0200     		.value	0x2
+ 2314 04e6 77       		.byte	0x77
+ 2315 04e7 10       		.sleb128 16
+ 2316 04e8 71060000 		.quad	.LCFI33-.Ltext0
+ 2316      00000000 
+ 2317 04f0 DD060000 		.quad	.LFE606-.Ltext0
+ 2317      00000000 
+
GAS LISTING /tmp/ccXzRABk.s 			page 67
+
+
+ 2318 04f8 0200     		.value	0x2
+ 2319 04fa 76       		.byte	0x76
+ 2320 04fb 10       		.sleb128 16
+ 2321 04fc 00000000 		.quad	0x0
+ 2321      00000000 
+ 2322 0504 00000000 		.quad	0x0
+ 2322      00000000 
+ 2323              	.LLST17:
+ 2324 050c DD060000 		.quad	.LFB607-.Ltext0
+ 2324      00000000 
+ 2325 0514 DE060000 		.quad	.LCFI34-.Ltext0
+ 2325      00000000 
+ 2326 051c 0200     		.value	0x2
+ 2327 051e 77       		.byte	0x77
+ 2328 051f 08       		.sleb128 8
+ 2329 0520 DE060000 		.quad	.LCFI34-.Ltext0
+ 2329      00000000 
+ 2330 0528 E1060000 		.quad	.LCFI35-.Ltext0
+ 2330      00000000 
+ 2331 0530 0200     		.value	0x2
+ 2332 0532 77       		.byte	0x77
+ 2333 0533 10       		.sleb128 16
+ 2334 0534 E1060000 		.quad	.LCFI35-.Ltext0
+ 2334      00000000 
+ 2335 053c AB070000 		.quad	.LFE607-.Ltext0
+ 2335      00000000 
+ 2336 0544 0200     		.value	0x2
+ 2337 0546 76       		.byte	0x76
+ 2338 0547 10       		.sleb128 16
+ 2339 0548 00000000 		.quad	0x0
+ 2339      00000000 
+ 2340 0550 00000000 		.quad	0x0
+ 2340      00000000 
+ 2341              	.LLST18:
+ 2342 0558 AB070000 		.quad	.LFB608-.Ltext0
+ 2342      00000000 
+ 2343 0560 AC070000 		.quad	.LCFI36-.Ltext0
+ 2343      00000000 
+ 2344 0568 0200     		.value	0x2
+ 2345 056a 77       		.byte	0x77
+ 2346 056b 08       		.sleb128 8
+ 2347 056c AC070000 		.quad	.LCFI36-.Ltext0
+ 2347      00000000 
+ 2348 0574 AF070000 		.quad	.LCFI37-.Ltext0
+ 2348      00000000 
+ 2349 057c 0200     		.value	0x2
+ 2350 057e 77       		.byte	0x77
+ 2351 057f 10       		.sleb128 16
+ 2352 0580 AF070000 		.quad	.LCFI37-.Ltext0
+ 2352      00000000 
+ 2353 0588 7F080000 		.quad	.LFE608-.Ltext0
+ 2353      00000000 
+ 2354 0590 0200     		.value	0x2
+ 2355 0592 76       		.byte	0x76
+ 2356 0593 10       		.sleb128 16
+ 2357 0594 00000000 		.quad	0x0
+ 2357      00000000 
+
GAS LISTING /tmp/ccXzRABk.s 			page 68
+
+
+ 2358 059c 00000000 		.quad	0x0
+ 2358      00000000 
+ 2359              	.LLST19:
+ 2360 05a4 7F080000 		.quad	.LFB609-.Ltext0
+ 2360      00000000 
+ 2361 05ac 80080000 		.quad	.LCFI38-.Ltext0
+ 2361      00000000 
+ 2362 05b4 0200     		.value	0x2
+ 2363 05b6 77       		.byte	0x77
+ 2364 05b7 08       		.sleb128 8
+ 2365 05b8 80080000 		.quad	.LCFI38-.Ltext0
+ 2365      00000000 
+ 2366 05c0 83080000 		.quad	.LCFI39-.Ltext0
+ 2366      00000000 
+ 2367 05c8 0200     		.value	0x2
+ 2368 05ca 77       		.byte	0x77
+ 2369 05cb 10       		.sleb128 16
+ 2370 05cc 83080000 		.quad	.LCFI39-.Ltext0
+ 2370      00000000 
+ 2371 05d4 5C090000 		.quad	.LFE609-.Ltext0
+ 2371      00000000 
+ 2372 05dc 0200     		.value	0x2
+ 2373 05de 76       		.byte	0x76
+ 2374 05df 10       		.sleb128 16
+ 2375 05e0 00000000 		.quad	0x0
+ 2375      00000000 
+ 2376 05e8 00000000 		.quad	0x0
+ 2376      00000000 
+ 2377              	.LLST20:
+ 2378 05f0 5C090000 		.quad	.LFB610-.Ltext0
+ 2378      00000000 
+ 2379 05f8 5D090000 		.quad	.LCFI40-.Ltext0
+ 2379      00000000 
+ 2380 0600 0200     		.value	0x2
+ 2381 0602 77       		.byte	0x77
+ 2382 0603 08       		.sleb128 8
+ 2383 0604 5D090000 		.quad	.LCFI40-.Ltext0
+ 2383      00000000 
+ 2384 060c 60090000 		.quad	.LCFI41-.Ltext0
+ 2384      00000000 
+ 2385 0614 0200     		.value	0x2
+ 2386 0616 77       		.byte	0x77
+ 2387 0617 10       		.sleb128 16
+ 2388 0618 60090000 		.quad	.LCFI41-.Ltext0
+ 2388      00000000 
+ 2389 0620 220A0000 		.quad	.LFE610-.Ltext0
+ 2389      00000000 
+ 2390 0628 0200     		.value	0x2
+ 2391 062a 76       		.byte	0x76
+ 2392 062b 10       		.sleb128 16
+ 2393 062c 00000000 		.quad	0x0
+ 2393      00000000 
+ 2394 0634 00000000 		.quad	0x0
+ 2394      00000000 
+ 2395              	.LLST21:
+ 2396 063c 220A0000 		.quad	.LFB611-.Ltext0
+ 2396      00000000 
+
GAS LISTING /tmp/ccXzRABk.s 			page 69
+
+
+ 2397 0644 230A0000 		.quad	.LCFI42-.Ltext0
+ 2397      00000000 
+ 2398 064c 0200     		.value	0x2
+ 2399 064e 77       		.byte	0x77
+ 2400 064f 08       		.sleb128 8
+ 2401 0650 230A0000 		.quad	.LCFI42-.Ltext0
+ 2401      00000000 
+ 2402 0658 260A0000 		.quad	.LCFI43-.Ltext0
+ 2402      00000000 
+ 2403 0660 0200     		.value	0x2
+ 2404 0662 77       		.byte	0x77
+ 2405 0663 10       		.sleb128 16
+ 2406 0664 260A0000 		.quad	.LCFI43-.Ltext0
+ 2406      00000000 
+ 2407 066c E80A0000 		.quad	.LFE611-.Ltext0
+ 2407      00000000 
+ 2408 0674 0200     		.value	0x2
+ 2409 0676 76       		.byte	0x76
+ 2410 0677 10       		.sleb128 16
+ 2411 0678 00000000 		.quad	0x0
+ 2411      00000000 
+ 2412 0680 00000000 		.quad	0x0
+ 2412      00000000 
+ 2413              	.LLST22:
+ 2414 0688 E80A0000 		.quad	.LFB612-.Ltext0
+ 2414      00000000 
+ 2415 0690 E90A0000 		.quad	.LCFI44-.Ltext0
+ 2415      00000000 
+ 2416 0698 0200     		.value	0x2
+ 2417 069a 77       		.byte	0x77
+ 2418 069b 08       		.sleb128 8
+ 2419 069c E90A0000 		.quad	.LCFI44-.Ltext0
+ 2419      00000000 
+ 2420 06a4 EC0A0000 		.quad	.LCFI45-.Ltext0
+ 2420      00000000 
+ 2421 06ac 0200     		.value	0x2
+ 2422 06ae 77       		.byte	0x77
+ 2423 06af 10       		.sleb128 16
+ 2424 06b0 EC0A0000 		.quad	.LCFI45-.Ltext0
+ 2424      00000000 
+ 2425 06b8 AE0B0000 		.quad	.LFE612-.Ltext0
+ 2425      00000000 
+ 2426 06c0 0200     		.value	0x2
+ 2427 06c2 76       		.byte	0x76
+ 2428 06c3 10       		.sleb128 16
+ 2429 06c4 00000000 		.quad	0x0
+ 2429      00000000 
+ 2430 06cc 00000000 		.quad	0x0
+ 2430      00000000 
+ 2431              	.LLST23:
+ 2432 06d4 AE0B0000 		.quad	.LFB613-.Ltext0
+ 2432      00000000 
+ 2433 06dc AF0B0000 		.quad	.LCFI46-.Ltext0
+ 2433      00000000 
+ 2434 06e4 0200     		.value	0x2
+ 2435 06e6 77       		.byte	0x77
+ 2436 06e7 08       		.sleb128 8
+
GAS LISTING /tmp/ccXzRABk.s 			page 70
+
+
+ 2437 06e8 AF0B0000 		.quad	.LCFI46-.Ltext0
+ 2437      00000000 
+ 2438 06f0 B20B0000 		.quad	.LCFI47-.Ltext0
+ 2438      00000000 
+ 2439 06f8 0200     		.value	0x2
+ 2440 06fa 77       		.byte	0x77
+ 2441 06fb 10       		.sleb128 16
+ 2442 06fc B20B0000 		.quad	.LCFI47-.Ltext0
+ 2442      00000000 
+ 2443 0704 740C0000 		.quad	.LFE613-.Ltext0
+ 2443      00000000 
+ 2444 070c 0200     		.value	0x2
+ 2445 070e 76       		.byte	0x76
+ 2446 070f 10       		.sleb128 16
+ 2447 0710 00000000 		.quad	0x0
+ 2447      00000000 
+ 2448 0718 00000000 		.quad	0x0
+ 2448      00000000 
+ 2449              	.LLST24:
+ 2450 0720 740C0000 		.quad	.LFB614-.Ltext0
+ 2450      00000000 
+ 2451 0728 750C0000 		.quad	.LCFI48-.Ltext0
+ 2451      00000000 
+ 2452 0730 0200     		.value	0x2
+ 2453 0732 77       		.byte	0x77
+ 2454 0733 08       		.sleb128 8
+ 2455 0734 750C0000 		.quad	.LCFI48-.Ltext0
+ 2455      00000000 
+ 2456 073c 780C0000 		.quad	.LCFI49-.Ltext0
+ 2456      00000000 
+ 2457 0744 0200     		.value	0x2
+ 2458 0746 77       		.byte	0x77
+ 2459 0747 10       		.sleb128 16
+ 2460 0748 780C0000 		.quad	.LCFI49-.Ltext0
+ 2460      00000000 
+ 2461 0750 AD0C0000 		.quad	.LFE614-.Ltext0
+ 2461      00000000 
+ 2462 0758 0200     		.value	0x2
+ 2463 075a 76       		.byte	0x76
+ 2464 075b 10       		.sleb128 16
+ 2465 075c 00000000 		.quad	0x0
+ 2465      00000000 
+ 2466 0764 00000000 		.quad	0x0
+ 2466      00000000 
+ 2467              	.LLST25:
+ 2468 076c AD0C0000 		.quad	.LFB615-.Ltext0
+ 2468      00000000 
+ 2469 0774 AE0C0000 		.quad	.LCFI50-.Ltext0
+ 2469      00000000 
+ 2470 077c 0200     		.value	0x2
+ 2471 077e 77       		.byte	0x77
+ 2472 077f 08       		.sleb128 8
+ 2473 0780 AE0C0000 		.quad	.LCFI50-.Ltext0
+ 2473      00000000 
+ 2474 0788 B10C0000 		.quad	.LCFI51-.Ltext0
+ 2474      00000000 
+ 2475 0790 0200     		.value	0x2
+
GAS LISTING /tmp/ccXzRABk.s 			page 71
+
+
+ 2476 0792 77       		.byte	0x77
+ 2477 0793 10       		.sleb128 16
+ 2478 0794 B10C0000 		.quad	.LCFI51-.Ltext0
+ 2478      00000000 
+ 2479 079c E30C0000 		.quad	.LFE615-.Ltext0
+ 2479      00000000 
+ 2480 07a4 0200     		.value	0x2
+ 2481 07a6 76       		.byte	0x76
+ 2482 07a7 10       		.sleb128 16
+ 2483 07a8 00000000 		.quad	0x0
+ 2483      00000000 
+ 2484 07b0 00000000 		.quad	0x0
+ 2484      00000000 
+ 2485              	.LLST26:
+ 2486 07b8 E30C0000 		.quad	.LFB616-.Ltext0
+ 2486      00000000 
+ 2487 07c0 E40C0000 		.quad	.LCFI52-.Ltext0
+ 2487      00000000 
+ 2488 07c8 0200     		.value	0x2
+ 2489 07ca 77       		.byte	0x77
+ 2490 07cb 08       		.sleb128 8
+ 2491 07cc E40C0000 		.quad	.LCFI52-.Ltext0
+ 2491      00000000 
+ 2492 07d4 E70C0000 		.quad	.LCFI53-.Ltext0
+ 2492      00000000 
+ 2493 07dc 0200     		.value	0x2
+ 2494 07de 77       		.byte	0x77
+ 2495 07df 10       		.sleb128 16
+ 2496 07e0 E70C0000 		.quad	.LCFI53-.Ltext0
+ 2496      00000000 
+ 2497 07e8 190D0000 		.quad	.LFE616-.Ltext0
+ 2497      00000000 
+ 2498 07f0 0200     		.value	0x2
+ 2499 07f2 76       		.byte	0x76
+ 2500 07f3 10       		.sleb128 16
+ 2501 07f4 00000000 		.quad	0x0
+ 2501      00000000 
+ 2502 07fc 00000000 		.quad	0x0
+ 2502      00000000 
+ 2503              	.LLST27:
+ 2504 0804 190D0000 		.quad	.LFB617-.Ltext0
+ 2504      00000000 
+ 2505 080c 1A0D0000 		.quad	.LCFI54-.Ltext0
+ 2505      00000000 
+ 2506 0814 0200     		.value	0x2
+ 2507 0816 77       		.byte	0x77
+ 2508 0817 08       		.sleb128 8
+ 2509 0818 1A0D0000 		.quad	.LCFI54-.Ltext0
+ 2509      00000000 
+ 2510 0820 1D0D0000 		.quad	.LCFI55-.Ltext0
+ 2510      00000000 
+ 2511 0828 0200     		.value	0x2
+ 2512 082a 77       		.byte	0x77
+ 2513 082b 10       		.sleb128 16
+ 2514 082c 1D0D0000 		.quad	.LCFI55-.Ltext0
+ 2514      00000000 
+ 2515 0834 740D0000 		.quad	.LFE617-.Ltext0
+
GAS LISTING /tmp/ccXzRABk.s 			page 72
+
+
+ 2515      00000000 
+ 2516 083c 0200     		.value	0x2
+ 2517 083e 76       		.byte	0x76
+ 2518 083f 10       		.sleb128 16
+ 2519 0840 00000000 		.quad	0x0
+ 2519      00000000 
+ 2520 0848 00000000 		.quad	0x0
+ 2520      00000000 
+ 2521              	.LLST28:
+ 2522 0850 740D0000 		.quad	.LFB618-.Ltext0
+ 2522      00000000 
+ 2523 0858 750D0000 		.quad	.LCFI56-.Ltext0
+ 2523      00000000 
+ 2524 0860 0200     		.value	0x2
+ 2525 0862 77       		.byte	0x77
+ 2526 0863 08       		.sleb128 8
+ 2527 0864 750D0000 		.quad	.LCFI56-.Ltext0
+ 2527      00000000 
+ 2528 086c 780D0000 		.quad	.LCFI57-.Ltext0
+ 2528      00000000 
+ 2529 0874 0200     		.value	0x2
+ 2530 0876 77       		.byte	0x77
+ 2531 0877 10       		.sleb128 16
+ 2532 0878 780D0000 		.quad	.LCFI57-.Ltext0
+ 2532      00000000 
+ 2533 0880 120E0000 		.quad	.LFE618-.Ltext0
+ 2533      00000000 
+ 2534 0888 0200     		.value	0x2
+ 2535 088a 76       		.byte	0x76
+ 2536 088b 10       		.sleb128 16
+ 2537 088c 00000000 		.quad	0x0
+ 2537      00000000 
+ 2538 0894 00000000 		.quad	0x0
+ 2538      00000000 
+ 2539              	.LLST29:
+ 2540 089c 120E0000 		.quad	.LFB619-.Ltext0
+ 2540      00000000 
+ 2541 08a4 130E0000 		.quad	.LCFI58-.Ltext0
+ 2541      00000000 
+ 2542 08ac 0200     		.value	0x2
+ 2543 08ae 77       		.byte	0x77
+ 2544 08af 08       		.sleb128 8
+ 2545 08b0 130E0000 		.quad	.LCFI58-.Ltext0
+ 2545      00000000 
+ 2546 08b8 160E0000 		.quad	.LCFI59-.Ltext0
+ 2546      00000000 
+ 2547 08c0 0200     		.value	0x2
+ 2548 08c2 77       		.byte	0x77
+ 2549 08c3 10       		.sleb128 16
+ 2550 08c4 160E0000 		.quad	.LCFI59-.Ltext0
+ 2550      00000000 
+ 2551 08cc 6D0E0000 		.quad	.LFE619-.Ltext0
+ 2551      00000000 
+ 2552 08d4 0200     		.value	0x2
+ 2553 08d6 76       		.byte	0x76
+ 2554 08d7 10       		.sleb128 16
+ 2555 08d8 00000000 		.quad	0x0
+
GAS LISTING /tmp/ccXzRABk.s 			page 73
+
+
+ 2555      00000000 
+ 2556 08e0 00000000 		.quad	0x0
+ 2556      00000000 
+ 2557              	.LLST30:
+ 2558 08e8 6D0E0000 		.quad	.LFB620-.Ltext0
+ 2558      00000000 
+ 2559 08f0 6E0E0000 		.quad	.LCFI60-.Ltext0
+ 2559      00000000 
+ 2560 08f8 0200     		.value	0x2
+ 2561 08fa 77       		.byte	0x77
+ 2562 08fb 08       		.sleb128 8
+ 2563 08fc 6E0E0000 		.quad	.LCFI60-.Ltext0
+ 2563      00000000 
+ 2564 0904 710E0000 		.quad	.LCFI61-.Ltext0
+ 2564      00000000 
+ 2565 090c 0200     		.value	0x2
+ 2566 090e 77       		.byte	0x77
+ 2567 090f 10       		.sleb128 16
+ 2568 0910 710E0000 		.quad	.LCFI61-.Ltext0
+ 2568      00000000 
+ 2569 0918 020F0000 		.quad	.LFE620-.Ltext0
+ 2569      00000000 
+ 2570 0920 0200     		.value	0x2
+ 2571 0922 76       		.byte	0x76
+ 2572 0923 10       		.sleb128 16
+ 2573 0924 00000000 		.quad	0x0
+ 2573      00000000 
+ 2574 092c 00000000 		.quad	0x0
+ 2574      00000000 
+ 2575              	.LLST31:
+ 2576 0934 020F0000 		.quad	.LFB621-.Ltext0
+ 2576      00000000 
+ 2577 093c 030F0000 		.quad	.LCFI62-.Ltext0
+ 2577      00000000 
+ 2578 0944 0200     		.value	0x2
+ 2579 0946 77       		.byte	0x77
+ 2580 0947 08       		.sleb128 8
+ 2581 0948 030F0000 		.quad	.LCFI62-.Ltext0
+ 2581      00000000 
+ 2582 0950 060F0000 		.quad	.LCFI63-.Ltext0
+ 2582      00000000 
+ 2583 0958 0200     		.value	0x2
+ 2584 095a 77       		.byte	0x77
+ 2585 095b 10       		.sleb128 16
+ 2586 095c 060F0000 		.quad	.LCFI63-.Ltext0
+ 2586      00000000 
+ 2587 0964 64100000 		.quad	.LFE621-.Ltext0
+ 2587      00000000 
+ 2588 096c 0200     		.value	0x2
+ 2589 096e 76       		.byte	0x76
+ 2590 096f 10       		.sleb128 16
+ 2591 0970 00000000 		.quad	0x0
+ 2591      00000000 
+ 2592 0978 00000000 		.quad	0x0
+ 2592      00000000 
+ 2593              		.file 2 "/usr/include/stdint.h"
+ 2594              		.file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+
GAS LISTING /tmp/ccXzRABk.s 			page 74
+
+
+ 2595              		.file 4 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/x86_64/atomic32.h"
+ 2596              		.file 5 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/refcount.h"
+ 2597              		.file 6 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/krypto/cipher.h"
+ 2598              		.file 7 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-impl.h"
+ 2599              		.file 8 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+ 2600              		.file 9 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 2601              		.file 10 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/aes-ncbi-priv.h"
+ 2602              		.file 11 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi-priv.h"
+ 2603              		.file 12 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/krypto/ciphermgr.h"
+ 2604              		.file 13 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/debug.h"
+ 2605              		.file 14 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-priv.h"
+ 2606              		.file 15 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+ 2607              		.section	.debug_info
+ 2608 0000 4D1F0000 		.long	0x1f4d
+ 2609 0004 0200     		.value	0x2
+ 2610 0006 00000000 		.long	.Ldebug_abbrev0
+ 2611 000a 08       		.byte	0x8
+ 2612 000b 01       		.uleb128 0x1
+ 2613 000c 00000000 		.long	.LASF392
+ 2614 0010 01       		.byte	0x1
+ 2615 0011 00000000 		.long	.LASF393
+ 2616 0015 00000000 		.long	.LASF394
+ 2617 0019 00000000 		.quad	.Ltext0
+ 2617      00000000 
+ 2618 0021 00000000 		.quad	.Letext0
+ 2618      00000000 
+ 2619 0029 00000000 		.long	.Ldebug_line0
+ 2620 002d 02       		.uleb128 0x2
+ 2621 002e 01       		.byte	0x1
+ 2622 002f 06       		.byte	0x6
+ 2623 0030 00000000 		.long	.LASF0
+ 2624 0034 02       		.uleb128 0x2
+ 2625 0035 02       		.byte	0x2
+ 2626 0036 05       		.byte	0x5
+ 2627 0037 00000000 		.long	.LASF1
+ 2628 003b 03       		.uleb128 0x3
+ 2629 003c 04       		.byte	0x4
+ 2630 003d 05       		.byte	0x5
+ 2631 003e 696E7400 		.string	"int"
+ 2632 0042 02       		.uleb128 0x2
+ 2633 0043 08       		.byte	0x8
+ 2634 0044 05       		.byte	0x5
+ 2635 0045 00000000 		.long	.LASF2
+ 2636 0049 04       		.uleb128 0x4
+ 2637 004a 00000000 		.long	.LASF5
+ 2638 004e 02       		.byte	0x2
+ 2639 004f 31       		.byte	0x31
+ 2640 0050 54000000 		.long	0x54
+ 2641 0054 02       		.uleb128 0x2
+ 2642 0055 01       		.byte	0x1
+ 2643 0056 08       		.byte	0x8
+ 2644 0057 00000000 		.long	.LASF3
+ 2645 005b 02       		.uleb128 0x2
+ 2646 005c 02       		.byte	0x2
+ 2647 005d 07       		.byte	0x7
+ 2648 005e 00000000 		.long	.LASF4
+ 2649 0062 04       		.uleb128 0x4
+
GAS LISTING /tmp/ccXzRABk.s 			page 75
+
+
+ 2650 0063 00000000 		.long	.LASF6
+ 2651 0067 02       		.byte	0x2
+ 2652 0068 34       		.byte	0x34
+ 2653 0069 6D000000 		.long	0x6d
+ 2654 006d 02       		.uleb128 0x2
+ 2655 006e 04       		.byte	0x4
+ 2656 006f 07       		.byte	0x7
+ 2657 0070 00000000 		.long	.LASF7
+ 2658 0074 02       		.uleb128 0x2
+ 2659 0075 08       		.byte	0x8
+ 2660 0076 07       		.byte	0x7
+ 2661 0077 00000000 		.long	.LASF8
+ 2662 007b 04       		.uleb128 0x4
+ 2663 007c 00000000 		.long	.LASF9
+ 2664 0080 03       		.byte	0x3
+ 2665 0081 30       		.byte	0x30
+ 2666 0082 62000000 		.long	0x62
+ 2667 0086 04       		.uleb128 0x4
+ 2668 0087 00000000 		.long	.LASF10
+ 2669 008b 04       		.byte	0x4
+ 2670 008c 27       		.byte	0x27
+ 2671 008d 91000000 		.long	0x91
+ 2672 0091 05       		.uleb128 0x5
+ 2673 0092 00000000 		.long	.LASF10
+ 2674 0096 04       		.byte	0x4
+ 2675 0097 04       		.byte	0x4
+ 2676 0098 27       		.byte	0x27
+ 2677 0099 AC000000 		.long	0xac
+ 2678 009d 06       		.uleb128 0x6
+ 2679 009e 00000000 		.long	.LASF34
+ 2680 00a2 04       		.byte	0x4
+ 2681 00a3 2A       		.byte	0x2a
+ 2682 00a4 AC000000 		.long	0xac
+ 2683 00a8 02       		.byte	0x2
+ 2684 00a9 23       		.byte	0x23
+ 2685 00aa 00       		.uleb128 0x0
+ 2686 00ab 00       		.byte	0x0
+ 2687 00ac 07       		.uleb128 0x7
+ 2688 00ad 3B000000 		.long	0x3b
+ 2689 00b1 08       		.uleb128 0x8
+ 2690 00b2 08       		.byte	0x8
+ 2691 00b3 07       		.byte	0x7
+ 2692 00b4 09       		.uleb128 0x9
+ 2693 00b5 08       		.byte	0x8
+ 2694 00b6 0A       		.uleb128 0xa
+ 2695 00b7 08       		.byte	0x8
+ 2696 00b8 BC000000 		.long	0xbc
+ 2697 00bc 0B       		.uleb128 0xb
+ 2698 00bd C1000000 		.long	0xc1
+ 2699 00c1 02       		.uleb128 0x2
+ 2700 00c2 01       		.byte	0x1
+ 2701 00c3 06       		.byte	0x6
+ 2702 00c4 00000000 		.long	.LASF11
+ 2703 00c8 0C       		.uleb128 0xc
+ 2704 00c9 04       		.byte	0x4
+ 2705 00ca 0D       		.byte	0xd
+ 2706 00cb D6       		.byte	0xd6
+
GAS LISTING /tmp/ccXzRABk.s 			page 76
+
+
+ 2707 00cc 49010000 		.long	0x149
+ 2708 00d0 0D       		.uleb128 0xd
+ 2709 00d1 00000000 		.long	.LASF12
+ 2710 00d5 7F       		.sleb128 -1
+ 2711 00d6 0D       		.uleb128 0xd
+ 2712 00d7 00000000 		.long	.LASF13
+ 2713 00db 00       		.sleb128 0
+ 2714 00dc 0D       		.uleb128 0xd
+ 2715 00dd 00000000 		.long	.LASF14
+ 2716 00e1 01       		.sleb128 1
+ 2717 00e2 0D       		.uleb128 0xd
+ 2718 00e3 00000000 		.long	.LASF15
+ 2719 00e7 02       		.sleb128 2
+ 2720 00e8 0D       		.uleb128 0xd
+ 2721 00e9 00000000 		.long	.LASF16
+ 2722 00ed 03       		.sleb128 3
+ 2723 00ee 0D       		.uleb128 0xd
+ 2724 00ef 00000000 		.long	.LASF17
+ 2725 00f3 04       		.sleb128 4
+ 2726 00f4 0D       		.uleb128 0xd
+ 2727 00f5 00000000 		.long	.LASF18
+ 2728 00f9 05       		.sleb128 5
+ 2729 00fa 0D       		.uleb128 0xd
+ 2730 00fb 00000000 		.long	.LASF19
+ 2731 00ff 06       		.sleb128 6
+ 2732 0100 0D       		.uleb128 0xd
+ 2733 0101 00000000 		.long	.LASF20
+ 2734 0105 07       		.sleb128 7
+ 2735 0106 0D       		.uleb128 0xd
+ 2736 0107 00000000 		.long	.LASF21
+ 2737 010b 08       		.sleb128 8
+ 2738 010c 0D       		.uleb128 0xd
+ 2739 010d 00000000 		.long	.LASF22
+ 2740 0111 09       		.sleb128 9
+ 2741 0112 0D       		.uleb128 0xd
+ 2742 0113 00000000 		.long	.LASF23
+ 2743 0117 0A       		.sleb128 10
+ 2744 0118 0D       		.uleb128 0xd
+ 2745 0119 00000000 		.long	.LASF24
+ 2746 011d 0B       		.sleb128 11
+ 2747 011e 0D       		.uleb128 0xd
+ 2748 011f 00000000 		.long	.LASF25
+ 2749 0123 0C       		.sleb128 12
+ 2750 0124 0D       		.uleb128 0xd
+ 2751 0125 00000000 		.long	.LASF26
+ 2752 0129 0D       		.sleb128 13
+ 2753 012a 0D       		.uleb128 0xd
+ 2754 012b 00000000 		.long	.LASF27
+ 2755 012f 0E       		.sleb128 14
+ 2756 0130 0D       		.uleb128 0xd
+ 2757 0131 00000000 		.long	.LASF28
+ 2758 0135 0F       		.sleb128 15
+ 2759 0136 0D       		.uleb128 0xd
+ 2760 0137 00000000 		.long	.LASF29
+ 2761 013b 10       		.sleb128 16
+ 2762 013c 0D       		.uleb128 0xd
+ 2763 013d 00000000 		.long	.LASF30
+
GAS LISTING /tmp/ccXzRABk.s 			page 77
+
+
+ 2764 0141 11       		.sleb128 17
+ 2765 0142 0D       		.uleb128 0xd
+ 2766 0143 00000000 		.long	.LASF31
+ 2767 0147 12       		.sleb128 18
+ 2768 0148 00       		.byte	0x0
+ 2769 0149 04       		.uleb128 0x4
+ 2770 014a 00000000 		.long	.LASF32
+ 2771 014e 05       		.byte	0x5
+ 2772 014f 42       		.byte	0x42
+ 2773 0150 86000000 		.long	0x86
+ 2774 0154 04       		.uleb128 0x4
+ 2775 0155 00000000 		.long	.LASF33
+ 2776 0159 06       		.byte	0x6
+ 2777 015a 20       		.byte	0x20
+ 2778 015b 5F010000 		.long	0x15f
+ 2779 015f 05       		.uleb128 0x5
+ 2780 0160 00000000 		.long	.LASF33
+ 2781 0164 48       		.byte	0x48
+ 2782 0165 06       		.byte	0x6
+ 2783 0166 20       		.byte	0x20
+ 2784 0167 F7010000 		.long	0x1f7
+ 2785 016b 06       		.uleb128 0x6
+ 2786 016c 00000000 		.long	.LASF35
+ 2787 0170 07       		.byte	0x7
+ 2788 0171 9A       		.byte	0x9a
+ 2789 0172 49010000 		.long	0x149
+ 2790 0176 02       		.byte	0x2
+ 2791 0177 23       		.byte	0x23
+ 2792 0178 00       		.uleb128 0x0
+ 2793 0179 06       		.uleb128 0x6
+ 2794 017a 00000000 		.long	.LASF36
+ 2795 017e 07       		.byte	0x7
+ 2796 017f 9B       		.byte	0x9b
+ 2797 0180 62000000 		.long	0x62
+ 2798 0184 02       		.byte	0x2
+ 2799 0185 23       		.byte	0x23
+ 2800 0186 04       		.uleb128 0x4
+ 2801 0187 0E       		.uleb128 0xe
+ 2802 0188 767400   		.string	"vt"
+ 2803 018b 07       		.byte	0x7
+ 2804 018c 9C       		.byte	0x9c
+ 2805 018d BC040000 		.long	0x4bc
+ 2806 0191 02       		.byte	0x2
+ 2807 0192 23       		.byte	0x23
+ 2808 0193 08       		.uleb128 0x8
+ 2809 0194 06       		.uleb128 0x6
+ 2810 0195 00000000 		.long	.LASF37
+ 2811 0199 07       		.byte	0x7
+ 2812 019a 9D       		.byte	0x9d
+ 2813 019b B6000000 		.long	0xb6
+ 2814 019f 02       		.byte	0x2
+ 2815 01a0 23       		.byte	0x23
+ 2816 01a1 10       		.uleb128 0x10
+ 2817 01a2 06       		.uleb128 0x6
+ 2818 01a3 00000000 		.long	.LASF38
+ 2819 01a7 07       		.byte	0x7
+ 2820 01a8 9E       		.byte	0x9e
+
GAS LISTING /tmp/ccXzRABk.s 			page 78
+
+
+ 2821 01a9 B4000000 		.long	0xb4
+ 2822 01ad 02       		.byte	0x2
+ 2823 01ae 23       		.byte	0x23
+ 2824 01af 18       		.uleb128 0x18
+ 2825 01b0 06       		.uleb128 0x6
+ 2826 01b1 00000000 		.long	.LASF39
+ 2827 01b5 07       		.byte	0x7
+ 2828 01b6 9F       		.byte	0x9f
+ 2829 01b7 B4000000 		.long	0xb4
+ 2830 01bb 02       		.byte	0x2
+ 2831 01bc 23       		.byte	0x23
+ 2832 01bd 20       		.uleb128 0x20
+ 2833 01be 06       		.uleb128 0x6
+ 2834 01bf 00000000 		.long	.LASF40
+ 2835 01c3 07       		.byte	0x7
+ 2836 01c4 A0       		.byte	0xa0
+ 2837 01c5 B4000000 		.long	0xb4
+ 2838 01c9 02       		.byte	0x2
+ 2839 01ca 23       		.byte	0x23
+ 2840 01cb 28       		.uleb128 0x28
+ 2841 01cc 06       		.uleb128 0x6
+ 2842 01cd 00000000 		.long	.LASF41
+ 2843 01d1 07       		.byte	0x7
+ 2844 01d2 A1       		.byte	0xa1
+ 2845 01d3 B4000000 		.long	0xb4
+ 2846 01d7 02       		.byte	0x2
+ 2847 01d8 23       		.byte	0x23
+ 2848 01d9 30       		.uleb128 0x30
+ 2849 01da 06       		.uleb128 0x6
+ 2850 01db 00000000 		.long	.LASF42
+ 2851 01df 07       		.byte	0x7
+ 2852 01e0 A2       		.byte	0xa2
+ 2853 01e1 F7010000 		.long	0x1f7
+ 2854 01e5 02       		.byte	0x2
+ 2855 01e6 23       		.byte	0x23
+ 2856 01e7 38       		.uleb128 0x38
+ 2857 01e8 06       		.uleb128 0x6
+ 2858 01e9 00000000 		.long	.LASF43
+ 2859 01ed 07       		.byte	0x7
+ 2860 01ee A3       		.byte	0xa3
+ 2861 01ef F7010000 		.long	0x1f7
+ 2862 01f3 02       		.byte	0x2
+ 2863 01f4 23       		.byte	0x23
+ 2864 01f5 40       		.uleb128 0x40
+ 2865 01f6 00       		.byte	0x0
+ 2866 01f7 04       		.uleb128 0x4
+ 2867 01f8 00000000 		.long	.LASF44
+ 2868 01fc 06       		.byte	0x6
+ 2869 01fd 40       		.byte	0x40
+ 2870 01fe 02020000 		.long	0x202
+ 2871 0202 0A       		.uleb128 0xa
+ 2872 0203 08       		.byte	0x8
+ 2873 0204 08020000 		.long	0x208
+ 2874 0208 0F       		.uleb128 0xf
+ 2875 0209 01       		.byte	0x1
+ 2876 020a 14020000 		.long	0x214
+ 2877 020e 10       		.uleb128 0x10
+
GAS LISTING /tmp/ccXzRABk.s 			page 79
+
+
+ 2878 020f B4000000 		.long	0xb4
+ 2879 0213 00       		.byte	0x0
+ 2880 0214 04       		.uleb128 0x4
+ 2881 0215 00000000 		.long	.LASF45
+ 2882 0219 07       		.byte	0x7
+ 2883 021a 2C       		.byte	0x2c
+ 2884 021b 1F020000 		.long	0x21f
+ 2885 021f 05       		.uleb128 0x5
+ 2886 0220 00000000 		.long	.LASF45
+ 2887 0224 50       		.byte	0x50
+ 2888 0225 07       		.byte	0x7
+ 2889 0226 2B       		.byte	0x2b
+ 2890 0227 48020000 		.long	0x248
+ 2891 022b 0E       		.uleb128 0xe
+ 2892 022c 64616400 		.string	"dad"
+ 2893 0230 01       		.byte	0x1
+ 2894 0231 3E       		.byte	0x3e
+ 2895 0232 54010000 		.long	0x154
+ 2896 0236 02       		.byte	0x2
+ 2897 0237 23       		.byte	0x23
+ 2898 0238 00       		.uleb128 0x0
+ 2899 0239 06       		.uleb128 0x6
+ 2900 023a 00000000 		.long	.LASF46
+ 2901 023e 01       		.byte	0x1
+ 2902 023f 3F       		.byte	0x3f
+ 2903 0240 5C070000 		.long	0x75c
+ 2904 0244 02       		.byte	0x2
+ 2905 0245 23       		.byte	0x23
+ 2906 0246 48       		.uleb128 0x48
+ 2907 0247 00       		.byte	0x0
+ 2908 0248 04       		.uleb128 0x4
+ 2909 0249 00000000 		.long	.LASF47
+ 2910 024d 07       		.byte	0x7
+ 2911 024e 2F       		.byte	0x2f
+ 2912 024f 53020000 		.long	0x253
+ 2913 0253 05       		.uleb128 0x5
+ 2914 0254 00000000 		.long	.LASF47
+ 2915 0258 08       		.byte	0x8
+ 2916 0259 07       		.byte	0x7
+ 2917 025a 2F       		.byte	0x2f
+ 2918 025b 7C020000 		.long	0x27c
+ 2919 025f 0E       		.uleb128 0xe
+ 2920 0260 6D616A00 		.string	"maj"
+ 2921 0264 07       		.byte	0x7
+ 2922 0265 32       		.byte	0x32
+ 2923 0266 62000000 		.long	0x62
+ 2924 026a 02       		.byte	0x2
+ 2925 026b 23       		.byte	0x23
+ 2926 026c 00       		.uleb128 0x0
+ 2927 026d 0E       		.uleb128 0xe
+ 2928 026e 6D696E00 		.string	"min"
+ 2929 0272 07       		.byte	0x7
+ 2930 0273 33       		.byte	0x33
+ 2931 0274 62000000 		.long	0x62
+ 2932 0278 02       		.byte	0x2
+ 2933 0279 23       		.byte	0x23
+ 2934 027a 04       		.uleb128 0x4
+
GAS LISTING /tmp/ccXzRABk.s 			page 80
+
+
+ 2935 027b 00       		.byte	0x0
+ 2936 027c 04       		.uleb128 0x4
+ 2937 027d 00000000 		.long	.LASF48
+ 2938 0281 07       		.byte	0x7
+ 2939 0282 37       		.byte	0x37
+ 2940 0283 87020000 		.long	0x287
+ 2941 0287 05       		.uleb128 0x5
+ 2942 0288 00000000 		.long	.LASF48
+ 2943 028c B0       		.byte	0xb0
+ 2944 028d 07       		.byte	0x7
+ 2945 028e 37       		.byte	0x37
+ 2946 028f CE030000 		.long	0x3ce
+ 2947 0293 06       		.uleb128 0x6
+ 2948 0294 00000000 		.long	.LASF49
+ 2949 0298 07       		.byte	0x7
+ 2950 0299 3A       		.byte	0x3a
+ 2951 029a 48020000 		.long	0x248
+ 2952 029e 02       		.byte	0x2
+ 2953 029f 23       		.byte	0x23
+ 2954 02a0 00       		.uleb128 0x0
+ 2955 02a1 06       		.uleb128 0x6
+ 2956 02a2 00000000 		.long	.LASF50
+ 2957 02a6 07       		.byte	0x7
+ 2958 02a7 3E       		.byte	0x3e
+ 2959 02a8 E4030000 		.long	0x3e4
+ 2960 02ac 02       		.byte	0x2
+ 2961 02ad 23       		.byte	0x23
+ 2962 02ae 08       		.uleb128 0x8
+ 2963 02af 06       		.uleb128 0x6
+ 2964 02b0 00000000 		.long	.LASF51
+ 2965 02b4 07       		.byte	0x7
+ 2966 02b5 40       		.byte	0x40
+ 2967 02b6 04040000 		.long	0x404
+ 2968 02ba 02       		.byte	0x2
+ 2969 02bb 23       		.byte	0x23
+ 2970 02bc 10       		.uleb128 0x10
+ 2971 02bd 06       		.uleb128 0x6
+ 2972 02be 00000000 		.long	.LASF52
+ 2973 02c2 07       		.byte	0x7
+ 2974 02c3 44       		.byte	0x44
+ 2975 02c4 04040000 		.long	0x404
+ 2976 02c8 02       		.byte	0x2
+ 2977 02c9 23       		.byte	0x23
+ 2978 02ca 18       		.uleb128 0x18
+ 2979 02cb 06       		.uleb128 0x6
+ 2980 02cc 00000000 		.long	.LASF53
+ 2981 02d0 07       		.byte	0x7
+ 2982 02d1 48       		.byte	0x48
+ 2983 02d2 26040000 		.long	0x426
+ 2984 02d6 02       		.byte	0x2
+ 2985 02d7 23       		.byte	0x23
+ 2986 02d8 20       		.uleb128 0x20
+ 2987 02d9 06       		.uleb128 0x6
+ 2988 02da 00000000 		.long	.LASF54
+ 2989 02de 07       		.byte	0x7
+ 2990 02df 4B       		.byte	0x4b
+ 2991 02e0 26040000 		.long	0x426
+
GAS LISTING /tmp/ccXzRABk.s 			page 81
+
+
+ 2992 02e4 02       		.byte	0x2
+ 2993 02e5 23       		.byte	0x23
+ 2994 02e6 28       		.uleb128 0x28
+ 2995 02e7 06       		.uleb128 0x6
+ 2996 02e8 00000000 		.long	.LASF55
+ 2997 02ec 07       		.byte	0x7
+ 2998 02ed 4E       		.byte	0x4e
+ 2999 02ee 41040000 		.long	0x441
+ 3000 02f2 02       		.byte	0x2
+ 3001 02f3 23       		.byte	0x23
+ 3002 02f4 30       		.uleb128 0x30
+ 3003 02f5 06       		.uleb128 0x6
+ 3004 02f6 00000000 		.long	.LASF56
+ 3005 02fa 07       		.byte	0x7
+ 3006 02fb 51       		.byte	0x51
+ 3007 02fc 41040000 		.long	0x441
+ 3008 0300 02       		.byte	0x2
+ 3009 0301 23       		.byte	0x23
+ 3010 0302 38       		.uleb128 0x38
+ 3011 0303 06       		.uleb128 0x6
+ 3012 0304 00000000 		.long	.LASF57
+ 3013 0308 07       		.byte	0x7
+ 3014 0309 55       		.byte	0x55
+ 3015 030a 6C040000 		.long	0x46c
+ 3016 030e 02       		.byte	0x2
+ 3017 030f 23       		.byte	0x23
+ 3018 0310 40       		.uleb128 0x40
+ 3019 0311 06       		.uleb128 0x6
+ 3020 0312 00000000 		.long	.LASF58
+ 3021 0316 07       		.byte	0x7
+ 3022 0317 58       		.byte	0x58
+ 3023 0318 6C040000 		.long	0x46c
+ 3024 031c 02       		.byte	0x2
+ 3025 031d 23       		.byte	0x23
+ 3026 031e 48       		.uleb128 0x48
+ 3027 031f 06       		.uleb128 0x6
+ 3028 0320 00000000 		.long	.LASF59
+ 3029 0324 07       		.byte	0x7
+ 3030 0325 5D       		.byte	0x5d
+ 3031 0326 91040000 		.long	0x491
+ 3032 032a 02       		.byte	0x2
+ 3033 032b 23       		.byte	0x23
+ 3034 032c 50       		.uleb128 0x50
+ 3035 032d 06       		.uleb128 0x6
+ 3036 032e 00000000 		.long	.LASF60
+ 3037 0332 07       		.byte	0x7
+ 3038 0333 62       		.byte	0x62
+ 3039 0334 91040000 		.long	0x491
+ 3040 0338 02       		.byte	0x2
+ 3041 0339 23       		.byte	0x23
+ 3042 033a 58       		.uleb128 0x58
+ 3043 033b 06       		.uleb128 0x6
+ 3044 033c 00000000 		.long	.LASF61
+ 3045 0340 07       		.byte	0x7
+ 3046 0341 68       		.byte	0x68
+ 3047 0342 B6040000 		.long	0x4b6
+ 3048 0346 02       		.byte	0x2
+
GAS LISTING /tmp/ccXzRABk.s 			page 82
+
+
+ 3049 0347 23       		.byte	0x23
+ 3050 0348 60       		.uleb128 0x60
+ 3051 0349 06       		.uleb128 0x6
+ 3052 034a 00000000 		.long	.LASF62
+ 3053 034e 07       		.byte	0x7
+ 3054 034f 6C       		.byte	0x6c
+ 3055 0350 B6040000 		.long	0x4b6
+ 3056 0354 02       		.byte	0x2
+ 3057 0355 23       		.byte	0x23
+ 3058 0356 68       		.uleb128 0x68
+ 3059 0357 06       		.uleb128 0x6
+ 3060 0358 00000000 		.long	.LASF63
+ 3061 035c 07       		.byte	0x7
+ 3062 035d 72       		.byte	0x72
+ 3063 035e B6040000 		.long	0x4b6
+ 3064 0362 02       		.byte	0x2
+ 3065 0363 23       		.byte	0x23
+ 3066 0364 70       		.uleb128 0x70
+ 3067 0365 06       		.uleb128 0x6
+ 3068 0366 00000000 		.long	.LASF64
+ 3069 036a 07       		.byte	0x7
+ 3070 036b 74       		.byte	0x74
+ 3071 036c B6040000 		.long	0x4b6
+ 3072 0370 02       		.byte	0x2
+ 3073 0371 23       		.byte	0x23
+ 3074 0372 78       		.uleb128 0x78
+ 3075 0373 06       		.uleb128 0x6
+ 3076 0374 00000000 		.long	.LASF65
+ 3077 0378 07       		.byte	0x7
+ 3078 0379 78       		.byte	0x78
+ 3079 037a B6040000 		.long	0x4b6
+ 3080 037e 03       		.byte	0x3
+ 3081 037f 23       		.byte	0x23
+ 3082 0380 8001     		.uleb128 0x80
+ 3083 0382 06       		.uleb128 0x6
+ 3084 0383 00000000 		.long	.LASF66
+ 3085 0387 07       		.byte	0x7
+ 3086 0388 7A       		.byte	0x7a
+ 3087 0389 B6040000 		.long	0x4b6
+ 3088 038d 03       		.byte	0x3
+ 3089 038e 23       		.byte	0x23
+ 3090 038f 8801     		.uleb128 0x88
+ 3091 0391 06       		.uleb128 0x6
+ 3092 0392 00000000 		.long	.LASF67
+ 3093 0396 07       		.byte	0x7
+ 3094 0397 7E       		.byte	0x7e
+ 3095 0398 B6040000 		.long	0x4b6
+ 3096 039c 03       		.byte	0x3
+ 3097 039d 23       		.byte	0x23
+ 3098 039e 9001     		.uleb128 0x90
+ 3099 03a0 06       		.uleb128 0x6
+ 3100 03a1 00000000 		.long	.LASF68
+ 3101 03a5 07       		.byte	0x7
+ 3102 03a6 80       		.byte	0x80
+ 3103 03a7 B6040000 		.long	0x4b6
+ 3104 03ab 03       		.byte	0x3
+ 3105 03ac 23       		.byte	0x23
+
GAS LISTING /tmp/ccXzRABk.s 			page 83
+
+
+ 3106 03ad 9801     		.uleb128 0x98
+ 3107 03af 06       		.uleb128 0x6
+ 3108 03b0 00000000 		.long	.LASF69
+ 3109 03b4 07       		.byte	0x7
+ 3110 03b5 84       		.byte	0x84
+ 3111 03b6 B6040000 		.long	0x4b6
+ 3112 03ba 03       		.byte	0x3
+ 3113 03bb 23       		.byte	0x23
+ 3114 03bc A001     		.uleb128 0xa0
+ 3115 03be 06       		.uleb128 0x6
+ 3116 03bf 00000000 		.long	.LASF70
+ 3117 03c3 07       		.byte	0x7
+ 3118 03c4 86       		.byte	0x86
+ 3119 03c5 B6040000 		.long	0x4b6
+ 3120 03c9 03       		.byte	0x3
+ 3121 03ca 23       		.byte	0x23
+ 3122 03cb A801     		.uleb128 0xa8
+ 3123 03cd 00       		.byte	0x0
+ 3124 03ce 11       		.uleb128 0x11
+ 3125 03cf 01       		.byte	0x1
+ 3126 03d0 7B000000 		.long	0x7b
+ 3127 03d4 DE030000 		.long	0x3de
+ 3128 03d8 10       		.uleb128 0x10
+ 3129 03d9 DE030000 		.long	0x3de
+ 3130 03dd 00       		.byte	0x0
+ 3131 03de 0A       		.uleb128 0xa
+ 3132 03df 08       		.byte	0x8
+ 3133 03e0 14020000 		.long	0x214
+ 3134 03e4 0A       		.uleb128 0xa
+ 3135 03e5 08       		.byte	0x8
+ 3136 03e6 CE030000 		.long	0x3ce
+ 3137 03ea 11       		.uleb128 0x11
+ 3138 03eb 01       		.byte	0x1
+ 3139 03ec 7B000000 		.long	0x7b
+ 3140 03f0 04040000 		.long	0x404
+ 3141 03f4 10       		.uleb128 0x10
+ 3142 03f5 DE030000 		.long	0x3de
+ 3143 03f9 10       		.uleb128 0x10
+ 3144 03fa B6000000 		.long	0xb6
+ 3145 03fe 10       		.uleb128 0x10
+ 3146 03ff 62000000 		.long	0x62
+ 3147 0403 00       		.byte	0x0
+ 3148 0404 0A       		.uleb128 0xa
+ 3149 0405 08       		.byte	0x8
+ 3150 0406 EA030000 		.long	0x3ea
+ 3151 040a 11       		.uleb128 0x11
+ 3152 040b 01       		.byte	0x1
+ 3153 040c 7B000000 		.long	0x7b
+ 3154 0410 1F040000 		.long	0x41f
+ 3155 0414 10       		.uleb128 0x10
+ 3156 0415 DE030000 		.long	0x3de
+ 3157 0419 10       		.uleb128 0x10
+ 3158 041a 1F040000 		.long	0x41f
+ 3159 041e 00       		.byte	0x0
+ 3160 041f 0A       		.uleb128 0xa
+ 3161 0420 08       		.byte	0x8
+ 3162 0421 25040000 		.long	0x425
+
GAS LISTING /tmp/ccXzRABk.s 			page 84
+
+
+ 3163 0425 12       		.uleb128 0x12
+ 3164 0426 0A       		.uleb128 0xa
+ 3165 0427 08       		.byte	0x8
+ 3166 0428 0A040000 		.long	0x40a
+ 3167 042c 11       		.uleb128 0x11
+ 3168 042d 01       		.byte	0x1
+ 3169 042e 7B000000 		.long	0x7b
+ 3170 0432 41040000 		.long	0x441
+ 3171 0436 10       		.uleb128 0x10
+ 3172 0437 DE030000 		.long	0x3de
+ 3173 043b 10       		.uleb128 0x10
+ 3174 043c F7010000 		.long	0x1f7
+ 3175 0440 00       		.byte	0x0
+ 3176 0441 0A       		.uleb128 0xa
+ 3177 0442 08       		.byte	0x8
+ 3178 0443 2C040000 		.long	0x42c
+ 3179 0447 11       		.uleb128 0x11
+ 3180 0448 01       		.byte	0x1
+ 3181 0449 7B000000 		.long	0x7b
+ 3182 044d 61040000 		.long	0x461
+ 3183 0451 10       		.uleb128 0x10
+ 3184 0452 61040000 		.long	0x461
+ 3185 0456 10       		.uleb128 0x10
+ 3186 0457 1F040000 		.long	0x41f
+ 3187 045b 10       		.uleb128 0x10
+ 3188 045c B4000000 		.long	0xb4
+ 3189 0460 00       		.byte	0x0
+ 3190 0461 0A       		.uleb128 0xa
+ 3191 0462 08       		.byte	0x8
+ 3192 0463 67040000 		.long	0x467
+ 3193 0467 0B       		.uleb128 0xb
+ 3194 0468 14020000 		.long	0x214
+ 3195 046c 0A       		.uleb128 0xa
+ 3196 046d 08       		.byte	0x8
+ 3197 046e 47040000 		.long	0x447
+ 3198 0472 11       		.uleb128 0x11
+ 3199 0473 01       		.byte	0x1
+ 3200 0474 7B000000 		.long	0x7b
+ 3201 0478 91040000 		.long	0x491
+ 3202 047c 10       		.uleb128 0x10
+ 3203 047d 61040000 		.long	0x461
+ 3204 0481 10       		.uleb128 0x10
+ 3205 0482 1F040000 		.long	0x41f
+ 3206 0486 10       		.uleb128 0x10
+ 3207 0487 B4000000 		.long	0xb4
+ 3208 048b 10       		.uleb128 0x10
+ 3209 048c 62000000 		.long	0x62
+ 3210 0490 00       		.byte	0x0
+ 3211 0491 0A       		.uleb128 0xa
+ 3212 0492 08       		.byte	0x8
+ 3213 0493 72040000 		.long	0x472
+ 3214 0497 11       		.uleb128 0x11
+ 3215 0498 01       		.byte	0x1
+ 3216 0499 7B000000 		.long	0x7b
+ 3217 049d B6040000 		.long	0x4b6
+ 3218 04a1 10       		.uleb128 0x10
+ 3219 04a2 DE030000 		.long	0x3de
+
GAS LISTING /tmp/ccXzRABk.s 			page 85
+
+
+ 3220 04a6 10       		.uleb128 0x10
+ 3221 04a7 1F040000 		.long	0x41f
+ 3222 04ab 10       		.uleb128 0x10
+ 3223 04ac B4000000 		.long	0xb4
+ 3224 04b0 10       		.uleb128 0x10
+ 3225 04b1 62000000 		.long	0x62
+ 3226 04b5 00       		.byte	0x0
+ 3227 04b6 0A       		.uleb128 0xa
+ 3228 04b7 08       		.byte	0x8
+ 3229 04b8 97040000 		.long	0x497
+ 3230 04bc 04       		.uleb128 0x4
+ 3231 04bd 00000000 		.long	.LASF71
+ 3232 04c1 07       		.byte	0x7
+ 3233 04c2 90       		.byte	0x90
+ 3234 04c3 C7040000 		.long	0x4c7
+ 3235 04c7 13       		.uleb128 0x13
+ 3236 04c8 00000000 		.long	.LASF71
+ 3237 04cc 08       		.byte	0x8
+ 3238 04cd 07       		.byte	0x7
+ 3239 04ce 90       		.byte	0x90
+ 3240 04cf E9040000 		.long	0x4e9
+ 3241 04d3 14       		.uleb128 0x14
+ 3242 04d4 00000000 		.long	.LASF49
+ 3243 04d8 07       		.byte	0x7
+ 3244 04d9 93       		.byte	0x93
+ 3245 04da E9040000 		.long	0x4e9
+ 3246 04de 15       		.uleb128 0x15
+ 3247 04df 763100   		.string	"v1"
+ 3248 04e2 07       		.byte	0x7
+ 3249 04e3 94       		.byte	0x94
+ 3250 04e4 F4040000 		.long	0x4f4
+ 3251 04e8 00       		.byte	0x0
+ 3252 04e9 0A       		.uleb128 0xa
+ 3253 04ea 08       		.byte	0x8
+ 3254 04eb EF040000 		.long	0x4ef
+ 3255 04ef 0B       		.uleb128 0xb
+ 3256 04f0 48020000 		.long	0x248
+ 3257 04f4 0A       		.uleb128 0xa
+ 3258 04f5 08       		.byte	0x8
+ 3259 04f6 FA040000 		.long	0x4fa
+ 3260 04fa 0B       		.uleb128 0xb
+ 3261 04fb 7C020000 		.long	0x27c
+ 3262 04ff 02       		.uleb128 0x2
+ 3263 0500 08       		.byte	0x8
+ 3264 0501 05       		.byte	0x5
+ 3265 0502 00000000 		.long	.LASF72
+ 3266 0506 02       		.uleb128 0x2
+ 3267 0507 04       		.byte	0x4
+ 3268 0508 04       		.byte	0x4
+ 3269 0509 00000000 		.long	.LASF73
+ 3270 050d 0A       		.uleb128 0xa
+ 3271 050e 08       		.byte	0x8
+ 3272 050f C1000000 		.long	0xc1
+ 3273 0513 02       		.uleb128 0x2
+ 3274 0514 08       		.byte	0x8
+ 3275 0515 07       		.byte	0x7
+ 3276 0516 00000000 		.long	.LASF74
+
GAS LISTING /tmp/ccXzRABk.s 			page 86
+
+
+ 3277 051a 02       		.uleb128 0x2
+ 3278 051b 08       		.byte	0x8
+ 3279 051c 04       		.byte	0x4
+ 3280 051d 00000000 		.long	.LASF75
+ 3281 0521 04       		.uleb128 0x4
+ 3282 0522 00000000 		.long	.LASF76
+ 3283 0526 08       		.byte	0x8
+ 3284 0527 26       		.byte	0x26
+ 3285 0528 2C050000 		.long	0x52c
+ 3286 052c 16       		.uleb128 0x16
+ 3287 052d 01       		.byte	0x1
+ 3288 052e 49000000 		.long	0x49
+ 3289 0532 3D050000 		.long	0x53d
+ 3290 0536 17       		.uleb128 0x17
+ 3291 0537 B1000000 		.long	0xb1
+ 3292 053b 0F       		.byte	0xf
+ 3293 053c 00       		.byte	0x0
+ 3294 053d 04       		.uleb128 0x4
+ 3295 053e 00000000 		.long	.LASF77
+ 3296 0542 09       		.byte	0x9
+ 3297 0543 3B       		.byte	0x3b
+ 3298 0544 21050000 		.long	0x521
+ 3299 0548 04       		.uleb128 0x4
+ 3300 0549 00000000 		.long	.LASF78
+ 3301 054d 09       		.byte	0x9
+ 3302 054e 43       		.byte	0x43
+ 3303 054f 53050000 		.long	0x553
+ 3304 0553 05       		.uleb128 0x5
+ 3305 0554 00000000 		.long	.LASF78
+ 3306 0558 08       		.byte	0x8
+ 3307 0559 09       		.byte	0x9
+ 3308 055a 43       		.byte	0x43
+ 3309 055b 7C050000 		.long	0x57c
+ 3310 055f 0E       		.uleb128 0xe
+ 3311 0560 6D616A00 		.string	"maj"
+ 3312 0564 09       		.byte	0x9
+ 3313 0565 46       		.byte	0x46
+ 3314 0566 62000000 		.long	0x62
+ 3315 056a 02       		.byte	0x2
+ 3316 056b 23       		.byte	0x23
+ 3317 056c 00       		.uleb128 0x0
+ 3318 056d 0E       		.uleb128 0xe
+ 3319 056e 6D696E00 		.string	"min"
+ 3320 0572 09       		.byte	0x9
+ 3321 0573 47       		.byte	0x47
+ 3322 0574 62000000 		.long	0x62
+ 3323 0578 02       		.byte	0x2
+ 3324 0579 23       		.byte	0x23
+ 3325 057a 04       		.uleb128 0x4
+ 3326 057b 00       		.byte	0x0
+ 3327 057c 04       		.uleb128 0x4
+ 3328 057d 00000000 		.long	.LASF79
+ 3329 0581 09       		.byte	0x9
+ 3330 0582 52       		.byte	0x52
+ 3331 0583 87050000 		.long	0x587
+ 3332 0587 05       		.uleb128 0x5
+ 3333 0588 00000000 		.long	.LASF79
+
GAS LISTING /tmp/ccXzRABk.s 			page 87
+
+
+ 3334 058c 40       		.byte	0x40
+ 3335 058d 09       		.byte	0x9
+ 3336 058e 52       		.byte	0x52
+ 3337 058f 04060000 		.long	0x604
+ 3338 0593 06       		.uleb128 0x6
+ 3339 0594 00000000 		.long	.LASF49
+ 3340 0598 09       		.byte	0x9
+ 3341 0599 5E       		.byte	0x5e
+ 3342 059a 48050000 		.long	0x548
+ 3343 059e 02       		.byte	0x2
+ 3344 059f 23       		.byte	0x23
+ 3345 05a0 00       		.uleb128 0x0
+ 3346 05a1 06       		.uleb128 0x6
+ 3347 05a2 00000000 		.long	.LASF50
+ 3348 05a6 09       		.byte	0x9
+ 3349 05a7 63       		.byte	0x63
+ 3350 05a8 48060000 		.long	0x648
+ 3351 05ac 02       		.byte	0x2
+ 3352 05ad 23       		.byte	0x23
+ 3353 05ae 08       		.uleb128 0x8
+ 3354 05af 06       		.uleb128 0x6
+ 3355 05b0 00000000 		.long	.LASF36
+ 3356 05b4 09       		.byte	0x9
+ 3357 05b5 65       		.byte	0x65
+ 3358 05b6 59060000 		.long	0x659
+ 3359 05ba 02       		.byte	0x2
+ 3360 05bb 23       		.byte	0x23
+ 3361 05bc 10       		.uleb128 0x10
+ 3362 05bd 06       		.uleb128 0x6
+ 3363 05be 00000000 		.long	.LASF80
+ 3364 05c2 09       		.byte	0x9
+ 3365 05c3 67       		.byte	0x67
+ 3366 05c4 59060000 		.long	0x659
+ 3367 05c8 02       		.byte	0x2
+ 3368 05c9 23       		.byte	0x23
+ 3369 05ca 18       		.uleb128 0x18
+ 3370 05cb 06       		.uleb128 0x6
+ 3371 05cc 00000000 		.long	.LASF51
+ 3372 05d0 09       		.byte	0x9
+ 3373 05d1 69       		.byte	0x69
+ 3374 05d2 79060000 		.long	0x679
+ 3375 05d6 02       		.byte	0x2
+ 3376 05d7 23       		.byte	0x23
+ 3377 05d8 20       		.uleb128 0x20
+ 3378 05d9 06       		.uleb128 0x6
+ 3379 05da 00000000 		.long	.LASF52
+ 3380 05de 09       		.byte	0x9
+ 3381 05df 6D       		.byte	0x6d
+ 3382 05e0 79060000 		.long	0x679
+ 3383 05e4 02       		.byte	0x2
+ 3384 05e5 23       		.byte	0x23
+ 3385 05e6 28       		.uleb128 0x28
+ 3386 05e7 06       		.uleb128 0x6
+ 3387 05e8 00000000 		.long	.LASF57
+ 3388 05ec 09       		.byte	0x9
+ 3389 05ed 71       		.byte	0x71
+ 3390 05ee 95060000 		.long	0x695
+
GAS LISTING /tmp/ccXzRABk.s 			page 88
+
+
+ 3391 05f2 02       		.byte	0x2
+ 3392 05f3 23       		.byte	0x23
+ 3393 05f4 30       		.uleb128 0x30
+ 3394 05f5 06       		.uleb128 0x6
+ 3395 05f6 00000000 		.long	.LASF58
+ 3396 05fa 09       		.byte	0x9
+ 3397 05fb 75       		.byte	0x75
+ 3398 05fc 95060000 		.long	0x695
+ 3399 0600 02       		.byte	0x2
+ 3400 0601 23       		.byte	0x23
+ 3401 0602 38       		.uleb128 0x38
+ 3402 0603 00       		.byte	0x0
+ 3403 0604 04       		.uleb128 0x4
+ 3404 0605 00000000 		.long	.LASF81
+ 3405 0609 09       		.byte	0x9
+ 3406 060a 53       		.byte	0x53
+ 3407 060b 0F060000 		.long	0x60f
+ 3408 060f 13       		.uleb128 0x13
+ 3409 0610 00000000 		.long	.LASF81
+ 3410 0614 40       		.byte	0x40
+ 3411 0615 09       		.byte	0x9
+ 3412 0616 53       		.byte	0x53
+ 3413 0617 31060000 		.long	0x631
+ 3414 061b 14       		.uleb128 0x14
+ 3415 061c 00000000 		.long	.LASF49
+ 3416 0620 09       		.byte	0x9
+ 3417 0621 7F       		.byte	0x7f
+ 3418 0622 48050000 		.long	0x548
+ 3419 0626 15       		.uleb128 0x15
+ 3420 0627 763100   		.string	"v1"
+ 3421 062a 09       		.byte	0x9
+ 3422 062b 80       		.byte	0x80
+ 3423 062c 7C050000 		.long	0x57c
+ 3424 0630 00       		.byte	0x0
+ 3425 0631 0F       		.uleb128 0xf
+ 3426 0632 01       		.byte	0x1
+ 3427 0633 3D060000 		.long	0x63d
+ 3428 0637 10       		.uleb128 0x10
+ 3429 0638 3D060000 		.long	0x63d
+ 3430 063c 00       		.byte	0x0
+ 3431 063d 0A       		.uleb128 0xa
+ 3432 063e 08       		.byte	0x8
+ 3433 063f 43060000 		.long	0x643
+ 3434 0643 0B       		.uleb128 0xb
+ 3435 0644 04060000 		.long	0x604
+ 3436 0648 0A       		.uleb128 0xa
+ 3437 0649 08       		.byte	0x8
+ 3438 064a 31060000 		.long	0x631
+ 3439 064e 18       		.uleb128 0x18
+ 3440 064f 62000000 		.long	0x62
+ 3441 0653 59060000 		.long	0x659
+ 3442 0657 19       		.uleb128 0x19
+ 3443 0658 00       		.byte	0x0
+ 3444 0659 0A       		.uleb128 0xa
+ 3445 065a 08       		.byte	0x8
+ 3446 065b 4E060000 		.long	0x64e
+ 3447 065f 11       		.uleb128 0x11
+
GAS LISTING /tmp/ccXzRABk.s 			page 89
+
+
+ 3448 0660 01       		.byte	0x1
+ 3449 0661 7B000000 		.long	0x7b
+ 3450 0665 79060000 		.long	0x679
+ 3451 0669 10       		.uleb128 0x10
+ 3452 066a B4000000 		.long	0xb4
+ 3453 066e 10       		.uleb128 0x10
+ 3454 066f B6000000 		.long	0xb6
+ 3455 0673 10       		.uleb128 0x10
+ 3456 0674 62000000 		.long	0x62
+ 3457 0678 00       		.byte	0x0
+ 3458 0679 0A       		.uleb128 0xa
+ 3459 067a 08       		.byte	0x8
+ 3460 067b 5F060000 		.long	0x65f
+ 3461 067f 0F       		.uleb128 0xf
+ 3462 0680 01       		.byte	0x1
+ 3463 0681 95060000 		.long	0x695
+ 3464 0685 10       		.uleb128 0x10
+ 3465 0686 B6000000 		.long	0xb6
+ 3466 068a 10       		.uleb128 0x10
+ 3467 068b 0D050000 		.long	0x50d
+ 3468 068f 10       		.uleb128 0x10
+ 3469 0690 1F040000 		.long	0x41f
+ 3470 0694 00       		.byte	0x0
+ 3471 0695 0A       		.uleb128 0xa
+ 3472 0696 08       		.byte	0x8
+ 3473 0697 7F060000 		.long	0x67f
+ 3474 069b 04       		.uleb128 0x4
+ 3475 069c 00000000 		.long	.LASF82
+ 3476 06a0 09       		.byte	0x9
+ 3477 06a1 84       		.byte	0x84
+ 3478 06a2 A6060000 		.long	0x6a6
+ 3479 06a6 05       		.uleb128 0x5
+ 3480 06a7 00000000 		.long	.LASF82
+ 3481 06ab 40       		.byte	0x40
+ 3482 06ac 09       		.byte	0x9
+ 3483 06ad 84       		.byte	0x84
+ 3484 06ae 23070000 		.long	0x723
+ 3485 06b2 06       		.uleb128 0x6
+ 3486 06b3 00000000 		.long	.LASF49
+ 3487 06b7 09       		.byte	0x9
+ 3488 06b8 90       		.byte	0x90
+ 3489 06b9 48050000 		.long	0x548
+ 3490 06bd 02       		.byte	0x2
+ 3491 06be 23       		.byte	0x23
+ 3492 06bf 00       		.uleb128 0x0
+ 3493 06c0 06       		.uleb128 0x6
+ 3494 06c1 00000000 		.long	.LASF50
+ 3495 06c5 09       		.byte	0x9
+ 3496 06c6 95       		.byte	0x95
+ 3497 06c7 67070000 		.long	0x767
+ 3498 06cb 02       		.byte	0x2
+ 3499 06cc 23       		.byte	0x23
+ 3500 06cd 08       		.uleb128 0x8
+ 3501 06ce 06       		.uleb128 0x6
+ 3502 06cf 00000000 		.long	.LASF36
+ 3503 06d3 09       		.byte	0x9
+ 3504 06d4 97       		.byte	0x97
+
GAS LISTING /tmp/ccXzRABk.s 			page 90
+
+
+ 3505 06d5 59060000 		.long	0x659
+ 3506 06d9 02       		.byte	0x2
+ 3507 06da 23       		.byte	0x23
+ 3508 06db 10       		.uleb128 0x10
+ 3509 06dc 06       		.uleb128 0x6
+ 3510 06dd 00000000 		.long	.LASF80
+ 3511 06e1 09       		.byte	0x9
+ 3512 06e2 99       		.byte	0x99
+ 3513 06e3 59060000 		.long	0x659
+ 3514 06e7 02       		.byte	0x2
+ 3515 06e8 23       		.byte	0x23
+ 3516 06e9 18       		.uleb128 0x18
+ 3517 06ea 06       		.uleb128 0x6
+ 3518 06eb 00000000 		.long	.LASF51
+ 3519 06ef 09       		.byte	0x9
+ 3520 06f0 9B       		.byte	0x9b
+ 3521 06f1 79060000 		.long	0x679
+ 3522 06f5 02       		.byte	0x2
+ 3523 06f6 23       		.byte	0x23
+ 3524 06f7 20       		.uleb128 0x20
+ 3525 06f8 06       		.uleb128 0x6
+ 3526 06f9 00000000 		.long	.LASF52
+ 3527 06fd 09       		.byte	0x9
+ 3528 06fe 9F       		.byte	0x9f
+ 3529 06ff 79060000 		.long	0x679
+ 3530 0703 02       		.byte	0x2
+ 3531 0704 23       		.byte	0x23
+ 3532 0705 28       		.uleb128 0x28
+ 3533 0706 06       		.uleb128 0x6
+ 3534 0707 00000000 		.long	.LASF57
+ 3535 070b 09       		.byte	0x9
+ 3536 070c A3       		.byte	0xa3
+ 3537 070d 82070000 		.long	0x782
+ 3538 0711 02       		.byte	0x2
+ 3539 0712 23       		.byte	0x23
+ 3540 0713 30       		.uleb128 0x30
+ 3541 0714 06       		.uleb128 0x6
+ 3542 0715 00000000 		.long	.LASF58
+ 3543 0719 09       		.byte	0x9
+ 3544 071a A6       		.byte	0xa6
+ 3545 071b 82070000 		.long	0x782
+ 3546 071f 02       		.byte	0x2
+ 3547 0720 23       		.byte	0x23
+ 3548 0721 38       		.uleb128 0x38
+ 3549 0722 00       		.byte	0x0
+ 3550 0723 04       		.uleb128 0x4
+ 3551 0724 00000000 		.long	.LASF83
+ 3552 0728 09       		.byte	0x9
+ 3553 0729 85       		.byte	0x85
+ 3554 072a 2E070000 		.long	0x72e
+ 3555 072e 13       		.uleb128 0x13
+ 3556 072f 00000000 		.long	.LASF83
+ 3557 0733 40       		.byte	0x40
+ 3558 0734 09       		.byte	0x9
+ 3559 0735 85       		.byte	0x85
+ 3560 0736 50070000 		.long	0x750
+ 3561 073a 14       		.uleb128 0x14
+
GAS LISTING /tmp/ccXzRABk.s 			page 91
+
+
+ 3562 073b 00000000 		.long	.LASF49
+ 3563 073f 09       		.byte	0x9
+ 3564 0740 AF       		.byte	0xaf
+ 3565 0741 48050000 		.long	0x548
+ 3566 0745 15       		.uleb128 0x15
+ 3567 0746 763100   		.string	"v1"
+ 3568 0749 09       		.byte	0x9
+ 3569 074a B0       		.byte	0xb0
+ 3570 074b 9B060000 		.long	0x69b
+ 3571 074f 00       		.byte	0x0
+ 3572 0750 0F       		.uleb128 0xf
+ 3573 0751 01       		.byte	0x1
+ 3574 0752 5C070000 		.long	0x75c
+ 3575 0756 10       		.uleb128 0x10
+ 3576 0757 5C070000 		.long	0x75c
+ 3577 075b 00       		.byte	0x0
+ 3578 075c 0A       		.uleb128 0xa
+ 3579 075d 08       		.byte	0x8
+ 3580 075e 62070000 		.long	0x762
+ 3581 0762 0B       		.uleb128 0xb
+ 3582 0763 23070000 		.long	0x723
+ 3583 0767 0A       		.uleb128 0xa
+ 3584 0768 08       		.byte	0x8
+ 3585 0769 50070000 		.long	0x750
+ 3586 076d 11       		.uleb128 0x11
+ 3587 076e 01       		.byte	0x1
+ 3588 076f 3D050000 		.long	0x53d
+ 3589 0773 82070000 		.long	0x782
+ 3590 0777 10       		.uleb128 0x10
+ 3591 0778 3D050000 		.long	0x53d
+ 3592 077c 10       		.uleb128 0x10
+ 3593 077d 1F040000 		.long	0x41f
+ 3594 0781 00       		.byte	0x0
+ 3595 0782 0A       		.uleb128 0xa
+ 3596 0783 08       		.byte	0x8
+ 3597 0784 6D070000 		.long	0x76d
+ 3598 0788 04       		.uleb128 0x4
+ 3599 0789 00000000 		.long	.LASF84
+ 3600 078d 0A       		.byte	0xa
+ 3601 078e B0       		.byte	0xb0
+ 3602 078f 93070000 		.long	0x793
+ 3603 0793 1A       		.uleb128 0x1a
+ 3604 0794 00000000 		.long	.LASF84
+ 3605 0798 0001     		.value	0x100
+ 3606 079a 0A       		.byte	0xa
+ 3607 079b B0       		.byte	0xb0
+ 3608 079c BE070000 		.long	0x7be
+ 3609 07a0 06       		.uleb128 0x6
+ 3610 07a1 00000000 		.long	.LASF85
+ 3611 07a5 0A       		.byte	0xa
+ 3612 07a6 B3       		.byte	0xb3
+ 3613 07a7 BE070000 		.long	0x7be
+ 3614 07ab 02       		.byte	0x2
+ 3615 07ac 23       		.byte	0x23
+ 3616 07ad 00       		.uleb128 0x0
+ 3617 07ae 06       		.uleb128 0x6
+ 3618 07af 00000000 		.long	.LASF86
+
GAS LISTING /tmp/ccXzRABk.s 			page 92
+
+
+ 3619 07b3 0A       		.byte	0xa
+ 3620 07b4 B4       		.byte	0xb4
+ 3621 07b5 62000000 		.long	0x62
+ 3622 07b9 03       		.byte	0x3
+ 3623 07ba 23       		.byte	0x23
+ 3624 07bb F001     		.uleb128 0xf0
+ 3625 07bd 00       		.byte	0x0
+ 3626 07be 1B       		.uleb128 0x1b
+ 3627 07bf 3D050000 		.long	0x53d
+ 3628 07c3 CE070000 		.long	0x7ce
+ 3629 07c7 17       		.uleb128 0x17
+ 3630 07c8 B1000000 		.long	0xb1
+ 3631 07cc 0E       		.byte	0xe
+ 3632 07cd 00       		.byte	0x0
+ 3633 07ce 04       		.uleb128 0x4
+ 3634 07cf 00000000 		.long	.LASF87
+ 3635 07d3 0A       		.byte	0xa
+ 3636 07d4 D2       		.byte	0xd2
+ 3637 07d5 D9070000 		.long	0x7d9
+ 3638 07d9 1A       		.uleb128 0x1a
+ 3639 07da 00000000 		.long	.LASF87
+ 3640 07de 7002     		.value	0x270
+ 3641 07e0 0A       		.byte	0xa
+ 3642 07e1 D2       		.byte	0xd2
+ 3643 07e2 30080000 		.long	0x830
+ 3644 07e6 0E       		.uleb128 0xe
+ 3645 07e7 64616400 		.string	"dad"
+ 3646 07eb 0A       		.byte	0xa
+ 3647 07ec D5       		.byte	0xd5
+ 3648 07ed 54010000 		.long	0x154
+ 3649 07f1 02       		.byte	0x2
+ 3650 07f2 23       		.byte	0x23
+ 3651 07f3 00       		.uleb128 0x0
+ 3652 07f4 06       		.uleb128 0x6
+ 3653 07f5 00000000 		.long	.LASF88
+ 3654 07f9 0A       		.byte	0xa
+ 3655 07fa D6       		.byte	0xd6
+ 3656 07fb 88070000 		.long	0x788
+ 3657 07ff 02       		.byte	0x2
+ 3658 0800 23       		.byte	0x23
+ 3659 0801 50       		.uleb128 0x50
+ 3660 0802 06       		.uleb128 0x6
+ 3661 0803 00000000 		.long	.LASF89
+ 3662 0807 0A       		.byte	0xa
+ 3663 0808 D7       		.byte	0xd7
+ 3664 0809 88070000 		.long	0x788
+ 3665 080d 03       		.byte	0x3
+ 3666 080e 23       		.byte	0x23
+ 3667 080f D002     		.uleb128 0x150
+ 3668 0811 06       		.uleb128 0x6
+ 3669 0812 00000000 		.long	.LASF90
+ 3670 0816 0A       		.byte	0xa
+ 3671 0817 D8       		.byte	0xd8
+ 3672 0818 3D050000 		.long	0x53d
+ 3673 081c 03       		.byte	0x3
+ 3674 081d 23       		.byte	0x23
+ 3675 081e D004     		.uleb128 0x250
+
GAS LISTING /tmp/ccXzRABk.s 			page 93
+
+
+ 3676 0820 06       		.uleb128 0x6
+ 3677 0821 00000000 		.long	.LASF91
+ 3678 0825 0A       		.byte	0xa
+ 3679 0826 D9       		.byte	0xd9
+ 3680 0827 3D050000 		.long	0x53d
+ 3681 082b 03       		.byte	0x3
+ 3682 082c 23       		.byte	0x23
+ 3683 082d E004     		.uleb128 0x260
+ 3684 082f 00       		.byte	0x0
+ 3685 0830 04       		.uleb128 0x4
+ 3686 0831 00000000 		.long	.LASF92
+ 3687 0835 0B       		.byte	0xb
+ 3688 0836 29       		.byte	0x29
+ 3689 0837 3B080000 		.long	0x83b
+ 3690 083b 05       		.uleb128 0x5
+ 3691 083c 00000000 		.long	.LASF92
+ 3692 0840 70       		.byte	0x70
+ 3693 0841 0B       		.byte	0xb
+ 3694 0842 29       		.byte	0x29
+ 3695 0843 72080000 		.long	0x872
+ 3696 0847 0E       		.uleb128 0xe
+ 3697 0848 64616400 		.string	"dad"
+ 3698 084c 0B       		.byte	0xb
+ 3699 084d 2C       		.byte	0x2c
+ 3700 084e 54010000 		.long	0x154
+ 3701 0852 02       		.byte	0x2
+ 3702 0853 23       		.byte	0x23
+ 3703 0854 00       		.uleb128 0x0
+ 3704 0855 06       		.uleb128 0x6
+ 3705 0856 00000000 		.long	.LASF90
+ 3706 085a 0B       		.byte	0xb
+ 3707 085b 2D       		.byte	0x2d
+ 3708 085c 3D050000 		.long	0x53d
+ 3709 0860 02       		.byte	0x2
+ 3710 0861 23       		.byte	0x23
+ 3711 0862 50       		.uleb128 0x50
+ 3712 0863 06       		.uleb128 0x6
+ 3713 0864 00000000 		.long	.LASF91
+ 3714 0868 0B       		.byte	0xb
+ 3715 0869 2E       		.byte	0x2e
+ 3716 086a 3D050000 		.long	0x53d
+ 3717 086e 02       		.byte	0x2
+ 3718 086f 23       		.byte	0x23
+ 3719 0870 60       		.uleb128 0x60
+ 3720 0871 00       		.byte	0x0
+ 3721 0872 04       		.uleb128 0x4
+ 3722 0873 00000000 		.long	.LASF93
+ 3723 0877 0C       		.byte	0xc
+ 3724 0878 48       		.byte	0x48
+ 3725 0879 62000000 		.long	0x62
+ 3726 087d 0C       		.uleb128 0xc
+ 3727 087e 04       		.byte	0x4
+ 3728 087f 0C       		.byte	0xc
+ 3729 0880 4A       		.byte	0x4a
+ 3730 0881 98080000 		.long	0x898
+ 3731 0885 0D       		.uleb128 0xd
+ 3732 0886 00000000 		.long	.LASF94
+
GAS LISTING /tmp/ccXzRABk.s 			page 94
+
+
+ 3733 088a 00       		.sleb128 0
+ 3734 088b 0D       		.uleb128 0xd
+ 3735 088c 00000000 		.long	.LASF95
+ 3736 0890 01       		.sleb128 1
+ 3737 0891 0D       		.uleb128 0xd
+ 3738 0892 00000000 		.long	.LASF96
+ 3739 0896 02       		.sleb128 2
+ 3740 0897 00       		.byte	0x0
+ 3741 0898 04       		.uleb128 0x4
+ 3742 0899 00000000 		.long	.LASF97
+ 3743 089d 0E       		.byte	0xe
+ 3744 089e 40       		.byte	0x40
+ 3745 089f A3080000 		.long	0x8a3
+ 3746 08a3 13       		.uleb128 0x13
+ 3747 08a4 00000000 		.long	.LASF97
+ 3748 08a8 40       		.byte	0x40
+ 3749 08a9 0E       		.byte	0xe
+ 3750 08aa 40       		.byte	0x40
+ 3751 08ab C6080000 		.long	0x8c6
+ 3752 08af 14       		.uleb128 0x14
+ 3753 08b0 00000000 		.long	.LASF98
+ 3754 08b4 0E       		.byte	0xe
+ 3755 08b5 43       		.byte	0x43
+ 3756 08b6 04060000 		.long	0x604
+ 3757 08ba 15       		.uleb128 0x15
+ 3758 08bb 76656300 		.string	"vec"
+ 3759 08bf 0E       		.byte	0xe
+ 3760 08c0 44       		.byte	0x44
+ 3761 08c1 23070000 		.long	0x723
+ 3762 08c5 00       		.byte	0x0
+ 3763 08c6 1C       		.uleb128 0x1c
+ 3764 08c7 00000000 		.long	.LASF121
+ 3765 08cb 04       		.byte	0x4
+ 3766 08cc 0F       		.byte	0xf
+ 3767 08cd 5A       		.byte	0x5a
+ 3768 08ce 57090000 		.long	0x957
+ 3769 08d2 0D       		.uleb128 0xd
+ 3770 08d3 00000000 		.long	.LASF99
+ 3771 08d7 00       		.sleb128 0
+ 3772 08d8 0D       		.uleb128 0xd
+ 3773 08d9 00000000 		.long	.LASF100
+ 3774 08dd 01       		.sleb128 1
+ 3775 08de 0D       		.uleb128 0xd
+ 3776 08df 00000000 		.long	.LASF101
+ 3777 08e3 02       		.sleb128 2
+ 3778 08e4 0D       		.uleb128 0xd
+ 3779 08e5 00000000 		.long	.LASF102
+ 3780 08e9 03       		.sleb128 3
+ 3781 08ea 0D       		.uleb128 0xd
+ 3782 08eb 00000000 		.long	.LASF103
+ 3783 08ef 04       		.sleb128 4
+ 3784 08f0 0D       		.uleb128 0xd
+ 3785 08f1 00000000 		.long	.LASF104
+ 3786 08f5 05       		.sleb128 5
+ 3787 08f6 0D       		.uleb128 0xd
+ 3788 08f7 00000000 		.long	.LASF105
+ 3789 08fb 06       		.sleb128 6
+
GAS LISTING /tmp/ccXzRABk.s 			page 95
+
+
+ 3790 08fc 0D       		.uleb128 0xd
+ 3791 08fd 00000000 		.long	.LASF106
+ 3792 0901 07       		.sleb128 7
+ 3793 0902 0D       		.uleb128 0xd
+ 3794 0903 00000000 		.long	.LASF107
+ 3795 0907 08       		.sleb128 8
+ 3796 0908 0D       		.uleb128 0xd
+ 3797 0909 00000000 		.long	.LASF108
+ 3798 090d 09       		.sleb128 9
+ 3799 090e 0D       		.uleb128 0xd
+ 3800 090f 00000000 		.long	.LASF109
+ 3801 0913 0A       		.sleb128 10
+ 3802 0914 0D       		.uleb128 0xd
+ 3803 0915 00000000 		.long	.LASF110
+ 3804 0919 0B       		.sleb128 11
+ 3805 091a 0D       		.uleb128 0xd
+ 3806 091b 00000000 		.long	.LASF111
+ 3807 091f 0C       		.sleb128 12
+ 3808 0920 0D       		.uleb128 0xd
+ 3809 0921 00000000 		.long	.LASF112
+ 3810 0925 0D       		.sleb128 13
+ 3811 0926 0D       		.uleb128 0xd
+ 3812 0927 00000000 		.long	.LASF113
+ 3813 092b 0E       		.sleb128 14
+ 3814 092c 0D       		.uleb128 0xd
+ 3815 092d 00000000 		.long	.LASF114
+ 3816 0931 0E       		.sleb128 14
+ 3817 0932 0D       		.uleb128 0xd
+ 3818 0933 00000000 		.long	.LASF115
+ 3819 0937 0F       		.sleb128 15
+ 3820 0938 0D       		.uleb128 0xd
+ 3821 0939 00000000 		.long	.LASF116
+ 3822 093d 10       		.sleb128 16
+ 3823 093e 0D       		.uleb128 0xd
+ 3824 093f 00000000 		.long	.LASF117
+ 3825 0943 11       		.sleb128 17
+ 3826 0944 0D       		.uleb128 0xd
+ 3827 0945 00000000 		.long	.LASF118
+ 3828 0949 12       		.sleb128 18
+ 3829 094a 0D       		.uleb128 0xd
+ 3830 094b 00000000 		.long	.LASF119
+ 3831 094f 13       		.sleb128 19
+ 3832 0950 0D       		.uleb128 0xd
+ 3833 0951 00000000 		.long	.LASF120
+ 3834 0955 14       		.sleb128 20
+ 3835 0956 00       		.byte	0x0
+ 3836 0957 1C       		.uleb128 0x1c
+ 3837 0958 00000000 		.long	.LASF122
+ 3838 095c 04       		.byte	0x4
+ 3839 095d 0F       		.byte	0xf
+ 3840 095e 77       		.byte	0x77
+ 3841 095f DE0A0000 		.long	0xade
+ 3842 0963 0D       		.uleb128 0xd
+ 3843 0964 00000000 		.long	.LASF123
+ 3844 0968 00       		.sleb128 0
+ 3845 0969 0D       		.uleb128 0xd
+ 3846 096a 00000000 		.long	.LASF124
+
GAS LISTING /tmp/ccXzRABk.s 			page 96
+
+
+ 3847 096e 01       		.sleb128 1
+ 3848 096f 0D       		.uleb128 0xd
+ 3849 0970 00000000 		.long	.LASF125
+ 3850 0974 02       		.sleb128 2
+ 3851 0975 0D       		.uleb128 0xd
+ 3852 0976 00000000 		.long	.LASF126
+ 3853 097a 03       		.sleb128 3
+ 3854 097b 0D       		.uleb128 0xd
+ 3855 097c 00000000 		.long	.LASF127
+ 3856 0980 04       		.sleb128 4
+ 3857 0981 0D       		.uleb128 0xd
+ 3858 0982 00000000 		.long	.LASF128
+ 3859 0986 05       		.sleb128 5
+ 3860 0987 0D       		.uleb128 0xd
+ 3861 0988 00000000 		.long	.LASF129
+ 3862 098c 06       		.sleb128 6
+ 3863 098d 0D       		.uleb128 0xd
+ 3864 098e 00000000 		.long	.LASF130
+ 3865 0992 07       		.sleb128 7
+ 3866 0993 0D       		.uleb128 0xd
+ 3867 0994 00000000 		.long	.LASF131
+ 3868 0998 08       		.sleb128 8
+ 3869 0999 0D       		.uleb128 0xd
+ 3870 099a 00000000 		.long	.LASF132
+ 3871 099e 09       		.sleb128 9
+ 3872 099f 0D       		.uleb128 0xd
+ 3873 09a0 00000000 		.long	.LASF133
+ 3874 09a4 0A       		.sleb128 10
+ 3875 09a5 0D       		.uleb128 0xd
+ 3876 09a6 00000000 		.long	.LASF134
+ 3877 09aa 0B       		.sleb128 11
+ 3878 09ab 0D       		.uleb128 0xd
+ 3879 09ac 00000000 		.long	.LASF135
+ 3880 09b0 0C       		.sleb128 12
+ 3881 09b1 0D       		.uleb128 0xd
+ 3882 09b2 00000000 		.long	.LASF136
+ 3883 09b6 0D       		.sleb128 13
+ 3884 09b7 0D       		.uleb128 0xd
+ 3885 09b8 00000000 		.long	.LASF137
+ 3886 09bc 0E       		.sleb128 14
+ 3887 09bd 0D       		.uleb128 0xd
+ 3888 09be 00000000 		.long	.LASF138
+ 3889 09c2 0F       		.sleb128 15
+ 3890 09c3 0D       		.uleb128 0xd
+ 3891 09c4 00000000 		.long	.LASF139
+ 3892 09c8 10       		.sleb128 16
+ 3893 09c9 0D       		.uleb128 0xd
+ 3894 09ca 00000000 		.long	.LASF140
+ 3895 09ce 11       		.sleb128 17
+ 3896 09cf 0D       		.uleb128 0xd
+ 3897 09d0 00000000 		.long	.LASF141
+ 3898 09d4 12       		.sleb128 18
+ 3899 09d5 0D       		.uleb128 0xd
+ 3900 09d6 00000000 		.long	.LASF142
+ 3901 09da 13       		.sleb128 19
+ 3902 09db 0D       		.uleb128 0xd
+ 3903 09dc 00000000 		.long	.LASF143
+
GAS LISTING /tmp/ccXzRABk.s 			page 97
+
+
+ 3904 09e0 14       		.sleb128 20
+ 3905 09e1 0D       		.uleb128 0xd
+ 3906 09e2 00000000 		.long	.LASF144
+ 3907 09e6 15       		.sleb128 21
+ 3908 09e7 0D       		.uleb128 0xd
+ 3909 09e8 00000000 		.long	.LASF145
+ 3910 09ec 16       		.sleb128 22
+ 3911 09ed 0D       		.uleb128 0xd
+ 3912 09ee 00000000 		.long	.LASF146
+ 3913 09f2 17       		.sleb128 23
+ 3914 09f3 0D       		.uleb128 0xd
+ 3915 09f4 00000000 		.long	.LASF147
+ 3916 09f8 18       		.sleb128 24
+ 3917 09f9 0D       		.uleb128 0xd
+ 3918 09fa 00000000 		.long	.LASF148
+ 3919 09fe 19       		.sleb128 25
+ 3920 09ff 0D       		.uleb128 0xd
+ 3921 0a00 00000000 		.long	.LASF149
+ 3922 0a04 1A       		.sleb128 26
+ 3923 0a05 0D       		.uleb128 0xd
+ 3924 0a06 00000000 		.long	.LASF150
+ 3925 0a0a 1B       		.sleb128 27
+ 3926 0a0b 0D       		.uleb128 0xd
+ 3927 0a0c 00000000 		.long	.LASF151
+ 3928 0a10 1C       		.sleb128 28
+ 3929 0a11 0D       		.uleb128 0xd
+ 3930 0a12 00000000 		.long	.LASF152
+ 3931 0a16 1D       		.sleb128 29
+ 3932 0a17 0D       		.uleb128 0xd
+ 3933 0a18 00000000 		.long	.LASF153
+ 3934 0a1c 1E       		.sleb128 30
+ 3935 0a1d 0D       		.uleb128 0xd
+ 3936 0a1e 00000000 		.long	.LASF154
+ 3937 0a22 1F       		.sleb128 31
+ 3938 0a23 0D       		.uleb128 0xd
+ 3939 0a24 00000000 		.long	.LASF155
+ 3940 0a28 20       		.sleb128 32
+ 3941 0a29 0D       		.uleb128 0xd
+ 3942 0a2a 00000000 		.long	.LASF156
+ 3943 0a2e 21       		.sleb128 33
+ 3944 0a2f 0D       		.uleb128 0xd
+ 3945 0a30 00000000 		.long	.LASF157
+ 3946 0a34 22       		.sleb128 34
+ 3947 0a35 0D       		.uleb128 0xd
+ 3948 0a36 00000000 		.long	.LASF158
+ 3949 0a3a 23       		.sleb128 35
+ 3950 0a3b 0D       		.uleb128 0xd
+ 3951 0a3c 00000000 		.long	.LASF159
+ 3952 0a40 24       		.sleb128 36
+ 3953 0a41 0D       		.uleb128 0xd
+ 3954 0a42 00000000 		.long	.LASF160
+ 3955 0a46 25       		.sleb128 37
+ 3956 0a47 0D       		.uleb128 0xd
+ 3957 0a48 00000000 		.long	.LASF161
+ 3958 0a4c 26       		.sleb128 38
+ 3959 0a4d 0D       		.uleb128 0xd
+ 3960 0a4e 00000000 		.long	.LASF162
+
GAS LISTING /tmp/ccXzRABk.s 			page 98
+
+
+ 3961 0a52 27       		.sleb128 39
+ 3962 0a53 0D       		.uleb128 0xd
+ 3963 0a54 00000000 		.long	.LASF163
+ 3964 0a58 28       		.sleb128 40
+ 3965 0a59 0D       		.uleb128 0xd
+ 3966 0a5a 00000000 		.long	.LASF164
+ 3967 0a5e 29       		.sleb128 41
+ 3968 0a5f 0D       		.uleb128 0xd
+ 3969 0a60 00000000 		.long	.LASF165
+ 3970 0a64 2A       		.sleb128 42
+ 3971 0a65 0D       		.uleb128 0xd
+ 3972 0a66 00000000 		.long	.LASF166
+ 3973 0a6a 2B       		.sleb128 43
+ 3974 0a6b 0D       		.uleb128 0xd
+ 3975 0a6c 00000000 		.long	.LASF167
+ 3976 0a70 2C       		.sleb128 44
+ 3977 0a71 0D       		.uleb128 0xd
+ 3978 0a72 00000000 		.long	.LASF168
+ 3979 0a76 2D       		.sleb128 45
+ 3980 0a77 0D       		.uleb128 0xd
+ 3981 0a78 00000000 		.long	.LASF169
+ 3982 0a7c 2E       		.sleb128 46
+ 3983 0a7d 0D       		.uleb128 0xd
+ 3984 0a7e 00000000 		.long	.LASF170
+ 3985 0a82 2F       		.sleb128 47
+ 3986 0a83 0D       		.uleb128 0xd
+ 3987 0a84 00000000 		.long	.LASF171
+ 3988 0a88 30       		.sleb128 48
+ 3989 0a89 0D       		.uleb128 0xd
+ 3990 0a8a 00000000 		.long	.LASF172
+ 3991 0a8e 31       		.sleb128 49
+ 3992 0a8f 0D       		.uleb128 0xd
+ 3993 0a90 00000000 		.long	.LASF173
+ 3994 0a94 32       		.sleb128 50
+ 3995 0a95 0D       		.uleb128 0xd
+ 3996 0a96 00000000 		.long	.LASF174
+ 3997 0a9a 33       		.sleb128 51
+ 3998 0a9b 0D       		.uleb128 0xd
+ 3999 0a9c 00000000 		.long	.LASF175
+ 4000 0aa0 34       		.sleb128 52
+ 4001 0aa1 0D       		.uleb128 0xd
+ 4002 0aa2 00000000 		.long	.LASF176
+ 4003 0aa6 35       		.sleb128 53
+ 4004 0aa7 0D       		.uleb128 0xd
+ 4005 0aa8 00000000 		.long	.LASF177
+ 4006 0aac 36       		.sleb128 54
+ 4007 0aad 0D       		.uleb128 0xd
+ 4008 0aae 00000000 		.long	.LASF178
+ 4009 0ab2 36       		.sleb128 54
+ 4010 0ab3 0D       		.uleb128 0xd
+ 4011 0ab4 00000000 		.long	.LASF179
+ 4012 0ab8 37       		.sleb128 55
+ 4013 0ab9 0D       		.uleb128 0xd
+ 4014 0aba 00000000 		.long	.LASF180
+ 4015 0abe 38       		.sleb128 56
+ 4016 0abf 0D       		.uleb128 0xd
+ 4017 0ac0 00000000 		.long	.LASF181
+
GAS LISTING /tmp/ccXzRABk.s 			page 99
+
+
+ 4018 0ac4 39       		.sleb128 57
+ 4019 0ac5 0D       		.uleb128 0xd
+ 4020 0ac6 00000000 		.long	.LASF182
+ 4021 0aca 3A       		.sleb128 58
+ 4022 0acb 0D       		.uleb128 0xd
+ 4023 0acc 00000000 		.long	.LASF183
+ 4024 0ad0 3B       		.sleb128 59
+ 4025 0ad1 0D       		.uleb128 0xd
+ 4026 0ad2 00000000 		.long	.LASF184
+ 4027 0ad6 3C       		.sleb128 60
+ 4028 0ad7 0D       		.uleb128 0xd
+ 4029 0ad8 00000000 		.long	.LASF185
+ 4030 0adc 3D       		.sleb128 61
+ 4031 0add 00       		.byte	0x0
+ 4032 0ade 1C       		.uleb128 0x1c
+ 4033 0adf 00000000 		.long	.LASF186
+ 4034 0ae3 04       		.byte	0x4
+ 4035 0ae4 0F       		.byte	0xf
+ 4036 0ae5 BD       		.byte	0xbd
+ 4037 0ae6 940C0000 		.long	0xc94
+ 4038 0aea 0D       		.uleb128 0xd
+ 4039 0aeb 00000000 		.long	.LASF187
+ 4040 0aef 00       		.sleb128 0
+ 4041 0af0 0D       		.uleb128 0xd
+ 4042 0af1 00000000 		.long	.LASF188
+ 4043 0af5 01       		.sleb128 1
+ 4044 0af6 0D       		.uleb128 0xd
+ 4045 0af7 00000000 		.long	.LASF189
+ 4046 0afb 02       		.sleb128 2
+ 4047 0afc 0D       		.uleb128 0xd
+ 4048 0afd 00000000 		.long	.LASF190
+ 4049 0b01 03       		.sleb128 3
+ 4050 0b02 0D       		.uleb128 0xd
+ 4051 0b03 00000000 		.long	.LASF191
+ 4052 0b07 04       		.sleb128 4
+ 4053 0b08 0D       		.uleb128 0xd
+ 4054 0b09 00000000 		.long	.LASF192
+ 4055 0b0d 05       		.sleb128 5
+ 4056 0b0e 0D       		.uleb128 0xd
+ 4057 0b0f 00000000 		.long	.LASF193
+ 4058 0b13 06       		.sleb128 6
+ 4059 0b14 0D       		.uleb128 0xd
+ 4060 0b15 00000000 		.long	.LASF194
+ 4061 0b19 07       		.sleb128 7
+ 4062 0b1a 0D       		.uleb128 0xd
+ 4063 0b1b 00000000 		.long	.LASF195
+ 4064 0b1f 08       		.sleb128 8
+ 4065 0b20 0D       		.uleb128 0xd
+ 4066 0b21 00000000 		.long	.LASF196
+ 4067 0b25 09       		.sleb128 9
+ 4068 0b26 0D       		.uleb128 0xd
+ 4069 0b27 00000000 		.long	.LASF197
+ 4070 0b2b 0A       		.sleb128 10
+ 4071 0b2c 0D       		.uleb128 0xd
+ 4072 0b2d 00000000 		.long	.LASF198
+ 4073 0b31 0B       		.sleb128 11
+ 4074 0b32 0D       		.uleb128 0xd
+
GAS LISTING /tmp/ccXzRABk.s 			page 100
+
+
+ 4075 0b33 00000000 		.long	.LASF199
+ 4076 0b37 0C       		.sleb128 12
+ 4077 0b38 0D       		.uleb128 0xd
+ 4078 0b39 00000000 		.long	.LASF200
+ 4079 0b3d 0D       		.sleb128 13
+ 4080 0b3e 0D       		.uleb128 0xd
+ 4081 0b3f 00000000 		.long	.LASF201
+ 4082 0b43 0E       		.sleb128 14
+ 4083 0b44 0D       		.uleb128 0xd
+ 4084 0b45 00000000 		.long	.LASF202
+ 4085 0b49 0F       		.sleb128 15
+ 4086 0b4a 0D       		.uleb128 0xd
+ 4087 0b4b 00000000 		.long	.LASF203
+ 4088 0b4f 10       		.sleb128 16
+ 4089 0b50 0D       		.uleb128 0xd
+ 4090 0b51 00000000 		.long	.LASF204
+ 4091 0b55 11       		.sleb128 17
+ 4092 0b56 0D       		.uleb128 0xd
+ 4093 0b57 00000000 		.long	.LASF205
+ 4094 0b5b 12       		.sleb128 18
+ 4095 0b5c 0D       		.uleb128 0xd
+ 4096 0b5d 00000000 		.long	.LASF206
+ 4097 0b61 13       		.sleb128 19
+ 4098 0b62 0D       		.uleb128 0xd
+ 4099 0b63 00000000 		.long	.LASF207
+ 4100 0b67 14       		.sleb128 20
+ 4101 0b68 0D       		.uleb128 0xd
+ 4102 0b69 00000000 		.long	.LASF208
+ 4103 0b6d 15       		.sleb128 21
+ 4104 0b6e 0D       		.uleb128 0xd
+ 4105 0b6f 00000000 		.long	.LASF209
+ 4106 0b73 16       		.sleb128 22
+ 4107 0b74 0D       		.uleb128 0xd
+ 4108 0b75 00000000 		.long	.LASF210
+ 4109 0b79 17       		.sleb128 23
+ 4110 0b7a 0D       		.uleb128 0xd
+ 4111 0b7b 00000000 		.long	.LASF211
+ 4112 0b7f 18       		.sleb128 24
+ 4113 0b80 0D       		.uleb128 0xd
+ 4114 0b81 00000000 		.long	.LASF212
+ 4115 0b85 19       		.sleb128 25
+ 4116 0b86 0D       		.uleb128 0xd
+ 4117 0b87 00000000 		.long	.LASF213
+ 4118 0b8b 1A       		.sleb128 26
+ 4119 0b8c 0D       		.uleb128 0xd
+ 4120 0b8d 00000000 		.long	.LASF214
+ 4121 0b91 1B       		.sleb128 27
+ 4122 0b92 0D       		.uleb128 0xd
+ 4123 0b93 00000000 		.long	.LASF215
+ 4124 0b97 1C       		.sleb128 28
+ 4125 0b98 0D       		.uleb128 0xd
+ 4126 0b99 00000000 		.long	.LASF216
+ 4127 0b9d 1D       		.sleb128 29
+ 4128 0b9e 0D       		.uleb128 0xd
+ 4129 0b9f 00000000 		.long	.LASF217
+ 4130 0ba3 1E       		.sleb128 30
+ 4131 0ba4 0D       		.uleb128 0xd
+
GAS LISTING /tmp/ccXzRABk.s 			page 101
+
+
+ 4132 0ba5 00000000 		.long	.LASF218
+ 4133 0ba9 1F       		.sleb128 31
+ 4134 0baa 0D       		.uleb128 0xd
+ 4135 0bab 00000000 		.long	.LASF219
+ 4136 0baf 20       		.sleb128 32
+ 4137 0bb0 0D       		.uleb128 0xd
+ 4138 0bb1 00000000 		.long	.LASF220
+ 4139 0bb5 21       		.sleb128 33
+ 4140 0bb6 0D       		.uleb128 0xd
+ 4141 0bb7 00000000 		.long	.LASF221
+ 4142 0bbb 22       		.sleb128 34
+ 4143 0bbc 0D       		.uleb128 0xd
+ 4144 0bbd 00000000 		.long	.LASF222
+ 4145 0bc1 23       		.sleb128 35
+ 4146 0bc2 0D       		.uleb128 0xd
+ 4147 0bc3 00000000 		.long	.LASF223
+ 4148 0bc7 24       		.sleb128 36
+ 4149 0bc8 0D       		.uleb128 0xd
+ 4150 0bc9 00000000 		.long	.LASF224
+ 4151 0bcd 25       		.sleb128 37
+ 4152 0bce 0D       		.uleb128 0xd
+ 4153 0bcf 00000000 		.long	.LASF225
+ 4154 0bd3 26       		.sleb128 38
+ 4155 0bd4 0D       		.uleb128 0xd
+ 4156 0bd5 00000000 		.long	.LASF226
+ 4157 0bd9 27       		.sleb128 39
+ 4158 0bda 0D       		.uleb128 0xd
+ 4159 0bdb 00000000 		.long	.LASF227
+ 4160 0bdf 28       		.sleb128 40
+ 4161 0be0 0D       		.uleb128 0xd
+ 4162 0be1 00000000 		.long	.LASF228
+ 4163 0be5 29       		.sleb128 41
+ 4164 0be6 0D       		.uleb128 0xd
+ 4165 0be7 00000000 		.long	.LASF229
+ 4166 0beb 2A       		.sleb128 42
+ 4167 0bec 0D       		.uleb128 0xd
+ 4168 0bed 00000000 		.long	.LASF230
+ 4169 0bf1 2B       		.sleb128 43
+ 4170 0bf2 0D       		.uleb128 0xd
+ 4171 0bf3 00000000 		.long	.LASF231
+ 4172 0bf7 2C       		.sleb128 44
+ 4173 0bf8 0D       		.uleb128 0xd
+ 4174 0bf9 00000000 		.long	.LASF232
+ 4175 0bfd 2D       		.sleb128 45
+ 4176 0bfe 0D       		.uleb128 0xd
+ 4177 0bff 00000000 		.long	.LASF233
+ 4178 0c03 2E       		.sleb128 46
+ 4179 0c04 0D       		.uleb128 0xd
+ 4180 0c05 00000000 		.long	.LASF234
+ 4181 0c09 2F       		.sleb128 47
+ 4182 0c0a 0D       		.uleb128 0xd
+ 4183 0c0b 00000000 		.long	.LASF235
+ 4184 0c0f 30       		.sleb128 48
+ 4185 0c10 0D       		.uleb128 0xd
+ 4186 0c11 00000000 		.long	.LASF236
+ 4187 0c15 31       		.sleb128 49
+ 4188 0c16 0D       		.uleb128 0xd
+
GAS LISTING /tmp/ccXzRABk.s 			page 102
+
+
+ 4189 0c17 00000000 		.long	.LASF237
+ 4190 0c1b 32       		.sleb128 50
+ 4191 0c1c 0D       		.uleb128 0xd
+ 4192 0c1d 00000000 		.long	.LASF238
+ 4193 0c21 33       		.sleb128 51
+ 4194 0c22 0D       		.uleb128 0xd
+ 4195 0c23 00000000 		.long	.LASF239
+ 4196 0c27 34       		.sleb128 52
+ 4197 0c28 0D       		.uleb128 0xd
+ 4198 0c29 00000000 		.long	.LASF240
+ 4199 0c2d 35       		.sleb128 53
+ 4200 0c2e 0D       		.uleb128 0xd
+ 4201 0c2f 00000000 		.long	.LASF241
+ 4202 0c33 36       		.sleb128 54
+ 4203 0c34 0D       		.uleb128 0xd
+ 4204 0c35 00000000 		.long	.LASF242
+ 4205 0c39 37       		.sleb128 55
+ 4206 0c3a 0D       		.uleb128 0xd
+ 4207 0c3b 00000000 		.long	.LASF243
+ 4208 0c3f 38       		.sleb128 56
+ 4209 0c40 0D       		.uleb128 0xd
+ 4210 0c41 00000000 		.long	.LASF244
+ 4211 0c45 39       		.sleb128 57
+ 4212 0c46 0D       		.uleb128 0xd
+ 4213 0c47 00000000 		.long	.LASF245
+ 4214 0c4b 3A       		.sleb128 58
+ 4215 0c4c 0D       		.uleb128 0xd
+ 4216 0c4d 00000000 		.long	.LASF246
+ 4217 0c51 3A       		.sleb128 58
+ 4218 0c52 0D       		.uleb128 0xd
+ 4219 0c53 00000000 		.long	.LASF247
+ 4220 0c57 3B       		.sleb128 59
+ 4221 0c58 0D       		.uleb128 0xd
+ 4222 0c59 00000000 		.long	.LASF248
+ 4223 0c5d 3C       		.sleb128 60
+ 4224 0c5e 0D       		.uleb128 0xd
+ 4225 0c5f 00000000 		.long	.LASF249
+ 4226 0c63 3D       		.sleb128 61
+ 4227 0c64 0D       		.uleb128 0xd
+ 4228 0c65 00000000 		.long	.LASF250
+ 4229 0c69 3E       		.sleb128 62
+ 4230 0c6a 0D       		.uleb128 0xd
+ 4231 0c6b 00000000 		.long	.LASF251
+ 4232 0c6f 3F       		.sleb128 63
+ 4233 0c70 0D       		.uleb128 0xd
+ 4234 0c71 00000000 		.long	.LASF252
+ 4235 0c75 C000     		.sleb128 64
+ 4236 0c77 0D       		.uleb128 0xd
+ 4237 0c78 00000000 		.long	.LASF253
+ 4238 0c7c C100     		.sleb128 65
+ 4239 0c7e 0D       		.uleb128 0xd
+ 4240 0c7f 00000000 		.long	.LASF254
+ 4241 0c83 C200     		.sleb128 66
+ 4242 0c85 0D       		.uleb128 0xd
+ 4243 0c86 00000000 		.long	.LASF255
+ 4244 0c8a C300     		.sleb128 67
+ 4245 0c8c 0D       		.uleb128 0xd
+
GAS LISTING /tmp/ccXzRABk.s 			page 103
+
+
+ 4246 0c8d 00000000 		.long	.LASF256
+ 4247 0c91 C400     		.sleb128 68
+ 4248 0c93 00       		.byte	0x0
+ 4249 0c94 1D       		.uleb128 0x1d
+ 4250 0c95 00000000 		.long	.LASF257
+ 4251 0c99 04       		.byte	0x4
+ 4252 0c9a 0F       		.byte	0xf
+ 4253 0c9b 0A01     		.value	0x10a
+ 4254 0c9d 930D0000 		.long	0xd93
+ 4255 0ca1 0D       		.uleb128 0xd
+ 4256 0ca2 00000000 		.long	.LASF258
+ 4257 0ca6 00       		.sleb128 0
+ 4258 0ca7 0D       		.uleb128 0xd
+ 4259 0ca8 00000000 		.long	.LASF259
+ 4260 0cac 3D       		.sleb128 61
+ 4261 0cad 0D       		.uleb128 0xd
+ 4262 0cae 00000000 		.long	.LASF260
+ 4263 0cb2 3E       		.sleb128 62
+ 4264 0cb3 0D       		.uleb128 0xd
+ 4265 0cb4 00000000 		.long	.LASF261
+ 4266 0cb8 3F       		.sleb128 63
+ 4267 0cb9 0D       		.uleb128 0xd
+ 4268 0cba 00000000 		.long	.LASF262
+ 4269 0cbe C000     		.sleb128 64
+ 4270 0cc0 0D       		.uleb128 0xd
+ 4271 0cc1 00000000 		.long	.LASF263
+ 4272 0cc5 C100     		.sleb128 65
+ 4273 0cc7 0D       		.uleb128 0xd
+ 4274 0cc8 00000000 		.long	.LASF264
+ 4275 0ccc C200     		.sleb128 66
+ 4276 0cce 0D       		.uleb128 0xd
+ 4277 0ccf 00000000 		.long	.LASF265
+ 4278 0cd3 C300     		.sleb128 67
+ 4279 0cd5 0D       		.uleb128 0xd
+ 4280 0cd6 00000000 		.long	.LASF266
+ 4281 0cda C400     		.sleb128 68
+ 4282 0cdc 0D       		.uleb128 0xd
+ 4283 0cdd 00000000 		.long	.LASF267
+ 4284 0ce1 C500     		.sleb128 69
+ 4285 0ce3 0D       		.uleb128 0xd
+ 4286 0ce4 00000000 		.long	.LASF268
+ 4287 0ce8 C600     		.sleb128 70
+ 4288 0cea 0D       		.uleb128 0xd
+ 4289 0ceb 00000000 		.long	.LASF269
+ 4290 0cef C700     		.sleb128 71
+ 4291 0cf1 0D       		.uleb128 0xd
+ 4292 0cf2 00000000 		.long	.LASF270
+ 4293 0cf6 C800     		.sleb128 72
+ 4294 0cf8 0D       		.uleb128 0xd
+ 4295 0cf9 00000000 		.long	.LASF271
+ 4296 0cfd C900     		.sleb128 73
+ 4297 0cff 0D       		.uleb128 0xd
+ 4298 0d00 00000000 		.long	.LASF272
+ 4299 0d04 CA00     		.sleb128 74
+ 4300 0d06 0D       		.uleb128 0xd
+ 4301 0d07 00000000 		.long	.LASF273
+ 4302 0d0b CB00     		.sleb128 75
+
GAS LISTING /tmp/ccXzRABk.s 			page 104
+
+
+ 4303 0d0d 0D       		.uleb128 0xd
+ 4304 0d0e 00000000 		.long	.LASF274
+ 4305 0d12 CC00     		.sleb128 76
+ 4306 0d14 0D       		.uleb128 0xd
+ 4307 0d15 00000000 		.long	.LASF275
+ 4308 0d19 CD00     		.sleb128 77
+ 4309 0d1b 0D       		.uleb128 0xd
+ 4310 0d1c 00000000 		.long	.LASF276
+ 4311 0d20 CE00     		.sleb128 78
+ 4312 0d22 0D       		.uleb128 0xd
+ 4313 0d23 00000000 		.long	.LASF277
+ 4314 0d27 CF00     		.sleb128 79
+ 4315 0d29 0D       		.uleb128 0xd
+ 4316 0d2a 00000000 		.long	.LASF278
+ 4317 0d2e D000     		.sleb128 80
+ 4318 0d30 0D       		.uleb128 0xd
+ 4319 0d31 00000000 		.long	.LASF279
+ 4320 0d35 D100     		.sleb128 81
+ 4321 0d37 0D       		.uleb128 0xd
+ 4322 0d38 00000000 		.long	.LASF280
+ 4323 0d3c D100     		.sleb128 81
+ 4324 0d3e 0D       		.uleb128 0xd
+ 4325 0d3f 00000000 		.long	.LASF281
+ 4326 0d43 D200     		.sleb128 82
+ 4327 0d45 0D       		.uleb128 0xd
+ 4328 0d46 00000000 		.long	.LASF282
+ 4329 0d4a D300     		.sleb128 83
+ 4330 0d4c 0D       		.uleb128 0xd
+ 4331 0d4d 00000000 		.long	.LASF283
+ 4332 0d51 D400     		.sleb128 84
+ 4333 0d53 0D       		.uleb128 0xd
+ 4334 0d54 00000000 		.long	.LASF284
+ 4335 0d58 D500     		.sleb128 85
+ 4336 0d5a 0D       		.uleb128 0xd
+ 4337 0d5b 00000000 		.long	.LASF285
+ 4338 0d5f D600     		.sleb128 86
+ 4339 0d61 0D       		.uleb128 0xd
+ 4340 0d62 00000000 		.long	.LASF286
+ 4341 0d66 D700     		.sleb128 87
+ 4342 0d68 0D       		.uleb128 0xd
+ 4343 0d69 00000000 		.long	.LASF287
+ 4344 0d6d D800     		.sleb128 88
+ 4345 0d6f 0D       		.uleb128 0xd
+ 4346 0d70 00000000 		.long	.LASF288
+ 4347 0d74 D900     		.sleb128 89
+ 4348 0d76 0D       		.uleb128 0xd
+ 4349 0d77 00000000 		.long	.LASF289
+ 4350 0d7b DA00     		.sleb128 90
+ 4351 0d7d 0D       		.uleb128 0xd
+ 4352 0d7e 00000000 		.long	.LASF290
+ 4353 0d82 DB00     		.sleb128 91
+ 4354 0d84 0D       		.uleb128 0xd
+ 4355 0d85 00000000 		.long	.LASF291
+ 4356 0d89 DC00     		.sleb128 92
+ 4357 0d8b 0D       		.uleb128 0xd
+ 4358 0d8c 00000000 		.long	.LASF292
+ 4359 0d90 DD00     		.sleb128 93
+
GAS LISTING /tmp/ccXzRABk.s 			page 105
+
+
+ 4360 0d92 00       		.byte	0x0
+ 4361 0d93 1D       		.uleb128 0x1d
+ 4362 0d94 00000000 		.long	.LASF293
+ 4363 0d98 04       		.byte	0x4
+ 4364 0d99 0F       		.byte	0xf
+ 4365 0d9a 3401     		.value	0x134
+ 4366 0d9c D30E0000 		.long	0xed3
+ 4367 0da0 0D       		.uleb128 0xd
+ 4368 0da1 00000000 		.long	.LASF294
+ 4369 0da5 00       		.sleb128 0
+ 4370 0da6 0D       		.uleb128 0xd
+ 4371 0da7 00000000 		.long	.LASF295
+ 4372 0dab 01       		.sleb128 1
+ 4373 0dac 0D       		.uleb128 0xd
+ 4374 0dad 00000000 		.long	.LASF296
+ 4375 0db1 02       		.sleb128 2
+ 4376 0db2 0D       		.uleb128 0xd
+ 4377 0db3 00000000 		.long	.LASF297
+ 4378 0db7 03       		.sleb128 3
+ 4379 0db8 0D       		.uleb128 0xd
+ 4380 0db9 00000000 		.long	.LASF298
+ 4381 0dbd 04       		.sleb128 4
+ 4382 0dbe 0D       		.uleb128 0xd
+ 4383 0dbf 00000000 		.long	.LASF299
+ 4384 0dc3 05       		.sleb128 5
+ 4385 0dc4 0D       		.uleb128 0xd
+ 4386 0dc5 00000000 		.long	.LASF300
+ 4387 0dc9 06       		.sleb128 6
+ 4388 0dca 0D       		.uleb128 0xd
+ 4389 0dcb 00000000 		.long	.LASF301
+ 4390 0dcf 07       		.sleb128 7
+ 4391 0dd0 0D       		.uleb128 0xd
+ 4392 0dd1 00000000 		.long	.LASF302
+ 4393 0dd5 08       		.sleb128 8
+ 4394 0dd6 0D       		.uleb128 0xd
+ 4395 0dd7 00000000 		.long	.LASF303
+ 4396 0ddb 09       		.sleb128 9
+ 4397 0ddc 0D       		.uleb128 0xd
+ 4398 0ddd 00000000 		.long	.LASF304
+ 4399 0de1 0A       		.sleb128 10
+ 4400 0de2 0D       		.uleb128 0xd
+ 4401 0de3 00000000 		.long	.LASF305
+ 4402 0de7 0B       		.sleb128 11
+ 4403 0de8 0D       		.uleb128 0xd
+ 4404 0de9 00000000 		.long	.LASF306
+ 4405 0ded 0C       		.sleb128 12
+ 4406 0dee 0D       		.uleb128 0xd
+ 4407 0def 00000000 		.long	.LASF307
+ 4408 0df3 0D       		.sleb128 13
+ 4409 0df4 0D       		.uleb128 0xd
+ 4410 0df5 00000000 		.long	.LASF308
+ 4411 0df9 0E       		.sleb128 14
+ 4412 0dfa 0D       		.uleb128 0xd
+ 4413 0dfb 00000000 		.long	.LASF309
+ 4414 0dff 0F       		.sleb128 15
+ 4415 0e00 0D       		.uleb128 0xd
+ 4416 0e01 00000000 		.long	.LASF310
+
GAS LISTING /tmp/ccXzRABk.s 			page 106
+
+
+ 4417 0e05 10       		.sleb128 16
+ 4418 0e06 0D       		.uleb128 0xd
+ 4419 0e07 00000000 		.long	.LASF311
+ 4420 0e0b 11       		.sleb128 17
+ 4421 0e0c 0D       		.uleb128 0xd
+ 4422 0e0d 00000000 		.long	.LASF312
+ 4423 0e11 12       		.sleb128 18
+ 4424 0e12 0D       		.uleb128 0xd
+ 4425 0e13 00000000 		.long	.LASF313
+ 4426 0e17 13       		.sleb128 19
+ 4427 0e18 0D       		.uleb128 0xd
+ 4428 0e19 00000000 		.long	.LASF314
+ 4429 0e1d 14       		.sleb128 20
+ 4430 0e1e 0D       		.uleb128 0xd
+ 4431 0e1f 00000000 		.long	.LASF315
+ 4432 0e23 15       		.sleb128 21
+ 4433 0e24 0D       		.uleb128 0xd
+ 4434 0e25 00000000 		.long	.LASF316
+ 4435 0e29 16       		.sleb128 22
+ 4436 0e2a 0D       		.uleb128 0xd
+ 4437 0e2b 00000000 		.long	.LASF317
+ 4438 0e2f 17       		.sleb128 23
+ 4439 0e30 0D       		.uleb128 0xd
+ 4440 0e31 00000000 		.long	.LASF318
+ 4441 0e35 18       		.sleb128 24
+ 4442 0e36 0D       		.uleb128 0xd
+ 4443 0e37 00000000 		.long	.LASF319
+ 4444 0e3b 19       		.sleb128 25
+ 4445 0e3c 0D       		.uleb128 0xd
+ 4446 0e3d 00000000 		.long	.LASF320
+ 4447 0e41 1A       		.sleb128 26
+ 4448 0e42 0D       		.uleb128 0xd
+ 4449 0e43 00000000 		.long	.LASF321
+ 4450 0e47 1B       		.sleb128 27
+ 4451 0e48 0D       		.uleb128 0xd
+ 4452 0e49 00000000 		.long	.LASF322
+ 4453 0e4d 1C       		.sleb128 28
+ 4454 0e4e 0D       		.uleb128 0xd
+ 4455 0e4f 00000000 		.long	.LASF323
+ 4456 0e53 1D       		.sleb128 29
+ 4457 0e54 0D       		.uleb128 0xd
+ 4458 0e55 00000000 		.long	.LASF324
+ 4459 0e59 1E       		.sleb128 30
+ 4460 0e5a 0D       		.uleb128 0xd
+ 4461 0e5b 00000000 		.long	.LASF325
+ 4462 0e5f 1F       		.sleb128 31
+ 4463 0e60 0D       		.uleb128 0xd
+ 4464 0e61 00000000 		.long	.LASF326
+ 4465 0e65 20       		.sleb128 32
+ 4466 0e66 0D       		.uleb128 0xd
+ 4467 0e67 00000000 		.long	.LASF327
+ 4468 0e6b 21       		.sleb128 33
+ 4469 0e6c 0D       		.uleb128 0xd
+ 4470 0e6d 00000000 		.long	.LASF328
+ 4471 0e71 22       		.sleb128 34
+ 4472 0e72 0D       		.uleb128 0xd
+ 4473 0e73 00000000 		.long	.LASF329
+
GAS LISTING /tmp/ccXzRABk.s 			page 107
+
+
+ 4474 0e77 23       		.sleb128 35
+ 4475 0e78 0D       		.uleb128 0xd
+ 4476 0e79 00000000 		.long	.LASF330
+ 4477 0e7d 24       		.sleb128 36
+ 4478 0e7e 0D       		.uleb128 0xd
+ 4479 0e7f 00000000 		.long	.LASF331
+ 4480 0e83 25       		.sleb128 37
+ 4481 0e84 0D       		.uleb128 0xd
+ 4482 0e85 00000000 		.long	.LASF332
+ 4483 0e89 26       		.sleb128 38
+ 4484 0e8a 0D       		.uleb128 0xd
+ 4485 0e8b 00000000 		.long	.LASF333
+ 4486 0e8f 27       		.sleb128 39
+ 4487 0e90 0D       		.uleb128 0xd
+ 4488 0e91 00000000 		.long	.LASF334
+ 4489 0e95 28       		.sleb128 40
+ 4490 0e96 0D       		.uleb128 0xd
+ 4491 0e97 00000000 		.long	.LASF335
+ 4492 0e9b 29       		.sleb128 41
+ 4493 0e9c 0D       		.uleb128 0xd
+ 4494 0e9d 00000000 		.long	.LASF336
+ 4495 0ea1 29       		.sleb128 41
+ 4496 0ea2 0D       		.uleb128 0xd
+ 4497 0ea3 00000000 		.long	.LASF337
+ 4498 0ea7 2A       		.sleb128 42
+ 4499 0ea8 0D       		.uleb128 0xd
+ 4500 0ea9 00000000 		.long	.LASF338
+ 4501 0ead 2B       		.sleb128 43
+ 4502 0eae 0D       		.uleb128 0xd
+ 4503 0eaf 00000000 		.long	.LASF339
+ 4504 0eb3 2C       		.sleb128 44
+ 4505 0eb4 0D       		.uleb128 0xd
+ 4506 0eb5 00000000 		.long	.LASF340
+ 4507 0eb9 2D       		.sleb128 45
+ 4508 0eba 0D       		.uleb128 0xd
+ 4509 0ebb 00000000 		.long	.LASF341
+ 4510 0ebf 2E       		.sleb128 46
+ 4511 0ec0 0D       		.uleb128 0xd
+ 4512 0ec1 00000000 		.long	.LASF342
+ 4513 0ec5 2F       		.sleb128 47
+ 4514 0ec6 0D       		.uleb128 0xd
+ 4515 0ec7 00000000 		.long	.LASF343
+ 4516 0ecb 30       		.sleb128 48
+ 4517 0ecc 0D       		.uleb128 0xd
+ 4518 0ecd 00000000 		.long	.LASF344
+ 4519 0ed1 31       		.sleb128 49
+ 4520 0ed2 00       		.byte	0x0
+ 4521 0ed3 1E       		.uleb128 0x1e
+ 4522 0ed4 00000000 		.long	.LASF347
+ 4523 0ed8 01       		.byte	0x1
+ 4524 0ed9 4B       		.byte	0x4b
+ 4525 0eda 01       		.byte	0x1
+ 4526 0edb 3D050000 		.long	0x53d
+ 4527 0edf 00000000 		.quad	.LFB590
+ 4527      00000000 
+ 4528 0ee7 00000000 		.quad	.LFE590
+ 4528      00000000 
+
GAS LISTING /tmp/ccXzRABk.s 			page 108
+
+
+ 4529 0eef 00000000 		.long	.LLST0
+ 4530 0ef3 130F0000 		.long	0xf13
+ 4531 0ef7 1F       		.uleb128 0x1f
+ 4532 0ef8 00000000 		.long	.LASF345
+ 4533 0efc 01       		.byte	0x1
+ 4534 0efd 4B       		.byte	0x4b
+ 4535 0efe 1F040000 		.long	0x41f
+ 4536 0f02 02       		.byte	0x2
+ 4537 0f03 91       		.byte	0x91
+ 4538 0f04 68       		.sleb128 -24
+ 4539 0f05 20       		.uleb128 0x20
+ 4540 0f06 637600   		.string	"cv"
+ 4541 0f09 01       		.byte	0x1
+ 4542 0f0a 4E       		.byte	0x4e
+ 4543 0f0b 3D050000 		.long	0x53d
+ 4544 0f0f 02       		.byte	0x2
+ 4545 0f10 76       		.byte	0x76
+ 4546 0f11 60       		.sleb128 -32
+ 4547 0f12 00       		.byte	0x0
+ 4548 0f13 21       		.uleb128 0x21
+ 4549 0f14 00000000 		.long	.LASF395
+ 4550 0f18 01       		.byte	0x1
+ 4551 0f19 62       		.byte	0x62
+ 4552 0f1a 01       		.byte	0x1
+ 4553 0f1b 00000000 		.quad	.LFB591
+ 4553      00000000 
+ 4554 0f23 00000000 		.quad	.LFE591
+ 4554      00000000 
+ 4555 0f2b 00000000 		.long	.LLST1
+ 4556 0f2f 5D0F0000 		.long	0xf5d
+ 4557 0f33 22       		.uleb128 0x22
+ 4558 0f34 637600   		.string	"cv"
+ 4559 0f37 01       		.byte	0x1
+ 4560 0f38 62       		.byte	0x62
+ 4561 0f39 5D0F0000 		.long	0xf5d
+ 4562 0f3d 02       		.byte	0x2
+ 4563 0f3e 91       		.byte	0x91
+ 4564 0f3f 60       		.sleb128 -32
+ 4565 0f40 1F       		.uleb128 0x1f
+ 4566 0f41 00000000 		.long	.LASF346
+ 4567 0f45 01       		.byte	0x1
+ 4568 0f46 62       		.byte	0x62
+ 4569 0f47 B4000000 		.long	0xb4
+ 4570 0f4b 02       		.byte	0x2
+ 4571 0f4c 91       		.byte	0x91
+ 4572 0f4d 58       		.sleb128 -40
+ 4573 0f4e 20       		.uleb128 0x20
+ 4574 0f4f 72637600 		.string	"rcv"
+ 4575 0f53 01       		.byte	0x1
+ 4576 0f54 65       		.byte	0x65
+ 4577 0f55 3D050000 		.long	0x53d
+ 4578 0f59 02       		.byte	0x2
+ 4579 0f5a 76       		.byte	0x76
+ 4580 0f5b 50       		.sleb128 -48
+ 4581 0f5c 00       		.byte	0x0
+ 4582 0f5d 0B       		.uleb128 0xb
+ 4583 0f5e 3D050000 		.long	0x53d
+
GAS LISTING /tmp/ccXzRABk.s 			page 109
+
+
+ 4584 0f62 1E       		.uleb128 0x1e
+ 4585 0f63 00000000 		.long	.LASF348
+ 4586 0f67 01       		.byte	0x1
+ 4587 0f68 71       		.byte	0x71
+ 4588 0f69 01       		.byte	0x1
+ 4589 0f6a 7B000000 		.long	0x7b
+ 4590 0f6e 00000000 		.quad	.LFB592
+ 4590      00000000 
+ 4591 0f76 00000000 		.quad	.LFE592
+ 4591      00000000 
+ 4592 0f7e 00000000 		.long	.LLST2
+ 4593 0f82 A20F0000 		.long	0xfa2
+ 4594 0f86 1F       		.uleb128 0x1f
+ 4595 0f87 00000000 		.long	.LASF349
+ 4596 0f8b 01       		.byte	0x1
+ 4597 0f8c 71       		.byte	0x71
+ 4598 0f8d DE030000 		.long	0x3de
+ 4599 0f91 02       		.byte	0x2
+ 4600 0f92 91       		.byte	0x91
+ 4601 0f93 58       		.sleb128 -40
+ 4602 0f94 20       		.uleb128 0x20
+ 4603 0f95 726300   		.string	"rc"
+ 4604 0f98 01       		.byte	0x1
+ 4605 0f99 73       		.byte	0x73
+ 4606 0f9a 7B000000 		.long	0x7b
+ 4607 0f9e 02       		.byte	0x2
+ 4608 0f9f 91       		.byte	0x91
+ 4609 0fa0 6C       		.sleb128 -20
+ 4610 0fa1 00       		.byte	0x0
+ 4611 0fa2 1E       		.uleb128 0x1e
+ 4612 0fa3 00000000 		.long	.LASF350
+ 4613 0fa7 01       		.byte	0x1
+ 4614 0fa8 7E       		.byte	0x7e
+ 4615 0fa9 01       		.byte	0x1
+ 4616 0faa 7B000000 		.long	0x7b
+ 4617 0fae 00000000 		.quad	.LFB593
+ 4617      00000000 
+ 4618 0fb6 00000000 		.quad	.LFE593
+ 4618      00000000 
+ 4619 0fbe 00000000 		.long	.LLST3
+ 4620 0fc2 27100000 		.long	0x1027
+ 4621 0fc6 1F       		.uleb128 0x1f
+ 4622 0fc7 00000000 		.long	.LASF349
+ 4623 0fcb 01       		.byte	0x1
+ 4624 0fcc 7E       		.byte	0x7e
+ 4625 0fcd DE030000 		.long	0x3de
+ 4626 0fd1 02       		.byte	0x2
+ 4627 0fd2 91       		.byte	0x91
+ 4628 0fd3 48       		.sleb128 -56
+ 4629 0fd4 1F       		.uleb128 0x1f
+ 4630 0fd5 00000000 		.long	.LASF351
+ 4631 0fd9 01       		.byte	0x1
+ 4632 0fda 7F       		.byte	0x7f
+ 4633 0fdb B6000000 		.long	0xb6
+ 4634 0fdf 02       		.byte	0x2
+ 4635 0fe0 91       		.byte	0x91
+ 4636 0fe1 40       		.sleb128 -64
+
GAS LISTING /tmp/ccXzRABk.s 			page 110
+
+
+ 4637 0fe2 1F       		.uleb128 0x1f
+ 4638 0fe3 00000000 		.long	.LASF352
+ 4639 0fe7 01       		.byte	0x1
+ 4640 0fe8 80       		.byte	0x80
+ 4641 0fe9 62000000 		.long	0x62
+ 4642 0fed 03       		.byte	0x3
+ 4643 0fee 91       		.byte	0x91
+ 4644 0fef BC7F     		.sleb128 -68
+ 4645 0ff1 20       		.uleb128 0x20
+ 4646 0ff2 726300   		.string	"rc"
+ 4647 0ff5 01       		.byte	0x1
+ 4648 0ff6 82       		.byte	0x82
+ 4649 0ff7 7B000000 		.long	0x7b
+ 4650 0ffb 02       		.byte	0x2
+ 4651 0ffc 91       		.byte	0x91
+ 4652 0ffd 5C       		.sleb128 -36
+ 4653 0ffe 23       		.uleb128 0x23
+ 4654 0fff 00000000 		.long	.LASF353
+ 4655 1003 37100000 		.long	0x1037
+ 4656 1007 01       		.byte	0x1
+ 4657 1008 09       		.byte	0x9
+ 4658 1009 03       		.byte	0x3
+ 4659 100a 00000000 		.quad	__PRETTY_FUNCTION__.7218
+ 4659      00000000 
+ 4660 1012 23       		.uleb128 0x23
+ 4661 1013 00000000 		.long	.LASF354
+ 4662 1017 3C100000 		.long	0x103c
+ 4663 101b 01       		.byte	0x1
+ 4664 101c 09       		.byte	0x9
+ 4665 101d 03       		.byte	0x3
+ 4666 101e 00000000 		.quad	__func__.7220
+ 4666      00000000 
+ 4667 1026 00       		.byte	0x0
+ 4668 1027 1B       		.uleb128 0x1b
+ 4669 1028 C1000000 		.long	0xc1
+ 4670 102c 37100000 		.long	0x1037
+ 4671 1030 17       		.uleb128 0x17
+ 4672 1031 B1000000 		.long	0xb1
+ 4673 1035 1A       		.byte	0x1a
+ 4674 1036 00       		.byte	0x0
+ 4675 1037 0B       		.uleb128 0xb
+ 4676 1038 27100000 		.long	0x1027
+ 4677 103c 0B       		.uleb128 0xb
+ 4678 103d 27100000 		.long	0x1027
+ 4679 1041 1E       		.uleb128 0x1e
+ 4680 1042 00000000 		.long	.LASF355
+ 4681 1046 01       		.byte	0x1
+ 4682 1047 97       		.byte	0x97
+ 4683 1048 01       		.byte	0x1
+ 4684 1049 7B000000 		.long	0x7b
+ 4685 104d 00000000 		.quad	.LFB594
+ 4685      00000000 
+ 4686 1055 00000000 		.quad	.LFE594
+ 4686      00000000 
+ 4687 105d 00000000 		.long	.LLST4
+ 4688 1061 C6100000 		.long	0x10c6
+ 4689 1065 1F       		.uleb128 0x1f
+
GAS LISTING /tmp/ccXzRABk.s 			page 111
+
+
+ 4690 1066 00000000 		.long	.LASF349
+ 4691 106a 01       		.byte	0x1
+ 4692 106b 97       		.byte	0x97
+ 4693 106c DE030000 		.long	0x3de
+ 4694 1070 02       		.byte	0x2
+ 4695 1071 91       		.byte	0x91
+ 4696 1072 48       		.sleb128 -56
+ 4697 1073 1F       		.uleb128 0x1f
+ 4698 1074 00000000 		.long	.LASF351
+ 4699 1078 01       		.byte	0x1
+ 4700 1079 98       		.byte	0x98
+ 4701 107a B6000000 		.long	0xb6
+ 4702 107e 02       		.byte	0x2
+ 4703 107f 91       		.byte	0x91
+ 4704 1080 40       		.sleb128 -64
+ 4705 1081 1F       		.uleb128 0x1f
+ 4706 1082 00000000 		.long	.LASF352
+ 4707 1086 01       		.byte	0x1
+ 4708 1087 99       		.byte	0x99
+ 4709 1088 62000000 		.long	0x62
+ 4710 108c 03       		.byte	0x3
+ 4711 108d 91       		.byte	0x91
+ 4712 108e BC7F     		.sleb128 -68
+ 4713 1090 20       		.uleb128 0x20
+ 4714 1091 726300   		.string	"rc"
+ 4715 1094 01       		.byte	0x1
+ 4716 1095 9B       		.byte	0x9b
+ 4717 1096 7B000000 		.long	0x7b
+ 4718 109a 02       		.byte	0x2
+ 4719 109b 91       		.byte	0x91
+ 4720 109c 5C       		.sleb128 -36
+ 4721 109d 23       		.uleb128 0x23
+ 4722 109e 00000000 		.long	.LASF353
+ 4723 10a2 C6100000 		.long	0x10c6
+ 4724 10a6 01       		.byte	0x1
+ 4725 10a7 09       		.byte	0x9
+ 4726 10a8 03       		.byte	0x3
+ 4727 10a9 00000000 		.quad	__PRETTY_FUNCTION__.7242
+ 4727      00000000 
+ 4728 10b1 23       		.uleb128 0x23
+ 4729 10b2 00000000 		.long	.LASF354
+ 4730 10b6 CB100000 		.long	0x10cb
+ 4731 10ba 01       		.byte	0x1
+ 4732 10bb 09       		.byte	0x9
+ 4733 10bc 03       		.byte	0x3
+ 4734 10bd 00000000 		.quad	__func__.7244
+ 4734      00000000 
+ 4735 10c5 00       		.byte	0x0
+ 4736 10c6 0B       		.uleb128 0xb
+ 4737 10c7 27100000 		.long	0x1027
+ 4738 10cb 0B       		.uleb128 0xb
+ 4739 10cc 27100000 		.long	0x1027
+ 4740 10d0 1E       		.uleb128 0x1e
+ 4741 10d1 00000000 		.long	.LASF356
+ 4742 10d5 01       		.byte	0x1
+ 4743 10d6 B1       		.byte	0xb1
+ 4744 10d7 01       		.byte	0x1
+
GAS LISTING /tmp/ccXzRABk.s 			page 112
+
+
+ 4745 10d8 7B000000 		.long	0x7b
+ 4746 10dc 00000000 		.quad	.LFB595
+ 4746      00000000 
+ 4747 10e4 00000000 		.quad	.LFE595
+ 4747      00000000 
+ 4748 10ec 00000000 		.long	.LLST5
+ 4749 10f0 25110000 		.long	0x1125
+ 4750 10f4 1F       		.uleb128 0x1f
+ 4751 10f5 00000000 		.long	.LASF349
+ 4752 10f9 01       		.byte	0x1
+ 4753 10fa B1       		.byte	0xb1
+ 4754 10fb DE030000 		.long	0x3de
+ 4755 10ff 02       		.byte	0x2
+ 4756 1100 91       		.byte	0x91
+ 4757 1101 68       		.sleb128 -24
+ 4758 1102 1F       		.uleb128 0x1f
+ 4759 1103 00000000 		.long	.LASF357
+ 4760 1107 01       		.byte	0x1
+ 4761 1108 B2       		.byte	0xb2
+ 4762 1109 1F040000 		.long	0x41f
+ 4763 110d 02       		.byte	0x2
+ 4764 110e 91       		.byte	0x91
+ 4765 110f 60       		.sleb128 -32
+ 4766 1110 23       		.uleb128 0x23
+ 4767 1111 00000000 		.long	.LASF353
+ 4768 1115 35110000 		.long	0x1135
+ 4769 1119 01       		.byte	0x1
+ 4770 111a 09       		.byte	0x9
+ 4771 111b 03       		.byte	0x3
+ 4772 111c 00000000 		.quad	__PRETTY_FUNCTION__.7264
+ 4772      00000000 
+ 4773 1124 00       		.byte	0x0
+ 4774 1125 1B       		.uleb128 0x1b
+ 4775 1126 C1000000 		.long	0xc1
+ 4776 112a 35110000 		.long	0x1135
+ 4777 112e 17       		.uleb128 0x17
+ 4778 112f B1000000 		.long	0xb1
+ 4779 1133 1B       		.byte	0x1b
+ 4780 1134 00       		.byte	0x0
+ 4781 1135 0B       		.uleb128 0xb
+ 4782 1136 25110000 		.long	0x1125
+ 4783 113a 1E       		.uleb128 0x1e
+ 4784 113b 00000000 		.long	.LASF358
+ 4785 113f 01       		.byte	0x1
+ 4786 1140 BE       		.byte	0xbe
+ 4787 1141 01       		.byte	0x1
+ 4788 1142 7B000000 		.long	0x7b
+ 4789 1146 00000000 		.quad	.LFB596
+ 4789      00000000 
+ 4790 114e 00000000 		.quad	.LFE596
+ 4790      00000000 
+ 4791 1156 00000000 		.long	.LLST6
+ 4792 115a 8F110000 		.long	0x118f
+ 4793 115e 1F       		.uleb128 0x1f
+ 4794 115f 00000000 		.long	.LASF349
+ 4795 1163 01       		.byte	0x1
+ 4796 1164 BE       		.byte	0xbe
+
GAS LISTING /tmp/ccXzRABk.s 			page 113
+
+
+ 4797 1165 DE030000 		.long	0x3de
+ 4798 1169 02       		.byte	0x2
+ 4799 116a 91       		.byte	0x91
+ 4800 116b 68       		.sleb128 -24
+ 4801 116c 1F       		.uleb128 0x1f
+ 4802 116d 00000000 		.long	.LASF357
+ 4803 1171 01       		.byte	0x1
+ 4804 1172 BF       		.byte	0xbf
+ 4805 1173 1F040000 		.long	0x41f
+ 4806 1177 02       		.byte	0x2
+ 4807 1178 91       		.byte	0x91
+ 4808 1179 60       		.sleb128 -32
+ 4809 117a 23       		.uleb128 0x23
+ 4810 117b 00000000 		.long	.LASF353
+ 4811 117f 8F110000 		.long	0x118f
+ 4812 1183 01       		.byte	0x1
+ 4813 1184 09       		.byte	0x9
+ 4814 1185 03       		.byte	0x3
+ 4815 1186 00000000 		.quad	__PRETTY_FUNCTION__.7277
+ 4815      00000000 
+ 4816 118e 00       		.byte	0x0
+ 4817 118f 0B       		.uleb128 0xb
+ 4818 1190 25110000 		.long	0x1125
+ 4819 1194 1E       		.uleb128 0x1e
+ 4820 1195 00000000 		.long	.LASF359
+ 4821 1199 01       		.byte	0x1
+ 4822 119a CB       		.byte	0xcb
+ 4823 119b 01       		.byte	0x1
+ 4824 119c 7B000000 		.long	0x7b
+ 4825 11a0 00000000 		.quad	.LFB597
+ 4825      00000000 
+ 4826 11a8 00000000 		.quad	.LFE597
+ 4826      00000000 
+ 4827 11b0 00000000 		.long	.LLST7
+ 4828 11b4 E9110000 		.long	0x11e9
+ 4829 11b8 1F       		.uleb128 0x1f
+ 4830 11b9 00000000 		.long	.LASF349
+ 4831 11bd 01       		.byte	0x1
+ 4832 11be CB       		.byte	0xcb
+ 4833 11bf DE030000 		.long	0x3de
+ 4834 11c3 02       		.byte	0x2
+ 4835 11c4 91       		.byte	0x91
+ 4836 11c5 68       		.sleb128 -24
+ 4837 11c6 1F       		.uleb128 0x1f
+ 4838 11c7 00000000 		.long	.LASF360
+ 4839 11cb 01       		.byte	0x1
+ 4840 11cc CC       		.byte	0xcc
+ 4841 11cd F7010000 		.long	0x1f7
+ 4842 11d1 02       		.byte	0x2
+ 4843 11d2 91       		.byte	0x91
+ 4844 11d3 60       		.sleb128 -32
+ 4845 11d4 23       		.uleb128 0x23
+ 4846 11d5 00000000 		.long	.LASF353
+ 4847 11d9 F9110000 		.long	0x11f9
+ 4848 11dd 01       		.byte	0x1
+ 4849 11de 09       		.byte	0x9
+ 4850 11df 03       		.byte	0x3
+
GAS LISTING /tmp/ccXzRABk.s 			page 114
+
+
+ 4851 11e0 00000000 		.quad	__PRETTY_FUNCTION__.7290
+ 4851      00000000 
+ 4852 11e8 00       		.byte	0x0
+ 4853 11e9 1B       		.uleb128 0x1b
+ 4854 11ea C1000000 		.long	0xc1
+ 4855 11ee F9110000 		.long	0x11f9
+ 4856 11f2 17       		.uleb128 0x17
+ 4857 11f3 B1000000 		.long	0xb1
+ 4858 11f7 22       		.byte	0x22
+ 4859 11f8 00       		.byte	0x0
+ 4860 11f9 0B       		.uleb128 0xb
+ 4861 11fa E9110000 		.long	0x11e9
+ 4862 11fe 1E       		.uleb128 0x1e
+ 4863 11ff 00000000 		.long	.LASF361
+ 4864 1203 01       		.byte	0x1
+ 4865 1204 D8       		.byte	0xd8
+ 4866 1205 01       		.byte	0x1
+ 4867 1206 7B000000 		.long	0x7b
+ 4868 120a 00000000 		.quad	.LFB598
+ 4868      00000000 
+ 4869 1212 00000000 		.quad	.LFE598
+ 4869      00000000 
+ 4870 121a 00000000 		.long	.LLST8
+ 4871 121e 53120000 		.long	0x1253
+ 4872 1222 1F       		.uleb128 0x1f
+ 4873 1223 00000000 		.long	.LASF349
+ 4874 1227 01       		.byte	0x1
+ 4875 1228 D8       		.byte	0xd8
+ 4876 1229 DE030000 		.long	0x3de
+ 4877 122d 02       		.byte	0x2
+ 4878 122e 91       		.byte	0x91
+ 4879 122f 68       		.sleb128 -24
+ 4880 1230 1F       		.uleb128 0x1f
+ 4881 1231 00000000 		.long	.LASF360
+ 4882 1235 01       		.byte	0x1
+ 4883 1236 D9       		.byte	0xd9
+ 4884 1237 F7010000 		.long	0x1f7
+ 4885 123b 02       		.byte	0x2
+ 4886 123c 91       		.byte	0x91
+ 4887 123d 60       		.sleb128 -32
+ 4888 123e 23       		.uleb128 0x23
+ 4889 123f 00000000 		.long	.LASF353
+ 4890 1243 53120000 		.long	0x1253
+ 4891 1247 01       		.byte	0x1
+ 4892 1248 09       		.byte	0x9
+ 4893 1249 03       		.byte	0x3
+ 4894 124a 00000000 		.quad	__PRETTY_FUNCTION__.7300
+ 4894      00000000 
+ 4895 1252 00       		.byte	0x0
+ 4896 1253 0B       		.uleb128 0xb
+ 4897 1254 E9110000 		.long	0x11e9
+ 4898 1258 1E       		.uleb128 0x1e
+ 4899 1259 00000000 		.long	.LASF362
+ 4900 125d 01       		.byte	0x1
+ 4901 125e E4       		.byte	0xe4
+ 4902 125f 01       		.byte	0x1
+ 4903 1260 3D050000 		.long	0x53d
+
GAS LISTING /tmp/ccXzRABk.s 			page 115
+
+
+ 4904 1264 00000000 		.quad	.LFB599
+ 4904      00000000 
+ 4905 126c 00000000 		.quad	.LFE599
+ 4905      00000000 
+ 4906 1274 00000000 		.long	.LLST9
+ 4907 1278 97120000 		.long	0x1297
+ 4908 127c 1F       		.uleb128 0x1f
+ 4909 127d 00000000 		.long	.LASF349
+ 4910 1281 01       		.byte	0x1
+ 4911 1282 E4       		.byte	0xe4
+ 4912 1283 61040000 		.long	0x461
+ 4913 1287 02       		.byte	0x2
+ 4914 1288 91       		.byte	0x91
+ 4915 1289 68       		.sleb128 -24
+ 4916 128a 22       		.uleb128 0x22
+ 4917 128b 637600   		.string	"cv"
+ 4918 128e 01       		.byte	0x1
+ 4919 128f E5       		.byte	0xe5
+ 4920 1290 3D050000 		.long	0x53d
+ 4921 1294 01       		.byte	0x1
+ 4922 1295 61       		.byte	0x61
+ 4923 1296 00       		.byte	0x0
+ 4924 1297 1E       		.uleb128 0x1e
+ 4925 1298 00000000 		.long	.LASF363
+ 4926 129c 01       		.byte	0x1
+ 4927 129d EB       		.byte	0xeb
+ 4928 129e 01       		.byte	0x1
+ 4929 129f 3D050000 		.long	0x53d
+ 4930 12a3 00000000 		.quad	.LFB600
+ 4930      00000000 
+ 4931 12ab 00000000 		.quad	.LFE600
+ 4931      00000000 
+ 4932 12b3 00000000 		.long	.LLST10
+ 4933 12b7 D6120000 		.long	0x12d6
+ 4934 12bb 1F       		.uleb128 0x1f
+ 4935 12bc 00000000 		.long	.LASF349
+ 4936 12c0 01       		.byte	0x1
+ 4937 12c1 EB       		.byte	0xeb
+ 4938 12c2 61040000 		.long	0x461
+ 4939 12c6 02       		.byte	0x2
+ 4940 12c7 91       		.byte	0x91
+ 4941 12c8 68       		.sleb128 -24
+ 4942 12c9 22       		.uleb128 0x22
+ 4943 12ca 637600   		.string	"cv"
+ 4944 12cd 01       		.byte	0x1
+ 4945 12ce EC       		.byte	0xec
+ 4946 12cf 3D050000 		.long	0x53d
+ 4947 12d3 01       		.byte	0x1
+ 4948 12d4 61       		.byte	0x61
+ 4949 12d5 00       		.byte	0x0
+ 4950 12d6 1E       		.uleb128 0x1e
+ 4951 12d7 00000000 		.long	.LASF364
+ 4952 12db 01       		.byte	0x1
+ 4953 12dc F2       		.byte	0xf2
+ 4954 12dd 01       		.byte	0x1
+ 4955 12de 7B000000 		.long	0x7b
+ 4956 12e2 00000000 		.quad	.LFB601
+
GAS LISTING /tmp/ccXzRABk.s 			page 116
+
+
+ 4956      00000000 
+ 4957 12ea 00000000 		.quad	.LFE601
+ 4957      00000000 
+ 4958 12f2 00000000 		.long	.LLST11
+ 4959 12f6 31130000 		.long	0x1331
+ 4960 12fa 1F       		.uleb128 0x1f
+ 4961 12fb 00000000 		.long	.LASF349
+ 4962 12ff 01       		.byte	0x1
+ 4963 1300 F2       		.byte	0xf2
+ 4964 1301 61040000 		.long	0x461
+ 4965 1305 02       		.byte	0x2
+ 4966 1306 91       		.byte	0x91
+ 4967 1307 58       		.sleb128 -40
+ 4968 1308 22       		.uleb128 0x22
+ 4969 1309 696E00   		.string	"in"
+ 4970 130c 01       		.byte	0x1
+ 4971 130d F3       		.byte	0xf3
+ 4972 130e 1F040000 		.long	0x41f
+ 4973 1312 02       		.byte	0x2
+ 4974 1313 91       		.byte	0x91
+ 4975 1314 50       		.sleb128 -48
+ 4976 1315 22       		.uleb128 0x22
+ 4977 1316 6F757400 		.string	"out"
+ 4978 131a 01       		.byte	0x1
+ 4979 131b F3       		.byte	0xf3
+ 4980 131c B4000000 		.long	0xb4
+ 4981 1320 02       		.byte	0x2
+ 4982 1321 91       		.byte	0x91
+ 4983 1322 48       		.sleb128 -56
+ 4984 1323 20       		.uleb128 0x20
+ 4985 1324 637600   		.string	"cv"
+ 4986 1327 01       		.byte	0x1
+ 4987 1328 F5       		.byte	0xf5
+ 4988 1329 3D050000 		.long	0x53d
+ 4989 132d 02       		.byte	0x2
+ 4990 132e 91       		.byte	0x91
+ 4991 132f 60       		.sleb128 -32
+ 4992 1330 00       		.byte	0x0
+ 4993 1331 1E       		.uleb128 0x1e
+ 4994 1332 00000000 		.long	.LASF365
+ 4995 1336 01       		.byte	0x1
+ 4996 1337 FE       		.byte	0xfe
+ 4997 1338 01       		.byte	0x1
+ 4998 1339 7B000000 		.long	0x7b
+ 4999 133d 00000000 		.quad	.LFB602
+ 4999      00000000 
+ 5000 1345 00000000 		.quad	.LFE602
+ 5000      00000000 
+ 5001 134d 00000000 		.long	.LLST12
+ 5002 1351 8D130000 		.long	0x138d
+ 5003 1355 1F       		.uleb128 0x1f
+ 5004 1356 00000000 		.long	.LASF349
+ 5005 135a 01       		.byte	0x1
+ 5006 135b FE       		.byte	0xfe
+ 5007 135c 61040000 		.long	0x461
+ 5008 1360 02       		.byte	0x2
+ 5009 1361 91       		.byte	0x91
+
GAS LISTING /tmp/ccXzRABk.s 			page 117
+
+
+ 5010 1362 58       		.sleb128 -40
+ 5011 1363 22       		.uleb128 0x22
+ 5012 1364 696E00   		.string	"in"
+ 5013 1367 01       		.byte	0x1
+ 5014 1368 FF       		.byte	0xff
+ 5015 1369 1F040000 		.long	0x41f
+ 5016 136d 02       		.byte	0x2
+ 5017 136e 91       		.byte	0x91
+ 5018 136f 50       		.sleb128 -48
+ 5019 1370 22       		.uleb128 0x22
+ 5020 1371 6F757400 		.string	"out"
+ 5021 1375 01       		.byte	0x1
+ 5022 1376 FF       		.byte	0xff
+ 5023 1377 B4000000 		.long	0xb4
+ 5024 137b 02       		.byte	0x2
+ 5025 137c 91       		.byte	0x91
+ 5026 137d 48       		.sleb128 -56
+ 5027 137e 24       		.uleb128 0x24
+ 5028 137f 637600   		.string	"cv"
+ 5029 1382 01       		.byte	0x1
+ 5030 1383 0101     		.value	0x101
+ 5031 1385 3D050000 		.long	0x53d
+ 5032 1389 02       		.byte	0x2
+ 5033 138a 91       		.byte	0x91
+ 5034 138b 60       		.sleb128 -32
+ 5035 138c 00       		.byte	0x0
+ 5036 138d 25       		.uleb128 0x25
+ 5037 138e 00000000 		.long	.LASF366
+ 5038 1392 01       		.byte	0x1
+ 5039 1393 0A01     		.value	0x10a
+ 5040 1395 01       		.byte	0x1
+ 5041 1396 7B000000 		.long	0x7b
+ 5042 139a 00000000 		.quad	.LFB603
+ 5042      00000000 
+ 5043 13a2 00000000 		.quad	.LFE603
+ 5043      00000000 
+ 5044 13aa 00000000 		.long	.LLST13
+ 5045 13ae 15140000 		.long	0x1415
+ 5046 13b2 26       		.uleb128 0x26
+ 5047 13b3 00000000 		.long	.LASF349
+ 5048 13b7 01       		.byte	0x1
+ 5049 13b8 0A01     		.value	0x10a
+ 5050 13ba 61040000 		.long	0x461
+ 5051 13be 02       		.byte	0x2
+ 5052 13bf 91       		.byte	0x91
+ 5053 13c0 58       		.sleb128 -40
+ 5054 13c1 27       		.uleb128 0x27
+ 5055 13c2 696E00   		.string	"in"
+ 5056 13c5 01       		.byte	0x1
+ 5057 13c6 0A01     		.value	0x10a
+ 5058 13c8 1F040000 		.long	0x41f
+ 5059 13cc 02       		.byte	0x2
+ 5060 13cd 91       		.byte	0x91
+ 5061 13ce 50       		.sleb128 -48
+ 5062 13cf 27       		.uleb128 0x27
+ 5063 13d0 6F757400 		.string	"out"
+ 5064 13d4 01       		.byte	0x1
+
GAS LISTING /tmp/ccXzRABk.s 			page 118
+
+
+ 5065 13d5 0A01     		.value	0x10a
+ 5066 13d7 B4000000 		.long	0xb4
+ 5067 13db 02       		.byte	0x2
+ 5068 13dc 91       		.byte	0x91
+ 5069 13dd 48       		.sleb128 -56
+ 5070 13de 24       		.uleb128 0x24
+ 5071 13df 726300   		.string	"rc"
+ 5072 13e2 01       		.byte	0x1
+ 5073 13e3 0C01     		.value	0x10c
+ 5074 13e5 7B000000 		.long	0x7b
+ 5075 13e9 02       		.byte	0x2
+ 5076 13ea 91       		.byte	0x91
+ 5077 13eb 6C       		.sleb128 -20
+ 5078 13ec 23       		.uleb128 0x23
+ 5079 13ed 00000000 		.long	.LASF353
+ 5080 13f1 25140000 		.long	0x1425
+ 5081 13f5 01       		.byte	0x1
+ 5082 13f6 09       		.byte	0x9
+ 5083 13f7 03       		.byte	0x3
+ 5084 13f8 00000000 		.quad	__PRETTY_FUNCTION__.7349
+ 5084      00000000 
+ 5085 1400 23       		.uleb128 0x23
+ 5086 1401 00000000 		.long	.LASF354
+ 5087 1405 2A140000 		.long	0x142a
+ 5088 1409 01       		.byte	0x1
+ 5089 140a 09       		.byte	0x9
+ 5090 140b 03       		.byte	0x3
+ 5091 140c 00000000 		.quad	__func__.7350
+ 5091      00000000 
+ 5092 1414 00       		.byte	0x0
+ 5093 1415 1B       		.uleb128 0x1b
+ 5094 1416 C1000000 		.long	0xc1
+ 5095 141a 25140000 		.long	0x1425
+ 5096 141e 17       		.uleb128 0x17
+ 5097 141f B1000000 		.long	0xb1
+ 5098 1423 14       		.byte	0x14
+ 5099 1424 00       		.byte	0x0
+ 5100 1425 0B       		.uleb128 0xb
+ 5101 1426 15140000 		.long	0x1415
+ 5102 142a 0B       		.uleb128 0xb
+ 5103 142b 15140000 		.long	0x1415
+ 5104 142f 25       		.uleb128 0x25
+ 5105 1430 00000000 		.long	.LASF367
+ 5106 1434 01       		.byte	0x1
+ 5107 1435 1E01     		.value	0x11e
+ 5108 1437 01       		.byte	0x1
+ 5109 1438 7B000000 		.long	0x7b
+ 5110 143c 00000000 		.quad	.LFB604
+ 5110      00000000 
+ 5111 1444 00000000 		.quad	.LFE604
+ 5111      00000000 
+ 5112 144c 00000000 		.long	.LLST14
+ 5113 1450 B7140000 		.long	0x14b7
+ 5114 1454 26       		.uleb128 0x26
+ 5115 1455 00000000 		.long	.LASF349
+ 5116 1459 01       		.byte	0x1
+ 5117 145a 1E01     		.value	0x11e
+
GAS LISTING /tmp/ccXzRABk.s 			page 119
+
+
+ 5118 145c 61040000 		.long	0x461
+ 5119 1460 02       		.byte	0x2
+ 5120 1461 91       		.byte	0x91
+ 5121 1462 58       		.sleb128 -40
+ 5122 1463 27       		.uleb128 0x27
+ 5123 1464 696E00   		.string	"in"
+ 5124 1467 01       		.byte	0x1
+ 5125 1468 1E01     		.value	0x11e
+ 5126 146a 1F040000 		.long	0x41f
+ 5127 146e 02       		.byte	0x2
+ 5128 146f 91       		.byte	0x91
+ 5129 1470 50       		.sleb128 -48
+ 5130 1471 27       		.uleb128 0x27
+ 5131 1472 6F757400 		.string	"out"
+ 5132 1476 01       		.byte	0x1
+ 5133 1477 1E01     		.value	0x11e
+ 5134 1479 B4000000 		.long	0xb4
+ 5135 147d 02       		.byte	0x2
+ 5136 147e 91       		.byte	0x91
+ 5137 147f 48       		.sleb128 -56
+ 5138 1480 24       		.uleb128 0x24
+ 5139 1481 726300   		.string	"rc"
+ 5140 1484 01       		.byte	0x1
+ 5141 1485 2001     		.value	0x120
+ 5142 1487 7B000000 		.long	0x7b
+ 5143 148b 02       		.byte	0x2
+ 5144 148c 91       		.byte	0x91
+ 5145 148d 6C       		.sleb128 -20
+ 5146 148e 23       		.uleb128 0x23
+ 5147 148f 00000000 		.long	.LASF353
+ 5148 1493 B7140000 		.long	0x14b7
+ 5149 1497 01       		.byte	0x1
+ 5150 1498 09       		.byte	0x9
+ 5151 1499 03       		.byte	0x3
+ 5152 149a 00000000 		.quad	__PRETTY_FUNCTION__.7365
+ 5152      00000000 
+ 5153 14a2 23       		.uleb128 0x23
+ 5154 14a3 00000000 		.long	.LASF354
+ 5155 14a7 BC140000 		.long	0x14bc
+ 5156 14ab 01       		.byte	0x1
+ 5157 14ac 09       		.byte	0x9
+ 5158 14ad 03       		.byte	0x3
+ 5159 14ae 00000000 		.quad	__func__.7366
+ 5159      00000000 
+ 5160 14b6 00       		.byte	0x0
+ 5161 14b7 0B       		.uleb128 0xb
+ 5162 14b8 15140000 		.long	0x1415
+ 5163 14bc 0B       		.uleb128 0xb
+ 5164 14bd 15140000 		.long	0x1415
+ 5165 14c1 25       		.uleb128 0x25
+ 5166 14c2 00000000 		.long	.LASF368
+ 5167 14c6 01       		.byte	0x1
+ 5168 14c7 5C01     		.value	0x15c
+ 5169 14c9 01       		.byte	0x1
+ 5170 14ca 7B000000 		.long	0x7b
+ 5171 14ce 00000000 		.quad	.LFB605
+ 5171      00000000 
+
GAS LISTING /tmp/ccXzRABk.s 			page 120
+
+
+ 5172 14d6 00000000 		.quad	.LFE605
+ 5172      00000000 
+ 5173 14de 00000000 		.long	.LLST15
+ 5174 14e2 40150000 		.long	0x1540
+ 5175 14e6 26       		.uleb128 0x26
+ 5176 14e7 00000000 		.long	.LASF349
+ 5177 14eb 01       		.byte	0x1
+ 5178 14ec 5C01     		.value	0x15c
+ 5179 14ee 61040000 		.long	0x461
+ 5180 14f2 02       		.byte	0x2
+ 5181 14f3 91       		.byte	0x91
+ 5182 14f4 58       		.sleb128 -40
+ 5183 14f5 27       		.uleb128 0x27
+ 5184 14f6 696E00   		.string	"in"
+ 5185 14f9 01       		.byte	0x1
+ 5186 14fa 5C01     		.value	0x15c
+ 5187 14fc 1F040000 		.long	0x41f
+ 5188 1500 02       		.byte	0x2
+ 5189 1501 91       		.byte	0x91
+ 5190 1502 50       		.sleb128 -48
+ 5191 1503 27       		.uleb128 0x27
+ 5192 1504 6F757400 		.string	"out"
+ 5193 1508 01       		.byte	0x1
+ 5194 1509 5C01     		.value	0x15c
+ 5195 150b B4000000 		.long	0xb4
+ 5196 150f 02       		.byte	0x2
+ 5197 1510 91       		.byte	0x91
+ 5198 1511 48       		.sleb128 -56
+ 5199 1512 26       		.uleb128 0x26
+ 5200 1513 00000000 		.long	.LASF369
+ 5201 1517 01       		.byte	0x1
+ 5202 1518 5C01     		.value	0x15c
+ 5203 151a 62000000 		.long	0x62
+ 5204 151e 02       		.byte	0x2
+ 5205 151f 91       		.byte	0x91
+ 5206 1520 44       		.sleb128 -60
+ 5207 1521 24       		.uleb128 0x24
+ 5208 1522 70696E00 		.string	"pin"
+ 5209 1526 01       		.byte	0x1
+ 5210 1527 5E01     		.value	0x15e
+ 5211 1529 40150000 		.long	0x1540
+ 5212 152d 02       		.byte	0x2
+ 5213 152e 91       		.byte	0x91
+ 5214 152f 60       		.sleb128 -32
+ 5215 1530 28       		.uleb128 0x28
+ 5216 1531 00000000 		.long	.LASF370
+ 5217 1535 01       		.byte	0x1
+ 5218 1536 5F01     		.value	0x15f
+ 5219 1538 4B150000 		.long	0x154b
+ 5220 153c 02       		.byte	0x2
+ 5221 153d 91       		.byte	0x91
+ 5222 153e 68       		.sleb128 -24
+ 5223 153f 00       		.byte	0x0
+ 5224 1540 0A       		.uleb128 0xa
+ 5225 1541 08       		.byte	0x8
+ 5226 1542 46150000 		.long	0x1546
+ 5227 1546 0B       		.uleb128 0xb
+
GAS LISTING /tmp/ccXzRABk.s 			page 121
+
+
+ 5228 1547 49000000 		.long	0x49
+ 5229 154b 0A       		.uleb128 0xa
+ 5230 154c 08       		.byte	0x8
+ 5231 154d 49000000 		.long	0x49
+ 5232 1551 25       		.uleb128 0x25
+ 5233 1552 00000000 		.long	.LASF371
+ 5234 1556 01       		.byte	0x1
+ 5235 1557 6C01     		.value	0x16c
+ 5236 1559 01       		.byte	0x1
+ 5237 155a 7B000000 		.long	0x7b
+ 5238 155e 00000000 		.quad	.LFB606
+ 5238      00000000 
+ 5239 1566 00000000 		.quad	.LFE606
+ 5239      00000000 
+ 5240 156e 00000000 		.long	.LLST16
+ 5241 1572 D0150000 		.long	0x15d0
+ 5242 1576 26       		.uleb128 0x26
+ 5243 1577 00000000 		.long	.LASF349
+ 5244 157b 01       		.byte	0x1
+ 5245 157c 6C01     		.value	0x16c
+ 5246 157e 61040000 		.long	0x461
+ 5247 1582 02       		.byte	0x2
+ 5248 1583 91       		.byte	0x91
+ 5249 1584 58       		.sleb128 -40
+ 5250 1585 27       		.uleb128 0x27
+ 5251 1586 696E00   		.string	"in"
+ 5252 1589 01       		.byte	0x1
+ 5253 158a 6C01     		.value	0x16c
+ 5254 158c 1F040000 		.long	0x41f
+ 5255 1590 02       		.byte	0x2
+ 5256 1591 91       		.byte	0x91
+ 5257 1592 50       		.sleb128 -48
+ 5258 1593 27       		.uleb128 0x27
+ 5259 1594 6F757400 		.string	"out"
+ 5260 1598 01       		.byte	0x1
+ 5261 1599 6C01     		.value	0x16c
+ 5262 159b B4000000 		.long	0xb4
+ 5263 159f 02       		.byte	0x2
+ 5264 15a0 91       		.byte	0x91
+ 5265 15a1 48       		.sleb128 -56
+ 5266 15a2 26       		.uleb128 0x26
+ 5267 15a3 00000000 		.long	.LASF369
+ 5268 15a7 01       		.byte	0x1
+ 5269 15a8 6C01     		.value	0x16c
+ 5270 15aa 62000000 		.long	0x62
+ 5271 15ae 02       		.byte	0x2
+ 5272 15af 91       		.byte	0x91
+ 5273 15b0 44       		.sleb128 -60
+ 5274 15b1 24       		.uleb128 0x24
+ 5275 15b2 70696E00 		.string	"pin"
+ 5276 15b6 01       		.byte	0x1
+ 5277 15b7 6E01     		.value	0x16e
+ 5278 15b9 40150000 		.long	0x1540
+ 5279 15bd 02       		.byte	0x2
+ 5280 15be 91       		.byte	0x91
+ 5281 15bf 60       		.sleb128 -32
+ 5282 15c0 28       		.uleb128 0x28
+
GAS LISTING /tmp/ccXzRABk.s 			page 122
+
+
+ 5283 15c1 00000000 		.long	.LASF370
+ 5284 15c5 01       		.byte	0x1
+ 5285 15c6 6F01     		.value	0x16f
+ 5286 15c8 4B150000 		.long	0x154b
+ 5287 15cc 02       		.byte	0x2
+ 5288 15cd 91       		.byte	0x91
+ 5289 15ce 68       		.sleb128 -24
+ 5290 15cf 00       		.byte	0x0
+ 5291 15d0 25       		.uleb128 0x25
+ 5292 15d1 00000000 		.long	.LASF372
+ 5293 15d5 01       		.byte	0x1
+ 5294 15d6 8201     		.value	0x182
+ 5295 15d8 01       		.byte	0x1
+ 5296 15d9 7B000000 		.long	0x7b
+ 5297 15dd 00000000 		.quad	.LFB607
+ 5297      00000000 
+ 5298 15e5 00000000 		.quad	.LFE607
+ 5298      00000000 
+ 5299 15ed 00000000 		.long	.LLST17
+ 5300 15f1 70160000 		.long	0x1670
+ 5301 15f5 26       		.uleb128 0x26
+ 5302 15f6 00000000 		.long	.LASF349
+ 5303 15fa 01       		.byte	0x1
+ 5304 15fb 8201     		.value	0x182
+ 5305 15fd DE030000 		.long	0x3de
+ 5306 1601 03       		.byte	0x3
+ 5307 1602 91       		.byte	0x91
+ 5308 1603 B87F     		.sleb128 -72
+ 5309 1605 27       		.uleb128 0x27
+ 5310 1606 696E00   		.string	"in"
+ 5311 1609 01       		.byte	0x1
+ 5312 160a 8201     		.value	0x182
+ 5313 160c 1F040000 		.long	0x41f
+ 5314 1610 03       		.byte	0x3
+ 5315 1611 91       		.byte	0x91
+ 5316 1612 B07F     		.sleb128 -80
+ 5317 1614 27       		.uleb128 0x27
+ 5318 1615 6F757400 		.string	"out"
+ 5319 1619 01       		.byte	0x1
+ 5320 161a 8201     		.value	0x182
+ 5321 161c B4000000 		.long	0xb4
+ 5322 1620 03       		.byte	0x3
+ 5323 1621 91       		.byte	0x91
+ 5324 1622 A87F     		.sleb128 -88
+ 5325 1624 26       		.uleb128 0x26
+ 5326 1625 00000000 		.long	.LASF369
+ 5327 1629 01       		.byte	0x1
+ 5328 162a 8201     		.value	0x182
+ 5329 162c 62000000 		.long	0x62
+ 5330 1630 03       		.byte	0x3
+ 5331 1631 91       		.byte	0x91
+ 5332 1632 A47F     		.sleb128 -92
+ 5333 1634 24       		.uleb128 0x24
+ 5334 1635 637600   		.string	"cv"
+ 5335 1638 01       		.byte	0x1
+ 5336 1639 8401     		.value	0x184
+ 5337 163b 3D050000 		.long	0x53d
+
GAS LISTING /tmp/ccXzRABk.s 			page 123
+
+
+ 5338 163f 02       		.byte	0x2
+ 5339 1640 91       		.byte	0x91
+ 5340 1641 40       		.sleb128 -64
+ 5341 1642 28       		.uleb128 0x28
+ 5342 1643 00000000 		.long	.LASF357
+ 5343 1647 01       		.byte	0x1
+ 5344 1648 8501     		.value	0x185
+ 5345 164a 3D050000 		.long	0x53d
+ 5346 164e 02       		.byte	0x2
+ 5347 164f 91       		.byte	0x91
+ 5348 1650 50       		.sleb128 -48
+ 5349 1651 24       		.uleb128 0x24
+ 5350 1652 70696E00 		.string	"pin"
+ 5351 1656 01       		.byte	0x1
+ 5352 1657 8601     		.value	0x186
+ 5353 1659 40150000 		.long	0x1540
+ 5354 165d 02       		.byte	0x2
+ 5355 165e 91       		.byte	0x91
+ 5356 165f 60       		.sleb128 -32
+ 5357 1660 28       		.uleb128 0x28
+ 5358 1661 00000000 		.long	.LASF370
+ 5359 1665 01       		.byte	0x1
+ 5360 1666 8701     		.value	0x187
+ 5361 1668 4B150000 		.long	0x154b
+ 5362 166c 02       		.byte	0x2
+ 5363 166d 91       		.byte	0x91
+ 5364 166e 68       		.sleb128 -24
+ 5365 166f 00       		.byte	0x0
+ 5366 1670 25       		.uleb128 0x25
+ 5367 1671 00000000 		.long	.LASF373
+ 5368 1675 01       		.byte	0x1
+ 5369 1676 A401     		.value	0x1a4
+ 5370 1678 01       		.byte	0x1
+ 5371 1679 7B000000 		.long	0x7b
+ 5372 167d 00000000 		.quad	.LFB608
+ 5372      00000000 
+ 5373 1685 00000000 		.quad	.LFE608
+ 5373      00000000 
+ 5374 168d 00000000 		.long	.LLST18
+ 5375 1691 32170000 		.long	0x1732
+ 5376 1695 26       		.uleb128 0x26
+ 5377 1696 00000000 		.long	.LASF349
+ 5378 169a 01       		.byte	0x1
+ 5379 169b A401     		.value	0x1a4
+ 5380 169d DE030000 		.long	0x3de
+ 5381 16a1 03       		.byte	0x3
+ 5382 16a2 91       		.byte	0x91
+ 5383 16a3 A87F     		.sleb128 -88
+ 5384 16a5 27       		.uleb128 0x27
+ 5385 16a6 696E00   		.string	"in"
+ 5386 16a9 01       		.byte	0x1
+ 5387 16aa A401     		.value	0x1a4
+ 5388 16ac 1F040000 		.long	0x41f
+ 5389 16b0 03       		.byte	0x3
+ 5390 16b1 91       		.byte	0x91
+ 5391 16b2 A07F     		.sleb128 -96
+ 5392 16b4 27       		.uleb128 0x27
+
GAS LISTING /tmp/ccXzRABk.s 			page 124
+
+
+ 5393 16b5 6F757400 		.string	"out"
+ 5394 16b9 01       		.byte	0x1
+ 5395 16ba A401     		.value	0x1a4
+ 5396 16bc B4000000 		.long	0xb4
+ 5397 16c0 03       		.byte	0x3
+ 5398 16c1 91       		.byte	0x91
+ 5399 16c2 987F     		.sleb128 -104
+ 5400 16c4 26       		.uleb128 0x26
+ 5401 16c5 00000000 		.long	.LASF369
+ 5402 16c9 01       		.byte	0x1
+ 5403 16ca A401     		.value	0x1a4
+ 5404 16cc 62000000 		.long	0x62
+ 5405 16d0 03       		.byte	0x3
+ 5406 16d1 91       		.byte	0x91
+ 5407 16d2 947F     		.sleb128 -108
+ 5408 16d4 24       		.uleb128 0x24
+ 5409 16d5 637600   		.string	"cv"
+ 5410 16d8 01       		.byte	0x1
+ 5411 16d9 A601     		.value	0x1a6
+ 5412 16db 3D050000 		.long	0x53d
+ 5413 16df 03       		.byte	0x3
+ 5414 16e0 91       		.byte	0x91
+ 5415 16e1 B07F     		.sleb128 -80
+ 5416 16e3 28       		.uleb128 0x28
+ 5417 16e4 00000000 		.long	.LASF357
+ 5418 16e8 01       		.byte	0x1
+ 5419 16e9 A701     		.value	0x1a7
+ 5420 16eb 3D050000 		.long	0x53d
+ 5421 16ef 02       		.byte	0x2
+ 5422 16f0 91       		.byte	0x91
+ 5423 16f1 40       		.sleb128 -64
+ 5424 16f2 24       		.uleb128 0x24
+ 5425 16f3 70696E00 		.string	"pin"
+ 5426 16f7 01       		.byte	0x1
+ 5427 16f8 A801     		.value	0x1a8
+ 5428 16fa 40150000 		.long	0x1540
+ 5429 16fe 02       		.byte	0x2
+ 5430 16ff 91       		.byte	0x91
+ 5431 1700 50       		.sleb128 -48
+ 5432 1701 28       		.uleb128 0x28
+ 5433 1702 00000000 		.long	.LASF370
+ 5434 1706 01       		.byte	0x1
+ 5435 1707 A901     		.value	0x1a9
+ 5436 1709 4B150000 		.long	0x154b
+ 5437 170d 02       		.byte	0x2
+ 5438 170e 91       		.byte	0x91
+ 5439 170f 58       		.sleb128 -40
+ 5440 1710 29       		.uleb128 0x29
+ 5441 1711 00000000 		.quad	.LBB2
+ 5441      00000000 
+ 5442 1719 00000000 		.quad	.LBE2
+ 5442      00000000 
+ 5443 1721 28       		.uleb128 0x28
+ 5444 1722 00000000 		.long	.LASF374
+ 5445 1726 01       		.byte	0x1
+ 5446 1727 B101     		.value	0x1b1
+ 5447 1729 3D050000 		.long	0x53d
+
GAS LISTING /tmp/ccXzRABk.s 			page 125
+
+
+ 5448 172d 02       		.byte	0x2
+ 5449 172e 91       		.byte	0x91
+ 5450 172f 60       		.sleb128 -32
+ 5451 1730 00       		.byte	0x0
+ 5452 1731 00       		.byte	0x0
+ 5453 1732 25       		.uleb128 0x25
+ 5454 1733 00000000 		.long	.LASF375
+ 5455 1737 01       		.byte	0x1
+ 5456 1738 CA01     		.value	0x1ca
+ 5457 173a 01       		.byte	0x1
+ 5458 173b 7B000000 		.long	0x7b
+ 5459 173f 00000000 		.quad	.LFB609
+ 5459      00000000 
+ 5460 1747 00000000 		.quad	.LFE609
+ 5460      00000000 
+ 5461 174f 00000000 		.long	.LLST19
+ 5462 1753 F4170000 		.long	0x17f4
+ 5463 1757 26       		.uleb128 0x26
+ 5464 1758 00000000 		.long	.LASF349
+ 5465 175c 01       		.byte	0x1
+ 5466 175d CA01     		.value	0x1ca
+ 5467 175f DE030000 		.long	0x3de
+ 5468 1763 03       		.byte	0x3
+ 5469 1764 91       		.byte	0x91
+ 5470 1765 A87F     		.sleb128 -88
+ 5471 1767 27       		.uleb128 0x27
+ 5472 1768 696E00   		.string	"in"
+ 5473 176b 01       		.byte	0x1
+ 5474 176c CA01     		.value	0x1ca
+ 5475 176e 1F040000 		.long	0x41f
+ 5476 1772 03       		.byte	0x3
+ 5477 1773 91       		.byte	0x91
+ 5478 1774 A07F     		.sleb128 -96
+ 5479 1776 27       		.uleb128 0x27
+ 5480 1777 6F757400 		.string	"out"
+ 5481 177b 01       		.byte	0x1
+ 5482 177c CA01     		.value	0x1ca
+ 5483 177e B4000000 		.long	0xb4
+ 5484 1782 03       		.byte	0x3
+ 5485 1783 91       		.byte	0x91
+ 5486 1784 987F     		.sleb128 -104
+ 5487 1786 26       		.uleb128 0x26
+ 5488 1787 00000000 		.long	.LASF369
+ 5489 178b 01       		.byte	0x1
+ 5490 178c CA01     		.value	0x1ca
+ 5491 178e 62000000 		.long	0x62
+ 5492 1792 03       		.byte	0x3
+ 5493 1793 91       		.byte	0x91
+ 5494 1794 947F     		.sleb128 -108
+ 5495 1796 24       		.uleb128 0x24
+ 5496 1797 637600   		.string	"cv"
+ 5497 179a 01       		.byte	0x1
+ 5498 179b CD01     		.value	0x1cd
+ 5499 179d 3D050000 		.long	0x53d
+ 5500 17a1 03       		.byte	0x3
+ 5501 17a2 91       		.byte	0x91
+ 5502 17a3 B07F     		.sleb128 -80
+
GAS LISTING /tmp/ccXzRABk.s 			page 126
+
+
+ 5503 17a5 28       		.uleb128 0x28
+ 5504 17a6 00000000 		.long	.LASF357
+ 5505 17aa 01       		.byte	0x1
+ 5506 17ab CE01     		.value	0x1ce
+ 5507 17ad 3D050000 		.long	0x53d
+ 5508 17b1 02       		.byte	0x2
+ 5509 17b2 91       		.byte	0x91
+ 5510 17b3 40       		.sleb128 -64
+ 5511 17b4 24       		.uleb128 0x24
+ 5512 17b5 70696E00 		.string	"pin"
+ 5513 17b9 01       		.byte	0x1
+ 5514 17ba CF01     		.value	0x1cf
+ 5515 17bc 40150000 		.long	0x1540
+ 5516 17c0 02       		.byte	0x2
+ 5517 17c1 91       		.byte	0x91
+ 5518 17c2 50       		.sleb128 -48
+ 5519 17c3 28       		.uleb128 0x28
+ 5520 17c4 00000000 		.long	.LASF370
+ 5521 17c8 01       		.byte	0x1
+ 5522 17c9 D001     		.value	0x1d0
+ 5523 17cb 4B150000 		.long	0x154b
+ 5524 17cf 02       		.byte	0x2
+ 5525 17d0 91       		.byte	0x91
+ 5526 17d1 58       		.sleb128 -40
+ 5527 17d2 29       		.uleb128 0x29
+ 5528 17d3 00000000 		.quad	.LBB3
+ 5528      00000000 
+ 5529 17db 00000000 		.quad	.LBE3
+ 5529      00000000 
+ 5530 17e3 28       		.uleb128 0x28
+ 5531 17e4 00000000 		.long	.LASF374
+ 5532 17e8 01       		.byte	0x1
+ 5533 17e9 D801     		.value	0x1d8
+ 5534 17eb 3D050000 		.long	0x53d
+ 5535 17ef 02       		.byte	0x2
+ 5536 17f0 91       		.byte	0x91
+ 5537 17f1 60       		.sleb128 -32
+ 5538 17f2 00       		.byte	0x0
+ 5539 17f3 00       		.byte	0x0
+ 5540 17f4 25       		.uleb128 0x25
+ 5541 17f5 00000000 		.long	.LASF376
+ 5542 17f9 01       		.byte	0x1
+ 5543 17fa EB01     		.value	0x1eb
+ 5544 17fc 01       		.byte	0x1
+ 5545 17fd 7B000000 		.long	0x7b
+ 5546 1801 00000000 		.quad	.LFB610
+ 5546      00000000 
+ 5547 1809 00000000 		.quad	.LFE610
+ 5547      00000000 
+ 5548 1811 00000000 		.long	.LLST20
+ 5549 1815 B6180000 		.long	0x18b6
+ 5550 1819 26       		.uleb128 0x26
+ 5551 181a 00000000 		.long	.LASF349
+ 5552 181e 01       		.byte	0x1
+ 5553 181f EB01     		.value	0x1eb
+ 5554 1821 DE030000 		.long	0x3de
+ 5555 1825 03       		.byte	0x3
+
GAS LISTING /tmp/ccXzRABk.s 			page 127
+
+
+ 5556 1826 91       		.byte	0x91
+ 5557 1827 A87F     		.sleb128 -88
+ 5558 1829 27       		.uleb128 0x27
+ 5559 182a 696E00   		.string	"in"
+ 5560 182d 01       		.byte	0x1
+ 5561 182e EB01     		.value	0x1eb
+ 5562 1830 1F040000 		.long	0x41f
+ 5563 1834 03       		.byte	0x3
+ 5564 1835 91       		.byte	0x91
+ 5565 1836 A07F     		.sleb128 -96
+ 5566 1838 27       		.uleb128 0x27
+ 5567 1839 6F757400 		.string	"out"
+ 5568 183d 01       		.byte	0x1
+ 5569 183e EB01     		.value	0x1eb
+ 5570 1840 B4000000 		.long	0xb4
+ 5571 1844 03       		.byte	0x3
+ 5572 1845 91       		.byte	0x91
+ 5573 1846 987F     		.sleb128 -104
+ 5574 1848 26       		.uleb128 0x26
+ 5575 1849 00000000 		.long	.LASF369
+ 5576 184d 01       		.byte	0x1
+ 5577 184e EB01     		.value	0x1eb
+ 5578 1850 62000000 		.long	0x62
+ 5579 1854 03       		.byte	0x3
+ 5580 1855 91       		.byte	0x91
+ 5581 1856 947F     		.sleb128 -108
+ 5582 1858 24       		.uleb128 0x24
+ 5583 1859 637600   		.string	"cv"
+ 5584 185c 01       		.byte	0x1
+ 5585 185d EE01     		.value	0x1ee
+ 5586 185f 3D050000 		.long	0x53d
+ 5587 1863 03       		.byte	0x3
+ 5588 1864 91       		.byte	0x91
+ 5589 1865 B07F     		.sleb128 -80
+ 5590 1867 28       		.uleb128 0x28
+ 5591 1868 00000000 		.long	.LASF357
+ 5592 186c 01       		.byte	0x1
+ 5593 186d EF01     		.value	0x1ef
+ 5594 186f 3D050000 		.long	0x53d
+ 5595 1873 02       		.byte	0x2
+ 5596 1874 91       		.byte	0x91
+ 5597 1875 40       		.sleb128 -64
+ 5598 1876 24       		.uleb128 0x24
+ 5599 1877 70696E00 		.string	"pin"
+ 5600 187b 01       		.byte	0x1
+ 5601 187c F001     		.value	0x1f0
+ 5602 187e 40150000 		.long	0x1540
+ 5603 1882 02       		.byte	0x2
+ 5604 1883 91       		.byte	0x91
+ 5605 1884 50       		.sleb128 -48
+ 5606 1885 28       		.uleb128 0x28
+ 5607 1886 00000000 		.long	.LASF370
+ 5608 188a 01       		.byte	0x1
+ 5609 188b F101     		.value	0x1f1
+ 5610 188d 4B150000 		.long	0x154b
+ 5611 1891 02       		.byte	0x2
+ 5612 1892 91       		.byte	0x91
+
GAS LISTING /tmp/ccXzRABk.s 			page 128
+
+
+ 5613 1893 58       		.sleb128 -40
+ 5614 1894 29       		.uleb128 0x29
+ 5615 1895 00000000 		.quad	.LBB4
+ 5615      00000000 
+ 5616 189d 00000000 		.quad	.LBE4
+ 5616      00000000 
+ 5617 18a5 28       		.uleb128 0x28
+ 5618 18a6 00000000 		.long	.LASF374
+ 5619 18aa 01       		.byte	0x1
+ 5620 18ab F901     		.value	0x1f9
+ 5621 18ad 3D050000 		.long	0x53d
+ 5622 18b1 02       		.byte	0x2
+ 5623 18b2 91       		.byte	0x91
+ 5624 18b3 60       		.sleb128 -32
+ 5625 18b4 00       		.byte	0x0
+ 5626 18b5 00       		.byte	0x0
+ 5627 18b6 25       		.uleb128 0x25
+ 5628 18b7 00000000 		.long	.LASF377
+ 5629 18bb 01       		.byte	0x1
+ 5630 18bc 1002     		.value	0x210
+ 5631 18be 01       		.byte	0x1
+ 5632 18bf 7B000000 		.long	0x7b
+ 5633 18c3 00000000 		.quad	.LFB611
+ 5633      00000000 
+ 5634 18cb 00000000 		.quad	.LFE611
+ 5634      00000000 
+ 5635 18d3 00000000 		.long	.LLST21
+ 5636 18d7 56190000 		.long	0x1956
+ 5637 18db 26       		.uleb128 0x26
+ 5638 18dc 00000000 		.long	.LASF349
+ 5639 18e0 01       		.byte	0x1
+ 5640 18e1 1002     		.value	0x210
+ 5641 18e3 DE030000 		.long	0x3de
+ 5642 18e7 03       		.byte	0x3
+ 5643 18e8 91       		.byte	0x91
+ 5644 18e9 B87F     		.sleb128 -72
+ 5645 18eb 27       		.uleb128 0x27
+ 5646 18ec 696E00   		.string	"in"
+ 5647 18ef 01       		.byte	0x1
+ 5648 18f0 1002     		.value	0x210
+ 5649 18f2 1F040000 		.long	0x41f
+ 5650 18f6 03       		.byte	0x3
+ 5651 18f7 91       		.byte	0x91
+ 5652 18f8 B07F     		.sleb128 -80
+ 5653 18fa 27       		.uleb128 0x27
+ 5654 18fb 6F757400 		.string	"out"
+ 5655 18ff 01       		.byte	0x1
+ 5656 1900 1002     		.value	0x210
+ 5657 1902 B4000000 		.long	0xb4
+ 5658 1906 03       		.byte	0x3
+ 5659 1907 91       		.byte	0x91
+ 5660 1908 A87F     		.sleb128 -88
+ 5661 190a 26       		.uleb128 0x26
+ 5662 190b 00000000 		.long	.LASF369
+ 5663 190f 01       		.byte	0x1
+ 5664 1910 1002     		.value	0x210
+ 5665 1912 62000000 		.long	0x62
+
GAS LISTING /tmp/ccXzRABk.s 			page 129
+
+
+ 5666 1916 03       		.byte	0x3
+ 5667 1917 91       		.byte	0x91
+ 5668 1918 A47F     		.sleb128 -92
+ 5669 191a 24       		.uleb128 0x24
+ 5670 191b 637600   		.string	"cv"
+ 5671 191e 01       		.byte	0x1
+ 5672 191f 1302     		.value	0x213
+ 5673 1921 3D050000 		.long	0x53d
+ 5674 1925 02       		.byte	0x2
+ 5675 1926 91       		.byte	0x91
+ 5676 1927 40       		.sleb128 -64
+ 5677 1928 28       		.uleb128 0x28
+ 5678 1929 00000000 		.long	.LASF357
+ 5679 192d 01       		.byte	0x1
+ 5680 192e 1402     		.value	0x214
+ 5681 1930 3D050000 		.long	0x53d
+ 5682 1934 02       		.byte	0x2
+ 5683 1935 91       		.byte	0x91
+ 5684 1936 50       		.sleb128 -48
+ 5685 1937 24       		.uleb128 0x24
+ 5686 1938 70696E00 		.string	"pin"
+ 5687 193c 01       		.byte	0x1
+ 5688 193d 1502     		.value	0x215
+ 5689 193f 40150000 		.long	0x1540
+ 5690 1943 02       		.byte	0x2
+ 5691 1944 91       		.byte	0x91
+ 5692 1945 60       		.sleb128 -32
+ 5693 1946 28       		.uleb128 0x28
+ 5694 1947 00000000 		.long	.LASF370
+ 5695 194b 01       		.byte	0x1
+ 5696 194c 1602     		.value	0x216
+ 5697 194e 4B150000 		.long	0x154b
+ 5698 1952 02       		.byte	0x2
+ 5699 1953 91       		.byte	0x91
+ 5700 1954 68       		.sleb128 -24
+ 5701 1955 00       		.byte	0x0
+ 5702 1956 25       		.uleb128 0x25
+ 5703 1957 00000000 		.long	.LASF378
+ 5704 195b 01       		.byte	0x1
+ 5705 195c 2E02     		.value	0x22e
+ 5706 195e 01       		.byte	0x1
+ 5707 195f 7B000000 		.long	0x7b
+ 5708 1963 00000000 		.quad	.LFB612
+ 5708      00000000 
+ 5709 196b 00000000 		.quad	.LFE612
+ 5709      00000000 
+ 5710 1973 00000000 		.long	.LLST22
+ 5711 1977 F6190000 		.long	0x19f6
+ 5712 197b 26       		.uleb128 0x26
+ 5713 197c 00000000 		.long	.LASF349
+ 5714 1980 01       		.byte	0x1
+ 5715 1981 2E02     		.value	0x22e
+ 5716 1983 DE030000 		.long	0x3de
+ 5717 1987 03       		.byte	0x3
+ 5718 1988 91       		.byte	0x91
+ 5719 1989 B87F     		.sleb128 -72
+ 5720 198b 27       		.uleb128 0x27
+
GAS LISTING /tmp/ccXzRABk.s 			page 130
+
+
+ 5721 198c 696E00   		.string	"in"
+ 5722 198f 01       		.byte	0x1
+ 5723 1990 2E02     		.value	0x22e
+ 5724 1992 1F040000 		.long	0x41f
+ 5725 1996 03       		.byte	0x3
+ 5726 1997 91       		.byte	0x91
+ 5727 1998 B07F     		.sleb128 -80
+ 5728 199a 27       		.uleb128 0x27
+ 5729 199b 6F757400 		.string	"out"
+ 5730 199f 01       		.byte	0x1
+ 5731 19a0 2E02     		.value	0x22e
+ 5732 19a2 B4000000 		.long	0xb4
+ 5733 19a6 03       		.byte	0x3
+ 5734 19a7 91       		.byte	0x91
+ 5735 19a8 A87F     		.sleb128 -88
+ 5736 19aa 26       		.uleb128 0x26
+ 5737 19ab 00000000 		.long	.LASF369
+ 5738 19af 01       		.byte	0x1
+ 5739 19b0 2E02     		.value	0x22e
+ 5740 19b2 62000000 		.long	0x62
+ 5741 19b6 03       		.byte	0x3
+ 5742 19b7 91       		.byte	0x91
+ 5743 19b8 A47F     		.sleb128 -92
+ 5744 19ba 24       		.uleb128 0x24
+ 5745 19bb 637600   		.string	"cv"
+ 5746 19be 01       		.byte	0x1
+ 5747 19bf 3102     		.value	0x231
+ 5748 19c1 3D050000 		.long	0x53d
+ 5749 19c5 02       		.byte	0x2
+ 5750 19c6 91       		.byte	0x91
+ 5751 19c7 40       		.sleb128 -64
+ 5752 19c8 28       		.uleb128 0x28
+ 5753 19c9 00000000 		.long	.LASF357
+ 5754 19cd 01       		.byte	0x1
+ 5755 19ce 3202     		.value	0x232
+ 5756 19d0 3D050000 		.long	0x53d
+ 5757 19d4 02       		.byte	0x2
+ 5758 19d5 91       		.byte	0x91
+ 5759 19d6 50       		.sleb128 -48
+ 5760 19d7 24       		.uleb128 0x24
+ 5761 19d8 70696E00 		.string	"pin"
+ 5762 19dc 01       		.byte	0x1
+ 5763 19dd 3302     		.value	0x233
+ 5764 19df 40150000 		.long	0x1540
+ 5765 19e3 02       		.byte	0x2
+ 5766 19e4 91       		.byte	0x91
+ 5767 19e5 60       		.sleb128 -32
+ 5768 19e6 28       		.uleb128 0x28
+ 5769 19e7 00000000 		.long	.LASF370
+ 5770 19eb 01       		.byte	0x1
+ 5771 19ec 3402     		.value	0x234
+ 5772 19ee 4B150000 		.long	0x154b
+ 5773 19f2 02       		.byte	0x2
+ 5774 19f3 91       		.byte	0x91
+ 5775 19f4 68       		.sleb128 -24
+ 5776 19f5 00       		.byte	0x0
+ 5777 19f6 25       		.uleb128 0x25
+
GAS LISTING /tmp/ccXzRABk.s 			page 131
+
+
+ 5778 19f7 00000000 		.long	.LASF379
+ 5779 19fb 01       		.byte	0x1
+ 5780 19fc 5102     		.value	0x251
+ 5781 19fe 01       		.byte	0x1
+ 5782 19ff 7B000000 		.long	0x7b
+ 5783 1a03 00000000 		.quad	.LFB613
+ 5783      00000000 
+ 5784 1a0b 00000000 		.quad	.LFE613
+ 5784      00000000 
+ 5785 1a13 00000000 		.long	.LLST23
+ 5786 1a17 961A0000 		.long	0x1a96
+ 5787 1a1b 26       		.uleb128 0x26
+ 5788 1a1c 00000000 		.long	.LASF349
+ 5789 1a20 01       		.byte	0x1
+ 5790 1a21 5102     		.value	0x251
+ 5791 1a23 DE030000 		.long	0x3de
+ 5792 1a27 03       		.byte	0x3
+ 5793 1a28 91       		.byte	0x91
+ 5794 1a29 B87F     		.sleb128 -72
+ 5795 1a2b 27       		.uleb128 0x27
+ 5796 1a2c 696E00   		.string	"in"
+ 5797 1a2f 01       		.byte	0x1
+ 5798 1a30 5102     		.value	0x251
+ 5799 1a32 1F040000 		.long	0x41f
+ 5800 1a36 03       		.byte	0x3
+ 5801 1a37 91       		.byte	0x91
+ 5802 1a38 B07F     		.sleb128 -80
+ 5803 1a3a 27       		.uleb128 0x27
+ 5804 1a3b 6F757400 		.string	"out"
+ 5805 1a3f 01       		.byte	0x1
+ 5806 1a40 5102     		.value	0x251
+ 5807 1a42 B4000000 		.long	0xb4
+ 5808 1a46 03       		.byte	0x3
+ 5809 1a47 91       		.byte	0x91
+ 5810 1a48 A87F     		.sleb128 -88
+ 5811 1a4a 26       		.uleb128 0x26
+ 5812 1a4b 00000000 		.long	.LASF369
+ 5813 1a4f 01       		.byte	0x1
+ 5814 1a50 5102     		.value	0x251
+ 5815 1a52 62000000 		.long	0x62
+ 5816 1a56 03       		.byte	0x3
+ 5817 1a57 91       		.byte	0x91
+ 5818 1a58 A47F     		.sleb128 -92
+ 5819 1a5a 24       		.uleb128 0x24
+ 5820 1a5b 637600   		.string	"cv"
+ 5821 1a5e 01       		.byte	0x1
+ 5822 1a5f 5402     		.value	0x254
+ 5823 1a61 3D050000 		.long	0x53d
+ 5824 1a65 02       		.byte	0x2
+ 5825 1a66 91       		.byte	0x91
+ 5826 1a67 40       		.sleb128 -64
+ 5827 1a68 28       		.uleb128 0x28
+ 5828 1a69 00000000 		.long	.LASF357
+ 5829 1a6d 01       		.byte	0x1
+ 5830 1a6e 5502     		.value	0x255
+ 5831 1a70 3D050000 		.long	0x53d
+ 5832 1a74 02       		.byte	0x2
+
GAS LISTING /tmp/ccXzRABk.s 			page 132
+
+
+ 5833 1a75 91       		.byte	0x91
+ 5834 1a76 50       		.sleb128 -48
+ 5835 1a77 24       		.uleb128 0x24
+ 5836 1a78 70696E00 		.string	"pin"
+ 5837 1a7c 01       		.byte	0x1
+ 5838 1a7d 5602     		.value	0x256
+ 5839 1a7f 40150000 		.long	0x1540
+ 5840 1a83 02       		.byte	0x2
+ 5841 1a84 91       		.byte	0x91
+ 5842 1a85 60       		.sleb128 -32
+ 5843 1a86 28       		.uleb128 0x28
+ 5844 1a87 00000000 		.long	.LASF370
+ 5845 1a8b 01       		.byte	0x1
+ 5846 1a8c 5702     		.value	0x257
+ 5847 1a8e 4B150000 		.long	0x154b
+ 5848 1a92 02       		.byte	0x2
+ 5849 1a93 91       		.byte	0x91
+ 5850 1a94 68       		.sleb128 -24
+ 5851 1a95 00       		.byte	0x0
+ 5852 1a96 25       		.uleb128 0x25
+ 5853 1a97 00000000 		.long	.LASF380
+ 5854 1a9b 01       		.byte	0x1
+ 5855 1a9c 6F02     		.value	0x26f
+ 5856 1a9e 01       		.byte	0x1
+ 5857 1a9f 7B000000 		.long	0x7b
+ 5858 1aa3 00000000 		.quad	.LFB614
+ 5858      00000000 
+ 5859 1aab 00000000 		.quad	.LFE614
+ 5859      00000000 
+ 5860 1ab3 00000000 		.long	.LLST24
+ 5861 1ab7 F71A0000 		.long	0x1af7
+ 5862 1abb 26       		.uleb128 0x26
+ 5863 1abc 00000000 		.long	.LASF349
+ 5864 1ac0 01       		.byte	0x1
+ 5865 1ac1 6F02     		.value	0x26f
+ 5866 1ac3 DE030000 		.long	0x3de
+ 5867 1ac7 02       		.byte	0x2
+ 5868 1ac8 91       		.byte	0x91
+ 5869 1ac9 58       		.sleb128 -40
+ 5870 1aca 27       		.uleb128 0x27
+ 5871 1acb 696E00   		.string	"in"
+ 5872 1ace 01       		.byte	0x1
+ 5873 1acf 6F02     		.value	0x26f
+ 5874 1ad1 1F040000 		.long	0x41f
+ 5875 1ad5 02       		.byte	0x2
+ 5876 1ad6 91       		.byte	0x91
+ 5877 1ad7 50       		.sleb128 -48
+ 5878 1ad8 27       		.uleb128 0x27
+ 5879 1ad9 6F757400 		.string	"out"
+ 5880 1add 01       		.byte	0x1
+ 5881 1ade 6F02     		.value	0x26f
+ 5882 1ae0 B4000000 		.long	0xb4
+ 5883 1ae4 02       		.byte	0x2
+ 5884 1ae5 91       		.byte	0x91
+ 5885 1ae6 48       		.sleb128 -56
+ 5886 1ae7 26       		.uleb128 0x26
+ 5887 1ae8 00000000 		.long	.LASF369
+
GAS LISTING /tmp/ccXzRABk.s 			page 133
+
+
+ 5888 1aec 01       		.byte	0x1
+ 5889 1aed 6F02     		.value	0x26f
+ 5890 1aef 62000000 		.long	0x62
+ 5891 1af3 02       		.byte	0x2
+ 5892 1af4 91       		.byte	0x91
+ 5893 1af5 44       		.sleb128 -60
+ 5894 1af6 00       		.byte	0x0
+ 5895 1af7 25       		.uleb128 0x25
+ 5896 1af8 00000000 		.long	.LASF381
+ 5897 1afc 01       		.byte	0x1
+ 5898 1afd 7D02     		.value	0x27d
+ 5899 1aff 01       		.byte	0x1
+ 5900 1b00 7B000000 		.long	0x7b
+ 5901 1b04 00000000 		.quad	.LFB615
+ 5901      00000000 
+ 5902 1b0c 00000000 		.quad	.LFE615
+ 5902      00000000 
+ 5903 1b14 00000000 		.long	.LLST25
+ 5904 1b18 801B0000 		.long	0x1b80
+ 5905 1b1c 26       		.uleb128 0x26
+ 5906 1b1d 00000000 		.long	.LASF349
+ 5907 1b21 01       		.byte	0x1
+ 5908 1b22 7D02     		.value	0x27d
+ 5909 1b24 DE030000 		.long	0x3de
+ 5910 1b28 02       		.byte	0x2
+ 5911 1b29 91       		.byte	0x91
+ 5912 1b2a 68       		.sleb128 -24
+ 5913 1b2b 27       		.uleb128 0x27
+ 5914 1b2c 696E00   		.string	"in"
+ 5915 1b2f 01       		.byte	0x1
+ 5916 1b30 7D02     		.value	0x27d
+ 5917 1b32 1F040000 		.long	0x41f
+ 5918 1b36 02       		.byte	0x2
+ 5919 1b37 91       		.byte	0x91
+ 5920 1b38 60       		.sleb128 -32
+ 5921 1b39 27       		.uleb128 0x27
+ 5922 1b3a 6F757400 		.string	"out"
+ 5923 1b3e 01       		.byte	0x1
+ 5924 1b3f 7D02     		.value	0x27d
+ 5925 1b41 B4000000 		.long	0xb4
+ 5926 1b45 02       		.byte	0x2
+ 5927 1b46 91       		.byte	0x91
+ 5928 1b47 58       		.sleb128 -40
+ 5929 1b48 26       		.uleb128 0x26
+ 5930 1b49 00000000 		.long	.LASF369
+ 5931 1b4d 01       		.byte	0x1
+ 5932 1b4e 7D02     		.value	0x27d
+ 5933 1b50 62000000 		.long	0x62
+ 5934 1b54 02       		.byte	0x2
+ 5935 1b55 91       		.byte	0x91
+ 5936 1b56 54       		.sleb128 -44
+ 5937 1b57 23       		.uleb128 0x23
+ 5938 1b58 00000000 		.long	.LASF353
+ 5939 1b5c 901B0000 		.long	0x1b90
+ 5940 1b60 01       		.byte	0x1
+ 5941 1b61 09       		.byte	0x9
+ 5942 1b62 03       		.byte	0x3
+
GAS LISTING /tmp/ccXzRABk.s 			page 134
+
+
+ 5943 1b63 00000000 		.quad	__PRETTY_FUNCTION__.7599
+ 5943      00000000 
+ 5944 1b6b 23       		.uleb128 0x23
+ 5945 1b6c 00000000 		.long	.LASF354
+ 5946 1b70 951B0000 		.long	0x1b95
+ 5947 1b74 01       		.byte	0x1
+ 5948 1b75 09       		.byte	0x9
+ 5949 1b76 03       		.byte	0x3
+ 5950 1b77 00000000 		.quad	__func__.7600
+ 5950      00000000 
+ 5951 1b7f 00       		.byte	0x0
+ 5952 1b80 1B       		.uleb128 0x1b
+ 5953 1b81 C1000000 		.long	0xc1
+ 5954 1b85 901B0000 		.long	0x1b90
+ 5955 1b89 17       		.uleb128 0x17
+ 5956 1b8a B1000000 		.long	0xb1
+ 5957 1b8e 17       		.byte	0x17
+ 5958 1b8f 00       		.byte	0x0
+ 5959 1b90 0B       		.uleb128 0xb
+ 5960 1b91 801B0000 		.long	0x1b80
+ 5961 1b95 0B       		.uleb128 0xb
+ 5962 1b96 801B0000 		.long	0x1b80
+ 5963 1b9a 25       		.uleb128 0x25
+ 5964 1b9b 00000000 		.long	.LASF382
+ 5965 1b9f 01       		.byte	0x1
+ 5966 1ba0 8402     		.value	0x284
+ 5967 1ba2 01       		.byte	0x1
+ 5968 1ba3 7B000000 		.long	0x7b
+ 5969 1ba7 00000000 		.quad	.LFB616
+ 5969      00000000 
+ 5970 1baf 00000000 		.quad	.LFE616
+ 5970      00000000 
+ 5971 1bb7 00000000 		.long	.LLST26
+ 5972 1bbb 231C0000 		.long	0x1c23
+ 5973 1bbf 26       		.uleb128 0x26
+ 5974 1bc0 00000000 		.long	.LASF349
+ 5975 1bc4 01       		.byte	0x1
+ 5976 1bc5 8402     		.value	0x284
+ 5977 1bc7 DE030000 		.long	0x3de
+ 5978 1bcb 02       		.byte	0x2
+ 5979 1bcc 91       		.byte	0x91
+ 5980 1bcd 68       		.sleb128 -24
+ 5981 1bce 27       		.uleb128 0x27
+ 5982 1bcf 696E00   		.string	"in"
+ 5983 1bd2 01       		.byte	0x1
+ 5984 1bd3 8402     		.value	0x284
+ 5985 1bd5 1F040000 		.long	0x41f
+ 5986 1bd9 02       		.byte	0x2
+ 5987 1bda 91       		.byte	0x91
+ 5988 1bdb 60       		.sleb128 -32
+ 5989 1bdc 27       		.uleb128 0x27
+ 5990 1bdd 6F757400 		.string	"out"
+ 5991 1be1 01       		.byte	0x1
+ 5992 1be2 8402     		.value	0x284
+ 5993 1be4 B4000000 		.long	0xb4
+ 5994 1be8 02       		.byte	0x2
+ 5995 1be9 91       		.byte	0x91
+
GAS LISTING /tmp/ccXzRABk.s 			page 135
+
+
+ 5996 1bea 58       		.sleb128 -40
+ 5997 1beb 26       		.uleb128 0x26
+ 5998 1bec 00000000 		.long	.LASF369
+ 5999 1bf0 01       		.byte	0x1
+ 6000 1bf1 8402     		.value	0x284
+ 6001 1bf3 62000000 		.long	0x62
+ 6002 1bf7 02       		.byte	0x2
+ 6003 1bf8 91       		.byte	0x91
+ 6004 1bf9 54       		.sleb128 -44
+ 6005 1bfa 23       		.uleb128 0x23
+ 6006 1bfb 00000000 		.long	.LASF353
+ 6007 1bff 231C0000 		.long	0x1c23
+ 6008 1c03 01       		.byte	0x1
+ 6009 1c04 09       		.byte	0x9
+ 6010 1c05 03       		.byte	0x3
+ 6011 1c06 00000000 		.quad	__PRETTY_FUNCTION__.7609
+ 6011      00000000 
+ 6012 1c0e 23       		.uleb128 0x23
+ 6013 1c0f 00000000 		.long	.LASF354
+ 6014 1c13 281C0000 		.long	0x1c28
+ 6015 1c17 01       		.byte	0x1
+ 6016 1c18 09       		.byte	0x9
+ 6017 1c19 03       		.byte	0x3
+ 6018 1c1a 00000000 		.quad	__func__.7610
+ 6018      00000000 
+ 6019 1c22 00       		.byte	0x0
+ 6020 1c23 0B       		.uleb128 0xb
+ 6021 1c24 801B0000 		.long	0x1b80
+ 6022 1c28 0B       		.uleb128 0xb
+ 6023 1c29 801B0000 		.long	0x1b80
+ 6024 1c2d 25       		.uleb128 0x25
+ 6025 1c2e 00000000 		.long	.LASF383
+ 6026 1c32 01       		.byte	0x1
+ 6027 1c33 A702     		.value	0x2a7
+ 6028 1c35 01       		.byte	0x1
+ 6029 1c36 7B000000 		.long	0x7b
+ 6030 1c3a 00000000 		.quad	.LFB617
+ 6030      00000000 
+ 6031 1c42 00000000 		.quad	.LFE617
+ 6031      00000000 
+ 6032 1c4a 00000000 		.long	.LLST27
+ 6033 1c4e A81C0000 		.long	0x1ca8
+ 6034 1c52 26       		.uleb128 0x26
+ 6035 1c53 00000000 		.long	.LASF384
+ 6036 1c57 01       		.byte	0x1
+ 6037 1c58 A702     		.value	0x2a7
+ 6038 1c5a A81C0000 		.long	0x1ca8
+ 6039 1c5e 02       		.byte	0x2
+ 6040 1c5f 91       		.byte	0x91
+ 6041 1c60 58       		.sleb128 -40
+ 6042 1c61 26       		.uleb128 0x26
+ 6043 1c62 00000000 		.long	.LASF46
+ 6044 1c66 01       		.byte	0x1
+ 6045 1c67 A802     		.value	0x2a8
+ 6046 1c69 AE1C0000 		.long	0x1cae
+ 6047 1c6d 02       		.byte	0x2
+ 6048 1c6e 91       		.byte	0x91
+
GAS LISTING /tmp/ccXzRABk.s 			page 136
+
+
+ 6049 1c6f 50       		.sleb128 -48
+ 6050 1c70 24       		.uleb128 0x24
+ 6051 1c71 6F626A00 		.string	"obj"
+ 6052 1c75 01       		.byte	0x1
+ 6053 1c76 AA02     		.value	0x2aa
+ 6054 1c78 B91C0000 		.long	0x1cb9
+ 6055 1c7c 02       		.byte	0x2
+ 6056 1c7d 91       		.byte	0x91
+ 6057 1c7e 68       		.sleb128 -24
+ 6058 1c7f 23       		.uleb128 0x23
+ 6059 1c80 00000000 		.long	.LASF353
+ 6060 1c84 CF1C0000 		.long	0x1ccf
+ 6061 1c88 01       		.byte	0x1
+ 6062 1c89 09       		.byte	0x9
+ 6063 1c8a 03       		.byte	0x3
+ 6064 1c8b 00000000 		.quad	__PRETTY_FUNCTION__.7619
+ 6064      00000000 
+ 6065 1c93 23       		.uleb128 0x23
+ 6066 1c94 00000000 		.long	.LASF354
+ 6067 1c98 D41C0000 		.long	0x1cd4
+ 6068 1c9c 01       		.byte	0x1
+ 6069 1c9d 09       		.byte	0x9
+ 6070 1c9e 03       		.byte	0x3
+ 6071 1c9f 00000000 		.quad	__func__.7620
+ 6071      00000000 
+ 6072 1ca7 00       		.byte	0x0
+ 6073 1ca8 0A       		.uleb128 0xa
+ 6074 1ca9 08       		.byte	0x8
+ 6075 1caa DE030000 		.long	0x3de
+ 6076 1cae 0A       		.uleb128 0xa
+ 6077 1caf 08       		.byte	0x8
+ 6078 1cb0 B41C0000 		.long	0x1cb4
+ 6079 1cb4 0B       		.uleb128 0xb
+ 6080 1cb5 98080000 		.long	0x898
+ 6081 1cb9 0A       		.uleb128 0xa
+ 6082 1cba 08       		.byte	0x8
+ 6083 1cbb CE070000 		.long	0x7ce
+ 6084 1cbf 1B       		.uleb128 0x1b
+ 6085 1cc0 C1000000 		.long	0xc1
+ 6086 1cc4 CF1C0000 		.long	0x1ccf
+ 6087 1cc8 17       		.uleb128 0x17
+ 6088 1cc9 B1000000 		.long	0xb1
+ 6089 1ccd 15       		.byte	0x15
+ 6090 1cce 00       		.byte	0x0
+ 6091 1ccf 0B       		.uleb128 0xb
+ 6092 1cd0 BF1C0000 		.long	0x1cbf
+ 6093 1cd4 0B       		.uleb128 0xb
+ 6094 1cd5 BF1C0000 		.long	0x1cbf
+ 6095 1cd9 25       		.uleb128 0x25
+ 6096 1cda 00000000 		.long	.LASF385
+ 6097 1cde 01       		.byte	0x1
+ 6098 1cdf B402     		.value	0x2b4
+ 6099 1ce1 01       		.byte	0x1
+ 6100 1ce2 7B000000 		.long	0x7b
+ 6101 1ce6 00000000 		.quad	.LFB618
+ 6101      00000000 
+ 6102 1cee 00000000 		.quad	.LFE618
+
GAS LISTING /tmp/ccXzRABk.s 			page 137
+
+
+ 6102      00000000 
+ 6103 1cf6 00000000 		.long	.LLST28
+ 6104 1cfa 3B1D0000 		.long	0x1d3b
+ 6105 1cfe 26       		.uleb128 0x26
+ 6106 1cff 00000000 		.long	.LASF349
+ 6107 1d03 01       		.byte	0x1
+ 6108 1d04 B402     		.value	0x2b4
+ 6109 1d06 DE030000 		.long	0x3de
+ 6110 1d0a 02       		.byte	0x2
+ 6111 1d0b 91       		.byte	0x91
+ 6112 1d0c 58       		.sleb128 -40
+ 6113 1d0d 26       		.uleb128 0x26
+ 6114 1d0e 00000000 		.long	.LASF46
+ 6115 1d12 01       		.byte	0x1
+ 6116 1d13 B502     		.value	0x2b5
+ 6117 1d15 AE1C0000 		.long	0x1cae
+ 6118 1d19 02       		.byte	0x2
+ 6119 1d1a 91       		.byte	0x91
+ 6120 1d1b 50       		.sleb128 -48
+ 6121 1d1c 24       		.uleb128 0x24
+ 6122 1d1d 64616400 		.string	"dad"
+ 6123 1d21 01       		.byte	0x1
+ 6124 1d22 B702     		.value	0x2b7
+ 6125 1d24 3B1D0000 		.long	0x1d3b
+ 6126 1d28 02       		.byte	0x2
+ 6127 1d29 91       		.byte	0x91
+ 6128 1d2a 60       		.sleb128 -32
+ 6129 1d2b 24       		.uleb128 0x24
+ 6130 1d2c 61657300 		.string	"aes"
+ 6131 1d30 01       		.byte	0x1
+ 6132 1d31 B802     		.value	0x2b8
+ 6133 1d33 B91C0000 		.long	0x1cb9
+ 6134 1d37 02       		.byte	0x2
+ 6135 1d38 91       		.byte	0x91
+ 6136 1d39 68       		.sleb128 -24
+ 6137 1d3a 00       		.byte	0x0
+ 6138 1d3b 0A       		.uleb128 0xa
+ 6139 1d3c 08       		.byte	0x8
+ 6140 1d3d 54010000 		.long	0x154
+ 6141 1d41 25       		.uleb128 0x25
+ 6142 1d42 00000000 		.long	.LASF386
+ 6143 1d46 01       		.byte	0x1
+ 6144 1d47 CA02     		.value	0x2ca
+ 6145 1d49 01       		.byte	0x1
+ 6146 1d4a 7B000000 		.long	0x7b
+ 6147 1d4e 00000000 		.quad	.LFB619
+ 6147      00000000 
+ 6148 1d56 00000000 		.quad	.LFE619
+ 6148      00000000 
+ 6149 1d5e 00000000 		.long	.LLST29
+ 6150 1d62 BC1D0000 		.long	0x1dbc
+ 6151 1d66 26       		.uleb128 0x26
+ 6152 1d67 00000000 		.long	.LASF384
+ 6153 1d6b 01       		.byte	0x1
+ 6154 1d6c CA02     		.value	0x2ca
+ 6155 1d6e A81C0000 		.long	0x1ca8
+ 6156 1d72 02       		.byte	0x2
+
GAS LISTING /tmp/ccXzRABk.s 			page 138
+
+
+ 6157 1d73 91       		.byte	0x91
+ 6158 1d74 58       		.sleb128 -40
+ 6159 1d75 26       		.uleb128 0x26
+ 6160 1d76 00000000 		.long	.LASF46
+ 6161 1d7a 01       		.byte	0x1
+ 6162 1d7b CB02     		.value	0x2cb
+ 6163 1d7d AE1C0000 		.long	0x1cae
+ 6164 1d81 02       		.byte	0x2
+ 6165 1d82 91       		.byte	0x91
+ 6166 1d83 50       		.sleb128 -48
+ 6167 1d84 24       		.uleb128 0x24
+ 6168 1d85 6F626A00 		.string	"obj"
+ 6169 1d89 01       		.byte	0x1
+ 6170 1d8a CD02     		.value	0x2cd
+ 6171 1d8c BC1D0000 		.long	0x1dbc
+ 6172 1d90 02       		.byte	0x2
+ 6173 1d91 91       		.byte	0x91
+ 6174 1d92 68       		.sleb128 -24
+ 6175 1d93 23       		.uleb128 0x23
+ 6176 1d94 00000000 		.long	.LASF353
+ 6177 1d98 D21D0000 		.long	0x1dd2
+ 6178 1d9c 01       		.byte	0x1
+ 6179 1d9d 09       		.byte	0x9
+ 6180 1d9e 03       		.byte	0x3
+ 6181 1d9f 00000000 		.quad	__PRETTY_FUNCTION__.7646
+ 6181      00000000 
+ 6182 1da7 23       		.uleb128 0x23
+ 6183 1da8 00000000 		.long	.LASF354
+ 6184 1dac D71D0000 		.long	0x1dd7
+ 6185 1db0 01       		.byte	0x1
+ 6186 1db1 09       		.byte	0x9
+ 6187 1db2 03       		.byte	0x3
+ 6188 1db3 00000000 		.quad	__func__.7647
+ 6188      00000000 
+ 6189 1dbb 00       		.byte	0x0
+ 6190 1dbc 0A       		.uleb128 0xa
+ 6191 1dbd 08       		.byte	0x8
+ 6192 1dbe 30080000 		.long	0x830
+ 6193 1dc2 1B       		.uleb128 0x1b
+ 6194 1dc3 C1000000 		.long	0xc1
+ 6195 1dc7 D21D0000 		.long	0x1dd2
+ 6196 1dcb 17       		.uleb128 0x17
+ 6197 1dcc B1000000 		.long	0xb1
+ 6198 1dd0 16       		.byte	0x16
+ 6199 1dd1 00       		.byte	0x0
+ 6200 1dd2 0B       		.uleb128 0xb
+ 6201 1dd3 C21D0000 		.long	0x1dc2
+ 6202 1dd7 0B       		.uleb128 0xb
+ 6203 1dd8 C21D0000 		.long	0x1dc2
+ 6204 1ddc 25       		.uleb128 0x25
+ 6205 1ddd 00000000 		.long	.LASF387
+ 6206 1de1 01       		.byte	0x1
+ 6207 1de2 D702     		.value	0x2d7
+ 6208 1de4 01       		.byte	0x1
+ 6209 1de5 7B000000 		.long	0x7b
+ 6210 1de9 00000000 		.quad	.LFB620
+ 6210      00000000 
+
GAS LISTING /tmp/ccXzRABk.s 			page 139
+
+
+ 6211 1df1 00000000 		.quad	.LFE620
+ 6211      00000000 
+ 6212 1df9 00000000 		.long	.LLST30
+ 6213 1dfd 3E1E0000 		.long	0x1e3e
+ 6214 1e01 26       		.uleb128 0x26
+ 6215 1e02 00000000 		.long	.LASF349
+ 6216 1e06 01       		.byte	0x1
+ 6217 1e07 D702     		.value	0x2d7
+ 6218 1e09 DE030000 		.long	0x3de
+ 6219 1e0d 02       		.byte	0x2
+ 6220 1e0e 91       		.byte	0x91
+ 6221 1e0f 58       		.sleb128 -40
+ 6222 1e10 26       		.uleb128 0x26
+ 6223 1e11 00000000 		.long	.LASF46
+ 6224 1e15 01       		.byte	0x1
+ 6225 1e16 D802     		.value	0x2d8
+ 6226 1e18 AE1C0000 		.long	0x1cae
+ 6227 1e1c 02       		.byte	0x2
+ 6228 1e1d 91       		.byte	0x91
+ 6229 1e1e 50       		.sleb128 -48
+ 6230 1e1f 24       		.uleb128 0x24
+ 6231 1e20 64616400 		.string	"dad"
+ 6232 1e24 01       		.byte	0x1
+ 6233 1e25 DA02     		.value	0x2da
+ 6234 1e27 3B1D0000 		.long	0x1d3b
+ 6235 1e2b 02       		.byte	0x2
+ 6236 1e2c 91       		.byte	0x91
+ 6237 1e2d 60       		.sleb128 -32
+ 6238 1e2e 28       		.uleb128 0x28
+ 6239 1e2f 00000000 		.long	.LASF388
+ 6240 1e33 01       		.byte	0x1
+ 6241 1e34 DB02     		.value	0x2db
+ 6242 1e36 BC1D0000 		.long	0x1dbc
+ 6243 1e3a 02       		.byte	0x2
+ 6244 1e3b 91       		.byte	0x91
+ 6245 1e3c 68       		.sleb128 -24
+ 6246 1e3d 00       		.byte	0x0
+ 6247 1e3e 2A       		.uleb128 0x2a
+ 6248 1e3f 01       		.byte	0x1
+ 6249 1e40 00000000 		.long	.LASF396
+ 6250 1e44 01       		.byte	0x1
+ 6251 1e45 EC02     		.value	0x2ec
+ 6252 1e47 01       		.byte	0x1
+ 6253 1e48 7B000000 		.long	0x7b
+ 6254 1e4c 00000000 		.quad	.LFB621
+ 6254      00000000 
+ 6255 1e54 00000000 		.quad	.LFE621
+ 6255      00000000 
+ 6256 1e5c 00000000 		.long	.LLST31
+ 6257 1e60 E91E0000 		.long	0x1ee9
+ 6258 1e64 26       		.uleb128 0x26
+ 6259 1e65 00000000 		.long	.LASF389
+ 6260 1e69 01       		.byte	0x1
+ 6261 1e6a EC02     		.value	0x2ec
+ 6262 1e6c E91E0000 		.long	0x1ee9
+ 6263 1e70 02       		.byte	0x2
+ 6264 1e71 91       		.byte	0x91
+
GAS LISTING /tmp/ccXzRABk.s 			page 140
+
+
+ 6265 1e72 48       		.sleb128 -56
+ 6266 1e73 26       		.uleb128 0x26
+ 6267 1e74 00000000 		.long	.LASF390
+ 6268 1e78 01       		.byte	0x1
+ 6269 1e79 EC02     		.value	0x2ec
+ 6270 1e7b 72080000 		.long	0x872
+ 6271 1e7f 02       		.byte	0x2
+ 6272 1e80 91       		.byte	0x91
+ 6273 1e81 44       		.sleb128 -60
+ 6274 1e82 24       		.uleb128 0x24
+ 6275 1e83 726300   		.string	"rc"
+ 6276 1e86 01       		.byte	0x1
+ 6277 1e87 EE02     		.value	0x2ee
+ 6278 1e89 7B000000 		.long	0x7b
+ 6279 1e8d 02       		.byte	0x2
+ 6280 1e8e 91       		.byte	0x91
+ 6281 1e8f 6C       		.sleb128 -20
+ 6282 1e90 28       		.uleb128 0x28
+ 6283 1e91 00000000 		.long	.LASF46
+ 6284 1e95 01       		.byte	0x1
+ 6285 1e96 EF02     		.value	0x2ef
+ 6286 1e98 EF1E0000 		.long	0x1eef
+ 6287 1e9c 02       		.byte	0x2
+ 6288 1e9d 91       		.byte	0x91
+ 6289 1e9e 60       		.sleb128 -32
+ 6290 1e9f 23       		.uleb128 0x23
+ 6291 1ea0 00000000 		.long	.LASF353
+ 6292 1ea4 051F0000 		.long	0x1f05
+ 6293 1ea8 01       		.byte	0x1
+ 6294 1ea9 09       		.byte	0x9
+ 6295 1eaa 03       		.byte	0x3
+ 6296 1eab 00000000 		.quad	__PRETTY_FUNCTION__.7674
+ 6296      00000000 
+ 6297 1eb3 23       		.uleb128 0x23
+ 6298 1eb4 00000000 		.long	.LASF354
+ 6299 1eb8 0A1F0000 		.long	0x1f0a
+ 6300 1ebc 01       		.byte	0x1
+ 6301 1ebd 09       		.byte	0x9
+ 6302 1ebe 03       		.byte	0x3
+ 6303 1ebf 00000000 		.quad	__func__.7675
+ 6303      00000000 
+ 6304 1ec7 29       		.uleb128 0x29
+ 6305 1ec8 00000000 		.quad	.LBB5
+ 6305      00000000 
+ 6306 1ed0 00000000 		.quad	.LBE5
+ 6306      00000000 
+ 6307 1ed8 24       		.uleb128 0x24
+ 6308 1ed9 6F626A00 		.string	"obj"
+ 6309 1edd 01       		.byte	0x1
+ 6310 1ede 0603     		.value	0x306
+ 6311 1ee0 DE030000 		.long	0x3de
+ 6312 1ee4 02       		.byte	0x2
+ 6313 1ee5 91       		.byte	0x91
+ 6314 1ee6 58       		.sleb128 -40
+ 6315 1ee7 00       		.byte	0x0
+ 6316 1ee8 00       		.byte	0x0
+ 6317 1ee9 0A       		.uleb128 0xa
+
GAS LISTING /tmp/ccXzRABk.s 			page 141
+
+
+ 6318 1eea 08       		.byte	0x8
+ 6319 1eeb 3B1D0000 		.long	0x1d3b
+ 6320 1eef 0A       		.uleb128 0xa
+ 6321 1ef0 08       		.byte	0x8
+ 6322 1ef1 98080000 		.long	0x898
+ 6323 1ef5 1B       		.uleb128 0x1b
+ 6324 1ef6 C1000000 		.long	0xc1
+ 6325 1efa 051F0000 		.long	0x1f05
+ 6326 1efe 17       		.uleb128 0x17
+ 6327 1eff B1000000 		.long	0xb1
+ 6328 1f03 11       		.byte	0x11
+ 6329 1f04 00       		.byte	0x0
+ 6330 1f05 0B       		.uleb128 0xb
+ 6331 1f06 F51E0000 		.long	0x1ef5
+ 6332 1f0a 0B       		.uleb128 0xb
+ 6333 1f0b F51E0000 		.long	0x1ef5
+ 6334 1f0f 28       		.uleb128 0x28
+ 6335 1f10 00000000 		.long	.LASF391
+ 6336 1f14 01       		.byte	0x1
+ 6337 1f15 8A02     		.value	0x28a
+ 6338 1f17 87020000 		.long	0x287
+ 6339 1f1b 09       		.byte	0x9
+ 6340 1f1c 03       		.byte	0x3
+ 6341 1f1d 00000000 		.quad	KCipherVecReg_vt_v1
+ 6341      00000000 
+ 6342 1f25 1B       		.uleb128 0x1b
+ 6343 1f26 C1000000 		.long	0xc1
+ 6344 1f2a 351F0000 		.long	0x1f35
+ 6345 1f2e 17       		.uleb128 0x17
+ 6346 1f2f B1000000 		.long	0xb1
+ 6347 1f33 0B       		.byte	0xb
+ 6348 1f34 00       		.byte	0x0
+ 6349 1f35 2B       		.uleb128 0x2b
+ 6350 1f36 00000000 		.long	.LASF397
+ 6351 1f3a 01       		.byte	0x1
+ 6352 1f3b 38       		.byte	0x38
+ 6353 1f3c 4B1F0000 		.long	0x1f4b
+ 6354 1f40 01       		.byte	0x1
+ 6355 1f41 09       		.byte	0x9
+ 6356 1f42 03       		.byte	0x3
+ 6357 1f43 00000000 		.quad	KCipherVecRegClassName
+ 6357      00000000 
+ 6358 1f4b 0B       		.uleb128 0xb
+ 6359 1f4c 251F0000 		.long	0x1f25
+ 6360 1f50 00       		.byte	0x0
+ 6361              		.section	.debug_abbrev
+ 6362 0000 01       		.uleb128 0x1
+ 6363 0001 11       		.uleb128 0x11
+ 6364 0002 01       		.byte	0x1
+ 6365 0003 25       		.uleb128 0x25
+ 6366 0004 0E       		.uleb128 0xe
+ 6367 0005 13       		.uleb128 0x13
+ 6368 0006 0B       		.uleb128 0xb
+ 6369 0007 03       		.uleb128 0x3
+ 6370 0008 0E       		.uleb128 0xe
+ 6371 0009 1B       		.uleb128 0x1b
+ 6372 000a 0E       		.uleb128 0xe
+
GAS LISTING /tmp/ccXzRABk.s 			page 142
+
+
+ 6373 000b 11       		.uleb128 0x11
+ 6374 000c 01       		.uleb128 0x1
+ 6375 000d 12       		.uleb128 0x12
+ 6376 000e 01       		.uleb128 0x1
+ 6377 000f 10       		.uleb128 0x10
+ 6378 0010 06       		.uleb128 0x6
+ 6379 0011 00       		.byte	0x0
+ 6380 0012 00       		.byte	0x0
+ 6381 0013 02       		.uleb128 0x2
+ 6382 0014 24       		.uleb128 0x24
+ 6383 0015 00       		.byte	0x0
+ 6384 0016 0B       		.uleb128 0xb
+ 6385 0017 0B       		.uleb128 0xb
+ 6386 0018 3E       		.uleb128 0x3e
+ 6387 0019 0B       		.uleb128 0xb
+ 6388 001a 03       		.uleb128 0x3
+ 6389 001b 0E       		.uleb128 0xe
+ 6390 001c 00       		.byte	0x0
+ 6391 001d 00       		.byte	0x0
+ 6392 001e 03       		.uleb128 0x3
+ 6393 001f 24       		.uleb128 0x24
+ 6394 0020 00       		.byte	0x0
+ 6395 0021 0B       		.uleb128 0xb
+ 6396 0022 0B       		.uleb128 0xb
+ 6397 0023 3E       		.uleb128 0x3e
+ 6398 0024 0B       		.uleb128 0xb
+ 6399 0025 03       		.uleb128 0x3
+ 6400 0026 08       		.uleb128 0x8
+ 6401 0027 00       		.byte	0x0
+ 6402 0028 00       		.byte	0x0
+ 6403 0029 04       		.uleb128 0x4
+ 6404 002a 16       		.uleb128 0x16
+ 6405 002b 00       		.byte	0x0
+ 6406 002c 03       		.uleb128 0x3
+ 6407 002d 0E       		.uleb128 0xe
+ 6408 002e 3A       		.uleb128 0x3a
+ 6409 002f 0B       		.uleb128 0xb
+ 6410 0030 3B       		.uleb128 0x3b
+ 6411 0031 0B       		.uleb128 0xb
+ 6412 0032 49       		.uleb128 0x49
+ 6413 0033 13       		.uleb128 0x13
+ 6414 0034 00       		.byte	0x0
+ 6415 0035 00       		.byte	0x0
+ 6416 0036 05       		.uleb128 0x5
+ 6417 0037 13       		.uleb128 0x13
+ 6418 0038 01       		.byte	0x1
+ 6419 0039 03       		.uleb128 0x3
+ 6420 003a 0E       		.uleb128 0xe
+ 6421 003b 0B       		.uleb128 0xb
+ 6422 003c 0B       		.uleb128 0xb
+ 6423 003d 3A       		.uleb128 0x3a
+ 6424 003e 0B       		.uleb128 0xb
+ 6425 003f 3B       		.uleb128 0x3b
+ 6426 0040 0B       		.uleb128 0xb
+ 6427 0041 01       		.uleb128 0x1
+ 6428 0042 13       		.uleb128 0x13
+ 6429 0043 00       		.byte	0x0
+
GAS LISTING /tmp/ccXzRABk.s 			page 143
+
+
+ 6430 0044 00       		.byte	0x0
+ 6431 0045 06       		.uleb128 0x6
+ 6432 0046 0D       		.uleb128 0xd
+ 6433 0047 00       		.byte	0x0
+ 6434 0048 03       		.uleb128 0x3
+ 6435 0049 0E       		.uleb128 0xe
+ 6436 004a 3A       		.uleb128 0x3a
+ 6437 004b 0B       		.uleb128 0xb
+ 6438 004c 3B       		.uleb128 0x3b
+ 6439 004d 0B       		.uleb128 0xb
+ 6440 004e 49       		.uleb128 0x49
+ 6441 004f 13       		.uleb128 0x13
+ 6442 0050 38       		.uleb128 0x38
+ 6443 0051 0A       		.uleb128 0xa
+ 6444 0052 00       		.byte	0x0
+ 6445 0053 00       		.byte	0x0
+ 6446 0054 07       		.uleb128 0x7
+ 6447 0055 35       		.uleb128 0x35
+ 6448 0056 00       		.byte	0x0
+ 6449 0057 49       		.uleb128 0x49
+ 6450 0058 13       		.uleb128 0x13
+ 6451 0059 00       		.byte	0x0
+ 6452 005a 00       		.byte	0x0
+ 6453 005b 08       		.uleb128 0x8
+ 6454 005c 24       		.uleb128 0x24
+ 6455 005d 00       		.byte	0x0
+ 6456 005e 0B       		.uleb128 0xb
+ 6457 005f 0B       		.uleb128 0xb
+ 6458 0060 3E       		.uleb128 0x3e
+ 6459 0061 0B       		.uleb128 0xb
+ 6460 0062 00       		.byte	0x0
+ 6461 0063 00       		.byte	0x0
+ 6462 0064 09       		.uleb128 0x9
+ 6463 0065 0F       		.uleb128 0xf
+ 6464 0066 00       		.byte	0x0
+ 6465 0067 0B       		.uleb128 0xb
+ 6466 0068 0B       		.uleb128 0xb
+ 6467 0069 00       		.byte	0x0
+ 6468 006a 00       		.byte	0x0
+ 6469 006b 0A       		.uleb128 0xa
+ 6470 006c 0F       		.uleb128 0xf
+ 6471 006d 00       		.byte	0x0
+ 6472 006e 0B       		.uleb128 0xb
+ 6473 006f 0B       		.uleb128 0xb
+ 6474 0070 49       		.uleb128 0x49
+ 6475 0071 13       		.uleb128 0x13
+ 6476 0072 00       		.byte	0x0
+ 6477 0073 00       		.byte	0x0
+ 6478 0074 0B       		.uleb128 0xb
+ 6479 0075 26       		.uleb128 0x26
+ 6480 0076 00       		.byte	0x0
+ 6481 0077 49       		.uleb128 0x49
+ 6482 0078 13       		.uleb128 0x13
+ 6483 0079 00       		.byte	0x0
+ 6484 007a 00       		.byte	0x0
+ 6485 007b 0C       		.uleb128 0xc
+ 6486 007c 04       		.uleb128 0x4
+
GAS LISTING /tmp/ccXzRABk.s 			page 144
+
+
+ 6487 007d 01       		.byte	0x1
+ 6488 007e 0B       		.uleb128 0xb
+ 6489 007f 0B       		.uleb128 0xb
+ 6490 0080 3A       		.uleb128 0x3a
+ 6491 0081 0B       		.uleb128 0xb
+ 6492 0082 3B       		.uleb128 0x3b
+ 6493 0083 0B       		.uleb128 0xb
+ 6494 0084 01       		.uleb128 0x1
+ 6495 0085 13       		.uleb128 0x13
+ 6496 0086 00       		.byte	0x0
+ 6497 0087 00       		.byte	0x0
+ 6498 0088 0D       		.uleb128 0xd
+ 6499 0089 28       		.uleb128 0x28
+ 6500 008a 00       		.byte	0x0
+ 6501 008b 03       		.uleb128 0x3
+ 6502 008c 0E       		.uleb128 0xe
+ 6503 008d 1C       		.uleb128 0x1c
+ 6504 008e 0D       		.uleb128 0xd
+ 6505 008f 00       		.byte	0x0
+ 6506 0090 00       		.byte	0x0
+ 6507 0091 0E       		.uleb128 0xe
+ 6508 0092 0D       		.uleb128 0xd
+ 6509 0093 00       		.byte	0x0
+ 6510 0094 03       		.uleb128 0x3
+ 6511 0095 08       		.uleb128 0x8
+ 6512 0096 3A       		.uleb128 0x3a
+ 6513 0097 0B       		.uleb128 0xb
+ 6514 0098 3B       		.uleb128 0x3b
+ 6515 0099 0B       		.uleb128 0xb
+ 6516 009a 49       		.uleb128 0x49
+ 6517 009b 13       		.uleb128 0x13
+ 6518 009c 38       		.uleb128 0x38
+ 6519 009d 0A       		.uleb128 0xa
+ 6520 009e 00       		.byte	0x0
+ 6521 009f 00       		.byte	0x0
+ 6522 00a0 0F       		.uleb128 0xf
+ 6523 00a1 15       		.uleb128 0x15
+ 6524 00a2 01       		.byte	0x1
+ 6525 00a3 27       		.uleb128 0x27
+ 6526 00a4 0C       		.uleb128 0xc
+ 6527 00a5 01       		.uleb128 0x1
+ 6528 00a6 13       		.uleb128 0x13
+ 6529 00a7 00       		.byte	0x0
+ 6530 00a8 00       		.byte	0x0
+ 6531 00a9 10       		.uleb128 0x10
+ 6532 00aa 05       		.uleb128 0x5
+ 6533 00ab 00       		.byte	0x0
+ 6534 00ac 49       		.uleb128 0x49
+ 6535 00ad 13       		.uleb128 0x13
+ 6536 00ae 00       		.byte	0x0
+ 6537 00af 00       		.byte	0x0
+ 6538 00b0 11       		.uleb128 0x11
+ 6539 00b1 15       		.uleb128 0x15
+ 6540 00b2 01       		.byte	0x1
+ 6541 00b3 27       		.uleb128 0x27
+ 6542 00b4 0C       		.uleb128 0xc
+ 6543 00b5 49       		.uleb128 0x49
+
GAS LISTING /tmp/ccXzRABk.s 			page 145
+
+
+ 6544 00b6 13       		.uleb128 0x13
+ 6545 00b7 01       		.uleb128 0x1
+ 6546 00b8 13       		.uleb128 0x13
+ 6547 00b9 00       		.byte	0x0
+ 6548 00ba 00       		.byte	0x0
+ 6549 00bb 12       		.uleb128 0x12
+ 6550 00bc 26       		.uleb128 0x26
+ 6551 00bd 00       		.byte	0x0
+ 6552 00be 00       		.byte	0x0
+ 6553 00bf 00       		.byte	0x0
+ 6554 00c0 13       		.uleb128 0x13
+ 6555 00c1 17       		.uleb128 0x17
+ 6556 00c2 01       		.byte	0x1
+ 6557 00c3 03       		.uleb128 0x3
+ 6558 00c4 0E       		.uleb128 0xe
+ 6559 00c5 0B       		.uleb128 0xb
+ 6560 00c6 0B       		.uleb128 0xb
+ 6561 00c7 3A       		.uleb128 0x3a
+ 6562 00c8 0B       		.uleb128 0xb
+ 6563 00c9 3B       		.uleb128 0x3b
+ 6564 00ca 0B       		.uleb128 0xb
+ 6565 00cb 01       		.uleb128 0x1
+ 6566 00cc 13       		.uleb128 0x13
+ 6567 00cd 00       		.byte	0x0
+ 6568 00ce 00       		.byte	0x0
+ 6569 00cf 14       		.uleb128 0x14
+ 6570 00d0 0D       		.uleb128 0xd
+ 6571 00d1 00       		.byte	0x0
+ 6572 00d2 03       		.uleb128 0x3
+ 6573 00d3 0E       		.uleb128 0xe
+ 6574 00d4 3A       		.uleb128 0x3a
+ 6575 00d5 0B       		.uleb128 0xb
+ 6576 00d6 3B       		.uleb128 0x3b
+ 6577 00d7 0B       		.uleb128 0xb
+ 6578 00d8 49       		.uleb128 0x49
+ 6579 00d9 13       		.uleb128 0x13
+ 6580 00da 00       		.byte	0x0
+ 6581 00db 00       		.byte	0x0
+ 6582 00dc 15       		.uleb128 0x15
+ 6583 00dd 0D       		.uleb128 0xd
+ 6584 00de 00       		.byte	0x0
+ 6585 00df 03       		.uleb128 0x3
+ 6586 00e0 08       		.uleb128 0x8
+ 6587 00e1 3A       		.uleb128 0x3a
+ 6588 00e2 0B       		.uleb128 0xb
+ 6589 00e3 3B       		.uleb128 0x3b
+ 6590 00e4 0B       		.uleb128 0xb
+ 6591 00e5 49       		.uleb128 0x49
+ 6592 00e6 13       		.uleb128 0x13
+ 6593 00e7 00       		.byte	0x0
+ 6594 00e8 00       		.byte	0x0
+ 6595 00e9 16       		.uleb128 0x16
+ 6596 00ea 01       		.uleb128 0x1
+ 6597 00eb 01       		.byte	0x1
+ 6598 00ec 8742     		.uleb128 0x2107
+ 6599 00ee 0C       		.uleb128 0xc
+ 6600 00ef 49       		.uleb128 0x49
+
GAS LISTING /tmp/ccXzRABk.s 			page 146
+
+
+ 6601 00f0 13       		.uleb128 0x13
+ 6602 00f1 01       		.uleb128 0x1
+ 6603 00f2 13       		.uleb128 0x13
+ 6604 00f3 00       		.byte	0x0
+ 6605 00f4 00       		.byte	0x0
+ 6606 00f5 17       		.uleb128 0x17
+ 6607 00f6 21       		.uleb128 0x21
+ 6608 00f7 00       		.byte	0x0
+ 6609 00f8 49       		.uleb128 0x49
+ 6610 00f9 13       		.uleb128 0x13
+ 6611 00fa 2F       		.uleb128 0x2f
+ 6612 00fb 0B       		.uleb128 0xb
+ 6613 00fc 00       		.byte	0x0
+ 6614 00fd 00       		.byte	0x0
+ 6615 00fe 18       		.uleb128 0x18
+ 6616 00ff 15       		.uleb128 0x15
+ 6617 0100 01       		.byte	0x1
+ 6618 0101 49       		.uleb128 0x49
+ 6619 0102 13       		.uleb128 0x13
+ 6620 0103 01       		.uleb128 0x1
+ 6621 0104 13       		.uleb128 0x13
+ 6622 0105 00       		.byte	0x0
+ 6623 0106 00       		.byte	0x0
+ 6624 0107 19       		.uleb128 0x19
+ 6625 0108 18       		.uleb128 0x18
+ 6626 0109 00       		.byte	0x0
+ 6627 010a 00       		.byte	0x0
+ 6628 010b 00       		.byte	0x0
+ 6629 010c 1A       		.uleb128 0x1a
+ 6630 010d 13       		.uleb128 0x13
+ 6631 010e 01       		.byte	0x1
+ 6632 010f 03       		.uleb128 0x3
+ 6633 0110 0E       		.uleb128 0xe
+ 6634 0111 0B       		.uleb128 0xb
+ 6635 0112 05       		.uleb128 0x5
+ 6636 0113 3A       		.uleb128 0x3a
+ 6637 0114 0B       		.uleb128 0xb
+ 6638 0115 3B       		.uleb128 0x3b
+ 6639 0116 0B       		.uleb128 0xb
+ 6640 0117 01       		.uleb128 0x1
+ 6641 0118 13       		.uleb128 0x13
+ 6642 0119 00       		.byte	0x0
+ 6643 011a 00       		.byte	0x0
+ 6644 011b 1B       		.uleb128 0x1b
+ 6645 011c 01       		.uleb128 0x1
+ 6646 011d 01       		.byte	0x1
+ 6647 011e 49       		.uleb128 0x49
+ 6648 011f 13       		.uleb128 0x13
+ 6649 0120 01       		.uleb128 0x1
+ 6650 0121 13       		.uleb128 0x13
+ 6651 0122 00       		.byte	0x0
+ 6652 0123 00       		.byte	0x0
+ 6653 0124 1C       		.uleb128 0x1c
+ 6654 0125 04       		.uleb128 0x4
+ 6655 0126 01       		.byte	0x1
+ 6656 0127 03       		.uleb128 0x3
+ 6657 0128 0E       		.uleb128 0xe
+
GAS LISTING /tmp/ccXzRABk.s 			page 147
+
+
+ 6658 0129 0B       		.uleb128 0xb
+ 6659 012a 0B       		.uleb128 0xb
+ 6660 012b 3A       		.uleb128 0x3a
+ 6661 012c 0B       		.uleb128 0xb
+ 6662 012d 3B       		.uleb128 0x3b
+ 6663 012e 0B       		.uleb128 0xb
+ 6664 012f 01       		.uleb128 0x1
+ 6665 0130 13       		.uleb128 0x13
+ 6666 0131 00       		.byte	0x0
+ 6667 0132 00       		.byte	0x0
+ 6668 0133 1D       		.uleb128 0x1d
+ 6669 0134 04       		.uleb128 0x4
+ 6670 0135 01       		.byte	0x1
+ 6671 0136 03       		.uleb128 0x3
+ 6672 0137 0E       		.uleb128 0xe
+ 6673 0138 0B       		.uleb128 0xb
+ 6674 0139 0B       		.uleb128 0xb
+ 6675 013a 3A       		.uleb128 0x3a
+ 6676 013b 0B       		.uleb128 0xb
+ 6677 013c 3B       		.uleb128 0x3b
+ 6678 013d 05       		.uleb128 0x5
+ 6679 013e 01       		.uleb128 0x1
+ 6680 013f 13       		.uleb128 0x13
+ 6681 0140 00       		.byte	0x0
+ 6682 0141 00       		.byte	0x0
+ 6683 0142 1E       		.uleb128 0x1e
+ 6684 0143 2E       		.uleb128 0x2e
+ 6685 0144 01       		.byte	0x1
+ 6686 0145 03       		.uleb128 0x3
+ 6687 0146 0E       		.uleb128 0xe
+ 6688 0147 3A       		.uleb128 0x3a
+ 6689 0148 0B       		.uleb128 0xb
+ 6690 0149 3B       		.uleb128 0x3b
+ 6691 014a 0B       		.uleb128 0xb
+ 6692 014b 27       		.uleb128 0x27
+ 6693 014c 0C       		.uleb128 0xc
+ 6694 014d 49       		.uleb128 0x49
+ 6695 014e 13       		.uleb128 0x13
+ 6696 014f 11       		.uleb128 0x11
+ 6697 0150 01       		.uleb128 0x1
+ 6698 0151 12       		.uleb128 0x12
+ 6699 0152 01       		.uleb128 0x1
+ 6700 0153 40       		.uleb128 0x40
+ 6701 0154 06       		.uleb128 0x6
+ 6702 0155 01       		.uleb128 0x1
+ 6703 0156 13       		.uleb128 0x13
+ 6704 0157 00       		.byte	0x0
+ 6705 0158 00       		.byte	0x0
+ 6706 0159 1F       		.uleb128 0x1f
+ 6707 015a 05       		.uleb128 0x5
+ 6708 015b 00       		.byte	0x0
+ 6709 015c 03       		.uleb128 0x3
+ 6710 015d 0E       		.uleb128 0xe
+ 6711 015e 3A       		.uleb128 0x3a
+ 6712 015f 0B       		.uleb128 0xb
+ 6713 0160 3B       		.uleb128 0x3b
+ 6714 0161 0B       		.uleb128 0xb
+
GAS LISTING /tmp/ccXzRABk.s 			page 148
+
+
+ 6715 0162 49       		.uleb128 0x49
+ 6716 0163 13       		.uleb128 0x13
+ 6717 0164 02       		.uleb128 0x2
+ 6718 0165 0A       		.uleb128 0xa
+ 6719 0166 00       		.byte	0x0
+ 6720 0167 00       		.byte	0x0
+ 6721 0168 20       		.uleb128 0x20
+ 6722 0169 34       		.uleb128 0x34
+ 6723 016a 00       		.byte	0x0
+ 6724 016b 03       		.uleb128 0x3
+ 6725 016c 08       		.uleb128 0x8
+ 6726 016d 3A       		.uleb128 0x3a
+ 6727 016e 0B       		.uleb128 0xb
+ 6728 016f 3B       		.uleb128 0x3b
+ 6729 0170 0B       		.uleb128 0xb
+ 6730 0171 49       		.uleb128 0x49
+ 6731 0172 13       		.uleb128 0x13
+ 6732 0173 02       		.uleb128 0x2
+ 6733 0174 0A       		.uleb128 0xa
+ 6734 0175 00       		.byte	0x0
+ 6735 0176 00       		.byte	0x0
+ 6736 0177 21       		.uleb128 0x21
+ 6737 0178 2E       		.uleb128 0x2e
+ 6738 0179 01       		.byte	0x1
+ 6739 017a 03       		.uleb128 0x3
+ 6740 017b 0E       		.uleb128 0xe
+ 6741 017c 3A       		.uleb128 0x3a
+ 6742 017d 0B       		.uleb128 0xb
+ 6743 017e 3B       		.uleb128 0x3b
+ 6744 017f 0B       		.uleb128 0xb
+ 6745 0180 27       		.uleb128 0x27
+ 6746 0181 0C       		.uleb128 0xc
+ 6747 0182 11       		.uleb128 0x11
+ 6748 0183 01       		.uleb128 0x1
+ 6749 0184 12       		.uleb128 0x12
+ 6750 0185 01       		.uleb128 0x1
+ 6751 0186 40       		.uleb128 0x40
+ 6752 0187 06       		.uleb128 0x6
+ 6753 0188 01       		.uleb128 0x1
+ 6754 0189 13       		.uleb128 0x13
+ 6755 018a 00       		.byte	0x0
+ 6756 018b 00       		.byte	0x0
+ 6757 018c 22       		.uleb128 0x22
+ 6758 018d 05       		.uleb128 0x5
+ 6759 018e 00       		.byte	0x0
+ 6760 018f 03       		.uleb128 0x3
+ 6761 0190 08       		.uleb128 0x8
+ 6762 0191 3A       		.uleb128 0x3a
+ 6763 0192 0B       		.uleb128 0xb
+ 6764 0193 3B       		.uleb128 0x3b
+ 6765 0194 0B       		.uleb128 0xb
+ 6766 0195 49       		.uleb128 0x49
+ 6767 0196 13       		.uleb128 0x13
+ 6768 0197 02       		.uleb128 0x2
+ 6769 0198 0A       		.uleb128 0xa
+ 6770 0199 00       		.byte	0x0
+ 6771 019a 00       		.byte	0x0
+
GAS LISTING /tmp/ccXzRABk.s 			page 149
+
+
+ 6772 019b 23       		.uleb128 0x23
+ 6773 019c 34       		.uleb128 0x34
+ 6774 019d 00       		.byte	0x0
+ 6775 019e 03       		.uleb128 0x3
+ 6776 019f 0E       		.uleb128 0xe
+ 6777 01a0 49       		.uleb128 0x49
+ 6778 01a1 13       		.uleb128 0x13
+ 6779 01a2 34       		.uleb128 0x34
+ 6780 01a3 0C       		.uleb128 0xc
+ 6781 01a4 02       		.uleb128 0x2
+ 6782 01a5 0A       		.uleb128 0xa
+ 6783 01a6 00       		.byte	0x0
+ 6784 01a7 00       		.byte	0x0
+ 6785 01a8 24       		.uleb128 0x24
+ 6786 01a9 34       		.uleb128 0x34
+ 6787 01aa 00       		.byte	0x0
+ 6788 01ab 03       		.uleb128 0x3
+ 6789 01ac 08       		.uleb128 0x8
+ 6790 01ad 3A       		.uleb128 0x3a
+ 6791 01ae 0B       		.uleb128 0xb
+ 6792 01af 3B       		.uleb128 0x3b
+ 6793 01b0 05       		.uleb128 0x5
+ 6794 01b1 49       		.uleb128 0x49
+ 6795 01b2 13       		.uleb128 0x13
+ 6796 01b3 02       		.uleb128 0x2
+ 6797 01b4 0A       		.uleb128 0xa
+ 6798 01b5 00       		.byte	0x0
+ 6799 01b6 00       		.byte	0x0
+ 6800 01b7 25       		.uleb128 0x25
+ 6801 01b8 2E       		.uleb128 0x2e
+ 6802 01b9 01       		.byte	0x1
+ 6803 01ba 03       		.uleb128 0x3
+ 6804 01bb 0E       		.uleb128 0xe
+ 6805 01bc 3A       		.uleb128 0x3a
+ 6806 01bd 0B       		.uleb128 0xb
+ 6807 01be 3B       		.uleb128 0x3b
+ 6808 01bf 05       		.uleb128 0x5
+ 6809 01c0 27       		.uleb128 0x27
+ 6810 01c1 0C       		.uleb128 0xc
+ 6811 01c2 49       		.uleb128 0x49
+ 6812 01c3 13       		.uleb128 0x13
+ 6813 01c4 11       		.uleb128 0x11
+ 6814 01c5 01       		.uleb128 0x1
+ 6815 01c6 12       		.uleb128 0x12
+ 6816 01c7 01       		.uleb128 0x1
+ 6817 01c8 40       		.uleb128 0x40
+ 6818 01c9 06       		.uleb128 0x6
+ 6819 01ca 01       		.uleb128 0x1
+ 6820 01cb 13       		.uleb128 0x13
+ 6821 01cc 00       		.byte	0x0
+ 6822 01cd 00       		.byte	0x0
+ 6823 01ce 26       		.uleb128 0x26
+ 6824 01cf 05       		.uleb128 0x5
+ 6825 01d0 00       		.byte	0x0
+ 6826 01d1 03       		.uleb128 0x3
+ 6827 01d2 0E       		.uleb128 0xe
+ 6828 01d3 3A       		.uleb128 0x3a
+
GAS LISTING /tmp/ccXzRABk.s 			page 150
+
+
+ 6829 01d4 0B       		.uleb128 0xb
+ 6830 01d5 3B       		.uleb128 0x3b
+ 6831 01d6 05       		.uleb128 0x5
+ 6832 01d7 49       		.uleb128 0x49
+ 6833 01d8 13       		.uleb128 0x13
+ 6834 01d9 02       		.uleb128 0x2
+ 6835 01da 0A       		.uleb128 0xa
+ 6836 01db 00       		.byte	0x0
+ 6837 01dc 00       		.byte	0x0
+ 6838 01dd 27       		.uleb128 0x27
+ 6839 01de 05       		.uleb128 0x5
+ 6840 01df 00       		.byte	0x0
+ 6841 01e0 03       		.uleb128 0x3
+ 6842 01e1 08       		.uleb128 0x8
+ 6843 01e2 3A       		.uleb128 0x3a
+ 6844 01e3 0B       		.uleb128 0xb
+ 6845 01e4 3B       		.uleb128 0x3b
+ 6846 01e5 05       		.uleb128 0x5
+ 6847 01e6 49       		.uleb128 0x49
+ 6848 01e7 13       		.uleb128 0x13
+ 6849 01e8 02       		.uleb128 0x2
+ 6850 01e9 0A       		.uleb128 0xa
+ 6851 01ea 00       		.byte	0x0
+ 6852 01eb 00       		.byte	0x0
+ 6853 01ec 28       		.uleb128 0x28
+ 6854 01ed 34       		.uleb128 0x34
+ 6855 01ee 00       		.byte	0x0
+ 6856 01ef 03       		.uleb128 0x3
+ 6857 01f0 0E       		.uleb128 0xe
+ 6858 01f1 3A       		.uleb128 0x3a
+ 6859 01f2 0B       		.uleb128 0xb
+ 6860 01f3 3B       		.uleb128 0x3b
+ 6861 01f4 05       		.uleb128 0x5
+ 6862 01f5 49       		.uleb128 0x49
+ 6863 01f6 13       		.uleb128 0x13
+ 6864 01f7 02       		.uleb128 0x2
+ 6865 01f8 0A       		.uleb128 0xa
+ 6866 01f9 00       		.byte	0x0
+ 6867 01fa 00       		.byte	0x0
+ 6868 01fb 29       		.uleb128 0x29
+ 6869 01fc 0B       		.uleb128 0xb
+ 6870 01fd 01       		.byte	0x1
+ 6871 01fe 11       		.uleb128 0x11
+ 6872 01ff 01       		.uleb128 0x1
+ 6873 0200 12       		.uleb128 0x12
+ 6874 0201 01       		.uleb128 0x1
+ 6875 0202 00       		.byte	0x0
+ 6876 0203 00       		.byte	0x0
+ 6877 0204 2A       		.uleb128 0x2a
+ 6878 0205 2E       		.uleb128 0x2e
+ 6879 0206 01       		.byte	0x1
+ 6880 0207 3F       		.uleb128 0x3f
+ 6881 0208 0C       		.uleb128 0xc
+ 6882 0209 03       		.uleb128 0x3
+ 6883 020a 0E       		.uleb128 0xe
+ 6884 020b 3A       		.uleb128 0x3a
+ 6885 020c 0B       		.uleb128 0xb
+
GAS LISTING /tmp/ccXzRABk.s 			page 151
+
+
+ 6886 020d 3B       		.uleb128 0x3b
+ 6887 020e 05       		.uleb128 0x5
+ 6888 020f 27       		.uleb128 0x27
+ 6889 0210 0C       		.uleb128 0xc
+ 6890 0211 49       		.uleb128 0x49
+ 6891 0212 13       		.uleb128 0x13
+ 6892 0213 11       		.uleb128 0x11
+ 6893 0214 01       		.uleb128 0x1
+ 6894 0215 12       		.uleb128 0x12
+ 6895 0216 01       		.uleb128 0x1
+ 6896 0217 40       		.uleb128 0x40
+ 6897 0218 06       		.uleb128 0x6
+ 6898 0219 01       		.uleb128 0x1
+ 6899 021a 13       		.uleb128 0x13
+ 6900 021b 00       		.byte	0x0
+ 6901 021c 00       		.byte	0x0
+ 6902 021d 2B       		.uleb128 0x2b
+ 6903 021e 34       		.uleb128 0x34
+ 6904 021f 00       		.byte	0x0
+ 6905 0220 03       		.uleb128 0x3
+ 6906 0221 0E       		.uleb128 0xe
+ 6907 0222 3A       		.uleb128 0x3a
+ 6908 0223 0B       		.uleb128 0xb
+ 6909 0224 3B       		.uleb128 0x3b
+ 6910 0225 0B       		.uleb128 0xb
+ 6911 0226 49       		.uleb128 0x49
+ 6912 0227 13       		.uleb128 0x13
+ 6913 0228 3F       		.uleb128 0x3f
+ 6914 0229 0C       		.uleb128 0xc
+ 6915 022a 02       		.uleb128 0x2
+ 6916 022b 0A       		.uleb128 0xa
+ 6917 022c 00       		.byte	0x0
+ 6918 022d 00       		.byte	0x0
+ 6919 022e 00       		.byte	0x0
+ 6920              		.section	.debug_pubnames,"", at progbits
+ 6921 0000 3F000000 		.long	0x3f
+ 6922 0004 0200     		.value	0x2
+ 6923 0006 00000000 		.long	.Ldebug_info0
+ 6924 000a 511F0000 		.long	0x1f51
+ 6925 000e 3E1E0000 		.long	0x1e3e
+ 6926 0012 4B436970 		.string	"KCipherVecRegMake"
+ 6926      68657256 
+ 6926      65635265 
+ 6926      674D616B 
+ 6926      6500
+ 6927 0024 351F0000 		.long	0x1f35
+ 6928 0028 4B436970 		.string	"KCipherVecRegClassName"
+ 6928      68657256 
+ 6928      65635265 
+ 6928      67436C61 
+ 6928      73734E61 
+ 6929 003f 00000000 		.long	0x0
+ 6930              		.section	.debug_aranges,"", at progbits
+ 6931 0000 2C000000 		.long	0x2c
+ 6932 0004 0200     		.value	0x2
+ 6933 0006 00000000 		.long	.Ldebug_info0
+ 6934 000a 08       		.byte	0x8
+
GAS LISTING /tmp/ccXzRABk.s 			page 152
+
+
+ 6935 000b 00       		.byte	0x0
+ 6936 000c 0000     		.value	0x0
+ 6937 000e 0000     		.value	0x0
+ 6938 0010 00000000 		.quad	.Ltext0
+ 6938      00000000 
+ 6939 0018 64100000 		.quad	.Letext0-.Ltext0
+ 6939      00000000 
+ 6940 0020 00000000 		.quad	0x0
+ 6940      00000000 
+ 6941 0028 00000000 		.quad	0x0
+ 6941      00000000 
+ 6942              		.section	.debug_str,"MS", at progbits,1
+ 6943              	.LASF89:
+ 6944 0000 645F6B65 		.string	"d_key"
+ 6944      7900
+ 6945              	.LASF331:
+ 6946 0006 72634475 		.string	"rcDuplicate"
+ 6946      706C6963 
+ 6946      61746500 
+ 6947              	.LASF134:
+ 6948 0012 7263436F 		.string	"rcCondition"
+ 6948      6E646974 
+ 6948      696F6E00 
+ 6949              	.LASF248:
+ 6950 001e 7263456E 		.string	"rcEncrypting"
+ 6950      63727970 
+ 6950      74696E67 
+ 6950      00
+ 6951              	.LASF361:
+ 6952 002b 4B436970 		.string	"KCipherVecRegSetDecryptCounterFunc"
+ 6952      68657256 
+ 6952      65635265 
+ 6952      67536574 
+ 6952      44656372 
+ 6953              	.LASF207:
+ 6954 004e 72634F70 		.string	"rcOpening"
+ 6954      656E696E 
+ 6954      6700
+ 6955              	.LASF215:
+ 6956 0058 72635065 		.string	"rcPersisting"
+ 6956      72736973 
+ 6956      74696E67 
+ 6956      00
+ 6957              	.LASF253:
+ 6958 0065 72635365 		.string	"rcSending"
+ 6958      6E64696E 
+ 6958      6700
+ 6959              	.LASF45:
+ 6960 006f 4B436970 		.string	"KCipherVecReg"
+ 6960      68657256 
+ 6960      65635265 
+ 6960      6700
+ 6961              	.LASF247:
+ 6962 007d 72634170 		.string	"rcAppending"
+ 6962      70656E64 
+ 6962      696E6700 
+ 6963              	.LASF233:
+
GAS LISTING /tmp/ccXzRABk.s 			page 153
+
+
+ 6964 0089 72635369 		.string	"rcSignaling"
+ 6964      676E616C 
+ 6964      696E6700 
+ 6965              	.LASF14:
+ 6966 0095 4442475F 		.string	"DBG_BLAST"
+ 6966      424C4153 
+ 6966      5400
+ 6967              	.LASF289:
+ 6968 009f 72635369 		.string	"rcSignalSet"
+ 6968      676E616C 
+ 6968      53657400 
+ 6969              	.LASF235:
+ 6970 00ab 72634174 		.string	"rcAttaching"
+ 6970      74616368 
+ 6970      696E6700 
+ 6971              	.LASF167:
+ 6972 00b7 72635461 		.string	"rcTable"
+ 6972      626C6500 
+ 6973              	.LASF66:
+ 6974 00bf 64656372 		.string	"decrypt_cfb"
+ 6974      7970745F 
+ 6974      63666200 
+ 6975              	.LASF131:
+ 6976 00cb 72634275 		.string	"rcBuffer"
+ 6976      66666572 
+ 6976      00
+ 6977              	.LASF263:
+ 6978 00d4 72634D65 		.string	"rcMemory"
+ 6978      6D6F7279 
+ 6978      00
+ 6979              	.LASF196:
+ 6980 00dd 72634C6F 		.string	"rcLocking"
+ 6980      636B696E 
+ 6980      6700
+ 6981              	.LASF231:
+ 6982 00e7 72635061 		.string	"rcParsing"
+ 6982      7273696E 
+ 6982      6700
+ 6983              	.LASF260:
+ 6984 00f1 72635365 		.string	"rcSelf"
+ 6984      6C6600
+ 6985              	.LASF153:
+ 6986 00f8 72634D65 		.string	"rcMetadata"
+ 6986      74616461 
+ 6986      746100
+ 6987              	.LASF276:
+ 6988 0103 72634172 		.string	"rcArcHardLink"
+ 6988      63486172 
+ 6988      644C696E 
+ 6988      6B00
+ 6989              	.LASF348:
+ 6990 0111 4B436970 		.string	"KCipherVecRegDestroy"
+ 6990      68657256 
+ 6990      65635265 
+ 6990      67446573 
+ 6990      74726F79 
+ 6991              	.LASF102:
+
GAS LISTING /tmp/ccXzRABk.s 			page 154
+
+
+ 6992 0126 7263436F 		.string	"rcCont"
+ 6992      6E7400
+ 6993              	.LASF284:
+ 6994 012d 72634368 		.string	"rcChecksum"
+ 6994      65636B73 
+ 6994      756D00
+ 6995              	.LASF354:
+ 6996 0138 5F5F6675 		.string	"__func__"
+ 6996      6E635F5F 
+ 6996      00
+ 6997              	.LASF363:
+ 6998 0141 4B436970 		.string	"KCipherVecRegDecryptV1"
+ 6998      68657256 
+ 6998      65635265 
+ 6998      67446563 
+ 6998      72797074 
+ 6999              	.LASF328:
+ 7000 0158 7263546F 		.string	"rcTooShort"
+ 7000      6F53686F 
+ 7000      727400
+ 7001              	.LASF158:
+ 7002 0163 72635061 		.string	"rcPagemap"
+ 7002      67656D61 
+ 7002      7000
+ 7003              	.LASF110:
+ 7004 016d 72634170 		.string	"rcApp"
+ 7004      7000
+ 7005              	.LASF10:
+ 7006 0173 61746F6D 		.string	"atomic32_t"
+ 7006      69633332 
+ 7006      5F7400
+ 7007              	.LASF56:
+ 7008 017e 7365745F 		.string	"set_decrypt_ctr_func"
+ 7008      64656372 
+ 7008      7970745F 
+ 7008      6374725F 
+ 7008      66756E63 
+ 7009              	.LASF65:
+ 7010 0193 656E6372 		.string	"encrypt_cfb"
+ 7010      7970745F 
+ 7010      63666200 
+ 7011              	.LASF172:
+ 7012 019f 72635472 		.string	"rcTrie"
+ 7012      696500
+ 7013              	.LASF113:
+ 7014 01a6 72634C61 		.string	"rcLastModule_v1_0"
+ 7014      73744D6F 
+ 7014      64756C65 
+ 7014      5F76315F 
+ 7014      3000
+ 7015              	.LASF120:
+ 7016 01b8 72634C61 		.string	"rcLastModule_v1_1"
+ 7016      73744D6F 
+ 7016      64756C65 
+ 7016      5F76315F 
+ 7016      3100
+ 7017              	.LASF271:
+
GAS LISTING /tmp/ccXzRABk.s 			page 155
+
+
+ 7018 01ca 72634279 		.string	"rcByteOrder"
+ 7018      74654F72 
+ 7018      64657200 
+ 7019              	.LASF84:
+ 7020 01d6 4145534B 		.string	"AESKeySchedule"
+ 7020      65795363 
+ 7020      68656475 
+ 7020      6C6500
+ 7021              	.LASF332:
+ 7022 01e5 72634F75 		.string	"rcOutOfKDirectory"
+ 7022      744F664B 
+ 7022      44697265 
+ 7022      63746F72 
+ 7022      7900
+ 7023              	.LASF85:
+ 7024 01f7 726F756E 		.string	"round_keys"
+ 7024      645F6B65 
+ 7024      797300
+ 7025              	.LASF372:
+ 7026 0202 4B436970 		.string	"KCipherVecRegEncryptCbc"
+ 7026      68657256 
+ 7026      65635265 
+ 7026      67456E63 
+ 7026      72797074 
+ 7027              	.LASF189:
+ 7028 021a 7263436F 		.string	"rcConstructing"
+ 7028      6E737472 
+ 7028      75637469 
+ 7028      6E6700
+ 7029              	.LASF95:
+ 7030 0229 6B636970 		.string	"kcipher_AES"
+ 7030      6865725F 
+ 7030      41455300 
+ 7031              	.LASF96:
+ 7032 0235 6B636970 		.string	"kcipher_count"
+ 7032      6865725F 
+ 7032      636F756E 
+ 7032      7400
+ 7033              	.LASF390:
+ 7034 0243 74797065 		.string	"type"
+ 7034      00
+ 7035              	.LASF9:
+ 7036 0248 72635F74 		.string	"rc_t"
+ 7036      00
+ 7037              	.LASF265:
+ 7038 024d 7263466F 		.string	"rcFormat"
+ 7038      726D6174 
+ 7038      00
+ 7039              	.LASF323:
+ 7040 0256 7263556E 		.string	"rcUnauthorized"
+ 7040      61757468 
+ 7040      6F72697A 
+ 7040      656400
+ 7041              	.LASF358:
+ 7042 0265 4B436970 		.string	"KCipherVecRegSetDecryptIvec"
+ 7042      68657256 
+ 7042      65635265 
+
GAS LISTING /tmp/ccXzRABk.s 			page 156
+
+
+ 7042      67536574 
+ 7042      44656372 
+ 7043              	.LASF346:
+ 7044 0281 63766F75 		.string	"cvout"
+ 7044      7400
+ 7045              	.LASF203:
+ 7046 0287 72635265 		.string	"rcRemoving"
+ 7046      6D6F7669 
+ 7046      6E6700
+ 7047              	.LASF116:
+ 7048 0292 72634B72 		.string	"rcKrypto"
+ 7048      7970746F 
+ 7048      00
+ 7049              	.LASF194:
+ 7050 029b 72635669 		.string	"rcVisiting"
+ 7050      73697469 
+ 7050      6E6700
+ 7051              	.LASF124:
+ 7052 02a6 72634172 		.string	"rcArc"
+ 7052      6300
+ 7053              	.LASF99:
+ 7054 02ac 72634578 		.string	"rcExe"
+ 7054      6500
+ 7055              	.LASF329:
+ 7056 02b2 7263546F 		.string	"rcTooLong"
+ 7056      6F4C6F6E 
+ 7056      6700
+ 7057              	.LASF257:
+ 7058 02bc 52434F62 		.string	"RCObject"
+ 7058      6A656374 
+ 7058      00
+ 7059              	.LASF267:
+ 7060 02c5 7263496E 		.string	"rcInterface"
+ 7060      74657266 
+ 7060      61636500 
+ 7061              	.LASF195:
+ 7062 02d1 72635265 		.string	"rcResolving"
+ 7062      736F6C76 
+ 7062      696E6700 
+ 7063              	.LASF87:
+ 7064 02dd 43697068 		.string	"CipherAes"
+ 7064      65724165 
+ 7064      7300
+ 7065              	.LASF137:
+ 7066 02e7 72634469 		.string	"rcDirectory"
+ 7066      72656374 
+ 7066      6F727900 
+ 7067              	.LASF2:
+ 7068 02f3 6C6F6E67 		.string	"long int"
+ 7068      20696E74 
+ 7068      00
+ 7069              	.LASF385:
+ 7070 02fc 4B436970 		.string	"KCipherVecRegInitAes"
+ 7070      68657256 
+ 7070      65635265 
+ 7070      67496E69 
+ 7070      74416573 
+
GAS LISTING /tmp/ccXzRABk.s 			page 157
+
+
+ 7071              	.LASF225:
+ 7072 0311 72635661 		.string	"rcValidating"
+ 7072      6C696461 
+ 7072      74696E67 
+ 7072      00
+ 7073              	.LASF44:
+ 7074 031e 63697068 		.string	"cipher_ctr_func"
+ 7074      65725F63 
+ 7074      74725F66 
+ 7074      756E6300 
+ 7075              	.LASF127:
+ 7076 032e 72634172 		.string	"rcArgv"
+ 7076      677600
+ 7077              	.LASF103:
+ 7078 0335 72634353 		.string	"rcCS"
+ 7078      00
+ 7079              	.LASF184:
+ 7080 033a 72635572 		.string	"rcUri"
+ 7080      6900
+ 7081              	.LASF206:
+ 7082 0340 72634372 		.string	"rcCreating"
+ 7082      65617469 
+ 7082      6E6700
+ 7083              	.LASF40:
+ 7084 034b 656E6372 		.string	"encrypt_ivec"
+ 7084      7970745F 
+ 7084      69766563 
+ 7084      00
+ 7085              	.LASF57:
+ 7086 0358 656E6372 		.string	"encrypt"
+ 7086      79707400 
+ 7087              	.LASF76:
+ 7088 0360 76313238 		.string	"v128_u8_t"
+ 7088      5F75385F 
+ 7088      7400
+ 7089              	.LASF19:
+ 7090 036a 4442475F 		.string	"DBG_XML"
+ 7090      584D4C00 
+ 7091              	.LASF31:
+ 7092 0372 4442475F 		.string	"DBG_MOD_COUNT"
+ 7092      4D4F445F 
+ 7092      434F554E 
+ 7092      5400
+ 7093              	.LASF387:
+ 7094 0380 4B436970 		.string	"KCipherVecRegInitNull"
+ 7094      68657256 
+ 7094      65635265 
+ 7094      67496E69 
+ 7094      744E756C 
+ 7095              	.LASF352:
+ 7096 0396 75736572 		.string	"user_key_bits"
+ 7096      5F6B6579 
+ 7096      5F626974 
+ 7096      7300
+ 7097              	.LASF108:
+ 7098 03a4 72634442 		.string	"rcDB"
+ 7098      00
+
GAS LISTING /tmp/ccXzRABk.s 			page 158
+
+
+ 7099              	.LASF286:
+ 7100 03a9 7263436F 		.string	"rcConnection"
+ 7100      6E6E6563 
+ 7100      74696F6E 
+ 7100      00
+ 7101              	.LASF154:
+ 7102 03b6 72634D67 		.string	"rcMgr"
+ 7102      7200
+ 7103              	.LASF316:
+ 7104 03bc 72635669 		.string	"rcViolated"
+ 7104      6F6C6174 
+ 7104      656400
+ 7105              	.LASF375:
+ 7106 03c7 4B436970 		.string	"KCipherVecRegEncryptPcbc"
+ 7106      68657256 
+ 7106      65635265 
+ 7106      67456E63 
+ 7106      72797074 
+ 7107              	.LASF249:
+ 7108 03e0 72634465 		.string	"rcDecrypting"
+ 7108      63727970 
+ 7108      74696E67 
+ 7108      00
+ 7109              	.LASF359:
+ 7110 03ed 4B436970 		.string	"KCipherVecRegSetEncryptCounterFunc"
+ 7110      68657256 
+ 7110      65635265 
+ 7110      67536574 
+ 7110      456E6372 
+ 7111              	.LASF0:
+ 7112 0410 7369676E 		.string	"signed char"
+ 7112      65642063 
+ 7112      68617200 
+ 7113              	.LASF5:
+ 7114 041c 75696E74 		.string	"uint8_t"
+ 7114      385F7400 
+ 7115              	.LASF377:
+ 7116 0424 4B436970 		.string	"KCipherVecRegEncryptCfb"
+ 7116      68657256 
+ 7116      65635265 
+ 7116      67456E63 
+ 7116      72797074 
+ 7117              	.LASF132:
+ 7118 043c 72634368 		.string	"rcChar"
+ 7118      617200
+ 7119              	.LASF117:
+ 7120 0443 72635244 		.string	"rcRDBMS"
+ 7120      424D5300 
+ 7121              	.LASF161:
+ 7122 044b 72635175 		.string	"rcQueue"
+ 7122      65756500 
+ 7123              	.LASF353:
+ 7124 0453 5F5F5052 		.string	"__PRETTY_FUNCTION__"
+ 7124      45545459 
+ 7124      5F46554E 
+ 7124      4354494F 
+ 7124      4E5F5F00 
+
GAS LISTING /tmp/ccXzRABk.s 			page 159
+
+
+ 7125              	.LASF12:
+ 7126 0467 4442475F 		.string	"DBG_MOD_NOT_FOUND"
+ 7126      4D4F445F 
+ 7126      4E4F545F 
+ 7126      464F554E 
+ 7126      4400
+ 7127              	.LASF213:
+ 7128 0479 72635265 		.string	"rcReverting"
+ 7128      76657274 
+ 7128      696E6700 
+ 7129              	.LASF129:
+ 7130 0485 72634261 		.string	"rcBarrier"
+ 7130      72726965 
+ 7130      7200
+ 7131              	.LASF313:
+ 7132 048f 72634578 		.string	"rcExhausted"
+ 7132      68617573 
+ 7132      74656400 
+ 7133              	.LASF3:
+ 7134 049b 756E7369 		.string	"unsigned char"
+ 7134      676E6564 
+ 7134      20636861 
+ 7134      7200
+ 7135              	.LASF186:
+ 7136 04a9 5243436F 		.string	"RCContext"
+ 7136      6E746578 
+ 7136      7400
+ 7137              	.LASF149:
+ 7138 04b3 72634C6F 		.string	"rcLock"
+ 7138      636B00
+ 7139              	.LASF302:
+ 7140 04ba 72634261 		.string	"rcBadVersion"
+ 7140      64566572 
+ 7140      73696F6E 
+ 7140      00
+ 7141              	.LASF303:
+ 7142 04c7 72634465 		.string	"rcDestroyed"
+ 7142      7374726F 
+ 7142      79656400 
+ 7143              	.LASF166:
+ 7144 04d3 72635374 		.string	"rcString"
+ 7144      72696E67 
+ 7144      00
+ 7145              	.LASF128:
+ 7146 04dc 72634174 		.string	"rcAttr"
+ 7146      747200
+ 7147              	.LASF150:
+ 7148 04e3 72634C6F 		.string	"rcLog"
+ 7148      6700
+ 7149              	.LASF389:
+ 7150 04e9 6E65775F 		.string	"new_obj"
+ 7150      6F626A00 
+ 7151              	.LASF15:
+ 7152 04f1 4442475F 		.string	"DBG_KDB"
+ 7152      4B444200 
+ 7153              	.LASF254:
+ 7154 04f9 72635072 		.string	"rcProcessing"
+
GAS LISTING /tmp/ccXzRABk.s 			page 160
+
+
+ 7154      6F636573 
+ 7154      73696E67 
+ 7154      00
+ 7155              	.LASF104:
+ 7156 0506 72634646 		.string	"rcFF"
+ 7156      00
+ 7157              	.LASF393:
+ 7158 050b 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/cipher-vec.c"
+ 7158      652F726F 
+ 7158      6461726D 
+ 7158      65722F73 
+ 7158      72615F73 
+ 7159              	.LASF105:
+ 7160 0543 72634653 		.string	"rcFS"
+ 7160      00
+ 7161              	.LASF347:
+ 7162 0548 43697068 		.string	"CipherVecIn"
+ 7162      65725665 
+ 7162      63496E00 
+ 7163              	.LASF192:
+ 7164 0554 72634163 		.string	"rcAccessing"
+ 7164      63657373 
+ 7164      696E6700 
+ 7165              	.LASF310:
+ 7166 0560 7263496E 		.string	"rcInterrupted"
+ 7166      74657272 
+ 7166      75707465 
+ 7166      6400
+ 7167              	.LASF318:
+ 7168 056e 72634E6F 		.string	"rcNotFound"
+ 7168      74466F75 
+ 7168      6E6400
+ 7169              	.LASF11:
+ 7170 0579 63686172 		.string	"char"
+ 7170      00
+ 7171              	.LASF373:
+ 7172 057e 4B436970 		.string	"KCipherVecRegDecryptCbc"
+ 7172      68657256 
+ 7172      65635265 
+ 7172      67446563 
+ 7172      72797074 
+ 7173              	.LASF156:
+ 7174 0596 72634E6F 		.string	"rcNode"
+ 7174      646500
+ 7175              	.LASF29:
+ 7176 059d 4442475F 		.string	"DBG_AES"
+ 7176      41455300 
+ 7177              	.LASF287:
+ 7178 05a5 72634572 		.string	"rcError"
+ 7178      726F7200 
+ 7179              	.LASF384:
+ 7180 05ad 706F626A 		.string	"pobj"
+ 7180      00
+ 7181              	.LASF204:
+ 7182 05b2 7263436C 		.string	"rcClearing"
+ 7182      65617269 
+ 7182      6E6700
+
GAS LISTING /tmp/ccXzRABk.s 			page 161
+
+
+ 7183              	.LASF262:
+ 7184 05bd 72634F66 		.string	"rcOffset"
+ 7184      66736574 
+ 7184      00
+ 7185              	.LASF208:
+ 7186 05c6 7263436C 		.string	"rcClosing"
+ 7186      6F73696E 
+ 7186      6700
+ 7187              	.LASF140:
+ 7188 05d0 72634669 		.string	"rcFile"
+ 7188      6C6500
+ 7189              	.LASF169:
+ 7190 05d7 72635469 		.string	"rcTimeout"
+ 7190      6D656F75 
+ 7190      7400
+ 7191              	.LASF157:
+ 7192 05e1 72634E75 		.string	"rcNumeral"
+ 7192      6D657261 
+ 7192      6C00
+ 7193              	.LASF234:
+ 7194 05eb 72635761 		.string	"rcWaiting"
+ 7194      6974696E 
+ 7194      6700
+ 7195              	.LASF238:
+ 7196 05f5 72634650 		.string	"rcFPCoding"
+ 7196      436F6469 
+ 7196      6E6700
+ 7197              	.LASF290:
+ 7198 0600 72635369 		.string	"rcSize"
+ 7198      7A6500
+ 7199              	.LASF275:
+ 7200 0607 72634469 		.string	"rcDirEntry"
+ 7200      72456E74 
+ 7200      727900
+ 7201              	.LASF227:
+ 7202 0612 72634875 		.string	"rcHuffmanCoding"
+ 7202      66666D61 
+ 7202      6E436F64 
+ 7202      696E6700 
+ 7203              	.LASF24:
+ 7204 0622 4442475F 		.string	"DBG_KFG"
+ 7204      4B464700 
+ 7205              	.LASF308:
+ 7206 062a 72634275 		.string	"rcBusy"
+ 7206      737900
+ 7207              	.LASF21:
+ 7208 0631 4442475F 		.string	"DBG_SRA"
+ 7208      53524100 
+ 7209              	.LASF266:
+ 7210 0639 72635472 		.string	"rcTransfer"
+ 7210      616E7366 
+ 7210      657200
+ 7211              	.LASF18:
+ 7212 0644 4442475F 		.string	"DBG_KFS"
+ 7212      4B465300 
+ 7213              	.LASF221:
+ 7214 064c 72635061 		.string	"rcPacking"
+
GAS LISTING /tmp/ccXzRABk.s 			page 162
+
+
+ 7214      636B696E 
+ 7214      6700
+ 7215              	.LASF217:
+ 7216 0656 7263436F 		.string	"rcCopying"
+ 7216      7079696E 
+ 7216      6700
+ 7217              	.LASF255:
+ 7218 0660 72634964 		.string	"rcIdentifying"
+ 7218      656E7469 
+ 7218      6679696E 
+ 7218      6700
+ 7219              	.LASF60:
+ 7220 066e 64656372 		.string	"decrypt_ecb"
+ 7220      7970745F 
+ 7220      65636200 
+ 7221              	.LASF224:
+ 7222 067a 72634465 		.string	"rcDecoding"
+ 7222      636F6469 
+ 7222      6E6700
+ 7223              	.LASF379:
+ 7224 0685 4B436970 		.string	"KCipherVecRegEncryptOfb"
+ 7224      68657256 
+ 7224      65635265 
+ 7224      67456E63 
+ 7224      72797074 
+ 7225              	.LASF152:
+ 7226 069d 72634D65 		.string	"rcMemMap"
+ 7226      6D4D6170 
+ 7226      00
+ 7227              	.LASF197:
+ 7228 06a6 7263556E 		.string	"rcUnlocking"
+ 7228      6C6F636B 
+ 7228      696E6700 
+ 7229              	.LASF280:
+ 7230 06b2 72634974 		.string	"rcItem"
+ 7230      656D00
+ 7231              	.LASF82:
+ 7232 06b9 4B426C6F 		.string	"KBlockCipherVec_vt_v1"
+ 7232      636B4369 
+ 7232      70686572 
+ 7232      5665635F 
+ 7232      76745F76 
+ 7233              	.LASF17:
+ 7234 06cf 4442475F 		.string	"DBG_LEGREF"
+ 7234      4C454752 
+ 7234      454600
+ 7235              	.LASF345:
+ 7236 06da 6376696E 		.string	"cvin"
+ 7236      00
+ 7237              	.LASF198:
+ 7238 06df 72635265 		.string	"rcRenaming"
+ 7238      6E616D69 
+ 7238      6E6700
+ 7239              	.LASF351:
+ 7240 06ea 75736572 		.string	"user_key"
+ 7240      5F6B6579 
+ 7240      00
+
GAS LISTING /tmp/ccXzRABk.s 			page 163
+
+
+ 7241              	.LASF268:
+ 7242 06f3 72634964 		.string	"rcId"
+ 7242      00
+ 7243              	.LASF181:
+ 7244 06f8 7263436D 		.string	"rcCmd"
+ 7244      6400
+ 7245              	.LASF395:
+ 7246 06fe 43697068 		.string	"CipherVecOut"
+ 7246      65725665 
+ 7246      634F7574 
+ 7246      00
+ 7247              	.LASF27:
+ 7248 070b 4442475F 		.string	"DBG_LOADLIB"
+ 7248      4C4F4144 
+ 7248      4C494200 
+ 7249              	.LASF320:
+ 7250 0717 7263556E 		.string	"rcUnlocked"
+ 7250      6C6F636B 
+ 7250      656400
+ 7251              	.LASF121:
+ 7252 0722 52434D6F 		.string	"RCModule"
+ 7252      64756C65 
+ 7252      00
+ 7253              	.LASF282:
+ 7254 072b 7263456E 		.string	"rcEncryption"
+ 7254      63727970 
+ 7254      74696F6E 
+ 7254      00
+ 7255              	.LASF317:
+ 7256 0738 72634578 		.string	"rcExists"
+ 7256      69737473 
+ 7256      00
+ 7257              	.LASF77:
+ 7258 0741 43697068 		.string	"CipherVec"
+ 7258      65725665 
+ 7258      6300
+ 7259              	.LASF59:
+ 7260 074b 656E6372 		.string	"encrypt_ecb"
+ 7260      7970745F 
+ 7260      65636200 
+ 7261              	.LASF336:
+ 7262 0757 72634F70 		.string	"rcOpen"
+ 7262      656E00
+ 7263              	.LASF322:
+ 7264 075e 72634465 		.string	"rcDeadlock"
+ 7264      61646C6F 
+ 7264      636B00
+ 7265              	.LASF259:
+ 7266 0769 72634C69 		.string	"rcLink"
+ 7266      6E6B00
+ 7267              	.LASF246:
+ 7268 0770 7263466C 		.string	"rcFlushing"
+ 7268      75736869 
+ 7268      6E6700
+ 7269              	.LASF294:
+ 7270 077b 72634E6F 		.string	"rcNoErr"
+ 7270      45727200 
+
GAS LISTING /tmp/ccXzRABk.s 			page 164
+
+
+ 7271              	.LASF273:
+ 7272 0783 72635461 		.string	"rcTag"
+ 7272      6700
+ 7273              	.LASF365:
+ 7274 0789 4B436970 		.string	"KCipherVecRegDecryptV1Int"
+ 7274      68657256 
+ 7274      65635265 
+ 7274      67446563 
+ 7274      72797074 
+ 7275              	.LASF23:
+ 7276 07a3 4442475F 		.string	"DBG_ALIGN"
+ 7276      414C4947 
+ 7276      4E00
+ 7277              	.LASF237:
+ 7278 07ad 72634C6F 		.string	"rcLogging"
+ 7278      6767696E 
+ 7278      6700
+ 7279              	.LASF330:
+ 7280 07b7 7263546F 		.string	"rcTooBig"
+ 7280      6F426967 
+ 7280      00
+ 7281              	.LASF174:
+ 7282 07c0 72635665 		.string	"rcVector"
+ 7282      63746F72 
+ 7282      00
+ 7283              	.LASF209:
+ 7284 07c9 72635265 		.string	"rcResizing"
+ 7284      73697A69 
+ 7284      6E6700
+ 7285              	.LASF183:
+ 7286 07d4 72635175 		.string	"rcQuery"
+ 7286      65727900 
+ 7287              	.LASF8:
+ 7288 07dc 6C6F6E67 		.string	"long unsigned int"
+ 7288      20756E73 
+ 7288      69676E65 
+ 7288      6420696E 
+ 7288      7400
+ 7289              	.LASF315:
+ 7290 07ee 72634578 		.string	"rcExcessive"
+ 7290      63657373 
+ 7290      69766500 
+ 7291              	.LASF243:
+ 7292 07fa 72634576 		.string	"rcEvaluating"
+ 7292      616C7561 
+ 7292      74696E67 
+ 7292      00
+ 7293              	.LASF180:
+ 7294 0807 7263526E 		.string	"rcRng"
+ 7294      6700
+ 7295              	.LASF188:
+ 7296 080d 72634361 		.string	"rcCasting"
+ 7296      7374696E 
+ 7296      6700
+ 7297              	.LASF349:
+ 7298 0817 73656C66 		.string	"self"
+ 7298      00
+
GAS LISTING /tmp/ccXzRABk.s 			page 165
+
+
+ 7299              	.LASF148:
+ 7300 081c 72634974 		.string	"rcIterator"
+ 7300      65726174 
+ 7300      6F7200
+ 7301              	.LASF83:
+ 7302 0827 4B426C6F 		.string	"KBlockCipherVec"
+ 7302      636B4369 
+ 7302      70686572 
+ 7302      56656300 
+ 7303              	.LASF165:
+ 7304 0837 72635374 		.string	"rcStorage"
+ 7304      6F726167 
+ 7304      6500
+ 7305              	.LASF68:
+ 7306 0841 64656372 		.string	"decrypt_ofb"
+ 7306      7970745F 
+ 7306      6F666200 
+ 7307              	.LASF46:
+ 7308 084d 626C6F63 		.string	"block_cipher"
+ 7308      6B5F6369 
+ 7308      70686572 
+ 7308      00
+ 7309              	.LASF369:
+ 7310 085a 626C6F63 		.string	"block_count"
+ 7310      6B5F636F 
+ 7310      756E7400 
+ 7311              	.LASF356:
+ 7312 0866 4B436970 		.string	"KCipherVecRegSetEncryptIvec"
+ 7312      68657256 
+ 7312      65635265 
+ 7312      67536574 
+ 7312      456E6372 
+ 7313              	.LASF277:
+ 7314 0882 7263526F 		.string	"rcRow"
+ 7314      7700
+ 7315              	.LASF20:
+ 7316 0888 4442475F 		.string	"DBG_VDB"
+ 7316      56444200 
+ 7317              	.LASF93:
+ 7318 0890 6B636970 		.string	"kcipher_type"
+ 7318      6865725F 
+ 7318      74797065 
+ 7318      00
+ 7319              	.LASF396:
+ 7320 089d 4B436970 		.string	"KCipherVecRegMake"
+ 7320      68657256 
+ 7320      65635265 
+ 7320      674D616B 
+ 7320      6500
+ 7321              	.LASF177:
+ 7322 08af 72634C61 		.string	"rcLastTarget_v1_0"
+ 7322      73745461 
+ 7322      72676574 
+ 7322      5F76315F 
+ 7322      3000
+ 7323              	.LASF185:
+ 7324 08c1 72634C61 		.string	"rcLastTarget_v1_1"
+
GAS LISTING /tmp/ccXzRABk.s 			page 166
+
+
+ 7324      73745461 
+ 7324      72676574 
+ 7324      5F76315F 
+ 7324      3100
+ 7325              	.LASF164:
+ 7326 08d3 72635365 		.string	"rcSemaphore"
+ 7326      6D617068 
+ 7326      6F726500 
+ 7327              	.LASF218:
+ 7328 08df 7263436F 		.string	"rcConcatenating"
+ 7328      6E636174 
+ 7328      656E6174 
+ 7328      696E6700 
+ 7329              	.LASF309:
+ 7330 08ef 7263496E 		.string	"rcIncomplete"
+ 7330      636F6D70 
+ 7330      6C657465 
+ 7330      00
+ 7331              	.LASF338:
+ 7332 08fc 72634E6F 		.string	"rcNotOpen"
+ 7332      744F7065 
+ 7332      6E00
+ 7333              	.LASF147:
+ 7334 0906 7263496E 		.string	"rcIndex"
+ 7334      64657800 
+ 7335              	.LASF67:
+ 7336 090e 656E6372 		.string	"encrypt_ofb"
+ 7336      7970745F 
+ 7336      6F666200 
+ 7337              	.LASF55:
+ 7338 091a 7365745F 		.string	"set_encrypt_ctr_func"
+ 7338      656E6372 
+ 7338      7970745F 
+ 7338      6374725F 
+ 7338      66756E63 
+ 7339              	.LASF22:
+ 7340 092f 4442475F 		.string	"DBG_XARC"
+ 7340      58415243 
+ 7340      00
+ 7341              	.LASF392:
+ 7342 0938 474E5520 		.string	"GNU C 4.4.2"
+ 7342      4320342E 
+ 7342      342E3200 
+ 7343              	.LASF357:
+ 7344 0944 69766563 		.string	"ivec"
+ 7344      00
+ 7345              	.LASF100:
+ 7346 0949 72635275 		.string	"rcRuntime"
+ 7346      6E74696D 
+ 7346      6500
+ 7347              	.LASF139:
+ 7348 0953 7263586D 		.string	"rcXmlDoc"
+ 7348      6C446F63 
+ 7348      00
+ 7349              	.LASF72:
+ 7350 095c 6C6F6E67 		.string	"long long int"
+ 7350      206C6F6E 
+
GAS LISTING /tmp/ccXzRABk.s 			page 167
+
+
+ 7350      6720696E 
+ 7350      7400
+ 7351              	.LASF220:
+ 7352 096a 7263506F 		.string	"rcPositioning"
+ 7352      73697469 
+ 7352      6F6E696E 
+ 7352      6700
+ 7353              	.LASF34:
+ 7354 0978 636F756E 		.string	"counter"
+ 7354      74657200 
+ 7355              	.LASF70:
+ 7356 0980 64656372 		.string	"decrypt_ctr"
+ 7356      7970745F 
+ 7356      63747200 
+ 7357              	.LASF94:
+ 7358 098c 6B636970 		.string	"kcipher_null"
+ 7358      6865725F 
+ 7358      6E756C6C 
+ 7358      00
+ 7359              	.LASF151:
+ 7360 0999 72634D44 		.string	"rcMD5SumFmt"
+ 7360      3553756D 
+ 7360      466D7400 
+ 7361              	.LASF202:
+ 7362 09a5 7263496E 		.string	"rcInserting"
+ 7362      73657274 
+ 7362      696E6700 
+ 7363              	.LASF250:
+ 7364 09b1 7263436F 		.string	"rcComparing"
+ 7364      6D706172 
+ 7364      696E6700 
+ 7365              	.LASF312:
+ 7366 09bd 7263456D 		.string	"rcEmpty"
+ 7366      70747900 
+ 7367              	.LASF144:
+ 7368 09c5 7263466F 		.string	"rcFormatter"
+ 7368      726D6174 
+ 7368      74657200 
+ 7369              	.LASF368:
+ 7370 09d1 4B436970 		.string	"KCipherVecRegEncryptEcb"
+ 7370      68657256 
+ 7370      65635265 
+ 7370      67456E63 
+ 7370      72797074 
+ 7371              	.LASF75:
+ 7372 09e9 646F7562 		.string	"double"
+ 7372      6C6500
+ 7373              	.LASF229:
+ 7374 09f0 72635265 		.string	"rcRegistering"
+ 7374      67697374 
+ 7374      6572696E 
+ 7374      6700
+ 7375              	.LASF35:
+ 7376 09fe 72656663 		.string	"refcount"
+ 7376      6F756E74 
+ 7376      00
+ 7377              	.LASF118:
+
GAS LISTING /tmp/ccXzRABk.s 			page 168
+
+
+ 7378 0a07 72634E53 		.string	"rcNS"
+ 7378      00
+ 7379              	.LASF261:
+ 7380 0a0c 72635061 		.string	"rcParam"
+ 7380      72616D00 
+ 7381              	.LASF226:
+ 7382 0a14 72634578 		.string	"rcExecuting"
+ 7382      65637574 
+ 7382      696E6700 
+ 7383              	.LASF122:
+ 7384 0a20 52435461 		.string	"RCTarget"
+ 7384      72676574 
+ 7384      00
+ 7385              	.LASF283:
+ 7386 0a29 72634372 		.string	"rcCrc"
+ 7386      6300
+ 7387              	.LASF26:
+ 7388 0a2f 4442475F 		.string	"DBG_SEARCH"
+ 7388      53454152 
+ 7388      434800
+ 7389              	.LASF111:
+ 7390 0a3a 7263584D 		.string	"rcXML"
+ 7390      4C00
+ 7391              	.LASF350:
+ 7392 0a40 4B436970 		.string	"KCipherVecRegSetEncryptKey"
+ 7392      68657256 
+ 7392      65635265 
+ 7392      67536574 
+ 7392      456E6372 
+ 7393              	.LASF69:
+ 7394 0a5b 656E6372 		.string	"encrypt_ctr"
+ 7394      7970745F 
+ 7394      63747200 
+ 7395              	.LASF28:
+ 7396 0a67 4442475F 		.string	"DBG_VFS"
+ 7396      56465300 
+ 7397              	.LASF73:
+ 7398 0a6f 666C6F61 		.string	"float"
+ 7398      7400
+ 7399              	.LASF205:
+ 7400 0a75 72635570 		.string	"rcUpdating"
+ 7400      64617469 
+ 7400      6E6700
+ 7401              	.LASF232:
+ 7402 0a80 7263436F 		.string	"rcConverting"
+ 7402      6E766572 
+ 7402      74696E67 
+ 7402      00
+ 7403              	.LASF64:
+ 7404 0a8d 64656372 		.string	"decrypt_pcbc"
+ 7404      7970745F 
+ 7404      70636263 
+ 7404      00
+ 7405              	.LASF97:
+ 7406 0a9a 4B426C6F 		.string	"KBlockCipher"
+ 7406      636B4369 
+ 7406      70686572 
+
GAS LISTING /tmp/ccXzRABk.s 			page 169
+
+
+ 7406      00
+ 7407              	.LASF175:
+ 7408 0aa7 72634479 		.string	"rcDylib"
+ 7408      6C696200 
+ 7409              	.LASF324:
+ 7410 0aaf 72635265 		.string	"rcReadonly"
+ 7410      61646F6E 
+ 7410      6C7900
+ 7411              	.LASF7:
+ 7412 0aba 756E7369 		.string	"unsigned int"
+ 7412      676E6564 
+ 7412      20696E74 
+ 7412      00
+ 7413              	.LASF325:
+ 7414 0ac7 72635772 		.string	"rcWriteonly"
+ 7414      6974656F 
+ 7414      6E6C7900 
+ 7415              	.LASF47:
+ 7416 0ad3 4B436970 		.string	"KCipher_vt"
+ 7416      6865725F 
+ 7416      767400
+ 7417              	.LASF319:
+ 7418 0ade 72634C6F 		.string	"rcLocked"
+ 7418      636B6564 
+ 7418      00
+ 7419              	.LASF201:
+ 7420 0ae7 72635072 		.string	"rcProjecting"
+ 7420      6F6A6563 
+ 7420      74696E67 
+ 7420      00
+ 7421              	.LASF106:
+ 7422 0af4 72635053 		.string	"rcPS"
+ 7422      00
+ 7423              	.LASF291:
+ 7424 0af9 72635265 		.string	"rcRefcount"
+ 7424      66636F75 
+ 7424      6E7400
+ 7425              	.LASF126:
+ 7426 0b04 7263546F 		.string	"rcTocEntry"
+ 7426      63456E74 
+ 7426      727900
+ 7427              	.LASF281:
+ 7428 0b0f 72634D6F 		.string	"rcMode"
+ 7428      646500
+ 7429              	.LASF340:
+ 7430 0b16 7263556E 		.string	"rcUnequal"
+ 7430      65717561 
+ 7430      6C00
+ 7431              	.LASF321:
+ 7432 0b20 72634465 		.string	"rcDetached"
+ 7432      74616368 
+ 7432      656400
+ 7433              	.LASF327:
+ 7434 0b2b 7263496E 		.string	"rcInPlaceNotAllowed"
+ 7434      506C6163 
+ 7434      654E6F74 
+ 7434      416C6C6F 
+
GAS LISTING /tmp/ccXzRABk.s 			page 170
+
+
+ 7434      77656400 
+ 7435              	.LASF269:
+ 7436 0b3f 72635261 		.string	"rcRange"
+ 7436      6E676500 
+ 7437              	.LASF394:
+ 7438 0b47 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 7438      652F726F 
+ 7438      6461726D 
+ 7438      65722F73 
+ 7438      72615F73 
+ 7439              	.LASF279:
+ 7440 0b8f 72634C61 		.string	"rcLastObject_v1_0"
+ 7440      73744F62 
+ 7440      6A656374 
+ 7440      5F76315F 
+ 7440      3000
+ 7441              	.LASF292:
+ 7442 0ba1 72634C61 		.string	"rcLastObject_v1_1"
+ 7442      73744F62 
+ 7442      6A656374 
+ 7442      5F76315F 
+ 7442      3100
+ 7443              	.LASF98:
+ 7444 0bb3 62797465 		.string	"byte"
+ 7444      00
+ 7445              	.LASF314:
+ 7446 0bb8 7263496E 		.string	"rcInsufficient"
+ 7446      73756666 
+ 7446      69636965 
+ 7446      6E7400
+ 7447              	.LASF245:
+ 7448 0bc7 72634C61 		.string	"rcLastContext_v1_0"
+ 7448      7374436F 
+ 7448      6E746578 
+ 7448      745F7631 
+ 7448      5F3000
+ 7449              	.LASF256:
+ 7450 0bda 72634C61 		.string	"rcLastContext_v1_1"
+ 7450      7374436F 
+ 7450      6E746578 
+ 7450      745F7631 
+ 7450      5F3100
+ 7451              	.LASF364:
+ 7452 0bed 4B436970 		.string	"KCipherVecRegEncryptV1Int"
+ 7452      68657256 
+ 7452      65635265 
+ 7452      67456E63 
+ 7452      72797074 
+ 7453              	.LASF39:
+ 7454 0c07 64656372 		.string	"decrypt_key"
+ 7454      7970745F 
+ 7454      6B657900 
+ 7455              	.LASF176:
+ 7456 0c13 72634578 		.string	"rcExpression"
+ 7456      70726573 
+ 7456      73696F6E 
+ 7456      00
+
GAS LISTING /tmp/ccXzRABk.s 			page 171
+
+
+ 7457              	.LASF222:
+ 7458 0c20 7263556E 		.string	"rcUnpacking"
+ 7458      7061636B 
+ 7458      696E6700 
+ 7459              	.LASF138:
+ 7460 0c2c 7263446F 		.string	"rcDoc"
+ 7460      6300
+ 7461              	.LASF13:
+ 7462 0c32 4442475F 		.string	"DBG_APP"
+ 7462      41505000 
+ 7463              	.LASF239:
+ 7464 0c3a 72634D75 		.string	"rcMultiplexing"
+ 7464      6C746970 
+ 7464      6C657869 
+ 7464      6E6700
+ 7465              	.LASF241:
+ 7466 0c49 72635365 		.string	"rcSearching"
+ 7466      61726368 
+ 7466      696E6700 
+ 7467              	.LASF341:
+ 7468 0c55 72634661 		.string	"rcFailed"
+ 7468      696C6564 
+ 7468      00
+ 7469              	.LASF48:
+ 7470 0c5e 4B436970 		.string	"KCipher_vt_v1"
+ 7470      6865725F 
+ 7470      76745F76 
+ 7470      3100
+ 7471              	.LASF362:
+ 7472 0c6c 4B436970 		.string	"KCipherVecRegEncryptV1"
+ 7472      68657256 
+ 7472      65635265 
+ 7472      67456E63 
+ 7472      72797074 
+ 7473              	.LASF306:
+ 7474 0c83 7263496E 		.string	"rcIncorrect"
+ 7474      636F7272 
+ 7474      65637400 
+ 7475              	.LASF145:
+ 7476 0c8f 72634675 		.string	"rcFunctParam"
+ 7476      6E637450 
+ 7476      6172616D 
+ 7476      00
+ 7477              	.LASF38:
+ 7478 0c9c 656E6372 		.string	"encrypt_key"
+ 7478      7970745F 
+ 7478      6B657900 
+ 7479              	.LASF270:
+ 7480 0ca8 7263436F 		.string	"rcConstraint"
+ 7480      6E737472 
+ 7480      61696E74 
+ 7480      00
+ 7481              	.LASF216:
+ 7482 0cb5 72634672 		.string	"rcFreezing"
+ 7482      65657A69 
+ 7482      6E6700
+ 7483              	.LASF296:
+
GAS LISTING /tmp/ccXzRABk.s 			page 172
+
+
+ 7484 0cc0 7263556E 		.string	"rcUnknown"
+ 7484      6B6E6F77 
+ 7484      6E00
+ 7485              	.LASF135:
+ 7486 0cca 72634375 		.string	"rcCursor"
+ 7486      72736F72 
+ 7486      00
+ 7487              	.LASF293:
+ 7488 0cd3 52435374 		.string	"RCState"
+ 7488      61746500 
+ 7489              	.LASF81:
+ 7490 0cdb 4B426C6F 		.string	"KBlockCipherByte"
+ 7490      636B4369 
+ 7490      70686572 
+ 7490      42797465 
+ 7490      00
+ 7491              	.LASF141:
+ 7492 0cec 72634669 		.string	"rcFileDesc"
+ 7492      6C654465 
+ 7492      736300
+ 7493              	.LASF79:
+ 7494 0cf7 4B426C6F 		.string	"KBlockCipherByte_vt_v1"
+ 7494      636B4369 
+ 7494      70686572 
+ 7494      42797465 
+ 7494      5F76745F 
+ 7495              	.LASF333:
+ 7496 0d0e 72634967 		.string	"rcIgnored"
+ 7496      6E6F7265 
+ 7496      6400
+ 7497              	.LASF90:
+ 7498 0d18 655F6976 		.string	"e_ivec"
+ 7498      656300
+ 7499              	.LASF191:
+ 7500 0d1f 72635265 		.string	"rcReleasing"
+ 7500      6C656173 
+ 7500      696E6700 
+ 7501              	.LASF381:
+ 7502 0d2b 4B436970 		.string	"KCipherVecRegEncryptCtr"
+ 7502      68657256 
+ 7502      65635265 
+ 7502      67456E63 
+ 7502      72797074 
+ 7503              	.LASF114:
+ 7504 0d43 72634B46 		.string	"rcKFG"
+ 7504      4700
+ 7505              	.LASF272:
+ 7506 0d49 72634D65 		.string	"rcMessage"
+ 7506      73736167 
+ 7506      6500
+ 7507              	.LASF219:
+ 7508 0d53 7263466F 		.string	"rcFormatting"
+ 7508      726D6174 
+ 7508      74696E67 
+ 7508      00
+ 7509              	.LASF112:
+ 7510 0d60 72635352 		.string	"rcSRA"
+
GAS LISTING /tmp/ccXzRABk.s 			page 173
+
+
+ 7510      4100
+ 7511              	.LASF288:
+ 7512 0d66 7263456E 		.string	"rcEnvironment"
+ 7512      7669726F 
+ 7512      6E6D656E 
+ 7512      7400
+ 7513              	.LASF74:
+ 7514 0d74 6C6F6E67 		.string	"long long unsigned int"
+ 7514      206C6F6E 
+ 7514      6720756E 
+ 7514      7369676E 
+ 7514      65642069 
+ 7515              	.LASF50:
+ 7516 0d8b 64657374 		.string	"destroy"
+ 7516      726F7900 
+ 7517              	.LASF170:
+ 7518 0d93 7263546F 		.string	"rcToken"
+ 7518      6B656E00 
+ 7519              	.LASF230:
+ 7520 0d9b 7263546F 		.string	"rcTokenizing"
+ 7520      6B656E69 
+ 7520      7A696E67 
+ 7520      00
+ 7521              	.LASF16:
+ 7522 0da8 4442475F 		.string	"DBG_REF"
+ 7522      52454600 
+ 7523              	.LASF211:
+ 7524 0db0 72635772 		.string	"rcWriting"
+ 7524      6974696E 
+ 7524      6700
+ 7525              	.LASF187:
+ 7526 0dba 7263416C 		.string	"rcAllocating"
+ 7526      6C6F6361 
+ 7526      74696E67 
+ 7526      00
+ 7527              	.LASF371:
+ 7528 0dc7 4B436970 		.string	"KCipherVecRegDecryptEcb"
+ 7528      68657256 
+ 7528      65635265 
+ 7528      67446563 
+ 7528      72797074 
+ 7529              	.LASF173:
+ 7530 0ddf 72635479 		.string	"rcType"
+ 7530      706500
+ 7531              	.LASF274:
+ 7532 0de6 72635265 		.string	"rcResources"
+ 7532      736F7572 
+ 7532      63657300 
+ 7533              	.LASF155:
+ 7534 0df2 72634E61 		.string	"rcNamelist"
+ 7534      6D656C69 
+ 7534      737400
+ 7535              	.LASF391:
+ 7536 0dfd 4B436970 		.string	"KCipherVecReg_vt_v1"
+ 7536      68657256 
+ 7536      65635265 
+ 7536      675F7674 
+
GAS LISTING /tmp/ccXzRABk.s 			page 174
+
+
+ 7536      5F763100 
+ 7537              	.LASF355:
+ 7538 0e11 4B436970 		.string	"KCipherVecRegSetDecryptKey"
+ 7538      68657256 
+ 7538      65635265 
+ 7538      67536574 
+ 7538      44656372 
+ 7539              	.LASF383:
+ 7540 0e2c 4B436970 		.string	"KCipherVecRegAllocAes"
+ 7540      68657256 
+ 7540      65635265 
+ 7540      67416C6C 
+ 7540      6F634165 
+ 7541              	.LASF339:
+ 7542 0e42 7263556E 		.string	"rcUndefined"
+ 7542      64656669 
+ 7542      6E656400 
+ 7543              	.LASF91:
+ 7544 0e4e 645F6976 		.string	"d_ivec"
+ 7544      656300
+ 7545              	.LASF307:
+ 7546 0e55 7263496E 		.string	"rcInconsistent"
+ 7546      636F6E73 
+ 7546      69737465 
+ 7546      6E7400
+ 7547              	.LASF252:
+ 7548 0e64 72635265 		.string	"rcRetrieving"
+ 7548      74726965 
+ 7548      76696E67 
+ 7548      00
+ 7549              	.LASF58:
+ 7550 0e71 64656372 		.string	"decrypt"
+ 7550      79707400 
+ 7551              	.LASF49:
+ 7552 0e79 76657273 		.string	"version"
+ 7552      696F6E00 
+ 7553              	.LASF264:
+ 7554 0e81 72634E61 		.string	"rcName"
+ 7554      6D6500
+ 7555              	.LASF54:
+ 7556 0e88 7365745F 		.string	"set_decrypt_ivec"
+ 7556      64656372 
+ 7556      7970745F 
+ 7556      69766563 
+ 7556      00
+ 7557              	.LASF301:
+ 7558 0e99 72634E75 		.string	"rcNull"
+ 7558      6C6C00
+ 7559              	.LASF223:
+ 7560 0ea0 7263456E 		.string	"rcEncoding"
+ 7560      636F6469 
+ 7560      6E6700
+ 7561              	.LASF378:
+ 7562 0eab 4B436970 		.string	"KCipherVecRegDecryptCfb"
+ 7562      68657256 
+ 7562      65635265 
+ 7562      67446563 
+
GAS LISTING /tmp/ccXzRABk.s 			page 175
+
+
+ 7562      72797074 
+ 7563              	.LASF142:
+ 7564 0ec3 72634669 		.string	"rcFileFormat"
+ 7564      6C65466F 
+ 7564      726D6174 
+ 7564      00
+ 7565              	.LASF179:
+ 7566 0ed0 7263456E 		.string	"rcEncryptionKey"
+ 7566      63727970 
+ 7566      74696F6E 
+ 7566      4B657900 
+ 7567              	.LASF244:
+ 7568 0ee0 7263496E 		.string	"rcInflating"
+ 7568      666C6174 
+ 7568      696E6700 
+ 7569              	.LASF326:
+ 7570 0eec 72634E6F 		.string	"rcNoPerm"
+ 7570      5065726D 
+ 7570      00
+ 7571              	.LASF214:
+ 7572 0ef5 72635265 		.string	"rcResetting"
+ 7572      73657474 
+ 7572      696E6700 
+ 7573              	.LASF36:
+ 7574 0f01 626C6F63 		.string	"block_size"
+ 7574      6B5F7369 
+ 7574      7A6500
+ 7575              	.LASF162:
+ 7576 0f0c 72635257 		.string	"rcRWLock"
+ 7576      4C6F636B 
+ 7576      00
+ 7577              	.LASF193:
+ 7578 0f15 72634C69 		.string	"rcListing"
+ 7578      7374696E 
+ 7578      6700
+ 7579              	.LASF63:
+ 7580 0f1f 656E6372 		.string	"encrypt_pcbc"
+ 7580      7970745F 
+ 7580      70636263 
+ 7580      00
+ 7581              	.LASF32:
+ 7582 0f2c 4B526566 		.string	"KRefcount"
+ 7582      636F756E 
+ 7582      7400
+ 7583              	.LASF143:
+ 7584 0f36 72634675 		.string	"rcFunction"
+ 7584      6E637469 
+ 7584      6F6E00
+ 7585              	.LASF299:
+ 7586 0f41 7263556E 		.string	"rcUnrecognized"
+ 7586      7265636F 
+ 7586      676E697A 
+ 7586      656400
+ 7587              	.LASF86:
+ 7588 0f50 6E756D62 		.string	"number_of_rounds"
+ 7588      65725F6F 
+ 7588      665F726F 
+
GAS LISTING /tmp/ccXzRABk.s 			page 176
+
+
+ 7588      756E6473 
+ 7588      00
+ 7589              	.LASF115:
+ 7590 0f61 7263416C 		.string	"rcAlign"
+ 7590      69676E00 
+ 7591              	.LASF178:
+ 7592 0f69 72635072 		.string	"rcProduction"
+ 7592      6F647563 
+ 7592      74696F6E 
+ 7592      00
+ 7593              	.LASF168:
+ 7594 0f76 72635468 		.string	"rcThread"
+ 7594      72656164 
+ 7594      00
+ 7595              	.LASF37:
+ 7596 0f7f 6E616D65 		.string	"name"
+ 7596      00
+ 7597              	.LASF388:
+ 7598 0f84 6E756C6C 		.string	"null"
+ 7598      00
+ 7599              	.LASF52:
+ 7600 0f89 7365745F 		.string	"set_decrypt_key"
+ 7600      64656372 
+ 7600      7970745F 
+ 7600      6B657900 
+ 7601              	.LASF370:
+ 7602 0f99 706F7574 		.string	"pout"
+ 7602      00
+ 7603              	.LASF33:
+ 7604 0f9e 4B436970 		.string	"KCipher"
+ 7604      68657200 
+ 7605              	.LASF78:
+ 7606 0fa6 4B426C6F 		.string	"KBlockCipher_vt"
+ 7606      636B4369 
+ 7606      70686572 
+ 7606      5F767400 
+ 7607              	.LASF285:
+ 7608 0fb6 72635365 		.string	"rcSeed"
+ 7608      656400
+ 7609              	.LASF242:
+ 7610 0fbd 72634C6F 		.string	"rcLoading"
+ 7610      6164696E 
+ 7610      6700
+ 7611              	.LASF1:
+ 7612 0fc7 73686F72 		.string	"short int"
+ 7612      7420696E 
+ 7612      7400
+ 7613              	.LASF366:
+ 7614 0fd1 4B436970 		.string	"KCipherVecRegEncrypt"
+ 7614      68657256 
+ 7614      65635265 
+ 7614      67456E63 
+ 7614      72797074 
+ 7615              	.LASF380:
+ 7616 0fe6 4B436970 		.string	"KCipherVecRegDecryptOfb"
+ 7616      68657256 
+ 7616      65635265 
+
GAS LISTING /tmp/ccXzRABk.s 			page 177
+
+
+ 7616      67446563 
+ 7616      72797074 
+ 7617              	.LASF360:
+ 7618 0ffe 66756E63 		.string	"func"
+ 7618      00
+ 7619              	.LASF335:
+ 7620 1003 72634C61 		.string	"rcLastState_v1_0"
+ 7620      73745374 
+ 7620      6174655F 
+ 7620      76315F30 
+ 7620      00
+ 7621              	.LASF344:
+ 7622 1014 72634C61 		.string	"rcLastState_v1_1"
+ 7622      73745374 
+ 7622      6174655F 
+ 7622      76315F31 
+ 7622      00
+ 7623              	.LASF109:
+ 7624 1025 72635644 		.string	"rcVDB"
+ 7624      4200
+ 7625              	.LASF92:
+ 7626 102b 43697068 		.string	"CipherNull"
+ 7626      65724E75 
+ 7626      6C6C00
+ 7627              	.LASF397:
+ 7628 1036 4B436970 		.string	"KCipherVecRegClassName"
+ 7628      68657256 
+ 7628      65635265 
+ 7628      67436C61 
+ 7628      73734E61 
+ 7629              	.LASF376:
+ 7630 104d 4B436970 		.string	"KCipherVecRegDecryptPcbc"
+ 7630      68657256 
+ 7630      65635265 
+ 7630      67446563 
+ 7630      72797074 
+ 7631              	.LASF51:
+ 7632 1066 7365745F 		.string	"set_encrypt_key"
+ 7632      656E6372 
+ 7632      7970745F 
+ 7632      6B657900 
+ 7633              	.LASF107:
+ 7634 1076 72635846 		.string	"rcXF"
+ 7634      00
+ 7635              	.LASF71:
+ 7636 107b 4B436970 		.string	"KCipher_ptr"
+ 7636      6865725F 
+ 7636      70747200 
+ 7637              	.LASF88:
+ 7638 1087 655F6B65 		.string	"e_key"
+ 7638      7900
+ 7639              	.LASF190:
+ 7640 108d 72634465 		.string	"rcDestroying"
+ 7640      7374726F 
+ 7640      79696E67 
+ 7640      00
+ 7641              	.LASF295:
+
GAS LISTING /tmp/ccXzRABk.s 			page 178
+
+
+ 7642 109a 7263446F 		.string	"rcDone"
+ 7642      6E6500
+ 7643              	.LASF125:
+ 7644 10a1 7263546F 		.string	"rcToc"
+ 7644      6300
+ 7645              	.LASF43:
+ 7646 10a7 64656372 		.string	"decrypt_counter_func"
+ 7646      7970745F 
+ 7646      636F756E 
+ 7646      7465725F 
+ 7646      66756E63 
+ 7647              	.LASF382:
+ 7648 10bc 4B436970 		.string	"KCipherVecRegDecryptCtr"
+ 7648      68657256 
+ 7648      65635265 
+ 7648      67446563 
+ 7648      72797074 
+ 7649              	.LASF199:
+ 7650 10d4 7263416C 		.string	"rcAliasing"
+ 7650      69617369 
+ 7650      6E6700
+ 7651              	.LASF367:
+ 7652 10df 4B436970 		.string	"KCipherVecRegDecrypt"
+ 7652      68657256 
+ 7652      65635265 
+ 7652      67446563 
+ 7652      72797074 
+ 7653              	.LASF160:
+ 7654 10f4 72635072 		.string	"rcProcess"
+ 7654      6F636573 
+ 7654      7300
+ 7655              	.LASF258:
+ 7656 10fe 72634E6F 		.string	"rcNoObj"
+ 7656      4F626A00 
+ 7657              	.LASF297:
+ 7658 1106 7263556E 		.string	"rcUnsupported"
+ 7658      73757070 
+ 7658      6F727465 
+ 7658      6400
+ 7659              	.LASF236:
+ 7660 1114 72634465 		.string	"rcDetaching"
+ 7660      74616368 
+ 7660      696E6700 
+ 7661              	.LASF133:
+ 7662 1120 7263436F 		.string	"rcColumn"
+ 7662      6C756D6E 
+ 7662      00
+ 7663              	.LASF42:
+ 7664 1129 656E6372 		.string	"encrypt_counter_func"
+ 7664      7970745F 
+ 7664      636F756E 
+ 7664      7465725F 
+ 7664      66756E63 
+ 7665              	.LASF298:
+ 7666 113e 7263556E 		.string	"rcUnexpected"
+ 7666      65787065 
+ 7666      63746564 
+
GAS LISTING /tmp/ccXzRABk.s 			page 179
+
+
+ 7666      00
+ 7667              	.LASF62:
+ 7668 114b 64656372 		.string	"decrypt_cbc"
+ 7668      7970745F 
+ 7668      63626300 
+ 7669              	.LASF6:
+ 7670 1157 75696E74 		.string	"uint32_t"
+ 7670      33325F74 
+ 7670      00
+ 7671              	.LASF119:
+ 7672 1160 72635646 		.string	"rcVFS"
+ 7672      5300
+ 7673              	.LASF25:
+ 7674 1166 4442475F 		.string	"DBG_KRYPTO"
+ 7674      4B525950 
+ 7674      544F00
+ 7675              	.LASF343:
+ 7676 1171 72635772 		.string	"rcWrongType"
+ 7676      6F6E6754 
+ 7676      79706500 
+ 7677              	.LASF278:
+ 7678 117d 72634C69 		.string	"rcLibrary"
+ 7678      62726172 
+ 7678      7900
+ 7679              	.LASF311:
+ 7680 1187 72634361 		.string	"rcCanceled"
+ 7680      6E63656C 
+ 7680      656400
+ 7681              	.LASF182:
+ 7682 1192 72634461 		.string	"rcData"
+ 7682      746100
+ 7683              	.LASF146:
+ 7684 1199 72634865 		.string	"rcHeader"
+ 7684      61646572 
+ 7684      00
+ 7685              	.LASF4:
+ 7686 11a2 73686F72 		.string	"short unsigned int"
+ 7686      7420756E 
+ 7686      7369676E 
+ 7686      65642069 
+ 7686      6E7400
+ 7687              	.LASF136:
+ 7688 11b5 72634461 		.string	"rcDatabase"
+ 7688      74616261 
+ 7688      736500
+ 7689              	.LASF61:
+ 7690 11c0 656E6372 		.string	"encrypt_cbc"
+ 7690      7970745F 
+ 7690      63626300 
+ 7691              	.LASF212:
+ 7692 11cc 7263436F 		.string	"rcCommitting"
+ 7692      6D6D6974 
+ 7692      74696E67 
+ 7692      00
+ 7693              	.LASF240:
+ 7694 11d9 7263436C 		.string	"rcClassifying"
+ 7694      61737369 
+
GAS LISTING /tmp/ccXzRABk.s 			page 180
+
+
+ 7694      6679696E 
+ 7694      6700
+ 7695              	.LASF171:
+ 7696 11e7 72635472 		.string	"rcTree"
+ 7696      656500
+ 7697              	.LASF41:
+ 7698 11ee 64656372 		.string	"decrypt_ivec"
+ 7698      7970745F 
+ 7698      69766563 
+ 7698      00
+ 7699              	.LASF30:
+ 7700 11fb 4442475F 		.string	"DBG_ARGS"
+ 7700      41524753 
+ 7700      00
+ 7701              	.LASF200:
+ 7702 1204 72635365 		.string	"rcSelecting"
+ 7702      6C656374 
+ 7702      696E6700 
+ 7703              	.LASF101:
+ 7704 1210 72635465 		.string	"rcText"
+ 7704      787400
+ 7705              	.LASF337:
+ 7706 1217 72634F75 		.string	"rcOutoforder"
+ 7706      746F666F 
+ 7706      72646572 
+ 7706      00
+ 7707              	.LASF386:
+ 7708 1224 4B436970 		.string	"KCipherVecRegAllocNull"
+ 7708      68657256 
+ 7708      65635265 
+ 7708      67416C6C 
+ 7708      6F634E75 
+ 7709              	.LASF304:
+ 7710 123b 7263496E 		.string	"rcInvalid"
+ 7710      76616C69 
+ 7710      6400
+ 7711              	.LASF251:
+ 7712 1245 7263496E 		.string	"rcInitializing"
+ 7712      69746961 
+ 7712      6C697A69 
+ 7712      6E6700
+ 7713              	.LASF130:
+ 7714 1254 7263426C 		.string	"rcBlob"
+ 7714      6F6200
+ 7715              	.LASF53:
+ 7716 125b 7365745F 		.string	"set_encrypt_ivec"
+ 7716      656E6372 
+ 7716      7970745F 
+ 7716      69766563 
+ 7716      00
+ 7717              	.LASF374:
+ 7718 126c 74656D70 		.string	"temp"
+ 7718      00
+ 7719              	.LASF228:
+ 7720 1271 72635265 		.string	"rcReindexing"
+ 7720      696E6465 
+ 7720      78696E67 
+
GAS LISTING /tmp/ccXzRABk.s 			page 181
+
+
+ 7720      00
+ 7721              	.LASF123:
+ 7722 127e 72634E6F 		.string	"rcNoTarg"
+ 7722      54617267 
+ 7722      00
+ 7723              	.LASF305:
+ 7724 1287 7263436F 		.string	"rcCorrupt"
+ 7724      72727570 
+ 7724      7400
+ 7725              	.LASF334:
+ 7726 1291 72634F75 		.string	"rcOutofrange"
+ 7726      746F6672 
+ 7726      616E6765 
+ 7726      00
+ 7727              	.LASF163:
+ 7728 129e 72635363 		.string	"rcSchema"
+ 7728      68656D61 
+ 7728      00
+ 7729              	.LASF159:
+ 7730 12a7 72635061 		.string	"rcPath"
+ 7730      746800
+ 7731              	.LASF210:
+ 7732 12ae 72635265 		.string	"rcReading"
+ 7732      6164696E 
+ 7732      6700
+ 7733              	.LASF80:
+ 7734 12b8 6B65795F 		.string	"key_size"
+ 7734      73697A65 
+ 7734      00
+ 7735              	.LASF342:
+ 7736 12c1 72634E6F 		.string	"rcNotAvailable"
+ 7736      74417661 
+ 7736      696C6162 
+ 7736      6C6500
+ 7737              	.LASF300:
+ 7738 12d0 7263416D 		.string	"rcAmbiguous"
+ 7738      62696775 
+ 7738      6F757300 
+ 7739              		.ident	"GCC: (GNU) 4.4.2"
+ 7740              		.section	.note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/ccXzRABk.s 			page 182
+
+
+DEFINED SYMBOLS
+                            *ABS*:0000000000000000 cipher-vec.c
+     /tmp/ccXzRABk.s:14     .rodata:0000000000000000 KCipherVecRegClassName
+     /tmp/ccXzRABk.s:18     .text:0000000000000000 CipherVecIn
+     /tmp/ccXzRABk.s:49     .text:000000000000001f CipherVecOut
+     /tmp/ccXzRABk.s:81     .text:0000000000000048 KCipherVecRegDestroy
+     /tmp/ccXzRABk.s:129    .text:0000000000000082 KCipherVecRegSetEncryptKey
+     /tmp/ccXzRABk.s:2006   .rodata:0000000000000330 __PRETTY_FUNCTION__.7218
+     /tmp/ccXzRABk.s:2011   .rodata:0000000000000350 __func__.7220
+     /tmp/ccXzRABk.s:214    .text:000000000000016c KCipherVecRegSetDecryptKey
+     /tmp/ccXzRABk.s:1996   .rodata:00000000000002f0 __PRETTY_FUNCTION__.7242
+     /tmp/ccXzRABk.s:2001   .rodata:0000000000000310 __func__.7244
+     /tmp/ccXzRABk.s:303    .text:0000000000000256 KCipherVecRegSetEncryptIvec
+     /tmp/ccXzRABk.s:1991   .rodata:00000000000002d0 __PRETTY_FUNCTION__.7264
+     /tmp/ccXzRABk.s:354    .text:00000000000002d9 KCipherVecRegSetDecryptIvec
+     /tmp/ccXzRABk.s:1986   .rodata:00000000000002b0 __PRETTY_FUNCTION__.7277
+     /tmp/ccXzRABk.s:409    .text:000000000000035c KCipherVecRegSetEncryptCounterFunc
+     /tmp/ccXzRABk.s:1981   .rodata:0000000000000280 __PRETTY_FUNCTION__.7290
+     /tmp/ccXzRABk.s:454    .text:00000000000003cb KCipherVecRegSetDecryptCounterFunc
+     /tmp/ccXzRABk.s:1976   .rodata:0000000000000240 __PRETTY_FUNCTION__.7300
+     /tmp/ccXzRABk.s:499    .text:000000000000043a KCipherVecRegEncryptV1
+     /tmp/ccXzRABk.s:527    .text:0000000000000461 KCipherVecRegDecryptV1
+     /tmp/ccXzRABk.s:555    .text:0000000000000488 KCipherVecRegEncryptV1Int
+     /tmp/ccXzRABk.s:595    .text:00000000000004db KCipherVecRegDecryptV1Int
+     /tmp/ccXzRABk.s:635    .text:000000000000052e KCipherVecRegEncrypt
+     /tmp/ccXzRABk.s:1966   .rodata:00000000000001f0 __func__.7350
+     /tmp/ccXzRABk.s:684    .text:0000000000000592 KCipherVecRegDecrypt
+     /tmp/ccXzRABk.s:1956   .rodata:00000000000001b0 __func__.7366
+     /tmp/ccXzRABk.s:735    .text:00000000000005fd KCipherVecRegEncryptEcb
+     /tmp/ccXzRABk.s:791    .text:000000000000066d KCipherVecRegDecryptEcb
+     /tmp/ccXzRABk.s:847    .text:00000000000006dd KCipherVecRegEncryptCbc
+     /tmp/ccXzRABk.s:929    .text:00000000000007ab KCipherVecRegDecryptCbc
+     /tmp/ccXzRABk.s:1015   .text:000000000000087f KCipherVecRegEncryptPcbc
+     /tmp/ccXzRABk.s:1102   .text:000000000000095c KCipherVecRegDecryptPcbc
+     /tmp/ccXzRABk.s:1184   .text:0000000000000a22 KCipherVecRegEncryptCfb
+     /tmp/ccXzRABk.s:1264   .text:0000000000000ae8 KCipherVecRegDecryptCfb
+     /tmp/ccXzRABk.s:1344   .text:0000000000000bae KCipherVecRegEncryptOfb
+     /tmp/ccXzRABk.s:1424   .text:0000000000000c74 KCipherVecRegDecryptOfb
+     /tmp/ccXzRABk.s:1459   .text:0000000000000cad KCipherVecRegEncryptCtr
+     /tmp/ccXzRABk.s:1946   .rodata:0000000000000170 __func__.7600
+     /tmp/ccXzRABk.s:1488   .text:0000000000000ce3 KCipherVecRegDecryptCtr
+     /tmp/ccXzRABk.s:1936   .rodata:0000000000000130 __func__.7610
+     /tmp/ccXzRABk.s:1520   .data.rel.local:0000000000000000 KCipherVecReg_vt_v1
+     /tmp/ccXzRABk.s:1546   .text:0000000000000d19 KCipherVecRegAllocAes
+     /tmp/ccXzRABk.s:1926   .rodata:00000000000000f0 __func__.7620
+     /tmp/ccXzRABk.s:1588   .text:0000000000000d74 KCipherVecRegInitAes
+     /tmp/ccXzRABk.s:1649   .text:0000000000000e12 KCipherVecRegAllocNull
+     /tmp/ccXzRABk.s:1916   .rodata:00000000000000b0 __func__.7647
+     /tmp/ccXzRABk.s:1691   .text:0000000000000e6d KCipherVecRegInitNull
+     /tmp/ccXzRABk.s:1753   .text:0000000000000f02 KCipherVecRegMake
+     /tmp/ccXzRABk.s:1906   .rodata:0000000000000070 __func__.7675
+     /tmp/ccXzRABk.s:1911   .rodata:0000000000000090 __PRETTY_FUNCTION__.7674
+     /tmp/ccXzRABk.s:1921   .rodata:00000000000000d0 __PRETTY_FUNCTION__.7646
+     /tmp/ccXzRABk.s:1931   .rodata:0000000000000110 __PRETTY_FUNCTION__.7619
+     /tmp/ccXzRABk.s:1941   .rodata:0000000000000150 __PRETTY_FUNCTION__.7609
+     /tmp/ccXzRABk.s:1951   .rodata:0000000000000190 __PRETTY_FUNCTION__.7599
+     /tmp/ccXzRABk.s:1961   .rodata:00000000000001d0 __PRETTY_FUNCTION__.7365
+
GAS LISTING /tmp/ccXzRABk.s 			page 183
+
+
+     /tmp/ccXzRABk.s:1971   .rodata:0000000000000210 __PRETTY_FUNCTION__.7349
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+KCipherDestroy
+free
+__assert_fail
+SetRCFileFuncLine
+memcpy
+calloc
+KCipherInit
+KNullBlockCipherVecRegMake
+KAESBlockCipherVecRegMake
diff --git a/libs/krypto/cipher.c b/libs/krypto/cipher.c
new file mode 100644
index 0000000..85176c3
--- /dev/null
+++ b/libs/krypto/cipher.c
@@ -0,0 +1,536 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#include <krypto/extern.h>
+#include <klib/defs.h>
+
+#include <krypto/cipher.h>
+#include <krypto/ciphermgr.h>
+#include <krypto/testciphermgr.h>
+#include "cipher-priv.h"
+#include "cipher-impl.h"
+
+#include <klib/rc.h>
+
+
+static const char KCipherClassName[] = "KCipherClassName";
+
+/* ----------------------------------------------------------------------
+ * Init
+ *
+ *   Initialize the fields of this object.  The derived class will call this
+ *   during it's initialization.
+ *
+ * self      object to initialze
+ * vt        the virtual table of the derived class
+ * mgr       the cipher manager that is the construction factory block cipher
+ *           objects hold references to the manager while the manager merely
+ *           points at the block ciphers when all block ciphers are destroyed
+ *           the manager loses its references and it too can be destroyed if not
+ *           held elsewhere
+ * name      ASCIZ c-string the name of this class; pointer is expected to remain valid
+ *           for the life of the object
+ */
+void KCipherInit (KCipher * self,
+                  uint32_t block_size,
+                  const KCipher_vt * vt,
+                  const char * name)
+{
+    KRefcountInit (&self->refcount, 1, KCipherClassName, "init", name);
+    self->block_size = block_size;
+    self->vt.version = vt;
+    self->name = name;
+
+    /* the remaining fields have to be initialized in the derived object init */
+}
+
+
+/* ----------------------------------------------------------------------
+ * Destroy
+ *   base class destruction called during the derived class destruction
+ *
+ * self is the cipher object
+ *
+ * memory release is the repsonsibility of the derived class destructor
+ */
+rc_t KCipherDestroy (KCipher * self)
+{
+    if (self)
+    {
+        KRefcountWhack (&self->refcount, self->name);
+    }
+    return 0;
+}
+
+/* ----------------------------------------------------------------------
+ * AddRef
+ *   add a new owner to this class.  This will mean another instance of 
+ *   KCipher used this Block Cipher
+ */
+KRYPTO_EXTERN
+rc_t CC KCipherAddRef (const KCipher * self)
+{
+    if (self)
+    {
+        switch (KRefcountAdd (&self->refcount, KCipherClassName))
+        {
+        case krefLimit:
+            return RC (rcKrypto, rcCipher, rcAttaching, rcRange, rcExcessive);
+        }
+    }
+    return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Release
+ *   
+ */
+static __inline__ rc_t KCipherWhack (KCipher * self)
+{
+    switch (self->vt.version->maj)
+    {
+    case 1:
+        return self->vt.v1->destroy (self);
+    }
+    return RC (rcKrypto, rcCipher, rcDestroying, rcInterface, rcBadVersion);
+}
+
+
+KRYPTO_EXTERN
+rc_t CC KCipherRelease (const KCipher * self)
+{
+    if ( self != NULL )
+    {
+        switch (KRefcountDrop ( & self -> refcount, KCipherClassName))
+        {
+        case krefWhack:
+            return KCipherWhack ((KCipher *)self);
+
+        case krefLimit:
+            return RC ( rcKrypto, rcCipher, rcReleasing, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Some Cipher Methods are really pass through methods to the block cipher
+ *   
+ */
+KRYPTO_EXTERN rc_t CC KCipherBlockSize (const KCipher * self, size_t * bytes)
+{
+    if (self == NULL)
+        return RC (rcKrypto, rcCipher, rcAccessing, rcSelf, rcNull);
+
+    if (bytes == NULL)
+        return RC (rcKrypto, rcCipher, rcAccessing, rcParam, rcNull);
+
+    *bytes = self->block_size;
+
+    return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * 
+ *   
+ */
+KRYPTO_EXTERN rc_t CC KCipherSetEncryptKey (KCipher * self, const void * user_key, size_t user_key_size)
+{
+    if (self == NULL)
+        return RC (rcKrypto, rcCipher, rcAccessing, rcSelf, rcNull);
+
+    if ((user_key == NULL)||(user_key_size == 0))
+        return RC (rcKrypto, rcCipher, rcAccessing, rcParam, rcNull);
+
+    switch (self->vt.version->maj)
+    {
+    case 1:
+        return self->vt.v1->set_encrypt_key (self, user_key, user_key_size);
+    }
+    return RC (rcKrypto, rcCipher, rcUpdating, rcInterface, rcBadVersion);
+}
+
+
+/* ----------------------------------------------------------------------
+ * 
+ *   
+ */
+KRYPTO_EXTERN rc_t CC KCipherSetDecryptKey (KCipher * self, const void * user_key, size_t user_key_size)
+{
+    if (self == NULL)
+        return RC (rcKrypto, rcCipher, rcAccessing, rcSelf, rcNull);
+
+    if ((user_key == NULL)||(user_key_size == 0))
+        return RC (rcKrypto, rcCipher, rcAccessing, rcParam, rcNull);
+
+    switch (self->vt.version->maj)
+    {
+    case 1:
+        return self->vt.v1->set_decrypt_key (self, user_key, user_key_size);
+    }
+    return RC (rcKrypto, rcCipher, rcUpdating, rcInterface, rcBadVersion);
+}
+
+
+
+/* ----------------------------------------------------------------------
+ *  
+ *
+ * Set the ivec (Initialization vector or feedback) for the cipher
+ *
+ * the size of ivec  must match KCipherBlockSize
+ *
+ * the ivec is copied into the cipher not used in place
+ */
+KRYPTO_EXTERN rc_t CC KCipherSetEncryptIVec (KCipher * self, const void * ivec)
+{
+    if (self == NULL)
+        return RC (rcKrypto, rcCipher, rcAccessing, rcSelf, rcNull);
+
+    if (ivec == NULL)
+        return RC (rcKrypto, rcCipher, rcAccessing, rcParam, rcNull);
+
+    switch (self->vt.version->maj)
+    {
+    case 1:
+        return self->vt.v1->set_encrypt_ivec (self, ivec);
+    }
+    return RC (rcKrypto, rcCipher, rcUpdating, rcInterface, rcBadVersion);
+}
+
+
+/* ----------------------------------------------------------------------
+ * 
+ *   
+ */
+KRYPTO_EXTERN rc_t CC KCipherSetDecryptIVec (KCipher * self, const void * ivec)
+{
+    if (self == NULL)
+        return RC (rcKrypto, rcCipher, rcAccessing, rcSelf, rcNull);
+
+    if (ivec == NULL)
+        return RC (rcKrypto, rcCipher, rcAccessing, rcParam, rcNull);
+
+    switch (self->vt.version->maj)
+    {
+    case 1:
+        return self->vt.v1->set_decrypt_ivec (self, ivec);
+    }
+    return RC (rcKrypto, rcCipher, rcUpdating, rcInterface, rcBadVersion);
+}
+
+
+/* ----------------------------------------------------------------------
+ * 
+ *   
+ */
+KRYPTO_EXTERN rc_t CC KCipherSetEncryptCtrFunc (KCipher * self, cipher_ctr_func func)
+{
+    if (self == NULL)
+        return RC (rcKrypto, rcCipher, rcAccessing, rcSelf, rcNull);
+
+    if (func == NULL)
+        return RC (rcKrypto, rcCipher, rcAccessing, rcParam, rcNull);
+
+    switch (self->vt.version->maj)
+    {
+    case 1:
+        return self->vt.v1->set_encrypt_ctr_func (self, func);
+    }
+    return RC (rcKrypto, rcCipher, rcUpdating, rcInterface, rcBadVersion);
+}
+
+
+/* ----------------------------------------------------------------------
+ * 
+ *   
+ */
+KRYPTO_EXTERN rc_t CC KCipherSetDecryptCtrFunc (KCipher * self, cipher_ctr_func func)
+{
+    if (self == NULL)
+        return RC (rcKrypto, rcCipher, rcAccessing, rcSelf, rcNull);
+
+    if (func == NULL)
+        return RC (rcKrypto, rcCipher, rcAccessing, rcParam, rcNull);
+
+    switch (self->vt.version->maj)
+    {
+    case 1:
+        return self->vt.v1->set_decrypt_ctr_func (self, func);
+    }
+    return RC (rcKrypto, rcCipher, rcUpdating, rcInterface, rcBadVersion);
+}
+
+
+KRYPTO_EXTERN rc_t CC KCipherEncrypt (KCipher * self, const void * in, void * out)
+{
+    if (self == NULL)
+        return RC (rcKrypto, rcCipher, rcEncoding, rcSelf, rcNull);
+
+    if ((in == NULL) || (out == NULL))
+        return RC (rcKrypto, rcCipher, rcEncoding, rcParam, rcNull);
+
+    switch (self->vt.version->maj)
+    {
+    case 1:
+        return self->vt.v1->encrypt (self, in, out);
+    }
+    return RC (rcKrypto, rcCipher, rcAccessing, rcInterface, rcBadVersion);
+}
+
+
+KRYPTO_EXTERN rc_t CC KCipherDecrypt (KCipher * self, const void * in, void * out)
+{
+    if (self == NULL)
+        return RC (rcKrypto, rcCipher, rcEncoding, rcSelf, rcNull);
+
+    if ((in == NULL) || (out == NULL))
+        return RC (rcKrypto, rcCipher, rcEncoding, rcParam, rcNull);
+
+    switch (self->vt.version->maj)
+    {
+    case 1:
+        return self->vt.v1->decrypt (self, in, out);
+    }
+    return RC (rcKrypto, rcCipher, rcAccessing, rcInterface, rcBadVersion);
+}
+
+
+/* ====================
+ * longer runs of multiple blocks.
+ *
+ * The algorithms are well defined and standard in most cases
+ *
+ * These aremore or elss equivalent to class functions as they do not depend upon
+ * the operation of the cipher and the algorithms are independent of anything about
+ * the cipher other than its block size.
+ *
+ * PT: plain text block
+ * CT: cipher text block
+ * EK: encryption key
+ * DK: decryption key (might be sthe same as EK)
+ * ENC: encrypt cipher function on a block using a key
+ * DEC: decrypt cipher function on a block using a key
+ * IV: initialization vector - used as feedback for chaining
+ * N:  number used once (nonce)
+ * FB: feedback is the next IV in a chained/feedback mode
+ */
+
+/* -----
+ * NOTE:
+ * 'in' can be the same as 'out' but other overlaps are dangers as a block at a
+ * time is written. The code does not look for overlaps at this point.
+ *
+ * NOTE: currently an implementation detail limits us to 8192 bit cipher block
+ * size.  Changing MAX_BLOCK_SIZE in cipher.c can up that limit without 
+ * causing any other compatibility issues. 
+ *
+ * Two local byte arrays are defined on the stack of 1024 bytes or 8192 bits.
+ */
+/*
+ * NOTE: if in and out overlap incorrectly this will fail
+ */
+#define BLOCK_FUNC_PASTE(A,B) A##B
+#define BLOCK_FUNC(MODE,METHOD) \
+    KRYPTO_EXTERN rc_t CC BLOCK_FUNC_PASTE(KCipher,MODE)                \
+        (KCipher * self, const void * in, void * out,                   \
+         uint32_t block_count)                                          \
+    {                                                                   \
+        rc_t rc;                                                        \
+                                                                        \
+        if (self == NULL)                                               \
+            rc = RC (rcKrypto, rcCipher, rcEncoding, rcSelf, rcNull);   \
+                                                                        \
+        else if (in == NULL)                                            \
+            rc = RC (rcKrypto, rcCipher, rcEncoding, rcParam, rcNull);  \
+                                                                        \
+        else if (out == NULL)                                           \
+            rc = RC (rcKrypto, rcCipher, rcEncoding, rcParam, rcNull);  \
+                                                                        \
+        else if (block_count == 0)                                      \
+            rc = 0;                                                     \
+                                                                        \
+        else                                                            \
+        {                                                               \
+            switch (self->vt.version->maj)                              \
+            {                                                           \
+            case 1:                                                     \
+                return self->vt.v1->METHOD(self, in, out, block_count); \
+            }                                                           \
+            rc = RC (rcKrypto, rcCipher, rcAccessing, rcInterface,      \
+                     rcBadVersion);                                     \
+        }                                                               \
+                                                                        \
+        return rc;                                                      \
+    }
+
+/* ----------
+ * Electronic Code Book - simple cipher with no chaining feedback  just iterate
+ * simple encrypt/decrypt with the plain, text, cipher text and key/
+ *
+ * CT = ENC (PT,EK)
+ * PT = DEC (CT,DK)
+ */
+BLOCK_FUNC(EncryptECB,encrypt_ecb)
+BLOCK_FUNC(DecryptECB,decrypt_ecb)
+
+/* ----------
+ * Cipher-Block Chaining
+ * CT = (FB = ENC (PT^IV, EK))
+ * PT = DEC ((FB = CT), DK)
+ */
+BLOCK_FUNC(EncryptCBC,encrypt_cbc)
+BLOCK_FUNC(DecryptCBC,decrypt_cbc)
+
+/* ----------
+ * Propagating cipher-block chaining
+ * FB = PT ^ (CT = ENC ((PT^IV), EK))
+ * FB = CT ^ (PT = DEC (CT,DK) ^ IV)
+ */
+BLOCK_FUNC(EncryptPCBC,encrypt_pcbc)
+BLOCK_FUNC(DecryptPCBC,decrypt_pcbc)
+
+/* ----------
+ * Cipher Feedback
+ * CT = (FB = PT) ^ ENC (IV, EK))
+ * PT = (FB = CT) ^ DEC (IV, DK)
+ */
+BLOCK_FUNC(EncryptCFB,encrypt_cfb)
+BLOCK_FUNC(DecryptCFB,decrypt_cfb)
+
+/* ----------
+ * Output Feedback
+ * CT = PT ^ (FB = ENC (IV, EK))
+ * PT = CT ^ (FB = DEC (IV, DK))
+ */
+BLOCK_FUNC(EncryptOFB,encrypt_ofb)
+BLOCK_FUNC(DecryptOFB,decrypt_ofb)
+
+/* Counter
+ * IV is a nonce and not re-used as FB
+ * CT = PT ^ ENC (N, EK)
+ * PT = CT ^ ENC (N, DK) 
+ *
+ * The enc_ctr_func (or dec_ctr_func) will be called to update the ivec before
+ * to be the nonce (number used once) before each call to the block cipher 
+ * encrypt function.  The encrypt function is used for decryption mode as well
+ */
+BLOCK_FUNC(EncryptCTR,encrypt_ctr)
+BLOCK_FUNC(DecryptCTR,decrypt_ctr)
+
+
+#ifndef USE_SLOW_ONES
+#define USE_SLOW_ONES 0
+#endif
+rc_t KCipherMakeInt (KCipher ** new_cipher, kcipher_type type)
+{
+    rc_t rc;
+
+    *new_cipher = NULL;
+
+#if 0
+    rc = KCipherVecAesNiMake (new_cipher, type);
+    if (rc)
+    {
+        if (GetRCState(rc) == rcUnsupported)
+        {
+#if USE_SLOW_ONES
+            rc = KCipherVecRegMake (new_cipher, type);
+            if (rc)
+            {
+                if (GetRCState(rc) == rcUnsupported)
+                {
+                    rc = KCipherVecMake (new_cipher, type);
+                    if (GetRCState(rc) == rcUnsupported)
+                    {
+#endif
+#endif
+                        rc = KCipherByteMake (new_cipher, type);
+#if 0
+#if USE_SLOW_ONES
+                    }
+                }
+            }
+#endif
+        }
+    }
+#endif
+    return rc;
+}
+
+kcipher_subtype KCipherSubType = ksubcipher_none;
+
+rc_t KCipherMake (KCipher ** new_cipher, kcipher_type type)
+{
+    rc_t rc;
+
+    if (new_cipher == NULL)
+        rc = RC (rcKrypto, rcCipher, rcConstructing, rcSelf, rcNull);
+
+    else
+    {
+        switch (type)
+        {
+        case kcipher_null:
+        case kcipher_AES:
+            switch (KCipherSubType)
+            {
+            case ksubcipher_byte:
+                rc = KCipherByteMake (new_cipher, type);
+                break;
+
+            case ksubcipher_vec:
+                rc = KCipherVecMake (new_cipher, type);
+                break;
+
+            case ksubcipher_vecreg:
+                rc = KCipherVecRegMake (new_cipher, type);
+                break;
+
+            case ksubcipher_accelerated:
+                rc = KCipherVecAesNiMake (new_cipher, type);
+                break;
+
+            default:
+                rc = KCipherMakeInt (new_cipher, type);
+                break;
+            }
+            break;
+        default:
+            rc = RC (rcKrypto, rcCipher, rcConstructing, rcBlockCipher, rcInvalid);
+            break;
+        }
+    }
+    return rc;
+}
+
+
+
+
+
+
+/* EOF */
diff --git a/libs/krypto/ciphermgr.c b/libs/krypto/ciphermgr.c
new file mode 100644
index 0000000..25e0b1a
--- /dev/null
+++ b/libs/krypto/ciphermgr.c
@@ -0,0 +1,295 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#define USE_AES_NI false
+
+#include <krypto/extern.h>
+#include <krypto/ciphermgr.h>
+#include <krypto/cipher.h>
+
+#include "cipher-priv.h"
+
+#include <kproc/lock.h>
+
+#include <klib/rc.h>
+#include <klib/refcount.h>
+#include <klib/debug.h>
+
+#include <sysalloc.h>
+
+#include <atomic.h>
+
+#include <stdlib.h>
+#include <assert.h>
+
+#ifdef _DEBUGGING
+#define MGR_DEBUG(msg) DBGMSG(DBG_KFS,DBG_FLAG(DBG_KFS_MGR), msg)
+#else
+#define MGR_DEBUG(msg)
+#endif
+
+
+
+static const char kciphermanager_classname [] = "KCipherManager";
+
+
+/*--------------------------------------------------------------------------
+ * KCipherManager
+ */
+/* currently expected to be a singleton and not use a vtable but
+ * be fully fleshed out here */
+static 
+KCipherManager * singleton = NULL;
+
+
+struct KCipherManager
+{
+    KRefcount refcount;
+
+    KLock * lock;
+
+};
+
+
+static
+rc_t KCipherManagerAlloc (KCipherManager ** ppobj)
+{
+    KCipherManager * pobj;
+
+    assert (ppobj);
+
+    pobj = calloc (sizeof *pobj, 1);
+    if (pobj)
+    {
+        *ppobj = pobj;
+        return 0;
+    }
+
+    *ppobj = NULL;
+    return RC (rcKrypto, rcMgr, rcConstructing, rcMemory, rcExhausted);
+}
+
+
+static
+rc_t KCipherManagerInit (KCipherManager * self)
+{
+    rc_t rc;
+
+    rc = KLockMake (&self->lock);
+    if (rc == 0)
+    {
+        KRefcountInit (&self->refcount, 1, kciphermanager_classname, "init",
+                       "singleton");
+    }
+
+    return rc;
+}
+
+
+/* Destroy
+ *  destroy
+ */
+LIB_EXPORT rc_t CC KCipherManagerDestroy ( KCipherManager *self )
+{
+    rc_t rc = 0;
+
+    if ( self == NULL )
+        rc = RC ( rcKrypto, rcMgr, rcDestroying, rcSelf, rcNull );
+    else
+    {
+        if (self == singleton)
+        {
+            KCipherManager * reread;
+
+            reread = atomic_test_and_set_ptr ((void*volatile*)&singleton, NULL, self);
+
+            /* ignore results: just going for guaranteed atomicity though might not need it */
+        }
+
+        /* no return value */
+        KRefcountWhack (&self->refcount, kciphermanager_classname);
+
+        rc = KLockRelease (self->lock);
+
+        free (self);
+    }
+    return rc;
+}
+
+
+/* AddRef
+ *  creates a new reference
+ *  ignores NULL references
+ */
+LIB_EXPORT rc_t CC KCipherManagerAddRef ( const KCipherManager *self )
+{
+    if (self != NULL)
+    {
+        switch (KRefcountAdd (&self->refcount, kciphermanager_classname))
+        {
+        case krefOkay:
+            break;
+        case krefZero:
+            return RC (rcFS, rcMgr, rcAttaching, rcRefcount, rcIncorrect);
+        case krefLimit:
+            return RC (rcFS, rcMgr, rcAttaching, rcRefcount, rcExhausted);
+        case krefNegative:
+            return RC (rcFS, rcMgr, rcAttaching, rcRefcount, rcInvalid);
+        default:
+            return RC (rcFS, rcMgr, rcAttaching, rcRefcount, rcUnknown);
+        }
+    }
+    return 0;
+}
+
+
+/* Release
+ *  discard reference to manager
+ *  ignores NULL references
+ */
+LIB_EXPORT rc_t CC KCipherManagerRelease ( const KCipherManager *self )
+{
+    rc_t rc = 0;
+    if (self != NULL)
+    {
+        switch (KRefcountDrop (&self->refcount, kciphermanager_classname))
+        {
+        case krefOkay:
+        case krefZero:
+            break;
+        case krefWhack:
+            rc = KCipherManagerDestroy ((KCipherManager*)self);
+            break;
+        case krefNegative:
+            return RC (rcFS, rcMgr, rcAttaching, rcRefcount, rcInvalid);
+        default:
+            rc = RC (rcFS, rcMgr, rcAttaching, rcRefcount, rcUnknown);
+            break;            
+        }
+    }
+    return rc;
+}
+
+
+/* Make
+ *  we have a shared singleton for the cipher manager
+ *  first call actually makes the managerblo
+ *  subsequent calls get added references
+ */
+LIB_EXPORT rc_t CC KCipherManagerMake (KCipherManager ** mgr)
+{
+    rc_t rc = 0;
+
+    if (mgr == NULL)
+        return RC (rcKrypto, rcMgr, rcConstructing, rcSelf, rcNull);
+
+    *mgr = NULL;
+
+make_race_retry:
+
+    if (singleton)
+    {
+        rc = KCipherManagerAddRef (singleton);
+        if (rc == 0)
+        {
+            *mgr = singleton;
+            return 0;
+        }
+    }
+    else
+    {
+        KCipherManager * self;
+
+        rc = KCipherManagerAlloc (&self);
+        if (rc == 0)
+        {
+            rc = KCipherManagerInit (self);
+            if (rc == 0)
+            {
+                KCipherManager * reread;
+
+                reread = atomic_test_and_set_ptr ((void*volatile*)&singleton, self, NULL);
+
+                if (reread)
+                {
+                    KCipherManagerDestroy (self);
+                    goto make_race_retry;
+                }
+
+                *mgr = self;
+                return 0;
+            }
+            else
+            {
+                KCipherManagerDestroy (self);
+            }
+        }
+    }
+    return rc;
+}
+
+
+static __inline__
+rc_t KCipherManagerMakeCipherInt (const KCipherManager *self,
+                                  KCipher ** pcipher,
+                                  kcipher_type type)
+{
+    KCipher * pc;
+    rc_t rc;
+
+    assert (self);
+    assert (pcipher);
+
+    rc = KCipherMake (&pc, type);
+
+    *pcipher = rc ? NULL : pc;
+
+    return rc;
+}
+
+
+LIB_EXPORT
+rc_t CC KCipherManagerMakeCipher (const KCipherManager * self,
+                                  struct KCipher ** pcipher,
+                                  kcipher_type type)
+{
+    rc_t rc;
+    
+    if (self == NULL)
+        return RC (rcKrypto, rcMgr, rcConstructing, rcSelf, rcNull);
+
+    if (pcipher == NULL)
+        return RC (rcKrypto, rcMgr, rcConstructing, rcParam, rcNull);
+
+    *pcipher = NULL;
+
+    rc = KCipherManagerMakeCipherInt (self, pcipher, type);
+
+    return rc;
+}
+
+
+
diff --git a/libs/krypto/compile-test.aes-ni.pic.o.list b/libs/krypto/compile-test.aes-ni.pic.o.list
new file mode 100644
index 0000000..98dcfd4
--- /dev/null
+++ b/libs/krypto/compile-test.aes-ni.pic.o.list
@@ -0,0 +1,592 @@
+GAS LISTING /tmp/ccyCKNUn.s 			page 1
+
+
+   1              		.file	"compile-test.c"
+   2              		.section	.debug_abbrev,"", at progbits
+   3              	.Ldebug_abbrev0:
+   4              		.section	.debug_info,"", at progbits
+   5              	.Ldebug_info0:
+   6              		.section	.debug_line,"", at progbits
+   7              	.Ldebug_line0:
+   8 0000 D7000000 		.text
+   8      0200BA00 
+   8      00000101 
+   8      FB0E0D00 
+   8      01010101 
+   9              	.Ltext0:
+  10              	.globl KCipherVecAesNitest
+  11              		.type	KCipherVecAesNitest, @function
+  12              	KCipherVecAesNitest:
+  13              	.LFB575:
+  14              		.file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c"
+   1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** /*===========================================================================
+   2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *
+   3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *                            PUBLIC DOMAIN NOTICE
+   4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *               National Center for Biotechnology Information
+   5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *
+   6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  This software/database is a "United States Government Work" under the
+   7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  terms of the United States Copyright Act.  It was written as part of
+   8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  the author's official duties as a United States Government employee and
+   9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  thus cannot be copyrighted.  This software/database is freely available
+  10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  to the public for use. The National Library of Medicine and the U.S.
+  11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  Government have not placed any restriction on its use or reproduction.
+  12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *
+  13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  Although all reasonable efforts have been taken to ensure the accuracy
+  14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  and reliability of the software and data, the NLM and the U.S.
+  15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  Government do not and cannot warrant the performance or results that
+  16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  may be obtained by using this software or data. The NLM and the U.S.
+  17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  Government disclaim all warranties, express or implied, including
+  18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  warranties of performance, merchantability or fitness for any particular
+  19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  purpose.
+  20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *
+  21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  Please cite the author in any work or product based on this material.
+  22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *
+  23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  * ===========================================================================
+  24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  */
+  25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 
+  26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 
+  27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include <cpuid.h>
+  28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include <v128.h>
+  29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 
+  30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include "ncbi-priv.h"
+  31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include "blockcipher-impl.h"
+  32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 
+  33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 
+  34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 
+  35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** const
+  36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** CipherVec CMEMBER(test) (void)
+  37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** {
+  15              		.loc 1 37 0
+  16              		.cfi_startproc
+
GAS LISTING /tmp/ccyCKNUn.s 			page 2
+
+
+  17 0000 55       		pushq	%rbp
+  18              	.LCFI0:
+  19              		.cfi_def_cfa_offset 16
+  20 0001 4889E5   		movq	%rsp, %rbp
+  21              		.cfi_offset 6, -16
+  22              	.LCFI1:
+  23              		.cfi_def_cfa_register 6
+  38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #if USEVEC
+  39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****     CipherVec zero  =  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+  24              		.loc 1 40 0
+  25 0004 660F6F05 		movdqa	.LC0(%rip), %xmm0
+  25      00000000 
+  26 000c F30F7F45 		movdqu	%xmm0, -32(%rbp)
+  26      E0
+  41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****     CipherVec one   =  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+  42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****                          0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+  27              		.loc 1 42 0
+  28 0011 660F6F05 		movdqa	.LC1(%rip), %xmm0
+  28      00000000 
+  29 0019 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+  29      F0
+  43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #else
+  44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****     CipherVec zero  =  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+  46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****     CipherVec one   =  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+  47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****                          0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+  48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #endif
+  49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****     return zero + one;
+  30              		.loc 1 49 0
+  31 001e F30F6F45 		movdqu	-16(%rbp), %xmm0
+  31      F0
+  32 0023 F30F6F4D 		movdqu	-32(%rbp), %xmm1
+  32      E0
+  33 0028 660FFCC1 		paddb	%xmm1, %xmm0
+  50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** }
+  34              		.loc 1 50 0
+  35 002c C9       		leave
+  36 002d C3       		ret
+  37              		.cfi_endproc
+  38              	.LFE575:
+  39              		.size	KCipherVecAesNitest, .-KCipherVecAesNitest
+  40              		.section	.rodata
+  41              		.align 16
+  42              	.LC0:
+  43 0000 00       		.byte	0
+  44 0001 00       		.byte	0
+  45 0002 00       		.byte	0
+  46 0003 00       		.byte	0
+  47 0004 00       		.byte	0
+  48 0005 00       		.byte	0
+  49 0006 00       		.byte	0
+  50 0007 00       		.byte	0
+  51 0008 00       		.byte	0
+  52 0009 00       		.byte	0
+  53 000a 00       		.byte	0
+  54 000b 00       		.byte	0
+
GAS LISTING /tmp/ccyCKNUn.s 			page 3
+
+
+  55 000c 00       		.byte	0
+  56 000d 00       		.byte	0
+  57 000e 00       		.byte	0
+  58 000f 00       		.byte	0
+  59              		.align 16
+  60              	.LC1:
+  61 0010 01       		.byte	1
+  62 0011 01       		.byte	1
+  63 0012 01       		.byte	1
+  64 0013 01       		.byte	1
+  65 0014 01       		.byte	1
+  66 0015 01       		.byte	1
+  67 0016 01       		.byte	1
+  68 0017 01       		.byte	1
+  69 0018 01       		.byte	1
+  70 0019 01       		.byte	1
+  71 001a 01       		.byte	1
+  72 001b 01       		.byte	1
+  73 001c 01       		.byte	1
+  74 001d 01       		.byte	1
+  75 001e 01       		.byte	1
+  76 001f 01       		.byte	1
+  77              		.text
+  78              	.Letext0:
+  79              		.section	.debug_loc,"", at progbits
+  80              	.Ldebug_loc0:
+  81              	.LLST0:
+  82 0000 00000000 		.quad	.LFB575-.Ltext0
+  82      00000000 
+  83 0008 01000000 		.quad	.LCFI0-.Ltext0
+  83      00000000 
+  84 0010 0200     		.value	0x2
+  85 0012 77       		.byte	0x77
+  86 0013 08       		.sleb128 8
+  87 0014 01000000 		.quad	.LCFI0-.Ltext0
+  87      00000000 
+  88 001c 04000000 		.quad	.LCFI1-.Ltext0
+  88      00000000 
+  89 0024 0200     		.value	0x2
+  90 0026 77       		.byte	0x77
+  91 0027 10       		.sleb128 16
+  92 0028 04000000 		.quad	.LCFI1-.Ltext0
+  92      00000000 
+  93 0030 2E000000 		.quad	.LFE575-.Ltext0
+  93      00000000 
+  94 0038 0200     		.value	0x2
+  95 003a 76       		.byte	0x76
+  96 003b 10       		.sleb128 16
+  97 003c 00000000 		.quad	0x0
+  97      00000000 
+  98 0044 00000000 		.quad	0x0
+  98      00000000 
+  99              		.file 2 "/usr/include/stdint.h"
+ 100              		.file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+ 101              		.file 4 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 102              		.section	.debug_info
+ 103 0000 FD000000 		.long	0xfd
+
GAS LISTING /tmp/ccyCKNUn.s 			page 4
+
+
+ 104 0004 0200     		.value	0x2
+ 105 0006 00000000 		.long	.Ldebug_abbrev0
+ 106 000a 08       		.byte	0x8
+ 107 000b 01       		.uleb128 0x1
+ 108 000c 00000000 		.long	.LASF16
+ 109 0010 01       		.byte	0x1
+ 110 0011 00000000 		.long	.LASF17
+ 111 0015 00000000 		.quad	.Ltext0
+ 111      00000000 
+ 112 001d 00000000 		.quad	.Letext0
+ 112      00000000 
+ 113 0025 00000000 		.long	.Ldebug_line0
+ 114 0029 02       		.uleb128 0x2
+ 115 002a 01       		.byte	0x1
+ 116 002b 06       		.byte	0x6
+ 117 002c 00000000 		.long	.LASF0
+ 118 0030 02       		.uleb128 0x2
+ 119 0031 02       		.byte	0x2
+ 120 0032 05       		.byte	0x5
+ 121 0033 00000000 		.long	.LASF1
+ 122 0037 03       		.uleb128 0x3
+ 123 0038 04       		.byte	0x4
+ 124 0039 05       		.byte	0x5
+ 125 003a 696E7400 		.string	"int"
+ 126 003e 02       		.uleb128 0x2
+ 127 003f 08       		.byte	0x8
+ 128 0040 05       		.byte	0x5
+ 129 0041 00000000 		.long	.LASF2
+ 130 0045 04       		.uleb128 0x4
+ 131 0046 00000000 		.long	.LASF12
+ 132 004a 02       		.byte	0x2
+ 133 004b 31       		.byte	0x31
+ 134 004c 50000000 		.long	0x50
+ 135 0050 02       		.uleb128 0x2
+ 136 0051 01       		.byte	0x1
+ 137 0052 08       		.byte	0x8
+ 138 0053 00000000 		.long	.LASF3
+ 139 0057 02       		.uleb128 0x2
+ 140 0058 02       		.byte	0x2
+ 141 0059 07       		.byte	0x7
+ 142 005a 00000000 		.long	.LASF4
+ 143 005e 02       		.uleb128 0x2
+ 144 005f 04       		.byte	0x4
+ 145 0060 07       		.byte	0x7
+ 146 0061 00000000 		.long	.LASF5
+ 147 0065 02       		.uleb128 0x2
+ 148 0066 08       		.byte	0x8
+ 149 0067 07       		.byte	0x7
+ 150 0068 00000000 		.long	.LASF6
+ 151 006c 05       		.uleb128 0x5
+ 152 006d 08       		.byte	0x8
+ 153 006e 07       		.byte	0x7
+ 154 006f 02       		.uleb128 0x2
+ 155 0070 01       		.byte	0x1
+ 156 0071 06       		.byte	0x6
+ 157 0072 00000000 		.long	.LASF7
+ 158 0076 02       		.uleb128 0x2
+
GAS LISTING /tmp/ccyCKNUn.s 			page 5
+
+
+ 159 0077 08       		.byte	0x8
+ 160 0078 05       		.byte	0x5
+ 161 0079 00000000 		.long	.LASF8
+ 162 007d 02       		.uleb128 0x2
+ 163 007e 04       		.byte	0x4
+ 164 007f 04       		.byte	0x4
+ 165 0080 00000000 		.long	.LASF9
+ 166 0084 02       		.uleb128 0x2
+ 167 0085 08       		.byte	0x8
+ 168 0086 07       		.byte	0x7
+ 169 0087 00000000 		.long	.LASF10
+ 170 008b 02       		.uleb128 0x2
+ 171 008c 08       		.byte	0x8
+ 172 008d 04       		.byte	0x4
+ 173 008e 00000000 		.long	.LASF11
+ 174 0092 04       		.uleb128 0x4
+ 175 0093 00000000 		.long	.LASF13
+ 176 0097 03       		.byte	0x3
+ 177 0098 26       		.byte	0x26
+ 178 0099 9D000000 		.long	0x9d
+ 179 009d 06       		.uleb128 0x6
+ 180 009e 01       		.byte	0x1
+ 181 009f 45000000 		.long	0x45
+ 182 00a3 AE000000 		.long	0xae
+ 183 00a7 07       		.uleb128 0x7
+ 184 00a8 6C000000 		.long	0x6c
+ 185 00ac 0F       		.byte	0xf
+ 186 00ad 00       		.byte	0x0
+ 187 00ae 04       		.uleb128 0x4
+ 188 00af 00000000 		.long	.LASF14
+ 189 00b3 04       		.byte	0x4
+ 190 00b4 3B       		.byte	0x3b
+ 191 00b5 92000000 		.long	0x92
+ 192 00b9 08       		.uleb128 0x8
+ 193 00ba 01       		.byte	0x1
+ 194 00bb 00000000 		.long	.LASF18
+ 195 00bf 01       		.byte	0x1
+ 196 00c0 24       		.byte	0x24
+ 197 00c1 01       		.byte	0x1
+ 198 00c2 FB000000 		.long	0xfb
+ 199 00c6 00000000 		.quad	.LFB575
+ 199      00000000 
+ 200 00ce 00000000 		.quad	.LFE575
+ 200      00000000 
+ 201 00d6 00000000 		.long	.LLST0
+ 202 00da FB000000 		.long	0xfb
+ 203 00de 09       		.uleb128 0x9
+ 204 00df 00000000 		.long	.LASF15
+ 205 00e3 01       		.byte	0x1
+ 206 00e4 27       		.byte	0x27
+ 207 00e5 AE000000 		.long	0xae
+ 208 00e9 02       		.byte	0x2
+ 209 00ea 91       		.byte	0x91
+ 210 00eb 50       		.sleb128 -48
+ 211 00ec 0A       		.uleb128 0xa
+ 212 00ed 6F6E6500 		.string	"one"
+ 213 00f1 01       		.byte	0x1
+
GAS LISTING /tmp/ccyCKNUn.s 			page 6
+
+
+ 214 00f2 29       		.byte	0x29
+ 215 00f3 AE000000 		.long	0xae
+ 216 00f7 02       		.byte	0x2
+ 217 00f8 91       		.byte	0x91
+ 218 00f9 60       		.sleb128 -32
+ 219 00fa 00       		.byte	0x0
+ 220 00fb 0B       		.uleb128 0xb
+ 221 00fc AE000000 		.long	0xae
+ 222 0100 00       		.byte	0x0
+ 223              		.section	.debug_abbrev
+ 224 0000 01       		.uleb128 0x1
+ 225 0001 11       		.uleb128 0x11
+ 226 0002 01       		.byte	0x1
+ 227 0003 25       		.uleb128 0x25
+ 228 0004 0E       		.uleb128 0xe
+ 229 0005 13       		.uleb128 0x13
+ 230 0006 0B       		.uleb128 0xb
+ 231 0007 03       		.uleb128 0x3
+ 232 0008 0E       		.uleb128 0xe
+ 233 0009 11       		.uleb128 0x11
+ 234 000a 01       		.uleb128 0x1
+ 235 000b 12       		.uleb128 0x12
+ 236 000c 01       		.uleb128 0x1
+ 237 000d 10       		.uleb128 0x10
+ 238 000e 06       		.uleb128 0x6
+ 239 000f 00       		.byte	0x0
+ 240 0010 00       		.byte	0x0
+ 241 0011 02       		.uleb128 0x2
+ 242 0012 24       		.uleb128 0x24
+ 243 0013 00       		.byte	0x0
+ 244 0014 0B       		.uleb128 0xb
+ 245 0015 0B       		.uleb128 0xb
+ 246 0016 3E       		.uleb128 0x3e
+ 247 0017 0B       		.uleb128 0xb
+ 248 0018 03       		.uleb128 0x3
+ 249 0019 0E       		.uleb128 0xe
+ 250 001a 00       		.byte	0x0
+ 251 001b 00       		.byte	0x0
+ 252 001c 03       		.uleb128 0x3
+ 253 001d 24       		.uleb128 0x24
+ 254 001e 00       		.byte	0x0
+ 255 001f 0B       		.uleb128 0xb
+ 256 0020 0B       		.uleb128 0xb
+ 257 0021 3E       		.uleb128 0x3e
+ 258 0022 0B       		.uleb128 0xb
+ 259 0023 03       		.uleb128 0x3
+ 260 0024 08       		.uleb128 0x8
+ 261 0025 00       		.byte	0x0
+ 262 0026 00       		.byte	0x0
+ 263 0027 04       		.uleb128 0x4
+ 264 0028 16       		.uleb128 0x16
+ 265 0029 00       		.byte	0x0
+ 266 002a 03       		.uleb128 0x3
+ 267 002b 0E       		.uleb128 0xe
+ 268 002c 3A       		.uleb128 0x3a
+ 269 002d 0B       		.uleb128 0xb
+ 270 002e 3B       		.uleb128 0x3b
+
GAS LISTING /tmp/ccyCKNUn.s 			page 7
+
+
+ 271 002f 0B       		.uleb128 0xb
+ 272 0030 49       		.uleb128 0x49
+ 273 0031 13       		.uleb128 0x13
+ 274 0032 00       		.byte	0x0
+ 275 0033 00       		.byte	0x0
+ 276 0034 05       		.uleb128 0x5
+ 277 0035 24       		.uleb128 0x24
+ 278 0036 00       		.byte	0x0
+ 279 0037 0B       		.uleb128 0xb
+ 280 0038 0B       		.uleb128 0xb
+ 281 0039 3E       		.uleb128 0x3e
+ 282 003a 0B       		.uleb128 0xb
+ 283 003b 00       		.byte	0x0
+ 284 003c 00       		.byte	0x0
+ 285 003d 06       		.uleb128 0x6
+ 286 003e 01       		.uleb128 0x1
+ 287 003f 01       		.byte	0x1
+ 288 0040 8742     		.uleb128 0x2107
+ 289 0042 0C       		.uleb128 0xc
+ 290 0043 49       		.uleb128 0x49
+ 291 0044 13       		.uleb128 0x13
+ 292 0045 01       		.uleb128 0x1
+ 293 0046 13       		.uleb128 0x13
+ 294 0047 00       		.byte	0x0
+ 295 0048 00       		.byte	0x0
+ 296 0049 07       		.uleb128 0x7
+ 297 004a 21       		.uleb128 0x21
+ 298 004b 00       		.byte	0x0
+ 299 004c 49       		.uleb128 0x49
+ 300 004d 13       		.uleb128 0x13
+ 301 004e 2F       		.uleb128 0x2f
+ 302 004f 0B       		.uleb128 0xb
+ 303 0050 00       		.byte	0x0
+ 304 0051 00       		.byte	0x0
+ 305 0052 08       		.uleb128 0x8
+ 306 0053 2E       		.uleb128 0x2e
+ 307 0054 01       		.byte	0x1
+ 308 0055 3F       		.uleb128 0x3f
+ 309 0056 0C       		.uleb128 0xc
+ 310 0057 03       		.uleb128 0x3
+ 311 0058 0E       		.uleb128 0xe
+ 312 0059 3A       		.uleb128 0x3a
+ 313 005a 0B       		.uleb128 0xb
+ 314 005b 3B       		.uleb128 0x3b
+ 315 005c 0B       		.uleb128 0xb
+ 316 005d 27       		.uleb128 0x27
+ 317 005e 0C       		.uleb128 0xc
+ 318 005f 49       		.uleb128 0x49
+ 319 0060 13       		.uleb128 0x13
+ 320 0061 11       		.uleb128 0x11
+ 321 0062 01       		.uleb128 0x1
+ 322 0063 12       		.uleb128 0x12
+ 323 0064 01       		.uleb128 0x1
+ 324 0065 40       		.uleb128 0x40
+ 325 0066 06       		.uleb128 0x6
+ 326 0067 01       		.uleb128 0x1
+ 327 0068 13       		.uleb128 0x13
+
GAS LISTING /tmp/ccyCKNUn.s 			page 8
+
+
+ 328 0069 00       		.byte	0x0
+ 329 006a 00       		.byte	0x0
+ 330 006b 09       		.uleb128 0x9
+ 331 006c 34       		.uleb128 0x34
+ 332 006d 00       		.byte	0x0
+ 333 006e 03       		.uleb128 0x3
+ 334 006f 0E       		.uleb128 0xe
+ 335 0070 3A       		.uleb128 0x3a
+ 336 0071 0B       		.uleb128 0xb
+ 337 0072 3B       		.uleb128 0x3b
+ 338 0073 0B       		.uleb128 0xb
+ 339 0074 49       		.uleb128 0x49
+ 340 0075 13       		.uleb128 0x13
+ 341 0076 02       		.uleb128 0x2
+ 342 0077 0A       		.uleb128 0xa
+ 343 0078 00       		.byte	0x0
+ 344 0079 00       		.byte	0x0
+ 345 007a 0A       		.uleb128 0xa
+ 346 007b 34       		.uleb128 0x34
+ 347 007c 00       		.byte	0x0
+ 348 007d 03       		.uleb128 0x3
+ 349 007e 08       		.uleb128 0x8
+ 350 007f 3A       		.uleb128 0x3a
+ 351 0080 0B       		.uleb128 0xb
+ 352 0081 3B       		.uleb128 0x3b
+ 353 0082 0B       		.uleb128 0xb
+ 354 0083 49       		.uleb128 0x49
+ 355 0084 13       		.uleb128 0x13
+ 356 0085 02       		.uleb128 0x2
+ 357 0086 0A       		.uleb128 0xa
+ 358 0087 00       		.byte	0x0
+ 359 0088 00       		.byte	0x0
+ 360 0089 0B       		.uleb128 0xb
+ 361 008a 26       		.uleb128 0x26
+ 362 008b 00       		.byte	0x0
+ 363 008c 49       		.uleb128 0x49
+ 364 008d 13       		.uleb128 0x13
+ 365 008e 00       		.byte	0x0
+ 366 008f 00       		.byte	0x0
+ 367 0090 00       		.byte	0x0
+ 368              		.section	.debug_pubnames,"", at progbits
+ 369 0000 26000000 		.long	0x26
+ 370 0004 0200     		.value	0x2
+ 371 0006 00000000 		.long	.Ldebug_info0
+ 372 000a 01010000 		.long	0x101
+ 373 000e B9000000 		.long	0xb9
+ 374 0012 4B436970 		.string	"KCipherVecAesNitest"
+ 374      68657256 
+ 374      65634165 
+ 374      734E6974 
+ 374      65737400 
+ 375 0026 00000000 		.long	0x0
+ 376              		.section	.debug_aranges,"", at progbits
+ 377 0000 2C000000 		.long	0x2c
+ 378 0004 0200     		.value	0x2
+ 379 0006 00000000 		.long	.Ldebug_info0
+ 380 000a 08       		.byte	0x8
+
GAS LISTING /tmp/ccyCKNUn.s 			page 9
+
+
+ 381 000b 00       		.byte	0x0
+ 382 000c 0000     		.value	0x0
+ 383 000e 0000     		.value	0x0
+ 384 0010 00000000 		.quad	.Ltext0
+ 384      00000000 
+ 385 0018 2E000000 		.quad	.Letext0-.Ltext0
+ 385      00000000 
+ 386 0020 00000000 		.quad	0x0
+ 386      00000000 
+ 387 0028 00000000 		.quad	0x0
+ 387      00000000 
+ 388              		.section	.debug_str,"MS", at progbits,1
+ 389              	.LASF8:
+ 390 0000 6C6F6E67 		.string	"long long int"
+ 390      206C6F6E 
+ 390      6720696E 
+ 390      7400
+ 391              	.LASF17:
+ 392 000e 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c"
+ 392      652F726F 
+ 392      6461726D 
+ 392      65722F73 
+ 392      72615F73 
+ 393              	.LASF5:
+ 394 0048 756E7369 		.string	"unsigned int"
+ 394      676E6564 
+ 394      20696E74 
+ 394      00
+ 395              	.LASF6:
+ 396 0055 6C6F6E67 		.string	"long unsigned int"
+ 396      20756E73 
+ 396      69676E65 
+ 396      6420696E 
+ 396      7400
+ 397              	.LASF10:
+ 398 0067 6C6F6E67 		.string	"long long unsigned int"
+ 398      206C6F6E 
+ 398      6720756E 
+ 398      7369676E 
+ 398      65642069 
+ 399              	.LASF12:
+ 400 007e 75696E74 		.string	"uint8_t"
+ 400      385F7400 
+ 401              	.LASF18:
+ 402 0086 4B436970 		.string	"KCipherVecAesNitest"
+ 402      68657256 
+ 402      65634165 
+ 402      734E6974 
+ 402      65737400 
+ 403              	.LASF16:
+ 404 009a 474E5520 		.string	"GNU C 4.4.2"
+ 404      4320342E 
+ 404      342E3200 
+ 405              	.LASF3:
+ 406 00a6 756E7369 		.string	"unsigned char"
+ 406      676E6564 
+ 406      20636861 
+
GAS LISTING /tmp/ccyCKNUn.s 			page 10
+
+
+ 406      7200
+ 407              	.LASF7:
+ 408 00b4 63686172 		.string	"char"
+ 408      00
+ 409              	.LASF2:
+ 410 00b9 6C6F6E67 		.string	"long int"
+ 410      20696E74 
+ 410      00
+ 411              	.LASF11:
+ 412 00c2 646F7562 		.string	"double"
+ 412      6C6500
+ 413              	.LASF4:
+ 414 00c9 73686F72 		.string	"short unsigned int"
+ 414      7420756E 
+ 414      7369676E 
+ 414      65642069 
+ 414      6E7400
+ 415              	.LASF0:
+ 416 00dc 7369676E 		.string	"signed char"
+ 416      65642063 
+ 416      68617200 
+ 417              	.LASF13:
+ 418 00e8 76313238 		.string	"v128_u8_t"
+ 418      5F75385F 
+ 418      7400
+ 419              	.LASF14:
+ 420 00f2 43697068 		.string	"CipherVec"
+ 420      65725665 
+ 420      6300
+ 421              	.LASF9:
+ 422 00fc 666C6F61 		.string	"float"
+ 422      7400
+ 423              	.LASF15:
+ 424 0102 7A65726F 		.string	"zero"
+ 424      00
+ 425              	.LASF1:
+ 426 0107 73686F72 		.string	"short int"
+ 426      7420696E 
+ 426      7400
+ 427              		.ident	"GCC: (GNU) 4.4.2"
+ 428              		.section	.note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/ccyCKNUn.s 			page 11
+
+
+DEFINED SYMBOLS
+                            *ABS*:0000000000000000 compile-test.c
+     /tmp/ccyCKNUn.s:12     .text:0000000000000000 KCipherVecAesNitest
+
+NO UNDEFINED SYMBOLS
diff --git a/libs/krypto/compile-test.c b/libs/krypto/compile-test.c
new file mode 100644
index 0000000..1d3de7a
--- /dev/null
+++ b/libs/krypto/compile-test.c
@@ -0,0 +1,50 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+
+#include <cpuid.h>
+#include <v128.h>
+
+#include "ncbi-priv.h"
+#include "blockcipher-impl.h"
+
+
+
+const
+CipherVec CMEMBER(test) (void)
+{
+#if USEVEC
+    CipherVec zero  =  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+    CipherVec one   =  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+#else
+    CipherVec zero  =  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+    CipherVec one   =  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+#endif
+    return zero + one;
+}
diff --git a/libs/krypto/compile-test.vec.pic.o.list b/libs/krypto/compile-test.vec.pic.o.list
new file mode 100644
index 0000000..263aadf
--- /dev/null
+++ b/libs/krypto/compile-test.vec.pic.o.list
@@ -0,0 +1,590 @@
+GAS LISTING /tmp/cckgalP6.s 			page 1
+
+
+   1              		.file	"compile-test.c"
+   2              		.section	.debug_abbrev,"", at progbits
+   3              	.Ldebug_abbrev0:
+   4              		.section	.debug_info,"", at progbits
+   5              	.Ldebug_info0:
+   6              		.section	.debug_line,"", at progbits
+   7              	.Ldebug_line0:
+   8 0000 D7000000 		.text
+   8      0200BA00 
+   8      00000101 
+   8      FB0E0D00 
+   8      01010101 
+   9              	.Ltext0:
+  10              	.globl KCipherVectest
+  11              		.type	KCipherVectest, @function
+  12              	KCipherVectest:
+  13              	.LFB495:
+  14              		.file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c"
+   1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** /*===========================================================================
+   2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *
+   3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *                            PUBLIC DOMAIN NOTICE
+   4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *               National Center for Biotechnology Information
+   5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *
+   6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  This software/database is a "United States Government Work" under the
+   7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  terms of the United States Copyright Act.  It was written as part of
+   8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  the author's official duties as a United States Government employee and
+   9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  thus cannot be copyrighted.  This software/database is freely available
+  10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  to the public for use. The National Library of Medicine and the U.S.
+  11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  Government have not placed any restriction on its use or reproduction.
+  12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *
+  13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  Although all reasonable efforts have been taken to ensure the accuracy
+  14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  and reliability of the software and data, the NLM and the U.S.
+  15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  Government do not and cannot warrant the performance or results that
+  16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  may be obtained by using this software or data. The NLM and the U.S.
+  17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  Government disclaim all warranties, express or implied, including
+  18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  warranties of performance, merchantability or fitness for any particular
+  19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  purpose.
+  20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *
+  21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  Please cite the author in any work or product based on this material.
+  22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *
+  23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  * ===========================================================================
+  24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  */
+  25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 
+  26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 
+  27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include <cpuid.h>
+  28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include <v128.h>
+  29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 
+  30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include "ncbi-priv.h"
+  31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include "blockcipher-impl.h"
+  32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 
+  33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 
+  34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 
+  35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** const
+  36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** CipherVec CMEMBER(test) (void)
+  37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** {
+  15              		.loc 1 37 0
+  16              		.cfi_startproc
+
GAS LISTING /tmp/cckgalP6.s 			page 2
+
+
+  17 0000 55       		pushq	%rbp
+  18              	.LCFI0:
+  19              		.cfi_def_cfa_offset 16
+  20 0001 4889E5   		movq	%rsp, %rbp
+  21              		.cfi_offset 6, -16
+  22              	.LCFI1:
+  23              		.cfi_def_cfa_register 6
+  38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #if USEVEC
+  39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****     CipherVec zero  =  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+  24              		.loc 1 40 0
+  25 0004 660F6F05 		movdqa	.LC0(%rip), %xmm0
+  25      00000000 
+  26 000c F30F7F45 		movdqu	%xmm0, -32(%rbp)
+  26      E0
+  41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****     CipherVec one   =  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+  42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****                          0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+  27              		.loc 1 42 0
+  28 0011 660F6F05 		movdqa	.LC1(%rip), %xmm0
+  28      00000000 
+  29 0019 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+  29      F0
+  43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #else
+  44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****     CipherVec zero  =  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+  46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****     CipherVec one   =  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+  47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****                          0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+  48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #endif
+  49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****     return zero + one;
+  30              		.loc 1 49 0
+  31 001e F30F6F45 		movdqu	-16(%rbp), %xmm0
+  31      F0
+  32 0023 F30F6F4D 		movdqu	-32(%rbp), %xmm1
+  32      E0
+  33 0028 660FFCC1 		paddb	%xmm1, %xmm0
+  50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** }
+  34              		.loc 1 50 0
+  35 002c C9       		leave
+  36 002d C3       		ret
+  37              		.cfi_endproc
+  38              	.LFE495:
+  39              		.size	KCipherVectest, .-KCipherVectest
+  40              		.section	.rodata
+  41              		.align 16
+  42              	.LC0:
+  43 0000 00       		.byte	0
+  44 0001 00       		.byte	0
+  45 0002 00       		.byte	0
+  46 0003 00       		.byte	0
+  47 0004 00       		.byte	0
+  48 0005 00       		.byte	0
+  49 0006 00       		.byte	0
+  50 0007 00       		.byte	0
+  51 0008 00       		.byte	0
+  52 0009 00       		.byte	0
+  53 000a 00       		.byte	0
+  54 000b 00       		.byte	0
+
GAS LISTING /tmp/cckgalP6.s 			page 3
+
+
+  55 000c 00       		.byte	0
+  56 000d 00       		.byte	0
+  57 000e 00       		.byte	0
+  58 000f 00       		.byte	0
+  59              		.align 16
+  60              	.LC1:
+  61 0010 01       		.byte	1
+  62 0011 01       		.byte	1
+  63 0012 01       		.byte	1
+  64 0013 01       		.byte	1
+  65 0014 01       		.byte	1
+  66 0015 01       		.byte	1
+  67 0016 01       		.byte	1
+  68 0017 01       		.byte	1
+  69 0018 01       		.byte	1
+  70 0019 01       		.byte	1
+  71 001a 01       		.byte	1
+  72 001b 01       		.byte	1
+  73 001c 01       		.byte	1
+  74 001d 01       		.byte	1
+  75 001e 01       		.byte	1
+  76 001f 01       		.byte	1
+  77              		.text
+  78              	.Letext0:
+  79              		.section	.debug_loc,"", at progbits
+  80              	.Ldebug_loc0:
+  81              	.LLST0:
+  82 0000 00000000 		.quad	.LFB495-.Ltext0
+  82      00000000 
+  83 0008 01000000 		.quad	.LCFI0-.Ltext0
+  83      00000000 
+  84 0010 0200     		.value	0x2
+  85 0012 77       		.byte	0x77
+  86 0013 08       		.sleb128 8
+  87 0014 01000000 		.quad	.LCFI0-.Ltext0
+  87      00000000 
+  88 001c 04000000 		.quad	.LCFI1-.Ltext0
+  88      00000000 
+  89 0024 0200     		.value	0x2
+  90 0026 77       		.byte	0x77
+  91 0027 10       		.sleb128 16
+  92 0028 04000000 		.quad	.LCFI1-.Ltext0
+  92      00000000 
+  93 0030 2E000000 		.quad	.LFE495-.Ltext0
+  93      00000000 
+  94 0038 0200     		.value	0x2
+  95 003a 76       		.byte	0x76
+  96 003b 10       		.sleb128 16
+  97 003c 00000000 		.quad	0x0
+  97      00000000 
+  98 0044 00000000 		.quad	0x0
+  98      00000000 
+  99              		.file 2 "/usr/include/stdint.h"
+ 100              		.file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+ 101              		.file 4 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 102              		.section	.debug_info
+ 103 0000 FD000000 		.long	0xfd
+
GAS LISTING /tmp/cckgalP6.s 			page 4
+
+
+ 104 0004 0200     		.value	0x2
+ 105 0006 00000000 		.long	.Ldebug_abbrev0
+ 106 000a 08       		.byte	0x8
+ 107 000b 01       		.uleb128 0x1
+ 108 000c 00000000 		.long	.LASF16
+ 109 0010 01       		.byte	0x1
+ 110 0011 00000000 		.long	.LASF17
+ 111 0015 00000000 		.quad	.Ltext0
+ 111      00000000 
+ 112 001d 00000000 		.quad	.Letext0
+ 112      00000000 
+ 113 0025 00000000 		.long	.Ldebug_line0
+ 114 0029 02       		.uleb128 0x2
+ 115 002a 01       		.byte	0x1
+ 116 002b 06       		.byte	0x6
+ 117 002c 00000000 		.long	.LASF0
+ 118 0030 02       		.uleb128 0x2
+ 119 0031 02       		.byte	0x2
+ 120 0032 05       		.byte	0x5
+ 121 0033 00000000 		.long	.LASF1
+ 122 0037 03       		.uleb128 0x3
+ 123 0038 04       		.byte	0x4
+ 124 0039 05       		.byte	0x5
+ 125 003a 696E7400 		.string	"int"
+ 126 003e 02       		.uleb128 0x2
+ 127 003f 08       		.byte	0x8
+ 128 0040 05       		.byte	0x5
+ 129 0041 00000000 		.long	.LASF2
+ 130 0045 04       		.uleb128 0x4
+ 131 0046 00000000 		.long	.LASF12
+ 132 004a 02       		.byte	0x2
+ 133 004b 31       		.byte	0x31
+ 134 004c 50000000 		.long	0x50
+ 135 0050 02       		.uleb128 0x2
+ 136 0051 01       		.byte	0x1
+ 137 0052 08       		.byte	0x8
+ 138 0053 00000000 		.long	.LASF3
+ 139 0057 02       		.uleb128 0x2
+ 140 0058 02       		.byte	0x2
+ 141 0059 07       		.byte	0x7
+ 142 005a 00000000 		.long	.LASF4
+ 143 005e 02       		.uleb128 0x2
+ 144 005f 04       		.byte	0x4
+ 145 0060 07       		.byte	0x7
+ 146 0061 00000000 		.long	.LASF5
+ 147 0065 02       		.uleb128 0x2
+ 148 0066 08       		.byte	0x8
+ 149 0067 07       		.byte	0x7
+ 150 0068 00000000 		.long	.LASF6
+ 151 006c 05       		.uleb128 0x5
+ 152 006d 08       		.byte	0x8
+ 153 006e 07       		.byte	0x7
+ 154 006f 02       		.uleb128 0x2
+ 155 0070 01       		.byte	0x1
+ 156 0071 06       		.byte	0x6
+ 157 0072 00000000 		.long	.LASF7
+ 158 0076 02       		.uleb128 0x2
+
GAS LISTING /tmp/cckgalP6.s 			page 5
+
+
+ 159 0077 08       		.byte	0x8
+ 160 0078 05       		.byte	0x5
+ 161 0079 00000000 		.long	.LASF8
+ 162 007d 02       		.uleb128 0x2
+ 163 007e 04       		.byte	0x4
+ 164 007f 04       		.byte	0x4
+ 165 0080 00000000 		.long	.LASF9
+ 166 0084 02       		.uleb128 0x2
+ 167 0085 08       		.byte	0x8
+ 168 0086 07       		.byte	0x7
+ 169 0087 00000000 		.long	.LASF10
+ 170 008b 02       		.uleb128 0x2
+ 171 008c 08       		.byte	0x8
+ 172 008d 04       		.byte	0x4
+ 173 008e 00000000 		.long	.LASF11
+ 174 0092 04       		.uleb128 0x4
+ 175 0093 00000000 		.long	.LASF13
+ 176 0097 03       		.byte	0x3
+ 177 0098 26       		.byte	0x26
+ 178 0099 9D000000 		.long	0x9d
+ 179 009d 06       		.uleb128 0x6
+ 180 009e 01       		.byte	0x1
+ 181 009f 45000000 		.long	0x45
+ 182 00a3 AE000000 		.long	0xae
+ 183 00a7 07       		.uleb128 0x7
+ 184 00a8 6C000000 		.long	0x6c
+ 185 00ac 0F       		.byte	0xf
+ 186 00ad 00       		.byte	0x0
+ 187 00ae 04       		.uleb128 0x4
+ 188 00af 00000000 		.long	.LASF14
+ 189 00b3 04       		.byte	0x4
+ 190 00b4 3B       		.byte	0x3b
+ 191 00b5 92000000 		.long	0x92
+ 192 00b9 08       		.uleb128 0x8
+ 193 00ba 01       		.byte	0x1
+ 194 00bb 00000000 		.long	.LASF18
+ 195 00bf 01       		.byte	0x1
+ 196 00c0 24       		.byte	0x24
+ 197 00c1 01       		.byte	0x1
+ 198 00c2 FB000000 		.long	0xfb
+ 199 00c6 00000000 		.quad	.LFB495
+ 199      00000000 
+ 200 00ce 00000000 		.quad	.LFE495
+ 200      00000000 
+ 201 00d6 00000000 		.long	.LLST0
+ 202 00da FB000000 		.long	0xfb
+ 203 00de 09       		.uleb128 0x9
+ 204 00df 00000000 		.long	.LASF15
+ 205 00e3 01       		.byte	0x1
+ 206 00e4 27       		.byte	0x27
+ 207 00e5 AE000000 		.long	0xae
+ 208 00e9 02       		.byte	0x2
+ 209 00ea 91       		.byte	0x91
+ 210 00eb 50       		.sleb128 -48
+ 211 00ec 0A       		.uleb128 0xa
+ 212 00ed 6F6E6500 		.string	"one"
+ 213 00f1 01       		.byte	0x1
+
GAS LISTING /tmp/cckgalP6.s 			page 6
+
+
+ 214 00f2 29       		.byte	0x29
+ 215 00f3 AE000000 		.long	0xae
+ 216 00f7 02       		.byte	0x2
+ 217 00f8 91       		.byte	0x91
+ 218 00f9 60       		.sleb128 -32
+ 219 00fa 00       		.byte	0x0
+ 220 00fb 0B       		.uleb128 0xb
+ 221 00fc AE000000 		.long	0xae
+ 222 0100 00       		.byte	0x0
+ 223              		.section	.debug_abbrev
+ 224 0000 01       		.uleb128 0x1
+ 225 0001 11       		.uleb128 0x11
+ 226 0002 01       		.byte	0x1
+ 227 0003 25       		.uleb128 0x25
+ 228 0004 0E       		.uleb128 0xe
+ 229 0005 13       		.uleb128 0x13
+ 230 0006 0B       		.uleb128 0xb
+ 231 0007 03       		.uleb128 0x3
+ 232 0008 0E       		.uleb128 0xe
+ 233 0009 11       		.uleb128 0x11
+ 234 000a 01       		.uleb128 0x1
+ 235 000b 12       		.uleb128 0x12
+ 236 000c 01       		.uleb128 0x1
+ 237 000d 10       		.uleb128 0x10
+ 238 000e 06       		.uleb128 0x6
+ 239 000f 00       		.byte	0x0
+ 240 0010 00       		.byte	0x0
+ 241 0011 02       		.uleb128 0x2
+ 242 0012 24       		.uleb128 0x24
+ 243 0013 00       		.byte	0x0
+ 244 0014 0B       		.uleb128 0xb
+ 245 0015 0B       		.uleb128 0xb
+ 246 0016 3E       		.uleb128 0x3e
+ 247 0017 0B       		.uleb128 0xb
+ 248 0018 03       		.uleb128 0x3
+ 249 0019 0E       		.uleb128 0xe
+ 250 001a 00       		.byte	0x0
+ 251 001b 00       		.byte	0x0
+ 252 001c 03       		.uleb128 0x3
+ 253 001d 24       		.uleb128 0x24
+ 254 001e 00       		.byte	0x0
+ 255 001f 0B       		.uleb128 0xb
+ 256 0020 0B       		.uleb128 0xb
+ 257 0021 3E       		.uleb128 0x3e
+ 258 0022 0B       		.uleb128 0xb
+ 259 0023 03       		.uleb128 0x3
+ 260 0024 08       		.uleb128 0x8
+ 261 0025 00       		.byte	0x0
+ 262 0026 00       		.byte	0x0
+ 263 0027 04       		.uleb128 0x4
+ 264 0028 16       		.uleb128 0x16
+ 265 0029 00       		.byte	0x0
+ 266 002a 03       		.uleb128 0x3
+ 267 002b 0E       		.uleb128 0xe
+ 268 002c 3A       		.uleb128 0x3a
+ 269 002d 0B       		.uleb128 0xb
+ 270 002e 3B       		.uleb128 0x3b
+
GAS LISTING /tmp/cckgalP6.s 			page 7
+
+
+ 271 002f 0B       		.uleb128 0xb
+ 272 0030 49       		.uleb128 0x49
+ 273 0031 13       		.uleb128 0x13
+ 274 0032 00       		.byte	0x0
+ 275 0033 00       		.byte	0x0
+ 276 0034 05       		.uleb128 0x5
+ 277 0035 24       		.uleb128 0x24
+ 278 0036 00       		.byte	0x0
+ 279 0037 0B       		.uleb128 0xb
+ 280 0038 0B       		.uleb128 0xb
+ 281 0039 3E       		.uleb128 0x3e
+ 282 003a 0B       		.uleb128 0xb
+ 283 003b 00       		.byte	0x0
+ 284 003c 00       		.byte	0x0
+ 285 003d 06       		.uleb128 0x6
+ 286 003e 01       		.uleb128 0x1
+ 287 003f 01       		.byte	0x1
+ 288 0040 8742     		.uleb128 0x2107
+ 289 0042 0C       		.uleb128 0xc
+ 290 0043 49       		.uleb128 0x49
+ 291 0044 13       		.uleb128 0x13
+ 292 0045 01       		.uleb128 0x1
+ 293 0046 13       		.uleb128 0x13
+ 294 0047 00       		.byte	0x0
+ 295 0048 00       		.byte	0x0
+ 296 0049 07       		.uleb128 0x7
+ 297 004a 21       		.uleb128 0x21
+ 298 004b 00       		.byte	0x0
+ 299 004c 49       		.uleb128 0x49
+ 300 004d 13       		.uleb128 0x13
+ 301 004e 2F       		.uleb128 0x2f
+ 302 004f 0B       		.uleb128 0xb
+ 303 0050 00       		.byte	0x0
+ 304 0051 00       		.byte	0x0
+ 305 0052 08       		.uleb128 0x8
+ 306 0053 2E       		.uleb128 0x2e
+ 307 0054 01       		.byte	0x1
+ 308 0055 3F       		.uleb128 0x3f
+ 309 0056 0C       		.uleb128 0xc
+ 310 0057 03       		.uleb128 0x3
+ 311 0058 0E       		.uleb128 0xe
+ 312 0059 3A       		.uleb128 0x3a
+ 313 005a 0B       		.uleb128 0xb
+ 314 005b 3B       		.uleb128 0x3b
+ 315 005c 0B       		.uleb128 0xb
+ 316 005d 27       		.uleb128 0x27
+ 317 005e 0C       		.uleb128 0xc
+ 318 005f 49       		.uleb128 0x49
+ 319 0060 13       		.uleb128 0x13
+ 320 0061 11       		.uleb128 0x11
+ 321 0062 01       		.uleb128 0x1
+ 322 0063 12       		.uleb128 0x12
+ 323 0064 01       		.uleb128 0x1
+ 324 0065 40       		.uleb128 0x40
+ 325 0066 06       		.uleb128 0x6
+ 326 0067 01       		.uleb128 0x1
+ 327 0068 13       		.uleb128 0x13
+
GAS LISTING /tmp/cckgalP6.s 			page 8
+
+
+ 328 0069 00       		.byte	0x0
+ 329 006a 00       		.byte	0x0
+ 330 006b 09       		.uleb128 0x9
+ 331 006c 34       		.uleb128 0x34
+ 332 006d 00       		.byte	0x0
+ 333 006e 03       		.uleb128 0x3
+ 334 006f 0E       		.uleb128 0xe
+ 335 0070 3A       		.uleb128 0x3a
+ 336 0071 0B       		.uleb128 0xb
+ 337 0072 3B       		.uleb128 0x3b
+ 338 0073 0B       		.uleb128 0xb
+ 339 0074 49       		.uleb128 0x49
+ 340 0075 13       		.uleb128 0x13
+ 341 0076 02       		.uleb128 0x2
+ 342 0077 0A       		.uleb128 0xa
+ 343 0078 00       		.byte	0x0
+ 344 0079 00       		.byte	0x0
+ 345 007a 0A       		.uleb128 0xa
+ 346 007b 34       		.uleb128 0x34
+ 347 007c 00       		.byte	0x0
+ 348 007d 03       		.uleb128 0x3
+ 349 007e 08       		.uleb128 0x8
+ 350 007f 3A       		.uleb128 0x3a
+ 351 0080 0B       		.uleb128 0xb
+ 352 0081 3B       		.uleb128 0x3b
+ 353 0082 0B       		.uleb128 0xb
+ 354 0083 49       		.uleb128 0x49
+ 355 0084 13       		.uleb128 0x13
+ 356 0085 02       		.uleb128 0x2
+ 357 0086 0A       		.uleb128 0xa
+ 358 0087 00       		.byte	0x0
+ 359 0088 00       		.byte	0x0
+ 360 0089 0B       		.uleb128 0xb
+ 361 008a 26       		.uleb128 0x26
+ 362 008b 00       		.byte	0x0
+ 363 008c 49       		.uleb128 0x49
+ 364 008d 13       		.uleb128 0x13
+ 365 008e 00       		.byte	0x0
+ 366 008f 00       		.byte	0x0
+ 367 0090 00       		.byte	0x0
+ 368              		.section	.debug_pubnames,"", at progbits
+ 369 0000 21000000 		.long	0x21
+ 370 0004 0200     		.value	0x2
+ 371 0006 00000000 		.long	.Ldebug_info0
+ 372 000a 01010000 		.long	0x101
+ 373 000e B9000000 		.long	0xb9
+ 374 0012 4B436970 		.string	"KCipherVectest"
+ 374      68657256 
+ 374      65637465 
+ 374      737400
+ 375 0021 00000000 		.long	0x0
+ 376              		.section	.debug_aranges,"", at progbits
+ 377 0000 2C000000 		.long	0x2c
+ 378 0004 0200     		.value	0x2
+ 379 0006 00000000 		.long	.Ldebug_info0
+ 380 000a 08       		.byte	0x8
+ 381 000b 00       		.byte	0x0
+
GAS LISTING /tmp/cckgalP6.s 			page 9
+
+
+ 382 000c 0000     		.value	0x0
+ 383 000e 0000     		.value	0x0
+ 384 0010 00000000 		.quad	.Ltext0
+ 384      00000000 
+ 385 0018 2E000000 		.quad	.Letext0-.Ltext0
+ 385      00000000 
+ 386 0020 00000000 		.quad	0x0
+ 386      00000000 
+ 387 0028 00000000 		.quad	0x0
+ 387      00000000 
+ 388              		.section	.debug_str,"MS", at progbits,1
+ 389              	.LASF8:
+ 390 0000 6C6F6E67 		.string	"long long int"
+ 390      206C6F6E 
+ 390      6720696E 
+ 390      7400
+ 391              	.LASF17:
+ 392 000e 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c"
+ 392      652F726F 
+ 392      6461726D 
+ 392      65722F73 
+ 392      72615F73 
+ 393              	.LASF18:
+ 394 0048 4B436970 		.string	"KCipherVectest"
+ 394      68657256 
+ 394      65637465 
+ 394      737400
+ 395              	.LASF6:
+ 396 0057 6C6F6E67 		.string	"long unsigned int"
+ 396      20756E73 
+ 396      69676E65 
+ 396      6420696E 
+ 396      7400
+ 397              	.LASF10:
+ 398 0069 6C6F6E67 		.string	"long long unsigned int"
+ 398      206C6F6E 
+ 398      6720756E 
+ 398      7369676E 
+ 398      65642069 
+ 399              	.LASF12:
+ 400 0080 75696E74 		.string	"uint8_t"
+ 400      385F7400 
+ 401              	.LASF16:
+ 402 0088 474E5520 		.string	"GNU C 4.4.2"
+ 402      4320342E 
+ 402      342E3200 
+ 403              	.LASF3:
+ 404 0094 756E7369 		.string	"unsigned char"
+ 404      676E6564 
+ 404      20636861 
+ 404      7200
+ 405              	.LASF7:
+ 406 00a2 63686172 		.string	"char"
+ 406      00
+ 407              	.LASF2:
+ 408 00a7 6C6F6E67 		.string	"long int"
+ 408      20696E74 
+
GAS LISTING /tmp/cckgalP6.s 			page 10
+
+
+ 408      00
+ 409              	.LASF11:
+ 410 00b0 646F7562 		.string	"double"
+ 410      6C6500
+ 411              	.LASF4:
+ 412 00b7 73686F72 		.string	"short unsigned int"
+ 412      7420756E 
+ 412      7369676E 
+ 412      65642069 
+ 412      6E7400
+ 413              	.LASF0:
+ 414 00ca 7369676E 		.string	"signed char"
+ 414      65642063 
+ 414      68617200 
+ 415              	.LASF13:
+ 416 00d6 76313238 		.string	"v128_u8_t"
+ 416      5F75385F 
+ 416      7400
+ 417              	.LASF14:
+ 418 00e0 43697068 		.string	"CipherVec"
+ 418      65725665 
+ 418      6300
+ 419              	.LASF9:
+ 420 00ea 666C6F61 		.string	"float"
+ 420      7400
+ 421              	.LASF15:
+ 422 00f0 7A65726F 		.string	"zero"
+ 422      00
+ 423              	.LASF1:
+ 424 00f5 73686F72 		.string	"short int"
+ 424      7420696E 
+ 424      7400
+ 425              	.LASF5:
+ 426 00ff 756E7369 		.string	"unsigned int"
+ 426      676E6564 
+ 426      20696E74 
+ 426      00
+ 427              		.ident	"GCC: (GNU) 4.4.2"
+ 428              		.section	.note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/cckgalP6.s 			page 11
+
+
+DEFINED SYMBOLS
+                            *ABS*:0000000000000000 compile-test.c
+     /tmp/cckgalP6.s:12     .text:0000000000000000 KCipherVectest
+
+NO UNDEFINED SYMBOLS
diff --git a/libs/krypto/compile-test.vecreg.pic.o.list b/libs/krypto/compile-test.vecreg.pic.o.list
new file mode 100644
index 0000000..edb88a6
--- /dev/null
+++ b/libs/krypto/compile-test.vecreg.pic.o.list
@@ -0,0 +1,592 @@
+GAS LISTING /tmp/ccg1QBek.s 			page 1
+
+
+   1              		.file	"compile-test.c"
+   2              		.section	.debug_abbrev,"", at progbits
+   3              	.Ldebug_abbrev0:
+   4              		.section	.debug_info,"", at progbits
+   5              	.Ldebug_info0:
+   6              		.section	.debug_line,"", at progbits
+   7              	.Ldebug_line0:
+   8 0000 D7000000 		.text
+   8      0200BA00 
+   8      00000101 
+   8      FB0E0D00 
+   8      01010101 
+   9              	.Ltext0:
+  10              	.globl KCipherVecRegtest
+  11              		.type	KCipherVecRegtest, @function
+  12              	KCipherVecRegtest:
+  13              	.LFB570:
+  14              		.file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c"
+   1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** /*===========================================================================
+   2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *
+   3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *                            PUBLIC DOMAIN NOTICE
+   4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *               National Center for Biotechnology Information
+   5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *
+   6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  This software/database is a "United States Government Work" under the
+   7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  terms of the United States Copyright Act.  It was written as part of
+   8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  the author's official duties as a United States Government employee and
+   9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  thus cannot be copyrighted.  This software/database is freely available
+  10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  to the public for use. The National Library of Medicine and the U.S.
+  11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  Government have not placed any restriction on its use or reproduction.
+  12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *
+  13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  Although all reasonable efforts have been taken to ensure the accuracy
+  14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  and reliability of the software and data, the NLM and the U.S.
+  15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  Government do not and cannot warrant the performance or results that
+  16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  may be obtained by using this software or data. The NLM and the U.S.
+  17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  Government disclaim all warranties, express or implied, including
+  18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  warranties of performance, merchantability or fitness for any particular
+  19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  purpose.
+  20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *
+  21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *  Please cite the author in any work or product based on this material.
+  22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  *
+  23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  * ===========================================================================
+  24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****  */
+  25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 
+  26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 
+  27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include <cpuid.h>
+  28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include <v128.h>
+  29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 
+  30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include "ncbi-priv.h"
+  31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #include "blockcipher-impl.h"
+  32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 
+  33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 
+  34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** 
+  35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** const
+  36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** CipherVec CMEMBER(test) (void)
+  37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** {
+  15              		.loc 1 37 0
+  16              		.cfi_startproc
+
GAS LISTING /tmp/ccg1QBek.s 			page 2
+
+
+  17 0000 55       		pushq	%rbp
+  18              	.LCFI0:
+  19              		.cfi_def_cfa_offset 16
+  20 0001 4889E5   		movq	%rsp, %rbp
+  21              		.cfi_offset 6, -16
+  22              	.LCFI1:
+  23              		.cfi_def_cfa_register 6
+  38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #if USEVEC
+  39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****     CipherVec zero  =  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+  24              		.loc 1 40 0
+  25 0004 660F6F05 		movdqa	.LC0(%rip), %xmm0
+  25      00000000 
+  26 000c F30F7F45 		movdqu	%xmm0, -32(%rbp)
+  26      E0
+  41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****     CipherVec one   =  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+  42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****                          0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+  27              		.loc 1 42 0
+  28 0011 660F6F05 		movdqa	.LC1(%rip), %xmm0
+  28      00000000 
+  29 0019 F30F7F45 		movdqu	%xmm0, -16(%rbp)
+  29      F0
+  43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #else
+  44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****     CipherVec zero  =  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+  46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****     CipherVec one   =  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+  47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****                          0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
+  48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** #endif
+  49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c ****     return zero + one;
+  30              		.loc 1 49 0
+  31 001e F30F6F45 		movdqu	-16(%rbp), %xmm0
+  31      F0
+  32 0023 F30F6F4D 		movdqu	-32(%rbp), %xmm1
+  32      E0
+  33 0028 660FFCC1 		paddb	%xmm1, %xmm0
+  50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c **** }
+  34              		.loc 1 50 0
+  35 002c C9       		leave
+  36 002d C3       		ret
+  37              		.cfi_endproc
+  38              	.LFE570:
+  39              		.size	KCipherVecRegtest, .-KCipherVecRegtest
+  40              		.section	.rodata
+  41              		.align 16
+  42              	.LC0:
+  43 0000 00       		.byte	0
+  44 0001 00       		.byte	0
+  45 0002 00       		.byte	0
+  46 0003 00       		.byte	0
+  47 0004 00       		.byte	0
+  48 0005 00       		.byte	0
+  49 0006 00       		.byte	0
+  50 0007 00       		.byte	0
+  51 0008 00       		.byte	0
+  52 0009 00       		.byte	0
+  53 000a 00       		.byte	0
+  54 000b 00       		.byte	0
+
GAS LISTING /tmp/ccg1QBek.s 			page 3
+
+
+  55 000c 00       		.byte	0
+  56 000d 00       		.byte	0
+  57 000e 00       		.byte	0
+  58 000f 00       		.byte	0
+  59              		.align 16
+  60              	.LC1:
+  61 0010 01       		.byte	1
+  62 0011 01       		.byte	1
+  63 0012 01       		.byte	1
+  64 0013 01       		.byte	1
+  65 0014 01       		.byte	1
+  66 0015 01       		.byte	1
+  67 0016 01       		.byte	1
+  68 0017 01       		.byte	1
+  69 0018 01       		.byte	1
+  70 0019 01       		.byte	1
+  71 001a 01       		.byte	1
+  72 001b 01       		.byte	1
+  73 001c 01       		.byte	1
+  74 001d 01       		.byte	1
+  75 001e 01       		.byte	1
+  76 001f 01       		.byte	1
+  77              		.text
+  78              	.Letext0:
+  79              		.section	.debug_loc,"", at progbits
+  80              	.Ldebug_loc0:
+  81              	.LLST0:
+  82 0000 00000000 		.quad	.LFB570-.Ltext0
+  82      00000000 
+  83 0008 01000000 		.quad	.LCFI0-.Ltext0
+  83      00000000 
+  84 0010 0200     		.value	0x2
+  85 0012 77       		.byte	0x77
+  86 0013 08       		.sleb128 8
+  87 0014 01000000 		.quad	.LCFI0-.Ltext0
+  87      00000000 
+  88 001c 04000000 		.quad	.LCFI1-.Ltext0
+  88      00000000 
+  89 0024 0200     		.value	0x2
+  90 0026 77       		.byte	0x77
+  91 0027 10       		.sleb128 16
+  92 0028 04000000 		.quad	.LCFI1-.Ltext0
+  92      00000000 
+  93 0030 2E000000 		.quad	.LFE570-.Ltext0
+  93      00000000 
+  94 0038 0200     		.value	0x2
+  95 003a 76       		.byte	0x76
+  96 003b 10       		.sleb128 16
+  97 003c 00000000 		.quad	0x0
+  97      00000000 
+  98 0044 00000000 		.quad	0x0
+  98      00000000 
+  99              		.file 2 "/usr/include/stdint.h"
+ 100              		.file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+ 101              		.file 4 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 102              		.section	.debug_info
+ 103 0000 FD000000 		.long	0xfd
+
GAS LISTING /tmp/ccg1QBek.s 			page 4
+
+
+ 104 0004 0200     		.value	0x2
+ 105 0006 00000000 		.long	.Ldebug_abbrev0
+ 106 000a 08       		.byte	0x8
+ 107 000b 01       		.uleb128 0x1
+ 108 000c 00000000 		.long	.LASF16
+ 109 0010 01       		.byte	0x1
+ 110 0011 00000000 		.long	.LASF17
+ 111 0015 00000000 		.quad	.Ltext0
+ 111      00000000 
+ 112 001d 00000000 		.quad	.Letext0
+ 112      00000000 
+ 113 0025 00000000 		.long	.Ldebug_line0
+ 114 0029 02       		.uleb128 0x2
+ 115 002a 01       		.byte	0x1
+ 116 002b 06       		.byte	0x6
+ 117 002c 00000000 		.long	.LASF0
+ 118 0030 02       		.uleb128 0x2
+ 119 0031 02       		.byte	0x2
+ 120 0032 05       		.byte	0x5
+ 121 0033 00000000 		.long	.LASF1
+ 122 0037 03       		.uleb128 0x3
+ 123 0038 04       		.byte	0x4
+ 124 0039 05       		.byte	0x5
+ 125 003a 696E7400 		.string	"int"
+ 126 003e 02       		.uleb128 0x2
+ 127 003f 08       		.byte	0x8
+ 128 0040 05       		.byte	0x5
+ 129 0041 00000000 		.long	.LASF2
+ 130 0045 04       		.uleb128 0x4
+ 131 0046 00000000 		.long	.LASF12
+ 132 004a 02       		.byte	0x2
+ 133 004b 31       		.byte	0x31
+ 134 004c 50000000 		.long	0x50
+ 135 0050 02       		.uleb128 0x2
+ 136 0051 01       		.byte	0x1
+ 137 0052 08       		.byte	0x8
+ 138 0053 00000000 		.long	.LASF3
+ 139 0057 02       		.uleb128 0x2
+ 140 0058 02       		.byte	0x2
+ 141 0059 07       		.byte	0x7
+ 142 005a 00000000 		.long	.LASF4
+ 143 005e 02       		.uleb128 0x2
+ 144 005f 04       		.byte	0x4
+ 145 0060 07       		.byte	0x7
+ 146 0061 00000000 		.long	.LASF5
+ 147 0065 02       		.uleb128 0x2
+ 148 0066 08       		.byte	0x8
+ 149 0067 07       		.byte	0x7
+ 150 0068 00000000 		.long	.LASF6
+ 151 006c 05       		.uleb128 0x5
+ 152 006d 08       		.byte	0x8
+ 153 006e 07       		.byte	0x7
+ 154 006f 02       		.uleb128 0x2
+ 155 0070 01       		.byte	0x1
+ 156 0071 06       		.byte	0x6
+ 157 0072 00000000 		.long	.LASF7
+ 158 0076 02       		.uleb128 0x2
+
GAS LISTING /tmp/ccg1QBek.s 			page 5
+
+
+ 159 0077 08       		.byte	0x8
+ 160 0078 05       		.byte	0x5
+ 161 0079 00000000 		.long	.LASF8
+ 162 007d 02       		.uleb128 0x2
+ 163 007e 04       		.byte	0x4
+ 164 007f 04       		.byte	0x4
+ 165 0080 00000000 		.long	.LASF9
+ 166 0084 02       		.uleb128 0x2
+ 167 0085 08       		.byte	0x8
+ 168 0086 07       		.byte	0x7
+ 169 0087 00000000 		.long	.LASF10
+ 170 008b 02       		.uleb128 0x2
+ 171 008c 08       		.byte	0x8
+ 172 008d 04       		.byte	0x4
+ 173 008e 00000000 		.long	.LASF11
+ 174 0092 04       		.uleb128 0x4
+ 175 0093 00000000 		.long	.LASF13
+ 176 0097 03       		.byte	0x3
+ 177 0098 26       		.byte	0x26
+ 178 0099 9D000000 		.long	0x9d
+ 179 009d 06       		.uleb128 0x6
+ 180 009e 01       		.byte	0x1
+ 181 009f 45000000 		.long	0x45
+ 182 00a3 AE000000 		.long	0xae
+ 183 00a7 07       		.uleb128 0x7
+ 184 00a8 6C000000 		.long	0x6c
+ 185 00ac 0F       		.byte	0xf
+ 186 00ad 00       		.byte	0x0
+ 187 00ae 04       		.uleb128 0x4
+ 188 00af 00000000 		.long	.LASF14
+ 189 00b3 04       		.byte	0x4
+ 190 00b4 3B       		.byte	0x3b
+ 191 00b5 92000000 		.long	0x92
+ 192 00b9 08       		.uleb128 0x8
+ 193 00ba 01       		.byte	0x1
+ 194 00bb 00000000 		.long	.LASF18
+ 195 00bf 01       		.byte	0x1
+ 196 00c0 24       		.byte	0x24
+ 197 00c1 01       		.byte	0x1
+ 198 00c2 FB000000 		.long	0xfb
+ 199 00c6 00000000 		.quad	.LFB570
+ 199      00000000 
+ 200 00ce 00000000 		.quad	.LFE570
+ 200      00000000 
+ 201 00d6 00000000 		.long	.LLST0
+ 202 00da FB000000 		.long	0xfb
+ 203 00de 09       		.uleb128 0x9
+ 204 00df 00000000 		.long	.LASF15
+ 205 00e3 01       		.byte	0x1
+ 206 00e4 27       		.byte	0x27
+ 207 00e5 AE000000 		.long	0xae
+ 208 00e9 02       		.byte	0x2
+ 209 00ea 91       		.byte	0x91
+ 210 00eb 50       		.sleb128 -48
+ 211 00ec 0A       		.uleb128 0xa
+ 212 00ed 6F6E6500 		.string	"one"
+ 213 00f1 01       		.byte	0x1
+
GAS LISTING /tmp/ccg1QBek.s 			page 6
+
+
+ 214 00f2 29       		.byte	0x29
+ 215 00f3 AE000000 		.long	0xae
+ 216 00f7 02       		.byte	0x2
+ 217 00f8 91       		.byte	0x91
+ 218 00f9 60       		.sleb128 -32
+ 219 00fa 00       		.byte	0x0
+ 220 00fb 0B       		.uleb128 0xb
+ 221 00fc AE000000 		.long	0xae
+ 222 0100 00       		.byte	0x0
+ 223              		.section	.debug_abbrev
+ 224 0000 01       		.uleb128 0x1
+ 225 0001 11       		.uleb128 0x11
+ 226 0002 01       		.byte	0x1
+ 227 0003 25       		.uleb128 0x25
+ 228 0004 0E       		.uleb128 0xe
+ 229 0005 13       		.uleb128 0x13
+ 230 0006 0B       		.uleb128 0xb
+ 231 0007 03       		.uleb128 0x3
+ 232 0008 0E       		.uleb128 0xe
+ 233 0009 11       		.uleb128 0x11
+ 234 000a 01       		.uleb128 0x1
+ 235 000b 12       		.uleb128 0x12
+ 236 000c 01       		.uleb128 0x1
+ 237 000d 10       		.uleb128 0x10
+ 238 000e 06       		.uleb128 0x6
+ 239 000f 00       		.byte	0x0
+ 240 0010 00       		.byte	0x0
+ 241 0011 02       		.uleb128 0x2
+ 242 0012 24       		.uleb128 0x24
+ 243 0013 00       		.byte	0x0
+ 244 0014 0B       		.uleb128 0xb
+ 245 0015 0B       		.uleb128 0xb
+ 246 0016 3E       		.uleb128 0x3e
+ 247 0017 0B       		.uleb128 0xb
+ 248 0018 03       		.uleb128 0x3
+ 249 0019 0E       		.uleb128 0xe
+ 250 001a 00       		.byte	0x0
+ 251 001b 00       		.byte	0x0
+ 252 001c 03       		.uleb128 0x3
+ 253 001d 24       		.uleb128 0x24
+ 254 001e 00       		.byte	0x0
+ 255 001f 0B       		.uleb128 0xb
+ 256 0020 0B       		.uleb128 0xb
+ 257 0021 3E       		.uleb128 0x3e
+ 258 0022 0B       		.uleb128 0xb
+ 259 0023 03       		.uleb128 0x3
+ 260 0024 08       		.uleb128 0x8
+ 261 0025 00       		.byte	0x0
+ 262 0026 00       		.byte	0x0
+ 263 0027 04       		.uleb128 0x4
+ 264 0028 16       		.uleb128 0x16
+ 265 0029 00       		.byte	0x0
+ 266 002a 03       		.uleb128 0x3
+ 267 002b 0E       		.uleb128 0xe
+ 268 002c 3A       		.uleb128 0x3a
+ 269 002d 0B       		.uleb128 0xb
+ 270 002e 3B       		.uleb128 0x3b
+
GAS LISTING /tmp/ccg1QBek.s 			page 7
+
+
+ 271 002f 0B       		.uleb128 0xb
+ 272 0030 49       		.uleb128 0x49
+ 273 0031 13       		.uleb128 0x13
+ 274 0032 00       		.byte	0x0
+ 275 0033 00       		.byte	0x0
+ 276 0034 05       		.uleb128 0x5
+ 277 0035 24       		.uleb128 0x24
+ 278 0036 00       		.byte	0x0
+ 279 0037 0B       		.uleb128 0xb
+ 280 0038 0B       		.uleb128 0xb
+ 281 0039 3E       		.uleb128 0x3e
+ 282 003a 0B       		.uleb128 0xb
+ 283 003b 00       		.byte	0x0
+ 284 003c 00       		.byte	0x0
+ 285 003d 06       		.uleb128 0x6
+ 286 003e 01       		.uleb128 0x1
+ 287 003f 01       		.byte	0x1
+ 288 0040 8742     		.uleb128 0x2107
+ 289 0042 0C       		.uleb128 0xc
+ 290 0043 49       		.uleb128 0x49
+ 291 0044 13       		.uleb128 0x13
+ 292 0045 01       		.uleb128 0x1
+ 293 0046 13       		.uleb128 0x13
+ 294 0047 00       		.byte	0x0
+ 295 0048 00       		.byte	0x0
+ 296 0049 07       		.uleb128 0x7
+ 297 004a 21       		.uleb128 0x21
+ 298 004b 00       		.byte	0x0
+ 299 004c 49       		.uleb128 0x49
+ 300 004d 13       		.uleb128 0x13
+ 301 004e 2F       		.uleb128 0x2f
+ 302 004f 0B       		.uleb128 0xb
+ 303 0050 00       		.byte	0x0
+ 304 0051 00       		.byte	0x0
+ 305 0052 08       		.uleb128 0x8
+ 306 0053 2E       		.uleb128 0x2e
+ 307 0054 01       		.byte	0x1
+ 308 0055 3F       		.uleb128 0x3f
+ 309 0056 0C       		.uleb128 0xc
+ 310 0057 03       		.uleb128 0x3
+ 311 0058 0E       		.uleb128 0xe
+ 312 0059 3A       		.uleb128 0x3a
+ 313 005a 0B       		.uleb128 0xb
+ 314 005b 3B       		.uleb128 0x3b
+ 315 005c 0B       		.uleb128 0xb
+ 316 005d 27       		.uleb128 0x27
+ 317 005e 0C       		.uleb128 0xc
+ 318 005f 49       		.uleb128 0x49
+ 319 0060 13       		.uleb128 0x13
+ 320 0061 11       		.uleb128 0x11
+ 321 0062 01       		.uleb128 0x1
+ 322 0063 12       		.uleb128 0x12
+ 323 0064 01       		.uleb128 0x1
+ 324 0065 40       		.uleb128 0x40
+ 325 0066 06       		.uleb128 0x6
+ 326 0067 01       		.uleb128 0x1
+ 327 0068 13       		.uleb128 0x13
+
GAS LISTING /tmp/ccg1QBek.s 			page 8
+
+
+ 328 0069 00       		.byte	0x0
+ 329 006a 00       		.byte	0x0
+ 330 006b 09       		.uleb128 0x9
+ 331 006c 34       		.uleb128 0x34
+ 332 006d 00       		.byte	0x0
+ 333 006e 03       		.uleb128 0x3
+ 334 006f 0E       		.uleb128 0xe
+ 335 0070 3A       		.uleb128 0x3a
+ 336 0071 0B       		.uleb128 0xb
+ 337 0072 3B       		.uleb128 0x3b
+ 338 0073 0B       		.uleb128 0xb
+ 339 0074 49       		.uleb128 0x49
+ 340 0075 13       		.uleb128 0x13
+ 341 0076 02       		.uleb128 0x2
+ 342 0077 0A       		.uleb128 0xa
+ 343 0078 00       		.byte	0x0
+ 344 0079 00       		.byte	0x0
+ 345 007a 0A       		.uleb128 0xa
+ 346 007b 34       		.uleb128 0x34
+ 347 007c 00       		.byte	0x0
+ 348 007d 03       		.uleb128 0x3
+ 349 007e 08       		.uleb128 0x8
+ 350 007f 3A       		.uleb128 0x3a
+ 351 0080 0B       		.uleb128 0xb
+ 352 0081 3B       		.uleb128 0x3b
+ 353 0082 0B       		.uleb128 0xb
+ 354 0083 49       		.uleb128 0x49
+ 355 0084 13       		.uleb128 0x13
+ 356 0085 02       		.uleb128 0x2
+ 357 0086 0A       		.uleb128 0xa
+ 358 0087 00       		.byte	0x0
+ 359 0088 00       		.byte	0x0
+ 360 0089 0B       		.uleb128 0xb
+ 361 008a 26       		.uleb128 0x26
+ 362 008b 00       		.byte	0x0
+ 363 008c 49       		.uleb128 0x49
+ 364 008d 13       		.uleb128 0x13
+ 365 008e 00       		.byte	0x0
+ 366 008f 00       		.byte	0x0
+ 367 0090 00       		.byte	0x0
+ 368              		.section	.debug_pubnames,"", at progbits
+ 369 0000 24000000 		.long	0x24
+ 370 0004 0200     		.value	0x2
+ 371 0006 00000000 		.long	.Ldebug_info0
+ 372 000a 01010000 		.long	0x101
+ 373 000e B9000000 		.long	0xb9
+ 374 0012 4B436970 		.string	"KCipherVecRegtest"
+ 374      68657256 
+ 374      65635265 
+ 374      67746573 
+ 374      7400
+ 375 0024 00000000 		.long	0x0
+ 376              		.section	.debug_aranges,"", at progbits
+ 377 0000 2C000000 		.long	0x2c
+ 378 0004 0200     		.value	0x2
+ 379 0006 00000000 		.long	.Ldebug_info0
+ 380 000a 08       		.byte	0x8
+
GAS LISTING /tmp/ccg1QBek.s 			page 9
+
+
+ 381 000b 00       		.byte	0x0
+ 382 000c 0000     		.value	0x0
+ 383 000e 0000     		.value	0x0
+ 384 0010 00000000 		.quad	.Ltext0
+ 384      00000000 
+ 385 0018 2E000000 		.quad	.Letext0-.Ltext0
+ 385      00000000 
+ 386 0020 00000000 		.quad	0x0
+ 386      00000000 
+ 387 0028 00000000 		.quad	0x0
+ 387      00000000 
+ 388              		.section	.debug_str,"MS", at progbits,1
+ 389              	.LASF8:
+ 390 0000 6C6F6E67 		.string	"long long int"
+ 390      206C6F6E 
+ 390      6720696E 
+ 390      7400
+ 391              	.LASF17:
+ 392 000e 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/compile-test.c"
+ 392      652F726F 
+ 392      6461726D 
+ 392      65722F73 
+ 392      72615F73 
+ 393              	.LASF5:
+ 394 0048 756E7369 		.string	"unsigned int"
+ 394      676E6564 
+ 394      20696E74 
+ 394      00
+ 395              	.LASF6:
+ 396 0055 6C6F6E67 		.string	"long unsigned int"
+ 396      20756E73 
+ 396      69676E65 
+ 396      6420696E 
+ 396      7400
+ 397              	.LASF10:
+ 398 0067 6C6F6E67 		.string	"long long unsigned int"
+ 398      206C6F6E 
+ 398      6720756E 
+ 398      7369676E 
+ 398      65642069 
+ 399              	.LASF12:
+ 400 007e 75696E74 		.string	"uint8_t"
+ 400      385F7400 
+ 401              	.LASF16:
+ 402 0086 474E5520 		.string	"GNU C 4.4.2"
+ 402      4320342E 
+ 402      342E3200 
+ 403              	.LASF3:
+ 404 0092 756E7369 		.string	"unsigned char"
+ 404      676E6564 
+ 404      20636861 
+ 404      7200
+ 405              	.LASF7:
+ 406 00a0 63686172 		.string	"char"
+ 406      00
+ 407              	.LASF2:
+ 408 00a5 6C6F6E67 		.string	"long int"
+
GAS LISTING /tmp/ccg1QBek.s 			page 10
+
+
+ 408      20696E74 
+ 408      00
+ 409              	.LASF11:
+ 410 00ae 646F7562 		.string	"double"
+ 410      6C6500
+ 411              	.LASF18:
+ 412 00b5 4B436970 		.string	"KCipherVecRegtest"
+ 412      68657256 
+ 412      65635265 
+ 412      67746573 
+ 412      7400
+ 413              	.LASF4:
+ 414 00c7 73686F72 		.string	"short unsigned int"
+ 414      7420756E 
+ 414      7369676E 
+ 414      65642069 
+ 414      6E7400
+ 415              	.LASF0:
+ 416 00da 7369676E 		.string	"signed char"
+ 416      65642063 
+ 416      68617200 
+ 417              	.LASF13:
+ 418 00e6 76313238 		.string	"v128_u8_t"
+ 418      5F75385F 
+ 418      7400
+ 419              	.LASF14:
+ 420 00f0 43697068 		.string	"CipherVec"
+ 420      65725665 
+ 420      6300
+ 421              	.LASF9:
+ 422 00fa 666C6F61 		.string	"float"
+ 422      7400
+ 423              	.LASF15:
+ 424 0100 7A65726F 		.string	"zero"
+ 424      00
+ 425              	.LASF1:
+ 426 0105 73686F72 		.string	"short int"
+ 426      7420696E 
+ 426      7400
+ 427              		.ident	"GCC: (GNU) 4.4.2"
+ 428              		.section	.note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/ccg1QBek.s 			page 11
+
+
+DEFINED SYMBOLS
+                            *ABS*:0000000000000000 compile-test.c
+     /tmp/ccg1QBek.s:12     .text:0000000000000000 KCipherVecRegtest
+
+NO UNDEFINED SYMBOLS
diff --git a/libs/krypto/csprng.c b/libs/krypto/csprng.c
new file mode 100644
index 0000000..4ee747b
--- /dev/null
+++ b/libs/krypto/csprng.c
@@ -0,0 +1,163 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+#include <krypto/extern.h>
+
+#include <krypto/rng.h>
+#include <klib/defs.h>
+#include <klib/rc.h>
+#include <klib/refcount.h>
+
+#include <sysalloc.h>
+
+#include <openssl/rand.h>
+
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+typedef KRng KCSPRng;
+
+#define KRNG_IMPL KCSPRng
+#include <krypto/rng-impl.h>
+
+
+
+static
+rc_t CC KCSPRngDestroy (KCSPRng * self)
+{
+    free (self);
+    return 0;
+}
+
+static
+rc_t CC KCSPRngSeed (KRng * self)
+{
+    rc_t rc;
+    uint8_t buff [16];
+
+    if (self == NULL)
+        return RC (rcKrypto, rcRng, rcWriting, rcSelf, rcNull);
+
+    /* get some system entropy */
+    rc = KRngSysEntropy (self, buff, sizeof (buff));
+    if (rc)
+        return rc;
+
+    RAND_seed (buff, sizeof (buff));
+
+    return 0;
+}
+
+static
+rc_t CC KCSPRngReseed (KRng * self, const void * buffer_, 
+                       size_t buff_size)
+{
+    const char * buffer;
+    rc_t rc;
+    int32_t ix;
+    uint8_t buff [256];
+
+    if (self == NULL)
+        return RC (rcKrypto, rcRng, rcUpdating, rcSelf, rcNull);
+
+    if (((buffer = buffer_) == NULL) && (buff_size != 0))
+        return RC (rcKrypto, rcRng, rcUpdating, rcParam, rcNull);
+
+    rc = KRngSysEntropy (self, buff, 16);
+    if (rc)
+        return rc;
+
+    if (buffer)
+        for (ix = (buff_size + sizeof (buff) - 1)/sizeof (buff);
+             ix > 0; 
+             (ix -= sizeof (buff)),
+                 (buff_size -= sizeof(buff)),
+                 (buffer += sizeof (buff)))
+        {
+            int32_t jx = (buff_size>sizeof (buff))?sizeof(buff):buff_size;
+            while (--jx > 0)
+                buff[jx] ^= buffer[jx];
+        }
+
+    RAND_add (buffer, buff_size, 1); /* what is that entropy supposed to do? */
+
+    return 0;
+}
+
+static
+rc_t CC KCSPRngRead (const KCSPRng * self, void * buffer, uint32_t bsize, uint32_t * num_read)
+{
+    int ret;
+
+    ret = RAND_bytes (buffer, bsize);
+    if (ret == -1)
+    {
+        *num_read = 0;
+        return RC (rcKrypto, rcRng, rcReading, rcSelf, rcInsufficient);
+    }
+    *num_read = bsize;
+    return 0;
+}
+
+static const
+KRng_vt_v1 vt = 
+{
+    1, 0,
+
+    /* start minor version == 0 */
+    KCSPRngDestroy,
+    KCSPRngSeed,
+    KCSPRngReseed,
+    KCSPRngRead
+    /* end minor version == 0 */
+};
+    
+LIB_EXPORT rc_t CC KCSPRngMake (KRng ** pself)
+{
+    KCSPRng * self;
+    rc_t rc;
+
+    if (pself == NULL)
+        return RC (rcRuntime, 0, rcConstructing, rcSelf, rcNull);
+    else
+    {
+        *pself = NULL;
+
+        self = malloc (sizeof (*self));
+        if (self == NULL)
+            return RC (rcRuntime, 0, rcConstructing, rcMemory, rcExhausted);
+
+        else
+        {
+            rc = KRngInit (self, (union KRng_vt*)&vt, "KCSPRng");
+            *pself = self;
+            return 0;
+        }
+    }
+    return rc;
+}
diff --git a/libs/krypto/encfile-priv.h b/libs/krypto/encfile-priv.h
new file mode 100644
index 0000000..8061508
--- /dev/null
+++ b/libs/krypto/encfile-priv.h
@@ -0,0 +1,163 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#ifndef _h_krypto_encfile_priv_libs_
+#define _h_krypto_encfile_priv_libs_
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+/* ----------------------------------------------------------------------
+ * Offset conversions between encrypted file offset, decrypted file offset
+ * and block ID and block offset
+ */
+
+/* -----
+ * A data block within the encrypted file may not divide nicely by the size of
+ * its greatest alignment issue. That is there is currently a uint64_t within 
+ * the KEncFileKey forcing 8-byte alignment by default but the whole of the
+ * size of KEncFileKey plus the size of the KEncFileData plus the size of
+ * the KEncFileCRC is not divisible by 8 so it can't be treated as a single 
+ * structure for the puroses of using the sizeof() operator.
+ *
+ * If the size of the header, block or footer are modified in the future
+ * care should be take to retain accuracy of the new versions of these
+ * functions.
+ */
+
+static __inline__ uint64_t BlockId_to_EncryptedPos (uint64_t block_id)
+{
+    /* the whole block structure is not divisible by 8
+     * so this is not a simple multiply by the sizeof KEncFileBlock
+     */
+    return (sizeof (KEncFileHeader) + block_id * sizeof (KEncFileBlock));
+}
+
+
+static __inline__ uint64_t BlockId_to_DecryptedPos (uint64_t block_id)
+{
+    /* the simplest conversion as its a simple multiply */
+    return (block_id * sizeof (KEncFileData));
+}
+
+
+/* -----
+ * when converting from file offsets to block ids we effectively have a
+ * quotient and a remainder.  The block id is the quotient and the
+ * offset within the block is the remainder.  We use lldiv not ldiv as we
+ * are required to work on both 32 and 64 bit machines where long might
+ * be 32 bits or it might be 64 bits.  If long long is 128 we willingly
+ * sacrifice efficiency for accuracy.
+ */
+static __inline__
+uint64_t DecryptedPos_to_BlockId (uint64_t dec_offset, uint32_t * poffset)
+{
+    if (poffset)
+        *poffset = dec_offset % sizeof (KEncFileData);
+    return dec_offset / sizeof (KEncFileData);
+}
+
+static __inline__
+uint64_t EncryptedPos_to_BlockId (uint64_t enc_offset, uint32_t * poffset,
+                                     bool * in_block)
+{
+    uint64_t block_id;
+
+    if (enc_offset < sizeof (KEncFileHeader))
+    {
+        if (poffset)
+            *poffset = 0;
+        if (in_block)
+            *in_block = false;
+        block_id = 0;
+    }
+    else
+    {
+        uint64_t offset;
+
+        enc_offset -= sizeof (KEncFileHeader);
+        block_id = enc_offset / sizeof (KEncFileBlock);
+        offset = enc_offset % sizeof (KEncFileBlock);
+
+        if (offset <= sizeof(KEncFileKey))
+        {
+            if (poffset)
+                *poffset = 0;
+            if (in_block)
+                *in_block = false;
+        }
+        else
+        {
+            offset -= sizeof(KEncFileKey);
+
+            if (offset >= sizeof(KEncFileData))
+            {
+                if (poffset)
+                    *poffset = 0;
+                if (in_block)
+                    *in_block = false;
+            }
+            else
+            {
+                if (poffset)
+                    *poffset = offset;
+                if (in_block)
+                    *in_block = true;
+            }
+        }
+    }
+    return block_id;
+}
+
+struct KFile;
+struct KKey;
+
+KRYPTO_EXTERN rc_t CC KEncFileWriteHeader (struct KFile * self);
+KRYPTO_EXTERN rc_t CC KEncFileWriteHeader_v1 (struct KFile * self);
+KRYPTO_EXTERN rc_t CC KEncFileWriteHeader_v2 (struct KFile * self);
+KRYPTO_EXTERN rc_t CC KEncFileMakeWriteBlock (struct KFile ** pself, 
+                                              struct KFile * encrypted,
+                                              const struct KKey * key);
+
+KRYPTO_EXTERN rc_t CC KEncFileMakeBlock_v2 (struct KFile ** pself,
+                                         struct KFile * encrypted,
+                                         const struct KKey * key);
+
+
+#if 0
+#if USE_UPDATE_V1
+#define KEncFileWriteHeader KEncFileWriteHeader_v1
+#else
+#define KEncFileWriteHeader KEncFileWriteHeader_v2
+#endif
+#endif
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif /* #ifndef _h_krypto_encfile_priv_libs_ */
+
+
diff --git a/libs/krypto/encfile.c b/libs/krypto/encfile.c
new file mode 100644
index 0000000..1c0a970
--- /dev/null
+++ b/libs/krypto/encfile.c
@@ -0,0 +1,2122 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#include <krypto/extern.h>
+#include <krypto/encfile.h>
+#include <krypto/encfile-priv.h>
+#include <krypto/key.h>
+#include <krypto/ciphermgr.h>
+#include <krypto/cipher.h>
+#include "aes-priv.h"
+#include "encfile-priv.h"
+
+#include <klib/rc.h>
+#include <klib/checksum.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/debug.h>
+#include <klib/vector.h>
+#include <klib/status.h>
+#include <kfs/file.h>
+
+#include <sysalloc.h>
+
+#include <byteswap.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+
+#include <klib/out.h>
+
+#define USE_READ_V1     false
+#define USE_WRITE_V1    false
+#define USE_UPDATE_V1   false
+#define USE_BLOCK_V1    false
+/* KReencFile and KEncryptFile need to use update v1 as it is different */
+#define USE_VALIDATE_V1 false
+#define USE_ISENC_V1    false
+
+#define ENABLE_V2 true
+
+
+/* ----------------------------------------------------------------------
+ * KEncFileV1
+ *   Base object class for the encryption, decryption and validation of
+ *   the file format defined above
+ */
+typedef struct KEncFileV1  KEncFileV1;
+#define KFILE_IMPL struct KEncFileV1
+#include <kfs/impl.h>
+
+
+#include "encfile-priv.h"
+
+/* ----------
+ * BufferCalcMD5
+ *    Generate the MD5 digest for a buffer
+ */
+static
+void BufferCalcMD5 (const void * buffer, size_t size, uint8_t digest [16])
+{
+    MD5State state;
+
+    assert (buffer);
+    assert (size);
+    assert (digest);
+
+    MD5StateInit (&state);
+    MD5StateAppend (&state, buffer, size);
+    MD5StateFinish (&state, digest);
+}
+
+#if 0
+/* ----------------------------------------------------------------------
+ * Offset conversions between encrypted file offset, decrypted file offset
+ * and block ID and block offset
+ */
+
+/* -----
+ * A data block within the encrypted file may not divide nicely by the size of
+ * its greatest alignment issue. That is there is currently a uint64_t within 
+ * the KEncFileKey forcing 8-byte alignment by default but the whole of the
+ * size of KEncFileKey plus the sizze of the KEncFileData plus the size of
+ * the KEncFileCRC is not divisible by 8 so it can't be treated as a single 
+ * structure for the puroses of using the sizeof() operator.
+ *
+ * If the size of the header, block or footer are modified in the future
+ * care should be take to retain accuracy of the new versions of these
+ * functions.
+ */
+
+static __inline__ uint64_t BlockId_to_EncryptedPos (uint64_t block_id)
+{
+    /* the whole block structure is not divisible by 8
+     * so this is not a simple multiply by the sizeof KEncFileBlock
+     */
+    return (sizeof (KEncFileHeader) + block_id * sizeof (KEncFileBlock));
+}
+
+
+static __inline__ uint64_t BlockId_to_DecryptedPos (uint64_t block_id)
+{
+    /* the simplest conversion as its a simple multiply */
+    return (block_id * sizeof (KEncFileData));
+}
+
+
+/* -----
+ * when converting from file offsets to block ids we effectively have a
+ * quotient and a remainder.  The block id is the quotient and the
+ * offset within the block is the remainder.  We use lldiv not ldiv as we
+ * are required to work on both 32 and 64 bit machines where long might
+ * be 32 bits or it might be 64 bits.  If long long is 128 we willingly
+ * sacrifice efficiency for accuracy.
+ */
+static __inline__
+uint64_t DecryptedPos_to_BlockId (uint64_t dec_offset, uint32_t * poffset)
+{
+    if (poffset)
+        *poffset = dec_offset % sizeof (KEncFileData);
+    return dec_offset / sizeof (KEncFileData);
+}
+
+/* not so easy - fix this if needed... */
+#if 0
+static
+uint64_t EncryptedPos_to_BlockId (uint64_t enc_offset, uint32_t * poffset)
+{
+    uint64_t block_id;
+
+    if (enc_offset < sizeof (KEncFileHeader))
+    {
+        if (poffset)
+            *poffset = 0;
+        block_id = 0;
+    }
+    else
+    {
+        uint64_t offset;
+
+        enc_offset -= sizeof (KEncFileHeader);
+        block_id = enc_offset / sizeof (KEncFileBlock);
+        offset = enc_offset % sizeof (KEncFileBlock);
+
+        if (offset <= sizeof(KEncFileKey))
+            offset = 0;
+        else
+        {
+            offset -= sizeof(KEncFileKey);
+
+            if (offset >= sizeof(KEncFileData))
+            {
+                ++block_id;
+                offset = 0;
+            }
+        }
+
+        if (poffset)
+            *poffset = offset;
+    }
+    return block_id;
+}
+#endif
+#endif
+
+typedef struct KEncFileCiphers KEncFileCiphers;
+struct KEncFileCiphers
+{
+    KCipher * master;
+    KCipher * block;
+};
+
+typedef uint8_t KEncFileIVec [16];
+/* -----
+ */
+struct KEncFileV1
+{
+    KFile dad;                  /* base class */
+    KFile * encrypted;          /* encrypted file as a KFile */
+    KEncFileCiphers ciphers;
+    KEncFileBlock block;        /* */
+    uint64_t encrypted_max;     /* highest read/written point in the encrypted file */
+    KEncFileFooter foot;        /* contains rcrchecksum and blockcount */
+#if ENABLE_V2
+    KEncFileVersion version;
+#endif
+    bool dirty;                 /* data written but not flushed */
+    bool bswap;
+    bool eof;
+    bool seekable;
+    bool written;
+    bool swarm;
+};
+
+
+/* ----------------------------------------------------------------------
+ * Buffer - just some part of the encrypted file read or written
+ *
+ *   these functions exist to hide the potential multiple calls needed
+ *   if the KFileRead or KFileWrite called on the encrypted file break up
+ *   the requested amount into partial reads or writes
+ */
+
+/* ----------
+ * BufferRead
+ *    Fill a buffer with a requested number of bytes from the encrypted file.  
+ *    Read either the requested number of bytes or up through EOF.
+ *    The caller has to handle an EOF shorted buffer.
+ */
+static
+rc_t KEncFileV1BufferRead (const KEncFileV1 * cself, uint64_t pos, void * buffer,
+                         size_t bsize, size_t * pnum_read)
+{
+    KEncFileV1 * self;   /* for mutable fields */
+    uint8_t * bbuffer; /* void pointer made to a byyte pointer */
+    rc_t rc;
+
+    assert (cself);
+    assert (buffer);
+    assert (pnum_read);
+
+    *pnum_read = 0;
+
+    self = (KEncFileV1*)cself; /* to hit mutable fields */
+    bbuffer = buffer; /* convert to a pointer of sized target */
+
+    /* we want to read a full requested size if possible so keep trying if we
+     * haven't read enough yet. 
+     * We can quit early only if EOF (i.e. read 0 bytes.
+     */
+    rc = KFileReadAll (self->encrypted, pos, buffer, bsize, pnum_read);
+    if (rc)
+        PLOGERR (klogErr,
+                 (klogErr, rc,
+                  "error reading position '$(P)' in encrypted file",
+                  "P=%lu", pos));
+
+    else if (self->encrypted_max < pos)
+        self->encrypted_max = pos;
+            
+    return rc;
+}
+
+
+/* ----------
+ * BufferWrite
+ *    Write a buffer of requested size out to the encrypted file.
+ *    return the number of bytes successfully written
+ */
+static
+rc_t KEncFileV1BufferWrite (KEncFileV1 * self, uint64_t pos, const void * buffer,
+                          size_t bsize, size_t * pnum_writ)
+{
+    rc_t rc;
+
+    rc =  KFileWriteAll (self->encrypted, pos, buffer, bsize, pnum_writ);
+    if ((rc == 0) && (self->encrypted_max < pos))
+        self->encrypted_max = pos;
+
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * operations on KEncFileHeader
+ *
+ * The header only needs to be read and validated or written  we need not 
+ * reatian within the KEncFile object any information about the header in
+ * the initial version of this file format.
+ */
+
+/* -----
+ * the first eight bytes of the file are two four byte strings
+ *  The first is a common "NCBI"
+ *  The second is the format specific "nenc"
+ */
+static const KEncFileSig KEncFileSignature = "NCBInenc";
+
+/* -----
+ * the common constant used throughout the project to check the byte order 
+ * as written by the system which created the file
+ */
+/* enum fails to handle these due to integer overflow */
+
+#define eByteOrderTag     (0x05031988)
+#define eByteOrderReverse (0x88190305)
+
+/* ----
+ * Not unexpectedly the first version of this file will be "1"
+ */
+#if ENABLE_V2
+
+#define eCurrentVersion (0x00000002)
+#define eCurrentVersionReverse (0x02000000)
+
+static
+const KEncFileHeader const_header_v1
+= { "NCBInenc", eByteOrderTag, 0x00000001 };
+
+static
+const KEncFileHeader const_bswap_header_v1
+= { "NCBInenc", eByteOrderReverse, 0x01000000 };
+    
+#else
+
+#define eCurrentVersion (0x00000001)
+#define eCurrentVersionReverse (0x01000000)
+
+#endif
+    
+static
+const KEncFileHeader const_header
+= { "NCBInenc", eByteOrderTag, eCurrentVersion };
+
+static
+const KEncFileHeader const_bswap_header
+= { "NCBInenc", eByteOrderReverse, eCurrentVersionReverse };
+
+
+/* ----------
+ * HeaderRead
+ *    Read the header of an encrypted file and validate it.
+ */
+static
+rc_t KEncFileV1HeaderRead (KEncFileV1 * self)
+{
+    KEncFileHeader header;
+    size_t num_read;
+    rc_t rc;
+
+    assert (self);
+
+    rc = KEncFileV1BufferRead (self, 0, &header, sizeof (header), &num_read);
+    if (rc)
+        return rc;
+
+    if (num_read != sizeof (header))
+    {
+        rc = RC (rcFS, rcFile, rcConstructing, rcHeader, rcTooShort);
+        PLOGERR (klogErr,
+                 (klogErr, rc, "error reading full header of encrypted "
+                  "file  wanted '$(S)' got '$(N); bytes read", "S=%u,N=%u",
+                  sizeof (header), num_read));
+        return rc;
+    }
+
+    /* expected is encrypted on a system of the same endianess */
+    if (memcmp (&header, &const_header, sizeof (header)) == 0)
+    {
+        self->bswap = false;
+#if ENABLE_V2
+        self->version = eCurrentVersion;
+#endif
+        return 0;
+    }
+
+    /* next most likely is encrypted on a machine of opposite endianess */
+    if (memcmp (&header, &const_bswap_header, sizeof (header)) == 0)
+    {
+        self->bswap = true;
+#if ENABLE_V2
+        self->version = eCurrentVersion;
+#endif
+        return 0;
+    }
+
+#if ENABLE_V2
+    if (memcmp (&header, &const_header_v1, sizeof (header)) == 0)
+    {
+        self->bswap = false;
+        self->version = 1;
+        return 0;
+    }
+
+    /* next most likely is encrypted on a machine of opposite endianess */
+    if (memcmp (&header, &const_bswap_header_v1, sizeof (header)) == 0)
+    {
+        self->bswap = true;
+        self->version = 1;
+        return 0;
+    }
+#endif
+
+    /* okay it's a "bad" header, so figure out why */
+    if (memcmp (&header, &const_header, sizeof (header.file_sig)) != 0)
+    {
+        rc = RC (rcKrypto, rcFile, rcReading, rcHeader, rcInvalid);
+        LOGERR (klogErr, rc, "file is not the NCBI encrypted file format");
+        /* if this fails the rest doesn't matter */
+        return rc;
+    }
+
+    switch (header.byte_order)
+    {
+    default:
+        rc = RC (rcFS, rcFile, rcConstructing, rcByteOrder, rcInvalid);
+        PLOGERR (klogErr, 
+                 (klogErr, rc, "invalid byte order flag '$(F); in "
+                  "encrypted file", "F=%X", header.byte_order));
+        /* we don't return to possibly log other version errors */
+        break;
+    case eByteOrderReverse:
+    case eByteOrderTag:
+        break;
+    }
+
+    switch (header.version)
+    {
+    default:
+        rc = RC (rcFS, rcFile, rcConstructing, rcHeader, rcBadVersion);
+        PLOGERR (klogErr, 
+                 (klogErr, rc, "can not decrypt version '$(V)'",
+                  "V=%u", header.version));
+        break;
+
+    case 1:
+#if ENABLE_V2
+    case 2:
+#endif
+        break;
+    }
+    return rc;
+}
+
+
+/* -----
+ * HeaderWrite
+ *
+ * build a ram copy of the header and write it to the file
+ */
+static
+rc_t KEncFileV1HeaderWrite (KEncFileV1 * self)
+{
+    size_t num_writ;
+    rc_t rc;
+
+    rc = KEncFileV1BufferWrite (self, 0, &const_header, sizeof (const_header),
+                              &num_writ);
+    if (rc == 0)
+    {
+        if (num_writ != sizeof (const_header))
+            rc = RC (rcFS, rcFile, rcWriting, rcHeader, rcInsufficient);
+    }
+    return rc;
+}
+
+LIB_EXPORT rc_t CC KEncFileV1WriteHeader_v1  (KFile * self)
+{
+    if (self == NULL)
+        return RC (rcKrypto, rcFile, rcWriting, rcSelf, rcNull);
+    return KEncFileV1HeaderWrite ((KEncFileV1*)self);
+}
+
+
+/* ----------------------------------------------------------------------
+ * operations on KEncFileFooter
+ */
+
+/* ----------
+ * Validate
+ * we expect to read a Footer when we expect a Block so we validate in RAM
+ * without a Read
+ *
+ * we're just comparing the values in the footer against expected values
+ */
+static
+rc_t KEncFileV1FooterValidate (const KEncFileV1 * self,
+                             uint64_t block_count, uint64_t crc_checksum)
+{
+    rc_t rc1 = 0, rc2 = 0;
+
+    if (self->foot.block_count != block_count)
+    {
+        rc2 = RC (rcKrypto, rcFile, rcValidating, rcFile, rcCorrupt);
+        LOGERR (klogErr, rc1, "bad block count in encrypted file footer");
+    }
+    if ((self->foot.crc_checksum != crc_checksum)
+#if ENABLE_V2
+        &&((crc_checksum != 0) || (self->version == 1))
+#endif
+        )
+    {
+        rc1 = RC (rcKrypto, rcFile, rcValidating, rcChecksum, rcCorrupt);
+        LOGERR (klogErr, rc2, "bad crc checksum in encrypted file footer");
+    }
+    return (rc1 ? rc1 : rc2);
+}
+
+
+/* ----------
+ * Write
+ * when we write a footer we write from the values in the object.  They
+ * are stored in the same object format as the footer so its very simple
+ */
+static
+rc_t KEncFileV1FooterWrite (KEncFileV1 * self)
+{
+    KEncFileFooter foot;
+    uint64_t offset;
+    size_t num_writ;
+    rc_t rc;
+
+    memcpy (&foot, &self->foot, sizeof (foot));
+    if (self->bswap)
+    {
+        foot.block_count = bswap_64 (foot.block_count);
+        foot.crc_checksum = bswap_64 (foot.crc_checksum);
+    }
+
+    offset = BlockId_to_EncryptedPos (self->foot.block_count);
+
+/*     assert ((self->encrypted_max == offset) || */
+/*             (self->encrypted_max + sizeof(self->foot) == offset)); */
+
+    rc = KEncFileV1BufferWrite (self, offset, &foot, sizeof (foot),
+                              &num_writ);
+    if (rc == 0)
+    {
+        if (num_writ != sizeof (foot))
+            rc = RC (rcFS, rcFile, rcWriting, rcFile, rcInsufficient);
+    }
+    return rc;
+}
+
+
+/* ----------
+ * IvecInit
+ *    create the ivec for a given block
+ *    done in a function to ensure decrypt and encrypt use the same code to
+ *    generate this.  Anything used to create this has to be available to
+ *    code that doesn't know the content of the data or the state of the file
+ *    beyond the location of the block with in the file.
+ *
+ *    This is definitely over-kill using the MD5.
+ */
+static
+void KEncFileV1IVecInit (const KEncFileV1 * self, KEncFileIVec ivec)
+{
+    BufferCalcMD5 (&self->block.id, sizeof self->block.id, ivec);
+}
+
+ 
+/* ----------
+ * BlockEncrypt
+ */
+
+static
+rc_t KEncFileV1BlockEncrypt (KEncFileV1 * self, KEncFileBlock * e)
+{
+    SHA256State state;
+    uint64_t id;
+    uint16_t valid;
+    uint16_t saved_valid;
+    KEncFileCRC crc;
+    uint8_t ivec [16];
+    rc_t rc;
+
+    assert (self);
+    assert (e);
+
+    /*
+     * First we finish preparing the two ciphers by creating the block
+     * user key out of the first part of the data and the shared Initialization
+     * vector for Chained Block Cipher mode encryption out of the block id
+     * 
+     * create the initialization vector for this block
+     */
+    KEncFileV1IVecInit (self, ivec);
+
+    /*
+     * set the ivec for both the master and data block ciphers
+     */
+    rc = KCipherSetEncryptIVec (self->ciphers.master, ivec);
+    if (rc)
+        return rc;
+
+    rc = KCipherSetEncryptIVec (self->ciphers.block, ivec);
+    if (rc)
+        return rc;
+
+    /*
+     * create the block user key out of the first 4kb of data and the block id 
+     */
+    saved_valid = valid = self->block.u.valid;
+    id = self->block.id;
+
+    SHA256StateInit (&state);
+    SHA256StateAppend (&state, self->block.data, 
+                       valid > 4096 ? 4096 : valid);
+    SHA256StateAppend (&state, &id, sizeof (id));
+    SHA256StateFinish (&state, self->block.key);
+        
+    /*
+     * create the block key schedule out of the block user key
+     */
+    rc = KCipherSetEncryptKey (self->ciphers.block, self->block.key,
+                               sizeof self->block.key);
+    if (rc)
+        return rc;
+
+    /* 
+     * Salt the block using the randomish user key to randomly select
+     * data from the valid data.
+     *
+     * This will cover the data portion of the block past the last valid
+     * byte.
+     *
+     * NOTE we are accessing a byte array as a word array.
+     *
+     * NOTE we are using the array named data to access data beyond it's end.
+     */
+    {
+        uint16_t * pw;
+        unsigned int windex;
+        unsigned int rindex;
+        size_t bindex;
+
+        pw = (uint16_t*)self->block.key;
+        windex = 0;
+
+        for (bindex = valid;
+             bindex < sizeof self->block.data + sizeof self->block.u; 
+             ++ bindex)
+        {
+            /* this goes beyond the end of the data array by design */
+            rindex = (size_t)pw[windex];
+            rindex %= bindex;
+
+            self->block.data[bindex] = self->block.data[rindex];
+        
+            ++rindex;
+            if (rindex >= sizeof self->block.key / sizeof *pw)
+                rindex = 0;
+        }
+    }
+
+    /* 
+     * If we are modifying a block created on a system with a different default
+     * Endian choice we'll need to byte swap the block id and the block valid
+     * count
+     */
+    if (self->bswap)
+    {
+        id = bswap_64 (id);
+        valid = bswap_16 (valid);
+    }
+
+
+    if (saved_valid == sizeof self->block.data)
+        self->block.u.valid |= valid;
+    else
+        self->block.u.valid = valid;
+
+    e->id = id;
+
+    /* 
+     * encrypt the block user key into the buffer
+     */
+    rc = KCipherEncryptCBC (self->ciphers.master, self->block.key, e->key,
+                            sizeof (self->block.key) / sizeof (ivec));
+    if (rc)
+        return rc;
+
+    /*
+     * encrypt the data, offset and valid values
+     */
+    rc = KCipherEncryptCBC (self->ciphers.block, 
+                            self->block.data, e->data,
+                            (sizeof self->block.data + sizeof self->block.u) / sizeof (ivec));
+    if (rc)
+        return rc;
+
+    self->block.u.valid = saved_valid;
+
+    crc = CRC32 (0, e, (char*)(&e->crc)-(char*)e);
+
+    self->block.crc = crc;
+
+    if (self->bswap)
+    {
+        crc = bswap_32 (crc);
+    }
+    e->crc_copy = e->crc = crc;
+    
+    return 0;
+}
+
+
+/* ----------
+ * BlockDecrypt
+ *   decrypt decrypts the data from a KEncFileBlock into the KEncFileBlock
+ *   in the KEncFile object
+ */
+
+static
+rc_t KEncFileV1BlockDecrypt (KEncFileV1 * self, KEncFileBlock * e)
+{
+    uint8_t ivec [16];
+    rc_t rc;
+
+    assert (self);
+    assert (e);
+
+    /* create the initialization vector for this block */
+    KEncFileV1IVecInit (self, ivec);
+
+    /*
+     * set the ivec for both the master and data block ciphers
+     */
+    rc = KCipherSetDecryptIVec (self->ciphers.master, ivec);
+    if (rc)
+        return rc;
+
+    rc = KCipherSetDecryptIVec (self->ciphers.block, ivec);
+    if (rc)
+        return rc;
+
+    /* 
+     * decrypt the block key and initial vector using the user key and 
+     * the computer ivec
+     */
+    rc = KCipherDecryptCBC (self->ciphers.master, e->key, self->block.key,
+                            (sizeof e->key) / sizeof ivec);
+    if (rc)
+        return rc;
+
+    /* 
+     * now create the AES key for the block from the newly decrypted 
+     * block key
+     */
+    rc = KCipherSetDecryptKey (self->ciphers.block, self->block.key,
+                               sizeof self->block.key);
+    if (rc)
+        return rc;
+    rc = KCipherDecryptCBC (self->ciphers.block, e->data, 
+                            self->block.data, 
+                            (sizeof e->data + sizeof e->u) / sizeof ivec);
+    if (rc)
+        return rc;
+
+    if (self->bswap)
+    {
+        self->block.u.valid = bswap_16 (self->block.u.valid);
+/*         self->block.id = bswap_64 (self->block.id); */
+    }
+
+    /* we choose not to flag errors in decryption so don't validate these */
+    if (self->block.u.valid & 0x8000)
+        self->block.u.valid = 0x8000;
+
+    return rc;
+}
+
+
+/* ----------
+ * BlockRead
+ *    read a requested block from the encrypted file; 
+ *    decryption is a separate step
+ */
+static
+rc_t KEncFileV1BlockRead (const KEncFileV1 * cself, uint64_t block_id,
+                        KEncFileBlock * block, bool validate)
+{
+    KEncFileV1 * self;    /* mutable fields */
+    uint64_t pos;
+    uint64_t max;
+    size_t num_read;
+    rc_t rc;
+    KEncFileBlock e;
+
+    assert (cself);
+    assert (block);
+
+    self = (KEncFileV1*)cself;
+    pos = BlockId_to_EncryptedPos (block_id);
+
+    /* set aside the current maximum position within the encrypted file */
+    max = self->encrypted_max;
+
+    memset (&self->block, 0, sizeof self->block);
+    self->block.id = block_id;
+    self->block.u.valid = 0;
+    self->dirty = false;
+
+    rc = KEncFileV1BufferRead (self, pos, &e, sizeof e, &num_read);
+    if (rc)
+        PLOGERR (klogErr,
+                 (klogErr, rc,
+                  "error in reading block '$(BID)' from encrypted file",
+                  "BID=%lu", block_id));
+    else
+    {
+        uint32_t crc;
+
+        /* we'll judge the success of the read now on how many bytes read
+         * there are only three legitimate values:  
+         *   + size of a block 
+         *   + size of a footer
+         *   + zero meaning no footer yet
+         *
+         * This might have to change to handled streamed files where the 
+         * producer jsut hasn't finished yet
+         */
+        switch (num_read)
+        {
+        default: /* bad value means a truncated file most likely */
+            rc = RC (rcKrypto, rcFile, rcReading, rcFile, rcInsufficient);
+            PLOGERR (klogErr,
+                     (klogErr, rc, "wrong size reading block '$(B)' at '$(P)' "
+                      "from encrypted file - likely truncated", "B=%lu,P=%lu",
+                      block_id, pos));
+            break;
+
+        case sizeof e:
+            if (max <= pos) /* if we hadn't read this far do accounting */
+            {
+                if (self->bswap)
+                {
+                    e.crc = bswap_32 (e.crc);
+                    e.id = bswap_64 (e.id);
+                }
+
+                if (block_id != e.id)
+                {
+                    PLOGERR (klogErr,
+                             (klogErr,
+                              RC (rcKrypto, rcFile, rcValidating, rcIndex, rcIncorrect),
+                              "error validating id for block '$(BID)' is not $(C2)", 
+                              "BID=%lu,C2=%lu", block_id, e.id));
+                }
+
+                if (validate)
+                {
+                    crc = CRC32 (0, &e, (char*)(&e.crc)-(char*)&e);
+
+
+                    if (crc != e.crc)
+                    {
+                        PLOGERR (klogErr,
+                                 (klogErr,
+                                  RC (rcKrypto, rcFile, rcValidating, rcCrc, rcCorrupt),
+                                  "error validating crc for block '$(BID)' $(C1) is not $(C2)", 
+                                  "BID=%lu,C1=0x%X,C2=0x%X", block_id,
+                                  crc, e.crc));
+                    }
+                }
+
+                ++self->foot.block_count;
+/* Byte Endian problem! */
+                self->foot.crc_checksum += e.crc;
+            }
+            memcpy (block, &e, sizeof e);
+            self->eof = false;
+            break;
+
+        case sizeof (self->foot):
+            {
+                KEncFileFooter foot;
+                memmove (&foot, &e, sizeof foot);
+                if (self->bswap)
+                {
+                    foot.block_count = bswap_64 (foot.block_count);
+                    foot.crc_checksum = bswap_64 (foot.crc_checksum);
+                }
+                if (validate && !self->written)
+                {
+                    rc = KEncFileV1FooterValidate (self, foot.block_count,
+                                                 foot.crc_checksum);
+                    if (rc)
+                        break;
+                }
+            }
+            /* fall through */
+        case 0:
+            self->block.u.valid = 0;
+            self->block.crc = 0;
+            self->eof = true;
+            return 0;
+
+        }
+    }
+    return rc;
+}
+
+static
+rc_t KEncFileV1BlockWrite (KEncFileV1 * self)
+{
+    KEncFileBlock e;
+    uint64_t block_offset;
+    size_t num_writ;
+    rc_t rc;
+ 
+    assert (self);
+
+    if (self->block.u.valid > sizeof self->block.data)
+        return RC (rcFS, rcFile, rcWriting, rcBuffer, rcCorrupt);
+
+    /* where in the file is this block */
+    block_offset = BlockId_to_EncryptedPos(self->block.id);
+
+    /* if this is an update to a block take out the old crc value */
+    if (block_offset < self->encrypted_max)
+        self->foot.crc_checksum -= self->block.crc;
+
+    /* if it's not we need to add it as a new block in the count */
+    else
+        ++self->foot.block_count;
+
+    rc = KEncFileV1BlockEncrypt (self, &e);
+    if (rc)
+        return rc;
+
+/* Byte Endian problem */
+    self->foot.crc_checksum += self->block.crc;
+
+    /* now write the buffer to the encrypted file */
+    rc = KEncFileV1BufferWrite (self, block_offset, &e, sizeof e, &num_writ);
+
+    if ((rc == 0) && (num_writ != sizeof e))
+    {
+        rc = RC (rcFS, rcFile, rcWriting, rcFile, rcTooShort);
+        PLOGERR (klogErr,
+                 (klogErr, rc, "incomplete block write '$(B)' wanted"
+                  " '$(V)' got '$(N)'", "B=%lu,V=%u,N=%u",
+                  self->foot.block_count+1, self->block.u.valid, num_writ));
+    }
+    return rc;
+}
+
+
+static
+rc_t KEncFileV1BlockFlush (KEncFileV1 *self)
+{
+    rc_t rc = 0;
+
+    assert (self);
+    assert (self->block.u.valid);
+    assert (self->block.u.valid <= sizeof (self->block.data));
+
+    /* first do we need to deal with the file header? 
+     * if the encrypted file has not been written to we do */
+    if ((self->encrypted_max == 0) && (self->swarm == false))
+    {
+        rc = KEncFileV1HeaderWrite (self);
+        if (rc)
+            return rc;
+    }
+
+    if (self->dirty)
+    {
+        rc = KEncFileV1BlockWrite (self);
+        if (rc == 0)
+            self->dirty = false;
+    }
+    return rc;
+}
+
+
+/*
+ * block_id - which block to read and decrypt
+ * fill - if not false, we fill in zero blocks up through this block
+ *
+ */
+static
+rc_t KEncFileV1BlockSeek (KEncFileV1 * self, uint64_t block_id, bool fill, bool validate)
+{
+    KEncFileBlock b;
+    rc_t rc;
+
+    if (block_id != self->block.id)
+    {
+        if (self->dirty)
+        {
+            /* flush what we got */
+            rc = KEncFileV1BlockFlush (self);
+            if (rc)
+                return rc;
+        }
+
+        if (validate && (block_id > self->block.id))
+        {
+            uint64_t tid;
+
+            for (tid = self->block.id + 1; tid < block_id; ++tid)
+            {
+                if (self->encrypted_max > BlockId_to_EncryptedPos(block_id))
+                    continue;
+
+                memset (&b, 0, sizeof b);
+
+                rc = KEncFileV1BlockRead (self, tid, &b, validate);
+                if (rc)
+                    return rc;
+
+                if (self->eof)
+                {
+                    if (fill)
+                    {
+                        self->eof = false;
+                        memset (self->block.data, 0, sizeof (self->block.data));
+                        self->block.u.valid = sizeof (self->block.data);
+                        self->dirty = true;
+                        rc = KEncFileV1BlockFlush (self);
+                        if (rc)
+                            return rc;
+                    }
+                    else
+                        return 0;
+                }
+                /* in this loop a less than full block is end of file */
+                else if (fill)
+                {
+                    rc = KEncFileV1BlockDecrypt (self, &b);
+                    if (rc)
+                        return rc;
+
+                    if (self->block.u.valid < sizeof self->block.u.valid)
+                    {
+                        memset (self->block.data + self->block.u.valid, 0, 
+                                sizeof (self->block.data) - self->block.u.valid);
+                        self->dirty = true;
+                        rc = KEncFileV1BlockFlush (self);
+                        if (rc)
+                            return rc;
+                    }
+                    else
+                    {
+                        return 0;
+                    }
+                }
+            }
+        }
+    }
+    /* done with intervening blocks */
+    memset (&b, 0, sizeof b);
+
+    rc = KEncFileV1BlockRead (self, block_id, &b, validate);
+    if (rc)
+        return rc;
+
+    if (! self->eof)
+    {
+        rc = KEncFileV1BlockDecrypt (self, &b);
+    }
+    if (fill)
+    {
+        self->block.id = block_id;
+        self->block.u.valid = 0;
+    }
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Interface Functions
+ *
+ * Destroy
+ *
+ */
+static
+rc_t CC KEncFileV1DestroyRead (KEncFileV1 *self)
+{
+    rc_t rc1 = 0;
+    rc_t rc2 = 0;
+    rc_t rc3 = 0;
+
+    if (self)
+    {
+        rc1 = KFileRelease (self->encrypted);
+        rc2 = KCipherRelease (self->ciphers.master);
+        rc3 = KCipherRelease (self->ciphers.block);
+        free (self);
+        return rc1 ?  rc1 : rc2 ? rc2 : rc3;
+    }
+    return 0;
+}
+
+
+static
+rc_t CC KEncFileV1DestroyWrite (KEncFileV1 *self)
+{
+    rc_t rc1;
+    rc_t rc2;
+
+    rc1 = (self->block.u.valid) ? KEncFileV1BlockFlush (self) : 0;
+    if ((rc1 == 0)&&(self->encrypted_max != 0))
+        rc1 = KEncFileV1FooterWrite (self);
+    rc2 = KFileRelease (self->encrypted);
+
+    return (rc1 ?  rc1 : rc2);
+}
+
+
+static
+rc_t CC KEncFileV1DestroySwarm (KEncFileV1 *self)
+{
+    rc_t rc1 = 0;
+    rc_t rc2 = 0;
+    rc_t rc3 = 0;
+
+    if (self)
+    {
+        rc1 = KFileRelease (self->encrypted);
+        rc2 = KCipherRelease (self->ciphers.master);
+        rc3 = KCipherRelease (self->ciphers.block);
+        free (self);
+        return rc1 ?  rc1 : rc2 ? rc2 : rc3;
+    }
+    return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * GetSysFile
+ *  returns an underlying system file object
+ *  and starting offset to contiguous region
+ *  suitable for memory mapping, or NULL if
+ *  no such file is available.
+ *
+ * We do not allow this for read, write or update as you can not memory map the 
+ * unencrypted file in a meaningful way.
+ */
+static
+struct KSysFile *CC KEncFileV1GetSysFileUnsupported (const KEncFileV1 *self, uint64_t *offset)
+{
+    assert (self);
+    assert (offset);
+    return NULL;
+}
+
+
+/* ----------------------------------------------------------------------
+ * RandomAccess
+ *
+ *  returns 0 if random access, error code otherwise
+ */
+static
+rc_t CC KEncFileV1RandomAccess (const KEncFileV1 *self)
+{
+    assert (self != NULL);
+    assert (self->encrypted != NULL);
+    return KFileRandomAccess (self->encrypted);
+}
+
+
+static
+rc_t CC KEncFileV1RandomAccessUnsupported (const KEncFileV1 *self)
+{
+    return RC ( rcFS, rcFile, rcUpdating, rcFunction, rcUnsupported );
+}
+
+
+/* ----------------------------------------------------------------------
+ * Size
+ *  returns size in bytes of file
+ *
+ *  "size" [ OUT ] - return parameter for file size
+ */
+static
+rc_t CC KEncFileV1SizeUnsupported (const KEncFileV1 *self, uint64_t *size)
+{
+    return RC ( rcFS, rcFile, rcAccessing, rcFunction, rcUnsupported );
+}
+
+
+/* ----------------------------------------------------------------------
+ * SetSize
+ *  sets size in bytes of file
+ *
+ *  "size" [ IN ] - new file size
+ */
+static
+rc_t CC KEncFileV1SetSizeUnsupported (KEncFileV1 *self, uint64_t size)
+{
+    assert (self);
+    return RC ( rcFS, rcFile, rcUpdating, rcFunction, rcUnsupported );
+}
+
+
+/* ----------------------------------------------------------------------
+ * Read
+ *  read file from known position
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ *  "num_read" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually read
+ */
+static
+rc_t CC KEncFileV1ReadUnsupported (const KEncFileV1 *self,
+                                 uint64_t pos,
+                                 void *buffer,
+                                 size_t bsize,
+                                 size_t *num_read)
+{
+    return RC ( rcFS, rcFile, rcReading, rcFunction, rcUnsupported );
+}
+
+
+static
+rc_t CC KEncFileV1Read	(const KEncFileV1 *cself,
+                         uint64_t pos,
+                         void *buffer,
+                         size_t bsize,
+                         size_t *num_read)
+{
+    KEncFileV1 * self = (KEncFileV1 *)cself; /* mutable values */
+    uint64_t block_id;
+    uint32_t offset;
+    size_t to_copy;
+    rc_t rc = 0;
+
+    assert (self); /* checked in file.c KFileRead() */
+    /* pos can be 'anything' */
+    assert (buffer); /* checked in file.c KFileRead() */
+    assert (bsize); /* checked in file.c KFileRead() */
+    assert (num_read); /* checked in file.c KFileRead() */
+
+    *num_read = 0;
+
+    block_id = DecryptedPos_to_BlockId (pos, &offset);
+
+    /*
+     * are we on the wrong block?
+     * Or are do we need to read the first block?
+     */
+    if ((block_id != self->block.id) || (self->block.u.valid == 0))
+    {
+        rc = KEncFileV1BlockSeek (self, block_id, false, false);
+        if (rc)
+            return rc;
+    }
+
+    /*
+     * if we are trying to read past the end of the file 
+     * return 0 with nothing read
+     */
+    if (self->eof || (block_id != self->block.id) ||
+        (offset >= self->block.u.valid))
+        return 0;
+
+    to_copy = self->block.u.valid - offset;
+    if (to_copy > bsize)
+        to_copy = bsize;
+
+    memmove (buffer, self->block.data + offset, to_copy);
+    *num_read = to_copy;
+
+    return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Write
+ *  write file at known position
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ *  "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually written
+ *
+ * Unsupported as we now treat archives as READ ONLY
+ */
+static
+rc_t CC KEncFileV1WriteUnsupported (KEncFileV1 *self, uint64_t pos,
+                                  const void *buffer, size_t bsize,
+                                  size_t *num_writ)
+{
+    rc_t rc = RC (rcFS, rcFile, rcReading, rcFunction, rcUnsupported);
+    LOGERR (klogInt, rc, "KFileRead failed to filter call");
+    return rc;
+}
+
+static
+rc_t KEncFileV1WriteInt (KEncFileV1 *self, uint64_t block_id, uint32_t block_offset,
+                       const void *buffer, size_t bsize,
+                       size_t *pnum_writ, bool seek)
+{
+    const uint8_t * pb;
+    size_t tot_writ;
+    rc_t rc;
+
+    assert (self);
+    assert (self->block.u.valid <= sizeof (self->block.data));
+    assert (block_offset < sizeof (self->block.data));
+    assert (buffer);
+    assert (bsize);
+    assert (pnum_writ);
+
+    if (seek)
+    {
+        /* if we need to change blocks */
+        if (block_id != self->block.id)
+        {
+            rc = KEncFileV1BlockSeek (self, block_id, true, false);
+            if (rc)
+                return rc;
+        }
+        /* do we have to fill some of this block */
+        if (self->block.u.valid < block_id)
+        {
+            memset (self->block.data + self->block.u.valid, 0,
+                    block_offset - self->block.u.valid);
+            self->block.u.valid = block_offset;
+        }
+    }
+
+    /*
+     * is the full write within this block?
+     * doesn't matter whether we are skipping back or not
+     */
+    if ((block_offset + bsize) <= sizeof (self->block.data))
+    {
+        memmove (self->block.data + block_offset, buffer, bsize);
+        self->dirty = true;
+        if (block_offset + bsize > self->block.u.valid)
+            self->block.u.valid = block_offset + bsize;
+        *pnum_writ = bsize;
+        return 0;
+    }
+
+    /* we are either forcing ourselves backward or not */
+    else 
+        self->block.u.valid = block_offset;
+
+    /* by this point we are 'at' the right place in the file */
+    /* do we have an existing (possibly partial) block? */
+
+    /* change to a sized target pointer */
+    pb = buffer;
+    tot_writ = 0;
+
+    /* handle this first block with some data in it */
+    if (self->block.u.valid != 0)
+    {
+        size_t remaining;
+
+        /* how many bytes left in this block */
+        remaining = sizeof self->block.data - self->block.u.valid;
+
+        memmove (self->block.data + self->block.u.valid, buffer, remaining);
+        self->block.u.valid = sizeof self->block.data;
+
+        self->dirty = true;
+        rc = KEncFileV1BlockFlush (self);
+        if (rc)
+        {
+            LOGERR (klogErr, rc, "error flushing block in encrypt");
+            return rc;
+        }
+
+        tot_writ = remaining;
+        pb += remaining;
+        bsize -= remaining; 
+        ++block_id;
+    }
+
+    /* now loop through complete blocks to write */
+    for (; bsize >= sizeof self->block.data; bsize -= sizeof self->block.data)
+    {
+        memcpy (self->block.data, pb, sizeof self->block.data);
+
+        self->block.u.valid = sizeof self->block.data;
+        self->block.id = block_id;
+        self->dirty = true;
+        rc = KEncFileV1BlockFlush (self);
+        if (rc)
+        {
+            LOGERR (klogErr, rc, "error flushing block in encrypt");
+            return rc;
+        }
+        pb += sizeof self->block.data;
+	tot_writ += sizeof self->block.data;
+        ++block_id;
+    }
+
+    /* now any last partial block that starts at the beginning of a block */
+    if (bsize != 0)
+    {
+        KEncFileBlock b;
+
+        if (self->encrypted_max > BlockId_to_EncryptedPos(block_id))
+        {
+            rc = KEncFileV1BlockRead (self, block_id, &b, false);
+            if (rc)
+                return rc;
+            /* if valid is not 0 we actually read something */
+            if (b.u.valid)
+                rc = KEncFileV1BlockDecrypt (self, &b);
+        }
+        else
+        {
+            self->block.u.valid = 0;
+            self->block.id = block_id;
+        }
+
+        memmove (self->block.data, pb, bsize);
+
+        if (bsize > self->block.u.valid)
+            self->block.u.valid = bsize;
+
+        self->dirty = true;
+        tot_writ += bsize;
+    }
+    *pnum_writ = tot_writ;
+    return 0;
+}
+
+
+static
+rc_t CC KEncFileV1Write (KEncFileV1 *self, uint64_t pos,
+                       const void *buffer, size_t bsize,
+                       size_t *pnum_writ)
+{
+    uint64_t block_id;
+    uint64_t curr_block_id;
+    uint32_t block_offset;
+    uint32_t curr_block_offset;
+    rc_t rc = 0;
+
+    /* -----
+     * check for incorrect call with a seek attempt
+     * we only allow seeks on read or read/write files
+     *
+     * find our location in the encrypted file by block id
+     * and offset
+     */
+    block_id = DecryptedPos_to_BlockId (pos, &block_offset);
+    curr_block_id = DecryptedPos_to_BlockId
+        (BlockId_to_DecryptedPos (self->block.id) + self->block.u.valid,
+         &curr_block_offset);
+
+    /* are we writing to the wrong block/offset? */
+    if ((block_id != curr_block_id) || (block_offset != curr_block_offset))
+    {
+        rc = RC (rcFS, rcFile, rcWriting, rcOffset, rcIncorrect);
+        PLOGERR (klogErr, (klogErr, rc, "attempt to seek in encryption write at"
+                           " '$(O)' seek to '$(P)'", "O=%lu,P=%lu",
+                           BlockId_to_EncryptedPos(self->block.id), pos));
+    }
+    else
+    {
+        if ((block_id != 0) && (block_id != self->block.id))
+        {
+            rc = KEncFileV1BlockFlush (self);
+            if (rc == 0)
+            {
+                ++self->block.id;
+                self->block.u.valid = 0;
+            }
+        }
+        
+        if (rc == 0)
+            rc = KEncFileV1WriteInt (self, block_id, block_offset, buffer,
+                                       bsize, pnum_writ, false);
+    }
+    return rc;
+}
+
+
+static
+rc_t CC KEncFileV1WriteSwarm (KEncFileV1 *self, uint64_t pos,
+                            const void *buffer, size_t bsize,
+                            size_t *pnum_writ)
+{
+    uint32_t block_offset;
+    rc_t rc;
+
+    self->block.id = DecryptedPos_to_BlockId (pos, &block_offset);
+    self->block.u.valid = 0;
+    if (bsize > sizeof self->block.data - block_offset)
+        bsize = sizeof self->block.data - block_offset;
+
+    rc = KEncFileV1WriteInt (self, self->block.id, block_offset, buffer,
+                           bsize, pnum_writ, false);
+    if (rc == 0)
+        rc = KEncFileV1BlockFlush (self);
+    return rc;
+}
+
+
+static
+rc_t CC KEncFileV1Update (KEncFileV1 *self, uint64_t pos,
+                        const void *buffer, size_t bsize,
+                        size_t *pnum_writ)
+{
+    return RC (rcKrypto, rcFile, rcConstructing, rcFunction, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * Type
+ *  returns a KFileDesc
+ *  not intended to be a content type,
+ *  but rather an implementation class
+ */
+static
+uint32_t CC KEncFileV1Type (const KEncFileV1 *self)
+{
+    assert (self != NULL);
+    assert (self->encrypted != NULL);
+
+    return KFileType (self->encrypted);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KEncFileV1Make
+ *  create a new file object
+ */
+
+/* ----------
+ * KeysInit
+ */
+static
+rc_t KEncFileV1CiphersInit (KEncFileV1 * self, const KKey * key, bool read, bool write)
+{
+    KCipherManager * mgr;
+    size_t z;
+    rc_t rc;
+
+    switch ( key->type)
+    {
+    default:
+        return RC (rcKrypto, rcEncryptionKey, rcConstructing, rcParam, rcInvalid);
+
+    case kkeyNone:
+        return RC (rcKrypto, rcEncryptionKey, rcConstructing, rcParam, rcIncorrect);
+
+    case kkeyAES128:
+        z = 128/8; break;
+
+    case kkeyAES192:
+        z = 192/8; break;
+
+    case kkeyAES256:
+        z = 256/8; break;
+    }
+    rc = KCipherManagerMake (&mgr);
+    if (rc == 0)
+    {
+        rc = KCipherManagerMakeCipher (mgr, &self->ciphers.master, kcipher_AES);
+        if (rc == 0)
+        {
+            rc = KCipherManagerMakeCipher (mgr, &self->ciphers.block, kcipher_AES);
+            if (rc == 0)
+            {
+                rc = KCipherSetDecryptKey (self->ciphers.master, key->text, z);
+                if (rc == 0)
+                {
+                    rc = KCipherSetEncryptKey (self->ciphers.master, key->text, z);
+                    if (rc == 0)
+                        goto keep_ciphers;
+                }
+                KCipherRelease (self->ciphers.block);
+                self->ciphers.block = NULL;
+            }
+            KCipherRelease (self->ciphers.master);
+            self->ciphers.master = NULL;
+        }
+    keep_ciphers:
+        KCipherManagerRelease (mgr);
+    }
+    return rc;
+}
+
+
+
+/* ----------
+ * MakeInt
+ *    common make for all encryptor/decryptors
+ */
+static
+rc_t KEncFileV1MakeInt (KEncFileV1 ** pself, KFile * encrypted,
+                      const KFile_vt_v1 * vt, bool r, bool w, bool v)
+{
+    KEncFileV1 * self;
+    rc_t rc;
+
+    assert (pself);
+    assert (encrypted);
+
+    /* allocate and zero out an object since we want much of it to be zeroed */
+    self = calloc (sizeof *self, 1);
+    if (self == NULL)
+    {
+        rc = RC (rcFS, rcFile, rcConstructing, rcMemory, rcExhausted);
+        LOGERR (klogSys, rc,
+                "out of memory creating encrypter and/or decryptor");
+    }
+    else
+    {
+        /* all KFiles get this initialization */
+        rc = KFileInit (&self->dad, (const KFile_vt*)vt, "KEncFileV1", "no-name", r, w);
+        if (rc)
+            LOGERR (klogInt, rc, "failure initialize encrypted file root class");
+        else
+        {
+            rc = KFileAddRef (encrypted);
+            if (rc == 0)
+            {
+                self->encrypted = encrypted;
+                *pself = self;
+                return 0;
+            }
+        }
+        free (self);
+    }
+    return rc;
+}
+
+
+/* ----------
+ * MakeCmn
+ * common parameter validation for all encryptor/decryptors
+ */
+static
+rc_t KEncFileV1MakeCmn (KEncFileV1 ** pself, KFile * encrypted, const KKey * key,
+                      const KFile_vt_v1 * vt, bool r, bool w)
+{
+    rc_t rc = 0;
+
+    do
+    {
+        CRC32Init();    /* likely to be called way too often */
+
+        if (pself == NULL)
+        {
+            rc = RC (rcFS, rcFile, rcConstructing, rcSelf, rcNull);
+            LOGERR (klogErr, rc,
+                    "pointer to self NULL when creating "
+                    "an encryptor/decryptor");
+            break;
+        }
+        *pself = NULL;
+
+        if (encrypted == NULL)
+        {
+            rc = RC (rcFS, rcFile, rcConstructing, rcParam, rcNull);
+            LOGERR (klogErr, rc, 
+                    "encrypted file not supplied when creating "
+                    "an encryptor/decryptor");
+            break;
+        }
+
+        if (key == NULL)
+        {
+            rc = RC (rcFS, rcFile, rcConstructing, rcParam, rcNull);
+            LOGERR (klogErr, rc, 
+                    "key not supplied when creating an encryptor/decryptor");
+            break;
+        }
+
+        switch (key->type)
+        {
+        default:
+            rc = RC (rcFS, rcFile, rcConstructing, rcParam, rcInvalid);
+            PLOGERR (klogErr,
+                     (klogErr, rc, "invalid key type '$(T)' should be "
+                      "kkeyAES128(1), kkeyAES192(2) or kkeyAES256(3)",
+                      "T=%u", key->type));
+            break;
+
+        case kkeyAES128:
+        case kkeyAES192:
+        case kkeyAES256:
+            break;
+        }
+        if (rc == 0)
+        {
+            KEncFileV1 * self;
+
+            assert (vt);
+            assert ((r == true) || (r == false));
+            assert ((w == true) || (w == false));
+
+            rc = KEncFileV1MakeInt (&self, encrypted, vt, r, w, false);
+            if (rc == 0)
+            {
+                rc = KEncFileV1CiphersInit (self, key, r, w);
+                if (rc == 0)
+                {
+                    *pself = self;
+                    return 0;
+                }
+                KFileRelease (&self->dad);
+            }
+        }
+    } while (0);
+    return rc;
+}
+
+
+
+static const KFile_vt_v1 vtKEncFileV1Read =
+{
+    /* version */
+    1, 1,
+
+    /* 1.0 */
+    KEncFileV1DestroyRead,
+    KEncFileV1GetSysFileUnsupported,
+    KEncFileV1RandomAccess,
+    KEncFileV1SizeUnsupported,
+    KEncFileV1SetSizeUnsupported,
+    KEncFileV1Read,
+    KEncFileV1WriteUnsupported,
+
+    /* 1.1 */
+    KEncFileV1Type
+};
+static const KFile_vt_v1 vtKEncFileV1Write =
+{
+    /* version */
+    1, 1,
+
+    /* 1.0 */
+    KEncFileV1DestroyWrite,
+    KEncFileV1GetSysFileUnsupported,
+    KEncFileV1RandomAccessUnsupported,
+    KEncFileV1SizeUnsupported,
+    KEncFileV1SetSizeUnsupported,
+    KEncFileV1ReadUnsupported,
+    KEncFileV1Write,
+
+    /* 1.1 */
+    KEncFileV1Type
+};
+static const KFile_vt_v1 vtKEncFileV1Update =
+{
+    /* version */
+    1, 1,
+
+    /* 1.0 */
+    KEncFileV1DestroySwarm,
+    KEncFileV1GetSysFileUnsupported,
+    KEncFileV1RandomAccess,
+    KEncFileV1SizeUnsupported,
+    KEncFileV1SetSizeUnsupported,
+    KEncFileV1ReadUnsupported,
+    KEncFileV1WriteSwarm,
+
+    /* 1.1 */
+    KEncFileV1Type
+};
+static const KFile_vt_v1 vtKEncFileV1Validate =
+{
+    /* version */
+    1, 1,
+
+    /* 1.0 */
+    KEncFileV1DestroyRead,
+    KEncFileV1GetSysFileUnsupported,
+    KEncFileV1RandomAccessUnsupported,
+    KEncFileV1SizeUnsupported,
+    KEncFileV1SetSizeUnsupported,
+    KEncFileV1ReadUnsupported,
+    KEncFileV1WriteUnsupported,
+
+    /* 1.1 */
+    KEncFileV1Type
+};
+
+
+/* ----------
+ * Read mode is fully seekable if the underlying KFile is seekable some
+ * integrity checking will not be performed in allowing this seeking.
+ */
+LIB_EXPORT rc_t CC KEncFileMakeRead_v1 (const KFile ** pself, 
+                                        const KFile * encrypted,
+                                        const KKey * key)
+{
+    KEncFileV1 * self;
+    rc_t rc;
+    rc = KEncFileV1MakeCmn (&self, (KFile *)encrypted, key, &vtKEncFileV1Read, 
+                          true, false);
+    if (rc)
+        LOGERR (klogErr, rc, "error constructing decryptor");
+    else
+    {
+        rc = KEncFileV1HeaderRead (self);
+        if (rc)
+            LOGERR (klogErr, rc, "error reading encrypted file header");
+        else
+        {
+            *pself = &self->dad;
+            return 0;
+        }
+        KFileRelease (&self->dad);
+    }
+    return rc;
+}
+
+
+/* ----------
+ * Write mode encrypted file can only be written straight through form the
+ * first byte to the last.
+ */
+LIB_EXPORT rc_t CC KEncFileMakeWrite_v1 (KFile ** pself, 
+                                         KFile * encrypted,
+                                         const KKey * key)
+{
+    KEncFileV1 * self;
+    rc_t rc;
+
+    rc = KFileSetSize (encrypted, 0);
+#if 0
+    if (rc)
+        LOGERR (klogWarn, rc, "error truncating output file - "
+                "corrupted file might result");
+#endif
+
+    rc = KEncFileV1MakeCmn (&self, encrypted, key, &vtKEncFileV1Write, 
+                          false, true);
+    if (rc)
+        LOGERR (klogErr, rc, "error creating encryptor");
+    else
+        *pself = &self->dad;
+    return rc;
+}
+
+
+/* ----------
+ * Update mode is read/write mode where seeking within the file is allowed.
+ */
+
+
+LIB_EXPORT rc_t CC KEncFileV1MakeUpdate_v1 (KFile ** pself, 
+                                          KFile * encrypted,
+                                          const KKey * key)
+{
+    KEncFileV1 * self;
+    rc_t rc;
+
+    rc = KEncFileV1MakeCmn (&self, encrypted, key, &vtKEncFileV1Update, 
+                          false, true);
+    if (rc)
+        LOGERR (klogErr, rc, "error creating encryptor");
+    else
+    {
+        self->swarm = true;
+        *pself = &self->dad;
+    }
+    return rc;
+}
+
+
+/* ----------
+ * Validate mode is useful only for the KFileEncValidate function
+ */
+static
+rc_t KEncFileV1MakeValidate (const KEncFileV1 ** pself, const KFile * encrypted)
+{
+    KEncFileV1 * self;
+    rc_t rc;
+
+    assert (pself);
+    assert (encrypted);
+
+    rc = KEncFileV1MakeInt (&self, (KFile*)encrypted, &vtKEncFileV1Validate, true, false, true);
+    if (rc)
+        LOGERR (klogErr, rc, "error making KEncFileV1");
+    else
+    {
+        rc = KEncFileV1HeaderRead (self);
+        if (rc)
+            LOGERR (klogErr, rc, "error reading encrypted file header");
+        else
+        {
+            *pself = self;
+            return 0;
+        }
+    }
+    *pself = NULL;
+    return rc;
+}
+
+
+/* ----------
+ * Validate mode can not be read or written.
+ * Upon open the whole file is read from begining to end and all CRC
+ * and other integrity checks are performed immedaitely
+ */
+LIB_EXPORT rc_t CC KEncFileV1Validate_v1 (const KFile * encrypted)
+{
+    const KEncFileV1 * file;
+    rc_t rc;
+
+    /* fail if a NULL parameter: can't validate all addresses */
+    if (encrypted == NULL)
+    {
+        rc = RC (rcKrypto, rcFile, rcValidating, rcParam, rcNull);
+        LOGERR (klogErr, rc, "encrypted file was null when trying to validate");
+        return rc;
+    }
+
+    /* if the parameter is already a KEncFileV1 work on the file behind it instead */
+    /* we definitely can't work on a file being written that has not been closed */
+    if (encrypted->vt == (const KFile_vt*)&vtKEncFileV1Read)
+        encrypted = (const KFile *)(((const KEncFileV1*)encrypted)->encrypted);
+
+    /* file header is validated within the call to Make Validate */
+    rc = KEncFileV1MakeValidate (&file, encrypted);
+    if (rc)
+        LOGERR (klogErr, rc,
+                "unable to validate encrypted file due to "
+                "inability to open as encrypted file");
+    else
+    {
+        uint64_t pos;             /* position within the encrypted file */
+        uint64_t block_count = 0; /* how many blocks have we read */
+
+        /* loop through all data blocks */
+        pos = sizeof (KEncFileHeader);
+        for (block_count = 0; ; ++block_count)
+        {
+            KEncFileBlock block;
+
+            STSMSG (2, ("reading block '%u' at '%lu'", block_count,
+                        BlockId_to_EncryptedPos(block_count)));
+           
+            rc = KEncFileV1BlockRead (file, block_count, &block, true);
+            if (rc)
+            {
+                STSMSG (2, ("read error at block '%u'", block_count));
+                break;
+            }
+            if (file->eof)
+            {
+                STSMSG (2, ("block '%u' was end", block_count));
+
+                break;
+            }
+            pos += sizeof (KEncFileData);
+        }
+        KFileRelease (&file->dad);
+    }
+    return (rc);
+}
+
+
+LIB_EXPORT rc_t CC KFileIsEnc_v1 (const char * buffer, size_t buffer_size)
+{
+    const KEncFileHeader * header;
+
+    if ((buffer == NULL) || (buffer_size == 0))
+        return RC  (rcFS, rcFile, rcIdentifying, rcParam, rcNull); 
+
+    header = (const KEncFileHeader*)buffer;
+
+    if (buffer_size < sizeof header->file_sig)
+        return RC (rcFS, rcFile, rcIdentifying, rcBuffer, rcInsufficient); 
+
+    if (buffer_size > sizeof (*header))
+        buffer_size = sizeof (*header);
+
+    if ((memcmp (header, &const_header, buffer_size) == 0) ||
+        (memcmp (header, &const_bswap_header, buffer_size) == 0)
+#if ENABLE_V2
+        ||
+        (memcmp (header, &const_header_v1, buffer_size) == 0) ||
+        (memcmp (header, &const_bswap_header_v1, buffer_size) == 0)
+#endif
+        )
+        return 0;
+
+    return RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType); 
+}
+
+
+
+/* ----------
+ * Read mode is fully seekable if the underlying KFile is seekable some
+ * integrity checking will not be performed in allowing this seeking.
+ */
+LIB_EXPORT rc_t CC KEncFileMakeRead (const struct KFile ** pself,
+                                        const struct KFile * encrypted_input,
+                                        const struct KKey * key)
+{
+#if USE_READ_V1
+    return KEncFileV1MakeRead_v1 (pself, encrypted_input, key);
+#else
+    return KEncFileMakeRead_v2 (pself, encrypted_input, key);
+#endif
+}
+
+
+/* ----------
+ * Write mode encrypted file can only be written straight through from the
+ * first byte to the last.
+ */
+LIB_EXPORT rc_t CC KEncFileMakeWrite (struct KFile ** pself,
+                                         struct KFile * encrypted_output,
+                                         const struct KKey * key)
+{
+#if USE_WRITE_V1
+    return KEncFileV1MakeWrite_v1 (pself, encrypted_output, key);
+#else
+    return KEncFileMakeWrite_v2 (pself, encrypted_output, key);
+#endif
+}
+
+/* ----------
+ * Update mode is read/write mode where seeking within the file is allowed.
+ *
+ * NOTE this is in the private interface because it is not actually working
+ * yet.
+ */
+LIB_EXPORT rc_t CC KEncFileMakeUpdate (struct KFile ** pself, 
+                                       struct KFile * encrypted,
+                                       const struct KKey * key)
+{
+#if USE_UPDATE_V1
+    return KEncFileV1MakeUpdate_v1 (pself, encrypted, key);
+#else
+    return KEncFileMakeUpdate_v2 (pself, encrypted, key);
+#endif
+}
+LIB_EXPORT rc_t CC KEncFileMakeWriteBlock (struct KFile ** pself, 
+                                           struct KFile * encrypted,
+                                           const struct KKey * key)
+{
+#if USE_BLOCK_V1
+    return KEncFileV1MakeUpdate_v1 (pself, encrypted, key);
+#else
+    return KEncFileMakeBlock_v2 (pself, encrypted, key);
+#endif
+}
+
+
+LIB_EXPORT rc_t CC KEncFileWriteHeader  (KFile * self)
+{
+#if USE_BLOCK_V1
+    return KEncFileV1WriteHeader_v1  (self);
+#else
+    return KEncFileWriteHeader_v2  (self);
+#endif
+}
+
+
+/* ----------
+ * Validate mode can not be read or written.
+ * Upon open the whole file is read from begining to end and all CRC
+ * and other integrity checks are performed immedaitely
+ */
+LIB_EXPORT rc_t CC KEncFileValidate (const struct KFile * encrypted)
+{
+#if USE_VALIDATE_V1
+    return KEncFileV1Validate_v1 (encrypted);
+#else
+    return KEncFileValidate_v2 (encrypted);
+#endif
+}
+
+
+/* ----------
+ * Identify whether a file is a KEncFile type encrypted file by the header.
+ * read the header into a buffer and pass it into this function.  
+ * The buffer_size needs to be at least 8 but more bytes lead to a better
+ * check up to the size of the header of a KEncFile type encrypted file.
+ * As the header may change in the future (in a backwards compatible way)
+ * that size might change from the current 16.
+ *
+ * Possible returns:
+ * 0:
+ *      the file is an identified KEncFile type file.  False positives are
+ *      possible if a file happens to match at 8 or more bytes
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType)
+ *      the file is definitely not a KEncFile type encrypted file.
+ *     
+ * RC (rcFS, rcFile, rcIdentifying, rcParam, rcNull)
+ *      bad parameters in the call
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcBuffer, rcInsufficient)
+ *      not a large enough buffer to make an identification
+ */
+LIB_EXPORT rc_t CC KFileIsEnc (const char * buffer, size_t buffer_size)
+{
+#if USE_ISENC_V1
+    return KFileIsEnc_v1 (buffer, buffer_size);
+#else
+    return KFileIsEnc_v2 (buffer, buffer_size);
+#endif
+}
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+/* end of file encfile.c */
+
diff --git a/libs/krypto/encfilev2.c b/libs/krypto/encfilev2.c
new file mode 100644
index 0000000..24aa489
--- /dev/null
+++ b/libs/krypto/encfilev2.c
@@ -0,0 +1,2589 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#include <krypto/extern.h>
+#include <krypto/encfile.h>
+#include <krypto/encfile-priv.h>
+#include "encfile-priv.h"
+#include <krypto/cipher.h>
+#include <krypto/ciphermgr.h>
+#include <krypto/key.h>
+
+/* #include "aes-priv.h" */
+
+#include <klib/rc.h>
+#include <klib/checksum.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/debug.h>
+#include <klib/status.h>
+/* #include <klib/vector.h> */
+/* #include <klib/status.h> */
+#include <kfs/file.h>
+#include <kfs/sra.h>
+#include <sysalloc.h>
+
+#include <byteswap.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+/* #include <klib/out.h> */
+
+
+/* ----------------------------------------------------------------------
+ * KEncFile
+ *   Base object class for the encryption, decryption and validation of
+ *   the file format defined above
+ */
+
+#define KFILE_IMPL struct KEncFile
+#include <kfs/impl.h>
+
+
+#include "encfile-priv.h"
+
+typedef struct KEncFileCiphers KEncFileCiphers;
+struct KEncFileCiphers
+{
+    KCipher * master;
+    KCipher * block;
+};
+
+
+typedef struct KEncFileIVec { uint8_t ivec [16]; } KEncFileIVec;
+
+/* -----
+ */
+struct KEncFile
+{
+    KFile dad;                  /* base class */
+    KFile * encrypted;          /* encrypted file as a KFile */
+    KEncFileCiphers ciphers;    /* file and block ciphers */
+    KEncFileBlock block;        /* current data block */
+    KEncFileFooter foot;        /* contains crc checksum and block count */
+    uint64_t dec_size;          /* size of decrypted file */
+    uint64_t enc_size;          /* size of encrypted file */
+    bool dirty;                 /* data written but not flushed set in Write cleared in Flush*/
+    bool seekable;              /* we can seek within the encrypted file */
+    bool size_known;            /* can we know the size? Only streaming read can not know */
+    bool bswap;                 /* file created on system of opposite endianess */
+    bool changed;               /* some write has happened cleared in Make, set in BufferWrite */
+    bool sought;                /* did a seek on a read or write invalidating crc checksum */
+    bool has_header;            /* have we read or written a header? */
+    bool eof;                   
+    bool sra;                   /* we know we are encrypting an SRA/KAR archive file */
+    bool swarm;                 /* block mode for swarm mode using KReencFile or KEncryptFile */
+    KEncFileVersion version;    /* version from the header if read; or the one being written */
+};
+
+
+/* ----------
+ * BufferCalcMD5
+ *    Generate the MD5 digest for a buffer
+ */
+static __inline__
+void BufferCalcMD5 (const void * buffer, size_t size, uint8_t digest [16])
+{
+    MD5State state;
+
+    assert (buffer);
+    assert (size);
+    assert (digest);
+
+    MD5StateInit (&state);
+    MD5StateAppend (&state, buffer, size);
+    MD5StateFinish (&state, digest);
+}
+
+
+/* -----
+ * return true or false as to whether the the buffer described is all 0 bits
+ */
+static __inline__
+bool BufferAllZero (const void * buffer_, size_t size)
+{
+    const uint8_t * buffer;
+    size_t count;
+    bool ret;
+
+    assert (buffer_);
+
+    buffer = buffer_;
+    ret = true;
+
+    for (count = 0; count < size; ++count)
+    {
+        if (buffer[count] != '\0')
+        {
+            ret = false;
+            break;
+        }
+    }
+    return ret;
+}
+
+
+/* ----------
+ * BufferRead
+ *    Read from an encrypted file and update size if warranted
+ *
+ * Read's aren't guaranteed to get full amount
+ */
+static
+rc_t KEncFileBufferRead (KEncFile * self, uint64_t offset, void * buffer,
+                         size_t bsize, size_t * num_read)
+{
+    rc_t rc;
+
+    assert (self);
+    assert (self->encrypted);
+    assert (buffer);
+    assert (bsize > 0);
+    assert (num_read);
+
+    rc = KFileReadAll (self->encrypted, offset, buffer, bsize, num_read);
+    if (rc == 0)
+    {
+        if (self->enc_size < offset + *num_read)
+        {
+            self->enc_size = offset + *num_read;
+        }
+    }
+/* leave logging to callers? */
+    else
+        PLOGERR (klogErr, (klogErr, rc, "Error reading from encrypted file "
+                           "at '$(P)", "P=%lu", offset));
+
+    return rc;
+}
+
+
+/* ----------
+ * BufferWrite
+ *    write to an encrypted file, mark it as changed and update size if warranted
+ */
+static
+rc_t KEncFileBufferWrite (KEncFile * self, uint64_t offset, const void * buffer,
+                          size_t bsize, size_t * num_writ)
+{
+    rc_t rc = 0;
+
+    assert (self);
+    assert (self->encrypted);
+    assert (buffer);
+    assert (bsize > 0);
+    assert (num_writ);
+
+    rc = KFileWriteAll (self->encrypted, offset, buffer, bsize, num_writ);
+    if (rc)
+/* leave logging to callers? */
+        PLOGERR (klogErr, (klogErr, rc, "Error writing to encrypted file "
+                           "at '$(P)", "P=%lu", offset));
+    if (bsize != *num_writ)
+    {
+/*         KOutMsg ("%s: bsize %zu *num_writ %zu\n",__func__, bsize, *num_writ); */
+        rc = RC (rcKrypto, rcFile, rcWriting, rcTransfer, rcIncomplete);
+/* leave logging to callers? */
+        PLOGERR (klogErr, (klogErr, rc, "Error writing full buffer to"
+                           " encrypted file at '$(P) wrote '$(W)'",
+                           "P=%lu,W=%zu", offset, *num_writ));
+    }
+    else if (*num_writ > 0)
+    {
+        self->changed = true;
+        if (self->enc_size < offset + *num_writ)
+        {
+            self->enc_size = offset + *num_writ;
+        }
+    }
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * operations on KEncFileHeader
+ *
+ * The header only needs to be read and validated or written  we need not 
+ * reatian within the KEncFile object any information about the header in
+ * the initial version of this file format.
+ */
+
+/* -----
+ * the first eight bytes of the file are two four byte strings
+ *  The first is a common "NCBI"
+ *  The second is the format specific "nenc"
+ */
+static const KEncFileSig KEncFileSignature = "NCBInenc";
+
+
+/* -----
+ * the common constant used throughout the project to check the byte order 
+ * as written by the system which created the file
+ */
+/* enum fails to handle these due to integer overflow */
+
+#define eEncFileByteOrderTag     (0x05031988)
+#define eEncFileByteOrderReverse (0x88190305)
+
+/* ----
+ */
+#define eCurrentVersion        (0x00000002)
+#define eCurrentVersionReverse (0x02000000)
+
+
+static
+const KEncFileHeader const_header
+= { "NCBInenc", eEncFileByteOrderTag, eCurrentVersion };
+
+
+static
+const KEncFileHeader const_bswap_header
+= { "NCBInenc", eEncFileByteOrderReverse, eCurrentVersionReverse };
+
+/* skipping v1 for NCBIkenc */
+static
+const KEncFileHeader const_header_sra
+= { "NCBIsenc", eEncFileByteOrderTag, eCurrentVersion };
+
+
+static
+const KEncFileHeader const_bswap_header_sra
+= { "NCBIsenc", eEncFileByteOrderReverse, eCurrentVersionReverse };
+
+    
+/* ----------
+ * HeaderRead
+ *    Read the header of an encrypted file and validate it.
+ *
+ * We only allow a missing header for an empty file opened for update
+ */
+static
+rc_t KEncFileHeaderRead (KEncFile * self)
+{
+    KEncFileHeader header;
+    size_t num_read;
+    rc_t rc;
+
+    assert (self);
+
+    rc = KEncFileBufferRead (self, 0, &header, sizeof (header), &num_read);
+    if (rc)
+        LOGERR (klogErr, rc, "error reading encrypted file header");
+
+    else if ((num_read == 0) && (self->dad.write_enabled))
+    {
+        /* only allow read to fail with zero length if opened with write */
+        self->version = eCurrentVersion;
+        self->bswap = false;
+        self->enc_size = 0; /* redundant? */
+        self->dec_size = 0; /* redundant? */
+    }
+    else if (num_read != sizeof (header))
+    {
+        rc = RC (rcFS, rcFile, rcConstructing, rcHeader, rcTooShort);
+        PLOGERR (klogErr,
+                 (klogErr, rc, "error reading full header of encrypted "
+                  "file  wanted '$(S)' got '$(N); bytes read", "S=%u,N=%u",
+                  sizeof (header), num_read));
+    }
+    else
+    {
+        rc_t orc;
+
+        if (memcmp (header.file_sig, const_header.file_sig,
+                     sizeof (header.file_sig)) == 0)
+            self->sra = false;
+        else if (memcmp (header.file_sig, const_header_sra.file_sig,
+                         sizeof (header.file_sig)) == 0)
+            self->sra = true;
+        else
+        {
+            rc = RC (rcFS, rcFile, rcConstructing, rcHeader, rcInvalid);
+            LOGERR (klogErr, rc, "file signature not correct for encrypted file");
+        }
+
+        switch (header.byte_order)
+        {
+        case eEncFileByteOrderTag:
+            self->bswap = false;
+            self->version = header.version;
+            break;
+
+        case eEncFileByteOrderReverse:
+            self->bswap = true;
+
+            /* assert for the right bswap call */
+            assert (sizeof (self->version) == 4);
+
+            self->version = bswap_32 (header.version);
+            break;
+
+        default:
+            orc = RC (rcFS, rcFile, rcConstructing, rcByteOrder, rcInvalid);
+            PLOGERR (klogErr, (klogErr, rc, "invalid byte order flag '$(F); in "
+                               "encrypted file header", "F=%X",
+                               header.byte_order));
+            if (rc == 0)
+                rc = orc;
+            break;
+        }
+
+        if ((self->version > eCurrentVersion) || (self->version == 0))
+        {
+            orc = RC (rcFS, rcFile, rcConstructing, rcHeader, rcBadVersion);
+            PLOGERR (klogErr, (klogErr, orc, "can not decrypt version '$(V)'",
+                               "V=%u", header.version));
+            if (rc == 0)
+                rc = orc;
+        }
+        if (rc == 0)
+            self->has_header = true;
+    }
+    return rc;
+}
+
+
+/* -----
+ * HeaderWrite
+ */
+#ifndef SENC_IS_NENC_FOR_WRITER
+#define SENC_IS_NENC_FOR_WRITER 1
+#endif
+
+static
+rc_t KEncFileHeaderWrite (KEncFile * self)
+{
+    rc_t rc;
+    size_t num_writ;
+    const KEncFileHeader * head;
+
+#if SENC_IS_NENC_FOR_WRITER
+    head = self->sra 
+        ? (self->bswap ? &const_bswap_header_sra : &const_header_sra)
+        : (self->bswap ? &const_bswap_header : &const_header);
+#else
+    head = self->bswap ? &const_bswap_header : &const_header;
+#endif
+
+    rc = KEncFileBufferWrite (self, 0, head, sizeof * head, &num_writ);
+    if (rc)
+        LOGERR (klogErr, rc, "Failed to write encrypted file header");
+
+    else
+        /* forced upgrade by writing the header */
+        self->version = eCurrentVersion;
+
+    if (rc == 0)
+        self->has_header = true;
+
+    return rc;
+}
+
+LIB_EXPORT rc_t CC KEncFileWriteHeader_v2  (KFile * self)
+{
+    if (self == NULL)
+        return RC (rcKrypto, rcFile, rcWriting, rcSelf, rcNull);
+
+    return KEncFileHeaderWrite ((KEncFile*)self);
+}
+
+
+
+/* ----------------------------------------------------------------------
+ * operations on KEncFileFooter
+ */
+
+/* ----------
+ * Validate
+ * we expect to read a Footer when we expect a Block so we validate in RAM
+ * without a Read
+ *
+ * we're just comparing the values in the footer against expected values
+ */
+static
+rc_t KEncFileFooterValidate (const KEncFile * self, 
+                             const uint64_t block_count,
+                             const uint64_t crc_checksum)
+{
+    rc_t rc1 = 0, rc2 = 0;
+
+    assert (self);
+
+    if (self->foot.block_count != block_count)
+    {
+        rc1 = RC (rcKrypto, rcFile, rcValidating, rcFile, rcCorrupt);
+        LOGERR (klogErr, rc1, "bad block count in encrypted file footer");
+    }
+    /*
+     * crcs should match or the crc should be 0 and the version is 1
+     */
+    if ((self->foot.crc_checksum != crc_checksum) &&
+        ((self->version == 1) || (crc_checksum != 0)))
+    {
+        rc2 = RC (rcKrypto, rcFile, rcValidating, rcChecksum, rcCorrupt);
+        LOGERR (klogErr, rc2, "bad crc checksum in encrypted file footer");
+    }
+    return (rc1 ? rc1 : rc2);
+}
+
+
+static __inline__
+void KEncFileFooterSwap (const KEncFile * self, KEncFileFooter * foot)
+{
+    assert (self);
+    assert (foot);
+
+    if (self->bswap)
+    {
+        assert (sizeof (foot->block_count) == 8);
+        foot->block_count = bswap_64 (foot->block_count);
+
+        assert (sizeof (foot->crc_checksum) == 8);
+        foot->crc_checksum = bswap_64 (foot->crc_checksum);
+    }
+}
+
+
+/* ----------
+ * Read
+ * If we know where the footer is we can read it specifically
+ */
+static
+rc_t KEncFileFooterRead (KEncFile * self, const uint64_t pos,
+                         const bool validate)
+{
+    union foot_plus
+    {
+        KEncFileFooter foot;
+        uint8_t bytes [sizeof (KEncFileFooter) + 1];
+    } u;
+    size_t num_read;
+    rc_t rc;
+
+    assert ((self->size_known == true) || (self->size_known == false));
+    assert (((self->size_known == true) &&
+             ((pos + sizeof (u.foot)) == self->enc_size)) ||
+            (pos == self->enc_size));
+
+    /* try to read too much just to validate nothing after the footer */
+    rc = KEncFileBufferRead (self, pos, u.bytes, sizeof u.bytes, &num_read);
+    if (rc)
+        PLOGERR (klogErr, (klogErr, rc, "failed to read encrypted file footer "
+                           "at '$(P)'", "P=%lu", pos));
+
+    else if (num_read == sizeof u.foot)
+    {
+        KEncFileFooterSwap (self, &u.foot);
+
+        if (validate)
+            rc = KEncFileFooterValidate (self, u.foot.block_count,
+                                         u.foot.crc_checksum);
+
+        if (rc == 0)
+        {
+            self->foot.block_count = u.foot.block_count;
+            self->foot.crc_checksum = u.foot.crc_checksum;
+        }
+    }
+    else if (num_read < sizeof u.foot)
+        rc = RC (rcKrypto, rcFile, rcReading, rcSize, rcInsufficient);
+
+    else
+    {
+        assert (num_read > sizeof u.foot);
+        rc = RC (rcKrypto, rcFile, rcReading, rcSize, rcExcessive);
+    }
+
+    return rc;
+}
+
+
+/* ----------
+ * Write
+ * when we write a footer we write from the values in the object.  They
+ * are stored in the same object format as the footer so its very simple
+ */
+static
+rc_t KEncFileFooterWrite (KEncFile * self)
+{
+    KEncFileFooter foot;
+    uint64_t pos;
+    size_t num_writ;
+    rc_t rc;
+
+    if (self->sought)
+    {
+        self->foot.block_count = foot.block_count = 1 + DecryptedPos_to_BlockId (self->dec_size, NULL);
+        foot.crc_checksum = 0;
+    }
+    else
+        memcpy (&foot, &self->foot, sizeof (foot));
+
+    KEncFileFooterSwap (self, &foot);
+
+    if (self->sought)
+        foot.crc_checksum = 0;
+
+    pos = BlockId_to_EncryptedPos (self->foot.block_count);
+
+    assert ((self->size_known == true) || (self->size_known == false));
+
+/*     if (!(((self->size_known == true) && */
+/*              ((pos + sizeof (foot)) == self->enc_size)) || */
+/*           (pos == self->enc_size))); */
+/*     { */
+/*         KOutMsg ("self->foot.block_count %lu\n",self->foot.block_count); */
+/*         KOutMsg ("self->size_known %u\n",self->size_known); */
+/*         KOutMsg ("pos %lu\n",pos); */
+/*         KOutMsg ("sizeof (foot) %zu\n",sizeof (foot)); */
+/*         KOutMsg ("pos + sizeof (foot) %lu\n", pos + sizeof (foot)); */
+/*         KOutMsg ("self->enc_size %lu\n",self->enc_size); */
+/*     } */
+/*     assert (((self->size_known == true) && */
+/*              ((pos + sizeof (foot)) == self->enc_size)) || */
+/*             (pos == self->enc_size)); */
+
+    rc = KEncFileBufferWrite (self, pos, &foot, sizeof (foot),
+                              &num_writ);
+    if (rc == 0)
+    {
+        if (num_writ != sizeof (foot))
+        {
+            rc = RC (rcFS, rcFile, rcWriting, rcFile, rcInsufficient);
+            LOGERR (klogErr, rc, "faled to write correctly sized fotter "
+                    "for encrypted file");
+        }
+        else
+            assert ((pos + sizeof (foot)) == self->enc_size);
+    }
+    return rc;
+}
+
+
+/* ----------
+ * IvecInit
+ *    create the ivec for a given block
+ *    done in a function to ensure decrypt and encrypt use the same code to
+ *    generate this.  Anything used to create this has to be available to
+ *    code that doesn't know the content of the data or the state of the file
+ *    beyond the location of the block with in the file.
+ *
+ *    This is definitely over-kill using the MD5.
+ */
+static __inline__
+void KEncFileIVecInit (const uint64_t block_id, KEncFileIVec * ivec)
+{
+    BufferCalcMD5 (&block_id, sizeof block_id, ivec->ivec);
+}
+
+ 
+/* ----------
+ * BlockEncrypt
+ *
+ * Not thread safe - use of cipher schedules ivec and block key in the ciphers
+ *
+ * If this function were a protected region where only one thread could be in
+ * the body of this function at a time it could be made thread safe.
+ */
+static
+rc_t KEncFileBlockEncrypt (KEncFile * self, KEncFileBlock * d,
+                           KEncFileBlock * e)
+{
+    SHA256State state;
+    uint64_t id;
+    uint16_t valid;
+    uint16_t saved_valid;
+    KEncFileCRC crc;
+    KEncFileIVec ivec;
+    rc_t rc;
+
+    assert (self);
+    assert (d);
+    assert (e);
+
+    /*
+     * First we finish preparing the two ciphers by creating the block
+     * user key out of the first part of the data and the shared Initialization
+     * vector for Chained Block Cipher mode encryption out of the block id
+     * 
+     * create the initialization vector for this block
+     */
+    KEncFileIVecInit (d->id, &ivec);
+
+    /*
+     * set the ivec for both the master and data block ciphers
+     */
+    rc = KCipherSetEncryptIVec (self->ciphers.master, &ivec);
+    if (rc)
+        return rc;
+
+    rc = KCipherSetEncryptIVec (self->ciphers.block, &ivec);
+    if (rc)
+        return rc;
+
+    /*
+     * create the block user key out of the first 4kb of data and the block id 
+     */
+    saved_valid = valid = d->u.valid;
+    id = d->id;
+
+    SHA256StateInit (&state);
+    SHA256StateAppend (&state, d->data, 
+                       valid > 4096 ? 4096 : valid);
+    SHA256StateAppend (&state, &id, sizeof (id));
+    SHA256StateFinish (&state, d->key);
+        
+    /*
+     * create the block key schedule out of the block user key
+     */
+    rc = KCipherSetEncryptKey (self->ciphers.block, d->key, sizeof d->key);
+    if (rc)
+        return rc;
+
+    /* 
+     * Salt the block using the randomish user key to randomly select
+     * data from the valid data.
+     *
+     * This will cover the data portion of the block past the last valid
+     * byte.
+     *
+     * NOTE we are accessing a byte array as a word array. COuld be trouble
+     *      on some archaic processors such as the MC68000 family.
+     *
+     * NOTE we are using the array named data to access data beyond it's end
+     *      based on knowledge of the structure of the KEncFileBlock.
+     */
+    {
+        uint16_t * pw;
+        unsigned int windex;
+        unsigned int rindex;
+        size_t bindex;
+
+        pw = (uint16_t*)d->key;
+        windex = 0;
+
+        for (bindex = valid;
+             bindex < sizeof d->data + sizeof d->u; 
+             ++ bindex)
+        {
+            /* this goes beyond the end of the data array by design */
+            rindex = (size_t)pw[windex];
+            rindex %= bindex;
+
+            d->data[bindex] = d->data[rindex];
+        
+            ++rindex;
+            if (rindex >= sizeof self->block.key / sizeof *pw)
+                rindex = 0;
+        }
+    }
+
+    /* 
+     * If we are modifying a block created on a system with a different default
+     * Endian choice we'll need to byte swap the block id and the block valid
+     * count
+     */
+    if (self->bswap)
+    {
+        assert (sizeof id == 8);
+        id = bswap_64 (id);
+
+        assert (sizeof (valid = 2));
+        valid = bswap_16 (valid);
+    }
+
+    /* is this a bswap problem? */
+    if (saved_valid == sizeof d->data)
+        d->u.valid |= valid;
+    else
+        d->u.valid = valid;
+
+    e->id = id;
+
+    /* 
+     * encrypt the block user key into the buffer
+     */
+#if 0
+    {
+        unsigned iii;
+        KOutMsg ("v2 decrypted key %lu\n", d->id);
+        for (iii = 0; iii < sizeof (d->key); +++ iii) 
+            KOutMsg ("%2.2x ", d->key[iii]);
+        KOutMsg ("\n");
+    }
+#endif
+    rc = KCipherEncryptCBC (self->ciphers.master, d->key, e->key,
+                            sizeof (d->key) / sizeof (ivec));
+    if (rc)
+        return rc;
+#if 0
+    {
+        unsigned iii;
+        KOutMsg ("v2 encrypted key\n");
+        for (iii = 0; iii < sizeof (e->key); +++ iii) 
+            KOutMsg ("%2.2x ", e->key[iii]);
+        KOutMsg ("\n");
+    }
+#endif
+    /*
+     * encrypt the data, offset and valid values
+     */
+    rc = KCipherEncryptCBC (self->ciphers.block, 
+                            d->data, e->data,
+                            (sizeof d->data + sizeof d->u) / sizeof (ivec));
+    if (rc)
+        return rc;
+
+    d->u.valid = saved_valid;
+
+    crc = CRC32 (0, e, (char*)(&e->crc)-(char*)e);
+
+    self->block.crc = crc;
+
+    if (self->bswap)
+    {
+        assert (sizeof crc == 4);
+        crc = bswap_32 (crc);
+    }
+    e->crc_copy = e->crc = crc;
+
+/*     KOutMsg ("%s: %lu %lu %lu ", __func__, self->foot.block_count, self->foot.crc_checksum,self->block.id); */
+    if (self->foot.block_count <= self->block.id)
+        self->foot.block_count = self->block.id + 1;
+
+    if (!self->sought)
+        self->foot.crc_checksum += crc;
+
+/*     KOutMsg ("%lu %lu\n", __func__, self->foot.block_count, self->foot.crc_checksum); */
+
+    return 0;
+}
+
+
+/* ----------
+ * BlockDecrypt
+ *   decrypt decrypts the data from a KEncFileBlock into the KEncFileBlock
+ *   in the KEncFile object
+ *
+ * Not thread safe - use of cipher schedules ivec and block key in the ciphers
+ *
+ * If this function were a protected region where only one thread could be in
+ * the body of this function at a time it could be made thread safe.
+ */
+static
+rc_t KEncFileBlockDecrypt (KEncFile * self, KEncFileBlockId bid,
+                           const KEncFileBlock * e, KEncFileBlock * d)
+{
+    KEncFileIVec ivec;
+    rc_t rc;
+
+    d->id = e->id;
+
+    /* create the initialization vector for this block */
+    KEncFileIVecInit (bid, &ivec);
+
+    /*
+     * set the ivec for both the master and data block ciphers
+     */
+    rc = KCipherSetDecryptIVec (self->ciphers.master, &ivec);
+    if (rc)
+        return rc;
+
+    rc = KCipherSetDecryptIVec (self->ciphers.block, &ivec);
+    if (rc)
+        return rc;
+
+    /* 
+     * decrypt the block key and initial vector using the user key and 
+     * the computer ivec
+     */
+    rc = KCipherDecryptCBC (self->ciphers.master, e->key, d->key,
+                            (sizeof e->key) / sizeof ivec);
+    if (rc)
+        return rc;
+
+    /* 
+     * now create the AES key for the block from the newly decrypted 
+     * block key
+     */
+    rc = KCipherSetDecryptKey (self->ciphers.block, d->key,
+                               sizeof d->key);
+    if (rc)
+        return rc;
+
+    rc = KCipherDecryptCBC (self->ciphers.block, e->data, d->data,
+                            (sizeof e->data + sizeof e->u) / sizeof ivec);
+    if (rc)
+        return rc;
+
+    if (self->bswap)
+    {
+        assert (sizeof d->u.valid == 2);
+        d->u.valid = bswap_16 (d->u.valid);
+    }
+
+    if (d->u.valid >= sizeof d->data)
+        d->u.valid = sizeof d->data;
+    else
+        memset (d->data + d->u.valid, 0, sizeof d->data - d->u.valid);
+
+    return rc;
+}
+
+
+/*
+ * if not decrypting block can be NULL
+ */
+
+/*
+  TBD: figure out rational way to handle bad password making blocks look really weird
+  If we have one that looks like a partial but isn't the last block -what do we do?
+*/
+
+static
+rc_t KEncFileBlockRead (KEncFile * self, KEncFileBlock * block, 
+                        KEncFileBlockId block_id, bool validate)
+{
+    union
+    {
+        KEncFileBlock b;
+        KEncFileFooter f;
+    } u;
+    size_t num_read;
+    uint64_t epos, dpos;
+    rc_t vrc, rc = 0;
+    bool missing;
+
+    assert (self);
+    assert ((validate == false) || (validate == true));
+    /* we should be decrypting or validating - maybe both */
+    assert ((block != NULL) || (validate == true));
+
+    /* translate block id into both encrypted and decrypted addresses */
+    epos = BlockId_to_EncryptedPos (block_id);
+    dpos = BlockId_to_DecryptedPos (block_id);
+
+    missing = false;
+
+    /* clear out target block */
+    if (block != NULL)
+        memset (block, 0, sizeof * block);
+
+    rc = KEncFileBufferRead (self, epos, &u.b, sizeof u.b, &num_read);
+    if (rc)
+    {
+        PLOGERR (klogErr, (klogErr, rc, "Failure to read block '$(B)' at '$(E)'"
+                           " in encrypted file decrypted at '$(D)",
+                           "B=%lu,E=%lu,D=%lu", block_id, epos, dpos));
+    }
+    else
+    {
+        switch (num_read)
+        {
+        case 0:
+            self->eof = true;
+            /* ain't got no block here */
+            break;
+
+        default:
+            /* Invalid size */
+            rc = RC (rcKrypto, rcFile, rcReading, rcBuffer, rcInsufficient);
+            PLOGERR (klogErr, (klogErr, rc, "Failure to read full block '$(B)' "
+                               "at '$(E)' in encrypted file decrypted at '$(D)",
+                               "B=%lu,E=%lu,D=%lu", block_id, epos, dpos));
+            break;
+
+        case sizeof (u.f):
+            /* footer */
+            if (validate) /* validate before checking as missing */
+            {
+                KEncFileFooterSwap (self, &u.f);
+
+                if (u.f.block_count != block_id)
+                {
+                    vrc = RC (rcKrypto, rcFile, rcValidating, rcSize,
+                              rcIncorrect);
+                    PLOGERR (klogErr,  (klogErr, vrc, "read footer block count "
+                                        "'$(B)' does not match actual block "
+                                        "count '$(A)'", "B=%lu,A=%lu",
+                                        u.f.block_count, block_id));
+                    if ( rc == 0 )
+                        rc = vrc;
+                }
+                vrc = KEncFileFooterValidate (self, u.f.block_count,
+                                              u.f.crc_checksum);
+
+#if 1
+                if ( rc == 0 )
+                    rc = vrc;
+#else
+                /* what is the significance of a NULL block? */
+                if (block == NULL)
+                    rc = vrc;
+#endif
+            }
+
+            /* is it a "missing" footer? */
+            /* or if the footer appears invalid - make it "valid" */
+            if (((missing = BufferAllZero(&u.f, sizeof u.f)) == true) ||
+                (self->foot.block_count != block_id))
+            {
+/*                 self->foot.block_count = block_id; */
+                self->foot.crc_checksum = 0;
+            }
+
+            /* force some values though they might already be known */
+            self->enc_size = epos + sizeof u.f;
+            self->size_known = true;
+            self->dec_size = dpos;
+            self->eof = true;
+            break;
+
+        case sizeof (u.b):
+            /* block */
+            self->eof = false;
+            /* is it a "missing" block? */
+            if ((missing = BufferAllZero(&u.b, sizeof u.b)) == true)
+            {
+                if (validate)
+                {
+                    vrc = RC (rcKrypto, rcFile, rcValidating,
+                                   rcData, rcNull);
+
+                    PLOGERR (klogErr, (klogErr, vrc, "read missing block at "
+                                       "block number '$(I)' encrypted position "
+                                       "$(E) decrypted postion $(D)",
+                                       "I=%lu,E=%lu,D=%lu", block_id, epos,
+                                       dpos));
+                    if ( rc == 0 )
+                        rc = vrc;
+                }
+                u.b.id = block_id;
+                u.b.u.valid = sizeof u.b.data;
+
+                /* if we can only learn of the size by reading and are thus scanning
+                 * through the current decrypt position must be the current known
+                 * decrypted side size
+                 */
+                if (!self->size_known)
+                {
+                    assert (dpos == self->dec_size);
+                    self->dec_size = dpos + sizeof u.b.data;
+                }
+                /*
+                 * if we know the decrypted size and it is less than what we
+                 * read, adjust the valid.  BUT this must not be for the block read
+                 * for the last block to know the decrypted size. A chicken and egg
+                 * problem.
+                 */
+                else if ((self->dec_size >= dpos) &&
+                         (self->dec_size < dpos + sizeof u.b.data))
+                    u.b.u.valid  = (uint16_t)(self->dec_size - dpos);
+            }
+
+            /* we read a full block that wasn't all zeroes */
+            else
+            {
+                /* since we've chosen not to standardize the file format byte ordering */
+                if (self->bswap)
+                {
+                    assert (sizeof u.b.crc == 4);
+                    u.b.crc = bswap_32 (u.b.crc);
+                    u.b.crc_copy = bswap_32 (u.b.crc_copy);
+
+                    assert (sizeof u.b.id == 8);
+                    u.b.id = bswap_64 (u.b.id);
+                }
+
+                if (validate)
+                {
+                    uint32_t crc;
+
+                    if (block_id != u.b.id)
+                    {
+                        vrc = RC (rcKrypto, rcFile, rcValidating, rcIndex,
+                                  rcIncorrect);
+                        PLOGERR (klogErr, (klogErr, vrc, "error validating id "
+                                           "for block '$(BID)' is not $(C2)", 
+                                           "BID=%lu,C2=%lu", block_id, u.b.id));
+                        if ( rc == 0 )
+                            rc = vrc;
+                    }
+
+                    crc = CRC32 (0, &u.b, (char*)&u.b.crc - (char*)&u.b);
+
+                    if (crc != u.b.crc)
+                    {
+                        vrc = RC (rcKrypto, rcFile, rcValidating, rcCrc, rcCorrupt);
+                        PLOGERR (klogErr,
+                                 (klogErr,
+                                  vrc,
+                                  "error validating crc for block '$(BID)' $(C1) is not $(C2)", 
+                                  "BID=%lu,C1=0x%X,C2=0x%X", block_id,
+                                  crc, u.b.crc));
+                        if ( rc == 0 )
+                            rc = vrc;
+                    }
+                    if (crc != u.b.crc_copy)
+                    {
+                        vrc = RC (rcKrypto, rcFile, rcValidating, rcCrc, rcCorrupt);
+                        PLOGERR (klogErr,
+                                 (klogErr,
+                                  vrc,
+                                  "error validating crc_copy for block '$(BID)' $(C1) is not $(C2)", 
+                                  "BID=%lu,C1=0x%X,C2=0x%X", block_id,
+                                  crc, u.b.crc_copy));
+                        if ( rc == 0 )
+                            rc = vrc;
+                    }
+                }
+            }
+            if (self->sought == false)
+            {
+                if (block_id == 0)
+                {
+                    self->foot.block_count = 1;
+                    self->foot.crc_checksum = u.b.crc;
+                }
+                else
+                {
+                    ++self->foot.block_count;
+                    self->foot.crc_checksum += u.b.crc;
+                }
+            }
+
+            if (block != NULL)
+            {
+                if (missing)
+                {
+                    if (self->dad.write_enabled == false)
+                        rc = RC (rcKrypto, rcFile, rcReading, rcData, rcIncomplete);
+                    else
+                    {
+                        memcpy (block, &u.b, sizeof u.b);
+                        rc = 0;
+                    }
+                }
+                else
+                {
+                    rc = KEncFileBlockDecrypt (self, block_id, &u.b, block);
+                    if (rc == 0)
+                    {
+                        if (block_id == 0)
+                        {
+                            rc_t sra = KFileIsSRA ((const char *)block->data, block->u.valid);
+                            self->sra =  (sra == 0);
+                        }
+
+                        if (!self->size_known)
+                        {
+                            assert (dpos == self->dec_size);
+                            self->dec_size = dpos + sizeof u.b.u.valid;
+                            if (u.b.u.valid != sizeof u.b.data)
+                            {
+                                self->size_known = true;
+                                self->enc_size = epos + sizeof u.b + sizeof self->foot;
+                            }
+                        }
+                    }
+                }
+            }
+            break;
+        }
+    }
+    return rc;
+}
+
+
+/*
+ * Take a dirty block, encrypt it and write it to the backing file
+ */
+static
+rc_t KEncFileBlockFlush (KEncFile * self, KEncFileBlock * dec_block)
+{
+    rc_t rc = 0;
+
+    assert (self);
+    assert (dec_block);
+
+
+    if (dec_block->id == 0)
+    {
+        rc = KFileIsSRA ((const char *)(dec_block->data), sizeof (KSraHeader));
+
+        /* we wait ALL the way until we try to flush the first block before we set
+         * the sra flag for write only files.
+         * we get it when we read the first block otherwise.
+         */
+        if (self->sra != (rc == 0))
+        {
+            self->sra = (rc == 0);
+            self->has_header = false;
+        }
+    }
+    if ((dec_block->id == 0) || (self->seekable))
+    {
+        if (!self->has_header)
+        {
+            if (!self->swarm)
+            {
+                rc = KEncFileHeaderWrite (self);
+                if (rc)
+                    return rc;
+            }
+            else if (dec_block->id == 0)
+                self->enc_size = sizeof (KEncFileHeader);
+        }
+    }
+
+/*     if (self->dirty) */
+    {
+        KEncFileBlock enc_block;
+
+        rc = KEncFileBlockEncrypt (self, dec_block, &enc_block);
+        if (rc == 0)
+        {
+            KEncFileBlockId block_id;
+            uint64_t pos;
+            size_t num_writ;
+
+            block_id = dec_block->id;
+
+            pos = BlockId_to_EncryptedPos (block_id);
+
+            rc = KEncFileBufferWrite (self, pos, &enc_block, sizeof enc_block,
+                                      &num_writ);
+
+            if (rc)
+                PLOGERR (klogErr, (klogErr, rc,
+                                   "error writing encrypted block '$(B)'",
+                                   "B=%lu", block_id));
+
+            else if (num_writ != sizeof enc_block)
+            {
+                rc = RC (rcKrypto, rcFile, rcWriting, rcBuffer, rcInsufficient);
+                PLOGERR (klogErr, (klogErr, rc, "error writing encrypted block "
+                                   "'$(B)' wrote '$(Z)' not '$(Y)'",
+                                   "B=%lu, Z=%zu", block_id, num_writ,
+                                   sizeof enc_block));
+            }
+            else
+                self->dirty = false;
+        }
+    }
+
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Interface Functions
+ *
+ * Destroy
+ *
+ */
+static
+rc_t CC KEncFileDestroy (KEncFile *self)
+{
+    rc_t rc1 = 0;
+    rc_t rc2 = 0;
+    rc_t rc3 = 0;
+    rc_t rc4 = 0;
+    rc_t rc5 = 0;
+    rc_t rc6 = 0;
+
+    assert (self);
+
+    if (self->dad.write_enabled)
+    {
+        /*
+         * write the header if we've written nothing to an empty file
+         * or if we've written something which will mean a change to v2
+         * of the encrypted file format
+         */
+        if ((self->enc_size == 0) || (self->seekable && self->changed) ||
+            (self->has_header == false))
+            rc1 = KEncFileHeaderWrite (self);
+
+        /* write any dirty block */
+        if (self->dirty)
+            rc2 = KEncFileBlockFlush (self, &self->block);
+
+        /* [re]write footer */
+        if (self->changed)
+            rc3 = KEncFileFooterWrite (self);
+    }
+    rc4 = KFileRelease (self->encrypted);
+    rc5 = KCipherRelease (self->ciphers.master);
+    rc6 = KCipherRelease (self->ciphers.block);
+
+    free (self);
+    
+    if (rc1)
+        return rc1;
+    if (rc2)
+        return rc2;
+    if (rc3)
+        return rc3;
+    if (rc4)
+        return rc4;
+    if (rc5)
+        return rc5;
+    return rc6;
+}
+
+
+/* ----------------------------------------------------------------------
+ * GetSysFile
+ *  returns an underlying system file object
+ *  and starting offset to contiguous region
+ *  suitable for memory mapping, or NULL if
+ *  no such file is available.
+ *
+ * We do not allow this for read, write or update as you can not memory map the 
+ * unencrypted file in a meaningful way.
+ */
+static
+struct KSysFile *CC KEncFileGetSysFile (const KEncFile *self, uint64_t *offset)
+{
+    assert (self);
+    assert (offset);
+
+    return NULL;
+}
+
+
+/* ----------------------------------------------------------------------
+ * RandomAccess
+ *
+ *  returns 0 if random access, error code otherwise
+ */
+static
+rc_t CC KEncFileRandomAccess (const KEncFile *self)
+{
+    assert (self != NULL);
+    assert ((self->seekable == true) || (self->seekable == false));
+
+    /* we checked for random access in the contructor */
+    if (self->seekable)
+        return 0;
+
+    return RC (rcFS, rcFile, rcUpdating, rcFunction, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * Size
+ *  returns size in bytes of file
+ *
+ *  "size" [ OUT ] - return parameter for file size
+ */
+static
+rc_t CC KEncFileSize (const KEncFile *self, uint64_t *size)
+{
+    if (!self->size_known)
+        return RC (rcKrypto, rcFile, rcAccessing, rcSize, rcUnsupported);
+
+    *size = self->dec_size;
+    return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * SetSize
+ *  sets size in bytes of file
+ *
+ *  "size" [ IN ] - new file size
+ *
+ * This is the size of the decrypted payload not of the encrypted file
+ */
+static
+rc_t KEncFileSetSizeBlockFull (KEncFile *self, uint64_t block_id)
+{
+    if ((self->block.id == block_id) && (self->block.u.valid != 0))
+    {
+        if (self->block.u.valid < sizeof self->block.data)
+        {
+            self->block.u.valid = sizeof self->block.data;
+            self->dirty = true;
+        }
+        else
+            assert (self->block.u.valid  == sizeof self->block.data);
+    }
+    else
+    {
+        KEncFileBlock block;
+        rc_t rc;
+
+        rc = KEncFileBlockRead (self, &block, block_id, false);
+        if (rc)
+            return rc;
+
+/*         if (self->block.u.valid  != sizeof self->block.data) */
+/*         { */
+/*             OUTMSG (("%s: %u %u\n", __func__,self->block.u.valid,sizeof self->block.data)); */
+/*             OUTMSG (("%s: %lu %lu\n", __func__,self->block.id,block_id)); */
+/*         } */
+
+        /* only change block if not "missing" */
+        if (BufferAllZero (&block, sizeof block) == false)
+        {
+            assert (block.id == block_id);
+
+            /* only change if not already full - shouldnt get here if not? */
+            if (block.u.valid < sizeof block.data)
+            {
+                self->changed = self->sought = true;
+                block.u.valid = sizeof block.data;
+
+                rc = KEncFileBlockFlush (self, &block);
+                if (rc)
+                    return rc;
+            }
+            else
+                assert (self->block.u.valid  == sizeof self->block.data);
+        }
+    }
+    return 0;
+}
+
+
+static
+rc_t KEncFileSetSizeBlockPartial (KEncFile *self, uint64_t block_id, uint32_t valid)
+{
+    if ((self->block.id == block_id) && (self->block.u.valid != 0))
+    {
+        if (self->block.u.valid != valid)
+        {
+            self->block.u.valid = valid;
+            self->dirty = true;
+        }
+    }
+    else
+    {
+        KEncFileBlock block;
+        rc_t rc;
+
+        rc = KEncFileBlockRead (self, &block, block_id, false);
+        if (rc)
+            return rc;
+
+        /* only change block if not "missing" */
+        if (BufferAllZero (&block, sizeof block) == false)
+        {
+            assert (block.id == block_id);
+
+            if (block.u.valid != valid)
+            {
+                self->changed = self->sought = true;
+                block.u.valid = valid;
+                
+                rc = KEncFileBlockFlush (self, &block);
+                if (rc)
+                    return rc;
+            }
+        }
+    }
+    return 0;
+}
+
+
+static
+rc_t KEncFileSetSizeInt (KEncFile *self, uint64_t dec_size)
+{
+    uint64_t trim_size;
+    uint64_t enc_size;
+    bool do_size = true;
+
+    rc_t rc = 0;
+
+    /* should we not have been called? */
+    if ((dec_size == self->dec_size) && (self->enc_size != 0))
+        return 0;
+
+    /* if wiping out the whole file */
+    if (dec_size == 0)
+    {
+        trim_size = sizeof (KEncFileHeader);
+        enc_size = (sizeof (KEncFileHeader) + sizeof (KEncFileFooter));
+
+        /* if we did clear out the RAM structures to match */
+        memset (&self->block, 0, sizeof self->block);
+        memset (&self->foot, 0, sizeof self->foot);
+        self->dirty = false;
+        self->size_known = true;
+        self->bswap = false;
+        self->changed = true;
+        self->sought = false;
+        self->has_header = false;
+        self->version = eCurrentVersion;
+    }
+    else
+    {
+        KEncFileBlockId new_bid;    /* block id of new last block */
+        KEncFileBlockId new_fid;    /* block id of new footer / block count */
+        uint32_t        new_doff;   /* bytes into last partial block */
+
+        /*
+         * determine sizes of decrypted virtual file
+         * and encrypted 'real' file
+         */
+        new_fid = new_bid = DecryptedPos_to_BlockId (dec_size, &new_doff);
+        if (new_doff == 0)
+            --new_bid; /* exactly fills a block */
+        else
+            ++new_fid;  /* leaves a partial block */
+    
+        enc_size = BlockId_to_EncryptedPos (new_fid) + sizeof self->foot;
+
+        /* are we starting with an empty file? It's easy if we are */
+        if (self->dec_size == 0)
+        {
+            trim_size = sizeof (KEncFileHeader);
+
+            /* if we did clear out the RAM structures to match */
+            memset (&self->block, 0, sizeof self->block);
+            self->bswap = false;
+            self->changed = true;
+            self->version = eCurrentVersion;
+        }
+        else
+        {
+            KEncFileBlockId old_bid;    /* block id of old last block */
+            KEncFileBlockId old_fid;    /* block id of old footer / block count */
+            uint32_t        old_doff;   /* bytes into last partial block */
+
+            old_fid = old_bid = DecryptedPos_to_BlockId (self->dec_size, &old_doff);
+            if (old_doff == 0)
+                --old_bid; /* exactly fills a block */
+            else
+                ++old_fid;  /* leaves a partial block */
+
+            /* are we only changing the last block? */
+            if (old_bid == new_bid)
+            {
+                assert ((self->dad.read_enabled == false) || (self->enc_size == enc_size));
+
+                if (new_doff == 0)
+                    rc = KEncFileSetSizeBlockFull (self, new_bid);
+                else
+                    rc = KEncFileSetSizeBlockPartial (self, new_bid, new_doff);
+                do_size = false;
+            }
+            else
+            {
+
+                /* truncating the file? */
+                if (dec_size < self->dec_size)
+                {
+                    trim_size = BlockId_to_EncryptedPos (new_fid);
+
+                    /* do we throw away the block in the object? */
+                    if (self->block.id > new_bid)
+                    {
+                        self->dirty = false;
+                        memset (&self->block, 0, sizeof self->block);
+                    }
+
+                    /* we only change the new last block if its now partial */
+                    if (new_doff)
+                        rc = KEncFileSetSizeBlockPartial (self, new_bid, new_doff);
+
+                }
+                /* expanding the file */
+                else
+                {
+                    assert (dec_size > self->dec_size);
+
+                    trim_size = BlockId_to_EncryptedPos (old_fid);
+
+                    /* make old last block a full block if it wasn't already */
+                    if (old_doff != 0)
+                        rc = KEncFileSetSizeBlockFull (self, old_bid);
+                }
+            }
+        }
+    }
+    if (rc == 0)
+    {
+        if (do_size)
+        {
+            rc = KFileSetSize (self->encrypted, trim_size);
+            if (rc)
+                LOGERR (klogErr, rc, "failure to trim size of encrpted file");
+            else
+            {
+                rc = KFileSetSize (self->encrypted, enc_size);
+                if (rc)
+                    LOGERR (klogErr, rc, "failure to file size of encrpted file");
+            }
+        }
+        if (rc == 0)
+        {
+            self->enc_size = enc_size;
+            self->dec_size = dec_size;
+        }
+    }
+    return rc;
+}
+
+
+static
+rc_t CC KEncFileSetSize (KEncFile *self, uint64_t dec_size)
+{
+    assert (self);
+    assert (self->encrypted);
+
+    if (self->dad.write_enabled == false)
+        return RC (rcKrypto, rcFile, rcResizing, rcFile, rcNoPerm);
+
+    if ((self->seekable == false) || (self->size_known == false))
+        return RC(rcKrypto, rcFile, rcAccessing, rcFunction, rcUnsupported);
+
+    /* silently ignore changes in size that don't change the size */
+    if (dec_size == self->dec_size)
+        return 0;
+
+    else
+        return KEncFileSetSizeInt (self, dec_size);
+}
+
+
+/* ----------------------------------------------------------------------
+ * Read
+ *  read file from known position
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ *  "num_read" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually read
+ */
+static
+rc_t CC KEncFileRead (const KEncFile *cself,
+                      uint64_t pos,
+                      void *buffer,
+                      size_t bsize,
+                      size_t *num_read)
+{
+    KEncFile * self = (KEncFile *)cself; /* mutable values */
+    uint64_t max_bid;
+    uint64_t block_id;
+    uint32_t offset;
+    rc_t rc = 0;
+
+    assert (self); /* checked in file.c KFileRead() */
+    /* pos can be 'anything' */
+    assert (buffer); /* checked in file.c KFileRead() */
+    assert (bsize); /* checked in file.c KFileRead() */
+    assert (num_read); /* checked in file.c KFileRead() */
+
+    assert (self->dad.read_enabled);
+    assert (self->encrypted);
+
+    /* do we have a decrypted_size? */
+
+    block_id = DecryptedPos_to_BlockId (pos, &offset);
+
+    switch (self->size_known)
+    {
+    case false:
+
+        max_bid = EncryptedPos_to_BlockId (self->enc_size, NULL, NULL);
+
+        /* if past end of file as we know it so far quick out */
+        if (max_bid <= block_id)
+            return 0;
+        break;
+
+    case true:
+        /* if past end of file quick out */
+        if (pos > self->dec_size)
+            return 0;
+        break;
+
+    default:
+        assert (self->size_known);
+        break;
+    }
+
+    /*
+     * are we on the wrong block?
+     * Or are do we need to read the first block?
+     */
+    if ((block_id != self->block.id) || (self->block.u.valid == 0))
+    {
+        if ((!self->seekable) && (self->block.id + 1 != block_id))
+        {
+            rc = RC (rcFS, rcFile, rcReading, rcOffset, rcIncorrect);
+            PLOGERR (klogErr, (klogErr, rc, "attempt to seek in encryption write at"
+                               " '$(O)' seek to '$(P)'", "O=%lu,P=%lu",
+                               BlockId_to_EncryptedPos(self->block.id), pos));
+        }
+        else
+        {
+            /* flush any dirty block */
+            if (self->dirty)
+            {
+                assert (self->dad.write_enabled);
+                rc = KEncFileBlockFlush (self, &self->block);
+            }
+
+            /* now try to read in a new block */
+            if (rc == 0)
+                rc = KEncFileBlockRead (self, &self->block, block_id, false);
+
+            if (rc == 0)
+            {
+                uint64_t read_max;
+
+                read_max = BlockId_to_DecryptedPos(block_id) + self->block.u.valid;
+                if (self->dec_size < read_max)
+                    self->dec_size = read_max;
+            }
+        }
+    }
+
+    /*
+     * if we are trying to read past the end of the file 
+     * return 0 with nothing read
+     */
+    if ((rc == 0) &&
+        (block_id == self->block.id) &&
+        (offset < self->block.u.valid))
+    {
+        size_t to_copy;
+
+        to_copy = self->block.u.valid - offset;
+        if (to_copy > bsize)
+            to_copy = bsize;
+
+        memmove (buffer, self->block.data + offset, to_copy);
+        *num_read = to_copy;
+    }
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Write
+ *  write file at known position
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ *  "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually written
+ */
+static
+rc_t CC KEncFileWrite (KEncFile *self, uint64_t pos,
+                       const void *buffer, size_t bsize,
+                       size_t *pnum_writ)
+{
+    rc_t rc = 0;
+
+    assert (self);
+    assert (buffer);
+    assert (bsize > 0);
+    assert (pnum_writ);
+
+    assert (self->dad.write_enabled);
+    assert (self->encrypted);
+
+/*     KOutMsg ("+++++\n%s: pos %lu\n",__func__,pos); */
+
+    if (self->dec_size != pos)
+    {
+        /* write only does not allow seeks */
+        if ((!self->dad.read_enabled) && (!self->swarm))
+        {
+            rc = RC (rcFS, rcFile, rcWriting, rcOffset, rcIncorrect);
+            PLOGERR (klogErr, (klogErr, rc, "attempt to seek in encryption write at"
+                               " '$(O)' seek to '$(P)'", "O=%lu,P=%lu",
+                               BlockId_to_EncryptedPos(self->block.id), pos));
+        }
+        else
+            self->sought = true;
+    }
+    if (rc == 0)
+    {
+        uint64_t block_id;
+        uint32_t offset;
+        uint64_t block_max;
+        uint64_t new_size;
+
+        rc = 0;
+        /* Block Id for this write */
+        block_id = DecryptedPos_to_BlockId (pos, &offset);
+
+        block_max = BlockId_to_DecryptedPos (block_id+1);
+
+        new_size = pos + bsize;
+        if (new_size > block_max)
+            bsize = block_max - new_size;
+
+
+        /* is the new position beyond the current file length? */
+        if ((new_size > self->dec_size) && (self->dad.read_enabled) && (!self->swarm))
+        {
+            rc = KEncFileSetSizeInt (self, new_size);
+            if (rc)
+                return rc;
+        }
+
+        /* are we going to a new block? */
+        if ((block_id != self->block.id) || (self->block.u.valid == 0))
+        {
+            /* do we have sometihng to flush first? */
+            if (self->dirty)
+            {
+                assert (self->dad.write_enabled);
+                rc = KEncFileBlockFlush (self, &self->block);
+            }
+
+            if (rc == 0)
+            {
+                /* if we are going to over write the whole block */
+                if ((!self->dad.read_enabled) ||
+                    ((offset == 0) && (bsize >= sizeof (self->block.data))))
+                {
+                    memset (&self->block, 0, sizeof self->block);
+                    self->block.id = block_id;
+                }
+                /* else try to fetch an existing block */
+                else
+                    rc = KEncFileBlockRead (self, &self->block, block_id, false);
+            }
+        }
+
+        if (rc == 0)
+        {
+            /* we are at the right block and ready to write */
+            uint32_t new_valid;
+            size_t to_copy;
+
+            /*
+             * force block id to be right even if fetch was beyond end of 
+             * existing file
+             */
+            self->block.id = block_id;
+
+/*             to_copy = sizeof self->block.data - self->block.u.valid; */
+            to_copy = sizeof self->block.data - offset;
+
+            if (to_copy > bsize)
+                to_copy = bsize;
+
+            memmove (self->block.data + offset, buffer, to_copy);
+            self->dirty = true;
+            *pnum_writ = to_copy;
+
+            new_valid = offset + to_copy;
+            if (new_valid > self->block.u.valid)
+            {
+                uint64_t new_size;
+
+                self->block.u.valid = new_valid;
+
+                new_size = pos + to_copy;
+                if (new_size > self->dec_size)
+                    self->dec_size = new_size;
+            }
+
+            if (self->swarm)
+                rc = KEncFileBlockFlush (self, &self->block);
+
+
+        }
+    }
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Type
+ *  returns a KFileDesc
+ *  not intended to be a content type,
+ *  but rather an implementation class
+ *
+ * Just return what the backing file says...
+ */
+static
+uint32_t CC KEncFileType (const KEncFile *self)
+{
+    assert (self != NULL);
+    assert (self->encrypted != NULL);
+
+    return KFileType (self->encrypted);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KEncFileMake
+ *  create a new file object
+ */
+
+/* ----------
+ * KeysInit
+ */
+static
+rc_t KEncFileCiphersInit (KEncFile * self, const KKey * key, bool read, bool write)
+{
+    KCipherManager * mgr;
+    size_t z;
+    rc_t rc;
+
+    switch ( key->type)
+    {
+    default:
+        return RC (rcKrypto, rcEncryptionKey, rcConstructing, rcParam, rcInvalid);
+
+    case kkeyNone:
+        return RC (rcKrypto, rcEncryptionKey, rcConstructing, rcParam, rcIncorrect);
+
+    case kkeyAES128:
+        z = 128/8; break;
+
+    case kkeyAES192:
+        z = 192/8; break;
+
+    case kkeyAES256:
+        z = 256/8; break;
+    }
+    rc = KCipherManagerMake (&mgr);
+    if (rc == 0)
+    {
+        rc = KCipherManagerMakeCipher (mgr, &self->ciphers.master, kcipher_AES);
+        if (rc == 0)
+        {
+            rc = KCipherManagerMakeCipher (mgr, &self->ciphers.block, kcipher_AES);
+            if (rc == 0)
+            {
+                rc = KCipherSetDecryptKey (self->ciphers.master, key->text, z);
+                if (rc == 0)
+                {
+                    rc = KCipherSetEncryptKey (self->ciphers.master, key->text, z);
+                    if (rc == 0)
+                        goto keep_ciphers;
+                }
+                KCipherRelease (self->ciphers.block);
+                self->ciphers.block = NULL;
+            }
+            KCipherRelease (self->ciphers.master);
+            self->ciphers.master = NULL;
+        }
+    keep_ciphers:
+        KCipherManagerRelease (mgr);
+    }
+    return rc;
+}
+
+
+
+static const KFile_vt_v1 vtKEncFile =
+{
+    /* version */
+    1, 1,
+
+    /* 1.0 */
+    KEncFileDestroy,
+    KEncFileGetSysFile,
+    KEncFileRandomAccess,
+    KEncFileSize,
+    KEncFileSetSize,
+    KEncFileRead,
+    KEncFileWrite,
+    
+    /* 1.1 */
+    KEncFileType
+};
+
+
+static
+rc_t  KEncFileMakeIntValidSize (uint64_t enc_size, bool w)
+{
+
+    if (enc_size == 0)
+    {
+        if (w)
+            return 0;
+    }
+    else
+    {
+        uint64_t min_size = sizeof (KEncFileHeader) + sizeof (KEncFileFooter);
+        uint64_t block_count;
+
+        if (enc_size >= min_size)
+        {
+            block_count = EncryptedPos_to_BlockId (enc_size, NULL, NULL);
+
+            if (enc_size - BlockId_to_EncryptedPos (block_count) == sizeof (KEncFileFooter))
+                return 0;
+        }
+    }
+    return RC (rcKrypto, rcFile, rcConstructing, rcSize, rcIncorrect);
+}
+
+
+/* ----------
+ * MakeInt
+ *    common make for all encryptor/decryptors
+ */
+static
+rc_t KEncFileMakeInt (KEncFile ** pself, KFile * encrypted,
+                      bool r, bool w, bool v, bool s)
+{
+    uint64_t enc_size;
+    rc_t rc = 0, orc;
+    bool seekable;
+    bool size_known;
+
+    assert (pself);
+    assert (encrypted);
+    assert (((r == true) || (r == false)) &&
+            ((w == true) || (w == false)) &&
+            ((v == true) || (v == false)));
+
+    /* must be able to do at elast one of read and write */
+    assert (r || w);
+
+    /* expecting to validate read only right now */
+/*     assert ((v && r && !w) || (!v)); */
+
+    if (w && ! encrypted->write_enabled)
+    {
+        rc = RC (rcKrypto, rcFile, rcConstructing, rcFile, rcReadonly);
+        LOGERR (klogErr, rc, "Can not make a encryptor for a unwritable file");
+    }
+    if (r && ! encrypted->read_enabled)
+    {
+        orc = RC (rcKrypto, rcFile, rcConstructing, rcFile, rcWriteonly);
+        LOGERR (klogErr, orc, "Can not make a decryptor for an unreadable file");
+        if (rc == 0)
+            rc = orc;
+    }
+    if (rc)
+        return rc;
+
+    /* determine whether the original file can tell us the size */
+    rc = KFileSize (encrypted, &enc_size);
+    if (rc == 0)
+        size_known = true;
+
+    else if (GetRCState(rc) == rcUnsupported)
+        size_known = false;
+    
+    else
+        return rc;
+
+    if (!v && size_known)
+    {
+        rc = KEncFileMakeIntValidSize (enc_size, w);
+        if (rc)
+            return rc;
+    }
+
+    /* determine whether the original file allows seeks */
+    rc = KFileRandomAccess (encrypted);
+    if (rc == 0)
+        seekable = true;
+
+    else if (GetRCState(rc) == rcUnsupported)
+        seekable = false;
+
+    else
+    {
+        LOGERR (klogErr, rc, "error checking random access building "
+                "encrypted file");
+        return rc;
+    }
+
+    /* We are currently only supporting update on seekable and size_known original files */
+    if (r && w && ((!seekable) || (!size_known)))
+    {
+        rc = RC (rcKrypto, rcFile, rcConstructing, rcFile, rcIncorrect);
+        LOGERR (klogErr, rc, "encryptor/decryptor requires seek and size ability");
+        return rc;
+    }
+
+    rc = KFileAddRef (encrypted);
+    if (rc)
+    {
+        LOGERR (klogErr, rc, "Could not add reference to encrypted file");
+        return rc;
+    }
+    else
+    {
+        KEncFile * self;
+
+        /* allocate and zero out an object since we want much of it to be zeroed */
+        self = calloc (1, sizeof *self);
+        if (self == NULL)
+        {
+            rc = RC (rcFS, rcFile, rcConstructing, rcMemory, rcExhausted);
+            LOGERR (klogSys, rc,
+                    "out of memory creating encryptor and/or decryptor");
+        }
+        else
+        {
+            /* all KFiles get this initialization */
+            rc = KFileInit (&self->dad, (const KFile_vt*)&vtKEncFile, "KEncFile", "no-name", r, w);
+            if (rc)
+                LOGERR (klogInt, rc, "error with init for encrypted file");
+
+            else
+            {
+                self->encrypted = encrypted;
+                self->swarm = s;
+
+                /* write only or empty updatable */
+                if ((!r) || (w && size_known && (enc_size == 0)))
+                {
+                    /* dummy size to make the SetSizeInt work */
+                    self->enc_size = enc_size;
+                    rc = KEncFileSetSizeInt (self, 0);
+                    self->seekable = r && seekable;
+                }
+                else
+                {
+                    self->enc_size = enc_size;
+                    self->seekable = seekable;
+                    self->size_known = size_known;
+                    rc = KEncFileHeaderRead (self);
+                }
+                if (rc == 0)
+                {
+                    *pself = self;
+                    return 0;
+                }
+            }
+            free (self);
+        }
+        KFileRelease (encrypted);
+    }
+    return rc;
+}
+
+
+static
+rc_t KEncFileMakeSize (KEncFile *self)
+{
+    KEncFileBlockId fid;
+    rc_t rc;
+
+    assert (self->seekable);
+
+    /*
+     * turn the encrypted size into a block/offset
+     * the offset should be 0 for a missing footer
+     * or the size of a footer
+     */
+    fid = EncryptedPos_to_BlockId (self->enc_size, NULL, NULL);
+
+    assert (BlockId_to_EncryptedPos(fid) + sizeof (self->foot) == self->enc_size);
+
+    if (fid == 0)
+        self->dec_size = 0;
+
+    else
+    {
+        KEncFileBlockId bid = fid - 1;
+        KEncFileBlock b;
+
+        /*
+         * not calling this a seek as its not reading a data block
+         * out of order that will be modified
+         */
+        rc = KEncFileBlockRead (self, &b, bid, false);
+        if (rc)
+            return rc;
+        else
+        {
+            if (BufferAllZero(&b, sizeof b) == true)
+                self->dec_size = BlockId_to_DecryptedPos (bid) + 
+                    sizeof self->block.data;
+
+            else
+                self->dec_size = BlockId_to_DecryptedPos (bid) + b.u.valid;
+        }
+    }
+    self->size_known = true;
+    return 0;
+}
+
+
+/* ----------
+ * MakeCmn
+ * common parameter validation for all encryptor/decryptors
+ */
+static
+rc_t KEncFileMakeCmn (KEncFile ** pself, KFile * encrypted, const KKey * key,
+                      bool r, bool w, bool s)
+{
+    rc_t rc = 0, orc;
+
+    assert (((r == true)||(r == false))&&((w == true)||(w == false)));
+    assert (w || r);
+
+    if (pself == NULL)
+    {
+        rc = RC (rcKrypto, rcFile, rcConstructing, rcSelf, rcNull);
+        LOGERR (klogErr, rc,
+                "pointer to self NULL when creating "
+                "an encryptor/decryptor");
+    }
+    else
+        *pself = NULL;
+
+    if (encrypted == NULL)
+    {
+        orc = RC (rcFS, rcFile, rcConstructing, rcParam, rcNull);
+        LOGERR (klogErr, orc, 
+                "encrypted file not readable when creating "
+                "an encryptor/decryptor");
+        if (rc == 0)
+            rc = orc;
+    }
+
+    if (key == NULL)
+    {
+        orc = RC (rcFS, rcFile, rcConstructing, rcParam, rcNull);
+        LOGERR (klogErr, orc, 
+                "key not supplied when creating an encryptor/decryptor");
+        if (rc == 0)
+            rc = orc;
+    }
+
+    CRC32Init();    /* likely to be called way too often */
+
+    switch (key->type)
+    {
+    default:
+        orc = RC (rcFS, rcFile, rcConstructing, rcParam, rcInvalid);
+        PLOGERR (klogErr,
+                 (klogErr, orc, "invalid key type '$(T)' should be "
+                  "kkeyAES128(1), kkeyAES192(2) or kkeyAES256(3)",
+                  "T=%u", key->type));
+        if (rc == 0)
+            rc = orc;
+        break;
+
+    case kkeyAES128:
+    case kkeyAES192:
+    case kkeyAES256:
+        break;
+    }
+    if (rc == 0)
+    {
+        KEncFile * self;
+
+        assert ((r == true) || (r == false));
+        assert ((w == true) || (w == false));
+
+        rc = KEncFileMakeInt (&self, encrypted, r, w, false, s);
+        if (rc == 0)
+        {
+            rc = KEncFileCiphersInit (self, key, r, w);
+            if (rc == 0)
+            {
+                
+                if (self->seekable && self->size_known)
+                    rc = KEncFileMakeSize (self);
+
+                if (rc == 0)
+                {
+                    *pself = self;
+                    return 0;
+                }
+            }
+            KFileRelease (&self->dad);
+        }
+    }
+    return rc;
+}
+
+
+/* ----------
+ * Read mode is fully seekable if the underlying KFile is seekable some
+ * integrity checking will not be performed in allowing this seeking.
+ */
+LIB_EXPORT rc_t CC KEncFileMakeRead_v2 (const KFile ** pself, 
+                                        const KFile * encrypted,
+                                        const KKey * key)
+{
+    KEncFile * self;
+    rc_t rc;
+
+    /*
+     * casting encrypted dowsn't actually make it writable
+     * it just lets us use a common constructor
+     */
+    rc = KEncFileMakeCmn (&self, (KFile *)encrypted, key, true, false, false);
+    if (rc)
+        LOGERR (klogErr, rc, "error constructing decryptor");
+
+    else
+        *pself = &self->dad;
+
+    return rc;
+}
+
+
+/* ----------
+ * Write mode encrypted file can only be written straight through form the
+ * first byte to the last.
+ *
+ * Existing content is lost.
+ */
+LIB_EXPORT rc_t CC KEncFileMakeWrite_v2 (KFile ** pself, 
+                                         KFile * encrypted,
+                                         const KKey * key)
+{
+    KEncFile * self;
+    rc_t rc;
+
+    rc = KEncFileMakeCmn (&self, encrypted, key, false, true, false);
+    if (rc)
+        LOGERR (klogErr, rc, "error constructing encryptor");
+
+    else
+        *pself = &self->dad;
+
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC KEncFileMakeUpdate_v2 (KFile ** pself, 
+                                          KFile * encrypted,
+                                          const KKey * key)
+{
+    KEncFile * self;
+    rc_t rc;
+
+/*     static int count = 0; */
+
+/*     KOutMsg ("%s: %d\n",__func__,++count); */
+
+    rc = KEncFileMakeCmn (&self, (KFile *)encrypted, key, true, true, false);
+    if (rc)
+        LOGERR (klogErr, rc, "error constructing encryptor/decryptor");
+
+    else
+        *pself = &self->dad;
+
+    return rc;
+}
+
+
+/* ----------
+ * Swarm mode encrypted file can be writtenout of order but the footer is not
+ * handled automatically
+ */
+LIB_EXPORT rc_t CC KEncFileMakeBlock_v2 (KFile ** pself, 
+                                         KFile * encrypted,
+                                         const KKey * key)
+{
+    KEncFile * self;
+    rc_t rc;
+
+/*     static int count = 0; */
+
+/*     KOutMsg ("%s: %d\n",__func__,++count); */
+
+    rc = KEncFileMakeCmn (&self, (KFile *)encrypted, key, false, true, true);
+    if (rc)
+        LOGERR (klogErr, rc, "error constructing encryptor/decryptor");
+
+    else
+        *pself = &self->dad;
+
+    return rc;
+}
+
+
+/* ----------
+ * Validate mode is useful only for the KFileEncValidate function
+ */
+static
+rc_t KEncFileMakeValidate (KEncFile ** pself, const KFile * encrypted)
+{
+    KEncFile * self;
+    rc_t rc;
+
+    assert (pself);
+    assert (encrypted);
+
+    rc = KEncFileMakeInt (&self, (KFile*)encrypted, true, false, true, false);
+    if (rc)
+        LOGERR (klogErr, rc, "error making KEncFile");
+    else
+    {
+        rc = KEncFileHeaderRead (self);
+        if (rc)
+            LOGERR (klogErr, rc, "error reading encrypted file header");
+        else
+        {
+            *pself = self;
+            return 0;
+        }
+    }
+    *pself = NULL;
+    return rc;
+}
+
+
+/* ======================================================================
+ * Interface extensions
+ */
+
+
+/* ----------
+ * Validate mode can not be read or written.
+ * Upon open the whole file is read from begining to end and all CRC
+ * and other integrity checks are performed immedaitely
+ *
+ * This will fail if the file being tested is not "at position 0" and can not
+ * be sought back to 0.
+ */
+
+
+
+LIB_EXPORT rc_t CC KEncFileValidate_v2 (const KFile * encrypted)
+{
+    KEncFile * file;
+    rc_t rc = 0;
+
+    /* fail if a NULL parameter: can't validate all addresses */
+    if (encrypted == NULL)
+    {
+        rc = RC (rcKrypto, rcFile, rcValidating, rcParam, rcNull);
+        LOGERR (klogErr, rc, "encrypted file was null when trying to validate");
+        return rc;
+    }
+
+    /* file header is validated within the call to Make Validate */
+    rc = KEncFileMakeValidate (&file, encrypted);
+    if (rc)
+        LOGERR (klogErr, rc,
+                "unable to validate encrypted file due to "
+                "inability to open as encrypted file");
+    else
+    {
+        uint64_t pos;             /* position within the encrypted file */
+        uint64_t block_count = 0; /* how many blocks have we read */
+
+        /* loop through all data blocks */
+        pos = sizeof (KEncFileHeader);
+        for (block_count = 0; ; ++block_count)
+        {
+            rc_t vrc;
+            STSMSG (2, ("reading block '%u' at '%lu'", block_count,
+                        BlockId_to_EncryptedPos(block_count)));
+           
+            vrc = KEncFileBlockRead (file, NULL, block_count, true);
+            if (vrc != 0)
+            {
+                if ( rc == 0 )
+                    rc = vrc;
+                if ( GetRCContext( vrc ) != rcValidating )
+                {
+                    STSMSG (2, ("read error at block '%u'", block_count));
+                    break;
+                }
+            }
+            if (file->eof)
+            {
+                STSMSG (2, ("block '%u' was end", block_count));
+                break;
+            }
+            pos += sizeof (KEncFileData);
+        }   
+        KFileRelease (&file->dad);
+    }
+    return (rc);
+}
+
+
+LIB_EXPORT rc_t CC KEncFileHeaderWrite_v2 (KFile * dad)
+{
+    rc_t rc;
+
+    if (dad->vt != (const KFile_vt*)&vtKEncFile)
+    {
+        rc = RC (rcKrypto, rcFile, rcWriting, rcType, rcIncorrect);
+        LOGERR (klogErr, rc, "file not an encryptor requested writing header");
+    }
+    else
+    {
+        KEncFile * self;
+        self = (KEncFile*)dad;
+
+        rc = KEncFileHeaderWrite (self);
+    }
+    return rc;
+}
+
+LIB_EXPORT rc_t CC KEncFileFooterWrite_v2 (KFile * dad)
+{
+    rc_t rc;
+
+    if (dad->vt != (const KFile_vt*)&vtKEncFile)
+    {
+        rc = RC (rcKrypto, rcFile, rcWriting, rcType, rcIncorrect);
+        LOGERR (klogErr, rc, "file not an encryptor requested writing footer");
+    }
+    else
+    {
+        KEncFile * self;
+        self = (KEncFile*)dad;
+
+        rc = KEncFileFooterWrite (self);
+    }
+    return rc;
+}
+
+/* ----------
+ * Identify whether a file is a KEncFile type encrypted file by the header.
+ * read the header into a buffer and pass it into this function.  
+ * The buffer_size needs to be at least 8 but more bytes lead to a better
+ * check up to the size of the header of a KEncFile type encrypted file.
+ * As the header may change in the future (in a backwards compatible way)
+ * that size might change from the current 16.
+ *
+ * Possible returns:
+ * 0:
+ *      the file is an identified KEncFile type file.  False positives are
+ *      possible if a file happens to match at 8 or more bytes
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType)
+ *      the file is definitely not a KEncFile type encrypted file.
+ *     
+ * RC (rcFS, rcFile, rcIdentifying, rcParam, rcNull)
+ *      bad parameters in the call
+ *
+ * RC (rcFS, rcFile, rcIdentifying, rcBuffer, rcInsufficient)
+ *      not a large enough buffer to make an identification
+ */
+LIB_EXPORT rc_t CC KFileIsEnc_v2 (const char * buffer, size_t buffer_size)
+{
+    KEncFileHeader header;
+    size_t count;
+    bool byte_swapped;
+
+    if ((buffer == NULL) || (buffer_size == 0))
+        return RC  (rcFS, rcFile, rcIdentifying, rcParam, rcNull); 
+
+    /* must have the signature to consider it an Encrypted file */
+    if (buffer_size < sizeof (header.file_sig))
+        return RC (rcFS, rcFile, rcIdentifying, rcBuffer, rcInsufficient); 
+
+    if ((memcmp (buffer, &const_header.file_sig, sizeof const_header.file_sig ) != 0) &&
+        (memcmp (buffer, &const_header_sra.file_sig, sizeof const_header_sra.file_sig ) != 0))
+        return RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType); 
+
+    /* can we also check the byte order? It's okay if we can't */
+    if (buffer_size < sizeof header.file_sig + sizeof header.byte_order)
+        return 0; 
+    
+    count = buffer_size > sizeof header ? sizeof header : buffer_size;
+
+    memcpy (&header, buffer, count);
+
+    if (header.byte_order == const_header.byte_order)
+        byte_swapped = false;
+
+    else if (header.byte_order == const_bswap_header.byte_order)
+        byte_swapped = true;
+
+    /* but if it's not we fail with a different error */
+    else
+        return RC (rcFS, rcFile, rcIdentifying, rcFile, rcOutoforder); 
+
+    /* can we check the version as well? It's okay if we can't */
+    if (buffer_size < sizeof (header))
+        return 0; 
+
+    assert (sizeof (header.version) == 4);
+    if (byte_swapped)
+        header.version = bswap_32(header.version);
+
+    /* and it's a different error if the version is not within our range */
+    if ((header.version <= 0) || (header.version > eCurrentVersion))
+        return RC (rcKrypto, rcFile, rcClassifying, rcFile, rcBadVersion);
+
+    return 0;
+}
+
+
+LIB_EXPORT rc_t CC KFileIsSraEnc (const char * buffer, size_t buffer_size)
+{
+    KEncFileHeader header;
+    size_t count;
+    bool byte_swapped;
+
+    if ((buffer == NULL) || (buffer_size == 0))
+        return RC  (rcFS, rcFile, rcIdentifying, rcParam, rcNull); 
+
+
+    if (buffer_size < sizeof (header.file_sig))
+        return RC (rcFS, rcFile, rcIdentifying, rcBuffer, rcInsufficient); 
+
+    if (memcmp (buffer, &const_header_sra.file_sig, sizeof const_header.file_sig ) != 0)
+        return RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType); 
+
+    if (buffer_size < sizeof header.file_sig + sizeof header.byte_order)
+        return 0; 
+    
+    count = buffer_size > sizeof header ? sizeof header : buffer_size;
+
+    memcpy (&header, buffer, count);
+
+    if (header.byte_order == const_header.byte_order)
+        byte_swapped = false;
+
+    else if (header.byte_order == const_bswap_header.byte_order)
+        byte_swapped = true;
+
+    else
+        return RC (rcFS, rcFile, rcIdentifying, rcFile, rcOutoforder); 
+
+    if (buffer_size < sizeof (header))
+        return 0; 
+
+    assert (sizeof (header.version) == 4);
+    if (byte_swapped)
+        header.version = bswap_32(header.version);
+
+    if ((header.version <= 0) || (header.version > eCurrentVersion))
+        return RC (rcKrypto, rcFile, rcClassifying, rcFile, rcBadVersion);
+
+    return 0;
+}
+
+/* end of file encfile.c */
+
+
+
diff --git a/libs/krypto/key.c b/libs/krypto/key.c
new file mode 100644
index 0000000..c57a45f
--- /dev/null
+++ b/libs/krypto/key.c
@@ -0,0 +1,126 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <krypto/extern.h>
+#include <krypto/key.h>
+#include <kapp/args.h>
+#include <klib/checksum.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <string.h>
+
+KRYPTO_EXTERN_DATA KKey KKeyEncrypt;
+KRYPTO_EXTERN_DATA KKey KKeyDecrypt;
+KRYPTO_EXTERN_DATA char WGAEncryptPassword[WGA_MAX_PASSWORD];
+KRYPTO_EXTERN_DATA char WGADecryptPassword[WGA_MAX_PASSWORD];
+
+
+static rc_t KKeyInitInt (KKey * self, KKeyType key_type, 
+                         const void * password, size_t password_size)
+{
+    if (self == NULL)
+        return RC (rcKrypto, rcEncryptionKey, rcConstructing, rcSelf, rcNull);
+
+    if (key_type >= kkeyTypeCount)
+        return RC (rcKrypto, rcEncryptionKey, rcConstructing, rcParam, rcInvalid);
+
+    if (key_type == kkeyNone)
+        return RC (rcKrypto, rcEncryptionKey, rcConstructing, rcParam, rcIncorrect);
+
+    if (password == NULL)
+        return RC (rcKrypto, rcEncryptionKey, rcConstructing, rcParam, rcNull);
+
+    if (password_size == 0)
+        return RC (rcKrypto, rcEncryptionKey, rcConstructing, rcParam, rcTooShort);
+
+    {
+        SHA256State state;
+        size_t z;
+        uint8_t digest [64];
+
+
+        SHA256StateInit (&state);
+        SHA256StateAppend (&state, password, password_size);
+        SHA256StateFinish (&state, digest);
+        
+        switch (self->type = key_type)
+        {
+        default:
+            z = 0;
+            break;
+
+        case kkeyAES128:
+            z = 128/8;
+            break;
+
+        case kkeyAES192:
+            z = 192/8;
+            break;
+
+        case kkeyAES256:
+            z = 256/8;
+            break;
+        }
+        memcpy (self->text, digest, z);
+    }
+    return 0;
+}
+
+LIB_EXPORT rc_t CC KKeyInitRead (KKey * self, KKeyType key_type, 
+                                 const void * password, size_t password_size)
+{
+    return KKeyInitInt (self, key_type, password, password_size);
+}
+
+LIB_EXPORT rc_t CC KKeyInitUpdate (KKey * self, KKeyType key_type, 
+                                   const void * password, size_t password_size)
+{
+    if (password_size < kkeyMinimumSize)
+    {
+        rc_t rc = RC (rcKrypto, rcEncryptionKey, rcConstructing, rcParam, 
+                      rcTooShort);
+#if FAIL_SHORT_PASSWORD
+        return rc;
+#else
+        PLOGERR (klogWarn, (klogWarn, rc,
+                            "Password is shorter than recommended '$(P)' is less than '$(Q)'"
+                            , "P=%zu,Q=%u"
+                            , password_size
+                            , ( uint32_t ) kkeyMinimumSize
+                     ));
+#endif
+    }
+    return KKeyInitInt (self, key_type, password, password_size);
+}
+    
+
+
+LIB_EXPORT rc_t CC KKeyInitHex()
+{
+    return 0;
+}
+
+/* end of file encfile.c */
+
diff --git a/libs/krypto/libkrypto.vers b/libs/krypto/libkrypto.vers
new file mode 100644
index 0000000..5b09c67
--- /dev/null
+++ b/libs/krypto/libkrypto.vers
@@ -0,0 +1 @@
+1.0.14
diff --git a/libs/align/libalign-writer.vers b/libs/krypto/libkryptotest.vers
similarity index 100%
copy from libs/align/libalign-writer.vers
copy to libs/krypto/libkryptotest.vers
diff --git a/libs/krypto/manager.c b/libs/krypto/manager.c
new file mode 100644
index 0000000..8b8c766
--- /dev/null
+++ b/libs/krypto/manager.c
@@ -0,0 +1,11 @@
+#error "obsolete do not use"
+
+
+
+
+
+
+
+
+
+
diff --git a/libs/krypto/ncbi-priv.h b/libs/krypto/ncbi-priv.h
new file mode 100644
index 0000000..4814e4f
--- /dev/null
+++ b/libs/krypto/ncbi-priv.h
@@ -0,0 +1,122 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#ifndef _h_krypto_ncbi_priv_
+#define _h_krypto_ncbi_priv_
+
+#include <klib/defs.h>
+
+#ifdef _GNUC_
+#include <v128.h>
+#endif
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+#if defined (USEVEC)
+#if defined (USEAESNI)
+
+# if ! defined (USEVECREG)
+/*
+ * AES_NI && ! VECREG
+ * Illegal
+ */
+#  error "Bad combination of defines"
+
+# else
+
+/*
+ * AESNI && VECREG
+ * use AES-NI, and SSSE3 and lower
+ */
+
+# define USE_AES_NI             true
+# define USE_VEC_REG            true
+# define USE_VEC                true
+# define CMEMBER(name)          KCipherVecAesNi##name
+# define CIPHER_IMPL            KCipherVecAesNi
+# define AESBCMEMBER(name)      KAESBlockCipherVecAesNi##name
+# define AESBCIPHER_IMPL        KAESBlockCipherVecAesNi
+# define NULLBCMEMBER(name)     KNullBlockCipherVecAesNi##name
+# define NULLBCIPHER_IMPL       KNullBlockCipherVecAesNi
+# define BCIPHER_VALUE          CipherVec
+
+# endif
+#elif defined (USEVECREG)
+
+# define USE_AES_NI             false
+# define USE_VEC_REG            true
+# define USE_VEC                true
+# define CMEMBER(name)          KCipherVecReg##name
+# define CIPHER_IMPL            KCipherVecReg
+# define AESBCMEMBER(name)      KAESBlockCipherVecReg##name
+# define AESBCIPHER_IMPL        KAESBlockCipherVecReg
+# define NULLBCMEMBER(name)     KNullBlockCipherVecReg##name
+# define NULLBCIPHER_IMPL       KNullBlockCipherVecReg
+# define BCIPHER_VALUE          CipherVec
+
+#else
+
+# define USE_AES_NI             false
+# define USE_VEC_REG            false
+# define USE_VEC                true
+# define CMEMBER(name)          KCipherVec##name
+# define CIPHER_IMPL            KCipherVec
+# define AESBCMEMBER(name)      KAESBlockCipherVec##name
+# define AESBCIPHER_IMPL        KAESBlockCipherVec
+# define NULLBCMEMBER(name)     KNullBlockCipherVec##name
+# define NULLBCIPHER_IMPL       KNullBlockCipherVec
+# define BCIPHER_VALUE          CipherVec
+
+#endif
+
+#else /* ! defined (USEVEC) */
+
+
+# define USE_AES_NI             false
+# define USE_VEC_REG            false
+# define USE_VEC                false
+# define MEMBER(name)           KCipherByte##name
+# define CMEMBER(name)          KCipherByte##name
+# define CIPHER_IMPL            KCipherByte
+# define AESBCMEMBER(name)      KAESBlockCipherByte##name
+# define AESBCIPHER_IMPL        KAESBlockCipherByte
+# define NULLBCMEMBER(name)     KNullBlockCipherByte##name
+# define NULLBCIPHER_IMPL       KNullBlockCipherByte
+# define BCIPHER_VALUE          CipherBlock
+
+#endif /* defined (USEVEC) */
+
+#define CLASS_STRING(name)  #name
+
+
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif /* #ifndef _h_krypto_ncbi_priv_ */
+
+
diff --git a/libs/krypto/no-null-ncbi.aes-ni.pic.o.list b/libs/krypto/no-null-ncbi.aes-ni.pic.o.list
new file mode 100644
index 0000000..5e3ac1a
--- /dev/null
+++ b/libs/krypto/no-null-ncbi.aes-ni.pic.o.list
@@ -0,0 +1,2539 @@
+GAS LISTING /tmp/cc32muHp.s 			page 1
+
+
+   1              		.file	"no-null-ncbi.c"
+   2              		.section	.debug_abbrev,"", at progbits
+   3              	.Ldebug_abbrev0:
+   4              		.section	.debug_info,"", at progbits
+   5              	.Ldebug_info0:
+   6              		.section	.debug_line,"", at progbits
+   7              	.Ldebug_line0:
+   8 0000 CC000000 		.text
+   8      0200AA00 
+   8      00000101 
+   8      FB0E0D00 
+   8      01010101 
+   9              	.Ltext0:
+  10              		.section	.rodata
+  11              		.align 8
+  12              	.LC0:
+  13 0000 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c"
+  13      652F726F 
+  13      6461726D 
+  13      65722F73 
+  13      72615F73 
+  14              		.text
+  15              	.globl KNullBlockCipherVecAesNiMake
+  16              		.type	KNullBlockCipherVecAesNiMake, @function
+  17              	KNullBlockCipherVecAesNiMake:
+  18              	.LFB15:
+  19              		.file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c"
+   1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /*===========================================================================
+   2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *
+   3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *                            PUBLIC DOMAIN NOTICE
+   4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *               National Center for Biotechnology Information
+   5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *
+   6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  This software/database is a "United States Government Work" under the
+   7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  terms of the United States Copyright Act.  It was written as part of
+   8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  the author's official duties as a United States Government employee and
+   9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  thus cannot be copyrighted.  This software/database is freely available
+  10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  to the public for use. The National Library of Medicine and the U.S.
+  11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  Government have not placed any restriction on its use or reproduction.
+  12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *
+  13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  Although all reasonable efforts have been taken to ensure the accuracy
+  14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  and reliability of the software and data, the NLM and the U.S.
+  15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  Government do not and cannot warrant the performance or results that
+  16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  may be obtained by using this software or data. The NLM and the U.S.
+  17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  Government disclaim all warranties, express or implied, including
+  18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  warranties of performance, merchantability or fitness for any particular
+  19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  purpose.
+  20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *
+  21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  Please cite the author in any work or product based on this material.
+  22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *
+  23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  * ===========================================================================
+  24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  */
+  25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include <krypto/extern.h>
+  27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include "ncbi-priv.h"
+  29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include "cipher-priv.h"
+  30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /* #include "blockcipher-priv.h" */
+
GAS LISTING /tmp/cc32muHp.s 			page 2
+
+
+  31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include <klib/rc.h>
+  33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /* ----------------------------------------------------------------------
+  35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  * Make
+  36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *
+  37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  * Create a new Null Block Cipher object.
+  38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  * The processor is checked to see if this particular version is supported on
+  39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  * this particular CPU.
+  40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  */
+  41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** struct KBlockCipher;
+  42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** rc_t NULLBCMEMBER(Make) (struct KBlockCipher ** new_obj)
+  43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** {
+  20              		.loc 1 43 0
+  21              		.cfi_startproc
+  22 0000 55       		pushq	%rbp
+  23              	.LCFI0:
+  24              		.cfi_def_cfa_offset 16
+  25 0001 4889E5   		movq	%rsp, %rbp
+  26              		.cfi_offset 6, -16
+  27              	.LCFI1:
+  28              		.cfi_def_cfa_register 6
+  29 0004 4883EC20 		subq	$32, %rsp
+  30 0008 48897DE8 		movq	%rdi, -24(%rbp)
+  44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     rc_t rc;
+  45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     /* Check parameter first */
+  47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     if (new_obj == NULL)
+  31              		.loc 1 47 0
+  32 000c 48837DE8 		cmpq	$0, -24(%rbp)
+  32      00
+  33 0011 7522     		jne	.L2
+  48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****         rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+  34              		.loc 1 48 0
+  35 0013 B9300000 		movl	$48, %ecx
+  35      00
+  36 0018 488D1500 		leaq	__func__.2445(%rip), %rdx
+  36      000000
+  37 001f 488D3500 		leaq	.LC0(%rip), %rsi
+  37      000000
+  38 0026 BF878F00 		movl	$-2030006393, %edi
+  38      87
+  39 002b E8000000 		call	SetRCFileFuncLine at PLT
+  39      00
+  40 0030 8945FC   		movl	%eax, -4(%rbp)
+  41 0033 EB2B     		jmp	.L3
+  42              	.L2:
+  49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     else
+  51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     {
+  52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****         *new_obj = NULL;
+  43              		.loc 1 52 0
+  44 0035 488B45E8 		movq	-24(%rbp), %rax
+  45 0039 48C70000 		movq	$0, (%rax)
+  45      000000
+  53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****         rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+
GAS LISTING /tmp/cc32muHp.s 			page 3
+
+
+  46              		.loc 1 54 0
+  47 0040 B9360000 		movl	$54, %ecx
+  47      00
+  48 0045 488D1500 		leaq	__func__.2445(%rip), %rdx
+  48      000000
+  49 004c 488D3500 		leaq	.LC0(%rip), %rsi
+  49      000000
+  50 0053 BF038500 		movl	$-2030009085, %edi
+  50      87
+  51 0058 E8000000 		call	SetRCFileFuncLine at PLT
+  51      00
+  52 005d 8945FC   		movl	%eax, -4(%rbp)
+  53              	.L3:
+  55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     }
+  56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     return rc;
+  54              		.loc 1 56 0
+  55 0060 8B45FC   		movl	-4(%rbp), %eax
+  57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** }
+  56              		.loc 1 57 0
+  57 0063 C9       		leave
+  58 0064 C3       		ret
+  59              		.cfi_endproc
+  60              	.LFE15:
+  61              		.size	KNullBlockCipherVecAesNiMake, .-KNullBlockCipherVecAesNiMake
+  62              		.section	.rodata
+  63 003a 00000000 		.align 16
+  63      0000
+  64              		.type	__func__.2445, @object
+  65              		.size	__func__.2445, 29
+  66              	__func__.2445:
+  67 0040 4B4E756C 		.string	"KNullBlockCipherVecAesNiMake"
+  67      6C426C6F 
+  67      636B4369 
+  67      70686572 
+  67      56656341 
+  68 005d 000000   		.align 16
+  69              		.type	__PRETTY_FUNCTION__.2444, @object
+  70              		.size	__PRETTY_FUNCTION__.2444, 29
+  71              	__PRETTY_FUNCTION__.2444:
+  72 0060 4B4E756C 		.string	"KNullBlockCipherVecAesNiMake"
+  72      6C426C6F 
+  72      636B4369 
+  72      70686572 
+  72      56656341 
+  73              		.text
+  74              	.Letext0:
+  75              		.section	.debug_loc,"", at progbits
+  76              	.Ldebug_loc0:
+  77              	.LLST0:
+  78 0000 00000000 		.quad	.LFB15-.Ltext0
+  78      00000000 
+  79 0008 01000000 		.quad	.LCFI0-.Ltext0
+  79      00000000 
+  80 0010 0200     		.value	0x2
+  81 0012 77       		.byte	0x77
+  82 0013 08       		.sleb128 8
+  83 0014 01000000 		.quad	.LCFI0-.Ltext0
+
GAS LISTING /tmp/cc32muHp.s 			page 4
+
+
+  83      00000000 
+  84 001c 04000000 		.quad	.LCFI1-.Ltext0
+  84      00000000 
+  85 0024 0200     		.value	0x2
+  86 0026 77       		.byte	0x77
+  87 0027 10       		.sleb128 16
+  88 0028 04000000 		.quad	.LCFI1-.Ltext0
+  88      00000000 
+  89 0030 65000000 		.quad	.LFE15-.Ltext0
+  89      00000000 
+  90 0038 0200     		.value	0x2
+  91 003a 76       		.byte	0x76
+  92 003b 10       		.sleb128 16
+  93 003c 00000000 		.quad	0x0
+  93      00000000 
+  94 0044 00000000 		.quad	0x0
+  94      00000000 
+  95              		.file 2 "/usr/include/stdint.h"
+  96              		.file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+  97              		.file 4 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+  98              		.section	.debug_info
+  99 0000 24070000 		.long	0x724
+ 100 0004 0200     		.value	0x2
+ 101 0006 00000000 		.long	.Ldebug_abbrev0
+ 102 000a 08       		.byte	0x8
+ 103 000b 01       		.uleb128 0x1
+ 104 000c 00000000 		.long	.LASF258
+ 105 0010 01       		.byte	0x1
+ 106 0011 00000000 		.long	.LASF259
+ 107 0015 00000000 		.long	.LASF260
+ 108 0019 00000000 		.quad	.Ltext0
+ 108      00000000 
+ 109 0021 00000000 		.quad	.Letext0
+ 109      00000000 
+ 110 0029 00000000 		.long	.Ldebug_line0
+ 111 002d 02       		.uleb128 0x2
+ 112 002e 01       		.byte	0x1
+ 113 002f 06       		.byte	0x6
+ 114 0030 00000000 		.long	.LASF0
+ 115 0034 02       		.uleb128 0x2
+ 116 0035 02       		.byte	0x2
+ 117 0036 05       		.byte	0x5
+ 118 0037 00000000 		.long	.LASF1
+ 119 003b 03       		.uleb128 0x3
+ 120 003c 04       		.byte	0x4
+ 121 003d 05       		.byte	0x5
+ 122 003e 696E7400 		.string	"int"
+ 123 0042 02       		.uleb128 0x2
+ 124 0043 08       		.byte	0x8
+ 125 0044 05       		.byte	0x5
+ 126 0045 00000000 		.long	.LASF2
+ 127 0049 02       		.uleb128 0x2
+ 128 004a 01       		.byte	0x1
+ 129 004b 08       		.byte	0x8
+ 130 004c 00000000 		.long	.LASF3
+ 131 0050 02       		.uleb128 0x2
+ 132 0051 02       		.byte	0x2
+
GAS LISTING /tmp/cc32muHp.s 			page 5
+
+
+ 133 0052 07       		.byte	0x7
+ 134 0053 00000000 		.long	.LASF4
+ 135 0057 04       		.uleb128 0x4
+ 136 0058 00000000 		.long	.LASF7
+ 137 005c 02       		.byte	0x2
+ 138 005d 34       		.byte	0x34
+ 139 005e 62000000 		.long	0x62
+ 140 0062 02       		.uleb128 0x2
+ 141 0063 04       		.byte	0x4
+ 142 0064 07       		.byte	0x7
+ 143 0065 00000000 		.long	.LASF5
+ 144 0069 02       		.uleb128 0x2
+ 145 006a 08       		.byte	0x8
+ 146 006b 07       		.byte	0x7
+ 147 006c 00000000 		.long	.LASF6
+ 148 0070 04       		.uleb128 0x4
+ 149 0071 00000000 		.long	.LASF8
+ 150 0075 03       		.byte	0x3
+ 151 0076 30       		.byte	0x30
+ 152 0077 57000000 		.long	0x57
+ 153 007b 05       		.uleb128 0x5
+ 154 007c 08       		.byte	0x8
+ 155 007d 07       		.byte	0x7
+ 156 007e 02       		.uleb128 0x2
+ 157 007f 01       		.byte	0x1
+ 158 0080 06       		.byte	0x6
+ 159 0081 00000000 		.long	.LASF9
+ 160 0085 06       		.uleb128 0x6
+ 161 0086 00000000 		.long	.LASF32
+ 162 008a 04       		.byte	0x4
+ 163 008b 04       		.byte	0x4
+ 164 008c 5A       		.byte	0x5a
+ 165 008d 16010000 		.long	0x116
+ 166 0091 07       		.uleb128 0x7
+ 167 0092 00000000 		.long	.LASF10
+ 168 0096 00       		.sleb128 0
+ 169 0097 07       		.uleb128 0x7
+ 170 0098 00000000 		.long	.LASF11
+ 171 009c 01       		.sleb128 1
+ 172 009d 07       		.uleb128 0x7
+ 173 009e 00000000 		.long	.LASF12
+ 174 00a2 02       		.sleb128 2
+ 175 00a3 07       		.uleb128 0x7
+ 176 00a4 00000000 		.long	.LASF13
+ 177 00a8 03       		.sleb128 3
+ 178 00a9 07       		.uleb128 0x7
+ 179 00aa 00000000 		.long	.LASF14
+ 180 00ae 04       		.sleb128 4
+ 181 00af 07       		.uleb128 0x7
+ 182 00b0 00000000 		.long	.LASF15
+ 183 00b4 05       		.sleb128 5
+ 184 00b5 07       		.uleb128 0x7
+ 185 00b6 00000000 		.long	.LASF16
+ 186 00ba 06       		.sleb128 6
+ 187 00bb 07       		.uleb128 0x7
+ 188 00bc 00000000 		.long	.LASF17
+ 189 00c0 07       		.sleb128 7
+
GAS LISTING /tmp/cc32muHp.s 			page 6
+
+
+ 190 00c1 07       		.uleb128 0x7
+ 191 00c2 00000000 		.long	.LASF18
+ 192 00c6 08       		.sleb128 8
+ 193 00c7 07       		.uleb128 0x7
+ 194 00c8 00000000 		.long	.LASF19
+ 195 00cc 09       		.sleb128 9
+ 196 00cd 07       		.uleb128 0x7
+ 197 00ce 00000000 		.long	.LASF20
+ 198 00d2 0A       		.sleb128 10
+ 199 00d3 07       		.uleb128 0x7
+ 200 00d4 00000000 		.long	.LASF21
+ 201 00d8 0B       		.sleb128 11
+ 202 00d9 07       		.uleb128 0x7
+ 203 00da 00000000 		.long	.LASF22
+ 204 00de 0C       		.sleb128 12
+ 205 00df 07       		.uleb128 0x7
+ 206 00e0 00000000 		.long	.LASF23
+ 207 00e4 0D       		.sleb128 13
+ 208 00e5 07       		.uleb128 0x7
+ 209 00e6 00000000 		.long	.LASF24
+ 210 00ea 0E       		.sleb128 14
+ 211 00eb 07       		.uleb128 0x7
+ 212 00ec 00000000 		.long	.LASF25
+ 213 00f0 0E       		.sleb128 14
+ 214 00f1 07       		.uleb128 0x7
+ 215 00f2 00000000 		.long	.LASF26
+ 216 00f6 0F       		.sleb128 15
+ 217 00f7 07       		.uleb128 0x7
+ 218 00f8 00000000 		.long	.LASF27
+ 219 00fc 10       		.sleb128 16
+ 220 00fd 07       		.uleb128 0x7
+ 221 00fe 00000000 		.long	.LASF28
+ 222 0102 11       		.sleb128 17
+ 223 0103 07       		.uleb128 0x7
+ 224 0104 00000000 		.long	.LASF29
+ 225 0108 12       		.sleb128 18
+ 226 0109 07       		.uleb128 0x7
+ 227 010a 00000000 		.long	.LASF30
+ 228 010e 13       		.sleb128 19
+ 229 010f 07       		.uleb128 0x7
+ 230 0110 00000000 		.long	.LASF31
+ 231 0114 14       		.sleb128 20
+ 232 0115 00       		.byte	0x0
+ 233 0116 06       		.uleb128 0x6
+ 234 0117 00000000 		.long	.LASF33
+ 235 011b 04       		.byte	0x4
+ 236 011c 04       		.byte	0x4
+ 237 011d 77       		.byte	0x77
+ 238 011e 9D020000 		.long	0x29d
+ 239 0122 07       		.uleb128 0x7
+ 240 0123 00000000 		.long	.LASF34
+ 241 0127 00       		.sleb128 0
+ 242 0128 07       		.uleb128 0x7
+ 243 0129 00000000 		.long	.LASF35
+ 244 012d 01       		.sleb128 1
+ 245 012e 07       		.uleb128 0x7
+ 246 012f 00000000 		.long	.LASF36
+
GAS LISTING /tmp/cc32muHp.s 			page 7
+
+
+ 247 0133 02       		.sleb128 2
+ 248 0134 07       		.uleb128 0x7
+ 249 0135 00000000 		.long	.LASF37
+ 250 0139 03       		.sleb128 3
+ 251 013a 07       		.uleb128 0x7
+ 252 013b 00000000 		.long	.LASF38
+ 253 013f 04       		.sleb128 4
+ 254 0140 07       		.uleb128 0x7
+ 255 0141 00000000 		.long	.LASF39
+ 256 0145 05       		.sleb128 5
+ 257 0146 07       		.uleb128 0x7
+ 258 0147 00000000 		.long	.LASF40
+ 259 014b 06       		.sleb128 6
+ 260 014c 07       		.uleb128 0x7
+ 261 014d 00000000 		.long	.LASF41
+ 262 0151 07       		.sleb128 7
+ 263 0152 07       		.uleb128 0x7
+ 264 0153 00000000 		.long	.LASF42
+ 265 0157 08       		.sleb128 8
+ 266 0158 07       		.uleb128 0x7
+ 267 0159 00000000 		.long	.LASF43
+ 268 015d 09       		.sleb128 9
+ 269 015e 07       		.uleb128 0x7
+ 270 015f 00000000 		.long	.LASF44
+ 271 0163 0A       		.sleb128 10
+ 272 0164 07       		.uleb128 0x7
+ 273 0165 00000000 		.long	.LASF45
+ 274 0169 0B       		.sleb128 11
+ 275 016a 07       		.uleb128 0x7
+ 276 016b 00000000 		.long	.LASF46
+ 277 016f 0C       		.sleb128 12
+ 278 0170 07       		.uleb128 0x7
+ 279 0171 00000000 		.long	.LASF47
+ 280 0175 0D       		.sleb128 13
+ 281 0176 07       		.uleb128 0x7
+ 282 0177 00000000 		.long	.LASF48
+ 283 017b 0E       		.sleb128 14
+ 284 017c 07       		.uleb128 0x7
+ 285 017d 00000000 		.long	.LASF49
+ 286 0181 0F       		.sleb128 15
+ 287 0182 07       		.uleb128 0x7
+ 288 0183 00000000 		.long	.LASF50
+ 289 0187 10       		.sleb128 16
+ 290 0188 07       		.uleb128 0x7
+ 291 0189 00000000 		.long	.LASF51
+ 292 018d 11       		.sleb128 17
+ 293 018e 07       		.uleb128 0x7
+ 294 018f 00000000 		.long	.LASF52
+ 295 0193 12       		.sleb128 18
+ 296 0194 07       		.uleb128 0x7
+ 297 0195 00000000 		.long	.LASF53
+ 298 0199 13       		.sleb128 19
+ 299 019a 07       		.uleb128 0x7
+ 300 019b 00000000 		.long	.LASF54
+ 301 019f 14       		.sleb128 20
+ 302 01a0 07       		.uleb128 0x7
+ 303 01a1 00000000 		.long	.LASF55
+
GAS LISTING /tmp/cc32muHp.s 			page 8
+
+
+ 304 01a5 15       		.sleb128 21
+ 305 01a6 07       		.uleb128 0x7
+ 306 01a7 00000000 		.long	.LASF56
+ 307 01ab 16       		.sleb128 22
+ 308 01ac 07       		.uleb128 0x7
+ 309 01ad 00000000 		.long	.LASF57
+ 310 01b1 17       		.sleb128 23
+ 311 01b2 07       		.uleb128 0x7
+ 312 01b3 00000000 		.long	.LASF58
+ 313 01b7 18       		.sleb128 24
+ 314 01b8 07       		.uleb128 0x7
+ 315 01b9 00000000 		.long	.LASF59
+ 316 01bd 19       		.sleb128 25
+ 317 01be 07       		.uleb128 0x7
+ 318 01bf 00000000 		.long	.LASF60
+ 319 01c3 1A       		.sleb128 26
+ 320 01c4 07       		.uleb128 0x7
+ 321 01c5 00000000 		.long	.LASF61
+ 322 01c9 1B       		.sleb128 27
+ 323 01ca 07       		.uleb128 0x7
+ 324 01cb 00000000 		.long	.LASF62
+ 325 01cf 1C       		.sleb128 28
+ 326 01d0 07       		.uleb128 0x7
+ 327 01d1 00000000 		.long	.LASF63
+ 328 01d5 1D       		.sleb128 29
+ 329 01d6 07       		.uleb128 0x7
+ 330 01d7 00000000 		.long	.LASF64
+ 331 01db 1E       		.sleb128 30
+ 332 01dc 07       		.uleb128 0x7
+ 333 01dd 00000000 		.long	.LASF65
+ 334 01e1 1F       		.sleb128 31
+ 335 01e2 07       		.uleb128 0x7
+ 336 01e3 00000000 		.long	.LASF66
+ 337 01e7 20       		.sleb128 32
+ 338 01e8 07       		.uleb128 0x7
+ 339 01e9 00000000 		.long	.LASF67
+ 340 01ed 21       		.sleb128 33
+ 341 01ee 07       		.uleb128 0x7
+ 342 01ef 00000000 		.long	.LASF68
+ 343 01f3 22       		.sleb128 34
+ 344 01f4 07       		.uleb128 0x7
+ 345 01f5 00000000 		.long	.LASF69
+ 346 01f9 23       		.sleb128 35
+ 347 01fa 07       		.uleb128 0x7
+ 348 01fb 00000000 		.long	.LASF70
+ 349 01ff 24       		.sleb128 36
+ 350 0200 07       		.uleb128 0x7
+ 351 0201 00000000 		.long	.LASF71
+ 352 0205 25       		.sleb128 37
+ 353 0206 07       		.uleb128 0x7
+ 354 0207 00000000 		.long	.LASF72
+ 355 020b 26       		.sleb128 38
+ 356 020c 07       		.uleb128 0x7
+ 357 020d 00000000 		.long	.LASF73
+ 358 0211 27       		.sleb128 39
+ 359 0212 07       		.uleb128 0x7
+ 360 0213 00000000 		.long	.LASF74
+
GAS LISTING /tmp/cc32muHp.s 			page 9
+
+
+ 361 0217 28       		.sleb128 40
+ 362 0218 07       		.uleb128 0x7
+ 363 0219 00000000 		.long	.LASF75
+ 364 021d 29       		.sleb128 41
+ 365 021e 07       		.uleb128 0x7
+ 366 021f 00000000 		.long	.LASF76
+ 367 0223 2A       		.sleb128 42
+ 368 0224 07       		.uleb128 0x7
+ 369 0225 00000000 		.long	.LASF77
+ 370 0229 2B       		.sleb128 43
+ 371 022a 07       		.uleb128 0x7
+ 372 022b 00000000 		.long	.LASF78
+ 373 022f 2C       		.sleb128 44
+ 374 0230 07       		.uleb128 0x7
+ 375 0231 00000000 		.long	.LASF79
+ 376 0235 2D       		.sleb128 45
+ 377 0236 07       		.uleb128 0x7
+ 378 0237 00000000 		.long	.LASF80
+ 379 023b 2E       		.sleb128 46
+ 380 023c 07       		.uleb128 0x7
+ 381 023d 00000000 		.long	.LASF81
+ 382 0241 2F       		.sleb128 47
+ 383 0242 07       		.uleb128 0x7
+ 384 0243 00000000 		.long	.LASF82
+ 385 0247 30       		.sleb128 48
+ 386 0248 07       		.uleb128 0x7
+ 387 0249 00000000 		.long	.LASF83
+ 388 024d 31       		.sleb128 49
+ 389 024e 07       		.uleb128 0x7
+ 390 024f 00000000 		.long	.LASF84
+ 391 0253 32       		.sleb128 50
+ 392 0254 07       		.uleb128 0x7
+ 393 0255 00000000 		.long	.LASF85
+ 394 0259 33       		.sleb128 51
+ 395 025a 07       		.uleb128 0x7
+ 396 025b 00000000 		.long	.LASF86
+ 397 025f 34       		.sleb128 52
+ 398 0260 07       		.uleb128 0x7
+ 399 0261 00000000 		.long	.LASF87
+ 400 0265 35       		.sleb128 53
+ 401 0266 07       		.uleb128 0x7
+ 402 0267 00000000 		.long	.LASF88
+ 403 026b 36       		.sleb128 54
+ 404 026c 07       		.uleb128 0x7
+ 405 026d 00000000 		.long	.LASF89
+ 406 0271 36       		.sleb128 54
+ 407 0272 07       		.uleb128 0x7
+ 408 0273 00000000 		.long	.LASF90
+ 409 0277 37       		.sleb128 55
+ 410 0278 07       		.uleb128 0x7
+ 411 0279 00000000 		.long	.LASF91
+ 412 027d 38       		.sleb128 56
+ 413 027e 07       		.uleb128 0x7
+ 414 027f 00000000 		.long	.LASF92
+ 415 0283 39       		.sleb128 57
+ 416 0284 07       		.uleb128 0x7
+ 417 0285 00000000 		.long	.LASF93
+
GAS LISTING /tmp/cc32muHp.s 			page 10
+
+
+ 418 0289 3A       		.sleb128 58
+ 419 028a 07       		.uleb128 0x7
+ 420 028b 00000000 		.long	.LASF94
+ 421 028f 3B       		.sleb128 59
+ 422 0290 07       		.uleb128 0x7
+ 423 0291 00000000 		.long	.LASF95
+ 424 0295 3C       		.sleb128 60
+ 425 0296 07       		.uleb128 0x7
+ 426 0297 00000000 		.long	.LASF96
+ 427 029b 3D       		.sleb128 61
+ 428 029c 00       		.byte	0x0
+ 429 029d 06       		.uleb128 0x6
+ 430 029e 00000000 		.long	.LASF97
+ 431 02a2 04       		.byte	0x4
+ 432 02a3 04       		.byte	0x4
+ 433 02a4 BD       		.byte	0xbd
+ 434 02a5 53040000 		.long	0x453
+ 435 02a9 07       		.uleb128 0x7
+ 436 02aa 00000000 		.long	.LASF98
+ 437 02ae 00       		.sleb128 0
+ 438 02af 07       		.uleb128 0x7
+ 439 02b0 00000000 		.long	.LASF99
+ 440 02b4 01       		.sleb128 1
+ 441 02b5 07       		.uleb128 0x7
+ 442 02b6 00000000 		.long	.LASF100
+ 443 02ba 02       		.sleb128 2
+ 444 02bb 07       		.uleb128 0x7
+ 445 02bc 00000000 		.long	.LASF101
+ 446 02c0 03       		.sleb128 3
+ 447 02c1 07       		.uleb128 0x7
+ 448 02c2 00000000 		.long	.LASF102
+ 449 02c6 04       		.sleb128 4
+ 450 02c7 07       		.uleb128 0x7
+ 451 02c8 00000000 		.long	.LASF103
+ 452 02cc 05       		.sleb128 5
+ 453 02cd 07       		.uleb128 0x7
+ 454 02ce 00000000 		.long	.LASF104
+ 455 02d2 06       		.sleb128 6
+ 456 02d3 07       		.uleb128 0x7
+ 457 02d4 00000000 		.long	.LASF105
+ 458 02d8 07       		.sleb128 7
+ 459 02d9 07       		.uleb128 0x7
+ 460 02da 00000000 		.long	.LASF106
+ 461 02de 08       		.sleb128 8
+ 462 02df 07       		.uleb128 0x7
+ 463 02e0 00000000 		.long	.LASF107
+ 464 02e4 09       		.sleb128 9
+ 465 02e5 07       		.uleb128 0x7
+ 466 02e6 00000000 		.long	.LASF108
+ 467 02ea 0A       		.sleb128 10
+ 468 02eb 07       		.uleb128 0x7
+ 469 02ec 00000000 		.long	.LASF109
+ 470 02f0 0B       		.sleb128 11
+ 471 02f1 07       		.uleb128 0x7
+ 472 02f2 00000000 		.long	.LASF110
+ 473 02f6 0C       		.sleb128 12
+ 474 02f7 07       		.uleb128 0x7
+
GAS LISTING /tmp/cc32muHp.s 			page 11
+
+
+ 475 02f8 00000000 		.long	.LASF111
+ 476 02fc 0D       		.sleb128 13
+ 477 02fd 07       		.uleb128 0x7
+ 478 02fe 00000000 		.long	.LASF112
+ 479 0302 0E       		.sleb128 14
+ 480 0303 07       		.uleb128 0x7
+ 481 0304 00000000 		.long	.LASF113
+ 482 0308 0F       		.sleb128 15
+ 483 0309 07       		.uleb128 0x7
+ 484 030a 00000000 		.long	.LASF114
+ 485 030e 10       		.sleb128 16
+ 486 030f 07       		.uleb128 0x7
+ 487 0310 00000000 		.long	.LASF115
+ 488 0314 11       		.sleb128 17
+ 489 0315 07       		.uleb128 0x7
+ 490 0316 00000000 		.long	.LASF116
+ 491 031a 12       		.sleb128 18
+ 492 031b 07       		.uleb128 0x7
+ 493 031c 00000000 		.long	.LASF117
+ 494 0320 13       		.sleb128 19
+ 495 0321 07       		.uleb128 0x7
+ 496 0322 00000000 		.long	.LASF118
+ 497 0326 14       		.sleb128 20
+ 498 0327 07       		.uleb128 0x7
+ 499 0328 00000000 		.long	.LASF119
+ 500 032c 15       		.sleb128 21
+ 501 032d 07       		.uleb128 0x7
+ 502 032e 00000000 		.long	.LASF120
+ 503 0332 16       		.sleb128 22
+ 504 0333 07       		.uleb128 0x7
+ 505 0334 00000000 		.long	.LASF121
+ 506 0338 17       		.sleb128 23
+ 507 0339 07       		.uleb128 0x7
+ 508 033a 00000000 		.long	.LASF122
+ 509 033e 18       		.sleb128 24
+ 510 033f 07       		.uleb128 0x7
+ 511 0340 00000000 		.long	.LASF123
+ 512 0344 19       		.sleb128 25
+ 513 0345 07       		.uleb128 0x7
+ 514 0346 00000000 		.long	.LASF124
+ 515 034a 1A       		.sleb128 26
+ 516 034b 07       		.uleb128 0x7
+ 517 034c 00000000 		.long	.LASF125
+ 518 0350 1B       		.sleb128 27
+ 519 0351 07       		.uleb128 0x7
+ 520 0352 00000000 		.long	.LASF126
+ 521 0356 1C       		.sleb128 28
+ 522 0357 07       		.uleb128 0x7
+ 523 0358 00000000 		.long	.LASF127
+ 524 035c 1D       		.sleb128 29
+ 525 035d 07       		.uleb128 0x7
+ 526 035e 00000000 		.long	.LASF128
+ 527 0362 1E       		.sleb128 30
+ 528 0363 07       		.uleb128 0x7
+ 529 0364 00000000 		.long	.LASF129
+ 530 0368 1F       		.sleb128 31
+ 531 0369 07       		.uleb128 0x7
+
GAS LISTING /tmp/cc32muHp.s 			page 12
+
+
+ 532 036a 00000000 		.long	.LASF130
+ 533 036e 20       		.sleb128 32
+ 534 036f 07       		.uleb128 0x7
+ 535 0370 00000000 		.long	.LASF131
+ 536 0374 21       		.sleb128 33
+ 537 0375 07       		.uleb128 0x7
+ 538 0376 00000000 		.long	.LASF132
+ 539 037a 22       		.sleb128 34
+ 540 037b 07       		.uleb128 0x7
+ 541 037c 00000000 		.long	.LASF133
+ 542 0380 23       		.sleb128 35
+ 543 0381 07       		.uleb128 0x7
+ 544 0382 00000000 		.long	.LASF134
+ 545 0386 24       		.sleb128 36
+ 546 0387 07       		.uleb128 0x7
+ 547 0388 00000000 		.long	.LASF135
+ 548 038c 25       		.sleb128 37
+ 549 038d 07       		.uleb128 0x7
+ 550 038e 00000000 		.long	.LASF136
+ 551 0392 26       		.sleb128 38
+ 552 0393 07       		.uleb128 0x7
+ 553 0394 00000000 		.long	.LASF137
+ 554 0398 27       		.sleb128 39
+ 555 0399 07       		.uleb128 0x7
+ 556 039a 00000000 		.long	.LASF138
+ 557 039e 28       		.sleb128 40
+ 558 039f 07       		.uleb128 0x7
+ 559 03a0 00000000 		.long	.LASF139
+ 560 03a4 29       		.sleb128 41
+ 561 03a5 07       		.uleb128 0x7
+ 562 03a6 00000000 		.long	.LASF140
+ 563 03aa 2A       		.sleb128 42
+ 564 03ab 07       		.uleb128 0x7
+ 565 03ac 00000000 		.long	.LASF141
+ 566 03b0 2B       		.sleb128 43
+ 567 03b1 07       		.uleb128 0x7
+ 568 03b2 00000000 		.long	.LASF142
+ 569 03b6 2C       		.sleb128 44
+ 570 03b7 07       		.uleb128 0x7
+ 571 03b8 00000000 		.long	.LASF143
+ 572 03bc 2D       		.sleb128 45
+ 573 03bd 07       		.uleb128 0x7
+ 574 03be 00000000 		.long	.LASF144
+ 575 03c2 2E       		.sleb128 46
+ 576 03c3 07       		.uleb128 0x7
+ 577 03c4 00000000 		.long	.LASF145
+ 578 03c8 2F       		.sleb128 47
+ 579 03c9 07       		.uleb128 0x7
+ 580 03ca 00000000 		.long	.LASF146
+ 581 03ce 30       		.sleb128 48
+ 582 03cf 07       		.uleb128 0x7
+ 583 03d0 00000000 		.long	.LASF147
+ 584 03d4 31       		.sleb128 49
+ 585 03d5 07       		.uleb128 0x7
+ 586 03d6 00000000 		.long	.LASF148
+ 587 03da 32       		.sleb128 50
+ 588 03db 07       		.uleb128 0x7
+
GAS LISTING /tmp/cc32muHp.s 			page 13
+
+
+ 589 03dc 00000000 		.long	.LASF149
+ 590 03e0 33       		.sleb128 51
+ 591 03e1 07       		.uleb128 0x7
+ 592 03e2 00000000 		.long	.LASF150
+ 593 03e6 34       		.sleb128 52
+ 594 03e7 07       		.uleb128 0x7
+ 595 03e8 00000000 		.long	.LASF151
+ 596 03ec 35       		.sleb128 53
+ 597 03ed 07       		.uleb128 0x7
+ 598 03ee 00000000 		.long	.LASF152
+ 599 03f2 36       		.sleb128 54
+ 600 03f3 07       		.uleb128 0x7
+ 601 03f4 00000000 		.long	.LASF153
+ 602 03f8 37       		.sleb128 55
+ 603 03f9 07       		.uleb128 0x7
+ 604 03fa 00000000 		.long	.LASF154
+ 605 03fe 38       		.sleb128 56
+ 606 03ff 07       		.uleb128 0x7
+ 607 0400 00000000 		.long	.LASF155
+ 608 0404 39       		.sleb128 57
+ 609 0405 07       		.uleb128 0x7
+ 610 0406 00000000 		.long	.LASF156
+ 611 040a 3A       		.sleb128 58
+ 612 040b 07       		.uleb128 0x7
+ 613 040c 00000000 		.long	.LASF157
+ 614 0410 3A       		.sleb128 58
+ 615 0411 07       		.uleb128 0x7
+ 616 0412 00000000 		.long	.LASF158
+ 617 0416 3B       		.sleb128 59
+ 618 0417 07       		.uleb128 0x7
+ 619 0418 00000000 		.long	.LASF159
+ 620 041c 3C       		.sleb128 60
+ 621 041d 07       		.uleb128 0x7
+ 622 041e 00000000 		.long	.LASF160
+ 623 0422 3D       		.sleb128 61
+ 624 0423 07       		.uleb128 0x7
+ 625 0424 00000000 		.long	.LASF161
+ 626 0428 3E       		.sleb128 62
+ 627 0429 07       		.uleb128 0x7
+ 628 042a 00000000 		.long	.LASF162
+ 629 042e 3F       		.sleb128 63
+ 630 042f 07       		.uleb128 0x7
+ 631 0430 00000000 		.long	.LASF163
+ 632 0434 C000     		.sleb128 64
+ 633 0436 07       		.uleb128 0x7
+ 634 0437 00000000 		.long	.LASF164
+ 635 043b C100     		.sleb128 65
+ 636 043d 07       		.uleb128 0x7
+ 637 043e 00000000 		.long	.LASF165
+ 638 0442 C200     		.sleb128 66
+ 639 0444 07       		.uleb128 0x7
+ 640 0445 00000000 		.long	.LASF166
+ 641 0449 C300     		.sleb128 67
+ 642 044b 07       		.uleb128 0x7
+ 643 044c 00000000 		.long	.LASF167
+ 644 0450 C400     		.sleb128 68
+ 645 0452 00       		.byte	0x0
+
GAS LISTING /tmp/cc32muHp.s 			page 14
+
+
+ 646 0453 08       		.uleb128 0x8
+ 647 0454 00000000 		.long	.LASF168
+ 648 0458 04       		.byte	0x4
+ 649 0459 04       		.byte	0x4
+ 650 045a 0A01     		.value	0x10a
+ 651 045c 52050000 		.long	0x552
+ 652 0460 07       		.uleb128 0x7
+ 653 0461 00000000 		.long	.LASF169
+ 654 0465 00       		.sleb128 0
+ 655 0466 07       		.uleb128 0x7
+ 656 0467 00000000 		.long	.LASF170
+ 657 046b 3D       		.sleb128 61
+ 658 046c 07       		.uleb128 0x7
+ 659 046d 00000000 		.long	.LASF171
+ 660 0471 3E       		.sleb128 62
+ 661 0472 07       		.uleb128 0x7
+ 662 0473 00000000 		.long	.LASF172
+ 663 0477 3F       		.sleb128 63
+ 664 0478 07       		.uleb128 0x7
+ 665 0479 00000000 		.long	.LASF173
+ 666 047d C000     		.sleb128 64
+ 667 047f 07       		.uleb128 0x7
+ 668 0480 00000000 		.long	.LASF174
+ 669 0484 C100     		.sleb128 65
+ 670 0486 07       		.uleb128 0x7
+ 671 0487 00000000 		.long	.LASF175
+ 672 048b C200     		.sleb128 66
+ 673 048d 07       		.uleb128 0x7
+ 674 048e 00000000 		.long	.LASF176
+ 675 0492 C300     		.sleb128 67
+ 676 0494 07       		.uleb128 0x7
+ 677 0495 00000000 		.long	.LASF177
+ 678 0499 C400     		.sleb128 68
+ 679 049b 07       		.uleb128 0x7
+ 680 049c 00000000 		.long	.LASF178
+ 681 04a0 C500     		.sleb128 69
+ 682 04a2 07       		.uleb128 0x7
+ 683 04a3 00000000 		.long	.LASF179
+ 684 04a7 C600     		.sleb128 70
+ 685 04a9 07       		.uleb128 0x7
+ 686 04aa 00000000 		.long	.LASF180
+ 687 04ae C700     		.sleb128 71
+ 688 04b0 07       		.uleb128 0x7
+ 689 04b1 00000000 		.long	.LASF181
+ 690 04b5 C800     		.sleb128 72
+ 691 04b7 07       		.uleb128 0x7
+ 692 04b8 00000000 		.long	.LASF182
+ 693 04bc C900     		.sleb128 73
+ 694 04be 07       		.uleb128 0x7
+ 695 04bf 00000000 		.long	.LASF183
+ 696 04c3 CA00     		.sleb128 74
+ 697 04c5 07       		.uleb128 0x7
+ 698 04c6 00000000 		.long	.LASF184
+ 699 04ca CB00     		.sleb128 75
+ 700 04cc 07       		.uleb128 0x7
+ 701 04cd 00000000 		.long	.LASF185
+ 702 04d1 CC00     		.sleb128 76
+
GAS LISTING /tmp/cc32muHp.s 			page 15
+
+
+ 703 04d3 07       		.uleb128 0x7
+ 704 04d4 00000000 		.long	.LASF186
+ 705 04d8 CD00     		.sleb128 77
+ 706 04da 07       		.uleb128 0x7
+ 707 04db 00000000 		.long	.LASF187
+ 708 04df CE00     		.sleb128 78
+ 709 04e1 07       		.uleb128 0x7
+ 710 04e2 00000000 		.long	.LASF188
+ 711 04e6 CF00     		.sleb128 79
+ 712 04e8 07       		.uleb128 0x7
+ 713 04e9 00000000 		.long	.LASF189
+ 714 04ed D000     		.sleb128 80
+ 715 04ef 07       		.uleb128 0x7
+ 716 04f0 00000000 		.long	.LASF190
+ 717 04f4 D100     		.sleb128 81
+ 718 04f6 07       		.uleb128 0x7
+ 719 04f7 00000000 		.long	.LASF191
+ 720 04fb D100     		.sleb128 81
+ 721 04fd 07       		.uleb128 0x7
+ 722 04fe 00000000 		.long	.LASF192
+ 723 0502 D200     		.sleb128 82
+ 724 0504 07       		.uleb128 0x7
+ 725 0505 00000000 		.long	.LASF193
+ 726 0509 D300     		.sleb128 83
+ 727 050b 07       		.uleb128 0x7
+ 728 050c 00000000 		.long	.LASF194
+ 729 0510 D400     		.sleb128 84
+ 730 0512 07       		.uleb128 0x7
+ 731 0513 00000000 		.long	.LASF195
+ 732 0517 D500     		.sleb128 85
+ 733 0519 07       		.uleb128 0x7
+ 734 051a 00000000 		.long	.LASF196
+ 735 051e D600     		.sleb128 86
+ 736 0520 07       		.uleb128 0x7
+ 737 0521 00000000 		.long	.LASF197
+ 738 0525 D700     		.sleb128 87
+ 739 0527 07       		.uleb128 0x7
+ 740 0528 00000000 		.long	.LASF198
+ 741 052c D800     		.sleb128 88
+ 742 052e 07       		.uleb128 0x7
+ 743 052f 00000000 		.long	.LASF199
+ 744 0533 D900     		.sleb128 89
+ 745 0535 07       		.uleb128 0x7
+ 746 0536 00000000 		.long	.LASF200
+ 747 053a DA00     		.sleb128 90
+ 748 053c 07       		.uleb128 0x7
+ 749 053d 00000000 		.long	.LASF201
+ 750 0541 DB00     		.sleb128 91
+ 751 0543 07       		.uleb128 0x7
+ 752 0544 00000000 		.long	.LASF202
+ 753 0548 DC00     		.sleb128 92
+ 754 054a 07       		.uleb128 0x7
+ 755 054b 00000000 		.long	.LASF203
+ 756 054f DD00     		.sleb128 93
+ 757 0551 00       		.byte	0x0
+ 758 0552 08       		.uleb128 0x8
+ 759 0553 00000000 		.long	.LASF204
+
GAS LISTING /tmp/cc32muHp.s 			page 16
+
+
+ 760 0557 04       		.byte	0x4
+ 761 0558 04       		.byte	0x4
+ 762 0559 3401     		.value	0x134
+ 763 055b 92060000 		.long	0x692
+ 764 055f 07       		.uleb128 0x7
+ 765 0560 00000000 		.long	.LASF205
+ 766 0564 00       		.sleb128 0
+ 767 0565 07       		.uleb128 0x7
+ 768 0566 00000000 		.long	.LASF206
+ 769 056a 01       		.sleb128 1
+ 770 056b 07       		.uleb128 0x7
+ 771 056c 00000000 		.long	.LASF207
+ 772 0570 02       		.sleb128 2
+ 773 0571 07       		.uleb128 0x7
+ 774 0572 00000000 		.long	.LASF208
+ 775 0576 03       		.sleb128 3
+ 776 0577 07       		.uleb128 0x7
+ 777 0578 00000000 		.long	.LASF209
+ 778 057c 04       		.sleb128 4
+ 779 057d 07       		.uleb128 0x7
+ 780 057e 00000000 		.long	.LASF210
+ 781 0582 05       		.sleb128 5
+ 782 0583 07       		.uleb128 0x7
+ 783 0584 00000000 		.long	.LASF211
+ 784 0588 06       		.sleb128 6
+ 785 0589 07       		.uleb128 0x7
+ 786 058a 00000000 		.long	.LASF212
+ 787 058e 07       		.sleb128 7
+ 788 058f 07       		.uleb128 0x7
+ 789 0590 00000000 		.long	.LASF213
+ 790 0594 08       		.sleb128 8
+ 791 0595 07       		.uleb128 0x7
+ 792 0596 00000000 		.long	.LASF214
+ 793 059a 09       		.sleb128 9
+ 794 059b 07       		.uleb128 0x7
+ 795 059c 00000000 		.long	.LASF215
+ 796 05a0 0A       		.sleb128 10
+ 797 05a1 07       		.uleb128 0x7
+ 798 05a2 00000000 		.long	.LASF216
+ 799 05a6 0B       		.sleb128 11
+ 800 05a7 07       		.uleb128 0x7
+ 801 05a8 00000000 		.long	.LASF217
+ 802 05ac 0C       		.sleb128 12
+ 803 05ad 07       		.uleb128 0x7
+ 804 05ae 00000000 		.long	.LASF218
+ 805 05b2 0D       		.sleb128 13
+ 806 05b3 07       		.uleb128 0x7
+ 807 05b4 00000000 		.long	.LASF219
+ 808 05b8 0E       		.sleb128 14
+ 809 05b9 07       		.uleb128 0x7
+ 810 05ba 00000000 		.long	.LASF220
+ 811 05be 0F       		.sleb128 15
+ 812 05bf 07       		.uleb128 0x7
+ 813 05c0 00000000 		.long	.LASF221
+ 814 05c4 10       		.sleb128 16
+ 815 05c5 07       		.uleb128 0x7
+ 816 05c6 00000000 		.long	.LASF222
+
GAS LISTING /tmp/cc32muHp.s 			page 17
+
+
+ 817 05ca 11       		.sleb128 17
+ 818 05cb 07       		.uleb128 0x7
+ 819 05cc 00000000 		.long	.LASF223
+ 820 05d0 12       		.sleb128 18
+ 821 05d1 07       		.uleb128 0x7
+ 822 05d2 00000000 		.long	.LASF224
+ 823 05d6 13       		.sleb128 19
+ 824 05d7 07       		.uleb128 0x7
+ 825 05d8 00000000 		.long	.LASF225
+ 826 05dc 14       		.sleb128 20
+ 827 05dd 07       		.uleb128 0x7
+ 828 05de 00000000 		.long	.LASF226
+ 829 05e2 15       		.sleb128 21
+ 830 05e3 07       		.uleb128 0x7
+ 831 05e4 00000000 		.long	.LASF227
+ 832 05e8 16       		.sleb128 22
+ 833 05e9 07       		.uleb128 0x7
+ 834 05ea 00000000 		.long	.LASF228
+ 835 05ee 17       		.sleb128 23
+ 836 05ef 07       		.uleb128 0x7
+ 837 05f0 00000000 		.long	.LASF229
+ 838 05f4 18       		.sleb128 24
+ 839 05f5 07       		.uleb128 0x7
+ 840 05f6 00000000 		.long	.LASF230
+ 841 05fa 19       		.sleb128 25
+ 842 05fb 07       		.uleb128 0x7
+ 843 05fc 00000000 		.long	.LASF231
+ 844 0600 1A       		.sleb128 26
+ 845 0601 07       		.uleb128 0x7
+ 846 0602 00000000 		.long	.LASF232
+ 847 0606 1B       		.sleb128 27
+ 848 0607 07       		.uleb128 0x7
+ 849 0608 00000000 		.long	.LASF233
+ 850 060c 1C       		.sleb128 28
+ 851 060d 07       		.uleb128 0x7
+ 852 060e 00000000 		.long	.LASF234
+ 853 0612 1D       		.sleb128 29
+ 854 0613 07       		.uleb128 0x7
+ 855 0614 00000000 		.long	.LASF235
+ 856 0618 1E       		.sleb128 30
+ 857 0619 07       		.uleb128 0x7
+ 858 061a 00000000 		.long	.LASF236
+ 859 061e 1F       		.sleb128 31
+ 860 061f 07       		.uleb128 0x7
+ 861 0620 00000000 		.long	.LASF237
+ 862 0624 20       		.sleb128 32
+ 863 0625 07       		.uleb128 0x7
+ 864 0626 00000000 		.long	.LASF238
+ 865 062a 21       		.sleb128 33
+ 866 062b 07       		.uleb128 0x7
+ 867 062c 00000000 		.long	.LASF239
+ 868 0630 22       		.sleb128 34
+ 869 0631 07       		.uleb128 0x7
+ 870 0632 00000000 		.long	.LASF240
+ 871 0636 23       		.sleb128 35
+ 872 0637 07       		.uleb128 0x7
+ 873 0638 00000000 		.long	.LASF241
+
GAS LISTING /tmp/cc32muHp.s 			page 18
+
+
+ 874 063c 24       		.sleb128 36
+ 875 063d 07       		.uleb128 0x7
+ 876 063e 00000000 		.long	.LASF242
+ 877 0642 25       		.sleb128 37
+ 878 0643 07       		.uleb128 0x7
+ 879 0644 00000000 		.long	.LASF243
+ 880 0648 26       		.sleb128 38
+ 881 0649 07       		.uleb128 0x7
+ 882 064a 00000000 		.long	.LASF244
+ 883 064e 27       		.sleb128 39
+ 884 064f 07       		.uleb128 0x7
+ 885 0650 00000000 		.long	.LASF245
+ 886 0654 28       		.sleb128 40
+ 887 0655 07       		.uleb128 0x7
+ 888 0656 00000000 		.long	.LASF246
+ 889 065a 29       		.sleb128 41
+ 890 065b 07       		.uleb128 0x7
+ 891 065c 00000000 		.long	.LASF247
+ 892 0660 29       		.sleb128 41
+ 893 0661 07       		.uleb128 0x7
+ 894 0662 00000000 		.long	.LASF248
+ 895 0666 2A       		.sleb128 42
+ 896 0667 07       		.uleb128 0x7
+ 897 0668 00000000 		.long	.LASF249
+ 898 066c 2B       		.sleb128 43
+ 899 066d 07       		.uleb128 0x7
+ 900 066e 00000000 		.long	.LASF250
+ 901 0672 2C       		.sleb128 44
+ 902 0673 07       		.uleb128 0x7
+ 903 0674 00000000 		.long	.LASF251
+ 904 0678 2D       		.sleb128 45
+ 905 0679 07       		.uleb128 0x7
+ 906 067a 00000000 		.long	.LASF252
+ 907 067e 2E       		.sleb128 46
+ 908 067f 07       		.uleb128 0x7
+ 909 0680 00000000 		.long	.LASF253
+ 910 0684 2F       		.sleb128 47
+ 911 0685 07       		.uleb128 0x7
+ 912 0686 00000000 		.long	.LASF254
+ 913 068a 30       		.sleb128 48
+ 914 068b 07       		.uleb128 0x7
+ 915 068c 00000000 		.long	.LASF255
+ 916 0690 31       		.sleb128 49
+ 917 0691 00       		.byte	0x0
+ 918 0692 09       		.uleb128 0x9
+ 919 0693 01       		.byte	0x1
+ 920 0694 00000000 		.long	.LASF261
+ 921 0698 01       		.byte	0x1
+ 922 0699 2A       		.byte	0x2a
+ 923 069a 01       		.byte	0x1
+ 924 069b 70000000 		.long	0x70
+ 925 069f 00000000 		.quad	.LFB15
+ 925      00000000 
+ 926 06a7 00000000 		.quad	.LFE15
+ 926      00000000 
+ 927 06af 00000000 		.long	.LLST0
+ 928 06b3 01070000 		.long	0x701
+
GAS LISTING /tmp/cc32muHp.s 			page 19
+
+
+ 929 06b7 0A       		.uleb128 0xa
+ 930 06b8 00000000 		.long	.LASF262
+ 931 06bc 01       		.byte	0x1
+ 932 06bd 0B       		.uleb128 0xb
+ 933 06be 00000000 		.long	.LASF263
+ 934 06c2 01       		.byte	0x1
+ 935 06c3 2A       		.byte	0x2a
+ 936 06c4 01070000 		.long	0x701
+ 937 06c8 02       		.byte	0x2
+ 938 06c9 91       		.byte	0x91
+ 939 06ca 58       		.sleb128 -40
+ 940 06cb 0C       		.uleb128 0xc
+ 941 06cc 726300   		.string	"rc"
+ 942 06cf 01       		.byte	0x1
+ 943 06d0 2C       		.byte	0x2c
+ 944 06d1 70000000 		.long	0x70
+ 945 06d5 02       		.byte	0x2
+ 946 06d6 91       		.byte	0x91
+ 947 06d7 6C       		.sleb128 -20
+ 948 06d8 0D       		.uleb128 0xd
+ 949 06d9 00000000 		.long	.LASF256
+ 950 06dd 1D070000 		.long	0x71d
+ 951 06e1 01       		.byte	0x1
+ 952 06e2 09       		.byte	0x9
+ 953 06e3 03       		.byte	0x3
+ 954 06e4 00000000 		.quad	__PRETTY_FUNCTION__.2444
+ 954      00000000 
+ 955 06ec 0D       		.uleb128 0xd
+ 956 06ed 00000000 		.long	.LASF257
+ 957 06f1 22070000 		.long	0x722
+ 958 06f5 01       		.byte	0x1
+ 959 06f6 09       		.byte	0x9
+ 960 06f7 03       		.byte	0x3
+ 961 06f8 00000000 		.quad	__func__.2445
+ 961      00000000 
+ 962 0700 00       		.byte	0x0
+ 963 0701 0E       		.uleb128 0xe
+ 964 0702 08       		.byte	0x8
+ 965 0703 07070000 		.long	0x707
+ 966 0707 0E       		.uleb128 0xe
+ 967 0708 08       		.byte	0x8
+ 968 0709 B7060000 		.long	0x6b7
+ 969 070d 0F       		.uleb128 0xf
+ 970 070e 7E000000 		.long	0x7e
+ 971 0712 1D070000 		.long	0x71d
+ 972 0716 10       		.uleb128 0x10
+ 973 0717 7B000000 		.long	0x7b
+ 974 071b 1C       		.byte	0x1c
+ 975 071c 00       		.byte	0x0
+ 976 071d 11       		.uleb128 0x11
+ 977 071e 0D070000 		.long	0x70d
+ 978 0722 11       		.uleb128 0x11
+ 979 0723 0D070000 		.long	0x70d
+ 980 0727 00       		.byte	0x0
+ 981              		.section	.debug_abbrev
+ 982 0000 01       		.uleb128 0x1
+ 983 0001 11       		.uleb128 0x11
+
GAS LISTING /tmp/cc32muHp.s 			page 20
+
+
+ 984 0002 01       		.byte	0x1
+ 985 0003 25       		.uleb128 0x25
+ 986 0004 0E       		.uleb128 0xe
+ 987 0005 13       		.uleb128 0x13
+ 988 0006 0B       		.uleb128 0xb
+ 989 0007 03       		.uleb128 0x3
+ 990 0008 0E       		.uleb128 0xe
+ 991 0009 1B       		.uleb128 0x1b
+ 992 000a 0E       		.uleb128 0xe
+ 993 000b 11       		.uleb128 0x11
+ 994 000c 01       		.uleb128 0x1
+ 995 000d 12       		.uleb128 0x12
+ 996 000e 01       		.uleb128 0x1
+ 997 000f 10       		.uleb128 0x10
+ 998 0010 06       		.uleb128 0x6
+ 999 0011 00       		.byte	0x0
+ 1000 0012 00       		.byte	0x0
+ 1001 0013 02       		.uleb128 0x2
+ 1002 0014 24       		.uleb128 0x24
+ 1003 0015 00       		.byte	0x0
+ 1004 0016 0B       		.uleb128 0xb
+ 1005 0017 0B       		.uleb128 0xb
+ 1006 0018 3E       		.uleb128 0x3e
+ 1007 0019 0B       		.uleb128 0xb
+ 1008 001a 03       		.uleb128 0x3
+ 1009 001b 0E       		.uleb128 0xe
+ 1010 001c 00       		.byte	0x0
+ 1011 001d 00       		.byte	0x0
+ 1012 001e 03       		.uleb128 0x3
+ 1013 001f 24       		.uleb128 0x24
+ 1014 0020 00       		.byte	0x0
+ 1015 0021 0B       		.uleb128 0xb
+ 1016 0022 0B       		.uleb128 0xb
+ 1017 0023 3E       		.uleb128 0x3e
+ 1018 0024 0B       		.uleb128 0xb
+ 1019 0025 03       		.uleb128 0x3
+ 1020 0026 08       		.uleb128 0x8
+ 1021 0027 00       		.byte	0x0
+ 1022 0028 00       		.byte	0x0
+ 1023 0029 04       		.uleb128 0x4
+ 1024 002a 16       		.uleb128 0x16
+ 1025 002b 00       		.byte	0x0
+ 1026 002c 03       		.uleb128 0x3
+ 1027 002d 0E       		.uleb128 0xe
+ 1028 002e 3A       		.uleb128 0x3a
+ 1029 002f 0B       		.uleb128 0xb
+ 1030 0030 3B       		.uleb128 0x3b
+ 1031 0031 0B       		.uleb128 0xb
+ 1032 0032 49       		.uleb128 0x49
+ 1033 0033 13       		.uleb128 0x13
+ 1034 0034 00       		.byte	0x0
+ 1035 0035 00       		.byte	0x0
+ 1036 0036 05       		.uleb128 0x5
+ 1037 0037 24       		.uleb128 0x24
+ 1038 0038 00       		.byte	0x0
+ 1039 0039 0B       		.uleb128 0xb
+ 1040 003a 0B       		.uleb128 0xb
+
GAS LISTING /tmp/cc32muHp.s 			page 21
+
+
+ 1041 003b 3E       		.uleb128 0x3e
+ 1042 003c 0B       		.uleb128 0xb
+ 1043 003d 00       		.byte	0x0
+ 1044 003e 00       		.byte	0x0
+ 1045 003f 06       		.uleb128 0x6
+ 1046 0040 04       		.uleb128 0x4
+ 1047 0041 01       		.byte	0x1
+ 1048 0042 03       		.uleb128 0x3
+ 1049 0043 0E       		.uleb128 0xe
+ 1050 0044 0B       		.uleb128 0xb
+ 1051 0045 0B       		.uleb128 0xb
+ 1052 0046 3A       		.uleb128 0x3a
+ 1053 0047 0B       		.uleb128 0xb
+ 1054 0048 3B       		.uleb128 0x3b
+ 1055 0049 0B       		.uleb128 0xb
+ 1056 004a 01       		.uleb128 0x1
+ 1057 004b 13       		.uleb128 0x13
+ 1058 004c 00       		.byte	0x0
+ 1059 004d 00       		.byte	0x0
+ 1060 004e 07       		.uleb128 0x7
+ 1061 004f 28       		.uleb128 0x28
+ 1062 0050 00       		.byte	0x0
+ 1063 0051 03       		.uleb128 0x3
+ 1064 0052 0E       		.uleb128 0xe
+ 1065 0053 1C       		.uleb128 0x1c
+ 1066 0054 0D       		.uleb128 0xd
+ 1067 0055 00       		.byte	0x0
+ 1068 0056 00       		.byte	0x0
+ 1069 0057 08       		.uleb128 0x8
+ 1070 0058 04       		.uleb128 0x4
+ 1071 0059 01       		.byte	0x1
+ 1072 005a 03       		.uleb128 0x3
+ 1073 005b 0E       		.uleb128 0xe
+ 1074 005c 0B       		.uleb128 0xb
+ 1075 005d 0B       		.uleb128 0xb
+ 1076 005e 3A       		.uleb128 0x3a
+ 1077 005f 0B       		.uleb128 0xb
+ 1078 0060 3B       		.uleb128 0x3b
+ 1079 0061 05       		.uleb128 0x5
+ 1080 0062 01       		.uleb128 0x1
+ 1081 0063 13       		.uleb128 0x13
+ 1082 0064 00       		.byte	0x0
+ 1083 0065 00       		.byte	0x0
+ 1084 0066 09       		.uleb128 0x9
+ 1085 0067 2E       		.uleb128 0x2e
+ 1086 0068 01       		.byte	0x1
+ 1087 0069 3F       		.uleb128 0x3f
+ 1088 006a 0C       		.uleb128 0xc
+ 1089 006b 03       		.uleb128 0x3
+ 1090 006c 0E       		.uleb128 0xe
+ 1091 006d 3A       		.uleb128 0x3a
+ 1092 006e 0B       		.uleb128 0xb
+ 1093 006f 3B       		.uleb128 0x3b
+ 1094 0070 0B       		.uleb128 0xb
+ 1095 0071 27       		.uleb128 0x27
+ 1096 0072 0C       		.uleb128 0xc
+ 1097 0073 49       		.uleb128 0x49
+
GAS LISTING /tmp/cc32muHp.s 			page 22
+
+
+ 1098 0074 13       		.uleb128 0x13
+ 1099 0075 11       		.uleb128 0x11
+ 1100 0076 01       		.uleb128 0x1
+ 1101 0077 12       		.uleb128 0x12
+ 1102 0078 01       		.uleb128 0x1
+ 1103 0079 40       		.uleb128 0x40
+ 1104 007a 06       		.uleb128 0x6
+ 1105 007b 01       		.uleb128 0x1
+ 1106 007c 13       		.uleb128 0x13
+ 1107 007d 00       		.byte	0x0
+ 1108 007e 00       		.byte	0x0
+ 1109 007f 0A       		.uleb128 0xa
+ 1110 0080 13       		.uleb128 0x13
+ 1111 0081 00       		.byte	0x0
+ 1112 0082 03       		.uleb128 0x3
+ 1113 0083 0E       		.uleb128 0xe
+ 1114 0084 3C       		.uleb128 0x3c
+ 1115 0085 0C       		.uleb128 0xc
+ 1116 0086 00       		.byte	0x0
+ 1117 0087 00       		.byte	0x0
+ 1118 0088 0B       		.uleb128 0xb
+ 1119 0089 05       		.uleb128 0x5
+ 1120 008a 00       		.byte	0x0
+ 1121 008b 03       		.uleb128 0x3
+ 1122 008c 0E       		.uleb128 0xe
+ 1123 008d 3A       		.uleb128 0x3a
+ 1124 008e 0B       		.uleb128 0xb
+ 1125 008f 3B       		.uleb128 0x3b
+ 1126 0090 0B       		.uleb128 0xb
+ 1127 0091 49       		.uleb128 0x49
+ 1128 0092 13       		.uleb128 0x13
+ 1129 0093 02       		.uleb128 0x2
+ 1130 0094 0A       		.uleb128 0xa
+ 1131 0095 00       		.byte	0x0
+ 1132 0096 00       		.byte	0x0
+ 1133 0097 0C       		.uleb128 0xc
+ 1134 0098 34       		.uleb128 0x34
+ 1135 0099 00       		.byte	0x0
+ 1136 009a 03       		.uleb128 0x3
+ 1137 009b 08       		.uleb128 0x8
+ 1138 009c 3A       		.uleb128 0x3a
+ 1139 009d 0B       		.uleb128 0xb
+ 1140 009e 3B       		.uleb128 0x3b
+ 1141 009f 0B       		.uleb128 0xb
+ 1142 00a0 49       		.uleb128 0x49
+ 1143 00a1 13       		.uleb128 0x13
+ 1144 00a2 02       		.uleb128 0x2
+ 1145 00a3 0A       		.uleb128 0xa
+ 1146 00a4 00       		.byte	0x0
+ 1147 00a5 00       		.byte	0x0
+ 1148 00a6 0D       		.uleb128 0xd
+ 1149 00a7 34       		.uleb128 0x34
+ 1150 00a8 00       		.byte	0x0
+ 1151 00a9 03       		.uleb128 0x3
+ 1152 00aa 0E       		.uleb128 0xe
+ 1153 00ab 49       		.uleb128 0x49
+ 1154 00ac 13       		.uleb128 0x13
+
GAS LISTING /tmp/cc32muHp.s 			page 23
+
+
+ 1155 00ad 34       		.uleb128 0x34
+ 1156 00ae 0C       		.uleb128 0xc
+ 1157 00af 02       		.uleb128 0x2
+ 1158 00b0 0A       		.uleb128 0xa
+ 1159 00b1 00       		.byte	0x0
+ 1160 00b2 00       		.byte	0x0
+ 1161 00b3 0E       		.uleb128 0xe
+ 1162 00b4 0F       		.uleb128 0xf
+ 1163 00b5 00       		.byte	0x0
+ 1164 00b6 0B       		.uleb128 0xb
+ 1165 00b7 0B       		.uleb128 0xb
+ 1166 00b8 49       		.uleb128 0x49
+ 1167 00b9 13       		.uleb128 0x13
+ 1168 00ba 00       		.byte	0x0
+ 1169 00bb 00       		.byte	0x0
+ 1170 00bc 0F       		.uleb128 0xf
+ 1171 00bd 01       		.uleb128 0x1
+ 1172 00be 01       		.byte	0x1
+ 1173 00bf 49       		.uleb128 0x49
+ 1174 00c0 13       		.uleb128 0x13
+ 1175 00c1 01       		.uleb128 0x1
+ 1176 00c2 13       		.uleb128 0x13
+ 1177 00c3 00       		.byte	0x0
+ 1178 00c4 00       		.byte	0x0
+ 1179 00c5 10       		.uleb128 0x10
+ 1180 00c6 21       		.uleb128 0x21
+ 1181 00c7 00       		.byte	0x0
+ 1182 00c8 49       		.uleb128 0x49
+ 1183 00c9 13       		.uleb128 0x13
+ 1184 00ca 2F       		.uleb128 0x2f
+ 1185 00cb 0B       		.uleb128 0xb
+ 1186 00cc 00       		.byte	0x0
+ 1187 00cd 00       		.byte	0x0
+ 1188 00ce 11       		.uleb128 0x11
+ 1189 00cf 26       		.uleb128 0x26
+ 1190 00d0 00       		.byte	0x0
+ 1191 00d1 49       		.uleb128 0x49
+ 1192 00d2 13       		.uleb128 0x13
+ 1193 00d3 00       		.byte	0x0
+ 1194 00d4 00       		.byte	0x0
+ 1195 00d5 00       		.byte	0x0
+ 1196              		.section	.debug_pubnames,"", at progbits
+ 1197 0000 2F000000 		.long	0x2f
+ 1198 0004 0200     		.value	0x2
+ 1199 0006 00000000 		.long	.Ldebug_info0
+ 1200 000a 28070000 		.long	0x728
+ 1201 000e 92060000 		.long	0x692
+ 1202 0012 4B4E756C 		.string	"KNullBlockCipherVecAesNiMake"
+ 1202      6C426C6F 
+ 1202      636B4369 
+ 1202      70686572 
+ 1202      56656341 
+ 1203 002f 00000000 		.long	0x0
+ 1204              		.section	.debug_aranges,"", at progbits
+ 1205 0000 2C000000 		.long	0x2c
+ 1206 0004 0200     		.value	0x2
+ 1207 0006 00000000 		.long	.Ldebug_info0
+
GAS LISTING /tmp/cc32muHp.s 			page 24
+
+
+ 1208 000a 08       		.byte	0x8
+ 1209 000b 00       		.byte	0x0
+ 1210 000c 0000     		.value	0x0
+ 1211 000e 0000     		.value	0x0
+ 1212 0010 00000000 		.quad	.Ltext0
+ 1212      00000000 
+ 1213 0018 65000000 		.quad	.Letext0-.Ltext0
+ 1213      00000000 
+ 1214 0020 00000000 		.quad	0x0
+ 1214      00000000 
+ 1215 0028 00000000 		.quad	0x0
+ 1215      00000000 
+ 1216              		.section	.debug_str,"MS", at progbits,1
+ 1217              	.LASF184:
+ 1218 0000 72635461 		.string	"rcTag"
+ 1218      6700
+ 1219              	.LASF30:
+ 1220 0006 72635646 		.string	"rcVFS"
+ 1220      5300
+ 1221              	.LASF234:
+ 1222 000c 7263556E 		.string	"rcUnauthorized"
+ 1222      61757468 
+ 1222      6F72697A 
+ 1222      656400
+ 1223              	.LASF258:
+ 1224 001b 474E5520 		.string	"GNU C 4.4.2"
+ 1224      4320342E 
+ 1224      342E3200 
+ 1225              	.LASF218:
+ 1226 0027 7263496E 		.string	"rcInconsistent"
+ 1226      636F6E73 
+ 1226      69737465 
+ 1226      6E7400
+ 1227              	.LASF19:
+ 1228 0036 72634442 		.string	"rcDB"
+ 1228      00
+ 1229              	.LASF128:
+ 1230 003b 7263436F 		.string	"rcCopying"
+ 1230      7079696E 
+ 1230      6700
+ 1231              	.LASF131:
+ 1232 0045 7263506F 		.string	"rcPositioning"
+ 1232      73697469 
+ 1232      6F6E696E 
+ 1232      6700
+ 1233              	.LASF226:
+ 1234 0053 72634578 		.string	"rcExcessive"
+ 1234      63657373 
+ 1234      69766500 
+ 1235              	.LASF222:
+ 1236 005f 72634361 		.string	"rcCanceled"
+ 1236      6E63656C 
+ 1236      656400
+ 1237              	.LASF156:
+ 1238 006a 72634C61 		.string	"rcLastContext_v1_0"
+ 1238      7374436F 
+ 1238      6E746578 
+
GAS LISTING /tmp/cc32muHp.s 			page 25
+
+
+ 1238      745F7631 
+ 1238      5F3000
+ 1239              	.LASF167:
+ 1240 007d 72634C61 		.string	"rcLastContext_v1_1"
+ 1240      7374436F 
+ 1240      6E746578 
+ 1240      745F7631 
+ 1240      5F3100
+ 1241              	.LASF90:
+ 1242 0090 7263456E 		.string	"rcEncryptionKey"
+ 1242      63727970 
+ 1242      74696F6E 
+ 1242      4B657900 
+ 1243              	.LASF97:
+ 1244 00a0 5243436F 		.string	"RCContext"
+ 1244      6E746578 
+ 1244      7400
+ 1245              	.LASF92:
+ 1246 00aa 7263436D 		.string	"rcCmd"
+ 1246      6400
+ 1247              	.LASF242:
+ 1248 00b0 72634475 		.string	"rcDuplicate"
+ 1248      706C6963 
+ 1248      61746500 
+ 1249              	.LASF202:
+ 1250 00bc 72635265 		.string	"rcRefcount"
+ 1250      66636F75 
+ 1250      6E7400
+ 1251              	.LASF91:
+ 1252 00c7 7263526E 		.string	"rcRng"
+ 1252      6700
+ 1253              	.LASF34:
+ 1254 00cd 72634E6F 		.string	"rcNoTarg"
+ 1254      54617267 
+ 1254      00
+ 1255              	.LASF204:
+ 1256 00d6 52435374 		.string	"RCState"
+ 1256      61746500 
+ 1257              	.LASF5:
+ 1258 00de 756E7369 		.string	"unsigned int"
+ 1258      676E6564 
+ 1258      20696E74 
+ 1258      00
+ 1259              	.LASF89:
+ 1260 00eb 72635072 		.string	"rcProduction"
+ 1260      6F647563 
+ 1260      74696F6E 
+ 1260      00
+ 1261              	.LASF69:
+ 1262 00f8 72635061 		.string	"rcPagemap"
+ 1262      67656D61 
+ 1262      7000
+ 1263              	.LASF185:
+ 1264 0102 72635265 		.string	"rcResources"
+ 1264      736F7572 
+ 1264      63657300 
+ 1265              	.LASF50:
+
GAS LISTING /tmp/cc32muHp.s 			page 26
+
+
+ 1266 010e 7263586D 		.string	"rcXmlDoc"
+ 1266      6C446F63 
+ 1266      00
+ 1267              	.LASF37:
+ 1268 0117 7263546F 		.string	"rcTocEntry"
+ 1268      63456E74 
+ 1268      727900
+ 1269              	.LASF114:
+ 1270 0122 72635265 		.string	"rcRemoving"
+ 1270      6D6F7669 
+ 1270      6E6700
+ 1271              	.LASF192:
+ 1272 012d 72634D6F 		.string	"rcMode"
+ 1272      646500
+ 1273              	.LASF119:
+ 1274 0134 7263436C 		.string	"rcClosing"
+ 1274      6F73696E 
+ 1274      6700
+ 1275              	.LASF72:
+ 1276 013e 72635175 		.string	"rcQueue"
+ 1276      65756500 
+ 1277              	.LASF120:
+ 1278 0146 72635265 		.string	"rcResizing"
+ 1278      73697A69 
+ 1278      6E6700
+ 1279              	.LASF171:
+ 1280 0151 72635365 		.string	"rcSelf"
+ 1280      6C6600
+ 1281              	.LASF214:
+ 1282 0158 72634465 		.string	"rcDestroyed"
+ 1282      7374726F 
+ 1282      79656400 
+ 1283              	.LASF162:
+ 1284 0164 7263496E 		.string	"rcInitializing"
+ 1284      69746961 
+ 1284      6C697A69 
+ 1284      6E6700
+ 1285              	.LASF168:
+ 1286 0173 52434F62 		.string	"RCObject"
+ 1286      6A656374 
+ 1286      00
+ 1287              	.LASF146:
+ 1288 017c 72634174 		.string	"rcAttaching"
+ 1288      74616368 
+ 1288      696E6700 
+ 1289              	.LASF219:
+ 1290 0188 72634275 		.string	"rcBusy"
+ 1290      737900
+ 1291              	.LASF74:
+ 1292 018f 72635363 		.string	"rcSchema"
+ 1292      68656D61 
+ 1292      00
+ 1293              	.LASF138:
+ 1294 0198 72634875 		.string	"rcHuffmanCoding"
+ 1294      66666D61 
+ 1294      6E436F64 
+ 1294      696E6700 
+
GAS LISTING /tmp/cc32muHp.s 			page 27
+
+
+ 1295              	.LASF123:
+ 1296 01a8 7263436F 		.string	"rcCommitting"
+ 1296      6D6D6974 
+ 1296      74696E67 
+ 1296      00
+ 1297              	.LASF75:
+ 1298 01b5 72635365 		.string	"rcSemaphore"
+ 1298      6D617068 
+ 1298      6F726500 
+ 1299              	.LASF232:
+ 1300 01c1 72634465 		.string	"rcDetached"
+ 1300      74616368 
+ 1300      656400
+ 1301              	.LASF188:
+ 1302 01cc 7263526F 		.string	"rcRow"
+ 1302      7700
+ 1303              	.LASF239:
+ 1304 01d2 7263546F 		.string	"rcTooShort"
+ 1304      6F53686F 
+ 1304      727400
+ 1305              	.LASF15:
+ 1306 01dd 72634646 		.string	"rcFF"
+ 1306      00
+ 1307              	.LASF16:
+ 1308 01e2 72634653 		.string	"rcFS"
+ 1308      00
+ 1309              	.LASF250:
+ 1310 01e7 7263556E 		.string	"rcUndefined"
+ 1310      64656669 
+ 1310      6E656400 
+ 1311              	.LASF132:
+ 1312 01f3 72635061 		.string	"rcPacking"
+ 1312      636B696E 
+ 1312      6700
+ 1313              	.LASF216:
+ 1314 01fd 7263436F 		.string	"rcCorrupt"
+ 1314      72727570 
+ 1314      7400
+ 1315              	.LASF7:
+ 1316 0207 75696E74 		.string	"uint32_t"
+ 1316      33325F74 
+ 1316      00
+ 1317              	.LASF133:
+ 1318 0210 7263556E 		.string	"rcUnpacking"
+ 1318      7061636B 
+ 1318      696E6700 
+ 1319              	.LASF51:
+ 1320 021c 72634669 		.string	"rcFile"
+ 1320      6C6500
+ 1321              	.LASF39:
+ 1322 0223 72634174 		.string	"rcAttr"
+ 1322      747200
+ 1323              	.LASF199:
+ 1324 022a 7263456E 		.string	"rcEnvironment"
+ 1324      7669726F 
+ 1324      6E6D656E 
+ 1324      7400
+
GAS LISTING /tmp/cc32muHp.s 			page 28
+
+
+ 1325              	.LASF149:
+ 1326 0238 72634650 		.string	"rcFPCoding"
+ 1326      436F6469 
+ 1326      6E6700
+ 1327              	.LASF80:
+ 1328 0243 72635469 		.string	"rcTimeout"
+ 1328      6D656F75 
+ 1328      7400
+ 1329              	.LASF62:
+ 1330 024d 72634D44 		.string	"rcMD5SumFmt"
+ 1330      3553756D 
+ 1330      466D7400 
+ 1331              	.LASF137:
+ 1332 0259 72634578 		.string	"rcExecuting"
+ 1332      65637574 
+ 1332      696E6700 
+ 1333              	.LASF145:
+ 1334 0265 72635761 		.string	"rcWaiting"
+ 1334      6974696E 
+ 1334      6700
+ 1335              	.LASF176:
+ 1336 026f 7263466F 		.string	"rcFormat"
+ 1336      726D6174 
+ 1336      00
+ 1337              	.LASF181:
+ 1338 0278 7263436F 		.string	"rcConstraint"
+ 1338      6E737472 
+ 1338      61696E74 
+ 1338      00
+ 1339              	.LASF22:
+ 1340 0285 7263584D 		.string	"rcXML"
+ 1340      4C00
+ 1341              	.LASF45:
+ 1342 028b 7263436F 		.string	"rcCondition"
+ 1342      6E646974 
+ 1342      696F6E00 
+ 1343              	.LASF205:
+ 1344 0297 72634E6F 		.string	"rcNoErr"
+ 1344      45727200 
+ 1345              	.LASF42:
+ 1346 029f 72634275 		.string	"rcBuffer"
+ 1346      66666572 
+ 1346      00
+ 1347              	.LASF142:
+ 1348 02a8 72635061 		.string	"rcParsing"
+ 1348      7273696E 
+ 1348      6700
+ 1349              	.LASF41:
+ 1350 02b2 7263426C 		.string	"rcBlob"
+ 1350      6F6200
+ 1351              	.LASF240:
+ 1352 02b9 7263546F 		.string	"rcTooLong"
+ 1352      6F4C6F6E 
+ 1352      6700
+ 1353              	.LASF24:
+ 1354 02c3 72634C61 		.string	"rcLastModule_v1_0"
+ 1354      73744D6F 
+
GAS LISTING /tmp/cc32muHp.s 			page 29
+
+
+ 1354      64756C65 
+ 1354      5F76315F 
+ 1354      3000
+ 1355              	.LASF31:
+ 1356 02d5 72634C61 		.string	"rcLastModule_v1_1"
+ 1356      73744D6F 
+ 1356      64756C65 
+ 1356      5F76315F 
+ 1356      3100
+ 1357              	.LASF64:
+ 1358 02e7 72634D65 		.string	"rcMetadata"
+ 1358      74616461 
+ 1358      746100
+ 1359              	.LASF261:
+ 1360 02f2 4B4E756C 		.string	"KNullBlockCipherVecAesNiMake"
+ 1360      6C426C6F 
+ 1360      636B4369 
+ 1360      70686572 
+ 1360      56656341 
+ 1361              	.LASF236:
+ 1362 030f 72635772 		.string	"rcWriteonly"
+ 1362      6974656F 
+ 1362      6E6C7900 
+ 1363              	.LASF115:
+ 1364 031b 7263436C 		.string	"rcClearing"
+ 1364      65617269 
+ 1364      6E6700
+ 1365              	.LASF55:
+ 1366 0326 7263466F 		.string	"rcFormatter"
+ 1366      726D6174 
+ 1366      74657200 
+ 1367              	.LASF248:
+ 1368 0332 72634F75 		.string	"rcOutoforder"
+ 1368      746F666F 
+ 1368      72646572 
+ 1368      00
+ 1369              	.LASF70:
+ 1370 033f 72635061 		.string	"rcPath"
+ 1370      746800
+ 1371              	.LASF189:
+ 1372 0346 72634C69 		.string	"rcLibrary"
+ 1372      62726172 
+ 1372      7900
+ 1373              	.LASF141:
+ 1374 0350 7263546F 		.string	"rcTokenizing"
+ 1374      6B656E69 
+ 1374      7A696E67 
+ 1374      00
+ 1375              	.LASF198:
+ 1376 035d 72634572 		.string	"rcError"
+ 1376      726F7200 
+ 1377              	.LASF18:
+ 1378 0365 72635846 		.string	"rcXF"
+ 1378      00
+ 1379              	.LASF183:
+ 1380 036a 72634D65 		.string	"rcMessage"
+ 1380      73736167 
+
GAS LISTING /tmp/cc32muHp.s 			page 30
+
+
+ 1380      6500
+ 1381              	.LASF237:
+ 1382 0374 72634E6F 		.string	"rcNoPerm"
+ 1382      5065726D 
+ 1382      00
+ 1383              	.LASF54:
+ 1384 037d 72634675 		.string	"rcFunction"
+ 1384      6E637469 
+ 1384      6F6E00
+ 1385              	.LASF208:
+ 1386 0388 7263556E 		.string	"rcUnsupported"
+ 1386      73757070 
+ 1386      6F727465 
+ 1386      6400
+ 1387              	.LASF43:
+ 1388 0396 72634368 		.string	"rcChar"
+ 1388      617200
+ 1389              	.LASF174:
+ 1390 039d 72634D65 		.string	"rcMemory"
+ 1390      6D6F7279 
+ 1390      00
+ 1391              	.LASF194:
+ 1392 03a6 72634372 		.string	"rcCrc"
+ 1392      6300
+ 1393              	.LASF241:
+ 1394 03ac 7263546F 		.string	"rcTooBig"
+ 1394      6F426967 
+ 1394      00
+ 1395              	.LASF179:
+ 1396 03b5 72634964 		.string	"rcId"
+ 1396      00
+ 1397              	.LASF82:
+ 1398 03ba 72635472 		.string	"rcTree"
+ 1398      656500
+ 1399              	.LASF253:
+ 1400 03c1 72634E6F 		.string	"rcNotAvailable"
+ 1400      74417661 
+ 1400      696C6162 
+ 1400      6C6500
+ 1401              	.LASF93:
+ 1402 03d0 72634461 		.string	"rcData"
+ 1402      746100
+ 1403              	.LASF257:
+ 1404 03d7 5F5F6675 		.string	"__func__"
+ 1404      6E635F5F 
+ 1404      00
+ 1405              	.LASF254:
+ 1406 03e0 72635772 		.string	"rcWrongType"
+ 1406      6F6E6754 
+ 1406      79706500 
+ 1407              	.LASF56:
+ 1408 03ec 72634675 		.string	"rcFunctParam"
+ 1408      6E637450 
+ 1408      6172616D 
+ 1408      00
+ 1409              	.LASF63:
+ 1410 03f9 72634D65 		.string	"rcMemMap"
+
GAS LISTING /tmp/cc32muHp.s 			page 31
+
+
+ 1410      6D4D6170 
+ 1410      00
+ 1411              	.LASF9:
+ 1412 0402 63686172 		.string	"char"
+ 1412      00
+ 1413              	.LASF211:
+ 1414 0407 7263416D 		.string	"rcAmbiguous"
+ 1414      62696775 
+ 1414      6F757300 
+ 1415              	.LASF244:
+ 1416 0413 72634967 		.string	"rcIgnored"
+ 1416      6E6F7265 
+ 1416      6400
+ 1417              	.LASF109:
+ 1418 041d 72635265 		.string	"rcRenaming"
+ 1418      6E616D69 
+ 1418      6E6700
+ 1419              	.LASF121:
+ 1420 0428 72635265 		.string	"rcReading"
+ 1420      6164696E 
+ 1420      6700
+ 1421              	.LASF58:
+ 1422 0432 7263496E 		.string	"rcIndex"
+ 1422      64657800 
+ 1423              	.LASF104:
+ 1424 043a 72634C69 		.string	"rcListing"
+ 1424      7374696E 
+ 1424      6700
+ 1425              	.LASF178:
+ 1426 0444 7263496E 		.string	"rcInterface"
+ 1426      74657266 
+ 1426      61636500 
+ 1427              	.LASF107:
+ 1428 0450 72634C6F 		.string	"rcLocking"
+ 1428      636B696E 
+ 1428      6700
+ 1429              	.LASF60:
+ 1430 045a 72634C6F 		.string	"rcLock"
+ 1430      636B00
+ 1431              	.LASF108:
+ 1432 0461 7263556E 		.string	"rcUnlocking"
+ 1432      6C6F636B 
+ 1432      696E6700 
+ 1433              	.LASF85:
+ 1434 046d 72635665 		.string	"rcVector"
+ 1434      63746F72 
+ 1434      00
+ 1435              	.LASF122:
+ 1436 0476 72635772 		.string	"rcWriting"
+ 1436      6974696E 
+ 1436      6700
+ 1437              	.LASF53:
+ 1438 0480 72634669 		.string	"rcFileFormat"
+ 1438      6C65466F 
+ 1438      726D6174 
+ 1438      00
+ 1439              	.LASF21:
+
GAS LISTING /tmp/cc32muHp.s 			page 32
+
+
+ 1440 048d 72634170 		.string	"rcApp"
+ 1440      7000
+ 1441              	.LASF125:
+ 1442 0493 72635265 		.string	"rcResetting"
+ 1442      73657474 
+ 1442      696E6700 
+ 1443              	.LASF71:
+ 1444 049f 72635072 		.string	"rcProcess"
+ 1444      6F636573 
+ 1444      7300
+ 1445              	.LASF106:
+ 1446 04a9 72635265 		.string	"rcResolving"
+ 1446      736F6C76 
+ 1446      696E6700 
+ 1447              	.LASF12:
+ 1448 04b5 72635465 		.string	"rcText"
+ 1448      787400
+ 1449              	.LASF66:
+ 1450 04bc 72634E61 		.string	"rcNamelist"
+ 1450      6D656C69 
+ 1450      737400
+ 1451              	.LASF229:
+ 1452 04c7 72634E6F 		.string	"rcNotFound"
+ 1452      74466F75 
+ 1452      6E6400
+ 1453              	.LASF139:
+ 1454 04d2 72635265 		.string	"rcReindexing"
+ 1454      696E6465 
+ 1454      78696E67 
+ 1454      00
+ 1455              	.LASF87:
+ 1456 04df 72634578 		.string	"rcExpression"
+ 1456      70726573 
+ 1456      73696F6E 
+ 1456      00
+ 1457              	.LASF235:
+ 1458 04ec 72635265 		.string	"rcReadonly"
+ 1458      61646F6E 
+ 1458      6C7900
+ 1459              	.LASF95:
+ 1460 04f7 72635572 		.string	"rcUri"
+ 1460      6900
+ 1461              	.LASF100:
+ 1462 04fd 7263436F 		.string	"rcConstructing"
+ 1462      6E737472 
+ 1462      75637469 
+ 1462      6E6700
+ 1463              	.LASF173:
+ 1464 050c 72634F66 		.string	"rcOffset"
+ 1464      66736574 
+ 1464      00
+ 1465              	.LASF233:
+ 1466 0515 72634465 		.string	"rcDeadlock"
+ 1466      61646C6F 
+ 1466      636B00
+ 1467              	.LASF47:
+ 1468 0520 72634461 		.string	"rcDatabase"
+
GAS LISTING /tmp/cc32muHp.s 			page 33
+
+
+ 1468      74616261 
+ 1468      736500
+ 1469              	.LASF127:
+ 1470 052b 72634672 		.string	"rcFreezing"
+ 1470      65657A69 
+ 1470      6E6700
+ 1471              	.LASF217:
+ 1472 0536 7263496E 		.string	"rcIncorrect"
+ 1472      636F7272 
+ 1472      65637400 
+ 1473              	.LASF206:
+ 1474 0542 7263446F 		.string	"rcDone"
+ 1474      6E6500
+ 1475              	.LASF157:
+ 1476 0549 7263466C 		.string	"rcFlushing"
+ 1476      75736869 
+ 1476      6E6700
+ 1477              	.LASF159:
+ 1478 0554 7263456E 		.string	"rcEncrypting"
+ 1478      63727970 
+ 1478      74696E67 
+ 1478      00
+ 1479              	.LASF251:
+ 1480 0561 7263556E 		.string	"rcUnequal"
+ 1480      65717561 
+ 1480      6C00
+ 1481              	.LASF10:
+ 1482 056b 72634578 		.string	"rcExe"
+ 1482      6500
+ 1483              	.LASF38:
+ 1484 0571 72634172 		.string	"rcArgv"
+ 1484      677600
+ 1485              	.LASF147:
+ 1486 0578 72634465 		.string	"rcDetaching"
+ 1486      74616368 
+ 1486      696E6700 
+ 1487              	.LASF99:
+ 1488 0584 72634361 		.string	"rcCasting"
+ 1488      7374696E 
+ 1488      6700
+ 1489              	.LASF110:
+ 1490 058e 7263416C 		.string	"rcAliasing"
+ 1490      69617369 
+ 1490      6E6700
+ 1491              	.LASF49:
+ 1492 0599 7263446F 		.string	"rcDoc"
+ 1492      6300
+ 1493              	.LASF98:
+ 1494 059f 7263416C 		.string	"rcAllocating"
+ 1494      6C6F6361 
+ 1494      74696E67 
+ 1494      00
+ 1495              	.LASF212:
+ 1496 05ac 72634E75 		.string	"rcNull"
+ 1496      6C6C00
+ 1497              	.LASF180:
+ 1498 05b3 72635261 		.string	"rcRange"
+
GAS LISTING /tmp/cc32muHp.s 			page 34
+
+
+ 1498      6E676500 
+ 1499              	.LASF35:
+ 1500 05bb 72634172 		.string	"rcArc"
+ 1500      6300
+ 1501              	.LASF252:
+ 1502 05c1 72634661 		.string	"rcFailed"
+ 1502      696C6564 
+ 1502      00
+ 1503              	.LASF23:
+ 1504 05ca 72635352 		.string	"rcSRA"
+ 1504      4100
+ 1505              	.LASF152:
+ 1506 05d0 72635365 		.string	"rcSearching"
+ 1506      61726368 
+ 1506      696E6700 
+ 1507              	.LASF225:
+ 1508 05dc 7263496E 		.string	"rcInsufficient"
+ 1508      73756666 
+ 1508      69636965 
+ 1508      6E7400
+ 1509              	.LASF165:
+ 1510 05eb 72635072 		.string	"rcProcessing"
+ 1510      6F636573 
+ 1510      73696E67 
+ 1510      00
+ 1511              	.LASF144:
+ 1512 05f8 72635369 		.string	"rcSignaling"
+ 1512      676E616C 
+ 1512      696E6700 
+ 1513              	.LASF135:
+ 1514 0604 72634465 		.string	"rcDecoding"
+ 1514      636F6469 
+ 1514      6E6700
+ 1515              	.LASF76:
+ 1516 060f 72635374 		.string	"rcStorage"
+ 1516      6F726167 
+ 1516      6500
+ 1517              	.LASF213:
+ 1518 0619 72634261 		.string	"rcBadVersion"
+ 1518      64566572 
+ 1518      73696F6E 
+ 1518      00
+ 1519              	.LASF210:
+ 1520 0626 7263556E 		.string	"rcUnrecognized"
+ 1520      7265636F 
+ 1520      676E697A 
+ 1520      656400
+ 1521              	.LASF161:
+ 1522 0635 7263436F 		.string	"rcComparing"
+ 1522      6D706172 
+ 1522      696E6700 
+ 1523              	.LASF65:
+ 1524 0641 72634D67 		.string	"rcMgr"
+ 1524      7200
+ 1525              	.LASF154:
+ 1526 0647 72634576 		.string	"rcEvaluating"
+ 1526      616C7561 
+
GAS LISTING /tmp/cc32muHp.s 			page 35
+
+
+ 1526      74696E67 
+ 1526      00
+ 1527              	.LASF163:
+ 1528 0654 72635265 		.string	"rcRetrieving"
+ 1528      74726965 
+ 1528      76696E67 
+ 1528      00
+ 1529              	.LASF116:
+ 1530 0661 72635570 		.string	"rcUpdating"
+ 1530      64617469 
+ 1530      6E6700
+ 1531              	.LASF83:
+ 1532 066c 72635472 		.string	"rcTrie"
+ 1532      696500
+ 1533              	.LASF201:
+ 1534 0673 72635369 		.string	"rcSize"
+ 1534      7A6500
+ 1535              	.LASF150:
+ 1536 067a 72634D75 		.string	"rcMultiplexing"
+ 1536      6C746970 
+ 1536      6C657869 
+ 1536      6E6700
+ 1537              	.LASF243:
+ 1538 0689 72634F75 		.string	"rcOutOfKDirectory"
+ 1538      744F664B 
+ 1538      44697265 
+ 1538      63746F72 
+ 1538      7900
+ 1539              	.LASF40:
+ 1540 069b 72634261 		.string	"rcBarrier"
+ 1540      72726965 
+ 1540      7200
+ 1541              	.LASF77:
+ 1542 06a5 72635374 		.string	"rcString"
+ 1542      72696E67 
+ 1542      00
+ 1543              	.LASF193:
+ 1544 06ae 7263456E 		.string	"rcEncryption"
+ 1544      63727970 
+ 1544      74696F6E 
+ 1544      00
+ 1545              	.LASF25:
+ 1546 06bb 72634B46 		.string	"rcKFG"
+ 1546      4700
+ 1547              	.LASF46:
+ 1548 06c1 72634375 		.string	"rcCursor"
+ 1548      72736F72 
+ 1548      00
+ 1549              	.LASF101:
+ 1550 06ca 72634465 		.string	"rcDestroying"
+ 1550      7374726F 
+ 1550      79696E67 
+ 1550      00
+ 1551              	.LASF27:
+ 1552 06d7 72634B72 		.string	"rcKrypto"
+ 1552      7970746F 
+ 1552      00
+
GAS LISTING /tmp/cc32muHp.s 			page 36
+
+
+ 1553              	.LASF196:
+ 1554 06e0 72635365 		.string	"rcSeed"
+ 1554      656400
+ 1555              	.LASF221:
+ 1556 06e7 7263496E 		.string	"rcInterrupted"
+ 1556      74657272 
+ 1556      75707465 
+ 1556      6400
+ 1557              	.LASF153:
+ 1558 06f5 72634C6F 		.string	"rcLoading"
+ 1558      6164696E 
+ 1558      6700
+ 1559              	.LASF136:
+ 1560 06ff 72635661 		.string	"rcValidating"
+ 1560      6C696461 
+ 1560      74696E67 
+ 1560      00
+ 1561              	.LASF230:
+ 1562 070c 72634C6F 		.string	"rcLocked"
+ 1562      636B6564 
+ 1562      00
+ 1563              	.LASF59:
+ 1564 0715 72634974 		.string	"rcIterator"
+ 1564      65726174 
+ 1564      6F7200
+ 1565              	.LASF67:
+ 1566 0720 72634E6F 		.string	"rcNode"
+ 1566      646500
+ 1567              	.LASF1:
+ 1568 0727 73686F72 		.string	"short int"
+ 1568      7420696E 
+ 1568      7400
+ 1569              	.LASF102:
+ 1570 0731 72635265 		.string	"rcReleasing"
+ 1570      6C656173 
+ 1570      696E6700 
+ 1571              	.LASF177:
+ 1572 073d 72635472 		.string	"rcTransfer"
+ 1572      616E7366 
+ 1572      657200
+ 1573              	.LASF2:
+ 1574 0748 6C6F6E67 		.string	"long int"
+ 1574      20696E74 
+ 1574      00
+ 1575              	.LASF262:
+ 1576 0751 4B426C6F 		.string	"KBlockCipher"
+ 1576      636B4369 
+ 1576      70686572 
+ 1576      00
+ 1577              	.LASF164:
+ 1578 075e 72635365 		.string	"rcSending"
+ 1578      6E64696E 
+ 1578      6700
+ 1579              	.LASF215:
+ 1580 0768 7263496E 		.string	"rcInvalid"
+ 1580      76616C69 
+ 1580      6400
+
GAS LISTING /tmp/cc32muHp.s 			page 37
+
+
+ 1581              	.LASF249:
+ 1582 0772 72634E6F 		.string	"rcNotOpen"
+ 1582      744F7065 
+ 1582      6E00
+ 1583              	.LASF103:
+ 1584 077c 72634163 		.string	"rcAccessing"
+ 1584      63657373 
+ 1584      696E6700 
+ 1585              	.LASF29:
+ 1586 0788 72634E53 		.string	"rcNS"
+ 1586      00
+ 1587              	.LASF112:
+ 1588 078d 72635072 		.string	"rcProjecting"
+ 1588      6F6A6563 
+ 1588      74696E67 
+ 1588      00
+ 1589              	.LASF175:
+ 1590 079a 72634E61 		.string	"rcName"
+ 1590      6D6500
+ 1591              	.LASF238:
+ 1592 07a1 7263496E 		.string	"rcInPlaceNotAllowed"
+ 1592      506C6163 
+ 1592      654E6F74 
+ 1592      416C6C6F 
+ 1592      77656400 
+ 1593              	.LASF247:
+ 1594 07b5 72634F70 		.string	"rcOpen"
+ 1594      656E00
+ 1595              	.LASF227:
+ 1596 07bc 72635669 		.string	"rcViolated"
+ 1596      6F6C6174 
+ 1596      656400
+ 1597              	.LASF169:
+ 1598 07c7 72634E6F 		.string	"rcNoObj"
+ 1598      4F626A00 
+ 1599              	.LASF200:
+ 1600 07cf 72635369 		.string	"rcSignalSet"
+ 1600      676E616C 
+ 1600      53657400 
+ 1601              	.LASF197:
+ 1602 07db 7263436F 		.string	"rcConnection"
+ 1602      6E6E6563 
+ 1602      74696F6E 
+ 1602      00
+ 1603              	.LASF195:
+ 1604 07e8 72634368 		.string	"rcChecksum"
+ 1604      65636B73 
+ 1604      756D00
+ 1605              	.LASF78:
+ 1606 07f3 72635461 		.string	"rcTable"
+ 1606      626C6500 
+ 1607              	.LASF11:
+ 1608 07fb 72635275 		.string	"rcRuntime"
+ 1608      6E74696D 
+ 1608      6500
+ 1609              	.LASF148:
+ 1610 0805 72634C6F 		.string	"rcLogging"
+
GAS LISTING /tmp/cc32muHp.s 			page 38
+
+
+ 1610      6767696E 
+ 1610      6700
+ 1611              	.LASF160:
+ 1612 080f 72634465 		.string	"rcDecrypting"
+ 1612      63727970 
+ 1612      74696E67 
+ 1612      00
+ 1613              	.LASF61:
+ 1614 081c 72634C6F 		.string	"rcLog"
+ 1614      6700
+ 1615              	.LASF68:
+ 1616 0822 72634E75 		.string	"rcNumeral"
+ 1616      6D657261 
+ 1616      6C00
+ 1617              	.LASF172:
+ 1618 082c 72635061 		.string	"rcParam"
+ 1618      72616D00 
+ 1619              	.LASF32:
+ 1620 0834 52434D6F 		.string	"RCModule"
+ 1620      64756C65 
+ 1620      00
+ 1621              	.LASF158:
+ 1622 083d 72634170 		.string	"rcAppending"
+ 1622      70656E64 
+ 1622      696E6700 
+ 1623              	.LASF57:
+ 1624 0849 72634865 		.string	"rcHeader"
+ 1624      61646572 
+ 1624      00
+ 1625              	.LASF6:
+ 1626 0852 6C6F6E67 		.string	"long unsigned int"
+ 1626      20756E73 
+ 1626      69676E65 
+ 1626      6420696E 
+ 1626      7400
+ 1627              	.LASF245:
+ 1628 0864 72634F75 		.string	"rcOutofrange"
+ 1628      746F6672 
+ 1628      616E6765 
+ 1628      00
+ 1629              	.LASF170:
+ 1630 0871 72634C69 		.string	"rcLink"
+ 1630      6E6B00
+ 1631              	.LASF52:
+ 1632 0878 72634669 		.string	"rcFileDesc"
+ 1632      6C654465 
+ 1632      736300
+ 1633              	.LASF263:
+ 1634 0883 6E65775F 		.string	"new_obj"
+ 1634      6F626A00 
+ 1635              	.LASF209:
+ 1636 088b 7263556E 		.string	"rcUnexpected"
+ 1636      65787065 
+ 1636      63746564 
+ 1636      00
+ 1637              	.LASF207:
+ 1638 0898 7263556E 		.string	"rcUnknown"
+
GAS LISTING /tmp/cc32muHp.s 			page 39
+
+
+ 1638      6B6E6F77 
+ 1638      6E00
+ 1639              	.LASF155:
+ 1640 08a2 7263496E 		.string	"rcInflating"
+ 1640      666C6174 
+ 1640      696E6700 
+ 1641              	.LASF118:
+ 1642 08ae 72634F70 		.string	"rcOpening"
+ 1642      656E696E 
+ 1642      6700
+ 1643              	.LASF17:
+ 1644 08b8 72635053 		.string	"rcPS"
+ 1644      00
+ 1645              	.LASF3:
+ 1646 08bd 756E7369 		.string	"unsigned char"
+ 1646      676E6564 
+ 1646      20636861 
+ 1646      7200
+ 1647              	.LASF126:
+ 1648 08cb 72635065 		.string	"rcPersisting"
+ 1648      72736973 
+ 1648      74696E67 
+ 1648      00
+ 1649              	.LASF259:
+ 1650 08d8 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c"
+ 1650      652F726F 
+ 1650      6461726D 
+ 1650      65722F73 
+ 1650      72615F73 
+ 1651              	.LASF220:
+ 1652 0912 7263496E 		.string	"rcIncomplete"
+ 1652      636F6D70 
+ 1652      6C657465 
+ 1652      00
+ 1653              	.LASF246:
+ 1654 091f 72634C61 		.string	"rcLastState_v1_0"
+ 1654      73745374 
+ 1654      6174655F 
+ 1654      76315F30 
+ 1654      00
+ 1655              	.LASF255:
+ 1656 0930 72634C61 		.string	"rcLastState_v1_1"
+ 1656      73745374 
+ 1656      6174655F 
+ 1656      76315F31 
+ 1656      00
+ 1657              	.LASF143:
+ 1658 0941 7263436F 		.string	"rcConverting"
+ 1658      6E766572 
+ 1658      74696E67 
+ 1658      00
+ 1659              	.LASF117:
+ 1660 094e 72634372 		.string	"rcCreating"
+ 1660      65617469 
+ 1660      6E6700
+ 1661              	.LASF191:
+ 1662 0959 72634974 		.string	"rcItem"
+
GAS LISTING /tmp/cc32muHp.s 			page 40
+
+
+ 1662      656D00
+ 1663              	.LASF111:
+ 1664 0960 72635365 		.string	"rcSelecting"
+ 1664      6C656374 
+ 1664      696E6700 
+ 1665              	.LASF8:
+ 1666 096c 72635F74 		.string	"rc_t"
+ 1666      00
+ 1667              	.LASF73:
+ 1668 0971 72635257 		.string	"rcRWLock"
+ 1668      4C6F636B 
+ 1668      00
+ 1669              	.LASF190:
+ 1670 097a 72634C61 		.string	"rcLastObject_v1_0"
+ 1670      73744F62 
+ 1670      6A656374 
+ 1670      5F76315F 
+ 1670      3000
+ 1671              	.LASF203:
+ 1672 098c 72634C61 		.string	"rcLastObject_v1_1"
+ 1672      73744F62 
+ 1672      6A656374 
+ 1672      5F76315F 
+ 1672      3100
+ 1673              	.LASF187:
+ 1674 099e 72634172 		.string	"rcArcHardLink"
+ 1674      63486172 
+ 1674      644C696E 
+ 1674      6B00
+ 1675              	.LASF113:
+ 1676 09ac 7263496E 		.string	"rcInserting"
+ 1676      73657274 
+ 1676      696E6700 
+ 1677              	.LASF166:
+ 1678 09b8 72634964 		.string	"rcIdentifying"
+ 1678      656E7469 
+ 1678      6679696E 
+ 1678      6700
+ 1679              	.LASF124:
+ 1680 09c6 72635265 		.string	"rcReverting"
+ 1680      76657274 
+ 1680      696E6700 
+ 1681              	.LASF20:
+ 1682 09d2 72635644 		.string	"rcVDB"
+ 1682      4200
+ 1683              	.LASF105:
+ 1684 09d8 72635669 		.string	"rcVisiting"
+ 1684      73697469 
+ 1684      6E6700
+ 1685              	.LASF88:
+ 1686 09e3 72634C61 		.string	"rcLastTarget_v1_0"
+ 1686      73745461 
+ 1686      72676574 
+ 1686      5F76315F 
+ 1686      3000
+ 1687              	.LASF96:
+ 1688 09f5 72634C61 		.string	"rcLastTarget_v1_1"
+
GAS LISTING /tmp/cc32muHp.s 			page 41
+
+
+ 1688      73745461 
+ 1688      72676574 
+ 1688      5F76315F 
+ 1688      3100
+ 1689              	.LASF84:
+ 1690 0a07 72635479 		.string	"rcType"
+ 1690      706500
+ 1691              	.LASF231:
+ 1692 0a0e 7263556E 		.string	"rcUnlocked"
+ 1692      6C6F636B 
+ 1692      656400
+ 1693              	.LASF151:
+ 1694 0a19 7263436C 		.string	"rcClassifying"
+ 1694      61737369 
+ 1694      6679696E 
+ 1694      6700
+ 1695              	.LASF228:
+ 1696 0a27 72634578 		.string	"rcExists"
+ 1696      69737473 
+ 1696      00
+ 1697              	.LASF130:
+ 1698 0a30 7263466F 		.string	"rcFormatting"
+ 1698      726D6174 
+ 1698      74696E67 
+ 1698      00
+ 1699              	.LASF79:
+ 1700 0a3d 72635468 		.string	"rcThread"
+ 1700      72656164 
+ 1700      00
+ 1701              	.LASF0:
+ 1702 0a46 7369676E 		.string	"signed char"
+ 1702      65642063 
+ 1702      68617200 
+ 1703              	.LASF4:
+ 1704 0a52 73686F72 		.string	"short unsigned int"
+ 1704      7420756E 
+ 1704      7369676E 
+ 1704      65642069 
+ 1704      6E7400
+ 1705              	.LASF260:
+ 1706 0a65 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 1706      652F726F 
+ 1706      6461726D 
+ 1706      65722F73 
+ 1706      72615F73 
+ 1707              	.LASF182:
+ 1708 0aad 72634279 		.string	"rcByteOrder"
+ 1708      74654F72 
+ 1708      64657200 
+ 1709              	.LASF36:
+ 1710 0ab9 7263546F 		.string	"rcToc"
+ 1710      6300
+ 1711              	.LASF44:
+ 1712 0abf 7263436F 		.string	"rcColumn"
+ 1712      6C756D6E 
+ 1712      00
+ 1713              	.LASF256:
+
GAS LISTING /tmp/cc32muHp.s 			page 42
+
+
+ 1714 0ac8 5F5F5052 		.string	"__PRETTY_FUNCTION__"
+ 1714      45545459 
+ 1714      5F46554E 
+ 1714      4354494F 
+ 1714      4E5F5F00 
+ 1715              	.LASF94:
+ 1716 0adc 72635175 		.string	"rcQuery"
+ 1716      65727900 
+ 1717              	.LASF140:
+ 1718 0ae4 72635265 		.string	"rcRegistering"
+ 1718      67697374 
+ 1718      6572696E 
+ 1718      6700
+ 1719              	.LASF86:
+ 1720 0af2 72634479 		.string	"rcDylib"
+ 1720      6C696200 
+ 1721              	.LASF81:
+ 1722 0afa 7263546F 		.string	"rcToken"
+ 1722      6B656E00 
+ 1723              	.LASF134:
+ 1724 0b02 7263456E 		.string	"rcEncoding"
+ 1724      636F6469 
+ 1724      6E6700
+ 1725              	.LASF224:
+ 1726 0b0d 72634578 		.string	"rcExhausted"
+ 1726      68617573 
+ 1726      74656400 
+ 1727              	.LASF186:
+ 1728 0b19 72634469 		.string	"rcDirEntry"
+ 1728      72456E74 
+ 1728      727900
+ 1729              	.LASF26:
+ 1730 0b24 7263416C 		.string	"rcAlign"
+ 1730      69676E00 
+ 1731              	.LASF28:
+ 1732 0b2c 72635244 		.string	"rcRDBMS"
+ 1732      424D5300 
+ 1733              	.LASF14:
+ 1734 0b34 72634353 		.string	"rcCS"
+ 1734      00
+ 1735              	.LASF129:
+ 1736 0b39 7263436F 		.string	"rcConcatenating"
+ 1736      6E636174 
+ 1736      656E6174 
+ 1736      696E6700 
+ 1737              	.LASF48:
+ 1738 0b49 72634469 		.string	"rcDirectory"
+ 1738      72656374 
+ 1738      6F727900 
+ 1739              	.LASF223:
+ 1740 0b55 7263456D 		.string	"rcEmpty"
+ 1740      70747900 
+ 1741              	.LASF13:
+ 1742 0b5d 7263436F 		.string	"rcCont"
+ 1742      6E7400
+ 1743              	.LASF33:
+ 1744 0b64 52435461 		.string	"RCTarget"
+
GAS LISTING /tmp/cc32muHp.s 			page 43
+
+
+ 1744      72676574 
+ 1744      00
+ 1745              		.ident	"GCC: (GNU) 4.4.2"
+ 1746              		.section	.note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/cc32muHp.s 			page 44
+
+
+DEFINED SYMBOLS
+                            *ABS*:0000000000000000 no-null-ncbi.c
+     /tmp/cc32muHp.s:17     .text:0000000000000000 KNullBlockCipherVecAesNiMake
+     /tmp/cc32muHp.s:66     .rodata:0000000000000040 __func__.2445
+     /tmp/cc32muHp.s:71     .rodata:0000000000000060 __PRETTY_FUNCTION__.2444
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+SetRCFileFuncLine
diff --git a/libs/krypto/no-null-ncbi.c b/libs/krypto/no-null-ncbi.c
new file mode 100644
index 0000000..7477512
--- /dev/null
+++ b/libs/krypto/no-null-ncbi.c
@@ -0,0 +1,59 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <krypto/extern.h>
+
+#include "ncbi-priv.h"
+#include "cipher-priv.h"
+/* #include "blockcipher-priv.h" */
+
+#include <klib/rc.h>
+
+/* ----------------------------------------------------------------------
+ * Make
+ *
+ * Create a new Null Block Cipher object.
+ * The processor is checked to see if this particular version is supported on
+ * this particular CPU.
+ */
+struct KBlockCipher;
+rc_t NULLBCMEMBER(Make) (struct KBlockCipher ** new_obj)
+{
+    rc_t rc;
+
+    /* Check parameter first */
+    if (new_obj == NULL)
+        rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+
+    else
+    {
+        *new_obj = NULL;
+
+        rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+    }
+    return rc;
+}
+
+/* end of file lib/krypto/aes-ncbi.c */
diff --git a/libs/krypto/no-null-ncbi.vec.pic.o.list b/libs/krypto/no-null-ncbi.vec.pic.o.list
new file mode 100644
index 0000000..5db68b2
--- /dev/null
+++ b/libs/krypto/no-null-ncbi.vec.pic.o.list
@@ -0,0 +1,2540 @@
+GAS LISTING /tmp/cctAECUH.s 			page 1
+
+
+   1              		.file	"no-null-ncbi.c"
+   2              		.section	.debug_abbrev,"", at progbits
+   3              	.Ldebug_abbrev0:
+   4              		.section	.debug_info,"", at progbits
+   5              	.Ldebug_info0:
+   6              		.section	.debug_line,"", at progbits
+   7              	.Ldebug_line0:
+   8 0000 CC000000 		.text
+   8      0200AA00 
+   8      00000101 
+   8      FB0E0D00 
+   8      01010101 
+   9              	.Ltext0:
+  10              		.section	.rodata
+  11              		.align 8
+  12              	.LC0:
+  13 0000 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c"
+  13      652F726F 
+  13      6461726D 
+  13      65722F73 
+  13      72615F73 
+  14              		.text
+  15              	.globl KNullBlockCipherVecMake
+  16              		.type	KNullBlockCipherVecMake, @function
+  17              	KNullBlockCipherVecMake:
+  18              	.LFB15:
+  19              		.file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c"
+   1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /*===========================================================================
+   2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *
+   3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *                            PUBLIC DOMAIN NOTICE
+   4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *               National Center for Biotechnology Information
+   5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *
+   6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  This software/database is a "United States Government Work" under the
+   7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  terms of the United States Copyright Act.  It was written as part of
+   8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  the author's official duties as a United States Government employee and
+   9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  thus cannot be copyrighted.  This software/database is freely available
+  10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  to the public for use. The National Library of Medicine and the U.S.
+  11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  Government have not placed any restriction on its use or reproduction.
+  12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *
+  13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  Although all reasonable efforts have been taken to ensure the accuracy
+  14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  and reliability of the software and data, the NLM and the U.S.
+  15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  Government do not and cannot warrant the performance or results that
+  16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  may be obtained by using this software or data. The NLM and the U.S.
+  17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  Government disclaim all warranties, express or implied, including
+  18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  warranties of performance, merchantability or fitness for any particular
+  19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  purpose.
+  20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *
+  21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  Please cite the author in any work or product based on this material.
+  22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *
+  23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  * ===========================================================================
+  24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  */
+  25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include <krypto/extern.h>
+  27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include "ncbi-priv.h"
+  29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include "cipher-priv.h"
+  30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /* #include "blockcipher-priv.h" */
+
GAS LISTING /tmp/cctAECUH.s 			page 2
+
+
+  31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include <klib/rc.h>
+  33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /* ----------------------------------------------------------------------
+  35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  * Make
+  36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *
+  37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  * Create a new Null Block Cipher object.
+  38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  * The processor is checked to see if this particular version is supported on
+  39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  * this particular CPU.
+  40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  */
+  41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** struct KBlockCipher;
+  42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** rc_t NULLBCMEMBER(Make) (struct KBlockCipher ** new_obj)
+  43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** {
+  20              		.loc 1 43 0
+  21              		.cfi_startproc
+  22 0000 55       		pushq	%rbp
+  23              	.LCFI0:
+  24              		.cfi_def_cfa_offset 16
+  25 0001 4889E5   		movq	%rsp, %rbp
+  26              		.cfi_offset 6, -16
+  27              	.LCFI1:
+  28              		.cfi_def_cfa_register 6
+  29 0004 4883EC20 		subq	$32, %rsp
+  30 0008 48897DE8 		movq	%rdi, -24(%rbp)
+  44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     rc_t rc;
+  45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     /* Check parameter first */
+  47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     if (new_obj == NULL)
+  31              		.loc 1 47 0
+  32 000c 48837DE8 		cmpq	$0, -24(%rbp)
+  32      00
+  33 0011 7522     		jne	.L2
+  48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****         rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+  34              		.loc 1 48 0
+  35 0013 B9300000 		movl	$48, %ecx
+  35      00
+  36 0018 488D1500 		leaq	__func__.2350(%rip), %rdx
+  36      000000
+  37 001f 488D3500 		leaq	.LC0(%rip), %rsi
+  37      000000
+  38 0026 BF878F00 		movl	$-2030006393, %edi
+  38      87
+  39 002b E8000000 		call	SetRCFileFuncLine at PLT
+  39      00
+  40 0030 8945FC   		movl	%eax, -4(%rbp)
+  41 0033 EB2B     		jmp	.L3
+  42              	.L2:
+  49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     else
+  51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     {
+  52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****         *new_obj = NULL;
+  43              		.loc 1 52 0
+  44 0035 488B45E8 		movq	-24(%rbp), %rax
+  45 0039 48C70000 		movq	$0, (%rax)
+  45      000000
+  53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****         rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+
GAS LISTING /tmp/cctAECUH.s 			page 3
+
+
+  46              		.loc 1 54 0
+  47 0040 B9360000 		movl	$54, %ecx
+  47      00
+  48 0045 488D1500 		leaq	__func__.2350(%rip), %rdx
+  48      000000
+  49 004c 488D3500 		leaq	.LC0(%rip), %rsi
+  49      000000
+  50 0053 BF038500 		movl	$-2030009085, %edi
+  50      87
+  51 0058 E8000000 		call	SetRCFileFuncLine at PLT
+  51      00
+  52 005d 8945FC   		movl	%eax, -4(%rbp)
+  53              	.L3:
+  55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     }
+  56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     return rc;
+  54              		.loc 1 56 0
+  55 0060 8B45FC   		movl	-4(%rbp), %eax
+  57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** }
+  56              		.loc 1 57 0
+  57 0063 C9       		leave
+  58 0064 C3       		ret
+  59              		.cfi_endproc
+  60              	.LFE15:
+  61              		.size	KNullBlockCipherVecMake, .-KNullBlockCipherVecMake
+  62              		.section	.rodata
+  63 003a 00000000 		.align 16
+  63      0000
+  64              		.type	__func__.2350, @object
+  65              		.size	__func__.2350, 24
+  66              	__func__.2350:
+  67 0040 4B4E756C 		.string	"KNullBlockCipherVecMake"
+  67      6C426C6F 
+  67      636B4369 
+  67      70686572 
+  67      5665634D 
+  68 0058 00000000 		.align 16
+  68      00000000 
+  69              		.type	__PRETTY_FUNCTION__.2349, @object
+  70              		.size	__PRETTY_FUNCTION__.2349, 24
+  71              	__PRETTY_FUNCTION__.2349:
+  72 0060 4B4E756C 		.string	"KNullBlockCipherVecMake"
+  72      6C426C6F 
+  72      636B4369 
+  72      70686572 
+  72      5665634D 
+  73              		.text
+  74              	.Letext0:
+  75              		.section	.debug_loc,"", at progbits
+  76              	.Ldebug_loc0:
+  77              	.LLST0:
+  78 0000 00000000 		.quad	.LFB15-.Ltext0
+  78      00000000 
+  79 0008 01000000 		.quad	.LCFI0-.Ltext0
+  79      00000000 
+  80 0010 0200     		.value	0x2
+  81 0012 77       		.byte	0x77
+  82 0013 08       		.sleb128 8
+
GAS LISTING /tmp/cctAECUH.s 			page 4
+
+
+  83 0014 01000000 		.quad	.LCFI0-.Ltext0
+  83      00000000 
+  84 001c 04000000 		.quad	.LCFI1-.Ltext0
+  84      00000000 
+  85 0024 0200     		.value	0x2
+  86 0026 77       		.byte	0x77
+  87 0027 10       		.sleb128 16
+  88 0028 04000000 		.quad	.LCFI1-.Ltext0
+  88      00000000 
+  89 0030 65000000 		.quad	.LFE15-.Ltext0
+  89      00000000 
+  90 0038 0200     		.value	0x2
+  91 003a 76       		.byte	0x76
+  92 003b 10       		.sleb128 16
+  93 003c 00000000 		.quad	0x0
+  93      00000000 
+  94 0044 00000000 		.quad	0x0
+  94      00000000 
+  95              		.file 2 "/usr/include/stdint.h"
+  96              		.file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+  97              		.file 4 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+  98              		.section	.debug_info
+  99 0000 24070000 		.long	0x724
+ 100 0004 0200     		.value	0x2
+ 101 0006 00000000 		.long	.Ldebug_abbrev0
+ 102 000a 08       		.byte	0x8
+ 103 000b 01       		.uleb128 0x1
+ 104 000c 00000000 		.long	.LASF258
+ 105 0010 01       		.byte	0x1
+ 106 0011 00000000 		.long	.LASF259
+ 107 0015 00000000 		.long	.LASF260
+ 108 0019 00000000 		.quad	.Ltext0
+ 108      00000000 
+ 109 0021 00000000 		.quad	.Letext0
+ 109      00000000 
+ 110 0029 00000000 		.long	.Ldebug_line0
+ 111 002d 02       		.uleb128 0x2
+ 112 002e 01       		.byte	0x1
+ 113 002f 06       		.byte	0x6
+ 114 0030 00000000 		.long	.LASF0
+ 115 0034 02       		.uleb128 0x2
+ 116 0035 02       		.byte	0x2
+ 117 0036 05       		.byte	0x5
+ 118 0037 00000000 		.long	.LASF1
+ 119 003b 03       		.uleb128 0x3
+ 120 003c 04       		.byte	0x4
+ 121 003d 05       		.byte	0x5
+ 122 003e 696E7400 		.string	"int"
+ 123 0042 02       		.uleb128 0x2
+ 124 0043 08       		.byte	0x8
+ 125 0044 05       		.byte	0x5
+ 126 0045 00000000 		.long	.LASF2
+ 127 0049 02       		.uleb128 0x2
+ 128 004a 01       		.byte	0x1
+ 129 004b 08       		.byte	0x8
+ 130 004c 00000000 		.long	.LASF3
+ 131 0050 02       		.uleb128 0x2
+
GAS LISTING /tmp/cctAECUH.s 			page 5
+
+
+ 132 0051 02       		.byte	0x2
+ 133 0052 07       		.byte	0x7
+ 134 0053 00000000 		.long	.LASF4
+ 135 0057 04       		.uleb128 0x4
+ 136 0058 00000000 		.long	.LASF7
+ 137 005c 02       		.byte	0x2
+ 138 005d 34       		.byte	0x34
+ 139 005e 62000000 		.long	0x62
+ 140 0062 02       		.uleb128 0x2
+ 141 0063 04       		.byte	0x4
+ 142 0064 07       		.byte	0x7
+ 143 0065 00000000 		.long	.LASF5
+ 144 0069 02       		.uleb128 0x2
+ 145 006a 08       		.byte	0x8
+ 146 006b 07       		.byte	0x7
+ 147 006c 00000000 		.long	.LASF6
+ 148 0070 04       		.uleb128 0x4
+ 149 0071 00000000 		.long	.LASF8
+ 150 0075 03       		.byte	0x3
+ 151 0076 30       		.byte	0x30
+ 152 0077 57000000 		.long	0x57
+ 153 007b 05       		.uleb128 0x5
+ 154 007c 08       		.byte	0x8
+ 155 007d 07       		.byte	0x7
+ 156 007e 02       		.uleb128 0x2
+ 157 007f 01       		.byte	0x1
+ 158 0080 06       		.byte	0x6
+ 159 0081 00000000 		.long	.LASF9
+ 160 0085 06       		.uleb128 0x6
+ 161 0086 00000000 		.long	.LASF32
+ 162 008a 04       		.byte	0x4
+ 163 008b 04       		.byte	0x4
+ 164 008c 5A       		.byte	0x5a
+ 165 008d 16010000 		.long	0x116
+ 166 0091 07       		.uleb128 0x7
+ 167 0092 00000000 		.long	.LASF10
+ 168 0096 00       		.sleb128 0
+ 169 0097 07       		.uleb128 0x7
+ 170 0098 00000000 		.long	.LASF11
+ 171 009c 01       		.sleb128 1
+ 172 009d 07       		.uleb128 0x7
+ 173 009e 00000000 		.long	.LASF12
+ 174 00a2 02       		.sleb128 2
+ 175 00a3 07       		.uleb128 0x7
+ 176 00a4 00000000 		.long	.LASF13
+ 177 00a8 03       		.sleb128 3
+ 178 00a9 07       		.uleb128 0x7
+ 179 00aa 00000000 		.long	.LASF14
+ 180 00ae 04       		.sleb128 4
+ 181 00af 07       		.uleb128 0x7
+ 182 00b0 00000000 		.long	.LASF15
+ 183 00b4 05       		.sleb128 5
+ 184 00b5 07       		.uleb128 0x7
+ 185 00b6 00000000 		.long	.LASF16
+ 186 00ba 06       		.sleb128 6
+ 187 00bb 07       		.uleb128 0x7
+ 188 00bc 00000000 		.long	.LASF17
+
GAS LISTING /tmp/cctAECUH.s 			page 6
+
+
+ 189 00c0 07       		.sleb128 7
+ 190 00c1 07       		.uleb128 0x7
+ 191 00c2 00000000 		.long	.LASF18
+ 192 00c6 08       		.sleb128 8
+ 193 00c7 07       		.uleb128 0x7
+ 194 00c8 00000000 		.long	.LASF19
+ 195 00cc 09       		.sleb128 9
+ 196 00cd 07       		.uleb128 0x7
+ 197 00ce 00000000 		.long	.LASF20
+ 198 00d2 0A       		.sleb128 10
+ 199 00d3 07       		.uleb128 0x7
+ 200 00d4 00000000 		.long	.LASF21
+ 201 00d8 0B       		.sleb128 11
+ 202 00d9 07       		.uleb128 0x7
+ 203 00da 00000000 		.long	.LASF22
+ 204 00de 0C       		.sleb128 12
+ 205 00df 07       		.uleb128 0x7
+ 206 00e0 00000000 		.long	.LASF23
+ 207 00e4 0D       		.sleb128 13
+ 208 00e5 07       		.uleb128 0x7
+ 209 00e6 00000000 		.long	.LASF24
+ 210 00ea 0E       		.sleb128 14
+ 211 00eb 07       		.uleb128 0x7
+ 212 00ec 00000000 		.long	.LASF25
+ 213 00f0 0E       		.sleb128 14
+ 214 00f1 07       		.uleb128 0x7
+ 215 00f2 00000000 		.long	.LASF26
+ 216 00f6 0F       		.sleb128 15
+ 217 00f7 07       		.uleb128 0x7
+ 218 00f8 00000000 		.long	.LASF27
+ 219 00fc 10       		.sleb128 16
+ 220 00fd 07       		.uleb128 0x7
+ 221 00fe 00000000 		.long	.LASF28
+ 222 0102 11       		.sleb128 17
+ 223 0103 07       		.uleb128 0x7
+ 224 0104 00000000 		.long	.LASF29
+ 225 0108 12       		.sleb128 18
+ 226 0109 07       		.uleb128 0x7
+ 227 010a 00000000 		.long	.LASF30
+ 228 010e 13       		.sleb128 19
+ 229 010f 07       		.uleb128 0x7
+ 230 0110 00000000 		.long	.LASF31
+ 231 0114 14       		.sleb128 20
+ 232 0115 00       		.byte	0x0
+ 233 0116 06       		.uleb128 0x6
+ 234 0117 00000000 		.long	.LASF33
+ 235 011b 04       		.byte	0x4
+ 236 011c 04       		.byte	0x4
+ 237 011d 77       		.byte	0x77
+ 238 011e 9D020000 		.long	0x29d
+ 239 0122 07       		.uleb128 0x7
+ 240 0123 00000000 		.long	.LASF34
+ 241 0127 00       		.sleb128 0
+ 242 0128 07       		.uleb128 0x7
+ 243 0129 00000000 		.long	.LASF35
+ 244 012d 01       		.sleb128 1
+ 245 012e 07       		.uleb128 0x7
+
GAS LISTING /tmp/cctAECUH.s 			page 7
+
+
+ 246 012f 00000000 		.long	.LASF36
+ 247 0133 02       		.sleb128 2
+ 248 0134 07       		.uleb128 0x7
+ 249 0135 00000000 		.long	.LASF37
+ 250 0139 03       		.sleb128 3
+ 251 013a 07       		.uleb128 0x7
+ 252 013b 00000000 		.long	.LASF38
+ 253 013f 04       		.sleb128 4
+ 254 0140 07       		.uleb128 0x7
+ 255 0141 00000000 		.long	.LASF39
+ 256 0145 05       		.sleb128 5
+ 257 0146 07       		.uleb128 0x7
+ 258 0147 00000000 		.long	.LASF40
+ 259 014b 06       		.sleb128 6
+ 260 014c 07       		.uleb128 0x7
+ 261 014d 00000000 		.long	.LASF41
+ 262 0151 07       		.sleb128 7
+ 263 0152 07       		.uleb128 0x7
+ 264 0153 00000000 		.long	.LASF42
+ 265 0157 08       		.sleb128 8
+ 266 0158 07       		.uleb128 0x7
+ 267 0159 00000000 		.long	.LASF43
+ 268 015d 09       		.sleb128 9
+ 269 015e 07       		.uleb128 0x7
+ 270 015f 00000000 		.long	.LASF44
+ 271 0163 0A       		.sleb128 10
+ 272 0164 07       		.uleb128 0x7
+ 273 0165 00000000 		.long	.LASF45
+ 274 0169 0B       		.sleb128 11
+ 275 016a 07       		.uleb128 0x7
+ 276 016b 00000000 		.long	.LASF46
+ 277 016f 0C       		.sleb128 12
+ 278 0170 07       		.uleb128 0x7
+ 279 0171 00000000 		.long	.LASF47
+ 280 0175 0D       		.sleb128 13
+ 281 0176 07       		.uleb128 0x7
+ 282 0177 00000000 		.long	.LASF48
+ 283 017b 0E       		.sleb128 14
+ 284 017c 07       		.uleb128 0x7
+ 285 017d 00000000 		.long	.LASF49
+ 286 0181 0F       		.sleb128 15
+ 287 0182 07       		.uleb128 0x7
+ 288 0183 00000000 		.long	.LASF50
+ 289 0187 10       		.sleb128 16
+ 290 0188 07       		.uleb128 0x7
+ 291 0189 00000000 		.long	.LASF51
+ 292 018d 11       		.sleb128 17
+ 293 018e 07       		.uleb128 0x7
+ 294 018f 00000000 		.long	.LASF52
+ 295 0193 12       		.sleb128 18
+ 296 0194 07       		.uleb128 0x7
+ 297 0195 00000000 		.long	.LASF53
+ 298 0199 13       		.sleb128 19
+ 299 019a 07       		.uleb128 0x7
+ 300 019b 00000000 		.long	.LASF54
+ 301 019f 14       		.sleb128 20
+ 302 01a0 07       		.uleb128 0x7
+
GAS LISTING /tmp/cctAECUH.s 			page 8
+
+
+ 303 01a1 00000000 		.long	.LASF55
+ 304 01a5 15       		.sleb128 21
+ 305 01a6 07       		.uleb128 0x7
+ 306 01a7 00000000 		.long	.LASF56
+ 307 01ab 16       		.sleb128 22
+ 308 01ac 07       		.uleb128 0x7
+ 309 01ad 00000000 		.long	.LASF57
+ 310 01b1 17       		.sleb128 23
+ 311 01b2 07       		.uleb128 0x7
+ 312 01b3 00000000 		.long	.LASF58
+ 313 01b7 18       		.sleb128 24
+ 314 01b8 07       		.uleb128 0x7
+ 315 01b9 00000000 		.long	.LASF59
+ 316 01bd 19       		.sleb128 25
+ 317 01be 07       		.uleb128 0x7
+ 318 01bf 00000000 		.long	.LASF60
+ 319 01c3 1A       		.sleb128 26
+ 320 01c4 07       		.uleb128 0x7
+ 321 01c5 00000000 		.long	.LASF61
+ 322 01c9 1B       		.sleb128 27
+ 323 01ca 07       		.uleb128 0x7
+ 324 01cb 00000000 		.long	.LASF62
+ 325 01cf 1C       		.sleb128 28
+ 326 01d0 07       		.uleb128 0x7
+ 327 01d1 00000000 		.long	.LASF63
+ 328 01d5 1D       		.sleb128 29
+ 329 01d6 07       		.uleb128 0x7
+ 330 01d7 00000000 		.long	.LASF64
+ 331 01db 1E       		.sleb128 30
+ 332 01dc 07       		.uleb128 0x7
+ 333 01dd 00000000 		.long	.LASF65
+ 334 01e1 1F       		.sleb128 31
+ 335 01e2 07       		.uleb128 0x7
+ 336 01e3 00000000 		.long	.LASF66
+ 337 01e7 20       		.sleb128 32
+ 338 01e8 07       		.uleb128 0x7
+ 339 01e9 00000000 		.long	.LASF67
+ 340 01ed 21       		.sleb128 33
+ 341 01ee 07       		.uleb128 0x7
+ 342 01ef 00000000 		.long	.LASF68
+ 343 01f3 22       		.sleb128 34
+ 344 01f4 07       		.uleb128 0x7
+ 345 01f5 00000000 		.long	.LASF69
+ 346 01f9 23       		.sleb128 35
+ 347 01fa 07       		.uleb128 0x7
+ 348 01fb 00000000 		.long	.LASF70
+ 349 01ff 24       		.sleb128 36
+ 350 0200 07       		.uleb128 0x7
+ 351 0201 00000000 		.long	.LASF71
+ 352 0205 25       		.sleb128 37
+ 353 0206 07       		.uleb128 0x7
+ 354 0207 00000000 		.long	.LASF72
+ 355 020b 26       		.sleb128 38
+ 356 020c 07       		.uleb128 0x7
+ 357 020d 00000000 		.long	.LASF73
+ 358 0211 27       		.sleb128 39
+ 359 0212 07       		.uleb128 0x7
+
GAS LISTING /tmp/cctAECUH.s 			page 9
+
+
+ 360 0213 00000000 		.long	.LASF74
+ 361 0217 28       		.sleb128 40
+ 362 0218 07       		.uleb128 0x7
+ 363 0219 00000000 		.long	.LASF75
+ 364 021d 29       		.sleb128 41
+ 365 021e 07       		.uleb128 0x7
+ 366 021f 00000000 		.long	.LASF76
+ 367 0223 2A       		.sleb128 42
+ 368 0224 07       		.uleb128 0x7
+ 369 0225 00000000 		.long	.LASF77
+ 370 0229 2B       		.sleb128 43
+ 371 022a 07       		.uleb128 0x7
+ 372 022b 00000000 		.long	.LASF78
+ 373 022f 2C       		.sleb128 44
+ 374 0230 07       		.uleb128 0x7
+ 375 0231 00000000 		.long	.LASF79
+ 376 0235 2D       		.sleb128 45
+ 377 0236 07       		.uleb128 0x7
+ 378 0237 00000000 		.long	.LASF80
+ 379 023b 2E       		.sleb128 46
+ 380 023c 07       		.uleb128 0x7
+ 381 023d 00000000 		.long	.LASF81
+ 382 0241 2F       		.sleb128 47
+ 383 0242 07       		.uleb128 0x7
+ 384 0243 00000000 		.long	.LASF82
+ 385 0247 30       		.sleb128 48
+ 386 0248 07       		.uleb128 0x7
+ 387 0249 00000000 		.long	.LASF83
+ 388 024d 31       		.sleb128 49
+ 389 024e 07       		.uleb128 0x7
+ 390 024f 00000000 		.long	.LASF84
+ 391 0253 32       		.sleb128 50
+ 392 0254 07       		.uleb128 0x7
+ 393 0255 00000000 		.long	.LASF85
+ 394 0259 33       		.sleb128 51
+ 395 025a 07       		.uleb128 0x7
+ 396 025b 00000000 		.long	.LASF86
+ 397 025f 34       		.sleb128 52
+ 398 0260 07       		.uleb128 0x7
+ 399 0261 00000000 		.long	.LASF87
+ 400 0265 35       		.sleb128 53
+ 401 0266 07       		.uleb128 0x7
+ 402 0267 00000000 		.long	.LASF88
+ 403 026b 36       		.sleb128 54
+ 404 026c 07       		.uleb128 0x7
+ 405 026d 00000000 		.long	.LASF89
+ 406 0271 36       		.sleb128 54
+ 407 0272 07       		.uleb128 0x7
+ 408 0273 00000000 		.long	.LASF90
+ 409 0277 37       		.sleb128 55
+ 410 0278 07       		.uleb128 0x7
+ 411 0279 00000000 		.long	.LASF91
+ 412 027d 38       		.sleb128 56
+ 413 027e 07       		.uleb128 0x7
+ 414 027f 00000000 		.long	.LASF92
+ 415 0283 39       		.sleb128 57
+ 416 0284 07       		.uleb128 0x7
+
GAS LISTING /tmp/cctAECUH.s 			page 10
+
+
+ 417 0285 00000000 		.long	.LASF93
+ 418 0289 3A       		.sleb128 58
+ 419 028a 07       		.uleb128 0x7
+ 420 028b 00000000 		.long	.LASF94
+ 421 028f 3B       		.sleb128 59
+ 422 0290 07       		.uleb128 0x7
+ 423 0291 00000000 		.long	.LASF95
+ 424 0295 3C       		.sleb128 60
+ 425 0296 07       		.uleb128 0x7
+ 426 0297 00000000 		.long	.LASF96
+ 427 029b 3D       		.sleb128 61
+ 428 029c 00       		.byte	0x0
+ 429 029d 06       		.uleb128 0x6
+ 430 029e 00000000 		.long	.LASF97
+ 431 02a2 04       		.byte	0x4
+ 432 02a3 04       		.byte	0x4
+ 433 02a4 BD       		.byte	0xbd
+ 434 02a5 53040000 		.long	0x453
+ 435 02a9 07       		.uleb128 0x7
+ 436 02aa 00000000 		.long	.LASF98
+ 437 02ae 00       		.sleb128 0
+ 438 02af 07       		.uleb128 0x7
+ 439 02b0 00000000 		.long	.LASF99
+ 440 02b4 01       		.sleb128 1
+ 441 02b5 07       		.uleb128 0x7
+ 442 02b6 00000000 		.long	.LASF100
+ 443 02ba 02       		.sleb128 2
+ 444 02bb 07       		.uleb128 0x7
+ 445 02bc 00000000 		.long	.LASF101
+ 446 02c0 03       		.sleb128 3
+ 447 02c1 07       		.uleb128 0x7
+ 448 02c2 00000000 		.long	.LASF102
+ 449 02c6 04       		.sleb128 4
+ 450 02c7 07       		.uleb128 0x7
+ 451 02c8 00000000 		.long	.LASF103
+ 452 02cc 05       		.sleb128 5
+ 453 02cd 07       		.uleb128 0x7
+ 454 02ce 00000000 		.long	.LASF104
+ 455 02d2 06       		.sleb128 6
+ 456 02d3 07       		.uleb128 0x7
+ 457 02d4 00000000 		.long	.LASF105
+ 458 02d8 07       		.sleb128 7
+ 459 02d9 07       		.uleb128 0x7
+ 460 02da 00000000 		.long	.LASF106
+ 461 02de 08       		.sleb128 8
+ 462 02df 07       		.uleb128 0x7
+ 463 02e0 00000000 		.long	.LASF107
+ 464 02e4 09       		.sleb128 9
+ 465 02e5 07       		.uleb128 0x7
+ 466 02e6 00000000 		.long	.LASF108
+ 467 02ea 0A       		.sleb128 10
+ 468 02eb 07       		.uleb128 0x7
+ 469 02ec 00000000 		.long	.LASF109
+ 470 02f0 0B       		.sleb128 11
+ 471 02f1 07       		.uleb128 0x7
+ 472 02f2 00000000 		.long	.LASF110
+ 473 02f6 0C       		.sleb128 12
+
GAS LISTING /tmp/cctAECUH.s 			page 11
+
+
+ 474 02f7 07       		.uleb128 0x7
+ 475 02f8 00000000 		.long	.LASF111
+ 476 02fc 0D       		.sleb128 13
+ 477 02fd 07       		.uleb128 0x7
+ 478 02fe 00000000 		.long	.LASF112
+ 479 0302 0E       		.sleb128 14
+ 480 0303 07       		.uleb128 0x7
+ 481 0304 00000000 		.long	.LASF113
+ 482 0308 0F       		.sleb128 15
+ 483 0309 07       		.uleb128 0x7
+ 484 030a 00000000 		.long	.LASF114
+ 485 030e 10       		.sleb128 16
+ 486 030f 07       		.uleb128 0x7
+ 487 0310 00000000 		.long	.LASF115
+ 488 0314 11       		.sleb128 17
+ 489 0315 07       		.uleb128 0x7
+ 490 0316 00000000 		.long	.LASF116
+ 491 031a 12       		.sleb128 18
+ 492 031b 07       		.uleb128 0x7
+ 493 031c 00000000 		.long	.LASF117
+ 494 0320 13       		.sleb128 19
+ 495 0321 07       		.uleb128 0x7
+ 496 0322 00000000 		.long	.LASF118
+ 497 0326 14       		.sleb128 20
+ 498 0327 07       		.uleb128 0x7
+ 499 0328 00000000 		.long	.LASF119
+ 500 032c 15       		.sleb128 21
+ 501 032d 07       		.uleb128 0x7
+ 502 032e 00000000 		.long	.LASF120
+ 503 0332 16       		.sleb128 22
+ 504 0333 07       		.uleb128 0x7
+ 505 0334 00000000 		.long	.LASF121
+ 506 0338 17       		.sleb128 23
+ 507 0339 07       		.uleb128 0x7
+ 508 033a 00000000 		.long	.LASF122
+ 509 033e 18       		.sleb128 24
+ 510 033f 07       		.uleb128 0x7
+ 511 0340 00000000 		.long	.LASF123
+ 512 0344 19       		.sleb128 25
+ 513 0345 07       		.uleb128 0x7
+ 514 0346 00000000 		.long	.LASF124
+ 515 034a 1A       		.sleb128 26
+ 516 034b 07       		.uleb128 0x7
+ 517 034c 00000000 		.long	.LASF125
+ 518 0350 1B       		.sleb128 27
+ 519 0351 07       		.uleb128 0x7
+ 520 0352 00000000 		.long	.LASF126
+ 521 0356 1C       		.sleb128 28
+ 522 0357 07       		.uleb128 0x7
+ 523 0358 00000000 		.long	.LASF127
+ 524 035c 1D       		.sleb128 29
+ 525 035d 07       		.uleb128 0x7
+ 526 035e 00000000 		.long	.LASF128
+ 527 0362 1E       		.sleb128 30
+ 528 0363 07       		.uleb128 0x7
+ 529 0364 00000000 		.long	.LASF129
+ 530 0368 1F       		.sleb128 31
+
GAS LISTING /tmp/cctAECUH.s 			page 12
+
+
+ 531 0369 07       		.uleb128 0x7
+ 532 036a 00000000 		.long	.LASF130
+ 533 036e 20       		.sleb128 32
+ 534 036f 07       		.uleb128 0x7
+ 535 0370 00000000 		.long	.LASF131
+ 536 0374 21       		.sleb128 33
+ 537 0375 07       		.uleb128 0x7
+ 538 0376 00000000 		.long	.LASF132
+ 539 037a 22       		.sleb128 34
+ 540 037b 07       		.uleb128 0x7
+ 541 037c 00000000 		.long	.LASF133
+ 542 0380 23       		.sleb128 35
+ 543 0381 07       		.uleb128 0x7
+ 544 0382 00000000 		.long	.LASF134
+ 545 0386 24       		.sleb128 36
+ 546 0387 07       		.uleb128 0x7
+ 547 0388 00000000 		.long	.LASF135
+ 548 038c 25       		.sleb128 37
+ 549 038d 07       		.uleb128 0x7
+ 550 038e 00000000 		.long	.LASF136
+ 551 0392 26       		.sleb128 38
+ 552 0393 07       		.uleb128 0x7
+ 553 0394 00000000 		.long	.LASF137
+ 554 0398 27       		.sleb128 39
+ 555 0399 07       		.uleb128 0x7
+ 556 039a 00000000 		.long	.LASF138
+ 557 039e 28       		.sleb128 40
+ 558 039f 07       		.uleb128 0x7
+ 559 03a0 00000000 		.long	.LASF139
+ 560 03a4 29       		.sleb128 41
+ 561 03a5 07       		.uleb128 0x7
+ 562 03a6 00000000 		.long	.LASF140
+ 563 03aa 2A       		.sleb128 42
+ 564 03ab 07       		.uleb128 0x7
+ 565 03ac 00000000 		.long	.LASF141
+ 566 03b0 2B       		.sleb128 43
+ 567 03b1 07       		.uleb128 0x7
+ 568 03b2 00000000 		.long	.LASF142
+ 569 03b6 2C       		.sleb128 44
+ 570 03b7 07       		.uleb128 0x7
+ 571 03b8 00000000 		.long	.LASF143
+ 572 03bc 2D       		.sleb128 45
+ 573 03bd 07       		.uleb128 0x7
+ 574 03be 00000000 		.long	.LASF144
+ 575 03c2 2E       		.sleb128 46
+ 576 03c3 07       		.uleb128 0x7
+ 577 03c4 00000000 		.long	.LASF145
+ 578 03c8 2F       		.sleb128 47
+ 579 03c9 07       		.uleb128 0x7
+ 580 03ca 00000000 		.long	.LASF146
+ 581 03ce 30       		.sleb128 48
+ 582 03cf 07       		.uleb128 0x7
+ 583 03d0 00000000 		.long	.LASF147
+ 584 03d4 31       		.sleb128 49
+ 585 03d5 07       		.uleb128 0x7
+ 586 03d6 00000000 		.long	.LASF148
+ 587 03da 32       		.sleb128 50
+
GAS LISTING /tmp/cctAECUH.s 			page 13
+
+
+ 588 03db 07       		.uleb128 0x7
+ 589 03dc 00000000 		.long	.LASF149
+ 590 03e0 33       		.sleb128 51
+ 591 03e1 07       		.uleb128 0x7
+ 592 03e2 00000000 		.long	.LASF150
+ 593 03e6 34       		.sleb128 52
+ 594 03e7 07       		.uleb128 0x7
+ 595 03e8 00000000 		.long	.LASF151
+ 596 03ec 35       		.sleb128 53
+ 597 03ed 07       		.uleb128 0x7
+ 598 03ee 00000000 		.long	.LASF152
+ 599 03f2 36       		.sleb128 54
+ 600 03f3 07       		.uleb128 0x7
+ 601 03f4 00000000 		.long	.LASF153
+ 602 03f8 37       		.sleb128 55
+ 603 03f9 07       		.uleb128 0x7
+ 604 03fa 00000000 		.long	.LASF154
+ 605 03fe 38       		.sleb128 56
+ 606 03ff 07       		.uleb128 0x7
+ 607 0400 00000000 		.long	.LASF155
+ 608 0404 39       		.sleb128 57
+ 609 0405 07       		.uleb128 0x7
+ 610 0406 00000000 		.long	.LASF156
+ 611 040a 3A       		.sleb128 58
+ 612 040b 07       		.uleb128 0x7
+ 613 040c 00000000 		.long	.LASF157
+ 614 0410 3A       		.sleb128 58
+ 615 0411 07       		.uleb128 0x7
+ 616 0412 00000000 		.long	.LASF158
+ 617 0416 3B       		.sleb128 59
+ 618 0417 07       		.uleb128 0x7
+ 619 0418 00000000 		.long	.LASF159
+ 620 041c 3C       		.sleb128 60
+ 621 041d 07       		.uleb128 0x7
+ 622 041e 00000000 		.long	.LASF160
+ 623 0422 3D       		.sleb128 61
+ 624 0423 07       		.uleb128 0x7
+ 625 0424 00000000 		.long	.LASF161
+ 626 0428 3E       		.sleb128 62
+ 627 0429 07       		.uleb128 0x7
+ 628 042a 00000000 		.long	.LASF162
+ 629 042e 3F       		.sleb128 63
+ 630 042f 07       		.uleb128 0x7
+ 631 0430 00000000 		.long	.LASF163
+ 632 0434 C000     		.sleb128 64
+ 633 0436 07       		.uleb128 0x7
+ 634 0437 00000000 		.long	.LASF164
+ 635 043b C100     		.sleb128 65
+ 636 043d 07       		.uleb128 0x7
+ 637 043e 00000000 		.long	.LASF165
+ 638 0442 C200     		.sleb128 66
+ 639 0444 07       		.uleb128 0x7
+ 640 0445 00000000 		.long	.LASF166
+ 641 0449 C300     		.sleb128 67
+ 642 044b 07       		.uleb128 0x7
+ 643 044c 00000000 		.long	.LASF167
+ 644 0450 C400     		.sleb128 68
+
GAS LISTING /tmp/cctAECUH.s 			page 14
+
+
+ 645 0452 00       		.byte	0x0
+ 646 0453 08       		.uleb128 0x8
+ 647 0454 00000000 		.long	.LASF168
+ 648 0458 04       		.byte	0x4
+ 649 0459 04       		.byte	0x4
+ 650 045a 0A01     		.value	0x10a
+ 651 045c 52050000 		.long	0x552
+ 652 0460 07       		.uleb128 0x7
+ 653 0461 00000000 		.long	.LASF169
+ 654 0465 00       		.sleb128 0
+ 655 0466 07       		.uleb128 0x7
+ 656 0467 00000000 		.long	.LASF170
+ 657 046b 3D       		.sleb128 61
+ 658 046c 07       		.uleb128 0x7
+ 659 046d 00000000 		.long	.LASF171
+ 660 0471 3E       		.sleb128 62
+ 661 0472 07       		.uleb128 0x7
+ 662 0473 00000000 		.long	.LASF172
+ 663 0477 3F       		.sleb128 63
+ 664 0478 07       		.uleb128 0x7
+ 665 0479 00000000 		.long	.LASF173
+ 666 047d C000     		.sleb128 64
+ 667 047f 07       		.uleb128 0x7
+ 668 0480 00000000 		.long	.LASF174
+ 669 0484 C100     		.sleb128 65
+ 670 0486 07       		.uleb128 0x7
+ 671 0487 00000000 		.long	.LASF175
+ 672 048b C200     		.sleb128 66
+ 673 048d 07       		.uleb128 0x7
+ 674 048e 00000000 		.long	.LASF176
+ 675 0492 C300     		.sleb128 67
+ 676 0494 07       		.uleb128 0x7
+ 677 0495 00000000 		.long	.LASF177
+ 678 0499 C400     		.sleb128 68
+ 679 049b 07       		.uleb128 0x7
+ 680 049c 00000000 		.long	.LASF178
+ 681 04a0 C500     		.sleb128 69
+ 682 04a2 07       		.uleb128 0x7
+ 683 04a3 00000000 		.long	.LASF179
+ 684 04a7 C600     		.sleb128 70
+ 685 04a9 07       		.uleb128 0x7
+ 686 04aa 00000000 		.long	.LASF180
+ 687 04ae C700     		.sleb128 71
+ 688 04b0 07       		.uleb128 0x7
+ 689 04b1 00000000 		.long	.LASF181
+ 690 04b5 C800     		.sleb128 72
+ 691 04b7 07       		.uleb128 0x7
+ 692 04b8 00000000 		.long	.LASF182
+ 693 04bc C900     		.sleb128 73
+ 694 04be 07       		.uleb128 0x7
+ 695 04bf 00000000 		.long	.LASF183
+ 696 04c3 CA00     		.sleb128 74
+ 697 04c5 07       		.uleb128 0x7
+ 698 04c6 00000000 		.long	.LASF184
+ 699 04ca CB00     		.sleb128 75
+ 700 04cc 07       		.uleb128 0x7
+ 701 04cd 00000000 		.long	.LASF185
+
GAS LISTING /tmp/cctAECUH.s 			page 15
+
+
+ 702 04d1 CC00     		.sleb128 76
+ 703 04d3 07       		.uleb128 0x7
+ 704 04d4 00000000 		.long	.LASF186
+ 705 04d8 CD00     		.sleb128 77
+ 706 04da 07       		.uleb128 0x7
+ 707 04db 00000000 		.long	.LASF187
+ 708 04df CE00     		.sleb128 78
+ 709 04e1 07       		.uleb128 0x7
+ 710 04e2 00000000 		.long	.LASF188
+ 711 04e6 CF00     		.sleb128 79
+ 712 04e8 07       		.uleb128 0x7
+ 713 04e9 00000000 		.long	.LASF189
+ 714 04ed D000     		.sleb128 80
+ 715 04ef 07       		.uleb128 0x7
+ 716 04f0 00000000 		.long	.LASF190
+ 717 04f4 D100     		.sleb128 81
+ 718 04f6 07       		.uleb128 0x7
+ 719 04f7 00000000 		.long	.LASF191
+ 720 04fb D100     		.sleb128 81
+ 721 04fd 07       		.uleb128 0x7
+ 722 04fe 00000000 		.long	.LASF192
+ 723 0502 D200     		.sleb128 82
+ 724 0504 07       		.uleb128 0x7
+ 725 0505 00000000 		.long	.LASF193
+ 726 0509 D300     		.sleb128 83
+ 727 050b 07       		.uleb128 0x7
+ 728 050c 00000000 		.long	.LASF194
+ 729 0510 D400     		.sleb128 84
+ 730 0512 07       		.uleb128 0x7
+ 731 0513 00000000 		.long	.LASF195
+ 732 0517 D500     		.sleb128 85
+ 733 0519 07       		.uleb128 0x7
+ 734 051a 00000000 		.long	.LASF196
+ 735 051e D600     		.sleb128 86
+ 736 0520 07       		.uleb128 0x7
+ 737 0521 00000000 		.long	.LASF197
+ 738 0525 D700     		.sleb128 87
+ 739 0527 07       		.uleb128 0x7
+ 740 0528 00000000 		.long	.LASF198
+ 741 052c D800     		.sleb128 88
+ 742 052e 07       		.uleb128 0x7
+ 743 052f 00000000 		.long	.LASF199
+ 744 0533 D900     		.sleb128 89
+ 745 0535 07       		.uleb128 0x7
+ 746 0536 00000000 		.long	.LASF200
+ 747 053a DA00     		.sleb128 90
+ 748 053c 07       		.uleb128 0x7
+ 749 053d 00000000 		.long	.LASF201
+ 750 0541 DB00     		.sleb128 91
+ 751 0543 07       		.uleb128 0x7
+ 752 0544 00000000 		.long	.LASF202
+ 753 0548 DC00     		.sleb128 92
+ 754 054a 07       		.uleb128 0x7
+ 755 054b 00000000 		.long	.LASF203
+ 756 054f DD00     		.sleb128 93
+ 757 0551 00       		.byte	0x0
+ 758 0552 08       		.uleb128 0x8
+
GAS LISTING /tmp/cctAECUH.s 			page 16
+
+
+ 759 0553 00000000 		.long	.LASF204
+ 760 0557 04       		.byte	0x4
+ 761 0558 04       		.byte	0x4
+ 762 0559 3401     		.value	0x134
+ 763 055b 92060000 		.long	0x692
+ 764 055f 07       		.uleb128 0x7
+ 765 0560 00000000 		.long	.LASF205
+ 766 0564 00       		.sleb128 0
+ 767 0565 07       		.uleb128 0x7
+ 768 0566 00000000 		.long	.LASF206
+ 769 056a 01       		.sleb128 1
+ 770 056b 07       		.uleb128 0x7
+ 771 056c 00000000 		.long	.LASF207
+ 772 0570 02       		.sleb128 2
+ 773 0571 07       		.uleb128 0x7
+ 774 0572 00000000 		.long	.LASF208
+ 775 0576 03       		.sleb128 3
+ 776 0577 07       		.uleb128 0x7
+ 777 0578 00000000 		.long	.LASF209
+ 778 057c 04       		.sleb128 4
+ 779 057d 07       		.uleb128 0x7
+ 780 057e 00000000 		.long	.LASF210
+ 781 0582 05       		.sleb128 5
+ 782 0583 07       		.uleb128 0x7
+ 783 0584 00000000 		.long	.LASF211
+ 784 0588 06       		.sleb128 6
+ 785 0589 07       		.uleb128 0x7
+ 786 058a 00000000 		.long	.LASF212
+ 787 058e 07       		.sleb128 7
+ 788 058f 07       		.uleb128 0x7
+ 789 0590 00000000 		.long	.LASF213
+ 790 0594 08       		.sleb128 8
+ 791 0595 07       		.uleb128 0x7
+ 792 0596 00000000 		.long	.LASF214
+ 793 059a 09       		.sleb128 9
+ 794 059b 07       		.uleb128 0x7
+ 795 059c 00000000 		.long	.LASF215
+ 796 05a0 0A       		.sleb128 10
+ 797 05a1 07       		.uleb128 0x7
+ 798 05a2 00000000 		.long	.LASF216
+ 799 05a6 0B       		.sleb128 11
+ 800 05a7 07       		.uleb128 0x7
+ 801 05a8 00000000 		.long	.LASF217
+ 802 05ac 0C       		.sleb128 12
+ 803 05ad 07       		.uleb128 0x7
+ 804 05ae 00000000 		.long	.LASF218
+ 805 05b2 0D       		.sleb128 13
+ 806 05b3 07       		.uleb128 0x7
+ 807 05b4 00000000 		.long	.LASF219
+ 808 05b8 0E       		.sleb128 14
+ 809 05b9 07       		.uleb128 0x7
+ 810 05ba 00000000 		.long	.LASF220
+ 811 05be 0F       		.sleb128 15
+ 812 05bf 07       		.uleb128 0x7
+ 813 05c0 00000000 		.long	.LASF221
+ 814 05c4 10       		.sleb128 16
+ 815 05c5 07       		.uleb128 0x7
+
GAS LISTING /tmp/cctAECUH.s 			page 17
+
+
+ 816 05c6 00000000 		.long	.LASF222
+ 817 05ca 11       		.sleb128 17
+ 818 05cb 07       		.uleb128 0x7
+ 819 05cc 00000000 		.long	.LASF223
+ 820 05d0 12       		.sleb128 18
+ 821 05d1 07       		.uleb128 0x7
+ 822 05d2 00000000 		.long	.LASF224
+ 823 05d6 13       		.sleb128 19
+ 824 05d7 07       		.uleb128 0x7
+ 825 05d8 00000000 		.long	.LASF225
+ 826 05dc 14       		.sleb128 20
+ 827 05dd 07       		.uleb128 0x7
+ 828 05de 00000000 		.long	.LASF226
+ 829 05e2 15       		.sleb128 21
+ 830 05e3 07       		.uleb128 0x7
+ 831 05e4 00000000 		.long	.LASF227
+ 832 05e8 16       		.sleb128 22
+ 833 05e9 07       		.uleb128 0x7
+ 834 05ea 00000000 		.long	.LASF228
+ 835 05ee 17       		.sleb128 23
+ 836 05ef 07       		.uleb128 0x7
+ 837 05f0 00000000 		.long	.LASF229
+ 838 05f4 18       		.sleb128 24
+ 839 05f5 07       		.uleb128 0x7
+ 840 05f6 00000000 		.long	.LASF230
+ 841 05fa 19       		.sleb128 25
+ 842 05fb 07       		.uleb128 0x7
+ 843 05fc 00000000 		.long	.LASF231
+ 844 0600 1A       		.sleb128 26
+ 845 0601 07       		.uleb128 0x7
+ 846 0602 00000000 		.long	.LASF232
+ 847 0606 1B       		.sleb128 27
+ 848 0607 07       		.uleb128 0x7
+ 849 0608 00000000 		.long	.LASF233
+ 850 060c 1C       		.sleb128 28
+ 851 060d 07       		.uleb128 0x7
+ 852 060e 00000000 		.long	.LASF234
+ 853 0612 1D       		.sleb128 29
+ 854 0613 07       		.uleb128 0x7
+ 855 0614 00000000 		.long	.LASF235
+ 856 0618 1E       		.sleb128 30
+ 857 0619 07       		.uleb128 0x7
+ 858 061a 00000000 		.long	.LASF236
+ 859 061e 1F       		.sleb128 31
+ 860 061f 07       		.uleb128 0x7
+ 861 0620 00000000 		.long	.LASF237
+ 862 0624 20       		.sleb128 32
+ 863 0625 07       		.uleb128 0x7
+ 864 0626 00000000 		.long	.LASF238
+ 865 062a 21       		.sleb128 33
+ 866 062b 07       		.uleb128 0x7
+ 867 062c 00000000 		.long	.LASF239
+ 868 0630 22       		.sleb128 34
+ 869 0631 07       		.uleb128 0x7
+ 870 0632 00000000 		.long	.LASF240
+ 871 0636 23       		.sleb128 35
+ 872 0637 07       		.uleb128 0x7
+
GAS LISTING /tmp/cctAECUH.s 			page 18
+
+
+ 873 0638 00000000 		.long	.LASF241
+ 874 063c 24       		.sleb128 36
+ 875 063d 07       		.uleb128 0x7
+ 876 063e 00000000 		.long	.LASF242
+ 877 0642 25       		.sleb128 37
+ 878 0643 07       		.uleb128 0x7
+ 879 0644 00000000 		.long	.LASF243
+ 880 0648 26       		.sleb128 38
+ 881 0649 07       		.uleb128 0x7
+ 882 064a 00000000 		.long	.LASF244
+ 883 064e 27       		.sleb128 39
+ 884 064f 07       		.uleb128 0x7
+ 885 0650 00000000 		.long	.LASF245
+ 886 0654 28       		.sleb128 40
+ 887 0655 07       		.uleb128 0x7
+ 888 0656 00000000 		.long	.LASF246
+ 889 065a 29       		.sleb128 41
+ 890 065b 07       		.uleb128 0x7
+ 891 065c 00000000 		.long	.LASF247
+ 892 0660 29       		.sleb128 41
+ 893 0661 07       		.uleb128 0x7
+ 894 0662 00000000 		.long	.LASF248
+ 895 0666 2A       		.sleb128 42
+ 896 0667 07       		.uleb128 0x7
+ 897 0668 00000000 		.long	.LASF249
+ 898 066c 2B       		.sleb128 43
+ 899 066d 07       		.uleb128 0x7
+ 900 066e 00000000 		.long	.LASF250
+ 901 0672 2C       		.sleb128 44
+ 902 0673 07       		.uleb128 0x7
+ 903 0674 00000000 		.long	.LASF251
+ 904 0678 2D       		.sleb128 45
+ 905 0679 07       		.uleb128 0x7
+ 906 067a 00000000 		.long	.LASF252
+ 907 067e 2E       		.sleb128 46
+ 908 067f 07       		.uleb128 0x7
+ 909 0680 00000000 		.long	.LASF253
+ 910 0684 2F       		.sleb128 47
+ 911 0685 07       		.uleb128 0x7
+ 912 0686 00000000 		.long	.LASF254
+ 913 068a 30       		.sleb128 48
+ 914 068b 07       		.uleb128 0x7
+ 915 068c 00000000 		.long	.LASF255
+ 916 0690 31       		.sleb128 49
+ 917 0691 00       		.byte	0x0
+ 918 0692 09       		.uleb128 0x9
+ 919 0693 01       		.byte	0x1
+ 920 0694 00000000 		.long	.LASF261
+ 921 0698 01       		.byte	0x1
+ 922 0699 2A       		.byte	0x2a
+ 923 069a 01       		.byte	0x1
+ 924 069b 70000000 		.long	0x70
+ 925 069f 00000000 		.quad	.LFB15
+ 925      00000000 
+ 926 06a7 00000000 		.quad	.LFE15
+ 926      00000000 
+ 927 06af 00000000 		.long	.LLST0
+
GAS LISTING /tmp/cctAECUH.s 			page 19
+
+
+ 928 06b3 01070000 		.long	0x701
+ 929 06b7 0A       		.uleb128 0xa
+ 930 06b8 00000000 		.long	.LASF262
+ 931 06bc 01       		.byte	0x1
+ 932 06bd 0B       		.uleb128 0xb
+ 933 06be 00000000 		.long	.LASF263
+ 934 06c2 01       		.byte	0x1
+ 935 06c3 2A       		.byte	0x2a
+ 936 06c4 01070000 		.long	0x701
+ 937 06c8 02       		.byte	0x2
+ 938 06c9 91       		.byte	0x91
+ 939 06ca 58       		.sleb128 -40
+ 940 06cb 0C       		.uleb128 0xc
+ 941 06cc 726300   		.string	"rc"
+ 942 06cf 01       		.byte	0x1
+ 943 06d0 2C       		.byte	0x2c
+ 944 06d1 70000000 		.long	0x70
+ 945 06d5 02       		.byte	0x2
+ 946 06d6 91       		.byte	0x91
+ 947 06d7 6C       		.sleb128 -20
+ 948 06d8 0D       		.uleb128 0xd
+ 949 06d9 00000000 		.long	.LASF256
+ 950 06dd 1D070000 		.long	0x71d
+ 951 06e1 01       		.byte	0x1
+ 952 06e2 09       		.byte	0x9
+ 953 06e3 03       		.byte	0x3
+ 954 06e4 00000000 		.quad	__PRETTY_FUNCTION__.2349
+ 954      00000000 
+ 955 06ec 0D       		.uleb128 0xd
+ 956 06ed 00000000 		.long	.LASF257
+ 957 06f1 22070000 		.long	0x722
+ 958 06f5 01       		.byte	0x1
+ 959 06f6 09       		.byte	0x9
+ 960 06f7 03       		.byte	0x3
+ 961 06f8 00000000 		.quad	__func__.2350
+ 961      00000000 
+ 962 0700 00       		.byte	0x0
+ 963 0701 0E       		.uleb128 0xe
+ 964 0702 08       		.byte	0x8
+ 965 0703 07070000 		.long	0x707
+ 966 0707 0E       		.uleb128 0xe
+ 967 0708 08       		.byte	0x8
+ 968 0709 B7060000 		.long	0x6b7
+ 969 070d 0F       		.uleb128 0xf
+ 970 070e 7E000000 		.long	0x7e
+ 971 0712 1D070000 		.long	0x71d
+ 972 0716 10       		.uleb128 0x10
+ 973 0717 7B000000 		.long	0x7b
+ 974 071b 17       		.byte	0x17
+ 975 071c 00       		.byte	0x0
+ 976 071d 11       		.uleb128 0x11
+ 977 071e 0D070000 		.long	0x70d
+ 978 0722 11       		.uleb128 0x11
+ 979 0723 0D070000 		.long	0x70d
+ 980 0727 00       		.byte	0x0
+ 981              		.section	.debug_abbrev
+ 982 0000 01       		.uleb128 0x1
+
GAS LISTING /tmp/cctAECUH.s 			page 20
+
+
+ 983 0001 11       		.uleb128 0x11
+ 984 0002 01       		.byte	0x1
+ 985 0003 25       		.uleb128 0x25
+ 986 0004 0E       		.uleb128 0xe
+ 987 0005 13       		.uleb128 0x13
+ 988 0006 0B       		.uleb128 0xb
+ 989 0007 03       		.uleb128 0x3
+ 990 0008 0E       		.uleb128 0xe
+ 991 0009 1B       		.uleb128 0x1b
+ 992 000a 0E       		.uleb128 0xe
+ 993 000b 11       		.uleb128 0x11
+ 994 000c 01       		.uleb128 0x1
+ 995 000d 12       		.uleb128 0x12
+ 996 000e 01       		.uleb128 0x1
+ 997 000f 10       		.uleb128 0x10
+ 998 0010 06       		.uleb128 0x6
+ 999 0011 00       		.byte	0x0
+ 1000 0012 00       		.byte	0x0
+ 1001 0013 02       		.uleb128 0x2
+ 1002 0014 24       		.uleb128 0x24
+ 1003 0015 00       		.byte	0x0
+ 1004 0016 0B       		.uleb128 0xb
+ 1005 0017 0B       		.uleb128 0xb
+ 1006 0018 3E       		.uleb128 0x3e
+ 1007 0019 0B       		.uleb128 0xb
+ 1008 001a 03       		.uleb128 0x3
+ 1009 001b 0E       		.uleb128 0xe
+ 1010 001c 00       		.byte	0x0
+ 1011 001d 00       		.byte	0x0
+ 1012 001e 03       		.uleb128 0x3
+ 1013 001f 24       		.uleb128 0x24
+ 1014 0020 00       		.byte	0x0
+ 1015 0021 0B       		.uleb128 0xb
+ 1016 0022 0B       		.uleb128 0xb
+ 1017 0023 3E       		.uleb128 0x3e
+ 1018 0024 0B       		.uleb128 0xb
+ 1019 0025 03       		.uleb128 0x3
+ 1020 0026 08       		.uleb128 0x8
+ 1021 0027 00       		.byte	0x0
+ 1022 0028 00       		.byte	0x0
+ 1023 0029 04       		.uleb128 0x4
+ 1024 002a 16       		.uleb128 0x16
+ 1025 002b 00       		.byte	0x0
+ 1026 002c 03       		.uleb128 0x3
+ 1027 002d 0E       		.uleb128 0xe
+ 1028 002e 3A       		.uleb128 0x3a
+ 1029 002f 0B       		.uleb128 0xb
+ 1030 0030 3B       		.uleb128 0x3b
+ 1031 0031 0B       		.uleb128 0xb
+ 1032 0032 49       		.uleb128 0x49
+ 1033 0033 13       		.uleb128 0x13
+ 1034 0034 00       		.byte	0x0
+ 1035 0035 00       		.byte	0x0
+ 1036 0036 05       		.uleb128 0x5
+ 1037 0037 24       		.uleb128 0x24
+ 1038 0038 00       		.byte	0x0
+ 1039 0039 0B       		.uleb128 0xb
+
GAS LISTING /tmp/cctAECUH.s 			page 21
+
+
+ 1040 003a 0B       		.uleb128 0xb
+ 1041 003b 3E       		.uleb128 0x3e
+ 1042 003c 0B       		.uleb128 0xb
+ 1043 003d 00       		.byte	0x0
+ 1044 003e 00       		.byte	0x0
+ 1045 003f 06       		.uleb128 0x6
+ 1046 0040 04       		.uleb128 0x4
+ 1047 0041 01       		.byte	0x1
+ 1048 0042 03       		.uleb128 0x3
+ 1049 0043 0E       		.uleb128 0xe
+ 1050 0044 0B       		.uleb128 0xb
+ 1051 0045 0B       		.uleb128 0xb
+ 1052 0046 3A       		.uleb128 0x3a
+ 1053 0047 0B       		.uleb128 0xb
+ 1054 0048 3B       		.uleb128 0x3b
+ 1055 0049 0B       		.uleb128 0xb
+ 1056 004a 01       		.uleb128 0x1
+ 1057 004b 13       		.uleb128 0x13
+ 1058 004c 00       		.byte	0x0
+ 1059 004d 00       		.byte	0x0
+ 1060 004e 07       		.uleb128 0x7
+ 1061 004f 28       		.uleb128 0x28
+ 1062 0050 00       		.byte	0x0
+ 1063 0051 03       		.uleb128 0x3
+ 1064 0052 0E       		.uleb128 0xe
+ 1065 0053 1C       		.uleb128 0x1c
+ 1066 0054 0D       		.uleb128 0xd
+ 1067 0055 00       		.byte	0x0
+ 1068 0056 00       		.byte	0x0
+ 1069 0057 08       		.uleb128 0x8
+ 1070 0058 04       		.uleb128 0x4
+ 1071 0059 01       		.byte	0x1
+ 1072 005a 03       		.uleb128 0x3
+ 1073 005b 0E       		.uleb128 0xe
+ 1074 005c 0B       		.uleb128 0xb
+ 1075 005d 0B       		.uleb128 0xb
+ 1076 005e 3A       		.uleb128 0x3a
+ 1077 005f 0B       		.uleb128 0xb
+ 1078 0060 3B       		.uleb128 0x3b
+ 1079 0061 05       		.uleb128 0x5
+ 1080 0062 01       		.uleb128 0x1
+ 1081 0063 13       		.uleb128 0x13
+ 1082 0064 00       		.byte	0x0
+ 1083 0065 00       		.byte	0x0
+ 1084 0066 09       		.uleb128 0x9
+ 1085 0067 2E       		.uleb128 0x2e
+ 1086 0068 01       		.byte	0x1
+ 1087 0069 3F       		.uleb128 0x3f
+ 1088 006a 0C       		.uleb128 0xc
+ 1089 006b 03       		.uleb128 0x3
+ 1090 006c 0E       		.uleb128 0xe
+ 1091 006d 3A       		.uleb128 0x3a
+ 1092 006e 0B       		.uleb128 0xb
+ 1093 006f 3B       		.uleb128 0x3b
+ 1094 0070 0B       		.uleb128 0xb
+ 1095 0071 27       		.uleb128 0x27
+ 1096 0072 0C       		.uleb128 0xc
+
GAS LISTING /tmp/cctAECUH.s 			page 22
+
+
+ 1097 0073 49       		.uleb128 0x49
+ 1098 0074 13       		.uleb128 0x13
+ 1099 0075 11       		.uleb128 0x11
+ 1100 0076 01       		.uleb128 0x1
+ 1101 0077 12       		.uleb128 0x12
+ 1102 0078 01       		.uleb128 0x1
+ 1103 0079 40       		.uleb128 0x40
+ 1104 007a 06       		.uleb128 0x6
+ 1105 007b 01       		.uleb128 0x1
+ 1106 007c 13       		.uleb128 0x13
+ 1107 007d 00       		.byte	0x0
+ 1108 007e 00       		.byte	0x0
+ 1109 007f 0A       		.uleb128 0xa
+ 1110 0080 13       		.uleb128 0x13
+ 1111 0081 00       		.byte	0x0
+ 1112 0082 03       		.uleb128 0x3
+ 1113 0083 0E       		.uleb128 0xe
+ 1114 0084 3C       		.uleb128 0x3c
+ 1115 0085 0C       		.uleb128 0xc
+ 1116 0086 00       		.byte	0x0
+ 1117 0087 00       		.byte	0x0
+ 1118 0088 0B       		.uleb128 0xb
+ 1119 0089 05       		.uleb128 0x5
+ 1120 008a 00       		.byte	0x0
+ 1121 008b 03       		.uleb128 0x3
+ 1122 008c 0E       		.uleb128 0xe
+ 1123 008d 3A       		.uleb128 0x3a
+ 1124 008e 0B       		.uleb128 0xb
+ 1125 008f 3B       		.uleb128 0x3b
+ 1126 0090 0B       		.uleb128 0xb
+ 1127 0091 49       		.uleb128 0x49
+ 1128 0092 13       		.uleb128 0x13
+ 1129 0093 02       		.uleb128 0x2
+ 1130 0094 0A       		.uleb128 0xa
+ 1131 0095 00       		.byte	0x0
+ 1132 0096 00       		.byte	0x0
+ 1133 0097 0C       		.uleb128 0xc
+ 1134 0098 34       		.uleb128 0x34
+ 1135 0099 00       		.byte	0x0
+ 1136 009a 03       		.uleb128 0x3
+ 1137 009b 08       		.uleb128 0x8
+ 1138 009c 3A       		.uleb128 0x3a
+ 1139 009d 0B       		.uleb128 0xb
+ 1140 009e 3B       		.uleb128 0x3b
+ 1141 009f 0B       		.uleb128 0xb
+ 1142 00a0 49       		.uleb128 0x49
+ 1143 00a1 13       		.uleb128 0x13
+ 1144 00a2 02       		.uleb128 0x2
+ 1145 00a3 0A       		.uleb128 0xa
+ 1146 00a4 00       		.byte	0x0
+ 1147 00a5 00       		.byte	0x0
+ 1148 00a6 0D       		.uleb128 0xd
+ 1149 00a7 34       		.uleb128 0x34
+ 1150 00a8 00       		.byte	0x0
+ 1151 00a9 03       		.uleb128 0x3
+ 1152 00aa 0E       		.uleb128 0xe
+ 1153 00ab 49       		.uleb128 0x49
+
GAS LISTING /tmp/cctAECUH.s 			page 23
+
+
+ 1154 00ac 13       		.uleb128 0x13
+ 1155 00ad 34       		.uleb128 0x34
+ 1156 00ae 0C       		.uleb128 0xc
+ 1157 00af 02       		.uleb128 0x2
+ 1158 00b0 0A       		.uleb128 0xa
+ 1159 00b1 00       		.byte	0x0
+ 1160 00b2 00       		.byte	0x0
+ 1161 00b3 0E       		.uleb128 0xe
+ 1162 00b4 0F       		.uleb128 0xf
+ 1163 00b5 00       		.byte	0x0
+ 1164 00b6 0B       		.uleb128 0xb
+ 1165 00b7 0B       		.uleb128 0xb
+ 1166 00b8 49       		.uleb128 0x49
+ 1167 00b9 13       		.uleb128 0x13
+ 1168 00ba 00       		.byte	0x0
+ 1169 00bb 00       		.byte	0x0
+ 1170 00bc 0F       		.uleb128 0xf
+ 1171 00bd 01       		.uleb128 0x1
+ 1172 00be 01       		.byte	0x1
+ 1173 00bf 49       		.uleb128 0x49
+ 1174 00c0 13       		.uleb128 0x13
+ 1175 00c1 01       		.uleb128 0x1
+ 1176 00c2 13       		.uleb128 0x13
+ 1177 00c3 00       		.byte	0x0
+ 1178 00c4 00       		.byte	0x0
+ 1179 00c5 10       		.uleb128 0x10
+ 1180 00c6 21       		.uleb128 0x21
+ 1181 00c7 00       		.byte	0x0
+ 1182 00c8 49       		.uleb128 0x49
+ 1183 00c9 13       		.uleb128 0x13
+ 1184 00ca 2F       		.uleb128 0x2f
+ 1185 00cb 0B       		.uleb128 0xb
+ 1186 00cc 00       		.byte	0x0
+ 1187 00cd 00       		.byte	0x0
+ 1188 00ce 11       		.uleb128 0x11
+ 1189 00cf 26       		.uleb128 0x26
+ 1190 00d0 00       		.byte	0x0
+ 1191 00d1 49       		.uleb128 0x49
+ 1192 00d2 13       		.uleb128 0x13
+ 1193 00d3 00       		.byte	0x0
+ 1194 00d4 00       		.byte	0x0
+ 1195 00d5 00       		.byte	0x0
+ 1196              		.section	.debug_pubnames,"", at progbits
+ 1197 0000 2A000000 		.long	0x2a
+ 1198 0004 0200     		.value	0x2
+ 1199 0006 00000000 		.long	.Ldebug_info0
+ 1200 000a 28070000 		.long	0x728
+ 1201 000e 92060000 		.long	0x692
+ 1202 0012 4B4E756C 		.string	"KNullBlockCipherVecMake"
+ 1202      6C426C6F 
+ 1202      636B4369 
+ 1202      70686572 
+ 1202      5665634D 
+ 1203 002a 00000000 		.long	0x0
+ 1204              		.section	.debug_aranges,"", at progbits
+ 1205 0000 2C000000 		.long	0x2c
+ 1206 0004 0200     		.value	0x2
+
GAS LISTING /tmp/cctAECUH.s 			page 24
+
+
+ 1207 0006 00000000 		.long	.Ldebug_info0
+ 1208 000a 08       		.byte	0x8
+ 1209 000b 00       		.byte	0x0
+ 1210 000c 0000     		.value	0x0
+ 1211 000e 0000     		.value	0x0
+ 1212 0010 00000000 		.quad	.Ltext0
+ 1212      00000000 
+ 1213 0018 65000000 		.quad	.Letext0-.Ltext0
+ 1213      00000000 
+ 1214 0020 00000000 		.quad	0x0
+ 1214      00000000 
+ 1215 0028 00000000 		.quad	0x0
+ 1215      00000000 
+ 1216              		.section	.debug_str,"MS", at progbits,1
+ 1217              	.LASF184:
+ 1218 0000 72635461 		.string	"rcTag"
+ 1218      6700
+ 1219              	.LASF30:
+ 1220 0006 72635646 		.string	"rcVFS"
+ 1220      5300
+ 1221              	.LASF234:
+ 1222 000c 7263556E 		.string	"rcUnauthorized"
+ 1222      61757468 
+ 1222      6F72697A 
+ 1222      656400
+ 1223              	.LASF258:
+ 1224 001b 474E5520 		.string	"GNU C 4.4.2"
+ 1224      4320342E 
+ 1224      342E3200 
+ 1225              	.LASF218:
+ 1226 0027 7263496E 		.string	"rcInconsistent"
+ 1226      636F6E73 
+ 1226      69737465 
+ 1226      6E7400
+ 1227              	.LASF19:
+ 1228 0036 72634442 		.string	"rcDB"
+ 1228      00
+ 1229              	.LASF128:
+ 1230 003b 7263436F 		.string	"rcCopying"
+ 1230      7079696E 
+ 1230      6700
+ 1231              	.LASF131:
+ 1232 0045 7263506F 		.string	"rcPositioning"
+ 1232      73697469 
+ 1232      6F6E696E 
+ 1232      6700
+ 1233              	.LASF226:
+ 1234 0053 72634578 		.string	"rcExcessive"
+ 1234      63657373 
+ 1234      69766500 
+ 1235              	.LASF222:
+ 1236 005f 72634361 		.string	"rcCanceled"
+ 1236      6E63656C 
+ 1236      656400
+ 1237              	.LASF156:
+ 1238 006a 72634C61 		.string	"rcLastContext_v1_0"
+ 1238      7374436F 
+
GAS LISTING /tmp/cctAECUH.s 			page 25
+
+
+ 1238      6E746578 
+ 1238      745F7631 
+ 1238      5F3000
+ 1239              	.LASF167:
+ 1240 007d 72634C61 		.string	"rcLastContext_v1_1"
+ 1240      7374436F 
+ 1240      6E746578 
+ 1240      745F7631 
+ 1240      5F3100
+ 1241              	.LASF90:
+ 1242 0090 7263456E 		.string	"rcEncryptionKey"
+ 1242      63727970 
+ 1242      74696F6E 
+ 1242      4B657900 
+ 1243              	.LASF97:
+ 1244 00a0 5243436F 		.string	"RCContext"
+ 1244      6E746578 
+ 1244      7400
+ 1245              	.LASF92:
+ 1246 00aa 7263436D 		.string	"rcCmd"
+ 1246      6400
+ 1247              	.LASF242:
+ 1248 00b0 72634475 		.string	"rcDuplicate"
+ 1248      706C6963 
+ 1248      61746500 
+ 1249              	.LASF202:
+ 1250 00bc 72635265 		.string	"rcRefcount"
+ 1250      66636F75 
+ 1250      6E7400
+ 1251              	.LASF91:
+ 1252 00c7 7263526E 		.string	"rcRng"
+ 1252      6700
+ 1253              	.LASF34:
+ 1254 00cd 72634E6F 		.string	"rcNoTarg"
+ 1254      54617267 
+ 1254      00
+ 1255              	.LASF204:
+ 1256 00d6 52435374 		.string	"RCState"
+ 1256      61746500 
+ 1257              	.LASF5:
+ 1258 00de 756E7369 		.string	"unsigned int"
+ 1258      676E6564 
+ 1258      20696E74 
+ 1258      00
+ 1259              	.LASF89:
+ 1260 00eb 72635072 		.string	"rcProduction"
+ 1260      6F647563 
+ 1260      74696F6E 
+ 1260      00
+ 1261              	.LASF69:
+ 1262 00f8 72635061 		.string	"rcPagemap"
+ 1262      67656D61 
+ 1262      7000
+ 1263              	.LASF185:
+ 1264 0102 72635265 		.string	"rcResources"
+ 1264      736F7572 
+ 1264      63657300 
+
GAS LISTING /tmp/cctAECUH.s 			page 26
+
+
+ 1265              	.LASF50:
+ 1266 010e 7263586D 		.string	"rcXmlDoc"
+ 1266      6C446F63 
+ 1266      00
+ 1267              	.LASF37:
+ 1268 0117 7263546F 		.string	"rcTocEntry"
+ 1268      63456E74 
+ 1268      727900
+ 1269              	.LASF114:
+ 1270 0122 72635265 		.string	"rcRemoving"
+ 1270      6D6F7669 
+ 1270      6E6700
+ 1271              	.LASF192:
+ 1272 012d 72634D6F 		.string	"rcMode"
+ 1272      646500
+ 1273              	.LASF119:
+ 1274 0134 7263436C 		.string	"rcClosing"
+ 1274      6F73696E 
+ 1274      6700
+ 1275              	.LASF72:
+ 1276 013e 72635175 		.string	"rcQueue"
+ 1276      65756500 
+ 1277              	.LASF120:
+ 1278 0146 72635265 		.string	"rcResizing"
+ 1278      73697A69 
+ 1278      6E6700
+ 1279              	.LASF171:
+ 1280 0151 72635365 		.string	"rcSelf"
+ 1280      6C6600
+ 1281              	.LASF214:
+ 1282 0158 72634465 		.string	"rcDestroyed"
+ 1282      7374726F 
+ 1282      79656400 
+ 1283              	.LASF162:
+ 1284 0164 7263496E 		.string	"rcInitializing"
+ 1284      69746961 
+ 1284      6C697A69 
+ 1284      6E6700
+ 1285              	.LASF168:
+ 1286 0173 52434F62 		.string	"RCObject"
+ 1286      6A656374 
+ 1286      00
+ 1287              	.LASF146:
+ 1288 017c 72634174 		.string	"rcAttaching"
+ 1288      74616368 
+ 1288      696E6700 
+ 1289              	.LASF219:
+ 1290 0188 72634275 		.string	"rcBusy"
+ 1290      737900
+ 1291              	.LASF74:
+ 1292 018f 72635363 		.string	"rcSchema"
+ 1292      68656D61 
+ 1292      00
+ 1293              	.LASF138:
+ 1294 0198 72634875 		.string	"rcHuffmanCoding"
+ 1294      66666D61 
+ 1294      6E436F64 
+
GAS LISTING /tmp/cctAECUH.s 			page 27
+
+
+ 1294      696E6700 
+ 1295              	.LASF123:
+ 1296 01a8 7263436F 		.string	"rcCommitting"
+ 1296      6D6D6974 
+ 1296      74696E67 
+ 1296      00
+ 1297              	.LASF75:
+ 1298 01b5 72635365 		.string	"rcSemaphore"
+ 1298      6D617068 
+ 1298      6F726500 
+ 1299              	.LASF232:
+ 1300 01c1 72634465 		.string	"rcDetached"
+ 1300      74616368 
+ 1300      656400
+ 1301              	.LASF188:
+ 1302 01cc 7263526F 		.string	"rcRow"
+ 1302      7700
+ 1303              	.LASF239:
+ 1304 01d2 7263546F 		.string	"rcTooShort"
+ 1304      6F53686F 
+ 1304      727400
+ 1305              	.LASF15:
+ 1306 01dd 72634646 		.string	"rcFF"
+ 1306      00
+ 1307              	.LASF16:
+ 1308 01e2 72634653 		.string	"rcFS"
+ 1308      00
+ 1309              	.LASF250:
+ 1310 01e7 7263556E 		.string	"rcUndefined"
+ 1310      64656669 
+ 1310      6E656400 
+ 1311              	.LASF132:
+ 1312 01f3 72635061 		.string	"rcPacking"
+ 1312      636B696E 
+ 1312      6700
+ 1313              	.LASF216:
+ 1314 01fd 7263436F 		.string	"rcCorrupt"
+ 1314      72727570 
+ 1314      7400
+ 1315              	.LASF7:
+ 1316 0207 75696E74 		.string	"uint32_t"
+ 1316      33325F74 
+ 1316      00
+ 1317              	.LASF133:
+ 1318 0210 7263556E 		.string	"rcUnpacking"
+ 1318      7061636B 
+ 1318      696E6700 
+ 1319              	.LASF51:
+ 1320 021c 72634669 		.string	"rcFile"
+ 1320      6C6500
+ 1321              	.LASF39:
+ 1322 0223 72634174 		.string	"rcAttr"
+ 1322      747200
+ 1323              	.LASF199:
+ 1324 022a 7263456E 		.string	"rcEnvironment"
+ 1324      7669726F 
+ 1324      6E6D656E 
+
GAS LISTING /tmp/cctAECUH.s 			page 28
+
+
+ 1324      7400
+ 1325              	.LASF149:
+ 1326 0238 72634650 		.string	"rcFPCoding"
+ 1326      436F6469 
+ 1326      6E6700
+ 1327              	.LASF80:
+ 1328 0243 72635469 		.string	"rcTimeout"
+ 1328      6D656F75 
+ 1328      7400
+ 1329              	.LASF62:
+ 1330 024d 72634D44 		.string	"rcMD5SumFmt"
+ 1330      3553756D 
+ 1330      466D7400 
+ 1331              	.LASF137:
+ 1332 0259 72634578 		.string	"rcExecuting"
+ 1332      65637574 
+ 1332      696E6700 
+ 1333              	.LASF145:
+ 1334 0265 72635761 		.string	"rcWaiting"
+ 1334      6974696E 
+ 1334      6700
+ 1335              	.LASF176:
+ 1336 026f 7263466F 		.string	"rcFormat"
+ 1336      726D6174 
+ 1336      00
+ 1337              	.LASF181:
+ 1338 0278 7263436F 		.string	"rcConstraint"
+ 1338      6E737472 
+ 1338      61696E74 
+ 1338      00
+ 1339              	.LASF22:
+ 1340 0285 7263584D 		.string	"rcXML"
+ 1340      4C00
+ 1341              	.LASF45:
+ 1342 028b 7263436F 		.string	"rcCondition"
+ 1342      6E646974 
+ 1342      696F6E00 
+ 1343              	.LASF205:
+ 1344 0297 72634E6F 		.string	"rcNoErr"
+ 1344      45727200 
+ 1345              	.LASF42:
+ 1346 029f 72634275 		.string	"rcBuffer"
+ 1346      66666572 
+ 1346      00
+ 1347              	.LASF142:
+ 1348 02a8 72635061 		.string	"rcParsing"
+ 1348      7273696E 
+ 1348      6700
+ 1349              	.LASF41:
+ 1350 02b2 7263426C 		.string	"rcBlob"
+ 1350      6F6200
+ 1351              	.LASF240:
+ 1352 02b9 7263546F 		.string	"rcTooLong"
+ 1352      6F4C6F6E 
+ 1352      6700
+ 1353              	.LASF24:
+ 1354 02c3 72634C61 		.string	"rcLastModule_v1_0"
+
GAS LISTING /tmp/cctAECUH.s 			page 29
+
+
+ 1354      73744D6F 
+ 1354      64756C65 
+ 1354      5F76315F 
+ 1354      3000
+ 1355              	.LASF31:
+ 1356 02d5 72634C61 		.string	"rcLastModule_v1_1"
+ 1356      73744D6F 
+ 1356      64756C65 
+ 1356      5F76315F 
+ 1356      3100
+ 1357              	.LASF64:
+ 1358 02e7 72634D65 		.string	"rcMetadata"
+ 1358      74616461 
+ 1358      746100
+ 1359              	.LASF236:
+ 1360 02f2 72635772 		.string	"rcWriteonly"
+ 1360      6974656F 
+ 1360      6E6C7900 
+ 1361              	.LASF115:
+ 1362 02fe 7263436C 		.string	"rcClearing"
+ 1362      65617269 
+ 1362      6E6700
+ 1363              	.LASF55:
+ 1364 0309 7263466F 		.string	"rcFormatter"
+ 1364      726D6174 
+ 1364      74657200 
+ 1365              	.LASF248:
+ 1366 0315 72634F75 		.string	"rcOutoforder"
+ 1366      746F666F 
+ 1366      72646572 
+ 1366      00
+ 1367              	.LASF70:
+ 1368 0322 72635061 		.string	"rcPath"
+ 1368      746800
+ 1369              	.LASF189:
+ 1370 0329 72634C69 		.string	"rcLibrary"
+ 1370      62726172 
+ 1370      7900
+ 1371              	.LASF141:
+ 1372 0333 7263546F 		.string	"rcTokenizing"
+ 1372      6B656E69 
+ 1372      7A696E67 
+ 1372      00
+ 1373              	.LASF198:
+ 1374 0340 72634572 		.string	"rcError"
+ 1374      726F7200 
+ 1375              	.LASF18:
+ 1376 0348 72635846 		.string	"rcXF"
+ 1376      00
+ 1377              	.LASF183:
+ 1378 034d 72634D65 		.string	"rcMessage"
+ 1378      73736167 
+ 1378      6500
+ 1379              	.LASF237:
+ 1380 0357 72634E6F 		.string	"rcNoPerm"
+ 1380      5065726D 
+ 1380      00
+
GAS LISTING /tmp/cctAECUH.s 			page 30
+
+
+ 1381              	.LASF54:
+ 1382 0360 72634675 		.string	"rcFunction"
+ 1382      6E637469 
+ 1382      6F6E00
+ 1383              	.LASF208:
+ 1384 036b 7263556E 		.string	"rcUnsupported"
+ 1384      73757070 
+ 1384      6F727465 
+ 1384      6400
+ 1385              	.LASF43:
+ 1386 0379 72634368 		.string	"rcChar"
+ 1386      617200
+ 1387              	.LASF174:
+ 1388 0380 72634D65 		.string	"rcMemory"
+ 1388      6D6F7279 
+ 1388      00
+ 1389              	.LASF194:
+ 1390 0389 72634372 		.string	"rcCrc"
+ 1390      6300
+ 1391              	.LASF241:
+ 1392 038f 7263546F 		.string	"rcTooBig"
+ 1392      6F426967 
+ 1392      00
+ 1393              	.LASF179:
+ 1394 0398 72634964 		.string	"rcId"
+ 1394      00
+ 1395              	.LASF82:
+ 1396 039d 72635472 		.string	"rcTree"
+ 1396      656500
+ 1397              	.LASF253:
+ 1398 03a4 72634E6F 		.string	"rcNotAvailable"
+ 1398      74417661 
+ 1398      696C6162 
+ 1398      6C6500
+ 1399              	.LASF93:
+ 1400 03b3 72634461 		.string	"rcData"
+ 1400      746100
+ 1401              	.LASF257:
+ 1402 03ba 5F5F6675 		.string	"__func__"
+ 1402      6E635F5F 
+ 1402      00
+ 1403              	.LASF254:
+ 1404 03c3 72635772 		.string	"rcWrongType"
+ 1404      6F6E6754 
+ 1404      79706500 
+ 1405              	.LASF56:
+ 1406 03cf 72634675 		.string	"rcFunctParam"
+ 1406      6E637450 
+ 1406      6172616D 
+ 1406      00
+ 1407              	.LASF63:
+ 1408 03dc 72634D65 		.string	"rcMemMap"
+ 1408      6D4D6170 
+ 1408      00
+ 1409              	.LASF9:
+ 1410 03e5 63686172 		.string	"char"
+ 1410      00
+
GAS LISTING /tmp/cctAECUH.s 			page 31
+
+
+ 1411              	.LASF211:
+ 1412 03ea 7263416D 		.string	"rcAmbiguous"
+ 1412      62696775 
+ 1412      6F757300 
+ 1413              	.LASF244:
+ 1414 03f6 72634967 		.string	"rcIgnored"
+ 1414      6E6F7265 
+ 1414      6400
+ 1415              	.LASF109:
+ 1416 0400 72635265 		.string	"rcRenaming"
+ 1416      6E616D69 
+ 1416      6E6700
+ 1417              	.LASF121:
+ 1418 040b 72635265 		.string	"rcReading"
+ 1418      6164696E 
+ 1418      6700
+ 1419              	.LASF58:
+ 1420 0415 7263496E 		.string	"rcIndex"
+ 1420      64657800 
+ 1421              	.LASF104:
+ 1422 041d 72634C69 		.string	"rcListing"
+ 1422      7374696E 
+ 1422      6700
+ 1423              	.LASF178:
+ 1424 0427 7263496E 		.string	"rcInterface"
+ 1424      74657266 
+ 1424      61636500 
+ 1425              	.LASF107:
+ 1426 0433 72634C6F 		.string	"rcLocking"
+ 1426      636B696E 
+ 1426      6700
+ 1427              	.LASF60:
+ 1428 043d 72634C6F 		.string	"rcLock"
+ 1428      636B00
+ 1429              	.LASF108:
+ 1430 0444 7263556E 		.string	"rcUnlocking"
+ 1430      6C6F636B 
+ 1430      696E6700 
+ 1431              	.LASF85:
+ 1432 0450 72635665 		.string	"rcVector"
+ 1432      63746F72 
+ 1432      00
+ 1433              	.LASF122:
+ 1434 0459 72635772 		.string	"rcWriting"
+ 1434      6974696E 
+ 1434      6700
+ 1435              	.LASF53:
+ 1436 0463 72634669 		.string	"rcFileFormat"
+ 1436      6C65466F 
+ 1436      726D6174 
+ 1436      00
+ 1437              	.LASF21:
+ 1438 0470 72634170 		.string	"rcApp"
+ 1438      7000
+ 1439              	.LASF125:
+ 1440 0476 72635265 		.string	"rcResetting"
+ 1440      73657474 
+
GAS LISTING /tmp/cctAECUH.s 			page 32
+
+
+ 1440      696E6700 
+ 1441              	.LASF71:
+ 1442 0482 72635072 		.string	"rcProcess"
+ 1442      6F636573 
+ 1442      7300
+ 1443              	.LASF106:
+ 1444 048c 72635265 		.string	"rcResolving"
+ 1444      736F6C76 
+ 1444      696E6700 
+ 1445              	.LASF12:
+ 1446 0498 72635465 		.string	"rcText"
+ 1446      787400
+ 1447              	.LASF66:
+ 1448 049f 72634E61 		.string	"rcNamelist"
+ 1448      6D656C69 
+ 1448      737400
+ 1449              	.LASF229:
+ 1450 04aa 72634E6F 		.string	"rcNotFound"
+ 1450      74466F75 
+ 1450      6E6400
+ 1451              	.LASF139:
+ 1452 04b5 72635265 		.string	"rcReindexing"
+ 1452      696E6465 
+ 1452      78696E67 
+ 1452      00
+ 1453              	.LASF87:
+ 1454 04c2 72634578 		.string	"rcExpression"
+ 1454      70726573 
+ 1454      73696F6E 
+ 1454      00
+ 1455              	.LASF235:
+ 1456 04cf 72635265 		.string	"rcReadonly"
+ 1456      61646F6E 
+ 1456      6C7900
+ 1457              	.LASF95:
+ 1458 04da 72635572 		.string	"rcUri"
+ 1458      6900
+ 1459              	.LASF100:
+ 1460 04e0 7263436F 		.string	"rcConstructing"
+ 1460      6E737472 
+ 1460      75637469 
+ 1460      6E6700
+ 1461              	.LASF173:
+ 1462 04ef 72634F66 		.string	"rcOffset"
+ 1462      66736574 
+ 1462      00
+ 1463              	.LASF233:
+ 1464 04f8 72634465 		.string	"rcDeadlock"
+ 1464      61646C6F 
+ 1464      636B00
+ 1465              	.LASF47:
+ 1466 0503 72634461 		.string	"rcDatabase"
+ 1466      74616261 
+ 1466      736500
+ 1467              	.LASF127:
+ 1468 050e 72634672 		.string	"rcFreezing"
+ 1468      65657A69 
+
GAS LISTING /tmp/cctAECUH.s 			page 33
+
+
+ 1468      6E6700
+ 1469              	.LASF217:
+ 1470 0519 7263496E 		.string	"rcIncorrect"
+ 1470      636F7272 
+ 1470      65637400 
+ 1471              	.LASF206:
+ 1472 0525 7263446F 		.string	"rcDone"
+ 1472      6E6500
+ 1473              	.LASF157:
+ 1474 052c 7263466C 		.string	"rcFlushing"
+ 1474      75736869 
+ 1474      6E6700
+ 1475              	.LASF159:
+ 1476 0537 7263456E 		.string	"rcEncrypting"
+ 1476      63727970 
+ 1476      74696E67 
+ 1476      00
+ 1477              	.LASF251:
+ 1478 0544 7263556E 		.string	"rcUnequal"
+ 1478      65717561 
+ 1478      6C00
+ 1479              	.LASF10:
+ 1480 054e 72634578 		.string	"rcExe"
+ 1480      6500
+ 1481              	.LASF38:
+ 1482 0554 72634172 		.string	"rcArgv"
+ 1482      677600
+ 1483              	.LASF147:
+ 1484 055b 72634465 		.string	"rcDetaching"
+ 1484      74616368 
+ 1484      696E6700 
+ 1485              	.LASF99:
+ 1486 0567 72634361 		.string	"rcCasting"
+ 1486      7374696E 
+ 1486      6700
+ 1487              	.LASF110:
+ 1488 0571 7263416C 		.string	"rcAliasing"
+ 1488      69617369 
+ 1488      6E6700
+ 1489              	.LASF49:
+ 1490 057c 7263446F 		.string	"rcDoc"
+ 1490      6300
+ 1491              	.LASF98:
+ 1492 0582 7263416C 		.string	"rcAllocating"
+ 1492      6C6F6361 
+ 1492      74696E67 
+ 1492      00
+ 1493              	.LASF212:
+ 1494 058f 72634E75 		.string	"rcNull"
+ 1494      6C6C00
+ 1495              	.LASF180:
+ 1496 0596 72635261 		.string	"rcRange"
+ 1496      6E676500 
+ 1497              	.LASF35:
+ 1498 059e 72634172 		.string	"rcArc"
+ 1498      6300
+ 1499              	.LASF252:
+
GAS LISTING /tmp/cctAECUH.s 			page 34
+
+
+ 1500 05a4 72634661 		.string	"rcFailed"
+ 1500      696C6564 
+ 1500      00
+ 1501              	.LASF23:
+ 1502 05ad 72635352 		.string	"rcSRA"
+ 1502      4100
+ 1503              	.LASF152:
+ 1504 05b3 72635365 		.string	"rcSearching"
+ 1504      61726368 
+ 1504      696E6700 
+ 1505              	.LASF225:
+ 1506 05bf 7263496E 		.string	"rcInsufficient"
+ 1506      73756666 
+ 1506      69636965 
+ 1506      6E7400
+ 1507              	.LASF165:
+ 1508 05ce 72635072 		.string	"rcProcessing"
+ 1508      6F636573 
+ 1508      73696E67 
+ 1508      00
+ 1509              	.LASF144:
+ 1510 05db 72635369 		.string	"rcSignaling"
+ 1510      676E616C 
+ 1510      696E6700 
+ 1511              	.LASF135:
+ 1512 05e7 72634465 		.string	"rcDecoding"
+ 1512      636F6469 
+ 1512      6E6700
+ 1513              	.LASF261:
+ 1514 05f2 4B4E756C 		.string	"KNullBlockCipherVecMake"
+ 1514      6C426C6F 
+ 1514      636B4369 
+ 1514      70686572 
+ 1514      5665634D 
+ 1515              	.LASF76:
+ 1516 060a 72635374 		.string	"rcStorage"
+ 1516      6F726167 
+ 1516      6500
+ 1517              	.LASF213:
+ 1518 0614 72634261 		.string	"rcBadVersion"
+ 1518      64566572 
+ 1518      73696F6E 
+ 1518      00
+ 1519              	.LASF210:
+ 1520 0621 7263556E 		.string	"rcUnrecognized"
+ 1520      7265636F 
+ 1520      676E697A 
+ 1520      656400
+ 1521              	.LASF161:
+ 1522 0630 7263436F 		.string	"rcComparing"
+ 1522      6D706172 
+ 1522      696E6700 
+ 1523              	.LASF65:
+ 1524 063c 72634D67 		.string	"rcMgr"
+ 1524      7200
+ 1525              	.LASF154:
+ 1526 0642 72634576 		.string	"rcEvaluating"
+
GAS LISTING /tmp/cctAECUH.s 			page 35
+
+
+ 1526      616C7561 
+ 1526      74696E67 
+ 1526      00
+ 1527              	.LASF163:
+ 1528 064f 72635265 		.string	"rcRetrieving"
+ 1528      74726965 
+ 1528      76696E67 
+ 1528      00
+ 1529              	.LASF116:
+ 1530 065c 72635570 		.string	"rcUpdating"
+ 1530      64617469 
+ 1530      6E6700
+ 1531              	.LASF83:
+ 1532 0667 72635472 		.string	"rcTrie"
+ 1532      696500
+ 1533              	.LASF201:
+ 1534 066e 72635369 		.string	"rcSize"
+ 1534      7A6500
+ 1535              	.LASF150:
+ 1536 0675 72634D75 		.string	"rcMultiplexing"
+ 1536      6C746970 
+ 1536      6C657869 
+ 1536      6E6700
+ 1537              	.LASF243:
+ 1538 0684 72634F75 		.string	"rcOutOfKDirectory"
+ 1538      744F664B 
+ 1538      44697265 
+ 1538      63746F72 
+ 1538      7900
+ 1539              	.LASF40:
+ 1540 0696 72634261 		.string	"rcBarrier"
+ 1540      72726965 
+ 1540      7200
+ 1541              	.LASF77:
+ 1542 06a0 72635374 		.string	"rcString"
+ 1542      72696E67 
+ 1542      00
+ 1543              	.LASF193:
+ 1544 06a9 7263456E 		.string	"rcEncryption"
+ 1544      63727970 
+ 1544      74696F6E 
+ 1544      00
+ 1545              	.LASF25:
+ 1546 06b6 72634B46 		.string	"rcKFG"
+ 1546      4700
+ 1547              	.LASF46:
+ 1548 06bc 72634375 		.string	"rcCursor"
+ 1548      72736F72 
+ 1548      00
+ 1549              	.LASF101:
+ 1550 06c5 72634465 		.string	"rcDestroying"
+ 1550      7374726F 
+ 1550      79696E67 
+ 1550      00
+ 1551              	.LASF27:
+ 1552 06d2 72634B72 		.string	"rcKrypto"
+ 1552      7970746F 
+
GAS LISTING /tmp/cctAECUH.s 			page 36
+
+
+ 1552      00
+ 1553              	.LASF196:
+ 1554 06db 72635365 		.string	"rcSeed"
+ 1554      656400
+ 1555              	.LASF221:
+ 1556 06e2 7263496E 		.string	"rcInterrupted"
+ 1556      74657272 
+ 1556      75707465 
+ 1556      6400
+ 1557              	.LASF153:
+ 1558 06f0 72634C6F 		.string	"rcLoading"
+ 1558      6164696E 
+ 1558      6700
+ 1559              	.LASF136:
+ 1560 06fa 72635661 		.string	"rcValidating"
+ 1560      6C696461 
+ 1560      74696E67 
+ 1560      00
+ 1561              	.LASF230:
+ 1562 0707 72634C6F 		.string	"rcLocked"
+ 1562      636B6564 
+ 1562      00
+ 1563              	.LASF59:
+ 1564 0710 72634974 		.string	"rcIterator"
+ 1564      65726174 
+ 1564      6F7200
+ 1565              	.LASF67:
+ 1566 071b 72634E6F 		.string	"rcNode"
+ 1566      646500
+ 1567              	.LASF1:
+ 1568 0722 73686F72 		.string	"short int"
+ 1568      7420696E 
+ 1568      7400
+ 1569              	.LASF102:
+ 1570 072c 72635265 		.string	"rcReleasing"
+ 1570      6C656173 
+ 1570      696E6700 
+ 1571              	.LASF177:
+ 1572 0738 72635472 		.string	"rcTransfer"
+ 1572      616E7366 
+ 1572      657200
+ 1573              	.LASF2:
+ 1574 0743 6C6F6E67 		.string	"long int"
+ 1574      20696E74 
+ 1574      00
+ 1575              	.LASF262:
+ 1576 074c 4B426C6F 		.string	"KBlockCipher"
+ 1576      636B4369 
+ 1576      70686572 
+ 1576      00
+ 1577              	.LASF164:
+ 1578 0759 72635365 		.string	"rcSending"
+ 1578      6E64696E 
+ 1578      6700
+ 1579              	.LASF215:
+ 1580 0763 7263496E 		.string	"rcInvalid"
+ 1580      76616C69 
+
GAS LISTING /tmp/cctAECUH.s 			page 37
+
+
+ 1580      6400
+ 1581              	.LASF249:
+ 1582 076d 72634E6F 		.string	"rcNotOpen"
+ 1582      744F7065 
+ 1582      6E00
+ 1583              	.LASF103:
+ 1584 0777 72634163 		.string	"rcAccessing"
+ 1584      63657373 
+ 1584      696E6700 
+ 1585              	.LASF29:
+ 1586 0783 72634E53 		.string	"rcNS"
+ 1586      00
+ 1587              	.LASF112:
+ 1588 0788 72635072 		.string	"rcProjecting"
+ 1588      6F6A6563 
+ 1588      74696E67 
+ 1588      00
+ 1589              	.LASF175:
+ 1590 0795 72634E61 		.string	"rcName"
+ 1590      6D6500
+ 1591              	.LASF238:
+ 1592 079c 7263496E 		.string	"rcInPlaceNotAllowed"
+ 1592      506C6163 
+ 1592      654E6F74 
+ 1592      416C6C6F 
+ 1592      77656400 
+ 1593              	.LASF247:
+ 1594 07b0 72634F70 		.string	"rcOpen"
+ 1594      656E00
+ 1595              	.LASF227:
+ 1596 07b7 72635669 		.string	"rcViolated"
+ 1596      6F6C6174 
+ 1596      656400
+ 1597              	.LASF169:
+ 1598 07c2 72634E6F 		.string	"rcNoObj"
+ 1598      4F626A00 
+ 1599              	.LASF200:
+ 1600 07ca 72635369 		.string	"rcSignalSet"
+ 1600      676E616C 
+ 1600      53657400 
+ 1601              	.LASF197:
+ 1602 07d6 7263436F 		.string	"rcConnection"
+ 1602      6E6E6563 
+ 1602      74696F6E 
+ 1602      00
+ 1603              	.LASF195:
+ 1604 07e3 72634368 		.string	"rcChecksum"
+ 1604      65636B73 
+ 1604      756D00
+ 1605              	.LASF78:
+ 1606 07ee 72635461 		.string	"rcTable"
+ 1606      626C6500 
+ 1607              	.LASF11:
+ 1608 07f6 72635275 		.string	"rcRuntime"
+ 1608      6E74696D 
+ 1608      6500
+ 1609              	.LASF148:
+
GAS LISTING /tmp/cctAECUH.s 			page 38
+
+
+ 1610 0800 72634C6F 		.string	"rcLogging"
+ 1610      6767696E 
+ 1610      6700
+ 1611              	.LASF160:
+ 1612 080a 72634465 		.string	"rcDecrypting"
+ 1612      63727970 
+ 1612      74696E67 
+ 1612      00
+ 1613              	.LASF61:
+ 1614 0817 72634C6F 		.string	"rcLog"
+ 1614      6700
+ 1615              	.LASF68:
+ 1616 081d 72634E75 		.string	"rcNumeral"
+ 1616      6D657261 
+ 1616      6C00
+ 1617              	.LASF172:
+ 1618 0827 72635061 		.string	"rcParam"
+ 1618      72616D00 
+ 1619              	.LASF32:
+ 1620 082f 52434D6F 		.string	"RCModule"
+ 1620      64756C65 
+ 1620      00
+ 1621              	.LASF158:
+ 1622 0838 72634170 		.string	"rcAppending"
+ 1622      70656E64 
+ 1622      696E6700 
+ 1623              	.LASF57:
+ 1624 0844 72634865 		.string	"rcHeader"
+ 1624      61646572 
+ 1624      00
+ 1625              	.LASF6:
+ 1626 084d 6C6F6E67 		.string	"long unsigned int"
+ 1626      20756E73 
+ 1626      69676E65 
+ 1626      6420696E 
+ 1626      7400
+ 1627              	.LASF245:
+ 1628 085f 72634F75 		.string	"rcOutofrange"
+ 1628      746F6672 
+ 1628      616E6765 
+ 1628      00
+ 1629              	.LASF170:
+ 1630 086c 72634C69 		.string	"rcLink"
+ 1630      6E6B00
+ 1631              	.LASF52:
+ 1632 0873 72634669 		.string	"rcFileDesc"
+ 1632      6C654465 
+ 1632      736300
+ 1633              	.LASF263:
+ 1634 087e 6E65775F 		.string	"new_obj"
+ 1634      6F626A00 
+ 1635              	.LASF209:
+ 1636 0886 7263556E 		.string	"rcUnexpected"
+ 1636      65787065 
+ 1636      63746564 
+ 1636      00
+ 1637              	.LASF207:
+
GAS LISTING /tmp/cctAECUH.s 			page 39
+
+
+ 1638 0893 7263556E 		.string	"rcUnknown"
+ 1638      6B6E6F77 
+ 1638      6E00
+ 1639              	.LASF155:
+ 1640 089d 7263496E 		.string	"rcInflating"
+ 1640      666C6174 
+ 1640      696E6700 
+ 1641              	.LASF118:
+ 1642 08a9 72634F70 		.string	"rcOpening"
+ 1642      656E696E 
+ 1642      6700
+ 1643              	.LASF17:
+ 1644 08b3 72635053 		.string	"rcPS"
+ 1644      00
+ 1645              	.LASF3:
+ 1646 08b8 756E7369 		.string	"unsigned char"
+ 1646      676E6564 
+ 1646      20636861 
+ 1646      7200
+ 1647              	.LASF126:
+ 1648 08c6 72635065 		.string	"rcPersisting"
+ 1648      72736973 
+ 1648      74696E67 
+ 1648      00
+ 1649              	.LASF259:
+ 1650 08d3 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c"
+ 1650      652F726F 
+ 1650      6461726D 
+ 1650      65722F73 
+ 1650      72615F73 
+ 1651              	.LASF220:
+ 1652 090d 7263496E 		.string	"rcIncomplete"
+ 1652      636F6D70 
+ 1652      6C657465 
+ 1652      00
+ 1653              	.LASF246:
+ 1654 091a 72634C61 		.string	"rcLastState_v1_0"
+ 1654      73745374 
+ 1654      6174655F 
+ 1654      76315F30 
+ 1654      00
+ 1655              	.LASF255:
+ 1656 092b 72634C61 		.string	"rcLastState_v1_1"
+ 1656      73745374 
+ 1656      6174655F 
+ 1656      76315F31 
+ 1656      00
+ 1657              	.LASF143:
+ 1658 093c 7263436F 		.string	"rcConverting"
+ 1658      6E766572 
+ 1658      74696E67 
+ 1658      00
+ 1659              	.LASF117:
+ 1660 0949 72634372 		.string	"rcCreating"
+ 1660      65617469 
+ 1660      6E6700
+ 1661              	.LASF191:
+
GAS LISTING /tmp/cctAECUH.s 			page 40
+
+
+ 1662 0954 72634974 		.string	"rcItem"
+ 1662      656D00
+ 1663              	.LASF111:
+ 1664 095b 72635365 		.string	"rcSelecting"
+ 1664      6C656374 
+ 1664      696E6700 
+ 1665              	.LASF8:
+ 1666 0967 72635F74 		.string	"rc_t"
+ 1666      00
+ 1667              	.LASF73:
+ 1668 096c 72635257 		.string	"rcRWLock"
+ 1668      4C6F636B 
+ 1668      00
+ 1669              	.LASF190:
+ 1670 0975 72634C61 		.string	"rcLastObject_v1_0"
+ 1670      73744F62 
+ 1670      6A656374 
+ 1670      5F76315F 
+ 1670      3000
+ 1671              	.LASF203:
+ 1672 0987 72634C61 		.string	"rcLastObject_v1_1"
+ 1672      73744F62 
+ 1672      6A656374 
+ 1672      5F76315F 
+ 1672      3100
+ 1673              	.LASF187:
+ 1674 0999 72634172 		.string	"rcArcHardLink"
+ 1674      63486172 
+ 1674      644C696E 
+ 1674      6B00
+ 1675              	.LASF113:
+ 1676 09a7 7263496E 		.string	"rcInserting"
+ 1676      73657274 
+ 1676      696E6700 
+ 1677              	.LASF166:
+ 1678 09b3 72634964 		.string	"rcIdentifying"
+ 1678      656E7469 
+ 1678      6679696E 
+ 1678      6700
+ 1679              	.LASF124:
+ 1680 09c1 72635265 		.string	"rcReverting"
+ 1680      76657274 
+ 1680      696E6700 
+ 1681              	.LASF20:
+ 1682 09cd 72635644 		.string	"rcVDB"
+ 1682      4200
+ 1683              	.LASF105:
+ 1684 09d3 72635669 		.string	"rcVisiting"
+ 1684      73697469 
+ 1684      6E6700
+ 1685              	.LASF88:
+ 1686 09de 72634C61 		.string	"rcLastTarget_v1_0"
+ 1686      73745461 
+ 1686      72676574 
+ 1686      5F76315F 
+ 1686      3000
+ 1687              	.LASF96:
+
GAS LISTING /tmp/cctAECUH.s 			page 41
+
+
+ 1688 09f0 72634C61 		.string	"rcLastTarget_v1_1"
+ 1688      73745461 
+ 1688      72676574 
+ 1688      5F76315F 
+ 1688      3100
+ 1689              	.LASF84:
+ 1690 0a02 72635479 		.string	"rcType"
+ 1690      706500
+ 1691              	.LASF231:
+ 1692 0a09 7263556E 		.string	"rcUnlocked"
+ 1692      6C6F636B 
+ 1692      656400
+ 1693              	.LASF151:
+ 1694 0a14 7263436C 		.string	"rcClassifying"
+ 1694      61737369 
+ 1694      6679696E 
+ 1694      6700
+ 1695              	.LASF228:
+ 1696 0a22 72634578 		.string	"rcExists"
+ 1696      69737473 
+ 1696      00
+ 1697              	.LASF130:
+ 1698 0a2b 7263466F 		.string	"rcFormatting"
+ 1698      726D6174 
+ 1698      74696E67 
+ 1698      00
+ 1699              	.LASF79:
+ 1700 0a38 72635468 		.string	"rcThread"
+ 1700      72656164 
+ 1700      00
+ 1701              	.LASF0:
+ 1702 0a41 7369676E 		.string	"signed char"
+ 1702      65642063 
+ 1702      68617200 
+ 1703              	.LASF4:
+ 1704 0a4d 73686F72 		.string	"short unsigned int"
+ 1704      7420756E 
+ 1704      7369676E 
+ 1704      65642069 
+ 1704      6E7400
+ 1705              	.LASF260:
+ 1706 0a60 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 1706      652F726F 
+ 1706      6461726D 
+ 1706      65722F73 
+ 1706      72615F73 
+ 1707              	.LASF182:
+ 1708 0aa8 72634279 		.string	"rcByteOrder"
+ 1708      74654F72 
+ 1708      64657200 
+ 1709              	.LASF36:
+ 1710 0ab4 7263546F 		.string	"rcToc"
+ 1710      6300
+ 1711              	.LASF44:
+ 1712 0aba 7263436F 		.string	"rcColumn"
+ 1712      6C756D6E 
+ 1712      00
+
GAS LISTING /tmp/cctAECUH.s 			page 42
+
+
+ 1713              	.LASF256:
+ 1714 0ac3 5F5F5052 		.string	"__PRETTY_FUNCTION__"
+ 1714      45545459 
+ 1714      5F46554E 
+ 1714      4354494F 
+ 1714      4E5F5F00 
+ 1715              	.LASF94:
+ 1716 0ad7 72635175 		.string	"rcQuery"
+ 1716      65727900 
+ 1717              	.LASF140:
+ 1718 0adf 72635265 		.string	"rcRegistering"
+ 1718      67697374 
+ 1718      6572696E 
+ 1718      6700
+ 1719              	.LASF86:
+ 1720 0aed 72634479 		.string	"rcDylib"
+ 1720      6C696200 
+ 1721              	.LASF81:
+ 1722 0af5 7263546F 		.string	"rcToken"
+ 1722      6B656E00 
+ 1723              	.LASF134:
+ 1724 0afd 7263456E 		.string	"rcEncoding"
+ 1724      636F6469 
+ 1724      6E6700
+ 1725              	.LASF224:
+ 1726 0b08 72634578 		.string	"rcExhausted"
+ 1726      68617573 
+ 1726      74656400 
+ 1727              	.LASF186:
+ 1728 0b14 72634469 		.string	"rcDirEntry"
+ 1728      72456E74 
+ 1728      727900
+ 1729              	.LASF26:
+ 1730 0b1f 7263416C 		.string	"rcAlign"
+ 1730      69676E00 
+ 1731              	.LASF28:
+ 1732 0b27 72635244 		.string	"rcRDBMS"
+ 1732      424D5300 
+ 1733              	.LASF14:
+ 1734 0b2f 72634353 		.string	"rcCS"
+ 1734      00
+ 1735              	.LASF129:
+ 1736 0b34 7263436F 		.string	"rcConcatenating"
+ 1736      6E636174 
+ 1736      656E6174 
+ 1736      696E6700 
+ 1737              	.LASF48:
+ 1738 0b44 72634469 		.string	"rcDirectory"
+ 1738      72656374 
+ 1738      6F727900 
+ 1739              	.LASF223:
+ 1740 0b50 7263456D 		.string	"rcEmpty"
+ 1740      70747900 
+ 1741              	.LASF13:
+ 1742 0b58 7263436F 		.string	"rcCont"
+ 1742      6E7400
+ 1743              	.LASF33:
+
GAS LISTING /tmp/cctAECUH.s 			page 43
+
+
+ 1744 0b5f 52435461 		.string	"RCTarget"
+ 1744      72676574 
+ 1744      00
+ 1745              		.ident	"GCC: (GNU) 4.4.2"
+ 1746              		.section	.note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/cctAECUH.s 			page 44
+
+
+DEFINED SYMBOLS
+                            *ABS*:0000000000000000 no-null-ncbi.c
+     /tmp/cctAECUH.s:17     .text:0000000000000000 KNullBlockCipherVecMake
+     /tmp/cctAECUH.s:66     .rodata:0000000000000040 __func__.2350
+     /tmp/cctAECUH.s:71     .rodata:0000000000000060 __PRETTY_FUNCTION__.2349
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+SetRCFileFuncLine
diff --git a/libs/krypto/no-null-ncbi.vecreg.pic.o.list b/libs/krypto/no-null-ncbi.vecreg.pic.o.list
new file mode 100644
index 0000000..d53afd5
--- /dev/null
+++ b/libs/krypto/no-null-ncbi.vecreg.pic.o.list
@@ -0,0 +1,2540 @@
+GAS LISTING /tmp/cclL3imJ.s 			page 1
+
+
+   1              		.file	"no-null-ncbi.c"
+   2              		.section	.debug_abbrev,"", at progbits
+   3              	.Ldebug_abbrev0:
+   4              		.section	.debug_info,"", at progbits
+   5              	.Ldebug_info0:
+   6              		.section	.debug_line,"", at progbits
+   7              	.Ldebug_line0:
+   8 0000 CC000000 		.text
+   8      0200AA00 
+   8      00000101 
+   8      FB0E0D00 
+   8      01010101 
+   9              	.Ltext0:
+  10              		.section	.rodata
+  11              		.align 8
+  12              	.LC0:
+  13 0000 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c"
+  13      652F726F 
+  13      6461726D 
+  13      65722F73 
+  13      72615F73 
+  14              		.text
+  15              	.globl KNullBlockCipherVecRegMake
+  16              		.type	KNullBlockCipherVecRegMake, @function
+  17              	KNullBlockCipherVecRegMake:
+  18              	.LFB15:
+  19              		.file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c"
+   1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /*===========================================================================
+   2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *
+   3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *                            PUBLIC DOMAIN NOTICE
+   4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *               National Center for Biotechnology Information
+   5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *
+   6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  This software/database is a "United States Government Work" under the
+   7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  terms of the United States Copyright Act.  It was written as part of
+   8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  the author's official duties as a United States Government employee and
+   9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  thus cannot be copyrighted.  This software/database is freely available
+  10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  to the public for use. The National Library of Medicine and the U.S.
+  11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  Government have not placed any restriction on its use or reproduction.
+  12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *
+  13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  Although all reasonable efforts have been taken to ensure the accuracy
+  14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  and reliability of the software and data, the NLM and the U.S.
+  15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  Government do not and cannot warrant the performance or results that
+  16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  may be obtained by using this software or data. The NLM and the U.S.
+  17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  Government disclaim all warranties, express or implied, including
+  18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  warranties of performance, merchantability or fitness for any particular
+  19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  purpose.
+  20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *
+  21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *  Please cite the author in any work or product based on this material.
+  22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *
+  23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  * ===========================================================================
+  24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  */
+  25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include <krypto/extern.h>
+  27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include "ncbi-priv.h"
+  29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include "cipher-priv.h"
+  30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /* #include "blockcipher-priv.h" */
+
GAS LISTING /tmp/cclL3imJ.s 			page 2
+
+
+  31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** #include <klib/rc.h>
+  33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** /* ----------------------------------------------------------------------
+  35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  * Make
+  36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  *
+  37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  * Create a new Null Block Cipher object.
+  38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  * The processor is checked to see if this particular version is supported on
+  39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  * this particular CPU.
+  40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****  */
+  41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** struct KBlockCipher;
+  42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** rc_t NULLBCMEMBER(Make) (struct KBlockCipher ** new_obj)
+  43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** {
+  20              		.loc 1 43 0
+  21              		.cfi_startproc
+  22 0000 55       		pushq	%rbp
+  23              	.LCFI0:
+  24              		.cfi_def_cfa_offset 16
+  25 0001 4889E5   		movq	%rsp, %rbp
+  26              		.cfi_offset 6, -16
+  27              	.LCFI1:
+  28              		.cfi_def_cfa_register 6
+  29 0004 4883EC20 		subq	$32, %rsp
+  30 0008 48897DE8 		movq	%rdi, -24(%rbp)
+  44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     rc_t rc;
+  45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     /* Check parameter first */
+  47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     if (new_obj == NULL)
+  31              		.loc 1 47 0
+  32 000c 48837DE8 		cmpq	$0, -24(%rbp)
+  32      00
+  33 0011 7522     		jne	.L2
+  48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****         rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+  34              		.loc 1 48 0
+  35 0013 B9300000 		movl	$48, %ecx
+  35      00
+  36 0018 488D1500 		leaq	__func__.2439(%rip), %rdx
+  36      000000
+  37 001f 488D3500 		leaq	.LC0(%rip), %rsi
+  37      000000
+  38 0026 BF878F00 		movl	$-2030006393, %edi
+  38      87
+  39 002b E8000000 		call	SetRCFileFuncLine at PLT
+  39      00
+  40 0030 8945FC   		movl	%eax, -4(%rbp)
+  41 0033 EB2B     		jmp	.L3
+  42              	.L2:
+  49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     else
+  51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     {
+  52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****         *new_obj = NULL;
+  43              		.loc 1 52 0
+  44 0035 488B45E8 		movq	-24(%rbp), %rax
+  45 0039 48C70000 		movq	$0, (%rax)
+  45      000000
+  53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** 
+  54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****         rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+
GAS LISTING /tmp/cclL3imJ.s 			page 3
+
+
+  46              		.loc 1 54 0
+  47 0040 B9360000 		movl	$54, %ecx
+  47      00
+  48 0045 488D1500 		leaq	__func__.2439(%rip), %rdx
+  48      000000
+  49 004c 488D3500 		leaq	.LC0(%rip), %rsi
+  49      000000
+  50 0053 BF038500 		movl	$-2030009085, %edi
+  50      87
+  51 0058 E8000000 		call	SetRCFileFuncLine at PLT
+  51      00
+  52 005d 8945FC   		movl	%eax, -4(%rbp)
+  53              	.L3:
+  55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     }
+  56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c ****     return rc;
+  54              		.loc 1 56 0
+  55 0060 8B45FC   		movl	-4(%rbp), %eax
+  57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c **** }
+  56              		.loc 1 57 0
+  57 0063 C9       		leave
+  58 0064 C3       		ret
+  59              		.cfi_endproc
+  60              	.LFE15:
+  61              		.size	KNullBlockCipherVecRegMake, .-KNullBlockCipherVecRegMake
+  62              		.section	.rodata
+  63 003a 00000000 		.align 16
+  63      0000
+  64              		.type	__func__.2439, @object
+  65              		.size	__func__.2439, 27
+  66              	__func__.2439:
+  67 0040 4B4E756C 		.string	"KNullBlockCipherVecRegMake"
+  67      6C426C6F 
+  67      636B4369 
+  67      70686572 
+  67      56656352 
+  68 005b 00000000 		.align 16
+  68      00
+  69              		.type	__PRETTY_FUNCTION__.2438, @object
+  70              		.size	__PRETTY_FUNCTION__.2438, 27
+  71              	__PRETTY_FUNCTION__.2438:
+  72 0060 4B4E756C 		.string	"KNullBlockCipherVecRegMake"
+  72      6C426C6F 
+  72      636B4369 
+  72      70686572 
+  72      56656352 
+  73              		.text
+  74              	.Letext0:
+  75              		.section	.debug_loc,"", at progbits
+  76              	.Ldebug_loc0:
+  77              	.LLST0:
+  78 0000 00000000 		.quad	.LFB15-.Ltext0
+  78      00000000 
+  79 0008 01000000 		.quad	.LCFI0-.Ltext0
+  79      00000000 
+  80 0010 0200     		.value	0x2
+  81 0012 77       		.byte	0x77
+  82 0013 08       		.sleb128 8
+
GAS LISTING /tmp/cclL3imJ.s 			page 4
+
+
+  83 0014 01000000 		.quad	.LCFI0-.Ltext0
+  83      00000000 
+  84 001c 04000000 		.quad	.LCFI1-.Ltext0
+  84      00000000 
+  85 0024 0200     		.value	0x2
+  86 0026 77       		.byte	0x77
+  87 0027 10       		.sleb128 16
+  88 0028 04000000 		.quad	.LCFI1-.Ltext0
+  88      00000000 
+  89 0030 65000000 		.quad	.LFE15-.Ltext0
+  89      00000000 
+  90 0038 0200     		.value	0x2
+  91 003a 76       		.byte	0x76
+  92 003b 10       		.sleb128 16
+  93 003c 00000000 		.quad	0x0
+  93      00000000 
+  94 0044 00000000 		.quad	0x0
+  94      00000000 
+  95              		.file 2 "/usr/include/stdint.h"
+  96              		.file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+  97              		.file 4 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+  98              		.section	.debug_info
+  99 0000 24070000 		.long	0x724
+ 100 0004 0200     		.value	0x2
+ 101 0006 00000000 		.long	.Ldebug_abbrev0
+ 102 000a 08       		.byte	0x8
+ 103 000b 01       		.uleb128 0x1
+ 104 000c 00000000 		.long	.LASF258
+ 105 0010 01       		.byte	0x1
+ 106 0011 00000000 		.long	.LASF259
+ 107 0015 00000000 		.long	.LASF260
+ 108 0019 00000000 		.quad	.Ltext0
+ 108      00000000 
+ 109 0021 00000000 		.quad	.Letext0
+ 109      00000000 
+ 110 0029 00000000 		.long	.Ldebug_line0
+ 111 002d 02       		.uleb128 0x2
+ 112 002e 01       		.byte	0x1
+ 113 002f 06       		.byte	0x6
+ 114 0030 00000000 		.long	.LASF0
+ 115 0034 02       		.uleb128 0x2
+ 116 0035 02       		.byte	0x2
+ 117 0036 05       		.byte	0x5
+ 118 0037 00000000 		.long	.LASF1
+ 119 003b 03       		.uleb128 0x3
+ 120 003c 04       		.byte	0x4
+ 121 003d 05       		.byte	0x5
+ 122 003e 696E7400 		.string	"int"
+ 123 0042 02       		.uleb128 0x2
+ 124 0043 08       		.byte	0x8
+ 125 0044 05       		.byte	0x5
+ 126 0045 00000000 		.long	.LASF2
+ 127 0049 02       		.uleb128 0x2
+ 128 004a 01       		.byte	0x1
+ 129 004b 08       		.byte	0x8
+ 130 004c 00000000 		.long	.LASF3
+ 131 0050 02       		.uleb128 0x2
+
GAS LISTING /tmp/cclL3imJ.s 			page 5
+
+
+ 132 0051 02       		.byte	0x2
+ 133 0052 07       		.byte	0x7
+ 134 0053 00000000 		.long	.LASF4
+ 135 0057 04       		.uleb128 0x4
+ 136 0058 00000000 		.long	.LASF7
+ 137 005c 02       		.byte	0x2
+ 138 005d 34       		.byte	0x34
+ 139 005e 62000000 		.long	0x62
+ 140 0062 02       		.uleb128 0x2
+ 141 0063 04       		.byte	0x4
+ 142 0064 07       		.byte	0x7
+ 143 0065 00000000 		.long	.LASF5
+ 144 0069 02       		.uleb128 0x2
+ 145 006a 08       		.byte	0x8
+ 146 006b 07       		.byte	0x7
+ 147 006c 00000000 		.long	.LASF6
+ 148 0070 04       		.uleb128 0x4
+ 149 0071 00000000 		.long	.LASF8
+ 150 0075 03       		.byte	0x3
+ 151 0076 30       		.byte	0x30
+ 152 0077 57000000 		.long	0x57
+ 153 007b 05       		.uleb128 0x5
+ 154 007c 08       		.byte	0x8
+ 155 007d 07       		.byte	0x7
+ 156 007e 02       		.uleb128 0x2
+ 157 007f 01       		.byte	0x1
+ 158 0080 06       		.byte	0x6
+ 159 0081 00000000 		.long	.LASF9
+ 160 0085 06       		.uleb128 0x6
+ 161 0086 00000000 		.long	.LASF32
+ 162 008a 04       		.byte	0x4
+ 163 008b 04       		.byte	0x4
+ 164 008c 5A       		.byte	0x5a
+ 165 008d 16010000 		.long	0x116
+ 166 0091 07       		.uleb128 0x7
+ 167 0092 00000000 		.long	.LASF10
+ 168 0096 00       		.sleb128 0
+ 169 0097 07       		.uleb128 0x7
+ 170 0098 00000000 		.long	.LASF11
+ 171 009c 01       		.sleb128 1
+ 172 009d 07       		.uleb128 0x7
+ 173 009e 00000000 		.long	.LASF12
+ 174 00a2 02       		.sleb128 2
+ 175 00a3 07       		.uleb128 0x7
+ 176 00a4 00000000 		.long	.LASF13
+ 177 00a8 03       		.sleb128 3
+ 178 00a9 07       		.uleb128 0x7
+ 179 00aa 00000000 		.long	.LASF14
+ 180 00ae 04       		.sleb128 4
+ 181 00af 07       		.uleb128 0x7
+ 182 00b0 00000000 		.long	.LASF15
+ 183 00b4 05       		.sleb128 5
+ 184 00b5 07       		.uleb128 0x7
+ 185 00b6 00000000 		.long	.LASF16
+ 186 00ba 06       		.sleb128 6
+ 187 00bb 07       		.uleb128 0x7
+ 188 00bc 00000000 		.long	.LASF17
+
GAS LISTING /tmp/cclL3imJ.s 			page 6
+
+
+ 189 00c0 07       		.sleb128 7
+ 190 00c1 07       		.uleb128 0x7
+ 191 00c2 00000000 		.long	.LASF18
+ 192 00c6 08       		.sleb128 8
+ 193 00c7 07       		.uleb128 0x7
+ 194 00c8 00000000 		.long	.LASF19
+ 195 00cc 09       		.sleb128 9
+ 196 00cd 07       		.uleb128 0x7
+ 197 00ce 00000000 		.long	.LASF20
+ 198 00d2 0A       		.sleb128 10
+ 199 00d3 07       		.uleb128 0x7
+ 200 00d4 00000000 		.long	.LASF21
+ 201 00d8 0B       		.sleb128 11
+ 202 00d9 07       		.uleb128 0x7
+ 203 00da 00000000 		.long	.LASF22
+ 204 00de 0C       		.sleb128 12
+ 205 00df 07       		.uleb128 0x7
+ 206 00e0 00000000 		.long	.LASF23
+ 207 00e4 0D       		.sleb128 13
+ 208 00e5 07       		.uleb128 0x7
+ 209 00e6 00000000 		.long	.LASF24
+ 210 00ea 0E       		.sleb128 14
+ 211 00eb 07       		.uleb128 0x7
+ 212 00ec 00000000 		.long	.LASF25
+ 213 00f0 0E       		.sleb128 14
+ 214 00f1 07       		.uleb128 0x7
+ 215 00f2 00000000 		.long	.LASF26
+ 216 00f6 0F       		.sleb128 15
+ 217 00f7 07       		.uleb128 0x7
+ 218 00f8 00000000 		.long	.LASF27
+ 219 00fc 10       		.sleb128 16
+ 220 00fd 07       		.uleb128 0x7
+ 221 00fe 00000000 		.long	.LASF28
+ 222 0102 11       		.sleb128 17
+ 223 0103 07       		.uleb128 0x7
+ 224 0104 00000000 		.long	.LASF29
+ 225 0108 12       		.sleb128 18
+ 226 0109 07       		.uleb128 0x7
+ 227 010a 00000000 		.long	.LASF30
+ 228 010e 13       		.sleb128 19
+ 229 010f 07       		.uleb128 0x7
+ 230 0110 00000000 		.long	.LASF31
+ 231 0114 14       		.sleb128 20
+ 232 0115 00       		.byte	0x0
+ 233 0116 06       		.uleb128 0x6
+ 234 0117 00000000 		.long	.LASF33
+ 235 011b 04       		.byte	0x4
+ 236 011c 04       		.byte	0x4
+ 237 011d 77       		.byte	0x77
+ 238 011e 9D020000 		.long	0x29d
+ 239 0122 07       		.uleb128 0x7
+ 240 0123 00000000 		.long	.LASF34
+ 241 0127 00       		.sleb128 0
+ 242 0128 07       		.uleb128 0x7
+ 243 0129 00000000 		.long	.LASF35
+ 244 012d 01       		.sleb128 1
+ 245 012e 07       		.uleb128 0x7
+
GAS LISTING /tmp/cclL3imJ.s 			page 7
+
+
+ 246 012f 00000000 		.long	.LASF36
+ 247 0133 02       		.sleb128 2
+ 248 0134 07       		.uleb128 0x7
+ 249 0135 00000000 		.long	.LASF37
+ 250 0139 03       		.sleb128 3
+ 251 013a 07       		.uleb128 0x7
+ 252 013b 00000000 		.long	.LASF38
+ 253 013f 04       		.sleb128 4
+ 254 0140 07       		.uleb128 0x7
+ 255 0141 00000000 		.long	.LASF39
+ 256 0145 05       		.sleb128 5
+ 257 0146 07       		.uleb128 0x7
+ 258 0147 00000000 		.long	.LASF40
+ 259 014b 06       		.sleb128 6
+ 260 014c 07       		.uleb128 0x7
+ 261 014d 00000000 		.long	.LASF41
+ 262 0151 07       		.sleb128 7
+ 263 0152 07       		.uleb128 0x7
+ 264 0153 00000000 		.long	.LASF42
+ 265 0157 08       		.sleb128 8
+ 266 0158 07       		.uleb128 0x7
+ 267 0159 00000000 		.long	.LASF43
+ 268 015d 09       		.sleb128 9
+ 269 015e 07       		.uleb128 0x7
+ 270 015f 00000000 		.long	.LASF44
+ 271 0163 0A       		.sleb128 10
+ 272 0164 07       		.uleb128 0x7
+ 273 0165 00000000 		.long	.LASF45
+ 274 0169 0B       		.sleb128 11
+ 275 016a 07       		.uleb128 0x7
+ 276 016b 00000000 		.long	.LASF46
+ 277 016f 0C       		.sleb128 12
+ 278 0170 07       		.uleb128 0x7
+ 279 0171 00000000 		.long	.LASF47
+ 280 0175 0D       		.sleb128 13
+ 281 0176 07       		.uleb128 0x7
+ 282 0177 00000000 		.long	.LASF48
+ 283 017b 0E       		.sleb128 14
+ 284 017c 07       		.uleb128 0x7
+ 285 017d 00000000 		.long	.LASF49
+ 286 0181 0F       		.sleb128 15
+ 287 0182 07       		.uleb128 0x7
+ 288 0183 00000000 		.long	.LASF50
+ 289 0187 10       		.sleb128 16
+ 290 0188 07       		.uleb128 0x7
+ 291 0189 00000000 		.long	.LASF51
+ 292 018d 11       		.sleb128 17
+ 293 018e 07       		.uleb128 0x7
+ 294 018f 00000000 		.long	.LASF52
+ 295 0193 12       		.sleb128 18
+ 296 0194 07       		.uleb128 0x7
+ 297 0195 00000000 		.long	.LASF53
+ 298 0199 13       		.sleb128 19
+ 299 019a 07       		.uleb128 0x7
+ 300 019b 00000000 		.long	.LASF54
+ 301 019f 14       		.sleb128 20
+ 302 01a0 07       		.uleb128 0x7
+
GAS LISTING /tmp/cclL3imJ.s 			page 8
+
+
+ 303 01a1 00000000 		.long	.LASF55
+ 304 01a5 15       		.sleb128 21
+ 305 01a6 07       		.uleb128 0x7
+ 306 01a7 00000000 		.long	.LASF56
+ 307 01ab 16       		.sleb128 22
+ 308 01ac 07       		.uleb128 0x7
+ 309 01ad 00000000 		.long	.LASF57
+ 310 01b1 17       		.sleb128 23
+ 311 01b2 07       		.uleb128 0x7
+ 312 01b3 00000000 		.long	.LASF58
+ 313 01b7 18       		.sleb128 24
+ 314 01b8 07       		.uleb128 0x7
+ 315 01b9 00000000 		.long	.LASF59
+ 316 01bd 19       		.sleb128 25
+ 317 01be 07       		.uleb128 0x7
+ 318 01bf 00000000 		.long	.LASF60
+ 319 01c3 1A       		.sleb128 26
+ 320 01c4 07       		.uleb128 0x7
+ 321 01c5 00000000 		.long	.LASF61
+ 322 01c9 1B       		.sleb128 27
+ 323 01ca 07       		.uleb128 0x7
+ 324 01cb 00000000 		.long	.LASF62
+ 325 01cf 1C       		.sleb128 28
+ 326 01d0 07       		.uleb128 0x7
+ 327 01d1 00000000 		.long	.LASF63
+ 328 01d5 1D       		.sleb128 29
+ 329 01d6 07       		.uleb128 0x7
+ 330 01d7 00000000 		.long	.LASF64
+ 331 01db 1E       		.sleb128 30
+ 332 01dc 07       		.uleb128 0x7
+ 333 01dd 00000000 		.long	.LASF65
+ 334 01e1 1F       		.sleb128 31
+ 335 01e2 07       		.uleb128 0x7
+ 336 01e3 00000000 		.long	.LASF66
+ 337 01e7 20       		.sleb128 32
+ 338 01e8 07       		.uleb128 0x7
+ 339 01e9 00000000 		.long	.LASF67
+ 340 01ed 21       		.sleb128 33
+ 341 01ee 07       		.uleb128 0x7
+ 342 01ef 00000000 		.long	.LASF68
+ 343 01f3 22       		.sleb128 34
+ 344 01f4 07       		.uleb128 0x7
+ 345 01f5 00000000 		.long	.LASF69
+ 346 01f9 23       		.sleb128 35
+ 347 01fa 07       		.uleb128 0x7
+ 348 01fb 00000000 		.long	.LASF70
+ 349 01ff 24       		.sleb128 36
+ 350 0200 07       		.uleb128 0x7
+ 351 0201 00000000 		.long	.LASF71
+ 352 0205 25       		.sleb128 37
+ 353 0206 07       		.uleb128 0x7
+ 354 0207 00000000 		.long	.LASF72
+ 355 020b 26       		.sleb128 38
+ 356 020c 07       		.uleb128 0x7
+ 357 020d 00000000 		.long	.LASF73
+ 358 0211 27       		.sleb128 39
+ 359 0212 07       		.uleb128 0x7
+
GAS LISTING /tmp/cclL3imJ.s 			page 9
+
+
+ 360 0213 00000000 		.long	.LASF74
+ 361 0217 28       		.sleb128 40
+ 362 0218 07       		.uleb128 0x7
+ 363 0219 00000000 		.long	.LASF75
+ 364 021d 29       		.sleb128 41
+ 365 021e 07       		.uleb128 0x7
+ 366 021f 00000000 		.long	.LASF76
+ 367 0223 2A       		.sleb128 42
+ 368 0224 07       		.uleb128 0x7
+ 369 0225 00000000 		.long	.LASF77
+ 370 0229 2B       		.sleb128 43
+ 371 022a 07       		.uleb128 0x7
+ 372 022b 00000000 		.long	.LASF78
+ 373 022f 2C       		.sleb128 44
+ 374 0230 07       		.uleb128 0x7
+ 375 0231 00000000 		.long	.LASF79
+ 376 0235 2D       		.sleb128 45
+ 377 0236 07       		.uleb128 0x7
+ 378 0237 00000000 		.long	.LASF80
+ 379 023b 2E       		.sleb128 46
+ 380 023c 07       		.uleb128 0x7
+ 381 023d 00000000 		.long	.LASF81
+ 382 0241 2F       		.sleb128 47
+ 383 0242 07       		.uleb128 0x7
+ 384 0243 00000000 		.long	.LASF82
+ 385 0247 30       		.sleb128 48
+ 386 0248 07       		.uleb128 0x7
+ 387 0249 00000000 		.long	.LASF83
+ 388 024d 31       		.sleb128 49
+ 389 024e 07       		.uleb128 0x7
+ 390 024f 00000000 		.long	.LASF84
+ 391 0253 32       		.sleb128 50
+ 392 0254 07       		.uleb128 0x7
+ 393 0255 00000000 		.long	.LASF85
+ 394 0259 33       		.sleb128 51
+ 395 025a 07       		.uleb128 0x7
+ 396 025b 00000000 		.long	.LASF86
+ 397 025f 34       		.sleb128 52
+ 398 0260 07       		.uleb128 0x7
+ 399 0261 00000000 		.long	.LASF87
+ 400 0265 35       		.sleb128 53
+ 401 0266 07       		.uleb128 0x7
+ 402 0267 00000000 		.long	.LASF88
+ 403 026b 36       		.sleb128 54
+ 404 026c 07       		.uleb128 0x7
+ 405 026d 00000000 		.long	.LASF89
+ 406 0271 36       		.sleb128 54
+ 407 0272 07       		.uleb128 0x7
+ 408 0273 00000000 		.long	.LASF90
+ 409 0277 37       		.sleb128 55
+ 410 0278 07       		.uleb128 0x7
+ 411 0279 00000000 		.long	.LASF91
+ 412 027d 38       		.sleb128 56
+ 413 027e 07       		.uleb128 0x7
+ 414 027f 00000000 		.long	.LASF92
+ 415 0283 39       		.sleb128 57
+ 416 0284 07       		.uleb128 0x7
+
GAS LISTING /tmp/cclL3imJ.s 			page 10
+
+
+ 417 0285 00000000 		.long	.LASF93
+ 418 0289 3A       		.sleb128 58
+ 419 028a 07       		.uleb128 0x7
+ 420 028b 00000000 		.long	.LASF94
+ 421 028f 3B       		.sleb128 59
+ 422 0290 07       		.uleb128 0x7
+ 423 0291 00000000 		.long	.LASF95
+ 424 0295 3C       		.sleb128 60
+ 425 0296 07       		.uleb128 0x7
+ 426 0297 00000000 		.long	.LASF96
+ 427 029b 3D       		.sleb128 61
+ 428 029c 00       		.byte	0x0
+ 429 029d 06       		.uleb128 0x6
+ 430 029e 00000000 		.long	.LASF97
+ 431 02a2 04       		.byte	0x4
+ 432 02a3 04       		.byte	0x4
+ 433 02a4 BD       		.byte	0xbd
+ 434 02a5 53040000 		.long	0x453
+ 435 02a9 07       		.uleb128 0x7
+ 436 02aa 00000000 		.long	.LASF98
+ 437 02ae 00       		.sleb128 0
+ 438 02af 07       		.uleb128 0x7
+ 439 02b0 00000000 		.long	.LASF99
+ 440 02b4 01       		.sleb128 1
+ 441 02b5 07       		.uleb128 0x7
+ 442 02b6 00000000 		.long	.LASF100
+ 443 02ba 02       		.sleb128 2
+ 444 02bb 07       		.uleb128 0x7
+ 445 02bc 00000000 		.long	.LASF101
+ 446 02c0 03       		.sleb128 3
+ 447 02c1 07       		.uleb128 0x7
+ 448 02c2 00000000 		.long	.LASF102
+ 449 02c6 04       		.sleb128 4
+ 450 02c7 07       		.uleb128 0x7
+ 451 02c8 00000000 		.long	.LASF103
+ 452 02cc 05       		.sleb128 5
+ 453 02cd 07       		.uleb128 0x7
+ 454 02ce 00000000 		.long	.LASF104
+ 455 02d2 06       		.sleb128 6
+ 456 02d3 07       		.uleb128 0x7
+ 457 02d4 00000000 		.long	.LASF105
+ 458 02d8 07       		.sleb128 7
+ 459 02d9 07       		.uleb128 0x7
+ 460 02da 00000000 		.long	.LASF106
+ 461 02de 08       		.sleb128 8
+ 462 02df 07       		.uleb128 0x7
+ 463 02e0 00000000 		.long	.LASF107
+ 464 02e4 09       		.sleb128 9
+ 465 02e5 07       		.uleb128 0x7
+ 466 02e6 00000000 		.long	.LASF108
+ 467 02ea 0A       		.sleb128 10
+ 468 02eb 07       		.uleb128 0x7
+ 469 02ec 00000000 		.long	.LASF109
+ 470 02f0 0B       		.sleb128 11
+ 471 02f1 07       		.uleb128 0x7
+ 472 02f2 00000000 		.long	.LASF110
+ 473 02f6 0C       		.sleb128 12
+
GAS LISTING /tmp/cclL3imJ.s 			page 11
+
+
+ 474 02f7 07       		.uleb128 0x7
+ 475 02f8 00000000 		.long	.LASF111
+ 476 02fc 0D       		.sleb128 13
+ 477 02fd 07       		.uleb128 0x7
+ 478 02fe 00000000 		.long	.LASF112
+ 479 0302 0E       		.sleb128 14
+ 480 0303 07       		.uleb128 0x7
+ 481 0304 00000000 		.long	.LASF113
+ 482 0308 0F       		.sleb128 15
+ 483 0309 07       		.uleb128 0x7
+ 484 030a 00000000 		.long	.LASF114
+ 485 030e 10       		.sleb128 16
+ 486 030f 07       		.uleb128 0x7
+ 487 0310 00000000 		.long	.LASF115
+ 488 0314 11       		.sleb128 17
+ 489 0315 07       		.uleb128 0x7
+ 490 0316 00000000 		.long	.LASF116
+ 491 031a 12       		.sleb128 18
+ 492 031b 07       		.uleb128 0x7
+ 493 031c 00000000 		.long	.LASF117
+ 494 0320 13       		.sleb128 19
+ 495 0321 07       		.uleb128 0x7
+ 496 0322 00000000 		.long	.LASF118
+ 497 0326 14       		.sleb128 20
+ 498 0327 07       		.uleb128 0x7
+ 499 0328 00000000 		.long	.LASF119
+ 500 032c 15       		.sleb128 21
+ 501 032d 07       		.uleb128 0x7
+ 502 032e 00000000 		.long	.LASF120
+ 503 0332 16       		.sleb128 22
+ 504 0333 07       		.uleb128 0x7
+ 505 0334 00000000 		.long	.LASF121
+ 506 0338 17       		.sleb128 23
+ 507 0339 07       		.uleb128 0x7
+ 508 033a 00000000 		.long	.LASF122
+ 509 033e 18       		.sleb128 24
+ 510 033f 07       		.uleb128 0x7
+ 511 0340 00000000 		.long	.LASF123
+ 512 0344 19       		.sleb128 25
+ 513 0345 07       		.uleb128 0x7
+ 514 0346 00000000 		.long	.LASF124
+ 515 034a 1A       		.sleb128 26
+ 516 034b 07       		.uleb128 0x7
+ 517 034c 00000000 		.long	.LASF125
+ 518 0350 1B       		.sleb128 27
+ 519 0351 07       		.uleb128 0x7
+ 520 0352 00000000 		.long	.LASF126
+ 521 0356 1C       		.sleb128 28
+ 522 0357 07       		.uleb128 0x7
+ 523 0358 00000000 		.long	.LASF127
+ 524 035c 1D       		.sleb128 29
+ 525 035d 07       		.uleb128 0x7
+ 526 035e 00000000 		.long	.LASF128
+ 527 0362 1E       		.sleb128 30
+ 528 0363 07       		.uleb128 0x7
+ 529 0364 00000000 		.long	.LASF129
+ 530 0368 1F       		.sleb128 31
+
GAS LISTING /tmp/cclL3imJ.s 			page 12
+
+
+ 531 0369 07       		.uleb128 0x7
+ 532 036a 00000000 		.long	.LASF130
+ 533 036e 20       		.sleb128 32
+ 534 036f 07       		.uleb128 0x7
+ 535 0370 00000000 		.long	.LASF131
+ 536 0374 21       		.sleb128 33
+ 537 0375 07       		.uleb128 0x7
+ 538 0376 00000000 		.long	.LASF132
+ 539 037a 22       		.sleb128 34
+ 540 037b 07       		.uleb128 0x7
+ 541 037c 00000000 		.long	.LASF133
+ 542 0380 23       		.sleb128 35
+ 543 0381 07       		.uleb128 0x7
+ 544 0382 00000000 		.long	.LASF134
+ 545 0386 24       		.sleb128 36
+ 546 0387 07       		.uleb128 0x7
+ 547 0388 00000000 		.long	.LASF135
+ 548 038c 25       		.sleb128 37
+ 549 038d 07       		.uleb128 0x7
+ 550 038e 00000000 		.long	.LASF136
+ 551 0392 26       		.sleb128 38
+ 552 0393 07       		.uleb128 0x7
+ 553 0394 00000000 		.long	.LASF137
+ 554 0398 27       		.sleb128 39
+ 555 0399 07       		.uleb128 0x7
+ 556 039a 00000000 		.long	.LASF138
+ 557 039e 28       		.sleb128 40
+ 558 039f 07       		.uleb128 0x7
+ 559 03a0 00000000 		.long	.LASF139
+ 560 03a4 29       		.sleb128 41
+ 561 03a5 07       		.uleb128 0x7
+ 562 03a6 00000000 		.long	.LASF140
+ 563 03aa 2A       		.sleb128 42
+ 564 03ab 07       		.uleb128 0x7
+ 565 03ac 00000000 		.long	.LASF141
+ 566 03b0 2B       		.sleb128 43
+ 567 03b1 07       		.uleb128 0x7
+ 568 03b2 00000000 		.long	.LASF142
+ 569 03b6 2C       		.sleb128 44
+ 570 03b7 07       		.uleb128 0x7
+ 571 03b8 00000000 		.long	.LASF143
+ 572 03bc 2D       		.sleb128 45
+ 573 03bd 07       		.uleb128 0x7
+ 574 03be 00000000 		.long	.LASF144
+ 575 03c2 2E       		.sleb128 46
+ 576 03c3 07       		.uleb128 0x7
+ 577 03c4 00000000 		.long	.LASF145
+ 578 03c8 2F       		.sleb128 47
+ 579 03c9 07       		.uleb128 0x7
+ 580 03ca 00000000 		.long	.LASF146
+ 581 03ce 30       		.sleb128 48
+ 582 03cf 07       		.uleb128 0x7
+ 583 03d0 00000000 		.long	.LASF147
+ 584 03d4 31       		.sleb128 49
+ 585 03d5 07       		.uleb128 0x7
+ 586 03d6 00000000 		.long	.LASF148
+ 587 03da 32       		.sleb128 50
+
GAS LISTING /tmp/cclL3imJ.s 			page 13
+
+
+ 588 03db 07       		.uleb128 0x7
+ 589 03dc 00000000 		.long	.LASF149
+ 590 03e0 33       		.sleb128 51
+ 591 03e1 07       		.uleb128 0x7
+ 592 03e2 00000000 		.long	.LASF150
+ 593 03e6 34       		.sleb128 52
+ 594 03e7 07       		.uleb128 0x7
+ 595 03e8 00000000 		.long	.LASF151
+ 596 03ec 35       		.sleb128 53
+ 597 03ed 07       		.uleb128 0x7
+ 598 03ee 00000000 		.long	.LASF152
+ 599 03f2 36       		.sleb128 54
+ 600 03f3 07       		.uleb128 0x7
+ 601 03f4 00000000 		.long	.LASF153
+ 602 03f8 37       		.sleb128 55
+ 603 03f9 07       		.uleb128 0x7
+ 604 03fa 00000000 		.long	.LASF154
+ 605 03fe 38       		.sleb128 56
+ 606 03ff 07       		.uleb128 0x7
+ 607 0400 00000000 		.long	.LASF155
+ 608 0404 39       		.sleb128 57
+ 609 0405 07       		.uleb128 0x7
+ 610 0406 00000000 		.long	.LASF156
+ 611 040a 3A       		.sleb128 58
+ 612 040b 07       		.uleb128 0x7
+ 613 040c 00000000 		.long	.LASF157
+ 614 0410 3A       		.sleb128 58
+ 615 0411 07       		.uleb128 0x7
+ 616 0412 00000000 		.long	.LASF158
+ 617 0416 3B       		.sleb128 59
+ 618 0417 07       		.uleb128 0x7
+ 619 0418 00000000 		.long	.LASF159
+ 620 041c 3C       		.sleb128 60
+ 621 041d 07       		.uleb128 0x7
+ 622 041e 00000000 		.long	.LASF160
+ 623 0422 3D       		.sleb128 61
+ 624 0423 07       		.uleb128 0x7
+ 625 0424 00000000 		.long	.LASF161
+ 626 0428 3E       		.sleb128 62
+ 627 0429 07       		.uleb128 0x7
+ 628 042a 00000000 		.long	.LASF162
+ 629 042e 3F       		.sleb128 63
+ 630 042f 07       		.uleb128 0x7
+ 631 0430 00000000 		.long	.LASF163
+ 632 0434 C000     		.sleb128 64
+ 633 0436 07       		.uleb128 0x7
+ 634 0437 00000000 		.long	.LASF164
+ 635 043b C100     		.sleb128 65
+ 636 043d 07       		.uleb128 0x7
+ 637 043e 00000000 		.long	.LASF165
+ 638 0442 C200     		.sleb128 66
+ 639 0444 07       		.uleb128 0x7
+ 640 0445 00000000 		.long	.LASF166
+ 641 0449 C300     		.sleb128 67
+ 642 044b 07       		.uleb128 0x7
+ 643 044c 00000000 		.long	.LASF167
+ 644 0450 C400     		.sleb128 68
+
GAS LISTING /tmp/cclL3imJ.s 			page 14
+
+
+ 645 0452 00       		.byte	0x0
+ 646 0453 08       		.uleb128 0x8
+ 647 0454 00000000 		.long	.LASF168
+ 648 0458 04       		.byte	0x4
+ 649 0459 04       		.byte	0x4
+ 650 045a 0A01     		.value	0x10a
+ 651 045c 52050000 		.long	0x552
+ 652 0460 07       		.uleb128 0x7
+ 653 0461 00000000 		.long	.LASF169
+ 654 0465 00       		.sleb128 0
+ 655 0466 07       		.uleb128 0x7
+ 656 0467 00000000 		.long	.LASF170
+ 657 046b 3D       		.sleb128 61
+ 658 046c 07       		.uleb128 0x7
+ 659 046d 00000000 		.long	.LASF171
+ 660 0471 3E       		.sleb128 62
+ 661 0472 07       		.uleb128 0x7
+ 662 0473 00000000 		.long	.LASF172
+ 663 0477 3F       		.sleb128 63
+ 664 0478 07       		.uleb128 0x7
+ 665 0479 00000000 		.long	.LASF173
+ 666 047d C000     		.sleb128 64
+ 667 047f 07       		.uleb128 0x7
+ 668 0480 00000000 		.long	.LASF174
+ 669 0484 C100     		.sleb128 65
+ 670 0486 07       		.uleb128 0x7
+ 671 0487 00000000 		.long	.LASF175
+ 672 048b C200     		.sleb128 66
+ 673 048d 07       		.uleb128 0x7
+ 674 048e 00000000 		.long	.LASF176
+ 675 0492 C300     		.sleb128 67
+ 676 0494 07       		.uleb128 0x7
+ 677 0495 00000000 		.long	.LASF177
+ 678 0499 C400     		.sleb128 68
+ 679 049b 07       		.uleb128 0x7
+ 680 049c 00000000 		.long	.LASF178
+ 681 04a0 C500     		.sleb128 69
+ 682 04a2 07       		.uleb128 0x7
+ 683 04a3 00000000 		.long	.LASF179
+ 684 04a7 C600     		.sleb128 70
+ 685 04a9 07       		.uleb128 0x7
+ 686 04aa 00000000 		.long	.LASF180
+ 687 04ae C700     		.sleb128 71
+ 688 04b0 07       		.uleb128 0x7
+ 689 04b1 00000000 		.long	.LASF181
+ 690 04b5 C800     		.sleb128 72
+ 691 04b7 07       		.uleb128 0x7
+ 692 04b8 00000000 		.long	.LASF182
+ 693 04bc C900     		.sleb128 73
+ 694 04be 07       		.uleb128 0x7
+ 695 04bf 00000000 		.long	.LASF183
+ 696 04c3 CA00     		.sleb128 74
+ 697 04c5 07       		.uleb128 0x7
+ 698 04c6 00000000 		.long	.LASF184
+ 699 04ca CB00     		.sleb128 75
+ 700 04cc 07       		.uleb128 0x7
+ 701 04cd 00000000 		.long	.LASF185
+
GAS LISTING /tmp/cclL3imJ.s 			page 15
+
+
+ 702 04d1 CC00     		.sleb128 76
+ 703 04d3 07       		.uleb128 0x7
+ 704 04d4 00000000 		.long	.LASF186
+ 705 04d8 CD00     		.sleb128 77
+ 706 04da 07       		.uleb128 0x7
+ 707 04db 00000000 		.long	.LASF187
+ 708 04df CE00     		.sleb128 78
+ 709 04e1 07       		.uleb128 0x7
+ 710 04e2 00000000 		.long	.LASF188
+ 711 04e6 CF00     		.sleb128 79
+ 712 04e8 07       		.uleb128 0x7
+ 713 04e9 00000000 		.long	.LASF189
+ 714 04ed D000     		.sleb128 80
+ 715 04ef 07       		.uleb128 0x7
+ 716 04f0 00000000 		.long	.LASF190
+ 717 04f4 D100     		.sleb128 81
+ 718 04f6 07       		.uleb128 0x7
+ 719 04f7 00000000 		.long	.LASF191
+ 720 04fb D100     		.sleb128 81
+ 721 04fd 07       		.uleb128 0x7
+ 722 04fe 00000000 		.long	.LASF192
+ 723 0502 D200     		.sleb128 82
+ 724 0504 07       		.uleb128 0x7
+ 725 0505 00000000 		.long	.LASF193
+ 726 0509 D300     		.sleb128 83
+ 727 050b 07       		.uleb128 0x7
+ 728 050c 00000000 		.long	.LASF194
+ 729 0510 D400     		.sleb128 84
+ 730 0512 07       		.uleb128 0x7
+ 731 0513 00000000 		.long	.LASF195
+ 732 0517 D500     		.sleb128 85
+ 733 0519 07       		.uleb128 0x7
+ 734 051a 00000000 		.long	.LASF196
+ 735 051e D600     		.sleb128 86
+ 736 0520 07       		.uleb128 0x7
+ 737 0521 00000000 		.long	.LASF197
+ 738 0525 D700     		.sleb128 87
+ 739 0527 07       		.uleb128 0x7
+ 740 0528 00000000 		.long	.LASF198
+ 741 052c D800     		.sleb128 88
+ 742 052e 07       		.uleb128 0x7
+ 743 052f 00000000 		.long	.LASF199
+ 744 0533 D900     		.sleb128 89
+ 745 0535 07       		.uleb128 0x7
+ 746 0536 00000000 		.long	.LASF200
+ 747 053a DA00     		.sleb128 90
+ 748 053c 07       		.uleb128 0x7
+ 749 053d 00000000 		.long	.LASF201
+ 750 0541 DB00     		.sleb128 91
+ 751 0543 07       		.uleb128 0x7
+ 752 0544 00000000 		.long	.LASF202
+ 753 0548 DC00     		.sleb128 92
+ 754 054a 07       		.uleb128 0x7
+ 755 054b 00000000 		.long	.LASF203
+ 756 054f DD00     		.sleb128 93
+ 757 0551 00       		.byte	0x0
+ 758 0552 08       		.uleb128 0x8
+
GAS LISTING /tmp/cclL3imJ.s 			page 16
+
+
+ 759 0553 00000000 		.long	.LASF204
+ 760 0557 04       		.byte	0x4
+ 761 0558 04       		.byte	0x4
+ 762 0559 3401     		.value	0x134
+ 763 055b 92060000 		.long	0x692
+ 764 055f 07       		.uleb128 0x7
+ 765 0560 00000000 		.long	.LASF205
+ 766 0564 00       		.sleb128 0
+ 767 0565 07       		.uleb128 0x7
+ 768 0566 00000000 		.long	.LASF206
+ 769 056a 01       		.sleb128 1
+ 770 056b 07       		.uleb128 0x7
+ 771 056c 00000000 		.long	.LASF207
+ 772 0570 02       		.sleb128 2
+ 773 0571 07       		.uleb128 0x7
+ 774 0572 00000000 		.long	.LASF208
+ 775 0576 03       		.sleb128 3
+ 776 0577 07       		.uleb128 0x7
+ 777 0578 00000000 		.long	.LASF209
+ 778 057c 04       		.sleb128 4
+ 779 057d 07       		.uleb128 0x7
+ 780 057e 00000000 		.long	.LASF210
+ 781 0582 05       		.sleb128 5
+ 782 0583 07       		.uleb128 0x7
+ 783 0584 00000000 		.long	.LASF211
+ 784 0588 06       		.sleb128 6
+ 785 0589 07       		.uleb128 0x7
+ 786 058a 00000000 		.long	.LASF212
+ 787 058e 07       		.sleb128 7
+ 788 058f 07       		.uleb128 0x7
+ 789 0590 00000000 		.long	.LASF213
+ 790 0594 08       		.sleb128 8
+ 791 0595 07       		.uleb128 0x7
+ 792 0596 00000000 		.long	.LASF214
+ 793 059a 09       		.sleb128 9
+ 794 059b 07       		.uleb128 0x7
+ 795 059c 00000000 		.long	.LASF215
+ 796 05a0 0A       		.sleb128 10
+ 797 05a1 07       		.uleb128 0x7
+ 798 05a2 00000000 		.long	.LASF216
+ 799 05a6 0B       		.sleb128 11
+ 800 05a7 07       		.uleb128 0x7
+ 801 05a8 00000000 		.long	.LASF217
+ 802 05ac 0C       		.sleb128 12
+ 803 05ad 07       		.uleb128 0x7
+ 804 05ae 00000000 		.long	.LASF218
+ 805 05b2 0D       		.sleb128 13
+ 806 05b3 07       		.uleb128 0x7
+ 807 05b4 00000000 		.long	.LASF219
+ 808 05b8 0E       		.sleb128 14
+ 809 05b9 07       		.uleb128 0x7
+ 810 05ba 00000000 		.long	.LASF220
+ 811 05be 0F       		.sleb128 15
+ 812 05bf 07       		.uleb128 0x7
+ 813 05c0 00000000 		.long	.LASF221
+ 814 05c4 10       		.sleb128 16
+ 815 05c5 07       		.uleb128 0x7
+
GAS LISTING /tmp/cclL3imJ.s 			page 17
+
+
+ 816 05c6 00000000 		.long	.LASF222
+ 817 05ca 11       		.sleb128 17
+ 818 05cb 07       		.uleb128 0x7
+ 819 05cc 00000000 		.long	.LASF223
+ 820 05d0 12       		.sleb128 18
+ 821 05d1 07       		.uleb128 0x7
+ 822 05d2 00000000 		.long	.LASF224
+ 823 05d6 13       		.sleb128 19
+ 824 05d7 07       		.uleb128 0x7
+ 825 05d8 00000000 		.long	.LASF225
+ 826 05dc 14       		.sleb128 20
+ 827 05dd 07       		.uleb128 0x7
+ 828 05de 00000000 		.long	.LASF226
+ 829 05e2 15       		.sleb128 21
+ 830 05e3 07       		.uleb128 0x7
+ 831 05e4 00000000 		.long	.LASF227
+ 832 05e8 16       		.sleb128 22
+ 833 05e9 07       		.uleb128 0x7
+ 834 05ea 00000000 		.long	.LASF228
+ 835 05ee 17       		.sleb128 23
+ 836 05ef 07       		.uleb128 0x7
+ 837 05f0 00000000 		.long	.LASF229
+ 838 05f4 18       		.sleb128 24
+ 839 05f5 07       		.uleb128 0x7
+ 840 05f6 00000000 		.long	.LASF230
+ 841 05fa 19       		.sleb128 25
+ 842 05fb 07       		.uleb128 0x7
+ 843 05fc 00000000 		.long	.LASF231
+ 844 0600 1A       		.sleb128 26
+ 845 0601 07       		.uleb128 0x7
+ 846 0602 00000000 		.long	.LASF232
+ 847 0606 1B       		.sleb128 27
+ 848 0607 07       		.uleb128 0x7
+ 849 0608 00000000 		.long	.LASF233
+ 850 060c 1C       		.sleb128 28
+ 851 060d 07       		.uleb128 0x7
+ 852 060e 00000000 		.long	.LASF234
+ 853 0612 1D       		.sleb128 29
+ 854 0613 07       		.uleb128 0x7
+ 855 0614 00000000 		.long	.LASF235
+ 856 0618 1E       		.sleb128 30
+ 857 0619 07       		.uleb128 0x7
+ 858 061a 00000000 		.long	.LASF236
+ 859 061e 1F       		.sleb128 31
+ 860 061f 07       		.uleb128 0x7
+ 861 0620 00000000 		.long	.LASF237
+ 862 0624 20       		.sleb128 32
+ 863 0625 07       		.uleb128 0x7
+ 864 0626 00000000 		.long	.LASF238
+ 865 062a 21       		.sleb128 33
+ 866 062b 07       		.uleb128 0x7
+ 867 062c 00000000 		.long	.LASF239
+ 868 0630 22       		.sleb128 34
+ 869 0631 07       		.uleb128 0x7
+ 870 0632 00000000 		.long	.LASF240
+ 871 0636 23       		.sleb128 35
+ 872 0637 07       		.uleb128 0x7
+
GAS LISTING /tmp/cclL3imJ.s 			page 18
+
+
+ 873 0638 00000000 		.long	.LASF241
+ 874 063c 24       		.sleb128 36
+ 875 063d 07       		.uleb128 0x7
+ 876 063e 00000000 		.long	.LASF242
+ 877 0642 25       		.sleb128 37
+ 878 0643 07       		.uleb128 0x7
+ 879 0644 00000000 		.long	.LASF243
+ 880 0648 26       		.sleb128 38
+ 881 0649 07       		.uleb128 0x7
+ 882 064a 00000000 		.long	.LASF244
+ 883 064e 27       		.sleb128 39
+ 884 064f 07       		.uleb128 0x7
+ 885 0650 00000000 		.long	.LASF245
+ 886 0654 28       		.sleb128 40
+ 887 0655 07       		.uleb128 0x7
+ 888 0656 00000000 		.long	.LASF246
+ 889 065a 29       		.sleb128 41
+ 890 065b 07       		.uleb128 0x7
+ 891 065c 00000000 		.long	.LASF247
+ 892 0660 29       		.sleb128 41
+ 893 0661 07       		.uleb128 0x7
+ 894 0662 00000000 		.long	.LASF248
+ 895 0666 2A       		.sleb128 42
+ 896 0667 07       		.uleb128 0x7
+ 897 0668 00000000 		.long	.LASF249
+ 898 066c 2B       		.sleb128 43
+ 899 066d 07       		.uleb128 0x7
+ 900 066e 00000000 		.long	.LASF250
+ 901 0672 2C       		.sleb128 44
+ 902 0673 07       		.uleb128 0x7
+ 903 0674 00000000 		.long	.LASF251
+ 904 0678 2D       		.sleb128 45
+ 905 0679 07       		.uleb128 0x7
+ 906 067a 00000000 		.long	.LASF252
+ 907 067e 2E       		.sleb128 46
+ 908 067f 07       		.uleb128 0x7
+ 909 0680 00000000 		.long	.LASF253
+ 910 0684 2F       		.sleb128 47
+ 911 0685 07       		.uleb128 0x7
+ 912 0686 00000000 		.long	.LASF254
+ 913 068a 30       		.sleb128 48
+ 914 068b 07       		.uleb128 0x7
+ 915 068c 00000000 		.long	.LASF255
+ 916 0690 31       		.sleb128 49
+ 917 0691 00       		.byte	0x0
+ 918 0692 09       		.uleb128 0x9
+ 919 0693 01       		.byte	0x1
+ 920 0694 00000000 		.long	.LASF261
+ 921 0698 01       		.byte	0x1
+ 922 0699 2A       		.byte	0x2a
+ 923 069a 01       		.byte	0x1
+ 924 069b 70000000 		.long	0x70
+ 925 069f 00000000 		.quad	.LFB15
+ 925      00000000 
+ 926 06a7 00000000 		.quad	.LFE15
+ 926      00000000 
+ 927 06af 00000000 		.long	.LLST0
+
GAS LISTING /tmp/cclL3imJ.s 			page 19
+
+
+ 928 06b3 01070000 		.long	0x701
+ 929 06b7 0A       		.uleb128 0xa
+ 930 06b8 00000000 		.long	.LASF262
+ 931 06bc 01       		.byte	0x1
+ 932 06bd 0B       		.uleb128 0xb
+ 933 06be 00000000 		.long	.LASF263
+ 934 06c2 01       		.byte	0x1
+ 935 06c3 2A       		.byte	0x2a
+ 936 06c4 01070000 		.long	0x701
+ 937 06c8 02       		.byte	0x2
+ 938 06c9 91       		.byte	0x91
+ 939 06ca 58       		.sleb128 -40
+ 940 06cb 0C       		.uleb128 0xc
+ 941 06cc 726300   		.string	"rc"
+ 942 06cf 01       		.byte	0x1
+ 943 06d0 2C       		.byte	0x2c
+ 944 06d1 70000000 		.long	0x70
+ 945 06d5 02       		.byte	0x2
+ 946 06d6 91       		.byte	0x91
+ 947 06d7 6C       		.sleb128 -20
+ 948 06d8 0D       		.uleb128 0xd
+ 949 06d9 00000000 		.long	.LASF256
+ 950 06dd 1D070000 		.long	0x71d
+ 951 06e1 01       		.byte	0x1
+ 952 06e2 09       		.byte	0x9
+ 953 06e3 03       		.byte	0x3
+ 954 06e4 00000000 		.quad	__PRETTY_FUNCTION__.2438
+ 954      00000000 
+ 955 06ec 0D       		.uleb128 0xd
+ 956 06ed 00000000 		.long	.LASF257
+ 957 06f1 22070000 		.long	0x722
+ 958 06f5 01       		.byte	0x1
+ 959 06f6 09       		.byte	0x9
+ 960 06f7 03       		.byte	0x3
+ 961 06f8 00000000 		.quad	__func__.2439
+ 961      00000000 
+ 962 0700 00       		.byte	0x0
+ 963 0701 0E       		.uleb128 0xe
+ 964 0702 08       		.byte	0x8
+ 965 0703 07070000 		.long	0x707
+ 966 0707 0E       		.uleb128 0xe
+ 967 0708 08       		.byte	0x8
+ 968 0709 B7060000 		.long	0x6b7
+ 969 070d 0F       		.uleb128 0xf
+ 970 070e 7E000000 		.long	0x7e
+ 971 0712 1D070000 		.long	0x71d
+ 972 0716 10       		.uleb128 0x10
+ 973 0717 7B000000 		.long	0x7b
+ 974 071b 1A       		.byte	0x1a
+ 975 071c 00       		.byte	0x0
+ 976 071d 11       		.uleb128 0x11
+ 977 071e 0D070000 		.long	0x70d
+ 978 0722 11       		.uleb128 0x11
+ 979 0723 0D070000 		.long	0x70d
+ 980 0727 00       		.byte	0x0
+ 981              		.section	.debug_abbrev
+ 982 0000 01       		.uleb128 0x1
+
GAS LISTING /tmp/cclL3imJ.s 			page 20
+
+
+ 983 0001 11       		.uleb128 0x11
+ 984 0002 01       		.byte	0x1
+ 985 0003 25       		.uleb128 0x25
+ 986 0004 0E       		.uleb128 0xe
+ 987 0005 13       		.uleb128 0x13
+ 988 0006 0B       		.uleb128 0xb
+ 989 0007 03       		.uleb128 0x3
+ 990 0008 0E       		.uleb128 0xe
+ 991 0009 1B       		.uleb128 0x1b
+ 992 000a 0E       		.uleb128 0xe
+ 993 000b 11       		.uleb128 0x11
+ 994 000c 01       		.uleb128 0x1
+ 995 000d 12       		.uleb128 0x12
+ 996 000e 01       		.uleb128 0x1
+ 997 000f 10       		.uleb128 0x10
+ 998 0010 06       		.uleb128 0x6
+ 999 0011 00       		.byte	0x0
+ 1000 0012 00       		.byte	0x0
+ 1001 0013 02       		.uleb128 0x2
+ 1002 0014 24       		.uleb128 0x24
+ 1003 0015 00       		.byte	0x0
+ 1004 0016 0B       		.uleb128 0xb
+ 1005 0017 0B       		.uleb128 0xb
+ 1006 0018 3E       		.uleb128 0x3e
+ 1007 0019 0B       		.uleb128 0xb
+ 1008 001a 03       		.uleb128 0x3
+ 1009 001b 0E       		.uleb128 0xe
+ 1010 001c 00       		.byte	0x0
+ 1011 001d 00       		.byte	0x0
+ 1012 001e 03       		.uleb128 0x3
+ 1013 001f 24       		.uleb128 0x24
+ 1014 0020 00       		.byte	0x0
+ 1015 0021 0B       		.uleb128 0xb
+ 1016 0022 0B       		.uleb128 0xb
+ 1017 0023 3E       		.uleb128 0x3e
+ 1018 0024 0B       		.uleb128 0xb
+ 1019 0025 03       		.uleb128 0x3
+ 1020 0026 08       		.uleb128 0x8
+ 1021 0027 00       		.byte	0x0
+ 1022 0028 00       		.byte	0x0
+ 1023 0029 04       		.uleb128 0x4
+ 1024 002a 16       		.uleb128 0x16
+ 1025 002b 00       		.byte	0x0
+ 1026 002c 03       		.uleb128 0x3
+ 1027 002d 0E       		.uleb128 0xe
+ 1028 002e 3A       		.uleb128 0x3a
+ 1029 002f 0B       		.uleb128 0xb
+ 1030 0030 3B       		.uleb128 0x3b
+ 1031 0031 0B       		.uleb128 0xb
+ 1032 0032 49       		.uleb128 0x49
+ 1033 0033 13       		.uleb128 0x13
+ 1034 0034 00       		.byte	0x0
+ 1035 0035 00       		.byte	0x0
+ 1036 0036 05       		.uleb128 0x5
+ 1037 0037 24       		.uleb128 0x24
+ 1038 0038 00       		.byte	0x0
+ 1039 0039 0B       		.uleb128 0xb
+
GAS LISTING /tmp/cclL3imJ.s 			page 21
+
+
+ 1040 003a 0B       		.uleb128 0xb
+ 1041 003b 3E       		.uleb128 0x3e
+ 1042 003c 0B       		.uleb128 0xb
+ 1043 003d 00       		.byte	0x0
+ 1044 003e 00       		.byte	0x0
+ 1045 003f 06       		.uleb128 0x6
+ 1046 0040 04       		.uleb128 0x4
+ 1047 0041 01       		.byte	0x1
+ 1048 0042 03       		.uleb128 0x3
+ 1049 0043 0E       		.uleb128 0xe
+ 1050 0044 0B       		.uleb128 0xb
+ 1051 0045 0B       		.uleb128 0xb
+ 1052 0046 3A       		.uleb128 0x3a
+ 1053 0047 0B       		.uleb128 0xb
+ 1054 0048 3B       		.uleb128 0x3b
+ 1055 0049 0B       		.uleb128 0xb
+ 1056 004a 01       		.uleb128 0x1
+ 1057 004b 13       		.uleb128 0x13
+ 1058 004c 00       		.byte	0x0
+ 1059 004d 00       		.byte	0x0
+ 1060 004e 07       		.uleb128 0x7
+ 1061 004f 28       		.uleb128 0x28
+ 1062 0050 00       		.byte	0x0
+ 1063 0051 03       		.uleb128 0x3
+ 1064 0052 0E       		.uleb128 0xe
+ 1065 0053 1C       		.uleb128 0x1c
+ 1066 0054 0D       		.uleb128 0xd
+ 1067 0055 00       		.byte	0x0
+ 1068 0056 00       		.byte	0x0
+ 1069 0057 08       		.uleb128 0x8
+ 1070 0058 04       		.uleb128 0x4
+ 1071 0059 01       		.byte	0x1
+ 1072 005a 03       		.uleb128 0x3
+ 1073 005b 0E       		.uleb128 0xe
+ 1074 005c 0B       		.uleb128 0xb
+ 1075 005d 0B       		.uleb128 0xb
+ 1076 005e 3A       		.uleb128 0x3a
+ 1077 005f 0B       		.uleb128 0xb
+ 1078 0060 3B       		.uleb128 0x3b
+ 1079 0061 05       		.uleb128 0x5
+ 1080 0062 01       		.uleb128 0x1
+ 1081 0063 13       		.uleb128 0x13
+ 1082 0064 00       		.byte	0x0
+ 1083 0065 00       		.byte	0x0
+ 1084 0066 09       		.uleb128 0x9
+ 1085 0067 2E       		.uleb128 0x2e
+ 1086 0068 01       		.byte	0x1
+ 1087 0069 3F       		.uleb128 0x3f
+ 1088 006a 0C       		.uleb128 0xc
+ 1089 006b 03       		.uleb128 0x3
+ 1090 006c 0E       		.uleb128 0xe
+ 1091 006d 3A       		.uleb128 0x3a
+ 1092 006e 0B       		.uleb128 0xb
+ 1093 006f 3B       		.uleb128 0x3b
+ 1094 0070 0B       		.uleb128 0xb
+ 1095 0071 27       		.uleb128 0x27
+ 1096 0072 0C       		.uleb128 0xc
+
GAS LISTING /tmp/cclL3imJ.s 			page 22
+
+
+ 1097 0073 49       		.uleb128 0x49
+ 1098 0074 13       		.uleb128 0x13
+ 1099 0075 11       		.uleb128 0x11
+ 1100 0076 01       		.uleb128 0x1
+ 1101 0077 12       		.uleb128 0x12
+ 1102 0078 01       		.uleb128 0x1
+ 1103 0079 40       		.uleb128 0x40
+ 1104 007a 06       		.uleb128 0x6
+ 1105 007b 01       		.uleb128 0x1
+ 1106 007c 13       		.uleb128 0x13
+ 1107 007d 00       		.byte	0x0
+ 1108 007e 00       		.byte	0x0
+ 1109 007f 0A       		.uleb128 0xa
+ 1110 0080 13       		.uleb128 0x13
+ 1111 0081 00       		.byte	0x0
+ 1112 0082 03       		.uleb128 0x3
+ 1113 0083 0E       		.uleb128 0xe
+ 1114 0084 3C       		.uleb128 0x3c
+ 1115 0085 0C       		.uleb128 0xc
+ 1116 0086 00       		.byte	0x0
+ 1117 0087 00       		.byte	0x0
+ 1118 0088 0B       		.uleb128 0xb
+ 1119 0089 05       		.uleb128 0x5
+ 1120 008a 00       		.byte	0x0
+ 1121 008b 03       		.uleb128 0x3
+ 1122 008c 0E       		.uleb128 0xe
+ 1123 008d 3A       		.uleb128 0x3a
+ 1124 008e 0B       		.uleb128 0xb
+ 1125 008f 3B       		.uleb128 0x3b
+ 1126 0090 0B       		.uleb128 0xb
+ 1127 0091 49       		.uleb128 0x49
+ 1128 0092 13       		.uleb128 0x13
+ 1129 0093 02       		.uleb128 0x2
+ 1130 0094 0A       		.uleb128 0xa
+ 1131 0095 00       		.byte	0x0
+ 1132 0096 00       		.byte	0x0
+ 1133 0097 0C       		.uleb128 0xc
+ 1134 0098 34       		.uleb128 0x34
+ 1135 0099 00       		.byte	0x0
+ 1136 009a 03       		.uleb128 0x3
+ 1137 009b 08       		.uleb128 0x8
+ 1138 009c 3A       		.uleb128 0x3a
+ 1139 009d 0B       		.uleb128 0xb
+ 1140 009e 3B       		.uleb128 0x3b
+ 1141 009f 0B       		.uleb128 0xb
+ 1142 00a0 49       		.uleb128 0x49
+ 1143 00a1 13       		.uleb128 0x13
+ 1144 00a2 02       		.uleb128 0x2
+ 1145 00a3 0A       		.uleb128 0xa
+ 1146 00a4 00       		.byte	0x0
+ 1147 00a5 00       		.byte	0x0
+ 1148 00a6 0D       		.uleb128 0xd
+ 1149 00a7 34       		.uleb128 0x34
+ 1150 00a8 00       		.byte	0x0
+ 1151 00a9 03       		.uleb128 0x3
+ 1152 00aa 0E       		.uleb128 0xe
+ 1153 00ab 49       		.uleb128 0x49
+
GAS LISTING /tmp/cclL3imJ.s 			page 23
+
+
+ 1154 00ac 13       		.uleb128 0x13
+ 1155 00ad 34       		.uleb128 0x34
+ 1156 00ae 0C       		.uleb128 0xc
+ 1157 00af 02       		.uleb128 0x2
+ 1158 00b0 0A       		.uleb128 0xa
+ 1159 00b1 00       		.byte	0x0
+ 1160 00b2 00       		.byte	0x0
+ 1161 00b3 0E       		.uleb128 0xe
+ 1162 00b4 0F       		.uleb128 0xf
+ 1163 00b5 00       		.byte	0x0
+ 1164 00b6 0B       		.uleb128 0xb
+ 1165 00b7 0B       		.uleb128 0xb
+ 1166 00b8 49       		.uleb128 0x49
+ 1167 00b9 13       		.uleb128 0x13
+ 1168 00ba 00       		.byte	0x0
+ 1169 00bb 00       		.byte	0x0
+ 1170 00bc 0F       		.uleb128 0xf
+ 1171 00bd 01       		.uleb128 0x1
+ 1172 00be 01       		.byte	0x1
+ 1173 00bf 49       		.uleb128 0x49
+ 1174 00c0 13       		.uleb128 0x13
+ 1175 00c1 01       		.uleb128 0x1
+ 1176 00c2 13       		.uleb128 0x13
+ 1177 00c3 00       		.byte	0x0
+ 1178 00c4 00       		.byte	0x0
+ 1179 00c5 10       		.uleb128 0x10
+ 1180 00c6 21       		.uleb128 0x21
+ 1181 00c7 00       		.byte	0x0
+ 1182 00c8 49       		.uleb128 0x49
+ 1183 00c9 13       		.uleb128 0x13
+ 1184 00ca 2F       		.uleb128 0x2f
+ 1185 00cb 0B       		.uleb128 0xb
+ 1186 00cc 00       		.byte	0x0
+ 1187 00cd 00       		.byte	0x0
+ 1188 00ce 11       		.uleb128 0x11
+ 1189 00cf 26       		.uleb128 0x26
+ 1190 00d0 00       		.byte	0x0
+ 1191 00d1 49       		.uleb128 0x49
+ 1192 00d2 13       		.uleb128 0x13
+ 1193 00d3 00       		.byte	0x0
+ 1194 00d4 00       		.byte	0x0
+ 1195 00d5 00       		.byte	0x0
+ 1196              		.section	.debug_pubnames,"", at progbits
+ 1197 0000 2D000000 		.long	0x2d
+ 1198 0004 0200     		.value	0x2
+ 1199 0006 00000000 		.long	.Ldebug_info0
+ 1200 000a 28070000 		.long	0x728
+ 1201 000e 92060000 		.long	0x692
+ 1202 0012 4B4E756C 		.string	"KNullBlockCipherVecRegMake"
+ 1202      6C426C6F 
+ 1202      636B4369 
+ 1202      70686572 
+ 1202      56656352 
+ 1203 002d 00000000 		.long	0x0
+ 1204              		.section	.debug_aranges,"", at progbits
+ 1205 0000 2C000000 		.long	0x2c
+ 1206 0004 0200     		.value	0x2
+
GAS LISTING /tmp/cclL3imJ.s 			page 24
+
+
+ 1207 0006 00000000 		.long	.Ldebug_info0
+ 1208 000a 08       		.byte	0x8
+ 1209 000b 00       		.byte	0x0
+ 1210 000c 0000     		.value	0x0
+ 1211 000e 0000     		.value	0x0
+ 1212 0010 00000000 		.quad	.Ltext0
+ 1212      00000000 
+ 1213 0018 65000000 		.quad	.Letext0-.Ltext0
+ 1213      00000000 
+ 1214 0020 00000000 		.quad	0x0
+ 1214      00000000 
+ 1215 0028 00000000 		.quad	0x0
+ 1215      00000000 
+ 1216              		.section	.debug_str,"MS", at progbits,1
+ 1217              	.LASF184:
+ 1218 0000 72635461 		.string	"rcTag"
+ 1218      6700
+ 1219              	.LASF30:
+ 1220 0006 72635646 		.string	"rcVFS"
+ 1220      5300
+ 1221              	.LASF234:
+ 1222 000c 7263556E 		.string	"rcUnauthorized"
+ 1222      61757468 
+ 1222      6F72697A 
+ 1222      656400
+ 1223              	.LASF258:
+ 1224 001b 474E5520 		.string	"GNU C 4.4.2"
+ 1224      4320342E 
+ 1224      342E3200 
+ 1225              	.LASF218:
+ 1226 0027 7263496E 		.string	"rcInconsistent"
+ 1226      636F6E73 
+ 1226      69737465 
+ 1226      6E7400
+ 1227              	.LASF19:
+ 1228 0036 72634442 		.string	"rcDB"
+ 1228      00
+ 1229              	.LASF128:
+ 1230 003b 7263436F 		.string	"rcCopying"
+ 1230      7079696E 
+ 1230      6700
+ 1231              	.LASF131:
+ 1232 0045 7263506F 		.string	"rcPositioning"
+ 1232      73697469 
+ 1232      6F6E696E 
+ 1232      6700
+ 1233              	.LASF226:
+ 1234 0053 72634578 		.string	"rcExcessive"
+ 1234      63657373 
+ 1234      69766500 
+ 1235              	.LASF222:
+ 1236 005f 72634361 		.string	"rcCanceled"
+ 1236      6E63656C 
+ 1236      656400
+ 1237              	.LASF156:
+ 1238 006a 72634C61 		.string	"rcLastContext_v1_0"
+ 1238      7374436F 
+
GAS LISTING /tmp/cclL3imJ.s 			page 25
+
+
+ 1238      6E746578 
+ 1238      745F7631 
+ 1238      5F3000
+ 1239              	.LASF167:
+ 1240 007d 72634C61 		.string	"rcLastContext_v1_1"
+ 1240      7374436F 
+ 1240      6E746578 
+ 1240      745F7631 
+ 1240      5F3100
+ 1241              	.LASF90:
+ 1242 0090 7263456E 		.string	"rcEncryptionKey"
+ 1242      63727970 
+ 1242      74696F6E 
+ 1242      4B657900 
+ 1243              	.LASF97:
+ 1244 00a0 5243436F 		.string	"RCContext"
+ 1244      6E746578 
+ 1244      7400
+ 1245              	.LASF92:
+ 1246 00aa 7263436D 		.string	"rcCmd"
+ 1246      6400
+ 1247              	.LASF242:
+ 1248 00b0 72634475 		.string	"rcDuplicate"
+ 1248      706C6963 
+ 1248      61746500 
+ 1249              	.LASF202:
+ 1250 00bc 72635265 		.string	"rcRefcount"
+ 1250      66636F75 
+ 1250      6E7400
+ 1251              	.LASF91:
+ 1252 00c7 7263526E 		.string	"rcRng"
+ 1252      6700
+ 1253              	.LASF34:
+ 1254 00cd 72634E6F 		.string	"rcNoTarg"
+ 1254      54617267 
+ 1254      00
+ 1255              	.LASF204:
+ 1256 00d6 52435374 		.string	"RCState"
+ 1256      61746500 
+ 1257              	.LASF5:
+ 1258 00de 756E7369 		.string	"unsigned int"
+ 1258      676E6564 
+ 1258      20696E74 
+ 1258      00
+ 1259              	.LASF89:
+ 1260 00eb 72635072 		.string	"rcProduction"
+ 1260      6F647563 
+ 1260      74696F6E 
+ 1260      00
+ 1261              	.LASF69:
+ 1262 00f8 72635061 		.string	"rcPagemap"
+ 1262      67656D61 
+ 1262      7000
+ 1263              	.LASF185:
+ 1264 0102 72635265 		.string	"rcResources"
+ 1264      736F7572 
+ 1264      63657300 
+
GAS LISTING /tmp/cclL3imJ.s 			page 26
+
+
+ 1265              	.LASF50:
+ 1266 010e 7263586D 		.string	"rcXmlDoc"
+ 1266      6C446F63 
+ 1266      00
+ 1267              	.LASF37:
+ 1268 0117 7263546F 		.string	"rcTocEntry"
+ 1268      63456E74 
+ 1268      727900
+ 1269              	.LASF114:
+ 1270 0122 72635265 		.string	"rcRemoving"
+ 1270      6D6F7669 
+ 1270      6E6700
+ 1271              	.LASF192:
+ 1272 012d 72634D6F 		.string	"rcMode"
+ 1272      646500
+ 1273              	.LASF119:
+ 1274 0134 7263436C 		.string	"rcClosing"
+ 1274      6F73696E 
+ 1274      6700
+ 1275              	.LASF72:
+ 1276 013e 72635175 		.string	"rcQueue"
+ 1276      65756500 
+ 1277              	.LASF120:
+ 1278 0146 72635265 		.string	"rcResizing"
+ 1278      73697A69 
+ 1278      6E6700
+ 1279              	.LASF171:
+ 1280 0151 72635365 		.string	"rcSelf"
+ 1280      6C6600
+ 1281              	.LASF214:
+ 1282 0158 72634465 		.string	"rcDestroyed"
+ 1282      7374726F 
+ 1282      79656400 
+ 1283              	.LASF162:
+ 1284 0164 7263496E 		.string	"rcInitializing"
+ 1284      69746961 
+ 1284      6C697A69 
+ 1284      6E6700
+ 1285              	.LASF168:
+ 1286 0173 52434F62 		.string	"RCObject"
+ 1286      6A656374 
+ 1286      00
+ 1287              	.LASF146:
+ 1288 017c 72634174 		.string	"rcAttaching"
+ 1288      74616368 
+ 1288      696E6700 
+ 1289              	.LASF219:
+ 1290 0188 72634275 		.string	"rcBusy"
+ 1290      737900
+ 1291              	.LASF74:
+ 1292 018f 72635363 		.string	"rcSchema"
+ 1292      68656D61 
+ 1292      00
+ 1293              	.LASF138:
+ 1294 0198 72634875 		.string	"rcHuffmanCoding"
+ 1294      66666D61 
+ 1294      6E436F64 
+
GAS LISTING /tmp/cclL3imJ.s 			page 27
+
+
+ 1294      696E6700 
+ 1295              	.LASF123:
+ 1296 01a8 7263436F 		.string	"rcCommitting"
+ 1296      6D6D6974 
+ 1296      74696E67 
+ 1296      00
+ 1297              	.LASF75:
+ 1298 01b5 72635365 		.string	"rcSemaphore"
+ 1298      6D617068 
+ 1298      6F726500 
+ 1299              	.LASF232:
+ 1300 01c1 72634465 		.string	"rcDetached"
+ 1300      74616368 
+ 1300      656400
+ 1301              	.LASF188:
+ 1302 01cc 7263526F 		.string	"rcRow"
+ 1302      7700
+ 1303              	.LASF239:
+ 1304 01d2 7263546F 		.string	"rcTooShort"
+ 1304      6F53686F 
+ 1304      727400
+ 1305              	.LASF15:
+ 1306 01dd 72634646 		.string	"rcFF"
+ 1306      00
+ 1307              	.LASF16:
+ 1308 01e2 72634653 		.string	"rcFS"
+ 1308      00
+ 1309              	.LASF250:
+ 1310 01e7 7263556E 		.string	"rcUndefined"
+ 1310      64656669 
+ 1310      6E656400 
+ 1311              	.LASF132:
+ 1312 01f3 72635061 		.string	"rcPacking"
+ 1312      636B696E 
+ 1312      6700
+ 1313              	.LASF216:
+ 1314 01fd 7263436F 		.string	"rcCorrupt"
+ 1314      72727570 
+ 1314      7400
+ 1315              	.LASF7:
+ 1316 0207 75696E74 		.string	"uint32_t"
+ 1316      33325F74 
+ 1316      00
+ 1317              	.LASF133:
+ 1318 0210 7263556E 		.string	"rcUnpacking"
+ 1318      7061636B 
+ 1318      696E6700 
+ 1319              	.LASF51:
+ 1320 021c 72634669 		.string	"rcFile"
+ 1320      6C6500
+ 1321              	.LASF39:
+ 1322 0223 72634174 		.string	"rcAttr"
+ 1322      747200
+ 1323              	.LASF199:
+ 1324 022a 7263456E 		.string	"rcEnvironment"
+ 1324      7669726F 
+ 1324      6E6D656E 
+
GAS LISTING /tmp/cclL3imJ.s 			page 28
+
+
+ 1324      7400
+ 1325              	.LASF149:
+ 1326 0238 72634650 		.string	"rcFPCoding"
+ 1326      436F6469 
+ 1326      6E6700
+ 1327              	.LASF80:
+ 1328 0243 72635469 		.string	"rcTimeout"
+ 1328      6D656F75 
+ 1328      7400
+ 1329              	.LASF62:
+ 1330 024d 72634D44 		.string	"rcMD5SumFmt"
+ 1330      3553756D 
+ 1330      466D7400 
+ 1331              	.LASF137:
+ 1332 0259 72634578 		.string	"rcExecuting"
+ 1332      65637574 
+ 1332      696E6700 
+ 1333              	.LASF145:
+ 1334 0265 72635761 		.string	"rcWaiting"
+ 1334      6974696E 
+ 1334      6700
+ 1335              	.LASF176:
+ 1336 026f 7263466F 		.string	"rcFormat"
+ 1336      726D6174 
+ 1336      00
+ 1337              	.LASF181:
+ 1338 0278 7263436F 		.string	"rcConstraint"
+ 1338      6E737472 
+ 1338      61696E74 
+ 1338      00
+ 1339              	.LASF22:
+ 1340 0285 7263584D 		.string	"rcXML"
+ 1340      4C00
+ 1341              	.LASF45:
+ 1342 028b 7263436F 		.string	"rcCondition"
+ 1342      6E646974 
+ 1342      696F6E00 
+ 1343              	.LASF205:
+ 1344 0297 72634E6F 		.string	"rcNoErr"
+ 1344      45727200 
+ 1345              	.LASF42:
+ 1346 029f 72634275 		.string	"rcBuffer"
+ 1346      66666572 
+ 1346      00
+ 1347              	.LASF142:
+ 1348 02a8 72635061 		.string	"rcParsing"
+ 1348      7273696E 
+ 1348      6700
+ 1349              	.LASF41:
+ 1350 02b2 7263426C 		.string	"rcBlob"
+ 1350      6F6200
+ 1351              	.LASF240:
+ 1352 02b9 7263546F 		.string	"rcTooLong"
+ 1352      6F4C6F6E 
+ 1352      6700
+ 1353              	.LASF24:
+ 1354 02c3 72634C61 		.string	"rcLastModule_v1_0"
+
GAS LISTING /tmp/cclL3imJ.s 			page 29
+
+
+ 1354      73744D6F 
+ 1354      64756C65 
+ 1354      5F76315F 
+ 1354      3000
+ 1355              	.LASF31:
+ 1356 02d5 72634C61 		.string	"rcLastModule_v1_1"
+ 1356      73744D6F 
+ 1356      64756C65 
+ 1356      5F76315F 
+ 1356      3100
+ 1357              	.LASF64:
+ 1358 02e7 72634D65 		.string	"rcMetadata"
+ 1358      74616461 
+ 1358      746100
+ 1359              	.LASF236:
+ 1360 02f2 72635772 		.string	"rcWriteonly"
+ 1360      6974656F 
+ 1360      6E6C7900 
+ 1361              	.LASF115:
+ 1362 02fe 7263436C 		.string	"rcClearing"
+ 1362      65617269 
+ 1362      6E6700
+ 1363              	.LASF55:
+ 1364 0309 7263466F 		.string	"rcFormatter"
+ 1364      726D6174 
+ 1364      74657200 
+ 1365              	.LASF248:
+ 1366 0315 72634F75 		.string	"rcOutoforder"
+ 1366      746F666F 
+ 1366      72646572 
+ 1366      00
+ 1367              	.LASF70:
+ 1368 0322 72635061 		.string	"rcPath"
+ 1368      746800
+ 1369              	.LASF189:
+ 1370 0329 72634C69 		.string	"rcLibrary"
+ 1370      62726172 
+ 1370      7900
+ 1371              	.LASF141:
+ 1372 0333 7263546F 		.string	"rcTokenizing"
+ 1372      6B656E69 
+ 1372      7A696E67 
+ 1372      00
+ 1373              	.LASF198:
+ 1374 0340 72634572 		.string	"rcError"
+ 1374      726F7200 
+ 1375              	.LASF18:
+ 1376 0348 72635846 		.string	"rcXF"
+ 1376      00
+ 1377              	.LASF183:
+ 1378 034d 72634D65 		.string	"rcMessage"
+ 1378      73736167 
+ 1378      6500
+ 1379              	.LASF261:
+ 1380 0357 4B4E756C 		.string	"KNullBlockCipherVecRegMake"
+ 1380      6C426C6F 
+ 1380      636B4369 
+
GAS LISTING /tmp/cclL3imJ.s 			page 30
+
+
+ 1380      70686572 
+ 1380      56656352 
+ 1381              	.LASF237:
+ 1382 0372 72634E6F 		.string	"rcNoPerm"
+ 1382      5065726D 
+ 1382      00
+ 1383              	.LASF54:
+ 1384 037b 72634675 		.string	"rcFunction"
+ 1384      6E637469 
+ 1384      6F6E00
+ 1385              	.LASF208:
+ 1386 0386 7263556E 		.string	"rcUnsupported"
+ 1386      73757070 
+ 1386      6F727465 
+ 1386      6400
+ 1387              	.LASF43:
+ 1388 0394 72634368 		.string	"rcChar"
+ 1388      617200
+ 1389              	.LASF174:
+ 1390 039b 72634D65 		.string	"rcMemory"
+ 1390      6D6F7279 
+ 1390      00
+ 1391              	.LASF194:
+ 1392 03a4 72634372 		.string	"rcCrc"
+ 1392      6300
+ 1393              	.LASF241:
+ 1394 03aa 7263546F 		.string	"rcTooBig"
+ 1394      6F426967 
+ 1394      00
+ 1395              	.LASF179:
+ 1396 03b3 72634964 		.string	"rcId"
+ 1396      00
+ 1397              	.LASF82:
+ 1398 03b8 72635472 		.string	"rcTree"
+ 1398      656500
+ 1399              	.LASF253:
+ 1400 03bf 72634E6F 		.string	"rcNotAvailable"
+ 1400      74417661 
+ 1400      696C6162 
+ 1400      6C6500
+ 1401              	.LASF93:
+ 1402 03ce 72634461 		.string	"rcData"
+ 1402      746100
+ 1403              	.LASF257:
+ 1404 03d5 5F5F6675 		.string	"__func__"
+ 1404      6E635F5F 
+ 1404      00
+ 1405              	.LASF254:
+ 1406 03de 72635772 		.string	"rcWrongType"
+ 1406      6F6E6754 
+ 1406      79706500 
+ 1407              	.LASF56:
+ 1408 03ea 72634675 		.string	"rcFunctParam"
+ 1408      6E637450 
+ 1408      6172616D 
+ 1408      00
+ 1409              	.LASF63:
+
GAS LISTING /tmp/cclL3imJ.s 			page 31
+
+
+ 1410 03f7 72634D65 		.string	"rcMemMap"
+ 1410      6D4D6170 
+ 1410      00
+ 1411              	.LASF9:
+ 1412 0400 63686172 		.string	"char"
+ 1412      00
+ 1413              	.LASF211:
+ 1414 0405 7263416D 		.string	"rcAmbiguous"
+ 1414      62696775 
+ 1414      6F757300 
+ 1415              	.LASF244:
+ 1416 0411 72634967 		.string	"rcIgnored"
+ 1416      6E6F7265 
+ 1416      6400
+ 1417              	.LASF109:
+ 1418 041b 72635265 		.string	"rcRenaming"
+ 1418      6E616D69 
+ 1418      6E6700
+ 1419              	.LASF121:
+ 1420 0426 72635265 		.string	"rcReading"
+ 1420      6164696E 
+ 1420      6700
+ 1421              	.LASF58:
+ 1422 0430 7263496E 		.string	"rcIndex"
+ 1422      64657800 
+ 1423              	.LASF104:
+ 1424 0438 72634C69 		.string	"rcListing"
+ 1424      7374696E 
+ 1424      6700
+ 1425              	.LASF178:
+ 1426 0442 7263496E 		.string	"rcInterface"
+ 1426      74657266 
+ 1426      61636500 
+ 1427              	.LASF107:
+ 1428 044e 72634C6F 		.string	"rcLocking"
+ 1428      636B696E 
+ 1428      6700
+ 1429              	.LASF60:
+ 1430 0458 72634C6F 		.string	"rcLock"
+ 1430      636B00
+ 1431              	.LASF108:
+ 1432 045f 7263556E 		.string	"rcUnlocking"
+ 1432      6C6F636B 
+ 1432      696E6700 
+ 1433              	.LASF85:
+ 1434 046b 72635665 		.string	"rcVector"
+ 1434      63746F72 
+ 1434      00
+ 1435              	.LASF122:
+ 1436 0474 72635772 		.string	"rcWriting"
+ 1436      6974696E 
+ 1436      6700
+ 1437              	.LASF53:
+ 1438 047e 72634669 		.string	"rcFileFormat"
+ 1438      6C65466F 
+ 1438      726D6174 
+ 1438      00
+
GAS LISTING /tmp/cclL3imJ.s 			page 32
+
+
+ 1439              	.LASF21:
+ 1440 048b 72634170 		.string	"rcApp"
+ 1440      7000
+ 1441              	.LASF125:
+ 1442 0491 72635265 		.string	"rcResetting"
+ 1442      73657474 
+ 1442      696E6700 
+ 1443              	.LASF71:
+ 1444 049d 72635072 		.string	"rcProcess"
+ 1444      6F636573 
+ 1444      7300
+ 1445              	.LASF106:
+ 1446 04a7 72635265 		.string	"rcResolving"
+ 1446      736F6C76 
+ 1446      696E6700 
+ 1447              	.LASF12:
+ 1448 04b3 72635465 		.string	"rcText"
+ 1448      787400
+ 1449              	.LASF66:
+ 1450 04ba 72634E61 		.string	"rcNamelist"
+ 1450      6D656C69 
+ 1450      737400
+ 1451              	.LASF229:
+ 1452 04c5 72634E6F 		.string	"rcNotFound"
+ 1452      74466F75 
+ 1452      6E6400
+ 1453              	.LASF139:
+ 1454 04d0 72635265 		.string	"rcReindexing"
+ 1454      696E6465 
+ 1454      78696E67 
+ 1454      00
+ 1455              	.LASF87:
+ 1456 04dd 72634578 		.string	"rcExpression"
+ 1456      70726573 
+ 1456      73696F6E 
+ 1456      00
+ 1457              	.LASF235:
+ 1458 04ea 72635265 		.string	"rcReadonly"
+ 1458      61646F6E 
+ 1458      6C7900
+ 1459              	.LASF95:
+ 1460 04f5 72635572 		.string	"rcUri"
+ 1460      6900
+ 1461              	.LASF100:
+ 1462 04fb 7263436F 		.string	"rcConstructing"
+ 1462      6E737472 
+ 1462      75637469 
+ 1462      6E6700
+ 1463              	.LASF173:
+ 1464 050a 72634F66 		.string	"rcOffset"
+ 1464      66736574 
+ 1464      00
+ 1465              	.LASF233:
+ 1466 0513 72634465 		.string	"rcDeadlock"
+ 1466      61646C6F 
+ 1466      636B00
+ 1467              	.LASF47:
+
GAS LISTING /tmp/cclL3imJ.s 			page 33
+
+
+ 1468 051e 72634461 		.string	"rcDatabase"
+ 1468      74616261 
+ 1468      736500
+ 1469              	.LASF127:
+ 1470 0529 72634672 		.string	"rcFreezing"
+ 1470      65657A69 
+ 1470      6E6700
+ 1471              	.LASF217:
+ 1472 0534 7263496E 		.string	"rcIncorrect"
+ 1472      636F7272 
+ 1472      65637400 
+ 1473              	.LASF206:
+ 1474 0540 7263446F 		.string	"rcDone"
+ 1474      6E6500
+ 1475              	.LASF157:
+ 1476 0547 7263466C 		.string	"rcFlushing"
+ 1476      75736869 
+ 1476      6E6700
+ 1477              	.LASF159:
+ 1478 0552 7263456E 		.string	"rcEncrypting"
+ 1478      63727970 
+ 1478      74696E67 
+ 1478      00
+ 1479              	.LASF251:
+ 1480 055f 7263556E 		.string	"rcUnequal"
+ 1480      65717561 
+ 1480      6C00
+ 1481              	.LASF10:
+ 1482 0569 72634578 		.string	"rcExe"
+ 1482      6500
+ 1483              	.LASF38:
+ 1484 056f 72634172 		.string	"rcArgv"
+ 1484      677600
+ 1485              	.LASF147:
+ 1486 0576 72634465 		.string	"rcDetaching"
+ 1486      74616368 
+ 1486      696E6700 
+ 1487              	.LASF99:
+ 1488 0582 72634361 		.string	"rcCasting"
+ 1488      7374696E 
+ 1488      6700
+ 1489              	.LASF110:
+ 1490 058c 7263416C 		.string	"rcAliasing"
+ 1490      69617369 
+ 1490      6E6700
+ 1491              	.LASF49:
+ 1492 0597 7263446F 		.string	"rcDoc"
+ 1492      6300
+ 1493              	.LASF98:
+ 1494 059d 7263416C 		.string	"rcAllocating"
+ 1494      6C6F6361 
+ 1494      74696E67 
+ 1494      00
+ 1495              	.LASF212:
+ 1496 05aa 72634E75 		.string	"rcNull"
+ 1496      6C6C00
+ 1497              	.LASF180:
+
GAS LISTING /tmp/cclL3imJ.s 			page 34
+
+
+ 1498 05b1 72635261 		.string	"rcRange"
+ 1498      6E676500 
+ 1499              	.LASF35:
+ 1500 05b9 72634172 		.string	"rcArc"
+ 1500      6300
+ 1501              	.LASF252:
+ 1502 05bf 72634661 		.string	"rcFailed"
+ 1502      696C6564 
+ 1502      00
+ 1503              	.LASF23:
+ 1504 05c8 72635352 		.string	"rcSRA"
+ 1504      4100
+ 1505              	.LASF152:
+ 1506 05ce 72635365 		.string	"rcSearching"
+ 1506      61726368 
+ 1506      696E6700 
+ 1507              	.LASF225:
+ 1508 05da 7263496E 		.string	"rcInsufficient"
+ 1508      73756666 
+ 1508      69636965 
+ 1508      6E7400
+ 1509              	.LASF165:
+ 1510 05e9 72635072 		.string	"rcProcessing"
+ 1510      6F636573 
+ 1510      73696E67 
+ 1510      00
+ 1511              	.LASF144:
+ 1512 05f6 72635369 		.string	"rcSignaling"
+ 1512      676E616C 
+ 1512      696E6700 
+ 1513              	.LASF135:
+ 1514 0602 72634465 		.string	"rcDecoding"
+ 1514      636F6469 
+ 1514      6E6700
+ 1515              	.LASF76:
+ 1516 060d 72635374 		.string	"rcStorage"
+ 1516      6F726167 
+ 1516      6500
+ 1517              	.LASF213:
+ 1518 0617 72634261 		.string	"rcBadVersion"
+ 1518      64566572 
+ 1518      73696F6E 
+ 1518      00
+ 1519              	.LASF210:
+ 1520 0624 7263556E 		.string	"rcUnrecognized"
+ 1520      7265636F 
+ 1520      676E697A 
+ 1520      656400
+ 1521              	.LASF161:
+ 1522 0633 7263436F 		.string	"rcComparing"
+ 1522      6D706172 
+ 1522      696E6700 
+ 1523              	.LASF65:
+ 1524 063f 72634D67 		.string	"rcMgr"
+ 1524      7200
+ 1525              	.LASF154:
+ 1526 0645 72634576 		.string	"rcEvaluating"
+
GAS LISTING /tmp/cclL3imJ.s 			page 35
+
+
+ 1526      616C7561 
+ 1526      74696E67 
+ 1526      00
+ 1527              	.LASF163:
+ 1528 0652 72635265 		.string	"rcRetrieving"
+ 1528      74726965 
+ 1528      76696E67 
+ 1528      00
+ 1529              	.LASF116:
+ 1530 065f 72635570 		.string	"rcUpdating"
+ 1530      64617469 
+ 1530      6E6700
+ 1531              	.LASF83:
+ 1532 066a 72635472 		.string	"rcTrie"
+ 1532      696500
+ 1533              	.LASF201:
+ 1534 0671 72635369 		.string	"rcSize"
+ 1534      7A6500
+ 1535              	.LASF150:
+ 1536 0678 72634D75 		.string	"rcMultiplexing"
+ 1536      6C746970 
+ 1536      6C657869 
+ 1536      6E6700
+ 1537              	.LASF243:
+ 1538 0687 72634F75 		.string	"rcOutOfKDirectory"
+ 1538      744F664B 
+ 1538      44697265 
+ 1538      63746F72 
+ 1538      7900
+ 1539              	.LASF40:
+ 1540 0699 72634261 		.string	"rcBarrier"
+ 1540      72726965 
+ 1540      7200
+ 1541              	.LASF77:
+ 1542 06a3 72635374 		.string	"rcString"
+ 1542      72696E67 
+ 1542      00
+ 1543              	.LASF193:
+ 1544 06ac 7263456E 		.string	"rcEncryption"
+ 1544      63727970 
+ 1544      74696F6E 
+ 1544      00
+ 1545              	.LASF25:
+ 1546 06b9 72634B46 		.string	"rcKFG"
+ 1546      4700
+ 1547              	.LASF46:
+ 1548 06bf 72634375 		.string	"rcCursor"
+ 1548      72736F72 
+ 1548      00
+ 1549              	.LASF101:
+ 1550 06c8 72634465 		.string	"rcDestroying"
+ 1550      7374726F 
+ 1550      79696E67 
+ 1550      00
+ 1551              	.LASF27:
+ 1552 06d5 72634B72 		.string	"rcKrypto"
+ 1552      7970746F 
+
GAS LISTING /tmp/cclL3imJ.s 			page 36
+
+
+ 1552      00
+ 1553              	.LASF196:
+ 1554 06de 72635365 		.string	"rcSeed"
+ 1554      656400
+ 1555              	.LASF221:
+ 1556 06e5 7263496E 		.string	"rcInterrupted"
+ 1556      74657272 
+ 1556      75707465 
+ 1556      6400
+ 1557              	.LASF153:
+ 1558 06f3 72634C6F 		.string	"rcLoading"
+ 1558      6164696E 
+ 1558      6700
+ 1559              	.LASF136:
+ 1560 06fd 72635661 		.string	"rcValidating"
+ 1560      6C696461 
+ 1560      74696E67 
+ 1560      00
+ 1561              	.LASF230:
+ 1562 070a 72634C6F 		.string	"rcLocked"
+ 1562      636B6564 
+ 1562      00
+ 1563              	.LASF59:
+ 1564 0713 72634974 		.string	"rcIterator"
+ 1564      65726174 
+ 1564      6F7200
+ 1565              	.LASF67:
+ 1566 071e 72634E6F 		.string	"rcNode"
+ 1566      646500
+ 1567              	.LASF1:
+ 1568 0725 73686F72 		.string	"short int"
+ 1568      7420696E 
+ 1568      7400
+ 1569              	.LASF102:
+ 1570 072f 72635265 		.string	"rcReleasing"
+ 1570      6C656173 
+ 1570      696E6700 
+ 1571              	.LASF177:
+ 1572 073b 72635472 		.string	"rcTransfer"
+ 1572      616E7366 
+ 1572      657200
+ 1573              	.LASF2:
+ 1574 0746 6C6F6E67 		.string	"long int"
+ 1574      20696E74 
+ 1574      00
+ 1575              	.LASF262:
+ 1576 074f 4B426C6F 		.string	"KBlockCipher"
+ 1576      636B4369 
+ 1576      70686572 
+ 1576      00
+ 1577              	.LASF164:
+ 1578 075c 72635365 		.string	"rcSending"
+ 1578      6E64696E 
+ 1578      6700
+ 1579              	.LASF215:
+ 1580 0766 7263496E 		.string	"rcInvalid"
+ 1580      76616C69 
+
GAS LISTING /tmp/cclL3imJ.s 			page 37
+
+
+ 1580      6400
+ 1581              	.LASF249:
+ 1582 0770 72634E6F 		.string	"rcNotOpen"
+ 1582      744F7065 
+ 1582      6E00
+ 1583              	.LASF103:
+ 1584 077a 72634163 		.string	"rcAccessing"
+ 1584      63657373 
+ 1584      696E6700 
+ 1585              	.LASF29:
+ 1586 0786 72634E53 		.string	"rcNS"
+ 1586      00
+ 1587              	.LASF112:
+ 1588 078b 72635072 		.string	"rcProjecting"
+ 1588      6F6A6563 
+ 1588      74696E67 
+ 1588      00
+ 1589              	.LASF175:
+ 1590 0798 72634E61 		.string	"rcName"
+ 1590      6D6500
+ 1591              	.LASF238:
+ 1592 079f 7263496E 		.string	"rcInPlaceNotAllowed"
+ 1592      506C6163 
+ 1592      654E6F74 
+ 1592      416C6C6F 
+ 1592      77656400 
+ 1593              	.LASF247:
+ 1594 07b3 72634F70 		.string	"rcOpen"
+ 1594      656E00
+ 1595              	.LASF227:
+ 1596 07ba 72635669 		.string	"rcViolated"
+ 1596      6F6C6174 
+ 1596      656400
+ 1597              	.LASF169:
+ 1598 07c5 72634E6F 		.string	"rcNoObj"
+ 1598      4F626A00 
+ 1599              	.LASF200:
+ 1600 07cd 72635369 		.string	"rcSignalSet"
+ 1600      676E616C 
+ 1600      53657400 
+ 1601              	.LASF197:
+ 1602 07d9 7263436F 		.string	"rcConnection"
+ 1602      6E6E6563 
+ 1602      74696F6E 
+ 1602      00
+ 1603              	.LASF195:
+ 1604 07e6 72634368 		.string	"rcChecksum"
+ 1604      65636B73 
+ 1604      756D00
+ 1605              	.LASF78:
+ 1606 07f1 72635461 		.string	"rcTable"
+ 1606      626C6500 
+ 1607              	.LASF11:
+ 1608 07f9 72635275 		.string	"rcRuntime"
+ 1608      6E74696D 
+ 1608      6500
+ 1609              	.LASF148:
+
GAS LISTING /tmp/cclL3imJ.s 			page 38
+
+
+ 1610 0803 72634C6F 		.string	"rcLogging"
+ 1610      6767696E 
+ 1610      6700
+ 1611              	.LASF160:
+ 1612 080d 72634465 		.string	"rcDecrypting"
+ 1612      63727970 
+ 1612      74696E67 
+ 1612      00
+ 1613              	.LASF61:
+ 1614 081a 72634C6F 		.string	"rcLog"
+ 1614      6700
+ 1615              	.LASF68:
+ 1616 0820 72634E75 		.string	"rcNumeral"
+ 1616      6D657261 
+ 1616      6C00
+ 1617              	.LASF172:
+ 1618 082a 72635061 		.string	"rcParam"
+ 1618      72616D00 
+ 1619              	.LASF32:
+ 1620 0832 52434D6F 		.string	"RCModule"
+ 1620      64756C65 
+ 1620      00
+ 1621              	.LASF158:
+ 1622 083b 72634170 		.string	"rcAppending"
+ 1622      70656E64 
+ 1622      696E6700 
+ 1623              	.LASF57:
+ 1624 0847 72634865 		.string	"rcHeader"
+ 1624      61646572 
+ 1624      00
+ 1625              	.LASF6:
+ 1626 0850 6C6F6E67 		.string	"long unsigned int"
+ 1626      20756E73 
+ 1626      69676E65 
+ 1626      6420696E 
+ 1626      7400
+ 1627              	.LASF245:
+ 1628 0862 72634F75 		.string	"rcOutofrange"
+ 1628      746F6672 
+ 1628      616E6765 
+ 1628      00
+ 1629              	.LASF170:
+ 1630 086f 72634C69 		.string	"rcLink"
+ 1630      6E6B00
+ 1631              	.LASF52:
+ 1632 0876 72634669 		.string	"rcFileDesc"
+ 1632      6C654465 
+ 1632      736300
+ 1633              	.LASF263:
+ 1634 0881 6E65775F 		.string	"new_obj"
+ 1634      6F626A00 
+ 1635              	.LASF209:
+ 1636 0889 7263556E 		.string	"rcUnexpected"
+ 1636      65787065 
+ 1636      63746564 
+ 1636      00
+ 1637              	.LASF207:
+
GAS LISTING /tmp/cclL3imJ.s 			page 39
+
+
+ 1638 0896 7263556E 		.string	"rcUnknown"
+ 1638      6B6E6F77 
+ 1638      6E00
+ 1639              	.LASF155:
+ 1640 08a0 7263496E 		.string	"rcInflating"
+ 1640      666C6174 
+ 1640      696E6700 
+ 1641              	.LASF118:
+ 1642 08ac 72634F70 		.string	"rcOpening"
+ 1642      656E696E 
+ 1642      6700
+ 1643              	.LASF17:
+ 1644 08b6 72635053 		.string	"rcPS"
+ 1644      00
+ 1645              	.LASF3:
+ 1646 08bb 756E7369 		.string	"unsigned char"
+ 1646      676E6564 
+ 1646      20636861 
+ 1646      7200
+ 1647              	.LASF126:
+ 1648 08c9 72635065 		.string	"rcPersisting"
+ 1648      72736973 
+ 1648      74696E67 
+ 1648      00
+ 1649              	.LASF259:
+ 1650 08d6 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/no-null-ncbi.c"
+ 1650      652F726F 
+ 1650      6461726D 
+ 1650      65722F73 
+ 1650      72615F73 
+ 1651              	.LASF220:
+ 1652 0910 7263496E 		.string	"rcIncomplete"
+ 1652      636F6D70 
+ 1652      6C657465 
+ 1652      00
+ 1653              	.LASF246:
+ 1654 091d 72634C61 		.string	"rcLastState_v1_0"
+ 1654      73745374 
+ 1654      6174655F 
+ 1654      76315F30 
+ 1654      00
+ 1655              	.LASF255:
+ 1656 092e 72634C61 		.string	"rcLastState_v1_1"
+ 1656      73745374 
+ 1656      6174655F 
+ 1656      76315F31 
+ 1656      00
+ 1657              	.LASF143:
+ 1658 093f 7263436F 		.string	"rcConverting"
+ 1658      6E766572 
+ 1658      74696E67 
+ 1658      00
+ 1659              	.LASF117:
+ 1660 094c 72634372 		.string	"rcCreating"
+ 1660      65617469 
+ 1660      6E6700
+ 1661              	.LASF191:
+
GAS LISTING /tmp/cclL3imJ.s 			page 40
+
+
+ 1662 0957 72634974 		.string	"rcItem"
+ 1662      656D00
+ 1663              	.LASF111:
+ 1664 095e 72635365 		.string	"rcSelecting"
+ 1664      6C656374 
+ 1664      696E6700 
+ 1665              	.LASF8:
+ 1666 096a 72635F74 		.string	"rc_t"
+ 1666      00
+ 1667              	.LASF73:
+ 1668 096f 72635257 		.string	"rcRWLock"
+ 1668      4C6F636B 
+ 1668      00
+ 1669              	.LASF190:
+ 1670 0978 72634C61 		.string	"rcLastObject_v1_0"
+ 1670      73744F62 
+ 1670      6A656374 
+ 1670      5F76315F 
+ 1670      3000
+ 1671              	.LASF203:
+ 1672 098a 72634C61 		.string	"rcLastObject_v1_1"
+ 1672      73744F62 
+ 1672      6A656374 
+ 1672      5F76315F 
+ 1672      3100
+ 1673              	.LASF187:
+ 1674 099c 72634172 		.string	"rcArcHardLink"
+ 1674      63486172 
+ 1674      644C696E 
+ 1674      6B00
+ 1675              	.LASF113:
+ 1676 09aa 7263496E 		.string	"rcInserting"
+ 1676      73657274 
+ 1676      696E6700 
+ 1677              	.LASF166:
+ 1678 09b6 72634964 		.string	"rcIdentifying"
+ 1678      656E7469 
+ 1678      6679696E 
+ 1678      6700
+ 1679              	.LASF124:
+ 1680 09c4 72635265 		.string	"rcReverting"
+ 1680      76657274 
+ 1680      696E6700 
+ 1681              	.LASF20:
+ 1682 09d0 72635644 		.string	"rcVDB"
+ 1682      4200
+ 1683              	.LASF105:
+ 1684 09d6 72635669 		.string	"rcVisiting"
+ 1684      73697469 
+ 1684      6E6700
+ 1685              	.LASF88:
+ 1686 09e1 72634C61 		.string	"rcLastTarget_v1_0"
+ 1686      73745461 
+ 1686      72676574 
+ 1686      5F76315F 
+ 1686      3000
+ 1687              	.LASF96:
+
GAS LISTING /tmp/cclL3imJ.s 			page 41
+
+
+ 1688 09f3 72634C61 		.string	"rcLastTarget_v1_1"
+ 1688      73745461 
+ 1688      72676574 
+ 1688      5F76315F 
+ 1688      3100
+ 1689              	.LASF84:
+ 1690 0a05 72635479 		.string	"rcType"
+ 1690      706500
+ 1691              	.LASF231:
+ 1692 0a0c 7263556E 		.string	"rcUnlocked"
+ 1692      6C6F636B 
+ 1692      656400
+ 1693              	.LASF151:
+ 1694 0a17 7263436C 		.string	"rcClassifying"
+ 1694      61737369 
+ 1694      6679696E 
+ 1694      6700
+ 1695              	.LASF228:
+ 1696 0a25 72634578 		.string	"rcExists"
+ 1696      69737473 
+ 1696      00
+ 1697              	.LASF130:
+ 1698 0a2e 7263466F 		.string	"rcFormatting"
+ 1698      726D6174 
+ 1698      74696E67 
+ 1698      00
+ 1699              	.LASF79:
+ 1700 0a3b 72635468 		.string	"rcThread"
+ 1700      72656164 
+ 1700      00
+ 1701              	.LASF0:
+ 1702 0a44 7369676E 		.string	"signed char"
+ 1702      65642063 
+ 1702      68617200 
+ 1703              	.LASF4:
+ 1704 0a50 73686F72 		.string	"short unsigned int"
+ 1704      7420756E 
+ 1704      7369676E 
+ 1704      65642069 
+ 1704      6E7400
+ 1705              	.LASF260:
+ 1706 0a63 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 1706      652F726F 
+ 1706      6461726D 
+ 1706      65722F73 
+ 1706      72615F73 
+ 1707              	.LASF182:
+ 1708 0aab 72634279 		.string	"rcByteOrder"
+ 1708      74654F72 
+ 1708      64657200 
+ 1709              	.LASF36:
+ 1710 0ab7 7263546F 		.string	"rcToc"
+ 1710      6300
+ 1711              	.LASF44:
+ 1712 0abd 7263436F 		.string	"rcColumn"
+ 1712      6C756D6E 
+ 1712      00
+
GAS LISTING /tmp/cclL3imJ.s 			page 42
+
+
+ 1713              	.LASF256:
+ 1714 0ac6 5F5F5052 		.string	"__PRETTY_FUNCTION__"
+ 1714      45545459 
+ 1714      5F46554E 
+ 1714      4354494F 
+ 1714      4E5F5F00 
+ 1715              	.LASF94:
+ 1716 0ada 72635175 		.string	"rcQuery"
+ 1716      65727900 
+ 1717              	.LASF140:
+ 1718 0ae2 72635265 		.string	"rcRegistering"
+ 1718      67697374 
+ 1718      6572696E 
+ 1718      6700
+ 1719              	.LASF86:
+ 1720 0af0 72634479 		.string	"rcDylib"
+ 1720      6C696200 
+ 1721              	.LASF81:
+ 1722 0af8 7263546F 		.string	"rcToken"
+ 1722      6B656E00 
+ 1723              	.LASF134:
+ 1724 0b00 7263456E 		.string	"rcEncoding"
+ 1724      636F6469 
+ 1724      6E6700
+ 1725              	.LASF224:
+ 1726 0b0b 72634578 		.string	"rcExhausted"
+ 1726      68617573 
+ 1726      74656400 
+ 1727              	.LASF186:
+ 1728 0b17 72634469 		.string	"rcDirEntry"
+ 1728      72456E74 
+ 1728      727900
+ 1729              	.LASF26:
+ 1730 0b22 7263416C 		.string	"rcAlign"
+ 1730      69676E00 
+ 1731              	.LASF28:
+ 1732 0b2a 72635244 		.string	"rcRDBMS"
+ 1732      424D5300 
+ 1733              	.LASF14:
+ 1734 0b32 72634353 		.string	"rcCS"
+ 1734      00
+ 1735              	.LASF129:
+ 1736 0b37 7263436F 		.string	"rcConcatenating"
+ 1736      6E636174 
+ 1736      656E6174 
+ 1736      696E6700 
+ 1737              	.LASF48:
+ 1738 0b47 72634469 		.string	"rcDirectory"
+ 1738      72656374 
+ 1738      6F727900 
+ 1739              	.LASF223:
+ 1740 0b53 7263456D 		.string	"rcEmpty"
+ 1740      70747900 
+ 1741              	.LASF13:
+ 1742 0b5b 7263436F 		.string	"rcCont"
+ 1742      6E7400
+ 1743              	.LASF33:
+
GAS LISTING /tmp/cclL3imJ.s 			page 43
+
+
+ 1744 0b62 52435461 		.string	"RCTarget"
+ 1744      72676574 
+ 1744      00
+ 1745              		.ident	"GCC: (GNU) 4.4.2"
+ 1746              		.section	.note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/cclL3imJ.s 			page 44
+
+
+DEFINED SYMBOLS
+                            *ABS*:0000000000000000 no-null-ncbi.c
+     /tmp/cclL3imJ.s:17     .text:0000000000000000 KNullBlockCipherVecRegMake
+     /tmp/cclL3imJ.s:66     .rodata:0000000000000040 __func__.2439
+     /tmp/cclL3imJ.s:71     .rodata:0000000000000060 __PRETTY_FUNCTION__.2438
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+SetRCFileFuncLine
diff --git a/libs/krypto/null-ncbi-priv.h b/libs/krypto/null-ncbi-priv.h
new file mode 100644
index 0000000..1e485bd
--- /dev/null
+++ b/libs/krypto/null-ncbi-priv.h
@@ -0,0 +1,56 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#ifndef _h_krypto_null_ncbi_priv_libs_
+#define _h_krypto_null_ncbi_priv_libs_
+
+#include <klib/defs.h>
+#include <v128.h>
+
+#include "ncbi-priv.h"
+#include "cipher-impl.h"
+#include "blockcipher-impl.h"
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+
+typedef struct CipherNull CipherNull;
+struct CipherNull
+{
+    KCipher dad;
+    CipherVec    e_ivec;
+    CipherVec    d_ivec;
+};
+
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif /* #ifndef _h_krypto_null_ncbi_priv_libs_ */
+
+
diff --git a/libs/krypto/null-ncbi.c b/libs/krypto/null-ncbi.c
new file mode 100644
index 0000000..fe5e7bc
--- /dev/null
+++ b/libs/krypto/null-ncbi.c
@@ -0,0 +1,251 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <krypto/extern.h>
+
+#include "ncbi-priv.h"
+#include "cipher-priv.h"
+#include "blockcipher-priv.h"
+
+#include <klib/rc.h>
+
+
+#include <byteswap.h>
+#include <string.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <sysalloc.h>
+
+#include "blockcipher-impl.h"
+
+#if USE_VEC
+#include <cpuid.h>
+#endif
+#if USE_VECREG
+#include <v128.h>
+#endif
+
+
+#if USE_VEC
+#define BLOCKCIPHER_IMPL BLOCKCIPHER_VEC_IMPL
+#else
+#define BLOCKCIPHER_IMPL BLOCKCIPHER_BYTE_IMPL
+#endif
+
+typedef struct NULL_CLASS NULL_CLASS;
+
+static const char NULLBCMEMBER(aes_ncbi_name) [] = CLASS_STRING(AES_CLASS);
+
+
+/* ----------------------------------------------------------------------
+ * Destroy
+ *   How large is the stored key for this cipher?  Not the user key used
+ *   to create this key (key schedule)
+ *
+ *   This is needed by KCipher to know how large the KCipher objecr is at
+ *   allocation and to know how much of a buffer each decryption/encryption is
+ */
+static
+void NULLBCMEMBER(Destroy)    (const BLOCKCIPHER_IMPL * self)
+{
+    /* we use a constant object so do nothing */
+}
+
+
+/* ----------------------------------------------------------------------
+ * BlockSize
+ */
+static
+uint32_t NULLBCMEMBER(BlockSize) ()
+{
+    return 16;
+}
+
+
+/* ----------------------------------------------------------------------
+ * KeySize
+ *   How large is the stored key for this cipher?  Not the user key used
+ *   to create this key (key schedule)
+ *
+ *   This is needed by KCipher to know how large the KCipher objecr is at
+ *   allocation and to know how much of a buffer each decryption/encryption is
+ */
+static uint32_t NULLBCMEMBER(KeySize) ()
+{
+    return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * SetEncryptKey
+ *   The KCipher calls this to have the block cipher build an encryption
+ *   key in the KCipher object
+ *
+ */
+static rc_t NULLBCMEMBER(SetEncryptKey) (void * encrypt_key, const char * user_key,
+                                         uint32_t user_key_size)
+{
+    return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * SetDecryptKey
+ *   The KCipher calls this to have the block cipher build an decryption
+ *   key in the KCipher object
+ *
+ */
+static rc_t NULLBCMEMBER(SetDecryptKey) (void * decrypt_key,
+                                     const char * user_key,
+                                     uint32_t user_key_size)
+{
+    return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Encrypt
+ *
+ *   Perform an encryption of a single block.  Chained modes and stream
+ *   cipher modes will call this multiple times.
+ *
+ */
+#if USE_VEC
+static CipherVec NULLBCMEMBER(Encrypt) (CipherVec state,
+                                        const void * encrypt_key)
+{
+    return state;
+}
+#else
+static void NULLBCMEMBER(Encrypt) (const CipherBlock in,
+                                   CipherBlock * out,
+                                   const void * encrypt_key)
+{
+}
+#endif
+
+
+/* ----------------------------------------------------------------------
+ * Decrypt
+ *
+ *   Perform a decryption of a single block.  Chained modes and stream
+ *   cipher modes will call this multiple times.
+ */
+#if USE_VEC
+static CipherVec NULLBCMEMBER(Decrypt) (CipherVec state,
+                                        const void * decrypt_key)
+{
+    return state;
+}
+#else
+static void NULLBCMEMBER(Decrypt) (const CipherBlock in,
+                                   CipherBlock * out,
+                                   const void * encrypt_key)
+{
+}
+#endif
+
+
+/* ----------------------------------------------------------------------
+ * MakeProcessorSupport
+ *
+ * Run-time check for support of this particular AES implementation by
+ * checking the flags given via the cpuid instruction.
+ */
+static __inline__
+bool NULLBCMEMBER(ProcessorSupport) ()
+{
+    return true;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Init
+ *
+ *   Initialize the fields of this object.  The derived class will call this
+ *   during it's initialization.
+ *
+ * self      object to initialze
+ * vt        the virtual table of the derived class
+ * mgr       the cipher manager that is the construction factory block cipher
+ *           objects hold references to the manager while the manager merely
+ *           points at the block ciphers when all block ciphers are destroyed
+ *           the manager loses its references and it too can be destroyed if not
+ *           held elsewhere
+ * name      ASCIZ c-string the name of this class
+ */
+static const
+#if USE_VEC
+KBlockCipherVec_vt_v1
+#else
+KBlockCipherByte_vt_v1
+#endif
+NULLBCMEMBER(_vt_) = {
+    { 1, 1 },
+
+    NULLBCMEMBER(Destroy),
+    NULLBCMEMBER(BlockSize),
+    NULLBCMEMBER(KeySize),
+    NULLBCMEMBER(SetEncryptKey),
+    NULLBCMEMBER(SetDecryptKey),
+    NULLBCMEMBER(Encrypt),
+    NULLBCMEMBER(Decrypt)
+};
+
+
+/* ----------------------------------------------------------------------
+ * Make
+ *
+ * Create a new Null Block Cipher object.
+ * The processor is checked to see if this particular version is supported on
+ * this particular CPU.
+ */
+rc_t NULLBCMEMBER(Make) (KBlockCipher ** new_obj)
+{
+    rc_t rc;
+
+    /* Check parameter first */
+    if (new_obj == NULL)
+        rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+
+    else
+    {
+        *new_obj = NULL;
+
+        /* check for processor support of this flavor */
+        if ( ! NULLBCMEMBER(ProcessorSupport)())
+            rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+
+        else
+        {
+            rc = 0;
+            *new_obj = (KBlockCipher*)&(NULLBCMEMBER(_vt_));
+        }
+    }
+    return rc;
+}
+
+/* end of file lib/krypto/aes-ncbi.c */
diff --git a/libs/krypto/null-ncbi.vec.pic.o.list b/libs/krypto/null-ncbi.vec.pic.o.list
new file mode 100644
index 0000000..f9e1167
--- /dev/null
+++ b/libs/krypto/null-ncbi.vec.pic.o.list
@@ -0,0 +1,4406 @@
+GAS LISTING /tmp/ccIvKeEl.s 			page 1
+
+
+   1              		.file	"null-ncbi.c"
+   2              		.section	.debug_abbrev,"", at progbits
+   3              	.Ldebug_abbrev0:
+   4              		.section	.debug_info,"", at progbits
+   5              	.Ldebug_info0:
+   6              		.section	.debug_line,"", at progbits
+   7              	.Ldebug_line0:
+   8 0000 66010000 		.text
+   8      02001901 
+   8      00000101 
+   8      FB0E0D00 
+   8      01010101 
+   9              	.Ltext0:
+  10              		.section	.rodata
+  11              		.type	KNullBlockCipherVecaes_ncbi_name, @object
+  12              		.size	KNullBlockCipherVecaes_ncbi_name, 10
+  13              	KNullBlockCipherVecaes_ncbi_name:
+  14 0000 4145535F 		.string	"AES_CLASS"
+  14      434C4153 
+  14      5300
+  15              		.text
+  16              		.type	KNullBlockCipherVecDestroy, @function
+  17              	KNullBlockCipherVecDestroy:
+  18              	.LFB513:
+  19              		.file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c"
+   1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /*===========================================================================
+   2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+   3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *                            PUBLIC DOMAIN NOTICE
+   4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *               National Center for Biotechnology Information
+   5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+   6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  This software/database is a "United States Government Work" under the
+   7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  terms of the United States Copyright Act.  It was written as part of
+   8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  the author's official duties as a United States Government employee and
+   9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  thus cannot be copyrighted.  This software/database is freely available
+  10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  to the public for use. The National Library of Medicine and the U.S.
+  11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  Government have not placed any restriction on its use or reproduction.
+  12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+  13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  Although all reasonable efforts have been taken to ensure the accuracy
+  14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  and reliability of the software and data, the NLM and the U.S.
+  15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  Government do not and cannot warrant the performance or results that
+  16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  may be obtained by using this software or data. The NLM and the U.S.
+  17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  Government disclaim all warranties, express or implied, including
+  18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  warranties of performance, merchantability or fitness for any particular
+  19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  purpose.
+  20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+  21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  Please cite the author in any work or product based on this material.
+  22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+  23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * ===========================================================================
+  24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+  25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <krypto/extern.h>
+  27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include "ncbi-priv.h"
+  29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include "cipher-priv.h"
+  30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include "blockcipher-priv.h"
+  31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <klib/rc.h>
+
GAS LISTING /tmp/ccIvKeEl.s 			page 2
+
+
+  33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <byteswap.h>
+  36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <string.h>
+  37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <stdint.h>
+  38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <stdlib.h>
+  39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <assert.h>
+  40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <sysalloc.h>
+  41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include "blockcipher-impl.h"
+  43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VEC
+  45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <cpuid.h>
+  46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+  47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VECREG
+  48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <v128.h>
+  49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+  50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VEC
+  53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #define BLOCKCIPHER_IMPL BLOCKCIPHER_VEC_IMPL
+  54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #else
+  55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #define BLOCKCIPHER_IMPL BLOCKCIPHER_BYTE_IMPL
+  56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+  57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  58:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** typedef struct NULL_CLASS NULL_CLASS;
+  59:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  60:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static const char NULLBCMEMBER(aes_ncbi_name) [] = CLASS_STRING(AES_CLASS);
+  61:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  62:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  63:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+  64:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * Destroy
+  65:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   How large is the stored key for this cipher?  Not the user key used
+  66:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   to create this key (key schedule)
+  67:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+  68:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   This is needed by KCipher to know how large the KCipher objecr is at
+  69:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   allocation and to know how much of a buffer each decryption/encryption is
+  70:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+  71:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static
+  72:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** void NULLBCMEMBER(Destroy)    (const BLOCKCIPHER_IMPL * self)
+  73:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+  20              		.loc 1 73 0
+  21              		.cfi_startproc
+  22 0000 55       		pushq	%rbp
+  23              	.LCFI0:
+  24              		.cfi_def_cfa_offset 16
+  25 0001 4889E5   		movq	%rsp, %rbp
+  26              		.cfi_offset 6, -16
+  27              	.LCFI1:
+  28              		.cfi_def_cfa_register 6
+  29 0004 48897DF8 		movq	%rdi, -8(%rbp)
+  74:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     /* we use a constant object so do nothing */
+  75:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+  30              		.loc 1 75 0
+  31 0008 C9       		leave
+  32 0009 C3       		ret
+  33              		.cfi_endproc
+
GAS LISTING /tmp/ccIvKeEl.s 			page 3
+
+
+  34              	.LFE513:
+  35              		.size	KNullBlockCipherVecDestroy, .-KNullBlockCipherVecDestroy
+  36              		.type	KNullBlockCipherVecBlockSize, @function
+  37              	KNullBlockCipherVecBlockSize:
+  38              	.LFB514:
+  76:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  77:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  78:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+  79:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * BlockSize
+  80:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+  81:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static
+  82:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** uint32_t NULLBCMEMBER(BlockSize) ()
+  83:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+  39              		.loc 1 83 0
+  40              		.cfi_startproc
+  41 000a 55       		pushq	%rbp
+  42              	.LCFI2:
+  43              		.cfi_def_cfa_offset 16
+  44 000b 4889E5   		movq	%rsp, %rbp
+  45              		.cfi_offset 6, -16
+  46              	.LCFI3:
+  47              		.cfi_def_cfa_register 6
+  84:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     return 16;
+  48              		.loc 1 84 0
+  49 000e B8100000 		movl	$16, %eax
+  49      00
+  85:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+  50              		.loc 1 85 0
+  51 0013 C9       		leave
+  52 0014 C3       		ret
+  53              		.cfi_endproc
+  54              	.LFE514:
+  55              		.size	KNullBlockCipherVecBlockSize, .-KNullBlockCipherVecBlockSize
+  56              		.type	KNullBlockCipherVecKeySize, @function
+  57              	KNullBlockCipherVecKeySize:
+  58              	.LFB515:
+  86:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  87:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  88:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+  89:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * KeySize
+  90:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   How large is the stored key for this cipher?  Not the user key used
+  91:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   to create this key (key schedule)
+  92:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+  93:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   This is needed by KCipher to know how large the KCipher objecr is at
+  94:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   allocation and to know how much of a buffer each decryption/encryption is
+  95:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+  96:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static uint32_t NULLBCMEMBER(KeySize) ()
+  97:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+  59              		.loc 1 97 0
+  60              		.cfi_startproc
+  61 0015 55       		pushq	%rbp
+  62              	.LCFI4:
+  63              		.cfi_def_cfa_offset 16
+  64 0016 4889E5   		movq	%rsp, %rbp
+  65              		.cfi_offset 6, -16
+  66              	.LCFI5:
+  67              		.cfi_def_cfa_register 6
+
GAS LISTING /tmp/ccIvKeEl.s 			page 4
+
+
+  98:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     return 0;
+  68              		.loc 1 98 0
+  69 0019 B8000000 		movl	$0, %eax
+  69      00
+  99:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+  70              		.loc 1 99 0
+  71 001e C9       		leave
+  72 001f C3       		ret
+  73              		.cfi_endproc
+  74              	.LFE515:
+  75              		.size	KNullBlockCipherVecKeySize, .-KNullBlockCipherVecKeySize
+  76              		.type	KNullBlockCipherVecSetEncryptKey, @function
+  77              	KNullBlockCipherVecSetEncryptKey:
+  78              	.LFB516:
+ 100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * SetEncryptKey
+ 104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   The KCipher calls this to have the block cipher build an encryption
+ 105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   key in the KCipher object
+ 106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+ 107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+ 108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static rc_t NULLBCMEMBER(SetEncryptKey) (void * encrypt_key, const char * user_key,
+ 109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****                                          uint32_t user_key_size)
+ 110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+  79              		.loc 1 110 0
+  80              		.cfi_startproc
+  81 0020 55       		pushq	%rbp
+  82              	.LCFI6:
+  83              		.cfi_def_cfa_offset 16
+  84 0021 4889E5   		movq	%rsp, %rbp
+  85              		.cfi_offset 6, -16
+  86              	.LCFI7:
+  87              		.cfi_def_cfa_register 6
+  88 0024 48897DF8 		movq	%rdi, -8(%rbp)
+  89 0028 488975F0 		movq	%rsi, -16(%rbp)
+  90 002c 8955EC   		movl	%edx, -20(%rbp)
+ 111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     return 0;
+  91              		.loc 1 111 0
+  92 002f B8000000 		movl	$0, %eax
+  92      00
+ 112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+  93              		.loc 1 112 0
+  94 0034 C9       		leave
+  95 0035 C3       		ret
+  96              		.cfi_endproc
+  97              	.LFE516:
+  98              		.size	KNullBlockCipherVecSetEncryptKey, .-KNullBlockCipherVecSetEncryptKey
+  99              		.type	KNullBlockCipherVecSetDecryptKey, @function
+ 100              	KNullBlockCipherVecSetDecryptKey:
+ 101              	.LFB517:
+ 113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * SetDecryptKey
+ 117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   The KCipher calls this to have the block cipher build an decryption
+ 118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   key in the KCipher object
+
GAS LISTING /tmp/ccIvKeEl.s 			page 5
+
+
+ 119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+ 120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+ 121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static rc_t NULLBCMEMBER(SetDecryptKey) (void * decrypt_key,
+ 122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****                                      const char * user_key,
+ 123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****                                      uint32_t user_key_size)
+ 124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 102              		.loc 1 124 0
+ 103              		.cfi_startproc
+ 104 0036 55       		pushq	%rbp
+ 105              	.LCFI8:
+ 106              		.cfi_def_cfa_offset 16
+ 107 0037 4889E5   		movq	%rsp, %rbp
+ 108              		.cfi_offset 6, -16
+ 109              	.LCFI9:
+ 110              		.cfi_def_cfa_register 6
+ 111 003a 48897DF8 		movq	%rdi, -8(%rbp)
+ 112 003e 488975F0 		movq	%rsi, -16(%rbp)
+ 113 0042 8955EC   		movl	%edx, -20(%rbp)
+ 125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     return 0;
+ 114              		.loc 1 125 0
+ 115 0045 B8000000 		movl	$0, %eax
+ 115      00
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 116              		.loc 1 126 0
+ 117 004a C9       		leave
+ 118 004b C3       		ret
+ 119              		.cfi_endproc
+ 120              	.LFE517:
+ 121              		.size	KNullBlockCipherVecSetDecryptKey, .-KNullBlockCipherVecSetDecryptKey
+ 122              		.type	KNullBlockCipherVecEncrypt, @function
+ 123              	KNullBlockCipherVecEncrypt:
+ 124              	.LFB518:
+ 127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * Encrypt
+ 131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+ 132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   Perform an encryption of a single block.  Chained modes and stream
+ 133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   cipher modes will call this multiple times.
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+ 136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VEC
+ 137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static CipherVec NULLBCMEMBER(Encrypt) (CipherVec state,
+ 138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****                                         const void * encrypt_key)
+ 139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 125              		.loc 1 139 0
+ 126              		.cfi_startproc
+ 127 004c 55       		pushq	%rbp
+ 128              	.LCFI10:
+ 129              		.cfi_def_cfa_offset 16
+ 130 004d 4889E5   		movq	%rsp, %rbp
+ 131              		.cfi_offset 6, -16
+ 132              	.LCFI11:
+ 133              		.cfi_def_cfa_register 6
+ 134 0050 660F7F45 		movdqa	%xmm0, -16(%rbp)
+ 134      F0
+ 135 0055 48897DE8 		movq	%rdi, -24(%rbp)
+
GAS LISTING /tmp/ccIvKeEl.s 			page 6
+
+
+ 140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     return state;
+ 136              		.loc 1 140 0
+ 137 0059 660F6F45 		movdqa	-16(%rbp), %xmm0
+ 137      F0
+ 141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 138              		.loc 1 141 0
+ 139 005e C9       		leave
+ 140 005f C3       		ret
+ 141              		.cfi_endproc
+ 142              	.LFE518:
+ 143              		.size	KNullBlockCipherVecEncrypt, .-KNullBlockCipherVecEncrypt
+ 144              		.type	KNullBlockCipherVecDecrypt, @function
+ 145              	KNullBlockCipherVecDecrypt:
+ 146              	.LFB519:
+ 142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #else
+ 143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static void NULLBCMEMBER(Encrypt) (const CipherBlock in,
+ 144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****                                    CipherBlock * out,
+ 145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****                                    const void * encrypt_key)
+ 146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+ 149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * Decrypt
+ 153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+ 154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   Perform a decryption of a single block.  Chained modes and stream
+ 155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   cipher modes will call this multiple times.
+ 156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+ 157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VEC
+ 158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static CipherVec NULLBCMEMBER(Decrypt) (CipherVec state,
+ 159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****                                         const void * decrypt_key)
+ 160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 147              		.loc 1 160 0
+ 148              		.cfi_startproc
+ 149 0060 55       		pushq	%rbp
+ 150              	.LCFI12:
+ 151              		.cfi_def_cfa_offset 16
+ 152 0061 4889E5   		movq	%rsp, %rbp
+ 153              		.cfi_offset 6, -16
+ 154              	.LCFI13:
+ 155              		.cfi_def_cfa_register 6
+ 156 0064 660F7F45 		movdqa	%xmm0, -16(%rbp)
+ 156      F0
+ 157 0069 48897DE8 		movq	%rdi, -24(%rbp)
+ 161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     return state;
+ 158              		.loc 1 161 0
+ 159 006d 660F6F45 		movdqa	-16(%rbp), %xmm0
+ 159      F0
+ 162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 160              		.loc 1 162 0
+ 161 0072 C9       		leave
+ 162 0073 C3       		ret
+ 163              		.cfi_endproc
+ 164              	.LFE519:
+ 165              		.size	KNullBlockCipherVecDecrypt, .-KNullBlockCipherVecDecrypt
+ 166              		.type	KNullBlockCipherVecProcessorSupport, @function
+
GAS LISTING /tmp/ccIvKeEl.s 			page 7
+
+
+ 167              	KNullBlockCipherVecProcessorSupport:
+ 168              	.LFB520:
+ 163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #else
+ 164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static void NULLBCMEMBER(Decrypt) (const CipherBlock in,
+ 165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****                                    CipherBlock * out,
+ 166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****                                    const void * encrypt_key)
+ 167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+ 170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * MakeProcessorSupport
+ 174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+ 175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * Run-time check for support of this particular AES implementation by
+ 176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * checking the flags given via the cpuid instruction.
+ 177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static __inline__
+ 179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** bool NULLBCMEMBER(ProcessorSupport) ()
+ 180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 169              		.loc 1 180 0
+ 170              		.cfi_startproc
+ 171 0074 55       		pushq	%rbp
+ 172              	.LCFI14:
+ 173              		.cfi_def_cfa_offset 16
+ 174 0075 4889E5   		movq	%rsp, %rbp
+ 175              		.cfi_offset 6, -16
+ 176              	.LCFI15:
+ 177              		.cfi_def_cfa_register 6
+ 181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     return true;
+ 178              		.loc 1 181 0
+ 179 0078 B8010000 		movl	$1, %eax
+ 179      00
+ 182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 180              		.loc 1 182 0
+ 181 007d C9       		leave
+ 182 007e C3       		ret
+ 183              		.cfi_endproc
+ 184              	.LFE520:
+ 185              		.size	KNullBlockCipherVecProcessorSupport, .-KNullBlockCipherVecProcessorSupport
+ 186              		.section	.data.rel.ro.local,"aw", at progbits
+ 187              		.align 32
+ 188              		.type	KNullBlockCipherVec_vt_, @object
+ 189              		.size	KNullBlockCipherVec_vt_, 64
+ 190              	KNullBlockCipherVec_vt_:
+ 191 0000 01000000 		.long	1
+ 192 0004 01000000 		.long	1
+ 193 0008 00000000 		.quad	KNullBlockCipherVecDestroy
+ 193      00000000 
+ 194 0010 00000000 		.quad	KNullBlockCipherVecBlockSize
+ 194      00000000 
+ 195 0018 00000000 		.quad	KNullBlockCipherVecKeySize
+ 195      00000000 
+ 196 0020 00000000 		.quad	KNullBlockCipherVecSetEncryptKey
+ 196      00000000 
+ 197 0028 00000000 		.quad	KNullBlockCipherVecSetDecryptKey
+ 197      00000000 
+
GAS LISTING /tmp/ccIvKeEl.s 			page 8
+
+
+ 198 0030 00000000 		.quad	KNullBlockCipherVecEncrypt
+ 198      00000000 
+ 199 0038 00000000 		.quad	KNullBlockCipherVecDecrypt
+ 199      00000000 
+ 200              		.section	.rodata
+ 201 000a 00000000 		.align 8
+ 201      0000
+ 202              	.LC0:
+ 203 0010 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c"
+ 203      652F726F 
+ 203      6461726D 
+ 203      65722F73 
+ 203      72615F73 
+ 204              		.text
+ 205              	.globl KNullBlockCipherVecMake
+ 206              		.type	KNullBlockCipherVecMake, @function
+ 207              	KNullBlockCipherVecMake:
+ 208              	.LFB521:
+ 183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * Init
+ 187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+ 188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   Initialize the fields of this object.  The derived class will call this
+ 189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   during it's initialization.
+ 190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+ 191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * self      object to initialze
+ 192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * vt        the virtual table of the derived class
+ 193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * mgr       the cipher manager that is the construction factory block cipher
+ 194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *           objects hold references to the manager while the manager merely
+ 195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *           points at the block ciphers when all block ciphers are destroyed
+ 196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *           the manager loses its references and it too can be destroyed if not
+ 197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *           held elsewhere
+ 198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * name      ASCIZ c-string the name of this class
+ 199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+ 200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static const
+ 201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VEC
+ 202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** KBlockCipherVec_vt_v1
+ 203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #else
+ 204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** KBlockCipherByte_vt_v1
+ 205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** NULLBCMEMBER(_vt_) = {
+ 207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     { 1, 1 },
+ 208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     NULLBCMEMBER(Destroy),
+ 210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     NULLBCMEMBER(BlockSize),
+ 211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     NULLBCMEMBER(KeySize),
+ 212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     NULLBCMEMBER(SetEncryptKey),
+ 213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     NULLBCMEMBER(SetDecryptKey),
+ 214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     NULLBCMEMBER(Encrypt),
+ 215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     NULLBCMEMBER(Decrypt)
+ 216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** };
+ 217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * Make
+ 221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+
GAS LISTING /tmp/ccIvKeEl.s 			page 9
+
+
+ 222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * Create a new Null Block Cipher object.
+ 223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * The processor is checked to see if this particular version is supported on
+ 224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * this particular CPU.
+ 225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+ 226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** rc_t NULLBCMEMBER(Make) (KBlockCipher ** new_obj)
+ 227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 209              		.loc 1 227 0
+ 210              		.cfi_startproc
+ 211 007f 55       		pushq	%rbp
+ 212              	.LCFI16:
+ 213              		.cfi_def_cfa_offset 16
+ 214 0080 4889E5   		movq	%rsp, %rbp
+ 215              		.cfi_offset 6, -16
+ 216              	.LCFI17:
+ 217              		.cfi_def_cfa_register 6
+ 218 0083 4883EC20 		subq	$32, %rsp
+ 219 0087 48897DE8 		movq	%rdi, -24(%rbp)
+ 228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     rc_t rc;
+ 229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     /* Check parameter first */
+ 231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     if (new_obj == NULL)
+ 220              		.loc 1 231 0
+ 221 008b 48837DE8 		cmpq	$0, -24(%rbp)
+ 221      00
+ 222 0090 7522     		jne	.L18
+ 232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****         rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+ 223              		.loc 1 232 0
+ 224 0092 B9E80000 		movl	$232, %ecx
+ 224      00
+ 225 0097 488D1500 		leaq	__func__.6558(%rip), %rdx
+ 225      000000
+ 226 009e 488D3500 		leaq	.LC0(%rip), %rsi
+ 226      000000
+ 227 00a5 BF878F00 		movl	$-2030006393, %edi
+ 227      87
+ 228 00aa E8000000 		call	SetRCFileFuncLine at PLT
+ 228      00
+ 229 00af 8945FC   		movl	%eax, -4(%rbp)
+ 230 00b2 EB53     		jmp	.L19
+ 231              	.L18:
+ 233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     else
+ 235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     {
+ 236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****         *new_obj = NULL;
+ 232              		.loc 1 236 0
+ 233 00b4 488B45E8 		movq	-24(%rbp), %rax
+ 234 00b8 48C70000 		movq	$0, (%rax)
+ 234      000000
+ 237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****         /* check for processor support of this flavor */
+ 239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****         if ( ! NULLBCMEMBER(ProcessorSupport)())
+ 235              		.loc 1 239 0
+ 236 00bf B8000000 		movl	$0, %eax
+ 236      00
+ 237 00c4 E8ABFFFF 		call	KNullBlockCipherVecProcessorSupport
+ 237      FF
+ 238 00c9 83F001   		xorl	$1, %eax
+
GAS LISTING /tmp/ccIvKeEl.s 			page 10
+
+
+ 239 00cc 84C0     		testb	%al, %al
+ 240 00ce 7422     		je	.L20
+ 240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****             rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+ 241              		.loc 1 240 0
+ 242 00d0 B9F00000 		movl	$240, %ecx
+ 242      00
+ 243 00d5 488D1500 		leaq	__func__.6558(%rip), %rdx
+ 243      000000
+ 244 00dc 488D3500 		leaq	.LC0(%rip), %rsi
+ 244      000000
+ 245 00e3 BF038500 		movl	$-2030009085, %edi
+ 245      87
+ 246 00e8 E8000000 		call	SetRCFileFuncLine at PLT
+ 246      00
+ 247 00ed 8945FC   		movl	%eax, -4(%rbp)
+ 248 00f0 EB15     		jmp	.L19
+ 249              	.L20:
+ 241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****         else
+ 243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****         {
+ 244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****             rc = 0;
+ 250              		.loc 1 244 0
+ 251 00f2 C745FC00 		movl	$0, -4(%rbp)
+ 251      000000
+ 245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****             *new_obj = (KBlockCipher*)&(NULLBCMEMBER(_vt_));
+ 252              		.loc 1 245 0
+ 253 00f9 488D1500 		leaq	KNullBlockCipherVec_vt_(%rip), %rdx
+ 253      000000
+ 254 0100 488B45E8 		movq	-24(%rbp), %rax
+ 255 0104 488910   		movq	%rdx, (%rax)
+ 256              	.L19:
+ 246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****         }
+ 247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     }
+ 248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     return rc;
+ 257              		.loc 1 248 0
+ 258 0107 8B45FC   		movl	-4(%rbp), %eax
+ 249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 259              		.loc 1 249 0
+ 260 010a C9       		leave
+ 261 010b C3       		ret
+ 262              		.cfi_endproc
+ 263              	.LFE521:
+ 264              		.size	KNullBlockCipherVecMake, .-KNullBlockCipherVecMake
+ 265              		.section	.rodata
+ 266 0047 00000000 		.align 16
+ 266      00000000 
+ 266      00
+ 267              		.type	__func__.6558, @object
+ 268              		.size	__func__.6558, 24
+ 269              	__func__.6558:
+ 270 0050 4B4E756C 		.string	"KNullBlockCipherVecMake"
+ 270      6C426C6F 
+ 270      636B4369 
+ 270      70686572 
+ 270      5665634D 
+ 271 0068 00000000 		.align 16
+ 271      00000000 
+
GAS LISTING /tmp/ccIvKeEl.s 			page 11
+
+
+ 272              		.type	__PRETTY_FUNCTION__.6557, @object
+ 273              		.size	__PRETTY_FUNCTION__.6557, 24
+ 274              	__PRETTY_FUNCTION__.6557:
+ 275 0070 4B4E756C 		.string	"KNullBlockCipherVecMake"
+ 275      6C426C6F 
+ 275      636B4369 
+ 275      70686572 
+ 275      5665634D 
+ 276              		.text
+ 277              	.Letext0:
+ 278              		.section	.debug_loc,"", at progbits
+ 279              	.Ldebug_loc0:
+ 280              	.LLST0:
+ 281 0000 00000000 		.quad	.LFB513-.Ltext0
+ 281      00000000 
+ 282 0008 01000000 		.quad	.LCFI0-.Ltext0
+ 282      00000000 
+ 283 0010 0200     		.value	0x2
+ 284 0012 77       		.byte	0x77
+ 285 0013 08       		.sleb128 8
+ 286 0014 01000000 		.quad	.LCFI0-.Ltext0
+ 286      00000000 
+ 287 001c 04000000 		.quad	.LCFI1-.Ltext0
+ 287      00000000 
+ 288 0024 0200     		.value	0x2
+ 289 0026 77       		.byte	0x77
+ 290 0027 10       		.sleb128 16
+ 291 0028 04000000 		.quad	.LCFI1-.Ltext0
+ 291      00000000 
+ 292 0030 0A000000 		.quad	.LFE513-.Ltext0
+ 292      00000000 
+ 293 0038 0200     		.value	0x2
+ 294 003a 76       		.byte	0x76
+ 295 003b 10       		.sleb128 16
+ 296 003c 00000000 		.quad	0x0
+ 296      00000000 
+ 297 0044 00000000 		.quad	0x0
+ 297      00000000 
+ 298              	.LLST1:
+ 299 004c 0A000000 		.quad	.LFB514-.Ltext0
+ 299      00000000 
+ 300 0054 0B000000 		.quad	.LCFI2-.Ltext0
+ 300      00000000 
+ 301 005c 0200     		.value	0x2
+ 302 005e 77       		.byte	0x77
+ 303 005f 08       		.sleb128 8
+ 304 0060 0B000000 		.quad	.LCFI2-.Ltext0
+ 304      00000000 
+ 305 0068 0E000000 		.quad	.LCFI3-.Ltext0
+ 305      00000000 
+ 306 0070 0200     		.value	0x2
+ 307 0072 77       		.byte	0x77
+ 308 0073 10       		.sleb128 16
+ 309 0074 0E000000 		.quad	.LCFI3-.Ltext0
+ 309      00000000 
+ 310 007c 15000000 		.quad	.LFE514-.Ltext0
+ 310      00000000 
+
GAS LISTING /tmp/ccIvKeEl.s 			page 12
+
+
+ 311 0084 0200     		.value	0x2
+ 312 0086 76       		.byte	0x76
+ 313 0087 10       		.sleb128 16
+ 314 0088 00000000 		.quad	0x0
+ 314      00000000 
+ 315 0090 00000000 		.quad	0x0
+ 315      00000000 
+ 316              	.LLST2:
+ 317 0098 15000000 		.quad	.LFB515-.Ltext0
+ 317      00000000 
+ 318 00a0 16000000 		.quad	.LCFI4-.Ltext0
+ 318      00000000 
+ 319 00a8 0200     		.value	0x2
+ 320 00aa 77       		.byte	0x77
+ 321 00ab 08       		.sleb128 8
+ 322 00ac 16000000 		.quad	.LCFI4-.Ltext0
+ 322      00000000 
+ 323 00b4 19000000 		.quad	.LCFI5-.Ltext0
+ 323      00000000 
+ 324 00bc 0200     		.value	0x2
+ 325 00be 77       		.byte	0x77
+ 326 00bf 10       		.sleb128 16
+ 327 00c0 19000000 		.quad	.LCFI5-.Ltext0
+ 327      00000000 
+ 328 00c8 20000000 		.quad	.LFE515-.Ltext0
+ 328      00000000 
+ 329 00d0 0200     		.value	0x2
+ 330 00d2 76       		.byte	0x76
+ 331 00d3 10       		.sleb128 16
+ 332 00d4 00000000 		.quad	0x0
+ 332      00000000 
+ 333 00dc 00000000 		.quad	0x0
+ 333      00000000 
+ 334              	.LLST3:
+ 335 00e4 20000000 		.quad	.LFB516-.Ltext0
+ 335      00000000 
+ 336 00ec 21000000 		.quad	.LCFI6-.Ltext0
+ 336      00000000 
+ 337 00f4 0200     		.value	0x2
+ 338 00f6 77       		.byte	0x77
+ 339 00f7 08       		.sleb128 8
+ 340 00f8 21000000 		.quad	.LCFI6-.Ltext0
+ 340      00000000 
+ 341 0100 24000000 		.quad	.LCFI7-.Ltext0
+ 341      00000000 
+ 342 0108 0200     		.value	0x2
+ 343 010a 77       		.byte	0x77
+ 344 010b 10       		.sleb128 16
+ 345 010c 24000000 		.quad	.LCFI7-.Ltext0
+ 345      00000000 
+ 346 0114 36000000 		.quad	.LFE516-.Ltext0
+ 346      00000000 
+ 347 011c 0200     		.value	0x2
+ 348 011e 76       		.byte	0x76
+ 349 011f 10       		.sleb128 16
+ 350 0120 00000000 		.quad	0x0
+ 350      00000000 
+
GAS LISTING /tmp/ccIvKeEl.s 			page 13
+
+
+ 351 0128 00000000 		.quad	0x0
+ 351      00000000 
+ 352              	.LLST4:
+ 353 0130 36000000 		.quad	.LFB517-.Ltext0
+ 353      00000000 
+ 354 0138 37000000 		.quad	.LCFI8-.Ltext0
+ 354      00000000 
+ 355 0140 0200     		.value	0x2
+ 356 0142 77       		.byte	0x77
+ 357 0143 08       		.sleb128 8
+ 358 0144 37000000 		.quad	.LCFI8-.Ltext0
+ 358      00000000 
+ 359 014c 3A000000 		.quad	.LCFI9-.Ltext0
+ 359      00000000 
+ 360 0154 0200     		.value	0x2
+ 361 0156 77       		.byte	0x77
+ 362 0157 10       		.sleb128 16
+ 363 0158 3A000000 		.quad	.LCFI9-.Ltext0
+ 363      00000000 
+ 364 0160 4C000000 		.quad	.LFE517-.Ltext0
+ 364      00000000 
+ 365 0168 0200     		.value	0x2
+ 366 016a 76       		.byte	0x76
+ 367 016b 10       		.sleb128 16
+ 368 016c 00000000 		.quad	0x0
+ 368      00000000 
+ 369 0174 00000000 		.quad	0x0
+ 369      00000000 
+ 370              	.LLST5:
+ 371 017c 4C000000 		.quad	.LFB518-.Ltext0
+ 371      00000000 
+ 372 0184 4D000000 		.quad	.LCFI10-.Ltext0
+ 372      00000000 
+ 373 018c 0200     		.value	0x2
+ 374 018e 77       		.byte	0x77
+ 375 018f 08       		.sleb128 8
+ 376 0190 4D000000 		.quad	.LCFI10-.Ltext0
+ 376      00000000 
+ 377 0198 50000000 		.quad	.LCFI11-.Ltext0
+ 377      00000000 
+ 378 01a0 0200     		.value	0x2
+ 379 01a2 77       		.byte	0x77
+ 380 01a3 10       		.sleb128 16
+ 381 01a4 50000000 		.quad	.LCFI11-.Ltext0
+ 381      00000000 
+ 382 01ac 60000000 		.quad	.LFE518-.Ltext0
+ 382      00000000 
+ 383 01b4 0200     		.value	0x2
+ 384 01b6 76       		.byte	0x76
+ 385 01b7 10       		.sleb128 16
+ 386 01b8 00000000 		.quad	0x0
+ 386      00000000 
+ 387 01c0 00000000 		.quad	0x0
+ 387      00000000 
+ 388              	.LLST6:
+ 389 01c8 60000000 		.quad	.LFB519-.Ltext0
+ 389      00000000 
+
GAS LISTING /tmp/ccIvKeEl.s 			page 14
+
+
+ 390 01d0 61000000 		.quad	.LCFI12-.Ltext0
+ 390      00000000 
+ 391 01d8 0200     		.value	0x2
+ 392 01da 77       		.byte	0x77
+ 393 01db 08       		.sleb128 8
+ 394 01dc 61000000 		.quad	.LCFI12-.Ltext0
+ 394      00000000 
+ 395 01e4 64000000 		.quad	.LCFI13-.Ltext0
+ 395      00000000 
+ 396 01ec 0200     		.value	0x2
+ 397 01ee 77       		.byte	0x77
+ 398 01ef 10       		.sleb128 16
+ 399 01f0 64000000 		.quad	.LCFI13-.Ltext0
+ 399      00000000 
+ 400 01f8 74000000 		.quad	.LFE519-.Ltext0
+ 400      00000000 
+ 401 0200 0200     		.value	0x2
+ 402 0202 76       		.byte	0x76
+ 403 0203 10       		.sleb128 16
+ 404 0204 00000000 		.quad	0x0
+ 404      00000000 
+ 405 020c 00000000 		.quad	0x0
+ 405      00000000 
+ 406              	.LLST7:
+ 407 0214 74000000 		.quad	.LFB520-.Ltext0
+ 407      00000000 
+ 408 021c 75000000 		.quad	.LCFI14-.Ltext0
+ 408      00000000 
+ 409 0224 0200     		.value	0x2
+ 410 0226 77       		.byte	0x77
+ 411 0227 08       		.sleb128 8
+ 412 0228 75000000 		.quad	.LCFI14-.Ltext0
+ 412      00000000 
+ 413 0230 78000000 		.quad	.LCFI15-.Ltext0
+ 413      00000000 
+ 414 0238 0200     		.value	0x2
+ 415 023a 77       		.byte	0x77
+ 416 023b 10       		.sleb128 16
+ 417 023c 78000000 		.quad	.LCFI15-.Ltext0
+ 417      00000000 
+ 418 0244 7F000000 		.quad	.LFE520-.Ltext0
+ 418      00000000 
+ 419 024c 0200     		.value	0x2
+ 420 024e 76       		.byte	0x76
+ 421 024f 10       		.sleb128 16
+ 422 0250 00000000 		.quad	0x0
+ 422      00000000 
+ 423 0258 00000000 		.quad	0x0
+ 423      00000000 
+ 424              	.LLST8:
+ 425 0260 7F000000 		.quad	.LFB521-.Ltext0
+ 425      00000000 
+ 426 0268 80000000 		.quad	.LCFI16-.Ltext0
+ 426      00000000 
+ 427 0270 0200     		.value	0x2
+ 428 0272 77       		.byte	0x77
+ 429 0273 08       		.sleb128 8
+
GAS LISTING /tmp/ccIvKeEl.s 			page 15
+
+
+ 430 0274 80000000 		.quad	.LCFI16-.Ltext0
+ 430      00000000 
+ 431 027c 83000000 		.quad	.LCFI17-.Ltext0
+ 431      00000000 
+ 432 0284 0200     		.value	0x2
+ 433 0286 77       		.byte	0x77
+ 434 0287 10       		.sleb128 16
+ 435 0288 83000000 		.quad	.LCFI17-.Ltext0
+ 435      00000000 
+ 436 0290 0C010000 		.quad	.LFE521-.Ltext0
+ 436      00000000 
+ 437 0298 0200     		.value	0x2
+ 438 029a 76       		.byte	0x76
+ 439 029b 10       		.sleb128 16
+ 440 029c 00000000 		.quad	0x0
+ 440      00000000 
+ 441 02a4 00000000 		.quad	0x0
+ 441      00000000 
+ 442              		.file 2 "/usr/include/stdint.h"
+ 443              		.file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+ 444              		.file 4 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+ 445              		.file 5 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 446              		.file 6 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-priv.h"
+ 447              		.file 7 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+ 448              		.file 8 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/debug.h"
+ 449              		.section	.debug_info
+ 450 0000 6C0C0000 		.long	0xc6c
+ 451 0004 0200     		.value	0x2
+ 452 0006 00000000 		.long	.Ldebug_abbrev0
+ 453 000a 08       		.byte	0x8
+ 454 000b 01       		.uleb128 0x1
+ 455 000c 00000000 		.long	.LASF317
+ 456 0010 01       		.byte	0x1
+ 457 0011 00000000 		.long	.LASF318
+ 458 0015 00000000 		.long	.LASF319
+ 459 0019 00000000 		.quad	.Ltext0
+ 459      00000000 
+ 460 0021 00000000 		.quad	.Letext0
+ 460      00000000 
+ 461 0029 00000000 		.long	.Ldebug_line0
+ 462 002d 02       		.uleb128 0x2
+ 463 002e 01       		.byte	0x1
+ 464 002f 06       		.byte	0x6
+ 465 0030 00000000 		.long	.LASF0
+ 466 0034 02       		.uleb128 0x2
+ 467 0035 02       		.byte	0x2
+ 468 0036 05       		.byte	0x5
+ 469 0037 00000000 		.long	.LASF1
+ 470 003b 03       		.uleb128 0x3
+ 471 003c 04       		.byte	0x4
+ 472 003d 05       		.byte	0x5
+ 473 003e 696E7400 		.string	"int"
+ 474 0042 02       		.uleb128 0x2
+ 475 0043 08       		.byte	0x8
+ 476 0044 05       		.byte	0x5
+ 477 0045 00000000 		.long	.LASF2
+ 478 0049 04       		.uleb128 0x4
+
GAS LISTING /tmp/ccIvKeEl.s 			page 16
+
+
+ 479 004a 00000000 		.long	.LASF5
+ 480 004e 02       		.byte	0x2
+ 481 004f 31       		.byte	0x31
+ 482 0050 54000000 		.long	0x54
+ 483 0054 02       		.uleb128 0x2
+ 484 0055 01       		.byte	0x1
+ 485 0056 08       		.byte	0x8
+ 486 0057 00000000 		.long	.LASF3
+ 487 005b 02       		.uleb128 0x2
+ 488 005c 02       		.byte	0x2
+ 489 005d 07       		.byte	0x7
+ 490 005e 00000000 		.long	.LASF4
+ 491 0062 04       		.uleb128 0x4
+ 492 0063 00000000 		.long	.LASF6
+ 493 0067 02       		.byte	0x2
+ 494 0068 34       		.byte	0x34
+ 495 0069 6D000000 		.long	0x6d
+ 496 006d 02       		.uleb128 0x2
+ 497 006e 04       		.byte	0x4
+ 498 006f 07       		.byte	0x7
+ 499 0070 00000000 		.long	.LASF7
+ 500 0074 02       		.uleb128 0x2
+ 501 0075 08       		.byte	0x8
+ 502 0076 07       		.byte	0x7
+ 503 0077 00000000 		.long	.LASF8
+ 504 007b 04       		.uleb128 0x4
+ 505 007c 00000000 		.long	.LASF9
+ 506 0080 03       		.byte	0x3
+ 507 0081 30       		.byte	0x30
+ 508 0082 62000000 		.long	0x62
+ 509 0086 05       		.uleb128 0x5
+ 510 0087 08       		.byte	0x8
+ 511 0088 06       		.uleb128 0x6
+ 512 0089 08       		.byte	0x8
+ 513 008a 07       		.byte	0x7
+ 514 008b 07       		.uleb128 0x7
+ 515 008c 08       		.byte	0x8
+ 516 008d 91000000 		.long	0x91
+ 517 0091 08       		.uleb128 0x8
+ 518 0092 96000000 		.long	0x96
+ 519 0096 02       		.uleb128 0x2
+ 520 0097 01       		.byte	0x1
+ 521 0098 06       		.byte	0x6
+ 522 0099 00000000 		.long	.LASF10
+ 523 009d 09       		.uleb128 0x9
+ 524 009e 04       		.byte	0x4
+ 525 009f 08       		.byte	0x8
+ 526 00a0 D6       		.byte	0xd6
+ 527 00a1 1E010000 		.long	0x11e
+ 528 00a5 0A       		.uleb128 0xa
+ 529 00a6 00000000 		.long	.LASF11
+ 530 00aa 7F       		.sleb128 -1
+ 531 00ab 0A       		.uleb128 0xa
+ 532 00ac 00000000 		.long	.LASF12
+ 533 00b0 00       		.sleb128 0
+ 534 00b1 0A       		.uleb128 0xa
+ 535 00b2 00000000 		.long	.LASF13
+
GAS LISTING /tmp/ccIvKeEl.s 			page 17
+
+
+ 536 00b6 01       		.sleb128 1
+ 537 00b7 0A       		.uleb128 0xa
+ 538 00b8 00000000 		.long	.LASF14
+ 539 00bc 02       		.sleb128 2
+ 540 00bd 0A       		.uleb128 0xa
+ 541 00be 00000000 		.long	.LASF15
+ 542 00c2 03       		.sleb128 3
+ 543 00c3 0A       		.uleb128 0xa
+ 544 00c4 00000000 		.long	.LASF16
+ 545 00c8 04       		.sleb128 4
+ 546 00c9 0A       		.uleb128 0xa
+ 547 00ca 00000000 		.long	.LASF17
+ 548 00ce 05       		.sleb128 5
+ 549 00cf 0A       		.uleb128 0xa
+ 550 00d0 00000000 		.long	.LASF18
+ 551 00d4 06       		.sleb128 6
+ 552 00d5 0A       		.uleb128 0xa
+ 553 00d6 00000000 		.long	.LASF19
+ 554 00da 07       		.sleb128 7
+ 555 00db 0A       		.uleb128 0xa
+ 556 00dc 00000000 		.long	.LASF20
+ 557 00e0 08       		.sleb128 8
+ 558 00e1 0A       		.uleb128 0xa
+ 559 00e2 00000000 		.long	.LASF21
+ 560 00e6 09       		.sleb128 9
+ 561 00e7 0A       		.uleb128 0xa
+ 562 00e8 00000000 		.long	.LASF22
+ 563 00ec 0A       		.sleb128 10
+ 564 00ed 0A       		.uleb128 0xa
+ 565 00ee 00000000 		.long	.LASF23
+ 566 00f2 0B       		.sleb128 11
+ 567 00f3 0A       		.uleb128 0xa
+ 568 00f4 00000000 		.long	.LASF24
+ 569 00f8 0C       		.sleb128 12
+ 570 00f9 0A       		.uleb128 0xa
+ 571 00fa 00000000 		.long	.LASF25
+ 572 00fe 0D       		.sleb128 13
+ 573 00ff 0A       		.uleb128 0xa
+ 574 0100 00000000 		.long	.LASF26
+ 575 0104 0E       		.sleb128 14
+ 576 0105 0A       		.uleb128 0xa
+ 577 0106 00000000 		.long	.LASF27
+ 578 010a 0F       		.sleb128 15
+ 579 010b 0A       		.uleb128 0xa
+ 580 010c 00000000 		.long	.LASF28
+ 581 0110 10       		.sleb128 16
+ 582 0111 0A       		.uleb128 0xa
+ 583 0112 00000000 		.long	.LASF29
+ 584 0116 11       		.sleb128 17
+ 585 0117 0A       		.uleb128 0xa
+ 586 0118 00000000 		.long	.LASF30
+ 587 011c 12       		.sleb128 18
+ 588 011d 00       		.byte	0x0
+ 589 011e 07       		.uleb128 0x7
+ 590 011f 08       		.byte	0x8
+ 591 0120 24010000 		.long	0x124
+ 592 0124 0B       		.uleb128 0xb
+
GAS LISTING /tmp/ccIvKeEl.s 			page 18
+
+
+ 593 0125 02       		.uleb128 0x2
+ 594 0126 08       		.byte	0x8
+ 595 0127 05       		.byte	0x5
+ 596 0128 00000000 		.long	.LASF31
+ 597 012c 02       		.uleb128 0x2
+ 598 012d 04       		.byte	0x4
+ 599 012e 04       		.byte	0x4
+ 600 012f 00000000 		.long	.LASF32
+ 601 0133 07       		.uleb128 0x7
+ 602 0134 08       		.byte	0x8
+ 603 0135 96000000 		.long	0x96
+ 604 0139 02       		.uleb128 0x2
+ 605 013a 08       		.byte	0x8
+ 606 013b 07       		.byte	0x7
+ 607 013c 00000000 		.long	.LASF33
+ 608 0140 02       		.uleb128 0x2
+ 609 0141 08       		.byte	0x8
+ 610 0142 04       		.byte	0x4
+ 611 0143 00000000 		.long	.LASF34
+ 612 0147 04       		.uleb128 0x4
+ 613 0148 00000000 		.long	.LASF35
+ 614 014c 04       		.byte	0x4
+ 615 014d 26       		.byte	0x26
+ 616 014e 52010000 		.long	0x152
+ 617 0152 0C       		.uleb128 0xc
+ 618 0153 01       		.byte	0x1
+ 619 0154 49000000 		.long	0x49
+ 620 0158 63010000 		.long	0x163
+ 621 015c 0D       		.uleb128 0xd
+ 622 015d 88000000 		.long	0x88
+ 623 0161 0F       		.byte	0xf
+ 624 0162 00       		.byte	0x0
+ 625 0163 04       		.uleb128 0x4
+ 626 0164 00000000 		.long	.LASF36
+ 627 0168 05       		.byte	0x5
+ 628 0169 3B       		.byte	0x3b
+ 629 016a 47010000 		.long	0x147
+ 630 016e 04       		.uleb128 0x4
+ 631 016f 00000000 		.long	.LASF37
+ 632 0173 05       		.byte	0x5
+ 633 0174 43       		.byte	0x43
+ 634 0175 79010000 		.long	0x179
+ 635 0179 0E       		.uleb128 0xe
+ 636 017a 00000000 		.long	.LASF37
+ 637 017e 08       		.byte	0x8
+ 638 017f 05       		.byte	0x5
+ 639 0180 43       		.byte	0x43
+ 640 0181 A2010000 		.long	0x1a2
+ 641 0185 0F       		.uleb128 0xf
+ 642 0186 6D616A00 		.string	"maj"
+ 643 018a 05       		.byte	0x5
+ 644 018b 46       		.byte	0x46
+ 645 018c 62000000 		.long	0x62
+ 646 0190 02       		.byte	0x2
+ 647 0191 23       		.byte	0x23
+ 648 0192 00       		.uleb128 0x0
+ 649 0193 0F       		.uleb128 0xf
+
GAS LISTING /tmp/ccIvKeEl.s 			page 19
+
+
+ 650 0194 6D696E00 		.string	"min"
+ 651 0198 05       		.byte	0x5
+ 652 0199 47       		.byte	0x47
+ 653 019a 62000000 		.long	0x62
+ 654 019e 02       		.byte	0x2
+ 655 019f 23       		.byte	0x23
+ 656 01a0 04       		.uleb128 0x4
+ 657 01a1 00       		.byte	0x0
+ 658 01a2 04       		.uleb128 0x4
+ 659 01a3 00000000 		.long	.LASF38
+ 660 01a7 05       		.byte	0x5
+ 661 01a8 52       		.byte	0x52
+ 662 01a9 AD010000 		.long	0x1ad
+ 663 01ad 0E       		.uleb128 0xe
+ 664 01ae 00000000 		.long	.LASF38
+ 665 01b2 40       		.byte	0x40
+ 666 01b3 05       		.byte	0x5
+ 667 01b4 52       		.byte	0x52
+ 668 01b5 2A020000 		.long	0x22a
+ 669 01b9 10       		.uleb128 0x10
+ 670 01ba 00000000 		.long	.LASF39
+ 671 01be 05       		.byte	0x5
+ 672 01bf 5E       		.byte	0x5e
+ 673 01c0 6E010000 		.long	0x16e
+ 674 01c4 02       		.byte	0x2
+ 675 01c5 23       		.byte	0x23
+ 676 01c6 00       		.uleb128 0x0
+ 677 01c7 10       		.uleb128 0x10
+ 678 01c8 00000000 		.long	.LASF40
+ 679 01cc 05       		.byte	0x5
+ 680 01cd 63       		.byte	0x63
+ 681 01ce 6E020000 		.long	0x26e
+ 682 01d2 02       		.byte	0x2
+ 683 01d3 23       		.byte	0x23
+ 684 01d4 08       		.uleb128 0x8
+ 685 01d5 10       		.uleb128 0x10
+ 686 01d6 00000000 		.long	.LASF41
+ 687 01da 05       		.byte	0x5
+ 688 01db 65       		.byte	0x65
+ 689 01dc 7F020000 		.long	0x27f
+ 690 01e0 02       		.byte	0x2
+ 691 01e1 23       		.byte	0x23
+ 692 01e2 10       		.uleb128 0x10
+ 693 01e3 10       		.uleb128 0x10
+ 694 01e4 00000000 		.long	.LASF42
+ 695 01e8 05       		.byte	0x5
+ 696 01e9 67       		.byte	0x67
+ 697 01ea 7F020000 		.long	0x27f
+ 698 01ee 02       		.byte	0x2
+ 699 01ef 23       		.byte	0x23
+ 700 01f0 18       		.uleb128 0x18
+ 701 01f1 10       		.uleb128 0x10
+ 702 01f2 00000000 		.long	.LASF43
+ 703 01f6 05       		.byte	0x5
+ 704 01f7 69       		.byte	0x69
+ 705 01f8 9F020000 		.long	0x29f
+ 706 01fc 02       		.byte	0x2
+
GAS LISTING /tmp/ccIvKeEl.s 			page 20
+
+
+ 707 01fd 23       		.byte	0x23
+ 708 01fe 20       		.uleb128 0x20
+ 709 01ff 10       		.uleb128 0x10
+ 710 0200 00000000 		.long	.LASF44
+ 711 0204 05       		.byte	0x5
+ 712 0205 6D       		.byte	0x6d
+ 713 0206 9F020000 		.long	0x29f
+ 714 020a 02       		.byte	0x2
+ 715 020b 23       		.byte	0x23
+ 716 020c 28       		.uleb128 0x28
+ 717 020d 10       		.uleb128 0x10
+ 718 020e 00000000 		.long	.LASF45
+ 719 0212 05       		.byte	0x5
+ 720 0213 71       		.byte	0x71
+ 721 0214 BB020000 		.long	0x2bb
+ 722 0218 02       		.byte	0x2
+ 723 0219 23       		.byte	0x23
+ 724 021a 30       		.uleb128 0x30
+ 725 021b 10       		.uleb128 0x10
+ 726 021c 00000000 		.long	.LASF46
+ 727 0220 05       		.byte	0x5
+ 728 0221 75       		.byte	0x75
+ 729 0222 BB020000 		.long	0x2bb
+ 730 0226 02       		.byte	0x2
+ 731 0227 23       		.byte	0x23
+ 732 0228 38       		.uleb128 0x38
+ 733 0229 00       		.byte	0x0
+ 734 022a 04       		.uleb128 0x4
+ 735 022b 00000000 		.long	.LASF47
+ 736 022f 05       		.byte	0x5
+ 737 0230 53       		.byte	0x53
+ 738 0231 35020000 		.long	0x235
+ 739 0235 11       		.uleb128 0x11
+ 740 0236 00000000 		.long	.LASF47
+ 741 023a 40       		.byte	0x40
+ 742 023b 05       		.byte	0x5
+ 743 023c 53       		.byte	0x53
+ 744 023d 57020000 		.long	0x257
+ 745 0241 12       		.uleb128 0x12
+ 746 0242 00000000 		.long	.LASF39
+ 747 0246 05       		.byte	0x5
+ 748 0247 7F       		.byte	0x7f
+ 749 0248 6E010000 		.long	0x16e
+ 750 024c 13       		.uleb128 0x13
+ 751 024d 763100   		.string	"v1"
+ 752 0250 05       		.byte	0x5
+ 753 0251 80       		.byte	0x80
+ 754 0252 A2010000 		.long	0x1a2
+ 755 0256 00       		.byte	0x0
+ 756 0257 14       		.uleb128 0x14
+ 757 0258 01       		.byte	0x1
+ 758 0259 63020000 		.long	0x263
+ 759 025d 15       		.uleb128 0x15
+ 760 025e 63020000 		.long	0x263
+ 761 0262 00       		.byte	0x0
+ 762 0263 07       		.uleb128 0x7
+ 763 0264 08       		.byte	0x8
+
GAS LISTING /tmp/ccIvKeEl.s 			page 21
+
+
+ 764 0265 69020000 		.long	0x269
+ 765 0269 08       		.uleb128 0x8
+ 766 026a 2A020000 		.long	0x22a
+ 767 026e 07       		.uleb128 0x7
+ 768 026f 08       		.byte	0x8
+ 769 0270 57020000 		.long	0x257
+ 770 0274 16       		.uleb128 0x16
+ 771 0275 62000000 		.long	0x62
+ 772 0279 7F020000 		.long	0x27f
+ 773 027d 17       		.uleb128 0x17
+ 774 027e 00       		.byte	0x0
+ 775 027f 07       		.uleb128 0x7
+ 776 0280 08       		.byte	0x8
+ 777 0281 74020000 		.long	0x274
+ 778 0285 18       		.uleb128 0x18
+ 779 0286 01       		.byte	0x1
+ 780 0287 7B000000 		.long	0x7b
+ 781 028b 9F020000 		.long	0x29f
+ 782 028f 15       		.uleb128 0x15
+ 783 0290 86000000 		.long	0x86
+ 784 0294 15       		.uleb128 0x15
+ 785 0295 8B000000 		.long	0x8b
+ 786 0299 15       		.uleb128 0x15
+ 787 029a 62000000 		.long	0x62
+ 788 029e 00       		.byte	0x0
+ 789 029f 07       		.uleb128 0x7
+ 790 02a0 08       		.byte	0x8
+ 791 02a1 85020000 		.long	0x285
+ 792 02a5 14       		.uleb128 0x14
+ 793 02a6 01       		.byte	0x1
+ 794 02a7 BB020000 		.long	0x2bb
+ 795 02ab 15       		.uleb128 0x15
+ 796 02ac 8B000000 		.long	0x8b
+ 797 02b0 15       		.uleb128 0x15
+ 798 02b1 33010000 		.long	0x133
+ 799 02b5 15       		.uleb128 0x15
+ 800 02b6 1E010000 		.long	0x11e
+ 801 02ba 00       		.byte	0x0
+ 802 02bb 07       		.uleb128 0x7
+ 803 02bc 08       		.byte	0x8
+ 804 02bd A5020000 		.long	0x2a5
+ 805 02c1 04       		.uleb128 0x4
+ 806 02c2 00000000 		.long	.LASF48
+ 807 02c6 05       		.byte	0x5
+ 808 02c7 84       		.byte	0x84
+ 809 02c8 CC020000 		.long	0x2cc
+ 810 02cc 0E       		.uleb128 0xe
+ 811 02cd 00000000 		.long	.LASF48
+ 812 02d1 40       		.byte	0x40
+ 813 02d2 05       		.byte	0x5
+ 814 02d3 84       		.byte	0x84
+ 815 02d4 49030000 		.long	0x349
+ 816 02d8 10       		.uleb128 0x10
+ 817 02d9 00000000 		.long	.LASF39
+ 818 02dd 05       		.byte	0x5
+ 819 02de 90       		.byte	0x90
+ 820 02df 6E010000 		.long	0x16e
+
GAS LISTING /tmp/ccIvKeEl.s 			page 22
+
+
+ 821 02e3 02       		.byte	0x2
+ 822 02e4 23       		.byte	0x23
+ 823 02e5 00       		.uleb128 0x0
+ 824 02e6 10       		.uleb128 0x10
+ 825 02e7 00000000 		.long	.LASF40
+ 826 02eb 05       		.byte	0x5
+ 827 02ec 95       		.byte	0x95
+ 828 02ed 8D030000 		.long	0x38d
+ 829 02f1 02       		.byte	0x2
+ 830 02f2 23       		.byte	0x23
+ 831 02f3 08       		.uleb128 0x8
+ 832 02f4 10       		.uleb128 0x10
+ 833 02f5 00000000 		.long	.LASF41
+ 834 02f9 05       		.byte	0x5
+ 835 02fa 97       		.byte	0x97
+ 836 02fb 7F020000 		.long	0x27f
+ 837 02ff 02       		.byte	0x2
+ 838 0300 23       		.byte	0x23
+ 839 0301 10       		.uleb128 0x10
+ 840 0302 10       		.uleb128 0x10
+ 841 0303 00000000 		.long	.LASF42
+ 842 0307 05       		.byte	0x5
+ 843 0308 99       		.byte	0x99
+ 844 0309 7F020000 		.long	0x27f
+ 845 030d 02       		.byte	0x2
+ 846 030e 23       		.byte	0x23
+ 847 030f 18       		.uleb128 0x18
+ 848 0310 10       		.uleb128 0x10
+ 849 0311 00000000 		.long	.LASF43
+ 850 0315 05       		.byte	0x5
+ 851 0316 9B       		.byte	0x9b
+ 852 0317 9F020000 		.long	0x29f
+ 853 031b 02       		.byte	0x2
+ 854 031c 23       		.byte	0x23
+ 855 031d 20       		.uleb128 0x20
+ 856 031e 10       		.uleb128 0x10
+ 857 031f 00000000 		.long	.LASF44
+ 858 0323 05       		.byte	0x5
+ 859 0324 9F       		.byte	0x9f
+ 860 0325 9F020000 		.long	0x29f
+ 861 0329 02       		.byte	0x2
+ 862 032a 23       		.byte	0x23
+ 863 032b 28       		.uleb128 0x28
+ 864 032c 10       		.uleb128 0x10
+ 865 032d 00000000 		.long	.LASF45
+ 866 0331 05       		.byte	0x5
+ 867 0332 A3       		.byte	0xa3
+ 868 0333 A8030000 		.long	0x3a8
+ 869 0337 02       		.byte	0x2
+ 870 0338 23       		.byte	0x23
+ 871 0339 30       		.uleb128 0x30
+ 872 033a 10       		.uleb128 0x10
+ 873 033b 00000000 		.long	.LASF46
+ 874 033f 05       		.byte	0x5
+ 875 0340 A6       		.byte	0xa6
+ 876 0341 A8030000 		.long	0x3a8
+ 877 0345 02       		.byte	0x2
+
GAS LISTING /tmp/ccIvKeEl.s 			page 23
+
+
+ 878 0346 23       		.byte	0x23
+ 879 0347 38       		.uleb128 0x38
+ 880 0348 00       		.byte	0x0
+ 881 0349 04       		.uleb128 0x4
+ 882 034a 00000000 		.long	.LASF49
+ 883 034e 05       		.byte	0x5
+ 884 034f 85       		.byte	0x85
+ 885 0350 54030000 		.long	0x354
+ 886 0354 11       		.uleb128 0x11
+ 887 0355 00000000 		.long	.LASF49
+ 888 0359 40       		.byte	0x40
+ 889 035a 05       		.byte	0x5
+ 890 035b 85       		.byte	0x85
+ 891 035c 76030000 		.long	0x376
+ 892 0360 12       		.uleb128 0x12
+ 893 0361 00000000 		.long	.LASF39
+ 894 0365 05       		.byte	0x5
+ 895 0366 AF       		.byte	0xaf
+ 896 0367 6E010000 		.long	0x16e
+ 897 036b 13       		.uleb128 0x13
+ 898 036c 763100   		.string	"v1"
+ 899 036f 05       		.byte	0x5
+ 900 0370 B0       		.byte	0xb0
+ 901 0371 C1020000 		.long	0x2c1
+ 902 0375 00       		.byte	0x0
+ 903 0376 14       		.uleb128 0x14
+ 904 0377 01       		.byte	0x1
+ 905 0378 82030000 		.long	0x382
+ 906 037c 15       		.uleb128 0x15
+ 907 037d 82030000 		.long	0x382
+ 908 0381 00       		.byte	0x0
+ 909 0382 07       		.uleb128 0x7
+ 910 0383 08       		.byte	0x8
+ 911 0384 88030000 		.long	0x388
+ 912 0388 08       		.uleb128 0x8
+ 913 0389 49030000 		.long	0x349
+ 914 038d 07       		.uleb128 0x7
+ 915 038e 08       		.byte	0x8
+ 916 038f 76030000 		.long	0x376
+ 917 0393 18       		.uleb128 0x18
+ 918 0394 01       		.byte	0x1
+ 919 0395 63010000 		.long	0x163
+ 920 0399 A8030000 		.long	0x3a8
+ 921 039d 15       		.uleb128 0x15
+ 922 039e 63010000 		.long	0x163
+ 923 03a2 15       		.uleb128 0x15
+ 924 03a3 1E010000 		.long	0x11e
+ 925 03a7 00       		.byte	0x0
+ 926 03a8 07       		.uleb128 0x7
+ 927 03a9 08       		.byte	0x8
+ 928 03aa 93030000 		.long	0x393
+ 929 03ae 04       		.uleb128 0x4
+ 930 03af 00000000 		.long	.LASF50
+ 931 03b3 06       		.byte	0x6
+ 932 03b4 40       		.byte	0x40
+ 933 03b5 B9030000 		.long	0x3b9
+ 934 03b9 11       		.uleb128 0x11
+
GAS LISTING /tmp/ccIvKeEl.s 			page 24
+
+
+ 935 03ba 00000000 		.long	.LASF50
+ 936 03be 40       		.byte	0x40
+ 937 03bf 06       		.byte	0x6
+ 938 03c0 40       		.byte	0x40
+ 939 03c1 DC030000 		.long	0x3dc
+ 940 03c5 12       		.uleb128 0x12
+ 941 03c6 00000000 		.long	.LASF51
+ 942 03ca 06       		.byte	0x6
+ 943 03cb 43       		.byte	0x43
+ 944 03cc 2A020000 		.long	0x22a
+ 945 03d0 13       		.uleb128 0x13
+ 946 03d1 76656300 		.string	"vec"
+ 947 03d5 06       		.byte	0x6
+ 948 03d6 44       		.byte	0x44
+ 949 03d7 49030000 		.long	0x349
+ 950 03db 00       		.byte	0x0
+ 951 03dc 19       		.uleb128 0x19
+ 952 03dd 00000000 		.long	.LASF74
+ 953 03e1 04       		.byte	0x4
+ 954 03e2 07       		.byte	0x7
+ 955 03e3 5A       		.byte	0x5a
+ 956 03e4 6D040000 		.long	0x46d
+ 957 03e8 0A       		.uleb128 0xa
+ 958 03e9 00000000 		.long	.LASF52
+ 959 03ed 00       		.sleb128 0
+ 960 03ee 0A       		.uleb128 0xa
+ 961 03ef 00000000 		.long	.LASF53
+ 962 03f3 01       		.sleb128 1
+ 963 03f4 0A       		.uleb128 0xa
+ 964 03f5 00000000 		.long	.LASF54
+ 965 03f9 02       		.sleb128 2
+ 966 03fa 0A       		.uleb128 0xa
+ 967 03fb 00000000 		.long	.LASF55
+ 968 03ff 03       		.sleb128 3
+ 969 0400 0A       		.uleb128 0xa
+ 970 0401 00000000 		.long	.LASF56
+ 971 0405 04       		.sleb128 4
+ 972 0406 0A       		.uleb128 0xa
+ 973 0407 00000000 		.long	.LASF57
+ 974 040b 05       		.sleb128 5
+ 975 040c 0A       		.uleb128 0xa
+ 976 040d 00000000 		.long	.LASF58
+ 977 0411 06       		.sleb128 6
+ 978 0412 0A       		.uleb128 0xa
+ 979 0413 00000000 		.long	.LASF59
+ 980 0417 07       		.sleb128 7
+ 981 0418 0A       		.uleb128 0xa
+ 982 0419 00000000 		.long	.LASF60
+ 983 041d 08       		.sleb128 8
+ 984 041e 0A       		.uleb128 0xa
+ 985 041f 00000000 		.long	.LASF61
+ 986 0423 09       		.sleb128 9
+ 987 0424 0A       		.uleb128 0xa
+ 988 0425 00000000 		.long	.LASF62
+ 989 0429 0A       		.sleb128 10
+ 990 042a 0A       		.uleb128 0xa
+ 991 042b 00000000 		.long	.LASF63
+
GAS LISTING /tmp/ccIvKeEl.s 			page 25
+
+
+ 992 042f 0B       		.sleb128 11
+ 993 0430 0A       		.uleb128 0xa
+ 994 0431 00000000 		.long	.LASF64
+ 995 0435 0C       		.sleb128 12
+ 996 0436 0A       		.uleb128 0xa
+ 997 0437 00000000 		.long	.LASF65
+ 998 043b 0D       		.sleb128 13
+ 999 043c 0A       		.uleb128 0xa
+ 1000 043d 00000000 		.long	.LASF66
+ 1001 0441 0E       		.sleb128 14
+ 1002 0442 0A       		.uleb128 0xa
+ 1003 0443 00000000 		.long	.LASF67
+ 1004 0447 0E       		.sleb128 14
+ 1005 0448 0A       		.uleb128 0xa
+ 1006 0449 00000000 		.long	.LASF68
+ 1007 044d 0F       		.sleb128 15
+ 1008 044e 0A       		.uleb128 0xa
+ 1009 044f 00000000 		.long	.LASF69
+ 1010 0453 10       		.sleb128 16
+ 1011 0454 0A       		.uleb128 0xa
+ 1012 0455 00000000 		.long	.LASF70
+ 1013 0459 11       		.sleb128 17
+ 1014 045a 0A       		.uleb128 0xa
+ 1015 045b 00000000 		.long	.LASF71
+ 1016 045f 12       		.sleb128 18
+ 1017 0460 0A       		.uleb128 0xa
+ 1018 0461 00000000 		.long	.LASF72
+ 1019 0465 13       		.sleb128 19
+ 1020 0466 0A       		.uleb128 0xa
+ 1021 0467 00000000 		.long	.LASF73
+ 1022 046b 14       		.sleb128 20
+ 1023 046c 00       		.byte	0x0
+ 1024 046d 19       		.uleb128 0x19
+ 1025 046e 00000000 		.long	.LASF75
+ 1026 0472 04       		.byte	0x4
+ 1027 0473 07       		.byte	0x7
+ 1028 0474 77       		.byte	0x77
+ 1029 0475 F4050000 		.long	0x5f4
+ 1030 0479 0A       		.uleb128 0xa
+ 1031 047a 00000000 		.long	.LASF76
+ 1032 047e 00       		.sleb128 0
+ 1033 047f 0A       		.uleb128 0xa
+ 1034 0480 00000000 		.long	.LASF77
+ 1035 0484 01       		.sleb128 1
+ 1036 0485 0A       		.uleb128 0xa
+ 1037 0486 00000000 		.long	.LASF78
+ 1038 048a 02       		.sleb128 2
+ 1039 048b 0A       		.uleb128 0xa
+ 1040 048c 00000000 		.long	.LASF79
+ 1041 0490 03       		.sleb128 3
+ 1042 0491 0A       		.uleb128 0xa
+ 1043 0492 00000000 		.long	.LASF80
+ 1044 0496 04       		.sleb128 4
+ 1045 0497 0A       		.uleb128 0xa
+ 1046 0498 00000000 		.long	.LASF81
+ 1047 049c 05       		.sleb128 5
+ 1048 049d 0A       		.uleb128 0xa
+
GAS LISTING /tmp/ccIvKeEl.s 			page 26
+
+
+ 1049 049e 00000000 		.long	.LASF82
+ 1050 04a2 06       		.sleb128 6
+ 1051 04a3 0A       		.uleb128 0xa
+ 1052 04a4 00000000 		.long	.LASF83
+ 1053 04a8 07       		.sleb128 7
+ 1054 04a9 0A       		.uleb128 0xa
+ 1055 04aa 00000000 		.long	.LASF84
+ 1056 04ae 08       		.sleb128 8
+ 1057 04af 0A       		.uleb128 0xa
+ 1058 04b0 00000000 		.long	.LASF85
+ 1059 04b4 09       		.sleb128 9
+ 1060 04b5 0A       		.uleb128 0xa
+ 1061 04b6 00000000 		.long	.LASF86
+ 1062 04ba 0A       		.sleb128 10
+ 1063 04bb 0A       		.uleb128 0xa
+ 1064 04bc 00000000 		.long	.LASF87
+ 1065 04c0 0B       		.sleb128 11
+ 1066 04c1 0A       		.uleb128 0xa
+ 1067 04c2 00000000 		.long	.LASF88
+ 1068 04c6 0C       		.sleb128 12
+ 1069 04c7 0A       		.uleb128 0xa
+ 1070 04c8 00000000 		.long	.LASF89
+ 1071 04cc 0D       		.sleb128 13
+ 1072 04cd 0A       		.uleb128 0xa
+ 1073 04ce 00000000 		.long	.LASF90
+ 1074 04d2 0E       		.sleb128 14
+ 1075 04d3 0A       		.uleb128 0xa
+ 1076 04d4 00000000 		.long	.LASF91
+ 1077 04d8 0F       		.sleb128 15
+ 1078 04d9 0A       		.uleb128 0xa
+ 1079 04da 00000000 		.long	.LASF92
+ 1080 04de 10       		.sleb128 16
+ 1081 04df 0A       		.uleb128 0xa
+ 1082 04e0 00000000 		.long	.LASF93
+ 1083 04e4 11       		.sleb128 17
+ 1084 04e5 0A       		.uleb128 0xa
+ 1085 04e6 00000000 		.long	.LASF94
+ 1086 04ea 12       		.sleb128 18
+ 1087 04eb 0A       		.uleb128 0xa
+ 1088 04ec 00000000 		.long	.LASF95
+ 1089 04f0 13       		.sleb128 19
+ 1090 04f1 0A       		.uleb128 0xa
+ 1091 04f2 00000000 		.long	.LASF96
+ 1092 04f6 14       		.sleb128 20
+ 1093 04f7 0A       		.uleb128 0xa
+ 1094 04f8 00000000 		.long	.LASF97
+ 1095 04fc 15       		.sleb128 21
+ 1096 04fd 0A       		.uleb128 0xa
+ 1097 04fe 00000000 		.long	.LASF98
+ 1098 0502 16       		.sleb128 22
+ 1099 0503 0A       		.uleb128 0xa
+ 1100 0504 00000000 		.long	.LASF99
+ 1101 0508 17       		.sleb128 23
+ 1102 0509 0A       		.uleb128 0xa
+ 1103 050a 00000000 		.long	.LASF100
+ 1104 050e 18       		.sleb128 24
+ 1105 050f 0A       		.uleb128 0xa
+
GAS LISTING /tmp/ccIvKeEl.s 			page 27
+
+
+ 1106 0510 00000000 		.long	.LASF101
+ 1107 0514 19       		.sleb128 25
+ 1108 0515 0A       		.uleb128 0xa
+ 1109 0516 00000000 		.long	.LASF102
+ 1110 051a 1A       		.sleb128 26
+ 1111 051b 0A       		.uleb128 0xa
+ 1112 051c 00000000 		.long	.LASF103
+ 1113 0520 1B       		.sleb128 27
+ 1114 0521 0A       		.uleb128 0xa
+ 1115 0522 00000000 		.long	.LASF104
+ 1116 0526 1C       		.sleb128 28
+ 1117 0527 0A       		.uleb128 0xa
+ 1118 0528 00000000 		.long	.LASF105
+ 1119 052c 1D       		.sleb128 29
+ 1120 052d 0A       		.uleb128 0xa
+ 1121 052e 00000000 		.long	.LASF106
+ 1122 0532 1E       		.sleb128 30
+ 1123 0533 0A       		.uleb128 0xa
+ 1124 0534 00000000 		.long	.LASF107
+ 1125 0538 1F       		.sleb128 31
+ 1126 0539 0A       		.uleb128 0xa
+ 1127 053a 00000000 		.long	.LASF108
+ 1128 053e 20       		.sleb128 32
+ 1129 053f 0A       		.uleb128 0xa
+ 1130 0540 00000000 		.long	.LASF109
+ 1131 0544 21       		.sleb128 33
+ 1132 0545 0A       		.uleb128 0xa
+ 1133 0546 00000000 		.long	.LASF110
+ 1134 054a 22       		.sleb128 34
+ 1135 054b 0A       		.uleb128 0xa
+ 1136 054c 00000000 		.long	.LASF111
+ 1137 0550 23       		.sleb128 35
+ 1138 0551 0A       		.uleb128 0xa
+ 1139 0552 00000000 		.long	.LASF112
+ 1140 0556 24       		.sleb128 36
+ 1141 0557 0A       		.uleb128 0xa
+ 1142 0558 00000000 		.long	.LASF113
+ 1143 055c 25       		.sleb128 37
+ 1144 055d 0A       		.uleb128 0xa
+ 1145 055e 00000000 		.long	.LASF114
+ 1146 0562 26       		.sleb128 38
+ 1147 0563 0A       		.uleb128 0xa
+ 1148 0564 00000000 		.long	.LASF115
+ 1149 0568 27       		.sleb128 39
+ 1150 0569 0A       		.uleb128 0xa
+ 1151 056a 00000000 		.long	.LASF116
+ 1152 056e 28       		.sleb128 40
+ 1153 056f 0A       		.uleb128 0xa
+ 1154 0570 00000000 		.long	.LASF117
+ 1155 0574 29       		.sleb128 41
+ 1156 0575 0A       		.uleb128 0xa
+ 1157 0576 00000000 		.long	.LASF118
+ 1158 057a 2A       		.sleb128 42
+ 1159 057b 0A       		.uleb128 0xa
+ 1160 057c 00000000 		.long	.LASF119
+ 1161 0580 2B       		.sleb128 43
+ 1162 0581 0A       		.uleb128 0xa
+
GAS LISTING /tmp/ccIvKeEl.s 			page 28
+
+
+ 1163 0582 00000000 		.long	.LASF120
+ 1164 0586 2C       		.sleb128 44
+ 1165 0587 0A       		.uleb128 0xa
+ 1166 0588 00000000 		.long	.LASF121
+ 1167 058c 2D       		.sleb128 45
+ 1168 058d 0A       		.uleb128 0xa
+ 1169 058e 00000000 		.long	.LASF122
+ 1170 0592 2E       		.sleb128 46
+ 1171 0593 0A       		.uleb128 0xa
+ 1172 0594 00000000 		.long	.LASF123
+ 1173 0598 2F       		.sleb128 47
+ 1174 0599 0A       		.uleb128 0xa
+ 1175 059a 00000000 		.long	.LASF124
+ 1176 059e 30       		.sleb128 48
+ 1177 059f 0A       		.uleb128 0xa
+ 1178 05a0 00000000 		.long	.LASF125
+ 1179 05a4 31       		.sleb128 49
+ 1180 05a5 0A       		.uleb128 0xa
+ 1181 05a6 00000000 		.long	.LASF126
+ 1182 05aa 32       		.sleb128 50
+ 1183 05ab 0A       		.uleb128 0xa
+ 1184 05ac 00000000 		.long	.LASF127
+ 1185 05b0 33       		.sleb128 51
+ 1186 05b1 0A       		.uleb128 0xa
+ 1187 05b2 00000000 		.long	.LASF128
+ 1188 05b6 34       		.sleb128 52
+ 1189 05b7 0A       		.uleb128 0xa
+ 1190 05b8 00000000 		.long	.LASF129
+ 1191 05bc 35       		.sleb128 53
+ 1192 05bd 0A       		.uleb128 0xa
+ 1193 05be 00000000 		.long	.LASF130
+ 1194 05c2 36       		.sleb128 54
+ 1195 05c3 0A       		.uleb128 0xa
+ 1196 05c4 00000000 		.long	.LASF131
+ 1197 05c8 36       		.sleb128 54
+ 1198 05c9 0A       		.uleb128 0xa
+ 1199 05ca 00000000 		.long	.LASF132
+ 1200 05ce 37       		.sleb128 55
+ 1201 05cf 0A       		.uleb128 0xa
+ 1202 05d0 00000000 		.long	.LASF133
+ 1203 05d4 38       		.sleb128 56
+ 1204 05d5 0A       		.uleb128 0xa
+ 1205 05d6 00000000 		.long	.LASF134
+ 1206 05da 39       		.sleb128 57
+ 1207 05db 0A       		.uleb128 0xa
+ 1208 05dc 00000000 		.long	.LASF135
+ 1209 05e0 3A       		.sleb128 58
+ 1210 05e1 0A       		.uleb128 0xa
+ 1211 05e2 00000000 		.long	.LASF136
+ 1212 05e6 3B       		.sleb128 59
+ 1213 05e7 0A       		.uleb128 0xa
+ 1214 05e8 00000000 		.long	.LASF137
+ 1215 05ec 3C       		.sleb128 60
+ 1216 05ed 0A       		.uleb128 0xa
+ 1217 05ee 00000000 		.long	.LASF138
+ 1218 05f2 3D       		.sleb128 61
+ 1219 05f3 00       		.byte	0x0
+
GAS LISTING /tmp/ccIvKeEl.s 			page 29
+
+
+ 1220 05f4 19       		.uleb128 0x19
+ 1221 05f5 00000000 		.long	.LASF139
+ 1222 05f9 04       		.byte	0x4
+ 1223 05fa 07       		.byte	0x7
+ 1224 05fb BD       		.byte	0xbd
+ 1225 05fc AA070000 		.long	0x7aa
+ 1226 0600 0A       		.uleb128 0xa
+ 1227 0601 00000000 		.long	.LASF140
+ 1228 0605 00       		.sleb128 0
+ 1229 0606 0A       		.uleb128 0xa
+ 1230 0607 00000000 		.long	.LASF141
+ 1231 060b 01       		.sleb128 1
+ 1232 060c 0A       		.uleb128 0xa
+ 1233 060d 00000000 		.long	.LASF142
+ 1234 0611 02       		.sleb128 2
+ 1235 0612 0A       		.uleb128 0xa
+ 1236 0613 00000000 		.long	.LASF143
+ 1237 0617 03       		.sleb128 3
+ 1238 0618 0A       		.uleb128 0xa
+ 1239 0619 00000000 		.long	.LASF144
+ 1240 061d 04       		.sleb128 4
+ 1241 061e 0A       		.uleb128 0xa
+ 1242 061f 00000000 		.long	.LASF145
+ 1243 0623 05       		.sleb128 5
+ 1244 0624 0A       		.uleb128 0xa
+ 1245 0625 00000000 		.long	.LASF146
+ 1246 0629 06       		.sleb128 6
+ 1247 062a 0A       		.uleb128 0xa
+ 1248 062b 00000000 		.long	.LASF147
+ 1249 062f 07       		.sleb128 7
+ 1250 0630 0A       		.uleb128 0xa
+ 1251 0631 00000000 		.long	.LASF148
+ 1252 0635 08       		.sleb128 8
+ 1253 0636 0A       		.uleb128 0xa
+ 1254 0637 00000000 		.long	.LASF149
+ 1255 063b 09       		.sleb128 9
+ 1256 063c 0A       		.uleb128 0xa
+ 1257 063d 00000000 		.long	.LASF150
+ 1258 0641 0A       		.sleb128 10
+ 1259 0642 0A       		.uleb128 0xa
+ 1260 0643 00000000 		.long	.LASF151
+ 1261 0647 0B       		.sleb128 11
+ 1262 0648 0A       		.uleb128 0xa
+ 1263 0649 00000000 		.long	.LASF152
+ 1264 064d 0C       		.sleb128 12
+ 1265 064e 0A       		.uleb128 0xa
+ 1266 064f 00000000 		.long	.LASF153
+ 1267 0653 0D       		.sleb128 13
+ 1268 0654 0A       		.uleb128 0xa
+ 1269 0655 00000000 		.long	.LASF154
+ 1270 0659 0E       		.sleb128 14
+ 1271 065a 0A       		.uleb128 0xa
+ 1272 065b 00000000 		.long	.LASF155
+ 1273 065f 0F       		.sleb128 15
+ 1274 0660 0A       		.uleb128 0xa
+ 1275 0661 00000000 		.long	.LASF156
+ 1276 0665 10       		.sleb128 16
+
GAS LISTING /tmp/ccIvKeEl.s 			page 30
+
+
+ 1277 0666 0A       		.uleb128 0xa
+ 1278 0667 00000000 		.long	.LASF157
+ 1279 066b 11       		.sleb128 17
+ 1280 066c 0A       		.uleb128 0xa
+ 1281 066d 00000000 		.long	.LASF158
+ 1282 0671 12       		.sleb128 18
+ 1283 0672 0A       		.uleb128 0xa
+ 1284 0673 00000000 		.long	.LASF159
+ 1285 0677 13       		.sleb128 19
+ 1286 0678 0A       		.uleb128 0xa
+ 1287 0679 00000000 		.long	.LASF160
+ 1288 067d 14       		.sleb128 20
+ 1289 067e 0A       		.uleb128 0xa
+ 1290 067f 00000000 		.long	.LASF161
+ 1291 0683 15       		.sleb128 21
+ 1292 0684 0A       		.uleb128 0xa
+ 1293 0685 00000000 		.long	.LASF162
+ 1294 0689 16       		.sleb128 22
+ 1295 068a 0A       		.uleb128 0xa
+ 1296 068b 00000000 		.long	.LASF163
+ 1297 068f 17       		.sleb128 23
+ 1298 0690 0A       		.uleb128 0xa
+ 1299 0691 00000000 		.long	.LASF164
+ 1300 0695 18       		.sleb128 24
+ 1301 0696 0A       		.uleb128 0xa
+ 1302 0697 00000000 		.long	.LASF165
+ 1303 069b 19       		.sleb128 25
+ 1304 069c 0A       		.uleb128 0xa
+ 1305 069d 00000000 		.long	.LASF166
+ 1306 06a1 1A       		.sleb128 26
+ 1307 06a2 0A       		.uleb128 0xa
+ 1308 06a3 00000000 		.long	.LASF167
+ 1309 06a7 1B       		.sleb128 27
+ 1310 06a8 0A       		.uleb128 0xa
+ 1311 06a9 00000000 		.long	.LASF168
+ 1312 06ad 1C       		.sleb128 28
+ 1313 06ae 0A       		.uleb128 0xa
+ 1314 06af 00000000 		.long	.LASF169
+ 1315 06b3 1D       		.sleb128 29
+ 1316 06b4 0A       		.uleb128 0xa
+ 1317 06b5 00000000 		.long	.LASF170
+ 1318 06b9 1E       		.sleb128 30
+ 1319 06ba 0A       		.uleb128 0xa
+ 1320 06bb 00000000 		.long	.LASF171
+ 1321 06bf 1F       		.sleb128 31
+ 1322 06c0 0A       		.uleb128 0xa
+ 1323 06c1 00000000 		.long	.LASF172
+ 1324 06c5 20       		.sleb128 32
+ 1325 06c6 0A       		.uleb128 0xa
+ 1326 06c7 00000000 		.long	.LASF173
+ 1327 06cb 21       		.sleb128 33
+ 1328 06cc 0A       		.uleb128 0xa
+ 1329 06cd 00000000 		.long	.LASF174
+ 1330 06d1 22       		.sleb128 34
+ 1331 06d2 0A       		.uleb128 0xa
+ 1332 06d3 00000000 		.long	.LASF175
+ 1333 06d7 23       		.sleb128 35
+
GAS LISTING /tmp/ccIvKeEl.s 			page 31
+
+
+ 1334 06d8 0A       		.uleb128 0xa
+ 1335 06d9 00000000 		.long	.LASF176
+ 1336 06dd 24       		.sleb128 36
+ 1337 06de 0A       		.uleb128 0xa
+ 1338 06df 00000000 		.long	.LASF177
+ 1339 06e3 25       		.sleb128 37
+ 1340 06e4 0A       		.uleb128 0xa
+ 1341 06e5 00000000 		.long	.LASF178
+ 1342 06e9 26       		.sleb128 38
+ 1343 06ea 0A       		.uleb128 0xa
+ 1344 06eb 00000000 		.long	.LASF179
+ 1345 06ef 27       		.sleb128 39
+ 1346 06f0 0A       		.uleb128 0xa
+ 1347 06f1 00000000 		.long	.LASF180
+ 1348 06f5 28       		.sleb128 40
+ 1349 06f6 0A       		.uleb128 0xa
+ 1350 06f7 00000000 		.long	.LASF181
+ 1351 06fb 29       		.sleb128 41
+ 1352 06fc 0A       		.uleb128 0xa
+ 1353 06fd 00000000 		.long	.LASF182
+ 1354 0701 2A       		.sleb128 42
+ 1355 0702 0A       		.uleb128 0xa
+ 1356 0703 00000000 		.long	.LASF183
+ 1357 0707 2B       		.sleb128 43
+ 1358 0708 0A       		.uleb128 0xa
+ 1359 0709 00000000 		.long	.LASF184
+ 1360 070d 2C       		.sleb128 44
+ 1361 070e 0A       		.uleb128 0xa
+ 1362 070f 00000000 		.long	.LASF185
+ 1363 0713 2D       		.sleb128 45
+ 1364 0714 0A       		.uleb128 0xa
+ 1365 0715 00000000 		.long	.LASF186
+ 1366 0719 2E       		.sleb128 46
+ 1367 071a 0A       		.uleb128 0xa
+ 1368 071b 00000000 		.long	.LASF187
+ 1369 071f 2F       		.sleb128 47
+ 1370 0720 0A       		.uleb128 0xa
+ 1371 0721 00000000 		.long	.LASF188
+ 1372 0725 30       		.sleb128 48
+ 1373 0726 0A       		.uleb128 0xa
+ 1374 0727 00000000 		.long	.LASF189
+ 1375 072b 31       		.sleb128 49
+ 1376 072c 0A       		.uleb128 0xa
+ 1377 072d 00000000 		.long	.LASF190
+ 1378 0731 32       		.sleb128 50
+ 1379 0732 0A       		.uleb128 0xa
+ 1380 0733 00000000 		.long	.LASF191
+ 1381 0737 33       		.sleb128 51
+ 1382 0738 0A       		.uleb128 0xa
+ 1383 0739 00000000 		.long	.LASF192
+ 1384 073d 34       		.sleb128 52
+ 1385 073e 0A       		.uleb128 0xa
+ 1386 073f 00000000 		.long	.LASF193
+ 1387 0743 35       		.sleb128 53
+ 1388 0744 0A       		.uleb128 0xa
+ 1389 0745 00000000 		.long	.LASF194
+ 1390 0749 36       		.sleb128 54
+
GAS LISTING /tmp/ccIvKeEl.s 			page 32
+
+
+ 1391 074a 0A       		.uleb128 0xa
+ 1392 074b 00000000 		.long	.LASF195
+ 1393 074f 37       		.sleb128 55
+ 1394 0750 0A       		.uleb128 0xa
+ 1395 0751 00000000 		.long	.LASF196
+ 1396 0755 38       		.sleb128 56
+ 1397 0756 0A       		.uleb128 0xa
+ 1398 0757 00000000 		.long	.LASF197
+ 1399 075b 39       		.sleb128 57
+ 1400 075c 0A       		.uleb128 0xa
+ 1401 075d 00000000 		.long	.LASF198
+ 1402 0761 3A       		.sleb128 58
+ 1403 0762 0A       		.uleb128 0xa
+ 1404 0763 00000000 		.long	.LASF199
+ 1405 0767 3A       		.sleb128 58
+ 1406 0768 0A       		.uleb128 0xa
+ 1407 0769 00000000 		.long	.LASF200
+ 1408 076d 3B       		.sleb128 59
+ 1409 076e 0A       		.uleb128 0xa
+ 1410 076f 00000000 		.long	.LASF201
+ 1411 0773 3C       		.sleb128 60
+ 1412 0774 0A       		.uleb128 0xa
+ 1413 0775 00000000 		.long	.LASF202
+ 1414 0779 3D       		.sleb128 61
+ 1415 077a 0A       		.uleb128 0xa
+ 1416 077b 00000000 		.long	.LASF203
+ 1417 077f 3E       		.sleb128 62
+ 1418 0780 0A       		.uleb128 0xa
+ 1419 0781 00000000 		.long	.LASF204
+ 1420 0785 3F       		.sleb128 63
+ 1421 0786 0A       		.uleb128 0xa
+ 1422 0787 00000000 		.long	.LASF205
+ 1423 078b C000     		.sleb128 64
+ 1424 078d 0A       		.uleb128 0xa
+ 1425 078e 00000000 		.long	.LASF206
+ 1426 0792 C100     		.sleb128 65
+ 1427 0794 0A       		.uleb128 0xa
+ 1428 0795 00000000 		.long	.LASF207
+ 1429 0799 C200     		.sleb128 66
+ 1430 079b 0A       		.uleb128 0xa
+ 1431 079c 00000000 		.long	.LASF208
+ 1432 07a0 C300     		.sleb128 67
+ 1433 07a2 0A       		.uleb128 0xa
+ 1434 07a3 00000000 		.long	.LASF209
+ 1435 07a7 C400     		.sleb128 68
+ 1436 07a9 00       		.byte	0x0
+ 1437 07aa 1A       		.uleb128 0x1a
+ 1438 07ab 00000000 		.long	.LASF210
+ 1439 07af 04       		.byte	0x4
+ 1440 07b0 07       		.byte	0x7
+ 1441 07b1 0A01     		.value	0x10a
+ 1442 07b3 A9080000 		.long	0x8a9
+ 1443 07b7 0A       		.uleb128 0xa
+ 1444 07b8 00000000 		.long	.LASF211
+ 1445 07bc 00       		.sleb128 0
+ 1446 07bd 0A       		.uleb128 0xa
+ 1447 07be 00000000 		.long	.LASF212
+
GAS LISTING /tmp/ccIvKeEl.s 			page 33
+
+
+ 1448 07c2 3D       		.sleb128 61
+ 1449 07c3 0A       		.uleb128 0xa
+ 1450 07c4 00000000 		.long	.LASF213
+ 1451 07c8 3E       		.sleb128 62
+ 1452 07c9 0A       		.uleb128 0xa
+ 1453 07ca 00000000 		.long	.LASF214
+ 1454 07ce 3F       		.sleb128 63
+ 1455 07cf 0A       		.uleb128 0xa
+ 1456 07d0 00000000 		.long	.LASF215
+ 1457 07d4 C000     		.sleb128 64
+ 1458 07d6 0A       		.uleb128 0xa
+ 1459 07d7 00000000 		.long	.LASF216
+ 1460 07db C100     		.sleb128 65
+ 1461 07dd 0A       		.uleb128 0xa
+ 1462 07de 00000000 		.long	.LASF217
+ 1463 07e2 C200     		.sleb128 66
+ 1464 07e4 0A       		.uleb128 0xa
+ 1465 07e5 00000000 		.long	.LASF218
+ 1466 07e9 C300     		.sleb128 67
+ 1467 07eb 0A       		.uleb128 0xa
+ 1468 07ec 00000000 		.long	.LASF219
+ 1469 07f0 C400     		.sleb128 68
+ 1470 07f2 0A       		.uleb128 0xa
+ 1471 07f3 00000000 		.long	.LASF220
+ 1472 07f7 C500     		.sleb128 69
+ 1473 07f9 0A       		.uleb128 0xa
+ 1474 07fa 00000000 		.long	.LASF221
+ 1475 07fe C600     		.sleb128 70
+ 1476 0800 0A       		.uleb128 0xa
+ 1477 0801 00000000 		.long	.LASF222
+ 1478 0805 C700     		.sleb128 71
+ 1479 0807 0A       		.uleb128 0xa
+ 1480 0808 00000000 		.long	.LASF223
+ 1481 080c C800     		.sleb128 72
+ 1482 080e 0A       		.uleb128 0xa
+ 1483 080f 00000000 		.long	.LASF224
+ 1484 0813 C900     		.sleb128 73
+ 1485 0815 0A       		.uleb128 0xa
+ 1486 0816 00000000 		.long	.LASF225
+ 1487 081a CA00     		.sleb128 74
+ 1488 081c 0A       		.uleb128 0xa
+ 1489 081d 00000000 		.long	.LASF226
+ 1490 0821 CB00     		.sleb128 75
+ 1491 0823 0A       		.uleb128 0xa
+ 1492 0824 00000000 		.long	.LASF227
+ 1493 0828 CC00     		.sleb128 76
+ 1494 082a 0A       		.uleb128 0xa
+ 1495 082b 00000000 		.long	.LASF228
+ 1496 082f CD00     		.sleb128 77
+ 1497 0831 0A       		.uleb128 0xa
+ 1498 0832 00000000 		.long	.LASF229
+ 1499 0836 CE00     		.sleb128 78
+ 1500 0838 0A       		.uleb128 0xa
+ 1501 0839 00000000 		.long	.LASF230
+ 1502 083d CF00     		.sleb128 79
+ 1503 083f 0A       		.uleb128 0xa
+ 1504 0840 00000000 		.long	.LASF231
+
GAS LISTING /tmp/ccIvKeEl.s 			page 34
+
+
+ 1505 0844 D000     		.sleb128 80
+ 1506 0846 0A       		.uleb128 0xa
+ 1507 0847 00000000 		.long	.LASF232
+ 1508 084b D100     		.sleb128 81
+ 1509 084d 0A       		.uleb128 0xa
+ 1510 084e 00000000 		.long	.LASF233
+ 1511 0852 D100     		.sleb128 81
+ 1512 0854 0A       		.uleb128 0xa
+ 1513 0855 00000000 		.long	.LASF234
+ 1514 0859 D200     		.sleb128 82
+ 1515 085b 0A       		.uleb128 0xa
+ 1516 085c 00000000 		.long	.LASF235
+ 1517 0860 D300     		.sleb128 83
+ 1518 0862 0A       		.uleb128 0xa
+ 1519 0863 00000000 		.long	.LASF236
+ 1520 0867 D400     		.sleb128 84
+ 1521 0869 0A       		.uleb128 0xa
+ 1522 086a 00000000 		.long	.LASF237
+ 1523 086e D500     		.sleb128 85
+ 1524 0870 0A       		.uleb128 0xa
+ 1525 0871 00000000 		.long	.LASF238
+ 1526 0875 D600     		.sleb128 86
+ 1527 0877 0A       		.uleb128 0xa
+ 1528 0878 00000000 		.long	.LASF239
+ 1529 087c D700     		.sleb128 87
+ 1530 087e 0A       		.uleb128 0xa
+ 1531 087f 00000000 		.long	.LASF240
+ 1532 0883 D800     		.sleb128 88
+ 1533 0885 0A       		.uleb128 0xa
+ 1534 0886 00000000 		.long	.LASF241
+ 1535 088a D900     		.sleb128 89
+ 1536 088c 0A       		.uleb128 0xa
+ 1537 088d 00000000 		.long	.LASF242
+ 1538 0891 DA00     		.sleb128 90
+ 1539 0893 0A       		.uleb128 0xa
+ 1540 0894 00000000 		.long	.LASF243
+ 1541 0898 DB00     		.sleb128 91
+ 1542 089a 0A       		.uleb128 0xa
+ 1543 089b 00000000 		.long	.LASF244
+ 1544 089f DC00     		.sleb128 92
+ 1545 08a1 0A       		.uleb128 0xa
+ 1546 08a2 00000000 		.long	.LASF245
+ 1547 08a6 DD00     		.sleb128 93
+ 1548 08a8 00       		.byte	0x0
+ 1549 08a9 1A       		.uleb128 0x1a
+ 1550 08aa 00000000 		.long	.LASF246
+ 1551 08ae 04       		.byte	0x4
+ 1552 08af 07       		.byte	0x7
+ 1553 08b0 3401     		.value	0x134
+ 1554 08b2 E9090000 		.long	0x9e9
+ 1555 08b6 0A       		.uleb128 0xa
+ 1556 08b7 00000000 		.long	.LASF247
+ 1557 08bb 00       		.sleb128 0
+ 1558 08bc 0A       		.uleb128 0xa
+ 1559 08bd 00000000 		.long	.LASF248
+ 1560 08c1 01       		.sleb128 1
+ 1561 08c2 0A       		.uleb128 0xa
+
GAS LISTING /tmp/ccIvKeEl.s 			page 35
+
+
+ 1562 08c3 00000000 		.long	.LASF249
+ 1563 08c7 02       		.sleb128 2
+ 1564 08c8 0A       		.uleb128 0xa
+ 1565 08c9 00000000 		.long	.LASF250
+ 1566 08cd 03       		.sleb128 3
+ 1567 08ce 0A       		.uleb128 0xa
+ 1568 08cf 00000000 		.long	.LASF251
+ 1569 08d3 04       		.sleb128 4
+ 1570 08d4 0A       		.uleb128 0xa
+ 1571 08d5 00000000 		.long	.LASF252
+ 1572 08d9 05       		.sleb128 5
+ 1573 08da 0A       		.uleb128 0xa
+ 1574 08db 00000000 		.long	.LASF253
+ 1575 08df 06       		.sleb128 6
+ 1576 08e0 0A       		.uleb128 0xa
+ 1577 08e1 00000000 		.long	.LASF254
+ 1578 08e5 07       		.sleb128 7
+ 1579 08e6 0A       		.uleb128 0xa
+ 1580 08e7 00000000 		.long	.LASF255
+ 1581 08eb 08       		.sleb128 8
+ 1582 08ec 0A       		.uleb128 0xa
+ 1583 08ed 00000000 		.long	.LASF256
+ 1584 08f1 09       		.sleb128 9
+ 1585 08f2 0A       		.uleb128 0xa
+ 1586 08f3 00000000 		.long	.LASF257
+ 1587 08f7 0A       		.sleb128 10
+ 1588 08f8 0A       		.uleb128 0xa
+ 1589 08f9 00000000 		.long	.LASF258
+ 1590 08fd 0B       		.sleb128 11
+ 1591 08fe 0A       		.uleb128 0xa
+ 1592 08ff 00000000 		.long	.LASF259
+ 1593 0903 0C       		.sleb128 12
+ 1594 0904 0A       		.uleb128 0xa
+ 1595 0905 00000000 		.long	.LASF260
+ 1596 0909 0D       		.sleb128 13
+ 1597 090a 0A       		.uleb128 0xa
+ 1598 090b 00000000 		.long	.LASF261
+ 1599 090f 0E       		.sleb128 14
+ 1600 0910 0A       		.uleb128 0xa
+ 1601 0911 00000000 		.long	.LASF262
+ 1602 0915 0F       		.sleb128 15
+ 1603 0916 0A       		.uleb128 0xa
+ 1604 0917 00000000 		.long	.LASF263
+ 1605 091b 10       		.sleb128 16
+ 1606 091c 0A       		.uleb128 0xa
+ 1607 091d 00000000 		.long	.LASF264
+ 1608 0921 11       		.sleb128 17
+ 1609 0922 0A       		.uleb128 0xa
+ 1610 0923 00000000 		.long	.LASF265
+ 1611 0927 12       		.sleb128 18
+ 1612 0928 0A       		.uleb128 0xa
+ 1613 0929 00000000 		.long	.LASF266
+ 1614 092d 13       		.sleb128 19
+ 1615 092e 0A       		.uleb128 0xa
+ 1616 092f 00000000 		.long	.LASF267
+ 1617 0933 14       		.sleb128 20
+ 1618 0934 0A       		.uleb128 0xa
+
GAS LISTING /tmp/ccIvKeEl.s 			page 36
+
+
+ 1619 0935 00000000 		.long	.LASF268
+ 1620 0939 15       		.sleb128 21
+ 1621 093a 0A       		.uleb128 0xa
+ 1622 093b 00000000 		.long	.LASF269
+ 1623 093f 16       		.sleb128 22
+ 1624 0940 0A       		.uleb128 0xa
+ 1625 0941 00000000 		.long	.LASF270
+ 1626 0945 17       		.sleb128 23
+ 1627 0946 0A       		.uleb128 0xa
+ 1628 0947 00000000 		.long	.LASF271
+ 1629 094b 18       		.sleb128 24
+ 1630 094c 0A       		.uleb128 0xa
+ 1631 094d 00000000 		.long	.LASF272
+ 1632 0951 19       		.sleb128 25
+ 1633 0952 0A       		.uleb128 0xa
+ 1634 0953 00000000 		.long	.LASF273
+ 1635 0957 1A       		.sleb128 26
+ 1636 0958 0A       		.uleb128 0xa
+ 1637 0959 00000000 		.long	.LASF274
+ 1638 095d 1B       		.sleb128 27
+ 1639 095e 0A       		.uleb128 0xa
+ 1640 095f 00000000 		.long	.LASF275
+ 1641 0963 1C       		.sleb128 28
+ 1642 0964 0A       		.uleb128 0xa
+ 1643 0965 00000000 		.long	.LASF276
+ 1644 0969 1D       		.sleb128 29
+ 1645 096a 0A       		.uleb128 0xa
+ 1646 096b 00000000 		.long	.LASF277
+ 1647 096f 1E       		.sleb128 30
+ 1648 0970 0A       		.uleb128 0xa
+ 1649 0971 00000000 		.long	.LASF278
+ 1650 0975 1F       		.sleb128 31
+ 1651 0976 0A       		.uleb128 0xa
+ 1652 0977 00000000 		.long	.LASF279
+ 1653 097b 20       		.sleb128 32
+ 1654 097c 0A       		.uleb128 0xa
+ 1655 097d 00000000 		.long	.LASF280
+ 1656 0981 21       		.sleb128 33
+ 1657 0982 0A       		.uleb128 0xa
+ 1658 0983 00000000 		.long	.LASF281
+ 1659 0987 22       		.sleb128 34
+ 1660 0988 0A       		.uleb128 0xa
+ 1661 0989 00000000 		.long	.LASF282
+ 1662 098d 23       		.sleb128 35
+ 1663 098e 0A       		.uleb128 0xa
+ 1664 098f 00000000 		.long	.LASF283
+ 1665 0993 24       		.sleb128 36
+ 1666 0994 0A       		.uleb128 0xa
+ 1667 0995 00000000 		.long	.LASF284
+ 1668 0999 25       		.sleb128 37
+ 1669 099a 0A       		.uleb128 0xa
+ 1670 099b 00000000 		.long	.LASF285
+ 1671 099f 26       		.sleb128 38
+ 1672 09a0 0A       		.uleb128 0xa
+ 1673 09a1 00000000 		.long	.LASF286
+ 1674 09a5 27       		.sleb128 39
+ 1675 09a6 0A       		.uleb128 0xa
+
GAS LISTING /tmp/ccIvKeEl.s 			page 37
+
+
+ 1676 09a7 00000000 		.long	.LASF287
+ 1677 09ab 28       		.sleb128 40
+ 1678 09ac 0A       		.uleb128 0xa
+ 1679 09ad 00000000 		.long	.LASF288
+ 1680 09b1 29       		.sleb128 41
+ 1681 09b2 0A       		.uleb128 0xa
+ 1682 09b3 00000000 		.long	.LASF289
+ 1683 09b7 29       		.sleb128 41
+ 1684 09b8 0A       		.uleb128 0xa
+ 1685 09b9 00000000 		.long	.LASF290
+ 1686 09bd 2A       		.sleb128 42
+ 1687 09be 0A       		.uleb128 0xa
+ 1688 09bf 00000000 		.long	.LASF291
+ 1689 09c3 2B       		.sleb128 43
+ 1690 09c4 0A       		.uleb128 0xa
+ 1691 09c5 00000000 		.long	.LASF292
+ 1692 09c9 2C       		.sleb128 44
+ 1693 09ca 0A       		.uleb128 0xa
+ 1694 09cb 00000000 		.long	.LASF293
+ 1695 09cf 2D       		.sleb128 45
+ 1696 09d0 0A       		.uleb128 0xa
+ 1697 09d1 00000000 		.long	.LASF294
+ 1698 09d5 2E       		.sleb128 46
+ 1699 09d6 0A       		.uleb128 0xa
+ 1700 09d7 00000000 		.long	.LASF295
+ 1701 09db 2F       		.sleb128 47
+ 1702 09dc 0A       		.uleb128 0xa
+ 1703 09dd 00000000 		.long	.LASF296
+ 1704 09e1 30       		.sleb128 48
+ 1705 09e2 0A       		.uleb128 0xa
+ 1706 09e3 00000000 		.long	.LASF297
+ 1707 09e7 31       		.sleb128 49
+ 1708 09e8 00       		.byte	0x0
+ 1709 09e9 1B       		.uleb128 0x1b
+ 1710 09ea 00000000 		.long	.LASF320
+ 1711 09ee 01       		.byte	0x1
+ 1712 09ef 48       		.byte	0x48
+ 1713 09f0 01       		.byte	0x1
+ 1714 09f1 00000000 		.quad	.LFB513
+ 1714      00000000 
+ 1715 09f9 00000000 		.quad	.LFE513
+ 1715      00000000 
+ 1716 0a01 00000000 		.long	.LLST0
+ 1717 0a05 180A0000 		.long	0xa18
+ 1718 0a09 1C       		.uleb128 0x1c
+ 1719 0a0a 00000000 		.long	.LASF300
+ 1720 0a0e 01       		.byte	0x1
+ 1721 0a0f 48       		.byte	0x48
+ 1722 0a10 82030000 		.long	0x382
+ 1723 0a14 02       		.byte	0x2
+ 1724 0a15 91       		.byte	0x91
+ 1725 0a16 68       		.sleb128 -24
+ 1726 0a17 00       		.byte	0x0
+ 1727 0a18 1D       		.uleb128 0x1d
+ 1728 0a19 00000000 		.long	.LASF298
+ 1729 0a1d 01       		.byte	0x1
+ 1730 0a1e 52       		.byte	0x52
+
GAS LISTING /tmp/ccIvKeEl.s 			page 38
+
+
+ 1731 0a1f 62000000 		.long	0x62
+ 1732 0a23 00000000 		.quad	.LFB514
+ 1732      00000000 
+ 1733 0a2b 00000000 		.quad	.LFE514
+ 1733      00000000 
+ 1734 0a33 00000000 		.long	.LLST1
+ 1735 0a37 1D       		.uleb128 0x1d
+ 1736 0a38 00000000 		.long	.LASF299
+ 1737 0a3c 01       		.byte	0x1
+ 1738 0a3d 60       		.byte	0x60
+ 1739 0a3e 62000000 		.long	0x62
+ 1740 0a42 00000000 		.quad	.LFB515
+ 1740      00000000 
+ 1741 0a4a 00000000 		.quad	.LFE515
+ 1741      00000000 
+ 1742 0a52 00000000 		.long	.LLST2
+ 1743 0a56 1E       		.uleb128 0x1e
+ 1744 0a57 00000000 		.long	.LASF304
+ 1745 0a5b 01       		.byte	0x1
+ 1746 0a5c 6C       		.byte	0x6c
+ 1747 0a5d 01       		.byte	0x1
+ 1748 0a5e 7B000000 		.long	0x7b
+ 1749 0a62 00000000 		.quad	.LFB516
+ 1749      00000000 
+ 1750 0a6a 00000000 		.quad	.LFE516
+ 1750      00000000 
+ 1751 0a72 00000000 		.long	.LLST3
+ 1752 0a76 A50A0000 		.long	0xaa5
+ 1753 0a7a 1C       		.uleb128 0x1c
+ 1754 0a7b 00000000 		.long	.LASF301
+ 1755 0a7f 01       		.byte	0x1
+ 1756 0a80 6C       		.byte	0x6c
+ 1757 0a81 86000000 		.long	0x86
+ 1758 0a85 02       		.byte	0x2
+ 1759 0a86 91       		.byte	0x91
+ 1760 0a87 68       		.sleb128 -24
+ 1761 0a88 1C       		.uleb128 0x1c
+ 1762 0a89 00000000 		.long	.LASF302
+ 1763 0a8d 01       		.byte	0x1
+ 1764 0a8e 6C       		.byte	0x6c
+ 1765 0a8f 8B000000 		.long	0x8b
+ 1766 0a93 02       		.byte	0x2
+ 1767 0a94 91       		.byte	0x91
+ 1768 0a95 60       		.sleb128 -32
+ 1769 0a96 1C       		.uleb128 0x1c
+ 1770 0a97 00000000 		.long	.LASF303
+ 1771 0a9b 01       		.byte	0x1
+ 1772 0a9c 6D       		.byte	0x6d
+ 1773 0a9d 62000000 		.long	0x62
+ 1774 0aa1 02       		.byte	0x2
+ 1775 0aa2 91       		.byte	0x91
+ 1776 0aa3 5C       		.sleb128 -36
+ 1777 0aa4 00       		.byte	0x0
+ 1778 0aa5 1E       		.uleb128 0x1e
+ 1779 0aa6 00000000 		.long	.LASF305
+ 1780 0aaa 01       		.byte	0x1
+ 1781 0aab 79       		.byte	0x79
+
GAS LISTING /tmp/ccIvKeEl.s 			page 39
+
+
+ 1782 0aac 01       		.byte	0x1
+ 1783 0aad 7B000000 		.long	0x7b
+ 1784 0ab1 00000000 		.quad	.LFB517
+ 1784      00000000 
+ 1785 0ab9 00000000 		.quad	.LFE517
+ 1785      00000000 
+ 1786 0ac1 00000000 		.long	.LLST4
+ 1787 0ac5 F40A0000 		.long	0xaf4
+ 1788 0ac9 1C       		.uleb128 0x1c
+ 1789 0aca 00000000 		.long	.LASF306
+ 1790 0ace 01       		.byte	0x1
+ 1791 0acf 79       		.byte	0x79
+ 1792 0ad0 86000000 		.long	0x86
+ 1793 0ad4 02       		.byte	0x2
+ 1794 0ad5 91       		.byte	0x91
+ 1795 0ad6 68       		.sleb128 -24
+ 1796 0ad7 1C       		.uleb128 0x1c
+ 1797 0ad8 00000000 		.long	.LASF302
+ 1798 0adc 01       		.byte	0x1
+ 1799 0add 7A       		.byte	0x7a
+ 1800 0ade 8B000000 		.long	0x8b
+ 1801 0ae2 02       		.byte	0x2
+ 1802 0ae3 91       		.byte	0x91
+ 1803 0ae4 60       		.sleb128 -32
+ 1804 0ae5 1C       		.uleb128 0x1c
+ 1805 0ae6 00000000 		.long	.LASF303
+ 1806 0aea 01       		.byte	0x1
+ 1807 0aeb 7B       		.byte	0x7b
+ 1808 0aec 62000000 		.long	0x62
+ 1809 0af0 02       		.byte	0x2
+ 1810 0af1 91       		.byte	0x91
+ 1811 0af2 5C       		.sleb128 -36
+ 1812 0af3 00       		.byte	0x0
+ 1813 0af4 1E       		.uleb128 0x1e
+ 1814 0af5 00000000 		.long	.LASF307
+ 1815 0af9 01       		.byte	0x1
+ 1816 0afa 89       		.byte	0x89
+ 1817 0afb 01       		.byte	0x1
+ 1818 0afc 63010000 		.long	0x163
+ 1819 0b00 00000000 		.quad	.LFB518
+ 1819      00000000 
+ 1820 0b08 00000000 		.quad	.LFE518
+ 1820      00000000 
+ 1821 0b10 00000000 		.long	.LLST5
+ 1822 0b14 350B0000 		.long	0xb35
+ 1823 0b18 1C       		.uleb128 0x1c
+ 1824 0b19 00000000 		.long	.LASF308
+ 1825 0b1d 01       		.byte	0x1
+ 1826 0b1e 89       		.byte	0x89
+ 1827 0b1f 63010000 		.long	0x163
+ 1828 0b23 02       		.byte	0x2
+ 1829 0b24 91       		.byte	0x91
+ 1830 0b25 60       		.sleb128 -32
+ 1831 0b26 1C       		.uleb128 0x1c
+ 1832 0b27 00000000 		.long	.LASF301
+ 1833 0b2b 01       		.byte	0x1
+ 1834 0b2c 8A       		.byte	0x8a
+
GAS LISTING /tmp/ccIvKeEl.s 			page 40
+
+
+ 1835 0b2d 1E010000 		.long	0x11e
+ 1836 0b31 02       		.byte	0x2
+ 1837 0b32 91       		.byte	0x91
+ 1838 0b33 58       		.sleb128 -40
+ 1839 0b34 00       		.byte	0x0
+ 1840 0b35 1E       		.uleb128 0x1e
+ 1841 0b36 00000000 		.long	.LASF309
+ 1842 0b3a 01       		.byte	0x1
+ 1843 0b3b 9E       		.byte	0x9e
+ 1844 0b3c 01       		.byte	0x1
+ 1845 0b3d 63010000 		.long	0x163
+ 1846 0b41 00000000 		.quad	.LFB519
+ 1846      00000000 
+ 1847 0b49 00000000 		.quad	.LFE519
+ 1847      00000000 
+ 1848 0b51 00000000 		.long	.LLST6
+ 1849 0b55 760B0000 		.long	0xb76
+ 1850 0b59 1C       		.uleb128 0x1c
+ 1851 0b5a 00000000 		.long	.LASF308
+ 1852 0b5e 01       		.byte	0x1
+ 1853 0b5f 9E       		.byte	0x9e
+ 1854 0b60 63010000 		.long	0x163
+ 1855 0b64 02       		.byte	0x2
+ 1856 0b65 91       		.byte	0x91
+ 1857 0b66 60       		.sleb128 -32
+ 1858 0b67 1C       		.uleb128 0x1c
+ 1859 0b68 00000000 		.long	.LASF306
+ 1860 0b6c 01       		.byte	0x1
+ 1861 0b6d 9F       		.byte	0x9f
+ 1862 0b6e 1E010000 		.long	0x11e
+ 1863 0b72 02       		.byte	0x2
+ 1864 0b73 91       		.byte	0x91
+ 1865 0b74 58       		.sleb128 -40
+ 1866 0b75 00       		.byte	0x0
+ 1867 0b76 1D       		.uleb128 0x1d
+ 1868 0b77 00000000 		.long	.LASF310
+ 1869 0b7b 01       		.byte	0x1
+ 1870 0b7c B3       		.byte	0xb3
+ 1871 0b7d 950B0000 		.long	0xb95
+ 1872 0b81 00000000 		.quad	.LFB520
+ 1872      00000000 
+ 1873 0b89 00000000 		.quad	.LFE520
+ 1873      00000000 
+ 1874 0b91 00000000 		.long	.LLST7
+ 1875 0b95 02       		.uleb128 0x2
+ 1876 0b96 01       		.byte	0x1
+ 1877 0b97 02       		.byte	0x2
+ 1878 0b98 00000000 		.long	.LASF311
+ 1879 0b9c 1F       		.uleb128 0x1f
+ 1880 0b9d 01       		.byte	0x1
+ 1881 0b9e 00000000 		.long	.LASF321
+ 1882 0ba2 01       		.byte	0x1
+ 1883 0ba3 E2       		.byte	0xe2
+ 1884 0ba4 01       		.byte	0x1
+ 1885 0ba5 7B000000 		.long	0x7b
+ 1886 0ba9 00000000 		.quad	.LFB521
+ 1886      00000000 
+
GAS LISTING /tmp/ccIvKeEl.s 			page 41
+
+
+ 1887 0bb1 00000000 		.quad	.LFE521
+ 1887      00000000 
+ 1888 0bb9 00000000 		.long	.LLST8
+ 1889 0bbd 050C0000 		.long	0xc05
+ 1890 0bc1 1C       		.uleb128 0x1c
+ 1891 0bc2 00000000 		.long	.LASF312
+ 1892 0bc6 01       		.byte	0x1
+ 1893 0bc7 E2       		.byte	0xe2
+ 1894 0bc8 050C0000 		.long	0xc05
+ 1895 0bcc 02       		.byte	0x2
+ 1896 0bcd 91       		.byte	0x91
+ 1897 0bce 58       		.sleb128 -40
+ 1898 0bcf 20       		.uleb128 0x20
+ 1899 0bd0 726300   		.string	"rc"
+ 1900 0bd3 01       		.byte	0x1
+ 1901 0bd4 E4       		.byte	0xe4
+ 1902 0bd5 7B000000 		.long	0x7b
+ 1903 0bd9 02       		.byte	0x2
+ 1904 0bda 91       		.byte	0x91
+ 1905 0bdb 6C       		.sleb128 -20
+ 1906 0bdc 21       		.uleb128 0x21
+ 1907 0bdd 00000000 		.long	.LASF313
+ 1908 0be1 210C0000 		.long	0xc21
+ 1909 0be5 01       		.byte	0x1
+ 1910 0be6 09       		.byte	0x9
+ 1911 0be7 03       		.byte	0x3
+ 1912 0be8 00000000 		.quad	__PRETTY_FUNCTION__.6557
+ 1912      00000000 
+ 1913 0bf0 21       		.uleb128 0x21
+ 1914 0bf1 00000000 		.long	.LASF314
+ 1915 0bf5 260C0000 		.long	0xc26
+ 1916 0bf9 01       		.byte	0x1
+ 1917 0bfa 09       		.byte	0x9
+ 1918 0bfb 03       		.byte	0x3
+ 1919 0bfc 00000000 		.quad	__func__.6558
+ 1919      00000000 
+ 1920 0c04 00       		.byte	0x0
+ 1921 0c05 07       		.uleb128 0x7
+ 1922 0c06 08       		.byte	0x8
+ 1923 0c07 0B0C0000 		.long	0xc0b
+ 1924 0c0b 07       		.uleb128 0x7
+ 1925 0c0c 08       		.byte	0x8
+ 1926 0c0d AE030000 		.long	0x3ae
+ 1927 0c11 22       		.uleb128 0x22
+ 1928 0c12 96000000 		.long	0x96
+ 1929 0c16 210C0000 		.long	0xc21
+ 1930 0c1a 0D       		.uleb128 0xd
+ 1931 0c1b 88000000 		.long	0x88
+ 1932 0c1f 17       		.byte	0x17
+ 1933 0c20 00       		.byte	0x0
+ 1934 0c21 08       		.uleb128 0x8
+ 1935 0c22 110C0000 		.long	0xc11
+ 1936 0c26 08       		.uleb128 0x8
+ 1937 0c27 110C0000 		.long	0xc11
+ 1938 0c2b 22       		.uleb128 0x22
+ 1939 0c2c 96000000 		.long	0x96
+ 1940 0c30 3B0C0000 		.long	0xc3b
+
GAS LISTING /tmp/ccIvKeEl.s 			page 42
+
+
+ 1941 0c34 0D       		.uleb128 0xd
+ 1942 0c35 88000000 		.long	0x88
+ 1943 0c39 09       		.byte	0x9
+ 1944 0c3a 00       		.byte	0x0
+ 1945 0c3b 23       		.uleb128 0x23
+ 1946 0c3c 00000000 		.long	.LASF315
+ 1947 0c40 01       		.byte	0x1
+ 1948 0c41 3C       		.byte	0x3c
+ 1949 0c42 500C0000 		.long	0xc50
+ 1950 0c46 09       		.byte	0x9
+ 1951 0c47 03       		.byte	0x3
+ 1952 0c48 00000000 		.quad	KNullBlockCipherVecaes_ncbi_name
+ 1952      00000000 
+ 1953 0c50 08       		.uleb128 0x8
+ 1954 0c51 2B0C0000 		.long	0xc2b
+ 1955 0c55 23       		.uleb128 0x23
+ 1956 0c56 00000000 		.long	.LASF316
+ 1957 0c5a 01       		.byte	0x1
+ 1958 0c5b CE       		.byte	0xce
+ 1959 0c5c 6A0C0000 		.long	0xc6a
+ 1960 0c60 09       		.byte	0x9
+ 1961 0c61 03       		.byte	0x3
+ 1962 0c62 00000000 		.quad	KNullBlockCipherVec_vt_
+ 1962      00000000 
+ 1963 0c6a 08       		.uleb128 0x8
+ 1964 0c6b C1020000 		.long	0x2c1
+ 1965 0c6f 00       		.byte	0x0
+ 1966              		.section	.debug_abbrev
+ 1967 0000 01       		.uleb128 0x1
+ 1968 0001 11       		.uleb128 0x11
+ 1969 0002 01       		.byte	0x1
+ 1970 0003 25       		.uleb128 0x25
+ 1971 0004 0E       		.uleb128 0xe
+ 1972 0005 13       		.uleb128 0x13
+ 1973 0006 0B       		.uleb128 0xb
+ 1974 0007 03       		.uleb128 0x3
+ 1975 0008 0E       		.uleb128 0xe
+ 1976 0009 1B       		.uleb128 0x1b
+ 1977 000a 0E       		.uleb128 0xe
+ 1978 000b 11       		.uleb128 0x11
+ 1979 000c 01       		.uleb128 0x1
+ 1980 000d 12       		.uleb128 0x12
+ 1981 000e 01       		.uleb128 0x1
+ 1982 000f 10       		.uleb128 0x10
+ 1983 0010 06       		.uleb128 0x6
+ 1984 0011 00       		.byte	0x0
+ 1985 0012 00       		.byte	0x0
+ 1986 0013 02       		.uleb128 0x2
+ 1987 0014 24       		.uleb128 0x24
+ 1988 0015 00       		.byte	0x0
+ 1989 0016 0B       		.uleb128 0xb
+ 1990 0017 0B       		.uleb128 0xb
+ 1991 0018 3E       		.uleb128 0x3e
+ 1992 0019 0B       		.uleb128 0xb
+ 1993 001a 03       		.uleb128 0x3
+ 1994 001b 0E       		.uleb128 0xe
+ 1995 001c 00       		.byte	0x0
+
GAS LISTING /tmp/ccIvKeEl.s 			page 43
+
+
+ 1996 001d 00       		.byte	0x0
+ 1997 001e 03       		.uleb128 0x3
+ 1998 001f 24       		.uleb128 0x24
+ 1999 0020 00       		.byte	0x0
+ 2000 0021 0B       		.uleb128 0xb
+ 2001 0022 0B       		.uleb128 0xb
+ 2002 0023 3E       		.uleb128 0x3e
+ 2003 0024 0B       		.uleb128 0xb
+ 2004 0025 03       		.uleb128 0x3
+ 2005 0026 08       		.uleb128 0x8
+ 2006 0027 00       		.byte	0x0
+ 2007 0028 00       		.byte	0x0
+ 2008 0029 04       		.uleb128 0x4
+ 2009 002a 16       		.uleb128 0x16
+ 2010 002b 00       		.byte	0x0
+ 2011 002c 03       		.uleb128 0x3
+ 2012 002d 0E       		.uleb128 0xe
+ 2013 002e 3A       		.uleb128 0x3a
+ 2014 002f 0B       		.uleb128 0xb
+ 2015 0030 3B       		.uleb128 0x3b
+ 2016 0031 0B       		.uleb128 0xb
+ 2017 0032 49       		.uleb128 0x49
+ 2018 0033 13       		.uleb128 0x13
+ 2019 0034 00       		.byte	0x0
+ 2020 0035 00       		.byte	0x0
+ 2021 0036 05       		.uleb128 0x5
+ 2022 0037 0F       		.uleb128 0xf
+ 2023 0038 00       		.byte	0x0
+ 2024 0039 0B       		.uleb128 0xb
+ 2025 003a 0B       		.uleb128 0xb
+ 2026 003b 00       		.byte	0x0
+ 2027 003c 00       		.byte	0x0
+ 2028 003d 06       		.uleb128 0x6
+ 2029 003e 24       		.uleb128 0x24
+ 2030 003f 00       		.byte	0x0
+ 2031 0040 0B       		.uleb128 0xb
+ 2032 0041 0B       		.uleb128 0xb
+ 2033 0042 3E       		.uleb128 0x3e
+ 2034 0043 0B       		.uleb128 0xb
+ 2035 0044 00       		.byte	0x0
+ 2036 0045 00       		.byte	0x0
+ 2037 0046 07       		.uleb128 0x7
+ 2038 0047 0F       		.uleb128 0xf
+ 2039 0048 00       		.byte	0x0
+ 2040 0049 0B       		.uleb128 0xb
+ 2041 004a 0B       		.uleb128 0xb
+ 2042 004b 49       		.uleb128 0x49
+ 2043 004c 13       		.uleb128 0x13
+ 2044 004d 00       		.byte	0x0
+ 2045 004e 00       		.byte	0x0
+ 2046 004f 08       		.uleb128 0x8
+ 2047 0050 26       		.uleb128 0x26
+ 2048 0051 00       		.byte	0x0
+ 2049 0052 49       		.uleb128 0x49
+ 2050 0053 13       		.uleb128 0x13
+ 2051 0054 00       		.byte	0x0
+ 2052 0055 00       		.byte	0x0
+
GAS LISTING /tmp/ccIvKeEl.s 			page 44
+
+
+ 2053 0056 09       		.uleb128 0x9
+ 2054 0057 04       		.uleb128 0x4
+ 2055 0058 01       		.byte	0x1
+ 2056 0059 0B       		.uleb128 0xb
+ 2057 005a 0B       		.uleb128 0xb
+ 2058 005b 3A       		.uleb128 0x3a
+ 2059 005c 0B       		.uleb128 0xb
+ 2060 005d 3B       		.uleb128 0x3b
+ 2061 005e 0B       		.uleb128 0xb
+ 2062 005f 01       		.uleb128 0x1
+ 2063 0060 13       		.uleb128 0x13
+ 2064 0061 00       		.byte	0x0
+ 2065 0062 00       		.byte	0x0
+ 2066 0063 0A       		.uleb128 0xa
+ 2067 0064 28       		.uleb128 0x28
+ 2068 0065 00       		.byte	0x0
+ 2069 0066 03       		.uleb128 0x3
+ 2070 0067 0E       		.uleb128 0xe
+ 2071 0068 1C       		.uleb128 0x1c
+ 2072 0069 0D       		.uleb128 0xd
+ 2073 006a 00       		.byte	0x0
+ 2074 006b 00       		.byte	0x0
+ 2075 006c 0B       		.uleb128 0xb
+ 2076 006d 26       		.uleb128 0x26
+ 2077 006e 00       		.byte	0x0
+ 2078 006f 00       		.byte	0x0
+ 2079 0070 00       		.byte	0x0
+ 2080 0071 0C       		.uleb128 0xc
+ 2081 0072 01       		.uleb128 0x1
+ 2082 0073 01       		.byte	0x1
+ 2083 0074 8742     		.uleb128 0x2107
+ 2084 0076 0C       		.uleb128 0xc
+ 2085 0077 49       		.uleb128 0x49
+ 2086 0078 13       		.uleb128 0x13
+ 2087 0079 01       		.uleb128 0x1
+ 2088 007a 13       		.uleb128 0x13
+ 2089 007b 00       		.byte	0x0
+ 2090 007c 00       		.byte	0x0
+ 2091 007d 0D       		.uleb128 0xd
+ 2092 007e 21       		.uleb128 0x21
+ 2093 007f 00       		.byte	0x0
+ 2094 0080 49       		.uleb128 0x49
+ 2095 0081 13       		.uleb128 0x13
+ 2096 0082 2F       		.uleb128 0x2f
+ 2097 0083 0B       		.uleb128 0xb
+ 2098 0084 00       		.byte	0x0
+ 2099 0085 00       		.byte	0x0
+ 2100 0086 0E       		.uleb128 0xe
+ 2101 0087 13       		.uleb128 0x13
+ 2102 0088 01       		.byte	0x1
+ 2103 0089 03       		.uleb128 0x3
+ 2104 008a 0E       		.uleb128 0xe
+ 2105 008b 0B       		.uleb128 0xb
+ 2106 008c 0B       		.uleb128 0xb
+ 2107 008d 3A       		.uleb128 0x3a
+ 2108 008e 0B       		.uleb128 0xb
+ 2109 008f 3B       		.uleb128 0x3b
+
GAS LISTING /tmp/ccIvKeEl.s 			page 45
+
+
+ 2110 0090 0B       		.uleb128 0xb
+ 2111 0091 01       		.uleb128 0x1
+ 2112 0092 13       		.uleb128 0x13
+ 2113 0093 00       		.byte	0x0
+ 2114 0094 00       		.byte	0x0
+ 2115 0095 0F       		.uleb128 0xf
+ 2116 0096 0D       		.uleb128 0xd
+ 2117 0097 00       		.byte	0x0
+ 2118 0098 03       		.uleb128 0x3
+ 2119 0099 08       		.uleb128 0x8
+ 2120 009a 3A       		.uleb128 0x3a
+ 2121 009b 0B       		.uleb128 0xb
+ 2122 009c 3B       		.uleb128 0x3b
+ 2123 009d 0B       		.uleb128 0xb
+ 2124 009e 49       		.uleb128 0x49
+ 2125 009f 13       		.uleb128 0x13
+ 2126 00a0 38       		.uleb128 0x38
+ 2127 00a1 0A       		.uleb128 0xa
+ 2128 00a2 00       		.byte	0x0
+ 2129 00a3 00       		.byte	0x0
+ 2130 00a4 10       		.uleb128 0x10
+ 2131 00a5 0D       		.uleb128 0xd
+ 2132 00a6 00       		.byte	0x0
+ 2133 00a7 03       		.uleb128 0x3
+ 2134 00a8 0E       		.uleb128 0xe
+ 2135 00a9 3A       		.uleb128 0x3a
+ 2136 00aa 0B       		.uleb128 0xb
+ 2137 00ab 3B       		.uleb128 0x3b
+ 2138 00ac 0B       		.uleb128 0xb
+ 2139 00ad 49       		.uleb128 0x49
+ 2140 00ae 13       		.uleb128 0x13
+ 2141 00af 38       		.uleb128 0x38
+ 2142 00b0 0A       		.uleb128 0xa
+ 2143 00b1 00       		.byte	0x0
+ 2144 00b2 00       		.byte	0x0
+ 2145 00b3 11       		.uleb128 0x11
+ 2146 00b4 17       		.uleb128 0x17
+ 2147 00b5 01       		.byte	0x1
+ 2148 00b6 03       		.uleb128 0x3
+ 2149 00b7 0E       		.uleb128 0xe
+ 2150 00b8 0B       		.uleb128 0xb
+ 2151 00b9 0B       		.uleb128 0xb
+ 2152 00ba 3A       		.uleb128 0x3a
+ 2153 00bb 0B       		.uleb128 0xb
+ 2154 00bc 3B       		.uleb128 0x3b
+ 2155 00bd 0B       		.uleb128 0xb
+ 2156 00be 01       		.uleb128 0x1
+ 2157 00bf 13       		.uleb128 0x13
+ 2158 00c0 00       		.byte	0x0
+ 2159 00c1 00       		.byte	0x0
+ 2160 00c2 12       		.uleb128 0x12
+ 2161 00c3 0D       		.uleb128 0xd
+ 2162 00c4 00       		.byte	0x0
+ 2163 00c5 03       		.uleb128 0x3
+ 2164 00c6 0E       		.uleb128 0xe
+ 2165 00c7 3A       		.uleb128 0x3a
+ 2166 00c8 0B       		.uleb128 0xb
+
GAS LISTING /tmp/ccIvKeEl.s 			page 46
+
+
+ 2167 00c9 3B       		.uleb128 0x3b
+ 2168 00ca 0B       		.uleb128 0xb
+ 2169 00cb 49       		.uleb128 0x49
+ 2170 00cc 13       		.uleb128 0x13
+ 2171 00cd 00       		.byte	0x0
+ 2172 00ce 00       		.byte	0x0
+ 2173 00cf 13       		.uleb128 0x13
+ 2174 00d0 0D       		.uleb128 0xd
+ 2175 00d1 00       		.byte	0x0
+ 2176 00d2 03       		.uleb128 0x3
+ 2177 00d3 08       		.uleb128 0x8
+ 2178 00d4 3A       		.uleb128 0x3a
+ 2179 00d5 0B       		.uleb128 0xb
+ 2180 00d6 3B       		.uleb128 0x3b
+ 2181 00d7 0B       		.uleb128 0xb
+ 2182 00d8 49       		.uleb128 0x49
+ 2183 00d9 13       		.uleb128 0x13
+ 2184 00da 00       		.byte	0x0
+ 2185 00db 00       		.byte	0x0
+ 2186 00dc 14       		.uleb128 0x14
+ 2187 00dd 15       		.uleb128 0x15
+ 2188 00de 01       		.byte	0x1
+ 2189 00df 27       		.uleb128 0x27
+ 2190 00e0 0C       		.uleb128 0xc
+ 2191 00e1 01       		.uleb128 0x1
+ 2192 00e2 13       		.uleb128 0x13
+ 2193 00e3 00       		.byte	0x0
+ 2194 00e4 00       		.byte	0x0
+ 2195 00e5 15       		.uleb128 0x15
+ 2196 00e6 05       		.uleb128 0x5
+ 2197 00e7 00       		.byte	0x0
+ 2198 00e8 49       		.uleb128 0x49
+ 2199 00e9 13       		.uleb128 0x13
+ 2200 00ea 00       		.byte	0x0
+ 2201 00eb 00       		.byte	0x0
+ 2202 00ec 16       		.uleb128 0x16
+ 2203 00ed 15       		.uleb128 0x15
+ 2204 00ee 01       		.byte	0x1
+ 2205 00ef 49       		.uleb128 0x49
+ 2206 00f0 13       		.uleb128 0x13
+ 2207 00f1 01       		.uleb128 0x1
+ 2208 00f2 13       		.uleb128 0x13
+ 2209 00f3 00       		.byte	0x0
+ 2210 00f4 00       		.byte	0x0
+ 2211 00f5 17       		.uleb128 0x17
+ 2212 00f6 18       		.uleb128 0x18
+ 2213 00f7 00       		.byte	0x0
+ 2214 00f8 00       		.byte	0x0
+ 2215 00f9 00       		.byte	0x0
+ 2216 00fa 18       		.uleb128 0x18
+ 2217 00fb 15       		.uleb128 0x15
+ 2218 00fc 01       		.byte	0x1
+ 2219 00fd 27       		.uleb128 0x27
+ 2220 00fe 0C       		.uleb128 0xc
+ 2221 00ff 49       		.uleb128 0x49
+ 2222 0100 13       		.uleb128 0x13
+ 2223 0101 01       		.uleb128 0x1
+
GAS LISTING /tmp/ccIvKeEl.s 			page 47
+
+
+ 2224 0102 13       		.uleb128 0x13
+ 2225 0103 00       		.byte	0x0
+ 2226 0104 00       		.byte	0x0
+ 2227 0105 19       		.uleb128 0x19
+ 2228 0106 04       		.uleb128 0x4
+ 2229 0107 01       		.byte	0x1
+ 2230 0108 03       		.uleb128 0x3
+ 2231 0109 0E       		.uleb128 0xe
+ 2232 010a 0B       		.uleb128 0xb
+ 2233 010b 0B       		.uleb128 0xb
+ 2234 010c 3A       		.uleb128 0x3a
+ 2235 010d 0B       		.uleb128 0xb
+ 2236 010e 3B       		.uleb128 0x3b
+ 2237 010f 0B       		.uleb128 0xb
+ 2238 0110 01       		.uleb128 0x1
+ 2239 0111 13       		.uleb128 0x13
+ 2240 0112 00       		.byte	0x0
+ 2241 0113 00       		.byte	0x0
+ 2242 0114 1A       		.uleb128 0x1a
+ 2243 0115 04       		.uleb128 0x4
+ 2244 0116 01       		.byte	0x1
+ 2245 0117 03       		.uleb128 0x3
+ 2246 0118 0E       		.uleb128 0xe
+ 2247 0119 0B       		.uleb128 0xb
+ 2248 011a 0B       		.uleb128 0xb
+ 2249 011b 3A       		.uleb128 0x3a
+ 2250 011c 0B       		.uleb128 0xb
+ 2251 011d 3B       		.uleb128 0x3b
+ 2252 011e 05       		.uleb128 0x5
+ 2253 011f 01       		.uleb128 0x1
+ 2254 0120 13       		.uleb128 0x13
+ 2255 0121 00       		.byte	0x0
+ 2256 0122 00       		.byte	0x0
+ 2257 0123 1B       		.uleb128 0x1b
+ 2258 0124 2E       		.uleb128 0x2e
+ 2259 0125 01       		.byte	0x1
+ 2260 0126 03       		.uleb128 0x3
+ 2261 0127 0E       		.uleb128 0xe
+ 2262 0128 3A       		.uleb128 0x3a
+ 2263 0129 0B       		.uleb128 0xb
+ 2264 012a 3B       		.uleb128 0x3b
+ 2265 012b 0B       		.uleb128 0xb
+ 2266 012c 27       		.uleb128 0x27
+ 2267 012d 0C       		.uleb128 0xc
+ 2268 012e 11       		.uleb128 0x11
+ 2269 012f 01       		.uleb128 0x1
+ 2270 0130 12       		.uleb128 0x12
+ 2271 0131 01       		.uleb128 0x1
+ 2272 0132 40       		.uleb128 0x40
+ 2273 0133 06       		.uleb128 0x6
+ 2274 0134 01       		.uleb128 0x1
+ 2275 0135 13       		.uleb128 0x13
+ 2276 0136 00       		.byte	0x0
+ 2277 0137 00       		.byte	0x0
+ 2278 0138 1C       		.uleb128 0x1c
+ 2279 0139 05       		.uleb128 0x5
+ 2280 013a 00       		.byte	0x0
+
GAS LISTING /tmp/ccIvKeEl.s 			page 48
+
+
+ 2281 013b 03       		.uleb128 0x3
+ 2282 013c 0E       		.uleb128 0xe
+ 2283 013d 3A       		.uleb128 0x3a
+ 2284 013e 0B       		.uleb128 0xb
+ 2285 013f 3B       		.uleb128 0x3b
+ 2286 0140 0B       		.uleb128 0xb
+ 2287 0141 49       		.uleb128 0x49
+ 2288 0142 13       		.uleb128 0x13
+ 2289 0143 02       		.uleb128 0x2
+ 2290 0144 0A       		.uleb128 0xa
+ 2291 0145 00       		.byte	0x0
+ 2292 0146 00       		.byte	0x0
+ 2293 0147 1D       		.uleb128 0x1d
+ 2294 0148 2E       		.uleb128 0x2e
+ 2295 0149 00       		.byte	0x0
+ 2296 014a 03       		.uleb128 0x3
+ 2297 014b 0E       		.uleb128 0xe
+ 2298 014c 3A       		.uleb128 0x3a
+ 2299 014d 0B       		.uleb128 0xb
+ 2300 014e 3B       		.uleb128 0x3b
+ 2301 014f 0B       		.uleb128 0xb
+ 2302 0150 49       		.uleb128 0x49
+ 2303 0151 13       		.uleb128 0x13
+ 2304 0152 11       		.uleb128 0x11
+ 2305 0153 01       		.uleb128 0x1
+ 2306 0154 12       		.uleb128 0x12
+ 2307 0155 01       		.uleb128 0x1
+ 2308 0156 40       		.uleb128 0x40
+ 2309 0157 06       		.uleb128 0x6
+ 2310 0158 00       		.byte	0x0
+ 2311 0159 00       		.byte	0x0
+ 2312 015a 1E       		.uleb128 0x1e
+ 2313 015b 2E       		.uleb128 0x2e
+ 2314 015c 01       		.byte	0x1
+ 2315 015d 03       		.uleb128 0x3
+ 2316 015e 0E       		.uleb128 0xe
+ 2317 015f 3A       		.uleb128 0x3a
+ 2318 0160 0B       		.uleb128 0xb
+ 2319 0161 3B       		.uleb128 0x3b
+ 2320 0162 0B       		.uleb128 0xb
+ 2321 0163 27       		.uleb128 0x27
+ 2322 0164 0C       		.uleb128 0xc
+ 2323 0165 49       		.uleb128 0x49
+ 2324 0166 13       		.uleb128 0x13
+ 2325 0167 11       		.uleb128 0x11
+ 2326 0168 01       		.uleb128 0x1
+ 2327 0169 12       		.uleb128 0x12
+ 2328 016a 01       		.uleb128 0x1
+ 2329 016b 40       		.uleb128 0x40
+ 2330 016c 06       		.uleb128 0x6
+ 2331 016d 01       		.uleb128 0x1
+ 2332 016e 13       		.uleb128 0x13
+ 2333 016f 00       		.byte	0x0
+ 2334 0170 00       		.byte	0x0
+ 2335 0171 1F       		.uleb128 0x1f
+ 2336 0172 2E       		.uleb128 0x2e
+ 2337 0173 01       		.byte	0x1
+
GAS LISTING /tmp/ccIvKeEl.s 			page 49
+
+
+ 2338 0174 3F       		.uleb128 0x3f
+ 2339 0175 0C       		.uleb128 0xc
+ 2340 0176 03       		.uleb128 0x3
+ 2341 0177 0E       		.uleb128 0xe
+ 2342 0178 3A       		.uleb128 0x3a
+ 2343 0179 0B       		.uleb128 0xb
+ 2344 017a 3B       		.uleb128 0x3b
+ 2345 017b 0B       		.uleb128 0xb
+ 2346 017c 27       		.uleb128 0x27
+ 2347 017d 0C       		.uleb128 0xc
+ 2348 017e 49       		.uleb128 0x49
+ 2349 017f 13       		.uleb128 0x13
+ 2350 0180 11       		.uleb128 0x11
+ 2351 0181 01       		.uleb128 0x1
+ 2352 0182 12       		.uleb128 0x12
+ 2353 0183 01       		.uleb128 0x1
+ 2354 0184 40       		.uleb128 0x40
+ 2355 0185 06       		.uleb128 0x6
+ 2356 0186 01       		.uleb128 0x1
+ 2357 0187 13       		.uleb128 0x13
+ 2358 0188 00       		.byte	0x0
+ 2359 0189 00       		.byte	0x0
+ 2360 018a 20       		.uleb128 0x20
+ 2361 018b 34       		.uleb128 0x34
+ 2362 018c 00       		.byte	0x0
+ 2363 018d 03       		.uleb128 0x3
+ 2364 018e 08       		.uleb128 0x8
+ 2365 018f 3A       		.uleb128 0x3a
+ 2366 0190 0B       		.uleb128 0xb
+ 2367 0191 3B       		.uleb128 0x3b
+ 2368 0192 0B       		.uleb128 0xb
+ 2369 0193 49       		.uleb128 0x49
+ 2370 0194 13       		.uleb128 0x13
+ 2371 0195 02       		.uleb128 0x2
+ 2372 0196 0A       		.uleb128 0xa
+ 2373 0197 00       		.byte	0x0
+ 2374 0198 00       		.byte	0x0
+ 2375 0199 21       		.uleb128 0x21
+ 2376 019a 34       		.uleb128 0x34
+ 2377 019b 00       		.byte	0x0
+ 2378 019c 03       		.uleb128 0x3
+ 2379 019d 0E       		.uleb128 0xe
+ 2380 019e 49       		.uleb128 0x49
+ 2381 019f 13       		.uleb128 0x13
+ 2382 01a0 34       		.uleb128 0x34
+ 2383 01a1 0C       		.uleb128 0xc
+ 2384 01a2 02       		.uleb128 0x2
+ 2385 01a3 0A       		.uleb128 0xa
+ 2386 01a4 00       		.byte	0x0
+ 2387 01a5 00       		.byte	0x0
+ 2388 01a6 22       		.uleb128 0x22
+ 2389 01a7 01       		.uleb128 0x1
+ 2390 01a8 01       		.byte	0x1
+ 2391 01a9 49       		.uleb128 0x49
+ 2392 01aa 13       		.uleb128 0x13
+ 2393 01ab 01       		.uleb128 0x1
+ 2394 01ac 13       		.uleb128 0x13
+
GAS LISTING /tmp/ccIvKeEl.s 			page 50
+
+
+ 2395 01ad 00       		.byte	0x0
+ 2396 01ae 00       		.byte	0x0
+ 2397 01af 23       		.uleb128 0x23
+ 2398 01b0 34       		.uleb128 0x34
+ 2399 01b1 00       		.byte	0x0
+ 2400 01b2 03       		.uleb128 0x3
+ 2401 01b3 0E       		.uleb128 0xe
+ 2402 01b4 3A       		.uleb128 0x3a
+ 2403 01b5 0B       		.uleb128 0xb
+ 2404 01b6 3B       		.uleb128 0x3b
+ 2405 01b7 0B       		.uleb128 0xb
+ 2406 01b8 49       		.uleb128 0x49
+ 2407 01b9 13       		.uleb128 0x13
+ 2408 01ba 02       		.uleb128 0x2
+ 2409 01bb 0A       		.uleb128 0xa
+ 2410 01bc 00       		.byte	0x0
+ 2411 01bd 00       		.byte	0x0
+ 2412 01be 00       		.byte	0x0
+ 2413              		.section	.debug_pubnames,"", at progbits
+ 2414 0000 2A000000 		.long	0x2a
+ 2415 0004 0200     		.value	0x2
+ 2416 0006 00000000 		.long	.Ldebug_info0
+ 2417 000a 700C0000 		.long	0xc70
+ 2418 000e 9C0B0000 		.long	0xb9c
+ 2419 0012 4B4E756C 		.string	"KNullBlockCipherVecMake"
+ 2419      6C426C6F 
+ 2419      636B4369 
+ 2419      70686572 
+ 2419      5665634D 
+ 2420 002a 00000000 		.long	0x0
+ 2421              		.section	.debug_aranges,"", at progbits
+ 2422 0000 2C000000 		.long	0x2c
+ 2423 0004 0200     		.value	0x2
+ 2424 0006 00000000 		.long	.Ldebug_info0
+ 2425 000a 08       		.byte	0x8
+ 2426 000b 00       		.byte	0x0
+ 2427 000c 0000     		.value	0x0
+ 2428 000e 0000     		.value	0x0
+ 2429 0010 00000000 		.quad	.Ltext0
+ 2429      00000000 
+ 2430 0018 0C010000 		.quad	.Letext0-.Ltext0
+ 2430      00000000 
+ 2431 0020 00000000 		.quad	0x0
+ 2431      00000000 
+ 2432 0028 00000000 		.quad	0x0
+ 2432      00000000 
+ 2433              		.section	.debug_str,"MS", at progbits,1
+ 2434              	.LASF267:
+ 2435 0000 7263496E 		.string	"rcInsufficient"
+ 2435      73756666 
+ 2435      69636965 
+ 2435      6E7400
+ 2436              	.LASF284:
+ 2437 000f 72634475 		.string	"rcDuplicate"
+ 2437      706C6963 
+ 2437      61746500 
+ 2438              	.LASF87:
+
GAS LISTING /tmp/ccIvKeEl.s 			page 51
+
+
+ 2439 001b 7263436F 		.string	"rcCondition"
+ 2439      6E646974 
+ 2439      696F6E00 
+ 2440              	.LASF201:
+ 2441 0027 7263456E 		.string	"rcEncrypting"
+ 2441      63727970 
+ 2441      74696E67 
+ 2441      00
+ 2442              	.LASF160:
+ 2443 0034 72634F70 		.string	"rcOpening"
+ 2443      656E696E 
+ 2443      6700
+ 2444              	.LASF168:
+ 2445 003e 72635065 		.string	"rcPersisting"
+ 2445      72736973 
+ 2445      74696E67 
+ 2445      00
+ 2446              	.LASF206:
+ 2447 004b 72635365 		.string	"rcSending"
+ 2447      6E64696E 
+ 2447      6700
+ 2448              	.LASF200:
+ 2449 0055 72634170 		.string	"rcAppending"
+ 2449      70656E64 
+ 2449      696E6700 
+ 2450              	.LASF186:
+ 2451 0061 72635369 		.string	"rcSignaling"
+ 2451      676E616C 
+ 2451      696E6700 
+ 2452              	.LASF13:
+ 2453 006d 4442475F 		.string	"DBG_BLAST"
+ 2453      424C4153 
+ 2453      5400
+ 2454              	.LASF242:
+ 2455 0077 72635369 		.string	"rcSignalSet"
+ 2455      676E616C 
+ 2455      53657400 
+ 2456              	.LASF188:
+ 2457 0083 72634174 		.string	"rcAttaching"
+ 2457      74616368 
+ 2457      696E6700 
+ 2458              	.LASF120:
+ 2459 008f 72635461 		.string	"rcTable"
+ 2459      626C6500 
+ 2460              	.LASF84:
+ 2461 0097 72634275 		.string	"rcBuffer"
+ 2461      66666572 
+ 2461      00
+ 2462              	.LASF216:
+ 2463 00a0 72634D65 		.string	"rcMemory"
+ 2463      6D6F7279 
+ 2463      00
+ 2464              	.LASF149:
+ 2465 00a9 72634C6F 		.string	"rcLocking"
+ 2465      636B696E 
+ 2465      6700
+ 2466              	.LASF184:
+
GAS LISTING /tmp/ccIvKeEl.s 			page 52
+
+
+ 2467 00b3 72635061 		.string	"rcParsing"
+ 2467      7273696E 
+ 2467      6700
+ 2468              	.LASF213:
+ 2469 00bd 72635365 		.string	"rcSelf"
+ 2469      6C6600
+ 2470              	.LASF106:
+ 2471 00c4 72634D65 		.string	"rcMetadata"
+ 2471      74616461 
+ 2471      746100
+ 2472              	.LASF229:
+ 2473 00cf 72634172 		.string	"rcArcHardLink"
+ 2473      63486172 
+ 2473      644C696E 
+ 2473      6B00
+ 2474              	.LASF55:
+ 2475 00dd 7263436F 		.string	"rcCont"
+ 2475      6E7400
+ 2476              	.LASF237:
+ 2477 00e4 72634368 		.string	"rcChecksum"
+ 2477      65636B73 
+ 2477      756D00
+ 2478              	.LASF314:
+ 2479 00ef 5F5F6675 		.string	"__func__"
+ 2479      6E635F5F 
+ 2479      00
+ 2480              	.LASF281:
+ 2481 00f8 7263546F 		.string	"rcTooShort"
+ 2481      6F53686F 
+ 2481      727400
+ 2482              	.LASF111:
+ 2483 0103 72635061 		.string	"rcPagemap"
+ 2483      67656D61 
+ 2483      7000
+ 2484              	.LASF63:
+ 2485 010d 72634170 		.string	"rcApp"
+ 2485      7000
+ 2486              	.LASF94:
+ 2487 0113 72634669 		.string	"rcFileDesc"
+ 2487      6C654465 
+ 2487      736300
+ 2488              	.LASF233:
+ 2489 011e 72634974 		.string	"rcItem"
+ 2489      656D00
+ 2490              	.LASF125:
+ 2491 0125 72635472 		.string	"rcTrie"
+ 2491      696500
+ 2492              	.LASF66:
+ 2493 012c 72634C61 		.string	"rcLastModule_v1_0"
+ 2493      73744D6F 
+ 2493      64756C65 
+ 2493      5F76315F 
+ 2493      3000
+ 2494              	.LASF73:
+ 2495 013e 72634C61 		.string	"rcLastModule_v1_1"
+ 2495      73744D6F 
+ 2495      64756C65 
+
GAS LISTING /tmp/ccIvKeEl.s 			page 53
+
+
+ 2495      5F76315F 
+ 2495      3100
+ 2496              	.LASF224:
+ 2497 0150 72634279 		.string	"rcByteOrder"
+ 2497      74654F72 
+ 2497      64657200 
+ 2498              	.LASF142:
+ 2499 015c 7263436F 		.string	"rcConstructing"
+ 2499      6E737472 
+ 2499      75637469 
+ 2499      6E6700
+ 2500              	.LASF313:
+ 2501 016b 5F5F5052 		.string	"__PRETTY_FUNCTION__"
+ 2501      45545459 
+ 2501      5F46554E 
+ 2501      4354494F 
+ 2501      4E5F5F00 
+ 2502              	.LASF9:
+ 2503 017f 72635F74 		.string	"rc_t"
+ 2503      00
+ 2504              	.LASF218:
+ 2505 0184 7263466F 		.string	"rcFormat"
+ 2505      726D6174 
+ 2505      00
+ 2506              	.LASF276:
+ 2507 018d 7263556E 		.string	"rcUnauthorized"
+ 2507      61757468 
+ 2507      6F72697A 
+ 2507      656400
+ 2508              	.LASF156:
+ 2509 019c 72635265 		.string	"rcRemoving"
+ 2509      6D6F7669 
+ 2509      6E6700
+ 2510              	.LASF69:
+ 2511 01a7 72634B72 		.string	"rcKrypto"
+ 2511      7970746F 
+ 2511      00
+ 2512              	.LASF309:
+ 2513 01b0 4B4E756C 		.string	"KNullBlockCipherVecDecrypt"
+ 2513      6C426C6F 
+ 2513      636B4369 
+ 2513      70686572 
+ 2513      56656344 
+ 2514              	.LASF147:
+ 2515 01cb 72635669 		.string	"rcVisiting"
+ 2515      73697469 
+ 2515      6E6700
+ 2516              	.LASF77:
+ 2517 01d6 72634172 		.string	"rcArc"
+ 2517      6300
+ 2518              	.LASF52:
+ 2519 01dc 72634578 		.string	"rcExe"
+ 2519      6500
+ 2520              	.LASF282:
+ 2521 01e2 7263546F 		.string	"rcTooLong"
+ 2521      6F4C6F6E 
+ 2521      6700
+
GAS LISTING /tmp/ccIvKeEl.s 			page 54
+
+
+ 2522              	.LASF210:
+ 2523 01ec 52434F62 		.string	"RCObject"
+ 2523      6A656374 
+ 2523      00
+ 2524              	.LASF220:
+ 2525 01f5 7263496E 		.string	"rcInterface"
+ 2525      74657266 
+ 2525      61636500 
+ 2526              	.LASF148:
+ 2527 0201 72635265 		.string	"rcResolving"
+ 2527      736F6C76 
+ 2527      696E6700 
+ 2528              	.LASF90:
+ 2529 020d 72634469 		.string	"rcDirectory"
+ 2529      72656374 
+ 2529      6F727900 
+ 2530              	.LASF2:
+ 2531 0219 6C6F6E67 		.string	"long int"
+ 2531      20696E74 
+ 2531      00
+ 2532              	.LASF178:
+ 2533 0222 72635661 		.string	"rcValidating"
+ 2533      6C696461 
+ 2533      74696E67 
+ 2533      00
+ 2534              	.LASF80:
+ 2535 022f 72634172 		.string	"rcArgv"
+ 2535      677600
+ 2536              	.LASF56:
+ 2537 0236 72634353 		.string	"rcCS"
+ 2537      00
+ 2538              	.LASF137:
+ 2539 023b 72635572 		.string	"rcUri"
+ 2539      6900
+ 2540              	.LASF159:
+ 2541 0241 72634372 		.string	"rcCreating"
+ 2541      65617469 
+ 2541      6E6700
+ 2542              	.LASF45:
+ 2543 024c 656E6372 		.string	"encrypt"
+ 2543      79707400 
+ 2544              	.LASF35:
+ 2545 0254 76313238 		.string	"v128_u8_t"
+ 2545      5F75385F 
+ 2545      7400
+ 2546              	.LASF18:
+ 2547 025e 4442475F 		.string	"DBG_XML"
+ 2547      584D4C00 
+ 2548              	.LASF30:
+ 2549 0266 4442475F 		.string	"DBG_MOD_COUNT"
+ 2549      4D4F445F 
+ 2549      434F554E 
+ 2549      5400
+ 2550              	.LASF61:
+ 2551 0274 72634442 		.string	"rcDB"
+ 2551      00
+ 2552              	.LASF307:
+
GAS LISTING /tmp/ccIvKeEl.s 			page 55
+
+
+ 2553 0279 4B4E756C 		.string	"KNullBlockCipherVecEncrypt"
+ 2553      6C426C6F 
+ 2553      636B4369 
+ 2553      70686572 
+ 2553      56656345 
+ 2554              	.LASF239:
+ 2555 0294 7263436F 		.string	"rcConnection"
+ 2555      6E6E6563 
+ 2555      74696F6E 
+ 2555      00
+ 2556              	.LASF107:
+ 2557 02a1 72634D67 		.string	"rcMgr"
+ 2557      7200
+ 2558              	.LASF269:
+ 2559 02a7 72635669 		.string	"rcViolated"
+ 2559      6F6C6174 
+ 2559      656400
+ 2560              	.LASF202:
+ 2561 02b2 72634465 		.string	"rcDecrypting"
+ 2561      63727970 
+ 2561      74696E67 
+ 2561      00
+ 2562              	.LASF0:
+ 2563 02bf 7369676E 		.string	"signed char"
+ 2563      65642063 
+ 2563      68617200 
+ 2564              	.LASF5:
+ 2565 02cb 75696E74 		.string	"uint8_t"
+ 2565      385F7400 
+ 2566              	.LASF320:
+ 2567 02d3 4B4E756C 		.string	"KNullBlockCipherVecDestroy"
+ 2567      6C426C6F 
+ 2567      636B4369 
+ 2567      70686572 
+ 2567      56656344 
+ 2568              	.LASF85:
+ 2569 02ee 72634368 		.string	"rcChar"
+ 2569      617200
+ 2570              	.LASF70:
+ 2571 02f5 72635244 		.string	"rcRDBMS"
+ 2571      424D5300 
+ 2572              	.LASF179:
+ 2573 02fd 72634578 		.string	"rcExecuting"
+ 2573      65637574 
+ 2573      696E6700 
+ 2574              	.LASF306:
+ 2575 0309 64656372 		.string	"decrypt_key"
+ 2575      7970745F 
+ 2575      6B657900 
+ 2576              	.LASF11:
+ 2577 0315 4442475F 		.string	"DBG_MOD_NOT_FOUND"
+ 2577      4D4F445F 
+ 2577      4E4F545F 
+ 2577      464F554E 
+ 2577      4400
+ 2578              	.LASF166:
+ 2579 0327 72635265 		.string	"rcReverting"
+
GAS LISTING /tmp/ccIvKeEl.s 			page 56
+
+
+ 2579      76657274 
+ 2579      696E6700 
+ 2580              	.LASF82:
+ 2581 0333 72634261 		.string	"rcBarrier"
+ 2581      72726965 
+ 2581      7200
+ 2582              	.LASF266:
+ 2583 033d 72634578 		.string	"rcExhausted"
+ 2583      68617573 
+ 2583      74656400 
+ 2584              	.LASF3:
+ 2585 0349 756E7369 		.string	"unsigned char"
+ 2585      676E6564 
+ 2585      20636861 
+ 2585      7200
+ 2586              	.LASF139:
+ 2587 0357 5243436F 		.string	"RCContext"
+ 2587      6E746578 
+ 2587      7400
+ 2588              	.LASF102:
+ 2589 0361 72634C6F 		.string	"rcLock"
+ 2589      636B00
+ 2590              	.LASF255:
+ 2591 0368 72634261 		.string	"rcBadVersion"
+ 2591      64566572 
+ 2591      73696F6E 
+ 2591      00
+ 2592              	.LASF256:
+ 2593 0375 72634465 		.string	"rcDestroyed"
+ 2593      7374726F 
+ 2593      79656400 
+ 2594              	.LASF119:
+ 2595 0381 72635374 		.string	"rcString"
+ 2595      72696E67 
+ 2595      00
+ 2596              	.LASF315:
+ 2597 038a 4B4E756C 		.string	"KNullBlockCipherVecaes_ncbi_name"
+ 2597      6C426C6F 
+ 2597      636B4369 
+ 2597      70686572 
+ 2597      56656361 
+ 2598              	.LASF81:
+ 2599 03ab 72634174 		.string	"rcAttr"
+ 2599      747200
+ 2600              	.LASF103:
+ 2601 03b2 72634C6F 		.string	"rcLog"
+ 2601      6700
+ 2602              	.LASF312:
+ 2603 03b8 6E65775F 		.string	"new_obj"
+ 2603      6F626A00 
+ 2604              	.LASF14:
+ 2605 03c0 4442475F 		.string	"DBG_KDB"
+ 2605      4B444200 
+ 2606              	.LASF207:
+ 2607 03c8 72635072 		.string	"rcProcessing"
+ 2607      6F636573 
+ 2607      73696E67 
+
GAS LISTING /tmp/ccIvKeEl.s 			page 57
+
+
+ 2607      00
+ 2608              	.LASF57:
+ 2609 03d5 72634646 		.string	"rcFF"
+ 2609      00
+ 2610              	.LASF311:
+ 2611 03da 5F426F6F 		.string	"_Bool"
+ 2611      6C00
+ 2612              	.LASF58:
+ 2613 03e0 72634653 		.string	"rcFS"
+ 2613      00
+ 2614              	.LASF145:
+ 2615 03e5 72634163 		.string	"rcAccessing"
+ 2615      63657373 
+ 2615      696E6700 
+ 2616              	.LASF263:
+ 2617 03f1 7263496E 		.string	"rcInterrupted"
+ 2617      74657272 
+ 2617      75707465 
+ 2617      6400
+ 2618              	.LASF271:
+ 2619 03ff 72634E6F 		.string	"rcNotFound"
+ 2619      74466F75 
+ 2619      6E6400
+ 2620              	.LASF10:
+ 2621 040a 63686172 		.string	"char"
+ 2621      00
+ 2622              	.LASF109:
+ 2623 040f 72634E6F 		.string	"rcNode"
+ 2623      646500
+ 2624              	.LASF28:
+ 2625 0416 4442475F 		.string	"DBG_AES"
+ 2625      41455300 
+ 2626              	.LASF240:
+ 2627 041e 72634572 		.string	"rcError"
+ 2627      726F7200 
+ 2628              	.LASF157:
+ 2629 0426 7263436C 		.string	"rcClearing"
+ 2629      65617269 
+ 2629      6E6700
+ 2630              	.LASF215:
+ 2631 0431 72634F66 		.string	"rcOffset"
+ 2631      66736574 
+ 2631      00
+ 2632              	.LASF161:
+ 2633 043a 7263436C 		.string	"rcClosing"
+ 2633      6F73696E 
+ 2633      6700
+ 2634              	.LASF93:
+ 2635 0444 72634669 		.string	"rcFile"
+ 2635      6C6500
+ 2636              	.LASF122:
+ 2637 044b 72635469 		.string	"rcTimeout"
+ 2637      6D656F75 
+ 2637      7400
+ 2638              	.LASF110:
+ 2639 0455 72634E75 		.string	"rcNumeral"
+ 2639      6D657261 
+
GAS LISTING /tmp/ccIvKeEl.s 			page 58
+
+
+ 2639      6C00
+ 2640              	.LASF187:
+ 2641 045f 72635761 		.string	"rcWaiting"
+ 2641      6974696E 
+ 2641      6700
+ 2642              	.LASF191:
+ 2643 0469 72634650 		.string	"rcFPCoding"
+ 2643      436F6469 
+ 2643      6E6700
+ 2644              	.LASF243:
+ 2645 0474 72635369 		.string	"rcSize"
+ 2645      7A6500
+ 2646              	.LASF228:
+ 2647 047b 72634469 		.string	"rcDirEntry"
+ 2647      72456E74 
+ 2647      727900
+ 2648              	.LASF180:
+ 2649 0486 72634875 		.string	"rcHuffmanCoding"
+ 2649      66666D61 
+ 2649      6E436F64 
+ 2649      696E6700 
+ 2650              	.LASF23:
+ 2651 0496 4442475F 		.string	"DBG_KFG"
+ 2651      4B464700 
+ 2652              	.LASF261:
+ 2653 049e 72634275 		.string	"rcBusy"
+ 2653      737900
+ 2654              	.LASF20:
+ 2655 04a5 4442475F 		.string	"DBG_SRA"
+ 2655      53524100 
+ 2656              	.LASF219:
+ 2657 04ad 72635472 		.string	"rcTransfer"
+ 2657      616E7366 
+ 2657      657200
+ 2658              	.LASF17:
+ 2659 04b8 4442475F 		.string	"DBG_KFS"
+ 2659      4B465300 
+ 2660              	.LASF174:
+ 2661 04c0 72635061 		.string	"rcPacking"
+ 2661      636B696E 
+ 2661      6700
+ 2662              	.LASF170:
+ 2663 04ca 7263436F 		.string	"rcCopying"
+ 2663      7079696E 
+ 2663      6700
+ 2664              	.LASF177:
+ 2665 04d4 72634465 		.string	"rcDecoding"
+ 2665      636F6469 
+ 2665      6E6700
+ 2666              	.LASF150:
+ 2667 04df 7263556E 		.string	"rcUnlocking"
+ 2667      6C6F636B 
+ 2667      696E6700 
+ 2668              	.LASF48:
+ 2669 04eb 4B426C6F 		.string	"KBlockCipherVec_vt_v1"
+ 2669      636B4369 
+ 2669      70686572 
+
GAS LISTING /tmp/ccIvKeEl.s 			page 59
+
+
+ 2669      5665635F 
+ 2669      76745F76 
+ 2670              	.LASF16:
+ 2671 0501 4442475F 		.string	"DBG_LEGREF"
+ 2671      4C454752 
+ 2671      454600
+ 2672              	.LASF298:
+ 2673 050c 4B4E756C 		.string	"KNullBlockCipherVecBlockSize"
+ 2673      6C426C6F 
+ 2673      636B4369 
+ 2673      70686572 
+ 2673      56656342 
+ 2674              	.LASF151:
+ 2675 0529 72635265 		.string	"rcRenaming"
+ 2675      6E616D69 
+ 2675      6E6700
+ 2676              	.LASF302:
+ 2677 0534 75736572 		.string	"user_key"
+ 2677      5F6B6579 
+ 2677      00
+ 2678              	.LASF221:
+ 2679 053d 72634964 		.string	"rcId"
+ 2679      00
+ 2680              	.LASF134:
+ 2681 0542 7263436D 		.string	"rcCmd"
+ 2681      6400
+ 2682              	.LASF26:
+ 2683 0548 4442475F 		.string	"DBG_LOADLIB"
+ 2683      4C4F4144 
+ 2683      4C494200 
+ 2684              	.LASF273:
+ 2685 0554 7263556E 		.string	"rcUnlocked"
+ 2685      6C6F636B 
+ 2685      656400
+ 2686              	.LASF74:
+ 2687 055f 52434D6F 		.string	"RCModule"
+ 2687      64756C65 
+ 2687      00
+ 2688              	.LASF235:
+ 2689 0568 7263456E 		.string	"rcEncryption"
+ 2689      63727970 
+ 2689      74696F6E 
+ 2689      00
+ 2690              	.LASF270:
+ 2691 0575 72634578 		.string	"rcExists"
+ 2691      69737473 
+ 2691      00
+ 2692              	.LASF36:
+ 2693 057e 43697068 		.string	"CipherVec"
+ 2693      65725665 
+ 2693      6300
+ 2694              	.LASF289:
+ 2695 0588 72634F70 		.string	"rcOpen"
+ 2695      656E00
+ 2696              	.LASF275:
+ 2697 058f 72634465 		.string	"rcDeadlock"
+ 2697      61646C6F 
+
GAS LISTING /tmp/ccIvKeEl.s 			page 60
+
+
+ 2697      636B00
+ 2698              	.LASF212:
+ 2699 059a 72634C69 		.string	"rcLink"
+ 2699      6E6B00
+ 2700              	.LASF199:
+ 2701 05a1 7263466C 		.string	"rcFlushing"
+ 2701      75736869 
+ 2701      6E6700
+ 2702              	.LASF247:
+ 2703 05ac 72634E6F 		.string	"rcNoErr"
+ 2703      45727200 
+ 2704              	.LASF226:
+ 2705 05b4 72635461 		.string	"rcTag"
+ 2705      6700
+ 2706              	.LASF22:
+ 2707 05ba 4442475F 		.string	"DBG_ALIGN"
+ 2707      414C4947 
+ 2707      4E00
+ 2708              	.LASF190:
+ 2709 05c4 72634C6F 		.string	"rcLogging"
+ 2709      6767696E 
+ 2709      6700
+ 2710              	.LASF283:
+ 2711 05ce 7263546F 		.string	"rcTooBig"
+ 2711      6F426967 
+ 2711      00
+ 2712              	.LASF127:
+ 2713 05d7 72635665 		.string	"rcVector"
+ 2713      63746F72 
+ 2713      00
+ 2714              	.LASF162:
+ 2715 05e0 72635265 		.string	"rcResizing"
+ 2715      73697A69 
+ 2715      6E6700
+ 2716              	.LASF136:
+ 2717 05eb 72635175 		.string	"rcQuery"
+ 2717      65727900 
+ 2718              	.LASF8:
+ 2719 05f3 6C6F6E67 		.string	"long unsigned int"
+ 2719      20756E73 
+ 2719      69676E65 
+ 2719      6420696E 
+ 2719      7400
+ 2720              	.LASF268:
+ 2721 0605 72634578 		.string	"rcExcessive"
+ 2721      63657373 
+ 2721      69766500 
+ 2722              	.LASF196:
+ 2723 0611 72634576 		.string	"rcEvaluating"
+ 2723      616C7561 
+ 2723      74696E67 
+ 2723      00
+ 2724              	.LASF133:
+ 2725 061e 7263526E 		.string	"rcRng"
+ 2725      6700
+ 2726              	.LASF141:
+ 2727 0624 72634361 		.string	"rcCasting"
+
GAS LISTING /tmp/ccIvKeEl.s 			page 61
+
+
+ 2727      7374696E 
+ 2727      6700
+ 2728              	.LASF300:
+ 2729 062e 73656C66 		.string	"self"
+ 2729      00
+ 2730              	.LASF101:
+ 2731 0633 72634974 		.string	"rcIterator"
+ 2731      65726174 
+ 2731      6F7200
+ 2732              	.LASF49:
+ 2733 063e 4B426C6F 		.string	"KBlockCipherVec"
+ 2733      636B4369 
+ 2733      70686572 
+ 2733      56656300 
+ 2734              	.LASF118:
+ 2735 064e 72635374 		.string	"rcStorage"
+ 2735      6F726167 
+ 2735      6500
+ 2736              	.LASF285:
+ 2737 0658 72634F75 		.string	"rcOutOfKDirectory"
+ 2737      744F664B 
+ 2737      44697265 
+ 2737      63746F72 
+ 2737      7900
+ 2738              	.LASF230:
+ 2739 066a 7263526F 		.string	"rcRow"
+ 2739      7700
+ 2740              	.LASF19:
+ 2741 0670 4442475F 		.string	"DBG_VDB"
+ 2741      56444200 
+ 2742              	.LASF130:
+ 2743 0678 72634C61 		.string	"rcLastTarget_v1_0"
+ 2743      73745461 
+ 2743      72676574 
+ 2743      5F76315F 
+ 2743      3000
+ 2744              	.LASF138:
+ 2745 068a 72634C61 		.string	"rcLastTarget_v1_1"
+ 2745      73745461 
+ 2745      72676574 
+ 2745      5F76315F 
+ 2745      3100
+ 2746              	.LASF117:
+ 2747 069c 72635365 		.string	"rcSemaphore"
+ 2747      6D617068 
+ 2747      6F726500 
+ 2748              	.LASF262:
+ 2749 06a8 7263496E 		.string	"rcIncomplete"
+ 2749      636F6D70 
+ 2749      6C657465 
+ 2749      00
+ 2750              	.LASF291:
+ 2751 06b5 72634E6F 		.string	"rcNotOpen"
+ 2751      744F7065 
+ 2751      6E00
+ 2752              	.LASF100:
+ 2753 06bf 7263496E 		.string	"rcIndex"
+
GAS LISTING /tmp/ccIvKeEl.s 			page 62
+
+
+ 2753      64657800 
+ 2754              	.LASF21:
+ 2755 06c7 4442475F 		.string	"DBG_XARC"
+ 2755      58415243 
+ 2755      00
+ 2756              	.LASF317:
+ 2757 06d0 474E5520 		.string	"GNU C 4.4.2"
+ 2757      4320342E 
+ 2757      342E3200 
+ 2758              	.LASF53:
+ 2759 06dc 72635275 		.string	"rcRuntime"
+ 2759      6E74696D 
+ 2759      6500
+ 2760              	.LASF92:
+ 2761 06e6 7263586D 		.string	"rcXmlDoc"
+ 2761      6C446F63 
+ 2761      00
+ 2762              	.LASF31:
+ 2763 06ef 6C6F6E67 		.string	"long long int"
+ 2763      206C6F6E 
+ 2763      6720696E 
+ 2763      7400
+ 2764              	.LASF173:
+ 2765 06fd 7263506F 		.string	"rcPositioning"
+ 2765      73697469 
+ 2765      6F6E696E 
+ 2765      6700
+ 2766              	.LASF114:
+ 2767 070b 72635175 		.string	"rcQueue"
+ 2767      65756500 
+ 2768              	.LASF189:
+ 2769 0713 72634465 		.string	"rcDetaching"
+ 2769      74616368 
+ 2769      696E6700 
+ 2770              	.LASF104:
+ 2771 071f 72634D44 		.string	"rcMD5SumFmt"
+ 2771      3553756D 
+ 2771      466D7400 
+ 2772              	.LASF155:
+ 2773 072b 7263496E 		.string	"rcInserting"
+ 2773      73657274 
+ 2773      696E6700 
+ 2774              	.LASF203:
+ 2775 0737 7263436F 		.string	"rcComparing"
+ 2775      6D706172 
+ 2775      696E6700 
+ 2776              	.LASF265:
+ 2777 0743 7263456D 		.string	"rcEmpty"
+ 2777      70747900 
+ 2778              	.LASF97:
+ 2779 074b 7263466F 		.string	"rcFormatter"
+ 2779      726D6174 
+ 2779      74657200 
+ 2780              	.LASF34:
+ 2781 0757 646F7562 		.string	"double"
+ 2781      6C6500
+ 2782              	.LASF182:
+
GAS LISTING /tmp/ccIvKeEl.s 			page 63
+
+
+ 2783 075e 72635265 		.string	"rcRegistering"
+ 2783      67697374 
+ 2783      6572696E 
+ 2783      6700
+ 2784              	.LASF71:
+ 2785 076c 72634E53 		.string	"rcNS"
+ 2785      00
+ 2786              	.LASF214:
+ 2787 0771 72635061 		.string	"rcParam"
+ 2787      72616D00 
+ 2788              	.LASF75:
+ 2789 0779 52435461 		.string	"RCTarget"
+ 2789      72676574 
+ 2789      00
+ 2790              	.LASF236:
+ 2791 0782 72634372 		.string	"rcCrc"
+ 2791      6300
+ 2792              	.LASF25:
+ 2793 0788 4442475F 		.string	"DBG_SEARCH"
+ 2793      53454152 
+ 2793      434800
+ 2794              	.LASF316:
+ 2795 0793 4B4E756C 		.string	"KNullBlockCipherVec_vt_"
+ 2795      6C426C6F 
+ 2795      636B4369 
+ 2795      70686572 
+ 2795      5665635F 
+ 2796              	.LASF64:
+ 2797 07ab 7263584D 		.string	"rcXML"
+ 2797      4C00
+ 2798              	.LASF27:
+ 2799 07b1 4442475F 		.string	"DBG_VFS"
+ 2799      56465300 
+ 2800              	.LASF32:
+ 2801 07b9 666C6F61 		.string	"float"
+ 2801      7400
+ 2802              	.LASF158:
+ 2803 07bf 72635570 		.string	"rcUpdating"
+ 2803      64617469 
+ 2803      6E6700
+ 2804              	.LASF185:
+ 2805 07ca 7263436F 		.string	"rcConverting"
+ 2805      6E766572 
+ 2805      74696E67 
+ 2805      00
+ 2806              	.LASF171:
+ 2807 07d7 7263436F 		.string	"rcConcatenating"
+ 2807      6E636174 
+ 2807      656E6174 
+ 2807      696E6700 
+ 2808              	.LASF50:
+ 2809 07e7 4B426C6F 		.string	"KBlockCipher"
+ 2809      636B4369 
+ 2809      70686572 
+ 2809      00
+ 2810              	.LASF128:
+ 2811 07f4 72634479 		.string	"rcDylib"
+
GAS LISTING /tmp/ccIvKeEl.s 			page 64
+
+
+ 2811      6C696200 
+ 2812              	.LASF277:
+ 2813 07fc 72635265 		.string	"rcReadonly"
+ 2813      61646F6E 
+ 2813      6C7900
+ 2814              	.LASF7:
+ 2815 0807 756E7369 		.string	"unsigned int"
+ 2815      676E6564 
+ 2815      20696E74 
+ 2815      00
+ 2816              	.LASF278:
+ 2817 0814 72635772 		.string	"rcWriteonly"
+ 2817      6974656F 
+ 2817      6E6C7900 
+ 2818              	.LASF272:
+ 2819 0820 72634C6F 		.string	"rcLocked"
+ 2819      636B6564 
+ 2819      00
+ 2820              	.LASF154:
+ 2821 0829 72635072 		.string	"rcProjecting"
+ 2821      6F6A6563 
+ 2821      74696E67 
+ 2821      00
+ 2822              	.LASF59:
+ 2823 0836 72635053 		.string	"rcPS"
+ 2823      00
+ 2824              	.LASF244:
+ 2825 083b 72635265 		.string	"rcRefcount"
+ 2825      66636F75 
+ 2825      6E7400
+ 2826              	.LASF79:
+ 2827 0846 7263546F 		.string	"rcTocEntry"
+ 2827      63456E74 
+ 2827      727900
+ 2828              	.LASF234:
+ 2829 0851 72634D6F 		.string	"rcMode"
+ 2829      646500
+ 2830              	.LASF310:
+ 2831 0858 4B4E756C 		.string	"KNullBlockCipherVecProcessorSupport"
+ 2831      6C426C6F 
+ 2831      636B4369 
+ 2831      70686572 
+ 2831      56656350 
+ 2832              	.LASF293:
+ 2833 087c 7263556E 		.string	"rcUnequal"
+ 2833      65717561 
+ 2833      6C00
+ 2834              	.LASF274:
+ 2835 0886 72634465 		.string	"rcDetached"
+ 2835      74616368 
+ 2835      656400
+ 2836              	.LASF280:
+ 2837 0891 7263496E 		.string	"rcInPlaceNotAllowed"
+ 2837      506C6163 
+ 2837      654E6F74 
+ 2837      416C6C6F 
+ 2837      77656400 
+
GAS LISTING /tmp/ccIvKeEl.s 			page 65
+
+
+ 2838              	.LASF222:
+ 2839 08a5 72635261 		.string	"rcRange"
+ 2839      6E676500 
+ 2840              	.LASF319:
+ 2841 08ad 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 2841      652F726F 
+ 2841      6461726D 
+ 2841      65722F73 
+ 2841      72615F73 
+ 2842              	.LASF232:
+ 2843 08f5 72634C61 		.string	"rcLastObject_v1_0"
+ 2843      73744F62 
+ 2843      6A656374 
+ 2843      5F76315F 
+ 2843      3000
+ 2844              	.LASF245:
+ 2845 0907 72634C61 		.string	"rcLastObject_v1_1"
+ 2845      73744F62 
+ 2845      6A656374 
+ 2845      5F76315F 
+ 2845      3100
+ 2846              	.LASF198:
+ 2847 0919 72634C61 		.string	"rcLastContext_v1_0"
+ 2847      7374436F 
+ 2847      6E746578 
+ 2847      745F7631 
+ 2847      5F3000
+ 2848              	.LASF209:
+ 2849 092c 72634C61 		.string	"rcLastContext_v1_1"
+ 2849      7374436F 
+ 2849      6E746578 
+ 2849      745F7631 
+ 2849      5F3100
+ 2850              	.LASF105:
+ 2851 093f 72634D65 		.string	"rcMemMap"
+ 2851      6D4D6170 
+ 2851      00
+ 2852              	.LASF129:
+ 2853 0948 72634578 		.string	"rcExpression"
+ 2853      70726573 
+ 2853      73696F6E 
+ 2853      00
+ 2854              	.LASF175:
+ 2855 0955 7263556E 		.string	"rcUnpacking"
+ 2855      7061636B 
+ 2855      696E6700 
+ 2856              	.LASF91:
+ 2857 0961 7263446F 		.string	"rcDoc"
+ 2857      6300
+ 2858              	.LASF12:
+ 2859 0967 4442475F 		.string	"DBG_APP"
+ 2859      41505000 
+ 2860              	.LASF192:
+ 2861 096f 72634D75 		.string	"rcMultiplexing"
+ 2861      6C746970 
+ 2861      6C657869 
+ 2861      6E6700
+
GAS LISTING /tmp/ccIvKeEl.s 			page 66
+
+
+ 2862              	.LASF194:
+ 2863 097e 72635365 		.string	"rcSearching"
+ 2863      61726368 
+ 2863      696E6700 
+ 2864              	.LASF294:
+ 2865 098a 72634661 		.string	"rcFailed"
+ 2865      696C6564 
+ 2865      00
+ 2866              	.LASF259:
+ 2867 0993 7263496E 		.string	"rcIncorrect"
+ 2867      636F7272 
+ 2867      65637400 
+ 2868              	.LASF98:
+ 2869 099f 72634675 		.string	"rcFunctParam"
+ 2869      6E637450 
+ 2869      6172616D 
+ 2869      00
+ 2870              	.LASF208:
+ 2871 09ac 72634964 		.string	"rcIdentifying"
+ 2871      656E7469 
+ 2871      6679696E 
+ 2871      6700
+ 2872              	.LASF223:
+ 2873 09ba 7263436F 		.string	"rcConstraint"
+ 2873      6E737472 
+ 2873      61696E74 
+ 2873      00
+ 2874              	.LASF249:
+ 2875 09c7 7263556E 		.string	"rcUnknown"
+ 2875      6B6E6F77 
+ 2875      6E00
+ 2876              	.LASF88:
+ 2877 09d1 72634375 		.string	"rcCursor"
+ 2877      72736F72 
+ 2877      00
+ 2878              	.LASF246:
+ 2879 09da 52435374 		.string	"RCState"
+ 2879      61746500 
+ 2880              	.LASF47:
+ 2881 09e2 4B426C6F 		.string	"KBlockCipherByte"
+ 2881      636B4369 
+ 2881      70686572 
+ 2881      42797465 
+ 2881      00
+ 2882              	.LASF38:
+ 2883 09f3 4B426C6F 		.string	"KBlockCipherByte_vt_v1"
+ 2883      636B4369 
+ 2883      70686572 
+ 2883      42797465 
+ 2883      5F76745F 
+ 2884              	.LASF286:
+ 2885 0a0a 72634967 		.string	"rcIgnored"
+ 2885      6E6F7265 
+ 2885      6400
+ 2886              	.LASF144:
+ 2887 0a14 72635265 		.string	"rcReleasing"
+ 2887      6C656173 
+
GAS LISTING /tmp/ccIvKeEl.s 			page 67
+
+
+ 2887      696E6700 
+ 2888              	.LASF67:
+ 2889 0a20 72634B46 		.string	"rcKFG"
+ 2889      4700
+ 2890              	.LASF225:
+ 2891 0a26 72634D65 		.string	"rcMessage"
+ 2891      73736167 
+ 2891      6500
+ 2892              	.LASF172:
+ 2893 0a30 7263466F 		.string	"rcFormatting"
+ 2893      726D6174 
+ 2893      74696E67 
+ 2893      00
+ 2894              	.LASF65:
+ 2895 0a3d 72635352 		.string	"rcSRA"
+ 2895      4100
+ 2896              	.LASF241:
+ 2897 0a43 7263456E 		.string	"rcEnvironment"
+ 2897      7669726F 
+ 2897      6E6D656E 
+ 2897      7400
+ 2898              	.LASF33:
+ 2899 0a51 6C6F6E67 		.string	"long long unsigned int"
+ 2899      206C6F6E 
+ 2899      6720756E 
+ 2899      7369676E 
+ 2899      65642069 
+ 2900              	.LASF40:
+ 2901 0a68 64657374 		.string	"destroy"
+ 2901      726F7900 
+ 2902              	.LASF123:
+ 2903 0a70 7263546F 		.string	"rcToken"
+ 2903      6B656E00 
+ 2904              	.LASF183:
+ 2905 0a78 7263546F 		.string	"rcTokenizing"
+ 2905      6B656E69 
+ 2905      7A696E67 
+ 2905      00
+ 2906              	.LASF15:
+ 2907 0a85 4442475F 		.string	"DBG_REF"
+ 2907      52454600 
+ 2908              	.LASF164:
+ 2909 0a8d 72635772 		.string	"rcWriting"
+ 2909      6974696E 
+ 2909      6700
+ 2910              	.LASF140:
+ 2911 0a97 7263416C 		.string	"rcAllocating"
+ 2911      6C6F6361 
+ 2911      74696E67 
+ 2911      00
+ 2912              	.LASF304:
+ 2913 0aa4 4B4E756C 		.string	"KNullBlockCipherVecSetEncryptKey"
+ 2913      6C426C6F 
+ 2913      636B4369 
+ 2913      70686572 
+ 2913      56656353 
+ 2914              	.LASF126:
+
GAS LISTING /tmp/ccIvKeEl.s 			page 68
+
+
+ 2915 0ac5 72635479 		.string	"rcType"
+ 2915      706500
+ 2916              	.LASF227:
+ 2917 0acc 72635265 		.string	"rcResources"
+ 2917      736F7572 
+ 2917      63657300 
+ 2918              	.LASF108:
+ 2919 0ad8 72634E61 		.string	"rcNamelist"
+ 2919      6D656C69 
+ 2919      737400
+ 2920              	.LASF292:
+ 2921 0ae3 7263556E 		.string	"rcUndefined"
+ 2921      64656669 
+ 2921      6E656400 
+ 2922              	.LASF260:
+ 2923 0aef 7263496E 		.string	"rcInconsistent"
+ 2923      636F6E73 
+ 2923      69737465 
+ 2923      6E7400
+ 2924              	.LASF205:
+ 2925 0afe 72635265 		.string	"rcRetrieving"
+ 2925      74726965 
+ 2925      76696E67 
+ 2925      00
+ 2926              	.LASF301:
+ 2927 0b0b 656E6372 		.string	"encrypt_key"
+ 2927      7970745F 
+ 2927      6B657900 
+ 2928              	.LASF46:
+ 2929 0b17 64656372 		.string	"decrypt"
+ 2929      79707400 
+ 2930              	.LASF39:
+ 2931 0b1f 76657273 		.string	"version"
+ 2931      696F6E00 
+ 2932              	.LASF217:
+ 2933 0b27 72634E61 		.string	"rcName"
+ 2933      6D6500
+ 2934              	.LASF254:
+ 2935 0b2e 72634E75 		.string	"rcNull"
+ 2935      6C6C00
+ 2936              	.LASF176:
+ 2937 0b35 7263456E 		.string	"rcEncoding"
+ 2937      636F6469 
+ 2937      6E6700
+ 2938              	.LASF95:
+ 2939 0b40 72634669 		.string	"rcFileFormat"
+ 2939      6C65466F 
+ 2939      726D6174 
+ 2939      00
+ 2940              	.LASF132:
+ 2941 0b4d 7263456E 		.string	"rcEncryptionKey"
+ 2941      63727970 
+ 2941      74696F6E 
+ 2941      4B657900 
+ 2942              	.LASF197:
+ 2943 0b5d 7263496E 		.string	"rcInflating"
+ 2943      666C6174 
+
GAS LISTING /tmp/ccIvKeEl.s 			page 69
+
+
+ 2943      696E6700 
+ 2944              	.LASF279:
+ 2945 0b69 72634E6F 		.string	"rcNoPerm"
+ 2945      5065726D 
+ 2945      00
+ 2946              	.LASF167:
+ 2947 0b72 72635265 		.string	"rcResetting"
+ 2947      73657474 
+ 2947      696E6700 
+ 2948              	.LASF41:
+ 2949 0b7e 626C6F63 		.string	"block_size"
+ 2949      6B5F7369 
+ 2949      7A6500
+ 2950              	.LASF115:
+ 2951 0b89 72635257 		.string	"rcRWLock"
+ 2951      4C6F636B 
+ 2951      00
+ 2952              	.LASF146:
+ 2953 0b92 72634C69 		.string	"rcListing"
+ 2953      7374696E 
+ 2953      6700
+ 2954              	.LASF96:
+ 2955 0b9c 72634675 		.string	"rcFunction"
+ 2955      6E637469 
+ 2955      6F6E00
+ 2956              	.LASF252:
+ 2957 0ba7 7263556E 		.string	"rcUnrecognized"
+ 2957      7265636F 
+ 2957      676E697A 
+ 2957      656400
+ 2958              	.LASF68:
+ 2959 0bb6 7263416C 		.string	"rcAlign"
+ 2959      69676E00 
+ 2960              	.LASF131:
+ 2961 0bbe 72635072 		.string	"rcProduction"
+ 2961      6F647563 
+ 2961      74696F6E 
+ 2961      00
+ 2962              	.LASF121:
+ 2963 0bcb 72635468 		.string	"rcThread"
+ 2963      72656164 
+ 2963      00
+ 2964              	.LASF169:
+ 2965 0bd4 72634672 		.string	"rcFreezing"
+ 2965      65657A69 
+ 2965      6E6700
+ 2966              	.LASF44:
+ 2967 0bdf 7365745F 		.string	"set_decrypt_key"
+ 2967      64656372 
+ 2967      7970745F 
+ 2967      6B657900 
+ 2968              	.LASF51:
+ 2969 0bef 62797465 		.string	"byte"
+ 2969      00
+ 2970              	.LASF37:
+ 2971 0bf4 4B426C6F 		.string	"KBlockCipher_vt"
+ 2971      636B4369 
+
GAS LISTING /tmp/ccIvKeEl.s 			page 70
+
+
+ 2971      70686572 
+ 2971      5F767400 
+ 2972              	.LASF238:
+ 2973 0c04 72635365 		.string	"rcSeed"
+ 2973      656400
+ 2974              	.LASF195:
+ 2975 0c0b 72634C6F 		.string	"rcLoading"
+ 2975      6164696E 
+ 2975      6700
+ 2976              	.LASF1:
+ 2977 0c15 73686F72 		.string	"short int"
+ 2977      7420696E 
+ 2977      7400
+ 2978              	.LASF299:
+ 2979 0c1f 4B4E756C 		.string	"KNullBlockCipherVecKeySize"
+ 2979      6C426C6F 
+ 2979      636B4369 
+ 2979      70686572 
+ 2979      5665634B 
+ 2980              	.LASF288:
+ 2981 0c3a 72634C61 		.string	"rcLastState_v1_0"
+ 2981      73745374 
+ 2981      6174655F 
+ 2981      76315F30 
+ 2981      00
+ 2982              	.LASF297:
+ 2983 0c4b 72634C61 		.string	"rcLastState_v1_1"
+ 2983      73745374 
+ 2983      6174655F 
+ 2983      76315F31 
+ 2983      00
+ 2984              	.LASF62:
+ 2985 0c5c 72635644 		.string	"rcVDB"
+ 2985      4200
+ 2986              	.LASF43:
+ 2987 0c62 7365745F 		.string	"set_encrypt_key"
+ 2987      656E6372 
+ 2987      7970745F 
+ 2987      6B657900 
+ 2988              	.LASF60:
+ 2989 0c72 72635846 		.string	"rcXF"
+ 2989      00
+ 2990              	.LASF143:
+ 2991 0c77 72634465 		.string	"rcDestroying"
+ 2991      7374726F 
+ 2991      79696E67 
+ 2991      00
+ 2992              	.LASF248:
+ 2993 0c84 7263446F 		.string	"rcDone"
+ 2993      6E6500
+ 2994              	.LASF78:
+ 2995 0c8b 7263546F 		.string	"rcToc"
+ 2995      6300
+ 2996              	.LASF152:
+ 2997 0c91 7263416C 		.string	"rcAliasing"
+ 2997      69617369 
+ 2997      6E6700
+
GAS LISTING /tmp/ccIvKeEl.s 			page 71
+
+
+ 2998              	.LASF113:
+ 2999 0c9c 72635072 		.string	"rcProcess"
+ 2999      6F636573 
+ 2999      7300
+ 3000              	.LASF211:
+ 3001 0ca6 72634E6F 		.string	"rcNoObj"
+ 3001      4F626A00 
+ 3002              	.LASF250:
+ 3003 0cae 7263556E 		.string	"rcUnsupported"
+ 3003      73757070 
+ 3003      6F727465 
+ 3003      6400
+ 3004              	.LASF305:
+ 3005 0cbc 4B4E756C 		.string	"KNullBlockCipherVecSetDecryptKey"
+ 3005      6C426C6F 
+ 3005      636B4369 
+ 3005      70686572 
+ 3005      56656353 
+ 3006              	.LASF86:
+ 3007 0cdd 7263436F 		.string	"rcColumn"
+ 3007      6C756D6E 
+ 3007      00
+ 3008              	.LASF251:
+ 3009 0ce6 7263556E 		.string	"rcUnexpected"
+ 3009      65787065 
+ 3009      63746564 
+ 3009      00
+ 3010              	.LASF6:
+ 3011 0cf3 75696E74 		.string	"uint32_t"
+ 3011      33325F74 
+ 3011      00
+ 3012              	.LASF72:
+ 3013 0cfc 72635646 		.string	"rcVFS"
+ 3013      5300
+ 3014              	.LASF24:
+ 3015 0d02 4442475F 		.string	"DBG_KRYPTO"
+ 3015      4B525950 
+ 3015      544F00
+ 3016              	.LASF321:
+ 3017 0d0d 4B4E756C 		.string	"KNullBlockCipherVecMake"
+ 3017      6C426C6F 
+ 3017      636B4369 
+ 3017      70686572 
+ 3017      5665634D 
+ 3018              	.LASF296:
+ 3019 0d25 72635772 		.string	"rcWrongType"
+ 3019      6F6E6754 
+ 3019      79706500 
+ 3020              	.LASF231:
+ 3021 0d31 72634C69 		.string	"rcLibrary"
+ 3021      62726172 
+ 3021      7900
+ 3022              	.LASF264:
+ 3023 0d3b 72634361 		.string	"rcCanceled"
+ 3023      6E63656C 
+ 3023      656400
+ 3024              	.LASF135:
+
GAS LISTING /tmp/ccIvKeEl.s 			page 72
+
+
+ 3025 0d46 72634461 		.string	"rcData"
+ 3025      746100
+ 3026              	.LASF99:
+ 3027 0d4d 72634865 		.string	"rcHeader"
+ 3027      61646572 
+ 3027      00
+ 3028              	.LASF4:
+ 3029 0d56 73686F72 		.string	"short unsigned int"
+ 3029      7420756E 
+ 3029      7369676E 
+ 3029      65642069 
+ 3029      6E7400
+ 3030              	.LASF89:
+ 3031 0d69 72634461 		.string	"rcDatabase"
+ 3031      74616261 
+ 3031      736500
+ 3032              	.LASF165:
+ 3033 0d74 7263436F 		.string	"rcCommitting"
+ 3033      6D6D6974 
+ 3033      74696E67 
+ 3033      00
+ 3034              	.LASF193:
+ 3035 0d81 7263436C 		.string	"rcClassifying"
+ 3035      61737369 
+ 3035      6679696E 
+ 3035      6700
+ 3036              	.LASF124:
+ 3037 0d8f 72635472 		.string	"rcTree"
+ 3037      656500
+ 3038              	.LASF29:
+ 3039 0d96 4442475F 		.string	"DBG_ARGS"
+ 3039      41524753 
+ 3039      00
+ 3040              	.LASF153:
+ 3041 0d9f 72635365 		.string	"rcSelecting"
+ 3041      6C656374 
+ 3041      696E6700 
+ 3042              	.LASF54:
+ 3043 0dab 72635465 		.string	"rcText"
+ 3043      787400
+ 3044              	.LASF290:
+ 3045 0db2 72634F75 		.string	"rcOutoforder"
+ 3045      746F666F 
+ 3045      72646572 
+ 3045      00
+ 3046              	.LASF308:
+ 3047 0dbf 73746174 		.string	"state"
+ 3047      6500
+ 3048              	.LASF257:
+ 3049 0dc5 7263496E 		.string	"rcInvalid"
+ 3049      76616C69 
+ 3049      6400
+ 3050              	.LASF303:
+ 3051 0dcf 75736572 		.string	"user_key_size"
+ 3051      5F6B6579 
+ 3051      5F73697A 
+ 3051      6500
+
GAS LISTING /tmp/ccIvKeEl.s 			page 73
+
+
+ 3052              	.LASF204:
+ 3053 0ddd 7263496E 		.string	"rcInitializing"
+ 3053      69746961 
+ 3053      6C697A69 
+ 3053      6E6700
+ 3054              	.LASF83:
+ 3055 0dec 7263426C 		.string	"rcBlob"
+ 3055      6F6200
+ 3056              	.LASF181:
+ 3057 0df3 72635265 		.string	"rcReindexing"
+ 3057      696E6465 
+ 3057      78696E67 
+ 3057      00
+ 3058              	.LASF76:
+ 3059 0e00 72634E6F 		.string	"rcNoTarg"
+ 3059      54617267 
+ 3059      00
+ 3060              	.LASF258:
+ 3061 0e09 7263436F 		.string	"rcCorrupt"
+ 3061      72727570 
+ 3061      7400
+ 3062              	.LASF287:
+ 3063 0e13 72634F75 		.string	"rcOutofrange"
+ 3063      746F6672 
+ 3063      616E6765 
+ 3063      00
+ 3064              	.LASF116:
+ 3065 0e20 72635363 		.string	"rcSchema"
+ 3065      68656D61 
+ 3065      00
+ 3066              	.LASF112:
+ 3067 0e29 72635061 		.string	"rcPath"
+ 3067      746800
+ 3068              	.LASF163:
+ 3069 0e30 72635265 		.string	"rcReading"
+ 3069      6164696E 
+ 3069      6700
+ 3070              	.LASF42:
+ 3071 0e3a 6B65795F 		.string	"key_size"
+ 3071      73697A65 
+ 3071      00
+ 3072              	.LASF295:
+ 3073 0e43 72634E6F 		.string	"rcNotAvailable"
+ 3073      74417661 
+ 3073      696C6162 
+ 3073      6C6500
+ 3074              	.LASF318:
+ 3075 0e52 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c"
+ 3075      652F726F 
+ 3075      6461726D 
+ 3075      65722F73 
+ 3075      72615F73 
+ 3076              	.LASF253:
+ 3077 0e89 7263416D 		.string	"rcAmbiguous"
+ 3077      62696775 
+ 3077      6F757300 
+ 3078              		.ident	"GCC: (GNU) 4.4.2"
+
GAS LISTING /tmp/ccIvKeEl.s 			page 74
+
+
+ 3079              		.section	.note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/ccIvKeEl.s 			page 75
+
+
+DEFINED SYMBOLS
+                            *ABS*:0000000000000000 null-ncbi.c
+     /tmp/ccIvKeEl.s:13     .rodata:0000000000000000 KNullBlockCipherVecaes_ncbi_name
+     /tmp/ccIvKeEl.s:17     .text:0000000000000000 KNullBlockCipherVecDestroy
+     /tmp/ccIvKeEl.s:37     .text:000000000000000a KNullBlockCipherVecBlockSize
+     /tmp/ccIvKeEl.s:57     .text:0000000000000015 KNullBlockCipherVecKeySize
+     /tmp/ccIvKeEl.s:77     .text:0000000000000020 KNullBlockCipherVecSetEncryptKey
+     /tmp/ccIvKeEl.s:100    .text:0000000000000036 KNullBlockCipherVecSetDecryptKey
+     /tmp/ccIvKeEl.s:123    .text:000000000000004c KNullBlockCipherVecEncrypt
+     /tmp/ccIvKeEl.s:145    .text:0000000000000060 KNullBlockCipherVecDecrypt
+     /tmp/ccIvKeEl.s:167    .text:0000000000000074 KNullBlockCipherVecProcessorSupport
+     /tmp/ccIvKeEl.s:190    .data.rel.ro.local:0000000000000000 KNullBlockCipherVec_vt_
+     /tmp/ccIvKeEl.s:207    .text:000000000000007f KNullBlockCipherVecMake
+     /tmp/ccIvKeEl.s:269    .rodata:0000000000000050 __func__.6558
+     /tmp/ccIvKeEl.s:274    .rodata:0000000000000070 __PRETTY_FUNCTION__.6557
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+SetRCFileFuncLine
diff --git a/libs/krypto/null-ncbi.vecreg.pic.o.list b/libs/krypto/null-ncbi.vecreg.pic.o.list
new file mode 100644
index 0000000..1803575
--- /dev/null
+++ b/libs/krypto/null-ncbi.vecreg.pic.o.list
@@ -0,0 +1,4406 @@
+GAS LISTING /tmp/ccIEtKUs.s 			page 1
+
+
+   1              		.file	"null-ncbi.c"
+   2              		.section	.debug_abbrev,"", at progbits
+   3              	.Ldebug_abbrev0:
+   4              		.section	.debug_info,"", at progbits
+   5              	.Ldebug_info0:
+   6              		.section	.debug_line,"", at progbits
+   7              	.Ldebug_line0:
+   8 0000 66010000 		.text
+   8      02001901 
+   8      00000101 
+   8      FB0E0D00 
+   8      01010101 
+   9              	.Ltext0:
+  10              		.section	.rodata
+  11              		.type	KNullBlockCipherVecRegaes_ncbi_name, @object
+  12              		.size	KNullBlockCipherVecRegaes_ncbi_name, 10
+  13              	KNullBlockCipherVecRegaes_ncbi_name:
+  14 0000 4145535F 		.string	"AES_CLASS"
+  14      434C4153 
+  14      5300
+  15              		.text
+  16              		.type	KNullBlockCipherVecRegDestroy, @function
+  17              	KNullBlockCipherVecRegDestroy:
+  18              	.LFB595:
+  19              		.file 1 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c"
+   1:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /*===========================================================================
+   2:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+   3:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *                            PUBLIC DOMAIN NOTICE
+   4:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *               National Center for Biotechnology Information
+   5:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+   6:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  This software/database is a "United States Government Work" under the
+   7:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  terms of the United States Copyright Act.  It was written as part of
+   8:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  the author's official duties as a United States Government employee and
+   9:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  thus cannot be copyrighted.  This software/database is freely available
+  10:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  to the public for use. The National Library of Medicine and the U.S.
+  11:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  Government have not placed any restriction on its use or reproduction.
+  12:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+  13:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  Although all reasonable efforts have been taken to ensure the accuracy
+  14:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  and reliability of the software and data, the NLM and the U.S.
+  15:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  Government do not and cannot warrant the performance or results that
+  16:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  may be obtained by using this software or data. The NLM and the U.S.
+  17:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  Government disclaim all warranties, express or implied, including
+  18:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  warranties of performance, merchantability or fitness for any particular
+  19:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  purpose.
+  20:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+  21:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *  Please cite the author in any work or product based on this material.
+  22:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+  23:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * ===========================================================================
+  24:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+  25:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  26:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <krypto/extern.h>
+  27:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  28:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include "ncbi-priv.h"
+  29:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include "cipher-priv.h"
+  30:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include "blockcipher-priv.h"
+  31:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  32:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <klib/rc.h>
+
GAS LISTING /tmp/ccIEtKUs.s 			page 2
+
+
+  33:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  34:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  35:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <byteswap.h>
+  36:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <string.h>
+  37:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <stdint.h>
+  38:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <stdlib.h>
+  39:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <assert.h>
+  40:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <sysalloc.h>
+  41:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  42:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include "blockcipher-impl.h"
+  43:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  44:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VEC
+  45:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <cpuid.h>
+  46:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+  47:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VECREG
+  48:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #include <v128.h>
+  49:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+  50:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  51:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  52:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VEC
+  53:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #define BLOCKCIPHER_IMPL BLOCKCIPHER_VEC_IMPL
+  54:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #else
+  55:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #define BLOCKCIPHER_IMPL BLOCKCIPHER_BYTE_IMPL
+  56:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+  57:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  58:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** typedef struct NULL_CLASS NULL_CLASS;
+  59:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  60:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static const char NULLBCMEMBER(aes_ncbi_name) [] = CLASS_STRING(AES_CLASS);
+  61:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  62:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  63:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+  64:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * Destroy
+  65:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   How large is the stored key for this cipher?  Not the user key used
+  66:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   to create this key (key schedule)
+  67:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+  68:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   This is needed by KCipher to know how large the KCipher objecr is at
+  69:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   allocation and to know how much of a buffer each decryption/encryption is
+  70:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+  71:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static
+  72:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** void NULLBCMEMBER(Destroy)    (const BLOCKCIPHER_IMPL * self)
+  73:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+  20              		.loc 1 73 0
+  21              		.cfi_startproc
+  22 0000 55       		pushq	%rbp
+  23              	.LCFI0:
+  24              		.cfi_def_cfa_offset 16
+  25 0001 4889E5   		movq	%rsp, %rbp
+  26              		.cfi_offset 6, -16
+  27              	.LCFI1:
+  28              		.cfi_def_cfa_register 6
+  29 0004 48897DF8 		movq	%rdi, -8(%rbp)
+  74:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     /* we use a constant object so do nothing */
+  75:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+  30              		.loc 1 75 0
+  31 0008 C9       		leave
+  32 0009 C3       		ret
+  33              		.cfi_endproc
+
GAS LISTING /tmp/ccIEtKUs.s 			page 3
+
+
+  34              	.LFE595:
+  35              		.size	KNullBlockCipherVecRegDestroy, .-KNullBlockCipherVecRegDestroy
+  36              		.type	KNullBlockCipherVecRegBlockSize, @function
+  37              	KNullBlockCipherVecRegBlockSize:
+  38              	.LFB596:
+  76:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  77:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  78:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+  79:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * BlockSize
+  80:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+  81:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static
+  82:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** uint32_t NULLBCMEMBER(BlockSize) ()
+  83:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+  39              		.loc 1 83 0
+  40              		.cfi_startproc
+  41 000a 55       		pushq	%rbp
+  42              	.LCFI2:
+  43              		.cfi_def_cfa_offset 16
+  44 000b 4889E5   		movq	%rsp, %rbp
+  45              		.cfi_offset 6, -16
+  46              	.LCFI3:
+  47              		.cfi_def_cfa_register 6
+  84:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     return 16;
+  48              		.loc 1 84 0
+  49 000e B8100000 		movl	$16, %eax
+  49      00
+  85:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+  50              		.loc 1 85 0
+  51 0013 C9       		leave
+  52 0014 C3       		ret
+  53              		.cfi_endproc
+  54              	.LFE596:
+  55              		.size	KNullBlockCipherVecRegBlockSize, .-KNullBlockCipherVecRegBlockSize
+  56              		.type	KNullBlockCipherVecRegKeySize, @function
+  57              	KNullBlockCipherVecRegKeySize:
+  58              	.LFB597:
+  86:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  87:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+  88:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+  89:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * KeySize
+  90:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   How large is the stored key for this cipher?  Not the user key used
+  91:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   to create this key (key schedule)
+  92:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+  93:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   This is needed by KCipher to know how large the KCipher objecr is at
+  94:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   allocation and to know how much of a buffer each decryption/encryption is
+  95:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+  96:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static uint32_t NULLBCMEMBER(KeySize) ()
+  97:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+  59              		.loc 1 97 0
+  60              		.cfi_startproc
+  61 0015 55       		pushq	%rbp
+  62              	.LCFI4:
+  63              		.cfi_def_cfa_offset 16
+  64 0016 4889E5   		movq	%rsp, %rbp
+  65              		.cfi_offset 6, -16
+  66              	.LCFI5:
+  67              		.cfi_def_cfa_register 6
+
GAS LISTING /tmp/ccIEtKUs.s 			page 4
+
+
+  98:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     return 0;
+  68              		.loc 1 98 0
+  69 0019 B8000000 		movl	$0, %eax
+  69      00
+  99:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+  70              		.loc 1 99 0
+  71 001e C9       		leave
+  72 001f C3       		ret
+  73              		.cfi_endproc
+  74              	.LFE597:
+  75              		.size	KNullBlockCipherVecRegKeySize, .-KNullBlockCipherVecRegKeySize
+  76              		.type	KNullBlockCipherVecRegSetEncryptKey, @function
+  77              	KNullBlockCipherVecRegSetEncryptKey:
+  78              	.LFB598:
+ 100:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 101:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 102:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 103:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * SetEncryptKey
+ 104:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   The KCipher calls this to have the block cipher build an encryption
+ 105:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   key in the KCipher object
+ 106:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+ 107:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+ 108:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static rc_t NULLBCMEMBER(SetEncryptKey) (void * encrypt_key, const char * user_key,
+ 109:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****                                          uint32_t user_key_size)
+ 110:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+  79              		.loc 1 110 0
+  80              		.cfi_startproc
+  81 0020 55       		pushq	%rbp
+  82              	.LCFI6:
+  83              		.cfi_def_cfa_offset 16
+  84 0021 4889E5   		movq	%rsp, %rbp
+  85              		.cfi_offset 6, -16
+  86              	.LCFI7:
+  87              		.cfi_def_cfa_register 6
+  88 0024 48897DF8 		movq	%rdi, -8(%rbp)
+  89 0028 488975F0 		movq	%rsi, -16(%rbp)
+  90 002c 8955EC   		movl	%edx, -20(%rbp)
+ 111:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     return 0;
+  91              		.loc 1 111 0
+  92 002f B8000000 		movl	$0, %eax
+  92      00
+ 112:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+  93              		.loc 1 112 0
+  94 0034 C9       		leave
+  95 0035 C3       		ret
+  96              		.cfi_endproc
+  97              	.LFE598:
+  98              		.size	KNullBlockCipherVecRegSetEncryptKey, .-KNullBlockCipherVecRegSetEncryptKey
+  99              		.type	KNullBlockCipherVecRegSetDecryptKey, @function
+ 100              	KNullBlockCipherVecRegSetDecryptKey:
+ 101              	.LFB599:
+ 113:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 114:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 115:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 116:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * SetDecryptKey
+ 117:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   The KCipher calls this to have the block cipher build an decryption
+ 118:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   key in the KCipher object
+
GAS LISTING /tmp/ccIEtKUs.s 			page 5
+
+
+ 119:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+ 120:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+ 121:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static rc_t NULLBCMEMBER(SetDecryptKey) (void * decrypt_key,
+ 122:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****                                      const char * user_key,
+ 123:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****                                      uint32_t user_key_size)
+ 124:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 102              		.loc 1 124 0
+ 103              		.cfi_startproc
+ 104 0036 55       		pushq	%rbp
+ 105              	.LCFI8:
+ 106              		.cfi_def_cfa_offset 16
+ 107 0037 4889E5   		movq	%rsp, %rbp
+ 108              		.cfi_offset 6, -16
+ 109              	.LCFI9:
+ 110              		.cfi_def_cfa_register 6
+ 111 003a 48897DF8 		movq	%rdi, -8(%rbp)
+ 112 003e 488975F0 		movq	%rsi, -16(%rbp)
+ 113 0042 8955EC   		movl	%edx, -20(%rbp)
+ 125:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     return 0;
+ 114              		.loc 1 125 0
+ 115 0045 B8000000 		movl	$0, %eax
+ 115      00
+ 126:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 116              		.loc 1 126 0
+ 117 004a C9       		leave
+ 118 004b C3       		ret
+ 119              		.cfi_endproc
+ 120              	.LFE599:
+ 121              		.size	KNullBlockCipherVecRegSetDecryptKey, .-KNullBlockCipherVecRegSetDecryptKey
+ 122              		.type	KNullBlockCipherVecRegEncrypt, @function
+ 123              	KNullBlockCipherVecRegEncrypt:
+ 124              	.LFB600:
+ 127:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 128:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 129:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 130:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * Encrypt
+ 131:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+ 132:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   Perform an encryption of a single block.  Chained modes and stream
+ 133:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   cipher modes will call this multiple times.
+ 134:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+ 135:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+ 136:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VEC
+ 137:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static CipherVec NULLBCMEMBER(Encrypt) (CipherVec state,
+ 138:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****                                         const void * encrypt_key)
+ 139:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 125              		.loc 1 139 0
+ 126              		.cfi_startproc
+ 127 004c 55       		pushq	%rbp
+ 128              	.LCFI10:
+ 129              		.cfi_def_cfa_offset 16
+ 130 004d 4889E5   		movq	%rsp, %rbp
+ 131              		.cfi_offset 6, -16
+ 132              	.LCFI11:
+ 133              		.cfi_def_cfa_register 6
+ 134 0050 660F7F45 		movdqa	%xmm0, -16(%rbp)
+ 134      F0
+ 135 0055 48897DE8 		movq	%rdi, -24(%rbp)
+
GAS LISTING /tmp/ccIEtKUs.s 			page 6
+
+
+ 140:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     return state;
+ 136              		.loc 1 140 0
+ 137 0059 660F6F45 		movdqa	-16(%rbp), %xmm0
+ 137      F0
+ 141:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 138              		.loc 1 141 0
+ 139 005e C9       		leave
+ 140 005f C3       		ret
+ 141              		.cfi_endproc
+ 142              	.LFE600:
+ 143              		.size	KNullBlockCipherVecRegEncrypt, .-KNullBlockCipherVecRegEncrypt
+ 144              		.type	KNullBlockCipherVecRegDecrypt, @function
+ 145              	KNullBlockCipherVecRegDecrypt:
+ 146              	.LFB601:
+ 142:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #else
+ 143:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static void NULLBCMEMBER(Encrypt) (const CipherBlock in,
+ 144:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****                                    CipherBlock * out,
+ 145:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****                                    const void * encrypt_key)
+ 146:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 147:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 148:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+ 149:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 150:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 151:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 152:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * Decrypt
+ 153:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+ 154:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   Perform a decryption of a single block.  Chained modes and stream
+ 155:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   cipher modes will call this multiple times.
+ 156:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+ 157:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VEC
+ 158:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static CipherVec NULLBCMEMBER(Decrypt) (CipherVec state,
+ 159:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****                                         const void * decrypt_key)
+ 160:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 147              		.loc 1 160 0
+ 148              		.cfi_startproc
+ 149 0060 55       		pushq	%rbp
+ 150              	.LCFI12:
+ 151              		.cfi_def_cfa_offset 16
+ 152 0061 4889E5   		movq	%rsp, %rbp
+ 153              		.cfi_offset 6, -16
+ 154              	.LCFI13:
+ 155              		.cfi_def_cfa_register 6
+ 156 0064 660F7F45 		movdqa	%xmm0, -16(%rbp)
+ 156      F0
+ 157 0069 48897DE8 		movq	%rdi, -24(%rbp)
+ 161:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     return state;
+ 158              		.loc 1 161 0
+ 159 006d 660F6F45 		movdqa	-16(%rbp), %xmm0
+ 159      F0
+ 162:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 160              		.loc 1 162 0
+ 161 0072 C9       		leave
+ 162 0073 C3       		ret
+ 163              		.cfi_endproc
+ 164              	.LFE601:
+ 165              		.size	KNullBlockCipherVecRegDecrypt, .-KNullBlockCipherVecRegDecrypt
+ 166              		.type	KNullBlockCipherVecRegProcessorSupport, @function
+
GAS LISTING /tmp/ccIEtKUs.s 			page 7
+
+
+ 167              	KNullBlockCipherVecRegProcessorSupport:
+ 168              	.LFB602:
+ 163:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #else
+ 164:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static void NULLBCMEMBER(Decrypt) (const CipherBlock in,
+ 165:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****                                    CipherBlock * out,
+ 166:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****                                    const void * encrypt_key)
+ 167:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 168:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 169:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+ 170:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 171:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 172:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 173:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * MakeProcessorSupport
+ 174:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+ 175:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * Run-time check for support of this particular AES implementation by
+ 176:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * checking the flags given via the cpuid instruction.
+ 177:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+ 178:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static __inline__
+ 179:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** bool NULLBCMEMBER(ProcessorSupport) ()
+ 180:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 169              		.loc 1 180 0
+ 170              		.cfi_startproc
+ 171 0074 55       		pushq	%rbp
+ 172              	.LCFI14:
+ 173              		.cfi_def_cfa_offset 16
+ 174 0075 4889E5   		movq	%rsp, %rbp
+ 175              		.cfi_offset 6, -16
+ 176              	.LCFI15:
+ 177              		.cfi_def_cfa_register 6
+ 181:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     return true;
+ 178              		.loc 1 181 0
+ 179 0078 B8010000 		movl	$1, %eax
+ 179      00
+ 182:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 180              		.loc 1 182 0
+ 181 007d C9       		leave
+ 182 007e C3       		ret
+ 183              		.cfi_endproc
+ 184              	.LFE602:
+ 185              		.size	KNullBlockCipherVecRegProcessorSupport, .-KNullBlockCipherVecRegProcessorSupport
+ 186              		.section	.data.rel.ro.local,"aw", at progbits
+ 187              		.align 32
+ 188              		.type	KNullBlockCipherVecReg_vt_, @object
+ 189              		.size	KNullBlockCipherVecReg_vt_, 64
+ 190              	KNullBlockCipherVecReg_vt_:
+ 191 0000 01000000 		.long	1
+ 192 0004 01000000 		.long	1
+ 193 0008 00000000 		.quad	KNullBlockCipherVecRegDestroy
+ 193      00000000 
+ 194 0010 00000000 		.quad	KNullBlockCipherVecRegBlockSize
+ 194      00000000 
+ 195 0018 00000000 		.quad	KNullBlockCipherVecRegKeySize
+ 195      00000000 
+ 196 0020 00000000 		.quad	KNullBlockCipherVecRegSetEncryptKey
+ 196      00000000 
+ 197 0028 00000000 		.quad	KNullBlockCipherVecRegSetDecryptKey
+ 197      00000000 
+
GAS LISTING /tmp/ccIEtKUs.s 			page 8
+
+
+ 198 0030 00000000 		.quad	KNullBlockCipherVecRegEncrypt
+ 198      00000000 
+ 199 0038 00000000 		.quad	KNullBlockCipherVecRegDecrypt
+ 199      00000000 
+ 200              		.section	.rodata
+ 201 000a 00000000 		.align 8
+ 201      0000
+ 202              	.LC0:
+ 203 0010 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c"
+ 203      652F726F 
+ 203      6461726D 
+ 203      65722F73 
+ 203      72615F73 
+ 204              		.text
+ 205              	.globl KNullBlockCipherVecRegMake
+ 206              		.type	KNullBlockCipherVecRegMake, @function
+ 207              	KNullBlockCipherVecRegMake:
+ 208              	.LFB603:
+ 183:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 184:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 185:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 186:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * Init
+ 187:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+ 188:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   Initialize the fields of this object.  The derived class will call this
+ 189:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *   during it's initialization.
+ 190:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+ 191:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * self      object to initialze
+ 192:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * vt        the virtual table of the derived class
+ 193:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * mgr       the cipher manager that is the construction factory block cipher
+ 194:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *           objects hold references to the manager while the manager merely
+ 195:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *           points at the block ciphers when all block ciphers are destroyed
+ 196:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *           the manager loses its references and it too can be destroyed if not
+ 197:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *           held elsewhere
+ 198:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * name      ASCIZ c-string the name of this class
+ 199:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+ 200:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** static const
+ 201:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #if USE_VEC
+ 202:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** KBlockCipherVec_vt_v1
+ 203:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #else
+ 204:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** KBlockCipherByte_vt_v1
+ 205:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** #endif
+ 206:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** NULLBCMEMBER(_vt_) = {
+ 207:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     { 1, 1 },
+ 208:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 209:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     NULLBCMEMBER(Destroy),
+ 210:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     NULLBCMEMBER(BlockSize),
+ 211:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     NULLBCMEMBER(KeySize),
+ 212:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     NULLBCMEMBER(SetEncryptKey),
+ 213:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     NULLBCMEMBER(SetDecryptKey),
+ 214:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     NULLBCMEMBER(Encrypt),
+ 215:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     NULLBCMEMBER(Decrypt)
+ 216:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** };
+ 217:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 218:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 219:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** /* ----------------------------------------------------------------------
+ 220:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * Make
+ 221:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  *
+
GAS LISTING /tmp/ccIEtKUs.s 			page 9
+
+
+ 222:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * Create a new Null Block Cipher object.
+ 223:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * The processor is checked to see if this particular version is supported on
+ 224:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  * this particular CPU.
+ 225:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****  */
+ 226:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** rc_t NULLBCMEMBER(Make) (KBlockCipher ** new_obj)
+ 227:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** {
+ 209              		.loc 1 227 0
+ 210              		.cfi_startproc
+ 211 007f 55       		pushq	%rbp
+ 212              	.LCFI16:
+ 213              		.cfi_def_cfa_offset 16
+ 214 0080 4889E5   		movq	%rsp, %rbp
+ 215              		.cfi_offset 6, -16
+ 216              	.LCFI17:
+ 217              		.cfi_def_cfa_register 6
+ 218 0083 4883EC20 		subq	$32, %rsp
+ 219 0087 48897DE8 		movq	%rdi, -24(%rbp)
+ 228:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     rc_t rc;
+ 229:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 230:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     /* Check parameter first */
+ 231:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     if (new_obj == NULL)
+ 220              		.loc 1 231 0
+ 221 008b 48837DE8 		cmpq	$0, -24(%rbp)
+ 221      00
+ 222 0090 7522     		jne	.L18
+ 232:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****         rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcSelf, rcNull);
+ 223              		.loc 1 232 0
+ 224 0092 B9E80000 		movl	$232, %ecx
+ 224      00
+ 225 0097 488D1500 		leaq	__func__.7214(%rip), %rdx
+ 225      000000
+ 226 009e 488D3500 		leaq	.LC0(%rip), %rsi
+ 226      000000
+ 227 00a5 BF878F00 		movl	$-2030006393, %edi
+ 227      87
+ 228 00aa E8000000 		call	SetRCFileFuncLine at PLT
+ 228      00
+ 229 00af 8945FC   		movl	%eax, -4(%rbp)
+ 230 00b2 EB53     		jmp	.L19
+ 231              	.L18:
+ 233:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 234:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     else
+ 235:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     {
+ 236:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****         *new_obj = NULL;
+ 232              		.loc 1 236 0
+ 233 00b4 488B45E8 		movq	-24(%rbp), %rax
+ 234 00b8 48C70000 		movq	$0, (%rax)
+ 234      000000
+ 237:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 238:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****         /* check for processor support of this flavor */
+ 239:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****         if ( ! NULLBCMEMBER(ProcessorSupport)())
+ 235              		.loc 1 239 0
+ 236 00bf B8000000 		movl	$0, %eax
+ 236      00
+ 237 00c4 E8ABFFFF 		call	KNullBlockCipherVecRegProcessorSupport
+ 237      FF
+ 238 00c9 83F001   		xorl	$1, %eax
+
GAS LISTING /tmp/ccIEtKUs.s 			page 10
+
+
+ 239 00cc 84C0     		testb	%al, %al
+ 240 00ce 7422     		je	.L20
+ 240:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****             rc = RC (rcKrypto, rcBlockCipher, rcConstructing, rcFunction, rcUnsupported);
+ 241              		.loc 1 240 0
+ 242 00d0 B9F00000 		movl	$240, %ecx
+ 242      00
+ 243 00d5 488D1500 		leaq	__func__.7214(%rip), %rdx
+ 243      000000
+ 244 00dc 488D3500 		leaq	.LC0(%rip), %rsi
+ 244      000000
+ 245 00e3 BF038500 		movl	$-2030009085, %edi
+ 245      87
+ 246 00e8 E8000000 		call	SetRCFileFuncLine at PLT
+ 246      00
+ 247 00ed 8945FC   		movl	%eax, -4(%rbp)
+ 248 00f0 EB15     		jmp	.L19
+ 249              	.L20:
+ 241:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** 
+ 242:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****         else
+ 243:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****         {
+ 244:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****             rc = 0;
+ 250              		.loc 1 244 0
+ 251 00f2 C745FC00 		movl	$0, -4(%rbp)
+ 251      000000
+ 245:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****             *new_obj = (KBlockCipher*)&(NULLBCMEMBER(_vt_));
+ 252              		.loc 1 245 0
+ 253 00f9 488D1500 		leaq	KNullBlockCipherVecReg_vt_(%rip), %rdx
+ 253      000000
+ 254 0100 488B45E8 		movq	-24(%rbp), %rax
+ 255 0104 488910   		movq	%rdx, (%rax)
+ 256              	.L19:
+ 246:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****         }
+ 247:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     }
+ 248:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c ****     return rc;
+ 257              		.loc 1 248 0
+ 258 0107 8B45FC   		movl	-4(%rbp), %eax
+ 249:/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c **** }
+ 259              		.loc 1 249 0
+ 260 010a C9       		leave
+ 261 010b C3       		ret
+ 262              		.cfi_endproc
+ 263              	.LFE603:
+ 264              		.size	KNullBlockCipherVecRegMake, .-KNullBlockCipherVecRegMake
+ 265              		.section	.rodata
+ 266 0047 00000000 		.align 16
+ 266      00000000 
+ 266      00
+ 267              		.type	__func__.7214, @object
+ 268              		.size	__func__.7214, 27
+ 269              	__func__.7214:
+ 270 0050 4B4E756C 		.string	"KNullBlockCipherVecRegMake"
+ 270      6C426C6F 
+ 270      636B4369 
+ 270      70686572 
+ 270      56656352 
+ 271 006b 00000000 		.align 16
+ 271      00
+
GAS LISTING /tmp/ccIEtKUs.s 			page 11
+
+
+ 272              		.type	__PRETTY_FUNCTION__.7213, @object
+ 273              		.size	__PRETTY_FUNCTION__.7213, 27
+ 274              	__PRETTY_FUNCTION__.7213:
+ 275 0070 4B4E756C 		.string	"KNullBlockCipherVecRegMake"
+ 275      6C426C6F 
+ 275      636B4369 
+ 275      70686572 
+ 275      56656352 
+ 276              		.text
+ 277              	.Letext0:
+ 278              		.section	.debug_loc,"", at progbits
+ 279              	.Ldebug_loc0:
+ 280              	.LLST0:
+ 281 0000 00000000 		.quad	.LFB595-.Ltext0
+ 281      00000000 
+ 282 0008 01000000 		.quad	.LCFI0-.Ltext0
+ 282      00000000 
+ 283 0010 0200     		.value	0x2
+ 284 0012 77       		.byte	0x77
+ 285 0013 08       		.sleb128 8
+ 286 0014 01000000 		.quad	.LCFI0-.Ltext0
+ 286      00000000 
+ 287 001c 04000000 		.quad	.LCFI1-.Ltext0
+ 287      00000000 
+ 288 0024 0200     		.value	0x2
+ 289 0026 77       		.byte	0x77
+ 290 0027 10       		.sleb128 16
+ 291 0028 04000000 		.quad	.LCFI1-.Ltext0
+ 291      00000000 
+ 292 0030 0A000000 		.quad	.LFE595-.Ltext0
+ 292      00000000 
+ 293 0038 0200     		.value	0x2
+ 294 003a 76       		.byte	0x76
+ 295 003b 10       		.sleb128 16
+ 296 003c 00000000 		.quad	0x0
+ 296      00000000 
+ 297 0044 00000000 		.quad	0x0
+ 297      00000000 
+ 298              	.LLST1:
+ 299 004c 0A000000 		.quad	.LFB596-.Ltext0
+ 299      00000000 
+ 300 0054 0B000000 		.quad	.LCFI2-.Ltext0
+ 300      00000000 
+ 301 005c 0200     		.value	0x2
+ 302 005e 77       		.byte	0x77
+ 303 005f 08       		.sleb128 8
+ 304 0060 0B000000 		.quad	.LCFI2-.Ltext0
+ 304      00000000 
+ 305 0068 0E000000 		.quad	.LCFI3-.Ltext0
+ 305      00000000 
+ 306 0070 0200     		.value	0x2
+ 307 0072 77       		.byte	0x77
+ 308 0073 10       		.sleb128 16
+ 309 0074 0E000000 		.quad	.LCFI3-.Ltext0
+ 309      00000000 
+ 310 007c 15000000 		.quad	.LFE596-.Ltext0
+ 310      00000000 
+
GAS LISTING /tmp/ccIEtKUs.s 			page 12
+
+
+ 311 0084 0200     		.value	0x2
+ 312 0086 76       		.byte	0x76
+ 313 0087 10       		.sleb128 16
+ 314 0088 00000000 		.quad	0x0
+ 314      00000000 
+ 315 0090 00000000 		.quad	0x0
+ 315      00000000 
+ 316              	.LLST2:
+ 317 0098 15000000 		.quad	.LFB597-.Ltext0
+ 317      00000000 
+ 318 00a0 16000000 		.quad	.LCFI4-.Ltext0
+ 318      00000000 
+ 319 00a8 0200     		.value	0x2
+ 320 00aa 77       		.byte	0x77
+ 321 00ab 08       		.sleb128 8
+ 322 00ac 16000000 		.quad	.LCFI4-.Ltext0
+ 322      00000000 
+ 323 00b4 19000000 		.quad	.LCFI5-.Ltext0
+ 323      00000000 
+ 324 00bc 0200     		.value	0x2
+ 325 00be 77       		.byte	0x77
+ 326 00bf 10       		.sleb128 16
+ 327 00c0 19000000 		.quad	.LCFI5-.Ltext0
+ 327      00000000 
+ 328 00c8 20000000 		.quad	.LFE597-.Ltext0
+ 328      00000000 
+ 329 00d0 0200     		.value	0x2
+ 330 00d2 76       		.byte	0x76
+ 331 00d3 10       		.sleb128 16
+ 332 00d4 00000000 		.quad	0x0
+ 332      00000000 
+ 333 00dc 00000000 		.quad	0x0
+ 333      00000000 
+ 334              	.LLST3:
+ 335 00e4 20000000 		.quad	.LFB598-.Ltext0
+ 335      00000000 
+ 336 00ec 21000000 		.quad	.LCFI6-.Ltext0
+ 336      00000000 
+ 337 00f4 0200     		.value	0x2
+ 338 00f6 77       		.byte	0x77
+ 339 00f7 08       		.sleb128 8
+ 340 00f8 21000000 		.quad	.LCFI6-.Ltext0
+ 340      00000000 
+ 341 0100 24000000 		.quad	.LCFI7-.Ltext0
+ 341      00000000 
+ 342 0108 0200     		.value	0x2
+ 343 010a 77       		.byte	0x77
+ 344 010b 10       		.sleb128 16
+ 345 010c 24000000 		.quad	.LCFI7-.Ltext0
+ 345      00000000 
+ 346 0114 36000000 		.quad	.LFE598-.Ltext0
+ 346      00000000 
+ 347 011c 0200     		.value	0x2
+ 348 011e 76       		.byte	0x76
+ 349 011f 10       		.sleb128 16
+ 350 0120 00000000 		.quad	0x0
+ 350      00000000 
+
GAS LISTING /tmp/ccIEtKUs.s 			page 13
+
+
+ 351 0128 00000000 		.quad	0x0
+ 351      00000000 
+ 352              	.LLST4:
+ 353 0130 36000000 		.quad	.LFB599-.Ltext0
+ 353      00000000 
+ 354 0138 37000000 		.quad	.LCFI8-.Ltext0
+ 354      00000000 
+ 355 0140 0200     		.value	0x2
+ 356 0142 77       		.byte	0x77
+ 357 0143 08       		.sleb128 8
+ 358 0144 37000000 		.quad	.LCFI8-.Ltext0
+ 358      00000000 
+ 359 014c 3A000000 		.quad	.LCFI9-.Ltext0
+ 359      00000000 
+ 360 0154 0200     		.value	0x2
+ 361 0156 77       		.byte	0x77
+ 362 0157 10       		.sleb128 16
+ 363 0158 3A000000 		.quad	.LCFI9-.Ltext0
+ 363      00000000 
+ 364 0160 4C000000 		.quad	.LFE599-.Ltext0
+ 364      00000000 
+ 365 0168 0200     		.value	0x2
+ 366 016a 76       		.byte	0x76
+ 367 016b 10       		.sleb128 16
+ 368 016c 00000000 		.quad	0x0
+ 368      00000000 
+ 369 0174 00000000 		.quad	0x0
+ 369      00000000 
+ 370              	.LLST5:
+ 371 017c 4C000000 		.quad	.LFB600-.Ltext0
+ 371      00000000 
+ 372 0184 4D000000 		.quad	.LCFI10-.Ltext0
+ 372      00000000 
+ 373 018c 0200     		.value	0x2
+ 374 018e 77       		.byte	0x77
+ 375 018f 08       		.sleb128 8
+ 376 0190 4D000000 		.quad	.LCFI10-.Ltext0
+ 376      00000000 
+ 377 0198 50000000 		.quad	.LCFI11-.Ltext0
+ 377      00000000 
+ 378 01a0 0200     		.value	0x2
+ 379 01a2 77       		.byte	0x77
+ 380 01a3 10       		.sleb128 16
+ 381 01a4 50000000 		.quad	.LCFI11-.Ltext0
+ 381      00000000 
+ 382 01ac 60000000 		.quad	.LFE600-.Ltext0
+ 382      00000000 
+ 383 01b4 0200     		.value	0x2
+ 384 01b6 76       		.byte	0x76
+ 385 01b7 10       		.sleb128 16
+ 386 01b8 00000000 		.quad	0x0
+ 386      00000000 
+ 387 01c0 00000000 		.quad	0x0
+ 387      00000000 
+ 388              	.LLST6:
+ 389 01c8 60000000 		.quad	.LFB601-.Ltext0
+ 389      00000000 
+
GAS LISTING /tmp/ccIEtKUs.s 			page 14
+
+
+ 390 01d0 61000000 		.quad	.LCFI12-.Ltext0
+ 390      00000000 
+ 391 01d8 0200     		.value	0x2
+ 392 01da 77       		.byte	0x77
+ 393 01db 08       		.sleb128 8
+ 394 01dc 61000000 		.quad	.LCFI12-.Ltext0
+ 394      00000000 
+ 395 01e4 64000000 		.quad	.LCFI13-.Ltext0
+ 395      00000000 
+ 396 01ec 0200     		.value	0x2
+ 397 01ee 77       		.byte	0x77
+ 398 01ef 10       		.sleb128 16
+ 399 01f0 64000000 		.quad	.LCFI13-.Ltext0
+ 399      00000000 
+ 400 01f8 74000000 		.quad	.LFE601-.Ltext0
+ 400      00000000 
+ 401 0200 0200     		.value	0x2
+ 402 0202 76       		.byte	0x76
+ 403 0203 10       		.sleb128 16
+ 404 0204 00000000 		.quad	0x0
+ 404      00000000 
+ 405 020c 00000000 		.quad	0x0
+ 405      00000000 
+ 406              	.LLST7:
+ 407 0214 74000000 		.quad	.LFB602-.Ltext0
+ 407      00000000 
+ 408 021c 75000000 		.quad	.LCFI14-.Ltext0
+ 408      00000000 
+ 409 0224 0200     		.value	0x2
+ 410 0226 77       		.byte	0x77
+ 411 0227 08       		.sleb128 8
+ 412 0228 75000000 		.quad	.LCFI14-.Ltext0
+ 412      00000000 
+ 413 0230 78000000 		.quad	.LCFI15-.Ltext0
+ 413      00000000 
+ 414 0238 0200     		.value	0x2
+ 415 023a 77       		.byte	0x77
+ 416 023b 10       		.sleb128 16
+ 417 023c 78000000 		.quad	.LCFI15-.Ltext0
+ 417      00000000 
+ 418 0244 7F000000 		.quad	.LFE602-.Ltext0
+ 418      00000000 
+ 419 024c 0200     		.value	0x2
+ 420 024e 76       		.byte	0x76
+ 421 024f 10       		.sleb128 16
+ 422 0250 00000000 		.quad	0x0
+ 422      00000000 
+ 423 0258 00000000 		.quad	0x0
+ 423      00000000 
+ 424              	.LLST8:
+ 425 0260 7F000000 		.quad	.LFB603-.Ltext0
+ 425      00000000 
+ 426 0268 80000000 		.quad	.LCFI16-.Ltext0
+ 426      00000000 
+ 427 0270 0200     		.value	0x2
+ 428 0272 77       		.byte	0x77
+ 429 0273 08       		.sleb128 8
+
GAS LISTING /tmp/ccIEtKUs.s 			page 15
+
+
+ 430 0274 80000000 		.quad	.LCFI16-.Ltext0
+ 430      00000000 
+ 431 027c 83000000 		.quad	.LCFI17-.Ltext0
+ 431      00000000 
+ 432 0284 0200     		.value	0x2
+ 433 0286 77       		.byte	0x77
+ 434 0287 10       		.sleb128 16
+ 435 0288 83000000 		.quad	.LCFI17-.Ltext0
+ 435      00000000 
+ 436 0290 0C010000 		.quad	.LFE603-.Ltext0
+ 436      00000000 
+ 437 0298 0200     		.value	0x2
+ 438 029a 76       		.byte	0x76
+ 439 029b 10       		.sleb128 16
+ 440 029c 00000000 		.quad	0x0
+ 440      00000000 
+ 441 02a4 00000000 		.quad	0x0
+ 441      00000000 
+ 442              		.file 2 "/usr/include/stdint.h"
+ 443              		.file 3 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/defs.h"
+ 444              		.file 4 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/cc/gcc/v128.h"
+ 445              		.file 5 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-impl.h"
+ 446              		.file 6 "/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/blockcipher-priv.h"
+ 447              		.file 7 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/rc.h"
+ 448              		.file 8 "/home/rodarmer/sra_sdk-2.3.2-4/interfaces/klib/debug.h"
+ 449              		.section	.debug_info
+ 450 0000 6C0C0000 		.long	0xc6c
+ 451 0004 0200     		.value	0x2
+ 452 0006 00000000 		.long	.Ldebug_abbrev0
+ 453 000a 08       		.byte	0x8
+ 454 000b 01       		.uleb128 0x1
+ 455 000c 00000000 		.long	.LASF317
+ 456 0010 01       		.byte	0x1
+ 457 0011 00000000 		.long	.LASF318
+ 458 0015 00000000 		.long	.LASF319
+ 459 0019 00000000 		.quad	.Ltext0
+ 459      00000000 
+ 460 0021 00000000 		.quad	.Letext0
+ 460      00000000 
+ 461 0029 00000000 		.long	.Ldebug_line0
+ 462 002d 02       		.uleb128 0x2
+ 463 002e 01       		.byte	0x1
+ 464 002f 06       		.byte	0x6
+ 465 0030 00000000 		.long	.LASF0
+ 466 0034 02       		.uleb128 0x2
+ 467 0035 02       		.byte	0x2
+ 468 0036 05       		.byte	0x5
+ 469 0037 00000000 		.long	.LASF1
+ 470 003b 03       		.uleb128 0x3
+ 471 003c 04       		.byte	0x4
+ 472 003d 05       		.byte	0x5
+ 473 003e 696E7400 		.string	"int"
+ 474 0042 02       		.uleb128 0x2
+ 475 0043 08       		.byte	0x8
+ 476 0044 05       		.byte	0x5
+ 477 0045 00000000 		.long	.LASF2
+ 478 0049 04       		.uleb128 0x4
+
GAS LISTING /tmp/ccIEtKUs.s 			page 16
+
+
+ 479 004a 00000000 		.long	.LASF5
+ 480 004e 02       		.byte	0x2
+ 481 004f 31       		.byte	0x31
+ 482 0050 54000000 		.long	0x54
+ 483 0054 02       		.uleb128 0x2
+ 484 0055 01       		.byte	0x1
+ 485 0056 08       		.byte	0x8
+ 486 0057 00000000 		.long	.LASF3
+ 487 005b 02       		.uleb128 0x2
+ 488 005c 02       		.byte	0x2
+ 489 005d 07       		.byte	0x7
+ 490 005e 00000000 		.long	.LASF4
+ 491 0062 04       		.uleb128 0x4
+ 492 0063 00000000 		.long	.LASF6
+ 493 0067 02       		.byte	0x2
+ 494 0068 34       		.byte	0x34
+ 495 0069 6D000000 		.long	0x6d
+ 496 006d 02       		.uleb128 0x2
+ 497 006e 04       		.byte	0x4
+ 498 006f 07       		.byte	0x7
+ 499 0070 00000000 		.long	.LASF7
+ 500 0074 02       		.uleb128 0x2
+ 501 0075 08       		.byte	0x8
+ 502 0076 07       		.byte	0x7
+ 503 0077 00000000 		.long	.LASF8
+ 504 007b 04       		.uleb128 0x4
+ 505 007c 00000000 		.long	.LASF9
+ 506 0080 03       		.byte	0x3
+ 507 0081 30       		.byte	0x30
+ 508 0082 62000000 		.long	0x62
+ 509 0086 05       		.uleb128 0x5
+ 510 0087 08       		.byte	0x8
+ 511 0088 06       		.uleb128 0x6
+ 512 0089 08       		.byte	0x8
+ 513 008a 07       		.byte	0x7
+ 514 008b 07       		.uleb128 0x7
+ 515 008c 08       		.byte	0x8
+ 516 008d 91000000 		.long	0x91
+ 517 0091 08       		.uleb128 0x8
+ 518 0092 96000000 		.long	0x96
+ 519 0096 02       		.uleb128 0x2
+ 520 0097 01       		.byte	0x1
+ 521 0098 06       		.byte	0x6
+ 522 0099 00000000 		.long	.LASF10
+ 523 009d 09       		.uleb128 0x9
+ 524 009e 04       		.byte	0x4
+ 525 009f 08       		.byte	0x8
+ 526 00a0 D6       		.byte	0xd6
+ 527 00a1 1E010000 		.long	0x11e
+ 528 00a5 0A       		.uleb128 0xa
+ 529 00a6 00000000 		.long	.LASF11
+ 530 00aa 7F       		.sleb128 -1
+ 531 00ab 0A       		.uleb128 0xa
+ 532 00ac 00000000 		.long	.LASF12
+ 533 00b0 00       		.sleb128 0
+ 534 00b1 0A       		.uleb128 0xa
+ 535 00b2 00000000 		.long	.LASF13
+
GAS LISTING /tmp/ccIEtKUs.s 			page 17
+
+
+ 536 00b6 01       		.sleb128 1
+ 537 00b7 0A       		.uleb128 0xa
+ 538 00b8 00000000 		.long	.LASF14
+ 539 00bc 02       		.sleb128 2
+ 540 00bd 0A       		.uleb128 0xa
+ 541 00be 00000000 		.long	.LASF15
+ 542 00c2 03       		.sleb128 3
+ 543 00c3 0A       		.uleb128 0xa
+ 544 00c4 00000000 		.long	.LASF16
+ 545 00c8 04       		.sleb128 4
+ 546 00c9 0A       		.uleb128 0xa
+ 547 00ca 00000000 		.long	.LASF17
+ 548 00ce 05       		.sleb128 5
+ 549 00cf 0A       		.uleb128 0xa
+ 550 00d0 00000000 		.long	.LASF18
+ 551 00d4 06       		.sleb128 6
+ 552 00d5 0A       		.uleb128 0xa
+ 553 00d6 00000000 		.long	.LASF19
+ 554 00da 07       		.sleb128 7
+ 555 00db 0A       		.uleb128 0xa
+ 556 00dc 00000000 		.long	.LASF20
+ 557 00e0 08       		.sleb128 8
+ 558 00e1 0A       		.uleb128 0xa
+ 559 00e2 00000000 		.long	.LASF21
+ 560 00e6 09       		.sleb128 9
+ 561 00e7 0A       		.uleb128 0xa
+ 562 00e8 00000000 		.long	.LASF22
+ 563 00ec 0A       		.sleb128 10
+ 564 00ed 0A       		.uleb128 0xa
+ 565 00ee 00000000 		.long	.LASF23
+ 566 00f2 0B       		.sleb128 11
+ 567 00f3 0A       		.uleb128 0xa
+ 568 00f4 00000000 		.long	.LASF24
+ 569 00f8 0C       		.sleb128 12
+ 570 00f9 0A       		.uleb128 0xa
+ 571 00fa 00000000 		.long	.LASF25
+ 572 00fe 0D       		.sleb128 13
+ 573 00ff 0A       		.uleb128 0xa
+ 574 0100 00000000 		.long	.LASF26
+ 575 0104 0E       		.sleb128 14
+ 576 0105 0A       		.uleb128 0xa
+ 577 0106 00000000 		.long	.LASF27
+ 578 010a 0F       		.sleb128 15
+ 579 010b 0A       		.uleb128 0xa
+ 580 010c 00000000 		.long	.LASF28
+ 581 0110 10       		.sleb128 16
+ 582 0111 0A       		.uleb128 0xa
+ 583 0112 00000000 		.long	.LASF29
+ 584 0116 11       		.sleb128 17
+ 585 0117 0A       		.uleb128 0xa
+ 586 0118 00000000 		.long	.LASF30
+ 587 011c 12       		.sleb128 18
+ 588 011d 00       		.byte	0x0
+ 589 011e 07       		.uleb128 0x7
+ 590 011f 08       		.byte	0x8
+ 591 0120 24010000 		.long	0x124
+ 592 0124 0B       		.uleb128 0xb
+
GAS LISTING /tmp/ccIEtKUs.s 			page 18
+
+
+ 593 0125 02       		.uleb128 0x2
+ 594 0126 08       		.byte	0x8
+ 595 0127 05       		.byte	0x5
+ 596 0128 00000000 		.long	.LASF31
+ 597 012c 02       		.uleb128 0x2
+ 598 012d 04       		.byte	0x4
+ 599 012e 04       		.byte	0x4
+ 600 012f 00000000 		.long	.LASF32
+ 601 0133 07       		.uleb128 0x7
+ 602 0134 08       		.byte	0x8
+ 603 0135 96000000 		.long	0x96
+ 604 0139 02       		.uleb128 0x2
+ 605 013a 08       		.byte	0x8
+ 606 013b 07       		.byte	0x7
+ 607 013c 00000000 		.long	.LASF33
+ 608 0140 02       		.uleb128 0x2
+ 609 0141 08       		.byte	0x8
+ 610 0142 04       		.byte	0x4
+ 611 0143 00000000 		.long	.LASF34
+ 612 0147 04       		.uleb128 0x4
+ 613 0148 00000000 		.long	.LASF35
+ 614 014c 04       		.byte	0x4
+ 615 014d 26       		.byte	0x26
+ 616 014e 52010000 		.long	0x152
+ 617 0152 0C       		.uleb128 0xc
+ 618 0153 01       		.byte	0x1
+ 619 0154 49000000 		.long	0x49
+ 620 0158 63010000 		.long	0x163
+ 621 015c 0D       		.uleb128 0xd
+ 622 015d 88000000 		.long	0x88
+ 623 0161 0F       		.byte	0xf
+ 624 0162 00       		.byte	0x0
+ 625 0163 04       		.uleb128 0x4
+ 626 0164 00000000 		.long	.LASF36
+ 627 0168 05       		.byte	0x5
+ 628 0169 3B       		.byte	0x3b
+ 629 016a 47010000 		.long	0x147
+ 630 016e 04       		.uleb128 0x4
+ 631 016f 00000000 		.long	.LASF37
+ 632 0173 05       		.byte	0x5
+ 633 0174 43       		.byte	0x43
+ 634 0175 79010000 		.long	0x179
+ 635 0179 0E       		.uleb128 0xe
+ 636 017a 00000000 		.long	.LASF37
+ 637 017e 08       		.byte	0x8
+ 638 017f 05       		.byte	0x5
+ 639 0180 43       		.byte	0x43
+ 640 0181 A2010000 		.long	0x1a2
+ 641 0185 0F       		.uleb128 0xf
+ 642 0186 6D616A00 		.string	"maj"
+ 643 018a 05       		.byte	0x5
+ 644 018b 46       		.byte	0x46
+ 645 018c 62000000 		.long	0x62
+ 646 0190 02       		.byte	0x2
+ 647 0191 23       		.byte	0x23
+ 648 0192 00       		.uleb128 0x0
+ 649 0193 0F       		.uleb128 0xf
+
GAS LISTING /tmp/ccIEtKUs.s 			page 19
+
+
+ 650 0194 6D696E00 		.string	"min"
+ 651 0198 05       		.byte	0x5
+ 652 0199 47       		.byte	0x47
+ 653 019a 62000000 		.long	0x62
+ 654 019e 02       		.byte	0x2
+ 655 019f 23       		.byte	0x23
+ 656 01a0 04       		.uleb128 0x4
+ 657 01a1 00       		.byte	0x0
+ 658 01a2 04       		.uleb128 0x4
+ 659 01a3 00000000 		.long	.LASF38
+ 660 01a7 05       		.byte	0x5
+ 661 01a8 52       		.byte	0x52
+ 662 01a9 AD010000 		.long	0x1ad
+ 663 01ad 0E       		.uleb128 0xe
+ 664 01ae 00000000 		.long	.LASF38
+ 665 01b2 40       		.byte	0x40
+ 666 01b3 05       		.byte	0x5
+ 667 01b4 52       		.byte	0x52
+ 668 01b5 2A020000 		.long	0x22a
+ 669 01b9 10       		.uleb128 0x10
+ 670 01ba 00000000 		.long	.LASF39
+ 671 01be 05       		.byte	0x5
+ 672 01bf 5E       		.byte	0x5e
+ 673 01c0 6E010000 		.long	0x16e
+ 674 01c4 02       		.byte	0x2
+ 675 01c5 23       		.byte	0x23
+ 676 01c6 00       		.uleb128 0x0
+ 677 01c7 10       		.uleb128 0x10
+ 678 01c8 00000000 		.long	.LASF40
+ 679 01cc 05       		.byte	0x5
+ 680 01cd 63       		.byte	0x63
+ 681 01ce 6E020000 		.long	0x26e
+ 682 01d2 02       		.byte	0x2
+ 683 01d3 23       		.byte	0x23
+ 684 01d4 08       		.uleb128 0x8
+ 685 01d5 10       		.uleb128 0x10
+ 686 01d6 00000000 		.long	.LASF41
+ 687 01da 05       		.byte	0x5
+ 688 01db 65       		.byte	0x65
+ 689 01dc 7F020000 		.long	0x27f
+ 690 01e0 02       		.byte	0x2
+ 691 01e1 23       		.byte	0x23
+ 692 01e2 10       		.uleb128 0x10
+ 693 01e3 10       		.uleb128 0x10
+ 694 01e4 00000000 		.long	.LASF42
+ 695 01e8 05       		.byte	0x5
+ 696 01e9 67       		.byte	0x67
+ 697 01ea 7F020000 		.long	0x27f
+ 698 01ee 02       		.byte	0x2
+ 699 01ef 23       		.byte	0x23
+ 700 01f0 18       		.uleb128 0x18
+ 701 01f1 10       		.uleb128 0x10
+ 702 01f2 00000000 		.long	.LASF43
+ 703 01f6 05       		.byte	0x5
+ 704 01f7 69       		.byte	0x69
+ 705 01f8 9F020000 		.long	0x29f
+ 706 01fc 02       		.byte	0x2
+
GAS LISTING /tmp/ccIEtKUs.s 			page 20
+
+
+ 707 01fd 23       		.byte	0x23
+ 708 01fe 20       		.uleb128 0x20
+ 709 01ff 10       		.uleb128 0x10
+ 710 0200 00000000 		.long	.LASF44
+ 711 0204 05       		.byte	0x5
+ 712 0205 6D       		.byte	0x6d
+ 713 0206 9F020000 		.long	0x29f
+ 714 020a 02       		.byte	0x2
+ 715 020b 23       		.byte	0x23
+ 716 020c 28       		.uleb128 0x28
+ 717 020d 10       		.uleb128 0x10
+ 718 020e 00000000 		.long	.LASF45
+ 719 0212 05       		.byte	0x5
+ 720 0213 71       		.byte	0x71
+ 721 0214 BB020000 		.long	0x2bb
+ 722 0218 02       		.byte	0x2
+ 723 0219 23       		.byte	0x23
+ 724 021a 30       		.uleb128 0x30
+ 725 021b 10       		.uleb128 0x10
+ 726 021c 00000000 		.long	.LASF46
+ 727 0220 05       		.byte	0x5
+ 728 0221 75       		.byte	0x75
+ 729 0222 BB020000 		.long	0x2bb
+ 730 0226 02       		.byte	0x2
+ 731 0227 23       		.byte	0x23
+ 732 0228 38       		.uleb128 0x38
+ 733 0229 00       		.byte	0x0
+ 734 022a 04       		.uleb128 0x4
+ 735 022b 00000000 		.long	.LASF47
+ 736 022f 05       		.byte	0x5
+ 737 0230 53       		.byte	0x53
+ 738 0231 35020000 		.long	0x235
+ 739 0235 11       		.uleb128 0x11
+ 740 0236 00000000 		.long	.LASF47
+ 741 023a 40       		.byte	0x40
+ 742 023b 05       		.byte	0x5
+ 743 023c 53       		.byte	0x53
+ 744 023d 57020000 		.long	0x257
+ 745 0241 12       		.uleb128 0x12
+ 746 0242 00000000 		.long	.LASF39
+ 747 0246 05       		.byte	0x5
+ 748 0247 7F       		.byte	0x7f
+ 749 0248 6E010000 		.long	0x16e
+ 750 024c 13       		.uleb128 0x13
+ 751 024d 763100   		.string	"v1"
+ 752 0250 05       		.byte	0x5
+ 753 0251 80       		.byte	0x80
+ 754 0252 A2010000 		.long	0x1a2
+ 755 0256 00       		.byte	0x0
+ 756 0257 14       		.uleb128 0x14
+ 757 0258 01       		.byte	0x1
+ 758 0259 63020000 		.long	0x263
+ 759 025d 15       		.uleb128 0x15
+ 760 025e 63020000 		.long	0x263
+ 761 0262 00       		.byte	0x0
+ 762 0263 07       		.uleb128 0x7
+ 763 0264 08       		.byte	0x8
+
GAS LISTING /tmp/ccIEtKUs.s 			page 21
+
+
+ 764 0265 69020000 		.long	0x269
+ 765 0269 08       		.uleb128 0x8
+ 766 026a 2A020000 		.long	0x22a
+ 767 026e 07       		.uleb128 0x7
+ 768 026f 08       		.byte	0x8
+ 769 0270 57020000 		.long	0x257
+ 770 0274 16       		.uleb128 0x16
+ 771 0275 62000000 		.long	0x62
+ 772 0279 7F020000 		.long	0x27f
+ 773 027d 17       		.uleb128 0x17
+ 774 027e 00       		.byte	0x0
+ 775 027f 07       		.uleb128 0x7
+ 776 0280 08       		.byte	0x8
+ 777 0281 74020000 		.long	0x274
+ 778 0285 18       		.uleb128 0x18
+ 779 0286 01       		.byte	0x1
+ 780 0287 7B000000 		.long	0x7b
+ 781 028b 9F020000 		.long	0x29f
+ 782 028f 15       		.uleb128 0x15
+ 783 0290 86000000 		.long	0x86
+ 784 0294 15       		.uleb128 0x15
+ 785 0295 8B000000 		.long	0x8b
+ 786 0299 15       		.uleb128 0x15
+ 787 029a 62000000 		.long	0x62
+ 788 029e 00       		.byte	0x0
+ 789 029f 07       		.uleb128 0x7
+ 790 02a0 08       		.byte	0x8
+ 791 02a1 85020000 		.long	0x285
+ 792 02a5 14       		.uleb128 0x14
+ 793 02a6 01       		.byte	0x1
+ 794 02a7 BB020000 		.long	0x2bb
+ 795 02ab 15       		.uleb128 0x15
+ 796 02ac 8B000000 		.long	0x8b
+ 797 02b0 15       		.uleb128 0x15
+ 798 02b1 33010000 		.long	0x133
+ 799 02b5 15       		.uleb128 0x15
+ 800 02b6 1E010000 		.long	0x11e
+ 801 02ba 00       		.byte	0x0
+ 802 02bb 07       		.uleb128 0x7
+ 803 02bc 08       		.byte	0x8
+ 804 02bd A5020000 		.long	0x2a5
+ 805 02c1 04       		.uleb128 0x4
+ 806 02c2 00000000 		.long	.LASF48
+ 807 02c6 05       		.byte	0x5
+ 808 02c7 84       		.byte	0x84
+ 809 02c8 CC020000 		.long	0x2cc
+ 810 02cc 0E       		.uleb128 0xe
+ 811 02cd 00000000 		.long	.LASF48
+ 812 02d1 40       		.byte	0x40
+ 813 02d2 05       		.byte	0x5
+ 814 02d3 84       		.byte	0x84
+ 815 02d4 49030000 		.long	0x349
+ 816 02d8 10       		.uleb128 0x10
+ 817 02d9 00000000 		.long	.LASF39
+ 818 02dd 05       		.byte	0x5
+ 819 02de 90       		.byte	0x90
+ 820 02df 6E010000 		.long	0x16e
+
GAS LISTING /tmp/ccIEtKUs.s 			page 22
+
+
+ 821 02e3 02       		.byte	0x2
+ 822 02e4 23       		.byte	0x23
+ 823 02e5 00       		.uleb128 0x0
+ 824 02e6 10       		.uleb128 0x10
+ 825 02e7 00000000 		.long	.LASF40
+ 826 02eb 05       		.byte	0x5
+ 827 02ec 95       		.byte	0x95
+ 828 02ed 8D030000 		.long	0x38d
+ 829 02f1 02       		.byte	0x2
+ 830 02f2 23       		.byte	0x23
+ 831 02f3 08       		.uleb128 0x8
+ 832 02f4 10       		.uleb128 0x10
+ 833 02f5 00000000 		.long	.LASF41
+ 834 02f9 05       		.byte	0x5
+ 835 02fa 97       		.byte	0x97
+ 836 02fb 7F020000 		.long	0x27f
+ 837 02ff 02       		.byte	0x2
+ 838 0300 23       		.byte	0x23
+ 839 0301 10       		.uleb128 0x10
+ 840 0302 10       		.uleb128 0x10
+ 841 0303 00000000 		.long	.LASF42
+ 842 0307 05       		.byte	0x5
+ 843 0308 99       		.byte	0x99
+ 844 0309 7F020000 		.long	0x27f
+ 845 030d 02       		.byte	0x2
+ 846 030e 23       		.byte	0x23
+ 847 030f 18       		.uleb128 0x18
+ 848 0310 10       		.uleb128 0x10
+ 849 0311 00000000 		.long	.LASF43
+ 850 0315 05       		.byte	0x5
+ 851 0316 9B       		.byte	0x9b
+ 852 0317 9F020000 		.long	0x29f
+ 853 031b 02       		.byte	0x2
+ 854 031c 23       		.byte	0x23
+ 855 031d 20       		.uleb128 0x20
+ 856 031e 10       		.uleb128 0x10
+ 857 031f 00000000 		.long	.LASF44
+ 858 0323 05       		.byte	0x5
+ 859 0324 9F       		.byte	0x9f
+ 860 0325 9F020000 		.long	0x29f
+ 861 0329 02       		.byte	0x2
+ 862 032a 23       		.byte	0x23
+ 863 032b 28       		.uleb128 0x28
+ 864 032c 10       		.uleb128 0x10
+ 865 032d 00000000 		.long	.LASF45
+ 866 0331 05       		.byte	0x5
+ 867 0332 A3       		.byte	0xa3
+ 868 0333 A8030000 		.long	0x3a8
+ 869 0337 02       		.byte	0x2
+ 870 0338 23       		.byte	0x23
+ 871 0339 30       		.uleb128 0x30
+ 872 033a 10       		.uleb128 0x10
+ 873 033b 00000000 		.long	.LASF46
+ 874 033f 05       		.byte	0x5
+ 875 0340 A6       		.byte	0xa6
+ 876 0341 A8030000 		.long	0x3a8
+ 877 0345 02       		.byte	0x2
+
GAS LISTING /tmp/ccIEtKUs.s 			page 23
+
+
+ 878 0346 23       		.byte	0x23
+ 879 0347 38       		.uleb128 0x38
+ 880 0348 00       		.byte	0x0
+ 881 0349 04       		.uleb128 0x4
+ 882 034a 00000000 		.long	.LASF49
+ 883 034e 05       		.byte	0x5
+ 884 034f 85       		.byte	0x85
+ 885 0350 54030000 		.long	0x354
+ 886 0354 11       		.uleb128 0x11
+ 887 0355 00000000 		.long	.LASF49
+ 888 0359 40       		.byte	0x40
+ 889 035a 05       		.byte	0x5
+ 890 035b 85       		.byte	0x85
+ 891 035c 76030000 		.long	0x376
+ 892 0360 12       		.uleb128 0x12
+ 893 0361 00000000 		.long	.LASF39
+ 894 0365 05       		.byte	0x5
+ 895 0366 AF       		.byte	0xaf
+ 896 0367 6E010000 		.long	0x16e
+ 897 036b 13       		.uleb128 0x13
+ 898 036c 763100   		.string	"v1"
+ 899 036f 05       		.byte	0x5
+ 900 0370 B0       		.byte	0xb0
+ 901 0371 C1020000 		.long	0x2c1
+ 902 0375 00       		.byte	0x0
+ 903 0376 14       		.uleb128 0x14
+ 904 0377 01       		.byte	0x1
+ 905 0378 82030000 		.long	0x382
+ 906 037c 15       		.uleb128 0x15
+ 907 037d 82030000 		.long	0x382
+ 908 0381 00       		.byte	0x0
+ 909 0382 07       		.uleb128 0x7
+ 910 0383 08       		.byte	0x8
+ 911 0384 88030000 		.long	0x388
+ 912 0388 08       		.uleb128 0x8
+ 913 0389 49030000 		.long	0x349
+ 914 038d 07       		.uleb128 0x7
+ 915 038e 08       		.byte	0x8
+ 916 038f 76030000 		.long	0x376
+ 917 0393 18       		.uleb128 0x18
+ 918 0394 01       		.byte	0x1
+ 919 0395 63010000 		.long	0x163
+ 920 0399 A8030000 		.long	0x3a8
+ 921 039d 15       		.uleb128 0x15
+ 922 039e 63010000 		.long	0x163
+ 923 03a2 15       		.uleb128 0x15
+ 924 03a3 1E010000 		.long	0x11e
+ 925 03a7 00       		.byte	0x0
+ 926 03a8 07       		.uleb128 0x7
+ 927 03a9 08       		.byte	0x8
+ 928 03aa 93030000 		.long	0x393
+ 929 03ae 04       		.uleb128 0x4
+ 930 03af 00000000 		.long	.LASF50
+ 931 03b3 06       		.byte	0x6
+ 932 03b4 40       		.byte	0x40
+ 933 03b5 B9030000 		.long	0x3b9
+ 934 03b9 11       		.uleb128 0x11
+
GAS LISTING /tmp/ccIEtKUs.s 			page 24
+
+
+ 935 03ba 00000000 		.long	.LASF50
+ 936 03be 40       		.byte	0x40
+ 937 03bf 06       		.byte	0x6
+ 938 03c0 40       		.byte	0x40
+ 939 03c1 DC030000 		.long	0x3dc
+ 940 03c5 12       		.uleb128 0x12
+ 941 03c6 00000000 		.long	.LASF51
+ 942 03ca 06       		.byte	0x6
+ 943 03cb 43       		.byte	0x43
+ 944 03cc 2A020000 		.long	0x22a
+ 945 03d0 13       		.uleb128 0x13
+ 946 03d1 76656300 		.string	"vec"
+ 947 03d5 06       		.byte	0x6
+ 948 03d6 44       		.byte	0x44
+ 949 03d7 49030000 		.long	0x349
+ 950 03db 00       		.byte	0x0
+ 951 03dc 19       		.uleb128 0x19
+ 952 03dd 00000000 		.long	.LASF74
+ 953 03e1 04       		.byte	0x4
+ 954 03e2 07       		.byte	0x7
+ 955 03e3 5A       		.byte	0x5a
+ 956 03e4 6D040000 		.long	0x46d
+ 957 03e8 0A       		.uleb128 0xa
+ 958 03e9 00000000 		.long	.LASF52
+ 959 03ed 00       		.sleb128 0
+ 960 03ee 0A       		.uleb128 0xa
+ 961 03ef 00000000 		.long	.LASF53
+ 962 03f3 01       		.sleb128 1
+ 963 03f4 0A       		.uleb128 0xa
+ 964 03f5 00000000 		.long	.LASF54
+ 965 03f9 02       		.sleb128 2
+ 966 03fa 0A       		.uleb128 0xa
+ 967 03fb 00000000 		.long	.LASF55
+ 968 03ff 03       		.sleb128 3
+ 969 0400 0A       		.uleb128 0xa
+ 970 0401 00000000 		.long	.LASF56
+ 971 0405 04       		.sleb128 4
+ 972 0406 0A       		.uleb128 0xa
+ 973 0407 00000000 		.long	.LASF57
+ 974 040b 05       		.sleb128 5
+ 975 040c 0A       		.uleb128 0xa
+ 976 040d 00000000 		.long	.LASF58
+ 977 0411 06       		.sleb128 6
+ 978 0412 0A       		.uleb128 0xa
+ 979 0413 00000000 		.long	.LASF59
+ 980 0417 07       		.sleb128 7
+ 981 0418 0A       		.uleb128 0xa
+ 982 0419 00000000 		.long	.LASF60
+ 983 041d 08       		.sleb128 8
+ 984 041e 0A       		.uleb128 0xa
+ 985 041f 00000000 		.long	.LASF61
+ 986 0423 09       		.sleb128 9
+ 987 0424 0A       		.uleb128 0xa
+ 988 0425 00000000 		.long	.LASF62
+ 989 0429 0A       		.sleb128 10
+ 990 042a 0A       		.uleb128 0xa
+ 991 042b 00000000 		.long	.LASF63
+
GAS LISTING /tmp/ccIEtKUs.s 			page 25
+
+
+ 992 042f 0B       		.sleb128 11
+ 993 0430 0A       		.uleb128 0xa
+ 994 0431 00000000 		.long	.LASF64
+ 995 0435 0C       		.sleb128 12
+ 996 0436 0A       		.uleb128 0xa
+ 997 0437 00000000 		.long	.LASF65
+ 998 043b 0D       		.sleb128 13
+ 999 043c 0A       		.uleb128 0xa
+ 1000 043d 00000000 		.long	.LASF66
+ 1001 0441 0E       		.sleb128 14
+ 1002 0442 0A       		.uleb128 0xa
+ 1003 0443 00000000 		.long	.LASF67
+ 1004 0447 0E       		.sleb128 14
+ 1005 0448 0A       		.uleb128 0xa
+ 1006 0449 00000000 		.long	.LASF68
+ 1007 044d 0F       		.sleb128 15
+ 1008 044e 0A       		.uleb128 0xa
+ 1009 044f 00000000 		.long	.LASF69
+ 1010 0453 10       		.sleb128 16
+ 1011 0454 0A       		.uleb128 0xa
+ 1012 0455 00000000 		.long	.LASF70
+ 1013 0459 11       		.sleb128 17
+ 1014 045a 0A       		.uleb128 0xa
+ 1015 045b 00000000 		.long	.LASF71
+ 1016 045f 12       		.sleb128 18
+ 1017 0460 0A       		.uleb128 0xa
+ 1018 0461 00000000 		.long	.LASF72
+ 1019 0465 13       		.sleb128 19
+ 1020 0466 0A       		.uleb128 0xa
+ 1021 0467 00000000 		.long	.LASF73
+ 1022 046b 14       		.sleb128 20
+ 1023 046c 00       		.byte	0x0
+ 1024 046d 19       		.uleb128 0x19
+ 1025 046e 00000000 		.long	.LASF75
+ 1026 0472 04       		.byte	0x4
+ 1027 0473 07       		.byte	0x7
+ 1028 0474 77       		.byte	0x77
+ 1029 0475 F4050000 		.long	0x5f4
+ 1030 0479 0A       		.uleb128 0xa
+ 1031 047a 00000000 		.long	.LASF76
+ 1032 047e 00       		.sleb128 0
+ 1033 047f 0A       		.uleb128 0xa
+ 1034 0480 00000000 		.long	.LASF77
+ 1035 0484 01       		.sleb128 1
+ 1036 0485 0A       		.uleb128 0xa
+ 1037 0486 00000000 		.long	.LASF78
+ 1038 048a 02       		.sleb128 2
+ 1039 048b 0A       		.uleb128 0xa
+ 1040 048c 00000000 		.long	.LASF79
+ 1041 0490 03       		.sleb128 3
+ 1042 0491 0A       		.uleb128 0xa
+ 1043 0492 00000000 		.long	.LASF80
+ 1044 0496 04       		.sleb128 4
+ 1045 0497 0A       		.uleb128 0xa
+ 1046 0498 00000000 		.long	.LASF81
+ 1047 049c 05       		.sleb128 5
+ 1048 049d 0A       		.uleb128 0xa
+
GAS LISTING /tmp/ccIEtKUs.s 			page 26
+
+
+ 1049 049e 00000000 		.long	.LASF82
+ 1050 04a2 06       		.sleb128 6
+ 1051 04a3 0A       		.uleb128 0xa
+ 1052 04a4 00000000 		.long	.LASF83
+ 1053 04a8 07       		.sleb128 7
+ 1054 04a9 0A       		.uleb128 0xa
+ 1055 04aa 00000000 		.long	.LASF84
+ 1056 04ae 08       		.sleb128 8
+ 1057 04af 0A       		.uleb128 0xa
+ 1058 04b0 00000000 		.long	.LASF85
+ 1059 04b4 09       		.sleb128 9
+ 1060 04b5 0A       		.uleb128 0xa
+ 1061 04b6 00000000 		.long	.LASF86
+ 1062 04ba 0A       		.sleb128 10
+ 1063 04bb 0A       		.uleb128 0xa
+ 1064 04bc 00000000 		.long	.LASF87
+ 1065 04c0 0B       		.sleb128 11
+ 1066 04c1 0A       		.uleb128 0xa
+ 1067 04c2 00000000 		.long	.LASF88
+ 1068 04c6 0C       		.sleb128 12
+ 1069 04c7 0A       		.uleb128 0xa
+ 1070 04c8 00000000 		.long	.LASF89
+ 1071 04cc 0D       		.sleb128 13
+ 1072 04cd 0A       		.uleb128 0xa
+ 1073 04ce 00000000 		.long	.LASF90
+ 1074 04d2 0E       		.sleb128 14
+ 1075 04d3 0A       		.uleb128 0xa
+ 1076 04d4 00000000 		.long	.LASF91
+ 1077 04d8 0F       		.sleb128 15
+ 1078 04d9 0A       		.uleb128 0xa
+ 1079 04da 00000000 		.long	.LASF92
+ 1080 04de 10       		.sleb128 16
+ 1081 04df 0A       		.uleb128 0xa
+ 1082 04e0 00000000 		.long	.LASF93
+ 1083 04e4 11       		.sleb128 17
+ 1084 04e5 0A       		.uleb128 0xa
+ 1085 04e6 00000000 		.long	.LASF94
+ 1086 04ea 12       		.sleb128 18
+ 1087 04eb 0A       		.uleb128 0xa
+ 1088 04ec 00000000 		.long	.LASF95
+ 1089 04f0 13       		.sleb128 19
+ 1090 04f1 0A       		.uleb128 0xa
+ 1091 04f2 00000000 		.long	.LASF96
+ 1092 04f6 14       		.sleb128 20
+ 1093 04f7 0A       		.uleb128 0xa
+ 1094 04f8 00000000 		.long	.LASF97
+ 1095 04fc 15       		.sleb128 21
+ 1096 04fd 0A       		.uleb128 0xa
+ 1097 04fe 00000000 		.long	.LASF98
+ 1098 0502 16       		.sleb128 22
+ 1099 0503 0A       		.uleb128 0xa
+ 1100 0504 00000000 		.long	.LASF99
+ 1101 0508 17       		.sleb128 23
+ 1102 0509 0A       		.uleb128 0xa
+ 1103 050a 00000000 		.long	.LASF100
+ 1104 050e 18       		.sleb128 24
+ 1105 050f 0A       		.uleb128 0xa
+
GAS LISTING /tmp/ccIEtKUs.s 			page 27
+
+
+ 1106 0510 00000000 		.long	.LASF101
+ 1107 0514 19       		.sleb128 25
+ 1108 0515 0A       		.uleb128 0xa
+ 1109 0516 00000000 		.long	.LASF102
+ 1110 051a 1A       		.sleb128 26
+ 1111 051b 0A       		.uleb128 0xa
+ 1112 051c 00000000 		.long	.LASF103
+ 1113 0520 1B       		.sleb128 27
+ 1114 0521 0A       		.uleb128 0xa
+ 1115 0522 00000000 		.long	.LASF104
+ 1116 0526 1C       		.sleb128 28
+ 1117 0527 0A       		.uleb128 0xa
+ 1118 0528 00000000 		.long	.LASF105
+ 1119 052c 1D       		.sleb128 29
+ 1120 052d 0A       		.uleb128 0xa
+ 1121 052e 00000000 		.long	.LASF106
+ 1122 0532 1E       		.sleb128 30
+ 1123 0533 0A       		.uleb128 0xa
+ 1124 0534 00000000 		.long	.LASF107
+ 1125 0538 1F       		.sleb128 31
+ 1126 0539 0A       		.uleb128 0xa
+ 1127 053a 00000000 		.long	.LASF108
+ 1128 053e 20       		.sleb128 32
+ 1129 053f 0A       		.uleb128 0xa
+ 1130 0540 00000000 		.long	.LASF109
+ 1131 0544 21       		.sleb128 33
+ 1132 0545 0A       		.uleb128 0xa
+ 1133 0546 00000000 		.long	.LASF110
+ 1134 054a 22       		.sleb128 34
+ 1135 054b 0A       		.uleb128 0xa
+ 1136 054c 00000000 		.long	.LASF111
+ 1137 0550 23       		.sleb128 35
+ 1138 0551 0A       		.uleb128 0xa
+ 1139 0552 00000000 		.long	.LASF112
+ 1140 0556 24       		.sleb128 36
+ 1141 0557 0A       		.uleb128 0xa
+ 1142 0558 00000000 		.long	.LASF113
+ 1143 055c 25       		.sleb128 37
+ 1144 055d 0A       		.uleb128 0xa
+ 1145 055e 00000000 		.long	.LASF114
+ 1146 0562 26       		.sleb128 38
+ 1147 0563 0A       		.uleb128 0xa
+ 1148 0564 00000000 		.long	.LASF115
+ 1149 0568 27       		.sleb128 39
+ 1150 0569 0A       		.uleb128 0xa
+ 1151 056a 00000000 		.long	.LASF116
+ 1152 056e 28       		.sleb128 40
+ 1153 056f 0A       		.uleb128 0xa
+ 1154 0570 00000000 		.long	.LASF117
+ 1155 0574 29       		.sleb128 41
+ 1156 0575 0A       		.uleb128 0xa
+ 1157 0576 00000000 		.long	.LASF118
+ 1158 057a 2A       		.sleb128 42
+ 1159 057b 0A       		.uleb128 0xa
+ 1160 057c 00000000 		.long	.LASF119
+ 1161 0580 2B       		.sleb128 43
+ 1162 0581 0A       		.uleb128 0xa
+
GAS LISTING /tmp/ccIEtKUs.s 			page 28
+
+
+ 1163 0582 00000000 		.long	.LASF120
+ 1164 0586 2C       		.sleb128 44
+ 1165 0587 0A       		.uleb128 0xa
+ 1166 0588 00000000 		.long	.LASF121
+ 1167 058c 2D       		.sleb128 45
+ 1168 058d 0A       		.uleb128 0xa
+ 1169 058e 00000000 		.long	.LASF122
+ 1170 0592 2E       		.sleb128 46
+ 1171 0593 0A       		.uleb128 0xa
+ 1172 0594 00000000 		.long	.LASF123
+ 1173 0598 2F       		.sleb128 47
+ 1174 0599 0A       		.uleb128 0xa
+ 1175 059a 00000000 		.long	.LASF124
+ 1176 059e 30       		.sleb128 48
+ 1177 059f 0A       		.uleb128 0xa
+ 1178 05a0 00000000 		.long	.LASF125
+ 1179 05a4 31       		.sleb128 49
+ 1180 05a5 0A       		.uleb128 0xa
+ 1181 05a6 00000000 		.long	.LASF126
+ 1182 05aa 32       		.sleb128 50
+ 1183 05ab 0A       		.uleb128 0xa
+ 1184 05ac 00000000 		.long	.LASF127
+ 1185 05b0 33       		.sleb128 51
+ 1186 05b1 0A       		.uleb128 0xa
+ 1187 05b2 00000000 		.long	.LASF128
+ 1188 05b6 34       		.sleb128 52
+ 1189 05b7 0A       		.uleb128 0xa
+ 1190 05b8 00000000 		.long	.LASF129
+ 1191 05bc 35       		.sleb128 53
+ 1192 05bd 0A       		.uleb128 0xa
+ 1193 05be 00000000 		.long	.LASF130
+ 1194 05c2 36       		.sleb128 54
+ 1195 05c3 0A       		.uleb128 0xa
+ 1196 05c4 00000000 		.long	.LASF131
+ 1197 05c8 36       		.sleb128 54
+ 1198 05c9 0A       		.uleb128 0xa
+ 1199 05ca 00000000 		.long	.LASF132
+ 1200 05ce 37       		.sleb128 55
+ 1201 05cf 0A       		.uleb128 0xa
+ 1202 05d0 00000000 		.long	.LASF133
+ 1203 05d4 38       		.sleb128 56
+ 1204 05d5 0A       		.uleb128 0xa
+ 1205 05d6 00000000 		.long	.LASF134
+ 1206 05da 39       		.sleb128 57
+ 1207 05db 0A       		.uleb128 0xa
+ 1208 05dc 00000000 		.long	.LASF135
+ 1209 05e0 3A       		.sleb128 58
+ 1210 05e1 0A       		.uleb128 0xa
+ 1211 05e2 00000000 		.long	.LASF136
+ 1212 05e6 3B       		.sleb128 59
+ 1213 05e7 0A       		.uleb128 0xa
+ 1214 05e8 00000000 		.long	.LASF137
+ 1215 05ec 3C       		.sleb128 60
+ 1216 05ed 0A       		.uleb128 0xa
+ 1217 05ee 00000000 		.long	.LASF138
+ 1218 05f2 3D       		.sleb128 61
+ 1219 05f3 00       		.byte	0x0
+
GAS LISTING /tmp/ccIEtKUs.s 			page 29
+
+
+ 1220 05f4 19       		.uleb128 0x19
+ 1221 05f5 00000000 		.long	.LASF139
+ 1222 05f9 04       		.byte	0x4
+ 1223 05fa 07       		.byte	0x7
+ 1224 05fb BD       		.byte	0xbd
+ 1225 05fc AA070000 		.long	0x7aa
+ 1226 0600 0A       		.uleb128 0xa
+ 1227 0601 00000000 		.long	.LASF140
+ 1228 0605 00       		.sleb128 0
+ 1229 0606 0A       		.uleb128 0xa
+ 1230 0607 00000000 		.long	.LASF141
+ 1231 060b 01       		.sleb128 1
+ 1232 060c 0A       		.uleb128 0xa
+ 1233 060d 00000000 		.long	.LASF142
+ 1234 0611 02       		.sleb128 2
+ 1235 0612 0A       		.uleb128 0xa
+ 1236 0613 00000000 		.long	.LASF143
+ 1237 0617 03       		.sleb128 3
+ 1238 0618 0A       		.uleb128 0xa
+ 1239 0619 00000000 		.long	.LASF144
+ 1240 061d 04       		.sleb128 4
+ 1241 061e 0A       		.uleb128 0xa
+ 1242 061f 00000000 		.long	.LASF145
+ 1243 0623 05       		.sleb128 5
+ 1244 0624 0A       		.uleb128 0xa
+ 1245 0625 00000000 		.long	.LASF146
+ 1246 0629 06       		.sleb128 6
+ 1247 062a 0A       		.uleb128 0xa
+ 1248 062b 00000000 		.long	.LASF147
+ 1249 062f 07       		.sleb128 7
+ 1250 0630 0A       		.uleb128 0xa
+ 1251 0631 00000000 		.long	.LASF148
+ 1252 0635 08       		.sleb128 8
+ 1253 0636 0A       		.uleb128 0xa
+ 1254 0637 00000000 		.long	.LASF149
+ 1255 063b 09       		.sleb128 9
+ 1256 063c 0A       		.uleb128 0xa
+ 1257 063d 00000000 		.long	.LASF150
+ 1258 0641 0A       		.sleb128 10
+ 1259 0642 0A       		.uleb128 0xa
+ 1260 0643 00000000 		.long	.LASF151
+ 1261 0647 0B       		.sleb128 11
+ 1262 0648 0A       		.uleb128 0xa
+ 1263 0649 00000000 		.long	.LASF152
+ 1264 064d 0C       		.sleb128 12
+ 1265 064e 0A       		.uleb128 0xa
+ 1266 064f 00000000 		.long	.LASF153
+ 1267 0653 0D       		.sleb128 13
+ 1268 0654 0A       		.uleb128 0xa
+ 1269 0655 00000000 		.long	.LASF154
+ 1270 0659 0E       		.sleb128 14
+ 1271 065a 0A       		.uleb128 0xa
+ 1272 065b 00000000 		.long	.LASF155
+ 1273 065f 0F       		.sleb128 15
+ 1274 0660 0A       		.uleb128 0xa
+ 1275 0661 00000000 		.long	.LASF156
+ 1276 0665 10       		.sleb128 16
+
GAS LISTING /tmp/ccIEtKUs.s 			page 30
+
+
+ 1277 0666 0A       		.uleb128 0xa
+ 1278 0667 00000000 		.long	.LASF157
+ 1279 066b 11       		.sleb128 17
+ 1280 066c 0A       		.uleb128 0xa
+ 1281 066d 00000000 		.long	.LASF158
+ 1282 0671 12       		.sleb128 18
+ 1283 0672 0A       		.uleb128 0xa
+ 1284 0673 00000000 		.long	.LASF159
+ 1285 0677 13       		.sleb128 19
+ 1286 0678 0A       		.uleb128 0xa
+ 1287 0679 00000000 		.long	.LASF160
+ 1288 067d 14       		.sleb128 20
+ 1289 067e 0A       		.uleb128 0xa
+ 1290 067f 00000000 		.long	.LASF161
+ 1291 0683 15       		.sleb128 21
+ 1292 0684 0A       		.uleb128 0xa
+ 1293 0685 00000000 		.long	.LASF162
+ 1294 0689 16       		.sleb128 22
+ 1295 068a 0A       		.uleb128 0xa
+ 1296 068b 00000000 		.long	.LASF163
+ 1297 068f 17       		.sleb128 23
+ 1298 0690 0A       		.uleb128 0xa
+ 1299 0691 00000000 		.long	.LASF164
+ 1300 0695 18       		.sleb128 24
+ 1301 0696 0A       		.uleb128 0xa
+ 1302 0697 00000000 		.long	.LASF165
+ 1303 069b 19       		.sleb128 25
+ 1304 069c 0A       		.uleb128 0xa
+ 1305 069d 00000000 		.long	.LASF166
+ 1306 06a1 1A       		.sleb128 26
+ 1307 06a2 0A       		.uleb128 0xa
+ 1308 06a3 00000000 		.long	.LASF167
+ 1309 06a7 1B       		.sleb128 27
+ 1310 06a8 0A       		.uleb128 0xa
+ 1311 06a9 00000000 		.long	.LASF168
+ 1312 06ad 1C       		.sleb128 28
+ 1313 06ae 0A       		.uleb128 0xa
+ 1314 06af 00000000 		.long	.LASF169
+ 1315 06b3 1D       		.sleb128 29
+ 1316 06b4 0A       		.uleb128 0xa
+ 1317 06b5 00000000 		.long	.LASF170
+ 1318 06b9 1E       		.sleb128 30
+ 1319 06ba 0A       		.uleb128 0xa
+ 1320 06bb 00000000 		.long	.LASF171
+ 1321 06bf 1F       		.sleb128 31
+ 1322 06c0 0A       		.uleb128 0xa
+ 1323 06c1 00000000 		.long	.LASF172
+ 1324 06c5 20       		.sleb128 32
+ 1325 06c6 0A       		.uleb128 0xa
+ 1326 06c7 00000000 		.long	.LASF173
+ 1327 06cb 21       		.sleb128 33
+ 1328 06cc 0A       		.uleb128 0xa
+ 1329 06cd 00000000 		.long	.LASF174
+ 1330 06d1 22       		.sleb128 34
+ 1331 06d2 0A       		.uleb128 0xa
+ 1332 06d3 00000000 		.long	.LASF175
+ 1333 06d7 23       		.sleb128 35
+
GAS LISTING /tmp/ccIEtKUs.s 			page 31
+
+
+ 1334 06d8 0A       		.uleb128 0xa
+ 1335 06d9 00000000 		.long	.LASF176
+ 1336 06dd 24       		.sleb128 36
+ 1337 06de 0A       		.uleb128 0xa
+ 1338 06df 00000000 		.long	.LASF177
+ 1339 06e3 25       		.sleb128 37
+ 1340 06e4 0A       		.uleb128 0xa
+ 1341 06e5 00000000 		.long	.LASF178
+ 1342 06e9 26       		.sleb128 38
+ 1343 06ea 0A       		.uleb128 0xa
+ 1344 06eb 00000000 		.long	.LASF179
+ 1345 06ef 27       		.sleb128 39
+ 1346 06f0 0A       		.uleb128 0xa
+ 1347 06f1 00000000 		.long	.LASF180
+ 1348 06f5 28       		.sleb128 40
+ 1349 06f6 0A       		.uleb128 0xa
+ 1350 06f7 00000000 		.long	.LASF181
+ 1351 06fb 29       		.sleb128 41
+ 1352 06fc 0A       		.uleb128 0xa
+ 1353 06fd 00000000 		.long	.LASF182
+ 1354 0701 2A       		.sleb128 42
+ 1355 0702 0A       		.uleb128 0xa
+ 1356 0703 00000000 		.long	.LASF183
+ 1357 0707 2B       		.sleb128 43
+ 1358 0708 0A       		.uleb128 0xa
+ 1359 0709 00000000 		.long	.LASF184
+ 1360 070d 2C       		.sleb128 44
+ 1361 070e 0A       		.uleb128 0xa
+ 1362 070f 00000000 		.long	.LASF185
+ 1363 0713 2D       		.sleb128 45
+ 1364 0714 0A       		.uleb128 0xa
+ 1365 0715 00000000 		.long	.LASF186
+ 1366 0719 2E       		.sleb128 46
+ 1367 071a 0A       		.uleb128 0xa
+ 1368 071b 00000000 		.long	.LASF187
+ 1369 071f 2F       		.sleb128 47
+ 1370 0720 0A       		.uleb128 0xa
+ 1371 0721 00000000 		.long	.LASF188
+ 1372 0725 30       		.sleb128 48
+ 1373 0726 0A       		.uleb128 0xa
+ 1374 0727 00000000 		.long	.LASF189
+ 1375 072b 31       		.sleb128 49
+ 1376 072c 0A       		.uleb128 0xa
+ 1377 072d 00000000 		.long	.LASF190
+ 1378 0731 32       		.sleb128 50
+ 1379 0732 0A       		.uleb128 0xa
+ 1380 0733 00000000 		.long	.LASF191
+ 1381 0737 33       		.sleb128 51
+ 1382 0738 0A       		.uleb128 0xa
+ 1383 0739 00000000 		.long	.LASF192
+ 1384 073d 34       		.sleb128 52
+ 1385 073e 0A       		.uleb128 0xa
+ 1386 073f 00000000 		.long	.LASF193
+ 1387 0743 35       		.sleb128 53
+ 1388 0744 0A       		.uleb128 0xa
+ 1389 0745 00000000 		.long	.LASF194
+ 1390 0749 36       		.sleb128 54
+
GAS LISTING /tmp/ccIEtKUs.s 			page 32
+
+
+ 1391 074a 0A       		.uleb128 0xa
+ 1392 074b 00000000 		.long	.LASF195
+ 1393 074f 37       		.sleb128 55
+ 1394 0750 0A       		.uleb128 0xa
+ 1395 0751 00000000 		.long	.LASF196
+ 1396 0755 38       		.sleb128 56
+ 1397 0756 0A       		.uleb128 0xa
+ 1398 0757 00000000 		.long	.LASF197
+ 1399 075b 39       		.sleb128 57
+ 1400 075c 0A       		.uleb128 0xa
+ 1401 075d 00000000 		.long	.LASF198
+ 1402 0761 3A       		.sleb128 58
+ 1403 0762 0A       		.uleb128 0xa
+ 1404 0763 00000000 		.long	.LASF199
+ 1405 0767 3A       		.sleb128 58
+ 1406 0768 0A       		.uleb128 0xa
+ 1407 0769 00000000 		.long	.LASF200
+ 1408 076d 3B       		.sleb128 59
+ 1409 076e 0A       		.uleb128 0xa
+ 1410 076f 00000000 		.long	.LASF201
+ 1411 0773 3C       		.sleb128 60
+ 1412 0774 0A       		.uleb128 0xa
+ 1413 0775 00000000 		.long	.LASF202
+ 1414 0779 3D       		.sleb128 61
+ 1415 077a 0A       		.uleb128 0xa
+ 1416 077b 00000000 		.long	.LASF203
+ 1417 077f 3E       		.sleb128 62
+ 1418 0780 0A       		.uleb128 0xa
+ 1419 0781 00000000 		.long	.LASF204
+ 1420 0785 3F       		.sleb128 63
+ 1421 0786 0A       		.uleb128 0xa
+ 1422 0787 00000000 		.long	.LASF205
+ 1423 078b C000     		.sleb128 64
+ 1424 078d 0A       		.uleb128 0xa
+ 1425 078e 00000000 		.long	.LASF206
+ 1426 0792 C100     		.sleb128 65
+ 1427 0794 0A       		.uleb128 0xa
+ 1428 0795 00000000 		.long	.LASF207
+ 1429 0799 C200     		.sleb128 66
+ 1430 079b 0A       		.uleb128 0xa
+ 1431 079c 00000000 		.long	.LASF208
+ 1432 07a0 C300     		.sleb128 67
+ 1433 07a2 0A       		.uleb128 0xa
+ 1434 07a3 00000000 		.long	.LASF209
+ 1435 07a7 C400     		.sleb128 68
+ 1436 07a9 00       		.byte	0x0
+ 1437 07aa 1A       		.uleb128 0x1a
+ 1438 07ab 00000000 		.long	.LASF210
+ 1439 07af 04       		.byte	0x4
+ 1440 07b0 07       		.byte	0x7
+ 1441 07b1 0A01     		.value	0x10a
+ 1442 07b3 A9080000 		.long	0x8a9
+ 1443 07b7 0A       		.uleb128 0xa
+ 1444 07b8 00000000 		.long	.LASF211
+ 1445 07bc 00       		.sleb128 0
+ 1446 07bd 0A       		.uleb128 0xa
+ 1447 07be 00000000 		.long	.LASF212
+
GAS LISTING /tmp/ccIEtKUs.s 			page 33
+
+
+ 1448 07c2 3D       		.sleb128 61
+ 1449 07c3 0A       		.uleb128 0xa
+ 1450 07c4 00000000 		.long	.LASF213
+ 1451 07c8 3E       		.sleb128 62
+ 1452 07c9 0A       		.uleb128 0xa
+ 1453 07ca 00000000 		.long	.LASF214
+ 1454 07ce 3F       		.sleb128 63
+ 1455 07cf 0A       		.uleb128 0xa
+ 1456 07d0 00000000 		.long	.LASF215
+ 1457 07d4 C000     		.sleb128 64
+ 1458 07d6 0A       		.uleb128 0xa
+ 1459 07d7 00000000 		.long	.LASF216
+ 1460 07db C100     		.sleb128 65
+ 1461 07dd 0A       		.uleb128 0xa
+ 1462 07de 00000000 		.long	.LASF217
+ 1463 07e2 C200     		.sleb128 66
+ 1464 07e4 0A       		.uleb128 0xa
+ 1465 07e5 00000000 		.long	.LASF218
+ 1466 07e9 C300     		.sleb128 67
+ 1467 07eb 0A       		.uleb128 0xa
+ 1468 07ec 00000000 		.long	.LASF219
+ 1469 07f0 C400     		.sleb128 68
+ 1470 07f2 0A       		.uleb128 0xa
+ 1471 07f3 00000000 		.long	.LASF220
+ 1472 07f7 C500     		.sleb128 69
+ 1473 07f9 0A       		.uleb128 0xa
+ 1474 07fa 00000000 		.long	.LASF221
+ 1475 07fe C600     		.sleb128 70
+ 1476 0800 0A       		.uleb128 0xa
+ 1477 0801 00000000 		.long	.LASF222
+ 1478 0805 C700     		.sleb128 71
+ 1479 0807 0A       		.uleb128 0xa
+ 1480 0808 00000000 		.long	.LASF223
+ 1481 080c C800     		.sleb128 72
+ 1482 080e 0A       		.uleb128 0xa
+ 1483 080f 00000000 		.long	.LASF224
+ 1484 0813 C900     		.sleb128 73
+ 1485 0815 0A       		.uleb128 0xa
+ 1486 0816 00000000 		.long	.LASF225
+ 1487 081a CA00     		.sleb128 74
+ 1488 081c 0A       		.uleb128 0xa
+ 1489 081d 00000000 		.long	.LASF226
+ 1490 0821 CB00     		.sleb128 75
+ 1491 0823 0A       		.uleb128 0xa
+ 1492 0824 00000000 		.long	.LASF227
+ 1493 0828 CC00     		.sleb128 76
+ 1494 082a 0A       		.uleb128 0xa
+ 1495 082b 00000000 		.long	.LASF228
+ 1496 082f CD00     		.sleb128 77
+ 1497 0831 0A       		.uleb128 0xa
+ 1498 0832 00000000 		.long	.LASF229
+ 1499 0836 CE00     		.sleb128 78
+ 1500 0838 0A       		.uleb128 0xa
+ 1501 0839 00000000 		.long	.LASF230
+ 1502 083d CF00     		.sleb128 79
+ 1503 083f 0A       		.uleb128 0xa
+ 1504 0840 00000000 		.long	.LASF231
+
GAS LISTING /tmp/ccIEtKUs.s 			page 34
+
+
+ 1505 0844 D000     		.sleb128 80
+ 1506 0846 0A       		.uleb128 0xa
+ 1507 0847 00000000 		.long	.LASF232
+ 1508 084b D100     		.sleb128 81
+ 1509 084d 0A       		.uleb128 0xa
+ 1510 084e 00000000 		.long	.LASF233
+ 1511 0852 D100     		.sleb128 81
+ 1512 0854 0A       		.uleb128 0xa
+ 1513 0855 00000000 		.long	.LASF234
+ 1514 0859 D200     		.sleb128 82
+ 1515 085b 0A       		.uleb128 0xa
+ 1516 085c 00000000 		.long	.LASF235
+ 1517 0860 D300     		.sleb128 83
+ 1518 0862 0A       		.uleb128 0xa
+ 1519 0863 00000000 		.long	.LASF236
+ 1520 0867 D400     		.sleb128 84
+ 1521 0869 0A       		.uleb128 0xa
+ 1522 086a 00000000 		.long	.LASF237
+ 1523 086e D500     		.sleb128 85
+ 1524 0870 0A       		.uleb128 0xa
+ 1525 0871 00000000 		.long	.LASF238
+ 1526 0875 D600     		.sleb128 86
+ 1527 0877 0A       		.uleb128 0xa
+ 1528 0878 00000000 		.long	.LASF239
+ 1529 087c D700     		.sleb128 87
+ 1530 087e 0A       		.uleb128 0xa
+ 1531 087f 00000000 		.long	.LASF240
+ 1532 0883 D800     		.sleb128 88
+ 1533 0885 0A       		.uleb128 0xa
+ 1534 0886 00000000 		.long	.LASF241
+ 1535 088a D900     		.sleb128 89
+ 1536 088c 0A       		.uleb128 0xa
+ 1537 088d 00000000 		.long	.LASF242
+ 1538 0891 DA00     		.sleb128 90
+ 1539 0893 0A       		.uleb128 0xa
+ 1540 0894 00000000 		.long	.LASF243
+ 1541 0898 DB00     		.sleb128 91
+ 1542 089a 0A       		.uleb128 0xa
+ 1543 089b 00000000 		.long	.LASF244
+ 1544 089f DC00     		.sleb128 92
+ 1545 08a1 0A       		.uleb128 0xa
+ 1546 08a2 00000000 		.long	.LASF245
+ 1547 08a6 DD00     		.sleb128 93
+ 1548 08a8 00       		.byte	0x0
+ 1549 08a9 1A       		.uleb128 0x1a
+ 1550 08aa 00000000 		.long	.LASF246
+ 1551 08ae 04       		.byte	0x4
+ 1552 08af 07       		.byte	0x7
+ 1553 08b0 3401     		.value	0x134
+ 1554 08b2 E9090000 		.long	0x9e9
+ 1555 08b6 0A       		.uleb128 0xa
+ 1556 08b7 00000000 		.long	.LASF247
+ 1557 08bb 00       		.sleb128 0
+ 1558 08bc 0A       		.uleb128 0xa
+ 1559 08bd 00000000 		.long	.LASF248
+ 1560 08c1 01       		.sleb128 1
+ 1561 08c2 0A       		.uleb128 0xa
+
GAS LISTING /tmp/ccIEtKUs.s 			page 35
+
+
+ 1562 08c3 00000000 		.long	.LASF249
+ 1563 08c7 02       		.sleb128 2
+ 1564 08c8 0A       		.uleb128 0xa
+ 1565 08c9 00000000 		.long	.LASF250
+ 1566 08cd 03       		.sleb128 3
+ 1567 08ce 0A       		.uleb128 0xa
+ 1568 08cf 00000000 		.long	.LASF251
+ 1569 08d3 04       		.sleb128 4
+ 1570 08d4 0A       		.uleb128 0xa
+ 1571 08d5 00000000 		.long	.LASF252
+ 1572 08d9 05       		.sleb128 5
+ 1573 08da 0A       		.uleb128 0xa
+ 1574 08db 00000000 		.long	.LASF253
+ 1575 08df 06       		.sleb128 6
+ 1576 08e0 0A       		.uleb128 0xa
+ 1577 08e1 00000000 		.long	.LASF254
+ 1578 08e5 07       		.sleb128 7
+ 1579 08e6 0A       		.uleb128 0xa
+ 1580 08e7 00000000 		.long	.LASF255
+ 1581 08eb 08       		.sleb128 8
+ 1582 08ec 0A       		.uleb128 0xa
+ 1583 08ed 00000000 		.long	.LASF256
+ 1584 08f1 09       		.sleb128 9
+ 1585 08f2 0A       		.uleb128 0xa
+ 1586 08f3 00000000 		.long	.LASF257
+ 1587 08f7 0A       		.sleb128 10
+ 1588 08f8 0A       		.uleb128 0xa
+ 1589 08f9 00000000 		.long	.LASF258
+ 1590 08fd 0B       		.sleb128 11
+ 1591 08fe 0A       		.uleb128 0xa
+ 1592 08ff 00000000 		.long	.LASF259
+ 1593 0903 0C       		.sleb128 12
+ 1594 0904 0A       		.uleb128 0xa
+ 1595 0905 00000000 		.long	.LASF260
+ 1596 0909 0D       		.sleb128 13
+ 1597 090a 0A       		.uleb128 0xa
+ 1598 090b 00000000 		.long	.LASF261
+ 1599 090f 0E       		.sleb128 14
+ 1600 0910 0A       		.uleb128 0xa
+ 1601 0911 00000000 		.long	.LASF262
+ 1602 0915 0F       		.sleb128 15
+ 1603 0916 0A       		.uleb128 0xa
+ 1604 0917 00000000 		.long	.LASF263
+ 1605 091b 10       		.sleb128 16
+ 1606 091c 0A       		.uleb128 0xa
+ 1607 091d 00000000 		.long	.LASF264
+ 1608 0921 11       		.sleb128 17
+ 1609 0922 0A       		.uleb128 0xa
+ 1610 0923 00000000 		.long	.LASF265
+ 1611 0927 12       		.sleb128 18
+ 1612 0928 0A       		.uleb128 0xa
+ 1613 0929 00000000 		.long	.LASF266
+ 1614 092d 13       		.sleb128 19
+ 1615 092e 0A       		.uleb128 0xa
+ 1616 092f 00000000 		.long	.LASF267
+ 1617 0933 14       		.sleb128 20
+ 1618 0934 0A       		.uleb128 0xa
+
GAS LISTING /tmp/ccIEtKUs.s 			page 36
+
+
+ 1619 0935 00000000 		.long	.LASF268
+ 1620 0939 15       		.sleb128 21
+ 1621 093a 0A       		.uleb128 0xa
+ 1622 093b 00000000 		.long	.LASF269
+ 1623 093f 16       		.sleb128 22
+ 1624 0940 0A       		.uleb128 0xa
+ 1625 0941 00000000 		.long	.LASF270
+ 1626 0945 17       		.sleb128 23
+ 1627 0946 0A       		.uleb128 0xa
+ 1628 0947 00000000 		.long	.LASF271
+ 1629 094b 18       		.sleb128 24
+ 1630 094c 0A       		.uleb128 0xa
+ 1631 094d 00000000 		.long	.LASF272
+ 1632 0951 19       		.sleb128 25
+ 1633 0952 0A       		.uleb128 0xa
+ 1634 0953 00000000 		.long	.LASF273
+ 1635 0957 1A       		.sleb128 26
+ 1636 0958 0A       		.uleb128 0xa
+ 1637 0959 00000000 		.long	.LASF274
+ 1638 095d 1B       		.sleb128 27
+ 1639 095e 0A       		.uleb128 0xa
+ 1640 095f 00000000 		.long	.LASF275
+ 1641 0963 1C       		.sleb128 28
+ 1642 0964 0A       		.uleb128 0xa
+ 1643 0965 00000000 		.long	.LASF276
+ 1644 0969 1D       		.sleb128 29
+ 1645 096a 0A       		.uleb128 0xa
+ 1646 096b 00000000 		.long	.LASF277
+ 1647 096f 1E       		.sleb128 30
+ 1648 0970 0A       		.uleb128 0xa
+ 1649 0971 00000000 		.long	.LASF278
+ 1650 0975 1F       		.sleb128 31
+ 1651 0976 0A       		.uleb128 0xa
+ 1652 0977 00000000 		.long	.LASF279
+ 1653 097b 20       		.sleb128 32
+ 1654 097c 0A       		.uleb128 0xa
+ 1655 097d 00000000 		.long	.LASF280
+ 1656 0981 21       		.sleb128 33
+ 1657 0982 0A       		.uleb128 0xa
+ 1658 0983 00000000 		.long	.LASF281
+ 1659 0987 22       		.sleb128 34
+ 1660 0988 0A       		.uleb128 0xa
+ 1661 0989 00000000 		.long	.LASF282
+ 1662 098d 23       		.sleb128 35
+ 1663 098e 0A       		.uleb128 0xa
+ 1664 098f 00000000 		.long	.LASF283
+ 1665 0993 24       		.sleb128 36
+ 1666 0994 0A       		.uleb128 0xa
+ 1667 0995 00000000 		.long	.LASF284
+ 1668 0999 25       		.sleb128 37
+ 1669 099a 0A       		.uleb128 0xa
+ 1670 099b 00000000 		.long	.LASF285
+ 1671 099f 26       		.sleb128 38
+ 1672 09a0 0A       		.uleb128 0xa
+ 1673 09a1 00000000 		.long	.LASF286
+ 1674 09a5 27       		.sleb128 39
+ 1675 09a6 0A       		.uleb128 0xa
+
GAS LISTING /tmp/ccIEtKUs.s 			page 37
+
+
+ 1676 09a7 00000000 		.long	.LASF287
+ 1677 09ab 28       		.sleb128 40
+ 1678 09ac 0A       		.uleb128 0xa
+ 1679 09ad 00000000 		.long	.LASF288
+ 1680 09b1 29       		.sleb128 41
+ 1681 09b2 0A       		.uleb128 0xa
+ 1682 09b3 00000000 		.long	.LASF289
+ 1683 09b7 29       		.sleb128 41
+ 1684 09b8 0A       		.uleb128 0xa
+ 1685 09b9 00000000 		.long	.LASF290
+ 1686 09bd 2A       		.sleb128 42
+ 1687 09be 0A       		.uleb128 0xa
+ 1688 09bf 00000000 		.long	.LASF291
+ 1689 09c3 2B       		.sleb128 43
+ 1690 09c4 0A       		.uleb128 0xa
+ 1691 09c5 00000000 		.long	.LASF292
+ 1692 09c9 2C       		.sleb128 44
+ 1693 09ca 0A       		.uleb128 0xa
+ 1694 09cb 00000000 		.long	.LASF293
+ 1695 09cf 2D       		.sleb128 45
+ 1696 09d0 0A       		.uleb128 0xa
+ 1697 09d1 00000000 		.long	.LASF294
+ 1698 09d5 2E       		.sleb128 46
+ 1699 09d6 0A       		.uleb128 0xa
+ 1700 09d7 00000000 		.long	.LASF295
+ 1701 09db 2F       		.sleb128 47
+ 1702 09dc 0A       		.uleb128 0xa
+ 1703 09dd 00000000 		.long	.LASF296
+ 1704 09e1 30       		.sleb128 48
+ 1705 09e2 0A       		.uleb128 0xa
+ 1706 09e3 00000000 		.long	.LASF297
+ 1707 09e7 31       		.sleb128 49
+ 1708 09e8 00       		.byte	0x0
+ 1709 09e9 1B       		.uleb128 0x1b
+ 1710 09ea 00000000 		.long	.LASF320
+ 1711 09ee 01       		.byte	0x1
+ 1712 09ef 48       		.byte	0x48
+ 1713 09f0 01       		.byte	0x1
+ 1714 09f1 00000000 		.quad	.LFB595
+ 1714      00000000 
+ 1715 09f9 00000000 		.quad	.LFE595
+ 1715      00000000 
+ 1716 0a01 00000000 		.long	.LLST0
+ 1717 0a05 180A0000 		.long	0xa18
+ 1718 0a09 1C       		.uleb128 0x1c
+ 1719 0a0a 00000000 		.long	.LASF300
+ 1720 0a0e 01       		.byte	0x1
+ 1721 0a0f 48       		.byte	0x48
+ 1722 0a10 82030000 		.long	0x382
+ 1723 0a14 02       		.byte	0x2
+ 1724 0a15 91       		.byte	0x91
+ 1725 0a16 68       		.sleb128 -24
+ 1726 0a17 00       		.byte	0x0
+ 1727 0a18 1D       		.uleb128 0x1d
+ 1728 0a19 00000000 		.long	.LASF298
+ 1729 0a1d 01       		.byte	0x1
+ 1730 0a1e 52       		.byte	0x52
+
GAS LISTING /tmp/ccIEtKUs.s 			page 38
+
+
+ 1731 0a1f 62000000 		.long	0x62
+ 1732 0a23 00000000 		.quad	.LFB596
+ 1732      00000000 
+ 1733 0a2b 00000000 		.quad	.LFE596
+ 1733      00000000 
+ 1734 0a33 00000000 		.long	.LLST1
+ 1735 0a37 1D       		.uleb128 0x1d
+ 1736 0a38 00000000 		.long	.LASF299
+ 1737 0a3c 01       		.byte	0x1
+ 1738 0a3d 60       		.byte	0x60
+ 1739 0a3e 62000000 		.long	0x62
+ 1740 0a42 00000000 		.quad	.LFB597
+ 1740      00000000 
+ 1741 0a4a 00000000 		.quad	.LFE597
+ 1741      00000000 
+ 1742 0a52 00000000 		.long	.LLST2
+ 1743 0a56 1E       		.uleb128 0x1e
+ 1744 0a57 00000000 		.long	.LASF304
+ 1745 0a5b 01       		.byte	0x1
+ 1746 0a5c 6C       		.byte	0x6c
+ 1747 0a5d 01       		.byte	0x1
+ 1748 0a5e 7B000000 		.long	0x7b
+ 1749 0a62 00000000 		.quad	.LFB598
+ 1749      00000000 
+ 1750 0a6a 00000000 		.quad	.LFE598
+ 1750      00000000 
+ 1751 0a72 00000000 		.long	.LLST3
+ 1752 0a76 A50A0000 		.long	0xaa5
+ 1753 0a7a 1C       		.uleb128 0x1c
+ 1754 0a7b 00000000 		.long	.LASF301
+ 1755 0a7f 01       		.byte	0x1
+ 1756 0a80 6C       		.byte	0x6c
+ 1757 0a81 86000000 		.long	0x86
+ 1758 0a85 02       		.byte	0x2
+ 1759 0a86 91       		.byte	0x91
+ 1760 0a87 68       		.sleb128 -24
+ 1761 0a88 1C       		.uleb128 0x1c
+ 1762 0a89 00000000 		.long	.LASF302
+ 1763 0a8d 01       		.byte	0x1
+ 1764 0a8e 6C       		.byte	0x6c
+ 1765 0a8f 8B000000 		.long	0x8b
+ 1766 0a93 02       		.byte	0x2
+ 1767 0a94 91       		.byte	0x91
+ 1768 0a95 60       		.sleb128 -32
+ 1769 0a96 1C       		.uleb128 0x1c
+ 1770 0a97 00000000 		.long	.LASF303
+ 1771 0a9b 01       		.byte	0x1
+ 1772 0a9c 6D       		.byte	0x6d
+ 1773 0a9d 62000000 		.long	0x62
+ 1774 0aa1 02       		.byte	0x2
+ 1775 0aa2 91       		.byte	0x91
+ 1776 0aa3 5C       		.sleb128 -36
+ 1777 0aa4 00       		.byte	0x0
+ 1778 0aa5 1E       		.uleb128 0x1e
+ 1779 0aa6 00000000 		.long	.LASF305
+ 1780 0aaa 01       		.byte	0x1
+ 1781 0aab 79       		.byte	0x79
+
GAS LISTING /tmp/ccIEtKUs.s 			page 39
+
+
+ 1782 0aac 01       		.byte	0x1
+ 1783 0aad 7B000000 		.long	0x7b
+ 1784 0ab1 00000000 		.quad	.LFB599
+ 1784      00000000 
+ 1785 0ab9 00000000 		.quad	.LFE599
+ 1785      00000000 
+ 1786 0ac1 00000000 		.long	.LLST4
+ 1787 0ac5 F40A0000 		.long	0xaf4
+ 1788 0ac9 1C       		.uleb128 0x1c
+ 1789 0aca 00000000 		.long	.LASF306
+ 1790 0ace 01       		.byte	0x1
+ 1791 0acf 79       		.byte	0x79
+ 1792 0ad0 86000000 		.long	0x86
+ 1793 0ad4 02       		.byte	0x2
+ 1794 0ad5 91       		.byte	0x91
+ 1795 0ad6 68       		.sleb128 -24
+ 1796 0ad7 1C       		.uleb128 0x1c
+ 1797 0ad8 00000000 		.long	.LASF302
+ 1798 0adc 01       		.byte	0x1
+ 1799 0add 7A       		.byte	0x7a
+ 1800 0ade 8B000000 		.long	0x8b
+ 1801 0ae2 02       		.byte	0x2
+ 1802 0ae3 91       		.byte	0x91
+ 1803 0ae4 60       		.sleb128 -32
+ 1804 0ae5 1C       		.uleb128 0x1c
+ 1805 0ae6 00000000 		.long	.LASF303
+ 1806 0aea 01       		.byte	0x1
+ 1807 0aeb 7B       		.byte	0x7b
+ 1808 0aec 62000000 		.long	0x62
+ 1809 0af0 02       		.byte	0x2
+ 1810 0af1 91       		.byte	0x91
+ 1811 0af2 5C       		.sleb128 -36
+ 1812 0af3 00       		.byte	0x0
+ 1813 0af4 1E       		.uleb128 0x1e
+ 1814 0af5 00000000 		.long	.LASF307
+ 1815 0af9 01       		.byte	0x1
+ 1816 0afa 89       		.byte	0x89
+ 1817 0afb 01       		.byte	0x1
+ 1818 0afc 63010000 		.long	0x163
+ 1819 0b00 00000000 		.quad	.LFB600
+ 1819      00000000 
+ 1820 0b08 00000000 		.quad	.LFE600
+ 1820      00000000 
+ 1821 0b10 00000000 		.long	.LLST5
+ 1822 0b14 350B0000 		.long	0xb35
+ 1823 0b18 1C       		.uleb128 0x1c
+ 1824 0b19 00000000 		.long	.LASF308
+ 1825 0b1d 01       		.byte	0x1
+ 1826 0b1e 89       		.byte	0x89
+ 1827 0b1f 63010000 		.long	0x163
+ 1828 0b23 02       		.byte	0x2
+ 1829 0b24 91       		.byte	0x91
+ 1830 0b25 60       		.sleb128 -32
+ 1831 0b26 1C       		.uleb128 0x1c
+ 1832 0b27 00000000 		.long	.LASF301
+ 1833 0b2b 01       		.byte	0x1
+ 1834 0b2c 8A       		.byte	0x8a
+
GAS LISTING /tmp/ccIEtKUs.s 			page 40
+
+
+ 1835 0b2d 1E010000 		.long	0x11e
+ 1836 0b31 02       		.byte	0x2
+ 1837 0b32 91       		.byte	0x91
+ 1838 0b33 58       		.sleb128 -40
+ 1839 0b34 00       		.byte	0x0
+ 1840 0b35 1E       		.uleb128 0x1e
+ 1841 0b36 00000000 		.long	.LASF309
+ 1842 0b3a 01       		.byte	0x1
+ 1843 0b3b 9E       		.byte	0x9e
+ 1844 0b3c 01       		.byte	0x1
+ 1845 0b3d 63010000 		.long	0x163
+ 1846 0b41 00000000 		.quad	.LFB601
+ 1846      00000000 
+ 1847 0b49 00000000 		.quad	.LFE601
+ 1847      00000000 
+ 1848 0b51 00000000 		.long	.LLST6
+ 1849 0b55 760B0000 		.long	0xb76
+ 1850 0b59 1C       		.uleb128 0x1c
+ 1851 0b5a 00000000 		.long	.LASF308
+ 1852 0b5e 01       		.byte	0x1
+ 1853 0b5f 9E       		.byte	0x9e
+ 1854 0b60 63010000 		.long	0x163
+ 1855 0b64 02       		.byte	0x2
+ 1856 0b65 91       		.byte	0x91
+ 1857 0b66 60       		.sleb128 -32
+ 1858 0b67 1C       		.uleb128 0x1c
+ 1859 0b68 00000000 		.long	.LASF306
+ 1860 0b6c 01       		.byte	0x1
+ 1861 0b6d 9F       		.byte	0x9f
+ 1862 0b6e 1E010000 		.long	0x11e
+ 1863 0b72 02       		.byte	0x2
+ 1864 0b73 91       		.byte	0x91
+ 1865 0b74 58       		.sleb128 -40
+ 1866 0b75 00       		.byte	0x0
+ 1867 0b76 1D       		.uleb128 0x1d
+ 1868 0b77 00000000 		.long	.LASF310
+ 1869 0b7b 01       		.byte	0x1
+ 1870 0b7c B3       		.byte	0xb3
+ 1871 0b7d 950B0000 		.long	0xb95
+ 1872 0b81 00000000 		.quad	.LFB602
+ 1872      00000000 
+ 1873 0b89 00000000 		.quad	.LFE602
+ 1873      00000000 
+ 1874 0b91 00000000 		.long	.LLST7
+ 1875 0b95 02       		.uleb128 0x2
+ 1876 0b96 01       		.byte	0x1
+ 1877 0b97 02       		.byte	0x2
+ 1878 0b98 00000000 		.long	.LASF311
+ 1879 0b9c 1F       		.uleb128 0x1f
+ 1880 0b9d 01       		.byte	0x1
+ 1881 0b9e 00000000 		.long	.LASF321
+ 1882 0ba2 01       		.byte	0x1
+ 1883 0ba3 E2       		.byte	0xe2
+ 1884 0ba4 01       		.byte	0x1
+ 1885 0ba5 7B000000 		.long	0x7b
+ 1886 0ba9 00000000 		.quad	.LFB603
+ 1886      00000000 
+
GAS LISTING /tmp/ccIEtKUs.s 			page 41
+
+
+ 1887 0bb1 00000000 		.quad	.LFE603
+ 1887      00000000 
+ 1888 0bb9 00000000 		.long	.LLST8
+ 1889 0bbd 050C0000 		.long	0xc05
+ 1890 0bc1 1C       		.uleb128 0x1c
+ 1891 0bc2 00000000 		.long	.LASF312
+ 1892 0bc6 01       		.byte	0x1
+ 1893 0bc7 E2       		.byte	0xe2
+ 1894 0bc8 050C0000 		.long	0xc05
+ 1895 0bcc 02       		.byte	0x2
+ 1896 0bcd 91       		.byte	0x91
+ 1897 0bce 58       		.sleb128 -40
+ 1898 0bcf 20       		.uleb128 0x20
+ 1899 0bd0 726300   		.string	"rc"
+ 1900 0bd3 01       		.byte	0x1
+ 1901 0bd4 E4       		.byte	0xe4
+ 1902 0bd5 7B000000 		.long	0x7b
+ 1903 0bd9 02       		.byte	0x2
+ 1904 0bda 91       		.byte	0x91
+ 1905 0bdb 6C       		.sleb128 -20
+ 1906 0bdc 21       		.uleb128 0x21
+ 1907 0bdd 00000000 		.long	.LASF313
+ 1908 0be1 210C0000 		.long	0xc21
+ 1909 0be5 01       		.byte	0x1
+ 1910 0be6 09       		.byte	0x9
+ 1911 0be7 03       		.byte	0x3
+ 1912 0be8 00000000 		.quad	__PRETTY_FUNCTION__.7213
+ 1912      00000000 
+ 1913 0bf0 21       		.uleb128 0x21
+ 1914 0bf1 00000000 		.long	.LASF314
+ 1915 0bf5 260C0000 		.long	0xc26
+ 1916 0bf9 01       		.byte	0x1
+ 1917 0bfa 09       		.byte	0x9
+ 1918 0bfb 03       		.byte	0x3
+ 1919 0bfc 00000000 		.quad	__func__.7214
+ 1919      00000000 
+ 1920 0c04 00       		.byte	0x0
+ 1921 0c05 07       		.uleb128 0x7
+ 1922 0c06 08       		.byte	0x8
+ 1923 0c07 0B0C0000 		.long	0xc0b
+ 1924 0c0b 07       		.uleb128 0x7
+ 1925 0c0c 08       		.byte	0x8
+ 1926 0c0d AE030000 		.long	0x3ae
+ 1927 0c11 22       		.uleb128 0x22
+ 1928 0c12 96000000 		.long	0x96
+ 1929 0c16 210C0000 		.long	0xc21
+ 1930 0c1a 0D       		.uleb128 0xd
+ 1931 0c1b 88000000 		.long	0x88
+ 1932 0c1f 1A       		.byte	0x1a
+ 1933 0c20 00       		.byte	0x0
+ 1934 0c21 08       		.uleb128 0x8
+ 1935 0c22 110C0000 		.long	0xc11
+ 1936 0c26 08       		.uleb128 0x8
+ 1937 0c27 110C0000 		.long	0xc11
+ 1938 0c2b 22       		.uleb128 0x22
+ 1939 0c2c 96000000 		.long	0x96
+ 1940 0c30 3B0C0000 		.long	0xc3b
+
GAS LISTING /tmp/ccIEtKUs.s 			page 42
+
+
+ 1941 0c34 0D       		.uleb128 0xd
+ 1942 0c35 88000000 		.long	0x88
+ 1943 0c39 09       		.byte	0x9
+ 1944 0c3a 00       		.byte	0x0
+ 1945 0c3b 23       		.uleb128 0x23
+ 1946 0c3c 00000000 		.long	.LASF315
+ 1947 0c40 01       		.byte	0x1
+ 1948 0c41 3C       		.byte	0x3c
+ 1949 0c42 500C0000 		.long	0xc50
+ 1950 0c46 09       		.byte	0x9
+ 1951 0c47 03       		.byte	0x3
+ 1952 0c48 00000000 		.quad	KNullBlockCipherVecRegaes_ncbi_name
+ 1952      00000000 
+ 1953 0c50 08       		.uleb128 0x8
+ 1954 0c51 2B0C0000 		.long	0xc2b
+ 1955 0c55 23       		.uleb128 0x23
+ 1956 0c56 00000000 		.long	.LASF316
+ 1957 0c5a 01       		.byte	0x1
+ 1958 0c5b CE       		.byte	0xce
+ 1959 0c5c 6A0C0000 		.long	0xc6a
+ 1960 0c60 09       		.byte	0x9
+ 1961 0c61 03       		.byte	0x3
+ 1962 0c62 00000000 		.quad	KNullBlockCipherVecReg_vt_
+ 1962      00000000 
+ 1963 0c6a 08       		.uleb128 0x8
+ 1964 0c6b C1020000 		.long	0x2c1
+ 1965 0c6f 00       		.byte	0x0
+ 1966              		.section	.debug_abbrev
+ 1967 0000 01       		.uleb128 0x1
+ 1968 0001 11       		.uleb128 0x11
+ 1969 0002 01       		.byte	0x1
+ 1970 0003 25       		.uleb128 0x25
+ 1971 0004 0E       		.uleb128 0xe
+ 1972 0005 13       		.uleb128 0x13
+ 1973 0006 0B       		.uleb128 0xb
+ 1974 0007 03       		.uleb128 0x3
+ 1975 0008 0E       		.uleb128 0xe
+ 1976 0009 1B       		.uleb128 0x1b
+ 1977 000a 0E       		.uleb128 0xe
+ 1978 000b 11       		.uleb128 0x11
+ 1979 000c 01       		.uleb128 0x1
+ 1980 000d 12       		.uleb128 0x12
+ 1981 000e 01       		.uleb128 0x1
+ 1982 000f 10       		.uleb128 0x10
+ 1983 0010 06       		.uleb128 0x6
+ 1984 0011 00       		.byte	0x0
+ 1985 0012 00       		.byte	0x0
+ 1986 0013 02       		.uleb128 0x2
+ 1987 0014 24       		.uleb128 0x24
+ 1988 0015 00       		.byte	0x0
+ 1989 0016 0B       		.uleb128 0xb
+ 1990 0017 0B       		.uleb128 0xb
+ 1991 0018 3E       		.uleb128 0x3e
+ 1992 0019 0B       		.uleb128 0xb
+ 1993 001a 03       		.uleb128 0x3
+ 1994 001b 0E       		.uleb128 0xe
+ 1995 001c 00       		.byte	0x0
+
GAS LISTING /tmp/ccIEtKUs.s 			page 43
+
+
+ 1996 001d 00       		.byte	0x0
+ 1997 001e 03       		.uleb128 0x3
+ 1998 001f 24       		.uleb128 0x24
+ 1999 0020 00       		.byte	0x0
+ 2000 0021 0B       		.uleb128 0xb
+ 2001 0022 0B       		.uleb128 0xb
+ 2002 0023 3E       		.uleb128 0x3e
+ 2003 0024 0B       		.uleb128 0xb
+ 2004 0025 03       		.uleb128 0x3
+ 2005 0026 08       		.uleb128 0x8
+ 2006 0027 00       		.byte	0x0
+ 2007 0028 00       		.byte	0x0
+ 2008 0029 04       		.uleb128 0x4
+ 2009 002a 16       		.uleb128 0x16
+ 2010 002b 00       		.byte	0x0
+ 2011 002c 03       		.uleb128 0x3
+ 2012 002d 0E       		.uleb128 0xe
+ 2013 002e 3A       		.uleb128 0x3a
+ 2014 002f 0B       		.uleb128 0xb
+ 2015 0030 3B       		.uleb128 0x3b
+ 2016 0031 0B       		.uleb128 0xb
+ 2017 0032 49       		.uleb128 0x49
+ 2018 0033 13       		.uleb128 0x13
+ 2019 0034 00       		.byte	0x0
+ 2020 0035 00       		.byte	0x0
+ 2021 0036 05       		.uleb128 0x5
+ 2022 0037 0F       		.uleb128 0xf
+ 2023 0038 00       		.byte	0x0
+ 2024 0039 0B       		.uleb128 0xb
+ 2025 003a 0B       		.uleb128 0xb
+ 2026 003b 00       		.byte	0x0
+ 2027 003c 00       		.byte	0x0
+ 2028 003d 06       		.uleb128 0x6
+ 2029 003e 24       		.uleb128 0x24
+ 2030 003f 00       		.byte	0x0
+ 2031 0040 0B       		.uleb128 0xb
+ 2032 0041 0B       		.uleb128 0xb
+ 2033 0042 3E       		.uleb128 0x3e
+ 2034 0043 0B       		.uleb128 0xb
+ 2035 0044 00       		.byte	0x0
+ 2036 0045 00       		.byte	0x0
+ 2037 0046 07       		.uleb128 0x7
+ 2038 0047 0F       		.uleb128 0xf
+ 2039 0048 00       		.byte	0x0
+ 2040 0049 0B       		.uleb128 0xb
+ 2041 004a 0B       		.uleb128 0xb
+ 2042 004b 49       		.uleb128 0x49
+ 2043 004c 13       		.uleb128 0x13
+ 2044 004d 00       		.byte	0x0
+ 2045 004e 00       		.byte	0x0
+ 2046 004f 08       		.uleb128 0x8
+ 2047 0050 26       		.uleb128 0x26
+ 2048 0051 00       		.byte	0x0
+ 2049 0052 49       		.uleb128 0x49
+ 2050 0053 13       		.uleb128 0x13
+ 2051 0054 00       		.byte	0x0
+ 2052 0055 00       		.byte	0x0
+
GAS LISTING /tmp/ccIEtKUs.s 			page 44
+
+
+ 2053 0056 09       		.uleb128 0x9
+ 2054 0057 04       		.uleb128 0x4
+ 2055 0058 01       		.byte	0x1
+ 2056 0059 0B       		.uleb128 0xb
+ 2057 005a 0B       		.uleb128 0xb
+ 2058 005b 3A       		.uleb128 0x3a
+ 2059 005c 0B       		.uleb128 0xb
+ 2060 005d 3B       		.uleb128 0x3b
+ 2061 005e 0B       		.uleb128 0xb
+ 2062 005f 01       		.uleb128 0x1
+ 2063 0060 13       		.uleb128 0x13
+ 2064 0061 00       		.byte	0x0
+ 2065 0062 00       		.byte	0x0
+ 2066 0063 0A       		.uleb128 0xa
+ 2067 0064 28       		.uleb128 0x28
+ 2068 0065 00       		.byte	0x0
+ 2069 0066 03       		.uleb128 0x3
+ 2070 0067 0E       		.uleb128 0xe
+ 2071 0068 1C       		.uleb128 0x1c
+ 2072 0069 0D       		.uleb128 0xd
+ 2073 006a 00       		.byte	0x0
+ 2074 006b 00       		.byte	0x0
+ 2075 006c 0B       		.uleb128 0xb
+ 2076 006d 26       		.uleb128 0x26
+ 2077 006e 00       		.byte	0x0
+ 2078 006f 00       		.byte	0x0
+ 2079 0070 00       		.byte	0x0
+ 2080 0071 0C       		.uleb128 0xc
+ 2081 0072 01       		.uleb128 0x1
+ 2082 0073 01       		.byte	0x1
+ 2083 0074 8742     		.uleb128 0x2107
+ 2084 0076 0C       		.uleb128 0xc
+ 2085 0077 49       		.uleb128 0x49
+ 2086 0078 13       		.uleb128 0x13
+ 2087 0079 01       		.uleb128 0x1
+ 2088 007a 13       		.uleb128 0x13
+ 2089 007b 00       		.byte	0x0
+ 2090 007c 00       		.byte	0x0
+ 2091 007d 0D       		.uleb128 0xd
+ 2092 007e 21       		.uleb128 0x21
+ 2093 007f 00       		.byte	0x0
+ 2094 0080 49       		.uleb128 0x49
+ 2095 0081 13       		.uleb128 0x13
+ 2096 0082 2F       		.uleb128 0x2f
+ 2097 0083 0B       		.uleb128 0xb
+ 2098 0084 00       		.byte	0x0
+ 2099 0085 00       		.byte	0x0
+ 2100 0086 0E       		.uleb128 0xe
+ 2101 0087 13       		.uleb128 0x13
+ 2102 0088 01       		.byte	0x1
+ 2103 0089 03       		.uleb128 0x3
+ 2104 008a 0E       		.uleb128 0xe
+ 2105 008b 0B       		.uleb128 0xb
+ 2106 008c 0B       		.uleb128 0xb
+ 2107 008d 3A       		.uleb128 0x3a
+ 2108 008e 0B       		.uleb128 0xb
+ 2109 008f 3B       		.uleb128 0x3b
+
GAS LISTING /tmp/ccIEtKUs.s 			page 45
+
+
+ 2110 0090 0B       		.uleb128 0xb
+ 2111 0091 01       		.uleb128 0x1
+ 2112 0092 13       		.uleb128 0x13
+ 2113 0093 00       		.byte	0x0
+ 2114 0094 00       		.byte	0x0
+ 2115 0095 0F       		.uleb128 0xf
+ 2116 0096 0D       		.uleb128 0xd
+ 2117 0097 00       		.byte	0x0
+ 2118 0098 03       		.uleb128 0x3
+ 2119 0099 08       		.uleb128 0x8
+ 2120 009a 3A       		.uleb128 0x3a
+ 2121 009b 0B       		.uleb128 0xb
+ 2122 009c 3B       		.uleb128 0x3b
+ 2123 009d 0B       		.uleb128 0xb
+ 2124 009e 49       		.uleb128 0x49
+ 2125 009f 13       		.uleb128 0x13
+ 2126 00a0 38       		.uleb128 0x38
+ 2127 00a1 0A       		.uleb128 0xa
+ 2128 00a2 00       		.byte	0x0
+ 2129 00a3 00       		.byte	0x0
+ 2130 00a4 10       		.uleb128 0x10
+ 2131 00a5 0D       		.uleb128 0xd
+ 2132 00a6 00       		.byte	0x0
+ 2133 00a7 03       		.uleb128 0x3
+ 2134 00a8 0E       		.uleb128 0xe
+ 2135 00a9 3A       		.uleb128 0x3a
+ 2136 00aa 0B       		.uleb128 0xb
+ 2137 00ab 3B       		.uleb128 0x3b
+ 2138 00ac 0B       		.uleb128 0xb
+ 2139 00ad 49       		.uleb128 0x49
+ 2140 00ae 13       		.uleb128 0x13
+ 2141 00af 38       		.uleb128 0x38
+ 2142 00b0 0A       		.uleb128 0xa
+ 2143 00b1 00       		.byte	0x0
+ 2144 00b2 00       		.byte	0x0
+ 2145 00b3 11       		.uleb128 0x11
+ 2146 00b4 17       		.uleb128 0x17
+ 2147 00b5 01       		.byte	0x1
+ 2148 00b6 03       		.uleb128 0x3
+ 2149 00b7 0E       		.uleb128 0xe
+ 2150 00b8 0B       		.uleb128 0xb
+ 2151 00b9 0B       		.uleb128 0xb
+ 2152 00ba 3A       		.uleb128 0x3a
+ 2153 00bb 0B       		.uleb128 0xb
+ 2154 00bc 3B       		.uleb128 0x3b
+ 2155 00bd 0B       		.uleb128 0xb
+ 2156 00be 01       		.uleb128 0x1
+ 2157 00bf 13       		.uleb128 0x13
+ 2158 00c0 00       		.byte	0x0
+ 2159 00c1 00       		.byte	0x0
+ 2160 00c2 12       		.uleb128 0x12
+ 2161 00c3 0D       		.uleb128 0xd
+ 2162 00c4 00       		.byte	0x0
+ 2163 00c5 03       		.uleb128 0x3
+ 2164 00c6 0E       		.uleb128 0xe
+ 2165 00c7 3A       		.uleb128 0x3a
+ 2166 00c8 0B       		.uleb128 0xb
+
GAS LISTING /tmp/ccIEtKUs.s 			page 46
+
+
+ 2167 00c9 3B       		.uleb128 0x3b
+ 2168 00ca 0B       		.uleb128 0xb
+ 2169 00cb 49       		.uleb128 0x49
+ 2170 00cc 13       		.uleb128 0x13
+ 2171 00cd 00       		.byte	0x0
+ 2172 00ce 00       		.byte	0x0
+ 2173 00cf 13       		.uleb128 0x13
+ 2174 00d0 0D       		.uleb128 0xd
+ 2175 00d1 00       		.byte	0x0
+ 2176 00d2 03       		.uleb128 0x3
+ 2177 00d3 08       		.uleb128 0x8
+ 2178 00d4 3A       		.uleb128 0x3a
+ 2179 00d5 0B       		.uleb128 0xb
+ 2180 00d6 3B       		.uleb128 0x3b
+ 2181 00d7 0B       		.uleb128 0xb
+ 2182 00d8 49       		.uleb128 0x49
+ 2183 00d9 13       		.uleb128 0x13
+ 2184 00da 00       		.byte	0x0
+ 2185 00db 00       		.byte	0x0
+ 2186 00dc 14       		.uleb128 0x14
+ 2187 00dd 15       		.uleb128 0x15
+ 2188 00de 01       		.byte	0x1
+ 2189 00df 27       		.uleb128 0x27
+ 2190 00e0 0C       		.uleb128 0xc
+ 2191 00e1 01       		.uleb128 0x1
+ 2192 00e2 13       		.uleb128 0x13
+ 2193 00e3 00       		.byte	0x0
+ 2194 00e4 00       		.byte	0x0
+ 2195 00e5 15       		.uleb128 0x15
+ 2196 00e6 05       		.uleb128 0x5
+ 2197 00e7 00       		.byte	0x0
+ 2198 00e8 49       		.uleb128 0x49
+ 2199 00e9 13       		.uleb128 0x13
+ 2200 00ea 00       		.byte	0x0
+ 2201 00eb 00       		.byte	0x0
+ 2202 00ec 16       		.uleb128 0x16
+ 2203 00ed 15       		.uleb128 0x15
+ 2204 00ee 01       		.byte	0x1
+ 2205 00ef 49       		.uleb128 0x49
+ 2206 00f0 13       		.uleb128 0x13
+ 2207 00f1 01       		.uleb128 0x1
+ 2208 00f2 13       		.uleb128 0x13
+ 2209 00f3 00       		.byte	0x0
+ 2210 00f4 00       		.byte	0x0
+ 2211 00f5 17       		.uleb128 0x17
+ 2212 00f6 18       		.uleb128 0x18
+ 2213 00f7 00       		.byte	0x0
+ 2214 00f8 00       		.byte	0x0
+ 2215 00f9 00       		.byte	0x0
+ 2216 00fa 18       		.uleb128 0x18
+ 2217 00fb 15       		.uleb128 0x15
+ 2218 00fc 01       		.byte	0x1
+ 2219 00fd 27       		.uleb128 0x27
+ 2220 00fe 0C       		.uleb128 0xc
+ 2221 00ff 49       		.uleb128 0x49
+ 2222 0100 13       		.uleb128 0x13
+ 2223 0101 01       		.uleb128 0x1
+
GAS LISTING /tmp/ccIEtKUs.s 			page 47
+
+
+ 2224 0102 13       		.uleb128 0x13
+ 2225 0103 00       		.byte	0x0
+ 2226 0104 00       		.byte	0x0
+ 2227 0105 19       		.uleb128 0x19
+ 2228 0106 04       		.uleb128 0x4
+ 2229 0107 01       		.byte	0x1
+ 2230 0108 03       		.uleb128 0x3
+ 2231 0109 0E       		.uleb128 0xe
+ 2232 010a 0B       		.uleb128 0xb
+ 2233 010b 0B       		.uleb128 0xb
+ 2234 010c 3A       		.uleb128 0x3a
+ 2235 010d 0B       		.uleb128 0xb
+ 2236 010e 3B       		.uleb128 0x3b
+ 2237 010f 0B       		.uleb128 0xb
+ 2238 0110 01       		.uleb128 0x1
+ 2239 0111 13       		.uleb128 0x13
+ 2240 0112 00       		.byte	0x0
+ 2241 0113 00       		.byte	0x0
+ 2242 0114 1A       		.uleb128 0x1a
+ 2243 0115 04       		.uleb128 0x4
+ 2244 0116 01       		.byte	0x1
+ 2245 0117 03       		.uleb128 0x3
+ 2246 0118 0E       		.uleb128 0xe
+ 2247 0119 0B       		.uleb128 0xb
+ 2248 011a 0B       		.uleb128 0xb
+ 2249 011b 3A       		.uleb128 0x3a
+ 2250 011c 0B       		.uleb128 0xb
+ 2251 011d 3B       		.uleb128 0x3b
+ 2252 011e 05       		.uleb128 0x5
+ 2253 011f 01       		.uleb128 0x1
+ 2254 0120 13       		.uleb128 0x13
+ 2255 0121 00       		.byte	0x0
+ 2256 0122 00       		.byte	0x0
+ 2257 0123 1B       		.uleb128 0x1b
+ 2258 0124 2E       		.uleb128 0x2e
+ 2259 0125 01       		.byte	0x1
+ 2260 0126 03       		.uleb128 0x3
+ 2261 0127 0E       		.uleb128 0xe
+ 2262 0128 3A       		.uleb128 0x3a
+ 2263 0129 0B       		.uleb128 0xb
+ 2264 012a 3B       		.uleb128 0x3b
+ 2265 012b 0B       		.uleb128 0xb
+ 2266 012c 27       		.uleb128 0x27
+ 2267 012d 0C       		.uleb128 0xc
+ 2268 012e 11       		.uleb128 0x11
+ 2269 012f 01       		.uleb128 0x1
+ 2270 0130 12       		.uleb128 0x12
+ 2271 0131 01       		.uleb128 0x1
+ 2272 0132 40       		.uleb128 0x40
+ 2273 0133 06       		.uleb128 0x6
+ 2274 0134 01       		.uleb128 0x1
+ 2275 0135 13       		.uleb128 0x13
+ 2276 0136 00       		.byte	0x0
+ 2277 0137 00       		.byte	0x0
+ 2278 0138 1C       		.uleb128 0x1c
+ 2279 0139 05       		.uleb128 0x5
+ 2280 013a 00       		.byte	0x0
+
GAS LISTING /tmp/ccIEtKUs.s 			page 48
+
+
+ 2281 013b 03       		.uleb128 0x3
+ 2282 013c 0E       		.uleb128 0xe
+ 2283 013d 3A       		.uleb128 0x3a
+ 2284 013e 0B       		.uleb128 0xb
+ 2285 013f 3B       		.uleb128 0x3b
+ 2286 0140 0B       		.uleb128 0xb
+ 2287 0141 49       		.uleb128 0x49
+ 2288 0142 13       		.uleb128 0x13
+ 2289 0143 02       		.uleb128 0x2
+ 2290 0144 0A       		.uleb128 0xa
+ 2291 0145 00       		.byte	0x0
+ 2292 0146 00       		.byte	0x0
+ 2293 0147 1D       		.uleb128 0x1d
+ 2294 0148 2E       		.uleb128 0x2e
+ 2295 0149 00       		.byte	0x0
+ 2296 014a 03       		.uleb128 0x3
+ 2297 014b 0E       		.uleb128 0xe
+ 2298 014c 3A       		.uleb128 0x3a
+ 2299 014d 0B       		.uleb128 0xb
+ 2300 014e 3B       		.uleb128 0x3b
+ 2301 014f 0B       		.uleb128 0xb
+ 2302 0150 49       		.uleb128 0x49
+ 2303 0151 13       		.uleb128 0x13
+ 2304 0152 11       		.uleb128 0x11
+ 2305 0153 01       		.uleb128 0x1
+ 2306 0154 12       		.uleb128 0x12
+ 2307 0155 01       		.uleb128 0x1
+ 2308 0156 40       		.uleb128 0x40
+ 2309 0157 06       		.uleb128 0x6
+ 2310 0158 00       		.byte	0x0
+ 2311 0159 00       		.byte	0x0
+ 2312 015a 1E       		.uleb128 0x1e
+ 2313 015b 2E       		.uleb128 0x2e
+ 2314 015c 01       		.byte	0x1
+ 2315 015d 03       		.uleb128 0x3
+ 2316 015e 0E       		.uleb128 0xe
+ 2317 015f 3A       		.uleb128 0x3a
+ 2318 0160 0B       		.uleb128 0xb
+ 2319 0161 3B       		.uleb128 0x3b
+ 2320 0162 0B       		.uleb128 0xb
+ 2321 0163 27       		.uleb128 0x27
+ 2322 0164 0C       		.uleb128 0xc
+ 2323 0165 49       		.uleb128 0x49
+ 2324 0166 13       		.uleb128 0x13
+ 2325 0167 11       		.uleb128 0x11
+ 2326 0168 01       		.uleb128 0x1
+ 2327 0169 12       		.uleb128 0x12
+ 2328 016a 01       		.uleb128 0x1
+ 2329 016b 40       		.uleb128 0x40
+ 2330 016c 06       		.uleb128 0x6
+ 2331 016d 01       		.uleb128 0x1
+ 2332 016e 13       		.uleb128 0x13
+ 2333 016f 00       		.byte	0x0
+ 2334 0170 00       		.byte	0x0
+ 2335 0171 1F       		.uleb128 0x1f
+ 2336 0172 2E       		.uleb128 0x2e
+ 2337 0173 01       		.byte	0x1
+
GAS LISTING /tmp/ccIEtKUs.s 			page 49
+
+
+ 2338 0174 3F       		.uleb128 0x3f
+ 2339 0175 0C       		.uleb128 0xc
+ 2340 0176 03       		.uleb128 0x3
+ 2341 0177 0E       		.uleb128 0xe
+ 2342 0178 3A       		.uleb128 0x3a
+ 2343 0179 0B       		.uleb128 0xb
+ 2344 017a 3B       		.uleb128 0x3b
+ 2345 017b 0B       		.uleb128 0xb
+ 2346 017c 27       		.uleb128 0x27
+ 2347 017d 0C       		.uleb128 0xc
+ 2348 017e 49       		.uleb128 0x49
+ 2349 017f 13       		.uleb128 0x13
+ 2350 0180 11       		.uleb128 0x11
+ 2351 0181 01       		.uleb128 0x1
+ 2352 0182 12       		.uleb128 0x12
+ 2353 0183 01       		.uleb128 0x1
+ 2354 0184 40       		.uleb128 0x40
+ 2355 0185 06       		.uleb128 0x6
+ 2356 0186 01       		.uleb128 0x1
+ 2357 0187 13       		.uleb128 0x13
+ 2358 0188 00       		.byte	0x0
+ 2359 0189 00       		.byte	0x0
+ 2360 018a 20       		.uleb128 0x20
+ 2361 018b 34       		.uleb128 0x34
+ 2362 018c 00       		.byte	0x0
+ 2363 018d 03       		.uleb128 0x3
+ 2364 018e 08       		.uleb128 0x8
+ 2365 018f 3A       		.uleb128 0x3a
+ 2366 0190 0B       		.uleb128 0xb
+ 2367 0191 3B       		.uleb128 0x3b
+ 2368 0192 0B       		.uleb128 0xb
+ 2369 0193 49       		.uleb128 0x49
+ 2370 0194 13       		.uleb128 0x13
+ 2371 0195 02       		.uleb128 0x2
+ 2372 0196 0A       		.uleb128 0xa
+ 2373 0197 00       		.byte	0x0
+ 2374 0198 00       		.byte	0x0
+ 2375 0199 21       		.uleb128 0x21
+ 2376 019a 34       		.uleb128 0x34
+ 2377 019b 00       		.byte	0x0
+ 2378 019c 03       		.uleb128 0x3
+ 2379 019d 0E       		.uleb128 0xe
+ 2380 019e 49       		.uleb128 0x49
+ 2381 019f 13       		.uleb128 0x13
+ 2382 01a0 34       		.uleb128 0x34
+ 2383 01a1 0C       		.uleb128 0xc
+ 2384 01a2 02       		.uleb128 0x2
+ 2385 01a3 0A       		.uleb128 0xa
+ 2386 01a4 00       		.byte	0x0
+ 2387 01a5 00       		.byte	0x0
+ 2388 01a6 22       		.uleb128 0x22
+ 2389 01a7 01       		.uleb128 0x1
+ 2390 01a8 01       		.byte	0x1
+ 2391 01a9 49       		.uleb128 0x49
+ 2392 01aa 13       		.uleb128 0x13
+ 2393 01ab 01       		.uleb128 0x1
+ 2394 01ac 13       		.uleb128 0x13
+
GAS LISTING /tmp/ccIEtKUs.s 			page 50
+
+
+ 2395 01ad 00       		.byte	0x0
+ 2396 01ae 00       		.byte	0x0
+ 2397 01af 23       		.uleb128 0x23
+ 2398 01b0 34       		.uleb128 0x34
+ 2399 01b1 00       		.byte	0x0
+ 2400 01b2 03       		.uleb128 0x3
+ 2401 01b3 0E       		.uleb128 0xe
+ 2402 01b4 3A       		.uleb128 0x3a
+ 2403 01b5 0B       		.uleb128 0xb
+ 2404 01b6 3B       		.uleb128 0x3b
+ 2405 01b7 0B       		.uleb128 0xb
+ 2406 01b8 49       		.uleb128 0x49
+ 2407 01b9 13       		.uleb128 0x13
+ 2408 01ba 02       		.uleb128 0x2
+ 2409 01bb 0A       		.uleb128 0xa
+ 2410 01bc 00       		.byte	0x0
+ 2411 01bd 00       		.byte	0x0
+ 2412 01be 00       		.byte	0x0
+ 2413              		.section	.debug_pubnames,"", at progbits
+ 2414 0000 2D000000 		.long	0x2d
+ 2415 0004 0200     		.value	0x2
+ 2416 0006 00000000 		.long	.Ldebug_info0
+ 2417 000a 700C0000 		.long	0xc70
+ 2418 000e 9C0B0000 		.long	0xb9c
+ 2419 0012 4B4E756C 		.string	"KNullBlockCipherVecRegMake"
+ 2419      6C426C6F 
+ 2419      636B4369 
+ 2419      70686572 
+ 2419      56656352 
+ 2420 002d 00000000 		.long	0x0
+ 2421              		.section	.debug_aranges,"", at progbits
+ 2422 0000 2C000000 		.long	0x2c
+ 2423 0004 0200     		.value	0x2
+ 2424 0006 00000000 		.long	.Ldebug_info0
+ 2425 000a 08       		.byte	0x8
+ 2426 000b 00       		.byte	0x0
+ 2427 000c 0000     		.value	0x0
+ 2428 000e 0000     		.value	0x0
+ 2429 0010 00000000 		.quad	.Ltext0
+ 2429      00000000 
+ 2430 0018 0C010000 		.quad	.Letext0-.Ltext0
+ 2430      00000000 
+ 2431 0020 00000000 		.quad	0x0
+ 2431      00000000 
+ 2432 0028 00000000 		.quad	0x0
+ 2432      00000000 
+ 2433              		.section	.debug_str,"MS", at progbits,1
+ 2434              	.LASF267:
+ 2435 0000 7263496E 		.string	"rcInsufficient"
+ 2435      73756666 
+ 2435      69636965 
+ 2435      6E7400
+ 2436              	.LASF284:
+ 2437 000f 72634475 		.string	"rcDuplicate"
+ 2437      706C6963 
+ 2437      61746500 
+ 2438              	.LASF87:
+
GAS LISTING /tmp/ccIEtKUs.s 			page 51
+
+
+ 2439 001b 7263436F 		.string	"rcCondition"
+ 2439      6E646974 
+ 2439      696F6E00 
+ 2440              	.LASF201:
+ 2441 0027 7263456E 		.string	"rcEncrypting"
+ 2441      63727970 
+ 2441      74696E67 
+ 2441      00
+ 2442              	.LASF160:
+ 2443 0034 72634F70 		.string	"rcOpening"
+ 2443      656E696E 
+ 2443      6700
+ 2444              	.LASF168:
+ 2445 003e 72635065 		.string	"rcPersisting"
+ 2445      72736973 
+ 2445      74696E67 
+ 2445      00
+ 2446              	.LASF206:
+ 2447 004b 72635365 		.string	"rcSending"
+ 2447      6E64696E 
+ 2447      6700
+ 2448              	.LASF200:
+ 2449 0055 72634170 		.string	"rcAppending"
+ 2449      70656E64 
+ 2449      696E6700 
+ 2450              	.LASF186:
+ 2451 0061 72635369 		.string	"rcSignaling"
+ 2451      676E616C 
+ 2451      696E6700 
+ 2452              	.LASF13:
+ 2453 006d 4442475F 		.string	"DBG_BLAST"
+ 2453      424C4153 
+ 2453      5400
+ 2454              	.LASF242:
+ 2455 0077 72635369 		.string	"rcSignalSet"
+ 2455      676E616C 
+ 2455      53657400 
+ 2456              	.LASF188:
+ 2457 0083 72634174 		.string	"rcAttaching"
+ 2457      74616368 
+ 2457      696E6700 
+ 2458              	.LASF120:
+ 2459 008f 72635461 		.string	"rcTable"
+ 2459      626C6500 
+ 2460              	.LASF84:
+ 2461 0097 72634275 		.string	"rcBuffer"
+ 2461      66666572 
+ 2461      00
+ 2462              	.LASF216:
+ 2463 00a0 72634D65 		.string	"rcMemory"
+ 2463      6D6F7279 
+ 2463      00
+ 2464              	.LASF149:
+ 2465 00a9 72634C6F 		.string	"rcLocking"
+ 2465      636B696E 
+ 2465      6700
+ 2466              	.LASF184:
+
GAS LISTING /tmp/ccIEtKUs.s 			page 52
+
+
+ 2467 00b3 72635061 		.string	"rcParsing"
+ 2467      7273696E 
+ 2467      6700
+ 2468              	.LASF213:
+ 2469 00bd 72635365 		.string	"rcSelf"
+ 2469      6C6600
+ 2470              	.LASF106:
+ 2471 00c4 72634D65 		.string	"rcMetadata"
+ 2471      74616461 
+ 2471      746100
+ 2472              	.LASF229:
+ 2473 00cf 72634172 		.string	"rcArcHardLink"
+ 2473      63486172 
+ 2473      644C696E 
+ 2473      6B00
+ 2474              	.LASF55:
+ 2475 00dd 7263436F 		.string	"rcCont"
+ 2475      6E7400
+ 2476              	.LASF237:
+ 2477 00e4 72634368 		.string	"rcChecksum"
+ 2477      65636B73 
+ 2477      756D00
+ 2478              	.LASF314:
+ 2479 00ef 5F5F6675 		.string	"__func__"
+ 2479      6E635F5F 
+ 2479      00
+ 2480              	.LASF281:
+ 2481 00f8 7263546F 		.string	"rcTooShort"
+ 2481      6F53686F 
+ 2481      727400
+ 2482              	.LASF111:
+ 2483 0103 72635061 		.string	"rcPagemap"
+ 2483      67656D61 
+ 2483      7000
+ 2484              	.LASF63:
+ 2485 010d 72634170 		.string	"rcApp"
+ 2485      7000
+ 2486              	.LASF94:
+ 2487 0113 72634669 		.string	"rcFileDesc"
+ 2487      6C654465 
+ 2487      736300
+ 2488              	.LASF233:
+ 2489 011e 72634974 		.string	"rcItem"
+ 2489      656D00
+ 2490              	.LASF125:
+ 2491 0125 72635472 		.string	"rcTrie"
+ 2491      696500
+ 2492              	.LASF66:
+ 2493 012c 72634C61 		.string	"rcLastModule_v1_0"
+ 2493      73744D6F 
+ 2493      64756C65 
+ 2493      5F76315F 
+ 2493      3000
+ 2494              	.LASF73:
+ 2495 013e 72634C61 		.string	"rcLastModule_v1_1"
+ 2495      73744D6F 
+ 2495      64756C65 
+
GAS LISTING /tmp/ccIEtKUs.s 			page 53
+
+
+ 2495      5F76315F 
+ 2495      3100
+ 2496              	.LASF224:
+ 2497 0150 72634279 		.string	"rcByteOrder"
+ 2497      74654F72 
+ 2497      64657200 
+ 2498              	.LASF142:
+ 2499 015c 7263436F 		.string	"rcConstructing"
+ 2499      6E737472 
+ 2499      75637469 
+ 2499      6E6700
+ 2500              	.LASF310:
+ 2501 016b 4B4E756C 		.string	"KNullBlockCipherVecRegProcessorSupport"
+ 2501      6C426C6F 
+ 2501      636B4369 
+ 2501      70686572 
+ 2501      56656352 
+ 2502              	.LASF313:
+ 2503 0192 5F5F5052 		.string	"__PRETTY_FUNCTION__"
+ 2503      45545459 
+ 2503      5F46554E 
+ 2503      4354494F 
+ 2503      4E5F5F00 
+ 2504              	.LASF9:
+ 2505 01a6 72635F74 		.string	"rc_t"
+ 2505      00
+ 2506              	.LASF218:
+ 2507 01ab 7263466F 		.string	"rcFormat"
+ 2507      726D6174 
+ 2507      00
+ 2508              	.LASF276:
+ 2509 01b4 7263556E 		.string	"rcUnauthorized"
+ 2509      61757468 
+ 2509      6F72697A 
+ 2509      656400
+ 2510              	.LASF156:
+ 2511 01c3 72635265 		.string	"rcRemoving"
+ 2511      6D6F7669 
+ 2511      6E6700
+ 2512              	.LASF69:
+ 2513 01ce 72634B72 		.string	"rcKrypto"
+ 2513      7970746F 
+ 2513      00
+ 2514              	.LASF147:
+ 2515 01d7 72635669 		.string	"rcVisiting"
+ 2515      73697469 
+ 2515      6E6700
+ 2516              	.LASF77:
+ 2517 01e2 72634172 		.string	"rcArc"
+ 2517      6300
+ 2518              	.LASF52:
+ 2519 01e8 72634578 		.string	"rcExe"
+ 2519      6500
+ 2520              	.LASF282:
+ 2521 01ee 7263546F 		.string	"rcTooLong"
+ 2521      6F4C6F6E 
+ 2521      6700
+
GAS LISTING /tmp/ccIEtKUs.s 			page 54
+
+
+ 2522              	.LASF210:
+ 2523 01f8 52434F62 		.string	"RCObject"
+ 2523      6A656374 
+ 2523      00
+ 2524              	.LASF220:
+ 2525 0201 7263496E 		.string	"rcInterface"
+ 2525      74657266 
+ 2525      61636500 
+ 2526              	.LASF148:
+ 2527 020d 72635265 		.string	"rcResolving"
+ 2527      736F6C76 
+ 2527      696E6700 
+ 2528              	.LASF90:
+ 2529 0219 72634469 		.string	"rcDirectory"
+ 2529      72656374 
+ 2529      6F727900 
+ 2530              	.LASF2:
+ 2531 0225 6C6F6E67 		.string	"long int"
+ 2531      20696E74 
+ 2531      00
+ 2532              	.LASF178:
+ 2533 022e 72635661 		.string	"rcValidating"
+ 2533      6C696461 
+ 2533      74696E67 
+ 2533      00
+ 2534              	.LASF80:
+ 2535 023b 72634172 		.string	"rcArgv"
+ 2535      677600
+ 2536              	.LASF56:
+ 2537 0242 72634353 		.string	"rcCS"
+ 2537      00
+ 2538              	.LASF137:
+ 2539 0247 72635572 		.string	"rcUri"
+ 2539      6900
+ 2540              	.LASF159:
+ 2541 024d 72634372 		.string	"rcCreating"
+ 2541      65617469 
+ 2541      6E6700
+ 2542              	.LASF45:
+ 2543 0258 656E6372 		.string	"encrypt"
+ 2543      79707400 
+ 2544              	.LASF35:
+ 2545 0260 76313238 		.string	"v128_u8_t"
+ 2545      5F75385F 
+ 2545      7400
+ 2546              	.LASF18:
+ 2547 026a 4442475F 		.string	"DBG_XML"
+ 2547      584D4C00 
+ 2548              	.LASF30:
+ 2549 0272 4442475F 		.string	"DBG_MOD_COUNT"
+ 2549      4D4F445F 
+ 2549      434F554E 
+ 2549      5400
+ 2550              	.LASF61:
+ 2551 0280 72634442 		.string	"rcDB"
+ 2551      00
+ 2552              	.LASF239:
+
GAS LISTING /tmp/ccIEtKUs.s 			page 55
+
+
+ 2553 0285 7263436F 		.string	"rcConnection"
+ 2553      6E6E6563 
+ 2553      74696F6E 
+ 2553      00
+ 2554              	.LASF107:
+ 2555 0292 72634D67 		.string	"rcMgr"
+ 2555      7200
+ 2556              	.LASF269:
+ 2557 0298 72635669 		.string	"rcViolated"
+ 2557      6F6C6174 
+ 2557      656400
+ 2558              	.LASF202:
+ 2559 02a3 72634465 		.string	"rcDecrypting"
+ 2559      63727970 
+ 2559      74696E67 
+ 2559      00
+ 2560              	.LASF0:
+ 2561 02b0 7369676E 		.string	"signed char"
+ 2561      65642063 
+ 2561      68617200 
+ 2562              	.LASF5:
+ 2563 02bc 75696E74 		.string	"uint8_t"
+ 2563      385F7400 
+ 2564              	.LASF85:
+ 2565 02c4 72634368 		.string	"rcChar"
+ 2565      617200
+ 2566              	.LASF70:
+ 2567 02cb 72635244 		.string	"rcRDBMS"
+ 2567      424D5300 
+ 2568              	.LASF179:
+ 2569 02d3 72634578 		.string	"rcExecuting"
+ 2569      65637574 
+ 2569      696E6700 
+ 2570              	.LASF306:
+ 2571 02df 64656372 		.string	"decrypt_key"
+ 2571      7970745F 
+ 2571      6B657900 
+ 2572              	.LASF11:
+ 2573 02eb 4442475F 		.string	"DBG_MOD_NOT_FOUND"
+ 2573      4D4F445F 
+ 2573      4E4F545F 
+ 2573      464F554E 
+ 2573      4400
+ 2574              	.LASF166:
+ 2575 02fd 72635265 		.string	"rcReverting"
+ 2575      76657274 
+ 2575      696E6700 
+ 2576              	.LASF82:
+ 2577 0309 72634261 		.string	"rcBarrier"
+ 2577      72726965 
+ 2577      7200
+ 2578              	.LASF266:
+ 2579 0313 72634578 		.string	"rcExhausted"
+ 2579      68617573 
+ 2579      74656400 
+ 2580              	.LASF3:
+ 2581 031f 756E7369 		.string	"unsigned char"
+
GAS LISTING /tmp/ccIEtKUs.s 			page 56
+
+
+ 2581      676E6564 
+ 2581      20636861 
+ 2581      7200
+ 2582              	.LASF139:
+ 2583 032d 5243436F 		.string	"RCContext"
+ 2583      6E746578 
+ 2583      7400
+ 2584              	.LASF102:
+ 2585 0337 72634C6F 		.string	"rcLock"
+ 2585      636B00
+ 2586              	.LASF255:
+ 2587 033e 72634261 		.string	"rcBadVersion"
+ 2587      64566572 
+ 2587      73696F6E 
+ 2587      00
+ 2588              	.LASF256:
+ 2589 034b 72634465 		.string	"rcDestroyed"
+ 2589      7374726F 
+ 2589      79656400 
+ 2590              	.LASF119:
+ 2591 0357 72635374 		.string	"rcString"
+ 2591      72696E67 
+ 2591      00
+ 2592              	.LASF81:
+ 2593 0360 72634174 		.string	"rcAttr"
+ 2593      747200
+ 2594              	.LASF103:
+ 2595 0367 72634C6F 		.string	"rcLog"
+ 2595      6700
+ 2596              	.LASF312:
+ 2597 036d 6E65775F 		.string	"new_obj"
+ 2597      6F626A00 
+ 2598              	.LASF14:
+ 2599 0375 4442475F 		.string	"DBG_KDB"
+ 2599      4B444200 
+ 2600              	.LASF207:
+ 2601 037d 72635072 		.string	"rcProcessing"
+ 2601      6F636573 
+ 2601      73696E67 
+ 2601      00
+ 2602              	.LASF57:
+ 2603 038a 72634646 		.string	"rcFF"
+ 2603      00
+ 2604              	.LASF311:
+ 2605 038f 5F426F6F 		.string	"_Bool"
+ 2605      6C00
+ 2606              	.LASF58:
+ 2607 0395 72634653 		.string	"rcFS"
+ 2607      00
+ 2608              	.LASF145:
+ 2609 039a 72634163 		.string	"rcAccessing"
+ 2609      63657373 
+ 2609      696E6700 
+ 2610              	.LASF263:
+ 2611 03a6 7263496E 		.string	"rcInterrupted"
+ 2611      74657272 
+ 2611      75707465 
+
GAS LISTING /tmp/ccIEtKUs.s 			page 57
+
+
+ 2611      6400
+ 2612              	.LASF271:
+ 2613 03b4 72634E6F 		.string	"rcNotFound"
+ 2613      74466F75 
+ 2613      6E6400
+ 2614              	.LASF10:
+ 2615 03bf 63686172 		.string	"char"
+ 2615      00
+ 2616              	.LASF109:
+ 2617 03c4 72634E6F 		.string	"rcNode"
+ 2617      646500
+ 2618              	.LASF28:
+ 2619 03cb 4442475F 		.string	"DBG_AES"
+ 2619      41455300 
+ 2620              	.LASF240:
+ 2621 03d3 72634572 		.string	"rcError"
+ 2621      726F7200 
+ 2622              	.LASF157:
+ 2623 03db 7263436C 		.string	"rcClearing"
+ 2623      65617269 
+ 2623      6E6700
+ 2624              	.LASF215:
+ 2625 03e6 72634F66 		.string	"rcOffset"
+ 2625      66736574 
+ 2625      00
+ 2626              	.LASF161:
+ 2627 03ef 7263436C 		.string	"rcClosing"
+ 2627      6F73696E 
+ 2627      6700
+ 2628              	.LASF93:
+ 2629 03f9 72634669 		.string	"rcFile"
+ 2629      6C6500
+ 2630              	.LASF122:
+ 2631 0400 72635469 		.string	"rcTimeout"
+ 2631      6D656F75 
+ 2631      7400
+ 2632              	.LASF110:
+ 2633 040a 72634E75 		.string	"rcNumeral"
+ 2633      6D657261 
+ 2633      6C00
+ 2634              	.LASF187:
+ 2635 0414 72635761 		.string	"rcWaiting"
+ 2635      6974696E 
+ 2635      6700
+ 2636              	.LASF191:
+ 2637 041e 72634650 		.string	"rcFPCoding"
+ 2637      436F6469 
+ 2637      6E6700
+ 2638              	.LASF243:
+ 2639 0429 72635369 		.string	"rcSize"
+ 2639      7A6500
+ 2640              	.LASF228:
+ 2641 0430 72634469 		.string	"rcDirEntry"
+ 2641      72456E74 
+ 2641      727900
+ 2642              	.LASF180:
+ 2643 043b 72634875 		.string	"rcHuffmanCoding"
+
GAS LISTING /tmp/ccIEtKUs.s 			page 58
+
+
+ 2643      66666D61 
+ 2643      6E436F64 
+ 2643      696E6700 
+ 2644              	.LASF23:
+ 2645 044b 4442475F 		.string	"DBG_KFG"
+ 2645      4B464700 
+ 2646              	.LASF261:
+ 2647 0453 72634275 		.string	"rcBusy"
+ 2647      737900
+ 2648              	.LASF20:
+ 2649 045a 4442475F 		.string	"DBG_SRA"
+ 2649      53524100 
+ 2650              	.LASF219:
+ 2651 0462 72635472 		.string	"rcTransfer"
+ 2651      616E7366 
+ 2651      657200
+ 2652              	.LASF17:
+ 2653 046d 4442475F 		.string	"DBG_KFS"
+ 2653      4B465300 
+ 2654              	.LASF305:
+ 2655 0475 4B4E756C 		.string	"KNullBlockCipherVecRegSetDecryptKey"
+ 2655      6C426C6F 
+ 2655      636B4369 
+ 2655      70686572 
+ 2655      56656352 
+ 2656              	.LASF174:
+ 2657 0499 72635061 		.string	"rcPacking"
+ 2657      636B696E 
+ 2657      6700
+ 2658              	.LASF170:
+ 2659 04a3 7263436F 		.string	"rcCopying"
+ 2659      7079696E 
+ 2659      6700
+ 2660              	.LASF177:
+ 2661 04ad 72634465 		.string	"rcDecoding"
+ 2661      636F6469 
+ 2661      6E6700
+ 2662              	.LASF150:
+ 2663 04b8 7263556E 		.string	"rcUnlocking"
+ 2663      6C6F636B 
+ 2663      696E6700 
+ 2664              	.LASF309:
+ 2665 04c4 4B4E756C 		.string	"KNullBlockCipherVecRegDecrypt"
+ 2665      6C426C6F 
+ 2665      636B4369 
+ 2665      70686572 
+ 2665      56656352 
+ 2666              	.LASF48:
+ 2667 04e2 4B426C6F 		.string	"KBlockCipherVec_vt_v1"
+ 2667      636B4369 
+ 2667      70686572 
+ 2667      5665635F 
+ 2667      76745F76 
+ 2668              	.LASF16:
+ 2669 04f8 4442475F 		.string	"DBG_LEGREF"
+ 2669      4C454752 
+ 2669      454600
+
GAS LISTING /tmp/ccIEtKUs.s 			page 59
+
+
+ 2670              	.LASF151:
+ 2671 0503 72635265 		.string	"rcRenaming"
+ 2671      6E616D69 
+ 2671      6E6700
+ 2672              	.LASF302:
+ 2673 050e 75736572 		.string	"user_key"
+ 2673      5F6B6579 
+ 2673      00
+ 2674              	.LASF221:
+ 2675 0517 72634964 		.string	"rcId"
+ 2675      00
+ 2676              	.LASF134:
+ 2677 051c 7263436D 		.string	"rcCmd"
+ 2677      6400
+ 2678              	.LASF26:
+ 2679 0522 4442475F 		.string	"DBG_LOADLIB"
+ 2679      4C4F4144 
+ 2679      4C494200 
+ 2680              	.LASF273:
+ 2681 052e 7263556E 		.string	"rcUnlocked"
+ 2681      6C6F636B 
+ 2681      656400
+ 2682              	.LASF74:
+ 2683 0539 52434D6F 		.string	"RCModule"
+ 2683      64756C65 
+ 2683      00
+ 2684              	.LASF235:
+ 2685 0542 7263456E 		.string	"rcEncryption"
+ 2685      63727970 
+ 2685      74696F6E 
+ 2685      00
+ 2686              	.LASF270:
+ 2687 054f 72634578 		.string	"rcExists"
+ 2687      69737473 
+ 2687      00
+ 2688              	.LASF36:
+ 2689 0558 43697068 		.string	"CipherVec"
+ 2689      65725665 
+ 2689      6300
+ 2690              	.LASF289:
+ 2691 0562 72634F70 		.string	"rcOpen"
+ 2691      656E00
+ 2692              	.LASF275:
+ 2693 0569 72634465 		.string	"rcDeadlock"
+ 2693      61646C6F 
+ 2693      636B00
+ 2694              	.LASF212:
+ 2695 0574 72634C69 		.string	"rcLink"
+ 2695      6E6B00
+ 2696              	.LASF199:
+ 2697 057b 7263466C 		.string	"rcFlushing"
+ 2697      75736869 
+ 2697      6E6700
+ 2698              	.LASF247:
+ 2699 0586 72634E6F 		.string	"rcNoErr"
+ 2699      45727200 
+ 2700              	.LASF226:
+
GAS LISTING /tmp/ccIEtKUs.s 			page 60
+
+
+ 2701 058e 72635461 		.string	"rcTag"
+ 2701      6700
+ 2702              	.LASF22:
+ 2703 0594 4442475F 		.string	"DBG_ALIGN"
+ 2703      414C4947 
+ 2703      4E00
+ 2704              	.LASF190:
+ 2705 059e 72634C6F 		.string	"rcLogging"
+ 2705      6767696E 
+ 2705      6700
+ 2706              	.LASF283:
+ 2707 05a8 7263546F 		.string	"rcTooBig"
+ 2707      6F426967 
+ 2707      00
+ 2708              	.LASF127:
+ 2709 05b1 72635665 		.string	"rcVector"
+ 2709      63746F72 
+ 2709      00
+ 2710              	.LASF162:
+ 2711 05ba 72635265 		.string	"rcResizing"
+ 2711      73697A69 
+ 2711      6E6700
+ 2712              	.LASF136:
+ 2713 05c5 72635175 		.string	"rcQuery"
+ 2713      65727900 
+ 2714              	.LASF8:
+ 2715 05cd 6C6F6E67 		.string	"long unsigned int"
+ 2715      20756E73 
+ 2715      69676E65 
+ 2715      6420696E 
+ 2715      7400
+ 2716              	.LASF268:
+ 2717 05df 72634578 		.string	"rcExcessive"
+ 2717      63657373 
+ 2717      69766500 
+ 2718              	.LASF196:
+ 2719 05eb 72634576 		.string	"rcEvaluating"
+ 2719      616C7561 
+ 2719      74696E67 
+ 2719      00
+ 2720              	.LASF133:
+ 2721 05f8 7263526E 		.string	"rcRng"
+ 2721      6700
+ 2722              	.LASF141:
+ 2723 05fe 72634361 		.string	"rcCasting"
+ 2723      7374696E 
+ 2723      6700
+ 2724              	.LASF300:
+ 2725 0608 73656C66 		.string	"self"
+ 2725      00
+ 2726              	.LASF101:
+ 2727 060d 72634974 		.string	"rcIterator"
+ 2727      65726174 
+ 2727      6F7200
+ 2728              	.LASF49:
+ 2729 0618 4B426C6F 		.string	"KBlockCipherVec"
+ 2729      636B4369 
+
GAS LISTING /tmp/ccIEtKUs.s 			page 61
+
+
+ 2729      70686572 
+ 2729      56656300 
+ 2730              	.LASF320:
+ 2731 0628 4B4E756C 		.string	"KNullBlockCipherVecRegDestroy"
+ 2731      6C426C6F 
+ 2731      636B4369 
+ 2731      70686572 
+ 2731      56656352 
+ 2732              	.LASF316:
+ 2733 0646 4B4E756C 		.string	"KNullBlockCipherVecReg_vt_"
+ 2733      6C426C6F 
+ 2733      636B4369 
+ 2733      70686572 
+ 2733      56656352 
+ 2734              	.LASF118:
+ 2735 0661 72635374 		.string	"rcStorage"
+ 2735      6F726167 
+ 2735      6500
+ 2736              	.LASF285:
+ 2737 066b 72634F75 		.string	"rcOutOfKDirectory"
+ 2737      744F664B 
+ 2737      44697265 
+ 2737      63746F72 
+ 2737      7900
+ 2738              	.LASF230:
+ 2739 067d 7263526F 		.string	"rcRow"
+ 2739      7700
+ 2740              	.LASF19:
+ 2741 0683 4442475F 		.string	"DBG_VDB"
+ 2741      56444200 
+ 2742              	.LASF130:
+ 2743 068b 72634C61 		.string	"rcLastTarget_v1_0"
+ 2743      73745461 
+ 2743      72676574 
+ 2743      5F76315F 
+ 2743      3000
+ 2744              	.LASF138:
+ 2745 069d 72634C61 		.string	"rcLastTarget_v1_1"
+ 2745      73745461 
+ 2745      72676574 
+ 2745      5F76315F 
+ 2745      3100
+ 2746              	.LASF117:
+ 2747 06af 72635365 		.string	"rcSemaphore"
+ 2747      6D617068 
+ 2747      6F726500 
+ 2748              	.LASF262:
+ 2749 06bb 7263496E 		.string	"rcIncomplete"
+ 2749      636F6D70 
+ 2749      6C657465 
+ 2749      00
+ 2750              	.LASF291:
+ 2751 06c8 72634E6F 		.string	"rcNotOpen"
+ 2751      744F7065 
+ 2751      6E00
+ 2752              	.LASF100:
+ 2753 06d2 7263496E 		.string	"rcIndex"
+
GAS LISTING /tmp/ccIEtKUs.s 			page 62
+
+
+ 2753      64657800 
+ 2754              	.LASF21:
+ 2755 06da 4442475F 		.string	"DBG_XARC"
+ 2755      58415243 
+ 2755      00
+ 2756              	.LASF317:
+ 2757 06e3 474E5520 		.string	"GNU C 4.4.2"
+ 2757      4320342E 
+ 2757      342E3200 
+ 2758              	.LASF53:
+ 2759 06ef 72635275 		.string	"rcRuntime"
+ 2759      6E74696D 
+ 2759      6500
+ 2760              	.LASF92:
+ 2761 06f9 7263586D 		.string	"rcXmlDoc"
+ 2761      6C446F63 
+ 2761      00
+ 2762              	.LASF31:
+ 2763 0702 6C6F6E67 		.string	"long long int"
+ 2763      206C6F6E 
+ 2763      6720696E 
+ 2763      7400
+ 2764              	.LASF173:
+ 2765 0710 7263506F 		.string	"rcPositioning"
+ 2765      73697469 
+ 2765      6F6E696E 
+ 2765      6700
+ 2766              	.LASF114:
+ 2767 071e 72635175 		.string	"rcQueue"
+ 2767      65756500 
+ 2768              	.LASF189:
+ 2769 0726 72634465 		.string	"rcDetaching"
+ 2769      74616368 
+ 2769      696E6700 
+ 2770              	.LASF104:
+ 2771 0732 72634D44 		.string	"rcMD5SumFmt"
+ 2771      3553756D 
+ 2771      466D7400 
+ 2772              	.LASF155:
+ 2773 073e 7263496E 		.string	"rcInserting"
+ 2773      73657274 
+ 2773      696E6700 
+ 2774              	.LASF203:
+ 2775 074a 7263436F 		.string	"rcComparing"
+ 2775      6D706172 
+ 2775      696E6700 
+ 2776              	.LASF265:
+ 2777 0756 7263456D 		.string	"rcEmpty"
+ 2777      70747900 
+ 2778              	.LASF97:
+ 2779 075e 7263466F 		.string	"rcFormatter"
+ 2779      726D6174 
+ 2779      74657200 
+ 2780              	.LASF34:
+ 2781 076a 646F7562 		.string	"double"
+ 2781      6C6500
+ 2782              	.LASF182:
+
GAS LISTING /tmp/ccIEtKUs.s 			page 63
+
+
+ 2783 0771 72635265 		.string	"rcRegistering"
+ 2783      67697374 
+ 2783      6572696E 
+ 2783      6700
+ 2784              	.LASF71:
+ 2785 077f 72634E53 		.string	"rcNS"
+ 2785      00
+ 2786              	.LASF214:
+ 2787 0784 72635061 		.string	"rcParam"
+ 2787      72616D00 
+ 2788              	.LASF75:
+ 2789 078c 52435461 		.string	"RCTarget"
+ 2789      72676574 
+ 2789      00
+ 2790              	.LASF315:
+ 2791 0795 4B4E756C 		.string	"KNullBlockCipherVecRegaes_ncbi_name"
+ 2791      6C426C6F 
+ 2791      636B4369 
+ 2791      70686572 
+ 2791      56656352 
+ 2792              	.LASF236:
+ 2793 07b9 72634372 		.string	"rcCrc"
+ 2793      6300
+ 2794              	.LASF25:
+ 2795 07bf 4442475F 		.string	"DBG_SEARCH"
+ 2795      53454152 
+ 2795      434800
+ 2796              	.LASF64:
+ 2797 07ca 7263584D 		.string	"rcXML"
+ 2797      4C00
+ 2798              	.LASF27:
+ 2799 07d0 4442475F 		.string	"DBG_VFS"
+ 2799      56465300 
+ 2800              	.LASF32:
+ 2801 07d8 666C6F61 		.string	"float"
+ 2801      7400
+ 2802              	.LASF158:
+ 2803 07de 72635570 		.string	"rcUpdating"
+ 2803      64617469 
+ 2803      6E6700
+ 2804              	.LASF185:
+ 2805 07e9 7263436F 		.string	"rcConverting"
+ 2805      6E766572 
+ 2805      74696E67 
+ 2805      00
+ 2806              	.LASF171:
+ 2807 07f6 7263436F 		.string	"rcConcatenating"
+ 2807      6E636174 
+ 2807      656E6174 
+ 2807      696E6700 
+ 2808              	.LASF50:
+ 2809 0806 4B426C6F 		.string	"KBlockCipher"
+ 2809      636B4369 
+ 2809      70686572 
+ 2809      00
+ 2810              	.LASF128:
+ 2811 0813 72634479 		.string	"rcDylib"
+
GAS LISTING /tmp/ccIEtKUs.s 			page 64
+
+
+ 2811      6C696200 
+ 2812              	.LASF277:
+ 2813 081b 72635265 		.string	"rcReadonly"
+ 2813      61646F6E 
+ 2813      6C7900
+ 2814              	.LASF7:
+ 2815 0826 756E7369 		.string	"unsigned int"
+ 2815      676E6564 
+ 2815      20696E74 
+ 2815      00
+ 2816              	.LASF278:
+ 2817 0833 72635772 		.string	"rcWriteonly"
+ 2817      6974656F 
+ 2817      6E6C7900 
+ 2818              	.LASF272:
+ 2819 083f 72634C6F 		.string	"rcLocked"
+ 2819      636B6564 
+ 2819      00
+ 2820              	.LASF154:
+ 2821 0848 72635072 		.string	"rcProjecting"
+ 2821      6F6A6563 
+ 2821      74696E67 
+ 2821      00
+ 2822              	.LASF59:
+ 2823 0855 72635053 		.string	"rcPS"
+ 2823      00
+ 2824              	.LASF244:
+ 2825 085a 72635265 		.string	"rcRefcount"
+ 2825      66636F75 
+ 2825      6E7400
+ 2826              	.LASF79:
+ 2827 0865 7263546F 		.string	"rcTocEntry"
+ 2827      63456E74 
+ 2827      727900
+ 2828              	.LASF234:
+ 2829 0870 72634D6F 		.string	"rcMode"
+ 2829      646500
+ 2830              	.LASF293:
+ 2831 0877 7263556E 		.string	"rcUnequal"
+ 2831      65717561 
+ 2831      6C00
+ 2832              	.LASF274:
+ 2833 0881 72634465 		.string	"rcDetached"
+ 2833      74616368 
+ 2833      656400
+ 2834              	.LASF280:
+ 2835 088c 7263496E 		.string	"rcInPlaceNotAllowed"
+ 2835      506C6163 
+ 2835      654E6F74 
+ 2835      416C6C6F 
+ 2835      77656400 
+ 2836              	.LASF222:
+ 2837 08a0 72635261 		.string	"rcRange"
+ 2837      6E676500 
+ 2838              	.LASF319:
+ 2839 08a8 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/linux/gcc/dyn/x86_64/dbg/obj/libs/krypto"
+ 2839      652F726F 
+
GAS LISTING /tmp/ccIEtKUs.s 			page 65
+
+
+ 2839      6461726D 
+ 2839      65722F73 
+ 2839      72615F73 
+ 2840              	.LASF232:
+ 2841 08f0 72634C61 		.string	"rcLastObject_v1_0"
+ 2841      73744F62 
+ 2841      6A656374 
+ 2841      5F76315F 
+ 2841      3000
+ 2842              	.LASF245:
+ 2843 0902 72634C61 		.string	"rcLastObject_v1_1"
+ 2843      73744F62 
+ 2843      6A656374 
+ 2843      5F76315F 
+ 2843      3100
+ 2844              	.LASF198:
+ 2845 0914 72634C61 		.string	"rcLastContext_v1_0"
+ 2845      7374436F 
+ 2845      6E746578 
+ 2845      745F7631 
+ 2845      5F3000
+ 2846              	.LASF209:
+ 2847 0927 72634C61 		.string	"rcLastContext_v1_1"
+ 2847      7374436F 
+ 2847      6E746578 
+ 2847      745F7631 
+ 2847      5F3100
+ 2848              	.LASF105:
+ 2849 093a 72634D65 		.string	"rcMemMap"
+ 2849      6D4D6170 
+ 2849      00
+ 2850              	.LASF129:
+ 2851 0943 72634578 		.string	"rcExpression"
+ 2851      70726573 
+ 2851      73696F6E 
+ 2851      00
+ 2852              	.LASF175:
+ 2853 0950 7263556E 		.string	"rcUnpacking"
+ 2853      7061636B 
+ 2853      696E6700 
+ 2854              	.LASF91:
+ 2855 095c 7263446F 		.string	"rcDoc"
+ 2855      6300
+ 2856              	.LASF12:
+ 2857 0962 4442475F 		.string	"DBG_APP"
+ 2857      41505000 
+ 2858              	.LASF192:
+ 2859 096a 72634D75 		.string	"rcMultiplexing"
+ 2859      6C746970 
+ 2859      6C657869 
+ 2859      6E6700
+ 2860              	.LASF194:
+ 2861 0979 72635365 		.string	"rcSearching"
+ 2861      61726368 
+ 2861      696E6700 
+ 2862              	.LASF294:
+ 2863 0985 72634661 		.string	"rcFailed"
+
GAS LISTING /tmp/ccIEtKUs.s 			page 66
+
+
+ 2863      696C6564 
+ 2863      00
+ 2864              	.LASF259:
+ 2865 098e 7263496E 		.string	"rcIncorrect"
+ 2865      636F7272 
+ 2865      65637400 
+ 2866              	.LASF98:
+ 2867 099a 72634675 		.string	"rcFunctParam"
+ 2867      6E637450 
+ 2867      6172616D 
+ 2867      00
+ 2868              	.LASF208:
+ 2869 09a7 72634964 		.string	"rcIdentifying"
+ 2869      656E7469 
+ 2869      6679696E 
+ 2869      6700
+ 2870              	.LASF223:
+ 2871 09b5 7263436F 		.string	"rcConstraint"
+ 2871      6E737472 
+ 2871      61696E74 
+ 2871      00
+ 2872              	.LASF249:
+ 2873 09c2 7263556E 		.string	"rcUnknown"
+ 2873      6B6E6F77 
+ 2873      6E00
+ 2874              	.LASF88:
+ 2875 09cc 72634375 		.string	"rcCursor"
+ 2875      72736F72 
+ 2875      00
+ 2876              	.LASF246:
+ 2877 09d5 52435374 		.string	"RCState"
+ 2877      61746500 
+ 2878              	.LASF47:
+ 2879 09dd 4B426C6F 		.string	"KBlockCipherByte"
+ 2879      636B4369 
+ 2879      70686572 
+ 2879      42797465 
+ 2879      00
+ 2880              	.LASF38:
+ 2881 09ee 4B426C6F 		.string	"KBlockCipherByte_vt_v1"
+ 2881      636B4369 
+ 2881      70686572 
+ 2881      42797465 
+ 2881      5F76745F 
+ 2882              	.LASF286:
+ 2883 0a05 72634967 		.string	"rcIgnored"
+ 2883      6E6F7265 
+ 2883      6400
+ 2884              	.LASF144:
+ 2885 0a0f 72635265 		.string	"rcReleasing"
+ 2885      6C656173 
+ 2885      696E6700 
+ 2886              	.LASF67:
+ 2887 0a1b 72634B46 		.string	"rcKFG"
+ 2887      4700
+ 2888              	.LASF225:
+ 2889 0a21 72634D65 		.string	"rcMessage"
+
GAS LISTING /tmp/ccIEtKUs.s 			page 67
+
+
+ 2889      73736167 
+ 2889      6500
+ 2890              	.LASF172:
+ 2891 0a2b 7263466F 		.string	"rcFormatting"
+ 2891      726D6174 
+ 2891      74696E67 
+ 2891      00
+ 2892              	.LASF65:
+ 2893 0a38 72635352 		.string	"rcSRA"
+ 2893      4100
+ 2894              	.LASF241:
+ 2895 0a3e 7263456E 		.string	"rcEnvironment"
+ 2895      7669726F 
+ 2895      6E6D656E 
+ 2895      7400
+ 2896              	.LASF33:
+ 2897 0a4c 6C6F6E67 		.string	"long long unsigned int"
+ 2897      206C6F6E 
+ 2897      6720756E 
+ 2897      7369676E 
+ 2897      65642069 
+ 2898              	.LASF40:
+ 2899 0a63 64657374 		.string	"destroy"
+ 2899      726F7900 
+ 2900              	.LASF123:
+ 2901 0a6b 7263546F 		.string	"rcToken"
+ 2901      6B656E00 
+ 2902              	.LASF183:
+ 2903 0a73 7263546F 		.string	"rcTokenizing"
+ 2903      6B656E69 
+ 2903      7A696E67 
+ 2903      00
+ 2904              	.LASF15:
+ 2905 0a80 4442475F 		.string	"DBG_REF"
+ 2905      52454600 
+ 2906              	.LASF164:
+ 2907 0a88 72635772 		.string	"rcWriting"
+ 2907      6974696E 
+ 2907      6700
+ 2908              	.LASF140:
+ 2909 0a92 7263416C 		.string	"rcAllocating"
+ 2909      6C6F6361 
+ 2909      74696E67 
+ 2909      00
+ 2910              	.LASF126:
+ 2911 0a9f 72635479 		.string	"rcType"
+ 2911      706500
+ 2912              	.LASF227:
+ 2913 0aa6 72635265 		.string	"rcResources"
+ 2913      736F7572 
+ 2913      63657300 
+ 2914              	.LASF108:
+ 2915 0ab2 72634E61 		.string	"rcNamelist"
+ 2915      6D656C69 
+ 2915      737400
+ 2916              	.LASF298:
+ 2917 0abd 4B4E756C 		.string	"KNullBlockCipherVecRegBlockSize"
+
GAS LISTING /tmp/ccIEtKUs.s 			page 68
+
+
+ 2917      6C426C6F 
+ 2917      636B4369 
+ 2917      70686572 
+ 2917      56656352 
+ 2918              	.LASF299:
+ 2919 0add 4B4E756C 		.string	"KNullBlockCipherVecRegKeySize"
+ 2919      6C426C6F 
+ 2919      636B4369 
+ 2919      70686572 
+ 2919      56656352 
+ 2920              	.LASF292:
+ 2921 0afb 7263556E 		.string	"rcUndefined"
+ 2921      64656669 
+ 2921      6E656400 
+ 2922              	.LASF260:
+ 2923 0b07 7263496E 		.string	"rcInconsistent"
+ 2923      636F6E73 
+ 2923      69737465 
+ 2923      6E7400
+ 2924              	.LASF205:
+ 2925 0b16 72635265 		.string	"rcRetrieving"
+ 2925      74726965 
+ 2925      76696E67 
+ 2925      00
+ 2926              	.LASF301:
+ 2927 0b23 656E6372 		.string	"encrypt_key"
+ 2927      7970745F 
+ 2927      6B657900 
+ 2928              	.LASF46:
+ 2929 0b2f 64656372 		.string	"decrypt"
+ 2929      79707400 
+ 2930              	.LASF39:
+ 2931 0b37 76657273 		.string	"version"
+ 2931      696F6E00 
+ 2932              	.LASF217:
+ 2933 0b3f 72634E61 		.string	"rcName"
+ 2933      6D6500
+ 2934              	.LASF254:
+ 2935 0b46 72634E75 		.string	"rcNull"
+ 2935      6C6C00
+ 2936              	.LASF176:
+ 2937 0b4d 7263456E 		.string	"rcEncoding"
+ 2937      636F6469 
+ 2937      6E6700
+ 2938              	.LASF95:
+ 2939 0b58 72634669 		.string	"rcFileFormat"
+ 2939      6C65466F 
+ 2939      726D6174 
+ 2939      00
+ 2940              	.LASF132:
+ 2941 0b65 7263456E 		.string	"rcEncryptionKey"
+ 2941      63727970 
+ 2941      74696F6E 
+ 2941      4B657900 
+ 2942              	.LASF197:
+ 2943 0b75 7263496E 		.string	"rcInflating"
+ 2943      666C6174 
+
GAS LISTING /tmp/ccIEtKUs.s 			page 69
+
+
+ 2943      696E6700 
+ 2944              	.LASF279:
+ 2945 0b81 72634E6F 		.string	"rcNoPerm"
+ 2945      5065726D 
+ 2945      00
+ 2946              	.LASF167:
+ 2947 0b8a 72635265 		.string	"rcResetting"
+ 2947      73657474 
+ 2947      696E6700 
+ 2948              	.LASF41:
+ 2949 0b96 626C6F63 		.string	"block_size"
+ 2949      6B5F7369 
+ 2949      7A6500
+ 2950              	.LASF115:
+ 2951 0ba1 72635257 		.string	"rcRWLock"
+ 2951      4C6F636B 
+ 2951      00
+ 2952              	.LASF146:
+ 2953 0baa 72634C69 		.string	"rcListing"
+ 2953      7374696E 
+ 2953      6700
+ 2954              	.LASF96:
+ 2955 0bb4 72634675 		.string	"rcFunction"
+ 2955      6E637469 
+ 2955      6F6E00
+ 2956              	.LASF252:
+ 2957 0bbf 7263556E 		.string	"rcUnrecognized"
+ 2957      7265636F 
+ 2957      676E697A 
+ 2957      656400
+ 2958              	.LASF68:
+ 2959 0bce 7263416C 		.string	"rcAlign"
+ 2959      69676E00 
+ 2960              	.LASF131:
+ 2961 0bd6 72635072 		.string	"rcProduction"
+ 2961      6F647563 
+ 2961      74696F6E 
+ 2961      00
+ 2962              	.LASF121:
+ 2963 0be3 72635468 		.string	"rcThread"
+ 2963      72656164 
+ 2963      00
+ 2964              	.LASF169:
+ 2965 0bec 72634672 		.string	"rcFreezing"
+ 2965      65657A69 
+ 2965      6E6700
+ 2966              	.LASF44:
+ 2967 0bf7 7365745F 		.string	"set_decrypt_key"
+ 2967      64656372 
+ 2967      7970745F 
+ 2967      6B657900 
+ 2968              	.LASF51:
+ 2969 0c07 62797465 		.string	"byte"
+ 2969      00
+ 2970              	.LASF37:
+ 2971 0c0c 4B426C6F 		.string	"KBlockCipher_vt"
+ 2971      636B4369 
+
GAS LISTING /tmp/ccIEtKUs.s 			page 70
+
+
+ 2971      70686572 
+ 2971      5F767400 
+ 2972              	.LASF238:
+ 2973 0c1c 72635365 		.string	"rcSeed"
+ 2973      656400
+ 2974              	.LASF195:
+ 2975 0c23 72634C6F 		.string	"rcLoading"
+ 2975      6164696E 
+ 2975      6700
+ 2976              	.LASF1:
+ 2977 0c2d 73686F72 		.string	"short int"
+ 2977      7420696E 
+ 2977      7400
+ 2978              	.LASF321:
+ 2979 0c37 4B4E756C 		.string	"KNullBlockCipherVecRegMake"
+ 2979      6C426C6F 
+ 2979      636B4369 
+ 2979      70686572 
+ 2979      56656352 
+ 2980              	.LASF288:
+ 2981 0c52 72634C61 		.string	"rcLastState_v1_0"
+ 2981      73745374 
+ 2981      6174655F 
+ 2981      76315F30 
+ 2981      00
+ 2982              	.LASF297:
+ 2983 0c63 72634C61 		.string	"rcLastState_v1_1"
+ 2983      73745374 
+ 2983      6174655F 
+ 2983      76315F31 
+ 2983      00
+ 2984              	.LASF62:
+ 2985 0c74 72635644 		.string	"rcVDB"
+ 2985      4200
+ 2986              	.LASF43:
+ 2987 0c7a 7365745F 		.string	"set_encrypt_key"
+ 2987      656E6372 
+ 2987      7970745F 
+ 2987      6B657900 
+ 2988              	.LASF60:
+ 2989 0c8a 72635846 		.string	"rcXF"
+ 2989      00
+ 2990              	.LASF143:
+ 2991 0c8f 72634465 		.string	"rcDestroying"
+ 2991      7374726F 
+ 2991      79696E67 
+ 2991      00
+ 2992              	.LASF248:
+ 2993 0c9c 7263446F 		.string	"rcDone"
+ 2993      6E6500
+ 2994              	.LASF78:
+ 2995 0ca3 7263546F 		.string	"rcToc"
+ 2995      6300
+ 2996              	.LASF152:
+ 2997 0ca9 7263416C 		.string	"rcAliasing"
+ 2997      69617369 
+ 2997      6E6700
+
GAS LISTING /tmp/ccIEtKUs.s 			page 71
+
+
+ 2998              	.LASF113:
+ 2999 0cb4 72635072 		.string	"rcProcess"
+ 2999      6F636573 
+ 2999      7300
+ 3000              	.LASF211:
+ 3001 0cbe 72634E6F 		.string	"rcNoObj"
+ 3001      4F626A00 
+ 3002              	.LASF250:
+ 3003 0cc6 7263556E 		.string	"rcUnsupported"
+ 3003      73757070 
+ 3003      6F727465 
+ 3003      6400
+ 3004              	.LASF86:
+ 3005 0cd4 7263436F 		.string	"rcColumn"
+ 3005      6C756D6E 
+ 3005      00
+ 3006              	.LASF251:
+ 3007 0cdd 7263556E 		.string	"rcUnexpected"
+ 3007      65787065 
+ 3007      63746564 
+ 3007      00
+ 3008              	.LASF6:
+ 3009 0cea 75696E74 		.string	"uint32_t"
+ 3009      33325F74 
+ 3009      00
+ 3010              	.LASF72:
+ 3011 0cf3 72635646 		.string	"rcVFS"
+ 3011      5300
+ 3012              	.LASF24:
+ 3013 0cf9 4442475F 		.string	"DBG_KRYPTO"
+ 3013      4B525950 
+ 3013      544F00
+ 3014              	.LASF307:
+ 3015 0d04 4B4E756C 		.string	"KNullBlockCipherVecRegEncrypt"
+ 3015      6C426C6F 
+ 3015      636B4369 
+ 3015      70686572 
+ 3015      56656352 
+ 3016              	.LASF296:
+ 3017 0d22 72635772 		.string	"rcWrongType"
+ 3017      6F6E6754 
+ 3017      79706500 
+ 3018              	.LASF231:
+ 3019 0d2e 72634C69 		.string	"rcLibrary"
+ 3019      62726172 
+ 3019      7900
+ 3020              	.LASF264:
+ 3021 0d38 72634361 		.string	"rcCanceled"
+ 3021      6E63656C 
+ 3021      656400
+ 3022              	.LASF135:
+ 3023 0d43 72634461 		.string	"rcData"
+ 3023      746100
+ 3024              	.LASF99:
+ 3025 0d4a 72634865 		.string	"rcHeader"
+ 3025      61646572 
+ 3025      00
+
GAS LISTING /tmp/ccIEtKUs.s 			page 72
+
+
+ 3026              	.LASF4:
+ 3027 0d53 73686F72 		.string	"short unsigned int"
+ 3027      7420756E 
+ 3027      7369676E 
+ 3027      65642069 
+ 3027      6E7400
+ 3028              	.LASF89:
+ 3029 0d66 72634461 		.string	"rcDatabase"
+ 3029      74616261 
+ 3029      736500
+ 3030              	.LASF165:
+ 3031 0d71 7263436F 		.string	"rcCommitting"
+ 3031      6D6D6974 
+ 3031      74696E67 
+ 3031      00
+ 3032              	.LASF193:
+ 3033 0d7e 7263436C 		.string	"rcClassifying"
+ 3033      61737369 
+ 3033      6679696E 
+ 3033      6700
+ 3034              	.LASF124:
+ 3035 0d8c 72635472 		.string	"rcTree"
+ 3035      656500
+ 3036              	.LASF29:
+ 3037 0d93 4442475F 		.string	"DBG_ARGS"
+ 3037      41524753 
+ 3037      00
+ 3038              	.LASF153:
+ 3039 0d9c 72635365 		.string	"rcSelecting"
+ 3039      6C656374 
+ 3039      696E6700 
+ 3040              	.LASF54:
+ 3041 0da8 72635465 		.string	"rcText"
+ 3041      787400
+ 3042              	.LASF290:
+ 3043 0daf 72634F75 		.string	"rcOutoforder"
+ 3043      746F666F 
+ 3043      72646572 
+ 3043      00
+ 3044              	.LASF308:
+ 3045 0dbc 73746174 		.string	"state"
+ 3045      6500
+ 3046              	.LASF257:
+ 3047 0dc2 7263496E 		.string	"rcInvalid"
+ 3047      76616C69 
+ 3047      6400
+ 3048              	.LASF303:
+ 3049 0dcc 75736572 		.string	"user_key_size"
+ 3049      5F6B6579 
+ 3049      5F73697A 
+ 3049      6500
+ 3050              	.LASF204:
+ 3051 0dda 7263496E 		.string	"rcInitializing"
+ 3051      69746961 
+ 3051      6C697A69 
+ 3051      6E6700
+ 3052              	.LASF83:
+
GAS LISTING /tmp/ccIEtKUs.s 			page 73
+
+
+ 3053 0de9 7263426C 		.string	"rcBlob"
+ 3053      6F6200
+ 3054              	.LASF181:
+ 3055 0df0 72635265 		.string	"rcReindexing"
+ 3055      696E6465 
+ 3055      78696E67 
+ 3055      00
+ 3056              	.LASF76:
+ 3057 0dfd 72634E6F 		.string	"rcNoTarg"
+ 3057      54617267 
+ 3057      00
+ 3058              	.LASF258:
+ 3059 0e06 7263436F 		.string	"rcCorrupt"
+ 3059      72727570 
+ 3059      7400
+ 3060              	.LASF287:
+ 3061 0e10 72634F75 		.string	"rcOutofrange"
+ 3061      746F6672 
+ 3061      616E6765 
+ 3061      00
+ 3062              	.LASF116:
+ 3063 0e1d 72635363 		.string	"rcSchema"
+ 3063      68656D61 
+ 3063      00
+ 3064              	.LASF112:
+ 3065 0e26 72635061 		.string	"rcPath"
+ 3065      746800
+ 3066              	.LASF163:
+ 3067 0e2d 72635265 		.string	"rcReading"
+ 3067      6164696E 
+ 3067      6700
+ 3068              	.LASF42:
+ 3069 0e37 6B65795F 		.string	"key_size"
+ 3069      73697A65 
+ 3069      00
+ 3070              	.LASF295:
+ 3071 0e40 72634E6F 		.string	"rcNotAvailable"
+ 3071      74417661 
+ 3071      696C6162 
+ 3071      6C6500
+ 3072              	.LASF304:
+ 3073 0e4f 4B4E756C 		.string	"KNullBlockCipherVecRegSetEncryptKey"
+ 3073      6C426C6F 
+ 3073      636B4369 
+ 3073      70686572 
+ 3073      56656352 
+ 3074              	.LASF318:
+ 3075 0e73 2F686F6D 		.string	"/home/rodarmer/sra_sdk-2.3.2-4/libs/krypto/null-ncbi.c"
+ 3075      652F726F 
+ 3075      6461726D 
+ 3075      65722F73 
+ 3075      72615F73 
+ 3076              	.LASF253:
+ 3077 0eaa 7263416D 		.string	"rcAmbiguous"
+ 3077      62696775 
+ 3077      6F757300 
+ 3078              		.ident	"GCC: (GNU) 4.4.2"
+
GAS LISTING /tmp/ccIEtKUs.s 			page 74
+
+
+ 3079              		.section	.note.GNU-stack,"", at progbits
+
GAS LISTING /tmp/ccIEtKUs.s 			page 75
+
+
+DEFINED SYMBOLS
+                            *ABS*:0000000000000000 null-ncbi.c
+     /tmp/ccIEtKUs.s:13     .rodata:0000000000000000 KNullBlockCipherVecRegaes_ncbi_name
+     /tmp/ccIEtKUs.s:17     .text:0000000000000000 KNullBlockCipherVecRegDestroy
+     /tmp/ccIEtKUs.s:37     .text:000000000000000a KNullBlockCipherVecRegBlockSize
+     /tmp/ccIEtKUs.s:57     .text:0000000000000015 KNullBlockCipherVecRegKeySize
+     /tmp/ccIEtKUs.s:77     .text:0000000000000020 KNullBlockCipherVecRegSetEncryptKey
+     /tmp/ccIEtKUs.s:100    .text:0000000000000036 KNullBlockCipherVecRegSetDecryptKey
+     /tmp/ccIEtKUs.s:123    .text:000000000000004c KNullBlockCipherVecRegEncrypt
+     /tmp/ccIEtKUs.s:145    .text:0000000000000060 KNullBlockCipherVecRegDecrypt
+     /tmp/ccIEtKUs.s:167    .text:0000000000000074 KNullBlockCipherVecRegProcessorSupport
+     /tmp/ccIEtKUs.s:190    .data.rel.ro.local:0000000000000000 KNullBlockCipherVecReg_vt_
+     /tmp/ccIEtKUs.s:207    .text:000000000000007f KNullBlockCipherVecRegMake
+     /tmp/ccIEtKUs.s:269    .rodata:0000000000000050 __func__.7214
+     /tmp/ccIEtKUs.s:274    .rodata:0000000000000070 __PRETTY_FUNCTION__.7213
+
+UNDEFINED SYMBOLS
+_GLOBAL_OFFSET_TABLE_
+SetRCFileFuncLine
diff --git a/libs/krypto/reencfile.c b/libs/krypto/reencfile.c
new file mode 100644
index 0000000..00ed4e3
--- /dev/null
+++ b/libs/krypto/reencfile.c
@@ -0,0 +1,1255 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#include <krypto/extern.h>
+#include <krypto/reencfile.h>
+#include <krypto/key.h>
+#include <krypto/encfile.h>
+#include <krypto/encfile-priv.h>
+#include "encfile-priv.h"
+
+#include <klib/rc.h>
+#include <klib/checksum.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/debug.h>
+#include <klib/vector.h>
+#include <klib/status.h>
+#include <kfs/file.h>
+#include <kfs/ramfile.h>
+
+#include <sysalloc.h>
+
+#include <byteswap.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include <klib/out.h>
+
+#define USE_MISSING_VECTOR false
+
+/* ----------------------------------------------------------------------
+ * KReencFile
+ *   Base object class for the encryption, decryption and validation of
+ *   the file format defined above
+ */
+#define KFILE_IMPL KReencFile
+#include <kfs/impl.h>
+
+/* -----
+ */
+struct KReencFile
+{
+    KFile         dad;          /* base class */
+    const KFile * encrypted;    /* encrypted file we start from */
+    const KFile * dec;          /* decryptor of the original */
+    KFile *       enc;          /* encryptor */
+    KFile *       ram;          /* a file that works from a sliding window buffer */
+
+    size_t        num_read;
+    size_t        num_writ;
+/* block id's can not max out a 64 bit number as that is a file that is 32K times too big */
+#define NO_CURRENT_BLOCK (~(uint64_t)0)
+    uint64_t      block_id;
+    uint64_t      footer_block; /* if zero, still unknown */
+
+    uint64_t      size;         /* size as known from the original file [see known_size] */
+    bool          known_size;   /* is the size of the original file known? */
+
+    char          plain_text  [ENC_DATA_BLOCK_SIZE];
+    union
+    {
+        KEncFileBlock block;
+        char          text [sizeof (KEncFileBlock)];
+    } block;
+    union
+    {
+        KEncFileFooter foot;
+        char           text [sizeof (KEncFileFooter)];
+    } foot;
+
+};
+
+/* ----------------------------------------------------------------------
+ * Interface Functions
+ *
+ * Destroy
+ *
+ */
+static
+rc_t CC KReencFileDestroy (KReencFile *self)
+{
+    if (self)
+    {
+        rc_t rc1, rc2, rc3, rc4;
+
+        rc1 = KFileRelease (self->encrypted);
+        if (rc1)
+            LOGERR (klogInt, rc1, "Re-enc failed to release encrypted file");
+
+        rc2 = KFileRelease (self->dec);
+        if (rc2)
+            LOGERR (klogInt, rc2, "Re-enc failed to release decryptor");
+
+        rc3 = KFileRelease (self->ram);
+        if (rc3)
+            LOGERR (klogInt, rc3, "Re-enc failed to release ram file");
+
+        rc4 = KFileRelease (self->enc);
+        if (rc4)
+            LOGERR (klogInt, rc4, "Re-enc failed to release encryptor");
+
+        free (self);
+
+        return (rc1 ? rc1 :
+                rc2 ? rc2 :
+                rc3 ? rc3 :
+                rc4);
+    }
+    return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * GetSysFile
+ *  returns an underlying system file object
+ *  and starting offset to contiguous region
+ *  suitable for memory mapping, or NULL if
+ *  no such file is available.
+ *
+ * We do not allow this for read, write or update as you can not memory map the 
+ * unencrypted file in a meaningful way.
+ */
+static
+struct KSysFile *CC KReencFileGetSysFileUnsupported (const KReencFile *self, uint64_t *offset)
+{
+    assert (self);
+    assert (offset);
+
+    return NULL;
+}
+
+
+/* ----------------------------------------------------------------------
+ * RandomAccess
+ *
+ *  returns 0 if random access, error code otherwise
+ */
+static
+rc_t CC KReencFileRandomAccess (const KReencFile *self)
+{
+    assert (self != NULL);
+    assert (self->encrypted != NULL);
+
+    return KFileRandomAccess (self->encrypted);
+}
+
+
+/* ----------------------------------------------------------------------
+ * Size
+ *  returns size in bytes of file
+ *
+ *  "size" [ OUT ] - return parameter for file size
+ */
+static
+rc_t CC KReencFileSize (const KReencFile *self, uint64_t *size)
+{
+    assert (self != NULL);
+    assert (self->encrypted != NULL);
+
+    /* -----
+     * the re-encrypted file will be the same size as the 
+     * previously encrypted file and we have the same understanding
+     * about knowing the size
+     */
+    return KFileSize (self->encrypted, size);
+}
+
+
+static
+rc_t CC KEncryptFileSize (const KReencFile *self, uint64_t *size)
+{
+    uint64_t z;
+    rc_t rc;
+
+    assert (self != NULL);
+    assert (self->encrypted != NULL);
+
+    /* -----
+     * the re-encrypted file will be the same size as the 
+     * previously encrypted file and we have the same understanding
+     * about knowing the size
+     */
+    rc = KFileSize (self->encrypted, &z);
+
+    if (rc == 0)
+    {
+        uint64_t bid;
+
+        bid = DecryptedPos_to_BlockId (z, NULL);
+
+        *size = BlockId_to_EncryptedPos (bid + 1) + sizeof (KEncFileFooter);
+    }
+    else
+        *size = z;
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * SetSize
+ *  sets size in bytes of file
+ *
+ *  "size" [ IN ] - new file size
+ */
+static
+rc_t CC KReencFileSetSizeUnsupported (KReencFile *self, uint64_t size)
+{
+    assert (self);
+
+    return RC ( rcFS, rcFile, rcUpdating, rcFunction, rcUnsupported );
+}
+
+
+/*
+ * The next three functions do the actual Out from a KFileRead.
+ * We will only out from the header, or a footer or a single
+ * encrypted block rather than try to fully satisfy all of a
+ * KFileRead. USe KFileReadAll to get more than one part
+ *
+ * For all we have an offset within the part which is the
+ * position from the original read request for the header
+ */
+static __inline__
+rc_t KReencFileReadHeaderOut (KReencFile * self, size_t offset, void * buffer,
+                              size_t bsize, size_t *num_read)
+{
+    assert (self);
+    assert (offset < sizeof (KEncFileHeader));
+    assert (buffer);
+    assert (bsize);
+    assert (num_read);
+
+    /* trim request if necessary */
+    if (offset + bsize > sizeof (KEncFileHeader))
+        bsize = sizeof (KEncFileHeader) - offset;
+
+    memcpy (buffer, self->block.text + offset, bsize);
+    self->block_id = NO_CURRENT_BLOCK;
+    *num_read = bsize;
+    
+    return 0;
+}
+
+
+static __inline__
+rc_t KReencFileReadBlockOut (KReencFile * self, size_t offset, void * buffer,
+                             size_t bsize, size_t * num_read)
+{
+    assert (self);
+    assert (offset < sizeof self->block);
+    assert (buffer);
+    assert (bsize);
+    assert (num_read);
+
+    if (offset + bsize > sizeof self->block)
+        bsize = sizeof self->block - offset;
+
+    memcpy (buffer, self->block.text + offset, bsize);
+    *num_read = bsize;
+
+    return 0;
+}
+
+
+static __inline__
+rc_t KReencFileReadFooterOut (KReencFile * self, size_t offset,
+                              void * buffer, size_t bsize, size_t * num_read)
+{
+    /* for the footer we will copy out from the footer in self */
+
+    assert (self);
+    assert (offset < sizeof self->foot);
+    assert (buffer);
+    assert (bsize);
+    assert (num_read);
+
+/* KOutMsg ("%s: offset '%zu' bsize '%zu'",__func__,offset,bsize); */
+    if (offset + bsize > sizeof self->foot)
+        bsize = sizeof self->foot - offset;
+
+    memcpy (buffer, self->foot.text + offset, bsize);
+    self->block_id = NO_CURRENT_BLOCK;
+    *num_read = bsize;
+
+/* KOutMsg (" *num_read '%zu'\n",bsize); */
+/* { */
+/*     size_t ix; */
+/*     char * b = buffer; */
+/*     KOutMsg ("%s:",__func__); */
+/*     for (ix = 0; ix < bsize; ++ix) */
+/*         KOutMsg (" %2.2x",b[ix]); */
+/*     KOutMsg ("\n"); */
+
+/* } */
+    return 0;
+}
+
+
+/*
+ * Handle Read within the Encrypted file header
+ *
+ * We use a private interface into the KEncFile then 
+ * the Out function below to take what we write with
+ * the Encryptor and copy it to the callers read buffer.
+ */
+static
+rc_t KReencFileReadHandleBlock (KReencFile *self,
+                                uint64_t pos,
+                                void *buffer,
+                                size_t bsize,
+                                size_t *num_read);
+
+static __inline__
+rc_t KReencFileReadHandleHeader (KReencFile *self,
+                                 uint64_t pos,
+                                 void *buffer,
+                                 size_t bsize,
+                                 size_t *num_read)
+{
+    rc_t rc;
+
+    assert (self);
+    assert (pos < sizeof (KEncFileHeader));
+    assert (buffer);
+    assert (bsize);
+    assert (num_read);
+
+    /* added to support NCBInenc and NCBIsenc variants of KEncFile
+     * read the first block of the source file but don't write any of it
+     *
+     * If the source is stream mode only then the next block to be read is the
+     * first and this will not violate by seeking. It will just have already
+     * read the block it will want to read real soon. Likewith within a
+     * single call to KFileReadAll.
+     */
+    rc = KReencFileReadHandleBlock (self, 0, NULL, 0, NULL);
+    if (rc)
+        return rc;
+
+    /* use a private function from KEncFile to generate a header */
+    rc = KEncFileWriteHeader (self->enc);
+    if (rc)
+        LOGERR (klogErr, rc, "re-enc error generating encrypted header");
+    else
+    {
+        /*
+         * assume it worked and its the right size 
+         * copy the requested portion of the header out to finish the read
+         */
+        rc = KReencFileReadHeaderOut (self, pos, buffer, bsize, num_read);
+        if (rc)
+            LOGERR (klogErr, rc, "re-enc error filling read request");
+    }
+    return rc;
+}
+
+
+/*
+ * Read the requested block form the source encrypted file
+ */
+static
+rc_t KReencFileReadABlock (KReencFile * self, uint64_t block_id)
+{
+    rc_t rc;
+
+
+/*     OUTMSG (("%s: block_id %lu\n",__func__,block_id)); */
+
+    if (block_id + 1 == self->footer_block)
+        memset (self->plain_text, 0, sizeof self->plain_text);
+
+    /* -----
+     * simple call down to the decryptor to get the plain text data
+     * for this block. We will regenerate the framing when we re-encrypt
+     */
+    rc = KFileReadAll (self->dec, BlockId_to_DecryptedPos (block_id),
+                       &self->plain_text, sizeof (self->plain_text),
+                       &self->num_read);
+    if (rc)
+        LOGERR (klogErr, rc, "re-enc error reading a block");
+
+    /*
+     * interpret bytes read for validity
+     *
+     * zero means we hit a premature end of file where we expected a block
+     */
+    else if (self->num_read == 0)
+    {
+        /*misleading RC? */
+        rc = RC (rcKrypto, rcFile, rcReading, rcSize, rcInsufficient);
+        LOGERR (klogErr, rc, "re-enc no block read");
+    }
+    /*
+     * less than a full block must be in the last block
+     */
+    else if (self->num_read < sizeof self->plain_text)
+    {
+/*         KOutMsg ("%s: block_id '%lu'num_read '%zu' of '%zu' last_block '%lu'\n", */
+/*                  __func__, block_id, self->num_read, sizeof self->plain_text, */
+/*                  self->footer_block); */
+
+        if (block_id + 1 != self->footer_block)
+        {
+            rc = RC (rcKrypto, rcFile, rcReading, rcSize, rcInsufficient);
+            LOGERR (klogErr, rc, "re-enc incomplete block read");
+        }
+    }
+    /*
+     * unlikely scenario, read too much
+     */
+    else if (self->num_read > sizeof self->plain_text)
+    {
+        rc = RC (rcKrypto, rcFile, rcReading, rcBuffer, rcIncorrect);
+        LOGERR (klogErr, rc, "re-enc no block read");
+    }
+    if (rc == 0)
+        self->block_id = block_id;
+    return rc;
+}
+
+
+static
+rc_t KReencFileWriteABlock (KReencFile * self, uint64_t block_id)
+{
+    rc_t rc;
+
+    /* -----
+     * simple call to encrypt an entire data section for the relevant block
+     * We send in up to 32KB of plain text which through two element KFiles will
+     * we written into a buffer back in this KFile. More data will be written
+     * to that buffer than requested here - that is the framing and also the
+     * header if the block is the first one.
+     */
+    rc = KFileWriteAll (self->enc, BlockId_to_DecryptedPos (block_id),
+                         self->plain_text, self->num_read, &self->num_writ);
+
+    if (rc)
+        LOGERR (klogInt, rc, "re-enc error encrypting a block");
+
+    else if (self->num_writ != self->num_read)
+    {
+        rc = RC (rcKrypto, rcFile, rcWriting, rcFile, rcIncomplete);
+        LOGERR (klogErr, rc, "re-enc failure encrypting all of block");
+    }
+
+    /* trigger a flush */
+/*     if (rc == 0) */
+/*         rc = KFileWriteAll (self->enc, BlockId_to_DecryptedPos (block_id^1), */
+/*                          self->plain_text, self->num_read, &self->num_writ); */
+
+    return rc;
+}
+
+
+/*
+ * Add the current encrypted block to the footer statistics
+ */
+static __inline__
+rc_t KReencFileAddToFooter (KReencFile * self)
+{
+    assert (self);
+/*     KOutMsg ("%s: ",__func__);  */
+
+    if (self->block.block.crc != self->block.block.crc_copy)
+    {
+        rc_t rc = RC (rcKrypto, rcFile, rcReading, rcChecksum, rcInvalid);
+        LOGERR (klogInt, rc, "rc-enc block CRCs disagree");
+        return rc;
+    }
+
+    ++ self->foot.foot.block_count;
+    self->foot.foot.crc_checksum += self->block.block.crc;
+
+/*     KOutMsg ("%lu %lu %lu\n",self->foot.foot.block_count,self->block.block.crc,self->foot.foot.crc_checksum); */
+    return 0;
+}
+
+
+/*
+ * Read a block from the source encrypted block and Write it which reencrypts it
+ *
+ * The new_block parameter says whether this is the first time we've seen this
+ * block. If it is we need to add data to the footer
+ */
+static
+rc_t KReencFileReencBlock (KReencFile * self, uint64_t block_id, bool new_block)
+{
+    rc_t rc;
+
+    assert (self);
+
+/*     KOutMsg ("%s: %lu %lu\n", __func__, block_id, self->footer_block); */
+    assert (block_id < self->footer_block);
+    assert ((new_block == true) || (new_block == false));
+
+
+
+    rc = KReencFileReadABlock (self, block_id);
+    if (rc)
+        LOGERR (klogErr, rc, "re-enc failure to read a block");
+    else
+    {
+        if ((self->num_read == 0) || (self->num_read > sizeof (self->plain_text)))
+        {
+            rc = RC (rcFS, rcFile, rcReading, rcSize, rcIncorrect);
+            LOGERR (klogErr, rc, "Bad length on block read of encrypted file");
+        }
+        else
+        {
+            rc = KReencFileWriteABlock (self, block_id);
+            if (rc)
+                LOGERR (klogErr, rc, "re-enc failure to write a block");
+
+            else if (new_block)
+            {
+                rc = KReencFileAddToFooter (self);
+                if (rc)
+                    LOGERR (klogErr, rc,
+                            "re-enc failure to do block accounting");
+            }
+        }
+    }
+    return rc;
+}
+
+
+/*
+ * Handle Read within the Encrypted file footer
+ */
+static __inline__
+rc_t KReencFileReadHandleFooter (KReencFile *self,
+                                 uint64_t pos,
+                                 void *buffer,
+                                 size_t bsize,
+                                 size_t *num_read)
+{
+    uint64_t block_id;  /* block id for the footer gets us the start of footer */
+    size_t offset;
+    rc_t rc;
+
+/* KOutMsg ("\n\n\n%s: pos '%lu' bsize '%zu'\n",__func__,pos,bsize); */
+
+    assert (self);
+    assert (pos >= sizeof (KEncFileHeader) + sizeof self->block);
+    assert (buffer);
+    assert (bsize);
+    assert (num_read);
+
+    rc = 0;
+    block_id = EncryptedPos_to_BlockId (pos, NULL, NULL);
+
+    /* our library does not allow an empty file to be encrypted
+     * so we call that an error
+     */
+    assert (block_id > 0);
+
+    assert (block_id == self->footer_block);
+
+    offset = pos - BlockId_to_EncryptedPos (block_id);
+
+    assert (offset < sizeof self->foot);
+
+    /* if we are tying to treat this as a footer but it wasn't the next
+     * expected block mark all inbetween as missing to handle in the 
+     * function just below this
+     */
+
+/* KOutMsg ("%s: self->next_block %lu\n",__func__, self->next_block); */
+
+    self->foot.foot.block_count = block_id;
+    self->foot.foot.crc_checksum = 0;
+
+    if (rc == 0)
+    {
+        uint64_t header_pos;
+
+        header_pos = BlockId_to_EncryptedPos(block_id);
+
+        assert (header_pos <= pos);
+        assert (pos - header_pos <= sizeof self->foot);
+
+        rc = KReencFileReadFooterOut (self, (size_t)(pos - header_pos),
+                                      buffer, bsize, num_read);
+
+/*             KOutMsg ("%s: footer '%lu' '%lx'\n",__func__, */
+/*                      self->foot.foot.block_count, */
+/*                      self->foot.foot.crc_checksum); */
+
+        if (rc)
+            LOGERR (klogInt, rc, "re-enc failed to output footer");
+    }
+    return rc;
+}
+
+
+/*
+ *
+ */
+static
+rc_t KReencFileReadHandleBlock (KReencFile *self,
+                                uint64_t pos,
+                                void *buffer,
+                                size_t bsize,
+                                size_t *num_read)
+{ 
+    rc_t rc = 0;            /* we have a path where we need to check this without set */
+    uint64_t block_id;      /* block id for the requeted position */
+    uint32_t offset;        /* how far into the encrypted block */
+    bool new_block;         /* is this the first time for this block */
+
+    /* -----
+     * figure out what block this corresponds to. 
+     * the header is for this purpose part of the first block
+     * when we decide what to give the reader. We only care
+     * about which block and not whether it is in the payload
+     * or framing.
+     * This block id is not to a known to exist block. It could be 
+     * to the header, the footer or past the end of the file.
+     *
+     * NOTE: This could be a pre-fetch of the first block when
+     * processing the header - it will have some funny values
+     * with just a self and all other parameters 0s.
+     * pos of zero gives block_id of 0 and the bsize of zero
+     * means we never look at the others. Thi sis to allow the 
+     * (at the time this was written) new feature of two
+     * different file-signatures for encrypted files.
+     */
+    block_id = EncryptedPos_to_BlockId (pos, NULL, NULL);
+
+    if (block_id != self->block_id)
+    {
+        new_block = true;
+
+        if (rc == 0)
+        {
+            /* read requested block */
+            rc = KReencFileReencBlock (self, block_id, new_block);
+            if (rc)
+            {
+                LOGERR (klogErr, rc,
+                        "re-enc failure re-encryptinng a requested block");
+            }
+        }
+    }
+    if ((rc == 0) && (bsize > 0))
+    {
+        /* satisfy read request
+         *
+         * if we are here we decrypted and re-encrypted the
+         * expected block
+         */
+        offset = pos - BlockId_to_EncryptedPos (block_id);
+        rc = KReencFileReadBlockOut (self, offset, buffer, bsize, num_read);
+        if (rc)
+            LOGERR (klogErr, rc, "re-enc error copying out from block");
+    }
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Read
+ *  read file from known position
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ *  "num_read" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually read
+ */
+static
+rc_t CC KReencFileReadUnsupported (const KReencFile *self,
+                                   uint64_t pos,
+                                   void *buffer,
+                                   size_t bsize,
+                                   size_t *num_read)
+{
+    assert (self);
+    assert (buffer);
+    assert (bsize);
+    assert (num_read);
+
+    return RC ( rcFS, rcFile, rcReading, rcFunction, rcUnsupported );
+}
+
+
+/*
+ * Read will often return only a partial read.
+ *
+ * We take the less complex route here and return only from the header, a
+ * single block or the footer, whatever is at the beginning of the requested
+ * region.
+ */
+static
+rc_t CC KReencFileRead (const KReencFile *self_,
+                        uint64_t pos,
+                        void *buffer,
+                        size_t bsize,
+                        size_t *num_read)
+{
+    /* make it all mutable and stop using self_ */
+    KReencFile * self = (KReencFile *)self_;
+    rc_t rc = 0;
+
+    assert (self);
+    assert (buffer);
+    assert (bsize);
+    assert (num_read);
+
+    *num_read = 0;
+
+    /* -----
+     * the size of the re-encrypted file will be the same as the size of the
+     * previously encrypted file so we can bail early if we know we can.
+     *
+     * The initial use case is that the file will just be lying out on disk
+     * and a KSysfile so that we do know the size.
+     *
+     * There are three pieces to an encrypted file:
+     * 1 Header
+     * 2 One or More Blocks
+     * 3 Footer
+     *
+     * We will only know if we are in the footer if we already know the size of
+     * the file. Else we have to find the footer by not finding a block when we
+     * try to read it. We'll thus look for the header first, then the footer else
+     * we try to find a block,
+     */
+
+    /* Header */
+    if (pos < sizeof (KEncFileHeader))
+        rc = KReencFileReadHandleHeader (self, pos, buffer, bsize, num_read);
+
+    /* if past the whole encrypted file */
+    else if (pos >= self->size)
+        rc = 0;
+
+    /* Footer */
+    else if (pos >= self->size - sizeof self->foot)
+        rc = KReencFileReadHandleFooter (self, pos, buffer, bsize, num_read);
+
+    /* Blocks */
+    else
+        rc = KReencFileReadHandleBlock (self, pos, buffer, bsize, num_read);
+
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Write
+ *  write file at known position
+ *
+ *  "pos" [ IN ] - starting position within file
+ *  "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ *  "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually written
+ *
+ * Unsupported as we now treat archives as READ ONLY
+ */
+static
+rc_t CC KReencFileWriteUnsupported (KReencFile *self, uint64_t pos,
+                                    const void *buffer, size_t bsize,
+                                    size_t *num_writ)
+{
+    rc_t rc = RC (rcFS, rcFile, rcReading, rcFunction, rcUnsupported);
+
+    assert (self);
+    assert (buffer);
+    assert (bsize);
+    assert (num_writ);
+
+    assert (false);
+
+    LOGERR (klogInt, rc, "KFileRead failed to filter call");
+
+    return rc;
+}
+
+static
+rc_t CC KReencFileWrite (KReencFile *self, uint64_t pos,
+                         const void *buffer, size_t bsize,
+                         size_t *num_writ)
+{
+    assert (self);
+    assert (buffer);
+    assert (bsize);
+    assert (num_writ);
+
+    assert (REENCFILE_WRITE_SUPPORTED);
+
+    /* this needs to be finished before we can support Write open */
+
+    return KReencFileWriteUnsupported (self, pos, buffer, bsize, num_writ);
+}
+
+
+/* ----------------------------------------------------------------------
+ * Type
+ *  returns a KFileDesc
+ *  not intended to be a content type,
+ *  but rather an implementation class
+ */
+static
+uint32_t CC KReencFileType (const KReencFile *self)
+{
+    assert (self != NULL);
+    assert (self->encrypted != NULL);
+
+    return KFileType (self->encrypted);
+}
+
+
+/* ----------------------------------------------------------------------
+ * KReencFileMake
+ *  create a new file object
+ */
+
+
+/* ----------
+ * MakeParamValidate
+ * common parameter validation for both reencryptors
+ */
+static
+rc_t KReencFileMakeParamValidate (const KFile ** pself, const KFile * encrypted, 
+                                  const KKey * deckey, const KKey * enckey)
+{
+    rc_t rc = 0;
+
+    do
+    {
+        if (pself == NULL)
+        {
+            rc = RC (rcFS, rcFile, rcConstructing, rcSelf, rcNull);
+            LOGERR (klogErr, rc,
+                    "pointer to self NULL when creating "
+                    "a re-encryptor");
+            break;
+        }
+
+        *pself = NULL;
+
+        if (encrypted == NULL)
+        {
+            rc = RC (rcFS, rcFile, rcConstructing, rcParam, rcNull);
+            LOGERR (klogErr, rc, 
+                    "encrypted file not supplied when creating "
+                    "an encryptor/decryptor");
+            break;
+        }
+
+        if ((enckey == NULL) || (deckey == NULL))
+        {
+            rc = RC (rcFS, rcFile, rcConstructing, rcParam, rcNull);
+            LOGERR (klogErr, rc, 
+                    "key not supplied when creating a re-encryptor");
+            break;
+        }
+
+        switch (deckey->type)
+        {
+        default:
+            rc = RC (rcFS, rcFile, rcConstructing, rcParam, rcInvalid);
+            PLOGERR (klogErr,
+                     (klogErr, rc, "invalid key type '$(T)' should be "
+                      "kkeyAES128(1), kkeyAES192(2) or kkeyAES256(3)",
+                      "T=%u", deckey->type));
+            break;
+
+        case kkeyAES128:
+        case kkeyAES192:
+        case kkeyAES256:
+            break;
+        }
+        switch (enckey->type)
+        {
+        default:
+            rc = RC (rcFS, rcFile, rcConstructing, rcParam, rcInvalid);
+            PLOGERR (klogErr,
+                     (klogErr, rc, "invalid key type '$(T)' should be "
+                      "kkeyAES128(1), kkeyAES192(2) or kkeyAES256(3)",
+                      "T=%u", enckey->type));
+            break;
+
+        case kkeyAES128:
+        case kkeyAES192:
+        case kkeyAES256:
+            break;
+        }
+    } while (0);
+    return rc;
+}
+
+
+/* ----------
+ * Read mode is fully seekable if the underlying KFile is seekable some
+ * integrity checking will not be performed in allowing this seeking.
+ */
+static const KFile_vt_v1 vtKReencFileRead =
+{
+    /* version */
+    1, 1,
+
+    /* 1.0 */
+    KReencFileDestroy,
+    KReencFileGetSysFileUnsupported,
+    KReencFileRandomAccess,
+    KReencFileSize,
+    KReencFileSetSizeUnsupported,
+    KReencFileRead,
+    KReencFileWriteUnsupported,
+
+    /* 1.1 */
+    KReencFileType
+};
+
+
+LIB_EXPORT rc_t CC KReencFileMakeRead (const KFile ** pself, 
+                                       const KFile * encrypted,
+                                       const KKey * deckey,
+                                       const KKey * enckey)
+{
+    KReencFile * self;
+    uint64_t size;
+    uint64_t block_count;
+    rc_t rc;
+
+    rc = KReencFileMakeParamValidate (pself, encrypted, deckey, enckey);
+    if (rc)
+    {
+        LOGERR (klogErr, rc, "error constructing decryptor");
+        return rc;
+    }
+
+    rc = KFileSize (encrypted, &size);
+    if (GetRCState (rc) == rcUnsupported)
+    {
+        size = 0;
+        rc = RC (rcKrypto, rcFile, rcConstructing, rcSize, rcUnsupported);
+        LOGERR (klogErr, rc, "Can't re-encrypt files that don't support KFileSize");
+        return rc;
+    }
+    
+    if (rc)
+    {
+        LOGERR (klogErr, rc, "Unable to attempt to size encrypted file for reencryption");
+        return rc;
+    }
+
+    rc = KFileAddRef (encrypted);
+    if (rc)
+    {
+        LOGERR (klogErr, rc, "Unable to add reference to encrypted file for re-encryptor");
+        return rc;
+    }
+
+    if (size == 0)
+    {
+        *pself = encrypted;
+        return rc;
+    }
+    if (size < sizeof (KEncFileHeader) + sizeof (KEncFileBlock) + sizeof (KEncFileFooter))
+    {
+        rc = RC (rcKrypto, rcFile, rcConstructing, rcSize, rcTooShort);
+        LOGERR (klogErr, rc, "encrypted file too short to be valied for re-encryption");
+        KFileRelease (encrypted);
+        return rc;
+    }
+
+    {
+        uint64_t temp;
+
+        temp = size - (sizeof (KEncFileHeader) + sizeof (KEncFileFooter));
+        block_count = temp / sizeof (KEncFileBlock);
+        if ((block_count * sizeof (KEncFileBlock)) != temp)
+        {
+            rc = RC (rcKrypto, rcFile, rcConstructing, rcSize, rcInvalid);
+            LOGERR (klogErr, rc, "encrypted file invalid size for re-encryption");
+            KFileRelease (encrypted);
+            return rc;
+        }
+    }
+
+    self = calloc (1,sizeof (*self));
+
+    if (self == NULL)
+    {
+        rc = RC (rcFS, rcFile, rcConstructing, rcMemory, rcExhausted);
+        LOGERR (klogSys, rc,
+                "out of memory creating encrypter and/or decryptor");
+    }
+    else
+    {
+        rc = KFileInit (&self->dad, (const KFile_vt*)&vtKReencFileRead, "KReencFile", "no-name", true, false);
+        if (rc)
+            LOGERR (klogInt, rc, "failed in initialize reenc base class");
+        else
+        {
+            self->encrypted = encrypted;
+            /* dec, enc, ram need to be Make */
+            /* num_read, num_write stay 0 */
+            self->block_id = NO_CURRENT_BLOCK;
+            /* missing needs to be Made */
+            /* next_block stays 0 */
+            /* seek_block stays 0 - obsolete */
+            self->footer_block = EncryptedPos_to_BlockId (size, NULL, NULL);
+            self->size = size;
+            self->known_size = true; /* obsolete */
+            /* plain_text and block stay 0 */
+            self->foot.foot.block_count = self->footer_block;
+
+            rc = KEncFileMakeRead (&self->dec, encrypted, deckey);
+            if (rc)
+                LOGERR (klogErr, rc, "Failed to create re-enc decryptor");
+
+            else
+            {
+                rc = KRamFileMakeUpdate (&self->ram, self->block.text, 
+                                         sizeof self->block.text);
+                if (rc)
+                    LOGERR (klogErr, rc, 
+                            "Failed to create re-enc encryptor");
+                else
+                {
+
+                    rc = KEncFileMakeWriteBlock (&self->enc, self->ram, enckey);
+                    if (rc)
+                        LOGERR (klogErr, rc,
+                                "Failed to create RAM file for reenc");
+                    else
+                    {
+                        *pself = &self->dad;
+                        return 0;
+                    }
+                    KFileRelease (self->ram);
+                }
+                KFileRelease (self->dec);
+            }
+        }
+        free (self);
+    }
+    KFileRelease (encrypted);
+    return rc;
+}
+
+
+static const KFile_vt_v1 vtKEncryptFileRead =
+{
+    /* version */
+    1, 1,
+
+    /* 1.0 */
+    KReencFileDestroy,
+    KReencFileGetSysFileUnsupported,
+    KReencFileRandomAccess,
+    KEncryptFileSize,
+    KReencFileSetSizeUnsupported,
+    KReencFileRead,
+    KReencFileWriteUnsupported,
+
+    /* 1.1 */
+    KReencFileType
+};
+
+
+LIB_EXPORT rc_t CC KEncryptFileMakeRead (const KFile ** pself, 
+                                         const KFile * encrypted,
+                                         const KKey * enckey)
+{
+    KReencFile * self;
+    uint64_t rawsize;
+    uint64_t size;
+    uint64_t max_block;
+    rc_t rc;
+
+    rc = KReencFileMakeParamValidate (pself, encrypted, enckey, enckey);
+    if (rc)
+    {
+        LOGERR (klogErr, rc, "error constructing decryptor");
+        return rc;
+    }
+
+    rc = KFileSize (encrypted, &rawsize);
+    if (GetRCState (rc) == rcUnsupported)
+    {
+        size = 0;
+        rc = RC (rcKrypto, rcFile, rcConstructing, rcSize, rcUnsupported);
+        LOGERR (klogErr, rc, "Can't encrypt files that don't support KFileSize");
+        return rc;
+    }
+    
+    if (rc)
+    {
+        LOGERR (klogErr, rc, "Unable to attempt to size encrypted file for encryption");
+        return rc;
+    }
+
+    rc = KFileAddRef (encrypted);
+    if (rc)
+    {
+        LOGERR (klogErr, rc, "Unable to add reference to unencrypted file for encryptor");
+        return rc;
+    }
+
+    if (rawsize == 0)
+    {
+        *pself = encrypted;
+        return rc;
+    }
+
+    self = calloc (1,sizeof (*self));
+
+    if (self == NULL)
+    {
+        rc = RC (rcFS, rcFile, rcConstructing, rcMemory, rcExhausted);
+        LOGERR (klogSys, rc,
+                "out of memory creating encrypter and/or decryptor");
+    }
+    else
+    {
+        rc = KFileInit (&self->dad, (const KFile_vt*)&vtKEncryptFileRead, "KEncryptFile", "no-path", true, false);
+        if (rc)
+            LOGERR (klogInt, rc, "failed in initialize reenc base class");
+        else
+        {
+            self->encrypted = encrypted;
+            /* dec, enc, ram need to be made below */
+            /* num_read, num_write stay 0 */
+            self->block_id = NO_CURRENT_BLOCK;
+            /* missing needs to be Made */
+            /* next_block stays 0 */
+            /* seek_block stays 0 - obsolete */
+            max_block = DecryptedPos_to_BlockId (rawsize, NULL);
+            self->footer_block = max_block + 1;
+            size = BlockId_to_EncryptedPos (self->footer_block) + sizeof (KEncFileFooter);
+            self->size = size;
+            self->known_size = true; /* obsolete */
+
+            /* plain_text and block stay 0 */
+            self->foot.foot.block_count = self->footer_block;
+
+            rc = KFileAddRef (self->dec = encrypted);
+            if (rc)
+                LOGERR (klogErr, rc, "Unable to add reference to unencrypted file for encryptor");
+
+            else
+            {
+                rc = KRamFileMakeUpdate (&self->ram, self->block.text, 
+                                         sizeof self->block.text);
+                if (rc)
+                    LOGERR (klogErr, rc, 
+                            "Failed to create ram file for encryptor");
+                else
+                {
+                    
+                    rc = KEncFileMakeWriteBlock (&self->enc, self->ram, enckey);
+                    if (rc)
+                        LOGERR (klogErr, rc,
+                                "Failed to create RAM file for enc");
+                    else
+                    {
+                        *pself = &self->dad;
+                        return 0;
+                    }
+                    KFileRelease (self->ram);
+                }
+                KFileRelease (self->dec);
+            }
+        }
+        free (self);
+    }
+    KFileRelease (encrypted);
+    return rc;
+}
+
+
+/* ----------
+ * Write mode re-encrypted file 
+ */
+static const KFile_vt_v1 vtKReencFileWrite =
+{
+    /* version */
+    1, 1,
+
+    /* 1.0 */
+    KReencFileDestroy,
+    KReencFileGetSysFileUnsupported,
+    KReencFileRandomAccess,
+    KReencFileSize,
+    KReencFileSetSizeUnsupported,
+    KReencFileReadUnsupported,
+    KReencFileWrite,
+
+    /* 1.1 */
+    KReencFileType
+};
+
+
+LIB_EXPORT rc_t CC KReencFileMakeWrite (KFile ** pself, 
+                                        KFile * encrypted,
+                                        const KKey * deckey,
+                                        const KKey * enckey)
+{
+#if REENCFILE_WRITE_SUPPORTED
+    KReencFile * self;
+    rc_t rc;
+
+    rc = KFileSetSize (encrypted, 0);
+#if 0
+    if (rc)
+        LOGERR (klogWarn, rc, "error truncating output file - "
+                "corrupted file might result");
+#endif
+
+    rc = KReencFileMakeParamValidate (&self, encrypted, deckey, enckey,
+                                      &vtKEncFileWrite, true);
+    if (rc)
+        LOGERR (klogErr, rc, "error creating encryptor");
+    else
+        *pself = &self->dad;
+    return rc;
+#else
+    return RC ( rcFS, rcFile, rcCreating, rcFunction, rcUnsupported );
+#endif
+}
+
+
+/* end of file reencfile.c */
+
+
diff --git a/libs/krypto/rng-impl.h b/libs/krypto/rng-impl.h
new file mode 100644
index 0000000..04b3418
--- /dev/null
+++ b/libs/krypto/rng-impl.h
@@ -0,0 +1,91 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_kryptoimpl_
+#define _h_kryptoimpl_
+
+#include <klib/rc.h>
+#include <klib/refcount.h>
+#include <atomic.h>
+#include <krypto/rng.h>
+#include "rng-priv.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+
+typedef union KRng_vt KRng_vt;
+
+
+
+
+#ifndef KRNG_IMPL
+#define KRNG_IMPL KRng
+#endif
+
+typedef struct KRng_vt_v1 KRng_vt_v1;
+struct KRng_vt_v1
+{
+    /* version == 1.x */
+    uint32_t maj;
+    uint32_t min;
+
+    /* start minor version == 0 */
+    rc_t (CC * destroy) (KRNG_IMPL * self);
+    rc_t (CC * seed)    (KRNG_IMPL * self);
+    rc_t (CC * reseed)  (KRNG_IMPL * self, const void * buff, size_t buff_size);
+    rc_t (CC * read)    (const KRNG_IMPL *self, void * buff, uint32_t buff_len,
+                         uint32_t * num_read);
+    /* end minor version == 0 */
+    /* start minor version == 1 */
+    /* end minor version == 1 */
+    /* end version == 1.x */
+};
+
+union KRng_vt
+{
+    KRng_vt_v1 v1;
+};
+
+static
+rc_t KRngInit (KRng * self, union KRng_vt * vt, const char * type)
+{
+    self->vt = vt;
+    KRefcountInit (&self->refcount, 1, "KRng", "Init", type);
+    return 0;
+}
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_kryptoimpl_ */
diff --git a/build/STATIC b/libs/krypto/rng-priv.h
similarity index 100%
rename from build/STATIC
rename to libs/krypto/rng-priv.h
diff --git a/libs/krypto/rng.c b/libs/krypto/rng.c
new file mode 100644
index 0000000..f19c4f9
--- /dev/null
+++ b/libs/krypto/rng.c
@@ -0,0 +1,120 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <krypto/extern.h>
+#include <krypto/rng.h>
+#include <krypto/rng-impl.h>
+
+#include <klib/defs.h>
+#include <klib/rc.h>
+#include <klib/refcount.h>
+
+#include <stdlib.h>
+#include <assert.h>
+
+LIB_EXPORT rc_t CC KRngAddRef (const KRng * self)
+{
+    if (self) switch (KRefcountAdd (&self->refcount, "KRng"))
+    {
+    case krefLimit:
+        return RC (rcRuntime, rcNoTarg, rcAttaching, rcRange, rcExcessive);
+    }
+
+    return 0;
+}
+
+
+LIB_EXPORT rc_t CC KRngRelease (const KRng * self)
+{
+    if (self) switch (KRefcountDrop (&self->refcount, "KRng"))
+    {
+    case krefWhack:
+        switch (self->vt->v1.maj)
+        {
+        case 1:
+            return (self->vt->v1.destroy ((KRng*)self));
+        }
+        return RC (rcKrypto, rcRng, rcAccessing, rcSelf, rcBadVersion);
+    }
+    return 0;
+}
+
+
+LIB_EXPORT rc_t CC KRngSeed (KRng * self)
+{
+    if (self == NULL)
+        return RC (rcKrypto, rcRng, rcReading, rcSelf, rcNull);
+
+    switch (self->vt->v1.maj)
+    {
+    case 1:
+        return (self->vt->v1.seed (self));
+    }
+    return RC (rcKrypto, rcRng, rcAccessing, rcSelf, rcBadVersion);
+}
+
+
+LIB_EXPORT rc_t CC KRngReseed (KRng * self, void * buffer, size_t bsize)
+{
+    if (self == NULL)
+        return RC (rcKrypto, rcRng, rcReading, rcSelf, rcNull);
+    if (buffer == NULL)
+        return RC (rcKrypto, rcRng, rcReading, rcBuffer, rcNull);
+
+    switch (self->vt->v1.maj)
+    {
+    case 1:
+        return (self->vt->v1.reseed (self, buffer, bsize));
+    }
+    return RC (rcKrypto, rcRng, rcAccessing, rcSelf, rcBadVersion);
+}
+
+LIB_EXPORT rc_t CC KRngRead (const KRng * self, void * buffer, uint32_t bsize, uint32_t * num_read)
+{
+    if (num_read == NULL)
+        return RC (rcKrypto, rcRng, rcReading, rcParam, rcNull);
+    *num_read = 0;
+    if (self == NULL)
+        return RC (rcKrypto, rcRng, rcReading, rcSelf, rcNull);
+    if (buffer == NULL)
+        return RC (rcKrypto, rcRng, rcReading, rcBuffer, rcNull);
+
+    switch (self->vt->v1.maj)
+    {
+    case 1:
+        return (self->vt->v1.read (self, buffer, bsize, num_read));
+    }
+    return RC (rcKrypto, rcRng, rcAccessing, rcSelf, rcBadVersion);
+}
+
+LIB_EXPORT rc_t CC KRngInit (KRng * self, union KRng_vt * vt, const char * type)
+{
+    self->vt = vt;
+    KRefcountInit (&self->refcount, 1, "KRng", "Init", type);
+    return 0;
+}
+
+    
diff --git a/libs/krypto/testcipher.c b/libs/krypto/testcipher.c
new file mode 100644
index 0000000..d23257f
--- /dev/null
+++ b/libs/krypto/testcipher.c
@@ -0,0 +1,76 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+#include <krypto/extern.h>
+#include <klib/defs.h>
+
+#include <krypto/cipher-test.h>
+#include "cipher-priv.h"
+#include <klib/rc.h>
+
+
+KRYPTO_EXTERN
+rc_t KCipherTestVecAesNiMake (struct KCipher ** new_cipher, kcipher_type type)
+{
+    if (new_cipher == NULL)
+        return RC (rcKrypto, rcCipher, rcConstructing, rcSelf, rcNull);
+
+    else
+        return KCipherVecAesNiMake (new_cipher, type);
+}
+
+
+KRYPTO_EXTERN
+rc_t KCipherTestVecRegMake   (struct KCipher ** new_cipher, kcipher_type type)
+{
+    if (new_cipher == NULL)
+        return RC (rcKrypto, rcCipher, rcConstructing, rcSelf, rcNull);
+
+    else
+        return KCipherVecRegMake (new_cipher, type);
+}
+
+
+KRYPTO_EXTERN
+rc_t KCipherTestVecMake      (struct KCipher ** new_cipher, kcipher_type type)
+{
+    if (new_cipher == NULL)
+        return RC (rcKrypto, rcCipher, rcConstructing, rcSelf, rcNull);
+
+    else
+        return KCipherVecMake (new_cipher, type);
+}
+
+
+KRYPTO_EXTERN
+rc_t KCipherTestByteMake     (struct KCipher ** new_cipher, kcipher_type type)
+{
+    if (new_cipher == NULL)
+        return RC (rcKrypto, rcCipher, rcConstructing, rcSelf, rcNull);
+
+    else
+        return KCipherByteMake (new_cipher, type);
+}
+
+
diff --git a/libs/krypto/wgaencrypt.c b/libs/krypto/wgaencrypt.c
new file mode 100644
index 0000000..5844ca9
--- /dev/null
+++ b/libs/krypto/wgaencrypt.c
@@ -0,0 +1,1254 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ */
+
+#include <krypto/extern.h>
+#include <krypto/cipher.h>
+#include <krypto/ciphermgr.h>
+
+#include <krypto/wgaencrypt.h>
+
+#include <kfs/file.h>
+#include <kfs/countfile.h>
+#include <kfs/md5.h>
+#include <kfs/buffile.h>
+#include <kfs/nullfile.h>
+
+#include <klib/printf.h>
+#include <klib/rc.h>
+#include <klib/text.h>
+#include <klib/checksum.h>
+#include <klib/log.h>
+#include <klib/debug.h>
+
+#include <sysalloc.h>
+
+#include <strtol.h>
+
+#include <time.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include <os-native.h> /* strncasecmp on Windows */
+
+/* retain errors in encryption to be compatible with C++ */
+#define RETAINED_COMPATIBILTY_WITH_ERROR 1
+
+
+#define WGA_AES_BITS (256)
+#define ECB_BYTES (16)
+#define DEFAULT_BUFF_SIZE       (32*1024)
+
+
+#define DEBUG_STS(msg)     DBGMSG(DBG_KRYPTO,DBG_FLAG(DBG_KRYPTO_STS),msg)
+#define DEBUG_CFG(msg)     DBGMSG(DBG_KRYPTO,DBG_FLAG(DBG_KRYPTO_CFG_,msg)
+#define DEBUG_ENCRYPT(msg) DBGMSG(DBG_KRYPTO,DBG_FLAG(DBG_KRYPTO_ENCRYPT_,msg)
+#define DEBUG_DECRYPT(msg) DBGMSG(DBG_KRYPTO,DBG_FLAG(DBG_KRYPTO_DECRYPT_,msg)
+
+static
+void CalcMD5 (void * buffer, size_t size, char hexstr [32])
+{
+    static const char to_hex[16] = "0123456789abcdef";
+    MD5State state;
+    uint8_t digest [16];
+    uint8_t * bin;
+    char * hex;
+    int ix;
+
+    MD5StateInit (&state);
+    MD5StateAppend (&state, buffer, size);
+    MD5StateFinish (&state, digest);
+
+    bin = digest;
+    hex = hexstr;
+
+    for (ix = 0; ix < sizeof digest; ++ix)
+    {
+        uint8_t upper;
+        uint8_t lower;
+
+        upper = *bin++;
+        lower = upper & 0xF;
+        upper >>= 4;
+
+        *hex++ = to_hex [upper];
+        *hex++ = to_hex[lower];
+    }
+}
+
+
+/* ----------------------------------------------------------------------
+ * KWGAEncFileMagic is extracted from 
+ *      internal/WGA/access_countrol/src/wga/fuse/enc_reader.[ch]pp
+ * 
+ * the size 9 is not commented on but appears to be the size of ASCIZ
+ * that is the 'magic' pattern including the NUL.
+ *
+ * There is no version number in the header and that NUL could be turned
+ * into a single byte version.
+ */
+typedef char KWGAEncFileMagic [9];
+static const KWGAEncFileMagic ncbi_crypt_magic = "NeCnBcIo";
+
+/* ----------------------------------------------------------------------
+ * Some values are stored in the encrypted file header using an odd radix 33
+ */
+#define KWGA_ENC_FILE_HEADER_RADIX      (33)
+
+static
+const char KWGAEncFileHeaderAlphabet[] = "0123456789abcdefghijklmnopqrstuvwxyz";
+
+
+/* ----------------------------------------------------------------------
+ * KWGAEncFileHeader is extracted from 
+ *      internal/WGA/access_countrol/src/wga/fuse/enc_reader.[ch]pp
+ *
+ * There is no version number in this header; see the comment about KWGAEncFileMagic
+ */
+typedef uint8_t FER_ENCODING;
+enum
+{
+    fer_encDES,
+    fer_encBLF,
+    fer_encAES
+};
+
+typedef struct KWGAEncFileHeader
+{
+    char magic [9];     /* "NeCnBcIo" -- NUL could be turned into a version */          /* 00 */
+    char block_sz [8];  /* radixx33 encoded: block size in bytes / usually 4096  */     /* 09 */
+    char file_sz [16];  /* radixx33 encoded: total size of unencrypted file */          /* 11 */
+    char mtime [8];     /* radixx33 encoded: 32 bit time_t  */                          /* 21 */
+    char fer_enc;       /* see FER_ENCODING */                                          /* 29 */
+    char md5_here;      /* bool if non zero, the whole file MD5 is below */             /* 2A */
+    char md5 [32];      /* whole file MD5 is ASCII hex */                               /* 2B */
+    char md51 [32];     /* first block MD5 */                                           /* 4B */
+    char reserved [21];                                                                 /* 6B */
+} KWGAEncFileHeader;                                                                    /* 80 */
+
+/* Original definition is in internal/WGA/access_countrol/src/wga/fuse/enc_reader.hpp */
+static const int8_t header_table[sizeof (KWGAEncFileHeader)] =
+{
+    101,  -6,   -23,  5,    -93,  20,   -128, -36,      /* 00 */
+    -42,  74,   -98,  104,  42,   12,   127,  37,       /* 08 */
+    -47,  -61,  124,  54,   -124, -94,  47,   72,       /* 10 */
+    70,   17,   -10,  108,  8,    31,   37,   -38,      /* 18 */
+    104,  -6,   -117, 79,   115,  89,   33,   -93,      /* 20 */
+    -47,  -105, -87,  -38,  90,   -45,  -59,  -46,      /* 28 */
+    -96,  106,  15,   -87,  -110, -101, 106,  -117,     /* 30 */
+    39,   73,   120,  -30,  -63,  21,   127,  -32,      /* 38 */
+    98,   -104, -3,   -81,  -60,  -120, 13,   -108,     /* 40 */
+    -53,  88,   123,  7,    103,  32,   -14,  -113,     /* 48 */
+    -68,  -27,  44,   109,  -122, -7,   81,   -13,      /* 50 */
+    64,   42,   -88,  -37,  -1,   -19,  66,   -105,     /* 58 */
+    -75,  -108, -5,   -121, -86,  47,   -120, -18,      /* 60 */
+    -69,  -29,  -68,  124,  -53,  -104, -28,  42,       /* 68 */
+    120,  52,   -80,  -23,  -110, -101, 106,  -117,     /* 70 */
+    -21,  -35,  12,   -117, 9,    -122, -21,  31        /* 78 */
+};                                                      /* 80 */
+
+static const KWGAEncFileHeader header_const =
+{
+    "NeCnBcIo", /* NUL terminator is significant */
+    {0},{0},{0},/* not constant */
+    fer_encAES, /* constant as DES and Blowfish are not implmented */
+    0,{0},{0},  /* not constant */
+    {0}         /* constant */
+};
+
+/* the header is obscured by XOR against a predefined pattern */
+static
+void KWGAEncFileHeaderDecrypt (KWGAEncFileHeader * header)
+{
+    size_t ix;
+    int8_t * p = (int8_t*)header;
+
+    assert (header);
+    for (ix = 0; ix < sizeof (*header); ++ix)
+        p[ix] ^= header_table[ix];
+}
+
+KRYPTO_EXTERN rc_t CC KFileIsWGAEnc (const void * buffer, size_t buffer_size)
+{
+    const uint8_t * ph;
+    const uint8_t * pt;
+    const uint8_t * pb;
+    int ix;
+    int lim;
+
+    if ((buffer == NULL) || (buffer_size == 0))
+        return RC  (rcFS, rcFile, rcIdentifying, rcParam, rcNull); 
+
+    /* bare minimum size to identify we decide is the first 8 
+     * obsfucated ASCII bytes */
+
+    if (buffer_size < (sizeof (header_const.magic) - 1))
+        return RC (rcFS, rcFile, rcIdentifying, rcBuffer, rcInsufficient); 
+
+    /* a match is ph[X] ^ pt[X] == pb[X] at specially identified points
+     * we could have put the ^ into a constant for a tad faster operation
+     * but meh...
+     */
+    ph = (const uint8_t*)&header_const;
+    pt = (const uint8_t*)&header_table;
+    pb = (const uint8_t*)buffer;
+
+    ix = offsetof (struct KWGAEncFileHeader, magic);
+    lim = ix + sizeof (header_const.magic);
+    if (lim > buffer_size)
+        lim = buffer_size;
+    for (; (ix < lim) && (ix < buffer_size); ++ix)
+        if ((ph[ix] ^ pt[ix]) != pb[ix])
+            return RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType); 
+
+    if (buffer_size < offsetof (struct KWGAEncFileHeader, fer_enc))
+        return 0;
+
+    if ((ph[offsetof (struct KWGAEncFileHeader, fer_enc)] ^ pt[offsetof (struct KWGAEncFileHeader, fer_enc)])
+        != pb[offsetof (struct KWGAEncFileHeader, fer_enc)])
+        return RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType); 
+
+
+    ix = offsetof (struct KWGAEncFileHeader, reserved);
+    if (buffer_size < ix)
+        return 0;
+
+    lim = ix + sizeof (header_const.reserved);
+
+    if (lim > buffer_size)
+        lim = buffer_size;
+    
+    for (; ix < lim; ++ix)
+        if ((ph[ix] ^ pt[ix]) != pb[ix])
+            return RC (rcFS, rcFile, rcIdentifying, rcFile, rcWrongType);
+
+    return 0;
+}
+
+
+
+
+
+
+/* ======================================================================
+ * KWGAEncFile
+ */
+
+/* -----
+ * define the specific types to be used in the templatish/inheritancish
+ * definition of vtables and their elements
+ */
+typedef struct KWGAEncFile KWGAEncFile;
+#define KFILE_IMPL struct KWGAEncFile
+
+#include <kfs/impl.h>
+
+struct KWGAEncFile
+{
+    KFile dad;                  /* base class */
+    const KFile * encrypted;    /* encrypted file as a read only KFile */
+    uint64_t file_size;         /* as read from the encrypted file header */
+    KTime_t mtime;              /* as read from the encrypted file header */
+    uint32_t block_size;        /* block size is in KB  not bytes */
+    KCipher * cipher;
+
+    char inkey [32];
+    size_t inkey_size;
+
+    bool md5_here;              /* was the md5 in the header? */
+    char md5[32];            /* external md5 loaded into the header as ASCII hex */
+    char md51[32];           /* md5 of first block loaded into the header as ASCII hex */
+    struct
+    {
+        uint64_t  offset;       /* position with in the unencrypted file */
+        uint32_t  valid;        /* how much usable at data */
+        uint8_t   data [DEFAULT_BUFF_SIZE];
+    } buffer;
+};
+
+
+/* ----------------------------------------------------------------------
+ * InitKey
+ *
+ * This method mimics the prepare_key method in the WGA C++ code including
+ * what looks like programming errors.
+ *
+ * The goal is compatibility not 'correctness'.
+ */
+static
+rc_t KWGAEncFileKeyInit (KWGAEncFile * self, const char * key, size_t key_size)
+{
+    rc_t rc;
+    char g_key [32];  /* original used 513 but no key uses that much */
+
+    /* scary! */
+    /* this is copied directly from enc_read.cpp with all the 'possibly wrong' code */
+    memset (g_key, 0, sizeof g_key);
+    if (key_size > sizeof (g_key))
+        key_size = sizeof (g_key);
+    memcpy (g_key, key, key_size);
+
+    if (key_size < 16) /* even though g_key and some cipher keys are larger than 16 */
+    {
+        int jx, ix;
+        for ((jx = key_size),(ix = 0); jx < 16; ++jx, ++ix)
+        {
+            g_key[jx] = self->md51[ix] | g_key[ix%(jx?jx:1)];    /* cringe? */
+        }
+    }
+
+    /* okay we'll use 32 bytes from g_key though is is highly
+     * likely we've only got 16 non-zero bytes */
+     rc = KCipherSetDecryptKey (self->cipher, g_key, WGA_AES_BITS/8);
+
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Destroy
+ *
+ */
+static
+rc_t CC KWGAEncFileDestroyRead (KWGAEncFile *self)
+{
+    rc_t rc = 0;
+
+    if (self)
+    {
+        rc = KFileRelease (self->encrypted);
+        free (self);
+    }
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * GetSysFile
+ *  returns an underlying system file object
+ *  and starting offset to contiguous region
+ *  suitable for memory mapping, or NULL if
+ *  no such file is available.
+ *
+ * We do not allow this for read, write or update as you can not memory map the 
+ * unencrypted file in a meaningful way.
+ */
+static
+struct KSysFile *CC KWGAEncFileGetSysFile (const KWGAEncFile *self, uint64_t *offset)
+{
+    assert (self);
+    assert (offset);
+    return NULL;
+}
+
+
+/* ----------------------------------------------------------------------
+ * RandomAccess
+ *
+ *  returns 0 if random access, error code otherwise
+ */
+static
+rc_t CC KWGAEncFileRandomAccess (const KWGAEncFile *self)
+{
+    assert (self != NULL);
+    assert (self->encrypted != NULL);
+    return KFileRandomAccess (self->encrypted);
+}
+
+
+/* ----------------------------------------------------------------------
+ * Size
+ *  returns size in bytes of file
+ *
+ *  "size" [ OUT ] - return parameter for file size
+ */
+static
+rc_t CC KWGAEncFileSize (const KWGAEncFile *self, uint64_t *size)
+{
+    uint64_t esize;
+    rc_t rc;
+    assert (self != NULL);
+    assert (self->encrypted != NULL);
+    assert (size != NULL);
+
+    *size = 0;
+    rc = KFileSize (self->encrypted, &esize);
+    if (rc == 0)
+        *size = esize - sizeof (KWGAEncFileHeader);
+    return rc;
+}
+
+
+/* ----------------------------------------------------------------------
+ * SetSize
+ *  sets size in bytes of file
+ *
+ *  "size" [ IN ] - new file size
+ */
+static
+rc_t CC KWGAEncFileSetSize (KWGAEncFile *self, uint64_t size)
+{
+    assert (self);
+
+    return RC ( rcFS, rcFile, rcUpdating, rcFunction, rcUnsupported );
+}
+
+
+/* ----------------------------------------------------------------------
+ * Read
+ *  read file from known position
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ OUT ] and "bsize" [ IN ] - return buffer for read
+ *
+ *  "num_read" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually read
+ */
+
+/* local fill the buffer with block or more  */
+static
+rc_t KWGAEncFileReadInt (KWGAEncFile * self, uint64_t pos, size_t bsize)
+{
+    uint64_t adjpos;
+    size_t tot_read;
+    size_t num_read;
+    rc_t rc = 0;
+
+    assert (self);
+    assert (bsize);
+    assert (bsize <= 32 * 1024);
+    assert (128%16 == 0);
+
+    memset (self->buffer.data, 0, sizeof self->buffer.data);
+    tot_read = num_read = 0;
+    adjpos = pos + sizeof (KWGAEncFileHeader);
+#if 0
+    do
+    {
+        rc = KFileRead (self->encrypted, adjpos + tot_read,
+                        self->buffer.data + tot_read, bsize - tot_read,
+                        &num_read);
+        if (rc)
+            return rc;        
+        tot_read += num_read;
+    } while ((tot_read < bsize) && (num_read > 0));
+#else
+    rc = KFileReadAll (self->encrypted, adjpos, self->buffer.data, bsize,
+                       &tot_read);
+#endif
+    self->buffer.offset = pos;
+    self->buffer.valid = tot_read;
+
+    if (tot_read & 15)
+        rc = RC (rcKrypto, rcFile, rcReading, rcSize, rcInsufficient);
+    else if (tot_read > 0)
+    {
+#if 1
+
+#if RETAINED_COMPATIBILTY_WITH_ERROR
+        KCipherDecryptECB (self->cipher, self->buffer.data, self->buffer.data,
+                           (tot_read / ECB_BYTES));
+#else
+/* Well this is wrong for even being wrong now */
+        KCipherDecryptECB (self->cipher, self->buffer.data, self->buffer.data,
+                           tot_read);
+#endif
+
+#else
+        uint32_t count;
+        uint32_t ix;
+
+        /* this loop can be replaced by the KCipherDecryptECB
+         * with care taken to match the error in the original
+         * C++
+         */
+
+#if RETAINED_COMPATIBILTY_WITH_ERROR
+        count = tot_read / ECB_BYTES;
+#else
+        /* do all full 16 byte blocks plus a last partial block */
+        count = (tot_read + (ECB_BYTES-1)) / ECB_BYTES;
+#endif
+        for (ix = 0; ix < count; ++ix)
+        {
+            uint8_t * pb = self->buffer.data + (ix * ECB_BYTES);
+
+            rc = KCipherDecrypt (self->cipher, pb, pb);
+            if (rc)
+                break;
+        }
+#endif
+    }
+    return rc;
+}
+
+
+static
+rc_t CC KWGAEncFileRead	(const KWGAEncFile *cself,
+                         uint64_t pos,
+                         void *buffer,
+                         size_t bsize,
+                         size_t *num_read)
+{
+    KWGAEncFile * self = (KWGAEncFile *)cself; /* mutable values */
+    rc_t rc = 0;
+
+    assert (cself);
+    assert (buffer);
+    assert (num_read);
+
+
+    *num_read = 0;
+
+    /* are we even within the file? If not just say no. Drugs are bad Mmmkay */
+    if (pos >= self->file_size)
+    {}
+    /* are we not reading from out what is already in the decrypted buffer space? */
+    else
+    {
+        if ((self->buffer.valid == 0) ||
+            (pos < self->buffer.offset) ||
+            (pos >= (self->buffer.offset + self->buffer.valid)))
+        {
+            if (pos < self->block_size) /* we'll be reading from the first 'block' */
+            {
+                rc = KWGAEncFileReadInt (self, 0, self->block_size);
+                if (rc)
+                {
+                    LOGERR (klogErr, rc, "error reading first data block of"
+                            " encrypted file");
+                    return rc;
+                }
+                if (self->buffer.valid > self->block_size)
+                {
+                    rc = RC (rcFS, rcFile, rcReading, rcBuffer, rcTooBig);
+                    LOGERR (klogInt, rc, "read wrong amount for first block");
+                    return rc;
+                }
+                else
+                {
+                    size_t md5_size;
+                    size_t nudge = 0;
+                    char md51_comp [32];
+
+                    if (self->buffer.valid & (ECB_BYTES-1))
+                        nudge = ECB_BYTES - (self->buffer.valid & (ECB_BYTES-1));
+                    if (nudge)
+                        memset (self->buffer.data + self->buffer.valid, 0, nudge);
+
+                    md5_size = self->buffer.valid + nudge;
+
+                    CalcMD5 (self->buffer.data, md5_size, md51_comp);
+
+#if 1
+                    if (strcase_cmp (self->md51, string_size(self->md51),
+                                     md51_comp, string_size(md51_comp), 32) != 0)
+#else
+                    if (strncasecmp (self->md51, md51_comp, 32) != 0)
+#endif
+                    {
+                        rc = RC (rcFS, rcFile, rcReading, rcConstraint, rcCorrupt);
+                        LOGERR (klogErr, rc, "MD5 does not match in decryption");
+                        return rc;
+                    }
+                }
+            }
+            else /* if (pos >= self->block_size) */
+            {
+                rc = KWGAEncFileReadInt (self, (pos & ~ ( uint64_t ) (16-1)),
+                                         DEFAULT_BUFF_SIZE);
+                if (rc)
+                {
+                    LOGERR (klogErr, rc, "error reading data block of"
+                            " encrypted file");
+                    return rc;
+                }
+            }  /* if (pos < self->block_size) */
+        } /* if ((self->buffer.valid == 0) || etc. */
+        /* if here we have a valid buffer and it contains the start pos requested */
+/*     assert (pos >= self->buffer.offset); */
+/*     assert (pos < (self->buffer.offset +self->buffer.valid)); */
+        {
+            size_t start;
+            size_t limit;
+
+            /* find offset of start for copy within the buffer */
+            start = (size_t)(pos - self->buffer.offset);
+            /* how many bytes available starting here */
+            limit = self->buffer.valid - start;
+
+            if (pos + limit > self->file_size)
+                limit = self->file_size - pos;
+
+            /* are we asking to read more than we have? is so trim the request */
+            if (limit < bsize)
+                bsize = limit;
+
+            memmove (buffer, self->buffer.data + start, bsize);
+            *num_read = bsize;
+        }
+    }
+    return 0;
+}
+
+
+/* ----------------------------------------------------------------------
+ * Write
+ *  write file at known position
+ *
+ *  "pos" [ IN ] - starting position within file
+ *
+ *  "buffer" [ IN ] and "size" [ IN ] - data to be written
+ *
+ *  "num_writ" [ OUT, NULL OKAY ] - optional return parameter
+ *  giving number of bytes actually written
+ *
+ * Unsupported as we now treat archives as READ ONLY
+ */
+static
+rc_t CC KWGAEncFileWriteFail (KWGAEncFile *self, uint64_t pos,
+                              const void *buffer, size_t bsize,
+                              size_t *num_writ)
+{
+    assert (self);
+    return RC (rcFS, rcFile, rcReading, rcFunction, rcUnsupported);
+}
+
+
+/* ----------------------------------------------------------------------
+ * Type
+ *  returns a KFileDesc
+ *  not intended to be a content type,
+ *  but rather an implementation class
+ */
+static
+uint32_t CC KWGAEncFileType (const KWGAEncFile *self)
+{
+    assert (self != NULL);
+    assert (self->encrypted != NULL);
+
+    return KFileType (self->encrypted);
+}
+
+
+static const KFile_vt_v1 vtKWGAEncFileRead =
+{
+    /* version */
+    1, 1,
+
+    /* 1.0 */
+    KWGAEncFileDestroyRead,
+    KWGAEncFileGetSysFile,
+    KWGAEncFileRandomAccess,
+    KWGAEncFileSize,
+    KWGAEncFileSetSize,
+    KWGAEncFileRead,
+    KWGAEncFileWriteFail,
+
+    /* 1.1 */
+    KWGAEncFileType
+};
+
+
+static
+rc_t KWGAEncFileHeaderRead (KWGAEncFile * self)
+{
+    KWGAEncFileHeader header;
+    uint8_t * pb;
+    size_t num_read;
+    size_t tot_read;
+    rc_t rc;
+
+    assert (self);
+    assert (sizeof (KWGAEncFileHeader) == 128);
+
+
+    DEBUG_STS (("s: Enter '%p'\n", __func__, self));
+    pb = (void*)&header;
+    for (num_read = tot_read = 0; tot_read < sizeof header; )
+    {
+        rc = KFileRead (self->encrypted, (uint64_t)tot_read, pb, 
+                        sizeof (header) - tot_read, &num_read);
+        if (rc)
+        {
+            LOGERR (klogErr, rc, "Error reading the header for an encrypted file");
+            return rc;
+        }
+
+        if (num_read == 0)
+        {
+            rc =  RC (rcFS, rcFile, rcReading, rcFile, rcInsufficient);
+            LOGERR (klogErr, rc, "Header incomplete for an encrypted file");
+            return rc;
+        }
+        tot_read += num_read;
+        pb += num_read;
+    }
+
+    KWGAEncFileHeaderDecrypt (&header);
+
+    if (memcmp (header.magic, ncbi_crypt_magic, sizeof ncbi_crypt_magic) != 0)
+    {
+        rc = RC (rcFS, rcFile, rcReading, rcHeader, rcCorrupt);
+        LOGERR (klogErr, rc, "Header's magic bad for encrypted file");
+        return rc;
+    }
+
+    /* so far unknown legal range */
+    self->block_size = strtou32 (header.block_sz, NULL, KWGA_ENC_FILE_HEADER_RADIX);
+
+    self->file_size = strtou64 (header.file_sz, NULL, KWGA_ENC_FILE_HEADER_RADIX);
+
+    /* file format has limiting feature of a 32 bit timestamp */
+    self->mtime = (KTime_t)strtol (header.mtime, NULL, KWGA_ENC_FILE_HEADER_RADIX);
+
+    switch ((FER_ENCODING)header.fer_enc)
+    {
+    default:
+        rc = RC (rcFS, rcFile, rcReading, rcHeader, rcOutofrange);
+        LOGERR (klogErr, rc, "Enryption type code out of range");
+        return rc;
+    case fer_encDES:
+    case fer_encBLF:
+        rc = RC (rcFS, rcFile, rcReading, rcHeader, rcIncorrect);
+        LOGERR (klogErr, rc, "Enryption type code not supported");
+        return rc;
+    case fer_encAES:
+        break;
+    }
+
+    self->md5_here = (header.md5_here != 0);
+
+    if (self->md5_here)
+        memcpy (self->md5, header.md5, sizeof (self->md5));
+
+    memcpy (self->md51, header.md51, sizeof (self->md51));
+
+    return 0; /* yeah not really checking later errors am i? */
+}
+
+/* ----------------------------------------------------------------------
+ * KWGAEncFileMake
+ *  create a new file object
+ *
+ * pself        where to put pointer to new object
+ * encrypted    a readable file that is encrypted
+ * cipher       a cipher object that must support AES with 256 bit key
+ *              not verified except through failure to decrypt a file
+ * key          bytes containing the user key - should be utf-8 but with no
+ *              control characters
+ * key_size     how many bytes to use from the key 
+ */
+/* read only version for decrypting of existing files */
+KRYPTO_EXTERN rc_t CC KFileMakeWGAEncRead (const struct KFile ** pself, 
+                                           const struct KFile * encrypted,
+                                           const char * key,
+                                           size_t key_size)
+{
+    rc_t rc;
+
+    if (pself == NULL)
+    {
+        rc = RC (rcFS, rcFile, rcConstructing, rcSelf, rcNull);
+        LOGERR (klogErr, rc, "key parameter for WGA encrypted file is empty");
+        return rc;
+    }
+
+    *pself = NULL;
+
+    if ((encrypted == NULL)||(key == NULL))
+    {
+        rc = RC (rcFS, rcFile, rcConstructing, rcParam, rcNull);
+        LOGERR (klogErr, rc, "missing WGA encrypted file passed in to constructor");
+    }
+
+    else if (key_size == 0)
+    {
+        rc = RC (rcFS, rcFile, rcConstructing, rcParam, rcInvalid);
+        LOGERR (klogErr, rc, "missing WGA encrypted file passed in to constructor");
+    }
+
+    else if (encrypted->read_enabled == 0)
+    {
+        rc = RC (rcFS, rcFile, rcConstructing, rcParam, rcIncorrect);
+        LOGERR (klogErr, rc, "encrypted file not readable");
+    }
+    else
+    {
+        KCipherManager * cipher_mgr;
+
+        rc = KCipherManagerMake (&cipher_mgr);
+        if (rc == 0)
+        {
+            KCipher * cipher;
+
+            rc = KCipherManagerMakeCipher (cipher_mgr, &cipher, kcipher_AES);
+            if (rc == 0)
+            {
+                size_t z;
+
+                rc = KCipherBlockSize (cipher, &z);
+                if (rc)
+                {
+                    LOGERR (klogErr, rc, "unable to get block size for WGA "
+                            "encrypted file cipher passed in to constructor");
+                }
+                else
+                {
+                    if (z != ECB_BYTES)
+                    {
+                        rc = RC (rcFS, rcFile, rcConstructing, rcParam,
+                                 rcInvalid);
+                        LOGERR (klogErr, rc, "wrong block size for WGA "
+                                "encrypted file cipher passed in to "
+                                "constructor");
+                    }
+                    else
+                    {
+                        KWGAEncFile * self;
+
+                        self = calloc (sizeof (*self), sizeof (uint8_t));
+                        if (self == NULL)
+                        {
+                            rc = RC (rcFS, rcFile, rcConstructing, rcMemory,
+                                     rcExhausted);
+                            LOGERR (klogErr, rc, "out of memory while "
+                                    "constructing decryptor");
+                        }
+                        else
+                        {
+                            rc = KFileAddRef (encrypted);
+                            if (rc)
+                                LOGERR (klogErr, rc, "unable to add reference "
+                                "to encrypted file");
+                            else
+                            {
+                                /* cast to strip const */
+                                self->encrypted = encrypted;
+                                self->cipher = cipher;
+
+                                /* read the header of the encrypted file for
+                                 * details about the  decrypted file */
+                                DEBUG_STS(("%s: calling KWGAEncFileHeaderRead\n",
+                                           __func__));
+                                rc = KWGAEncFileHeaderRead (self);
+                                if (rc == 0)
+                                {
+                                    /* using the file header's stored encoding
+                                     * key build a key from the parameter key */
+                                    DEBUG_STS(("%s: calling "
+                                               "KWGAEncFileHeaderRead\n",
+                                               __func__));
+                                    rc = KWGAEncFileKeyInit (self, key,
+                                                             key_size);
+                                }
+                                if (rc == 0)
+                                {
+                                    rc = KFileInit (&self->dad, 
+                                                    (const KFile_vt*)
+                                                    &vtKWGAEncFileRead,
+                                                    "KWGAEncFile", "no-name",
+                                                    true, false);
+                                    if (rc)
+                                        LOGERR (klogInt, rc, "Failed to initialize decrypting file");
+                                    else
+                                    {
+                                        *pself = &self->dad;
+                                        self->buffer.offset = 0;
+                                        self->buffer.valid = 0;
+                                        KCipherManagerRelease (cipher_mgr);
+                                        return 0;
+                                    }
+                                }
+                                /* release of encrypted handled in destroy() */
+                            }
+                            KWGAEncFileDestroyRead (self);
+                        }
+                    }
+                }
+                KCipherRelease (cipher);
+            }           
+        }
+    }
+    return rc; 
+}
+
+static __inline__
+rc_t WGAEncValidateHeader (const KWGAEncFileHeader * header,
+                           size_t header_size)
+{
+    rc_t rc = 0;
+    unsigned ix;
+
+    if (header_size != sizeof * header)
+    {
+        rc = RC (rcKrypto, rcFile, rcValidating, rcHeader, rcInsufficient);
+        LOGERR (klogErr, rc, "incomplete header");
+        return rc;
+    }
+
+    if (memcmp (header, &header_const, sizeof header->magic) != 0)
+    {
+        rc = RC (rcKrypto, rcFile, rcValidating, rcHeader, rcInvalid);
+        LOGERR (klogErr, rc, "bad signature in encrypted file header");
+        return rc;
+    }
+
+#if 0
+    /* check block_size */
+    do
+    {
+        for (ix = 0; isspace(header->block_sz[ix]); ++ix)
+            ;
+
+        if (ix >= sizeof (header->block_sz))
+            break;
+
+        if (header->block_sz[ix] == '+')
+            ++ix;
+
+        if (ix >= sizeof (header->block_sz))
+            break;
+
+        for (; (ix < sizeof header->block_sz); ++ix)
+        {
+            if (isdigit (header->block_sz[ix]))
+                ;
+            else if ((header->block_sz[ix] >= 'a') &&
+                     (header->block_sz[ix] <= 'w'))
+                ;
+            else if ((header->block_sz[ix] >= 'A') &&
+                     (header->block_sz[ix] <= 'W'))
+                ;
+            else
+                break;
+        }
+        for (; (ix < sizeof header->block_sz); ++ix)
+        {
+            if (header->block_sz[ix] == '\0')
+                ;
+            else
+                break;
+        }
+        if (rc)
+        
+
+
+        for (ix = 0; ix < sizeof header->block_size; ++ix)
+        {
+            if ()
+                ;
+                }
+        
+            ;
+        else if (header->block_sz[ix] == '-')
+            ;
+        else
+            ;
+    }while (0);
+    /* check file_sz */
+    /* check mtime */
+#endif
+
+    if (header->fer_enc != fer_encAES)
+    {
+        rc = RC (rcKrypto, rcFile, rcValidating, rcHeader, rcInvalid);
+        LOGERR (klogErr, rc, "bad encoding flag in encrypted file header");
+        return rc;
+    }
+
+    if ((header->md5_here != true) && (header->md5_here != false))
+    {
+        rc = RC (rcKrypto, rcFile, rcValidating, rcHeader, rcInvalid);
+        LOGERR (klogErr, rc, "bad checksum flag in encrypted file header");
+        return rc;
+    }
+
+    /* check md5 */
+    /* check md51 */
+
+    for (ix = 0; ix < sizeof header->reserved; ++ix)
+    {
+        if (header->reserved[ix] != 0)
+        {
+            rc = RC (rcKrypto, rcFile, rcValidating, rcHeader, rcInvalid);
+            LOGERR (klogErr, rc, "bad reserved space in encrypted file header");
+            return rc;
+        }
+    }
+
+    return 0;
+}
+
+
+KRYPTO_EXTERN rc_t CC WGAEncValidate (const KFile * encrypted, 
+                                      const char * key,
+                                      size_t key_size)
+{
+    const KFile * buffile;
+    rc_t rc, orc;
+
+    rc = KBufFileMakeRead (&buffile, encrypted, 64*1024);
+    if (rc)
+        LOGERR (klogErr, rc, "unable to buffer encrypted file");
+
+    else
+    {
+        KWGAEncFileHeader header;
+        size_t num_read;
+
+        /* first let's disect the header */
+        rc = KFileReadAll (buffile, 0, &header, sizeof header, &num_read);
+        if (rc)
+            LOGERR (klogErr, rc, "unable to read encrypted file header");
+
+        else
+        {
+            uint64_t file_size;
+            uint64_t header_file_size;
+            char ascii_md5 [32];
+            char header_ascii_md5 [32];
+
+            KWGAEncFileHeaderDecrypt (&header);
+
+            rc = WGAEncValidateHeader (&header, num_read);
+            if (rc)
+                ;
+
+            else
+            {
+                if (key_size == 0)
+                {
+                    const KFile * countfile;
+                    rc = KFileMakeCounterRead (&countfile, encrypted, &file_size, NULL, false);
+                    if (rc)
+                    {
+                        LOGERR (klogErr, rc, "error making file size counter");
+                        file_size = 0;
+                    }
+                    else
+                    {
+                        KFileAddRef (encrypted);
+                        KFileRelease (countfile);
+
+                        file_size -= sizeof header;
+                    }
+                }
+                else
+                {
+                    union
+                    {
+                        const KFile * decrypted;
+                        const KWGAEncFile * decryptor;
+                    } u;
+
+                    rc = KFileMakeWGAEncRead (&u.decrypted, buffile, key, key_size);
+                    if (rc)
+                        LOGERR (klogErr, rc, "error making decryptor");
+
+                    else
+                    {
+                        KFile * nullfile;
+
+                        rc = KFileMakeNullUpdate (&nullfile);
+                        if (rc)
+                            LOGERR (klogInt, rc, "error making data sync");
+
+                        else
+                        {
+                            KMD5SumFmt * fmt;
+                            static const char name[] = "wgaencrypt";
+
+                            rc = KMD5SumFmtMakeUpdate (&fmt, nullfile);
+                            if (rc)
+                            {
+                                LOGERR (klogInt, rc, "error making md5sum database");
+                                KFileRelease (nullfile);
+                            }
+                            else
+                            {
+                                const KFile * md5file;
+
+                                rc = KFileMakeNewMD5Read (&md5file, u.decrypted, fmt, name);
+                                if (rc)
+                                    LOGERR (klogInt, rc, "error making MD5 calculator");
+
+                                else
+                                {
+                                    /*
+                                     * ill mannered md5file steals
+                                     * references instead of adding one
+                                     */
+                                    rc = KFileAddRef (u.decrypted);
+                                    if (rc)
+                                        LOGERR (klogInt, rc, "error adding reference to decryptor");
+
+                                    else
+                                    {
+
+                                        const KFile * countfile;
+                                        rc = KFileMakeCounterRead (&countfile,
+                                                                   md5file,
+                                                                   &file_size, NULL,
+                                                                   true);
+                                        if (rc)
+                                            LOGERR (klogErr, rc,
+                                                    "error making file size "
+                                                    "counter");
+                                        else
+                                        {
+                                            /*
+                                             * ill mannered countfile steals
+                                             * references instead of adding one
+                                             */
+                                            KFileAddRef (md5file);
+                                            rc = KFileRelease (countfile);
+                                        }
+
+                                        orc = KFileRelease (md5file);
+                                    
+                                        if (rc == 0)
+                                            rc = orc;
+
+                                        if (rc == 0)
+                                        {
+                                            uint8_t md5 [16];
+                                            bool bin;
+
+                                            rc = KMD5SumFmtFind (fmt, name, md5, &bin);
+                                            if (rc)
+                                                LOGERR (klogInt, rc, "error locating MD5");
+
+                                            else
+                                            {
+                                                size_t zz;
+                                                unsigned ix;
+                                                for (ix = 0; ix < 16; ++ix)
+                                                {
+                                                    string_printf (&ascii_md5[2*ix], 2, &zz, "%2.2x",
+                                                               (unsigned)(uint8_t)md5[ix]);
+                                                }
+                                                memcpy (header_ascii_md5,
+                                                        u.decryptor->md5,
+                                                        sizeof header_ascii_md5);
+                                            }
+                                        }
+                                    }
+                                }
+                                KMD5SumFmtRelease (fmt);
+                            }
+                        }
+                        KFileRelease (u.decrypted);
+                    }                
+                }
+            }
+            if (rc == 0)
+            {
+                uint64_t sys_file_size;
+                uint64_t pad_file_size;
+                rc_t orc;
+
+                /* ccheck file size */
+
+                orc = KFileSize (encrypted, &sys_file_size);
+                if (orc == 0)
+                {
+                    pad_file_size = file_size + 15;
+                    pad_file_size &= ~ ( uint64_t ) 15;
+                    pad_file_size += sizeof (KWGAEncFileHeader);
+                }
+                header_file_size = strtou64 (header.file_sz, NULL, KWGA_ENC_FILE_HEADER_RADIX);
+
+                if (key_size == 0)
+                {
+                    header_file_size += 15;
+                    header_file_size &= ~ ( uint64_t ) 15;
+                }
+
+                if (file_size < header_file_size)
+                    rc = RC (rcKrypto, rcFile, rcValidating, rcSize, rcInsufficient);
+                
+                else if (file_size > header_file_size)
+                    rc = RC (rcKrypto, rcFile, rcValidating, rcSize, rcExcessive);
+
+                else if ((orc == 0) &&
+                         (sys_file_size > pad_file_size))
+                    rc = RC (rcKrypto, rcFile, rcValidating, rcSize, rcExcessive);
+
+                /* check md5 */
+                else if (!header.md5_here)
+                {
+                    /* rc = RC (rcKrypto, rcFile, rcValidating, rcEncryption, rcNotFound); */
+                }
+                else if (key_size == 0)
+                    rc = RC (rcKrypto, rcFile, rcValidating, rcEncryption, rcNull);
+
+                else
+                {
+                    int cmp;
+
+                    cmp = strcase_cmp (ascii_md5, sizeof ascii_md5, 
+                                       header_ascii_md5, sizeof header_ascii_md5,
+                                       sizeof ascii_md5);
+                    if (cmp)
+                    {
+                        rc = RC (rcKrypto, rcFile, rcValidating, rcChecksum,
+                                 rcInvalid);
+                        LOGERR (klogErr, rc, "Encrypted file MD5 does not match");
+                    }
+                }
+            }
+        }
+        KFileRelease (buffile);
+    }
+    return rc;
+}
+#if 0
+        /* not working as planned */
+        if (rc == 0)
+        {
+            uint32_t this_read;
+
+            /* try to read past size now obtained */
+            do
+            {
+                uint8_t throwaway [8192];
+
+                rc = KFileRead (encrypted, z + sizeof (KWGAEncFileHeader), throwaway, sizeof throwaway,
+                                &this_read);
+                if (rc)
+                {
+                    LOGERR (klogErr, rc, "Error reading file");
+                    break;
+                }
+                z += this_read;
+
+            } while (this_read);
+        }
+#endif
+
+/* end of file wgaencrypt.c */
+
diff --git a/libs/ktst/Makefile b/libs/ktst/Makefile
new file mode 100644
index 0000000..d5474c2
--- /dev/null
+++ b/libs/ktst/Makefile
@@ -0,0 +1,90 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = libs/ktst
+
+INT_LIBS = \
+    libktst
+
+EXT_LIBS = \
+
+ALL_LIBS = \
+	$(INT_LIBS) \
+	$(EXT_LIBS)
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/std
+
+$(INT_LIBS): makedirs
+	@ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_LIBS): makedirs
+	@ $(MAKE_CMD) $(LIBDIR)/$@
+
+.PHONY: all std $(ALL_LIBS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
+	$(addprefix $(LIBDIR)/,$(EXT_LIBS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# testing framework
+#
+$(ILIBDIR)/libktst: $(addprefix $(ILIBDIR)/libktst.,$(LIBX))
+
+TST_SRC = \
+	runprocesstestcase \
+	testenv \
+	testcase \
+	testrunner
+
+TST_OBJ = \
+	$(addsuffix .$(LOBX),$(TST_SRC))
+
+TST_LIB = \
+
+$(ILIBDIR)/libktst.$(LIBX): $(TST_OBJ)
+	$(LP) --slib -o $@ $^ $(TST_LIB)
+
diff --git a/libs/ktst/testcase.cpp b/libs/ktst/testcase.cpp
new file mode 100644
index 0000000..5c0a948
--- /dev/null
+++ b/libs/ktst/testcase.cpp
@@ -0,0 +1,95 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <ktst/unit_test.hpp>
+
+#include <klib/printf.h> 
+
+using namespace ncbi::NK;
+
+TestCase::TestCase(const std::string& name) 
+: _name(name), _ec(0) 
+{
+}
+
+void TestCase::report_error(const char* msg, const char* file, int line, bool is_msg, bool isCritical)
+{
+    ncbi::NK::saveLocation(file, line);
+    ++_ec;
+    LOG(LogLevel::e_error, file << "(" << line << "): ");
+    if (isCritical) 
+    {
+        LOG(LogLevel::e_error, "fatal ");
+    }
+    LOG(LogLevel::e_error, "error in \"" << _name << "\": ");
+    if (is_msg) 
+    {
+        LOG(LogLevel::e_error, msg);
+    }
+    else 
+    {
+        if (isCritical) 
+        {
+            LOG(LogLevel::e_error, "critical ");
+        }
+        LOG(LogLevel::e_error, "check " << msg << " failed");
+    }
+    LOG(LogLevel::e_error, std::endl);
+    if (isCritical)
+    { 
+        throw ncbi::NK::execution_aborted(); 
+    }
+}
+
+void TestCase::report_passed(const char* msg, const char* file, int line) 
+{
+    ncbi::NK::saveLocation(file, line);
+    LOG(LogLevel::e_all, file << "(" << line << "): info: " "check " << msg << " passed" << std::endl);
+}
+
+void TestCase::_REPORT_CRITICAL_ERROR_(const std::string& msg, const char* file, int line, bool is_msg)
+{ 
+    report_error( msg.c_str(), file, line, is_msg, true ); 
+}
+
+void TestCase::report_rc(rc_t rc, const char* callStr, const char* file, int line, int successExpected, bool isCritical)
+{
+    if ((successExpected && rc != 0) || (!successExpected && rc == 0))
+    {
+        const int BufSize=1024;
+        char buf[BufSize];
+        size_t num_writ=0;
+        if (0 == string_printf (buf, BufSize, &num_writ, "Unexpected return code from %s: %R\n", callStr, rc))
+        {
+            report_error(buf, file, line, true, isCritical);
+        }
+        else
+        {
+            report_error("***error message too large to print***", file, line, true, isCritical);
+        }
+    }
+}
+
diff --git a/libs/ktst/testenv.cpp b/libs/ktst/testenv.cpp
new file mode 100644
index 0000000..1ded063
--- /dev/null
+++ b/libs/ktst/testenv.cpp
@@ -0,0 +1,503 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <ktst/unit_test.hpp>
+
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+
+#include <kapp/main.h> // KAppVersion
+#include <kapp/args.h> // ArgsWhack
+#include <klib/out.h> // KOutMsg
+
+#endif
+
+#include <klib/rc.h>
+#include <sstream> 
+#include <csignal>
+#include <cstdlib>
+#include <cstring>
+
+using namespace ::ncbi::NK;
+using std::string;
+
+//const int TestEnv::TEST_CASE_TIMED_OUT=14; //SIGALRM
+//const int TestEnv::TEST_CASE_FAILED=255;
+
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+struct Args* TestEnv::args = 0;
+#endif
+
+TestEnv::TestEnv(int argc, char* argv[], ArgsHandler* argsHandler) 
+    : catch_system_errors(true)
+    , argc2(0)
+    , argv2(NULL)
+{
+    process_args(argc, argv, argsHandler);
+}
+
+TestEnv::~TestEnv ()
+{
+    if (argv2 != NULL) {
+        for (int i = 0; i < argc2; ++i) {
+            free(argv2[i]);
+            argv2[i] = NULL;
+        }
+        free(argv2);
+    }
+
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+    ArgsWhack(args);
+    args = NULL;
+#endif
+}
+
+string TestEnv::lastLocation;
+LogLevel::E TestEnv::verbosity = LogLevel::e_error;
+
+void CC TestEnv::TermHandler() 
+{
+    SigHandler(SIGTERM);
+}
+
+void CC TestEnv::SigHandler(int sig) 
+{
+    switch (sig)
+    {
+        case SIGABRT:
+            LOG(ncbi::NK::LogLevel::e_fatal_error,
+                "fatal error: signal: SIGABRT(Abort call)\n");
+            break;
+        case SIGFPE:
+            LOG(ncbi::NK::LogLevel::e_fatal_error,
+                "fatal error: signal: SIGFPE(Floating point exception)\n");
+            break;
+        case SIGILL:
+            LOG(ncbi::NK::LogLevel::e_fatal_error,
+                "fatal error: signal: SIGILL(Illegal instruction)\n");
+            break;
+        case SIGSEGV:
+            LOG(ncbi::NK::LogLevel::e_fatal_error,
+                "fatal error: signal: SIGSEGV(Segmentation fault)\n");
+            break;
+        default:
+            LOG(ncbi::NK::LogLevel::e_fatal_error,
+                "fatal error: signal: " << sig << "\n");
+            break;
+    }
+    if (!ncbi::NK::TestEnv::lastLocation.empty())
+    {
+        LOG(ncbi::NK::LogLevel::e_fatal_error,
+            ncbi::NK::TestEnv::lastLocation << ": last checkpoint\n");
+    }
+    LOG(ncbi::NK::LogLevel::e_fatal_error, "Test is aborted\n");
+    exit(sig);
+}
+
+
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+
+#define OPTION_DBG "verbose_cmd_line"
+#define ALIAS_DBG "a"
+static const char * dbg_usage[] = { "print command line argument processing information", NULL };
+
+#define OPTION_CSE "catch_system_errors"
+#define ALIAS_CSE "c"
+static const char * cse_usage[] = { "[yes|y|no|n] catch system errors, default is yes", NULL };
+
+#define OPTION_LOG "test_log_level"
+#define ALIAS_LOG "t"
+static const char * log_usage[] = { "test log level, one of:",
+    "'all':       report all log messages",
+    "             including the passed test notification;",
+    "'test_suite': show test suite messages;",
+    "'message':   show user messages",
+    "'warning':   report warnings issued by user;",
+    "'error':     report all error conditions (default);",
+    "'fatal_error': report user or system originated fatal errors",
+    "             (for example, memory access violation);",
+    "'nothing':   do not report any information", NULL };
+
+OptDef Options[] = {
+      { OPTION_DBG, ALIAS_DBG, NULL, dbg_usage, 1, false, false }
+    , { OPTION_CSE, ALIAS_CSE, NULL, cse_usage, 1, true , false }
+    , { OPTION_LOG, ALIAS_LOG, NULL, log_usage, 1, true , false }
+};
+
+#endif
+
+rc_t TestEnv::process_args(int argc, char* argv[], ArgsHandler* argsHandler) 
+{
+    int arg2 = 9;
+    argv2 = static_cast<char**>(calloc(arg2, sizeof *argv2));
+    if (argv2 == NULL)
+    {   return RC (rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted); }
+    argv2[argc2] = strdup(argv[argc2]);
+    if (argv2[argc2] == NULL)
+    {   return RC (rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted); }
+    ++argc2;
+
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+
+    rc_t rc = ArgsMakeAndHandle(&args, argc, argv, 1,
+        Options, sizeof Options / sizeof (OptDef));
+    if (rc)
+    {   return rc; }
+
+    bool debug = false;
+    LogLevel::E detected = LogLevel::e_undefined;
+    do {
+        uint32_t pcount = 0;
+
+        rc = ArgsOptionCount(args, OPTION_DBG, &pcount);
+        if (rc)
+        {   return rc; }
+        if (pcount) {
+            debug = true;
+            LOG(LogLevel::e_nothing, "debug: debug was set to true\n");
+        }
+
+        rc = ArgsOptionCount(args, OPTION_CSE, &pcount);
+        if (rc)
+        {   return rc; }
+        if (pcount) {
+            const char* pc = NULL;
+            rc = ArgsOptionValue(args, OPTION_CSE, 0, &pc);
+            if (rc)
+            {   return rc; }
+            if (!strcmp(pc, "n") || !strcmp(pc, "no")) {
+                catch_system_errors = false;
+                if (debug) {
+                    LOG(LogLevel::e_nothing,
+                       "debug: arg_catch_system_errors was set to false\n");
+                }
+            }
+            else {
+                if (debug) {
+                    LOG(LogLevel::e_nothing,
+                       "debug: arg_catch_system_errors was set to true\n");
+                }
+            }
+        }
+
+        rc = ArgsOptionCount(args, OPTION_LOG, &pcount);
+        if (rc)
+        {   return rc; }
+        if (pcount) {
+            const char* a = NULL;
+            rc = ArgsOptionValue(args, OPTION_LOG, 0, &a);
+            if (rc)
+            {   return rc; }
+            if (!strcmp(a, "test_suite"))
+            { detected = LogLevel::e_test_suite; }
+            else if (strcmp(a, "all"    ) == 0)
+            { detected = LogLevel::e_all; }
+            else if (strcmp(a, "message") == 0)
+            { detected = LogLevel::e_message; }
+            else if (strcmp(a, "warning") == 0)
+            { detected = LogLevel::e_warning; }
+            else if (strcmp(a, "error"  ) == 0)
+            { detected = LogLevel::e_error; }
+            else if (strcmp(a, "nothing") == 0)
+            { detected = LogLevel::e_nothing; }
+            else if (strcmp(a, "fatal_error") == 0)
+            { detected = LogLevel::e_fatal_error; }
+            if (detected != LogLevel::e_undefined) {
+                verbosity = detected;
+                if (debug) {
+                    LOG(LogLevel::e_nothing,
+                        "debug: log_level was set to " << a << std::endl);
+                }
+            }
+            else {
+                verbosity = LogLevel::e_error;
+                if (debug) {
+                    LOG(LogLevel::e_nothing,
+                        "debug: log_level was set to error\n");
+                }
+            }
+        }
+    } while (0);
+
+    if (verbosity == LogLevel::e_undefined) {
+        verbosity = LogLevel::e_error;
+        if (debug) {
+            LOG(LogLevel::e_nothing,
+                "debug: log_level was set to error\n");
+        }
+    }
+#else
+
+    rc_t rc = 0;
+
+    bool debug = false;
+    LogLevel::E detected = LogLevel::e_undefined;
+    char arg_catch_system_errors[] = "-catch_system_errors=";
+    char arg_log_level          [] = "-l=";
+    char arg_app_args           [] = "-app_args=";
+    for (int i = 1; i < argc; ++i)
+    {
+        if (strncmp(argv[i], arg_log_level, strlen(arg_log_level))
+            == 0)
+        {
+            char* a = argv[i] + strlen(arg_log_level);
+            if (strcmp(a, "test_suite") == 0)
+                detected = LogLevel::e_test_suite;
+            else if (strcmp(a, "all"    ) == 0)
+                detected = LogLevel::e_all;
+            else if (strcmp(a, "message") == 0)
+                detected = LogLevel::e_message;
+            else if (strcmp(a, "warning") == 0)
+                detected = LogLevel::e_warning;
+            else if (strcmp(a, "error"  ) == 0)
+                detected = LogLevel::e_error;
+            else if (strcmp(a, "nothing") == 0)
+                detected = LogLevel::e_nothing;
+            else if (strcmp(a, "fatal_error") == 0)
+                detected = LogLevel::e_fatal_error;
+            if (detected != LogLevel::e_undefined)
+            {
+                verbosity = detected;
+                if (debug)
+                {
+                    LOG(LogLevel::e_nothing,
+                        "debug: log_level was set to " << a << std::endl);
+                }
+            }
+            else
+            {
+                verbosity = LogLevel::e_error;
+                if (debug)
+                {
+                    LOG(LogLevel::e_nothing,
+                        "debug: log_level was set to error\n");
+                }
+            }
+        }
+        else if (strncmp(argv[i], arg_catch_system_errors,
+            strlen(arg_catch_system_errors)) == 0)
+        {
+            char* a = argv[i] + strlen(arg_catch_system_errors);
+            if (strcmp(a, "n") == 0 || strcmp(a, "no") == 0)
+            {
+                catch_system_errors = false;
+                if (debug)
+                {
+                    LOG(LogLevel::e_nothing,
+                       "debug: arg_catch_system_errors was set to false\n");
+                }
+            }
+            else
+            {
+                if (debug)
+                {
+                    LOG(LogLevel::e_nothing,
+                       "debug: arg_catch_system_errors was set to true\n");
+                }
+            }
+        }
+        else if (strcmp(argv[i], "-debug") == 0)
+        {
+            debug = true;
+            LOG(LogLevel::e_nothing, "debug: debug was set to true\n");
+        }
+        else if (strcmp(argv[i], "-h") == 0)
+        {
+            if (debug)
+            {
+                LOG(LogLevel::e_nothing, "debug: help was set to true\n");
+            }
+            std::cout << "Usage:\n"
+                      << argv[0]
+                      << " [-debug] [-catch_system_errors=[yes|y|no|n]]\n"
+                         "      [-app_args='<value>'] [-l=<value>] [-h]\n"
+                "where:\n"
+                "debug              - Print recognized command line arguments\n"
+                "                     (should be specified first)\n"
+                "catch_system_errors -  Allows to switch between catching\n"
+                "                     and ignoring system errors (signals)\n"
+                "app_args           - Allows to pass command line arguments\n"
+                "                     to application handler\n"
+                "    (see unit_test.hpp/FIXTURE_TEST_SUITE_WITH_ARGS_HANDLER)\n"
+                "\n"
+                "l (log_level)       - Specifies log level\n"
+                "\tall        - report all log messages\n"
+                "\t             including the passed test notification\n"
+                "\ttest_suite - show test suite messages\n"
+                "\tmessage    - show user messages\n"
+                "\twarning    - report warnings issued by user\n"
+                "\terror      - report all error conditions (default)\n"
+                "\tfatal_error- report user or system originated fatal errors\n"
+                "\t             (for example, memory access violation)\n"
+                "\tnothing    - do not report any information\n"
+                "\n"
+                "h (help)            - this help message\n";
+            exit(0);
+        }
+        else if (strncmp(argv[i], arg_app_args, strlen(arg_app_args)) == 0)
+        {
+            char* a = argv[i] + strlen(arg_app_args);
+            if (debug)
+            {
+                LOG(LogLevel::e_nothing,
+                    string("debug: arg_app_args was detected: ") + a + "\n");
+            }
+            char* pch = strtok(a ," ");
+            while (pch != NULL) {
+                if (argc2 >= arg2) {
+                    arg2 *= 2;
+                    char** tmp = static_cast<char**>(
+                        realloc(argv2, arg2 * sizeof *argv2));
+                    if (tmp == NULL) {
+                        return RC(
+                            rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted);
+                    }
+                    argv2 = tmp;
+                }
+                argv2[argc2] = strdup(pch);
+                if (argv2[argc2] == NULL) {
+                    return RC(
+                        rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted);
+                }
+                ++argc2;
+                pch = strtok(NULL, " ");
+            }
+        }
+    }
+
+    if (verbosity == LogLevel::e_undefined)
+    {
+        verbosity = LogLevel::e_error;
+        if (debug)
+        {
+            LOG(LogLevel::e_nothing,
+                "debug: log_level was set to error\n");
+        }
+    }
+#endif
+
+    if (rc == 0) {
+        if (argsHandler)
+        {	rc = argsHandler(argc2, argv2); }
+    }
+
+    return rc;
+}
+
+void ::ncbi::NK::saveLocation(const char* file, int line) 
+{
+    std::ostringstream s;
+    s << file << "(" << line << ")";
+    TestEnv::lastLocation = s.str();
+}
+
+void ::ncbi::NK::_REPORT_CRITICAL_ERROR_(const string& msg, const char* file, int line, bool is_msg)
+{
+    LOG(ncbi::NK::LogLevel::e_error, file << "(" << line << "): ");
+    LOG(ncbi::NK::LogLevel::e_error, "fatal ");
+    LOG(ncbi::NK::LogLevel::e_error, "error in fixture: ");
+    if (is_msg) {
+        LOG(ncbi::NK::LogLevel::e_error, msg);
+    }
+    else {
+        LOG(ncbi::NK::LogLevel::e_error, "critical ");
+        LOG(ncbi::NK::LogLevel::e_error, "check " << msg << " failed");
+    }
+    LOG(ncbi::NK::LogLevel::e_error, std::endl);
+    throw ncbi::NK::execution_aborted();
+ }
+
+ncbi::NK::TestRunner* 
+ncbi::NK::GetTestSuite(void)
+{ 
+    static ncbi::NK::TestRunner t; 
+    return &t; 
+}
+
+rc_t CC TestEnv::UsageSummary(const char* progname) {
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+    return KOutMsg(
+        "Usage:\n"
+        "  %s [--verbose_cmd_line] [--catch_system_errors [yes|y|no|n]] "
+        "[-t <value>] [-h] [...]\n", progname);
+#else
+    std::cout
+        << "Usage:\n"
+        << progname
+        << " [-debug] [-catch_system_errors=[yes|y|no|n]] "
+        "[-l=<value>] [-h] [...]\n";
+    return 0;
+#endif
+}
+
+#if ALLOW_TESTING_CODE_TO_RELY_UPON_CODE_BEING_TESTED
+rc_t CC TestEnv::Usage(const Args* args)
+{
+    const char* progname = UsageDefaultName;
+    const char* fullpath = UsageDefaultName;
+
+    rc_t rc = (args == NULL) ?
+        RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull):
+        ArgsProgram(args, &fullpath, &progname);
+
+    if (rc != 0)
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary(progname);
+
+    KOutMsg("\nOptions:\n");
+    
+    HelpOptionLine(ALIAS_DBG, OPTION_DBG, NULL, dbg_usage);
+    HelpOptionLine(ALIAS_CSE, OPTION_CSE, NULL, cse_usage);
+    HelpOptionLine(ALIAS_LOG, OPTION_LOG, NULL, log_usage);
+    KOutMsg("\n");
+    HelpOptionsStandard();
+    HelpVersion(fullpath, KAppVersion());
+    
+    return rc;
+}
+#else
+rc_t CC TestEnv::Usage(const char *progname)
+{
+    UsageSummary ( progname );
+    std::cout <<
+        "where:\n"
+        "debug - Print recognized command line arguments (should be specified first)\n"
+        "catch_system_errors - "
+        "Allows to switch between catching and ignoring system errors (signals)\n"
+        "l (log_level) - Specifies log level\n"
+        "\tall        - report all log messages\n"
+        "\t             including the passed test notification\n"
+        "\ttest_suite - show test suite messages\n"
+        "\tmessage    - show user messages\n"
+        "\twarning    - report warnings issued by user\n"
+        "\terror      - report all error conditions (default)\n"
+        "\tfatal_error- report user or system originated fatal errors\n"
+        "\t             (for example, memory access violation)\n"
+        "\tnothing    - do not report any information\n"
+        "h (help) - this help message\n";
+    return 0;
+}
+#endif
diff --git a/libs/ktst/testrunner.cpp b/libs/ktst/testrunner.cpp
new file mode 100644
index 0000000..cb31e16
--- /dev/null
+++ b/libs/ktst/testrunner.cpp
@@ -0,0 +1,77 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <ktst/unit_test.hpp>
+
+using namespace ncbi::NK;
+
+TestRunner::TestRunner() : argc(0), argv(NULL) {}
+
+void TestRunner::ReportTestNumber(void) 
+{
+    T::size_type sz = _cases.size();
+    if (sz == 1) {
+       LOG(LogLevel::e_fatal_error, "Running " << sz << " test case...\n");
+    } else if (sz > 1) {
+       LOG(LogLevel::e_fatal_error, "Running " << sz << " test cases...\n");
+    }
+}
+
+void TestRunner::SetArgs(int argc, char* argv[]) 
+{
+    this->argc = argc;
+    this->argv = argv;
+}
+
+void TestRunner::Add(ncbi::NK::TestInvoker* t) 
+{
+    if (t) 
+    {
+        _cases.push_back(t);
+    }
+}
+
+counter_t TestRunner::Run(void* globalFixture) const 
+{
+    counter_t ec = 0;
+    for (TCI it = _cases.begin(); it != _cases.end(); ++it) 
+    {
+       ncbi::NK::TestInvoker* c = *it;
+       try {
+           LOG(LogLevel::e_test_suite,
+               "Entering test case \"" << c->GetName() << "\"\n");
+           c->Run(globalFixture);
+           LOG(LogLevel::e_test_suite,
+               "Leaving test case \"" << c->GetName() << "\"\n");
+       } catch (const ncbi::NK::execution_aborted&) {
+           LOG(LogLevel::e_test_suite,
+               "Leaving test case \"" << c->GetName() << "\"\n");
+       }
+       ec += c->GetErrorCounter();
+    }
+    return ec;
+}
+
diff --git a/libs/ktst/unix/runprocesstestcase.cpp b/libs/ktst/unix/runprocesstestcase.cpp
new file mode 100644
index 0000000..b30eafc
--- /dev/null
+++ b/libs/ktst/unix/runprocesstestcase.cpp
@@ -0,0 +1,100 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <ktst/unit_test_suite.hpp>
+
+#include <signal.h> // sigaction, not necessarily in csignal :-/
+#include <cstdlib>
+#include <cstring>
+#include <sys/wait.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+using namespace ncbi::NK;
+
+#define REPORT_ERROR(msg) _REPORT_CRITICAL_ERROR_("TestEnv::" msg, __FILE__, __LINE__, true);
+
+static void alarmHandler(int)
+{
+    exit(TestEnv::TEST_CASE_TIMED_OUT);
+}
+
+int TestEnv::RunProcessTestCase(TestCase& obj, void(TestCase::*meth)(), int timeout)
+{
+    int pid=fork();
+    if (pid == -1)
+    {
+        REPORT_ERROR("RunProcessTestCase: fork() failed");
+    }
+    if (pid == 0)
+    {   /* child process */
+        if (timeout != 0)
+        {
+            struct sigaction act;
+            memset(&act, 0, sizeof act);
+            act.sa_handler = alarmHandler;
+            act.sa_flags = SA_RESETHAND;
+            sigaction(SIGALRM , &act, NULL);        
+            alarm(timeout);
+        }
+        try 
+        {
+            (obj.*meth)();
+        }   
+        catch(...)
+        {
+            exit(TEST_CASE_FAILED);
+        }
+        exit(0);
+    }
+    /* parent process */
+    int status;
+    if (waitpid(pid, &status, 0) != pid) /* suspend until the child terminates */
+    {   
+        REPORT_ERROR("RunProcessTestCase: wait() failed");
+    }
+    if (!WIFEXITED(status)) 
+    {   
+        REPORT_ERROR("RunProcessTestCase: child exited abnormally");
+    }
+    return WEXITSTATUS(status); /* exit status of the child process */
+}
+
+unsigned int TestEnv::Sleep(unsigned int seconds)
+{
+    return sleep(seconds);
+}
+
+void TestEnv::set_handlers(void)
+{
+    struct sigaction act;
+    memset(&act, 0, sizeof act);
+    act.sa_handler = SigHandler;
+    act.sa_flags = SA_RESETHAND;
+    if (sigaction(SIGFPE , &act, NULL) != 0)    REPORT_ERROR("set_handlers: sigaction() failed");
+    if (sigaction(SIGILL , &act, NULL) != 0)    REPORT_ERROR("set_handlers: sigaction() failed");
+    if (sigaction(SIGSEGV , &act, NULL) != 0)   REPORT_ERROR("set_handlers: sigaction() failed");
+}
diff --git a/libs/ktst/win/runprocesstestcase.cpp b/libs/ktst/win/runprocesstestcase.cpp
new file mode 100644
index 0000000..85a094a
--- /dev/null
+++ b/libs/ktst/win/runprocesstestcase.cpp
@@ -0,0 +1,141 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <ktst/unit_test_suite.hpp>
+
+#include <csignal> 
+#include <windows.h>
+#include <process.h>
+
+using namespace ncbi::NK;
+
+/* signal handlers for a single-test case thread */
+void CC SigSubHandler(int sig)
+{
+    _endthreadex(sig);
+}
+void CC TermSubHandler() 
+{
+    SigSubHandler(SIGTERM);
+}
+
+struct TestCaseCall
+{
+    TestCaseCall(TestCase& obj, void(TestCase::*meth)())
+        : object(&obj), method(meth)
+    {
+    }
+
+    TestCase* object;
+    void(TestCase::*method)();
+};
+
+void ThreadProc(void* call)
+{
+    signal(SIGABRT, SigSubHandler);
+    signal(SIGFPE, SigSubHandler);
+    signal(SIGILL, SigSubHandler);
+    signal(SIGINT, SigSubHandler);
+    signal(SIGSEGV, SigSubHandler);
+    signal(SIGTERM, SigSubHandler);
+    set_terminate(TermSubHandler);
+
+    try
+    {
+        TestCaseCall* c=(TestCaseCall*)call;
+        ((c->object)->*(c->method))();
+    }
+    catch (...)
+    {
+        _endthreadex(TestEnv::TEST_CASE_FAILED);
+    }
+    _endthreadex(0);
+}
+
+int TestEnv::RunProcessTestCase(TestCase& obj, void(TestCase::*meth)(), int timeout)
+{
+    TestCaseCall call(obj, meth);
+    HANDLE thread = (HANDLE)_beginthread( ThreadProc, 0, &call );
+    if (thread == NULL)
+    {
+        _REPORT_CRITICAL_ERROR_("TestEnv::RunProcessTestCase: failed to start a test case thread", __FILE__, __LINE__, true);
+    }
+
+    // make sure to restore main process's signal handlers before throwing an exception
+#define CALL_FAILED(call)\
+    _REPORT_CRITICAL_ERROR_("TestEnv::RunProcessTestCase: " call " failed", __FILE__, __LINE__, true);
+
+    DWORD rc=0;
+    DWORD result=WaitForSingleObject( (HANDLE)thread, timeout == 0 ? INFINITE : timeout*1000);
+    try
+    {
+        switch (result)
+        {
+        case WAIT_OBJECT_0:
+            if (GetExitCodeThread(thread, &rc) == 0)
+            {
+                CALL_FAILED("GetExitCodeThread");
+            }
+            break;
+        case WAIT_TIMEOUT:
+            if (!CloseHandle(thread))
+            {
+                CALL_FAILED("GetExitCodeThread");
+            }
+            rc=TEST_CASE_TIMED_OUT;
+            break;
+        default:
+            CALL_FAILED("WaitForSingleObject");
+            break;
+        }
+    }
+    catch(...)
+    {
+        set_handlers(); 
+        throw;
+    }
+#undef CALL_FAILED
+    set_handlers(); 
+    return (int)rc;
+}
+
+unsigned int TestEnv::Sleep(unsigned int seconds)
+{
+    ::Sleep(seconds*1000);
+    return 0;
+}
+
+void TestEnv::set_handlers(void) 
+{
+    signal(SIGABRT, SigHandler);
+    signal(SIGFPE, SigHandler);
+    signal(SIGILL, SigHandler);
+    signal(SIGINT, SigHandler);
+    signal(SIGSEGV, SigHandler);
+    signal(SIGTERM, SigHandler);
+    set_terminate(TermHandler);
+}
+
diff --git a/libs/kxml/Makefile b/libs/kxml/Makefile
index 24ba8e2..ab13a2a 100644
--- a/libs/kxml/Makefile
+++ b/libs/kxml/Makefile
@@ -116,8 +116,8 @@ XML_OBJ = \
 	$(addsuffix .$(LOBX),$(XML_SRC))
 
 XML_LIB = \
-	-dklib \
-	-dkfs
+	-dkfs \
+	-dklib 
 
 ifdef LIBXML_LPATH
 XML_LIB += \
diff --git a/libs/kxml/libkxfs.vers b/libs/kxml/libkxfs.vers
index ee90284..7ee7020 100644
--- a/libs/kxml/libkxfs.vers
+++ b/libs/kxml/libkxfs.vers
@@ -1 +1 @@
-1.0.4
+1.0.10
diff --git a/libs/kxml/libkxml.vers b/libs/kxml/libkxml.vers
index 238d6e8..5b09c67 100644
--- a/libs/kxml/libkxml.vers
+++ b/libs/kxml/libkxml.vers
@@ -1 +1 @@
-1.0.7
+1.0.14
diff --git a/libs/kxml/xml.c b/libs/kxml/xml.c
index f4f2f3a..ce44542 100644
--- a/libs/kxml/xml.c
+++ b/libs/kxml/xml.c
@@ -28,13 +28,14 @@ struct s_KNodeNamelist;
 #define KNAMELIST_IMPL struct s_KNodeNamelist
 
 #include <sysalloc.h>
-#include <klib/xml.h>
+#include <kxml/xml.h>
 
 #include <klib/impl.h>
 #include <kfs/file.h>
 #include <klib/log.h>
 #include <klib/rc.h>
 #include <klib/debug.h>
+#include <klib/text.h>
 
 #include <os-native.h> /* for strndup on mac */
 #include <strtol.h>
@@ -180,7 +181,7 @@ static void s_xmlGenericErrorDefaultFunc(void *ctx ATTRIBUTE_UNUSED,
     va_end(args);
 }
 
-static rc_t ReadFile(const KFile *src, char** aBuffer, uint64_t* aSize)
+static rc_t s_XmlReadFile(const KFile *src, char** aBuffer, uint64_t* aSize)
 {
     rc_t rc = 0;
     bool unknownFileSize = false;
@@ -244,7 +245,7 @@ rc_t KXMLMgrMakeDocRead(const KXMLMgr *self,
     if (self && src) {
         char* buffer = NULL;
         uint64_t size = 0;
-        rc = ReadFile(src, &buffer, &size);
+        rc = s_XmlReadFile(src, &buffer, &size);
         if (rc)
         {    return rc; }
         rc = KXMLMgrMakeDocReadFromMemory(self, result, buffer, size);
@@ -348,6 +349,7 @@ static rc_t KXMLNodeset_cTor(const KXMLDoc *parent,
         return RC ( rcXML, rcDoc, rcConstructing, rcData, rcIncorrect );
     }
     {
+        size_t size;
         KXMLNodeset *obj = (KXMLNodeset*) malloc(sizeof(KXMLNodeset));
         if (!obj) {
             return RC ( rcXML, rcDoc, rcConstructing, rcMemory, rcExhausted );
@@ -365,7 +367,7 @@ static rc_t KXMLNodeset_cTor(const KXMLDoc *parent,
             KXMLNodesetRelease(obj);
             return RC(rcXML, rcDoc, rcConstructing, rcData, rcUnsupported );
         }
-        obj->path = strdup(path);
+        obj->path = string_dup(path, string_measure(path, &size));
         if (!obj->path) {
             KXMLNodesetRelease(obj);
             return RC ( rcXML, rcDoc, rcConstructing, rcMemory, rcExhausted );
@@ -509,12 +511,15 @@ static rc_t s_KXMLNode_cTor(const KXMLNodeset *self,
     obj->path = 0;
     obj->children = children;
     if (children) {
-        /*TODO verify strlen(NULL)*/
         size_t size = 0;
+        size_t path_size;
         if (path)
-        {   size += strlen(path) + 1; }
+        {   size += string_measure(path, &path_size) + 1; }
         if (children->name)
-        {   size += strlen((char*)children->name); }
+        {   
+            size_t sz;
+            size += string_measure((char*)children->name, &sz); 
+        }
         obj->path = (char*)malloc(size + 1);
         if (!obj->path) {
             free(obj);
@@ -522,7 +527,7 @@ static rc_t s_KXMLNode_cTor(const KXMLNodeset *self,
         }
         *obj->path = 0;
         if (path && path[0]) {
-            strcpy(obj->path, path);
+            string_copy(obj->path, size + 1, path, path_size);
             strcat(obj->path, "/");
         }
         strcat(obj->path, (char*)children->name);
@@ -628,7 +633,8 @@ rc_t KXMLNodeVOpenNodesetRead ( const KXMLNode *self,
         if (path[0] == '/')
         { newPath = outpath; }
         else {
-            if ((strlen(self->parent->path) + 1 + strlen(outpath) + 1 + 3)
+            size_t size;
+            if ((string_measure(self->parent->path, &size) + 1 + string_measure(outpath, &size) + 1 + 3)
                 > XPATH_MAX_LEN)
             {
                 /* buffer is too small */
@@ -717,7 +723,8 @@ int s_KXMLNode_readTextNode(const xmlNodePtr firstChild,
     while (node) {
         if (node->type == XML_TEXT_NODE) {
             char* content = (char*) node->content;
-            size_t chunkSz = strlen(content);
+            size_t size;
+            size_t chunkSz = string_measure(content, &size);
             switch (state) {
                 case eNotFound: {
                     if (offset < head + chunkSz) {
@@ -733,7 +740,7 @@ int s_KXMLNode_readTextNode(const xmlNodePtr firstChild,
                         }
                         if (size) {
                             assert(buffer);
-                            strncpy((char*) buffer + copied,
+                            string_copy((char*) buffer + copied, bsize - copied, 
                                 content + chunkOffset, size);
                         }
                         copied += size;
@@ -753,7 +760,7 @@ int s_KXMLNode_readTextNode(const xmlNodePtr firstChild,
                     }
                     if (size) {
                         assert(buffer);
-                        strncpy((char*) buffer + copied,
+                        string_copy((char*) buffer + copied, bsize - copied,
                             content + chunkOffset, size);
                     }
                     copied += size;
@@ -1172,9 +1179,10 @@ rc_t KXMLNodeReadCStr( const KXMLNode *self, char** str, const char* default_val
         *str = NULL;
         if( (rc = KXMLNodeReadCString(self, b, to_read, &nread)) == 0 ) {
             if( nread == 0 && default_value != NULL ) {
-                *str = strdup(default_value);
+                size_t size;
+                *str = string_dup(default_value, string_measure(default_value, &size));
             } else {
-                *str = strndup(b, nread);
+                *str = string_dup(b, nread);
             }
             if( *str == NULL ) {
                 rc = RC(rcXML, rcNode, rcReading, rcMemory, rcInsufficient);
@@ -1329,12 +1337,14 @@ rc_t KXMLNodeReadAttrCStr( const KXMLNode *self, const char *attr, char** str, c
         *str = NULL;
         if( (rc = KXMLNodeReadAttrCString(self, attr, b, to_read, &nread)) == 0 ) {
             if( nread == 0 && default_value != NULL ) {
-                *str = strdup(default_value);
+                size_t size;
+                *str = string_dup(default_value, string_measure(default_value, &size));
             } else {
-                *str = strndup(b, nread);
+                *str = string_dup(b, nread);
             }
         } else if( GetRCState(rc) == rcNotFound && default_value != NULL ) {
-            *str = strdup(default_value);
+            size_t size;
+            *str = string_dup(default_value, string_measure(default_value, &size));
             rc = 0;
         }
         if( rc == 0 && *str == NULL ) {
diff --git a/libs/kxml/xtoc-parsexml.c b/libs/kxml/xtoc-parsexml.c
index 541ed8a..b2093d2 100644
--- a/libs/kxml/xtoc-parsexml.c
+++ b/libs/kxml/xtoc-parsexml.c
@@ -25,11 +25,16 @@
 
 #include "xtoc-priv.h" /* XTocParseXml */
 
-#include <klib/xml.h> /* KXMLNode */
+#include <kxml/xml.h> /* KXMLNode */
 /* #include <klib/log.h> LOGERR */
 #include <klib/debug.h> /* DBGMSG */
+#include <klib/printf.h>
+#include <klib/out.h>
 #include <klib/rc.h> /* RC */
-#include <fmtdef.h>
+
+#include "os-native.h"
+
+#include <sysalloc.h>
 
 #include <assert.h>
 #include <stdio.h> /* printf */
@@ -176,12 +181,17 @@ rc_t CC StrToKTime(const char* str, KTime_t* t)
 
         if (DEBUG_PRINT) {
             time_t t2 = ( time_t ) * t;
-            int len;
+            size_t len;
             char buffer [ 64 ];
 
             struct tm gmt;
+#if SUN
+	    gmt = * gmtime ( & t2 );
+#else
             gmtime_r ( & t2, & gmt );
-            len = sprintf ( buffer, "%04d-%02d-%02dT%02d:%02d:%02dZ"
+#endif
+            rc = string_printf ( buffer, sizeof buffer, & len
+                , "%04d-%02d-%02dT%02d:%02d:%02dZ"
                 , gmt . tm_year + 1900
                 , gmt . tm_mon + 1
                 , gmt . tm_mday
@@ -190,8 +200,8 @@ rc_t CC StrToKTime(const char* str, KTime_t* t)
                 , gmt . tm_sec
             );
             
-            printf(">> %s\n", str);
-            printf("<< %s\n", buffer);
+            OUTMSG((">> %s\n", str));
+            OUTMSG(("<< %s\n", buffer));
         }
     }
 
@@ -212,7 +222,7 @@ rc_t CC StrToKTime(const char* str, KTime_t* t)
                     "name=%s,attr=%s", data->nodeName, #V)); */
 
 #define PRN_ATTR(NM, V) \
-    if (DEBUG_PRINT && data->V) printf("%s=\"%s\" ", NM, data->V)
+    if (DEBUG_PRINT && data->V) OUTMSG(("%s=\"%s\" ", NM, data->V))
 
 #define GET_ATTR(NODE, V) READ_ATTR(NODE, V); PRN_ATTR(#V, V)
 
@@ -223,7 +233,7 @@ static rc_t CC NodeDataReadAttribs(NodeData* data, const KXMLNode* node,
 
     assert(node && parentName && data);
 
-    if (DEBUG_PRINT) printf("<%s ", data->nodeName);
+    if (DEBUG_PRINT) OUTMSG(("<%s ", data->nodeName));
 
     GET_ATTR(node, id);
     GET_ATTR(node, path);
@@ -261,14 +271,14 @@ static rc_t CC NodeDataReadAttribs(NodeData* data, const KXMLNode* node,
             }*/
         if (DEBUG_PRINT) 
         {
-            printf("%s=\"%" LU64 "\" ", attr, data->iSize);
-            printf("%s=\"%" LU64 "\" ", attr, data->iOffset);
+            OUTMSG(("%s=\"%lu\" ", attr, data->iSize));
+            OUTMSG(("%s=\"%lu\" ", attr, data->iOffset));
         }
     }
 
-    if (DEBUG_PRINT) printf(">");
-    if (DEBUG_PRINT && data->nodeValue) printf("%s", data->nodeValue);
-    if (DEBUG_PRINT) printf("</%s>\n", data->nodeName);
+    if (DEBUG_PRINT) OUTMSG((">"));
+    if (DEBUG_PRINT && data->nodeValue) OUTMSG(("%s", data->nodeValue));
+    if (DEBUG_PRINT) OUTMSG(("</%s>\n", data->nodeName));
 
     return rc;
 }
diff --git a/libs/kxml/xtoc.c b/libs/kxml/xtoc.c
index d5a2fd1..5d2dc22 100644
--- a/libs/kxml/xtoc.c
+++ b/libs/kxml/xtoc.c
@@ -26,7 +26,7 @@
 
 #include <kfs/extern.h>
 
-#include <klib/xml.h>
+#include <kxml/xml.h>
 
 #include <klib/defs.h>
 #include <klib/container.h>
@@ -35,6 +35,7 @@
 #include <klib/refcount.h>
 #include <klib/vector.h>
 #include <klib/log.h>
+#include <klib/out.h>
 #include <klib/namelist.h>
 
 #include <kfs/file.h>
@@ -42,6 +43,11 @@
 #include <kfs/gzip.h>
 #include <kfs/directory.h>
 
+#include <vfs/manager.h>
+#include <vfs/path.h>
+
+#include <sysalloc.h>
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
@@ -115,7 +121,7 @@ struct XTocEntry
     XTocEntry_t type;           /* XTocEntry_e */
     union utype
     {
-        struct idtype
+        struct /* idtype - name conflict on Solaris */
         {
             XTocEntry * target;
         } id;
@@ -234,6 +240,7 @@ rc_t XTocEntryResolvePath (const XTocEntry * self, const char * path_, bool foll
     const char * path;
     const char * limit;
     XTocEntry * node;
+    size_t size;
 
     assert (self);
     assert (path_);
@@ -250,7 +257,7 @@ rc_t XTocEntryResolvePath (const XTocEntry * self, const char * path_, bool foll
     /* this was causing a seg fault for some reason */
     limit = path + string_size (path);
 #else
-    limit = path + strlen (path);
+    limit = path + string_measure(path, &size);
 #endif
 
     do
@@ -874,7 +881,7 @@ rc_t XTocMake (XToc ** pself, const String * base_path)
     KRefcountInit (&self->refcount, 1, XTocClassname, "Init", base_path->addr);
 
     rc = XTocEntryMakeInt (&self->root, "/", NULL, NULL,
-                           (KTime_t)time, 0);
+                           (KTime_t)time(NULL), 0);
     if (rc)
     {
         free (self);
@@ -1120,7 +1127,7 @@ static
         rc = RC (rcFS, rcFile, rcConstructing, rcMemory, rcExhausted);
     else
     {
-        rc = KFileInit (&self->dad, (const KFile_vt*)&vtKXTocFile, true, false);
+        rc = KFileInit (&self->dad, (const KFile_vt*)&vtKXTocFile, "KXTocFile", "no-name", true, false);
         if (rc == 0)
         {
             rc = KFileAddRef (base);
@@ -1163,14 +1170,6 @@ static
 }
 
 
-
-
-
-
-
-
-
-
 struct KXTocDir
 {
     KDirectory dad;
@@ -1180,7 +1179,7 @@ struct KXTocDir
     XTocEntry * entry;
     XTocEntry * container;
     XTocEntry * root;
-    String base_path;
+    String      base_path;
 };
 
 #if _DEBUGGING
@@ -1893,6 +1892,7 @@ rc_t KXTocDirRelativePath (const KXTocDir *self, enum RCContext ctx,
 #else
     int backup;
     size_t bsize, psize;
+    size_t size;
 
     const char *r = root + self -> root;
     const char *p = path + self -> root;
@@ -1923,7 +1923,7 @@ rc_t KXTocDirRelativePath (const KXTocDir *self, enum RCContext ctx,
     while (p [ -1 ] != '/') -- p;
 
     /* the size of the remaining relative path */
-    psize = strlen (p);
+    psize = string_measure(p, &size);
 
     /* open up space if needed */
     if ( (size_t)(p - path) < bsize )
@@ -1941,7 +1941,8 @@ rc_t KXTocDirRelativePath (const KXTocDir *self, enum RCContext ctx,
     /* close gap */
     if ( (size_t)( p - path ) > bsize )
 	{
-		strcpy (& path [ bsize ], p);
+        size_t size;
+		string_copy (& path [ bsize ], path_max - bsize, p, measure_string(p, &size));
 	}
 
 	return 0;
@@ -2034,13 +2035,14 @@ rc_t CC KXTocDirVisit (const KXTocDir *self,
 
             if (rc == 0)
             {
+                size_t size;
 		KXTocDir * full_dir;
 		uint32_t path_size;
 
 		/* -----
 		 * make a locally accessible private KDirectory/KXTocDir
 		 */
-		for ( path_size = (uint32_t)strlen ( full_path );
+		for ( path_size = (uint32_t)string_measure( full_path, &size );
 		      ( path_size > self->root ) && ( full_path[ path_size - 1 ] == '/' );
 		      -- path_size )
 		{}
@@ -2123,12 +2125,15 @@ static rc_t CC KXTocDirResolvePath (const KXTocDir *self,
     rc_t rc;
     const char * path;
 
+    KOutMsg ("+++++\n%s: absolute %d\n", __func__, absolute);
+
     assert (self);
     assert (resolved);
     assert (path_);
 
     *resolved = '\0';
     rc = XTocMakePath (&path, false, path_, args);
+    KOutMsg ("%s: rc %R new '%s' old '%s'\n", __func__, rc, path, path_);
     if (rc != 0)
     {
         PLOGERR (klogErr,
@@ -2136,24 +2141,41 @@ static rc_t CC KXTocDirResolvePath (const KXTocDir *self,
     }
     else
     {
+        size_t path_sz = string_size(path);
+
         if (absolute)
         {
             XTocEntry * entry;
 
             rc = XTocEntryResolvePath (self->entry, path, false, &entry);
+
             if (rc)
                 PLOGERR (klogErr,
-                         (klogErr, rc, "Error resolvong path based on $(P)", "P=%s", path_));
+                         (klogErr, rc, "Error resolving path based on $(P)", "P=%s", path_));
             else
             {
                 free ((void*)path);
                 path = NULL;
                 rc = XTocEntryMakeFullPath (entry, &path);
+                if (rc == 0)
+                {
+                    size_t k = self->toc->base_path.size;
+                    if (k > 1)
+                    {
+                        memcpy (resolved, self->toc->base_path.addr, k);
+                        resolved += k;
+                        rsize -= k;
+                    }
+                }
             }
         }
         if (rc == 0)
-            string_copy (resolved, rsize, path, string_size (path));
-
+        {
+            if (rsize < (path_sz - 1))
+                rc = RC(rcFS, rcDirectory, rcResolving, rcBuffer, rcInsufficient);
+            else
+                string_copy(resolved, rsize, path, rsize);
+        }
         if (path)
             free ((void*)path);
     }
@@ -2180,11 +2202,11 @@ static rc_t CC KXTocDirResolveAlias (const KXTocDir * self,
 				 const char *path_,
 				 va_list args)
 {
-#if 1
+#if 0
     return -1;
 #else
     rc_t rc;
-    char * path;
+    const char * path;
 
     assert (self);
     assert (resolved);
@@ -2201,13 +2223,13 @@ static rc_t CC KXTocDirResolveAlias (const KXTocDir * self,
     {
         XTocEntry * entry;
 
-        rc = XocEntryResolvePath (self->entry, path, true , &entry);
+        rc = XTocEntryResolvePath (self->entry, path, true , &entry);
         if (rc)
             PLOGERR (klogErr,
-                     (klogErr, rc, "Error resolvong path based on $(P)", "P=%s", path_));
+                     (klogErr, rc, "Error resolving path based on $(P)", "P=%s", path_));
         else
         {
-            free (path);
+            free ((void*)path);
             path = NULL;
             rc = XTocEntryMakeFullPath (entry, &path);
         }
@@ -2220,7 +2242,7 @@ static rc_t CC KXTocDirResolveAlias (const KXTocDir * self,
         string_copy (resolved, rsize, path, string_size (path));
     
     if (path)
-        free (path);
+        free ((void*)path);
 
     return rc;
 #endif
@@ -2402,7 +2424,7 @@ static	rc_t CC KXTocDirVDate		(const KXTocDir *self,
         rc = XTocEntryResolvePath (self->entry, path, false, &entry);
         if (rc)
             PLOGERR (klogErr,
-                     (klogErr, rc, "Error resolveing path from $(P)", "P=%s", path_));
+                     (klogErr, rc, "Error resolving path from $(P)", "P=%s", path_));
         else
             *date = entry->mtime;
         free ((void*)path);
@@ -2739,7 +2761,7 @@ rc_t CC KXTocDirFileLocator		(const KXTocDir *self,
         rc = XTocEntryResolvePath (self->entry, path, false, &entry);
         if (rc)
             PLOGERR (klogErr,
-                     (klogErr, rc, "Error resolveing path from $(P)", "P=%s", path_));
+                     (klogErr, rc, "Error resolving path from $(P)", "P=%s", path_));
         else if (entry->type != xtoce_file)
             rc = RC (rcFS, rcDirectory, rcAccessing, rcPath, rcIncorrect);
         else
@@ -2785,7 +2807,7 @@ rc_t CC KXTocDirFileSize		(const KXTocDir *self,
         rc = XTocEntryResolvePath (self->entry, path, false, &entry);
         if (rc)
             PLOGERR (klogErr,
-                     (klogErr, rc, "Error resolveing path from $(P)", "P=%s", path_));
+                     (klogErr, rc, "Error resolving path from $(P)", "P=%s", path_));
         else if (entry->type != xtoce_file)
             rc = RC (rcFS, rcDirectory, rcAccessing, rcPath, rcIncorrect);
         else
@@ -2831,7 +2853,7 @@ rc_t CC KXTocDirFilePhysicalSize        (const KXTocDir *self,
         rc = XTocEntryResolvePath (self->entry, path, false, &entry);
         if (rc)
             PLOGERR (klogErr,
-                     (klogErr, rc, "Error resolveing path from $(P)", "P=%s", path_));
+                     (klogErr, rc, "Error resolving path from $(P)", "P=%s", path_));
         else if (entry->type != xtoce_file)
             rc = RC (rcFS, rcDirectory, rcAccessing, rcPath, rcIncorrect);
         else
@@ -2886,6 +2908,7 @@ rc_t CC KXTocDirOpenDirRead	(const KXTocDir *self,
 #else
     char * full;
     rc_t rc;
+    size_t size;
 
     assert (self != NULL);
     assert (subp != NULL);
@@ -2896,7 +2919,7 @@ rc_t CC KXTocDirOpenDirRead	(const KXTocDir *self,
     {
 	const KTocEntry *	pnode;
 	KTocEntryType		type;
-	size_t path_size = strlen (full);
+	size_t path_size = string_measure (full, &size);
 
 	/* -----
 	 * get rid of any extra '/' characters at the end of path
@@ -3163,9 +3186,70 @@ rc_t KXTocDirMake (const KXTocDir ** pself, const KDirectory * base,
 }
 
 
-LIB_EXPORT rc_t CC KDirectoryOpenXTocDirRead (const KDirectory * self,
-                                              const KDirectory ** pnew_dir,
-                                              const char * base_path, const KFile * xml)
+static 
+rc_t KDirectoryOpenXTocDirReadInt (const KDirectory * dir,
+                                   const KDirectory ** pnew_dir,
+                                   const KFile * xml,
+                                   const String * spath)
+{
+    XToc * xtoc;
+    rc_t rc;
+
+    rc = XTocMake (&xtoc, spath);
+    if (rc)
+        LOGERR (klogErr, rc, "Error creating toc for xtc directory");
+    else
+    {
+        String sroot;
+        XTocCache * cache;
+
+        StringInitCString (&sroot, ".");
+        rc = XTocMakeXTocCache (xtoc, &cache, &sroot, xtoc->root);
+        if (rc)
+            LOGERR (klogErr, rc, 
+                    "Failed to make cache for root for "
+                    "xtoc directory");
+        else
+        {
+            const KXTocDir * xdir;
+
+            /* now that we have a cache node we should release
+             * the original reference to the xtoc */
+/* ??? */
+            XTocRelease (xtoc);
+
+            xtoc->cache = xtoc->root->cache = cache;
+
+            rc = KXTocDirMake (&xdir, dir, xtoc, cache, xtoc->root,
+                               &sroot);
+            if (rc)
+                LOGERR (klogErr, rc, "Error making xtoc directory");
+            else
+            {
+                DBG_KXTocDir((xdir));
+                cache->dir = xdir;
+
+                rc = XTocParseXml (xtoc->root, xml);
+                if (rc)
+                    LOGERR (klogErr, rc, "Error parsing copycat xml file");
+                else
+                {
+                    *pnew_dir = &xdir->dad;
+                    return 0;
+                }
+                KDirectoryRelease (&xdir->dad);
+            }                
+            XTocCacheRelease (cache);
+        }
+        XTocRelease (xtoc);
+    }
+    return rc;
+}
+
+rc_t CC KDirectoryOpenXTocDirReadDir (const KDirectory * self,
+                                                 const KDirectory ** pnew_dir,
+                                                 const KFile * xml,
+                                                 const String * spath)
 {
     rc_t rc;
     
@@ -3185,115 +3269,198 @@ LIB_EXPORT rc_t CC KDirectoryOpenXTocDirRead (const KDirectory * self,
         LOGERR (klogErr, rc, "self is NULL for opening XToc Directory");
         return rc;
     }
-    if (xml == NULL)
+    else if (xml == NULL)
     {
         rc = RC (rcFS, rcDirectory, rcOpening, rcParam, rcNull);
         LOGERR (klogErr, rc, "xml parameter is NULL for opening XToc Directory");
         return rc;
     }
-    if (base_path == NULL)
+    else if (spath == NULL)
     {
         rc = RC (rcFS, rcDirectory, rcOpening, rcParam, rcNull);
         LOGERR (klogErr, rc, "base path parameter is NULL for opening XToc Directory");
         return rc;
     }
+    else
+    {
+        rc = KDirectoryOpenXTocDirReadInt (self, pnew_dir, xml, spath);
+    }
+    return rc;
+}
 
+
+rc_t CC KDirectoryVOpenXTocDirRead (const KDirectory * self,
+                                               const KDirectory ** pnew_dir,
+                                               bool chroot,
+                                               const KFile * xml,
+                                               const char * _path,
+                                               va_list args )
+{
+    rc_t rc;
+    
+    /* loosely validate parameters */
+    if (pnew_dir == NULL)
+    {
+        rc = RC (rcFS, rcDirectory, rcOpening, rcParam, rcNull);
+        LOGERR (klogErr, rc,
+                "new directory parameter is NULL for opening XToc Directory");
+        return rc;
+    }
+    *pnew_dir = NULL;
+
+    if (self == NULL)
+    {
+        rc = RC (rcFS, rcDirectory, rcOpening, rcSelf, rcNull);
+        LOGERR (klogErr, rc, "self is NULL for opening XToc Directory");
+        return rc;
+    }
+    else if (xml == NULL)
+    {
+        rc = RC (rcFS, rcDirectory, rcOpening, rcParam, rcNull);
+        LOGERR (klogErr, rc, "xml parameter is NULL for opening XToc Directory");
+        return rc;
+    }
+    else if (_path == NULL)
+    {
+        rc = RC (rcFS, rcDirectory, rcOpening, rcParam, rcNull);
+        LOGERR (klogErr, rc, "base path parameter is NULL for opening XToc Directory");
+        return rc;
+    }
+    else
     /* okay none of our parameters are NULL; they could still be bad but let's start */
     {
-        size_t base_path_size;  /* utf-8 bytes (not characters) in the passed in base path */      
-        char * slash;           /* find the last slash in the given path */
-        char * base_path_dir;   /* path leading up to the file in the path */
-        bool free_base_path_dir = true;
+        String spath;
+        const KDirectory * bdir;
+        KPathType type;
+        char path [8192];
 
-        base_path_size = string_size (base_path);
-        slash = string_rchr (base_path, base_path_size, '/');
+        rc = KDirectoryVResolvePath (self, true, path, sizeof path, _path, args);
+        if (rc)
+            return rc;
 
-        if (slash)
+        type = KDirectoryPathType (self, path);
+        switch (type & ~kptAlias)
         {
-            base_path_dir = malloc ((slash - base_path) + 1);
-            if (base_path_dir == NULL)
-            {
-                rc = RC (rcFS, rcDirectory, rcConstructing, rcMemory, rcExhausted);
-                LOGERR (klogErr, rc, "Error allocating memory to build xtoc directory");
-                return rc;
-            }
-            string_copy (base_path_dir, ((slash - base_path) + 1), 
-                         base_path, (slash - base_path));
+        case kptNotFound:
+            rc = RC (rcFS, rcDirectory, rcOpening, rcParam, rcNotFound);
+            LOGERR (klogErr, rc, "base path parameter is not found when opening XToc Directory");
+            return rc;
+
+        case kptBadPath:
+            rc = RC (rcFS, rcDirectory, rcOpening, rcParam, rcInvalid);
+            LOGERR (klogErr, rc, "base path parameter is a bad path when opening XToc Directory");
+            return rc;
+
+        case kptFile:
+        case kptCharDev:
+        case kptBlockDev:
+        case kptFIFO:
+        case kptZombieFile:
+        case kptDataset:
+        case kptDatatype:
+            KOutMsg ("%s: type '%u' path '%s'\n",type,path);
+            rc = RC (rcFS, rcDirectory, rcOpening, rcParam, rcWrongType);
+            LOGERR (klogErr, rc, "base path parameter is an unusable type when opening XToc Directory");
+            return rc;
+
+        default:
+            rc = RC (rcFS, rcDirectory, rcOpening, rcParam, rcCorrupt);
+            LOGERR (klogErr, rc, "base path parameter is not a known type when opening XToc Directory");
+            return rc;
+
+        case kptDir:
+            break;
         }
-        else
+
+        rc = KDirectoryVOpenDirRead (self, &bdir, true, path, args);
+        if (rc)
         {
-            free_base_path_dir = false;
-            base_path_dir = "/";
+            LOGERR (klogErr, rc, "failed to open base directory for XToc directory");
+            return rc;
         }
+        else
         {
-            const KDirectory * base;
+            static const char absroot[] = "/";
 
-            rc = KDirectoryOpenDirRead (self, &base, true, base_path_dir);
-            if (rc)
-                LOGERR (klogErr, rc, "Error opening directory for xtoc directory");
+            if (chroot)
+                StringInitCString (&spath, absroot);
             else
-            {
-                String sbase;
-                XToc * toc;
+                StringInitCString (&spath, path);
 
-                StringInitCString (&sbase, base_path_dir);
+            rc = KDirectoryOpenXTocDirReadInt (bdir, pnew_dir, xml, &spath);
+            if (rc == 0)
+                return 0;
 
-                rc = XTocMake (&toc, &sbase);
-                if (rc)
-                    LOGERR (klogErr, rc, "Error creating toc for xtc directory");
-                else
-                {
-                    XTocCache * cache;
-                    String sroot;
+            KDirectoryRelease (bdir);
+        }
+    }
+    return rc;
+}
 
-                    StringInitCString (&sroot, ".");
 
-                    rc = XTocMakeXTocCache (toc, &cache, &sroot, toc->root);
-                    if (rc)
-                        LOGERR (klogErr, rc, 
-                                "Failed to make cache for root for "
-                                "xtoc directory");
-                    else
-                    {
-                        const KXTocDir * xdir;
+rc_t CC KDirectoryOpenXTocDirRead (const KDirectory * self,
+                                              const KDirectory ** pnew_dir,
+                                              bool chroot,
+                                              const KFile * xml,
+                                              const char * path, ... )
+{
+    rc_t rc;
+    va_list args;
 
-                        /* now that we have a cache node we should release
-                         * the original reference to the xtoc */
-                        XTocRelease (toc);
+    va_start (args, path);
+    rc = KDirectoryVOpenXTocDirRead (self, pnew_dir, chroot, xml, path, args);
+    va_end (args);
 
-                        toc->cache = toc->root->cache = cache;
+    return rc;
+}
 
-                        rc = KXTocDirMake (&xdir, base, toc, cache, toc->root,
-                                           &sroot);
-                        /* done with our reference to base */
-                        if (rc)
-                            LOGERR (klogErr, rc, "Error making xtoc directory");
-                        else
-                        {
-                            DBG_KXTocDir((xdir));
-                            cache->dir = xdir;
 
-                            rc = XTocParseXml (toc->root, xml);
-                            if (rc)
-                                LOGERR (klogErr, rc, "Error parsing copycat xml file");
-                            else
-                            {
-                                *pnew_dir = &xdir->dad;
-                                if (free_base_path_dir)
-                                    free (base_path_dir);
-                                return 0;
-                            }
-                            KDirectoryRelease (&xdir->dad);
-                        }
-                    }
-                }
-                KDirectoryRelease (base);
+struct VFSManager;
+
+rc_t CC VFSManagerOpenXTocDirRead (const struct VFSManager * self,
+                                              const struct KDirectory ** pnew_dir,
+                                              const struct KFile * xml,
+                                              const struct VPath * path)
+{
+    rc_t rc = 0;
+
+    /* needs to be replaced with proper checking and rc returns */
+    assert (pnew_dir);
+
+    *pnew_dir = NULL;
+
+    assert (self);
+    assert (xml);
+    assert (path);
+
+    if (rc == 0)
+    {
+        const KDirectory * dir;
+
+        rc = VFSManagerOpenDirectoryRead (self, &dir, path);
+        if (rc == 0)
+        {
+            char pbuff [8192];
+            size_t z;
+
+            rc = VPathReadPath (path, pbuff, sizeof pbuff, &z);
+            if (rc == 0)
+            {
+                String string;
+
+                StringInit (&string, pbuff, z, string_len (pbuff, z));
+
+                rc = KDirectoryOpenXTocDirReadDir (dir, pnew_dir, xml, &string);
+                if (rc == 0)
+                    return 0;
             }
-            if (free_base_path_dir)
-                free (base_path_dir);
-        } 
-   }
+
+            KDirectoryRelease (dir);
+        }
+    }
     return rc;
 }
 
+
+
 /* end of file */
diff --git a/libs/loader/Makefile b/libs/loader/Makefile
new file mode 100644
index 0000000..3e42909
--- /dev/null
+++ b/libs/loader/Makefile
@@ -0,0 +1,99 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: all
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = libs/loader
+
+INT_LIBS = \
+	libloader
+
+EXT_LIBS = \
+
+ALL_LIBS = \
+	$(INT_LIBS) \
+	$(EXT_LIBS)
+
+TEST_TOOLS = 
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs 
+	@ $(MAKE_CMD) $(TARGDIR)/std
+
+$(INT_LIBS): makedirs
+	@ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_LIBS): makedirs
+	@ $(MAKE_CMD) $(LIBDIR)/$@
+
+$(TEST_TOOLS): std makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: all std $(ALL_LIBS) $(TEST_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
+	$(addprefix $(LIBDIR)/,$(EXT_LIBS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# libloader
+#
+$(ILIBDIR)/libloader: $(ILIBDIR)/libloader.$(LIBX)
+
+LOADER_SRC = \
+    mmarray \
+	common-reader \
+	common-writer \
+	sequence-writer \
+	reference-writer \
+	alignment-writer
+
+LOADER_OBJ = \
+	$(addsuffix .$(LOBX),$(LOADER_SRC))
+
+LOADER_LIB = \
+
+$(ILIBDIR)/libloader.$(SHLX): $(LOADER_OBJ)
+	$(LD) --dlib -o $@ $^ $(LOADER_LIB)
+
+$(ILIBDIR)/libloader.$(LIBX): $(LOADER_OBJ)
+	$(LD) --slib -o $@ $^ $(LOADER_LIB)
+
diff --git a/libs/loader/alignment-writer.c b/libs/loader/alignment-writer.c
new file mode 100644
index 0000000..005d7f1
--- /dev/null
+++ b/libs/loader/alignment-writer.c
@@ -0,0 +1,226 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <sysalloc.h>
+#include <klib/out.h>
+
+#include <vdb/vdb-priv.h>
+
+#include <loader/alignment-writer.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+enum e_tables {
+    tblPrimary,
+    tblSecondary,
+    tblN
+};
+
+struct AlignmentWriter {
+    VDatabase *db;
+    TableWriterAlgn const *tbl[tblN];
+    int64_t rowId;
+    int st;
+};
+
+AlignmentWriter *AlignmentMake(VDatabase *db) {
+    AlignmentWriter *self = calloc(1, sizeof(*self));
+    
+    if (self) {
+        self->db = db;
+        VDatabaseAddRef(self->db);
+    }
+    return self;
+}
+
+static rc_t SetColumnDefaults(TableWriterAlgn const *tbl)
+{
+    return 0;
+}
+
+static rc_t WritePrimaryRecord(AlignmentWriter *const self, AlignmentRecord *const data, bool expectUnsorted)
+{
+    if (self->tbl[tblPrimary] == NULL) {
+        rc_t rc = TableWriterAlgn_Make(&self->tbl[tblPrimary], self->db,
+                                       ewalgn_tabletype_PrimaryAlignment,
+                                       ewalgn_co_TMP_KEY_ID + 
+                                       (expectUnsorted ? ewalgn_co_unsorted : 0));
+        if (rc)
+            return rc;
+        rc = SetColumnDefaults(self->tbl[tblPrimary]);
+        if (rc)
+            return rc;
+    }
+    return TableWriterAlgn_Write(self->tbl[tblPrimary], &data->data, &data->alignId);
+}
+
+static rc_t WriteSecondaryRecord(AlignmentWriter *const self, AlignmentRecord *const data, bool expectUnsorted)
+{
+    if (self->tbl[tblSecondary] == NULL) {
+        rc_t rc = TableWriterAlgn_Make(&self->tbl[tblSecondary], self->db,
+                                       ewalgn_tabletype_SecondaryAlignment,
+                                       ewalgn_co_TMP_KEY_ID + 
+                                       (expectUnsorted ? ewalgn_co_unsorted : 0));
+        if (rc)
+            return rc;
+        rc = SetColumnDefaults(self->tbl[tblSecondary]);
+        if (rc)
+            return rc;
+    }
+#if 1
+    /* try to make consistent with cg-load */
+    if (data->mate_ref_pos == 0) {
+        data->data.mate_ref_orientation.elements = 0;
+    }
+#endif
+    return TableWriterAlgn_Write(self->tbl[tblSecondary], &data->data, &data->alignId);
+}
+
+rc_t AlignmentWriteRecord(AlignmentWriter *const self, AlignmentRecord *const data, bool expectUnsorted)
+{
+    return data->isPrimary ? WritePrimaryRecord(self, data, expectUnsorted) : WriteSecondaryRecord(self, data, expectUnsorted);
+}
+
+rc_t AlignmentStartUpdatingSpotIds(AlignmentWriter *const self)
+{
+    return 0;
+}
+
+rc_t AlignmentGetSpotKey(AlignmentWriter *const self, uint64_t * keyId)
+{
+    rc_t rc;
+    
+    switch (self->st) {
+    case 0:
+        rc = TableWriterAlgn_TmpKeyStart(self->tbl[tblPrimary]);
+        if (rc)
+            break;
+        self->rowId = 0;
+        ++self->st;
+    case 1:
+        rc = TableWriterAlgn_TmpKey(self->tbl[tblPrimary], ++self->rowId, keyId);
+        if (rc == 0)
+            break;
+        ++self->st;
+        if (GetRCState(rc) != rcNotFound || GetRCObject(rc) != rcRow || self->tbl[tblSecondary] == NULL)
+            break;
+    case 2:
+        rc = TableWriterAlgn_TmpKeyStart(self->tbl[tblSecondary]);
+        if (rc)
+            break;
+        self->rowId = 0;
+        ++self->st;
+    case 3:
+        rc = TableWriterAlgn_TmpKey(self->tbl[tblSecondary], ++self->rowId, keyId);
+        if (rc == 0)
+            break;
+        if (GetRCState(rc) != rcNotFound || GetRCObject(rc) != rcRow)
+            break;
+        ++self->st;
+        break;
+    default:
+        rc = RC(rcAlign, rcTable, rcUpdating, rcError, rcIgnored);
+        break;
+    }
+    return rc;
+}
+
+rc_t AlignmentWriteSpotId(AlignmentWriter * const self, int64_t const spotId)
+{
+    switch (self->st) {
+    case 1:
+        return TableWriterAlgn_Write_SpotId(self->tbl[tblPrimary], self->rowId, spotId);
+    case 3:
+        return TableWriterAlgn_Write_SpotId(self->tbl[tblSecondary], self->rowId, spotId);
+    default:
+        return RC(rcAlign, rcTable, rcUpdating, rcSelf, rcInconsistent);
+    }
+}
+
+rc_t AlignmentWhack(AlignmentWriter * const self, bool const commit) 
+{
+    rc_t const rc = TableWriterAlgn_Whack(self->tbl[tblPrimary], commit, NULL);
+    rc_t const rc2 = self->tbl[tblSecondary] ? TableWriterAlgn_Whack(self->tbl[tblSecondary], commit | (rc == 0), NULL) : 0;
+
+    VDatabaseRelease(self->db);
+    free(self);
+    return rc ? rc : rc2;
+}
+
+void AlignmentRecordInit(AlignmentRecord *self, void *buffer, unsigned readlen, char **endp, bool expectUnsorted)
+{
+    memset(self, 0, sizeof(*self));
+
+    self->data.seq_read_id.buffer = &self->read_id;
+    self->data.seq_read_id.elements = 1;
+    self->data.ref_id.buffer = &self->ref_id;
+    self->data.ref_id.elements = 1;
+    if (expectUnsorted) {
+        self->data.ref_start.buffer = &self->ref_start;
+        self->data.ref_start.elements = 1;
+    }
+    else {
+        self->data.global_ref_start.buffer = &self->global_ref_start;
+        self->data.global_ref_start.elements = 1;
+    }
+    self->data.ref_orientation.buffer = &self->ref_orientation;
+    self->data.ref_orientation.elements = 1;
+    self->data.mapq.buffer = &self->mapq;
+    self->data.mapq.elements = 1;
+    self->data.tmp_key_id.buffer = &self->tmp_key_id;
+    self->data.tmp_key_id.elements = 1;
+    
+    self->data.read_start.buffer = &self->read_start;
+    self->data.read_start.elements = 1;
+    self->data.read_len.buffer = &self->read_len;
+    self->data.read_len.elements = 1;
+    
+    self->data.mate_ref_orientation.buffer = &self->mate_ref_orientation;
+    self->data.mate_ref_orientation.elements = 1;
+    self->data.mate_ref_id.buffer = &self->mate_ref_id;
+    self->data.mate_ref_id.elements = 1;
+    self->data.mate_ref_pos.buffer = &self->mate_ref_pos;
+    self->data.mate_ref_pos.elements = 1;
+    self->data.mate_align_id.buffer = &self->mate_align_id;
+    self->data.mate_align_id.elements = 1;
+    self->data.template_len.buffer = &self->template_len;
+    self->data.template_len.elements = 1;
+    
+    self->data.ref_offset.buffer = (int32_t *)buffer;
+    self->data.has_mismatch.buffer = (bool *)&AR_OFFSET(*self)[readlen];
+    self->data.has_mismatch.elements = readlen;
+    self->data.has_ref_offset.buffer = &AR_HAS_MISMATCH(*self)[readlen];
+    self->data.has_ref_offset.elements = readlen;
+    self->data.mismatch.buffer = (char *)&AR_HAS_OFFSET(*self)[readlen];
+    
+    *endp = (char *)&AR_MISMATCH(*self)[readlen];
+}
+
+
diff --git a/libs/loader/common-reader.c b/libs/loader/common-reader.c
new file mode 100644
index 0000000..3839d42
--- /dev/null
+++ b/libs/loader/common-reader.c
@@ -0,0 +1,614 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <loader/common-reader-priv.h>
+
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h>
+
+#include <klib/rc.h>
+
+/*--------------------------------------------------------------------------
+ ReaderFile
+ */
+rc_t CC ReaderFileAddRef ( const ReaderFile *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "ReaderFile" ) )
+        {
+        case krefLimit:
+            return RC ( RC_MODULE, rcFile, rcAttaching, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+rc_t CC ReaderFileRelease ( const ReaderFile *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "ReaderFile" ) )
+        {
+        case krefWhack:
+            return self->vt.v1->destroy( (ReaderFile *)self );
+        case krefLimit:
+            return RC ( RC_MODULE, rcFile, rcReleasing, rcRange, rcExcessive );
+        }
+    }
+    return 0;
+}
+
+rc_t CC ReaderFileGetRecord( const ReaderFile *self, const Record** result)
+{
+    assert(self);
+    assert(result);
+    return self->vt.v1->getRecord( self, result );
+}
+
+float CC ReaderFileGetProportionalPosition ( const READERFILE_IMPL *self )
+{
+    assert(self);
+    assert(self->vt.v1->getProportionalPosition);
+    return self->vt.v1->getProportionalPosition( self );
+}
+
+rc_t CC ReaderFileGetReferenceInfo ( const ReaderFile *self, const ReferenceInfo** result )
+{
+    assert(self);
+    assert(self->vt.v1->getReferenceInfo);
+    return self->vt.v1->getReferenceInfo( self, result );
+}
+
+/* Init
+ *  polymorphic parent constructor
+ */
+rc_t CC ReaderFileInit ( ReaderFile *self )
+{
+    if ( self == NULL )
+        return RC ( RC_MODULE, rcFileFormat, rcConstructing, rcSelf, rcNull );
+
+    KRefcountInit ( & self -> refcount, 1, "ReaderFile", "ReaderFileInit", "");
+
+    self->pathname = NULL;
+
+    return 0;
+}
+
+rc_t CC ReaderFileWhack ( ReaderFile *self )
+{
+    if ( self == NULL )
+        return RC ( RC_MODULE, rcFileFormat, rcConstructing, rcSelf, rcNull );
+
+    free( self->pathname );
+
+    return 0;
+}
+
+const char* CC ReaderFileGetPathname ( const ReaderFile *self )
+{
+    if ( self == NULL )
+        return NULL;
+    return self->pathname;
+}
+
+/*--------------------------------------------------------------------------
+ Record
+ */
+
+rc_t CC RecordAddRef ( const Record *self )
+{
+    assert(self);
+    assert(self->vt.v1->addRef);
+    return self->vt.v1->addRef(self);
+}
+
+rc_t CC RecordRelease ( const Record *self )
+{
+    assert(self);
+    assert(self->vt.v1->release);
+    return self->vt.v1->release(self);
+}
+
+rc_t CC RecordGetSequence ( const Record *self, const Sequence** result)
+{
+    assert(self);
+    assert(result);
+    assert(self->vt.v1->getSequence);
+    return self->vt.v1->getSequence(self, result);
+}
+
+rc_t CC RecordGetAlignment( const Record *self, const Alignment** result)
+{
+    assert(self);
+    assert(result);
+    assert(self->vt.v1->getAlignment);
+    return self->vt.v1->getAlignment(self, result);
+}
+
+rc_t CC RecordGetRejected ( const Record *self, const Rejected** result)
+{
+    assert(self);
+    assert(result);
+    assert(self->vt.v1->getRejected);
+    return self->vt.v1->getRejected(self, result);
+}
+
+/*--------------------------------------------------------------------------
+ Sequence
+ */
+rc_t CC SequenceAddRef ( const Sequence *self )
+{
+    assert(self);
+    assert(self->vt.v1->addRef);
+    return self->vt.v1->addRef(self);
+}
+
+rc_t CC SequenceRelease ( const Sequence *self )
+{
+    assert(self);
+    assert(self->vt.v1->release);
+    return self->vt.v1->release(self);
+}
+
+rc_t CC SequenceGetReadLength ( const Sequence *self, uint32_t *length )
+{
+    assert(self);
+    assert(length);
+    assert(self->vt.v1->getReadLength);
+    return self->vt.v1->getReadLength(self, length);
+}
+
+rc_t CC SequenceGetRead( const Sequence *self, char *sequence )
+{
+    assert(self);
+    assert(sequence);
+    assert(self->vt.v1->getRead);
+    return self->vt.v1->getRead(self, sequence);
+}
+
+rc_t CC SequenceGetRead2 ( const Sequence *self, char *sequence, uint32_t start, uint32_t stop)
+{
+    assert(self);
+    assert(sequence);
+    assert(self->vt.v1->getRead2);
+    return self->vt.v1->getRead2(self, sequence, start, stop);
+}
+
+rc_t CC SequenceGetQuality(const Sequence *self, const int8_t **quality, uint8_t *offset, int *qualType)
+{
+    assert(self);
+    assert(quality);
+    assert(offset);
+    assert(qualType);
+    assert(self->vt.v1->getQuality);
+    return self->vt.v1->getQuality(self, quality, offset, qualType);
+}
+
+rc_t CC SequenceGetSpotGroup ( const Sequence *self, const char **name, size_t *length )
+{
+    assert(self);
+    assert(name);
+    assert(length);
+    assert(self->vt.v1->getSpotGroup);
+    return self->vt.v1->getSpotGroup(self, name, length);
+}
+
+rc_t CC SequenceGetSpotName ( const Sequence *self, const char **name, size_t *length )
+{
+    assert(self);
+    assert(name);
+    assert(length);
+    assert(self->vt.v1->getSpotName);
+    return self->vt.v1->getSpotName(self, name, length);
+}
+
+bool CC SequenceIsColorSpace ( const Sequence *self )
+{
+    assert(self);
+    assert(self->vt.v1->isColorSpace);
+    return self->vt.v1->isColorSpace(self);
+}
+
+rc_t CC SequenceGetCSKey ( const Sequence *self, char cskey[1] )
+{
+    assert(self);
+    assert(self->vt.v1->getCSKey);
+    return self->vt.v1->getCSKey(self, cskey);
+}
+
+rc_t CC SequenceGetCSReadLength ( const Sequence *self, uint32_t *length )
+{
+    assert(self);
+    assert(self->vt.v1->getCSReadLength);
+    return self->vt.v1->getCSReadLength(self, length);
+}
+
+rc_t CC SequenceGetCSRead( const Sequence *self, char *sequence )
+{
+    assert(self);
+    assert(self->vt.v1->getCSRead);
+    return self->vt.v1->getCSRead(self, sequence);
+}
+
+rc_t CC SequenceGetCSQuality(const Sequence *self, const int8_t **quality, uint8_t *offset, int *qualType)
+{
+    assert(self);
+    assert(quality);
+    assert(offset);
+    assert(qualType);
+    assert(self->vt.v1->getCSQuality);
+    return self->vt.v1->getCSQuality(self, quality, offset, qualType);
+}
+
+bool CC SequenceWasPaired     ( const Sequence *self )
+{
+    assert(self);
+    assert(self->vt.v1->wasPaired);
+    return self->vt.v1->wasPaired(self);
+}
+
+int CC SequenceGetOrientationSelf( const Sequence *self )
+{
+    assert(self);
+    assert(self->vt.v1->orientationSelf);
+    return self->vt.v1->orientationSelf(self);
+}
+ 
+int CC SequenceGetOrientationMate( const Sequence *self )
+{
+    assert(self);
+    assert(self->vt.v1->orientationMate);
+    return self->vt.v1->orientationMate(self);
+}
+
+bool CC SequenceIsFirst       ( const Sequence *self )
+{
+    assert(self);
+    assert(self->vt.v1->isFirst);
+    return self->vt.v1->isFirst(self);
+}
+
+bool CC SequenceIsSecond      ( const Sequence *self )
+{
+    assert(self);
+    assert(self->vt.v1->isSecond);
+    return self->vt.v1->isSecond(self);
+}
+
+rc_t SequenceGetTI(Sequence const *self, uint64_t *ti)
+{
+    assert(self);
+    assert(ti);
+    assert(self->vt.v1->getTI);
+    return self->vt.v1->getTI(self, ti);
+}
+
+bool CC SequenceIsDuplicate( const Sequence *self )
+{
+    assert(self);
+    assert(self->vt.v1->isDuplicate);
+    return self->vt.v1->isDuplicate(self);
+}
+
+bool CC SequenceIsLowQuality( const Sequence *self )
+{
+    assert(self);
+    assert(self->vt.v1->isLowQuality);
+    return self->vt.v1->isLowQuality(self);
+}
+
+/*--------------------------------------------------------------------------
+ Alignment
+ */
+
+rc_t CC AlignmentAddRef ( const Alignment *self )
+{
+    assert(self);
+    assert(self->vt.v1->addRef);
+    return self->vt.v1->addRef(self);
+}
+
+rc_t CC AlignmentRelease ( const Alignment *self )
+{
+    assert(self);
+    assert(self->vt.v1->release);
+    return self->vt.v1->release(self);
+}
+
+rc_t CC AlignmentGetRefSeqId ( const Alignment *self, int32_t *refSeqId )
+{
+    assert(self);
+    assert(refSeqId);
+    assert(self->vt.v1->getRefSeqId);
+    return self->vt.v1->getRefSeqId(self, refSeqId);
+}
+
+rc_t CC AlignmentGetMateRefSeqId ( const Alignment *self, int32_t *refSeqId )
+{
+    assert(self);
+    assert(refSeqId);
+    assert(self->vt.v1->getMateRefSeqId);
+    return self->vt.v1->getMateRefSeqId(self, refSeqId);
+}
+
+rc_t CC AlignmentGetPosition ( const Alignment *self, int64_t *pos )
+{
+    assert(self);
+    assert(pos);
+    assert(self->vt.v1->getPosition);
+    return self->vt.v1->getPosition(self, pos);
+}
+
+rc_t CC AlignmentGetMatePosition ( const Alignment *self, int64_t *pos )
+{
+    assert(self);
+    assert(pos);
+    assert(self->vt.v1->getMatePosition);
+    return self->vt.v1->getMatePosition(self, pos);
+}
+
+rc_t CC AlignmentGetMapQuality ( const Alignment *self, uint8_t *qual )
+{
+    assert(self);
+    assert(qual);
+    assert(self->vt.v1->getMapQuality);
+    return self->vt.v1->getMapQuality(self, qual);
+}
+
+rc_t CC AlignmentGetAlignmentDetail ( const Alignment *self,
+                                      AlignmentDetail *rslt, 
+                                      uint32_t count, 
+                                      uint32_t *actual,
+                                      int32_t *firstMatch, 
+                                      int32_t *lastMatch )
+{
+    assert(self);
+    assert(self->vt.v1->getAlignmentDetail);
+    return self->vt.v1->getAlignmentDetail(self, rslt, count, actual, firstMatch, lastMatch);
+}
+
+rc_t CC AlignmentGetAlignOpCount ( const Alignment *self, uint32_t *n )
+{
+    assert(self);
+    assert(n);
+    assert(self->vt.v1->getAlignOpCount);
+    return self->vt.v1->getAlignOpCount(self, n);
+}
+
+rc_t CC AlignmentGetInsertSize ( const Alignment *self, int64_t *size )
+{
+    assert(self);
+    assert(size);
+    assert(self->vt.v1->getInsertSize);
+    return self->vt.v1->getInsertSize(self, size);
+}
+
+rc_t AlignmentGetCGData ( const ALIGNMENT_IMPL *self, const CGData** result)
+{
+    assert(self);
+    assert(result);
+    assert(self->vt.v1->getCG);
+    return self->vt.v1->getCG(self, result);
+}
+
+rc_t AlignmentGetBAMCigar ( const ALIGNMENT_IMPL *self, uint32_t const **rslt, uint32_t *length )
+{
+    assert(self);
+    assert(rslt);
+    assert(length);
+    assert(self->vt.v1->getBAMCigar);
+    return self->vt.v1->getBAMCigar(self, rslt, length);
+}
+
+bool AlignmentIsSecondary( const Alignment *self )
+{
+    assert(self);
+    assert(self->vt.v1->isSecondary);
+    return self->vt.v1->isSecondary(self);
+}
+
+/*--------------------------------------------------------------------------
+ * CGData
+ */
+rc_t CC CGDataAddRef ( const CGData *self )
+{
+    assert(self);
+    assert(self->vt.v1->addRef);
+    return self->vt.v1->addRef(self);
+}
+
+rc_t CC CGDataRelease ( const CGData *self )
+{
+    assert(self);
+    assert(self->vt.v1->release);
+    return self->vt.v1->release(self);
+}
+
+/* CGGetSeqQual
+ */
+rc_t CC CGDataGetSeqQual ( const CGData* self,
+                           char sequence[/* 35 */],
+                           uint8_t quality[/* 35 */] )
+{
+    assert(self);
+    assert(sequence);
+    assert(quality);
+    assert(self->vt.v1->getSeqQual);
+    return self->vt.v1->getSeqQual(self, sequence, quality); 
+}                       
+
+/* CGGetCigar
+ */
+rc_t CC CGDataGetCigar ( const CGData* self,
+                         uint32_t *cigar,
+                         uint32_t cig_max,
+                         uint32_t *cig_act )
+{
+    assert(self);
+    assert(cigar);
+    assert(cig_act);
+    assert(self->vt.v1->getCigar);
+    return self->vt.v1->getCigar(self, cigar, cig_max, cig_act);
+}                     
+
+/* CGGetAlignGroup
+ */
+rc_t CC CGDataGetAlignGroup ( const CGData* self,
+                              char buffer[],
+                              size_t max_size,
+                              size_t *act_size )
+{
+    assert(self);
+    assert(act_size);
+    assert(self->vt.v1->getAlignGroup);
+    return self->vt.v1->getAlignGroup(self, buffer, max_size, act_size);
+}
+                          
+/*--------------------------------------------------------------------------
+ * Rejected
+ */
+
+rc_t CC RejectedInit ( Rejected *self )
+{
+    KRefcountInit ( & self -> refcount, 1, "Rejected", "RejectedInit", "");
+    StringInit(&self->source, 0, 0, 0);
+    self->message = 0;
+    self->column = 0;
+    self->line = 0;
+    self->fatal = false;
+    return 0;
+}
+
+static rc_t CC RejectedWhack ( const Rejected *self )
+{
+    free( (void*)self->source.addr );
+    free( (void*)self->message );
+    free( (void*)self );
+    return 0;
+}
+
+rc_t CC RejectedAddRef ( const Rejected *self )
+{
+    assert(self);
+    KRefcountAdd( & self->refcount, "Rejected" );
+    /* TODO: handle rc from KRefcountAdd */
+    return 0;
+}
+
+rc_t CC RejectedRelease ( const Rejected *self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "Rejected" ) )
+        {
+        case krefWhack:
+            RejectedWhack( self );
+            break;
+        default:
+            /* TODO: handle other values */
+            break;
+        }
+    }
+    return 0;
+}
+
+rc_t CC RejectedGetError( const Rejected* self, const char** text, uint64_t* line, uint64_t* column, bool* fatal )
+{
+    assert(self);
+    assert(text);
+    assert(line);
+    assert(column);
+    *text = self->message;
+    *line = self->line;
+    *column = self->column;
+    *fatal = self->fatal;
+    return 0;
+}
+
+rc_t CC RejectedGetData( const Rejected* self, const void** data, size_t* length )
+{
+    assert(self);
+    assert(data);
+    assert(length);
+    *data = self->source.addr;
+    *length = StringSize( & self->source );
+    return 0;
+}
+
+/*--------------------------------------------------------------------------
+ * ReferenceInfo
+ */
+rc_t CC ReferenceInfoAddRef ( const ReferenceInfo *self )
+{
+    assert(self);
+    assert(self->vt.v1->addRef);
+    return self->vt.v1->addRef(self);
+}
+
+rc_t CC ReferenceInfoRelease ( const ReferenceInfo *self )
+{
+    assert(self);
+    assert(self->vt.v1->release);
+    return self->vt.v1->release(self);
+}
+
+rc_t CC ReferenceInfoGetRefSeqCount ( const ReferenceInfo *self, uint32_t* count )
+{
+    assert(self);
+    assert(self->vt.v1->getRefSeqCount);
+    return self->vt.v1->getRefSeqCount(self, count);
+}
+
+rc_t CC ReferenceInfoGetRefSeq ( const ReferenceInfo *self, uint32_t n, ReferenceSequence *result )
+{
+    assert(self);
+    assert(self->vt.v1->getRefSeq);
+    return self->vt.v1->getRefSeq(self, n, result);
+}
+
+rc_t CC ReferenceInfoGetReadGroupCount ( const ReferenceInfo *self, uint32_t *count )
+{
+    assert(self);
+    assert(self->vt.v1->getReadGroupCount);
+    return self->vt.v1->getReadGroupCount(self, count);
+}
+
+rc_t CC ReferenceInfoGetReadGroup ( const ReferenceInfo *self, unsigned n, ReadGroup *result )
+{
+    assert(self);
+    assert(self->vt.v1->getReadGroup);
+    return self->vt.v1->getReadGroup(self, n, result);
+}
+
+rc_t CC ReferenceInfoGetReadGroupByName ( const ReferenceInfo *self, const char *name, ReadGroup *result )
+{
+    assert(self);
+    assert(self->vt.v1->getReadGroupByName );
+    return self->vt.v1->getReadGroupByName(self, name, result);
+}
diff --git a/libs/loader/common-writer.c b/libs/loader/common-writer.c
new file mode 100644
index 0000000..827f481
--- /dev/null
+++ b/libs/loader/common-writer.c
@@ -0,0 +1,1987 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+ 
+#include <sysalloc.h>
+#include <string.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+#include <klib/status.h>
+
+#include <kdb/btree.h>
+
+#include <kfs/pmem.h>
+#include <kfs/file.h>
+#include <kfs/pagefile.h>
+
+#include <kapp/progressbar.h>
+#include <kapp/main.h>
+
+#include <vdb/manager.h>
+#include <vdb/database.h>
+
+#include <loader/sequence-writer.h>
+#include <loader/alignment-writer.h>
+#include <loader/reference-writer.h>
+#include <loader/common-writer.h>
+#include <loader/common-reader-priv.h>
+
+/*--------------------------------------------------------------------------
+ * ctx_value_t, FragmentInfo
+ */
+typedef struct {
+    uint32_t primaryId[2];
+    uint32_t spotId;
+    uint32_t fragmentId;
+    uint16_t seqHash[2];
+    uint8_t  platform;
+    uint8_t  pId_ext[2];
+    uint8_t  spotId_ext;
+    uint8_t  alignmentCount[2]; /* 0..254; 254: saturated max; 255: special meaning "too many" */
+    uint8_t  unmated: 1,
+             pcr_dup: 1,
+             has_a_read: 1,
+             unaligned_1: 1,
+             unaligned_2: 1;
+} ctx_value_t;
+
+#define CTX_VALUE_SET_P_ID(O,N,V) do { int64_t tv = (V); (O).primaryId[N] = (uint32_t)tv; (O).pId_ext[N] = tv >> 32; } while(0);
+#define CTX_VALUE_GET_P_ID(O,N) ((((int64_t)((O).pId_ext[N])) << 32) | (O).primaryId[N])
+
+#define CTX_VALUE_SET_S_ID(O,V) do { int64_t tv = (V); (O).spotId = (uint32_t)tv; (O).spotId_ext = tv >> 32; } while(0);
+#define CTX_VALUE_GET_S_ID(O) ((((int64_t)(O).spotId_ext) << 32) | (O).spotId)
+
+typedef struct FragmentInfo {
+    uint64_t ti;
+    uint32_t readlen;
+    uint8_t  aligned;
+    uint8_t  is_bad;
+    uint8_t  orientation;
+    uint8_t  otherReadNo;
+    uint8_t  sglen;
+    uint8_t  cskey;
+} FragmentInfo;
+
+
+rc_t OpenKBTree(const CommonWriterSettings* settings, struct KBTree **const rslt, unsigned n, unsigned max)
+{
+    size_t const cacheSize = (((settings->cache_size - (settings->cache_size / 2) - (settings->cache_size / 8)) / max)
+                            + 0xFFFFF) & ~((size_t)0xFFFFF);
+    KFile *file = NULL;
+    KDirectory *dir;
+    char fname[4096];
+    rc_t rc;
+
+    rc = KDirectoryNativeDir(&dir);
+    if (rc)
+        return rc;
+    
+    rc = string_printf(fname, sizeof(fname), NULL, "%s/key2id.%u.%u", settings->tmpfs, settings->pid, n); if (rc) return rc;
+    STSMSG(1, ("Path for scratch files: %s\n", fname));
+    rc = KDirectoryCreateFile(dir, &file, true, 0600, kcmInit, fname);
+    KDirectoryRemove(dir, 0, fname);
+    KDirectoryRelease(dir);
+    if (rc == 0) {
+        rc = KBTreeMakeUpdate(rslt, file, cacheSize,
+                              false, kbtOpaqueKey,
+                              1, 255, sizeof ( uint32_t ),
+                              NULL
+                              );
+        KFileRelease(file);
+#if PERF
+        if (rc == 0) {
+            static unsigned treecount = 0;
+
+            (void)PLOGMSG(klogInfo, (klogInfo, "Number of trees: $(cnt)", "cnt=%u", ++treecount));
+        }
+#endif
+    }
+    return rc;
+}
+
+rc_t GetKeyIDOld(const CommonWriterSettings* settings, SpotAssembler* const ctx, uint64_t *const rslt, bool *const wasInserted, char const key[], char const name[], unsigned const namelen)
+{
+    unsigned const keylen = strlen(key);
+    rc_t rc;
+    uint64_t tmpKey;
+
+    if (ctx->key2id_count == 0) {
+        rc = OpenKBTree(settings, &ctx->key2id[0], 1, 1);
+        if (rc) return rc;
+        ctx->key2id_count = 1;
+    }
+    if (memcmp(key, name, keylen) == 0) {
+        /* qname starts with read group; no append */
+        tmpKey = ctx->idCount[0];
+        rc = KBTreeEntry(ctx->key2id[0], &tmpKey, wasInserted, name, namelen);
+    }
+    else {
+        char sbuf[4096];
+        char *buf = sbuf;
+        char *hbuf = NULL;
+        size_t bsize = sizeof(sbuf);
+        size_t actsize;
+        
+        if (keylen + namelen + 2 > bsize) {
+            hbuf = malloc(bsize = keylen + namelen + 2);
+            if (hbuf == NULL)
+                return RC(rcExe, rcName, rcAllocating, rcMemory, rcExhausted);
+            buf = hbuf;
+        }
+        rc = string_printf(buf, bsize, &actsize, "%s\t%.*s", key, (int)namelen, name);
+        
+        tmpKey = ctx->idCount[0];
+        rc = KBTreeEntry(ctx->key2id[0], &tmpKey, wasInserted, buf, actsize);
+        if (hbuf)
+            free(hbuf);
+    }
+    if (rc == 0) {
+        *rslt = tmpKey;
+        if (*wasInserted)
+            ++ctx->idCount[0];
+    }
+    return rc;
+}
+
+static char const *Print_ctx_value_t(ctx_value_t const *const self)
+{
+    static char buffer[4096];
+    rc_t rc = string_printf(buffer, sizeof(buffer), NULL, "pid: { %lu, %lu }, sid: %lu, fid: %u, alc: { %u, %u }, flg: %x", CTX_VALUE_GET_P_ID(*self, 0), CTX_VALUE_GET_P_ID(*self, 1), CTX_VALUE_GET_S_ID(*self), self->fragmentId, self->alignmentCount[0], self->alignmentCount[1], self->alignmentCount[2]);
+
+    if (rc)
+        return 0;
+    return buffer;
+}
+
+static unsigned HashKey(void const *key, unsigned keylen)
+{
+    /* There is nothing special about this hash. It was randomly generated. */
+    static const uint8_t T1[] = {
+         64, 186,  39, 203,  54, 211,  98,  32,  26,  23, 219,  94,  77,  60,  56, 184,
+        129, 242,  10,  91,  84, 192,  19, 197, 231, 133, 125, 244,  48, 176, 160, 164,
+         17,  41,  57, 137,  44, 196, 116, 146, 105,  40, 122,  47, 220, 226, 213, 212,
+        107, 191,  52, 144,   9, 145,  81, 101, 217, 206,  85, 134, 143,  58, 128,  20,
+        236, 102,  83, 149, 148, 180, 167, 163,  12, 239,  31,   0,  73, 152,   1,  15,
+         75, 200,   4, 165,   5,  66,  25, 111, 255,  70, 174, 151,  96, 126, 147,  34,
+        112, 161, 127, 181, 237,  78,  37,  74, 222, 123,  21, 132,  95,  51, 141,  45,
+         61, 131, 193,  68,  62, 249, 178,  33,   7, 195, 228,  82,  27,  46, 254,  90,
+        185, 240, 246, 124, 205, 182,  42,  22, 198,  69, 166,  92, 169, 136, 223, 245,
+        118,  97, 115,  80, 252, 209,  49,  79, 221,  38,  28,  35,  36, 208, 187, 248,
+        158, 201, 202, 168,   2,  18, 189, 119, 216, 214,  11,   6,  89,  16, 229, 109,
+        120,  43, 162, 106, 204,   8, 199, 235, 142, 210,  86, 153, 227, 230,  24, 100,
+        224, 113, 190, 243, 218, 215, 225, 173,  99, 238, 138,  59, 183, 154, 171, 232,
+        157, 247, 233,  67,  88,  50, 253, 251, 140, 104, 156, 170, 150, 103, 117, 110,
+        155,  72, 207, 250, 159, 194, 177, 130, 135,  87,  71, 175,  14,  55, 172, 121,
+        234,  13,  30, 241,  93, 188,  53, 114,  76,  29,  65,   3, 179, 108,  63, 139
+    };
+    unsigned h = 0x55;
+    unsigned i = keylen;
+    
+    do { h = T1[h ^ ((uint8_t)i)]; } while ((i >>= 8) != 0);
+
+    for (i = 0; i != keylen; ++i)
+        h = T1[h ^ ((uint8_t const *)key)[i]];
+
+    return h;
+}
+
+static unsigned SeqHashKey(void const *key, unsigned keylen)
+{
+    /* There is nothing special about this hash. It was randomly generated. */
+    static const uint8_t T1[] = {
+         64, 186,  39, 203,  54, 211,  98,  32,  26,  23, 219,  94,  77,  60,  56, 184,
+        129, 242,  10,  91,  84, 192,  19, 197, 231, 133, 125, 244,  48, 176, 160, 164,
+         17,  41,  57, 137,  44, 196, 116, 146, 105,  40, 122,  47, 220, 226, 213, 212,
+        107, 191,  52, 144,   9, 145,  81, 101, 217, 206,  85, 134, 143,  58, 128,  20,
+        236, 102,  83, 149, 148, 180, 167, 163,  12, 239,  31,   0,  73, 152,   1,  15,
+         75, 200,   4, 165,   5,  66,  25, 111, 255,  70, 174, 151,  96, 126, 147,  34,
+        112, 161, 127, 181, 237,  78,  37,  74, 222, 123,  21, 132,  95,  51, 141,  45,
+         61, 131, 193,  68,  62, 249, 178,  33,   7, 195, 228,  82,  27,  46, 254,  90,
+        185, 240, 246, 124, 205, 182,  42,  22, 198,  69, 166,  92, 169, 136, 223, 245,
+        118,  97, 115,  80, 252, 209,  49,  79, 221,  38,  28,  35,  36, 208, 187, 248,
+        158, 201, 202, 168,   2,  18, 189, 119, 216, 214,  11,   6,  89,  16, 229, 109,
+        120,  43, 162, 106, 204,   8, 199, 235, 142, 210,  86, 153, 227, 230,  24, 100,
+        224, 113, 190, 243, 218, 215, 225, 173,  99, 238, 138,  59, 183, 154, 171, 232,
+        157, 247, 233,  67,  88,  50, 253, 251, 140, 104, 156, 170, 150, 103, 117, 110,
+        155,  72, 207, 250, 159, 194, 177, 130, 135,  87,  71, 175,  14,  55, 172, 121,
+        234,  13,  30, 241,  93, 188,  53, 114,  76,  29,  65,   3, 179, 108,  63, 139
+    };
+    unsigned h1 = 0x55;
+    unsigned h2 = 0x22;
+    unsigned i = keylen;
+    
+    do { h1 = T1[h1 ^ ((uint8_t)i)]; } while ((i >>= 8) != 0);
+
+    for (i = 0; i != keylen; ++i)
+    {
+        unsigned temp = ((uint8_t const *)key)[i];
+        h1 = T1[h1 ^ temp];
+        h2 = T1[h2 ^ temp];
+    }
+
+    return (h1 << 8) | h2;
+}
+
+rc_t GetKeyID(CommonWriterSettings* settings, SpotAssembler *const ctx, uint64_t *const rslt, bool *const wasInserted, char const key[], char const name[], unsigned const namelen)
+{
+    if (ctx->key2id_max == 1)
+        return GetKeyIDOld(settings, ctx, rslt, wasInserted, key, name, namelen);
+    else {
+        unsigned const keylen = strlen(key);
+        unsigned const h = HashKey(key, keylen);
+        unsigned f;
+        unsigned e = ctx->key2id_count;
+        uint64_t tmpKey;
+        
+        *rslt = 0;
+        {{
+            uint32_t const bucket_value = ctx->key2id_hash[h];
+            unsigned const n  = (uint8_t) bucket_value;
+            unsigned const i1 = (uint8_t)(bucket_value >>  8);
+            unsigned const i2 = (uint8_t)(bucket_value >> 16);
+            unsigned const i3 = (uint8_t)(bucket_value >> 24);
+            
+            if (n > 0 && strcmp(key, ctx->key2id_names + ctx->key2id_name[i1]) == 0) {
+                f = i1;
+                /*
+                ctx->key2id_hash[h] = (i3 << 24) | (i2 << 16) | (i1 << 8) | n;
+                 */
+                goto GET_ID;
+            }
+            if (n > 1 && strcmp(key, ctx->key2id_names + ctx->key2id_name[i2]) == 0) {
+                f = i2;
+                ctx->key2id_hash[h] = (i3 << 24) | (i1 << 16) | (i2 << 8) | n;
+                goto GET_ID;
+            }
+            if (n > 2 && strcmp(key, ctx->key2id_names + ctx->key2id_name[i3]) == 0) {
+                f = i3;
+                ctx->key2id_hash[h] = (i2 << 24) | (i1 << 16) | (i3 << 8) | n;
+                goto GET_ID;
+            }
+        }}
+        f = 0;
+        while (f < e) {
+            unsigned const m = (f + e) / 2;
+            unsigned const oid = ctx->key2id_oid[m];
+            int const diff = strcmp(key, ctx->key2id_names + ctx->key2id_name[oid]);
+            
+            if (diff < 0)
+                e = m;
+            else if (diff > 0)
+                f = m + 1;
+            else {
+                f = oid;
+                goto GET_ID;
+            }
+        }
+        if (ctx->key2id_count < ctx->key2id_max) {
+            unsigned const name_max = ctx->key2id_name_max + keylen + 1;
+            KBTree *tree;
+            rc_t rc = OpenKBTree(settings, &tree, ctx->key2id_count + 1, 1); /* ctx->key2id_max); */
+            
+            if (rc) return rc;
+            
+            if (ctx->key2id_name_alloc < name_max) {
+                unsigned alloc = ctx->key2id_name_alloc;
+                void *tmp;
+                
+                if (alloc == 0)
+                    alloc = 4096;
+                while (alloc < name_max)
+                    alloc <<= 1;
+                tmp = realloc(ctx->key2id_names, alloc);
+                if (tmp == NULL)
+                    return RC(rcExe, rcName, rcAllocating, rcMemory, rcExhausted);
+                ctx->key2id_names = tmp;
+                ctx->key2id_name_alloc = alloc;
+            }
+            if (f < ctx->key2id_count) {
+                memmove(&ctx->key2id_oid[f + 1], &ctx->key2id_oid[f], (ctx->key2id_count - f) * sizeof(ctx->key2id_oid[f]));
+            }
+            ctx->key2id_oid[f] = ctx->key2id_count;
+            ++ctx->key2id_count;
+            f = ctx->key2id_oid[f];
+            ctx->key2id_name[f] = ctx->key2id_name_max;
+            ctx->key2id_name_max = name_max;
+
+            memcpy(&ctx->key2id_names[ctx->key2id_name[f]], key, keylen + 1);
+            ctx->key2id[f] = tree;
+            ctx->idCount[f] = 0;
+            if ((uint8_t)ctx->key2id_hash[h] < 3) {
+                unsigned const n = (uint8_t)ctx->key2id_hash[h] + 1;
+                
+                ctx->key2id_hash[h] = (((ctx->key2id_hash[h] & ~(0xFFu)) | f) << 8) | n;
+            }
+            else {
+                /* the hash function isn't working too well
+                 * keep the 3 mru
+                 */
+                ctx->key2id_hash[h] = (((ctx->key2id_hash[h] & ~(0xFFu)) | f) << 8) | 3;
+            }
+        GET_ID:
+            tmpKey = ctx->idCount[f];
+            rc = KBTreeEntry(ctx->key2id[f], &tmpKey, wasInserted, name, namelen);
+            if (rc == 0) {
+                *rslt = (((uint64_t)f) << 32) | tmpKey;
+                if (*wasInserted)
+                    ++ctx->idCount[f];
+                assert(tmpKey < ctx->idCount[f]);
+            }
+            return rc;
+        }
+        return RC(rcExe, rcTree, rcAllocating, rcConstraint, rcViolated);
+    }
+}
+
+static rc_t OpenMMapFile(const CommonWriterSettings* settings, SpotAssembler *const ctx, KDirectory *const dir)
+{
+    KFile *file = NULL;
+    char fname[4096];
+    rc_t rc = string_printf(fname, sizeof(fname), NULL, "%s/id2value.%u", settings->tmpfs, settings->pid);
+    
+    if (rc)
+        return rc;
+    
+    rc = KDirectoryCreateFile(dir, &file, true, 0600, kcmInit, fname);
+    KDirectoryRemove(dir, 0, fname);
+    if (rc == 0)
+        rc = MMArrayMake(&ctx->id2value, file, sizeof(ctx_value_t));
+    KFileRelease(file);
+    return rc;
+}
+
+static rc_t OpenMBankFile(const CommonWriterSettings* settings, SpotAssembler *const ctx, KDirectory *const dir, int which, size_t climit)
+{
+    KFile *file = NULL;
+    char fname[4096];
+    char const *const suffix = which == 1 ? "One" : "Both";
+    KMemBank **const mbank = which == 1 ? &ctx->fragsOne : &ctx->fragsBoth;
+    rc_t rc = string_printf(fname, sizeof(fname), NULL, "%s/frag_data%s.%u", settings->tmpfs, suffix, settings->pid);
+    
+    if (rc)
+        return rc;
+    
+    rc = KDirectoryCreateFile(dir, &file, true, 0600, kcmInit, fname);
+    KDirectoryRemove(dir, 0, fname);
+    if (rc == 0) {
+        KPageFile *backing;
+        
+        rc = KPageFileMakeUpdate(&backing, file, climit, false);
+        KFileRelease(file);
+        if (rc == 0) {
+            rc = KMemBankMake(mbank, FRAG_CHUNK_SIZE, 0, backing);
+            KPageFileRelease(backing);
+        }
+    }
+    return rc;
+}
+
+rc_t SetupContext(const CommonWriterSettings* settings, SpotAssembler *ctx)
+{
+    rc_t rc = 0;
+
+    memset(ctx, 0, sizeof(*ctx));
+    
+    ctx->pass = 1;
+    
+    if (settings->mode == mode_Archive) {
+        KDirectory *dir;
+        size_t fragSizeBoth; /*** temporary hold for first side of mate pair with both sides aligned**/
+        size_t fragSizeOne; /*** temporary hold for first side of mate pair with one side aligned**/
+
+        STSMSG(1, ("Cache size: %uM\n", settings->cache_size / 1024 / 1024));
+        
+        fragSizeBoth    =   (settings->cache_size / 8);
+        fragSizeOne     =   (settings->cache_size / 2);
+
+        rc = KLoadProgressbar_Make(&ctx->progress[0], 0); if (rc) return rc;
+        rc = KLoadProgressbar_Make(&ctx->progress[1], 0); if (rc) return rc;
+        rc = KLoadProgressbar_Make(&ctx->progress[2], 0); if (rc) return rc;
+        rc = KLoadProgressbar_Make(&ctx->progress[3], 0); if (rc) return rc;
+        
+        KLoadProgressbar_Append(ctx->progress[0], 100 * settings->numfiles);
+        
+        rc = KDirectoryNativeDir(&dir);
+        if (rc == 0)
+            rc = OpenMMapFile(settings, ctx, dir);
+        if (rc == 0)
+            rc = OpenMBankFile(settings, ctx, dir, 0, fragSizeBoth);
+        if (rc == 0)
+            rc = OpenMBankFile(settings, ctx, dir, 1, fragSizeOne);
+        KDirectoryRelease(dir);
+    }
+    return rc;
+}
+
+void ContextReleaseMemBank(SpotAssembler *ctx)
+{
+    KMemBankRelease(ctx->fragsOne);
+    ctx->fragsOne = NULL;
+    KMemBankRelease(ctx->fragsBoth);
+    ctx->fragsBoth = NULL;
+}
+
+void ContextRelease(SpotAssembler *ctx)
+{
+    KLoadProgressbar_Release(ctx->progress[0], true);
+    KLoadProgressbar_Release(ctx->progress[1], true);
+    KLoadProgressbar_Release(ctx->progress[2], true);
+    KLoadProgressbar_Release(ctx->progress[3], true);
+    MMArrayWhack(ctx->id2value);
+}
+
+
+
+rc_t WriteSoloFragments(const CommonWriterSettings* settings, SpotAssembler* ctx, SequenceWriter *seq)
+{
+    uint32_t i;
+    unsigned j;
+    uint32_t fcountOne  = 0;
+    uint32_t fcountBoth = 0;
+    uint64_t idCount = 0;
+    rc_t rc;
+    KDataBuffer fragBuf;
+    SequenceRecord srec;
+    
+    ++ctx->pass;
+    memset(&srec, 0, sizeof(srec));
+    
+    rc = KDataBufferMake(&fragBuf, 8, 0);
+    if (rc) {
+        (void)LOGERR(klogErr, rc, "KDataBufferMake failed");
+        return rc;
+    }
+    for (idCount = 0, j = 0; j < ctx->key2id_count; ++j) {
+        idCount += ctx->idCount[j];
+    }
+    KLoadProgressbar_Append(ctx->progress[ctx->pass - 1], idCount);
+    
+    for (idCount = 0, j = 0; j < ctx->key2id_count; ++j) {
+        for (i = 0; i != ctx->idCount[j]; ++i, ++idCount) {
+            uint64_t const keyId = ((uint64_t)j << 32) | i;
+            ctx_value_t *value;
+            size_t rsize;
+            uint64_t id;
+            uint64_t sz;
+            unsigned readLen[2];
+            unsigned read = 0;
+            FragmentInfo const *fip;
+            uint8_t const *src;
+            KMemBank *frags;
+            
+            rc = MMArrayGet(ctx->id2value, (void **)&value, keyId);
+            if (rc)
+                break;
+            KLoadProgressbar_Process(ctx->progress[ctx->pass - 1], 1, false);
+            if (value->fragmentId == 0)
+                continue;
+            if (value->fragmentId & 1) {
+                frags = ctx->fragsOne;
+                fcountOne++;
+            }
+            else {
+                frags = ctx->fragsBoth; 
+                fcountBoth++;
+            }
+            id = value->fragmentId >> 1;
+            
+            rc = KMemBankSize(frags, id, &sz);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "KMemBankSize failed");
+                break;
+            }
+            rc = KDataBufferResize(&fragBuf, (size_t)sz);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "KDataBufferResize failed");
+                break;
+            }
+            rc = KMemBankRead(frags, id, 0, fragBuf.base, sz, &rsize);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "KMemBankRead failed");
+                break;
+            }
+            assert( rsize == sz );
+            fip = (FragmentInfo const *)fragBuf.base;
+            src = (uint8_t const *)&fip[1];
+            
+            readLen[0] = readLen[1] = 0;
+            if (!value->unmated && (   (fip->aligned && CTX_VALUE_GET_P_ID(*value, 0) == 0)
+                                     || (value->unaligned_2)))
+            {
+                read = 1;
+            }
+            
+            readLen[read] = fip->readlen;
+            rc = SequenceRecordInit(&srec, value->unmated ? 1 : 2, readLen);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "SequenceRecordInit failed");
+                break;
+            }
+            
+            srec.ti[read] = fip->ti;
+            srec.aligned[read] = fip->aligned;
+            srec.is_bad[read] = fip->is_bad;
+            srec.orientation[read] = fip->orientation;
+            srec.cskey[read] = fip->cskey;
+            memcpy(srec.seq + srec.readStart[read], src, srec.readLen[read]);
+            src += fip->readlen;
+            memcpy(srec.qual + srec.readStart[read], src, srec.readLen[read]);
+            src += fip->readlen;
+            srec.spotGroup = (char *)src;
+            srec.spotGroupLen = fip->sglen;
+            srec.keyId = keyId;
+            
+            rc = SequenceWriteRecord(seq, &srec, ctx->isColorSpace, value->pcr_dup, value->platform, 
+                                    settings->keepMismatchQual, settings->no_real_output, settings->hasTI, settings->QualQuantizer);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "SequenceWriteRecord failed");
+                break;
+            }
+            /*rc = KMemBankFree(frags, id);*/
+            CTX_VALUE_SET_S_ID(*value, ++ctx->spotId);
+        }
+    }
+    /*printf("DONE_SOLO:\tcnt2=%d\tcnt1=%d\n",fcountBoth,fcountOne);*/
+    KDataBufferWhack(&fragBuf);
+    KDataBufferWhack(&srec.storage);
+    return rc;
+}
+
+rc_t AlignmentUpdateSpotInfo(SpotAssembler *ctx, struct AlignmentWriter *align)
+{
+    rc_t rc;
+    uint64_t keyId;
+    
+    ++ctx->pass;
+
+    KLoadProgressbar_Append(ctx->progress[ctx->pass - 1], ctx->alignCount);
+
+    rc = AlignmentStartUpdatingSpotIds(align);
+    while (rc == 0 && (rc = Quitting()) == 0) {
+        ctx_value_t const *value;
+        
+        rc = AlignmentGetSpotKey(align, &keyId);
+        if (rc) {
+            if (GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound)
+                rc = 0;
+            break;
+        }
+        assert(keyId >> 32 < ctx->key2id_count);
+        assert((uint32_t)keyId < ctx->idCount[keyId >> 32]);
+        rc = MMArrayGet(ctx->id2value, (void **)&value, keyId);
+        if (rc == 0) {
+            int64_t const spotId = CTX_VALUE_GET_S_ID(*value);
+            
+            if (spotId == 0) {
+                (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(id)' was never assigned a spot id, probably has no primary alignments", "id=%lx", keyId));
+                /* (void)PLOGMSG(klogWarn, (klogWarn, "Spot #$(i): { $(s) }", "i=%lu,s=%s", keyId, Print_ctx_value_t(value))); */
+            }
+            rc = AlignmentWriteSpotId(align, spotId);
+        }
+        KLoadProgressbar_Process(ctx->progress[ctx->pass - 1], 1, false);
+    }
+    return rc;
+}
+
+rc_t SequenceUpdateAlignInfo(SpotAssembler *ctx, struct SequenceWriter *seq)
+{
+    rc_t rc = 0;
+    uint64_t row;
+    const ctx_value_t *value;
+    uint64_t keyId;
+    
+    ++ctx->pass;
+    KLoadProgressbar_Append(ctx->progress[ctx->pass - 1], ctx->spotId + 1);
+    
+    for (row = 1; row <= ctx->spotId; ++row) {
+        rc = SequenceReadKey(seq, row, &keyId);
+        if (rc) {
+            (void)PLOGERR(klogErr, (klogErr, rc, "Failed to get key for row $(row)", "row=%u", (unsigned)row));
+            break;
+        }
+        rc = MMArrayGet(ctx->id2value, (void **)&value, keyId);
+        if (rc) {
+            (void)PLOGERR(klogErr, (klogErr, rc, "Failed to read info for row $(row), index $(idx)", "row=%u,idx=%u", (unsigned)row, (unsigned)keyId));
+            break;
+        }
+        if (row != CTX_VALUE_GET_S_ID(*value)) {
+            rc = RC(rcApp, rcTable, rcWriting, rcData, rcUnexpected);
+            (void)PLOGMSG(klogErr, (klogErr, "Unexpected spot id $(spotId) for row $(row), index $(idx)", "spotId=%u,row=%u,idx=%u", (unsigned)CTX_VALUE_GET_S_ID(*value), (unsigned)row, (unsigned)keyId));
+            break;
+        }
+        {{
+            int64_t primaryId[2];
+            /*uint64_t const spotId = CTX_VALUE_GET_S_ID(*value);*/
+            
+            primaryId[0] = CTX_VALUE_GET_P_ID(*value, 0);
+            primaryId[1] = CTX_VALUE_GET_P_ID(*value, 1);
+            
+            rc = SequenceUpdateAlignData(seq, row, value->unmated ? 1 : 2,
+                                         primaryId,
+                                         value->alignmentCount);
+        }}
+        if (rc) {
+            (void)LOGERR(klogErr, rc, "Failed updating AlignmentWriter data in sequence table");
+            break;
+        }
+        KLoadProgressbar_Process(ctx->progress[ctx->pass - 1], 1, false);
+    }
+    return rc;
+}
+
+void EditAlignedQualities(const CommonWriterSettings* settings, uint8_t qual[], bool const hasMismatch[], unsigned readlen) /* generic */
+{
+    unsigned i;
+    
+    for (i = 0; i < readlen; ++i) {
+        uint8_t const q = hasMismatch[i] ? settings->alignedQualValue : qual[i];
+        
+        qual[i] = q;
+    }
+}
+
+void EditUnalignedQualities(uint8_t qual[], bool const hasMismatch[], unsigned readlen) /* generic */
+{
+    unsigned i;
+    
+    for (i = 0; i < readlen; ++i) {
+        uint8_t const q = (qual[i] & 0x7F) | (hasMismatch[i] ? 0x80 : 0);
+        
+        qual[i] = q;
+    }
+}
+
+bool platform_cmp(char const platform[], char const test[])
+{
+    unsigned i;
+
+    for (i = 0; ; ++i) {
+        int ch1 = test[i];
+        int ch2 = toupper(platform[i]);
+        
+        if (ch1 != ch2)
+            break;
+        if (ch1 == 0)
+            return true;
+    }
+    return false;
+}
+
+rc_t CheckLimitAndLogError(CommonWriterSettings* settings)
+{
+    ++settings->errCount;
+    if (settings->maxErrCount > 0 && settings->errCount > settings->maxErrCount) {
+        (void)PLOGERR(klogErr, (klogErr, RC(rcAlign, rcFile, rcReading, rcError, rcExcessive), 
+                                "Number of errors $(cnt) exceeds limit of $(max): Exiting", "cnt=%lu,max=%lu", 
+                                settings->errCount, settings->maxErrCount));
+        return RC(rcAlign, rcFile, rcReading, rcError, rcExcessive);
+    }
+    return 0;
+}
+
+void RecordNoMatch(const CommonWriterSettings* settings, char const readName[], char const refName[], uint32_t const refPos)
+{
+    if (settings->noMatchLog) {
+        static uint64_t lpos = 0;
+        char logbuf[256];
+        size_t len;
+        
+        if (string_printf(logbuf, sizeof(logbuf), &len, "%s\t%s\t%u\n", readName, refName, refPos) == 0) {
+            KFileWrite(settings->noMatchLog, lpos, logbuf, len, NULL);
+            lpos += len;
+        }
+    }
+}
+
+rc_t LogNoMatch(CommonWriterSettings* settings, char const readName[], char const refName[], unsigned rpos, unsigned matches)
+{
+    rc_t const rc = CheckLimitAndLogError(settings);
+    static unsigned count = 0;
+    
+    ++count;
+    if (rc) {
+        (void)PLOGMSG(klogInfo, (klogInfo, "This is the last warning; this class of warning occurred $(occurred) times",
+                                 "occurred=%u", count));
+        (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' contains too few ($(count)) matching bases to reference '$(ref)' at $(pos)",
+                                 "name=%s,ref=%s,pos=%u,count=%u", readName, refName, rpos, matches));
+    }
+    else if (settings->maxWarnCount_NoMatch == 0 || count < settings->maxWarnCount_NoMatch)
+        (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' contains too few ($(count)) matching bases to reference '$(ref)' at $(pos)",
+                                 "name=%s,ref=%s,pos=%u,count=%u", readName, refName, rpos, matches));
+    return rc;
+}
+
+rc_t LogDupConflict(CommonWriterSettings* settings, char const readName[])
+{
+    rc_t const rc = CheckLimitAndLogError(settings);
+    static unsigned count = 0;
+    
+    ++count;
+    if (rc) {
+        (void)PLOGMSG(klogInfo, (klogInfo, "This is the last warning; this class of warning occurred $(occurred) times",
+                                 "occurred=%u", count));
+        (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+                                 "Spot '$(name)' is both a duplicate and NOT a duplicate!",
+                                 "name=%s", readName));
+    }
+    else if (settings->maxWarnCount_DupConflict == 0 || count < settings->maxWarnCount_DupConflict)
+        (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+                                 "Spot '$(name)' is both a duplicate and NOT a duplicate!",
+                                 "name=%s", readName));
+    return rc;
+}
+
+void COPY_QUAL(uint8_t D[], uint8_t const S[], unsigned const L, bool const R)
+{
+    if (R) {
+        unsigned i;
+        unsigned j;
+        
+        for (i = 0, j = L - 1; i != L; ++i, --j)
+            D[i] = S[j];
+    }
+    else
+        memcpy(D, S, L);
+}
+
+void COPY_READ(INSDC_dna_text D[], INSDC_dna_text const S[], unsigned const L, bool const R)
+{
+    static INSDC_dna_text const compl[] = {
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 , '.',  0 , 
+        '0', '1', '2', '3',  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 , 'T', 'V', 'G', 'H',  0 ,  0 , 'C', 
+        'D',  0 ,  0 , 'M',  0 , 'K', 'N',  0 , 
+         0 ,  0 , 'Y', 'S', 'A', 'A', 'B', 'W', 
+         0 , 'R',  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 , 'T', 'V', 'G', 'H',  0 ,  0 , 'C', 
+        'D',  0 ,  0 , 'M',  0 , 'K', 'N',  0 , 
+         0 ,  0 , 'Y', 'S', 'A', 'A', 'B', 'W', 
+         0 , 'R',  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
+    };
+    if (R) {
+        unsigned i;
+        unsigned j;
+        
+        for (i = 0, j = L - 1; i != L; ++i, --j)
+            D[i] = compl[((uint8_t const *)S)[j]];
+    }
+    else
+        memcpy(D, S, L);
+}
+
+/*--------------------------------------------------------------------------
+ * ArchiveFile
+ */
+static uint8_t GetMapQ(Alignment const *rec)
+{
+    uint8_t mapQ;
+    
+    AlignmentGetMapQuality(rec, &mapQ);
+    return mapQ;
+}
+
+INSDC_SRA_platform_id PlatformToId(const char* name)
+{
+    if (name != NULL)
+    {
+        switch (toupper(name[0])) {
+        case 'C':
+            if (platform_cmp(name, "COMPLETE GENOMICS") || platform_cmp(name, "COMPLETE_GENOMICS"))
+                return SRA_PLATFORM_COMPLETE_GENOMICS;
+            if (platform_cmp(name, "CAPILLARY"))
+                return SRA_PLATFORM_SANGER;
+            break;
+        case 'H':
+            if (platform_cmp(name, "HELICOS"))
+                return SRA_PLATFORM_HELICOS;
+            break;
+        case 'I':
+            if (platform_cmp(name, "ILLUMINA"))
+                return SRA_PLATFORM_ILLUMINA;
+            if (platform_cmp(name, "IONTORRENT"))
+                return SRA_PLATFORM_ION_TORRENT;
+            break;
+        case 'L':
+            if (platform_cmp(name, "LS454"))
+                return SRA_PLATFORM_454;
+            break;
+        case 'P':
+            if (platform_cmp(name, "PACBIO"))
+                return SRA_PLATFORM_PACBIO_SMRT;
+            break;
+        case 'S':
+            if (platform_cmp(name, "SOLID"))
+                return SRA_PLATFORM_ABSOLID;
+            break;
+        default:
+            break;
+        }
+    }
+    return SRA_PLATFORM_UNDEFINED;
+}
+
+INSDC_SRA_platform_id GetINSDCPlatform(ReferenceInfo const *ref, char const name[]) {
+    if (ref != NULL && name != NULL) {
+        ReadGroup rg;
+
+        rc_t rc = ReferenceInfoGetReadGroupByName(ref, name, &rg);
+        if (rc == 0 && rg.platform) 
+            return PlatformToId(rg.platform) ;
+    }
+    return SRA_PLATFORM_UNDEFINED;
+}
+
+void ParseSpotName(char const name[], size_t* namelen)
+{ /* remove trailing #... */
+    const char* hash = string_chr(name, *namelen, '#');
+    if (hash)
+        *namelen = hash - name;
+}
+
+
+static const int8_t toPhred[] =
+{
+              0, 1, 1, 2, 2, 3, 3,
+     4, 4, 5, 5, 6, 7, 8, 9,10,10,
+    11,12,13,14,15,16,17,18,19,20,
+    21,22,23,24,25,26,27,28,29,30,
+    31,32,33,34,35,36,37,38,39,40
+};
+
+static int8_t LogOddsToPhred ( int8_t logOdds )
+{ /* conversion table copied from interface/ncbi/seq.vschema */
+    if (logOdds < -6)
+        return 0;
+    if (logOdds > 40)
+        return 40;
+    return toPhred[logOdds + 6];
+}
+
+rc_t ArchiveFile(const struct ReaderFile *reader, 
+                 CommonWriterSettings* G,
+                 struct SpotAssembler *ctx, 
+                 struct Reference *ref, 
+                 struct SequenceWriter *seq, 
+                 struct AlignmentWriter *align,
+                 bool *had_alignments, 
+                 bool *had_sequences)
+{
+    KDataBuffer buf;
+    KDataBuffer fragBuf;
+    KDataBuffer cigBuf;
+    rc_t rc;
+    int32_t lastRefSeqId = -1;
+    size_t rsize;
+    uint64_t keyId = 0;
+    uint64_t reccount = 0;
+    SequenceRecord srec;
+    char spotGroup[512];
+    size_t namelen;
+    unsigned progress = 0;
+    unsigned warned = 0;
+    long     fcountBoth=0;
+    long     fcountOne=0;
+    int skipRefSeqID = -1;
+    uint64_t recordsProcessed = 0;
+    uint64_t filterFlagConflictRecords=0; /*** counts number of conflicts between flags 'duplicate' and 'lowQuality' ***/
+#define MAX_WARNINGS_FLAG_CONFLICT 10000 /*** maximum errors to report ***/
+
+    bool isColorSpace = false;
+    bool isNotColorSpace = G->noColorSpace;
+    char alignGroup[32];
+    size_t alignGroupLen;
+    
+    const ReferenceInfo* header = NULL;
+    
+    rc = ReaderFileGetReferenceInfo(reader, &header);
+    if (rc)
+        return rc;
+
+    if (ctx->key2id_max == 0) {
+        if (header != NULL) {
+            uint32_t rgcount;
+            unsigned rgi;
+            
+            ReferenceInfoGetReadGroupCount(header, &rgcount);
+            if (rgcount > (sizeof(ctx->key2id)/sizeof(ctx->key2id[0]) - 1))
+                ctx->key2id_max = 1;
+            else
+                ctx->key2id_max = sizeof(ctx->key2id)/sizeof(ctx->key2id[0]);
+            
+            for (rgi = 0; rgi != rgcount; ++rgi) {
+                ReadGroup rg;
+                
+                rc_t rc2 = ReferenceInfoGetReadGroup(header, rgi, &rg);
+                if (rc2 == 0 && rg.platform && platform_cmp(rg.platform, "CAPILLARY")) {
+                    G->hasTI = true;
+                    break;
+                }
+            }
+        }
+        else
+            ctx->key2id_max = 1;        
+    }
+    
+    memset(&srec, 0, sizeof(srec));
+    
+    rc = KDataBufferMake(&cigBuf, 32, 0);
+    if (rc)
+        return rc;
+    
+    rc = KDataBufferMake(&fragBuf, 8, FRAG_CHUNK_SIZE);
+    if (rc)
+        return rc;
+    
+    rc = KDataBufferMake(&buf, (sizeof(int32_t) + sizeof(bool) * 2 + sizeof(char) * 2 + sizeof(uint8_t))*8, 0);
+    if (rc)
+        return rc;
+    
+    if (rc == 0) {
+        (void)PLOGMSG(klogInfo, (klogInfo, "Loading '$(file)'", "file=%s", ReaderFileGetPathname(reader)));
+    }
+    
+    *had_alignments = false;
+    *had_sequences = false;
+    
+    while (rc == 0 && (rc = Quitting()) == 0) {
+        bool aligned;
+        AlignmentRecord data;
+        uint32_t readlen;
+        int64_t rpos=0;
+        char *seqDNA;
+        ReferenceSequence refSeq;
+        ctx_value_t *value;
+        bool wasInserted;
+        int32_t refSeqId=-1;
+        uint8_t *qual;
+        bool mated;
+        const char *name;
+        char cskey = 0;
+        bool originally_aligned;
+        bool isPrimary;
+        uint32_t opCount;
+        bool hasCG;
+        uint64_t ti = 0;
+        uint32_t csSeqLen = 0;
+        int readOrientation;
+        
+        const Record* record;
+        const Sequence* sequence = NULL;
+        const Alignment* alignment = NULL;
+        const CGData* cg = NULL;
+
+        rc = ReaderFileGetRecord(reader, &record);
+        if (rc || record == 0)
+            break;
+
+        {
+            const Rejected* rej;
+            rc = RecordGetRejected(record, &rej);
+            if (rc)
+            {
+                (void)LOGERR(klogErr, rc, "ArchiveFile: RecordGetSequence failed");
+                break;
+            }
+            if (rej != NULL)
+            {
+                const char* message;
+                uint64_t line;
+                uint64_t col;
+                bool fatal;
+                rc = RejectedGetError(rej, &message, &line, &col, &fatal);
+                if (rc)
+                {
+                    (void)LOGERR(klogErr, rc, "ArchiveFile: RejectedGetError failed");
+                    break;
+                }
+                (void)PLOGMSG(klogErr, (klogErr, "$(file):$(l):$(c):$(msg)", "file=%s,l=%lu,c=%lu,msg=%s", ReaderFileGetPathname(reader), line, col, message));
+                rc = CheckLimitAndLogError(G);
+                RejectedRelease(rej);
+                
+                if (fatal)
+                {
+                    rc = RC(rcExe, rcFile, rcParsing, rcFormat, rcUnsupported);
+                    break;
+                }
+                    
+                goto LOOP_END;
+            }
+        }
+        rc = RecordGetSequence(record, &sequence);
+        if (rc)
+        {
+            (void)LOGERR(klogErr, rc, "ArchiveFile: RecordGetSequence failed");
+            break;
+        }
+        rc = RecordGetAlignment(record, &alignment);
+        if (rc)
+        {
+            (void)LOGERR(klogErr, rc, "ArchiveFile: RecordGetAlignment failed");
+            break;
+        }
+        if (alignment != NULL)
+        {
+            rc = AlignmentGetCGData(alignment, &cg);      
+            if (rc)
+            {
+                (void)LOGERR(klogErr, rc, "ArchiveFile: AlignmentGetCG failed");
+                break;
+            }
+        }
+        
+        if ((unsigned)(ReaderFileGetProportionalPosition(reader) * 100.0) > progress) { 
+            unsigned new_value = ReaderFileGetProportionalPosition(reader) * 100.0;
+            KLoadProgressbar_Process(ctx->progress[0], new_value - progress, false);
+            progress = new_value;
+        }
+
+
+        /**************************************************************/
+        if (!G->noColorSpace) {
+            if (SequenceIsColorSpace(sequence)) {
+                if (isNotColorSpace) {
+                MIXED_BASE_AND_COLOR:
+                    rc = RC(rcApp, rcFile, rcReading, rcData, rcInconsistent);  
+                    (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)' contains base space and color space", "file=%s", ReaderFileGetPathname(reader)));
+                    goto LOOP_END;
+                }
+                ctx->isColorSpace = isColorSpace = true;
+            }
+            else if (isColorSpace)
+                goto MIXED_BASE_AND_COLOR;
+            else
+                isNotColorSpace = true;
+        }
+        hasCG = cg != NULL;
+        if (hasCG) {
+            AlignmentGetAlignOpCount(alignment, &opCount);
+            rc = KDataBufferResize(&cigBuf, opCount * 2 + 5);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "Failed to resize CIGAR buffer");
+                goto LOOP_END;
+            }
+            
+            rc = KDataBufferResize(&buf, readlen = 35);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "Failed to resize record buffer");
+                goto LOOP_END;
+            }
+            
+            AlignmentRecordInit(&data, buf.base, readlen, &seqDNA, G->expectUnsorted);
+            qual = (uint8_t *)&seqDNA[readlen];
+        }
+        else {
+            if (alignment != 0)
+            {
+                uint32_t const *tmp;
+                AlignmentGetBAMCigar(alignment, &tmp, &opCount);
+                rc = KDataBufferResize(&cigBuf, opCount);
+                if (rc) {
+                    (void)LOGERR(klogErr, rc, "Failed to resize CIGAR buffer");
+                    goto LOOP_END;
+                }
+                memcpy(cigBuf.base, tmp, opCount * sizeof(uint32_t));
+            }
+            
+            SequenceGetReadLength(sequence, &readlen);
+            if (isColorSpace) {
+                SequenceGetCSReadLength(sequence, &csSeqLen);
+                if (readlen != csSeqLen && readlen != 0) {
+                    rc = RC(rcAlign, rcRow, rcReading, rcData, rcInconsistent);
+                    (void)LOGERR(klogErr, rc, "SequenceWriter length and CS SequenceWriter length are not equal");
+                    goto LOOP_END;
+                }
+            }
+            else if (readlen == 0) {
+            }
+            rc = KDataBufferResize(&buf, readlen | csSeqLen);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "Failed to resize record buffer");
+                goto LOOP_END;
+            }
+            
+            AlignmentRecordInit(&data, buf.base, readlen | csSeqLen, &seqDNA, G->expectUnsorted);
+            qual = (uint8_t *)&seqDNA[readlen | csSeqLen];
+        }
+        SequenceGetRead(sequence, seqDNA);
+        if (G->useQUAL) {
+            int8_t const *squal;
+            uint8_t offset=0;
+            int qualType=0;            
+            
+            SequenceGetQuality(sequence, &squal, &offset, &qualType);
+            memcpy(qual, squal, readlen);
+        }
+        else {
+            int8_t const *squal;
+            uint8_t qoffset = 0;
+            int qualType=0;            
+            unsigned i;
+            
+            rc = SequenceGetQuality(sequence, &squal, &qoffset, &qualType);
+            if (rc) {
+                (void)PLOGERR(klogErr, (klogErr, rc, "Spot '$(name)': length of original quality does not match sequence", "name=%s", name));
+                goto LOOP_END;
+            }
+            if (squal != NULL)
+            {  
+                switch (qualType)
+                {
+                case QT_LogOdds:
+                    for (i = 0; i != readlen; ++i)
+                        qual[i] = LogOddsToPhred(squal[i]);
+                    break;
+                    
+                case QT_Phred:
+                    if (qoffset) {
+                        for (i = 0; i != readlen; ++i)
+                            qual[i] = squal[i] - qoffset;
+                    }
+                    else
+                        memcpy(qual, squal, readlen);
+                    break;
+                    
+                default:
+                    memcpy(qual, squal, readlen);
+                    break;
+                }
+            }
+            else
+                memset(qual, 0, readlen);
+        }
+        if (hasCG) {
+            rc = CGDataGetSeqQual(cg, seqDNA, qual);
+            if (rc == 0)
+                rc = CGDataGetCigar(cg, cigBuf.base, cigBuf.elem_count, &opCount);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "Failed to read CG data");
+                goto LOOP_END;
+            }
+        }
+        if (G->hasTI) {
+            rc = SequenceGetTI(sequence, &ti);
+            if (rc)
+                ti = 0;
+            rc = 0;
+        }
+        data.data.align_group.buffer = alignGroup;
+        if (hasCG && CGDataGetAlignGroup(cg, alignGroup, sizeof(alignGroup), &alignGroupLen) == 0)
+            data.data.align_group.elements = alignGroupLen;
+        else
+            data.data.align_group.elements = 0;
+
+        if (alignment != 0)
+            AR_MAPQ(data) = GetMapQ(alignment);
+        SequenceGetSpotName(sequence, &name, &namelen);
+        if (G->parseSpotName) 
+            ParseSpotName(name, &namelen); 
+        {{
+            char const *rgname;
+            size_t rgnamelen;
+
+            SequenceGetSpotGroup(sequence, &rgname, &rgnamelen);
+            if (rgname)
+            {
+                string_copy(spotGroup, sizeof(spotGroup), rgname, rgnamelen);
+                spotGroup[rgnamelen] = '\0';
+            }
+            else
+                spotGroup[0] = '\0';
+        }}        
+        readOrientation = SequenceGetOrientationSelf(sequence);
+        AR_REF_ORIENT(data) = readOrientation == ReadOrientationReverse;
+        isPrimary = alignment == 0 || ! AlignmentIsSecondary(alignment);
+        if (G->noSecondary && !isPrimary)
+            goto LOOP_END;
+        originally_aligned = (alignment != 0);
+        aligned = originally_aligned && (AR_MAPQ(data) >= G->minMapQual);
+        
+        if (aligned && align == NULL) {
+            rc = RC(rcApp, rcFile, rcReading, rcData, rcInconsistent);
+            (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)' contains aligned records", "file=%s", ReaderFileGetPathname(reader)));
+            goto LOOP_END;
+        }
+        if (header != NULL)
+        {
+            while (aligned) {
+                AlignmentGetPosition(alignment, &rpos);
+                AlignmentGetRefSeqId(alignment, &refSeqId);
+                if (rpos >= 0 && refSeqId >= 0) {
+                    if (refSeqId == skipRefSeqID)
+                        goto LOOP_END;
+                    if (refSeqId == lastRefSeqId)
+                        break;
+                    rc = ReferenceInfoGetRefSeq(header, refSeqId, &refSeq);
+                    if (rc != 0) {
+                        rc = RC(rcApp, rcFile, rcReading, rcData, rcInconsistent);
+                        (void)PLOGERR(klogWarn, (klogWarn, rc, "File '$(file)': Spot '$(name)' refers to an unknown Reference number $(refSeqId)", "file=%s,refSeqId=%i,name=%s", ReaderFileGetPathname(reader), (int)refSeqId, name));
+                        rc = CheckLimitAndLogError(G);
+                        goto LOOP_END;
+                    }
+                    else {
+                        if (G->refFilter && strcmp(G->refFilter, refSeq.name) != 0) {
+                            (void)PLOGMSG(klogInfo, (klogInfo, "Skipping Reference '$(name)'", "name=%s", refSeq.name));
+                            skipRefSeqID = refSeqId;
+                            goto LOOP_END;
+                        }
+                        
+                        rc = ReferenceSetFile(ref, refSeq.name, refSeq.length, refSeq.checksum, G->maxSeqLen);
+                        if (rc == 0) {
+                            lastRefSeqId = refSeqId;
+                            break;
+                        }
+                        if (GetRCObject(rc) == rcConstraint && GetRCState(rc) == rcViolated) {
+                            int const level = G->limit2config ? klogWarn : klogErr;
+                            
+                            (void)PLOGMSG(level, (level, "Could not find a Reference to match { name: '$(name)', length: $(rlen) }", "name=%s,rlen=%u", refSeq.name, (unsigned)refSeq.length));
+                        }
+                        else if (!G->limit2config)
+                            (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)': Spot '$(sname)' refers to an unknown Reference '$(rname)'", "file=%s,rname=%s,sname=%s", ReaderFileGetPathname(reader), refSeq.name, name));
+                        if (G->limit2config)
+                            rc = 0;
+                        goto LOOP_END;
+                    }
+                }
+                else {
+                    (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' was marked aligned, but reference id = $(id) and reference position = $(pos) are invalid", "name=%.*s,id=%i,pos=%i", namelen, name, refSeqId, rpos));
+                    if ((rc = CheckLimitAndLogError(G)) != 0) goto LOOP_END;
+                }
+
+                aligned = false;
+            }
+        }
+        if (!aligned && (G->refFilter != NULL || G->limit2config))
+            goto LOOP_END;
+        
+        rc = GetKeyID(G, ctx, &keyId, &wasInserted, spotGroup, name, namelen);
+        if (rc) {
+            (void)PLOGERR(klogErr, (klogErr, rc, "KBTreeEntry: failed on key '$(key)'", "key=%.*s", namelen, name));
+            goto LOOP_END;
+        }
+        rc = MMArrayGet(ctx->id2value, (void **)&value, keyId);
+        if (rc) {
+            (void)PLOGERR(klogErr, (klogErr, rc, "MMArrayGet: failed on id '$(id)'", "id=%u", keyId));
+            goto LOOP_END;
+        }
+        
+        AR_KEY(data) = keyId;
+        
+        mated = false;
+        if (SequenceWasPaired(sequence)) {
+            if (SequenceIsFirst(sequence))
+                AR_READNO(data) |= 1;
+            if (SequenceIsSecond(sequence))
+                AR_READNO(data) |= 2;
+            switch (AR_READNO(data)) {
+            case 1:
+            case 2:
+                mated = true;
+                break;
+            case 0:
+                if ((warned & 1) == 0) {
+                    (void)LOGMSG(klogWarn, "Spots without fragment info have been encountered");
+                    warned |= 1;
+                }
+                break;
+            case 3:
+                if ((warned & 2) == 0) {
+                    (void)LOGMSG(klogWarn, "Spots with more than two fragments have been encountered");
+                    warned |= 2;
+                }
+                break;
+            }
+        }
+        if (!mated)
+            AR_READNO(data) = 1;
+        
+        if (wasInserted) {
+            memset(value, 0, sizeof(*value));
+            value->unmated = !mated;
+            value->pcr_dup = SequenceIsDuplicate(sequence);
+            value->platform = GetINSDCPlatform(header, spotGroup);
+            if (value->platform == SRA_PLATFORM_UNDEFINED)
+                value->platform = G->platform;
+        }
+        else {
+            if (!G->acceptBadDups && value->pcr_dup != SequenceIsDuplicate(sequence)) {
+                rc = LogDupConflict(G, name);
+                goto LOOP_END; /* TODO: is this correct? */
+            }
+            value->pcr_dup &= SequenceIsDuplicate(sequence);
+            if (mated && value->unmated) {
+                (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+                                         "Spot '$(name)', which was first seen without mate info, now has mate info",
+                                         "name=%s", name));
+                rc = CheckLimitAndLogError(G);
+                goto LOOP_END;
+            }
+            else if (!mated && !value->unmated) {
+                (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+                                         "Spot '$(name)', which was first seen with mate info, now has no mate info",
+                                         "name=%s", name));
+                rc = CheckLimitAndLogError(G);
+                goto LOOP_END;
+            }
+        }
+        
+        ++recordsProcessed;
+
+        if (isPrimary) {
+            switch (AR_READNO(data)) {
+            case 1:
+                if (CTX_VALUE_GET_P_ID(*value, 0) != 0)
+                {
+                    isPrimary = false;
+                    if (value->seqHash[0] != SeqHashKey(seqDNA, readlen))
+                    {
+                        (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+                                                 "Read 1 of spot '$(name)', possible sequence mismatch", "name=%s", name));
+                        rc = CheckLimitAndLogError(G);
+                        goto LOOP_END;
+                    }
+                }
+                else if (aligned && value->unaligned_1) {
+                    (void)PLOGMSG(klogWarn, (klogWarn, "Read 1 of spot '$(name)', which was unmapped, is now being mapped at position $(pos) on reference '$(ref)'; this alignment will be considered as secondary", "name=%s,ref=%s,pos=%u", name, refSeq.name, rpos));
+                    isPrimary = false;
+                }
+                break;
+            case 2:
+                if (CTX_VALUE_GET_P_ID(*value, 1) != 0)
+                {
+                    isPrimary = false;
+                    if (value->seqHash[1] != SeqHashKey(seqDNA, readlen))
+                    {
+                        (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+                                                 "Read 2 of spot '$(name)', possible sequence mismatch", "name=%s", name));
+                        rc = CheckLimitAndLogError(G);
+                        goto LOOP_END;
+                    }
+                }
+                else if (aligned && value->unaligned_2) {
+                    (void)PLOGMSG(klogWarn, (klogWarn, "Read 2 of spot '$(name)', which was unmapped, is now being mapped at position $(pos) on reference '$(ref)'; this alignment will be considered as secondary", "name=%s,ref=%s,pos=%u", name, refSeq.name, rpos));
+                    isPrimary = false;
+                }
+                break;
+            default:
+                break;
+            }
+        }
+        data.isPrimary = isPrimary;
+        if (aligned) {
+            uint32_t matches = 0;
+            
+            rc = ReferenceRead(ref, &data, rpos, cigBuf.base, opCount, seqDNA, readlen, &matches, G->acceptNoMatch, G->minMatchCount, G->maxSeqLen);
+            if (rc) {
+                aligned = false;
+                
+                if (   (GetRCState(rc) == rcViolated  && GetRCObject(rc) == rcConstraint)
+                    || (GetRCState(rc) == rcExcessive && GetRCObject(rc) == rcRange))
+                {
+                    RecordNoMatch(G, name, refSeq.name, rpos);
+                }
+                if (GetRCState(rc) == rcViolated && GetRCObject(rc) == rcConstraint) {
+                    rc = LogNoMatch(G, name, refSeq.name, (unsigned)rpos, (unsigned)matches);
+                }
+                else if (GetRCObject(rc) == rcData && GetRCState(rc) == rcInvalid) {
+                    (void)PLOGERR(klogWarn, (klogWarn, rc, "Spot '$(name)': bad alignment to reference '$(ref)' at $(pos)", "name=%s,ref=%s,pos=%u", name, refSeq.name, rpos));
+                    CheckLimitAndLogError(G);
+                }
+                else if (GetRCObject(rc) == rcData) {
+                    (void)PLOGERR(klogWarn, (klogWarn, rc, "Spot '$(name)': bad alignment to reference '$(ref)' at $(pos)", "name=%s,ref=%s,pos=%u", name, refSeq.name, rpos));
+                    rc = CheckLimitAndLogError(G);
+                }
+                else {
+                    (void)PLOGERR(klogWarn, (klogWarn, rc, "Spot '$(name)': error reading reference '$(ref)' at $(pos)", "name=%s,ref=%s,pos=%u", name, refSeq.name, rpos));
+                    rc = CheckLimitAndLogError(G);
+                }
+                if (rc) goto LOOP_END;
+            }
+        }
+        if (isColorSpace) {
+            /* must be after ReferenceRead */
+            SequenceGetCSKey(sequence, &cskey);
+            SequenceGetCSRead(sequence, seqDNA);
+            if (!aligned && !G->useQUAL) {
+                int8_t const *squal;
+                uint8_t qoffset = 0;
+                int qualType=0;                
+                
+                rc = SequenceGetCSQuality(sequence, &squal, &qoffset, &qualType);
+                if (rc) {
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Spot '$(name)': length of colorspace quality does not match sequence", "name=%s", name));
+                    goto LOOP_END;
+                }
+                if (qoffset) {
+                    unsigned i;
+                    
+                    for (i = 0; i < csSeqLen; ++i)
+                        qual[i] = squal[i] - qoffset;
+                }
+                else if (squal != NULL)
+                    memcpy(qual, squal, csSeqLen);
+                readlen = csSeqLen;
+            }
+        }
+        
+        if (aligned) {
+            if (G->editAlignedQual ) EditAlignedQualities  (G, qual, AR_HAS_MISMATCH(data), readlen);
+            if (G->keepMismatchQual) EditUnalignedQualities(qual, AR_HAS_MISMATCH(data), readlen);
+        }
+        else if (isPrimary) {
+            switch (AR_READNO(data)) {
+            case 1:
+                value->unaligned_1 = 1;
+                break;
+            case 2:
+                value->unaligned_2 = 1;
+                break;
+            default:
+                break;
+            }
+        }
+        if (isPrimary) {
+            switch (AR_READNO(data)) {
+            case 1:
+                if (CTX_VALUE_GET_P_ID(*value, 0) == 0 && aligned) {
+                    data.alignId = ++ctx->primaryId;
+                    CTX_VALUE_SET_P_ID(*value, 0, data.alignId);
+                }
+                break;
+            case 2:
+                if (CTX_VALUE_GET_P_ID(*value, 1) == 0 && aligned) {
+                    data.alignId = ++ctx->primaryId;
+                    CTX_VALUE_SET_P_ID(*value, 1, data.alignId);
+                }
+                break;
+            default:
+                break;
+            }
+        }
+        if (mated) {
+            if (isPrimary || !originally_aligned) {
+                if (value->spotId != 0) {
+                    (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' has already been assigned a spot id", "name=%.*s", namelen, name));
+                }
+                else if (!value->has_a_read) {
+                    /* new mated fragment - do spot assembly */
+                    unsigned sz;
+                    uint64_t    fragmentId;
+                    FragmentInfo fi;
+                    KMemBank *frags;
+                    int32_t mate_refSeqId = -1;
+                    int64_t pnext = 0;
+                    
+                    value->seqHash[AR_READNO(data) - 1] = SeqHashKey(seqDNA, readlen);
+                    
+                    memset(&fi, 0, sizeof(fi));
+                    fi.aligned = aligned;
+                    fi.ti = ti;
+                    fi.orientation = readOrientation;
+                    fi.otherReadNo = AR_READNO(data);
+                    fi.sglen   = strlen(spotGroup);
+                    fi.readlen = readlen;
+                    fi.cskey = cskey;
+                    fi.is_bad = SequenceIsLowQuality(sequence);
+                    sz = sizeof(fi) + 2*fi.readlen + fi.sglen;
+                    if (align && aligned) {
+                        AlignmentGetMateRefSeqId(alignment, &mate_refSeqId);
+                        AlignmentGetMatePosition(alignment, &pnext);
+                    }
+                    if(align && aligned && mate_refSeqId == refSeqId && pnext > 0 && pnext!=rpos /*** weird case in some bams**/){ 
+                        frags = ctx->fragsBoth;
+                        rc = KMemBankAlloc(frags, &fragmentId, sz, 0);
+                        value->fragmentId = fragmentId*2;
+                        fcountBoth++;
+                    } else {
+                        frags = ctx->fragsOne;
+                        rc = KMemBankAlloc(frags, &fragmentId, sz, 0);
+                        value->fragmentId = fragmentId*2+1;
+                        fcountOne++;
+                    }
+                    if (rc) {
+                        (void)LOGERR(klogErr, rc, "KMemBankAlloc failed");
+                        goto LOOP_END;
+                    }
+                    /*printf("IN:%10d\tcnt2=%ld\tcnt1=%ld\n",value->fragmentId,fcountBoth,fcountOne);*/
+                    
+                    rc = KDataBufferResize(&fragBuf, sz);
+                    if (rc) {
+                        (void)LOGERR(klogErr, rc, "Failed to resize fragment buffer");
+                        goto LOOP_END;
+                    }
+                    {{
+                        uint8_t *dst = (uint8_t*) fragBuf.base;
+                        memcpy(dst,&fi,sizeof(fi));
+                        dst += sizeof(fi);
+                        COPY_READ((char *)dst, seqDNA, fi.readlen, (isColorSpace && !aligned) ? 0 : fi.orientation == ReadOrientationReverse);
+                        dst += fi.readlen;
+                        COPY_QUAL(dst, qual, fi.readlen, (isColorSpace && !aligned) ? 0 : fi.orientation == ReadOrientationReverse);
+                        dst += fi.readlen;
+                        memcpy(dst,spotGroup,fi.sglen);
+                    }}
+                    rc = KMemBankWrite(frags, fragmentId, 0, fragBuf.base, sz, &rsize);
+                    if (rc) {
+                        (void)PLOGERR(klogErr, (klogErr, rc, "KMemBankWrite failed writing fragment $(id)", "id=%u", fragmentId));
+                        goto LOOP_END;
+                    }
+                    value->has_a_read = 1;
+                }
+                else if (value->fragmentId != 0 ) {
+                    /* might be second fragment */
+                    uint64_t sz;
+                    FragmentInfo *fip;
+                    KMemBank *frags;
+                    
+                    if(value->fragmentId & 1) frags = ctx->fragsOne;
+                    else               frags = ctx->fragsBoth; 
+                    
+                    rc=KMemBankSize(frags, value->fragmentId>>1, &sz);
+                    if (rc) {
+                        (void)PLOGERR(klogErr, (klogErr, rc, "KMemBankSize failed on fragment $(id)", "id=%u", value->fragmentId>>1));
+                        goto LOOP_END;
+                    }
+                    rc=KDataBufferResize(&fragBuf, (size_t)sz);
+                    if (rc) {
+                        (void)PLOGERR(klogErr, (klogErr, rc, "Failed to resize fragment buffer", ""));
+                        goto LOOP_END;
+                    }
+                    rc=KMemBankRead(frags, value->fragmentId>>1, 0, fragBuf.base, sz, &rsize);
+                    if (rc) {
+                        (void)PLOGERR(klogErr, (klogErr, rc, "KMemBankRead failed on fragment $(id)", "id=%u", value->fragmentId>>1));
+                        goto LOOP_END;
+                    }
+                    
+                    assert( rsize == sz );
+                    fip = (FragmentInfo *) fragBuf.base;
+                    if(AR_READNO(data) != fip->otherReadNo) {
+                        /* mate found */
+                        unsigned readLen[2];
+                        unsigned read1 = 0;
+                        unsigned read2 = 1;
+                        uint8_t  *src  = (uint8_t*) fip + sizeof(*fip);
+                        
+                        value->seqHash[AR_READNO(data) - 1] = SeqHashKey(seqDNA, readlen);
+                        
+                        if (AR_READNO(data) < fip->otherReadNo) {
+                            read1 = 1;
+                            read2 = 0;
+                        }
+                        readLen[read1] = fip->readlen;
+                        readLen[read2] = readlen;
+                        rc = SequenceRecordInit(&srec, 2, readLen);
+                        if (rc) {
+                            (void)PLOGERR(klogErr, (klogErr, rc, "Failed resizing sequence record buffer", ""));
+                            goto LOOP_END;
+                        }
+                        srec.ti[read1] = fip->ti;
+                        srec.aligned[read1] = fip->aligned;
+                        srec.is_bad[read1] = fip->is_bad;
+                        srec.orientation[read1] = fip->orientation;
+                        srec.cskey[read1] = fip->cskey;
+                        memcpy(srec.seq + srec.readStart[read1], src, fip->readlen);
+                        src += fip->readlen;
+                        memcpy(srec.qual + srec.readStart[read1], src, fip->readlen);
+                        src += fip->readlen;
+                        
+                        srec.orientation[read2] = readOrientation;
+                        COPY_READ(srec.seq + srec.readStart[read2], 
+                                  seqDNA, 
+                                  srec.readLen[read2], 
+                                  (isColorSpace && !aligned) ? 0 : srec.orientation[read2] == ReadOrientationReverse);
+                        COPY_QUAL(srec.qual + srec.readStart[read2], 
+                                  qual, 
+                                  srec.readLen[read2],  
+                                  (isColorSpace && !aligned) ? 0 : srec.orientation[read2] == ReadOrientationReverse);
+
+                        srec.keyId = keyId;
+                        srec.is_bad[read2] = SequenceIsLowQuality(sequence);
+                        srec.aligned[read2] = aligned;
+                        srec.cskey[read2] = cskey;
+                        srec.ti[read2] = ti;
+                        
+                        srec.spotGroup = spotGroup;
+                        srec.spotGroupLen = strlen(spotGroup);
+                        if (value->pcr_dup && (srec.is_bad[0] || srec.is_bad[1])) {
+                            filterFlagConflictRecords++;
+                            if(filterFlagConflictRecords < MAX_WARNINGS_FLAG_CONFLICT){
+                                (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)': both 'duplicate' and 'lowQuality' flag bits set, only 'duplicate' will be saved", "name=%s", name));
+                            } else if(filterFlagConflictRecords == MAX_WARNINGS_FLAG_CONFLICT){
+                                (void)PLOGMSG(klogWarn, (klogWarn, "Last reported warning: Spot '$(name)': both 'duplicate' and 'lowQuality' flag bits set, only 'duplicate' will be saved", "name=%s", name));
+                            }
+                        }
+                        rc = SequenceWriteRecord(seq, &srec, isColorSpace, value->pcr_dup, value->platform, 
+                                                G->keepMismatchQual, G->no_real_output, G->hasTI, G->QualQuantizer);
+                        if (rc) {
+                            (void)LOGERR(klogErr, rc, "SequenceWriteRecord failed");
+                            goto LOOP_END;
+                        }
+                        CTX_VALUE_SET_S_ID(*value, ++ctx->spotId);
+                        if(value->fragmentId & 1){
+                            fcountOne--;
+                        } else {
+                            fcountBoth--;
+                        }
+                        /*  printf("OUT:%9d\tcnt2=%ld\tcnt1=%ld\n",value->fragmentId,fcountBoth,fcountOne);*/
+                        rc = KMemBankFree(frags, value->fragmentId>>1);
+                        if (rc) {
+                            (void)PLOGERR(klogErr, (klogErr, rc, "KMemBankFree failed on fragment $(id)", "id=%u", value->fragmentId>>1));
+                            goto LOOP_END;
+                        }
+                        value->fragmentId = 0;
+                    }
+                }
+            }
+            if (!isPrimary && aligned) {
+                int32_t bam_mrid;
+                int64_t mpos;
+                int64_t mrid;
+                int64_t tlen;
+                
+                AlignmentGetMatePosition(alignment, &mpos);
+                AlignmentGetMateRefSeqId(alignment, &bam_mrid);
+                AlignmentGetInsertSize(alignment, &tlen);
+                
+                if (mpos >= 0 && bam_mrid >= 0 && tlen != 0 && header != NULL) {
+                    ReferenceSequence mref;
+                    if (ReferenceInfoGetRefSeq(header, bam_mrid, &mref) == 0) {
+                        rc_t rc_temp = ReferenceGet1stRow(ref, &mrid, mref.name);
+                        if (rc_temp == 0) {
+                            data.mate_ref_pos = mpos;
+                            data.template_len = tlen;
+                            data.mate_ref_orientation = (SequenceGetOrientationMate(sequence) == ReadOrientationReverse);
+                        }
+                        else {
+                            (void)PLOGERR(klogWarn, (klogWarn, rc_temp, "Failed to get refID for $(name)", "name=%s", mref.name));
+                            mrid = 0;
+                        }
+                        data.mate_ref_id = mrid;
+                    }
+                }
+            }
+        }
+        else if (wasInserted & (isPrimary || !originally_aligned)) {
+            /* new unmated fragment - no spot assembly */
+            unsigned readLen[1];
+
+            value->seqHash[0] = SeqHashKey(seqDNA, readlen);
+            
+            readLen[0] = readlen;
+            rc = SequenceRecordInit(&srec, 1, readLen);
+            if (rc) {
+                (void)PLOGERR(klogErr, (klogErr, rc, "Failed resizing sequence record buffer", ""));
+                goto LOOP_END;
+            }
+            srec.ti[0] = ti;
+            srec.aligned[0] = aligned;
+            srec.is_bad[0] = SequenceIsLowQuality(sequence);
+            srec.orientation[0] = readOrientation;
+            srec.cskey[0] = cskey;
+            COPY_READ(srec.seq  + srec.readStart[0], seqDNA, readlen, (isColorSpace && !aligned) ? 0 : srec.orientation[0] == ReadOrientationReverse);
+            COPY_QUAL(srec.qual + srec.readStart[0], qual, readlen, (isColorSpace && !aligned) ? 0 : srec.orientation[0] == ReadOrientationReverse);
+         
+            srec.keyId = keyId;
+            
+            srec.spotGroup = spotGroup;
+            srec.spotGroupLen = strlen(spotGroup);
+            if (value->pcr_dup && srec.is_bad[0]) {
+                filterFlagConflictRecords++;
+                if (filterFlagConflictRecords < MAX_WARNINGS_FLAG_CONFLICT) {
+                    (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)': both 'duplicate' and 'lowQuality' flag bits set, only 'duplicate' will be saved", "name=%s", name));
+                }
+                else if (filterFlagConflictRecords == MAX_WARNINGS_FLAG_CONFLICT) {
+                    (void)PLOGMSG(klogWarn, (klogWarn, "Last reported warning: Spot '$(name)': both 'duplicate' and 'lowQuality' flag bits set, only 'duplicate' will be saved", "name=%s", name));
+        }
+            }
+            rc = SequenceWriteRecord(seq, &srec, isColorSpace, value->pcr_dup, value->platform, 
+                                                G->keepMismatchQual, G->no_real_output, G->hasTI, G->QualQuantizer);
+            if (rc) {
+                (void)PLOGERR(klogErr, (klogErr, rc, "SequenceWriteRecord failed", ""));
+                goto LOOP_END;
+            }
+            CTX_VALUE_SET_S_ID(*value, ++ctx->spotId);
+            value->fragmentId = 0;
+        }
+        
+        if (aligned) {
+            if (value->alignmentCount[AR_READNO(data) - 1] < 254)
+                ++value->alignmentCount[AR_READNO(data) - 1];
+            ++ctx->alignCount;
+            
+            assert(keyId >> 32 < ctx->key2id_count);
+            assert((uint32_t)keyId < ctx->idCount[keyId >> 32]);
+            
+            rc = AlignmentWriteRecord(align, &data, G->expectUnsorted);
+            if (rc == 0) {
+                if (!isPrimary)
+                    data.alignId = ++ctx->secondId;
+                
+                rc = ReferenceAddAlignId(ref, data.alignId, isPrimary);
+                if (rc) {
+                    (void)PLOGERR(klogErr, (klogErr, rc, "ReferenceAddAlignId failed", ""));
+                }
+                else {
+                    *had_alignments = true;
+                }
+            }
+            else {
+                (void)PLOGERR(klogErr, (klogErr, rc, "AlignmentWriteRecord failed", ""));
+            }
+        }
+        /**************************************************************/
+        
+    LOOP_END:
+        RecordRelease(record);
+        if (sequence != NULL)
+            SequenceRelease(sequence);
+        if (alignment != NULL)
+            AlignmentRelease(alignment);
+        if (cg != NULL)
+            CGDataRelease(cg);
+        
+        ++reccount;
+        if (G->maxAlignCount > 0 && reccount >= G->maxAlignCount)
+            break;
+        if (rc == 0)
+            *had_sequences = true;
+    }
+    
+    if (header != NULL)
+        ReferenceInfoRelease(header);
+    
+    if (filterFlagConflictRecords > 0) {
+        (void)PLOGMSG(klogWarn, (klogWarn, "$(cnt1) out of $(cnt2) records contained warning : both 'duplicate' and 'lowQuality' flag bits set, only 'duplicate' will be saved", "cnt1=%lu,cnt2=%lu", filterFlagConflictRecords,recordsProcessed));
+    }
+    if (rc == 0 && recordsProcessed == 0) {
+        (void)LOGMSG(klogWarn, (G->limit2config || G->refFilter != NULL) ? 
+                     "All records from the file were filtered out" :
+                     "The file contained no records that were processed.");
+        rc = RC(rcAlign, rcFile, rcReading, rcData, rcEmpty);
+    }
+    if (rc == 0 && reccount > 0) {
+        double percentage = ((double)G->errCount) / reccount; 
+        double allowed = G->maxErrPct/ 100.0;
+        if (percentage > allowed) {
+            rc = RC(rcExe, rcTable, rcClosing, rcData, rcInvalid);
+            (void)PLOGERR(klogErr, 
+                            (klogErr, rc,
+                             "Too many bad records: "
+                                 "records: $(records), bad records: $(bad_records), "
+                                 "bad records percentage: $(percentage), "
+                                 "allowed percentage: $(allowed)",
+                             "records=%lu,bad_records=%lu,percentage=%.2f,allowed=%.2f",
+                             reccount, G->errCount, percentage, allowed));
+        }
+    }
+
+    KDataBufferWhack(&buf);
+    KDataBufferWhack(&fragBuf);
+    KDataBufferWhack(&srec.storage);
+    KDataBufferWhack(&cigBuf);
+    return rc;
+}
+
+/*--------------------------------------------------------------------------
+ * CommonWriter
+ */
+ 
+rc_t CommonWriterInit(CommonWriter* self, struct VDBManager *mgr, struct VDatabase *db, const CommonWriterSettings* G)
+{
+    rc_t rc; 
+    assert(self);
+    assert(mgr);
+    assert(db);
+    
+    memset(self, 0, sizeof(*self));
+    if (G)
+        self->settings = *G;
+
+    self->ref = malloc(sizeof(*self->ref));
+    if (self->ref == 0)
+        return RC(rcAlign, rcArc, rcAllocating, rcMemory, rcExhausted);
+        
+    rc = ReferenceInit(self->ref, 
+                       mgr, 
+                       db, 
+                       self->settings.expectUnsorted, 
+                       self->settings.acceptHardClip, 
+                       self->settings.refXRefPath, 
+                       self->settings.inpath, 
+                       self->settings.maxSeqLen, 
+                       self->settings.refFiles);
+    if (rc == 0)
+    {
+        self->seq = malloc(sizeof(*self->seq));
+        if (self->seq == 0)
+        {
+            ReferenceWhack(self->ref, false, 0);
+            free(self->ref);
+            return RC(rcAlign, rcArc, rcAllocating, rcMemory, rcExhausted);
+        }
+        SequenceWriterInit(self->seq, db);
+        
+        self->align = AlignmentMake(db);
+        if (self->align == 0)
+        {
+            ReferenceWhack(self->ref, false, 0);
+            free(self->ref);
+            
+            SequenceWhack(self->seq, false);
+            free(self->seq);
+            
+            return RC(rcAlign, rcArc, rcAllocating, rcMemory, rcExhausted);
+        }
+        
+        rc = SetupContext(&self->settings, &self->ctx);
+        if (rc != 0)
+        {
+            ReferenceWhack(self->ref, false, 0);
+            free(self->ref);
+            
+            SequenceWhack(self->seq, false);
+            free(self->seq);
+            
+            AlignmentWhack(self->align, false);
+        }
+    }
+    if (self->settings.tmpfs == NULL)
+        self->settings.tmpfs = "/tmp";
+
+    self->commit = true;
+    
+    return rc;
+}
+
+rc_t CommonWriterArchive(CommonWriter* self, const struct ReaderFile* reader)
+{
+    rc_t rc;
+    assert(self);
+    rc = ArchiveFile(reader, 
+                       &self->settings,
+                       &self->ctx, 
+                       self->ref,
+                       self->seq,
+                       self->align,
+                       &self->had_alignments, 
+                       &self->had_sequences);
+    if (rc)
+        self->commit = false;
+    
+    self->err_count += self->settings.errCount;
+    return rc;
+}
+
+rc_t CommonWriterComplete(CommonWriter* self, bool quitting)
+{
+    rc_t rc=0;
+    /*** No longer need memory for key2id ***/
+    size_t i;
+    for (i = 0; i != self->ctx.key2id_count; ++i) {
+        KBTreeDropBacking(self->ctx.key2id[i]);
+        KBTreeRelease(self->ctx.key2id[i]);
+        self->ctx.key2id[i] = NULL;
+    }
+    free(self->ctx.key2id_names);
+    self->ctx.key2id_names = NULL;
+    /*******************/
+
+    if (self->had_sequences) {
+        if (!quitting) {
+            (void)LOGMSG(klogInfo, "Writing unpaired sequences");
+            rc = WriteSoloFragments(&self->settings, &self->ctx, self->seq);
+            ContextReleaseMemBank(&self->ctx);
+            if (rc == 0) {
+                rc = SequenceDoneWriting(self->seq);
+                if (rc == 0) {
+                    (void)LOGMSG(klogInfo, "Updating sequence alignment info");
+                    rc = SequenceUpdateAlignInfo(&self->ctx, self->seq);
+                }
+            }
+        }
+        else
+            ContextReleaseMemBank(&self->ctx);
+    }
+    
+    if (self->had_alignments && !quitting) {
+        (void)LOGMSG(klogInfo, "Writing alignment spot ids");
+        rc = AlignmentUpdateSpotInfo(&self->ctx, self->align);
+    }
+
+    return rc;
+}
+
+rc_t CommonWriterWhack(CommonWriter* self)
+{
+    rc_t rc = 0;
+    assert(self);
+    
+    ContextRelease(&self->ctx);
+    
+    if (self->align)
+        rc = AlignmentWhack(self->align, self->commit);
+        
+    if (self->seq)
+    {
+        SequenceWhack(self->seq, self->commit);
+        free(self->seq);
+    }
+
+    if (self->ref)
+    {
+        rc_t rc2 = ReferenceWhack(self->ref, self->commit, self->settings.maxSeqLen);
+        if (rc == 0)
+            rc = rc2;
+        free(self->ref);
+    }
+
+    return rc;
+}
+
diff --git a/libs/loader/mmarray.c b/libs/loader/mmarray.c
new file mode 100644
index 0000000..9a62fd2
--- /dev/null
+++ b/libs/loader/mmarray.c
@@ -0,0 +1,131 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <loader/mmarray.h>
+
+#include <sysalloc.h>
+#include <stdlib.h>
+
+#include <klib/rc.h>
+
+#include <kfs/mmap.h>
+#include <kfs/file.h>
+
+#define MMA_NUM_CHUNKS_BITS (24u)
+#define MMA_NUM_SUBCHUNKS_BITS ((32u)-(MMA_NUM_CHUNKS_BITS))
+#define MMA_SUBCHUNK_SIZE (1u << MMA_NUM_CHUNKS_BITS)
+#define MMA_SUBCHUNK_COUNT (1u << MMA_NUM_SUBCHUNKS_BITS)
+
+typedef struct MMArray {
+    KFile *fp;
+    size_t elemSize;
+    uint64_t fsize;
+    struct mma_map_s {
+        struct mma_submap_s {
+            uint8_t *base;
+            KMMap *mmap;
+        } submap[MMA_SUBCHUNK_COUNT];
+    } map[NUM_ID_SPACES];
+} MMArray;
+
+rc_t MMArrayMake(struct MMArray **rslt, KFile *fp, uint32_t elemSize)
+{
+    MMArray *const self = calloc(1, sizeof(*self));
+
+    if (self == NULL)
+        return RC(rcExe, rcMemMap, rcConstructing, rcMemory, rcExhausted);
+    self->elemSize = (elemSize + 3) & ~(3u); /** align to 4 byte **/
+    self->fp = fp;
+    KFileAddRef(fp);
+    *rslt = self;
+    return 0;
+}
+
+#define PERF 0
+
+rc_t MMArrayGet(struct MMArray *const self, void **const value, uint64_t const element)
+{
+    unsigned const bin_no = element >> 32;
+    unsigned const subbin = ((uint32_t)element) >> MMA_NUM_CHUNKS_BITS;
+    unsigned const in_bin = (uint32_t)element & (MMA_SUBCHUNK_SIZE - 1);
+
+    if (bin_no >= sizeof(self->map)/sizeof(self->map[0]))
+        return RC(rcExe, rcMemMap, rcConstructing, rcId, rcExcessive);
+    
+    if (self->map[bin_no].submap[subbin].base == NULL) {
+        size_t const chunk = MMA_SUBCHUNK_SIZE * self->elemSize;
+        size_t const fsize = self->fsize + chunk;
+        rc_t rc = KFileSetSize(self->fp, fsize);
+        
+        if (rc == 0) {
+            KMMap *mmap;
+            
+            self->fsize = fsize;
+            rc = KMMapMakeRgnUpdate(&mmap, self->fp, self->fsize, chunk);
+            if (rc == 0) {
+                void *base;
+                
+                rc = KMMapAddrUpdate(mmap, &base);
+                if (rc == 0) {
+#if PERF
+                    static unsigned mapcount = 0;
+
+                    (void)PLOGMSG(klogInfo, (klogInfo, "Number of mmaps: $(cnt)", "cnt=%u", ++mapcount));
+#endif
+                    self->map[bin_no].submap[subbin].mmap = mmap;
+                    self->map[bin_no].submap[subbin].base = base;
+
+                    goto GET_MAP;
+                }
+                KMMapRelease(mmap);
+            }
+        }
+        return rc;
+    }
+GET_MAP:
+    *value = &self->map[bin_no].submap[subbin].base[(size_t)in_bin * self->elemSize];
+    return 0;
+}
+
+void MMArrayWhack(struct MMArray *self)
+{
+    unsigned i;
+
+    for (i = 0; i != sizeof(self->map)/sizeof(self->map[0]); ++i) {
+        unsigned j;
+        
+        for (j = 0; j != sizeof(self->map[0].submap)/sizeof(self->map[0].submap[0]); ++j) {
+            if (self->map[i].submap[j].mmap)
+                KMMapRelease(self->map[i].submap[j].mmap);
+            self->map[i].submap[j].mmap = NULL;
+            self->map[i].submap[j].base = NULL;
+        }
+    }
+    KFileRelease(self->fp);
+    free(self);
+}
+
+
diff --git a/libs/loader/reference-writer.c b/libs/loader/reference-writer.c
new file mode 100644
index 0000000..4fdfbc2
--- /dev/null
+++ b/libs/loader/reference-writer.c
@@ -0,0 +1,459 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <kfs/file.h>
+
+#include <vdb/schema.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <align/writer-refseq.h>
+
+#include <loader/reference-writer.h>
+
+#include <stdlib.h>
+#include <limits.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+
+#define SORTED_OPEN_TABLE_LIMIT (2)
+#define SORTED_CACHE_SIZE ((2 * 1024 * 1024)/(SORTED_OPEN_TABLE_LIMIT))
+
+#ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
+#define UNSORTED_OPEN_TABLE_LIMIT (8)
+#define UNSORTED_CACHE_SIZE ((1024 * 1024 * 1024)/(UNSORTED_OPEN_TABLE_LIMIT))
+#else
+#define UNSORTED_OPEN_TABLE_LIMIT (64)
+#define UNSORTED_CACHE_SIZE (350 * 1024 * 1024)
+#endif
+
+#if _DEBUGGING
+#define DUMP_CONFIG 1
+#endif
+
+struct overlap_s {
+    uint32_t min; /* minimum start pos of any alignment that ends in this chunk */
+    uint32_t max; /* maximum end pos of any alignment that starts before this chunk and ends in this chunk */
+};
+
+extern void ReferenceMgr_DumpConfig(ReferenceMgr const *const self);
+
+rc_t ReferenceInit(Reference *self, 
+                   const VDBManager *mgr, 
+                   VDatabase *db, 
+                   bool expectUnsorted,
+                   bool acceptHardClip,
+                   char const *refXRefPath,
+                   char const *inpath,
+                   uint32_t maxSeqLen,
+                   char const** refFiles
+                   )
+{
+    rc_t rc;
+    size_t const cache = expectUnsorted ? UNSORTED_CACHE_SIZE : SORTED_CACHE_SIZE;
+    unsigned const open_count = expectUnsorted ? UNSORTED_OPEN_TABLE_LIMIT : SORTED_OPEN_TABLE_LIMIT;
+    
+    memset(self, 0, sizeof(*self));
+    
+    self->coverage.elem_bits = self->mismatches.elem_bits = self->indels.elem_bits = 32;
+    self->pri_align.elem_bits = self->sec_align.elem_bits = 64;
+    self->pri_overlap.elem_bits = self->sec_overlap.elem_bits = sizeof(struct overlap_s) * 8;
+    
+    self->acceptHardClip = acceptHardClip;
+    
+    rc = ReferenceMgr_Make(&self->mgr, db, mgr, 
+                           ewrefmgr_co_Coverage,
+                           refXRefPath, inpath,
+                           maxSeqLen, cache, open_count);
+    if (rc == 0 && refFiles != NULL) {
+        unsigned i;
+        
+        for (i = 0; refFiles[i]; ++i) {
+            rc = ReferenceMgr_FastaPath(self->mgr, refFiles[i]);
+            if (rc) {
+                (void)PLOGERR(klogWarn, (klogWarn, rc, "fasta file '$(file)'", "file=%s", refFiles[i]));
+                break;
+            }
+        }
+#if DUMP_CONFIG
+        if (rc == 0) {
+            ReferenceMgr_DumpConfig(self->mgr);
+        }
+#endif
+    }
+    return rc;
+}
+
+static
+void Unsorted(Reference *self) {
+    (void)LOGMSG(klogWarn, "Alignments are unsorted");
+    self->out_of_order = true;
+    ReferenceMgr_SetCache(self->mgr, UNSORTED_CACHE_SIZE, UNSORTED_OPEN_TABLE_LIMIT);
+    KDataBufferWhack(&self->sec_align);
+    KDataBufferWhack(&self->pri_align);
+    KDataBufferWhack(&self->mismatches);
+    KDataBufferWhack(&self->indels);
+    KDataBufferWhack(&self->coverage);
+    KDataBufferWhack(&self->pri_overlap);
+    KDataBufferWhack(&self->sec_overlap);
+}
+
+#define BAIL_ON_FAIL(STMT) do { rc_t const rc__ = (STMT); if (rc__) return rc__; } while(0)
+
+static rc_t FlushBuffers(Reference *self, uint64_t upto, bool full, bool final, uint32_t maxSeqLen)
+{
+    if (!self->out_of_order && upto > 0) {
+        size_t offset = 0;
+        unsigned *const miss = (unsigned *)self->mismatches.base;
+        unsigned *const indel = (unsigned *)self->indels.base;
+        unsigned *const cov = (unsigned *)self->coverage.base;
+        struct overlap_s *const pri_overlap = (struct overlap_s *)self->pri_overlap.base;
+        struct overlap_s *const sec_overlap = (struct overlap_s *)self->sec_overlap.base;
+        unsigned chunk = 0;
+        
+        while ((self->curPos + offset + (full ? 0 : maxSeqLen)) <= upto) {
+            ReferenceSeqCoverage data;
+            uint64_t const curPos = self->curPos + offset;
+            unsigned const n = self->endPos > (curPos + maxSeqLen) ?
+                               maxSeqLen : (self->endPos - curPos);
+            unsigned const m = curPos + n > upto ? upto - curPos : n;
+            unsigned i;
+            unsigned hi;
+            unsigned lo;
+            
+            if (n == 0) break;
+            
+            memset(&data, 0, sizeof(data));
+            
+            data.ids[ewrefcov_primary_table].elements = self->pri_align.elem_count;
+            data.ids[ewrefcov_primary_table].buffer = self->pri_align.base;
+            data.overlap_ref_pos[ewrefcov_primary_table] = pri_overlap[chunk].min;
+            data.overlap_ref_len[ewrefcov_primary_table] = pri_overlap[chunk].max ? pri_overlap[chunk].max - curPos : 0;
+            
+            data.ids[ewrefcov_secondary_table].elements = self->sec_align.elem_count;
+            data.ids[ewrefcov_secondary_table].buffer = self->sec_align.base;
+            data.overlap_ref_pos[ewrefcov_secondary_table] = sec_overlap[chunk].min;
+            data.overlap_ref_len[ewrefcov_secondary_table] = sec_overlap[chunk].max ? sec_overlap[chunk].max - curPos : 0;
+            
+            for (hi = 0, lo = UINT_MAX, i = 0; i != m; ++i) {
+                unsigned const coverage = cov[offset + i];
+                
+                if (hi < coverage)
+                    hi = coverage;
+                if (lo > coverage)
+                    lo = coverage;
+            }
+            data.low  = lo > 255 ? 255 : lo;
+            data.high = hi > 255 ? 255 : hi;
+            
+            for (i = 0; i != m; ++i)
+                data.mismatches += miss[offset + i];
+
+            for (i = 0; i != m; ++i)
+                data.indels += indel[offset + i];
+            
+            {
+                rc_t rc = ReferenceSeq_AddCoverage(self->rseq, curPos, &data);
+                
+                if (rc) {
+                    Unsorted(self);
+                    return 0;
+                }
+            }
+            
+            KDataBufferResize(&self->pri_align, 0);
+            KDataBufferResize(&self->sec_align, 0);
+            offset += n;
+            ++chunk;
+        }
+        if (!final && offset > 0) {
+            unsigned const newChunkCount = self->pri_overlap.elem_count - chunk;
+            unsigned const newBaseCount = self->endPos - self->curPos - offset;
+            
+            memmove(self->pri_overlap.base, pri_overlap + chunk, newChunkCount * sizeof(pri_overlap[0]));
+            memmove(self->sec_overlap.base, sec_overlap + chunk, newChunkCount * sizeof(sec_overlap[0]));
+            memmove(self->mismatches.base, miss + offset, newBaseCount * sizeof(miss[0]));
+            memmove(self->indels.base, indel + offset, newBaseCount * sizeof(indel[0]));
+            memmove(self->coverage.base, cov + offset, newBaseCount * sizeof(cov[0]));
+
+            KDataBufferResize(&self->pri_overlap, newChunkCount);
+            KDataBufferResize(&self->sec_overlap, newChunkCount);
+            
+            self->curPos += offset;
+        }
+    }
+    return 0;
+}
+
+rc_t ReferenceSetFile(Reference *self, const char id[],
+                      uint64_t length, uint8_t const md5[16], uint32_t maxSeqLen)
+{
+    const ReferenceSeq *rseq;
+    unsigned n;
+    
+    for (n = 0; ; ++n) {
+        if (self->last_id[n] != id[n])
+            break;
+        if (self->last_id[n] == 0 && id[n] == 0)
+            return 0;
+    }
+    while (id[n])
+        ++n;
+    if (n >= sizeof(self->last_id))
+        return RC(rcApp, rcTable, rcAccessing, rcParam, rcTooLong);
+    
+    BAIL_ON_FAIL(FlushBuffers(self, self->length, true, true, maxSeqLen));
+    BAIL_ON_FAIL(ReferenceMgr_GetSeq(self->mgr, &rseq, id));
+
+    if (self->rseq)
+        ReferenceSeq_Release(self->rseq);
+    self->rseq = rseq;
+    
+    memcpy(self->last_id, id, n + 1);
+    self->curPos = self->endPos = 0;
+    self->length = length;
+    self->lastOffset = 0;
+
+    if(!self->out_of_order) (void)PLOGMSG(klogInfo, (klogInfo, "Processing Reference '$(id)'", "id=%s", id));
+    
+    return 0;
+}
+
+rc_t ReferenceVerify(Reference const *self, char const id[], uint64_t length, uint8_t const md5[16])
+{
+    return ReferenceMgr_Verify(self->mgr, id, length, md5);
+}
+
+rc_t ReferenceGet1stRow(Reference const *self, int64_t *refID, char const refName[])
+{
+    const ReferenceSeq* rseq;
+    rc_t rc = ReferenceMgr_GetSeq(self->mgr, &rseq, refName);
+    if( rc == 0 ) {
+        rc = ReferenceSeq_Get1stRow(rseq, refID);
+        ReferenceSeq_Release(rseq);
+    }
+    return rc;
+}
+
+static
+rc_t ReferenceAddCoverage(Reference *const self,
+                          unsigned const refStart,
+                          unsigned const refLength,
+                          uint32_t const mismatches,
+                          uint32_t const indels,
+                          bool const isPrimary,
+                          uint32_t maxSeqLen
+                          )
+{
+    unsigned const refEnd = refStart + refLength;
+    
+    if (refEnd > self->endPos) {
+        unsigned const t1 = refEnd + (maxSeqLen - 1);
+        unsigned const adjust = t1 % maxSeqLen;
+        unsigned const newEndPos = t1 - adjust;
+        unsigned const baseCount = self->endPos - self->curPos;
+        unsigned const newBaseCount = newEndPos - self->curPos;
+        
+        BAIL_ON_FAIL(KDataBufferResize(&self->coverage, newBaseCount));
+        BAIL_ON_FAIL(KDataBufferResize(&self->mismatches, newBaseCount));
+        BAIL_ON_FAIL(KDataBufferResize(&self->indels, newBaseCount));
+        
+        memset(&((unsigned *)self->coverage.base)[baseCount], 0, (newBaseCount - baseCount) * sizeof(unsigned));
+        memset(&((unsigned *)self->mismatches.base)[baseCount], 0, (newBaseCount - baseCount) * sizeof(unsigned));
+        memset(&((unsigned *)self->indels.base)[baseCount], 0, (newBaseCount - baseCount) * sizeof(unsigned));
+        self->endPos = newEndPos;
+    }
+    if ((refEnd - self->curPos) / maxSeqLen >= self->pri_overlap.elem_count) {
+        unsigned const chunks = (refEnd - self->curPos) / maxSeqLen + 1;
+        unsigned const end = self->pri_overlap.elem_count;
+        
+        BAIL_ON_FAIL(KDataBufferResize(&self->pri_overlap, chunks));
+        BAIL_ON_FAIL(KDataBufferResize(&self->sec_overlap, chunks));
+        
+        memset(&((struct overlap_s *)self->pri_overlap.base)[end], 0, (chunks - end) * sizeof(struct overlap_s));
+        memset(&((struct overlap_s *)self->sec_overlap.base)[end], 0, (chunks - end) * sizeof(struct overlap_s));
+    }
+    BAIL_ON_FAIL(FlushBuffers(self, refStart, false, false, maxSeqLen));
+    if (!self->out_of_order) {
+        unsigned const startBase = refStart - self->curPos;
+        unsigned const endChunk = (startBase + refLength) / maxSeqLen;
+        KDataBuffer *const overlapBuffer = isPrimary ? &self->pri_overlap : &self->sec_overlap;
+        unsigned *const cov = &((unsigned *)self->coverage.base)[startBase];
+        unsigned i;
+        
+        ((unsigned *)self->mismatches.base)[startBase] += mismatches;
+        ((unsigned *)self->indels.base)[startBase] += indels;
+        
+        if (((struct overlap_s *)overlapBuffer->base)[endChunk].min == 0 || 
+            ((struct overlap_s *)overlapBuffer->base)[endChunk].min > refStart)
+        {
+            ((struct overlap_s *)overlapBuffer->base)[endChunk].min = refStart;
+        }
+        if (endChunk != 0 &&
+            ((struct overlap_s *)overlapBuffer->base)[endChunk].max < refStart + refLength)
+        {
+            ((struct overlap_s *)overlapBuffer->base)[endChunk].max = refStart + refLength;
+        }
+        
+        for (i = 0; i != refLength; ++i) {
+            if (cov[i] < UINT_MAX)
+                ++cov[i];
+        }
+    }
+    return 0;
+}
+
+static void GetCounts(AlignmentRecord const *data, unsigned const seqLen,
+                      unsigned *const nMatch,
+                      unsigned *const nMiss,
+                      unsigned *const nIndels)
+{
+    bool const *has_mismatch = data->data.has_mismatch.buffer;
+    bool const *has_offset = data->data.has_ref_offset.buffer;
+    int32_t const *ref_offset = data->data.ref_offset.buffer;
+    unsigned const n = data->data.ref_offset.elements;
+    unsigned const left_clip = (n != 0 && has_offset[0] && ref_offset[0] < 0) ? -ref_offset[0] : 0;
+    int right_edge;
+    unsigned nmis;
+    unsigned nmatch;
+    unsigned i;
+    unsigned j;
+    
+    for (right_edge = data->data.ref_len, i = 0; i != n; ++i)
+        right_edge -= ref_offset[i];
+    if (right_edge > seqLen)
+        right_edge = seqLen;
+    for (j = left_clip ? 1 : 0, i = left_clip, nmatch = nmis = 0; i < right_edge; ) {
+        if (has_offset[i]) {
+            int const offs = ref_offset[j++];
+            
+            if (offs < 0) {
+                i += (unsigned)(-offs);
+                continue;
+            }
+        }
+        if (has_mismatch[i])
+            ++nmis;
+        else
+            ++nmatch;
+        ++i;
+    }
+    *nMatch = nmatch;
+    *nMiss = nmis;
+    *nIndels = n - (left_clip ? 1 : 0);
+}
+
+rc_t ReferenceRead(Reference *self, AlignmentRecord *data, uint64_t const pos,
+                   uint32_t const rawCigar[], uint32_t const cigCount,
+                   char const seqDNA[], uint32_t const seqLen, uint32_t *matches, bool acceptNoMatch, unsigned minMatchCount, uint32_t maxSeqLen)
+{
+    *matches = 0;
+    BAIL_ON_FAIL(ReferenceSeq_Compress(self->rseq, 
+                                       (self->acceptHardClip ? ewrefmgr_co_AcceptHardClip : 0) + ewrefmgr_cmp_Binary, 
+                                       pos,
+                                       seqDNA, seqLen, rawCigar, cigCount, 0, NULL, 0, 0, NULL, 0, &data->data));
+
+    if (!acceptNoMatch && data->data.ref_len == 0)
+        return RC(rcApp, rcFile, rcReading, rcConstraint, rcViolated);
+    
+    if (!self->out_of_order && pos < self->lastOffset) {
+        Unsorted(self);
+    }
+    if (self->out_of_order)
+        return 0;
+    else {
+        unsigned nmis;
+        unsigned nmatch;
+        unsigned indels;
+
+        self->lastOffset = data->data.effective_offset;
+        GetCounts(data, seqLen, &nmatch, &nmis, &indels);
+        *matches = nmatch;
+        
+        if (acceptNoMatch || nmatch >= minMatchCount)
+            return ReferenceAddCoverage(self, data->data.effective_offset,
+                                        data->data.ref_len, nmis, indels,
+                                        data->isPrimary, maxSeqLen);
+        else
+            return RC(rcApp, rcFile, rcReading, rcConstraint, rcViolated);
+    }
+}
+
+static rc_t IdVecAppend(KDataBuffer *vec, uint64_t id)
+{
+    uint64_t const end = vec->elem_count;
+    
+    BAIL_ON_FAIL(KDataBufferResize(vec, end + 1));
+    ((uint64_t *)vec->base)[end] = id;
+    return 0;
+}
+
+rc_t ReferenceAddAlignId(Reference *self,
+                         int64_t align_id,
+                         bool is_primary
+                         )
+{
+    if (self->out_of_order)
+        return 0;
+    return IdVecAppend(is_primary ? &self->pri_align : &self->sec_align, align_id);
+}
+
+rc_t ReferenceWhack(Reference *self, bool commit, uint32_t maxSeqLen)
+{
+    rc_t rc = 0;
+    
+    if (self) {
+#if DUMP_CONFIG
+        if (self->mgr)
+            ReferenceMgr_DumpConfig(self->mgr);
+#endif
+        if (commit) {
+            rc = FlushBuffers(self, self->length, true, true, maxSeqLen);
+            if (rc != 0)
+                commit = false;
+        }
+        KDataBufferWhack(&self->sec_align);
+        KDataBufferWhack(&self->pri_align);
+        KDataBufferWhack(&self->mismatches);
+        KDataBufferWhack(&self->indels);
+        KDataBufferWhack(&self->coverage);
+        KDataBufferWhack(&self->pri_overlap);
+        KDataBufferWhack(&self->sec_overlap);
+        if (self->rseq)
+            rc = ReferenceSeq_Release(self->rseq);
+        if (self->out_of_order) {
+            (void)LOGMSG(klogInfo, "Starting coverage calculation");
+            rc = ReferenceMgr_Release(self->mgr, commit, NULL, true);
+        }
+        else {
+            rc = ReferenceMgr_Release(self->mgr, commit, NULL, false);
+        }
+    }
+    return rc;
+}
diff --git a/libs/loader/sequence-writer.c b/libs/loader/sequence-writer.c
new file mode 100644
index 0000000..a5f3e1b
--- /dev/null
+++ b/libs/loader/sequence-writer.c
@@ -0,0 +1,361 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <vdb/database.h>
+
+#include <kdb/manager.h>
+
+#include <insdc/sra.h>
+#include <insdc/insdc.h>
+
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <assert.h>
+#include <ctype.h>
+
+#include <align/writer-sequence.h>
+
+#include <loader/sequence-writer.h>
+#include <loader/common-reader.h>
+
+/* MARK: SequenceWriter Object */
+
+SequenceWriter *SequenceWriterInit(SequenceWriter *self, VDatabase *db) {
+    memset(self, 0, sizeof(*self));
+    self->db = db;
+    VDatabaseAddRef(db);
+    return self;
+}
+
+rc_t SequenceWriteRecord(SequenceWriter *self,
+                         SequenceRecord const *rec,
+                         bool color,
+                         bool isDup,
+                         INSDC_SRA_platform_id platform,
+                         bool keepMismatchQual,
+                         bool no_real_output,
+                         bool hasTI,
+                         char const *QualQuantizer
+                         )
+{
+    rc_t rc = 0;
+    uint8_t nreads = rec->numreads;
+    unsigned i;
+    unsigned seqLen;
+    int64_t dummyRowId;
+    
+    uint8_t readInfo[4096];
+    void *h_readInfo = NULL;
+    
+    INSDC_coord_zero *readStart = (void *)readInfo;
+    INSDC_coord_len *readLen;
+    uint8_t *alcnt;
+    INSDC_SRA_xread_type *readType;
+    INSDC_SRA_read_filter *readFilter;
+    bool *mask = NULL;
+    size_t const elemSize = sizeof(alcnt[0]) + sizeof(readType[0])
+                          + sizeof(readStart[0]) + sizeof(readLen[0])
+                          + sizeof(readFilter[0]);
+    
+    TableWriterSeqData data;
+
+    for (i = seqLen = 0; i != nreads; ++i) {
+        seqLen += rec->readLen[i];
+    }
+    
+    if (nreads * elemSize + keepMismatchQual * seqLen * sizeof(mask[0]) > sizeof(readInfo))
+    {
+        h_readInfo = malloc(nreads * elemSize + keepMismatchQual * seqLen * sizeof(mask[0]));
+        if (h_readInfo == NULL)
+            return RC(rcAlign, rcTable, rcWriting, rcMemory, rcExhausted);
+        readStart = h_readInfo;
+    }
+    readLen = (INSDC_coord_len *)&readStart[nreads];
+    alcnt = (uint8_t *)&readLen[nreads];
+    readType = (INSDC_SRA_xread_type *)&alcnt[nreads];
+    readFilter = (INSDC_SRA_read_filter *)&readType[nreads];
+    
+    if (keepMismatchQual) {
+        mask = (bool *)&readFilter[nreads];
+        
+        for (i = 0; i != seqLen; ++i) {
+            mask[i] = (rec->qual[i] & 0x80) != 0;
+        }
+    }
+    
+    for (i = 0; i != nreads; ++i) {
+        alcnt[i] = rec->aligned[i] ? 1 : 0;
+        readLen[i] = rec->readLen[i];
+        readStart[i] = rec->readStart[i];
+        readType[i] = readLen[i] ? SRA_READ_TYPE_BIOLOGICAL : SRA_READ_TYPE_TECHNICAL;
+        switch ( rec->orientation[i] )
+        {
+            case ReadOrientationForward:
+                readType[i] |= SRA_READ_TYPE_FORWARD;
+                break;
+            case ReadOrientationReverse:
+                readType[i] |= SRA_READ_TYPE_REVERSE;
+                break;
+            case ReadOrientationUnknown:
+            default:
+                break;
+        }
+        readFilter[i] = isDup ? SRA_READ_FILTER_CRITERIA
+                      : rec->is_bad[i] ? SRA_READ_FILTER_REJECT : SRA_READ_FILTER_PASS;
+    }
+
+    memset(&data, 0, sizeof(data));
+    
+    data.sequence.buffer = rec->seq;
+    data.sequence.elements = seqLen;
+    
+    data.quality.buffer = rec->qual;
+    data.quality.elements = seqLen;
+    
+    if (keepMismatchQual) {
+        data.no_quantize_mask.buffer = mask;
+        data.no_quantize_mask.elements = seqLen;
+    }
+    
+    data.alignment_count.buffer = alcnt;
+    data.alignment_count.elements = nreads;
+    
+    data.nreads = nreads;
+    
+    data.read_type.buffer = readType;
+    data.read_type.elements = nreads;
+    
+    data.read_start.buffer = readStart;
+    data.read_start.elements = nreads;
+    
+    data.read_len.buffer = readLen;
+    data.read_len.elements = nreads;
+    
+    data.tmp_key_id = rec->keyId;
+    
+    data.spot_group.buffer = rec->spotGroup;
+    data.spot_group.elements = rec->spotGroupLen;
+    
+    data.cskey.buffer = rec->cskey;
+    data.cskey.elements = nreads;
+    
+    data.read_filter.buffer = readFilter;
+    data.read_filter.elements = nreads;
+    
+    data.platform.buffer = &platform;
+    data.platform.elements = 1;
+    
+    data.ti.buffer = rec->ti;
+    data.ti.elements = nreads;
+    
+    if (!no_real_output) {
+        if (self->tbl == NULL) {
+            int csoption = (color ? ewseq_co_ColorSpace : 0);
+
+	    if(hasTI) csoption |= ewseq_co_TI;
+            
+            rc = TableWriterSeq_Make(&self->tbl, self->db,
+                                     csoption | ewseq_co_NoLabelData | ewseq_co_SpotGroup, QualQuantizer);
+        }
+        if (rc == 0) {
+            rc = TableWriterSeq_Write(self->tbl, &data, &dummyRowId);
+        }
+    }
+    
+    if (h_readInfo)
+        free(h_readInfo);
+    
+    return rc;
+}
+
+rc_t SequenceDoneWriting(SequenceWriter *self)
+{
+    return TableWriterSeq_TmpKeyStart(self->tbl);
+}
+
+rc_t SequenceReadKey(const SequenceWriter *cself, int64_t row, uint64_t *keyId)
+{
+    return TableWriterSeq_TmpKey(cself->tbl, row, keyId);
+}
+
+rc_t SequenceUpdateAlignData(SequenceWriter *self, int64_t rowId, unsigned nreads,
+                             int64_t const primeId[/* nreads */],
+                             uint8_t const algnCnt[/* nreads */])
+{
+    TableWriterData data[2];
+    
+    data[0].buffer = primeId; data[0].elements = nreads;
+    data[1].buffer = algnCnt; data[1].elements = nreads;
+    
+    return TableWriterSeq_WriteAlignmentData(self->tbl, rowId, &data[0], &data[1]);
+}
+
+void SequenceWhack(SequenceWriter *self, bool commit) {
+    uint64_t dummyRows;
+    rc_t rc;
+    
+    VDatabaseRelease(self->db);
+    
+    if (self->tbl == NULL)
+        return;
+    
+    rc = TableWriterSeq_Whack(self->tbl, commit, &dummyRows);
+}
+
+/* MARK: SequenceRecord Object */
+static
+rc_t SequenceRecordResize(SequenceRecord *self,
+                          KDataBuffer *storage,
+                          unsigned numreads,
+                          unsigned seqLen)
+{
+    size_t sz;
+    rc_t rc;
+    
+    sz = seqLen * (sizeof(self->seq[0]) + sizeof(self->qual[0])) +
+         numreads * (sizeof(self->ti) +
+                     sizeof(self->readStart[0]) +
+                     sizeof(self->readLen[0]) +
+                     sizeof(self->aligned[0]) + 
+                     sizeof(self->orientation[0]) +
+                     sizeof(self->alignmentCount[0]) +
+                     sizeof(self->cskey[0])
+                     );
+    storage->elem_bits = 8;
+    rc = KDataBufferResize(storage, sz);
+    if (rc)
+        return rc;
+    self->numreads = numreads;
+    
+    self->ti = (uint64_t *)storage->base;
+    self->readStart = (uint32_t *)&self->ti[numreads];
+    self->readLen = (uint32_t *)&self->readStart[numreads];
+    self->aligned = (bool *)&self->readLen[numreads];
+    self->orientation = (uint8_t *)&self->aligned[numreads];
+    self->is_bad = (uint8_t *)&self->orientation[numreads];
+    self->alignmentCount = (uint8_t *)&self->is_bad[numreads];
+    self->cskey = (char *)&self->alignmentCount[numreads];
+    self->seq = (char *)&self->cskey[numreads];
+    self->qual = (uint8_t *)&self->seq[seqLen];
+
+    self->spotGroup = NULL;
+    self->spotGroupLen = 0;
+    
+    return 0;
+}
+
+rc_t SequenceRecordInit(SequenceRecord *self, unsigned numreads, unsigned readLen[])
+{
+    unsigned i;
+    unsigned seqlen = 0;
+    rc_t rc;
+    
+    for (i = 0; i != numreads; ++i) {
+        seqlen += readLen[i];
+    }
+    rc = SequenceRecordResize(self, &self->storage, numreads, seqlen);
+    if (rc)
+        return rc;
+    memset(self->storage.base, 0, KDataBufferBytes(&self->storage));
+    
+    for (seqlen = 0, i = 0; i != numreads; ++i) {
+        self->readLen[i] = readLen[i];
+        self->readStart[i] = seqlen;
+        seqlen += readLen[i];
+    }
+    self->numreads = numreads;
+    memset(self->cskey, 'T', numreads);
+    return 0;
+}
+
+rc_t SequenceRecordAppend(SequenceRecord *self,
+                          const SequenceRecord *other
+                          )
+{
+    /* save the locations of the original data */
+    unsigned const seq = (uint8_t const *)self->seq - (uint8_t const *)self->storage.base;
+    unsigned const qual = (uint8_t const *)self->qual - (uint8_t const *)self->storage.base;
+    unsigned const cskey = (uint8_t const *)self->cskey - (uint8_t const *)self->storage.base;
+    unsigned const alignmentCount = (uint8_t const *)self->alignmentCount - (uint8_t const *)self->storage.base;
+    unsigned const is_bad = (uint8_t const *)self->is_bad - (uint8_t const *)self->storage.base;
+    unsigned const orientation = (uint8_t const *)self->orientation - (uint8_t const *)self->storage.base;
+    unsigned const aligned = (uint8_t const *)self->aligned - (uint8_t const *)self->storage.base;
+    unsigned const ti = (uint8_t const *)self->ti - (uint8_t const *)self->storage.base;
+    unsigned const readLen = (uint8_t const *)self->readLen - (uint8_t const *)self->storage.base;
+/*    unsigned const readStart = (uint8_t const *)self->readStart - (uint8_t const *)self->storage.base;*/
+
+    rc_t rc;
+    unsigned seqlen;
+    unsigned otherSeqlen;
+    unsigned i;
+    unsigned numreads = self->numreads;
+    
+    for (seqlen = 0, i = 0; i != numreads; ++i) {
+        seqlen += self->readLen[i];
+    }
+    for (otherSeqlen = 0, i = 0; i != other->numreads; ++i) {
+        otherSeqlen += other->readLen[i];
+    }
+
+    rc = SequenceRecordResize(self, &self->storage, self->numreads + other->numreads, seqlen + otherSeqlen);
+    if (rc)
+        return rc;
+    /* this needs to be reverse order from assignment in Resize function
+     * these regions can overlap
+     */
+    memmove(self->qual,             &((uint8_t const *)self->storage.base)[qual],              seqlen);
+    memmove(self->seq,              &((uint8_t const *)self->storage.base)[seq],               seqlen);
+    memmove(self->cskey,            &((uint8_t const *)self->storage.base)[cskey],             numreads * sizeof(self->cskey[0]));
+    memmove(self->alignmentCount,   &((uint8_t const *)self->storage.base)[alignmentCount],    numreads * sizeof(self->alignmentCount[0]));
+    memmove(self->is_bad,           &((uint8_t const *)self->storage.base)[is_bad],            numreads * sizeof(self->is_bad[0]));
+    memmove(self->orientation,      &((uint8_t const *)self->storage.base)[orientation],       numreads * sizeof(self->orientation[0]));
+    memmove(self->aligned,          &((uint8_t const *)self->storage.base)[aligned],           numreads * sizeof(self->aligned[0]));
+    memmove(self->readLen,          &((uint8_t const *)self->storage.base)[readLen],           numreads * sizeof(self->readLen[0]));
+    memmove(self->ti,               &((uint8_t const *)self->storage.base)[ti],                numreads * sizeof(self->ti[0]));
+    
+    memcpy(&self->ti[numreads],             other->ti,              other->numreads * sizeof(self->ti[0]));
+    memcpy(&self->readLen[numreads],        other->readLen,         other->numreads * sizeof(self->readLen[0]));
+    memcpy(&self->aligned[numreads],        other->aligned,         other->numreads * sizeof(self->aligned[0]));
+    memcpy(&self->orientation[numreads],    other->orientation,     other->numreads * sizeof(self->orientation[0]));
+    memcpy(&self->is_bad[numreads],         other->is_bad,          other->numreads * sizeof(self->is_bad[0]));
+    memcpy(&self->alignmentCount[numreads], other->alignmentCount,  other->numreads * sizeof(self->alignmentCount[0]));
+    memcpy(&self->cskey[numreads],          other->cskey,           other->numreads * sizeof(self->cskey[0]));
+    memcpy(&self->seq[seqlen],              other->seq,             otherSeqlen);
+    memcpy(&self->qual[seqlen],             other->qual,            otherSeqlen);
+    
+    for (i = 0, seqlen = 0; i != self->numreads; ++i) {
+        self->readStart[i] = seqlen;
+        seqlen += self->readLen[i];
+    }
+    
+    return 0;
+}
diff --git a/libs/search/Makefile b/libs/search/Makefile
index 59a8f9c..dc494ca 100644
--- a/libs/search/Makefile
+++ b/libs/search/Makefile
@@ -42,18 +42,16 @@ include $(TOP)/build/Makefile.env
 #-------------------------------------------------------------------------------
 # outer targets
 #
-vers-includes: $(addsuffix .vers.h,$(EXT_LIBS))
-
-all std: makedirs vers-includes
+all std: makedirs
 	@ $(MAKE_CMD) $(TARGDIR)/std
 
-$(INT_LIBS): makedirs vers-includes
+$(INT_LIBS): makedirs
 	@ $(MAKE_CMD) $(ILIBDIR)/$@
 
-$(EXT_LIBS): makedirs vers-includes
+$(EXT_LIBS): makedirs
 	@ $(MAKE_CMD) $(LIBDIR)/$@
 
-.PHONY: vers-includes all std $(ALL_LIBS)
+.PHONY: all std $(ALL_LIBS)
 
 #-------------------------------------------------------------------------------
 # std
diff --git a/libs/search/libksrch.vers b/libs/search/libksrch.vers
index 238d6e8..2ac9634 100644
--- a/libs/search/libksrch.vers
+++ b/libs/search/libksrch.vers
@@ -1 +1 @@
-1.0.7
+1.0.13
diff --git a/libs/search/libksrch.vers.h b/libs/search/libksrch.vers.h
deleted file mode 100644
index a60a8e9..0000000
--- a/libs/search/libksrch.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBKSRCH_VERS 0x01000007
diff --git a/libs/sra/Makefile b/libs/sra/Makefile
index 3b6c11c..acd8c7c 100644
--- a/libs/sra/Makefile
+++ b/libs/sra/Makefile
@@ -31,7 +31,6 @@ MODULE = libs/sra
 INT_LIBS = \
 
 EXT_LIBS = \
-	libsrapath \
 	libsraschema \
 	libwsraschema \
 	libsradb \
@@ -49,18 +48,16 @@ VPATH += $(OBJDIR)
 #-------------------------------------------------------------------------------
 # outer targets
 #
-vers-includes: $(addsuffix .vers.h,$(EXT_LIBS))
-
-all std: makedirs vers-includes
+all std: vers-includes
 	@ $(MAKE_CMD) $(TARGDIR)/std
 
-$(INT_LIBS): makedirs vers-includes
+$(INT_LIBS): vers-includes
 	@ $(MAKE_CMD) $(ILIBDIR)/$@
 
-$(EXT_LIBS): makedirs vers-includes
+$(EXT_LIBS): vers-includes
 	@ $(MAKE_CMD) $(LIBDIR)/$@
 
-.PHONY: vers-includes all std $(ALL_LIBS)
+.PHONY: all std $(ALL_LIBS)
 
 #-------------------------------------------------------------------------------
 # std
@@ -72,10 +69,18 @@ $(TARGDIR)/std: \
 .PHONY: $(TARGDIR)/all $(TARGDIR)/std
 
 #-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_LIBS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
 # clean
 #
 clean: stdclean
-	@ rm -f $(LIBDIR)/libsra-schema.* $(LIBDIR)/libwsra-schema.*
+	@ rm -f $(LIBDIR)/libsra-schema.* $(LIBDIR)/libwsra-schema.* $(LIBDIR)/sra-dflt-schema*
+	@ rm -f $(BINDIR)/libsra-schema.* $(BINDIR)/libwsra-schema.*
 
 .PHONY: clean
 
@@ -89,35 +94,38 @@ tag: \
 
 
 #-------------------------------------------------------------------------------
-# srapath stub library
-#
-$(LIBDIR)/libsrapath: $(LIBDIR)/libsrapath.$(LIBX)
-
-SRAPATH_SRC = \
-	srapath-stub
-
-SRAPATH_OBJ = \
-	$(addsuffix .$(LOBX),$(SRAPATH_SRC))
-
-$(LIBDIR)/libsrapath.$(LIBX): $(SRAPATH_OBJ)
-	$(LD) --slib -o $@ $^
-
-libsrapath.vers.h:
-	@ true
-
-
-#-------------------------------------------------------------------------------
 # sradb embedded schema
 #
 $(LIBDIR)/libsraschema: $(LIBDIR)/libsraschema.$(LIBX)
 
 $(LIBDIR)/libwsraschema: $(LIBDIR)/libwsraschema.$(LIBX)
 
-sra-dflt-schema: sra-dflt-schema.$(OBJX)
-	$(LD) --exe -o $@ $^ -skapp -svdb -skdb -skfg -skfs -sklib -ldl -sz -sbz2
-
-sra-schema.c: sra-dflt-schema $(SRCDIR)/built-in.vschema $(TOP)/build/sra-dflt-schema.sh
-	@ $(TOP)/build/sra-dflt-schema.sh $(OS) ./sra-dflt-schema -o$@ -I$(TOP)/interfaces -T$@.d $(SRCDIR)/built-in.vschema
+SRA_DFLT_SCHEMA_LIBS = \
+	-skapp \
+	-svdb \
+	-skdb \
+	-svfs \
+	-skurl \
+	-skrypto \
+	-skfg \
+	-skfs \
+	-sksproc \
+	-sklib
+
+SRA_DFLT_SCHEMA_OS_LIBS = \
+	-ldl \
+	-sz \
+	-sbz2 \
+	-lm
+
+# set workdir for RUN_REMOTELY in rwin mode 
+RWORKDIR=$(OBJDIR)
+
+$(LIBDIR)/sra-dflt-schema: sra-dflt-schema.$(OBJX)
+	$(LD) --exe -o $@ $^ $(SRA_DFLT_SCHEMA_LIBS) $(SRA_DFLT_SCHEMA_OS_LIBS)
+
+sra-schema.c: $(LIBDIR)/sra-dflt-schema $(SRCDIR)/built-in.vschema $(TOP)/build/sra-dflt-schema.sh
+	@ $(TOP)/build/sra-dflt-schema.sh $(BUILD_OS) "$(RUN_REMOTELY) $(LIBDIR)/sra-dflt-schema" -o$@ -I$(TOP)/interfaces -T$(OBJDIR)/$@.d $(SRCDIR)/built-in.vschema
 
 SRA_SCHEMA_SRC = \
 	sraschema \
@@ -149,17 +157,8 @@ SRASCHEMA_SRC = \
 WSRASCHEMA_SRC = \
 	wsraschema-stub
 
-ifeq (--static,$(STATIC))
-	SRASCHEMA_SRC += $(SRA_SCHEMA_SRC)
-else
-	SRASCHEMA_DEPS = $(LIBDIR)/libsra-schema.$(SHLX)
-endif
-
-ifeq (--static,$(STATIC))
-	WSRASCHEMA_SRC += $(SRA_SCHEMA_SRC)
-else
-	WSRASCHEMA_DEPS = $(LIBDIR)/libwsra-schema.$(SHLX)
-endif
+SRASCHEMA_SRC += $(SRA_SCHEMA_SRC)
+WSRASCHEMA_SRC += $(SRA_SCHEMA_SRC)
 
 SRASCHEMA_OBJ = \
 	$(addsuffix .$(LOBX),$(SRASCHEMA_SRC))
@@ -186,7 +185,8 @@ SRADBCMN_SRC = \
 	sramgr-cmn \
 	sratbl-cmn \
 	sracol \
-	types
+	types \
+    sracache
 
 SRADB_SRC = \
 	$(SRADBCMN_SRC) \
@@ -198,14 +198,16 @@ SRADB_OBJ = \
 
 SRADB_LIB = \
 	-ssraschema \
-	-ssrapath \
 	-dvdb \
 	-dkdb \
+	-dvfs \
 	-dkfs \
+	-lkfg \
+	-dkproc \
 	-dklib
 
 $(LIBDIR)/libsradb.$(SHLX): $(SRADB_OBJ)
-	$(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(SRADB_LIB)
+	$(LD) --dlib --vers $(SRCDIR) -o $@ $^ -ssrapath $(SRADB_LIB)
 
 $(LIBDIR)/libsradb.$(LIBX): $(SRADB_OBJ)
 	$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(SRADB_LIB)
@@ -229,14 +231,15 @@ WSRADB_OBJ = \
 
 WSRADB_LIB = \
 	-ssraschema \
-	-ssrapath \
 	-dwvdb \
 	-dwkdb \
-	-dkfs \
+	-dvfs \
+	-lkfg \
+	-dkproc \
 	-dklib
 
 $(LIBDIR)/libwsradb.$(SHLX): $(WSRADB_OBJ)
-	$(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(WSRADB_LIB)
+	$(LD) --dlib --vers $(SRCDIR) -o $@ $^ -ssrapath $(WSRADB_LIB)
 
 $(LIBDIR)/libwsradb.$(LIBX): $(WSRADB_OBJ)
 	$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(WSRADB_LIB)
diff --git a/libs/sra/libsradb.vers b/libs/sra/libsradb.vers
index ef538c2..55f20a1 100644
--- a/libs/sra/libsradb.vers
+++ b/libs/sra/libsradb.vers
@@ -1 +1 @@
-3.1.2
+3.1.13
diff --git a/libs/sra/libsradb.vers.h b/libs/sra/libsradb.vers.h
deleted file mode 100644
index 96b09d2..0000000
--- a/libs/sra/libsradb.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBSRADB_VERS 0x03010002
diff --git a/libs/sra/libsrareader.vers b/libs/sra/libsrareader.vers
index 781dcb0..0664a8f 100644
--- a/libs/sra/libsrareader.vers
+++ b/libs/sra/libsrareader.vers
@@ -1 +1 @@
-1.1.3
+1.1.6
diff --git a/libs/sra/libsrareader.vers.h b/libs/sra/libsrareader.vers.h
deleted file mode 100644
index 784c8f0..0000000
--- a/libs/sra/libsrareader.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBSRAREADER_VERS 0x01010003
diff --git a/libs/sra/libsraschema.vers.h b/libs/sra/libsraschema.vers.h
deleted file mode 100644
index 98a217f..0000000
--- a/libs/sra/libsraschema.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBSRASCHEMA_VERS 0x01010000
diff --git a/libs/sra/libwsradb.vers b/libs/sra/libwsradb.vers
index ff365e0..55f20a1 100644
--- a/libs/sra/libwsradb.vers
+++ b/libs/sra/libwsradb.vers
@@ -1 +1 @@
-3.1.3
+3.1.13
diff --git a/libs/sra/libwsradb.vers.h b/libs/sra/libwsradb.vers.h
deleted file mode 100644
index 859a66d..0000000
--- a/libs/sra/libwsradb.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBWSRADB_VERS 0x03010003
diff --git a/libs/sra/libwsraschema.vers.h b/libs/sra/libwsraschema.vers.h
deleted file mode 100644
index 9601db1..0000000
--- a/libs/sra/libwsraschema.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBWSRASCHEMA_VERS 0x01010000
diff --git a/libs/sra/reader-abi.c b/libs/sra/reader-abi.c
index 7540201..c48f541 100644
--- a/libs/sra/reader-abi.c
+++ b/libs/sra/reader-abi.c
@@ -30,6 +30,7 @@
 #include <sra/abi.h>
 #include <os-native.h>
 #include <sysalloc.h>
+#include <klib/text.h>
 
 #include "reader-cmn.h"
 
@@ -62,7 +63,7 @@ struct AbsolidReader {
     /* current spot data shortcuts */
     const SRAReaderColumn* csread;
     const char** cs_key;
-    const uint8_t** qual1;
+    const SRAReaderColumn* qual1;
     const INSDC_coord_zero** trim_start;
     const INSDC_coord_len** trim_len;
     const float** signal;
@@ -86,7 +87,7 @@ rc_t AbsolidReaderInit(const AbsolidReader* self,
     if( (rc = SRAReaderInit(&self->dad, options, AbsolidReader_master_columns_desc)) == 0 &&
         (rc = SRAReader_FindColData(&self->dad, &AbsolidReader_master_columns_desc[0], &me->csread, NULL)) == 0 &&
         (rc = SRAReader_FindColData(&self->dad, &AbsolidReader_master_columns_desc[1], NULL, (const void***)&self->cs_key)) == 0 &&
-        (rc = SRAReader_FindColData(&self->dad, &AbsolidReader_master_columns_desc[2], NULL, (const void***)&self->qual1)) == 0 &&
+        (rc = SRAReader_FindColData(&self->dad, &AbsolidReader_master_columns_desc[2], &me->qual1, NULL)) == 0 &&
         (rc = SRAReader_FindColData(&self->dad, &AbsolidReader_master_columns_desc[3], NULL, (const void***)&self->trim_start)) == 0 &&
         (rc = SRAReader_FindColData(&self->dad, &AbsolidReader_master_columns_desc[4], NULL, (const void***)&self->trim_len)) == 0 &&
         (rc = SRAReader_FindColData(&self->dad, &AbsolidReader_master_columns_desc[5], NULL, (const void***)&self->signal)) == 0 ) {
@@ -189,7 +190,7 @@ LIB_EXPORT rc_t CC AbsolidReaderSpotName(const AbsolidReader* self,
                 }
                 if( psz > 0 ) {
                     me->prefix_sz = psz + 2;
-                    strncpy(me->prefix_buf, spotname, me->prefix_sz);
+                    string_copy(me->prefix_buf, sizeof(me->prefix_buf), spotname, me->prefix_sz);
                 } else {
                     me->prefix_sz = 0;
                 }
@@ -279,6 +280,8 @@ LIB_EXPORT rc_t CC AbsolidReaderHeader(const AbsolidReader* self, uint32_t readI
         char tmp[1024];
         if( spotname_sz == 0 ) {
             spotname_sz = snprintf(tmp, sizeof(tmp) - 1, "%s.%u", self->dad.accession, self->dad.spot);
+            if ( spotname_sz < 0 )
+                return RC ( rcSRA, rcString, rcConstructing, rcData, rcCorrupt );
             spotname = tmp;
         }
         if( readId > 0 && read_label_sz > 0 ) {
@@ -295,10 +298,14 @@ LIB_EXPORT rc_t CC AbsolidReaderHeader(const AbsolidReader* self, uint32_t readI
                            self->dad.accession, self->dad.spot, spotname_sz, spotname);
         }
     }
+#if SNPRINTF_ACTUALLY_WORKED_THE_WAY_YOU_THINK
     if( ret < 0 ) {
         ret = 0;
         rc = RC(rcSRA, rcString, rcConstructing, rcMessage, rcUnknown);
     } else if( ret >= (int)dsize ) {
+#else
+    if( ret < 0 || ret >= (int)dsize ) {
+#endif
         rc = RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
     }
     if( written != NULL ) {
@@ -317,7 +324,7 @@ LIB_EXPORT rc_t CC AbsolidReaderBase(const AbsolidReader* self, uint32_t readId,
     CHECK_SPOT(self->dad);
 
     if( readId > 0 ) {
-        if( (rc = AbsolidReader_SpotReadInfo(self, readId, NULL, NULL, NULL, &read_start, &read_len)) != 0 ) {
+        if( (rc = AbsolidReader_SpotReadInfo(self, readId--, NULL, NULL, NULL, &read_start, &read_len)) != 0 ) {
             return rc;
         }
     } else {
@@ -335,7 +342,7 @@ LIB_EXPORT rc_t CC AbsolidReaderBase(const AbsolidReader* self, uint32_t readId,
         return RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
     } else {
         const char* b = self->csread->base;
-        data[0] = (*me->cs_key)[readId - 1];
+        data[0] = (*me->cs_key)[readId];
         memcpy(&data[1], &b[read_start], read_len - 1);
     }
     data[read_len] = '\0';
@@ -358,8 +365,8 @@ LIB_EXPORT rc_t CC AbsolidReaderQuality(const AbsolidReader* self, uint32_t read
     } else {
         return RC(rcSRA, rcFormatter, rcConstructing, rcFormat, rcUnsupported);
     }
-    if( read_len >= self->minReadLen ) {
-        const int8_t* q = (int8_t*)*me->qual1;
+    if( read_len >= self->minReadLen && me->qual1->size ) {
+        const int8_t* q = me->qual1->base;
         char* d = data;
         INSDC_coord_len i;
 
@@ -372,6 +379,8 @@ LIB_EXPORT rc_t CC AbsolidReaderQuality(const AbsolidReader* self, uint32_t read
                 d = data;
             }
             x = snprintf(d, dsize - j, "%i ", (int)(q[i]));
+            if ( x < 0 )
+                return RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
             d += x;
             j += x;
         }
@@ -420,6 +429,8 @@ rc_t AbsolidReaderSignal(const AbsolidReader* self, uint32_t readId, int idx, ch
                     d = data;
                 }
                 x = snprintf(d, dsize - j, "%.6g ", s[i * 4 + idx]);
+                if ( x < 0 )
+                    return RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
                 d += x;
                 j += x;
             }
diff --git a/libs/sra/reader-fastq.c b/libs/sra/reader-fastq.c
index 008c11f..bfd77ec 100644
--- a/libs/sra/reader-fastq.c
+++ b/libs/sra/reader-fastq.c
@@ -266,6 +266,8 @@ rc_t FastqReader_Header(const FastqReader* self, bool* label,
         char tmp[1024];
         if( spotname_sz == 0 ) {
             ret = snprintf(tmp, sizeof(tmp) - 1, "%s.%u", self->dad.accession, self->dad.spot);
+            if ( ret < 0 )
+                return RC ( rcSRA, rcString, rcConstructing, rcData, rcCorrupt );
             spotname = tmp;
             spotname_sz = ret;
         }
@@ -299,10 +301,14 @@ rc_t FastqReader_Header(const FastqReader* self, bool* label,
         }
     }
 
+#if SNPRINTF_ACTUALLY_WORKED_THE_WAY_YOU_THINK
     if( ret < 0 ) {
         ret = 0;
         rc = RC(rcSRA, rcString, rcConstructing, rcMessage, rcUnknown);
     } else if( ret >= (int)maxlen ) {
+#else
+    if( ret < 0 || ret >= (int)maxlen ) {
+#endif
         rc = RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
     }
     if( written != NULL ) {
@@ -370,6 +376,7 @@ rc_t FastqReader_CSconvert(char from, char to, char* first)
 LIB_EXPORT rc_t CC FastqReaderBase(const FastqReader* self, uint32_t readId, char* data, size_t dsize, size_t* written)
 {
     rc_t rc = 0;
+    uint32_t num_reads;
     INSDC_coord_zero read_start = 0;
     INSDC_coord_len read_len = 0;
 
@@ -377,13 +384,13 @@ LIB_EXPORT rc_t CC FastqReaderBase(const FastqReader* self, uint32_t readId, cha
     CHECK_SPOT(self->dad);
 
     if( readId > 0 ) {
-        if( (rc = FastqReader_SpotReadInfo(self, readId, NULL, NULL, NULL, &read_start, &read_len)) != 0 ) {
+        if( (rc = FastqReader_SpotReadInfo(self, readId--, NULL, NULL, NULL, &read_start, &read_len)) != 0 ) {
             return rc;
         }
-    } else if( me->dad.options & eColorSpace ) {
-        return RC(rcSRA, rcFormatter, rcConstructing, rcFormat, rcUnsupported);
-    } else if( (rc = FastqReader_SpotInfo(self, NULL, NULL, NULL, NULL, &read_len, NULL)) != 0 ) {
+    } else if( (rc = FastqReader_SpotInfo(self, NULL, NULL, NULL, NULL, &read_len, &num_reads)) != 0 ) {
         return rc;
+    } else if( (me->dad.options & eColorSpace) && num_reads > 1 ) {
+        return RC(rcSRA, rcFormatter, rcConstructing, rcFormat, rcUnsupported);
     }
     if( me->dad.options & eColorSpace ) {
         read_len++;
@@ -396,7 +403,6 @@ LIB_EXPORT rc_t CC FastqReaderBase(const FastqReader* self, uint32_t readId, cha
     }
     if( me->dad.options & eColorSpace ) {
         const char* b = self->csread->base;
-        --readId;
         data[0] = me->csKey == '\0' ? (*self->cs_key)[readId] : me->csKey;
         memcpy(&data[1], &b[read_start], read_len - 1);
         if( read_len > 1 ) {
diff --git a/libs/sra/reader-illumina.c b/libs/sra/reader-illumina.c
index b3acfdf..4c4e6d3 100644
--- a/libs/sra/reader-illumina.c
+++ b/libs/sra/reader-illumina.c
@@ -30,10 +30,13 @@
 #include <sra/illumina.h>
 #include <os-native.h>
 #include <sysalloc.h>
+#include <va_copy.h>
 
 #include "reader-cmn.h"
 
 #include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
 #include <string.h>
 #include <math.h>
 
@@ -75,7 +78,7 @@ struct IlluminaReader {
     const int32_t** x;
     const int32_t** y;
     const SRAReaderColumn* read;
-    const uint8_t** qual1;
+    const SRAReaderColumn* qual1;
     const signed char** qual4;
     const float** signal;
     const float** noise;
@@ -105,7 +108,7 @@ rc_t IlluminaReaderInit(const IlluminaReader* self, bool read, bool qual1, bool
         (rc = SRAReader_FindColData(&self->dad, &IlluminaReader_master_columns_desc[2], NULL, (const void***)&self->x)) == 0 &&
         (rc = SRAReader_FindColData(&self->dad, &IlluminaReader_master_columns_desc[3], NULL, (const void***)&self->y)) == 0 &&
         (rc = SRAReader_FindColData(&self->dad, &IlluminaReader_master_columns_desc[4], &me->read, NULL)) == 0 &&
-        (rc = SRAReader_FindColData(&self->dad, &IlluminaReader_master_columns_desc[5], NULL, (const void***)&self->qual1)) == 0 &&
+        (rc = SRAReader_FindColData(&self->dad, &IlluminaReader_master_columns_desc[5], &me->qual1, NULL)) == 0 &&
         (rc = SRAReader_FindColData(&self->dad, &IlluminaReader_master_columns_desc[6], NULL, (const void***)&self->qual4)) == 0 &&
         (rc = SRAReader_FindColData(&self->dad, &IlluminaReader_master_columns_desc[7], NULL, (const void***)&self->signal)) == 0 &&
         (rc = SRAReader_FindColData(&self->dad, &IlluminaReader_master_columns_desc[8], NULL, (const void***)&self->noise)) == 0 &&
@@ -173,16 +176,16 @@ LIB_EXPORT rc_t CC IlluminaReader_SpotInfo(const IlluminaReader* self,
     rc_t rc = SRAReader_SpotInfo(&self->dad, spotname, spotname_sz, spot_len, num_reads);
     if( rc == 0 ) {
         if( lane ) {
-            *lane = self->lane ? **self->lane : 0;
+            *lane = (self->lane && *self->lane) ? **self->lane : 0;
         }
         if( tile ) {
-            *tile = self->tile ? **self->tile : ((self->dad.spot / 10001) + 1);
+            *tile = (self->tile && *self->tile) ? **self->tile : ((self->dad.spot / 10001) + 1);
         }
         if( x ) {
-            *x = self->x ? **self->x : 0;
+            *x = (self->x && *self->x) ? **self->x : 0;
         }
         if( y ) {
-            *y = self->y ? **self->y : self->dad.spot;
+            *y = (self->y && *self->y) ? **self->y : self->dad.spot;
         }
     }
     return rc;
@@ -196,6 +199,39 @@ LIB_EXPORT rc_t CC IlluminaReader_SpotReadInfo(const IlluminaReader* self, uint3
                                   read_label, read_label_sz, read_start, read_len);
 }
 
+static
+int kludge_snprintf ( char *buff, size_t bsize, const char *fmt, ... )
+{
+    int status;
+    va_list args, args2;
+
+    va_start ( args, fmt );
+    va_copy ( args2, args );
+
+    status = vsnprintf ( buff, bsize, fmt, args );
+    if ( status < 0 )
+    {
+        size_t kludge_size = 64 * 1024;
+        void *kludge = malloc ( kludge_size );
+        if ( kludge != NULL )
+        {
+            status = vsnprintf ( kludge, kludge_size, fmt, args2 );
+            if ( status >= 0 )
+            {
+                memcpy ( buff, kludge, ( size_t ) status > bsize ? bsize : ( size_t ) status );
+                if ( ( size_t ) status < bsize )
+                    buff [ status ] = 0;
+            }
+            free ( kludge );
+        }
+    }
+
+    va_end ( args2 );
+    va_end ( args );
+
+    return status;
+}
+
 LIB_EXPORT rc_t CC IlluminaReaderBase(const IlluminaReader* self, char* data, size_t dsize, size_t* written)
 {
     rc_t rc = 0;
@@ -213,7 +249,12 @@ LIB_EXPORT rc_t CC IlluminaReaderBase(const IlluminaReader* self, char* data, si
     } else if( (rc = IlluminaReader_SpotInfo(self, NULL, NULL, &lane, &tile, &x, &y, &spot_len, NULL)) == 0 ) {
         sz = snprintf(data, dsize, "%d\t%d\t%d\t%d\t", lane, tile, x, y);
         if( sz < 0 ) {
+#if SNPRINTF_ACTUALLY_WORKED_THE_WAY_YOU_THINK
             rc = RC(rcSRA, rcString, rcConstructing, rcNoObj, rcUnknown);
+#else
+            /* both approaches are wrong - the error code is rcBuffer, rcInsufficient */
+            rc = RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
+#endif
         } else {
             sz += spot_len;
             if( sz >= (int)dsize ) {
@@ -265,14 +306,22 @@ rc_t IlluminaReader_4floats(const IlluminaReader* self, const float** col_data,
             f = *col_data;
             sz = snprintf(data, dsize, "%d\t%d\t%d\t%d", lane, tile, x, y);
             if( sz < 0 ) {
+#if SNPRINTF_ACTUALLY_WORKED_THE_WAY_YOU_THINK
                 rc = RC(rcSRA, rcString, rcConstructing, rcNoObj, rcUnknown);
+#else
+                rc = RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
+#endif
             } else {
                 for(i = 0; rc == 0 && i < spot_len; i++, f += 4) {
                     int x = sz >= (int)dsize ? 0 : sz;
                     x = snprintf(&data[x], dsize - x, "\t%.*f %.*f %.*f %.*f", f[0] ? 1 : 0, f[0], f[1] ? 1 : 0, f[1],
                                  f[2] ? 1 : 0,  f[2], f[3] ? 1 : 0,  f[3]);
                     if( x < 0 ) {
+#if SNPRINTF_ACTUALLY_WORKED_THE_WAY_YOU_THINK
                         rc = RC(rcSRA, rcString, rcConstructing, rcNoObj, rcUnknown);
+#else
+                        rc = RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
+#endif
                     }
                     sz += x;
                 }
@@ -316,18 +365,21 @@ LIB_EXPORT rc_t CC IlluminaReaderQuality1(const IlluminaReader* self, uint32_t r
         rc = RC(rcSRA, rcString, rcConstructing, rcMemory, rcNull);
     } else if( !(self->dad.options & eQual1) ) {
         rc = RC(rcSRA, rcString, rcConstructing, rcMessage, rcUnexpected);
+    } else if( self->qual1 == NULL || self->qual1->size == 0 ) {
+        /* empty value */
     } else if( readId > 0 ) {
         INSDC_coord_zero read_start;
         INSDC_coord_len read_len;
         if( (rc = IlluminaReader_SpotReadInfo(self, readId, NULL, NULL, NULL, &read_start, &read_len)) == 0 ) {
             sz = read_len;
-            p = (*self->qual1) + read_start;
+            p = self->qual1->base;
+            p += read_start;
         }
     } else {
         uint32_t spot_len;
         if( (rc = IlluminaReader_SpotInfo(self, NULL, NULL, NULL, NULL, NULL, NULL, &spot_len, NULL)) == 0 ) {
             sz = spot_len;
-            p = *self->qual1;
+            p = self->qual1->base;
         }
     }
     if( rc == 0 ) {
@@ -376,8 +428,13 @@ LIB_EXPORT rc_t CC IlluminaReaderQuality4(const IlluminaReader* self, char* data
             uint32_t len = 0;
             for(sz = 0; rc == 0 && len < spot_len; len++, q4 += 4) {
                 x = snprintf(&data[sz], dsize - sz, "%s%4d %4d %4d %4d", len > 0 ? "\t" : "", q4[0], q4[1], q4[2], q4[3]);
+#if SNPRINTF_ACTUALLY_WORKED_THE_WAY_YOU_THINK
                 if( x < 0 ) {
                     rc = RC(rcSRA, rcString, rcConstructing, rcNoObj, rcUnknown);
+#else
+                if( x < 0 || ( size_t ) sz + x >= dsize ) {
+                    rc = RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
+#endif
                 }
                 sz += x;
             }
@@ -394,6 +451,7 @@ LIB_EXPORT rc_t CC IlluminaReaderQSeq(const IlluminaReader* self, uint32_t readI
     size_t spotname_sz;
     uint32_t nreads, spotlen;
     INSDC_coord_val lane, tile, x, y;
+    int sz = 0;
 
     CHECK_SELF(IlluminaReader);
     CHECK_SPOT(me->dad);
@@ -413,7 +471,7 @@ LIB_EXPORT rc_t CC IlluminaReaderQSeq(const IlluminaReader* self, uint32_t readI
             int sg_sz = 1;
             const char* runid = "0";
             size_t runid_sz = 1;
-            int sz = 0, i = 0;
+            int i = 0;
 
             if( spotname_sz > 0 ) {
                 const char* c = spotname + spotname_sz;
@@ -445,17 +503,19 @@ LIB_EXPORT rc_t CC IlluminaReaderQSeq(const IlluminaReader* self, uint32_t readI
             }
             i = snprintf(data, dsize, "%.*s\t%.*s\t%d\t%d\t%d\t%d\t%.*s\t%d\t",
                 (int)spotname_sz, spotname, (int)runid_sz, runid, lane, tile, x, y, sg_sz, sg, readId > 0 ? readId : 1);
+#if SNPRINTF_ACTUALLY_WORKED_THE_WAY_YOU_THINK
             if( i < 0 ) {
                 rc = RC(rcSRA, rcString, rcConstructing, rcNoObj, rcUnknown);
+#else
+            if( i < 0 || ( size_t ) i >= dsize ) {
+                rc = RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
+#endif
             } else {
                 sz += i;
                 i = sz; /* save length of initial part */
 
                 /* precalc full line length: seq\tqual\tflt */
                 sz += 2 * (read_len + 1) + 1;
-                if( written != NULL ) {
-                    *written = sz;
-                }
                 if( sz >= (int)dsize ) {
                     rc = RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
                 } else {
@@ -484,10 +544,13 @@ LIB_EXPORT rc_t CC IlluminaReaderQSeq(const IlluminaReader* self, uint32_t readI
                     }
                     sz += read_len;
                     data[sz++] = '\t';
-                    for(i = 0; i < read_len; i++) {
-                        data[sz + i] = (*self->qual1)[read_start + i] + 64;
+                    if( self->qual1 && self->qual1->size ) {
+                        const uint8_t* p = self->qual1->base;
+                        for(i = 0; i < read_len; i++) {
+                            data[sz + i] = p[read_start + i] + 64;
+                        }
+                        sz += read_len;
                     }
-                    sz += read_len;
                     data[sz++] = '\t';
                     data[sz++] = flt;
                     data[sz] = '\0';
@@ -495,5 +558,8 @@ LIB_EXPORT rc_t CC IlluminaReaderQSeq(const IlluminaReader* self, uint32_t readI
             }
         }
     }
+    if( written != NULL ) {
+        *written = sz;
+    }
     return rc;
 }
diff --git a/libs/sra/reader-sff.c b/libs/sra/reader-sff.c
index 3b1fe0e..eba2632 100644
--- a/libs/sra/reader-sff.c
+++ b/libs/sra/reader-sff.c
@@ -33,12 +33,14 @@
 
 #include "reader-cmn.h"
 
-#include <byteswap.h>
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#   include <byteswap.h>
+#else
+#   define bswap_16(x) (x)
+#   define bswap_32(x) (x)
+#endif
 #include <string.h>
 
-/* remove after initial testing is done */
-#define SFF_READER_AS_OLD_VERSION 0
-
 /* column order is important here: see Init function below!!! */
 static
 const SRAReaderColumn SFFReader_master_columns_desc[] = {
@@ -48,17 +50,10 @@ const SRAReaderColumn SFFReader_master_columns_desc[] = {
     {SRAREADER_COL_MANDATORY, "QUALITY", insdc_phred_t, NULL, NULL, 0},
     {SRAREADER_COL_MANDATORY, "SIGNAL", ncbi_isamp1_t, NULL, NULL, 0},
     {SRAREADER_COL_MANDATORY, "POSITION", "INSDC:position:one", NULL, NULL, 0},
-#if SFF_READER_AS_OLD_VERSION
-    {SRAREADER_COL_OPTIONAL, "CLIP_QUALITY_LEFT", vdb_uint16_t, NULL, NULL, 0},
-    {SRAREADER_COL_OPTIONAL, "CLIP_QUALITY_RIGHT", vdb_uint16_t, NULL, NULL, 0},
-    {SRAREADER_COL_OPTIONAL, "CLIP_ADAPTER_LEFT", vdb_uint16_t, NULL, NULL, 0},
-    {SRAREADER_COL_OPTIONAL, "CLIP_ADAPTER_RIGHT", vdb_uint16_t, NULL, NULL, 0},
-#else
     {SRAREADER_COL_OPTIONAL, "CLIP_QUALITY_LEFT", "INSDC:coord:one", NULL, NULL, 0},
     {SRAREADER_COL_OPTIONAL, "CLIP_QUALITY_RIGHT", "INSDC:coord:one", NULL, NULL, 0},
     {SRAREADER_COL_OPTIONAL, "CLIP_ADAPTER_LEFT", "INSDC:coord:one", NULL, NULL, 0},
     {SRAREADER_COL_OPTIONAL, "CLIP_ADAPTER_RIGHT", "INSDC:coord:one", NULL, NULL, 0},
-#endif
     {0, NULL, NULL, NULL, NULL, 0} /* terminator */
 };
 
@@ -69,20 +64,13 @@ struct SFFReader {
     const SRAReaderColumn* flow_chars;
     const SRAReaderColumn* key_seq;
     const SRAReaderColumn* read;
-    const INSDC_quality_phred** qual1;
-    const uint16_t** signal;
-    const INSDC_position_one** position;
-#if SFF_READER_AS_OLD_VERSION
-    const int16_t** clip_q_left;
-    const int16_t** clip_q_right;
-    const int16_t** clip_adapter_left;
-    const int16_t** clip_adapter_right;
-#else
+    const SRAReaderColumn* qual1;
+    const SRAReaderColumn* signal;
+    const SRAReaderColumn* position;
     const INSDC_coord_one** clip_q_left;
     const INSDC_coord_one** clip_q_right;
     const INSDC_coord_one** clip_adapter_left;
     const INSDC_coord_one** clip_adapter_right;
-#endif
 };
 
 static
@@ -98,9 +86,9 @@ rc_t SFFReaderInit(const SFFReader* self)
         (rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[0], &me->flow_chars, NULL)) == 0 &&
         (rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[1], &me->key_seq, NULL)) == 0 &&
         (rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[2], &me->read, NULL)) == 0 &&
-        (rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[3], NULL, (const void***)&self->qual1)) == 0 &&
-        (rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[4], NULL, (const void***)&self->signal)) == 0 &&
-        (rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[5], NULL, (const void***)&self->position)) == 0 &&
+        (rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[3], &me->qual1, NULL)) == 0 &&
+        (rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[4], &me->signal, NULL)) == 0 &&
+        (rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[5], &me->position, NULL)) == 0 &&
         (rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[6], NULL, (const void***)&self->clip_q_left)) == 0 &&
         (rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[7], NULL, (const void***)&self->clip_q_right)) == 0 &&
         (rc = SRAReader_FindColData(&self->dad, &SFFReader_master_columns_desc[8], NULL, (const void***)&self->clip_adapter_left)) == 0 &&
@@ -268,19 +256,27 @@ LIB_EXPORT rc_t CC SFFReaderReadHeader(const SFFReader* self, char* data, size_t
 LIB_EXPORT rc_t CC SFFReaderReadData(const SFFReader* self, char* data, size_t dsize, size_t* written)
 {
     rc_t rc = 0;
-    size_t flows, len = 0;
+    size_t flows, len, padding;
     uint32_t spot_len;
+    /* SFF type defining vars, not used */
+    const uint16_t sff_signal;
+    const uint8_t sff_position;
+    const char sff_bases;
+    const uint8_t sff_quality;
 
     CHECK_SELF(SFFReader);
     CHECK_SPOT(me->dad);
 
-    flows = self->flow_chars->size;
+    /* if for some reason READ, QUAL and POSITION rows are uneqaul in size,
+       base their length on actual READ size */
+    spot_len = self->read->size / sizeof(INSDC_dna_text);
+    /* this size if fixed across the file */
+    flows = self->flow_chars->size / sizeof(INSDC_dna_text);
 
-    if( (rc = SFFReader_SpotInfo(self, NULL, NULL, &spot_len, NULL)) != 0 ) {
-        return rc;
-    }
-    len = flows * 2 + spot_len * 3;
-    len += (len % 8) ? (8 - (len % 8)) : 0;
+    /* read data section size: per SFF spec types sizes + 8-byte padding */
+    len = flows * sizeof(sff_signal) + spot_len * (sizeof(sff_position) + sizeof(sff_bases) + sizeof(sff_quality));
+    padding = (len % 8) ? (8 - (len % 8)) : 0;
+    len += padding;
 
     if( written != NULL ) {
         *written = len;
@@ -288,23 +284,52 @@ LIB_EXPORT rc_t CC SFFReaderReadData(const SFFReader* self, char* data, size_t d
     if( len > dsize ) {
         rc = RC(rcSRA, rcString, rcConstructing, rcMemory, rcInsufficient);
     } else {
-        size_t offset = 0;
-        uint8_t ppos = 0;
+        size_t qty;
+        INSDC_position_one ppos;
+        const uint16_t* signal = self->signal->base;
+        uint16_t* dst_sig = (uint16_t*)data;
+        const INSDC_position_one* position = self->position->base;
+
+        qty = self->signal->size / sizeof(*signal);
+        if( qty > flows ) {
+            qty = flows;
+        }
+        for(len = 0; len < qty; len++) {
+            dst_sig[len] = bswap_16(signal[len]);
+        }
+        if( qty < flows ) {
+            memset(&data[qty * sizeof(sff_signal)], 0, (flows - qty) * sizeof(sff_signal));
+        }
+        data += flows * sizeof(sff_signal);
 
-        memset(data, 0, len);
-        for(len = 0; len < flows; len++) {
-            const uint16_t x = bswap_16((*self->signal)[len]);
-            memcpy(&data[len * 2], &x, 2);
+        qty = self->position->size / sizeof(*position);
+        if( qty > spot_len ) {
+            qty = spot_len;
+        }
+        for(ppos = 0, len = 0; len < qty; len++) {
+            data[len] = (uint8_t)(position[len] - ppos);
+            ppos = position[len];
+        }
+        if( qty < spot_len ) {
+            memset(&data[qty], 0, (spot_len - qty) * sizeof(sff_position));
+        }
+        data += spot_len;
+
+        /* this are guaranteed above to be same length */
+        memcpy(data, self->read->base, spot_len);
+        data += spot_len;
+
+        qty = self->qual1->size / sizeof(INSDC_quality_phred);
+        if( qty > spot_len ) {
+            qty = spot_len;
+        }
+        memcpy(data, self->qual1->base, qty);
+        if( qty < spot_len ) {
+            memset(&data[qty], 0, (spot_len - qty) * sizeof(sff_quality));
         }
-        offset = flows * 2;
-        for(len = 0; len < spot_len; len++) {
-            data[offset + len] = (*self->position)[len] - ppos;
-            ppos = (uint8_t)( (*self->position)[len] );
+        if( padding > 0 ) {
+            memset(&data[spot_len], 0, padding);
         }
-        offset += spot_len;
-        memcpy(&data[offset], self->read->base, spot_len);
-        offset += spot_len;
-        memcpy(&data[offset], *self->qual1, spot_len);
     }
     return rc;
 }
diff --git a/libs/sra/sra-dflt-schema.c b/libs/sra/sra-dflt-schema.c
index 9235481..cbaacf7 100644
--- a/libs/sra/sra-dflt-schema.c
+++ b/libs/sra/sra-dflt-schema.c
@@ -36,7 +36,6 @@
 #include <klib/out.h>
 #include <klib/rc.h>
 #include <klib/namelist.h>
-#include <fmtdef.h>
 #include <os-native.h>
 #include <sysalloc.h>
 
diff --git a/libs/sra/sra-priv.h b/libs/sra/sra-priv.h
index 3c74a9c..c5798c5 100644
--- a/libs/sra/sra-priv.h
+++ b/libs/sra/sra-priv.h
@@ -59,7 +59,11 @@ struct VTable;
 struct VCursor;
 struct VTypedecl;
 struct VTypedef;
+struct VResolver;
+struct SRACache;
 
+#define CSRA_EXT(lite) (lite ? ".lite.sra" : ".sra")
+#define SRA_EXT(lite) (lite ? ".lite.sra" : ".sra")
 
 /*--------------------------------------------------------------------------
  * SRAMgr
@@ -68,7 +72,12 @@ struct SRAMgr
 {
     struct VDBManager KONST *vmgr;
     struct VSchema const *schema;
-    struct SRAPath *pmgr;
+#if OLD_SRAPATH_MGR
+    struct SRAPath volatile *_pmgr;
+#else
+    struct VResolver volatile *_pmgr;
+#endif
+    struct SRACache* cache;
     KRefcount refcount;
     KCreateMode mode;
     bool read_only;
@@ -86,6 +95,12 @@ SRAMgr *SRAMgrAttach ( const SRAMgr *self );
 rc_t SRAMgrSever ( const SRAMgr *self );
 
 
+/* AccessSRAPath
+ *  returns a new reference to SRAPath
+ *  do NOT access "pmgr" directly
+ */
+struct SRAPath *SRAMgrAccessSRAPath ( const SRAMgr *self );
+
 /*--------------------------------------------------------------------------
  * SRATable
  */
@@ -139,9 +154,9 @@ rc_t SRATableColDatatype ( const SRATable *self, uint32_t idx,
 rc_t SRATableGetIdRange ( const SRATable *self, uint32_t idx,
     spotid_t id, spotid_t *pfirst, spotid_t *last );
 
-rc_t SRATableLoadMetadata(SRATable *self);
 rc_t ResolveTablePath ( const SRAMgr *mgr, char *path, size_t psize, const char *spec, va_list args );
-    
+
+rc_t SRATableFillOut ( SRATable *self, bool update );
     
 /*--------------------------------------------------------------------------
  * SRAColumn
diff --git a/libs/sra/sracache.c b/libs/sra/sracache.c
new file mode 100644
index 0000000..ef8a833
--- /dev/null
+++ b/libs/sra/sracache.c
@@ -0,0 +1,466 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <sra/extern.h>
+#include <sra/sradb-priv.h>
+
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <strtol.h>
+
+#include <klib/rc.h>
+
+#include <kproc/lock.h>
+
+/* some of the above #defines index on sun */
+#undef index
+
+/*================================== SRACacheMetrics ==================================*/
+static
+void 
+MetricsInit(SRACacheMetrics* self, const SRATable* table)
+{
+    self->bytes     = 0;/* TBD */
+    self->elements  = 1;
+    self->threads   = 0;/* TBD */
+    self->fds       = 0;/* TBD */
+}
+
+LIB_EXPORT
+bool CC
+SRACacheMetricsLessThan(const SRACacheMetrics* a, const SRACacheMetrics* b)
+{
+    if (a->bytes > 0 && b->bytes > 0 && a->bytes >= b->bytes)
+        return false;
+    if (a->elements > 0 && b->elements > 0 && a->elements >= b->elements)
+        return false;
+    if (a->threads > 0 && b->threads > 0 && a->threads >= b->threads)
+        return false;
+    if (a->fds > 0 && b->fds > 0 && a->fds >= b->fds)
+        return false;
+    return true;
+}
+
+static
+void 
+MetricsAdd(SRACacheMetrics* a, const SRACacheMetrics* b)
+{
+    a->bytes    += b->bytes;
+    a->elements += b->elements;
+    a->threads  += b->threads;
+    a->fds      += b->fds;
+}
+
+static
+void 
+MetricsSubtract(SRACacheMetrics* a, const SRACacheMetrics* b)
+{
+    a->bytes    -= b->bytes;
+    a->elements -= b->elements;
+    a->threads  -= b->threads;
+    a->fds      -= b->fds;
+}
+
+/*================================== SRACacheElement ==================================*/
+LIB_EXPORT rc_t CC SRACacheElementMake(SRACacheElement**        self, 
+                                       SRATable*                object, 
+                                       struct SRACacheIndex*    index, 
+                                       uint32_t                 key, 
+                                       const SRACacheMetrics*   metrics)
+{
+    rc_t rc = 0;
+    if ( self == NULL || object == NULL || index == NULL || metrics == NULL )
+        return RC( rcSRA, rcNode, rcConstructing, rcParam, rcNull );
+        
+    *self = malloc(sizeof(**self));
+    if (self == NULL)
+        rc = RC ( rcSRA, rcNode, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        (*self)->dad.next = NULL;
+        (*self)->dad.prev = NULL;
+        
+        (*self)->object = object;
+        SRATableAddRef(object);
+        
+        (*self)->index = index;
+        
+        (*self)->key = key;
+        
+        memcpy(&(*self)->metrics, metrics, sizeof((*self)->metrics));
+    }
+        
+    return rc;
+}
+
+LIB_EXPORT rc_t CC SRACacheElementDestroy(SRACacheElement* self)
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        return RC( rcSRA, rcNode, rcDestroying, rcSelf, rcNull );
+        
+    rc = SRATableRelease(self->object);
+    
+    free(self);
+    
+    return rc;
+}
+
+/*================================== SRACacheIndex ==================================*/
+LIB_EXPORT rc_t CC SRACacheIndexMake(SRACacheIndex** self, String* prefix)
+{
+    rc_t rc = 0;
+    if ( self == NULL || prefix == NULL )
+        return RC( rcSRA, rcIndex, rcConstructing, rcParam, rcNull );
+        
+    *self = malloc(sizeof(**self));
+    if (self == NULL)
+        rc = RC ( rcSRA, rcIndex, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        memset(*self, 0, sizeof(**self));
+        rc = StringCopy((const String**)&(*self)->prefix, prefix);
+        if (rc == 0)
+        {
+            rc = KVectorMake(&(*self)->body);
+            if (rc != 0)
+                StringWhack((*self)->prefix);
+        }
+        
+        if (rc != 0)
+        {
+            free(*self);
+            *self = NULL;
+        }
+    }
+    
+    return rc;
+}
+
+LIB_EXPORT rc_t CC SRACacheIndexDestroy(SRACacheIndex* self)
+{
+    rc_t rc;
+    if ( self == NULL  )
+        return RC( rcSRA, rcIndex, rcDestroying, rcSelf, rcNull );
+        
+    rc = KVectorRelease(self->body);
+    StringWhack(self->prefix);
+    free(self);
+    return rc;
+}
+
+/*================================== SRACache ==================================*/
+
+LIB_EXPORT rc_t CC SRACacheInit(SRACache** self)
+{
+    rc_t rc = 0;
+    if (self == NULL)
+        return RC( rcSRA, rcData, rcConstructing, rcSelf, rcNull );
+        
+    *self = malloc(sizeof(**self));
+    if (*self == NULL)
+        rc = RC ( rcSRA, rcData, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        BSTreeInit( & (*self)->indexes );
+        DLListInit( & (*self)->lru );
+        
+        (*self)->softThreshold.bytes    = SRACacheThresholdSoftBytesDefault;
+        (*self)->softThreshold.elements = SRACacheThresholdSoftElementsDefault;
+        (*self)->softThreshold.threads  = SRACacheThresholdSoftThreadsDefault;
+        (*self)->softThreshold.fds      = SRACacheThresholdSoftFdsDefault;        
+                                          
+        (*self)->hardThreshold.bytes    = SRACacheThresholdHardBytesDefault;
+        (*self)->hardThreshold.elements = SRACacheThresholdHardElementsDefault;
+        (*self)->hardThreshold.threads  = SRACacheThresholdHardThreadsDefault;
+        (*self)->hardThreshold.fds      = SRACacheThresholdHardFdsDefault;        
+        
+        memset(&(*self)->usage, 0, sizeof(*self)->usage);
+        
+        rc = KLockMake(&(*self)->mutex);
+    }        
+    
+    return rc;
+}
+
+LIB_EXPORT rc_t CC SRACacheGetSoftThreshold(SRACache* self, SRACacheMetrics* metrics)
+{
+    if (self == NULL)
+        return RC( rcSRA, rcData, rcAccessing, rcSelf, rcNull );
+    if (metrics == NULL)
+        return RC( rcSRA, rcData, rcAccessing, rcParam, rcNull );
+    memcpy(metrics, &self->softThreshold, sizeof(self->softThreshold));
+    return 0;
+}
+
+LIB_EXPORT rc_t CC SRACacheSetSoftThreshold(SRACache* self, const SRACacheMetrics* metrics)
+{
+    if (self == NULL)
+        return RC( rcSRA, rcData, rcUpdating, rcSelf, rcNull );
+    if (metrics == NULL)
+        return RC( rcSRA, rcData, rcUpdating, rcParam, rcNull );
+    memcpy(&self->softThreshold, metrics, sizeof(self->softThreshold));
+    return 0;
+}
+
+LIB_EXPORT rc_t CC SRACacheGetHardThreshold(SRACache* self, SRACacheMetrics* metrics)
+{
+    if (self == NULL)
+        return RC( rcSRA, rcData, rcAccessing, rcSelf, rcNull );
+    if (metrics == NULL)
+        return RC( rcSRA, rcData, rcAccessing, rcParam, rcNull );
+    memcpy(metrics, &self->hardThreshold, sizeof(self->hardThreshold));
+    return 0;
+}
+
+LIB_EXPORT rc_t CC SRACacheSetHardThreshold(SRACache* self, const SRACacheMetrics* metrics)
+{
+    if (self == NULL)
+        return RC( rcSRA, rcData, rcUpdating, rcSelf, rcNull );
+    if (metrics == NULL)
+        return RC( rcSRA, rcData, rcUpdating, rcParam, rcNull );
+    memcpy(&self->hardThreshold, metrics, sizeof(self->hardThreshold));
+    return 0;
+}
+
+static void CC SRACacheIndexDestructor(BSTNode *n, void *data)
+{
+    SRACacheIndexDestroy((SRACacheIndex*)n);
+}
+static void CC SRACacheElementDestructor(DLNode *n, void *data)
+{
+    SRACacheElementDestroy((SRACacheElement*)n);
+}
+
+LIB_EXPORT rc_t CC SRACacheWhack(SRACache* self)
+{
+    rc_t rc = 0;
+    if (self == NULL)
+        return RC( rcSRA, rcData, rcDestroying, rcSelf, rcNull );
+
+    BSTreeWhack(&self->indexes, SRACacheIndexDestructor, NULL);
+    DLListWhack(&self->lru, SRACacheElementDestructor, NULL);
+    
+    rc = KLockRelease(self->mutex);
+    free(self);
+    return rc;
+}
+
+LIB_EXPORT rc_t CC SRACacheGetUsage(SRACache* self, SRACacheMetrics* metrics)
+{
+    if (self == NULL)
+        return RC( rcSRA, rcData, rcAccessing, rcSelf, rcNull );
+    if (metrics == NULL)
+        return RC( rcSRA, rcData, rcAccessing, rcParam, rcNull );
+    memcpy(metrics, &self->usage, sizeof(self->usage));
+    return 0;
+}
+
+static
+int CC IndexCmp (const BSTNode * item, const BSTNode * n)
+{
+    return StringCompare( ((const SRACacheIndex *)item)->prefix, ((const SRACacheIndex *)n)->prefix );
+}
+    
+static
+int CC PrefixCmp (const void * item, const BSTNode * n)
+{
+    return StringCompare( (const String*)item, ((const SRACacheIndex *)n)->prefix );
+}
+    
+static
+rc_t
+AddNewIndex(BSTree* indexes, String* prefix, SRACacheIndex** newIdx)
+{
+    rc_t rc = SRACacheIndexMake(newIdx, prefix);
+    if (rc == 0)
+    {
+        rc = BSTreeInsert(indexes, &(*newIdx)->dad, IndexCmp);
+        if (rc != 0)
+            SRACacheIndexDestroy(*newIdx);
+    }
+    return rc;
+}
+
+static
+rc_t
+ParseAccessionName(const char *acc, String* prefix, uint32_t* key)
+{
+    rc_t rc = 0;
+    
+    /*  extract the alphabetic prefix from the accession's name */
+    size_t prefLen = 0;
+    while (acc[prefLen] != 0 && isalpha(acc[prefLen]))
+        ++prefLen;
+    StringInit(prefix, acc, prefLen, prefLen);
+    
+    {   /* the numeric key will be the rest of the accession's name, if fully numeric */
+        char *end;
+        *key = strtou32 ( acc + prefLen, & end, 10 );
+        if ( end [ 0 ] != 0 )
+            rc = RC( rcSRA, rcData, rcAccessing, rcName, rcInvalid );
+    }
+    return rc;
+}
+
+LIB_EXPORT rc_t CC SRACacheAddTable(SRACache* self, const char* acc, SRATable* table)
+{ /* if crosses soft threshold, signal BG thread to wake up */
+    rc_t rc = 0;
+    String prefix;
+    uint32_t key;
+    
+    if (self == NULL)
+        return RC( rcSRA, rcData, rcAccessing, rcSelf, rcNull );
+    if (acc == NULL || acc[0] == 0 || table == NULL)
+        return RC( rcSRA, rcData, rcAccessing, rcParam, rcNull );
+
+    rc = ParseAccessionName(acc, &prefix, &key);
+    if (rc == 0)
+    {
+        rc = KLockAcquire(self->mutex);
+        if (rc == 0)
+        {
+            SRACacheIndex* index = (SRACacheIndex*) BSTreeFind ( &self->indexes, &prefix, PrefixCmp );
+            if (index == NULL)
+                rc = AddNewIndex( &self->indexes, &prefix, &index );
+                
+            if (rc == 0)
+            {
+                SRACacheElement* elem = NULL;
+                rc = KVectorGetPtr ( index->body, key, (void**)&elem );   
+                if (rc == 0 && elem != NULL) /* table already in cache */
+                    rc = RC( rcSRA, rcData, rcInserting, rcParam, rcExists );
+                else if (GetRCState(rc) == rcNotFound)
+                {
+                    SRACacheMetrics metrics;
+                    MetricsInit(&metrics, table);
+                    rc = SRACacheElementMake(&elem, table, index, key, &metrics);
+                    if (rc == 0)
+                    {
+                        rc = KVectorSetPtr( index->body, key, elem );
+                        if (rc != 0)
+                            SRACacheElementDestroy(elem);
+                        else
+                        {   /* success - update global usage and time-sorted list */
+                            MetricsAdd(&self->usage, &metrics);
+                            DLListPushTail( &self->lru, (DLNode*)elem );
+                        }
+                    }
+                }
+            }
+                
+            {
+                rc_t rc2 = KLockUnlock(self->mutex);
+                if (rc == 0)
+                    rc = rc2;
+            }
+        }
+    }
+
+    return rc;
+}
+
+LIB_EXPORT rc_t CC SRACacheGetTable(SRACache* self, const char* acc, const SRATable** object)
+{
+    rc_t rc = 0;
+    String prefix;
+    uint32_t key;
+    
+    if (self == NULL)
+        return RC( rcSRA, rcData, rcAccessing, rcSelf, rcNull );
+    if (acc == NULL || acc[0] == 0 || object == NULL)
+        return RC( rcSRA, rcData, rcAccessing, rcParam, rcNull );
+
+    *object = NULL;
+    
+    rc = ParseAccessionName(acc, &prefix, &key);
+    if (rc == 0)
+    {
+        rc = KLockAcquire(self->mutex);
+        if (rc == 0)
+        {
+            SRACacheIndex* index = (SRACacheIndex*) BSTreeFind ( &self->indexes, &prefix, PrefixCmp );
+            if (index != NULL)
+            {
+                SRACacheElement* elem = NULL;
+                rc = KVectorGetPtr ( index->body, key, (void**)&elem );   
+                if (rc == 0 && elem != NULL) 
+                {   /* move to the least recently used position */
+                    DLListUnlink    ( &self->lru, &elem->dad );
+                    DLListPushTail  ( &self->lru, &elem->dad );
+                    
+                    *object = elem->object;
+                }
+                else if (GetRCState(rc) == rcNotFound || elem == NULL)
+                    rc = 0;
+            }
+                
+            {
+                rc_t rc2 = KLockUnlock(self->mutex);
+                if (rc == 0)
+                    rc = rc2;
+            }
+        }
+    }
+
+    return rc;
+}
+
+LIB_EXPORT rc_t CC SRACacheFlush(SRACache* self)
+{
+    rc_t rc = 0;
+    if (self == NULL)
+        return RC( rcSRA, rcData, rcAccessing, rcSelf, rcNull );
+        
+    rc = KLockAcquire(self->mutex);
+    if (rc == 0)
+    {
+        while ( ! SRACacheMetricsLessThan( &self->usage, &self->softThreshold ) )
+        {
+            SRACacheElement* toFlush = (SRACacheElement*) DLListPopHead( &self->lru );
+            if (toFlush == NULL)
+                break;
+            rc = KVectorUnset( toFlush->index->body, toFlush->key );
+            if (rc != 0)
+                break; /* something is badly wrong */
+            MetricsSubtract( &self->usage, &toFlush->metrics );
+            rc = SRACacheElementDestroy(toFlush);
+            if (rc != 0)
+                break;
+        }
+        
+        {
+            rc_t rc2 = KLockUnlock(self->mutex);
+            if (rc == 0)
+                rc = rc2;
+        }
+    }
+
+    return rc;
+}
diff --git a/libs/sra/sramgr-cmn.c b/libs/sra/sramgr-cmn.c
index d73264b..fbfde97 100644
--- a/libs/sra/sramgr-cmn.c
+++ b/libs/sra/sramgr-cmn.c
@@ -26,21 +26,25 @@
 
 #include <sra/extern.h>
 
-#include <sra/sradb.h>
-#include <sra/sraschema.h>
-#include <sra/srapath.h>
-#include <sra/sradb-priv.h>
-#include <vdb/manager.h>
-#include <vdb/schema.h>
-#include <vdb/vdb-priv.h>
-#include <kdb/manager.h>
-#include <kdb/kdb-priv.h>
-#include <kfs/directory.h>
 #include <klib/namelist.h>
 #include <klib/refcount.h>
 #include <klib/log.h>
 #include <klib/rc.h>
+#include <kfs/directory.h>
+#include <kfg/config.h>
+#include <vfs/manager.h>
+#include <vfs/resolver.h>
+#include <kdb/manager.h>
+#include <kdb/kdb-priv.h>
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/vdb-priv.h>
+#include <sra/sradb.h>
+#include <sra/sraschema.h>
+#include <sra/srapath.h>
+#include <sra/sradb-priv.h>
 #include <sysalloc.h>
+#include <atomic.h>
 
 #include "sra-priv.h"
 
@@ -60,11 +64,18 @@ rc_t SRAMgrWhack ( const SRAMgr *that )
 
     VSchemaRelease ( self -> schema );
     VDBManagerRelease ( self -> vmgr );
-
+    SRACacheWhack ( self -> cache );
+    
     /* must check here for NULL because
        SRAPathRelease is weak-linked */
-    if ( self -> pmgr != NULL )
-        SRAPathRelease ( self -> pmgr );
+    if ( self -> _pmgr != NULL )
+    {
+#if OLD_SRAPATH_MGR
+        SRAPathRelease ( self -> _pmgr );
+#else
+        VResolverRelease ( ( const VResolver* ) self -> _pmgr );
+#endif
+    }
 
     free ( self );
     return 0;
@@ -146,16 +157,37 @@ rc_t SRAMgrSever ( const SRAMgr *self )
 static
 rc_t SRAMgrInitPath ( SRAMgr *mgr, const KDirectory *wd )
 {
+#if OLD_SRAPATH_MGR
     /* try to make the path manager */
-    rc_t rc = SRAPathMake ( & mgr -> pmgr, wd );
+    rc_t rc = SRAPathMake ( & mgr -> _pmgr, wd );
+
     if ( GetRCState ( rc ) == rcNotFound && GetRCTarget ( rc ) == rcDylib )
     {
         /* we are operating outside of the archive */
-        assert ( mgr -> pmgr == NULL );
+        assert ( mgr -> _pmgr == NULL );
         rc = 0;
     }
 
     return rc;
+#else
+    KConfig *kfg;
+    rc_t rc = KConfigMake ( & kfg, NULL );
+    if ( rc == 0 )
+    {
+        VFSManager *vfs;
+        rc = VFSManagerMake ( & vfs );
+        if ( rc == 0 )
+        {
+            rc = VFSManagerMakeResolver ( vfs, ( VResolver** ) & mgr -> _pmgr, kfg );
+            VFSManagerRelease ( vfs );
+        }
+        KConfigRelease ( kfg );
+    }
+    if ( rc != 0 )
+        mgr -> _pmgr = NULL;
+
+    return 0;
+#endif
 }
 
 rc_t SRAMgrMake ( SRAMgr **mgrp,
@@ -176,13 +208,17 @@ rc_t SRAMgrMake ( SRAMgr **mgrp,
             rc = SRAMgrInitPath ( mgr, wd );
             if ( rc == 0 )
             {
-                KRefcountInit ( & mgr -> refcount, 1, "SRAMgr", "SRAMgrMake", "sramgr" );
-                mgr -> vmgr = vmgr;
-                mgr -> schema = schema;
-                mgr -> mode = kcmCreate; /* TBD - should this include parents? */
-                mgr -> read_only = true;
-                * mgrp = mgr;
-                return 0;
+                rc = SRACacheInit ( & mgr -> cache );
+                if ( rc == 0 )
+                {
+                    KRefcountInit ( & mgr -> refcount, 1, "SRAMgr", "SRAMgrMake", "sramgr" );
+                    mgr -> vmgr = vmgr;
+                    mgr -> schema = schema;
+                    mgr -> mode = kcmCreate; /* TBD - should this include parents? */
+                    mgr -> read_only = true;
+                    * mgrp = mgr;
+                    return 0;
+                }
             }
 
             VSchemaRelease ( schema );
@@ -227,6 +263,24 @@ LIB_EXPORT rc_t CC SRAMgrWritable ( const SRAMgr *self,
 }
 
 
+/* AccessSRAPath
+ *  returns a new reference to SRAPath
+ *  do NOT access "pmgr" directly
+ */
+SRAPath *SRAMgrAccessSRAPath ( const SRAMgr *cself )
+{
+    SRAMgr *self = ( SRAMgr* ) cself;
+    if ( self != NULL )
+    {
+#if OLD_SRAPATH_MGR
+        /* get a pointer to object - read is expected to be atomic */
+        SRAPath *pold = self -> _pmgr;
+#endif
+    }
+    return NULL;
+}
+
+
 /* GetSRAPath
  *  retrieve a reference to SRAPath object in use - may be NULL
  * UseSRAPath
@@ -235,7 +289,7 @@ LIB_EXPORT rc_t CC SRAMgrWritable ( const SRAMgr *self,
 LIB_EXPORT rc_t CC SRAMgrGetSRAPath ( const SRAMgr *self,
         SRAPath **path )
 {
-    rc_t rc;
+    rc_t rc = 0;
 
     if ( path == NULL )
         rc = RC ( rcSRA, rcMgr, rcAccessing, rcParam, rcNull );
@@ -243,17 +297,21 @@ LIB_EXPORT rc_t CC SRAMgrGetSRAPath ( const SRAMgr *self,
     {
         if ( self == NULL )
             rc = RC ( rcSRA, rcMgr, rcAccessing, rcSelf, rcNull );
-        else if ( self -> pmgr == NULL )
+#if OLD_SRAPATH_MGR
+        else if ( self -> _pmgr == NULL )
             rc = 0;
         else
         {
-            rc = SRAPathAddRef ( self -> pmgr );
+            rc = SRAPathAddRef ( self -> _pmgr );
             if ( rc == 0 )
             {
-                * path = self -> pmgr;
+                * path = self -> _pmgr;
                 return 0;
             }
         }
+#else
+        else
+#endif
 
         * path = NULL;
     }
@@ -268,15 +326,16 @@ LIB_EXPORT rc_t CC SRAMgrUseSRAPath ( const SRAMgr *cself, SRAPath *path )
 
     if ( self == NULL )
         rc = RC ( rcSRA, rcMgr, rcUpdating, rcSelf, rcNull );
-    else if ( path == self -> pmgr )
+#if OLD_SRAPATH_MGR
+    else if ( path == self -> _pmgr )
         rc = 0;
     else if ( path == NULL )
     {
         rc = 0;
-        if ( self -> pmgr != NULL )
+        if ( self -> _pmgr != NULL )
         {
-            SRAPathRelease ( self -> pmgr );
-            self -> pmgr = NULL;
+            SRAPathRelease ( self -> _pmgr );
+            self -> _pmgr = NULL;
         }
     }
     else
@@ -284,14 +343,61 @@ LIB_EXPORT rc_t CC SRAMgrUseSRAPath ( const SRAMgr *cself, SRAPath *path )
         rc = SRAPathAddRef ( path );
         if ( rc == 0 )
         {
-            SRAPathRelease ( self -> pmgr );
-            self -> pmgr = path;
+            SRAPathRelease ( self -> _pmgr );
+            self -> _pmgr = path;
         }
     }
+#else
+    else
+        rc = 0;
+#endif
 
     return rc;
 }
 
+LIB_EXPORT rc_t CC SRAMgrConfigReload( const SRAMgr *cself, const KDirectory *wd )
+{
+#if OLD_SRAPATH_MGR
+    SRAMgr *self = cself;
+
+    /* create a new SRAPath object */
+    SRAPath *pnew;
+    rc_t rc = SRAPathMake ( & pnew, wd );
+    if ( rc == 0 )
+    {
+        /* swap with the old guy */
+        SRAPath *pold = self -> _pmgr;
+        if ( atomic_test_and_set_ptr ( ( void *volatile* ) & self -> _pmgr, pnew, pold ) == ( void* ) pold )
+            SRAPathRelease ( pold );
+        else
+            SRAPathRelease ( pnew );
+    }
+
+    return rc;
+#else
+    return 0;
+#endif
+
+#if 0
+
+
+    /* do not reload VDBManager config for now
+       it cannot reload properly and grows in memory */
+    rc_t rc = 0;
+    /* (not thread) safely re-instanciate sra path config */
+    SRAMgr *self = (SRAMgr*)cself;
+    SRAPath* p = cself->_pmgr;
+    self->_pmgr = NULL;
+    if( (rc = SRAMgrInitPath(self, wd)) == 0 ) {
+        SRAPathRelease(p);
+    } else {
+        /* roll back */
+        self->_pmgr = p;
+    }
+    return rc;
+#endif
+
+}
 
 /* GetVDBManager
  *  returns a new reference to VDBManager used by SRAMgr
@@ -391,6 +497,33 @@ LIB_EXPORT rc_t CC SRAMgrGetTableModDate ( const SRAMgr *self,
     return rc;
 }
 
+LIB_EXPORT rc_t CC SRAMgrSingleFileArchiveExt(const SRAMgr *self, const char* spec, const bool lightweight, const char** ext)
+{
+    rc_t rc;
+
+    if( self == NULL || spec == NULL || ext == NULL ) {
+        rc = RC(rcSRA, rcFile, rcConstructing, rcParam, rcNull);
+    } else {
+        char buf[4096];
+        va_list args;
+
+        if( (rc = ResolveTablePath(self, buf, sizeof(buf), spec, args)) == 0 ) {
+            const KDBManager* kmgr;
+            if( (rc = SRAMgrGetKDBManagerRead(self, &kmgr)) == 0 ) {
+                int type = KDBManagerPathType(kmgr, buf) & ~kptAlias;
+                if( type == kptDatabase ) {
+                    *ext = CSRA_EXT(lightweight);
+                } else if( type == kptTable ) {
+                    *ext = SRA_EXT(lightweight);
+                } else {
+                    rc = RC(rcSRA, rcPath, rcResolving, rcType, rcUnknown);        
+                }
+                KDBManagerRelease(kmgr);
+            }
+        }
+    }
+    return rc;
+}
 
 /* FlushPath
  * FlushRun
@@ -414,7 +547,14 @@ LIB_EXPORT rc_t CC SRAMgrFlushRun ( const SRAMgr *self, const char *accession )
 
 LIB_EXPORT rc_t CC SRAMgrRunBGTasks ( const SRAMgr *self )
 {
-    return 0;
+    rc_t rc;
+
+    if( self == NULL  )
+        rc = RC(rcSRA, rcFile, rcProcessing, rcSelf, rcNull);
+        
+    rc = SRACacheFlush(self->cache);
+    
+    return rc;
 }
 
 
diff --git a/libs/sra/srapath-stub.c b/libs/sra/srapath-stub.c
deleted file mode 100644
index 7112df7..0000000
--- a/libs/sra/srapath-stub.c
+++ /dev/null
@@ -1,408 +0,0 @@
-/*===========================================================================
-*
-*                            PUBLIC DOMAIN NOTICE
-*               National Center for Biotechnology Information
-*
-*  This software/database is a "United States Government Work" under the
-*  terms of the United States Copyright Act.  It was written as part of
-*  the author's official duties as a United States Government employee and
-*  thus cannot be copyrighted.  This software/database is freely available
-*  to the public for use. The National Library of Medicine and the U.S.
-*  Government have not placed any restriction on its use or reproduction.
-*
-*  Although all reasonable efforts have been taken to ensure the accuracy
-*  and reliability of the software and data, the NLM and the U.S.
-*  Government do not and cannot warrant the performance or results that
-*  may be obtained by using this software or data. The NLM and the U.S.
-*  Government disclaim all warranties, express or implied, including
-*  warranties of performance, merchantability or fitness for any particular
-*  purpose.
-*
-*  Please cite the author in any work or product based on this material.
-*
-* ===========================================================================
-*
-*/
-
-#include <klib/rc.h>
-#include <klib/defs.h>
-#include <kfs/dyload.h>
-#include <sra/srapath.h>
-#include <sra/sradb-priv.h>
-#include <sysalloc.h>
-#include <os-native.h>
-
-#include <sra/impl.h>
-
-#include <string.h>
-#include <assert.h>
-#include <stdio.h>
-
-/*--------------------------------------------------------------------------
- * SRAPath
- *  manages accession -> path conversion
- */
-
-/* LoadLibrary
- *  loads libsraschema and fills out function pointers
- */
-static KDylib *libsrapath = NULL;
-
-static struct
-{
-    rc_t ( CC * sraPathMake ) ( SRAPath **pm, struct KDirectory const *dir );
-
-} imports;
-
-static
-rc_t SRAPathLoadLibrary ( void )
-{
-    KDyld *dl;
-    rc_t rc = KDyldMake ( & dl );
-    if ( rc == 0 )
-    {
-        rc = KDyldLoadLib ( dl, & libsrapath, LPFX "sra-path" SHLX );
-	if (rc != 0){
-		rc = KDyldLoadLib ( dl, & libsrapath, NULL );
-	}
-        if ( rc == 0 )
-        {
-            KSymAddr *sym;
-
-            /* resolve symbols */
-            rc = KDylibSymbol ( libsrapath, & sym, "SRAPathMakeImpl" );
-            if ( rc == 0 )
-            {
-                KSymAddrAsFunc ( sym, ( fptr_t* ) & imports . sraPathMake );
-                KSymAddrRelease ( sym );
-            }
-
-            /* bail on error */
-            if ( rc != 0 )
-            {
-                KDylibRelease ( libsrapath );
-                libsrapath = NULL;
-                memset ( & imports, 0, sizeof imports );
-            }
-        }
-        KDyldRelease ( dl );
-    }
-
-    return rc;
-}
-
-/* Make
- *  create path manager
- *
- *  the path manager should already be configured with
- *  standard search paths, but can be augmented by using
- *  the Add*Path messages.
- *
- *  "dir" [ IN, NULL OKAY ] - optional root directory to use
- *  attaches a new reference
- */
-rc_t CC SRAPathMake ( SRAPath **pm, struct KDirectory const *dir )
-{
-    if ( libsrapath == NULL )
-    {
-        rc_t rc = SRAPathLoadLibrary ();
-        if ( rc != 0 )
-        {
-            /* if the library couldn't be loaded,
-               return the error code plus NULL pointer */
-            if ( pm != NULL )
-                * pm = NULL;
-
-#if _DEBUGGING
-            return rc;
-#else
-            return RC ( rcFS, rcDylib, rcLoading, rcPath, rcNotFound );
-#endif
-        }
-    }
-
-    assert ( imports . sraPathMake != NULL );
-    return ( * imports . sraPathMake ) ( pm, dir );
-}
-
-
-/* AddRef
- * Release
- */
-rc_t CC SRAPathAddRef ( const SRAPath *self )
-{
-    if ( self != NULL )
-    {
-        switch ( self -> vt -> v1 . maj )
-        {
-        case 1:
-            return self -> vt -> v1 . addref ( self );
-        }
-
-        return RC ( rcSRA, rcMgr, rcReleasing, rcInterface, rcBadVersion );
-    }
-    return 0;
-}
-
-rc_t CC SRAPathRelease ( const SRAPath *self )
-{
-    if ( self != NULL )
-    {
-        switch ( self -> vt -> v1 . maj )
-        {
-        case 1:
-            return self -> vt -> v1 . release ( self );
-        }
-
-        return RC ( rcSRA, rcMgr, rcReleasing, rcInterface, rcBadVersion );
-    }
-    return 0;
-}
-
-
-/* Version
- *  returns the library version
- */
-rc_t CC SRAPathVersion ( const SRAPath *self, uint32_t *version )
-{
-    if ( version == NULL )
-        return RC ( rcSRA, rcMgr, rcAccessing, rcParam, rcNull );
-
-    * version = 0;
-
-    if ( self == NULL )
-        return RC ( rcSRA, rcMgr, rcAccessing, rcSelf, rcNull );
-
-    switch ( self -> vt -> v1 . maj )
-    {
-    case 1:
-        return self -> vt -> v1 . version ( self, version );
-    }
-
-    return RC ( rcSRA, rcMgr, rcAccessing, rcInterface, rcBadVersion );
-}
-
-
-/* Clear
- *  forget all existing server and volume paths
- */
-rc_t CC SRAPathClear ( SRAPath *self )
-{
-    if ( self == NULL )
-        return RC ( rcSRA, rcMgr, rcResetting, rcSelf, rcNull );
-
-    switch ( self -> vt -> v1 . maj )
-    {
-    case 1:
-        return self -> vt -> v1 . clear ( self );
-    }
-
-    return RC ( rcSRA, rcMgr, rcResetting, rcInterface, rcBadVersion );
-}
-
-
-/* AddRepPath
- *  add a replication path
- *
- *  "rep" [ IN ] - NUL-terminated server search path
- *  may be a compound path with ':' separator characters, e.g.
- *  "/panfs/traces01:/panfs/traces31"
- *
- *  NB - servers are searched in the order provided,
- *  first to last, until one of them satisfies a request,
- *  at which time the successful server is placed at the
- *  head of the search path.
- */
-rc_t CC SRAPathAddRepPath ( SRAPath *self, const char *path )
-{
-    if ( self == NULL )
-        return RC ( rcSRA, rcMgr, rcUpdating, rcSelf, rcNull );
-    if ( path == NULL )
-        return RC ( rcSRA, rcMgr, rcUpdating, rcString, rcNull );
-    if ( path [ 0 ] == 0 )
-        return RC ( rcSRA, rcMgr, rcUpdating, rcString, rcEmpty );
-
-    switch ( self -> vt -> v1 . maj )
-    {
-    case 1:
-        return self -> vt -> v1 . addRepPath ( self, path );
-    }
-
-    return RC ( rcSRA, rcMgr, rcUpdating, rcInterface, rcBadVersion );
-}
-
-
-/* AddVolPath
- *  add a volume path
- *
- *  "vol" [ IN ] - NUL-terminated volume search path
- *  may be a compound path with ':' separator characters, e.g.
- *  "sra2:sra1:sra0"
- *
- *  NB - volumes are searched in the order provided,
- *  first to last. they are never re-ordered.
- */
-rc_t CC SRAPathAddVolPath ( SRAPath *self, const char *path )
-{
-    if ( self == NULL )
-        return RC ( rcSRA, rcMgr, rcUpdating, rcSelf, rcNull );
-    if ( path == NULL )
-        return RC ( rcSRA, rcMgr, rcUpdating, rcString, rcNull );
-    if ( path [ 0 ] == 0 )
-        return RC ( rcSRA, rcMgr, rcUpdating, rcString, rcEmpty );
-
-    switch ( self -> vt -> v1 . maj )
-    {
-    case 1:
-        return self -> vt -> v1 . addVolPath ( self, path );
-    }
-
-    return RC ( rcSRA, rcMgr, rcUpdating, rcInterface, rcBadVersion );
-}
-
-
-/* Full
- *  creates full path from server, volume & accession
- *
- *  "rep" [ IN ] - NUL terminated full path of replication
- *  server, e.g. "/panfs/traces01"
- *
- *  "vol" [ IN ] - NUL terminated relative path of volume,
- *  e.g. "sra2"
- *
- *  "accession" [ IN ] - NUL terminated run accession,
- *  e.g. "SRR000001"
- *
- *  "path" [ OUT ] and "path_max" [ IN ] - return buffer for
- *  NUL-terminated full path to accession.
- */
-rc_t CC SRAPathFull ( const SRAPath *self, const char *rep,
-    const char *vol, const char *accession, char *path, size_t path_max )
-{
-    if ( path_max == 0 )
-        return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
-    if ( path == NULL )
-        return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcNull );
-
-    /* prepare return for failure */
-    path [ 0 ] = 0;
-
-    /* test remainder */
-    if ( self == NULL )
-        return RC ( rcSRA, rcMgr, rcAccessing, rcSelf, rcNull );
-    if ( accession == NULL )
-        return RC ( rcSRA, rcMgr, rcAccessing, rcPath, rcNull );
-    if ( accession [ 0 ] == 0 )
-        return RC ( rcSRA, rcMgr, rcAccessing, rcPath, rcEmpty );
-
-    /* turn NULL prefix parts into empty string */
-    if ( rep == NULL )
-        rep = "";
-    if ( vol == NULL )
-        vol = "";
-
-    switch ( self -> vt -> v1 . maj )
-    {
-    case 1:
-        return self -> vt -> v1 . fullPath ( self, rep, vol, accession, path, path_max );
-    }
-
-    return RC ( rcSRA, rcMgr, rcAccessing, rcInterface, rcBadVersion );
-}
-
-
-/* Test
- *  returns true if path appears to be accession
- *  the test is a heuristic, and may return false positives
- *
- *  "path" [ IN ] - NUL terminated path to run
- */
-bool CC SRAPathTest ( const SRAPath *self, const char *path )
-{
-    if ( self == NULL )
-        return false;
-    if ( path == NULL || path [ 0 ] == 0 )
-        return false;
-
-    switch ( self -> vt -> v1 . maj )
-    {
-    case 1:
-        return self -> vt -> v1 . testPath ( self, path );
-    }
-
-    return false;
-}
-
-
-/* Find
- *  finds location of run within rep-server/volume matrix
- *
- *  "accession" [ IN ] - NUL terminated run accession,
- *   e.g. "SRR000001"
- *
- *  "path" [ OUT ] and "path_max" [ IN ] - return buffer for
- *  NUL-terminated full path to accession.
- *
- *  returns 0 if path exists, rc state rcNotFound if
- *  path cannot be found, and rcInsufficient if buffer is
- *  too small.
- */
-rc_t CC SRAPathFindWithRepLen ( const SRAPath *self,
-    const char *accession, char *path, size_t path_max, size_t *rep_len )
-{
-    if ( path == NULL )
-        return RC ( rcSRA, rcMgr, rcSelecting, rcBuffer, rcNull );
-    if ( path_max == 0 )
-        return RC ( rcSRA, rcMgr, rcSelecting, rcBuffer, rcInsufficient );
-
-    path [ 0 ] = 0;
-
-    if ( self == NULL )
-        return RC ( rcSRA, rcMgr, rcSelecting, rcSelf, rcNull );
-    if ( accession == NULL )
-        return RC ( rcSRA, rcMgr, rcSelecting, rcPath, rcNull );
-    if ( accession [ 0 ] == 0 )
-        return RC ( rcSRA, rcMgr, rcSelecting, rcPath, rcEmpty );
-
-    switch ( self -> vt -> v1 . maj )
-    {
-    case 1:
-        return self -> vt -> v1 . findPath ( self, accession, path, path_max, rep_len );
-    }
-
-    return RC ( rcSRA, rcMgr, rcSelecting, rcInterface, rcBadVersion );
-}
-
-rc_t CC SRAPathFind ( const SRAPath *self,
-    const char *accession, char *path, size_t path_max )
-{
-    return SRAPathFindWithRepLen ( self, accession, path, path_max, NULL );
-}
-
-
-/* List
- *  list all runs known to SRAPath
- *  this can be VERY SLOW due to the large number of runs
- *
- *  "runs" [ OUT ] - return parameter for ordered list of accessions
- *
- *  "deep" [ IN ] - when false, list only first responding server
- */
-rc_t CC SRAPathList ( const SRAPath *self, struct KNamelist **runs, bool deep )
-{
-    if ( runs == NULL )
-        return RC ( rcSRA, rcMgr, rcListing, rcParam, rcNull );
-
-    * runs = NULL;
-
-    if ( self == NULL )
-        return RC ( rcSRA, rcMgr, rcListing, rcSelf, rcNull );
-
-    switch ( self -> vt -> v1 . maj )
-    {
-    case 1:
-        return self -> vt -> v1 . listPath ( self, runs, deep );
-    }
-
-    return RC ( rcSRA, rcMgr, rcListing, rcInterface, rcBadVersion );
-}
diff --git a/libs/sra/sraschema-stub.c b/libs/sra/sraschema-stub.c
index d672b42..2cfdc97 100644
--- a/libs/sra/sraschema-stub.c
+++ b/libs/sra/sraschema-stub.c
@@ -26,88 +26,21 @@
 
 #include <sra/sraschema.h>
 #include <sra/sradb-priv.h>
-#include <kfs/dyload.h>
 #include <klib/rc.h>
 
-#include <sysalloc.h>
-#include <os-native.h>
-
 #include "sra-priv.h"
 
-#include <string.h>
-#include <assert.h>
-
-
 /*--------------------------------------------------------------------------
  * SRASchema
  *  a schema object pre-loaded with default SRA schema
  */
 
-#if ! _STATIC
-/* LoadLibrary
- *  loads libsraschema and fills out function pointers
- */
-static KDylib *libsraschema = NULL;
-
-static struct
-{
-    rc_t ( CC * sraSchemaMake ) ( struct VSchema **schema, struct VDBManager const *mgr );
-
-} imports;
-
-static
-rc_t SRASchemaLoadLibrary ( void )
-{
-    KDyld *dl;
-    rc_t rc = KDyldMake ( & dl );
-    if ( rc == 0 )
-    {
-        rc = KDyldLoadLib ( dl, & libsraschema, LPFX "sra-schema" SHLX );
-        if ( rc == 0 )
-        {
-            KSymAddr *sym;
-
-            /* resolve symbols */
-            rc = KDylibSymbol ( libsraschema, & sym, "SRASchemaMake" );
-            if ( rc == 0 )
-            {
-                KSymAddrAsFunc ( sym, ( fptr_t* ) & imports . sraSchemaMake );
-                KSymAddrRelease ( sym );
-            }
-
-            /* bail on error */
-            if ( rc != 0 )
-            {
-                KDylibRelease ( libsraschema );
-                libsraschema = NULL;
-                memset ( & imports, 0, sizeof imports );
-            }
-        }
-        KDyldRelease ( dl );
-    }
-
-    return rc;
-}
-#endif
-
 /* Make
  *  create an instance of the default SRA schema
  */
 rc_t CC VDBManagerMakeSRASchema ( struct VDBManager const *self, struct VSchema **schema )
 {
-#if _STATIC
     return SRASchemaMake ( schema, self );
-#else
-    if ( libsraschema == NULL )
-    {
-        rc_t rc = SRASchemaLoadLibrary ();
-        if ( rc != 0 )
-            return rc;
-    }
-
-    assert ( imports . sraSchemaMake != NULL );
-    return ( * imports . sraSchemaMake ) ( schema, self );
-#endif
 }
 
 rc_t CC SRAMgrMakeSRASchema ( const SRAMgr *self, struct VSchema **schema )
diff --git a/libs/sra/sratbl-cmn.c b/libs/sra/sratbl-cmn.c
index ab1ead5..0957d67 100644
--- a/libs/sra/sratbl-cmn.c
+++ b/libs/sra/sratbl-cmn.c
@@ -35,10 +35,15 @@
 #include <vdb/table.h>
 #include <vdb/cursor.h>
 #include <vdb/vdb-priv.h>
+#include <vdb/dependencies.h>
 #include <kdb/meta.h>
+#include <kdb/manager.h>
 #include <kdb/table.h>
 #include <kdb/database.h>
 #include <kdb/kdb-priv.h>
+#include <vfs/path.h>
+#include <vfs/path-priv.h>
+#include <vfs/resolver.h>
 #include <klib/refcount.h>
 #include <klib/log.h>
 #include <klib/debug.h>
@@ -55,6 +60,7 @@
 #include <string.h>
 #include <stdio.h>
 #include <assert.h>
+#include <va_copy.h>
 
 /* Destroy
  */
@@ -74,6 +80,8 @@ void SRATableDestroy ( SRATable *self )
     VTableRelease ( self -> vtbl );
     SRAMgrSever ( self -> mgr );
 
+    memset(self, 0, sizeof *self);
+
     free ( self );
 }
 
@@ -162,35 +170,191 @@ static rc_t ReadSpotSequence_v1(SRATable *self)
     return rc;
 }
 
-rc_t SRATableLoadMetadata( SRATable *self )
+typedef enum {
+    eNotRead,
+    eNotFound,
+    eFailed,
+    eRead
+} EState;
+typedef struct {
+    EState state;
+    rc_t rc;
+} State;
+typedef struct {
+    uint64_t value;
+    State state;
+} U64;
+typedef struct {
+    uint32_t value;
+    State state;
+} U32;
+typedef struct {
+    U64 BASE_COUNT;
+    U32 MAX_SPOT_ID;
+    U32 MIN_SPOT_ID;
+    U64 SPOT_COUNT;
+} PseudoMeta;
+static
+rc_t VCursor_ReadPseudoMeta(rc_t rc, const VCursor *self,
+    const char *name, void *buffer, uint32_t blen, State *state)
+{
+    uint32_t idx = ~0;
+    uint32_t row_len = ~0;
+
+    assert(state);
+    state->rc = 0;
+
+    if (rc != 0)
+    {   return rc; }
+
+    state->state = eNotRead;
+
+    rc = VCursorAddColumn(self, &idx, name);
+
+    if (rc != 0) {
+        state->rc = rc;
+
+        if (GetRCObject(rc) == rcColumn && GetRCState(rc) == rcNotFound) {
+            rc = 0;
+            state->state = eNotFound;
+        }
+        else {
+            state->state = eFailed;
+        }
+    }
+
+    if (state->rc == 0) {
+        rc = VCursorReadDirect(self, 1, idx, blen * 8, buffer, blen, &row_len);
+
+        state->rc = rc;
+
+        if (rc != 0)
+        {   state->state = eFailed; }
+        else
+        {   state->state = eRead; }
+
+    }
+
+    return rc;
+}
+
+static
+rc_t VCursor_ReadPseudoMetaU32(rc_t rc, const VCursor *self,
+    const char *name, U32 *val)
+{
+    assert(val);
+    return VCursor_ReadPseudoMeta(rc, self,
+        name, &val->value, sizeof val->value, &val->state);
+}
+
+static
+rc_t VCursor_ReadPseudoMetaU64(rc_t rc, const VCursor *self,
+    const char *name, U64 *val)
+{
+    assert(val);
+    return VCursor_ReadPseudoMeta(rc, self,
+        name, &val->value, sizeof val->value, &val->state);
+}
+
+static
+rc_t PseudoMetaInit(PseudoMeta *self, const VCursor *curs,
+    bool readSpotCount, uint64_t spot_count)
 {
     rc_t rc = 0;
-    uint32_t idx, len;
-   
-    assert(self->curs != NULL);
-    assert(self->curs_open == true);
 
-#define RD_META(nm, var, fail, dflt) \
-    if( (rc = VCursorAddColumn(self->curs, &idx, nm)) != 0 || \
-        (rc = VCursorReadDirect(self->curs, 1, idx, sizeof(var) * 8, \
-                                &var, sizeof(var), &len)) != 0 ) { \
-        if( fail ) return rc; else rc = 0; \
-	    var = dflt; \
+    assert(self);
+
+    memset(self, 0, sizeof *self);
+
+    if (readSpotCount) {
+        rc =
+         VCursor_ReadPseudoMetaU64(rc, curs, "SPOT_COUNT", &self->SPOT_COUNT);
+    }
+    else {
+        self->SPOT_COUNT.value = spot_count;
+        self->SPOT_COUNT.state.state = eRead;
+    }
+
+    rc = VCursor_ReadPseudoMetaU64(rc, curs, "BASE_COUNT", &self->BASE_COUNT);
+
+    rc = VCursor_ReadPseudoMetaU32(rc, curs, "MIN_SPOT_ID", &self->MIN_SPOT_ID);
+
+    rc = VCursor_ReadPseudoMetaU32(rc, curs, "MAX_SPOT_ID", &self->MAX_SPOT_ID);
+
+    return rc;
+}
+
+static
+rc_t PseudoMetaFix(PseudoMeta *self)
+{
+    rc_t rc = 0;
+
+    assert(self);
+
+    if (self->MIN_SPOT_ID.state.state != eRead)
+    {   self->MIN_SPOT_ID.value = 1; }
+
+    if (self->SPOT_COUNT.state.state != eRead &&
+        self->MAX_SPOT_ID.state.state != eRead)
+    {
+        return self->SPOT_COUNT.state.rc;
+    }
+    else if (self->SPOT_COUNT.state.state == eRead) {
+        if (self->MAX_SPOT_ID.state.state != eRead) {
+            self->MAX_SPOT_ID.value
+                = self->MIN_SPOT_ID.value + self->SPOT_COUNT.value - 1;
+        }
+        else if (self->MAX_SPOT_ID.value >= self->MIN_SPOT_ID.value) {
+            if (self->SPOT_COUNT.value
+                > self->MAX_SPOT_ID.value - self->MIN_SPOT_ID.value + 1)
+            {
+                self->SPOT_COUNT.value
+                    = self->MAX_SPOT_ID.value - self->MIN_SPOT_ID.value + 1;
+            }
+        }
+    }
+    else {
+            self->SPOT_COUNT.value
+                = self->MAX_SPOT_ID.value - self->MIN_SPOT_ID.value - 1;
     }
 
-    if(self->metavers <= 1 ) {
-        rc = ReadSpotSequence_v1 ( self );
-        if ( rc != 0 ) return rc;
-    } else {	
-        RD_META("SPOT_COUNT", self->spot_count, true, 0);
+    return rc;
+}
+
+static
+rc_t SRATableLoadMetadata(SRATable *self)
+{
+    rc_t rc = 0;
+    PseudoMeta meta;
+    bool readSpotCount = true;
+
+    assert(self && self->curs != NULL);
+    assert(self->curs_open == true);
+
+    readSpotCount = self->metavers > 1;
+    if (!readSpotCount) {
+        rc = ReadSpotSequence_v1(self);
+        if (rc != 0)
+        {   return rc; }
     }
-    RD_META("BASE_COUNT", self->base_count, false, 0);
-    RD_META("MIN_SPOT_ID", self->min_spot_id, false, 1);
-    RD_META("MAX_SPOT_ID", self->max_spot_id, false, self->spot_count);
+
+    rc = PseudoMetaInit(&meta, self->curs, readSpotCount, self->spot_count);
+    if (rc != 0)
+    {   return rc; }
+
+    rc = PseudoMetaFix(&meta);
+    if (rc != 0)
+    {   return rc; }
+
+    self->spot_count = meta.SPOT_COUNT.value;
+    self->base_count = meta.BASE_COUNT.value;
+    self->min_spot_id = meta.MIN_SPOT_ID.value;
+    self->max_spot_id = meta.MAX_SPOT_ID.value;
+
     return rc;
 }
 
-LIB_EXPORT rc_t CC SRATableFillOut ( SRATable *self )
+rc_t SRATableFillOut ( SRATable *self, bool update )
 {
     rc_t rc;
     
@@ -202,7 +366,9 @@ LIB_EXPORT rc_t CC SRATableFillOut ( SRATable *self )
     if ( rc != 0 )
         return rc;
     self -> curs_open = true;
-    return SRATableLoadMetadata(self);
+    if ( ! update )
+        rc = SRATableLoadMetadata(self);
+    return rc;
 }
 
 
@@ -212,15 +378,16 @@ LIB_EXPORT rc_t CC SRATableFillOut ( SRATable *self )
  *  resolves via SRAPath mgr if present
  */
 rc_t ResolveTablePath ( const SRAMgr *mgr,
-        char *path, size_t psize, const char *spec, va_list args )
+    char *path, size_t psize, const char *spec, va_list args )
 {
+#if OLD_SRAPATH_MGR
     int len;
     char tblpath [ 4096 ];
-    const SRAPath *pmgr = mgr -> pmgr;
+    const SRAPath *pmgr = mgr -> _pmgr;
 
     /* if no path manager or if the spec string has embedded path separators,
        then this can't be an accession - just print it out */
-    if ( mgr -> pmgr == NULL || strchr( spec, '/' ) != NULL )
+    if ( mgr -> _pmgr == NULL || strchr( spec, '/' ) != NULL )
     {
         len = vsnprintf ( path, psize, spec, args );
         if ( len < 0 || ( size_t ) len >= psize )
@@ -236,7 +403,6 @@ rc_t ResolveTablePath ( const SRAMgr *mgr,
     /* test if the path exists in current directory, i.e. with assumed dot */
     if ( ! SRAPathTest ( pmgr, tblpath ) )
     {
-        /* try to resolve the path using mgr */
         rc_t rc = SRAPathFind ( pmgr, tblpath, path, psize );
         if ( rc == 0 )
             return 0;
@@ -248,6 +414,23 @@ rc_t ResolveTablePath ( const SRAMgr *mgr,
     strcpy ( path, tblpath );
 
     return 0;
+#else
+    VPath *accession;
+    const VPath *tblpath = NULL;
+    rc_t rc = VPathMakeFmt ( & accession, spec, args );
+    if ( rc == 0 )
+    {
+        rc = VResolverLocal ( ( const VResolver* ) mgr -> _pmgr, accession, & tblpath );
+        if ( rc == 0 )
+        {
+            size_t size;
+            rc = VPathReadPath ( tblpath, path, psize, & size );
+            VPathRelease ( tblpath );
+        }
+        VPathRelease ( accession );
+    }
+    return rc;
+#endif
 }
 
 /* OpenRead
@@ -276,66 +459,65 @@ rc_t CC SRAMgrVOpenAltTableRead ( const SRAMgr *self,
             rc = RC ( rcSRA, rcTable, rcOpening, rcName, rcEmpty );
         else
         {
-            char path [ 4096 ];
-            rc = ResolveTablePath ( self, path, sizeof path, spec, args );
-            if ( rc == 0 )
+            SRATable *tbl = calloc ( 1, sizeof *tbl );
+            if ( tbl == NULL )
+                rc = RC ( rcSRA, rcTable, rcConstructing, rcMemory, rcExhausted );
+            else
             {
-                SRATable *tbl = calloc ( 1, sizeof *tbl );
-                if ( tbl == NULL )
-                    rc = RC ( rcSRA, rcTable, rcConstructing, rcMemory, rcExhausted );
-                else
+                VSchema *schema = NULL;
+
+                rc = VDBManagerMakeSRASchema(self -> vmgr, & schema);
+                if ( rc == 0 ) 
                 {
-                    VSchema *schema;
-                    rc = VDBManagerMakeSRASchema ( self -> vmgr, & schema );
-                    if ( rc == 0 ) 
+                    va_list args_copy;
+                    va_copy ( args_copy, args );
+                    rc = VDBManagerVOpenTableRead ( self -> vmgr, & tbl -> vtbl, schema, spec, args );
+                    if ( rc != 0 && GetRCObject ( rc ) == rcTable && GetRCState ( rc ) == rcIncorrect )
                     {
-                        rc = VDBManagerOpenTableRead ( self -> vmgr, & tbl -> vtbl, schema, path );
-                        if ( rc != 0 && GetRCObject ( rc ) == rcPath && GetRCState ( rc ) == rcIncorrect )
+                        const VDatabase *db;
+                        rc_t rc2 = VDBManagerVOpenDBRead ( self -> vmgr, & db, schema, spec, args_copy );
+                        if ( rc2 == 0 )
                         {
-                            const VDatabase *db;
-                            rc_t rc2 = VDBManagerOpenDBRead ( self -> vmgr, & db, schema, path );
+                            rc2 = VDatabaseOpenTableRead ( db, & tbl -> vtbl, altname );
                             if ( rc2 == 0 )
-                            {
-                                rc2 = VDatabaseOpenTableRead ( db, & tbl -> vtbl, altname );
-                                if ( rc2 == 0 )
-                                    rc = 0;
+                                rc = 0;
 
-                                VDatabaseRelease ( db );
-                            }
+                            VDatabaseRelease ( db );
                         }
+                    }
+                    va_end ( args_copy );
 
-                        VSchemaRelease(schema);
+                    VSchemaRelease(schema);
 
+                    if ( rc == 0 )
+                    {
+                        rc = VTableOpenMetadataRead ( tbl -> vtbl, & tbl -> meta );
                         if ( rc == 0 )
                         {
-                            rc = VTableOpenMetadataRead ( tbl -> vtbl, & tbl -> meta );
+                            rc = KMetadataVersion ( tbl -> meta, & tbl -> metavers );
                             if ( rc == 0 )
                             {
-                                rc = KMetadataVersion ( tbl -> meta, & tbl -> metavers );
+                                rc = VTableCreateCursorRead ( tbl -> vtbl, & tbl -> curs );
                                 if ( rc == 0 )
                                 {
-                                    rc = VTableCreateCursorRead ( tbl -> vtbl, & tbl -> curs );
+                                    tbl -> mgr = SRAMgrAttach ( self );
+                                    tbl -> mode = self -> mode;
+                                    tbl -> read_only = true;
+                                    KRefcountInit ( & tbl -> refcount, 1, "SRATable", "OpenTableRead", spec );
+                                        
+                                    rc = SRATableFillOut ( tbl, false );
                                     if ( rc == 0 )
                                     {
-                                        tbl -> mgr = SRAMgrAttach ( self );
-                                        tbl -> mode = self -> mode;
-                                        tbl -> read_only = true;
-                                        KRefcountInit ( & tbl -> refcount, 1, "SRATable", "OpenTableRead", path );
-                                        
-                                        rc = SRATableFillOut ( tbl );
-                                        if ( rc == 0 )
-                                        {
-                                            * rslt = tbl;
-                                            return 0;
-                                        }
+                                        * rslt = tbl;
+                                        return 0;
                                     }
                                 }
                             }
                         }
-                        
                     }
-                    SRATableWhack ( tbl );
+                    
                 }
+                SRATableWhack ( tbl );
             }
         }
 
@@ -408,6 +590,8 @@ rc_t SRATableRead ( const SRATable *self, spotid_t id, uint32_t idx,
                 * offset = elem_off * elem_bits;
                 * size   = elem_cnt * elem_bits;
                 return 0;
+            } else if( UIError(rc, NULL, self->vtbl) ) {
+                UITableLOGError(rc, self->vtbl, true);
             }
         }
     }
@@ -1073,14 +1257,16 @@ LIB_EXPORT rc_t CC SRATableMakeSingleFileArchive ( const SRATable *self, const K
             const VDatabase *db;
             if( (rc = VTableOpenParentRead(self->vtbl, &db)) == 0 && db != NULL ) {
                 const KDatabase *kdb;
-                if( (rc = VDatabaseOpenKDatabaseRead(db, &kdb)) == 0 ) {
+                if ((rc = VDatabaseOpenKDatabaseRead(db, &kdb)) == 0) {
                     const KDirectory *db_dir;
                     if( (rc = KDatabaseOpenDirectoryRead(kdb, &db_dir)) == 0 ) {
-                        rc = KDirectoryOpenTocFileRead(db_dir, sfa, sraAlign4Byte,
-                           lightweight ? sfa_filter_light : sfa_filter, (void*)sfa_path_type_db, sfa_sort_db);
+                        rc = KDirectoryOpenTocFileRead(db_dir, sfa,
+                            sraAlign4Byte,
+                            lightweight ? sfa_filter_light : sfa_filter,
+                            (void*)sfa_path_type_db, sfa_sort_db);
                         KDirectoryRelease(db_dir);
                         if( ext != NULL ) {
-                            *ext = lightweight ? ".lite.csra" : ".csra";
+                            *ext = CSRA_EXT(lightweight);
                         }
                     }
                     KDatabaseRelease(kdb);
@@ -1097,7 +1283,7 @@ LIB_EXPORT rc_t CC SRATableMakeSingleFileArchive ( const SRATable *self, const K
                             lightweight ? sfa_filter_light : sfa_filter, (void*)sfa_path_type_tbl, sfa_sort_tbl);
                         KDirectoryRelease(tbl_dir);
                         if( ext != NULL ) {
-                            *ext = lightweight ? ".lite.sra" : ".sra";
+                            *ext = SRA_EXT(lightweight);
                         }
                     }
                     KTableRelease(ktbl);
diff --git a/libs/sra/wsramgr.c b/libs/sra/wsramgr.c
index 0f3f502..6c430bc 100644
--- a/libs/sra/wsramgr.c
+++ b/libs/sra/wsramgr.c
@@ -41,6 +41,7 @@
 #include <klib/refcount.h>
 #include <klib/log.h>
 #include <klib/rc.h>
+#include <klib/text.h>
 
 #include <stdlib.h>
 #include <sysalloc.h>
diff --git a/libs/sra/wsraschema-stub.c b/libs/sra/wsraschema-stub.c
old mode 100755
new mode 100644
index a71799f..2cfdc97
--- a/libs/sra/wsraschema-stub.c
+++ b/libs/sra/wsraschema-stub.c
@@ -26,88 +26,21 @@
 
 #include <sra/sraschema.h>
 #include <sra/sradb-priv.h>
-#include <kfs/dyload.h>
 #include <klib/rc.h>
 
-#include <sysalloc.h>
-#include <os-native.h>
-
 #include "sra-priv.h"
 
-#include <string.h>
-#include <assert.h>
-
-
 /*--------------------------------------------------------------------------
  * SRASchema
  *  a schema object pre-loaded with default SRA schema
  */
 
-#if ! _STATIC
-/* LoadLibrary
- *  loads libsraschema and fills out function pointers
- */
-static KDylib *libsraschema = NULL;
-
-static struct
-{
-    rc_t ( CC * sraSchemaMake ) ( struct VSchema **schema, struct VDBManager const *mgr );
-
-} imports;
-
-static
-rc_t SRASchemaLoadLibrary ( void )
-{
-    KDyld *dl;
-    rc_t rc = KDyldMake ( & dl );
-    if ( rc == 0 )
-    {
-        rc = KDyldLoadLib ( dl, & libsraschema, LPFX "wsra-schema" SHLX );
-        if ( rc == 0 )
-        {
-            KSymAddr *sym;
-
-            /* resolve symbols */
-            rc = KDylibSymbol ( libsraschema, & sym, "SRASchemaMake" );
-            if ( rc == 0 )
-            {
-                KSymAddrAsFunc ( sym, ( fptr_t* ) & imports . sraSchemaMake );
-                KSymAddrRelease ( sym );
-            }
-
-            /* bail on error */
-            if ( rc != 0 )
-            {
-                KDylibRelease ( libsraschema );
-                libsraschema = NULL;
-                memset ( & imports, 0, sizeof imports );
-            }
-        }
-        KDyldRelease ( dl );
-    }
-
-    return rc;
-}
-#endif
-
 /* Make
  *  create an instance of the default SRA schema
  */
 rc_t CC VDBManagerMakeSRASchema ( struct VDBManager const *self, struct VSchema **schema )
 {
-#if _STATIC
     return SRASchemaMake ( schema, self );
-#else
-    if ( libsraschema == NULL )
-    {
-        rc_t rc = SRASchemaLoadLibrary ();
-        if ( rc != 0 )
-            return rc;
-    }
-
-    assert ( imports . sraSchemaMake != NULL );
-    return ( * imports . sraSchemaMake ) ( schema, self );
-#endif
 }
 
 rc_t CC SRAMgrMakeSRASchema ( const SRAMgr *self, struct VSchema **schema )
diff --git a/libs/sra/wsratbl.c b/libs/sra/wsratbl.c
index 0aeec9c..945ae68 100644
--- a/libs/sra/wsratbl.c
+++ b/libs/sra/wsratbl.c
@@ -32,6 +32,7 @@
 #include <vdb/cursor.h>
 #include <vdb/vdb-priv.h>
 #include <kdb/meta.h>
+#include <klib/printf.h> /* string_vprintf */
 #include <klib/refcount.h>
 #include <klib/log.h>
 #include <klib/debug.h>
@@ -94,8 +95,11 @@ LIB_EXPORT rc_t CC SRAMgrVCreateTable ( SRAMgr *self, SRATable **rslt,
             rc = RC ( rcSRA, rcTable, rcConstructing, rcString, rcEmpty );
         else
         {
-            char path [ 4096 ];
-            rc = ResolveTablePath ( self, path, sizeof path, spec, args );
+            char path [ 4097 ];
+            size_t act_size = 0;
+            
+            rc = string_vprintf(path, 4097, &act_size, spec, args);
+            path[act_size] = '\0';
             if ( rc == 0 )
             {
                 VTable *vtbl;
@@ -196,11 +200,14 @@ LIB_EXPORT rc_t CC SRAMgrVOpenTableUpdate(SRAMgr *mgr, SRATable **rslt, const ch
                     self->read_only = false;
                     KRefcountInit(&self->refcount, 1, "SRATable", "OpenTableUpdate", path);
                     
-                    SRATableLoadMetadata(self); /* fallible */
-                    VectorInit(&self->wcol, 0, 16);
+                    rc = SRATableFillOut ( self, true );
+                    if ( rc == 0 )
+                    {
+                        VectorInit ( & self -> wcol, 0, 16 );
                     
-                    *rslt = self;
-                    return 0;
+                        *rslt = self;
+                        return 0;
+                    }
                 }
             }
         }
diff --git a/libs/sraxf/Makefile b/libs/sraxf/Makefile
index dbc168b..453bc1c 100644
--- a/libs/sraxf/Makefile
+++ b/libs/sraxf/Makefile
@@ -43,15 +43,13 @@ include $(TOP)/build/Makefile.env
 #-------------------------------------------------------------------------------
 # outer targets
 #
-vers-includes: $(addsuffix .vers.h,$(ALL_LIBS))
-
-all std: makedirs vers-includes
+all std: makedirs
 	@ $(MAKE_CMD) $(TARGDIR)/std
 
-$(ALL_LIBS): makedirs vers-includes
+$(ALL_LIBS): makedirs
 	@ $(MAKE_CMD) $(TARGDIR)/$@
 
-.PHONY: vers-includes all std $(ALL_LIBS)
+.PHONY: all std $(ALL_LIBS)
 
 #-------------------------------------------------------------------------------
 # std
@@ -69,14 +67,6 @@ clean: stdclean
 .PHONY: clean
 
 #-------------------------------------------------------------------------------
-# tag
-#
-tag: \
-	$(addsuffix _tag,$(ALL_LIBS))
-
-.PHONY: tag $(addsuffix _tag,$(ALL_LIBS))
-
-#-------------------------------------------------------------------------------
 # sra transform library
 #
 $(TARGDIR)/libsraxf: $(addprefix $(TARGDIR)/libsraxf.,$(MODEXT))
@@ -132,10 +122,7 @@ $(MODDIR)/libsraxf.$(SHLX): $(SRAXF_OBJ)
 $(TARGDIR)/libsraxf.$(LIBX): $(ILIBDIR)/libsraxf.$(LIBX)
 
 $(ILIBDIR)/libsraxf.$(LIBX): $(SRAXF_OBJ)
-	$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(SRAXF_LIB)
-
-libsraxf_tag:
-	@ $(TOP)/build/tag-module.sh $(MODULE) libsraxf $(SRAXF_OBJ)
+	$(LD) --slib -o $@ $^ $(SRAXF_LIB)
 
 
 #-------------------------------------------------------------------------------
@@ -170,7 +157,4 @@ $(WMODDIR)/libwsraxf.$(SHLX): $(WSRAXF_OBJ)
 $(TARGDIR)/libwsraxf.$(LIBX): $(ILIBDIR)/libwsraxf.$(LIBX)
 
 $(ILIBDIR)/libwsraxf.$(LIBX): $(WSRAXF_OBJ)
-	$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(WSRAXF_LIB)
-
-libswraxf_tag:
-	@ $(TOP)/build/tag-module.sh $(MODULE) libwsraxf $(WSRAXF_OBJ)
+	$(LD) --slib -o $@ $^ $(WSRAXF_LIB)
diff --git a/libs/sraxf/fix_read_seg_impl.h b/libs/sraxf/fix_read_seg_impl.h
new file mode 100644
index 0000000..977485f
--- /dev/null
+++ b/libs/sraxf/fix_read_seg_impl.h
@@ -0,0 +1,169 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/* READ_SEG was engineered to be capable of holding
+   any sort of read description, including out-of-order,
+   non-contiguous, gapped or overlapped segments.
+
+   This property was never used, and READ_SEG is by now
+   obsolete, so we can count on it being used as a sort
+   of READ_LEN where the starts represent an integration
+   of the lengths, i.e. all segments are in order and
+   contiguous. */
+#define READ_SEGS_ALWAYS_CONTIGUOUS 1
+
+static void fix_read_seg_impl(const uint16_t *rs_src, uint32_t nreads,
+    uint32_t spot_len, uint32_t * rs_dst)
+{
+    const uint32_t nreads2 = nreads + nreads;
+        uint32_t i, total;
+
+        assert(rs_src && rs_dst);
+
+#if READ_SEGS_ALWAYS_CONTIGUOUS
+        /* first, check the stated bases within the read-seg */
+        for ( i = 1, total = 0; i < nreads2; i += 2 )
+            total += rs_src [ i ];
+
+        /* if there are no bases reported, just divide the
+           spot_len by the number of reads and rewrite */
+        if ( total == 0 )
+        {
+            /* if there is a single read, fix it */
+            if ( nreads == 1 )
+            {
+                rs_dst [ 0 ] = 0;
+                rs_dst [ 1 ] = spot_len;
+            }
+            else
+            {
+                double fstart = 0;
+                double flen = ( double ) spot_len / nreads;
+                for ( i = total = 0; i < nreads2; fstart += flen, i += 2 )
+                {
+                    long int start = lround ( fstart );
+                    long int end = lround ( fstart + flen );
+                    if ( start >= ( long int ) spot_len )
+                    {
+                        rs_dst [ i ] = spot_len;
+                        rs_dst [ i + 1 ] = 0;
+                    }
+                    else
+                    {
+                        if ( end > ( long int ) spot_len )
+                            end = ( long int ) spot_len - start;
+                        else
+                            end -= start;
+
+                        rs_dst [ i ] = ( uint32_t ) start;
+                        rs_dst [ i + 1 ] = ( uint32_t ) end;
+                    }
+
+                    total += rs_dst [ i + 1 ];
+                }
+
+                assert ( total == spot_len );
+            }
+        }
+
+        /* have the right number of bases - just rewrite starts */
+        else if ( total == spot_len )
+        {
+            for ( i = total = 0; i < nreads2; i += 2 )
+            {
+                rs_dst [ i ] = total;
+                total += ( rs_dst [ i + 1 ] = rs_src [ i + 1 ] );
+            }
+        }
+
+        /* have too many bases - trust all up to limit */
+        else if ( total > spot_len )
+        {
+            for ( i = total = 0; i < nreads2; i += 2 )
+            {
+                rs_dst [ i ] = total;
+                total += ( rs_dst [ i + 1 ] = rs_src [ i + 1 ] );
+                if ( total > spot_len )
+                {
+                    total = spot_len;
+                    rs_dst [ i + 1 ] = total - rs_dst [ i ];
+                }
+            }
+        }
+
+        /* too few bases - trust all but last */
+        else
+        {
+            for ( i = 0; i < nreads2; i += 2 )
+                rs_dst [ i + 1 ] = rs_src [ i + 1 ];
+
+            for ( ; total < spot_len && i != 0; )
+            {
+                uint32_t remaining = spot_len - total;
+                i -= 2;
+                rs_dst [ i + 1 ] += remaining;
+                total += remaining;
+            }
+
+            for ( i = 0, total = 0; i < nreads2; i += 2 )
+            {
+                rs_dst [ i ] = total;
+                total += rs_dst [ i + 1 ];
+            }
+        }
+#else
+        /* loop increments by 2
+           where the read start is even, read length odd */
+        for ( i = total = 0; i < nreads2; i += 2 )
+        {
+            /* is start greater than max? */
+            if ( rs_src [ i ] >= spot_len )
+            {
+                /* clip start to end */
+                rs_dst [ i ] = spot_len;
+                /* zero length read */
+                rs_dst [ i + 1 ] = 0;
+            }
+            /* is end greater than max? */
+            else if ( rs_src [ i ] + rs_src [ i + 1 ] > spot_len )
+            {
+                /* keep start */
+                rs_dst [ i ] = rs_src [ i ];
+                /* clip length to end */
+                rs_dst [ i + 1 ] = spot_len - rs_src [ i ];
+            }
+            else
+            {
+                /* copy existing segment */
+                rs_dst [ i ]   = rs_src [ i ];
+                rs_dst [ i + 1 ] = rs_src [ i + 1 ];
+            }
+
+            /* sum total length */
+            total += rs_src [ i + 1 ];
+        }
+#endif
+}
diff --git a/libs/sraxf/format-spot-name.c b/libs/sraxf/format-spot-name.c
index 36034e6..9859ed5 100644
--- a/libs/sraxf/format-spot-name.c
+++ b/libs/sraxf/format-spot-name.c
@@ -28,6 +28,7 @@
 #include <vdb/xform.h>
 #include <klib/data-buffer.h>
 #include <klib/text.h>
+#include <klib/printf.h>
 #include <klib/rc.h>
 #include <sysalloc.h>
 #include "name-tokenizer.h"
@@ -85,6 +86,7 @@ rc_t CC format_spot_name ( void *self,
     /* check for NAME_FMT */
     if ( argv [ 0 ] . u. data . elem_count != 0 )
     {
+        size_t num_writ;
         char sname[1024]; /** name on stack **/
         const char *name_fmt = ((char*)argv[0].u.data.base) + argv[0].u.data.first_elem;
         uint32_t i, j, x, y;
@@ -140,7 +142,9 @@ rc_t CC format_spot_name ( void *self,
                     }
                     break;
 		 case 'r': case 'R':
-		    j+=sprintf(sname+j,"%ld",row_id);
+            rc = string_printf ( & sname [ j ], sizeof sname - j, & num_writ, "%ld", row_id );
+            assert ( rc == 0 );
+            j += ( uint32_t ) num_writ;
 		    i+=2;
 		    break;
                 default:
@@ -227,6 +231,7 @@ rc_t CC format_spot_name_no_coord ( void *self,
     /* check for NAME_FMT */
     if ( argv [ 0 ] . u. data . elem_count != 0 )
     {
+        size_t num_writ;
         char sname[1024]; /** name on stack **/
         const char *name_fmt = ((char*)argv[0].u.data.base) + argv[0].u.data.first_elem;
         uint32_t i, j;
@@ -236,7 +241,9 @@ rc_t CC format_spot_name_no_coord ( void *self,
             if( name_fmt [ i ] == '$' ){
                 switch( name_fmt [ i+1 ]){
 		 case 'r': case 'R':
-		    j+=sprintf(sname+j,"%ld",row_id);
+            rc = string_printf ( & sname [ j ], sizeof sname - j, & num_writ, "%ld", row_id );
+            assert ( rc == 0 );
+		    j += ( uint32_t ) num_writ;
 		    i+=2;
 		    break;
                 default:
diff --git a/libs/sraxf/index_lookup.c b/libs/sraxf/index_lookup.c
index 1468e9d..fbafa89 100644
--- a/libs/sraxf/index_lookup.c
+++ b/libs/sraxf/index_lookup.c
@@ -81,9 +81,28 @@ static int CC SRAPTNodeFindFmt ( const void *item, const struct PBSTNode *n, voi
     for(i=j=0;q[i]!=0 && db[j]!= 0;){
         if(q[i] == db[j]){
                 i++;j++;
-        } else if(   db[j] == '$'
-                  && isdigit(q[i])){
+        } else if(db[j] == '$'){
                 switch(db[j+1]){
+		 case 'q':
+                 case 'Q':
+		 {
+			int k;
+			uint32_t xy=0;
+			j+=2;
+			for(k=0;k<5 && q[i]!=0;k++,i++){
+				xy *= 36;
+				if(isdigit(q[i])){
+					xy += q[i] - '0' + 26;
+				} else if(isalpha(q[i])){
+					xy += toupper(q[i]) - 'A';
+				}
+			}
+			if(u){
+				u->x = xy >> 12;
+				u->y = xy &0xFFF;
+			}
+	       		break;
+		 }
                  case 'x':
                  case 'X':
                         if(u) u->x=atoi(q+i);
diff --git a/libs/sraxf/libsraxf.vers b/libs/sraxf/libsraxf.vers
index 781dcb0..e25d8d9 100644
--- a/libs/sraxf/libsraxf.vers
+++ b/libs/sraxf/libsraxf.vers
@@ -1 +1 @@
-1.1.3
+1.1.5
diff --git a/libs/sraxf/libsraxf.vers.h b/libs/sraxf/libsraxf.vers.h
deleted file mode 100644
index 924b642..0000000
--- a/libs/sraxf/libsraxf.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBSRAXF_VERS 0x01010003
diff --git a/libs/sraxf/libwsraxf.vers b/libs/sraxf/libwsraxf.vers
index 781dcb0..e25d8d9 100644
--- a/libs/sraxf/libwsraxf.vers
+++ b/libs/sraxf/libwsraxf.vers
@@ -1 +1 @@
-1.1.3
+1.1.5
diff --git a/libs/sraxf/libwsraxf.vers.h b/libs/sraxf/libwsraxf.vers.h
deleted file mode 100644
index dcc1cec..0000000
--- a/libs/sraxf/libwsraxf.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBWSRAXF_VERS 0x01010003
diff --git a/libs/sraxf/prefix-tree-to-name.c b/libs/sraxf/prefix-tree-to-name.c
index 8537495..06a2e1b 100644
--- a/libs/sraxf/prefix-tree-to-name.c
+++ b/libs/sraxf/prefix-tree-to-name.c
@@ -31,9 +31,7 @@
 #include <kdb/index.h>
 #include <klib/data-buffer.h>
 #include <klib/text.h>
-#include <klib/out.h>
 #include <klib/rc.h>
-#include <klib/debug.h>
 
 #include <string.h>
 #include <assert.h>
diff --git a/libs/sraxf/read-desc.c b/libs/sraxf/read-desc.c
index 15fa952..d3ce922 100644
--- a/libs/sraxf/read-desc.c
+++ b/libs/sraxf/read-desc.c
@@ -33,6 +33,7 @@
 #include <sysalloc.h>
 
 #include <assert.h>
+#include <string.h>
 
 static
 rc_t CC make_read_desc ( void *self, const VXformInfo *info, int64_t row_id,
@@ -97,6 +98,7 @@ rc_t CC make_read_desc ( void *self, const VXformInfo *info, int64_t row_id,
         {
             uint32_t label_start = lbl_start [ idx ];
             uint32_t label_len = lbl_len [ idx ];
+            size_t   label_used;
             if ( label_start + label_len > label_max )
             {
                 if ( label_start > label_max )
@@ -110,8 +112,11 @@ rc_t CC make_read_desc ( void *self, const VXformInfo *info, int64_t row_id,
             dst[idx].type = read_type[idx] & SRA_READ_TYPE_BIOLOGICAL;
             dst[idx].cs_key = cs_key[idx];
 
-            string_copy( dst[idx].label, sizeof(dst[idx].label), 
-                         & label [ label_start ], label_len );
+            label_used = string_copy( dst[idx].label, sizeof(dst[idx].label), 
+                                      & label [ label_start ], label_len );
+            /* Pad with NULs so that bitcmp sees fully initialized data */
+            memset( dst[idx].label + label_used, '\0',
+                    sizeof(dst[idx].label) - label_used );        
         }
 
         rslt->elem_bits = sizeof(*dst) * 8;
diff --git a/libs/sraxf/read-seg-from-readn.c b/libs/sraxf/read-seg-from-readn.c
index 1777690..99bdf68 100644
--- a/libs/sraxf/read-seg-from-readn.c
+++ b/libs/sraxf/read-seg-from-readn.c
@@ -39,8 +39,10 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
+#include <math.h>
 #include <assert.h>
 
+#include "fix_read_seg_impl.h"
 
 /* readn_read_desc
  *  "nreads" [ DATA ] - bases for entire spot
@@ -330,10 +332,12 @@ rc_t CC fix_read_seg ( void *data, const VXformInfo *info, int64_t row_id,
 {
     rc_t rc;
 
-    const uint16_t *rs_src = ((uint16_t*)argv[0].u.data.base)+argv[0].u.data.first_elem;
-    const uint32_t nreads = argv[0].u.data.elem_count;
-    uint32_t spot_len = ((uint32_t*)argv[1].u.data.base)[argv[1].u.data.first_elem];
-    uint32_t nreads2 = nreads + nreads;
+    const uint16_t *rs_src = argv [ 0 ] . u . data . base;
+    const uint32_t nreads = argv [ 0 ] . u . data . elem_count;
+    const uint32_t *spot_lenp = argv [ 1 ] . u . data . base;
+    const uint32_t spot_len = spot_lenp [ argv [ 1 ] . u . data . first_elem ];
+
+    rs_src += argv [ 0 ] . u . data . first_elem;
 
     assert ( spot_len > 0 );
     assert ( nreads > 0);
@@ -341,37 +345,8 @@ rc_t CC fix_read_seg ( void *data, const VXformInfo *info, int64_t row_id,
     rc = KDataBufferResize ( rslt -> data, nreads );
     if ( rc == 0 )
     {
-        uint32_t i;
         uint32_t * rs_dst = rslt -> data -> base;
-
-        /* loop increments by 2
-           where the read start is even, read length odd */
-        for( i = 0; i < nreads2; i += 2 )
-        {
-            /* is start greater than max? */
-            if( rs_src [ i ] >= spot_len )
-            {
-                /* clip start to end */
-                rs_dst [ i ] = spot_len;
-                /* zero length read */
-                rs_dst [ i + 1 ] = 0;
-            }
-            /* is end greater than max? */
-            else if ( rs_src [ i ] + rs_src [ i + 1 ] > spot_len )
-            {
-                /* keep start */
-                rs_dst [ i ] = rs_src [ i ];
-                /* clip length to end */
-                rs_dst [ i + 1 ] = spot_len - rs_src [ i ];
-            }
-            else
-            {
-                /* copy existing segment */
-                rs_dst [ i ]   = rs_src [ i ];
-                rs_dst [ i + 1 ] = rs_src [ i + 1 ];
-            }
-        }
-
+        fix_read_seg_impl(rs_src, nreads, spot_len, rs_dst);
         rslt -> elem_count = nreads;
     }
     return rc;
diff --git a/libs/sraxf/stats.c b/libs/sraxf/stats.c
index 691da53..0b53093 100644
--- a/libs/sraxf/stats.c
+++ b/libs/sraxf/stats.c
@@ -30,6 +30,7 @@
 #include <vdb/table.h>
 #include <klib/data-buffer.h>
 #include <klib/text.h>
+#include <klib/printf.h>
 #include <klib/rc.h>
 #include <kdb/meta.h>
 #include <os-native.h> /* strncasecmp */
@@ -58,37 +59,37 @@ typedef struct sra_meta_stats_data_struct
     sra_meta_stats_node_group table;
     sra_meta_stats_node_group dflt_grp;
     char* last_grp_name;
-    uint64_t last_grp_name_len;
-    uint64_t last_grp_name_sz;
+    uint64_t last_grp_name_len; /* strlen */
+    uint64_t last_grp_name_sz; /* buffer size */
     sra_meta_stats_node_group last_grp;
+    uint32_t grp_qty;
 } sra_meta_stats_data;
 
 static
-rc_t sra_meta_stats_node_read(KMDataNode* node, void* value, size_t sz)
+rc_t sra_meta_stats_node_read(KMDataNode* node, void* value)
 {
-    rc_t rc = 0;
-    size_t num_read, remaining;
-
-    if( (rc = KMDataNodeRead(node, 0, value, sz, &num_read, &remaining)) == 0 &&
-        num_read == sz && remaining == 0 ) {
-    } else if( rc == 0 && num_read == 0 && remaining == 0 ) {
-        memset(value, 0, sz);
-    } else {
-        rc = rc ? rc : RC(rcVDB, rcFunction, rcUpdating, rcMetadata, rcCorrupt);
+    rc_t rc = KMDataNodeReadAsU64(node, value);
+    if ( rc != 0 )
+    {
+        if ( GetRCState ( rc ) == rcIncomplete && GetRCObject ( rc ) == rcTransfer )
+        {
+            * ( uint64_t* ) value = 0;
+            rc = 0;
+        }
     }
     return rc;
 }
 
 static
 rc_t sra_meta_stats_node_group_update(sra_meta_stats_node_group* g,
-                                      const int64_t spot_id, const uint32_t spot_len,
-                                      const uint32_t bio_spot_len, const uint32_t cmp_spot_len)
+    const int64_t spot_id, const uint32_t spot_len,
+    const uint32_t bio_spot_len, const uint32_t cmp_spot_len)
 {
     rc_t rc = 0;
     uint64_t u64;
     int64_t i64;
 
-    if( (rc = sra_meta_stats_node_read(g->node_spot_count, &u64, sizeof(u64))) == 0 ) {
+    if( (rc = sra_meta_stats_node_read(g->node_spot_count, &u64)) == 0 ) {
         if( u64 + 1 < u64 ) {
             rc = RC(rcVDB, rcFunction, rcUpdating, rcMetadata, rcOutofrange);
         } else {
@@ -98,7 +99,7 @@ rc_t sra_meta_stats_node_group_update(sra_meta_stats_node_group* g,
             rc = KMDataNodeWriteB64(g->node_spot_count, &u64);
         }
     }
-    if( (rc = sra_meta_stats_node_read(g->node_base_count, &u64, sizeof(u64))) == 0 ) {
+    if( (rc = sra_meta_stats_node_read(g->node_base_count, &u64)) == 0 ) {
         if( u64 + 1 < u64 ) {
             rc = RC(rcVDB, rcFunction, rcUpdating, rcMetadata, rcOutofrange);
         } else {
@@ -106,7 +107,7 @@ rc_t sra_meta_stats_node_group_update(sra_meta_stats_node_group* g,
             rc = KMDataNodeWriteB64(g->node_base_count, &u64);
         }
     }
-    if( (rc = sra_meta_stats_node_read(g->node_bio_base_count, &u64, sizeof(u64))) == 0 ) {
+    if( (rc = sra_meta_stats_node_read(g->node_bio_base_count, &u64)) == 0 ) {
         if( u64 + bio_spot_len < u64 ) {
             rc = RC(rcVDB, rcFunction, rcUpdating, rcMetadata, rcOutofrange);
         } else {
@@ -115,7 +116,7 @@ rc_t sra_meta_stats_node_group_update(sra_meta_stats_node_group* g,
         }
     }
     if( g->node_cmp_base_count != NULL ) {
-        if( (rc = sra_meta_stats_node_read(g->node_cmp_base_count, &u64, sizeof(u64))) == 0 ) {
+        if( (rc = sra_meta_stats_node_read(g->node_cmp_base_count, &u64)) == 0 ) {
             if( u64 + cmp_spot_len < u64 ) {
                 rc = RC(rcVDB, rcFunction, rcUpdating, rcMetadata, rcOutofrange);
             } else {
@@ -124,14 +125,16 @@ rc_t sra_meta_stats_node_group_update(sra_meta_stats_node_group* g,
             }
         }
     }
-    if( (rc = sra_meta_stats_node_read(g->node_spot_max, &i64, sizeof(i64))) == 0 ) {
+    if( (rc = sra_meta_stats_node_read(g->node_spot_max, &i64)) == 0 ) {
         if( i64 == 0 || i64 < spot_id ) {
-            rc = KMDataNodeWriteB64(g->node_spot_max, &spot_id);
+            i64 = spot_id;
+            rc = KMDataNodeWriteB64(g->node_spot_max, &i64);
         }
     }
-    if( (rc = sra_meta_stats_node_read(g->node_spot_min, &i64, sizeof(i64))) == 0 ) {
+    if( (rc = sra_meta_stats_node_read(g->node_spot_min, &i64)) == 0 ) {
         if( i64 == 0 || i64 > spot_id ) {
-            rc = KMDataNodeWriteB64(g->node_spot_min, &spot_id);
+            i64 = spot_id;
+            rc = KMDataNodeWriteB64(g->node_spot_min, &i64);
         }
     }
     return rc;
@@ -151,9 +154,6 @@ rc_t sra_meta_stats_node_group_open(KMDataNode* parent, sra_meta_stats_node_grou
         if( compressed ) { 
             rc = KMDataNodeOpenNodeUpdate(parent, &g->node_cmp_base_count, "CMP_BASE_COUNT");
         }
-        if( rc == 0 ) {
-            rc = sra_meta_stats_node_group_update(g, 0, 0, 0, 0);
-        }
     }
     return rc;
 }
@@ -161,13 +161,15 @@ rc_t sra_meta_stats_node_group_open(KMDataNode* parent, sra_meta_stats_node_grou
 static
 void sra_meta_stats_node_group_release(sra_meta_stats_node_group* g)
 {
-    if( g ) {
+    if ( g != NULL )
+    {
         KMDataNodeRelease(g->node_spot_count);
         KMDataNodeRelease(g->node_base_count);
         KMDataNodeRelease(g->node_bio_base_count);
         KMDataNodeRelease(g->node_cmp_base_count);
         KMDataNodeRelease(g->node_spot_min);
         KMDataNodeRelease(g->node_spot_max);
+        memset ( g, 0, sizeof * g );
     }
 }
 
@@ -217,57 +219,120 @@ rc_t sra_meta_stats_make(sra_meta_stats_data** self, VTable* vtbl, bool has_spot
 
 static
 rc_t CC sra_meta_stats_update(sra_meta_stats_data* self,
-                              const int64_t spot_id, const uint32_t spot_len,
-                              const uint32_t bio_spot_len, const uint32_t cmp_spot_len,
-                              bool has_grp, const char* grp, uint64_t grp_len)
+    const int64_t spot_id, const uint32_t spot_len,
+    const uint32_t bio_spot_len, const uint32_t cmp_spot_len,
+    bool has_grp, const char* grp, uint64_t grp_len)
 {
     rc_t rc = 0;
+    const uint32_t max_grp_qty = 10000;
 
     assert(self != NULL);
 
     rc = sra_meta_stats_node_group_update(&self->table, spot_id, spot_len, bio_spot_len, cmp_spot_len);
-    if( rc == 0 && has_grp ) {
+    if( has_grp && self->grp_qty <= max_grp_qty && rc == 0 )
+    {
         /* an empty group is considered default */
         if( grp_len == 0 || grp == NULL || grp[0] == '\0' ||
-            (grp_len == 7 && strncasecmp("default", grp, grp_len) == 0 ) ) {
+            (grp_len == 7 && strncasecmp("default", grp, grp_len) == 0 ) )
+        {
             rc = sra_meta_stats_node_group_update(&self->dflt_grp, spot_id, spot_len, bio_spot_len, cmp_spot_len);
-        } else {
-            if( self->last_grp_name == NULL ||
-                self->last_grp_name_len != grp_len || strncmp(self->last_grp_name, grp, grp_len) != 0 ) {
-                if( self->last_grp_name_sz < (grp_len + 1) ) {
-                    char* p = realloc(self->last_grp_name, grp_len + 2);
-                    if( p == NULL ) {
-                        rc = RC(rcVDB, rcFunction, rcConstructing, rcMemory, rcExhausted);
-                    } else {
-                        self->last_grp_name = p;
-                        self->last_grp_name_sz = grp_len + 2;
-                    }
+        }
+        else
+        {
+            size_t i;
+            KMDataNode* n;
+            const KMDataNode *cn;
+            bool new_group, unsafe;
+
+            /* look for cached node */
+            if ( self->last_grp_name != NULL &&
+                 self->last_grp_name_len == grp_len &&
+                 strncmp(self->last_grp_name, grp, grp_len) == 0 )
+            {
+                return sra_meta_stats_node_group_update(&self->last_grp, spot_id, spot_len, bio_spot_len, cmp_spot_len);
+            }
+
+            /* release cached group */
+            sra_meta_stats_node_group_release(&self->last_grp);
+
+            /* realloc cached name */
+            if ( self->last_grp_name == NULL || grp_len >= self->last_grp_name_sz )
+            {
+                char *p = realloc ( self -> last_grp_name, grp_len + 1 );
+                if ( p == NULL )
+                    return RC ( rcXF, rcFunction, rcExecuting, rcMemory, rcExhausted );
+    
+                self -> last_grp_name = p;
+                self -> last_grp_name_sz = grp_len + 1;
+            }
+
+            /* sanitize name */
+            for ( unsafe = false, i = 0; i < grp_len; ++ i )
+            {
+                if ( ( self -> last_grp_name [ i ] = grp [ i ] ) == '/' )
+                {
+                    unsafe = true;
+                    self -> last_grp_name [ i ] = '\\';
                 }
-                if( rc == 0 ) {
-                    KMDataNode *ngrps;
-                    const char* safe = grp;
-
-                    char* p = self->last_grp_name;
-                    self->last_grp_name_len = grp_len;
-                    string_copy(self->last_grp_name, self->last_grp_name_sz, grp, grp_len);
-                    /* replace all '/' for '\' in spot_group */
-                    while( *p != '\0' && (p = strchr(p, '/')) != NULL ) {
-                        safe = self->last_grp_name;
-                        *p++ = '\\';
-                    }
-                    sra_meta_stats_node_group_release(&self->last_grp);
-                    if( (rc = KMetadataOpenNodeUpdate(self->meta, &ngrps, "STATS/SPOT_GROUP/%.*s", grp_len, safe)) == 0 ) {
-                        rc = sra_meta_stats_node_group_open(ngrps, &self->last_grp, self->compressed);
-                        if( rc == 0 && grp != safe ) {
-                            string_copy(self->last_grp_name, self->last_grp_name_sz, grp, grp_len);
-                            rc = KMDataNodeWriteAttr(ngrps, "name", self->last_grp_name);
+            }
+            self -> last_grp_name_len = i;
+            self -> last_grp_name [ i ] = 0;
+
+            /* look for new group */
+            new_group = true;
+            rc = KMetadataOpenNodeRead(self->meta, &cn, "STATS/SPOT_GROUP/%s", self->last_grp_name );
+            if ( rc == 0 )
+            {
+                new_group = false;
+                KMDataNodeRelease ( cn );
+            }
+
+            /* detect abusive quantity of nodes */
+            if ( new_group && ++self->grp_qty > max_grp_qty )
+            {
+                rc = KMetadataOpenNodeUpdate(self->meta, &n, "STATS");
+                if( rc == 0 )
+                {
+                    sra_meta_stats_node_group_release(&self->dflt_grp);
+                    KMDataNodeDropChild(n, "SPOT_GROUP");
+                    KMDataNodeRelease(n);
+                    free(self->last_grp_name);
+                    self->last_grp_name = NULL;
+                }
+                return rc;
+            }
+
+            /* create new or cache existing group */
+            rc = KMetadataOpenNodeUpdate(self->meta, &n, "STATS/SPOT_GROUP/%s", self->last_grp_name );
+            if ( rc == 0 )
+            {
+                rc = sra_meta_stats_node_group_open(n, &self->last_grp, self->compressed);
+                if (rc == 0 && new_group) {
+                    if (unsafe)
+                    {
+                        char value [ 512 ], *v = value;
+                        if ( grp_len >= sizeof value )
+                            v = malloc ( grp_len + 1 );
+                        if ( v == NULL )
+                            rc = RC ( rcXF, rcFunction, rcExecuting, rcMemory, rcExhausted );
+                        else
+                        {
+                            rc = string_printf ( v, grp_len + 1, NULL, "%.*s", ( uint32_t ) grp_len, grp );
+                            assert ( rc == 0 );
+                            rc = KMDataNodeWriteAttr(n, "name", v);
+                            if ( rc == 0 )
+                                memcpy ( self->last_grp_name, grp, grp_len );
+                            if ( v != value )
+                                free ( v );
                         }
-                        KMDataNodeRelease(ngrps);
                     }
+                    if ( rc == 0 )
+                        rc = sra_meta_stats_node_group_update(&self->last_grp, 0, 0, 0, 0);
                 }
-            }
-            if( rc == 0 ) {
-                rc = sra_meta_stats_node_group_update(&self->last_grp, spot_id, spot_len, bio_spot_len, cmp_spot_len);
+                KMDataNodeRelease(n);
+
+                if( rc == 0 )
+                    rc = sra_meta_stats_node_group_update(&self->last_grp, spot_id, spot_len, bio_spot_len, cmp_spot_len);
             }
         }
     }
diff --git a/libs/sraxf/stats_quality.c b/libs/sraxf/stats_quality.c
index 6a8fc1b..ddc42a3 100644
--- a/libs/sraxf/stats_quality.c
+++ b/libs/sraxf/stats_quality.c
@@ -99,12 +99,12 @@ rc_t CC phred_stats_trigger(void *data, const VXformInfo *info, int64_t row_id,
 
     assert(self != NULL);
     assert(argc == 1);
-    assert(argv[0].u.data.base != NULL);
     assert(argv[0].u.data.elem_bits == (sizeof(INSDC_quality_phred) * 8));
 
     len = argv[0].u.data.elem_count;
     if( len > 0 ) {
         const INSDC_quality_phred* q = argv[0].u.data.base;
+        assert(argv[0].u.data.base != NULL);
         q += argv[0].u.data.first_elem;
         do {
             self->count[q[--len]]++;
diff --git a/libs/sraxf/tokenize-spot_name-ion-torrent.c b/libs/sraxf/tokenize-spot_name-ion-torrent.c
index bf66ecd..b7f6e98 100644
--- a/libs/sraxf/tokenize-spot_name-ion-torrent.c
+++ b/libs/sraxf/tokenize-spot_name-ion-torrent.c
@@ -53,43 +53,68 @@ rc_t CC tokenize_spot_name_IonTorrent( void *self, const VXformInfo *info, int64
     
     assert(rslt->elem_bits == sizeof(spot_name_tok[0]) * 8);
     rslt->data->elem_bits = sizeof(spot_name_tok[0]) * 8;
-    if( (rc = KDataBufferResize(rslt->data, EXPECTED_NUMBER_OF_TOKENS)) != 0 ) {
+    rc = KDataBufferResize(rslt->data, EXPECTED_NUMBER_OF_TOKENS);
+    if( rc != 0 )
         return rc;
-    }
     
     spot_name_tok = rslt->data->base;
     
     /* reverse line parse by format:
        /^(.+):([0-9]+):([0-9]+)$/ = (name, x, x) = ($1, $2, $3)
     */
-    name = &((const char *)argv[0].u.data.base)[argv[0].u.data.first_elem];
+    name = argv[0].u.data.base;
+    name += argv[0].u.data.first_elem;
     end = name + argv[0].u.data.elem_count;
 
-    while(rc == 0 && end > name && tok > 0 ) {
-        size_t l = 0;
-        while( isdigit(*--end) && end > name ) {
-            l++;
-        }
-        if( *end != ':' || l == 0 ) {
-            rc = RC(rcSRA, rcFormatter, rcReading, rcName, rcUnrecognized);
-        } else {
-            tok--;
-            spot_name_tok[tok].s.token_type = types[tok];
-            spot_name_tok[tok].s.position = end - name + 1;
-            spot_name_tok[tok].s.length = l;
+    while ( end > name && tok > 0 )
+    {
+        const char *num_start, *num_end = end;
+
+        /* examine least significant digit */
+        -- end;
+        if ( ! isdigit ( * end ) )
+            break;
+
+        /* any digit 0-9 is okay as least significant */
+        num_start = end;
+
+        /* examine remaining digits */
+        while ( end > name )
+        {
+            /* require 0-9 to stay within parse */
+            -- end;
+            if ( ! isdigit ( * end ) )
+                break;
+
+            /* only reset numeric start if not 0 */
+            if ( * end != '0' )
+                num_start = end;
         }
+
+        /* should have stopped on ':' */
+        if ( *end != ':' )
+            break;
+
+        /* we have a numeric token
+           due to oddities, exclude leading zeros from numeral */
+        -- tok;
+        spot_name_tok[tok].s.token_type = types[tok];
+        spot_name_tok[tok].s.position = num_start - name;
+        spot_name_tok[tok].s.length = num_end - num_start;
     }
-    if( rc == 0 && tok != 0 ) {
-        rc = RC(rcSRA, rcFormatter, rcReading, rcName, rcInvalid);
-    }
-    if( rc != 0 ) {
+
+    /* if all tokens were seen, the parse was good */
+    if( tok == 0 )
+        rslt->elem_count = EXPECTED_NUMBER_OF_TOKENS;
+    else
+    {
+        /* otherwise, treat entire string as unrecognized */
         spot_name_tok[0].s.token_type = nt_unrecognized;
         spot_name_tok[0].s.position = 0;
         spot_name_tok[0].s.length = argv[0].u.data.elem_count;
         rslt->elem_count = 1;
-    } else {
-        rslt->elem_count = EXPECTED_NUMBER_OF_TOKENS;
     }
+
     return 0;
 }
 
diff --git a/libs/sraxf/varloc.c b/libs/sraxf/varloc.c
old mode 100755
new mode 100644
diff --git a/libs/vdb/Makefile b/libs/vdb/Makefile
index 86ca6f7..22bfcdb 100644
--- a/libs/vdb/Makefile
+++ b/libs/vdb/Makefile
@@ -43,18 +43,16 @@ include $(TOP)/build/Makefile.env
 #-------------------------------------------------------------------------------
 # outer targets
 #
-vers-includes: $(addsuffix .vers.h,$(EXT_LIBS))
-
-all std: makedirs vers-includes
+all std: vers-includes
 	@ $(MAKE_CMD) $(TARGDIR)/std
 
-$(INT_LIBS): makedirs vers-includes
+$(INT_LIBS): vers-includes
 	@ $(MAKE_CMD) $(ILIBDIR)/$@
 
-$(EXT_LIBS): makedirs vers-includes
+$(EXT_LIBS): vers-includes
 	@ $(MAKE_CMD) $(LIBDIR)/$@
 
-.PHONY: vers-includes all std $(ALL_LIBS)
+.PHONY: all std $(ALL_LIBS)
 
 #-------------------------------------------------------------------------------
 # std
@@ -66,6 +64,13 @@ $(TARGDIR)/std: \
 .PHONY: $(TARGDIR)/all $(TARGDIR)/std
 
 #-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_LIBS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
 # clean
 #
 clean: stdclean
@@ -102,6 +107,7 @@ VDBCMN_SRC = \
 	linker-int \
 	linker-cmn \
 	database-cmn \
+	database-depend \
 	database-load \
 	table-cmn \
 	table-load \
@@ -130,7 +136,9 @@ VDBCMN_SRC = \
 	redimension \
 	index_project \
 	index_lookup \
-	transpose
+	transpose \
+	delta_average \
+	report-vdb
 
 VDB_SRC = \
 	$(VDBCMN_SRC) \
@@ -148,8 +156,10 @@ VDB_OBJ = \
 
 VDB_LIB = \
 	-dkdb \
+	-dvfs \
 	-dkfg \
 	-dkfs \
+	-dkproc \
 	-dklib \
 	-dz
 
@@ -187,6 +197,7 @@ WVDB_OBJ = \
 
 WVDB_LIB = \
 	-dwkdb \
+	-dvfs \
 	-dkfg \
 	-dkfs \
 	-dkproc \
diff --git a/libs/vdb/blob-priv.h b/libs/vdb/blob-priv.h
index c904365..625e979 100644
--- a/libs/vdb/blob-priv.h
+++ b/libs/vdb/blob-priv.h
@@ -31,6 +31,10 @@
 #include <klib/defs.h>
 #endif
 
+#ifndef _h_vdb_blob_
+#include <vdb/blob.h>
+#endif
+
 #ifndef _h_klib_refcount_
 #include <klib/refcount.h>
 #endif
@@ -65,10 +69,29 @@ struct BlobHeaders;
 struct VProduction;
 struct VBlobPageMapCache;
 
+typedef struct PageMapProcessRequest{
+    struct PageMap *pm;        /**** deserialized form **/
+    KDataBuffer data;   /**** serialized   form **/
+    uint32_t    row_count;
+    uint64_t    elem_count;
+    rc_t rc;            /**** results **/
+
+    volatile enum {
+        ePMPR_STATE_NONE=0,
+        ePMPR_STATE_SERIALIZE_REQUESTED,
+        ePMPR_STATE_DESERIALIZE_REQUESTED,
+        ePMPR_STATE_SERIALIZE_DONE,
+        ePMPR_STATE_DESERIALIZE_DONE,
+	ePMPR_STATE_EXIT
+    } state;            /**** request state      **/
+    struct KLock      *lock;
+    struct KCondition *cond;
+} PageMapProcessRequest;
+
+
 /*--------------------------------------------------------------------------
  * VBlob
  */
-typedef struct VBlob VBlob;
 struct VBlob
 {
     int64_t start_id;
@@ -106,9 +129,15 @@ struct VBlobPageMapCache {
 
 rc_t VBlobNew( VBlob **lhs, int64_t start_id, int64_t stop_id, const char *name );
 
+/* use inline-able addref and release on blobs
+   within the library for efficiency */
 #if 1
 #define VBlobAddRef( self ) \
-    ( ( ( self ) == NULL ) ? 0 : ( atomic32_inc ( & ( self ) -> refcount ), 0 ) )
+    ( ( ( self ) == NULL ) ? \
+      0 : ( atomic32_inc ( & ( self ) -> refcount ), 0 ) )
+#define VBlobRelease( self ) \
+    ( ( ( self ) == NULL || atomic32_read_and_add_gt ( & ( self ) -> refcount, -1, 1 ) > 1 ) ? \
+      0 : VBlobRelease ( self ) )
 #endif
 
 #if _DEBUGGING
@@ -118,20 +147,12 @@ void VBlobCheckIntegrity ( const VBlob *self );
   ( void ) 0
 #endif
 
-#ifdef VBlobAddRef
-rc_t VBlobReleaseLast ( VBlob *self );
-#define VBlobRelease( self ) \
-    ( ( ( self ) == NULL || atomic32_read_and_add_gt ( & ( self ) -> refcount, -1, 1 ) > 1 ) ? 0 : VBlobReleaseLast ( self ) )
-#else
-rc_t VBlobAddRef( VBlob *self );
-rc_t VBlobRelease( VBlob *self );
-#endif
-
 rc_t VBlobCreateFromData(
                          struct VBlob **lhs,
                          int64_t start_id, int64_t stop_id,
                          const KDataBuffer *src,
-                         uint32_t elem_bits
+                         uint32_t elem_bits,
+			 PageMapProcessRequest const *pmpr
 );
 
 rc_t VBlobCreateFromSingleRow(
@@ -140,6 +161,8 @@ rc_t VBlobCreateFromSingleRow(
                               const KDataBuffer *src,
                               VByteOrder byte_order
 );
+/*** VBlob as a new array; meaning fixed len,data_run(..)=1 **/
+rc_t VBlobNewAsArray(struct VBlob **lhs, int64_t start_id, int64_t stop_id, uint32_t rowlen, uint32_t elem_bits); 
     
 rc_t VBlobSerialize( const VBlob *self, KDataBuffer *result );
 
@@ -151,6 +174,26 @@ rc_t VBlobAppend( struct VBlob *self, const struct VBlob *other );
 /**** finds start_id in a blob and builds sub-blob for the number or repetitions ***/
 rc_t VBlobSubblob( const struct VBlob *self,struct VBlob **sub, int64_t start_id );
 
+void VBlobPageMapOptimize( struct VBlob **self );
+
+#define LAST_BLOB_CACHE_SIZE 256
+
+
+typedef struct VBlobMRUCache VBlobMRUCache; /** forward declaration **/
+typedef  struct VBlobMRUCacheCursorContext {  /** to be used to pass cache context down to production level ***/
+	VBlobMRUCache * cache;
+	uint32_t	col_idx;
+} VBlobMRUCacheCursorContext;
+
+VBlobMRUCache * VBlobMRUCacheMake(uint64_t capacity );
+void VBlobMRUCacheDestroy( VBlobMRUCache *self );
+const VBlob* VBlobMRUCacheFind(const VBlobMRUCache *cself, uint32_t col_idx, int64_t row_id);
+rc_t VBlobMRUCacheSave(const VBlobMRUCache *cself, uint32_t col_idx, const VBlob *blob);
+
+
+rc_t PageMapProcessGetPagemap(const PageMapProcessRequest *self,struct PageMap **pm);
+
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/libs/vdb/blob.c b/libs/vdb/blob.c
index 58faa71..dbf63cc 100644
--- a/libs/vdb/blob.c
+++ b/libs/vdb/blob.c
@@ -36,16 +36,23 @@
 #include <klib/defs.h>
 #include <byteswap.h>
 #include <klib/data-buffer.h>
+#include <klib/container.h>
 #include <klib/vlen-encode.h>
+#include <kdb/btree.h>
 #include <vdb/schema.h>
 #include <vdb/xform.h>
 #include <klib/log.h>
 #include <sysalloc.h>
 #include <bitstr.h>
 
+#include <kproc/timeout.h>
+#include <kproc/lock.h>
+#include <kproc/cond.h>
+
 #include <assert.h>
 #include <stdlib.h>
 #include <string.h>
+#include <os-native.h>
 
 #include <stdio.h> /* temp for debugging */
 
@@ -55,7 +62,7 @@ void VBlobCheckIntegrity ( const VBlob *self )
     if ( self != NULL )
     {
         rc_t rc = KDataBufferCheckIntegrity ( & self -> data );
-	if ( rc != 0 )
+        if ( rc != 0 )
         {
             fprintf ( stderr, "AAAAAH!\n" );
         }
@@ -92,6 +99,24 @@ rc_t VBlobNew ( VBlob **lhs, int64_t start_id, int64_t stop_id, const char *name
     }
     return RC(rcVDB, rcBlob, rcConstructing, rcMemory, rcExhausted);
 }
+rc_t VBlobNewAsArray(struct VBlob **lhs, int64_t start_id, int64_t stop_id, uint32_t rowlen, uint32_t elem_bits)
+{
+	VBlob *y;
+	rc_t rc = VBlobNew(&y,start_id,stop_id,NULL);
+	if(rc == 0){
+		rc = KDataBufferMake(&y->data,elem_bits,rowlen*(stop_id-start_id+1));
+		if(rc == 0){
+			rc=PageMapNewFixedRowLength(&y->pm,stop_id-start_id+1,rowlen);
+			if(rc == 0){
+				*lhs = y;
+				return 0;
+			}
+			PageMapRelease(y->pm);
+		}
+		VBlobRelease(y);
+	}
+	return rc;
+}
 
 static rc_t VBlobDestroy( VBlob *that ) {
     if (that->spmc) {
@@ -108,37 +133,6 @@ static rc_t VBlobDestroy( VBlob *that ) {
     return 0;
 }
 
-#ifdef VBlobAddRef
-rc_t VBlobReleaseLast ( VBlob *self )
-#else
-rc_t VBlobAddRef ( const VBlob *self )
-{
-    if ( self != NULL )
-        KRefcountAdd(&self->refcount, "VBlob");
-    return 0;
-}
-
-rc_t VBlobRelease ( const VBlob *self )
-#endif
-{
-    rc_t rc = 0;
-
-    if ( self != 0 )
-    {
-        switch ( KRefcountDrop(&self->refcount, "VBlob") )
-        {
-        case krefWhack:
-            return VBlobDestroy ( self );
-        case krefNegative:
-            rc = RC (rcVDB, rcBlob, rcDestroying, rcBlob, rcExcessive);
-            PLOGERR ( klogInt, (klogInt, rc, "Released a blob $(B) with no more references",
-                      PLOG_P(self)));
-            break;
-        }
-    }
-    return rc;
-}
-
 static rc_t decode_header_byte_v2(
                                   uint8_t header_byte,
                                   uint8_t *variant,
@@ -304,8 +298,8 @@ static rc_t encode_header_v1(
         dst[0] = header_byte;
         dst[1] = ( uint8_t ) row_length;
         dst[2] = ( uint8_t ) ( row_length >> 8 );
-        dst[2] = ( uint8_t ) ( row_length >> 16 );
-        dst[3] = ( uint8_t ) ( row_length >> 24 );
+        dst[3] = ( uint8_t ) ( row_length >> 16 );
+        dst[4] = ( uint8_t ) ( row_length >> 24 );
     }
     return 0;
 }
@@ -381,13 +375,81 @@ static rc_t encode_header_v2(
 }
 
 static
+rc_t PageMapProcessRequestLock(PageMapProcessRequest *self)
+{
+	rc_t rc=RC(rcVDB,rcPagemap, rcConstructing, rcSelf, rcNull);
+	if(self){
+		struct timeout_t tm;
+		TimeoutInit(&tm,0);
+		TimeoutPrepare(&tm);
+		/*** no plans to wait here the thread should be relased by now ****/
+		rc = KLockTimedAcquire(self->lock,&tm);
+		if(rc == 0){
+			if(self->state != ePMPR_STATE_NONE){ /*** thread is not released yet **/
+				assert(0); /** should not happen ***/
+				KLockUnlock(self->lock);
+				rc=RC(rcVDB, rcPagemap, rcConstructing, rcThread, rcBusy);
+			}
+		}
+	}
+	return rc;
+}
+
+static
+void PageMapProcessRequestLaunch(PageMapProcessRequest *self)
+{
+	KLockUnlock(self -> lock);
+	KConditionSignal ( self -> cond );
+}
+
+rc_t PageMapProcessGetPagemap(const PageMapProcessRequest *cself,struct PageMap **pm)
+{
+	rc_t rc=RC(rcVDB,rcPagemap, rcConstructing, rcSelf, rcNull);
+        if(cself){
+	    PageMapProcessRequest *self=(PageMapProcessRequest*)cself;
+	    if(self->lock == NULL){
+		/** NOT LOCKABLE **/
+		rc=0;
+	    } else if((rc = KLockAcquire ( self->lock ))==0){
+CHECK_AGAIN:
+		switch(self->state){
+		 case ePMPR_STATE_DESERIALIZE_REQUESTED:
+			/*fprintf(stderr,"Waiting for pagemap %p\n",cself->lock);*/
+			rc = KConditionWait ( self -> cond, self -> lock );
+                        goto CHECK_AGAIN;
+		 case ePMPR_STATE_DESERIALIZE_DONE:
+			assert(self->pm);
+			/*fprintf(stderr,"Pagemap %p Used R:%6d|DR:%d|LR:%d\n",self->lock, self->pm->row_count,self->pm->data_recs,self->pm->leng_recs);*/
+			*pm=self->pm;
+			self->pm = NULL;
+			KDataBufferWhack(&self->data);
+			self->row_count = 0;
+			self->state = ePMPR_STATE_NONE;
+			KLockUnlock(self -> lock);
+			KConditionSignal(self->cond);
+			break;
+		case ePMPR_STATE_NONE: /* not requested */
+			KLockUnlock(self -> lock);
+		    rc = 0;
+		    break;
+		 default: /** should never happen ***/
+			assert(0);
+			KLockUnlock(self -> lock);
+			return RC(rcVDB, rcPagemap, rcConverting, rcParam, rcInvalid );
+		}
+	    }
+        }
+        return rc;
+}
+
+
+static
 rc_t VBlobCreateFromData_v2(
                             VBlob **lhs,
                             const KDataBuffer *data,
                             int64_t start_id, int64_t stop_id,
-                            uint32_t elem_bits
+                            uint32_t elem_bits, PageMapProcessRequest *pmpr
 ) {
-    const uint8_t *src = data->base;
     uint64_t ssize = data->elem_count;
     uint32_t hsize;
     uint32_t msize;
@@ -396,8 +458,10 @@ rc_t VBlobCreateFromData_v2(
     uint8_t adjust;
     VBlob *y;
     uint32_t data_offset;
+    uint32_t pagemap_offset;
     bitsz_t databits;
     uint32_t elem_count;
+    uint8_t *src = data->base;
     rc_t rc;
     
     rc = decode_header_v2(src, ssize, &hsize, &msize, &offset, &adjust, &byte_order);
@@ -407,8 +471,8 @@ rc_t VBlobCreateFromData_v2(
     if (ssize < offset + hsize + msize)
         return RC(rcVDB, rcBlob, rcConstructing, rcData, rcInsufficient);
     
-    src += offset;
-    data_offset = offset + hsize + msize;
+    pagemap_offset = offset + hsize;
+    data_offset = pagemap_offset + msize;
     assert(data_offset <= ssize);
     ssize -= data_offset;
     databits = (ssize << 3) - adjust;
@@ -419,9 +483,23 @@ rc_t VBlobCreateFromData_v2(
     TRACK_BLOB (VBlobNew, y);
     if (rc == 0) {
         if (hsize)
-            rc = BlobHeadersCreateFromData(&y->headers, src, hsize);
+            rc = BlobHeadersCreateFromData(&y->headers, src+offset , hsize);
         if (rc == 0) {
-            rc = PageMapDeserialize(&y->pm, src + hsize, msize, BlobRowCount(y));
+            if (msize > 0) {
+                if(PageMapProcessRequestLock(pmpr)==0) {
+                    KDataBufferSub(data, &pmpr->data, pagemap_offset, msize);
+                    pmpr->row_count = BlobRowCount(y);
+                    pmpr->state = ePMPR_STATE_DESERIALIZE_REQUESTED;
+                    /*fprintf(stderr,"Pagemap %p Requested R:%6d|SZ:%d|%ld:%ld\n",pmpr->lock, pmpr->row_count,msize,start_id, stop_id);*/
+                    PageMapProcessRequestLaunch(pmpr);
+                }
+                else {
+                    KDataBuffer tdata;
+                    KDataBufferSub(data, &tdata, pagemap_offset, msize);
+                    rc = PageMapDeserialize(&y->pm, tdata.base,tdata.elem_count, BlobRowCount(y));
+                    KDataBufferWhack(&tdata);
+                }
+            }
             if (rc == 0) {
                 KDataBufferSub(data, &y->data, data_offset, ssize);
                 y->data.elem_bits = elem_bits;
@@ -461,19 +539,10 @@ rc_t VBlobCreateFromData_v1(
     
     header = *src;
     byte_order = header & 3; header >>= 2;
-#if 0
-    /* v1 stores adjustment as the number of bits to subtract:
-       stored_adjust = ( 8 - ( data_bits & 7 ) ) & 7;
-       calculated_bits_from_blob_size = blob_bytes << 3;
-       actual_blob_bits = calculated_bits_from_blob_size - stored_adjust; */
-    adjust = (8 - (header & 7)) & 7;
-#else
     adjust = header & 7;
-#endif
     header >>= 3;
     rls = header & 3;
     
-#if 1
     /* convert rls from a code to an actual length */
     rls = "\x01\x02\x04\x00" [ rls ];
 
@@ -499,48 +568,35 @@ rc_t VBlobCreateFromData_v1(
 #endif
     }
 
-#else
-    switch (rls) {
-    case 0:
-        offset = 2;
-        if (ssize < offset)
-            return RC(rcVDB, rcBlob, rcConstructing, rcData, rcInsufficient);
-        row_len = src[1];
-        break;
-    case 1:
-        offset = 3;
-        if (ssize < offset)
-            return RC(rcVDB, rcBlob, rcConstructing, rcData, rcInsufficient);
-        /* the result of these sub-expressions is a uint8_t
-           and will not survive the shifts. casting to uint32_t
-           on the very first access will fix the problem */
-        row_len = (src[2] << 8) | src[1];
-        break;
-    case 2:
-        offset = 5;
-        if (ssize < offset)
-            return RC(rcVDB, rcBlob, rcConstructing, rcData, rcInsufficient);
-        /* see comment above */
-        row_len = (((((src[4] << 8) | src[3]) << 8) | src[2]) << 8) | src[1];
-        break;
-    default:
-        offset = 1;
-        row_len = 1;
-        break;
-    }
-#endif
     ssize -= offset;
     databits = (ssize << 3) - adjust;
     assert(databits % elem_bits == 0);
 
-    /* TBD - row_len CAN be 0 in certain cases
-       wait on legacy decoding function to extract
-       row length, and then SET IT */
     rc = VBlobNew(&y, start_id, stop_id, NULL);
     TRACK_BLOB (VBLobNew, y);
     if (rc == 0) {
+
+        uint64_t row_count = BlobRowCount ( y );
+
+        /* test for badly formed row-length */
+        if ( rls == 4 )
+        {
+            assert ( row_len != 0 );
+            if ( row_len * row_count != databits / elem_bits )
+            {
+                /* we can fix a length if we know the count */
+                if ( row_count != 0 )
+                    row_len = ( databits / elem_bits ) / row_count;
+                else
+                {
+                    /* rely on code to handle legacy blobs in prod-cmn.c:VFunctionProdCallByteswap */
+                    row_len = 0;
+                }
+            }
+        }
+
         if ( row_len != 0 )
-            rc = PageMapNewFixedRowLength( &y->pm, BlobRowCount(y), (uint32_t)row_len );
+            rc = PageMapNewFixedRowLength( &y->pm, row_count, row_len );
         if (rc == 0) {
             KDataBufferSub(data, &y->data, offset, ssize);
             y->data.elem_bits = elem_bits;
@@ -557,6 +613,258 @@ rc_t VBlobCreateFromData_v1(
     return rc;
 }
 
+static void VBlobOptimize_UnRLE_uint8_t(VBlob **vblobp)
+{
+	VBlob   *sblob  = *vblobp;
+	VBlob *vblob;
+	rc_t rc = VBlobNewAsArray(&vblob,sblob -> start_id, sblob -> stop_id,sblob->pm->length[0],sblob->data.elem_bits);
+	if( rc == 0){
+		uint32_t i,j;
+		uint8_t *src=sblob->data.base;
+		uint8_t *dst=vblob->data.base;
+		for(i=j=0;i<sblob->pm->data_recs;i++){
+			row_count_t data_len=sblob->pm->data_run[i];
+			while(data_len > 0){
+				assert(j < sblob->pm->row_count);
+				dst[j++] = src[i];
+				data_len--;
+			}
+		}
+		vblob->pm->optimized = eBlobPageMapOptimizedSucceeded;
+		VBlobRelease(sblob);
+		(*vblobp) = vblob;
+	}
+}
+static void VBlobOptimize_UnRLE_uint16_t(VBlob **vblobp)
+{
+	VBlob   *sblob  = *vblobp;
+	VBlob *vblob;
+	rc_t rc = VBlobNewAsArray(&vblob,sblob -> start_id, sblob -> stop_id,sblob->pm->length[0],sblob->data.elem_bits);
+	if( rc == 0) {
+		uint32_t i,j;
+		uint16_t *src=sblob->data.base;
+		uint16_t *dst=vblob->data.base;
+		for(i=j=0;i<sblob->pm->data_recs;i++){
+			row_count_t data_len=sblob->pm->data_run[i];
+			while(data_len > 0){
+				assert(j < sblob->pm->row_count);
+				dst[j++] = src[i];
+				data_len--;
+			}
+		}
+		vblob->pm->optimized = eBlobPageMapOptimizedSucceeded;
+		VBlobRelease(sblob);
+		(*vblobp) = vblob;
+	}
+}
+static void VBlobOptimize_UnRLE_uint32_t(VBlob **vblobp)
+{
+	VBlob   *sblob  = *vblobp;
+	VBlob *vblob;
+	rc_t rc = VBlobNewAsArray(&vblob,sblob -> start_id, sblob -> stop_id,sblob->pm->length[0],sblob->data.elem_bits);
+	if( rc == 0) {
+		uint32_t i,j;
+		uint32_t *src=sblob->data.base;
+		uint32_t *dst=vblob->data.base;
+		for(i=j=0;i<sblob->pm->data_recs;i++){
+			row_count_t data_len=sblob->pm->data_run[i];
+			while(data_len > 0){
+				assert(j < sblob->pm->row_count);
+				dst[j++] = src[i];
+				data_len--;
+			}
+		}
+		vblob->pm->optimized = eBlobPageMapOptimizedSucceeded;
+		VBlobRelease(sblob);
+		(*vblobp) = vblob;
+	}
+}
+static void VBlobOptimize_UnRLE_uint64_t(VBlob **vblobp)
+{
+	VBlob   *sblob  = *vblobp;
+	VBlob *vblob;
+	rc_t rc = VBlobNewAsArray(&vblob,sblob -> start_id, sblob -> stop_id,sblob->pm->length[0],sblob->data.elem_bits);
+	if( rc == 0) {
+		uint32_t i,j;
+		uint64_t *src=sblob->data.base;
+		uint64_t *dst=vblob->data.base;
+		for(i=j=0;i<sblob->pm->data_recs;i++){
+			row_count_t data_len=sblob->pm->data_run[i];
+			while(data_len > 0){
+				assert(j < sblob->pm->row_count);
+				dst[j++] = src[i];
+				data_len--;
+			}
+		}
+		vblob->pm->optimized = eBlobPageMapOptimizedSucceeded;
+		VBlobRelease(sblob);
+		(*vblobp) = vblob;
+	}
+}
+
+
+void VBlobPageMapOptimize ( VBlob **vblobp)
+{
+	VBlob   *sblob  = *vblobp;
+	PageMap *pm     = sblob->pm;
+	if(pm->optimized != eBlobPageMapOptimizedNone) return; /* do not optimize previously optimized blobs */
+	pm->optimized = eBlobPageMapOptimizedFailed; /*** prevent future optimization if none of the algorithms succeeds ***/
+
+	if(pm->leng_recs == 1)
+    {
+		if( pm->length[0] * sblob->data.elem_bits == 8 /** 1 byte data ***/
+		    &&  pm->data_recs < pm->row_count       /** rle was used ***/
+		    &&  pm->data_recs * 6 > pm->row_count){ /** but not super efficiently **/
+			/*printf("OPTIMIZATION: UnRLE(8)\n");*/
+			VBlobOptimize_UnRLE_uint8_t(vblobp); 
+			return;
+		}
+		if( pm->length[0] * sblob->data.elem_bits == 16 /** 2 byte data ***/
+		    &&  pm->data_recs < pm->row_count       /** rle was used ***/
+		    &&  pm->data_recs * 2 > pm->row_count){ /** but not super efficiently **/
+			/*printf("OPTIMIZATION: UnRLE(16)\n");*/
+			VBlobOptimize_UnRLE_uint16_t(vblobp);
+			return;
+		}
+		if( pm->length[0] * sblob->data.elem_bits == 32 /** 4 byte data ***/
+		    &&  pm->data_recs < pm->row_count       /** rle was used ***/
+		    &&  pm->data_recs * 15 > pm->row_count * 10 ){ /** but not super efficiently **/
+			/*printf("OPTIMIZATION: UnRLE(32)\n");*/
+			VBlobOptimize_UnRLE_uint32_t(vblobp);
+			return;
+		}
+		if( pm->length[0] * sblob->data.elem_bits == 64 /** 8 byte data ***/
+		    &&  pm->data_recs < pm->row_count       /** rle was used ***/
+		    &&  pm->data_recs * 11 > pm->row_count * 10 ){ /** but not super efficiently **/
+			/*printf("OPTIMIZATION: UnRLE(64)\n");*/
+			VBlobOptimize_UnRLE_uint64_t(vblobp);
+			return;
+		}
+
+	}
+
+	if(pm->row_count > 1024 && (sblob->data.elem_bits & 7) == 0)
+    {
+		elem_count_t	minlen,maxlen;
+		elem_count_t	elem_sz = sblob->data.elem_bits/8;
+		rc_t rc = PageMapRowLengthRange(pm, &minlen,&maxlen);
+		if( rc == 0  && maxlen*elem_sz > 2 ){ 
+		/******* TRY dictionary **/
+			int64_t		limit_vocab_size;
+			uint32_t	vocab_cnt=0;
+			KBTree		*vocab_key2id = NULL;
+			bool		valid_data_run = (pm->row_count != pm->data_recs);
+			uint32_t	*data_offset = NULL;
+			KDataBuffer     new_data;
+
+			rc=KDataBufferMake(&new_data,sblob->data.elem_bits,0); /** no allocation - shoulf not fail at all **/
+			assert(rc==0);
+/*******************
+* another formula
+* the savings should not be less than the waste on pointers into data vocabulary
+* it is assumed that the data offsets will cost us not more than 2 bytes on disk
+* the nasty left part is the average number of bytes in a row
+* limit_vocab_size = ((int64_t)sblob->data.elem_count*elem_sz - 2*pm->row_count) * sblob->data.elem_count / pm->data_recs / elem_sz;
+****************/
+			limit_vocab_size = ((int64_t)sblob->data.elem_count*elem_sz +(valid_data_run?pm->data_recs*2:0) -  2*pm->row_count)
+					   * pm->data_recs / (int64_t)sblob->data.elem_count / elem_sz;
+			
+
+			if(limit_vocab_size <=1 ){
+				rc = RC(rcVDB, rcBlob, rcConstructing, rcId, rcOutofrange);
+			}
+			if(limit_vocab_size > pm->data_recs/4){
+				limit_vocab_size = pm->data_recs/4;  /* to limit the amount of work **/
+			}
+#define MAX_VOCAB_SIZE 2048
+			if(limit_vocab_size > MAX_VOCAB_SIZE) limit_vocab_size=MAX_VOCAB_SIZE;
+			if(rc == 0)
+				rc=KBTreeMakeUpdate(&vocab_key2id, NULL, 256*1024*1024,
+				      false, kbtOpaqueKey,
+				      minlen?minlen*elem_sz:1,maxlen*elem_sz, sizeof ( uint32_t ), NULL);
+			if(rc == 0){
+				uint32_t i,j;
+				uint8_t  *src;
+				uint32_t dst_offset;
+				uint32_t vocab_arr[MAX_VOCAB_SIZE];
+				data_offset = malloc(pm->data_recs * sizeof(*data_offset));
+				if(data_offset == NULL){
+					rc = RC(rcVDB, rcBlob, rcConstructing, rcMemory, rcExhausted);
+				}
+				for(i=j=0,src = sblob->data.base,dst_offset=0;i<pm->leng_recs && rc == 0 ;i++){
+					row_count_t leng_run = pm->leng_run[i];
+					if(pm->length[i] == 0){/*** trivial case, can point anywhere - no vocabulary**/
+						for(;leng_run > 0;j++){
+							row_count_t data_run = valid_data_run?pm->data_run[j]:1;
+							assert(leng_run >= data_run);
+							data_offset[j] = 0; /**  point to offset=0 **/
+							leng_run -=data_run;
+						}
+					} else for(;leng_run > 0 && rc == 0;j++){
+						row_count_t data_run = valid_data_run?pm->data_run[j]:1;
+						bool wasInserted;
+						uint64_t tmp_id = vocab_cnt;
+						assert(leng_run >= data_run);
+						leng_run -=data_run;
+						rc = KBTreeEntry(vocab_key2id, &tmp_id, &wasInserted, src, pm->length[i]*elem_sz);
+						if(rc == 0){
+							if(wasInserted){
+								vocab_cnt++;
+								if(vocab_cnt == limit_vocab_size) {
+									rc = RC(rcVDB, rcBlob, rcConstructing, rcId, rcTooBig);
+								} else {
+									vocab_arr[tmp_id] = dst_offset; /** save offset */
+									data_offset[j]    = dst_offset;
+									rc = KDataBufferResize(&new_data,dst_offset+pm->length[i]);
+									if(rc == 0){
+										memcpy((uint8_t*)new_data.base+dst_offset*elem_sz,src,pm->length[i]*elem_sz);
+										dst_offset += pm->length[i];
+									}
+								}
+							} else {
+								assert(vocab_arr[tmp_id] <= dst_offset);
+								data_offset[j] = vocab_arr[tmp_id]; /** retrieve offset **/
+							}
+						}
+						src +=pm->length[i]*elem_sz;
+						assert(src - (uint8_t*)sblob->data.base <= sblob->data.elem_count * elem_sz);
+					}
+				}
+				if(rc == 0 ){
+					PageMap *new_pm;
+					/*printf("OPTIMIZATION LEVEL REACHED: vocab:%d,rows:%d,data_recs:%d\n",vocab_cnt ,pm->row_count,pm->data_recs);*/
+					rc=PageMapToRandomAccess(&new_pm,pm,data_offset); 
+					if(rc == 0){
+						/** DONE ***/
+						VBlob *vblob;
+						rc=VBlobNew(&vblob, sblob->start_id, sblob->stop_id, NULL);
+						if(rc==0){
+							vblob->pm = new_pm;
+							vblob->pm->optimized = eBlobPageMapOptimizedSucceeded;
+							vblob->data = new_data;
+							VBlobRelease(sblob);
+							*vblobp=vblob;
+							free(data_offset);
+							KBTreeRelease(vocab_key2id);
+							return;
+						}
+						PageMapRelease(new_pm);
+						
+					}
+					KDataBufferWhack(&new_data);
+				} else {
+					/*printf("NO OPTIMIZATION: vocab:%d,rows:%d,data_recs:%d\n",vocab_cnt ,pm->row_count,pm->data_recs);*/
+					KDataBufferWhack(&new_data);
+				}
+				if(data_offset) free(data_offset);
+				if(vocab_key2id) KBTreeRelease  ( vocab_key2id );
+			}
+		}
+	}
+
+}
+
+
 rc_t VBlobSerialize ( const VBlob *self, KDataBuffer *result ) {
     uint64_t sz;
     rc_t rc;
@@ -631,7 +939,7 @@ rc_t VBlobSerialize ( const VBlob *self, KDataBuffer *result ) {
 rc_t VBlobCreateFromData ( struct VBlob **lhs,
                          int64_t start_id, int64_t stop_id,
                          const KDataBuffer *src,
-                         uint32_t elem_bits )
+                         uint32_t elem_bits , PageMapProcessRequest const *pmpr)
 {
     VBlob *y = NULL;
     rc_t rc;
@@ -646,7 +954,7 @@ rc_t VBlobCreateFromData ( struct VBlob **lhs,
     if ((((const uint8_t *)src->base)[0] & 0x80) == 0)
         rc = VBlobCreateFromData_v1(&y, src, start_id, stop_id, elem_bits);
     else
-        rc = VBlobCreateFromData_v2(&y, src, start_id, stop_id, elem_bits);
+        rc = VBlobCreateFromData_v2(&y, src, start_id, stop_id, elem_bits, (PageMapProcessRequest*)pmpr);
 
     if (rc == 0)
         *lhs = y;
@@ -671,17 +979,6 @@ rc_t VBlobCreateFromSingleRow (
         if (rc == 0) {
             rc = KDataBufferSub(src, &y->data, 0, UINT64_MAX);
             if (rc == 0) {
-                switch (byte_order) {
-                default:
-                    break;
-                case vboNative:
-                case vboNone:
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-                    byte_order = vboLittleEndian;
-#else
-                    byte_order = vboBigEndian;
-#endif
-                }
                 y->byte_order = byte_order;
                 *lhs = y;
                 return 0;
@@ -693,7 +990,7 @@ rc_t VBlobCreateFromSingleRow (
 }
 
 bool VBlobIsSingleRow( const struct VBlob *self ) {
-    return self->pm && PageMapFastRowCount(self->pm) == BlobRowCount(self) ? true : false;
+    return (self->pm && self->pm->data_recs==1) ? true : false;
 }
 
 uint32_t VBlobFixedRowLength( const struct VBlob *self ) {
@@ -836,10 +1133,10 @@ rc_t VBlobSubblob( const struct VBlob *self,struct VBlob **sub, int64_t start_id
             
             rc = KDataBufferSub(&self->data, &kd, offset, length);
             if(rc == 0){
-		int64_t	stop_id;
+                int64_t	stop_id;
 
-		if(length > 0) stop_id = start_id + numrep - 1;
-		else           stop_id = start_id; /*** HACK - 0 sized data may be a sign that real data is somewhere else ***/
+                if(length > 0) stop_id = start_id + numrep - 1;
+                else           stop_id = start_id; /*** HACK - 0 sized data may be a sign that real data is somewhere else ***/
 
                 rc = VBlobCreateFromSingleRow(sub, start_id, stop_id, &kd, self->byte_order);
                 KDataBufferWhack(&kd);
@@ -851,3 +1148,401 @@ rc_t VBlobSubblob( const struct VBlob *self,struct VBlob **sub, int64_t start_id
     return rc;
 }
 
+
+LIB_EXPORT rc_t CC VBlobIdRange ( const VBlob *self,
+    int64_t *first, uint64_t *count )
+{
+    if ( self == NULL )
+    {   return RC ( rcVDB, rcBlob, rcAccessing, rcSelf, rcNull ); }
+
+    if ( first != NULL )
+    {   *first = self -> start_id; }
+
+    if ( count != NULL )
+    {   *count = self -> stop_id + 1 - self -> start_id; }
+
+    return 0;
+}
+
+LIB_EXPORT rc_t CC VBlobCellData ( const VBlob *self, int64_t row_id,
+    uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len )
+{
+    uint32_t dummyb;
+    uint32_t dummyr;
+    if ( boff == NULL )
+    {   boff = & dummyb; }
+    if ( row_len == NULL )
+    {   row_len = & dummyr; }
+
+    if ( self == NULL )
+    {   return RC ( rcVDB, rcBlob, rcAccessing, rcSelf, rcNull ); }
+
+    if ( base == NULL )
+    {   return RC ( rcVDB, rcBlob, rcAccessing, rcParam, rcNull ); }
+
+    *base = self -> data . base;
+
+    if ( elem_bits != NULL )
+    {   *elem_bits = self -> data . elem_bits; }
+
+    *row_len = PageMapGetIdxRowInfo ( self -> pm,
+        ( uint32_t ) ( row_id - self -> start_id ), boff );
+
+    return 0;
+}
+
+/* a copy of VCursorRead() */
+LIB_EXPORT rc_t CC VBlobRead ( const VBlob *self, int64_t row_id,
+    uint32_t elem_bits, void *buffer, uint32_t blen, uint32_t *row_len )
+{
+    rc_t rc = 0;
+    const void* base = NULL;
+    uint32_t boff = 0;
+    uint32_t elem_size = 0;
+    uint64_t to_read = 0;
+    uint64_t bsize = 0;
+
+    if ( self == NULL )
+    {   return RC ( rcVDB, rcBlob, rcReading, rcSelf, rcNull ); }
+
+    if ( buffer == NULL || row_len == NULL )
+    {   return RC ( rcVDB, rcBlob, rcReading, rcParam, rcNull ); }
+
+    if ( elem_bits == 0 || ( elem_bits & 7 ) != 0 )
+    {   return RC ( rcVDB, rcCursor, rcReading, rcParam, rcInvalid ); }
+
+    rc = VBlobCellData ( self, row_id, &elem_size, &base, &boff, row_len );
+    if ( rc != 0 )
+    {   return rc; }
+    if ( elem_size < elem_bits && elem_bits % elem_size != 0 )
+    {   return RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent ); }
+    if ( elem_size > elem_bits && elem_size % elem_bits != 0 )
+    {   return RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent ); }
+    if ( * row_len == 0 )
+    {   return 0; }
+    if ( blen == 0 )
+    {   return RC ( rcVDB, rcCursor, rcReading, rcBuffer, rcInsufficient ); }
+
+    to_read = * row_len * elem_size;
+    bsize = blen * elem_bits;
+
+    /* always return the required buffer size */
+    * row_len = ( uint32_t ) ( to_read / elem_bits );
+
+    /* detect buffer too small */
+    if ( to_read > bsize ) {
+        rc = RC ( rcVDB, rcCursor, rcReading, rcBuffer, rcInsufficient );
+        to_read = bsize;
+    }
+
+    /* copy out data up to limit */
+    assert ( boff == 0 );
+    memcpy ( buffer, base, ( size_t ) ( to_read >> 3 ) );
+
+    return rc;
+}
+
+LIB_EXPORT rc_t CC VBlobReadBits ( const VBlob *self, int64_t row_id,
+    uint32_t elem_bits, uint32_t start, void *buffer, uint32_t off,
+    uint32_t blen, uint32_t *num_read, uint32_t *remaining )
+{
+    rc_t rc = 0;
+    const void* base = NULL;
+    uint32_t boff = 0;
+    uint32_t elem_size = 0;
+    uint64_t to_read = 0;
+    uint64_t bsize = 0;
+    uint32_t row_len = 0;
+    uint32_t dummy;
+    if ( remaining == NULL )
+    {   remaining = & dummy; }
+
+    if ( self == NULL )
+    {   return RC ( rcVDB, rcBlob, rcReading, rcSelf, rcNull ); }
+
+    if ( buffer == NULL || num_read == NULL )
+    {   return RC ( rcVDB, rcBlob, rcReading, rcParam, rcNull ); }
+
+    if ( elem_bits == 0 || ( elem_bits & 7 ) != 0  )
+    {   return RC ( rcVDB, rcBlob, rcReading, rcParam, rcInvalid ); }
+
+    rc = VBlobCellData ( self, row_id, &elem_size, &base, &boff, &row_len );
+    if ( rc != 0 )
+    {   return rc; }
+    if ( elem_size < elem_bits && elem_bits % elem_size != 0 )
+    {   return RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent ); }
+    if ( elem_size > elem_bits && elem_size % elem_bits != 0 )
+    {   return RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent ); }
+    if ( row_len == 0 ) {
+        * num_read = * remaining = 0;
+        return 0;
+    }
+    if ( * num_read == 0 )
+    {   return 0; }
+    to_read = row_len * elem_size;
+    bsize = blen * elem_bits;
+
+    if ( blen == 0 ) {
+        * num_read = 0;
+        * remaining = ( uint32_t ) ( to_read / elem_bits );
+        return 0;
+    }
+    bsize = blen * elem_size;
+    if ( to_read <= bsize )
+    {   * remaining = 0; }
+    else {
+        * remaining = (uint32_t)( ( to_read - bsize ) / elem_bits );
+        to_read = bsize;
+    }
+    bitcpy ( buffer, off, base, boff, ( bitsz_t ) to_read );
+    * num_read = ( uint32_t ) ( to_read / elem_bits );
+
+    return rc;
+}
+
+#undef VBlobAddRef
+#undef VBlobRelease
+
+LIB_EXPORT rc_t CC VBlobAddRef ( const VBlob *self )
+{
+    if ( self != NULL )
+        KRefcountAdd(&self->refcount, "VBlob");
+    return 0;
+}
+
+LIB_EXPORT rc_t CC VBlobRelease ( const VBlob *self )
+{
+    rc_t rc = 0;
+
+    if ( self != 0 )
+    {
+        switch ( KRefcountDrop(&self->refcount, "VBlob") )
+        {
+        case krefWhack:
+            return VBlobDestroy ( (VBlob*) self );
+        case krefNegative:
+            rc = RC (rcVDB, rcBlob, rcDestroying, rcBlob, rcExcessive);
+            PLOGERR ( klogInt, (klogInt, rc, "Released a blob $(B) with no more references",
+                      PLOG_P(self)));
+            break;
+        }
+    }
+    return rc;
+}
+
+/*--------------------------------------------------------------------------
+ * VBlobCache
+ */
+typedef struct VBlobCache VBlobCache;
+struct VBlobCache
+{
+    BSTNode bn;
+    DLNode ln;
+    size_t size;
+    const VBlob *blob;
+    uint32_t col_idx;
+};
+
+static
+void CC VBlobCacheWhack ( BSTNode *n, void *ignore )
+{
+    VBlobCache *self = ( VBlobCache* ) n;
+    VBlobRelease ( ( VBlob* ) self -> blob );
+    free ( self );
+}
+
+static
+rc_t VBlobCacheMake ( VBlobCache **bcp, const VBlob *blob, uint32_t col_idx, size_t blob_size )
+{
+    VBlobCache *bc = malloc ( sizeof * bc );
+    if ( bc == NULL )
+        return RC ( rcVDB, rcCursor, rcReading, rcMemory, rcExhausted );
+
+    bc -> size = blob_size;
+    bc -> blob = blob;
+    VBlobAddRef(blob);
+    bc -> col_idx = col_idx;
+    * bcp = bc;
+    return 0;
+}
+typedef struct VBlobCacheKey VBlobCacheKey;
+struct VBlobCacheKey
+{
+    int64_t row_id;
+    uint32_t col_idx;
+};
+
+static
+int CC VBlobCacheCmp ( const void *a, const BSTNode *b )
+{
+    const VBlobCacheKey * key = a;
+    const VBlobCache * node = ( const VBlobCache* ) b;
+
+    if ( key -> col_idx != node -> col_idx )
+        return ( int ) key -> col_idx - ( int ) node -> col_idx;
+
+    if ( key -> row_id < node -> blob -> start_id )
+        return -1;
+    return key -> row_id > node -> blob -> stop_id;
+}
+
+static
+int CC VBlobCacheSort ( const BSTNode *a, const BSTNode *b )
+{
+    const VBlobCache * item = ( const VBlobCache* ) a;
+    const VBlobCache * node = ( const VBlobCache* ) b;
+
+    if ( item -> col_idx != node -> col_idx )
+        return ( int ) item -> col_idx - ( int ) node -> col_idx;
+
+    if ( item -> blob -> stop_id < node -> blob -> start_id )
+        return -1;
+    return item -> blob -> start_id > node -> blob -> stop_id;
+}
+
+struct VBlobMRUCache { /* read-only blob cache */
+    BSTree cache;
+    DLList lru;
+    size_t capacity;
+    size_t contents;
+    /* last blob cache */
+    VBlob *last[LAST_BLOB_CACHE_SIZE]; /** last 4 blob to be cached per given col_idx, limiting col_idx  **/
+};
+
+
+VBlobMRUCache * VBlobMRUCacheMake(uint64_t capacity )
+{
+    VBlobMRUCache *self = NULL;
+    if(capacity > 0){
+	self = malloc(sizeof(*self));
+        if(self){
+		BSTreeInit ( & self -> cache);
+		DLListInit ( & self -> lru );
+		memset(self -> last,0,LAST_BLOB_CACHE_SIZE*sizeof(*self -> last));
+		self->capacity = capacity;
+		self->contents = 0;
+	}
+   }
+   return self;
+}
+
+void VBlobMRUCacheDestroy( VBlobMRUCache *self )
+{
+    if(self){
+	int i;
+	BSTreeWhack ( & self -> cache, VBlobCacheWhack, NULL );
+	DLListInit ( & self -> lru );
+	for(i=0;i<LAST_BLOB_CACHE_SIZE;i++){
+		if(self -> last[i]) {
+		    VBlobRelease(self -> last[i]);
+		    self->last[i] = NULL;
+		}
+	}
+	free(self);
+    }
+}
+
+const VBlob* VBlobMRUCacheFind(const VBlobMRUCache *cself, uint32_t col_idx, int64_t row_id)
+{
+    const VBlob* blob;
+    VBlobCache *bc;
+    VBlobCacheKey bck;
+    VBlobMRUCache *self = (VBlobMRUCache*)cself;
+
+    /* check MRU blob */
+    if(col_idx <= LAST_BLOB_CACHE_SIZE)
+    {
+	blob = self->last[col_idx-1];
+	if(blob && row_id >= blob->start_id && row_id <= blob->stop_id)
+	{
+	    return blob;
+		
+	}
+    }
+
+    /* check cache for entry */
+    bck . row_id = row_id;
+    bck . col_idx = col_idx;
+    bc = ( VBlobCache* ) BSTreeFind ( & self -> cache, & bck, VBlobCacheCmp );
+    if ( bc != NULL )
+    {
+        /* save in MRU */
+        if(col_idx <= LAST_BLOB_CACHE_SIZE)
+        {
+            if(self->last[col_idx-1])
+                VBlobRelease(self->last[col_idx-1]);
+            self->last[col_idx-1] = (VBlob*)bc->blob;
+            if(VBlobAddRef (self->last[col_idx-1])!=0)
+		return NULL;
+        }
+        /* maintain LRU */
+        DLListUnlink  (&self->lru,&bc->ln);
+        DLListPushHead(&self->lru,&bc->ln);
+        /* ask column to read from blob */
+        return bc->blob;
+    }
+    return NULL;
+}
+rc_t VBlobMRUCacheSave(const VBlobMRUCache *cself, uint32_t col_idx, const VBlob *blob)
+{
+    rc_t   rc;
+    size_t blob_size =sizeof(VBlobCache) + sizeof(VBlob);
+    VBlobCache *bc=NULL;
+    VBlobMRUCache *self = (VBlobMRUCache*)cself;
+
+    if(blob->no_cache) return 0;
+
+    blob_size  += KDataBufferBytes(&blob->data);
+    if (blob->pm != NULL) {
+        blob_size += 
+                  KDataBufferBytes(&blob->pm->cstorage)
+                + KDataBufferBytes(&blob->pm->dstorage)
+                + KDataBufferBytes(&blob->pm->istorage);
+    }
+    /** auto-raise capacity for large blob **/
+    if(blob_size > self -> capacity) self -> capacity = blob_size;
+
+    /* now cache the blob */
+    rc = VBlobCacheMake ( & bc, blob, col_idx, blob_size );
+    if ( rc == 0 ) {
+        /* attempt a unique insertion */
+        VBlobCache *existing;
+        rc = BSTreeInsertUnique ( &self -> cache, & bc -> bn, ( BSTNode** ) & existing, VBlobCacheSort );
+        if ( rc != 0 ){
+            VBlobCacheWhack ( & bc -> bn, NULL );
+	    rc = 0;
+        } else {
+            /* remember as last used  **/
+            if(col_idx <= LAST_BLOB_CACHE_SIZE)
+            {
+		if(self->last[col_idx-1])
+			VBlobRelease(self->last[col_idx-1]);
+		self->last[col_idx-1] = (VBlob*)bc->blob;
+		rc = VBlobAddRef (self->last[col_idx-1]);
+		if(rc != 0)
+		   return rc;
+	    }
+            /* perform accounting */
+            self -> contents += blob_size;
+            while ( self -> contents > self -> capacity )
+            {
+                /* get least recently used */
+                DLNode *last = DLListPopTail ( & self -> lru );
+                if ( last == NULL )
+                    break;
+
+                /* drop blob */
+                existing = ( VBlobCache* ) ( ( char* ) last - sizeof existing -> bn );
+
+                BSTreeUnlink ( & self -> cache, & existing -> bn );
+                self -> contents -= existing -> size;
+                VBlobCacheWhack ( & existing -> bn, NULL );
+            }
+
+            /* insert at head of list */
+            DLListPushHead ( & self -> lru, & bc -> ln );
+        }
+    }
+    return 0;
+}
+
diff --git a/libs/vdb/blob.h b/libs/vdb/blob.h
index 28b44e4..860e7c8 100644
--- a/libs/vdb/blob.h
+++ b/libs/vdb/blob.h
@@ -45,13 +45,6 @@ enum VBlobVariant_t {
 };
 
 
-#ifndef VBlobAddRef
-rc_t VBlobAddRef(const VBlob *self);
-#endif
-#ifndef VBlobRelease
-rc_t VBlobRelease(const VBlob *self);
-#endif
-
 /* Write the row lengths for the rows from start_id thru stop_id, inclusive
  */
 rc_t VBlobWritePageMap( VBlob *self, int64_t start_id, int64_t stop_id, const uint32_t row_length[] );
diff --git a/libs/vdb/column-cmn.c b/libs/vdb/column-cmn.c
index 17f96ea..ab7ef52 100644
--- a/libs/vdb/column-cmn.c
+++ b/libs/vdb/column-cmn.c
@@ -226,7 +226,7 @@ rc_t VColumnReadCachedBlob ( const VColumn *self, const VBlob *vblob, int64_t ro
 }
 
 rc_t VColumnReadBlob ( const VColumn *cself, const VBlob **vblobp, int64_t row_id,
-   uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len )
+   uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len, VBlobMRUCacheCursorContext *cctx )
 {
     rc_t rc;
 
@@ -235,7 +235,7 @@ rc_t VColumnReadBlob ( const VColumn *cself, const VBlob **vblobp, int64_t row_i
     else
     {
         VBlob *vblob;
-        rc = VProductionReadBlob ( cself -> in, & vblob, row_id, 1 );
+        rc = VProductionReadBlob ( cself -> in, & vblob, row_id, 1, cctx );
         if ( rc == 0 )
         {
             VColumn *self = ( VColumn* ) cself;
@@ -259,28 +259,32 @@ rc_t VColumnReadBlob ( const VColumn *cself, const VBlob **vblobp, int64_t row_i
 }
 
 rc_t VColumnRead ( const VColumn *cself, int64_t row_id,
-   uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len )
+   uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len,
+   VBlob **vblob)
 {
     rc_t rc;
+    VBlob *dummy = NULL;
+    if (vblob == NULL)
+    {   vblob = &dummy; }
 
     if ( cself -> in == NULL )
         rc = RC ( rcVDB, rcColumn, rcReading, rcColumn, rcNotOpen );
     else
     {
-        VBlob *vblob;
-        rc = VProductionReadBlob ( cself -> in, & vblob, row_id, 1 );
+        rc = VProductionReadBlob ( cself -> in, vblob, row_id, 1, NULL );
         if ( rc == 0 )
         {
             VColumn *self = ( VColumn* ) cself;
-            VColumnReadCachedBlob ( self, vblob, row_id, elem_bits, base, boff, row_len );
+            VColumnReadCachedBlob ( self, *vblob, row_id, elem_bits, base, boff, row_len );
 
 #if USE_KURT
             TRACK_BLOB ( VBlobRelease, self -> cache );
             ( void ) VBlobRelease ( self -> cache );
-            self -> cache = vblob;
+            self -> cache = *vblob;
 #else
-            TRACK_BLOB ( VBlobRelease, vblob );
-            ( void ) VBlobRelease ( vblob );            
+            TRACK_BLOB ( VBlobRelease, *vblob );
+            ( void ) VBlobRelease ( *vblob );
+            *vblob = NULL;
 #endif
         }
     }
diff --git a/libs/vdb/column-priv.h b/libs/vdb/column-priv.h
index b001cbf..5cb10a8 100644
--- a/libs/vdb/column-priv.h
+++ b/libs/vdb/column-priv.h
@@ -63,6 +63,7 @@ struct SColumn;
 struct SExpression;
 struct VProduction;
 struct VBlob;
+struct VBlobMRUCacheCursorContext;
 
 
 /*--------------------------------------------------------------------------
@@ -117,10 +118,11 @@ rc_t VColumnDatatype ( const VColumn *self,
     struct VTypedecl *type, struct VTypedesc *desc );
 
 rc_t VColumnRead ( const VColumn *self, int64_t row_id,
-   uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len );
+   uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len,
+   struct VBlob **vblob );
 
 rc_t VColumnReadBlob ( const VColumn *self, struct VBlob const **blob, int64_t row_id,
-   uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len );
+   uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len, struct VBlobMRUCacheCursorContext *cctx);
 
 rc_t VColumnReadCachedBlob ( const VColumn *self, struct VBlob const *blob, int64_t row_id,
    uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len );
@@ -140,9 +142,6 @@ struct WColumn
     /* half-closed id for page cutoff */
     int64_t cutoff_id;
 
-    /* manager - for mempool */
-    struct VDBManager *mgr;
-
     /* alternate read production */
     struct VProduction *alt;
 
@@ -155,27 +154,30 @@ struct WColumn
     /* output page */
     struct VBlob *page;
 
+    /* default row data */
+    KDataBuffer dflt;
+
     /* accumulators */
-    DLList data, rowmap;
+    KDataBuffer data, rowmap;
 
-    /* buffer offsets */
-    bitsz_t data_off;
-    size_t rowmap_off;
+    /* peak byte size history of data accumulator */
+    size_t data_peak_hist [ 16 ];
+    size_t data_peak;
 
-    /* size to trigger page commit */
-    size_t trigger;
+    /* total committed bits in buffer */
+    bitsz_t bits_in_buffer;
 
-    /* default row data */
-    KDataBuffer dflt;
+    /* number of uncommitted bits in buffer */
+    bitsz_t row_len;
+
+    /* size ( in bytes ) to trigger page commit */
+    size_t trigger;
 
     /* number of committed rows in buffer */
     size_t num_rows;
 
-    /* number of committed elements in buffer */
-    size_t num_elems;
-
-    /* number of uncommitted elements in buffer */
-    size_t row_len;
+    /* peak history index */
+    uint8_t peak_hist_idx;
 
     /* true if there is a default value */
     bool have_dflt;
@@ -183,23 +185,19 @@ struct WColumn
     /* set upon any successful write */
     bool row_written;
 
+    /* set if the last row written was default */
+    bool dflt_last;
+
     /* set upon row commit */
     bool row_committed;
 };
 
 /* WColumnRowMap
- *  NB - size must be an integral power of 2
- *  8, 16, 32 are okay, but not 24.
- *
- *  in particular, sizeof VDBMem.page % sizeof WColumnRowMap == 0 || aaaaah!
  */
 typedef struct WColumnRowMap WColumnRowMap;
 struct WColumnRowMap
 {
-#if _DEBUGGING
     int64_t start_id;
-    int64_t align;
-#endif
     uint64_t len, cnt;
 };
 
@@ -245,6 +243,14 @@ bool CC WColumnRowDefaults ( void *self, void *rc );
  */
 bool CC WColumnCommitRow ( void *self, void *end_id );
 
+/* RepeatRow
+ *  go into the last row entry
+ *  extend the count by count
+ *  data points to this structure
+ */
+typedef struct { int64_t end_id; uint64_t count; } WColumnRepeatRowData;
+void CC WColumnRepeatRow ( void *self, void *data );
+
 /* CloseRow
  *  discards uncommitted data
  *  update state
diff --git a/libs/vdb/cursor-cmn.c b/libs/vdb/cursor-cmn.c
index 2891de6..f42149a 100644
--- a/libs/vdb/cursor-cmn.c
+++ b/libs/vdb/cursor-cmn.c
@@ -45,6 +45,7 @@
 #undef KONST
 #undef SKONST
 #include "blob-priv.h"
+#include "page-map.h"
 
 #include <vdb/cursor.h>
 #include <vdb/table.h>
@@ -62,20 +63,26 @@
 #include <os-native.h>
 #include <sysalloc.h>
 
+#include <kproc/lock.h>
+#include <kproc/cond.h>
+#include <kproc/thread.h>
+
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 #include <ctype.h>
 #include <assert.h>
 
-#if _DEBUGGING
-#include <fmtdef.h>
-#endif
-
 
 #define PERMIT_POST_OPEN_ADD 1
 #define DISABLE_READ_CACHE 0
 
+/* normally false
+   can be set for certain applications using VDBManagerDisablePagemapThread
+*/
+static bool s_disable_pagemap_thread;
+
 
 /*--------------------------------------------------------------------------
  * VCursorCache
@@ -191,77 +198,45 @@ int CC NamedParamNodeComp ( const BSTNode *A, const BSTNode *B )
 
     return StringOrderNoNullCheck ( & a -> name, & b -> name );
 }
-
-
 /*--------------------------------------------------------------------------
- * VBlobCache
+ * LinkedCursorNode
  */
-typedef struct VBlobCache VBlobCache;
-struct VBlobCache
+
+typedef struct LinkedCursorNode LinkedCursorNode;
+struct LinkedCursorNode
 {
-    BSTNode bn;
-    DLNode ln;
-    size_t size;
-    const VBlob *blob;
-    uint32_t col_idx;
+    BSTNode n;
+    char tbl[64];
+    VCursor *curs;
 };
 
 static
-void CC VBlobCacheWhack ( BSTNode *n, void *ignore )
+void CC LinkedCursorNodeWhack ( BSTNode *n, void *ignore )
 {
-    VBlobCache *self = ( VBlobCache* ) n;
-    VBlobRelease ( ( VBlob* ) self -> blob );
+    LinkedCursorNode *self = ( LinkedCursorNode* ) n;
+    VCursorRelease (  self -> curs );
     free ( self );
 }
 
 static
-rc_t VBlobCacheMake ( VBlobCache **bcp, const VBlob *blob, uint32_t col_idx )
+int CC LinkedCursorComp ( const void *item, const BSTNode *n )
 {
-    VBlobCache *bc = malloc ( sizeof * bc );
-    if ( bc == NULL )
-        return RC ( rcVDB, rcCursor, rcReading, rcMemory, rcExhausted );
+    const char *tbl = item;
+    const LinkedCursorNode *node = ( const LinkedCursorNode* ) n;
 
-    bc -> size = BlobBufferBytes ( blob );
-    bc -> blob = blob;
-    bc -> col_idx = col_idx;
-    * bcp = bc;
-    return 0;
+    return strncmp ( tbl, node -> tbl, sizeof(node -> tbl) );
 }
 
-typedef struct VBlobCacheKey VBlobCacheKey;
-struct VBlobCacheKey
-{
-    int64_t row_id;
-    uint32_t col_idx;
-};
-
 static
-int CC VBlobCacheCmp ( const void *a, const BSTNode *b )
+int CC LinkedCursorNodeComp ( const BSTNode *A, const BSTNode *B )
 {
-    const VBlobCacheKey * key = a;
-    const VBlobCache * node = ( const VBlobCache* ) b;
+    const LinkedCursorNode *a = (const LinkedCursorNode *) A;
+    const LinkedCursorNode *b = (const LinkedCursorNode *) B;
 
-    if ( key -> col_idx != node -> col_idx )
-        return ( int ) key -> col_idx - ( int ) node -> col_idx;
-
-    if ( key -> row_id < node -> blob -> start_id )
-        return -1;
-    return key -> row_id > node -> blob -> stop_id;
+    return strncmp ( a -> tbl, b -> tbl,sizeof(a->tbl) );
 }
 
-static
-int CC VBlobCacheSort ( const BSTNode *a, const BSTNode *b )
-{
-    const VBlobCache * item = ( const VBlobCache* ) a;
-    const VBlobCache * node = ( const VBlobCache* ) b;
-
-    if ( item -> col_idx != node -> col_idx )
-        return ( int ) item -> col_idx - ( int ) node -> col_idx;
 
-    if ( item -> blob -> stop_id < node -> blob -> start_id )
-        return -1;
-    return item -> blob -> start_id > node -> blob -> stop_id;
-}
 
 /*--------------------------------------------------------------------------
  * VCursor
@@ -279,14 +254,11 @@ static void CC VCursorVColumnWhack_checked( void *item, void *data )
 rc_t VCursorDestroy ( VCursor *self )
 {
     KRefcountWhack ( & self -> refcount, "VCursor" );
-
-    BSTreeWhack ( & self -> blob_cache, VBlobCacheWhack, NULL );
-    DLListInit ( & self -> blob_lru );
-
+    VBlobMRUCacheDestroy ( self->blob_mru_cache);
     if ( self -> user_whack != NULL )
         ( * self -> user_whack ) ( self -> user );
-
     BSTreeWhack ( & self -> named_params, NamedParamNodeWhack, NULL );
+    BSTreeWhack ( & self -> linked_cursors, LinkedCursorNodeWhack, NULL );
     VCursorCacheWhack ( & self -> col, NULL, NULL );
     VCursorCacheWhack ( & self -> phys, VPhysicalWhack, NULL );
     VCursorCacheWhack ( & self -> prod, NULL, NULL );
@@ -352,7 +324,7 @@ rc_t VCursorMake ( VCursor **cursp, const VTable *tbl )
 
     /* create a structure */
     curs = calloc ( 1, sizeof * curs );
-    if ( tbl == NULL )
+    if ( curs == NULL )
         rc = RC ( rcVDB, rcCursor, rcConstructing, rcMemory, rcExhausted );
     else
     {
@@ -373,9 +345,8 @@ rc_t VCursorMake ( VCursor **cursp, const VTable *tbl )
                 VectorInit ( & curs -> trig, 0, 64 );
                 KRefcountInit ( & curs -> refcount, 1, "VCursor", "make", "vcurs" );
                 curs -> state = vcConstruct;
-#if PERMIT_POST_OPEN_ADD
-                curs -> permit_post_open_add = true;
-#endif
+                curs -> permit_add_column = true;
+		curs -> suspend_triggers  = false;
                 * cursp = curs;
                 return 0;
             }
@@ -493,7 +464,8 @@ rc_t VCursorSupplementStatic ( const KSymTable *tbl, const VCursor *self )
                         rc = VSchemaResolveTypedecl ( self -> schema, & td, typedecl );
                         if ( rc == 0 )
                             rc = VCursorSupplementName ( tbl, self -> stbl, & td, name );
-			rc = 0; /*** don't care if name is not in the schema ***/
+
+                        rc = 0; /*** don't care if name is not in the schema ***/
 		
                     }
 
@@ -533,48 +505,61 @@ rc_t VCursorSupplementSchema ( const VCursor *self )
  *  "capacity" [ IN ] - the maximum bytes to cache on the cursor before
  *  dropping least recently used blobs
  */
+static rc_t VTableCreateCachedCursorReadImpl(const VTable *self, const VCursor **cursp, size_t capacity,bool create_pagemap_thread);
 LIB_EXPORT rc_t CC VTableCreateCachedCursorRead ( const VTable *self,
     const VCursor **cursp, size_t capacity )
 {
+	return VTableCreateCachedCursorReadImpl(self,cursp,capacity,true);
+}
+/**
+*** VTableCreateCursorReadInternal is only visible in vdb and needed for schema resolutions
+****/
+rc_t  VTableCreateCursorReadInternal(const VTable *self, const VCursor **cursp)
+{
+	return VTableCreateCachedCursorReadImpl(self,cursp,0,false);
+}
+static rc_t VTableCreateCachedCursorReadImpl ( const VTable *self,
+    const VCursor **cursp, size_t capacity, bool create_pagemap_thread  )
+{
     rc_t rc;
-
 #if DISABLE_READ_CACHE
     capacity = 0;
 #endif
-
     if ( cursp == NULL )
         rc = RC ( rcVDB, rcTable, rcOpening, rcParam, rcNull );
-    else
-    {
+    else {
         if ( self == NULL )
             rc = RC ( rcVDB, rcTable, rcOpening, rcSelf, rcNull );
-        else
-        {
+        else {
             VCursor *curs;
-
 #if LAZY_OPEN_COL_NODE
             if ( self -> col_node == NULL )
                 KMetadataOpenNodeRead ( self -> meta, & ( ( VTable* ) self ) -> col_node, "col" );
 #endif
             rc = VCursorMake ( & curs, self );
-            if ( rc == 0 )
-            {
-                curs -> blob_cache_capacity = capacity;
+            if ( rc == 0 ) {
+                curs -> blob_mru_cache = VBlobMRUCacheMake(capacity);
                 curs -> read_only = true;
                 rc = VCursorSupplementSchema ( curs );
+               
+#if 0  
+                if(create_pagemap_thread && capacity > 0 && rc == 0 )
+                    rc = VCursorLaunchPagemapThread ( curs );
+#endif
                 if ( rc == 0 )
                 {
+                    if(capacity > 0)
+                        curs->launch_cnt = 5;
+                    else
+                        curs->launch_cnt=200;
                     * cursp = curs;
                     return 0;
                 }
-
                 VCursorRelease ( curs );
             }
         }
-
         * cursp = NULL;
     }
-
     return rc;
 }
 
@@ -614,6 +599,25 @@ LIB_EXPORT rc_t CC VCursorPermitPostOpenAdd ( const VCursor *cself )
 
     return rc;
 }
+/*  SuspendTriggers
+ *  blocks resolution of schema-based triggers
+ *  
+ */
+LIB_EXPORT rc_t CC VCursorSuspendTriggers ( const VCursor *cself )
+{
+    rc_t rc;
+    VCursor *self = ( VCursor* ) cself;
+
+    if ( self == NULL )
+        rc = RC ( rcVDB, rcCursor, rcUpdating, rcSelf, rcNull );
+    else
+    {
+        self -> suspend_triggers = true;
+        rc = 0;
+    }
+
+    return rc;
+}
 
 
 /* AddSColumn
@@ -749,7 +753,7 @@ LIB_EXPORT rc_t CC VCursorVAddColumn ( const VCursor *cself,
             rc = RC ( rcVDB, rcCursor, rcUpdating, rcName, rcEmpty );
         else if ( self -> state == vcFailed )
             rc = RC ( rcVDB, rcCursor, rcUpdating, rcCursor, rcInvalid );
-        else if ( self -> state != vcConstruct && ! self -> permit_post_open_add )
+        else if ( self -> state != vcConstruct && ! self -> permit_add_column )
             rc = RC ( rcVDB, rcCursor, rcUpdating, rcCursor, rcLocked );
         else
         {
@@ -764,7 +768,7 @@ LIB_EXPORT rc_t CC VCursorVAddColumn ( const VCursor *cself,
                     return rc;
             }
 
-            if ( ! self -> permit_post_open_add )
+            if ( ! self -> permit_add_column )
             {
                 PLOGERR ( klogErr, ( klogErr, rc, "failed to add column '$(spec)' to cursor",
                                      "spec=%s", colspec ));
@@ -985,21 +989,24 @@ struct VCursorIdRangeData
 static
 bool CC column_id_range ( void *item, void *data )
 {
-    int64_t first, last;
-    VCursorIdRangeData *pb = data;
+    if ( ( size_t ) item > 8 )
+    {
+        int64_t first, last;
+        VCursorIdRangeData *pb = data;
 
-    rc_t rc = VColumnIdRange ( ( const void* ) item, & first, & last );
+        rc_t rc = VColumnIdRange ( ( const void* ) item, & first, & last );
 
-    if ( GetRCState ( rc ) == rcEmpty )
-        return false;
+        if ( GetRCState ( rc ) == rcEmpty )
+            return false;
 
-    if ( ( pb -> rc = rc ) != 0 )
-        return true;
+        if ( ( pb -> rc = rc ) != 0 )
+            return true;
 
-    if ( first < pb -> first )
-        pb -> first = first;
-    if ( last > pb -> last )
-        pb -> last = last;
+        if ( first < pb -> first )
+            pb -> first = first;
+        if ( last > pb -> last )
+            pb -> last = last;
+    }
 
     return false;
 }
@@ -1119,54 +1126,58 @@ struct VProdResolveData
 static
 bool CC VCursorResolveColumn ( void *item, void *data )
 {
-    void *ignore;
-    VCursor *self;
+    if ( item != NULL )
+    {
+        void *ignore;
+        VCursor *self;
 
-    VColumn *col = item;
-    VProdResolveData *pb = data;
-    SColumn *scol = ( SColumn* ) col -> scol;
+        VColumn *col = item;
+        VProdResolveData *pb = data;
+        SColumn *scol = ( SColumn* ) col -> scol;
 
-    VProduction *src = NULL;
-    pb -> rc = VProdResolveColumnRoot ( & pb -> pr, & src, scol );
-    if ( pb -> rc == 0 )
-    {
-        if ( src > FAILED_PRODUCTION )
+        VProduction *src = NULL;
+        pb -> rc = VProdResolveColumnRoot ( & pb -> pr, & src, scol );
+        if ( pb -> rc == 0 )
         {
-            /* repair for incomplete implicit column decl */
-            if ( scol -> td . type_id == 0 )
-                scol -> td = src -> fd . td;
+            if ( src > FAILED_PRODUCTION )
+            {
+                /* repair for incomplete implicit column decl */
+                if ( scol -> td . type_id == 0 )
+                    scol -> td = src -> fd . td;
 
-            return false;
-        }
+                return false;
+            }
 
-        pb -> rc = RC ( rcVDB, rcCursor, rcOpening, rcColumn, rcUndefined );
-    }
+            pb -> rc = RC ( rcVDB, rcCursor, rcOpening, rcColumn, rcUndefined );
+        }
 
-    /* check for tolerance */
-    self = pb -> pr . curs;
-    if ( ! pb -> pr . ignore_column_errors )
-    {
-        if ( ! self -> permit_post_open_add )
+        /* check for tolerance */
+        self = pb -> pr . curs;
+        if ( ! pb -> pr . ignore_column_errors )
         {
-            PLOGERR ( klogErr, ( klogErr, pb -> rc, "failed to resolve column '$(name)' idx '$(idx)'",
-                       "name=%.*s,idx=%u"
-                       , ( int ) scol -> name -> name . size
-                       , scol -> name -> name . addr
-                       , col -> ord ));
+            if ( ! self -> permit_post_open_add )
+            {
+                PLOGERR ( klogErr, ( klogErr, pb -> rc, "failed to resolve column '$(name)' idx '$(idx)'",
+                                     "name=%.*s,idx=%u"
+                                     , ( int ) scol -> name -> name . size
+                                     , scol -> name -> name . addr
+                                     , col -> ord ));
+            }
+
+            return true;
         }
 
-        return true;
-    }
+        /* remove from row and cache */
+        VectorSwap ( & self -> row, col -> ord, NULL, & ignore );
+        VCursorCacheSwap ( & self -> col, & scol -> cid, NULL, & ignore );
 
-    /* remove from row and cache */
-    VectorSwap ( & self -> row, col -> ord, NULL, & ignore );
-    VCursorCacheSwap ( & self -> col, & scol -> cid, NULL, & ignore );
+        /* dump the VColumn */
+        VColumnWhack ( col, NULL );
 
-    /* dump the VColumn */
-    VColumnWhack ( col, NULL );
+        /* return no-error */
+        pb -> rc = 0;
+    }
 
-    /* return no-error */
-    pb -> rc = 0;
     return false;
 }
 
@@ -1360,84 +1371,152 @@ rc_t VCursorCloseRowRead ( VCursor *self )
  */
 static
 rc_t VCursorReadColumnDirectInt ( const VCursor *cself, int64_t row_id, uint32_t col_idx,
-    uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len )
+    uint32_t *elem_bits, const void **base, uint32_t *boff, uint32_t *row_len,
+    const VBlob **rslt )
 {
-    rc_t rc;
-    VBlobCache *bc;
-    VBlobCacheKey bck;
-    const VBlob *blob;
+    rc_t rc,rc_cache=0;
     const VColumn *col;
-    size_t sz_cache_overhead=sizeof(VBlobCache) + sizeof(VBlob);
+    const VBlob *blob;
 
     col = ( const void* ) VectorGet ( & cself -> row, col_idx );
     if ( col == NULL )
         return RC ( rcVDB, rcCursor, rcReading, rcColumn, rcInvalid );
 
     /* 2.0 behavior if not caching */
-    if ( cself -> blob_cache_capacity == 0 )
-        return VColumnRead ( col, row_id, elem_bits, base, boff, row_len );
-
-    /* check cache for entry */
-    bck . row_id = row_id;
-    bck . col_idx = col_idx;
-    bc = ( VBlobCache* ) BSTreeFind ( & cself -> blob_cache, & bck, VBlobCacheCmp );
-    if ( bc != NULL )
-    {
+    if ( cself -> blob_mru_cache == NULL )
+        return VColumnRead ( col, row_id, elem_bits, base, boff, row_len, (VBlob**) rslt );
+
+    /* check MRU blob */
+    blob = VBlobMRUCacheFind(cself->blob_mru_cache,col_idx,row_id);
+    if(blob){
         /* ask column to read from blob */
-        return VColumnReadCachedBlob ( col, bc -> blob, bck . row_id, elem_bits, base, boff, row_len );
+	assert(row_id >= blob->start_id && row_id <= blob->stop_id);
+        return VColumnReadCachedBlob ( col, blob, row_id, elem_bits, base, boff, row_len);
     }
-
-    /* ask column to produce a blob to be cached */
-    rc = VColumnReadBlob ( col, & blob, bck . row_id, elem_bits, base, boff, row_len );
-    if ( rc != 0 || blob == NULL )
+    { /* ask column to produce a blob to be cached */
+	VBlobMRUCacheCursorContext cctx;
+	cctx.cache=cself -> blob_mru_cache;
+	cctx.col_idx = col_idx;
+	rc = VColumnReadBlob(col,&blob,row_id,elem_bits,base,boff,row_len,&cctx);
+    }
+    if ( rc != 0 || blob == NULL ){
+	if(rslt) *rslt = NULL;
         return rc;
-
-    if(   blob -> no_cache 
-       || BlobBufferBytes(blob) <= 128 /*** blob overhead is ~ 200 overhead ****/
-       || BlobBufferBytes(blob) > cself->blob_cache_capacity ){
-	VBlobRelease ( ( VBlob* ) blob );
-	return 0;
     }
+    if(blob->stop_id > blob->start_id + 4)
+	    rc_cache=VBlobMRUCacheSave(cself->blob_mru_cache, col_idx, blob);
+    if(rslt==NULL){ /** user does not care about the blob ***/
+	if( rc_cache == 0){
+		VBlobRelease((VBlob*)blob);
+	} /** else the memory will leak **/
+    } else {
+	*rslt=blob;
+    }
+    return 0;
+}
 
-    /* now cache the blob */
-    rc = VBlobCacheMake ( & bc, blob, col_idx );
-    if ( rc != 0 )
-        VBlobRelease ( ( VBlob* ) blob );
+/* GetBlob
+ *  retrieve a blob of data containing the current row id
+ * GetBlobDirect
+ *  retrieve a blob of data containing the requested row id
+ *
+ *  "blob" [ OUT ] - return parameter for a new reference
+ *  to VBlob containing requested cell. NB - must be released
+ *  via VBlobRelease when no longer needed.
+ *
+ *  "row_id" [ IN ] - allows ReadDirect random access to any cell
+ *  in column
+ *
+ *  "col_idx" [ IN ] - index of column to be read, returned by "AddColumn"
+ */
+LIB_EXPORT rc_t CC VCursorGetBlob ( const VCursor *self,
+    const VBlob **blob, uint32_t col_idx )
+{
+    rc_t rc;
+
+    if ( blob == NULL )
+        rc = RC ( rcVDB, rcCursor, rcAccessing, rcParam, rcNull );
     else
     {
-        /* mutable cache object */
-        VCursor *self = ( VCursor* ) cself;
-
-        /* attempt an unique insertion */
-        VBlobCache *existing;
-        rc = BSTreeInsertUnique ( & self -> blob_cache,
-            & bc -> bn, ( BSTNode** ) & existing, VBlobCacheSort );
-        if ( rc != 0 )
-            VBlobCacheWhack ( & bc -> bn, NULL );
+        if ( self == NULL )
+            rc = RC ( rcVDB, rcCursor, rcAccessing, rcSelf, rcNull );
+        else if ( ! self -> read_only )
+            rc = RC ( rcVDB, rcCursor, rcReading, rcCursor, rcWriteonly );
         else
         {
-            /* perform accounting */
-            self -> blob_cache_contents += bc -> size + sz_cache_overhead;
-            while ( self -> blob_cache_contents > self -> blob_cache_capacity )
-            {
-                /* get least recently used */
-                DLNode *last = DLListPopTail ( & self -> blob_lru );
-                if ( last == NULL )
-                    break;
+            const void *base;
+            uint32_t elem_bits, boff, row_len;
 
-                /* drop blob */
-                existing = ( VBlobCache* ) ( ( char* ) last - sizeof existing -> bn );
-                BSTreeUnlink ( & self -> blob_cache, & existing -> bn );
-                self -> blob_cache_contents -= existing -> size + sz_cache_overhead;
-                VBlobCacheWhack ( & existing -> bn, NULL );
+            switch ( self -> state )
+            {
+            case vcConstruct:
+                rc = RC ( rcVDB, rcCursor, rcReading, rcCursor, rcNotOpen );
+                break;
+            case vcReady:
+                rc = RC ( rcVDB, rcCursor, rcReading, rcRow, rcNotOpen );
+                break;
+            case vcRowOpen:
+                rc = VCursorReadColumnDirectInt
+                    ( self, self -> row_id, col_idx, &elem_bits, &base, &boff, &row_len, blob );
+                if ( rc == 0 )
+                {
+                    rc = VBlobAddRef ( ( VBlob* ) *blob );
+                    if ( rc == 0 )
+                        return 0;
+                }
+                break;
+            default:
+                rc = RC ( rcVDB, rcCursor, rcReading, rcCursor, rcInvalid );
             }
-
-            /* insert at head of list */
-            DLListPushHead ( & self -> blob_lru, & bc -> ln );
         }
+
+        * blob = NULL;
     }
+    return rc;
+}
 
-    return 0;
+LIB_EXPORT rc_t CC VCursorGetBlobDirect ( const VCursor *self,
+    const VBlob **blob, int64_t row_id, uint32_t col_idx )
+{
+    rc_t rc;
+
+    if ( blob == NULL )
+        rc = RC ( rcVDB, rcCursor, rcAccessing, rcParam, rcNull );
+    else
+    {
+        if ( self == NULL )
+            rc = RC ( rcVDB, rcCursor, rcAccessing, rcSelf, rcNull );
+        else if ( ! self -> read_only )
+            rc = RC ( rcVDB, rcCursor, rcReading, rcCursor, rcWriteonly );
+        else
+        {
+            const void *base;
+            uint32_t elem_bits, boff, row_len;
+
+            switch ( self -> state )
+            {
+            case vcConstruct:
+                rc = RC ( rcVDB, rcCursor, rcReading, rcCursor, rcNotOpen );
+                break;
+            case vcReady:
+            case vcRowOpen:
+                rc = VCursorReadColumnDirectInt
+                    ( self, row_id, col_idx, &elem_bits, &base, &boff, &row_len, blob );
+                if ( rc == 0 )
+                {
+                    rc = VBlobAddRef ( ( VBlob* ) *blob );
+                    if ( rc == 0 )
+                        return 0;
+                }
+                break;
+            default:
+                rc = RC ( rcVDB, rcCursor, rcReading, rcCursor, rcInvalid );
+            }
+        }
+
+        * blob = NULL;
+    }
+    return rc;
 }
 
 static
@@ -1458,7 +1537,8 @@ rc_t VCursorReadColumnDirect ( const VCursor *self, int64_t row_id, uint32_t col
         return RC ( rcVDB, rcCursor, rcReading, rcCursor, rcInvalid );
     }
 
-    return VCursorReadColumnDirectInt ( self, row_id, col_idx, elem_bits, base, boff, row_len );
+    return VCursorReadColumnDirectInt
+        ( self, row_id, col_idx, elem_bits, base, boff, row_len, NULL );
 }
 
 
@@ -1469,17 +1549,32 @@ rc_t VCursorReadColumn ( const VCursor *self, uint32_t col_idx,
     if ( ! self -> read_only )
         return RC ( rcVDB, rcCursor, rcReading, rcCursor, rcWriteonly );
 
-    if ( self -> state != vcRowOpen ) switch ( self -> state )
+    switch ( self -> state )
     {
     case vcConstruct:
         return RC ( rcVDB, rcCursor, rcReading, rcCursor, rcNotOpen );
     case vcReady:
         return RC ( rcVDB, rcCursor, rcReading, rcRow, rcNotOpen );
+    case vcRowOpen:
+        break;
     default:
         return RC ( rcVDB, rcCursor, rcReading, rcCursor, rcInvalid );
     }
 
-    return VCursorReadColumnDirectInt ( self, self -> row_id, col_idx, elem_bits, base, boff, row_len );
+    return VCursorReadColumnDirectInt
+        ( self, self -> row_id, col_idx, elem_bits, base, boff, row_len, NULL );
+}
+
+static __inline__
+bool bad_elem_bits ( uint32_t elem_size, uint32_t elem_bits )
+{
+    if ( elem_size != elem_bits )
+    {
+        if ( elem_size < elem_bits && elem_bits % elem_size != 0 )
+            return true;
+        return ( elem_size % elem_bits != 0 );
+    }
+    return false;
 }
 
 LIB_EXPORT rc_t CC VCursorRead ( const VCursor *self, uint32_t col_idx,
@@ -1502,9 +1597,7 @@ LIB_EXPORT rc_t CC VCursorRead ( const VCursor *self, uint32_t col_idx,
                 & base, & boff, row_len );
             if ( rc == 0 )
             {
-                if ( elem_size < elem_bits && elem_bits % elem_size != 0 )
-                    rc = RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent );
-                else if ( elem_size > elem_bits && elem_size % elem_bits != 0 )
+                if ( bad_elem_bits ( elem_size, elem_bits ) )
                     rc = RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent );
                 else if ( * row_len != 0 )
                 {
@@ -1563,9 +1656,7 @@ LIB_EXPORT rc_t CC VCursorReadDirect ( const VCursor *self, int64_t row_id, uint
                 & elem_size, & base, & boff, row_len );
             if ( rc == 0 )
             {
-                if ( elem_size < elem_bits && elem_bits % elem_size != 0 )
-                    rc = RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent );
-                else if ( elem_size > elem_bits && elem_size % elem_bits != 0 )
+                if ( bad_elem_bits ( elem_size, elem_bits ) )
                     rc = RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent );
                 else if ( * row_len != 0 )
                 {
@@ -1654,13 +1745,13 @@ LIB_EXPORT rc_t CC VCursorReadBits ( const VCursor *self, uint32_t col_idx,
                 & base, & boff, num_read );
             if ( rc == 0 )
             {
-                if ( elem_size < elem_bits && elem_bits % elem_size != 0 )
-                    rc = RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent );
-                else if ( elem_size > elem_bits && elem_size % elem_bits != 0 )
+                if ( bad_elem_bits ( elem_size, elem_bits ) )
                     rc = RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent );
                 else if ( * num_read != 0 )
                 {
                     uint64_t to_read = * num_read * elem_size;
+                    uint64_t doff = start * elem_bits;
+                    to_read = to_read > doff ? to_read - doff : 0;
                     if ( blen == 0 )
                     {
                         * num_read = 0;
@@ -1680,7 +1771,7 @@ LIB_EXPORT rc_t CC VCursorReadBits ( const VCursor *self, uint32_t col_idx,
                             * remaining = (uint32_t)( ( to_read - bsize ) / elem_bits );
                             to_read = bsize;
                         }
-                        bitcpy ( buffer, off, base, boff, ( bitsz_t ) to_read );
+                        bitcpy ( buffer, off, base, boff + doff, ( bitsz_t ) to_read );
                         * num_read = ( uint32_t ) ( to_read / elem_bits );
                         return 0;
                     }
@@ -1721,13 +1812,13 @@ LIB_EXPORT rc_t CC VCursorReadBitsDirect ( const VCursor *self, int64_t row_id,
                 & elem_size, & base, & boff, num_read );
             if ( rc == 0 )
             {
-                if ( elem_size < elem_bits && elem_bits % elem_size != 0 )
-                    rc = RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent );
-                else if ( elem_size > elem_bits && elem_size % elem_bits != 0 )
+                if ( bad_elem_bits ( elem_size, elem_bits ) )
                     rc = RC ( rcVDB, rcCursor, rcReading, rcType, rcInconsistent );
                 else if ( * num_read != 0 )
                 {
                     uint64_t to_read = * num_read * elem_size;
+                    uint64_t doff = start * elem_bits;
+                    to_read = to_read > doff ? to_read - doff : 0;
                     if ( blen == 0 )
                     {
                         * num_read = 0;
@@ -1747,7 +1838,7 @@ LIB_EXPORT rc_t CC VCursorReadBitsDirect ( const VCursor *self, int64_t row_id,
                             * remaining = (uint32_t)( ( to_read - bsize ) / elem_bits );
                             to_read = bsize;
                         }
-                        bitcpy ( buffer, off, base, boff, ( bitsz_t ) to_read );
+                        bitcpy ( buffer, off, base, boff + doff, ( bitsz_t ) to_read );
                         * num_read = ( uint32_t ) ( to_read / elem_bits );
                         return 0;
                     }
@@ -2002,6 +2093,51 @@ LIB_EXPORT rc_t CC VCursorSetUserData ( const VCursor *cself,
     return 0;
 }
 
+LIB_EXPORT rc_t CC VCursorLinkedCursorGet(const VCursor *cself,const char *tbl,VCursor const **curs)
+{
+    LinkedCursorNode *node;
+    VCursor *self = (VCursor *)cself;
+
+    if(cself == NULL)
+        return RC(rcVDB, rcCursor, rcAccessing, rcSelf, rcNull);
+    if(tbl == NULL)
+        return RC(rcVDB, rcCursor, rcAccessing, rcName, rcNull);
+    if(tbl[0] == '\0')
+        return RC(rcVDB, rcCursor, rcAccessing, rcName, rcEmpty);
+    node = (LinkedCursorNode *)BSTreeFind(&self->linked_cursors, tbl, LinkedCursorComp);
+    if (node == NULL)
+        return RC(rcVDB, rcCursor, rcAccessing, rcName, rcNotFound);
+
+    *curs = node->curs;
+    return 0;
+}
+LIB_EXPORT rc_t CC VCursorLinkedCursorSet(const VCursor *cself,const char *tbl,VCursor const *curs)
+{
+    LinkedCursorNode *node;
+    VCursor *self = (VCursor *)cself;
+    rc_t rc;
+
+    if(cself == NULL)
+        return RC(rcVDB, rcCursor, rcAccessing, rcSelf, rcNull);
+    if(tbl == NULL)
+        return RC(rcVDB, rcCursor, rcAccessing, rcName, rcNull);
+    if(tbl[0] == '\0')
+        return RC(rcVDB, rcCursor, rcAccessing, rcName, rcEmpty);
+
+    node = malloc(sizeof(*node));
+    if (node == NULL)
+            return RC(rcVDB, rcCursor, rcAccessing, rcMemory, rcExhausted);
+    strncpy(node->tbl,tbl,sizeof(node->tbl));
+    node->curs=(VCursor*)curs;
+    rc = BSTreeInsertUnique(&self->linked_cursors, (BSTNode *)node, NULL, LinkedCursorNodeComp);
+    if (rc)
+       free(node); 
+    else 
+	VCursorAddRef(curs);
+    return rc;
+}
+
+
 /* private */
 LIB_EXPORT rc_t CC VCursorParamsGet( struct VCursorParams const *cself,
     const char *Name, KDataBuffer **value )
@@ -2144,3 +2280,125 @@ LIB_EXPORT struct VSchema const * CC VCursorGetSchema ( struct VCursor const *se
 {
     return self ? self->schema : NULL;
 }
+
+
+static rc_t run_pagemap_thread ( const KThread *t, void *data )
+{
+    rc_t rc;
+    VCursor *self = data;
+    /* acquire lock */
+    MTCURSOR_DBG (( "run_pagemap_thread: acquiring lock\n" ));
+    while((rc = KLockAcquire ( self -> pmpr.lock ))==0){
+CHECK_AGAIN:
+	switch(self->pmpr.state){
+	 case ePMPR_STATE_NONE: 		/* wait for new request */
+	 case ePMPR_STATE_SERIALIZE_DONE: 	/* wait for result pickup **/
+	 case ePMPR_STATE_DESERIALIZE_DONE:	/* wait for result pickup **/
+		MTCURSOR_DBG (( "run_pagemap_thread: waiting for new request\n" ));
+		rc = KConditionWait ( self -> pmpr.cond, self -> pmpr.lock );
+		goto CHECK_AGAIN;
+	 case ePMPR_STATE_EXIT: /** exit requested ***/
+		MTCURSOR_DBG (( "run_pagemap_thread: exit by request\n" ));
+		KLockUnlock(self -> pmpr.lock);
+		return 0;
+	 case ePMPR_STATE_DESERIALIZE_REQUESTED:
+		MTCURSOR_DBG (( "run_pagemap_thread: request to deserialize\n" ));
+		self->pmpr.rc = PageMapDeserialize(&self->pmpr.pm,self->pmpr.data.base,self->pmpr.data.elem_count,self->pmpr.row_count);
+		if(self->pmpr.rc == 0){
+			self->pmpr.rc=PageMapExpandFull(self->pmpr.pm);
+			/*self->pmpr.rc=PageMapExpand(self->pmpr.pm,self->pmpr.row_count<2048?self->pmpr.row_count-1:2048);*/
+			assert(self->pmpr.rc == 0);
+		}
+		self->pmpr.state = ePMPR_STATE_DESERIALIZE_DONE;
+		/*fprintf(stderr,"Pagemap %p Done R:%6d|DR:%d|LR:%d\n",self->pmpr.lock, self->pmpr.pm->row_count,self->pmpr.pm->data_recs,self->pmpr.pm->leng_recs);*/
+		KLockUnlock(self -> pmpr.lock);
+		KConditionSignal ( self -> pmpr.cond );
+		break;
+	 case ePMPR_STATE_SERIALIZE_REQUESTED:
+		MTCURSOR_DBG (( "run_pagemap_thread: request to serialize\n" ));
+		self->pmpr.rc = PageMapSerialize(self->pmpr.pm,&self->pmpr.data,0,&self->pmpr.elem_count);
+		self->pmpr.state = ePMPR_STATE_SERIALIZE_DONE;
+		KLockUnlock(self -> pmpr.lock);
+		KConditionSignal ( self -> pmpr.cond );
+		break;
+	 default:
+		assert(0);
+		KLockUnlock(self -> pmpr.lock);
+		return RC(rcVDB, rcPagemap, rcConverting, rcParam, rcInvalid );
+	 
+	}
+    }
+    MTCURSOR_DBG (( "run_pagemap_thread: exit\n" ));
+    return rc;
+}
+
+rc_t VCursorLaunchPagemapThread(VCursor *curs)
+{
+	rc_t rc;
+
+    assert ( curs != NULL );
+	curs -> pagemap_thread = NULL; /** if fails - will not use **/
+
+    if ( s_disable_pagemap_thread )
+        return RC ( rcVDB, rcCursor, rcExecuting, rcThread, rcNotAvailable );
+
+	rc = KLockMake ( & curs -> pmpr.lock );
+	if(rc == 0)
+    {
+		rc = KConditionMake ( & curs -> pmpr.cond );
+        if(rc == 0)
+        {
+            rc = KThreadMake ( & curs -> pagemap_thread, run_pagemap_thread, curs );
+            if ( rc == 0 )
+                return 0;
+
+            KConditionRelease ( curs -> pmpr . cond );
+            curs -> pmpr . cond = NULL;
+        }
+
+        KLockRelease ( curs -> pmpr . lock );
+        curs -> pmpr . lock = NULL;
+    }
+
+	return rc;
+}
+
+rc_t VCursorTerminatePagemapThread(VCursor *self)
+{
+	rc_t rc=0;
+
+    assert ( self != NULL );
+
+	if(self -> pagemap_thread != NULL)
+    {
+		rc = KLockAcquire ( self -> pmpr.lock );
+		if ( rc == 0 )
+        {
+			self -> pmpr.state = ePMPR_STATE_EXIT;
+			KConditionSignal ( self -> pmpr.cond );
+			KLockUnlock ( self -> pmpr.lock );
+		}
+		KThreadWait ( self -> pagemap_thread, NULL );
+	}
+
+	KThreadRelease ( self -> pagemap_thread );
+	KConditionRelease ( self -> pmpr.cond );
+	KLockRelease ( self -> pmpr.lock );
+
+    self -> pagemap_thread = NULL;
+    self -> pmpr . cond = NULL;
+    self -> pmpr . lock = NULL;
+
+	return rc;
+}
+
+/* DisablePagemapThread
+ *  this can cause difficulties for some clients
+ */
+LIB_EXPORT rc_t CC VDBManagerDisablePagemapThread ( struct VDBManager const *self )
+{
+    if ( self == NULL )
+        return RC ( rcVDB, rcMgr, rcUpdating, rcSelf, rcNull );
+    s_disable_pagemap_thread = true;
+    return 0;
+}
diff --git a/libs/vdb/cursor-priv.h b/libs/vdb/cursor-priv.h
index b0e3da8..ec91798 100644
--- a/libs/vdb/cursor-priv.h
+++ b/libs/vdb/cursor-priv.h
@@ -55,6 +55,11 @@
 extern "C" {
 #endif
 
+#include "blob-priv.h"
+
+#define MTCURSOR_DBG( msg ) DBGMSG ( DBG_VDB, DBG_FLAG ( DBG_VDB_MTCURSOR ), msg )
+
+
 
 #define VCURSOR_WRITE_MODES_SUPPORTED 0
 
@@ -71,6 +76,7 @@ extern "C" {
 struct KLock;
 struct KCondition;
 struct KThread;
+struct KNamelist;
 struct KDlset;
 struct VTable;
 struct VCtxId;
@@ -141,6 +147,7 @@ enum
     vfExit
 };
 
+
 struct VCursor
 {
     /* row id */
@@ -160,22 +167,26 @@ struct VCursor
     struct STable SKONST *stbl;
 
     /* background flush thread objects */
+    int64_t   launch_cnt;
     struct KThread *flush_thread;
     struct KLock *flush_lock;
     struct KCondition *flush_cond;
 
+    /* background pagemap conversion objects */
+    struct KThread *pagemap_thread;
+    PageMapProcessRequest pmpr;
+
     /* user data */
     void *user;
     void ( CC * user_whack ) ( void *data );
 
     /* external named cursor parameters */    
     BSTree named_params;
+    /* linked cursors */
+    BSTree linked_cursors;
 
     /* read-only blob cache */
-    BSTree blob_cache;
-    DLList blob_lru;
-    size_t blob_cache_capacity;
-    size_t blob_cache_contents;
+    VBlobMRUCache *blob_mru_cache;
 
     /* external row of VColumn* by ord ( owned ) */
     Vector row;
@@ -185,6 +196,7 @@ struct VCursor
 
     /* physical columns by cid ( owned ) */
     VCursorCache phys;
+    uint32_t	phys_cnt;
 
     /* productions by cid ( not-owned ) */
     VCursorCache prod;
@@ -208,7 +220,10 @@ struct VCursor
     bool read_only;
 
     /* support for sradb-v1 API */
+    bool permit_add_column;
     bool permit_post_open_add;
+    /* support suspension of schema-declared triggers **/
+    bool suspend_triggers;
 };
 
 
@@ -216,6 +231,8 @@ struct VCursor
  */
 rc_t VCursorMake ( struct VCursor **cursp, struct VTable const *tbl );
 
+rc_t VTableCreateCursorWriteInt ( struct VTable *self, struct VCursor **cursp, KCreateMode mode, bool create_thread );
+
 /* Whack
  * Destroy
  */
@@ -245,6 +262,11 @@ rc_t VCursorSetRowIdRead ( struct VCursor *self, int64_t row_id );
 /* Open
  */
 rc_t VCursorOpenRead ( struct VCursor *self, struct KDlset const *libs );
+/**
+*** VTableCreateCursorReadInternal is only visible in vdb and needed for schema resolutions
+****/
+rc_t  VTableCreateCursorReadInternal(const struct VTable *self, const struct VCursor **cursp);
+
 
 /* ListReadableColumns
  *  performs an insert of '*' to cursor
@@ -261,6 +283,7 @@ rc_t VCursorListReadableColumns ( struct VCursor *self, BSTree *columns );
  *  populates BTree with VColumnRef objects
  */
 rc_t VCursorListWritableColumns ( struct VCursor *self, BSTree *columns );
+rc_t VCursorListSeededWritableColumns ( struct VCursor *self, BSTree *columns, struct KNamelist const *seed );
 
 /* PostOpenAdd
  *  handle opening of a column after the cursor is opened
@@ -275,6 +298,11 @@ rc_t VCursorOpenRowRead ( struct VCursor *self );
 rc_t VCursorCloseRowRead ( struct VCursor *self );
 
 
+/** pagemap supporting thread **/
+rc_t VCursorLaunchPagemapThread(struct VCursor *self);
+rc_t VCursorTerminatePagemapThread(struct VCursor *self);
+
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/libs/vdb/cursor.c b/libs/vdb/cursor.c
index 6fd8525..4786fef 100644
--- a/libs/vdb/cursor.c
+++ b/libs/vdb/cursor.c
@@ -61,6 +61,7 @@
  */
 rc_t VCursorWhack ( VCursor *self )
 {
+    VCursorTerminatePagemapThread(self);
     return VCursorDestroy ( self );
 }
 
@@ -113,7 +114,7 @@ LIB_EXPORT rc_t CC VCursorOpen ( const VCursor *cself )
                 {
                     /* permit empty open when run from sradb */
                     if ( GetRCState ( rc ) == rcEmpty && GetRCObject ( rc ) == rcRange &&
-                         self -> permit_post_open_add && VectorLength ( & self -> row ) == 0 )
+                         self -> permit_add_column && VectorLength ( & self -> row ) == 0 )
                     {
                         rc = 0;
                     }
diff --git a/libs/vdb/database-cmn.c b/libs/vdb/database-cmn.c
index e952264..83eaf98 100644
--- a/libs/vdb/database-cmn.c
+++ b/libs/vdb/database-cmn.c
@@ -364,6 +364,31 @@ LIB_EXPORT bool CC VDatabaseLocked ( const VDatabase *self )
 }
 
 
+/* IsAlias
+ *  returns true if object name is an alias
+ *  returns path to fundamental name if it was aliased
+ *
+ *  "type" [ IN ] - a KDBPathType
+ *  valid values are kptDatabase, kptTable and kptIndex
+ *
+ *  "resolved" [ OUT ] and "rsize" [ IN ] - optional output buffer
+ *  for fundamenta object name if "alias" is not a fundamental name, 
+ *
+ *  "name" [ IN ] - NUL terminated object name
+ */
+LIB_EXPORT bool CC VDatabaseIsAlias ( const VDatabase *self, uint32_t type,
+    char *resolved, size_t rsize, const char *name )
+{
+    if ( self != NULL )
+        return KDatabaseIsAlias ( self -> kdb, type, resolved, rsize, name );
+
+    if ( resolved != NULL && rsize != 0 )
+        * resolved = 0;
+
+    return false;
+}
+
+
 /* Writable
  *  returns 0 if object is writable
  *  or a reason why if not
diff --git a/libs/vdb/database-depend.c b/libs/vdb/database-depend.c
new file mode 100644
index 0000000..0b66975
--- /dev/null
+++ b/libs/vdb/database-depend.c
@@ -0,0 +1,1715 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/* /netmnt/traces04/sra3/SRR/000379/SRR388696
+  /netmnt/traces04/sra4/SRR/000345/SRR353827 */
+
+#include <vdb/extern.h>
+
+#include <vdb/cursor.h>
+#include <vdb/table.h>
+#include <vdb/database.h>
+#include <vdb/dependencies.h>
+
+#include <kdb/manager.h>
+
+#include <vfs/manager.h> /* VFSManager */
+#include <vfs/resolver.h> /* VResolver */
+#include <vfs/path.h>
+
+#include <kfg/config.h>
+
+#include <klib/container.h>
+#include <klib/printf.h> /* string_printf */
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/rc.h>
+
+#include <sysalloc.h>
+
+#include "cursor-priv.h"
+
+/* missing macros/function from klib/rc.h
+ */
+#define GetRCSTATE( rc ) \
+    ( ( rc ) & 0x00003FFF )
+#define RC_STATE( obj, state)                         \
+    ( rc_t ) ( ( ( rc_t ) ( obj ) << 6 ) |            \
+               ( ( rc_t ) ( state ) ) )
+
+#include <assert.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+static bool OLD = true;
+
+typedef struct {
+    /* deprecated way */
+    char ref[PATH_MAX + 1];
+
+    /* new way */
+    const String *local;
+    const String *remote;
+    const String *cache;
+
+    uint32_t count;
+    rc_t rc;
+} Resolved;
+typedef struct {
+    BSTNode n;
+
+    bool circular;
+    char* name;
+    uint32_t readLen;
+    char* seqId;
+    bool local;
+
+    Resolved resolved;
+} RefNode;
+static rc_t _ResolvedRelease(Resolved *self) {
+    rc_t rc = 0;
+
+    assert(self);
+
+    free((void*)self->local);
+    free((void*)self->cache);
+    free((void*)self->remote);
+
+    memset(self, 0, sizeof *self);
+
+    return rc;
+}
+
+
+static void CC bstWhack( BSTNode* n, void* ignore )
+{
+    RefNode* sn = (RefNode*) n;
+
+    assert( sn );
+
+    free( sn->name );
+
+    free( sn->seqId );
+
+    _ResolvedRelease( &sn->resolved );
+
+    memset( sn, 0, sizeof *sn );
+
+    free( sn );
+}
+
+static
+int CC bstCmpBySeqId(const void* item, const BSTNode* n)
+{
+    const char* s1 = item;
+    const RefNode* sn = (const RefNode*) n;
+
+    assert(s1 && sn);
+
+    return strcmp(s1, sn->seqId);
+}
+
+static int CC bstCmpByRemote(const void* item, const BSTNode* n)
+{
+    const String* s1 = item;
+    const RefNode* sn = (const RefNode*) n;
+
+    assert(sn);
+
+    if (s1 == NULL) {
+        return sn->resolved.remote != NULL;
+    }
+    else {
+        int min = s1->size < sn->resolved.remote->size
+            ? s1->size : sn->resolved.remote->size;
+        return strncmp(s1->addr, sn->resolved.remote->addr, min);
+    }
+}
+
+static
+int CC bstSortBySeqId(const BSTNode* item, const BSTNode* n)
+{
+    const RefNode* sn = (const RefNode*) item;
+
+    return bstCmpBySeqId(sn->seqId, n);
+}
+
+static
+int CC bstSortByRemote(const BSTNode* item, const BSTNode* n)
+{
+    const RefNode* sn = (const RefNode*) item;
+
+    return bstCmpByRemote(sn->resolved.remote, n);
+}
+
+typedef struct Column {
+    uint32_t idx;
+    const char* name;
+    uint32_t expected;
+    uint32_t elem_bits;
+} Column;
+
+static
+rc_t AddColumn(rc_t rc, const VCursor* curs, Column* col)
+{
+    if (rc == 0) {
+        assert(curs && col);
+
+        rc = VCursorAddColumn(curs, &col->idx, col->name);
+    }
+
+    return rc;
+}
+
+/* Read a column data from a Cursor */
+static
+rc_t CursorRead(rc_t rc, const VCursor* curs, int64_t row_id,
+    const Column* col, void* buffer, uint32_t blen, uint32_t* row_len)
+{
+    assert(curs);
+
+    if (rc == 0) {
+        uint32_t elem_bits = col->elem_bits;
+        uint32_t expected = col->expected;
+        assert(col);
+
+        if (blen == 0) {
+            assert(buffer == NULL);
+            ++blen;
+        }
+
+        rc = VCursorReadDirect
+            (curs, row_id, col->idx, elem_bits, buffer, blen - 1, row_len);
+
+        if (rc != 0) {
+            if (buffer == NULL &&
+                rc == RC(rcVDB, rcCursor, rcReading, rcBuffer, rcInsufficient))
+            {
+                rc = 0;
+            }
+        }
+        else {
+            if (expected > 0 && *row_len != expected) {
+                rc = RC(rcVDB, rcCursor, rcReading, rcData, rcUnexpected);
+            }
+            if (buffer != NULL && expected == 0)
+            {   ((char*)buffer)[*row_len] = '\0'; }
+        }
+    }
+
+    return rc;
+}
+
+/* Read a String from Configuration into "value" buffer */
+static rc_t ReadCfgStr
+(const KConfig* kfg, const char* path, char* value, size_t value_sz)
+{
+    rc_t rc = 0;
+    const KConfigNode *node = NULL;
+
+    rc = KConfigOpenNodeRead(kfg, &node, path);
+    if (rc == 0) {
+        size_t num_read = 0;
+        size_t remaining = 0;
+        rc = KConfigNodeRead
+            (node, 0, value, value_sz - 1, &num_read, &remaining);
+        if (rc == 0) {
+            if (remaining != 0)
+            {   rc = RC(rcVDB, rcString, rcReading, rcSize, rcExcessive); }
+/* TODO: make sure check value[num_read] assignment is valid
+         when remaining == 0 */
+            else { value[num_read] = '\0'; }
+        }
+    }
+
+    RELEASE(KConfigNode, node);
+
+    return rc;
+}
+
+#define SIZE 4096
+
+/* Ctx struct is used to find a file using KConfig "refseq" parameters */
+typedef struct {
+    KDirectory* dir;
+
+    char servers[SIZE];
+    char volumes[SIZE];
+    char paths[SIZE];
+
+    VResolver* resolver;
+
+    const Resolved* last;
+    bool hasDuplicates;
+} Ctx;
+static rc_t CtxInit(Ctx* self) {
+    rc_t rc = 0;
+    KConfig* cfg = NULL;
+
+    assert(self);
+
+    memset(self, 0, sizeof *self);
+
+    if (rc == 0) {
+        rc = KConfigMake(&cfg, NULL);
+        if (rc == 0) {
+            const KConfigNode *node = NULL;
+            rc = KConfigOpenNodeRead(cfg, &node, "repository");
+            if (rc == 0) {
+                OLD = false;
+                LOGMSG(klogInfo, "KConfig(repository) found: using VResolver");
+            }
+            else {
+                OLD = true;
+                LOGMSG(klogInfo,
+                    "KConfig(repository) not found: not using VResolver");
+            }
+            RELEASE(KConfigNode, node);
+        }
+    }
+
+    if (OLD) {
+        if (self->dir != NULL) {
+            return rc;
+        }
+
+        rc = KDirectoryNativeDir(&self->dir);
+
+        if (rc == 0) {
+            const char path[] = "refseq/servers";
+            rc = ReadCfgStr(cfg, path, self->servers, sizeof self->servers);
+            if (rc != 0) {
+                if (GetRCState(rc) == rcNotFound)
+                {   rc = 0; }
+            }
+            else {
+                const char path[] = "refseq/volumes";
+                rc = ReadCfgStr(cfg, path, self->volumes, sizeof self->volumes);
+                if (rc != 0) {
+                    if (GetRCState(rc) == rcNotFound)
+                    {   rc = 0; }
+                }
+            }
+
+            if (rc == 0) {
+                const char path[] = "refseq/paths";
+                rc = ReadCfgStr(cfg, path, self->paths, sizeof self->paths);
+                if (rc != 0) {
+                    if (GetRCState(rc) == rcNotFound)
+                    {   rc = 0; }
+                }
+            }
+        }
+    }
+    else {
+        VFSManager* mgr = NULL;
+
+        rc = VFSManagerMake(&mgr);
+
+        if (rc == 0) {
+            rc = VFSManagerMakeResolver(mgr, &self->resolver, cfg);
+        }
+
+        RELEASE(VFSManager, mgr);
+    }
+
+    RELEASE(KConfig, cfg);
+
+    return rc;
+}
+
+static rc_t CtxDestroy(Ctx* self) {
+    rc_t rc = 0;
+
+    assert(self);
+
+    RELEASE(KDirectory, self->dir);
+    RELEASE(VResolver, self->resolver);
+
+    memset(self, 0, sizeof *self);
+
+    return rc;
+}
+
+typedef struct {
+    const char* file;
+    bool found;
+} FindRefseq;
+static rc_t CC is_file_in_dir(const KDirectory* dir,
+    uint32_t type, const char* name, void* data)
+{
+    rc_t rc = 0;
+
+    FindRefseq* t = data;
+
+    assert(dir && name && data && t->file);
+
+    if (strcmp(t->file, name) == 0) {
+        uint64_t size = 0;
+        rc = KDirectoryFileSize(dir, &size, name);
+        if (rc == 0 && size > 0) {
+            /* compensate configuration-assistant.perl behavior:
+               it used to create an empty refseq file
+               when failed to download it */
+            t->found = true;
+        }
+    }
+
+    return rc;
+}
+
+/* Find file within srv/vol. If found then copy complete path to buf.
+ * Return true if found
+ */
+static bool FindInDir(rc_t* aRc, const KDirectory* native, const char* srv,
+    const char* vol, const char* file, char* buf, size_t blen)
+{
+    rc_t rc = 0;
+
+    const KDirectory* dir = NULL;
+
+    FindRefseq t;
+
+    assert(aRc && native && srv && file && buf && blen);
+
+    rc = *aRc;
+
+    if (rc != 0)
+    {   return false; }
+
+    if (vol)
+    {   rc = KDirectoryOpenDirRead(native, &dir, false, "%s/%s", srv, vol); }
+    else
+    {   rc = KDirectoryOpenDirRead(native, &dir, false, srv); }
+
+    if (rc == 0) {
+        memset(&t, 0, sizeof t);
+        t.file = file;
+        rc = KDirectoryVVisit(dir, false, is_file_in_dir, &t, ".", NULL);
+        if (GetRCObject(rc) == rcDirectory && GetRCState(rc) == rcUnauthorized)
+        {   rc = 0; }
+
+        if (rc == 0 && t.found) {
+            if (vol) {
+                rc = KDirectoryResolvePath(native,
+                    true, buf, blen, "%s/%s/%s", srv, vol, file);
+            }
+            else {
+                rc = KDirectoryResolvePath(native,
+                    true, buf, blen, "%s/%s", srv, file);
+            }
+        }
+    }
+    else if (rc == SILENT_RC(rcFS,
+        rcDirectory, rcOpening, rcPath, rcIncorrect))
+    {
+        /* ignored nonexistent directory */
+        rc = 0;
+    }
+
+    RELEASE(KDirectory, dir);
+
+    *aRc = rc;
+
+    return t.found;
+}
+
+#define rcResolver   rcTree
+static bool NotFoundByResolver(rc_t rc) {
+    if (GetRCModule(rc) == rcVFS) {
+        if (GetRCTarget(rc) == rcResolver) {
+            if (GetRCContext(rc) == rcResolving) {
+                if (GetRCState(rc) == rcNotFound) {
+                    return true;
+                }
+            }
+        }
+    }
+    return false;
+}
+
+/* find remote reference using VResolver */
+static rc_t FindRef(Ctx* ctx, const char* seqId, Resolved* resolved) {
+    rc_t rc = 0;
+
+    VPath* acc = NULL;
+    const VPath *remote = NULL;
+    size_t num_writ = 0;
+    char ncbiAcc[512] = "";
+
+    assert(resolved);
+
+    if (rc == 0) {
+        rc = string_printf(ncbiAcc, sizeof ncbiAcc, &num_writ,
+            "ncbi-acc:%s?vdb-ctx=refseq", seqId);
+        if (rc == 0 && num_writ > sizeof ncbiAcc) {
+            return RC(rcExe, rcFile, rcCopying, rcBuffer, rcInsufficient);
+        }
+    }
+
+    if (rc == 0) {
+        rc = VPathMake(&acc, ncbiAcc);
+    }
+
+    if (rc == 0) {
+        bool remoteNotFound = false;
+        const VPath *local = NULL;
+        rc = VResolverLocal(ctx->resolver, acc, &local);
+        if (rc == 0) {
+            rc = VPathMakeString(local, &resolved->local);
+            RELEASE(VPath, local);
+        }
+        else if (NotFoundByResolver(rc)) {
+            rc = 0;
+        }
+
+        if (rc == 0) {
+            rc = VResolverRemote(ctx->resolver, acc, &remote, NULL);
+            if (rc == 0) {
+                rc = VPathMakeString(remote, &resolved->remote);
+                if (rc == 0) {
+                    char *fragment = string_chr(resolved->remote->addr,
+                        resolved->remote->size, '#');
+                    if (fragment != NULL) {
+                        *fragment = '\0';
+                    }
+                }
+            }
+            else if (NotFoundByResolver(rc)) {
+                remoteNotFound = true;
+                rc = 0;
+            }
+        }
+
+        if (rc == 0 && !remoteNotFound) {
+            uint64_t file_size = 0;
+            const VPath *cache = NULL;
+            rc = VResolverCache(ctx->resolver, remote, &cache, file_size);
+            if (rc == 0) {
+                rc = VPathMakeString(cache, &resolved->cache);
+            }
+            else if (NotFoundByResolver(rc)) {
+                rc = 0;
+            }
+            RELEASE(VPath, cache);
+        }
+
+        if (rc == 0) {
+            if (ctx->last == NULL) {
+                ctx->last = resolved;
+            }
+            else {
+                const String *last = ctx->last->remote;
+                const String *crnt = resolved->remote;
+                if (last != NULL && crnt != NULL &&
+                    last->addr != NULL && crnt->addr != NULL)
+                {
+                    int min = crnt->size < last->size ? crnt->size : last->size;
+                    if (strncmp(last->addr, crnt->addr, min) == 0) {
+                        ctx->hasDuplicates = true;
+                    }
+                }
+            }
+        }
+    }
+
+    RELEASE(VPath, remote);
+    RELEASE(VPath, acc);
+
+    return rc;
+}
+
+/* find remote reference using KConfig values */
+static
+rc_t DeprecatedFindRef(Ctx* ctx, const char* seqId, Resolved* resolved)
+{
+    rc_t rc = 0;
+    bool found = false;
+
+    int i = ~0;
+
+    char* buf = NULL;
+    size_t blen = 0;
+
+    assert(ctx && seqId && resolved);
+
+    memset(resolved, 0, sizeof *resolved);
+    buf = resolved->ref;
+    blen = sizeof resolved->ref;
+
+    for (i = 0; i < 2 && !found; ++i) {
+        char prefix[7] = "";
+        if (i > 0) {
+            if (strlen(seqId) > 6) {
+                strncpy(prefix, seqId, 6);
+                prefix[6] = '\0';
+                seqId = prefix;
+            }
+            else {
+                break;
+            }
+        }
+        if (rc == 0 && ctx->dir != NULL) {
+            if (FindInDir(&rc, ctx->dir, ".", NULL, seqId, buf, blen)) {
+                found = true;
+            }
+            else {
+                if (ctx->paths[0]) {
+                    char paths[SIZE];
+                    char* path_rem = paths;
+                    char* path_sep = NULL;
+                    strcpy(paths, ctx->paths);
+                    do {
+                        char const* path = path_rem;
+                        path_sep = strchr(path, ':');
+                        if (path_sep) {
+                            path_rem = path_sep + 1;
+                            *path_sep = 0;
+                        }
+                        if (FindInDir(&rc, ctx->dir, path, NULL,
+                            seqId, buf, blen))
+                        {
+                            found = true;
+                            break;
+                        }
+                    } while(path_sep && rc == 0);
+                }
+                if (!found && ctx->servers[0] && ctx->volumes[0]) {
+                    char server[SIZE];
+                    char vol[SIZE];
+                    char* srv_sep = NULL;
+                    char* srv_rem = server;
+                    strcpy(server, ctx->servers);
+    /* TODO check for multiple servers/volumes */
+                    do {
+                        char* vol_rem = vol;
+                        char* vol_sep = NULL;
+                        strcpy(vol, ctx->volumes);
+                        srv_sep = strchr(server, ':');
+                        if (srv_sep) {
+                            srv_rem = srv_sep + 1;
+                            *srv_sep = '\0';
+                        }
+                        do {
+                            char const* volume = vol_rem;
+                            vol_sep = strchr(volume, ':');
+                            if (vol_sep) {
+                                vol_rem = vol_sep + 1;
+                                *vol_sep = 0;
+                            }
+                            if (FindInDir(&rc, ctx->dir, server, volume,
+                                seqId, buf, blen))
+                            {
+                                found = true;
+                                break;
+                            }
+                        } while (vol_sep && rc == 0);
+                    } while (!found && srv_sep && rc == 0);
+                }
+            }
+        }
+    }
+
+    return rc;
+}
+
+typedef struct {
+/* row values */
+    uint32_t readLen;
+    char circular[8];
+    char name[256];
+    char seqId[256];
+
+/* we do not read CMP_READ value, just its row_len */
+    uint32_t row_lenCMP_READ;
+} Row;
+
+/* Add a REFERENCE table Row to BSTree */
+static
+rc_t AddRow(BSTree* tr, Row* data, Ctx* ctx)
+{
+    rc_t rc = 0;
+    bool newRemote = false;
+    RefNode* sn = NULL;
+
+    assert(tr && data && ctx);
+
+    sn = (RefNode*) BSTreeFind(tr, data->seqId, bstCmpBySeqId);
+    if (sn == NULL) {
+        sn = calloc(1, sizeof *sn);
+        if (sn == NULL) {
+            return RC
+                (rcVDB, rcStorage, rcAllocating, rcMemory, rcExhausted);
+        }
+        sn->seqId = string_dup_measure(data->seqId, NULL);
+        if (sn->seqId == NULL) {
+            bstWhack((BSTNode*) sn, NULL);
+            sn = NULL;
+            return RC
+                (rcVDB, rcStorage, rcAllocating, rcMemory, rcExhausted);
+        }
+
+        sn->name = string_dup_measure(data->name, NULL);
+        if (sn->name == NULL) {
+            bstWhack((BSTNode*) sn, NULL);
+            sn = NULL;
+            return RC
+                (rcVDB, rcStorage, rcAllocating, rcMemory, rcExhausted);
+        }
+
+        sn->circular = data->circular[0];
+        sn->readLen = data->readLen;
+        sn->local = (data->row_lenCMP_READ != 0);
+        newRemote = ! sn->local;
+
+        BSTreeInsert(tr, (BSTNode*)sn, bstSortBySeqId);
+    }
+    else {
+        if (data->row_lenCMP_READ != 0) {
+            sn->local = true;
+        }
+        if (strcmp(sn->name, data->name) || sn->circular != data->circular[0]) {
+            return RC(rcVDB, rcCursor, rcReading, rcData, rcInconsistent);
+        }
+        sn->readLen += data->readLen;
+    }
+
+    if (rc == 0 && newRemote) {
+        if (OLD) {
+            rc = DeprecatedFindRef(ctx, sn->seqId, &sn->resolved);
+        }
+        else {
+            rc = FindRef(ctx, sn->seqId, &sn->resolved);
+        }
+    }
+
+    return rc;
+}
+
+struct VDBDependencies {
+    uint32_t count;
+    RefNode** dependencies;
+
+    BSTree* tr;
+
+    /* open references */
+    KRefcount refcount;
+};
+typedef struct Initializer {
+    bool all;            /* IN: when false: process just missed */
+    bool fill;           /* IN:
+                          false: count(fill count); true: fill dep(use count) */
+    uint32_t count;      /* IO: all/missed count */
+    VDBDependencies* dep;/* OUT: to be filled */
+    uint32_t i;          /* PRIVATE: index in dep */
+    rc_t rc;             /* OUT */
+} Initializer;
+
+/* Work function to process dependencies tree
+ * Input parameters are in Initializer:
+ *  all (true: all dependencies, false: just missing)
+ *  fill(false: count dependencies, true: fill dependencies array
+ */
+static void CC bstProcess(BSTNode* n, void* data) {
+    RefNode* elm = (RefNode*) n;
+    Initializer* obj = (Initializer*) data;
+    bool go = false;
+
+    assert(elm && obj);
+
+ /* remore reference && refseq table not found */
+    if (obj->all) {
+        go = true;
+    }
+    else if (!elm->local) {
+        if (OLD) {
+            if (elm->resolved.ref[0] == '\0') {
+                go = true;
+            }
+        }
+        else {
+            if (elm->resolved.local == NULL) {
+                go = true;
+            }
+        }
+    }
+
+    if (!go) {
+        return;
+    }
+
+    if (!obj->fill) {
+        ++obj->count;
+    }
+    else {
+        if (obj->dep == NULL || obj->dep->dependencies == NULL) {
+            return;
+        }
+        if (obj->i < obj->count) {
+            *(obj->dep->dependencies + ((obj->i)++)) = elm;
+        }
+        else {
+            obj->rc = RC(rcVDB, rcDatabase, rcAccessing, rcSelf, rcCorrupt);
+        }
+    }
+}
+
+/* Read REFERENCE table; fill in BSTree */
+static
+rc_t CC VDatabaseDependencies(const VDatabase *self, BSTree* tr,
+    bool* has_no_REFERENCE, bool* hasDuplicates)
+{
+    rc_t rc = 0;
+
+    int64_t i = 0;
+    int64_t firstId = 0;
+    int64_t lastId = 0;
+
+    Column CIRCULAR = { 0, "CIRCULAR", 1,  8 };
+    Column CMP_READ = { 0, "CMP_READ", 0,  8 };
+    Column NAME     = { 0, "NAME"    , 0,  8 };
+    Column READ_LEN = { 0, "READ_LEN", 1, 32 };
+    Column SEQ_ID   = { 0, "SEQ_ID",   0,  8 };
+
+    const VTable* tbl = NULL;
+    const VCursor* curs = NULL;
+
+    Ctx ctx;
+
+    assert(self && tr && has_no_REFERENCE);
+
+    *has_no_REFERENCE = false;
+
+    if (rc == 0) {
+        rc = CtxInit(&ctx);
+    }
+
+    if (rc == 0) {
+        rc = VDatabaseOpenTableRead(self, &tbl, "REFERENCE");
+        if (GetRCState(rc) == rcNotFound) {
+            *has_no_REFERENCE = true;
+        }
+    }
+    if (rc == 0) {
+        rc = VTableCreateCursorReadInternal(tbl, &curs);
+    }
+
+    rc = AddColumn(rc, curs, &CIRCULAR);
+    rc = AddColumn(rc, curs, &CMP_READ);
+    rc = AddColumn(rc, curs, &NAME    );
+    rc = AddColumn(rc, curs, &READ_LEN);
+    rc = AddColumn(rc, curs, &SEQ_ID  );
+
+    if (rc == 0) {
+        rc = VCursorOpen(curs);
+    }
+    if (rc == 0) {
+        uint64_t count = 0;
+        rc = VCursorIdRange(curs, 0, &firstId, &count);
+        lastId = firstId + count - 1;
+    }
+
+    for (i = firstId; i <= lastId && rc == 0; ++i) {
+        uint32_t row_len = 0;
+        Row data;
+        if (rc == 0) {
+            rc = CursorRead(rc, curs, i, &CIRCULAR,
+                data.circular, sizeof data.circular, &row_len);
+            if (rc != 0) {
+                PLOGERR(klogErr, (klogErr, rc,
+                    "failed to read cursor(col='CIRCULAR', spot='$(id)')",
+                    "id=%ld", i));
+            }
+        }
+        if (rc == 0) {
+            rc = CursorRead(rc, curs, i, &CMP_READ,
+                NULL, 0, &data.row_lenCMP_READ);
+            if (rc != 0) {
+                PLOGERR(klogErr, (klogErr, rc,
+                    "failed to read cursor(col='CMP_READ', spot='$(id)')",
+                    "id=%ld", i));
+            }
+        }
+        if (rc == 0) {
+            rc = CursorRead(rc, curs, i, &NAME,
+                data.name, sizeof data.name, &row_len);
+            if (rc != 0) {
+                PLOGERR(klogErr, (klogErr, rc,
+                    "failed to read cursor(col='NAME', spot='$(id)')",
+                    "id=%ld", i));
+            }
+        }
+        if (rc == 0) {
+            rc = CursorRead(rc, curs, i, &READ_LEN,
+                &data.readLen, sizeof data.readLen, &row_len);
+            if (rc != 0) {
+                PLOGERR(klogErr, (klogErr, rc,
+                    "failed to read cursor(col='READ_LEN', spot='$(id)')",
+                    "id=%ld", i));
+            }
+        }
+        if (rc == 0) {
+            rc = CursorRead(rc, curs, i, &SEQ_ID,
+                data.seqId, sizeof data.seqId, &row_len);
+            if (rc != 0) {
+                PLOGERR(klogErr, (klogErr, rc,
+                    "failed to read cursor(col='SEQ_ID', spot='$(id)')",
+                    "id=%ld", i));
+            }
+        }
+        if (rc == 0) {
+            rc = AddRow(tr, &data, &ctx);
+        }
+    }
+
+    if (rc == 0 && hasDuplicates != NULL) {
+        *hasDuplicates = ctx.hasDuplicates;
+    }
+
+    if (*has_no_REFERENCE) {
+        rc = 0;
+    }
+
+    {
+        rc_t rc2 = CtxDestroy(&ctx);
+        if (rc == 0 && rc2 != 0) {
+            rc = rc2;
+        }
+    }
+
+    RELEASE(VCursor, curs);
+    RELEASE(VTable, tbl);
+
+    return rc;
+}
+
+/* Get dependency number "idx" */
+static
+rc_t VDBDependenciesGet(const VDBDependencies* self,
+    RefNode** dep, uint32_t idx)
+{
+    rc_t rc = 0;
+
+    assert(dep);
+
+    if (self == NULL) {
+        return RC(rcVDB, rcDatabase, rcAccessing, rcSelf, rcNull);
+    }
+
+    if (idx >= self->count) {
+        return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcExcessive);
+    }
+
+    *dep = *(self->dependencies + idx);
+    if (*dep == NULL) {
+        return RC(rcVDB, rcDatabase, rcAccessing, rcSelf, rcCorrupt);
+    }
+
+    return rc;
+}
+
+/* Count
+ *  retrieve the number of dependencies
+ *
+ *  "count" [ OUT ] - return parameter for dependencies count
+ */
+LIB_EXPORT rc_t CC VDBDependenciesCount(const VDBDependencies* self,
+    uint32_t* count)
+{
+    if (self == NULL) {
+        return RC(rcVDB, rcDatabase, rcAccessing, rcSelf, rcNull);
+    }
+
+    if (count == NULL) {
+        return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcNull);
+    }
+
+    *count = self->count;
+
+    return 0;
+}
+
+/* Circular */
+LIB_EXPORT rc_t CC VDBDependenciesCircular(const VDBDependencies* self,
+    bool* circular, uint32_t idx)
+{
+    rc_t rc = 0;
+    RefNode* dep = NULL;
+
+    if (circular == NULL) {
+        return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcNull);
+    }
+
+    rc = VDBDependenciesGet(self, &dep, idx);
+
+    if (rc == 0) {
+        *circular = dep->circular;
+    }
+
+    return rc;
+}
+
+/* Local
+ *  retrieve local property
+ *
+ *  "local" [ OUT ] - true if object is stored internally
+ *
+ *  "idx" [ IN ] - zero-based index of dependency
+ */
+LIB_EXPORT rc_t CC VDBDependenciesLocal(const VDBDependencies* self,
+    bool* local, uint32_t idx)
+{
+    rc_t rc = 0;
+    RefNode* dep = NULL;
+
+    if (local == NULL) {
+        return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcNull);
+    }
+
+    rc = VDBDependenciesGet(self, &dep, idx);
+
+    if (rc == 0) {
+        *local = dep->local;
+    }
+
+    return rc;
+}
+
+/* Name
+ *
+ * "name" [ OUT ] - returned pointed should not be released.
+ *                  it becomes invalid after VDBDependenciesRelease
+ */
+LIB_EXPORT rc_t CC VDBDependenciesName(const VDBDependencies* self,
+    const char** name, uint32_t idx)
+{
+    rc_t rc = 0;
+    RefNode* dep = NULL;
+
+    if (name == NULL) {
+        return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcNull);
+    }
+
+    rc = VDBDependenciesGet(self, &dep, idx);
+
+    if (rc == 0) {
+        *name = dep->name;
+    }
+
+    return rc;
+}
+
+static rc_t VDBDependencyGetPath(const String* from, const char** to) {
+    assert(to);
+
+    *to = NULL;
+
+    if (OLD) {
+        return 0;
+    }
+
+    if (from == NULL) {
+        return 0;
+    }
+
+    if (from->addr != NULL && from->size > 0 &&
+        from->addr[from->size - 1] != '\0' &&
+        from->addr[from->size] != '\0')
+    {
+        return RC(rcVDB, rcString, rcValidating, rcChar, rcInvalid);
+    }
+
+    *to = from->addr;
+    return 0;
+}
+
+/* Path
+ *  for remote dependencies: returns:
+ *                              path for resolved dependency,
+ *                              NULL for missing dependency.
+ *  returns NULL for local dependencies
+ *
+ * "path" [ OUT ] - returned pointed should not be released.
+ *                  it becomes invalid after VDBDependenciesRelease
+ */
+LIB_EXPORT rc_t CC VDBDependenciesPath(const VDBDependencies* self,
+    const char** path, uint32_t idx)
+{
+    rc_t rc = 0;
+    RefNode* dep = NULL;
+
+    if (path == NULL) {
+        return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcNull);
+    }
+
+    rc = VDBDependenciesGet(self, &dep, idx);
+
+    if (rc == 0) {
+        if (dep->local) {
+            *path = NULL;
+        }
+        else {
+            if (OLD) {
+                *path = dep->resolved.ref;
+            }
+            else {
+                rc = VDBDependencyGetPath(dep->resolved.local, path);
+            }
+        }
+    }
+
+    return rc;
+}
+
+LIB_EXPORT rc_t CC VDBDependenciesPathRemote(const VDBDependencies* self,
+    const char** path, uint32_t idx)
+{
+    rc_t rc = 0;
+    RefNode* dep = NULL;
+
+    if (path == NULL) {
+        return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcNull);
+    }
+
+    rc = VDBDependenciesGet(self, &dep, idx);
+
+    if (rc == 0) {
+        rc = VDBDependencyGetPath(dep->resolved.remote, path);
+    }
+
+    return rc;
+}
+
+LIB_EXPORT rc_t CC VDBDependenciesPathCache(const VDBDependencies* self,
+    const char** path, uint32_t idx)
+{
+    rc_t rc = 0;
+    RefNode* dep = NULL;
+
+    if (path == NULL) {
+        return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcNull);
+    }
+
+    rc = VDBDependenciesGet(self, &dep, idx);
+
+    if (rc == 0) {
+        rc = VDBDependencyGetPath(dep->resolved.cache, path);
+    }
+
+    return rc;
+}
+
+/* SeqId
+ *
+ * "seq_id" [ OUT ] - returned pointed should not be released.
+ *                    it becomes invalid after VDBDependenciesRelease
+ */
+LIB_EXPORT rc_t CC VDBDependenciesSeqId(const VDBDependencies* self,
+    const char** seq_id, uint32_t idx)
+{
+    rc_t rc = 0;
+    RefNode* dep = NULL;
+
+    if (seq_id == NULL) {
+        return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcNull);
+    }
+
+    rc = VDBDependenciesGet(self, &dep, idx);
+
+    if (rc == 0) {
+        *seq_id = dep->seqId;
+    }
+
+    return rc;
+}
+
+/* Type
+ *
+ * "type" [ OUT ] - a KDBPathType from kdb/manager.h
+ */
+LIB_EXPORT rc_t CC VDBDependenciesType(const VDBDependencies* self,
+    uint32_t* type, uint32_t idx)
+{
+    rc_t rc = 0;
+    RefNode* dep = NULL;
+
+    if (type == NULL) {
+        return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcNull);
+    }
+
+    rc = VDBDependenciesGet(self, &dep, idx);
+
+    if (rc == 0) {
+        *type = kptTable;
+    }
+
+    return rc;
+}
+
+#define CLSNAME "VDBDependencies"
+
+VDB_EXTERN rc_t CC VDBDependenciesAddRef(const VDBDependencies* self ) {
+    if (self != NULL) {
+        switch (KRefcountAdd(&self->refcount, CLSNAME)) {
+            case krefLimit:
+                return RC(rcVDB, rcDatabase, rcAttaching, rcRange, rcExcessive);
+        }
+    }
+
+    return 0;
+}
+
+static rc_t VDBDependenciesWhack(VDBDependencies* self) {
+    if (self == NULL) {
+        return 0;
+    }
+
+    KRefcountWhack(&self->refcount, CLSNAME);
+
+    BSTreeWhack(self->tr, bstWhack, NULL);
+    free(self->tr);
+
+    free(self->dependencies);
+
+    memset(self, 0, sizeof *self);
+
+    free(self);
+
+    return 0;
+}
+
+/* Release
+ *  (objects ARE NOT reference counted)
+ *  ignores NULL references
+ */
+LIB_EXPORT rc_t CC VDBDependenciesRelease(const VDBDependencies* self) {
+    if (self != NULL) {
+        switch (KRefcountDrop(&self->refcount, CLSNAME)) {
+        case krefWhack:
+            return VDBDependenciesWhack((VDBDependencies*)self);
+        case krefLimit:
+            return RC(rcVDB, rcDatabase, rcReleasing, rcRange, rcExcessive);
+        }
+    }
+
+    return 0;
+}
+
+typedef struct {
+    BSTree* tr;
+    int count;
+    bool all;
+} SBstCopy;
+
+static void CC bstCopy(BSTNode* n, void* data) {
+    RefNode* sn = NULL;
+    RefNode* elm = (RefNode*) n;
+    SBstCopy* x = (SBstCopy*)data;
+    BSTree* tr = x->tr;
+    bool go = false;
+    assert(elm && tr);
+
+    if (x->all) {
+        go = true;
+    } else if (!elm->local) {
+        assert(!OLD);
+        if (elm->resolved.local == NULL) {
+            go = true;
+        }
+    }
+
+    if (!go) {
+        return;
+    }
+
+    sn = (RefNode*) BSTreeFind(tr, elm->resolved.remote, bstCmpByRemote);
+    if (sn == NULL) {
+        sn = calloc(1, sizeof *sn);
+        if (sn == NULL) {
+/* TODO: generate error message */
+            return;
+        }
+
+        sn->seqId = string_dup_measure(elm->seqId, NULL);
+        if (sn->seqId == NULL) {
+            bstWhack((BSTNode*) sn, NULL);
+            return;
+        }
+
+        sn->name = string_dup_measure(elm->name, NULL);
+        if (sn->name == NULL) {
+            bstWhack((BSTNode*) sn, NULL);
+            return;
+        }
+
+        sn->circular = elm->circular;
+        sn->readLen = elm->readLen;
+        sn->local = elm->local;
+
+        sn->resolved.count = 1;
+
+        sn->resolved.local = elm->resolved.local;
+        elm->resolved.local = NULL;
+
+        sn->resolved.remote = elm->resolved.remote;
+        elm->resolved.remote = NULL;
+
+        sn->resolved.cache = elm->resolved.cache;
+        elm->resolved.cache = NULL;
+
+        BSTreeInsert(tr, (BSTNode*)sn, bstSortByRemote);
+        ++x->count;
+    }
+    else {
+        bool archived = false;
+        if (sn->resolved.rc != 0) {
+            return;
+        }
+        else if (sn->circular != elm->circular) {
+            sn->resolved.rc
+                = RC(rcVDB, rcNumeral, rcComparing, rcData, rcInvalid);
+        }
+        else if ((sn->name == NULL && elm->name != NULL)
+            || (sn->name != NULL && elm->name == NULL))
+        {
+            sn->resolved.rc
+                = RC(rcVDB, rcString, rcComparing, rcData, rcInvalid);
+        }
+        else if (strcmp(sn->name, elm->name) != 0) {
+            if (strncmp(sn->name, elm->name, 6) == 0) {
+                archived = true;
+            }
+            else {
+                sn->resolved.rc
+                    = RC(rcVDB, rcString, rcComparing, rcData, rcInvalid);
+            }
+        }
+
+        if (sn->resolved.rc != 0) {
+        }
+        else if (sn->readLen != elm->readLen && !archived) {
+            sn->resolved.rc
+                = RC(rcVDB, rcNumeral, rcComparing, rcData, rcInvalid);
+        }
+        else if (sn->seqId == NULL || elm->seqId == NULL) {
+            sn->resolved.rc
+                = RC(rcVDB, rcString, rcComparing, rcData, rcInvalid);
+        }
+        else if (sn->local != elm->local) {
+            sn->resolved.rc
+                = RC(rcVDB, rcNumeral, rcComparing, rcData, rcInvalid);
+        }
+        else if (sn->resolved.ref[0] != '\0' || elm->resolved.ref[0] != '\0') {
+            sn->resolved.rc
+                = RC(rcVDB, rcString, rcComparing, rcData, rcInvalid);
+        }
+        else if (sn->resolved.local != NULL || elm->resolved.local != NULL) {
+            sn->resolved.rc
+                = RC(rcVDB, rcString, rcComparing, rcData, rcInvalid);
+        }
+        else if (StringCompare(sn->resolved.remote, elm->resolved.remote) != 0)
+        {
+            int min = sn->resolved.remote->size < elm->resolved.remote->size
+                ? sn->resolved.remote->size : elm->resolved.remote->size;
+            if (!archived || strncmp(sn->resolved.remote->addr,
+                                elm->resolved.remote->addr, min) != 0)
+            {
+                sn->resolved.rc
+                    = RC(rcVDB, rcString, rcComparing, rcData, rcInvalid);
+            }
+        }
+
+        if (sn->resolved.rc != 0) {
+        }
+        else if (StringCompare(sn->resolved.cache, elm->resolved.cache) != 0)
+        {
+            sn->resolved.rc
+                = RC(rcVDB, rcString, rcComparing, rcData, rcInvalid);
+        }
+        else {
+            if (archived) {
+                int i = 0;
+                bool tail = false;
+                for (;;++i) {
+                    char* c1 = &sn->seqId[i];
+                    const char c2 = elm->seqId[i];
+                    if (*c1 == '\0') {
+                        break;
+                    }
+                    if (!tail && (c2 == '\0' || *c1 != c2)) {
+                        tail = true;
+                    }
+                    if (tail) {
+     /* incorrect:
+        we keep at least one seqid for archived refseqs to be able to resolve them
+                        *c1 = '.'; */
+                    }
+                }
+            }
+            ++sn->resolved.count;
+        }
+    }
+}
+
+/* ListDependencies
+ *  create a dependencies object: list all dependencies
+ *
+ *  "dep" [ OUT ] - return for VDBDependencies object
+ *
+ *  "missing" [ IN ] - if true, list only missing dependencies
+ *  otherwise, list all dependencies
+ *
+ * N.B. If missing == true then
+ *      just one refseq dependency will be returned for 'container' Refseq files.
+ */
+LIB_EXPORT rc_t CC VDatabaseListDependencies(const VDatabase* self,
+    const VDBDependencies** dep, bool missing)
+{
+    rc_t rc = 0;
+    VDBDependencies* obj;
+    bool all = ! missing;
+    bool has_no_REFERENCE = false;
+    bool hasDuplicates = false;
+
+    if (self == NULL) {
+        return RC(rcVDB, rcDatabase, rcAccessing, rcSelf, rcNull);
+    }
+    if (dep == NULL) {
+        return RC(rcVDB, rcDatabase, rcAccessing, rcParam, rcNull);
+    }
+
+    obj = calloc(1, sizeof *obj);
+    if (obj == NULL) {
+        return RC(rcVDB, rcStorage, rcAllocating, rcMemory, rcExhausted);
+    }
+
+    obj->tr = malloc(sizeof *obj->tr);
+    if (obj->tr == NULL) {
+        free(obj);
+        return RC(rcVDB, rcStorage, rcAllocating, rcMemory, rcExhausted);
+    }
+    BSTreeInit(obj->tr);
+
+    /* initialize dependencie tree */
+    rc = VDatabaseDependencies(self, obj->tr,
+        &has_no_REFERENCE, &hasDuplicates);
+    if (rc == 0 && has_no_REFERENCE) {
+        *dep = obj;
+        return rc;
+    }
+
+    if (rc == 0) {
+        Initializer init;
+        memset(&init, 0, sizeof init);
+
+        /* count all/missing dependencies */
+        init.all = all;
+        init.fill = false;
+        BSTreeForEach(obj->tr, false, bstProcess, &init);
+     /* now init.count = number of (all == true ? 'all' : 'missed') references*/
+
+        rc = init.rc;
+        if (rc == 0) {
+            obj->count = init.count;
+        }
+
+        if (rc == 0 && missing && hasDuplicates) {
+            /* references have duplicates. e.g. AAAB01... */
+            SBstCopy x;
+            BSTree* tr = malloc(sizeof *tr);
+            if (tr == NULL) {
+                rc = RC(rcVDB, rcStorage, rcAllocating, rcMemory, rcExhausted);
+                return rc;
+            }
+            BSTreeInit(tr);
+            x.count = 0;
+            x.tr = tr;
+            x.all = all;
+
+         /* compact obj->tr into tr, skip duplicates
+            x.count is the number of all references from obj.tr */
+            BSTreeForEach(obj->tr, false, bstCopy, &x);
+            BSTreeWhack(obj->tr, bstWhack, NULL);
+            free(obj->tr);
+            obj->tr = tr;
+            obj->count = init.count = x.count;
+        }
+
+        if (rc == 0) {
+            /* initialize dependencies array with pointers to tree values */
+            if (obj->count > 0) {
+                obj->dependencies
+                    = calloc(obj->count, sizeof obj->dependencies);
+                if (obj->dependencies == NULL) {
+                    free(obj);
+                    return RC
+                        (rcVDB, rcStorage, rcAllocating, rcMemory, rcExhausted);
+                }
+                init.fill = true;
+                init.dep = obj;
+                BSTreeForEach(obj->tr, false, bstProcess, &init);
+                rc = init.rc;
+                if (rc == 0 && init.i != init.count) {
+                    rc = RC(rcVDB, rcDatabase, rcAccessing, rcSelf, rcCorrupt);
+                }
+            }
+        }
+    }
+
+    if (rc == 0) {
+        KRefcountInit(&obj->refcount, 1, CLSNAME, "make", "dep");
+        *dep = obj;
+    }
+    else {
+        VDBDependenciesRelease(obj);
+    }
+
+    return rc;
+}
+
+static bool DependenciesError(rc_t rc) {
+    return GetRCModule(rc) == rcAlign && GetRCObject(rc) == rcTable
+          && GetRCState(rc) == rcNotFound;
+}
+
+typedef enum ErrType {
+    eUnknown,
+    eNoEncInKfg,
+    ePwdFileNotFound,
+    eBadPwdFile,
+    eBadEncKey
+} ErrType;
+static ErrType DependenciesType(rc_t rc) {
+    if (GetRCTarget(rc) == rcEncryptionKey)
+    {
+        switch (GetRCSTATE(rc))
+        {
+            /* no configuration or environment */
+        case RC_STATE(rcFile, rcUnknown):
+            return eNoEncInKfg;
+
+            /* no file where told to look */
+        case RC_STATE(rcFile, rcNotFound):
+            return ePwdFileNotFound;
+
+            /* after decryption the file wasn't a database object */
+        case RC_STATE(rcEncryption, rcIncorrect):
+            return eBadEncKey;
+
+        default:
+            break;
+        }
+    }
+    else if (GetRCTarget(rc) == rcMgr)
+    {
+        switch (GetRCSTATE(rc))
+        {
+        case RC_STATE(rcEncryptionKey, rcTooShort): /* too short */
+        case RC_STATE(rcEncryptionKey, rcTooLong): /* too long */
+            return eBadPwdFile;
+
+        default:
+            break;
+        }
+    }
+    return eUnknown;
+}
+
+LIB_EXPORT bool CC UIError( rc_t rc,
+    const VDatabase* db, const VTable* table)
+{
+    bool retval = false;
+    if( db != NULL || table != NULL ) {
+      if( DependenciesError(rc) ) {
+        if( db != NULL ) {
+            VDatabaseAddRef(db);
+        } else if( VTableOpenParentRead(table, &db) != 0 ) {
+            db = NULL;
+        }
+        if( db != NULL ) {
+            const VTable* ref;
+            if( VDatabaseOpenTableRead(db, &ref, "REFERENCE") == 0 ) {
+                const VCursor* c;
+                if( VTableCreateCachedCursorRead(ref, &c, 0) == 0 ) {
+                    uint32_t i;
+                    retval = VCursorAddColumn(c, &i, "CIRCULAR") == 0
+                        && VCursorOpen(c) == 0;
+                    VCursorRelease(c);
+                }
+                VTableRelease(ref);
+            }
+            VDatabaseRelease(db);
+        }
+      }
+    }
+    else if (db == NULL && table == NULL) {
+        ErrType type = DependenciesType(rc);
+        if (type != eUnknown) {
+            retval = true;
+        }
+    }
+    return retval;
+}
+
+static
+void CC VDBDependenciesLOGMissing( rc_t rc,
+    const VDatabase* db, bool log_list )
+{
+    static bool once = false;
+    if( !once ) {
+      KWrtHandler handler;
+
+      once = true;
+
+      handler.writer = KOutWriterGet();
+      handler.data = KOutDataGet();
+      KOutHandlerSetStdErr();
+
+      if (DependenciesError(rc)) {
+        OUTMSG(("This operation requires access to external"
+            " reference sequence(s) that could not be located\n"));
+        if (db && log_list) {
+            const VDBDependencies* dep = NULL;
+            uint32_t i, count = 0;
+            if( VDatabaseListDependencies(db, &dep, true) == 0 &&
+                VDBDependenciesCount(dep, &count) == 0 ) {
+                for(i = 0; i < count; i++) {
+                    const char* name = NULL, *seqId = NULL;
+                    if (VDBDependenciesName(dep, &name, i) == 0
+                            && VDBDependenciesSeqId(dep, &seqId, i) == 0)
+                    {
+                        OUTMSG(("Reference sequence %s %s was not found\n",
+                                seqId, name));
+                    }
+                }
+                VDBDependenciesRelease(dep);
+            }
+        }
+        OUTMSG((
+              "Please run \"perl configuration-assistant.perl\" and try again\n"
+            ));
+      }
+      else {
+        switch (DependenciesType(rc)) {
+            case eNoEncInKfg:
+                OUTMSG((
+"The file you are trying to open is encrypted,\n"
+"but no decryption password could be located.\n"
+"To set up a password,\n"
+"run the 'configuration-assistant.perl' script provided with the toolkit.\n"));
+                break;
+            case ePwdFileNotFound:
+                OUTMSG((
+"The file you are trying to open is encrypted,\n"
+"but no decryption password could be obtained\n"
+"from the path given in configuration.\n"
+"To set up or change a password,\n"
+"run the 'configuration-assistant.perl' script provided with the toolkit.\n"));
+                break;
+            case eBadEncKey:
+                OUTMSG((
+"The file you are trying to open is encrypted, but could not be opened.\n"
+"Either your password is incorrect or the downloaded file is corrupt.\n"
+"To set up or change a password,\n"
+"run the 'configuration-assistant.perl' script provided with the toolkit.\n"
+"To test the file for corruption,\n"
+"run the 'nencvalid' tool provided with the toolkit.\n"));
+                break;
+        case eBadPwdFile:
+                OUTMSG((
+"The file you are trying to open is encrypted, but could not be opened.\n"
+"The password in the password file in unusable either from being 0 bytes\n"
+"or more than 4096 bytes long. The password starts at the beginning of\n"
+"the file and ends with the first CR (\\r) pr LF (\\n) or at the end of\n"
+"the file.\n"
+"To set up or change a password,\n"
+"run the 'configuration-assistant.perl' script provided with the toolkit.\n"));
+                break;
+            default:
+                assert(0);
+        }
+      }
+
+      OUTMSG(("\n"));
+      KOutHandlerSet(handler.writer, handler.data);
+    }
+}
+
+LIB_EXPORT const char* CC UIDatabaseGetErrorString(rc_t rc)
+{
+    if (DependenciesError(rc)) {
+        return "This operation requires access to external"
+            " reference sequence(s) that could not be located";
+    }
+    else {
+        switch (DependenciesType(rc)) {
+            case eNoEncInKfg:
+                return "The file is encrypted, "
+                    "but no decryption password could be located";
+            case ePwdFileNotFound:
+                return "The file is encrypted, "
+                    "but no decryption password could be obtained "
+                    "from the path given in configuration";
+            case eBadEncKey:
+                return "The file is encrypted, but could not be opened. "
+                    "Either the password is incorrect or the file is corrupt";
+            case eBadPwdFile:
+                return "The file is encrypted, but could not be opened. "
+                    "The password in the password file in unusable";
+            default:
+                assert(0);
+                return "Unexpected Dependency Type";
+        }
+    }
+}
+
+LIB_EXPORT void CC UIDatabaseLOGError( rc_t rc,
+    const VDatabase* db, bool log_list )
+{
+    VDBDependenciesLOGMissing(rc, db, log_list);
+}
+
+LIB_EXPORT void CC UITableLOGError( rc_t rc,
+    const VTable* table, bool log_list )
+{
+    const VDatabase* db;
+    if( table == NULL ) {
+        VDBDependenciesLOGMissing(rc, NULL, log_list);
+    }
+    else if( VTableOpenParentRead(table, &db) == 0 && db != NULL ) {
+        VDBDependenciesLOGMissing(rc, db, log_list);
+        VDatabaseRelease(db);
+    }
+}
diff --git a/libs/vdb/dbmgr-cmn.c b/libs/vdb/dbmgr-cmn.c
index ad8f7f0..7d8c0c9 100644
--- a/libs/vdb/dbmgr-cmn.c
+++ b/libs/vdb/dbmgr-cmn.c
@@ -38,11 +38,16 @@
 
 #include <vdb/manager.h>
 #include <vdb/database.h>
+#include <vdb/table.h>
 #include <vdb/vdb-priv.h>
 #include <kdb/manager.h>
+#include <kdb/database.h>
+#include <kdb/table.h>
+#include <kdb/meta.h>
 #include <kfg/config.h>
 #include <kfs/directory.h>
 #include <kfs/dyload.h>
+#include <klib/log.h>
 #include <klib/text.h>
 #include <klib/rc.h>
 #include <sysalloc.h>
@@ -53,51 +58,12 @@
 #include <assert.h>
 
 #if 1
-#define DEBUG_PRINT(fmt, ...) { do { } while(0); }
+#define DEBUG_PRINT( fmt, ... ) ( void ) 0
 #else
 #define DEBUG_PRINT(fmt, ...) fprintf(stderr, "%s - " fmt "\n", __func__, __VA_ARGS__)
 #endif
 
 /*--------------------------------------------------------------------------
- * VDBMem
- */
-
-/* Whack
- */
-static
-void CC VDBMemWhack ( DLNode *n, void *ignore )
-{
-    DEBUG_PRINT("freeing mem", 0);
-    free ( n );
-}
-
-
-/* Release
- */
-void CC VDBMemRelease ( DLNode *item, void *data )
-{
-    VDBMem *self = ( VDBMem* ) item;
-    VDBManager *mgr = data;
-
-    if ( self != NULL )
-    {
-        if ( mgr == NULL || mgr -> pcount >= mgr -> plimit ) {
-            if (mgr) {
-                DEBUG_PRINT("freeing mem, pcount: %u, plimit: %u", mgr->pcount, mgr->plimit);
-                --mgr->mcount;
-            }
-            free ( self );
-        }
-        else
-        {
-            DEBUG_PRINT("pooling mem, pcount: %u, plimit: %u", mgr->pcount, mgr->plimit);
-            DLListPushTail ( & mgr -> mpool, & self -> n );
-            ++ mgr -> pcount;
-        }
-    }
-}
-
-/*--------------------------------------------------------------------------
  * VDBManager
  *  opaque handle to library
  */
@@ -124,7 +90,6 @@ rc_t VDBManagerWhack ( VDBManager *self )
 
         VSchemaRelease ( self -> schema );
         VLinkerRelease ( self -> linker );
-        DLListWhack ( & self -> mpool, VDBMemWhack, NULL );
         free ( self );
         return 0;
     }
@@ -356,15 +321,27 @@ rc_t VDBManagerConfigFromKfg ( VDBManager *self, bool update )
                 /* add path between "path" and "colon" */
                 rc = VDBManagerAddSchemaIncludePath ( self, "%.*s", ( int ) ( colon - path ), path );
                 if ( rc != 0 )
-                    break;
-                num_read -= ( colon - path ) - 1;
+                {
+                    PLOGERR ( klogWarn, ( klogWarn, rc, "schema path '$(path)' was rejected",
+                                          "path=%.*s", ( int ) ( colon - path ), path ) );
+                    rc = 0;
+                }
+                num_read -= colon - path + 1;
                 path = colon + 1;
                 colon = string_chr ( path, num_read, ':' );
             }
 
             /* add in last portion */
             if ( rc == 0 && num_read != 0 )
+            {
                 rc = VDBManagerAddSchemaIncludePath ( self, "%.*s", ( int ) ( num_read ), path );
+                if ( rc != 0 )
+                {
+                    PLOGERR ( klogWarn, ( klogWarn, rc, "schema path '$(path)' was rejected",
+                                          "path=%.*s", ( int ) num_read, path ) );
+                    rc = 0;
+                }
+            }
         }
 
         KConfigRelease ( kfg );
@@ -513,93 +490,258 @@ LIB_EXPORT rc_t CC VDBManagerSetUserData ( const VDBManager *cself,
     return 0;
 }
 
-
-/* MakeMem
- *  pops a buffer from pool
- *  or allocates a new one on demand
+/* OpenKDBManager
+ *  returns a new reference to KDBManager used by VDBManager
  */
-rc_t VDBManagerMakeMem ( VDBManager *self, VDBMem **memp )
+LIB_EXPORT rc_t CC VDBManagerOpenKDBManagerRead ( const VDBManager *self, const KDBManager **kmgr )
 {
     rc_t rc;
 
-    if ( memp == NULL )
-        rc = RC ( rcVDB, rcMgr, rcAllocating, rcParam, rcNull );
+    if ( kmgr == NULL )
+        rc = RC ( rcVDB, rcMgr, rcAccessing, rcParam, rcNull );
     else
     {
         if ( self == NULL )
-            rc = RC ( rcVDB, rcMgr, rcAllocating, rcSelf, rcNull );
+            rc = RC ( rcVDB, rcMgr, rcAccessing, rcSelf, rcNull );
         else
         {
-            VDBMem *mem;
-
-            if ( self -> pcount > 0 )
+            rc = KDBManagerAddRef ( self -> kmgr );
+            if ( rc == 0 )
             {
-                /* "count" tells us that there is at least 1 pooled buffer */
-                mem = ( VDBMem* ) DLListPopHead ( & self -> mpool );
-                assert ( mem != NULL );
+                * kmgr = self -> kmgr;
+                return 0;
+            }
+        }
 
-                /* should always happen */
-                if ( mem != NULL )
-                {
-                    DEBUG_PRINT("retrieving mem from pool", 0);
-                    -- self -> pcount;
-                    * memp = mem;
-                    return 0;
-                }
+        * kmgr = NULL;
+    }
 
-                /* should never happen */
-                self -> pcount = 0;
-            }
-            
-            if (self->mcount > self->mlimit) {
-                rc = RC(rcVDB, rcMgr, rcAllocating, rcResources, rcExhausted);
-                DEBUG_PRINT("refusing to allocate; too many allocs", 0);
-            }
-            else {
-                mem = malloc ( sizeof * mem );
-                if ( mem == NULL )
-                    rc = RC ( rcVDB, rcMgr, rcAllocating, rcMemory, rcExhausted );
-                else
+    return rc;
+}
+
+
+static
+ver_t VDBManagerGetLoaderVersFromMeta ( const KMetadata * meta )
+{
+    const KMDataNode *node = NULL;
+    rc_t rc = KMetadataOpenNodeRead ( meta, & node, "SOFTWARE/loader" );
+    KMDataNodeRelease ( node );
+    if ( rc == 0 )
+    {
+        size_t num_read;
+        char vers_string [ 64 ];
+        rc = KMDataNodeReadAttr ( node, "vers", vers_string, sizeof vers_string, & num_read );
+        if ( rc == 0 )
+        {
+            char *end, *start = vers_string;
+            unsigned long maj = strtoul ( start, & end, 10 );
+
+            KMDataNodeRelease ( node );
+
+            if ( end > start && end [ 0 ] == '.' )
+            {
+                unsigned long min = strtoul ( start = end + 1, & end, 10 );
+                if ( end > start && end [ 0 ] == '.' )
                 {
-                    ++self->mcount;
-                    DEBUG_PRINT("allocating mem %u", self->mcount);
-                    * memp = mem;
-                    return 0;
+                    unsigned long rel = strtoul ( start = end + 1, & end, 10 );
+                    if ( end > start )
+                        return ( maj << 24 ) | ( min << 16 ) | rel;
                 }
             }
         }
+    }
+    return 0;
+}
 
-        * memp = NULL;
+
+/* VDBManagerGetVersFromMeta
+ *  helper-function for VDBManagerGetObjVersion
+ */
+static
+ver_t VDBManagerGetVersFromMeta ( const KMetadata * meta, bool is_db )
+{
+    rc_t rc = 0;
+    uint32_t meta_vers;
+    const KMDataNode *node;
+
+    /* look for loader version as first clue */
+    ver_t version = VDBManagerGetLoaderVersFromMeta ( meta );
+    if ( VersionGetMajor ( version ) >= 2 ) {
+        return version;
     }
 
-    return rc;
+    /* was the run vdb-copied? */
+    rc = KMetadataOpenNodeRead ( meta, & node, "SOFTWARE/update" );
+    if ( rc == 0 ) {
+        KMDataNodeRelease ( node );
+        return 0x2000000;
+    }
+
+    /* If SOFTWARE/loader/@vers exists but SOFTWARE/update does not
+     * then return the former */
+    if ( version != 0 ) {
+        return version;
+    }
+
+    /* THE PRINCIPAL DESCRIPTION OF SOFTWARE VERSION
+       WAS NOT FOUND. USE HEURISTICS TO DETERMINE VERSION
+       FROM THIS POINT FORWARD. */
+
+    /* look at the version of the metadata file itself
+       metdata version 1 means pre-vdb, i.e. v0 */
+    rc = KMetadataVersion ( meta, & meta_vers );
+    if ( rc == 0 && meta_vers < 2 )
+        return 0;
+
+    /* assume all databases are v2 */
+    if ( is_db )
+        return 0x2000000;
+
+
+    /* AT THIS POINT, WE KNOW WE MUST HAVE A TABLE,
+       BUT WE DON'T HAVE PERFECT EVIDENCE OF VERSION,
+       SINCE THE SOFTWARE NODE IS NOT MANDATORY. */
+
+    /* if "schema" exists, it's v2 */
+    rc = KMetadataOpenNodeRead ( meta, & node, "schema" );
+    if ( rc == 0 )
+    {
+        KMDataNodeRelease ( node );
+        return 0x2000000;
+    }
+
+    /* if "col" exists, it's v1 */
+    rc = KMetadataOpenNodeRead ( meta, &node, "col" );
+    if ( rc == 0 )
+    {
+        KMDataNodeRelease ( node );
+        return 0x1000000;
+    }
+
+    /* appears to be v0 */
+    return 0;
 }
 
-/* OpenKDBManager
- *  returns a new reference to KDBManager used by VDBManager
+
+/* VDBManagerGetObjVersion
+ *  returns the vdb-version of the given object
  */
-LIB_EXPORT rc_t CC VDBManagerOpenKDBManagerRead ( const VDBManager *self, const KDBManager **kmgr )
+LIB_EXPORT rc_t CC VDBManagerGetObjVersion ( const VDBManager *self, ver_t * version, const char *path )
 {
     rc_t rc;
 
-    if ( kmgr == NULL )
+    if ( version == NULL )
         rc = RC ( rcVDB, rcMgr, rcAccessing, rcParam, rcNull );
     else
     {
         if ( self == NULL )
             rc = RC ( rcVDB, rcMgr, rcAccessing, rcSelf, rcNull );
+        else if ( path == NULL )
+            rc = RC ( rcVDB, rcMgr, rcAccessing, rcPath, rcNull );
+        else if ( path [ 0 ] == 0 )
+            rc = RC ( rcVDB, rcMgr, rcAccessing, rcPath, rcEmpty );
         else
         {
-            rc = KDBManagerAddRef ( self -> kmgr );
+            const KTable *tbl;
+            const KDatabase *db;
+            const KMetadata *meta;
+
+            int path_type = KDBManagerPathType ( self -> kmgr, path ) & ~ kptAlias;
+            switch ( path_type )
+            {
+            case kptDatabase:
+                rc = KDBManagerOpenDBRead ( self -> kmgr, & db, path );
+                if ( rc == 0 )
+                {
+                    rc = KDatabaseOpenMetadataRead ( db, & meta );
+                    KDatabaseRelease ( db );
+                }
+                break;
+            case kptTable:
+                rc = KDBManagerOpenTableRead ( self -> kmgr, & tbl, path );
+                if ( rc == 0 )
+                {
+                    rc = KTableOpenMetadataRead ( tbl, & meta );
+                    KTableRelease ( tbl );
+                }
+                break;
+
+            case kptPrereleaseTbl:
+                * version = 0;
+                return 0;
+
+            default:
+                rc = RC ( rcVDB, rcMgr, rcAccessing, rcPath, rcIncorrect );
+            }
+
             if ( rc == 0 )
             {
-                * kmgr = self -> kmgr;
+                * version = VDBManagerGetVersFromMeta ( meta, path_type == kptDatabase );
+                KMetadataRelease ( meta );
                 return 0;
             }
         }
 
-        * kmgr = NULL;
+        * version = 0;
     }
 
     return rc;
 }
+
+
+/* ListExternalSchemaModules
+ */
+LIB_EXPORT rc_t CC VDBManagerListExternalSchemaModules ( const VDBManager *self, KNamelist **listp )
+{
+    rc_t rc;
+
+    if ( listp == NULL )
+        rc = RC ( rcVDB, rcMgr, rcListing, rcParam, rcNull );
+    else
+    {
+        if ( self == NULL )
+            rc = RC ( rcVDB, rcMgr, rcListing, rcSelf, rcNull );
+        else
+        {
+            rc = VLinkerListExternalSchemaModules ( self -> linker, listp );
+            if ( rc == 0 )
+                return 0;
+        }
+
+        * listp = NULL;
+    }
+
+    return rc;
+}
+
+
+/* PathType
+ *  check the path type of an object/directory path.
+ *
+ *  this is an extension of the KDirectoryPathType ( see <kdb/manager.h> )
+ *  and will return the KDirectory values if a path type is not specifically
+ *  a VDB or KDB object.
+ */
+LIB_EXPORT int CC VDBManagerPathType ( const VDBManager * self,
+    const char *path, ... )
+{
+    int type;
+
+    va_list args;
+    va_start ( args, path );
+
+    type = VDBManagerVPathType ( self, path, args );
+
+    va_end ( args );
+
+    return type;
+}
+
+LIB_EXPORT int CC VDBManagerVPathType ( const VDBManager * self,
+    const char *path, va_list args )
+{
+    if ( self != NULL )
+        return KDBManagerVPathType ( self -> kmgr, path, args );
+
+    return kptBadPath;
+}
diff --git a/libs/vdb/dbmgr-priv.h b/libs/vdb/dbmgr-priv.h
index 310c7a8..aa1b36b 100644
--- a/libs/vdb/dbmgr-priv.h
+++ b/libs/vdb/dbmgr-priv.h
@@ -47,13 +47,6 @@
 #define KONST
 #endif
 
-#if _DEBUGGING && 0
-#define VDBM_PAGE_SIZE 256
-#elif _DEBUGGING && 0
-#define VDBM_PAGE_SIZE ( 256 * 1024 )
-#else
-#define VDBM_PAGE_SIZE ( 32 * 1024 )
-#endif
 
 #ifdef __cplusplus
 extern "C" {
@@ -69,27 +62,6 @@ struct VLinker;
 
 
 /*--------------------------------------------------------------------------
- * VDBMem
- *  a page of pooled memory
- */
-typedef struct VDBMem VDBMem;
-struct VDBMem
-{
-    DLNode n;
-    uint8_t page [ VDBM_PAGE_SIZE ];
-};
-
-#undef VDBM_PAGE_SIZE
-
-
-/* Release
- *  return memory block to pool
- *  or delete it if pool is already full
- */
-void CC VDBMemRelease ( DLNode *self, void *mgr );
-
-
-/*--------------------------------------------------------------------------
  * VDBManager
  *  handle to library
  */
@@ -108,13 +80,6 @@ struct VDBManager
     void *user;
     void ( CC * user_whack ) ( void *data );
 
-    /* memory pool, max buffers to keep, count in pool */
-    DLList mpool;
-    uint32_t plimit;
-    uint32_t pcount;
-    uint32_t mlimit; /* alloc'ed limit */ 
-    uint32_t mcount; /* alloc'ed count */
-
     /* open references */
     KRefcount refcount;
 };
@@ -135,13 +100,6 @@ rc_t VDBManagerSever ( const VDBManager *self );
 rc_t VDBManagerConfigPaths ( VDBManager *self, bool update );
 
 
-/* MakeMem
- *  pops a buffer from pool
- *  or allocates a new one on demand
- */
-rc_t VDBManagerMakeMem ( VDBManager *self, VDBMem **mem );
-
-
 /*--------------------------------------------------------------------------
  * generic whackers
  */
diff --git a/libs/vdb/dbmgr.c b/libs/vdb/dbmgr.c
index 753c804..2551b6b 100644
--- a/libs/vdb/dbmgr.c
+++ b/libs/vdb/dbmgr.c
@@ -90,11 +90,6 @@ LIB_EXPORT rc_t CC VDBManagerMakeRead ( const VDBManager **mgrp, const KDirector
                         {
                             mgr -> user = NULL;
                             mgr -> user_whack = NULL;
-                            DLListInit ( & mgr -> mpool );
-                            mgr -> mlimit = 0;
-                            mgr -> mcount = 0;
-                            mgr -> plimit = 0;
-                            mgr -> pcount = 0;
                             KRefcountInit ( & mgr -> refcount, 1, "VDBManager", "make-read", "vmgr" );
                             * mgrp = mgr;
                             return 0;
diff --git a/libs/vdb/delta_average.c b/libs/vdb/delta_average.c
new file mode 100644
index 0000000..a00e1eb
--- /dev/null
+++ b/libs/vdb/delta_average.c
@@ -0,0 +1,297 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <vdb/extern.h>
+
+#include <vdb/xform.h>
+#include <klib/rc.h>
+
+#include "xform-priv.h"
+#include "blob-priv.h"
+#include "blob-headers.h"
+#include "blob.h"
+#include "page-map.h"
+
+#include <sysalloc.h>
+
+#include <assert.h>
+#include <stdlib.h>
+
+
+/* Create
+ *
+ * Create a new blob.  A new data buffer is sized to
+ * 'element_count' * sizeof datatype; its contents are
+ * uninitialized.
+ */
+static
+rc_t VBlobCreateEncode ( VBlob **blobp, const VBlob *in, uint32_t max_rl_bytes,uint8_t *avg, uint32_t elem_bytes )
+{
+    rc_t rc = VBlobNew ( blobp, in -> start_id, in -> stop_id, "delta_average" );
+    if ( rc == 0 )
+    {
+        VBlob *blob = * blobp;
+        rc = PageMapAddRef ( in -> pm );
+	if(rc == 0) {
+		blob->pm = in -> pm ;
+		if(max_rl_bytes > 0){
+			rc = KDataBufferMake ( & blob -> data, in -> data . elem_bits, in -> data . elem_count );
+		} else {
+			rc = KDataBufferSub(&in->data, &blob->data, 0, UINT64_MAX);
+		}
+		if ( rc == 0 ){
+			rc = BlobHeadersCreateChild(in->headers, &blob->headers);
+			if ( rc == 0) {
+				VBlobHeader *hdr = BlobHeadersGetHdrWrite(blob->headers);
+				assert(hdr!=NULL);
+				if(hdr != 0){
+					int i;
+					VBlobHeaderSetVersion (hdr, 1);
+					rc = VBlobHeaderArgPushTail(hdr, max_rl_bytes);
+					assert(rc == 0);
+					rc = VBlobHeaderArgPushTail(hdr, elem_bytes);
+                                        assert(rc == 0);
+					for(i=0; i< max_rl_bytes; i++){
+						rc = VBlobHeaderOpPushTail(hdr,avg[i]);
+						assert(rc==0);
+					}
+					blob -> byte_order = in -> byte_order;
+					VBlobHeaderRelease(hdr);
+					return 0;
+				}
+			}
+		}
+		PageMapRelease( blob->pm);
+        }
+	VBlobRelease ( blob );
+        * blobp = NULL;
+    }
+    return rc;
+}
+
+static
+rc_t VBlobCreateDecode ( VBlob **blobp, const VBlob *in, uint32_t *max_rl_bytes,uint8_t **avg, uint32_t *elem_bytes)
+{
+    rc_t rc = VBlobNew ( blobp, in -> start_id, in -> stop_id, "undelta_average" );
+    if ( rc == 0 )
+    {
+        VBlob *blob = * blobp;
+        rc = PageMapAddRef ( in -> pm );
+	if(rc == 0) {
+		VBlobHeader *hdr;
+		blob->pm = in -> pm ;
+                blob->headers = (BlobHeaders *)BlobHeadersGetNextFrame(in->headers);
+		BlobHeadersAddRef(blob->headers);
+		hdr = BlobHeadersGetHeader(in->headers);
+		if(hdr || VBlobHeaderVersion(hdr)!=1) {
+			int64_t len;
+			int64_t eb;
+			rc = VBlobHeaderArgPopHead(hdr, &len);
+			if( rc == 0)
+				rc = VBlobHeaderArgPopHead(hdr, &eb);
+			if( rc == 0){
+				*max_rl_bytes=len;
+				*elem_bytes = eb;
+				if(len > 0){
+					rc = KDataBufferMake ( & blob -> data, in -> data . elem_bits, in -> data . elem_count );
+					if ( rc == 0){
+						*avg=malloc(len);
+						if(*avg){
+							int i;
+							for(i=0;i<len && rc == 0;i++){
+								rc = VBlobHeaderOpPopHead(hdr,(*avg)+i);
+							}
+							if(rc == 0){
+								VBlobHeaderRelease(hdr);
+								return 0;
+							} else {
+								rc =  RC(rcVDB, rcFunction, rcExecuting, rcHeader, rcCorrupt) ;
+							}
+						} else {
+							rc =  RC(rcVDB, rcFunction, rcExecuting, rcMemory, rcExhausted) ;
+						}
+					}
+				} else {
+					rc = KDataBufferSub(&in->data, &blob->data, 0, UINT64_MAX);
+					if(rc == 0){
+						VBlobHeaderRelease(hdr);
+						return 0;
+					}
+				}
+				VBlobHeaderRelease(hdr);
+			} else {
+				rc =  RC(rcVDB, rcFunction, rcExecuting, rcHeader, rcCorrupt) ;
+			}
+		} else {
+			rc =  RC(rcVDB, rcFunction, rcExecuting, rcHeader, rcCorrupt) ;
+		}
+		PageMapRelease( blob->pm);
+        }
+	VBlobRelease ( blob );
+        * blobp = NULL;
+    }
+    return rc;
+}
+
+static
+rc_t CC undelta_average ( void *self, const VXformInfo *info, int64_t row_id,
+    VBlob **rslt, uint32_t argc, const VBlob *argv [] )
+{
+    uint32_t  max_rl_bytes;
+    uint8_t   *avg = NULL;
+    uint32_t elem_bytes;
+    /* input blob - schema assures us that it is ready to go */
+    const VBlob *in = argv [ 0 ];
+  /* allocate output blob of same size */
+    rc_t rc = VBlobCreateDecode ( rslt, in,&max_rl_bytes,&avg,&elem_bytes );
+    if(rc == 0 && max_rl_bytes > 0){
+	uint8_t *dst = (*rslt)->data.base; /** destination pointer **/
+	uint8_t *src = in -> data.base;
+	int	i,j,k;
+	PageMap *pm  = in->pm;
+
+	for(i=j=0,src = in -> data.base;i<pm->leng_recs;i++){
+                row_count_t leng_run=pm->leng_run[i];
+                elem_count_t len = pm->length[i];
+                assert(len<=max_rl_bytes);
+                while(leng_run > 0){
+                        for(k=0;k<len*elem_bytes;k++,src++,dst++){
+                                dst[0] = avg[k] - src[0]; /** symmetrical to encode **/
+                        }
+                        assert(leng_run >= (pm->data_run?pm->data_run[j]:1));
+                        leng_run -= pm->data_run?pm->data_run[j]:1;
+			j++;
+                }
+        }
+
+    }
+    if(avg) free(avg);
+    return rc;
+}
+
+VTRANSFACT_BUILTIN_IMPL ( vdb_undelta_average, 1, 0, 0 )
+    ( const void *self, const VXfactInfo *info, VFuncDesc *rslt,
+      const VFactoryParams *cp, const VFunctionParams *dp )
+{
+    VFUNCDESC_INTERNAL_FUNCS ( rslt ) -> bfN = undelta_average;
+    rslt -> variant = vftBlobN;
+    return 0;
+}
+
+static
+rc_t CC delta_average ( void *self, const VXformInfo *info, int64_t row_id,
+    VBlob **rslt, uint32_t argc, const VBlob *argv [] )
+{
+    rc_t rc;
+    /* input blob - schema assures us that it is ready to go */
+    const VBlob *in = argv [ 0 ];
+    const PageMap *pm = in->pm; 
+    uint8_t     *src;
+    elem_count_t   min_row_len,max_row_len;
+    uint64_t	min_rl_bytes,max_rl_bytes;
+    uint32_t    *cnts;
+    uint32_t    elem_bytes;
+    int         i,j,k;
+    uint8_t	*avg=NULL;
+    uint64_t    sum_rle;
+    uint8_t	last;
+
+    if(pm->row_count < 256 || (in->data.elem_bits & 7)!=0){
+	return VBlobCreateEncode ( rslt, in, 0,NULL,0 );
+    }
+    elem_bytes = in->data.elem_bits >> 3;
+    PageMapRowLengthRange(pm,&min_row_len,&max_row_len);
+    if(max_row_len > 1024){
+	return VBlobCreateEncode ( rslt, in, 0,NULL,0 );
+    }
+    /*** rescale to bytes **/
+    min_rl_bytes = (min_row_len * in->data.elem_bits) >> 3;
+    max_rl_bytes = (max_row_len * in->data.elem_bits) >> 3;
+
+    cnts=calloc(sizeof(*cnts),256*max_rl_bytes); /** computing counts of values **/
+    avg=malloc(max_rl_bytes);
+
+    /** collect sums and averages ***/
+    /** using tight loop instead of iterators **/
+    for(i=j=0,src = in -> data.base, sum_rle=0,last=0;i<pm->leng_recs;i++){
+	row_count_t leng_run=pm->leng_run[i];
+	elem_count_t len = pm->length[i];
+	assert(len<=max_rl_bytes);
+	while(leng_run > 0){
+		for(k=0;k<len*elem_bytes;k++,src++){
+			if(last==src[0]) sum_rle++;
+			cnts[256*k+src[0]]++;
+			last=src[0];
+		}
+		assert(leng_run >= (pm->data_run?pm->data_run[j]:1));
+		leng_run -= pm->data_run?pm->data_run[j]:1;
+		j++;
+	}
+    }
+    if(sum_rle * 10 > elem_bytes * in->data.elem_count * 3){/** total number of repetitions is high - leave it for zlib RLE ***/
+        free(cnts);
+        free(avg);
+        return VBlobCreateEncode(rslt,in,0,NULL,0);
+    }
+
+    for(i=0;i<max_rl_bytes;i++){
+	avg[i] = 0;
+	for(j=1;j<256;j++){
+		if(cnts[256*i+j] > cnts[256*i+avg[i]]){
+			avg[i]=j; 
+		}
+	}
+    }
+    rc = VBlobCreateEncode ( rslt, in, max_rl_bytes,avg,elem_bytes );
+    if (rc == 0 ){
+	uint8_t *dst = (*rslt)->data.base; /** destination pointer **/
+	for(i=j=0,src = in -> data.base;i<pm->leng_recs;i++){
+		row_count_t leng_run=pm->leng_run[i];
+		elem_count_t len = pm->length[i];
+		assert(len<=max_rl_bytes);
+		while(leng_run > 0){
+			for(k=0;k < len*elem_bytes;k++,src++,dst++){
+				dst[0] = avg[k] - src[0]; /** will do it in this direction **/
+			}
+			assert(leng_run >= (pm->data_run?pm->data_run[j]:1));
+			leng_run -= pm->data_run?pm->data_run[j]:1;
+			j++;
+		}
+	}
+     }
+    if(cnts) free(cnts);
+    if(avg)  free(avg);
+    return rc;
+}
+
+VTRANSFACT_BUILTIN_IMPL ( vdb_delta_average, 1, 0, 0 )
+    ( const void *self, const VXfactInfo *info, VFuncDesc *rslt,
+      const VFactoryParams *cp, const VFunctionParams *dp )
+{
+    VFUNCDESC_INTERNAL_FUNCS ( rslt ) -> bfN = delta_average;
+    rslt -> variant = vftBlobN;
+    return 0;
+}
diff --git a/libs/vdb/libvdb.vers b/libs/vdb/libvdb.vers
index 530cdd9..2714f53 100644
--- a/libs/vdb/libvdb.vers
+++ b/libs/vdb/libvdb.vers
@@ -1 +1 @@
-2.2.4
+2.6.4
diff --git a/libs/vdb/libvdb.vers.h b/libs/vdb/libvdb.vers.h
deleted file mode 100644
index 926364c..0000000
--- a/libs/vdb/libvdb.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBVDB_VERS 0x02020004
diff --git a/libs/vdb/libwvdb.vers b/libs/vdb/libwvdb.vers
index 530cdd9..2714f53 100644
--- a/libs/vdb/libwvdb.vers
+++ b/libs/vdb/libwvdb.vers
@@ -1 +1 @@
-2.2.4
+2.6.4
diff --git a/libs/vdb/libwvdb.vers.h b/libs/vdb/libwvdb.vers.h
deleted file mode 100644
index e22dd0f..0000000
--- a/libs/vdb/libwvdb.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBWVDB_VERS 0x02020004
diff --git a/libs/vdb/linker-cmn.c b/libs/vdb/linker-cmn.c
index a1ed68e..a68e6de 100644
--- a/libs/vdb/linker-cmn.c
+++ b/libs/vdb/linker-cmn.c
@@ -34,6 +34,7 @@
 
 #include <kfs/directory.h>
 #include <kfs/dyload.h>
+#include <kfs/kfs-priv.h>
 #include <klib/symbol.h>
 #include <klib/symtab.h>
 #include <klib/rc.h>
@@ -619,3 +620,27 @@ rc_t VLinkerFindUntyped ( VLinker *self, const KDlset *libs,
     }
     return rc;
 }
+
+
+/* ListExternalSchemaModules
+ */
+rc_t VLinkerListExternalSchemaModules ( const VLinker *self, struct KNamelist **listp )
+{
+    rc_t rc;
+
+    assert ( listp != NULL );
+    if ( self == NULL )
+        rc = RC ( rcVDB, rcDylib, rcListing, rcSelf, rcNull );
+    else
+    {
+        KDlset *libs;
+        rc = VLinkerOpen ( self, & libs );
+        if ( rc == 0 )
+        {
+            rc = KDlsetList ( libs, listp );
+            KDlsetRelease ( libs );
+        }
+    }
+
+    return rc;
+}
diff --git a/libs/vdb/linker-int.c b/libs/vdb/linker-int.c
index afb8886..d1a614f 100644
--- a/libs/vdb/linker-int.c
+++ b/libs/vdb/linker-int.c
@@ -34,6 +34,7 @@
 #include <klib/token.h>
 #include <klib/symtab.h>
 #include <klib/symbol.h>
+#include <klib/out.h>
 #include <klib/rc.h>
 #include <sysalloc.h>
 
@@ -54,6 +55,8 @@ extern VTRANSFACT_DECL ( vdb_merge );
 extern VTRANSFACT_DECL ( vdb_split );
 extern VTRANSFACT_DECL ( vdb_transpose );
 extern VTRANSFACT_DECL ( vdb_detranspose );
+extern VTRANSFACT_DECL ( vdb_delta_average );
+extern VTRANSFACT_DECL ( vdb_undelta_average );
 extern VTRANSFACT_DECL ( meta_read );
 extern VTRANSFACT_DECL ( meta_value );
 extern VTRANSFACT_DECL ( meta_attr_read );
@@ -81,15 +84,13 @@ VTRANSFACT_BUILTIN_IMPL ( vdb_select, 1, 0, 0 ) ( const void *self,
 
 /* temporary silly stuff
  */
-#include <stdio.h>
-#include "fmtdef.h"
 
 static
 rc_t CC hello_func ( void *self, const VXformInfo *info, int64_t row_id,
     VRowResult *rslt, uint32_t argc, const VRowData argv [] )
 {
     char *func_hello = self;
-    printf ( "%s - row id %" LD64 "\n", func_hello, row_id );
+    OUTMSG (( "%s - row id %ld\n", func_hello, row_id ));
     return 0;
 }
 
@@ -114,7 +115,7 @@ VTRANSFACT_BUILTIN_IMPL ( vdb_hello, 1, 0, 0 ) ( const void *self,
     rslt -> u . rf = hello_func;
     rslt -> variant = vftRow;
 
-    printf ( "%s - %u factory params, %u function params\n", fact_hello, cp -> argc, dp -> argc );
+    OUTMSG (( "%s - %u factory params, %u function params\n", fact_hello, cp -> argc, dp -> argc ));
     return 0;
 }
 
@@ -208,6 +209,8 @@ rc_t VLinkerInitFactoriesRead ( VLinker *self,  KSymTable *tbl, const SchemaEnv
         { vdb_split, "vdb:split" },
         { vdb_transpose, "vdb:transpose" },
         { vdb_detranspose, "vdb:detranspose" },
+        { vdb_delta_average, "vdb:delta_average" },
+        { vdb_undelta_average, "vdb:undelta_average" },
         { meta_read, "meta:read" },
         { meta_value, "meta:value" },
         { meta_attr_read, "meta:attr:read" },
diff --git a/libs/vdb/linker-priv.h b/libs/vdb/linker-priv.h
index fdf6566..6144cd5 100644
--- a/libs/vdb/linker-priv.h
+++ b/libs/vdb/linker-priv.h
@@ -65,6 +65,7 @@ extern "C" {
  */
 struct KSymbol;
 struct KSymTable;
+struct KNamelist;
 struct KDyld;
 struct KDlset;
 struct KSymAddr;
@@ -207,6 +208,12 @@ rc_t VLinkerFindUntyped ( VLinker *self, struct KDlset const *libs,
     VUntypedTableTest *func, struct SFunction const *proto );
 
 
+/* ListExternalSchemaModules
+ */
+rc_t VLinkerListExternalSchemaModules ( const VLinker *self,
+    struct KNamelist **list );
+
+
 /*--------------------------------------------------------------------------
  * LFactory
  *  describes an external C function factory
diff --git a/libs/vdb/meta-attr-write.c b/libs/vdb/meta-attr-write.c
index 5cbdd64..2a2421c 100644
--- a/libs/vdb/meta-attr-write.c
+++ b/libs/vdb/meta-attr-write.c
@@ -27,13 +27,13 @@
 #include <vdb/extern.h>
 
 #include <klib/defs.h>
+#include <klib/printf.h>
 #include <klib/rc.h>
 #include <vdb/table.h>
 #include <vdb/xform.h>
 #include <vdb/schema.h>
 #include <kdb/meta.h>
 #include <klib/data-buffer.h>
-#include <fmtdef.h>
 #include <sysalloc.h>
 #include "xform-priv.h"
 
@@ -56,18 +56,21 @@ static void CC self_whack( void *vp ) {
     free( vp );
 }
 
-static rc_t meta_attr_write_fmt( self_t *self, const char *fmt, ... ) {
-    int n;
+static rc_t meta_attr_write_fmt( self_t *self, const char *fmt, ... )
+{
+    rc_t rc;
+    size_t n;
     char sbuf[4096];
 
     va_list va;
     va_start(va, fmt);
-    n = vsnprintf(sbuf, sizeof(sbuf), fmt, va);
+    rc = string_vprintf(sbuf, sizeof(sbuf), & n, fmt, va);
     va_end(va);
     
-    if (n < 0 || n >= sizeof sbuf)
-        return RC(rcVDB, rcFunction, rcExecuting, rcParam, rcExcessive);
-    return KMDataNodeWriteAttr(self->node, self->name, sbuf);
+    if ( rc == 0 )
+        rc = KMDataNodeWriteAttr(self->node, self->name, sbuf);
+
+    return rc;
 }
 
 static
@@ -326,7 +329,7 @@ rc_t CC meta_attr_write_I64(
         return rc;
     
     *(int64_t *)rslt->data->base = value;
-    rc = meta_attr_write_fmt(self, "%" LD64, value);
+    rc = meta_attr_write_fmt(self, "%ld", value);
     if (rc)
         return rc;
     
@@ -355,7 +358,7 @@ rc_t CC meta_attr_write_U64(
         return rc;
     
     *(uint64_t *)rslt->data->base = value;
-    rc = meta_attr_write_fmt(self, "%" LU64, value);
+    rc = meta_attr_write_fmt(self, "%lu", value);
     if (rc)
         return rc;
     
diff --git a/libs/vdb/page-map.c b/libs/vdb/page-map.c
index 847c151..08c0066 100644
--- a/libs/vdb/page-map.c
+++ b/libs/vdb/page-map.c
@@ -34,8 +34,6 @@
 
 #include <klib/pack.h>
 #include <klib/vlen-encode.h>
-#include <klib/refcount.h>
-#include <klib/data-buffer.h>
 #include <sysalloc.h>
 #include "page-map.h"
 
@@ -51,129 +49,475 @@
  * I.e. if two identical rows are stored sequentially 
  */
 
-typedef uint32_t pm_size_t;
 
-struct PageMap {
-    /* memory allocation object for length[], leng_run[], data_run[] */
-    KDataBuffer cstorage;
-    /* memory allocation object for explength[], exp_offset[] */
-    KDataBuffer estorage;
-    
-    /* array of row lengths
-     * has leng_recs elements
-     * is sized to reserve_leng elements
-     * == storage.base
-     */
-    elem_count_t *length;
-    
-    /* array of run lengths of row lengths
-     * has leng_recs elements
-     * is sized to reserve_leng elements
-     * == length + reserve_leng
-     */
-    row_count_t *leng_run;
-    
-    /* array of repeat counts of data
-     * has data_recs elements
-     * is sized to reserve_data elements
-     * == leng_run + reserve_leng
-     */
-    row_count_t *data_run;
-
-    elem_count_t *exp_length;
-    elem_count_t *exp_offset;
-    row_count_t  *exp_repeat;
-    pm_size_t    exp_length_last; /* index of last length expanded */
-    pm_size_t    exp_offset_last; /* index of last offset expanded */
-    elem_count_t exp_offset_next;
-    
-    pm_size_t leng_recs;     /* number of valid elements in length[] and leng_run[] */
-    pm_size_t data_recs;     /* number of valid elements in data_run[] */
-    pm_size_t reserve_leng;  /* number of allocated elements in length[] and leng_run[] */
-    pm_size_t reserve_data;  /* number of allocated elements in data_run[] */
-    pm_size_t start_valid;   /* the expanded array contains valid data upto start_valid */
-    row_count_t row_count;     /* total number of rows in page map */
-    KRefcount refcount;
-};
 
 #define VALIDATE_PAGEMAPS 0
+#define PAGEMAP_STATISTICS 0
+#if PAGEMAP_STATISTICS
+static struct {
+    size_t currentFootprint;
+    size_t maxFootprint;
+    size_t currentWaste;
+    size_t maxWaste;
+    unsigned alive;
+    unsigned maxAlive;
+    unsigned create;
+    unsigned createStatic;
+    unsigned createFixedRow;
+    unsigned createSingle;
+    unsigned grows;
+    unsigned expands;
+    unsigned expandCalls;
+    unsigned appends;
+} pm_stats;
+#endif
 
 elem_count_t PageMapLastLength(const PageMap *cself) {
     return cself->leng_recs > 0 ? cself->length[cself->leng_recs - 1] : 0;
 }
 
-static rc_t PageMapExpand( const PageMap *cself, row_count_t upto ) {
-    if (cself->start_valid < upto) {
-        PageMap *self = (PageMap *)cself;
-        elem_count_t *offset;
-        row_count_t *repeat;
-        pm_size_t i;
-        pm_size_t j;
-        pm_size_t m;
-        
-        if (cself->estorage.elem_count < cself->row_count) {
-            rc_t rc;
-            
-            self->exp_length_last = self->exp_offset_last = self->exp_offset_next = 0;
-            self->start_valid = 0;
-            
-            self->estorage.elem_bits = 32 * 3;
-            rc = KDataBufferResize(&self->estorage, cself->row_count * 2);
-            if (rc) return rc;
-            
-            self->exp_offset = self->estorage.base;
-            self->exp_repeat = &self->exp_offset[self->estorage.elem_count];
-            self->exp_length = &self->exp_repeat[self->estorage.elem_count];
-        }
-        offset = self->exp_offset;
-        repeat = self->exp_repeat;
-        
-        if (cself->leng_recs > 1) {
-            elem_count_t *length = self->exp_length;
-            elem_count_t n = cself->exp_offset_next;
-            
-            j = cself->start_valid;
-            for (i = cself->exp_length_last; i != cself->leng_recs; ++i) {
-                for (m = 0; m != cself->leng_run[i]; ++m, ++j) {
-                    length[j] = cself->length[i];
-                }
-            }
-            
-            j = cself->start_valid;
-            for (i = cself->exp_offset_last; i != cself->data_recs; ++i) {
-                elem_count_t temp = n;
-                
-                n += length[j];
-                for (m = 0; m != cself->data_run[i]; ++m, ++j) {
-                    offset[j] = temp;
-                    repeat[j] = cself->data_run[i] - m;
-                }
-            }
-            self->exp_offset_next = n; /* where to start next time */
+
+
+static rc_t PageMapRegionExpand(PageMap *self,pm_expand_region_type_t TYPE,row_count_t numrows,elem_count_t length,elem_count_t data_offset)
+{
+	rc_t rc;
+	if(   self->exp_rgn_last == 0           /** not started **/
+	   || self->exp_rgn_last->type != TYPE 	/** another type **/
+           || (TYPE == PM_REGION_EXPAND_SAMEDATA && self->exp_rgn_last->data_offset != data_offset)  /** not the same data */
+           || (TYPE!=PM_REGION_EXPAND_FULL && self->exp_rgn_last->length != length) /** all non-full types are length-dependant**/
+		){ /** New region **/
+		self->exp_rgn_cnt++;
+		rc = KDataBufferResize(&self->istorage, self->exp_rgn_cnt);
+		if(rc) return rc;
+
+		self->exp_rgn_last = (PageMapRegion *)self->istorage.base + self->exp_rgn_cnt -1;
+		self->exp_rgn_last->type=TYPE;
+		self->exp_rgn_last->start_row=self->exp_row_last;
+		self->exp_rgn_last->data_offset = data_offset;
+		self->exp_rgn_last->length = length;
+		self->exp_rgn_last->numrows = numrows;
+		self->exp_rgn_last->expanded = false;
+ 	} else { /** continue with existing region **/
+		if(TYPE == PM_REGION_EXPAND_FULL){
+			row_count_t i;
+			elem_count_t *base;
+			uint64_t old_cnt = self->dstorage.elem_count;
+			uint64_t new_cnt = old_cnt + 2*numrows;
+			if(!self->exp_rgn_last->expanded){/*** need to start expansion ***/
+				new_cnt += 2*self->exp_rgn_last->numrows; /*** need to catch up **/
+				rc = KDataBufferResize(&self->dstorage, new_cnt);
+				if(rc) return rc;
+				base = (elem_count_t *)self->dstorage.base + old_cnt;
+				for(i=0;i<self->exp_rgn_last->numrows;i++){
+					base[2*i] = self->exp_rgn_last->length;
+					base[2*i+1] = self->exp_rgn_last->data_offset;
+				}
+				self->exp_rgn_last->data_offset = old_cnt;
+				self->exp_rgn_last->expanded=true;
+			} else {
+				rc = KDataBufferResize(&self->dstorage, new_cnt);
+				if(rc) return rc;
+				base = (elem_count_t *)self->dstorage.base + self->exp_rgn_last->data_offset;
+			}
+			base += 2*self->exp_rgn_last->numrows;
+			for(i=0;i<numrows;i++){
+				base[2*i]   = length;
+				base[2*i+1] = data_offset;
+			}
+		} else if(TYPE == PM_REGION_EXPAND_SAMELEN){
+			 row_count_t i;
+                        elem_count_t *base;
+                        uint64_t old_cnt = self->dstorage.elem_count;
+                        uint64_t new_cnt = old_cnt + numrows;
+                        if(!self->exp_rgn_last->expanded){/*** need to start expansion ***/
+                                new_cnt += self->exp_rgn_last->numrows; /*** need to catch up **/
+                                rc = KDataBufferResize(&self->dstorage, new_cnt);
+                                if(rc) return rc;
+                                base = (elem_count_t *)self->dstorage.base + old_cnt;
+                                for(i=0;i<self->exp_rgn_last->numrows;i++){
+                                        base[i] = self->exp_rgn_last->data_offset;
+                                }
+                                self->exp_rgn_last->data_offset = old_cnt;
+				self->exp_rgn_last->expanded=true;
+                        } else {
+				rc = KDataBufferResize(&self->dstorage, new_cnt);
+				if(rc) return rc;
+                                base = (elem_count_t *)self->dstorage.base + self->exp_rgn_last->data_offset;
+                        }
+			base += self->exp_rgn_last->numrows;
+                        for(i=0;i<numrows;i++){
+                                base[i]   = data_offset;
+                        }
+		}
+		self->exp_rgn_last->numrows += numrows;
+	}
+	return 0;
+}
+
+rc_t PageMapPreExpandFull(const PageMap *cself, row_count_t upto) /*** mostly for use as a temporary pagemap ***/
+{
+	rc_t    rc=0;
+	if(upto > 0){
+		PageMap *self = (PageMap *)cself;
+		assert(self->exp_rgn_last == 0);
+		rc = KDataBufferResize(&self->istorage, 1); /** one and only one pagemap **/
+		if(rc) return rc;
+		
+		self->exp_rgn_last = (PageMapRegion *)self->istorage.base + self->exp_rgn_cnt;
+		self->exp_rgn_cnt = ++self->exp_dr_last;
+
+		self->exp_rgn_last->data_offset = 0;
+		rc=KDataBufferResize(&self->dstorage, upto*2);
+		if(rc) return rc;
+		self->exp_rgn_last->start_row   = 0;
+		self->exp_rgn_last->numrows = 0;
+		self->exp_rgn_last->type = PM_REGION_EXPAND_FULL;
+		self->exp_rgn_last->expanded = true;
+		self->pre_exp_row_count = upto;
+	}
+	return rc;
+}
+
+rc_t PageMapExpandFull(const PageMap *cself)
+{
+	rc_t rc;
+	PageMap *self = (PageMap *)cself;
+	if(self->leng_recs == 1){ 
+		if(   self->data_recs == 1  /* static */
+                   || self->random_access ){ 
+			return 0;
+		} else if(self->data_recs == self->row_count && !self->random_access){ /** equidistant **/
+			rc=PageMapRegionExpand(self,PM_REGION_EXPAND_EQUIDISTANT,self->row_count,self->length[0],0);
+			if(rc) return rc;
+			self->exp_data_offset_last += self->row_count*self->length[0];
+			self->exp_row_last = self->row_count ;
+			self->exp_dr_last =  self->row_count;
+			self->exp_lr_last =  1;
+			self->exp_lr_used =  self->row_count;
+			return  0;
+		}
         }
-        else {
-            j = cself->start_valid;
-            for (i = cself->exp_offset_last; i != cself->data_recs; ++i) {
-                for (m = 0; m != cself->data_run[i]; ++m, ++j) {
-                    offset[j] = i * cself->length[0];
-                    repeat[j] = cself->data_run[i] - m;
-                }
-            }
+	return 0;
+/*** OTHER VARIANTS  ***
+	return PageMapExpand(cself, cself->row_count);
+	return PageMapExpand(cself, cself->row_count < 1024?cself->row_count:1024);
+******************/
+}
+
+rc_t PageMapExpand(const PageMap *cself, row_count_t upto)
+{
+	rc_t	rc;
+        PageMap *self = (PageMap *)cself;
+#define LENG_RUN_TRIGGER 8
+#define DATA_RUN_TRIGGER 8
+#define EQUI_RUN_TRIGGER 8
+	if( self->leng_recs == 1 && self->row_count > self->data_recs*12/10 && !self->random_access){ /*** Shortcut to make tight loop ***/
+
+		if(self->exp_rgn_last == 0){
+			rc = KDataBufferResize(&self->istorage, self->data_recs);
+			if(rc) return rc;
+		}
+		self->exp_rgn_last = (PageMapRegion *)self->istorage.base + self->exp_rgn_cnt;
+		while(self->exp_dr_last < self->data_recs && self->exp_row_last <= upto + 128){
+			self->exp_rgn_last->start_row   = self->exp_row_last;
+			self->exp_rgn_last->data_offset = self->length[0]*self->exp_dr_last;
+			self->exp_rgn_last->numrows = self->data_run?self->data_run[self->exp_dr_last]:1;
+			self->exp_row_last += self->data_run?self->data_run[self->exp_dr_last]:1;
+			self->exp_rgn_last->type = PM_REGION_EXPAND_SAMEDATA;
+			self->exp_rgn_last->length      = self->length[0];
+			self->exp_rgn_last->expanded = false;
+			self->exp_dr_last  ++;
+			self->exp_rgn_last ++;
+		}
+		self->exp_rgn_cnt = self->exp_dr_last;
+	} else for(;self->exp_lr_last < self->leng_recs && self->exp_dr_last < self->data_recs && self->exp_row_last <= upto + 128;){
+		row_count_t leng_run=self->leng_run[self->exp_lr_last] - self->exp_lr_used;
+		elem_count_t length =self->length[self->exp_lr_last];
+		if(leng_run == 0) {
+			self->exp_lr_last++;
+			self->exp_lr_used=0;
+			continue;
+		}
+		if(leng_run >= LENG_RUN_TRIGGER && !self->random_access){
+			while(leng_run > 0 && self->exp_row_last <= upto + 128){
+				row_count_t data_run=self->data_run?self->data_run[self->exp_dr_last]:1;
+				assert(leng_run >= data_run);/** data runs should have the same lengths **/
+				assert(data_run > 0);
+				if(data_run >= DATA_RUN_TRIGGER){
+					rc=PageMapRegionExpand(self,PM_REGION_EXPAND_SAMEDATA,data_run, length,self->exp_data_offset_last);
+					if(rc) return rc;
+					assert(leng_run >= data_run);
+					leng_run -= data_run;
+					self->exp_lr_used += data_run;
+					self->exp_row_last+= data_run; 
+					self->exp_dr_last++;
+					self->exp_data_offset_last += length;
+				} else if( /**** quick check if all remaining rows are equidistant ****/
+					     self->exp_lr_last == self->leng_recs - 1 /*** last leng_run ***/
+					  && self->row_count - self->exp_row_last == self->data_recs - self->exp_dr_last /*** all remaining data_runs are 1 ***/
+					  && self->row_count - self->exp_row_last > EQUI_RUN_TRIGGER){ 
+						assert( leng_run == self->row_count - self->exp_row_last);
+						assert(data_run == 1);
+						rc=PageMapRegionExpand(self,PM_REGION_EXPAND_EQUIDISTANT,leng_run, length,self->exp_data_offset_last);
+						if(rc) return rc;
+						self->exp_data_offset_last += leng_run*length;
+						self->exp_row_last = self->row_count ;
+						self->exp_dr_last =  self->data_recs;
+						self->exp_lr_last = self->leng_recs;
+						self->exp_lr_used += leng_run;
+						leng_run = 0;
+						
+				} else {
+					if( data_run == 1){
+						row_count_t data_run_unique;
+						for( data_run_unique =0;
+						     data_run_unique < leng_run && ((self->data_run==NULL)||self->data_run[self->exp_dr_last+data_run_unique]==1);
+						     data_run_unique++){}
+						if(data_run_unique >= EQUI_RUN_TRIGGER){
+							rc=PageMapRegionExpand(self,PM_REGION_EXPAND_EQUIDISTANT,data_run_unique,length,self->exp_data_offset_last);
+							self->exp_dr_last += data_run_unique;
+							self->exp_data_offset_last += data_run_unique*length;
+							assert(leng_run >= data_run_unique);
+							leng_run -= data_run_unique;
+						        self->exp_lr_used  += data_run_unique;
+							self->exp_row_last += data_run_unique;
+						} else while(data_run_unique){
+							rc=PageMapRegionExpand(self,PM_REGION_EXPAND_SAMELEN,data_run,length,self->exp_data_offset_last);
+							if(rc) return rc;
+							assert(leng_run > 0);
+							leng_run --;
+							self->exp_lr_used ++;
+							self->exp_row_last++;
+							self->exp_dr_last++;
+							self->exp_data_offset_last += length;
+							data_run_unique--;
+						}
+					} else {
+						rc=PageMapRegionExpand(self,PM_REGION_EXPAND_SAMELEN,data_run,length,self->exp_data_offset_last);
+						if(rc) return rc;
+						assert(leng_run >= data_run);
+						leng_run -= data_run;
+						self->exp_lr_used += data_run;
+						self->exp_row_last+= data_run;
+						self->exp_dr_last++;
+						self->exp_data_offset_last += length;
+					}
+				}
+			}
+			assert(self->exp_row_last <= self->row_count);
+		} else {
+			while(leng_run > 0){
+				row_count_t data_run=cself->data_run?cself->data_run[self->exp_dr_last]:1;
+				assert(leng_run >= data_run);/** data runs should have the same lengths **/
+				if(self->random_access){
+					rc=PageMapRegionExpand(self,PM_REGION_EXPAND_FULL,data_run,length,self->data_offset[self->exp_row_last]);
+					self->exp_data_offset_last  = self->data_offset[self->exp_row_last] + length;
+				} else {
+					rc=PageMapRegionExpand(self,PM_REGION_EXPAND_FULL,data_run,length,self->exp_data_offset_last);
+					self->exp_data_offset_last += length;
+				}
+				if(rc) return rc;
+				self->exp_row_last += data_run;
+				assert(leng_run >= data_run);
+				leng_run -= data_run;
+				self->exp_lr_used += data_run;
+				self->exp_dr_last++;
+			}
+		}
+	}
+	return 0;
+}
+
+static rc_t PageMapFindRegion(const PageMap *cself,uint64_t row,PageMapRegion **pmr)
+{
+	/*** in PageMap rows are 0-based **/
+	rc_t	rc;
+	pm_size_t left,right,i_rgn;
+	if(row >= cself->row_count )
+		return  RC (rcVDB, rcPagemap, rcSearching, rcRow, rcNotFound );
+	if(cself -> exp_row_last <= row){
+		rc=PageMapExpand(cself,row);
+		if(rc) return rc;
+	}
+
+	if(cself->exp_rgn_cnt > 1){
+		i_rgn = cself->i_rgn_last;
+		left = 0;
+		right = cself->exp_rgn_cnt - 1;
+		while(right > left){
+			PageMapRegion*  rgn=  (PageMapRegion*)cself->istorage.base + i_rgn;
+			assert(i_rgn < cself->exp_rgn_cnt);
+			if(row < rgn->start_row){
+				right = i_rgn-1;
+				i_rgn  = (left + right) / 2;
+			} else if(row == rgn->start_row + rgn->numrows){ /*** special case for positive sequentual scans ***/
+				i_rgn++;
+			} else if(row > rgn->start_row + rgn->numrows){
+				left = i_rgn+1;
+				i_rgn =  (left + right + 1) / 2;
+			} else {
+				break;
+			}
+		}
+	} else {
+		i_rgn = 0;
+	}
+	{
+		PageMap *self = (PageMap *)cself;
+		self->i_rgn_last = i_rgn;
+		self->rgn_last = (PageMapRegion*)self->istorage.base+cself->i_rgn_last;
+	}
+	assert(cself->rgn_last->start_row <= row);
+	assert(cself->rgn_last->start_row + cself->rgn_last->numrows > row);
+	if(pmr) *pmr=(PageMapRegion*)cself->istorage.base + i_rgn;
+	return 0;
+}
+
+static rc_t PageMapRegionGetData(const PageMapRegion *cself,const elem_count_t *exp_base,uint64_t row,uint32_t * data_offset,uint32_t * data_length,uint32_t * repeat_count)
+{
+	if(row < cself->start_row || row >= cself->start_row + cself->numrows)
+		return  RC (rcVDB, rcPagemap, rcSearching, rcRow, rcNotFound );
+
+	if(data_offset != NULL || data_length != NULL || repeat_count != NULL){
+		if(!cself->expanded){
+			if(data_length) *data_length=cself->length;
+			if(data_offset){
+				*data_offset=cself->data_offset;
+				if(cself->type == PM_REGION_EXPAND_EQUIDISTANT){
+					*data_offset += cself->length * (row - cself->start_row);
+				}
+			}
+			if(repeat_count) {
+				if(cself->type == PM_REGION_EXPAND_EQUIDISTANT) *repeat_count=1;
+				else *repeat_count = cself->numrows + cself->start_row - row;
+			}
+		} else switch(cself->type){
+			case PM_REGION_EXPAND_FULL:
+				{
+					row_count_t  i = row - cself->start_row;
+					exp_base += cself->data_offset;
+					if(data_length)  *data_length = exp_base[2*i];
+					if(data_offset)  *data_offset = exp_base[2*i+1];
+					if(repeat_count){
+						int j;
+						for(j=i+1;   j<cself->numrows
+							  && exp_base[2*i]   == exp_base[2*j]
+							  && exp_base[2*i+1] == exp_base[2*j+1];j++){}
+						*repeat_count = j-i;
+					}
+				}
+				break;
+			case PM_REGION_EXPAND_SAMELEN:
+				if(data_length) *data_length=cself->length;
+				if(data_offset || repeat_count){
+					row_count_t  i = row - cself->start_row;
+					exp_base += cself->data_offset;
+					if(data_offset) *data_offset = exp_base[i];
+					if(repeat_count){
+						int j;
+						for(j=i+1;j<cself->numrows && exp_base[i] == exp_base[j];j++){}
+						*repeat_count = j-i;
+					}
+				}
+				break;
+			default: /*** should not happen to anything but 2 above **/
+				return RC (rcVDB, rcPagemap, rcSearching, rcData, rcInconsistent ); 
+		}
+	}
+	return 0;
+}
+
+/*** This is a heavy-weight function which gets data by integration all the time - useful for debugging ****/
+static rc_t PageMapGetData_HW(const PageMap *cself,uint64_t row,uint32_t * data_offset,uint32_t * data_length,uint32_t * repeat_count)
+{
+	if(row >= cself->row_count)
+		return  RC (rcVDB, rcPagemap, rcSearching, rcRow, rcNotFound );
+	if(data_offset != NULL || data_length != NULL || repeat_count != NULL){
+		uint64_t i,j,r;
+		uint32_t dto,dtl,dtr;
+		uint32_t leng_run,data_run;
+		r=dto=i=j=0;
+		leng_run=cself->leng_run[0];
+		while(1){
+			dtl  = cself->length[i];
+			data_run=cself->data_run?cself->data_run[j]:1;
+			j++;
+			r+= data_run;
+			if(r > row){
+				dtr = r - row;
+				 break;
+			}
+			dto += dtl;
+			leng_run -= data_run;
+			if(leng_run == 0){
+				i++;
+				leng_run=cself->leng_run[i];
+			}
+		}
+		if(data_length)   *data_length=dtl;
+		if(data_offset)   *data_offset=dto;
+		if(repeat_count)  *repeat_count=dtr;
+	}
+	return 0;
+}
+/*** another function to help debugging ***/
+static int DEBUG_PageMapPrintSum(const PageMap *pm, uint32_t row)
+{
+	int i,r;
+	for(i=0,r=row; i < pm->data_recs && r > 0;r-=pm->data_run?pm->data_run[i]:1,i++){}
+	printf("Data recs= <%d>, rows_left = <%d>\n",i,r);
+	for(i=0,r=row; i < pm->leng_recs && r >0;r-=pm->leng_run[i++]){}
+	printf("Leng recs= <%d>, rows_left = <%d>\n",i,r);
+	return 0;
+}
+rc_t PageMapFindRow(const PageMap *cself,uint64_t row,uint32_t * data_offset,uint32_t * data_length,uint32_t * repeat_count)
+{
+	rc_t	rc=0;
+	PageMapRegion *pmr;
+
+	if(cself->data_recs == 1){ /** static **/
+		if(repeat_count) *repeat_count = UINT32_MAX;
+		if(data_offset)  *data_offset = 0;
+		if(data_length)  *data_length = cself->length[0];
+		return 0;
         }
-        self->exp_length_last = cself->leng_recs; /* where to start next time */
-        self->exp_offset_last = cself->data_recs; /* where to start next time */
-        
-        self->start_valid = j;
-    }
-    return 0;
+	if(cself->random_access && cself->leng_recs == 1){
+		if(row >= cself->data_recs)
+			return RC(rcVDB, rcPagemap, rcAccessing, rcRow, rcOutofrange);
+		if(data_length)  *data_length = cself->length[0];
+		if(data_offset)  *data_offset =  cself->data_offset[row];
+		if(repeat_count){
+			uint64_t i;
+			for( i=row+1, repeat_count[0]=1; i < cself->data_recs &&  cself->data_offset[i] == cself->data_offset[row]; i++, repeat_count[0]++ ){}
+		}
+		return 0;
+	}
+
+	rc = PageMapFindRegion(cself,row,&pmr);
+	if(rc) return rc;
+
+        rc = PageMapRegionGetData(pmr,cself->dstorage.base,row,data_offset,data_length,repeat_count);
+	if(rc) return rc;
+
+#if _HEAVY_PAGEMAP_DEBUGGING
+	{
+		uint32_t dto,dtl,dtr;
+		rc = PageMapGetData_HW(cself,row,&dto,&dtl,&dtr);
+		assert(rc == 0);
+		if(data_length) assert(dtl==*data_length);
+		if(data_offset) assert(dto==*data_offset);
+		if(repeat_count)  assert(dtr==*repeat_count);
+	}
+#endif
+	return 0;
 }
 
 rc_t PageMapNewIterator(const PageMap *self, PageMapIterator *lhs, uint64_t first_row, uint64_t num_rows)
 {
     rc_t rc;
 
-    if (num_rows > self->row_count)
-        num_rows = self->row_count;
+    if (first_row + num_rows > self->row_count)
+        num_rows = self->row_count - first_row;
 
 #if _DEBUGGING
     if (self->data_recs > 1) {
@@ -185,45 +529,96 @@ rc_t PageMapNewIterator(const PageMap *self, PageMapIterator *lhs, uint64_t firs
     
     memset(lhs, 0, sizeof(*lhs));
 
-    lhs->end_row = first_row + num_rows;
+#if _HEAVY_PAGEMAP_DEBUGGING
+    lhs->parent = self;
+#endif
+
+    lhs->last_row = first_row + num_rows;
     lhs->cur_row = first_row;
-    
-    lhs->length = self->length;
-    
-    if (self->data_recs == 1) {
-        lhs->variant = pmivConstant;
-        
-        return 0;
+    if(self->data_recs == 1){
+	lhs->repeat_count  = (num_rows < UINT32_MAX)?num_rows:UINT32_MAX;
+	lhs->static_datalen = self->length[0];
+	return 0;
     }
-    if (self->leng_recs == 1 && self->data_recs == self->row_count) {
-        lhs->variant = pmivVersion1;
-        
-        return 0;
+    if(self->random_access && self->leng_recs == 1 && first_row < self->row_count){ /** simple random access - no explosion needed **/
+	lhs->static_datalen = self->length[0];
+	lhs->exp_base = &self->data_offset;
+	if(lhs->last_row > self->row_count) lhs->last_row = self->row_count;
+	return 0;
     }
+    if( self->exp_row_last < lhs->last_row){
+	    rc = PageMapExpand(self,lhs->last_row-1);
+	    if(rc) return rc;
+    }
+    rc = PageMapFindRow(self,first_row,NULL,NULL,NULL);
+    if(rc) return rc;
+    lhs->rgns    = (PageMapRegion**) &self->istorage.base;
+    lhs->exp_base = (elem_count_t**) &self->dstorage.base;
+    lhs->cur_rgn  = self->i_rgn_last;
+    lhs->cur_rgn_row = lhs->cur_row - (*lhs->rgns)[self->i_rgn_last].start_row;
+    assert(lhs->cur_rgn_row < (*lhs->rgns)[self->i_rgn_last].numrows);
+    return  0;
+}
 
-    rc = PageMapExpand(self, lhs->end_row);
-    if (rc == 0) {
-        lhs->repeat = self->exp_repeat;
-        lhs->offset = self->exp_offset;
-        if (self->leng_recs == 1) {
-            lhs->variant = pmivFixedRowLength;
-        }
-        else {
-            lhs->variant = pmivFull;
-            lhs->length = self->exp_length;
-        }
+static PageMap *new_PageMap(void) {
+
+    PageMap *y;
+    y = malloc(sizeof(*y));
+    if (y) {
+	memset(y,0,sizeof(*y));
+        KRefcountInit(&y->refcount, 1, "PageMap", "new", "");
+	y->istorage.elem_bits = sizeof(PageMapRegion)*8;
+	y->dstorage.elem_bits = sizeof(elem_count_t)*8;
     }
-    return rc;
+    return y;
+}
+
+static PageMap *new_StaticPageMap(unsigned length, unsigned data) {
+    union {
+        PageMap pm;
+        row_count_t rcnt;
+        elem_count_t ecnt;
+    } *y;
+    size_t const sz = sizeof(*y)
+                    + sizeof(y->pm.length[0]) * length
+                    + sizeof(y->pm.leng_run[0]) * length
+                    + sizeof(y->pm.data_run[0]) * data;
+    
+    y = malloc(sz);
+    if (y) {
+#if PAGEMAP_STATISTICS
+        ++pm_stats.createStatic;
+        ++pm_stats.alive;
+        if (pm_stats.maxAlive < pm_stats.alive)
+            pm_stats.maxAlive = pm_stats.alive;
+        pm_stats.currentFootprint += sz;
+        if (pm_stats.maxFootprint < pm_stats.currentFootprint)
+            pm_stats.maxFootprint = pm_stats.currentFootprint;
+#endif
+        memset(&y->pm, 0, sizeof(y->pm));
+        KRefcountInit(&y->pm.refcount, 1, "PageMap", "new_Static", "");
+        y->pm.length = (elem_count_t *)&y[1];
+        y->pm.leng_run = (row_count_t *)&y->pm.length[length];
+        y->pm.data_run = &y->pm.leng_run[length];
+        y->pm.reserve_leng = length;
+        y->pm.reserve_data = data;
+	y->pm.istorage.elem_bits = sizeof(PageMapRegion)*8;
+	y->pm.dstorage.elem_bits = sizeof(elem_count_t)*8;
+    }
+    return &y->pm;
 }
 
 static
-rc_t PageMapGrow( PageMap *self, uint32_t new_reserve_leng, uint32_t new_reserve_data ) {
+rc_t PageMapGrow(PageMap *self, uint32_t new_reserve_leng, uint32_t new_reserve_data) {
     uint32_t sz;
     PageMap temp = *self;
     uint32_t reserve_data = self->reserve_data;
     uint32_t reserve_leng = self->reserve_leng;
     rc_t rc;
-    
+
+#if PAGEMAP_STATISTICS
+    ++pm_stats.grows;
+#endif
     if (new_reserve_leng > (1UL << 31) || new_reserve_data > (1UL << 31))
         return RC(rcVDB, rcPagemap, rcAllocating, rcParam, rcExcessive);
     
@@ -234,74 +629,148 @@ rc_t PageMapGrow( PageMap *self, uint32_t new_reserve_leng, uint32_t new_reserve
 #define MIN_KBUF_RESERVE_SIZE 256  
     while (reserve_leng < new_reserve_leng)
         reserve_leng <<= 1;
-    if ( reserve_leng < MIN_KBUF_RESERVE_SIZE) reserve_leng = MIN_KBUF_RESERVE_SIZE;
+    if (reserve_leng < MIN_KBUF_RESERVE_SIZE) reserve_leng = MIN_KBUF_RESERVE_SIZE;
     while (reserve_data < new_reserve_data)
         reserve_data <<= 1;
-    if ( reserve_data < MIN_KBUF_RESERVE_SIZE) reserve_data = MIN_KBUF_RESERVE_SIZE;
+    if (reserve_data < MIN_KBUF_RESERVE_SIZE) reserve_data = MIN_KBUF_RESERVE_SIZE;
 
     sz = reserve_leng * 2 + reserve_data;
-    KDataBufferWhack(&self->estorage);
+#if PAGEMAP_STATISTICS
+    pm_stats.currentFootprint -= KDataBufferMemorySize(&self->estorage);
+#endif
     {
         KDataBuffer new_buffer;
         
         rc = KDataBufferMake(&new_buffer, 8 * sizeof(uint32_t), sz);
         if (rc)
             return rc;
+#if PAGEMAP_STATISTICS
+        pm_stats.currentFootprint += KDataBufferMemorySize(&self->estorage);
+        if (pm_stats.maxFootprint < pm_stats.currentFootprint)
+            pm_stats.maxFootprint = pm_stats.currentFootprint;
+#endif
         self->cstorage = new_buffer;
     }
-    self->reserve_leng = reserve_leng;
-    self->reserve_data = reserve_data;
     self->length = self->cstorage.base;
     self->leng_run = self->length + reserve_leng;
     self->data_run = self->leng_run + reserve_leng;
-    self->exp_length = NULL;
-    self->exp_offset = NULL;
     self->start_valid = 0;
     
     if (self->leng_recs > 0 && temp.length != NULL) {
-        memcpy(self->length  , temp.length  , self->leng_recs * sizeof(uint32_t));
-        memcpy(self->leng_run, temp.leng_run, self->leng_recs * sizeof(uint32_t));
+        memcpy(self->length  , temp.length  , self->reserve_leng * sizeof(uint32_t));
+        memcpy(self->leng_run, temp.leng_run, self->reserve_leng * sizeof(uint32_t));
     }
     if (self->data_recs > 0 && temp.data_run != NULL)
-        memcpy(self->data_run, temp.data_run, self->data_recs * sizeof(uint32_t));
+        memcpy(self->data_run, temp.data_run, self->reserve_data * sizeof(uint32_t));
 
+    self->reserve_leng = reserve_leng;
+    self->reserve_data = reserve_data;
+#if PAGEMAP_STATISTICS
+    pm_stats.currentWaste += (self->reserve_data - self->data_recs) * sizeof(self->data_run[0]) +
+                             (self->reserve_leng - self->leng_recs) * (sizeof(self->leng_run[0]) + sizeof(self->length[0]));
+    if (pm_stats.maxWaste < pm_stats.currentWaste)
+        pm_stats.maxWaste = pm_stats.currentWaste;
+#endif
     KDataBufferWhack(&temp.cstorage);
 
     return 0;
 }
 
-rc_t PageMapNew ( PageMap **lhs, uint32_t reserve ) {
-    PageMap *y;
+rc_t PageMapNew(PageMap **lhs, uint32_t reserve) {
+    PageMap *y = new_PageMap();
 
-    y = calloc(1, sizeof(*y));
     if (y == NULL)
         return RC(rcVDB, rcPagemap, rcConstructing, rcMemory, rcExhausted);
 
-    KRefcountInit(&y->refcount, 1, "PageMap", "new", "");
     if (reserve > 0) {
         rc_t rc = PageMapGrow(y, reserve, reserve);
         if (rc) {
             free(y);
             return rc;
         }
+#if PAGEMAP_STATISTICS
+        --pm_stats.grows;
+#endif
     }
     *lhs = y;
+#if PAGEMAP_STATISTICS
+    ++pm_stats.create;
+    ++pm_stats.alive;
+    if (pm_stats.maxAlive < pm_stats.alive)
+        pm_stats.maxAlive = pm_stats.alive;
+    pm_stats.currentFootprint += sizeof(*y);
+    if (pm_stats.maxFootprint < pm_stats.currentFootprint)
+        pm_stats.maxFootprint = pm_stats.currentFootprint;
+#endif
     return 0;
 }
 
-rc_t PageMapNewFixedRowLength ( PageMap **lhs, uint64_t row_count, uint64_t row_len ) {
+rc_t PageMapToRandomAccess(PageMap **rslt, PageMap * src,uint32_t *data_offset) /** data_offset should have dimension of data_run ***/
+{
+	rc_t rc;
+	bool simple = (src->row_count == src->data_recs);
+	PageMap *dst;
+	assert(src->row_count >= src->leng_recs);
+	rc = PageMapNew(&dst, 0);
+	if(rc == 0){
+		dst->leng_recs=src->leng_recs;
+		dst->row_count=src->row_count;
+		rc = KDataBufferMake(&dst->cstorage, 8 * sizeof(uint32_t), 2*dst->leng_recs+(data_offset?dst->row_count:0));
+		if(rc == 0){
+			dst->length = dst->cstorage.base;
+			dst->leng_run    = dst->length   + dst->leng_recs;
+			dst->data_recs = src->row_count;
+			memcpy(dst->length,  src->length,  sizeof(uint32_t)*dst->leng_recs);
+			memcpy(dst->leng_run,src->leng_run,sizeof(uint32_t)*dst->leng_recs);
+			if(data_offset){
+				dst->data_offset = dst->leng_run + dst->leng_recs;
+				if(simple){
+					memcpy(dst->data_offset,data_offset,sizeof(uint32_t)*dst->row_count);
+				} else {
+					uint32_t i,j;
+					for(i=j=0;i<src->data_recs;i++){
+						elem_count_t data_len=src->data_run[i];
+						while(data_len > 0){
+							assert(j < src->row_count);
+							dst->data_offset[j++] = data_offset[i];
+							data_len--;
+						}
+					}
+				}
+				dst->random_access=true;
+			} 
+			dst->reserve_leng = dst->leng_recs;
+			dst->reserve_data = dst->row_count;
+			dst->start_valid = dst->row_count;
+			*rslt = dst;
+			return 0;
+		}
+		PageMapRelease(dst);
+	}
+	return rc;
+}
+
+
+rc_t PageMapNewFixedRowLength(PageMap **lhs, uint64_t row_count, uint64_t row_len) {
     PageMap *y;
     rc_t rc;
-    unsigned i;
 
     if (row_count >> 32 != 0 || row_len >> 32 != 0)
         return RC(rcVDB, rcPagemap, rcConstructing, rcParam, rcTooBig);
     
     rc = PageMapNew(&y, 0);
+#if PAGEMAP_STATISTICS
+    ++pm_stats.createFixedRow;
+    --pm_stats.create;
+#endif
     if (rc)
         return rc;
     rc = PageMapGrow(y, 1, (uint32_t)row_count);
+#if PAGEMAP_STATISTICS
+    --pm_stats.grows;
+#endif
     if (rc == 0) {
+	int i;
         *lhs = y;
         y->length[0] = (uint32_t)row_len;
         y->leng_run[0] = (uint32_t)row_count;
@@ -311,13 +780,14 @@ rc_t PageMapNewFixedRowLength ( PageMap **lhs, uint64_t row_count, uint64_t row_
         for (i = 0; i != (uint32_t)row_count; ++i) {
             y->data_run[i] = 1;
         }
+
     }
     if (rc)
         PageMapRelease(y);
     return rc;
 }
 
-rc_t PageMapNewSingle ( PageMap **lhs, uint64_t row_count, uint64_t row_len ) {
+rc_t PageMapNewSingle(PageMap **lhs, uint64_t row_count, uint64_t row_len) {
     PageMap *y;
     rc_t rc;
     
@@ -326,6 +796,10 @@ rc_t PageMapNewSingle ( PageMap **lhs, uint64_t row_count, uint64_t row_len ) {
     
     rc = PageMapNewFixedRowLength(&y, 1, row_len);
     if (rc == 0) {
+#if PAGEMAP_STATISTICS
+        ++pm_stats.createSingle;
+        --pm_stats.createFixedRow;
+#endif
         y->row_count = y->data_run[0] = y->leng_run[0] = (uint32_t)row_count;
         *lhs = y;
     }
@@ -336,15 +810,7 @@ bool PageMapHasRows(const PageMap *self) {
     return self->data_recs > 0;
 }
 
-uint32_t PageMapFastRowCount ( const PageMap *self ) {
-    uint32_t rslt = 0;
-
-    if (self->data_recs == 1)
-        rslt = self->data_run[0];
-    return rslt;
-}
-
-uint32_t PageMapFixedRowLength ( const PageMap *self ) {
+uint32_t PageMapFixedRowLength (const PageMap *self) {
     uint32_t rslt = 0;
     
     if (self->leng_recs == 1)
@@ -352,22 +818,31 @@ uint32_t PageMapFixedRowLength ( const PageMap *self ) {
     return rslt;
 }
 
-uint32_t PageMapHasSimpleStructure( const PageMap *self ) {
+rc_t PageMapRowLengthRange (const PageMap *self,elem_count_t *min,elem_count_t *max)
+{
+    int i;
+    *min = *max = self->length[0];
+    for(i=1;i<self->leng_recs;i++){
+	if      (self->length[i] < *min) *min = self->length[i];
+	else if (self->length[i] > *max) *max = self->length[i];
+    }
+    return 0;
+}
+
+
+uint32_t PageMapHasSimpleStructure(const PageMap *self) {
     uint32_t rslt = PageMapFixedRowLength(self);
-    unsigned i;
     
     if (rslt == 0)
         return rslt;
 
-    for (i = 0; i != self->data_recs; ++i) {
-        if (self->data_run[i] != 1)
-            return 0;
-    }
+    if(self->data_recs != self->row_count) return 0;
+
     return rslt;
 }
 
 #if 0
-static bool PageMapValidate( const PageMap *cself ) {
+static bool PageMapValidate(const PageMap *cself) {
     unsigned i;
     uint32_t n;
     uint32_t m;
@@ -379,7 +854,7 @@ static bool PageMapValidate( const PageMap *cself ) {
 }
 
 static
-rc_t PageMapAppendRun( PageMap *self, uint32_t run_length, uint32_t row_length ) {
+rc_t PageMapAppendRun(PageMap *self, uint32_t run_length, uint32_t row_length) {
     return -1;
 }
 #endif
@@ -401,6 +876,11 @@ rc_t PageMapAppendRows(PageMap *self, uint64_t row_length, uint64_t run_length,
         same_data = false;
         leng_cur = self->leng_recs;
         ++self->leng_recs;
+
+#if PAGEMAP_STATISTICS
+        pm_stats.currentWaste -= sizeof(self->leng_run[0]) + sizeof(self->length[0]);
+#endif
+        
         if (self->leng_recs >= self->reserve_leng) {
             rc = PageMapGrow(self, self->leng_recs, 0);
             if (rc)
@@ -414,6 +894,11 @@ rc_t PageMapAppendRows(PageMap *self, uint64_t row_length, uint64_t run_length,
     else {
         data_cur = self->data_recs;
         ++self->data_recs;
+        
+#if PAGEMAP_STATISTICS
+        pm_stats.currentWaste -= sizeof(self->data_run[0]);
+#endif
+        
         if (self->data_recs >= self->reserve_data) {
             rc = PageMapGrow(self, 0, self->data_recs);
             if (rc)
@@ -421,6 +906,28 @@ rc_t PageMapAppendRows(PageMap *self, uint64_t row_length, uint64_t run_length,
         }
         self->data_run[data_cur] = run_length;
     }
+    if(self->row_count < self->pre_exp_row_count){
+	int i;
+	elem_count_t *exp_base = self->dstorage.base;
+	elem_count_t data_offset;
+	if(same_data){
+		if(self->row_count == 0){
+			data_offset = 0;
+		} else {
+			data_offset = exp_base[2*self->row_count-1];
+		}
+	} else {
+		data_offset = self->exp_data_offset_last;
+		self->exp_data_offset_last += row_length;
+	}
+	for(i=self->row_count;i<run_length+self->row_count;i++){
+		exp_base[2*i]  =  row_length;
+		exp_base[2*i+1]=  data_offset;
+	}
+	self->exp_row_last += run_length;
+	self->exp_rgn_last->numrows += run_length;
+	
+    }
     self->row_count += run_length;
     return 0;
 }
@@ -449,37 +956,105 @@ static rc_t serialize_lengths(
     return rc;
 }
 
+#if 0
+
 static rc_t deserialize_lengths(
                                 uint32_t run[],
                                 unsigned runs,
-                                const uint8_t *src,
-                                uint64_t ssize,
+                                uint8_t const src[],
+                                unsigned ssize,
                                 uint64_t *consumed
 ) {
-    rc_t rc = 0;
     unsigned i;
-    uint64_t j;
+    unsigned j;
     uint64_t n;
     
     *consumed = 0;
-    for (i = 0, j = 0; i != runs; ++i, j += n) {
+    for (i = 0, j = 0; i != runs; ++i, j += (unsigned)n) {
         uint64_t val;
+        rc_t rc = vlen_decodeU1(&val, src + j, ssize - j, &n);
         
-        rc = vlen_decodeU1(&val, src + j, ssize - j, &n);
-        if (rc)
-            break;
+        if (rc) return rc;
         run[i] = (uint32_t)val;
     }
-    if (rc == 0)
-        *consumed = j;
-    return rc;
+    *consumed = j;
+    return 0;
 }
+#else
+
+#if _ARCH_BITS == 32
+#define FLAG_64 0x8080808080808080ULL
+#define VAL_64  0x7F7F7F7F7F7F7F7FULL
+#else
+#define FLAG_64 0x8080808080808080UL
+#define VAL_64  0x7F7F7F7F7F7F7F7FUL
+#endif
+
+static rc_t deserialize_lengths(
+                                uint32_t run[],
+                                unsigned runs,
+                                uint8_t const src[],
+                                unsigned ssize,
+                                uint64_t *consumed
+) {
+    uint8_t	to_align = 16 - (((long)src)&15);/** alignmentto 16 bytes will make optimizer and cpu happy. don't care about loss in cast - we need the lowest byte **/
+    int		si=0;/**source index **/
+    int		di=0;/** destination index **/
+    int		pcnt = (ssize - to_align )/8; 
+
+    memset(run,0,runs*sizeof(*run));
+    if(pcnt){ /** does it make sense at all ***/
+	uint64_t    *ptr=(uint64_t*) (src + to_align);
+	int         pi;
+	
+	for(;si<to_align && di < runs ;si++){ /** align the pointer first **/
+		if(((int8_t)src[si]) < 0) {
+			run[di] += src[si] & 0x7F;
+			run[di] <<= 7;
+		} else {
+			run[di++] += src[si];
+		}
+	}	
+	assert((((long)ptr)&15) == 0);
+	for(pi = 0; pi < pcnt && di < runs; pi++){ /** do bulk staff **/
+		uint64_t flag = ptr[pi] & FLAG_64;
+		uint64_t  val = ptr[pi] & VAL_64;
+		int  i;
+		int8_t     *cf = (int8_t*)&flag;
+		uint8_t	   *cv = (uint8_t*)&val;
+		for(i=0;i<8 && di < runs;i++){ /** no endian problem - casting of ptr matches casting of flag & val **/
+			si++;
+			run[di] += cv[i];
+			if(cf[i] < 0){
+				run[di] <<= 7;
+			} else {
+				di++;
+			}
+		}
+	}
+    }
+   
+    for(;si < ssize && di < runs;si++){/** deal with tails **/
+	if(((int8_t)src[si]) < 0) {
+		run[di] += src[si] & 0x7F;
+		run[di] <<= 7;
+	} else {
+		run[di++] += src[si];
+	}
+    }
+    *consumed = si;
+    return 0;
+}
+
+#endif
 
 static
-rc_t serialize( const PageMap *self, KDataBuffer *buffer, uint64_t *size ) {
+rc_t serialize(const PageMap *self, KDataBuffer *buffer, uint64_t *size) {
 /*
  variant 0: fixed row length, data_run[..] == 1
     vlencode(row_length)
+ version 2: same as 0 but random access
+    adds serialize(data_offset)
 
  variant 1: fixed row length, variable data_run
     vlencode(row_length)
@@ -490,6 +1065,8 @@ rc_t serialize( const PageMap *self, KDataBuffer *buffer, uint64_t *size ) {
     vlencode(leng_recs)
     serialize(length)
     serialize(leng_run)
+ versuion 2: same as 2 but random access
+    adds serialize(data_offset)
  
  variant 3: variable row length, variable data_run
     vlencode(leng_recs)
@@ -498,26 +1075,21 @@ rc_t serialize( const PageMap *self, KDataBuffer *buffer, uint64_t *size ) {
     serialize(leng_run)
     serialize(data_run)
 
+  
+
  */
-    uint8_t version = 1;
+    uint8_t version = self->random_access?2:1;
     uint8_t variant = 0;
     uint8_t header;
     rc_t rc = 0;
-    bool simple_data = true;
-    unsigned i;
     uint64_t sz;
     KDataBuffer compress;
 
+
+
     memset(&compress, 0, sizeof(compress));
-    
-    for (i = 0; i != self->data_recs; ++i) {
-        if (self->data_run[i] != 1) {
-            simple_data = false;
-            break;
-        }
-    }
-    
-    variant = (simple_data ? 0 : 1) | ((self->leng_recs == 1 ? 0 : 1) << 1);
+
+    variant = ( (self->data_recs == self->row_count)? 0 : 1) | ((self->leng_recs == 1 ? 0 : 1) << 1);
     header = (version << 2) | variant;
     switch (variant) {
     case 0:
@@ -525,7 +1097,14 @@ rc_t serialize( const PageMap *self, KDataBuffer *buffer, uint64_t *size ) {
         if (rc == 0) {
             ((uint8_t *)buffer->base)[0] = header;
             vlen_encodeU1(((uint8_t *)buffer->base) + 1, 5, &sz, self->length[0]);
-            buffer->elem_count = sz + 1;
+	    buffer->elem_count = sz + 1;
+	    if(self->random_access){
+		rc = KDataBufferMakeBytes(&compress, 5*self->row_count);
+		if(rc == 0){
+			rc = serialize_lengths(&compress, 0, self->data_offset, self->row_count, &sz);
+			compress.elem_count = sz;
+		}
+	    }
         }
         break;
     case 1:
@@ -547,7 +1126,7 @@ rc_t serialize( const PageMap *self, KDataBuffer *buffer, uint64_t *size ) {
     case 2:
         rc = KDataBufferResize(buffer, 6);
         if (rc == 0) {
-            rc = KDataBufferMakeBytes(&compress, 10 * self->leng_recs);
+            rc = KDataBufferMakeBytes(&compress, 10 * self->leng_recs + (self->random_access?5*self->row_count:0));
             if (rc == 0) {
                 ((uint8_t *)buffer->base)[0] = header;
                 vlen_encodeU1(((uint8_t *)buffer->base) + 1, 5, &sz, self->leng_recs);
@@ -556,12 +1135,16 @@ rc_t serialize( const PageMap *self, KDataBuffer *buffer, uint64_t *size ) {
                 rc = serialize_lengths(&compress, 0, self->length, self->leng_recs, &sz);
                 compress.elem_count = sz;
                 if (rc == 0) {
-                    rc = serialize_lengths(&compress, sz, self->leng_run, self->leng_recs, &sz);
+                    rc = serialize_lengths(&compress, compress.elem_count, self->leng_run, self->leng_recs, &sz);
                     compress.elem_count += sz;
+		    if(self->random_access && rc == 0) {
+                        rc = serialize_lengths(&compress, compress.elem_count, self->data_offset, self->row_count, &sz);
+                        compress.elem_count += sz;
+		    }
                 }
             }
         }
-        break;
+	break;
     case 3:
         rc = KDataBufferResize(buffer, 11);
         if (rc == 0) {
@@ -611,18 +1194,10 @@ rc_t serialize( const PageMap *self, KDataBuffer *buffer, uint64_t *size ) {
                 zr = deflateInit2(&zs, Z_BEST_SPEED, Z_DEFLATED, -15, 9, Z_DEFAULT_STRATEGY);
                 switch (zr) {
                 case Z_OK:
-                    break;
-                case Z_MEM_ERROR:
-                    rc = RC(rcVDB, rcPagemap, rcWriting, rcMemory, rcExhausted);
-                    break;
-                default:
-                    rc = RC(rcVDB, rcPagemap, rcWriting, rcParam, rcInvalid);
-                }
-                if (rc == 0) {
-                    for ( ; ; ) {
+                    for (; ;) {
                         zr = deflate(&zs, Z_FINISH);
                         if (zr == Z_OK) {
-                            unsigned offset = (unsigned int)( zs.next_out - (Bytef *)buffer->base );
+                            unsigned const offset = (unsigned)(zs.next_out - (Bytef *)buffer->base);
                             rc = KDataBufferResize(buffer, buffer->elem_count * 2);
                             if (rc)
                                 break;
@@ -639,6 +1214,12 @@ rc_t serialize( const PageMap *self, KDataBuffer *buffer, uint64_t *size ) {
                         }
                     }
                     deflateEnd(&zs);
+                    break;
+                case Z_MEM_ERROR:
+                    rc = RC(rcVDB, rcPagemap, rcWriting, rcMemory, rcExhausted);
+                    break;
+                default:
+                    rc = RC(rcVDB, rcPagemap, rcWriting, rcParam, rcInvalid);
                 }
             }
         }
@@ -650,7 +1231,7 @@ rc_t serialize( const PageMap *self, KDataBuffer *buffer, uint64_t *size ) {
     return rc;
 }
 
-rc_t PageMapSerialize ( const PageMap *self, KDataBuffer *buffer, uint64_t offset, uint64_t *size ) {
+rc_t PageMapSerialize (const PageMap *self, KDataBuffer *buffer, uint64_t offset, uint64_t *size) {
     rc_t rc;
     KDataBuffer temp;
 
@@ -674,133 +1255,145 @@ rc_t PageMapSerialize ( const PageMap *self, KDataBuffer *buffer, uint64_t offse
 }
 
 static
-rc_t PageMapDeserialize_v0( PageMap **lhs, const uint8_t *src, uint64_t ssize, uint32_t row_count ) {
-    uint8_t variant = *src & 3;
-    const uint8_t * const endp = src + ssize;
-    uint64_t val;
+rc_t PageMapDeserialize_v0(PageMap **lhs, uint8_t const src[], unsigned ssize, row_count_t row_count) {
+    uint8_t variant = src[0] & 3;
+    uint8_t version =src[0] >> 2;
+    unsigned cur = 1;
+    uint64_t row_len;
+    uint64_t data_recs;
+    uint64_t leng_recs;
     uint64_t sz;
+    bool     random_access=(version==2?true:false);
     rc_t rc = 0;
     
-    ++src;
     switch (variant) {
     case 0:
-        rc = vlen_decodeU1(&val, src, endp - src, &sz);
-        if (rc == 0)
-            return PageMapNewFixedRowLength( lhs, row_count, (uint32_t)val );
+        /*
+         variant 0: fixed row length, data_run[..] == 1
+         vlencode(row_length)
+         */
+        rc = vlen_decodeU1(&row_len, &src[cur], ssize - cur, &sz); if (rc) return rc;
+	cur += sz;
+        
+        *lhs = new_StaticPageMap(1, random_access?row_count:1);
+        if (*lhs == NULL)
+            return RC(rcVDB, rcPagemap, rcConstructing, rcMemory, rcExhausted);
+        
+        (**lhs).data_recs = row_count;
+        (**lhs).leng_recs = 1;
+        
+        (**lhs).length[0] = (elem_count_t)row_len;
+        (**lhs).leng_run[0] = row_count;
+
+	if(random_access){
+		(**lhs).data_offset= (**lhs).data_run;
+		rc = deserialize_lengths((**lhs).data_offset, (unsigned)row_count, &src[cur], ssize - cur, &sz);
+	}
+	(**lhs).data_run = 0;
         break;
     case 1:
-        {
-            uint32_t row_length;
-            
-            rc = vlen_decodeU1( &val, src, endp - src, &sz );
-            if (rc == 0) {
-                src += sz;
-                row_length = (uint32_t)val;
-                rc = vlen_decodeU1( &val, src, endp - src, &sz );
-                if (rc == 0) {
-                    src += sz;
-                    /* i'm lying about the row_count, this will create val entries
-                     * in the data_run array and that is how many i need
-                     * i'll then decompress into the data_run array.
-                     */
-                    rc = PageMapNewFixedRowLength( lhs, (uint32_t)val, row_length );
-                    if (rc == 0) {
-                        (*lhs)->leng_run[0] = row_count;
-                        rc = deserialize_lengths( (*lhs)->data_run, (unsigned int)val, src, endp - src, &sz );
-                        if (rc == 0)
-                        {
-                            uint32_t ix;
-                            uint32_t sum;
-                            uint32_t *pdr = (**lhs).data_run;
-                                
-                            for (sum = ix = 0; ix < (**lhs).data_recs; ++ix)
-                                sum += *pdr++;
-                            (**lhs).leng_run[0] = sum;
-                            return 0;
-                        }
-                        PageMapRelease(*lhs);
-                    }
-                }
-            }
-        }
+        /*
+         variant 1: fixed row length, variable data_run
+         vlencode(row_length)
+         vlencode(data_recs)
+         serialize(data_run)
+         */
+        rc = vlen_decodeU1(&row_len, &src[cur], ssize - cur, &sz); if (rc) return rc;
+        cur += sz;
+        
+        rc = vlen_decodeU1(&data_recs, &src[cur], ssize - cur, &sz); if (rc) return rc;
+        cur += sz;
+        
+        *lhs = new_StaticPageMap(1, data_recs);
+        if (*lhs == NULL)
+            return RC(rcVDB, rcPagemap, rcConstructing, rcMemory, rcExhausted);
+        
+        (**lhs).data_recs = data_recs;
+        (**lhs).leng_recs = 1;
+        
+        (**lhs).length[0] = (elem_count_t)row_len;
+        (**lhs).leng_run[0] = row_count;
+        
+        rc = deserialize_lengths((**lhs).data_run, (unsigned)data_recs, &src[cur], ssize - cur, &sz);
         break;
     case 2:
-        rc = vlen_decodeU1( &val, src, endp - src, &sz );
+        /*
+         variant 2: variable row length, data_run[..] == 1
+         vlencode(leng_recs)
+         serialize(length)
+         serialize(leng_run)
+         */
+        rc = vlen_decodeU1(&leng_recs, &src[cur], ssize - cur, &sz); if (rc) return rc;
+        cur += sz;
+        
+        *lhs = new_StaticPageMap((unsigned)leng_recs, random_access?row_count:1);
+        if (*lhs == NULL)
+            return RC(rcVDB, rcPagemap, rcConstructing, rcMemory, rcExhausted);
+        
+        (**lhs).data_recs = row_count;
+        (**lhs).leng_recs = leng_recs;
+        
+#if 0  
+        rc = deserialize_lengths((**lhs).length, (unsigned)leng_recs, &src[cur], ssize - cur, &sz);
         if (rc == 0) {
-            src += sz;
-            rc = PageMapNewFixedRowLength( lhs, row_count, 1 );
-            if (rc == 0) {
-                do {
-                    rc = PageMapGrow( *lhs, (uint32_t)val, 0 );
-                    if (rc)
-                        break;
-                    rc = deserialize_lengths( (*lhs)->length, (unsigned)val, src, endp - src, &sz );
-                    if (rc)
-                        break;
-                    src += sz;
-                    rc = deserialize_lengths( (*lhs)->leng_run, (unsigned)val, src, endp - src, &sz );
-                    if (rc == 0) {
-                        (*lhs)->leng_recs = (uint32_t)val;
-                        (*lhs)->data_recs = row_count;
-                        return 0;
-                    }
-                } while (0);
-                PageMapRelease(*lhs);
-                *lhs = 0;
-                break;
-            }
+            cur += sz;
+            rc = deserialize_lengths((**lhs).leng_run, (unsigned)leng_recs, &src[cur], ssize - cur, &sz);
         }
+#else /** can use the fact that both length and leng_run a sequentually allocated ***/
+	rc = deserialize_lengths((**lhs).length, (unsigned)(2*leng_recs), &src[cur], ssize - cur, &sz);
+	if(rc == 0 && random_access){
+		cur+=sz;
+		(**lhs).data_offset= (**lhs).data_run;
+		rc = deserialize_lengths((**lhs).data_offset, (unsigned)row_count, &src[cur], ssize - cur, &sz);
+	}
+	(**lhs).data_run = 0;
+		
+#endif
         break;
     case 3:
-        do {
-            uint32_t leng_recs;
-            uint32_t data_recs;
-            
-            rc = vlen_decodeU1( &val, src, endp - src, &sz );
-            if (rc)
-                break;
-            src += sz;
-            leng_recs = (uint32_t)val;
-            
-            rc = vlen_decodeU1( &val, src, endp - src, &sz );
-            if (rc)
-                break;
-            src += sz;
-            data_recs = (uint32_t)val;
-            
-            rc = PageMapNew(lhs, 0);
+        /*
+         variant 3: variable row length, variable data_run
+         vlencode(leng_recs)
+         vlencode(data_recs)
+         serialize(length)
+         serialize(leng_run)
+         serialize(data_run)
+         */
+        rc = vlen_decodeU1(&leng_recs, &src[cur], ssize - cur, &sz);  if (rc) return rc;
+        cur += sz;
+        
+        rc = vlen_decodeU1(&data_recs, &src[cur], ssize - cur, &sz);  if (rc) return rc;
+        cur += sz;
+        
+        *lhs = new_StaticPageMap(leng_recs, data_recs);
+        if (*lhs == NULL)
+            return RC(rcVDB, rcPagemap, rcConstructing, rcMemory, rcExhausted);
+        
+        (**lhs).data_recs = data_recs;
+        (**lhs).leng_recs = leng_recs;
+#if 0   
+        rc = deserialize_lengths((**lhs).length, leng_recs, &src[cur], ssize - cur, &sz);
+        if (rc == 0) {
+            cur += sz;
+            rc = deserialize_lengths((**lhs).leng_run, leng_recs, &src[cur], ssize - cur, &sz);
             if (rc == 0) {
-                do {
-                    rc = PageMapGrow(*lhs, leng_recs, data_recs);
-                    if (rc)
-                        break;
-                    rc = deserialize_lengths( (*lhs)->length, leng_recs, src, endp - src, &sz );
-                    if (rc)
-                        break;
-                    src += sz;
-                    rc = deserialize_lengths( (*lhs)->leng_run, leng_recs, src, endp - src, &sz );
-                    if (rc)
-                        break;
-                    src += sz;
-                    rc = deserialize_lengths( (*lhs)->data_run, data_recs, src, endp - src, &sz );
-                    if (rc == 0) {
-                        (*lhs)->leng_recs = leng_recs;
-                        (*lhs)->data_recs = data_recs;
-                        return 0;
-                    }
-                } while (0);
-                PageMapRelease(*lhs);
-                *lhs = 0;
-                break;
+                cur += sz;
+                rc = deserialize_lengths((*lhs)->data_run, data_recs, &src[cur], ssize - cur, &sz);
             }
-        } while (0);
+        }
+#else /** can use the fact that both length and leng_run a sequentually allocated ***/
+	rc = deserialize_lengths((**lhs).length, (unsigned)(2*leng_recs+data_recs), &src[cur], ssize - cur, &sz);
+#endif
         break;
+     default:
+	rc = RC(rcVDB, rcPagemap, rcConstructing, rcFormat, rcUnrecognized);
     }
+    (**lhs).random_access = random_access;
     return rc;
 }
 
 static
-rc_t PageMapDeserialize_v1( PageMap **lhs, const uint8_t *Src, uint64_t ssize, uint32_t row_count ) {
+rc_t PageMapDeserialize_v1(PageMap **lhs, const uint8_t *Src, uint64_t ssize, uint32_t row_count) {
     const uint8_t *src = Src;
     const uint8_t * const endp = src + ssize;
     uint8_t variant = *src & 3;
@@ -812,10 +1405,20 @@ rc_t PageMapDeserialize_v1( PageMap **lhs, const uint8_t *Src, uint64_t ssize, u
     KDataBuffer decompress;
     z_stream zs;
     int zr;
+    bool random_access = ((src[0]>>2)==2);
     
     switch (variant) {
     case 0:
-        return PageMapDeserialize_v0(lhs, src, ssize, row_count);
+	if(!random_access)
+		return PageMapDeserialize_v0(lhs, src, ssize, row_count);
+	++src;
+	rc = vlen_decodeU1(&val, src, endp - src, &sz);
+	if( rc == 0){
+		src += sz;
+		hsize = src - Src;
+		bsize = 5 * row_count;
+	}
+	break;
     case 1:
         ++src;
         rc = vlen_decodeU1(&val, src, endp - src, &sz);
@@ -836,6 +1439,9 @@ rc_t PageMapDeserialize_v1( PageMap **lhs, const uint8_t *Src, uint64_t ssize, u
             src += sz;
             hsize = src - Src;
             bsize = 10 * val;
+	    if(random_access){
+		bsize +=  5 * row_count;
+	    }
         }
         break;
     case 3:
@@ -889,7 +1495,7 @@ rc_t PageMapDeserialize_v1( PageMap **lhs, const uint8_t *Src, uint64_t ssize, u
     return rc;
 }
 
-rc_t PageMapDeserialize ( PageMap **lhs, const void *src, uint64_t ssize, uint64_t row_count ) {
+rc_t PageMapDeserialize (PageMap **lhs, const void *src, uint64_t ssize, uint64_t row_count) {
     rc_t rc;
 
     if ((uint32_t)row_count != row_count)
@@ -901,11 +1507,13 @@ rc_t PageMapDeserialize ( PageMap **lhs, const void *src, uint64_t ssize, uint64
     *lhs = NULL;
     if (src == NULL || ssize == 0)
         return 0;
+
     switch (*(const uint8_t *)src >> 2) {
     case 0:
         rc = PageMapDeserialize_v0(lhs, src, ssize, (uint32_t)row_count);
         break;
     case 1:
+    case 2:
         rc = PageMapDeserialize_v1(lhs, src, ssize, (uint32_t)row_count);
         break;
     default:
@@ -913,19 +1521,55 @@ rc_t PageMapDeserialize ( PageMap **lhs, const void *src, uint64_t ssize, uint64
     }
     if (rc == 0)
         (**lhs).row_count = (uint32_t)row_count;
+    else
+        PageMapRelease(*lhs);
     return rc;
 }
 
 static
-rc_t PageMapDestroy( PageMap *that )
+rc_t PageMapDestroy(PageMap *that)
 {
-    KDataBufferWhack( &that->estorage );
-    KDataBufferWhack( &that->cstorage );
-    free( that );
+#if PAGEMAP_STATISTICS
+    pm_stats.currentWaste -= (that->reserve_data - that->data_recs) * sizeof(that->data_run[0]) +
+                             (that->reserve_leng - that->leng_recs) * (sizeof(that->leng_run[0]) + sizeof(that->length[0]));
+    pm_stats.currentFootprint -= sizeof(*that) + that->reserve_data * sizeof(that->data_run[0]) +
+                                 that->reserve_leng * (sizeof(that->leng_run[0]) + sizeof(that->length[0]));
+    --pm_stats.alive;
+    if (pm_stats.alive == 0) {
+        fprintf(stderr, 
+                "PM Stats:\n"
+                "Footprint (cur/max): %u/%u\n"
+                "Waste (cur/max): %u/%u\n"
+                "Alive (cur/max): %u/%u\n"
+                "Created (static/fixed/single/total): %u/%u/%u/%u\n"
+                "Grows: %u\n"
+                "Expands (act/calls): %u/%u\n"
+                "Appends: %u\n\n",
+                (unsigned)pm_stats.currentFootprint,
+                (unsigned)pm_stats.maxFootprint,
+                (unsigned)pm_stats.currentWaste,
+                (unsigned)pm_stats.maxWaste,
+                pm_stats.alive,
+                pm_stats.maxAlive,
+                pm_stats.createStatic,
+                pm_stats.createFixedRow,
+                pm_stats.createSingle,
+                pm_stats.create + pm_stats.createStatic + pm_stats.createFixedRow + pm_stats.createSingle,
+                pm_stats.grows,
+                pm_stats.expands,
+                pm_stats.expandCalls,
+                pm_stats.appends
+                );
+    }
+#endif
+    KDataBufferWhack(&that->istorage);
+    KDataBufferWhack(&that->dstorage);
+    KDataBufferWhack(&that->cstorage);
+    free(that);
     return 0;
 }
 
-rc_t PageMapRelease ( const PageMap *self ) {
+rc_t PageMapRelease (const PageMap *self) {
     if (self) {
         if (KRefcountDrop(&self->refcount, "PageMap") == krefWhack)
           return PageMapDestroy((PageMap *)self);
@@ -933,48 +1577,34 @@ rc_t PageMapRelease ( const PageMap *self ) {
     return 0;
 }
 
-rc_t PageMapAddRef ( const PageMap *self ) {
+rc_t PageMapAddRef (const PageMap *self) {
     if (self)
         KRefcountAdd(&self->refcount, "PageMap");
     return 0;
 }
 
-uint32_t PageMapGetIdxRowInfo ( const PageMap *cself, uint32_t idx, uint32_t *starting_element ) {
-    rc_t rc;
-
-	if (idx == 0 || cself->data_recs == 1) {
-        if (starting_element)
-            *starting_element = 0;
-        if (cself->leng_recs == 0)
-            return 0;
-        return cself->length[0];
-    }
-    if (cself->leng_recs == 1) {
-        if (starting_element == NULL)
-            return cself->length[0];
-        
-        if (cself->data_recs == cself->row_count) {
-        /* fixed row length and no rle on data */
-            if (starting_element)
-                *starting_element = idx * cself->length[0];
-            return cself->length[0];
-        }
-    }
-    
-    rc = PageMapExpand(cself, idx);
-    if (rc)
-        return 0;
-
-    if (starting_element)
-        *starting_element = cself->exp_offset[idx];
-    return cself->leng_recs > 1 ? cself->exp_length[idx] : cself->length[0];
+uint32_t PageMapGetIdxRowInfo (const PageMap *cself, uint32_t idx, uint32_t *starting_element)
+{
+	rc_t rc=0;
+	uint32_t	len;
+
+	if (idx  < (cself->data_run?cself->data_run[0]:1) || cself->data_recs == 1) {
+		if (starting_element) *starting_element = 0;
+		if (cself->leng_recs == 0) len=0;
+		else  len = cself->length[0];
+		return cself->length[0];
+	} else {
+		rc = PageMapFindRow(cself,idx,starting_element,&len,NULL);
+		if(rc) len=0;
+	}
+	return len;
 }
 
-int PageMapCompare( const PageMap *a, const PageMap *b ) {
-    unsigned i;
-    unsigned j;
-    unsigned i_rl;
-    unsigned j_rl;
+int PageMapCompare(const PageMap *a, const PageMap *b) {
+    unsigned ai;
+    unsigned bi;
+    unsigned ar; /* runs in a */
+    unsigned br; /* runs in b */
     
     if (
         a == b || (
@@ -986,33 +1616,33 @@ int PageMapCompare( const PageMap *a, const PageMap *b ) {
     ))
         return 2;
     
-    i = j = 0;
-    i_rl = a->leng_run[0];
-    j_rl = b->leng_run[0];
+    ai = bi = 0;
+    ar = a->leng_run[0];
+    br = b->leng_run[0];
     
-    while (i < a->leng_recs && j < b->leng_recs) {
-        if (a->length[i] != b->length[j])
+    while (ai < a->leng_recs && bi < b->leng_recs) {
+        if (a->length[ai] != b->length[bi])
             return 0;
-        if (i_rl < j_rl) {
-            j_rl -= i_rl;
-            i_rl = 0;
+        if (ar < br) {
+            br -= ar;
+            ar = a->leng_run[++ai];
+        }
+        else if (ar == br) {
+            ar = a->leng_run[++ai];
+            br = b->leng_run[++bi];
         }
         else {
-            i_rl -= j_rl;
-            j_rl = 0;
+            ar -= br;
+            br = b->leng_run[++bi];
         }
-        if (i_rl == 0)
-            i_rl = a->leng_run[++i];
-        if (j_rl == 0)
-            j_rl = b->leng_run[++j];
     }
-    if (i != a->leng_recs || j != b->leng_recs)
+    if (ai != a->leng_recs || bi != b->leng_recs)
         return -1;
     else
         return 1;
 }
 
-int PageMapCompareStatic ( const PageMap *a, const PageMap *b ) {
+int PageMapCompareStatic (const PageMap *a, const PageMap *b) {
     if (
 	  a->data_recs != 1 ||
 	  a->leng_recs != 1 ||
@@ -1038,16 +1668,23 @@ int PageMapCompareStatic ( const PageMap *a, const PageMap *b ) {
     return 0;  /* not same */
 }
 
-rc_t PageMapAppend( PageMap *self, const PageMap *other ) {
+rc_t PageMapAppend(PageMap *self, const PageMap *other) {
     KDataBuffer cstorage;
     rc_t rc;
     
     rc = KDataBufferMake(&cstorage, sizeof(self->length[0]) * 8, (self->leng_recs + other->leng_recs) * 2 + self->data_recs + other->data_recs);
     if (rc == 0) {
-        uint32_t *length = cstorage.base;
-        uint32_t *leng_run = length + self->leng_recs + other->leng_recs;
-        uint32_t *data_run = leng_run + self->leng_recs + other->leng_recs;
+        uint32_t *const length = cstorage.base;
+        uint32_t *const leng_run = length + self->leng_recs + other->leng_recs;
+        uint32_t *const data_run = leng_run + self->leng_recs + other->leng_recs;
         
+#if PAGEMAP_STATISTICS
+        ++pm_stats.appends;
+        pm_stats.currentWaste -= (self->reserve_data - self->data_recs) * sizeof(self->data_run[0]) +
+                                 (self->reserve_leng - self->leng_recs) * (sizeof(self->leng_run[0]) + sizeof(self->length[0]));
+        pm_stats.currentFootprint -= self->reserve_data * sizeof(self->data_run[0]) +
+                                     self->reserve_leng * (sizeof(self->leng_run[0]) + sizeof(self->length[0]));
+#endif
         memcpy(length                  , self->length , self->leng_recs  * sizeof(length[0]));
         memcpy(length + self->leng_recs, other->length, other->leng_recs * sizeof(length[0]));
 
@@ -1070,6 +1707,14 @@ rc_t PageMapAppend( PageMap *self, const PageMap *other ) {
         self->reserve_leng = self->leng_recs;
         self->reserve_data = self->data_recs;
         
+#if PAGEMAP_STATISTICS
+        pm_stats.currentWaste += (self->reserve_data - self->data_recs) * sizeof(self->data_run[0]) +
+                                 (self->reserve_leng - self->leng_recs) * (sizeof(self->leng_run[0]) + sizeof(self->length[0]));
+        pm_stats.currentFootprint += self->reserve_data * sizeof(self->data_run[0]) +
+                                     self->reserve_leng * (sizeof(self->leng_run[0]) + sizeof(self->length[0]));
+        if (pm_stats.maxFootprint < pm_stats.currentFootprint)
+            pm_stats.maxFootprint = pm_stats.currentFootprint;
+#endif
         return 0;
     }
     return rc;
diff --git a/libs/vdb/page-map.h b/libs/vdb/page-map.h
index f57158a..427dc45 100644
--- a/libs/vdb/page-map.h
+++ b/libs/vdb/page-map.h
@@ -27,6 +27,8 @@
 #ifndef _h_page_map_
 #define _h_page_map_
 
+#include <assert.h>
+
 #ifndef _h_vdb_extern_
 #include <vdb/extern.h>
 #endif
@@ -35,11 +37,98 @@
 #include <klib/defs.h>
 #endif
 
+#include <klib/data-buffer.h>
+#include <klib/refcount.h>
+
+#if _DEBUGGING
+#define _HEAVY_PAGEMAP_DEBUGGING 0
+#endif
+
 struct KDataBuffer;
-typedef struct PageMap PageMap;
+
+typedef uint32_t pm_size_t;
 typedef uint32_t row_count_t;
 typedef uint32_t elem_count_t;
 
+typedef enum {  PM_REGION_EXPAND_UNKNOWN=0,     /** notset **/
+                PM_REGION_EXPAND_FULL,          /** full expansion     - 2 arrays: offset,length**/
+                PM_REGION_EXPAND_SAMELEN,       /** partial expansion  - 1 array: offset **/
+                PM_REGION_EXPAND_EQUIDISTANT,   /** data have same length and always unique - no expansion needed **/
+                PM_REGION_EXPAND_SAMEDATA       /** same data - no expansion needed ***/
+} pm_expand_region_type_t;
+
+typedef struct PageMapRegion {
+	row_count_t	start_row;
+	row_count_t	numrows;
+	elem_count_t	data_offset;/** for unexpanded regions first direct offset into data**/
+				    /** for expanded regions - offset into expanded storage **/
+	elem_count_t	length;	    /** first length of the region ***/
+	uint8_t		type;       /** one of the types from pm_expand_region_type_t*/
+	bool		expanded;   /** if expandable storage is being used ***/
+} PageMapRegion;
+
+
+
+
+typedef struct PageMap {
+    /* memory allocation object for length[], leng_run[], data_run[] */
+    KDataBuffer cstorage;
+
+    /* array of row lengths
+     * has leng_recs elements
+     * is sized to reserve_leng elements
+     * == storage.base
+     */
+    bool   random_access;
+    enum { eBlobPageMapOptimizedNone, eBlobPageMapOptimizedSucceeded, eBlobPageMapOptimizedFailed}  optimized;
+    elem_count_t *length;
+
+    /* array of run lengths of row lengths
+     * has leng_recs elements
+     * is sized to reserve_leng elements
+     * == length + reserve_leng
+     */
+    row_count_t *leng_run;
+
+    /* array of repeat counts of data
+     * has data_recs elements
+     * is sized to reserve_data elements
+     * == leng_run + reserve_leng
+     */
+    row_count_t *data_run;
+    /** expanded offsets into data - needed for random access ***/
+    /** only valid when random_access is true **/
+    elem_count_t *data_offset;
+
+/******* DYNAMIC EXPANSION CONTROL *****************/
+    PageMapRegion		*exp_rgn_last;
+    row_count_t			exp_row_last;   /* last row analyzed for region expansion */
+    row_count_t			exp_lr_used;    /* how much leng_run was used from the */
+    pm_size_t			exp_lr_last;	/* index of last leng_run expanded */
+    pm_size_t			exp_dr_last;	/* index of last data_run expanded */
+    pm_size_t			exp_rgn_cnt;    /* current number of expanded regions */
+    elem_count_t		exp_data_offset_last;/* last offset into data */
+    
+
+    KDataBuffer			istorage;	/* binary searchable storage for expansion regions */
+    KDataBuffer			dstorage;	/* storage for expanded data */
+/** LAST SEARCH CONTROL *****/
+    pm_size_t			i_rgn_last; 	/* region index found in previous lookup **/
+    PageMapRegion*		rgn_last; 	/* redundant - region found in previous lookup **/
+
+/****************************/
+
+    pm_size_t leng_recs;     /* number of valid elements in length[] and leng_run[] */
+    pm_size_t data_recs;     /* number of valid elements in data_run[] */
+    pm_size_t reserve_leng;  /* number of allocated elements in length[] and leng_run[] */
+    pm_size_t reserve_data;  /* number of allocated elements in data_run[] */
+    pm_size_t start_valid;   /* the expanded array contains valid data upto start_valid */
+    row_count_t row_count;   /* total number of rows in page map */
+    row_count_t pre_exp_row_count; /* number of rows pre-expanded */
+    KRefcount refcount;
+} PageMap;
+
+
 /* a pessimistic estimate - actual size will *always* be less than or equal */
 size_t PageMapGetMaxBufferSize(const PageMap *self);
 
@@ -79,10 +168,12 @@ rc_t PageMapNewSingle(PageMap **lhs, uint64_t row_count, uint64_t row_length);
 
 rc_t PageMapNewFixedRowLength(PageMap **lhs, uint64_t row_count, uint64_t row_len);
 
-uint32_t PageMapFastRowCount(const PageMap *self);
+rc_t PageMapToRandomAccess(PageMap **rslt, PageMap * src,uint32_t *data_offset);
 
 uint32_t PageMapFixedRowLength(const PageMap *self);
 
+rc_t	PageMapRowLengthRange(const PageMap *self, elem_count_t *min,elem_count_t *max);
+
 uint32_t PageMapHasSimpleStructure(const PageMap *self);
 
 rc_t PageMapAppendRows(PageMap *self, uint64_t row_length, uint64_t run_length, bool same_data);
@@ -95,6 +186,9 @@ rc_t PageMapAppendRows(PageMap *self, uint64_t row_length, uint64_t run_length,
 /* concatenate two page maps */
 rc_t PageMapAppend(PageMap *self, const PageMap *other);
 
+/** Find data using pagemap ***/
+rc_t PageMapFindRow(const PageMap *cself,uint64_t row,uint32_t * data_offset,uint32_t * data_length,uint32_t * repeat_count);
+
 
 /*
  -1: error
@@ -106,28 +200,36 @@ int PageMapCompare(const PageMap *a, const PageMap *b);
 /* same but static columns */
 int PageMapCompareStatic(const PageMap *a, const PageMap *b);
 
-enum PageMapIteratorVariants {
-    pmivConstant,
-    pmivVersion1, /* fixed row length and no repeats */
-    pmivFixedRowLength,
-    pmivFull /* variable row length and has repeats */
-};
-
 typedef struct PageMapIterator PageMapIterator;
 struct PageMapIterator {
-    row_count_t end_row;
-    row_count_t cur_row;
-    const elem_count_t *length;
-    const elem_count_t *offset;
-    const row_count_t  *repeat;
-    enum PageMapIteratorVariants variant;
+    row_count_t		last_row;
+    row_count_t		cur_row;
+    PageMapRegion**	rgns;	  /** all regions from the pagemap **/
+    pm_size_t		cur_rgn;  /** offset of the current region **/
+    row_count_t 	cur_rgn_row; /** row relative to offset of the region **/
+    elem_count_t	**exp_base; /*** exp buffer ***/
+    row_count_t		repeat_count; /** remaining repeat count **/
+    elem_count_t	static_datalen;
+#if _HEAVY_PAGEMAP_DEBUGGING
+    PageMap *parent;
+#endif
 };
 
 rc_t PageMapNewIterator(const PageMap *self, PageMapIterator *lhs, uint64_t first_row, uint64_t num_rows);
 
-static __inline__ bool PageMapIteratorAdvance(PageMapIterator *self, row_count_t rows) {
-    if (self->cur_row + rows < self->end_row) {
-        self->cur_row += rows;
+static __inline__ bool PageMapIteratorAdvance(PageMapIterator *self, row_count_t rows)
+{
+    if (self->cur_row + rows < self->last_row) {
+	self->cur_row += rows;
+	self->cur_rgn_row += rows;
+	if(self->repeat_count > rows) self->repeat_count-= rows;
+	else self->repeat_count = 0;
+	if(self->rgns){/** non-static, non simple random access**/
+		while((*self->rgns)[self->cur_rgn].numrows <= self->cur_rgn_row){
+			self->cur_rgn_row -= (*self->rgns)[self->cur_rgn].numrows;
+			self->cur_rgn++;
+		}
+        }
         return true;
     }
     return false;
@@ -135,38 +237,147 @@ static __inline__ bool PageMapIteratorAdvance(PageMapIterator *self, row_count_t
 
 #define PageMapIteratorNext(SELF) PageMapIteratorAdvance(SELF, 1)
 
-static __inline__ elem_count_t PageMapIteratorDataLength(const PageMapIterator *self) {
-    switch (self->variant) {
-    default:
-        return self->length[0];
-    case pmivFull:
-        return self->length[self->cur_row];
+static __inline__ elem_count_t PageMapIteratorDataLength(const PageMapIterator *self)
+{
+    elem_count_t datalen=0;
+    if(self->rgns == NULL) {/* static or simple random-access*/
+	return  self->static_datalen;
     }
+    switch ((*self->rgns)[self->cur_rgn].type){
+	case PM_REGION_EXPAND_FULL:
+		if((*self->rgns)[self->cur_rgn].expanded){
+			datalen = (*self->exp_base)[(*self->rgns)[self->cur_rgn].data_offset + 2*self->cur_rgn_row];
+		} else {
+			datalen = (*self->rgns)[self->cur_rgn].length;
+		}
+                break;
+	case PM_REGION_EXPAND_SAMELEN:
+	case PM_REGION_EXPAND_EQUIDISTANT:
+	case PM_REGION_EXPAND_SAMEDATA:
+		datalen = (*self->rgns)[self->cur_rgn].length;
+		break;
+	default:
+		assert(0);
+		break;
+   }
+#if _HEAVY_PAGEMAP_DEBUGGING
+   {
+	elem_count_t dtl,dto,dtr;
+	PageMapFindRow(self->parent,self->cur_row,&dto,&dtl,&dtr);
+	assert(dtl==datalen);
+   }
+#endif
+   /*printf("DATA_LEN=%d\n",datalen);*/
+   return datalen;
 }
 
-static __inline__ elem_count_t PageMapIteratorDataOffset(const PageMapIterator *self) {
-    switch (self->variant) {
-    case pmivConstant:
-        return 0;
-    case pmivVersion1:
-        return self->length[0] * self->cur_row;
-    default:
-        return self->offset[self->cur_row];
+static __inline__ elem_count_t PageMapIteratorDataOffset(const PageMapIterator *self)
+{
+    elem_count_t dataoff=0;
+    if(self->rgns == NULL){ /** static or simple random **/
+	if(self->exp_base != NULL)  /** simple random access */
+		dataoff= (*self->exp_base)[self->cur_row];
+	return dataoff;
+    }
+    switch ((*self->rgns)[self->cur_rgn].type){
+        case PM_REGION_EXPAND_FULL:
+                if((*self->rgns)[self->cur_rgn].expanded){
+                        dataoff = (*self->exp_base)[(*self->rgns)[self->cur_rgn].data_offset + 2*self->cur_rgn_row + 1];
+                } else {
+                        dataoff = (*self->rgns)[self->cur_rgn].data_offset;
+                }
+                break;
+        case PM_REGION_EXPAND_SAMELEN:
+		if((*self->rgns)[self->cur_rgn].expanded){
+                        dataoff = (*self->exp_base)[(*self->rgns)[self->cur_rgn].data_offset + self->cur_rgn_row];
+                } else {
+                        dataoff = (*self->rgns)[self->cur_rgn].data_offset;
+                }
+                break;
+        case PM_REGION_EXPAND_EQUIDISTANT:
+		dataoff = (*self->rgns)[self->cur_rgn].data_offset + (*self->rgns)[self->cur_rgn].length * self->cur_rgn_row;
+		break;
+        case PM_REGION_EXPAND_SAMEDATA:
+                dataoff = (*self->rgns)[self->cur_rgn].data_offset;
+                break;
+        default:
+                assert(0);
+                break;
     }
+#if _HEAVY_PAGEMAP_DEBUGGING
+   {
+        elem_count_t dtl,dto,dtr;
+        PageMapFindRow(self->parent,self->cur_row,&dto,&dtl,&dtr);
+        assert(dto==dataoff);
+   }
+#endif
+    return dataoff;
 }
 
-static __inline__ row_count_t PageMapIteratorRepeatCount(const PageMapIterator *self) {
-    switch (self->variant) {
-    case pmivConstant:
-        return self->end_row - self->cur_row;
-    case pmivVersion1:
-        return 1;
-    default:
-        return self->repeat[self->cur_row];
+static __inline__ row_count_t PageMapIteratorRepeatCount(const PageMapIterator *cself)
+{
+    if(cself->repeat_count==0){
+	PageMapIterator *self = (PageMapIterator*) cself;
+	if(self->rgns==NULL){ /** must be simple random access **/
+		uint64_t i;
+		assert(*self->exp_base);
+		for(i=self->cur_row+1,self->repeat_count=1;
+                    i< self->last_row && (*self->exp_base)[i]==(*self->exp_base)[self->cur_row];
+                    i++,self->repeat_count++){}
+	} else {
+		switch ((*self->rgns)[self->cur_rgn].type){
+		 case PM_REGION_EXPAND_FULL:
+			if((*self->rgns)[self->cur_rgn].expanded){
+				int i;
+				elem_count_t* base = (*self->exp_base) + (*self->rgns)[self->cur_rgn].data_offset;
+				self->repeat_count = 1;
+				for(i=self->cur_rgn_row+1;i<(*self->rgns)[self->cur_rgn].numrows;i++){
+					if(base[2*self->cur_rgn_row]== base[2*i] && base[2*self->cur_rgn_row+1]== base[2*i+1]) self->repeat_count++;
+					else break;
+				}
+			} else {
+				self->repeat_count =  (*self->rgns)[self->cur_rgn].numrows - self->cur_rgn_row;
+			}
+			break;
+		 case PM_REGION_EXPAND_SAMELEN:
+			if((*self->rgns)[self->cur_rgn].expanded){
+				int i;
+				elem_count_t* base = (*self->exp_base) + (*self->rgns)[self->cur_rgn].data_offset;
+				self->repeat_count = 1;
+				for(i=self->cur_rgn_row+1;i<(*self->rgns)[self->cur_rgn].numrows;i++){
+					if(base[self->cur_rgn_row] == base[i]) self->repeat_count++;
+					else break;
+				}
+			} else {
+				self->repeat_count = (*self->rgns)[self->cur_rgn].numrows - self->cur_rgn_row;
+			}
+			break;
+		 case PM_REGION_EXPAND_EQUIDISTANT:
+			self->repeat_count = 1;
+			break;
+		 case PM_REGION_EXPAND_SAMEDATA:
+			self->repeat_count =  (*self->rgns)[self->cur_rgn].numrows - self->cur_rgn_row;
+			break;
+		 default:
+			assert(0);
+			break;
+		}
+	}
     }
+#if _HEAVY_PAGEMAP_DEBUGGING
+   {
+        elem_count_t dtl,dto,dtr;
+        PageMapFindRow(cself->parent,cself->cur_row,&dto,&dtl,&dtr);
+        assert(dtr==cself->repeat_count);
+   }
+#endif
+    return cself->repeat_count;
 }
 
 elem_count_t PageMapLastLength(const PageMap *cself);
 bool PageMapHasRows(const PageMap *self);
+rc_t PageMapExpand(const PageMap *cself, row_count_t upto);
+rc_t PageMapExpandFull(const PageMap *cself);
+rc_t PageMapPreExpandFull(const PageMap *cself, row_count_t upto);
 
 #endif /* _h_page_map_ */
diff --git a/libs/vdb/phys-cmn.c b/libs/vdb/phys-cmn.c
index 727b61c..7af0c10 100644
--- a/libs/vdb/phys-cmn.c
+++ b/libs/vdb/phys-cmn.c
@@ -415,7 +415,7 @@ rc_t VPhysicalReadKColumn ( VPhysical *self, VBlob **vblob, int64_t id, uint32_t
                     num_read = 2;
 
                 /* create data buffer */
-                rc = KDataBufferMakeBytes ( & buffer, (uint32_t)( num_read + remaining ) );
+                rc = KDataBufferMakeBytes ( & buffer, num_read + remaining );
                 if ( rc == 0 )
                 {
                     /* read entire blob */
@@ -458,7 +458,7 @@ rc_t VPhysicalReadKColumn ( VPhysical *self, VBlob **vblob, int64_t id, uint32_t
  *  read a blob from static data or decoding chain
  */
 static
-rc_t VPhysicalReadStatic ( VPhysical *self, VBlob **vblob, uint32_t elem_bits )
+rc_t VPhysicalReadStatic ( VPhysical *self, VBlob **vblob, int64_t id, uint32_t elem_bits )
 {
     bool reversed;
     rc_t rc = KMDataNodeByteOrder ( self -> knode, & reversed );
@@ -515,10 +515,23 @@ rc_t VPhysicalReadStatic ( VPhysical *self, VBlob **vblob, uint32_t elem_bits )
                     rc = KDataBufferMake ( & buffer, elem_bits, ( uint32_t ) ( row_bits / elem_bits ) );
                     if ( rc == 0 )
                     {
+                        int64_t sstart_id = self -> sstart_id;
+                        int64_t sstop_id = self -> sstop_id;
+
                         /* copy out single row */
                         memcpy ( buffer . base, base, bytes );
+                        self->fixed_len = buffer.elem_count;
+
+                        /* limit row range */
+                        if ( ( ( sstop_id - sstart_id ) >> 32 ) != 0 )
+                        {
+                            sstart_id  =   ((id-1) &  ~0x7fffffffUL ) + 1;  /** Truncate to the nearest 2 billion **/
+                            if ( ( ( sstop_id - sstart_id ) >> 32 ) != 0 ) /** still not enough ***/
+                                sstop_id = sstart_id + 0x80000000UL ; /** leave only 2 billion */
+                        }
+
                         rc = VBlobCreateFromSingleRow ( vblob,
-                            self -> sstart_id, self -> sstop_id, & buffer, byte_order );
+                            sstart_id, sstop_id, & buffer, byte_order );
                         KDataBufferWhack( &buffer );
                     }
                 }
@@ -537,11 +550,18 @@ rc_t VPhysicalReadBlob ( VPhysical *self, VBlob **vblob, int64_t id, uint32_t el
     if ( self -> knode != NULL &&
          id >= self -> sstart_id && id <= self -> sstop_id )
     {
-        return VPhysicalReadStatic ( self, vblob, elem_bits );
+        return VPhysicalReadStatic ( self, vblob, id, elem_bits );
     }
-
+    {
     /* need to read from kcolumn path */
-    return VProductionReadBlob ( self -> b2p, vblob, id , 1);
+	rc_t rc = VProductionReadBlob ( self -> b2p, vblob, id , 1, NULL);
+	if(rc == 0){
+	    if((*vblob)->pm==NULL){
+		rc = PageMapProcessGetPagemap(&self->curs->pmpr,&(*vblob)->pm);
+	    }
+	}
+	return rc;
+   }
 }
 
 
@@ -550,9 +570,10 @@ rc_t VPhysicalReadBlob ( VPhysical *self, VBlob **vblob, int64_t id, uint32_t el
  */
 
 rc_t VPhysicalProdMake ( VProduction **prodp, Vector *owned,
-    VPhysical *phys, int sub, const char *name,
+    struct VCursor *curs, VPhysical *phys, int sub, const char *name,
     const VFormatdecl *fd, const VTypedesc *desc )
 {
+#define PHYSPROD_INDEX_OFFSET 1000000000
     VPhysicalProd *prod;
     rc_t rc = VProductionMake ( prodp, owned, sizeof * prod,
         prodPhysical, sub, name, fd, desc, NULL, chainDecoding );
@@ -562,6 +583,10 @@ rc_t VPhysicalProdMake ( VProduction **prodp, Vector *owned,
 
         /* this class only knows how to redirect messages to VPhysical */
         prod -> phys = phys;
+	if(sub == prodPhysicalOut){
+		(*prodp) -> cctx.cache   = curs->blob_mru_cache;
+		(*prodp) -> cctx.col_idx = PHYSPROD_INDEX_OFFSET + (++curs -> phys_cnt);
+	}
     }
     return rc;
 }
diff --git a/libs/vdb/prod-cmn.c b/libs/vdb/prod-cmn.c
index bc0e275..3be26a4 100644
--- a/libs/vdb/prod-cmn.c
+++ b/libs/vdb/prod-cmn.c
@@ -65,6 +65,10 @@
 #include <stdio.h>
 #include <limits.h>
 
+#if ! WINDOWS
+#define LAUNCH_PAGEMAP_THREAD 1
+#endif
+
 
 /*--------------------------------------------------------------------------
  * VBlob
@@ -168,7 +172,7 @@ static
 void VProductionFlushCacheDeep ( VProduction *self, const char *context )
 {
     int i;
-    for ( i = 0; i < PROD_CACHE; ++ i )
+    for ( i = 0; i < self -> cache_cnt; ++ i )
     {
 #if TRACKING_BLOBS
         if ( self -> cache [ i ] != NULL )
@@ -196,7 +200,7 @@ void VProductionFlushCacheDeep ( VProduction *self, const char *context )
 
 /* Make
  */
-rc_t VSimpleProdMake ( VProduction **prodp, Vector *owned,
+rc_t VSimpleProdMake ( VProduction **prodp, Vector *owned, struct VCursor const *curs,
    int sub, const char *name, const VFormatdecl *fd, const VTypedesc *desc,
     const VCtxId *cid, VProduction *in, uint8_t chain )
 {
@@ -207,6 +211,7 @@ rc_t VSimpleProdMake ( VProduction **prodp, Vector *owned,
     {
         prod = ( VSimpleProd* ) * prodp;
         prod -> in = in;
+        prod -> curs = curs;
     }
     return rc;
 }
@@ -214,7 +219,7 @@ rc_t VSimpleProdMake ( VProduction **prodp, Vector *owned,
 static
 rc_t VSimpleProdPage2Blob ( VSimpleProd *self, VBlob **rslt, int64_t id ,uint32_t cnt)
 {
-    return VProductionReadBlob(self->in, rslt, id, cnt);
+    return VProductionReadBlob(self->in, rslt, id, cnt, NULL);
 }
 
 static
@@ -222,7 +227,7 @@ rc_t VSimpleProdSerial2Blob ( VSimpleProd *self, VBlob **rslt, int64_t id, uint3
 {
     /* read serialized blob */
     VBlob *sblob;
-    rc_t rc = VProductionReadBlob ( self -> in, &sblob, id, cnt );
+    rc_t rc = VProductionReadBlob ( self -> in, &sblob, id, cnt, NULL );
     if ( rc == 0 )
     {
         /* recast data to 8 bit */
@@ -232,8 +237,18 @@ rc_t VSimpleProdSerial2Blob ( VSimpleProd *self, VBlob **rslt, int64_t id, uint3
         {
             /* create a new, fluffy blob having rowmap and headers */
             VBlob *y;
+#if LAUNCH_PAGEMAP_THREAD
+            if(self->curs->pagemap_thread == NULL){
+                VCursor *curs = (VCursor*) self->curs;
+                if(--curs->launch_cnt<=0){
+                    /* ignoring errors because we operate with or without thread */
+                    VCursorLaunchPagemapThread(curs);
+                }
+            }
+#endif
+		
             rc = VBlobCreateFromData ( & y, sblob -> start_id, sblob -> stop_id,
-                & buffer, VTypedescSizeof ( & self -> dad . desc ) );
+                & buffer, VTypedescSizeof ( & self -> dad . desc ), self->curs->pagemap_thread?&self->curs->pmpr:NULL );
             KDataBufferWhack ( & buffer );
 
             /* return on success */
@@ -254,7 +269,7 @@ rc_t VSimpleProdBlob2Serial( VSimpleProd *self, VBlob **rslt, int64_t id, uint32
     rc_t rc;
     VBlob *sblob;
     
-    rc = VProductionReadBlob(self->in, &sblob, id, cnt);
+    rc = VProductionReadBlob(self->in, &sblob, id, cnt, NULL);
     if (rc == 0) {
         VBlob *y;
         
@@ -283,14 +298,14 @@ rc_t VSimpleProdBlob2Serial( VSimpleProd *self, VBlob **rslt, int64_t id, uint32
 /* Read
  *  return a blob containing row id
  */
-rc_t VSimpleProdRead ( VSimpleProd *self, VBlob **vblob, int64_t id, uint32_t cnt )
+rc_t VSimpleProdRead ( VSimpleProd *self, VBlob **vblob, int64_t id, uint32_t cnt, VBlobMRUCacheCursorContext *cctx)
 {
     rc_t rc;
 
     switch ( self -> dad . sub )
     {
     case prodSimpleCast:
-        rc = VProductionReadBlob ( self -> in, vblob, id , cnt );
+        rc = VProductionReadBlob ( self -> in, vblob, id , cnt, cctx );
         break;
     case prodSimplePage2Blob:
         return VSimpleProdPage2Blob(self, vblob, id, cnt);
@@ -494,8 +509,6 @@ rc_t VFunctionProdCallRowFunc( VFunctionProd *self, VBlob **prslt, int64_t row_i
     uint32_t row_count, const VXformInfo *info, Vector *args )
 {
     rc_t rc;
-    int64_t start_id;
-    int64_t stop_id;
     uint32_t i, argc = VectorLength ( args );
     VRowResult rslt;
     VRowData args_os[16], *args_oh, *argv;
@@ -505,6 +518,7 @@ rc_t VFunctionProdCallRowFunc( VFunctionProd *self, VBlob **prslt, int64_t row_i
     PageMapIterator iter_os[16], *iter_oh, *iter;
     uint64_t last = 0;
     uint32_t last_len = 0;
+    uint64_t  window;
     
     if (argc == 0) {
         memset(&scratch, 0, sizeof(scratch));
@@ -536,44 +550,56 @@ rc_t VFunctionProdCallRowFunc( VFunctionProd *self, VBlob **prslt, int64_t row_i
         KDataBufferWhack(&scratch);
         return rc;
     }
-    
-    /* get row range */
-#define MAX_BLOB_REGROUP 1024 /** max rows in blob for regrouping ***/
-#if 1
-      for (start_id=-INT64_MAX - 1,stop_id=INT64_MAX,i = 0; i != argc; ++ i) {
+
+
+#define MAX_BLOB_REGROUP 256 /** max rows in blob for regrouping ***/
+    window=self->stop_id-self->start_id+1;/*** from previous fetch **/
+    if(row_id == self->stop_id+1){ /** sequentual io ***/
+	if( window < MAX_BLOB_REGROUP && (row_id%(4*window))==1){
+		window *=4;
+	}
+    } else {
+	window = 1;
+    } 
+
+    if(window == 1){
+	self->start_id=self->stop_id=row_id;
+	if(row_count > 0) self->stop_id += row_count-1;
+    } else { 
+      for (self->start_id=-INT64_MAX - 1,self->stop_id=INT64_MAX,i = 0; i != argc; ++ i) {
           in = VectorGet(args, i);
-        if(start_id < in->start_id) start_id=in->start_id;
-        if(stop_id  > in->stop_id ) stop_id =in->stop_id;
+        if(self->start_id < in->start_id) self->start_id=in->start_id;
+        if(self->stop_id  > in->stop_id ) self->stop_id =in->stop_id;
       }
-      assert(row_id >= start_id && row_id  + row_count -1 <= stop_id);
-      if(start_id==-INT64_MAX - 1 || stop_id==INT64_MAX){
-        start_id=stop_id=row_id;
-        if(row_count > 0) stop_id += row_count-1;
+      assert(row_id >= self->start_id && row_id  + row_count -1 <= self->stop_id);
+      if(self->start_id==-INT64_MAX - 1 || self->stop_id==INT64_MAX){
+        self->start_id=self->stop_id=row_id;
+        if(row_count > 0) self->stop_id += row_count-1;
       } else if (    row_count ==1 /*we are re-blobing */
-                  && stop_id - start_id > 2*MAX_BLOB_REGROUP){
-	int	n=(row_id-1)/MAX_BLOB_REGROUP;
-	if(start_id <= n*MAX_BLOB_REGROUP)      start_id=n*MAX_BLOB_REGROUP+1;
-	if(stop_id > (n+1) * MAX_BLOB_REGROUP) stop_id = (n+1)*MAX_BLOB_REGROUP;
+                  && self->stop_id - self->start_id > 2*window){
+	int64_t	n=(row_id-1)/window;
+	if(self->start_id <= n*window)      self->start_id=n*window+1;
+	if(self->stop_id > (n+1) * window) self->stop_id = (n+1)*window;
       }
-#else
-    start_id=stop_id=row_id;
-    if(row_count > 0) stop_id += row_count-1;
-#endif
+    }
     
 #if PROD_NAME
-    rc = VBlobNew ( &blob, start_id, stop_id, self->dad.name );
+    rc = VBlobNew ( &blob, self->start_id, self->stop_id, self->dad.name );
 #else
-    rc = VBlobNew ( &blob, start_id, stop_id, "VFunctionProdCallDetRowFunc" );
+    rc = VBlobNew ( &blob, self->start_id, self->stop_id, "VFunctionProdCallDetRowFunc" );
 #endif
     TRACK_BLOB ( VBlobNew, blob );
     if (rc)
         return rc;
     rc = PageMapNew(&blob->pm, BlobRowCount(blob));
+    if (rc == 0)
+	rc = PageMapPreExpandFull(blob->pm, BlobRowCount(blob));
     if (rc) {
       vblob_release(blob, NULL);
         return rc;
     }
     
+    
     memset(&scratch, 0, sizeof(scratch));
     rslt.data = &scratch;
     rslt.elem_bits = scratch.elem_bits = blob->data.elem_bits = VTypedescSizeof(&self->dad.desc);
@@ -585,22 +611,28 @@ rc_t VFunctionProdCallRowFunc( VFunctionProd *self, VBlob **prslt, int64_t row_i
     
     for (i = 0; i != argc; ++ i) {
         in = VectorGet(args, i);
-        
-        rc = PageMapNewIterator(in->pm, &iter[i], 0, -1);
+       
+	if(in->start_id == -INT64_MAX - 1 ) {
+		rc = PageMapNewIterator(in->pm, &iter[i],0,-1);
+	} else {
+		rc = PageMapNewIterator(in->pm, &iter[i], self->start_id-in->start_id, self->stop_id - self->start_id + 1);
+	}
         if ( rc ) break;
+/*********
         if ( !PageMapIteratorAdvance( &iter[i], (uint32_t)( start_id - in->start_id ) ) ) {
             rc = RC(rcVDB, rcFunction, rcExecuting, rcBlob, rcCorrupt);
             break;
         }
+**********/
         memset(&argv[i], 0, sizeof(argv[i]));
         argv[i].variant = vrdData;
         argv[i].u.data.elem_bits = in->data.elem_bits;
         argv[i].u.data.base = in->data.base;
     }
     
-    for (row_id = start_id; row_id <= stop_id && rc == 0; ) {
+    for (row_id = self->start_id; row_id <= self->stop_id && rc == 0; ) {
         uint32_t row_count = 1;
-	if(self->dad.sub == vftRow){
+	if(self->dad.sub == vftRow ){
 		row_count = PageMapIteratorRepeatCount(&iter[0]);
 		
 		for (i = 1; i != argc; ++i) {
@@ -608,8 +640,8 @@ rc_t VFunctionProdCallRowFunc( VFunctionProd *self, VBlob **prslt, int64_t row_i
 		    if (row_count > j)
 			row_count = j;
 		}
-		if (row_id + row_count > stop_id + 1)
-		    row_count = (uint32_t)( stop_id + 1 - row_id );
+		if (row_id + row_count > self->stop_id + 1)
+		    row_count = (uint32_t)( self->stop_id + 1 - row_id );
 	}
 			
 	for (i = 0; i != argc; ++i) {
@@ -623,7 +655,7 @@ rc_t VFunctionProdCallRowFunc( VFunctionProd *self, VBlob **prslt, int64_t row_i
         
         assert(rslt.elem_count >> 32 == 0);
 
-        if (row_id == start_id || last_len != rslt.elem_count ||
+        if ( row_id == self->start_id || last_len != rslt.elem_count || 
             bitcmp(blob->data.base, last * rslt.elem_bits,
                    rslt.data->base, 0, rslt.elem_count * rslt.elem_bits) != 0)
         {
@@ -745,7 +777,7 @@ rc_t VFunctionProdCallPageFunc( VFunctionProd *self, VBlob **rslt, int64_t id,
     
     VECTOR_ALLOC_ARRAY(argc, argv, on_stack, on_heap);
     VECTOR_ALLOC_ARRAY(argc, param, pb_stack, pb_heap);
-    
+
     memset(argv, 0, sizeof(argv[0]) * argc);
     
     for (start_id = stop_id = 0,
@@ -754,6 +786,13 @@ rc_t VFunctionProdCallPageFunc( VFunctionProd *self, VBlob **rslt, int64_t id,
          i = 0; i != argc ; ++i) {
         const VBlob *b = (const VBlob *)VectorGet(args, i);
         const VProduction *prod = (const VProduction *)VectorGet(&self->parms, i);
+
+
+        if(b->pm == NULL){
+		rc=PageMapProcessGetPagemap(&self->curs->pmpr,&b->pm);
+		if(rc != 0) return rc;
+	}
+
         
         if (prod->control) {
             param[i].variant = vrdControl;
@@ -1014,7 +1053,11 @@ rc_t VFunctionProdCallBlobFuncDecoding( VFunctionProd *self, VBlob *rslt,
          * are fixed row-length so we know the data size
          * we are relying on the blob deserialization code
          * to set the page map up correctly */
-        hdr = BlobHeadersCreateDummyHeader(0, 0, 0, BlobRowCount(sblob) * PageMapGetIdxRowInfo(sblob->pm, 0, 0));
+        if (sblob->pm == NULL) {
+            hdr = BlobHeadersCreateDummyHeader(0, 0, 0, (sblob->data.elem_bits * sblob->data.elem_count + 7) >> 3);
+        }
+        else
+            hdr = BlobHeadersCreateDummyHeader(0, 0, 0, BlobRowCount(sblob) * PageMapGetIdxRowInfo(sblob->pm, 0, 0));
         /* leave rslt->headers null so that the next
          * stage will also create a dummy header */
     }
@@ -1083,7 +1126,12 @@ rc_t VFunctionProdCallBlobFunc( VFunctionProd *self, VBlob **prslt,
     
     sblob = VectorGet(args, 0);
     assert(sblob);
-    
+    if(self->dad.chain == chainEncoding){
+	VBlobAddRef(sblob);
+	if(sblob->headers==NULL)/**first in encryption chain***/
+		VBlobPageMapOptimize(&sblob); /** try to optimize the blob **/
+    }
+
 #if PROD_NAME
     rc = VBlobNew(&rslt, sblob->start_id, sblob->stop_id, self->dad.name);
 #else
@@ -1100,10 +1148,12 @@ rc_t VFunctionProdCallBlobFunc( VFunctionProd *self, VBlob **prslt,
     
     rslt->byte_order = sblob->byte_order;
     
-    if (self->dad.chain == chainEncoding)
+    if (self->dad.chain == chainEncoding){
         rc = VFunctionProdCallBlobFuncEncoding(self, rslt, id, info, sblob);
-    else
+	vblob_release( sblob, NULL );
+    } else {
         rc = VFunctionProdCallBlobFuncDecoding(self, rslt, id, info, sblob);
+    }
     
     if (rc == 0) {
         *prslt = rslt;
@@ -1123,6 +1173,16 @@ rc_t VFunctionProdCallBlobNFunc( VFunctionProd *self, VBlob **rslt,
     rc_t rc;
     
     VECTOR_TO_ARRAY(argc, argv, on_stack, on_heap, args);
+    {
+	int i;
+	for(i=0;i<argc;i++){
+		VBlob const *vb=argv[i];
+		if(vb->pm == NULL){
+			rc=PageMapProcessGetPagemap(&self->curs->pmpr,&vb->pm);
+			if(rc != 0) return rc;
+		}
+	}
+    }
     rc = self->u.bfN(self->fself, info, id, rslt, argc, argv);
     if ( on_heap )
         free( (void*) on_heap );
@@ -1203,34 +1263,13 @@ rc_t VFunctionProdCallByteswap ( VFunctionProd *self, VBlob **vblob,
          * repair missing pagemap
          */
         if (blob->pm == NULL) {
-#if 0
-            uint32_t row_length = blob->data.elem_count / blob->row_count;
-
-            if (row_length == 0)
-                rc = RC(rcVDB, rcBlob, rcReading, rcBlob, rcCorrupt);
-            else {
-                uint32_t elem_count = row_length * blob->row_count;
-                if (elem_count < blob->data.elem_count) {
-                    fprintf(stderr, "blob contains too much elements, expected %u have %u\n", elem_count, blob->data.elem_count );
-#if 1
-                    blob->data.elem_count = elem_count;
-#else
-                    blob->row_count = blob->data.elem_count / row_length;
-                    blob->stop_id = blob->start_id + blob->row_count - 1;
-                    fprintf(stderr, "new row_count: %u\n", blob->row_count );
-#endif
-                }
-                rc = PageMapNewFixedRowLength(&blob->pm, blob->row_count, row_length);
-            }
-#else
-            if (blob->data.elem_count % BlobRowCount(blob) != 0)
+            uint64_t row_count = BlobRowCount ( blob );
+            if ( row_count == 0 || blob->data.elem_count % row_count != 0)
                 rc = RC(rcVDB, rcBlob, rcReading, rcBlob, rcCorrupt);
             else {
-                uint64_t row_len = blob->data.elem_count / BlobRowCount(blob);
-                assert(row_len >> 32 == 0);
-                rc = PageMapNewFixedRowLength(&blob->pm, BlobRowCount(blob), (uint32_t)row_len);
+                uint64_t row_len = blob->data.elem_count / row_count;
+                rc = PageMapNewFixedRowLength(&blob->pm, row_count, row_len);
             }
-#endif
         }
     }
 
@@ -1290,7 +1329,7 @@ rc_t VFunctionProdCallCompare1(VFunctionProd *self, VBlob **vblob, int64_t id, u
     
     *vblob = NULL;
     assert(VectorLength(&self->parms) == 2);
-    rc = VProductionReadBlob((const VProduction *)VectorGet(&self->parms, 0), &orig, id, cnt);
+    rc = VProductionReadBlob((const VProduction *)VectorGet(&self->parms, 0), &orig, id, cnt, NULL);
     if (rc == 0) {
         int64_t i;
         PageMapIterator oi;
@@ -1308,7 +1347,7 @@ rc_t VFunctionProdCallCompare1(VFunctionProd *self, VBlob **vblob, int64_t id, u
 
             j = PageMapIteratorDataLength(&oi);
 
-            rc = VProductionReadBlob(test_prod, &test, i, 1);
+            rc = VProductionReadBlob(test_prod, &test, i, 1, NULL);
             if (rc == 0) {
                 if (orig->data.elem_bits != test->data.elem_bits || orig->byte_order != test->byte_order)
                     rc = RC(rcVDB, rcBlob, rcValidating, rcBlob, rcCorrupt);
@@ -1380,8 +1419,7 @@ rc_t VFunctionProdCallCompare1(VFunctionProd *self, VBlob **vblob, int64_t id, u
                 }
                 vblob_release(test, NULL);
                 if (rc)
-                    break;
-            }
+                    break; }
             else
                 break;
             PageMapIteratorAdvance(&oi, 1);
@@ -1396,19 +1434,24 @@ static
 rc_t VFunctionProdCallCompare( VFunctionProd *self, VBlob **vblob, int64_t id, uint32_t cnt ) {
     VBlob *orig;
     rc_t rc;
+    VProduction const *orig_prod;
     
     *vblob = NULL;
     assert(VectorLength(&self->parms) == 2);
-    rc = VProductionReadBlob((const VProduction *)VectorGet(&self->parms, 0), &orig, id, cnt);
+    orig_prod = (const VProduction *)VectorGet(&self->parms, 0);
+    rc = VProductionReadBlob(orig_prod, &orig, id, cnt, NULL);
     if (rc == 0) {
         VBlob *test;
         const VProduction *test_prod = VectorGet(&self->parms, 1);
         
-        rc = VProductionReadBlob(test_prod, &test, id, cnt);
+        rc = VProductionReadBlob(test_prod, &test, id, cnt, NULL);
         if (rc == 0) {
-            if (orig->data.elem_bits != test->data.elem_bits || orig->byte_order != test->byte_order)
+            if (orig->data.elem_bits != test->data.elem_bits || orig->byte_order != test->byte_order){
                 rc = RC(rcVDB, rcBlob, rcValidating, rcBlob, rcCorrupt);
-            else {
+            } else if(   orig->pm->data_recs != 1				/*** catching static **/
+                      || test->pm->data_recs != 1				/*** trying quick comparison **/
+		      || orig->data.elem_count != test->data.elem_count
+                      || memcmp( orig->data.base, test->data.base, (orig->data.elem_bits*orig->data.elem_count+7)/8)){
                 uint64_t i;
                 PageMapIterator oi;
                 PageMapIterator ti;
@@ -1464,7 +1507,7 @@ rc_t VFunctionProdCallCompare( VFunctionProd *self, VBlob **vblob, int64_t id, u
                             break;
                         }
                         i += j;
-                        if ( done || (int64_t)i > orig->stop_id || !PageMapIteratorAdvance( &ti, 0 ) )
+			if ( done || (int64_t)i > orig->stop_id || test->pm->random_access || orig->pm->random_access || !PageMapIteratorAdvance( &ti, 0 ) )
                             break;
                     }
                     if (rc)
@@ -1492,7 +1535,7 @@ rc_t VFunctionProdCallCompare( VFunctionProd *self, VBlob **vblob, int64_t id, u
                     if (!PageMapIteratorAdvance(&ti, 0)) {
                         VBlob *temp;
                         
-                        rc = VProductionReadBlob(test_prod, &temp, i, orig->stop_id - i);
+                        rc = VProductionReadBlob(test_prod, &temp, i, orig->stop_id - i, NULL);
                         if (rc == 0) {
                             vblob_release(test, NULL);
                             test = temp;
@@ -1532,7 +1575,7 @@ bool CC fetch_param_blob ( void *item, void *data )
     fetch_param_blob_data *pb = data;
     VBlob *blob;
     
-    pb -> rc = VProductionReadBlob ( item, & blob, pb -> id , pb -> cnt);
+    pb -> rc = VProductionReadBlob ( item, & blob, pb -> id , pb -> cnt, NULL);
     if ( pb -> rc == 0 )
     {
         pb -> rc = VectorAppend ( pb -> inputs, NULL, blob );
@@ -1552,7 +1595,7 @@ bool CC fetch_first_param_blob ( void *item, void *data )
 {
     fetch_param_blob_data *pb = data;
     
-    pb -> rc = VProductionReadBlob ( item, &pb->vblob, pb -> id , pb -> cnt);
+    pb -> rc = VProductionReadBlob ( item, &pb->vblob, pb -> id , pb -> cnt, NULL);
     if (GetRCState(pb->rc) == rcNotFound)
         return false;
     if ( pb -> vblob -> data.elem_count == 0 )
@@ -1660,7 +1703,7 @@ static rc_t VFunctionProdReadNormal ( VFunctionProd *self, VBlob **vblob, int64_
                 rc = RC ( rcVDB, rcFunction, rcReading, rcProduction, rcNull );
             }
             else {
-                if (vb -> start_id > id_run) { /*** shoudn't happen ***/
+                if (vb -> start_id > id_run || vb -> stop_id < id_run) { /*** shoudn't happen ***/
                     rc = RC ( rcVDB, rcBlob, rcReading, rcRange, rcInsufficient );
                 }
                 if (*vblob == NULL) {
@@ -1784,7 +1827,7 @@ bool CC fetch_param_FixedRowLength ( void *item, void *data )
 static
 uint32_t VFunctionProdFixedRowLength ( const VFunctionProd *self, int64_t row_id,bool  ignore_self )
 {
-    if(ignore_self == false &&  (self->dad.sub == vftRow || self->dad.sub == vftNonDetRow || self->dad.sub == vftIdDepRow)){
+    if(ignore_self == false &&  (self->dad.sub == vftRow || self->dad.sub == vftNonDetRow || self->dad.sub == vftIdDepRow )){
 	return 0;
     } else {
 	fetch_param_FixedRowLength_data pb;
@@ -1800,7 +1843,7 @@ uint32_t VFunctionProdFixedRowLength ( const VFunctionProd *self, int64_t row_id
  * VScriptProd
  */
 
-rc_t VScriptProdMake ( VScriptProd **prodp, Vector *owned,
+rc_t VScriptProdMake ( VScriptProd **prodp, Vector *owned, struct VCursor const *curs,
     int sub, const char *name, const VFormatdecl *fd,
     const VTypedesc *desc, uint8_t chain )
 {
@@ -1810,6 +1853,7 @@ rc_t VScriptProdMake ( VScriptProd **prodp, Vector *owned,
     if ( rc == 0 )
     {
         prod = * prodp;
+        prod -> curs = curs;
         VectorInit ( & prod -> owned, 0, 4 );
     }
     return rc;
@@ -1825,7 +1869,7 @@ void VScriptProdDestroy ( VScriptProd *self )
  */
 rc_t VScriptProdRead ( VScriptProd *self, VBlob **vblob, int64_t id,uint32_t cnt )
 {
-    return VProductionReadBlob ( self -> rtn, vblob, id , cnt);
+    return VProductionReadBlob ( self -> rtn, vblob, id , cnt, NULL);
 }
 
 static rc_t VScriptProdColumnIdRange ( const VScriptProd *self, int64_t *first, int64_t *last )
@@ -1957,6 +2001,9 @@ LIB_EXPORT int CC VProductionSort ( const void *item, const void *n )
 rc_t VProductionColumnIdRange ( const VProduction *self,
     int64_t *first, int64_t *last )
 {
+    if ( self <= FAILED_PRODUCTION )
+        return 0;
+
     switch ( self -> var )
     {
     case prodSimple:
@@ -1970,7 +2017,7 @@ rc_t VProductionColumnIdRange ( const VProduction *self,
     case prodColumn:
         return RC ( rcVDB, rcColumn, rcAccessing, rcRange, rcEmpty );
     }
-
+    
     return RC ( rcVDB, rcColumn, rcAccessing, rcType, rcUnknown );
 }
 
@@ -1978,7 +2025,7 @@ rc_t VProductionPageIdRange ( VProduction *self,
     int64_t id, int64_t *first, int64_t *last )
 {
     VBlob *blob;
-    rc_t rc = VProductionReadBlob ( self, & blob, id , 1);
+    rc_t rc = VProductionReadBlob ( self, & blob, id , 1, NULL);
     if ( rc == 0 )
     {
         * first = blob -> start_id;
@@ -1997,11 +2044,11 @@ uint32_t VProductionRowLength ( const VProduction *self, int64_t row_id )
     uint32_t row_len;
 
     VBlob *blob;
-    rc_t rc = VProductionReadBlob ( self, & blob, row_id, 1 );
+    rc_t rc = VProductionReadBlob ( self, & blob, row_id, 1, NULL );
     if ( rc != 0 )
         return 0;
     
-    row_len = PageMapGetIdxRowInfo ( blob -> pm, (uint32_t)row_id, NULL );
+    row_len = PageMapGetIdxRowInfo ( blob -> pm, (uint32_t)( row_id - blob -> start_id) , NULL );
 
     vblob_release ( blob, NULL );
     
@@ -2032,7 +2079,7 @@ uint32_t VProductionFixedRowLength ( const VProduction *self, int64_t row_id,boo
 
 /* ReadBlob
  */
-rc_t VProductionReadBlob ( const VProduction *cself, VBlob **vblob, int64_t id, uint32_t cnt )
+rc_t VProductionReadBlob ( const VProduction *cself, VBlob **vblob, int64_t id, uint32_t cnt, VBlobMRUCacheCursorContext *cctx )
 {
     rc_t rc;
     VProduction *self = ( VProduction* ) cself;
@@ -2048,9 +2095,25 @@ rc_t VProductionReadBlob ( const VProduction *cself, VBlob **vblob, int64_t id,
     if ( self == NULL )
         return RC ( rcVDB, rcProduction, rcReading, rcSelf, rcNull );
 
+    /*** Cursor-level column blobs may be 1-to-1 with production blobs ***/
+    if(cctx != NULL && self->cctx.cache == NULL ){ /*** we are connected to read cursor **/
+	self->cctx = *cctx; /*** remember it ***/
+	/** No need to do anything else here - we are on "direct line" to the column ***/
+    } else if(self->cctx.cache != NULL){
+	/** somewhere else this production is connected to a cursor **/
+	/** lets try to get answers from the cursor **/
+	blob=(VBlob*) VBlobMRUCacheFind(self->cctx.cache,self->cctx.col_idx,id);
+	if(blob){
+		rc = VBlobAddRef ( blob );
+                if ( rc != 0 ) return rc;
+		*vblob=blob;
+		return 0;
+	}
+    }
+
 #if PROD_CACHE
     /* check cache */
-    for ( i = 0; i < PROD_CACHE; ++ i )
+    for ( i = 0; i < self -> cache_cnt; ++ i )
     {
         blob = self -> cache [ i ];
         if ( self -> cache [ i ] != NULL )
@@ -2083,10 +2146,11 @@ rc_t VProductionReadBlob ( const VProduction *cself, VBlob **vblob, int64_t id,
                 /* MRU cache */
                 if ( i > 0 )
                 {
-                    do
-                        self -> cache [ i ] = self -> cache [ i - 1 ];
-                    while ( -- i > 0 );
+		    memmove(self -> cache +1,self -> cache,i*sizeof(*self->cache));
                     self -> cache [ 0 ] = blob;
+		    if( i > self->cache_cnt_max / 2 -1 ){ /** this is how wash area is defined **/
+			self->cache_wash_access_cnt++; /** we are accessing  wash area of the cache **/
+		    }
                 }
 #endif
                 return 0;
@@ -2099,7 +2163,7 @@ rc_t VProductionReadBlob ( const VProduction *cself, VBlob **vblob, int64_t id,
     switch ( self -> var )
     {
     case prodSimple:
-        rc = VSimpleProdRead ( ( VSimpleProd* ) self, vblob, id, cnt );
+        rc = VSimpleProdRead ( ( VSimpleProd* ) self, vblob, id, cnt,cctx );
         break;
     case prodFunc:
         rc = VFunctionProdRead ( ( VFunctionProd* ) self, vblob, id , cnt);
@@ -2135,24 +2199,41 @@ rc_t VProductionReadBlob ( const VProduction *cself, VBlob **vblob, int64_t id,
     if ( ! blob -> no_cache )
         return 0;
 #endif
+    if(cctx == NULL && self->cctx.cache != NULL && blob->stop_id > blob->start_id + 4){/** we will benefit from caching here **/
+	VBlobMRUCacheSave(self->cctx.cache,self->cctx.col_idx,blob);
+	return 0;
+    }
+
+    if(blob->pm == NULL) return 0;
+
 
     /* cache output */
     rc = VBlobAddRef ( blob );
     if ( rc == 0 )
     {
         VBlobCheckIntegrity ( blob );
-
-        /* release whatever was there previously */
-        vblob_release ( self -> cache [ PROD_CACHE - 1 ], NULL );
-
-#if PROD_CACHE > 1
-        /* drop LRU */
-        if ( self -> cache [ 0 ] != NULL )
-        {
-            for ( i = PROD_CACHE - 1; i > 0; -- i )
-                self -> cache [ i ] = self -> cache [ i - 1 ];
-        }
+        if(self -> cache_cnt_max == 0){ /*** set the cache size now ***/
+		self -> cache_cnt_max = PROD_CACHE;
+#if 0
+	} else if(   self->var==prodScript
+		  && self -> cache_cnt >= self -> cache_cnt_max
+		  && self -> cache_cnt_max/PROD_CACHE  < PROD_CACHE_MAX_EXTENTS
+		  && self -> cache_wash_access_cnt > PROD_CACHE_WASH_ACCESS_THRESHOLD){  /** try to extend the cache ***/
+			 self -> cache_cnt_max += PROD_CACHE;
+                         self -> cache_wash_access_cnt = 0;
 #endif
+	}
+	if(self -> cache_cnt < self -> cache_cnt_max){
+		if(self -> cache_cnt > 0 ){
+			memmove(self -> cache + 1, self -> cache , self -> cache_cnt * sizeof(*self -> cache));
+		}
+		self -> cache_cnt ++;
+	} else {
+		/* release whatever was there previously */
+        	/* drop LRU */
+		vblob_release ( self -> cache [ self -> cache_cnt - 1 ], NULL );
+		memmove(self -> cache + 1, self -> cache , (self -> cache_cnt -1) * sizeof(*self -> cache));
+        }
         /* insert a head of list */
         self -> cache [ 0 ] = blob;
                 
diff --git a/libs/vdb/prod-expr.c b/libs/vdb/prod-expr.c
index 3a2e9da..07a3080 100644
--- a/libs/vdb/prod-expr.c
+++ b/libs/vdb/prod-expr.c
@@ -127,7 +127,7 @@ rc_t VProdResolveCastExpr ( const VProdResolve *self, VProduction **out, const S
 
            in all cases, the sizeof rh production element
            matches "cast" size */
-        rc = VSimpleProdMake ( out, self -> owned, prodSimpleCast,
+        rc = VSimpleProdMake ( out, self -> owned, self -> curs, prodSimpleCast,
             "cast", & cast, & desc, NULL, * out, self -> chain );
     }
 
@@ -196,7 +196,7 @@ rc_t VProdResolveSProduction ( const VProdResolve *self, VProduction **out, cons
         {
             const char *name = sprod -> name -> name . addr;
             assert ( name [ sprod -> name -> name . size ] == 0 );
-            rc = VSimpleProdMake ( out, self -> owned, prodSimpleCast,
+            rc = VSimpleProdMake ( out, self -> owned, self -> curs, prodSimpleCast, 
                 name, & fd, & desc, & sprod -> cid, * out, self -> chain );
             if ( rc == 0 )
             {
@@ -762,7 +762,7 @@ rc_t VProdResolveColumnRead ( const VProdResolve *self,
     /* create a simple prod to manage fd and desc */
     name = scol -> name -> name . addr;
     assert ( name [ scol -> name -> name . size ] == 0 );
-    rc = VSimpleProdMake ( out, self -> owned, prodSimpleCast,
+    rc = VSimpleProdMake ( out, self -> owned, self->curs, prodSimpleCast,
         name, & fd, & vcol -> desc, NULL, * out, self -> chain );
 
     assert (rc != -1);
@@ -829,7 +829,7 @@ rc_t VProdResolvePhysicalRead ( const VProdResolve *self, VPhysical *phys )
 
     /* create output adapter */
     rc = VPhysicalProdMake ( & prod, self -> owned,
-        phys, prodPhysicalOut, name, & fd, & desc );
+        curs, phys, prodPhysicalOut, name, & fd, & desc );
     if ( rc != 0 )
         return rc;
 
@@ -853,12 +853,12 @@ rc_t VProdResolvePhysicalRead ( const VProdResolve *self, VPhysical *phys )
 
     /* create adapter */
     rc = VPhysicalProdMake ( & prod, self -> owned,
-        phys, prodPhysicalKCol, name, & fd, & desc );
+        curs, phys, prodPhysicalKCol, name, & fd, & desc );
     if ( rc != 0 )
         return rc;
 
     /* create serial-to-blob stage */
-    rc = VSimpleProdMake ( & prod, self -> owned,
+    rc = VSimpleProdMake ( & prod, self -> owned, self->curs,
         prodSimpleSerial2Blob, name, & fd, & desc, NULL, prod, chainDecoding );
     if ( rc != 0 )
         return rc;
diff --git a/libs/vdb/prod-func.c b/libs/vdb/prod-func.c
index a7e18bd..173bd09 100644
--- a/libs/vdb/prod-func.c
+++ b/libs/vdb/prod-func.c
@@ -251,7 +251,7 @@ rc_t VProdResolveFuncParamExpr ( const VProdResolve *self, Vector *out,
                 assert ( name [ sprod -> name -> name . size ] == 0 );
             }
 
-            rc = VSimpleProdMake ( & prod, self -> owned,
+            rc = VSimpleProdMake ( & prod, self -> owned, self-> curs,
                 prodSimpleCast, name,fd, & desc, NULL, prod, self -> chain);
             if ( rc == 0 )
             {
@@ -405,7 +405,7 @@ rc_t VProdResolveScriptExpr ( const VProdResolve *self,
 
                 /* by this time, we have bound all parameters */
                 VScriptProd *script;
-                rc = VScriptProdMake ( & script, self -> owned,
+                rc = VScriptProdMake ( & script, self -> owned, self->curs,
                     prodScriptFunction, name, & fd, & desc, self -> chain );
                 if ( rc == 0 )
                 {
@@ -766,7 +766,7 @@ rc_t VProdResolveEncodingExpr ( const VProdResolve *self,
                     {
                         VScriptProd *script;
                         const char *name = sphys -> name -> name . addr;
-                        rc = VScriptProdMake ( & script, self -> owned,
+                        rc = VScriptProdMake ( & script, self -> owned, self->curs,
                             prodScriptFunction, name, & fd, NULL, self -> chain );
                         if ( rc == 0 )
                         {
diff --git a/libs/vdb/prod-priv.h b/libs/vdb/prod-priv.h
index b30d37c..81a45fb 100644
--- a/libs/vdb/prod-priv.h
+++ b/libs/vdb/prod-priv.h
@@ -43,12 +43,34 @@
 #include "schema-priv.h"
 #endif
 
+#ifndef _h_blob_priv_
+#include "blob-priv.h"
+#endif
+
+
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 
-#define PROD_CACHE 4
+#define PROD_CACHE  	  2                   	/** default size of Production Cache ***/
+#define PROD_CACHE_MAX_EXTENTS  4		/** maximum multiplier for extending selected production caches when random io is detected ***/
+#define PROD_CACHE_WASH_ACCESS_THRESHOLD 10	/** number of accesses to wash part of the cache to trigger cache extension ***/
+						/** this is to determine random access pattern ***/
+
+/* IT IS A BAD IDEA TO USE EXTERN COLUMNS IN EXPRESSIONS
+   but it used to be okay in version 0 of the schema, so
+   it still occurs sometimes. We have allowed opening
+   columns from within schema but were afraid to alter the
+   row vector because this disturbs the serial allocation
+   of ids that could fool programmers trying to be clever.
+   Unfortunately, this resulted in a stray reference after
+   we shifted reference ownership to the row vector.
+
+   Setting this symbol to 1 will cause schema-opened columns
+   to be inserted into the row vector, disturbing the index
+   series passed out to clients, but not losing the reference. */
+#define OPEN_COLUMN_ALTERS_ROW 1
 
 #if _DEBUGGING
 #define PROD_NAME 1
@@ -63,6 +85,7 @@ struct VBlob;
 struct VColumn;
 struct VPhysical;
 struct VProdResolve;
+struct VBlobMRUCacheCursorContext;
 
 
 /*--------------------------------------------------------------------------
@@ -107,7 +130,10 @@ struct VProduction
 #endif
 #if PROD_CACHE
     /* cached output */
-    struct VBlob *cache [ PROD_CACHE ];
+    struct VBlob *cache [ PROD_CACHE * PROD_CACHE_MAX_EXTENTS];
+    uint32_t cache_cnt_max;
+    uint32_t cache_cnt;
+    uint32_t cache_wash_access_cnt;
 #endif
     /* format declaration and element type description */
     VFormatdecl fd;
@@ -130,6 +156,8 @@ struct VProduction
 
     /* true if used as control parameter */
     bool control;
+    /* is this production directly connected to a Column in a Cursor */
+    VBlobMRUCacheCursorContext cctx;
 };
 
 
@@ -203,7 +231,7 @@ uint32_t VProductionFixedRowLength ( const VProduction *self, int64_t row_id, bo
  *  fetch a blob containing at least the requested row
  *  returns a new reference
  */
-rc_t VProductionReadBlob ( const VProduction *self, struct VBlob **vblob, int64_t id , uint32_t cnt);
+rc_t VProductionReadBlob ( const VProduction *self, struct VBlob **vblob, int64_t id , uint32_t cnt, struct VBlobMRUCacheCursorContext* cctx);
 
 
 /*--------------------------------------------------------------------------
@@ -228,10 +256,11 @@ struct VSimpleProd
 {
     VProduction dad;
     VProduction *in;
+    struct VCursor const *curs;
 };
 
 rc_t VSimpleProdMake ( VProduction **prod, Vector *owned,
-    int sub, const char *name, const VFormatdecl *fd,
+    struct VCursor const *curs,int sub, const char *name, const VFormatdecl *fd,
     const VTypedesc *desc, const VCtxId *cid,
     VProduction *in, uint8_t chain );
 
@@ -241,7 +270,7 @@ rc_t VSimpleProdMake ( VProduction **prod, Vector *owned,
 /* Read
  *  return a blob containing row id
  */
-rc_t VSimpleProdRead ( VSimpleProd *self, struct VBlob **vblob, int64_t id, uint32_t cnt );
+rc_t VSimpleProdRead ( VSimpleProd *self, struct VBlob **vblob, int64_t id, uint32_t cnt, struct VBlobMRUCacheCursorContext *cctx );
 
 
 /*--------------------------------------------------------------------------
@@ -294,6 +323,10 @@ struct VFunctionProd
 
     /* vector of VProduction input parameters */
     Vector parms;
+
+    /* adaptive prefetch parameters */
+   int64_t start_id;
+   int64_t stop_id;
 };
 
 
@@ -332,11 +365,12 @@ struct VScriptProd
     VProduction dad;
     VProduction *rtn;
     Vector owned;
+    struct VCursor const *curs;
 };
 
 
 rc_t VScriptProdMake ( VScriptProd **prod, Vector *owned,
-    int sub, const char *name, const VFormatdecl *fd,
+    struct VCursor const *curs, int sub, const char *name, const VFormatdecl *fd,
     const VTypedesc *desc, uint8_t chain );
 
 void VScriptProdDestroy ( VScriptProd *self );
@@ -345,7 +379,7 @@ void VScriptProdDestroy ( VScriptProd *self );
 /* Read
  */
 rc_t VScriptProdRead ( VScriptProd *self,
-    struct VBlob **vblob, int64_t id, uint32_t cnt );
+    struct VBlob **vblob, int64_t id, uint32_t cnt);
 
 
 /*--------------------------------------------------------------------------
@@ -366,7 +400,7 @@ struct VPhysicalProd
 };
 
 rc_t VPhysicalProdMake ( VProduction **prod, Vector *owned,
-    struct VPhysical *phys, int sub, const char *name,
+    struct VCursor *curs, struct VPhysical *phys, int sub, const char *name,
     const VFormatdecl *fd, const VTypedesc *desc );
 
 void VPhysicalProdDestroy ( VPhysicalProd *self );
diff --git a/libs/vdb/prod.c b/libs/vdb/prod.c
index d3370e4..eb9730d 100644
--- a/libs/vdb/prod.c
+++ b/libs/vdb/prod.c
@@ -83,9 +83,22 @@ rc_t VProdResolveColumn ( const VProdResolve *self,
         if ( rc != 0 )
             return rc;
 
+#if OPEN_COLUMN_ALTERS_ROW
+        rc = VectorAppend ( & curs -> row, & vcol -> ord, vcol );
+        if ( rc != 0 )
+        {
+            VColumnWhack ( vcol, NULL );
+            return rc;
+        }
+#endif
         rc = VCursorCacheSet ( & curs -> col, & scol -> cid, vcol );
         if ( rc != 0 )
         {
+#if OPEN_COLUMN_ALTERS_ROW
+            void *ignore;
+            VectorSwap ( & curs -> row, vcol -> ord, NULL, & ignore );
+            vcol -> ord = 0;
+#endif
             VColumnWhack ( vcol, NULL );
             return rc;
         }
diff --git a/libs/vdb/redimension.c b/libs/vdb/redimension.c
index e312c3b..3e22dfe 100644
--- a/libs/vdb/redimension.c
+++ b/libs/vdb/redimension.c
@@ -69,6 +69,7 @@ rc_t CC redimension_drvr(
     if (rc == 0) {
         y->byte_order = src->byte_order;
         PageMapAddRef(y->pm = src->pm);
+	y->pm->optimized = eBlobPageMapOptimizedFailed; /** pagemap is no longer valid; prevent optimization ***/
         BlobHeadersAddRef(y->headers = src->headers);
         
         *rslt = y;
diff --git a/libs/vdb/report-vdb.c b/libs/vdb/report-vdb.c
new file mode 100644
index 0000000..a231dd7
--- /dev/null
+++ b/libs/vdb/report-vdb.c
@@ -0,0 +1,856 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <vdb/extern.h>
+
+#include <klib/report.h> /* ReportInit */
+#include <klib/time.h> /* KTime */
+#include <klib/namelist.h> /* KNamelistRelease */
+#include <klib/out.h> /* OUTMSG */
+#include <klib/klib-priv.h> /* ReportFuncs */
+
+#include <vdb/report.h> /* ... */
+#include <vdb/manager.h> /* VDBManagerVersion */
+#include <vdb/vdb-priv.h> /* VTableOpenKTableRead */
+#include <vdb/database.h> /* VDatabaseRelease */
+#include <vdb/table.h> /* VTableOpenParentRead */
+#include <vdb/dependencies.h> /* VDBDependenciesRelease */
+
+#include <kdb/kdb-priv.h> /* KDatabaseGetPath */
+#include <kdb/manager.h> /* kptDatabase */
+#include <kdb/database.h> /* KDatabaseRelease */
+#include <kdb/table.h> /* KTableRelease */
+
+#include <kfs/dyload.h> /* KDyld */
+#include <kfs/file.h> /* KFileRead */
+#include <kfs/nullfile.h> /* KFileMakeNullUpdate */
+#include <kfs/md5.h> /* KMD5SumFmt */
+
+#include <atomic.h>
+
+#include <stdarg.h> /* va_start */
+#include <stdio.h> /* sprintf */
+#include <stdlib.h> /* malloc */
+#include <string.h> /* memset */
+#include <limits.h> /* PATH_MAX */
+#include <assert.h>
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+/*
+ * An unrecoverable error happened.
+ * We can help to solve it
+ * by reporting information about known application execution environment.
+ */
+
+typedef struct Report {
+    const VDBManager* mgr;
+    const VDatabase* db;
+    const VTable* table;
+} Report;
+
+static Report *report_singleton;
+
+static rc_t CC ReportRelease ( void )
+{
+    rc_t rc = 0;
+    Report *prev_report, *cur_report;
+
+    cur_report = report_singleton;
+    do
+    {
+        prev_report = cur_report;
+        cur_report = atomic_test_and_set_ptr ( ( void* volatile* ) & report_singleton, NULL, prev_report );
+    }
+    while ( cur_report != prev_report );
+
+    if ( cur_report != NULL )
+    {
+        /* cleanup */
+        VTableRelease ( cur_report -> table );
+        VDatabaseRelease ( cur_report -> db );
+        VDBManagerRelease ( cur_report -> mgr );
+        memset ( cur_report, 0, sizeof * cur_report );
+    }
+
+    return rc;
+}
+
+static rc_t CC ReportObj(const ReportFuncs *f, uint32_t indent,
+    const char *path, bool *wasDbOrTableSet);
+static rc_t CC ReportSOFTWARE ( const ReportFuncs *f, uint32_t indent, const char *argv_0, const char *date, ver_t tool_ver );
+
+static rc_t ReportGet(Report** self)
+{
+    rc_t rc = 0;
+
+    static bool latch;
+    if ( ! latch )
+    {
+        static Report self;
+
+        rc = ReportInitVDB ( ReportObj, ReportSOFTWARE, ReportRelease );
+        if ( rc == 0 )
+        {
+            report_singleton = & self;
+            latch = true;
+        }
+    }
+
+    * self = ( Report* ) report_singleton;
+
+    return rc;
+}
+
+#define report ( * f -> report )
+#define reportData ( * f -> reportData )
+#define reportData1 ( * f -> reportData1 )
+#define reportOpen ( * f -> reportOpen )
+#define reportOpen1 ( * f -> reportOpen1 )
+#define reportClose ( * f -> reportClose )
+#define reportClose1 ( * f -> reportClose1 )
+#define reportError ( * f -> reportError )
+#define reportErrorStr ( * f -> reportErrorStr )
+#define reportErrorStrImpl ( * f -> reportErrorStrImpl )
+#define reportErrorStrInt ( * f -> reportErrorStrInt )
+#define reportError3Str ( * f -> reportError3Str )
+
+static
+rc_t ReportBuild(const ReportFuncs *f, uint32_t indent, bool dynamic, const VDBManager* mgr)
+{
+    rc_t rc = 0;
+    if (!dynamic)
+    {   report(indent, "Build", 1, "static", 's', "true"); }
+    else {
+        KNamelist* list = NULL;
+        reportOpen(indent, "Build", 1, "static", 's', "false");
+        if (mgr) {
+            rc_t rc2 = VDBManagerListExternalSchemaModules(mgr, &list);
+            if (rc2 != 0) {
+                reportError
+                    (indent + 1, rc2, "VDBManagerListExternalSchemaModules");
+                if (rc == 0 && rc2 != 0)
+                {   rc = rc2; }
+            }
+            else {
+                uint32_t count = 0;
+                rc2 = KNamelistCount(list, &count);
+                if (rc2 != 0) {
+                    reportErrorStr(indent + 1, rc2, "KNamelistCount", "origin",
+                        "VDBManagerListExternalSchemaModules");
+                    if (rc == 0 && rc2 != 0)
+                    {   rc = rc2; }
+                }
+                else {
+                    int64_t i = 0;
+                    for (i = 0; i < count && rc2 == 0; ++i) {
+                        const char* name = NULL;
+                        rc2 = KNamelistGet(list, i, &name);
+                        if (rc2 != 0) {
+                            reportErrorStr(
+                                indent + 1, rc2, "KNamelistGet", "origin",
+                                "VDBManagerListExternalSchemaModules");
+                            if (rc == 0 && rc2 != 0)
+                            {   rc = rc2; }
+                        }
+                        else {
+                            report(indent + 1, "Module", 1, "name", 's', name);
+                        }
+                    }
+                }
+            }
+        }
+        RELEASE(KNamelist, list);
+        reportClose(indent, "Build");
+    }
+    return rc;
+}
+
+static rc_t VDBDependenciesReportDepend1(const VDBDependencies *self,
+    const ReportFuncs *f,
+    uint32_t count, uint32_t indent, bool toreport, uint32_t *missing)
+{
+    KDirectory *dir = NULL;
+    rc_t rc = 0;
+    uint32_t i = ~0;
+
+    assert(count && missing);
+
+    *missing = 0;
+
+    for (i = 0; i < count; ++i) {
+        bool isMissing = false;
+        bool local = false;
+        const char* seq_id = "";
+        const char* path = NULL;
+        rc = VDBDependenciesSeqId(self, &seq_id, i);
+        if (rc != 0 && toreport)
+            reportErrorStrInt(indent, rc, "VDBDependenciesSeqId",
+                "origin", "VDatabaseListDependencies", "idx", i);
+        if (rc == 0) {
+            rc = VDBDependenciesLocal(self, &local, i);
+            if (rc != 0 && toreport) {
+                reportErrorStrInt(indent, rc,
+                    "VDBDependenciesLocal",
+                    "origin", "VDatabaseListDependencies", "idx", i);
+            }
+        }
+        if (rc == 0) {
+            rc = VDBDependenciesPath(self, &path, i);
+            if (rc != 0 && toreport) {
+                reportErrorStrInt(indent, rc, "VDBDependenciesPath",
+                    "origin", "VDatabaseListDependencies", "idx", i);
+            }
+        }
+        if (rc == 0) {
+            if (!local && (path == NULL || path[0] == '\0')) {
+                isMissing = true;
+                ++*missing;
+            }
+            if (toreport) {
+                bool reported = false;
+                if (!isMissing && !local)  {
+                    rc_t rc = 0;
+                    bool readable = false;
+                    uint64_t size = ~0;
+                    KTime_t date = 0;
+                    bool ready = false;
+                    if (dir == NULL)
+                    {   rc = KDirectoryNativeDir(&dir); }
+                    assert(!local && path && path[0]);
+                    if (dir != NULL) {
+                        rc = KDirectoryFileSize(dir, &size, path);
+                        if (rc == 0)
+                        {   rc = KDirectoryDate(dir, &date, path); }
+                        if (rc == 0) {
+                            const KFile* f = NULL;
+                            rc = KDirectoryOpenFileRead(dir, &f, path);
+                            if (rc == 0) {
+                                char buffer[1024];
+                                size_t num_read = 0;
+                                size_t bsize =
+                                    size > sizeof buffer ? sizeof buffer : size;
+                                rc = KFileReadAll(f,
+                                    0, buffer, bsize, &num_read);
+                                if (rc == 0 && num_read != bsize) {
+                                    rc = RC(rcVDB, rcFile, rcReading,
+                                        rcBuffer, rcExcessive);
+                                }
+                                if (rc == 0)
+                                {   readable = true; }
+                            }
+                            KFileRelease(f);
+                        }
+                        if (rc == 0)
+                        {   ready = true; }
+                    }
+                    if (ready) {
+                        KTime kt;
+                        memset(&kt, 0, sizeof kt);
+                        KTimeLocal(&kt, date);
+                        report(indent, "Dependency", 7,
+                            "index", 'd', i,
+                            "seq_id", 's', seq_id,
+                            "local", 's', local ? "true" : "false",
+                            "path", 's', path,
+                            "size", 'u', size,
+                            "date", 'T', &kt,
+                            "readable", 's', readable ? "true" : "false");
+                        reported = true;
+                    }
+                    else {
+                        report(indent, "Dependency", 5,
+                            "index", 'd', i,
+                            "seq_id", 's', seq_id,
+                            "local", 's', local ? "true" : "false",
+                            "path", 's', path,
+                            "error", 'R', rc);
+                        reported = true;
+                    }
+                }
+                if (!reported) {
+                    report(indent, "Dependency", 4,
+                        "index", 'd', i,
+                        "seq_id", 's', seq_id,
+                        "local", 's', local ? "true" : "false",
+                        "path", 's', path == NULL ? "" : path);
+                }
+            }
+        }
+        if (rc != 0 && !toreport)
+        {   break; }
+    }
+
+    RELEASE(KDirectory, dir);
+
+    return rc;
+}
+
+static rc_t ReportDepend(const ReportFuncs *f,
+    uint32_t indent, const VDatabase* db)
+{
+    rc_t rc = 0;
+
+    const VDBDependencies* dep = NULL;
+
+    const char tag[] = "Dependencies";
+
+    assert(db);
+
+    reportOpen(indent, tag, 0);
+
+    rc = VDatabaseListDependencies(db, &dep, false);
+    if (rc != 0) {
+        reportError(indent + 1, rc, "VDatabaseListDependencies");
+    }
+    else {
+        uint32_t count = 0;
+        rc = VDBDependenciesCount(dep, &count);
+        if (rc != 0) { 
+            reportError(indent + 1, rc, "VDBDependenciesCount");
+        }
+        else {
+            uint32_t missing = 0;
+            const char tag[] = "List";
+            rc = VDBDependenciesReportDepend1(dep, f,
+                count, indent + 2, false, &missing);
+
+            if (rc == 0) {
+                reportOpen(indent + 1, tag, 2, "count", 'd', count,
+                    "missing", 'd', missing);
+            }
+            else {
+                reportOpen(indent + 1, tag, 1, "count", 'd', count);
+            }
+            
+            rc = VDBDependenciesReportDepend1(dep, f,
+                count, indent + 2, true, &missing);
+            reportClose(indent + 1, tag);
+        }
+    }
+
+    reportClose(indent, tag);
+
+    RELEASE(VDBDependencies, dep);
+
+    return rc;
+}
+
+typedef struct Total {
+    int64_t sz;
+    int64_t files;
+} Total;
+
+static rc_t CC visitor(const KDirectory* dir,
+    uint32_t type, const char* name, void* data)
+{
+    rc_t rc = 0;
+    Total* total = (Total*) data;
+    if (type & kptAlias)
+    {   return rc; }
+    assert(total);
+    switch (type) {
+        case kptFile: {
+            uint64_t size = 0;
+            rc = KDirectoryFileSize(dir, &size, name);
+            if (rc == 0) {
+                total->sz += size;
+            }
+            ++total->files;
+            break;
+        }
+        case kptDir: 
+            rc = KDirectoryVisit(dir, false, visitor, total, name);
+            break;
+        default:
+            rc = RC(rcVDB, rcDirectory, rcVisiting, rcType, rcUnexpected);
+            break;
+    }
+    return rc;
+}
+
+static rc_t ReportDir(const ReportFuncs *f, uint32_t indent, const KTable* tbl) {
+    rc_t rc = 0;
+    const KDirectory* dir = NULL;
+    if (tbl == NULL) {
+        report(indent, "Error", 1, "KTable" , 's', "NULL");
+        return rc;
+    }
+    rc = KTableOpenDirectoryRead(tbl, &dir);
+    if (rc != 0) {
+        reportError(indent, rc, "KTableOpenDirectoryRead");
+    }
+    else {
+        Total total;
+        memset(&total, 0, sizeof total);
+        rc = KDirectoryVisit(dir, false, visitor, &total, NULL);
+        report(indent, "Directory", 2,
+            "size", 'l', total.sz, "files", 'l', total.files);
+    }
+    RELEASE(KDirectory, dir);
+    return rc;
+}
+
+#define OBJ_OPEN(indent,count,path,type) reportOpen(indent, "Object", count, \
+    "path", 's', path, "type", 's', type
+#define OBJ_P_OPEN(indent,count,path,type,file_type) \
+    OBJ_OPEN(indent, count, path, type), "fs_type", 's', file_type
+
+#define OBJ(indent,path,type) \
+    OBJ_OPEN(indent, 2, path, type) )
+#define OBJ_P(indent,path,type,file_type) \
+    OBJ_P_OPEN(indent, 3, path, type, file_type) )
+#define OBJ_P_A(indent,path,type,file_type) \
+    OBJ_P_OPEN(indent, 4, path, type, file_type), "alias", 's', "true")
+#define OBJ_P_S(indent,path,type,file_type,size) \
+    OBJ_P_OPEN(indent, 4, path, type, file_type), "size", 'l', size)
+#define OBJ_P_S_A(indent,path,type,file_type,size) \
+    OBJ_P_OPEN(indent, 5, path, type, file_type), "size", 'l', size, \
+                                                  "alias", 's', "true")
+
+static rc_t CC ReportObj(const ReportFuncs *f, uint32_t indent,
+    const char *object, bool *wasDbOrTableSet)
+{
+    Report* self = NULL;
+    const char* fullpath = NULL;
+    const KDatabase* kdb = NULL;
+    const KTable* ktbl = NULL;
+    const VDatabase* db = NULL;
+    KPathType type = kptNotFound;
+    KPathType file_type = kptNotFound;
+    bool alias = false;
+    uint64_t size = 0;
+    bool size_unknown = true;
+
+    rc_t rc = ReportGet(&self);
+    assert(self);
+
+    if (wasDbOrTableSet != NULL) {
+        *wasDbOrTableSet = self->db != NULL || self->table != NULL;
+        return 0;
+    }
+
+    if (self->db != NULL) {
+        type = kptDatabase;
+        db = self->db;
+    }
+    else if (self->table != NULL) {
+        rc_t rc2 = VTableOpenParentRead(self->table, &db);
+        if (rc2)
+        {
+            if (rc == 0)
+            {
+                rc = rc2;
+            }
+        }
+        else if (!db)
+        {
+            type = kptTable;
+            rc2 = VTableGetKTableRead(self->table, &ktbl);
+            if (rc2)
+            {
+                if (rc == 0)
+                {
+                    rc = rc2;
+                }
+            }
+            else
+            {
+                rc2 = KTableGetPath(ktbl, &fullpath);
+            }
+        }
+    }
+
+    if (db) {
+        rc_t rc2 = VDatabaseOpenKDatabaseRead(db, &kdb);
+        type = kptDatabase;
+        if (rc2) {
+            if (rc == 0)
+            {   rc = rc2; }
+        }
+        else {
+            rc2 = KDatabaseGetPath(kdb, &fullpath);
+            if (rc2) {
+                if (rc == 0)
+                {   rc = rc2; }
+            }
+        }
+    }
+
+    if (fullpath) {
+        KDirectory* dir = NULL;
+        rc_t rc2 = KDirectoryNativeDir(&dir);
+        if (rc2) {
+            if (rc == 0)
+            {   rc = rc2; }
+        }
+        else {
+            file_type = KDirectoryPathType(dir, fullpath);
+            alias = file_type & kptAlias;
+            file_type &= ~kptAlias;
+            if (file_type == kptFile) {
+                rc2 = KDirectoryFileSize(dir, &size, fullpath);
+                if (rc2) {
+                    if (rc == 0)
+                    {   rc = rc2; }
+                }
+                else {  size_unknown = false; }
+            }
+        }
+        RELEASE(KDirectory, dir);
+    }
+
+    if (object || type != kptNotFound) {
+        const char* path
+            = fullpath ? fullpath : object ? object : "not set";
+        const char* stype = type == kptTable ? "table" : 
+            type == kptDatabase ? "database" : "unknown";
+        const char* sfile_type = file_type == kptFile ? "archive" : 
+            file_type == kptDir ? "dir" : "unexpected";
+
+        if (fullpath && !size_unknown) {
+            if (alias)
+            { OBJ_P_S_A(indent, path, stype, sfile_type, size); }
+            else
+            { OBJ_P_S  (indent, path, stype, sfile_type, size); }
+        }
+        else if (fullpath && size_unknown) {
+            if (alias)
+            { OBJ_P_A  (indent, path, stype, sfile_type); }
+            else
+            { OBJ_P    (indent, path, stype, sfile_type); }
+        }
+        else
+        {     OBJ      (indent, path, stype); }
+
+        if (!db)
+        {   db = self->db; }
+
+        if (db) {
+            rc_t rc2 = ReportDepend(f, indent + 1, db);
+            if (rc == 0)
+            {   rc = rc2; }
+        }
+        if (file_type == kptDir) {
+            rc_t rc2 = ReportDir(f, indent + 1, ktbl);
+            if (rc == 0)
+            {   rc = rc2; }
+        }
+
+        reportClose(indent, "Object");
+    }
+
+    if (db != self->db)
+    {   RELEASE(VDatabase, db); }
+    RELEASE(KTable, ktbl);
+    RELEASE(KDatabase, kdb);
+
+    return rc;
+}
+
+#ifdef _STATIC
+
+static
+rc_t md5(const char* path, uint8_t digest[16], const KDirectory* dir)
+{
+    const KFile* kf = NULL;
+    rc_t rc = KDirectoryOpenFileRead(dir, &kf, path);
+    if (rc == 0) {
+        KFile* fnull = NULL;
+        rc = KFileMakeNullUpdate(&fnull);
+        if (rc == 0) {
+            KMD5SumFmt* fmt = NULL;
+            rc = KMD5SumFmtMakeUpdate(&fmt, fnull);
+            if (rc == 0) {
+                const KFile* md5 = NULL;
+                rc = KFileMakeNewMD5Read(&md5, kf, fmt, path);
+                if (rc == 0) {
+                    uint64_t ps = 0;
+                    char buffer[512];
+                    size_t read = 0;
+                    do {
+                        rc = KFileRead(md5, ps, buffer, sizeof buffer, &read);
+                        if (rc == 0)
+                        {   ps += read; }
+                    } while (rc == 0 && read > 0);
+                    if (rc == 0) {
+                        bool bin;
+                        rc = KMD5SumFmtFind(fmt, path, digest, &bin);
+                    }
+                }
+                RELEASE(KFile, md5);
+            }
+            RELEASE(KMD5SumFmt, fmt);
+        }
+/*      RELEASE(KFile, fnull); fnull is released by KMD5SumFmt* fmt */
+    }
+/*  RELEASE(KFile, kf); kf is released by KFile* md5 */
+    return rc;
+}
+
+static
+rc_t ReportAlias(const ReportFuncs *f, uint32_t indent, const char* alias, const KDirectory* dir)
+{
+    char resolved[PATH_MAX + 1];
+    rc_t rc
+        = KDirectoryResolveAlias(dir, false, resolved, sizeof resolved, alias);
+    if (rc == 0) {
+        const char tag[] = "Alias";
+        uint32_t type = KDirectoryPathType(dir, resolved);
+        if (type & kptAlias) {
+            reportOpen(indent, tag, 1, "resolved", 's', resolved);
+            rc = ReportAlias(f, indent + 1, resolved, dir);
+            reportClose(indent, tag);
+        }
+        else
+        {   report(indent, tag, 1, "resolved", 's', resolved); }
+    }
+    return rc;
+}
+
+static rc_t ReportBinary(const ReportFuncs *f, uint32_t indent, const char* argv0) {
+    rc_t rc = 0;
+#ifdef _STATIC
+    KDyld *dyld = NULL;
+    assert(argv0);
+    rc = KDyldMake(&dyld);
+    if (rc != 0) {
+        reportError(indent + 1, rc, "KDyldMake");
+    }
+    else {
+        const KDirectory* dir = NULL;
+        rc = KDyldHomeDirectory(dyld, &dir, (fptr_t) ReportFinalize);
+        if (rc != 0) {
+            reportError(indent + 1, rc, "KDyldHomeDirectory");
+        }
+        else {
+            char binary[PATH_MAX + 1];
+            const char* name = strpbrk(argv0, "/\\");
+            const char* last_name = name;
+            if (last_name)
+            {   ++last_name; }
+            while (name) {
+                name = strpbrk(last_name, "/\\");
+                if (name) {
+                    last_name = name;
+                    if (last_name)
+                    {   ++last_name; }
+                }
+            }
+            name = last_name ? last_name : argv0;
+            rc = KDirectoryResolvePath(dir, true, binary, sizeof binary, name);
+            if (rc != 0) {
+                reportErrorStr(indent + 1, rc, "KDirectoryResolvePath",
+                    "origin", "KDyldHomeDirectory");
+            }
+            else {
+                bool found = false;
+                const char tag[] = "Binary";
+                const char* sType = NULL;
+                uint8_t digest[16];
+                uint32_t type = KDirectoryPathType(dir, binary);
+                switch (type & ~kptAlias) {
+                    case kptFile:
+                        sType = type & kptAlias ? "alias" : "file";
+                        found = true;
+                        break;
+                    case kptNotFound:
+                        sType = "not found";
+                        break;
+                    default:
+                        sType = "unknown";
+                        break;
+                }
+                if (found)
+                {   rc = md5(name, digest, dir); }
+                if (type & kptAlias) {
+                    if (found && rc == 0)  {
+                        reportOpen(indent, tag, 3, "path", 's', binary,
+                            "type", 's', sType, "md5", 'M', digest);
+                    }
+                    else {
+                        reportOpen(indent, tag, 2, "path", 's', binary,
+                            "type", 's', sType);
+                    }
+                    if (rc == 0 && type & kptAlias)
+                    {   rc = ReportAlias(f, indent + 1, name, dir); }
+                    reportClose(indent, tag);
+                }
+                else {
+                    if (found && rc == 0)  {
+                        report(indent, tag, 3, "path", 's', binary,
+                            "type", 's', sType, "md5", 'M', digest);
+                    }
+                    else {
+                        report(indent, tag, 2, "path", 's', binary,
+                            "type", 's', sType);
+                    }
+                }
+            }
+        }
+        RELEASE(KDirectory, dir);
+    }
+    RELEASE(KDyld, dyld);
+#endif
+    return rc;
+}
+#endif
+
+static rc_t CC ReportSOFTWARE(const ReportFuncs *f, uint32_t indent, const char *argv_0, const char *date, ver_t tool_ver ) {
+    rc_t rc = 0;
+
+    Report* self = NULL;
+    ReportGet(&self);
+    assert(self);
+
+    reportOpen(indent, "SOFTWARE", 0);
+
+    if (self->mgr) {
+        uint32_t version = 0;
+        rc = VDBManagerVersion(self->mgr, &version);
+        if (rc != 0) {
+            reportOpen(indent + 1, "Library", 0);
+            reportError(indent + 2, rc, "VDBManagerVersion");
+            reportClose(indent + 1, "Library");
+        }
+        else { report(indent + 1, "VDBLibrary", 1, "vers", 'V', version); }
+    }
+
+    {
+#ifdef _STATIC
+        bool dynamic = false;
+#else
+        bool dynamic = true;
+#endif
+
+        rc_t rc2 = ReportBuild(f, indent + 1, dynamic, self->mgr);
+        if (rc == 0 && rc2 != 0)
+        {   rc = rc2; }
+    }
+
+    if (argv_0) {
+        const char tag[] = "Tool";
+#ifdef _STATIC
+        reportOpen(indent + 1, tag, 3, "date", 's', date,
+                   "name", 's', argv_0, "vers", 'V', tool_ver);
+        {
+            rc_t rc2 = ReportBinary(f, indent + 2, argv_0);
+            if (rc == 0 && rc2 != 0)
+            {   rc = rc2; }
+        }
+        reportClose(indent + 1, tag);
+#else
+        report(indent + 1, tag, 3, "date", 's', date,
+                   "name", 's', argv_0, "vers", 'V', tool_ver);
+#endif
+    }
+
+    reportClose(indent, "SOFTWARE");
+
+    return rc;
+}
+
+
+
+/* SetVDBManager
+ *  remember the manager in use
+ */
+LIB_EXPORT rc_t CC ReportSetVDBManager(const VDBManager *mgr) {
+    rc_t rc = 0;
+
+    Report* self = NULL;
+    ReportGet(&self);
+    if ( self != NULL )
+    {
+        rc = VDBManagerAddRef ( mgr );
+        if ( rc == 0 )
+        {
+            rc = VDBManagerRelease ( self -> mgr );
+            if ( rc != 0 )
+                VDBManagerRelease ( mgr );
+            else
+                self -> mgr = mgr;
+        }
+    }
+    return rc;
+}
+
+
+/* SetDatabase
+ *  call it if you work with Database
+ *
+ *  "path" [ IN ] - path to the database that is used to access it
+ */
+LIB_EXPORT rc_t CC ReportResetDatabase ( const char *path, const VDatabase *db )
+{
+    rc_t rc = 0;
+
+    Report* self = NULL;
+    ReportGet(&self);
+    if ( self != NULL )
+    {
+        rc = VDatabaseAddRef ( db );
+        if ( rc == 0 )
+        {
+            VTableRelease ( self -> table ), self -> table = NULL;
+            VDatabaseRelease ( self -> db );
+            self -> db = db;
+        }
+    }
+
+    return rc;
+}
+
+
+/* SetTable
+ *  call it if you work with Table
+ *
+ *  "path" [ IN ] - path to the table that is used to access it
+ */
+LIB_EXPORT rc_t CC ReportResetTable ( const char *path, const VTable *tbl )
+{
+    rc_t rc = 0;
+
+    Report* self = NULL;
+    ReportGet(&self);
+    if ( self != NULL )
+    {
+        rc = VTableAddRef ( tbl );
+        if ( rc == 0 )
+        {
+            VDatabaseRelease ( self -> db ), self -> db = NULL;
+            VTableRelease ( self -> table );
+            self -> table = tbl;
+        }
+    }
+
+    return rc;
+}
diff --git a/libs/vdb/schema-dump.c b/libs/vdb/schema-dump.c
index f45bad2..5ef2ca3 100644
--- a/libs/vdb/schema-dump.c
+++ b/libs/vdb/schema-dump.c
@@ -32,11 +32,11 @@
 #include "schema-expr.h"
 
 #include <klib/text.h>
+#include <klib/printf.h>
 #include <klib/symbol.h>
 #include <klib/symtab.h>
 #include <klib/log.h>
 #include <klib/rc.h>
-#include <fmtdef.h>
 #include <os-native.h>
 #include <sysalloc.h>
 
@@ -217,6 +217,7 @@ rc_t SDumperVPrint ( SDumper *self, const char *fmt, va_list args )
     for ( rc = 0, start = end = fmt; * end != 0; ++ end )
     {
         int len;
+        size_t size;
         char buffer [ 256 ];
 
         switch ( * end )
@@ -274,30 +275,36 @@ rc_t SDumperVPrint ( SDumper *self, const char *fmt, va_list args )
                 switch ( * ( ++ end ) )
                 {
                 case 'd':
-                    len = sprintf ( buffer, "%" LD64, va_arg ( args, int64_t ) );
-                    rc = SDumperWrite ( self, buffer, len );
+                    rc = string_printf ( buffer, sizeof buffer, & size, "%ld", va_arg ( args, int64_t ) );
+                    if ( rc == 0 )
+                        rc = SDumperWrite ( self, buffer, size );
                     break;
                 case 'u':
-                    len = sprintf ( buffer, "%" LU64, va_arg ( args, uint64_t ) );
-                    rc = SDumperWrite ( self, buffer, len );
+                    rc = string_printf ( buffer, sizeof buffer, & size, "%lu", va_arg ( args, uint64_t ) );
+                    if ( rc == 0 )
+                        rc = SDumperWrite ( self, buffer, size );
                     break;
                 case 'x':
-                    len = sprintf ( buffer, "%" Lx64, va_arg ( args, uint64_t ) );
-                    rc = SDumperWrite ( self, buffer, len );
+                    rc = string_printf ( buffer, sizeof buffer, & size, "%lx", va_arg ( args, uint64_t ) );
+                    if ( rc == 0 )
+                        rc = SDumperWrite ( self, buffer, size );
                     break;
                 case 'X':
-                    len = sprintf ( buffer, "%" LX64, va_arg ( args, uint64_t ) );
-                    rc = SDumperWrite ( self, buffer, len );
+                    rc = string_printf ( buffer, sizeof buffer, & size, "%lX", va_arg ( args, uint64_t ) );
+                    if ( rc == 0 )
+                        rc = SDumperWrite ( self, buffer, size );
                     break;
                 }
                 break;
             case 'p':
-                len = sprintf ( buffer, "0x%" LXSZ, va_arg ( args, size_t ) );
-                rc = SDumperWrite ( self, buffer, len );
+                rc = string_printf ( buffer, sizeof buffer, & size, "0x%p", va_arg ( args, size_t ) );
+                if ( rc == 0 )
+                    rc = SDumperWrite ( self, buffer, size );
                 break;
             case 'z':
-                len = sprintf ( buffer, "%" LUSZ, va_arg ( args, size_t ) );
-                rc = SDumperWrite ( self, buffer, len );
+                rc = string_printf ( buffer, sizeof buffer, & size, "%zu", va_arg ( args, size_t ) );
+                if ( rc == 0 )
+                    rc = SDumperWrite ( self, buffer, size );
                 break;
             case 's':
                 len = snprintf ( buffer, sizeof buffer, "%s", va_arg ( args, const char* ) );
@@ -616,9 +623,9 @@ static rc_t CC dump_to_stderr(void *dst, const void *buf, size_t sz)
     return 0;
 }
 
-rc_t VSchemaDebugPrint(const VSchema *self, const char *decl)
+rc_t VSchemaDebugPrint ( const VSchema *self, const char *decl )
 {
-    return VSchemaDump(self, sdmPrint, decl, dump_to_stderr, NULL);
+    return VSchemaDump ( self, sdmPrint, decl, dump_to_stderr, NULL );
 }
 
 /* ToText
diff --git a/libs/vdb/schema-expr.c b/libs/vdb/schema-expr.c
index adfcdfe..df73ba2 100644
--- a/libs/vdb/schema-expr.c
+++ b/libs/vdb/schema-expr.c
@@ -505,10 +505,14 @@ static
 rc_t SPhysEncExprDump ( const SPhysEncExpr *self, SDumper *b )
 {
     rc_t rc;
+    bool compact = SDumperMode ( b ) == sdmCompact ? true : false;
 
     if ( VectorLength ( & self -> schem ) != 0 )
     {
-        rc = SExpressionBracketListDump ( & self -> schem, b, "< ", " > " );
+        if ( compact )
+            rc = SExpressionBracketListDump ( & self -> schem, b, "<", ">" );
+        else
+            rc = SExpressionBracketListDump ( & self -> schem, b, "< ", " > " );
         if ( rc != 0 )
             return rc;
     }
@@ -526,7 +530,10 @@ rc_t SPhysEncExprDump ( const SPhysEncExpr *self, SDumper *b )
 
     if ( VectorLength ( & self -> pfact ) != 0 )
     {
-        rc = SExpressionBracketListDump ( & self -> pfact, b, " < ", " >" );
+        if ( compact )
+            rc = SExpressionBracketListDump ( & self -> pfact, b, "<", ">" );
+        else
+            rc = SExpressionBracketListDump ( & self -> pfact, b, " < ", " >" );
         if ( rc != 0 )
             return rc;
     }
diff --git a/libs/vdb/schema-int.c b/libs/vdb/schema-int.c
index 572384f..d0204cf 100644
--- a/libs/vdb/schema-int.c
+++ b/libs/vdb/schema-int.c
@@ -87,6 +87,7 @@ rc_t init_keywords ( KSymTable *tbl )
         KEYWORD ( typeset ),
         KEYWORD ( validate ),
         KEYWORD ( version ),
+        KEYWORD ( view ),
         KEYWORD ( virtual ),
         KEYWORD ( void ),
         KEYWORD ( writeonly ),
diff --git a/libs/vdb/schema-parse.c b/libs/vdb/schema-parse.c
index a19d864..d36cd8b 100644
--- a/libs/vdb/schema-parse.c
+++ b/libs/vdb/schema-parse.c
@@ -65,6 +65,14 @@ void SchemaEnvInitFeatures ( SchemaEnv *env )
         env -> mixed_fact_param_list = 1;
         env -> script_function_called_schema = 1;
         break;
+    case 1:
+        switch ( ( uint8_t ) ( env -> version >> 16 ) )
+        {
+        case 1:
+            env -> default_view_decl = 1;
+            env -> has_view_keyword = 1;
+            break;
+        }
     }
 }
 
diff --git a/libs/vdb/schema-parse.h b/libs/vdb/schema-parse.h
index 22317ba..2c955dc 100644
--- a/libs/vdb/schema-parse.h
+++ b/libs/vdb/schema-parse.h
@@ -175,6 +175,7 @@ enum
     kw_typeset,
     kw_validate,
     kw_version,
+    kw_view,
     kw_virtual,
     kw_void,
     kw_writeonly,
@@ -201,6 +202,10 @@ struct SchemaEnv
     uint32_t schema_param_types_absent : 1;
     uint32_t mixed_fact_param_list : 1;
     uint32_t script_function_called_schema : 1;
+
+    /* V1 SWITCHES */
+    uint32_t default_view_decl : 1;
+    uint32_t has_view_keyword : 1;
 };
 
 /* SCHEMA_LANG_VERSION
diff --git a/libs/vdb/schema-priv.h b/libs/vdb/schema-priv.h
index 1d96432..dab6a6c 100644
--- a/libs/vdb/schema-priv.h
+++ b/libs/vdb/schema-priv.h
@@ -923,6 +923,9 @@ struct STable
     /* optional expression for limiting all columns' blob sizes */
     struct SExpression const *limit;
 
+    /* optional default view declaration */
+    const String *dflt_view;
+
     /* scope */
     BSTree scope;
 
diff --git a/libs/vdb/schema-tbl.c b/libs/vdb/schema-tbl.c
index 586b434..2a0be41 100644
--- a/libs/vdb/schema-tbl.c
+++ b/libs/vdb/schema-tbl.c
@@ -52,6 +52,9 @@
 /* make implicit physical expressions explicit on output */
 #define DUMP_EXPLICIT_PHYS_MEMBERS 0
 
+/* temporary v1 schema modification */
+#define ALLOW_DEFAULT_VIEW_DECL 1
+
 
 /*--------------------------------------------------------------------------
  * SColumn
@@ -444,6 +447,10 @@ bool CC STableOverridesClone ( void *item, void *data )
 void CC STableWhack ( void *item, void *ignore )
 {
     STable *self = item;
+
+    if ( self -> dflt_view != NULL )
+        StringWhack ( self -> dflt_view );
+
 #if SLVL >= 8
     VectorWhack ( & self -> col, SColumnWhack, NULL );
     VectorWhack ( & self -> cname, SNameOverloadWhack, NULL );
@@ -2205,6 +2212,42 @@ rc_t untyped_tbl_expr ( KSymTable *tbl, KTokenSource *src, KToken *t,
     return rc;
 }
 
+#if SLVL >= 8
+static
+rc_t default_view_decl ( KSymTable *tbl, KTokenSource *src, KToken *t,
+    const SchemaEnv *env, VSchema *self, STable *table )
+{
+    rc_t rc;
+    bool string_too_long;
+
+    if ( next_token ( tbl, src, t ) -> id != eString )
+        return KTokenExpected ( t, klogErr, "default view declaration" );
+
+    string_too_long = false;
+    if ( t -> str . size >= 236 + 2 )
+    {
+        KTokenExpected ( t, klogWarn, "default view declaration less than 236 characters" );
+        string_too_long = true;
+    }
+
+    rc = expect ( tbl, src, t, eSemiColon, ";", true );
+    if ( rc == 0 && ! string_too_long )
+    {
+        String decl = t -> str;
+        ++ decl . addr;
+        decl . size -= 2;
+        decl . len -= 2;
+
+        if ( table -> dflt_view != NULL )
+            StringWhack ( table -> dflt_view );
+
+        rc = StringCopy ( & table -> dflt_view, & decl );
+    }
+
+    return rc;
+}
+#endif
+
 /*
  * table-local-decl   = [ 'virtual' ] 'column' <column-decl>
  *                    | 'physical' [ 'column' ] <physical-decl>
@@ -2220,6 +2263,14 @@ rc_t table_local_decl ( KSymTable *tbl, KTokenSource *src, KToken *t,
     {
 #if SLVL >= 8
     case kw_default:
+        if ( env -> default_view_decl )
+        {
+            KToken t2;
+            if ( next_token ( tbl, src, & t2 ) -> id == kw_view )
+                return default_view_decl ( tbl, src, t, env, self, table );
+             KTokenSourceReturn ( src, & t2 );
+        }
+        /* no break */
     case kw_extern:
     case kw_column:
     case kw_readonly:
@@ -2808,14 +2859,13 @@ rc_t table_declaration ( KSymTable *tbl, KTokenSource *src, KToken *t,
     rc_t rc;
     void *ignore;
 
-    STable *table = malloc ( sizeof * table );
+    STable *table = calloc ( 1, sizeof * table );
     if ( table == NULL )
     {
         rc = RC ( rcVDB, rcSchema, rcParsing, rcMemory, rcExhausted );
         return KTokenRCExplain ( t, klogInt, rc );
     }
 
-    memset ( table, 0, sizeof * table );
     rc = table_decl ( tbl, src, t, env, self, table );
     if ( rc == 0 )
     {
diff --git a/libs/vdb/schema-type.c b/libs/vdb/schema-type.c
index 019b1df..0bb5186 100644
--- a/libs/vdb/schema-type.c
+++ b/libs/vdb/schema-type.c
@@ -1343,7 +1343,7 @@ rc_t VTypedeclDump ( const VTypedecl *self, SDumper *b )
     {
         const SDatatype *dt = VSchemaFindTypeid ( b -> schema, type_id );
         rc = SDatatypeDump ( dt, b );
-        if ( rc == 0 && dt -> id == 0 )
+        if ( rc == 0 && dt != NULL && dt -> id == 0 )
             return 0;
     }
     else if ( type_id < 0x80000000 )
@@ -1818,7 +1818,13 @@ rc_t create_fqn_sym ( KSymTable *tbl, KTokenSource *src, KToken *t,
     if ( KTokenizerNext ( kDefaultTokenizer, & src2, & t2 ) -> id == eColon )
     {
         /* and again to find ident or name */
-        if ( KTokenizerNext ( kDefaultTokenizer, & src2, & t2 ) -> id == eIdent || t2 . id == eName )
+        KTokenizerNext ( kDefaultTokenizer, & src2, & t2 );
+
+        /* allow reserved word "view" to be used in schemas <= 1.0 */
+        if ( t2 . id == kw_view && ! env -> has_view_keyword )
+            t2 . id = eIdent;
+
+        if ( t2 . id == eIdent || t2 . id == eName )
         {
             /* create a namespace and go in */
             KSymbol *ns;
@@ -1869,6 +1875,13 @@ rc_t enter_namespace ( KSymTable *tbl, KTokenSource *src, KToken *t,
         case eName:
             rc = create_fqn_sym ( tbl, src, t, env, id, obj );
             break;
+        case kw_view:
+            if ( ! env -> has_view_keyword )
+            {
+                rc = create_fqn_sym ( tbl, src, t, env, id, obj );
+                break;
+            }
+            /* no break */
         default:
             if ( t -> id == id )
                 rc = RC ( rcVDB, rcSchema, rcParsing, rcToken, rcExists );
@@ -1890,7 +1903,6 @@ rc_t create_fqn ( KSymTable *tbl, KTokenSource *src, KToken *t,
         return enter_namespace ( tbl, src, t, env, id, obj );
     case eIdent:
         return create_fqn_sym ( tbl, src, t, env, id, obj );
-
     default:
         if ( t -> id == id )
             return RC ( rcVDB, rcSchema, rcParsing, rcToken, rcExists );
diff --git a/libs/vdb/schema.c b/libs/vdb/schema.c
index 343ff8c..183df2a 100644
--- a/libs/vdb/schema.c
+++ b/libs/vdb/schema.c
@@ -47,8 +47,8 @@
 #include <klib/namelist.h>
 #include <klib/data-buffer.h>
 #include <klib/printf.h>
+#include <klib/out.h>
 #include <klib/rc.h>
-#include <fmtdef.h>
 #include <os-native.h>      /* because of snprintf on windows */
 #include <sysalloc.h>
 
@@ -181,11 +181,11 @@ void CC KSymbolList ( BSTNode *item, void *data )
     const KSymbol *self = ( const KSymbol* ) item;
     const char *indent = ( const char* ) data;
 
-    printf ( "%s%.*s = 0x%" LUSZ
+    OUTMSG (( "%s%.*s = %#p"
              , indent
              , ( int ) self -> name . size, self -> name . addr
-             , ( size_t ) self
-        );
+             , self
+        ));
 
     if ( self -> type != eNamespace )
         putchar ( '\n' );
@@ -202,10 +202,10 @@ void CC KSymbolList ( BSTNode *item, void *data )
 static
 void CC BSTreeListSymbols ( const BSTree *self, const char *indent )
 {
-    printf ( "%sscope = 0x%" LUSZ "\n"
+    OUTMSG (( "%sscope = %#p\n"
              , indent
-             , ( size_t ) self
-        );
+             , self
+        ));
 
     if ( indent [ -1 ] != '.' )
         -- indent;
@@ -741,7 +741,8 @@ rc_t CC VSchemaParseTextInt ( VSchema *self,
     KTokenText tt;
     KTokenSource src;
     String str, path;
-
+    rc_t rc;
+    
     if ( name == NULL || name [ 0 ] == 0 )
         CONST_STRING ( & path, "<unnamed>" );
     else
@@ -751,7 +752,14 @@ rc_t CC VSchemaParseTextInt ( VSchema *self,
     KTokenTextInit ( & tt, & str, & path );
     KTokenSourceInit ( & src, & tt );
 
-    return schema ( & src, self );
+    rc = schema ( & src, self );
+    
+    if (rc == 0)
+        PARSE_DEBUG( ("Parsed schema from %s\n", name) );
+    else
+        PARSE_DEBUG( ("Failed to parse schema from %s\n", name) );
+    
+    return rc;
 }
 
 LIB_EXPORT rc_t CC VSchemaParseText ( VSchema *self, const char *name,
diff --git a/libs/vdb/table-cmn.c b/libs/vdb/table-cmn.c
index 980ac23..3b289b2 100644
--- a/libs/vdb/table-cmn.c
+++ b/libs/vdb/table-cmn.c
@@ -518,7 +518,7 @@ rc_t list_readable_columns ( const VTable *cself )
     VTable *self = ( VTable* ) cself;
 
     VCursor *curs;
-    rc_t rc = VTableCreateCursorRead ( self, ( const VCursor** ) & curs );
+    rc_t rc = VTableCreateCursorReadInternal ( self, ( const VCursor** ) & curs );
     if (  rc == 0 )
     {
         /* let this private VCursor-function list the columns */
@@ -596,6 +596,97 @@ LIB_EXPORT rc_t CC VTableListCol ( const VTable *cself, KNamelist **names )
 }
 
 
+
+/* ListPhysColumns
+ *  avail: 2.4
+ */
+LIB_EXPORT rc_t CC VTableListPhysColumns ( const VTable *self, KNamelist **names )
+{
+    rc_t rc;
+
+    if ( names == NULL )
+        rc = RC ( rcVDB, rcTable, rcListing, rcParam, rcNull );
+    else
+    {
+        * names = NULL;
+
+        if ( self == NULL )
+            rc = RC ( rcVDB, rcTable, rcListing, rcSelf, rcNull );
+        else
+        {
+            KNamelist *kcol_names;
+            rc = KTableListCol ( self -> ktbl, & kcol_names );
+            if ( rc == 0 )
+            {
+                uint32_t kcol_count;
+                rc = KNamelistCount ( kcol_names, & kcol_count );
+                if ( rc == 0 )
+                {
+                    uint32_t scol_count = 0;
+                    KNamelist *scol_names = NULL;
+                    const KMDataNode *col_node = self -> col_node;
+
+#if LAZY_OPEN_COL_NODE
+                    if ( col_node == NULL )
+                    {
+                        rc = KMetadataOpenNodeRead ( self -> meta, & ( ( VTable* ) self ) -> col_node, "col" );
+                        if ( rc == 0 || GetRCState ( rc ) != rcNotFound )
+                            col_node = self -> col_node;
+                    }
+#endif
+                    if ( col_node != NULL )
+                    {
+                        rc = KMDataNodeListChildren ( col_node, & scol_names );
+                        if ( rc == 0 )
+                            rc = KNamelistCount ( scol_names, & scol_count );
+                    }
+
+                    if ( rc == 0 )
+                    {
+                        VNamelist *vnames;
+                        rc = VNamelistMake ( & vnames, kcol_count + scol_count );
+                        if ( rc == 0 )
+                        {
+                            uint32_t i;
+                            const char *name;
+
+                            for ( i = 0; i < kcol_count && rc == 0; ++ i )
+                            {
+                                rc = KNamelistGet ( kcol_names, i, & name );
+                                if ( rc == 0 )
+                                    rc = VNamelistAppend ( vnames, name );
+                            }
+
+                            for ( i = 0; i < scol_count && rc == 0; ++ i )
+                            {
+                                rc = KNamelistGet ( scol_names, i, & name );
+                                if ( rc == 0 )
+                                    rc = VNamelistAppend ( vnames, name );
+                            }
+
+                            if ( rc == 0 )
+                            {
+                                rc = VNamelistToNamelist ( vnames, names );
+                                if ( rc == 0 )
+                                    VNamelistReorder ( vnames, false );
+                            }
+                        }
+
+                        VNamelistRelease ( vnames );
+                    }
+
+                    KNamelistRelease ( scol_names );
+                }
+
+                KNamelistRelease ( kcol_names );
+            }
+        }
+    }
+
+    return rc;
+}
+
+
 /* ListDatatypes
  *  returns list of typedecls for named column
  *
@@ -946,6 +1037,34 @@ LIB_EXPORT rc_t CC VTableTypespec ( const VTable *self, char *ts_buff, size_t ts
 }
 
 
+/* HasStaticColumn - PRIVATE
+ *  given a physical column name, report whether it exists
+ *  and is ( currently ) static
+ *  avail: 2.5
+ */
+LIB_EXPORT bool CC VTableHasStaticColumn ( const VTable *self, const char *name )
+{
+    if ( self != NULL && name != NULL && name [ 0 ] != 0 )
+    {
+        /* a full check of this might include testing that the column
+           can be opened for read or write, but the API is purposely
+           vague on what this means.
+
+           currently the meaning of this ( PRIVATE ) API is whether
+           there is a metadata column entry with this name - period. */
+        const KMDataNode *node;
+        rc_t rc = KMetadataOpenNodeRead ( self -> meta, & node, "/col/%s", name );
+        if ( rc == 0 )
+        {
+            KMDataNodeRelease ( node );
+            return true;
+        }
+    }
+
+    return false;
+}
+
+
 /*--------------------------------------------------------------------------
  * VColumnRef
  *  cache entry
@@ -1027,7 +1146,7 @@ rc_t create_cursor_all_readable_columns(const VTable *self,
     rc_t rc = VTableListReadableColumns(self, &list);
     
     if (rc == 0) {
-        rc = VTableCreateCursorRead(self, curs);
+        rc = VTableCreateCursorReadInternal(self, curs);
         if (rc == 0) {
             uint32_t n;
             
diff --git a/libs/vdb/table-priv.h b/libs/vdb/table-priv.h
index e9078ec..4835628 100644
--- a/libs/vdb/table-priv.h
+++ b/libs/vdb/table-priv.h
@@ -175,7 +175,7 @@ rc_t VTableLoadSchema ( VTable *self );
 /* StoreSchema
  *  stores schema definition in metadata
  */
-rc_t VTableStoreSchema ( VTable *self );
+VDB_EXTERN rc_t VTableStoreSchema ( VTable *self );
 
 /* support for listing
  */
diff --git a/libs/vdb/wcolumn.c b/libs/vdb/wcolumn.c
index 44a93a2..1a4fa97 100644
--- a/libs/vdb/wcolumn.c
+++ b/libs/vdb/wcolumn.c
@@ -49,175 +49,27 @@
 #include <string.h>
 #include <assert.h>
 
-#define DFLT_TRIGGER ( 2 * 1024 * 1024 )
-#define USE_RLE 1
-
-/*--------------------------------------------------------------------------
- * VDBMemBuffer
- *  manages a linked list of VDBMem objects
- */
-typedef struct VDBMemBuffer VDBMemBuffer;
-struct VDBMemBuffer
-{
-    bitsz_t start;      /* offset in bits from the first memory page start to the first unwritten element */
-    bitsz_t end;        /* bit offset just past last unwritten element */
-    bitsz_t marker;     /* a cursor of sorts that should be in the page referred to by mem */
-    /* NOTE: marker is not always referring to an element and the user of this object
-     * is required to track this */
-    const VDBMem *mem;  /* a memory page that should contain the marker below */
-};
-
-/* these are compile time constants */
-#define VDBMemBitsInPage()      ((bitsz_t)(sizeof ((VDBMem*)0)->page * 8))
-#define VDBMemBitsInPageMask()  (VDBMemBitsInPage()-1)
-
-/* InitHead
- * initialize buffer to point to left edge of first element
- * buffer may be empty
- *
- * Parameters are expected to be good, no production run-time verification applied.
- */
-static
-void VDBMemBufferInitHead ( VDBMemBuffer *self, void *mem,
-    bitsz_t start, bitsz_t elem_size, uint64_t elem_count )
-{
-    /* during development these are validated: element size can't ever be zero
-     * the memory page must be an actual page or if its not then there can't be
-     * any elements or offset with in the NULL page */
-    assert (self != NULL);
-    assert (elem_size != 0);
-    assert ((mem != NULL) || ((mem == NULL) && (start == 0) && (elem_count == 0)));
-
-    self -> mem = ( const void* ) mem;
-    self -> start = self -> marker = start;     /* cursor at first element */
-    self -> end = start + elem_size * elem_count; /* just past last element */
-}
-
-/* InitTail
- *  initialize buffer to point to last bit
- *  buffer must not be empty
- *
- * Parameters are expected to be good, no verification applied.
- */
-static
-void VDBMemBufferInitTail ( VDBMemBuffer *self, void *mem,
-    bitsz_t start, bitsz_t elem_size, uint64_t elem_count )
-{
-    /* during development these are validated: element size can't ever be zero
-     * the memory page must be an actual page and there must be valid elements */
-    assert (self != NULL);
-    assert (elem_size != 0);
-    assert ( mem != NULL );
-    assert (elem_count != 0);
-    assert (start < VDBMemBitsInPage());
-
-    self -> mem = ( const void* ) mem;
-    self -> start = start;
-    self -> end = start + elem_size * elem_count;
-    assert ( self -> end > start );
-    self -> marker = self -> end - 1;   /* cursor at last element's last bit */
-    /* NOTE: with marker not referring to an element the first "advance" must
-     * take that off by one bit into account rather than seek the exact number of bits
-     * in elements that we'd want to move the marker */
-}
-
-/* Advance
- *  sets marker
- */
-static
-bool VDBMemBufferAdvance ( VDBMemBuffer *self, bitsz_t bits, bool reverse )
-{
-    if ( bits != 0 )
-    {
-        bitsz_t marker;
-        const VDBMem *mem;
-        uint64_t cur, targ;
-
-        if ( ! reverse )                        /* forward */
-            marker = self -> marker + bits;
-        else                                    /* backward */
-        {
-            if ( self -> marker < bits )        /* can't back up past beginning of buffer list */
-                return false;
-            marker = self -> marker - bits;
-            if ( marker < self -> start )       /* can't back up past stored begining of valid data */
-                return false;
-        }
-
-        /* anything beyond buffer is an illegal seek */
-        if ( marker >= self -> end )
-            return false;
-
-        /* convert markers to zero-based page ids */
-        cur = self -> marker / ( sizeof mem -> page * 8 );
-        targ = marker / ( sizeof mem -> page * 8 );
-        if ( cur != targ )      /* change pages if we have to */
-        {
-            /* rewind loop */
-            for ( mem = self -> mem; cur > targ; -- cur )
-            {
-                mem = ( const VDBMem* ) DLNodePrev ( & mem -> n );
-                assert ( mem != NULL );
-            }
-
-            /* forward loop */
-            for ( ; cur < targ; ++ cur )
-            {
-                mem = ( const VDBMem* ) DLNodeNext ( & mem -> n );
-                assert ( mem != NULL );
-            }
-
-            self -> mem = mem;
-        }
-
-        /* take new marker */
-        self -> marker = marker;
-    }
-
-    return true;
-}
-
-/* Access
- *  return pointer to current element (by marker/cursor)
- *  along with bit offset and number of BITS available
- */
-static
-const void *VDBMemBufferAccess ( VDBMemBuffer *self, bitsz_t *boff, bitsz_t *avail )
-{
-    const VDBMem *mem = self -> mem;
-    bitsz_t bits, marker = self -> marker;
-
-    /* if nothing was ever added to the buffer list */
-    assert (marker < self->end);
-    if ( mem == NULL )
-    {
-        if ( boff != NULL )
-            * boff = 0;
-        if ( avail != NULL )
-            * avail = 0;
-        return NULL;
-    }
-
-    /* bits available in page past marker */
-    bits =  VDBMemBitsInPage() - ( marker & VDBMemBitsInPageMask()) ;
+/* these constants MUST each be a power of two */
+#define INITIAL_DATA_PEAK ( 32 * 1024 )
+#define SINGLE_PAGE_SIZE ( 4 * 1024 )
 
-    /* limit to end of buffer if not full page */
-    if ( marker + bits > self -> end )
-        bits = self -> end - marker;
-
-    /* return bit offset */
-    if ( boff != NULL )
-        * boff = marker & 7;
+/* this is a fairly high value, useful for writing single tables
+   of data that are generally accessed serially. it's bad for random. */
+#define DFLT_TRIGGER ( 2 * 1024 * 1024 )
 
-    /* return bytes available */
-    if ( avail != NULL )
-        * avail = bits;
+/* debugging aid - Row-wise RunLengthEncoding ( repeated column
+   elimination ) can be disabled to check for errors it may introduce. */
+#define USE_RLE 1
 
-    /* return byte pointer */
-/*     return & mem -> page [ ( marker >> 3 ) & ( sizeof mem -> page - 1 ) ]; */
-    return & mem->page[(marker & VDBMemBitsInPageMask()) >> 3];
-}
+/* when defined, use as an additional condition for detecting
+   auto-commit cutoff points, with a limit in kilo-rows given below */
+#define ROW_COUNT_CUTOFFS 128
 
+#if ROW_COUNT_CUTOFFS
+#define MAX_ROW_COUNT ( ROW_COUNT_CUTOFFS * 1024 )
+#else
+#define MAX_ROW_COUNT 0x40000000
+#endif
 
 
 /*--------------------------------------------------------------------------
@@ -225,15 +77,17 @@ const void *VDBMemBufferAccess ( VDBMemBuffer *self, bitsz_t *boff, bitsz_t *ava
  */
 
 static 
-void WColumnDestroy (WColumn * self)
+void WColumnDestroy ( WColumn * self )
 {
 #if PROD_REFCOUNT && ! PROD_ALL_IN_CURSOR
-    PROD_TRACK_REFCOUNT (VProductionRelease,self->out);
-    VProductionRelease ( self->out, NULL);
-    PROD_TRACK_REFCOUNT (VProductionRelease,self->val);
-    VProductionRelease (self->val, NULL);
+    PROD_TRACK_REFCOUNT ( VProductionRelease, self -> out );
+    VProductionRelease ( self -> out, NULL );
+    PROD_TRACK_REFCOUNT ( VProductionRelease, self -> val );
+    VProductionRelease ( self -> val, NULL );
 #endif
 }
+
+
 /* Whack
  *  perform read-only cleanup
  */
@@ -251,19 +105,18 @@ void CC VColumnWhack ( void *item, void *data )
 
     if ( ! self -> read_only )
     {
-        WColumn *wself = (WColumn *)self;
+        WColumn *wself = ( WColumn* ) self;
 
         if ( wself -> page != NULL )
         {
             TRACK_BLOB (VBlobRelease, wself->page);
-            (void)VBlobRelease ( wself -> page );
+            VBlobRelease ( wself -> page );
         }
 
         KDataBufferWhack ( & wself -> dflt );
-        DLListWhack ( & wself -> data, VDBMemRelease, wself -> mgr );
-        DLListWhack ( & wself -> rowmap, VDBMemRelease, wself -> mgr );
-        VDBManagerSever ( wself -> mgr );
-        WColumnDestroy (wself);
+        KDataBufferWhack ( & wself -> data );
+        KDataBufferWhack ( & wself -> rowmap );
+        WColumnDestroy ( wself );
 
     }
 
@@ -286,27 +139,35 @@ rc_t WColumnMake ( VColumn **colp, const VSchema *schema,
     assert ( scol != NULL );
     assert ( mgr != NULL );
 
-    col = malloc ( sizeof * col );
+    col = calloc ( 1, sizeof * col );
     if ( col == NULL )
         rc = RC ( rcVDB, rcColumn, rcConstructing, rcMemory, rcExhausted );
     else
     {
-        memset ( col, 0, sizeof * col );
         rc = VColumnInit ( & col -> dad, schema, scol );
         if ( rc == 0 )
         {
-            col -> mgr = VDBManagerAttach ( mgr );
-            DLListInit ( & col -> data );
-            DLListInit ( & col -> rowmap );
+            uint32_t i;
+
+            /* initialize peak histories */
+            for ( i = 0; i < sizeof col -> data_peak_hist / sizeof col -> data_peak_hist [ 0 ]; ++ i )
+                col -> data_peak_hist [ i ] = INITIAL_DATA_PEAK;
 
+            /* initial current peak */
+            col -> data_peak = INITIAL_DATA_PEAK;
+
+            /* use column-specific expression if provided */
             if ( scol -> limit != NULL )
                 blob_limit = scol -> limit;
 
+            /* evaluate blob cutoff limit expression */
             if ( blob_limit == NULL )
             {
 #ifdef DFLT_TRIGGER
+                /* use define */
                 col -> trigger = DFLT_TRIGGER;
 #else
+                /* produce max unsigned integer */
                 -- col -> trigger;
 #endif
             }
@@ -375,7 +236,7 @@ rc_t WColumnSetDefault ( VColumn *vcol,
     bitsz_t elem_bits, const void *buffer, bitsz_t boff, uint64_t len )
 {
     rc_t rc;
-    bitsz_t elem_size;
+    bitsz_t elem_size, to_copy;
     WColumn *self = ( WColumn* ) vcol;
 
     assert ( elem_bits != 0 );
@@ -412,11 +273,16 @@ rc_t WColumnSetDefault ( VColumn *vcol,
     }
 
     /* copy in the row */
-    bitcpy ( self -> dflt . base, 0, buffer, boff, len * elem_bits );
+    to_copy = len * elem_bits;
+    if ( ( ( boff | to_copy ) & 7 ) != 0 )
+        bitcpy ( self -> dflt . base, 0, buffer, boff, to_copy );
+    else
+        memcpy ( self -> dflt . base, & ( ( const uint8_t* ) buffer ) [ boff >> 3 ], to_copy >> 3 );
     self -> have_dflt = true;
     return 0;
 }
 
+
 /* OpenRow
  *  update state
  *
@@ -426,22 +292,24 @@ rc_t WColumnSetDefault ( VColumn *vcol,
 void CC WColumnOpenRow ( void *item, void *const_row_id )
 {
     WColumn *self = item;
-    int64_t row_id = * ( const int64_t* ) const_row_id;
-
-    assert ( ! self -> row_written );
-    if ( self -> start_id != self -> end_id )
-    {
-        assert ( row_id == self -> end_id );
-    }
-    else
+    if ( self != NULL )
     {
-        /* capture row id */
-        self -> start_id = self -> end_id = self -> cutoff_id = row_id;
-        assert ( self -> data_off == 0 );
-        assert ( self -> rowmap_off == 0 );
-        assert ( self -> num_rows == 0 );
-        assert ( self -> num_elems == 0 );
-        assert ( self -> row_len == 0 );
+        int64_t row_id = * ( const int64_t* ) const_row_id;
+
+        assert ( ! self -> row_written );
+        if ( self -> start_id != self -> end_id )
+        {
+            assert ( row_id == self -> end_id );
+        }
+        else
+        {
+            /* capture row id */
+            self -> start_id = self -> end_id = self -> cutoff_id = row_id;
+            assert ( self -> bits_in_buffer == 0 );
+            assert ( self -> row_len == 0 );
+            assert ( self -> num_rows == 0 );
+            assert ( self -> dflt_last == false );
+        }
     }
 }
 
@@ -451,30 +319,34 @@ void CC WColumnOpenRow ( void *item, void *const_row_id )
 rc_t WColumnWrite ( VColumn *cself,
     bitsz_t elem_bits, const void *buffer, bitsz_t boff, uint64_t len )
 {
-    rc_t rc;
-    bitsz_t elem_size;
     WColumn *self = ( WColumn* ) cself;
 
-    DLList data;
-    VDBMem *mem;
-    uint8_t *dst;
-    bitsz_t num_bits, num_writ, to_write, doff;
+    bitsz_t elem_size, num_bits, data_bits, doff;
 
     assert ( elem_bits != 0 );
     assert ( buffer != NULL || ( boff == 0 && len == 0 ) );
 
+    /* the number of bits to write */
+    num_bits = ( bitsz_t ) elem_bits * len;
+
     /* test "compatibility" of elem_bits
        this is used to interpret "len" */
     elem_size = VTypedescSizeof ( & self -> dad . desc );
-    if ( elem_bits < elem_size && elem_size % elem_bits != 0 )
-        return RC ( rcVDB, rcColumn, rcUpdating, rcType, rcInconsistent );
-    if ( elem_bits > elem_size && elem_bits % elem_size != 0 )
-        return RC ( rcVDB, rcColumn, rcUpdating, rcType, rcInconsistent );
+    if ( elem_bits != elem_size )
+    {
+        if ( elem_bits < elem_size && elem_size % elem_bits != 0 )
+            return RC ( rcVDB, rcColumn, rcUpdating, rcType, rcInconsistent );
+        if ( elem_bits > elem_size && elem_bits % elem_size != 0 )
+            return RC ( rcVDB, rcColumn, rcUpdating, rcType, rcInconsistent );
+        if ( num_bits % elem_size != 0 )
+            return RC ( rcVDB, rcColumn, rcUpdating, rcType, rcInconsistent );
+    }
 
     /* allow empty row */
     if ( len == 0 )
     {
         self -> row_written = true;
+        self -> dflt_last = false;
         return 0;
     }
 
@@ -482,58 +354,55 @@ rc_t WColumnWrite ( VColumn *cself,
     if ( self -> row_committed )
         return RC ( rcVDB, rcColumn, rcUpdating, rcColumn, rcBusy );
 
-    /* the number of bits to write */
-    num_bits = ( bitsz_t ) elem_bits * len;
-
-    /* prepare data row pointer */
-    doff = self -> data_off + ( self -> num_elems + self -> row_len ) * elem_size;
-    doff &= sizeof mem -> page * 8 - 1;
+    /* total number of bits to be put into buffer */
+    doff = self -> bits_in_buffer + self -> row_len;
+    data_bits = doff + num_bits;
 
-    /* prepare whack lists */
-    DLListInit ( & data );
+    /* see if it fits into buffer */
+    if ( data_bits > KDataBufferBits ( & self -> data ) )
+    {
+        rc_t rc;
 
-    /* prepare initial destination pointer */
-    mem = ( VDBMem* ) DLListTail ( & self -> data );
-    dst = ( mem == NULL ) ? NULL : mem -> page;
+        /* calculate needed bytes */
+        size_t new_size = ( ( size_t ) ( ( data_bits + 7 ) >> 3 ) + INITIAL_DATA_PEAK - 1 )
+            & ~ ( size_t ) ( INITIAL_DATA_PEAK - 1 );
 
-    /* append row data */
-    for ( rc = 0, num_writ = 0; num_writ < num_bits; doff += to_write, num_writ += to_write )
-    {
-        bitsz_t avail;
+        /* need buffer memory */
+        if ( self -> data . elem_count == 0 )
+        {
+            /* always go with the peak size if larger */
+            if ( new_size < self -> data_peak )
+                new_size = self -> data_peak;
 
-        /* allocate more buffer space */
-        if ( ( doff & ( sizeof mem -> page * 8 - 1 ) ) == 0 )
+            /* make initial buffer at most recent peak */
+            rc = KDataBufferMakeBytes ( & self -> data, new_size );
+            if ( rc != 0 )
+                return rc;
+        }
+        else
         {
-            rc = VDBManagerMakeMem ( self -> mgr, & mem );
+            /* we have a new peak */
+            rc = KDataBufferResize ( & self -> data, new_size );
             if ( rc != 0 )
-                break;
-            DLListPushTail ( & data, & mem -> n );
-            dst = mem -> page;
-            doff = 0;
+                return rc;
         }
-
-        /* decide on the bits to write */
-        avail = ( sizeof mem -> page * 8 ) - doff;
-        to_write = num_bits - num_writ;
-        if ( avail < to_write )
-            to_write = avail;
-
-        /* copy in the data */
-        bitcpy ( dst, doff, buffer, boff + num_writ, to_write );
     }
 
-    /* if all were written, accept changes */
-    if ( rc == 0 )
+    /* copy in data */
+    if ( ( ( boff | doff | num_bits ) & 7 ) != 0 )
+        bitcpy ( self -> data . base, doff, buffer, boff, num_bits );
+    else
     {
-        self -> row_len += num_bits / elem_size;
-        DLListAppendList ( & self -> data, & data );
-        self -> row_written = true;
+        memcpy ( & ( ( uint8_t* ) self -> data . base ) [ doff >> 3 ],
+                 & ( ( const uint8_t* ) buffer ) [ boff >> 3 ], num_bits >> 3 );
     }
 
-    /* drop any uncommitted buffers */
-    DLListWhack ( & data, VDBMemRelease, self -> mgr );
+    /* accept changes */
+    self -> row_len += num_bits;
+    self -> row_written = true;
+    self -> dflt_last = false;
 
-    return rc;
+    return 0;
 }
 
 /* RowDefaults
@@ -551,31 +420,52 @@ bool CC WColumnRowDefaults ( void *item, void *data )
     rc_t *rc = data;
 
     /* nothing to do if row written */
-    if ( self -> row_written )
+    if ( self == NULL || self -> row_written )
         return false;
 
     /* error if no default value */
     if ( ! self -> have_dflt )
     {
         * rc = RC ( rcVDB, rcColumn, rcClosing, rcRow, rcIncomplete );
-        (void)PLOGERR(klogErr, (klogErr, *rc, "Column: $(col)", "col=%.*s", self->dad.scol->name->name.size, self->dad.scol->name->name.addr));
+        PLOGERR ( klogErr,
+                  ( klogErr, * rc, "Column: $(col)", "col=%.*s"
+                    , self -> dad . scol -> name -> name . size
+                    , self -> dad . scol -> name -> name . addr )
+            );
         return true;
     }
-
+        
     /* detect NULL row as default */
     if ( self -> dflt . elem_bits == 0 )
     {
-        /* need to clip here, i.e. need to cut off blobs */
         * rc = RC ( rcVDB, rcColumn, rcClosing, rcRow, rcNull );
-        (void)PLOGERR(klogWarn, (klogWarn, *rc, "Column: $(col)", "col=%.*s", self->dad.scol->name->name.size, self->dad.scol->name->name.addr));
+        PLOGERR ( klogWarn,
+                  ( klogWarn, * rc, "Column: $(col)", "col=%.*s"
+                    , self -> dad . scol -> name -> name . size
+                    , self -> dad . scol -> name -> name . addr )
+            );
+        return false;
+    }
+
+    /* if the last column written was default,
+       there is an opportunity for simply incrementing the repeat count */
+    if ( USE_RLE && self -> dflt_last )
+    {
+        WColumnRowMap *rm = self -> rowmap . base;
+        assert ( self -> num_rows != 0 );
+        ++ rm [ self -> num_rows - 1 ] . cnt;
         return false;
     }
 
     /* write default data */
     * rc = WColumnWrite ( & self -> dad, self -> dflt . elem_bits,
         self -> dflt . base, 0, self -> dflt . elem_count );
-
-    return ( * rc != 0 ) ? true : false;
+    if ( * rc != 0 )
+        return true;
+    
+    /* record the fact that this was default */
+    self -> dflt_last = true;
+    return false;
 }
 
 /* CommitRow
@@ -590,166 +480,115 @@ bool CC WColumnRowDefaults ( void *item, void *data )
  *
  *  returns true if there was a memory error.
  */
-bool CC WColumnCommitRow ( void *item, void *data )
+static
+bool WColumnCommitRepeatedRow ( WColumn *self, WColumnRowMap *rm, int64_t end_id )
 {
-    WColumn *self = item;
-    int64_t *end_id = data;
+    /* if we've previously declared a cutoff id,
+       incorporate the repeated row into the range */
+    if ( ( self -> cutoff_id != self -> start_id ) && ( self -> cutoff_id + 1 == end_id ) )
+        self -> cutoff_id = end_id;
 
-    VDBMem *mem;
+    /* just account for the repeated row */
+    ++ rm -> cnt;
+
+    /* drop data */
+    self -> row_len = 0;
+
+    /* the row has been successfully committed */
+    self -> row_committed = true;
+
+    /* no error */
+    return false;
+}
+
+static
+bool WColumnCommitRowData ( WColumn *self, int64_t *end_id )
+{
+    size_t cur_size;
+    uint64_t row_len;
     bitsz_t elem_bits;
     WColumnRowMap *rm;
-    size_t rmoff, cur_size;
 
     /* if no data were written and that's okay, ignore */
     if ( ! self -> row_written )
     {
+        assert ( self -> row_len == 0 );
         self -> row_committed = true;
         return false;
     }
 
-    /* likely to need this later */
+    /* column's element size */
     elem_bits = VTypedescSizeof ( & self -> dad . desc );
+    assert ( self -> row_len % elem_bits == 0 );
+    row_len = self -> row_len / elem_bits;
 
-    /* last buffer */
-    mem = ( VDBMem* ) DLListTail ( & self -> rowmap );
-
-    /* detect a prior row */
-    if ( self -> num_rows != 0 )
+    /* detect repeated row */
+    if ( USE_RLE && self -> num_rows != 0 )
     {
-        /* byte offset to rowmap entry */
-        rmoff = ( self -> num_rows + self -> rowmap_off - 1 ) * sizeof * rm;
+        rm = self -> rowmap . base;
+        rm += self -> num_rows - 1;
 
-        assert ( mem != NULL );
+        if ( rm -> len == row_len )
+        {
+            bitsz_t poff, coff;
+            const uint8_t *base;
 
-        /* point to prior row entry */
-        rm = ( void* ) & mem -> page [ rmoff & ( sizeof mem -> page - 1 ) ];
+            if ( row_len == 0 )
+                return WColumnCommitRepeatedRow ( self, rm, * end_id );
 
-        /* RLE comparison starts with lengths */
-        if ( USE_RLE && rm -> len == self -> row_len )
-        {
-            /* two consecutive rows with same length */
-            if ( self -> row_len == 0 )
+            base = ( const void* ) self -> data . base;
+            assert ( self -> bits_in_buffer >= self -> row_len );
+            coff = self -> bits_in_buffer;
+            poff = self -> bits_in_buffer - self -> row_len;
+
+            if ( ( ( poff | coff | self -> row_len ) & 7 ) != 0 )
             {
-                /* when the length is zero, there's nothing much to do */
-                ++ rm -> cnt;
-                self -> row_committed = true;
-                return false;
+                if ( bitcmp ( base, poff, base, coff, self -> row_len ) == 0 )
+                    return WColumnCommitRepeatedRow ( self, rm, * end_id );
             }
             else
             {
-                VDBMemBuffer cur, prior;
-                bitsz_t cnt, to_cmp, num_bits = ( bitsz_t ) elem_bits * self -> row_len;
-
-                /* create first view onto buffer at tail */
-                VDBMemBufferInitTail ( & cur, DLListTail ( & self -> data ),
-                    self -> data_off, elem_bits, self -> num_elems + self -> row_len );
-
-                /* back up to beginning of uncommitted row */
-                if ( ! VDBMemBufferAdvance ( & cur, num_bits - 1, true ) )
-                    return true;
-
-                /* "cur" points at the current row. prepare "prior" to point to
-                   the row before that which is the last committed row, which we
-                   know is the same length as the current row */
-                prior = cur;
-                assert ( self -> num_elems >= self -> row_len );
-                if ( ! VDBMemBufferAdvance ( & prior, num_bits, true ) )
-                    return true;
-
-                /* comparison loop */
-                for ( cnt = to_cmp = 0; cnt < num_bits; cnt += to_cmp )
-                {
-                    const void *p, *c;
-                    bitsz_t coff, cavail, poff, pavail;
-
-                    VDBMemBufferAdvance ( & prior, to_cmp, false );
-                    p = VDBMemBufferAccess ( & prior, & poff, & pavail );
-                    c = VDBMemBufferAccess ( & cur, & coff, & cavail );
-                    if ( p == NULL || c == NULL )
-                        return true;
-
-                    to_cmp = num_bits - cnt;
-                    if ( to_cmp > pavail )
-                        to_cmp = pavail;
-                    if ( to_cmp > cavail )
-                        to_cmp = cavail;
-
-                    /* compare bits */
-                    if ( bitcmp ( p, poff, c, coff, to_cmp ) != 0 )
-                        break;
-
-                    /* advance buffers */
-                    VDBMemBufferAdvance ( & cur, to_cmp, false );
-                }
-
-                /* if the rows were identical */
-                if ( cnt == num_bits )
-                {
-                    /* just bump the repeat count */
-                    ++ rm -> cnt;
-
-                    if ((self->cutoff_id != self->start_id) && (self->cutoff_id + 1 == *end_id))
-                        self->cutoff_id = *end_id;
-#if 1
-                    /* drop any extra buffers used during write */
-                    for ( mem = ( VDBMem* ) DLNodeNext ( & prior . mem -> n );
-                          mem != NULL;
-                          mem = ( VDBMem* ) DLNodeNext ( & prior . mem -> n ) )
-                    {
-                        DLListUnlink ( & self -> data, & mem -> n );
-                        VDBMemRelease ( & mem -> n, self -> mgr );
-                    }
-#else
-                    while ( DLListTail ( & self -> data ) != prior . mem -> n )
-                    {
-                        mem = ( VDBMem * ) DLListPopTail ( & self -> data );
-                        VDBMemRelease ( & mem -> n, self -> mgr );
-                    }
-#endif                    
-
-                    /* consider the row committed */
-                    self -> row_len = 0;
-                    self -> row_committed = true;
-                    goto check_size;
-                }
+                if ( memcmp ( & base [ poff >> 3 ], & base [ coff >> 3 ], self -> row_len >> 3 ) == 0 )
+                    return WColumnCommitRepeatedRow ( self, rm, * end_id );
             }
         }
     }
 
-    /* offset to next rowmap entry */
-    rmoff = ( self -> num_rows + self -> rowmap_off ) * sizeof * rm;
-
-    /* check for space */
-    if ( mem == NULL ||( rmoff & ( sizeof mem -> page - 1 ) ) == 0 )
+    /* need to add a new row */
+    if ( ( uint64_t ) self -> num_rows == self -> rowmap . elem_count )
     {
-        rc_t rc = VDBManagerMakeMem ( self -> mgr, & mem );
+        /* need more memory */
+        rc_t rc;
+        self -> rowmap . elem_bits = sizeof * rm * 8;
+        rc = KDataBufferResize ( & self -> rowmap, self -> rowmap . elem_count + 16 * 1024 );
         if ( rc != 0 )
+        {
+            PLOGERR ( klogErr,
+                      ( klogErr, rc, "Column: $(col) failed to resize row map", "col=%.*s"
+                        , self -> dad . scol -> name -> name . size
+                        , self -> dad . scol -> name -> name . addr )
+                );
             return true;
-        DLListPushTail ( & self -> rowmap, & mem -> n );
-        rmoff = 0;
+        }
     }
 
-    /* mem might not be initialized! */
-    /* new rowmap entry */
-    rm = ( void* ) & mem -> page [ rmoff & ( sizeof mem -> page - 1 ) ];
-#if _DEBUGGING
+    rm = self -> rowmap . base;
+    rm += self -> num_rows;
+
     rm -> start_id = self -> end_id;
-#endif
-    rm -> len = self -> row_len;
+    rm -> len = row_len;
     rm -> cnt = 1;
 
-    self -> num_elems += self -> row_len;
-    ++ self -> num_rows;
+    self -> bits_in_buffer += self -> row_len;
     self -> row_len = 0;
+
+    ++ self -> num_rows;
     self -> row_committed = true;
-check_size:
-    /* current size in bytes */
-    cur_size = ( (size_t)self -> num_elems * elem_bits + 7 ) >> 3;
 
-    /* if the buffer is large enough */
+    /* detect 1x blob cutoff */
+    cur_size = ( size_t ) ( self -> bits_in_buffer + 7 ) >> 3;
     if ( cur_size >= self -> trigger )
     {
-
         /* if size just crossed the trigger boundary and 
          * cutoff_id has not been advanced yet */
         if ( self -> cutoff_id == self -> start_id )
@@ -763,56 +602,116 @@ check_size:
             /* set to min of current end or our cutoff */
             if ( self -> cutoff_id < * end_id )
             {
+#if ROW_COUNT_CUTOFFS
+                /* the number of rows until our cutoff */
+                uint64_t row_count = self -> cutoff_id - self -> start_id;
+                if ( row_count != 0 )
+                {
+                    int64_t end;
+                    uint64_t msb = row_count;
+
+                    /* adjust id to nearest power of two size
+                       that does not exceed current id */
+                    while ( ( msb & ( msb - 1 ) ) != 0 )
+                        msb &= msb - 1;
+
+                    /* add in rounding factor to row_count */
+                    row_count += ( msb >> 1 );
+
+                    /* truncate */
+                    row_count &= ~ ( msb - 1 );
+
+                    if ( row_count >= 1024 )
+                    {
+                        /* limit to current row */
+                        while ( row_count > 1024 && self -> start_id + row_count > * end_id )
+                            row_count >>= 1;
+
+                        if ( self -> start_id + row_count <= * end_id )
+                            self -> cutoff_id = self -> start_id + row_count;
+                    }
+                }
+#endif
                 * end_id = self -> cutoff_id;
             }
         }
     }
+
     return false;
 }
 
-/* CloseRow
- *  discards uncommitted data
- *  update state
- */
-void CC WColumnCloseRow ( void *item, void *ignore )
+bool CC WColumnCommitRow ( void *item, void *data )
 {
     WColumn *self = item;
-
-    if ( self -> row_len != 0 )
+    if ( self != NULL )
     {
-        /* discard any extra buffers used */
-        VDBMem *mem;
-        bitsz_t elem_bits = VTypedescSizeof ( & self -> dad . desc );
-        bitsz_t boff = self -> data_off + self -> num_elems * elem_bits;
-        bitsz_t origin = boff + self -> row_len * elem_bits;
+        int64_t *end_id = data;
 
-        /* set origin to the start of last buffer */
-        origin = ( origin - 1 ) & ~ ( bitsz_t ) ( sizeof mem -> page * 8 - 1 );
+        if ( WColumnCommitRowData ( self, end_id ) )
+            return true;
 
-        if ((boff == 0) && (origin == 0)) /* we got nothing */
+        /* if the row range is too great */
+        if ( ( self -> end_id - self -> start_id ) >= MAX_ROW_COUNT )
         {
-            /* delete all but it should only be one if any */
-            while ((mem = (VDBMem*)DLListPopTail (&self->data)) != NULL)
-                VDBMemRelease ( & mem -> n, self -> mgr );
-        }
-        else
-        {
-            /* not reached, not tested, not understood */
-            for ( ; origin >= boff ; origin -= sizeof mem -> page * 8 )
+            /* if row range has just crossed the boundary and 
+             * cutoff_id has not been advanced yet */
+            if ( self -> cutoff_id == self -> start_id )
             {
-                mem = ( VDBMem* ) DLListPopTail ( & self -> data );
-                assert ( mem != NULL );
-                VDBMemRelease ( & mem -> n, self -> mgr );
+                self -> cutoff_id = * end_id;
+            }
+
+            /* set to min of current end or our cutoff */
+            else if ( self -> cutoff_id < * end_id )
+            {
+                * end_id = self -> cutoff_id;
             }
         }
     }
 
-    if ( self -> row_committed )
-        ++ self -> end_id;
+    return false;
+}
 
-    self -> row_len = 0;
-    self -> row_written = false;
-    self -> row_committed = false;
+/* RepeatRow
+ *  go into the last row entry
+ *  extend the count by uint64_t
+ */
+void CC WColumnRepeatRow ( void *item, void *data )
+{
+    WColumn *self = item;
+    const WColumnRepeatRowData *pb = data;
+
+    if ( self != NULL && self -> num_rows != 0 )
+    {
+        WColumnRowMap *rm = self -> rowmap . base;
+        rm += self -> num_rows - 1;
+
+        /* if we've previously declared a cutoff id,
+           incorporate the repeated row into the range */
+        if ( ( self -> cutoff_id != self -> start_id ) && ( self -> cutoff_id + 1 == pb -> end_id ) )
+            self -> cutoff_id = pb -> end_id + pb -> count;
+
+        /* just account for the repeated row */
+        rm -> cnt += pb -> count;
+        self -> end_id += pb -> count;
+    }
+}
+
+/* CloseRow
+ *  discards uncommitted data
+ *  update state
+ */
+void CC WColumnCloseRow ( void *item, void *ignore )
+{
+    WColumn *self = item;
+    if ( self != NULL )
+    {
+        if ( self -> row_committed )
+            ++ self -> end_id;
+
+        self -> row_len = 0;
+        self -> row_written = false;
+        self -> row_committed = false;
+    }
 }
 
 /* BufferPage
@@ -825,248 +724,316 @@ void CC WColumnCloseRow ( void *item, void *ignore )
  *  returns true if there was a memory error.
  */
 static
-rc_t WColumnMakePage ( WColumn *self, int64_t end_id,
-   bitsz_t elem_bits, uint64_t num_elems, uint64_t num_rows )
+bool WColumnSplitBuffer ( WColumn *self, int64_t end_id, size_t rm_idx )
 {
     rc_t rc;
+    int64_t id;
+    VBlob *vblob;
+    bool splitting;
+    size_t i, data_cur;
+    uint64_t sum_elems;
+
+    const WColumnRowMap *rm = self -> rowmap . base;
+
+    uint64_t num_rows = rm [ rm_idx ] . start_id + rm [ rm_idx ] . cnt - self -> start_id;
+    assert ( rm [ 0 ] . start_id == self -> start_id );
+
+    /* adjust end_id [ TAKES CARE OF THEORETICAL ERROR CONDITION
+       NOT KNOWN TO EXIST ] and num_rows ( when splitting repeat ) */
+    id = end_id;
+    splitting = false;
+    if ( self -> start_id + num_rows <= id )
+        id = self -> start_id + num_rows;
+    else
+    {
+        num_rows = id - self -> start_id;
+        splitting = true;
+    }
 
+    /* release previous ( but unexpected ) cache if there */
     if ( self -> page != NULL )
     {
-        TRACK_BLOB (VBlobRelease, self->page);
-        ( void ) VBlobRelease ( self -> page );
+        TRACK_BLOB ( VBlobRelease, self -> page );
+        VBlobRelease ( self -> page );
         self -> page = NULL;
     }
 
-    rc = VBlobNew ( & self -> page, self -> start_id, end_id - 1, self -> dad . scol -> name -> name . addr );
-    TRACK_BLOB (VBlobNew, self->page);
-
-    if ( rc == 0 )
+    /* create new blob */
+    rc = VBlobNew ( & vblob,
+                    self -> start_id, id - 1,
+                    self -> dad . scol -> name -> name . addr );
+    TRACK_BLOB ( VBlobNew, vblob );
+    if ( rc != 0 )
     {
-        VBlob *vblob = self -> page;
-        rc = KDataBufferMake ( & vblob -> data, elem_bits, num_elems );
-        if ( rc == 0 )
-        {
-            rc = PageMapNew ( & vblob -> pm, num_rows );
-            if ( rc == 0 )
-                return 0;
-        }
+        PLOGERR ( klogErr,
+                  ( klogErr, rc, "Column: $(col) failed to allocate page", "col=%.*s"
+                    , self -> dad . scol -> name -> name . size
+                    , self -> dad . scol -> name -> name . addr )
+            );
+        return true;
+    }
 
-        TRACK_BLOB (VBlobRelease, vblob);
-        (void)VBlobRelease ( vblob );
-        self -> page = NULL;
+    /* create blob page map */
+    rc = PageMapNew ( & vblob -> pm, rm_idx + 1 ); /*** rm_idx tells many WColumnRowMap need to be added to PageMap ***/
+    if ( rc != 0 )
+    {
+        TRACK_BLOB ( VBlobRelease, vblob );
+        VBlobRelease ( vblob );
+
+        PLOGERR ( klogErr,
+                  ( klogErr, rc, "Column: $(col) failed to create page map", "col=%.*s"
+                    , self -> dad . scol -> name -> name . size
+                    , self -> dad . scol -> name -> name . addr )
+            );
+        return true;
     }
-    return rc;
-}
 
-#define ROWMAPS_PER_PAGE (sizeof(((const VDBMem *)0)->page) / sizeof(WColumnRowMap))
-#define ROWMAP_BITS (sizeof(WColumnRowMap) * 8)
-/* false return is good, true return is failure of some sort */
-bool CC WColumnBufferPage ( void *item, void *const_end_id )
-{
-    rc_t rc;
-    WColumn *self = item;
-    int64_t id, end_id = * ( const int64_t* ) const_end_id;
-
-    VDBMem *mem;
-    bool seek_ok;
-    const WColumnRowMap *rm = NULL;
-    VDBMemBuffer rowmap, data;
-    uint64_t num_elems, num_rows;
-    uint64_t rowmap_off;
-    bitsz_t cnt, num_bits, to_cpy, elem_bits;
-    bool advance = true;
-
-    /* initialize buffer onto rowmap */
-    VDBMemBufferInitHead ( & rowmap, DLListHead ( & self -> rowmap ),
-        self -> rowmap_off * ROWMAP_BITS, ROWMAP_BITS, self -> num_rows );
-
-    /* walk row map to count rows and elements through end_id not the whole list */
-    num_elems = num_rows = 0;
-    for ( id = self -> start_id;
-          id < end_id;
-          id += rm -> cnt )
+    /* write page map up to ( but not including ) last entry */
+    for ( sum_elems = 0, i = 0; i < rm_idx; ++ i )
     {
-        rm = VDBMemBufferAccess ( & rowmap, NULL, NULL );
-        if ( rm == NULL )
-            return true;
-        if (advance)
-            advance  = VDBMemBufferAdvance ( & rowmap, ROWMAP_BITS, false );
-        else
+        sum_elems += rm [ i ] . len;
+        rc = PageMapAppendSomeRows ( vblob -> pm, rm [ i ] . len, rm [ i ] . cnt );
+        if ( rc != 0 )
         {
-            /* assert (0); */
+            TRACK_BLOB ( VBlobRelease, vblob );
+            VBlobRelease ( vblob );
+
+            PLOGERR ( klogErr,
+                      ( klogErr, rc, "Column: $(col) failed to write page map", "col=%.*s"
+                        , self -> dad . scol -> name -> name . size
+                        , self -> dad . scol -> name -> name . addr )
+                );
             return true;
         }
-        num_elems += rm -> len;
-        assert (rm->start_id == id);
-        ++ num_rows;
     }
 
-    /* allocate page */
-    elem_bits = VTypedescSizeof ( & self -> dad . desc );
-    rc = WColumnMakePage ( self, end_id, elem_bits, num_elems, num_rows );
+    sum_elems += rm [ i ] . len;
+    rc = PageMapAppendSomeRows ( vblob -> pm, rm [ i ] . len, id - rm [ i ] . start_id );
     if ( rc != 0 )
+    {
+        TRACK_BLOB ( VBlobRelease, vblob );
+        VBlobRelease ( vblob );
+
+        PLOGERR ( klogErr,
+                  ( klogErr, rc, "Column: $(col) failed to write page map", "col=%.*s"
+                    , self -> dad . scol -> name -> name . size
+                    , self -> dad . scol -> name -> name . addr )
+            );
         return true;
+    }
 
-    /* initialize data buffer */
-    VDBMemBufferInitHead ( & data, DLListHead ( & self -> data ),
-          self -> data_off, elem_bits, self -> num_elems + self -> row_len );
+    /* determine current data buffer usage */
+    data_cur = ( size_t ) ( ( ( self -> bits_in_buffer + 7 ) >> 3 )
+        + SINGLE_PAGE_SIZE - 1 ) & ~ ( size_t ) ( SINGLE_PAGE_SIZE - 1 );
 
-    /* copy data */
-    num_bits = KDataBufferBits ( & self -> page -> data );
-    for ( seek_ok = true, cnt = 0; cnt < num_bits; cnt += to_cpy )
+    /* update peak history */
+    if ( self -> data_peak_hist [ self -> peak_hist_idx ] == self -> data_peak )
     {
-        bitsz_t avail, soff;
-        const void *src = VDBMemBufferAccess ( & data, & soff, & avail );
-        if ( src == NULL )
-            return true;
+        int j;
+        size_t data_peak = data_cur;
 
-        to_cpy = num_bits - cnt;
-        if ( to_cpy > avail )
-            to_cpy = avail;
-
-        bitcpy ( self -> page -> data . base, cnt, src, soff, to_cpy );
+        for ( j = ( self -> peak_hist_idx + 1 ) & 0xF;
+              j != self -> peak_hist_idx;
+              j = ( j + 1 ) & 0xF )
+        {
+            if ( self -> data_peak_hist [ j ] > data_peak )
+                data_peak = self -> data_peak_hist [ j ];
+        }
 
-        seek_ok = VDBMemBufferAdvance ( & data, to_cpy, false );
+        self -> data_peak = data_peak;
     }
+    self -> data_peak_hist [ self -> peak_hist_idx ] = data_cur;
+    self -> peak_hist_idx = ( self -> peak_hist_idx + 1 ) & 0xF;
+    if ( data_cur > self -> data_peak )
+        self -> data_peak = data_cur;
+
+    /* hand data over to blob */
+    vblob -> data = self -> data;
+    vblob -> data . elem_bits = VTypedescSizeof ( & self -> dad . desc );
+    vblob -> data . elem_count = sum_elems;
+
+    /* handle residual data */
+    if ( splitting )
+        sum_elems -= rm [ rm_idx ] . len;
+    else
+        ++ rm_idx;
 
-    /* if last seek failed, "to_cpy" represents the bits remaining */
-    if ( seek_ok )
-        to_cpy = 0;
-
-    /* capture left edge of data */
-    self -> data_off = data . marker + to_cpy;
-
-    /* if keeping the last row, back off by that amount:
-     * we could only "over shoot" by one in the loop above */
-    if ( id > end_id )
+    if ( rm_idx == self -> num_rows )
     {
-        self -> data_off -= elem_bits * rm -> len;
+        /* no residual data/rows */
+        memset ( & self -> data, 0, sizeof self -> data );
+        self -> bits_in_buffer = 0;
+        self -> num_rows = 0;
+        self -> start_id = self -> cutoff_id = end_id;
     }
-    /* drop data pages */
-    for ( ; self -> data_off >= sizeof mem -> page * 8; self -> data_off -= sizeof mem -> page * 8 )
+    else
     {
-        mem = ( VDBMem* ) DLListPopHead ( & self -> data );
-        VDBMemRelease ( & mem -> n, self -> mgr );
-    }
-
-    /* re-initialize rowmap buffer */
-    VDBMemBufferInitHead ( & rowmap, DLListHead ( & self -> rowmap ),
-        self -> rowmap_off * ROWMAP_BITS, ROWMAP_BITS, self -> num_rows );
+        KDataBuffer data;
+        bitsz_t boff, to_copy;
 
-    /* copy row map */
-    for ( ; num_rows > 1; -- num_rows )
-    {
-        rm = VDBMemBufferAccess ( & rowmap, NULL, NULL );
-        assert ( rm != NULL );
-        rc = PageMapAppendSomeRows ( self -> page -> pm, rm -> len, rm -> cnt );
-        if ( rc != 0 )
-            return true;
-        VDBMemBufferAdvance ( & rowmap, ROWMAP_BITS, false );
-    }
-    for ( seek_ok = true; num_rows > 0; -- num_rows )
-    {
-        uint64_t row_count;
-        
-        rm = VDBMemBufferAccess ( & rowmap, NULL, NULL );
-        assert ( rm != NULL );
-        
-        row_count = rm -> cnt - ( id - end_id );
-        rc = PageMapAppendSomeRows ( self -> page -> pm, rm -> len, row_count);
+        /* allocate a new data buffer */
+        rc = KDataBufferMakeBytes ( & data, self -> data_peak );
         if ( rc != 0 )
+        {
+            /* forget transfer of blob */
+            memset ( & vblob -> data, 0, sizeof vblob -> data );
+
+            TRACK_BLOB ( VBlobRelease, vblob );
+            VBlobRelease ( vblob );
+
+            PLOGERR ( klogErr,
+                      ( klogErr, rc, "Column: $(col) failed to split page", "col=%.*s"
+                        , self -> dad . scol -> name -> name . size
+                        , self -> dad . scol -> name -> name . addr )
+                );
             return true;
-#if _DEBUGGING
-        if (id - end_id)
+        }
+
+        /* copy data */
+        boff = ( rm_idx > 0 ) ?
+            sum_elems * vblob -> data . elem_bits : 0;
+        to_copy = self -> bits_in_buffer - boff;
+        if ( ( ( boff | to_copy ) & 7 ) != 0 )
+            bitcpy ( data . base, 0, self -> data . base, boff, to_copy );
+        else
+            memcpy ( data . base, & ( ( const uint8_t* ) self -> data . base ) [ boff >> 3 ], to_copy >> 3 );
+
+        self -> data = data;
+        self -> bits_in_buffer = to_copy;
+
+        /* copy row map */
+        memmove ( self -> rowmap . base, & rm [ rm_idx ], ( self -> num_rows -= rm_idx ) * sizeof * rm );
+
+        /* adjust starting id and repeat count if splitting single row */
+        if ( splitting )
         {
-            ((WColumnRowMap *)rm)->start_id += row_count;
+            WColumnRowMap *split = self -> rowmap . base;
+            split -> cnt = split -> start_id + split -> cnt - id;
+            split -> start_id = id;
         }
-#endif
-        seek_ok = VDBMemBufferAdvance ( & rowmap, ROWMAP_BITS, false );
+
+        self -> start_id = self -> cutoff_id = id;
     }
 
-    /* capture left edge of rowmap:  that is capture the number of bits to the new
-     * offset to the first unwritten rowmap that might be a different page than the
-     * current rowmap offset */
-    rowmap_off = rowmap . marker / ROWMAP_BITS;
+    self -> page = vblob;
+    self -> dflt_last = false;
 
-    /* if last advance failed, incorporate bits */
-    if ( ! seek_ok )
-        ++rowmap_off;
+    return false;
+}
 
-    /* if last rowmap entry needs to be preserved */
-    if ( id > end_id )
-    {
-        /* back up to preserve row */
-        --rowmap_off;
-        /* adjust row count */
-        ( ( WColumnRowMap* ) rm ) -> cnt = id - end_id;
-    }
+static
+int WColumnRowMapCompare ( const WColumnRowMap *self, int64_t id )
+{
+    /* id is right-edge exclusive */
+    if ( self -> start_id >= id )
+        return -1;
+    return id > self -> start_id + self -> cnt;
+}
 
-    /* drop rowmap pages and fix up other fields
-     * this is less complex if we are clearing out all pages */
-    if (rowmap_off - self->rowmap_off == self->num_rows)
+bool CC WColumnBufferPage ( void *item, void *const_end_id )
+{
+    WColumn *self = item;
+    if ( self != NULL )
     {
-        /* delete all */
-        while ((mem = (VDBMem*)DLListPopHead (&self->rowmap)) != NULL)
-            VDBMemRelease (&mem->n, self->mgr);
+        int64_t end_id = * ( const int64_t* ) const_end_id;
 
-        self->num_elems = 0;
-        self->num_rows = 0;
-        self->rowmap_off = 0;
-    }
-    else
-    {
-        uint64_t rowmaps_this_page;
-
-        /* page must be exactly divisible by sizeof ( WColumnRowMap ) */
-        assert ( VDBMemBitsInPage () % sizeof ( WColumnRowMap ) == 0 );
-
-        /* Kind of ugly:  The first page might have less that the
-         * maximum number of rowmaps due to its having an offset
-         * to the first current rowmap.  When that page is dropped
-         * the number of rows needs to be reduced by that partial
-         * number of rowmaps.  But this seemed preferable to
-         * a more awkward check for a first partial page followed by
-         * a loop over full pages. */
-        for ( rowmaps_this_page = ROWMAPS_PER_PAGE - self->rowmap_off;
-              rowmap_off >= ROWMAPS_PER_PAGE;
-              rowmaps_this_page = ROWMAPS_PER_PAGE )
+        int diff;
+        const WColumnRowMap *rm = self -> rowmap . base;
+        size_t i, left, right = self -> num_rows;
+
+        /* find the entry mentioned */
+        if ( self -> num_rows == 0 )
         {
-            mem = ( VDBMem* ) DLListPopHead ( & self -> rowmap );
-            assert ( mem != NULL );
-            VDBMemRelease ( & mem -> n, self -> mgr );
-            rowmap_off -= ROWMAPS_PER_PAGE;
-            assert ( self->num_rows > rowmaps_this_page );
-            self->num_rows -= rowmaps_this_page;
-            self->rowmap_off = 0;     /* old rowmap_off is no longer on the same page */
+            PLOGMSG ( klogWarn,
+                      ( klogWarn, "Column: $(col) has no rows to buffer", "col=%.*s"
+                        , self -> dad . scol -> name -> name . size
+                        , self -> dad . scol -> name -> name . addr )
+                );
+            return true;
         }
-        /* new number of rows needs to lose the rows on this page that are done;
-         * that might be just the new rowmap_off or it might be new - old
-         * this expression assumes new is page decremented in the loop and
-         * the old is dropped in the loop or that the loop is not run
-         * and the new and old are both from the same page
-         */
-        assert ( self->num_rows > (rowmap_off - self->rowmap_off));
-        self->num_rows -= (rowmap_off - self->rowmap_off);
-        self->rowmap_off = rowmap_off;
-
-        /* reinitialize buffer onto rowmap */
-        VDBMemBufferInitHead ( & rowmap, DLListHead ( & self -> rowmap ),
-                               rowmap_off * ROWMAP_BITS, ROWMAP_BITS, self -> num_rows );
-
-        /* walk row map to count actual elements */
-        for ( num_elems = 0, num_rows = 0; num_rows != self -> num_rows; ++num_rows )
+
+        /* check last entry */
+        i = right - 1;
+        diff = WColumnRowMapCompare ( & rm [ i ], end_id );
+        if ( diff >= 0 )
+            return WColumnSplitBuffer ( self, end_id, i );
+
+        /* check that the id is within our range at all */
+        assert ( self -> start_id == rm [ 0 ] . start_id );
+        if ( end_id < self -> start_id )
         {
-            rm = VDBMemBufferAccess ( & rowmap, NULL, NULL );
-            if ( rm == NULL )
-                return true;
-            VDBMemBufferAdvance ( & rowmap, ROWMAP_BITS, false );
-            num_elems += rm->len;
+            PLOGMSG ( klogWarn,
+                      ( klogWarn, "Column: $(col) cutoff id $(id) is not within range"
+                        , "col=%.*s,id=%ld"
+                        , self -> dad . scol -> name -> name . size
+                        , self -> dad . scol -> name -> name . addr
+                        , end_id )
+                );
+            return true;
         }
-        self->num_elems = num_elems;
+
+        /* search rails are left ( inclusive ) at 0, right ( exclusive ) at num_rows */
+        left = 0;
+
+        /* perform arithmetic search for initial portion */
+        if ( right > 1000 )
+        {
+            double p = ( double ) ( end_id - rm [ left ] . start_id ) /
+                ( rm [ right - 1 ] . start_id + rm [ right - 1 ] . cnt - rm [ left ] . start_id );
+            assert ( p >= 0.0 && p <= 1.0 );
+
+            i = left + p * ( right - left );
+
+            diff = WColumnRowMapCompare ( & rm [ i ], end_id );
+            if ( diff == 0 )
+                return WColumnSplitBuffer ( self, end_id, i );
+            if ( diff < 0 )
+                right = i;
+            else
+                left = i + 1;
+
+            if ( left < right )
+            {
+                p = ( double ) ( end_id - rm [ left ] . start_id ) /
+                    ( rm [ right - 1 ] . start_id + rm [ right - 1 ] . cnt - rm [ left ] . start_id );
+                assert ( p >= 0.0 && p <= 1.0 );
+
+                i = left + p * ( right - left );
+
+                diff = WColumnRowMapCompare ( & rm [ i ], end_id );
+                if ( diff == 0 )
+                    return WColumnSplitBuffer ( self, end_id, i );
+                if ( diff < 0 )
+                    right = i;
+                else
+                    left = i + 1;
+            }
+        }
+
+        /* normal binary search */
+        while ( left < right )
+        {
+            i = ( left + right ) >> 1;
+
+            diff = WColumnRowMapCompare ( & rm [ i ], end_id );
+            if ( diff == 0 )
+                return WColumnSplitBuffer ( self, end_id, i );
+            if ( diff < 0 )
+                right = i;
+            else
+                left = i + 1;
+        }
+
+        PLOGMSG ( klogErr,
+                  ( klogErr, "Column: $(col) cutoff id $(id) is not within range"
+                    , "col=%.*s,id=%ld"
+                    , self -> dad . scol -> name -> name . size
+                    , self -> dad . scol -> name -> name . addr
+                    , end_id )
+            );
     }
 
-    self->start_id = self->cutoff_id = end_id;
-    return false;
+    return true;
 }
 
 /* ReadBlob
@@ -1081,8 +1048,8 @@ rc_t WColumnReadBlob ( WColumn *self, VBlob **vblob, int64_t id )
         return RC ( rcVDB, rcColumn, rcReading, rcRow, rcNotFound );
 
     * vblob = self -> page;
-    (void)VBlobAddRef ( self -> page );
-    TRACK_BLOB(VBlobAddRef, self->page);
+    VBlobAddRef ( self -> page );
+    TRACK_BLOB ( VBlobAddRef, self -> page );
 
     return 0;
 }
@@ -1093,10 +1060,10 @@ rc_t WColumnReadBlob ( WColumn *self, VBlob **vblob, int64_t id )
 void CC WColumnDropPage ( void *item, void *ignore )
 {
     WColumn *self = item;
-    if ( self -> page != NULL )
+    if ( self != NULL && self -> page != NULL )
     {
-        TRACK_BLOB(VBlobRelease,self->page);
-        (void)VBlobRelease ( self -> page );
+        TRACK_BLOB ( VBlobRelease, self -> page );
+        VBlobRelease ( self -> page );
         self -> page = NULL;
     }
 }
diff --git a/libs/vdb/wcursor.c b/libs/vdb/wcursor.c
index e8c1939..6c88983 100644
--- a/libs/vdb/wcursor.c
+++ b/libs/vdb/wcursor.c
@@ -68,14 +68,17 @@
 #include <string.h>
 #include <assert.h>
 
-#define MTCURSOR_DBG( msg ) \
-    DBGMSG ( DBG_VDB, DBG_FLAG ( DBG_VDB_MTCURSOR ), msg )
 
 /*--------------------------------------------------------------------------
  * VCursor
  *  a row cursor onto a VTable
  */
 
+/* forward
+ *  to avoid reordering whole page
+ */
+static
+rc_t VCursorFlushPageInt ( VCursor *self );
 
 
 /* Whack
@@ -107,6 +110,7 @@ rc_t VCursorWhack ( VCursor *self )
     KConditionRelease ( self -> flush_cond );
     KLockRelease ( self -> flush_lock );
 #endif
+    VCursorTerminatePagemapThread(self);
     return VCursorDestroy ( self );
 }
 
@@ -127,7 +131,7 @@ rc_t VCursorWhack ( VCursor *self )
 static rc_t CC run_flush_thread ( const KThread *t, void *data );
 #endif
 
-LIB_EXPORT rc_t CC VTableCreateCursorWrite ( VTable *self, VCursor **cursp, KCreateMode mode )
+rc_t VTableCreateCursorWriteInt ( VTable *self, VCursor **cursp, KCreateMode mode, bool create_thread )
 {
     rc_t rc;
 
@@ -158,13 +162,17 @@ LIB_EXPORT rc_t CC VTableCreateCursorWrite ( VTable *self, VCursor **cursp, KCre
             {
                 rc = VCursorSupplementSchema ( curs );
 #if VCURSOR_FLUSH_THREAD
-                if ( rc == 0 )
+                if ( rc == 0 && create_thread )
+                {
                     rc = KLockMake ( & curs -> flush_lock );
-                if ( rc == 0 )
-                    rc = KConditionMake ( & curs -> flush_cond );
-                if ( rc == 0 )
-                    rc = KThreadMake ( & curs -> flush_thread, run_flush_thread, curs );
+                    if ( rc == 0 )
+                        rc = KConditionMake ( & curs -> flush_cond );
+                    if ( rc == 0 )
+                        rc = KThreadMake ( & curs -> flush_thread, run_flush_thread, curs );
+                }
 #endif
+                if(rc == 0)
+                    rc = VCursorLaunchPagemapThread(curs);
                 if ( rc == 0 )
                 {
                     * cursp = curs;
@@ -181,6 +189,11 @@ LIB_EXPORT rc_t CC VTableCreateCursorWrite ( VTable *self, VCursor **cursp, KCre
     return rc;
 }
 
+LIB_EXPORT rc_t CC VTableCreateCursorWrite ( VTable *self, VCursor **cursp, KCreateMode mode )
+{
+    return VTableCreateCursorWriteInt ( self, cursp, mode, true );
+}
+
 
 /* MakeColumn
  */
@@ -293,7 +306,8 @@ LIB_EXPORT rc_t CC VCursorOpen ( const VCursor *cself )
                     pr . ignore_column_errors = false;
                     pr . discover_writable_columns = false;
 
-                    rc = VProdResolveAddTriggers ( & pr, self -> stbl );
+		    if ( !self -> suspend_triggers )
+			    rc = VProdResolveAddTriggers ( & pr, self -> stbl );
                 }
                 if ( rc == 0 )
                 {
@@ -311,7 +325,7 @@ LIB_EXPORT rc_t CC VCursorOpen ( const VCursor *cself )
                             if ( ! self -> read_only ||
                                  /* permit empty open when run from sradb */
                                  ( GetRCObject ( rc ) == rcRange &&
-                                   self -> permit_post_open_add &&
+                                   self -> permit_add_column &&
                                    VectorLength ( & self -> row ) == 0 ) )
                             {
                                 rc = 0;
@@ -351,18 +365,56 @@ LIB_EXPORT rc_t CC VCursorOpen ( const VCursor *cself )
  *  records any SColumn that can be reached
  *  populates BTree with VColumnRef objects
  */
+struct resolve_phys_data
+{
+    VProdResolve pr;
+    const KNamelist *seed;
+    uint32_t count;
+};
+
 static
 void CC resolve_writable_sphys ( void *item, void *data )
 {
-    VProdResolve *self = data;
+    struct resolve_phys_data *pb = data;
+    const SPhysMember *smbr = ( const void* ) item;
     VProduction *out = NULL;
-    VProdResolveSPhysMember ( self, & out, item );
+
+    if ( pb -> seed == NULL )
+        VProdResolveSPhysMember ( & pb -> pr, & out, smbr );
+    else
+    {
+        uint32_t i;
+        const KSymbol *sym = smbr -> name;
+        const char *sname = sym -> name . addr;
+        size_t ssize = sym -> name . size;
+        if ( sname [ 0 ] == '.' )
+        {
+            ++ sname;
+            -- ssize;
+        }
+
+        /* TBD - this is not too speedy, but it is
+           very low frequency in all known cases */
+        for ( i = 0; i < pb -> count; ++ i )
+        {
+            const char *name;
+            rc_t rc = KNamelistGet ( pb -> seed, i, & name );
+            if ( rc == 0 )
+            {
+                if ( strlen ( name ) == ssize && memcmp ( sname, name, ssize ) == 0 )
+                {
+                    VProdResolveSPhysMember ( & pb -> pr, & out, smbr );
+                    break;
+                }
+            }
+        }
+    }
 }
 
 static
-void VProdResolveWritableColumns ( VProdResolve *self )
+void VProdResolveWritableColumns ( struct resolve_phys_data *pb, bool suspend_triggers )
 {
-    const STable *dad, *stbl = self -> stbl;
+    const STable *dad, *stbl = pb -> pr . stbl;
 
     /* walk table schema looking for parents */
     uint32_t i = VectorStart ( & stbl -> overrides );
@@ -370,40 +422,51 @@ void VProdResolveWritableColumns ( VProdResolve *self )
     for ( end += i; i < end; ++ i )
     {
         dad = STableFindOrdAncestor ( stbl, i );
-        VectorForEach ( & dad -> phys, false, resolve_writable_sphys, self );
+        VectorForEach ( & dad -> phys, false, resolve_writable_sphys, pb );
     }
 
     /* walk current table */
-    VectorForEach ( & stbl -> phys, false, resolve_writable_sphys, self );
+    VectorForEach ( & stbl -> phys, false, resolve_writable_sphys, pb );
 
     /* add triggers */
-    self -> chain = chainUncommitted;
-    VProdResolveAddTriggers ( self, stbl );
+    if ( !suspend_triggers && pb -> seed == NULL )
+    {
+        pb -> pr . chain = chainUncommitted;
+        VProdResolveAddTriggers ( & pb -> pr, stbl );
+    }
 }
 
-rc_t VCursorListWritableColumns ( VCursor *self, BSTree *columns )
+rc_t VCursorListSeededWritableColumns ( VCursor *self, BSTree *columns, const KNamelist *seed )
 {
     rc_t rc;
     KDlset *libs;
 
-    VProdResolve pb;
-    pb . schema = self -> schema;
-    pb . ld = self -> tbl -> linker;
-    pb . stbl = self -> stbl;
-    pb . curs = self;
-    pb . cache = & self -> prod;
-    pb . owned = & self -> owned;
-    pb . chain = chainEncoding;
-    pb . blobbing = false;
-    pb . ignore_column_errors = true;
-    pb . discover_writable_columns = true;
+    struct resolve_phys_data pb;
+    pb . pr . schema = self -> schema;
+    pb . pr . ld = self -> tbl -> linker;
+    pb . pr . stbl = self -> stbl;
+    pb . pr . curs = self;
+    pb . pr . cache = & self -> prod;
+    pb . pr . owned = & self -> owned;
+    pb . pr . chain = chainEncoding;
+    pb . pr . blobbing = false;
+    pb . pr . ignore_column_errors = true;
+    pb . pr . discover_writable_columns = true;
+    pb . seed = seed;
+
+    if ( seed != NULL )
+    {
+        rc = KNamelistCount ( seed, & pb . count );
+        if ( rc != 0 )
+            return rc;
+    }
 
     /* open the dynamic linker libraries */
-    rc = VLinkerOpen ( pb . ld, & libs );
+    rc = VLinkerOpen ( pb . pr . ld, & libs );
     if ( rc == 0 )
     {
-        pb . libs = libs;
-        VProdResolveWritableColumns ( & pb );
+        pb . pr . libs = libs;
+        VProdResolveWritableColumns ( & pb , self->suspend_triggers );
         KDlsetRelease ( libs );
 
         if ( rc == 0 )
@@ -432,6 +495,11 @@ rc_t VCursorListWritableColumns ( VCursor *self, BSTree *columns )
     return rc;
 }
 
+rc_t VCursorListWritableColumns ( VCursor *self, BSTree *columns )
+{
+    return VCursorListSeededWritableColumns ( self, columns, NULL );
+}
+
 /* SetRowId
  *  seek to given row id
  *
@@ -524,7 +592,7 @@ LIB_EXPORT rc_t CC VCursorCommitRow ( VCursor *self )
         rc = 0;
     else
     {
-        self -> permit_post_open_add = false;
+        self -> permit_add_column = self -> permit_post_open_add;
 
         /* tell columns to slam in any default values */
         rc = 0;
@@ -553,6 +621,52 @@ LIB_EXPORT rc_t CC VCursorCommitRow ( VCursor *self )
     return rc;
 }
 
+/* RepeatRow
+ *  repeats the current row by the count provided
+ *  row must have been committed
+ *
+ *  AVAILABILITY: version 2.6
+ *
+ *  "count" [ IN ] - the number of times to repeat
+ *  the current row.
+ */
+LIB_EXPORT rc_t CC VCursorRepeatRow ( VCursor *self, uint64_t count )
+{
+    rc_t rc = 0;
+
+    if ( self == NULL )
+        rc = RC ( rcVDB, rcCursor, rcUpdating, rcSelf, rcNull );
+    else if ( self -> read_only )
+        rc = RC ( rcVDB, rcCursor, rcUpdating, rcCursor, rcReadonly );
+    else if ( self -> state == vcFailed )
+        rc = RC ( rcVDB, rcCursor, rcUpdating, rcCursor, rcInvalid );
+    else if ( self -> state < vcRowOpen )
+        rc = RC ( rcVDB, rcCursor, rcUpdating, rcRow, rcNotOpen );
+    else if ( self -> state < vcRowCommitted )
+        rc = RC ( rcVDB, rcCursor, rcUpdating, rcRow, rcInvalid );
+    else if ( count != 0 )
+    {
+        WColumnRepeatRowData pb;
+        pb . end_id = self -> row_id;
+        pb . count = count;
+
+        /* tell columns to commit the row, and allow
+           each to return an earlier cutoff id ( half-closed ) */
+        VectorForEach ( & self -> row, false, WColumnRepeatRow, & pb );
+
+        /* extend the current row-id */
+        if ( self -> end_id < self -> row_id )
+            self -> row_id += count;
+        else
+        {
+            self -> row_id += count;
+            self -> end_id += count;
+        }
+    }
+
+    return rc;
+}
+
 /* CloseRow
  *  balances OpenRow message
  *  if there are uncommitted modifications,
@@ -584,7 +698,7 @@ LIB_EXPORT rc_t CC VCursorCloseRow ( const VCursor *cself )
             /* close off the page if so requested */
             if ( self -> state == vcPageCommit )
             {
-                rc = VCursorFlushPage ( self );
+                rc = VCursorFlushPageInt ( self );
                 if ( rc )
                 {
                     self -> state = vcFailed;
@@ -719,7 +833,7 @@ bool CC run_trigger_prods ( void *item, void *data )
     VProduction *prod = item;
 
     VBlob *blob;
-    pb -> rc = VProductionReadBlob ( prod, & blob, pb -> id , pb -> cnt);
+    pb -> rc = VProductionReadBlob ( prod, & blob, pb -> id , pb -> cnt, NULL);
     if ( pb -> rc != 0 )
         return true;
     if ( blob != NULL )
@@ -824,7 +938,8 @@ rc_t CC run_flush_thread ( const KThread *t, void *data )
 }
 #endif
 
-LIB_EXPORT rc_t CC VCursorFlushPage ( VCursor *self )
+static
+rc_t VCursorFlushPageInt ( VCursor *self )
 {
     rc_t rc;
 
@@ -862,22 +977,22 @@ LIB_EXPORT rc_t CC VCursorFlushPage ( VCursor *self )
             }
 
 #if VCURSOR_FLUSH_THREAD
-            MTCURSOR_DBG (( "VCursorFlushPage: going to acquire lock\n" ));
+            MTCURSOR_DBG (( "VCursorFlushPageInt: going to acquire lock\n" ));
             /* get lock */
             rc = KLockAcquire ( self -> flush_lock );
             if ( rc != 0 )
                 return rc;
 
-            MTCURSOR_DBG (( "VCursorFlushPage: have lock\n" ));
+            MTCURSOR_DBG (( "VCursorFlushPageInt: have lock\n" ));
 
             /* make sure that background thread is ready */
             while ( self -> flush_state == vfBusy )
             {
-                MTCURSOR_DBG (( "VCursorFlushPage: waiting for background thread\n" ));
+                MTCURSOR_DBG (( "VCursorFlushPageInt: waiting for background thread\n" ));
                 rc = KConditionWait ( self -> flush_cond, self -> flush_lock );
                 if ( rc != 0 )
                 {
-                    LOGERR ( klogSys, rc, "VCursorFlushPage: wait failed - exiting" );
+                    LOGERR ( klogSys, rc, "VCursorFlushPageInt: wait failed - exiting" );
                     KLockUnlock ( self -> flush_lock );
                     return rc;
                 }
@@ -890,23 +1005,23 @@ LIB_EXPORT rc_t CC VCursorFlushPage ( VCursor *self )
                 else
                 {
                     rc_t rc2;
-                    MTCURSOR_DBG (( "VCursorFlushPage: waiting on thread to exit\n" ));
+                    MTCURSOR_DBG (( "VCursorFlushPageInt: waiting on thread to exit\n" ));
                     rc = KThreadWait ( self -> flush_thread, & rc2 );
                     if ( rc == 0 )
                     {
                         rc = rc2;
-                        MTCURSOR_DBG (( "VCursorFlushPage: releasing thread\n" ));
+                        MTCURSOR_DBG (( "VCursorFlushPageInt: releasing thread\n" ));
                         KThreadRelease ( self -> flush_thread );
                         self -> flush_thread = NULL;
                     }
                 }
 
-                LOGERR ( klogInt, rc, "VCursorFlushPage: not in ready state - exiting" );
+                PLOGERR ( klogInt, (klogInt, rc, "VCursorFlushPageInt: not in ready state[$(state)] - exiting","state=%hu",self -> flush_state ));
                 KLockUnlock ( self -> flush_lock );
                 return rc;
             }
 
-            MTCURSOR_DBG (( "VCursorFlushPage: running buffer page\n" ));
+            MTCURSOR_DBG (( "VCursorFlushPageInt: running buffer page\n" ));
 #endif
 
             /* first, tell all columns to bundle up their pages into buffers */
@@ -922,7 +1037,7 @@ LIB_EXPORT rc_t CC VCursorFlushPage ( VCursor *self )
                 /* supposed to be constant */
                 assert ( end_id == self -> end_id );
 #if VCURSOR_FLUSH_THREAD
-                MTCURSOR_DBG (( "VCursorFlushPage: pages buffered - capturing id and count\n" ));
+                MTCURSOR_DBG (( "VCursorFlushPageInt: pages buffered - capturing id and count\n" ));
                 self -> flush_id = self -> start_id;
                 self -> flush_cnt = self -> end_id - self -> start_id;
 
@@ -930,11 +1045,11 @@ LIB_EXPORT rc_t CC VCursorFlushPage ( VCursor *self )
                 self -> end_id = self -> row_id + 1;
                 self -> state = vcReady;
 
-                MTCURSOR_DBG (( "VCursorFlushPage: state set to busy - signaling bg thread\n" ));
+                MTCURSOR_DBG (( "VCursorFlushPageInt: state set to busy - signaling bg thread\n" ));
                 self -> flush_state = vfBusy;
                 rc = KConditionSignal ( self -> flush_cond );
                 if ( rc != 0 )
-                    LOGERR ( klogSys, rc, "VCursorFlushPage: condition returned error on signal" );
+                    LOGERR ( klogSys, rc, "VCursorFlushPageInt: condition returned error on signal" );
 #else
                 /* run all validation and trigger productions */
                 pb . id = self -> start_id;
@@ -955,7 +1070,7 @@ LIB_EXPORT rc_t CC VCursorFlushPage ( VCursor *self )
             }
 
 #if VCURSOR_FLUSH_THREAD
-            MTCURSOR_DBG (( "VCursorFlushPage: unlocking\n" ));
+            MTCURSOR_DBG (( "VCursorFlushPageInt: unlocking\n" ));
             KLockUnlock ( self -> flush_lock );
 #endif
         }
@@ -964,6 +1079,67 @@ LIB_EXPORT rc_t CC VCursorFlushPage ( VCursor *self )
     return rc;
 }
 
+LIB_EXPORT rc_t CC VCursorFlushPage ( VCursor *self )
+{
+    rc_t rc = VCursorFlushPageInt ( self );
+    if ( rc == 0 )
+    {
+#if VCURSOR_FLUSH_THREAD
+        MTCURSOR_DBG (( "VCursorFlushPage: going to acquire lock\n" ));
+        /* get lock */
+        rc = KLockAcquire ( self -> flush_lock );
+        if ( rc != 0 )
+            return rc;
+
+        MTCURSOR_DBG (( "VCursorFlushPage: have lock\n" ));
+
+        /* wait until background thread has finished */
+        while ( self -> flush_state == vfBusy )
+        {
+            MTCURSOR_DBG (( "VCursorFlushPage: waiting for background thread\n" ));
+            rc = KConditionWait ( self -> flush_cond, self -> flush_lock );
+            if ( rc != 0 )
+            {
+                LOGERR ( klogSys, rc, "VCursorFlushPage: wait failed - exiting" );
+                KLockUnlock ( self -> flush_lock );
+                return rc;
+            }
+        }
+
+        /* what was the proper rc */
+        if ( self -> flush_state != vfReady )
+        {
+            if ( self -> flush_state != vfBgErr )
+                rc = RC ( rcVDB, rcCursor, rcFlushing, rcCursor, rcInconsistent );
+            else
+            {
+                rc_t rc2;
+                MTCURSOR_DBG (( "VCursorFlushPage: waiting on thread to exit\n" ));
+                rc = KThreadWait ( self -> flush_thread, & rc2 );
+                if ( rc == 0 )
+                {
+                    rc = rc2;
+                    MTCURSOR_DBG (( "VCursorFlushPage: releasing thread\n" ));
+                    KThreadRelease ( self -> flush_thread );
+                    self -> flush_thread = NULL;
+                }
+            }
+
+            PLOGERR ( klogInt, (klogInt, rc, "VCursorFlushPage: not in ready state[$(state)] - exiting",
+                                "state=%hu", self -> flush_state ));
+
+            KLockUnlock ( self -> flush_lock );
+            return rc;
+        }
+        KLockUnlock ( self -> flush_lock );
+#endif
+        assert ( self -> row_id == self -> start_id );
+        self -> end_id = self -> row_id;
+    }
+
+    return rc;
+}
+
 LIB_EXPORT rc_t CC VCursorCommit ( VCursor *self )
 {
     rc_t rc = VCursorFlushPage ( self );
diff --git a/libs/vdb/wdbmgr.c b/libs/vdb/wdbmgr.c
index 63e1a5d..f45a53f 100644
--- a/libs/vdb/wdbmgr.c
+++ b/libs/vdb/wdbmgr.c
@@ -47,7 +47,6 @@
 #include <stdlib.h>
 #include <assert.h>
 
-#define MLIMIT ( 512 * 1024 * 1024 )
 
 /*--------------------------------------------------------------------------
  * VDBManager
@@ -85,14 +84,8 @@ LIB_EXPORT rc_t CC VDBManagerMakeUpdate ( VDBManager **mgrp,  KDirectory *wd )
                         rc = VDBManagerConfigPaths ( mgr, true );
                         if ( rc == 0 )
                         {
-                            const VDBMem *mem;
                             mgr -> user = NULL;
                             mgr -> user_whack = NULL;
-                            DLListInit ( & mgr -> mpool );
-                            mgr -> plimit = MLIMIT / sizeof mem -> page;
-                            mgr -> mlimit = MLIMIT / sizeof mem -> page;
-                            mgr -> pcount = 0;
-                            mgr -> mcount = 0;
                             KRefcountInit ( & mgr -> refcount, 1, "VDBManager", "make-update", "vmgr" );
                             * mgrp = mgr;
                             return 0;
diff --git a/libs/vdb/wphys.c b/libs/vdb/wphys.c
index a9a180c..e1f2d27 100644
--- a/libs/vdb/wphys.c
+++ b/libs/vdb/wphys.c
@@ -70,6 +70,9 @@
  * VPhysical
  */
 
+static
+rc_t VPhysicalConvertStatic ( VPhysical *self );
+
 
 /* Whack
  */
@@ -78,6 +81,16 @@ void CC VPhysicalWhack ( void *item, void *ignore )
     VPhysical *self = item;
     if ( self > FAILED_PHYSICAL )
     {
+#if PROD_CACHE
+        /* detect close of static column */
+        if ( ! self -> read_only && self -> knode != NULL )
+        {
+            /* if the column is fairly large for metadata */
+            if ( KDataBufferBytes ( & self -> srow ) > 64 * 1024 )
+                /* convert it to a single blob */
+                VPhysicalConvertStatic ( self );
+        }
+#endif
         if ( ! self -> read_only )
         {
             rc_t rc;
@@ -637,55 +650,77 @@ rc_t VPhysicalConvertStatic ( VPhysical *self )
     rc_t rc = VPhysicalCreateKColumn ( self );
     if ( rc == 0 )
     {
-        /* put incoming blob cache on stack */
-        VBlob *cache [ PROD_CACHE ];
+        int64_t sstart_id, sstop_id;
+
+        /* save incoming blob cache on stack */
+        VBlob *cache [ PROD_CACHE * PROD_CACHE_MAX_EXTENTS ];
         assert ( sizeof cache == sizeof self -> in -> cache );
         memcpy ( cache, self -> in -> cache, sizeof cache );
 
         /* set incoming blob cache to empty */
         memset ( self -> in -> cache, 0, sizeof self -> in -> cache );
 
-        /* recreate a VBlob from static that can be sent through encoding */
-        rc = VBlobCreateFromSingleRow ( & self -> in -> cache [ 0 ],
-            self -> sstart_id, self -> sstop_id, & self -> srow, vboNative );
-        if ( rc == 0 )
+        for ( sstart_id = self -> sstart_id;
+              rc == 0 && sstart_id <= self -> sstop_id;
+              sstart_id = sstop_id + 1 )
         {
-            /* get an encoded version of static blob */
-            VBlob *vblob;
-            rc = VProductionReadBlob ( self -> b2s, & vblob, self -> sstart_id, 1 );
+            /* 3G rows */
+            sstop_id = sstart_id + 0xC0000000;
+            assert ( sstop_id > sstart_id );
+
+            /* limit to actual end */
+            if ( sstop_id > self -> sstop_id )
+                sstop_id = self -> sstop_id;
+
+            /* don't create tiny additional blobs */
+            else if ( ( self -> sstop_id - sstop_id ) < 1000 )
+                sstop_id = self -> sstop_id;
+
+            /* recreate a VBlob from static that can be sent through encoding */
+            rc = VBlobCreateFromSingleRow ( & self -> in -> cache [ 0 ],
+                sstart_id, sstop_id, & self -> srow, vboNative );
             if ( rc == 0 )
             {
-                /* write encoded blob to physical */
-                rc = VPhysicalWriteKColumn ( self, vblob );
+                /* get an encoded version of static blob */
+                VBlob *vblob;
+                rc = VProductionReadBlob ( self -> b2s, & vblob, sstart_id, 1,NULL );
                 if ( rc == 0 )
                 {
-                    const String *name;
-                    VCursor *curs = self -> curs;
-                    VTable *tbl = curs -> tbl;
-
-                    /* tear down static */
-                    KMDataNodeRelease ( self -> knode );
-                    self -> knode = NULL;
+                    /* write encoded blob to physical */
+                    rc = VPhysicalWriteKColumn ( self, vblob );
 
-                    /* delete column from table */
-                    name = & self -> smbr -> name -> name;
-                    assert ( tbl -> col_node != NULL );
-                    rc = KMDataNodeDropChild ( tbl -> col_node,
-                        "%.*s.tmp", ( int ) name -> size - 1, name -> addr + 1 );
+                    /* in all events, release blob */
+                    TRACK_BLOB ( VBlobRelease, vblob );
+                    ( void ) VBlobRelease ( vblob );
                 }
-
-                TRACK_BLOB ( VBlobRelease, vblob );
-                ( void ) VBlobRelease ( vblob );
-            }
             
-            /* release the blob from static */
-            TRACK_BLOB ( VBlobRelease, self -> in -> cache [ 0 ] );
-            ( void ) VBlobRelease ( self -> in -> cache [ 0 ] );
+                /* release the blob from static */
+                TRACK_BLOB ( VBlobRelease, self -> in -> cache [ 0 ] );
+                ( void ) VBlobRelease ( self -> in -> cache [ 0 ] );
+            }
         }
 
         /* restore cache from stack */
         memcpy ( self -> in -> cache, cache, sizeof self -> in -> cache );
+
+        if ( rc == 0 )
+        {
+            const String *name;
+            VCursor *curs = self -> curs;
+            VTable *tbl = curs -> tbl;
+
+            /* tear down static */
+            KMDataNodeRelease ( self -> knode );
+            self -> knode = NULL;
+
+            /* delete column from table */
+            name = & self -> smbr -> name -> name;
+            assert ( tbl -> col_node != NULL );
+            rc = KMDataNodeDropChild ( tbl -> col_node,
+                "%.*s.tmp", ( int ) name -> size - 1, name -> addr + 1 );
+        }
     }
+
     return rc;
 #endif
 }
@@ -762,7 +797,7 @@ rc_t VPhysicalWrite ( VPhysical *self, int64_t id, uint32_t cnt )
 {
     /* read from page space */
     VBlob *vblob;
-    rc_t rc = VProductionReadBlob ( self -> in, & vblob, id , cnt);
+    rc_t rc = VProductionReadBlob ( self -> in, & vblob, id , cnt,NULL);
     if ( rc == 0 )
     {
         /* test for single row in blob */
@@ -837,7 +872,7 @@ rc_t VPhysicalWrite ( VPhysical *self, int64_t id, uint32_t cnt )
             {
                 TRACK_BLOB ( VBlobRelease, vblob );
                 ( void ) VBlobRelease ( vblob );
-                rc = VProductionReadBlob ( self -> b2s, & vblob, id, cnt );
+                rc = VProductionReadBlob ( self -> b2s, & vblob, id, cnt,NULL );
                 if ( rc == 0 )
                 {
                     /* write encoded blob to physical */
diff --git a/libs/vdb/wprod.c b/libs/vdb/wprod.c
index a1ba4a8..41db5e9 100644
--- a/libs/vdb/wprod.c
+++ b/libs/vdb/wprod.c
@@ -124,7 +124,7 @@ rc_t VProdResolveColumnRoot ( const VProdResolve *self,
     /* pick up production */
     if ( scol -> validate != NULL )
     {
-        rc = VSimpleProdMake ( & wcol -> val, self -> owned,
+        rc = VSimpleProdMake ( & wcol -> val, self -> owned, self -> curs,
             prodSimpleCast, name, NULL, NULL, NULL, in, chainDecoding );
         if ( rc != 0 )
             return rc;
@@ -180,9 +180,22 @@ rc_t VProdResolveColumn ( const VProdResolve *self,
             if ( rc != 0 )
                 return rc;
 
+#if OPEN_COLUMN_ALTERS_ROW
+            rc = VectorAppend ( & curs -> row, & vcol -> ord, vcol );
+            if ( rc != 0 )
+            {
+                VColumnWhack ( vcol, NULL );
+                return rc;
+            }
+#endif
             rc = VCursorCacheSet ( & curs -> col, & scol -> cid, vcol );
             if ( rc != 0 )
             {
+#if OPEN_COLUMN_ALTERS_ROW
+                void *ignore;
+                VectorSwap ( & curs -> row, vcol -> ord, NULL, & ignore );
+                vcol -> ord = 0;
+#endif
                 VColumnWhack ( vcol, NULL );
                 return rc;
             }
@@ -207,19 +220,19 @@ rc_t VProdResolveColumn ( const VProdResolve *self,
     wcol = VCursorCacheGet ( & curs -> col, & scol -> cid );
     if ( wcol == NULL )
     {
-        uint32_t idx;
-
         /* normally write-only cursor must have existing column */
         if ( ! self -> discover_writable_columns )
             return 0;
 
         /* auto-create writable column for purposes of discovery */
+        if ( scol -> read_only )
+            return 0;
         rc = VCursorMakeColumn ( curs, & vcol, scol );
         if ( rc != 0 )
             return rc;
 
         /* add it to the row as if user had done it */
-        rc = VectorAppend ( & curs -> row, & idx, vcol );
+        rc = VectorAppend ( & curs -> row, & vcol -> ord, vcol );
         if ( rc == 0 )
         {
             /* add it to the indexed vector */
@@ -227,7 +240,8 @@ rc_t VProdResolveColumn ( const VProdResolve *self,
             if ( rc != 0 )
             {
                 void *ignore;
-                VectorSwap ( & curs -> row, idx, NULL, & ignore );
+                VectorSwap ( & curs -> row, vcol -> ord, NULL, & ignore );
+                vcol -> ord = 0;
             }
         }
 
@@ -331,7 +345,7 @@ rc_t VProdResolvePhysicalWrite ( const VProdResolve *self, VPhysical *phys )
     /* build encoding schema in steps:
          in <- page-to-blob
     */
-    rc = VSimpleProdMake ( & prod, pr . owned,
+    rc = VSimpleProdMake ( & prod, pr . owned,  self->curs,
         prodSimplePage2Blob, name, & fd, & desc, NULL, phys -> in, chainEncoding );
     if ( rc == 0 && enc != NULL )
     {
@@ -347,7 +361,7 @@ rc_t VProdResolvePhysicalWrite ( const VProdResolve *self, VPhysical *phys )
     }
     if ( rc == 0 )
     {
-        rc = VSimpleProdMake ( & phys -> b2s, pr . owned,
+        rc = VSimpleProdMake ( & phys -> b2s, pr . owned, self->curs,
             prodSimpleBlob2Serial, name, & fd, & desc, NULL, prod, chainEncoding );
     }
 
diff --git a/libs/vdb/wtable.c b/libs/vdb/wtable.c
index 23a3243..6a6b2ef 100644
--- a/libs/vdb/wtable.c
+++ b/libs/vdb/wtable.c
@@ -64,9 +64,9 @@
 /* StoreSchema
  *  stores schema definition in metadata
  *
- *  <schema type="">...</schema>
+ *  <schema name="">...</schema>
  */
-rc_t VTableStoreSchema ( VTable *self )
+LIB_EXPORT rc_t VTableStoreSchema ( VTable *self )
 {
     /* open schema node */
     KMDataNode *node;
@@ -82,10 +82,45 @@ rc_t VTableStoreSchema ( VTable *self )
         else
         {
             expr [ num_writ ] = 0;
-            rc = KMDataNodeWriteAttr ( node, "name", expr );
-            if ( rc != 0 )
-                PLOGERR ( klogInt, ( klogInt, rc, "failed to write table type '$(expr)'", "expr=%s", expr ));
-            else
+
+            /* if table has a default view declaration,
+               store the table information under a new attribute */
+            if ( self -> stbl -> dflt_view != NULL )
+            {
+                uint32_t type;
+                const SNameOverload *name;
+                const STable *view = VSchemaFind ( self -> schema, & name, & type,
+                    self -> stbl -> dflt_view-> addr, __func__, false );
+                if ( view == NULL )
+                {
+                    rc = RC ( rcVDB, rcTable, rcUpdating, rcSchema, rcNotFound );
+                    PLOGERR ( klogInt, ( klogInt, rc, "failed to locate default view schema '$(expr)'",
+                                         "expr=%S", self -> stbl -> dflt_view ));
+                }
+                else
+                {
+                    rc = KMDataNodeWriteAttr ( node, "table", expr );
+                    if ( rc != 0 )
+                        PLOGERR ( klogInt, ( klogInt, rc, "failed to write table type '$(expr)'", "expr=%s", expr ));
+                    else
+                    {
+                        rc = VSchemaToText ( self -> schema, expr, sizeof expr - 1, & num_writ,
+                            "%N%V", view -> name, view -> version );
+                        if ( rc != 0 )
+                            LOGERR ( klogInt, rc, "failed to determine table default view schema" );
+                        else
+                            expr [ num_writ ] = 0;
+                    }
+                }
+            }
+
+            if ( rc == 0 )
+            {
+                rc = KMDataNodeWriteAttr ( node, "name", expr );
+                if ( rc != 0 )
+                    PLOGERR ( klogInt, ( klogInt, rc, "failed to write table name '$(expr)'", "expr=%s", expr ));
+            }
+            if ( rc == 0 )
             {
                 /* truncate existing schema */
                 rc = KMDataNodeWrite ( node, "", 0 );
@@ -660,9 +695,11 @@ rc_t list_writable_columns ( VTable *self )
         return 0;
     }
 
-    rc = VTableCreateCursorWrite ( self, & curs, kcmInsert );
+    rc = VTableCreateCursorWriteInt ( self, & curs, kcmInsert, false );
     if (  rc == 0 )
     {
+	/* no need for schema-based triggers to fire **/
+	VCursorSuspendTriggers ( curs );
         /* let this private VCursor-function list the columns */
         rc = VCursorListWritableColumns ( curs, & self -> write_col_cache );
         VCursorRelease ( curs );
@@ -697,6 +734,50 @@ LIB_EXPORT rc_t CC VTableListWritableColumns ( VTable *self, KNamelist **names )
     return rc;
 }
 
+LIB_EXPORT rc_t CC VTableListSeededWritableColumns ( VTable *self,
+    KNamelist **names, const KNamelist *seed )
+{
+    rc_t rc;
+
+    if ( names == NULL )
+        rc = RC ( rcVDB, rcTable, rcListing, rcParam, rcNull );
+    else
+    {
+        * names = NULL;
+
+        if ( self == NULL )
+            rc = RC ( rcVDB, rcTable, rcListing, rcSelf, rcNull );
+        else if ( seed == NULL )
+            rc = RC ( rcVDB, rcTable, rcListing, rcParam, rcNull );
+        else
+        {
+            BSTree cache;
+            BSTreeInit ( & cache );
+
+            rc = 0;
+
+            if ( ! self -> read_only )
+            {
+                VCursor *curs;
+                rc = VTableCreateCursorWriteInt ( self, & curs, kcmInsert, false );
+                if (  rc == 0 )
+                {
+                    /* let this private VCursor-function list the columns */
+                    rc = VCursorListSeededWritableColumns ( curs, & cache, seed );
+                    VCursorRelease ( curs );
+                }
+            }
+
+            if ( rc == 0 )
+                rc = make_column_namelist ( & cache, names );
+
+            BSTreeWhack ( & cache, VColumnRefWhack, NULL );
+        }
+    }
+
+    return rc;
+}
+
 
 /* ListDatatypes
  *  returns list of typedecls for named column
@@ -886,3 +967,21 @@ LIB_EXPORT rc_t CC VTableDropColumn(VTable *self, const char fmt[], ...)
     va_end(va);
     return rc;
 }
+
+LIB_EXPORT rc_t CC VTableRenameColumn ( struct VTable *self, bool force,
+    const char *from, const char *to )
+{
+    rc_t rc;
+
+    if ( self == NULL )
+        rc = RC ( rcVDB, rcTable, rcAccessing, rcSelf, rcNull );
+    else
+    {
+        rc = KTableRenameColumn ( self->ktbl, force, from, to );
+        if ( GetRCState(rc) == rcNotFound )
+           rc = KMDataNodeRenameChild( self->col_node, from, to );
+    }
+
+    return rc;
+}
+
diff --git a/libs/vfs/Makefile b/libs/vfs/Makefile
new file mode 100644
index 0000000..390cc48
--- /dev/null
+++ b/libs/vfs/Makefile
@@ -0,0 +1,139 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: all
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = libs/vfs
+
+INT_LIBS = \
+
+EXT_LIBS = \
+	libsrapath \
+	libvfs
+
+ALL_LIBS = \
+	$(INT_LIBS) \
+	$(EXT_LIBS)
+
+TEST_TOOLS = \
+
+include $(TOP)/build/Makefile.env
+
+RWORKDIR=$(TOP)/$(MODULE)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+	@ $(MAKE_CMD) $(TARGDIR)/std
+
+$(INT_LIBS): vers-includes
+	@ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_LIBS): vers-includes
+	@ $(MAKE_CMD) $(LIBDIR)/$@
+
+$(TEST_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: all std $(ALL_LIBS) $(TEST_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
+	$(addprefix $(LIBDIR)/,$(EXT_LIBS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_LIBS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+	@ rm -f $(addsuffix *,$(addprefix $(TEST_BINDIR)/,$(TEST_TOOLS)))
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: \
+	$(addsuffix _tag,$(ALL_LIBS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_LIBS))
+
+#-------------------------------------------------------------------------------
+# srapath library
+#
+$(LIBDIR)/libsrapath: $(LIBDIR)/libsrapath.$(LIBX)
+
+SRAPATH_SRC = \
+	srapath-stub \
+	srapath
+
+SRAPATH_OBJ = \
+	$(addsuffix .$(LOBX),$(SRAPATH_SRC))
+
+$(LIBDIR)/libsrapath.$(LIBX): $(SRAPATH_OBJ)
+	$(LD) --slib --vers $(SRCDIR) -o $@ $^
+
+#-------------------------------------------------------------------------------
+# vfs
+#
+$(LIBDIR)/libvfs: $(addprefix $(LIBDIR)/libvfs.,$(LIBEXT))
+
+VFS_SRC = \
+	path \
+	syspath \
+	manager  \
+	resolver
+
+VFS_OBJ = \
+	$(addsuffix .$(LOBX),$(VFS_SRC))
+
+VFS_LIB = \
+	-lkurl \
+	-lkrypto \
+	-lkfg \
+	-lkfs \
+	-lklib
+
+$(LIBDIR)/libvfs.$(SHLX): $(VFS_OBJ)
+	$(LD) --dlib --vers $(SRCDIR) -o $@ $^ -ssrapath $(VFS_LIB)
+
+$(LIBDIR)/libvfs.$(LIBX): $(VFS_OBJ)
+	$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(VFS_LIB)
+
+libvfs_tag:
+	@ $(TOP)/build/tag-module.sh $(MODULE) libvfs $(VFS_OBJ)
+
diff --git a/libs/vfs/libsrapath.vers b/libs/vfs/libsrapath.vers
new file mode 100644
index 0000000..e9bc149
--- /dev/null
+++ b/libs/vfs/libsrapath.vers
@@ -0,0 +1 @@
+1.1.14
diff --git a/libs/vfs/libvfs.vers b/libs/vfs/libvfs.vers
new file mode 100644
index 0000000..59e9e60
--- /dev/null
+++ b/libs/vfs/libvfs.vers
@@ -0,0 +1 @@
+1.0.11
diff --git a/libs/vfs/manager.c b/libs/vfs/manager.c
new file mode 100644
index 0000000..15086c5
--- /dev/null
+++ b/libs/vfs/manager.c
@@ -0,0 +1,3709 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <vfs/extern.h>
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include "path-priv.h"
+
+#include <krypto/key.h>
+#include <krypto/encfile.h>
+#include <krypto/wgaencrypt.h>
+#include <krypto/ciphermgr.h>
+#include <kfg/config.h>
+#include <kfg/repository.h>
+
+#include <vfs/resolver.h>
+#include <sra/srapath.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/sra.h>
+#include <kfs/tar.h>
+#include <kfs/dyload.h>
+#include <kfs/kfs-priv.h>
+#include <kfs/nullfile.h>
+#include <kfs/buffile.h>
+#include <kfs/quickmount.h>
+#include <kfs/cacheteefile.h>
+
+#include <kns/curl-file.h>
+#include <kxml/xml.h>
+#include <klib/refcount.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+
+#ifdef _DEBUGGING
+#define MGR_DEBUG(msg) DBGMSG(DBG_VFS,DBG_FLAG(DBG_VFS_MGR), msg)
+#else
+#define MGR_DEBUG(msg)
+#endif
+
+
+#define DEFAULT_CACHE_BLOCKSIZE ( 32768 * 4 )
+#define DEFAULT_CACHE_CLUSTER 1
+
+/*--------------------------------------------------------------------------
+ * VFSManager
+ */
+
+/* currently expected to be a singleton and not use a vtable but
+ * be fully fleashed out here */
+struct VFSManager
+{
+    KRefcount refcount;
+
+    /* the current directory in the eyes of the O/S when created */
+    KDirectory * cwd;
+
+    /* the underlying operating systems view of the path of the 
+     * current working directory */
+    VPath * cpath;
+
+
+    /* configuration manager */
+    KConfig * cfg;
+
+    /* krypto's cipher manager */
+    KCipherManager * cipher;
+
+    /* SRAPath will be replaced with a VResolver */
+    struct VResolver * resolver;
+    /* SRAPath */
+    struct SRAPath * srapath;
+
+    /* if not NULL, need to remove from environment and free */
+    char *pw_env;
+};
+
+static const char kfsmanager_classname [] = "VFSManager";
+
+static 
+VFSManager * singleton = NULL;
+
+
+/* Destroy
+ *  destroy file
+ */
+LIB_EXPORT rc_t CC VFSManagerDestroy ( VFSManager *self )
+{
+    if ( self == NULL )
+        return RC ( rcVFS, rcFile, rcDestroying, rcSelf, rcNull );
+
+    KRefcountWhack (&self->refcount, kfsmanager_classname);
+
+    KDirectoryRelease (self->cwd);
+
+    VPathRelease (self->cpath);
+
+    KConfigRelease (self->cfg);
+
+    KCipherManagerRelease (self->cipher);
+
+    VResolverRelease ( self->resolver );
+
+    SRAPathRelease ( self->srapath );
+
+    if ( self -> pw_env != NULL )
+    {
+        putenv ( "VDB_PWFILE=" );
+        free ( self -> pw_env );
+    }
+
+    free (self);
+
+    singleton = NULL;
+    return 0;
+}
+
+/* AddRef
+ *  creates a new reference
+ *  ignores NULL references
+ */
+LIB_EXPORT rc_t CC VFSManagerAddRef ( const VFSManager *self )
+{
+    if (self != NULL)
+    {
+        switch (KRefcountAdd (&self->refcount, kfsmanager_classname))
+        {
+        case krefOkay:
+            break;
+        case krefZero:
+            return RC (rcVFS, rcMgr, rcAttaching, rcRefcount, rcIncorrect);
+        case krefLimit:
+            return RC (rcVFS, rcMgr, rcAttaching, rcRefcount, rcExhausted);
+        case krefNegative:
+            return RC (rcVFS, rcMgr, rcAttaching, rcRefcount, rcInvalid);
+        default:
+            return RC (rcVFS, rcMgr, rcAttaching, rcRefcount, rcUnknown);
+        }
+    }
+    return 0;
+}
+
+/* Release
+ *  discard reference to file
+ *  ignores NULL references
+ */
+LIB_EXPORT rc_t CC VFSManagerRelease ( const VFSManager *self )
+{
+    rc_t rc = 0;
+    if (self != NULL)
+    {
+        switch (KRefcountDrop (&self->refcount, kfsmanager_classname))
+        {
+        case krefOkay:
+        case krefZero:
+            break;
+        case krefWhack:
+            rc = VFSManagerDestroy ((VFSManager*)self);
+            break;
+        case krefNegative:
+            return RC (rcVFS, rcMgr, rcAttaching, rcRefcount, rcInvalid);
+        default:
+            rc = RC (rcVFS, rcMgr, rcAttaching, rcRefcount, rcUnknown);
+            break;            
+        }
+    }
+    return rc;
+}
+
+
+
+/*--------------------------------------------------------------------------
+ * VFSManagerMakeCurlFile
+ */
+static
+rc_t VFSManagerMakeCurlFile( const VFSManager * self, const KFile **cfp,
+                             const char * url, const char * cache_location )
+{
+    rc_t rc = KCurlFileMake ( cfp, url, false );
+    if ( rc == 0 )
+    {
+        const KFile *temp_file;
+        rc_t rc2;
+        if ( cache_location == NULL )
+        {
+            /* there is no cache_location! just wrap the remote file in a buffer */
+            rc2 = KBufFileMakeRead ( & temp_file, * cfp, 128 * 1024 * 1024 );
+        }
+        else
+        {
+            /* we do have a cache_location! wrap the remote file in a cacheteefile */
+            rc2 = KDirectoryMakeCacheTee ( self->cwd, &temp_file, *cfp, NULL,
+                                           DEFAULT_CACHE_BLOCKSIZE, DEFAULT_CACHE_CLUSTER,
+                                           false, "%s", cache_location );
+        }
+        if ( rc2 == 0 )
+        {
+            KFileRelease ( * cfp );
+            * cfp = temp_file;
+        }
+    }
+    return rc;
+}
+
+
+
+LIB_EXPORT rc_t CC VFSManagerGetConfigPWFd ( const VFSManager * self, 
+                                            char * b, size_t bz, size_t * pz)
+{
+#if 1
+    rc_t rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcUnsupported);
+#else
+    const KConfigNode * node;
+    size_t oopsy;
+    size_t z;
+    rc_t rc;
+
+    *pz = 0;
+
+/*    rc = KConfigOpenNodeRead (self->cfg, &node, KRYPTO_PWFD); */
+    rc = KConfigOpenNodeRead (self->cfg, &node, "krypto/pwfd");
+    if (rc == 0)
+    {
+        rc = KConfigNodeRead (node, 0, b, bz-1, &z, &oopsy);
+        if (rc == 0)
+        {
+            if (oopsy != 0)
+                rc = RC (rcKrypto, rcMgr, rcReading, rcBuffer, rcInsufficient);
+            else
+            {
+                b[z] = '\0';
+                *pz = z;
+            }
+        }
+        KConfigNodeRelease (node);
+    }
+#endif
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerGetConfigPWFile (const VFSManager * self, 
+                                              char * b, size_t bz, size_t * pz)
+{
+    const char * env;
+    const KConfigNode * node;
+    size_t oopsy;
+    size_t z;
+    rc_t rc;
+
+    if (pz)
+        *pz = 0;
+
+/*#ifdef ENV_KRYPTO_PWFILE */
+/*    env = getenv (ENV_KRYPTO_PWFILE); */
+    env = getenv ("VDB_PWFILE");
+
+    if (env)
+    {
+        z = string_copy (b, bz, env, string_size (env));
+
+        /* force a NUL that string_copy might have omitted 
+         * even if this truncates the path */
+        b[bz-1] = '\0';
+
+        if (pz)
+            *pz = z;
+       
+        return 0;
+    }
+/* #endif */
+
+/*     rc = KConfigOpenNodeRead (self->cfg, &node, KFG_KRYPTO_PWFILE); */
+    rc = KConfigOpenNodeRead (self->cfg, &node, "krypto/pwfile");
+    if (rc)
+    {
+        /* if not found, change object from path to encryption key */
+        if (GetRCState(rc) == rcNotFound)
+            rc = RC (rcVFS, rcMgr, rcOpening, rcEncryptionKey, rcNotFound);
+    }
+    else
+    {
+        rc = KConfigNodeRead (node, 0, b, bz-1, &z, &oopsy);
+        if (rc == 0)
+        {
+            if (oopsy != 0)
+                rc = RC (rcKrypto, rcMgr, rcReading, rcBuffer, rcInsufficient);
+            else
+            {
+                b[z] = '\0';
+                *pz = z;
+            }
+        }
+        KConfigNodeRelease (node);
+    }
+    return rc;
+}
+
+
+/*
+ * This is still hack - must match VFSManagerResolvePathRelativeDir()
+ */
+LIB_EXPORT rc_t CC VFSManagerWGAValidateHack (const VFSManager * self, 
+                                              const KFile * file,
+                                              const char * path) /* we'll move this to a vpath */
+{
+    VPath * vpath;
+    rc_t rc = 0;
+
+    rc = VPathMake (&vpath, path);
+    if (rc == 0)
+    {
+        size_t z;
+        char obuff [4096 + 2]; /* 1 for over-read and 1 for NUL */
+        const KFile * pwfile;
+        bool is_fd = false;
+        bool have_pwd = false;
+/*      char tbuff [4096 + 2]; */
+
+        /* -----
+         * get the path to and open the pwfile
+         *
+         * first check the insecure password on the command line hack 
+         * then check the option for pwfile in the VPath
+         * then check the option for pwfd
+         * then check the environment
+         * then check the configuration
+         *
+         * some odd jumping around due to ordering of where
+         * to look
+         */
+        /* obviously not used yet */
+        if (VPathOption (vpath, vpopt_temporary_pw_hack, obuff, sizeof obuff, &z) == 0)
+        {
+            if (z < 1)
+                rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcInvalid);
+            else
+            {
+                size_t x = 0;
+                size_t y = 0;
+                int ch, h, l;
+
+                while (x < z)
+                {
+                    h = tolower(obuff[x++]);
+                    l = tolower(obuff[x++]);
+
+                    if (!isxdigit(h) || !isxdigit(l))
+                        rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcInvalid);
+
+                    if (isdigit(h))
+                        ch = (h - '0') << 4;
+                    else
+                        ch = (h + 10 - 'a') << 4;
+                    if (isdigit(l))
+                        ch |= (l - '0');
+                    else
+                        ch |= (l + 10 - 'a');
+
+                    /* added for compatibility with other passwords */
+                    if ((ch == '\r') || (ch == '\r'))
+                        break;
+                    obuff[y++] = (char)ch;
+                }
+                obuff[y] = '\0';
+                assert (z == x);
+                assert (z/2 == y);
+                z = y;
+            }
+        }
+        else
+        {
+            /* also not used yet */
+            if (VPathOption (vpath, vpopt_pwpath, obuff,
+                             sizeof obuff - 1, &z) == 0)
+                have_pwd = true;
+
+            /* also not used yet */
+            else if (VPathOption (vpath, vpopt_pwfd, obuff,
+                                  sizeof obuff - 1, &z) == 0)
+                have_pwd = is_fd = true;
+
+            /* This is used */
+            else if (VFSManagerGetConfigPWFile(self, obuff,
+                                               sizeof obuff-1,
+                                               &z) == 0)
+            have_pwd = true;
+
+            else
+                rc = RC (rcVFS, rcEncryptionKey, rcOpening, rcFile, rcUnknown);
+
+            if (have_pwd)
+            {
+                /* force a NUL terminator that is probably already
+                 * there */
+                obuff [z] = '\0';
+
+                /* -----
+                 * pwfd is not fully a VPath at this point: we 
+                 * should obsolete it
+                 */
+                if (is_fd)
+                    rc = KFileMakeFDFileRead (&pwfile, atoi (obuff));
+
+                else
+                {
+                    VPath * pwp;
+
+                    rc = VPathMakeSysPath (&pwp, obuff);
+                    if (rc == 0)
+                    {
+                        rc = VFSManagerOpenFileRead (self, &pwfile, pwp);
+                        if (rc)
+                        {
+                            rc = RC (rcVFS, rcEncryptionKey, rcOpening, rcFile, rcNotFound);
+                            /* log? */
+                        }
+                        VPathRelease (pwp);
+                    }
+                }
+
+                /* if rc is 0 then we have opened a password file */
+                if (rc == 0)
+                {
+                    /* at this point we are only getting the password from a 
+                     * file but in the future if we can get it from a pipe of
+                     * some sort we can't count on the ReadAll to really know
+                     * if we hit end of file and not just a pause in the
+                     * streaming.  VDB 3 / VFS/KFS 2 will have to fix this somehow
+                     */
+
+                    /* 2 is one for overread and one ful NUL */
+                    assert (VFS_KRYPTO_PASSWORD_MAX_SIZE <= sizeof obuff - 2);
+
+                    /* read the password into obuff */
+                    rc = KFileReadAll (pwfile, 0, obuff, sizeof obuff - 1, &z);
+
+                    /* we're done with the password file (or fd) now */
+                    KFileRelease (pwfile);
+            
+                    if (rc == 0)
+                    {
+                        char * pc;
+
+                        /* -----
+                         * trim back the contents of the file to
+                         * a single ASCII/UTF-8 text line
+                         * We actually only check for the two normal
+                         * end of line characters so it could have other
+                         * control characters...
+                         */
+                        assert (z < sizeof (obuff));
+
+                        obuff[z] = '\0';
+
+                        pc = string_chr (obuff, z, '\r');
+                        if (pc)
+                        {
+                            *pc = '\0';
+                            z = pc - obuff;
+                        }
+                        pc = string_chr (obuff, z, '\n');
+                        if (pc)
+                        {
+                            *pc = '\0';
+                            z = pc - obuff;
+                        }
+
+                        if (z == 0)
+                            rc = RC (rcVFS, rcMgr, rcOpening, rcEncryptionKey, rcTooShort);
+
+                        else if  (VFS_KRYPTO_PASSWORD_MAX_SIZE < z) /* pwz came in as greater than 4096 */
+                            rc = RC (rcVFS, rcMgr, rcOpening, rcEncryptionKey, rcTooLong);
+                    }
+                }
+            }
+        }
+        if (rc == 0)
+        {
+            rc = WGAEncValidate (file, obuff, z);
+        }
+    }
+    return rc;
+}
+
+
+
+/* ResolvePath
+ *
+ * take a VPath and resolve to a final form apropriate for KDB
+ *
+ * that is take a relative path and resolve it against the CWD
+ * or take an accession and resolve into the local or remote 
+ * VResolver file based on config. It is just a single resolution percall
+ */
+static rc_t VFSManagerResolvePathResolver (const VFSManager * self,
+                                           uint32_t flags,
+                                           const VPath * in_path,
+                                           VPath ** out_path)
+{
+    rc_t rc = 0;
+
+    *out_path = NULL;
+
+    /*
+     * this RC perculates up for ncbi-acc: schemes but not for
+     * no scheme uris
+     */
+    if ((flags & vfsmgr_rflag_no_acc) == vfsmgr_rflag_no_acc)
+    {
+        /* hack */
+        if (in_path->scheme == vpuri_none)
+            rc = SILENT_RC (rcVFS, rcMgr, rcResolving, rcSRA, rcNotAvailable);
+        else
+            rc = RC (rcVFS, rcMgr, rcResolving, rcSRA, rcNotAvailable);
+    }
+    else
+    {
+        bool not_done = true;
+
+        /*
+         * cast because we seem to have the restriction on the output from
+         * VResolver that seems too restrictive
+         */
+        if ((flags & vfsmgr_rflag_no_acc_local) == 0)
+        {
+            rc = VResolverLocal (self->resolver, in_path, (const VPath **)out_path);
+            if (rc == 0)
+                not_done = false;
+        }
+            
+        if (not_done && ((flags & vfsmgr_rflag_no_acc_remote) == 0))
+            rc = VResolverRemote (self->resolver, in_path, 
+                                  (const VPath **)out_path, NULL);
+    }
+    return rc;
+}
+
+
+static rc_t VFSManagerResolvePathInt (const VFSManager * self,
+                                      uint32_t flags,
+                                      const KDirectory * base_dir,
+                                      const VPath * in_path,
+                                      VPath ** out_path)
+{
+    char * pc;
+    rc_t rc;
+
+    assert (self);
+    assert (in_path);
+    assert (out_path);
+
+    switch (in_path->scheme)
+    {
+    default:
+        rc = RC (rcVFS, rcMgr, rcResolving, rcPath, rcInvalid);
+        break;
+
+    case vpuri_not_supported:
+    case vpuri_ncbi_legrefseq:
+        rc = RC (rcVFS, rcMgr, rcResolving, rcPath, rcUnsupported);
+        break;
+
+    case vpuri_ncbi_acc:
+        rc = VFSManagerResolvePathResolver (self, flags, in_path, out_path);
+        break;
+
+    case vpuri_none:
+        /* for KDB purposes, no scheme might be an accession */
+        if (flags & vfsmgr_rflag_kdb_acc)
+        {
+             /* no '/' is permitted in an accession */
+            pc = string_chr (in_path->path.addr, in_path->path.size, '/');
+            if (pc == NULL)
+            {
+                rc = VFSManagerResolvePathResolver (self, flags, in_path, out_path);
+                if (rc == 0)
+                    break;
+            }
+        }
+        /* Fall through */
+    case vpuri_ncbi_vfs:
+#if SUPPORT_FILE_URL
+    case vpuri_file:
+#endif
+        /* check for relative versus full path : assumes no 'auth' not starting with '/' */
+        if (in_path->path.addr[0] == '/')
+        {
+            rc = VPathAddRef (in_path);
+            if (rc == 0)
+                *out_path = (VPath *)in_path; /* oh these const ptr are annoying */
+        }
+        else
+        {
+            char b [4 * 1024];
+
+            /* not 'properly' handling query, fragment etc. for relative path
+             * assumes path within VPath is ASCIZ
+             *
+             * If KDirectoryResolvePath took our format and not vsnprintf we
+             *  could use %S and get the string out of the VPath.
+             */
+            rc = KDirectoryResolvePath (base_dir, true, b, sizeof b,
+                                        in_path->path.addr);
+            if (rc == 0)
+            {
+                VPath * v;
+                char u [32 * 1024];
+
+                switch (in_path->scheme)
+                {
+                default:
+                    rc = RC (rcVFS, rcMgr, rcResolving, rcFunction, rcInvalid);
+                    break;
+
+                case vpuri_ncbi_vfs:
+                    rc = string_printf (u, sizeof u, NULL, "%s:%s?%s#%s",
+                                        in_path->storage, b,
+                                        in_path->query, in_path->fragment);
+                    if (rc == 0)
+                        rc = VPathMake (&v, u);
+                    break;
+
+                case vpuri_none:
+                case vpuri_file:
+                    rc = VPathMake (&v, b);
+                    break;
+                }
+                if (rc == 0)
+                    *out_path = v;
+            }
+        }
+        break;
+
+        /* these are considered fully resolved already */
+    case vpuri_http:
+    case vpuri_ftp:
+        rc = VPathAddRef (in_path);
+        if (rc == 0)
+            *out_path = (VPath*)in_path;
+        break;
+
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerResolvePath (const VFSManager * self,
+                                          uint32_t flags,
+                                          const VPath * in_path,
+                                          VPath ** out_path)
+{
+    if (out_path == NULL)
+        return RC (rcVFS, rcMgr, rcResolving, rcParam, rcNull);
+
+    *out_path = NULL;
+
+    if (self == NULL)
+        return RC (rcVFS, rcMgr, rcResolving, rcSelf, rcNull);
+
+    if (in_path == NULL)
+        return RC (rcVFS, rcMgr, rcResolving, rcParam, rcNull);
+
+    return VFSManagerResolvePathInt (self, flags, self->cwd, in_path, out_path);
+}
+
+LIB_EXPORT rc_t CC VFSManagerResolvePathRelative (const VFSManager * self,
+                                                  uint32_t flags,
+                                                  const struct  VPath * base_path,
+                                                  const struct  VPath * in_path,
+                                                  struct VPath ** out_path)
+{
+    const KDirectory * dir;
+    rc_t rc;
+
+    if (out_path == NULL)
+        rc = RC (rcVFS, rcMgr, rcResolving, rcParam, rcNull);
+
+    *out_path = NULL;
+
+    if (self == NULL)
+        return RC (rcVFS, rcMgr, rcResolving, rcSelf, rcNull);
+
+    if (in_path == NULL)
+        return RC (rcVFS, rcMgr, rcResolving, rcParam, rcNull);
+
+    rc = VFSManagerOpenDirectoryRead (self, &dir, base_path);
+    if (rc == 0)
+        rc = VFSManagerResolvePathInt (self, flags, dir, in_path, out_path);
+
+    return rc;
+}
+
+/*
+ * This is still hack - must match VFSManagerGetEncryptionKey()
+ */
+
+LIB_EXPORT rc_t CC VFSManagerResolvePathRelativeDir (const VFSManager * self,
+                                                     uint32_t flags,
+                                                     const KDirectory * base_dir,
+                                                     const VPath * in_path,
+                                                     VPath ** out_path)
+{
+    if (out_path == NULL)
+        return RC (rcVFS, rcMgr, rcResolving, rcParam, rcNull);
+
+    *out_path = NULL;
+
+    if (self == NULL)
+        return RC (rcVFS, rcMgr, rcResolving, rcSelf, rcNull);
+
+    if (in_path == NULL)
+        return RC (rcVFS, rcMgr, rcResolving, rcParam, rcNull);
+
+    return VFSManagerResolvePathInt (self, flags, base_dir, in_path, out_path);
+}
+
+
+/* OpenFileRead
+ *  opens an existing file with read-only access
+ *
+ *  "f" [ OUT ] - return parameter for newly opened file
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target file
+ */
+static
+rc_t VFSManagerOpenFileReadDecryption (const VFSManager *self,
+                                       const KDirectory * dir,
+                                       const KFile ** f,
+                                       const KFile * file,
+                                       const VPath * path,
+                                       bool force_decrypt,
+                                       bool * was_encrypted)
+{
+    rc_t rc = 0;
+    size_t z;
+    char obuff [4096 + 2]; /* 1 for over-read and 1 for NUL */
+    bool has_enc_opt;
+
+    if (was_encrypted)
+        *was_encrypted = false;
+
+    /* -----
+     * at this point we have no fatal errors and we have the
+     * file opened but we have not seen if we have to decrypt
+     * or use other query options
+     */
+    has_enc_opt = (VPathOption (path, vpopt_encrypted, obuff,
+                                sizeof obuff, &z) == 0);
+
+    if ((has_enc_opt == false) &&
+        (force_decrypt == false))
+    {
+        /* if we are not told to decrypt, don't and we are done */
+        KFileAddRef (file);
+        *f = file;
+    }
+
+    else /* we are told to decrypt if possible */
+    {
+        rc_t erc = 0;
+        const KFile * pwfile;
+        bool is_fd = false;
+        bool have_pwd = false;
+        char tbuff [4096];
+
+        /* -----
+         * get the path to and open the pwfile
+         *
+         * first check the insecure password on the command line hack 
+         * then check the option for pwfile in the VPath
+         * then check the option for pwfd
+         * then check the environment
+         * then check the configuration
+         *
+         * some odd jumping around due to ordering of where
+         * to look
+         */
+        if (VPathOption (path, vpopt_temporary_pw_hack, obuff, sizeof obuff, &z) == 0)
+        {
+            if (z < 1)
+                erc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcInvalid);
+            else
+            {
+                size_t x = 0;
+                size_t y = 0;
+                int ch, h, l;
+
+                while (x < z)
+                {
+
+                    h = tolower(obuff[x++]);
+                    l = tolower(obuff[x++]);
+
+                    if (!isxdigit(h) || !isxdigit(l))
+                        erc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcInvalid);
+
+                    if (isdigit(h))
+                        ch = (h - '0') << 4;
+                    else
+                        ch = (h + 10 - 'a') << 4;
+                    if (isdigit(l))
+                        ch |= (l - '0');
+                    else
+                        ch |= (l + 10 - 'a');
+
+                    /* added for compatibility with other passwords */
+                    if ((ch == '\r') || (ch == '\r'))
+                        break;
+
+                    obuff[y++] = (char)ch;
+                }
+                obuff[y] = '\0';
+                assert (z == x);
+                assert (z/2 == y);
+                z = y;
+            }
+        }
+        else
+        {
+            if (VPathOption (path, vpopt_pwpath, obuff,
+                             sizeof obuff - 1, &z) == 0)
+                have_pwd = true;
+
+            else if (VPathOption (path, vpopt_pwfd, obuff,
+                                  sizeof obuff - 1, &z) == 0)
+                have_pwd = is_fd = true;
+
+            else if (VFSManagerGetConfigPWFile(self, obuff,
+                                               sizeof obuff-1,
+                                               &z) == 0)
+                have_pwd = true;
+
+            else
+                erc = RC (rcVFS, rcEncryptionKey, rcOpening, rcFile, rcUnknown);
+
+            if (have_pwd)
+            {
+                /* force a NUL terminator that is probably already
+                 * there */
+                obuff [z] = '\0';
+
+                /* -----
+                 * pwfd is not fully a VPath at this point: we 
+                 * should obsolete it
+                 */
+                if (is_fd)
+                    rc = KFileMakeFDFileRead (&pwfile, atoi (obuff));
+
+                else
+                {
+                    VPath * pwp;
+
+                    erc = VPathMakeSysPath (&pwp, obuff);
+                    if (erc)
+                        ; /* log ? */
+
+                    else
+                    {
+                        erc = VFSManagerOpenFileRead (self, &pwfile, pwp);
+                        if (erc)
+                        {
+                            erc = RC (rcVFS, rcEncryptionKey, rcOpening, rcFile, rcNotFound);
+                            /* log? */
+                        }
+                        VPathRelease (pwp);
+                    }
+                }
+        
+
+                /* if erc is 0 then we have opened a password file */
+                if (erc == 0)
+                {
+                    /* at this point we are only getting the password from a 
+                     * file but in the future if we can get it from a pipe of
+                     * some sort we can't count on the ReadAll to really know
+                     * if we hit end of file and not just a pause in the
+                     * streaming.  VDB 3 / VFS/KFS 2 will have to fix this somehow
+                     */
+
+                    /* 2 is one for overread and one ful NUL */
+                    assert (VFS_KRYPTO_PASSWORD_MAX_SIZE <= sizeof obuff - 2);
+
+                    /* read the password into obuff */
+                    erc = KFileReadAll (pwfile, 0, obuff, sizeof obuff - 1, &z);
+
+                    /* we're done with the password file (or fd) now */
+                    KFileRelease (pwfile);
+            
+                    if (erc)
+                        ; /* log ? */
+
+                    else
+                    {
+                        char * pc;
+
+                        /* -----
+                         * trim back the contents of the file to
+                         * a single ASCII/UTF-8 text line
+                         * We actually only check for the two normal
+                         * end of line characters so it could have other
+                         * control characters...
+                         */
+
+                        assert (z < sizeof (obuff));
+
+                        obuff[z] = '\0';
+
+                        pc = string_chr (obuff, z, '\r');
+                        if (pc)
+                        {
+                            *pc = '\0';
+                            z = pc - obuff;
+                        }
+                        pc = string_chr (obuff, z, '\n');
+                        if (pc)
+                        {
+                            *pc = '\0';
+                            z = pc - obuff;
+                        }
+
+                        if (z == 0)
+                            erc = RC (rcVFS, rcMgr, rcOpening, rcEncryptionKey, rcTooShort);
+
+                        else if  (VFS_KRYPTO_PASSWORD_MAX_SIZE < z) /* pwz came in as greater than 4096 */
+                            erc = RC (rcVFS, rcMgr, rcOpening, rcEncryptionKey, rcTooLong);
+                    }
+                }
+            }
+        }
+
+        /* -----
+         * pre-read 4kb from the 'encrypted file'
+         */
+        rc = KFileRandomAccess (file);
+        if (rc == 0)
+            ;
+        /* most common and easiest option is it has random
+         * access - a no-op here
+         */
+        else if (GetRCState(rc) == rcUnsupported)
+        {
+            const KFile * buffile;
+
+            rc = KBufFileMakeRead (&buffile, file, 32 * 2 * 1024);
+            if (rc)
+                ;
+            else
+            {
+                /* there is an extra reference to file now, but
+                 * it gets removed after this function returns
+                 */
+                file = buffile;
+            }
+        }
+        
+        if (rc == 0)
+        {
+            size_t tz;
+
+            /* we now have a file from which we can pre-read the
+             * possible encrypted format header */
+            rc = KFileReadAll (file, 0, tbuff, sizeof tbuff, &tz);
+            if (rc == 0)
+            {
+                /* 
+                 * we've successfully read 4KB from the file,
+                 * now decide if is actually an encrypted file
+                 * format we support
+                 */
+                const KFile * encfile;
+
+                /* is this the header of an ecnrypted file? */
+                if (KFileIsEnc (tbuff, tz) == 0)
+                {
+                    if (was_encrypted)
+                        *was_encrypted = true;
+
+                    if (erc)
+                        rc = erc;
+
+                    else
+                    {
+                        KKey key;
+
+                        /* create the AES Key */
+                        rc = KKeyInitRead (&key, kkeyAES128, obuff, z);
+                        if (rc)
+                            ;
+                        else
+                        {
+                            rc = KEncFileMakeRead (&encfile, file, &key);
+                            if (rc)
+                                ;
+                            else
+                            {
+                                const KFile * buffile;
+
+                                /*
+                                 * TODO: make the bsize a config item not a hard constant
+                                 */
+                                rc = KBufFileMakeRead (&buffile, encfile,
+                                                       256 * 1024 * 1024);
+                                if (rc == 0)
+                                {
+                                    /* we'll release an extra reference to file
+                                     * after this function returns
+                                     */
+                                    *f = buffile;
+                                    return 0;
+                                }
+                                KFileRelease (encfile);
+                            }
+                        }
+                    }
+                }
+                else if (KFileIsWGAEnc (tbuff, tz) == 0)
+                {
+                    if (was_encrypted)
+                        *was_encrypted = true;
+
+                    if (erc)
+                        rc = erc;
+
+                    else
+                    {
+                        rc = KFileMakeWGAEncRead (&encfile, file, obuff, z);
+                        if (rc)
+                            ;
+                        else
+                        {
+                            /* we'll release anextra reference to file
+                             * after this function returns
+                             */
+                            *f = encfile;
+                            return 0;
+                        }
+                    }
+                }
+                else
+                {
+                    /* -----
+                     * not encrypted in a manner we can decrypt so 
+                     * give back the raw file (possibly buffered
+                     *
+                     * since file is released in the caller
+                     * we need another reference
+                     */
+                    KFileAddRef (file);
+                    *f = file;
+                    return 0;
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+/*
+ * try to open the file as a regular file
+ */
+static
+rc_t VFSManagerOpenFileReadRegularFile (char * pbuff, size_t z,
+                                        KFile const ** file,
+                                        const KDirectory * dir)
+{
+    rc_t rc;
+    char rbuff [8192];
+
+    assert ((pbuff) && (pbuff[0]));
+    assert (*file == NULL);
+
+    rc = KDirectoryResolvePath (dir, true, rbuff, sizeof rbuff,
+                                pbuff);
+    if (rc)
+        ; /* log? */
+    else
+    {
+        /* validate that the file system agrees the path refers
+         * to a regular file (even if through a link */
+        uint32_t type;
+
+        type = KDirectoryPathType (dir, rbuff);
+        switch (type & ~kptAlias)
+        {
+        case kptNotFound:
+            rc = RC (rcVFS, rcMgr, rcOpening, rcFile,
+                     rcNotFound);
+            break;
+
+        case kptBadPath:
+            rc = RC (rcVFS, rcMgr, rcOpening, rcFile,
+                     rcInvalid);
+            break;
+
+        case kptDir:
+        case kptCharDev:
+        case kptBlockDev:
+        case kptFIFO:
+        case kptZombieFile:
+            rc = RC (rcVFS, rcMgr, rcOpening, rcFile,
+                     rcIncorrect);
+            break;
+
+        default:
+            rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcUnknown);
+            break;
+
+        case kptFile:
+            /*
+             * this is the good/successful path: open the file 
+             * as a const KFile
+             */
+            rc = KDirectoryOpenFileRead (dir, file, rbuff);
+            break;
+        }
+    }
+
+    return rc;
+}
+
+/*
+ * if successful set *file to a usable KFile * and return 0
+ * if unsuccessful but without error, set *file to NULL and return 0
+ * if an error encountered set *file to NULL and return non-zero.
+ */
+static
+rc_t VFSManagerOpenFileReadSpecial (char * pbuff, size_t z, KFile const ** file)
+{
+    rc_t rc;
+    static const char dev [] = "/dev/";
+    static const char dev_stdin [] = "/dev/stdin";
+    static const char dev_null [] = "/dev/null";
+
+    assert (pbuff);
+    assert (z);
+    assert (file);
+
+    *file = NULL;
+
+    /*
+     * Handle a few special case path names that are pre-opened
+     * 'file descriptors'
+     *
+     * This probably needs to be system specific eventually
+     *
+     * First check for the path being in the 'dev' directory in
+     * posix/unix terms
+     */
+    if (string_cmp (dev, sizeof dev - 1, pbuff, z, sizeof dev - 1) != 0)
+        rc = 0; /* we're done */
+
+    else
+    {
+        if (strcmp (dev_stdin, pbuff) == 0)
+            rc = KFileMakeStdIn (file);
+
+        else if (strcmp (dev_null, pbuff) == 0)
+            rc = KFileMakeNullRead (file);
+
+        else if (strncmp ("/dev/fd/", pbuff, sizeof "/dev/fd/" - 1) == 0)
+        {
+            char * pc;
+            size_t ix;
+
+            pc = pbuff + sizeof "/dev/fd/" - 1;
+
+            for (ix = 0; isdigit (pc[ix]); ++ix)
+                assert (ix <= z);
+
+            if ((ix > 0)&&(pc[ix] == '\0'))
+            {
+                int fd;
+
+                fd = atoi (pc);
+                rc = KFileMakeFDFileRead (file, fd);
+            }
+        }
+    }
+
+    return rc;
+}
+
+static
+rc_t VFSManagerOpenFileReadInt (const VFSManager *self,
+                                const KDirectory * dir,
+                                KFile const **f,
+                                const VPath * path,
+                                bool force_decrypt,
+                                bool * was_encrypted)
+{
+    /* -----
+     * this is a first pass that only opens files directory referenced from 
+     * the ced or have a sysdir root; that is it uses KSysDir and KSysFile
+     * only.
+     */
+    const KFile * file = NULL;
+    size_t num_read;
+    char pbuff [4096];
+    rc_t rc;
+
+    rc = VPathReadPath (path, pbuff, sizeof pbuff, &num_read);
+    if (rc)
+        ; /* log? */
+    else
+    {
+        /* -----
+         * try to open path as a special file if requested
+         *
+         * *file will be set or a usable file or to NULL and rc will reflect
+         * any error
+         */
+        rc = VFSManagerOpenFileReadSpecial (pbuff, num_read, &file);
+
+
+        /* -----
+         * If we didn't open the file using the special
+         * logic above for special paths open the file and have no error,
+         * continue
+         */
+        if ((rc == 0) && (file == NULL))
+            rc = VFSManagerOpenFileReadRegularFile (pbuff, num_read,
+                                                    &file, dir);
+
+        /*
+         * we either have an rc to return with or we have an open KFile:
+         * check for possible encryption that we are told to decrypt
+         */
+        if (rc == 0)
+        {
+            rc = VFSManagerOpenFileReadDecryption (self, dir, f, file, path,
+                                                   force_decrypt, was_encrypted);
+        }
+    }
+    /* release file if we are here and it is open */
+    KFileRelease (file);
+    return rc;
+}
+
+
+static
+rc_t VFSManagerOpenFileReadDirectoryRelativeInt (const VFSManager *self,
+                                                 const KDirectory * dir,
+                                                 KFile const **f,
+                                                 const VPath * path,
+                                                 bool force_decrypt,
+                                                 bool * was_encrypted)
+{
+    rc_t rc;
+
+    if (f == NULL)
+        rc = RC (rcVFS, rcMgr, rcOpening, rcParam, rcNull);
+
+    else
+    {
+        *f = NULL;
+
+        if ((f == NULL) || (path == NULL))
+            rc = RC (rcVFS, rcMgr, rcOpening, rcParam, rcNull);
+
+        else if (self == NULL)
+            rc = RC (rcVFS, rcMgr, rcOpening, rcSelf, rcNull);
+
+        else
+        {
+
+            rc = VFSManagerOpenFileReadInt (self, dir, f, path, force_decrypt, was_encrypted);
+        }
+    }
+    return rc;
+}
+
+
+/* we will create a KFile from a http or ftp url... */
+static rc_t VFSManagerOpenCurlFile ( const VFSManager *self,
+                                     KFile const **f,
+                                     const VPath * path )
+{
+    rc_t rc;
+/*    const char * url; */
+    const String * uri = NULL;
+
+    if ( f == NULL )
+        return RC( rcVFS, rcMgr, rcOpening, rcParam, rcNull );
+    *f = NULL;
+    if ( self == NULL )
+        return RC( rcVFS, rcMgr, rcOpening, rcSelf, rcNull );
+    if ( path == NULL )
+        return RC( rcVFS, rcMgr, rcOpening, rcParam, rcNull );
+
+/*    url = path->path.addr; */
+    rc = VPathMakeString ( path, &uri );
+    if ( rc == 0 )
+    {
+        if ( self->resolver != NULL )
+        {
+            const VPath * local_cache;
+            /* find cache - vresolver call */
+            rc = VResolverCache ( self->resolver, path, &local_cache, 0 );
+            if ( rc == 0 )
+                /* we did find a place for local cache --> use it! */
+                rc = VFSManagerMakeCurlFile( self, f, uri->addr, local_cache->path.addr );
+            else
+                /* we did NOT find a place for local cache --> we are not caching! */
+                rc = VFSManagerMakeCurlFile( self, f, uri->addr, NULL );
+        }
+        else
+            rc = VFSManagerMakeCurlFile( self, f, uri->addr, NULL );
+        free( ( void * )uri );
+    }
+    return rc;
+}
+
+
+LIB_EXPORT
+rc_t CC VFSManagerOpenFileReadDirectoryRelative (const VFSManager *self,
+                                                 const KDirectory * dir,
+                                                 KFile const **f,
+                                                 const VPath * path)
+{
+    return VFSManagerOpenFileReadDirectoryRelativeInt (self, dir, f, path, false, NULL);
+}
+
+LIB_EXPORT
+rc_t CC VFSManagerOpenFileReadDirectoryRelativeDecrypt (const VFSManager *self,
+                                                        const KDirectory * dir,
+                                                        KFile const **f,
+                                                        const VPath * path,
+                                                        bool force_decrypt)
+{
+    return VFSManagerOpenFileReadDirectoryRelativeInt (self, dir, f, path, true, NULL);
+}
+
+
+static rc_t ResolveVPathByVResolver( struct VResolver * resolver, const VPath ** path )
+{
+    rc_t rc;
+
+    if ( resolver == NULL )
+        rc = RC ( rcVFS, rcFile, rcOpening, rcSRA, rcUnsupported );
+    else
+    {
+        const VPath * tpath;
+        rc = VResolverLocal ( resolver, *path, &tpath );
+        if ( rc == 0 )
+        {
+            VPathRelease ( *path );
+            *path = tpath;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t ResolveVPathBySRAPath( SRAPath * srapath, const VPath ** path )
+{
+    rc_t rc;
+
+    if ( srapath == NULL )
+        rc = RC ( rcVFS, rcFile, rcOpening, rcSRA, rcUnsupported );
+    else
+    {
+        char spath [ 8192 ];
+        rc = SRAPathFind ( srapath, (*path)->path.addr, spath, sizeof spath );
+        if ( rc == 0 )
+        {
+            char npath [ 8192 ];
+            size_t zz;
+
+            if ( (*path)->query && (*path)->query[ 0 ] )
+                rc = string_printf ( npath, sizeof npath, &zz, "ncbi-file:%s?%s",
+                                     spath, (*path)->query );
+            else
+                rc = string_printf ( npath, sizeof npath, &zz, "ncbi-file:%s",
+                                     spath );
+            if ( rc == 0 )
+            {
+                VPath * tpath;
+                rc = VPathMake ( &tpath, npath );
+                if ( rc == 0 )
+                {
+                    VPathRelease ( *path );
+                    *path = tpath;
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerOpenFileRead ( const VFSManager *self,
+                                            KFile const **f,
+                                            const VPath * path_ )
+{
+    rc_t rc;
+
+    if ( f == NULL )
+        rc = RC (rcVFS, rcMgr, rcOpen, rcParam, rcNull);
+    else
+    {
+        *f = NULL;
+
+        if  (self == NULL )
+            rc = RC ( rcVFS, rcMgr, rcOpen, rcSelf, rcNull );
+        else if ( f == NULL )
+            rc = RC ( rcVFS, rcMgr, rcOpen, rcParam, rcNull );
+        else
+        {
+            rc = VPathAddRef ( path_ );
+            if ( rc == 0 )
+            {
+                const VPath * path = path_;
+
+                switch ( path->scheme )
+                {
+                default:
+                case vpuri_invalid:
+                    rc = RC (rcVFS, rcFile, rcOpening, rcPath, rcInvalid);
+                    break;
+
+                case vpuri_not_supported:
+                    rc = RC (rcVFS, rcFile, rcOpening, rcPath, rcUnsupported);
+                    break;
+
+                case vpuri_ncbi_acc:
+                    if ( self->resolver != NULL )
+                        rc = ResolveVPathByVResolver( self->resolver, &path );
+                    else
+                        rc = ResolveVPathBySRAPath( self->srapath, &path );
+
+                    if ( rc != 0 )
+                        break;
+
+                /* !!! fall through !!! */
+
+                case vpuri_none:
+                case vpuri_ncbi_vfs:
+#if SUPPORT_FILE_URL
+                case vpuri_file:
+#endif
+                    rc = VFSManagerOpenFileReadDirectoryRelativeInt ( self, self->cwd, f, path, false, NULL );
+                    break;
+
+                case vpuri_ncbi_legrefseq:
+                    rc = RC ( rcVFS, rcFile, rcOpening, rcPath, rcIncorrect );
+                    break;
+
+                case vpuri_http:
+                case vpuri_ftp:
+                    rc = VFSManagerOpenCurlFile ( self, f, path );
+                    break;
+                }
+                VPathRelease (path);
+            }
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerOpenFileReadDecrypt (const VFSManager *self,
+                                                  KFile const **f,
+                                                  const VPath * path)
+{
+    return VFSManagerOpenFileReadDirectoryRelativeInt ( self, self->cwd, f, path, true, NULL );
+}
+
+
+static
+rc_t get_config_password (const VFSManager * self, char * b, size_t s, size_t * p)
+{
+    const KFile * pwfile;
+    size_t z;
+    rc_t rc;
+    char obuff [4096 + 16];
+
+    assert (b && s && p);
+
+    rc = VFSManagerGetConfigPWFile(self, obuff, sizeof obuff, &z);
+    if (rc == 0)
+    {
+        VPath * vpath;
+
+        rc = VPathMake (&vpath, obuff);
+        if (rc)
+            ;
+
+        else
+        {
+            rc =  VFSManagerOpenFileRead (self, &pwfile, vpath);
+            if (rc)
+                rc = RC (rcVFS, rcEncryptionKey, rcOpening, rcFile, rcNotFound);
+
+            else
+            {
+                VPathRelease (vpath);
+
+                /* read the password into obuff */
+                rc = KFileReadAll (pwfile, 0, obuff, sizeof obuff - 1, &z);
+            
+                KFileRelease (pwfile);
+
+                if (rc == 0)
+                {
+                    char * pc;
+
+                    /* -----
+                     * trim back the contents of the file to
+                     * a single ASCII/UTF-8 text line
+                     * We actually only check for the two normal
+                     * end of line characters so it could have other
+                     * control characters...
+                     */
+                    obuff[z] = '\0';
+                    pc = string_chr (obuff, z, '\r');
+                    if (pc)
+                    {
+                        *pc = '\0';
+                        z = pc - obuff;
+                    }
+                    pc = string_chr (obuff, z, '\n');
+                    if (pc)
+                    {
+                        *pc = '\0';
+                        z = pc - obuff;
+                    }
+
+                    if (z > 4096) /* arbitrary maximum size */
+                        rc = RC (rcKrypto, rcEncryptionKey, rcRetrieving, rcEncryptionKey, rcExcessive);
+
+                    else if (s < z)
+                        rc = RC (rcKrypto, rcEncryptionKey, rcRetrieving, rcBuffer, rcInsufficient);
+
+                    else
+                    {
+                        memcpy (b, obuff, z);
+                        if (s>z)
+                            b[z] = '\0';
+                        *p = z;
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT
+rc_t CC VFSManagerOpenDirectoryUpdateDirectoryRelative (const VFSManager *self,
+                                                        const KDirectory * dir,
+                                                        KDirectory **d,
+                                                        const VPath * path)
+{
+    size_t num_read;
+    char pbuff [4096]; /* path buffer */
+    rc_t rc;
+
+    if ((d == NULL) || (path == NULL))
+        return RC (rcVFS, rcMgr, rcOpening, rcParam, rcNull);
+
+    *d = NULL;
+
+    if (self == NULL)
+        return RC (rcVFS, rcMgr, rcOpening, rcSelf, rcNull);
+
+    switch ( path->scheme )
+    {
+    case vpuri_http :
+    case vpuri_ftp :
+        return RC( rcVFS, rcMgr, rcOpening, rcParam, rcWrongType );
+
+    default :
+        rc = VPathReadPath (path, pbuff, sizeof pbuff, &num_read);
+        if (rc == 0)
+        {
+            char rbuff [4096]; /* resolved path buffer */
+
+            rc = KDirectoryResolvePath (dir, true, rbuff, sizeof rbuff, pbuff);
+            if (rc == 0)
+            {
+                uint32_t type;
+
+                type = KDirectoryPathType (dir, rbuff);
+                switch (type & ~kptAlias)
+                {
+                case kptNotFound:
+                    rc = RC (rcVFS, rcMgr, rcOpening, rcDirectory, rcNotFound);
+                    break;
+
+                case kptFile:
+                    rc = RC (rcVFS, rcMgr, rcOpening, rcDirectory, rcReadonly);
+                    break;
+
+                case kptBadPath:
+                    rc = RC (rcVFS, rcMgr, rcOpening, rcDirectory, rcInvalid);
+                    break;
+
+                case kptDir:
+                    rc = KDirectoryOpenDirUpdate ((KDirectory*)dir, d, false, rbuff);
+                    return rc;
+
+                case kptCharDev:
+                case kptBlockDev:
+                case kptFIFO:
+                case kptZombieFile:
+                    rc = RC (rcVFS, rcMgr, rcOpening, rcDirectory, rcIncorrect);
+                    break;
+
+                default:
+                    rc = RC (rcVFS, rcMgr, rcOpening, rcDirectory, rcUnknown);
+                    break;
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerOpenDirectoryUpdate (const VFSManager *self,
+                                                  KDirectory **d,
+                                                  const VPath * path)
+{
+    return VFSManagerOpenDirectoryUpdateDirectoryRelative (self, self->cwd, d, path);
+}
+
+
+static
+rc_t TransformFileToDirectory(const KDirectory * dir,
+                              const KFile * file,
+                              KDirectory const **d,
+                              const char *path_str,
+                              bool was_encrypted)
+{
+    rc_t rc;
+
+    rc = KFileRandomAccess( file );
+    if (rc)
+        PLOGERR(klogErr,(klogErr, rc, "Can not use files without random access"
+                         " as database archives '$(P)'", "P=%s", path_str));
+    else
+    {
+        size_t tz;
+        char tbuff [4096];
+
+        rc = KFileReadAll (file, 0, tbuff, sizeof tbuff, &tz);
+        if ( rc )
+            LOGERR (klogErr, rc, "Error reading the head of an archive to use as a database object");
+        else
+        {
+            /* we only use KAR/SRA or tar files as archives so try to identify
+             * as our KAR/SRA file */
+            if ( KFileIsSRA( tbuff, tz ) == 0 )
+                /* if it was open it as a directory */
+                rc = KDirectoryOpenSraArchiveReadUnbounded_silent_preopened( dir, d, false, file, path_str );
+
+            else
+            {
+                rc = KDirectoryOpenTarArchiveRead_silent_preopened( dir, d, false, file, path_str );
+
+                /*
+                 * if RC here we did not have an SRA and did not have
+                 * a tar file we could use; assume the problem was decryption
+                 * if the file was encrypted
+                 */
+                if ( was_encrypted )
+                {
+                    rc = RC( rcVFS, rcEncryptionKey, rcOpening, rcEncryption,
+                             rcIncorrect );
+                    PLOGERR (klogErr, (klogErr, rc, "could not use '$(P)' as an "
+                                       "archive it was encrypted so the password"
+                                       " was possibly wrong", "P=%s", path_str));
+                }
+                else
+                    PLOGERR (klogInfo, (klogInfo, rc, "could not use '$(P)' as an "
+                                       "archive not identified as SRA or"
+                                       " TAR file", "P=%s", path_str));
+            }
+        }
+    }
+    return rc;
+}
+
+/* also handles ftp - if it cant we'll need another function */
+static
+rc_t VFSManagerOpenDirectoryReadHttp (const VFSManager *self,
+                                      const KDirectory * dir,
+                                      KDirectory const **d,
+                                      const VPath * path,
+                                      bool force_decrypt)
+{
+    rc_t rc;
+
+    {
+        char urlbuffer[ 4096 ];
+        size_t num_writ;
+
+        /*
+         * we have to rebuild the full http-uri again from scheme + path 
+         *
+         * This should become a method in the ath class rather than this 
+         * quick hack
+         *
+         * NOTE we need to eventually remove encryption related options
+         */
+        rc = string_printf (urlbuffer, sizeof urlbuffer, &num_writ, "%s:%s", path->storage, path->path.addr );
+
+        if (rc)
+            PLOGERR (klogErr, (klogErr, rc, "error with url re-creation "
+                               "'$(U)' from '$(P)'","U=%s,P=%S",
+                               urlbuffer,&path->path));
+        else
+        {
+            const KFile * file = NULL;
+
+            rc = VFSManagerOpenCurlFile ( self, &file, path );
+/*            rc = VFSManagerMakeCurlFile( self, &file, urlbuffer, NULL ); */
+            if ( rc != 0 )
+                PLOGERR ( klogErr, ( klogErr, rc, "error with curl open '$(U)'",
+                                     "U=%s", urlbuffer ) );
+            else
+            {
+                const char mountpointpath[] = "/";
+                const KDirectory * mountpoint;
+
+                rc = KQuickMountDirMake (self->cwd, &mountpoint, file,
+                                         mountpointpath, sizeof mountpointpath - 1, 
+                                         path->path.addr, path->path.size);
+                if (rc)
+                    PLOGERR (klogErr, (klogErr, rc, "error creating mount "
+                                       "'$(M)' for '$(F)", "M=%s,F=%S",
+                                       mountpointpath, &path->path));
+                else
+                {
+                    const KFile * f;
+                    bool was_encrypted = false;
+
+                    rc = VFSManagerOpenFileReadDecryption (self, mountpoint, &f,
+                                                           file, path,
+                                                           force_decrypt,
+                                                           &was_encrypted);
+                    if (rc == 0)
+                    {
+
+                        rc = TransformFileToDirectory (mountpoint, f, d, 
+                                                       path->path.addr,
+                                                       was_encrypted);
+                        /* hacking in the fragment bit */
+                        if ((rc == 0) && (path->fragment != NULL) && (path->fragment[0] != '\0'))
+                        {
+                            const KDirectory * tempd;
+
+                            tempd = *d;
+
+                            rc = KDirectoryOpenDirRead (tempd, d, false, path->fragment);
+                
+                            KDirectoryRelease (tempd);
+                        }
+                        KFileRelease (f);
+                    }
+                    KDirectoryRelease (mountpoint);
+                }
+                KFileRelease (file);
+            }
+        }
+    }
+    return rc;
+}
+
+
+static
+rc_t VFSManagerOpenDirectoryReadKfs (const VFSManager *self,
+                                     const KDirectory * dir,
+                                     KDirectory const **d,
+                                     const VPath * path,
+                                     bool force_decrypt)
+{
+    const KFile * file;
+    size_t num_read;
+    char pbuff [4096]; /* path buffer */
+    rc_t rc;
+
+    assert (self);
+    assert (dir);
+    assert (d);
+    assert (path);
+    assert ((force_decrypt == false) || (force_decrypt == true));
+    assert (*d == NULL);
+
+    file = NULL;
+
+    rc = VPathReadPath (path, pbuff, sizeof pbuff, &num_read);
+    if ( rc == 0 )
+    {
+        char rbuff[ 4096 ]; /* resolved path buffer */
+        rc = KDirectoryResolvePath( dir, true, rbuff, sizeof rbuff, pbuff );
+        if ( rc == 0 )
+        {
+            uint32_t type;
+            bool was_encrypted;
+
+            type = KDirectoryPathType( dir, rbuff );
+            switch (type & ~kptAlias)
+            {
+            case kptNotFound:
+                rc = RC( rcVFS, rcMgr, rcOpening, rcDirectory, rcNotFound );
+                break;
+
+            case kptFile:
+                rc = VFSManagerOpenFileReadDirectoryRelativeInt (self, dir, 
+                                                                 &file, path, 
+                                                                 force_decrypt,
+                                                                 &was_encrypted);
+                if (rc == 0)
+                    rc = TransformFileToDirectory (dir, file, d, rbuff,
+                                                   was_encrypted);
+                break;
+
+            case kptBadPath:
+                rc = RC( rcVFS, rcMgr, rcOpening, rcDirectory, rcInvalid );
+                break;
+
+            case kptDir:
+                rc = KDirectoryOpenDirRead( dir, d, false, rbuff );
+                return rc;
+
+            case kptCharDev:
+            case kptBlockDev:
+            case kptFIFO:
+            case kptZombieFile:
+                rc = RC( rcVFS, rcMgr, rcOpening, rcDirectory, rcIncorrect );
+                break;
+
+            default:
+                rc = RC( rcVFS, rcMgr, rcOpening, rcDirectory, rcUnknown );
+                break;
+            }
+
+            /* hacking in the fragment bit */
+            if ((rc == 0) && (path->fragment != NULL) && (path->fragment[0] != '\0'))
+            {
+                const KDirectory * tempd;
+
+                tempd = *d;
+
+                rc = KDirectoryOpenDirRead (tempd, d, false, path->fragment);
+                
+                KDirectoryRelease (tempd);
+            }
+
+
+        }
+    }
+
+    KFileRelease(file);
+
+    return rc;
+}
+
+
+static
+rc_t VFSManagerOpenDirectoryReadLegrefseq (const VFSManager *self,
+                                           const KDirectory * dir,
+                                           KDirectory const **d,
+                                           const VPath * path,
+                                           bool force_decrypt)
+{
+    const KFile * file;
+    const KDirectory * dd;
+    size_t num_read;
+    char pbuff [4096]; /* path buffer */
+    rc_t rc;
+
+    assert (self);
+    assert (dir);
+    assert (d);
+    assert (path);
+    assert ((force_decrypt == false) || (force_decrypt == true));
+    assert (*d == NULL);
+
+    file = NULL;
+    dd = NULL;
+
+    /* hier part only */
+    rc = VPathReadPath (path, pbuff, sizeof pbuff, &num_read);
+    if ( rc == 0 )
+    {
+        char rbuff[ 4096 ]; /* resolved path buffer */
+        rc = KDirectoryResolvePath( dir, true, rbuff, sizeof rbuff, pbuff );
+        if ( rc == 0 )
+        {
+            uint32_t type;
+            bool was_encrypted;
+
+            type = KDirectoryPathType( dir, rbuff );
+            switch (type & ~kptAlias)
+            {
+            case kptNotFound:
+                rc = RC( rcVFS, rcMgr, rcOpening, rcDirectory, rcNotFound );
+                break;
+
+            case kptFile:
+                rc = VFSManagerOpenFileReadDirectoryRelativeInt (self, dir, 
+                                                                 &file, path, 
+                                                                 force_decrypt,
+                                                                 &was_encrypted);
+                if (rc == 0)
+                    rc = TransformFileToDirectory (dir, file, &dd, rbuff,
+                                                   was_encrypted);
+                break;
+
+            case kptBadPath:
+                rc = RC( rcVFS, rcMgr, rcOpening, rcDirectory, rcInvalid );
+                break;
+
+            case kptDir:
+                rc = KDirectoryOpenDirRead( dir, &dd, false, rbuff );
+                break;
+
+            case kptCharDev:
+            case kptBlockDev:
+            case kptFIFO:
+            case kptZombieFile:
+                rc = RC( rcVFS, rcMgr, rcOpening, rcDirectory, rcIncorrect );
+                break;
+
+            default:
+                rc = RC( rcVFS, rcMgr, rcOpening, rcDirectory, rcUnknown );
+                break;
+            }
+
+            if (rc == 0)
+            {
+                rc = KDirectoryOpenDirRead (dd, d, false, path->fragment);
+
+                KDirectoryRelease (dd);
+            }
+        }
+    }
+    return rc;
+}
+
+
+static
+rc_t VFSManagerOpenDirectoryReadDirectoryRelativeInt (const VFSManager *self,
+                                                      const KDirectory * dir,
+                                                      KDirectory const **d,
+                                                      const VPath * path_,
+                                                      bool force_decrypt)
+{
+    rc_t rc;
+    do 
+    {
+        if (d == NULL)
+        {
+            rc =  RC (rcVFS, rcDirectory, rcOpening, rcParam, rcNull);
+            break;
+        }
+
+        *d = NULL;
+
+        if (self == NULL)
+        {
+            rc = RC (rcVFS, rcDirectory, rcOpening, rcSelf, rcNull);
+            break;
+        }
+
+        if ((dir == NULL) || (path_ == NULL))
+        {
+            rc = RC (rcVFS, rcDirectory, rcOpening, rcParam, rcNull);
+            break;
+        }
+
+        if ((force_decrypt != false) && (force_decrypt != true))
+        {
+            rc = RC (rcVFS, rcDirectory, rcOpening, rcParam, rcInvalid);
+            break;
+        }
+
+        rc = VPathAddRef (path_);
+        if ( rc )
+            break;
+        else
+        {
+            const VPath *path = path_;
+
+            switch ( path->scheme )
+            {
+            default:
+            case vpuri_invalid:
+                rc = RC (rcVFS, rcDirectory, rcOpening, rcPath, rcInvalid);
+                break;
+
+
+            case vpuri_not_supported:
+                rc = RC (rcVFS, rcDirectory, rcOpening, rcPath, rcUnsupported);
+                break;
+
+            case vpuri_ncbi_acc:
+                if ( self->resolver != NULL )
+                    rc = ResolveVPathByVResolver( self->resolver, &path );
+                else
+                    rc = ResolveVPathBySRAPath( self->srapath, &path );
+                if ( rc != 0 )
+                    break;
+
+            /* !!! fall through !!! */
+
+            case vpuri_none:
+            case vpuri_ncbi_vfs:
+#if SUPPORT_FILE_URL
+            case vpuri_file:
+#endif
+                rc = VFSManagerOpenDirectoryReadKfs ( self, dir, d, path, force_decrypt );
+                break;
+
+            case vpuri_ncbi_legrefseq:
+                rc = VFSManagerOpenDirectoryReadLegrefseq ( self, dir, d, path, force_decrypt );
+                break;
+
+            case vpuri_http:
+            case vpuri_ftp:
+                rc = VFSManagerOpenDirectoryReadHttp ( self, dir, d, path, force_decrypt );
+                break;
+            }
+            VPathRelease ( path ); /* same as path_ if not uri */
+        }
+    } while (0);
+    return rc;
+}
+
+
+LIB_EXPORT 
+rc_t CC VFSManagerOpenDirectoryReadDirectoryRelative (const VFSManager *self,
+                                                      const KDirectory * dir,
+                                                      KDirectory const **d,
+                                                      const VPath * path)
+{
+    return VFSManagerOpenDirectoryReadDirectoryRelativeInt (self, dir, d, path, false);
+}
+
+
+LIB_EXPORT 
+rc_t CC VFSManagerOpenDirectoryReadDirectoryRelativeDecrypt (const VFSManager *self,
+                                                             const KDirectory * dir,
+                                                             KDirectory const **d,
+                                                             const VPath * path)
+{
+    return VFSManagerOpenDirectoryReadDirectoryRelativeInt (self, dir, d, path, true);
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerOpenDirectoryReadDecrypt (const VFSManager *self,
+                                                       KDirectory const **d,
+                                                       const VPath * path)
+{
+    return VFSManagerOpenDirectoryReadDirectoryRelativeInt (self, self->cwd, d, path, true);
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerOpenDirectoryRead (const VFSManager *self,
+                                                KDirectory const **d,
+                                                const VPath * path)
+{
+    return VFSManagerOpenDirectoryReadDirectoryRelativeInt (self, self->cwd, d, path, false);
+}
+
+
+/* OpenFileWrite
+ *  opens an existing file with write access
+ *
+ *  "f" [ OUT ] - return parameter for newly opened file
+ *
+ *  "update" [ IN ] - if true, open in read/write mode
+ *  otherwise, open in write-only mode
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target file
+ */
+LIB_EXPORT rc_t CC VFSManagerOpenFileWrite (const VFSManager *self,
+                                            KFile **f, bool update,
+                                            const VPath * path )
+{
+    /* -----
+     * this is a first pass that only opens files directory referenced from 
+     * the ced or have a sysdir root; that is it uses KSysDir and KSysFile
+     * only.
+     */
+    KFile * file = NULL;
+    size_t num_read;
+    char pbuff [4096];
+    rc_t rc;
+
+    if ((f == NULL) || (path == NULL))
+        return RC (rcVFS, rcMgr, rcOpening, rcParam, rcNull);
+
+    *f = NULL;
+
+    if (self == NULL)
+        return RC (rcVFS, rcMgr, rcOpening, rcSelf, rcNull);
+
+    rc = VPathReadPath (path, pbuff, sizeof pbuff, &num_read);
+    if (rc == 0)
+    {
+        /* handle a few special case path names
+         * This probably needs to be system specifica eventually
+         */
+        if (strncmp ("/dev/", pbuff, sizeof "/dev/" - 1) == 0)
+        {
+
+            if (strcmp ("/dev/stdout", pbuff) == 0)
+                rc = KFileMakeStdOut (&file);
+            else if (strcmp ("/dev/stderr", pbuff) == 0)
+                rc = KFileMakeStdErr (&file);
+            else if (strcmp ("/dev/null", pbuff) == 0)
+                rc = KFileMakeNullUpdate (&file);
+            else if (strncmp ("/dev/fd/", pbuff, sizeof "/dev/fd/" - 1) == 0)
+            {
+                char * pc;
+                size_t ix;
+
+                pc = pbuff + sizeof "/dev/fd/" - 1;
+
+                for (ix = 0; isdigit (pc[ix]); ++ix)
+                    ;
+
+                if ((ix > 0)&&(pc[ix] == '\0'))
+                {
+                    int fd = atoi (pc);
+
+                    rc = KFileMakeFDFileWrite (&file, update, fd);
+                }
+            }
+        }
+        if ((rc == 0)&&(file == NULL))
+        {
+            char rbuff [4096];
+
+            rc = KDirectoryResolvePath (self->cwd, true, rbuff, sizeof rbuff, pbuff);
+            if (rc == 0)
+            {
+                uint32_t type;
+
+                type = KDirectoryPathType (self->cwd, rbuff);
+                switch (type & ~kptAlias)
+                {
+                case kptNotFound:
+                    rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcNotFound);
+                    break;
+
+                case kptFile:
+                    rc = KDirectoryOpenFileWrite (self->cwd, f, update, rbuff);
+                    break;
+
+                case kptBadPath:
+                    rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcInvalid);
+                    break;
+                case kptDir:
+                case kptCharDev:
+                case kptBlockDev:
+                case kptFIFO:
+                case kptZombieFile:
+                    rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcIncorrect);
+                    break;
+
+                default:
+                    rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcUnknown);
+                    break;
+                }
+            }
+        }
+    }
+    if (rc == 0)
+    {
+        size_t z;
+        char obuff [4096+1];
+
+        if (VPathOption (path, vpopt_encrypted, obuff, sizeof obuff, &z) == 0)
+        {
+            const KFile * pwfile;
+
+            if (VPathOption (path, vpopt_temporary_pw_hack, obuff, sizeof obuff, &z) == 0)
+            {
+                if (z < 1)
+                    rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcInvalid);
+                else
+                {
+                    size_t x = 0;
+                    size_t y = 0;
+
+                    while (x < z)
+                    {
+                        int ch, h, l;
+
+                        h = tolower(obuff[x++]);
+                        l = tolower(obuff[x++]);
+
+                        if (!isxdigit(h) || !isxdigit(l))
+                            rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcInvalid);
+
+                        if (!isxdigit(h) || !isxdigit(l))
+                            rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcInvalid);
+
+                        if (isdigit(h))
+                            ch = (h - '0') << 4;
+                        else
+                            ch = (h + 10 - 'a') << 4;
+                        if (isdigit(l))
+                            ch |= (l - '0');
+                        else
+                            ch |= (l + 10 - 'a');
+
+                        obuff[y++] = ch;
+                    }
+                    obuff[y] = '\0';
+                    assert (z == x);
+                    assert (z/2 == y);
+                    z = y;
+                }
+                if (rc == 0)
+                    goto have_password;
+            }
+            else if (VPathOption (path, vpopt_pwpath, obuff, sizeof obuff, &z) == 0)
+                rc = KDirectoryOpenFileRead (self->cwd, &pwfile, obuff);
+
+            else if (VPathOption (path, vpopt_pwfd, obuff, sizeof obuff, &z) == 0)
+                rc = KFileMakeFDFileRead (&pwfile, atoi (obuff));
+
+            else if ((rc = VFSManagerGetConfigPWFile(self, obuff, sizeof obuff, &z)) == 0)
+                rc = KDirectoryOpenFileRead (self->cwd, &pwfile, obuff);
+
+            else
+                rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcUnsupported);
+
+            if (rc == 0)
+            {
+                rc = KFileReadAll (pwfile, 0, obuff, sizeof obuff - 1, &z);
+                
+                KFileRelease (pwfile);
+
+            have_password:
+
+                if (rc == 0)
+                {
+                    KKey key;
+                    KFile * encfile;
+                    char * pc;
+
+                    obuff[z] = '\0';
+                    pc = string_chr (obuff, z, '\r');
+                    if (pc)
+                    {
+                        *pc = '\0';
+                        z = pc - obuff;
+                    }
+                    pc = string_chr (obuff, z, '\n');
+                    if (pc)
+                    {
+                        *pc = '\0';
+                        z = pc - obuff;
+                    }
+
+                    rc = KKeyInitUpdate (&key, kkeyAES128, obuff, z);
+                    if (rc == 0)
+                    {
+                        rc = KEncFileMakeWrite (&encfile, file, &key);
+                        if (rc == 0)
+                        {
+                            *f = encfile;
+                            return 0;
+                        }
+                    }
+                }
+            }
+            if (rc)
+                KFileRelease (file);
+        }
+        else
+        {
+            *f = file;
+            return 0;
+        }
+    }
+    return rc;
+}
+
+
+/* CreateFile
+ *  opens a file with write access
+ *
+ *  "f" [ OUT ] - return parameter for newly opened file
+ *
+ *  "update" [ IN ] - if true, open in read/write mode
+ *  otherwise, open in write-only mode
+ *
+ *  "access" [ IN ] - standard Unix access mode, e.g. 0664
+ *
+ *  "mode" [ IN ] - a creation mode ( see explanation above ).
+ *
+ *  "path" [ IN ] VPath representing the path, URL or URN of the desired file
+ */
+LIB_EXPORT rc_t CC VFSManagerCreateFile ( const VFSManager *self, KFile **f,
+                                          bool update, uint32_t access, KCreateMode mode, const VPath * path )
+{
+    /* -----
+     * this is a first pass that only opens files directory referenced from 
+     * the ced or have a sysdir root; that is it uses KSysDir and KSysFile
+     * only.
+     */
+    KFile * file = NULL;
+    size_t num_read;
+    rc_t rc;
+    bool file_created = false;
+    char pbuff [4096];
+    char rbuff [4096];
+
+    if ((f == NULL) || (path == NULL))
+        return RC (rcVFS, rcMgr, rcOpening, rcParam, rcNull);
+
+    *f = NULL;
+
+    if (self == NULL)
+        return RC (rcVFS, rcMgr, rcOpening, rcSelf, rcNull);
+
+    rc = VPathReadPath (path, pbuff, sizeof pbuff, &num_read);
+    if (rc == 0)
+    {
+
+        /* handle a few special case path names
+         * This probably needs to be system specifica eventually
+         */
+        if (strncmp ("/dev/", pbuff, sizeof "/dev/" - 1) == 0)
+        {
+
+            if (strcmp ("/dev/stdout", pbuff) == 0)
+                rc = KFileMakeStdOut (&file);
+            else if (strcmp ("/dev/stderr", pbuff) == 0)
+                rc = KFileMakeStdErr (&file);
+            else if (strcmp ("/dev/null", pbuff) == 0)
+                rc = KFileMakeNullUpdate (&file);
+            else if (strncmp ("/dev/fd/", pbuff, sizeof "/dev/fd/" - 1) == 0)
+            {
+                char * pc;
+                size_t ix;
+
+                pc = pbuff + sizeof "/dev/fd/" - 1;
+
+                for (ix = 0; isdigit (pc[ix]); ++ix)
+                    ;
+
+                if ((ix > 0)&&(pc[ix] == '\0'))
+                {
+                    int fd = atoi (pc);
+
+                    rc = KFileMakeFDFileWrite (&file, update, fd);
+                }
+            }
+        }
+        if ((rc == 0)&&(file == NULL))
+        {
+            rc = KDirectoryResolvePath (self->cwd, true, rbuff, sizeof rbuff, pbuff);
+            if (rc == 0)
+            {
+                uint32_t type;
+
+                type = KDirectoryPathType (self->cwd, rbuff);
+                switch (type & ~kptAlias)
+                {
+                case kptNotFound:
+                case kptFile:
+                    rc = KDirectoryCreateFile (self->cwd, &file, update, access, mode,
+                                               rbuff);
+                    if (rc == 0)
+                        file_created = true;
+                    break;
+
+                case kptBadPath:
+                    rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcInvalid);
+                    break;
+                case kptDir:
+                case kptCharDev:
+                case kptBlockDev:
+                case kptFIFO:
+                case kptZombieFile:
+                    rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcIncorrect);
+                    break;
+
+                default:
+                    rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcUnknown);
+                    break;
+                }
+            }
+        }
+    }
+    if (rc == 0)
+    {
+        size_t z;
+        char obuff [4096];
+
+        if (VPathOption (path, vpopt_encrypted, obuff, sizeof obuff, &z) == 0)
+        {
+            const KFile * pwfile;
+
+            if (VPathOption (path, vpopt_temporary_pw_hack, obuff, sizeof obuff, &z) == 0)
+            {
+                if (z < 1)
+                    rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcInvalid);
+                else
+                {
+                    size_t x = 0;
+                    size_t y = 0;
+
+                    while (x < z)
+                    {
+                        int ch, h, l;
+
+                        h = tolower(obuff[x++]);
+                        l = tolower(obuff[x++]);
+
+                        if (!isxdigit(h) || !isxdigit(l))
+                            rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcInvalid);
+
+                        if (!isxdigit(h) || !isxdigit(l))
+                            rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcInvalid);
+
+                        if (isdigit(h))
+                            ch = (h - '0') << 4;
+                        else
+                            ch = (h + 10 - 'a') << 4;
+                        if (isdigit(l))
+                            ch |= (l - '0');
+                        else
+                            ch |= (l + 10 - 'a');
+
+                        obuff[y++] = ch;
+                    }
+                    obuff[y] = '\0';
+                    assert (z == x);
+                    assert (z/2 == y);
+                    z = y;
+                }
+                if (rc == 0)
+                    goto have_password;
+            }
+
+            else if (VPathOption (path, vpopt_pwpath, obuff, sizeof obuff, &z) == 0)
+                rc = KDirectoryOpenFileRead (self->cwd, &pwfile, obuff);
+
+            else if (VPathOption (path, vpopt_pwfd, obuff, sizeof obuff, &z) == 0)
+                rc = KFileMakeFDFileRead (&pwfile, atoi (obuff));
+            else
+                rc = RC (rcVFS, rcPath, rcConstructing, rcParam, rcUnsupported);
+
+            if (rc == 0)
+            {
+                rc = KFileRead (pwfile, 0, obuff, sizeof obuff, &z);
+                
+                KFileRelease (pwfile);
+
+            have_password:
+
+                if (rc == 0)
+                {
+                    KKey key;
+                    KFile * encfile;
+                    char * pc;
+
+                    pc = string_chr (obuff, z, '\r');
+                    if (pc)
+                    {
+                        *pc = '\0';
+                        z = pc - obuff;
+                    }
+                    pc = string_chr (obuff, z, '\n');
+                    if (pc)
+                    {
+                        *pc = '\0';
+                        z = pc - obuff;
+                    }
+
+                    rc = KKeyInitUpdate (&key, kkeyAES128, obuff, z);
+
+                    obuff[z] = '\0';
+
+                    rc = KEncFileMakeWrite (&encfile, file, &key);
+                    if (rc == 0)
+                    {
+                        *f = encfile;
+                        return 0;
+                    }
+                }
+            }
+            if (rc)
+                KFileRelease (file);
+        }
+        else
+        {
+            *f = file;
+            return 0;
+        }
+    }
+    if (rc && file_created)
+        KDirectoryRemove (self->cwd, true, rbuff);
+    return rc;
+}
+
+
+/* Remove
+ *  remove an accessible object from its directory
+ *
+ *  "force" [ IN ] - if true and target is a directory,
+ *  remove recursively
+ *
+ *  "path" [ IN ] - NUL terminated string in directory-native
+ *  character set denoting target object
+ */
+LIB_EXPORT rc_t CC VFSManagerRemove ( const VFSManager *self, bool force,
+                                      const VPath * path )
+{
+    /* -----
+     * this is a first pass that only opens files directory referenced from 
+     * the ced or have a sysdir root; that is it uses KSysDir and KSysFile
+     * only.
+     */
+    size_t num_read;
+    char pbuff [4096];
+    rc_t rc;
+
+    if (path == NULL)
+        return RC (rcVFS, rcMgr, rcOpening, rcParam, rcNull);
+
+    if (self == NULL)
+        return RC (rcVFS, rcMgr, rcOpening, rcSelf, rcNull);
+
+    rc = VPathReadPath (path, pbuff, sizeof pbuff, &num_read);
+    if (rc == 0)
+    {
+        char rbuff [4096];
+    
+        rc = KDirectoryResolvePath (self->cwd, true, rbuff, sizeof rbuff, pbuff);
+        if (rc == 0)
+        {
+            uint32_t type;
+
+            type = KDirectoryPathType (self->cwd, rbuff);
+            switch (type & ~kptAlias)
+            {
+            case kptNotFound:
+                break;
+
+            case kptFile:
+            case kptDir:
+            case kptCharDev:
+            case kptBlockDev:
+            case kptFIFO:
+            case kptZombieFile:
+                rc = KDirectoryRemove (self->cwd, force, rbuff);
+                break;
+
+            case kptBadPath:
+                rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcInvalid);
+                break;
+/*                 rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcIncorrect); */
+/*                 break; */
+
+            default:
+                rc = RC (rcVFS, rcMgr, rcOpening, rcFile, rcUnknown);
+                break;
+            }
+        }
+    }
+    return rc;
+}
+
+static
+rc_t VFSManagerCaptureCurrentEncryptionKey ( VFSManager * self )
+{
+    rc_t rc = 0;
+
+    /* kludge time - for today, we check to see if there is
+       already a path to an encryption-key file. should not
+       be, but we never know. if present, it continues to
+       override everything else. if not present, we can use
+       the current behavior to set it to have a path to the
+       current file if there. */
+    const char * env = getenv ( "VDB_PWFILE" );
+    if ( env == NULL || env [ 0 ] == 0 )
+    {
+        const KRepositoryMgr *rmgr;
+        rc = KConfigMakeRepositoryMgrRead ( self -> cfg, & rmgr );
+        if ( rc != 0 )
+            rc = 0;
+        else
+        {
+            const KRepository *protected;
+            rc = KRepositoryMgrCurrentProtectedRepository ( rmgr, & protected );
+            if ( rc != 0 )
+                rc = 0;
+            else
+            {
+                char path [ 4096 + 16 ];
+                const size_t env_key_size = sizeof "VDB_PWFILE=" - 1;
+                memcpy ( path, "VDB_PWFILE=", env_key_size );
+                rc = KRepositoryEncryptionKeyFile ( protected, & path [ env_key_size ], sizeof path - env_key_size, NULL );
+                if ( rc == 0 && path [ env_key_size ] != 0 )
+                {
+                    size_t env_size = string_size ( path );
+                    self -> pw_env = malloc ( env_size + 1 );
+                    if ( self -> pw_env == NULL )
+                        rc = RC ( rcVFS, rcMgr, rcConstructing, rcMemory, rcExhausted );
+                    else
+                    {
+                        int status;
+                        memcpy ( self -> pw_env, path, env_size + 1 );
+                        status = putenv ( self -> pw_env );
+                        if ( status != 0 )
+                        {
+                            rc = RC ( rcVFS, rcMgr, rcConstructing, rcPath, rcCorrupt );
+                            free ( self -> pw_env );
+                            self -> pw_env = NULL;
+                        }
+                    }
+                }
+
+                KRepositoryRelease ( protected );
+            }
+
+            KRepositoryMgrRelease ( rmgr );
+        }
+    }
+
+    return rc;
+}
+
+
+/* Make
+ */
+LIB_EXPORT rc_t CC VFSManagerMake ( VFSManager ** pmanager )
+{
+    rc_t rc;
+
+    if (pmanager == NULL)
+        return RC (rcVFS, rcMgr, rcConstructing, rcParam, rcNull);
+
+    *pmanager = singleton;
+    if (singleton != NULL)
+    {
+        rc = VFSManagerAddRef ( singleton );
+        if ( rc != 0 )
+            *pmanager = NULL;
+    }
+    else
+    {
+        VFSManager * obj;
+
+        obj = calloc (1, sizeof (*obj));
+        if (obj == NULL)
+            rc = RC (rcVFS, rcMgr, rcConstructing, rcMemory, rcExhausted);
+        else
+        {
+            KRefcountInit (&obj->refcount, 1, kfsmanager_classname, "init", 
+                           kfsmanager_classname);
+
+            rc = KDirectoryNativeDir (&obj->cwd);
+            if (rc == 0)
+            {
+                rc = VPathMakeCurrentPath (&obj->cpath);
+                if ( rc == 0 )
+                {
+                    rc = KConfigMake (&obj->cfg, NULL);
+                    if ( rc == 0 )
+                    {
+                        rc = VFSManagerCaptureCurrentEncryptionKey ( obj );
+                        if ( rc == 0 )
+                        {
+                            rc = KCipherManagerMake (&obj->cipher);
+                            if ( rc == 0 )
+                            {
+
+                                rc = VFSManagerMakeResolver ( obj, &obj->resolver, obj->cfg );
+                                if ( rc != 0 )
+                                {
+                                    LOGERR ( klogWarn, rc, "could not build vfs-resolver" );
+                                    rc = 0;
+                                }
+
+                                rc = SRAPathMake ( &obj->srapath, obj->cwd );
+                                if ( rc != 0 )
+                                {
+                                    LOGERR ( klogWarn, rc, "could not build srapath manager" );
+                                    rc = 0;
+                                }
+
+                                *pmanager = singleton = obj;
+                                return rc;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        VFSManagerDestroy (obj);
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerGetCWD (const VFSManager * self, KDirectory ** cwd)
+{
+    rc_t rc;
+
+    if (cwd == NULL)
+        return RC (rcVFS, rcMgr, rcAccessing, rcParam, rcNull);
+
+    *cwd = NULL;
+
+    if (self == NULL)
+        return RC (rcVFS, rcMgr, rcAccessing, rcSelf, rcNull);
+
+    rc = KDirectoryAddRef ( self->cwd );
+    if (rc)
+        return rc;
+
+    *cwd = self->cwd;
+
+    return 0;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerGetSRAPath ( const VFSManager * self, struct SRAPath ** pmgr )
+{
+    if ( pmgr == NULL )
+        return RC ( rcVFS, rcMgr, rcAccessing, rcParam, rcNull );
+
+    *pmgr = NULL;
+
+    if ( self == NULL )
+        return RC ( rcVFS, rcMgr, rcAccessing, rcSelf, rcNull );
+
+    if ( self->srapath )
+    {
+        rc_t rc = SRAPathAddRef ( self->srapath );
+        if ( rc != 0 )
+            return rc;
+    }
+    *pmgr = self->srapath;
+    return 0;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerGetResolver ( const VFSManager * self, struct VResolver ** resolver )
+{
+    if ( resolver == NULL )
+        return RC ( rcVFS, rcMgr, rcAccessing, rcParam, rcNull );
+
+    *resolver = NULL;
+
+    if ( self == NULL )
+        return RC ( rcVFS, rcMgr, rcAccessing, rcSelf, rcNull );
+
+    if ( self->resolver )
+    {
+        rc_t rc = VResolverAddRef ( self->resolver );
+        if ( rc != 0 )
+            return rc;
+    }
+    *resolver = self->resolver;
+    return 0;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerGetKryptoPassword (const VFSManager * self,
+                                                char * password,
+                                                size_t max_size,
+                                                size_t * size)
+{
+    rc_t rc;
+
+    if (self == NULL)
+        rc = RC (rcVFS, rcMgr, rcAccessing, rcSelf, rcNull);
+
+    else if ((password == NULL) || (max_size == 0) || (size == NULL))
+        rc = RC (rcVFS, rcMgr, rcAccessing, rcParam, rcNull);
+
+    else
+        rc = get_config_password (self, password, max_size, size);
+
+    return rc;
+}
+
+
+#if 0 /* not using this now */
+LIB_EXPORT rc_t CC VFSManagerSetKryptoPassword (const VFSManager * self,
+                                                char * password,
+                                                size_t size)
+{
+    rc_t rc;
+
+    if (self == NULL)
+        rc = RC (rcVFS, rcMgr, rcAccessing, rcSelf, rcNull);
+
+    else if ((password == NULL) || (size == NULL))
+        rc = RC (rcVFS, rcMgr, rcAccessing, rcParam, rcNull);
+
+    else
+    {
+        KFile * pwfile;
+        size_t size;
+        char buffer [8192];
+        
+
+        rc = VFSManagerGetConfigPWFile (self, buffer, sizeof buffer, &size);
+        if (rc)
+            PLOGERR (klogErr,
+                     (klogErr,
+                      "failed to obtain configured path for password file "
+                      "'$(P)'", "P=%s", buffer));
+
+        else
+        {
+            VPath * vpath;
+
+            buffer[size] = '\0';
+
+            rc = VPathMake (&vpath, buffer);
+            if (rc)
+                PLOGERR (klogErr,
+                         (klogErr,
+                          "failed to create vpath for password file '$(P)'",
+                          "P=%s", buffer));
+
+            else
+            {
+                KPath * file;
+
+                rc = VFSManagerCreateFile (self, &file, false, 0600,
+                                           kcmInit|kcmParents, vpath);
+                if (rc)
+                    PLOGERR (klogErr,
+                             (klogErr,
+                              "failed to create password file '$(P)'",
+                              "P=%s", buffer));
+
+                else
+                {
+                    size_t writ;
+
+                    rc = KFileWriteAll (file, 0, password, size, &writ);
+                    if (rc)
+                        PLOGERR (klogErr,
+                                 (klogErr,
+                                  "failed to write to password file '$(P)'",
+                                  "P=%s", buffer));
+                    else
+                    {
+                        if (writ != size)
+                        {
+                            rc = KFileSetSize (file. 0);
+                            if (rc)
+                                PLOGERR (klogErr,
+                                         (klogErr,
+                                          "failed to emplty corrupt "
+                                          "password file '$(P)'",
+                                          "P=%s", buffer));
+
+                            rc = RC (rcVfs, rcMgr, rcWriting,
+                                     rcInsufficient);
+                        }
+                    }
+                    KFileRelease (file);
+
+                    if (rc)
+                    {
+                        rc_t orc;
+
+                        orc = KDirectoryRemove (self->cwd, force, buffer);
+                        if (orc)
+                            PLOGERR (klogErr,
+                                     (klogErr,
+                                      "failed to delete bad password file "
+                                      "'$(P)'", "P=%s", buffer));
+                    }
+                }
+                VPathRelease (vpath);
+            }
+        }
+    }
+
+    return rc;
+}
+#endif
+
+LIB_EXPORT rc_t CC VFSManagerUpdateKryptoPassword (const VFSManager * self, 
+                                                   const char * password,
+                                                   size_t size,
+                                                   char * pwd_dir,
+                                                   size_t pwd_dir_size)
+{
+    static const char temp_extension [] = ".tmp";
+    rc_t rc;
+
+    if (self == NULL)
+        rc = RC (rcVFS, rcEncryptionKey, rcUpdating, rcSelf, rcNull);
+
+    else if ((password == NULL) || (size == 0))
+        rc = RC (rcVFS, rcEncryptionKey, rcUpdating, rcParam, rcNull);
+
+    else if (size > VFS_KRYPTO_PASSWORD_MAX_SIZE)
+        rc = RC (rcVFS, rcEncryptionKey, rcUpdating, rcSize, rcExcessive);
+
+    else if ((string_chr (password, size, '\n') != NULL) ||
+             (string_chr (password, size, '\r') != NULL))
+        rc = RC (rcVFS, rcEncryptionKey, rcUpdating, rcEncryptionKey, rcInvalid);
+
+    else
+    {
+        size_t old_password_file_size;
+        char old_password_file [8193];
+        
+        rc = VFSManagerGetConfigPWFile (self, old_password_file,
+                                        sizeof old_password_file - 1,
+                                        &old_password_file_size);
+        if (rc) {
+            if (rc ==
+                SILENT_RC(rcKrypto, rcMgr, rcReading, rcBuffer, rcInsufficient))
+            {
+                rc =
+                    RC(rcVFS, rcEncryptionKey, rcUpdating, rcPath, rcExcessive);
+            }
+            LOGERR (klogErr, rc, "failed to obtain configured path for password file");
+        }
+
+        else if (old_password_file_size >= (sizeof old_password_file - 1))
+        {
+            rc = RC (rcVFS, rcEncryptionKey, rcUpdating, rcPath, rcExcessive);
+            PLOGERR (klogErr,
+                     (klogErr, rc, "configured path too long for function "
+                      "'$(P)' '${F}'", "P=%s,F=%s",
+                      old_password_file, __func__));
+        }
+        else
+        {
+            KPathType ftype;
+            bool old_exists;
+
+            old_password_file[old_password_file_size] = '\0';
+            ftype = KDirectoryPathType (self->cwd, old_password_file);
+
+            switch (ftype)
+            {
+            case kptNotFound:
+                old_exists = false;
+                break;
+
+            case kptBadPath:
+                rc = RC (rcVFS, rcEncryptionKey, rcUpdating, rcPath, rcInvalid);
+                break;
+
+            case kptFile:
+                old_exists = true;
+                break;
+
+            case kptDir:
+            case kptCharDev:
+            case kptBlockDev:
+            case kptFIFO:
+            case kptZombieFile:
+            case kptDataset:
+            case kptDatatype:
+                rc = RC (rcVFS, rcEncryptionKey, rcUpdating, rcPath, rcIncorrect);
+                break;
+
+            default:
+                rc = RC (rcVFS, rcEncryptionKey, rcUpdating, rcPath, rcCorrupt);
+                break;
+            }
+
+            if (rc)
+                PLOGERR (klogErr,
+                         (klogErr, rc, "cannot use configured path for "
+                          "password file '$(P)'", "P=%s", old_password_file));
+
+            else
+            {
+                VPath * vold;
+                size_t new_password_file_size;
+                char new_password_file [sizeof old_password_file + sizeof temp_extension];
+                size_t password_dir_size;
+                char password_dir [sizeof old_password_file];
+/*                 bool save_old_password; */
+                char * pc;
+
+                memcpy (password_dir, old_password_file, old_password_file_size);
+                memcpy (new_password_file, old_password_file, old_password_file_size);
+                memcpy (new_password_file + old_password_file_size, temp_extension, sizeof temp_extension);
+                new_password_file_size = old_password_file_size + sizeof temp_extension - 1;
+
+                pc = string_rchr (password_dir, old_password_file_size, '/');
+                if (pc == NULL)
+                {
+                    password_dir[0] = '.';
+                    pc = password_dir+1;
+                }
+                *pc = '\0';
+                password_dir_size = pc - password_dir;
+
+                if (pwd_dir && pwd_dir_size) {
+                    size_t n = string_copy(pwd_dir, pwd_dir_size,
+                                           password_dir, password_dir_size + 1);
+                    if (n >= pwd_dir_size) {
+                        int i = 0;
+                        size_t p = pwd_dir_size - 1;
+                        pwd_dir[p] = '\0';
+                        for (i = 0; i < 3; ++i) {
+                            if (p == 0)
+                            {   break; }
+                            pwd_dir[--p] = '.';
+                        }
+                        if (p != 0)
+                        {   pwd_dir[--p] = ' '; }
+                    }
+                }
+
+                rc = VPathMake (&vold, old_password_file);
+                if (rc)
+                    PLOGERR (klogErr,
+                             (klogErr, rc, "could not create vpath for "
+                              "password file '$(P)'", "P=%s",
+                              old_password_file));
+
+                else
+                {
+                    VPath * vnew;
+
+                    rc = VPathMake (&vnew, new_password_file);
+                    if (rc)
+                        PLOGERR (klogErr,
+                                 (klogErr, rc, "could not create vpath for "
+                                  "password file '$(P)'", "P=%s",
+                                  new_password_file));
+
+                    else
+                    {
+                        const KFile * fold = NULL;
+                        KFile * fnew = NULL;
+
+                        if (old_exists)
+                        {
+                            rc = VFSManagerOpenFileRead (self, &fold, vold);
+
+                            if (rc)
+                                PLOGERR (klogErr,
+                                         (klogErr, rc, "unable to open existing "
+                                          "password file '$(P)'", "P=%s",
+                                          old_password_file));
+                        }
+                        
+
+                        if (rc == 0)
+                        {
+                            rc = VFSManagerCreateFile (self, &fnew, false, 0600,
+                                                       kcmInit|kcmParents,
+                                                       vnew);
+                            if (rc)
+                                PLOGERR (klogErr,
+                                         (klogErr, rc, "unable to open temporary "
+                                          "password file '$(P)'", "P=%s",
+                                          new_password_file));
+
+                            else
+                            {
+                                uint64_t writ;
+                                size_t this_writ;
+
+                                rc = KFileWriteAll (fnew, 0, password, size, &this_writ);
+                                if (rc)
+                                    PLOGERR (klogErr,
+                                             (klogErr, rc, "unable to write "
+                                              "password to temporary password "
+                                              "file '$(P)'", "P=%s",
+                                              new_password_file));
+
+                                else if (this_writ != size)
+                                {
+                                    rc = RC (rcVFS, rcEncryptionKey, rcWriting,
+                                             rcFile, rcInsufficient);
+                                    PLOGERR (klogErr,
+                                             (klogErr, rc, "unable to write complete "
+                                              "password to temporary password "
+                                              "file '$(P)'", "P=%s",
+                                              new_password_file));
+                                }
+
+                                else
+                                {
+                                    writ = this_writ;
+
+                                    rc = KFileWriteAll (fnew, this_writ, "\n", 1, &this_writ);
+                                    if (rc)
+                                        PLOGERR (klogErr,
+                                                 (klogErr, rc, "unable to write "
+                                                  "password to temporary password "
+                                                  "file '$(P)'", "P=%s",
+                                                  new_password_file));
+
+                                    else if (this_writ != 1)
+                                    {
+                                        rc = RC (rcVFS, rcEncryptionKey, rcWriting,
+                                                 rcFile, rcInsufficient);
+                                        PLOGERR (klogErr,
+                                                 (klogErr, rc, "unable to write complete "
+                                                  "password to temporary password "
+                                                  "file '$(P)'", "P=%s",
+                                                  new_password_file));
+                                    }
+
+                                    else
+                                    {
+                                        bool do_rename;
+
+                                        do_rename = true;
+                                        ++writ;
+
+                                        if (old_exists)
+                                        {
+                                            uint64_t read;
+                                            size_t this_read;
+                                            char buffer [VFS_KRYPTO_PASSWORD_MAX_SIZE+4];
+
+                                            rc = KFileReadAll (fold, 0, buffer,
+                                                               sizeof buffer, &this_read);
+                                            if (rc)
+                                                ;
+
+                                            else
+                                            {
+                                                read = this_read;
+                                                /* look for duplicated password */
+                                                if (read > size)
+                                                {
+                                                    char cc;
+
+                                                    cc = buffer[size];
+                                                    if (((cc == '\n') || (cc == '\r')) &&
+                                                        (memcmp (buffer, password, size) == 0))
+                                                    {
+                                                        do_rename = false;
+                                                    }
+                                                }
+                                                if (read)
+                                                    rc = KFileWriteAll (fnew, writ, buffer, read, &this_writ);
+
+                                                if (rc)
+                                                    ;
+                                                else if (do_rename)
+                                                {
+                                                    writ += this_writ;
+
+                                                    do
+                                                    {
+                                                        rc = KFileReadAll (fold, read, buffer,
+                                                                           sizeof buffer, &this_read);
+                                                        if (rc)
+                                                            ;
+
+                                                        else if (this_read == 0)
+                                                            break;
+
+                                                        else
+                                                        {
+                                                            rc = KFileWriteAll (fnew, writ, buffer,
+                                                                                this_read, &this_writ);
+                                                            if (rc)
+                                                                ;
+
+                                                            else if (this_read != this_writ)
+                                                            {
+                                                                rc = RC (rcVFS, rcEncryptionKey, rcWriting,
+                                                                         rcFile, rcInsufficient);
+                                                                PLOGERR (klogErr,
+                                                                         (klogErr, rc,
+                                                                          "unable to write complete "
+                                                                          "password to temporary password "
+                                                                          "file '$(P)'", "P=%s",
+                                                                          new_password_file));
+                                                            }
+
+                                                            else
+                                                            {
+                                                                read += this_read;
+                                                                writ += this_writ;
+                                                            }
+                                                        }
+                                                    } while (rc == 0);
+                                                }
+                                            }
+                                            KFileRelease (fold);
+                                            fold = NULL;
+                                        }
+
+                                        KFileRelease (fnew);
+                                        fnew = NULL;
+
+                                        if (rc == 0)
+                                        {
+                                            if (do_rename)
+                                            {
+                                                rc = KDirectoryRename (self->cwd, true, 
+                                                                       new_password_file,
+                                                                       old_password_file);
+                                            }
+                                            else
+                                            {
+                                                KDirectoryRemove (self->cwd, true, new_password_file);
+                                            }
+
+#if !WINDOWS
+                                            if (rc == 0)
+                                            {
+                                                uint32_t access;
+
+                                                rc = KDirectoryAccess (self->cwd,
+                                                                       &access, password_dir);
+                                                if (rc)
+                                                    ;
+
+                                                else
+                                                {
+                                                    if (access & 0027)
+                                                        rc = RC (rcVFS, rcEncryptionKey, rcUpdating, rcDirectory, rcExcessive);
+                                                }
+                                            }
+#endif
+                                        }
+                                    }
+                                }
+                                KFileRelease (fnew);
+                            }
+                            KFileRelease (fold);
+                        }
+                        VPathRelease (vold);
+                    }
+                    VPathRelease (vnew);
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerGetCPath (const VFSManager * self, VPath ** cpath)
+{
+    rc_t rc;
+
+    if (cpath == NULL)
+        return RC (rcVFS, rcMgr, rcAccessing, rcParam, rcNull);
+
+    *cpath = NULL;
+
+    if (self == NULL)
+        return RC (rcVFS, rcMgr, rcAccessing, rcSelf, rcNull);
+
+    rc = VPathAddRef (self->cpath);
+    if (rc)
+        return rc;
+
+    *cpath = self->cpath;
+
+    return 0;
+}
+
+
+
+
+
+/*--------------------------------------------------------------------------
+ * KConfig
+ *  placing some KConfig code that relies upon VFS here
+ */
+
+
+/* ReadVPath
+ *  read a VPath node value
+ *
+ * self [ IN ] - KConfig object
+ * path [ IN ] - path to the node
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+LIB_EXPORT rc_t CC KConfigReadVPath ( struct KConfig const* self, const char* path, struct VPath** result )
+{
+    rc_t rc;
+
+    if ( result == NULL )
+        rc = RC ( rcKFG, rcNode, rcReading, rcParam, rcNull );
+    else
+    {
+        struct KConfigNode const *n;
+        rc = KConfigOpenNodeRead ( self, & n, path );
+        if ( rc == 0 )
+        {
+            rc = KConfigNodeReadVPath ( n, result );
+            KConfigNodeRelease ( n );
+            return rc;
+        }
+
+        * result = NULL;
+    }
+
+    return rc;
+}
+
+/* ReadVPath
+ *  read a VPath node value
+ *
+ * self [ IN ] - KConfigNode object
+ * result [ OUT ] - return value (rc != 0 if cannot be converted)
+ *
+ */
+LIB_EXPORT rc_t CC KConfigNodeReadVPath ( struct KConfigNode const *self, struct VPath** result )
+{
+    rc_t rc;
+
+    if ( result == NULL )
+        rc = RC ( rcKFG, rcNode, rcReading, rcParam, rcNull );
+    else
+    {
+        char buffer [ 4096 ];
+        size_t num_read, to_read;
+        rc = KConfigNodeRead ( self, 0, buffer, sizeof buffer, & num_read, & to_read );
+        if ( rc == 0 )
+        {
+            char *p;
+
+            if ( to_read == 0 && num_read < sizeof buffer )
+            {
+                buffer [ num_read ] = 0;
+                return VPathMake ( result, buffer );
+            }
+
+            p = malloc ( num_read + to_read + 1 );
+            if ( p == NULL )
+                rc = RC ( rcKFG, rcNode, rcReading, rcMemory, rcExhausted );
+            else
+            {
+                rc = KConfigNodeRead ( self, 0, p, num_read + to_read + 1, & num_read, & to_read );
+                if ( rc == 0 )
+                {
+                    p [ num_read ] = 0;
+                    rc = VPathMake ( result, p );
+                }
+
+                free ( p );
+                return rc;
+            }
+        }
+
+        * result = NULL;
+    }
+
+    return rc;
+}
+
+
+static rc_t VFSManagerResolveAcc( const VFSManager * self,
+                                  const struct VPath * source,
+                                  struct VPath ** path_to_build,
+                                  const struct KFile ** remote_file,
+                                  const struct VPath ** local_cache )
+{
+    rc_t rc;
+    
+    assert (self);
+    assert (source);
+    assert (path_to_build);
+    assert (remote_file);
+    assert (local_cache);
+
+    /* first try to find it localy */
+    rc = VResolverLocal ( self->resolver, source, (const VPath **)path_to_build );
+    if ( GetRCState( rc ) == rcNotFound )
+    {
+        /* if not found localy, try to find it remotely */
+        rc = VResolverRemote ( self->resolver, source, (const VPath **)path_to_build, remote_file );
+        if ( rc == 0 && remote_file != NULL && local_cache != NULL )
+        {
+            /* if found and the caller wants to know the location of a local cache file... */
+            uint64_t size_of_remote_file = 0;
+            if ( *remote_file != NULL )
+                rc = KFileSize ( *remote_file, &size_of_remote_file );
+            if ( rc ==  0 )
+                rc = VResolverCache ( self->resolver, *path_to_build, local_cache, size_of_remote_file );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t VFSManagerResolveLocal( const VFSManager * self,
+                                    const char * local_path,
+                                    struct VPath ** path_to_build )
+{
+    char buffer[ 4096 ];
+    size_t num_writ;
+    rc_t rc;
+
+    assert (self);
+    assert (local_path);
+    assert (path_to_build);
+
+    rc = string_printf ( buffer, sizeof buffer, &num_writ, "ncbi-file:%s", local_path );
+    if ( rc == 0 && num_writ > 0 )
+    {
+        rc = VPathMake ( path_to_build, buffer );
+    }
+    return rc;
+}
+
+static rc_t VFSManagerResolvePathOrAcc( const VFSManager * self,
+                                        const struct VPath * source,
+                                        struct VPath ** path_to_build,
+                                        const struct KFile ** remote_file,
+                                        const struct VPath ** local_cache,
+                                        bool resolve_acc )
+{
+    char buffer[ 4096 ];
+    size_t num_read;
+    rc_t rc = VPathReadPath ( source, buffer, sizeof buffer, &num_read );
+    if ( rc == 0 && num_read > 0 )
+    {
+        char * pos_of_slash = string_chr ( buffer, string_size( buffer ), '/' );
+        if ( pos_of_slash != NULL )
+        {
+            /* we can now assume that the source is a filesystem-path :
+               we build a new VPath and prepend with 'ncbi-file:' */
+            rc = VFSManagerResolveLocal( self, buffer, path_to_build );
+        }
+        else if ( resolve_acc )
+        {
+            /* we assume the source is an accession! */
+            rc = VFSManagerResolveAcc( self, source, path_to_build, remote_file, local_cache );
+            if ( GetRCState( rc ) == rcNotFound )
+            {
+                /* if we were not able to find the source as accession, we assume it is a local path */
+                rc = VFSManagerResolveLocal( self, buffer, path_to_build );
+            }
+        }
+        else
+        {
+            rc = RC ( rcVFS, rcMgr, rcAccessing, rcParam, rcInvalid );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t VFSManagerResolveRemote( const VFSManager * self,
+                                     struct VPath ** source,
+                                     struct VPath ** path_to_build,
+                                     const struct KFile ** remote_file,
+                                     const struct VPath ** local_cache )
+{
+    rc_t rc = 0;
+    *path_to_build = *source;
+    if ( local_cache != NULL && remote_file != NULL && self->resolver != NULL )
+    {
+
+/*        VFS_EXTERN rc_t CC VPathMakeString ( const VPath * self, const String ** uri ); */
+        char full_url[ 4096 ];
+        size_t num_read;
+        rc = VPathReadPath ( *source, full_url, sizeof full_url, &num_read );
+        if ( rc == 0 && num_read > 0 )
+        {
+            rc = KCurlFileMake ( remote_file, full_url, false );
+            if ( rc == 0 )
+            {
+                uint64_t size_of_remote_file = 0;
+                rc = KFileSize ( *remote_file, &size_of_remote_file );
+                if ( rc == 0 )
+                    rc = VResolverCache ( self->resolver, *source, local_cache, size_of_remote_file );
+            }
+        }
+    }
+    *source = NULL;
+    return rc;
+}
+
+/* DEPRECATED */
+LIB_EXPORT rc_t CC VFSManagerResolveSpec ( const VFSManager * self,
+                                           const char * spec,
+                                           struct VPath ** path_to_build,
+                                           const struct KFile ** remote_file,
+                                           const struct VPath ** local_cache,
+                                           bool resolve_acc )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+        rc = RC ( rcVFS, rcMgr, rcAccessing, rcSelf, rcNull );
+    else if ( spec == NULL || path_to_build == NULL )
+        rc = RC ( rcVFS, rcMgr, rcAccessing, rcParam, rcNull );
+    else if ( spec[ 0 ] == 0 )
+        rc = RC ( rcVFS, rcMgr, rcAccessing, rcParam, rcEmpty );
+    else
+    {
+        VPath * temp;
+        *path_to_build = NULL;
+        if ( local_cache != NULL )
+            *local_cache = NULL;
+        if ( remote_file != NULL ) 
+            *remote_file = NULL;
+        rc = VPathMake ( &temp, spec );
+        if ( rc == 0 )
+        {
+            VPUri_t uri_type;
+            rc = VPathGetScheme_t( temp, &uri_type );
+            if ( rc == 0 )
+            {
+                switch ( uri_type )
+                {
+                default                  : /* !! fall through !! */
+                case vpuri_invalid       : rc = RC ( rcVFS, rcMgr, rcAccessing, rcParam, rcInvalid );
+                                           break;
+
+                case vpuri_none          : /* !! fall through !! */
+                case vpuri_not_supported : rc = VFSManagerResolvePathOrAcc( self, temp, path_to_build, remote_file, local_cache, resolve_acc );
+                                           break;
+
+                case vpuri_ncbi_vfs      : /* !! fall through !! */
+                case vpuri_file          : *path_to_build = temp;
+                                           temp = NULL;
+                                           break;
+
+                case vpuri_ncbi_acc      : if ( resolve_acc )
+                                                rc = VFSManagerResolveAcc( self, temp, path_to_build, remote_file, local_cache );
+                                           else
+                                                rc = RC ( rcVFS, rcMgr, rcAccessing, rcParam, rcInvalid );
+                                           break;
+
+                case vpuri_http          : /* !! fall through !! */
+                case vpuri_ftp           : rc = VFSManagerResolveRemote( self, &temp, path_to_build, remote_file, local_cache );
+                                           break;
+
+                case vpuri_ncbi_legrefseq: /* ??? */
+                                           break;
+                }
+            }
+            if ( temp != NULL )
+                VPathRelease ( temp );
+        }
+    }
+    return rc;
+}
+
+
+
+#if 0
+static rc_t VFSManagerResolveSpecLocal( const VFSManager * self,
+                                        const VPath * vpath,
+                                        const KDirectory ** dir )
+{
+    char path[ 4096 ];
+    size_t num_read;
+    rc_t rc = VPathReadPath ( vpath, path, sizeof path, &num_read );
+    if ( rc == 0 && num_read > 0 )
+    {
+        const KFile * local_file = NULL;
+        /* it is a local file or directory... */
+        rc = VFSManagerOpenFileReadRegularFile( path, sizeof path, &local_file, self->cwd );
+        if ( rc == 0 )
+        {
+            bool was_encrypted = false;
+            /* handle encryption here */
+
+            /* it is possible to open it as a file: transform it now into a directory */
+            rc = TransformFileToDirectory ( self->cwd, local_file, dir,
+                                            vpath->path.addr, was_encrypted );
+        }
+        else
+        {
+            /* try to open it as a directory */
+            rc = KDirectoryOpenDirRead ( self->cwd, dir, false, "%s", path );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t VFSManagerResolveSpecRemote( const VFSManager * self,
+                                         const VPath * vpath,
+                                         const KFile * remote_file,
+                                         const VPath * local_cache,
+                                         const KDirectory ** dir )
+{
+    const KFile *temp_file;
+    rc_t rc;
+    if ( local_cache == NULL )
+        rc = KBufFileMakeRead ( &temp_file, remote_file, 128 * 1024 * 1024 );
+    else
+    {
+        char buffer[ 4096 ];
+        size_t num_read;
+        rc = VPathReadPath ( local_cache, buffer, sizeof buffer, &num_read );
+        if ( rc == 0 && num_read > 0 )
+            rc = KDirectoryMakeCacheTee ( self->cwd, &temp_file, remote_file, NULL,
+                                          DEFAULT_CACHE_BLOCKSIZE, DEFAULT_CACHE_CLUSTER,
+                                          false, "%s", buffer );
+    }
+    KFileRelease ( remote_file ); /* we can do that, because it is wrapped now */
+    if ( rc == 0 )
+    {
+        const char mountpointpath[] = "/";
+        const KDirectory * mountpoint;
+
+        rc = KQuickMountDirMake ( self->cwd, &mountpoint, remote_file,
+                                  mountpointpath, sizeof mountpointpath - 1, 
+                                  vpath->path.addr, vpath->path.size );
+        if ( rc != 0 )
+            PLOGERR ( klogErr, ( klogErr, rc, "error creating mount "
+                                 "'$(M)' for '$(F)", "M=%s,F=%S",
+                                 mountpointpath, &vpath->path ) );
+        else
+        {
+            bool was_encrypted = false;
+            /* handle encryption here */
+            rc = TransformFileToDirectory ( mountpoint, temp_file, dir,
+                                            vpath->path.addr,
+                                            was_encrypted );
+            KDirectoryRelease ( mountpoint );
+        }
+        /* release the temp_file after it was transformed into a directory? */
+        KFileRelease( temp_file );
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC VFSManagerResolveSpecIntoDir ( const VFSManager * self,
+                                                  const char * spec,
+                                                  const KDirectory ** dir,
+                                                  bool resolve_acc )
+{
+    rc_t rc;
+
+    if ( dir == NULL )
+        rc = RC ( rcVFS, rcMgr, rcAccessing, rcParam, rcNull );
+    else
+    {
+        VPath * vpath;
+        const KFile * remote_file;
+        const VPath * local_cache;
+
+        *dir = NULL;
+        rc = VFSManagerResolveSpec ( self, spec, &vpath, &remote_file, &local_cache, resolve_acc );
+        if ( rc == 0 )
+        {
+            if ( remote_file == NULL )
+                rc = VFSManagerResolveSpecLocal( self, vpath, dir );
+            else
+            {
+                rc = VFSManagerResolveSpecRemote( self, vpath, remote_file, local_cache, dir );
+                KFileRelease( remote_file );
+                if ( local_cache != NULL )
+                    VPathRelease( local_cache );
+            }
+
+            VPathRelease( vpath );
+        }
+    }
+    return rc;
+}
+#endif
+
diff --git a/libs/vfs/path-priv.h b/libs/vfs/path-priv.h
new file mode 100644
index 0000000..a4cd28d
--- /dev/null
+++ b/libs/vfs/path-priv.h
@@ -0,0 +1,115 @@
+/*===========================================================================
+*
+*                            Public Domain Notice
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_vfs_path_priv_libs_
+#define _h_vfs_path_priv_libs_
+
+#include <vfs/extern.h>
+#include <klib/defs.h>
+#include <vfs/path.h>
+#include <vfs/path-priv.h>
+#include <klib/text.h>
+#include <klib/refcount.h>
+#include <klib/container.h>
+
+#include <stdarg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef USE_VRESOLVER
+#define USE_VRESOLVER 1
+#endif
+
+#ifndef SUPPORT_FILE_URL
+#define SUPPORT_FILE_URL 1
+#endif
+
+#ifndef USE_EXPERIMENTAL_CODE
+#define USE_EXPERIMENTAL_CODE 1
+#endif
+
+#ifndef USE_VPATH_OPTIONS_STRINGS
+#define USE_VPATH_OPTIONS_STRINGS 0
+#endif
+
+#ifdef _DEBUGGING
+#define PATH_DEBUG(msg) DBGMSG(DBG_VFS,DBG_FLAG(DBG_VFS_PATH), msg)
+#else
+#define PATH_DEBUG(msg)
+#endif
+#define OFF_PATH_DEBUG(msg)
+
+
+typedef struct VPOption VPOption;
+struct VPOption
+{
+    BSTNode node;
+    VPOption_t name;
+    String value;
+/*     const char * value; */
+};
+
+struct VPath
+{
+#if USE_VPATH_OPTIONS_STRINGS
+    const VPath * root;
+
+    KRefcount refcount;
+
+    String fullpath;
+
+    String scheme;
+
+
+#else
+    const VPath * root;
+    KRefcount refcount;
+    String path;
+    BSTree options;   /* query section of an uri; maybe set other ways as well. */
+    char * query;
+    char * fragment;
+    size_t alloc_size;  /* how much extra space allocated for a path too long for the built in buffer */
+    size_t asciz_size;  /* doubles as allocated size -1 if less than the size of the buffer below */
+    VPUri_t scheme;
+    char * storage;
+#endif
+};
+
+
+/* not externally callable */
+rc_t CC VPathTransformSysPath (VPath * self);
+rc_t VPathTransformPathHier (char ** uri_path);
+
+rc_t VPathInitAuthority (VPath * self, char ** next);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_vfs_path_priv_ */
diff --git a/libs/vfs/path.c b/libs/vfs/path.c
new file mode 100644
index 0000000..ba9591d
--- /dev/null
+++ b/libs/vfs/path.c
@@ -0,0 +1,2457 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <vfs/extern.h>
+#include <os-native.h>
+#include <vfs/path.h>
+#include <vfs/manager.h>
+#include <vfs/resolver.h>
+
+#include "path-priv.h"
+
+#include <sra/srapath.h> /* this only looks like its a module problem */
+#include <kfs/directory.h>
+#include <klib/refcount.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/out.h>
+#include <klib/log.h>
+#include <klib/debug.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <sysalloc.h>
+#include <ctype.h>
+#include <assert.h>
+
+rc_t VPOptionMake (VPOption ** new_obj, VPOption_t name, const char * value, size_t size)
+{
+    VPOption * obj;
+
+    assert (new_obj);
+
+    obj = malloc (sizeof (*obj));
+    if (obj == NULL)
+        return RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
+
+    obj->name = name;
+    StringInit (&obj->value, value, size, string_len (value, size));
+    *new_obj = obj;
+    return 0;
+}
+
+void CC VPOptionWhack (BSTNode * self, void * ignored)
+{
+    free (self);
+}
+
+int CC VPOptionCmp ( const void * item, const BSTNode * n )
+{
+    VPOption_t o = (VPOption_t)(size_t)item;
+    const VPOption * b = (const VPOption *)n;
+
+    return o - b->name;
+}
+
+int CC VPOptionSort ( const BSTNode * item, const BSTNode * n )
+{
+    const VPOption * a = (const VPOption *)item;
+    const VPOption * b = (const VPOption *)n;
+
+    return a->name - b->name;
+}
+
+
+#if 0
+static
+rc_t VPathMakeCanon (VPath * self)
+{
+    char * low;  /* 'root' location in path */
+    char * dst;  /* target reference for removing . and .. nodes */
+    char * last; /* '/' at end of previous node */
+    char * lim;  /* '\0' at end of the path string coming in */
+
+
+    end = self->path.addr + self->path.size;
+    low = self->path.addr;
+    if (low[1] == '/') /* path starts with // which we allow in windows */
+        ++low;
+    dst = last = low;
+
+    for (;;)
+    {
+        char * src; /* '/' or '\0' at end of this path node */
+
+        src = strchr (prev + 1, '/');
+        if (src == NULL)
+            src = lim;
+
+        /* detect special sequences based on length of node */
+        switch (src-last)
+        {
+        case 1: /* an empty node name - only allowed in the beginning */
+            last = src;  /* skip over */
+            if (src != lim)
+                continue;
+            break;
+        case 2:
+            if (last[1] == '.')
+            {
+                last = src;  /* skip over */
+                if (src != lim)
+                    continue;
+            }
+            break;
+
+        case 3:
+            if ((last[1] == '.') && (last[2] == '.'))
+            {
+                /* remove previous node name */
+                dst[0] = '\0';
+                dst = strrchr (low, '/');
+                if ((dst == NULL) || (dst < low))
+                    return RC (rcFS, rcPath, rcAccessing, rcPath, rcInvalid);
+
+                last = src;
+                if (src != lim)
+                    continue;
+            }
+            break;
+        }
+
+        assert (src >= last);
+        if (dst != last)
+            memmove (dst, last, src-last);
+    }
+}
+#endif
+/* Destroy
+ */
+rc_t VPathDestroy (const VPath * cself)
+{
+    if (cself)
+    {
+        VPath * self = (VPath*)cself;
+        PATH_DEBUG (("-----\n%s: %p %p\n\n", __func__, cself, cself->storage ));
+        BSTreeWhack (&self->options, VPOptionWhack, NULL);
+        free (self->storage);
+        free (self);
+    }
+    return 0;
+}
+
+
+static const char class_name[] = "VPath";
+
+/* AddRef
+ *  creates a new reference
+ *  ignores NULL references
+ */
+LIB_EXPORT rc_t CC VPathAddRef ( const VPath *self )
+{
+    if ( self != NULL )
+    {
+        switch (KRefcountAdd (&self->refcount, class_name))
+        {
+        case krefLimit:
+        case krefNegative:
+            return RC (rcFS, rcPath, rcAttaching, rcRange, rcInvalid);
+        }
+    }
+    return 0;
+}
+
+
+/* Release
+ *  discard reference to file
+ *  ignores NULL references
+ */
+LIB_EXPORT rc_t CC VPathRelease ( const VPath *self )
+{
+    if ( self != NULL )
+    {
+        switch (KRefcountDrop (&self->refcount, class_name))
+        {
+        case krefWhack:
+            VPathDestroy (self);
+            break;
+        case krefLimit:
+        case krefNegative:
+            return RC (rcFS, rcPath, rcReleasing, rcRange, rcInvalid);
+        }
+    }
+    return 0;
+}
+
+
+/* not fully reselient to bad input */
+static __inline__
+char decode_nibble (char c)
+{
+    if ((c >= '0') && (c <= '9'))
+        return (c - '0');
+    if ((c >= 'a') && (c <= 'z'))
+        return (c - 'a');
+    if ((c >= 'A') && (c <= 'Z'))
+        return (c - 'A');
+    return (0);
+}
+
+
+static __inline__
+bool string_decode (char * p)
+{
+    char * q;
+    size_t limit;
+    size_t ix;
+
+    q = p;
+    limit = string_size (p);
+
+    for (ix = 0; ix < limit; ++ix)
+    {
+        if (p[0] == '%')
+        {
+            if ((ix + 2 > limit) || ! isxdigit (p[1]) || ! isxdigit (p[2]))
+                return false;
+            *q = decode_nibble (*++p) << 4;
+            *q += decode_nibble (*++p);
+            
+        }
+        else if (q != p)
+            *q = *p;
+        ++p;
+        ++q;
+    }
+    if (p != q)
+        *q = '\0';
+    return true;
+}
+
+
+#if 0
+static __inline__
+rc_t StringDecode (String * self)
+{
+    size_t limit;
+    size_t ix;
+    char * p;
+    char * q;
+
+    p = q = (char *)self->addr;
+    limit = self->size;
+    for (ix = 0; ix < limit; ++ix)
+    {
+        if (p[0] == '%')
+        {
+            if ((ix + 2 > limit) || ! isxdigit (p[1]) || ! isxdigit (p[2]))
+                return RC (rcFS, rcPath, rcDecoding, rcPath, rcInvalid);
+            *q = decode_nibble (p[1]) << 4;
+            *q += decode_nibble (p[2]);
+        }
+        else if (q != p)
+            *q = *p;
+        ++p;
+        ++q;
+    }
+    if (p != q)
+    {
+        *q = '\0';
+        self->size = q - self->addr;
+        self->len = string_len (self->addr, self->size);
+    }
+    return 0;
+}
+#endif
+
+/*
+ * Coded against the ABNF from RFC 3987 International Resource Identifiers and
+ * RFC 3986 Universal Resource Identifiers
+ */
+
+static __inline__
+bool is_sub_delim (int ch)
+{
+    switch (ch)
+    {
+    case '!': case '$': case '&': case '\'':
+    case '(': case ')': case '*': case '+':
+    case ',': case ';': case '=':
+        return true;
+    default:
+        return false;
+    }
+}
+
+
+static __inline__
+bool is_gen_delim (int ch)
+{
+    switch (ch)
+    {
+    case ':': case '/': case '?': case '#': case '[': case ']': case '@':
+        return true;
+    default:
+        return false;
+    }
+}
+
+
+static __inline__
+bool is_reserved (int ch)
+{
+    return is_gen_delim (ch) || is_sub_delim (ch);
+}
+
+
+static __inline__
+bool is_unreserved (int ch)
+{
+    return (isalnum (ch) || /* ALPHA and DIGIT */
+            (ch == '-') ||
+            (ch == '.') ||
+            (ch == '_') ||
+            (ch == '~'));
+}
+
+
+static __inline__
+bool is_pct_encoded (const char * str)
+{
+    return (
+        (str[0] == '%') &&
+        (isxdigit (str[1])) &&
+        (isxdigit (str[2])));
+}
+
+
+static __inline__
+const char * eat_dec_octet (const char * str)
+{
+    /* not a number */
+    if (! isdigit (str[0]))
+        return str;
+
+    /* 0-9 single digit */
+    if (! isdigit (str[1]))
+        return str+1;
+
+    /* no leading zeroes */
+    if (str[0] == '0')
+        return str;
+
+    /* 10-99 */
+    if (! isdigit (str[2]))
+        return str+2;
+
+    /* 1000 and up */
+    if (isdigit (str[2]))
+        return str;
+
+    /* 100-199 */
+    if (str[0] == '1')
+        return str+3;
+
+    /* 300-999 */
+    if (str[0] != '2')
+        return str;
+
+    /* 200-249 */
+    if (str[1] < '5')
+        return str+2;
+
+    /* 260-299 */
+    if (str[1] > '5')
+        return str;
+
+    /* 256-259 */
+    if (str[2] > '5')
+        return str;
+
+    /* 250-255 */
+    return str+2;
+}
+
+
+static __inline__
+const char * eat_IPv4address (const char * str)
+{
+    const char * t0;
+    const char * t1;
+
+    t0 = str;
+
+    t1 = eat_dec_octet (t0);
+    if (t1 == t0)
+        return str;
+
+    if (*t1 != '.')
+        return str;
+
+    t0 = t1 + 1;
+
+    t1 = eat_dec_octet (t0);
+    if (t1 == t0)
+        return str;
+
+    if (*t1 != '.')
+        return str;
+
+    t0 = t1 + 1;
+
+    t1 = eat_dec_octet (t0);
+    if (t1 == t0)
+        return str;
+
+    if (*t1 != '.')
+        return str;
+
+    t0 = t1 + 1;
+
+    t1 = eat_dec_octet (t0);
+    if (t1 == t0)
+        return str;
+
+    return t1;
+}
+
+
+static __inline__
+const char * eat_IPv6address (const char * str)
+{
+    /* not going there yet */
+    return str;
+}
+
+
+
+
+static __inline__
+bool is_scheme_char (int ch)
+{
+    return (isalnum (ch) ||
+            (ch == '+') ||
+            (ch == '-') ||
+            (ch == ','));
+}
+
+
+static __inline__
+bool is_scheme (const char * str)
+{
+    if ( !isalpha (*str++))
+        return false;
+    while (*str)
+        if ( ! is_scheme_char (*str++))
+            return false;
+    return true;
+}
+
+
+static __inline__
+bool is_iprivate (int ch )
+{
+    return (((ch >= 0x00E000) && (ch <= 0x00F8FF)) ||
+            ((ch >= 0x0F0000) && (ch <= 0x0FFFFD)) ||
+            ((ch >= 0x100000) && (ch <= 0x10FFFD)));
+}
+
+
+static __inline__
+bool is_ucschar (int ch)
+{
+    return (((ch >= 0xA0)   && (ch <= 0xD7FF)) ||
+            ((ch >= 0xF900) && (ch <= 0xFDCF)) ||
+            ((ch >= 0xFDF0) && (ch <= 0xFFEF)) ||
+            ((ch >= 0x10000) && (ch <= 0x1FFFD)) ||
+            ((ch >= 0x20000) && (ch <= 0x2FFFD)) ||
+            ((ch >= 0x30000) && (ch <= 0x3FFFD)) ||
+            ((ch >= 0x40000) && (ch <= 0x4FFFD)) ||
+            ((ch >= 0x50000) && (ch <= 0x5FFFD)) ||
+            ((ch >= 0x60000) && (ch <= 0x6FFFD)) ||
+            ((ch >= 0x70000) && (ch <= 0x7FFFD)) ||
+            ((ch >= 0x80000) && (ch <= 0x8FFFD)) ||
+            ((ch >= 0x90000) && (ch <= 0x9FFFD)) ||
+            ((ch >= 0xA0000) && (ch <= 0xAFFFD)) ||
+            ((ch >= 0xB0000) && (ch <= 0xBFFFD)) ||
+            ((ch >= 0xC0000) && (ch <= 0xCFFFD)) ||
+            ((ch >= 0xD0000) && (ch <= 0xDFFFD)) ||
+            ((ch >= 0xE0000) && (ch <= 0xEFFFD)));
+}
+
+static __inline__
+bool is_iunreserved (int ch)
+{
+    return is_unreserved (ch) || is_ucschar (ch);
+}
+
+
+static __inline__
+bool is_ipchar (int ch)
+{
+    return is_iunreserved (ch) || is_sub_delim (ch) || 
+        (ch == ':') || (ch == '@');
+}
+
+
+static __inline__
+bool is_query (const char * str)
+{
+    for ( ; *str; ++str)
+    {
+        if (! is_ipchar (*str) &&
+            ! is_iprivate (*str) &&
+            (*str != '/') &&
+            (*str != '?'))
+        {
+            return false;
+        }
+    }
+    return true;
+}
+
+
+static __inline__
+bool is_fragment (const char * str)
+{
+    for ( ; *str; ++str)
+    {
+        if (! is_ipchar (*str) &&
+            ! is_sub_delim (*str) &&
+            (*str != '/') &&
+            (*str != '?'))
+        {
+            return false;
+        }
+    }
+    return true;
+}
+
+
+#if 0
+static __inline__
+bool is_isegment (const char * str, size_t sz)
+{
+    const char * end = str + sz;
+    size_t ix;
+    int cnt;
+
+    for (ix = 0; ix < sz; ix += cnt)
+    {
+        uint32_t ch;
+        cnt = utf8_utf32 (&ch, str + ix, end);
+        if (cnt <= 0)
+            return false;
+        if ( ! is_ipchar (ch))
+            return false;
+    }
+    return true;
+}
+#endif
+
+
+static __inline__
+const char * eat_iuserinfo (const char * str)
+{
+    for (;;++str)
+    {
+        if (is_iunreserved (*str))
+            ;
+        else if (is_sub_delim (*str))
+            ;
+        else if (*str != ':')
+            break;
+    }
+    return str;
+}
+
+
+static __inline__
+const char * eat_ireg_name (const char * str)
+{
+    for (;;++str)
+    {
+        if (is_iunreserved (*str))
+            ;
+        else if (is_sub_delim (*str))
+            ;
+        else
+            break;
+    }
+    return str;
+}
+
+
+static __inline__
+const char * eat_port (const char * str)
+{
+    while (isdigit (*str))
+        ++str;
+    return str;
+}
+
+
+static __inline__
+const char * eat_ihost (const char * str)
+{
+    /* not doing ip addresses yet */
+
+    return eat_ireg_name (str);
+}
+
+
+static __inline__
+const char * eat_iuserinfo_at (const char * str)
+{
+    const char * temp = eat_iuserinfo (str);
+    if (temp == NULL)
+        return temp;
+    if (*++temp != '@')
+        return NULL;
+    return temp;
+}
+
+
+static __inline__
+const char * eat_iauthority (const char * str)
+{
+    const char * temp;
+
+    temp = eat_iuserinfo_at (str);
+
+    if (temp != NULL)
+        str = temp;
+
+    temp = eat_ihost (str);
+    if (temp == NULL)
+        return false;
+    str = temp;
+
+    if (*str == ':')
+        return eat_port (str+1);
+
+    return str;
+}
+
+
+static __inline__
+const char * eat_file_iauthority (const char * str)
+{
+    const char * temp;
+
+    temp = eat_ihost (str);
+    if (temp == NULL)
+        return false;
+    return temp;
+}
+
+
+static __inline__
+const char * eat_isegment (const char * str)
+{
+    while (*str)
+    {
+        if (is_ipchar (*str))
+        {
+            ++str;
+            continue;
+        }
+        if (is_pct_encoded (str))
+        {
+            str += 3;
+            continue;
+        }
+        else
+            break;
+    }
+    return str;
+}
+
+
+static __inline__
+const char * eat_isegment_nz (const char * str)
+{
+    const char * temp = eat_isegment (str);
+    if (temp == str)
+        return NULL;
+    return temp;
+}
+
+
+#if 0
+static __inline__
+const char * eat_isegment_nz_nc (const char * str)
+{
+    const char * temp = str;
+
+    while (is_iunreserved (*str) ||
+           is_sub_delim (*str) ||
+           (*str == '@'))
+        ++str;
+    if (temp == str)
+        return false;
+    return str;
+}
+#endif
+
+
+#if 0
+static __inline__
+bool is_isegment_nz (const char * str, size_t sz)
+{
+    if (sz == 0)
+        return false;
+    return is_isegment (str, sz);
+}
+#endif
+
+
+#if 0
+static __inline__
+bool is_isegment_nz_nc (const char * str, size_t sz)
+{
+    if (sz == 0)
+        return false;
+    if (string_chr (str, sz, ':') != NULL)
+        return false;
+    return is_isegment (str, sz);
+}
+#endif
+
+
+#if 0
+static __inline__
+bool is_ireg_name (const char * str, size_t sz)
+{
+    const char * end = str + sz;
+    size_t ix;
+    int cnt;
+
+    for (ix = 0; ix < sz; ix += cnt)
+    {
+        uint32_t ch;
+        cnt = utf8_utf32 (&ch, str + ix, end);
+        if (cnt <= 0)
+            return false;
+        if ( ! is_iunreserved (ch) &&
+             ! is_sub_delim (ch))
+            return false;
+    }
+    return true;
+}
+#endif
+
+
+static __inline__
+bool is_ipath_rootless (const char * str);
+
+static __inline__
+bool is_ipath_absolute (const char * str)
+{
+    if (*str++ != '/')
+        return false;
+    return is_ipath_rootless (str);
+}
+
+
+static __inline__
+bool is_ipath_empty (const char * str)
+{
+    return (*str == '\0');
+}
+
+
+static __inline__
+bool is_ipath_abempty (const char * str)
+{
+    for (;;)
+    {
+        if (is_ipath_empty (str))
+            return true;
+
+        else if (*str++ != '/')
+            return false;
+
+        else
+        {
+            const char * temp = eat_isegment (str);
+            if (temp == NULL)
+                return false;
+            str = temp;
+        }
+    }
+}
+
+
+static __inline__
+bool is_ipath_rootless (const char * str)
+{
+    str = eat_isegment_nz (str);
+    if (str == NULL)
+        return false;
+
+    return is_ipath_abempty (str);
+}
+
+
+#if 0
+static __inline__
+bool is_ipath_noscheme (const char * str)
+{
+    str = eat_isegment_nz_nc (str);
+
+    if (str == NULL)
+        return false;
+
+    return is_ipath_abempty (str);
+}
+#endif
+
+
+static __inline__
+bool is_hier (const char * str)
+{
+    if ((str[0] == '/') && (str[1] == '/'))
+    {
+        const char * temp = eat_iauthority (str);
+        if (temp != NULL)
+            if (is_ipath_abempty (temp))
+                return true;
+    }
+    if (is_ipath_absolute (str))
+        return true;
+
+    if (is_ipath_rootless (str))
+        return true;
+
+    if (is_ipath_empty (str))
+        return true;
+
+    return false;
+}
+
+
+#if 0
+/*
+ * confusion and ambiguity in the world of RFCs...
+ *  We're gonna go with the RFC-3987 definition of ihost as ireg-name
+ */
+static __inline__
+const char * eat_hostname (const char * str)
+{
+    /* -----
+     * hostname = ireg_name
+     * ireg_name = *(iunreserved / pct_encoded / sub_delim
+     *
+     * legal terminators are NUL or '/'
+     */
+    while (is_iunreserved (*str) &&
+           is_sub_delim (*str))
+        ++str;
+    switch (*str)
+    {
+    case '\0':
+    case '/':
+        return str;
+    default:
+        return NULL;
+    }
+}
+#endif
+#if 0
+/* -----
+ * number.number.number.numer 
+ * does not range check number
+ * sigh...
+ */
+static __inline__
+const char * eat_ipv6 (const char * str)
+{
+#if 1
+    return NULL; /* not gonna do them yet */
+#else
+    const char * temp;
+    int digits;
+    int colons;
+    int doublecolons = 0;
+
+    /* non empty first part */
+    for (digits = 0; isxdigit (*str); ++str)
+        ;
+    if ((digits == 0) || (digits > 4))
+        return NULL;
+
+    if (*str++ != ':')
+        return NULL;
+
+    for (digits = 0; isxdigit (*str); ++str)
+        ;
+    if (digits == 0)
+        doublecolons = 1;
+    else if (digits > 4)
+        return NULL;
+
+    for (digits = 0; isxdigit (*str); ++str)
+        ;
+    if (digits == 0)
+    {
+        if (doublecolons > 0)
+            return NULL;
+        doublecolons = 1;
+    }
+    else if (digits > 4)
+        return NULL;
+
+    for (digits = 0; isxdigit (*str); ++str)
+        ;
+    if (digits == 0)
+    {
+        if (doublecolons > 0)
+            return NULL;
+        doublecolons = 1;
+    }
+    else if (digits > 4)
+        return NULL;
+
+/* ... eeek! */
+    return NULL;
+#endif
+}
+#endif
+#if 0
+/* -----
+ * number.number.number.numer 
+ * does not range check number
+ */
+static __inline__
+const char * eat_ipv4 (const char * str)
+{
+    do
+        if (! isdigit(*str++))
+            return NULL;
+    while (*str != '.');
+    ++str;
+    do
+        if (! isdigit(*str++))
+            return NULL;
+    while (*str != '.');
+    ++str;
+    do
+        if (! isdigit(*str++))
+            return NULL;
+    while (*str != '.');
+    ++str;
+    do
+        if (! isdigit(*str++))
+            return NULL;
+    while (isdigit (*str));
+    return str;
+}
+#endif
+#if 0
+static __inline__
+const char * eat_hostnumber (const char * str)
+{
+    const char * temp;
+
+    temp = eat_ipv4 (str);
+    if (temp == NULL)
+        temp = eat_ipv6 (str);
+    return temp;
+}
+#endif
+#if 0
+static __inline__
+const char * eat_host (const char * str)
+{
+    const char * temp;
+
+    temp = eat_hostnumber (str);
+    if (temp == NULL)
+        temp = eat_hostname (str);
+    return temp;
+}
+#endif
+
+
+#if 0
+static __inline__
+const char * eat_fsegment (const char * str)
+{
+    for (;;++str)
+    {
+        if ((*str == '/') ||
+            (*str == '\0'))
+        {
+            break;
+        }
+        else if ( ! is_ipchar (*str))
+            return NULL;
+    }
+    return str;
+}
+#endif
+
+
+/* fpath = fsegment *[ "/" fsegment ] */
+#if 0
+static __inline__
+bool is_fpath (const char * str)
+{
+    for (;;)
+    {
+        str = eat_fsegment (str);
+        if (str == NULL)
+            return false;
+        if (*str == '\0')
+            return true;
+        if (*str != '/')
+            return false;
+        ++str;
+    }
+    return false; /* unreachable really */
+}
+#endif
+
+
+static __inline__
+bool is_file_hier (const char * str)
+{
+#if 0
+    const char * temp;
+    /* 
+     * we'll expect the "file://host/fpath"
+     * but also accept the inccorect "file:/fpath"
+     */
+    if (*str++ != '/')
+        return false;
+
+    if (*str == '/') /* must be correct version */
+    {
+        ++str;
+        temp = eat_host (str);
+        if (temp == NULL)
+            return false;
+        str = temp;
+        if (*str++ != '/')
+            return false;
+    }
+    return is_fpath (str);
+#else
+#if 0
+    if ((str[0] == '/') && (str[1] == '/'))
+    {
+        const char * temp = eat_file_iauthority (str);
+        if (temp != NULL)
+            if (is_ipath_abempty (temp))
+                return true;
+    }
+    if (is_ipath_absolute (str))
+        return true;
+
+    if (is_ipath_rootless (str))
+        return true;
+
+    if (is_ipath_empty (str))
+        return true;
+
+    return false;
+#else
+    /* by this point we aren't limited to ASCII  leave it for KFS*/
+    return true;
+#endif
+#endif
+}
+
+
+static __inline__
+bool is_file_query (const char * str)
+{
+    return (*str == '\0');
+
+}
+
+
+static __inline__
+bool is_file_fragment (const char * str)
+{
+    return (*str == '\0');
+}
+
+
+static __inline__
+bool is_kfs_hier (const char * str)
+{
+    return is_file_hier (str);
+}
+
+
+static __inline__
+bool is_acc_hier (const char * str)
+{
+    /* not really doing this now */
+    return true;
+}
+
+
+static __inline__
+const char * eat_kfs_query (const char * str, VPOption ** opt)
+{
+    /*
+     *    query_entry = "encrypt" / "enc" / ( "pwfile=" hier-part ) / ( "pwfd=" fd )
+     */
+    assert (str);
+    assert (opt);
+
+    switch (tolower (str[0]))
+    {
+    case 'e':
+        if (strncasecmp ("nc", str+1, 2) == 0)
+        {
+            const char * temp = NULL;
+
+            if ((str[3] == '\0') || (str[3] == '&'))
+                temp =  str + 3;
+
+            else if ((strncasecmp ("rypt", str+3, 4) == 0) && 
+                     ((str[7] == '\0') || (str[7] == '&')))
+                temp = str + 7;
+
+            if (temp)
+            {
+                VPOption * o;
+                rc_t rc;
+
+                rc = VPOptionMake (&o, vpopt_encrypted, temp, 0);
+                if (rc)
+                    return false;
+                *opt = o;
+                return temp;
+            }
+        }
+        break;
+
+    case 'p':
+        if (strncasecmp ("wfile=", str + 1, sizeof ("wfile=") - 1) == 0)
+        {
+            const char * temp1 = str + 1 + sizeof ("wfile=") - 1;
+            const char * temp2 = temp1;
+
+            while ((*temp1 != '\0') && (*temp1 != '&'))
+                ++temp1;
+            if (temp1 != temp2)
+            {
+                VPOption * o;
+                rc_t rc;
+
+                rc = VPOptionMake (&o, vpopt_pwpath, temp2, temp1-temp2);
+                if (rc)
+                    return false;
+                *opt = o;
+                return temp1;
+            }
+            break;
+        }
+        if (strncasecmp ("wfd=", str + 1, sizeof ("wfd=") - 1) == 0)
+        {
+            const char * temp1 = str + 1 + sizeof ("wfd=") - 1;
+            const char * temp2 = temp1;
+            while (isdigit(*temp1))
+                ++temp1;
+            if (temp1 == temp2)
+                break;
+            if ((*temp1 == '\0') || (*temp1 == '&'))
+            {
+                VPOption * o;
+                rc_t rc;
+
+                rc = VPOptionMake (&o, vpopt_pwfd, temp2, temp1-temp2);
+                if (rc)
+                    return false;
+                *opt = o;
+                return temp1;
+            }
+        }
+        break;
+    case 'r':
+        if (strncasecmp ("eadgroup=", str + 1, sizeof ("eadgroup=") - 1) == 0)
+        {
+            const char * temp1 = str + 1 + sizeof ("eadgroup=") - 1;
+            const char * temp2 = temp1;
+            while (isprint(*temp1))
+                ++temp1;
+            if (temp1 == temp2)
+                break;
+            if ((*temp1 == '\0') || (*temp1 == '&'))
+            {
+                VPOption * o;
+                rc_t rc;
+
+                rc = VPOptionMake (&o, vpopt_readgroup, temp2, temp1-temp2);
+                if (rc)
+                    return false;
+                *opt = o;
+                return temp1;
+            }
+        }
+        break;
+    case 't':
+        if (strncasecmp ("emporary_pw_hack=", str + 1, sizeof ("emporary_pw_hack=") - 1) == 0)
+        {
+            const char * temp1 = str + 1 + sizeof ("emporary_pw_hack=") - 1;
+            const char * temp2 = temp1;
+            while (isalnum(*temp1))
+                ++temp1;
+            if (temp1 == temp2)
+                break;
+            if ((*temp1 == '\0') || (*temp1 == '&'))
+            {
+                VPOption * o;
+                rc_t rc;
+
+                rc = VPOptionMake (&o, vpopt_temporary_pw_hack, temp2, temp1-temp2);
+                if (rc)
+                    return false;
+                *opt = o;
+                return temp1;
+            }
+        }
+        else if (strncasecmp ("ic=", str + 1, sizeof ("ic=") - 1) == 0)
+        {
+            const char * temp1 = str + 1 + sizeof ("ic=") - 1;
+            const char * temp2 = temp1;
+            while ( * temp1 != 0 && * temp1 != '&' )
+                ++temp1;
+            if (temp1 == temp2)
+                break;
+            if ((*temp1 == '\0') || (*temp1 == '&'))
+            {
+                VPOption * o;
+                rc_t rc;
+
+                rc = VPOptionMake (&o, vpopt_gap_ticket, temp2, temp1-temp2);
+                if (rc)
+                    return false;
+                *opt = o;
+                return temp1;
+            }
+        }
+        break;
+    case 'v':
+        if (strncasecmp ("db-ctx=", str + 1, sizeof ("db-ctx=") - 1) == 0)
+        {
+            const char * temp1 = str + 1 + sizeof ("db-ctx=") - 1;
+            const char * temp2 = temp1;
+            while (isalnum(*temp1))
+                ++temp1;
+            if (temp1 == temp2)
+                break;
+            if ((*temp1 == '\0') || (*temp1 == '&'))
+            {
+                VPOption * o;
+                rc_t rc;
+
+                rc = VPOptionMake (&o, vpopt_vdb_ctx, temp2, temp1-temp2);
+                if (rc)
+                    return false;
+                *opt = o;
+                return temp1;
+            }
+        }
+        break;
+    }
+    PATH_DEBUG (("%s: failed '%s'\n",__func__,str));
+    return NULL;
+}
+
+
+static __inline__
+bool is_kfs_query (const char * str, BSTree * tree)
+{
+    /* 
+     *    query       = query_entry [ * ( "&" query_entry ) ]
+     *
+     *    query_entry = "encrypt" / "enc" / ( "pwfile=" hier-part ) / ( "pwfd=" fd )
+     */
+    const char * temp;
+
+    if (*str == '\0')
+        return true;
+
+    for (;;)
+    {
+        VPOption * o = NULL;
+
+        /* this returns an allocation */
+        temp = eat_kfs_query (str, &o);
+        if ( o == NULL )
+            return false;
+        if ( temp == NULL )
+        {
+            VPOptionWhack ( & o -> node, NULL );
+            return false;
+        }
+
+        switch ( o -> name )
+        {
+        case vpopt_pwpath:
+        case vpopt_pwfd:
+            /* can only have one of these */
+            if ( BSTreeInsertUnique ( tree, &o->node, NULL, VPOptionSort ) != 0)
+            {
+                VPOptionWhack ( & o -> node, NULL );
+                return false;
+            }
+            break;
+        case vpopt_temporary_pw_hack:
+        case vpopt_vdb_ctx:
+        case vpopt_gap_ticket:
+        case vpopt_encrypted:
+        case vpopt_readgroup:
+            /* the behavior here appears to be
+               tolerate repeats, but only insert first */
+            if ( BSTreeInsertUnique ( tree, &o->node, NULL, VPOptionSort ) != 0)
+                VPOptionWhack ( & o -> node, NULL );
+            break;
+
+        default:
+            VPOptionWhack ( & o -> node, NULL );
+            break;
+        }
+
+        str = temp;
+        if (*str == '\0')
+            break;
+        if (*str == '&')
+            /**(char *)str = '\0'*/;
+        else
+            return false;
+        ++str;
+    }
+    return true;
+}
+
+static __inline__
+bool is_http_query (const char * str, BSTree * tree)
+{
+    return is_kfs_query (str, tree);
+}
+
+
+static __inline__
+bool is_acc_query (const char * str, BSTree * tree)
+{
+    return is_kfs_query (str, tree);
+}
+
+
+static __inline__
+bool is_kfs_fragment (const char * str)
+{
+    return true;
+/*     return (*str == '\0'); */
+}
+
+
+static __inline__
+bool is_acc_fragment (const char * str)
+{
+    return (*str == '\0');
+}
+
+
+
+/*
+ * file://host/path bue we allow file:/path
+ *
+ * RFC-1738
+ *
+ * fileurl = "file://" [host / "localhost" ] "/" fpath
+ */
+static
+rc_t VPathMakeUriFile (VPath * self, char * new_allocation, 
+                       size_t sz, char * hier, char * query,
+                       char * fragment)
+{
+    rc_t rc;
+    assert (self);
+    assert (new_allocation);
+    assert (sz);
+    assert (hier);
+    assert (query);
+    assert (fragment);
+
+    if ((!is_file_hier (hier)) ||
+        (!is_file_query (query)) ||
+        (!is_file_fragment (fragment)))
+    {
+        return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
+    }
+
+    free (self->storage);
+    self->storage = new_allocation;
+    self->alloc_size = sz;
+
+    PATH_DEBUG (("%s: hier '%s' query '%s' fragment '%s'\n", __func__,
+                 hier, query, fragment));
+    rc = VPathTransformPathHier (&hier);
+    PATH_DEBUG (("%s: hier '%s' query '%s' fragment '%s'\n", __func__,
+                 hier, query, fragment));
+    if (rc)
+    {
+        self->storage = NULL;
+        return rc;
+    }
+    StringInitCString (&self->path, hier);
+    self->query = query;
+    self->fragment = fragment;
+    PATH_DEBUG (("%s: path '%S' fragment '%s'\n", __func__,
+                 &self->path, self->fragment));
+    return 0;
+}
+
+        
+static
+rc_t VPathMakeUriKfs (VPath * self, char * new_allocation, 
+                      size_t sz, char * hier,
+                      char * query, char * fragment)
+{
+    rc_t rc;
+    assert (self);
+    assert (new_allocation);
+    assert (sz);
+    assert (hier);
+    assert (query);
+    assert (fragment);
+
+    if (!is_kfs_hier (hier))
+    {
+        PATH_DEBUG (("%s: failed is_kfs_hier '%s'\n",__func__, hier));
+        return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
+    }
+
+    if (!is_kfs_query (query, &self->options))
+    {
+        PATH_DEBUG (("%s: failed is_kfs_query '%s'\n",__func__, query));
+        return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
+    }
+
+    if (!is_kfs_fragment (fragment))
+    {
+        PATH_DEBUG (("%s: failed is_kfs_fragment '%s'\n",__func__, fragment));
+        return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
+    }
+
+    free (self->storage);
+    self->storage = new_allocation;
+    self->alloc_size = sz;
+
+    PATH_DEBUG (("%s: hier '%s' query '%s' fragment '%s'\n", __func__,
+                 hier, query, fragment));
+    rc = VPathTransformPathHier (&hier);
+    PATH_DEBUG (("%s: hier '%s' query '%s' fragment '%s'\n", __func__,
+                 hier, query, fragment));
+    if (rc)
+    {
+        self->storage = NULL;
+        return rc;
+    }
+    StringInitCString (&self->path, hier);
+    self->query = query;
+    self->fragment = fragment;
+    PATH_DEBUG (("%s: path '%S' fragment '%s'\n", __func__,
+                 &self->path, self->fragment));
+    return 0;
+}
+
+
+
+static
+rc_t VPathMakeUriAcc (VPath * self, char * new_allocation, 
+                      size_t sz, char * hier,
+                      char * query, char * fragment)
+{
+    rc_t rc;
+
+    assert (self);
+    assert (new_allocation);
+    assert (sz);
+    assert (hier);
+    assert (query);
+    assert (fragment);
+
+    if (!is_acc_hier (hier))
+    {
+        PATH_DEBUG (("%s: failed is_acc_hier '%s'\n", __func__, hier));
+        return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
+    }
+
+    if (!is_acc_query (query, &self->options))
+    {
+        PATH_DEBUG (("%s: failed is_kfs_query '%s'\n",__func__, query));
+        return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
+    }
+
+    if (!is_kfs_fragment (fragment))
+    {
+        PATH_DEBUG (("%s: failed is_kfs_fragment '%s'\n",__func__, fragment));
+        return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
+    }
+
+    free (self->storage);
+    self->storage = new_allocation;
+    self->alloc_size = sz;
+
+    PATH_DEBUG (("%s: hier '%s' query '%s' fragment '%s'\n", __func__,
+                 hier, query, fragment));
+    rc = VPathTransformPathHier (&hier);
+    PATH_DEBUG (("%s: hier '%s' query '%s' fragment '%s'\n", __func__,
+                 hier, query, fragment));
+    if (rc)
+    {
+        self->storage = NULL;
+        return rc;
+    }
+    StringInitCString (&self->path, hier);
+    self->query = query;
+    self->fragment = fragment;
+    PATH_DEBUG (("%s: path '%S' fragment '%s'\n", __func__,
+                 &self->path, self->fragment));
+    return 0;
+}
+
+
+static
+rc_t VPathMakeUriHttp (VPath * self, char * new_allocation, 
+                      size_t sz, char * hier,
+                      char * query, char * fragment)
+{
+    assert (self);
+    assert (new_allocation);
+    assert (sz);
+    assert (hier);
+    assert (query);
+    assert (fragment);
+
+    if (!is_http_query (query, &self->options))
+    {
+        PATH_DEBUG (("%s: failed is_http_query '%s'\n",__func__, query));
+        return RC (rcFS, rcPath, rcConstructing, rcUri, rcInvalid);
+    }
+
+    free (self->storage);
+    self->storage = new_allocation;
+    self->alloc_size = sz;
+
+    StringInitCString (&self->path, hier);
+    self -> query = query;
+    self->fragment = fragment;
+    PATH_DEBUG (("%s: path '%S' fragment '%s'\n", __func__,
+                 &self->path, self->fragment));
+    return 0;
+}
+
+
+static
+rc_t VPathMakeUriFtp (VPath * self, char * new_allocation, 
+                      size_t sz, char * hier,
+                      char * query, char * fragment)
+{
+    assert (self);
+    assert (new_allocation);
+    assert (sz);
+    assert (hier);
+    assert (query);
+    assert (fragment);
+
+    free (self->storage);
+    self->storage = new_allocation;
+    self->alloc_size = sz;
+
+    StringInitCString (&self->path, hier);
+    self->fragment = fragment;
+    PATH_DEBUG (("%s: path '%S' fragment '%s'\n", __func__,
+                 &self->path, self->fragment));
+    return 0;
+}
+
+static
+rc_t VPathMakeUriNcbiLegrefseq (VPath * self, char * new_allocation, 
+                                size_t sz, char * hier,
+                                char * query, char * fragment)
+{
+    assert (self);
+    assert (new_allocation);
+    assert (sz);
+    assert (hier);
+    assert (query);
+    assert (fragment);
+
+    free (self->storage);
+    self->storage = new_allocation;
+    self->alloc_size = sz;
+
+    StringInitCString (&self->path, hier);
+    self->fragment = fragment;
+    PATH_DEBUG (("%s: path '%S' fragment '%s'\n", __func__,
+                 &self->path, self->fragment));
+    return 0;
+}
+
+
+
+
+static
+VPUri_t scheme_type (const char * scheme)
+{
+    /* We have a "legal" scheme name. We'll only look for specific schemes we
+     * support and mark all others as merely unsupported rather than 
+     * differentiate types we don't care about.
+     */
+    switch (tolower(scheme[0]))
+    {
+    case '\0':
+        PATH_DEBUG (("%s: no scheme\n",__func__));
+        return vpuri_none;
+
+    case 'f':
+        if (strcasecmp ("file", scheme) == 0)
+        {
+            PATH_DEBUG (("%s: file scheme\n",__func__));
+            return vpuri_file;
+        }
+        if (strcasecmp (FTP_SCHEME, scheme) == 0)
+        {
+            PATH_DEBUG (("%s: " FTP_SCHEME " scheme\n",__func__));
+            return vpuri_ftp;
+        }
+        break;
+
+    case 'n':
+        if (strcasecmp (NCBI_FILE_SCHEME, scheme) == 0)
+        {
+            PATH_DEBUG (("%s: " NCBI_FILE_SCHEME " scheme\n",__func__));
+            return vpuri_ncbi_vfs;
+        }
+        else if (strcasecmp (NCBI_ACCESSION_SCHEME, scheme) == 0)
+        {
+            PATH_DEBUG (("%s: " NCBI_ACCESSION_SCHEME " scheme\n",__func__));
+            return vpuri_ncbi_acc;
+        }
+        break;
+
+    case 'h':
+        if (strcasecmp (HTTP_SCHEME, scheme) == 0)
+        {
+            PATH_DEBUG (("%s: " HTTP_SCHEME " scheme\n",__func__));
+            return vpuri_http;
+        }
+        break;
+
+    case 'x':
+        if (strcasecmp (NCBI_LEGREFSEQ_SCHEME, scheme) == 0)
+        {
+            PATH_DEBUG (("%s: " NCBI_LEGREFSEQ_SCHEME " scheme\n",__func__));
+            return vpuri_ncbi_legrefseq;
+        }
+        break;
+    }
+
+    return vpuri_not_supported;
+}
+
+
+/*
+ * See RFC 3986 / RFC 3987
+ * We will allow utf-8 in our URI with the extended Unicode characters not 
+ * required to be %-encoded.  We would have to do this encoding if we wish
+ * to pass this uri out of our environment.
+ *
+ * we demand a valid set of characters for the scheme but do no validation 
+ * of the other parts waiting for a scheme specific parsing
+ */
+
+/* pcopy and scheme point to the same place - seems redundant */
+static
+rc_t VPathSplitUri (VPath * self, char ** pcopy, size_t * psiz, char ** scheme, char ** hier,
+                    char ** query, char ** fragment)
+{
+    char * copy;
+    size_t z;
+
+    assert (self && pcopy && psiz && scheme && hier && query && fragment);
+
+    *pcopy = *scheme = *hier = *query = *fragment = NULL;
+    *psiz = 0;
+
+    z = self->asciz_size + 1;
+    copy = malloc (z);
+    if (copy == NULL)
+        return RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
+    strcpy (copy, self->storage);
+    for (;;)
+    {
+        char * s; /* start/scheme */
+        char * h; /* hier-part */
+        char * q; /* query */
+        char * f; /* fragment */
+        char * e; /* EOS (terminating NUL */
+
+        s = copy;
+
+        /* point at NUL at end */
+        f = q = e = s + strlen (self->storage);
+
+        /* find the scheme - terminated by first ':' from the beginning (left) */
+        h = strchr (s, ':');
+
+        /* scheme must be present as must the ':' and not % encoded
+         * and must have some size
+         * the character set for scheme is very limited - ASCII Alphanumeric
+         * with "-", ",", "_", and "~"
+         */
+        if ((h == NULL) || (h == s))
+        {
+            h = s;
+            s = e;
+            break;
+        }
+
+        *h++ = '\0';
+
+        if (! is_scheme (s))
+        {
+            h[-1] = ':';
+            h = s;
+            s = e;
+            break;
+        }
+        if (h != e)
+        {
+            f = strchr (h, '#');
+
+            if (f == NULL)
+                f = e;
+            else
+                *f++ = '\0';
+
+            q = strchr (h, '?');
+
+            if (q == NULL)
+                q = e;
+            else
+                *q++ = '\0';
+        }
+#if 0
+        if (! is_hier (h))
+            break;
+
+        if (! is_query (q))
+            break;
+
+        if (! is_fragment (f))
+            break;
+#endif
+        if (! string_decode (h))
+            break;
+
+        if (! string_decode (q))
+            break;
+
+        if (! string_decode (f))
+            break;
+
+        *scheme = s;
+        *hier = h;
+        *query = q;
+        *fragment = f;
+        *psiz = z;      /* WHAT???? */
+        *pcopy = copy;
+        return 0;
+    }
+
+    free (copy);
+    return SILENT_RC (rcFS, rcPath, rcParsing, rcUri, rcInvalid);
+}
+
+
+static
+rc_t VPathParseURI (VPath * self)
+{
+    char * parsed_uri;
+    char * scheme;
+    char * hier;
+    char * query;
+    char * fragment;
+    size_t allocated;
+    rc_t rc;
+
+    PATH_DEBUG (("%s: starting path '%s'\n",__func__,self->path.addr));
+    rc = VPathSplitUri (self, &parsed_uri, &allocated, &scheme, &hier, &query, &fragment);
+    PATH_DEBUG (("%s: allocated %p '%zu'\n",__func__,parsed_uri,allocated));
+    if (rc == 0)
+    {
+        switch (self->scheme = scheme_type (scheme))
+        {
+        case vpuri_invalid:
+            rc = RC (rcFS, rcPath, rcParsing, rcUri, rcInvalid);
+            break;
+
+        case vpuri_not_supported:
+            rc = RC (rcFS, rcPath, rcParsing, rcUri, rcIncorrect);
+            break;
+
+        case vpuri_file:
+            PATH_DEBUG (("%s: call VPathMakeUriFile\n",__func__));
+            rc = VPathMakeUriFile (self, parsed_uri, allocated, hier, query,
+                                   fragment);
+            break;
+
+        case vpuri_ncbi_vfs:
+            PATH_DEBUG (("%s: call VPathMakeUriKfs\n",__func__));
+            rc = VPathMakeUriKfs (self, parsed_uri, allocated, hier, query,
+                                  fragment);
+            break;
+
+        case vpuri_ncbi_acc:
+            PATH_DEBUG (("%s: call VPathMakeUriAcc\n",__func__));
+            rc = VPathMakeUriAcc (self, parsed_uri, allocated, hier, query,
+                                  fragment);
+            break;
+
+        case vpuri_http:
+            PATH_DEBUG (("%s: call VPathMakeUriHttp\n",__func__));
+            rc = VPathMakeUriHttp (self, parsed_uri, allocated, hier, query,
+                                   fragment);
+
+            break;
+
+        case vpuri_ftp:
+            PATH_DEBUG (("%s: call VPathMakeUriFtp\n",__func__));
+            rc = VPathMakeUriFtp (self, parsed_uri, allocated, hier, query,
+                                  fragment);
+
+            break;
+
+        case vpuri_ncbi_legrefseq:
+            PATH_DEBUG (("%s: call VPathMakeUriNcbiLegrefseq\n",__func__));
+            rc = VPathMakeUriNcbiLegrefseq (self, parsed_uri, allocated, hier, query,
+                                            fragment);
+
+            break;
+
+
+        default:
+            rc = RC (rcFS, rcPath, rcParsing, rcUri, rcCorrupt);
+            break;
+        }
+        if (rc)
+            free (parsed_uri);
+    }
+    return rc;
+}
+
+
+static
+rc_t VPathAlloc (VPath ** pself, const char * path_string)
+{
+    rc_t rc;
+    size_t z, zz;
+    VPath * self;
+
+
+    zz = 1 + (z = string_size (path_string));
+
+    OFF_PATH_DEBUG(("%s: %s 'z' '%zu' zz '%zu'\n",__func__,path_string,z,zz));
+
+    self = calloc (sizeof (*self), 1);
+    if (self == NULL)
+        rc = RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
+    else
+    {
+        self->storage = malloc (zz);
+        if (self->storage == NULL)
+            rc = RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
+        else
+        {
+
+            PATH_DEBUG (("-----\n%s: %p %zu %p %zu\n\n", __func__, self, sizeof (*self),
+                         self->storage, zz));
+            self->alloc_size = zz;
+
+            memcpy (self->storage, path_string, zz);
+
+            KRefcountInit (&self->refcount, 1, class_name, "init", self->storage);
+
+            self->asciz_size = z;
+
+            StringInit (&self->path, self->storage, z, string_len(self->storage, z));
+
+            BSTreeInit (&self->options);
+
+            self->fragment = self->storage + z;
+
+            *pself = self;
+
+            OFF_PATH_DEBUG (("%s: path '%S'\n", __func__, &self->path));
+
+            return 0;
+        }
+
+        free (self);
+    }
+    return rc;
+}
+
+
+static
+rc_t VPathMakeValidateParams (VPath ** new_path, const char * path)
+{
+    if (new_path == NULL)
+        return RC (rcFS, rcPath, rcConstructing, rcSelf, rcNull);
+    *new_path = NULL;
+    if (path == NULL)
+        return RC (rcFS, rcPath, rcConstructing, rcParam, rcNull);
+    return 0;
+}
+
+
+LIB_EXPORT rc_t CC VPathMake ( VPath ** new_path, const char * posix_path)
+{
+    VPath * self;
+    rc_t rc;
+
+    rc = VPathMakeValidateParams (new_path, posix_path);
+    if (rc == 0)
+    {
+        rc = VPathAlloc (&self, posix_path);
+        if (rc == 0)
+        {
+            rc = VPathParseURI (self);
+
+            /* ignore return - if its bad just leave the path alone even if 
+             * it turns out to be bad later */
+            *new_path = self;
+            return 0;
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC VPathMakeSysPath ( VPath ** new_path, const char * sys_path)
+{
+    VPath * self;
+    rc_t rc;
+
+    rc = VPathMakeValidateParams (new_path, sys_path);
+    if (rc)
+    {
+        LOGERR (klogErr, rc, "error with VPathMakeValidateParams");
+        return rc;
+    }
+
+    rc = VPathAlloc (&self, sys_path);
+    if (rc)
+        return rc;
+
+    /* first try as URI then as a system specific path */
+    rc = VPathParseURI (self);
+    if (rc)
+    {
+        PATH_DEBUG (("%s: failed VPathParse URI '%R'\n",__func__,rc));
+        rc = VPathTransformSysPath(self);
+        if (rc)
+            PATH_DEBUG (("%s: failed VPathTransformSysPath URI '%R'\n",__func__,rc));
+    }
+    if (rc)
+        VPathDestroy (self);
+    else
+        *new_path = self;
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC VPathMakeVFmt ( VPath ** new_path, const char * fmt, va_list args )
+{
+    size_t len;
+    rc_t rc;
+    char buffer [32*1024]; /* okay we really don't want any larger than this I suppose */
+
+    rc = VPathMakeValidateParams (new_path, fmt);
+    if (rc)
+        return rc;
+
+    rc = string_vprintf (buffer, sizeof (buffer), &len, fmt, args);
+    if (rc)
+        return rc;
+
+    if (len >= sizeof buffer)
+        return RC (rcFS, rcPath, rcConstructing, rcBuffer, rcInsufficient);
+
+    return VPathMake (new_path, buffer);
+}
+
+
+LIB_EXPORT rc_t CC VPathMakeFmt ( VPath ** new_path, const char * fmt, ... )
+{
+    rc_t rc;
+    va_list args;
+
+    va_start (args, fmt);
+    rc = VPathMakeVFmt (new_path, fmt, args);
+    va_end (args);
+
+    return rc;
+}
+
+
+
+/* -----
+ * for this to work
+ * the base path must be a directory or have no hiearchical part at all
+ *
+ * is the srapathmgr is not NULL we first try to resolve the relative path as 
+ * an srapath 'alias'
+ */
+LIB_EXPORT rc_t CC VPathMakeDirectoryRelative ( VPath ** new_path, const KDirectory * basedir,
+                                                const char * relative_path, SRAPath * srapathmgr )
+{
+    VPath * vpath = NULL;
+    VPath * rpath = NULL;
+    VPath * fpath = NULL;
+    char sbuff [8192];
+    rc_t rc;
+
+/*     KOutMsg ("%s: %s\n", __func__, relative_path); */
+
+    if (new_path == NULL)
+        return RC (rcVFS, rcPath, rcConstructing, rcSelf, rcNull);
+
+    *new_path = NULL;
+
+    if ((basedir == NULL) ||
+        (relative_path == NULL))
+        return RC (rcVFS, rcPath, rcConstructing, rcParam, rcNull);
+
+    /*
+     * create a VPath off the relative path.  This will create one of three things
+     * as of when this was writen:
+     *  1: kfile_acs uri
+     *  2: full path
+     *  3: relative path
+     *
+     * Handling (1) is easy and mirrors the quick out above.
+     */
+    rc = VPathMakeSysPath (&rpath, relative_path);
+    if (rc == 0)
+    {
+        VFSManager *vmgr;
+        bool it_worked = false;
+
+        switch (rpath->scheme)
+        {
+        case vpuri_none:
+            if (string_chr (relative_path, string_size (relative_path), '/') != NULL)
+                goto treat_as_file_path;
+            /* else fall through no break */
+        case vpuri_ncbi_acc:
+            /*
+             * First we'll see if the relative path is actually an accession
+             * in which case we ignore the base dir
+             */
+            rc = VFSManagerMake (&vmgr);
+            if (rc == 0)
+            {
+                VResolver * resolver;
+
+                rc = VFSManagerGetResolver (vmgr, &resolver);
+                if (rc == 0)
+                {
+                    rc = VResolverLocal (resolver, rpath, (const VPath **)&fpath);
+                    if (rc == 0)
+                        it_worked = true;
+
+                    else if (GetRCState (rc) == rcNotFound)
+                    {
+                        rc = VResolverRemote (resolver, rpath, ( const VPath** ) &fpath, NULL);
+                        if (rc == 0)
+                            it_worked = true;
+                    }
+                    VResolverRelease (resolver);
+                }
+                VFSManagerRelease (vmgr);
+            }
+            if (it_worked)
+            {
+                *new_path = fpath;
+                rc = 0;
+            }
+            break;
+            
+        case vpuri_ncbi_vfs:
+        case vpuri_file:
+        treat_as_file_path:
+            /* full path or relative? */
+            if (rpath->path.addr[0] == '/')
+            {
+                /* full path is done */
+                *new_path = rpath;
+                return 0;
+            }
+            /* our relative path really is relative and must be resolved */
+            rc = KDirectoryResolvePath (basedir, true, sbuff, sizeof sbuff,
+                                        rpath->path.addr);
+            if (rc == 0)
+            {
+                rc = VPathMake (&vpath, sbuff);
+                if (rc == 0)
+                {
+                    char * use_opts;
+
+/*                         KOutMsg ("%s: 2.5 %s %s\n", __func__, sbuff, vpath->path.addr); */
+
+                    use_opts = vpath->query;
+/*                         KOutMsg ("%s: 2.6 %s %s\n", __func__, sbuff, vpath->path.addr); */
+                    if ((use_opts == NULL) || (use_opts[0] == '\0'))
+                    {
+/*                         KOutMsg ("%s: 2.7 %s %s\n", __func__, sbuff, vpath->path.addr); */
+                        use_opts = rpath->query;
+                    }
+/*                         KOutMsg ("%s: 2.8 %s %s\n", __func__, sbuff, vpath->path.addr); */
+
+                    memmove (sbuff, "ncbi-file:", sizeof "ncbi-file:");
+                    memmove (sbuff + sizeof "ncbi-file", vpath->path.addr, vpath->path.size + 1);
+                    if (use_opts)
+                    {
+                        sbuff[sizeof "ncbi-file" + vpath->path.size] = '?';
+                        memmove (sbuff + sizeof "ncbi-file" + vpath->path.size + 1, use_opts, string_size (use_opts) + 1);
+                    }
+/*                         KOutMsg ("%s: 2.9 %s %s\n", __func__, sbuff, vpath->path.addr); */
+
+                    rc = VPathMake (&fpath, sbuff);
+                    if (rc == 0)
+                    {
+/*                         KOutMsg ("%s: 2.10 %s %s\n", __func__, sbuff, vpath->path.addr); */
+
+                        VPathRelease (vpath);
+                        VPathRelease (rpath);
+                        *new_path = fpath;
+                        return 0;
+                    }
+                    VPathRelease (vpath);
+                }
+            }
+            break;
+
+        case vpuri_http:
+        case vpuri_ftp:
+            *new_path = rpath;
+            return 0;
+
+        case vpuri_not_supported:
+        case vpuri_invalid:
+        default:
+            break;
+        }
+        VPathRelease (rpath);
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC VPathMakeCurrentPath ( VPath ** new_path )
+{
+    char buff [4096];
+    char * a = NULL;
+    char * b = buff;
+    size_t z;
+    rc_t rc;
+
+    rc = VPathGetCWD (b, sizeof buff);
+    if (rc)
+    {
+        for (z = 2 * sizeof buff; rc; z += sizeof buff)
+        {
+            b = realloc (a, z);
+            if (b == NULL)
+            {
+                free (a);
+                return RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
+            }
+            rc = VPathGetCWD (b, z);
+        }
+    }
+    rc = VPathMakeSysPath (new_path, b);
+    if (b != buff)
+        free (b);
+    return rc;
+}
+
+
+/* ----------
+ * VPathReadPath
+ *
+ * Copy the path as a ASCIZ string to the buffer.  The form will be the KFS
+ * internal "posix-path" form.
+ */
+LIB_EXPORT rc_t CC VPathReadPath (const VPath * self, char * buffer, size_t buffer_size,
+                                  size_t * num_read)
+{
+    size_t z = StringSize (&self->path);
+
+    if (buffer_size < z)
+        return RC (rcFS, rcPath, rcReading, rcBuffer, rcInsufficient);
+
+
+    PATH_DEBUG (("%s: path '%S' fragment '%s'\n", __func__,
+                 &self->path, self->fragment));
+    PATH_DEBUG (("%s: should copy '%*.*s' length '%zu'\n", __func__, z, z,
+                 self->path.addr, z));
+
+    memcpy ( buffer, self->path.addr, z );
+    if ( buffer_size > z )
+        buffer[ z ] = '\0';
+    if ( num_read != NULL )
+        *num_read = z;
+
+    PATH_DEBUG (("%s: copied '%*.*s' length '%zu'\n", __func__, z, z,
+                 buffer, z));
+    return 0;
+}
+
+
+LIB_EXPORT rc_t CC VPathReadQuery (const VPath * self, char * buffer, size_t buffer_size,
+                                   size_t * num_read)
+{
+    if (num_read == NULL)
+        return RC (rcFS, rcPath, rcAccessing, rcParam, rcNull);
+    *num_read = 0;
+
+    if (buffer == NULL)
+        return RC (rcFS, rcPath, rcAccessing, rcParam, rcNull);
+
+    if (self == NULL)
+        return RC (rcFS, rcPath, rcAccessing, rcSelf, rcNull);
+
+    *num_read = string_copy (buffer, buffer_size, self->query,
+                             self->alloc_size);
+    return 0;
+}
+
+
+LIB_EXPORT rc_t CC VPathReadFragment (const VPath * self, char * buffer, size_t buffer_size,
+                                      size_t * num_read)
+{
+    if (num_read == NULL)
+        return RC (rcFS, rcPath, rcAccessing, rcParam, rcNull);
+    *num_read = 0;
+
+    if (buffer == NULL)
+        return RC (rcFS, rcPath, rcAccessing, rcParam, rcNull);
+
+    if (self == NULL)
+        return RC (rcFS, rcPath, rcAccessing, rcSelf, rcNull);
+
+
+
+    *num_read = string_copy (buffer, buffer_size, self->fragment, 
+                             self->alloc_size);
+    return 0;
+}
+
+
+/* ----------
+ */
+LIB_EXPORT rc_t CC VPathOption (const VPath * self, VPOption_t option,
+                                char * buffer, size_t buffer_size,
+                                size_t * num_read)
+{
+    size_t o = (size_t)option; /* some oddness to use a value instead of a pointer */
+    BSTNode * n = BSTreeFind (&self->options, (void*)o, VPOptionCmp);
+    VPOption * opt;
+
+    if (n == NULL)
+        return RC (rcFS, rcPath, rcAccessing, rcParam, rcNotFound);
+    opt = (VPOption*)n;
+    *num_read = string_copy (buffer, buffer_size, opt->value.addr, opt->value.size);
+    return 0;
+}
+
+
+LIB_EXPORT VPUri_t VPathGetUri_t (const VPath * self)
+{
+    if (self)
+    {
+        VPUri_t v = self->scheme;
+        if ((v < vpuri_invalid) ||
+            (v >= vpuri_count))
+            v = vpuri_invalid;
+        return v;
+    }
+    return vpuri_invalid;
+}
+
+
+LIB_EXPORT rc_t CC VPathMakeString ( const VPath * self, const String ** uri )
+{
+    rc_t rc = 0;
+    if ( uri == NULL )
+        rc = RC ( rcVFS, rcPath, rcAccessing, rcParam, rcNull );
+    else
+    {
+        *uri = NULL;
+        if ( self == NULL )
+            rc = RC ( rcVFS, rcPath, rcAccessing, rcSelf, rcNull );
+        else
+        {
+            /* this version is a bit of a hack */
+            struct
+            {
+                String s;
+                char   b[ 1 ];
+            } * t;
+            size_t z = self->path.addr - self->storage;
+
+            t = malloc ( sizeof * t + self->alloc_size );
+            if ( t == NULL )
+                rc = RC ( rcVFS, rcPath, rcAccessing, rcMemory, rcExhausted );
+            else
+            {
+                char *s = &( t->b[ 0 ] );
+
+                if ( z != 0 )
+                {
+                    memcpy ( s, self->storage, z - 1 );
+                    s [ z - 1 ] = ':';
+                }
+
+                memcpy ( &s[ z ], self->path.addr, self->path.size );
+                z += self->path.size;
+
+                if ( self->query != NULL && self->query[ 0 ] != '\0' )
+                {
+                    size_t y = string_size ( self->query );
+                    s[ z++ ] = '?';
+                    memcpy ( &s[ z ], self->query, y );
+                    z += y;
+                }
+
+                if ( self->fragment != NULL && self->fragment[ 0 ] != '\0' )
+                {
+                    size_t y = string_size ( self->fragment );
+                    s[ z++ ] = '#';
+                    memcpy ( &s[ z ], self->fragment, y );
+                    z += y;
+                }
+
+                s[ z ] = '\0';
+                StringInit ( &t->s, s, z, string_len ( s, z ) );
+                *uri = &t->s;
+            }
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC VPathGetScheme ( const VPath * self, const String ** scheme )
+{
+    rc_t rc = 0;
+    if ( scheme == NULL )
+        rc = RC ( rcVFS, rcPath, rcAccessing, rcParam, rcNull );
+    else
+    {
+        *scheme = NULL;
+        if ( self == NULL )
+            rc = RC ( rcVFS, rcPath, rcAccessing, rcSelf, rcNull );
+        else
+        {
+            size_t z = ( self->path.addr - self->storage );
+            if ( z > 0 )
+            {
+                struct
+                {
+                    String s;
+                    char   b[ 1 ];
+                } * t;
+                t = malloc ( sizeof * t + z );
+                if ( t == NULL )
+                    rc = RC ( rcVFS, rcPath, rcAccessing, rcMemory, rcExhausted );
+                else
+                {
+                    size_t i;
+                    char *s = &( t->b[ 0 ] );
+                    memcpy ( s, self->storage, z - 1 );
+                    for ( i = 0; i < z; ++i )
+                        s[ i ] = tolower( s[ i ] );
+                    s[ z ] = '\0';
+                    StringInit ( &t->s, s, z, string_len ( s, z ) );
+                    *scheme = &t->s;
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC VPathGetScheme_t( const VPath * self, VPUri_t * uri_type )
+{
+    rc_t rc = 0;
+    if ( uri_type == NULL )
+        rc = RC ( rcVFS, rcPath, rcAccessing, rcParam, rcNull );
+    else
+    {
+        *uri_type = vpuri_invalid;
+        if ( self == NULL )
+            rc = RC ( rcVFS, rcPath, rcAccessing, rcSelf, rcNull );
+        else
+            *uri_type = self->scheme;
+    }
+    return rc;
+}
+
+
+LIB_EXPORT rc_t CC VPathGetPath ( const VPath * self, const String ** path )
+{
+    rc_t rc = 0;
+    if ( path == NULL )
+        rc = RC ( rcVFS, rcPath, rcAccessing, rcParam, rcNull );
+    else
+    {
+        *path = NULL;
+        if ( self == NULL )
+            rc = RC ( rcVFS, rcPath, rcAccessing, rcSelf, rcNull );
+        else
+        {
+            if ( StringSize ( &self->path ) > 0 )
+                rc = StringCopy ( path, &self->path );
+        }
+    }
+    return rc;
+}
diff --git a/libs/vfs/resolver-priv.h b/libs/vfs/resolver-priv.h
new file mode 100644
index 0000000..860c601
--- /dev/null
+++ b/libs/vfs/resolver-priv.h
@@ -0,0 +1,144 @@
+/*===========================================================================
+*
+*                            Public Domain Notice
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_resolver_priv_
+#define _h_resolver_priv_
+
+#ifndef _h_vfs_resolver_
+#include <vfs/resolver.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * KConfig Repository Structure
+ *  expressed in pseudo BNF:
+ *
+ *  base-config
+ *      = "repository" <category>*
+ *      ;
+ *
+ *  category
+ *      = "remote" <remote-sub-category>*
+ *      | "site" <site-sub-category>*
+ *      | "user" <user-sub-category>*
+ *      ;
+ *
+ *  remote-sub-category
+ *      = "main" <public-remote-named-repository>*
+ *      | "aux" <public-remote-named-repository>*
+ *      | "protected" <protected-remote-named-repository>*
+ *      ;
+ *
+ *  site-sub-category
+ *      = "main" <site-named-repository>*
+ *      | "aux" <site-named-repository>*
+ *      ;
+ *
+ *  user-sub-category
+ *      = "public" <public-user-named-repository>*
+ *      | "protected" ID <protected-user-named-repository>*
+ *      ;
+ *
+ *  public-remote-named-repository
+ *      = ID <public-remote-repository>
+ *      ;
+ *
+ *  protected-remote-named-repository
+ *      = ID <protected-remote-repository>
+ *      ;
+ *
+ *  site-named-repository
+ *      = ID <site-repository>
+ *      ;
+ *
+ *  public-user-named-repository
+ *      = ID <public-user-repository>
+ *      ;
+ *
+ *  protected-user-named-repository
+ *      = ID <protected-user-repository>
+ *      ;
+ *
+ *  public-remote-repository
+ *      = <public-remote-root> [ <disabled> ] <apps>*
+ *      ;
+ *
+ *  protected-remote-repository
+ *      = <protected-remote-root> [ <disabled> ] <apps>*
+ *      ;
+ *
+ *  site-repository
+ *      = <local-root> [ <disabled> ] <apps>*
+ *      ;
+ *
+ *  public-user-repository
+ *      = <local-root> [ <disabled> ] [ <cache-enabled> ] <apps>*
+ *      ;
+ *
+ *  protected-user-repository
+ *      = <local-root> <passwd> <download-ticket> [ <disabled> ] [ <cache-enabled> ] <apps>*
+ *      ;
+ *
+ *  apps
+ *      = "refseq" <app>
+ *      | "sra" <app>
+ *      | "wgs" <app>
+ *      ;
+ *
+ *  app
+ *      = [ <disabled> ] "volumes" <volume>*
+ *      ;
+ *
+ *  volume
+ *      = <expansion-alg> "=" <path-list>
+ *      ;
+ *
+ *  expansion-alg
+ *      = "flat" | "sra1000" | "sra1024" | "fuse1000" | "refseq" | ...
+ *      ;
+ *
+ *  disabled
+ *      = "disabled" "=" ( "true" | * )  # any value other than "true" is false
+ *      ;
+ *
+ *  cache-enabled
+ *      = "cache-enabled" "=" ( "true" | * )  # any value other than "true" is false
+ *      ;
+ */
+
+#define rcResolver   rcTree
+#define rcRepository rcDirectory
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_resolver_priv_ */
diff --git a/libs/vfs/resolver.c b/libs/vfs/resolver.c
new file mode 100644
index 0000000..69f522d
--- /dev/null
+++ b/libs/vfs/resolver.c
@@ -0,0 +1,2694 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+
+#include <vfs/extern.h>
+#include "resolver-priv.h"
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <kns/manager.h>
+#include <kns/curl-file.h>
+#include <kns/KCurlRequest.h>
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <kfg/repository.h>
+#include <kfg/config.h>
+#include <klib/text.h>
+#include <klib/vector.h>
+#include <klib/refcount.h>
+#include <klib/namelist.h>
+#include <klib/printf.h>
+#include <klib/data-buffer.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <sysalloc.h>
+
+#include <vfs/path-priv.h>
+#include "path-priv.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+/* to turn of CGI name resolution for
+   any refseq accessions */
+#define NO_REFSEQ_CGI 1
+
+/* to turn of CGI name resolution for
+   legacy WGS packages used by refseq */
+#define NO_LEGACY_WGS_REFSEQ_CGI NO_REFSEQ_CGI
+
+
+/*--------------------------------------------------------------------------
+ * String
+ */
+static
+void CC string_whack ( void *obj, void *ignore )
+{
+    StringWhack ( ( String* ) obj );
+}
+
+
+
+/*--------------------------------------------------------------------------
+ * VResolverAccToken
+ *  breaks up an accession into parts
+ *
+ *  "acc" is entire accession as given
+ *
+ *  the remainder is divided like so:
+ *
+ *    [<prefix>_]<alpha><digits>[.<ext1>[.<ext2>]]
+ *
+ *  prefix is optional
+ *  alpha can be zero length iff prefix is not zero length
+ *  digits must be non-zero length
+ *  ext1 and ext2 are optional
+ */
+typedef struct VResolverAccToken VResolverAccToken;
+struct VResolverAccToken
+{
+    String acc;
+    String prefix;
+    String alpha;
+    String digits;
+    String ext1;
+    String ext2;
+};
+
+/*--------------------------------------------------------------------------
+ * VResolverAlg
+ *  represents a set of zero or more volumes
+ *  each of which is addressed using a particular expansion algorithm
+ */
+typedef enum
+{
+    appUnknown,
+    appAny,
+    appREFSEQ,
+    appSRA,
+    appWGS,
+    appCount
+} VResolverAppID;
+
+typedef enum
+{
+    algCGI,
+    algSRAFlat,
+    algSRA1024,
+    algSRA1000,
+    algFUSE1000,
+    algREFSEQ,
+    algWGSFlat,
+    algWGS,
+    algFuseWGS,
+    algSRA_NCBI,
+    algSRA_EBI,
+
+    /* leave as last value */
+    algUnknown
+
+} VResolverAlgID;
+
+typedef enum
+{
+    cacheDisallow,
+    cacheAllow
+} VResolverCacheAllow;
+
+typedef struct VResolverAlg VResolverAlg;
+struct VResolverAlg
+{
+    /* volume paths - stored as String* */
+    Vector vols;
+
+    /* root path - borrowed reference */
+    const String *root;
+
+    /* download ticket - borrowed reference
+       non-NULL means that the root is a
+       resolver CGI. also, don't rely on
+       presence of any volumes... */
+    const String *ticket;
+
+    /* app_id helps to filter out volumes by app */
+    VResolverAppID app_id;
+
+    /* how to expand an accession */
+    VResolverAlgID alg_id;
+
+    /* a property of the repository */
+    bool protected;
+
+    /* whether the volumes are cache-capable
+       in particularl, enabled if cache forced */
+    bool cache_capable;
+
+    /* whether the volumes are cache-enabled */
+    bool cache_enabled;
+
+    /* whether the volume is disabled in config */
+    bool disabled;
+};
+
+
+/* Whack
+ */
+static
+void CC VResolverAlgWhack ( void *item, void *ignore )
+{
+    VResolverAlg *self = item;
+
+    /* drop any volumes */
+    VectorWhack ( & self -> vols, string_whack, NULL );
+
+    /* everything else is a borrowed reference */
+
+    free ( self );
+}
+
+/* Make
+ */
+static
+rc_t VResolverAlgMake ( VResolverAlg **algp, const String *root,
+     VResolverAppID app_id, VResolverAlgID alg_id, bool protected, bool disabled )
+{
+    rc_t rc;
+    VResolverAlg *alg = calloc ( 1, sizeof * alg );
+    if ( alg == NULL )
+        rc = RC ( rcVFS, rcMgr, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        VectorInit ( & alg -> vols, 0, 8 );
+        alg -> root = root;
+        alg -> app_id = app_id;
+        alg -> alg_id = alg_id;
+        alg -> protected = protected;
+        alg -> disabled = disabled;
+        rc = 0;
+    }
+
+    * algp = alg;
+    return rc;
+}
+
+/* MakeeLocalWGSRefseqURI
+ *  create a special URI that tells KDB how to open this
+ *  obscured table, hidden away within a KAR file
+ */
+static
+rc_t VResolverAlgMakeLocalWGSRefseqURI ( const VResolverAlg *self,
+    const String *vol, const String *exp, const String *acc, const VPath ** path )
+{
+    if ( self -> root == NULL )
+        return VPathMakeFmt ( ( VPath** ) path, NCBI_FILE_SCHEME ":%S/%S#tbl/%S", vol, exp, acc );
+    return VPathMakeFmt ( ( VPath** ) path, NCBI_FILE_SCHEME ":%S/%S/%S#tbl/%S", self -> root, vol, exp, acc );
+}
+
+/* MakeeRemoteWGSRefseqURI
+ *  create a special URI that tells KDB how to open this
+ *  obscured table, hidden away within a KAR file
+ */
+static
+rc_t VResolverAlgMakeRemoteWGSRefseqURI ( const VResolverAlg *self,
+    const char *url, const String *acc, const VPath ** path )
+{
+    return VPathMakeFmt ( ( VPath** ) path, "%s#tbl/%S", url, acc );
+}
+
+/* MakeRemotePath
+ *  the path is known to exist in the remote file system
+ *  turn it into a VPath
+ */
+static
+rc_t VResolverAlgMakeRemotePath ( const VResolverAlg *self,
+    const char *url, const VPath ** path )
+{
+    return VPathMakeFmt ( ( VPath** ) path, url );
+}
+
+/* MakeLocalPath
+ *  the path is known to exist in the local file system
+ *  turn it into a VPath
+ */
+static
+rc_t VResolverAlgMakeLocalPath ( const VResolverAlg *self,
+    const String *vol, const String *exp, const VPath ** path )
+{
+    if ( self -> root == NULL )
+        return VPathMakeFmt ( ( VPath** ) path, "%S/%S", vol, exp );
+    return VPathMakeFmt ( ( VPath** ) path, "%S/%S/%S", self -> root, vol, exp );
+}
+
+/* expand_accession
+ *  expand accession according to algorithm
+ */
+static
+rc_t expand_algorithm ( const VResolverAlg *self, const VResolverAccToken *tok,
+    char *expanded, size_t bsize, size_t *size, bool legacy_wgs_refseq )
+{
+    rc_t rc;
+    uint32_t num;
+
+   switch ( self -> alg_id )
+    {
+    case algCGI:
+        return RC ( rcVFS, rcResolver, rcResolving, rcType, rcIncorrect );
+    case algSRAFlat:
+        rc = string_printf ( expanded, bsize, size,
+            "%S%S.sra", & tok -> alpha, & tok -> digits );
+        break;
+    case algSRA1024:
+        num = ( uint32_t ) strtoul ( tok -> digits . addr, NULL, 10 );
+        rc = string_printf ( expanded, bsize, size,
+            "%S/%06u/%S%S.sra", & tok -> alpha, num >> 10, & tok -> alpha, & tok -> digits );
+        break;
+    case algSRA1000:
+        num = ( uint32_t ) ( tok -> alpha . size + tok -> digits . size - 3 );
+        rc = string_printf ( expanded, bsize, size,
+            "%S/%.*S/%S%S.sra", & tok -> alpha, num, & tok -> acc, & tok -> alpha, & tok -> digits );
+        break;
+    case algFUSE1000:
+        num = ( uint32_t ) ( tok -> alpha . size + tok -> digits . size - 3 );
+        rc = string_printf ( expanded, bsize, size,
+            "%S/%.*S/%S%S/%S%S.sra", & tok -> alpha, num, & tok -> acc, 
+            & tok -> alpha, & tok -> digits, & tok -> alpha, & tok -> digits );
+        break;
+    case algREFSEQ:
+        if ( ! legacy_wgs_refseq )
+            rc = string_printf ( expanded, bsize, size, "%S", & tok -> acc );
+        else
+            rc = string_printf ( expanded, bsize, size, "%S%.2S", & tok -> alpha, & tok -> digits );
+        break;
+    case algWGSFlat:
+        num = ( uint32_t ) ( tok -> alpha . size + 2 );
+        if ( tok -> prefix . size != 0 )
+            num += tok -> prefix . size + 1;
+        rc = string_printf ( expanded, bsize, size,
+            "%.*S", num, & tok -> acc );
+        break;
+    case algWGS:
+        num = ( uint32_t ) ( tok -> alpha . size + 2 );
+        if ( tok -> prefix . size != 0 )
+            num += tok -> prefix . size + 1;
+        rc = string_printf ( expanded, bsize, size,
+            "WGS/%.2s/%.2s/%.*S", tok -> alpha . addr, tok -> alpha . addr + 2, num, & tok -> acc );
+        break;
+    case algFuseWGS:
+        num = ( uint32_t ) ( tok -> alpha . size + 2 );
+        if ( tok -> prefix . size != 0 )
+            num += tok -> prefix . size + 1;
+        rc = string_printf ( expanded, bsize, size,
+            "%.2s/%.2s/%.*S", tok -> alpha . addr, tok -> alpha . addr + 2, num, & tok -> acc );
+        break;
+    case algSRA_NCBI:
+        num = ( uint32_t ) strtoul ( tok -> digits . addr, NULL, 10 );
+        rc = string_printf ( expanded, bsize, size,
+            "%S/%06u/%S%S", & tok -> alpha, num >> 10, & tok -> alpha, & tok -> digits );
+        break;
+    case algSRA_EBI:
+        num = ( uint32_t ) ( tok -> alpha . size + tok -> digits . size - 3 );
+        rc = string_printf ( expanded, bsize, size,
+            "%S/%.*S/%S%S", & tok -> alpha, num, & tok -> acc, & tok -> alpha, & tok -> digits );
+        break;
+    default:
+        return RC ( rcVFS, rcResolver, rcResolving, rcType, rcUnrecognized );
+    }
+
+   return rc;
+}
+
+/* LocalResolve
+ *  resolve an accession into a VPath or not found
+ *
+ *  1. expand accession according to algorithm
+ *  2. search all volumes for accession
+ *  3. return not found or new VPath
+ */
+static
+rc_t VResolverAlgLocalResolve ( const VResolverAlg *self,
+    const KDirectory *wd, const VResolverAccToken *tok,
+    const VPath ** path, bool legacy_wgs_refseq, bool for_cache )
+{
+    KPathType kpt;
+    uint32_t i, count;
+
+    /* expanded accession */
+    String exp;
+    size_t size;
+    char expanded [ 256 ];
+
+    /* in some cases, "root" is NULL */
+    const String *vol, *root = self -> root;
+
+    /* expand the accession */
+    rc_t rc = expand_algorithm ( self, tok, expanded, sizeof expanded, & size, legacy_wgs_refseq );
+
+    /* should never have a problem here... */
+    if ( rc != 0 )
+        return rc;
+
+    /* if this is to detect a cache file, append extension */
+    if ( for_cache )
+    {
+        size += string_copy ( & expanded [ size ], sizeof expanded - size, ".cache", sizeof ".cache" - 1 );
+        if ( size == sizeof expanded )
+            return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+    }
+
+    /* turn the expanded portion into a String
+       we know that size is also length due to
+       accession content rules */
+    StringInit ( & exp, expanded, size, ( uint32_t ) size );
+
+    /* remove the cache extension */
+    if ( for_cache )
+    {
+        exp . len -= sizeof ".cache" - 1;
+        exp . size -= sizeof ".cache" - 1;
+    }
+
+    /* now search all volumes */
+    count = VectorLength ( & self -> vols );
+    if ( root == NULL )
+    {
+        for ( i = 0; i < count; ++ i )
+        {
+            vol = VectorGet ( & self -> vols, i );
+            kpt = KDirectoryPathType ( wd, "%.*s/%.*s"
+                , ( int ) vol -> size, vol -> addr
+                , ( int ) size, expanded );
+            switch ( kpt & ~ kptAlias )
+            {
+            case kptFile:
+            case kptDir:
+                if ( legacy_wgs_refseq )
+                    return VResolverAlgMakeLocalWGSRefseqURI ( self, vol, & exp, & tok -> acc, path );
+                return VResolverAlgMakeLocalPath ( self, vol, & exp, path );
+            default:
+                break;
+            }
+        }
+    }
+    else
+    {
+        for ( i = 0; i < count; ++ i )
+        {
+            vol = VectorGet ( & self -> vols, i );
+            kpt = KDirectoryPathType ( wd, "%.*s/%.*s/%.*s"
+                , ( int ) root -> size, root -> addr
+                , ( int ) vol -> size, vol -> addr
+                , ( int ) size, expanded );
+            switch ( kpt & ~ kptAlias )
+            {
+            case kptFile:
+            case kptDir:
+                if ( legacy_wgs_refseq )
+                    return VResolverAlgMakeLocalWGSRefseqURI ( self, vol, & exp, & tok -> acc, path );
+                return VResolverAlgMakeLocalPath ( self, vol, & exp, path );
+            default:
+                break;
+            }
+        }
+    }
+    
+    return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+}
+
+
+/* ParseResolverCGIResponse_1_0
+ *  expect single row table, with this structure:
+ *
+ *  <accession>|<download-ticket>|<url>|<result-code>|<message>
+ */
+static
+rc_t VResolverAlgParseResolverCGIResponse_1_0 ( const char *start, size_t size, const VPath ** path, const String *acc )
+{
+    rc_t rc;
+    KLogLevel lvl;
+    uint32_t result_code;
+    const char *url_start, *url_end;
+    const char *ticket_start, *ticket_end;
+
+    /* skip over accession */
+    const char *end = start + size;
+    const char *sep = string_chr ( start, size, '|' );
+    if ( sep == NULL )
+        return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+
+    /* get the download-ticket */
+    start = sep + 1;
+    sep = string_chr ( start, end - start, '|' );
+    if ( sep == NULL )
+        return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+
+    /* capture ticket */
+    ticket_start = start;
+    ticket_end = sep;
+
+    /* get the url */
+    start = sep + 1;
+    sep = string_chr ( start, end - start, '|' );
+    if ( sep == NULL )
+        return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+
+    /* capture url */
+    url_start = start;
+    url_end = sep;
+
+    /* get the result code */
+    start = sep + 1;
+    sep = string_chr ( start, end - start, '|' );
+    if ( sep == NULL )
+        return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+    result_code = strtoul ( start, NULL, 10 );
+
+    /* get the message */
+    start = sep + 1;
+    sep = string_chr ( start, end - start, '\n' );
+    if ( sep == NULL )
+    {
+        sep = string_chr ( start, end - start, '\r' );
+        if ( sep == NULL )
+            sep = end;
+    }
+    else if ( sep > start && sep [ -1 ] == '\r' )
+    {
+        -- sep;
+    }
+
+    switch ( result_code / 100 )
+    {
+    case 1:
+        /* informational response
+           not much we can do here */
+        lvl = klogInt;
+        rc = RC ( rcVFS, rcResolver, rcResolving, rcError, rcUnexpected );
+        break;
+
+    case 2:
+        /* successful response
+           but can only handle 200 */
+        if ( result_code == 200 )
+        {
+            /* detect protected response */
+            if ( ticket_end > ticket_start )
+            {
+                return VPathMakeFmt ( ( VPath** ) path, "%.*s?tic=%.*s"
+                    , ( uint32_t ) ( url_end - url_start ), url_start
+                    , ( uint32_t ) ( ticket_end - ticket_start ), ticket_start
+                );
+            }
+            
+            /* normal public response */
+            return VPathMakeFmt ( ( VPath** ) path, "%.*s", ( uint32_t ) ( url_end - url_start ), url_start );
+        }
+
+        lvl = klogInt;
+        rc = RC ( rcVFS, rcResolver, rcResolving, rcError, rcUnexpected );
+        break;
+
+    case 3:
+        /* redirection
+           currently this is being handled by our request object */
+        lvl = klogInt;
+        rc = RC ( rcVFS, rcResolver, rcResolving, rcError, rcUnexpected );
+        break;
+
+    case 4:
+        /* client error */
+        lvl = klogErr;
+        switch ( result_code )
+        {
+        case 400:
+            rc = RC ( rcVFS, rcResolver, rcResolving, rcMessage, rcInvalid );
+            break;
+        case 401:
+        case 403:
+            rc = RC ( rcVFS, rcResolver, rcResolving, rcQuery, rcUnauthorized );
+            break;
+        case 404:
+            return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+        case 410:
+            rc = RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+            break;
+        default:
+            rc = RC ( rcVFS, rcResolver, rcResolving, rcError, rcUnexpected );
+        }
+        break;
+
+    case 5:
+        /* server error */
+        lvl = klogSys;
+        switch ( result_code )
+        {
+        case 503:
+            rc = RC ( rcVFS, rcResolver, rcResolving, rcDatabase, rcNotAvailable );
+            break;
+        case 504:
+            rc = RC ( rcVFS, rcResolver, rcResolving, rcTimeout, rcExhausted );
+            break;
+        default:
+            rc = RC ( rcVFS, rcResolver, rcResolving, rcError, rcUnexpected );
+        }
+        break;
+
+    default:
+        lvl = klogInt;
+        rc = RC ( rcVFS, rcResolver, rcResolving, rcError, rcUnexpected );
+    }
+
+    /* log message to user */
+    PLOGERR ( lvl, ( lvl, rc, "failed to resolve accession '$(acc)' - $(msg) ( $(code) )",
+        "acc=%S,msg=%.*s,code=%u", acc, ( uint32_t ) ( sep - start ), start, result_code ) );
+    return rc;
+}
+
+
+/* ParseResolverCGIResponse
+ *  the response should be NUL terminated
+ *  but should also be close to the size of result
+ */
+static
+rc_t VResolverAlgParseResolverCGIResponse ( const KDataBuffer *result, const VPath ** path, const String *acc )
+{
+    /* the textual response */
+    const char *start = ( const void* ) result -> base;
+    size_t i, size = KDataBufferBytes ( result );
+
+    /* peel back buffer to significant bytes */
+    while ( size > 0 && start [ size - 1 ] == 0 )
+        -- size;
+
+    /* skip over blanks */
+    for ( i = 0; i < size; ++ i )
+    {
+        if ( ! isspace ( start [ i ] ) )
+            break;
+    }
+
+    /* at this point, we expect only version 1.0 */
+    if ( string_cmp ( & start [ i ], size - i, "#1.0", sizeof "#1.0" - 1, sizeof "#1.0" - 1 ) == 0 )
+    {
+        do
+        {
+            /* accept version line */
+            i += sizeof "#1.0" - 1;
+
+            /* must be followed by eoln */
+            if ( start [ i ] == '\r' && start [ i + 1 ] == '\n' )
+                i += 2;
+            else if ( start [ i ] == '\n' )
+                i += 1;
+            else
+                break;
+
+            /* parse 1.0 response table */
+            return VResolverAlgParseResolverCGIResponse_1_0 ( & start [ i ], size - i, path, acc );
+        }
+        while ( false );
+    }
+
+    return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+}
+
+
+/* RemoteProtectedResolve
+ *  use NCBI CGI to resolve accession into URL
+ */
+static
+rc_t VResolverAlgRemoteProtectedResolve ( const VResolverAlg *self,
+    const KNSManager *kns, const String *acc,
+    const VPath ** path, bool legacy_wgs_refseq )
+{
+    struct KCurlRequest *req;
+    rc_t rc = KNSManagerMakeRequest ( kns, & req, self -> root -> addr, false );
+    if ( rc == 0 )
+    {
+        String name, val;
+
+        /* build up POST information: */
+        CONST_STRING ( & name, "version" );
+        CONST_STRING (& val, "1.0" );
+        rc = KCurlRequestAddSField ( req, & name, & val );
+        if ( rc == 0 )
+        {
+            CONST_STRING ( & name, "acc" );
+            rc = KCurlRequestAddSField ( req, & name, acc );
+        }
+        if ( rc == 0 && legacy_wgs_refseq )
+        {
+            CONST_STRING ( & name, "ctx" );
+            CONST_STRING (& val, "refseq" );
+            rc = KCurlRequestAddSField ( req, & name, & val );
+        }
+        if ( rc == 0 && self -> ticket != NULL )
+        {
+            CONST_STRING ( & name, "tic" );
+            rc = KCurlRequestAddSField ( req, & name, self -> ticket );
+        }
+
+        /* execute post */
+        if ( rc == 0 )
+        {
+            KDataBuffer result;
+            memset ( & result, 0, sizeof result );
+            rc = KCurlRequestPerform ( req, & result );
+            if ( rc == 0 )
+            {
+                /* expect a table as a NUL-terminated string, but
+                   having close to the number of bytes in results */
+                rc = VResolverAlgParseResolverCGIResponse ( & result, path, acc );
+                KDataBufferWhack ( & result );
+            }
+        }
+
+        KCurlRequestRelease ( req );
+    }
+
+    return rc == 0 ? 0 : RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+}
+
+/* RemoteResolve
+ *  resolve an accession into a VPath or not found
+ *
+ *  1. expand accession according to algorithm
+ *  2. search all volumes for accession
+ *  3. return not found or new VPath
+ */
+static
+rc_t VResolverAlgRemoteResolve ( const VResolverAlg *self,
+    const KNSManager *kns, const VResolverAccToken *tok,
+    const VPath ** path, const KFile ** opt_file_rtn,
+    bool legacy_wgs_refseq )
+{
+    rc_t rc;
+    uint32_t i, count;
+
+    /* expanded accession */
+    String exp;
+    size_t size;
+    char expanded [ 256 ];
+
+    const String *root;
+
+    /* check for download ticket */
+    if ( self -> alg_id == algCGI
+#if NO_LEGACY_WGS_REFSEQ_CGI
+         && ! legacy_wgs_refseq
+#endif
+        )
+    {
+        rc = VResolverAlgRemoteProtectedResolve ( self,
+            kns, & tok -> acc, path, legacy_wgs_refseq );
+        if (rc == 0 && path != NULL && *path != NULL &&
+            opt_file_rtn != NULL && *opt_file_rtn == NULL)
+        {
+            const String *s = NULL;
+            rc_t rc = VPathMakeString(*path, &s);
+            if (rc != 0) {
+                LOGERR(klogInt, rc,
+                    "failed to make string from remote protected path");
+            }
+            else {
+                rc = KCurlFileMake(opt_file_rtn, s->addr, false);
+                if (rc != 0) {
+                    PLOGERR(klogInt, (klogInt, rc,
+                        "failed to open file for $(path)", "path=%s", s->addr));
+                }
+                free((void*)s);
+            }
+        }
+        return rc;
+    }
+
+    /* for remote, root can never be NULL */
+    root = self -> root;
+
+    /* expand the accession */
+    rc = expand_algorithm ( self, tok, expanded, sizeof expanded, & size, legacy_wgs_refseq );
+
+    /* should never have a problem here... */
+    if ( rc != 0 )
+        return rc;
+
+    /* turn the expanded portion into a String
+       we know that size is also length due to
+       accession content rules */
+    StringInit ( & exp, expanded, size, ( uint32_t ) size );
+
+    /* now search all remote volumes */
+    count = VectorLength ( & self -> vols );
+    for ( i = 0; i < count; ++ i )
+    {
+        char url [ 8192 ];
+        const String *vol = VectorGet ( & self -> vols, i );
+        rc = string_printf ( url, sizeof url, NULL, "%S/%S/%S", root, vol, & exp );
+        if ( rc == 0 )
+        {
+            const KFile *f;
+            rc = KCurlFileMake ( & f, url, false );
+            if ( rc == 0 )
+            {
+                if ( opt_file_rtn != NULL )
+                    * opt_file_rtn = f;
+                else
+                    KFileRelease ( f );
+
+                if ( legacy_wgs_refseq )
+                    return VResolverAlgMakeRemoteWGSRefseqURI ( self, url, & tok -> acc, path );
+                return VResolverAlgMakeRemotePath ( self, url, path );
+            }
+        }
+    }
+    
+    return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+}
+
+
+/* CacheResolve
+ *  try to resolve accession for currently cached file
+ */
+static
+rc_t VResolverAlgCacheResolve ( const VResolverAlg *self,
+    const KDirectory *wd, const VResolverAccToken *tok,
+    const VPath ** path, bool legacy_wgs_refseq )
+{
+    /* see if the cache file already exists */
+    const bool for_cache = true;
+    rc_t rc = VResolverAlgLocalResolve ( self, wd, tok, path, legacy_wgs_refseq, for_cache );
+    if ( rc == 0 )
+        return 0;
+
+    /* TBD - see if any of these volumes is a good candidate for creating a file */
+
+    return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+}
+
+
+
+/* MakeCachePath
+ *  we have an accession that matches this volume
+ *  create a path for it
+ */
+static
+rc_t VResolverAlgMakeCachePath ( const VResolverAlg *self,
+    const VResolverAccToken *tok, const VPath ** path, bool legacy_wgs_refseq )
+{
+    uint32_t i, count;
+
+    /* expanded accession */
+    String exp;
+    size_t size;
+    char expanded [ 256 ];
+
+    const String *vol;
+
+    /* expand the accession */
+    rc_t rc = expand_algorithm ( self, tok, expanded, sizeof expanded, & size, legacy_wgs_refseq );
+
+    /* should never have a problem here... */
+    if ( rc != 0 )
+        return rc;
+
+    /* turn the expanded portion into a String
+       we know that size is also length due to
+       accession content rules */
+    StringInit ( & exp, expanded, size, ( uint32_t ) size );
+
+    /* now search all volumes */
+    count = VectorLength ( & self -> vols );
+    for ( i = 0; i < count; ++ i )
+    {
+        vol = VectorGet ( & self -> vols, i );
+        return VResolverAlgMakeLocalPath ( self, vol, & exp, path );
+    }
+    
+    return RC ( rcVFS, rcResolver, rcResolving, rcPath, rcNotFound );
+}
+
+
+
+/*--------------------------------------------------------------------------
+ * VResolver
+ */
+struct VResolver
+{
+    /* root paths - stored as String* */
+    Vector roots;
+
+    /* volume algorithms - stored as VResolverAlg* */
+    Vector local;
+    Vector remote;
+
+    /* working directory for testing local paths */
+    const KDirectory *wd;
+
+    /* if there is a protected remote resolver,
+       we will need a KNS manager */
+    const KNSManager *kns;
+
+    /* if there is a working protected repository,
+       store the download ticket here */
+    const String *ticket;
+
+    KRefcount refcount;
+
+    /* counters for various app volumes */
+    uint32_t num_app_vols [ appCount ];
+};
+
+
+/* "process" global settings
+ *  actually, they are library-closure global
+ */
+static atomic32_t enable_local, enable_remote, enable_cache;
+
+
+/* Whack
+ */
+static
+rc_t VResolverWhack ( VResolver *self )
+{
+    KRefcountWhack ( & self -> refcount, "VResolver" );
+
+    /* drop all remote volume sets */
+    VectorWhack ( & self -> remote, VResolverAlgWhack, NULL );
+
+    /* drop local volume sets */
+    VectorWhack ( & self -> local, VResolverAlgWhack, NULL );
+
+    /* drop download ticket */
+    if ( self -> ticket != NULL )
+        StringWhack ( ( String* ) self -> ticket );
+
+    /* drop root paths */
+    VectorWhack ( & self -> roots, string_whack, NULL );
+
+    /* release kns */
+    if ( self -> kns != NULL )
+        KNSManagerRelease ( self -> kns );
+
+    /* release directory onto local file system */
+    KDirectoryRelease ( self -> wd );
+
+    free ( self );
+    return 0;
+}
+
+
+/* AddRef
+ * Release
+ */
+LIB_EXPORT
+rc_t CC VResolverAddRef ( const VResolver * self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "VResolver" ) )
+        {
+        case krefOkay:
+            break;
+        case krefZero:
+            return RC ( rcVFS, rcResolver, rcAttaching, rcRefcount, rcIncorrect );
+        case krefLimit:
+            return RC ( rcVFS, rcResolver, rcAttaching, rcRefcount, rcExhausted );
+        case krefNegative:
+            return RC ( rcVFS, rcResolver, rcAttaching, rcRefcount, rcInvalid );
+        default:
+            return RC ( rcVFS, rcResolver, rcAttaching, rcRefcount, rcUnknown );
+        }
+    }
+    return 0;
+}
+
+LIB_EXPORT
+rc_t CC VResolverRelease ( const VResolver * self )
+{
+    rc_t rc = 0;
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "VResolver" ) )
+        {
+        case krefOkay:
+        case krefZero:
+            break;
+        case krefWhack:
+            VResolverWhack ( ( VResolver* ) self );
+            break;
+        case krefNegative:
+            return RC ( rcVFS, rcResolver, rcAttaching, rcRefcount, rcInvalid );
+        default:
+            rc = RC ( rcVFS, rcResolver, rcAttaching, rcRefcount, rcUnknown );
+            break;            
+        }
+    }
+    return rc;
+}
+
+
+/* get_accession_code
+ */
+static
+uint32_t get_accession_code ( const String * accession, VResolverAccToken *tok )
+{
+#if USE_VPATH_OPTIONS_STRINGS
+#error this thing is wrong
+#else
+    uint32_t code;
+
+    const char *acc = accession -> addr;
+    size_t i, size = accession -> size;
+
+    /* capture the whole accession */
+    tok -> acc = * accession;
+
+    /* scan prefix or alpha */
+    for ( i = 0; i < size; ++ i )
+    {
+        if ( ! isalpha ( acc [ i ] ) )
+            break;
+    }
+
+    /* terrible situation - unrecognizable */
+    if ( i == size || i == 0 || i >= 16 )
+    {
+        StringInit ( & tok -> prefix, acc, 0, 0 );
+        StringInit ( & tok -> alpha, acc, i, i );
+        StringInit ( & tok -> digits, & acc [ i ], 0, 0 );
+        tok -> ext1 = tok -> ext2 = tok -> digits;
+        return 0;
+    }
+
+    /* if stopped on '_', we have a prefix */
+    if ( acc [ i ] == '_' )
+    {
+        /* prefix
+           store only its presence, not length */
+        code = 1 << 4 * 4;
+        StringInit ( & tok -> prefix, acc, i, i );
+
+        /* remove prefix */
+        acc += ++ i;
+        size -= i;
+
+        /* scan for alpha */
+        for ( i = 0; i < size; ++ i )
+        {
+            if ( ! isalpha ( acc [ i ] ) )
+                break;
+        }
+
+        if ( i == size || i >= 16 )
+        {
+            StringInit ( & tok -> alpha, acc, i, i );
+            StringInit ( & tok -> digits, & acc [ i ], 0, 0 );
+            tok -> ext1 = tok -> ext2 = tok -> digits;
+            return 0;
+        }
+
+        code |= i << 4 * 3;
+        StringInit ( & tok -> alpha, acc, i, i );
+    }
+    else if ( ! isdigit ( acc [ i ] ) )
+    {
+        StringInit ( & tok -> prefix, acc, 0, 0 );
+        StringInit ( & tok -> alpha, acc, i, i );
+        StringInit ( & tok -> digits, & acc [ i ], 0, 0 );
+        tok -> ext1 = tok -> ext2 = tok -> digits;
+        return 0;
+    }
+    else
+    {
+        /* alpha */
+        code = i << 4 * 3;
+        StringInit ( & tok -> prefix, acc, 0, 0 );
+        StringInit ( & tok -> alpha, acc, i, i );
+    }
+
+    /* remove alpha */
+    acc += i;
+    size -= i;
+
+    /* scan digits */
+    for ( i = 0; i < size; ++ i )
+    {
+        if ( ! isdigit ( acc [ i ] ) )
+            break;
+    }
+
+    /* record digits */
+    StringInit ( & tok -> digits, acc, i, i );
+    StringInit ( & tok -> ext1, & acc [ i ], 0, 0 );
+    tok -> ext2 = tok -> ext1;
+
+    if ( i == 0 || i >= 16 )
+        return 0;
+
+    code |= i << 4 * 2;
+
+    /* normal return point for SRA */
+    if ( i == size )
+        return code;
+
+    /* check for extension */
+    if ( acc [ i ] != '.' )
+        return 0;
+
+    /* remove digit */
+    acc += ++ i;
+    size -= i;
+
+    /* scan numeric extension */
+    for ( i = 0; i < size; ++ i )
+    {
+        if ( ! isdigit ( acc [ i ] ) )
+            break;
+    }
+
+    if ( i == 0 || i >= 16 )
+        return 0;
+
+    /* record the actual extension */
+    StringInit ( & tok -> ext1, acc, i, i );
+    /* codify the extension simply as present, not by its length */
+    code |= 1 << 4 * 1;
+
+    if ( i == size )
+        return code;
+
+    if ( acc [ i ] != '.' )
+        return 0;
+
+
+    /* remove first extension */
+    acc += ++ i;
+    size -= i;
+
+    /* scan 2nd numeric extension */
+    for ( i = 0; i < size; ++ i )
+    {
+        if ( ! isdigit ( acc [ i ] ) )
+            break;
+    }
+
+    if ( i == 0 || i >= 16 )
+        return 0;
+
+    StringInit ( & tok -> ext2, acc, i, i );
+    code |= 1 << 4 * 0;
+
+    if ( i == size )
+        return code;
+
+    /* no other patterns are accepted */
+    return 0;
+#endif
+}
+
+
+/* get_accession_app
+ */
+static
+VResolverAppID get_accession_app ( const String * accession, bool refseq_ctx,
+    VResolverAccToken *tok, bool *legacy_wgs_refseq )
+{
+    VResolverAppID app;
+    uint32_t code = get_accession_code ( accession, tok );
+
+    /* disregard extensions at this point */
+    switch ( code >> 4 * 2 )
+    {
+    case 0x015: /* e.g. "J01415" or "J01415.2"     */
+    case 0x026: /* e.g. "CM000071" or "CM000039.2" */
+    case 0x126: /* e.g. "NZ_DS995509.1"            */
+        app = appREFSEQ;
+        break;
+
+    case 0x036: /* e.g. "SRR012345"    */
+    case 0x037: /* e.g. "SRR0123456"   */
+    case 0x038: /* e.g. "SRR01234567"  */
+    case 0x039: /* e.g. "SRR012345678" */
+        app = appSRA;
+        break;
+
+    case 0x106: /* e.g. "NC_000012.10"                      */
+    case 0x109: /* e.g. "NW_003315935.1", "GPC_000000393.1" */
+        app = appREFSEQ;
+        break;
+
+    case 0x042: /* e.g. "AAAB01" is WGS package name */
+    case 0x048: /* e.g. "AAAA01000001"               */
+    case 0x049: /* contig can be 6 or 7 digits       */
+    case 0x142: /* e.g. "NZ_AAEW01"                  */
+    case 0x148: /* e.g. "NZ_AAEW01000001"            */
+    case 0x149:
+        app = appWGS;
+        break;
+
+    default:
+        /* TBD - people appear to be able to throw anything into refseq,
+           so anything unrecognized we may as well test out there...
+           but this should not stay the case */
+        app = appREFSEQ;
+    }
+
+    if ( app == appWGS )
+    {
+        /* if we know this is for refseq, clobber it here */
+        if ( refseq_ctx )
+        {
+            app = appREFSEQ;
+            * legacy_wgs_refseq = true;
+        }
+    }
+
+    return app;
+}
+
+
+/* LocalResolve
+ *  resolve an accession into a VPath or not found
+ *
+ *  1. determine the type of accession we have, i.e. its "app"
+ *  2. search all local algorithms of app type for accession
+ *  3. return not found or new VPath
+ */
+static
+rc_t VResolverLocalResolve ( const VResolver *self,
+    const String * accession, const VPath ** path, bool refseq_ctx )
+{
+    rc_t rc;
+    uint32_t i, count;
+
+    VResolverAccToken tok;
+    bool legacy_wgs_refseq = false;
+    VResolverAppID app = get_accession_app ( accession, refseq_ctx, & tok, & legacy_wgs_refseq );
+
+    /* search all local volumes by app and accession algorithm expansion */
+    count = VectorLength ( & self -> local );
+    for ( i = 0; i < count; ++ i )
+    {
+        const VResolverAlg *alg = VectorGet ( & self -> local, i );
+        if ( alg -> app_id == app )
+        {
+            const bool for_cache = false;
+            rc = VResolverAlgLocalResolve ( alg, self -> wd, & tok, path, legacy_wgs_refseq, for_cache );
+            if ( rc == 0 )
+                return 0;
+        }
+    }
+
+    return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+}
+
+static
+bool VPathHasRefseqContext ( const VPath * accession )
+{
+    size_t num_read;
+    char option [ 64 ];
+    rc_t rc = VPathOption ( accession, vpopt_vdb_ctx, option, sizeof option, & num_read );
+    if ( rc != 0 )
+        return false;
+    return ( num_read == sizeof "refseq" - 1 &&
+             strcase_cmp ( "refseq", sizeof "refseq" - 1,
+                           option, num_read, num_read ) == 0 );
+}
+
+
+/* Local
+ *  Find an existing local file/directory that is named by the accession.
+ *  rcState of rcNotFound means it does not exist.
+ *
+ *  other rc code for failure are possible.
+ *
+ *  Accession must be an ncbi-acc scheme or a simple name with no 
+ *  directory paths.
+ */
+LIB_EXPORT
+rc_t CC VResolverLocal ( const VResolver * self,
+    const VPath * accession, const VPath ** path )
+{
+    rc_t rc;
+
+    if ( path == NULL )
+        rc = RC ( rcVFS, rcResolver, rcResolving, rcParam, rcNull );
+    else
+    {
+        * path = NULL;
+
+        if ( self == NULL )
+            rc = RC ( rcVFS, rcResolver, rcResolving, rcSelf, rcNull );
+        else if ( accession == NULL )
+            rc = RC ( rcVFS, rcResolver, rcResolving, rcPath, rcNull );
+        else
+        {
+            bool refseq_ctx = false;
+            VPUri_t uri_type = VPathGetUri_t ( accession );
+            switch ( uri_type )
+            {
+            case vpuri_none:
+                /* this is a simple spec -
+                   check for not being a POSIX path */
+#if USE_VPATH_OPTIONS_STRINGS
+#error this is wrong
+#else
+                if ( string_chr ( accession -> path . addr, accession -> path . size, '/' ) == NULL )
+                    return VResolverLocalResolve ( self, & accession -> path, path, refseq_ctx );
+#endif
+
+                /* no break */
+            case vpuri_not_supported:
+            case vpuri_ncbi_vfs:
+#if SUPPORT_FILE_URL
+            case vpuri_file:
+#endif
+            case vpuri_http:
+            case vpuri_ftp:
+            case vpuri_ncbi_legrefseq:
+                rc = RC ( rcVFS, rcResolver, rcResolving, rcUri, rcIncorrect );
+                break;
+
+            case vpuri_ncbi_acc:
+            {
+                refseq_ctx = VPathHasRefseqContext ( accession );
+#if USE_VPATH_OPTIONS_STRINGS
+#error this is wrong
+#else
+                return VResolverLocalResolve ( self, & accession -> path, path, refseq_ctx );
+#endif
+            }
+
+            default:
+                rc = RC ( rcVFS, rcResolver, rcResolving, rcUri, rcInvalid );
+            }
+        }
+    }
+
+    return rc;
+}
+
+
+/* LocalEnable
+ *  modify settings for using local repositories,
+ *  meaning site, user-public and user-protected.
+ *
+ *  "enable" [ IN ] - enable or disable local access,
+ *  or follow settings in KConfig
+ *
+ *  returns the previous state of "remote-enabled" property
+ *
+ * NB - in VDB-2, the state is associated with library code
+ *  shared libraries in separate closures will have separate
+ *  state. this can only occur if dynamic ( manual ) loading of
+ *  shared libraries is used, and will not occur with normal
+ *  usage. in VDB-3 the state will be stored with the process,
+ *  not the library.
+ */
+LIB_EXPORT VResolverEnableState CC VResolverLocalEnable ( const VResolver * self, VResolverEnableState enable )
+{
+    int32_t val, cur, prior;
+
+    if ( self == NULL )
+        return false;
+
+    /* convert "VResolverEnableState" to 32-bit signed integer for atomic operation */
+    val = ( int32_t ) enable;
+
+    /* before performing atomic swap, get the current setting,
+       and return right away if it is already set correctly */
+    prior = atomic32_read ( & enable_local );
+    if ( prior != val ) do
+    {
+        cur = prior;
+        prior = atomic32_test_and_set ( & enable_local, val, prior );
+    }
+    while ( prior != cur );
+
+    return prior;
+}
+
+
+/* RemoteEnable
+ *  apply or remove a process-wide enabling of remote access
+ *  regardless of configuration settings
+ *
+ *  "enable" [ IN ] - if "true", enable all remote access
+ *  if false, use settings from configuration.
+ *
+ *  returns the previous state of "remote-enabled" property
+ *
+ * NB - in VDB-2, the state is associated with library code
+ *  shared libraries in separate closures will have separate
+ *  state. this can only occur if dynamic ( manual ) loading of
+ *  shared libraries is used, and will not occur with normal
+ *  usage. in VDB-3 the state will be stored with the process,
+ *  not the library.
+ */
+LIB_EXPORT VResolverEnableState CC VResolverRemoteEnable ( const VResolver * self, VResolverEnableState enable )
+{
+    int32_t val, cur, prior;
+
+    if ( self == NULL )
+        return false;
+
+    /* convert "VResolverEnableState" to 32-bit signed integer for atomic operation */
+    val = ( int32_t ) enable;
+
+    /* before performing atomic swap, get the current setting,
+       and return right away if it is already set correctly */
+    prior = atomic32_read ( & enable_remote );
+    if ( prior != val ) do
+    {
+        cur = prior;
+        prior = atomic32_test_and_set ( & enable_remote, val, prior );
+    }
+    while ( prior != cur );
+
+    return prior;
+}
+
+
+/* CacheEnable
+ *  modify settings for caching files in user repositories
+ *
+ *  "enable" [ IN ] - enable or disable user repository cache,
+ *  or follow settings in KConfig
+ *
+ *  returns the previous state of "cache-enabled" property
+ *
+ * NB - in VDB-2, the state is associated with library code
+ *  shared libraries in separate closures will have separate
+ *  state. this can only occur if dynamic ( manual ) loading of
+ *  shared libraries is used, and will not occur with normal
+ *  usage. in VDB-3 the state will be stored with the process,
+ *  not the library.
+ */
+LIB_EXPORT VResolverEnableState CC VResolverCacheEnable ( const VResolver * self, VResolverEnableState enable )
+{
+    int32_t val, cur, prior;
+
+    if ( self == NULL )
+        return false;
+
+    /* convert "VResolverEnableState" to 32-bit signed integer for atomic operation */
+    val = ( int32_t ) enable;
+
+    /* before performing atomic swap, get the current setting,
+       and return right away if it is already set correctly */
+    prior = atomic32_read ( & enable_cache );
+    if ( prior != val ) do
+    {
+        cur = prior;
+        prior = atomic32_test_and_set ( & enable_cache, val, prior );
+    }
+    while ( prior != cur );
+
+    return prior;
+}
+
+
+/* RemoteResolve
+ *  resolve an accession into a remote VPath or not found
+ *  may optionally open a KFile to the object in the process
+ *  of finding it
+ *
+ *  2. determine the type of accession we have, i.e. its "app"
+ *  3. search all local algorithms of app type for accession
+ *  4. return not found or new VPath
+ */
+static
+rc_t VResolverRemoteResolve ( const VResolver *self,
+    const String * accession, const VPath ** path,
+    const KFile ** opt_file_rtn, bool refseq_ctx )
+{
+    rc_t rc, try_rc;
+    uint32_t i, count;
+
+    VResolverAccToken tok;
+    VResolverAppID app, wildCard;
+    bool legacy_wgs_refseq = false;
+
+    /* here, determine whether remote access is globally disabled */
+    VResolverEnableState remote_state = atomic32_read ( & enable_remote );
+    if ( remote_state == vrAlwaysDisable )
+        return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+
+    /* subject the accession to pattern recognition */
+    app = get_accession_app ( accession, refseq_ctx, & tok, & legacy_wgs_refseq );
+
+    /* search all remote volumes by app and accession algorithm expansion */
+    count = VectorLength ( & self -> remote );
+
+    /* allow matching wildcard app */
+    wildCard = appAny;
+#if NO_REFSEQ_CGI
+    if ( app == appREFSEQ )
+        wildCard = -1;
+#endif
+
+    /* no error recorded yet */
+    rc = 0;
+
+    /* test for forced enable, which applies only to main guys
+       TBD - limit to main sub-category */
+    if ( remote_state == vrAlwaysEnable )
+    {
+        for ( i = 0; i < count; ++ i )
+        {
+            const VResolverAlg *alg = VectorGet ( & self -> remote, i );
+            if ( alg -> app_id == app || alg -> app_id == wildCard )
+            {
+                try_rc = VResolverAlgRemoteResolve ( alg, self -> kns, & tok, path, opt_file_rtn, legacy_wgs_refseq );
+                if ( try_rc == 0 )
+                    return 0;
+                if ( rc == 0 )
+                    rc = try_rc;
+            }
+        }
+    }
+    else
+    {
+        for ( i = 0; i < count; ++ i )
+        {
+            const VResolverAlg *alg = VectorGet ( & self -> remote, i );
+            if ( ( alg -> app_id == app || alg -> app_id == wildCard ) && ! alg -> disabled )
+            {
+                try_rc = VResolverAlgRemoteResolve ( alg, self -> kns, & tok, path, opt_file_rtn, legacy_wgs_refseq );
+                if ( try_rc == 0 )
+                    return 0;
+                if ( rc == 0 )
+                    rc = try_rc;
+            }
+        }
+    }
+
+    if ( rc != 0 )
+        return rc;
+
+    return RC ( rcVFS, rcResolver, rcResolving, rcName, rcNotFound );
+}
+
+
+/* Remote
+ *  Find an existing remote file that is named by the accession.
+ *
+ *  rcState of rcNotFound means it did not exist and can not be 
+ *  downloaded. Probably a bad accession name.
+ *
+ *  Need a specific rc for no network configured.
+ *  Need a specific rc for network access permitted.
+ *
+ *  Other rc code for failure are possible.
+ *
+ *  Accession must be an ncbi-acc scheme or a simple name with no 
+ *  directory paths.
+ *
+ *  "opt_file_rtn" [ OUT, NULL OKAY ] - optional return parameter for
+ *   any KFile that may be opened as a result of resolution. This can
+ *   happen if resolving an accession involves opening a URL to a
+ *   remote server, for example, in which case the KFile can be returned.
+ */
+LIB_EXPORT
+rc_t CC VResolverRemote ( const VResolver * self,
+    const VPath * accession, const VPath ** path,
+    const KFile ** opt_file_rtn )
+{
+    rc_t rc;
+
+    if ( path == NULL )
+        rc = RC ( rcVFS, rcResolver, rcResolving, rcParam, rcNull );
+    else
+    {
+        * path = NULL;
+
+        if ( opt_file_rtn != NULL )
+            * opt_file_rtn = NULL;
+
+        if ( self == NULL )
+            rc = RC ( rcVFS, rcResolver, rcResolving, rcSelf, rcNull );
+        else if ( accession == NULL )
+            rc = RC ( rcVFS, rcResolver, rcResolving, rcPath, rcNull );
+        else
+        {
+            bool refseq_ctx = false;
+            VPUri_t uri_type = VPathGetUri_t ( accession );
+            switch ( uri_type )
+            {
+            case vpuri_none:
+                /* this is a simple spec -
+                   check for not being a POSIX path */
+#if USE_VPATH_OPTIONS_STRINGS
+#error this is wrong
+#else
+                if ( string_chr ( accession -> path . addr, accession -> path . size, '/' ) == NULL )
+                    return VResolverRemoteResolve ( self, & accession -> path, path, opt_file_rtn, refseq_ctx );
+#endif
+
+                /* no break */
+            case vpuri_not_supported:
+            case vpuri_ncbi_vfs:
+#if SUPPORT_FILE_URL
+            case vpuri_file:
+#endif
+            case vpuri_http:
+            case vpuri_ftp:
+            case vpuri_ncbi_legrefseq:
+                rc = RC ( rcVFS, rcResolver, rcResolving, rcUri, rcIncorrect );
+                break;
+
+            case vpuri_ncbi_acc:
+            {
+                refseq_ctx = VPathHasRefseqContext ( accession );
+#if USE_VPATH_OPTIONS_STRINGS
+#error this is wrong
+#else
+                return VResolverRemoteResolve ( self, & accession -> path, path, opt_file_rtn, refseq_ctx );
+#endif
+            }
+
+            default:
+                rc = RC ( rcVFS, rcResolver, rcResolving, rcUri, rcInvalid );
+            }
+        }
+    }
+
+    return rc;
+}
+
+
+/* ExtractURLAccessionApp
+ *  examine a URL for accession portion,
+ *  and try to recognize what app it belongs to
+ */
+static
+VResolverAppID VResolverExtractURLAccessionApp ( const VResolver *self, const VPath * url,
+    String * accession, VResolverAccToken * tok, bool *legacy_wgs_refseq )
+{
+    const char *p;
+    bool refseq_ctx = false;
+
+    /* have the difficulty here of determining whether there is
+       a table fragment, which would indicate that the download
+       is appREFSEQ even if the accession indicates appWGS. */
+
+#if USE_VPATH_OPTIONS_STRINGS
+#error this is wrong
+#else
+    * accession = url -> path;
+    if ( url -> fragment != NULL && url -> fragment [ 0 ] != 0 )
+        refseq_ctx = true;
+#endif
+    p = string_rchr ( accession -> addr, accession -> size, '/' );
+    if ( p != NULL )
+    {
+        accession -> size -= ++ p - accession -> addr;
+        accession -> addr = p;
+        accession -> len = string_len ( p, accession -> size );
+    }
+    p = string_rchr ( accession -> addr, accession -> size, '.' );
+    if ( p != NULL )
+    {
+        if ( strcase_cmp ( p, accession -> size - ( p - accession -> addr ),
+                           ".sra", sizeof ".sra" - 1, -1 ) == 0 )
+        {
+            accession -> size -= sizeof ".sra" - 1;
+            accession -> len -= sizeof ".sra" - 1;
+        }
+        else if ( strcase_cmp ( p, accession -> size - ( p - accession -> addr ),
+                                ".wgs", sizeof ".wgs" - 1, -1 ) == 0 )
+        {
+            accession -> size -= sizeof ".wgs" - 1;
+            accession -> len -= sizeof ".wgs" - 1;
+        }
+    }
+
+    /* should have something looking like an accession.
+       determine its app to see if we were successful */
+    return get_accession_app ( accession, refseq_ctx, tok, legacy_wgs_refseq );
+}
+
+static
+bool VPathHasDownloadTicket ( const VPath * url )
+{
+    size_t num_read;
+    char option [ 64 ];
+    rc_t rc = VPathOption ( url, vpopt_gap_ticket, option, sizeof option, & num_read );
+    return rc == 0;
+}
+
+
+/* Cache
+ *  Find a cache directory that might or might not contain a partially
+ *  downloaded file.
+ *
+ *  Accession must be an ncbi-acc scheme, an http url or a simple name with no 
+ *  directory paths. All three should return the same directory URL as a VPath. (?)
+ *  Or should it be a directory or a file url depending upon finding a partial
+ *  download? This would require co-ordination with all download mechanisms that
+ *  we permit.
+ *
+ *  With refseq holding wgs objects we have a case were the downloaded file is not
+ *  named the same as the original accession as the file archive you want is a
+ *  container for other files.
+ *
+ *  Find local will give a path that has a special scheme in these cases. 
+ *  Find remote will give the url for the container that contains the accession
+ *  so using the returned VPath from resolve remote is better than the original
+ *  accession in this one case.  I think...
+ */
+LIB_EXPORT
+rc_t CC VResolverCache ( const VResolver * self,
+    const VPath * url, const VPath ** path, uint64_t file_size )
+{
+    rc_t rc;
+
+    VResolverEnableState cache_state = atomic32_read ( & enable_cache );
+
+    if ( path == NULL )
+        rc = RC ( rcVFS, rcResolver, rcResolving, rcParam, rcNull );
+    else
+    {
+        * path = NULL;
+
+        if ( self == NULL )
+            rc = RC ( rcVFS, rcResolver, rcResolving, rcSelf, rcNull );
+        else if ( url == NULL )
+            rc = RC ( rcVFS, rcResolver, rcResolving, rcParam, rcNull );
+        else if ( cache_state == vrAlwaysDisable )
+            rc = RC ( rcVFS, rcResolver, rcResolving, rcPath, rcNotFound );
+        else
+        {
+            VPUri_t uri_type = VPathGetUri_t ( url );
+            switch ( uri_type )
+            {
+            case vpuri_http:
+            {
+                String accession;
+                VResolverAccToken tok;
+                bool legacy_wgs_refseq = false;
+                VResolverAppID app = VResolverExtractURLAccessionApp ( self,
+                    url, & accession, & tok, & legacy_wgs_refseq );
+
+                /* going to walk the local volumes, and remember
+                   which one was best. actually, we have no algorithm
+                   for determining it, so it's just the comment for TBD */
+                const VResolverAlg *alg, *best = NULL;
+
+                /* search the volumes for a cache-enabled place */
+                uint32_t i, count = VectorLength ( & self -> local );
+
+                /* check for protected status by presence of a download ticket */
+                bool protected = VPathHasDownloadTicket ( url );
+
+                /* check for cache-enable override */
+                if ( cache_state == vrAlwaysEnable )
+                {
+                    for ( i = 0; i < count; ++ i )
+                    {
+                        alg = VectorGet ( & self -> local, i );
+                        if ( alg -> cache_capable && alg -> protected == protected &&
+                             ( alg -> app_id == app || alg -> app_id == appAny ) )
+                        {
+                            /* try to find an existing cache file
+                               NB - race condition exists unless
+                               we do something with lock files */
+                            rc = VResolverAlgCacheResolve ( alg, self -> wd, & tok, path, legacy_wgs_refseq );
+                            if ( rc == 0 )
+                                return 0;
+
+                            /* just remember the first as best for now */
+                            if ( best == NULL )
+                                best = alg;
+                        }
+                    }
+                }
+                else
+                {
+                    for ( i = 0; i < count; ++ i )
+                    {
+                        alg = VectorGet ( & self -> local, i );
+                        if ( alg -> cache_enabled && alg -> protected == protected &&
+                             ( alg -> app_id == app || alg -> app_id == appAny ) )
+                        {
+                            /* try to find an existing cache file
+                               NB - race condition exists unless
+                               we do something with lock files */
+                            rc = VResolverAlgCacheResolve ( alg, self -> wd, & tok, path, legacy_wgs_refseq );
+                            if ( rc == 0 )
+                                return 0;
+
+                            /* just remember the first as best for now */
+                            if ( best == NULL )
+                                best = alg;
+                        }
+                    }
+                }
+
+                /* no existing cache file was found,
+                   so create a new one using the best
+                   TBD - this should remember a volume path */
+                if ( best == NULL )
+                    rc = RC ( rcVFS, rcResolver, rcResolving, rcPath, rcNotFound );
+                else
+                    rc = VResolverAlgMakeCachePath ( best, & tok, path, legacy_wgs_refseq );
+                break;
+            }
+            default:
+                rc = RC ( rcVFS, rcResolver, rcResolving, rcUri, rcInvalid );
+            }
+        }
+    }
+
+    return rc;
+}
+
+
+/* LoadVolume
+ *  capture volume path and other information
+ */
+static
+rc_t VResolverAlgLoadVolume ( VResolverAlg *self, uint32_t *num_vols, const char *start, size_t size )
+{
+    rc_t rc = 0;
+
+#if 0
+    /* trim volume whitespace */
+    while ( size != 0 && isspace ( start [ 0 ] ) )
+    {
+        ++ start;
+        -- size;
+    }
+    while ( size != 0 && isspace ( start [ size - 1 ] ) )
+        -- size;
+#endif
+
+    /* trim trailing slashes */
+    while ( size != 0 && start [ size - 1 ] == '/' )
+        -- size;
+
+    /* now see if the string survives */
+    if ( size != 0 )
+    {
+        String loc_vol_str;
+        const String *vol_str;
+        StringInit ( & loc_vol_str, start, size, string_len ( start, size ) );
+        rc = StringCopy ( & vol_str, & loc_vol_str );
+        if ( rc == 0 )
+        {
+            rc = VectorAppend ( & self -> vols, NULL, vol_str );
+            if ( rc == 0 )
+            {
+                * num_vols += 1;
+                return 0;
+            }
+
+            StringWhack ( vol_str );
+        }
+    }
+
+    return rc;
+}
+
+/* LoadVolumes
+ *
+ *    path-list
+ *        = PATH
+ *        | <path-list> ':' PATH ;
+ */
+static
+rc_t VResolverAlgLoadVolumes ( VResolverAlg *self, uint32_t *num_vols, const String *vol_list )
+{
+    const char *start = vol_list -> addr;
+    const char *end = & vol_list -> addr [ vol_list -> size ];
+    const char *sep = string_chr ( start, end - start, ':' );
+    while ( sep != NULL )
+    {
+        rc_t rc = VResolverAlgLoadVolume ( self, num_vols, start, sep - start );
+        if ( rc != 0 )
+            return rc;
+        start = sep + 1;
+        sep = string_chr ( start, end - start, ':' );
+    }
+    return VResolverAlgLoadVolume ( self, num_vols, start, end - start );
+}
+
+/* LoadAlgVolumes
+ *
+ *    volumes
+ *        = <path-list> ;
+ */
+static
+rc_t VResolverLoadAlgVolumes ( Vector *algs, const String *root, const String *ticket,
+    VResolverCacheAllow allow_cache, VResolverAppID app_id, VResolverAlgID alg_id,
+     uint32_t *num_vols, const String *vol_list, bool protected, bool disabled, bool caching )
+{
+    VResolverAlg *alg;
+    rc_t rc = VResolverAlgMake ( & alg, root, app_id, alg_id, protected, disabled );
+    if ( rc == 0 )
+    {
+        alg -> ticket = ticket;
+        alg -> cache_capable = allow_cache == cacheAllow;
+        alg -> cache_enabled = caching;
+
+        if ( ticket != NULL )
+            alg -> alg_id = algCGI;
+
+        rc = VResolverAlgLoadVolumes ( alg, num_vols, vol_list );
+        if ( rc == 0 && VectorLength ( & alg -> vols ) != 0 )
+        {
+            rc = VectorAppend ( algs, NULL, alg );
+            if ( rc == 0 )
+                return 0;
+        }
+
+        VResolverAlgWhack ( alg, NULL );
+    }
+
+    return rc;
+}
+
+/* LoadApp
+ *
+ *    alg-block
+ *        = <alg-type> <volumes> ;
+ *
+ *    alg-type
+ *        = "flat" | "sraFlat" | "sra1024" | "sra1000" | "fuse1000"
+ *        | "refseq" | "wgs" | "fuseWGS" | "ncbi" | "ddbj" | "ebi" ;
+ */
+static
+rc_t VResolverLoadVolumes ( Vector *algs, const String *root, const String *ticket,
+    VResolverCacheAllow allow_cache, VResolverAppID app_id, uint32_t *num_vols,
+    const KConfigNode *vols, bool resolver_cgi, bool protected, bool disabled, bool caching )
+{
+    KNamelist *algnames;
+    rc_t rc = KConfigNodeListChildren ( vols, & algnames );
+    if ( rc == 0 )
+    {
+        uint32_t i, count;
+        rc = KNamelistCount ( algnames, & count );
+        for ( i = 0; i < count && rc == 0; ++ i )
+        {
+            const char *algname;
+            rc = KNamelistGet ( algnames, i, & algname );
+            if ( rc == 0 )
+            {
+                const KConfigNode *alg;
+                rc = KConfigNodeOpenNodeRead ( vols, & alg, algname );
+                if ( rc == 0 )
+                {
+                    VResolverAlgID alg_id = algUnknown;
+
+                    /* if using CGI for resolution */
+                    if ( resolver_cgi || strcmp ( algname, "cgi" ) == 0 )
+                        alg_id = algCGI;
+                    /* stored in a flat directory with ".sra" extension */
+                    else if ( strcmp ( algname, "sraFlat" ) == 0 )
+                        alg_id = algSRAFlat;
+                    /* stored in a three-level directory with 1K banks and ".sra" extension */
+                    else if ( strcmp ( algname, "sra1024" ) == 0 )
+                        alg_id = algSRA1024;
+                    /* stored in a three-level directory with 1000 banks and ".sra" extension */
+                    else if ( strcmp ( algname, "sra1000" ) == 0 )
+                        alg_id = algSRA1000;
+                    /* stored in a four-level directory with 1000 banks and ".sra" extension */
+                    else if ( strcmp ( algname, "fuse1000" ) == 0 )
+                        alg_id = algFUSE1000;
+                    /* stored in a flat directory with no extension */
+                    else if ( strcmp ( algname, "refseq" ) == 0 )
+                        alg_id = algREFSEQ;
+                    /* stored in a flat directory with no extension */
+                    else if ( strcmp ( algname, "wgsFlat" ) == 0 )
+                        alg_id = algWGSFlat;
+                    /* stored in a multi-level directory with no extension */
+                    else if ( strcmp ( algname, "wgs" ) == 0 )
+                        alg_id = algWGS;
+                    else if ( strcmp ( algname, "fuseWGS" ) == 0 )
+                        alg_id = algFuseWGS;
+                    /* stored in a three-level directory with 1K banks and no extension */
+                    else if ( strcmp ( algname, "ncbi" ) == 0 ||
+                              strcmp ( algname, "ddbj" ) == 0 )
+                        alg_id = algSRA_NCBI;
+                    /* stored in a three-level directory with 1000 banks and no extension */
+                    else if ( strcmp ( algname, "ebi" ) == 0 )
+                        alg_id = algSRA_EBI;
+
+                    if ( alg_id != algUnknown )
+                    {
+                        String *vol_list;
+                        rc = KConfigNodeReadString ( alg, & vol_list );
+                        if ( rc == 0 )
+                        {
+                            if ( StringLength ( vol_list ) != 0 )
+                            {
+                                rc = VResolverLoadAlgVolumes ( algs, root, ticket, allow_cache,
+                                    app_id, alg_id, num_vols, vol_list, protected, disabled, caching );
+                            }
+                            StringWhack ( vol_list );
+                        }
+                    }
+
+                    KConfigNodeRelease ( alg );
+                }
+            }
+        }
+
+        KNamelistRelease ( algnames );
+    }
+    return rc;
+}
+
+/* LoadApp
+ *
+ *    app
+ *        = [ <disabled> ] [ <cache-enabled> ] <vol-group> ;
+ *
+ *    disabled
+ *        = "disabled" '=' ( "true" | "false" ) ;
+ *
+ *    cache-enabled
+ *        = "cache-enabled" '=' ( "true" | "false" ) ;
+ *
+ *    vol-group
+ *        = "volumes" <alg-block>* ;
+ */
+static
+rc_t VResolverLoadApp ( VResolver *self, Vector *algs, const String *root, const String *ticket,
+    VResolverCacheAllow allow_cache, VResolverAppID app_id, uint32_t *num_vols,
+    const KConfigNode *app, bool resolver_cgi, bool protected, bool disabled, bool caching )
+{
+    const KConfigNode *node;
+
+    /* test for disabled app - it is entirely possible */
+    rc_t rc = KConfigNodeOpenNodeRead ( app, & node, "disabled" );
+    if ( rc == 0 )
+    {
+        bool app_disabled = false;
+        rc = KConfigNodeReadBool ( node, & app_disabled );
+        KConfigNodeRelease ( node );
+        if ( rc == 0 && app_disabled && algs == & self -> local )
+            return 0;
+        disabled |= app_disabled;
+    }
+
+    /* test again for cache enabled */
+    if ( allow_cache == cacheAllow )
+    {
+        rc = KConfigNodeOpenNodeRead ( app, & node, "cache-enabled" );
+        if ( rc == 0 )
+        {
+            /* allow this node to override current value */
+            bool cache;
+            rc = KConfigNodeReadBool ( node, & cache );
+            KConfigNodeRelease ( node );
+            if ( rc == 0 )
+                caching = cache;
+        }
+    }
+
+    /* get volumes */
+    rc = KConfigNodeOpenNodeRead ( app, & node, "volumes" );
+    if ( GetRCState ( rc ) == rcNotFound )
+        rc = 0;
+    else if ( rc == 0 )
+    {
+        rc = VResolverLoadVolumes ( algs, root, ticket, allow_cache,
+            app_id, num_vols, node, resolver_cgi, protected, disabled, caching );
+        KConfigNodeRelease ( node );
+    }
+
+    return rc;
+}
+
+/* LoadApps
+ *
+ *    app-block
+ *        = <app-name> <app> ;
+ *
+ *    app-name
+ *        = "refseq" | "sra" | "wgs" ;
+ */
+static
+rc_t VResolverLoadApps ( VResolver *self, Vector *algs, const String *root,
+    const String *ticket, VResolverCacheAllow allow_cache, const KConfigNode *apps,
+    bool resolver_cgi, bool protected, bool disabled, bool caching )
+{
+    KNamelist *appnames;
+    rc_t rc = KConfigNodeListChildren ( apps, & appnames );
+    if ( rc == 0 )
+    {
+        uint32_t i, count;
+        rc = KNamelistCount ( appnames, & count );
+        if ( resolver_cgi && rc == 0 && count == 0 )
+        {
+            VResolverAlg *cgi;
+            rc = VResolverAlgMake ( & cgi, root, appAny, algCGI, protected, disabled );
+            if ( rc == 0 )
+            {
+                rc = VectorAppend ( algs, NULL, cgi );
+                if ( rc == 0 )
+                {
+                    ++ self -> num_app_vols [ appAny ];
+                    return 0;
+                }
+            }
+        }
+        else for ( i = 0; i < count && rc == 0; ++ i )
+        {
+            const char *appname;
+            rc = KNamelistGet ( appnames, i, & appname );
+            if ( rc == 0 )
+            {
+                const KConfigNode *app;
+                rc = KConfigNodeOpenNodeRead ( apps, & app, appname );
+                if ( rc == 0 )
+                {
+                    VResolverAppID app_id = appUnknown;
+                    if ( strcmp ( appname, "refseq" ) == 0 )
+                        app_id = appREFSEQ;
+                    else if ( strcmp ( appname, "sra" ) == 0 )
+                        app_id = appSRA;
+                    else if ( strcmp ( appname, "wgs" ) == 0 )
+                        app_id = appWGS;
+
+                    rc = VResolverLoadApp ( self, algs, root, ticket, allow_cache, app_id,
+                        & self -> num_app_vols [ app_id ], app, resolver_cgi, protected, disabled, caching );
+
+                    KConfigNodeRelease ( app );
+                }
+            }
+        }
+        KNamelistRelease ( appnames );
+    }
+    return rc;
+}
+
+/* LoadRepo
+ *
+ *    repository
+ *        = [ <disabled> ] [ <cache-enabled> ] <root> <app-group> ;
+ *
+ *    disabled
+ *        = "disabled" '=' ( "true" | "false" ) ;
+ *
+ *    cache-enabled
+ *        = "cache-enabled" '=' ( "true" | "false" ) ;
+ *
+ *    root
+ *        = "root" '=' PATH ;
+ *
+ *    app-group
+ *        = "apps" <app-block>* ;
+ */
+static
+rc_t VResolverLoadRepo ( VResolver *self, Vector *algs, const KConfigNode *repo,
+    const String *ticket, VResolverCacheAllow allow_cache, bool protected )
+{
+    const KConfigNode *node;
+    bool caching, resolver_cgi;
+
+    /* test for disabled repository */
+    bool disabled = false;
+    rc_t rc = KConfigNodeOpenNodeRead ( repo, & node, "disabled" );
+    if ( rc == 0 )
+    {
+        rc = KConfigNodeReadBool ( node, & disabled );
+        KConfigNodeRelease ( node );
+
+        /* don't bother recording local, disabled repositories */
+        if ( rc == 0 && disabled && algs == & self -> local )
+            return 0;
+    }
+
+    /* check for caching */
+    caching = allow_cache;
+    if ( allow_cache )
+    {
+        rc = KConfigNodeOpenNodeRead ( repo, & node, "cache-enabled" );
+        if ( rc == 0 )
+        {
+            rc = KConfigNodeReadBool ( node, & caching );
+            KConfigNodeRelease ( node );
+            if ( rc != 0 )
+                caching = false;
+        }
+    }
+
+    /* cache-capable repositories cannot be remote resolvers */
+    resolver_cgi = false;
+    if ( allow_cache )
+        rc = KConfigNodeOpenNodeRead ( repo, & node, "root" );
+    else
+    {
+        /* check for specific resolver CGI */
+        rc = KConfigNodeOpenNodeRead ( repo, & node, "resolver-cgi" );
+        if ( rc == 0 )
+            resolver_cgi = true;
+        /* or get the repository root */
+        else if ( GetRCState ( rc ) == rcNotFound )
+        {
+            rc = KConfigNodeOpenNodeRead ( repo, & node, "root" );
+        }
+    }
+    if ( GetRCState ( rc ) == rcNotFound )
+        rc = 0;
+    else if ( rc == 0 )
+    {
+        /* read root as String */
+        String *root;
+        rc = KConfigNodeReadString ( node, & root );
+        KConfigNodeRelease ( node );
+        if ( GetRCState ( rc ) == rcNotFound )
+            rc = 0;
+        else if ( rc == 0 )
+        {
+            /* perform a bit of cleanup on root */
+            while ( root -> size != 0 && root -> addr [ root -> size - 1 ] == '/' )
+            {
+                /* this is terribly nasty, but known to be safe */
+                -- root -> len;
+                -- root -> size;
+            }
+
+            /* store string on VResolver for management purposes,
+               pass the loaned reference to sub-structures */
+            rc = VectorAppend ( & self -> roots, NULL, root );
+            if ( rc != 0 )
+                StringWhack ( root );
+            else
+            {
+                /* open the "apps" sub-node */
+                rc = KConfigNodeOpenNodeRead ( repo, & node, "apps" );
+                if ( rc == 0 )
+                {
+                    rc = VResolverLoadApps ( self, algs, root, ticket,
+                        allow_cache, node, resolver_cgi, protected, disabled, caching );
+                    KConfigNodeRelease ( node );
+                }
+                else if ( GetRCState ( rc ) == rcNotFound )
+                {
+                    rc = 0;
+                    if ( resolver_cgi )
+                    {
+                        VResolverAlg *cgi;
+                        rc = VResolverAlgMake ( & cgi, root, appAny, algCGI, protected, disabled );
+                        if ( rc == 0 )
+                        {
+                            cgi -> ticket = ticket;
+
+                            rc = VectorAppend ( algs, NULL, cgi );
+                            if ( rc == 0 )
+                            {
+                                ++ self -> num_app_vols [ appAny ];
+                                return 0;
+                            }
+                        }
+
+                        VResolverAlgWhack ( cgi, NULL );
+                    }
+                }
+            }
+        }
+    }
+
+    return rc;
+}
+
+
+/* LoadNamedRepo
+ *
+ *    repository-block
+ *        = ID <repository> ;
+ */
+static
+rc_t VResolverLoadNamedRepo ( VResolver *self, Vector *algs, const KConfigNode *sub,
+    const String *ticket, const char *name, VResolverCacheAllow allow_cache, bool protected )
+{
+    const KConfigNode *repo;
+    rc_t rc = KConfigNodeOpenNodeRead ( sub, & repo, name );
+    if ( GetRCState ( rc ) == rcNotFound )
+        rc = 0;
+    else if ( rc == 0 )
+    {
+        rc = VResolverLoadRepo ( self, algs, repo, ticket, allow_cache, protected );
+        KConfigNodeRelease ( repo );
+    }
+    return rc;
+}
+
+/* LoadSubCategory
+ *
+ *    sub-category-block
+ *        = <sub-category> <repository-block>* ;
+ *
+ *    sub-category
+ *        = "main" | "aux" | "protected"
+ *
+ *    repository-block
+ *        = ID <repository> ;
+ */
+static
+rc_t VResolverLoadSubCategory ( VResolver *self, Vector *algs, const KConfigNode *kfg,
+    const String *ticket, const char *sub_path, VResolverCacheAllow allow_cache, bool protected )
+{
+    const KConfigNode *sub;
+    rc_t rc = KConfigNodeOpenNodeRead ( kfg, & sub, sub_path );
+    if ( GetRCState ( rc ) == rcNotFound )
+        rc = 0;
+    else if ( rc == 0 )
+    {
+        KNamelist *children;
+        rc = KConfigNodeListChildren ( sub, & children );
+        if ( rc == 0 )
+        {
+            uint32_t i, count;
+            rc = KNamelistCount ( children, & count );
+            for ( i = 0; i < count && rc == 0; ++ i )
+            {
+                const char *name;
+                rc = KNamelistGet ( children, i, & name );
+                if ( rc == 0 )
+                    rc = VResolverLoadNamedRepo ( self, algs, sub, ticket, name, allow_cache, protected );
+            }
+
+            KNamelistRelease ( children );
+        }
+        KConfigNodeRelease ( sub );
+    }
+    return rc;
+}
+
+/* LoadProtected
+ *  special function to handle single, active protected workspace
+ */
+static
+rc_t VResolverLoadProtected ( VResolver *self, const KConfigNode *kfg, const char *rep_name )
+{
+    const KConfigNode *repo;
+    rc_t rc = KConfigNodeOpenNodeRead ( kfg, & repo, "user/protected/%s", rep_name );
+    if ( GetRCState ( rc ) == rcNotFound )
+        rc = 0;
+    else if ( rc == 0 )
+    {
+        rc = VResolverLoadRepo ( self, & self -> local, repo, NULL, cacheAllow, true );
+        KConfigNodeRelease ( repo );
+    }
+    return rc;
+}
+
+/* LoadLegacyRefseq
+ *  load refseq information from KConfig
+ *
+ *  there are two legacy versions being supported
+ *
+ *    legacy-refseq
+ *        = "refseq" <legacy-vol-or-repo> ;
+ *
+ *    legacy-vol-or-repo
+ *        = "volumes" '=' <path-list>
+ *        | <legacy-refseq-repo> <legacy-refseq-vols>
+ *        ;
+ */
+static
+rc_t VResolverLoadLegacyRefseq ( VResolver *self, const KConfig *cfg )
+{
+    const KConfigNode *vols;
+    rc_t rc = KConfigOpenNodeRead ( cfg, & vols, "/refseq/paths" );
+    if ( GetRCState ( rc ) == rcNotFound )
+        rc = 0;
+    else if ( rc == 0 )
+    {
+        String *vol_list;
+        rc = KConfigNodeReadString ( vols, & vol_list );
+        if ( rc == 0 )
+        {
+            const bool protected = false;
+            const bool disabled = false;
+            const bool caching = true;
+            rc = VResolverLoadAlgVolumes ( & self -> local, NULL, NULL, cacheAllow,
+                appREFSEQ, algREFSEQ,  & self -> num_app_vols [ appREFSEQ ],
+                vol_list, protected, disabled, caching );
+            StringWhack ( vol_list );
+        }
+        KConfigNodeRelease ( vols );
+    }
+
+    return rc;
+}
+
+
+/* ForceRemoteRefseq
+ *  makes sure there is a remote source of refseq
+ *  or else adds a hard-coded URL to NCBI
+ */
+static
+rc_t VResolverForceRemoteRefseq ( VResolver *self )
+{
+    rc_t rc;
+    bool found;
+    String local_root;
+    const String *root;
+
+    uint32_t i, count = VectorLength ( & self -> remote );
+    for ( found = false, i = 0; i < count; ++ i )
+    {
+        VResolverAlg *alg = ( VResolverAlg* ) VectorGet ( & self -> remote, i );
+        if ( alg -> app_id == appREFSEQ )
+        {
+            found = true;
+            if ( alg -> disabled )
+                alg -> disabled = false;
+        }
+    }
+
+    if ( found )
+        return 0;
+
+    if ( self -> num_app_vols [ appAny ] != 0 )
+    {
+        for ( i = 0; i < count; ++ i )
+        {
+            VResolverAlg *alg = ( VResolverAlg* ) VectorGet ( & self -> remote, i );
+            if ( alg -> app_id == appAny )
+            {
+                found = true;
+                if ( alg -> disabled )
+                    alg -> disabled = false;
+            }
+        }
+    }
+
+    if ( found )
+        return 0;
+
+    /* create one from hard-coded constants */
+    StringInitCString ( & local_root, "http://ftp-trace.ncbi.nlm.nih.gov/sra" );
+    rc = StringCopy ( & root, & local_root );    
+    if ( rc == 0 )
+    {
+        rc = VectorAppend ( & self -> roots, NULL, root );
+        if ( rc != 0 )
+            StringWhack ( root );
+        else
+        {
+            String vol_list;
+            const bool protected = false;
+            const bool disabled = false;
+            const bool caching = false;
+            StringInitCString ( & vol_list, "refseq" );
+            rc = VResolverLoadAlgVolumes ( & self -> remote, root, NULL, cacheDisallow,
+                appREFSEQ, algREFSEQ, & self -> num_app_vols [ appREFSEQ ],
+                & vol_list, protected, disabled, caching );
+        }
+    }
+
+    return rc;
+}
+
+
+/* GetDownloadTicket
+ *  if we are within a working environment that has a download ticket,
+ *  capture it here and add that local repository into the mix
+ */
+static
+const String *VResolverGetDownloadTicket ( const VResolver *self, const KConfig *cfg,
+    char *buffer, size_t bsize )
+{
+    const String *ticket = NULL;
+    const KRepositoryMgr *rmgr;
+    rc_t rc = KConfigMakeRepositoryMgrRead ( cfg, & rmgr );
+    if ( rc == 0 )
+    {
+        const KRepository *protected;
+        rc = KRepositoryMgrCurrentProtectedRepository ( rmgr, & protected );
+        if ( rc == 0 )
+        {
+            rc = KRepositoryName ( protected, buffer, bsize, NULL );
+            if ( rc == 0 )
+            {
+                size_t ticsz;
+                char ticbuf [ 256 ];
+                rc = KRepositoryDownloadTicket ( protected, ticbuf, sizeof ticbuf, & ticsz );
+                if ( rc == 0 )
+                {
+                    String tic;
+                    StringInit ( & tic, ticbuf, ticsz, ( uint32_t ) ticsz );
+                    rc = StringCopy ( & ticket, & tic );
+                }
+            }
+
+            KRepositoryRelease ( protected );
+        }
+
+        KRepositoryMgrRelease ( rmgr );
+    }
+    return ticket;
+}
+
+
+/* ForceRemoteProtected
+ *  makes sure there is a remote CGI
+ */
+static
+rc_t VResolverForceRemoteProtected ( VResolver *self )
+{
+    rc_t rc;
+    const String *root;
+
+    /* create one from hard-coded constants */
+    String cgi_root;
+    StringInitCString ( & cgi_root, "http://www.ncbi.nlm.nih.gov/Traces/names/names.cgi" );
+    rc = StringCopy ( & root, & cgi_root );    
+    if ( rc == 0 )
+    {
+        rc = VectorAppend ( & self -> roots, NULL, root );
+        if ( rc != 0 )
+            StringWhack ( root );
+        else
+        {
+            const bool protected = true;
+            const bool disabled = false;
+
+            VResolverAlg *cgi;
+            rc = VResolverAlgMake ( & cgi, root, appAny, algCGI, protected, disabled );
+            if ( rc == 0 )
+            {
+                cgi -> ticket = self -> ticket;
+
+                rc = VectorAppend ( & self -> remote, NULL, cgi );
+                if ( rc == 0 )
+                {
+                    ++ self -> num_app_vols [ appAny ];
+                    return 0;
+                }
+            }
+
+            VResolverAlgWhack ( cgi, NULL );
+        }
+    }
+
+    return rc;
+}
+
+
+/* Load
+ *  load the respository from ( current ) KConfig
+ *
+ *  using pseudo BNF, it looks like this:
+ *
+ *    repositories
+ *        = "repository" <category-block>* ;
+ *
+ *    category-block
+ *        = <category> <sub-category-block>* ;
+ *
+ *    category
+ *        = "remote" | "site" | "user" ;
+ *
+ *    sub-category-block
+ *        = <sub-category> <repository-block>* ;
+ *
+ *    sub-category
+ *        = "main" | "aux" | "protected"
+ */
+static
+rc_t VResolverLoad ( VResolver *self, const KConfig *cfg )
+{
+    bool have_remote_protected = false;
+
+    const KConfigNode *kfg;
+    rc_t rc = KConfigOpenNodeRead ( cfg, & kfg, "repository" );
+    if ( GetRCState ( rc ) == rcNotFound )
+        rc = 0;
+    else if ( rc == 0 )
+    {
+        /* if the user is inside of a protected workspace, load it first */
+        char buffer [ 256 ];
+        self -> ticket = VResolverGetDownloadTicket ( self, cfg, buffer, sizeof buffer );
+        if ( self -> ticket != NULL )
+            rc = VResolverLoadProtected ( self, kfg, buffer );
+
+        /* now load user public repositories */
+        if ( rc == 0 )
+            rc = VResolverLoadSubCategory ( self, & self -> local, kfg, NULL, "user/main", cacheAllow, false );
+        if ( rc == 0 )
+            rc = VResolverLoadSubCategory ( self, & self -> local, kfg, NULL, "user/aux", cacheAllow, false );
+
+        /* load any site repositories */
+        if ( rc == 0 )
+            rc = VResolverLoadSubCategory ( self, & self -> local, kfg, NULL, "site/main", cacheDisallow, false );
+        if ( rc == 0 )
+            rc = VResolverLoadSubCategory ( self, & self -> local, kfg, NULL, "site/aux", cacheDisallow, false );
+
+        /* if within a protected workspace, load protected remote repositories */
+        if ( rc == 0 && self -> ticket != NULL )
+        {
+            rc = KNSManagerMake ( ( KNSManager** ) & self -> kns );
+            if ( rc == 0 )
+            {
+                uint32_t entry_vols = VectorLength ( & self -> remote );
+                rc = VResolverLoadSubCategory ( self, & self -> remote, kfg,
+                    self -> ticket, "remote/protected", cacheDisallow, true );
+                have_remote_protected = VectorLength ( & self -> remote ) > entry_vols;
+            }
+        }
+
+        /* load any remote repositories */
+        if ( rc == 0 )
+            rc = VResolverLoadSubCategory ( self, & self -> remote, kfg, NULL, "remote/main", cacheDisallow, false );
+        if ( rc == 0 )
+            rc = VResolverLoadSubCategory ( self, & self -> remote, kfg, NULL, "remote/aux", cacheDisallow, false );
+
+        KConfigNodeRelease ( kfg );
+
+        /* recover from public remote repositories using resolver CGI */
+        if ( self -> kns == NULL && self -> num_app_vols [ appAny ] != 0 )
+            rc = KNSManagerMake ( ( KNSManager** ) & self -> kns );
+    }
+
+    if ( rc == 0 && self -> num_app_vols [ appAny ] == 0 )
+    {
+        bool has_current_refseq = true;
+
+        /* AT THIS POINT, a current configuration will have something.
+           But, older out-of-date configurations may exist and need special handling. */
+        if ( self -> num_app_vols [ appREFSEQ ] == 0 )
+        {
+            has_current_refseq = false;
+            rc = VResolverLoadLegacyRefseq ( self, cfg );
+        }
+
+        /* now, one more special case - for external users
+           who had legacy refseq configuration but nothing for SRA,
+           force existence of a remote refseq access */
+        if ( rc == 0
+             && ! has_current_refseq
+             && self -> num_app_vols [ appREFSEQ ] != 0
+             && self -> num_app_vols [ appSRA ] == 0 )
+        {
+            rc = VResolverForceRemoteRefseq ( self );
+        }
+    }
+
+    if ( rc == 0 && self -> ticket != NULL && ! have_remote_protected )
+        rc = VResolverForceRemoteProtected ( self );
+
+    return rc;
+}
+
+
+/* Make
+ *  internal factory function
+ */
+static
+rc_t VResolverMake ( VResolver ** objp, const KDirectory *wd, const KConfig *kfg )
+{
+    rc_t rc;
+
+    VResolver *obj = calloc ( 1, sizeof * obj );
+    if ( obj == NULL )
+        rc = RC ( rcVFS, rcMgr, rcCreating, rcMemory, rcExhausted );
+    else
+    {
+        VectorInit ( & obj -> roots, 0, 8 );
+        VectorInit ( & obj -> local, 0, 8 );
+        VectorInit ( & obj -> remote, 0, 8 );
+        obj -> wd = wd;
+
+        KRefcountInit ( & obj -> refcount, 1, "VResolver", "make", "resolver" );
+
+        rc = VResolverLoad ( obj, kfg );
+        if ( rc == 0 )
+        {
+            * objp = obj;
+            return 0;
+        }
+
+        VResolverWhack ( obj );
+    }
+
+    return rc;
+}
+
+/* Make
+ *  ask the VFS manager to make a resolver
+ */
+LIB_EXPORT
+rc_t CC VFSManagerMakeResolver ( const VFSManager * self,
+    VResolver ** new_resolver, const KConfig * cfg )
+{
+    rc_t rc;
+
+    if ( new_resolver == NULL )
+        rc = RC ( rcVFS, rcMgr, rcCreating, rcParam, rcNull );
+    else
+    {
+        if ( self == NULL )
+            rc = RC ( rcVFS, rcMgr, rcCreating, rcSelf, rcNull );
+        else if ( cfg == NULL )
+            rc = RC ( rcVFS, rcMgr, rcCreating, rcParam, rcNull );
+        else
+        {
+            KDirectory *wd;
+            rc = VFSManagerGetCWD ( self, & wd );
+            if ( rc == 0 )
+            {
+                rc = VResolverMake ( new_resolver, wd, cfg );
+                if ( rc == 0 )
+                    return 0;
+
+                KDirectoryRelease ( wd );
+            }
+        }
+
+        *new_resolver = NULL;
+    }
+
+    return rc;
+}
diff --git a/libs/vfs/srapath-stub.c b/libs/vfs/srapath-stub.c
new file mode 100644
index 0000000..da0985d
--- /dev/null
+++ b/libs/vfs/srapath-stub.c
@@ -0,0 +1,372 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <sra/extern.h>
+#include <klib/rc.h>
+#include <klib/defs.h>
+#include <klib/refcount.h>
+#include <sra/srapath.h>
+#include <sra/sradb-priv.h>
+#include <sysalloc.h>
+#include <os-native.h>
+
+#include <sra/impl.h>
+
+#include <string.h>
+#include <assert.h>
+#include <stdio.h>
+
+
+/*--------------------------------------------------------------------------
+ * SRAPath
+ *  manages accession -> path conversion
+ */
+
+/* Make
+ *  create path manager
+ *
+ *  the path manager should already be configured with
+ *  standard search paths, but can be augmented by using
+ *  the Add*Path messages.
+ *
+ *  "dir" [ IN, NULL OKAY ] - optional root directory to use
+ *  attaches a new reference
+ */
+LIB_EXPORT rc_t CC SRAPathMake ( SRAPath **pm, struct KDirectory const *dir )
+{
+    rc_t rc;
+
+    if ( pm == NULL )
+        rc = RC ( rcSRA, rcMgr, rcConstructing, rcParam, rcNull );
+    else
+    {
+        rc = SRAPathMakeImpl( pm, dir );
+        if ( rc == 0 )
+            return 0;
+
+        * pm = NULL;
+    }
+
+    return rc;
+}
+
+
+/* AddRef
+ * Release
+ */
+LIB_EXPORT rc_t CC SRAPathAddRef ( const SRAPath *self )
+{
+    if ( self != NULL )
+    {
+        switch ( self -> vt -> v1 . maj )
+        {
+        case 1:
+        case 2:
+            return self -> vt -> v1 . addref ( self );
+        }
+
+        return RC ( rcSRA, rcMgr, rcReleasing, rcInterface, rcBadVersion );
+    }
+    return 0;
+}
+
+LIB_EXPORT rc_t CC SRAPathRelease ( const SRAPath *self )
+{
+    if ( self != NULL )
+    {
+        switch ( self -> vt -> v1 . maj )
+        {
+        case 1:
+        case 2:
+            return self -> vt -> v1 . release ( self );
+        }
+
+        return RC ( rcSRA, rcMgr, rcReleasing, rcInterface, rcBadVersion );
+    }
+    return 0;
+}
+
+
+/* Version
+ *  returns the library version
+ */
+LIB_EXPORT rc_t CC SRAPathVersion ( const SRAPath *self, uint32_t *version )
+{
+    if ( version == NULL )
+        return RC ( rcSRA, rcMgr, rcAccessing, rcParam, rcNull );
+
+    * version = 0;
+
+    if ( self == NULL )
+        return RC ( rcSRA, rcMgr, rcAccessing, rcSelf, rcNull );
+
+    switch ( self -> vt -> v1 . maj )
+    {
+    case 1:
+    case 2:
+        return self -> vt -> v1 . version ( self, version );
+    }
+
+    return RC ( rcSRA, rcMgr, rcAccessing, rcInterface, rcBadVersion );
+}
+
+
+/* Clear
+ *  forget all existing server and volume paths
+ */
+LIB_EXPORT rc_t CC SRAPathClear ( SRAPath *self )
+{
+    if ( self == NULL )
+        return RC ( rcSRA, rcMgr, rcResetting, rcSelf, rcNull );
+
+    switch ( self -> vt -> v1 . maj )
+    {
+    case 1:
+    case 2:
+        return self -> vt -> v1 . clear ( self );
+    }
+
+    return RC ( rcSRA, rcMgr, rcResetting, rcInterface, rcBadVersion );
+}
+
+
+/* AddRepPath
+ *  add a replication path
+ *
+ *  "rep" [ IN ] - NUL-terminated server search path
+ *  may be a compound path with ':' separator characters, e.g.
+ *  "/panfs/traces01:/panfs/traces31"
+ *
+ *  NB - servers are searched in the order provided,
+ *  first to last, until one of them satisfies a request,
+ *  at which time the successful server is placed at the
+ *  head of the search path.
+ */
+LIB_EXPORT rc_t CC SRAPathAddRepPath ( SRAPath *self, const char *path )
+{
+    if ( self == NULL )
+        return RC ( rcSRA, rcMgr, rcUpdating, rcSelf, rcNull );
+    if ( path == NULL )
+        return RC ( rcSRA, rcMgr, rcUpdating, rcString, rcNull );
+    if ( path [ 0 ] == 0 )
+        return RC ( rcSRA, rcMgr, rcUpdating, rcString, rcEmpty );
+
+    switch ( self -> vt -> v1 . maj )
+    {
+    case 1:
+    case 2:
+        return self -> vt -> v1 . addRepPath ( self, path );
+    }
+
+    return RC ( rcSRA, rcMgr, rcUpdating, rcInterface, rcBadVersion );
+}
+
+
+/* AddVolPath
+ *  add a volume path
+ *
+ *  "vol" [ IN ] - NUL-terminated volume search path
+ *  may be a compound path with ':' separator characters, e.g.
+ *  "sra2:sra1:sra0"
+ *
+ *  NB - volumes are searched in the order provided,
+ *  first to last. they are never re-ordered.
+ */
+LIB_EXPORT rc_t CC SRAPathAddVolPath ( SRAPath *self, const char *path )
+{
+    if ( self == NULL )
+        return RC ( rcSRA, rcMgr, rcUpdating, rcSelf, rcNull );
+    if ( path == NULL )
+        return RC ( rcSRA, rcMgr, rcUpdating, rcString, rcNull );
+    if ( path [ 0 ] == 0 )
+        return RC ( rcSRA, rcMgr, rcUpdating, rcString, rcEmpty );
+
+    switch ( self -> vt -> v1 . maj )
+    {
+    case 1:
+    case 2:
+        return self -> vt -> v1 . addVolPath ( self, path );
+    }
+
+    return RC ( rcSRA, rcMgr, rcUpdating, rcInterface, rcBadVersion );
+}
+
+
+/* Full
+ *  creates full path from server, volume & accession
+ *
+ *  "rep" [ IN ] - NUL terminated full path of replication
+ *  server, e.g. "/panfs/traces01"
+ *
+ *  "vol" [ IN ] - NUL terminated relative path of volume,
+ *  e.g. "sra2"
+ *
+ *  "accession" [ IN ] - NUL terminated run accession,
+ *  e.g. "SRR000001"
+ *
+ *  "path" [ OUT ] and "path_max" [ IN ] - return buffer for
+ *  NUL-terminated full path to accession.
+ */
+LIB_EXPORT rc_t CC SRAPathFull ( const SRAPath *self, const char *rep,
+    const char *vol, const char *accession, char *path, size_t path_max )
+{
+    if ( path_max == 0 )
+        return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+    if ( path == NULL )
+        return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcNull );
+
+    /* prepare return for failure */
+    path [ 0 ] = 0;
+
+    /* test remainder */
+    if ( self == NULL )
+        return RC ( rcSRA, rcMgr, rcAccessing, rcSelf, rcNull );
+    if ( accession == NULL )
+        return RC ( rcSRA, rcMgr, rcAccessing, rcPath, rcNull );
+    if ( accession [ 0 ] == 0 )
+        return RC ( rcSRA, rcMgr, rcAccessing, rcPath, rcEmpty );
+
+    /* turn NULL prefix parts into empty string */
+    if ( rep == NULL )
+        rep = "";
+    if ( vol == NULL )
+        vol = "";
+
+    switch ( self -> vt -> v1 . maj )
+    {
+    case 1:
+    case 2:
+        return self -> vt -> v1 . fullPath ( self, rep, vol, accession, path, path_max );
+    }
+
+    return RC ( rcSRA, rcMgr, rcAccessing, rcInterface, rcBadVersion );
+}
+
+
+/* Test
+ *  returns true if path appears to be accession
+ *  the test is a heuristic, and may return false positives
+ *
+ *  "path" [ IN ] - NUL terminated path to run
+ */
+LIB_EXPORT bool CC SRAPathTest ( const SRAPath *self, const char *path )
+{
+    if ( self == NULL )
+        return false;
+    if ( path == NULL || path [ 0 ] == 0 )
+        return false;
+
+    switch ( self -> vt -> v1 . maj )
+    {
+    case 1:
+    case 2:
+        return self -> vt -> v1 . testPath ( self, path );
+    }
+
+    return false;
+}
+
+
+/* Find
+ *  finds location of run within rep-server/volume matrix
+ *
+ *  "accession" [ IN ] - NUL terminated run accession,
+ *   e.g. "SRR000001"
+ *
+ *  "path" [ OUT ] and "path_max" [ IN ] - return buffer for
+ *  NUL-terminated full path to accession.
+ *
+ *  returns 0 if path exists, rc state rcNotFound if
+ *  path cannot be found, and rcInsufficient if buffer is
+ *  too small.
+ */
+LIB_EXPORT rc_t CC SRAPathFindWithRepLen ( const SRAPath *self,
+    const char *accession, char *path, size_t path_max, size_t *rep_len )
+{
+    if ( path == NULL )
+        return RC ( rcSRA, rcMgr, rcSelecting, rcBuffer, rcNull );
+    if ( path_max == 0 )
+        return RC ( rcSRA, rcMgr, rcSelecting, rcBuffer, rcInsufficient );
+
+    /* looking for illegal character in the accession 'name'
+     * this will be the RC from something like "ncbi-acc:./SRR000001"
+     * or if this is called as a default resolution in the old manner
+     */
+    if ( strchr ( accession, '/' ) != NULL )
+        return RC ( rcSRA, rcUri, rcResolving, rcPath, rcIncorrect );
+
+    path [ 0 ] = 0;
+
+    if ( self == NULL )
+        return RC ( rcSRA, rcMgr, rcSelecting, rcSelf, rcNull );
+    if ( accession == NULL )
+        return RC ( rcSRA, rcMgr, rcSelecting, rcPath, rcNull );
+    if ( accession [ 0 ] == 0 )
+        return RC ( rcSRA, rcMgr, rcSelecting, rcPath, rcEmpty );
+
+    switch ( self -> vt -> v1 . maj )
+    {
+    case 1:
+    case 2:
+        return self -> vt -> v1 . findPath ( self, accession, path, path_max, rep_len );
+    }
+
+    return RC ( rcSRA, rcMgr, rcSelecting, rcInterface, rcBadVersion );
+}
+
+LIB_EXPORT rc_t CC SRAPathFind ( const SRAPath *self,
+    const char *accession, char *path, size_t path_max )
+{
+    return SRAPathFindWithRepLen ( self, accession, path, path_max, NULL );
+}
+
+
+/* List (Deprecated)
+ *  list all runs known to SRAPath
+ *  this can be VERY SLOW due to the large number of runs
+ *
+ *  "runs" [ OUT ] - return parameter for ordered list of accessions
+ *
+ *  "deep" [ IN ] - when false, list only first responding server
+ */
+LIB_EXPORT rc_t CC SRAPathList ( const SRAPath *self, struct KNamelist **runs, bool deep )
+{
+    if ( runs == NULL )
+        return RC ( rcSRA, rcMgr, rcListing, rcParam, rcNull );
+
+    * runs = NULL;
+
+    if ( self == NULL )
+        return RC ( rcSRA, rcMgr, rcListing, rcSelf, rcNull );
+
+    switch ( self -> vt -> v1 . maj )
+    {
+    case 1:
+        return RC ( rcSRA, rcMgr, rcListing, rcInterface, rcUnsupported ); /* removed from v1 */
+    }
+
+    return RC ( rcSRA, rcMgr, rcListing, rcInterface, rcBadVersion );
+}
diff --git a/libs/vfs/srapath.c b/libs/vfs/srapath.c
new file mode 100644
index 0000000..eb1ae28
--- /dev/null
+++ b/libs/vfs/srapath.c
@@ -0,0 +1,1424 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <sra/path-extern.h>
+
+struct SRARunlist;
+#define KNAMELIST_IMPL struct SRARunlist
+#include <klib/impl.h>
+
+struct NCBISRAPath;
+#define SRAPATH_IMPL struct NCBISRAPath
+#include <sra/impl.h>
+
+#include "libsrapath.vers.h"
+
+#include <vfs/manager.h>
+#include <sra/srapath.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/mmap.h>
+#include <kfs/dyload.h>
+#include <klib/container.h>
+#include <klib/vector.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+#include <kfg/config.h>
+#include <kfg/kfg-priv.h>
+#include <klib/debug.h>
+#include <klib/log.h>
+#include <os-native.h>
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+#include "path-priv.h"
+
+/*--------------------------------------------------------------------------
+ * SRAPathString
+ */
+enum
+{
+    alg_none,
+    alg_ncbi,
+    alg_ddbj,
+    alg_ebi,
+    alg_refseq,
+    alg_wgs
+};
+
+typedef struct SRAPathString SRAPathString;
+struct SRAPathString
+{
+    DLNode n;
+    uint8_t alg;
+    char path [ 1 ];
+};
+
+/* Whack
+ */
+static
+void CC SRAPathStringWhack ( DLNode *n, void *ignore )
+{
+    free ( n );
+}
+
+/* Make
+ */
+static
+rc_t SRAPathStringMake ( DLList *list, const char *path, size_t sz, uint8_t alg )
+{
+    SRAPathString *s = (SRAPathString*) malloc ( sizeof * s + sz );
+    if ( s == NULL )
+        return RC ( rcSRA, rcMgr, rcUpdating, rcMemory, rcExhausted );
+
+    s -> alg = alg;
+    string_copy ( s -> path, sz + 1, path, sz );
+    DLListPushTail ( list, & s -> n );
+
+    return 0;
+}
+
+
+/* Find
+ */
+typedef struct SRAPathFindInfo SRAPathFindInfo;
+struct SRAPathFindInfo
+{
+    const char *path;
+    size_t size;
+    uint8_t alg;
+    bool found;
+};
+
+static
+bool CC SRAPathStringFind ( DLNode *n, void *data )
+{
+    const SRAPathString *p = ( const SRAPathString* ) n;
+    SRAPathFindInfo *pb = ( SRAPathFindInfo* ) data;
+    if ( memcmp ( p -> path, pb -> path, pb -> size ) == 0 )
+    {
+        if ( p -> path [ pb -> size ] == 0 )
+        {
+            pb -> alg = p -> alg;
+            return pb -> found = true;
+        }
+    }
+    return false;
+}
+
+/*--------------------------------------------------------------------------
+ * NCBIRepository
+ *  represents a repository: replication server(s) / volume(s)
+ */
+typedef struct NCBIRepository NCBIRepository;
+struct NCBIRepository
+{
+    DLNode n;
+
+    uint8_t type; /* repository type: alg_ncbi (sra: ncbi/ebi/ddbj), alg_wgs, alg_refseq*/
+
+    /* replication servers */
+    DLList repsrv;
+
+    /* volumes upon each repserver */
+    DLList vols;
+};
+/* Init
+ */
+static
+rc_t CC SRARepoMake(NCBIRepository** repo)
+{
+    *repo = (NCBIRepository*)malloc(sizeof(NCBIRepository));
+    if (* repo == 0)
+    {
+        return RC ( rcSRA, rcMgr, rcInitializing, rcMemory, rcExhausted );
+    }
+    (*repo)->type = alg_ncbi;
+    (*repo)->n.next = NULL;
+    (*repo)->n.prev = NULL;
+    DLListInit(&(*repo)->repsrv);
+    DLListInit(&(*repo)->vols);
+    return 0;
+}
+/* Whack
+ */
+static
+void CC SRARepoWhack ( DLNode *n, void *ignore )
+{
+    if (n != NULL)
+    {
+        DLListWhack ( & ((NCBIRepository*) n) -> repsrv, SRAPathStringWhack, NULL );
+        DLListWhack ( & ((NCBIRepository*) n) -> vols, SRAPathStringWhack, NULL );
+        free ( (NCBIRepository*) n );
+    }
+}
+
+static 
+const char* AlgToStr(uint8_t alg)
+{
+    switch (alg)
+    {
+    case alg_ncbi: 
+    case alg_ddbj:
+    case alg_ebi: return "SRA";
+    case alg_wgs: return "WGS";
+    case alg_refseq: return "REFSEQ";
+    default: return "<unknown>";
+    }
+}
+
+
+static 
+void CC LogVolume( DLNode *n, void *data )
+{
+    const SRAPathString* self = (const SRAPathString*)n;
+    PATH_DEBUG (("        \"%s\", type=%s\n", 
+                  self->path,
+                  AlgToStr(self->alg)));
+}
+
+static 
+void CC LogServer( DLNode *n, void *data )
+{
+    const SRAPathString* self = (const SRAPathString*)n;
+    PATH_DEBUG (("        \"%s\"\n", self->path));
+}
+
+static 
+void CC LogRepository ( DLNode *n, void *data )
+{
+    if (n != NULL)
+    {
+        const NCBIRepository* self = (const NCBIRepository*)n;
+        PATH_DEBUG (("    type=%s\n", AlgToStr(self->type)));
+        PATH_DEBUG (("    servers:\n"));
+        DLListForEach ( & self->repsrv, false, LogServer, NULL );
+        PATH_DEBUG (("    volumes:\n"));
+        DLListForEach ( & self->vols, false, LogVolume, NULL );
+    }
+}
+
+/*--------------------------------------------------------------------------
+ * NCBISRAPath
+ *  manages accession -> path conversion
+ */
+typedef struct NCBISRAPath NCBISRAPath;
+struct NCBISRAPath
+{
+    struct SRAPath dad;
+
+    /* working directory */
+    const KDirectory *dir;
+
+    /* repositories */
+    DLList repos;
+    NCBIRepository* dflt_repo; /* default repository (likely to be removed in the future versions) */ 
+
+    atomic32_t refcount;
+};
+
+static void LogPathInfo(const NCBISRAPath* self)
+{
+    PATH_DEBUG (("NCBISRAPath configuration:\n"));
+    DLListForEach ( & self->repos, false, LogRepository, NULL );
+    PATH_DEBUG (("default repository:\n"));
+    LogRepository( (DLNode*) self->dflt_repo, NULL );
+}
+
+/* Whack
+ */
+static
+rc_t SRAPathWhack ( NCBISRAPath *self )
+{
+    rc_t rc = KDirectoryRelease ( self -> dir );
+    if ( rc == 0 )
+    {
+        DLListWhack ( & self -> repos, SRARepoWhack, NULL );
+        SRARepoWhack ( (DLNode*) self -> dflt_repo, NULL );
+        free ( self );
+    }
+    return rc;
+}
+
+
+/* AddRef
+ * Release
+ */
+static
+rc_t CC NCBISRAPathAddRef ( const NCBISRAPath *cself )
+{
+    atomic32_inc ( & ( ( NCBISRAPath* ) cself ) -> refcount );
+    return 0;
+}
+
+static
+rc_t CC NCBISRAPathRelease ( const NCBISRAPath *cself )
+{
+    NCBISRAPath *self = ( NCBISRAPath* ) cself;
+    if ( atomic32_dec_and_test ( & self -> refcount ) )
+        return SRAPathWhack ( self );
+    return 0;
+}
+
+
+/* Version
+ *  returns the library version
+ */
+static
+rc_t CC NCBISRAPathVersion ( const NCBISRAPath *self, uint32_t *version )
+{
+    * version = LIBSRAPATH_VERS;
+    return 0;
+}
+
+
+/* Clear
+ *  forget existing server and volume paths for the default repository
+ */
+static
+rc_t CC NCBISRAPathClear ( NCBISRAPath *self )
+{
+    DLListWhack ( & self -> dflt_repo -> repsrv, SRAPathStringWhack, NULL );
+    DLListWhack ( & self -> dflt_repo -> vols, SRAPathStringWhack, NULL );
+    DLListInit ( & self -> dflt_repo -> repsrv );
+    DLListInit ( & self -> dflt_repo -> vols );
+
+    return 0;
+}
+
+
+/* AddPath
+ *  add an alternate replication or volume path
+ *
+ *  "path" [ IN ] and "size" [ IN ] - sets a search path
+ *
+ *  "alt" [ IN ] - use std or alternate volume path algorithm
+ */
+static
+rc_t SRAPathAddSubPath ( DLList *list, const char *path, size_t size, uint8_t alg )
+{
+    /* see if it's already there */
+    SRAPathFindInfo pb;
+    pb . path = path;
+    pb . size = size;
+    pb . found = 0;
+    DLListDoUntil ( list, 0, SRAPathStringFind, & pb );
+    if ( pb . found )
+        return 0;
+
+    /* create a new one */
+    return SRAPathStringMake ( list, path, size, alg );
+}
+
+static
+rc_t SRAPathAddPath ( DLList *list, const char *path, uint8_t alg )
+{
+    rc_t rc;
+    if ( path == NULL )
+        rc = RC ( rcSRA, rcMgr, rcUpdating, rcString, rcNull );
+    else if ( path [ 0 ] == 0 )
+        rc = RC ( rcSRA, rcMgr, rcUpdating, rcString, rcEmpty );
+    else
+    {
+        /* treat path as a Unix-style multi-path */
+        size_t size = string_size ( path );
+        while ( 1 )
+        {
+            /* find separator */
+            const char *sep = string_chr ( path, size, ':' );
+            if ( sep == NULL )
+                break;
+
+            /* add sub-path */
+            rc = SRAPathAddSubPath ( list, path, sep - path, alg );
+            if ( rc != 0 )
+                return rc;
+
+            /* consume ':' */
+            ++ sep;
+
+            /* pop from string */
+            size -= sep - path;
+            path = sep;
+        }
+
+        return SRAPathAddSubPath ( list, path, size, alg );
+    }
+    return rc;
+}
+
+/* AddRepPath
+ *  add a replication path to a repository
+ *
+ *  "rep" [ IN ] - NUL-terminated server search path
+ *  may be a compound path with ':' separator characters, e.g.
+ *  "/panfs/traces01:/panfs/traces31"
+ *
+ *  NB - servers are searched in the order provided,
+ *  first to last, until one of them satisfies a request,
+ *  at which time the successful server is placed at the
+ *  head of the search path.
+ */
+static
+rc_t CC NCBISRAPathAddRepPath ( NCBIRepository* repo, const char *rep )
+{
+    return SRAPathAddPath ( & repo -> repsrv, rep, alg_none );
+}
+static
+rc_t CC NCBISRAPathAddRepPathDefault ( NCBISRAPath *self, const char *rep )
+{
+    return NCBISRAPathAddRepPath ( self -> dflt_repo, rep );
+}
+
+/* AddVolPath
+ *  add a volume path to the default repository
+ *
+ *  "vol" [ IN ] - NUL-terminated volume search path
+ *  may be a compound path with ':' separator characters, e.g.
+ *  "sra2:sra1:sra0"
+ *
+ *  NB - volumes are searched in the order provided,
+ *  first to last. they are never re-ordered.
+ */
+static
+rc_t SRAPathAddAlgVolPath ( NCBIRepository* repo, const char *vol, uint8_t alg )
+{
+    return SRAPathAddPath ( & repo -> vols, vol, alg );
+}
+static
+rc_t CC NCBISRAPathAddVolPathDefault ( NCBISRAPath *self, const char *vol )
+{
+    return SRAPathAddAlgVolPath ( self -> dflt_repo, vol, alg_ncbi);
+}
+
+/* Config
+ *  configure an existing path manager
+ */
+static
+rc_t SRAPathConfigValue ( const KConfig *kfg, const char *node_path,
+    char *value, size_t value_size, const char *dflt )
+{
+    const KConfigNode *node;
+    rc_t rc = KConfigOpenNodeRead ( kfg, & node, node_path );
+    if ( rc == 0 )
+    {
+        size_t num_read, remaining;
+        rc = KConfigNodeRead ( node, 0, value, value_size - 1, & num_read,  & remaining );
+        if ( rc == 0 )
+        {
+            if ( remaining != 0 )
+                rc = RC ( rcSRA, rcMgr, rcConstructing, rcString, rcExcessive );
+            else
+                value [ num_read ] = 0;
+        }
+
+        KConfigNodeRelease ( node );
+    }
+
+    if ( rc != 0 )
+    {
+        if ( dflt != NULL && dflt [ 0 ] != 0 )
+        {
+            size_t num_read = string_copy_measure ( value, value_size, dflt );
+            rc = 0;
+            if ( num_read == value_size )
+                rc = RC ( rcSRA, rcMgr, rcConstructing, rcString, rcExcessive );
+        }
+        else
+	    	value[0] = 0;     
+    }
+    return rc;
+}
+
+static 
+rc_t ConfigVolume(NCBIRepository* repo, KConfig * kfg, const char* keyPref, const char* keySuff, uint8_t alg )
+{
+    char value [ 4096 ];
+    char key [ 4096 ];
+    size_t pSize = string_size(keyPref);
+    size_t sSize = string_size(keySuff);
+    if ( pSize + sSize >= sizeof(key))
+    {
+        return RC ( rcSRA, rcMgr, rcConstructing, rcString, rcExcessive );
+    }
+    string_copy(key, sizeof(key), keyPref, pSize);
+    string_copy(key + pSize, sizeof(key) - pSize, keySuff, sSize);
+    key[pSize+sSize] = 0;
+    value[0] = '\0';
+    if ( SRAPathConfigValue ( kfg, key, value, sizeof value, NULL ) == 0 )        
+        SRAPathAddAlgVolPath ( repo, value, alg );
+    return 0;
+}
+
+static
+rc_t ConfigRepo(KConfig * kfg, const char *dflt, const char* reps, const char* volPref, uint8_t type, NCBIRepository** repo)
+{
+    char value [ 4096 ] = "";
+    rc_t rc;
+
+    /* set up a new repo */ 
+    rc = SRARepoMake(repo);
+    if ( rc == 0 )
+    {
+        (*repo)->type = type;
+
+        /* set up servers */
+        if ( SRAPathConfigValue ( kfg, reps, value, sizeof value, dflt ) == 0 )
+            NCBISRAPathAddRepPath ( *repo, value );
+
+        if ( type == alg_ncbi )
+        {
+            /* set up NCBI volumes */
+            rc = ConfigVolume( *repo, kfg, volPref, "/ncbi/volumes", alg_ncbi );
+
+            /* set up EBI volumes */
+            if (rc == 0)
+                rc = ConfigVolume( *repo, kfg, volPref, "/ebi/volumes", alg_ebi );
+
+            /* set up DDBJ volumes */
+            if (rc == 0)
+                rc = ConfigVolume( *repo, kfg, volPref, "/ddbj/volumes", alg_ddbj );
+        }
+        else if (rc == 0)
+        {
+                rc = ConfigVolume( *repo, kfg, volPref, "/volumes", type);
+        }
+    }
+    return rc;
+}
+
+static
+rc_t ConfigRepoSet(DLList* repos, KConfig * kfg, const char* kfgPath, const char *dflt, uint8_t type)
+{
+    const KConfigNode *node;
+
+    rc_t rc = KConfigOpenNodeRead ( kfg, & node, kfgPath );
+    if ( rc == 0 )
+    {
+        KNamelist* children;
+        rc = KConfigNodeListChild ( node, &children );
+        if ( rc == 0 )
+        {
+            uint32_t count;
+            rc = KNamelistCount ( children, &count );
+            if ( rc == 0 )
+            {
+                uint32_t i;
+                for (i = 0; i < count; ++i)
+                {
+                    const char* name;
+                    rc = KNamelistGet ( children, i, &name );
+                    if ( rc == 0 )
+                    {
+                        #define BufSize 4096
+                        char buf[ BufSize ];
+                        size_t bSize = string_size(kfgPath);
+                        string_copy(buf, BufSize, kfgPath, bSize);
+                        if (bSize + string_size(name) < sizeof(buf))
+                        {
+                            NCBIRepository* repo;
+                            string_copy(buf + bSize, sizeof(buf) - bSize, name, string_size(name) + 1);
+                            rc = ConfigRepo( kfg, dflt, buf, buf, type, &repo );
+                            DLListPushTail( repos, (DLNode*) repo );
+                        }
+                        #undef BufSize
+                    }
+                    else
+                    {
+                        rc = RC ( rcSRA, rcMgr, rcConstructing, rcString, rcExcessive );
+                    }
+                    if ( rc != 0 )
+                    {
+                        break;
+                    }
+                }
+            }
+            KNamelistRelease ( children );
+        }
+
+        KConfigNodeRelease ( node );
+    }
+    if (GetRCState(rc) == rcNotFound)
+    {
+        return 0;
+    }
+    return rc;
+}
+
+static
+rc_t SRAPathConfig ( NCBISRAPath *self )
+{
+    const char *dflt;
+    KConfig * kfg;
+    rc_t rc = KConfigMakeLocal ( & kfg, NULL );
+    assert ( ( rc == 0 && kfg != NULL ) || ( rc != 0 && kfg == NULL ) );
+
+    /* look for defaults */
+    dflt = getenv ( "SRAPATH" );
+
+    /* locate and configure all repositories */
+    if ( rc == 0 )
+        rc = ConfigRepoSet( & self->repos, kfg, "/sra/repository/", dflt, alg_ncbi );
+    if ( rc == 0 )
+        rc = ConfigRepoSet( & self->repos, kfg, "/wgs/repository/", dflt, alg_wgs );
+    if ( rc == 0 )
+        rc = ConfigRepoSet( & self->repos, kfg, "/refseq/repository/", dflt, alg_refseq );
+
+    if ( rc == 0 )
+    {   /* default repository for backwards compatibility */
+        rc = ConfigRepo( kfg, dflt, "sra/servers", "sra", alg_ncbi, &self->dflt_repo );
+
+        /* set up REFSEQ volumes */
+        if (rc == 0)
+            rc = ConfigVolume( self->dflt_repo, kfg, "", "/refseq/volumes", alg_refseq );
+
+        /* set up WGS volumes */
+        if (rc == 0)
+            rc = ConfigVolume( self->dflt_repo, kfg, "sra", "/wgs/volumes", alg_wgs );
+    }
+
+    LogPathInfo(self);
+
+    /* kfg may be NULL */        
+    KConfigRelease ( kfg );
+
+    return rc;
+}
+
+
+/* ParseRunAccession
+ *  accession is a string matching <prefix><number>
+ *  extract prefix length and accession number
+ */
+static
+rc_t SRAPathParseRunAccession ( const char *accession, uint32_t *prefix, uint32_t *number )
+{
+    char *end;
+    uint32_t i;
+
+    for ( i = 0; accession [ i ] != 0; ++ i )
+    {
+        if ( isdigit ( accession [ i ] ) )
+            break;
+    }
+
+    if ( i == 0 )
+        return RC ( rcSRA, rcMgr, rcResolving, rcPath, rcInvalid );
+
+    * prefix = i;
+    * number = ( uint32_t ) strtoul ( & accession [ i ], & end, 10 );
+
+    if (( end [ 0 ] == 0 ) || ( end [ 0 ] == '.' ))
+    {
+        return 0;
+    }
+    return RC ( rcSRA, rcMgr, rcResolving, rcPath, rcInvalid );
+}
+
+
+/* Full
+ *  creates full path from server, volume & accession
+ *
+ *  "rep" [ IN ] - NUL terminated full path of replication
+ *  server, e.g. "/panfs/traces01"
+ *
+ *  "vol" [ IN ] - NUL terminated relative path of volume,
+ *  e.g. "sra2"
+ *
+ *  "accession" [ IN ] - NUL terminated run accession,
+ *  e.g. "SRR000001"
+ *
+ *  "path" [ OUT ] and "path_max" [ IN ] - return buffer for
+ *  NUL-terminated full path to accession.
+ */
+static
+rc_t SRAPathFullInt ( const NCBISRAPath *self, const char *rep, const char *vol,
+    const char *accession, char *path, size_t path_max, size_t bank_size )
+{
+    /* pick apart accession */
+    uint32_t prefix, number;
+    rc_t rc = SRAPathParseRunAccession ( accession, & prefix, & number );
+    if ( rc == 0 )
+    {
+        size_t len;
+        size_t total = 0;
+        uint32_t bank = number / bank_size;
+
+        if ( rep [ 0 ] != 0 && vol [ 0 ] != 0 )
+        {
+            /* normally write all parts at once */
+            if ( rep [ strlen (rep) - 1 ] == '/') /* check for need or not a '/' between rep and vol */
+                rc= string_printf ( path, path_max, &len, "%s%s/%.*s/%06u/%s"
+                                 , rep
+                                 , vol
+                                 , ( int ) prefix, accession
+                                 , bank
+                                 , accession );
+            else
+                rc= string_printf  ( path, path_max, &len, "%s/%s/%.*s/%06u/%s"
+                                 , rep
+                                 , vol
+                                 , ( int ) prefix, accession
+                                 , bank
+                                 , accession );
+        }
+        else
+        {
+            /* allow for individual rep-server and volume parts */
+            if ( rep [ 0 ] != 0 )
+            {
+                rc = string_printf ( path, path_max, &len, "%s/", rep );
+                if ( rc != 0 || ( total = len ) >= path_max )
+                    return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+            }
+            else if ( vol [ 0 ] != 0 )
+            {
+                rc = string_printf ( & path [ total ], path_max - total, &len, "%s/", vol );
+                if ( rc != 0 || ( total = len ) >= path_max )
+                    return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+            }
+
+            /* append the accession */
+            rc = string_printf ( & path [ total ], path_max - total, &len, "%.*s/%06u/%s"
+                             , ( int ) prefix, accession
+                             , bank
+                             , accession );
+        }
+
+        /* common detection of buffer overflow */
+        if ( rc != 0 || ( total += len ) >= path_max )
+            rc = RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+    }
+
+    return rc;
+}
+
+static
+rc_t SRAPathFullEBI ( const NCBISRAPath *self, const char *rep, const char *vol,
+    const char *accession, char *path, size_t path_max )
+{
+    /* pick apart accession */
+    uint32_t prefix, number;
+    rc_t rc = SRAPathParseRunAccession ( accession, & prefix, & number );
+    if ( rc == 0 )
+    {
+        size_t len;
+        size_t total = 0;
+        uint32_t bank = number / 1000;
+
+        if ( rep [ 0 ] != 0 && vol [ 0 ] != 0 )
+        {
+            /* normally write all parts at once */
+            if ( rep [ strlen (rep) - 1 ] == '/') /* check for need or not a '/' between rep and vol */
+                rc= string_printf ( path, path_max, &len, "%s%s/%.*s/%.*s%03u/%s"
+                                 , rep
+                                 , vol
+                                 , ( int ) prefix, accession
+                                 , ( int ) prefix, accession
+                                 , bank
+                                 , accession );
+            else
+                rc= string_printf  ( path, path_max, &len, "%s/%s/%.*s/%.*s%03u/%s"
+                                 , rep
+                                 , vol
+                                 , ( int ) prefix, accession
+                                 , ( int ) prefix, accession
+                                 , bank
+                                 , accession );
+        }
+        else
+        {
+            /* allow for individual rep-server and volume parts */
+            if ( rep [ 0 ] != 0 )
+            {
+                rc = string_printf ( path, path_max, &len, "%s/", rep );
+                if ( rc < 0 || ( total = len ) >= path_max )
+                    return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+            }
+            else if ( vol [ 0 ] != 0 )
+            {
+                rc = string_printf ( & path [ total ], path_max - total, &len, "%s/", vol );
+                if ( rc != 0 || ( total = len ) >= path_max )
+                    return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+            }
+
+            /* append the accession */
+            rc = string_printf ( & path [ total ], path_max - total, &len, "%.*s/%.*s%03u/%s"
+                             , ( int ) prefix, accession
+                             , ( int ) prefix, accession
+                             , bank
+                             , accession );
+        }
+
+        /* common detection of buffer overflow */
+        if ( len < 0 || ( total += len ) >= path_max )
+            rc = RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+    }
+
+    return rc;
+}
+
+/*
+* Refseq-style accessions come in 2 naming flavors, flat or SRA-like.
+* If an accession with a flat name does not exist, use SRAPathFullInt to create an SRA-like path
+*/
+static
+rc_t SRAPathFullREFSEQ ( const NCBISRAPath *self, const char *rep, const char *vol,
+    const char *accession, char *path, size_t path_max )
+{
+    /* pick apart accession */
+    uint32_t prefix, number;
+    rc_t rc = SRAPathParseRunAccession ( accession, & prefix, & number );
+    if ( rc == 0 )
+    {
+        size_t len;
+        size_t total = 0;
+
+        if ( rep [ 0 ] != 0 && vol [ 0 ] != 0 )
+        {
+            /* normally write all parts at once */
+            if ( rep [ strlen (rep) - 1 ] == '/') /* check for need or not a '/' between rep and vol */
+                rc= string_printf ( path, path_max, &len, "%s%s/%s"
+                                 , rep
+                                 , vol
+                                 , accession );
+            else
+                rc= string_printf  ( path, path_max, &len, "%s/%s/%s"
+                                 , rep
+                                 , vol
+                                 , accession );
+        }
+        else
+        {
+            /* allow for individual rep-server and volume parts */
+            if ( rep [ 0 ] != 0 )
+            {
+                rc = string_printf ( path, path_max, &len, "%s/", rep );
+                if ( rc != 0 || ( total = len ) >= path_max )
+                    return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+            }
+            else if ( vol [ 0 ] != 0 )
+            {
+                rc = string_printf ( & path [ total ], path_max - total, &len, "%s/", vol );
+                if ( rc != 0 || ( total = len ) >= path_max )
+                    return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+            }
+
+            /* append the accession */
+            rc = string_printf ( & path [ total ], path_max - total, &len, "%s"
+                             , accession );
+        }
+
+        /* common detection of buffer overflow */
+        if ( rc != 0 || ( total += len ) >= path_max )
+            rc = RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+    }
+
+    return rc;
+}
+
+/*
+ * Try to locate in RefSeq Archives:
+ * check for pattern '(\w{4}\d{2})[\.\d]+'; the archive is $1
+ * use the scheme "x-ncbi-legrefseq" for vfs to recognize special case
+ */
+static
+rc_t SRAPathFullREFSEQArchive(NCBISRAPath const *self,
+                              char const rep[],
+                              char const vol[],
+                              char const accession[],
+                              char path[],
+                              size_t path_max
+                             )
+{
+    size_t const rep_sz = strlen(rep);
+    size_t const vol_sz = strlen(vol);
+    char const *const rep_sep = (rep_sz > 0 && rep[rep_sz - 1] != '/') ? "/" : "";
+    char const *const vol_sep = (vol_sz > 0 && vol[vol_sz - 1] != '/') ? "/" : "";
+    size_t sz;
+    unsigned i;
+    VFSManager *vfs;
+    rc_t rc = VFSManagerMake(&vfs);
+    VPath *vpath;
+    KDirectory const *dir;
+    KPathType type;
+    
+    if (rc)
+        return rc;
+    
+    for (i = 0; i < 4; ++i) {
+        int const ch = accession[i];
+        
+        if (ch == 0 || !isalpha(ch))
+            return RC(rcSRA, rcMgr, rcAccessing, rcPath, rcIncorrect);
+    }
+    for ( ; ; ++i) {
+        int const ch = accession[i];
+        
+        if (ch == 0)
+            break;
+        if (ch != '.' && !isdigit(ch))
+            return RC(rcSRA, rcMgr, rcAccessing, rcPath, rcIncorrect);
+    }
+    if (i < 8)
+        return RC(rcSRA, rcMgr, rcAccessing, rcPath, rcIncorrect);
+    
+    rc = string_printf(path, path_max, &sz, "x-ncbi-legrefseq:%s%s%s%s%.6s", rep, rep_sep, vol, vol_sep, accession);
+    if (rc) return rc;
+    i = sz;
+    
+    rc = VPathMake(&vpath, path + 17);
+    if (rc) return rc;
+
+    rc = VFSManagerOpenDirectoryRead(vfs, &dir, vpath);
+    VPathRelease(vpath);
+    VFSManagerRelease(vfs);
+    if (rc) return rc;
+    
+    type = KDirectoryPathType(dir, "tbl/%s", accession);
+    KDirectoryRelease(dir);
+    
+    if (type != kptDir)
+        return RC(rcSRA, rcMgr, rcAccessing, rcPath, rcIncorrect);
+
+    rc = string_printf(path + i, path_max - i, &sz, "#tbl/%s", accession);
+    
+    return rc;
+}
+
+/*
+* WGS style naming: accession name ABCD01 resolves into WGS/AB/CD/ABCD01
+*/
+static
+rc_t SRAPathFullWGS( const NCBISRAPath *self, const char *rep, const char *vol,
+    const char *accession, char *path, size_t path_max )
+{
+    /* pick apart accession */
+    uint32_t prefix, number;
+    rc_t rc = SRAPathParseRunAccession ( accession, & prefix, & number );
+    if ( rc == 0 )
+    {
+        size_t len;
+        size_t total = 0;
+
+        if ( prefix < 4 )
+        {
+            return RC ( rcSRA, rcMgr, rcResolving, rcName, rcTooShort );
+        }
+
+        if ( rep [ 0 ] != 0 && vol [ 0 ] != 0 )
+        {
+            /* normally write all parts at once */
+            if ( rep [ strlen (rep) - 1 ] == '/') /* check for need or not a '/' between rep and vol */
+                rc= string_printf ( path, path_max, &len, "%s%s/WGS/%.2s/%.2s/%s"
+                                 , rep
+                                 , vol
+                                 , accession
+                                 , accession+2
+                                 , accession );
+            else
+                rc= string_printf ( path, path_max, &len, "%s/%s/WGS/%.2s/%.2s/%s"
+                                 , rep
+                                 , vol
+                                 , accession
+                                 , accession+2
+                                 , accession );
+        }
+        else
+        {
+            /* allow for individual rep-server and volume parts */
+            if ( rep [ 0 ] != 0 )
+            {
+                rc = string_printf ( path, path_max, &len, "%s/", rep );
+                if ( rc != 0 || ( total = len ) >= path_max )
+                    return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+            }
+            else if ( vol [ 0 ] != 0 )
+            {
+                rc = string_printf ( & path [ total ], path_max - total, &len, "%s/", vol );
+                if ( rc != 0 || ( total = len ) >= path_max )
+                    return RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+            }
+
+            /* append the accession */
+                rc= string_printf ( & path [ total ], path_max - total, &len, "WGS/%.2s/%.2s/%s"
+                                 , accession
+                                 , accession+2
+                                 , accession );
+        }
+
+        /* common detection of buffer overflow */
+        if ( rc != 0 || ( total += len ) >= path_max )
+            rc = RC ( rcSRA, rcMgr, rcAccessing, rcBuffer, rcInsufficient );
+    }
+
+    return rc;
+}
+
+static
+rc_t ApplyAlg( const NCBISRAPath *self, const char *rep, const char *vol, 
+    const char *accession, char *path, size_t path_max, NCBIRepository *repo, bool* found)
+{
+    SRAPathFindInfo pb;
+    /* see if we recognize volume */
+    pb . path = vol;
+    pb . size = strlen ( vol );
+    pb . found = 0;
+
+    DLListDoUntil ( & repo -> vols, 0, SRAPathStringFind, & pb );
+    if ( pb . found )
+    {
+        *found = true;
+        switch (pb . alg)
+        {
+        case alg_ebi:
+            return SRAPathFullEBI ( self, rep, vol, accession, path, path_max );
+        case alg_refseq:
+        {
+            rc_t rc = SRAPathFullREFSEQ ( self, rep, vol, accession, path, path_max );
+            if ( rc == 0) /* check for existence of accession at the root of the volume, and if not found try to apply the default path-building scheme */
+            {
+                switch ( KDirectoryPathType ( self -> dir, path ) )
+                {
+                case kptNotFound:
+                case kptBadPath:
+                    return SRAPathFullREFSEQArchive( self, rep, vol, accession, path, path_max );
+                default:
+                	return 0;
+                }
+            }
+		}            
+        case alg_wgs:
+            return SRAPathFullWGS ( self, rep, vol, accession, path, path_max );
+        default:
+            break;
+        }
+    }
+    *found = false;
+    return 0;
+}
+
+static
+rc_t CC NCBISRAPathFull ( const NCBISRAPath *self, const char *rep, const char *vol,
+    const char *accession, char *path, size_t path_max )
+{
+    NCBIRepository *repo;
+    bool found;
+    rc_t rc;
+
+    /* loop through repositories */ 
+    for ( repo = ( NCBIRepository* ) DLListHead ( & self -> repos );
+          repo != NULL; repo = ( NCBIRepository* ) DLNodeNext ( & repo -> n ) )
+    {
+        rc = ApplyAlg( self, rep, vol, accession, path, path_max, repo, &found);
+        if (found)
+        {
+            return rc;
+        }
+    }
+    /* try the default repository */
+    rc = ApplyAlg( self, rep, vol, accession, path, path_max, self -> dflt_repo, &found);
+    if (found)
+    {
+        return rc;
+    }
+    /* internal version */
+    return SRAPathFullInt ( self, rep, vol, accession, path, path_max, 1024 );
+}
+
+
+/* Test
+ *  returns true if path appears to be accession
+ *  the test is a heuristic, and may return false positives
+ *
+ *  "path" [ IN ] - NUL terminated path to run
+ */
+static
+bool SRAPathTestTable ( const KDirectory *dir, uint32_t type, const char *path )
+{
+    /* differentiate between legacy and current structure */
+    switch ( KDirectoryPathType ( dir, "%s/idx", path ) )
+    {
+    case kptNotFound:
+        switch ( KDirectoryPathType ( dir, "%s/meta", path ) )
+        {
+        case kptFile:
+        case kptFile | kptAlias:
+            switch ( KDirectoryPathType ( dir, "%s/skey", path ) )
+            {
+            case kptFile:
+            case kptFile | kptAlias:
+                return true;
+            }
+            break;
+        }
+        break;
+
+    case kptDir:
+    case kptDir | kptAlias:
+        switch ( KDirectoryPathType ( dir, "%s/md/cur", path ) )
+        {
+        case kptFile:
+        case kptFile | kptAlias:
+            return true;
+        }
+        break;
+    }
+
+    /* not a table */
+    return false;
+}
+
+static
+bool SRAPathTestDatabase ( const KDirectory *dir, uint32_t type, const char *path )
+{
+    /* don't have a more stringent requirement for database at this time */
+    return true;
+}
+
+static
+bool SRAPathTestFile ( const KDirectory *dir, uint32_t type, const char *path )
+{
+    /* TBD - need to look at magic information */
+    return false;
+}
+
+static
+bool SRAPathTestInt ( const KDirectory *dir, uint32_t type, const char *path )
+{
+    switch ( type )
+    {
+    case kptDir:
+    case kptDir | kptAlias:
+        break;
+
+    case kptFile:
+    case kptFile | kptAlias:
+        return SRAPathTestFile ( dir, type, path );
+
+    default:
+        return false;
+    }
+
+    /* detect apparent tables */
+    switch ( KDirectoryPathType ( dir, "%s/col", path ) )
+    {
+    case kptDir:
+    case kptDir | kptAlias:
+        return SRAPathTestTable ( dir, type, path );
+    }
+
+    /* detect apparent databases */
+    switch ( KDirectoryPathType ( dir, "%s/tbl", path ) )
+    {
+    case kptDir:
+    case kptDir | kptAlias:
+        return SRAPathTestDatabase ( dir, type, path );
+    }
+
+    /* not a recognized accession */
+    return false;
+}
+
+static
+bool CC NCBISRAPathTest ( const NCBISRAPath *self, const char *path )
+{
+    return SRAPathTestInt ( self -> dir,
+        KDirectoryPathType ( self -> dir, path ), path );
+}
+
+
+/* FindOnServer
+ *  find accession on rep-server 
+ */
+static
+rc_t SRAPathFindOnServer ( const NCBISRAPath *self, const NCBIRepository *repo, const SRAPathString *srv,
+    const char *accession, char *path, size_t path_max, int vol_type )
+{
+    const SRAPathString *vol;
+
+    PATH_DEBUG (("SRAPathFindOnServer(%s)\n", srv->path));
+
+    for ( vol = ( const SRAPathString* ) DLListHead ( & repo -> vols );
+          vol != NULL; vol = ( const SRAPathString* ) DLNodeNext ( & vol -> n ) )
+    {
+        if ( vol_type == alg_none || vol_type == vol->alg )
+        {
+            rc_t rc;
+
+            PATH_DEBUG (("SRAPathFindOnServer trying volume %s\n", vol->path));
+
+            switch ( vol -> alg )
+            {
+            case alg_ebi:
+                rc = SRAPathFullEBI ( self, srv -> path, vol -> path, accession, path, path_max );
+                break;
+            case alg_refseq:
+                rc = SRAPathFullREFSEQ ( self, srv -> path, vol -> path, accession, path, path_max );
+                if ( rc == 0) /* check for existence of accession at the root of the volume, and if not found try to apply the default path-building scheme */
+                {
+                    switch ( KDirectoryPathType ( self -> dir, path ) )
+                    {
+                    case kptNotFound:
+                    case kptBadPath:
+                        rc = SRAPathFullREFSEQArchive( self, srv -> path, vol -> path, accession, path, path_max );
+                        if (rc == 0) {
+                            PATH_DEBUG (("SRAPathFindOnServer: found(%s)\n", path));
+                            return 0;
+                        }
+                        break;
+                    default:
+                    	return 0;
+                    }
+                }
+                break;
+            case alg_wgs:
+                rc = SRAPathFullWGS ( self, srv -> path, vol -> path, accession, path, path_max );
+                break;
+            default:
+                rc = SRAPathFullInt ( self, srv -> path, vol -> path, accession, path, path_max, 1024 );
+                break;
+            }
+            if ( rc == 0 )
+            {
+                switch ( KDirectoryPathType ( self -> dir, path ) )
+                {
+                case kptNotFound:
+                case kptBadPath:
+                    break;
+                default:
+                    PATH_DEBUG (("SRAPathFindOnServer: found(%s)\n", path));
+                    return 0;
+                }
+            }
+            else
+            {
+                if ( GetRCState( rc ) == rcInsufficient )
+                    return rc;
+            }
+        }
+    }
+
+    return RC ( rcSRA, rcMgr, rcSelecting, rcPath, rcNotFound );
+}
+
+/* FindInRepo
+ *  find accession in a repository
+ */
+static
+rc_t SRAPathFindInRepo ( const NCBISRAPath *self, NCBIRepository *repo, const char *accession, 
+                         char *path, size_t path_max, size_t *rep_len, int vol_type )
+{
+    SRAPathString *srv;
+
+    PATH_DEBUG (("SRAPathFindInRepo(%s)\n", AlgToStr(repo->type)));
+
+    /* look for accession on a rep-server */
+    for ( srv = ( SRAPathString* ) DLListHead ( & repo -> repsrv ); srv != NULL; srv = ( SRAPathString* ) DLNodeNext ( & srv -> n ) )
+    {
+        /* try with this server */
+        rc_t rc = SRAPathFindOnServer ( self, repo, srv, accession, path, path_max, vol_type );
+        if ( rc == 0 )
+        {
+            /* make sure server is at head of list */
+            if ( DLNodePrev ( & srv -> n ) != NULL )
+            {
+                DLListUnlink ( & repo -> repsrv, & srv -> n );
+                DLListPushHead ( & repo -> repsrv, & srv -> n );
+            }
+
+            if ( rep_len != NULL )
+                * rep_len = strlen ( srv -> path );
+            
+            return 0;
+        }
+
+        if ( GetRCState ( rc ) != rcNotFound )
+            return rc;
+    }
+
+    return RC ( rcSRA, rcMgr, rcSelecting, rcPath, rcNotFound );
+}
+
+/* FindInRepoByType
+ *  find accession in a repository of a given type
+ */
+static
+rc_t SRAPathFindInRepoByType ( const NCBISRAPath *self, const char *accession, char *path, size_t path_max, size_t *rep_len, int repo_type, int vol_type )
+{
+    /* loop through all repositories */
+    NCBIRepository *repo; 
+    for ( repo = ( NCBIRepository* ) DLListHead ( & self -> repos ); repo != NULL; repo = ( NCBIRepository* ) DLNodeNext ( & repo -> n ) )
+    {
+        if ( repo->type == repo_type && SRAPathFindInRepo(self, repo, accession, path, path_max, rep_len, vol_type) == 0 )
+            return 0;
+    }
+    return RC ( rcSRA, rcMgr, rcSelecting, rcPath, rcNotFound );
+}
+
+/* FastFind
+ * Uses heuristics to select the repository most likely to contain the accession, then tries to locate the acecssion in the repository.
+*/
+static
+rc_t FindFast( const NCBISRAPath *cself, const char *accession, char *path, size_t path_max, size_t *rep_len )
+{
+    /*TODO: look up cache first */
+    
+    /* recognize known naming schemes */
+    size_t size = string_size(accession);
+    if ( string_cmp(accession, size, "SRR", 3, 3) == 0 )
+        return SRAPathFindInRepoByType(cself, accession, path, path_max, rep_len, alg_ncbi, alg_ncbi);
+
+    if ( string_cmp(accession, size, "ERR", 3, 3) == 0 )
+        return SRAPathFindInRepoByType(cself, accession, path, path_max, rep_len, alg_ncbi, alg_ebi);
+
+    if ( string_cmp(accession, size, "DRR", 3, 3) == 0 )
+        return SRAPathFindInRepoByType(cself, accession, path, path_max, rep_len, alg_ncbi, alg_ddbj);
+        
+    if ( string_chr(accession, size, '.') != NULL )
+        return SRAPathFindInRepoByType(cself, accession, path, path_max, rep_len, alg_refseq, alg_none);    
+        
+    if ( size > 2 && isdigit(accession[size-1]) && isdigit(accession[size-2]) && ! isdigit(accession[size-3]) ) 
+        return SRAPathFindInRepoByType(cself, accession, path, path_max, rep_len, alg_wgs, alg_none);    
+        
+    return RC ( rcSRA, rcMgr, rcSelecting, rcPath, rcNotFound );
+}
+
+/* Find
+ *  finds location of run within rep-server/volume matrix
+ *
+ *  "accession" [ IN ] - NUL terminated run accession,
+ *   e.g. "SRR000001"
+ *
+ *  "path" [ OUT ] and "path_max" [ IN ] - return buffer for
+ *  NUL-terminated full path to accession.
+ *
+ *  returns 0 if path exists, rc state rcNotFound if
+ *  path cannot be found, and rcInsufficient if buffer is
+ *  too small.
+ */
+static
+rc_t CC NCBISRAPathFindWithRepLen ( const NCBISRAPath *cself, const char *accession, char *path, size_t path_max, size_t *rep_len )
+{
+    rc_t rc;
+    NCBIRepository *repo;
+
+    PATH_DEBUG(("NCBISRAPathFindWithRepLen(%s)\n", accession));
+
+    rc = FindFast( cself, accession, path, path_max, rep_len );
+    if ( rc == 0 )
+        return 0;
+        
+    /* loop through all repositories */ 
+    for ( repo = ( NCBIRepository* ) DLListHead ( & cself -> repos ); repo != NULL; repo = ( NCBIRepository* ) DLNodeNext ( & repo -> n ) )
+    {
+        rc = SRAPathFindInRepo(cself, repo, accession, path, path_max, rep_len, alg_none);
+        if ( rc == 0 )
+            return 0;
+    }
+    /* default repository */
+    return SRAPathFindInRepo(cself, cself -> dflt_repo, accession, path, path_max, rep_len, alg_none);
+}
+
+struct SRAPath_vt_v2 vtSRAPath =
+{
+    2, 1,
+    NCBISRAPathAddRef,
+    NCBISRAPathRelease,
+    NCBISRAPathVersion,
+    NCBISRAPathClear,
+    NCBISRAPathAddRepPathDefault,
+    NCBISRAPathAddVolPathDefault,
+    NCBISRAPathFull,
+    NCBISRAPathTest,
+    NCBISRAPathFindWithRepLen
+};
+
+/* Make
+ *  create path manager
+ *
+ *  the path manager should already be configured with
+ *  standard search paths, but can be augmented by using
+ *  the Add*Path messages.
+ *
+ *  "dir" [ IN, NULL OKAY ] - optional root directory to use
+ *  attaches a new reference
+ */
+MOD_EXPORT
+rc_t CC SRAPathMakeImpl ( SRAPath **pm, const KDirectory *dir )
+{
+    rc_t rc;
+
+    if ( pm == NULL )
+        rc = RC ( rcSRA, rcMgr, rcConstructing, rcParam, rcNull );
+    else
+    {
+        NCBISRAPath *p = (NCBISRAPath *) malloc ( sizeof * p );
+        if ( p == NULL )
+            rc = RC ( rcSRA, rcMgr, rcConstructing, rcMemory, rcExhausted );
+        else
+        {
+            p -> dad . vt = ( SRAPath_vt* ) & vtSRAPath;
+            p -> dir = dir;
+            if ( dir != NULL )
+                rc = KDirectoryAddRef ( dir );
+            else
+            {
+                KDirectory *wd;
+                rc = KDirectoryNativeDir ( & wd );
+                p -> dir = wd;
+            }
+
+            if ( rc != 0 )
+                free ( p );
+            else
+            {
+                DLListInit ( & p -> repos );
+                p -> dflt_repo = NULL;
+                atomic32_set ( & p -> refcount, 1 );
+
+                /* the object is now complete */
+                rc = SRAPathConfig ( p );
+                if ( rc == 0 )
+                {
+                    * pm = & p -> dad;
+                    return 0;
+                }
+
+                SRAPathWhack ( p );
+            }
+        }
+
+        * pm = NULL;
+    }
+
+    return rc;
+}
diff --git a/libs/vfs/unix/syspath.c b/libs/vfs/unix/syspath.c
new file mode 100644
index 0000000..540dd84
--- /dev/null
+++ b/libs/vfs/unix/syspath.c
@@ -0,0 +1,127 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <vfs/extern.h>
+
+#include <vfs/path.h>
+#include "path-priv.h"
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/debug.h>
+
+#include <stdlib.h>
+
+#include <string.h>
+#include <unistd.h>
+
+rc_t VPathTransformSysPath (VPath * self)
+{
+#if 1
+    return 0;
+#else
+    size_t path_size = strlen (sys_path) + 1; /* includes NUL */
+    rc_t rc = 0;
+    void * temp = self->storage;
+
+    if (self->storage == self->buffer)
+    {
+        if (path_size > sizeof (self->buffer))
+            temp = self->storage = NULL;
+    }
+    else if (self->alloc_size < path_size)
+    {
+        temp = NULL;
+    }
+
+    if (temp == NULL)
+    {
+        temp = realloc (self->storage, path_size);
+        if (temp == NULL)
+        {
+            rc = RC (rcFS, rcPath, rcConstructing, rcMemory, rcExhausted);
+            if (self->alloc_size == 0)
+                self->storage = self->buffer;
+        }
+        else
+        {
+            self->alloc_size = path_size;
+            self->storage = temp;
+        }
+    }
+    if (rc == 0)
+    {
+        /* replace this with a minimal path validator */
+        strcpy (self->storage, sys_path);
+        self->asciz_size = path_size-1;
+    }
+    return rc;
+#endif
+}
+
+
+rc_t VPathGetCWD (char * buffer, size_t buffer_size)
+{
+    char * temp = getcwd (buffer, buffer_size);
+    if (temp == NULL)
+        return RC (rcFS, rcPath, rcAccessing, rcBuffer, rcInsufficient);
+    return 0;
+}
+
+
+rc_t VPathTransformPathHier (char ** ppath)
+{
+#if USE_EXPERIMENTAL_CODE && 0
+/* turning this off until http urls are better handled. */
+    char * pc;
+
+    pc = *ppath;
+    PATH_DEBUG (("%s: incoming path '%s'\n",__func__, *ppath));
+
+    if ((pc[0] == '/') && (pc[1] == '/'))
+    {
+        pc += 2;
+
+        if (pc[0] != '/')
+        {
+            static const char localhost[] = "localhost";
+            size_t z = strlen (localhost);
+
+            if (strncmp (localhost, pc, z ) == 0)
+                pc += z;
+            else
+            {
+                rc_t rc =  RC (rcFS, rcPath, rcConstructing, rcUri, rcIncorrect);
+                LOGERR (klogErr, rc, "illegal host in kfs/path url");
+                return rc;
+            }
+        }
+        *ppath = pc;
+    }
+    PATH_DEBUG (("%s: outgoing path '%s'\n",__func__, *ppath));
+#endif
+    return 0;
+}
diff --git a/libs/vfs/win/syspath.c b/libs/vfs/win/syspath.c
new file mode 100644
index 0000000..707e833
--- /dev/null
+++ b/libs/vfs/win/syspath.c
@@ -0,0 +1,288 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#define CHECK_WINDOWS_PATH_LENGTH 0
+#include <vfs/extern.h>
+
+#include <vfs/path.h>
+#include "path-priv.h"
+#include <klib/defs.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <windows.h>
+#include <direct.h>
+
+static const
+char * reserved_device_names [] =
+{ 
+    "CON:",
+    "PRN:",
+    "AUX:",
+    "NUL:",
+    "COM1:",
+    "COM2:",
+    "COM3:",
+    "COM4:",
+    "COM5:",
+    "COM6:",
+    "COM7:",
+    "COM8:",
+    "COM9:",
+    "LPT1:",
+    "LPT2:",
+    "LPT3:",
+    "LPT4:",
+    "LPT5;",
+    "LPT6:",
+    "LPT7:",
+    "LPT8:",
+    "LPT9:",
+    NULL
+};
+
+rc_t CC VPathTransformSysPath (VPath * self)
+{
+    char * pc;
+    size_t lim;
+    size_t ix;
+    rc_t rc = 0;
+
+    pc = (char *)(self->path.addr);
+    lim = StringSize (&self->path);
+
+    if (lim == 0)
+        return 0;
+
+    /* -----
+     * toss out windows/dos device names
+     */
+    for (ix = 0; reserved_device_names[ix] != NULL; ++ix)
+        if (strcmp (reserved_device_names[ix], pc) == 0)
+            return RC (rcFS, rcPath, rcConstructing, rcPath, rcIncorrect);
+
+    /* -----
+     * look for for mingw and cygwin full paths and make them windowish
+     * NOTE we could screw things up here with bad strings like
+     * /cygdrive/haha/fooled-you
+     */
+
+    if (pc[0] == '/')
+    {
+        static const char cygdrive [] = "/cygdrive/";
+
+        if (strncmp (pc, cygdrive, sizeof cygdrive - 1) == 0)
+        {
+            pc += sizeof cygdrive - 2;
+            lim -= sizeof cygdrive - 2;
+            /* NOTE: if the macro changes this could fail! */
+            StringInit (&self->path, pc,
+                        StringSize(&self->path) - sizeof cygdrive - 2,
+                        StringLength(&self->path) - sizeof cygdrive - 2);
+        }
+
+        /* if here we had a mingw or cygwin specification */
+        if (isalpha (pc[1]) && (pc[2] == '/'))
+        {
+            /* change it back to a windows specification */
+            pc[0] = pc[1];
+            pc[1] = ':';
+        }
+    }
+
+    /* change from  Windows '/' to posix '/' segment dividers */
+    for (ix = 0; ix < lim; ++ix)
+        if (pc [ix] == '\\')
+            pc [ix] = '/';
+
+    /* look for stray ':' characters */
+    for (ix = 0; ix < lim; ++ix)
+    {
+        if (pc[ix] == ':')
+        {
+            rc = RC (rcFS, rcPath, rcConstructing, rcPath, rcInvalid);
+            PLOGERR (klogErr,
+                     (klogErr, rc, "incorrect use of ':' in path '$(path)'",
+                      "path=%s", pc));
+            return rc;
+        }
+        if (ix == 0)
+            ++ix;
+    }
+
+    if ((lim > 1) && (pc[1] == ':'))
+    {
+        if (!isalpha (pc[0]))
+        {
+            rc = RC (rcFS, rcPath, rcConstructing, rcPath, rcInvalid);
+            PLOGERR (klogErr,
+                     (klogErr, rc, "invalid character as drive letter '$(c)' ($(d)) in path '$(S)'",
+                      "c=%c,d=%d,s=%s",pc[0],pc[0],pc));
+            return rc;
+        }
+        /* we don't support drive relative addressing at this point
+         * we should correct this in the future */
+        if (pc[2] != '/')
+        {
+            rc = RC (rcFS, rcPath, rcConstructing, rcPath, rcIncorrect);
+            PLOGERR (klogErr,
+                     (klogErr, rc, "drive relative addressing not currently supported '$(path)'",
+                      "path=%s", pc));
+            return rc;
+        }
+    }
+
+    if ((pc[0] == '/') && (pc[1] == '/')) /* UNC form */
+    {
+        if (pc[2] == '.') /* device space name - we don't handle these */
+            return RC (rcFS, rcPath, rcConstructing, rcPath, rcIncorrect);
+
+        if (pc[2] == '?') /* special space name - we don't handle these */
+            return RC (rcFS, rcPath, rcConstructing, rcPath, rcIncorrect);
+    }
+
+/* possible future stuff? */
+#if DO_MORE_STUFF_TO_VALIDATE_PATH
+    /* -----
+     * this size thing is turned off to allow paths into archives
+     */
+    ix = string_size (ipc = inpath);
+    if (ix > MAX_PATH)
+        return RC (rcFS, rcPath, rcConstructing, rcPath, rcTooLong);
+    {
+        DWORD insize = ilen;
+        DWORD outlen;
+
+        outlen = GetFullPathNameA (ipc, (DWORD)sizeof (temp), temp, NULL);
+
+        if (outlen == 0)
+            return RC (rcFS, rcPath, rcConstructing, rcPath, rcInvalid);
+        if (outlen > sizeof temp)
+            return RC (rcFS, rcPath, rcConstructing, rcPath, rcTooShort);
+
+        ipc = temp;
+
+        opc[0] = '/';
+        opc[1] = ipc [0];
+
+        ix = jx = 2;
+    }
+
+    do
+    {
+        switch (ipc[ix])
+        {
+        case '\0':
+            normalize_done = true;
+            /* fall through */
+        default:
+            opc[jx++] = ipc[ix++];
+            break;
+
+        case '\\':
+            opc[jx++] = '/';
+            ++ix;
+            break;
+
+        case '\x1': /* never allowed */
+        case '\x2':
+        case '\x3':
+        case '\x4':
+        case '\x5':
+        case '\x6':
+        case '\x7':
+        case '\x8':
+        case '\x9':
+        case '\xA':
+        case '\xB':
+        case '\xC':
+        case '\xD':
+        case '\xE':
+        case '\xF':
+        case '\x10':
+        case '\x11':
+        case '\x12':
+        case '\x13':
+        case '\x14':
+        case '\x15':
+        case '\x16':
+        case '\x17':
+        case '\x18':
+        case '\x19':
+        case '\x1A':
+        case '\x1B':
+        case '\x1C':
+        case '\x1D':
+        case '\x1E':
+        case '\x1F':
+        case ':':
+        case '<':
+        case '>':
+        case '"':
+        case '|':
+        case '*':
+        case '?':
+            rc = RC (rcFS, rcPath, rcConstructing, rcPath, rcInvalid);
+            PLOGERR (klogErr,
+                     (klogErr, rc, "invalid character '$(c)' ($(d)) in path '$(s)'",
+                      "c=%c,d=%d,s=%s",ipc[ix],ipc[ix],ipc));
+            return rc;
+        }
+    } while (!normalize_done);
+
+    self->asciz_size = ix - 1;
+
+#endif
+    /* put drive based paths (back?) into our form */
+    if ((lim > 1) && (pc[1] == ':'))
+    {
+        pc[1] = pc[0];
+        pc[0] = '/';
+        self->scheme = vpuri_ncbi_vfs;
+    }
+    return 0;
+}
+
+rc_t VPathTransformPathHier (char ** uri_path)
+{
+    return 0;
+}
+
+LIB_EXPORT rc_t CC VPathGetCWD (char * buffer, size_t buffer_size)
+{
+    char * temp = _getcwd (buffer, (int)buffer_size);
+    if (temp == NULL)
+        return RC (rcFS, rcPath, rcAccessing, rcBuffer, rcInsufficient);
+    return 0;
+}
+
+#if USE_EXPERIMENTAL_CODE
+rc_t VPathInitAuthority (struct VPath * self, char ** next)
+{
+/*     static const char null_string[] = ""; */
+/*     CONST_STRING (&self->authority, null_string); */
+    return 0;
+}
+#endif
diff --git a/libs/vxf/Makefile b/libs/vxf/Makefile
index ebd2c1a..930dd5f 100644
--- a/libs/vxf/Makefile
+++ b/libs/vxf/Makefile
@@ -32,23 +32,27 @@ MOD_LIBS = \
 	libvxf \
 	libwvxf
 
-ALL_LIBS = \
-	$(MOD_LIBS)
+TEST_TOOLS = \
+	wb-test-vxf
 
 include $(TOP)/build/Makefile.env
 
+ALL_LIBS = \
+	$(MOD_LIBS)
+
 #-------------------------------------------------------------------------------
 # outer targets
 #
-vers-includes: $(addsuffix .vers.h,$(ALL_LIBS))
-
-all std: makedirs vers-includes
+all std: makedirs
 	@ $(MAKE_CMD) $(TARGDIR)/std
 
-$(MOD_LIBS): makedirs vers-includes
+$(MOD_LIBS): makedirs
 	@ $(MAKE_CMD) $(TARGDIR)/$@
 
-.PHONY: vers-includes all std $(ALL_LIBS)
+$(TEST_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: all std $(ALL_LIBS) $(TEST_TOOLS)
 
 #-------------------------------------------------------------------------------
 # std
@@ -66,14 +70,6 @@ clean: stdclean
 .PHONY: clean
 
 #-------------------------------------------------------------------------------
-# tag
-#
-tag: \
-	$(addsuffix _tag,$(ALL_LIBS))
-
-.PHONY: tag $(addsuffix _tag,$(ALL_LIBS))
-
-#-------------------------------------------------------------------------------
 # vdb transform library
 #
 $(TARGDIR)/libvxf: $(addprefix $(TARGDIR)/libvxf.,$(MODEXT))
@@ -119,7 +115,9 @@ VXF_SRC = \
 	simple-sub-select \
 	extract_token \
 	strtonum \
-	sprintf
+	sprintf \
+	wgs-tokenize-accession \
+	lower-case-tech-reads
 
 VXF_OBJ = \
 	$(addsuffix .$(LOBX),$(VXF_SRC))
@@ -137,10 +135,7 @@ $(MODDIR)/libvxf.$(SHLX): $(VXF_OBJ)
 $(TARGDIR)/libvxf.$(LIBX): $(ILIBDIR)/libvxf.$(LIBX)
 
 $(ILIBDIR)/libvxf.$(LIBX): $(VXF_OBJ)
-	$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(VXF_LIB)
-
-libvxf_tag:
-	@ $(TOP)/build/tag-module.sh $(MODULE) libvxf $(VXF_OBJ)
+	$(LD) --slib -o $@ $^ $(VXF_LIB)
 
 #-------------------------------------------------------------------------------
 # wvdb transform library
@@ -176,12 +171,37 @@ $(WMODDIR)/libwvxf.$(SHLX): $(WVXF_OBJ)
 $(TARGDIR)/libwvxf.$(LIBX): $(ILIBDIR)/libwvxf.$(LIBX)
 
 $(ILIBDIR)/libwvxf.$(LIBX): $(WVXF_OBJ)
-	$(LD) --slib --vers $(SRCDIR) -o $@ $^ $(WVXF_LIB)
-
-libwvxf_tag:
-	@ $(TOP)/build/tag-module.sh $(MODULE) libwvxf $(WVXF_OBJ)
+	$(LD) --slib -o $@ $^ $(WVXF_LIB)
 
 libwvxf.vers.h:
 	@ true
 
 .PHONY: $(TARGDIR)/libwvxf $(TARGDIR)/libwvxf.$(SHLX) $(TARGDIR)/libwvxf.$(LIBX)
+
+#-------------------------------------------------------------------------------
+# white-box test
+#
+TEST_SRC = \
+	wb-test-vxf \
+	wb-irzip-impl
+
+TEST_OBJ = \
+	$(addsuffix .$(OBJX),$(TEST_SRC))
+
+TEST_LIBS = \
+    -skapp \
+    -svdb \
+    -skdb \
+	-svfs \
+	-skurl \
+	-skrypto \
+    -skfg \
+	-skfs \
+	-skproc \
+    -sktst \
+	-sklib 
+
+$(TEST_BINDIR)/wb-test-vxf: $(TEST_OBJ)
+	$(LP) --exe -o $@ $^ $(TEST_LIBS)
+
+
diff --git a/libs/vxf/checksum.c b/libs/vxf/checksum.c
index b63404a..37b3903 100644
--- a/libs/vxf/checksum.c
+++ b/libs/vxf/checksum.c
@@ -33,6 +33,8 @@
 #include <klib/text.h>
 #include <klib/rc.h>
 
+#include <sysalloc.h>
+
 #include <bitstr.h>
 
 #include <stdlib.h>
diff --git a/libs/vxf/irzip.c b/libs/vxf/irzip.c
index 9b3c54e..2ef4995 100644
--- a/libs/vxf/irzip.c
+++ b/libs/vxf/irzip.c
@@ -304,10 +304,14 @@ rc_t CC irzip(
 /* 
  function izip_fmt izip #2.1 ( izip_set in )
  */
-VTRANSFACT_IMPL(vdb_izip, 2, 1, 0) (const void *Self, const VXfactInfo *info,
+VTRANSFACT_IMPL(vdb_izip, 2, 1, 1) (const void *Self, const VXfactInfo *info,
                                      VFuncDesc *rslt, const VFactoryParams *cp,
                                      const VFunctionParams *dp )
 {
+/*
+* 2.1.1: bug fix for #VDB-539, bad conversions in encode_u64
+*/
+
     if (dp->argc != 1) {
 #if _DEBUGGING
         fprintf(stderr, "dp->argc = %u != 1\n", dp->argc);
diff --git a/libs/vxf/irzip.impl.h b/libs/vxf/irzip.impl.h
index 0335ed8..ff12a7b 100644
--- a/libs/vxf/irzip.impl.h
+++ b/libs/vxf/irzip.impl.h
@@ -43,9 +43,8 @@ static rc_t ENCODE(uint8_t dst[], size_t dsize, size_t *used, int64_t *Min, int6
     unsigned k;
     rc_t rc=0;
     STYPE min,a0;
-    STYPE y_cur;
-    int64_t 	slope, delta_type = DELTA_UND;
-    uint64_t    sum_a0,sum_min,sum_i,sum_delta;
+    int64_t 	slope, delta_type = DELTA_UND,y_cur;
+    uint64_t    sum_a0,sum_min,sum_y,sum_delta;
     uint64_t	max_diff;
     uint8_t	*scratch=NULL;
 #ifdef TRY2SERIES
@@ -76,22 +75,20 @@ static rc_t ENCODE(uint8_t dst[], size_t dsize, size_t *used, int64_t *Min, int6
     /*** floating point calculations are avoided ***/
 	a0 =  Y[0];
 	y_cur = Y[1];
-	slope = (int64_t)Y[1] - Y[0];
-	if(Y[1] < Y[0]) {
-		min = y_cur; 
-        /*** can overflow when STYPE is uint64_t ***/
-        assert ( slope < 0 );
-		sum_min = -slope;
+	sum_y =  Y[0] +  Y[1];
+	slope = (int64_t)Y[1] - (int64_t)Y[0];
+	if(slope < 0) {
+		min = Y[1]; 
+		sum_delta = -slope;
 		delta_type = DELTA_NEG;
 	} else {
-		min = a0;
-		sum_min = slope;
+		min = Y[0];
+		sum_delta = slope;
 		if( slope != 0 ) delta_type = DELTA_POS;
 	}
-	sum_a0 = 0;
-	max_diff = sum_delta = sum_min;
+	max_diff = sum_delta;
 #ifdef TRY2SERIES
-	if(sum_min >= TRIGGER_2ND_SERIES){
+	if(sum_delta >= TRIGGER_2ND_SERIES){
 		last[0]=0; last[1]=1;
 		series[0]=0; series[1]=1;
 	} else {
@@ -102,17 +99,14 @@ static rc_t ENCODE(uint8_t dst[], size_t dsize, size_t *used, int64_t *Min, int6
 		max_diff2[0]= sum_delta;
 	}
 #endif
-	sum_i = 1;
 	for (i = 2; i < N; ++i) {
-		int64_t  ad;
-		int64_t  md = (int64_t)Y[i] - min;
-		int64_t diff =  (int64_t)Y[i] - Y[i-1];
-		int64_t abs_diff = labs(diff);
+		int64_t  md = (int64_t)Y[i] - (int64_t)min;
+		int64_t diff =  (int64_t)Y[i] - (int64_t)Y[i-1];
+		uint64_t abs_diff = (diff >= 0) ? diff : -diff;
 #ifdef TRY2SERIES
 		int64_t	last_delta_type = delta_type ;
 #endif
-		
-
+		sum_y += Y[i];
 		sum_delta += abs_diff;
 		if(abs_diff > max_diff) max_diff = abs_diff;
 #define MACRO_SET_DELTA_TYPE(Diff,DeltaType) \
@@ -139,10 +133,10 @@ static rc_t ENCODE(uint8_t dst[], size_t dsize, size_t *used, int64_t *Min, int6
 				series[i]=0;
 			}
 		} else { /*** second series is in being built ***/
-			int64_t diff1 =  (int64_t)Y[i] - Y[last[0]];
-			int64_t diff2 =  (int64_t)Y[i] - Y[last[1]];
-			int64_t abs_diff1 = labs(diff1);
-			int64_t abs_diff2 = labs(diff2);
+			int64_t diff1 =  (int64_t)Y[i] - (int64_t)Y[last[0]];
+			int64_t diff2 =  (int64_t)Y[i] - (int64_t)Y[last[1]];
+			uint64_t abs_diff1 = (diff1 >= 0) ? diff1 : -diff1;
+			uint64_t abs_diff2 = (diff2 >= 0) ? diff2 : -diff2;
 			if(abs_diff1 <= abs_diff2){
 				last[0]=i;
 				series[i]=0;
@@ -158,32 +152,24 @@ static rc_t ENCODE(uint8_t dst[], size_t dsize, size_t *used, int64_t *Min, int6
 			}
 		}
 #endif
-
-		sum_i += i;
-		if ( md > 0) {
-			sum_min+= md;
-		} else if ( md < 0 ) {
+		if ( md < 0 ) {
 			min = Y[i];
-			sum_min += -md * (i - 1 ); /** running sum difference increases by this amount ***/
 		}
 		y_cur += slope;
-		ad = (int64_t)Y[i] - y_cur;
-		if ( ad > 0 ) {
-			sum_a0 += ad;
-		} else if (ad < 0 ){ /** need to adjust the slope ***/
-			int64_t sd = -ad / i;
-			if (sd*i < -ad) sd++; /** to adjust for rounding above **/
-			
-			y_cur -= sd*i;
-			slope -= sd;
-			sum_a0 = sum_a0 + ad + sum_i*sd;
-
+		if(y_cur > (int64_t)Y[i]){/*** reduce the slope ***/
+			slope =  ((int64_t)Y[i] - (int64_t)Y[0] - i+1/**round down**/) /i;
+			y_cur =  (int64_t)Y[0] + (int64_t)(i* slope);
+			assert( y_cur <= (int64_t)Y[i]);
 		}
 	}
 
     /*** define which delta is the smallest **/
     *series_count=1;
     if(delta_type == DELTA_BOTH) sum_delta <<= 1; /*** in DELTA_BOTH case we will use extra bit ***/
+    
+    sum_min = sum_y - N*min;
+    sum_a0  = sum_y - N*a0 - slope*N*(N-1)/2;
+    
 			
     if( (delta_type == DELTA_POS || delta_type == DELTA_NEG ||
         (delta_type == DELTA_BOTH &&  max_diff <  (((uint64_t)1)<<(sizeof(STYPE)*8-1))) /*** to prevent loosing a bit **/
@@ -281,7 +267,7 @@ static rc_t ENCODE(uint8_t dst[], size_t dsize, size_t *used, int64_t *Min, int6
     } else if( slope == DELTA_NEG){
 	for( i = 0; i != N; ++i){
 		uint64_t  val = a0 - Y[i];
-		assert(Y[i] < a0);
+		assert(Y[i] <= a0);
                 a0 =  Y[i];
 		MACRO_FLUSH_VALUE;
 	}
@@ -299,7 +285,7 @@ static rc_t ENCODE(uint8_t dst[], size_t dsize, size_t *used, int64_t *Min, int6
     } else {
 	for( i = 0; i != N; ++i){
 		uint64_t val =  Y[i] - a0 - slope*i;
-		assert(Y[i] >=  a0 + slope*i);
+		assert((int64_t)Y[i] >=  (int64_t)a0 + slope*i);
 		MACRO_FLUSH_VALUE;
 	}
     }
@@ -334,9 +320,10 @@ static rc_t DECODE(STYPE Y[], unsigned N, int64_t* min, int64_t* slope, uint8_t
     unsigned i;
     uint8_t *scratch=NULL;
     rc_t rc=0;
+    bool    first;
 
     memset(Y, 0, sizeof(Y[0]) * N);
-    for (j = k = 0, m = 1; m < 0x100; m <<= 1, k += 8) {
+    for (j = k = 0, m = 1,first=true; m < 0x100; m <<= 1, k += 8) {
         size_t n;
         
         if ((planes & m) == 0)
@@ -348,18 +335,92 @@ static rc_t DECODE(STYPE Y[], unsigned N, int64_t* min, int64_t* slope, uint8_t
         rc = zlib_decompress(scratch, N, &n, src + j, ssize - j);
         if (rc) goto DONE;
         j += n;
-        
-        for (i = 0; i != N; ++i)
-            Y[i] |= ((STYPE)scratch[i]) << k;
+	if(first){
+		for (i = 0; i != N; ++i) Y[i] = ((STYPE)scratch[i]) << k;
+		first = false;
+	} else {
+		for (i = 0; i != N; ++i) Y[i] |= ((STYPE)scratch[i]) << k;
+	}
     }
     if(series_count == 2){
+#if 0 /** trying to unroll ***/
+	STYPE Ylast;
+	if(slope[0]==DELTA_BOTH){
+		if(slope[1]==DELTA_BOTH){ 
+			for(i = 0; i != N; ++i){
+				scratch[i] = Y[i]&3;
+				Y[i] = ((USTYPE)Y[i]) >> 2;
+			}
+		} else {
+			for(i = 0; i != N; ++i){
+				uint8_t tmp = Y[i]&1;
+				if(tmp){
+					scratch[i] = tmp;
+					Y[i] = ((USTYPE)Y[i]) >> 1;
+				} else {
+					scratch[i] = Y[i]&3;
+					Y[i] = ((USTYPE)Y[i]) >> 2;
+				}
+                        }
+
+		}
+	} else {
+		if(slope[1]==DELTA_BOTH){
+			for(i = 0; i != N; ++i){
+                                uint8_t tmp = Y[i]&1;
+                                if(!tmp){
+                                        scratch[i] = tmp;
+					Y[i] = ((USTYPE)Y[i]) >> 1;
+                                } else {
+                                        scratch[i] = Y[i]&3;
+					Y[i] = ((USTYPE)Y[i]) >> 2;
+
+                                }
+                        }
+		} else {
+			for(i = 0; i != N; ++i){
+				scratch[i] = Y[i]&1;
+				Y[i] = ((USTYPE)Y[i]) >> 1;
+			}
+		}
+	}
+	/** k=0 - main series, k=1 -secondary **/
+	for(k=0;k<2;k++){
+		Ylast = min[k];
+		if(slope[k]==DELTA_POS) {
+			for (i = 0; i != N; ++i){
+				if((scratch[i]&1)==k){
+					Y[i]  = Ylast + Y[i];
+					Ylast = Y[i];
+				}
+			}
+		} else if (slope[k]==DELTA_NEG){
+			for (i = 0; i != N; ++i){
+				if((scratch[i]&1)==k){
+					Y[i]  = Ylast - Y[i];
+					Ylast = Y[i];
+				}
+			}
+		} else for (i = 0; i != N; ++i){
+			if((scratch[i]&1)==k){
+				if(scratch[i]&2){
+					Y[i]  = Ylast - Y[i];
+				} else {
+					Y[i]  = Ylast + Y[i];
+				}
+				Ylast = Y[i];
+			}
+		}
+	}
+
+#else
 	uint32_t last[2]={0,0};
 	for (i = 0; i != N; ++i){
 		if( (Y[i]&1) == 0 ){/**main series **/
 			USTYPE val = (USTYPE)Y[i];
 			val >>= 1;
 			if(i==0){
-                                Y[i] = min[0];
+                                Y[i] = (STYPE)min[0];
                                 last[0]=i;
                         }
 			if(slope[0]==DELTA_POS)      Y[i] = Y[last[0]] + val;
@@ -371,7 +432,7 @@ static rc_t DECODE(STYPE Y[], unsigned N, int64_t* min, int64_t* slope, uint8_t
 			USTYPE val = (USTYPE)Y[i];
 			val >>= 1;
 			if(last[1]==0){
-				Y[i] = min[1];
+				Y[i] = (STYPE)min[1];
 				last[1]=i;
 			}
                         if(slope[1]==DELTA_POS)      Y[i] = Y[last[1]] + val;
@@ -381,22 +442,23 @@ static rc_t DECODE(STYPE Y[], unsigned N, int64_t* min, int64_t* slope, uint8_t
                         last[1]=i;
 		}
         }
+#endif
     } else if(min[0]==0 && slope[0]==0){ /*** no slope no offset - nothing to do ***/
     } else if(slope[0] == DELTA_POS){
 	assert(Y[0] == 0);
-	Y[0] = min[0];
+	Y[0] = (STYPE)min[0];
 	for (i = 1; i != N; ++i){
 		Y[i] = Y[i-1] + Y[i];
 	}
     } else if (slope[0] == DELTA_NEG ) {
 	assert(Y[0] == 0);
-	Y[0] = min[0];
+	Y[0] = (STYPE)min[0];
 	for (i = 1; i != N; ++i){
 		Y[i] =  Y[i-1] - Y[i];
 	}
     } else if (slope[0] == DELTA_BOTH){
 	assert(Y[0] == 0);
-	Y[0] = min[0];
+	Y[0] = (STYPE)min[0];
 	for (i = 1; i != N; ++i){
 		USTYPE val = (USTYPE)Y[i];
 		val >>= 1;
@@ -405,16 +467,16 @@ static rc_t DECODE(STYPE Y[], unsigned N, int64_t* min, int64_t* slope, uint8_t
 	}
     } else if(slope[0] == 0) {
 	for (i = 0; i != N; ++i){
-		Y[i]  += min[0];
+		Y[i]  += (STYPE)min[0];
 	}
     } else {
 	for (i = 0; i != N; ++i){
-                Y[i]  += min[0];
+                Y[i]  += (STYPE)min[0];
                 min[0] += slope[0];
         }
     }
 
 DONE:
-    free(scratch);
+    if(scratch) free(scratch);
     return rc;
 }
diff --git a/libs/vxf/iunzip.c b/libs/vxf/iunzip.c
index acd5ecc..fb9cf52 100644
--- a/libs/vxf/iunzip.c
+++ b/libs/vxf/iunzip.c
@@ -400,7 +400,12 @@ static rc_t decode_encoded(struct decoded *y, const struct encoded *x) {
             n = x->u.izipped.diff_size;
             memcpy(y->diff->data.u8, x->u.izipped.diff, n);
         }
-        elem_bits = (n * 8) / y->diff->size;
+
+        if ( y->diff->size != 0 )
+            elem_bits = (n * 8) / y->diff->size;
+        else
+            return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
+
         if (elem_bits * y->diff->size / 8 != n)
             return RC(rcXF, rcFunction, rcExecuting, rcData, rcInvalid);
         BITS_TO_VARIANT(y->diff, elem_bits);
diff --git a/libs/vxf/izip-common.h b/libs/vxf/izip-common.h
index ee9f9db..c6dc84c 100644
--- a/libs/vxf/izip-common.h
+++ b/libs/vxf/izip-common.h
@@ -69,8 +69,8 @@ static nbuf *alloc_nbuf(unsigned cnt, unsigned var) {
     nbuf *rslt;
     
     rslt = malloc(sizeof(*rslt) - sizeof(rslt->data) + cnt * sizeof(rslt->data.raw[0]));
-    memset(rslt, 0, sizeof(*rslt) - sizeof(rslt->data));
-    if (rslt) {
+    if ( rslt != NULL ) {
+        memset(rslt, 0, sizeof(*rslt) - sizeof(rslt->data));
         rslt->size = cnt;
         rslt->used = 0;
         rslt->var = var;
diff --git a/libs/vxf/libvxf.vers b/libs/vxf/libvxf.vers
index e25d8d9..2bf1ca5 100644
--- a/libs/vxf/libvxf.vers
+++ b/libs/vxf/libvxf.vers
@@ -1 +1 @@
-1.1.5
+1.1.7
diff --git a/libs/vxf/libvxf.vers.h b/libs/vxf/libvxf.vers.h
deleted file mode 100644
index 9ddfc82..0000000
--- a/libs/vxf/libvxf.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define LIBVXF_VERS 0x01010005
diff --git a/libs/vxf/libwvxf.vers b/libs/vxf/libwvxf.vers
index 65087b4..0664a8f 100644
--- a/libs/vxf/libwvxf.vers
+++ b/libs/vxf/libwvxf.vers
@@ -1 +1 @@
-1.1.4
+1.1.6
diff --git a/libs/vxf/lower-case-tech-reads.c b/libs/vxf/lower-case-tech-reads.c
new file mode 100644
index 0000000..9f9e911
--- /dev/null
+++ b/libs/vxf/lower-case-tech-reads.c
@@ -0,0 +1,111 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <vdb/extern.h>
+#include <vdb/xform.h>
+#include <insdc/insdc.h>
+#include <klib/data-buffer.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+
+static
+rc_t CC lower_case_tech_reads ( void *data, const VXformInfo *info, int64_t row_id,
+    VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+{
+    uint32_t i, j, k;
+
+    char *mixed;
+    const char *read_text = argv [ 0 ] . u . data . base;
+    const INSDC_coord_len *read_len = argv [ 1 ] . u . data . base;
+    const INSDC_read_type *read_type = argv [ 2 ] . u . data . base;
+
+    rc_t rc = KDataBufferResize ( rslt -> data, argv [ 0 ] . u . data . elem_count );
+    if ( rc != 0 )
+        return rc;
+
+    rslt -> elem_count = argv [ 0 ] . u . data . elem_count;
+
+    mixed = rslt -> data -> base;
+    read_text += argv [ 0 ] . u . data . first_elem;
+    read_len += argv [ 1 ] . u . data . first_elem;
+    read_type += argv [ 2 ] . u . data . first_elem;
+
+    for ( i = j = 0; i < argv [ 0 ] . u . data . elem_count; ++ j )
+    {
+        /* should still have reads described */
+        if ( j == argv [ 1 ] . u . data . elem_count || j == argv [ 2 ] . u . data . elem_count )
+            break;
+
+        /* get read length */
+        k = read_len [ j ];
+        if ( i + k > argv [ 0 ] . u . data . elem_count )
+            k = argv [ 0 ] . u . data . elem_count - i;
+
+        /* decide upon upper or lower case */
+        if ( ( read_type [ j ] & 1 ) != READ_TYPE_BIOLOGICAL )
+        {
+            for ( ; k > 0; ++ i, -- k )
+                mixed [ i ] = tolower ( read_text [ i ] );
+        }
+        else
+        {
+            for ( ; k > 0; ++ i, -- k )
+                mixed [ i ] = toupper ( read_text [ i ] );
+        }
+    }
+
+    for ( ; i < argv [ 0 ] . u . data . elem_count; ++ i )
+        mixed [ i ] = toupper ( read_text [ i ] );
+
+    return 0;
+}
+
+
+/* lower_case_tech_reads
+ *  locates technical reads within an IUPAC sequence
+ *  converts them to lower-case
+ *
+ *  "read_text" [ DATA ] - IUPAC source text
+ *
+ *  "read_len" [ DATA ] - ordered array of read lengths
+ *
+ *  "read_type" [ DATA ] - describes which reads are technical
+ *  and which are biological. determines the case of each read segment
+ *
+ * extern function
+ * INSDC:dna:mixed_case:text NCBI:lower_case_tech_reads #1 ( INSDC:dna:text read_text,
+ *     INSDC:coord:len read_len, INSDC:read:type read_type );
+ */
+VTRANSFACT_IMPL ( NCBI_lower_case_tech_reads, 1, 0, 0 ) ( const void *self, const VXfactInfo *info,
+    VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+{
+    rslt -> u . rf = lower_case_tech_reads;
+    rslt -> variant = vftRow;
+    return 0;
+}
diff --git a/libs/vxf/math-funcs-impl.h b/libs/vxf/math-funcs-impl.h
index 73269ea..8f95e12 100644
--- a/libs/vxf/math-funcs-impl.h
+++ b/libs/vxf/math-funcs-impl.h
@@ -225,7 +225,7 @@ rc_t CC array_func(
     self_t hack;
 
     hack.vp = Self;
-    hack.f(dst, src, num_elements);
+    hack.f(dst, src, ( size_t ) num_elements);
     return 0;
 }
 
diff --git a/libs/vxf/simple-sub-select.c b/libs/vxf/simple-sub-select.c
index f04e34c..044d0aa 100644
--- a/libs/vxf/simple-sub-select.c
+++ b/libs/vxf/simple-sub-select.c
@@ -28,6 +28,7 @@
 #include <vdb/database.h>
 #include <vdb/table.h>
 #include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
 
 
 #include <klib/rc.h>
@@ -49,6 +50,10 @@ struct SubSelect
 {
     const VCursor *curs;
     uint32_t idx;
+    const VCursor *native_curs; /** Native cursors are either master cursor or sub_cursors - no need to AddRef **/
+    bool  first_time;
+    char  *col_name;
+    uint32_t col_name_len;
 };
 
 static
@@ -76,6 +81,18 @@ rc_t CC simple_sub_select ( void *data, const VXformInfo *info,
     	const int32_t *remote_idx = argv[1].u.data.base;
 	idx=remote_idx[argv[1].u.data.first_elem];
     }
+    if(self->native_curs && self->first_time){ /*** can we use native cursor for the data? ***/
+	SubSelect *mself = (SubSelect *)self;
+	uint32_t idx;
+	rc = VCursorAddColumn ( mself->native_curs, & idx, "%.*s", mself->col_name_len, mself->col_name );
+	if(rc == 0 || GetRCState(rc) == rcExists){
+		VCursorRelease( mself->curs);
+		mself->curs = mself->native_curs;
+		mself->idx  = idx;
+	}
+	mself->first_time = false;
+	rc = 0; /** reset rc? **/
+    }
 	
     /* sub-select */
     rc = VCursorCellDataDirect ( self -> curs, * remote_row_id, self -> idx,
@@ -122,39 +139,53 @@ rc_t CC simple_sub_select ( void *data, const VXformInfo *info,
 /* open_sub_cursor
  */
 static
-rc_t open_sub_cursor ( SubSelect **fself, const VXfactInfo *info, const VFactoryParams *cp )
+rc_t open_sub_cursor ( SubSelect **fself, const VXfactInfo *info, const VFactoryParams *cp, const VCursor *native_curs )
 {
     rc_t rc=0;
-    const VDatabase *db;
     const VTable *tbl, *ftbl = NULL;
+    char name[256]="";
+    const VCursor *curs;
 
     if ( cp -> argv [ 0 ] . count > 0 )
     {
-    	rc = VTableOpenParentRead ( info -> tbl, & db );
-        if ( rc ==0 )
-        {
-            rc = VDatabaseOpenTableRead ( db, & ftbl,"%.*s",
-		        ( int ) cp -> argv [ 0 ] . count, cp -> argv [ 0 ] . data . ascii );
-            VDatabaseRelease ( db );
-            tbl = ftbl;
-        }
+	sprintf(name,"%.*s",(int)cp->argv[0].count,cp->argv[0].data.ascii);
+	rc = VCursorLinkedCursorGet(native_curs,name,&curs);
+	if(rc == 0){
+		rc = VCursorOpenParentRead(curs,&ftbl);
+		if(rc != 0)
+			return rc;
+		VCursorAddRef(curs);
+		tbl = ftbl;
+	} else {
+		const VDatabase *db;
+		rc = VTableOpenParentRead ( info -> tbl, & db );
+		if(rc != 0) return rc;
+		rc = VDatabaseOpenTableRead ( db, & ftbl,name);
+		if(rc != 0) return rc;
+		VDatabaseRelease ( db );
+		tbl = ftbl;
+		rc = VTableCreateCachedCursorRead ( tbl, (const VCursor**)& curs, 256*1024*1024 ); /*** some random io is expected ***/
+		if(rc != 0) return rc;
+		rc = VCursorPermitPostOpenAdd( curs );
+		if(rc != 0) return rc;
+		rc = VCursorOpen( curs );
+		if(rc != 0) return rc;
+		rc = VCursorLinkedCursorSet(native_curs,name,curs);
+		if(rc != 0) return rc;
+	}
+	native_curs = NULL;
     }
-    else
+    else /** we don't now if native_curs permits adding columns **/
     {
         tbl = info -> tbl;
+	rc = VTableCreateCachedCursorRead ( tbl, & curs, 0 ); /*** some random io is expected ***/
     }
-
-	
     if ( rc == 0 )
     {
-        const VCursor *curs;
-        rc = VTableCreateCachedCursorRead ( tbl, & curs, 4*1024*1024 ); /*** some random io is expected ***/
-        if ( rc == 0 )
-        {
             uint32_t idx;
             rc = VCursorAddColumn ( curs, & idx, "%.*s",
                 ( int ) cp -> argv [ 1 ] . count, cp -> argv [ 1 ] . data . ascii );
-            if ( rc == 0 )
+            if ( rc == 0 || GetRCState(rc) == rcExists)
             {
                 rc = VCursorOpen ( curs );
                 if ( rc == 0 )
@@ -179,6 +210,11 @@ rc_t open_sub_cursor ( SubSelect **fself, const VXfactInfo *info, const VFactory
                             {
                                 self -> curs = curs;
                                 self -> idx = idx;
+				self->native_curs = native_curs;
+				self->first_time  = true;
+				self->col_name_len  = cp->argv[1].count;
+				self->col_name = malloc(self->col_name_len);
+				memcpy(self->col_name,cp->argv[1].data.ascii,self->col_name_len);
                                 * fself = self;
                                 if ( ftbl != NULL )
                                     VTableRelease ( ftbl );
@@ -189,9 +225,7 @@ rc_t open_sub_cursor ( SubSelect **fself, const VXfactInfo *info, const VFactory
                 }
             }
             VCursorRelease ( curs );
-        }
     }
-
     if ( ftbl != NULL )
         VTableRelease ( ftbl );
 
@@ -205,7 +239,8 @@ static
 void CC close_sub_cursor ( void *data )
 {
     SubSelect *self = data;
-    VCursorRelease ( self -> curs );
+    if(self->curs != self->native_curs) VCursorRelease ( self -> curs );
+    free ( self->col_name);
     free ( self );
 }
 
@@ -224,7 +259,7 @@ VTRANSFACT_IMPL ( vdb_simple_sub_select_1, 1, 0, 0 ) ( const void *Self, const V
     assert ( cp -> argc == 2 );
     assert ( dp -> argc == 1 || dp -> argc == 2);
 
-    rc = open_sub_cursor ( & fself, info, cp );
+    rc = open_sub_cursor ( & fself, info, cp, (const VCursor*)info->parms );
     if ( rc == 0 )
     {
         rslt -> self = fself;
diff --git a/libs/vxf/sprintf.c b/libs/vxf/sprintf.c
index f275f97..385d25c 100644
--- a/libs/vxf/sprintf.c
+++ b/libs/vxf/sprintf.c
@@ -24,132 +24,1256 @@
  *
  */
 #include <vdb/extern.h>
-#include <insdc/insdc.h>
-#include <klib/defs.h>
-#include <klib/rc.h>
-#include <vdb/table.h>
+
 #include <vdb/xform.h>
 #include <vdb/schema.h>
-#include <kdb/meta.h>
 #include <klib/data-buffer.h>
-#include <bitstr.h>
-#include <os-native.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/debug.h>
+#include <klib/rc.h>
 #include <sysalloc.h>
 
-#include <stdint.h>
 #include <stdlib.h>
-#include <assert.h>
 #include <string.h>
-#include <stdio.h>
+#include <ctype.h>
+#include <assert.h>
+
+
+/* the number of PrintFmt, PrintArg and String
+   elements to allocate in function-local storage */
+#define LOCAL_FMT_COUNT 64
+
 
+typedef struct Sprintf Sprintf;
+struct Sprintf
+{
+    const PrintFmt *fmt;
+    PrintArg *args;
+    String *str;
+};
+
+static uint8_t const radix2_size [ 4 ] = { 8, 16, 32, 64 };
+static uint8_t const radix8_size [ 4 ] = { 3, 6, 11, 22 };
+static uint8_t const radix10_size [ 4 ] = { 3, 5, 10, 20 };
+static uint8_t const radix16_size [ 4 ] = { 2, 4, 8, 16 };
+
+#if _DEBUGGING
 static
-rc_t CC sprintf_1 ( void *data, const VXformInfo *info, int64_t row_id,
-                   VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+rc_t validate_obj ( const Sprintf *obj, bool fmt_only )
 {
-    rc_t rc;
-    uint32_t const *val = argv[0].u.data.base;
-    int n;
-    int count;
-    
-    assert(argv[0].u.data.elem_bits == sizeof(val[0]) * 8);
-    val += argv[0].u.data.first_elem;
-    
-    n = 11;
-    rslt->data->elem_bits = rslt->elem_bits;
-
-    /* loop up to 2 times for resize errors */
-    for (count = 0; count != 2; ++count) {
-
-        /* set buffer size */
-        rc = KDataBufferResize(rslt->data, n);
-        if (rc) return rc;
-        
-        /* try snprintf and check return */
-        n = snprintf(rslt->data->base, n, "%u", val[0]);
-        if ( n >= 0 && n < rslt->data->elem_count)
-        {
-            /* "n" is valid */
-            rslt->elem_count = n;
-            return 0;
-        }
-
-        /* "n" says we probably didn't have enough buffer space
-           loop again */
-        if ( n < 0 )
-            n = rslt->data->elem_count * 2;
+    uint32_t i;
+
+    /* validate the format blocks */
+    for ( i = 0; obj -> fmt [ i ] . type != sptTerm; ++ i )
+    {
+        /* at this point, only looking for bad formats */
+        if ( obj -> fmt [ i ] . type == sptLiteral )
+        {
+            if ( obj -> fmt [ i ] . u . l . text == NULL )
+                return RC ( rcXF, rcFunction, rcConstructing, rcString, rcNull );
+            if ( obj -> fmt [ i ] . u . l . size == 0 )
+                return RC ( rcXF, rcFunction, rcConstructing, rcString, rcEmpty );
+            if ( string_chr ( obj -> fmt [ i ] . u . l . text, obj -> fmt [ i ] . u . l . size, 0 ) != NULL )
+                return RC ( rcXF, rcFunction, rcConstructing, rcString, rcInvalid );
+        }
     }
-    return RC(rcXF, rcFunction, rcExecuting, rcConstraint, rcViolated);
+
+    return 0;
 }
+#endif
 
 static
-rc_t CC sprintf_3 ( void *data, const VXformInfo *info, int64_t row_id,
-    VRowResult *rslt, uint32_t argc, const VRowData argv [] )
+size_t get_radix_size ( const PrintFmt *fmt, uint32_t selector )
 {
-    rc_t rc;
-    char const *str = argv[0].u.data.base;
-    uint32_t const *len = argv[1].u.data.base;
-    uint32_t const *val = argv[2].u.data.base;
-    int n;
-    int count;
-    
-    assert(argv[0].u.data.elem_bits == sizeof(str[0]) * 8);
-    assert(argv[1].u.data.elem_bits == sizeof(len[0]) * 8);
-    assert(argv[2].u.data.elem_bits == sizeof(val[0]) * 8);
-
-    str += argv[0].u.data.first_elem;
-    len += argv[1].u.data.first_elem;
-    val += argv[2].u.data.first_elem;
-    
-    if (argv[0].u.data.elem_count == 0 && len[0] == 0) {
-        rslt->elem_count = 0;
+    const uint8_t *radix_size;
+    switch ( fmt -> radix )
+    {
+    case 0:
         return 0;
+    case 10:
+        radix_size = radix10_size;
+        break;
+    case 16:
+        radix_size = radix16_size;
+        break;
+    case 8:
+        radix_size = radix8_size;
+        break;
+    default:
+        radix_size = radix2_size;
     }
+    return radix_size [ selector ];
+}
+
+typedef struct FuncArgs FuncArgs;
+struct FuncArgs
+{
+    const VRowData *argv;
+    uint32_t argc;
+    uint32_t idx;
+};
+
+static
+const void *access_cell_data ( FuncArgs *args, uint64_t *row_len, size_t *size )
+{
+    size_t elem_bytes;
+    const uint8_t *data;
 
-    n = argv[0].u.data.elem_count + len[0] + 1;
-    rslt->data->elem_bits = rslt->elem_bits;
+    if ( args -> idx == args -> argc )
+        return NULL;
 
-    for (count = 0; count != 2; ++count) {
+    elem_bytes = args -> argv [ args -> idx ] . u . data . elem_bits / 8;
+    assert ( elem_bytes * 8 == args -> argv [ args -> idx ] . u . data . elem_bits );
 
-        rc = KDataBufferResize(rslt->data, n);
-        if (rc) return rc;
+    data = args -> argv [ args -> idx ] . u . data . base;
+    * row_len = args -> argv [ args -> idx ] . u . data . elem_count;
+
+    data += args -> argv [ args -> idx ] . u . data . first_elem * elem_bytes;
+
+    if ( size != NULL )
+        * size = ( size_t ) ( * row_len * elem_bytes );
+
+    ++ args -> idx;
+    return data;
+}
 
-        if (len[0]) {
-            n = snprintf(rslt->data->base, n, "%.*s%0*u",
-                     (int)argv[0].u.data.elem_count, str,
-                     (int)len[0], val[0]);
+static
+rc_t capture_uint_scalar ( FuncArgs *args, uint64_t *val )
+{
+    uint64_t row_len;
+    const void *data = access_cell_data ( args, & row_len, NULL );
+
+    if ( data == NULL )
+        return RC ( rcXF, rcFunction, rcExecuting, rcData, rcNull );
+
+    if ( row_len != 1 )
+        return RC ( rcXF, rcFunction, rcExecuting, rcRange, rcExcessive );
+
+    switch ( args -> argv [ args -> idx - 1 ] . u . data . elem_bits )
+    {
+    case 8:
+        * val = * ( const uint8_t* ) data;
+        break;
+    case 16:
+        * val = * ( const uint16_t* ) data;
+        break;
+    case 32:
+        * val = * ( const uint32_t* ) data;
+        break;
+    case 64:
+        * val = * ( const uint64_t* ) data;
+        break;
+    }
+
+    return 0;
+}
+
+static
+rc_t CC sprintf_func ( void *obj,
+     const VXformInfo *info, int64_t row_id, VRowResult *rslt,
+     uint32_t argc, const VRowData argv [] )
+{
+    rc_t rc;
+    size_t cell_size;
+    uint32_t str_idx, fmt_idx, arg_idx;
+
+    Sprintf *self = obj;
+
+    const PrintFmt *fmt = self -> fmt;
+    PrintArg *args = self -> args;
+    String *str = self -> str;
+
+    FuncArgs vargs;
+    vargs . argv = argv;
+    vargs . argc = argc;
+    vargs . idx = 0;
+
+    str_idx = fmt_idx = arg_idx = 0;
+
+#if _DEBUGGING
+    rc = validate_obj ( self, false );
+    if ( rc != 0 )
+        KDbgMsg ( "%s - self is bad on entry: %R\n", __func__, rc );
+#endif
+
+    /* initial pass - prepare argument list & estimate cell size */
+    for ( rc = 0, cell_size = 0; fmt [ fmt_idx ] . type != sptTerm; ++ fmt_idx )
+    {
+        size_t arg_size;
+        bool check_index;
+        uint64_t row_len, start_idx, select_len;
+        uint32_t ext_start_index, ext_stop_index;
+
+        row_len = 0;
+
+        /* test for external field width, precision, index */
+        if ( fmt [ fmt_idx ] . ext_field_width )
+        {
+            rc = capture_uint_scalar ( & vargs, & args [ arg_idx ++ ] . u );
+            if ( rc != 0 )
+                return rc;
         }
-        else {
-            /* snprintf puts '\0' when len[0] == 0
-               and adds this characted into returned count */
-            n = snprintf(rslt->data->base, n, "%.*s",
-                     (int)argv[0].u.data.elem_count, str);
+        if ( fmt [ fmt_idx ] . ext_precision )
+        {
+            rc = capture_uint_scalar ( & vargs, & args [ arg_idx ++ ] . u );
+            if ( rc != 0 )
+                return rc;
         }
-        if (n >= 0 && n < rslt->data->elem_count)
+
+        if ( ! fmt [ fmt_idx ] . ext_start_index )
+            start_idx = fmt [ fmt_idx ] . u . f . start_idx;
+        else
         {
-            rslt->elem_count = n;
-            return 0;
+            /* if the start index is the last in vector,
+               this needs to be suspended until later */
+            if ( ! fmt [ fmt_idx ] . inf_start_index )
+            {
+                rc = capture_uint_scalar ( & vargs, & start_idx );
+                if ( rc != 0 )
+                    return rc;
+                args [ arg_idx ] . u = start_idx;
+            }
+
+            ext_start_index = arg_idx ++;
         }
 
-        if ( n < 0 )
-            n = ( argv[0].u.data.elem_count + len[0] + 1 ) * 2;
+        if ( ! fmt [ fmt_idx ] . ext_stop_index && ! fmt [ fmt_idx ] . ext_select_len )
+            select_len = fmt [ fmt_idx ] . u . f . select_len;
+        else
+        {
+            /* if the stop index is the last in vector,
+               this needs to be suspended until later */
+            if ( ! fmt [ fmt_idx ] . inf_stop_index )
+            {
+                rc = capture_uint_scalar ( & vargs, & select_len );
+                if ( rc != 0 )
+                    return rc;
+                args [ arg_idx ] . u = select_len;
+            }
+            ext_stop_index = arg_idx ++;
+        }
+
+        /* make an estimate of the bytes needed by sprintf engine for argument
+           get row_len at the same time */
+        check_index = false;
+        switch ( fmt [ fmt_idx ] . type )
+        {
+        case sptLiteral:                     /* char literal        - arg in fmt   */
+            assert ( fmt [ fmt_idx ] . u . l . text != NULL );
+            arg_size = fmt [ fmt_idx ] . u . l . size;
+            row_len = arg_size;
+            -- arg_idx;
+            break;
+        case sptSignedInt8Vect:              /* signed vector int   - arg is d8    */
+            args [ arg_idx ] . d8 = access_cell_data ( & vargs, & row_len, NULL );
+            arg_size = get_radix_size ( & fmt [ fmt_idx ], 0 ) + 1;
+            break;
+        case sptSignedInt16Vect:             /* signed vector int   - arg is d16   */
+            args [ arg_idx ] . d16 = access_cell_data ( & vargs, & row_len, NULL );
+            arg_size = get_radix_size ( & fmt [ fmt_idx ], 1 ) + 1;
+            break;
+        case sptSignedInt32Vect:             /* signed vector int   - arg is d32   */
+            args [ arg_idx ] . d32 = access_cell_data ( & vargs, & row_len, NULL );
+            arg_size = get_radix_size ( & fmt [ fmt_idx ], 2 ) + 1;
+            break;
+        case sptSignedInt64Vect:             /* signed vector int   - arg is d64   */
+            args [ arg_idx ] . d64 = access_cell_data ( & vargs, & row_len, NULL );
+            arg_size = get_radix_size ( & fmt [ fmt_idx ], 3 ) + 1;
+            break;
+        case sptUnsignedInt8Vect:            /* unsigned vector int - arg is u8    */
+            args [ arg_idx ] . u8 = access_cell_data ( & vargs, & row_len, NULL );
+            arg_size = get_radix_size ( & fmt [ fmt_idx ], 0 ) + 2;
+            break;
+        case sptUnsignedInt16Vect:           /* unsigned vector int - arg is u16   */
+            args [ arg_idx ] . u16 = access_cell_data ( & vargs, & row_len, NULL );
+            arg_size = get_radix_size ( & fmt [ fmt_idx ], 1 ) + 2;
+            break;
+        case sptUnsignedInt32Vect:           /* unsigned vector int - arg is u32   */
+            args [ arg_idx ] . u32 = access_cell_data ( & vargs, & row_len, NULL );
+            arg_size = get_radix_size ( & fmt [ fmt_idx ], 2 ) + 2;
+            break;
+        case sptUnsignedInt64Vect:           /* unsigned vector int - arg is u64   */
+            args [ arg_idx ] . u64 = access_cell_data ( & vargs, & row_len, NULL );
+            arg_size = get_radix_size ( & fmt [ fmt_idx ], 3 ) + 2;
+            break;
+        case sptFloat32Vect:                 /* vector float        - arg is f32   */
+            args [ arg_idx ] . f32 = access_cell_data ( & vargs, & row_len, NULL );
+            arg_size = 32;
+            break;
+        case sptFloat64Vect:                 /* vector float        - arg is f64   */
+            args [ arg_idx ] . f64 = access_cell_data ( & vargs, & row_len, NULL );
+            arg_size = 32;
+            break;
+        case sptFloatLongVect:               /* vector float        - arg is flong */
+            args [ arg_idx ] . flong = access_cell_data ( & vargs, & row_len, NULL );
+            arg_size = 32;
+            break;
+        case sptString:                      /* vector character    - arg is S     */
+            str [ str_idx ] . addr = access_cell_data ( & vargs, & row_len, & str [ str_idx ] . size );
+            str [ str_idx ] . len = ( uint32_t ) str [ str_idx ] . size;
+            arg_size = str [ str_idx ] . size;
+            args [ arg_idx ] . S = & str [ str_idx ++ ];
+            check_index = true;
+            break;
+        case sptUCS2String:                  /* vector character    - arg is S     */
+        case sptUTF32String:                 /* vector character    - arg is S     */
+            return RC ( rcXF, rcFunction, rcExecuting, rcType, rcUnsupported );
+        case sptRowId:                       /* current row id      - arg is d     */
+            args [ arg_idx ] . d = row_id;
+            arg_size = get_radix_size ( & fmt [ fmt_idx ], 3 ) + 1;
+            ++ arg_idx;
+            continue;
+        case sptRowLen:                      /* current row length  - arg is u     */
+            access_cell_data ( & vargs, & args [ arg_idx ] . u, NULL );
+            arg_size = get_radix_size ( & fmt [ fmt_idx ], 3 ) + 2;
+            ++ arg_idx;
+            continue;
+        }
+
+        /* back-fill based upon row-length in case of non-empty rows */
+        if ( row_len != 0 )
+        {
+            /* start index is last in row */
+            if ( fmt [ fmt_idx ] . inf_start_index )
+                start_idx = args [ ext_start_index ] . u = row_len - 1;
+
+            /* end index is last in row */
+            if ( fmt [ fmt_idx ] . inf_stop_index )
+                select_len = args [ ext_stop_index ] . u = row_len - 1;
+        }
+
+        /* detect runtime error condition */
+        if ( start_idx >= row_len )
+            args [ arg_idx ] . p = NULL;
+        else
+        {
+            /* adjust size by index */
+            if ( check_index )
+            {
+                /* the select_len should be correct,
+                   unless the end is a stop coordinate */
+                if ( fmt [ fmt_idx ] . ext_stop_index )
+                {
+                    if ( select_len <= start_idx )
+                        select_len = 1;
+                    else
+                        select_len -= start_idx - 1;
+                }
+
+                /* select_len of 0 means infinite */
+                if ( select_len == 0 )
+                    select_len = row_len - start_idx;
+
+                /* real size after sub-str */
+                arg_size = argv [ vargs . idx - 1 ] . u . data . elem_bits * select_len / 8;
+            }
+
+            /* incorporate size into calcuation */
+            cell_size += arg_size;
+        }
+
+        /* done with argument */
+        ++ arg_idx;
     }
-    return RC(rcXF, rcFunction, rcExecuting, rcConstraint, rcViolated);
+
+    /* round cell-size up to nearest 4K */
+    cell_size = ( cell_size + 4095 ) & ~ ( size_t ) 4095;
+
+    /* set output buffer size */
+    rc = KDataBufferResize( rslt -> data, cell_size );
+    if ( rc == 0 )
+    {
+#if _DEBUGGING
+        rc = validate_obj ( self, false );
+        if ( rc != 0 )
+            KDbgMsg ( "%s - self is bad before invoking structured_sprintf: %R\n", __func__, rc );
+#endif
+        /* invoke sprintf engine */
+        rc = structured_sprintf ( rslt -> data -> base,
+            rslt -> data -> elem_count, & cell_size, fmt, args );
+
+        /* recover from buffer insufficient */
+        if ( GetRCState ( rc ) == rcInsufficient && GetRCObject ( rc ) == rcBuffer )
+        {
+            rc = KDataBufferResize ( rslt -> data, cell_size + 1 );
+            if ( rc == 0 )
+            {
+                rc = structured_sprintf ( rslt -> data -> base,
+                    rslt -> data -> elem_count, & cell_size, fmt, args );
+            }
+        }
+
+        if ( rc == 0 )
+        {
+            /* set the return parameters */
+            rc = KDataBufferResize ( rslt -> data, cell_size );
+            if ( rc == 0 )
+            {
+                rslt -> elem_count = cell_size;
+                rslt -> elem_bits = 8;
+            }
+        }
+    }
+
+    return rc;
 }
 
-VTRANSFACT_IMPL ( vdb_sprintf, 1, 0, 0 ) ( const void *Self, const VXfactInfo *info,
-    VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+typedef struct ParseData ParseData;
+struct ParseData
+{
+    KDataBuffer overflow;
+    size_t fmt_size;
+    size_t lit_size;
+    PrintFmt *fmt;
+    uint32_t str_idx;
+    uint32_t fmt_idx;
+    uint32_t arg_idx;
+};
+
+/* create_overflow
+ *  create a buffer so large that it cannot overflow again
+ *  copy in existing structures
+ */
+static
+rc_t create_overflow ( ParseData *pd, uint32_t fmt_idx )
+{
+    /* infer that we can never have more format items than characters in the string... */
+
+    /* our size will create a format for every byte.
+       this should be a total overkill. */
+    size_t buff_size = sizeof pd -> fmt [ 0 ] * pd -> fmt_size;
+
+    /* make the buffer */
+    rc_t rc = KDataBufferMakeBytes ( & pd -> overflow, buff_size );
+    if ( rc == 0 )
+    {
+        /* capture pointers to stack structures */
+        const PrintFmt *fmt = pd -> fmt;
+
+        /* destination pointer */
+        pd -> fmt = pd -> overflow . base;
+
+        /* copy existing data */
+        memcpy ( pd -> fmt, fmt, fmt_idx * sizeof pd -> fmt [ 0 ] );
+   }
+
+    pd -> fmt_idx = fmt_idx;
+
+    return rc;
+}
+
+typedef struct VAList VAList;
+struct VAList
+{
+    const VFunctionParams *dp;
+    uint32_t idx;
+};
+
+static
+rc_t check_integer_arg ( VAList *vargs )
 {
-    switch (dp->argc) {
-    case 1:
-        rslt->u.rf = sprintf_1;
+    if ( vargs -> idx == vargs -> dp -> argc )
+        return RC ( rcXF, rcFunction, rcConstructing, rcParam, rcInsufficient );
+
+    switch ( vargs -> dp -> argv [ vargs -> idx ] . desc . domain )
+    {
+    case vtdBool:
+    case vtdInt:
+    case vtdUint:
         break;
-    case 3:
-        rslt->u.rf = sprintf_3;
+    default:
+        return RC ( rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect );
+    }
+
+    switch ( VTypedescSizeof ( & vargs -> dp -> argv [ vargs -> idx ] . desc ) )
+    {
+    case 8:
+    case 16:
+    case 32:
+    case 64:
         break;
     default:
-        return RC(rcXF, rcFunction, rcConstructing, rcParam, rcUnsupported);
+        return RC ( rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect );
+    }
+
+    ++ vargs -> idx;
+    return 0;
+}
+
+static
+rc_t extract_size_modifier ( VAList *vargs, char *size_modifier )
+{
+    switch ( vargs -> dp -> argv [ vargs -> idx ] . desc . domain )
+    {
+    case vtdBool:
+        * size_modifier = 0;
+        break;
+    case vtdUint:
+    case vtdInt:
+        switch ( VTypedescSizeof ( & vargs -> dp -> argv [ vargs -> idx ] . desc ) )
+        {
+        case 8:
+            * size_modifier = 't';
+            break;
+        case 16:
+            * size_modifier = 'h';
+            break;
+        case 32:
+            * size_modifier = 0;
+            break;
+        case 64:
+            * size_modifier = 'l';
+            break;
+        default:
+            return RC ( rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect );
+        }
+        break;
+    case vtdFloat:
+        switch ( VTypedescSizeof ( & vargs -> dp -> argv [ vargs -> idx ] . desc ) )
+        {
+        case 32:
+            * size_modifier = 'h';
+            break;
+        case 64:
+            * size_modifier = 0;
+            break;
+        default:
+            return RC ( rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect );
+        }
+        break;
+    case vtdAscii:
+        * size_modifier = 0;
+        break;
+    case vtdUnicode:
+        switch ( vargs -> dp -> argv [ vargs -> idx ] . desc . intrinsic_bits )
+        {
+        case 8:
+            * size_modifier = 0;
+            break;
+        case 16:
+            * size_modifier = 'h';
+            break;
+        case 32:
+            * size_modifier = 'l';
+            break;
+        default:
+            return RC ( rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect );
+        }
         break;
+    default:
+        return RC ( rcXF, rcFunction, rcConstructing, rcParam, rcIncorrect );
     }
-    rslt->variant = vftRow;
     return 0;
 }
+
+
+/* parse_format_string
+ *  parse format string and args into structured format
+ */
+static
+rc_t parse_format_string ( const char *fmt_str, ParseData *pd, VAList *vargs )
+{
+    rc_t rc;
+    uint32_t i, fmt_idx;
+
+    PrintFmt *fmt = pd -> fmt;
+
+    /* initialize returned counters */
+    pd -> lit_size = 0;
+    pd -> str_idx = pd -> fmt_idx = pd -> arg_idx = 0;
+
+    /* loop over format string */
+    for ( rc = 0, i = fmt_idx = 0; fmt_str [ i ] != 0; ++ i )
+    {
+        uint32_t domain;
+        bool alternate, numeric;
+        char size_modifier, time_modifier;
+        bool has_width, has_precision, has_index;
+
+        /* loop to gather literal portions */
+        uint32_t start;
+        for ( start = i; ; ++ i )
+        {
+            /* run until we hit start of substitution token
+               or until we hit end of format string */
+            if ( fmt_str [ i ] != 0 && fmt_str [ i ] != '%' )
+                continue;
+
+            /* detect a literal string */
+            if ( i != start )
+            {
+                /* expand into overflow */
+                if ( fmt_idx == LOCAL_FMT_COUNT )
+                {
+                    rc = create_overflow ( pd, fmt_idx );
+                    if ( rc != 0 )
+                        return rc;
+
+                    fmt = pd -> fmt;
+                }
+
+                /* create a text-literal format */
+                memset ( & fmt [ fmt_idx ], 0, sizeof fmt [ 0 ] );
+                fmt [ fmt_idx ] . u . l . text = & fmt_str [ start ];
+                fmt [ fmt_idx ] . u . l . size = i - start;
+                pd -> lit_size += i - start;
+                fmt [ fmt_idx ] . fmt = spfText;
+                fmt [ fmt_idx ] . type = sptLiteral;
+
+                /* increment counter */
+                ++ fmt_idx;
+            }
+
+            /* detect escape sequence */
+            if ( fmt_str [ i ] == 0 || fmt_str [ i + 1 ] != '%' )
+                break;
+
+            /* skip over escape */
+            start = ++ i;
+        }
+
+        /* done when NUL byte is seen */
+        if ( fmt_str [ i ] == 0 )
+            break;
+
+        /* detect overflow */
+        if ( fmt_idx == LOCAL_FMT_COUNT )
+        {
+            rc = create_overflow ( pd, fmt_idx );
+            if ( rc != 0 )
+                return rc;
+
+            fmt = pd -> fmt;
+        }
+
+        /* initial format
+         *  thousands_separate    = false
+         *  add_prefix            = false
+         *  force_decimal_point   = false
+         *  leave_trailing_zeros  = false
+         *  print_time            = false
+         *  print_date            = false
+         *  print_weekday         = false
+         *  print_timezone        = false
+         *  hour_24               = false
+         *  sign                  = 0
+         *  left_fill             = space
+         */
+        memset ( & fmt [ fmt_idx ], 0, sizeof fmt [ 0 ] );
+        fmt [ fmt_idx ] . left_fill = ' ';
+
+        /* scan flags */
+        alternate = false;
+        while ( 1 )
+        {
+            switch ( fmt_str [ ++ i ] )
+            {
+                /* plus and space modify application of sign
+                   to signed integer and floating point conversions.
+                   plus overrides space. */
+            case ' ':
+                if ( fmt [ fmt_idx ] . sign == 0 )
+            case '+':
+                    fmt [ fmt_idx ] . sign = fmt_str [ i ];
+                continue;
+
+                /* dash indicates left-alignment. indicate this
+                   by setting "left_fill" to NUL. */
+            case '-':
+                fmt [ fmt_idx ] . left_fill = 0;
+                continue;
+
+                /* zero indicates an alternate left-fill for
+                   numeric conversions. the zero is inserted before
+                   any sign character in { '+', '-' or ' ' }.
+                   since "left_fill" is also used to indicate
+                   alignment, only store when right aligning. */
+            case '0':
+                if ( fmt [ fmt_idx ] . left_fill != 0 )
+                    fmt [ fmt_idx ] . left_fill = '0';
+                continue;
+
+                /* hash indicates that the formatter should use an
+                   "alternate" approach. that approach is specific
+                   to the format. */
+            case '#':
+                alternate = true;
+                continue;
+
+                /* comma ( or apostrophe outside of US ) indicates
+                   that the integer portion of a numeral should use
+                   a comma as a thousands separator for legibility. */
+            case ',':
+            case '\'':
+                fmt [ fmt_idx ] . thousands_separate = 1;
+                continue;
+            }
+
+            /* we've hit a non-flag character */
+            break;
+        }
+
+        /* minimum field width */
+        has_width = false;
+        if ( isdigit ( fmt_str [ i ] ) )
+        {
+            /* literal */
+            has_width = true;
+            fmt [ fmt_idx ] . u . f . min_field_width = fmt_str [ i ] - '0';
+            while ( isdigit ( fmt_str [ ++ i ] ) )
+            {
+                fmt [ fmt_idx ] . u . f . min_field_width *= 10;
+                fmt [ fmt_idx ] . u . f . min_field_width += fmt_str [ i ] - '0';
+            }
+        }
+        else if ( fmt_str [ i ] == '*' )
+        {
+            /* external */
+            rc = check_integer_arg ( vargs );
+            if ( rc != 0 )
+                return rc;
+
+            has_width = true;
+            fmt [ fmt_idx ] . ext_field_width = 1;
+            ++ pd -> arg_idx;
+            ++ i;
+        }
+
+        /* precision */
+        has_precision = false;
+        if ( fmt_str [ i ] == '.' )
+        {
+            /* a single dot implies a precision value of 0 */
+            has_precision = true;
+
+            if ( isdigit ( fmt_str [ ++ i ] ) )
+            {
+                /* a literal precision */
+                fmt [ fmt_idx ] . u . f . precision = fmt_str [ i ] - '0';
+                while ( isdigit ( fmt_str [ ++ i ] ) )
+                {
+                    fmt [ fmt_idx ] . u . f . precision *= 10;
+                    fmt [ fmt_idx ] . u . f . precision += fmt_str [ i ] - '0';
+                }
+            }
+            else if ( fmt_str [ i ] == '*' )
+            {
+                /* external */
+                rc = check_integer_arg ( vargs );
+                if ( rc != 0 )
+                    return rc;
+
+                fmt [ fmt_idx ] . ext_precision = 1;
+                ++ pd -> arg_idx;
+                ++ i;
+            }
+            else if ( fmt_str [ i ] == '-' )
+            {
+                /* eat a negative precision - treat as 0 */
+                while ( isdigit ( fmt_str [ ++ i ] ) )
+                    ( void ) 0;
+            }
+        }
+
+        /* index - given when parameter is a vector */
+        has_index = false;
+        if ( fmt_str [ i ] == ':' )
+        {
+            bool has_start, has_len, has_end, end_is_stop;
+            has_start = has_len = has_end = end_is_stop = false;
+
+            /* parameter is taken as a vector,
+               with a default index starting at 0 */
+            has_index = true;
+
+            if ( isdigit ( fmt_str [ ++ i ] ) )
+            {
+                /* literal index */
+                fmt [ fmt_idx ] . u . f . start_idx = fmt_str [ i ] - '0';
+                while ( isdigit ( fmt_str [ ++ i ] ) )
+                {
+                    fmt [ fmt_idx ] . u . f . start_idx *= 10;
+                    fmt [ fmt_idx ] . u . f . start_idx += fmt_str [ i ] - '0';
+                }
+                has_start = true;
+            }
+            else switch ( fmt_str [ i ] )
+            {
+            case '*':
+                /* external */
+                rc = check_integer_arg ( vargs );
+                if ( rc != 0 )
+                    return rc;
+
+                fmt [ fmt_idx ] . ext_start_index = 1;
+                ++ pd -> arg_idx;
+                ++ i;
+                has_start = true;
+                break;
+            case '$':
+                fmt [ fmt_idx ] . inf_start_index = 1;
+                fmt [ fmt_idx ] . ext_start_index = 1;
+                ++ pd -> arg_idx;
+                ++ i;
+                has_start = true;
+                break;
+            }
+
+            /* detect range */
+            switch ( fmt_str [ i ] )
+            {
+                /* given as start-stop */
+            case '-':
+                end_is_stop = true;
+
+                /* given as start/len */
+            case '/':
+
+                has_len = true;
+
+                if ( isdigit ( fmt_str [ ++ i ] ) )
+                {
+                    /* literal selection length or end */
+                    fmt [ fmt_idx ] . u . f . select_len = fmt_str [ i ] - '0';
+                    while ( isdigit ( fmt_str [ ++ i ] ) )
+                    {
+                        fmt [ fmt_idx ] . u . f . select_len *= 10;
+                        fmt [ fmt_idx ] . u . f . select_len += fmt_str [ i ] - '0';
+                    }
+                    has_end = true;
+                }
+                else switch ( fmt_str [ i ] )
+                {
+                case '*':
+                    /* external */
+                    rc = check_integer_arg ( vargs );
+                    if ( rc != 0 )
+                        return rc;
+
+                    /* external selection length or end */
+                    fmt [ fmt_idx ] . ext_stop_index = end_is_stop;
+                    fmt [ fmt_idx ] . ext_select_len = ! end_is_stop;
+                    ++ pd -> arg_idx;
+                    ++ i;
+                    has_end = true;
+                    break;
+                case '$':
+                    /* ignore index end if start is infinite */
+                    if ( ! fmt [ fmt_idx ] . inf_start_index )
+                    {
+                        fmt [ fmt_idx ] . inf_stop_index = 1;
+                        fmt [ fmt_idx ] . ext_stop_index = 1;
+                        ++ pd -> arg_idx;
+                        end_is_stop = has_end = true;
+                    }
+                    ++ i;
+                    break;
+                case '-':
+                    /* negatives are garbage */
+                    while ( isdigit ( fmt_str [ ++ i ] ) )
+                        ( void ) 0;
+                    break;
+                default:
+                    end_is_stop = false;
+                }
+                break;
+            }
+
+            if ( ! has_len && has_start )
+                fmt [ fmt_idx ] . u . f . select_len = 1;
+        }
+
+        /* size - accept for brownie-points and for KTime */
+        size_modifier = time_modifier = 0;
+        switch ( fmt_str [ i ] )
+        {
+            /* "Tiny" modifier - like "hh" in C format */
+        case 't':
+            /* "Half" modifier - same as C format */
+        case 'h':
+            /* "Long" modifier - means 64-bit for integers, otherwise like C */
+        case 'l':
+            size_modifier = time_modifier = fmt_str [ i ++ ];
+            break;
+            /* "siZe" modifier - whatever the size of size_t is */
+        case 'z':
+            ++ i;
+            time_modifier = 'z';
+            if ( sizeof ( size_t ) == sizeof ( uint64_t ) )
+                size_modifier = 'l';
+            break;
+        }
+
+        /* output format
+           describes the formatting to apply on output
+           if precision has not been set, give it a default value */
+        domain = 0;
+        numeric = false;
+        switch ( fmt_str [ i ] )
+        {
+            /* decimal signed integer */
+        case 'd':
+        case 'i':
+            fmt [ fmt_idx ] . radix = 10;
+            fmt [ fmt_idx ] . fmt = spfSignedInt;
+            numeric = true;
+            if ( ! has_precision )
+                fmt [ fmt_idx ] . u . f . precision = 1;
+            else if ( fmt [ fmt_idx ] . left_fill == '0' )
+                fmt [ fmt_idx ] . left_fill = ' ';
+            domain = vtdInt;
+            break;
+
+            /* decimal unsigned integer */
+        case 'u':
+            fmt [ fmt_idx ] . radix = 10;
+        unsigned_int:
+            fmt [ fmt_idx ] . fmt = spfUnsigned;
+            fmt [ fmt_idx ] . sign = 0;
+            numeric = true;
+            if ( ! has_precision )
+                fmt [ fmt_idx ] . u . f . precision = 1;
+            else if ( fmt [ fmt_idx ] . left_fill == '0' )
+                fmt [ fmt_idx ] . left_fill = ' ';
+            domain = vtdUint;
+            break;
+
+            /* hex unsigned integer */
+        case 'x':
+            fmt [ fmt_idx ] . add_prefix = alternate;
+            fmt [ fmt_idx ] . radix = 16;
+            goto unsigned_int;
+
+            /* upper-case hex unsigned integer */
+        case 'X':
+            fmt [ fmt_idx ] . upper_case_num = 1;
+            fmt [ fmt_idx ] . add_prefix = alternate;
+            fmt [ fmt_idx ] . radix = 16;
+            goto unsigned_int;
+
+            /* octal unsigned integer */
+        case 'o':
+            fmt [ fmt_idx ] . add_prefix = alternate;
+            fmt [ fmt_idx ] . radix = 8;
+            goto unsigned_int;
+
+            /* binary unsigned integer */
+        case 'b':
+            fmt [ fmt_idx ] . add_prefix = alternate;
+            fmt [ fmt_idx ] . radix = 2;
+            goto unsigned_int;
+
+            /* decimal signed floating point */
+        case 'f':
+            fmt [ fmt_idx ] . fmt = spfStdFloat;
+        fmt_float:
+            fmt [ fmt_idx ] . radix = 10;
+            fmt [ fmt_idx ] . force_decimal_point = alternate;
+            numeric = true;
+            if ( ! has_precision )
+                fmt [ fmt_idx ] . u . f . precision = 6;
+            domain = vtdFloat;
+            break;
+
+            /* scientific notation floating point */
+        case 'e':
+            fmt [ fmt_idx ] . fmt = spfSciFloat;
+            goto fmt_float;
+
+            /* "general" floating point */
+        case 'g':
+            fmt [ fmt_idx ] . leave_trailing_zeros = alternate;
+            fmt [ fmt_idx ] . fmt = spfGenFloat;
+            goto fmt_float;
+
+            /* character data */
+        case 's':
+            if ( ! has_precision )
+            /* no break */
+        case 'c':
+                fmt [ fmt_idx ] . u . f . precision = -1;
+            fmt [ fmt_idx ] . fmt = spfText;
+            domain = vtdUnicode;
+            break;
+
+        default:
+            return RC ( rcXF, rcString, rcFormatting, rcFormat, rcUnrecognized );
+        }
+
+        /* handle zero padding for non-numeric cases */
+        if ( ! numeric && fmt [ fmt_idx ] . left_fill == '0' )
+            fmt [ fmt_idx ] . left_fill = ' ';
+
+        /* take size from actual parameter */
+        rc = extract_size_modifier ( vargs, & size_modifier );
+        if ( rc != 0 )
+            return rc;
+
+        /* determine type from argument */
+        switch ( vargs -> dp -> argv [ vargs -> idx ] . desc . domain )
+        {
+        case vtdBool:
+        case vtdUint:
+            switch ( domain )
+            {
+            case vtdBool:
+            case vtdUint:
+            case vtdInt:
+                break;
+            case vtdFloat:
+                fmt [ fmt_idx ] . type_cast = 1;
+                break;
+            default:
+                return RC ( rcXF, rcString, rcFormatting, rcParam, rcIncorrect );
+            }
+
+            switch ( size_modifier )
+            {
+            case 't':
+                fmt [ fmt_idx ] . type = sptUnsignedInt8Vect;
+                break;
+            case 'h':
+                fmt [ fmt_idx ] . type = sptUnsignedInt16Vect;
+                break;
+            case 0:
+                fmt [ fmt_idx ] . type = sptUnsignedInt32Vect;
+                break;
+            case 'l':
+                fmt [ fmt_idx ] . type = sptUnsignedInt64Vect;
+                break;
+            }
+            break;
+
+        case vtdInt:
+            switch ( domain )
+            {
+            case vtdBool:
+            case vtdUint:
+            case vtdInt:
+                break;
+            case vtdFloat:
+                fmt [ fmt_idx ] . type_cast = 1;
+                break;
+            default:
+                return RC ( rcXF, rcString, rcFormatting, rcParam, rcIncorrect );
+            }
+
+            switch ( size_modifier )
+            {
+            case 't':
+                fmt [ fmt_idx ] . type = sptSignedInt8Vect;
+                break;
+            case 'h':
+                fmt [ fmt_idx ] . type = sptSignedInt16Vect;
+                break;
+            case 0:
+                fmt [ fmt_idx ] . type = sptSignedInt32Vect;
+                break;
+            case 'l':
+                fmt [ fmt_idx ] . type = sptSignedInt64Vect;
+                break;
+            }
+            break;
+
+        case vtdFloat:
+            switch ( domain )
+            {
+            case vtdBool:
+            case vtdUint:
+            case vtdInt:
+                fmt [ fmt_idx ] . type_cast = 1;
+                break;
+            case vtdFloat:
+                break;
+            default:
+                return RC ( rcXF, rcString, rcFormatting, rcParam, rcIncorrect );
+            }
+
+            switch ( size_modifier )
+            {
+            case 'h':
+                fmt [ fmt_idx ] . type = sptFloat32Vect;
+                break;
+            case 0:
+                fmt [ fmt_idx ] . type = sptFloat64Vect;
+                break;
+            }
+            break;
+
+        case vtdAscii:
+            switch ( domain )
+            {
+            case vtdAscii:
+            case vtdUnicode:
+                if ( size_modifier != 0 )
+                    fmt [ fmt_idx ] . type_cast = 1;
+                break;
+            default:
+                return RC ( rcXF, rcString, rcFormatting, rcParam, rcIncorrect );
+            }
+
+            fmt [ fmt_idx ] . type = sptString;
+
+            ++ pd -> str_idx;
+            break;
+
+        case vtdUnicode:
+            switch ( domain )
+            {
+            case vtdAscii:
+            case vtdUnicode:
+                switch ( size_modifier )
+                {
+                case 0:
+                    fmt [ fmt_idx ] . type = sptString;
+                    break;
+                case 'h':
+                    fmt [ fmt_idx ] . type_cast = 1;
+                    fmt [ fmt_idx ] . type = sptUCS2String;
+                    break;
+                case 'l':
+                    fmt [ fmt_idx ] . type_cast = 1;
+                    fmt [ fmt_idx ] . type = sptUTF32String;
+                    break;
+                }
+                break;
+            default:
+                return RC ( rcXF, rcString, rcFormatting, rcParam, rcIncorrect );
+            }
+
+            ++ pd -> str_idx;
+            break;
+        }
+
+        /* account for format argument */
+        ++ fmt_idx;
+        ++ pd -> arg_idx;
+        ++ vargs -> idx;
+    }
+
+    /* record final fmt */
+    if ( rc == 0 )
+    {
+        if ( fmt_idx == LOCAL_FMT_COUNT )
+        {
+            rc = create_overflow ( pd, fmt_idx );
+            if ( rc != 0 )
+                return rc;
+
+            fmt = pd -> fmt;
+        }
+
+        memset ( & fmt [ fmt_idx ++ ], 0, sizeof fmt [ 0 ] );
+
+        /* if not all arguments were consumed, should this be an error? */
+        if ( vargs -> idx != vargs -> dp -> argc )
+        {
+            /* produce warning */
+        }
+    }
+
+    pd -> fmt_idx = fmt_idx;
+
+    return rc;
+}
+
+VTRANSFACT_IMPL ( vdb_sprintf, 1, 0, 0 ) ( const void *self, const VXfactInfo *info,
+    VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+{
+    rc_t rc;
+    Sprintf *obj;
+
+    /* const format string */
+    VAList vargs;
+    const char *fmt_str = cp -> argv [ 0 ] . data . ascii;
+
+    /* local formatting storage */
+    PrintFmt fmt [ LOCAL_FMT_COUNT ];
+
+    /* data block for parse */
+    ParseData pd;
+    pd . fmt_size = cp -> argv [ 0 ] . count;
+    pd . fmt = fmt;
+
+    /* packaged va_list */
+    vargs . dp = dp;
+    vargs . idx = 0;
+
+    /* parse the format string */
+    rc = parse_format_string ( fmt_str, & pd, & vargs );
+    if ( rc == 0 )
+    {
+        /* the object size:
+           literal data bytes +
+           space for PrintFmt +
+           space for PrintArg */
+        size_t obj_extra = pd . lit_size +
+            pd . fmt_idx * sizeof ( PrintFmt ) +
+            pd . arg_idx * sizeof ( PrintArg ) +
+            pd . str_idx * sizeof ( String );
+        obj = malloc ( sizeof * obj + 1 + obj_extra );
+        if ( obj == NULL )
+            rc = RC ( rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted );
+        else
+        {
+            uint32_t i;
+
+            char *lit;
+            PrintFmt *dfmt;
+            size_t lit_size;
+
+            obj -> args = ( void* ) ( obj + 1 );
+            dfmt = ( void* ) & obj -> args [ pd . arg_idx ];
+            obj -> str = ( void* ) & dfmt [ pd . fmt_idx ];
+            lit = ( void* ) & obj -> str [ pd . str_idx ];
+            obj -> fmt = dfmt;
+
+            /* not necessary or even helpful, but doesn't cost much */
+            memset ( obj -> args, 0, pd . arg_idx * sizeof obj -> args [ 0 ] );
+            memset ( obj -> str, 0, pd . str_idx * sizeof obj -> str [ 0 ] );
+
+            /* copy format and literals */
+            for ( lit_size = 0, i = 0; i < pd . fmt_idx; ++ i )
+            {
+                /* simple copy */
+                dfmt [ i ] = pd . fmt [ i ];
+                if ( pd . fmt [ i ] . type == sptLiteral )
+                {
+                    /* copy over literal data */
+                    dfmt [ i ] . u . l . text = & lit [ lit_size ];
+                    memcpy ( & lit [ lit_size ],
+                        pd . fmt [ i ] . u . l . text,
+                        pd . fmt [ i ] . u . l . size );
+                    lit_size += pd . fmt [ i ] . u . l . size;
+                }
+            }
+
+            /* NUL-terminate the literal text - again, doesn't help but doesn't hurt */
+            lit [ lit_size ] = 0;
+        }
+    }
+
+    /* douse any overflow memory used */
+    if ( pd . fmt != fmt )
+        KDataBufferWhack ( & pd . overflow );
+
+#if _DEBUGGING
+    if ( rc == 0 )
+    {
+        rc = validate_obj ( obj, true );
+        if ( rc != 0 )
+            KDbgMsg ( "%s - self is bad on factory exit: %R\n", __func__, rc );
+    }
+#endif
+
+    if ( rc == 0 )
+    {
+        rslt -> self = obj;
+        rslt -> whack = free;
+        rslt -> u . rf = sprintf_func;
+        rslt -> variant = vftRow;
+    }
+
+    return rc;
+}
diff --git a/libs/vxf/unzip.c b/libs/vxf/unzip.c
index 615a2dc..7b4f4f3 100644
--- a/libs/vxf/unzip.c
+++ b/libs/vxf/unzip.c
@@ -38,6 +38,7 @@
 #include <byteswap.h>
 #include <string.h>
 #include <zlib.h>
+#include <assert.h>
 
 static rc_t invoke_zlib(void *dst, size_t dsize, const void *src, size_t ssize, int windowBits)
 {
@@ -123,14 +124,17 @@ rc_t unzip_func_v2(
         dst -> byte_order = src -> byte_order;
         dst -> elem_bits = 1;
 
-        rc = invoke_zlib(dst->data, (((size_t)dst->elem_count + 7) >> 3),
+        /* the feed to zlib MUST be byte aligned
+           so the output must be as well */
+        assert ( ( dst -> elem_count & 7 ) == 0 );
+        rc = invoke_zlib(dst->data, (((size_t)dst->elem_count) >> 3),
                          src->data, (((size_t)src->elem_count * src->elem_bits + 7) >> 3),
                          -15);
-        if ( rc == 0 )
-        {
-            dst -> elem_count &= ( uint64_t ) ~ 7;
-            dst -> elem_count |= trailing;
-        }
+
+        /* if the original, uncompressed source was NOT byte aligned,
+           back off the rounded up byte and add in the original bit count */
+        if ( rc == 0 && trailing != 0 )
+            dst -> elem_count -= 8 - trailing;
     }
 
     return rc;
diff --git a/libs/vxf/vec-sum.c b/libs/vxf/vec-sum.c
index af9f1b9..9903124 100644
--- a/libs/vxf/vec-sum.c
+++ b/libs/vxf/vec-sum.c
@@ -28,6 +28,7 @@
 #include <klib/rc.h>
 #include <vdb/xform.h>
 #include <vdb/schema.h>
+#include <klib/data-buffer.h>
 #include <sysalloc.h>
 
 #include <stdint.h>
@@ -35,7 +36,9 @@
 #include <math.h>
 #include <assert.h>
 
-typedef void (*math_f)(void *dst, const void *src, uint32_t vec_length, uint32_t vec_count);
+typedef void (*math_f)(void *const dst,
+                       void const *const src, uint32_t const offset,
+                       uint32_t const vec_length, uint32_t const vec_count);
 typedef struct self_t {
     uint32_t vec_length;
     math_f f;
@@ -44,10 +47,10 @@ typedef struct self_t {
 #define FUNC(VALTYPE) F_ ## VALTYPE
 
 #define FUNC_DEF(VALTYPE) \
-static void FUNC(VALTYPE)(void *Dst, const void *Src, uint32_t vec_length, uint32_t vec_count) { \
+static void FUNC(VALTYPE)(void *Dst, void const *Src, uint32_t const offset, uint32_t const vec_length, uint32_t const vec_count) { \
     VALTYPE sum; \
-    VALTYPE *dst = (VALTYPE *)Dst; \
-    const VALTYPE *src = (const VALTYPE *)Src; \
+    VALTYPE *const dst = (VALTYPE *)Dst; \
+    VALTYPE const *const src = &((VALTYPE const *)Src)[offset]; \
     uint32_t i; \
     uint32_t j; \
     uint32_t k; \
@@ -71,7 +74,30 @@ FUNC_DEF(int32_t)
 FUNC_DEF(int64_t)
 
 static
-rc_t CC array_func(
+rc_t CC vec_sum_row_func(void *const Self,
+                         VXformInfo const *info,
+                         int64_t const row_id,
+                         VRowResult *const rslt,
+                         uint32_t const argc,
+                         VRowData const argv[])
+{
+    self_t const *self = Self;
+    rc_t rc;
+    
+    assert(argc == 1);
+    
+    rslt->data->elem_bits = rslt->elem_bits;
+    rc = KDataBufferResize(rslt->data, rslt->elem_count = 1);
+    if (rc == 0) {
+        self->f(rslt->data->base,
+                argv[0].u.data.base, argv[0].u.data.first_elem,
+                argv[0].u.data.elem_count, 1);
+    }
+    return rc;
+}
+
+static
+rc_t CC vec_sum_array_func(
                 void *Self,
                 const VXformInfo *info,
                 void *dst,
@@ -82,7 +108,7 @@ rc_t CC array_func(
     
     assert(elem_count % self->vec_length == 0);
     assert((elem_count / self->vec_length) >> 32 == 0);
-    self->f(dst, src, self->vec_length, (uint32_t)(elem_count / self->vec_length));
+    self->f(dst, src, 0, self->vec_length, (uint32_t)(elem_count / self->vec_length));
     return 0;
 }
 
@@ -92,90 +118,122 @@ void CC vxf_vec_sum_wrapper( void *ptr )
 	free( ptr );
 }
 
-/*
- function < type T, U32 dim >
- T vec_sum #1.0 ( T [ dim ] in )
- */
-VTRANSFACT_IMPL(vdb_vec_sum, 1, 0, 0) (
-                                       const void *Self,
-                                       const VXfactInfo *info,
-                                       VFuncDesc *rslt,
-                                       const VFactoryParams *cp,
-                                       const VFunctionParams *dp
-) {
+rc_t vec_sum_make(self_t **const rslt,
+                  VXfactInfo const *const info,
+                  VFunctionParams const *const dp)
+{
     self_t *self;
     rc_t rc = 0;
     
     self = malloc(sizeof(*self));
     if (self == NULL)
-        return RC(rcVDB, rcFunction, rcConstructing, rcMemory, rcExhausted);
-    
-    rslt->self = self;
-    rslt->whack = vxf_vec_sum_wrapper;
-    rslt->variant = vftArray;
-    rslt->u.af = array_func;
-    
-    self->vec_length = dp->argv[0].fd.td.dim;
-    
-    switch (info->fdesc.desc.intrinsic_bits) {
-    case 8:
-        switch (info->fdesc.desc.domain) {
-        case vtdInt:
-            self->f = FUNC(int8_t);
+        rc = RC(rcVDB, rcFunction, rcConstructing, rcMemory, rcExhausted);
+    else {
+        self->vec_length = dp->argv[0].fd.td.dim;
+        
+        switch (info->fdesc.desc.intrinsic_bits) {
+        case 8:
+            switch (info->fdesc.desc.domain) {
+            case vtdInt:
+                self->f = FUNC(int8_t);
+                break;
+            case vtdUint:
+                self->f = FUNC(uint8_t);
+                break;
+            default:
+                rc = RC(rcVDB, rcFunction, rcConstructing, rcParam, rcInvalid);
+            }
             break;
-        case vtdUint:
-            self->f = FUNC(uint8_t);
+        case 16:
+            switch (info->fdesc.desc.domain) {
+            case vtdInt:
+                self->f = FUNC(int16_t);
+                break;
+            case vtdUint:
+                self->f = FUNC(uint16_t);
+                break;
+            default:
+                rc = RC(rcVDB, rcFunction, rcConstructing, rcParam, rcInvalid);
+            }
             break;
-        default:
-            rc = RC(rcVDB, rcFunction, rcConstructing, rcParam, rcInvalid);
-        }
-        break;
-    case 16:
-        switch (info->fdesc.desc.domain) {
-        case vtdInt:
-            self->f = FUNC(int16_t);
+        case 32:
+            switch (info->fdesc.desc.domain) {
+            case vtdInt:
+                self->f = FUNC(int32_t);
+                break;
+            case vtdUint:
+                self->f = FUNC(uint32_t);
+                break;
+            case vtdFloat:
+                self->f = FUNC(float);
+                break;
+            default:
+                rc = RC(rcVDB, rcFunction, rcConstructing, rcParam, rcInvalid);
+            }
             break;
-        case vtdUint:
-            self->f = FUNC(uint16_t);
+        case 64:
+            switch (info->fdesc.desc.domain) {
+            case vtdInt:
+                self->f = FUNC(int64_t);
+                break;
+            case vtdUint:
+                self->f = FUNC(uint64_t);
+                break;
+            case vtdFloat:
+                self->f = FUNC(double);
+                break;
+            default:
+                rc = RC(rcVDB, rcFunction, rcConstructing, rcParam, rcInvalid);
+            }
             break;
         default:
             rc = RC(rcVDB, rcFunction, rcConstructing, rcParam, rcInvalid);
         }
-        break;
-    case 32:
-        switch (info->fdesc.desc.domain) {
-        case vtdInt:
-            self->f = FUNC(int32_t);
-            break;
-        case vtdUint:
-            self->f = FUNC(uint32_t);
-            break;
-        case vtdFloat:
-            self->f = FUNC(float);
-            break;
-        default:
-            rc = RC(rcVDB, rcFunction, rcConstructing, rcParam, rcInvalid);
+        if (rc) {
+            free(self);
+            self = NULL;
         }
-        break;
-    case 64:
-        switch (info->fdesc.desc.domain) {
-        case vtdInt:
-            self->f = FUNC(int64_t);
-            break;
-        case vtdUint:
-            self->f = FUNC(uint64_t);
-            break;
-        case vtdFloat:
-            self->f = FUNC(double);
-            break;
-        default:
-            rc = RC(rcVDB, rcFunction, rcConstructing, rcParam, rcInvalid);
-        }
-        break;
-    default:
-        rc = RC(rcVDB, rcFunction, rcConstructing, rcParam, rcInvalid);
     }
-    if (rc)
-        free(self);
-    return 0;
+    *rslt = self;
+    return rc;
+}
+
+VTRANSFACT_IMPL(vdb_vec_sum, 1, 0, 0)(const void *Self,
+                                      const VXfactInfo *info,
+                                      VFuncDesc *rslt,
+                                      const VFactoryParams *cp,
+                                      const VFunctionParams *dp)
+{
+    self_t *self;
+    rc_t rc = vec_sum_make(&self, info, dp);
+    
+    if (rc == 0) {
+        rslt->self = self;
+        rslt->whack = vxf_vec_sum_wrapper;
+        rslt->variant = vftRow;
+        rslt->u.rf = vec_sum_row_func;
+    }
+    return rc;
+}
+
+/*
+ function < type T, U32 dim >
+ T vec_sum #1.0 ( T [ dim ] in )
+ */
+VTRANSFACT_IMPL(vdb_fixed_vec_sum, 1, 0, 0)(const void *Self,
+                                            const VXfactInfo *info,
+                                            VFuncDesc *rslt,
+                                            const VFactoryParams *cp,
+                                            const VFunctionParams *dp)
+{
+    self_t *self;
+    rc_t rc = vec_sum_make(&self, info, dp);
+    
+    if (rc == 0) {
+        rslt->self = self;
+        rslt->whack = vxf_vec_sum_wrapper;
+        rslt->variant = vftArray;
+        rslt->u.af = vec_sum_array_func;
+    }
+    return rc;
 }
diff --git a/libs/vxf/wgs-tokenize-accession.c b/libs/vxf/wgs-tokenize-accession.c
new file mode 100644
index 0000000..04454fc
--- /dev/null
+++ b/libs/vxf/wgs-tokenize-accession.c
@@ -0,0 +1,212 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <vdb/extern.h>
+
+#include <vdb/xform.h>
+#include <vdb/schema.h>
+#include <klib/data-buffer.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/rc.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+enum
+{
+    NCBI_WGS_acc_token_unrecognized = 1,
+    NCBI_WGS_acc_token_prefix,
+    NCBI_WGS_acc_token_contig
+};
+
+enum
+{
+    TTextToken_id,
+    TTextToken_start,
+    TTextToken_len
+};
+
+
+static
+uint32_t ParseWgsAccession ( uint16_t *tok, const char *acc, size_t acc_len )
+{
+    /* WGS accessions have form:
+     * [NZ_]<4-letter prefix><2-digit version><6-7 digit contig>
+     */
+    size_t i;
+
+    /* scan non-digits */
+    for ( i = 0; i < acc_len; ++ i )
+    {
+        if ( isdigit ( acc [ i ] ) )
+            break;
+    }
+
+    /* require at least 4 characters... */
+    if ( i >= 4 )
+    {
+        /* require at least 8 digits */
+        if ( acc_len - i >= 8 )
+        {
+            /* 2-digit version */
+            if ( isdigit ( acc [ ++ i ] ) )
+            {
+                /* record first token as prefix */
+                tok [ 0 + TTextToken_id ] = NCBI_WGS_acc_token_prefix;
+                tok [ 0 + TTextToken_start ] = 0;
+                tok [ 0 + TTextToken_len ] = ( uint16_t ) ++ i;
+
+                /* the remainder should be contig */
+                tok [ 3 + TTextToken_id ] = NCBI_WGS_acc_token_contig;
+                tok [ 3 + TTextToken_start ] = ( uint16_t ) i;
+                tok [ 3 + TTextToken_len ] = ( uint16_t ) ( acc_len - i );
+
+                /* verify that it is numeric */
+                for ( ; i < acc_len; ++ i )
+                {
+                    if ( ! isdigit ( acc [ i ] ) )
+                        break;
+                }
+
+                /* great success */
+                if ( i == acc_len )
+                    return 2;
+            }
+        }
+    }
+
+    tok [ 0 + TTextToken_id ] = NCBI_WGS_acc_token_unrecognized;
+    tok [ 0 + TTextToken_start ] = 0;
+    tok [ 0 + TTextToken_len ] = ( uint16_t ) acc_len;
+
+    return 1;
+}
+
+static
+rc_t CC tokenize_nuc_accession ( void *obj,
+     const VXformInfo *info, int64_t row_id, VRowResult *rslt,
+     uint32_t argc, const VRowData argv [] )
+{
+    rc_t rc;
+    const char *acc;
+    
+    assert ( rslt -> elem_bits == 16 * 3 );
+
+    rslt -> data -> elem_bits = rslt -> elem_bits;
+    rc = KDataBufferResize ( rslt -> data, 2 );
+    if ( rc != 0 )
+        return rc;
+
+    acc = argv [ 0 ] . u . data . base;
+    acc += argv [ 0 ] . u . data . first_elem;
+
+    rslt -> elem_count = ParseWgsAccession ( rslt -> data -> base, acc, argv [ 0 ] . u . data . elem_count );
+    if ( rslt -> elem_count != 2 )
+        rc = KDataBufferResize ( rslt -> data, rslt -> elem_count );
+
+    return rc;
+}
+
+static
+uint32_t ParseProtAccession ( uint16_t *tok, const char *acc, size_t acc_len )
+{
+    /* Protein accessions generally have pattern 
+     * <Cap-letter prefix><digital suffix>
+     * If this doesn't hold, use full accession as prefix, and make suffix empty.
+     */
+    size_t i;
+
+    for ( i = 0; i < acc_len; ++ i )
+    {
+        if ( isdigit ( acc [ i ] ) )
+            break;
+    }
+
+    tok [ 0 + TTextToken_id ] = NCBI_WGS_acc_token_prefix;
+    tok [ 0 + TTextToken_start ] = 0;
+    tok [ 0 + TTextToken_len ] = ( uint16_t ) i;
+
+    for ( ; i < acc_len; ++ i )
+    {
+        if ( ! isdigit ( acc [ i ] ) )
+            break;
+    }
+
+    if ( i == acc_len )
+    {
+        tok [ 3 + TTextToken_id ] = NCBI_WGS_acc_token_contig;
+        tok [ 3 + TTextToken_start ] = tok [ 0 + TTextToken_len ];
+        tok [ 3 + TTextToken_len ] = ( uint16_t ) ( i - tok [ 0 + TTextToken_len ] );
+        return 2;
+    }
+
+    tok [ 0 + TTextToken_len ] = ( uint16_t ) acc_len;
+    return 1;
+}
+
+static
+rc_t CC tokenize_prot_accession ( void *obj,
+     const VXformInfo *info, int64_t row_id, VRowResult *rslt,
+     uint32_t argc, const VRowData argv [] )
+{
+    rc_t rc;
+    const char *acc;
+    
+    assert ( rslt -> elem_bits == 16 * 3 );
+
+    rslt -> data -> elem_bits = rslt -> elem_bits;
+    rc = KDataBufferResize ( rslt -> data, 2 );
+    if ( rc != 0 )
+        return rc;
+
+    acc = argv [ 0 ] . u . data . base;
+    acc += argv [ 0 ] . u . data . first_elem;
+
+    rslt -> elem_count = ParseProtAccession ( rslt -> data -> base, acc, argv [ 0 ] . u . data . elem_count );
+    if ( rslt -> elem_count != 2 )
+        rc = KDataBufferResize ( rslt -> data, rslt -> elem_count );
+
+    return rc;
+}
+
+VTRANSFACT_IMPL ( NCBI_WGS_tokenize_nuc_accession, 1, 0, 0 ) ( const void *self, const VXfactInfo *info,
+    VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+{
+    rslt -> u . rf = tokenize_nuc_accession;
+    rslt -> variant = vftRow;
+    return 0;
+}
+
+VTRANSFACT_IMPL ( NCBI_WGS_tokenize_prot_accession, 1, 0, 0 ) ( const void *self, const VXfactInfo *info,
+    VFuncDesc *rslt, const VFactoryParams *cp, const VFunctionParams *dp )
+{
+    rslt -> u . rf = tokenize_prot_accession;
+    rslt -> variant = vftRow;
+    return 0;
+}
diff --git a/libs/wgsxf/Makefile b/libs/wgsxf/Makefile
new file mode 100644
index 0000000..8342ebf
--- /dev/null
+++ b/libs/wgsxf/Makefile
@@ -0,0 +1,138 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = libs/wgsxf
+
+MOD_LIBS = \
+	libwgsxf \
+	libwwgsxf
+
+TEST_TOOLS = \
+
+include $(TOP)/build/Makefile.env
+
+RWORKDIR = $(BINDIR)
+
+ALL_LIBS = \
+	$(MOD_LIBS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/std
+
+$(MOD_LIBS): makedirs
+	@ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(TEST_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: all std $(ALL_LIBS) $(TEST_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(TARGDIR)/,$(MOD_LIBS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# wgs-vdb transform library
+#
+$(TARGDIR)/libwgsxf: $(addprefix $(TARGDIR)/libwgsxf.,$(MODEXT))
+
+$(TARGDIR)/libwgsxf.$(SHLX): $(MODDIR)/libwgsxf.$(SHLX)
+
+WGSXF_SRC = \
+	build_scaffold \
+	build_read_type
+
+WGSXF_OBJ = \
+	$(addsuffix .$(LOBX),$(WGSXF_SRC))
+
+WGSXF_LIB = \
+	-dvdb \
+	-dklib \
+	-dm \
+	-dz \
+	-dbz2
+
+$(MODDIR)/libwgsxf.$(SHLX): $(WGSXF_OBJ)
+	$(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(WGSXF_LIB)
+
+$(TARGDIR)/libwgsxf.$(LIBX): $(ILIBDIR)/libwgsxf.$(LIBX)
+
+$(ILIBDIR)/libwgsxf.$(LIBX): $(WGSXF_OBJ)
+	$(LD) --slib -o $@ $^ $(WGSXF_LIB)
+
+.PHONY: $(TARGDIR)/libwgsxf $(TARGDIR)/libwgsxf.$(SHLX) $(TARGDIR)/libwgsxf.$(LIBX)
+
+#-------------------------------------------------------------------------------
+# update-side wgs transform library
+#
+
+$(TARGDIR)/libwwgsxf: $(addprefix $(TARGDIR)/libwwgsxf.,$(MODEXT))
+
+$(TARGDIR)/libwwgsxf.$(SHLX): $(WMODDIR)/libwwgsxf.$(SHLX)
+
+WWGSXF_SRC = \
+	$(WGSXF_SRC)
+
+WWGSXF_OBJ = \
+	$(addsuffix .$(LOBX),$(WWGSXF_SRC))
+
+# temporary
+WWGSXF_LIB = \
+	-dwvdb \
+	-dwkdb \
+	-dklib \
+	-dm \
+	-dz \
+	-dbz2
+
+$(WMODDIR)/libwwgsxf.$(SHLX): $(WWGSXF_OBJ)
+	$(LD) --dlib --vers $(SRCDIR) -o $@ $^ $(WWGSXF_LIB)
+
+$(TARGDIR)/libwwgsxf.$(LIBX): $(ILIBDIR)/libwwgsxf.$(LIBX)
+
+$(ILIBDIR)/libwwgsxf.$(LIBX): $(WWGSXF_OBJ)
+	$(LD) --slib -o $@ $^ $(WWGSXF_LIB)
+
+libwwgsxf.vers.h:
+	@ true
+
+.PHONY: $(TARGDIR)/libwwgsxf $(TARGDIR)/libwwgsxf.$(SHLX) $(TARGDIR)/libwwgsxf.$(LIBX)
diff --git a/libs/wgsxf/build_read_type.c b/libs/wgsxf/build_read_type.c
new file mode 100644
index 0000000..02ebed5
--- /dev/null
+++ b/libs/wgsxf/build_read_type.c
@@ -0,0 +1,113 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <vdb/extern.h>
+#include <vdb/xform.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/schema.h>
+
+#include <klib/defs.h>
+#include <klib/rc.h>
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <stdio.h>
+
+#include <insdc/insdc.h>
+#include <insdc/sra.h>
+#include <ncbi/wgs-contig.h>
+
+static
+rc_t build_read_type(INSDC_SRA_xread_type dst[],
+                     unsigned const components,
+                     NCBI_WGS_component_props const Props[/* components */])
+{
+    unsigned i;
+    
+    for (i = 0; i != components; ++i) {
+        int const props = Props[i];
+        
+        if (props < 0) {
+            dst[i] = SRA_READ_TYPE_TECHNICAL;
+        }
+        else {
+            int const type = props & 0x0F;
+            
+            if (type == 0) {
+                int const strand = props & ~(NCBI_WGS_strand_plus | NCBI_WGS_strand_minus);
+                
+                switch (strand) {
+                case 0:
+                    dst[i] = SRA_READ_TYPE_BIOLOGICAL;
+                    break;
+                case NCBI_WGS_strand_plus:
+                    dst[i] = SRA_READ_TYPE_BIOLOGICAL | SRA_READ_TYPE_FORWARD;
+                    break;
+                case NCBI_WGS_strand_minus:
+                    dst[i] = SRA_READ_TYPE_BIOLOGICAL | SRA_READ_TYPE_REVERSE;
+                    break;
+                default:
+                    return RC(rcXF, rcFunction, rcExecuting, rcType, rcInvalid);
+                }
+            }
+            else
+                return RC(rcXF, rcFunction, rcExecuting, rcType, rcInvalid);
+        }
+    }
+    return 0;
+}
+
+/*
+ * function INSDC:SRA:xread_type NCBI:WGS:build_read_type #1
+ *     ( NCBI:WGS:component_props component_props )
+ */
+
+static
+rc_t CC build_read_type_impl(void *self, VXformInfo const *info, int64_t row_id,
+                             VFixedRowResult const *rslt,
+                             uint32_t argc, VRowData const argv[])
+{
+    NCBI_WGS_component_props const *const props = argv[0].u.data.base;
+    unsigned const components = argv[0].u.data.elem_count;
+    INSDC_SRA_xread_type *const dst = rslt->base;
+
+    return build_read_type(&dst[rslt->first_elem], components,
+                           &props[argv[0].u.data.first_elem]);
+}
+
+VTRANSFACT_IMPL(NCBI_WGS_build_read_type, 1, 0, 0)(void const *const Self,
+                                                   VXfactInfo const *const info,
+                                                   VFuncDesc *const rslt,
+                                                   VFactoryParams const *const cp,
+                                                   VFunctionParams const *const dp)
+{
+    rslt->variant = vftFixedRow;
+    rslt->u.pf = build_read_type_impl;
+    return 0;
+}
diff --git a/libs/wgsxf/build_scaffold.c b/libs/wgsxf/build_scaffold.c
new file mode 100644
index 0000000..c9f3f2b
--- /dev/null
+++ b/libs/wgsxf/build_scaffold.c
@@ -0,0 +1,388 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+#include <vdb/extern.h>
+#include <vdb/xform.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/schema.h>
+
+#include <klib/defs.h>
+#include <klib/rc.h>
+#include <kdb/meta.h>
+#include <klib/data-buffer.h>
+#include <insdc/insdc.h>
+#include <align/refseq-mgr.h>
+#include <bitstr.h>
+#include <sysalloc.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include <stdio.h>
+
+#include <insdc/sra.h>
+#include <ncbi/wgs-contig.h>
+
+#define READ_GAP_VALUE (0)
+#define QUAL_GAP_VALUE (2)
+
+#define CURSOR_CACHE_SIZE (4 * 1024 * 1024)
+
+typedef struct self_t self_t;
+typedef rc_t (*impl_f)(self_t const *const self, void *const Dst,
+                       unsigned const components,
+                       INSDC_coord_one const start[/* components */],
+                       INSDC_coord_len const length[/* components */],
+                       NCBI_WGS_component_props const props[/* components */],
+                       int64_t const join[/* components */]);
+
+struct self_t
+{
+    VCursor const *curs;
+    uint32_t col_idx;
+    impl_f impl;
+};
+
+static void free_self(self_t *const self)
+{
+    VCursorRelease(self->curs);
+}
+
+static
+void CC whack(void *vp)
+{
+    if (vp) {
+        free_self(vp);
+        free(vp);
+    }
+}
+
+static
+rc_t init_self(self_t *self, VTable const *const srctbl, char const column[])
+{
+    VDatabase const *db;
+    rc_t rc = VTableOpenParentRead(srctbl, &db);
+
+    if (rc == 0) {
+        VTable const *tbl;
+        
+        rc = VDatabaseOpenTableRead(db, &tbl, "SEQUENCE");
+        VDatabaseRelease(db);
+        if (rc == 0) {
+            VCursor const *curs;
+#if CURSOR_CACHE_SIZE
+            rc = VTableCreateCachedCursorRead(tbl, &curs, CURSOR_CACHE_SIZE);
+#else
+            rc = VTableCreateCursorRead(tbl, &curs);
+#endif
+            VTableRelease(tbl);
+            if (rc == 0) {
+                uint32_t col_idx;
+                
+                rc = VCursorAddColumn(curs, &col_idx, column);
+                if (rc == 0) {
+                    rc = VCursorOpen(curs);
+                    if (rc == 0) {
+                        self->curs = curs;
+                        self->col_idx = col_idx;
+                        return 0;
+                    }
+                    if (GetRCObject(rc) == rcColumn && GetRCState(rc) == rcUndefined)
+                        rc = 0;
+                }
+                VCursorRelease(curs);
+            }
+        }
+    }
+    return rc;
+}
+
+static
+rc_t build_scaffold_read_impl(self_t const *const self, void *const Dst,
+                              unsigned const components,
+                              INSDC_coord_one const Start[/* components */],
+                              INSDC_coord_len const Length[/* components */],
+                              NCBI_WGS_component_props const Props[/* components */],
+                              int64_t const join[/* components */])
+{
+    INSDC_4na_bin *const dst = Dst;
+    unsigned i;
+    unsigned j;
+    unsigned id;
+    rc_t rc;
+    
+    for (rc = 0, id = j = i = 0; rc == 0 && i != components; ++i) {
+        INSDC_coord_len const length = Length[i];
+        int const props = Props[i];
+
+        if (props < 0) {
+            /* gap */
+            memset(dst + j, READ_GAP_VALUE, length);
+        }
+        else if (self->curs == NULL) {
+            memset(dst + j, 15, length);
+        }
+        else {
+            int const type = props & 0x0F;
+            int const strand = (props & ~(NCBI_WGS_strand_plus | NCBI_WGS_strand_minus)) >> 4;
+            
+            if (type != 0 || strand == 3)
+                rc = RC(rcXF, rcFunction, rcExecuting, rcType, rcInvalid);
+            else {
+                int64_t const row = join[id++];
+                uint32_t elem_bits;
+                uint32_t bit_offset;
+                uint32_t elem_count;
+                void const *base;
+                
+                rc = VCursorCellDataDirect(self->curs, row, self->col_idx,
+                                           &elem_bits, &base, &bit_offset,
+                                           &elem_count);
+                assert(bit_offset == 0);
+                if (rc == 0) {
+                    INSDC_coord_one const start = Start[i] - 1;
+                    
+                    if (elem_count < start + length)
+                        rc = RC(rcXF, rcFunction, rcExecuting, rcData, rcInsufficient);
+                    else {
+                        INSDC_4na_bin const *const src = base;
+                        
+                        if (strand == 2) {
+                            static INSDC_4na_bin const complement[] = {
+                                /* 0  0000 - 0000*/  0,
+                                /* 1  0001 - 1000*/  8,
+                                /* 2  0010 - 0100*/  4,
+                                /* 3  0011 - 1100*/ 12,
+                                /* 4  0100 - 0010*/  2,
+                                /* 5  0101 - 1010*/ 10,
+                                /* 6  0110 - 0110*/  6,
+                                /* 7  0111 - 1110*/ 14,
+                                /* 8  1000 - 0001*/  1,
+                                /* 9  1001 - 1001*/  9,
+                                /*10  1010 - 0101*/  5,
+                                /*11  1011 - 1101*/ 13,
+                                /*12  1100 - 0011*/  3,
+                                /*13  1101 - 1011*/ 11,
+                                /*14  1110 - 0111*/  7,
+                                /*15  1111 - 1111*/ 15
+                            };
+                            unsigned k;
+                            unsigned jj;
+                            
+                            for (jj = j + length, k = 0; k != length; ++k) {
+                                INSDC_4na_bin const elem = src[start + k];
+                                
+                                assert(0 <= elem && elem <= 15);
+                                --jj;
+                                dst[jj] = complement[elem];
+                            }
+                        }
+                        else
+                            memcpy(&dst[j], &src[start], length);
+                    }
+                }
+            }
+        }
+
+        j += length;
+    }
+    return rc;
+}
+
+static
+rc_t build_scaffold_qual_impl(self_t const *const self, void *const Dst,
+                              unsigned const components,
+                              INSDC_coord_one const Start[/* components */],
+                              INSDC_coord_len const Length[/* components */],
+                              NCBI_WGS_component_props const Props[/* components */],
+                              int64_t const join[/* components */])
+{
+    INSDC_quality_phred *const dst = Dst;
+    unsigned i;
+    unsigned j;
+    unsigned id;
+    rc_t rc;
+    
+    for (rc = 0, id = j = i = 0; rc == 0 && i != components; ++i) {
+        INSDC_coord_len const length = Length[i];
+        int const props = Props[i];
+        
+        if (props < 0) {
+            /* gap */
+            memset(dst + j, QUAL_GAP_VALUE, length);
+        }
+        else if (self->curs == NULL) {
+            memset(dst + j, 30, length);
+        }
+        else {
+            int const type = props & 0x0F;
+            int const strand = (props & ~(NCBI_WGS_strand_plus | NCBI_WGS_strand_minus)) >> 4;
+            
+            if (type != 0 || strand == 3)
+                rc = RC(rcXF, rcFunction, rcExecuting, rcType, rcInvalid);
+            else {
+                int64_t const row = join[id++];
+                uint32_t elem_bits;
+                uint32_t bit_offset;
+                uint32_t elem_count;
+                void const *base;
+                
+                rc = VCursorCellDataDirect(self->curs, row, self->col_idx,
+                                           &elem_bits, &base, &bit_offset,
+                                           &elem_count);
+                assert(bit_offset == 0);
+                if (rc == 0) {
+                    INSDC_quality_phred const start = Start[i] - 1;
+                    
+                    if (elem_count < start + length)
+                        rc = RC(rcXF, rcFunction, rcExecuting, rcData, rcInsufficient);
+                    else {
+                        INSDC_quality_phred const *const src = base;
+                        
+                        if (strand == 2) {
+                            unsigned k;
+                            unsigned jj;
+                            
+                            for (jj = j + length, k = 0; k != length; ++k) {
+                                INSDC_quality_phred const elem = src[start + k];
+                                
+                                --jj;
+                                dst[jj] = elem;
+                            }
+                        }
+                        else
+                            memcpy(&dst[j], &src[start], length);
+                    }
+                }
+            }
+        }
+        
+        j += length;
+    }
+    return rc;
+}
+
+static
+unsigned total_length(unsigned const components, INSDC_coord_len const length[/* components */])
+{
+    unsigned i;
+    unsigned len;
+    
+    for (i = len = 0; i != components; ++i)
+        len += length[i];
+    return len;
+}
+
+
+/*
+ * function INSDC:4na:bin NCBI:WGS:build_scaffold_read #1
+ *     ( INSDC:coord:one component_start, INSDC:coord:len component_len,
+ *       NCBI:WGS:component_props component_props, I64 component_id )
+ *
+ * function INSDC:quality:phred NCBI:WGS:build_scaffold_qual #1
+ *     ( INSDC:coord:one component_start, INSDC:coord:len component_len,
+ *       NCBI:WGS:component_props component_props, I64 component_id )
+ */
+
+static
+rc_t CC build_scaffold_impl(void *const data, VXformInfo const *const info,
+                            int64_t const row_id, VRowResult *const rslt,
+                            uint32_t const argc, VRowData const argv[])
+{
+    self_t const *const self = data;
+    INSDC_coord_one const *const start = argv[0].u.data.base;
+    INSDC_coord_len const *const length = argv[1].u.data.base;
+    NCBI_WGS_component_props const *const props = argv[2].u.data.base;
+    int64_t const *const join = argv[3].u.data.base;
+    unsigned const components = argv[0].u.data.elem_count;
+    rc_t rc;
+    
+    assert(argv[1].u.data.elem_count == components);
+    assert(argv[2].u.data.elem_count == components);
+    
+    assert(start != NULL);
+    assert(length != NULL);
+    assert(props != NULL);
+    assert(join != NULL);
+    
+    assert(rslt->elem_bits == 8);
+    rslt->elem_count = total_length(components, &length[argv[1].u.data.first_elem]);
+    rc = KDataBufferResize(rslt->data, rslt->elem_count);
+    if (rc == 0)
+        rc = self->impl(self, rslt->data->base, components,
+                        &start[argv[0].u.data.first_elem],
+                        &length[argv[1].u.data.first_elem],
+                        &props[argv[2].u.data.first_elem],
+                        &join[argv[3].u.data.first_elem]);
+    return rc;
+}
+
+VTRANSFACT_IMPL(NCBI_WGS_build_scaffold_read, 1, 0, 0)(void const * Self,
+                                                       VXfactInfo const * info,
+                                                       VFuncDesc * rslt,
+                                                       VFactoryParams const * cp,
+                                                       VFunctionParams const * dp)
+{
+    self_t *self = calloc(1, sizeof(*self));
+    if (self) {
+        rc_t const rc = init_self(self, info->tbl, "(INSDC:4na:bin)READ");
+        
+        if (rc == 0) {
+            self->impl = build_scaffold_read_impl;
+            
+            rslt->self = self;
+            rslt->whack = whack;
+            rslt->variant = vftRow;
+            rslt->u.rf = build_scaffold_impl;
+        }
+        return rc;
+    }
+    return RC(rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted);
+}
+
+VTRANSFACT_IMPL(NCBI_WGS_build_scaffold_qual, 1, 0, 0)(void const * Self,
+                                                       VXfactInfo const * info,
+                                                       VFuncDesc * rslt,
+                                                       VFactoryParams const * cp,
+                                                       VFunctionParams const * dp)
+{
+    self_t *self = calloc(1, sizeof(*self));
+    if (self) {
+        rc_t const rc = init_self(self, info->tbl, "(INSDC:quality:phred)QUALITY");
+    
+        if (rc == 0) {
+            self->impl = build_scaffold_qual_impl;
+            
+            rslt->self = self;
+            rslt->whack = whack;
+            rslt->variant = vftRow;
+            rslt->u.rf = build_scaffold_impl;
+        }
+        return rc;
+    }
+    return RC(rcXF, rcFunction, rcConstructing, rcMemory, rcExhausted);
+}
diff --git a/libs/align/libalign-writer.vers b/libs/wgsxf/libwgsxf.vers
similarity index 100%
copy from libs/align/libalign-writer.vers
copy to libs/wgsxf/libwgsxf.vers
diff --git a/libs/align/libalign-writer.vers b/libs/wgsxf/libwwgsxf.vers
similarity index 100%
rename from libs/align/libalign-writer.vers
rename to libs/wgsxf/libwwgsxf.vers
diff --git a/tools/Makefile b/tools/Makefile
index ec5f90d..87cbc82 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -38,12 +38,22 @@ SUBDIRS = \
 	vdb-dump \
 	sra-dump \
 	sra-load \
-	sam-dump \
+	sra-pileup \
+	bam-loader \
+	srapath \
 	sra-stat \
 	vdb-copy \
 	sra-dbcc \
 	vdb-config \
-	align-info
+	align-info \
+	prefetch \
+	nenctool \
+	nencvalid \
+	vdb-decrypt \
+	vdb-validate \
+	sra-sort \
+	cg-load \
+    fastq-loader
 
 default: $(SUBDIRS)
 
@@ -101,6 +111,17 @@ $(SUBDIRS_TAG):
 
 .PHONY: tag $(SUBDIRS_TAG)
 
+#-------------------------------------------------------------------------------
+# runtests
+#
+SUBDIRS_RUNTESTS = $(addsuffix _runtests, bam-loader fastq-loader)
+
+runtests: std $(SUBDIRS_RUNTESTS)
+
+$(SUBDIRS_RUNTESTS):
+	@ $(MAKE) -C $(subst _runtests,,$@) runtests
+
+.PHONY: runtests $(SUBDIRS_RUNTESTS)
 
 #-------------------------------------------------------------------------------
 # pass-through
diff --git a/tools/align-info/Makefile b/tools/align-info/Makefile
index c5e5312..030af03 100644
--- a/tools/align-info/Makefile
+++ b/tools/align-info/Makefile
@@ -25,7 +25,7 @@
 
 default: std
 
-TOP ?= $(abspath ../..)
+TOP ?= $(shell ../../build/abspath.sh ../..)
 MODULE = tools/align-info
 
 include $(TOP)/build/Makefile.env
@@ -42,15 +42,13 @@ ALL_TOOLS = \
 #-------------------------------------------------------------------------------
 # outer targets
 #
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
-all std: makedirs vers-includes
+all std: vers-includes
 	@ $(MAKE_CMD) $(TARGDIR)/std
 
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
 	@ $(MAKE_CMD) $(BINDIR)/$@
 
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
 
 #-------------------------------------------------------------------------------
 # std
@@ -61,19 +59,18 @@ $(TARGDIR)/std: \
 .PHONY: $(TARGDIR)/std
 
 #-------------------------------------------------------------------------------
-# clean
+# vers-includes
 #
-clean: stdclean
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
 
-.PHONY: clean
+.PHONY: $(TARGDIR)/vers-includes
 
 #-------------------------------------------------------------------------------
-# tag
+# clean
 #
-tag: \
-	$(addsuffix _tag,$(ALL_TOOLS))
+clean: stdclean
 
-.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+.PHONY: clean
 
 #-------------------------------------------------------------------------------
 # align-info
@@ -88,22 +85,18 @@ ALIGN_INFO_LIB = \
 	-lkapp \
 	-lsraschema \
 	-dalign-reader \
-	-daxf \
-	-dsraxf \
-	-dvxf \
+	$(READONLY_SCHEMA_LIBS) \
 	-dksrch \
 	-lvdb \
 	-lkdb \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
 	-lkfg \
 	-lkfs \
+	-lkproc \
 	-lklib \
-	-lbz2 \
-	-ldl \
-	-lz \
 	-lm
 
 $(BINDIR)/align-info: $(ALIGN_INFO_OBJ)
 	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(ALIGN_INFO_LIB)
-
-align_info_tag:
-	@ $(TOP)/build/tag-module.sh $(MODULE) align-info $(ALIGN_INFO_OBJ)
diff --git a/tools/align-info/align-info.c b/tools/align-info/align-info.c
index bd52e46..40bc8a8 100644
--- a/tools/align-info/align-info.c
+++ b/tools/align-info/align-info.c
@@ -30,14 +30,17 @@
 
 #include <vdb/manager.h> /* VDBManager */
 #include <vdb/database.h> /* VDatabase */
+#include <vdb/dependencies.h> /* VDBDependencies */
 #include <vdb/table.h> /* VTable */
 #include <vdb/schema.h> /* VSchema */
 #include <vdb/cursor.h> /* VCursor */
+#include <vdb/vdb-priv.h> /* VDBManagerOpenKDBManagerRead */
 
 #include <kapp/main.h>
 
 #include <kfg/config.h> /* KConfig */
 
+#include <kdb/manager.h> /* KDBManagerRelease */
 #include <kdb/namelist.h> /* KMDataNodeListChild */
 #include <kdb/meta.h> /* KMetadata */
 
@@ -49,15 +52,10 @@
 #include <klib/rc.h> /* RC */
 
 #include <assert.h>
-#include <limits.h> /* PATH_MAX */
 #include <stdio.h> /* sscanf */
 #include <stdlib.h> /* free */
 #include <string.h> /* strcmp */
 
-#ifndef PATH_MAX
-#define PATH_MAX 4096
-#endif
-
 #define DISP_RC(rc, msg) (void)((rc == 0) ? 0 : LOGERR(klogInt, rc, msg))
 #define DISP_RC2(rc, name, msg) (void)((rc == 0) ? 0 : \
     PLOGERR(klogInt, (klogInt,rc, "$(msg): $(name)","msg=%s,name=%s",msg,name)))
@@ -71,253 +69,6 @@ typedef struct Params {
     bool paramQuality;
     bool paramRef;
 } Params;
-typedef struct RefNode {
-    BSTNode n;
-    bool circular;
-    char* name;
-    char* seqId;
-    bool row_lenCMP_READwas0;
-} RefNode;
-static rc_t ReadCfgStr
-(const KConfig* kfg, const char* path, char* value, size_t value_sz)
-{
-    rc_t rc = 0;
-    const KConfigNode *node = NULL;
-
-    rc = KConfigOpenNodeRead(kfg, &node, path);
-    if (rc == 0) {
-        size_t num_read = 0;
-        size_t remaining = 0;
-        rc = KConfigNodeRead
-            (node, 0, value, value_sz - 1, &num_read, &remaining);
-        if (rc == 0) {
-            if (remaining != 0)
-            {   rc = RC(rcExe, rcConfig, rcReading, rcString, rcTooLong); }
-            else { value[num_read] = '\0'; }
-        }
-    }
-
-    DESTRUCT(KConfigNode, node);
-
-    return rc;
-}
-
-typedef struct FindRefseq {
-    const char* seqId;
-    bool found;
-} FindRefseq;
-static rc_t CC scan_refseq_dir(const KDirectory* dir,
-    uint32_t type, const char* name, void* data)
-{
-    FindRefseq* t = data;
-    assert(dir && name && data && t->seqId);
-    if (strcmp(t->seqId, name) == 0)
-    {   t->found = true; }
-    return 0;
-}
-
-static bool construct(rc_t* aRc, const KDirectory* native, const char* srv,
-    const char* vol, const char* seqId, char* buf, size_t blen)
-{
-    rc_t rc = 0;
-
-    const KDirectory* dir = NULL;
-
-    FindRefseq t;
-
-    assert(aRc && native && srv && seqId && buf && blen);
-
-    rc = *aRc;
-
-    if (rc != 0)
-    {   return false; }
-
-    if (vol)
-    {   rc = KDirectoryOpenDirRead(native, &dir, false, "%s/%s", srv, vol); }
-    else
-    {   rc = KDirectoryOpenDirRead(native, &dir, false, srv); }
-
-    if (rc == 0) {
-        memset(&t, 0, sizeof t);
-        t.seqId = seqId;
-        rc = KDirectoryVVisit(dir, false, scan_refseq_dir, &t, ".", NULL);
-    }
-
-    if (rc == 0 && t.found) {
-        if (vol) {
-            rc = KDirectoryResolvePath
-                (native, true, buf, blen, "%s/%s/%s", srv, vol, seqId);
-        }
-        else {
-            rc = KDirectoryResolvePath
-                (native, true, buf, blen, "%s/%s", srv, seqId);
-        }
-    }
-
-    DESTRUCT(KDirectory, dir);
-
-    *aRc = rc;
-
-    return t.found;
-}
-
-static
-rc_t privFindRef(const char* seqId, char* buf, size_t blen,
-    bool destroy)
-{
-#define SIZE 4096
-    rc_t rc = 0;
-    static KDirectory* dir = NULL;
-    static KConfig* cfg = NULL;
-    static char Servers[SIZE] = "";
-    static char Volumes[SIZE] = "";
-    static char Paths[SIZE] = "";
-    if (cfg == NULL && !destroy) {
-        if (rc == 0) {
-            rc = KDirectoryNativeDir(&dir);
-            DISP_RC(rc, "while calling KDirectoryNativeDir");
-        }
-        if (rc == 0) {
-            rc = KConfigMake(&cfg, NULL);
-            DISP_RC(rc, "while calling KConfigMake");
-        }
-        if (rc == 0) {
-            const char path[] = "refseq/servers";
-            rc = ReadCfgStr(cfg, path, Servers, sizeof Servers);
-            if (rc != 0) {
-                if (GetRCState(rc) == rcNotFound)
-                {   rc = 0; }
-                else { DISP_RC2(rc, path, "while reading Node"); }
-            }
-            else {
-                const char path[] = "refseq/volumes";
-                rc = ReadCfgStr(cfg, path, Volumes, sizeof Volumes);
-                if (rc != 0) {
-                    if (GetRCState(rc) == rcNotFound)
-                    {   rc = 0; }
-                    else { DISP_RC2(rc, path, "while reading Node"); }
-                }
-            }
-            if (rc == 0) {
-                const char path[] = "refseq/paths";
-                rc = ReadCfgStr(cfg, path, Paths, sizeof Paths);
-                if (rc != 0) {
-                    if (GetRCState(rc) == rcNotFound)
-                    {   rc = 0; }
-                    else { DISP_RC2(rc, path, "while reading Node"); }
-                }
-            }
-        }
-    }
-    if (!destroy && rc == 0 && dir != NULL && cfg != NULL) {
-        if (Servers[0] && Volumes[0])
-        {
-            char server[SIZE];
-            char vol[SIZE];
-            char* srv_sep = NULL;
-            char *srv_rem = server;
-            strcpy(server, Servers);
-    /* TODO check for multiple servers/volumes */
-            do {
-                char *vol_rem = vol;
-                char *vol_sep = NULL;
-                strcpy(vol, Volumes);
-                srv_sep = strchr(server, ':');
-                if (srv_sep) {
-                    srv_rem = srv_sep + 1;
-                    *srv_sep = '\0';
-                }
-                do {
-                    char const* volume = vol_rem;
-                    vol_sep = strchr(volume, ':');
-                    if (vol_sep) {
-                        vol_rem = vol_sep + 1;
-                        *vol_sep = 0;
-                    }
-                    if (construct(&rc, dir, server, volume,
-                        seqId, buf, blen))
-                    {   break; }
-                } while(vol_sep && rc == 0);
-            } while(srv_sep && rc == 0);
-        }
-        else if (Paths[0]) {
-            char paths[SIZE];
-            char *path_rem = paths;
-            char *path_sep = NULL;
-            strcpy(paths, Paths);
-            do {
-                char const* path = path_rem;
-                path_sep = strchr(path, ':');
-                if (path_sep) {
-                    path_rem = path_sep + 1;
-                    *path_sep = 0;
-                }
-                if (construct(&rc, dir, path, NULL, seqId, buf, blen))
-                {   break; }
-            } while(path_sep && rc == 0);
-        }
-    }
-    if (destroy) {
-        DESTRUCT(KConfig, cfg);
-        DESTRUCT(KDirectory, dir);
-    }
-    return rc;
-}
-
-static rc_t DestroyConfig(void) { return privFindRef(NULL, NULL, 0, true); }
-
-static rc_t FindRef(const char* seqId, char* buf, size_t blen)
-{   return privFindRef(seqId, buf, blen, false); }
-
-static int CC bstCmp(const void* item, const BSTNode* n) {
-    const char* lhs = item;
-    const RefNode* sn = (const RefNode*) n;
-
-    assert(lhs && sn);
-
-    return strcmp(lhs, sn->seqId);
-}
-
-static int CC bstSort(const BSTNode* item, const BSTNode* n) {
-    const RefNode* sn = (const RefNode*) item;
-
-    return bstCmp(sn->seqId, n);
-}
-
-static void CC bstPrint(BSTNode* n, void* data) {
-    char buf[PATH_MAX + 1] = "";
-    bool remote = false;
-    const RefNode* sn = (const RefNode*) n;
-
-    assert(sn);
-
-    remote = sn->row_lenCMP_READwas0;
-    if (remote) {
-        rc_t rc = FindRef(sn->seqId, buf, sizeof buf);
-        if (rc)
-        {   buf[0] = '\0'; }
-    }
-
-    OUTMSG(("%s,%s,%s,%s", sn->seqId, sn->name,
-        (sn->circular ? "true" : "false"), (remote ? "remote" : "local")));
-    if (buf[0])
-        {   OUTMSG((":%s", buf)); }
-    OUTMSG(("\n"));
-}
-
-static void CC bstWhack(BSTNode* n, void* ignore) {
-    RefNode* sn = (RefNode*) n;
-
-    assert(sn);
-
-    free(sn->name);
-    sn->name = NULL;
-
-    free(sn->seqId);
-    sn->seqId = NULL;
-
-    free(sn);
-}
 
 #define ALIAS_ALL    "a"
 #define OPTION_ALL   "all"
@@ -391,67 +142,6 @@ const char UsageDefaultName[] = "align-info";
 
 ver_t CC KAppVersion(void) { return ALIGN_INFO_VERS; }
 
-static rc_t ArgsRelease(Args* self) { return ArgsWhack(self); }
-
-typedef struct Column {
-    uint32_t idx;
-    const char* name;
-} Column;
-
-static rc_t AddColumn(rc_t rc, const VCursor* curs, Column* col) {
-    if (rc == 0) {
-        assert(col);
-
-        rc = VCursorAddColumn(curs, &col->idx, col->name);
-        DISP_RC2(rc, col->name, "while calling VCursorAddColumn");
-    }
-
-    return rc;
-}
-
-static rc_t CursorRead(rc_t rc, const VCursor* curs, int64_t row_id,
-    const Column* col, char* buffer, uint32_t blen, uint32_t expected,
-    uint32_t* row_len)
-{
-    if (rc == 0) {
-        assert(col);
-
-        if (blen == 0) {
-            assert(buffer == NULL);
-            ++blen;
-        }
-
-        rc = VCursorReadDirect
-            (curs, row_id, col->idx, 8, buffer, blen - 1, row_len);
-
-        if (rc != 0) {
-            if (buffer == NULL &&
-                rc == RC(rcVDB, rcCursor, rcReading, rcBuffer, rcInsufficient))
-            {
-                rc = 0;
-            }
-            else {
-                PLOGERR(klogInt, (klogInt, rc,
-                    "Error while calling VCursorReadDirect"
-                    "($(name), row_len=$(row_len))",
-                    "name=%s,row_len=%d", col->name, *row_len));
-            }
-        }
-        else {
-            if (expected > 0 && *row_len != expected) {
-                rc = RC(rcExe, rcCursor, rcReading, rcData, rcUnexpected);
-                PLOGERR(klogInt, (klogInt, rc,
-                    "$(name) row_len = $(row_len)",
-                    "name=%s,row_len=%d", col->name, row_len));
-            }
-            if (buffer != NULL)
-            {   buffer[*row_len] = '\0'; }
-        }
-    }
-
-    return rc;
-}
-
 static rc_t bam_header(const VDatabase* db) {
     rc_t rc = 0;
     const char path[] = "BAM_HEADER";
@@ -625,151 +315,141 @@ static rc_t qual_stats(const Params* prm, const VDatabase* db) {
     return rc;
 }
 
-static rc_t Valign_info(const VDatabase* db, BSTree* tr) {
-    rc_t rc = 0;
-    int64_t i = 0;
-    int64_t firstId = 0;
-    int64_t lastId = 0;
-    const char tblName[] = "REFERENCE";
-    Column CIRCULAR = { 0, "CIRCULAR" };
-    Column CMP_READ = { 0, "CMP_READ" };
-    Column NAME     = { 0, "NAME"     };
-    Column SEQ_ID   = { 0, "SEQ_ID"   };
-    const VCursor* curs = NULL;
-    const VTable* tbl = NULL;
-    if (db == NULL || tr == NULL)
-    {   return RC(rcExe, rcQuery, rcExecuting, rcParam, rcNull); }
-    if (rc == 0) {
-        rc = VDatabaseOpenTableRead(db, &tbl, tblName);
-        DISP_RC2(rc, tblName, "while calling VDatabaseOpenTableRead");
-    }
-    if (rc == 0) {
-        rc = VTableCreateCursorRead(tbl, &curs);
-        DISP_RC2(rc, tblName, "while calling VTableCreateCursorRead");
-    }
-    rc = AddColumn(rc, curs, &CIRCULAR);
-    rc = AddColumn(rc, curs, &CMP_READ);
-    rc = AddColumn(rc, curs, &NAME);
-    rc = AddColumn(rc, curs, &SEQ_ID);
-    if (rc == 0) {
-        rc = VCursorOpen(curs);
-        DISP_RC2(rc, tblName, "while calling VCursorOpen");
-    }
-    if (rc == 0) {
-        uint64_t count = 0;
-        rc = VCursorIdRange(curs, 0, &firstId, &count);
-        DISP_RC2(rc, tblName, "while calling VCursorIdRange");
-        lastId = firstId + count - 1;
-    }
-    for (i = firstId; i <= lastId && rc == 0; ++i) {
-        uint32_t row_len = 0;
-        uint32_t row_lenCMP_READ = 0;
-        char circular[8] = "";
-        char name[256] = "";
-        char seqId[256] = "";
-        rc = CursorRead(rc, curs, i, &CMP_READ, NULL, 0, 0, &row_lenCMP_READ);
-        rc = CursorRead(rc, curs, i, &CIRCULAR, circular, sizeof circular, 1,
-            &row_len);
-        rc = CursorRead(rc, curs, i, &SEQ_ID, seqId, sizeof seqId, 0, &row_len);
-        rc = CursorRead(rc, curs, i, &NAME, name, sizeof name, 0, &row_len);
-        if (rc == 0) {
-            RefNode* sn = NULL;
-            DBGMSG(DBG_APP, DBG_COND_1, ("SEQ_ID: %s\n", seqId));
-            sn = (RefNode*) BSTreeFind(tr, seqId, bstCmp);
-            if (sn == NULL) {
-                sn = calloc(1, sizeof(*sn));
-                if (sn == NULL) {
-                    rc = RC
-                        (rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
-                    break;
-                }
-                sn->seqId = strdup(seqId);
-                if (sn->seqId == NULL) {
-                    bstWhack((BSTNode*) sn, NULL);
-                    sn = NULL;
-                    rc = RC
-                        (rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
-                    break;
-                }
-                sn->name = strdup(name);
-                if (sn->name == NULL) {
-                    bstWhack((BSTNode*) sn, NULL);
-                    sn = NULL;
-                    rc = RC
-                        (rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
-                    break;
-                }
-                sn->circular = circular[0];
-                sn->row_lenCMP_READwas0 = (row_lenCMP_READ == 0);
-                BSTreeInsert(tr, (BSTNode*)sn, bstSort);
-            }
-            else {
-                if (row_lenCMP_READ == 0)
-                {   sn->row_lenCMP_READwas0 = true; }
-                if (strcmp(sn->name, name) || sn->circular != circular[0]) {
-                    rc = RC(rcExe, rcCursor, rcReading, rcData, rcInconsistent);
-                    PLOGERR(klogInt, (klogInt, rc,
-                        "while reading row $(row_id)", "row_id=%d", i));
-                }
-            }
-        }
-    }
-    DESTRUCT(VTable, tbl);
-    DESTRUCT(VCursor, curs);
-    return rc;
-}
-
 static rc_t align_info(const Params* prm) {
     rc_t rc = 0;
+
     const VDatabase* db = NULL;
     const VDBManager* mgr = NULL;
+    const KDBManager *kmgr = NULL;
     VSchema* schema = NULL;
+    bool is_db = false;
+
     if (prm == NULL)
     {   return RC(rcExe, rcQuery, rcExecuting, rcParam, rcNull); }
+
     if (rc == 0) {
         rc = VDBManagerMakeRead(&mgr, NULL);
         DISP_RC(rc, "while calling VDBManagerMakeRead");
     }
+
+    if (rc == 0) {
+        rc = VDBManagerOpenKDBManagerRead(mgr, &kmgr);
+        DISP_RC(rc, "while calling VDBManagerOpenKDBManagerRead");
+    }
+
     if (rc == 0) {
         rc = VDBManagerMakeSRASchema(mgr, &schema);
         DISP_RC(rc, "while calling VDBManagerMakeSRASchema");
     }
+
     if (rc == 0) {
 /*      const char path[] = "/panfs/pan1/trace_work/scratch/XXX000013"; */
         rc = VDBManagerOpenDBRead(mgr, &db, schema, prm->dbPath);
-        if (rc)
-	{   PLOGERR(klogErr,(klogErr, rc, "$(path)", "path=%s", prm->dbPath)); }
+        if (rc == 0) {
+            is_db = true;
+        }
+        else if (rc == SILENT_RC(rcDB, rcMgr, rcOpening, rcDatabase, rcIncorrect)) {
+            PLOGMSG(klogWarn, (klogWarn,
+                "'$(path)' is not a database", "path=%s", prm->dbPath));
+            rc = 0;
+        }
+        else {
+            PLOGERR(klogErr,
+                (klogErr, rc, "$(path)", "path=%s", prm->dbPath));
+        }
     }
-    if (rc == 0) {
-        if (prm->paramRef) {
-            BSTree tr;
-            BSTreeInit(&tr);
-            rc = Valign_info(db, &tr);
-            if (rc == 0) {
-                BSTreeForEach(&tr, false, bstPrint, NULL);
-                OUTMSG(("\n"));
+
+    if (is_db) {
+        if (rc == 0) {
+            if (prm->paramRef) {
+                const VDBDependencies* dep = NULL;
+                uint32_t count = 0;
+                int i = 0;
+                rc = VDatabaseListDependencies(db, &dep, false);
+                DISP_RC2(rc, prm->dbPath,
+                    "while calling VDatabaseListDependencies");
+                if (rc == 0) {
+                    rc = VDBDependenciesCount(dep, &count);
+                    DISP_RC2(rc, prm->dbPath,
+                        "while calling VDBDependenciesCount");
+                }
+                for (i = 0; i < count && rc == 0; ++i) {
+                    bool circular = false;
+                    const char* name = NULL;
+                    const char* path = NULL;
+                    const char* remote = NULL;
+                    bool local = false;
+                    const char* seqId = NULL;
+                    rc = VDBDependenciesCircular(dep, &circular, i);
+                    if (rc != 0) {
+                        DISP_RC2(rc, prm->dbPath,
+                            "while calling VDBDependenciesCircular");
+                        break;
+                    }
+                    rc = VDBDependenciesName(dep, &name, i);
+                    if (rc != 0) {
+                        DISP_RC2(rc, prm->dbPath,
+                            "while calling VDBDependenciesName");
+                        break;
+                    }
+                    rc = VDBDependenciesPath(dep, &path, i);
+                    if (rc != 0) {
+                        DISP_RC2(rc, prm->dbPath,
+                            "while calling VDBDependenciesPath");
+                        break;
+                    }
+                    rc = VDBDependenciesLocal(dep, &local, i);
+                    if (rc != 0) {
+                        DISP_RC2(rc, prm->dbPath,
+                            "while calling VDBDependenciesLocal");
+                        break;
+                    }
+                    rc = VDBDependenciesSeqId(dep, &seqId, i);
+                    if (rc != 0) {
+                        DISP_RC2(rc, prm->dbPath,
+                            "while calling VDBDependenciesSeqId");
+                        break;
+                    }
+                    rc = VDBDependenciesPathRemote(dep, &remote, i);
+                    if (rc != 0) {
+                        DISP_RC2(rc, prm->dbPath,
+                            "while calling VDBDependenciesRemote");
+                        break;
+                    }
+                    OUTMSG(("%s,%s,%s,%s", seqId, name,
+                        (circular ? "true" : "false"),
+                        (local ? "local" : "remote")));
+                    if (path && path[0]) {
+                        OUTMSG((":%s", path));
+                    }
+                    else if (remote && remote[0]) {
+                        OUTMSG(("::%s", remote));
+                    }
+                    OUTMSG(("\n"));
+                }
+                DESTRUCT(VDBDependencies, dep);
             }
-            BSTreeWhack(&tr, bstWhack, NULL);
-            {
-                rc_t rc2 = DestroyConfig();
-                if (rc2 != 0 && rc == 0)
-                {   rc = rc2; }
+
+            if (prm->paramBamHeader) {
+                rc_t rc3 = bam_header(db);
+                if (rc3 != 0 && rc == 0)
+                {   rc = rc3; }
+            }
+
+            if (prm->paramQuality) {
+                rc_t rc3 = qual_stats(prm, db);
+                if (rc3 != 0 && rc == 0)
+                {   rc = rc3; }
             }
         }
-        if (prm->paramBamHeader) {
-            rc_t rc3 = bam_header(db);
-            if (rc3 != 0 && rc == 0)
-            {   rc = rc3; }
-        }
-        if (prm->paramQuality) {
-            rc_t rc3 = qual_stats(prm, db);
-            if (rc3 != 0 && rc == 0)
-            {   rc = rc3; }
-        }
+
     }
+
     DESTRUCT(VSchema, schema);
+    DESTRUCT(KDBManager, kmgr);
     DESTRUCT(VDBManager, mgr);
     DESTRUCT(VDatabase, db);
+
     return rc;
 }
 
@@ -795,8 +475,9 @@ rc_t CC KMain(int argc, char* argv[]) {
             break;
         }
         if (pcount < 1) {
-            rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInsufficient);
             MiniUsage(args);
+            DESTRUCT(Args, args);
+            exit(1);
             break;
         }
         if (pcount > 1) {
diff --git a/tools/align-info/align-info.vers b/tools/align-info/align-info.vers
index 04b10b4..f90b1af 100644
--- a/tools/align-info/align-info.vers
+++ b/tools/align-info/align-info.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/align-info/align-info.vers.h b/tools/align-info/align-info.vers.h
deleted file mode 100644
index 76b6f33..0000000
--- a/tools/align-info/align-info.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define ALIGN_INFO_VERS 0x02010007
diff --git a/tools/bam-loader/Globals.h b/tools/bam-loader/Globals.h
new file mode 100644
index 0000000..50a0d9c
--- /dev/null
+++ b/tools/bam-loader/Globals.h
@@ -0,0 +1,90 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_GLOBALS_H_
+#define BAM_LOAD_GLOBALS_H_ 1
+
+enum LoaderModes {
+    mode_Archive,
+    mode_Analysis
+};
+
+typedef struct globals
+{
+    char const *inpath;
+    char const *outpath;
+    char const *tmpfs;
+    
+    struct KFile *noMatchLog;
+    
+    char const *schemaPath;
+    char const *schemaIncludePath;
+    
+    char const *refXRefPath;
+    
+    char const *QualQuantizer;
+    
+    char const *refFilter;
+
+    char const** refFiles; /* NULL-terminated array pointing to argv */
+    
+    char const *headerText;
+    
+    uint64_t maxAlignCount;
+    size_t cache_size;
+
+    unsigned errCount;
+    unsigned maxErrCount;
+    unsigned maxWarnCount_NoMatch;
+    unsigned maxWarnCount_DupConflict;
+    unsigned pid;
+    unsigned minMatchCount; /* minimum number of matches to count as an alignment */
+    int minMapQual;
+    enum LoaderModes mode;
+    uint32_t maxSeqLen;
+    bool omit_aligned_reads;
+    bool omit_reference_reads;
+    bool no_real_output;
+    bool expectUnsorted;
+    bool noVerifyReferences;
+    bool onlyVerifyReferences;
+    bool useQUAL;
+    bool limit2config;
+    bool editAlignedQual;
+    bool keepMismatchQual;
+    bool acceptBadDups; /* accept spots with inconsistent PCR duplicate flags */
+    bool acceptNoMatch; /* accept without any matching bases */
+    bool noSpotAssembly;
+    uint8_t alignedQualValue;
+    bool allUnaligned; /* treat all records as unaligned */
+    bool noColorSpace;
+    bool noSecondary;
+    bool hasTI;
+    bool acceptHardClip;
+} Globals;
+
+extern Globals G;
+#endif
diff --git a/tools/bam-loader/KFileHelper.c b/tools/bam-loader/KFileHelper.c
new file mode 100644
index 0000000..b9c65c0
--- /dev/null
+++ b/tools/bam-loader/KFileHelper.c
@@ -0,0 +1,142 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "KFileHelper.h"
+#include <string.h>
+
+rc_t BufferedKFileGets(KDataBuffer *buf, unsigned offset, unsigned *nread, BufferedKFile *strm) {
+    unsigned i;
+    unsigned n;
+    int ch;
+    rc_t rc;
+    
+    do {
+        if (strm->cur != strm->inbuf) {
+            ch = strm->buf[strm->cur];
+            
+            if (ch == '\r' || ch == '\n')
+                ++strm->cur;
+            else
+                break;
+        }
+        else {
+            size_t numread;
+            
+            rc = KFileRead(strm->kfp, strm->fpos, strm->buf, sizeof(strm->buf), &numread);
+            if (rc) return -1;
+            
+            strm->cur = 0;
+            strm->inbuf = numread;
+            strm->fpos += numread;
+            if (numread == 0) {
+                *nread = 0;
+                return 0;
+            }
+        }
+    } while (1);
+    
+    for (n = 0, i = offset; ; ++i, ++n) {
+        if (strm->cur != strm->inbuf) {
+            ch = strm->buf[strm->cur++];
+        }
+        else {
+            size_t numread;
+            
+            rc = KFileRead(strm->kfp, strm->fpos, strm->buf, sizeof(strm->buf), &numread);
+            if (rc) return rc;
+            
+            strm->cur = 0;
+            strm->inbuf = numread;
+            if (numread == 0) break;
+            strm->fpos += numread;
+            ch = strm->buf[strm->cur++];
+        }
+        if (ch == '\r' || ch == '\n') break;
+        if (i >= buf->elem_count) {
+            rc = KDataBufferResize(buf, buf->elem_count ? buf->elem_count * 2 : 1024);
+            if (rc) return rc;
+        }
+        ((char *)buf->base)[i] = ch;
+    }
+    *nread = n;
+    return 0;
+}
+
+rc_t BufferedKFileOpen(const KDirectory *directory, BufferedKFile *rslt, const char *fileName, ...) {
+    va_list va;
+    rc_t rc;
+
+    memset(rslt, 0, sizeof(rslt) - sizeof(rslt->buf));
+
+    va_start(va, fileName);
+    rc = KDirectoryVOpenFileRead(directory, &rslt->kfp, fileName, va);
+    va_end(va);
+    
+    return rc;
+}
+
+rc_t BufferedKFileClose(BufferedKFile *strm) {
+    return KFileRelease(strm->kfp);
+}
+
+rc_t LoadFile(KDataBuffer *dst, uint64_t *lineCount, const KDirectory *dir, const char *fileName, ...) {
+    BufferedKFile strm;
+    rc_t rc;
+    unsigned line = 0;
+
+    memset(&strm, 0, sizeof(strm) - sizeof(strm.buf));
+    {
+        va_list va;
+
+        va_start(va, fileName);
+        rc = KDirectoryVOpenFileRead(dir, &strm.kfp, fileName, va);
+        va_end(va);
+    }
+    if (rc == 0) {
+        unsigned offset = 0;
+        unsigned i;
+        
+        while ((rc = BufferedKFileGets(dst, offset, &i, &strm)) == 0 && i) {
+            offset += i;
+            if (offset + 1 >= dst->elem_count) {
+                rc = KDataBufferResize(dst, offset + 1);
+                if (rc)
+                    break;
+            }
+            ((char *)dst->base)[offset++] = '\0';
+            ++line;
+        }
+        BufferedKFileClose(&strm);
+        if (rc == 0)
+            rc = KDataBufferResize(dst, offset);
+    }
+    if (rc != 0) {
+        KDataBufferResize(dst, 0);
+        line = 0;
+    }
+    if (lineCount) *lineCount = line;
+    return rc;
+}
diff --git a/tools/bam-loader/KFileHelper.h b/tools/bam-loader/KFileHelper.h
new file mode 100644
index 0000000..4551952
--- /dev/null
+++ b/tools/bam-loader/KFileHelper.h
@@ -0,0 +1,48 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_KFILEHELPER_H_
+#define BAM_LOAD_KFILEHELPER_H_ 1
+#include <klib/data-buffer.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+
+typedef struct BufferedKFile BufferedKFile;
+
+#define KFILE_BUF_SIZE (4096)
+struct BufferedKFile {
+    uint64_t fpos;
+    const KFile *kfp;
+    unsigned inbuf;
+    unsigned cur;
+    char buf[KFILE_BUF_SIZE];
+};
+
+rc_t BufferedKFileGets(KDataBuffer *buf, unsigned offset, unsigned *nread, BufferedKFile *strm);
+rc_t BufferedKFileOpen(const KDirectory *directory, BufferedKFile *rslt, const char *fileName, ...);
+rc_t BufferedKFileClose(BufferedKFile *strm);
+rc_t LoadFile(KDataBuffer *dst, uint64_t *lineCount, const KDirectory *dir, const char *fileName, ...);
+#endif
diff --git a/tools/bam-loader/KVPFile.c b/tools/bam-loader/KVPFile.c
new file mode 100644
index 0000000..c9d60cd
--- /dev/null
+++ b/tools/bam-loader/KVPFile.c
@@ -0,0 +1,355 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "KVPFile.h"
+
+#include <kfs/file.h>
+#include <klib/rc.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#define USE_KDB_BTREE 1
+
+#if USE_KDB_BTREE
+#include <kdb/btree.h>
+#else
+#include "hashtable.h"
+
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#endif
+
+
+
+#if USE_KDB_BTREE
+
+/* going to make an index with:                                                                        
+ *  a) backing file                                                                                     
+ *  b) page size is fixed at 32K, otherwise the page size would have to be stored somewhere             
+ *  c) page cache - need cache limit in bytes                                                           
+ *  d) 2 chunked value streams - need key chunking and value chunking                                   
+ *  e) B-Tree-ish index, requiring a comparison function. this interface uses opaque keys.              
+ *     the "matched-count" parameter is useful for trie traversal, but this will be built-in            
+ */
+rc_t KVPFileMake ( KVPFile **rslt, KFile *file, size_t climit,
+    size_t kchunk_size, size_t vchunk_size,
+    size_t min_ksize, size_t max_ksize, size_t min_vsize, size_t max_vsize,
+    KVPFileCompareFunc cmp )
+{
+    return KBTreeMakeUpdate ( ( KBTree** ) rslt, file, climit, false, kbtOpaqueKey,
+        kchunk_size, vchunk_size, min_ksize, max_ksize, min_vsize, max_vsize, cmp );
+}
+
+
+/* this whacker works fine
+ */
+rc_t KVPFileWhack ( KVPFile *xself, bool commit )
+{
+    KBTree *self = ( KBTree* ) xself;
+
+    rc_t rc = 0;
+
+    if ( self != NULL )
+    {
+        /* drop the backing file unless commiting */
+        if ( ! commit )
+            rc = KBTreeDropBacking ( self );
+
+        /* drop the b-tree */
+        rc = KBTreeRelease ( self );
+    }
+
+    return rc;
+}
+
+
+/* whacker */
+void KVPValueWhack ( KVPValue *self )
+{
+    KBTreeValueWhack ( self );
+}
+
+/* return the pointer to thingie */
+rc_t KVPValueAccessRead ( const KVPValue *self, const void **mem, size_t *bytes )
+{
+    return KBTreeValueAccessRead ( self, mem, bytes );
+}
+
+rc_t KVPValueAccessUpdate ( KVPValue *self, void **mem, size_t *bytes )
+{
+    return KBTreeValueAccessUpdate ( self, mem, bytes );
+}
+
+
+/* find will not modify the index in any way
+ *  returns a pointer into a page, meaning that the values cannot exceed 32K in size
+ *  this is done
+ */
+rc_t KVPFileFind ( const KVPFile *self, KVPValue *val, const void *key, size_t ksize )
+{
+    return KBTreeFind ( ( const KBTree* ) self, val, key, ksize );
+}
+
+
+
+/* find or insert will return an existing or create a new entry
+ * note that the new entry is initially zeroed
+ */
+rc_t KVPFileFindOrInsert ( KVPFile *self, KVPValue *val,
+                          bool *was_inserted, size_t alloc_size,
+                          const void *key, size_t ksize )
+{
+    return KBTreeEntry ( ( KBTree* ) self, val, was_inserted, alloc_size, key, ksize );
+}
+
+rc_t KVPFileForEach ( const KVPFile *self,
+                      void ( CC * f )( const void *key, size_t ksize, KVPValue *val, void *ctx ),
+                      void *ctx )
+{
+    return KBTreeForEach((KBTree *)self, 0, f, ctx);
+}
+
+
+#else
+typedef struct KTempMMap {
+    void *base;
+    size_t sz;
+    int fd;
+    unsigned elemsize;
+    unsigned fileNo;
+} KTempMMap;
+
+static rc_t KTempMMapMake(KTempMMap *rslt, size_t initSize, size_t elemSize)
+{
+    char fname[4096];
+    
+    memset(rslt, 0, sizeof(*rslt));
+    rslt->elemsize = elemSize;
+    
+    sprintf(fname, "/tmp/kvp.%u.XXXXXX", getpid());
+    rslt->fd = mkstemp(fname);
+    if (rslt->fd < 0) {
+        perror(fname);
+        return RC(rcApp, rcFile, rcCreating, rcFile, rcUnknown);
+    }    
+    unlink(fname);
+
+    if (ftruncate(rslt->fd, initSize * elemSize) != 0)
+        return RC(rcApp, rcFile, rcResizing, rcFile, rcUnknown);
+    
+    rslt->sz = initSize;
+    
+    rslt->base = mmap(0, initSize * elemSize, PROT_READ | PROT_WRITE, MAP_SHARED, rslt->fd, 0);
+    if (rslt->base == MAP_FAILED)
+        return RC(rcApp, rcMemMap, rcCreating, rcMemory, rcInsufficient);
+    
+    return 0;
+}
+
+static rc_t KTempMMapWhack(KTempMMap *self)
+{
+    close(self->fd);
+    madvise(self->base, self->sz, MADV_DONTNEED);
+    munmap(self->base, self->sz);
+    return 0;
+}
+
+static void *KTempMMapPointer(KTempMMap *self, size_t offset, size_t count)
+{
+    void *temp;
+    size_t newsz;
+    
+    if (offset + count <= self->sz)
+        return &((uint8_t *)self->base)[offset * self->elemsize];
+
+    newsz = self->sz;
+    while (newsz < offset + count)
+        newsz <<= 1;
+    
+    if (ftruncate(self->fd, newsz * self->elemsize) != 0)
+        return NULL;
+
+    temp = mmap(0, newsz * self->elemsize, PROT_READ | PROT_WRITE, MAP_SHARED, self->fd, 0);
+    if (temp == MAP_FAILED)
+        return NULL;
+    
+    munmap(self->base, self->sz);
+    self->base = temp;
+    self->sz = newsz;
+    
+    return &((uint8_t *)self->base)[offset * self->elemsize];
+}
+
+typedef struct key_t {
+    uint8_t len;
+    char key[255];
+} my_key_t;
+
+struct KVPFile {
+    HashTable *ht;
+    size_t next_obj;
+    KTempMMap keys;
+    KTempMMap values;
+};
+
+typedef struct KVPValueImpl KVPValueImpl;
+struct KVPValueImpl
+{
+    KVPFile * file;
+    size_t offset;
+    size_t size;
+};
+
+static int KeyComp(const void *id, const void *key, uint32_t len, void *ctx)
+{
+    KVPFile *self = ctx;
+    const my_key_t *test = KTempMMapPointer(&self->keys, (intptr_t)id, 1);
+    int r = memcmp(test->key, key, test->len < len ? test->len : len);
+    if (r == 0)
+        r = test->len - len;
+    return r;
+}
+
+rc_t KVPFileMake(KVPFile **rslt,
+                 KFile *file,
+                 size_t climit,
+                 size_t kchunk_size, size_t vchunk_size,
+                 size_t min_ksize, size_t max_ksize,
+                 size_t min_vsize, size_t max_vsize,
+                 KVPFileCompareFunc cmp
+                 )
+{
+    rc_t rc;
+    KVPFile *self = calloc(1, sizeof(*self));
+    
+    if (self == NULL)
+        return RC(rcApp, rcMemMap, rcAllocating, rcMemory, rcExhausted);
+    
+    rc = KTempMMapMake(&self->keys, 256, sizeof(my_key_t));
+    if (rc == 0) {
+        rc = KTempMMapMake(&self->values, 256, max_vsize);
+        if (rc == 0) {
+            rc = HashTableMake(&self->ht, 256, KeyComp, self);
+            if (rc == 0) {
+                *rslt = self;
+                return 0;
+            }
+            KTempMMapWhack(&self->values);
+        }
+        KTempMMapWhack(&self->keys);
+    }
+    free(self);
+    return rc;
+}
+
+rc_t KVPFileWhack(KVPFile *self, bool commit)
+{
+    if (self) {
+        KTempMMapWhack(&self->values);
+        KTempMMapWhack(&self->keys);
+        HashTableWhack(self->ht, 0, 0);
+        free(self);
+    }
+    return 0;
+}
+
+rc_t KVPFileFind(const KVPFile *self, KVPValue *xval, const void *key, size_t ksize)
+{
+    KVPValueImpl *val = ( KVPValueImpl* ) xval;
+    const HashTableIterator iter = HashTableLookup(self->ht, key, ksize);
+    if (HashTableIteratorHasValue(&iter)) {
+        val->file = (void *)self;
+        val->offset = (intptr_t)HashTableIteratorGetValue(&iter);
+        val->size = 1;
+        return 0;
+    }
+    return RC(rcApp, rcMemMap, rcReading, rcId, rcNotFound);
+}
+
+rc_t KVPFileFindOrInsert(KVPFile *self, KVPValue *xval,
+                         bool *was_inserted, size_t alloc_size,
+                         const void *key, size_t ksize
+                         )
+{
+    KVPValueImpl *val = ( KVPValueImpl* ) xval;
+    HashTableIterator iter = HashTableLookup(self->ht, key, ksize);
+    
+    if (HashTableIteratorHasValue(&iter)) {
+        val->file = (void *)self;
+        val->offset = (intptr_t)HashTableIteratorGetValue(&iter);
+        val->size = 1;
+        *was_inserted = false;
+        return 0;
+    }
+    else {
+        size_t new_id = self->next_obj++;
+        my_key_t *new_key = KTempMMapPointer(&self->keys, new_id, 1);
+        
+        new_key->len = ksize;
+        memcpy(new_key->key, key, ksize);
+        
+        *was_inserted = true;
+        val->file = (void *)self;
+        val->offset = new_id;
+        val->size = 1;
+        HashTableIteratorSetValue(&iter, (void *)(val->offset));
+    }
+    return 0;
+}
+
+static rc_t KVPValueAccess(const KVPValueImpl *value, void **mem, size_t *bytes)
+{
+    KVPFile *self = value->file;
+    void *temp = KTempMMapPointer(&self->values, value->offset, value->size);
+    
+    if (temp != NULL) {
+        *bytes = self->values.elemsize * value->size;
+        *mem = temp;
+        return 0;
+    }
+    *bytes = 0;
+    *mem = NULL;
+    return RC(rcApp, rcMemMap, rcReading, rcMemory, rcNotFound);
+}
+
+rc_t KVPValueAccessRead(const KVPValue *self, const void **mem, size_t *bytes)
+{
+    return KVPValueAccess((const KVPValueImpl*)self, (void **)mem, bytes);
+}
+
+rc_t KVPValueAccessUpdate(KVPValue *self, void **mem, size_t *bytes)
+{
+    return KVPValueAccess((KVPValueImpl*)self, mem, bytes);
+}
+
+void KVPValueWhack(KVPValue *self)
+{
+}
+
+#endif /* USE_KDB_BTREE */
diff --git a/tools/bam-loader/KVPFile.h b/tools/bam-loader/KVPFile.h
new file mode 100644
index 0000000..01de157
--- /dev/null
+++ b/tools/bam-loader/KVPFile.h
@@ -0,0 +1,164 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_KVPFile_
+#define _h_KVPFile_
+
+#ifndef _h_kdb_btree_
+#include <kdb/btree.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* this can be made to work as we go forward
+ */
+typedef struct KVPFile KVPFile;
+
+
+/* generic comparison function
+ *  size_t indicates bytes
+ */
+typedef KBTreeCompareFunc KVPFileCompareFunc;
+
+
+/* going to make an index with:                                                                        
+ *  a) backing file                                                                                     
+ *  b) page size is fixed at 32K, otherwise the page size would have to be stored somewhere             
+ *  c) page cache - need cache limit in bytes                                                           
+ *  d) 2 chunked value streams - need key chunking and value chunking                                   
+ *  e) B-Tree-ish index, requiring a comparison function. this interface uses opaque keys.              
+ *     the "matched-count" parameter is useful for trie traversal, but this will be built-in            
+ *                                                                                                      
+ *  "rslt" [ OUT ] - return of Ken's object                                                             
+ *                                                                                                      
+ *  "file" [ IN ] - open file with read/write permissions.                                              
+ *   NB - a reference will be attached to this file, so you still own it                                
+ *                                                                                                      
+ *  "climit" [ IN ] - cache limit in bytes. the internal page cache will                                
+ *   retain UP TO ( but not exceeding ) the limit specified. for 32K pages,                             
+ *   this means than the byte values 0..0x7FFF will result in NO CACHE.                                 
+ *   internally, this limit is converted to a page count by simple division,                            
+ *   i.e. cpage-limit = climit / PGSIZE.                                                                
+ *                                                                                                      
+ *  "kchunk_size" [ IN ] and "vchunk_size" [ IN ] - the "chunking" ( alignment )                        
+ *   factor for storing keys and values, respectively. rounded up to the nearest                        
+ *   power of 2 that will hold the bytes specified.                                                     
+ *                                                                                                      
+ *  "min_ksize" [ IN ] and "max_ksize" [ IN ] - specifies the allowed key sizes. if                     
+ *   unknown, a min of 1 and a max of ~ ( size_t ) 0 will allow for any size. if fixed,                 
+ *   min_ksize == max_ksize will indicate this, and the size will be used exactly as                    
+ *   chunking factor ( see "kchunk_size" above ).                                                       
+ *                                                                                                      
+ *  "min_vsize" [ IN ] and "max_vsize" [ IN ] - specifies allowed value sizes. see above.               
+ *                                                                                                      
+ *  "cmp" [ IN ] - comparison callback function for opaque keys. later, we'll want to                   
+ *   make use of key type knowledge to improve traversal ( callbacks are expensive ), but               
+ *   for now, we can treat them as opaque.                                                              
+ */
+rc_t KVPFileMake ( KVPFile **rslt, struct KFile *file, size_t climit,
+                  size_t kchunk_size, size_t vchunk_size,
+                  size_t min_ksize, size_t max_ksize, size_t min_vsize, size_t max_vsize,
+                  KVPFileCompareFunc cmp );
+
+
+
+/* this whacker works fine
+ *
+ * "commit" [ IN ] - if false, tells the underlying pagefile
+ *  to forget its backing before whacking the cache.
+ */
+rc_t KVPFileWhack ( KVPFile *self, bool commit );
+
+
+/* results point directly into pages, and thus require a reference
+ * I'm going to invent a structure to use and some functions - the
+ * structure itself may change, but we should be able to make it work
+ *
+ * it will be an defined structure, although it may be defined simply as
+ * an array of 3 size_t to make it opaque. if it were made an allocation,
+ * then we'd have to have a special allocator in order to keep the noise
+ * down. maybe that's the way to go, but it means more code. for now,...
+ */
+typedef struct KBTreeValue KVPValue;
+
+
+/* whacker */
+void KVPValueWhack ( KVPValue *self );
+
+/* return the pointer to thingie */
+rc_t KVPValueAccessRead ( const KVPValue *self, const void **mem, size_t *bytes );
+rc_t KVPValueAccessUpdate ( KVPValue *self, void **mem, size_t *bytes );
+
+
+/* find will not modify the index in any way
+ *  returns a pointer into a page, meaning that the values cannot exceed 32K in size
+ *  this is done
+ *
+ *  "val" [ OUT ] - pointer to an uninitialized block that will contain
+ *   information on how to access data within a page. note that the value
+ *   is "live", and if accessed for update will cause the page to be modified.
+ *   it is not clear whether this is desired or side-effect behavior, so I'm
+ *   leaving it alone for now.
+ *
+ *  "key" [ IN ] and "ksize" [ IN ] - opaque key description
+ */
+rc_t KVPFileFind ( const KVPFile *self, KVPValue *val, const void *key, size_t ksize );
+
+
+
+/* find or insert will return an existing or create a new entry
+ * note that the new entry is initially zeroed
+ *
+ *  "val" [ OUT ] - pointer to uninitialized block that will contain value data.
+ *   since the intention is to modify the value, access to val will most certainly
+ *   be via "KVPValueAccessUpdate" which will dirty the page regardless.
+ *
+ *  "was_inserted" [ OUT ] - if true, the returned value was the result of an
+ *   insertion and can be guaranteed to be all 0 bits. otherwise, the returned
+ *   value will be whatever was there previously.
+ *
+ *  "alloc_size" [ IN ] - the number of value bytes to allocate upon insertion,
+ *   i.e. if the key was not found. this value must agree with the limits specified
+ *   in Make.
+ *
+ *  "key" [ IN ] and "ksize" [ IN ] - opaque key description
+ */
+rc_t KVPFileFindOrInsert ( KVPFile *self, KVPValue *val,
+                          bool *was_inserted, size_t alloc_size,
+                          const void *key, size_t ksize );
+
+rc_t KVPFileForEach ( const KVPFile *self,
+    void ( CC * f )( const void *key, size_t ksize, KVPValue *val, void *ctx ),
+    void *ctx);
+    
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_KVPFile_ */
diff --git a/tools/bam-loader/Makefile b/tools/bam-loader/Makefile
new file mode 100644
index 0000000..eb098de
--- /dev/null
+++ b/tools/bam-loader/Makefile
@@ -0,0 +1,136 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/bam-loader
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	bam-load
+
+TEST_TOOLS = \
+	wb-test-bam-loader    
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+RUNTESTS_OVERRIDE=1
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+ifeq (win,$(OS))
+all std:
+	@ echo "not building bam-load under Windows"
+else
+all std: vers-includes
+	@ $(MAKE_CMD) $(TARGDIR)/std
+endif
+
+$(ALL_TOOLS): vers-includes
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+$(TEST_TOOLS): makedirs
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS) $(TEST_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: \
+	$(addsuffix _tag,$(ALL_TOOLS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+
+
+#-------------------------------------------------------------------------------
+# bam-load.2.*
+#
+BAMLOAD_SRC = \
+	bam-loader \
+	alignment-writer \
+	reference-writer \
+	sequence-writer \
+	loader-imp
+
+BAMLOAD_OBJ = \
+	$(addsuffix .$(OBJX),$(BAMLOAD_SRC))
+
+BAMLOAD_LIB = \
+	-lkapp \
+	-dwaxf \
+	-dwsraxf \
+	-dwvxf \
+	-lload \
+	-lncbi-bam \
+	-lalign-writer \
+	-lwvdb \
+	-lwkdb \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
+	-lkfg \
+	-lkfs \
+	-lksrch \
+	-lkproc \
+	-lkq \
+	-lklib \
+	-lm \
+	-lz
+
+$(BINDIR)/bam-load: $(BAMLOAD_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(BAMLOAD_LIB)
+
+bam-load_tag:
+	@ $(TOP)/build/tag-module.sh $(MODULE) bam-load $(BAMLOAD_OBJ)
diff --git a/tools/bam-loader/alignment-writer.c b/tools/bam-loader/alignment-writer.c
new file mode 100644
index 0000000..fe84dc8
--- /dev/null
+++ b/tools/bam-loader/alignment-writer.c
@@ -0,0 +1,176 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <sysalloc.h>
+#include <klib/out.h>
+
+#include <vdb/vdb-priv.h>
+
+#include "alignment-writer.h"
+#include "Globals.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+enum e_tables {
+    tblPrimary,
+    tblSecondary,
+    tblN
+};
+
+struct s_alignment {
+    VDatabase *db;
+    TableWriterAlgn const *tbl[tblN];
+    int64_t rowId;
+    int st;
+};
+
+Alignment *AlignmentMake(VDatabase *db) {
+    Alignment *self = calloc(1, sizeof(*self));
+    
+    if (self) {
+        self->db = db;
+        VDatabaseAddRef(self->db);
+    }
+    return self;
+}
+
+static rc_t SetColumnDefaults(TableWriterAlgn const *tbl)
+{
+    return 0;
+}
+
+static rc_t WritePrimaryRecord(Alignment *const self, AlignmentRecord *const data)
+{
+    if (self->tbl[tblPrimary] == NULL) {
+        rc_t rc = TableWriterAlgn_Make(&self->tbl[tblPrimary], self->db,
+                                       ewalgn_tabletype_PrimaryAlignment,
+                                       ewalgn_co_TMP_KEY_ID + 
+                                       (G.expectUnsorted ? ewalgn_co_unsorted : 0));
+        if (rc)
+            return rc;
+        rc = SetColumnDefaults(self->tbl[tblPrimary]);
+        if (rc)
+            return rc;
+    }
+    return TableWriterAlgn_Write(self->tbl[tblPrimary], &data->data, &data->alignId);
+}
+
+static rc_t WriteSecondaryRecord(Alignment *const self, AlignmentRecord *const data)
+{
+    if (self->tbl[tblSecondary] == NULL) {
+        rc_t rc = TableWriterAlgn_Make(&self->tbl[tblSecondary], self->db,
+                                       ewalgn_tabletype_SecondaryAlignment,
+                                       ewalgn_co_TMP_KEY_ID + 
+                                       (G.expectUnsorted ? ewalgn_co_unsorted : 0));
+        if (rc)
+            return rc;
+        rc = SetColumnDefaults(self->tbl[tblSecondary]);
+        if (rc)
+            return rc;
+    }
+#if 1
+    /* try to make consistent with cg-load */
+    if (data->mate_ref_pos == 0) {
+        data->data.mate_ref_orientation.elements = 0;
+    }
+#endif
+    return TableWriterAlgn_Write(self->tbl[tblSecondary], &data->data, &data->alignId);
+}
+
+rc_t AlignmentWriteRecord(Alignment *const self, AlignmentRecord *const data)
+{
+    return data->isPrimary ? WritePrimaryRecord(self, data) : WriteSecondaryRecord(self, data);
+}
+
+rc_t AlignmentStartUpdatingSpotIds(Alignment *const self)
+{
+    return 0;
+}
+
+rc_t AlignmentGetSpotKey(Alignment *const self, uint64_t * keyId)
+{
+    rc_t rc;
+    
+    switch (self->st) {
+    case 0:
+        rc = TableWriterAlgn_TmpKeyStart(self->tbl[tblPrimary]);
+        if (rc)
+            break;
+        self->rowId = 0;
+        ++self->st;
+    case 1:
+        rc = TableWriterAlgn_TmpKey(self->tbl[tblPrimary], ++self->rowId, keyId);
+        if (rc == 0)
+            break;
+        ++self->st;
+        if (GetRCState(rc) != rcNotFound || GetRCObject(rc) != rcRow || self->tbl[tblSecondary] == NULL)
+            break;
+    case 2:
+        rc = TableWriterAlgn_TmpKeyStart(self->tbl[tblSecondary]);
+        if (rc)
+            break;
+        self->rowId = 0;
+        ++self->st;
+    case 3:
+        rc = TableWriterAlgn_TmpKey(self->tbl[tblSecondary], ++self->rowId, keyId);
+        if (rc == 0)
+            break;
+        if (GetRCState(rc) != rcNotFound || GetRCObject(rc) != rcRow)
+            break;
+        ++self->st;
+        break;
+    default:
+        rc = RC(rcAlign, rcTable, rcUpdating, rcError, rcIgnored);
+        break;
+    }
+    return rc;
+}
+
+rc_t AlignmentWriteSpotId(Alignment * const self, int64_t const spotId)
+{
+    switch (self->st) {
+    case 1:
+        return TableWriterAlgn_Write_SpotId(self->tbl[tblPrimary], self->rowId, spotId);
+    case 3:
+        return TableWriterAlgn_Write_SpotId(self->tbl[tblSecondary], self->rowId, spotId);
+    default:
+        return RC(rcAlign, rcTable, rcUpdating, rcSelf, rcInconsistent);
+    }
+}
+
+rc_t AlignmentWhack(Alignment * const self, bool const commit) 
+{
+    rc_t const rc = TableWriterAlgn_Whack(self->tbl[tblPrimary], commit, NULL);
+    rc_t const rc2 = self->tbl[tblSecondary] ? TableWriterAlgn_Whack(self->tbl[tblSecondary], commit | (rc == 0), NULL) : 0;
+
+    VDatabaseRelease(self->db);
+    free(self);
+    return rc ? rc : rc2;
+}
diff --git a/tools/bam-loader/alignment-writer.h b/tools/bam-loader/alignment-writer.h
new file mode 100644
index 0000000..bd8dfed
--- /dev/null
+++ b/tools/bam-loader/alignment-writer.h
@@ -0,0 +1,95 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_ALIGNMENT_WRITER_H_
+#define BAM_LOAD_ALIGNMENT_WRITER_H_ 1
+
+#include <klib/text.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <insdc/insdc.h>
+
+#include <align/writer-alignment.h>
+
+typedef struct s_alignment Alignment;
+typedef struct AlignmentRecord AlignmentRecord;
+
+struct AlignmentRecord {
+    TableWriterAlgnData data;
+    int64_t alignId;
+    bool isPrimary;
+
+    INSDC_coord_one read_id;
+    int64_t ref_id;
+    INSDC_coord_zero ref_start;
+    uint64_t global_ref_start;
+    bool ref_orientation;
+    uint32_t mapq;
+    uint64_t tmp_key_id;
+
+    INSDC_coord_zero read_start;
+    INSDC_coord_len read_len;
+
+    bool mate_ref_orientation;
+    int64_t mate_ref_id;
+    INSDC_coord_zero mate_ref_pos;
+    int64_t mate_align_id;
+    int32_t template_len;
+};
+
+#define AR_REF_ID(X) ((X).ref_id)
+#define AR_REF_START(X) ((X).global_ref_start)
+#define AR_REF_LEN(X) ((X).ref_len)
+#define AR_REF_ORIENT(X) ((X).ref_orientation)
+#define AR_READNO(X) ((X).read_id)
+#define AR_MAPQ(X) ((X).mapq)
+#define AR_KEY(X) ((X).tmp_key_id)
+
+#define AR_BASECOUNT(X) ((X).data.has_mismatch.elements)
+#define AR_HAS_MISMATCH(X) ((bool *)((X).data.has_mismatch.buffer))
+#define AR_HAS_OFFSET(X) ((bool *)((X).data.has_ref_offset.buffer))
+
+#define AR_NUM_MISMATCH(X) ((X).data.mismatch.elements)
+#define AR_MISMATCH(X) ((char *)((X).data.mismatch.buffer))
+
+#define AR_NUM_OFFSET(X) ((X).data.ref_offset.elements)
+#define AR_OFFSET(X) ((INSDC_coord_zero *)((X).data.ref_offset.buffer))
+
+Alignment *AlignmentMake(VDatabase *db);
+
+rc_t AlignmentWriteRecord(Alignment *self, AlignmentRecord *data);
+
+rc_t AlignmentStartUpdatingSpotIds(Alignment *self);
+
+rc_t AlignmentGetSpotKey(Alignment *self, uint64_t *keyId);
+
+rc_t AlignmentWriteSpotId(Alignment *self, int64_t spotId);
+
+rc_t AlignmentWhack(Alignment *self, bool commit);
+
+#endif
diff --git a/tools/bam-loader/analysis.c b/tools/bam-loader/analysis.c
new file mode 100644
index 0000000..cccc329
--- /dev/null
+++ b/tools/bam-loader/analysis.c
@@ -0,0 +1,157 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+#include <klib/data-buffer.h>
+#include <klib/sort.h>
+
+#include "KFileHelper.h"
+#include "analysis.h"
+#include "Globals.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+static rc_t ParseAnalysis(Analysis *rslt, unsigned lines, char *src) {
+    unsigned i;
+    
+    rslt->N = lines;
+    memset(&rslt->line[0], 0, lines * sizeof(rslt->line[0]));
+    
+    for (i = 0; i != lines; ++i) {
+        char *endp;
+        char *tab;
+        
+        endp = strchr(src, 0);
+        assert(endp);
+        
+        rslt->line[i].name = src;
+        tab = strchr(src, '\t');
+        if (!tab) break;
+        src = tab + 1;
+        tab[0] = '\0';
+        
+        rslt->line[i].refID = src;
+        tab = strchr(src, '\t');
+        if (!tab) break;
+        src = tab + 1;
+        tab[0] = '\0';
+        
+        tab = strchr(src, '\t');
+        if (!tab) break;
+        src = tab + 1;
+        
+        rslt->line[i].bamFile = src;
+        tab = strchr(src, '\t');
+        if (!tab) break;
+        src = tab + 1;
+        tab[0] = '\0';
+        
+        rslt->line[i].asoFile = src;
+        tab = strchr(src, '\t');
+        if (!tab) break;
+        tab[0] = '\0';
+        
+        src = endp + 1;
+    }
+    for (i = 0; i != lines; ++i) {
+        if (rslt->line[i].name == NULL ||
+            rslt->line[i].refID == NULL ||
+            rslt->line[i].bamFile == NULL ||
+            rslt->line[i].asoFile == NULL
+            )
+        {
+            return RC(rcApp, rcFile, rcReading, rcData, rcCorrupt);
+        }
+    }
+    return 0;
+}
+
+static int CC CompAnalysisLineBamFile(const void *A, const void *B, void *ignore) {
+    const AnalysisLine *a = A;
+    const AnalysisLine *b = B;
+    int rslt = strcmp(a->bamFile, b->bamFile);
+    
+    if (rslt == 0)
+        rslt = strcmp(a->name, b->name);
+    return rslt;
+}
+
+const char *AnalysisNextBAMFile(const char *last) {
+    unsigned i;
+    if (last == NULL) {
+        return G.analysis->line[0].bamFile;
+    }
+    for (i = 1; i < G.analysis->N; ++i) {
+        if (strcmp(last, G.analysis->line[i].bamFile) > 0) {
+            return G.analysis->line[i].bamFile;
+        }
+    }
+    return NULL;
+}
+
+AnalysisLine *AnalysisMatch(const char *bamFile, const char *name) {
+    unsigned i;
+    
+    for (i = 0; i != G.analysis->N; ++i) {
+        if (strcmp(bamFile, G.analysis->line[i].bamFile) == 0 &&
+            strcmp(name, G.analysis->line[i].name) == 0
+            )
+        {
+            return &G.analysis->line[i];
+        }
+    }
+    return NULL;
+}
+
+rc_t LoadAnalysis(const char *fileName) {
+    rc_t rc;
+    KDataBuffer buf;
+    uint64_t lines;
+    
+    memset(&buf, 0, sizeof(buf));
+    buf.elem_bits = 8;
+    
+    rc = LoadFile(&buf, &lines, G.inDir, fileName);
+    if (rc == 0) {
+        if (lines > 0 && buf.elem_count > 0) {
+            G.analysis = malloc(sizeof(*G.analysis) + (lines - 1) * sizeof(G.analysis->line[0]) + buf.elem_count);
+            if (G.analysis)
+                memcpy(&G.analysis->line[lines], buf.base, buf.elem_count);
+            else
+                rc = RC(rcApp, rcFile, rcReading, rcMemory, rcExhausted);
+        }
+        else
+            rc = RC(rcApp, rcFile, rcReading, rcData, rcEmpty);
+    }
+    KDataBufferWhack(&buf);
+    if (rc == 0) {
+        rc = ParseAnalysis(G.analysis, lines, (char *)&G.analysis->line[lines]);
+    }
+    return rc;
+}
+
diff --git a/tools/bam-loader/analysis.h b/tools/bam-loader/analysis.h
new file mode 100644
index 0000000..766a652
--- /dev/null
+++ b/tools/bam-loader/analysis.h
@@ -0,0 +1,49 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_ANALYSIS_H_
+#define BAM_LOAD_ANALYSIS_H_ 1
+#include <klib/rc.h>
+
+typedef struct s_analysis_line {
+    const char *name;
+    const char *refID;
+    const char *bamFile;
+    const char *asoFile;
+    uint64_t    startPos;
+} AnalysisLine;
+
+typedef struct s_analysis {
+    unsigned N;
+    AnalysisLine line[1];
+} Analysis;
+
+const char *AnalysisNextBAMFile(const char *last);
+
+AnalysisLine *AnalysisMatch(const char *bamFile, const char *name);
+
+rc_t LoadAnalysis(const char *fileName);
+#endif
diff --git a/tools/bam-loader/bam-load.vers b/tools/bam-loader/bam-load.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/bam-loader/bam-load.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/bam-loader/bam-loader.c b/tools/bam-loader/bam-loader.c
new file mode 100644
index 0000000..3d4ab92
--- /dev/null
+++ b/tools/bam-loader/bam-loader.c
@@ -0,0 +1,987 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "bam-load.vers.h"
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kapp/log-xml.h>
+#include <align/writer-refseq.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+#include <limits.h>
+
+#include "Globals.h"
+#include "loader-imp.h"
+
+/* MARK: Arguments and Usage */
+static char const option_input[] = "input";
+static char const option_output[] = "output";
+static char const option_tmpfs[] = "tmpfs";
+static char const option_config[] = "config";
+static char const option_min_mapq[] = "min-mapq";
+static char const option_qual_compress[] = "qual-quant";
+static char const option_cache_size[] = "cache-size";
+static char const option_unsorted[] = "unsorted";
+static char const option_max_err_count[] = "max-err-count";
+static char const option_max_rec_count[] = "max-rec-count";
+static char const option_no_verify[] = "no-verify";
+static char const option_only_verify[] = "only-verify";
+static char const option_use_qual[] = "use-QUAL";
+static char const option_ref_filter[] = "ref-filter";
+static char const option_ref_config[] = "ref-config";
+static char const option_edit_aligned_qual[] = "edit-aligned-qual";
+static char const option_unaligned[] = "unaligned";
+static char const option_accept_dup[] = "accept-dups";
+static char const option_accept_nomatch[] = "accept-nomatch";
+static char const option_nomatch_log[] = "nomatch-log";
+static char const option_keep_mismatch_qual[] = "keep-mismatch-qual";
+static char const option_min_match[] = "minimum-match";
+static char const option_header[] = "header";
+static char const option_no_cs[] = "no-cs";
+static char const option_no_secondary[] = "no-secondary";
+static char const option_ref_file[] = "ref-file";
+static char const option_TI[] = "TI";
+static char const option_max_warn_dup_flag[] = "max-warning-dup-flag";
+static char const option_accept_hard_clip[] = "accept-hard-clip";
+
+#define OPTION_INPUT option_input
+#define OPTION_OUTPUT option_output
+#define OPTION_TMPFS option_tmpfs
+#define OPTION_CONFIG option_config
+#define OPTION_MINMAPQ option_min_mapq
+#define OPTION_QCOMP option_qual_compress
+#define OPTION_CACHE_SIZE option_cache_size
+#define OPTION_MAX_ERR_COUNT option_max_err_count
+#define OPTION_MAX_REC_COUNT option_max_rec_count
+#define OPTION_UNALIGNED option_unaligned
+#define OPTION_ACCEPT_DUP option_accept_dup
+#define OPTION_ACCEPT_NOMATCH option_accept_nomatch
+#define OPTION_NOMATCH_LOG option_nomatch_log
+#define OPTION_MIN_MATCH option_min_match
+#define OPTION_HEADER option_header
+#define OPTION_NO_CS option_no_cs
+#define OPTION_NO_SECONDARY option_no_secondary
+#define OPTION_REF_FILE option_ref_file
+#define OPTION_TI option_TI
+#define OPTION_MAX_WARN_DUP_FLAG option_max_warn_dup_flag
+#define OPTION_ACCEPT_HARD_CLIP option_accept_hard_clip
+
+#define ALIAS_INPUT  "i"
+#define ALIAS_OUTPUT "o"
+#define ALIAS_TMPFS "t"
+#define ALIAS_CONFIG "k"
+#define ALIAS_MINMAPQ "q"
+#define ALIAS_QCOMP "Q"
+#define ALIAS_MAX_ERR_COUNT "E"
+#define ALIAS_UNALIGNED "u"
+#define ALIAS_ACCEPT_DUP "d"
+#define ALIAS_NO_SECONDARY "P"
+#define ALIAS_REF_FILE "r"
+
+static
+char const * input_usage[] = 
+{
+    "Path where to get fasta files from.",
+    NULL
+};
+
+static
+char const * output_usage[] = 
+{
+    "Path and Name of the output database.",
+    NULL
+};
+
+static
+char const * tmpfs_usage[] = 
+{
+    "Path to be used for scratch files.",
+    NULL
+};
+
+static
+char const * config_usage[] = 
+{
+    "Path to configuration file:",
+    "maps the input BAM file's reference names to the equivalent GenBank accession.",
+    "It is a tab-delimited text file with unix line endings (\\n - LF) with the following fields in this order:",
+    "#1 reference name as it occurs in the BAM file's SN field of @SQ header record;",
+    "#2 INSDC reference ID",
+    NULL
+};
+
+static
+char const * min_mapq_usage[] = 
+{
+    "Minimum mapping quality to be considered an alignment.",
+    NULL
+};
+
+static
+char const * qcomp_usage[] = 
+{
+    "Quality scores quantization level, can be a number (0: none, 1: 2bit, 2: 1bit), or a string like '1:10,10:20,20:30,30:-' (which is equivalent to 1) (nb. the endpoint is exclusive).",
+    NULL
+};
+
+static
+char const * unsorted_usage[] = 
+{
+    "Tell the loader to expect unsorted input (requires more memory)",
+    NULL
+};
+
+static
+char const * cache_size_usage[] = 
+{
+    "Set the cache size in MB for the temporary indices",
+    NULL
+};
+
+static
+char const * mrc_usage[] = 
+{
+    "Set the maximum number of records to process from the BAM file",
+    NULL
+};
+
+static
+char const * mec_usage[] = 
+{
+    "Set the maximum number of errors to ignore from the BAM file",
+    NULL
+};
+
+static
+char const * no_verify_usage[] = 
+{
+    "Skip verify existence of references from the BAM file",
+    NULL
+};
+
+static
+char const * only_verify_usage[] = 
+{
+    "Exit after verifying existence of references from the BAM file",
+    NULL
+};
+
+static
+char const * use_QUAL_usage[] = 
+{
+    "use QUAL column for quality values (default is to use OQ if it is available)",
+    NULL
+};
+
+static
+char const * use_ref_filter[] = 
+{
+    "Only process alignments to the given reference",
+    NULL
+};
+
+static
+char const * use_ref_config[] = 
+{
+    "Only process alignments to references in the config file",
+    NULL
+};
+
+static
+char const * use_edit_aligned_qual[] = 
+{
+    "Convert quality at aligned positions to this value",
+    NULL
+};
+
+static
+char const * use_keep_mismatch_qual[] = 
+{
+    "Don't quantized quality at mismatched positions",
+    NULL
+};
+
+static
+char const * use_unaligned[] = 
+{
+    "Specify file without aligned reads",
+    NULL
+};
+
+static
+char const * use_accept_dups[] = 
+{
+    "Accept spots inconsistent PCR duplicate flags",
+    NULL
+};
+
+static
+char const * use_accept_nomatch[] = 
+{
+    "Accept alignments with no matching bases",
+    NULL
+};
+
+static
+char const * use_nomatch_log[] = 
+{
+    "Where to write info for alignments with no matching bases",
+    NULL
+};
+
+static
+char const * use_min_match[] = 
+{
+    "minimum number of matches for an alignment",
+    NULL
+};
+
+static
+char const * use_header[] = 
+{
+    "path to a file containing the SAM header to store in the resulting cSRA, recommended in case of multiple input BAMs",
+    NULL
+};
+
+static
+char const * use_no_cs[] = 
+{
+    "turn off awareness of colorspace",
+    NULL
+};
+
+static
+char const * use_no_secondary[] = 
+{
+    "ignore alignments marked as secondary",
+    NULL
+};
+
+static
+char const * use_ref_file[] = 
+{
+    "path to a fasta file with references",
+    NULL
+};
+
+static
+char const * use_TI[] = 
+{
+    "for trace alignments",
+    NULL
+};
+
+static
+char const * use_max_dup_warnings[] = 
+{
+    "set limit for number of duplicate flag mismatch warnings",
+    NULL
+};
+
+static
+char const * use_accept_hard_clip[] = 
+{
+    "accept hard clipping in CIGAR",
+    NULL
+};
+
+OptDef Options[] = 
+{
+    /* order here is same as in param array below!!! */
+    { OPTION_INPUT, ALIAS_INPUT,  NULL,  input_usage, 1, true,  false },
+    { OPTION_OUTPUT, ALIAS_OUTPUT, NULL, output_usage, 1, true,  true },
+    { OPTION_CONFIG, ALIAS_CONFIG,  NULL,  config_usage, 1, true, false },
+    { OPTION_HEADER, NULL, NULL, use_header, 1, true, false },
+    { OPTION_TMPFS, ALIAS_TMPFS, NULL, tmpfs_usage, 1, true,  false },
+    { OPTION_UNALIGNED, ALIAS_UNALIGNED, NULL, use_unaligned, 256, true, false },
+    { OPTION_ACCEPT_DUP, ALIAS_ACCEPT_DUP, NULL, use_accept_dups, 1, false, false },
+    { OPTION_ACCEPT_NOMATCH, NULL, NULL, use_accept_nomatch, 1, false, false },
+    { OPTION_NOMATCH_LOG, NULL, NULL, use_nomatch_log, 1, true, false },
+    { OPTION_QCOMP, ALIAS_QCOMP, NULL, qcomp_usage, 1, true,  false },
+    { OPTION_MINMAPQ, ALIAS_MINMAPQ, NULL, min_mapq_usage, 1, true,  false },
+    { OPTION_CACHE_SIZE, NULL, NULL, cache_size_usage, 1, true,  false },
+    { OPTION_NO_CS, NULL, NULL, use_no_cs, 1, false,  false },
+    { OPTION_MIN_MATCH, NULL, NULL, use_min_match, 1, true, false },
+    { OPTION_NO_SECONDARY, ALIAS_NO_SECONDARY, NULL, use_no_secondary, 1, false, false },
+    { option_unsorted, NULL, NULL, unsorted_usage, 1, false,  false },
+    { option_no_verify, NULL, NULL, no_verify_usage, 1, false,  false },
+    { option_only_verify, NULL, NULL, only_verify_usage, 1, false,  false },
+    { option_use_qual, NULL, NULL, use_QUAL_usage, 1, false,  false },
+    { option_ref_config, NULL, NULL, use_ref_config, 1, false,  false },
+    { option_ref_filter, NULL, NULL, use_ref_filter, 1, true,  false },
+    { option_edit_aligned_qual, NULL, NULL, use_edit_aligned_qual, 1, true, false },
+    { option_keep_mismatch_qual, NULL, NULL, use_keep_mismatch_qual, 1, false,  false },
+    { OPTION_MAX_REC_COUNT, NULL, NULL, mrc_usage, 1, true,  false },
+    { OPTION_MAX_ERR_COUNT, ALIAS_MAX_ERR_COUNT, NULL, mec_usage, 1, true,  false },
+    { OPTION_REF_FILE, ALIAS_REF_FILE, NULL, use_ref_file, 0, true, false },
+    { OPTION_TI, NULL, NULL, use_TI, 1, false, false },
+    { OPTION_MAX_WARN_DUP_FLAG, NULL, NULL, use_max_dup_warnings, 1, true, false },
+    { OPTION_ACCEPT_HARD_CLIP, NULL, NULL, use_accept_hard_clip, 1, false, false }
+};
+
+const char* OptHelpParam[] =
+{
+    /* order here is same as in OptDef array above!!! */
+    "path",
+    "path",
+    "path-to-file",
+    "path-to-file",
+    "path",
+    "path-to-file",
+    NULL,
+    NULL,
+    NULL,
+    "level",
+    "phred-score",
+    "mbytes",
+    NULL,
+    "count",
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    "name",
+    "new-value",
+    NULL,
+    NULL,
+    NULL,
+    "path-to-file",
+    NULL,
+    "count",
+    NULL
+};
+
+rc_t UsageSummary (char const * progname)
+{
+    return KOutMsg (
+        "Usage:\n"
+        "\t%s [options] <bam-file>\n"
+        "\n"
+        "Summary:\n"
+        "\tLoad a BAM formatted data file\n"
+        "\n"
+        "Example:\n"
+        "\t%s -o /tmp/SRZ123456 -k analysis.bam.cfg 123456.bam\n"
+        "\n"
+        ,progname, progname);
+}
+
+char const UsageDefaultName[] = "bam-load";
+
+rc_t CC Usage (const Args * args)
+{
+    rc_t rc;
+    int i;
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    const size_t argsQty = sizeof(Options) / sizeof(Options[0]);
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+    if (rc)
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary (progname);
+
+    for(i = 0; i < argsQty; i++ ) {
+        if( Options[i].required && Options[i].help[0] != NULL ) {
+            HelpOptionLine(Options[i].aliases, Options[i].name, OptHelpParam[i], Options[i].help);
+        }
+    }
+    OUTMSG(("\nOptions:\n"));
+    for(i = 0; i < argsQty; i++ ) {
+        if( !Options[i].required && Options[i].help[0] != NULL ) {
+            HelpOptionLine(Options[i].aliases, Options[i].name, OptHelpParam[i], Options[i].help);
+        }
+    }
+    XMLLogger_Usage();
+    OUTMSG(("\n"));
+    HelpOptionsStandard ();
+    HelpVersion (fullpath, KAppVersion());
+    return rc;
+}
+
+/* MARK: Definitions and Globals */
+
+#define SCHEMAFILE "align/align.vschema"
+
+Globals G;
+
+uint32_t CC KAppVersion (void)
+{
+    return BAM_LOAD_VERS;
+}
+
+#ifdef _WIN32
+#include <process.h>
+#else
+#include <unistd.h>
+#endif
+static void set_pid(void)
+{
+    G.pid = getpid();
+}
+
+static rc_t PathWithBasePath(char rslt[], size_t sz, char const path[], char const base[])
+{
+    size_t const plen = strlen(path);
+    bool const hasBase = base && base[0];
+    bool const isBareName = strchr(path, '/') == NULL;
+    
+    if (isBareName && hasBase) {
+        if (string_printf(rslt, sz, NULL, "%s/%s", base, path) == 0)
+            return 0;
+    }
+    else if (plen < sz) {
+        strcpy(rslt, path);
+        return 0;
+    }
+    {
+        rc_t const rc = RC(rcApp, rcArgv, rcAccessing, rcBuffer, rcInsufficient);
+        (void)LOGERR(klogErr, rc, "The path to the file is too long");
+        return rc;
+    }
+}
+
+static rc_t OpenFile(KFile const **kf, char const path[], char const base[])
+{
+    char fname[4096];
+    rc_t rc = PathWithBasePath(fname, sizeof(fname), path, base);
+    
+    if (rc == 0) {
+        KDirectory *dir;
+        
+        rc = KDirectoryNativeDir(&dir);
+        if (rc == 0) {
+            rc = KDirectoryOpenFileRead(dir, kf, fname);
+            KDirectoryRelease(dir);
+        }
+    }
+    return rc;
+}
+
+static rc_t LoadHeader(char const **rslt, char const path[], char const base[])
+{
+    KFile const *kf;
+    rc_t rc = OpenFile(&kf, path, base);
+    
+    *rslt = NULL;
+    if (rc == 0) {
+        uint64_t fsize;
+        rc = KFileSize(kf, &fsize);
+        if (rc == 0) {
+            char *fdata = malloc(fsize+1);
+            
+            if (fdata) {
+                size_t nread;
+                rc = KFileRead(kf, 0, fdata, fsize, &nread);
+                if (rc == 0) {
+                    if (nread) {
+                        fdata[nread] = '\0';
+                        *rslt = fdata;
+                    }
+                    else {
+                        free(fdata);
+                        rc = RC(rcApp, rcArgv, rcAccessing, rcFile, rcEmpty);
+                        (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)' is empty", "file=%s", path));
+                    }
+                }
+                else {
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Failed to read file '$(file)'", "file=%s", path));
+                }
+            }
+            else {
+                rc = RC(rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted);
+                (void)PLOGERR(klogErr, (klogErr, rc, "Failed to read file '$(file)'", "file=%s", path));
+            }
+        }
+        KFileRelease(kf);
+    }
+    else {
+        (void)PLOGERR(klogErr, (klogErr, rc, "Failed to open file '$(file)'", "file=%s", path));
+    }
+    return rc;
+}
+
+rc_t CC KMain (int argc, char * argv[])
+{
+    Args * args;
+    rc_t rc;
+    unsigned n_aligned = 0;
+    unsigned n_unalgnd = 0;
+    char *aligned[256];
+    char *unalgnd[256];
+    char *name_buffer = NULL;
+    unsigned next_name = 0;
+    unsigned nbsz = 0;
+    char const *value;
+    char *dummy;
+    const XMLLogger* xml_logger = NULL;
+    
+    memset(&G, 0, sizeof(G));
+    
+    G.mode = mode_Archive;
+    G.maxSeqLen = TableWriterRefSeq_MAX_SEQ_LEN;
+    G.schemaPath = SCHEMAFILE;
+    G.omit_aligned_reads = true;
+    G.omit_reference_reads = true;
+    G.minMapQual = 0; /* accept all */
+    G.tmpfs = "/tmp";
+#if _ARCH_BITS == 32
+    G.cache_size = ( size_t ) 1 << 30;
+#else
+    G.cache_size = ( size_t ) 10 << 30;
+#endif
+    G.maxErrCount = 1000;
+    G.minMatchCount = 10;
+    
+    set_pid();
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 2, Options,
+                            sizeof Options / sizeof (OptDef), XMLLogger_Args, XMLLogger_ArgsQty);
+
+    while (rc == 0) {
+        uint32_t pcount;
+
+        if( (rc = XMLLogger_Make(&xml_logger, NULL, args)) != 0 ) {
+            break;
+        }
+        rc = ArgsOptionCount(args, option_only_verify, &pcount);
+        if (rc)
+            break;
+        G.onlyVerifyReferences = (pcount > 0);
+        
+        rc = ArgsOptionCount(args, option_no_verify, &pcount);
+        if (rc)
+            break;
+        G.noVerifyReferences = (pcount > 0);
+        
+        rc = ArgsOptionCount(args, option_use_qual, &pcount);
+        if (rc)
+            break;
+        G.useQUAL = (pcount > 0);
+        
+        rc = ArgsOptionCount(args, option_ref_config, &pcount);
+        if (rc)
+            break;
+        G.limit2config = (pcount > 0);
+        
+        rc = ArgsOptionCount(args, OPTION_REF_FILE, &pcount);
+        if (rc)
+            break;
+        G.refFiles = calloc(pcount + 1, sizeof(*(G.refFiles)));
+        if( !G.refFiles ) {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted);
+            break;
+        }
+        while(pcount-- > 0) {
+            rc = ArgsOptionValue(args, OPTION_REF_FILE, pcount, &G.refFiles[pcount]);
+            if (rc)
+                break;
+        }
+
+        rc = ArgsOptionCount (args, OPTION_TMPFS, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_TMPFS, 0, &G.tmpfs);
+            if (rc)
+                break;
+        }
+        else if (pcount > 1)
+        {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+            OUTMSG (("Single parameter required\n"));
+            MiniUsage (args);
+            break;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_INPUT, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_INPUT, 0, &G.inpath);
+            if (rc)
+                break;
+        }
+        else if (pcount > 1)
+        {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+            OUTMSG (("Single input parameter required\n"));
+            MiniUsage (args);
+            break;
+        }
+        
+        rc = ArgsOptionCount (args, option_ref_filter, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, option_ref_filter, 0, &G.refFilter);
+            if (rc)
+                break;
+        }
+        else if (pcount > 1)
+        {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+            OUTMSG (("Single parameter required\n"));
+            MiniUsage (args);
+            break;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_CONFIG, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_CONFIG, 0, &G.refXRefPath);
+            if (rc)
+                break;
+        }
+        else if (pcount > 1)
+        {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+            OUTMSG (("Single input parameter required\n"));
+            MiniUsage (args);
+            break;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_OUTPUT, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_OUTPUT, 0, &G.outpath);
+            if (rc)
+                break;
+        }
+        else if (pcount > 1)
+        {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+            OUTMSG (("Single output parameter required\n"));
+            MiniUsage (args);
+            break;
+        }
+        else if (!G.onlyVerifyReferences) {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcInsufficient);
+            OUTMSG (("Output parameter required\n"));
+            MiniUsage (args);
+            break;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_MINMAPQ, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_MINMAPQ, 0, &value);
+            if (rc)
+                break;
+            G.minMapQual = strtoul(value, &dummy, 0);
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_QCOMP, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_QCOMP, 0, &G.QualQuantizer);
+            if (rc)
+                break;
+        }
+        
+        rc = ArgsOptionCount (args, option_edit_aligned_qual, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, option_edit_aligned_qual, 0, &value);
+            if (rc)
+                break;
+            G.alignedQualValue = strtoul(value, &dummy, 0);
+            if (G.alignedQualValue == 0) {
+                rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcIncorrect);
+                OUTMSG (("edit-aligned-qual: bad value\n"));
+                MiniUsage (args);
+                break;
+            }
+            G.editAlignedQual = true;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_CACHE_SIZE, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_CACHE_SIZE, 0, &value);
+            if (rc)
+                break;
+            G.cache_size = strtoul(value, &dummy, 0) * 1024UL * 1024UL;
+            if (G.cache_size == 0) {
+                rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcIncorrect);
+                OUTMSG (("cache-size: bad value\n"));
+                MiniUsage (args);
+                break;
+            }
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_MAX_WARN_DUP_FLAG, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_MAX_WARN_DUP_FLAG, 0, &value);
+            if (rc)
+                break;
+            G.maxWarnCount_DupConflict = strtoul(value, &dummy, 0);
+        }
+        
+        rc = ArgsOptionCount (args, option_unsorted, &pcount);
+        if (rc)
+            break;
+        G.expectUnsorted = pcount > 0;
+        
+        rc = ArgsOptionCount (args, OPTION_MAX_REC_COUNT, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_MAX_REC_COUNT, 0, &value);
+            if (rc)
+                break;
+            G.maxAlignCount = strtoul(value, &dummy, 0);
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_MAX_ERR_COUNT, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_MAX_ERR_COUNT, 0, &value);
+            if (rc)
+                break;
+            G.maxErrCount = strtoul(value, &dummy, 0);
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_MIN_MATCH, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_MIN_MATCH, 0, &value);
+            if (rc)
+                break;
+            G.minMatchCount = strtoul(value, &dummy, 0);
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_ACCEPT_DUP, &pcount);
+        if (rc)
+            break;
+        G.acceptBadDups = pcount > 0;
+        
+        rc = ArgsOptionCount (args, OPTION_ACCEPT_NOMATCH, &pcount);
+        if (rc)
+            break;
+        G.acceptNoMatch = pcount > 0;
+        
+        rc = ArgsOptionCount (args, option_keep_mismatch_qual, &pcount);
+        if (rc)
+            break;
+        G.keepMismatchQual = pcount > 0;
+        
+        rc = ArgsOptionCount (args, OPTION_NO_CS, &pcount);
+        if (rc)
+            break;
+        G.noColorSpace = pcount > 0;
+        
+        rc = ArgsOptionCount (args, OPTION_NO_SECONDARY, &pcount);
+        if (rc)
+            break;
+        G.noSecondary = pcount > 0;
+        
+        rc = ArgsOptionCount (args, OPTION_TI, &pcount);
+        if (rc)
+            break;
+        G.hasTI = pcount > 0;
+        
+        rc = ArgsOptionCount (args, OPTION_ACCEPT_HARD_CLIP, &pcount);
+        if (rc)
+            break;
+        G.acceptHardClip = pcount > 0;
+        
+        rc = ArgsOptionCount (args, OPTION_NOMATCH_LOG, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            KDirectory *dir;
+            
+            rc = ArgsOptionValue (args, OPTION_NOMATCH_LOG, 0, &value);
+            if (rc) break;
+            rc = KDirectoryNativeDir(&dir);
+            if (rc) break;
+            rc = KDirectoryCreateFile(dir, &G.noMatchLog, 0, 0664, kcmInit, value);
+            KDirectoryRelease(dir);
+            if (rc) break;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_HEADER, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1) {
+            rc = ArgsOptionValue (args, OPTION_HEADER, 0, &value);
+            if (rc) break;
+            rc = LoadHeader(&G.headerText, value, G.inpath);
+            if (rc) break;
+        }
+        
+        rc = ArgsParamCount (args, &pcount);
+        if (rc) break;
+        if (pcount == 0)
+        {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcInsufficient);
+            MiniUsage (args);
+            break;
+        }
+        else if (pcount > sizeof(aligned)/sizeof(aligned[0])) {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+            (void)PLOGERR(klogErr, (klogErr, rc, "$(count) input files is too many, $(max) is the limit",
+                        "count=%u,max=%u", (unsigned)pcount, (unsigned)(sizeof(aligned)/sizeof(aligned[0]))));
+            break;
+        }
+        else {
+            unsigned need = G.inpath ? (strlen(G.inpath) + 1) * pcount : 0;
+            unsigned i;
+            
+            for (i = 0; i < pcount; ++i) {
+                rc = ArgsParamValue(args, i, &value);
+                if (rc) break;
+                need += strlen(value) + 1;
+            }
+            nbsz = need;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_UNALIGNED, &pcount);
+        if (rc)
+            break;
+        if (pcount > 0)
+        {
+            unsigned need = G.inpath ? (strlen(G.inpath) + 1) * pcount : 0;
+            unsigned i;
+            
+            for (i = 0; i < pcount; ++i) {
+                rc = ArgsOptionValue(args, OPTION_UNALIGNED, i, &value);
+                if (rc) break;
+                need += strlen(value) + 1;
+            }
+            if (rc) break;
+            nbsz += need;
+        }
+        
+        name_buffer = malloc(nbsz);
+        if (name_buffer == NULL) {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted);
+            break;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_UNALIGNED, &pcount);
+        if (rc == 0) {
+            unsigned i;
+            
+            for (i = 0; i < pcount; ++i) {
+                rc = ArgsOptionValue(args, OPTION_UNALIGNED, i, &value);
+                if (rc) break;
+                
+                unalgnd[n_unalgnd++] = name_buffer + next_name;
+                rc = PathWithBasePath(name_buffer + next_name, nbsz - next_name, value, G.inpath);
+                if (rc) break;
+                next_name += strlen(name_buffer + next_name) + 1;
+            }
+            if (rc) break;
+        }
+        else
+            break;
+        
+        rc = ArgsParamCount (args, &pcount);
+        if (rc == 0) {
+            unsigned i;
+            
+            for (i = 0; i < pcount; ++i) {
+                rc = ArgsParamValue(args, i, &value);
+                if (rc) break;
+                
+                aligned[n_aligned++] = name_buffer + next_name;
+                rc = PathWithBasePath(name_buffer + next_name, nbsz - next_name, value, G.inpath);
+                if (rc) break;
+                next_name += strlen(name_buffer + next_name) + 1;
+            }
+        }
+        else
+            break;
+        
+        rc = run(argv[0], n_aligned, (char const **)aligned, n_unalgnd, (char const **)unalgnd);
+        break;
+    }
+    free(name_buffer);
+    free((void *)G.headerText);
+    free(G.refFiles);
+
+    value = G.outpath ? strrchr(G.outpath, '/') : "/???";
+    if( value == NULL ) {
+        value = G.outpath;
+    } else {
+        value++;
+    }
+    if (rc) {
+        (void)PLOGERR(klogErr, (klogErr, rc, "load failed",
+                "severity=total,status=failure,accession=%s,errors=%u", value, G.errCount));
+    } else {
+        (void)PLOGMSG(klogInfo, (klogInfo, "loaded",
+                "severity=total,status=success,accession=%s,errors=%u", value, G.errCount));
+    }
+    ArgsWhack(args);
+    XMLLogger_Release(xml_logger);
+    return rc;
+}
diff --git a/tools/bam-loader/hashtable.c b/tools/bam-loader/hashtable.c
new file mode 100644
index 0000000..ee8f8e6
--- /dev/null
+++ b/tools/bam-loader/hashtable.c
@@ -0,0 +1,878 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+
+#include <stddef.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#if TESTING
+#include <stdio.h>
+#include <string.h>
+#endif
+
+#include "hashtable.h"
+
+typedef struct HTBucket HTBucket;
+typedef struct HTEntry HTEntry;
+
+#define HASH_TABLE_ENTRIES_MAX (0x80000)
+#define HASH_TABLE_PREALLOC_MAX 1
+
+struct HTEntry {
+    const void *payload;
+    uint32_t hashValue;
+};
+
+struct HTBucket {
+    HTBucket *overflow;
+    uint32_t used;      /* one bit per entry */
+    HTEntry entry[32];
+};
+
+struct HashTable {
+    size_t hashMask;    /* the "size" of the table is hashMask + 1 */
+    size_t entryCount;  /* total number of entries in table */
+
+    HashTableKeyCompFunc comp_func;
+    const void *ctx;
+    
+#if HASH_TABLE_PREALLOC_MAX
+    HTBucket table[HASH_TABLE_ENTRIES_MAX];
+#else
+    HTBucket *table;
+#endif
+};
+
+typedef struct HashTableRealIterator {
+    HashTable *table;
+    HTBucket *bucket;
+    uint32_t slot;
+    uint32_t hashValue;
+} HashTableRealIterator;
+
+typedef union HashTableImplIterator {
+    HashTableRealIterator real;
+    HashTableIterator user;
+} HashTableImplIterator;
+
+static unsigned FirstSet(unsigned bits)
+{
+    assert(bits != 0);
+    if ((bits & 0xFFFF) != 0) {
+        if ((bits & 0xFF) != 0) {
+            if ((bits & 0xF) != 0) {
+                if ((bits & 0x3) != 0) {
+                    if ((bits & 0x1) != 0)
+                        return 0;
+                    else
+                        return 1;
+                }
+                else if ((bits & 0x4) != 0)
+                    return 2;
+                else
+                    return 3;
+            }
+            else if ((bits & 0x30) != 0) {
+                if ((bits & 0x10) != 0)
+                    return 4;
+                else
+                    return 5;
+            }
+            else if ((bits & 0x40) != 0)
+                return 6;
+            else
+                return 7;
+        }
+        else if ((bits & 0xF00) != 0) {
+            if ((bits & 0x300) != 0) {
+                if ((bits & 0x100) != 0)
+                    return 8;
+                else
+                    return 9;
+            }
+            else if ((bits & 0x400) != 0)
+                return 10;
+            else
+                return 11;
+        }
+        else if ((bits & 0x3000) != 0) {
+            if ((bits & 0x1000) != 0)
+                return 12;
+            else
+                return 13;
+        }
+        else if ((bits & 0x4000) != 0)
+            return 14;
+        else
+            return 15; 
+    }
+    else if ((bits & 0xFF0000) != 0) {
+        if ((bits & 0xF0000) != 0) {
+            if ((bits & 0x30000) != 0) {
+                if ((bits & 0x10000) != 0)
+                    return 16;
+                else
+                    return 17;
+            }
+            else if ((bits & 0x40000) != 0)
+                return 18;
+            else
+                return 19;
+        }
+        else if ((bits & 0x300000) != 0) {
+            if ((bits & 0x100000) != 0)
+                return 20;
+            else
+                return 21;
+        }
+        else if ((bits & 0x400000) != 0)
+            return 22;
+        else
+            return 23;
+    }
+    else if ((bits & 0xF000000) != 0) {
+        if ((bits & 0x3000000) != 0) {
+            if ((bits & 0x1000000) != 0)
+                return 24;
+            else
+                return 25;
+        }
+        else if ((bits & 0x4000000) != 0)
+            return 26;
+        else
+            return 27;
+    }
+    else if ((bits & 0x30000000) != 0) {
+        if ((bits & 0x10000000) != 0)
+            return 28;
+        else
+            return 29;
+    }
+    else if ((bits & 0x40000000) != 0)
+        return 30;
+    else
+        return 31;
+    
+}
+
+static rc_t HTBucketNextOpenSlot(HTBucket *self, HTBucket **rslt, unsigned *slot)
+{
+    while (self->used == 0xFFFFFFFF) {
+        if (self->overflow != NULL) {
+            self = self->overflow;
+            continue;
+        }
+        self->overflow = malloc(sizeof(*self->overflow));
+        if (self->overflow == NULL)
+            return RC(rcCont, rcBuffer, rcAllocating, rcMemory, rcExhausted);
+        self->overflow->overflow = NULL;
+        self->overflow->used = 0;
+        *rslt = self->overflow;
+        *slot = 0;
+        return 0;
+    }
+    *rslt = self;
+    *slot = FirstSet(~self->used);
+    
+    return 0;
+}
+
+static rc_t HTBucketInsert(HTBucket *self, const HTEntry *entry)
+{
+    HTBucket *found;
+    unsigned slot;
+    rc_t rc = HTBucketNextOpenSlot(self, &found, &slot);
+    
+    if (rc)
+        return rc;
+    found->used |= (1 << slot);
+    found->entry[slot] = *entry;
+    return 0;
+}
+
+static bool HTBucketFreeSlot(HTBucket *self, unsigned slot)
+{
+    unsigned i;
+    
+    self->used &= ~(1 << slot);
+#if _DEBUGGING
+    self->entry[slot].payload = NULL;
+#endif
+    if (self->overflow == NULL)
+        return true;
+    
+    /* pull something out of the overflow */
+    i = FirstSet(self->overflow->used);
+    self->entry[slot] = self->overflow->entry[i];
+    self->used |= (1 << slot);
+    HTBucketFreeSlot(self->overflow, i);
+    if (self->overflow->used == 0) {
+        free(self->overflow);
+        self->overflow = NULL;
+    }
+    return false;
+}
+
+static void HTBucketForEach(const HTBucket *self, void (*fn)(void *payload, void *ctx), void *ctx)
+{
+    do {
+        uint32_t bits = self->used;
+        unsigned i;
+        
+        for (i = 0; i != 32 && bits != 0; ++i, bits >>= 1) {
+            if ((bits & 1) == 0)
+                continue;
+            fn((void *)self->entry[i].payload, ctx);
+        }
+        self = self->overflow;
+    } while (self != NULL);
+}
+
+static bool HTBucketDoUntil(const HTBucket *self, bool (*fn)(void *payload, void *ctx), void *ctx)
+{
+    do {
+        uint32_t bits = self->used;
+        unsigned i;
+        
+        for (i = 0; i != 32 && bits != 0; ++i, bits >>= 1) {
+            if ((bits & 1) == 0)
+                continue;
+            if (fn((void *)self->entry[i].payload, ctx))
+                return true;
+        }
+        self = self->overflow;
+    } while (self != NULL);
+    return false;
+}
+
+static bool HTBucketValidate(const HTBucket *self, uint32_t hash, uint32_t mask)
+{
+    do {
+        uint32_t bits = self->used;
+        unsigned i;
+        
+        for (i = 0; i != 32 && bits != 0; ++i, bits >>= 1) {
+            const HTEntry *entry = &self->entry[i];
+            bool is_free = (bits & 1) == 0;
+#if _DEBUGGING
+            bool is_null = entry->payload == NULL;
+            
+            if (is_free != is_null)
+                return true;
+#endif
+            if (is_free)
+                continue;
+            if ((entry->hashValue & mask) != hash)
+                return true;
+        }
+        if (self->overflow && self->overflow->used == 0)
+            return true;
+        self = self->overflow;
+    } while (self != NULL);
+    return false;
+}
+
+static void HTBucketWhack(HTBucket *self, void (*fn)(void *payload, void *ctx), void *ctx)
+{
+    uint32_t bits;
+    unsigned i;
+    
+    if (self->overflow) {
+        HTBucketWhack(self->overflow, fn, ctx);
+        free(self->overflow);
+    }
+    for (i = 0, bits = self->used; i != 32 && bits != 0 && fn; ++i, bits >>= 1) {
+        if ((bits & 1) == 0)
+            continue;
+        fn((void *)self->entry[i].payload, ctx);
+    }
+}
+
+static uint32_t GetHashValue(const uint8_t *key, unsigned len)
+{
+    /*
+     * My basic hash function is Pearson's hash.
+     * The tables below contain each value between 0 and 255 inclusive, in
+     * random order.  The tables were generated with the following perl script.
+     *
+     *   #!perl -w
+     *   my @x = (0 .. 255); # each value between 0 and 255 inclusive
+     *   foreach (0 .. 10000) { # randomize the order
+     *       my $i = $_ % 256;                    # a sequential index
+     *       my $r = rand(256);                   # a random index
+     *       ($x[$i], $x[$r]) = ($x[$r], $x[$i]); # swap x[i] and x[r]
+     *   }
+     *   print join(', ', map { sprintf '%3u', $_; } @x);
+     *
+     * You can generate lots of different 8-bit hash functions this way.
+     *
+     * I generate four 8-bit hashes and combine them to make a 32-bit one.
+     * Even though I may not use all bits for the hash (e.g. the limit on the
+     * table's size is much less than UINT32_MAX), computing and storing the
+     * full hash reduces the number of string compares I have to do when buckets
+     * have lots of items in them.
+     */
+    static const uint8_t T1[] = {
+         64, 186,  39, 203,  54, 211,  98,  32,  26,  23, 219,  94,  77,  60,  56, 184,
+        129, 242,  10,  91,  84, 192,  19, 197, 231, 133, 125, 244,  48, 176, 160, 164,
+         17,  41,  57, 137,  44, 196, 116, 146, 105,  40, 122,  47, 220, 226, 213, 212,
+        107, 191,  52, 144,   9, 145,  81, 101, 217, 206,  85, 134, 143,  58, 128,  20,
+        236, 102,  83, 149, 148, 180, 167, 163,  12, 239,  31,   0,  73, 152,   1,  15,
+         75, 200,   4, 165,   5,  66,  25, 111, 255,  70, 174, 151,  96, 126, 147,  34,
+        112, 161, 127, 181, 237,  78,  37,  74, 222, 123,  21, 132,  95,  51, 141,  45,
+         61, 131, 193,  68,  62, 249, 178,  33,   7, 195, 228,  82,  27,  46, 254,  90,
+        185, 240, 246, 124, 205, 182,  42,  22, 198,  69, 166,  92, 169, 136, 223, 245,
+        118,  97, 115,  80, 252, 209,  49,  79, 221,  38,  28,  35,  36, 208, 187, 248,
+        158, 201, 202, 168,   2,  18, 189, 119, 216, 214,  11,   6,  89,  16, 229, 109,
+        120,  43, 162, 106, 204,   8, 199, 235, 142, 210,  86, 153, 227, 230,  24, 100,
+        224, 113, 190, 243, 218, 215, 225, 173,  99, 238, 138,  59, 183, 154, 171, 232,
+        157, 247, 233,  67,  88,  50, 253, 251, 140, 104, 156, 170, 150, 103, 117, 110,
+        155,  72, 207, 250, 159, 194, 177, 130, 135,  87,  71, 175,  14,  55, 172, 121,
+        234,  13,  30, 241,  93, 188,  53, 114,  76,  29,  65,   3, 179, 108,  63, 139
+    };
+    static const uint8_t T2[] = {
+        119, 174,  44, 225,  94, 226, 141, 197,  35, 241, 179, 154,  26, 161, 129,  10,
+        104,  53,  97,  12, 243,  80,  51, 123, 185,  13,  66, 214, 114,  17,  74, 165,
+        110, 143, 170, 222, 242,  73,  40, 101,  56, 163,  68,  86, 198,   9,  21,  90,
+          8,   1, 146, 121, 103,  70,   5, 160, 149,  50, 145, 236, 100,  75, 148,  58,
+         55,  15,  33, 131, 127, 186,   6, 109, 115,   2, 108,  52, 209, 128, 208,  47,
+        220, 173,  45,  72, 156, 212, 152, 102,  77,  36, 134, 137, 162,  54, 235, 167,
+         28, 255, 155, 240, 135, 176, 246, 244,  22, 157,  20, 224, 210, 192,  71, 140,
+         14, 211, 251, 204,  30, 213, 132, 248, 178, 187, 142,  62, 215, 106, 229, 125,
+         41, 216,  49,  29,  98,  32,  18, 237,  79, 206,  63, 227,  25,  99, 150, 223,
+        171, 118,   4, 139,  81,   0, 133,  95, 188, 120,  27, 124,  61, 195, 231, 207,
+         31, 202,  91, 252,  46,  39, 250, 144, 238, 254, 219, 200, 130, 201,  48, 107,
+        205, 177,  88,  16, 147, 221, 164, 184,  89,  67, 190,  11, 175,  42, 136, 189,
+        245, 117,  83,   3, 180, 172,  76,  43, 183,  84, 218, 169, 253, 159, 196,  59,
+        193, 249, 181, 116, 153,  24,  87, 239, 138, 199, 111,  82,  69, 105,  78, 151,
+        122, 168, 126,  85, 228, 233,  34, 113, 194, 191,  19, 230, 182,  96, 217,  38,
+        234, 232,  92,  23,  57, 203,  65,  60,  64,  37, 158, 247,  93, 166, 112,   7
+    };
+    static const uint8_t T3[] = {
+        103,  33, 228,  32, 183, 231, 139,  60,  67,  80, 184, 100,  70,  19,  14,  58,
+        104,  48, 140,  10,  91, 137,  31,  96, 102, 180,  77, 121, 251, 167,  37, 206,
+         79, 151, 109,  15,  92, 174, 108,  16,  95, 145,  18, 236,  49, 177, 135,   0,
+        165,  86,  83, 107, 144,  44,  27, 116, 168, 193, 119, 230,  56,  97, 138, 149,
+        132,  21, 176,  39, 205,  12,  69, 179, 210,  25, 213, 194, 239, 209, 248,  28,
+         93,  38, 224,  66, 105, 160,  40,  17,  23, 129, 212,   8, 178, 118, 163,  73,
+          3,  63,  57,  94, 254, 186, 131, 166,  61, 191, 133, 192,  78, 114, 250, 200,
+        222, 136, 188, 204, 101,  11, 247, 146, 142, 152, 171, 157, 110, 141, 199,  29,
+        147,  88, 211, 240, 164, 196, 189,  50,  65, 112, 219, 237, 197, 115, 126, 154,
+        246, 170, 227, 235,  42, 148,  84, 201, 242,  85,  35,   6, 173, 122, 215, 218,
+         75,  82,   1, 169, 143, 195,  51, 155,  54,   9,  71,  24,  53,   7,  47, 229,
+        158,  26, 245,  89, 150, 181, 255, 249, 221, 217, 223,  76,  90,  36, 216, 130,
+        220, 125, 182,  55, 202, 234, 203, 123,  34, 172,  74,  30,   4, 241, 162, 233,
+         64,  62, 127,  20,  52, 106, 190, 253, 185, 111, 232,   2, 187,  13,  68, 117,
+        128,  98, 208,  41, 159,  46, 207, 244, 226,  22, 252, 214,   5, 243,  99, 113,
+        120, 225, 175, 124, 134, 161, 156,  45,  72,  87,  43,  59, 198, 153, 238,  81
+    };
+    static const uint8_t T4[] = {
+        103, 124,  53, 254,  91, 106, 131,  69, 158,  23, 249, 171, 241,  30, 194, 217,
+         64, 123, 129, 118,  35,  16, 209, 190, 155, 104, 148, 163,  78, 188, 174, 245,
+        218, 125, 210, 250, 107, 212, 117,  17, 109,  44,  71,  38, 253, 177,  11, 114,
+         60, 192, 133, 219,  97, 246,  41, 228, 127, 151,  62, 213, 224, 234, 138, 162,
+         31, 110, 222, 141,  25, 135,  18,  49, 132, 242, 203, 207,  68, 130, 116,  59,
+         63,  67, 169, 147,  94,   0, 134,  77,  51, 128, 247,  21,  88, 145, 122,  19,
+         40,  58,   9,  39, 252,   8, 156, 126, 146,  80, 159, 201, 186, 175,  74,  89,
+         54, 173, 208,  86, 239,   6,  61, 139,  66,  87, 150, 231,  82,  42, 197, 202,
+        199, 196, 121, 112, 161,  99,  90, 144, 105, 195, 255,  27,   3, 216, 187, 172,
+         12,   4, 221, 182, 215, 214,  76,  98,  15,  33,  47, 200, 113, 140, 227, 191,
+        100,  24, 251, 185, 152, 237, 235,  92,  96,   1, 193,   2, 154,  72, 198, 223,
+         28,  46,  13,  56, 153, 232, 233, 143, 108, 184,  43, 119,  84, 189, 120, 211,
+         10, 164,  73, 230, 149, 238,  20,  37,  95, 166, 240,  29, 204, 167, 243, 236,
+         45, 170, 220,   5,   7,  50, 160,  83, 157,  22, 168, 111,  55, 137, 206,  36,
+         85, 180,  79, 142, 102, 181,  14, 115,  57,  34,  75, 244, 248,  48,  93, 183,
+        229, 101, 205,  70, 226, 225, 165, 176, 136, 179,  52,  32,  26,  81,  65, 178
+    };
+    unsigned h1 = 0;
+    unsigned h2 = 0;
+    unsigned h3 = 0;
+    unsigned h4 = 0;
+    unsigned i;
+    
+    for (i = 0; i != len; ++i) {
+        uint8_t ch = key[i];
+        h1 = T1[h1 ^ ch];
+        h2 = T2[h2 ^ ch];
+        h3 = T3[h3 ^ ch];
+        h4 = T4[h4 ^ ch];
+    }
+    
+    return (h4 << 24) | (h3 << 16) | (h2 << 8) | h1;
+}
+
+rc_t HashTableMake(HashTable **rslt, uint32_t initialSize, HashTableKeyCompFunc kf, const void *ctx)
+{
+    HashTable *self;
+    unsigned i;
+
+    *rslt = NULL;
+    
+    if (initialSize == 0)
+        initialSize = 2;
+    else {
+        uint32_t m;
+        
+        for (m = 2; m < initialSize; m <<= 1)
+            ;
+        initialSize = m;
+        
+        if (initialSize > HASH_TABLE_ENTRIES_MAX)
+            initialSize = HASH_TABLE_ENTRIES_MAX;
+    }
+    
+    self = malloc(sizeof(*self));
+    if (self == NULL)
+        return RC(rcCont, rcSelf, rcAllocating, rcMemory, rcExhausted);
+    
+#if HASH_TABLE_PREALLOC_MAX
+#else
+    self->table = malloc(initialSize * sizeof(self->table[0]));
+    if (self == NULL) {
+        free(self);
+        return RC(rcCont, rcSelf, rcAllocating, rcMemory, rcExhausted);
+    }
+#endif
+    
+    for (i = 0; i != initialSize; ++i) {
+        self->table[i].used = 0;
+        self->table[i].overflow = NULL;
+    }
+    
+    self->hashMask = initialSize - 1;
+    self->entryCount = 0;
+    
+    self->comp_func = kf;
+    self->ctx = ctx;
+
+    *rslt = self;
+    
+    return 0;
+}
+
+static bool HashTableValidate(const HashTable *self)
+{
+    unsigned i;
+    
+    for (i = 0; i != self->hashMask + 1; ++i) {
+        if (HTBucketValidate(&self->table[i], i, self->hashMask))
+            return true;
+    }
+    return false;
+}
+
+static rc_t HashTableExpand(HashTable *self)
+{
+    const uint32_t mask = (self->hashMask << 1) | 1;
+    size_t size;
+    unsigned i;
+#if HASH_TABLE_PREALLOC_MAX
+#else
+    HTBucket *temp;
+#endif
+    
+    /* the table must be smaller than the limit */
+    if (self->hashMask >= HASH_TABLE_ENTRIES_MAX - 1)
+        return 0;
+    
+    size = self->hashMask + 1;
+    
+    /* the density of used slots needs to be high enough */
+    if (self->entryCount * 4 < size * 3 * 32)
+        return 0;
+    
+#if HASH_TABLE_PREALLOC_MAX
+#else
+    temp = realloc(self->table, size * 2);
+    if (temp == NULL)
+        return RC(rcCont, rcTable, rcResizing, rcMemory, rcExhausted);
+    self->table = temp;
+#endif
+    
+    /* move any items that should be moved
+     * to the new buckets (about half should)
+     */
+    for (i = 0; i != size; ++i) {
+        HTBucket *bucket = &self->table[i];
+        HTBucket *other  = &self->table[i + size];
+        
+        other->overflow = NULL;
+        other->used = 0;
+        do {
+            unsigned j;
+            uint32_t bits = bucket->used;
+            
+            for (j = 0; j != 32 && bits != 0; ++j, bits >>= 1) {
+                /* slot j occupied? */
+                if ((bits & 1) != 0) {
+                    HTEntry *entry = &bucket->entry[j];
+                    
+                    assert((entry->hashValue & self->hashMask) == i);
+                    
+                    while ((entry->hashValue & mask) != i) {
+                        rc_t rc;
+
+                        /* move to new bucket */
+                        assert((entry->hashValue & mask) == i + size);
+                        
+                        rc = HTBucketInsert(other, entry);
+                        if (rc) return rc;
+                        if (HTBucketFreeSlot(bucket, j))
+                            break;
+                        
+                        /* FreeSlot decided to reuse the slot
+                         * for something from the overflow,
+                         * so process the new thing
+                         */
+                        assert((entry->hashValue & self->hashMask) == i);
+                    }
+                }
+            }
+            bucket = bucket->overflow;
+        } while (bucket);
+    }
+    self->hashMask = mask;
+#if 0
+    HashTableValidate(self);
+#endif    
+    return 0;
+}
+
+static rc_t HashTableShrink(HashTable *self)
+{
+    const uint32_t mask = self->hashMask >> 1;
+    size_t size;
+    unsigned i;
+    unsigned j;
+    
+    if (self->hashMask > 255)
+        return 0;
+    
+    size = self->hashMask + 1;
+    
+    if (self->entryCount * 4 >= size * 3 * 32)
+        return 0;
+    
+    for (j = 0, i = mask + 1; i != size; ++i, ++j) {
+        HTBucket *bucket = &self->table[i];
+        HTBucket *other  = &self->table[j];
+        
+        do {
+            unsigned k;
+            uint32_t bits = bucket->used;
+            
+            for (k = 0; k != 32 && bits != 0; ++k, bits >>= 1) {
+                if ((bits & 1) != 0) {
+                    rc_t rc;
+                    HTEntry *entry = &bucket->entry[k];
+                    
+                    assert((entry->hashValue & self->hashMask) == i);
+                    assert((entry->hashValue & mask) == j);
+                        
+                    rc = HTBucketInsert(other, entry);
+                    if (rc) return rc;
+                }
+            }
+            bucket = bucket->overflow;
+        } while (bucket);
+    }
+    self->hashMask = mask;
+#if 0
+    HashTableValidate(self);
+#endif    
+    return 0;
+}
+
+static bool HashTableFindSlot(const HashTable *self,
+                              const void *key,
+                              uint32_t key_len,
+                              HashTableRealIterator *iter
+                              )
+{
+    uint32_t h = GetHashValue(key, key_len);
+    const HTBucket *bucket = &self->table[h & self->hashMask];
+    const HTBucket *open_bucket = NULL;
+    int slot = 0;
+    
+    iter->hashValue = h;
+    do {
+        unsigned i;
+        uint32_t bits = bucket->used;
+        
+        for (i = 0; i != 32 && (bits != 0 || open_bucket == NULL); ++i, bits >>= 1) {
+            if ((bits & 1) == 0) {
+                if (open_bucket == NULL) {
+                    open_bucket = bucket;
+                    slot = i;
+                }
+                continue;
+            }
+            if (bucket->entry[i].hashValue != h)
+                continue;
+            if (self->comp_func(bucket->entry[i].payload, key, key_len, (void *)self->ctx) != 0)
+                continue;
+            
+            iter->bucket = (HTBucket *)bucket;
+            iter->slot = i;
+            return true;
+        }
+        if (bucket->overflow == NULL)
+            break;
+        bucket = bucket->overflow;
+    } while (1);
+    if (open_bucket == NULL) {
+        iter->bucket = (HTBucket *)bucket;
+        iter->slot = 32;
+    }
+    else {
+        iter->bucket = (HTBucket *)open_bucket;
+        iter->slot = slot;
+    }
+
+    return false;
+}
+
+HashTableIterator HashTableLookup(HashTable *self, const void *key, uint32_t key_length)
+{
+    HashTableImplIterator rslt;
+    
+    rslt.real.table = self;
+    HashTableFindSlot(self, key, key_length, &rslt.real);
+    
+    return rslt.user;
+}
+
+void HashTableRemove(HashTable *self, const HashTableIterator *iter,
+                        HashTableFreeFunc whack, void *ctx)
+{
+    const HashTableRealIterator *i = &((const HashTableImplIterator *)iter)->real;
+    uint32_t hv;
+    
+    assert(i->table == self);
+    if (i->slot > 32)
+        return;
+    if ((i->bucket->used & (1 << i->slot)) == 0)
+        return;
+    
+    hv = i->hashValue;
+    assert(hv == i->bucket->entry[i->slot].hashValue);
+    
+    if (whack)
+        whack((void *)i->bucket->entry[i->slot].payload, ctx);
+    
+    HTBucketFreeSlot(i->bucket, i->slot);
+    if (i->bucket->used == 0) {
+        HTBucket *parent = &self->table[hv & self->hashMask];
+        
+        if (i->bucket != parent) {
+            while (parent->overflow != i->bucket)
+                parent = parent->overflow;
+            assert(parent->overflow == i->bucket);
+            assert(i->bucket->overflow == NULL);
+            parent->overflow = NULL;
+            free(i->bucket);
+        }
+    }
+    --self->entryCount;
+}
+
+void HashTableForEach(const HashTable *self, void (*fn)(void *payload, void *ctx), void *ctx)
+{
+    unsigned i;
+    
+    for (i = 0; i != self->hashMask + 1; ++i) {
+        HTBucketForEach(&self->table[i], fn, ctx);
+    }
+}
+
+bool HashTableDoUntil(const HashTable *self, bool (*fn)(void *payload, void *ctx), void *ctx)
+{
+    unsigned i;
+    
+    for (i = 0; i != self->hashMask + 1; ++i) {
+        if (HTBucketDoUntil(&self->table[i], fn, ctx))
+            return true;
+    }
+    return false;
+}
+
+void HashTableWhack(HashTable *self, HashTableFreeFunc fn, void *ctx)
+{
+    unsigned i;
+    
+    if (self) {
+        for (i = 0; i != self->hashMask + 1; ++i)
+            HTBucketWhack(&self->table[i], fn, ctx);
+#if HASH_TABLE_PREALLOC_MAX
+#else
+        free(self->table);
+#endif
+        free(self);
+    }
+}
+
+bool HashTableIteratorHasValue(const HashTableIterator *iter)
+{
+    const HashTableRealIterator *i = &((const HashTableImplIterator *)iter)->real;
+    
+    if (i->slot < 32 && (i->bucket->used & (1 << i->slot)) != 0)
+        return true;
+    return false;
+}
+
+const void *HashTableIteratorGetValue(const HashTableIterator *iter)
+{
+    const HashTableRealIterator *i = &((const HashTableImplIterator *)iter)->real;
+    return i->bucket->entry[i->slot].payload;
+}
+
+rc_t HashTableIteratorSetValue(HashTableIterator *iter, const void *value)
+{
+    HashTableRealIterator *i = &((HashTableImplIterator *)iter)->real;
+    HashTable *self = i->table;
+    
+    if (i->slot >= 32) {
+        rc_t rc;
+        
+        assert(i->bucket->used == 0xFFFFFFFF);
+        rc = HashTableExpand(self);
+        if (rc)
+            return rc;
+        rc = HTBucketNextOpenSlot(&self->table[i->hashValue & self->hashMask], &i->bucket, &i->slot);
+        if (rc)
+            return rc;
+    }
+    assert((i->bucket->used & (1 << i->slot)) == 0);
+    i->bucket->entry[i->slot].hashValue = i->hashValue;
+    i->bucket->entry[i->slot].payload = value;
+    i->bucket->used |= (1 << i->slot);
+    ++self->entryCount;
+    return 0;
+}
+
+#define TESTING 0
+#if TESTING
+#include <stdio.h>
+#include <string.h>
+
+struct pstring {
+    uint8_t len;
+    char str[255];
+};
+
+static int comp_func(const void *Obj, const void *key, uint32_t len, void *ignore)
+{
+    const struct pstring *obj = Obj;
+    return obj->len == len ? memcmp(obj->str, key, len) : obj->len - len;
+}
+
+static void print_key(void *Obj, void *ignore)
+{
+    const struct pstring *obj = Obj;
+    
+    printf("%s\n", obj->str);
+    return;
+}
+
+static struct pstring **LoadTestData(unsigned *count) {
+    FILE *fp = fopen("spot_name.txt", "r");
+    unsigned N = 0;
+    unsigned bytes = 0;
+    struct pstring **rslt;
+    
+    *count = 0;
+    if (fp == NULL) {
+        perror("failed to open test data file");
+        return NULL;
+    }
+    do {
+        char buf[256];
+        int i = fscanf(fp, " %256s ", buf);
+        if (i != 1)
+            break;
+        ++N;
+        bytes += strlen(buf);
+    } while (1);
+    rewind(fp);
+    
+    rslt = malloc(N * (sizeof(*rslt) + 2) + bytes);
+    if (rslt) {
+        unsigned i;
+        char *cp = (char *)&rslt[N];
+        
+        for (i = 0; i != N; ++i) {
+            rslt[i] = (struct pstring *)cp;
+            fscanf(fp, " %s ", rslt[i]->str);
+            rslt[i]->len = strlen(rslt[i]->str);
+            cp += rslt[i]->len + 2;
+        }
+        *count = N;
+    }
+    fclose(fp);
+    return rslt;
+}
+
+bool is_not_consistent(void *payload, void *context)
+{
+    return payload == NULL;
+}
+
+void test(void) {
+    HashTable *ht;
+    struct pstring **testdata;
+    unsigned N;
+    unsigned i;
+    
+    srand(time(0));
+    
+    testdata = LoadTestData(&N);
+   
+    if (HashTableMake(&ht, 0, comp_func, 0) != 0)
+        return;
+    
+    for (i = 0; i != N; ++i) {
+        const struct pstring *val = testdata[i % N];
+        HashTableIterator iter = HashTableLookup(ht, val->str, val->len);
+        
+        if (HashTableIteratorHasValue(&iter)) {
+            HashTableRemove(ht, &iter, 0, 0);
+        }
+        else {
+            HashTableIteratorSetValue(&iter, val);
+        }
+    }
+#if 1
+    HashTableValidate(ht);
+#else
+    HashTableForEach(ht, print_key, 0);
+#endif
+    HashTableWhack(ht, 0, 0);
+}
+#endif
+
diff --git a/tools/bam-loader/hashtable.h b/tools/bam-loader/hashtable.h
new file mode 100644
index 0000000..e77ee9c
--- /dev/null
+++ b/tools/bam-loader/hashtable.h
@@ -0,0 +1,55 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct HashTable HashTable;
+typedef struct HashTableIterator HashTableIterator;
+
+typedef int (*HashTableKeyCompFunc)(const void *value, const void *key, uint32_t key_length, void *context);
+typedef void (*HashTableFreeFunc)(void *value, void *context);
+
+struct HashTableIterator {
+    const void *root;
+    const void *bucket;
+    uint64_t id;
+};
+
+rc_t HashTableMake(HashTable **rslt, uint32_t initialSize, HashTableKeyCompFunc kf, const void *context);
+
+void HashTableForEach(const HashTable *self, void (*fn)(void *value, void *context), void *context);
+
+bool HashTableDoUntil(const HashTable *self, bool (*fn)(void *value, void *context), void *context);
+
+HashTableIterator HashTableLookup(HashTable *self, const void *key, uint32_t key_length);
+
+void HashTableWhack(HashTable *self, HashTableFreeFunc fn, void *context);
+
+void HashTableRemove(HashTable *self, const HashTableIterator *iter, HashTableFreeFunc whack, void *context);
+
+bool HashTableIteratorHasValue(const HashTableIterator *iter);
+
+const void *HashTableIteratorGetValue(const HashTableIterator *iter);
+
+rc_t HashTableIteratorSetValue(HashTableIterator *iter, const void *value);
diff --git a/tools/bam-loader/loader-imp.c b/tools/bam-loader/loader-imp.c
new file mode 100644
index 0000000..1747156
--- /dev/null
+++ b/tools/bam-loader/loader-imp.c
@@ -0,0 +1,2097 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+/* #include "bam-load.vers.h" */
+
+#include <klib/callconv.h>
+#include <klib/data-buffer.h>
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/rc.h>
+#include <klib/sort.h>
+#include <klib/printf.h>
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/mmap.h>
+#include <kfs/pagefile.h>
+#include <kfs/pmem.h>
+#include <kdb/btree.h>
+#include <kdb/manager.h>
+#include <kdb/database.h>
+#include <kdb/table.h>
+#include <kdb/meta.h>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+
+#include <insdc/insdc.h>
+#include <insdc/sra.h>
+#include <align/dna-reverse-cmpl.h>
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <kapp/loader-file.h>
+#include <kapp/loader-meta.h>
+#include <kapp/log-xml.h>
+#include <kapp/progressbar.h>
+
+#include <sysalloc.h>
+#include <atomic32.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+#include <limits.h>
+#include <time.h>
+
+#include <align/bam.h>
+
+#include "Globals.h"
+#include "sequence-writer.h"
+#include "reference-writer.h"
+#include "alignment-writer.h"
+
+#define NUM_ID_SPACES (256u)
+
+#define MMA_NUM_CHUNKS_BITS (24u)
+#define MMA_NUM_SUBCHUNKS_BITS ((32u)-(MMA_NUM_CHUNKS_BITS))
+#define MMA_SUBCHUNK_SIZE (1u << MMA_NUM_CHUNKS_BITS)
+#define MMA_SUBCHUNK_COUNT (1u << MMA_NUM_SUBCHUNKS_BITS)
+
+typedef struct {
+    KFile *fp;
+    size_t elemSize;
+    uint64_t fsize;
+    struct mma_map_s {
+        struct mma_submap_s {
+            uint8_t *base;
+            KMMap *mmap;
+        } submap[MMA_SUBCHUNK_COUNT];
+    } map[NUM_ID_SPACES];
+} MMArray;
+
+#define FRAG_CHUNK_SIZE (128)
+typedef struct {
+    uint32_t primaryId[2];
+    uint32_t spotId;
+    uint32_t fragmentId;
+    uint8_t  platform;
+    uint8_t  pId_ext[2];
+    uint8_t  spotId_ext;
+    uint8_t  alignmentCount[2]; /* 0..254; 254: saturated max; 255: special meaning "too many" */
+    uint8_t  unmated: 1,
+             pcr_dup: 1,
+             has_a_read: 1,
+             unaligned_1: 1,
+             unaligned_2: 1;
+} ctx_value_t;
+
+#define CTX_VALUE_SET_P_ID(O,N,V) do { int64_t tv = (V); (O).primaryId[N] = (uint32_t)tv; (O).pId_ext[N] = tv >> 32; } while(0);
+#define CTX_VALUE_GET_P_ID(O,N) ((((int64_t)((O).pId_ext[N])) << 32) | (O).primaryId[N])
+
+#define CTX_VALUE_SET_S_ID(O,V) do { int64_t tv = (V); (O).spotId = (uint32_t)tv; (O).spotId_ext = tv >> 32; } while(0);
+#define CTX_VALUE_GET_S_ID(O) ((((int64_t)(O).spotId_ext) << 32) | (O).spotId)
+
+typedef struct FragmentInfo {
+    uint64_t ti;
+    uint32_t readlen;
+    uint8_t  aligned;
+    uint8_t  is_bad;
+    uint8_t  orientation;
+    uint8_t  otherReadNo;
+    uint8_t  sglen;
+    uint8_t  cskey;
+} FragmentInfo;
+
+typedef struct context_t {
+    const KLoadProgressbar *progress[4];
+    KBTree *key2id[NUM_ID_SPACES];
+    char *key2id_names;
+    MMArray *id2value;
+    KMemBank *fragsBoth; /*** mate will be there soon ***/
+    KMemBank *fragsOne;  /*** mate may not be found soon or even show up ***/
+    int64_t spotId;
+    int64_t primaryId;
+    int64_t secondId;
+    uint64_t alignCount;
+    
+    uint32_t idCount[NUM_ID_SPACES];
+    uint32_t key2id_hash[NUM_ID_SPACES];
+
+    unsigned key2id_max;
+    unsigned key2id_name_max;
+    unsigned key2id_name_alloc;
+    unsigned key2id_count;
+    
+    unsigned key2id_name[NUM_ID_SPACES];
+    /* this array is kept in name order */
+    /* this maps the names to key2id and idCount */
+    unsigned key2id_oid[NUM_ID_SPACES];
+    
+    unsigned pass;
+    bool isColorSpace;
+} context_t;
+
+static char const *Print_ctx_value_t(ctx_value_t const *const self)
+{
+    static char buffer[4096];
+    rc_t rc = string_printf(buffer, sizeof(buffer), NULL, "pid: { %lu, %lu }, sid: %lu, fid: %u, alc: { %u, %u }, flg: %x", CTX_VALUE_GET_P_ID(*self, 0), CTX_VALUE_GET_P_ID(*self, 1), CTX_VALUE_GET_S_ID(*self), self->fragmentId, self->alignmentCount[0], self->alignmentCount[1], self->alignmentCount[2]);
+
+    if (rc)
+        return 0;
+    return buffer;
+}
+
+static rc_t MMArrayMake(MMArray **rslt, KFile *fp, uint32_t elemSize)
+{
+    MMArray *const self = calloc(1, sizeof(*self));
+
+    if (self == NULL)
+        return RC(rcExe, rcMemMap, rcConstructing, rcMemory, rcExhausted);
+    self->elemSize = (elemSize + 3) & ~(3u); /** align to 4 byte **/
+    self->fp = fp;
+    KFileAddRef(fp);
+    *rslt = self;
+    return 0;
+}
+
+#define PERF 0
+
+static rc_t MMArrayGet(MMArray *const self, void **const value, uint64_t const element)
+{
+    unsigned const bin_no = element >> 32;
+    unsigned const subbin = ((uint32_t)element) >> MMA_NUM_CHUNKS_BITS;
+    unsigned const in_bin = (uint32_t)element & (MMA_SUBCHUNK_SIZE - 1);
+
+    if (bin_no >= sizeof(self->map)/sizeof(self->map[0]))
+        return RC(rcExe, rcMemMap, rcConstructing, rcId, rcExcessive);
+    
+    if (self->map[bin_no].submap[subbin].base == NULL) {
+        size_t const chunk = MMA_SUBCHUNK_SIZE * self->elemSize;
+        size_t const fsize = self->fsize + chunk;
+        rc_t rc = KFileSetSize(self->fp, fsize);
+        
+        if (rc == 0) {
+            KMMap *mmap;
+            
+            self->fsize = fsize;
+            rc = KMMapMakeRgnUpdate(&mmap, self->fp, self->fsize, chunk);
+            if (rc == 0) {
+                void *base;
+                
+                rc = KMMapAddrUpdate(mmap, &base);
+                if (rc == 0) {
+#if PERF
+                    static unsigned mapcount = 0;
+
+                    (void)PLOGMSG(klogInfo, (klogInfo, "Number of mmaps: $(cnt)", "cnt=%u", ++mapcount));
+#endif
+                    self->map[bin_no].submap[subbin].mmap = mmap;
+                    self->map[bin_no].submap[subbin].base = base;
+
+                    goto GET_MAP;
+                }
+                KMMapRelease(mmap);
+            }
+        }
+        return rc;
+    }
+GET_MAP:
+    *value = &self->map[bin_no].submap[subbin].base[(size_t)in_bin * self->elemSize];
+    return 0;
+}
+
+static void MMArrayWhack(MMArray *self)
+{
+    unsigned i;
+
+    for (i = 0; i != sizeof(self->map)/sizeof(self->map[0]); ++i) {
+        unsigned j;
+        
+        for (j = 0; j != sizeof(self->map[0].submap)/sizeof(self->map[0].submap[0]); ++j) {
+            if (self->map[i].submap[j].mmap)
+                KMMapRelease(self->map[i].submap[j].mmap);
+            self->map[i].submap[j].mmap = NULL;
+            self->map[i].submap[j].base = NULL;
+        }
+    }
+    KFileRelease(self->fp);
+    free(self);
+}
+
+static rc_t OpenKBTree(KBTree **const rslt, unsigned n, unsigned max)
+{
+    size_t const cacheSize = (((G.cache_size - (G.cache_size / 2) - (G.cache_size / 8)) / max)
+                            + 0xFFFFF) & ~((size_t)0xFFFFF);
+    KFile *file = NULL;
+    KDirectory *dir;
+    char fname[4096];
+    rc_t rc;
+    
+    rc = KDirectoryNativeDir(&dir);
+    if (rc)
+        return rc;
+    
+    rc = string_printf(fname, sizeof(fname), NULL, "%s/key2id.%u.%u", G.tmpfs, G.pid, n); if (rc) return rc;
+    rc = KDirectoryCreateFile(dir, &file, true, 0600, kcmInit, fname);
+    KDirectoryRemove(dir, 0, fname);
+    KDirectoryRelease(dir);
+    if (rc == 0) {
+        rc = KBTreeMakeUpdate(rslt, file, cacheSize,
+                              false, kbtOpaqueKey,
+                              1, 255, sizeof ( uint32_t ),
+                              NULL
+                              );
+        KFileRelease(file);
+#if PERF
+        if (rc == 0) {
+            static unsigned treecount = 0;
+
+            (void)PLOGMSG(klogInfo, (klogInfo, "Number of trees: $(cnt)", "cnt=%u", ++treecount));
+        }
+#endif
+    }
+    return rc;
+}
+
+static rc_t GetKeyIDOld(context_t *const ctx, uint64_t *const rslt, bool *const wasInserted, char const key[], char const name[], unsigned const namelen)
+{
+    unsigned const keylen = strlen(key);
+    rc_t rc;
+    uint64_t tmpKey;
+
+    if (ctx->key2id_count == 0) {
+        rc = OpenKBTree(&ctx->key2id[0], 1, 1);
+        if (rc) return rc;
+        ctx->key2id_count = 1;
+    }
+    if (memcmp(key, name, keylen) == 0) {
+        /* qname starts with read group; no append */
+        tmpKey = ctx->idCount[0];
+        rc = KBTreeEntry(ctx->key2id[0], &tmpKey, wasInserted, name, namelen);
+    }
+    else {
+        char sbuf[4096];
+        char *buf = sbuf;
+        char *hbuf = NULL;
+        size_t bsize = sizeof(sbuf);
+        size_t actsize;
+        
+        if (keylen + namelen + 2 > bsize) {
+            hbuf = malloc(bsize = keylen + namelen + 2);
+            if (hbuf == NULL)
+                return RC(rcExe, rcName, rcAllocating, rcMemory, rcExhausted);
+            buf = hbuf;
+        }
+        rc = string_printf(buf, bsize, &actsize, "%s\t%.*s", key, (int)namelen, name);
+        
+        tmpKey = ctx->idCount[0];
+        rc = KBTreeEntry(ctx->key2id[0], &tmpKey, wasInserted, buf, actsize);
+        if (hbuf)
+            free(hbuf);
+    }
+    if (rc == 0) {
+        *rslt = tmpKey;
+        if (*wasInserted)
+            ++ctx->idCount[0];
+    }
+    return rc;
+}
+
+static unsigned HashKey(void const *key, unsigned keylen)
+{
+    /* There is nothing special about this hash. It was randomly generated. */
+    static const uint8_t T1[] = {
+         64, 186,  39, 203,  54, 211,  98,  32,  26,  23, 219,  94,  77,  60,  56, 184,
+        129, 242,  10,  91,  84, 192,  19, 197, 231, 133, 125, 244,  48, 176, 160, 164,
+         17,  41,  57, 137,  44, 196, 116, 146, 105,  40, 122,  47, 220, 226, 213, 212,
+        107, 191,  52, 144,   9, 145,  81, 101, 217, 206,  85, 134, 143,  58, 128,  20,
+        236, 102,  83, 149, 148, 180, 167, 163,  12, 239,  31,   0,  73, 152,   1,  15,
+         75, 200,   4, 165,   5,  66,  25, 111, 255,  70, 174, 151,  96, 126, 147,  34,
+        112, 161, 127, 181, 237,  78,  37,  74, 222, 123,  21, 132,  95,  51, 141,  45,
+         61, 131, 193,  68,  62, 249, 178,  33,   7, 195, 228,  82,  27,  46, 254,  90,
+        185, 240, 246, 124, 205, 182,  42,  22, 198,  69, 166,  92, 169, 136, 223, 245,
+        118,  97, 115,  80, 252, 209,  49,  79, 221,  38,  28,  35,  36, 208, 187, 248,
+        158, 201, 202, 168,   2,  18, 189, 119, 216, 214,  11,   6,  89,  16, 229, 109,
+        120,  43, 162, 106, 204,   8, 199, 235, 142, 210,  86, 153, 227, 230,  24, 100,
+        224, 113, 190, 243, 218, 215, 225, 173,  99, 238, 138,  59, 183, 154, 171, 232,
+        157, 247, 233,  67,  88,  50, 253, 251, 140, 104, 156, 170, 150, 103, 117, 110,
+        155,  72, 207, 250, 159, 194, 177, 130, 135,  87,  71, 175,  14,  55, 172, 121,
+        234,  13,  30, 241,  93, 188,  53, 114,  76,  29,  65,   3, 179, 108,  63, 139
+    };
+    unsigned h = 0x55;
+    unsigned i = keylen;
+    
+    do { h = T1[h ^ ((uint8_t)i)]; } while ((i >>= 8) != 0);
+
+    for (i = 0; i != keylen; ++i)
+        h = T1[h ^ ((uint8_t const *)key)[i]];
+
+    return h;
+}
+
+static rc_t GetKeyID(context_t *const ctx, uint64_t *const rslt, bool *const wasInserted, char const key[], char const name[], unsigned const namelen)
+{
+    if (ctx->key2id_max == 1)
+        return GetKeyIDOld(ctx, rslt, wasInserted, key, name, namelen);
+    else {
+        unsigned const keylen = strlen(key);
+        unsigned const h = HashKey(key, keylen);
+        unsigned f;
+        unsigned e = ctx->key2id_count;
+        uint64_t tmpKey;
+        
+        *rslt = 0;
+        {{
+            uint32_t const bucket_value = ctx->key2id_hash[h];
+            unsigned const n  = (uint8_t) bucket_value;
+            unsigned const i1 = (uint8_t)(bucket_value >>  8);
+            unsigned const i2 = (uint8_t)(bucket_value >> 16);
+            unsigned const i3 = (uint8_t)(bucket_value >> 24);
+            
+            if (n > 0 && strcmp(key, ctx->key2id_names + ctx->key2id_name[i1]) == 0) {
+                f = i1;
+                /*
+                ctx->key2id_hash[h] = (i3 << 24) | (i2 << 16) | (i1 << 8) | n;
+                 */
+                goto GET_ID;
+            }
+            if (n > 1 && strcmp(key, ctx->key2id_names + ctx->key2id_name[i2]) == 0) {
+                f = i2;
+                ctx->key2id_hash[h] = (i3 << 24) | (i1 << 16) | (i2 << 8) | n;
+                goto GET_ID;
+            }
+            if (n > 2 && strcmp(key, ctx->key2id_names + ctx->key2id_name[i3]) == 0) {
+                f = i3;
+                ctx->key2id_hash[h] = (i2 << 24) | (i1 << 16) | (i3 << 8) | n;
+                goto GET_ID;
+            }
+        }}
+        f = 0;
+        while (f < e) {
+            unsigned const m = (f + e) / 2;
+            unsigned const oid = ctx->key2id_oid[m];
+            int const diff = strcmp(key, ctx->key2id_names + ctx->key2id_name[oid]);
+            
+            if (diff < 0)
+                e = m;
+            else if (diff > 0)
+                f = m + 1;
+            else {
+                f = oid;
+                goto GET_ID;
+            }
+        }
+        if (ctx->key2id_count < ctx->key2id_max) {
+            unsigned const name_max = ctx->key2id_name_max + keylen + 1;
+            KBTree *tree;
+            rc_t rc = OpenKBTree(&tree, ctx->key2id_count + 1, 1); /* ctx->key2id_max); */
+            
+            if (rc) return rc;
+            
+            if (ctx->key2id_name_alloc < name_max) {
+                unsigned alloc = ctx->key2id_name_alloc;
+                void *tmp;
+                
+                if (alloc == 0)
+                    alloc = 4096;
+                while (alloc < name_max)
+                    alloc <<= 1;
+                tmp = realloc(ctx->key2id_names, alloc);
+                if (tmp == NULL)
+                    return RC(rcExe, rcName, rcAllocating, rcMemory, rcExhausted);
+                ctx->key2id_names = tmp;
+                ctx->key2id_name_alloc = alloc;
+            }
+            if (f < ctx->key2id_count) {
+                memmove(&ctx->key2id_oid[f + 1], &ctx->key2id_oid[f], (ctx->key2id_count - f) * sizeof(ctx->key2id_oid[f]));
+            }
+            ctx->key2id_oid[f] = ctx->key2id_count;
+            ++ctx->key2id_count;
+            f = ctx->key2id_oid[f];
+            ctx->key2id_name[f] = ctx->key2id_name_max;
+            ctx->key2id_name_max = name_max;
+
+            memcpy(&ctx->key2id_names[ctx->key2id_name[f]], key, keylen + 1);
+            ctx->key2id[f] = tree;
+            ctx->idCount[f] = 0;
+            if ((uint8_t)ctx->key2id_hash[h] < 3) {
+                unsigned const n = (uint8_t)ctx->key2id_hash[h] + 1;
+                
+                ctx->key2id_hash[h] = (((ctx->key2id_hash[h] & ~(0xFFu)) | f) << 8) | n;
+            }
+            else {
+                /* the hash function isn't working too well
+                 * keep the 3 mru
+                 */
+                ctx->key2id_hash[h] = (((ctx->key2id_hash[h] & ~(0xFFu)) | f) << 8) | 3;
+            }
+        GET_ID:
+            tmpKey = ctx->idCount[f];
+            rc = KBTreeEntry(ctx->key2id[f], &tmpKey, wasInserted, name, namelen);
+            if (rc == 0) {
+                *rslt = (((uint64_t)f) << 32) | tmpKey;
+                if (*wasInserted)
+                    ++ctx->idCount[f];
+                assert(tmpKey < ctx->idCount[f]);
+            }
+            return rc;
+        }
+        return RC(rcExe, rcTree, rcAllocating, rcConstraint, rcViolated);
+    }
+}
+
+static rc_t OpenMMapFile(context_t *const ctx, KDirectory *const dir)
+{
+    KFile *file = NULL;
+    char fname[4096];
+    rc_t rc = string_printf(fname, sizeof(fname), NULL, "%s/id2value.%u", G.tmpfs, G.pid);
+    
+    if (rc)
+        return rc;
+    
+    rc = KDirectoryCreateFile(dir, &file, true, 0600, kcmInit, fname);
+    KDirectoryRemove(dir, 0, fname);
+    if (rc == 0)
+        rc = MMArrayMake(&ctx->id2value, file, sizeof(ctx_value_t));
+    KFileRelease(file);
+    return rc;
+}
+
+static rc_t OpenMBankFile(context_t *const ctx, KDirectory *const dir, int which, size_t climit)
+{
+    KFile *file = NULL;
+    char fname[4096];
+    char const *const suffix = which == 1 ? "One" : "Both";
+    KMemBank **const mbank = which == 1 ? &ctx->fragsOne : &ctx->fragsBoth;
+    rc_t rc = string_printf(fname, sizeof(fname), NULL, "%s/frag_data%s.%u", G.tmpfs, suffix, G.pid);
+    
+    if (rc)
+        return rc;
+    
+    rc = KDirectoryCreateFile(dir, &file, true, 0600, kcmInit, fname);
+    KDirectoryRemove(dir, 0, fname);
+    if (rc == 0) {
+        KPageFile *backing;
+        
+        rc = KPageFileMakeUpdate(&backing, file, climit, false);
+        KFileRelease(file);
+        if (rc == 0) {
+            rc = KMemBankMake(mbank, FRAG_CHUNK_SIZE, 0, backing);
+            KPageFileRelease(backing);
+        }
+    }
+    return rc;
+}
+
+static rc_t SetupContext(context_t *ctx, unsigned numfiles)
+{
+    rc_t rc = 0;
+
+    memset(ctx, 0, sizeof(*ctx));
+    
+    if (G.mode == mode_Archive) {
+        KDirectory *dir;
+        size_t fragSizeBoth; /*** temporary hold for first side of mate pair with both sides aligned**/
+        size_t fragSizeOne; /*** temporary hold for first side of mate pair with one side aligned**/
+
+        fragSizeBoth    =   (G.cache_size / 8);
+        fragSizeOne     =   (G.cache_size / 2);
+
+        rc = KLoadProgressbar_Make(&ctx->progress[0], 0); if (rc) return rc;
+        rc = KLoadProgressbar_Make(&ctx->progress[1], 0); if (rc) return rc;
+        rc = KLoadProgressbar_Make(&ctx->progress[2], 0); if (rc) return rc;
+        rc = KLoadProgressbar_Make(&ctx->progress[3], 0); if (rc) return rc;
+        
+        KLoadProgressbar_Append(ctx->progress[0], 100 * numfiles);
+        
+        rc = KDirectoryNativeDir(&dir);
+        if (rc == 0)
+            rc = OpenMMapFile(ctx, dir);
+        if (rc == 0)
+            rc = OpenMBankFile(ctx, dir, 0, fragSizeBoth);
+        if (rc == 0)
+            rc = OpenMBankFile(ctx, dir, 1, fragSizeOne);
+        KDirectoryRelease(dir);
+    }
+    return rc;
+}
+
+static void ContextReleaseMemBank(context_t *ctx)
+{
+    KMemBankRelease(ctx->fragsOne);
+    ctx->fragsOne = NULL;
+    KMemBankRelease(ctx->fragsBoth);
+    ctx->fragsBoth = NULL;
+}
+
+static void ContextRelease(context_t *ctx)
+{
+    KLoadProgressbar_Release(ctx->progress[0], true);
+    KLoadProgressbar_Release(ctx->progress[1], true);
+    KLoadProgressbar_Release(ctx->progress[2], true);
+    KLoadProgressbar_Release(ctx->progress[3], true);
+    MMArrayWhack(ctx->id2value);
+}
+
+static
+void COPY_QUAL(uint8_t D[], uint8_t const S[], unsigned const L, bool const R) 
+{
+    if (R) {
+        unsigned i;
+        unsigned j;
+        
+        for (i = 0, j = L - 1; i != L; ++i, --j)
+            D[i] = S[j];
+    }
+    else
+        memcpy(D, S, L);
+}
+
+static
+void COPY_READ(INSDC_dna_text D[], INSDC_dna_text const S[], unsigned const L, bool const R)
+{
+    static INSDC_dna_text const compl[] = {
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 , '.',  0 , 
+        '0', '1', '2', '3',  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 , 'T', 'V', 'G', 'H',  0 ,  0 , 'C', 
+        'D',  0 ,  0 , 'M',  0 , 'K', 'N',  0 , 
+         0 ,  0 , 'Y', 'S', 'A', 'A', 'B', 'W', 
+         0 , 'R',  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 , 'T', 'V', 'G', 'H',  0 ,  0 , 'C', 
+        'D',  0 ,  0 , 'M',  0 , 'K', 'N',  0 , 
+         0 ,  0 , 'Y', 'S', 'A', 'A', 'B', 'W', 
+         0 , 'R',  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 , 
+         0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
+    };
+    if (R) {
+        unsigned i;
+        unsigned j;
+        
+        for (i = 0, j = L - 1; i != L; ++i, --j)
+            D[i] = compl[((uint8_t const *)S)[j]];
+    }
+    else
+        memcpy(D, S, L);
+}
+
+static rc_t OpenBAM(const BAMFile **bam, VDatabase *db, const char bamFile[])
+{
+    rc_t rc = BAMFileMakeWithHeader(bam, G.headerText, bamFile);
+    if (rc) {
+        (void)PLOGERR(klogErr, (klogErr, rc, "Failed to open '$(file)'", "file=%s", bamFile));
+    }
+    else if (db) {
+        KMetadata *dbmeta;
+        
+        rc = VDatabaseOpenMetadataUpdate(db, &dbmeta);
+        if (rc == 0) {
+            KMDataNode *node;
+            
+            rc = KMetadataOpenNodeUpdate(dbmeta, &node, "BAM_HEADER");
+            KMetadataRelease(dbmeta);
+            if (rc == 0) {
+                char const *header;
+                size_t size;
+                
+                rc = BAMFileGetHeaderText(*bam, &header, &size);
+                if (rc == 0) {
+                    rc = KMDataNodeWrite(node, header, size);
+                }
+                KMDataNodeRelease(node);
+            }
+        }
+    }
+
+    return rc;
+}
+
+static rc_t VerifyReferences(BAMFile const *bam, Reference const *ref)
+{
+    rc_t rc = 0;
+    uint32_t n;
+    unsigned i;
+    
+    BAMFileGetRefSeqCount(bam, &n);
+    for (i = 0; i != n; ++i) {
+        BAMRefSeq const *refSeq;
+        
+        BAMFileGetRefSeq(bam, i, &refSeq);
+        if (G.refFilter && strcmp(refSeq->name, G.refFilter) != 0)
+            continue;
+        
+        rc = ReferenceVerify(ref, refSeq->name, refSeq->length, refSeq->checksum);
+        if (rc) {
+            if (GetRCObject(rc) == rcChecksum && GetRCState(rc) == rcUnequal) {
+#if NCBI
+                (void)PLOGMSG(klogWarn, (klogWarn, "Reference: '$(name)', Length: $(len); checksums do not match", "name=%s,len=%u", refSeq->name, (unsigned)refSeq->length));
+#endif
+            }
+            else
+            if (GetRCObject(rc) == rcSize && GetRCState(rc) == rcUnequal) {
+                (void)PLOGMSG(klogWarn, (klogWarn, "Reference: '$(name)', Length: $(len); lengths do not match", "name=%s,len=%u", refSeq->name, (unsigned)refSeq->length));
+            }
+            else if (GetRCObject(rc) == rcSize && GetRCState(rc) == rcEmpty) {
+                (void)PLOGMSG(klogWarn, (klogWarn, "Reference: '$(name)', Length: $(len); fasta file is empty", "name=%s,len=%u", refSeq->name, (unsigned)refSeq->length));
+            }
+            else if (GetRCObject(rc) == rcId && GetRCState(rc) == rcNotFound) {
+                (void)PLOGMSG(klogWarn, (klogWarn, "Reference: '$(name)', Length: $(len); no match found", "name=%s,len=%u", refSeq->name, (unsigned)refSeq->length));
+            }
+            else {
+                (void)PLOGERR(klogWarn, (klogWarn, rc, "Reference: '$(name)', Length: $(len); error", "name=%s,len=%u", refSeq->name, (unsigned)refSeq->length));
+            }
+        }
+        else if (G.onlyVerifyReferences) {
+            (void)PLOGMSG(klogInfo, (klogInfo, "Reference: '$(name)', Length: $(len); match found", "name=%s,len=%u", refSeq->name, (unsigned)refSeq->length));
+        }
+    }
+    return 0;
+}
+
+static uint8_t GetMapQ(BAMAlignment const *rec)
+{
+    uint8_t mapQ;
+    
+    BAMAlignmentGetMapQuality(rec, &mapQ);
+    return mapQ;
+}
+
+static void EditAlignedQualities(uint8_t qual[], bool const hasMismatch[], unsigned readlen)
+{
+    unsigned i;
+    
+    for (i = 0; i < readlen; ++i) {
+        uint8_t const q = hasMismatch[i] ? G.alignedQualValue : qual[i];
+        
+        qual[i] = q;
+    }
+}
+
+static void EditUnalignedQualities(uint8_t qual[], bool const hasMismatch[], unsigned readlen)
+{
+    unsigned i;
+    
+    for (i = 0; i < readlen; ++i) {
+        uint8_t const q = (qual[i] & 0x7F) | (hasMismatch[i] ? 0x80 : 0);
+        
+        qual[i] = q;
+    }
+}
+
+static void AlignmentRecordInit(AlignmentRecord *self, void *buffer, unsigned readlen, char **endp)
+{
+    memset(self, 0, sizeof(*self));
+
+    self->data.seq_read_id.buffer = &self->read_id;
+    self->data.seq_read_id.elements = 1;
+    self->data.ref_id.buffer = &self->ref_id;
+    self->data.ref_id.elements = 1;
+    if (G.expectUnsorted) {
+        self->data.ref_start.buffer = &self->ref_start;
+        self->data.ref_start.elements = 1;
+    }
+    else {
+        self->data.global_ref_start.buffer = &self->global_ref_start;
+        self->data.global_ref_start.elements = 1;
+    }
+    self->data.ref_orientation.buffer = &self->ref_orientation;
+    self->data.ref_orientation.elements = 1;
+    self->data.mapq.buffer = &self->mapq;
+    self->data.mapq.elements = 1;
+    self->data.tmp_key_id.buffer = &self->tmp_key_id;
+    self->data.tmp_key_id.elements = 1;
+    
+    self->data.read_start.buffer = &self->read_start;
+    self->data.read_start.elements = 1;
+    self->data.read_len.buffer = &self->read_len;
+    self->data.read_len.elements = 1;
+    
+    self->data.mate_ref_orientation.buffer = &self->mate_ref_orientation;
+    self->data.mate_ref_orientation.elements = 1;
+    self->data.mate_ref_id.buffer = &self->mate_ref_id;
+    self->data.mate_ref_id.elements = 1;
+    self->data.mate_ref_pos.buffer = &self->mate_ref_pos;
+    self->data.mate_ref_pos.elements = 1;
+    self->data.mate_align_id.buffer = &self->mate_align_id;
+    self->data.mate_align_id.elements = 1;
+    self->data.template_len.buffer = &self->template_len;
+    self->data.template_len.elements = 1;
+    
+    self->data.ref_offset.buffer = (int32_t *)buffer;
+    self->data.has_mismatch.buffer = (bool *)&AR_OFFSET(*self)[readlen];
+    self->data.has_mismatch.elements = readlen;
+    self->data.has_ref_offset.buffer = &AR_HAS_MISMATCH(*self)[readlen];
+    self->data.has_ref_offset.elements = readlen;
+    self->data.mismatch.buffer = (char *)&AR_HAS_OFFSET(*self)[readlen];
+    
+    *endp = (char *)&AR_MISMATCH(*self)[readlen];
+}
+
+static bool platform_cmp(char const platform[], char const test[])
+{
+    unsigned i;
+
+    for (i = 0; ; ++i) {
+        int ch1 = test[i];
+        int ch2 = toupper(platform[i]);
+        
+        if (ch1 != ch2)
+            break;
+        if (ch1 == 0)
+            return true;
+    }
+    return false;
+}
+
+static
+INSDC_SRA_platform_id GetINSDCPlatform(BAMFile const *bam, char const name[]) {
+    if (name) {
+        BAMReadGroup const *rg;
+
+        BAMFileGetReadGroupByName(bam, name, &rg);
+        if (rg && rg->platform) {
+            switch (toupper(rg->platform[0])) {
+            case 'C':
+                if (platform_cmp(rg->platform, "COMPLETE GENOMICS"))
+                    return SRA_PLATFORM_COMPLETE_GENOMICS;
+                if (platform_cmp(rg->platform, "CAPILLARY"))
+                    return SRA_PLATFORM_SANGER;
+                break;
+            case 'H':
+                if (platform_cmp(rg->platform, "HELICOS"))
+                    return SRA_PLATFORM_HELICOS;
+                break;
+            case 'I':
+                if (platform_cmp(rg->platform, "ILLUMINA"))
+                    return SRA_PLATFORM_ILLUMINA;
+                if (platform_cmp(rg->platform, "IONTORRENT"))
+                    return SRA_PLATFORM_ION_TORRENT;
+                break;
+            case 'L':
+                if (platform_cmp(rg->platform, "LS454"))
+                    return SRA_PLATFORM_454;
+                break;
+            case 'P':
+                if (platform_cmp(rg->platform, "PACBIO"))
+                    return SRA_PLATFORM_PACBIO_SMRT;
+                break;
+            case 'S':
+                if (platform_cmp(rg->platform, "SOLID"))
+                    return SRA_PLATFORM_ABSOLID;
+                break;
+            default:
+                break;
+            }
+        }
+    }
+    return SRA_PLATFORM_UNDEFINED;
+}
+
+static
+rc_t CheckLimitAndLogError(void)
+{
+    ++G.errCount;
+    if (G.maxErrCount > 0 && G.errCount > G.maxErrCount) {
+        (void)PLOGERR(klogErr, (klogErr, RC(rcAlign, rcFile, rcReading, rcError, rcExcessive), "Number of errors $(cnt) exceeds limit of $(max): Exiting", "cnt=%u,max=%u", G.errCount, G.maxErrCount));
+        return RC(rcAlign, rcFile, rcReading, rcError, rcExcessive);
+    }
+    return 0;
+}
+
+static
+void RecordNoMatch(char const readName[], char const refName[], uint32_t const refPos)
+{
+    if (G.noMatchLog) {
+        static uint64_t lpos = 0;
+        char logbuf[256];
+        size_t len;
+        
+        if (string_printf(logbuf, sizeof(logbuf), &len, "%s\t%s\t%u\n", readName, refName, refPos) == 0) {
+            KFileWrite(G.noMatchLog, lpos, logbuf, len, NULL);
+            lpos += len;
+        }
+    }
+}
+
+static
+rc_t LogNoMatch(char const readName[], char const refName[], unsigned rpos, unsigned matches)
+{
+    rc_t const rc = CheckLimitAndLogError();
+    static unsigned count = 0;
+    
+    ++count;
+    if (rc) {
+        (void)PLOGMSG(klogInfo, (klogInfo, "This is the last warning; this class of warning occurred $(occurred) times",
+                                 "occurred=%u", count));
+        (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' contains too few ($(count)) matching bases to reference '$(ref)' at $(pos)",
+                                 "name=%s,ref=%s,pos=%u,count=%u", readName, refName, rpos, matches));
+    }
+    else if (G.maxWarnCount_NoMatch == 0 || count < G.maxWarnCount_NoMatch)
+        (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' contains too few ($(count)) matching bases to reference '$(ref)' at $(pos)",
+                                 "name=%s,ref=%s,pos=%u,count=%u", readName, refName, rpos, matches));
+    return rc;
+}
+
+static
+rc_t LogDupConflict(char const readName[])
+{
+    rc_t const rc = CheckLimitAndLogError();
+    static unsigned count = 0;
+    
+    ++count;
+    if (rc) {
+        (void)PLOGMSG(klogInfo, (klogInfo, "This is the last warning; this class of warning occurred $(occurred) times",
+                                 "occurred=%u", count));
+        (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+                                 "Spot '$(name)' is both a duplicate and NOT a duplicate!",
+                                 "name=%s", readName));
+    }
+    else if (G.maxWarnCount_DupConflict == 0 || count < G.maxWarnCount_DupConflict)
+        (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+                                 "Spot '$(name)' is both a duplicate and NOT a duplicate!",
+                                 "name=%s", readName));
+    return rc;
+}
+
+static rc_t ProcessBAM(char const bamFile[], context_t *ctx, VDatabase *db,
+                       Reference *ref, Sequence *seq, Alignment *align,
+                       bool *had_alignments, bool *had_sequences)
+{
+    const BAMFile *bam;
+    const BAMAlignment *rec;
+    KDataBuffer buf;
+    KDataBuffer fragBuf;
+    KDataBuffer cigBuf;
+    rc_t rc;
+    int32_t lastRefSeqId = -1;
+    size_t rsize;
+    uint64_t keyId = 0;
+    uint64_t reccount = 0;
+    SequenceRecord srec;
+    char spotGroup[512];
+    size_t namelen;
+    unsigned progress = 0;
+    unsigned warned = 0;
+    long     fcountBoth=0;
+    long     fcountOne=0;
+    int skipRefSeqID = -1;
+    uint64_t recordsProcessed = 0;
+    uint64_t filterFlagConflictRecords=0; /*** counts number of conflicts between flags 0x400 and 0x200 ***/
+#define MAX_WARNINGS_FLAG_CONFLICT 10000 /*** maximum errors to report ***/
+
+    bool isColorSpace = false;
+    bool isNotColorSpace = G.noColorSpace;
+    char alignGroup[32];
+    size_t alignGroupLen;
+    
+    rc = OpenBAM(&bam, db, bamFile);
+    if (rc) return rc;
+    if (!G.noVerifyReferences && ref != NULL) {
+        rc = VerifyReferences(bam, ref);
+        if (G.onlyVerifyReferences) {
+            BAMFileRelease(bam);
+            return rc;
+        }
+    }
+    if (ctx->key2id_max == 0) {
+        uint32_t rgcount;
+        unsigned rgi;
+        
+        BAMFileGetReadGroupCount(bam, &rgcount);
+        if (rgcount > (sizeof(ctx->key2id)/sizeof(ctx->key2id[0]) - 1))
+            ctx->key2id_max = 1;
+        else
+            ctx->key2id_max = sizeof(ctx->key2id)/sizeof(ctx->key2id[0]);
+        
+        for (rgi = 0; rgi != rgcount; ++rgi) {
+            BAMReadGroup const *rg;
+            
+            BAMFileGetReadGroup(bam, rgi, &rg);
+            if (rg && rg->platform && platform_cmp(rg->platform, "CAPILLARY")) {
+                G.hasTI = true;
+                break;
+            }
+        }
+    }
+    memset(&srec, 0, sizeof(srec));
+    
+    rc = KDataBufferMake(&cigBuf, 32, 0);
+    if (rc)
+        return rc;
+    
+    rc = KDataBufferMake(&fragBuf, 8, FRAG_CHUNK_SIZE);
+    if (rc)
+        return rc;
+    
+    rc = KDataBufferMake(&buf, (sizeof(int32_t) + sizeof(bool) * 2 + sizeof(char) * 2 + sizeof(uint8_t))*8, 0);
+    if (rc)
+        return rc;
+    
+    if (rc == 0) {
+        (void)PLOGMSG(klogInfo, (klogInfo, "Loading '$(file)'", "file=%s", bamFile));
+    }
+    while (rc == 0 && (rc = Quitting()) == 0) {
+        bool aligned;
+        AlignmentRecord data;
+        uint32_t readlen;
+        uint16_t flags;
+        int64_t rpos=0;
+        char *seqDNA;
+        const BAMRefSeq *refSeq;
+        ctx_value_t *value;
+        bool wasInserted;
+        int32_t refSeqId=-1;
+        uint8_t *qual;
+        bool mated;
+        const char *name;
+        char cskey = 0;
+        bool originally_aligned;
+        bool isPrimary;
+        uint32_t opCount;
+        bool hasCG;
+        uint64_t ti = 0;
+        uint32_t csSeqLen = 0;
+
+        rc = BAMFileRead(bam, &rec);
+        if (rc) {
+            if (GetRCModule(rc) == rcAlign && GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound)
+                rc = 0;
+            break;
+        }
+        if ((unsigned)(BAMFileGetProportionalPosition(bam) * 100.0) > progress) {
+            unsigned new_value = BAMFileGetProportionalPosition(bam) * 100.0;
+            KLoadProgressbar_Process(ctx->progress[0], new_value - progress, false);
+            progress = new_value;
+        }
+
+
+        /**************************************************************/
+        if (!G.noColorSpace) {
+            if (BAMAlignmentHasColorSpace(rec)) {/*BAM*/
+                if (isNotColorSpace) {
+                MIXED_BASE_AND_COLOR:
+                    rc = RC(rcApp, rcFile, rcReading, rcData, rcInconsistent);  
+                    (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)' contains base space and color space", "file=%s", bamFile));
+                    goto LOOP_END;
+                }
+                ctx->isColorSpace = isColorSpace = true;
+            }
+            else if (isColorSpace)
+                goto MIXED_BASE_AND_COLOR;
+            else
+                isNotColorSpace = true;
+        }
+        hasCG = BAMAlignmentHasCGData(rec);/*BAM*/
+        if (hasCG) {
+            BAMAlignmentGetCigarCount(rec, &opCount);/*BAM*/
+            rc = KDataBufferResize(&cigBuf, opCount * 2 + 5);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "Failed to resize CIGAR buffer");
+                goto LOOP_END;
+            }
+            
+            rc = KDataBufferResize(&buf, readlen = 35);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "Failed to resize record buffer");
+                goto LOOP_END;
+            }
+            
+            AlignmentRecordInit(&data, buf.base, readlen, &seqDNA);
+            qual = (uint8_t *)&seqDNA[readlen];
+        }
+        else {
+            uint32_t const *tmp;
+            
+            BAMAlignmentGetRawCigar(rec, &tmp, &opCount);/*BAM*/
+            rc = KDataBufferResize(&cigBuf, opCount);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "Failed to resize CIGAR buffer");
+                goto LOOP_END;
+            }
+            memcpy(cigBuf.base, tmp, opCount * sizeof(uint32_t));
+            
+            BAMAlignmentGetReadLength(rec, &readlen);/*BAM*/
+            if (isColorSpace) {
+                BAMAlignmentGetCSSeqLen(rec, &csSeqLen);
+                if (readlen != csSeqLen && readlen != 0) {
+                    rc = RC(rcAlign, rcRow, rcReading, rcData, rcInconsistent);
+                    (void)LOGERR(klogErr, rc, "Sequence length and CS Sequence length are not equal");
+                    goto LOOP_END;
+                }
+            }
+            else if (readlen == 0) {
+            }
+            rc = KDataBufferResize(&buf, readlen | csSeqLen);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "Failed to resize record buffer");
+                goto LOOP_END;
+            }
+            
+            AlignmentRecordInit(&data, buf.base, readlen | csSeqLen, &seqDNA);
+            qual = (uint8_t *)&seqDNA[readlen | csSeqLen];
+        }
+        BAMAlignmentGetSequence(rec, seqDNA);/*BAM*/
+        if (G.useQUAL) {
+            uint8_t const *squal;
+            
+            BAMAlignmentGetQuality(rec, &squal);/*BAM*/
+            memcpy(qual, squal, readlen);
+        }
+        else {
+            uint8_t const *squal;
+            uint8_t qoffset = 0;
+            unsigned i;
+            
+            rc = BAMAlignmentGetQuality2(rec, &squal, &qoffset);/*BAM*/
+            if (rc) {
+                (void)PLOGERR(klogErr, (klogErr, rc, "Spot '$(name)': length of original quality does not match sequence", "name=%s", name));
+                goto LOOP_END;
+            }
+            if (qoffset) {
+                for (i = 0; i != readlen; ++i)
+                    qual[i] = squal[i] - qoffset;
+            }
+            else
+                memcpy(qual, squal, readlen);
+        }
+        if (hasCG) {
+            rc = BAMAlignmentGetCGSeqQual(rec, seqDNA, qual);/*BAM*/
+            if (rc == 0)
+                rc = BAMAlignmentGetCGCigar(rec, cigBuf.base, cigBuf.elem_count, &opCount);/*BAM*/
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "Failed to read CG data");
+                goto LOOP_END;
+            }
+        }
+        if (G.hasTI) {
+            rc = BAMAlignmentGetTI(rec, &ti);/*BAM*/
+            if (rc)
+                ti = 0;
+            rc = 0;
+        }
+        data.data.align_group.buffer = alignGroup;
+        if (BAMAlignmentGetCGAlignGroup(rec, alignGroup, sizeof(alignGroup), &alignGroupLen) == 0)/*BAM*/
+            data.data.align_group.elements = alignGroupLen;
+        else
+            data.data.align_group.elements = 0;
+
+        AR_MAPQ(data) = GetMapQ(rec);
+        BAMAlignmentGetFlags(rec, &flags);/*BAM*/
+        BAMAlignmentGetReadName2(rec, &name, &namelen);/*BAM*/
+        {{
+            char const *rgname;
+
+            BAMAlignmentGetReadGroupName(rec, &rgname);/*BAM*/
+            if (rgname)
+                strcpy(spotGroup, rgname);
+            else
+                spotGroup[0] = '\0';
+        }}        
+        AR_REF_ORIENT(data) = (flags & BAMFlags_SelfIsReverse) == 0 ? false : true;/*BAM*/
+        isPrimary = (flags & BAMFlags_IsNotPrimary) == 0 ? true : false;/*BAM*/
+        if (G.noSecondary && !isPrimary)
+            goto LOOP_END;
+        originally_aligned = (flags & BAMFlags_SelfIsUnmapped) == 0;/*BAM*/
+        aligned = originally_aligned && (AR_MAPQ(data) >= G.minMapQual);
+        
+        if (aligned && align == NULL) {
+            rc = RC(rcApp, rcFile, rcReading, rcData, rcInconsistent);
+            (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)' contains aligned records", "file=%s", bamFile));
+            goto LOOP_END;
+        }
+        while (aligned) {
+            BAMAlignmentGetPosition(rec, &rpos);/*BAM*/
+            BAMAlignmentGetRefSeqId(rec, &refSeqId);/*BAM*/
+            if (rpos >= 0 && refSeqId >= 0) {
+                if (refSeqId == skipRefSeqID)
+                    goto LOOP_END;
+                if (refSeqId == lastRefSeqId)
+                    break;
+                refSeq = NULL;
+                BAMFileGetRefSeqById(bam, refSeqId, &refSeq);/*BAM*/
+                if (refSeq == NULL) {
+                    rc = RC(rcApp, rcFile, rcReading, rcData, rcInconsistent);
+                    (void)PLOGERR(klogWarn, (klogWarn, rc, "File '$(file)': Spot '$(name)' refers to an unknown Reference number $(refSeqId)", "file=%s,refSeqId=%i,name=%s", bamFile, (int)refSeqId, name));
+                    rc = CheckLimitAndLogError();
+                    goto LOOP_END;
+                }
+                else {
+                    if (G.refFilter && strcmp(G.refFilter, refSeq->name) != 0) {
+                        (void)PLOGMSG(klogInfo, (klogInfo, "Skipping Reference '$(name)'", "name=%s", refSeq->name));
+                        skipRefSeqID = refSeqId;
+                        goto LOOP_END;
+                    }
+                    
+                    rc = ReferenceSetFile(ref, refSeq->name, refSeq->length, refSeq->checksum);
+                    if (rc == 0) {
+                        lastRefSeqId = refSeqId;
+                        break;
+                    }
+                    if (GetRCObject(rc) == rcConstraint && GetRCState(rc) == rcViolated) {
+                        int const level = G.limit2config ? klogWarn : klogErr;
+                        
+                        (void)PLOGMSG(level, (level, "Could not find a Reference to match { name: '$(name)', length: $(rlen) }", "name=%s,rlen=%u", refSeq->name, (unsigned)refSeq->length));
+                    }
+                    else if (!G.limit2config)
+                        (void)PLOGERR(klogErr, (klogErr, rc, "File '$(file)': Spot '$(sname)' refers to an unknown Reference '$(rname)'", "file=%s,rname=%s,sname=%s", bamFile, refSeq->name, name));
+                    if (G.limit2config)
+                        rc = 0;
+                    goto LOOP_END;
+                }
+            }
+            else if (refSeqId < 0) {
+                (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' was marked aligned, but reference id = $(id) is invalid", "name=%.*s,id=%i", namelen, name, refSeqId));
+                if ((rc = CheckLimitAndLogError()) != 0) goto LOOP_END;
+            }
+            else {
+                (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' was marked aligned, but reference position = $(pos) is invalid", "name=%.*s,pos=%i", namelen, name, rpos));
+                if ((rc = CheckLimitAndLogError()) != 0) goto LOOP_END;
+            }
+
+            aligned = false;
+        }
+        if (!aligned && (G.refFilter != NULL || G.limit2config))
+            goto LOOP_END;
+        
+        rc = GetKeyID(ctx, &keyId, &wasInserted, spotGroup, name, namelen);
+        if (rc) {
+            (void)PLOGERR(klogErr, (klogErr, rc, "KBTreeEntry: failed on key '$(key)'", "key=%.*s", namelen, name));
+            goto LOOP_END;
+        }
+        rc = MMArrayGet(ctx->id2value, (void **)&value, keyId);
+        if (rc) {
+            (void)PLOGERR(klogErr, (klogErr, rc, "MMArrayGet: failed on id '$(id)'", "id=%u", keyId));
+            goto LOOP_END;
+        }
+        
+        AR_KEY(data) = keyId;
+        
+        mated = false;
+        if (flags & BAMFlags_WasPaired) {/*BAM*/
+            if ((flags & BAMFlags_IsFirst) != 0)/*BAM*/
+                AR_READNO(data) |= 1;
+            if ((flags & BAMFlags_IsSecond) != 0)/*BAM*/
+                AR_READNO(data) |= 2;
+            switch (AR_READNO(data)) {
+            case 1:
+            case 2:
+                mated = true;
+                break;
+            case 0:
+                if ((warned & 1) == 0) {
+                    (void)LOGMSG(klogWarn, "Spots without fragment info have been encountered");
+                    warned |= 1;
+                }
+                break;
+            case 3:
+                if ((warned & 2) == 0) {
+                    (void)LOGMSG(klogWarn, "Spots with more than two fragments have been encountered");
+                    warned |= 2;
+                }
+                break;
+            }
+        }
+        if (!mated)
+            AR_READNO(data) = 1;
+        
+        if (wasInserted) {
+            memset(value, 0, sizeof(*value));
+            value->unmated = !mated;
+            value->pcr_dup = (flags & BAMFlags_IsDuplicate) == 0 ? 0 : 1;/*BAM*/
+            value->platform = GetINSDCPlatform(bam, spotGroup);
+        }
+        else {
+            if (!G.acceptBadDups && value->pcr_dup != ((flags & BAMFlags_IsDuplicate) == 0 ? 0 : 1)) {/*BAM*/
+                rc = LogDupConflict(name);
+                goto LOOP_END; /* TODO: is this correct? */
+            }
+            value->pcr_dup &= (flags & BAMFlags_IsDuplicate) == 0 ? 0 : 1;/*BAM*/
+            if (mated && value->unmated) {
+                (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+                                         "Spot '$(name)', which was first seen without mate info, now has mate info",
+                                         "name=%s", name));
+                rc = CheckLimitAndLogError();
+                goto LOOP_END;
+            }
+            else if (!mated && !value->unmated) {
+                (void)PLOGERR(klogWarn, (klogWarn, RC(rcApp, rcFile, rcReading, rcData, rcInconsistent),
+                                         "Spot '$(name)', which was first seen with mate info, now has no mate info",
+                                         "name=%s", name));
+                rc = CheckLimitAndLogError();
+                goto LOOP_END;
+            }
+        }
+        
+        ++recordsProcessed;
+
+        if (isPrimary) {
+            switch (AR_READNO(data)) {
+            case 1:
+                if (CTX_VALUE_GET_P_ID(*value, 0) != 0)
+                    isPrimary = false;
+                else if (aligned && value->unaligned_1) {
+                    (void)PLOGMSG(klogWarn, (klogWarn, "Read 1 of spot '$(name)', which was unmapped, is now being mapped at position $(pos) on reference '$(ref)'; this alignment will be considered as secondary", "name=%s,ref=%s,pos=%u", name, refSeq->name, rpos));
+                    isPrimary = false;
+                }
+                break;
+            case 2:
+                if (CTX_VALUE_GET_P_ID(*value, 1) != 0)
+                    isPrimary = false;
+                else if (aligned && value->unaligned_2) {
+                    (void)PLOGMSG(klogWarn, (klogWarn, "Read 2 of spot '$(name)', which was unmapped, is now being mapped at position $(pos) on reference '$(ref)'; this alignment will be considered as secondary", "name=%s,ref=%s,pos=%u", name, refSeq->name, rpos));
+                    isPrimary = false;
+                }
+                break;
+            default:
+                break;
+            }
+        }
+        data.isPrimary = isPrimary;
+        if (aligned) {
+            uint32_t matches = 0;
+            
+            rc = ReferenceRead(ref, &data, rpos, cigBuf.base, opCount, seqDNA, readlen, &matches);
+            if (rc) {
+                aligned = false;
+                
+                if (   (GetRCState(rc) == rcViolated  && GetRCObject(rc) == rcConstraint)
+                    || (GetRCState(rc) == rcExcessive && GetRCObject(rc) == rcRange))
+                {
+                    RecordNoMatch(name, refSeq->name, rpos);
+                }
+                if (GetRCState(rc) == rcViolated && GetRCObject(rc) == rcConstraint) {
+                    rc = LogNoMatch(name, refSeq->name, (unsigned)rpos, (unsigned)matches);
+                }
+                else if (GetRCObject(rc) == rcData && GetRCState(rc) == rcInvalid) {
+                    (void)PLOGERR(klogWarn, (klogWarn, rc, "Spot '$(name)': bad alignment to reference '$(ref)' at $(pos)", "name=%s,ref=%s,pos=%u", name, refSeq->name, rpos));
+                    CheckLimitAndLogError();
+                }
+                else if (GetRCObject(rc) == rcData) {
+                    (void)PLOGERR(klogWarn, (klogWarn, rc, "Spot '$(name)': bad alignment to reference '$(ref)' at $(pos)", "name=%s,ref=%s,pos=%u", name, refSeq->name, rpos));
+                    rc = CheckLimitAndLogError();
+                }
+                else {
+                    (void)PLOGERR(klogWarn, (klogWarn, rc, "Spot '$(name)': error reading reference '$(ref)' at $(pos)", "name=%s,ref=%s,pos=%u", name, refSeq->name, rpos));
+                    rc = CheckLimitAndLogError();
+                }
+                if (rc) goto LOOP_END;
+            }
+        }
+        if (isColorSpace) {
+            /* must be after ReferenceRead */
+            BAMAlignmentGetCSKey(rec, &cskey);/*BAM*/
+            BAMAlignmentGetCSSequence(rec, seqDNA, csSeqLen);/*BAM*/
+            if (!aligned && !G.useQUAL) {
+                uint8_t const *squal;
+                uint8_t qoffset = 0;
+                
+                rc = BAMAlignmentGetCSQuality(rec, &squal, &qoffset);/*BAM*/
+                if (rc) {
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Spot '$(name)': length of colorspace quality does not match sequence", "name=%s", name));
+                    goto LOOP_END;
+                }
+                if (qoffset) {
+                    unsigned i;
+                    
+                    for (i = 0; i < csSeqLen; ++i)
+                        qual[i] = squal[i] - qoffset;
+                }
+                else
+                    memcpy(qual, squal, csSeqLen);
+                readlen = csSeqLen;
+            }
+        }
+        
+        if (aligned) {
+            if (G.editAlignedQual ) EditAlignedQualities  (qual, AR_HAS_MISMATCH(data), readlen);
+            if (G.keepMismatchQual) EditUnalignedQualities(qual, AR_HAS_MISMATCH(data), readlen);
+        }
+        else if (isPrimary) {
+            switch (AR_READNO(data)) {
+            case 1:
+                value->unaligned_1 = 1;
+                break;
+            case 2:
+                value->unaligned_2 = 1;
+                break;
+            default:
+                break;
+            }
+        }
+        if (isPrimary) {
+            switch (AR_READNO(data)) {
+            case 1:
+                if (CTX_VALUE_GET_P_ID(*value, 0) == 0 && aligned) {
+                    data.alignId = ++ctx->primaryId;
+                    CTX_VALUE_SET_P_ID(*value, 0, data.alignId);
+                }
+                break;
+            case 2:
+                if (CTX_VALUE_GET_P_ID(*value, 1) == 0 && aligned) {
+                    data.alignId = ++ctx->primaryId;
+                    CTX_VALUE_SET_P_ID(*value, 1, data.alignId);
+                }
+                break;
+            default:
+                break;
+            }
+        }
+        if (mated) {
+            if (isPrimary || !originally_aligned) {
+                if (CTX_VALUE_GET_S_ID(*value) != 0) {
+                    (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)' has already been assigned a spot id", "name=%.*s", namelen, name));
+                }
+                else if (!value->has_a_read) {
+                    /* new mated fragment - do spot assembly */
+                    unsigned sz;
+                    uint64_t    fragmentId;
+                    FragmentInfo fi;
+                    KMemBank *frags;
+                    int32_t mate_refSeqId = -1;
+                    int64_t pnext = 0;
+                    
+                    memset(&fi, 0, sizeof(fi));
+                    fi.aligned = aligned;
+                    fi.ti = ti;
+                    fi.orientation = AR_REF_ORIENT(data);
+                    fi.otherReadNo = AR_READNO(data);
+                    fi.sglen   = strlen(spotGroup);
+                    fi.readlen = readlen;
+                    fi.cskey = cskey;
+                    fi.is_bad = (flags & BAMFlags_IsLowQuality) != 0;/*BAM*/
+                    sz = sizeof(fi) + 2*fi.readlen + fi.sglen;
+                    if (align) {
+                        BAMAlignmentGetMateRefSeqId(rec, &mate_refSeqId);/*BAM*/
+                        BAMAlignmentGetMatePosition(rec, &pnext);/*BAM*/
+                    }
+                    if(align && mate_refSeqId == refSeqId && pnext > 0 && pnext!=rpos /*** weird case in some bams**/){ 
+                        frags = ctx->fragsBoth;
+                        rc = KMemBankAlloc(frags, &fragmentId, sz, 0);
+                        value->fragmentId = fragmentId*2;
+                        fcountBoth++;
+                    } else {
+                        frags = ctx->fragsOne;
+                        rc = KMemBankAlloc(frags, &fragmentId, sz, 0);
+                        value->fragmentId = fragmentId*2+1;
+                        fcountOne++;
+                    }
+                    if (rc) {
+                        (void)LOGERR(klogErr, rc, "KMemBankAlloc failed");
+                        goto LOOP_END;
+                    }
+                    /*printf("IN:%10d\tcnt2=%ld\tcnt1=%ld\n",value->fragmentId,fcountBoth,fcountOne);*/
+                    
+                    rc = KDataBufferResize(&fragBuf, sz);
+                    if (rc) {
+                        (void)LOGERR(klogErr, rc, "Failed to resize fragment buffer");
+                        goto LOOP_END;
+                    }
+                    {{
+                        uint8_t *dst = (uint8_t*) fragBuf.base;
+                        memcpy(dst,&fi,sizeof(fi));
+                        dst += sizeof(fi);
+                        COPY_READ((char *)dst, seqDNA, fi.readlen, (isColorSpace && !aligned) ? 0 : fi.orientation);
+                        dst += fi.readlen;
+                        COPY_QUAL(dst, qual, fi.readlen, (isColorSpace && !aligned) ? 0 : fi.orientation);
+                        dst += fi.readlen;
+                        memcpy(dst,spotGroup,fi.sglen);
+                    }}
+                    rc = KMemBankWrite(frags, fragmentId, 0, fragBuf.base, sz, &rsize);
+                    if (rc) {
+                        (void)PLOGERR(klogErr, (klogErr, rc, "KMemBankWrite failed writing fragment $(id)", "id=%u", fragmentId));
+                        goto LOOP_END;
+                    }
+                    value->has_a_read = 1;
+                }
+                else if (value->fragmentId != 0 ) {
+                    /* might be second fragment */
+                    uint64_t sz;
+                    FragmentInfo *fip;
+                    KMemBank *frags;
+                    
+                    if(value->fragmentId & 1) frags = ctx->fragsOne;
+                    else               frags = ctx->fragsBoth; 
+                    
+                    rc=KMemBankSize(frags, value->fragmentId>>1, &sz);
+                    if (rc) {
+                        (void)PLOGERR(klogErr, (klogErr, rc, "KMemBankSize failed on fragment $(id)", "id=%u", value->fragmentId>>1));
+                        goto LOOP_END;
+                    }
+                    rc=KDataBufferResize(&fragBuf, (size_t)sz);
+                    if (rc) {
+                        (void)PLOGERR(klogErr, (klogErr, rc, "Failed to resize fragment buffer", ""));
+                        goto LOOP_END;
+                    }
+                    rc=KMemBankRead(frags, value->fragmentId>>1, 0, fragBuf.base, sz, &rsize);
+                    if (rc) {
+                        (void)PLOGERR(klogErr, (klogErr, rc, "KMemBankRead failed on fragment $(id)", "id=%u", value->fragmentId>>1));
+                        goto LOOP_END;
+                    }
+                    
+                    assert( rsize == sz );
+                    fip = (FragmentInfo *) fragBuf.base;
+                    if(AR_READNO(data) != fip->otherReadNo) {
+                        /* mate found */
+                        unsigned readLen[2];
+                        unsigned read1 = 0;
+                        unsigned read2 = 1;
+                        uint8_t  *src  = (uint8_t*) fip + sizeof(*fip);
+                        
+                        if (AR_READNO(data) < fip->otherReadNo) {
+                            read1 = 1;
+                            read2 = 0;
+                        }
+                        readLen[read1] = fip->readlen;
+                        readLen[read2] = readlen;
+                        rc = SequenceRecordInit(&srec, 2, readLen);
+                        if (rc) {
+                            (void)PLOGERR(klogErr, (klogErr, rc, "Failed resizing sequence record buffer", ""));
+                            goto LOOP_END;
+                        }
+                        srec.ti[read1] = fip->ti;
+                        srec.aligned[read1] = fip->aligned;
+                        srec.is_bad[read1] = fip->is_bad;
+                        srec.orientation[read1] = fip->orientation;
+                        srec.cskey[read1] = fip->cskey;
+                        memcpy(srec.seq + srec.readStart[read1], src, fip->readlen);
+                        src += fip->readlen;
+                        memcpy(srec.qual + srec.readStart[read1], src, fip->readlen);
+                        src += fip->readlen;
+                        
+                        srec.orientation[read2] = AR_REF_ORIENT(data);
+                        COPY_READ(srec.seq + srec.readStart[read2], seqDNA, srec.readLen[read2], (isColorSpace && !aligned) ? 0 : srec.orientation[read2]);
+                        COPY_QUAL(srec.qual + srec.readStart[read2], qual, srec.readLen[read2],  (isColorSpace && !aligned) ? 0 : srec.orientation[read2]);
+
+                        srec.keyId = keyId;
+                        srec.is_bad[read2] = (flags & BAMFlags_IsLowQuality) != 0;
+                        srec.aligned[read2] = aligned;
+                        srec.cskey[read2] = cskey;
+                        srec.ti[read2] = ti;
+                        
+                        srec.spotGroup = spotGroup;
+                        srec.spotGroupLen = strlen(spotGroup);
+                        if (value->pcr_dup && (srec.is_bad[0] || srec.is_bad[1])) {
+                            filterFlagConflictRecords++;
+                            if(filterFlagConflictRecords < MAX_WARNINGS_FLAG_CONFLICT){
+                                (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)': both 0x400 and 0x200 flag bits set, only 0x400 will be saved", "name=%s", name));
+                            } else if(filterFlagConflictRecords == MAX_WARNINGS_FLAG_CONFLICT){
+                                (void)PLOGMSG(klogWarn, (klogWarn, "Last reported warning: Spot '$(name)': both 0x400 and 0x200 flag bits set, only 0x400 will be saved", "name=%s", name));
+                            }
+                        }
+                        rc = SequenceWriteRecord(seq, &srec, isColorSpace, value->pcr_dup, value->platform);
+                        if (rc) {
+                            (void)LOGERR(klogErr, rc, "SequenceWriteRecord failed");
+                            goto LOOP_END;
+                        }
+                        CTX_VALUE_SET_S_ID(*value, ++ctx->spotId);
+                        if(value->fragmentId & 1){
+                            fcountOne--;
+                        } else {
+                            fcountBoth--;
+                        }
+                        /*	printf("OUT:%9d\tcnt2=%ld\tcnt1=%ld\n",value->fragmentId,fcountBoth,fcountOne);*/
+                        rc = KMemBankFree(frags, value->fragmentId>>1);
+                        if (rc) {
+                            (void)PLOGERR(klogErr, (klogErr, rc, "KMemBankFree failed on fragment $(id)", "id=%u", value->fragmentId>>1));
+                            goto LOOP_END;
+                        }
+                        value->fragmentId = 0;
+                    }
+                }
+            }
+            if (!isPrimary && aligned) {
+                int32_t bam_mrid;
+                int64_t mpos;
+                int64_t mrid;
+                int64_t tlen;
+                
+                BAMAlignmentGetMatePosition(rec, &mpos);/*BAM*/
+                BAMAlignmentGetMateRefSeqId(rec, &bam_mrid);/*BAM*/
+                BAMAlignmentGetInsertSize(rec, &tlen);/*BAM*/
+                
+                if (mpos >= 0 && bam_mrid >= 0 && tlen != 0) {
+                    BAMRefSeq const *mref;/*BAM*/
+                    
+                    BAMFileGetRefSeq(bam, bam_mrid, &mref);/*BAM*/
+                    if (mref) {
+                        rc_t rc_temp = ReferenceGet1stRow(ref, &mrid, mref->name);
+                        if (rc_temp == 0) {
+                            data.mate_ref_pos = mpos;
+                            data.template_len = tlen;
+                            data.mate_ref_orientation = (flags & BAMFlags_MateIsReverse) ? 1 : 0;
+                        }
+                        else {
+                            (void)PLOGERR(klogWarn, (klogWarn, rc_temp, "Failed to get refID for $(name)", "name=%s", mref->name));
+                            mrid = 0;
+                        }
+                        data.mate_ref_id = mrid;
+                    }
+                }
+            }
+        }
+        else if (wasInserted & (isPrimary || !originally_aligned)) {
+            /* new unmated fragment - no spot assembly */
+            unsigned readLen[1];
+            
+            readLen[0] = readlen;
+            rc = SequenceRecordInit(&srec, 1, readLen);
+            if (rc) {
+                (void)PLOGERR(klogErr, (klogErr, rc, "Failed resizing sequence record buffer", ""));
+                goto LOOP_END;
+            }
+            srec.ti[0] = ti;
+            srec.aligned[0] = aligned;
+            srec.is_bad[0] = (flags & BAMFlags_IsLowQuality) != 0;
+            srec.orientation[0] = AR_REF_ORIENT(data);
+            srec.cskey[0] = cskey;
+            COPY_READ(srec.seq  + srec.readStart[0], seqDNA, readlen, (isColorSpace && !aligned) ? 0 : srec.orientation[0]);
+            COPY_QUAL(srec.qual + srec.readStart[0], qual, readlen, (isColorSpace && !aligned) ? 0 : srec.orientation[0]);
+	     
+            srec.keyId = keyId;
+            
+            srec.spotGroup = spotGroup;
+            srec.spotGroupLen = strlen(spotGroup);
+            if (value->pcr_dup && srec.is_bad[0]) {
+                filterFlagConflictRecords++;
+                if (filterFlagConflictRecords < MAX_WARNINGS_FLAG_CONFLICT) {
+                    (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(name)': both 0x400 and 0x200 flag bits set, only 0x400 will be saved", "name=%s", name));
+                }
+                else if (filterFlagConflictRecords == MAX_WARNINGS_FLAG_CONFLICT) {
+                    (void)PLOGMSG(klogWarn, (klogWarn, "Last reported warning: Spot '$(name)': both 0x400 and 0x200 flag bits set, only 0x400 will be saved", "name=%s", name));
+		}
+            }
+            rc = SequenceWriteRecord(seq, &srec, isColorSpace, value->pcr_dup, value->platform);
+            if (rc) {
+                (void)PLOGERR(klogErr, (klogErr, rc, "SequenceWriteRecord failed", ""));
+                goto LOOP_END;
+            }
+            CTX_VALUE_SET_S_ID(*value, ++ctx->spotId);
+            value->fragmentId = 0;
+        }
+        
+        if (aligned) {
+            if (value->alignmentCount[AR_READNO(data) - 1] < 254)
+                ++value->alignmentCount[AR_READNO(data) - 1];
+            ++ctx->alignCount;
+            
+            assert(keyId >> 32 < ctx->key2id_count);
+            assert((uint32_t)keyId < ctx->idCount[keyId >> 32]);
+            
+            rc = AlignmentWriteRecord(align, &data);
+            if (rc == 0) {
+                if (!isPrimary)
+                    data.alignId = ++ctx->secondId;
+                
+                rc = ReferenceAddAlignId(ref, data.alignId, isPrimary);
+                if (rc) {
+                    (void)PLOGERR(klogErr, (klogErr, rc, "ReferenceAddAlignId failed", ""));
+                }
+                else {
+                    *had_alignments = true;
+                }
+            }
+            else {
+                (void)PLOGERR(klogErr, (klogErr, rc, "AlignmentWriteRecord failed", ""));
+            }
+        }
+        /**************************************************************/
+        
+    LOOP_END:
+        BAMAlignmentRelease(rec);
+        ++reccount;
+        if (G.maxAlignCount > 0 && reccount >= G.maxAlignCount)
+            break;
+        if (rc == 0)
+            *had_sequences = true;
+    }
+    if (filterFlagConflictRecords > 0) {
+        (void)PLOGMSG(klogWarn, (klogWarn, "$(cnt1) out of $(cnt2) records contained warning : both 0x400 and 0x200 flag bits set, only 0x400 will be saved", "cnt1=%lu,cnt2=%lu", filterFlagConflictRecords,recordsProcessed));
+    }
+    if (rc == 0 && recordsProcessed == 0) {
+        (void)LOGMSG(klogWarn, (G.limit2config || G.refFilter != NULL) ? 
+                     "All records from the file were filtered out" :
+                     "The file contained no records that were processed.");
+        rc = RC(rcAlign, rcFile, rcReading, rcData, rcEmpty);
+    }
+    BAMFileRelease(bam);
+    KDataBufferWhack(&buf);
+    KDataBufferWhack(&fragBuf);
+    KDataBufferWhack(&srec.storage);
+    KDataBufferWhack(&cigBuf);
+    return rc;
+}
+
+static rc_t WriteSoloFragments(context_t *ctx, Sequence *seq)
+{
+    uint32_t i;
+    unsigned j;
+    uint32_t fcountOne  = 0;
+    uint32_t fcountBoth = 0;
+    uint64_t idCount = 0;
+    rc_t rc;
+    KDataBuffer fragBuf;
+    SequenceRecord srec;
+    
+    ++ctx->pass;
+    memset(&srec, 0, sizeof(srec));
+    
+    rc = KDataBufferMake(&fragBuf, 8, 0);
+    if (rc) {
+        (void)LOGERR(klogErr, rc, "KDataBufferMake failed");
+        return rc;
+    }
+    for (idCount = 0, j = 0; j < ctx->key2id_count; ++j) {
+        idCount += ctx->idCount[j];
+    }
+    KLoadProgressbar_Append(ctx->progress[ctx->pass - 1], idCount);
+    
+    for (idCount = 0, j = 0; j < ctx->key2id_count; ++j) {
+        for (i = 0; i != ctx->idCount[j]; ++i, ++idCount) {
+            uint64_t const keyId = ((uint64_t)j << 32) | i;
+            ctx_value_t *value;
+            size_t rsize;
+            uint64_t id;
+            uint64_t sz;
+            unsigned readLen[2];
+            unsigned read = 0;
+            FragmentInfo const *fip;
+            uint8_t const *src;
+            KMemBank *frags;
+            
+            rc = MMArrayGet(ctx->id2value, (void **)&value, keyId);
+            if (rc)
+                break;
+            KLoadProgressbar_Process(ctx->progress[ctx->pass - 1], 1, false);
+            if (value->fragmentId == 0)
+                continue;
+            if (value->fragmentId & 1) {
+                frags = ctx->fragsOne;
+                fcountOne++;
+            }
+            else {
+                frags = ctx->fragsBoth; 
+                fcountBoth++;
+            }
+            id = value->fragmentId >> 1;
+            
+            rc = KMemBankSize(frags, id, &sz);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "KMemBankSize failed");
+                break;
+            }
+            rc = KDataBufferResize(&fragBuf, (size_t)sz);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "KDataBufferResize failed");
+                break;
+            }
+            rc = KMemBankRead(frags, id, 0, fragBuf.base, sz, &rsize);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "KMemBankRead failed");
+                break;
+            }
+            assert( rsize == sz );
+            fip = (FragmentInfo const *)fragBuf.base;
+            src = (uint8_t const *)&fip[1];
+            
+            readLen[0] = readLen[1] = 0;
+            if (!value->unmated && (   (fip->aligned && CTX_VALUE_GET_P_ID(*value, 0) == 0)
+                                    || (value->unaligned_2)))
+            {
+                read = 1;
+            }
+            
+            readLen[read] = fip->readlen;
+            rc = SequenceRecordInit(&srec, value->unmated ? 1 : 2, readLen);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "SequenceRecordInit failed");
+                break;
+            }
+            
+            srec.ti[read] = fip->ti;
+            srec.aligned[read] = fip->aligned;
+            srec.is_bad[read] = fip->is_bad;
+            srec.orientation[read] = fip->orientation;
+            srec.cskey[read] = fip->cskey;
+            memcpy(srec.seq + srec.readStart[read], src, srec.readLen[read]);
+            src += fip->readlen;
+            memcpy(srec.qual + srec.readStart[read], src, srec.readLen[read]);
+            src += fip->readlen;
+            srec.spotGroup = (char *)src;
+            srec.spotGroupLen = fip->sglen;
+            srec.keyId = keyId;
+            
+            rc = SequenceWriteRecord(seq, &srec, ctx->isColorSpace, value->pcr_dup, value->platform);
+            if (rc) {
+                (void)LOGERR(klogErr, rc, "SequenceWriteRecord failed");
+                break;
+            }
+            /*rc = KMemBankFree(frags, id);*/
+            CTX_VALUE_SET_S_ID(*value, ++ctx->spotId);
+        }
+    }
+    /*printf("DONE_SOLO:\tcnt2=%d\tcnt1=%d\n",fcountBoth,fcountOne);*/
+    KDataBufferWhack(&fragBuf);
+    KDataBufferWhack(&srec.storage);
+    return rc;
+}
+
+static rc_t SequenceUpdateAlignInfo(context_t *ctx, Sequence *seq)
+{
+    rc_t rc = 0;
+    uint64_t row;
+    const ctx_value_t *value;
+    uint64_t keyId;
+    
+    ++ctx->pass;
+    KLoadProgressbar_Append(ctx->progress[ctx->pass - 1], ctx->spotId + 1);
+    
+    for (row = 1; row <= ctx->spotId; ++row) {
+        rc = SequenceReadKey(seq, row, &keyId);
+        if (rc) {
+            (void)PLOGERR(klogErr, (klogErr, rc, "Failed to get key for row $(row)", "row=%u", (unsigned)row));
+            break;
+        }
+        rc = MMArrayGet(ctx->id2value, (void **)&value, keyId);
+        if (rc) {
+            (void)PLOGERR(klogErr, (klogErr, rc, "Failed to read info for row $(row), index $(idx)", "row=%u,idx=%u", (unsigned)row, (unsigned)keyId));
+            break;
+        }
+        if (row != CTX_VALUE_GET_S_ID(*value)) {
+            rc = RC(rcApp, rcTable, rcWriting, rcData, rcUnexpected);
+            (void)PLOGMSG(klogErr, (klogErr, "Unexpected spot id $(spotId) for row $(row), index $(idx)", "spotId=%u,row=%u,idx=%u", (unsigned)CTX_VALUE_GET_S_ID(*value), (unsigned)row, (unsigned)keyId));
+            break;
+        }
+        {{
+            int64_t primaryId[2];
+            uint64_t const spotId = CTX_VALUE_GET_S_ID(*value);
+            
+            primaryId[0] = CTX_VALUE_GET_P_ID(*value, 0);
+            primaryId[1] = CTX_VALUE_GET_P_ID(*value, 1);
+            
+            rc = SequenceUpdateAlignData(seq, row, value->unmated ? 1 : 2,
+                                         primaryId,
+                                         value->alignmentCount);
+        }}
+        if (rc) {
+            (void)LOGERR(klogErr, rc, "Failed updating Alignment data in sequence table");
+            break;
+        }
+        KLoadProgressbar_Process(ctx->progress[ctx->pass - 1], 1, false);
+    }
+    return rc;
+}
+
+static rc_t AlignmentUpdateSpotInfo(context_t *ctx, Alignment *align)
+{
+    rc_t rc;
+    uint64_t keyId;
+    
+    ++ctx->pass;
+
+    KLoadProgressbar_Append(ctx->progress[ctx->pass - 1], ctx->alignCount);
+
+    rc = AlignmentStartUpdatingSpotIds(align);
+    while (rc == 0 && (rc = Quitting()) == 0) {
+        ctx_value_t const *value;
+        
+        rc = AlignmentGetSpotKey(align, &keyId);
+        if (rc) {
+            if (GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound)
+                rc = 0;
+            break;
+        }
+        assert(keyId >> 32 < ctx->key2id_count);
+        assert((uint32_t)keyId < ctx->idCount[keyId >> 32]);
+        rc = MMArrayGet(ctx->id2value, (void **)&value, keyId);
+        if (rc == 0) {
+            int64_t const spotId = CTX_VALUE_GET_S_ID(*value);
+            
+            if (spotId == 0) {
+                (void)PLOGMSG(klogWarn, (klogWarn, "Spot '$(id)' was never assigned a spot id, probably has no primary alignments", "id=%lx", keyId));
+                /* (void)PLOGMSG(klogWarn, (klogWarn, "Spot #$(i): { $(s) }", "i=%lu,s=%s", keyId, Print_ctx_value_t(value))); */
+            }
+            rc = AlignmentWriteSpotId(align, spotId);
+        }
+        KLoadProgressbar_Process(ctx->progress[ctx->pass - 1], 1, false);
+    }
+    return rc;
+}
+
+static rc_t ArchiveBAM(VDBManager *mgr, VDatabase *db,
+                       unsigned bamFiles, char const *bamFile[],
+                       unsigned seqFiles, char const *seqFile[],
+                       bool *has_alignments)
+{
+    rc_t rc = 0;
+    rc_t rc2;
+    Reference ref;
+    Sequence seq;
+    Alignment *align;
+    context_t ctx;
+    bool has_sequences = false;
+    unsigned i;
+    
+    *has_alignments = false;
+    rc = ReferenceInit(&ref, mgr, db);
+    if (rc)
+        return rc;
+    
+    if (G.onlyVerifyReferences) {
+        for (i = 0; i < bamFiles && rc == 0; ++i) {
+            rc = ProcessBAM(bamFile[i], NULL, db, &ref, NULL, NULL, NULL, NULL);
+        }
+        ReferenceWhack(&ref, false);
+        return rc;
+    }
+    SequenceInit(&seq, db);
+    align = AlignmentMake(db);
+    
+    rc = SetupContext(&ctx, bamFiles + seqFiles);
+    if (rc)
+        return rc;
+    
+    ++ctx.pass;
+    for (i = 0; i < bamFiles && rc == 0; ++i) {
+        bool this_has_alignments = false;
+        bool this_has_sequences = false;
+        
+        rc = ProcessBAM(bamFile[i], &ctx, db, &ref, &seq, align, &this_has_alignments, &this_has_sequences);
+        *has_alignments |= this_has_alignments;
+        has_sequences |= this_has_sequences;
+    }
+    for (i = 0; i < seqFiles && rc == 0; ++i) {
+        bool this_has_alignments = false;
+        bool this_has_sequences = false;
+        
+        rc = ProcessBAM(seqFile[i], &ctx, db, &ref, &seq, align, &this_has_alignments, &this_has_sequences);
+        *has_alignments |= this_has_alignments;
+        has_sequences |= this_has_sequences;
+    }
+/*** No longer need memory for key2id ***/
+    for (i = 0; i != ctx.key2id_count; ++i) {
+        KBTreeDropBacking(ctx.key2id[i]);
+        KBTreeRelease(ctx.key2id[i]);
+        ctx.key2id[i] = NULL;
+    }
+    free(ctx.key2id_names);
+    ctx.key2id_names = NULL;
+/*******************/
+
+    if (has_sequences) {
+        if (rc == 0 && (rc = Quitting()) == 0) {
+            (void)LOGMSG(klogInfo, "Writing unpaired sequences");
+            rc = WriteSoloFragments(&ctx, &seq);
+            ContextReleaseMemBank(&ctx);
+            if (rc == 0) {
+                rc = SequenceDoneWriting(&seq);
+                if (rc == 0) {
+                    (void)LOGMSG(klogInfo, "Updating sequence alignment info");
+                    rc = SequenceUpdateAlignInfo(&ctx, &seq);
+                }
+            }
+        }
+    }
+    
+    if (*has_alignments && rc == 0 && (rc = Quitting()) == 0) {
+        (void)LOGMSG(klogInfo, "Writing alignment spot ids");
+        rc = AlignmentUpdateSpotInfo(&ctx, align);
+    }
+    rc2 = AlignmentWhack(align, *has_alignments && rc == 0 && (rc = Quitting()) == 0);
+    if (rc == 0)
+        rc = rc2;
+
+    rc2 = ReferenceWhack(&ref, *has_alignments && rc == 0 && (rc = Quitting()) == 0);
+    if (rc == 0)
+        rc = rc2;
+    
+    SequenceWhack(&seq, rc == 0);
+    
+    ContextRelease(&ctx);
+
+    if (rc == 0) {
+        (void)LOGMSG(klogInfo, "Successfully loaded all files");
+    }
+    return rc;
+}
+
+rc_t WriteLoaderSignature(KMetadata *meta, char const progName[])
+{
+    KMDataNode *node;
+    rc_t rc = KMetadataOpenNodeUpdate(meta, &node, "/");
+    
+    if (rc == 0) {
+        rc = KLoaderMeta_Write(node, progName, __DATE__, "BAM", KAppVersion());
+        KMDataNodeRelease(node);
+    }
+    if (rc) {
+        (void)LOGERR(klogErr, rc, "Cannot update loader meta");
+    }
+    return rc;
+}
+
+rc_t OpenPath(char const path[], KDirectory **dir)
+{
+    KDirectory *p;
+    rc_t rc = KDirectoryNativeDir(&p);
+    
+    if (rc == 0) {
+        rc = KDirectoryOpenDirUpdate(p, dir, false, path);
+        KDirectoryRelease(p);
+    }
+    return rc;
+}
+
+static
+rc_t ConvertDatabaseToUnmapped(VDatabase *db)
+{
+    VTable* tbl;
+    rc_t rc = VDatabaseOpenTableUpdate(db, &tbl, "SEQUENCE");
+    if (rc == 0) 
+    {
+        VTableRenameColumn(tbl, false, "CMP_ALTREAD", "ALTREAD");
+        VTableRenameColumn(tbl, false, "CMP_READ", "READ");
+        VTableRenameColumn(tbl, false, "CMP_ALTCSREAD", "ALTCSREAD");
+        VTableRenameColumn(tbl, false, "CMP_CSREAD", "CSREAD");
+        rc = VTableRelease(tbl);
+    }
+    return rc;
+}
+rc_t run(char const progName[],
+         unsigned bamFiles, char const *bamFile[],
+         unsigned seqFiles, char const *seqFile[])
+{
+    VDBManager *mgr;
+    rc_t rc;
+    rc_t rc2;
+    char const *db_type = G.expectUnsorted ? "NCBI:align:db:alignment_unsorted" : "NCBI:align:db:alignment_sorted";
+    
+    rc = VDBManagerMakeUpdate(&mgr, NULL);
+    if (rc) {
+        (void)LOGERR (klogErr, rc, "failed to create VDB Manager!");
+    }
+    else {
+        bool has_alignments = false;
+            
+        if (G.onlyVerifyReferences) {
+            rc = ArchiveBAM(mgr, NULL, bamFiles, bamFile, 0, NULL, &has_alignments);
+        }
+        else {
+            VSchema *schema;
+        
+            rc = VDBManagerMakeSchema(mgr, &schema);
+            if (rc) {
+                (void)LOGERR (klogErr, rc, "failed to create schema");
+            }
+            else {
+                (void)(rc = VSchemaAddIncludePath(schema, G.schemaIncludePath));
+                rc = VSchemaParseFile(schema, G.schemaPath);
+                if (rc) {
+                    (void)PLOGERR(klogErr, (klogErr, rc, "failed to parse schema file $(file)", "file=%s", G.schemaPath));
+                }
+                else {
+                    VDatabase *db;
+                    
+                    rc = VDBManagerCreateDB(mgr, &db, schema, db_type,
+                                            kcmInit + kcmMD5, G.outpath);
+                    rc2 = VSchemaRelease(schema);
+                    if (rc2)
+                        (void)LOGERR(klogWarn, rc2, "Failed to release schema");
+                    if (rc == 0)
+                        rc = rc2;
+                    if (rc == 0) {
+                        rc = ArchiveBAM(mgr, db, bamFiles, bamFile, seqFiles, seqFile, &has_alignments);
+                        if (rc == 0 && !has_alignments) {
+                            rc = ConvertDatabaseToUnmapped(db);
+                        }
+                        
+                        rc2 = VDatabaseRelease(db);
+                        if (rc2)
+                            (void)LOGERR(klogWarn, rc2, "Failed to close database");
+                        if (rc == 0)
+                            rc = rc2;
+                        
+                        if (rc == 0) {
+                            KMetadata *meta;
+                            KDBManager *kmgr;
+                            
+                            rc = VDBManagerOpenKDBManagerUpdate(mgr, &kmgr);
+                            if (rc == 0) {
+                                KDatabase *kdb;
+                                
+                                rc = KDBManagerOpenDBUpdate(kmgr, &kdb, G.outpath);
+                                if (rc == 0) {
+                                    rc = KDatabaseOpenMetadataUpdate(kdb, &meta);
+                                    KDatabaseRelease(kdb);
+                                }
+                                KDBManagerRelease(kmgr);
+                            }
+                            if (rc == 0) {
+                                rc = WriteLoaderSignature(meta, progName);
+                                KMetadataRelease(meta);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        rc2 = VDBManagerRelease(mgr);
+        if (rc2)
+            (void)LOGERR(klogWarn, rc2, "Failed to release VDB Manager");
+        if (rc == 0)
+            rc = rc2;
+    }
+    return rc;
+}
diff --git a/tools/bam-loader/loader-imp.h b/tools/bam-loader/loader-imp.h
new file mode 100644
index 0000000..6f524a7
--- /dev/null
+++ b/tools/bam-loader/loader-imp.h
@@ -0,0 +1,29 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+rc_t run(char const argv0[],
+         unsigned countAligned, char const *bamFile[],
+         unsigned countUnaligned, char const *unaligned[]);
diff --git a/tools/bam-loader/reference-writer.c b/tools/bam-loader/reference-writer.c
new file mode 100644
index 0000000..dd1dc68
--- /dev/null
+++ b/tools/bam-loader/reference-writer.c
@@ -0,0 +1,447 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <kfs/file.h>
+
+#include <vdb/schema.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <align/writer-refseq.h>
+
+#include "reference-writer.h"
+#include "Globals.h"
+
+#include <stdlib.h>
+#include <limits.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+
+#define SORTED_OPEN_TABLE_LIMIT (2)
+#define SORTED_CACHE_SIZE ((2 * 1024 * 1024)/(SORTED_OPEN_TABLE_LIMIT))
+
+#ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
+#define UNSORTED_OPEN_TABLE_LIMIT (8)
+#define UNSORTED_CACHE_SIZE ((1024 * 1024 * 1024)/(UNSORTED_OPEN_TABLE_LIMIT))
+#else
+#define UNSORTED_OPEN_TABLE_LIMIT (64)
+#define UNSORTED_CACHE_SIZE (350 * 1024 * 1024)
+#endif
+
+#if _DEBUGGING
+#define DUMP_CONFIG 1
+#endif
+
+struct overlap_s {
+    uint32_t min; /* minimum start pos of any alignment that ends in this chunk */
+    uint32_t max; /* maximum end pos of any alignment that starts before this chunk and ends in this chunk */
+};
+
+extern void ReferenceMgr_DumpConfig(ReferenceMgr const *const self);
+
+rc_t ReferenceInit(Reference *self, const VDBManager *mgr, VDatabase *db)
+{
+    rc_t rc;
+    size_t const cache = G.expectUnsorted ? UNSORTED_CACHE_SIZE : SORTED_CACHE_SIZE;
+    unsigned const open_count = G.expectUnsorted ? UNSORTED_OPEN_TABLE_LIMIT : SORTED_OPEN_TABLE_LIMIT;
+    
+    memset(self, 0, sizeof(*self));
+    
+    self->coverage.elem_bits = self->mismatches.elem_bits = self->indels.elem_bits = 32;
+    self->pri_align.elem_bits = self->sec_align.elem_bits = 64;
+    self->pri_overlap.elem_bits = self->sec_overlap.elem_bits = sizeof(struct overlap_s) * 8;
+    
+    rc = ReferenceMgr_Make(&self->mgr, db, mgr, ewrefmgr_co_Coverage,
+                           G.refXRefPath, G.inpath,
+                           G.maxSeqLen, cache, open_count);
+    if (rc == 0) {
+        unsigned i;
+        
+        for (i = 0; G.refFiles[i]; ++i) {
+            rc = ReferenceMgr_FastaPath(self->mgr, G.refFiles[i]);
+            if (rc) {
+                (void)PLOGERR(klogWarn, (klogWarn, rc, "fasta file '$(file)'", "file=%s", G.refFiles[i]));
+                break;
+            }
+        }
+#if DUMP_CONFIG
+        if (rc == 0) {
+            ReferenceMgr_DumpConfig(self->mgr);
+        }
+#endif
+    }
+    return rc;
+}
+
+static
+void Unsorted(Reference *self) {
+    (void)LOGMSG(klogWarn, "Alignments are unsorted");
+    self->out_of_order = true;
+    ReferenceMgr_SetCache(self->mgr, UNSORTED_CACHE_SIZE, UNSORTED_OPEN_TABLE_LIMIT);
+    KDataBufferWhack(&self->sec_align);
+    KDataBufferWhack(&self->pri_align);
+    KDataBufferWhack(&self->mismatches);
+    KDataBufferWhack(&self->indels);
+    KDataBufferWhack(&self->coverage);
+    KDataBufferWhack(&self->pri_overlap);
+    KDataBufferWhack(&self->sec_overlap);
+}
+
+#define BAIL_ON_FAIL(STMT) do { rc_t const rc__ = (STMT); if (rc__) return rc__; } while(0)
+
+static rc_t FlushBuffers(Reference *self, uint64_t upto, bool full, bool final)
+{
+    if (!self->out_of_order && upto > 0) {
+        size_t offset = 0;
+        unsigned *const miss = (unsigned *)self->mismatches.base;
+        unsigned *const indel = (unsigned *)self->indels.base;
+        unsigned *const cov = (unsigned *)self->coverage.base;
+        struct overlap_s *const pri_overlap = (struct overlap_s *)self->pri_overlap.base;
+        struct overlap_s *const sec_overlap = (struct overlap_s *)self->sec_overlap.base;
+        unsigned chunk = 0;
+        
+        while ((self->curPos + offset + (full ? 0 : G.maxSeqLen)) <= upto) {
+            ReferenceSeqCoverage data;
+            uint64_t const curPos = self->curPos + offset;
+            unsigned const n = self->endPos > (curPos + G.maxSeqLen) ?
+                               G.maxSeqLen : (self->endPos - curPos);
+            unsigned const m = curPos + n > upto ? upto - curPos : n;
+            unsigned i;
+            unsigned hi;
+            unsigned lo;
+            
+            if (n == 0) break;
+            
+            memset(&data, 0, sizeof(data));
+            
+            data.ids[ewrefcov_primary_table].elements = self->pri_align.elem_count;
+            data.ids[ewrefcov_primary_table].buffer = self->pri_align.base;
+            data.overlap_ref_pos[ewrefcov_primary_table] = pri_overlap[chunk].min;
+            data.overlap_ref_len[ewrefcov_primary_table] = pri_overlap[chunk].max ? pri_overlap[chunk].max - curPos : 0;
+            
+            data.ids[ewrefcov_secondary_table].elements = self->sec_align.elem_count;
+            data.ids[ewrefcov_secondary_table].buffer = self->sec_align.base;
+            data.overlap_ref_pos[ewrefcov_secondary_table] = sec_overlap[chunk].min;
+            data.overlap_ref_len[ewrefcov_secondary_table] = sec_overlap[chunk].max ? sec_overlap[chunk].max - curPos : 0;
+            
+            for (hi = 0, lo = UINT_MAX, i = 0; i != m; ++i) {
+                unsigned const coverage = cov[offset + i];
+                
+                if (hi < coverage)
+                    hi = coverage;
+                if (lo > coverage)
+                    lo = coverage;
+            }
+            data.low  = lo > 255 ? 255 : lo;
+            data.high = hi > 255 ? 255 : hi;
+            
+            for (i = 0; i != m; ++i)
+                data.mismatches += miss[offset + i];
+
+            for (i = 0; i != m; ++i)
+                data.indels += indel[offset + i];
+            
+            {
+                rc_t rc = ReferenceSeq_AddCoverage(self->rseq, curPos, &data);
+                
+                if (rc) {
+                    Unsorted(self);
+                    return 0;
+                }
+            }
+            
+            KDataBufferResize(&self->pri_align, 0);
+            KDataBufferResize(&self->sec_align, 0);
+            offset += n;
+            ++chunk;
+        }
+        if (!final && offset > 0) {
+            unsigned const newChunkCount = self->pri_overlap.elem_count - chunk;
+            unsigned const newBaseCount = self->endPos - self->curPos - offset;
+            
+            memmove(self->pri_overlap.base, pri_overlap + chunk, newChunkCount * sizeof(pri_overlap[0]));
+            memmove(self->sec_overlap.base, sec_overlap + chunk, newChunkCount * sizeof(sec_overlap[0]));
+            memmove(self->mismatches.base, miss + offset, newBaseCount * sizeof(miss[0]));
+            memmove(self->indels.base, indel + offset, newBaseCount * sizeof(indel[0]));
+            memmove(self->coverage.base, cov + offset, newBaseCount * sizeof(cov[0]));
+
+            KDataBufferResize(&self->pri_overlap, newChunkCount);
+            KDataBufferResize(&self->sec_overlap, newChunkCount);
+            
+            self->curPos += offset;
+        }
+    }
+    return 0;
+}
+
+rc_t ReferenceSetFile(Reference *self, const char id[],
+                      uint64_t length, uint8_t const md5[16])
+{
+    const ReferenceSeq *rseq;
+    unsigned n;
+    
+    for (n = 0; ; ++n) {
+        if (self->last_id[n] != id[n])
+            break;
+        if (self->last_id[n] == 0 && id[n] == 0)
+            return 0;
+    }
+    while (id[n])
+        ++n;
+    if (n >= sizeof(self->last_id))
+        return RC(rcApp, rcTable, rcAccessing, rcParam, rcTooLong);
+    
+    BAIL_ON_FAIL(FlushBuffers(self, self->length, true, true));
+    BAIL_ON_FAIL(ReferenceMgr_GetSeq(self->mgr, &rseq, id));
+
+    if (self->rseq)
+        ReferenceSeq_Release(self->rseq);
+    self->rseq = rseq;
+    
+    memcpy(self->last_id, id, n + 1);
+    self->curPos = self->endPos = 0;
+    self->length = length;
+    self->lastOffset = 0;
+    KDataBufferResize(&self->pri_overlap, 0);
+    KDataBufferResize(&self->sec_overlap, 0);
+
+    if(!self->out_of_order) (void)PLOGMSG(klogInfo, (klogInfo, "Processing Reference '$(id)'", "id=%s", id));
+    
+    return 0;
+}
+
+rc_t ReferenceVerify(Reference const *self, char const id[], uint64_t length, uint8_t const md5[16])
+{
+    return ReferenceMgr_Verify(self->mgr, id, length, md5);
+}
+
+rc_t ReferenceGet1stRow(Reference const *self, int64_t *refID, char const refName[])
+{
+    const ReferenceSeq* rseq;
+    rc_t rc = ReferenceMgr_GetSeq(self->mgr, &rseq, refName);
+    if( rc == 0 ) {
+        rc = ReferenceSeq_Get1stRow(rseq, refID);
+        ReferenceSeq_Release(rseq);
+    }
+    return rc;
+}
+
+static
+rc_t ReferenceAddCoverage(Reference *const self,
+                          unsigned const refStart,
+                          unsigned const refLength,
+                          uint32_t const mismatches,
+                          uint32_t const indels,
+                          bool const isPrimary
+                          )
+{
+    unsigned const refEnd = refStart + refLength;
+    
+    if (refEnd > self->endPos) {
+        unsigned const t1 = refEnd + (G.maxSeqLen - 1);
+        unsigned const adjust = t1 % G.maxSeqLen;
+        unsigned const newEndPos = t1 - adjust;
+        unsigned const baseCount = self->endPos - self->curPos;
+        unsigned const newBaseCount = newEndPos - self->curPos;
+        
+        BAIL_ON_FAIL(KDataBufferResize(&self->coverage, newBaseCount));
+        BAIL_ON_FAIL(KDataBufferResize(&self->mismatches, newBaseCount));
+        BAIL_ON_FAIL(KDataBufferResize(&self->indels, newBaseCount));
+        
+        memset(&((unsigned *)self->coverage.base)[baseCount], 0, (newBaseCount - baseCount) * sizeof(unsigned));
+        memset(&((unsigned *)self->mismatches.base)[baseCount], 0, (newBaseCount - baseCount) * sizeof(unsigned));
+        memset(&((unsigned *)self->indels.base)[baseCount], 0, (newBaseCount - baseCount) * sizeof(unsigned));
+        self->endPos = newEndPos;
+    }
+    if ((refEnd - self->curPos) / G.maxSeqLen >= self->pri_overlap.elem_count) {
+        unsigned const chunks = (refEnd - self->curPos) / G.maxSeqLen + 1;
+        unsigned const end = self->pri_overlap.elem_count;
+        
+        BAIL_ON_FAIL(KDataBufferResize(&self->pri_overlap, chunks));
+        BAIL_ON_FAIL(KDataBufferResize(&self->sec_overlap, chunks));
+        
+        memset(&((struct overlap_s *)self->pri_overlap.base)[end], 0, (chunks - end) * sizeof(struct overlap_s));
+        memset(&((struct overlap_s *)self->sec_overlap.base)[end], 0, (chunks - end) * sizeof(struct overlap_s));
+    }
+    BAIL_ON_FAIL(FlushBuffers(self, refStart, false, false));
+    if (!self->out_of_order) {
+        unsigned const startBase = refStart - self->curPos;
+        unsigned const endChunk = (startBase + refLength) / G.maxSeqLen;
+        KDataBuffer *const overlapBuffer = isPrimary ? &self->pri_overlap : &self->sec_overlap;
+        unsigned *const cov = &((unsigned *)self->coverage.base)[startBase];
+        unsigned i;
+        
+        ((unsigned *)self->mismatches.base)[startBase] += mismatches;
+        ((unsigned *)self->indels.base)[startBase] += indels;
+        
+        if (((struct overlap_s *)overlapBuffer->base)[endChunk].min == 0 || 
+            ((struct overlap_s *)overlapBuffer->base)[endChunk].min > refStart)
+        {
+            ((struct overlap_s *)overlapBuffer->base)[endChunk].min = refStart;
+        }
+        if (endChunk != 0 &&
+            ((struct overlap_s *)overlapBuffer->base)[endChunk].max < refStart + refLength)
+        {
+            ((struct overlap_s *)overlapBuffer->base)[endChunk].max = refStart + refLength;
+        }
+        
+        for (i = 0; i != refLength; ++i) {
+            if (cov[i] < UINT_MAX)
+                ++cov[i];
+        }
+    }
+    return 0;
+}
+
+static void GetCounts(AlignmentRecord const *data, unsigned const seqLen,
+                      unsigned *const nMatch,
+                      unsigned *const nMiss,
+                      unsigned *const nIndels)
+{
+    bool const *has_mismatch = data->data.has_mismatch.buffer;
+    bool const *has_offset = data->data.has_ref_offset.buffer;
+    int32_t const *ref_offset = data->data.ref_offset.buffer;
+    unsigned const n = data->data.ref_offset.elements;
+    unsigned const left_clip = (n != 0 && has_offset[0] && ref_offset[0] < 0) ? -ref_offset[0] : 0;
+    int right_edge;
+    unsigned nmis;
+    unsigned nmatch;
+    unsigned i;
+    unsigned j;
+    
+    for (right_edge = data->data.ref_len, i = 0; i != n; ++i)
+        right_edge -= ref_offset[i];
+    if (right_edge > seqLen)
+        right_edge = seqLen;
+    for (j = left_clip ? 1 : 0, i = left_clip, nmatch = nmis = 0; i < right_edge; ) {
+        if (has_offset[i]) {
+            int const offs = ref_offset[j++];
+            
+            if (offs < 0) {
+                i += (unsigned)(-offs);
+                continue;
+            }
+        }
+        if (has_mismatch[i])
+            ++nmis;
+        else
+            ++nmatch;
+        ++i;
+    }
+    *nMatch = nmatch;
+    *nMiss = nmis;
+    *nIndels = n - (left_clip ? 1 : 0);
+}
+
+rc_t ReferenceRead(Reference *self, AlignmentRecord *data, uint64_t const pos,
+                   uint32_t const rawCigar[], uint32_t const cigCount,
+                   char const seqDNA[], uint32_t const seqLen, uint32_t *matches)
+{
+    *matches = 0;
+    BAIL_ON_FAIL(ReferenceSeq_Compress(self->rseq, (G.acceptHardClip ? ewrefmgr_co_AcceptHardClip : 0) + ewrefmgr_cmp_Binary, pos,
+        seqDNA, seqLen, rawCigar, cigCount, 0, NULL, 0, 0, NULL, 0, &data->data));
+
+    if (!G.acceptNoMatch && data->data.ref_len == 0)
+        return RC(rcApp, rcFile, rcReading, rcConstraint, rcViolated);
+    
+    if (!self->out_of_order && pos < self->lastOffset) {
+        Unsorted(self);
+    }
+    if (self->out_of_order)
+        return 0;
+    else {
+        unsigned nmis;
+        unsigned nmatch;
+        unsigned indels;
+
+        self->lastOffset = data->data.effective_offset;
+        GetCounts(data, seqLen, &nmatch, &nmis, &indels);
+        *matches = nmatch;
+        
+        if (G.acceptNoMatch || nmatch >= G.minMatchCount)
+            return ReferenceAddCoverage(self, data->data.effective_offset,
+                                        data->data.ref_len, nmis, indels,
+                                        data->isPrimary);
+        else
+            return RC(rcApp, rcFile, rcReading, rcConstraint, rcViolated);
+    }
+}
+
+static rc_t IdVecAppend(KDataBuffer *vec, uint64_t id)
+{
+    uint64_t const end = vec->elem_count;
+    
+    BAIL_ON_FAIL(KDataBufferResize(vec, end + 1));
+    ((uint64_t *)vec->base)[end] = id;
+    return 0;
+}
+
+rc_t ReferenceAddAlignId(Reference *self,
+                         int64_t align_id,
+                         bool is_primary
+                         )
+{
+    if (self->out_of_order)
+        return 0;
+    return IdVecAppend(is_primary ? &self->pri_align : &self->sec_align, align_id);
+}
+
+rc_t ReferenceWhack(Reference *self, bool commit)
+{
+    rc_t rc = 0;
+    
+    if (self) {
+#if DUMP_CONFIG
+        if (self->mgr)
+            ReferenceMgr_DumpConfig(self->mgr);
+#endif
+        if (commit) {
+            rc = FlushBuffers(self, self->length, true, true);
+            if (rc != 0)
+                commit = false;
+        }
+        KDataBufferWhack(&self->sec_align);
+        KDataBufferWhack(&self->pri_align);
+        KDataBufferWhack(&self->mismatches);
+        KDataBufferWhack(&self->indels);
+        KDataBufferWhack(&self->coverage);
+        KDataBufferWhack(&self->pri_overlap);
+        KDataBufferWhack(&self->sec_overlap);
+        if (self->rseq)
+            rc = ReferenceSeq_Release(self->rseq);
+        if (self->out_of_order) {
+            (void)LOGMSG(klogInfo, "Starting coverage calculation");
+            rc = ReferenceMgr_Release(self->mgr, commit, NULL, true);
+        }
+        else {
+            rc = ReferenceMgr_Release(self->mgr, commit, NULL, false);
+        }
+    }
+    return rc;
+}
diff --git a/tools/bam-loader/reference-writer.h b/tools/bam-loader/reference-writer.h
new file mode 100644
index 0000000..67d57f4
--- /dev/null
+++ b/tools/bam-loader/reference-writer.h
@@ -0,0 +1,69 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_REFERENCE_WRITER_H_
+#define BAM_LOAD_REFERENCE_WRITER_H_ 1
+
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <klib/data-buffer.h>
+
+#include <align/writer-reference.h>
+#include "alignment-writer.h"
+
+typedef struct s_reference {
+    const ReferenceMgr *mgr;
+    const ReferenceSeq *rseq;
+    int64_t lastRefId;
+    int32_t lastOffset;
+    unsigned curPos;
+    unsigned endPos;
+    unsigned length;
+    KDataBuffer coverage;
+    KDataBuffer mismatches;
+    KDataBuffer indels;
+    KDataBuffer pri_align;
+    KDataBuffer sec_align;
+    KDataBuffer pri_overlap;
+    KDataBuffer sec_overlap;
+    bool out_of_order;
+    char last_id[256];
+} Reference;
+
+rc_t ReferenceInit(Reference *self, const VDBManager *mgr, VDatabase *db);
+rc_t ReferenceSetFile(Reference *self, const char *id, uint64_t length, uint8_t const md5[16]);
+rc_t ReferenceVerify(Reference const *self, char const id[], uint64_t length, uint8_t const md5[16]);
+rc_t ReferenceGet1stRow(Reference const *self, int64_t *refID, char const refName[]);
+rc_t ReferenceAddAlignId(Reference *self,
+                         int64_t align_id,
+                         bool is_primary
+                         );
+rc_t ReferenceRead(Reference *self, AlignmentRecord *data, uint64_t pos,
+                   uint32_t const rawCigar[], uint32_t cigCount,
+                   char const seqDNA[], uint32_t seqLen, uint32_t *matches);
+rc_t ReferenceWhack(Reference *self, bool commit);
+
+#endif
diff --git a/tools/bam-loader/sequence-writer.c b/tools/bam-loader/sequence-writer.c
new file mode 100644
index 0000000..ec0f22e
--- /dev/null
+++ b/tools/bam-loader/sequence-writer.c
@@ -0,0 +1,345 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <vdb/database.h>
+
+#include <kdb/manager.h>
+
+#include <insdc/sra.h>
+#include <insdc/insdc.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <assert.h>
+#include <ctype.h>
+
+#include "Globals.h"
+#include <align/writer-sequence.h>
+#include "sequence-writer.h"
+
+/* MARK: Sequence Object */
+
+Sequence *SequenceInit(Sequence *self, VDatabase *db) {
+    memset(self, 0, sizeof(*self));
+    self->db = db;
+    VDatabaseAddRef(db);
+    return self;
+}
+
+rc_t SequenceWriteRecord(Sequence *self,
+                         SequenceRecord const *rec,
+                         bool color,
+                         bool isDup,
+                         INSDC_SRA_platform_id platform
+                         )
+{
+    rc_t rc = 0;
+    uint8_t nreads = rec->numreads;
+    unsigned i;
+    unsigned seqLen;
+    int64_t dummyRowId;
+    
+    uint8_t readInfo[4096];
+    void *h_readInfo = NULL;
+    
+    INSDC_coord_zero *readStart = (void *)readInfo;
+    INSDC_coord_len *readLen;
+    uint8_t *alcnt;
+    INSDC_SRA_xread_type *readType;
+    INSDC_SRA_read_filter *readFilter;
+    bool *mask = NULL;
+    size_t const elemSize = sizeof(alcnt[0]) + sizeof(readType[0])
+                          + sizeof(readStart[0]) + sizeof(readLen[0])
+                          + sizeof(readFilter[0]);
+    
+    TableWriterSeqData data;
+
+    for (i = seqLen = 0; i != nreads; ++i) {
+        seqLen += rec->readLen[i];
+    }
+    
+    if (nreads * elemSize + G.keepMismatchQual * seqLen * sizeof(mask[0]) > sizeof(readInfo))
+    {
+        h_readInfo = malloc(nreads * elemSize + G.keepMismatchQual * seqLen * sizeof(mask[0]));
+        if (h_readInfo == NULL)
+            return RC(rcAlign, rcTable, rcWriting, rcMemory, rcExhausted);
+        readStart = h_readInfo;
+    }
+    readLen = (INSDC_coord_len *)&readStart[nreads];
+    alcnt = (uint8_t *)&readLen[nreads];
+    readType = (INSDC_SRA_xread_type *)&alcnt[nreads];
+    readFilter = (INSDC_SRA_read_filter *)&readType[nreads];
+    
+    if (G.keepMismatchQual) {
+        mask = (bool *)&readFilter[nreads];
+        
+        for (i = 0; i != seqLen; ++i) {
+            mask[i] = (rec->qual[i] & 0x80) != 0;
+        }
+    }
+    
+    for (i = 0; i != nreads; ++i) {
+        alcnt[i] = rec->aligned[i] ? 1 : 0;
+        readLen[i] = rec->readLen[i];
+        readStart[i] = rec->readStart[i];
+        readType[i] = SRA_READ_TYPE_BIOLOGICAL | (rec->orientation[i] ?
+                                                  SRA_READ_TYPE_REVERSE:
+                                                  SRA_READ_TYPE_FORWARD
+                                                  );
+        readFilter[i] = isDup ? SRA_READ_FILTER_CRITERIA
+                      : rec->is_bad[i] ? SRA_READ_FILTER_REJECT : SRA_READ_FILTER_PASS;
+    }
+
+    memset(&data, 0, sizeof(data));
+    
+    data.sequence.buffer = rec->seq;
+    data.sequence.elements = seqLen;
+    
+    data.quality.buffer = rec->qual;
+    data.quality.elements = seqLen;
+    
+    if (G.keepMismatchQual) {
+        data.no_quantize_mask.buffer = mask;
+        data.no_quantize_mask.elements = seqLen;
+    }
+    
+    data.alignment_count.buffer = alcnt;
+    data.alignment_count.elements = nreads;
+    
+    data.nreads = nreads;
+    
+    data.read_type.buffer = readType;
+    data.read_type.elements = nreads;
+    
+    data.read_start.buffer = readStart;
+    data.read_start.elements = nreads;
+    
+    data.read_len.buffer = readLen;
+    data.read_len.elements = nreads;
+    
+    data.tmp_key_id = rec->keyId;
+    
+    data.spot_group.buffer = rec->spotGroup;
+    data.spot_group.elements = rec->spotGroupLen;
+    
+    data.cskey.buffer = rec->cskey;
+    data.cskey.elements = nreads;
+    
+    data.read_filter.buffer = readFilter;
+    data.read_filter.elements = nreads;
+    
+    data.platform.buffer = &platform;
+    data.platform.elements = 1;
+    
+    data.ti.buffer = rec->ti;
+    data.ti.elements = nreads;
+    
+    if (!G.no_real_output) {
+        if (self->tbl == NULL) {
+            int csoption = (color ? ewseq_co_ColorSpace : 0);
+
+	    if(G.hasTI) csoption |= ewseq_co_TI;
+            
+            rc = TableWriterSeq_Make(&self->tbl, self->db,
+                                     csoption | ewseq_co_NoLabelData | ewseq_co_SpotGroup, G.QualQuantizer);
+        }
+        if (rc == 0) {
+            rc = TableWriterSeq_Write(self->tbl, &data, &dummyRowId);
+        }
+    }
+    
+    if (h_readInfo)
+        free(h_readInfo);
+    
+    return rc;
+}
+
+rc_t SequenceDoneWriting(Sequence *self)
+{
+    return TableWriterSeq_TmpKeyStart(self->tbl);
+}
+
+rc_t SequenceReadKey(const Sequence *cself, int64_t row, uint64_t *keyId)
+{
+    return TableWriterSeq_TmpKey(cself->tbl, row, keyId);
+}
+
+rc_t SequenceUpdateAlignData(Sequence *self, int64_t rowId, unsigned nreads,
+                             int64_t const primeId[/* nreads */],
+                             uint8_t const algnCnt[/* nreads */])
+{
+    TableWriterData data[2];
+    
+    data[0].buffer = primeId; data[0].elements = nreads;
+    data[1].buffer = algnCnt; data[1].elements = nreads;
+    
+    return TableWriterSeq_WriteAlignmentData(self->tbl, rowId, &data[0], &data[1]);
+}
+
+void SequenceWhack(Sequence *self, bool commit) {
+    uint64_t dummyRows;
+    rc_t rc;
+    
+    VDatabaseRelease(self->db);
+    
+    if (self->tbl == NULL)
+        return;
+    
+    rc = TableWriterSeq_Whack(self->tbl, commit, &dummyRows);
+}
+
+/* MARK: SequenceRecord Object */
+static
+rc_t SequenceRecordResize(SequenceRecord *self,
+                          KDataBuffer *storage,
+                          unsigned numreads,
+                          unsigned seqLen)
+{
+    size_t sz;
+    rc_t rc;
+    
+    sz = seqLen * (sizeof(self->seq[0]) + sizeof(self->qual[0])) +
+         numreads * (sizeof(self->ti) +
+                     sizeof(self->readStart[0]) +
+                     sizeof(self->readLen[0]) +
+                     sizeof(self->aligned[0]) + 
+                     sizeof(self->orientation[0]) +
+                     sizeof(self->alignmentCount[0]) +
+                     sizeof(self->cskey[0])
+                     );
+    storage->elem_bits = 8;
+    rc = KDataBufferResize(storage, sz);
+    if (rc)
+        return rc;
+    self->numreads = numreads;
+    
+    self->ti = (uint64_t *)storage->base;
+    self->readStart = (uint32_t *)&self->ti[numreads];
+    self->readLen = (uint32_t *)&self->readStart[numreads];
+    self->aligned = (bool *)&self->readLen[numreads];
+    self->orientation = (uint8_t *)&self->aligned[numreads];
+    self->is_bad = (uint8_t *)&self->orientation[numreads];
+    self->alignmentCount = (uint8_t *)&self->is_bad[numreads];
+    self->cskey = (char *)&self->alignmentCount[numreads];
+    self->seq = (char *)&self->cskey[numreads];
+    self->qual = (uint8_t *)&self->seq[seqLen];
+
+    self->spotGroup = NULL;
+    self->spotGroupLen = 0;
+    
+    return 0;
+}
+
+rc_t SequenceRecordInit(SequenceRecord *self, unsigned numreads, unsigned readLen[])
+{
+    unsigned i;
+    unsigned seqlen = 0;
+    rc_t rc;
+    
+    for (i = 0; i != numreads; ++i) {
+        seqlen += readLen[i];
+    }
+    rc = SequenceRecordResize(self, &self->storage, numreads, seqlen);
+    if (rc)
+        return rc;
+    memset(self->storage.base, 0, KDataBufferBytes(&self->storage));
+    
+    for (seqlen = 0, i = 0; i != numreads; ++i) {
+        self->readLen[i] = readLen[i];
+        self->readStart[i] = seqlen;
+        seqlen += readLen[i];
+    }
+    self->numreads = numreads;
+    memset(self->cskey, 'T', numreads);
+    return 0;
+}
+
+rc_t SequenceRecordAppend(SequenceRecord *self,
+                          const SequenceRecord *other
+                          )
+{
+    /* save the locations of the original data */
+    unsigned const seq = (uint8_t const *)self->seq - (uint8_t const *)self->storage.base;
+    unsigned const qual = (uint8_t const *)self->qual - (uint8_t const *)self->storage.base;
+    unsigned const cskey = (uint8_t const *)self->cskey - (uint8_t const *)self->storage.base;
+    unsigned const alignmentCount = (uint8_t const *)self->alignmentCount - (uint8_t const *)self->storage.base;
+    unsigned const is_bad = (uint8_t const *)self->is_bad - (uint8_t const *)self->storage.base;
+    unsigned const orientation = (uint8_t const *)self->orientation - (uint8_t const *)self->storage.base;
+    unsigned const aligned = (uint8_t const *)self->aligned - (uint8_t const *)self->storage.base;
+    unsigned const ti = (uint8_t const *)self->ti - (uint8_t const *)self->storage.base;
+    unsigned const readLen = (uint8_t const *)self->readLen - (uint8_t const *)self->storage.base;
+    unsigned const readStart = (uint8_t const *)self->readStart - (uint8_t const *)self->storage.base;
+
+    rc_t rc;
+    unsigned seqlen;
+    unsigned otherSeqlen;
+    unsigned i;
+    unsigned numreads = self->numreads;
+    
+    for (seqlen = 0, i = 0; i != numreads; ++i) {
+        seqlen += self->readLen[i];
+    }
+    for (otherSeqlen = 0, i = 0; i != other->numreads; ++i) {
+        otherSeqlen += other->readLen[i];
+    }
+
+    rc = SequenceRecordResize(self, &self->storage, self->numreads + other->numreads, seqlen + otherSeqlen);
+    if (rc)
+        return rc;
+    /* this needs to be reverse order from assignment in Resize function
+     * these regions can overlap
+     */
+    memmove(self->qual,             &((uint8_t const *)self->storage.base)[qual],              seqlen);
+    memmove(self->seq,              &((uint8_t const *)self->storage.base)[seq],               seqlen);
+    memmove(self->cskey,            &((uint8_t const *)self->storage.base)[cskey],             numreads * sizeof(self->cskey[0]));
+    memmove(self->alignmentCount,   &((uint8_t const *)self->storage.base)[alignmentCount],    numreads * sizeof(self->alignmentCount[0]));
+    memmove(self->is_bad,           &((uint8_t const *)self->storage.base)[is_bad],            numreads * sizeof(self->is_bad[0]));
+    memmove(self->orientation,      &((uint8_t const *)self->storage.base)[orientation],       numreads * sizeof(self->orientation[0]));
+    memmove(self->aligned,          &((uint8_t const *)self->storage.base)[aligned],           numreads * sizeof(self->aligned[0]));
+    memmove(self->readLen,          &((uint8_t const *)self->storage.base)[readLen],           numreads * sizeof(self->readLen[0]));
+    memmove(self->ti,               &((uint8_t const *)self->storage.base)[ti],                numreads * sizeof(self->ti[0]));
+    
+    memcpy(&self->ti[numreads],             other->ti,              other->numreads * sizeof(self->ti[0]));
+    memcpy(&self->readLen[numreads],        other->readLen,         other->numreads * sizeof(self->readLen[0]));
+    memcpy(&self->aligned[numreads],        other->aligned,         other->numreads * sizeof(self->aligned[0]));
+    memcpy(&self->orientation[numreads],    other->orientation,     other->numreads * sizeof(self->orientation[0]));
+    memcpy(&self->is_bad[numreads],         other->is_bad,          other->numreads * sizeof(self->is_bad[0]));
+    memcpy(&self->alignmentCount[numreads], other->alignmentCount,  other->numreads * sizeof(self->alignmentCount[0]));
+    memcpy(&self->cskey[numreads],          other->cskey,           other->numreads * sizeof(self->cskey[0]));
+    memcpy(&self->seq[seqlen],              other->seq,             otherSeqlen);
+    memcpy(&self->qual[seqlen],             other->qual,            otherSeqlen);
+    
+    for (i = 0, seqlen = 0; i != self->numreads; ++i) {
+        self->readStart[i] = seqlen;
+        seqlen += self->readLen[i];
+    }
+    
+    return 0;
+}
diff --git a/tools/bam-loader/sequence-writer.h b/tools/bam-loader/sequence-writer.h
new file mode 100644
index 0000000..ccd4071
--- /dev/null
+++ b/tools/bam-loader/sequence-writer.h
@@ -0,0 +1,84 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef BAM_LOAD_SEQUENCE_WRITER_H_
+#define BAM_LOAD_SEQUENCE_WRITER_H_ 1
+
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
+#include <klib/text.h>
+#include <klib/data-buffer.h>
+
+struct TableWriterSeq;
+
+typedef struct s_sequence_record {
+    char *seq;
+    uint8_t *qual;
+    uint32_t *readStart;
+    uint32_t *readLen;
+    uint8_t *orientation;
+    uint8_t *is_bad;
+    uint8_t *alignmentCount;
+    char *spotGroup;
+    bool *aligned;
+    char *cskey;
+    uint64_t *ti;
+    uint64_t keyId;
+    unsigned spotGroupLen;
+    KDataBuffer storage;
+    uint8_t numreads;
+} SequenceRecord;
+
+
+rc_t SequenceRecordInit(SequenceRecord *self,
+                        unsigned numreads, unsigned readLen[]);
+
+rc_t SequenceRecordAppend(SequenceRecord *self,
+                          const SequenceRecord *other);
+
+typedef struct s_sequence {
+    VDatabase *db;
+    struct TableWriterSeq const *tbl;
+} Sequence;
+
+Sequence *SequenceInit(Sequence *self, VDatabase *db);
+
+rc_t SequenceWriteRecord(Sequence *self, SequenceRecord const *rec,
+                         bool color, bool isDup, INSDC_SRA_platform_id platform);
+
+rc_t SequenceDoneWriting(Sequence *self);
+rc_t SequenceReadKey(const Sequence *self, int64_t row, uint64_t *key);
+rc_t SequenceUpdateAlignData(Sequence *self, int64_t row, unsigned nreads,
+                             const int64_t primeId[/* nreads */],
+                             const uint8_t alignCount[/* nreads */]);
+
+void SequenceWhack(Sequence *self, bool commit);
+
+
+#endif /* ndef BAM_LOAD_SEQUENCE_WRITER_H_ */
diff --git a/tools/cg-load/Makefile b/tools/cg-load/Makefile
new file mode 100644
index 0000000..a84ba01
--- /dev/null
+++ b/tools/cg-load/Makefile
@@ -0,0 +1,119 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/cg-load
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+	cg-load
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+	@ $(MAKE_CMD) $(TARGDIR)/std
+
+$(ALL_TOOLS): vers-includes
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# cg-load
+#
+CGLOAD_SRC = \
+	file-version-factory \
+	file \
+	f1_3 \
+	f1_5 \
+	f2_0 \
+	f2_2 \
+	factory-reads \
+	factory-mappings \
+	factory-evidence-intervals \
+	factory-evidence-dnbs \
+	writer-seq \
+	writer-algn \
+	writer-evidence-intervals \
+	writer-evidence-dnbs \
+	cg-load
+
+CGLOAD_OBJ = \
+	$(addsuffix .$(OBJX),$(CGLOAD_SRC))
+
+CGLOAD_LIB = \
+	-lload \
+	-lkapp \
+	-lalign-writer \
+	-dwaxf \
+	-dwsraxf \
+	-dwvxf \
+	-lwvdb \
+	-lwkdb \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
+	-lksrch \
+	-lkfg \
+	-lkfs \
+	-lklib \
+	-lkq \
+	-lkproc \
+	-lm
+
+$(BINDIR)/cg-load: $(CGLOAD_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(CGLOAD_LIB)
diff --git a/tools/cg-load/cg-load.c b/tools/cg-load/cg-load.c
new file mode 100644
index 0000000..c73db05
--- /dev/null
+++ b/tools/cg-load/cg-load.c
@@ -0,0 +1,1120 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/container.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/rc.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <kfs/directory.h>
+#include <kfs/arc.h>
+#include <kfs/tar.h>
+#include <kfs/file.h>
+#include <kdb/manager.h>
+#include <kdb/meta.h>
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <kapp/loader-meta.h>
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <insdc/insdc.h>
+#include <align/writer-reference.h>
+#include <kapp/log-xml.h>
+
+#include "debug.h"
+#include "cg-load.vers.h"
+#include "file.h"
+#include "writer-seq.h"
+#include "writer-algn.h"
+#include "writer-evidence-intervals.h"
+
+#include <os-native.h>
+#include <sysalloc.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <limits.h>
+#include <assert.h>
+
+typedef struct SParam_struct
+{
+    const char* argv0;
+
+    KDirectory* input_dir;
+    const KDirectory *map_dir;
+    const KDirectory *asm_dir;
+    KDirectory* output_dir;
+
+    const char* map_path;
+    const char* asm_path;
+    const char* schema;
+    const char* refseqcfg;
+    const char* refseqpath;
+    const char* library;
+    char const** refFiles; /* NULL-terminated array pointing to argv */
+    /* mostly for debugging */
+    uint32_t refseq_chunk;
+    const char* out;
+    uint32_t force;
+    uint32_t force_refw;
+    uint32_t force_readw;
+    uint32_t no_read_ahead;
+    const char* qual_quant;
+    uint32_t no_spot_group;
+    uint32_t min_mapq;
+    uint32_t single_mate;
+    uint32_t cluster_size;
+} SParam;
+
+typedef struct DB_Handle_struct {
+    VDBManager* mgr;
+    VSchema* schema;
+    VDatabase* db;
+    const ReferenceMgr* rmgr;
+    const CGWriterSeq* wseq;
+    TReadsData* reads;
+    const CGWriterAlgn* walgn;
+    TMappingsData* mappings;
+    const CGWriterEvdInt* wev_int;
+    TEvidenceIntervalsData* ev_int;
+    const CGWriterEvdDnbs* wev_dnb;
+    TEvidenceDnbsData* ev_dnb;
+} DB_Handle;
+
+static
+rc_t DB_Init(const SParam* p, DB_Handle* h)
+{
+    rc_t rc;
+
+    if( (rc = VDBManagerMakeUpdate(&h->mgr, NULL)) != 0 ) {
+        LOGERR(klogErr, rc, "failed to create VDB Manager");
+
+    }
+    else if( (rc = VDBManagerMakeSchema(h->mgr, &h->schema)) != 0 ) {
+        LOGERR(klogErr, rc, "failed to create schema");
+
+    }
+    else if( (rc = VSchemaParseFile(h->schema, p->schema)) != 0 ) {
+        PLOGERR(klogErr, (klogErr, rc, "failed to parse schema file '$(schema)'", PLOG_S(schema), p->schema));
+
+    }
+    else if( (rc = VDBManagerCreateDB(h->mgr, &h->db, h->schema, "NCBI:align:db:alignment_evidence",
+                                        p->force ? kcmInit : kcmCreate, p->out)) != 0 ) {
+        PLOGERR(klogErr, (klogErr, rc, "failed to create database at '$(path)'", PLOG_S(path), p->out));
+
+    }
+    else if( (rc = ReferenceMgr_Make(&h->rmgr, h->db, h->mgr, (p->force_refw ? ewrefmgr_co_allREADs : 0),
+                        p->refseqcfg, p->refseqpath, p->refseq_chunk, 350 * 1024 * 1024, 0)) != 0 ) {
+        LOGERR(klogErr, rc, "failed to create reference manager");
+
+    }
+    else if( (rc = CGWriterAlgn_Make(&h->walgn, &h->mappings, h->db, h->rmgr, p->min_mapq, p->single_mate, p->cluster_size)) != 0 ) {
+        LOGERR(klogErr, rc, "failed to create alignment writer");
+
+    }
+    else if( (rc = CGWriterSeq_Make(&h->wseq, &h->reads, h->db, (p->force_readw ? ewseq_co_SaveRead : 0) |
+                                      (p->no_spot_group ? 0 : ewseq_co_SpotGroup), p->qual_quant)) != 0 ) {
+        LOGERR(klogErr, rc, "failed to create sequence writer");
+
+    } else if( p->asm_path && (rc = CGWriterEvdInt_Make(&h->wev_int, &h->ev_int, h->db, h->rmgr, 0)) != 0 ) {
+        LOGERR(klogErr, rc, "failed to create evidence intervals writer");
+
+    } else if( p->asm_path && (rc = CGWriterEvdDnbs_Make(&h->wev_dnb, &h->ev_dnb, h->db, h->rmgr, 0)) != 0 ) {
+        LOGERR(klogErr, rc, "failed to create evidence dnbs writer");
+    } else {
+        const char** r = p->refFiles;
+        while( rc == 0 && *r != NULL ) {
+            if( (rc = ReferenceMgr_FastaPath(h->rmgr, *r++)) != 0 ) {
+                PLOGERR(klogInfo, (klogInfo, rc, "fasta file '$(file)'", "file=%s", r[-1]));
+            }
+        }
+    }
+    return rc;
+}
+
+static
+rc_t DB_Fini(const SParam* p, DB_Handle* h, bool drop)
+{
+    rc_t rc = 0, rc2;
+
+    /* THIS FUNCTION MAKES NO ATTEMPT TO PRESERVE INITIAL ERROR CODES
+       EACH SUCCESSIVE ERROR OVERWRITES THE PREVIOUS CODE */
+    if( h != NULL ) {
+        PLOGMSG(klogInfo, (klogInfo, "Fini SEQUENCE", "severity=status"));
+        if( (rc2 = CGWriterSeq_Whack(h->wseq, !drop, NULL)) != 0 && !drop ) {
+            drop = true;
+            rc = rc2;
+        }
+        h->wseq = NULL;
+        h->reads = NULL;
+        PLOGMSG(klogInfo, (klogInfo, "Fini (PRI&SEC)_ALIGNMENT", "severity=status"));
+        if( (rc2 = CGWriterAlgn_Whack(h->walgn, !drop, NULL, NULL)) != 0 && !drop ) {
+            drop = true;
+            rc = rc2;
+        }
+        h->walgn = NULL;
+        h->mappings = NULL;
+        PLOGMSG(klogInfo, (klogInfo, "Fini EVIDENCE_INTERVAL", "severity=status"));
+        if( (rc2 = CGWriterEvdInt_Whack(h->wev_int, !drop, NULL)) != 0 && !drop ) {
+            drop = true;
+            rc = rc2;
+        }
+        h->wev_int = NULL;
+        h->ev_int = NULL;
+        PLOGMSG(klogInfo, (klogInfo, "Fini EVIDENCE_ALIGNMENT", "severity=status"));
+        if( (rc2 = CGWriterEvdDnbs_Whack(h->wev_dnb, !drop, NULL)) != 0 && !drop ) {
+            drop = true;
+            rc = rc2;
+        }
+        h->wev_dnb = NULL;
+        h->ev_dnb = NULL;
+        PLOGMSG(klogInfo, (klogInfo, "Fini calculating reference coverage", "severity=status"));
+        if( (rc2 = ReferenceMgr_Release(h->rmgr, !drop, NULL, drop ? false : true)) != 0 && !drop ) {
+            drop = true;
+            rc = rc2;
+	    LOGERR(klogErr, rc, "Failed calculating reference coverage");
+        }
+        h->rmgr = NULL;
+        if( rc == 0 )
+        {
+            KMetadata* meta;
+            if( (rc = VDatabaseOpenMetadataUpdate(h->db, &meta)) == 0 ) {
+                KMDataNode *node;
+                if( (rc = KMetadataOpenNodeUpdate(meta, &node, "/")) == 0 ) {
+                    if( (rc = KLoaderMeta_Write(node, p->argv0, __DATE__, "Complete Genomics", KAppVersion())) != 0 ) {
+                        LOGERR(klogErr, rc, "Cannot update loader meta");
+                    }
+                    KMDataNodeRelease(node);
+                }
+                KMetadataRelease(meta);
+            }
+        }
+        PLOGMSG(klogInfo, (klogInfo, "Fini VDatabaseRelease", "severity=status"));
+        VDatabaseRelease(h->db);
+        h->db = NULL;
+        VSchemaRelease(h->schema);
+        h->schema = NULL;
+        if( drop || rc != 0 ) {
+            rc2 = VDBManagerDrop(h->mgr, kptDatabase, p->out);
+            if( GetRCState(rc2) == rcNotFound ) {
+                /* WHAT WOULD BE THE POINT OF RESETTING "rc" TO ZERO? */
+                rc = 0;
+            } else if( rc2 != 0 ) {
+                if ( rc == 0 )
+                    rc = rc2;
+                PLOGERR(klogErr, (klogErr, rc2, "cannot drop db at '$(path)'", PLOG_S(path), p->out));
+            }
+        }
+        VDBManagerRelease(h->mgr);
+        h->mgr = NULL;
+    }
+    return rc;
+}
+
+typedef struct FGroupKey_struct {
+    CG_EFileType type;
+    const CGFIELD_ASSEMBLY_ID_TYPE* assembly_id;
+    union {
+        struct {
+            const CGFIELD_SLIDE_TYPE* slide;
+            const CGFIELD_LANE_TYPE* lane;
+            const CGFIELD_BATCH_FILE_NUMBER_TYPE* batch_file_number;
+        } map;
+        struct {
+            const CGFIELD_SAMPLE_TYPE* sample;
+            const CGFIELD_CHROMOSOME_TYPE* chromosome;
+        } asmb;
+    } u;
+} FGroupKey;
+
+static
+rc_t CC FGroupKey_Make(FGroupKey* key, const CGLoaderFile* file, const SParam* param)
+{
+    rc_t rc = 0;
+    CG_EFileType ftype;
+
+    if( (rc = CGLoaderFile_GetType(file, &ftype)) == 0 ) {
+        switch(ftype) {
+            case cg_eFileType_READS:
+            case cg_eFileType_MAPPINGS:
+                key->type = cg_eFileType_READS;
+                if( (rc = CGLoaderFile_GetAssemblyId(file, &key->assembly_id)) == 0 &&
+                    (rc = CGLoaderFile_GetSlide(file, &key->u.map.slide)) == 0 &&
+                    (rc = CGLoaderFile_GetLane(file, &key->u.map.lane)) == 0 ) {
+                    rc = CGLoaderFile_GetBatchFileNumber(file, &key->u.map.batch_file_number);
+                }
+                break;
+            case cg_eFileType_EVIDENCE_INTERVALS:
+            case cg_eFileType_EVIDENCE_DNBS:
+                if( param->asm_path != NULL ) {
+                    /* do not pick up ASM files if not requested */
+                    key->type = cg_eFileType_EVIDENCE_INTERVALS;
+                    if( (rc = CGLoaderFile_GetAssemblyId(file, &key->assembly_id)) == 0 &&
+                        (rc = CGLoaderFile_GetSample(file, &key->u.asmb.sample)) == 0 ) {
+                        rc = CGLoaderFile_GetChromosome(file, &key->u.asmb.chromosome);
+                    }
+                    break;
+                }
+            default:
+                rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcIgnored);
+                break;
+        }
+    }
+    return rc;
+}
+static
+rc_t CC FGroupKey_Validate(const FGroupKey* key)
+{
+    rc_t rc = 0;
+    DEBUG_MSG(5, ("KEY: "));
+    switch( key->type ) {
+        case cg_eFileType_READS:
+            DEBUG_MSG(5, ("%s:%s:%s:%04u", key->assembly_id, key->u.map.slide, key->u.map.lane, key->u.map.batch_file_number));
+            if( !key->assembly_id || !key->u.map.slide || !key->u.map.lane || !key->u.map.batch_file_number ) {
+                rc = RC(rcExe, rcQueue, rcValidating, rcId, rcIncomplete);
+            }
+            break;
+        case cg_eFileType_EVIDENCE_INTERVALS:
+            DEBUG_MSG(5, ("%s:%s:%s", key->assembly_id, key->u.asmb.sample, key->u.asmb.chromosome));
+            if( !key->assembly_id || !key->u.asmb.sample || !key->u.asmb.chromosome ) {
+                rc = RC(rcExe, rcQueue, rcValidating, rcId, rcIncomplete);
+            }
+            break;
+        default:
+            DEBUG_MSG(5, ("CORRUPT!!"));
+            rc = RC(rcExe, rcQueue, rcValidating, rcId, rcWrongType);
+            break;
+    }
+    return rc;
+}
+
+typedef struct FGroupMAP_struct {
+    BSTNode dad;
+    FGroupKey key;
+    const CGLoaderFile* seq;
+    const CGLoaderFile* align;
+} FGroupMAP;
+
+static
+void FGroupMAP_CloseFiles(FGroupMAP *g)
+{
+    CGLoaderFile_Close(g->seq);
+    CGLoaderFile_Close(g->align);
+}
+
+static
+void CC FGroupMAP_Whack( BSTNode *node, void *data )
+{
+    FGroupMAP* n = (FGroupMAP*)node;
+    CGLoaderFile_Release(n->seq, false);
+    CGLoaderFile_Release(n->align, false);
+    free(node);
+}
+
+static
+int CC FGroupMAP_Cmp( const void *item, const BSTNode *node )
+{
+    const FGroupKey* i = (const FGroupKey*)item;
+    const FGroupMAP* n = (const FGroupMAP*)node;
+
+    int r = strcmp(i->assembly_id, n->key.assembly_id);
+    if( r == 0 ) {
+        if( i->type == n->key.type ) {
+            switch( i->type ) {
+                case cg_eFileType_READS:
+                    if( (r = strcmp(i->u.map.slide, n->key.u.map.slide)) == 0 ) {
+                        if( (r = strcmp(i->u.map.lane, n->key.u.map.lane)) == 0 ) {
+                            r = *(i->u.map.batch_file_number) - *(n->key.u.map.batch_file_number);
+                        }
+                    }
+                    break;
+                case cg_eFileType_EVIDENCE_INTERVALS:
+                    if( (r = strcmp(i->u.asmb.sample, n->key.u.asmb.sample)) == 0 ) {
+                        r = strcmp(i->u.asmb.chromosome, n->key.u.asmb.chromosome);
+                    }
+                    break;
+                default:
+                    r = -1;
+                    break;
+            }
+        } else {
+            r = -1;
+        }
+    }
+    return r;
+}
+
+static
+int CC FGroupMAP_Sort( const BSTNode *item, const BSTNode *n )
+{
+    return FGroupMAP_Cmp(&((const FGroupMAP*)item)->key, n);
+}
+
+typedef struct FGroupMAP_FindData_struct {
+    FGroupKey key;
+    int64_t rowid;
+} FGroupMAP_FindData;
+
+static
+bool CC FGroupMAP_FindRowId( BSTNode *node, void *data )
+{
+    FGroupMAP_FindData* d = (FGroupMAP_FindData*)data;
+    const FGroupMAP* n = (const FGroupMAP*)node;
+
+    if( FGroupMAP_Cmp(&d->key, node) == 0 ) {
+        if( CGLoaderFile_GetStartRow(n->seq, &d->rowid) == 0 ) {
+            return true;
+        }
+    }
+    return false;
+}
+
+static
+rc_t CC FGroupMAP_Set(FGroupMAP* g, const CGLoaderFile* file)
+{
+    rc_t rc = 0;
+    CG_EFileType ftype;
+
+    if( (rc = CGLoaderFile_GetType(file, &ftype)) == 0 ) {
+        if( g->key.type == cg_eFileType_READS ) {
+            if( ftype == cg_eFileType_READS ) {
+                if( g->seq == NULL ) {
+                    g->seq = file;
+                } else {
+                    rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcDuplicate);
+                }
+            } else if( ftype == cg_eFileType_MAPPINGS ) {
+                if( g->align == NULL ) {
+                    g->align = file;
+                } else {
+                    rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcDuplicate);
+                }
+            } else {
+                rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcWrongType);
+            }
+        } else if( g->key.type == cg_eFileType_EVIDENCE_INTERVALS ) {
+            if( ftype == cg_eFileType_EVIDENCE_INTERVALS ) {
+                if( g->seq != NULL ) {
+                    rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcDuplicate);
+                } else {
+                    g->seq = file;
+                }
+            } else if( ftype == cg_eFileType_EVIDENCE_DNBS ) {
+                if( g->align == NULL ) {
+                    g->align = file;
+                } else {
+                    rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcDuplicate);
+                }
+            } else {
+                rc = RC(rcExe, rcQueue, rcInserting, rcItem, rcWrongType);
+            }
+        } else {
+            rc = RC(rcExe, rcQueue, rcInserting, rcType, rcUnexpected);
+        }
+    }
+    return rc;
+}
+
+static
+void CC FGroupMAP_Validate( BSTNode *n, void *data )
+{
+    const FGroupMAP* g = (const FGroupMAP*)n;
+    rc_t rc = 0, *rc_out = (rc_t*)data;
+    const char* rnm = NULL, *mnm = NULL;
+
+    rc = FGroupKey_Validate(&g->key);
+    if( g->seq != NULL ) {
+        CGLoaderFile_Filename(g->seq, &rnm);
+        rnm = rnm ? strrchr(rnm, '/') : rnm;
+        DEBUG_MSG(5, (" READS(%s)", rnm));
+    }
+    if( g->align ) {
+        CGLoaderFile_Filename(g->align, &mnm);
+        mnm = mnm ? strrchr(mnm, '/') : mnm;
+        DEBUG_MSG(5, (" MAPPINGS(%s)", mnm));
+    }
+    DEBUG_MSG(5, ("\n"));
+    if( rc == 0 && g->seq == NULL ) {
+        rc = RC(rcExe, rcQueue, rcValidating, rcItem, rcIncomplete);
+    }
+
+    /* THIS USED TO WIPE OUT THE "rc" ON EACH ENTRY */
+    if( rc != 0)  {
+        PLOGERR(klogErr, (klogErr, rc,  "file pair $(f1)[mandatory], $(f2)[optional]", PLOG_2(PLOG_S(f1),PLOG_S(f2)), rnm, mnm));
+        if ( * rc_out == 0 )
+            *rc_out = rc;
+#if 0
+    } else {
+        *rc_out = RC(0, 0, 0, 0, 0);
+#endif
+    }
+}
+
+typedef struct DirVisit_Data_Struct {
+    const SParam* param;
+    BSTree* tree;
+    const KDirectory* dir;
+} DirVisit_Data;
+
+/* you cannot addref to this dir object cause it's created on stack silently */
+static
+rc_t CC DirVisitor(const KDirectory *dir, uint32_t type, const char *name, void *data)
+{
+    rc_t rc = 0;
+    DirVisit_Data* d = (DirVisit_Data*)data;
+
+    if( (type & ~kptAlias) == kptFile ) {
+        if (strcmp(&name[strlen(name) - 4], ".tsv") == 0 ||
+            strcmp(&name[strlen(name) - 8], ".tsv.bz2") == 0 ||
+            strcmp(&name[strlen(name) - 7], ".tsv.gz") == 0)
+        {
+            char buf[4096];
+            const CGLoaderFile* file;
+            FGroupKey key;
+            if( (rc = KDirectoryResolvePath(dir, true, buf, sizeof(buf), name)) == 0 &&
+                (rc = CGLoaderFile_Make(&file, d->dir, buf, NULL, !d->param->no_read_ahead)) == 0 &&
+                (rc = FGroupKey_Make(&key, file, d->param)) == 0 ) {
+
+                FGroupMAP* found = (FGroupMAP*)BSTreeFind(d->tree, &key, FGroupMAP_Cmp);
+                DEBUG_MSG(5, ("file %s recognized\n", name));
+                if( found != NULL ) {
+                    rc = FGroupMAP_Set(found, file);
+                } else {
+                    FGroupMAP* x = calloc(1, sizeof(*x));
+                    if( x == NULL ) {
+                        rc = RC(rcExe, rcFile, rcInserting, rcMemory, rcExhausted);
+                    } else {
+                        memcpy(&x->key, &key, sizeof(key));
+                        if( (rc = FGroupMAP_Set(x, file)) == 0 ) {
+                            rc = BSTreeInsertUnique(d->tree, &x->dad, NULL, FGroupMAP_Sort);
+                        }
+                    }
+                }
+            } else if( GetRCObject(rc) == rcItem && GetRCState(rc) == rcIgnored ) {
+                DEBUG_MSG(5, ("file %s ignored\n", name));
+                rc = CGLoaderFile_Release(file, true);
+                file = NULL;
+            }
+            if( rc != 0 && file != NULL ) {
+                CGLoaderFile_LOG(file, klogErr, rc, NULL, NULL);
+                CGLoaderFile_Release(file, true);
+            }
+        } else if( strcmp(&name[strlen(name) - 4], ".tar") == 0 ) {
+            const KDirectory* tmp = d->dir;
+            if( (rc = KDirectoryOpenArcDirRead(dir, &d->dir, true, name, tocKFile, KArcParseTAR, NULL, NULL)) == 0 ) {
+                rc = KDirectoryVisit(d->dir, true, DirVisitor, d, ".");
+                KDirectoryRelease(d->dir);
+            }
+            d->dir = tmp;
+        }
+    }
+    return rc;
+}
+
+typedef struct FGroupMAP_LoadData_struct {
+    rc_t rc;
+    const SParam* param;
+    DB_Handle db;
+    const BSTree* reads;
+} FGroupMAP_LoadData;
+
+bool CC FGroupMAP_LoadReads( BSTNode *node, void *data )
+{
+    FGroupMAP* n = (FGroupMAP*)node;
+    FGroupMAP_LoadData* d = (FGroupMAP_LoadData*)data;
+
+    DEBUG_MSG(5, (" started\n", FGroupKey_Validate(&n->key)));
+    while( d->rc == 0 )
+    {
+        if( (d->rc = CGLoaderFile_GetRead(n->seq, d->db.reads)) == 0 ) {
+            if( (d->db.reads->flags & (cg_eLeftHalfDnbNoMatches | cg_eLeftHalfDnbMapOverflow)) &&
+                (d->db.reads->flags & (cg_eRightHalfDnbNoMatches | cg_eRightHalfDnbMapOverflow)) ) {
+                d->db.mappings->map_qty = 0;
+            } else {
+                d->rc = CGLoaderFile_GetMapping(n->align, d->db.mappings);
+            }
+            /* alignment written 1st than sequence -> primary_alignment_id must be set!! */
+            if( d->rc == 0 && (d->rc = CGWriterAlgn_Write(d->db.walgn, d->db.reads)) == 0 ) {
+                d->rc = CGWriterSeq_Write(d->db.wseq);
+            }
+        }
+        if( GetRCState(d->rc) == rcDone && GetRCObject(d->rc) == rcData ) {
+            bool eof = false;
+            d->rc = 0;
+            if( n->align == NULL || ((d->rc = CGLoaderFile_IsEof(n->align, &eof)) == 0 && eof) ) {
+                /* mappings file EOF detected ok */
+                DEBUG_MSG(5, (" done\n", FGroupKey_Validate(&n->key)));
+                break;
+            } else if( d->rc == 0 ) {
+                /* not EOF */
+                d->rc = RC(rcExe, rcFile, rcReading, rcData, rcUnexpected);
+                CGLoaderFile_LOG(n->align, klogErr, d->rc,
+                    "extra mappings, possible that corresponding reads file is truncated", NULL);
+            }
+        }
+        d->rc = d->rc ? d->rc : Quitting();
+    }
+    if( d->rc != 0 ) {
+        CGLoaderFile_LOG(n->seq, klogErr, d->rc, NULL, NULL);
+        CGLoaderFile_LOG(n->align, klogErr, d->rc, NULL, NULL);
+    }
+    FGroupMAP_CloseFiles(n);
+    return d->rc != 0;
+}
+
+bool CC FGroupMAP_LoadEvidence( BSTNode *node, void *data )
+{
+    FGroupMAP* n = (FGroupMAP*)node;
+    FGroupMAP_LoadData* d = (FGroupMAP_LoadData*)data;
+
+    DEBUG_MSG(5, ("' started\n", FGroupKey_Validate(&n->key)));
+     while( d->rc == 0 ) {
+        if( (d->rc = CGLoaderFile_GetEvidenceIntervals(n->seq, d->db.ev_int)) == 0 ) {
+            int64_t evint_rowid;
+            if( n->align != NULL ) {
+                d->rc = CGLoaderFile_GetEvidenceDnbs(n->align, d->db.ev_int->interval_id, d->db.ev_dnb);
+            } else {
+		d->db.ev_dnb->qty = 0; /***weird, but the easiest place to fix ***/
+	    }
+            /* interval written 1st than dnbs which uses interval as reference */
+            if( d->rc == 0 ) {
+                d->rc = CGWriterEvdInt_Write(d->db.wev_int, d->db.ev_dnb, &evint_rowid);
+            }
+            if( d->rc == 0 && n->align != NULL ) {
+                /* attach dnbs to reads */
+                uint16_t i;
+                FGroupMAP_FindData found;
+
+                found.key.type = cg_eFileType_READS;
+                d->rc = CGLoaderFile_GetAssemblyId(n->align, &found.key.assembly_id);
+                for(i = 0; d->rc == 0 && i < d->db.ev_dnb->qty; i++) {
+                    found.key.u.map.slide = d->db.ev_dnb->dnbs[i].slide;
+                    found.key.u.map.lane = d->db.ev_dnb->dnbs[i].lane;
+                    found.key.u.map.batch_file_number = &d->db.ev_dnb->dnbs[i].file_num_in_lane;
+                    if( BSTreeDoUntil(d->reads, false, FGroupMAP_FindRowId, &found) ) {
+                        d->rc = CGWriterEvdDnbs_SetSEQ(d->db.wev_dnb, i, found.rowid);
+                    } else {
+                        d->rc = RC(rcExe, rcFile, rcWriting, rcData, rcInconsistent);
+                    }
+                }
+            }
+            if( d->rc == 0 && n->align != NULL ) {
+                d->rc = CGWriterEvdDnbs_Write(d->db.wev_dnb, d->db.ev_int, evint_rowid);
+            }
+        }
+        if( GetRCState(d->rc) == rcDone && GetRCObject(d->rc) == rcData ) {
+            bool eof = false;
+            d->rc = 0;
+            if( n->align == NULL || ((d->rc = CGLoaderFile_IsEof(n->align, &eof)) == 0 && eof) ) {
+                /* dnbs file EOF detected ok */
+                DEBUG_MSG(5, ("' done\n", FGroupKey_Validate(&n->key)));
+                break;
+            } else if( d->rc == 0 ) {
+                /* not EOF */
+                d->rc = RC(rcExe, rcFile, rcReading, rcData, rcUnexpected);
+                CGLoaderFile_LOG(n->align, klogErr, d->rc,
+                    "extra dnbs, possible that corresponding intervals file is truncated", NULL);
+            }
+        }
+        d->rc = d->rc ? d->rc : Quitting();
+    }
+    if( d->rc != 0 ) {
+        CGLoaderFile_LOG(n->seq, klogErr, d->rc, NULL, NULL);
+        CGLoaderFile_LOG(n->align, klogErr, d->rc, NULL, NULL);
+    }
+    FGroupMAP_CloseFiles(n);
+    return d->rc != 0;
+}
+
+
+static const char * lib_dst = "extra/library";
+
+static rc_t copy_library( const KDirectory * src_dir, KDirectory * dst_dir,
+                          const char * in_path, const char * out_path )
+{
+    rc_t rc;
+    size_t l = string_size( out_path ) + string_size( lib_dst ) + 2;
+    char * dst = malloc( l );
+    if ( dst == NULL )
+        rc = RC( rcExe, rcFile, rcCopying, rcMemory, rcExhausted );
+    else
+    {
+        size_t written;
+        rc = string_printf( dst, l, &written, "%s/%s", out_path, lib_dst );
+        if ( rc == 0 )
+            rc = KDirectoryCopy( src_dir, dst_dir, true, in_path, dst );
+        free( dst );
+    }
+    return rc;
+}
+
+
+static rc_t open_dir_or_tar( const KDirectory *dir, const KDirectory **sub, const char * name )
+{
+    rc_t rc1, rc2;
+    rc1 = KDirectoryOpenDirRead( dir, sub, true, name );
+    if ( rc1 != 0 )
+    {
+        rc2 = KDirectoryOpenTarArchiveRead( dir, sub, true, name );
+        if ( rc2 == 0 )
+            rc1 = rc2;
+    }
+    return rc1;
+}
+
+static rc_t Load( SParam* param )
+{
+    rc_t rc = 0, rc1 = 0;
+    BSTree slides, evidence;
+    
+
+    param->map_dir = NULL;
+    param->asm_dir = NULL;
+    param->output_dir = ( KDirectory * )param->input_dir;
+    BSTreeInit( &slides );
+    BSTreeInit( &evidence );
+
+    rc = open_dir_or_tar( param->input_dir, &param->map_dir, param->map_path );
+    if ( rc == 0 )
+    {
+        DirVisit_Data dv;
+
+        dv.param = param;
+        dv.tree = &slides;
+        dv.dir = param->map_dir;
+        rc = KDirectoryVisit( param->map_dir, true, DirVisitor, &dv, NULL );
+        if ( rc == 0 )
+        {
+            if ( param->asm_path != NULL )
+            {
+                rc_t rc2 = open_dir_or_tar( param->input_dir, &param->asm_dir, param->asm_path );
+                if ( rc2 == 0 )
+                {
+                    dv.tree = &evidence;
+                    dv.dir = param->asm_dir;
+                    rc = KDirectoryVisit( param->asm_dir, true, DirVisitor, &dv, NULL );
+                }
+            }
+            if ( rc == 0 )
+            {
+                /* SHOULD HAVE A BSTreeEmpty FUNCTION OR SOMETHING...
+                   MAKE ONE HERE - WITH KNOWLEDGE THAT TREE IS NOT NULL: */
+#ifndef BSTreeEmpty
+#define BSTreeEmpty( bst ) \
+    ( ( bst ) -> root == NULL )
+#endif
+                if ( BSTreeEmpty ( & slides ) && BSTreeEmpty ( & evidence ) )
+                    rc = RC( rcExe, rcFile, rcReading, rcData, rcInsufficient );
+                else
+                {
+                    /* CORRECTED SETTING OF "rc" IN "FGroupMAP_Validate" */
+                    assert ( rc == 0 );
+                    BSTreeForEach( &slides, false, FGroupMAP_Validate, &rc );
+                    BSTreeForEach( &evidence, false, FGroupMAP_Validate, &rc );
+                }
+
+                if ( rc == 0 )
+                {
+                    FGroupMAP_LoadData data;
+
+                    PLOGMSG( klogInfo, ( klogInfo, "file set validation complete", "severity=status" ) );
+                    memset( &data, 0, sizeof( data ) );
+                    data.rc = 0;
+                    data.param = param;
+                    data.reads = &slides;
+                    rc = DB_Init( param, &data.db );
+                    if ( rc == 0 )
+                    {
+                        BSTreeDoUntil( &slides, false, FGroupMAP_LoadReads, &data );
+                        rc = data.rc;
+                        if ( rc == 0 )
+                        {
+                            PLOGMSG( klogInfo, ( klogInfo, "MAP loaded", "severity=status" ) );
+                            BSTreeDoUntil( &evidence, false, FGroupMAP_LoadEvidence, &data );
+                            rc = data.rc;
+                            if ( rc == 0 )
+                                PLOGMSG( klogInfo, ( klogInfo, "ASM loaded", "severity=status" ) );
+                        }
+                    }
+                    rc1 = DB_Fini( param, &data.db, rc != 0 );
+                    if ( rc == 0 )
+                        rc = rc1;
+                }
+            }
+        }
+
+        /* copy the extra library ( file or recursive directory ) */
+        if ( rc == 0 && param->library != NULL )
+        {
+            const KDirectory *lib_src;
+            rc = open_dir_or_tar( param->input_dir, &lib_src, param->library );
+            if ( rc == 0 )
+            {
+                rc = copy_library( param->input_dir, param->output_dir,
+                                   param->library, param->out );
+                if ( rc == 0 )
+                    STSMSG( 0, ( "extra lib copied" ) );
+                else
+                    LOGERR( klogErr, rc, "failed to copy extra library" );
+                KDirectoryRelease( lib_src );
+            }
+/*
+            else
+            {
+                rc = copy_library( param->input_dir, param->output_dir,
+                                   ".", param->out );
+                if ( rc == 0 )
+                    STSMSG( 0, ( "extra lib copied" ) );
+                else
+                    LOGERR( klogErr, rc, "failed to copy extra library" );
+            }
+*/
+        }
+        KDirectoryRelease( param->map_dir );
+        KDirectoryRelease( param->asm_dir );
+    }
+    BSTreeWhack( &slides, FGroupMAP_Whack, NULL );
+    BSTreeWhack( &evidence, FGroupMAP_Whack, NULL );
+    return rc;
+}
+
+
+ver_t CC KAppVersion( void )
+{
+    return CG_LOAD_VERS;
+}
+
+const char* map_usage[] = {"MAP input directory path containing files", NULL};
+const char* asm_usage[] = {"ASM input directory path containing files", NULL};
+const char* schema_usage[] = {"database schema file name", NULL};
+const char* output_usage[] = {"output database path", NULL};
+const char* force_usage[] = {"force output overwrite", NULL};
+const char* refseqcfg_usage[] = {"path to a file with reference-to-accession list", NULL};
+const char* refseqpath_usage[] = {"path to a directory with reference sequences in fasta", NULL};
+const char* refseqchunk_usage[] = {NULL, "hidden param to override REFERENCE table seq chunk size for testing", NULL};
+const char* reffile_usage[] = {"path to fasta file with references", NULL};
+const char* forceref_usage[] = {"force reference sequence write", NULL};
+const char* forceread_usage[] = {"force reads write", NULL};
+const char* qualquant_usage[] = {"quality scores quantization level, can be a number (0: none, 1: 2bit, 2: 1bit), or a string like '1:10,10:20,20:30,30:-' (which is equivalent to 1)", NULL};
+const char* nospotgroup_usage[] = {"do not write source file key to SPOT_GROUP column", NULL};
+const char* min_mapq_usage[] = {"filter secondary mappings by minimum weight (phred)", NULL};
+const char* no_secondary_usage[] = {"preserve only one mapping per half-DNB based on weight", NULL};
+const char* single_mate_usage[] = {"if secondary mates have duplicates preserve only one in each pair based on weight", NULL};
+const char* cluster_size_usage[] = {"defines cluster window on the reference, records only 1 placement from given cluster size; default is zero which means ignore", NULL};
+const char* no_read_ahead_usage[] = {"disable input files threaded caching", NULL};
+const char* library_usage[] = {"copy extra file/directory into output", NULL};
+
+/* this enum must have same order as MainArgs array below */
+enum OptDefIndex {
+    eopt_MapInput = 0,
+    eopt_AsmInput,
+    eopt_Schema,
+    eopt_RefSeqConfig,
+    eopt_RefSeqPath,
+    eopt_RefSeqChunk,
+    eopt_RefFile,
+    eopt_Output,
+    eopt_Force,
+    eopt_ForceRef,
+    eopt_ForceRead,
+    eopt_QualQuantization,
+    eopt_NoSpotGroup,
+    eopt_MinMapQ,
+    eopt_No2nd_ary,
+    eopt_SingleMate,
+    eopt_ClusterSize,
+    eopt_noReadAhead,
+    eopt_Library
+};
+
+OptDef MainArgs[] =
+{
+    /* if you change order in this array, rearrange enum above accordingly! */
+    { "map",              "m",  NULL, map_usage,            1, true,  true  },
+    { "asm",              "a",  NULL, asm_usage,            1, true,  false },
+    { "schema",           "s",  NULL, schema_usage,         1, true,  false },
+    { "refseq-config",    "k",  NULL, refseqcfg_usage,      1, true,  false },
+    { "refseq-path",      "i",  NULL, refseqpath_usage,     1, true,  false },
+    { "refseq-chunk",     "C",  NULL, refseqchunk_usage,    1, true,  false },
+    { "ref-file",         "r",  NULL, reffile_usage,        1, true,  false },
+    { "output",           "o",  NULL, output_usage,         1, true,  true  },
+    { "force",            "f",  NULL, force_usage,          1, false, false },
+    { "write-reference",  "g",  NULL, forceref_usage,       1, false, false },
+    { "write-read",       "w",  NULL, forceread_usage,      1, false, false },
+    { "qual-quant",       "Q",  NULL, qualquant_usage,      1, true,  false },
+    { "no-spotgroup",     "G",  NULL, nospotgroup_usage,    1, false, false },
+    { "min-mapq",         "q",  NULL, min_mapq_usage,       1, true,  false },
+    { "no-secondary",     "P",  NULL, no_secondary_usage,   1, false, false },
+    { "single-mate",      NULL, NULL, single_mate_usage,    1, false, false },
+    { "cluster-size",     NULL, NULL, cluster_size_usage,   1, true,  false },
+    { "input-no-threads", "t",  NULL, no_read_ahead_usage,  1, false, false },
+    { "library",          "l",  NULL, library_usage,        1, true,  false }
+};
+const size_t MainArgsQty = sizeof(MainArgs) / sizeof(MainArgs[0]);
+
+rc_t UsageSummary (char const * progname)
+{
+    OUTMSG((
+        "Usage:\n"
+        "\t%s [options] -m map-dir -o path-to-run\n"
+        "\n"
+        "Summary:\n"
+        "\tLoad a Complete Genomics formatted data files\n"
+        "\n"
+        "Example:\n"
+        "\t%s -m build36/MAP -o /tmp/SRZ123456\n"
+        "\n"
+        ,progname, progname));
+    return 0;
+}
+
+char const UsageDefaultName[] = "cg-load";
+
+rc_t CC Usage( const Args* args )
+{
+    rc_t rc;
+    int i;
+    const char* progname = UsageDefaultName;
+    const char* fullname = UsageDefaultName;
+
+    rc = ArgsProgram(args, &fullname, &progname);
+
+    UsageSummary(progname);
+
+    for(i = 0; i < MainArgsQty; i++ ) {
+        if( MainArgs[i].required && MainArgs[i].help[0] != NULL ) {
+            HelpOptionLine(MainArgs[i].aliases, MainArgs[i].name, NULL, MainArgs[i].help);
+        }
+    }
+    OUTMSG(("\nOptions:\n"));
+    for(i = 0; i < MainArgsQty; i++ ) {
+        if( !MainArgs[i].required && MainArgs[i].help[0] != NULL ) {
+            HelpOptionLine(MainArgs[i].aliases, MainArgs[i].name, NULL, MainArgs[i].help);
+        }
+    }
+    XMLLogger_Usage();
+    OUTMSG(("\n"));
+    HelpOptionsStandard();
+    HelpVersion(fullname, KAppVersion());
+    return rc;
+}
+
+rc_t CC KMain( int argc, char* argv[] )
+{
+    rc_t rc = 0;
+    Args* args = NULL;
+    const char* errmsg = NULL, *refseq_chunk = NULL, *min_mapq = NULL, *cluster_size = NULL;
+    const XMLLogger* xml_logger = NULL;
+    SParam params;
+    memset(&params, 0, sizeof(params));
+    params.schema = "align/align.vschema";
+
+    params.argv0 = argv[0];
+    
+    if( (rc = ArgsMakeAndHandle(&args, argc, argv, 2, MainArgs, MainArgsQty, XMLLogger_Args, XMLLogger_ArgsQty)) == 0 ) {
+        uint32_t count;
+        if( (rc = ArgsParamCount (args, &count)) != 0 || count != 0 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+            ArgsParamValue(args, 0, &errmsg);
+        
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_Output].name, &count)) != 0 || count != 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, count ? rcExcessive : rcInsufficient);
+            errmsg = MainArgs[eopt_Output].name;
+        } else if( (rc = ArgsOptionValue(args, MainArgs[eopt_Output].name, 0, &params.out)) != 0 ) {
+            errmsg = MainArgs[eopt_Output].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_MapInput].name, &count)) != 0 || count != 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, count ? rcExcessive : rcInsufficient);
+            errmsg = MainArgs[eopt_MapInput].name;
+        } else if( (rc = ArgsOptionValue(args, MainArgs[eopt_MapInput].name, 0, &params.map_path)) != 0 ) {
+            errmsg = MainArgs[eopt_MapInput].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_Schema].name, &count)) != 0 || count > 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, count ? rcExcessive : rcInsufficient);
+            errmsg = MainArgs[eopt_Schema].name;
+        } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_Schema].name, 0, &params.schema)) != 0 ) {
+            errmsg = MainArgs[eopt_Schema].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_AsmInput].name, &count)) != 0 || count > 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+            errmsg = MainArgs[eopt_AsmInput].name;
+        } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_AsmInput].name, 0, &params.asm_path)) != 0 ) {
+            errmsg = MainArgs[eopt_AsmInput].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_RefSeqConfig].name, &count)) != 0 || count > 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+            errmsg = MainArgs[eopt_RefSeqConfig].name;
+        } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_RefSeqConfig].name, 0, &params.refseqcfg)) != 0 ) {
+            errmsg = MainArgs[eopt_RefSeqConfig].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_RefSeqPath].name, &count)) != 0 || count > 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+            errmsg = MainArgs[eopt_RefSeqPath].name;
+        } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_RefSeqPath].name, 0, &params.refseqpath)) != 0 ) {
+            errmsg = MainArgs[eopt_RefSeqPath].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_Library].name, &count)) != 0 || count > 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+            errmsg = MainArgs[eopt_Library].name;
+        } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_Library].name, 0, &params.library)) != 0 ) {
+            errmsg = MainArgs[eopt_Library].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_RefSeqChunk].name, &count)) != 0 || count > 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+            errmsg = MainArgs[eopt_RefSeqChunk].name;
+        } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_RefSeqChunk].name, 0, &refseq_chunk)) != 0 ) {
+            errmsg = MainArgs[eopt_RefSeqChunk].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_Force].name, &params.force)) != 0 ) {
+            errmsg = MainArgs[eopt_Force].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_ForceRef].name, &params.force_refw)) != 0 ) {
+            errmsg = MainArgs[eopt_ForceRef].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_ForceRead].name, &params.force_readw)) != 0 ) {
+            errmsg = MainArgs[eopt_ForceRead].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_noReadAhead].name, &params.no_read_ahead)) != 0 ) {
+            errmsg = MainArgs[eopt_noReadAhead].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_NoSpotGroup].name, &params.no_spot_group)) != 0 ) {
+            errmsg = MainArgs[eopt_NoSpotGroup].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_No2nd_ary].name, &params.min_mapq)) != 0 ) {
+            errmsg = MainArgs[eopt_No2nd_ary].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_QualQuantization].name, &count)) != 0 || count > 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+            errmsg = MainArgs[eopt_QualQuantization].name;
+        } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_QualQuantization].name, 0, &params.qual_quant)) != 0 ) {
+            errmsg = MainArgs[eopt_QualQuantization].name;
+
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_MinMapQ].name, &count)) != 0 || count > 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+            errmsg = MainArgs[eopt_MinMapQ].name;
+        } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_MinMapQ].name, 0, &min_mapq)) != 0 ) {
+            errmsg = MainArgs[eopt_MinMapQ].name;
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_ClusterSize].name, &count)) != 0 || count > 1 ) {
+            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+            errmsg = MainArgs[eopt_ClusterSize].name;
+        } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_ClusterSize].name, 0, &cluster_size)) != 0 ) {
+            errmsg = MainArgs[eopt_ClusterSize].name;
+        } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_SingleMate].name, &params.single_mate)) != 0 ) {
+            errmsg = MainArgs[eopt_SingleMate].name;
+
+        } else {
+            do {
+                long val = 0;
+                char* end = NULL;
+                uint32_t count;
+
+                if( (rc = ArgsOptionCount(args, MainArgs[eopt_RefFile].name, &count)) != 0 ) {
+                    break;
+                } else {
+                    params.refFiles = calloc(count + 1, sizeof(*(params.refFiles)));
+                    if( params.refFiles == NULL ) {
+                        rc = RC(rcApp, rcArgv, rcReading, rcMemory, rcExhausted);
+                        break;
+                    }
+                    while(rc == 0 && count-- > 0) {
+                        rc = ArgsOptionValue(args, MainArgs[eopt_RefFile].name, count, &params.refFiles[count]);
+                    }
+                }
+
+                if( refseq_chunk != NULL ) {
+                    errno = 0;
+                    val = strtol(refseq_chunk, &end, 10);
+                    if( errno != 0 || refseq_chunk == end || *end != '\0' || val < 0 || val > UINT32_MAX ) {
+                        rc = RC(rcExe, rcArgv, rcReading, rcParam, rcInvalid);
+                        break;
+                    }
+                    params.refseq_chunk = val;
+                }
+                if( params.min_mapq > 0 ) {
+                    params.min_mapq = ~0;
+                } else if( min_mapq != NULL ) {
+                    errno = 0;
+                    val = strtol(min_mapq, &end, 10);
+                    if( errno != 0 || min_mapq == end || *end != '\0' || val < 0 || val > 255 ) {
+                        rc = RC(rcExe, rcArgv, rcReading, rcParam, rcInvalid);
+                        break;
+                    }
+                    params.min_mapq = val;
+                }
+
+                if ( cluster_size )
+                    params.cluster_size = atoi( cluster_size );
+                else
+                    params.cluster_size = 0;
+
+                rc = KDirectoryNativeDir( &params.input_dir );
+                if ( rc != 0 )
+                    errmsg = "current directory";
+                else
+                {
+                    rc = XMLLogger_Make( &xml_logger, params.input_dir, args );
+                    if ( rc != 0 )
+                        errmsg = "XML logging";
+                    else
+                        rc = Load( &params );
+                }
+            } while( false );
+            KDirectoryRelease( params.input_dir );
+        }
+    }
+    /* find accession as last part of path for internal XML logging */
+    refseq_chunk = params.out ? strrchr(params.out, '/') : "/???";
+    if( refseq_chunk ++ == NULL )
+        refseq_chunk = params.out;
+
+    if( argc < 2 )
+        MiniUsage(args);
+    else if( rc != 0 )
+    {
+        if( errmsg )
+        {
+            MiniUsage(args);
+            LOGERR(klogErr, rc, errmsg);
+        }
+        else
+        {
+            PLOGERR(klogErr, (klogErr, rc, "load failed: $(reason_short)",
+                    "severity=total,status=failure,accession=%s", refseq_chunk));
+        }
+    }
+    else
+    {
+        PLOGMSG(klogInfo, (klogInfo, "loaded",
+                "severity=total,status=success,accession=%s", refseq_chunk));
+    }
+    ArgsWhack(args);
+    XMLLogger_Release(xml_logger);
+    return rc;
+}
diff --git a/tools/cg-load/cg-load.vers b/tools/cg-load/cg-load.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/cg-load/cg-load.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/cg-load/debug.h b/tools/cg-load/debug.h
new file mode 100644
index 0000000..2d732c4
--- /dev/null
+++ b/tools/cg-load/debug.h
@@ -0,0 +1,34 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_debug_h_
+#define _tools_cg_load_debug_h_
+
+#include <klib/debug.h>
+
+#define DEBUG_MSG_PASTE(a,b) a##b
+#define DEBUG_MSG(flag,msg) DBGMSG(DBG_APP,DBG_FLAG(DEBUG_MSG_PASTE(DBG_APP_,flag)), msg)
+
+#endif /* _tools_cg_load_debug_h_ */
diff --git a/tools/cg-load/defs.h b/tools/cg-load/defs.h
new file mode 100644
index 0000000..9e06969
--- /dev/null
+++ b/tools/cg-load/defs.h
@@ -0,0 +1,136 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_defs_h_
+#define _tools_cg_load_defs_h_
+
+/* buffers and sizes */
+
+/*
+#define CG_CHROMOSOME_NAME (8) make if fit NC_003977 */
+#define CG_CHROMOSOME_NAME (10)
+
+#define CG_SLIDE (32)
+#define CG_LANE (8)
+
+#define CG_READS_NREADS (2)
+#define CG_READS_SPOT_LEN (70)
+#define CG_READS_NGAPS (3)
+#define CG_MAPPINGS_MAX (2048)
+#define CG_EVDNC_PLOIDY (3)
+#define CG_EVDNC_INTERVALID_LEN (32)
+#define CG_EVDNC_SPOT_LEN (10 * 1024)
+
+/* CG_EVDNC_ALLELE_NUM is 3 in v.1.5; 4 in v.2 */
+#define CG_EVDNC_ALLELE_NUM (4)
+
+#define CG_EVDNC_ALLELE_LEN (10 * 1024)
+#define CG_EVDNC_ALLELE_CIGAR_LEN (10 * 1024)
+
+typedef char CGFIELD_LIBRARY_TYPE;
+typedef char CGFIELD_SAMPLE_TYPE;
+typedef char CGFIELD_SLIDE_TYPE;
+typedef char CGFIELD_LANE_TYPE;
+typedef char CGFIELD_CHROMOSOME_TYPE;
+typedef char CGFIELD_ASSEMBLY_ID_TYPE;
+typedef char CGFIELD_SOFTWARE_VERSION_TYPE;
+typedef char CGFIELD_DBSNP_BUILD_TYPE;
+typedef char CGFIELD_COSMIC_TYPE;
+typedef char CGFIELD_PFAM_DATE_TYPE;
+typedef char CGFIELD_MIRBASE_VERSION_TYPE;
+typedef char CGFIELD_DGV_VERSION_TYPE;
+typedef char CGFIELD_GENERATED_AT_TYPE;
+typedef char CGFIELD_GENERATED_BY_TYPE;
+typedef char CGFIELD_GENE_ANNOTATIONS_TYPE;
+typedef char CGFIELD_GENOME_REFERENCE_TYPE;
+typedef uint32_t CGFIELD_BATCH_FILE_NUMBER_TYPE;
+typedef uint64_t CGFIELD_BATCH_OFFSET_TYPE;
+typedef uint32_t CGFIELD_FIELD_SIZE_TYPE;
+typedef uint32_t CGFIELD_MAX_PLOIDY_TYPE;
+typedef uint16_t CGFIELD_WINDOW_SHIFT_TYPE;
+typedef uint16_t CGFIELD_WINDOW_WIDTH_TYPE;
+typedef uint16_t CGFIELD_NUMBER_LEVELS_TYPE;
+typedef uint16_t CGFIELD_MEAN_LEVEL_X_TYPE;
+
+typedef enum CG_EFileType_enum {
+    cg_eFileType_Unknown = 0,
+    cg_eFileType_READS = 1,
+    cg_eFileType_MAPPINGS,
+    cg_eFileType_LIB_DNB,
+    cg_eFileType_LIB_MATE_GAPS,
+    cg_eFileType_LIB_SEQDEP_GAPS,
+    cg_eFileType_REFMETRICS,
+    cg_eFileType_IDENTIFIER_MAPPING,
+    cg_eFileType_DBSNP_TO_CGI,
+    cg_eFileType_GENE_ANNOTATION,
+    cg_eFileType_SUMMARY_REPORT,
+    cg_eFileType_VAR_ANNOTATION,
+    cg_eFileType_GENE_VAR_SUMMARY_REPORT,
+    cg_eFileType_EVIDENCE_CORRELATION,
+    cg_eFileType_EVIDENCE_DNBS,
+    cg_eFileType_EVIDENCE_INTERVALS,
+    cg_eFileType_COVERAGE_DISTRIBUTION,
+    cg_eFileType_COVERAGE_BY_GC,
+    cg_eFileType_DEPTH_OF_COVERAGE,
+    cg_eFileType_INDEL_LENGTH_CODING,
+    cg_eFileType_INDEL_LENGTH,
+    cg_eFileType_SUBSTITUTION_LENGTH_CODING,
+    cg_eFileType_SUBSTITUTION_LENGTH,
+    cg_eFileType_CNV_SEGMENTS,
+    cg_eFileType_TUMOR_CNV_SEGMENTS,
+    cg_eFileType_CNV_DETAILS_SCORES,
+    cg_eFileType_TUMOR_DETAILS_SCORES,
+    cg_eFileType_NONDIPLOID_SOMATIC_CNV_SEGMENTS,
+    cg_eFileType_NONDIPLOID_SOMATIC_CNV_DETAILS,
+    cg_eFileType_JUNCTIONS,
+    cg_eFileType_JUNCTION_DNBS,
+    cg_eFileType_SV_EVENTS,
+    cg_eFileType_VAR_OLPL,
+    cg_eFileType_MEI,
+    cg_eFileType_TUMOR_CNV_DETAILS,
+    cg_eFileType_DIPLOID_SOMATIC_CNV_SEGMENTS,
+    cg_eFileType_COVERAGE_DISTRIBUTION_CODING,
+    cg_eFileType_COVERAGE_BY_GC_CODING,
+    cg_eFileType_LIB_SMALL_GAPS_ROLLUP,
+    cg_eFileType_DIPLOID_SOMATIC_CNV_DETAILSCORES,
+    cg_eFileType_Last
+} CG_EFileType;
+
+typedef enum CG_EReadsFlags_enum {
+    cg_eLeftHalfDnbNoMatches = 0x01,
+    cg_eLeftHalfDnbMapOverflow = 0x02,
+    cg_eRightHalfDnbNoMatches = 0x04,
+    cg_eRightHalfDnbMapOverflow = 0x08
+} CG_EReadsFlags;
+
+typedef enum CG_EMappingsFlags_enum {
+    cg_eLastDNBRecord = 0x01,
+    cg_eLeftHalfDnbMap = 0x00,
+    cg_eRightHalfDnbMap = 0x02,
+    cg_eFwdDnbStrand = 0x00,
+    cg_eRevDnbStrand = 0x04
+} CG_EMappingsFlags;
+
+#endif /* _tools_cg_load_defs_h_ */
diff --git a/tools/cg-load/f1_3.c b/tools/cg-load/f1_3.c
new file mode 100644
index 0000000..315f4e0
--- /dev/null
+++ b/tools/cg-load/f1_3.c
@@ -0,0 +1,76 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "factory-reads.h"
+#include "factory-mappings.h"
+#include "factory-evidence-intervals.h"
+#include "factory-evidence-dnbs.h"
+
+#include "file.h"
+
+static const CGFileTypeFactory cg_ETypeXX_names[] = {
+    { "READS", cg_eFileType_READS, CGReads13_Make },
+    { "MAPPINGS", cg_eFileType_MAPPINGS, CGMappings13_Make },
+    { "LIB-DNB", cg_eFileType_LIB_DNB, NULL },
+    { "LIB-MATE-GAPS", cg_eFileType_LIB_MATE_GAPS, NULL },
+    { "LIB-SEQDEP-GAPS", cg_eFileType_LIB_SEQDEP_GAPS, NULL },
+    { "REFMETRICS", cg_eFileType_REFMETRICS, NULL },
+    { "DBSNP-TO-CGI", cg_eFileType_DBSNP_TO_CGI, NULL },
+    { "GENE-ANNOTATION", cg_eFileType_GENE_ANNOTATION, NULL },
+    { "SUMMARY-REPORT", cg_eFileType_SUMMARY_REPORT, NULL },
+    { "VAR-ANNOTATION", cg_eFileType_VAR_ANNOTATION, NULL },
+    { "GENE-VAR-SUMMARY-REPORT", cg_eFileType_GENE_VAR_SUMMARY_REPORT, NULL },
+    { "EVIDENCE-CORRELATION", cg_eFileType_EVIDENCE_CORRELATION, NULL },
+    { "EVIDENCE-DNBS", cg_eFileType_EVIDENCE_DNBS, CGEvidenceDnbs13_Make },
+    { "EVIDENCE-INTERVALS",
+                cg_eFileType_EVIDENCE_INTERVALS, CGEvidenceIntervals13_Make },
+    { "COVERAGE-DISTRIBUTION", cg_eFileType_COVERAGE_DISTRIBUTION, NULL },
+    { "COVERAGE-BY-GC", cg_eFileType_COVERAGE_BY_GC, NULL },
+    { "DEPTH-OF-COVERAGE", cg_eFileType_DEPTH_OF_COVERAGE, NULL },
+    { "INDEL-LENGTH-CODING", cg_eFileType_INDEL_LENGTH_CODING, NULL },
+    { "INDEL-LENGTH", cg_eFileType_INDEL_LENGTH, NULL },
+    { "SUBSTITUTION-LENGTH-CODING",
+                cg_eFileType_SUBSTITUTION_LENGTH_CODING, NULL },
+    { "SUBSTITUTION-LENGTH", cg_eFileType_SUBSTITUTION_LENGTH, NULL },
+    { "CNV_SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+    { "CNV-SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+    { "TUMOR_CNV_SEGMENTS", cg_eFileType_TUMOR_CNV_SEGMENTS, NULL },
+    { "CNV_DETAILS_SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "CNV-DETAIL-SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "TUMOR_DETAILS_SCORES", cg_eFileType_TUMOR_DETAILS_SCORES, NULL },
+    { "JUNCTIONS", cg_eFileType_JUNCTIONS, NULL },
+    { "JUNCTION-DNBS", cg_eFileType_JUNCTION_DNBS, NULL },
+    /* undocumented */
+    { "VAR-OLPL", cg_eFileType_VAR_OLPL, NULL }
+    
+};
+
+rc_t CGFile13_Make(const CGFileType** self,
+    const char* type, const CGLoaderFile* file)
+{
+    return CGLoaderFileMakeCGFileType(file, type,
+        cg_ETypeXX_names, sizeof cg_ETypeXX_names / sizeof cg_ETypeXX_names[0],
+        self);
+}
diff --git a/tools/cg-load/f1_5.c b/tools/cg-load/f1_5.c
new file mode 100644
index 0000000..dcb152c
--- /dev/null
+++ b/tools/cg-load/f1_5.c
@@ -0,0 +1,76 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "factory-reads.h"
+#include "factory-mappings.h"
+#include "factory-evidence-intervals.h"
+#include "factory-evidence-dnbs.h"
+
+#include "file.h"
+
+static const CGFileTypeFactory cg_ETypeXX_names[] = {
+    { "READS", cg_eFileType_READS, CGReads15_Make },
+    { "MAPPINGS", cg_eFileType_MAPPINGS, CGMappings15_Make },
+    { "LIB-DNB", cg_eFileType_LIB_DNB, NULL },
+    { "LIB-MATE-GAPS", cg_eFileType_LIB_MATE_GAPS, NULL },
+    { "LIB-SEQDEP-GAPS", cg_eFileType_LIB_SEQDEP_GAPS, NULL },
+    { "REFMETRICS", cg_eFileType_REFMETRICS, NULL },
+    { "DBSNP-TO-CGI", cg_eFileType_DBSNP_TO_CGI, NULL },
+    { "GENE-ANNOTATION", cg_eFileType_GENE_ANNOTATION, NULL },
+    { "SUMMARY-REPORT", cg_eFileType_SUMMARY_REPORT, NULL },
+    { "VAR-ANNOTATION", cg_eFileType_VAR_ANNOTATION, NULL },
+    { "GENE-VAR-SUMMARY-REPORT", cg_eFileType_GENE_VAR_SUMMARY_REPORT, NULL },
+    { "EVIDENCE-CORRELATION", cg_eFileType_EVIDENCE_CORRELATION, NULL },
+    { "EVIDENCE-DNBS", cg_eFileType_EVIDENCE_DNBS, CGEvidenceDnbs15_Make },
+    { "EVIDENCE-INTERVALS",
+                cg_eFileType_EVIDENCE_INTERVALS, CGEvidenceIntervals15_Make },
+    { "COVERAGE-DISTRIBUTION", cg_eFileType_COVERAGE_DISTRIBUTION, NULL },
+    { "COVERAGE-BY-GC", cg_eFileType_COVERAGE_BY_GC, NULL },
+    { "DEPTH-OF-COVERAGE", cg_eFileType_DEPTH_OF_COVERAGE, NULL },
+    { "INDEL-LENGTH-CODING", cg_eFileType_INDEL_LENGTH_CODING, NULL },
+    { "INDEL-LENGTH", cg_eFileType_INDEL_LENGTH, NULL },
+    { "SUBSTITUTION-LENGTH-CODING",
+                cg_eFileType_SUBSTITUTION_LENGTH_CODING, NULL },
+    { "SUBSTITUTION-LENGTH", cg_eFileType_SUBSTITUTION_LENGTH, NULL },
+    { "CNV_SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+    { "CNV-SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+    { "TUMOR_CNV_SEGMENTS", cg_eFileType_TUMOR_CNV_SEGMENTS, NULL },
+    { "CNV_DETAILS_SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "CNV-DETAIL-SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "TUMOR_DETAILS_SCORES", cg_eFileType_TUMOR_DETAILS_SCORES, NULL },
+    { "JUNCTIONS", cg_eFileType_JUNCTIONS, NULL },
+    { "JUNCTION-DNBS", cg_eFileType_JUNCTION_DNBS, NULL },
+    /* undocumented */
+    { "VAR-OLPL", cg_eFileType_VAR_OLPL, NULL }
+    
+};
+
+rc_t CGFile15_Make(const CGFileType** self,
+    const char* type, const CGLoaderFile* file)
+{
+    return CGLoaderFileMakeCGFileType(file, type,
+        cg_ETypeXX_names, sizeof cg_ETypeXX_names / sizeof cg_ETypeXX_names[0],
+        self);
+}
diff --git a/tools/cg-load/f2_0.c b/tools/cg-load/f2_0.c
new file mode 100644
index 0000000..ba28f44
--- /dev/null
+++ b/tools/cg-load/f2_0.c
@@ -0,0 +1,79 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "factory-reads.h"
+#include "factory-mappings.h"
+#include "factory-evidence-intervals.h"
+#include "factory-evidence-dnbs.h"
+
+#include "file.h"
+
+static const CGFileTypeFactory cg_ETypeXX_names[] = {
+    { "READS", cg_eFileType_READS, CGReads20_Make },
+    { "MAPPINGS", cg_eFileType_MAPPINGS, CGMappings20_Make },
+    { "LIB-DNB", cg_eFileType_LIB_DNB, NULL },
+    { "LIB-MATE-GAPS", cg_eFileType_LIB_MATE_GAPS, NULL },
+    { "LIB-SEQDEP-GAPS", cg_eFileType_LIB_SEQDEP_GAPS, NULL },
+    { "REFMETRICS", cg_eFileType_REFMETRICS, NULL },
+    { "DBSNP-TO-CGI", cg_eFileType_DBSNP_TO_CGI, NULL },
+    { "GENE-ANNOTATION", cg_eFileType_GENE_ANNOTATION, NULL },
+    { "SUMMARY-REPORT", cg_eFileType_SUMMARY_REPORT, NULL },
+    { "VAR-ANNOTATION", cg_eFileType_VAR_ANNOTATION, NULL },
+    { "GENE-VAR-SUMMARY-REPORT", cg_eFileType_GENE_VAR_SUMMARY_REPORT, NULL },
+    { "EVIDENCE-CORRELATION", cg_eFileType_EVIDENCE_CORRELATION, NULL },
+    { "EVIDENCE-DNBS", cg_eFileType_EVIDENCE_DNBS, CGEvidenceDnbs20_Make },
+    { "EVIDENCE-INTERVALS",
+                cg_eFileType_EVIDENCE_INTERVALS, CGEvidenceIntervals20_Make },
+    { "COVERAGE-DISTRIBUTION", cg_eFileType_COVERAGE_DISTRIBUTION, NULL },
+    { "COVERAGE-BY-GC", cg_eFileType_COVERAGE_BY_GC, NULL },
+    { "DEPTH-OF-COVERAGE", cg_eFileType_DEPTH_OF_COVERAGE, NULL },
+    { "INDEL-LENGTH-CODING", cg_eFileType_INDEL_LENGTH_CODING, NULL },
+    { "INDEL-LENGTH", cg_eFileType_INDEL_LENGTH, NULL },
+    { "SUBSTITUTION-LENGTH-CODING",
+                cg_eFileType_SUBSTITUTION_LENGTH_CODING, NULL },
+    { "SUBSTITUTION-LENGTH", cg_eFileType_SUBSTITUTION_LENGTH, NULL },
+    { "CNV_SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+    { "CNV-SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+    { "TUMOR_CNV_SEGMENTS", cg_eFileType_TUMOR_CNV_SEGMENTS, NULL },
+    { "TUMOR-CNV-SEGMENTS", cg_eFileType_TUMOR_CNV_SEGMENTS, NULL },
+    { "CNV_DETAILS_SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "CNV-DETAILS-SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "CNV-DETAIL-SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "TUMOR_DETAILS_SCORES", cg_eFileType_TUMOR_DETAILS_SCORES, NULL },
+    { "TUMOR-DETAILS-SCORES", cg_eFileType_TUMOR_DETAILS_SCORES, NULL },
+    { "JUNCTIONS", cg_eFileType_JUNCTIONS, NULL },
+    { "JUNCTION-DNBS", cg_eFileType_JUNCTION_DNBS, NULL },
+    { "SV-EVENTS", cg_eFileType_SV_EVENTS, NULL },
+    { "VAR-OLPL", cg_eFileType_VAR_OLPL, NULL },
+    { "MEI", cg_eFileType_MEI, NULL },    
+};
+
+rc_t CGFile20_Make(const CGFileType** self,
+    const char* type, const CGLoaderFile* file)
+{
+    return CGLoaderFileMakeCGFileType(file, type,
+        cg_ETypeXX_names, sizeof cg_ETypeXX_names / sizeof cg_ETypeXX_names[0],
+        self);
+}
diff --git a/tools/cg-load/f2_2.c b/tools/cg-load/f2_2.c
new file mode 100644
index 0000000..1d4986d
--- /dev/null
+++ b/tools/cg-load/f2_2.c
@@ -0,0 +1,95 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "factory-reads.h"
+#include "factory-mappings.h"
+#include "factory-evidence-intervals.h"
+#include "factory-evidence-dnbs.h"
+
+#include "file.h"
+
+static const CGFileTypeFactory cg_ETypeXX_names[] = {
+    { "READS", cg_eFileType_READS, CGReads22_Make },
+    { "MAPPINGS", cg_eFileType_MAPPINGS, CGMappings22_Make },
+    { "LIB-DNB", cg_eFileType_LIB_DNB, NULL },
+    { "LIB-MATE-GAPS", cg_eFileType_LIB_MATE_GAPS, NULL },
+    { "LIB-SEQDEP-GAPS", cg_eFileType_LIB_SEQDEP_GAPS, NULL },
+    { "REFMETRICS", cg_eFileType_REFMETRICS, NULL },
+    { "IDENTIFIER-MAPPING", cg_eFileType_IDENTIFIER_MAPPING, NULL },
+    { "DBSNP-TO-CGI", cg_eFileType_DBSNP_TO_CGI, NULL },
+    { "GENE-ANNOTATION", cg_eFileType_GENE_ANNOTATION, NULL },
+    { "SUMMARY-REPORT", cg_eFileType_SUMMARY_REPORT, NULL },
+    { "VAR-ANNOTATION", cg_eFileType_VAR_ANNOTATION, NULL },
+    { "GENE-VAR-SUMMARY-REPORT", cg_eFileType_GENE_VAR_SUMMARY_REPORT, NULL },
+    { "EVIDENCE-CORRELATION", cg_eFileType_EVIDENCE_CORRELATION, NULL },
+    { "EVIDENCE-DNBS", cg_eFileType_EVIDENCE_DNBS, CGEvidenceDnbs22_Make },
+    { "EVIDENCE-INTERVALS",
+                cg_eFileType_EVIDENCE_INTERVALS, CGEvidenceIntervals22_Make },
+    { "COVERAGE-DISTRIBUTION", cg_eFileType_COVERAGE_DISTRIBUTION, NULL },
+    { "COVERAGE-BY-GC", cg_eFileType_COVERAGE_BY_GC, NULL },
+    { "DEPTH-OF-COVERAGE", cg_eFileType_DEPTH_OF_COVERAGE, NULL },
+    { "INDEL-LENGTH-CODING", cg_eFileType_INDEL_LENGTH_CODING, NULL },
+    { "INDEL-LENGTH", cg_eFileType_INDEL_LENGTH, NULL },
+    { "SUBSTITUTION-LENGTH-CODING",
+                cg_eFileType_SUBSTITUTION_LENGTH_CODING, NULL },
+    { "SUBSTITUTION-LENGTH", cg_eFileType_SUBSTITUTION_LENGTH, NULL },
+    { "CNV_SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+    { "CNV-SEGMENTS", cg_eFileType_CNV_SEGMENTS, NULL },
+    { "TUMOR_CNV_SEGMENTS", cg_eFileType_TUMOR_CNV_SEGMENTS, NULL },
+    { "TUMOR-CNV-SEGMENTS", cg_eFileType_TUMOR_CNV_SEGMENTS, NULL },
+    { "CNV_DETAILS_SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "CNV-DETAILS-SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "CNV-DETAIL-SCORES", cg_eFileType_CNV_DETAILS_SCORES, NULL },
+    { "TUMOR_DETAILS_SCORES", cg_eFileType_TUMOR_DETAILS_SCORES, NULL },
+    { "TUMOR-DETAILS-SCORES", cg_eFileType_TUMOR_DETAILS_SCORES, NULL },
+    { "NONDIPLOID-SOMATIC-CNV-SEGMENTS",
+                cg_eFileType_NONDIPLOID_SOMATIC_CNV_SEGMENTS, NULL },
+    { "NONDIPLOID-SOMATIC-CNV-DETAILS",
+                cg_eFileType_NONDIPLOID_SOMATIC_CNV_DETAILS, NULL },
+    { "JUNCTIONS", cg_eFileType_JUNCTIONS, NULL },
+    { "JUNCTION-DNBS", cg_eFileType_JUNCTION_DNBS, NULL },
+    { "SV-EVENTS", cg_eFileType_SV_EVENTS, NULL },
+    { "VAR-OLPL", cg_eFileType_VAR_OLPL, NULL },
+    { "MEI", cg_eFileType_MEI, NULL },
+    /* from Standard Sequencing Service Data File Formats file test */
+    { "TUMOR-CNV-DETAILS", cg_eFileType_TUMOR_CNV_DETAILS, NULL },
+    { "DIPLOID-SOMATIC-CNV-SEGMENTS",
+                cg_eFileType_DIPLOID_SOMATIC_CNV_SEGMENTS, NULL },
+    { "COVERAGE-DISTRIBUTION-CODING",
+                cg_eFileType_COVERAGE_DISTRIBUTION_CODING, NULL },
+    { "COVERAGE-BY-GC-CODING", cg_eFileType_COVERAGE_BY_GC_CODING, NULL },
+    { "LIB-SMALL-GAPS-ROLLUP", cg_eFileType_LIB_SMALL_GAPS_ROLLUP, NULL },
+    /* from Cancer Sequencing Service Data File Formats file test */
+    { "DIPLOID-SOMATIC-CNV-DETAILSCORES",
+                cg_eFileType_DIPLOID_SOMATIC_CNV_DETAILSCORES, NULL },
+};
+
+rc_t CGFile22_Make(const CGFileType** self,
+    const char* type, const CGLoaderFile* file)
+{
+    return CGLoaderFileMakeCGFileType(file, type,
+        cg_ETypeXX_names, sizeof cg_ETypeXX_names / sizeof cg_ETypeXX_names[0],
+        self);
+}
diff --git a/tools/cg-load/factory-cmn.h b/tools/cg-load/factory-cmn.h
new file mode 100644
index 0000000..a2eaaaa
--- /dev/null
+++ b/tools/cg-load/factory-cmn.h
@@ -0,0 +1,61 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_factory_cmh_h_
+#define _tools_cg_load_factory_cmh_h_
+
+#include <klib/defs.h>
+#include "defs.h"
+
+typedef CGFIELD_LIBRARY_TYPE CGFIELD15_LIBRARY[32];
+typedef CGFIELD_SAMPLE_TYPE CGFIELD15_SAMPLE[32];
+typedef CGFIELD_SLIDE_TYPE CGFIELD15_SLIDE[CG_SLIDE];
+typedef CGFIELD_LANE_TYPE CGFIELD15_LANE[CG_LANE];
+typedef CGFIELD_CHROMOSOME_TYPE CGFIELD15_CHROMOSOME[CG_CHROMOSOME_NAME];
+typedef CGFIELD_ASSEMBLY_ID_TYPE CGFIELD15_ASSEMBLY_ID[32];
+
+/* VDB-951: make it process invalid #SOFTWARE_VERSION value
+typedef CGFIELD_SOFTWARE_VERSION_TYPE CGFIELD15_SOFTWARE_VERSION[16];*/
+typedef CGFIELD_SOFTWARE_VERSION_TYPE CGFIELD15_SOFTWARE_VERSION[38];
+
+typedef CGFIELD_DBSNP_BUILD_TYPE CGFIELD15_DBSNP_BUILD[8];
+typedef CGFIELD_COSMIC_TYPE CGFIELD15_COSMIC[8];
+typedef CGFIELD_PFAM_DATE_TYPE CGFIELD15_PFAM_DATE[16];
+typedef CGFIELD_MIRBASE_VERSION_TYPE CGFIELD15_MIRBASE_VERSION[8];
+typedef CGFIELD_DGV_VERSION_TYPE CGFIELD15_DGV_VERSION[16];
+typedef CGFIELD_GENERATED_AT_TYPE CGFIELD15_GENERATED_AT[32];
+typedef CGFIELD_GENERATED_BY_TYPE CGFIELD15_GENERATED_BY[32];
+typedef CGFIELD_GENE_ANNOTATIONS_TYPE CGFIELD15_GENE_ANNOTATIONS[16];
+typedef CGFIELD_GENOME_REFERENCE_TYPE CGFIELD15_GENOME_REFERENCE[16];
+typedef CGFIELD_BATCH_FILE_NUMBER_TYPE CGFIELD15_BATCH_FILE_NUMBER;
+typedef CGFIELD_BATCH_OFFSET_TYPE CGFIELD15_BATCH_OFFSET;
+typedef CGFIELD_FIELD_SIZE_TYPE CGFIELD15_FIELD_SIZE;
+typedef CGFIELD_MAX_PLOIDY_TYPE CGFIELD15_MAX_PLOIDY;
+typedef CGFIELD_WINDOW_SHIFT_TYPE CGFIELD15_WINDOW_SHIFT;
+typedef CGFIELD_WINDOW_WIDTH_TYPE CGFIELD15_WINDOW_WIDTH;
+typedef CGFIELD_NUMBER_LEVELS_TYPE CGFIELD15_NUMBER_LEVELS;
+typedef CGFIELD_MEAN_LEVEL_X_TYPE CGFIELD15_MEAN_LEVEL_X;
+
+#endif /* _tools_cg_load_factory_cmh_h_ */
diff --git a/tools/cg-load/factory-evidence-dnbs.c b/tools/cg-load/factory-evidence-dnbs.c
new file mode 100644
index 0000000..a4af12b
--- /dev/null
+++ b/tools/cg-load/factory-evidence-dnbs.c
@@ -0,0 +1,351 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+
+typedef struct CGEvidenceDnbs15 CGEvidenceDnbs15;
+#define CGFILETYPE_IMPL CGEvidenceDnbs15
+#include "file.h"
+#include "factory-cmn.h"
+#include "factory-evidence-dnbs.h"
+#include "debug.h"
+
+#include <assert.h>
+#include <string.h>
+#include <stdlib.h>
+
+struct CGEvidenceDnbs15 {
+    CGFileType dad;
+    const CGLoaderFile* file;
+    uint64_t records;
+    /* headers */
+    CGFIELD15_ASSEMBLY_ID assembly_id;
+    CGFIELD15_CHROMOSOME chromosome;
+    CGFIELD15_GENERATED_AT generated_at;
+    CGFIELD15_GENERATED_BY generated_by;
+    CGFIELD15_SAMPLE sample;
+    CGFIELD15_SOFTWARE_VERSION software_version;
+};
+
+void CGEvidenceDnbs15_Release(const CGEvidenceDnbs15* cself, uint64_t* records)
+{
+    if( cself != NULL ) {
+        CGEvidenceDnbs15* self = (CGEvidenceDnbs15*)cself;
+        if( records != NULL ) {
+            *records = cself->records;
+        }
+        free(self);
+    }
+}
+
+static
+rc_t CC CGEvidenceDnbs15_Header(const CGEvidenceDnbs15* cself, const char* buf, const size_t len)
+{
+    rc_t rc = 0;
+    size_t slen;
+    CGEvidenceDnbs15* self = (CGEvidenceDnbs15*)cself;
+
+    if( strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->assembly_id, sizeof(self->assembly_id));
+    } else if( strncmp("CHROMOSOME\t", buf, slen = 11) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->chromosome, sizeof(self->chromosome));
+    } else if( strncmp("GENERATED_AT\t", buf, slen = 13) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->generated_at, sizeof(self->generated_at));
+    } else if( strncmp("GENERATED_BY\t", buf, slen = 13) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->generated_by, sizeof(self->generated_by));
+    } else if( strncmp("SAMPLE\t", buf, slen = 7) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->sample, sizeof(self->sample));
+    } else if( strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->software_version, sizeof(self->software_version));
+    } else {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized);
+    }
+    return rc;
+}
+
+static
+rc_t CGEvidenceDnbs15_GetAssemblyId(const CGEvidenceDnbs15* cself, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id)
+{
+    if( cself->assembly_id[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *assembly_id = cself->assembly_id;
+    return 0;
+}
+
+static
+rc_t CGEvidenceDnbs15_GetSample(const CGEvidenceDnbs15* cself, const CGFIELD_SAMPLE_TYPE** sample)
+{
+    if( cself->sample[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *sample = cself->sample;
+    return 0;
+}
+
+static
+rc_t CGEvidenceDnbs15_GetChromosome(const CGEvidenceDnbs15* cself, const CGFIELD_CHROMOSOME_TYPE** chromosome)
+{
+    if( cself->chromosome[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *chromosome = cself->chromosome;
+    return 0;
+}
+
+static
+rc_t CC CGEvidenceDnbs_Read(const CGEvidenceDnbs15* cself, const char* interval_id, TEvidenceDnbsData* data, int score_allele_num)
+{
+    rc_t rc = 0;
+    TEvidenceDnbsData_dnb* m = NULL;
+    static TEvidenceDnbsData_dnb next_rec;
+    static char next_interval_id[32] = "";
+
+    /* local copy of unused TEvidenceDnbsData_dnb struct elements */
+    char reference_alignment[CG_EVDNC_ALLELE_CIGAR_LEN];
+    INSDC_coord_zero mate_offset_in_reference;
+    char mate_reference_alignment[CG_EVDNC_ALLELE_CIGAR_LEN];
+    uint16_t score_allele[4] = {0, 0, 0, 0}; /* v1.5 has ScoreAllele[012]; v2.0 - [0123] */
+    char qual[CG_EVDNC_SPOT_LEN];
+
+    strcpy(data->interval_id, interval_id);
+    data->qty = 0;
+    /* already read one rec for this interval_id */
+    if( next_interval_id[0] != '\0' ) {
+        if( strcmp(next_interval_id, interval_id) != 0 ) {
+            /* nothing todo since next interval id is different */
+            return rc;
+        }
+        m = &data->dnbs[data->qty++];
+        memcpy(m, &next_rec, sizeof(next_rec));
+        DEBUG_MSG(10, ("%3u evidenceDnbs: '%s'\t'%s'\t'%s'\t'%s'\t%u\t%lu\t%hu\t%c\t%c\t%i\t'%.*s'"
+                        "\t%i\tnot_used\t0\tnot_used\t%c\t0\t0\t0\t'%.*s'\t'--'\n",
+            data->qty, next_interval_id, m->chr, m->slide, m->lane, m->file_num_in_lane,
+            m->dnb_offset_in_lane_file, m->allele_index, m->side, m->strand, m->offset_in_allele,
+            m->allele_alignment_length, m->allele_alignment, m->offset_in_reference,
+            m->mapping_quality, m->read_len, m->read));
+    }
+    do {
+        int i = 0;
+        char tmp[2];
+        CG_LINE_START(cself->file, b, len, p);
+        if( b == NULL || len == 0 ) {
+            next_interval_id[0] = '\0';
+            break; /* EOF */
+        }
+        if( data->qty >= data->max_qty ) {
+            TEvidenceDnbsData_dnb* x;
+            data->max_qty += 100;
+            x = realloc(data->dnbs, sizeof(*(data->dnbs)) * data->max_qty);
+            if( x == NULL ) {
+                rc = RC(rcRuntime, rcFile, rcReading, rcMemory, rcExhausted);
+                break;
+            }
+            data->dnbs = x;
+        }
+        m = &data->dnbs[data->qty++];
+
+        /*DEBUG_MSG(10, ("%2hu evidenceDnbs: '%.*s'\n", data->qty, len, b));*/
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, next_interval_id, sizeof(next_interval_id));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, m->chr, sizeof(m->chr));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, m->slide, sizeof(m->slide));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, m->lane, sizeof(m->lane));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2u32(b, p - b, &m->file_num_in_lane);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2u64(b, p - b, &m->dnb_offset_in_lane_file);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2u16(b, p - b, &m->allele_index);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, tmp, sizeof(tmp));
+        if( tmp[0] != 'L' && tmp[0] != 'R' ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+        }
+        m->side = tmp[0];
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, tmp, sizeof(tmp));
+        if( tmp[0] != '+' && tmp[0] != '-' ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+        }
+        m->strand = tmp[0];
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i32(b, p - b, &m->offset_in_allele);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, m->allele_alignment, sizeof(m->allele_alignment));
+        m->allele_alignment_length = p - b;
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i32(b, p - b, &m->offset_in_reference);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, reference_alignment, sizeof(reference_alignment));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i32(b, p - b, &mate_offset_in_reference);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, mate_reference_alignment, sizeof(mate_reference_alignment));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, tmp, sizeof(tmp));
+        if( tmp[0] < 33 || tmp[0] > 126 ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+        }
+        m->mapping_quality = tmp[0];
+        for (i = 0; i < score_allele_num; ++i) {
+            CG_LINE_NEXT_FIELD(b, len, p);
+            rc = str2u16(b, p - b, &score_allele[i]);
+	    if(rc){
+		score_allele[i] =0;
+		rc =0;
+	    }
+        }
+        CG_LINE_NEXT_FIELD(b, len, p);
+        m->read_len = p - b;
+        rc = str2buf(b, m->read_len, m->read, sizeof(m->read));
+        CG_LINE_LAST_FIELD(b, len, p);
+        if( m->read_len != p - b ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInconsistent);
+        } else {
+            rc = str2buf(b, p - b, qual, sizeof(qual));
+        }
+        ((CGEvidenceDnbs15*)cself)->records++;
+        if( strcmp(next_interval_id, data->interval_id) != 0 ) {
+            if (score_allele_num == 3) {
+              DEBUG_MSG(10, ("%3u evidenceDnbs: '%s'\t'%s'\t'%s'\t'%s'\t%u\t%lu\t%hu\t%c\t%c\t%i\t'%.*s'"
+                            "\t%i\t'%s'\t%i\t'%s'\t%c\t%hu\t%hu\t%hu\t'%.*s'\t'%s'\n",
+                data->qty, next_interval_id, m->chr, m->slide, m->lane, m->file_num_in_lane,
+                m->dnb_offset_in_lane_file, m->allele_index, m->side, m->strand, m->offset_in_allele,
+                m->allele_alignment_length, m->allele_alignment, m->offset_in_reference,
+                reference_alignment, mate_offset_in_reference, mate_reference_alignment,
+                m->mapping_quality, score_allele[0], score_allele[1], score_allele[2], m->read_len, m->read, qual));
+            }
+            else if (score_allele_num == 4) {
+              DEBUG_MSG(10, ("%3u evidenceDnbs: '%s'\t'%s'\t'%s'\t'%s'\t%u\t%lu\t%hu\t%c\t%c\t%i\t'%.*s'"
+                            "\t%i\t'%s'\t%i\t'%s'\t%c\t%hu\t%hu\t%hu\t%hu\t'%.*s'\t'%s'\n",
+                data->qty, next_interval_id, m->chr, m->slide, m->lane, m->file_num_in_lane,
+                m->dnb_offset_in_lane_file, m->allele_index, m->side, m->strand, m->offset_in_allele,
+                m->allele_alignment_length, m->allele_alignment, m->offset_in_reference,
+                reference_alignment, mate_offset_in_reference, mate_reference_alignment,
+                m->mapping_quality, score_allele[0], score_allele[1], score_allele[2], score_allele[3], m->read_len, m->read, qual));
+            }
+            else { assert(0); }
+        }
+        CG_LINE_END();
+        if( next_interval_id[0] == '\0' ) {
+            break;
+        }
+        if( strcmp(next_interval_id, data->interval_id) != 0 ) {
+            /* next record is from next interval, remeber it and stop */
+            memcpy(&next_rec, m, sizeof(next_rec));
+            data->qty--;
+            break;
+        }
+    } while( rc == 0 );
+    return rc;
+}
+
+static
+rc_t CC CGEvidenceDnbs15_Read(const CGEvidenceDnbs15* self, const char* interval_id, TEvidenceDnbsData* data)
+{   return CGEvidenceDnbs_Read(self, interval_id, data, 3); }
+
+static
+rc_t CC CGEvidenceDnbs20_Read(const CGEvidenceDnbs15* self, const char* interval_id, TEvidenceDnbsData* data)
+{   return CGEvidenceDnbs_Read(self, interval_id, data, 4); }
+
+static const CGFileType_vt CGEvidenceDnbs15_vt =
+{
+    CGEvidenceDnbs15_Header,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    CGEvidenceDnbs15_Read,
+    CGEvidenceDnbs15_GetAssemblyId,
+    NULL,
+    NULL,
+    NULL,
+    CGEvidenceDnbs15_GetSample,
+    CGEvidenceDnbs15_GetChromosome,
+    CGEvidenceDnbs15_Release
+};
+
+static const CGFileType_vt CGEvidenceDnbs20_vt =
+{
+    CGEvidenceDnbs15_Header,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    CGEvidenceDnbs20_Read,
+    CGEvidenceDnbs15_GetAssemblyId,
+    NULL,
+    NULL,
+    NULL,
+    CGEvidenceDnbs15_GetSample,
+    CGEvidenceDnbs15_GetChromosome,
+    CGEvidenceDnbs15_Release
+};
+
+static
+rc_t CC CGEvidenceDnbs_Make(const CGFileType** cself, const CGLoaderFile* file,
+                              const CGFileType_vt* vt)
+{
+    rc_t rc = 0;
+    CGEvidenceDnbs15* obj = NULL;
+
+    assert(vt);
+
+    if( cself == NULL || file == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcParam, rcNull);
+    } else {
+        *cself = NULL;
+        if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcMemory, rcExhausted);
+        } else {
+            obj->file = file;
+            obj->dad.type = cg_eFileType_EVIDENCE_DNBS;
+            obj->dad.vt = vt;
+        }
+    }
+    if( rc == 0 ) {
+        *cself = &obj->dad;
+    } else {
+        CGEvidenceDnbs15_Release(obj, NULL);
+    }
+    return rc;
+}
+
+rc_t CC CGEvidenceDnbs15_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGEvidenceDnbs_Make(self, file, &CGEvidenceDnbs15_vt); }
+
+rc_t CC CGEvidenceDnbs13_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGEvidenceDnbs15_Make(self, file); }
+
+rc_t CC CGEvidenceDnbs20_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGEvidenceDnbs_Make(self, file, &CGEvidenceDnbs20_vt); }
+
+rc_t CC CGEvidenceDnbs22_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGEvidenceDnbs_Make(self, file, &CGEvidenceDnbs20_vt); }
diff --git a/tools/cg-load/factory-evidence-dnbs.h b/tools/cg-load/factory-evidence-dnbs.h
new file mode 100644
index 0000000..4ba4b4f
--- /dev/null
+++ b/tools/cg-load/factory-evidence-dnbs.h
@@ -0,0 +1,43 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_factory_evidence_dnbs_h_
+#define _tools_cg_load_factory_evidence_dnbs_h_
+
+#include <klib/defs.h>
+
+struct CGFileType;
+struct CGLoaderFile;
+
+rc_t CC CGEvidenceDnbs13_Make(const struct CGFileType** self,
+                              const struct CGLoaderFile* file);
+rc_t CC CGEvidenceDnbs15_Make(const struct CGFileType** self,
+                              const struct CGLoaderFile* file);
+rc_t CC CGEvidenceDnbs20_Make(const struct CGFileType** self,
+                              const struct CGLoaderFile* file);
+rc_t CC CGEvidenceDnbs22_Make(const struct CGFileType** self,
+                              const struct CGLoaderFile* file);
+
+#endif /* _tools_cg_load_factory_evidence_dnbs_h_ */
diff --git a/tools/cg-load/factory-evidence-intervals.c b/tools/cg-load/factory-evidence-intervals.c
new file mode 100644
index 0000000..1705bdc
--- /dev/null
+++ b/tools/cg-load/factory-evidence-intervals.c
@@ -0,0 +1,306 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+
+typedef struct CGEvidenceIntervals15 CGEvidenceIntervals15;
+#define CGFILETYPE_IMPL CGEvidenceIntervals15
+#include "file.h"
+#include "factory-cmn.h"
+#include "factory-evidence-intervals.h"
+#include "debug.h"
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+struct CGEvidenceIntervals15 {
+    CGFileType dad;
+    const CGLoaderFile* file;
+    uint64_t records;
+    /* headers */
+    CGFIELD15_ASSEMBLY_ID assembly_id;
+    CGFIELD15_CHROMOSOME chromosome;
+    CGFIELD15_GENERATED_AT generated_at;
+    CGFIELD15_GENERATED_BY generated_by;
+    CGFIELD15_SAMPLE sample;
+    CGFIELD15_SOFTWARE_VERSION software_version;
+};
+
+static
+rc_t CC CGEvidenceIntervals15_Header(const CGEvidenceIntervals15* cself, const char* buf, const size_t len)
+{
+    rc_t rc = 0;
+    size_t slen;
+    CGEvidenceIntervals15* self = (CGEvidenceIntervals15*)cself;
+
+    if( strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->assembly_id, sizeof(self->assembly_id));
+    } else if( strncmp("CHROMOSOME\t", buf, slen = 11) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->chromosome, sizeof(self->chromosome));
+    } else if( strncmp("GENERATED_AT\t", buf, slen = 13) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->generated_at, sizeof(self->generated_at));
+    } else if( strncmp("GENERATED_BY\t", buf, slen = 13) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->generated_by, sizeof(self->generated_by));
+    } else if( strncmp("SAMPLE\t", buf, slen = 7) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->sample, sizeof(self->sample));
+    } else if( strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->software_version, sizeof(self->software_version));
+    } else {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized);
+    }
+    return rc;
+}
+
+static
+rc_t CGEvidenceIntervals15_GetAssemblyId(const CGEvidenceIntervals15* cself, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id)
+{
+    if( cself->assembly_id[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *assembly_id = cself->assembly_id;
+    return 0;
+}
+
+static
+rc_t CGEvidenceIntervals15_GetSample(const CGEvidenceIntervals15* cself, const CGFIELD_SAMPLE_TYPE** sample)
+{
+    if( cself->sample[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *sample = cself->sample;
+    return 0;
+}
+
+static
+rc_t CGEvidenceIntervals15_GetChromosome(const CGEvidenceIntervals15* cself, const CGFIELD_CHROMOSOME_TYPE** chromosome)
+{
+    if( cself->chromosome[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *chromosome = cself->chromosome;
+    return 0;
+}
+
+static
+rc_t CC CGEvidenceIntervals15_Read(const CGEvidenceIntervals15* cself, TEvidenceIntervalsData* data)
+{
+    rc_t rc = 0;
+
+    CG_LINE_START(cself->file, b, len, p);
+    if( b == NULL || len == 0) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcDone);
+        break;
+    }
+    /*DEBUG_MSG(10, ("evidenceIntervals: '%.*s'\n", len, b));*/
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->interval_id, sizeof(data->interval_id));
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->chr, sizeof(data->chr));
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2i32(b, p - b, &data->offset);
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2u32(b, p - b, &data->length);
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2u16(b, p - b, &data->ploidy);
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele_indexes, sizeof(data->allele_indexes));
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2i32(b, p - b, &data->score);
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele[0], sizeof(data->allele[0]));
+    data->allele_length[0] = p - b;
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele[1], sizeof(data->allele[1]));
+    data->allele_length[1] = p - b;
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele[2], sizeof(data->allele[2]));
+    data->allele_length[2] = p - b;
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele_alignment[1], sizeof(data->allele_alignment[1]));
+    data->allele_alignment_length[1] = p - b;
+    CG_LINE_LAST_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele_alignment[2], sizeof(data->allele_alignment[2]));
+    data->allele_alignment_length[2] = p - b;
+    ((CGEvidenceIntervals15*)cself)->records++;
+    DEBUG_MSG(10, ("evidenceIntervals: '%s'\t'%s'\t%i\t%u\t%u\t%s\t%u\t'%s'\t'%s'\t'%s'\t'%s'\t'%s'\n",
+        data->interval_id, data->chr, data->offset, data->length, data->ploidy,
+        data->allele_indexes, data->score, data->allele[0], data->allele[1], data->allele[2],
+        data->allele_alignment[1], data->allele_alignment[2]));
+    CG_LINE_END();
+    return rc;
+}
+
+static
+rc_t CC CGEvidenceIntervals20_Read(const CGEvidenceIntervals15* cself, TEvidenceIntervalsData* data)
+{
+    rc_t rc = 0;
+
+    CG_LINE_START(cself->file, b, len, p);
+    if( b == NULL || len == 0) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcDone);
+        break;
+    }
+    /*DEBUG_MSG(10, ("evidenceIntervals: '%.*s'\n", len, b));*/
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->interval_id, sizeof(data->interval_id));
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->chr, sizeof(data->chr));
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2i32(b, p - b, &data->offset);
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2u32(b, p - b, &data->length);
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2u16(b, p - b, &data->ploidy);
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele_indexes, sizeof(data->allele_indexes));
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2i32(b, p - b, &data->scoreVAF);
+    data->score = data->scoreVAF; /***TODO: do we need re-calculation? ***/
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2i32(b, p - b, &data->scoreEAF);
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele[0], sizeof(data->allele[0]));
+    data->allele_length[0] = p - b;
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele[1], sizeof(data->allele[1]));
+    data->allele_length[1] = p - b;
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele[2], sizeof(data->allele[2]));
+    data->allele_length[2] = p - b;
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele[3], sizeof(data->allele[3]));
+    data->allele_length[3] = p - b;
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele_alignment[1], sizeof(data->allele_alignment[1]));
+    data->allele_alignment_length[1] = p - b;
+    CG_LINE_NEXT_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele_alignment[2], sizeof(data->allele_alignment[2]));
+    data->allele_alignment_length[2] = p - b;
+    CG_LINE_LAST_FIELD(b, len, p);
+    rc = str2buf(b, p - b, data->allele_alignment[3], sizeof(data->allele_alignment[3]));
+    data->allele_alignment_length[3] = p - b;
+    ((CGEvidenceIntervals15*)cself)->records++;
+    DEBUG_MSG(10, (
+        "evidenceIntervals: '%s'\t'%s'\t%i\t%u\t%u\t%s\t%u\t%u\t'%s'\t'%s'\t'%s'\t'%s'\t'%s'\t'%s'\t'%s'\n",
+        data->interval_id, data->chr, data->offset, data->length, data->ploidy,
+        data->allele_indexes, data->scoreVAF, data->scoreEAF,
+        data->allele[0], data->allele[1], data->allele[2], data->allele[3],
+        data->allele_alignment[1], data->allele_alignment[2], data->allele_alignment[3]));
+    CG_LINE_END();
+    return rc;
+}
+
+static
+void CC CGEvidenceIntervals15_Release(const CGEvidenceIntervals15* cself, uint64_t* records)
+{
+    if( cself != NULL ) {
+        CGEvidenceIntervals15* self = (CGEvidenceIntervals15*)cself;
+        if( records != NULL ) {
+            *records = cself->records;
+        }
+        free(self);
+    }
+}
+
+static const CGFileType_vt CGEvidenceIntervals15_vt =
+{
+    CGEvidenceIntervals15_Header,
+    NULL,
+    NULL,
+    NULL,
+    CGEvidenceIntervals15_Read,
+    NULL,
+    CGEvidenceIntervals15_GetAssemblyId,
+    NULL,
+    NULL,
+    NULL,
+    CGEvidenceIntervals15_GetSample,
+    CGEvidenceIntervals15_GetChromosome,
+    CGEvidenceIntervals15_Release
+};
+
+static const CGFileType_vt CGEvidenceIntervals20_vt =
+{
+    CGEvidenceIntervals15_Header,
+    NULL,
+    NULL,
+    NULL,
+    CGEvidenceIntervals20_Read,
+    NULL,
+    CGEvidenceIntervals15_GetAssemblyId,
+    NULL,
+    NULL,
+    NULL,
+    CGEvidenceIntervals15_GetSample,
+    CGEvidenceIntervals15_GetChromosome,
+    CGEvidenceIntervals15_Release
+};
+
+static
+rc_t CGEvidenceIntervals_Make(const CGFileType** cself, const CGLoaderFile* file, const CGFileType_vt* vt)
+{
+    rc_t rc = 0;
+    CGEvidenceIntervals15* obj = NULL;
+
+    assert(vt);
+
+    if( cself == NULL || file == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcParam, rcNull);
+    }
+    if( rc == 0 ) {
+        *cself = NULL;
+        if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcMemory, rcExhausted);
+        } else {
+            obj->file = file;
+            obj->dad.type = cg_eFileType_EVIDENCE_INTERVALS;
+            obj->dad.vt = vt;
+        }
+    }
+    if( rc == 0 ) {
+        *cself = &obj->dad;
+    } else {
+        CGEvidenceIntervals15_Release(obj, NULL);
+    }
+    return rc;
+}
+
+rc_t CGEvidenceIntervals15_Make(const CGFileType** self,
+    const CGLoaderFile* file)
+{   return CGEvidenceIntervals_Make(self, file, &CGEvidenceIntervals15_vt); }
+
+rc_t CGEvidenceIntervals13_Make(const CGFileType** self,
+    const CGLoaderFile* file)
+{   return CGEvidenceIntervals15_Make(self, file); }
+
+rc_t CGEvidenceIntervals20_Make(const CGFileType** self,
+    const CGLoaderFile* file)
+{   return CGEvidenceIntervals_Make(self, file, &CGEvidenceIntervals20_vt); }
+
+rc_t CGEvidenceIntervals22_Make(const CGFileType** self,
+    const CGLoaderFile* file)
+{   return CGEvidenceIntervals20_Make(self, file); }
diff --git a/tools/cg-load/factory-evidence-intervals.h b/tools/cg-load/factory-evidence-intervals.h
new file mode 100644
index 0000000..2f84fd4
--- /dev/null
+++ b/tools/cg-load/factory-evidence-intervals.h
@@ -0,0 +1,43 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_factory_evidence_intervals_h_
+#define _tools_cg_load_factory_evidence_intervals_h_
+
+#include <klib/defs.h>
+
+struct CGFileType;
+struct CGLoaderFile;
+
+rc_t CGEvidenceIntervals13_Make(const struct CGFileType** self,
+                                const struct CGLoaderFile* file);
+rc_t CGEvidenceIntervals15_Make(const struct CGFileType** self,
+                                const struct CGLoaderFile* file);
+rc_t CGEvidenceIntervals20_Make(const struct CGFileType** self,
+                                const struct CGLoaderFile* file);
+rc_t CGEvidenceIntervals22_Make(const struct CGFileType** self,
+                                const struct CGLoaderFile* file);
+
+#endif /* _tools_cg_load_factory_evidence_intervals_h_ */
diff --git a/tools/cg-load/factory-file.h b/tools/cg-load/factory-file.h
new file mode 100644
index 0000000..8931fca
--- /dev/null
+++ b/tools/cg-load/factory-file.h
@@ -0,0 +1,43 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_factory_file_h_
+#define _tools_cg_load_factory_file_h_
+
+#include <klib/defs.h>
+
+struct CGFileType;
+struct CGLoaderFile;
+
+rc_t CGFile13_Make(const struct CGFileType** self,
+                   const char* type, const struct CGLoaderFile* file);
+rc_t CGFile15_Make(const struct CGFileType** self,
+                   const char* type, const struct CGLoaderFile* file);
+rc_t CGFile20_Make(const struct CGFileType** self,
+                   const char* type, const struct CGLoaderFile* file);
+rc_t CGFile22_Make(const struct CGFileType** self,
+                   const char* type, const struct CGLoaderFile* file);
+
+#endif /* _tools_cg_load_factory_file_h_ */
diff --git a/tools/cg-load/factory-mappings.c b/tools/cg-load/factory-mappings.c
new file mode 100644
index 0000000..43537f2
--- /dev/null
+++ b/tools/cg-load/factory-mappings.c
@@ -0,0 +1,338 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+
+typedef struct CGMappings15 CGMappings15;
+#define CGFILETYPE_IMPL CGMappings15
+#include "file.h"
+#include "factory-cmn.h"
+#include "factory-mappings.h"
+#include "debug.h"
+
+#include <string.h>
+#include <stdlib.h>
+
+struct CGMappings15 {
+    CGFileType dad;
+    const CGLoaderFile* file;
+    uint64_t records;
+    /* headers */
+    CGFIELD15_ASSEMBLY_ID assembly_id;
+    CGFIELD15_BATCH_FILE_NUMBER batch_file_number;
+    CGFIELD15_GENERATED_AT generated_at;
+    CGFIELD15_GENERATED_BY generated_by;
+    CGFIELD15_LANE lane;
+    CGFIELD15_LIBRARY library;
+    CGFIELD15_SAMPLE sample;
+    CGFIELD15_SLIDE slide;
+    CGFIELD15_SOFTWARE_VERSION software_version;
+};
+
+void CGMappings15_Release(const CGMappings15* cself, uint64_t* records)
+{
+    if( cself != NULL ) {
+        CGMappings15* self = (CGMappings15*)cself;
+        if( records != NULL ) {
+            *records = cself->records;
+        }
+        free(self);
+    }
+}
+
+static
+rc_t CC CGMappings15_Header(const CGMappings15* cself, const char* buf, const size_t len)
+{
+    rc_t rc = 0;
+    size_t slen;
+    CGMappings15* self = (CGMappings15*)cself;
+
+    if( strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->assembly_id, sizeof(self->assembly_id));
+    } else if( strncmp("BATCH_FILE_NUMBER\t", buf, slen = 18) == 0 ) {
+        rc = str2u32(&buf[slen], len - slen, &self->batch_file_number);
+        if( self->batch_file_number < 1 ) {
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcItem, rcOutofrange);
+        }
+    } else if( strncmp("GENERATED_AT\t", buf, slen = 13) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->generated_at, sizeof(self->generated_at));
+    } else if( strncmp("GENERATED_BY\t", buf, slen = 13) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->generated_by, sizeof(self->generated_by));
+    } else if( strncmp("LANE\t", buf, slen = 5) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->lane, sizeof(self->lane));
+    } else if( strncmp("LIBRARY\t", buf, slen = 8) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->library, sizeof(self->library));
+    } else if( strncmp("SAMPLE\t", buf, slen = 7) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->sample, sizeof(self->sample));
+    } else if( strncmp("SLIDE\t", buf, slen = 6) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->slide, sizeof(self->slide));
+    } else if( strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->software_version, sizeof(self->software_version));
+    } else {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized);
+    }
+    return rc;
+}
+
+static
+rc_t CGMappings15_GetAssemblyId(const CGMappings15* cself, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id)
+{
+    if( cself->assembly_id[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *assembly_id = cself->assembly_id;
+    return 0;
+}
+
+static
+rc_t CGMappings15_GetSlide(const CGMappings15* cself, const CGFIELD_SLIDE_TYPE** slide)
+{
+    if( cself->slide[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *slide = cself->slide;
+    return 0;
+}
+
+static
+rc_t CGMappings15_GetLane(const CGMappings15* cself, const CGFIELD_LANE_TYPE** lane)
+{
+    if( cself->lane[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *lane = cself->lane;
+    return 0;
+}
+
+static
+rc_t CGMappings15_GetBatchFileNumber(const CGMappings15* cself, const CGFIELD_BATCH_FILE_NUMBER_TYPE** batch_file_number)
+{
+    *batch_file_number = &cself->batch_file_number;
+    return 0;
+}
+
+static
+rc_t CC CGMappings15_Read(const CGMappings15* cself, TMappingsData* data)
+{
+    rc_t rc = 0;
+    TMappingsData_map* m = NULL;
+
+    data->map_qty = 0;
+    do {
+        char tmp[2];
+        CG_LINE_START(cself->file, b, len, p);
+        if( b == NULL || len == 0 ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInsufficient);
+            break;
+        }
+        m = &data->map[data->map_qty];
+        m->saved = false;
+        /*DEBUG_MSG(10, ("mappings %4u: '%.*s'\n", data->map_qty, len, b));*/
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2u16(b, p - b, &m->flags);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, m->chr, sizeof(m->chr));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i32(b, p - b, &m->offset);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i16(b, p - b, &m->gap[0]);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i16(b, p - b, &m->gap[1]);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i16(b, p - b, &m->gap[2]);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, tmp, sizeof(tmp));
+        if( tmp[0] < 33 || tmp[0] > 126 ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+        }
+        m->weight = tmp[0];
+        CG_LINE_LAST_FIELD(b, len, p);
+        if( (rc = str2u32(b, p - b, &m->mate)) != 0 ) {
+        } else if( m->flags > 7 ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+        } else if( ++data->map_qty >= CG_MAPPINGS_MAX ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcBuffer, rcInsufficient);
+        }
+        ((CGMappings15*)cself)->records++;
+        DEBUG_MSG(10, ("mappings %4u:  %u\t'%s'\t%u\t%i\t%i\t%i\t%c\t%u\n",
+                        data->map_qty - 1, m->flags, m->chr, m->offset,
+                        m->gap[0], m->gap[1], m->gap[2], m->weight, m->mate));
+        CG_LINE_END();
+    } while( rc == 0 && !(m->flags & cg_eLastDNBRecord) );
+    if (rc == 0) {
+        unsigned i;
+        unsigned const n = data->map_qty;
+        
+        for (i = 0; i != n && rc == 0; ++i) {
+            unsigned const mate = data->map[i].mate;
+            
+            if (mate > n)
+                data->map[i].mate = i;
+        }
+    }
+    return rc;
+}
+
+static
+rc_t CC CGMappings22_Read(const CGMappings15* cself, TMappingsData* data)
+{
+    rc_t rc = 0;
+    TMappingsData_map* m = NULL;
+
+    data->map_qty = 0;
+    do {
+        char tmp[2];
+        char armWeight = '\0';
+        CG_LINE_START(cself->file, b, len, p);
+        if( b == NULL || len == 0 ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInsufficient);
+            break;
+        }
+        m = &data->map[data->map_qty];
+        m->saved = false;
+        /*DEBUG_MSG(10, ("mappings %4u: '%.*s'\n", data->map_qty, len, b));*/
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2u16(b, p - b, &m->flags);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, m->chr, sizeof(m->chr));
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i32(b, p - b, &m->offset);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i16(b, p - b, &m->gap[0]);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i16(b, p - b, &m->gap[1]);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2i16(b, p - b, &m->gap[2]);
+        CG_LINE_NEXT_FIELD(b, len, p);
+        rc = str2buf(b, p - b, tmp, sizeof(tmp));
+        if( tmp[0] < 33 || tmp[0] > 126 ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+        }
+        m->weight = tmp[0];
+        CG_LINE_NEXT_FIELD(b, len, p);
+        if( (rc = str2u32(b, p - b, &m->mate)) != 0 ) {
+        } else if( m->flags > 7 ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+        } else if( ++data->map_qty >= CG_MAPPINGS_MAX ) {
+            rc = RC(rcRuntime, rcFile, rcReading, rcBuffer, rcInsufficient);
+        }
+        CG_LINE_LAST_FIELD(b, len, p);
+        rc = str2buf(b, p - b, tmp, sizeof(tmp));
+        if (tmp[0] < 33 || tmp[0] > 126)
+        {   rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange); }
+        armWeight = tmp[0]; /* ignore armWeight */
+        ((CGMappings15*)cself)->records++;
+        DEBUG_MSG(10, ("mappings %4u:  %u\t'%s'\t%u\t%i\t%i\t%i\t%c\t%u\t%c\n",
+            data->map_qty - 1, m->flags, m->chr, m->offset,
+            m->gap[0], m->gap[1], m->gap[2], m->weight, m->mate, armWeight));
+        CG_LINE_END();
+    } while( rc == 0 && !(m->flags & cg_eLastDNBRecord) );
+    if (rc == 0) {
+        unsigned i;
+        unsigned const n = data->map_qty;
+        
+        for (i = 0; i != n && rc == 0; ++i) {
+            unsigned const mate = data->map[i].mate;
+            
+            if (mate > n)
+                data->map[i].mate = n;
+        }
+    }
+    return rc;
+}
+
+static const CGFileType_vt CGMappings15_vt =
+{
+    CGMappings15_Header,
+    NULL,
+    NULL,
+    CGMappings15_Read,
+    NULL,
+    NULL,
+    CGMappings15_GetAssemblyId,
+    CGMappings15_GetSlide,
+    CGMappings15_GetLane,
+    CGMappings15_GetBatchFileNumber,
+    NULL,
+    NULL,
+    CGMappings15_Release
+};
+
+static const CGFileType_vt CGMappings22_vt =
+{
+    CGMappings15_Header,
+    NULL,
+    NULL,
+    CGMappings22_Read,
+    NULL,
+    NULL,
+    CGMappings15_GetAssemblyId,
+    CGMappings15_GetSlide,
+    CGMappings15_GetLane,
+    CGMappings15_GetBatchFileNumber,
+    NULL,
+    NULL,
+    CGMappings15_Release
+};
+
+static
+rc_t CC CGMappings_Make(const CGFileType** cself,
+    const CGLoaderFile* file, const CGFileType_vt* vt)
+{
+    rc_t rc = 0;
+    CGMappings15* obj = NULL;
+    
+    if( cself == NULL || file == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcParam, rcNull);
+    } else {
+        *cself = NULL;
+        if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcMemory, rcExhausted);
+        } else {
+            obj->file = file;
+            obj->dad.type = cg_eFileType_MAPPINGS;
+            obj->dad.vt = vt;
+        }
+    }
+    if( rc == 0 ) {
+        *cself = &obj->dad;
+    } else {
+        CGMappings15_Release(obj, NULL);
+    }
+    return rc;
+}
+
+rc_t CC CGMappings15_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGMappings_Make(self, file, &CGMappings15_vt); }
+
+rc_t CC CGMappings13_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGMappings15_Make(self, file); }
+
+rc_t CC CGMappings20_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGMappings15_Make(self, file); }
+
+rc_t CC CGMappings22_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGMappings_Make(self, file, &CGMappings22_vt); }
diff --git a/tools/cg-load/factory-mappings.h b/tools/cg-load/factory-mappings.h
new file mode 100644
index 0000000..cc283b7
--- /dev/null
+++ b/tools/cg-load/factory-mappings.h
@@ -0,0 +1,43 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_factory_mappings_h_
+#define _tools_cg_load_factory_mappings_h_
+
+#include <klib/defs.h>
+
+struct CGFileType;
+struct CGLoaderFile;
+
+rc_t CC CGMappings13_Make(const struct CGFileType** self,
+                          const struct CGLoaderFile* file);
+rc_t CC CGMappings15_Make(const struct CGFileType** self,
+                          const struct CGLoaderFile* file);
+rc_t CC CGMappings20_Make(const struct CGFileType** self,
+                          const struct CGLoaderFile* file);
+rc_t CC CGMappings22_Make(const struct CGFileType** self,
+                          const struct CGLoaderFile* file);
+
+#endif /* _tools_cg_load_factory_mappings_h_ */
diff --git a/tools/cg-load/factory-reads.c b/tools/cg-load/factory-reads.c
new file mode 100644
index 0000000..8b39f9a
--- /dev/null
+++ b/tools/cg-load/factory-reads.c
@@ -0,0 +1,261 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+
+typedef struct CGReads15 CGReads15;
+#define CGFILETYPE_IMPL CGReads15
+#include "file.h"
+#include "factory-cmn.h"
+#include "factory-reads.h"
+#include "debug.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <os-native.h>
+
+struct CGReads15 {
+    CGFileType dad;
+    const CGLoaderFile* file;
+    int64_t start_rowid;
+    char spot_group[512];
+    uint64_t records;
+    /* headers */
+    CGFIELD15_ASSEMBLY_ID assembly_id;
+    CGFIELD15_BATCH_FILE_NUMBER batch_file_number;
+    CGFIELD15_BATCH_OFFSET batch_offset;
+    CGFIELD15_FIELD_SIZE field_size;
+    CGFIELD15_GENERATED_AT generated_at;
+    CGFIELD15_GENERATED_BY generated_by;
+    CGFIELD15_LANE lane;
+    CGFIELD15_LIBRARY library;
+    CGFIELD15_SAMPLE sample;
+    CGFIELD15_SLIDE slide;
+    CGFIELD15_SOFTWARE_VERSION software_version;
+};
+
+static
+rc_t CC CGReads15_Header(const CGReads15* cself, const char* buf, const size_t len)
+{
+    rc_t rc = 0;
+    size_t slen;
+    CGReads15* self = (CGReads15*)cself;
+
+    if( strncmp("ASSEMBLY_ID\t", buf, slen = 12) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->assembly_id, sizeof(self->assembly_id));
+    } else if( strncmp("BATCH_FILE_NUMBER\t", buf, slen = 18) == 0 ) {
+        rc = str2u32(&buf[slen], len - slen, &self->batch_file_number);
+        if( self->batch_file_number < 1 ) {
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcItem, rcOutofrange);
+        }
+    } else if( strncmp("BATCH_OFFSET\t", buf, slen = 13) == 0 ) {
+        rc = str2u64(&buf[slen], len - slen, &self->batch_offset);
+    } else if( strncmp("FIELD_SIZE\t", buf, slen = 11) == 0 ) {
+        rc = str2u32(&buf[slen], len - slen, &self->field_size);
+    } else if( strncmp("GENERATED_AT\t", buf, slen = 13) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->generated_at, sizeof(self->generated_at));
+    } else if( strncmp("GENERATED_BY\t", buf, slen = 13) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->generated_by, sizeof(self->generated_by));
+    } else if( strncmp("LANE\t", buf, slen = 5) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->lane, sizeof(self->lane));
+    } else if( strncmp("LIBRARY\t", buf, slen = 8) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->library, sizeof(self->library));
+    } else if( strncmp("SAMPLE\t", buf, slen = 7) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->sample, sizeof(self->sample));
+    } else if( strncmp("SLIDE\t", buf, slen = 6) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->slide, sizeof(self->slide));
+    } else if( strncmp("SOFTWARE_VERSION\t", buf, slen = 17) == 0 ) {
+        rc = str2buf(&buf[slen], len - slen, self->software_version, sizeof(self->software_version));
+    } else {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcName, rcUnrecognized);
+    }
+    return rc;
+}
+
+static
+rc_t CGReads15_GetAssemblyId(const CGReads15* cself, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id)
+{
+    if( cself->assembly_id[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *assembly_id = cself->assembly_id;
+    return 0;
+}
+
+static
+rc_t CGReads15_GetSlide(const CGReads15* cself, const CGFIELD_SLIDE_TYPE** slide)
+{
+    if( cself->slide[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *slide = cself->slide;
+    return 0;
+}
+
+static
+rc_t CGReads15_GetLane(const CGReads15* cself, const CGFIELD_LANE_TYPE** lane)
+{
+    if( cself->lane[0] == '\0' ) {
+        return RC(rcRuntime, rcFile, rcReading, rcFormat, rcInvalid);
+    }
+    *lane = cself->lane;
+    return 0;
+}
+
+static
+rc_t CGReads15_GetBatchFileNumber(const CGReads15* cself, const CGFIELD_BATCH_FILE_NUMBER_TYPE** batch_file_number)
+{
+    *batch_file_number = &cself->batch_file_number;
+    return 0;
+}
+
+static
+rc_t CC CGReads15_Read(const CGReads15* cself, TReadsData* data)
+{
+    rc_t rc = 0;
+
+    if( cself->start_rowid == 0 ) {
+        ((CGReads15*)cself)->start_rowid = data->rowid;
+    }
+    CG_LINE_START(cself->file, b, len, p);
+    if( b == NULL || len == 0) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcDone);
+        break;
+    }
+    /*DEBUG_MSG(10, ("reads: '%.*s'\n", len, b));*/
+    CG_LINE_NEXT_FIELD(b, len, p);
+    if( (rc = str2u16(b, p - b, &data->flags)) != 0 ) {
+    } else if( data->flags > 10 ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcOutofrange);
+    } else if( (data->flags & 0x03) == 3 || (data->flags & 0x07) == 7 ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInvalid);
+    }
+    CG_LINE_NEXT_FIELD(b, len, p);
+    data->seq.sequence.elements = p - b;
+    if( data->seq.sequence.elements != CG_READS_SPOT_LEN ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInvalid);
+    } else {
+        rc = str2buf(b, data->seq.sequence.elements, data->read, sizeof(data->read));
+        /* clear cache, set in algnment writer */
+        data->reverse[0] = '\0';
+        data->reverse[CG_READS_SPOT_LEN / 2] = '\0';
+    }
+    CG_LINE_LAST_FIELD(b, len, p);
+    data->seq.quality.elements = p - b;
+    if( data->seq.quality.elements != CG_READS_SPOT_LEN ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcData, rcInvalid);
+    } else {
+        rc = str2buf(b, data->seq.quality.elements, data->qual, sizeof(data->qual));
+    }
+    if( cself->records == 0 ) {
+        size_t w;
+        
+#if 0
+        rc = string_printf(((CGReads15*)cself)->spot_group, sizeof(cself->spot_group), &w, "%s:%s:%s:%04u",
+                           cself->assembly_id, cself->slide, cself->lane, cself->batch_file_number);
+#else
+        rc = string_printf(((CGReads15*)cself)->spot_group, sizeof(cself->spot_group), &w, "%s-%s",
+                           cself->slide, cself->lane);
+#endif
+        data->seq.spot_group.buffer = cself->spot_group;
+        data->seq.spot_group.elements = w;
+    }
+    ((CGReads15*)cself)->records++;
+    DEBUG_MSG(10, ("reads:  %u\t'%s'\t'%s'\n", data->flags, data->read, data->qual));
+    CG_LINE_END();
+    return rc;
+}
+
+static
+rc_t CGReads15_GetStartRow(const CGReads15* cself, int64_t* rowid)
+{
+    *rowid = cself->start_rowid;
+    return 0;
+}
+
+static
+void CC CGReads15_Release(const CGReads15* cself, uint64_t* records)
+{
+    if( cself != NULL ) {
+        CGReads15* self = (CGReads15*)cself;
+        if( records != NULL ) {
+            *records = cself->records;
+        }
+        free(self);
+    }
+}
+
+static const CGFileType_vt CGReads15_vt =
+{
+    CGReads15_Header,
+    CGReads15_Read,
+    CGReads15_GetStartRow,
+    NULL,
+    NULL,
+    NULL,
+    CGReads15_GetAssemblyId,
+    CGReads15_GetSlide,
+    CGReads15_GetLane,
+    CGReads15_GetBatchFileNumber,
+    NULL,
+    NULL,
+    CGReads15_Release
+};
+
+rc_t CC CGReads15_Make(const CGFileType** cself, const CGLoaderFile* file)
+{
+    rc_t rc = 0;
+    CGReads15* obj = NULL;
+    
+    if( cself == NULL || file == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcParam, rcNull);
+    }
+    if( rc == 0 ) {
+        *cself = NULL;
+        if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcMemory, rcExhausted);
+        } else {
+            obj->file = file;
+            obj->dad.type = cg_eFileType_READS;
+            obj->dad.vt = &CGReads15_vt;
+        }
+    }
+    if( rc == 0 ) {
+        *cself = &obj->dad;
+    } else {
+        CGReads15_Release(obj, NULL);
+    }
+    return rc;
+}
+
+rc_t CC CGReads13_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGReads15_Make(self, file); }
+
+rc_t CC CGReads20_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGReads15_Make(self, file); }
+
+rc_t CC CGReads22_Make(const CGFileType** self, const CGLoaderFile* file)
+{   return CGReads15_Make(self, file); }
diff --git a/tools/cg-load/factory-reads.h b/tools/cg-load/factory-reads.h
new file mode 100644
index 0000000..e0266d3
--- /dev/null
+++ b/tools/cg-load/factory-reads.h
@@ -0,0 +1,43 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_factory_reads_h_
+#define _tools_cg_load_factory_reads_h_
+
+#include <klib/defs.h>
+
+struct CGFileType;
+struct CGLoaderFile;
+
+rc_t CC CGReads13_Make(const struct CGFileType** self,
+                       const struct CGLoaderFile* file);
+rc_t CC CGReads15_Make(const struct CGFileType** self,
+                       const struct CGLoaderFile* file);
+rc_t CC CGReads20_Make(const struct CGFileType** self,
+                       const struct CGLoaderFile* file);
+rc_t CC CGReads22_Make(const struct CGFileType** self,
+                       const struct CGLoaderFile* file);
+
+#endif /* _tools_cg_load_factory_reads_h_ */
diff --git a/tools/cg-load/file-version-factory.c b/tools/cg-load/file-version-factory.c
new file mode 100644
index 0000000..55372f8
--- /dev/null
+++ b/tools/cg-load/file-version-factory.c
@@ -0,0 +1,157 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+
+#include "factory-file.h" /* CGFile15_Make ... */
+
+typedef struct CGIgnored CGIgnored;
+#define CGFILETYPE_IMPL CGIgnored
+
+#include "file.h" /* CGLoaderFile */
+
+#include <assert.h>
+
+rc_t CGLoaderFile_CreateCGFile(CGLoaderFile* self,
+    uint32_t FORMAT_VERSION, const char* TYPE)
+{
+    assert(self && !self->cg_file);
+
+    switch (FORMAT_VERSION) {
+        case 0x01030000:
+            return CGFile13_Make(&self->cg_file, TYPE, self);
+        case 0x01050000:
+        case 0x01060000:
+            return CGFile15_Make(&self->cg_file, TYPE, self);
+        case 0x02000000:
+            return CGFile20_Make(&self->cg_file, TYPE, self);
+        case 0x02020000:
+            return CGFile22_Make(&self->cg_file, TYPE, self);
+        default: {
+            const char* name = NULL;
+            rc_t rc = CGLoaderFile_Filename(self, &name);
+            if (rc != 0 || name == NULL)
+            {   name = " | UNKNOWN | "; }
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcData, rcBadVersion);
+            PLOGERR(klogErr, (klogErr, rc,
+                "Unexpected #FORMAT_VERSION value '$(FORMAT_VERSION)' "
+                "in CG file '$(name)'",
+                "FORMAT_VERSION=%X,name=%s", FORMAT_VERSION, name));
+            return rc;
+        }
+    }
+}
+
+struct CGIgnored {
+    CGFileType dad;
+};
+
+static
+void CC CGIgnored_Release(const CGIgnored* cself, uint64_t* records)
+{
+    if( cself != NULL ) {
+        CGIgnored* self = (CGIgnored*)cself;
+        if( records != NULL ) {
+            *records = 0;
+        }
+        free(self);
+    }
+}
+
+static
+rc_t CC CGIgnored_Header(const CGIgnored* cself,
+    const char* buf, const size_t len)
+{
+    return 0;
+}
+
+static const CGFileType_vt CGIgnored_vt =
+{
+    CGIgnored_Header,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    NULL,
+    CGIgnored_Release
+};
+
+rc_t CGLoaderFileMakeCGFileType(const CGLoaderFile* self, const char* type,
+    const CGFileTypeFactory* factory, size_t factories,
+    const CGFileType** ftype)
+{
+    rc_t rc = 0;
+    CGIgnored* obj = NULL;
+    uint32_t i;
+
+    if (self == NULL || type == NULL ||
+        factory == NULL || factories == 0 || ftype == NULL)
+    {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcParam, rcNull);
+    }
+    else {
+        *ftype = NULL;
+
+        for (i = 0; i < factories; ++i) {
+            if (strcmp(type, factory[i].name) == 0) {
+                if (factory[i].make != NULL) {
+                    return factory[i].make(ftype, self);
+                } else if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
+                    rc = RC(rcRuntime,
+                        rcFile, rcConstructing, rcMemory, rcExhausted);
+                } else {
+                    obj->dad.vt = &CGIgnored_vt;
+                    obj->dad.type = factory[i].type;
+                }
+                break;
+            }
+        }
+
+        if( obj == NULL ) {
+            const char* name = NULL;
+            rc = CGLoaderFile_Filename(self, &name);
+            if (rc != 0 || name == NULL)
+            {   name = " | UNKNOWN | "; }
+
+            rc = RC(rcRuntime, rcFile, rcConstructing, rcItem, rcUnrecognized);
+            PLOGERR(klogErr, (klogErr, rc,
+                "Unexpected header #TYPE value '$(TYPE)' in CG file '$(name)'",
+                "TYPE=%s,name=%s", type, name));
+        }
+    }
+
+    if( rc == 0 ) {
+        *ftype = &obj->dad;
+    }
+    else {
+        CGIgnored_Release(obj, NULL);
+    }
+
+    return rc;
+}
diff --git a/tools/cg-load/file.c b/tools/cg-load/file.c
new file mode 100644
index 0000000..0e9a272
--- /dev/null
+++ b/tools/cg-load/file.c
@@ -0,0 +1,403 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/status.h>
+#include <kfs/directory.h>
+#include <kapp/loader-file.h>
+#include <strtol.h>
+
+#include "defs.h"
+#include "file.h"
+#include "factory-file.h"
+#include "debug.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+rc_t CGLoaderFile_IsEof(const CGLoaderFile* cself, bool* eof)
+{
+    return KLoaderFile_IsEof(cself ? cself->file : NULL, eof);
+}
+
+rc_t CGLoaderFile_Close(const CGLoaderFile* cself)
+{
+    const char* nm;
+
+    if( KLoaderFile_FullName(cself ? cself->file : NULL, &nm) == 0 ) {
+        PLOGMSG(klogInfo, (klogInfo, "File $(file) done", "severity=status,file=%s", nm));
+    }
+    return KLoaderFile_Close(cself ? cself->file : NULL);
+}
+
+rc_t CGLoaderFile_Line(const CGLoaderFile* cself, uint64_t* line)
+{
+    return KLoaderFile_Line(cself ? cself->file : NULL, line);
+}
+
+
+rc_t CGLoaderFile_Readline(const CGLoaderFile* cself, const void** buffer, size_t* length)
+{
+    return KLoaderFile_Readline(cself ? cself->file : NULL, buffer, length);
+}
+
+rc_t CGLoaderFile_Filename(const CGLoaderFile* cself, const char** name)
+{
+    return KLoaderFile_Name(cself ? cself->file : NULL, name);
+}
+
+rc_t CGLoaderFile_LOG(const CGLoaderFile* cself, KLogLevel lvl, rc_t rc, const char *msg, const char *fmt, ...)
+{
+    if( cself != NULL ) {
+        va_list args;
+        va_start(args, fmt);
+        rc = KLoaderFile_VLOG(cself->file, lvl, rc, msg, fmt, args);
+        va_end(args);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_Release(const CGLoaderFile* cself, bool ignored)
+{
+    rc_t rc = 0;
+
+    if( cself ) {
+        CGLoaderFile* self = (CGLoaderFile*)cself;
+        /* may return md5 check error here */
+        if( self->cg_file && self->cg_file->vt->destroy ) {
+            uint64_t recs = 0;
+            self->cg_file->vt->destroy(self->cg_file, &recs);
+            if( rc == 0 && !ignored ) {
+                const char* name = NULL;
+                CGLoaderFile_Filename(cself, &name);
+                STSMSG(0, ("file %s %lu records", name, recs));
+            }
+        }
+        rc = KLoaderFile_Release(self->file, ignored);
+        free(self);
+    }
+    return rc;
+}
+
+static
+rc_t parse_version(const char* buf, size_t len, uint32_t* v)
+{
+    rc_t rc = 0;
+    int i = 0;
+    int64_t q;
+    char* end = (char*)buf;
+    const size_t sz = sizeof(*v) / sizeof(char);
+
+    *v = 0;
+    do {
+        if( i == sz ) {
+            rc = RC(rcRuntime, rcHeader, rcConstructing, rcFile, rcBadVersion);
+        } else {
+            q = strtoi64(end, &end, 10);
+            if( q < 0 || q > 255 ) {
+                rc = RC(rcRuntime, rcHeader, rcConstructing, rcFile, rcBadVersion);
+            } else if( *end == '.' ) {
+                end++;
+            } else if( end - buf < len ) {
+                rc = RC(rcRuntime, rcHeader, rcConstructing, rcFile, rcBadVersion);
+            }
+            *v = *v | ((uint8_t)q << ((sz - ++i) * 8));
+        }
+    } while( rc == 0 && end - buf < len);
+    return rc;
+}
+
+static
+rc_t CGLoaderFile_header(const CGLoaderFile* cself)
+{
+    rc_t rc = 0;
+
+    if( cself->cg_file == NULL ) {
+        CGLoaderFile* self = (CGLoaderFile*)cself;
+        const char* buf;
+        size_t len;
+        uint32_t fver = 0;
+        char type[64];
+
+        do {
+            if( (rc = CGLoaderFile_Readline(self, (const void**)&buf, &len)) == 0 ) {
+                if( buf == NULL ) {
+                    rc = RC(rcRuntime, rcFile, rcConstructing, rcData, rcTooShort);
+                } else if( len == 0 ) {
+                    /* empty line: skip */
+                } else if( buf[0] == '>' ) {
+                    /* start of records */
+                    break;
+                } else if( buf[0] == '#' ) {
+                    len--; buf++;
+                    if( strncmp("FORMAT_VERSION\t", buf, 15) == 0 ) {
+                        rc = parse_version(&buf[15], len - 15, &fver);
+                    } else if( strncmp("TYPE\t", buf, 5) == 0 ) {
+                        rc = str2buf(&buf[5], len - 5, type, sizeof(type));
+                    }
+                } else {
+                    rc = RC(rcRuntime, rcFile, rcConstructing, rcData, rcUnrecognized);
+                }
+            }
+        } while( rc == 0 && self->cg_file == NULL );
+        if( rc == 0 ) {
+            rc = CGLoaderFile_CreateCGFile(self, fver, type);
+
+            if( rc == 0 ) {
+                CGFileType* f = (CGFileType*)self->cg_file;
+                f->format_version = fver;
+                if( f->type == cg_eFileType_Unknown || !f->vt || !f->vt->header ) {
+                    rc = RC(rcRuntime, rcFile, rcConstructing, rcInterface, rcIncomplete);
+                }
+            }
+            if( rc == 0 ) {
+                /* we need to restart file for loading all header by sub class */
+                KLoaderFile_Reset(self->file);
+            }
+            while( rc == 0 ) {
+                if( (rc = CGLoaderFile_Readline(self, (const void**)&buf, &len)) == 0 ) {
+                    if( buf == NULL ) {
+                        rc = RC(rcRuntime, rcFile, rcConstructing, rcData, rcTooShort);
+                    } else if( len == 0 ) {
+                        /* empty line: skip */
+                    } else if( buf[0] == '>' ) {
+                        /* start of records */
+                        break;
+                    } else if( buf[0] == '#' ) {
+                        if( strncmp("FORMAT_VERSION\t", &buf[1], 15) != 0 && strncmp("TYPE\t", &buf[1], 5) != 0 ) {
+                            rc = cself->cg_file->vt->header(cself->cg_file, &buf[1], len - 1);
+                        }
+                    } else {
+                        rc = RC(rcRuntime, rcFile, rcConstructing, rcData, rcUnrecognized);
+                    }
+                }
+            }
+        }
+        /* close file after file is processed, but stay at data start */
+        KLoaderFile_SetReadAhead(self->file, self->read_ahead);
+        KLoaderFile_Close(self->file);
+    }
+
+    return rc;
+}
+
+rc_t CGLoaderFile_Make(const CGLoaderFile** cself, const KDirectory* dir, const char* filename,
+                       const uint8_t* md5_digest, bool read_ahead)
+{
+    rc_t rc = 0;
+    CGLoaderFile* obj = NULL;
+
+    if( cself == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcSelf, rcNull);
+    } else if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcConstructing, rcMemory, rcExhausted);
+    } else if( (rc = KLoaderFile_Make(&obj->file, dir, filename, md5_digest, false)) == 0 ) {
+        obj->read_ahead = read_ahead;
+    }
+    if( rc == 0 ) {
+        *cself = obj;
+    } else {
+        CGLoaderFile_Release(obj, true);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetType(const CGLoaderFile* cself, CG_EFileType* type)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || type == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcClassifying, rcParam, rcNull);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        *type = cself->cg_file->type;
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetRead(const CGLoaderFile* cself, TReadsData* data)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || data == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->type != cg_eFileType_READS ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( cself->cg_file->vt->reads == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcIncomplete);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->reads(cself->cg_file, data);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetStartRow(const CGLoaderFile* cself, int64_t* rowid)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || rowid == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->type != cg_eFileType_READS ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( cself->cg_file->vt->get_start_row == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcIncomplete);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->get_start_row(cself->cg_file, rowid);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetMapping(const CGLoaderFile* cself, TMappingsData* data)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || data == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->type != cg_eFileType_MAPPINGS ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( cself->cg_file->vt->mappings == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcIncomplete);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->mappings(cself->cg_file, data);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetEvidenceIntervals(const CGLoaderFile* cself, TEvidenceIntervalsData* data)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || data == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->type != cg_eFileType_EVIDENCE_INTERVALS ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( cself->cg_file->vt->evidence_intervals == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcIncomplete);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->evidence_intervals(cself->cg_file, data);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetEvidenceDnbs(const CGLoaderFile* cself, const char* interval_id, TEvidenceDnbsData* data)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || interval_id == NULL || data == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->type != cg_eFileType_EVIDENCE_DNBS ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( cself->cg_file->vt->evidence_dnbs == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcIncomplete);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->evidence_dnbs(cself->cg_file, interval_id, data);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetAssemblyId(const CGLoaderFile* cself, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || assembly_id == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->vt->assembly_id == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->assembly_id(cself->cg_file, assembly_id);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetSlide(const CGLoaderFile* cself, const CGFIELD_SLIDE_TYPE** slide)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || slide == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->vt->slide == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->slide(cself->cg_file, slide);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetLane(const CGLoaderFile* cself, const CGFIELD_LANE_TYPE** lane)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || lane == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->vt->lane == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->lane(cself->cg_file, lane);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetBatchFileNumber(const CGLoaderFile* cself, const CGFIELD_BATCH_FILE_NUMBER_TYPE** batch_file_number)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || batch_file_number == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->vt->batch_file_number == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->batch_file_number(cself->cg_file, batch_file_number);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetSample(const CGLoaderFile* cself, const CGFIELD_SAMPLE_TYPE** sample)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || sample == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->vt->sample == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->sample(cself->cg_file, sample);
+    }
+    return rc;
+}
+
+rc_t CGLoaderFile_GetChromosome(const CGLoaderFile* cself, const CGFIELD_CHROMOSOME_TYPE** chromosome)
+{
+    rc_t rc = 0;
+
+    if( cself == NULL || chromosome == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcParam, rcNull);
+    } else if( cself->cg_file->vt->chromosome == NULL ) {
+        rc = RC(rcRuntime, rcFile, rcReading, rcInterface, rcUnsupported);
+    } else if( (rc = CGLoaderFile_header(cself)) == 0 ) {
+        rc = cself->cg_file->vt->chromosome(cself->cg_file, chromosome);
+    }
+    return rc;
+}
diff --git a/tools/cg-load/file.h b/tools/cg-load/file.h
new file mode 100644
index 0000000..d9bc44a
--- /dev/null
+++ b/tools/cg-load/file.h
@@ -0,0 +1,330 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_file_h_
+#define _tools_cg_load_file_h_
+
+#include <kfs/file.h>
+#include <kfs/directory.h>
+
+#include <klib/container.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+
+#include "defs.h"
+#include "writer-seq.h"
+#include "writer-algn.h"
+#include "writer-evidence-intervals.h"
+#include "writer-evidence-dnbs.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <strtol.h>
+
+
+/* some usefull utils */
+/* strchr but in fixed size buffer (not asciiZ!) */
+static __inline__ const char* str_chr(const char* str, const size_t len, char sep)
+{
+    const char* end = str + len;
+    while( str < end ) {
+        if( *str == sep ) {
+            break;
+        }
+        str++;
+    }
+    return str == end ? NULL : str;
+}
+
+static __inline__
+rc_t str2buf(const char* str, const size_t len, char* buf, const size_t buf_sz)
+{
+    if( buf_sz <= len ) {
+        rc_t rc = RC(rcRuntime, rcString, rcCopying, rcBuffer, rcInsufficient);
+        if (rc != 0) {
+            PLOGERR(klogErr, (klogErr, rc,  "'$(str)': $(sz) <= $(len)",
+                "str=%.*s,sz=%lu,len=%lu", len, str, buf_sz, len));
+        }
+        return rc;
+    }
+    memcpy(buf, str, len);
+    buf[len] = '\0';
+    return 0;
+}
+
+static __inline__
+rc_t str2unsigned(const char* str, const size_t len, uint64_t max, uint64_t* value)
+{
+    char* end;
+    int64_t q;
+
+    if( len == 0 ) {
+        return RC(rcRuntime, rcString, rcConverting, rcData, rcTooShort);
+    }
+    q = strtou64(str, &end, 10);
+    if( end - str != len ) {
+        return RC(rcRuntime, rcString, rcConverting, rcData, rcInvalid);
+    }
+    if( q < 0 || ( uint64_t ) q > max ) {
+        return RC(rcRuntime, rcString, rcConverting, rcData, rcOutofrange);
+    }
+    *value = q;
+    return 0;
+}
+static __inline__
+rc_t str2u64(const char* str, const size_t len, uint64_t* value)
+{
+    rc_t rc;
+    uint64_t q;
+
+    if( (rc = str2unsigned(str, len, -1, &q)) == 0 ) {
+        *value = q;
+    }
+    return rc;
+}
+
+static __inline__
+rc_t str2signed(const char* str, const size_t len, int64_t min, int64_t max, int64_t* value)
+{
+    char* end;
+    int64_t q;
+
+    if( len == 0 ) {
+        return RC(rcRuntime, rcString, rcConverting, rcData, rcTooShort);
+    }
+    q = strtoi64(str, &end, 10);
+    if( end - str != len ) {
+        return RC(rcRuntime, rcString, rcConverting, rcData, rcInvalid);
+    }
+    if( q < min || q > max ) {
+        return RC(rcRuntime, rcString, rcConverting, rcData, rcOutofrange);
+    }
+    *value = q;
+    return 0;
+}
+static __inline__
+rc_t str2i64(const char* str, const size_t len, int64_t* value)
+{
+    rc_t rc;
+    int64_t q;
+
+#if _ARCH_BITS == 32
+    if( (rc = str2signed(str, len, -0x7FFFFFFFFFFFFFFFLL, 0x7FFFFFFFFFFFFFFFLL, &q)) == 0 ) {
+        *value = q;
+    }
+#else
+    if( (rc = str2signed(str, len, -0x7FFFFFFFFFFFFFFFL, 0x7FFFFFFFFFFFFFFFL, &q)) == 0 ) {
+        *value = q;
+    }
+#endif
+    return rc;
+}
+static __inline__
+rc_t str2i32(const char* str, const size_t len, int32_t* value)
+{
+    rc_t rc;
+    int64_t q;
+
+    if( (rc = str2signed(str, len, -0x7FFFFFFF - 1, 0x7FFFFFFF, &q)) == 0 ) {
+        *value = ( int32_t ) q;
+    }
+    return rc;
+}
+static __inline__
+rc_t str2u32(const char* str, const size_t len, uint32_t* value)
+{
+    rc_t rc;
+    uint64_t q;
+
+    if( (rc = str2unsigned(str, len, 0xFFFFFFFF, &q)) == 0 ) {
+        *value = ( uint32_t ) q;
+    }
+    return rc;
+}
+static __inline__
+rc_t str2i16(const char* str, const size_t len, int16_t* value)
+{
+    rc_t rc;
+    int64_t q;
+
+    if( (rc = str2signed(str, len, -0x7FFF - 1, 0x7FFF, &q)) == 0 ) {
+        *value = ( int16_t ) q;
+    }
+    return rc;
+}
+static __inline__
+rc_t str2u16(const char* str, const size_t len, uint16_t* value)
+{
+    rc_t rc;
+    uint64_t q;
+
+    if( (rc = str2unsigned(str, len, 0xFFFF, &q)) == 0 ) {
+        *value = ( uint16_t ) q;
+    }
+    return rc;
+}
+#define CG_LINE_START(file, buf, len, res) \
+    do { \
+        const char* buf, *res; \
+        size_t len; \
+        if( (rc = CGLoaderFile_Readline(file, (const void**)&buf, &len)) != 0 ) { \
+            break; \
+        } \
+        res = buf - 1;
+
+#define CG_LINE_NEXT_FIELD(buf, len, res) \
+    if( rc != 0 ) { \
+        break; \
+    } else { \
+        len -= ++res - buf; \
+        buf = res; \
+        if( (res = str_chr(buf, len, '\t')) == NULL ) { \
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcCorrupt); \
+            break; \
+        } \
+    }
+
+#define CG_LINE_LAST_FIELD(buf, len, res) \
+    if( rc != 0 ) { \
+        break; \
+    } else { \
+        len -= ++res - buf; \
+        buf = res; \
+        res = buf + len; \
+        if( str_chr(buf, len, '\t') != NULL ) { \
+            rc = RC(rcRuntime, rcFile, rcReading, rcData, rcCorrupt); \
+            break; \
+        } \
+    }
+
+#define CG_LINE_END() \
+    } while(false)
+
+#ifndef CGFILETYPE_IMPL
+#define CGFILETYPE_IMPL CGFileType
+#endif
+
+typedef struct CGFileType CGFileType;
+
+typedef struct CGFileType_vt_struct {
+    rc_t ( CC *header ) (const CGFILETYPE_IMPL* self, const char* buf, const size_t len);
+
+    rc_t ( CC *reads ) (const CGFILETYPE_IMPL* cself, TReadsData* data);
+    rc_t ( CC *get_start_row ) (const CGFILETYPE_IMPL* cself, int64_t* rowid);
+    rc_t ( CC *mappings ) (const CGFILETYPE_IMPL* cself, TMappingsData* data);
+    rc_t ( CC *evidence_intervals )(const CGFILETYPE_IMPL* cself, TEvidenceIntervalsData* data);
+    rc_t ( CC *evidence_dnbs )(const CGFILETYPE_IMPL* cself, const char* interval_id, TEvidenceDnbsData* data);
+
+    rc_t ( CC *assembly_id) (const CGFILETYPE_IMPL* self, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id);
+    rc_t ( CC *slide) (const CGFILETYPE_IMPL* self, const CGFIELD_SLIDE_TYPE** slide);
+    rc_t ( CC *lane) (const CGFILETYPE_IMPL* self, const CGFIELD_LANE_TYPE** lane);
+    rc_t ( CC *batch_file_number) (const CGFILETYPE_IMPL* self, const CGFIELD_BATCH_FILE_NUMBER_TYPE** batch_file_number);
+    rc_t ( CC *sample) (const CGFILETYPE_IMPL* self, const CGFIELD_SAMPLE_TYPE** sample);
+    rc_t ( CC *chromosome) (const CGFILETYPE_IMPL* self, const CGFIELD_CHROMOSOME_TYPE** chromosome);
+
+    void ( CC *destroy ) (const CGFILETYPE_IMPL* self, uint64_t* records);
+} CGFileType_vt;
+
+struct CGFileType {
+    uint32_t format_version;
+    CG_EFileType type;
+    const CGFileType_vt* vt;
+};
+
+typedef struct CGLoaderFile
+{
+    bool read_ahead;
+    const struct KLoaderFile *file;
+    const CGFileType* cg_file;
+} CGLoaderFile;
+
+typedef struct CGFileTypeFactory {
+    const char* name;
+    CG_EFileType type;
+    rc_t ( CC *make ) (const CGFileType** self, const CGLoaderFile* file);
+} CGFileTypeFactory;
+
+rc_t CGLoaderFile_Make(const CGLoaderFile **cself, const KDirectory* dir, const char* filename,
+                       const uint8_t* md5_digest, bool read_ahead);
+
+rc_t CGLoaderFile_Release(const CGLoaderFile* cself, bool ignored);
+
+/* returns true if eof is reached and buffer is empty */
+rc_t CGLoaderFile_IsEof(const CGLoaderFile* cself, bool* eof);
+
+/* closes the underlying file */
+rc_t CGLoaderFile_Close(const CGLoaderFile* cself);
+
+/* returns current 1-based line number in file */
+rc_t CGLoaderFile_Line(const CGLoaderFile* cself, uint64_t* line);
+
+rc_t CGLoaderFile_Filename(const CGLoaderFile *cself, const char** name);
+
+rc_t CGLoaderFile_LOG(const CGLoaderFile* cself, KLogLevel lvl, rc_t rc, const char *msg, const char *fmt, ...);
+
+rc_t CGLoaderFile_GetType(const CGLoaderFile* cself, CG_EFileType* type);
+
+rc_t CGLoaderFile_GetRead(const CGLoaderFile* cself, TReadsData* data);
+rc_t CGLoaderFile_GetStartRow(const CGLoaderFile* cself, int64_t* rowid);
+
+rc_t CGLoaderFile_GetMapping(const CGLoaderFile* cself, TMappingsData* data);
+
+rc_t CGLoaderFile_GetEvidenceIntervals(const CGLoaderFile* cself, TEvidenceIntervalsData* data);
+
+rc_t CGLoaderFile_GetEvidenceDnbs(const CGLoaderFile* cself, const char* interval_id, TEvidenceDnbsData* data);
+
+rc_t CGLoaderFile_GetAssemblyId(const CGLoaderFile* cself, const CGFIELD_ASSEMBLY_ID_TYPE** assembly_id);
+rc_t CGLoaderFile_GetSlide(const CGLoaderFile* cself, const CGFIELD_SLIDE_TYPE** slide);
+rc_t CGLoaderFile_GetLane(const CGLoaderFile* cself, const CGFIELD_LANE_TYPE** lane);
+rc_t CGLoaderFile_GetBatchFileNumber(const CGLoaderFile* cself, const CGFIELD_BATCH_FILE_NUMBER_TYPE** batch_file_number);
+rc_t CGLoaderFile_GetSample(const CGLoaderFile* cself, const CGFIELD_SAMPLE_TYPE** sample);
+rc_t CGLoaderFile_GetChromosome(const CGLoaderFile* cself, const CGFIELD_CHROMOSOME_TYPE** chromosome);
+
+
+/* Readline
+ *  makes next line from a file available in buffer.
+ *  eligable EOL symbols are: \n (unix), \r (older mac), \r\n (win)
+ *  EOL symbol(s) never included in buffer length.
+ *  line is \0 terminated.
+ *  if there is no EOL at EOF - not an error.
+ *  fails if internal buffer is insufficient.
+ *  buffer is NULL on EOF
+ *  rc state of (rcString rcTooLong) means line was too long
+ *              you may copy line and readline again for the tail of the line
+ *
+ *  "buffer" [ OUT ] and "length" [ OUT ] - returned line and it's length
+ */
+rc_t CGLoaderFile_Readline(const CGLoaderFile* cself, const void** buffer, size_t* length);
+
+rc_t CGLoaderFile_CreateCGFile(CGLoaderFile* self,
+    uint32_t FORMAT_VERSION, const char* TYPE);
+
+rc_t CGLoaderFileMakeCGFileType(const CGLoaderFile* self, const char* type,
+    const CGFileTypeFactory* factory, size_t factories,
+    const CGFileType** ftype);
+
+#endif /* _tools_cg_load_file_h_ */
diff --git a/tools/cg-load/writer-algn.c b/tools/cg-load/writer-algn.c
new file mode 100644
index 0000000..cb025dc
--- /dev/null
+++ b/tools/cg-load/writer-algn.c
@@ -0,0 +1,775 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+#include <klib/sort.h>
+#include <kfs/file.h>
+#include <insdc/insdc.h>
+#include <align/dna-reverse-cmpl.h>
+
+#include "defs.h"
+#include "writer-algn.h"
+#include "debug.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <math.h>
+#include <assert.h>
+
+typedef struct CGWriterAlgn_match_struct {
+    /* filled out by ReferenceMgr_Compress */
+    INSDC_coord_zero read_start;
+    INSDC_coord_len read_len;
+    bool has_ref_offset[CG_READS_SPOT_LEN];
+    int32_t ref_offset[CG_READS_SPOT_LEN];
+    bool has_mismatch[CG_READS_SPOT_LEN];
+    char mismatch[CG_READS_SPOT_LEN];
+    int64_t ref_id;
+    INSDC_coord_zero ref_start;
+    /* fill oud here */
+    int64_t seq_spot_id;
+    INSDC_coord_one seq_read_id;
+    bool ref_orientation;
+    uint32_t mapq;
+    /* used only only in secondary */
+    bool mate_ref_orientation;
+    int64_t mate_ref_id;
+    INSDC_coord_zero mate_ref_pos;
+    INSDC_coord_zero template_len;
+    INSDC_coord_len ref_len;
+} CGWriterAlgn_match;
+
+struct CGWriterAlgn {
+    const ReferenceMgr* rmgr;
+    const TableWriterAlgn* primary;
+    const TableWriterAlgn* secondary;
+    TableWriterAlgnData algn[CG_MAPPINGS_MAX];
+    CGWriterAlgn_match match[CG_MAPPINGS_MAX];
+    TMappingsData data;
+    uint32_t min_mapq;
+    bool single_mate;
+    uint64_t forced_pairs_cnt;
+    uint64_t dropped_mates_cnt;
+};
+    
+
+static uint32_t global_cluster_size;
+
+rc_t CGWriterAlgn_Make(const CGWriterAlgn** cself, TMappingsData** data, VDatabase* db, const ReferenceMgr* rmgr,
+                       uint32_t min_mapq, bool single_mate, uint32_t cluster_size)
+{
+    rc_t rc = 0;
+    CGWriterAlgn* self;
+
+    if( cself == NULL || db == NULL ) {
+        return RC(rcExe, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    self = calloc(1, sizeof(*self));
+    if( self == NULL ) {
+        rc = RC(rcExe, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+    } else {
+        if( (rc = TableWriterAlgn_Make(&self->primary, db,
+                            ewalgn_tabletype_PrimaryAlignment, ewalgn_co_SEQ_SPOT_ID | ewalgn_co_unsorted)) != 0 ){
+            LOGERR(klogErr, rc, "primary alignment table");
+        } else if( (rc = TableWriterAlgn_Make(&self->secondary, db,
+                            ewalgn_tabletype_SecondaryAlignment, ewalgn_co_SEQ_SPOT_ID | ewalgn_co_unsorted)) != 0 ) {
+            LOGERR(klogErr, rc, "secondary alignment table");
+        } else {
+            int i;
+            /* interconnect buffers */
+            for(i = 0; i < CG_MAPPINGS_MAX; i++) {
+                self->algn[i].seq_spot_id.buffer = &self->match[i].seq_spot_id;
+                self->algn[i].seq_spot_id.elements = 1;
+                
+                self->algn[i].seq_read_id.buffer = &self->match[i].seq_read_id;
+                self->algn[i].seq_read_id.elements = 1;
+
+                self->algn[i].read_start.buffer = &self->match[i].read_start;
+                
+                self->algn[i].read_len.buffer = &self->match[i].read_len;
+                
+                self->algn[i].has_ref_offset.buffer = self->match[i].has_ref_offset;
+                
+                self->algn[i].ref_offset.buffer = self->match[i].ref_offset;
+                
+                self->algn[i].ref_id.buffer = &self->match[i].ref_id;
+                
+                self->algn[i].ref_start.buffer = &self->match[i].ref_start;
+                
+                self->algn[i].has_mismatch.buffer = self->match[i].has_mismatch;
+                
+                self->algn[i].mismatch.buffer = self->match[i].mismatch;
+                
+                self->algn[i].ref_orientation.buffer = &self->match[i].ref_orientation;
+                self->algn[i].ref_orientation.elements = 1;
+                
+                self->algn[i].mapq.buffer = &self->match[i].mapq;
+                self->algn[i].mapq.elements = 1;
+                
+                self->algn[i].mate_ref_orientation.buffer = &self->match[i].mate_ref_orientation;
+                self->algn[i].mate_ref_orientation.elements = 1;
+                
+                self->algn[i].mate_ref_id.buffer = &self->match[i].mate_ref_id;
+                self->algn[i].mate_ref_id.elements = 1;
+                
+                self->algn[i].mate_ref_pos.buffer = &self->match[i].mate_ref_pos;
+                self->algn[i].mate_ref_pos.elements = 1;
+                
+                self->algn[i].template_len.buffer = &self->match[i].template_len;
+                self->algn[i].template_len.elements = 1;
+            }
+            self->rmgr = rmgr;
+            self->min_mapq = min_mapq;
+            self->single_mate = single_mate;
+            global_cluster_size = cluster_size;
+            *data = &self->data;
+        }
+    }
+    if( rc == 0 ) {
+        *cself = self;
+    } else {
+        CGWriterAlgn_Whack(self, false, NULL, NULL);
+    }
+    return rc;
+}
+
+rc_t CGWriterAlgn_Whack(const CGWriterAlgn* cself, bool commit, uint64_t* rows_1st, uint64_t* rows_2nd)
+{
+    rc_t rc = 0;
+    if( cself != NULL ) {
+        CGWriterAlgn* self = (CGWriterAlgn*)cself;
+        rc_t rc1 = TableWriterAlgn_Whack(cself->primary, commit, rows_1st);
+        rc_t rc2 = TableWriterAlgn_Whack(cself->secondary, commit, rows_2nd);
+        if( self->forced_pairs_cnt > 0 ) {
+            PLOGMSG(klogInfo, (klogInfo, "$(forced_pairs_cnt) forced pairs to PRIMARY", "forced_pairs_cnt=%lu", self->forced_pairs_cnt));
+        }
+        if( self->dropped_mates_cnt > 0 ) {
+            PLOGMSG(klogInfo, (klogInfo, "$(dropped_mates_cnt) dropped duplicate mates in SECONDARY", "dropped_mates_cnt=%lu", self->dropped_mates_cnt));
+        }
+        rc = rc1 ? rc1 : rc2;
+        free(self);
+    }
+    return rc;
+}
+
+static
+rc_t CGWriterAlgn_Save(CGWriterAlgn *const self,
+                       TReadsData *const rd,
+                       TableWriterAlgn const *const writer,
+                       uint32_t const mate,
+                       int64_t *const rowid)
+{
+    rc_t rc = 0;
+    TMappingsData_map *const map = &self->data.map[mate];
+
+    if( !map->saved ) {
+        CGWriterAlgn_match *const match = &self->match[mate];
+        TableWriterAlgnData *const algn = &self->algn[mate];
+        uint32_t* cigar, g;
+        uint32_t left_cigar[] = { 5 << 4, 0, 10 << 4, 0, 10 << 4, 0, 10 << 4 };
+        uint32_t right_cigar[] = { 10 << 4, 0, 10 << 4, 0, 10 << 4, 0, 5 << 4 };
+        const uint32_t read_len = CG_READS_SPOT_LEN / 2;
+        const char* read;
+
+        if (match->seq_read_id == 2) {
+            read = &((const char*)(rd->seq.sequence.buffer))[read_len];
+            cigar = right_cigar;
+            g = CG_READS_SPOT_LEN / 2;
+        }
+        else {
+            read = rd->seq.sequence.buffer;
+            cigar = left_cigar;
+            g = 0;
+        }
+        if (match->ref_orientation) {
+            if( rd->reverse[g] == '\0' ) {
+                if( (rc = DNAReverseCompliment(read, &rd->reverse[g], read_len)) != 0) {
+                    return rc;
+                }
+                DEBUG_MSG(10, ("'%.*s' -> cg_eRevDnbStrand: '%.*s'\n", read_len, read, read_len, &rd->reverse[g]));
+            }
+            read = &rd->reverse[g];
+            cigar = (cigar == left_cigar) ? right_cigar : left_cigar;
+        }
+        for(g = 0; g < CG_READS_NGAPS; g++) {
+            if( map->gap[g] > 0 ) {
+                cigar[g * 2 + 1] = (map->gap[g] << 4) | 2; /* 'xN' */
+            } else if( map->gap[g] < 0 ) {
+                cigar[g * 2 + 1] = (-map->gap[g] << 4) | 9; /* 'xB' */
+            } else {
+                cigar[g * 2 + 1] = 0; /* '0M' */
+            }
+        }
+        algn->ploidy = 0;
+        if( (rc = ReferenceMgr_Compress(self->rmgr, ewrefmgr_cmp_Binary,
+                    map->chr, map->offset, read, read_len, cigar, 7, 0, NULL, 0, 0, NULL, 0, algn)) != 0 ) {
+            PLOGERR(klogErr, (klogErr, rc, "compression failed $(id) $(o)",
+                    PLOG_2(PLOG_S(id),PLOG_I32(o)), map->chr, map->offset));
+        }
+        else {
+#if 1
+            /* this is to try represent these alignments as unmated to match cgatools
+             * axf uses the row length of MATE_REF_ORIENTATION as the indicator of 
+             * mate presence
+             */
+            unsigned const save = algn->mate_ref_orientation.elements;
+            
+            if (map->mate == mate)
+                algn->mate_ref_orientation.elements = 0;
+            
+            rc = TableWriterAlgn_Write(writer, algn, rowid);
+            
+            if (map->mate == mate)
+                algn->mate_ref_orientation.elements = save;
+#else
+            rc = TableWriterAlgn_Write(writer, algn, rowid);
+#endif
+            map->saved = true;
+        }
+    }
+    return rc;
+}
+
+#if 1
+static
+double JointQ(double const Q1, double const Q2)
+{
+    double const P1 =   1.0 - pow(10.0, Q1/-10.0);  /* prob that  1  is not incorrect */
+    double const P2 =   1.0 - pow(10.0, Q2/-10.0);  /* prob that  2  is not incorrect */
+    double const Pj =   1.0 - P1*P2;                /* prob that 1+2   is   incorrect */
+    double const Q  = -10.0 * log10(Pj);
+    
+    return Q;
+}
+
+static
+unsigned FindBestPair(TMappingsData *const data)
+{
+    unsigned const N = data->map_qty;
+    unsigned i;
+    double maxq;
+    unsigned best = N;
+    
+    /* pick best of the reciprocal pairs */
+    for (i = 0, maxq = -1.0; i != N; ++i) {
+        unsigned const mate = data->map[i].mate;
+        bool const is_left = (data->map[i].flags & cg_eRightHalfDnbMap) == 0;
+        
+        if (mate < N && mate != i && data->map[mate].mate == i && is_left) {
+            double const Q1 = (int)data->map[i].weight - 33;
+            double const Q2 = (int)data->map[mate].weight - 33;
+            double const q = JointQ(Q1, Q2);
+
+            assert(Q1 >= 0);
+            assert(Q2 >= 0);
+            assert(q >= 0);
+            if (maxq < q) {
+                maxq = q;
+                best = i;
+            }
+        }
+    }
+    if (best < N)
+        return best;
+    
+    /* no reciprocal pairs, pick best of any pair */
+    for (i = 0, maxq = 0.0; i != N; ++i) {
+        unsigned const mate = data->map[i].mate;
+        if (mate < N && mate != i) {
+            double const Q1 = (int)data->map[i].weight - 33;
+            double const Q2 = (int)data->map[mate].weight - 33;
+            double const q = JointQ(Q1, Q2);
+            
+            assert(Q1 >= 0);
+            assert(Q2 >= 0);
+            assert(q >= 0);
+            if (maxq < q) {
+                maxq = q;
+                best = i;
+            }
+        }
+    }
+    if (best == N) {
+        /* no pair with a joint Q > 0; pick best mapping */
+        for (i = 0, maxq = 0.0; i != N; ++i) {
+            unsigned const mate = data->map[i].mate;
+            if (mate < N && mate != i) {
+                double const q = (int)data->map[i].weight - 33;
+                
+                if (maxq < q) {
+                    maxq = q;
+                    best = i;
+                }
+            }
+        }
+        if (best == N) {
+            /* no mapping with Q > 0; pick first */
+            for (i = 0, maxq = 0.0; i != N; ++i) {
+                unsigned const mate = data->map[i].mate;
+                if (mate < N && mate != i) {
+                    best = i;
+                    break;
+                }
+            }
+            if (best == N) {
+                /* give up */
+                return N;
+            }
+        }
+    }
+    {
+        /* make the pair reciprocal */
+        unsigned const mate = data->map[best].mate;
+        
+        if (mate < N) {
+            data->map[mate].mate = best;
+            return (data->map[best].flags & cg_eRightHalfDnbMap) ? mate : best;
+        }
+        return N;
+    }
+}
+
+static
+unsigned FindBestLeft(TMappingsData *const data)
+{
+    unsigned const N = data->map_qty;
+    unsigned i;
+    unsigned best;
+    int maxq;
+    
+    for (best = N, maxq = -1, i = 0; i != N; ++i) {
+        int const q = (int)data->map[i].weight;
+        
+        if ((data->map[i].flags & cg_eRightHalfDnbMap) == 0 && maxq < q) {
+            maxq = q;
+            best = i;
+        }
+    }
+    return best;
+}
+
+static
+unsigned FindBestRight(TMappingsData *const data)
+{
+    unsigned const N = data->map_qty;
+    unsigned i;
+    unsigned best;
+    int maxq;
+    
+    for (best = N, maxq = -1, i = 0; i != N; ++i) {
+        int const q = (int)data->map[i].weight;
+        
+        if ((data->map[i].flags & cg_eRightHalfDnbMap) != 0 && maxq < q) {
+            maxq = q;
+            best = i;
+        }
+    }
+    return best;
+}
+
+static
+bool check_in_cluster(TMappingsData_map const *const a, TMappingsData_map const *const b)
+{
+	if (   (a->flags & cg_eRightHalfDnbMap) == (b->flags & cg_eRightHalfDnbMap)
+        && (strcmp(a->chr, b->chr) == 0)
+        && abs((int)a->offset - (int)b->offset) <= global_cluster_size)
+    {
+        return true;
+	}
+	return false;
+}
+
+static
+int clustering_sort_cb(void const *const A, void const *const B, void *const ctx)
+{
+    TMappingsData const *const data = (TMappingsData const *)ctx;
+    unsigned const ia = *(unsigned const *)A;
+    unsigned const ib = *(unsigned const *)B;
+    TMappingsData_map const *const a = &data->map[ia];
+    TMappingsData_map const *const b = &data->map[ib];
+    int res;
+    
+	res = (int)(a->flags & cg_eRightHalfDnbMap) - (int)(b->flags & cg_eRightHalfDnbMap); /**** separate by DNP side ***/
+	if (res) return res;
+    
+    res = strcmp(a->chr, b->chr); /* same chromosome ? **/
+	if (res) return res;
+    
+	res = (a->offset - b->offset) / (global_cluster_size + 1); /***  is it within the range ***/
+	if (res) return res;
+    
+	/**cluster is defined here; now pick the winner **/
+	res = (int)a->saved - (int)b->saved; /*** if already saved **/
+	if (res) return -res;
+    
+	res = (int)a->weight - (int)b->weight; /*** has  higher score **/
+	if (res) return -res;
+    
+	res = (int)(a->gap[0] + a->gap[1] + a->gap[2])
+    - (int)(b->gap[0] + b->gap[1] + b->gap[2]); /** has lower projection on the reference **/
+    return res;
+}
+
+static
+void cluster_mates(TMappingsData *const data)
+{
+    unsigned index[CG_MAPPINGS_MAX];
+    unsigned i;
+    unsigned j;
+    
+    for (i = 0; i != data->map_qty; ++i)
+        index[i] = i;
+    
+    ksort(index, data->map_qty, sizeof(index[0]), clustering_sort_cb, data);
+    for (i = 0, j = 1; j != data->map_qty; ++j) {
+        unsigned const ii = index[i];
+        unsigned const ij = index[j];
+        TMappingsData_map *const a = &data->map[ij];
+        TMappingsData_map const *const b = &data->map[ii];
+        
+        if (check_in_cluster(a, b)) {
+            unsigned const a_mate = a->mate;
+            unsigned const b_mate = b->mate;
+            
+            if (   a_mate == ij /** remove singletons **/
+                || a_mate == b_mate) /** or cluster originator has the same mate **/
+            {
+                a->saved = true;
+                DEBUG_MSG(10, ("mapping %u was dropped as a part of cluster at mapping %u\n", ij, ii));
+            }
+        }
+        else
+            i = j;
+    }
+}
+
+static
+INSDC_coord_zero template_length(unsigned const self_left,
+                                 unsigned const mate_left,
+                                 unsigned const self_len,
+                                 unsigned const mate_len,
+                                 unsigned const read_id)
+{
+    /* adapted from libs/axf/template_len.c */
+    unsigned const self_right = self_left + self_len;
+    unsigned const mate_right = mate_left + mate_len;
+    unsigned const  leftmost  = (self_left  < mate_left ) ? self_left  : mate_left;
+    unsigned const rightmost  = (self_right > mate_right) ? self_right : mate_right;
+    unsigned const tlen = rightmost - leftmost;
+    
+    /* The standard says, "The leftmost segment has a plus sign and the rightmost has a minus sign." */
+    if (   (self_left <= mate_left && self_right >= mate_right)     /* mate fully contained within self or */
+        || (mate_left <= self_left && mate_right >= self_right))    /* self fully contained within mate; */
+    {
+        if (self_left < mate_left || (read_id == 1 && self_left == mate_left))
+            return (INSDC_coord_zero)tlen;
+        else
+            return -(INSDC_coord_zero)tlen;
+    }
+    else if (   (self_right == mate_right && mate_left == leftmost) /* both are rightmost, but mate is leftmost */
+             ||  self_right == rightmost)
+    {
+        return -(INSDC_coord_zero)tlen;
+    }
+    else
+        return (INSDC_coord_zero)tlen;
+}
+
+static
+rc_t CGWriterAlgn_Write_int(CGWriterAlgn *const self, TReadsData *const read)
+{
+    TMappingsData *const data = &self->data;
+    unsigned const N = data->map_qty;
+    rc_t rc = 0;
+
+    if (N != 0) {
+        unsigned left_prime = N;
+        unsigned right_prime = N;
+        unsigned i;
+        unsigned countLeft  = 0;
+        unsigned countRight = 0;
+        
+        for (i = 0; i != N; ++i) {
+            char const *const refname = data->map[i].chr;
+            unsigned j;
+            INSDC_coord_len reflen = 35;
+            ReferenceSeq const *rseq;
+            
+            memset(&self->match[i], 0, sizeof(self->match[i]));
+            
+            rc = ReferenceMgr_GetSeq(self->rmgr, &rseq, refname);
+            if (rc) {
+                (void)PLOGERR(klogErr, (klogErr, rc, "Failed accessing Reference '$(ref)'", "ref=%s", refname));
+                break;
+            }
+            rc = ReferenceSeq_Get1stRow(rseq, &self->match[i].ref_id); /* if the above worked, this is infallible */
+            assert(rc == 0);
+            ReferenceSeq_Release(rseq);
+            
+            for (j = 0; j != CG_READS_NGAPS; ++j)
+                reflen += data->map[i].gap[j];
+            
+            self->match[i].seq_spot_id = read->rowid;
+            self->match[i].mapq = data->map[i].weight - 33;
+            self->match[i].ref_orientation = (data->map[i].flags & cg_eRevDnbStrand) ? true : false;
+            self->match[i].ref_len = reflen;
+            
+            if (data->map[i].flags & cg_eRightHalfDnbMap) {
+                self->match[i].seq_read_id = 2;
+                ++countRight;
+            }
+            else {
+                self->match[i].seq_read_id = 1;
+                ++countLeft;
+            }
+        }
+
+        if (countLeft > 0 && countRight > 0) {
+            left_prime = FindBestPair(data);
+            if (left_prime < N) {
+                right_prime = data->map[left_prime].mate;
+            }
+            else { /* force the pairing */
+                left_prime = FindBestLeft(data);
+                right_prime = FindBestRight(data);
+                data->map[left_prime].mate = right_prime;
+                data->map[right_prime].mate = left_prime;
+            }
+            for (i = 0; i != N; ++i) {
+                unsigned const mate = data->map[i].mate;
+                
+                if (mate < N && mate != i) {
+                    INSDC_coord_zero const tlen = (self->match[i].ref_id == self->match[mate].ref_id)
+                                                ? template_length(data->map[i].offset,
+                                                                  data->map[mate].offset,
+                                                                  self->match[i].ref_len,
+                                                                  self->match[mate].ref_len,
+                                                                  self->match[i].seq_read_id)
+                                                : 0;
+
+                    self->match[i].mate_ref_id = self->match[mate].ref_id;
+                    self->match[i].mate_ref_orientation = self->match[mate].ref_orientation;
+                    self->match[i].mate_ref_pos = data->map[mate].offset;
+                    self->match[i].template_len = tlen;
+                }
+            }
+        }
+        else if (countLeft > 0) {
+            left_prime = FindBestLeft(data);
+        }
+        else {
+            assert(countRight > 0);
+            right_prime = FindBestRight(data);
+        }
+        
+        read->align_count[0] = countLeft  < 254 ? countLeft  : 255;
+        read->align_count[1] = countRight < 254 ? countRight : 255;
+        if (rc == 0 && left_prime < N) {
+            rc = CGWriterAlgn_Save(self, read, self->primary, left_prime,
+                                   &read->prim_algn_id[0]);
+            read->prim_is_reverse[0] = self->match[left_prime].ref_orientation;
+            data->map[left_prime].saved = 1;
+        }
+        if (rc == 0 && right_prime < N) {
+            rc = CGWriterAlgn_Save(self, read, self->primary, right_prime,
+                                   &read->prim_algn_id[1]);
+            read->prim_is_reverse[1] = self->match[right_prime].ref_orientation;
+            data->map[right_prime].saved = 1;
+        }
+        if (global_cluster_size > 0 && data->map_qty > 1 + (left_prime < N ? 1 : 0) + (right_prime < N ? 1 : 0)) {
+            cluster_mates(data);
+        }
+        for (i = 0; i != N && rc == 0; ++i) {
+            if (data->map[i].saved || self->match[i].mapq < self->min_mapq)
+                continue;
+            rc = CGWriterAlgn_Save(self, read, self->secondary, i, NULL);
+        }
+    }
+    return rc;
+}
+
+rc_t CGWriterAlgn_Write(const CGWriterAlgn* cself, TReadsData* read)
+{
+    assert(cself != NULL);
+    assert(read != NULL);
+    assert(read->seq.sequence.buffer != NULL && read->seq.sequence.elements == CG_READS_SPOT_LEN);
+    
+    memset(read->prim_algn_id, 0, sizeof(read->prim_algn_id));
+    memset(read->align_count, 0, sizeof(read->align_count));
+    memset(read->prim_is_reverse, 0, sizeof(read->prim_is_reverse));
+    
+    return CGWriterAlgn_Write_int((CGWriterAlgn *)cself, read);
+}
+
+#else
+
+rc_t CGWriterAlgn_Write(const CGWriterAlgn* cself, TReadsData* read)
+{
+    if( cself->data.map_qty != 0 ) {
+        /* primary is-found indicator: weights are ASCII-33 so they can't be 0 if found */
+        uint8_t left_weight = 0, right_weight = 0, pair_weight = 0;
+        uint32_t i, left_prim = 0, right_prim = 0, paired = 0;
+
+        CGWriterAlgn* self = (CGWriterAlgn*)cself;
+        TMappingsData* data = &self->data;
+
+        /* find best left, right and pair */
+        for(i = 0; i < data->map_qty; i++) {
+            int k = (data->map[i].flags & cg_eRightHalfDnbMap) ? 1 : 0;
+            if( read->align_count[k] < 254 ) {
+                read->align_count[k]++;
+            }
+            if( k == 0 ) {
+                if( left_weight < data->map[i].weight ) {
+                    left_prim = i;
+                    left_weight = data->map[i].weight;
+                }
+            } else {
+                if( right_weight < data->map[i].weight ) {
+                    right_prim = i;
+                    right_weight = data->map[i].weight;
+                }
+            }
+            if( i != data->map[i].mate && pair_weight < data->map[i].weight ) {
+                if( data->map[i].mate < data->map_qty ) {
+                    /* note pair's left mate id */
+                    paired = k == 0 ? i : data->map[i].mate;
+                    pair_weight = data->map[i].weight;
+                } else {
+                    /* fail safe in case mate id is out of map boundaries */
+                    data->map[i].mate = i;
+                }
+            }
+        }
+        /* choose primary pair */
+        if( left_weight > right_weight && data->map[left_prim].mate != left_prim ) {
+            /* left is better and has a mate -> choose left pair */
+            right_prim = data->map[left_prim].mate;
+            right_weight = data->map[right_prim].weight;
+        } else if( right_weight > left_weight && data->map[right_prim].mate != right_prim ) {
+            /* right is better and has a mate -> choose right pair */
+            left_prim = data->map[right_prim].mate;
+            left_weight = data->map[left_prim].weight;
+        } else if( pair_weight > 0 ) {
+            /* use paired as primary */
+            left_prim = paired;
+            left_weight = data->map[left_prim].weight;
+            right_prim = data->map[left_prim].mate;
+            right_weight = data->map[right_prim].weight;
+        } else if( left_weight > 0 && right_weight > 0 ) {
+            /* force best left and right to be mates */
+            data->map[left_prim].mate = right_prim;
+            data->map[right_prim].mate = left_prim;
+            self->forced_pairs_cnt++;
+            DEBUG_MSG(10, ("forced pair: %u %u\n", left_prim, right_prim));
+        }
+#if _DEBUGGING
+        DEBUG_MSG(10, ("alignment_count [%hu,%hu]", read->align_count[0], read->align_count[1]));
+        DEBUG_MSG(10, (" left primary: "));
+        if( left_weight > 0 ) {
+            DEBUG_MSG(10, ("weight %hu [%c], id %u", left_weight, left_weight, left_prim));
+        } else {
+            DEBUG_MSG(10, ("none"));
+        }
+        DEBUG_MSG(10, ("; right primary: "));
+        if( right_weight > 0 ) {
+            DEBUG_MSG(10, ("weight %hu [%c], id %u", right_weight, right_weight, right_prim));
+        } else {
+            DEBUG_MSG(10, ("none"));
+        }
+        DEBUG_MSG(10, ("\n"));
+#endif
+        assert((left_weight == 0 && read->align_count[0] == 0) || (left_weight > 0 && read->align_count[0] > 0));
+        assert((right_weight == 0 && read->align_count[1] == 0) || (right_weight > 0 && read->align_count[1] > 0));
+
+        /* write left primary */
+        if( rc == 0 && left_weight > 0 ) {
+            rc = CGWriterAlgn_Save(self, read, self->primary, left_prim, &read->prim_algn_id[0]);
+            read->prim_is_reverse[0] = cself->match[left_prim].ref_orientation;
+        }
+        /* write right primary */
+        if( rc == 0 && right_weight > 0 ) {
+            rc = CGWriterAlgn_Save(self, read, self->primary, right_prim, &read->prim_algn_id[1]);
+            read->prim_is_reverse[1] = cself->match[right_prim].ref_orientation;
+        }
+        DEBUG_MSG(10, ("prim_algn_rowid [%li,%li], ", read->prim_algn_id[0], read->prim_algn_id[1]));
+        DEBUG_MSG(10, ("prim_is_reverse [%hu,%hu]\n", read->prim_is_reverse[0], read->prim_is_reverse[1]));
+        if( rc == 0 ) {
+            /* others go to secondary */
+            int64_t row;
+            
+            rc = TableWriterAlgn_GetNextRowId(cself->secondary, &row);
+            if( global_cluster_size > 0  && data->map_qty > 1) {
+                cluster_mates(data);
+            }
+            if( cself->single_mate ) {
+                /* we need to re-mate in case original mate's weight is lower */
+                for(i = 0; rc == 0 && i < data->map_qty; i++ ) {
+                    if( !data->map[i].saved && data->map[i].weight >= cself->min_mapq ) {
+                        uint32_t mate = data->map[i].mate;
+                        if( mate != i && data->map[mate].mate != i ) {
+                            self->dropped_mates_cnt++;
+                            if( data->map[data->map[mate].mate].weight < data->map[i].weight ) {
+                                /* do not save my mate's mate */
+                                DEBUG_MSG(10, ("mate %u dropped as pair of %u\n", data->map[mate].mate, mate));
+                                data->map[data->map[mate].mate].saved = true;
+                                /* repoint mate to me */
+                                data->map[mate].mate = i;
+                            } else {
+                                /* do not save me */
+                                DEBUG_MSG(10, ("mate %u dropped as pair of %u\n", i, mate));
+                                data->map[i].saved = true;
+                            }
+                        }
+                    }
+                }
+            }
+            for(i = 0; rc == 0 && i < data->map_qty; i++ ) {
+                if( !data->map[i].saved && data->map[i].weight >= cself->min_mapq ) {
+                    uint32_t mate = data->map[i].mate;
+                    /* no mate or mate is under-weigth */
+                    if( mate == i || data->map[mate].weight < cself->min_mapq ||
+                       /* or mate was saved in primary */
+                       (left_weight > 0 && mate == left_prim) || (right_weight > 0 && mate == right_prim) ) {
+                        self->match[i].mate_align_id = 0;
+                        rc = CGWriterAlgn_Save(self, read, self->secondary, i, NULL);
+                        row++;
+                    } else {
+                        self->match[mate].mate_align_id = row++;
+                        self->match[i].mate_align_id = row++;
+                        if( (rc = CGWriterAlgn_Save(self, read, self->secondary, i, NULL)) == 0 ) {
+                            rc = CGWriterAlgn_Save(self, read, self->secondary, mate, NULL);
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+#endif
diff --git a/tools/cg-load/writer-algn.h b/tools/cg-load/writer-algn.h
new file mode 100644
index 0000000..6ccb019
--- /dev/null
+++ b/tools/cg-load/writer-algn.h
@@ -0,0 +1,62 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_writer_algn_h_
+#define _tools_cg_load_writer_algn_h_
+
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/manager.h>
+#include <insdc/insdc.h>
+#include <align/writer-alignment.h>
+#include <align/writer-reference.h>
+
+#include "writer-seq.h"
+
+typedef struct TMappingsData_map_struct {
+    bool saved;
+    uint16_t flags;
+    char chr[CG_CHROMOSOME_NAME];
+    INSDC_coord_zero offset;
+    int16_t gap[CG_READS_NGAPS];
+    uint8_t weight;
+    uint32_t mate;
+} TMappingsData_map;
+
+typedef struct TMappingsData_struct {
+    uint16_t map_qty;
+    TMappingsData_map map[CG_MAPPINGS_MAX];
+} TMappingsData;
+
+typedef struct CGWriterAlgn CGWriterAlgn;
+
+rc_t CGWriterAlgn_Make(const CGWriterAlgn** cself, TMappingsData** data, VDatabase* db, const ReferenceMgr* rmgr,
+                       uint32_t min_mapq, bool single_mate, uint32_t cluster_size);
+
+rc_t CGWriterAlgn_Whack(const CGWriterAlgn* cself, bool commit, uint64_t* rows_1st, uint64_t* rows_2nd);
+
+rc_t CGWriterAlgn_Write(const CGWriterAlgn* cself, TReadsData* read);
+
+#endif /* _tools_cg_load_writer_algn_h_ */
diff --git a/tools/cg-load/writer-evidence-dnbs.c b/tools/cg-load/writer-evidence-dnbs.c
new file mode 100644
index 0000000..18be548
--- /dev/null
+++ b/tools/cg-load/writer-evidence-dnbs.c
@@ -0,0 +1,227 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/container.h>
+#include <kfs/file.h>
+#include <insdc/insdc.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <align/writer-alignment.h>
+#include <align/dna-reverse-cmpl.h>
+
+#include "debug.h"
+#include "defs.h"
+#include "writer-evidence-intervals.h"
+#include "writer-evidence-dnbs.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+#include <assert.h>
+
+typedef struct CGWriterEvdDnb_match_struct {
+
+    int64_t seq_spot_id;
+    INSDC_coord_one seq_read_id;
+
+    /* filled out by ReferenceMgr_Compress */
+    INSDC_coord_zero read_start;
+    INSDC_coord_len read_len;
+    bool has_ref_offset[CG_EVDNC_ALLELE_LEN];
+    int32_t ref_offset[CG_EVDNC_ALLELE_LEN];
+    int64_t ref_id;
+    INSDC_coord_zero ref_start;
+    bool has_mismatch[CG_EVDNC_ALLELE_LEN];
+    char mismatch[CG_EVDNC_ALLELE_LEN];
+
+    bool ref_orientation;
+    uint32_t ref_ploidy;
+    uint32_t mapq;
+
+} CGWriterEvdDnb_match;
+
+struct CGWriterEvdDnbs {
+    const ReferenceMgr* rmgr;
+    const TableWriterAlgn* writer;
+
+    TableWriterAlgnData algn;
+    CGWriterEvdDnb_match match;
+    
+    TEvidenceDnbsData data;
+
+    uint64_t bad_allele_index;
+};
+
+rc_t CGWriterEvdDnbs_Make(const CGWriterEvdDnbs** cself, TEvidenceDnbsData** data,
+                          VDatabase* db, const ReferenceMgr* rmgr, const uint32_t options)
+{
+    rc_t rc = 0;
+    CGWriterEvdDnbs* self;
+
+    if( cself == NULL || db == NULL ) {
+        return RC(rcExe, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    self = calloc(1, sizeof(*self));
+    if( self == NULL ) {
+        rc = RC(rcExe, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+    } else {
+        if( (rc = TableWriterAlgn_Make(&self->writer, db, ewalgn_tabletype_EvidenceAlignment, ewalgn_co_SEQ_SPOT_ID)) == 0 ) {
+            self->algn.seq_spot_id.buffer = &self->match.seq_spot_id;
+            self->algn.seq_spot_id.elements = 1;
+            self->algn.seq_read_id.buffer = &self->match.seq_read_id;
+            self->algn.seq_read_id.elements = 1;
+
+            self->algn.read_start.buffer = &self->match.read_start;
+            self->algn.read_len.buffer = &self->match.read_len;
+            self->algn.has_ref_offset.buffer = self->match.has_ref_offset;
+            self->algn.ref_offset.buffer = self->match.ref_offset;
+            self->algn.ref_id.buffer = &self->match.ref_id;
+            self->algn.ref_id.elements = 1;
+            self->algn.ref_start.buffer = &self->match.ref_start;
+            self->algn.ref_start.elements = 1;
+            self->algn.has_mismatch.buffer = self->match.has_mismatch;
+            self->algn.mismatch.buffer = self->match.mismatch;
+            self->algn.ref_orientation.buffer = &self->match.ref_orientation;
+            self->algn.ref_orientation.elements = 1;
+            self->algn.ref_ploidy.buffer = &self->match.ref_ploidy;
+            self->algn.ref_ploidy.elements = 1;
+            self->algn.mapq.buffer = &self->match.mapq;
+            self->algn.mapq.elements = 1;
+            self->rmgr = rmgr;
+
+            /* set to 1st row for evidence_interval to collect ids */
+            self->data.last_rowid = 1;
+            *data = &self->data;
+        }
+    }
+    if( rc == 0 ) {
+        *cself = self;
+    } else {
+        CGWriterEvdDnbs_Whack(self, false, NULL);
+    }
+    return rc;
+}
+
+rc_t CGWriterEvdDnbs_Whack(const CGWriterEvdDnbs* cself, bool commit, uint64_t* rows)
+{
+    rc_t rc = 0;
+    if( cself != NULL ) {
+        CGWriterEvdDnbs* self = (CGWriterEvdDnbs*)cself;
+        if( self->bad_allele_index > 0 ) {
+            PLOGMSG(klogInfo, (klogInfo, "$(bad_allele_index) bad allele_indexes in evidence dnbs",
+                    "bad_allele_index=%lu", self->bad_allele_index));
+        }
+        rc = TableWriterAlgn_Whack(cself->writer, commit, rows);
+        free(self->data.dnbs);
+        free(self);
+    }
+    return rc;
+}
+
+rc_t CGWriterEvdDnbs_SetSEQ(const CGWriterEvdDnbs* cself, uint16_t dnb, const int64_t seq_spot_id_1st)
+{
+    rc_t rc = 0;
+    CGWriterEvdDnbs* self =(CGWriterEvdDnbs*)cself;
+
+    assert(cself != NULL);
+
+    self->data.dnbs[dnb].seq_spot_id = seq_spot_id_1st + self->data.dnbs[dnb].dnb_offset_in_lane_file;
+
+    return rc;
+}
+
+rc_t CGWriterEvdDnbs_Write(const CGWriterEvdDnbs* cself, const TEvidenceIntervalsData* ref, int64_t ref_rowid)
+{
+    rc_t rc = 0;
+    uint16_t i;
+    int64_t last_rowid;
+    CGWriterEvdDnbs* self =(CGWriterEvdDnbs*)cself;
+
+    assert(cself != NULL);
+    assert(ref != NULL);
+
+    for(i = 0; rc == 0 && i < cself->data.qty; i++) {
+
+        /* align against allele */
+        uint16_t ai = cself->data.dnbs[i].allele_index;
+        self->match.ref_ploidy = ref->allele_indexes_to_read_number[ai];
+        if( self->match.ref_ploidy == 0 ) {
+            DEBUG_MSG(3, ("bad allele_index for interval %s %s[%hu]\n", cself->data.dnbs[i].chr, cself->data.interval_id, i + 1));
+            self->bad_allele_index++;
+            continue;
+        } else {
+            const char* read;
+            char reversed[CG_READS_SPOT_LEN];
+            uint32_t read_len = CG_READS_SPOT_LEN / 2;
+
+            if( cself->data.dnbs[i].side == 'L' ) {
+                self->match.seq_read_id = 1;
+                read = cself->data.dnbs[i].read;
+            } else {
+                self->match.seq_read_id = 2;
+                read = &cself->data.dnbs[i].read[read_len];
+            }
+            if( cself->data.dnbs[i].strand == '-' ) {
+                if( (rc = DNAReverseCompliment(read, reversed, read_len)) != 0 ) {
+                    break;
+                }
+                read = reversed;
+                self->match.ref_orientation = true;
+            } else {
+                self->match.ref_orientation = false;
+            }
+            self->algn.ploidy = 0;
+            if( (rc = ReferenceMgr_Compress(cself->rmgr, 0, cself->data.dnbs[i].chr,
+                                            cself->data.dnbs[i].offset_in_reference, read, read_len,
+                                            cself->data.dnbs[i].allele_alignment, cself->data.dnbs[i].allele_alignment_length,
+                                            ref->offset,
+                                            ref->allele[ai], ref->allele_length[ai],
+					    cself->data.dnbs[i].offset_in_allele,
+                                            ref->allele_alignment[ai], ref->allele_alignment_length[ai],
+                                            &self->algn)) == 0 ) {
+                self->match.mapq = cself->data.dnbs[i].mapping_quality - 33;
+                /* pointer to SEQUENCE table spot and read */
+                self->match.seq_spot_id = cself->data.dnbs[i].seq_spot_id;
+                self->match.ref_id = ref_rowid;
+                self->match.ref_start = cself->data.dnbs[i].offset_in_allele;
+                DEBUG_MSG(3, ("REF_ID: %li, REF_START: %i, REF_PLOIDY: %hu\n",
+                    self->match.ref_id, self->match.ref_start, self->match.ref_ploidy));
+                rc = TableWriterAlgn_Write(cself->writer, &self->algn, &last_rowid);
+		if( rc == 0 && self->data.last_rowid++ != last_rowid ) {
+		    rc = RC(rcExe, rcTable, rcWriting, rcData, rcInconsistent);
+		}
+            } else if( GetRCObject(rc) == rcOffset && GetRCState(rc) == rcOutofrange ) {
+                PLOGERR(klogErr, (klogErr, rc, "evidence dnb for $(chr) interval $(interval) OffsetInReference $(offset) skipped",
+                    "chr=%s,interval=%s,offset=%i", ref->chr, ref->interval_id, cself->data.dnbs[i].offset_in_reference));
+                rc = 0;
+            }
+        }
+    }
+    return rc;
+}
diff --git a/tools/cg-load/writer-evidence-dnbs.h b/tools/cg-load/writer-evidence-dnbs.h
new file mode 100644
index 0000000..6c9014b
--- /dev/null
+++ b/tools/cg-load/writer-evidence-dnbs.h
@@ -0,0 +1,88 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_writer_evidence_dnbs_h_
+#define _tools_cg_load_writer_evidence_dnbs_h_
+
+#include <insdc/insdc.h>
+#include <vdb/database.h>
+#include <sra/sradb.h>
+
+#include "defs.h"
+#include "factory-cmn.h"
+
+typedef struct TEvidenceDnbsData_dnb_struct {
+
+    /* translated:
+       slide+lane+file_num_in_lane+dnb_offset_in_lane_file --> SEQ_SPOT_ID */
+    int64_t seq_spot_id;
+
+    char chr[CG_CHROMOSOME_NAME];
+    char slide[CG_SLIDE];
+    char lane[CG_LANE];
+    CGFIELD15_BATCH_FILE_NUMBER file_num_in_lane;
+    uint64_t dnb_offset_in_lane_file; /* zero-based */
+    uint16_t allele_index;
+    char side;
+    char strand;
+    INSDC_coord_zero offset_in_allele;
+    char allele_alignment[CG_EVDNC_ALLELE_CIGAR_LEN];
+    /* strlen for allele_alignment[] buffer */
+    size_t allele_alignment_length;
+    uint8_t mapping_quality;
+    INSDC_coord_zero offset_in_reference;
+    /* moved into reading function since it is not used after reading anyway
+    char reference_alignment[CG_EVDNC_ALLELE_CIGAR_LEN];
+    INSDC_coord_zero mate_offset_in_reference;
+    char mate_reference_alignment[CG_EVDNC_ALLELE_CIGAR_LEN];
+    uint16_t score_allele[3];*/
+    char read[CG_EVDNC_SPOT_LEN];
+    size_t read_len;
+    /*char qual[CG_EVDNC_SPOT_LEN];
+    */
+} TEvidenceDnbsData_dnb;
+
+typedef struct TEvidenceDnbsData {
+    char interval_id[CG_EVDNC_INTERVALID_LEN];
+    uint16_t qty;
+    uint16_t max_qty;
+    TEvidenceDnbsData_dnb* dnbs;
+    int64_t last_rowid; /* last used rowid in this table */
+} TEvidenceDnbsData;
+
+typedef struct CGWriterEvdDnbs CGWriterEvdDnbs;
+
+struct TEvidenceIntervalsData;
+
+rc_t CGWriterEvdDnbs_Make(const CGWriterEvdDnbs** cself, TEvidenceDnbsData** data,
+                          VDatabase* db, const ReferenceMgr* rmgr, const uint32_t options);
+
+rc_t CGWriterEvdDnbs_Whack(const CGWriterEvdDnbs* cself, bool commit, uint64_t* rows);
+
+rc_t CGWriterEvdDnbs_SetSEQ(const CGWriterEvdDnbs* cself, uint16_t dnb, const int64_t seq_spot_id_1st);
+
+rc_t CGWriterEvdDnbs_Write(const CGWriterEvdDnbs* cself, const struct TEvidenceIntervalsData* ref, int64_t ref_rowid);
+
+#endif /* _tools_cg_load_writer_evidence_dnbs_h_ */
diff --git a/tools/cg-load/writer-evidence-intervals.c b/tools/cg-load/writer-evidence-intervals.c
new file mode 100644
index 0000000..070cfc7
--- /dev/null
+++ b/tools/cg-load/writer-evidence-intervals.c
@@ -0,0 +1,255 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/printf.h>
+#include <kfs/file.h>
+#include <vdb/table.h>
+
+#include "defs.h"
+#include "writer-evidence-intervals.h"
+#include "writer-evidence-dnbs.h"
+#include "debug.h"
+#include "file.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+typedef struct CGWriterEvdInt_match_struct {
+
+    /* filled out by ReferenceMgr_Compress */
+    INSDC_coord_zero read_start[CG_EVDNC_PLOIDY];
+    INSDC_coord_len read_len[CG_EVDNC_PLOIDY];
+    bool has_ref_offset[CG_EVDNC_ALLELE_LEN];
+    int32_t ref_offset[CG_EVDNC_ALLELE_LEN];
+    bool has_mismatch[CG_EVDNC_ALLELE_LEN];
+    char mismatch[CG_EVDNC_ALLELE_LEN];
+    int64_t ref_id;
+    INSDC_coord_zero ref_start;
+    bool ref_orientation;
+    uint32_t mapq;
+
+} CGWriterEvdInt_match;
+
+struct CGWriterEvdInt {
+    const ReferenceMgr* rmgr;
+    const TableWriterAlgn* writer;
+    TableWriterAlgnData algn;
+    TEvidenceIntervalsData data;
+    CGWriterEvdInt_match match;
+    int64_t* dnbs_ids;
+    uint64_t dnbs_ids_max;
+};
+
+rc_t CGWriterEvdInt_Make(const CGWriterEvdInt** cself, TEvidenceIntervalsData** data,
+                         VDatabase* db, const ReferenceMgr* rmgr, const uint32_t options)
+{
+    rc_t rc = 0;
+    CGWriterEvdInt* self;
+
+    if( cself == NULL || db == NULL ) {
+        return RC(rcExe, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    self = calloc(1, sizeof(*self));
+    if( self == NULL ) {
+        rc = RC(rcExe, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+    } else {
+        if( (rc = TableWriterAlgn_Make(&self->writer, db, ewalgn_tabletype_EvidenceInterval, 0)) == 0 ) {
+            self->algn.read_start.buffer = &self->match.read_start;
+            self->algn.read_len.buffer = &self->match.read_len;
+            self->algn.has_ref_offset.buffer = self->match.has_ref_offset;
+            self->algn.ref_offset.buffer = self->match.ref_offset;
+            self->algn.has_mismatch.buffer = self->match.has_mismatch;
+            self->algn.mismatch.buffer = self->match.mismatch;
+            self->algn.ref_id.buffer = &self->match.ref_id;
+            self->algn.ref_id.elements = 1;
+            self->algn.ref_start.buffer = &self->match.ref_start;
+            self->algn.ref_start.elements = 1;
+            self->match.ref_orientation = false;
+            self->algn.ref_orientation.buffer = &self->match.ref_orientation;
+            self->algn.ref_orientation.elements = 1;
+            self->algn.mapq.buffer = &self->match.mapq;
+            self->algn.mapq.elements = 1;
+            self->algn.alingment_ids.buffer = self->dnbs_ids;
+            self->rmgr = rmgr;
+            *data = &self->data;
+        }
+    }
+    if( rc == 0 ) {
+        *cself = self;
+    } else {
+        CGWriterEvdInt_Whack(self, false, NULL);
+    }
+    return rc;
+}
+
+rc_t CGWriterEvdInt_Whack(const CGWriterEvdInt* cself, bool commit, uint64_t* rows)
+{
+    rc_t rc = 0;
+    if( cself != NULL ) {
+        CGWriterEvdInt* self = (CGWriterEvdInt*)cself;
+        rc = TableWriterAlgn_Whack(cself->writer, commit, rows);
+        free(self->dnbs_ids);
+        free(self);
+    }
+    return rc;
+}
+
+rc_t CGWriterEvdInt_Write(const CGWriterEvdInt* cself, const TEvidenceDnbsData* dnbs, int64_t* rowid)
+{
+    rc_t rc = 0;
+    CGWriterEvdInt* self = (CGWriterEvdInt*)cself;
+    
+    assert(cself != NULL);
+
+    memset(self->data.allele_indexes_to_read_number, 0, sizeof(self->data.allele_indexes_to_read_number));
+    if( self->data.ploidy == 1 ) {
+
+        uint32_t i = self->data.allele_indexes[0] - '0';
+
+        if( self->data.allele_indexes[1] != '\0' || i > 2 ) {
+            rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcOutofrange);
+        } else if( self->data.allele_alignment_length[i] == 0 ) {
+            rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcEmpty);
+        } else {
+            if( i == 0 ) {
+                rc = string_printf(self->data.allele_alignment[0], sizeof(self->data.allele_alignment[0]),
+                                   &self->data.allele_alignment_length[0], "%uM", self->data.length);
+            }
+            if( rc == 0 ) {
+                self->algn.ploidy = 0;
+                rc = ReferenceMgr_Compress(cself->rmgr, ewrefmgr_cmp_Exact, self->data.chr, self->data.offset, self->data.allele[i], self->data.allele_length[i],
+                                           self->data.allele_alignment[i], self->data.allele_alignment_length[i],
+                                           0, NULL, 0, 0, NULL, 0, &self->algn);
+                self->data.allele_indexes_to_read_number[i] = 1; /* 1st read */
+            }
+        }
+
+    } else if( self->data.ploidy == 2 ) {  /** possibilities: 0;1 1;2 and 1;1 - single ploidy but recorded as dual **/
+        uint32_t i1 = self->data.allele_indexes[0] - '0';
+        uint32_t i2 = self->data.allele_indexes[2] - '0';
+
+        if( self->data.allele_indexes[1] != ';' || self->data.allele_indexes[3] != '\0' || i1 > 2 || i2 > 2) {
+            rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcOutofrange);
+        } else {
+            if( i1 == 0 || i2 == 0 ) {
+                rc = string_printf(self->data.allele_alignment[0], sizeof(self->data.allele_alignment[0]),
+                                   &self->data.allele_alignment_length[0], "%uM", self->data.length);
+            }
+            if( self->data.allele_alignment_length[i1] == 0 || self->data.allele_alignment_length[i2] == 0 ) {
+                rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcEmpty);
+            }
+            if( rc == 0 ) {
+                self->algn.ploidy = 0;
+                rc = ReferenceMgr_Compress(cself->rmgr, ewrefmgr_cmp_Exact, self->data.chr, self->data.offset, self->data.allele[i1], self->data.allele_length[i1],
+                                           self->data.allele_alignment[i1], self->data.allele_alignment_length[i1],
+                                           0, NULL, 0, 0, NULL, 0, &self->algn);
+                self->data.allele_indexes_to_read_number[i1] = 1; /* 1st read */
+            }
+            if( rc == 0 ) {
+		if ( i2 != i1 ) {
+			rc = ReferenceMgr_Compress(cself->rmgr, ewrefmgr_cmp_Exact, self->data.chr, self->data.offset, self->data.allele[i2], self->data.allele_length[i2],
+                                           self->data.allele_alignment[i2], self->data.allele_alignment_length[i2],
+                                           0, NULL, 0, 0, NULL, 0, &self->algn);
+			self->data.allele_indexes_to_read_number[i2] = 2; /* 2nd read */
+		} else {
+			self->data.ploidy = 1;
+		}
+            }
+        }
+
+    }  else if( self->data.ploidy == 3 ) { /** possibilities: 0;1;2 1;2;3 **/
+        uint32_t i1 = self->data.allele_indexes[0] - '0';
+        uint32_t i2 = self->data.allele_indexes[2] - '0';
+        uint32_t i3 = self->data.allele_indexes[4] - '0';
+
+
+        if( self->data.allele_indexes[1] != ';'  || self->data.allele_indexes[3] != ';' || self->data.allele_indexes[5] != '\0' || i1 > 3 || i2 > 3 || i3 > 3) {
+            rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcOutofrange);
+        } else {
+            if( i1 == 0 || i2 == 0 || i3 == 0) {
+                rc = string_printf(self->data.allele_alignment[0], sizeof(self->data.allele_alignment[0]),
+                                   &self->data.allele_alignment_length[0], "%uM", self->data.length);
+            }
+            if( self->data.allele_alignment_length[i1] == 0 || self->data.allele_alignment_length[i2] == 0 || self->data.allele_alignment_length[i3]==0) {
+                rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcEmpty);
+            }
+            if( rc == 0 ) {
+                self->algn.ploidy = 0;
+                rc = ReferenceMgr_Compress(cself->rmgr, ewrefmgr_cmp_Exact, self->data.chr, self->data.offset, self->data.allele[i1], self->data.allele_length[i1],
+                                           self->data.allele_alignment[i1], self->data.allele_alignment_length[i1],
+                                           0, NULL, 0, 0, NULL, 0, &self->algn);
+                self->data.allele_indexes_to_read_number[i1] = 1; /* 1st read */
+            }
+            if( rc == 0 ) {
+                rc = ReferenceMgr_Compress(cself->rmgr, ewrefmgr_cmp_Exact, self->data.chr, self->data.offset, self->data.allele[i2], self->data.allele_length[i2],
+                                           self->data.allele_alignment[i2], self->data.allele_alignment_length[i2],
+                                           0, NULL, 0, 0, NULL, 0, &self->algn);
+                self->data.allele_indexes_to_read_number[i2] = 2; /* 2nd read */
+            }
+            if( rc == 0 ) {
+                rc = ReferenceMgr_Compress(cself->rmgr, ewrefmgr_cmp_Exact, self->data.chr, self->data.offset, self->data.allele[i3], self->data.allele_length[i3],
+                                           self->data.allele_alignment[i3], self->data.allele_alignment_length[i3],
+                                           0, NULL, 0, 0, NULL, 0, &self->algn);
+                self->data.allele_indexes_to_read_number[i3] = 3; /* 3rd read */
+            }
+        }
+
+    } else {
+        rc = RC(rcExe, rcFormatter, rcWriting, rcData, rcUnrecognized);
+    }
+    if( rc == 0 ) { /*** a bit careful here - were are predicting what EvidenceDnb writer will do ***/
+	uint32_t i,valid_qty;
+	for(valid_qty = i = 0;i< dnbs->qty;i++){
+		if(self->data.allele_indexes_to_read_number[dnbs->dnbs[i].allele_index] > 0){
+			valid_qty++;
+		}
+	}
+        if( self->dnbs_ids_max < valid_qty ) {
+            void* p = realloc(self->dnbs_ids, sizeof(*(self->dnbs_ids)) * valid_qty);
+            if( p == NULL ) {
+                rc = RC(rcExe, rcFormatter, rcWriting, rcMemory, rcExhausted);
+            } else {
+                self->dnbs_ids = p;
+                self->dnbs_ids_max = valid_qty;
+                self->algn.alingment_ids.buffer = self->dnbs_ids;
+            }
+        }
+        if( rc == 0 ) {
+            self->algn.alingment_ids.elements = valid_qty;
+	    for(i=0;i<valid_qty;i++){
+		self->dnbs_ids[i] = dnbs->last_rowid + i;
+            }
+        }
+    }
+    if( rc == 0 ) {
+        self->match.mapq = self->data.score;
+        rc = TableWriterAlgn_Write(self->writer, &self->algn, rowid);
+    }
+    return rc;
+}
diff --git a/tools/cg-load/writer-evidence-intervals.h b/tools/cg-load/writer-evidence-intervals.h
new file mode 100644
index 0000000..7a8f586
--- /dev/null
+++ b/tools/cg-load/writer-evidence-intervals.h
@@ -0,0 +1,68 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_writer_evidence_intervals
+#define _tools_cg_load_writer_evidence_intervals
+
+#include <vdb/database.h>
+#include <vdb/manager.h>
+#include <insdc/insdc.h>
+
+#include "defs.h"
+#include <align/writer-alignment.h>
+#include <align/writer-reference.h>
+
+typedef struct TEvidenceIntervalsData {
+    char interval_id[CG_EVDNC_INTERVALID_LEN];
+    char chr[CG_CHROMOSOME_NAME];
+    INSDC_coord_zero offset;
+    INSDC_coord_len length;
+    uint16_t ploidy;
+    char allele_indexes[16];
+    /* translation from allele_indexes into read id for use in dnbs */
+    uint8_t allele_indexes_to_read_number[CG_EVDNC_ALLELE_NUM];
+    int32_t score;
+    int32_t scoreVAF;
+    int32_t scoreEAF;
+    char allele[CG_EVDNC_ALLELE_NUM][CG_EVDNC_ALLELE_LEN];
+    /* strlen for allele[3][] buffers */
+    size_t allele_length[CG_EVDNC_ALLELE_NUM];
+    char allele_alignment[CG_EVDNC_ALLELE_NUM][CG_EVDNC_ALLELE_CIGAR_LEN];
+    /* strlen for allele_alignment[3][] buffers */
+    size_t allele_alignment_length[CG_EVDNC_ALLELE_NUM];
+} TEvidenceIntervalsData;
+
+typedef struct CGWriterEvdInt CGWriterEvdInt;
+
+struct TEvidenceDnbsData;
+
+rc_t CGWriterEvdInt_Make(const CGWriterEvdInt** cself, TEvidenceIntervalsData** data,
+                         VDatabase* db, const ReferenceMgr* rmgr, const uint32_t options);
+
+rc_t CGWriterEvdInt_Whack(const CGWriterEvdInt* cself, bool commit, uint64_t* rows);
+
+rc_t CGWriterEvdInt_Write(const CGWriterEvdInt* cself, const struct TEvidenceDnbsData* dnbs, int64_t* rowid);
+
+#endif /* _tools_cg_load_writer_evidence_intervals */
diff --git a/tools/cg-load/writer-seq.c b/tools/cg-load/writer-seq.c
new file mode 100644
index 0000000..43b34bd
--- /dev/null
+++ b/tools/cg-load/writer-seq.c
@@ -0,0 +1,135 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <insdc/insdc.h>
+
+#include "debug.h"
+#include "defs.h"
+#include "writer-seq.h"
+
+#include <stdlib.h>
+#include <assert.h>
+
+const INSDC_SRA_platform_id DFTL_platform = SRA_PLATFORM_COMPLETE_GENOMICS;
+const char DFTL_label[] = "LeftRight";
+const INSDC_coord_zero DFTL_label_start[CG_READS_NREADS] = {0, 4};
+const INSDC_coord_len DFTL_label_len[CG_READS_NREADS] =    {4, 5};
+const INSDC_coord_zero DFTL_read_start[CG_READS_NREADS] =  {0, 35};
+const INSDC_coord_len DFTL_read_len[CG_READS_NREADS] =    {35, 35};
+const INSDC_SRA_read_filter DFTL_read_filter[CG_READS_NREADS] =  {SRA_READ_FILTER_PASS, SRA_READ_FILTER_PASS};
+
+struct CGWriterSeq {
+    const TableWriterSeq* base;
+    TReadsData data;
+};
+
+rc_t CGWriterSeq_Make(const CGWriterSeq** cself, TReadsData** data, VDatabase* db, const uint32_t options, const char* quality_quantization)
+{
+    rc_t rc = 0;
+    CGWriterSeq* self;
+
+    if( cself == NULL || db == NULL ) {
+        return RC(rcExe, rcFormatter, rcConstructing, rcParam, rcNull);
+    }
+    self = calloc(1, sizeof(*self));
+    if( self == NULL ) {
+        rc = RC(rcExe, rcFormatter, rcConstructing, rcMemory, rcExhausted);
+    } else {
+        TableWriterData p;
+        p.buffer = &DFTL_platform;
+        p.elements = 1;
+        if( (rc = TableWriterSeq_Make(&self->base, db, options | ewseq_co_AlignData | ewseq_co_SpotGroup, quality_quantization)) != 0 ) {
+            LOGERR(klogErr, rc, "sequence table");
+        } else if( (rc = TableWriteSeq_WriteDefault(self->base, ewseq_cn_PLATFORM, &p)) == 0 ) {
+            /* attach data pointer to data */
+            self->data.seq.nreads = CG_READS_NREADS;
+            self->data.seq.alignment_count.buffer = self->data.align_count;
+            self->data.seq.alignment_count.elements = CG_READS_NREADS;
+            self->data.seq.primary_alignment_id.buffer = self->data.prim_algn_id;
+            self->data.seq.primary_alignment_id.elements = CG_READS_NREADS;
+            self->data.seq.sequence.buffer = self->data.read;
+            self->data.seq.quality.buffer = self->data.qual;
+            self->data.seq.label.buffer = DFTL_label;
+            self->data.seq.label.elements = sizeof(DFTL_label) - 1;
+            self->data.seq.label_start.buffer = DFTL_label_start;
+            self->data.seq.label_start.elements = CG_READS_NREADS;
+            self->data.seq.label_len.buffer = DFTL_label_len;
+            self->data.seq.label_len.elements = CG_READS_NREADS;
+            self->data.seq.read_type.buffer = self->data.read_type;
+            self->data.seq.read_type.elements = CG_READS_NREADS;
+            self->data.seq.read_start.buffer = DFTL_read_start;
+            self->data.seq.read_start.elements = CG_READS_NREADS;
+            self->data.seq.read_len.buffer = DFTL_read_len;
+            self->data.seq.read_len.elements = CG_READS_NREADS;
+            self->data.seq.read_filter.buffer = DFTL_read_filter;
+            self->data.seq.read_filter.elements = CG_READS_NREADS;
+
+            /* set to 1st row for aligment to refer */
+            self->data.rowid = 1;
+            *data = &self->data;
+        }
+    }
+    if( rc == 0 ) {
+        *cself = self;
+    } else {
+        CGWriterSeq_Whack(self, false, NULL);
+    }
+    return rc;
+}
+
+rc_t CGWriterSeq_Whack(const CGWriterSeq* cself, bool commit, uint64_t* rows)
+{
+    rc_t rc = 0;
+    if( cself != NULL ) {
+        CGWriterSeq* self = (CGWriterSeq*)cself;
+        rc = TableWriterSeq_Whack(cself->base, commit, rows);
+        free(self);
+    }
+    return rc;
+}
+
+rc_t CGWriterSeq_Write(const CGWriterSeq* cself)
+{
+    uint64_t i;
+    int64_t r;
+    rc_t rc;
+    INSDC_quality_phred* b;
+    CGWriterSeq* self = (CGWriterSeq*)cself;
+
+    assert(cself != NULL);
+
+    b = (INSDC_quality_phred*)(self->data.seq.quality.buffer);
+    for(i = 0; i < cself->data.seq.quality.elements; i++ ) {
+        b[i] -= 33;
+    }
+    for(i = 0; i < CG_READS_NREADS; i++) {
+        self->data.read_type[i] = SRA_READ_TYPE_BIOLOGICAL |
+            (cself->data.prim_is_reverse[i] ? SRA_READ_TYPE_REVERSE : SRA_READ_TYPE_FORWARD);
+    }
+    rc = TableWriterSeq_Write(cself->base, &cself->data.seq, &r);
+    return rc ? rc : (self->data.rowid++ == r ? 0 : RC(rcExe, rcTable, rcWriting, rcData, rcInconsistent));
+}
diff --git a/tools/cg-load/writer-seq.h b/tools/cg-load/writer-seq.h
new file mode 100644
index 0000000..b9a1da7
--- /dev/null
+++ b/tools/cg-load/writer-seq.h
@@ -0,0 +1,58 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_cg_load_writer_seq_h_
+#define _tools_cg_load_writer_seq_h_
+
+#include <insdc/insdc.h>
+#include <vdb/database.h>
+#include <sra/sradb.h>
+#include <align/writer-sequence.h>
+
+typedef struct TReadsData_struct {
+    uint16_t flags;
+    char read[CG_READS_SPOT_LEN + 1];
+    char qual[CG_READS_SPOT_LEN + 1];
+
+    /* reverse read cache by half-dnb */
+    INSDC_dna_text reverse[CG_READS_SPOT_LEN];
+
+    TableWriterSeqData seq;
+    int64_t rowid;
+    uint8_t align_count[CG_READS_NREADS];
+    int64_t prim_algn_id[CG_READS_NREADS];
+    bool prim_is_reverse[CG_READS_NREADS];
+    SRAReadTypes read_type[CG_READS_NREADS];
+} TReadsData;
+
+typedef struct CGWriterSeq CGWriterSeq;
+
+rc_t CGWriterSeq_Make(const CGWriterSeq** cself, TReadsData** data, VDatabase* db, const uint32_t options, const char* quality_quantization);
+
+rc_t CGWriterSeq_Whack(const CGWriterSeq* cself, bool commit, uint64_t* rows);
+
+rc_t CGWriterSeq_Write(const CGWriterSeq* cself);
+
+#endif /* _tools_cg_load_writer_seq_h_ */
diff --git a/tools/fastq-loader/Makefile b/tools/fastq-loader/Makefile
new file mode 100644
index 0000000..77bcfae
--- /dev/null
+++ b/tools/fastq-loader/Makefile
@@ -0,0 +1,222 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/fastq-loader
+
+INT_LIBS = \
+	libfastqloader
+
+ALL_LIBS = \
+	$(INT_LIBS) \
+	$(EXT_LIBS)
+
+EXT_TOOLS = \
+    latf-load
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)    
+
+TEST_TOOLS = \
+	wb-test-fastq
+
+include $(TOP)/build/Makefile.env
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes 
+	@ $(MAKE_CMD) $(TARGDIR)/std
+
+$(INT_LIBS): vers-includes
+	@ $(MAKE_CMD) $(ILIBDIR)/$@
+
+$(EXT_TOOLS): vers-includes
+	@ $(MAKE_CMD) $(BINDIR)/$@    
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+$(TEST_TOOLS): std 
+	@ $(MAKE_CMD) $(TEST_BINDIR)/$@
+
+valgrind: $(TEST_TOOLS)
+	@echo ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+	@echo Run $(TEST_BINDIR)/$(TEST_TOOLS)
+	valgrind $(RUN_REMOTELY) $(TEST_BINDIR)/$(TEST_TOOLS)
+
+.PHONY: all std $(ALL_LIBS) $(TEST_TOOLS) valgrind
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(ILIBDIR)/,$(INT_LIBS)) \
+	$(addprefix $(LIBDIR)/,$(EXT_LIBS)) \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+INTERM_SRC = \
+	$(SRCDIR)/fastq-lex.c \
+	$(SRCDIR)/fastq-grammar.c \
+	$(SRCDIR)/fastq-tokens.h 
+
+clean: stdclean
+	@ rm -f $(addsuffix *,$(addprefix $(TEST_BINDIR)/,$(TEST_TOOLS)))
+
+.PHONY: clean
+
+.PRECIOUS: $(INTERM_SRC)
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: \
+	$(addsuffix _tag,$(ALL_LIBS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_LIBS))
+
+#-------------------------------------------------------------------------------
+# fastq
+#
+$(ILIBDIR)/libfastqloader: $(ILIBDIR)/libfastqloader.$(LIBX)
+
+FASTQ_SRC = \
+    fastq-reader \
+	fastq-grammar \
+	fastq-lex
+
+$(SRCDIR)/fastq-grammar.c $(SRCDIR)/fastq-tokens.h: $(SRCDIR)/fastq-grammar.y
+	$(YACC) -o $(SRCDIR)/fastq-grammar.c --defines=$(SRCDIR)/fastq-tokens.h -v $^
+
+FASTQ_OBJ = \
+	$(addsuffix .$(LOBX),$(FASTQ_SRC))
+
+FASTQ_LIB = \
+    -lload \
+    -lloader \
+	-lkfs \
+	-lklib \
+
+ifneq (win,$(OS))
+    FASTQ_LIB += -lkq
+endif
+
+$(ILIBDIR)/libfastqloader.$(SHLX): $(INTERM_SRC) $(FASTQ_OBJ)
+	$(LD) --dlib -o $@ $^ $(FASTQ_LIB)
+
+$(ILIBDIR)/libfastqloader.$(LIBX): $(INTERM_SRC) $(FASTQ_OBJ)
+	$(LD) --slib -o $@ $^ $(FASTQ_LIB)
+
+libfastqloader_tag:
+	@ $(TOP)/build/tag-module.sh $(MODULE) libfastqloader $(FASTQ_OBJ)
+
+#------------------------------------------------------------------------------
+# fastq-load.3
+#
+FASTQ_LOAD_SRC = \
+	fastq-loader \
+    loader-imp
+
+FASTQ_LOAD_OBJ = \
+	$(addsuffix .$(OBJX),$(FASTQ_LOAD_SRC))
+
+ifneq (win, $(OS))
+    QLIB = -skq
+endif
+FASTQ_LOADER_LIB = \
+	-skapp \
+    -dwvxf \
+	-dwaxf \
+	-dwsraxf \
+	-sfastqloader \
+    -sload \
+	-sloader \
+	-salign-writer \
+    -swvdb \
+    -swkdb \
+    -svfs \
+	-skurl \
+    -skrypto \
+    -skfg \
+    -skfs \
+	-lksrch \
+    $(QLIB) \
+    -skproc \
+	-sklib \
+	-lz    \
+    -lm
+
+
+$(BINDIR)/latf-load: $(FASTQ_LOAD_OBJ)
+	$(LD) --exe --vers $(SRCDIR)/latf-load.vers -o $@ $^ $(FASTQ_LOADER_LIB)
+
+#-------------------------------------------------------------------------------
+# white-box test
+#
+FASTQ_TEST_SRC = \
+	wb-test-fastq
+
+FASTQ_TEST_OBJ = \
+	$(addsuffix .$(OBJX),$(FASTQ_TEST_SRC))
+
+ifneq (win, $(OS))
+    QLIB = -skq
+endif
+
+FASTQ_TEST_LIB = \
+	-sktst \
+	-skapp \
+	-sfastqloader \
+    -sload \
+	-sloader \
+	-salign-writer \
+    -swvdb \
+    -swkdb \
+    -svfs \
+	-skurl \
+    -skrypto \
+    -skfg \
+    -skfs \
+    $(QLIB) \
+    -skproc \
+	-sklib
+
+$(TEST_BINDIR)/wb-test-fastq: $(FASTQ_TEST_OBJ)
+	$(LP) --exe -o $@ $^ $(FASTQ_TEST_LIB)
diff --git a/tools/fastq-loader/fastq-grammar.c b/tools/fastq-loader/fastq-grammar.c
new file mode 100644
index 0000000..b8cc5cd
--- /dev/null
+++ b/tools/fastq-loader/fastq-grammar.c
@@ -0,0 +1,2100 @@
+/* A Bison parser, made by GNU Bison 2.5.  */
+
+/* Bison implementation for Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+   
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.5"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 1
+
+/* Push parsers.  */
+#define YYPUSH 0
+
+/* Pull parsers.  */
+#define YYPULL 1
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+/* Substitute the variable and function names.  */
+#define yyparse         FASTQ_parse
+#define yylex           FASTQ_lex
+#define yyerror         FASTQ_error
+#define yylval          FASTQ_lval
+#define yychar          FASTQ_char
+#define yydebug         FASTQ_debug
+#define yynerrs         FASTQ_nerrs
+
+
+/* Copy the first part of user declarations.  */
+
+  
+    #include <ctype.h>
+    #include <stdlib.h>
+    #include <string.h>
+
+    #include "fastq-parse.h"
+
+    #define YYSTYPE FASTQToken
+    #define YYLEX_PARAM pb->scanner
+    #define YYDEBUG 1
+
+    #include "fastq-tokens.h"
+
+    static void AddQuality(FASTQParseBlock* pb, const FASTQToken* token);
+    static void SetReadNumber(FASTQParseBlock* pb, const FASTQToken* token);
+    static void GrowTagLine(FASTQParseBlock* pb, const FASTQToken* token);
+    static void StopSpotName(FASTQParseBlock* pb);
+    static void SetSpotGroup(FASTQParseBlock* pb, const FASTQToken* token);
+    static void SetRead(FASTQParseBlock* pb, const FASTQToken* token);
+
+    #define UNLEX do { if (yychar != YYEMPTY && yychar != YYEOF) FASTQ_unlex(pb, & yylval); } while (0)
+
+
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 1
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     fqENDOFTEXT = 0,
+     fqNUMBER = 258,
+     fqALPHANUM = 259,
+     fqWS = 260,
+     fqENDLINE = 261,
+     fqBASESEQ = 262,
+     fqCOLORSEQ = 263,
+     fqTOKEN = 264,
+     fqASCQUAL = 265,
+     fqUNRECOGNIZED = 266
+   };
+#endif
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef int YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+/* Copy the second part of user declarations.  */
+
+
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+    int yyi;
+#endif
+{
+  return yyi;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef EXIT_SUCCESS
+#      define EXIT_SUCCESS 0
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
+       && ! ((defined YYMALLOC || defined malloc) \
+	     && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef EXIT_SUCCESS
+#    define EXIT_SUCCESS 0
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  yytype_int16 yyss_alloc;
+  YYSTYPE yyvs_alloc;
+};
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+# define YYCOPY_NEEDED 1
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
+    do									\
+      {									\
+	YYSIZE_T yynewbytes;						\
+	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
+	Stack = &yyptr->Stack_alloc;					\
+	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+	yyptr += yynewbytes / sizeof (*yyptr);				\
+      }									\
+    while (YYID (0))
+
+#endif
+
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)		\
+      do					\
+	{					\
+	  YYSIZE_T yyi;				\
+	  for (yyi = 0; yyi < (Count); yyi++)	\
+	    (To)[yyi] = (From)[yyi];		\
+	}					\
+      while (YYID (0))
+#  endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  24
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   89
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  22
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  50
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  86
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  127
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   266
+
+#define YYTRANSLATE(YYX)						\
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,    18,     2,     2,     2,     2,
+       2,     2,     2,    21,     2,    16,    17,    19,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    12,     2,
+       2,    20,    14,     2,    13,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,    15,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint8 yyprhs[] =
+{
+       0,     0,     3,     6,     8,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    46,    50,    52,
+      54,    57,    59,    63,    68,    72,    75,    78,    80,    82,
+      83,    87,    88,    93,    94,    98,    99,   104,   106,   108,
+     110,   113,   114,   118,   120,   122,   125,   128,   131,   134,
+     137,   140,   141,   145,   146,   150,   151,   152,   156,   157,
+     161,   162,   166,   167,   172,   173,   174,   175,   176,   177,
+     178,   192,   194,   196,   197,   199,   202,   205,   208,   211,
+     214,   218,   223,   225,   228,   231,   235
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int8 yyrhs[] =
+{
+      23,     0,    -1,    37,    68,    -1,    37,    -1,    68,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,     4,    24,    12,    25,     3,    26,    12,    27,     3,
+      28,    12,    29,     3,    30,    12,    31,     3,    32,    12,
+      33,    46,    12,    34,    70,    -1,     4,     1,    36,    -1,
+      35,    -1,     0,    -1,    36,    35,    -1,     6,    -1,    38,
+      36,    39,    -1,    38,    36,     1,    36,    -1,     1,    36,
+      39,    -1,    13,    47,    -1,    14,    47,    -1,    40,    -1,
+      43,    -1,    -1,     7,    41,    36,    -1,    -1,    40,     7,
+      42,    36,    -1,    -1,     8,    44,    36,    -1,    -1,    43,
+       8,    45,    36,    -1,     7,    -1,     8,    -1,    48,    -1,
+      48,    54,    -1,    -1,    50,    49,    51,    -1,     4,    -1,
+       3,    -1,    50,    15,    -1,    50,    16,    -1,    50,    17,
+      -1,    50,    12,    -1,    50,     4,    -1,    50,     3,    -1,
+      -1,    18,    52,     3,    -1,    -1,    18,    53,     4,    -1,
+      -1,    -1,    19,    55,     3,    -1,    -1,     5,    56,    59,
+      -1,    -1,     5,    57,    67,    -1,    -1,    54,     5,    58,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,    60,
+      12,    61,     4,    62,    12,    63,     3,    64,    12,    65,
+      66,    -1,     4,    -1,     3,    -1,    -1,     4,    -1,    67,
+       3,    -1,    67,     4,    -1,    67,    15,    -1,    67,    19,
+      -1,    67,    20,    -1,    69,    36,    70,    -1,    69,    36,
+       1,    36,    -1,    21,    -1,    69,     9,    -1,    71,    36,
+      -1,    70,    71,    36,    -1,    10,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint8 yyrline[] =
+{
+       0,    70,    70,    72,    74,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    87,    76,    90,    92,    96,
+      97,   101,   105,   106,   107,   111,   112,   116,   117,   121,
+     121,   123,   123,   128,   128,   130,   130,   135,   136,   141,
+     142,   146,   146,   151,   152,   153,   154,   155,   156,   157,
+     158,   162,   162,   164,   164,   166,   170,   170,   172,   172,
+     174,   174,   176,   176,   180,   181,   182,   183,   184,   185,
+     180,   189,   190,   191,   195,   196,   197,   198,   199,   200,
+     206,   207,   211,   212,   216,   217,   220
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
+{
+  "fqENDOFTEXT", "error", "$undefined", "fqNUMBER", "fqALPHANUM", "fqWS",
+  "fqENDLINE", "fqBASESEQ", "fqCOLORSEQ", "fqTOKEN", "fqASCQUAL",
+  "fqUNRECOGNIZED", "':'", "'@'", "'>'", "'_'", "'-'", "'.'", "'#'", "'/'",
+  "'='", "'+'", "$accept", "sequence", "$@1", "$@2", "$@3", "$@4", "$@5",
+  "$@6", "$@7", "$@8", "$@9", "$@10", "$@11", "endfile", "endline",
+  "readLines", "header", "read", "baseRead", "$@12", "$@13", "csRead",
+  "$@14", "$@15", "inlineRead", "tagLine", "nameSpotGroup", "$@16", "name",
+  "spotGroup", "$@17", "$@18", "readNumberOrTail", "$@19", "$@20", "$@21",
+  "$@22", "casava1_8", "$@23", "$@24", "$@25", "$@26", "$@27", "$@28",
+  "indexSequence", "tail", "qualityLines", "qualityHeader", "quality",
+  "qualityLine", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,    58,    64,    62,    95,    45,    46,    35,    47,
+      61,    43
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    22,    23,    23,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    23,    23,    23,    35,
+      35,    36,    37,    37,    37,    38,    38,    39,    39,    41,
+      40,    42,    40,    44,    43,    45,    43,    46,    46,    47,
+      47,    49,    48,    50,    50,    50,    50,    50,    50,    50,
+      50,    52,    51,    53,    51,    51,    55,    54,    56,    54,
+      57,    54,    58,    54,    60,    61,    62,    63,    64,    65,
+      59,    66,    66,    66,    67,    67,    67,    67,    67,    67,
+      68,    68,    69,    69,    70,    70,    71
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     2,     1,     1,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    24,     3,     1,     1,
+       2,     1,     3,     4,     3,     2,     2,     1,     1,     0,
+       3,     0,     4,     0,     3,     0,     4,     1,     1,     1,
+       2,     0,     3,     1,     1,     2,     2,     2,     2,     2,
+       2,     0,     3,     0,     3,     0,     0,     3,     0,     3,
+       0,     3,     0,     4,     0,     0,     0,     0,     0,     0,
+      13,     1,     1,     0,     1,     2,     2,     2,     2,     2,
+       3,     4,     1,     2,     2,     3,     1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+   Performed when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint8 yydefact[] =
+{
+       0,    19,     0,     0,    21,     0,     0,    82,     0,    18,
+       0,     3,     0,     4,     0,     0,     0,     0,    44,    43,
+      25,    39,    41,    26,     1,    20,     2,     0,    83,     0,
+      29,    33,    24,    27,    28,    17,     6,    58,    56,    40,
+      50,    49,    48,    45,    46,    47,    55,     0,    22,     0,
+      86,    80,     0,     0,     0,    31,    35,     0,     0,     0,
+       0,    62,    51,    42,    23,    81,     0,    84,    30,    34,
+       0,     0,     7,    64,    59,    74,    61,    57,     0,     0,
+       0,    85,    32,    36,     0,     0,    75,    76,    77,    78,
+      79,    63,    52,    54,     8,    65,     0,     0,     9,    66,
+       0,     0,    10,    67,     0,     0,    11,    68,     0,     0,
+      12,    69,     0,    73,    13,    72,    71,    70,     0,    14,
+       0,    37,    38,     0,    15,     0,    16
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int8 yydefgoto[] =
+{
+      -1,     8,    17,    57,    84,    96,   100,   104,   108,   112,
+     118,   120,   125,     9,    10,    11,    12,    32,    33,    53,
+      70,    34,    54,    71,   123,    20,    21,    46,    22,    63,
+      79,    80,    39,    60,    58,    59,    78,    74,    85,    97,
+     101,   105,   109,   113,   117,    76,    13,    14,    51,    52
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -52
+static const yytype_int8 yypact[] =
+{
+       3,   -52,     6,     9,   -52,    34,    34,   -52,    23,   -52,
+       2,     8,     6,   -52,    16,    35,     6,    19,   -52,   -52,
+     -52,     1,    24,   -52,   -52,   -52,   -52,    25,   -52,     4,
+     -52,   -52,   -52,    40,    46,   -52,   -52,    51,   -52,    52,
+     -52,   -52,   -52,   -52,   -52,   -52,    38,     6,   -52,     6,
+     -52,    48,     6,     6,     6,   -52,   -52,    56,    57,    58,
+      60,   -52,    62,   -52,   -52,   -52,     6,   -52,   -52,   -52,
+       6,     6,   -52,   -52,   -52,   -52,    15,   -52,    58,    61,
+      63,   -52,   -52,   -52,    49,    59,   -52,   -52,   -52,   -52,
+     -52,    15,   -52,   -52,   -52,   -52,    65,    68,   -52,   -52,
+      64,    66,   -52,   -52,    70,    71,   -52,   -52,    67,    69,
+     -52,   -52,    74,    41,   -52,   -52,   -52,   -52,    72,   -52,
+      42,   -52,   -52,    73,   -52,    48,    48
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int8 yypgoto[] =
+{
+     -52,   -52,   -52,   -52,   -52,   -52,   -52,   -52,   -52,   -52,
+     -52,   -52,   -52,    76,    -1,   -52,   -52,    53,   -52,   -52,
+     -52,   -52,   -52,   -52,   -52,    77,   -52,   -52,   -52,   -52,
+     -52,   -52,   -52,   -52,   -52,   -52,   -52,   -52,   -52,   -52,
+     -52,   -52,   -52,   -52,   -52,    10,    78,   -52,   -43,   -51
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -61
+static const yytype_int8 yytable[] =
+{
+      66,    15,     1,     1,     2,    49,    37,     3,     4,     4,
+      16,    27,     4,    29,    50,    35,     5,     6,    86,    87,
+      38,    -5,     4,    24,     7,    28,    47,    40,    41,     7,
+      88,    36,    30,    31,    89,    90,    42,    18,    19,    43,
+      44,    45,    30,    31,   115,   116,    64,    55,    65,   121,
+     122,    67,    68,    69,    56,   -60,    62,    61,    50,    72,
+      73,    94,    75,    77,    92,    81,   -53,    93,    98,    82,
+      83,    95,    99,   106,   107,    66,   102,   114,   103,   110,
+      48,   111,   126,    23,   119,   124,    25,     0,    91,    26
+};
+
+#define yypact_value_is_default(yystate) \
+  ((yystate) == (-52))
+
+#define yytable_value_is_error(yytable_value) \
+  YYID (0)
+
+static const yytype_int8 yycheck[] =
+{
+      51,     2,     0,     0,     1,     1,     5,     4,     6,     6,
+       1,    12,     6,    14,    10,    16,    13,    14,     3,     4,
+      19,    12,     6,     0,    21,     9,     1,     3,     4,    21,
+      15,    12,     7,     8,    19,    20,    12,     3,     4,    15,
+      16,    17,     7,     8,     3,     4,    47,     7,    49,     7,
+       8,    52,    53,    54,     8,     4,    18,     5,    10,     3,
+       3,    12,     4,     3,     3,    66,     4,     4,     3,    70,
+      71,    12,     4,     3,     3,   126,    12,     3,    12,    12,
+      27,    12,   125,     6,    12,    12,    10,    -1,    78,    11
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint8 yystos[] =
+{
+       0,     0,     1,     4,     6,    13,    14,    21,    23,    35,
+      36,    37,    38,    68,    69,    36,     1,    24,     3,     4,
+      47,    48,    50,    47,     0,    35,    68,    36,     9,    36,
+       7,     8,    39,    40,    43,    36,    12,     5,    19,    54,
+       3,     4,    12,    15,    16,    17,    49,     1,    39,     1,
+      10,    70,    71,    41,    44,     7,     8,    25,    56,    57,
+      55,     5,    18,    51,    36,    36,    71,    36,    36,    36,
+      42,    45,     3,     3,    59,     4,    67,     3,    58,    52,
+      53,    36,    36,    36,    26,    60,     3,     4,    15,    19,
+      20,    67,     3,     4,    12,    12,    27,    61,     3,     4,
+      28,    62,    12,    12,    29,    63,     3,     3,    30,    64,
+      12,    12,    31,    65,     3,     3,     4,    66,    32,    12,
+      33,     7,     8,    46,    12,    34,    70
+};
+
+#define yyerrok		(yyerrstatus = 0)
+#define yyclearin	(yychar = YYEMPTY)
+#define YYEMPTY		(-2)
+#define YYEOF		0
+
+#define YYACCEPT	goto yyacceptlab
+#define YYABORT		goto yyabortlab
+#define YYERROR		goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  However,
+   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
+   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+   discussed.  */
+
+#define YYFAIL		goto yyerrlab
+#if defined YYFAIL
+  /* This is here to suppress warnings from the GCC cpp's
+     -Wunused-macros.  Normally we don't worry about that warning, but
+     some users do, and we want to make it easy for users to remove
+     YYFAIL uses, which will produce warnings from Bison 2.5.  */
+#endif
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)					\
+do								\
+  if (yychar == YYEMPTY && yylen == 1)				\
+    {								\
+      yychar = (Token);						\
+      yylval = (Value);						\
+      YYPOPSTACK (1);						\
+      goto yybackup;						\
+    }								\
+  else								\
+    {								\
+      yyerror (pb, YY_("syntax error: cannot back up")); \
+      YYERROR;							\
+    }								\
+while (YYID (0))
+
+
+#define YYTERROR	1
+#define YYERRCODE	256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)				\
+    do									\
+      if (YYID (N))                                                    \
+	{								\
+	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
+	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
+	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
+	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
+	}								\
+      else								\
+	{								\
+	  (Current).first_line   = (Current).last_line   =		\
+	    YYRHSLOC (Rhs, 0).last_line;				\
+	  (Current).first_column = (Current).last_column =		\
+	    YYRHSLOC (Rhs, 0).last_column;				\
+	}								\
+    while (YYID (0))
+#endif
+
+
+/* This macro is provided for backward compatibility. */
+
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, YYLEX_PARAM)
+#else
+# define YYLEX yylex (&yylval, pb)
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)			\
+do {						\
+  if (yydebug)					\
+    YYFPRINTF Args;				\
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
+do {									  \
+  if (yydebug)								  \
+    {									  \
+      YYFPRINTF (stderr, "%s ", Title);					  \
+      yy_symbol_print (stderr,						  \
+		  Type, Value, pb); \
+      YYFPRINTF (stderr, "\n");						  \
+    }									  \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, FASTQParseBlock* pb)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep, pb)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+    FASTQParseBlock* pb;
+#endif
+{
+  if (!yyvaluep)
+    return;
+  YYUSE (pb);
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+	break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, FASTQParseBlock* pb)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep, pb)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+    FASTQParseBlock* pb;
+#endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep, pb);
+  YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+#else
+static void
+yy_stack_print (yybottom, yytop)
+    yytype_int16 *yybottom;
+    yytype_int16 *yytop;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; yybottom <= yytop; yybottom++)
+    {
+      int yybot = *yybottom;
+      YYFPRINTF (stderr, " %d", yybot);
+    }
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)				\
+do {								\
+  if (yydebug)							\
+    yy_stack_print ((Bottom), (Top));				\
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule, FASTQParseBlock* pb)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule, pb)
+    YYSTYPE *yyvsp;
+    int yyrule;
+    FASTQParseBlock* pb;
+#endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+	     yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+		       &(yyvsp[(yyi + 1) - (yynrhs)])
+		       		       , pb);
+      YYFPRINTF (stderr, "\n");
+    }
+}
+
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yydebug)				\
+    yy_reduce_print (yyvsp, Rule, pb); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef	YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
+{
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+	switch (*++yyp)
+	  {
+	  case '\'':
+	  case ',':
+	    goto do_not_strip_quotes;
+
+	  case '\\':
+	    if (*++yyp != '\\')
+	      goto do_not_strip_quotes;
+	    /* Fall through.  */
+	  default:
+	    if (yyres)
+	      yyres[yyn] = *yyp;
+	    yyn++;
+	    break;
+
+	  case '"':
+	    if (yyres)
+	      yyres[yyn] = '\0';
+	    return yyn;
+	  }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+   about the unexpected token YYTOKEN for the state stack whose top is
+   YYSSP.
+
+   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
+   not large enough to hold the message.  In that case, also set
+   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
+   required number of bytes is too large to store.  */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+                yytype_int16 *yyssp, int yytoken)
+{
+  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
+  YYSIZE_T yysize = yysize0;
+  YYSIZE_T yysize1;
+  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+  /* Internationalized format string. */
+  const char *yyformat = 0;
+  /* Arguments of yyformat. */
+  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+  /* Number of reported tokens (one for the "unexpected", one per
+     "expected"). */
+  int yycount = 0;
+
+  /* There are many possibilities here to consider:
+     - Assume YYFAIL is not used.  It's too flawed to consider.  See
+       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+       for details.  YYERROR is fine as it does not invoke this
+       function.
+     - If this state is a consistent state with a default action, then
+       the only way this function was invoked is if the default action
+       is an error action.  In that case, don't check for expected
+       tokens because there are none.
+     - The only way there can be no lookahead present (in yychar) is if
+       this state is a consistent state with a default action.  Thus,
+       detecting the absence of a lookahead is sufficient to determine
+       that there is no unexpected or expected token to report.  In that
+       case, just report a simple "syntax error".
+     - Don't assume there isn't a lookahead just because this state is a
+       consistent state with a default action.  There might have been a
+       previous inconsistent state, consistent state with a non-default
+       action, or user semantic action that manipulated yychar.
+     - Of course, the expected token list depends on states to have
+       correct lookahead information, and it depends on the parser not
+       to perform extra reductions after fetching a lookahead from the
+       scanner and before detecting a syntax error.  Thus, state merging
+       (from LALR or IELR) and default reductions corrupt the expected
+       token list.  However, the list is correct for canonical LR with
+       one exception: it will still contain any token that will not be
+       accepted due to an error action in a later state.
+  */
+  if (yytoken != YYEMPTY)
+    {
+      int yyn = yypact[*yyssp];
+      yyarg[yycount++] = yytname[yytoken];
+      if (!yypact_value_is_default (yyn))
+        {
+          /* Start YYX at -YYN if negative to avoid negative indexes in
+             YYCHECK.  In other words, skip the first -YYN actions for
+             this state because they are default actions.  */
+          int yyxbegin = yyn < 0 ? -yyn : 0;
+          /* Stay within bounds of both yycheck and yytname.  */
+          int yychecklim = YYLAST - yyn + 1;
+          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+          int yyx;
+
+          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+                && !yytable_value_is_error (yytable[yyx + yyn]))
+              {
+                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+                  {
+                    yycount = 1;
+                    yysize = yysize0;
+                    break;
+                  }
+                yyarg[yycount++] = yytname[yyx];
+                yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+                if (! (yysize <= yysize1
+                       && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+                  return 2;
+                yysize = yysize1;
+              }
+        }
+    }
+
+  switch (yycount)
+    {
+# define YYCASE_(N, S)                      \
+      case N:                               \
+        yyformat = S;                       \
+      break
+      YYCASE_(0, YY_("syntax error"));
+      YYCASE_(1, YY_("syntax error, unexpected %s"));
+      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+    }
+
+  yysize1 = yysize + yystrlen (yyformat);
+  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+    return 2;
+  yysize = yysize1;
+
+  if (*yymsg_alloc < yysize)
+    {
+      *yymsg_alloc = 2 * yysize;
+      if (! (yysize <= *yymsg_alloc
+             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+      return 1;
+    }
+
+  /* Avoid sprintf, as that infringes on the user's name space.
+     Don't have undefined behavior even if the translation
+     produced a string with the wrong number of "%s"s.  */
+  {
+    char *yyp = *yymsg;
+    int yyi = 0;
+    while ((*yyp = *yyformat) != '\0')
+      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
+        {
+          yyp += yytnamerr (yyp, yyarg[yyi++]);
+          yyformat += 2;
+        }
+      else
+        {
+          yyp++;
+          yyformat++;
+        }
+  }
+  return 0;
+}
+#endif /* YYERROR_VERBOSE */
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, FASTQParseBlock* pb)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep, pb)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+    FASTQParseBlock* pb;
+#endif
+{
+  YYUSE (yyvaluep);
+  YYUSE (pb);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+	break;
+    }
+}
+
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (FASTQParseBlock* pb);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+/*----------.
+| yyparse.  |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (FASTQParseBlock* pb)
+#else
+int
+yyparse (pb)
+    FASTQParseBlock* pb;
+#endif
+#endif
+{
+/* The lookahead symbol.  */
+int yychar;
+
+/* The semantic value of the lookahead symbol.  */
+YYSTYPE yylval;
+
+    /* Number of syntax errors so far.  */
+    int yynerrs;
+
+    int yystate;
+    /* Number of tokens to shift before error messages enabled.  */
+    int yyerrstatus;
+
+    /* The stacks and their tools:
+       `yyss': related to states.
+       `yyvs': related to semantic values.
+
+       Refer to the stacks thru separate pointers, to allow yyoverflow
+       to reallocate them elsewhere.  */
+
+    /* The state stack.  */
+    yytype_int16 yyssa[YYINITDEPTH];
+    yytype_int16 *yyss;
+    yytype_int16 *yyssp;
+
+    /* The semantic value stack.  */
+    YYSTYPE yyvsa[YYINITDEPTH];
+    YYSTYPE *yyvs;
+    YYSTYPE *yyvsp;
+
+    YYSIZE_T yystacksize;
+
+  int yyn;
+  int yyresult;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yytoken;
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  yytoken = 0;
+  yyss = yyssa;
+  yyvs = yyvsa;
+  yystacksize = YYINITDEPTH;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY; /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+	/* Give user a chance to reallocate the stack.  Use copies of
+	   these so that the &'s don't force the real ones into
+	   memory.  */
+	YYSTYPE *yyvs1 = yyvs;
+	yytype_int16 *yyss1 = yyss;
+
+	/* Each stack pointer address is followed by the size of the
+	   data in use in that stack, in bytes.  This used to be a
+	   conditional around just the two extra args, but that might
+	   be undefined if yyoverflow is a macro.  */
+	yyoverflow (YY_("memory exhausted"),
+		    &yyss1, yysize * sizeof (*yyssp),
+		    &yyvs1, yysize * sizeof (*yyvsp),
+		    &yystacksize);
+
+	yyss = yyss1;
+	yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+	goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+	yystacksize = YYMAXDEPTH;
+
+      {
+	yytype_int16 *yyss1 = yyss;
+	union yyalloc *yyptr =
+	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+	if (! yyptr)
+	  goto yyexhaustedlab;
+	YYSTACK_RELOCATE (yyss_alloc, yyss);
+	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+#  undef YYSTACK_RELOCATE
+	if (yyss1 != yyssa)
+	  YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+		  (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+	YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  if (yystate == YYFINAL)
+    YYACCEPT;
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     lookahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+  yyn = yypact[yystate];
+  if (yypact_value_is_default (yyn))
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yytable_value_is_error (yyn))
+        goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  /* Shift the lookahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 2:
+
+    { UNLEX; return 1; }
+    break;
+
+  case 3:
+
+    { UNLEX; return 1; }
+    break;
+
+  case 4:
+
+    { UNLEX; return 1; }
+    break;
+
+  case 5:
+
+    { GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+    break;
+
+  case 6:
+
+    { GrowTagLine(pb, &(yyvsp[(3) - (3)])); }
+    break;
+
+  case 7:
+
+    { GrowTagLine(pb, &(yyvsp[(5) - (5)])); }
+    break;
+
+  case 8:
+
+    { GrowTagLine(pb, &(yyvsp[(7) - (7)]));}
+    break;
+
+  case 9:
+
+    { GrowTagLine(pb, &(yyvsp[(9) - (9)])); }
+    break;
+
+  case 10:
+
+    { GrowTagLine(pb, &(yyvsp[(11) - (11)])); }
+    break;
+
+  case 11:
+
+    { GrowTagLine(pb, &(yyvsp[(13) - (13)])); }
+    break;
+
+  case 12:
+
+    { GrowTagLine(pb, &(yyvsp[(15) - (15)])); }
+    break;
+
+  case 13:
+
+    { GrowTagLine(pb, &(yyvsp[(17) - (17)])); }
+    break;
+
+  case 14:
+
+    { FASTQScan_inline_sequence(pb); }
+    break;
+
+  case 15:
+
+    { FASTQScan_inline_quality(pb); }
+    break;
+
+  case 16:
+
+    { UNLEX; return 1; }
+    break;
+
+  case 17:
+
+    { UNLEX; return 1; }
+    break;
+
+  case 18:
+
+    { return 0; }
+    break;
+
+  case 27:
+
+    { pb->record->seq.is_colorspace = false; }
+    break;
+
+  case 28:
+
+    { pb->record->seq.is_colorspace = true; }
+    break;
+
+  case 29:
+
+    { SetRead(pb, & (yyvsp[(1) - (1)])); }
+    break;
+
+  case 31:
+
+    { SetRead(pb, & (yyvsp[(2) - (2)])); }
+    break;
+
+  case 33:
+
+    { SetRead(pb, & (yyvsp[(1) - (1)])); }
+    break;
+
+  case 35:
+
+    { SetRead(pb, & (yyvsp[(2) - (2)])); }
+    break;
+
+  case 37:
+
+    { SetRead(pb, & (yyvsp[(1) - (1)])); pb->record->seq.is_colorspace = false; }
+    break;
+
+  case 38:
+
+    { SetRead(pb, & (yyvsp[(1) - (1)])); pb->record->seq.is_colorspace = true; }
+    break;
+
+  case 41:
+
+    { StopSpotName(pb); }
+    break;
+
+  case 43:
+
+    { GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+    break;
+
+  case 44:
+
+    { GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+    break;
+
+  case 45:
+
+    { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+    break;
+
+  case 46:
+
+    { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+    break;
+
+  case 47:
+
+    { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+    break;
+
+  case 48:
+
+    { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+    break;
+
+  case 49:
+
+    { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+    break;
+
+  case 50:
+
+    { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+    break;
+
+  case 51:
+
+    { GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+    break;
+
+  case 52:
+
+    { SetSpotGroup(pb, &(yyvsp[(3) - (3)]));  GrowTagLine(pb, &(yyvsp[(3) - (3)])); }
+    break;
+
+  case 53:
+
+    { GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+    break;
+
+  case 54:
+
+    { SetSpotGroup(pb, &(yyvsp[(3) - (3)]));  GrowTagLine(pb, &(yyvsp[(3) - (3)])); }
+    break;
+
+  case 56:
+
+    { GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+    break;
+
+  case 57:
+
+    { SetReadNumber(pb, &(yyvsp[(3) - (3)])); GrowTagLine(pb, &(yyvsp[(3) - (3)])); }
+    break;
+
+  case 58:
+
+    { GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+    break;
+
+  case 60:
+
+    { GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+    break;
+
+  case 62:
+
+    { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+    break;
+
+  case 64:
+
+    { SetReadNumber(pb, &(yyvsp[(1) - (1)])); GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+    break;
+
+  case 65:
+
+    { GrowTagLine(pb, &(yyvsp[(3) - (3)])); }
+    break;
+
+  case 66:
+
+    { GrowTagLine(pb, &(yyvsp[(5) - (5)])); if ((yyvsp[(5) - (5)]).tokenLength == 1 && (yyvsp[(5) - (5)]).tokenText[0] == 'Y') pb->record->seq.lowQuality = true; }
+    break;
+
+  case 67:
+
+    { GrowTagLine(pb, &(yyvsp[(7) - (7)])); }
+    break;
+
+  case 68:
+
+    { GrowTagLine(pb, &(yyvsp[(9) - (9)])); }
+    break;
+
+  case 69:
+
+    { GrowTagLine(pb, &(yyvsp[(11) - (11)])); }
+    break;
+
+  case 71:
+
+    { SetSpotGroup(pb, &(yyvsp[(1) - (1)])); GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+    break;
+
+  case 72:
+
+    { SetSpotGroup(pb, &(yyvsp[(1) - (1)])); GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+    break;
+
+  case 74:
+
+    { GrowTagLine(pb, &(yyvsp[(1) - (1)])); }
+    break;
+
+  case 75:
+
+    { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+    break;
+
+  case 76:
+
+    { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+    break;
+
+  case 77:
+
+    { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+    break;
+
+  case 78:
+
+    { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+    break;
+
+  case 79:
+
+    { GrowTagLine(pb, &(yyvsp[(2) - (2)])); }
+    break;
+
+  case 86:
+
+    {  AddQuality(pb, & (yyvsp[(1) - (1)])); }
+    break;
+
+
+
+      default: break;
+    }
+  /* User semantic actions sometimes alter yychar, and that requires
+     that yytoken be updated with the new translation.  We take the
+     approach of translating immediately before every use of yytoken.
+     One alternative is translating here after every semantic action,
+     but that translation would be missed if the semantic action invokes
+     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
+     incorrect destructor might then be invoked immediately.  In the
+     case of YYERROR or YYBACKUP, subsequent parser actions might lead
+     to an incorrect destructor call or verbose syntax error message
+     before the lookahead is translated.  */
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* Make sure we have latest lookahead translation.  See comments at
+     user semantic actions for why this is necessary.  */
+  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (pb, YY_("syntax error"));
+#else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+                                        yyssp, yytoken)
+      {
+        char const *yymsgp = YY_("syntax error");
+        int yysyntax_error_status;
+        yysyntax_error_status = YYSYNTAX_ERROR;
+        if (yysyntax_error_status == 0)
+          yymsgp = yymsg;
+        else if (yysyntax_error_status == 1)
+          {
+            if (yymsg != yymsgbuf)
+              YYSTACK_FREE (yymsg);
+            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+            if (!yymsg)
+              {
+                yymsg = yymsgbuf;
+                yymsg_alloc = sizeof yymsgbuf;
+                yysyntax_error_status = 2;
+              }
+            else
+              {
+                yysyntax_error_status = YYSYNTAX_ERROR;
+                yymsgp = yymsg;
+              }
+          }
+        yyerror (pb, yymsgp);
+        if (yysyntax_error_status == 2)
+          goto yyexhaustedlab;
+      }
+# undef YYSYNTAX_ERROR
+#endif
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse lookahead token after an
+	 error, discard it.  */
+
+      if (yychar <= YYEOF)
+	{
+	  /* Return failure if at end of input.  */
+	  if (yychar == YYEOF)
+	    YYABORT;
+	}
+      else
+	{
+	  yydestruct ("Error: discarding",
+		      yytoken, &yylval, pb);
+	  yychar = YYEMPTY;
+	}
+    }
+
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (!yypact_value_is_default (yyn))
+	{
+	  yyn += YYTERROR;
+	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+	    {
+	      yyn = yytable[yyn];
+	      if (0 < yyn)
+		break;
+	    }
+	}
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+	YYABORT;
+
+
+      yydestruct ("Error: popping",
+		  yystos[yystate], yyvsp, pb);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#if !defined(yyoverflow) || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (pb, YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+  if (yychar != YYEMPTY)
+    {
+      /* Make sure we have latest lookahead translation.  See comments at
+         user semantic actions for why this is necessary.  */
+      yytoken = YYTRANSLATE (yychar);
+      yydestruct ("Cleanup: discarding lookahead",
+                  yytoken, &yylval, pb);
+    }
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+		  yystos[*yyssp], yyvsp, pb);
+      YYPOPSTACK (1);
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+
+
+
+
+
+static
+void GrowByteBuffer(KDataBuffer* self, const char* buf, uint64_t length)
+{
+    uint64_t oldSize = self->elem_count;
+    KDataBufferResize( self, oldSize + length );
+    memcpy( (char*)self->base + oldSize, buf, length );
+}
+
+void AddQuality(FASTQParseBlock* pb, const FASTQToken* token)
+{
+    if (pb->phredOffset != 0)
+    {
+        uint8_t floor   = pb->phredOffset == 33 ? MIN_PHRED_33 : MIN_PHRED_64;
+        uint8_t ceiling = pb->phredOffset == 33 ? MAX_PHRED_33 : MAX_PHRED_64;
+        unsigned int i;
+        for (i=0; i < token->tokenLength; ++i)
+        {
+            char buf[200];
+            if (token->tokenText[i] < floor || token->tokenText[i] > ceiling)
+            {
+                sprintf(buf, "Invalid quality value (%d): for %s, valid range is from %d to %d.", 
+                                                         token->tokenText[i],
+                                                         pb->phredOffset == 33 ? "Phred33": "Phred64", 
+                                                         floor, 
+                                                         ceiling);
+                pb->fatalError = true;
+                yyerror(pb, buf);
+                return;
+            }
+        }
+    }
+    GrowByteBuffer( & pb->quality, token->tokenText, token->tokenLength);
+}
+
+void SetReadNumber(FASTQParseBlock* pb, const FASTQToken* token)
+{
+    if (token->tokenLength == 1)
+    {
+        switch (token->tokenText[0])
+        {
+        case '1': pb->record->seq.readnumber = 1; return;
+        case '2': pb->record->seq.readnumber = 2; return;
+        }
+    }
+    pb->record->seq.readnumber = pb->defaultReadNumber;
+}
+
+void GrowTagLine(FASTQParseBlock* pb, const FASTQToken* token)
+{
+    /* TODO: move tagline to FileReader, move this function to fastq-reader.c */
+
+    /* grow the buffer as necessary*/
+    uint64_t oldSize = pb->tagLine.elem_count;
+    KDataBufferResize( & pb->tagLine, oldSize + token->tokenLength);
+    string_copy((char*)pb->tagLine.base + oldSize, pb->tagLine.elem_count - oldSize, token->tokenText, token->tokenLength);
+    
+    if (!pb->spotNameDone)
+        pb->spotNameLength = pb->tagLine.elem_count;
+}
+
+void StopSpotName(FASTQParseBlock* pb)
+{   /* spot name is the current content of the tag line (there may be more tokens coming, they will not be a part of the spot name) */
+    pb->spotNameDone = true;
+}
+
+void SetSpotGroup(FASTQParseBlock* pb, const FASTQToken* token)
+{
+    if (token->tokenLength != 1 || token->tokenText[0] != '0') /* ignore spot group 0 */
+    {
+        pb->spotGroupOffset = pb->tagLine.elem_count;    
+        pb->spotGroupLength = token->tokenLength;
+    }
+}
+
+void SetRead(FASTQParseBlock* pb, const FASTQToken* token)
+{ 
+    if (pb->record->seq.read)
+    {
+        pb->record->seq.read = (char*)realloc(pb->record->seq.read, strlen(pb->record->seq.read) + 1 + token->tokenLength + 1);
+        strcat(pb->record->seq.read, token->tokenText); 
+        ++pb->expectedQualityLines;
+    }
+    else
+    {
+        pb->record->seq.read = (char*)malloc(token->tokenLength+1);
+        strcpy(pb->record->seq.read, token->tokenText); 
+        pb->expectedQualityLines = 1;
+    }
+}
+
diff --git a/tools/fastq-loader/fastq-grammar.y b/tools/fastq-loader/fastq-grammar.y
new file mode 100644
index 0000000..66c36ef
--- /dev/null
+++ b/tools/fastq-loader/fastq-grammar.y
@@ -0,0 +1,294 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+ 
+%{  
+    #include <ctype.h>
+    #include <stdlib.h>
+
+	#include "fastq-parse.h"
+
+   	#define YYSTYPE FASTQToken
+    #define YYLEX_PARAM pb->scanner
+    #define YYDEBUG 1
+
+	#include "fastq-tokens.h"
+
+    static uint64_t string_touint(const char* str, size_t length);
+    static void AddBinaryQuality(FASTQParseBlock* pb, int8_t value);
+    static void SetReadNumber(FASTQParseBlock* pb, const FASTQToken* token);
+    static void SetTagLine(FASTQParseBlock* pb, const char* start, size_t length, const FASTQToken* coords);
+    static void SetSpotGroup(FASTQParseBlock* pb, const FASTQToken* token);
+
+%}
+
+%pure-parser
+%parse-param {FASTQParseBlock* pb }
+%lex-param {FASTQParseBlock* pb }
+
+%name-prefix="FASTQ_"
+
+%token fqNUMBER
+%token fqALPHANUM
+%token fqWS
+%token fqENDLINE
+%token fqBASESEQ
+%token fqCOLORSEQ
+%token fqTOKEN
+%token fqASC33QUAL
+%token fqASC64QUAL
+%token fqUNRECOGNIZED
+%token fqENDOFTEXT 0
+
+%%
+
+sequence
+    : readLines qualityLines    { return 1; }
+    | readLines                 { if (yychar != YYEMPTY && yychar != YYEOF) FASTQ_unlex(pb, & yylval); return 1; }
+    | readQualityLines          { return 1; }
+    | qualityLines              { return 1; } 
+    | name ':' coords ':'           { FASTQScan_inline_sequence(pb); } 
+                 read ':'           { FASTQScan_inline_quality(pb); } 
+                 quality endline    { return 1; }
+    | name error endline        { return 1; }
+    | endfile                   { return 0; }
+    ;
+
+endfile
+    : fqENDOFTEXT
+    | endline fqENDOFTEXT
+    | endline endfile
+    ;
+
+endline
+    : fqENDLINE
+    ;
+
+readLines
+    : header  endline  read endline  
+    | qheader endline  read endline  
+    | header  endline error endline
+    | error   endline  read endline
+    ;
+
+readQualityLines
+    : qheader endline quality endline
+    | qheader endline   error endline
+    ;
+
+read
+    : fqBASESEQ                  { pb->record->seq.read = string_dup($1.tokenText, $1.tokenLength); pb->record->seq.is_colorspace = false; }
+    | fqCOLORSEQ                 { pb->record->seq.read = string_dup($1.tokenText, $1.tokenLength); pb->record->seq.is_colorspace = true; }
+    ;
+
+header 
+    : headerStart tagLine;
+
+headerStart
+    : '@' { pb->tagStart = $1.tokenText + 1; }
+    ;
+
+qheader 
+    : qheaderStart tagLine;
+
+qheaderStart
+    : '>' { pb->tagStart = $1.tokenText + 1; }
+    ;
+
+tagLine    
+    : name ':' coords tail  { SetTagLine(pb, $1.tokenText, $1.tokenLength + $2.tokenLength + $3.tokenLength + $4.tokenLength, &$3); }  
+    | name ':' coords       { SetTagLine(pb, $1.tokenText, $1.tokenLength + $2.tokenLength + $3.tokenLength, &$3); }  
+    | name                  { SetTagLine(pb, $1.tokenText, $1.tokenLength, 0); /* coords may be embbedded in the name with '_' as the separator */ }
+    | coords tail           { SetTagLine(pb, $1.tokenText, $1.tokenLength + $2.tokenLength, &$1); }  
+    | coords                { SetTagLine(pb, $1.tokenText, $1.tokenLength, &$1); }  
+    ;
+
+name
+    : fqALPHANUM        { $$ = $1; }
+    | name '_'          { $$ = $1; $$.tokenLength += $2.tokenLength; }
+    | name '-'          { $$ = $1; $$.tokenLength += $2.tokenLength; }
+    | name fqALPHANUM   { $$ = $1; $$.tokenLength += $2.tokenLength; }
+    | name fqNUMBER     { $$ = $1; $$.tokenLength += $2.tokenLength; }
+    ;
+
+coords
+    : fqNUMBER ':' fqNUMBER ':' signedNumber ':' signedNumber 
+        { $$ = $1; $$.tokenLength += ($2.tokenLength + $3.tokenLength + $4.tokenLength + $5.tokenLength + $6.tokenLength + $7.tokenLength); }
+    ;
+
+signedNumber
+    : '+' fqNUMBER  { pb->signedNumber =    (int8_t)string_touint($2.tokenText, $2.tokenLength); }
+    | '-' fqNUMBER  { pb->signedNumber =  - (int8_t)string_touint($2.tokenText, $2.tokenLength); }
+    | fqNUMBER      { pb->signedNumber =    (int8_t)string_touint($1.tokenText, $1.tokenLength); }
+    ;
+
+tail
+    : tailPiece
+    | tail tailPiece
+    ;
+
+tailPiece
+    : ':'                           { $$ = $1; }
+    | ':' fqNUMBER                  { $$ = $1; $$.tokenLength += $2.tokenLength; }
+    | '.' fqNUMBER                  { $$ = $1; $$.tokenLength += $2.tokenLength; }
+    
+    | '#' fqNUMBER                  { $$ = $1; $$.tokenLength += $2.tokenLength; SetSpotGroup(pb, & $2); }
+    | '#' fqALPHANUM                { $$ = $1; $$.tokenLength += $2.tokenLength; SetSpotGroup(pb, & $2); }
+    | '/' fqNUMBER                  { $$ = $1; $$.tokenLength += $2.tokenLength; SetReadNumber(pb, & $2); }
+
+    | fqWS fqALPHANUM '=' value     { $$ = $1; $$.tokenLength += ($2.tokenLength + $3.tokenLength + $4.tokenLength); }
+    ;
+
+value
+    : anyToken                      
+    | value anyToken                { $$ = $1; $$.tokenLength += $2.tokenLength; }
+    ;
+
+anyToken
+    : fqNUMBER
+    | fqALPHANUM
+    |'_'
+    ;
+
+qualityLines
+    : qualityHeader endline quality endline
+    | qualityHeader endline error endline
+    ;
+
+qualityHeader
+    : '+'                 
+    | qualityHeader fqTOKEN
+    ;
+
+quality
+    : fqASC33QUAL                { 
+                                    pb->record->seq.qualityBase     = 33; 
+                                    pb->record->seq.qualityType     = QT_Phred; 
+                                    pb->record->seq.quality         = (int8_t*)string_dup($1.tokenText, $1.tokenLength); 
+                                    pb->record->seq.qualityLength   = $1.tokenLength;
+                                 }
+    | fqASC64QUAL                { 
+                                    pb->record->seq.qualityBase     = 64; 
+                                    pb->record->seq.qualityType     = QT_Phred; 
+                                    pb->record->seq.quality         = (int8_t*)string_dup($1.tokenText, $1.tokenLength); 
+                                    pb->record->seq.qualityLength   = $1.tokenLength;
+                                 }
+    | decList                    {  /*consume the quality buffer */
+                                    pb->record->seq.qualityBase     = 0; 
+                                    pb->record->seq.qualityType     = QT_LogOdds; 
+                                    pb->record->seq.quality         = pb->quality.buffer; 
+                                    pb->record->seq.qualityLength   = pb->quality.curIdx;
+                                    pb->quality.buffer = 0; 
+                                    pb->quality.curIdx = 0;
+                                 }
+    ;
+
+decList
+    : signedNumber              { AddBinaryQuality(pb, (int8_t)pb->signedNumber); }
+    | decList signedNumber      { AddBinaryQuality(pb, (int8_t)pb->signedNumber); }
+    | decList ',' signedNumber  { AddBinaryQuality(pb, (int8_t)pb->signedNumber); }
+    ;
+
+%%
+
+static
+uint64_t string_touint(const char* str, size_t length)
+{
+    size_t i;
+    uint64_t ret = 0;
+    for (i = 0; i < length; ++i)
+    {
+        if (isdigit(str[i]))
+        {
+            ret = ret*10 + (str[i] - '0');
+        }
+    }
+    return ret;
+}
+
+void AddBinaryQuality(FASTQParseBlock* pb, int8_t value)
+{
+    #define ChunkSize 128
+
+    if (pb->quality.buffer == 0) 
+    {   /* allocate based on the size of the previous buffer, if any */
+        if (pb->quality.bufLen == 0)
+        {
+            pb->quality.bufLen = ChunkSize;
+        }
+        pb->quality.buffer = (int8_t*)malloc(pb->quality.bufLen);
+        pb->quality.curIdx = 0;
+    }
+    else if (pb->quality.curIdx == pb->quality.bufLen)
+    {   /* grow the buffer */
+        pb->quality.bufLen += ChunkSize;
+        pb->quality.buffer = (int8_t*)realloc(pb->quality.buffer, pb->quality.bufLen);
+    }
+    pb->quality.buffer[pb->quality.curIdx] = value;
+    ++ pb->quality.curIdx;
+
+    #undef ChunkSize
+}
+
+void SetReadNumber(FASTQParseBlock* pb, const FASTQToken* token)
+{
+    if (token->tokenLength == 1)
+    {
+        switch (token->tokenText[0])
+        {
+        case '1': pb->record->seq.readnumber = 1; return;
+        case '2': pb->record->seq.readnumber = 2; return;
+        }
+    }
+    pb->record->seq.readnumber = 0;
+}
+
+void SetTagLine(FASTQParseBlock* pb, const char* start, size_t length, const FASTQToken* coords)
+{
+    pb->record->seq.tagline = string_dup(start, length);
+    if (coords != 0)
+    {   /* assumes that a buffer switch can only happen at a line boundary*/ 
+        StringInit(& pb->record->seq.spotname, pb->record->seq.tagline, coords->tokenText - start + coords->tokenLength + 1, coords->tokenText - start + coords->tokenLength);
+    }
+    else
+    {
+        StringInit(& pb->record->seq.spotname, pb->record->seq.tagline, length + 1, length);
+    }
+    if (pb->spotGroupOffset != 0)
+    {
+        StringInit(& pb->record->seq.spotgroup, pb->record->seq.tagline + pb->spotGroupOffset, pb->spotGroupLength, pb->spotGroupLength);
+        pb->spotGroupOffset = 0;
+    }
+    else
+    {
+        StringInit(& pb->record->seq.spotgroup, 0, 0, 0);
+    }
+}
+
+void SetSpotGroup(FASTQParseBlock* pb, const FASTQToken* token)
+{
+    pb->spotGroupOffset = token->tokenText - pb->tagStart;    
+    pb->spotGroupLength = token->tokenLength;
+}
diff --git a/tools/fastq-loader/fastq-lex.c b/tools/fastq-loader/fastq-lex.c
new file mode 100644
index 0000000..c8b018d
--- /dev/null
+++ b/tools/fastq-loader/fastq-lex.c
@@ -0,0 +1,2418 @@
+
+
+#define  YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with  platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types. 
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t; 
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN               (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN              (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN              (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX               (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX              (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX              (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX              (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX             (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX             (4294967295U)
+#endif
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else	/* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif	/* defined (__STDC__) */
+#endif	/* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index.  If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* An opaque pointer. */
+#ifndef YY_TYPEDEF_YY_SCANNER_T
+#define YY_TYPEDEF_YY_SCANNER_T
+typedef void* yyscan_t;
+#endif
+
+/* For convenience, these vars (plus the bison vars far below)
+   are macros in the reentrant scanner. */
+#define yyin yyg->yyin_r
+#define yyout yyg->yyout_r
+#define yyextra yyg->yyextra_r
+#define yyleng yyg->yyleng_r
+#define yytext yyg->yytext_r
+#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)
+#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
+#define yy_flex_debug yyg->yy_flex_debug_r
+
+/* Enter a start condition.  This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN yyg->yy_start = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state.  The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START ((yyg->yy_start - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE FASTQ_restart(yyin ,yyscanner )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+    /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
+     *       access to the local variable yy_act. Since yyless() is a macro, it would break
+     *       existing scanners that call yyless() from OUTSIDE FASTQ_lex. 
+     *       One obvious solution it to make yy_act a global. I tried that, and saw
+     *       a 5% performance hit in a non-yylineno scanner, because yy_act is
+     *       normally declared as a register variable-- so it is not worth it.
+     */
+    #define  YY_LESS_LINENO(n) \
+            do { \
+                int yyl;\
+                for ( yyl = n; yyl < yyleng; ++yyl )\
+                    if ( yytext[yyl] == '\n' )\
+                        --yylineno;\
+            }while(0)
+    
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		*yy_cp = yyg->yy_hold_char; \
+		YY_RESTORE_YY_MORE_OFFSET \
+		yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+		} \
+	while ( 0 )
+
+#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+	{
+	FILE *yy_input_file;
+
+	char *yy_ch_buf;		/* input buffer */
+	char *yy_buf_pos;		/* current position in input buffer */
+
+	/* Size of input buffer in bytes, not including room for EOB
+	 * characters.
+	 */
+	yy_size_t yy_buf_size;
+
+	/* Number of characters read into yy_ch_buf, not including EOB
+	 * characters.
+	 */
+	int yy_n_chars;
+
+	/* Whether we "own" the buffer - i.e., we know we created it,
+	 * and can realloc() it to grow it, and should free() it to
+	 * delete it.
+	 */
+	int yy_is_our_buffer;
+
+	/* Whether this is an "interactive" input source; if so, and
+	 * if we're using stdio for input, then we want to use getc()
+	 * instead of fread(), to make sure we stop fetching input after
+	 * each newline.
+	 */
+	int yy_is_interactive;
+
+	/* Whether we're considered to be at the beginning of a line.
+	 * If so, '^' rules will be active on the next match, otherwise
+	 * not.
+	 */
+	int yy_at_bol;
+
+    int yy_bs_lineno; /**< The line count. */
+    int yy_bs_column; /**< The column count. */
+    
+	/* Whether to try to fill the input buffer when we reach the
+	 * end of it.
+	 */
+	int yy_fill_buffer;
+
+	int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+	/* When an EOF's been seen but there's still some text to process
+	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+	 * shouldn't try reading from the input source any more.  We might
+	 * still have a bunch of tokens to match, though, because of
+	 * possible backing-up.
+	 *
+	 * When we actually see the EOF, we change the status to "new"
+	 * (via FASTQ_restart()), so that the user can continue scanning by
+	 * just pointing yyin at a new input file.
+	 */
+#define YY_BUFFER_EOF_PENDING 2
+
+	};
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \
+                          ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \
+                          : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
+
+void FASTQ_restart (FILE *input_file ,yyscan_t yyscanner );
+void FASTQ__switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
+YY_BUFFER_STATE FASTQ__create_buffer (FILE *file,int size ,yyscan_t yyscanner );
+void FASTQ__delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
+void FASTQ__flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner );
+void FASTQ_push_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner );
+void FASTQ_pop_buffer_state (yyscan_t yyscanner );
+
+static void FASTQ_ensure_buffer_stack (yyscan_t yyscanner );
+static void FASTQ__load_buffer_state (yyscan_t yyscanner );
+static void FASTQ__init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner );
+
+#define YY_FLUSH_BUFFER FASTQ__flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
+
+YY_BUFFER_STATE FASTQ__scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner );
+YY_BUFFER_STATE FASTQ__scan_string (yyconst char *yy_str ,yyscan_t yyscanner );
+YY_BUFFER_STATE FASTQ__scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner );
+
+void *FASTQ_alloc (yy_size_t ,yyscan_t yyscanner );
+void *FASTQ_realloc (void *,yy_size_t ,yyscan_t yyscanner );
+void FASTQ_free (void * ,yyscan_t yyscanner );
+
+#define yy_new_buffer FASTQ__create_buffer
+
+#define yy_set_interactive(is_interactive) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){ \
+        FASTQ_ensure_buffer_stack (yyscanner); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            FASTQ__create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+	}
+
+#define yy_set_bol(at_bol) \
+	{ \
+	if ( ! YY_CURRENT_BUFFER ){\
+        FASTQ_ensure_buffer_stack (yyscanner); \
+		YY_CURRENT_BUFFER_LVALUE =    \
+            FASTQ__create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
+	} \
+	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+	}
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+#define FASTQ_wrap(n) 1
+#define YY_SKIP_YYWRAP
+
+typedef unsigned char YY_CHAR;
+
+typedef int yy_state_type;
+
+#define yytext_ptr yytext_r
+
+static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state  ,yyscan_t yyscanner);
+static int yy_get_next_buffer (yyscan_t yyscanner );
+static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+	yyg->yytext_ptr = yy_bp; \
+	yyleng = (size_t) (yy_cp - yy_bp); \
+	yyg->yy_hold_char = *yy_cp; \
+	*yy_cp = '\0'; \
+	yyg->yy_c_buf_p = yy_cp;
+
+#define YY_NUM_RULES 27
+#define YY_END_OF_BUFFER 28
+/* This struct is not used in this scanner,
+   but its presence is necessary. */
+struct yy_trans_info
+	{
+	flex_int32_t yy_verify;
+	flex_int32_t yy_nxt;
+	};
+static yyconst flex_int16_t yy_acclist[175] =
+    {   0,
+       28,    9,   27,    6,    9,   27,   26,   27,    9,   26,
+       27,    5,    9,   27,    4,    5,    9,   27,    3,    9,
+       27,    9,   27,16391,    2,    9,   27,    1,    9,   27,
+        5,    9,   27,16391,    5,    9,   27,16391,    6,    9,
+       27,   10,   27,    9,   10,   27,   27,   27,   14,   27,
+       27,16397,   27,16395,16397,   27,16395,16397,   27,   18,
+       27,   18,   27,   22,   27,   19,   22,   27,   21,   27,
+       21,   22,   27,   22,   27,16404,   19,   22,   27,16404,
+       15,   27,   15,   27,   25,   27,   19,   25,   27,   24,
+       27,   24,   25,   27,   25,   27,16407,   19,   25,   27,
+
+    16407,    6,   26,    5,    4,    5, 8199, 8199,16391,16391,
+    16392,    5,16392,    5,16391,    6,   10,   10,   14, 8205,
+       14, 8205,16397, 8203, 8205,   14, 8203, 8205,16395,16397,
+    16395,16396,16397,16396,16397,   17,   17,   18,   19,   21,
+     8212, 8212,16404,   19,16404,   15,   15,   16,   16,   24,
+     8215, 8215,16407,   19,16407, 8199, 8200, 8199, 8200,16392,
+     8200, 8200, 8203, 8204, 8205,   14, 8203, 8204, 8205, 8204,
+     8205,   14, 8204, 8205
+    } ;
+
+static yyconst flex_int16_t yy_accept[113] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    2,    4,    7,    9,   12,   15,   19,
+       22,   25,   28,   31,   35,   39,   42,   44,   47,   48,
+       49,   51,   53,   56,   59,   60,   62,   64,   66,   69,
+       71,   74,   77,   81,   83,   85,   87,   90,   92,   95,
+       98,  102,  103,  104,  105,  107,  108,  109,  110,  112,
+      114,  116,  117,  118,  119,  119,  120,  122,  123,  124,
+      127,  129,  131,  134,  136,  136,  137,  139,  140,  141,
+      142,  143,  144,  146,  147,  149,  150,  151,  152,  153,
+
+      154,  156,  158,  160,  161,  162,  163,  167,  170,  173,
+      175,  175
+    } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    4,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    6,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    7,    5,    8,    9,    5,   10,   10,   10,
+       10,   11,   11,   11,   11,   11,   11,    5,    5,    5,
+        5,   12,    5,   13,   14,    8,   14,    8,    8,    8,
+       14,    8,    8,    8,    8,    8,    8,   15,    8,    8,
+        8,    8,    8,   14,    8,    8,    8,    8,    8,    8,
+        5,    5,    5,    5,    8,    5,   14,    8,   14,    8,
+
+        8,    8,   14,    8,    8,    8,    8,    8,    8,   15,
+        8,    8,    8,    8,    8,   14,    8,    8,    8,    8,
+        8,    8,    5,    5,    5,    5,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1
+    } ;
+
+static yyconst flex_int32_t yy_meta[16] =
+    {   0,
+        1,    1,    2,    2,    3,    3,    3,    4,    5,    4,
+        4,    3,    3,    6,    6
+    } ;
+
+static yyconst flex_int16_t yy_base[125] =
+    {   0,
+        0,    9,   23,   21,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   36,   16,   28,   50,   56,   54,    0,
+       69,   75,  172,  252,   59,  252,  168,    0,   23,  252,
+       63,  252,  252,   79,   75,   93,  252,  167,  252,  162,
+      252,   99,  103,   82,  161,  252,  160,  252,  107,  252,
+      159,  107,  117,    0,  105,  252,  120,  252,  150,  121,
+      125,  128,  252,    0,    0,  252,  149,  129,  132,  145,
+        0,    0,  252,  137,  113,  252,  252,  105,  155,  252,
+       95,    0,  157,  165,   83,  252,  252,  137,  252,  252,
+       77,  134,    0,    0,    0,  135,  252,  252,   71,  147,
+
+        0,  252,   61,  173,  252,   52,  252,   25,  252,   14,
+      252,  183,  189,  195,  201,  207,  210,  215,  221,  227,
+      233,  238,  240,  245
+    } ;
+
+static yyconst flex_int16_t yy_def[125] =
+    {   0,
+      111,    1,    1,    3,  112,  112,  112,  112,  112,  112,
+      112,  112,  112,  111,  113,  113,  114,  115,  112,   19,
+      116,  116,  111,  111,  111,  111,  111,  117,  117,  111,
+      118,  111,  111,  111,   34,  111,  111,  111,  111,  119,
+      111,  120,  120,   43,  121,  111,  121,  111,  111,  111,
+      111,  122,  122,  123,  123,  111,  111,  111,  111,  124,
+      124,  111,  111,  117,   29,  111,  111,  118,  111,  117,
+       35,   36,  111,  111,  119,  111,  111,  119,  120,  111,
+      119,   43,   43,   79,  121,  111,  111,  111,  111,  111,
+      111,  122,   53,  123,   55,  111,  111,  111,  111,  124,
+
+       61,  111,  111,  111,  111,  111,  111,  119,  111,  119,
+        0,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111
+    } ;
+
+static yyconst flex_int16_t yy_nxt[268] =
+    {   0,
+       24,   25,   26,   27,   24,   25,   24,   28,   24,   29,
+       29,   24,   24,   28,   28,   30,  109,   31,   46,   47,
+       32,   33,   34,   35,   36,   37,   38,  107,   36,   31,
+       46,   47,   65,   65,   34,   35,   40,   40,   41,   40,
+       42,   42,   42,   42,   43,   42,   42,   42,   42,   44,
+       43,   49,   50,   51,  105,   49,   48,   49,   50,   51,
+       62,   53,   54,  102,   62,   66,   67,   55,   54,   56,
+       57,   58,   59,   98,   61,   56,   57,   58,   59,   90,
+       61,   66,   67,   68,   64,   86,   64,   69,   70,   64,
+       83,   84,   71,   71,   72,   73,   74,   80,   72,   75,
+
+       75,   77,   78,   75,   75,   80,   81,   77,   88,   90,
+       91,   82,   88,   95,   96,   76,   82,   82,   88,   90,
+       91,   88,   93,   98,   99,   88,   88,   98,   99,   62,
+      101,   66,   67,   62,  102,  103,   90,   91,   88,   73,
+       69,  104,   88,   96,   96,   68,   68,  105,  106,   98,
+       99,   66,   97,  104,   70,   75,   75,   77,   78,  107,
+      108,   89,   87,   86,   76,   83,   84,  109,  110,   73,
+       63,  111,  111,   84,   84,  105,  106,  111,  111,  111,
+      111,  104,  104,   39,   39,   39,   39,   39,   39,   45,
+       45,   45,   45,   45,   45,   48,   48,   48,   48,   48,
+
+       48,   52,   52,   52,   52,   52,   52,   60,   60,   60,
+       60,   60,   60,   64,  111,   64,   68,  111,  111,   68,
+       68,   75,   75,   75,   75,   75,   75,   79,   79,   79,
+       79,   79,   79,   85,   85,   85,   85,   85,   85,   92,
+       92,   92,   92,   92,   94,   94,  100,  100,  100,  100,
+      100,   23,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111
+    } ;
+
+static yyconst flex_int16_t yy_chk[268] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    2,  110,    2,   15,   15,
+        2,    2,    2,    2,    3,    3,    3,  108,    3,    4,
+       16,   16,   29,   29,    4,    4,   14,   14,   14,   14,
+       14,   14,   14,   14,   14,   14,   14,   14,   14,   14,
+       14,   17,   17,   17,  106,   17,   18,   18,   18,   18,
+       25,   18,   19,  103,   25,   31,   31,   19,   19,   21,
+       21,   21,   21,   99,   21,   22,   22,   22,   22,   91,
+       22,   34,   34,   35,   35,   85,   34,   34,   34,   34,
+       44,   44,   34,   34,   36,   36,   36,   81,   36,   42,
+
+       42,   42,   42,   43,   43,   43,   43,   78,   49,   52,
+       52,   43,   49,   55,   55,   75,   43,   43,   53,   53,
+       53,   57,   53,   60,   60,   57,   61,   61,   61,   62,
+       61,   68,   68,   62,   69,   69,   92,   92,   88,   74,
+       69,   69,   88,   96,   96,   69,   69,   70,   70,  100,
+      100,   67,   59,   70,   70,   79,   79,   79,   79,   83,
+       83,   51,   47,   45,   40,   83,   83,   84,   84,   38,
+       27,   23,    0,   84,   84,  104,  104,    0,    0,    0,
+        0,  104,  104,  112,  112,  112,  112,  112,  112,  113,
+      113,  113,  113,  113,  113,  114,  114,  114,  114,  114,
+
+      114,  115,  115,  115,  115,  115,  115,  116,  116,  116,
+      116,  116,  116,  117,    0,  117,  118,    0,    0,  118,
+      118,  119,  119,  119,  119,  119,  119,  120,  120,  120,
+      120,  120,  120,  121,  121,  121,  121,  121,  121,  122,
+      122,  122,  122,  122,  123,  123,  124,  124,  124,  124,
+      124,  111,  111,  111,  111,  111,  111,  111,  111,  111,
+      111,  111,  111,  111,  111,  111,  111
+    } ;
+
+/* Table of booleans, true if rule could match eol. */
+static yyconst flex_int32_t yy_rule_can_match_eol[28] =
+    {   0,
+0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 
+    1, 1, 0, 1, 1, 0, 1, 0,     };
+
+#define YY_TRAILING_MASK 0x2000
+#define YY_TRAILING_HEAD_MASK 0x4000
+#define REJECT \
+{ \
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ \
+yy_cp = yyg->yy_full_match; /* restore poss. backed-over text */ \
+yyg->yy_lp = yyg->yy_full_lp; /* restore orig. accepting pos. */ \
+yyg->yy_state_ptr = yyg->yy_full_state; /* restore orig. state */ \
+yy_current_state = *yyg->yy_state_ptr; /* restore curr. state */ \
+++yyg->yy_lp; \
+goto find_rule; \
+}
+
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+    #include <ctype.h>
+    
+    #include <klib/rc.h>
+
+	#include "fastq-parse.h"
+	#include "fastq-tokens.h"    
+	
+    #define YYSTYPE FASTQToken
+
+    /* code to populate token with internal values */
+    #define YY_USER_ACTION              \
+        yylval -> tokenText		= yytext;	\
+        yylval -> tokenLength	= yyleng;	\
+        yylval -> line_no		= yylineno;	\
+        yylval -> column_no		= yyextra -> column; \
+        yyextra -> column += yyleng; \
+        yyextra -> length += yyleng; \
+        yyextra -> lastToken = yylval; 
+
+    #define ENDLINE \
+        yyextra -> column=1;\
+        return fqENDLINE;
+
+    #define YY_INPUT(buf, result, max_size) \
+        result = yyextra->input(yyextra, buf, max_size)
+
+    #define ECHO
+
+#define YY_NO_UNISTD_H 1
+/*%option debug*/
+
+/* there are more: =ACMGRSVTWYHKDBN. plus lowercase */
+
+#define INITIAL 0
+#define TAG_LINE 1
+#define SEE_COORDS 2
+#define PAST_COORDS 3
+#define READ_NUMBER 4
+#define NAMEVALUE 5
+#define IN_SEQUENCE 6
+#define QTAG_LINE 7
+#define IN_QUALITY 8
+#define INLINE_SEQUENCE 9
+#define INLINE_QUALITY 10
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#define YY_EXTRA_TYPE FASTQParseBlock*
+
+/* Holds the entire state of the reentrant scanner. */
+struct yyguts_t
+    {
+
+    /* User-defined. Not touched by flex. */
+    YY_EXTRA_TYPE yyextra_r;
+
+    /* The rest are the same as the globals declared in the non-reentrant scanner. */
+    FILE *yyin_r, *yyout_r;
+    size_t yy_buffer_stack_top; /**< index of top of stack. */
+    size_t yy_buffer_stack_max; /**< capacity of stack. */
+    YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */
+    char yy_hold_char;
+    int yy_n_chars;
+    int yyleng_r;
+    char *yy_c_buf_p;
+    int yy_init;
+    int yy_start;
+    int yy_did_buffer_switch_on_eof;
+    int yy_start_stack_ptr;
+    int yy_start_stack_depth;
+    int *yy_start_stack;
+    yy_state_type yy_last_accepting_state;
+    char* yy_last_accepting_cpos;
+
+    int yylineno_r;
+    int yy_flex_debug_r;
+
+    yy_state_type *yy_state_buf;
+    yy_state_type *yy_state_ptr;
+    char *yy_full_match;
+    int yy_lp;
+
+    /* These are only needed for trailing context rules,
+     * but there's no conditional variable for that yet. */
+    int yy_looking_for_trail_begin;
+    int yy_full_lp;
+    int *yy_full_state;
+
+    char *yytext_r;
+    int yy_more_flag;
+    int yy_more_len;
+
+    YYSTYPE * yylval_r;
+
+    }; /* end struct yyguts_t */
+
+static int yy_init_globals (yyscan_t yyscanner );
+
+    /* This must go here because YYSTYPE and YYLTYPE are included
+     * from bison output in section 1.*/
+    #    define yylval yyg->yylval_r
+    
+int FASTQ_lex_init (yyscan_t* scanner);
+
+int FASTQ_lex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
+
+/* Accessor methods to globals.
+   These are made visible to non-reentrant scanners for convenience. */
+
+int FASTQ_lex_destroy (yyscan_t yyscanner );
+
+int FASTQ_get_debug (yyscan_t yyscanner );
+
+void FASTQ_set_debug (int debug_flag ,yyscan_t yyscanner );
+
+YY_EXTRA_TYPE FASTQ_get_extra (yyscan_t yyscanner );
+
+void FASTQ_set_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
+
+FILE *FASTQ_get_in (yyscan_t yyscanner );
+
+void FASTQ_set_in  (FILE * in_str ,yyscan_t yyscanner );
+
+FILE *FASTQ_get_out (yyscan_t yyscanner );
+
+void FASTQ_set_out  (FILE * out_str ,yyscan_t yyscanner );
+
+int FASTQ_get_leng (yyscan_t yyscanner );
+
+char *FASTQ_get_text (yyscan_t yyscanner );
+
+int FASTQ_get_lineno (yyscan_t yyscanner );
+
+void FASTQ_set_lineno (int line_number ,yyscan_t yyscanner );
+
+YYSTYPE * FASTQ_get_lval (yyscan_t yyscanner );
+
+void FASTQ_set_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int FASTQ_wrap (yyscan_t yyscanner );
+#else
+extern int FASTQ_wrap (yyscan_t yyscanner );
+#endif
+#endif
+
+    static void yyunput (int c,char *buf_ptr  ,yyscan_t yyscanner);
+    
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (yyscan_t yyscanner );
+#else
+static int input (yyscan_t yyscanner );
+#endif
+
+#endif
+
+    static void yy_push_state (int new_state ,yyscan_t yyscanner);
+    
+    static void yy_pop_state (yyscan_t yyscanner );
+    
+    static int yy_top_state (yyscan_t yyscanner );
+    
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+		{ \
+		int c = '*'; \
+		int n; \
+		for ( n = 0; n < max_size && \
+			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+			buf[n] = (char) c; \
+		if ( c == '\n' ) \
+			buf[n++] = (char) c; \
+		if ( c == EOF && ferror( yyin ) ) \
+			YY_FATAL_ERROR( "input in flex scanner failed" ); \
+		result = n; \
+		} \
+	else \
+		{ \
+		errno=0; \
+		while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+			{ \
+			if( errno != EINTR) \
+				{ \
+				YY_FATAL_ERROR( "input in flex scanner failed" ); \
+				break; \
+				} \
+			errno=0; \
+			clearerr(yyin); \
+			} \
+		}\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner)
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int FASTQ_lex \
+               (YYSTYPE * yylval_param ,yyscan_t yyscanner);
+
+#define YY_DECL int FASTQ_lex \
+               (YYSTYPE * yylval_param , yyscan_t yyscanner)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+	if ( yyleng > 0 ) \
+		YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
+				(yytext[yyleng - 1] == '\n'); \
+	YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp, *yy_bp;
+	register int yy_act;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+    yylval = yylval_param;
+
+	if ( !yyg->yy_init )
+		{
+		yyg->yy_init = 1;
+
+#ifdef YY_USER_INIT
+		YY_USER_INIT;
+#endif
+
+        /* Create the reject buffer large enough to save one state per allowed character. */
+        if ( ! yyg->yy_state_buf )
+            yyg->yy_state_buf = (yy_state_type *)FASTQ_alloc(YY_STATE_BUF_SIZE  ,yyscanner);
+            if ( ! yyg->yy_state_buf )
+                YY_FATAL_ERROR( "out of dynamic memory in FASTQ_lex()" );
+
+		if ( ! yyg->yy_start )
+			yyg->yy_start = 1;	/* first start state */
+
+		if ( ! yyin )
+			yyin = stdin;
+
+		if ( ! yyout )
+			yyout = stdout;
+
+		if ( ! YY_CURRENT_BUFFER ) {
+			FASTQ_ensure_buffer_stack (yyscanner);
+			YY_CURRENT_BUFFER_LVALUE =
+				FASTQ__create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+		}
+
+		FASTQ__load_buffer_state(yyscanner );
+		}
+
+	while ( 1 )		/* loops until end-of-file is reached */
+		{
+		yy_cp = yyg->yy_c_buf_p;
+
+		/* Support of yytext. */
+		*yy_cp = yyg->yy_hold_char;
+
+		/* yy_bp points to the position in yy_ch_buf of the start of
+		 * the current run.
+		 */
+		yy_bp = yy_cp;
+
+		yy_current_state = yyg->yy_start;
+		yy_current_state += YY_AT_BOL();
+
+		yyg->yy_state_ptr = yyg->yy_state_buf;
+		*yyg->yy_state_ptr++ = yy_current_state;
+
+yy_match:
+		do
+			{
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+				{
+				yy_current_state = (int) yy_def[yy_current_state];
+				if ( yy_current_state >= 112 )
+					yy_c = yy_meta[(unsigned int) yy_c];
+				}
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			*yyg->yy_state_ptr++ = yy_current_state;
+			++yy_cp;
+			}
+		while ( yy_current_state != 111 );
+
+yy_find_action:
+		yy_current_state = *--yyg->yy_state_ptr;
+		yyg->yy_lp = yy_accept[yy_current_state];
+find_rule: /* we branch to this label when backing up */
+		for ( ; ; ) /* until we find what rule we matched */
+			{
+			if ( yyg->yy_lp && yyg->yy_lp < yy_accept[yy_current_state + 1] )
+				{
+				yy_act = yy_acclist[yyg->yy_lp];
+				if ( yy_act & YY_TRAILING_HEAD_MASK ||
+				     yyg->yy_looking_for_trail_begin )
+					{
+					if ( yy_act == yyg->yy_looking_for_trail_begin )
+						{
+						yyg->yy_looking_for_trail_begin = 0;
+						yy_act &= ~YY_TRAILING_HEAD_MASK;
+						break;
+						}
+					}
+				else if ( yy_act & YY_TRAILING_MASK )
+					{
+					yyg->yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK;
+					yyg->yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;
+					}
+				else
+					{
+					yyg->yy_full_match = yy_cp;
+					yyg->yy_full_state = yyg->yy_state_ptr;
+					yyg->yy_full_lp = yyg->yy_lp;
+					break;
+					}
+				++yyg->yy_lp;
+				goto find_rule;
+				}
+			--yy_cp;
+			yy_current_state = *--yyg->yy_state_ptr;
+			yyg->yy_lp = yy_accept[yy_current_state];
+			}
+
+		YY_DO_BEFORE_ACTION;
+
+		if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
+			{
+			int yyl;
+			for ( yyl = 0; yyl < yyleng; ++yyl )
+				if ( yytext[yyl] == '\n' )
+					   
+    do{ yylineno++;
+        yycolumn=0;
+    }while(0)
+;
+			}
+
+do_action:	/* This label is used only to access EOF actions. */
+
+		switch ( yy_act )
+	{ /* beginning of action switch */
+case 1:
+YY_RULE_SETUP
+{ BEGIN TAG_LINE; return yytext[0]; }
+	YY_BREAK
+case 2:
+YY_RULE_SETUP
+{ BEGIN TAG_LINE; return yytext[0]; }
+	YY_BREAK
+case 3:
+YY_RULE_SETUP
+{ BEGIN QTAG_LINE; return yytext[0]; }
+	YY_BREAK
+
+case 4:
+YY_RULE_SETUP
+{ return fqNUMBER; }
+	YY_BREAK
+case 5:
+YY_RULE_SETUP
+{ return fqALPHANUM; }
+	YY_BREAK
+case 6:
+YY_RULE_SETUP
+{ return fqWS; }
+	YY_BREAK
+case 7:
+/* rule 7 can match eol */
+YY_RULE_SETUP
+{ return fqBASESEQ; }
+	YY_BREAK
+case 8:
+/* rule 8 can match eol */
+YY_RULE_SETUP
+{ return fqCOLORSEQ; }
+	YY_BREAK
+case 9:
+YY_RULE_SETUP
+{ return yytext[0]; }
+	YY_BREAK
+
+case 10:
+/* rule 10 can match eol */
+YY_RULE_SETUP
+{ BEGIN IN_SEQUENCE; ENDLINE; }
+	YY_BREAK
+
+case 11:
+/* rule 11 can match eol */
+YY_RULE_SETUP
+{ BEGIN 0; return fqBASESEQ; }
+	YY_BREAK
+case 12:
+/* rule 12 can match eol */
+YY_RULE_SETUP
+{ BEGIN 0; return fqCOLORSEQ; }
+	YY_BREAK
+case 13:
+/* rule 13 can match eol */
+YY_RULE_SETUP
+{ BEGIN 0; return fqASCQUAL; }
+	YY_BREAK
+case 14:
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ BEGIN 0; return fqUNRECOGNIZED; }
+	YY_BREAK
+
+case 15:
+YY_RULE_SETUP
+{ BEGIN 0; return fqBASESEQ; }
+	YY_BREAK
+case 16:
+YY_RULE_SETUP
+{ BEGIN 0; return fqCOLORSEQ; }
+	YY_BREAK
+
+case 17:
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+{ return fqTOKEN; /* do not bother to parse the inside of the line */ }
+	YY_BREAK
+case 18:
+/* rule 18 can match eol */
+YY_RULE_SETUP
+{ BEGIN IN_QUALITY; ENDLINE }
+	YY_BREAK
+
+case 19:
+YY_RULE_SETUP
+{ } 
+	YY_BREAK
+
+case 20:
+/* rule 20 can match eol */
+YY_RULE_SETUP
+{ return fqASCQUAL; }
+	YY_BREAK
+case 21:
+/* rule 21 can match eol */
+YY_RULE_SETUP
+{   /* if read was split across several lines, expect the same number of lines in quality */
+                                    if (yyextra->expectedQualityLines <= 1) 
+                                        BEGIN 0; 
+                                    else 
+                                        --yyextra->expectedQualityLines;
+                                    ENDLINE; 
+                                }
+	YY_BREAK
+case 22:
+YY_RULE_SETUP
+{ return yytext[0]; }
+	YY_BREAK
+
+case 23:
+/* rule 23 can match eol */
+YY_RULE_SETUP
+{ return fqASCQUAL; }
+	YY_BREAK
+case 24:
+/* rule 24 can match eol */
+YY_RULE_SETUP
+{ BEGIN 0; ENDLINE; }
+	YY_BREAK
+case 25:
+YY_RULE_SETUP
+{ return yytext[0]; }
+	YY_BREAK
+
+case 26:
+/* rule 26 can match eol */
+YY_RULE_SETUP
+{ ENDLINE; }
+	YY_BREAK
+case 27:
+YY_RULE_SETUP
+ECHO;
+	YY_BREAK
+			case YY_STATE_EOF(INITIAL):
+			case YY_STATE_EOF(TAG_LINE):
+			case YY_STATE_EOF(SEE_COORDS):
+			case YY_STATE_EOF(PAST_COORDS):
+			case YY_STATE_EOF(READ_NUMBER):
+			case YY_STATE_EOF(NAMEVALUE):
+			case YY_STATE_EOF(IN_SEQUENCE):
+			case YY_STATE_EOF(QTAG_LINE):
+			case YY_STATE_EOF(IN_QUALITY):
+			case YY_STATE_EOF(INLINE_SEQUENCE):
+			case YY_STATE_EOF(INLINE_QUALITY):
+				yyterminate();
+
+	case YY_END_OF_BUFFER:
+		{
+		/* Amount of text matched not including the EOB char. */
+		int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1;
+
+		/* Undo the effects of YY_DO_BEFORE_ACTION. */
+		*yy_cp = yyg->yy_hold_char;
+		YY_RESTORE_YY_MORE_OFFSET
+
+		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+			{
+			/* We're scanning a new file or input source.  It's
+			 * possible that this happened because the user
+			 * just pointed yyin at a new source and called
+			 * FASTQ_lex().  If so, then we have to assure
+			 * consistency between YY_CURRENT_BUFFER and our
+			 * globals.  Here is the right place to do so, because
+			 * this is the first action (other than possibly a
+			 * back-up) that will match for the new input source.
+			 */
+			yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+			}
+
+		/* Note that here we test for yy_c_buf_p "<=" to the position
+		 * of the first EOB in the buffer, since yy_c_buf_p will
+		 * already have been incremented past the NUL character
+		 * (since all states make transitions on EOB to the
+		 * end-of-buffer state).  Contrast this with the test
+		 * in input().
+		 */
+		if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
+			{ /* This was really a NUL. */
+			yy_state_type yy_next_state;
+
+			yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text;
+
+			yy_current_state = yy_get_previous_state( yyscanner );
+
+			/* Okay, we're now positioned to make the NUL
+			 * transition.  We couldn't have
+			 * yy_get_previous_state() go ahead and do it
+			 * for us because it doesn't know how to deal
+			 * with the possibility of jamming (and we don't
+			 * want to build jamming into it because then it
+			 * will run more slowly).
+			 */
+
+			yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner);
+
+			yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+
+			if ( yy_next_state )
+				{
+				/* Consume the NUL. */
+				yy_cp = ++yyg->yy_c_buf_p;
+				yy_current_state = yy_next_state;
+				goto yy_match;
+				}
+
+			else
+				{
+				yy_cp = yyg->yy_c_buf_p;
+				goto yy_find_action;
+				}
+			}
+
+		else switch ( yy_get_next_buffer( yyscanner ) )
+			{
+			case EOB_ACT_END_OF_FILE:
+				{
+				yyg->yy_did_buffer_switch_on_eof = 0;
+
+				if ( FASTQ_wrap(yyscanner ) )
+					{
+					/* Note: because we've taken care in
+					 * yy_get_next_buffer() to have set up
+					 * yytext, we can now set up
+					 * yy_c_buf_p so that if some total
+					 * hoser (like flex itself) wants to
+					 * call the scanner after we return the
+					 * YY_NULL, it'll still work - another
+					 * YY_NULL will get returned.
+					 */
+					yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ;
+
+					yy_act = YY_STATE_EOF(YY_START);
+					goto do_action;
+					}
+
+				else
+					{
+					if ( ! yyg->yy_did_buffer_switch_on_eof )
+						YY_NEW_FILE;
+					}
+				break;
+				}
+
+			case EOB_ACT_CONTINUE_SCAN:
+				yyg->yy_c_buf_p =
+					yyg->yytext_ptr + yy_amount_of_matched_text;
+
+				yy_current_state = yy_get_previous_state( yyscanner );
+
+				yy_cp = yyg->yy_c_buf_p;
+				yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+				goto yy_match;
+
+			case EOB_ACT_LAST_MATCH:
+				yyg->yy_c_buf_p =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars];
+
+				yy_current_state = yy_get_previous_state( yyscanner );
+
+				yy_cp = yyg->yy_c_buf_p;
+				yy_bp = yyg->yytext_ptr + YY_MORE_ADJ;
+				goto yy_find_action;
+			}
+		break;
+		}
+
+	default:
+		YY_FATAL_ERROR(
+			"fatal flex scanner internal error--no action found" );
+	} /* end of action switch */
+		} /* end of scanning one token */
+} /* end of FASTQ_lex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ *	EOB_ACT_LAST_MATCH -
+ *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ *	EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	register char *source = yyg->yytext_ptr;
+	register int number_to_move, i;
+	int ret_val;
+
+	if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
+		YY_FATAL_ERROR(
+		"fatal flex scanner internal error--end of buffer missed" );
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+		{ /* Don't try to fill the buffer, so this is an EOF. */
+		if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 )
+			{
+			/* We matched a single character, the EOB, so
+			 * treat this as a final EOF.
+			 */
+			return EOB_ACT_END_OF_FILE;
+			}
+
+		else
+			{
+			/* We matched some text prior to the EOB, first
+			 * process it.
+			 */
+			return EOB_ACT_LAST_MATCH;
+			}
+		}
+
+	/* Try to read more data. */
+
+	/* First move last chars to start of buffer. */
+	number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
+
+	for ( i = 0; i < number_to_move; ++i )
+		*(dest++) = *(source++);
+
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+		/* don't do the read, it's not guaranteed to return an EOF,
+		 * just force an EOF
+		 */
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0;
+
+	else
+		{
+			int num_to_read =
+			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+		while ( num_to_read <= 0 )
+			{ /* Not enough room in the buffer - grow it. */
+
+			YY_FATAL_ERROR(
+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+
+			}
+
+		if ( num_to_read > YY_READ_BUF_SIZE )
+			num_to_read = YY_READ_BUF_SIZE;
+
+		/* Read in more data. */
+		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+			yyg->yy_n_chars, (size_t) num_to_read );
+
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+		}
+
+	if ( yyg->yy_n_chars == 0 )
+		{
+		if ( number_to_move == YY_MORE_ADJ )
+			{
+			ret_val = EOB_ACT_END_OF_FILE;
+			FASTQ_restart(yyin  ,yyscanner);
+			}
+
+		else
+			{
+			ret_val = EOB_ACT_LAST_MATCH;
+			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+				YY_BUFFER_EOF_PENDING;
+			}
+		}
+
+	else
+		ret_val = EOB_ACT_CONTINUE_SCAN;
+
+	if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+		/* Extend the array by 50%, plus the number we really need. */
+		yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
+		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) FASTQ_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
+		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+	}
+
+	yyg->yy_n_chars += number_to_move;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+
+	yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+	return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+    static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
+{
+	register yy_state_type yy_current_state;
+	register char *yy_cp;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	yy_current_state = yyg->yy_start;
+	yy_current_state += YY_AT_BOL();
+
+	yyg->yy_state_ptr = yyg->yy_state_buf;
+	*yyg->yy_state_ptr++ = yy_current_state;
+
+	for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
+		{
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+			{
+			yy_current_state = (int) yy_def[yy_current_state];
+			if ( yy_current_state >= 112 )
+				yy_c = yy_meta[(unsigned int) yy_c];
+			}
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		*yyg->yy_state_ptr++ = yy_current_state;
+		}
+
+	return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ *	next_state = yy_try_NUL_trans( current_state );
+ */
+    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state , yyscan_t yyscanner)
+{
+	register int yy_is_jam;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
+
+	register YY_CHAR yy_c = 1;
+	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+		{
+		yy_current_state = (int) yy_def[yy_current_state];
+		if ( yy_current_state >= 112 )
+			yy_c = yy_meta[(unsigned int) yy_c];
+		}
+	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+	yy_is_jam = (yy_current_state == 111);
+	if ( ! yy_is_jam )
+		*yyg->yy_state_ptr++ = yy_current_state;
+
+	return yy_is_jam ? 0 : yy_current_state;
+}
+
+    static void yyunput (int c, register char * yy_bp , yyscan_t yyscanner)
+{
+	register char *yy_cp;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+    yy_cp = yyg->yy_c_buf_p;
+
+	/* undo effects of setting up yytext */
+	*yy_cp = yyg->yy_hold_char;
+
+	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+		{ /* need to shift things up to make room */
+		/* +2 for EOB chars. */
+		register int number_to_move = yyg->yy_n_chars + 2;
+		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+		register char *source =
+				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+			*--dest = *--source;
+
+		yy_cp += (int) (dest - source);
+		yy_bp += (int) (dest - source);
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+			yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+			YY_FATAL_ERROR( "flex scanner push-back overflow" );
+		}
+
+	*--yy_cp = (char) c;
+
+    if ( c == '\n' ){
+        --yylineno;
+    }
+
+	yyg->yytext_ptr = yy_bp;
+	yyg->yy_hold_char = *yy_cp;
+	yyg->yy_c_buf_p = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+    static int yyinput (yyscan_t yyscanner)
+#else
+    static int input  (yyscan_t yyscanner)
+#endif
+
+{
+	int c;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	*yyg->yy_c_buf_p = yyg->yy_hold_char;
+
+	if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+		{
+		/* yy_c_buf_p now points to the character we want to return.
+		 * If this occurs *before* the EOB characters, then it's a
+		 * valid NUL; if not, then we've hit the end of the buffer.
+		 */
+		if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] )
+			/* This was really a NUL. */
+			*yyg->yy_c_buf_p = '\0';
+
+		else
+			{ /* need more input */
+			int offset = yyg->yy_c_buf_p - yyg->yytext_ptr;
+			++yyg->yy_c_buf_p;
+
+			switch ( yy_get_next_buffer( yyscanner ) )
+				{
+				case EOB_ACT_LAST_MATCH:
+					/* This happens because yy_g_n_b()
+					 * sees that we've accumulated a
+					 * token and flags that we need to
+					 * try matching the token before
+					 * proceeding.  But for input(),
+					 * there's no matching to consider.
+					 * So convert the EOB_ACT_LAST_MATCH
+					 * to EOB_ACT_END_OF_FILE.
+					 */
+
+					/* Reset buffer status. */
+					FASTQ_restart(yyin ,yyscanner);
+
+					/*FALLTHROUGH*/
+
+				case EOB_ACT_END_OF_FILE:
+					{
+					if ( FASTQ_wrap(yyscanner ) )
+						return EOF;
+
+					if ( ! yyg->yy_did_buffer_switch_on_eof )
+						YY_NEW_FILE;
+#ifdef __cplusplus
+					return yyinput(yyscanner);
+#else
+					return input(yyscanner);
+#endif
+					}
+
+				case EOB_ACT_CONTINUE_SCAN:
+					yyg->yy_c_buf_p = yyg->yytext_ptr + offset;
+					break;
+				}
+			}
+		}
+
+	c = *(unsigned char *) yyg->yy_c_buf_p;	/* cast for 8-bit char's */
+	*yyg->yy_c_buf_p = '\0';	/* preserve yytext */
+	yyg->yy_hold_char = *++yyg->yy_c_buf_p;
+
+	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
+	if ( YY_CURRENT_BUFFER_LVALUE->yy_at_bol )
+		   
+    do{ yylineno++;
+        yycolumn=0;
+    }while(0)
+;
+
+	return c;
+}
+#endif	/* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ * @param yyscanner The scanner object.
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+    void FASTQ_restart  (FILE * input_file , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	if ( ! YY_CURRENT_BUFFER ){
+        FASTQ_ensure_buffer_stack (yyscanner);
+		YY_CURRENT_BUFFER_LVALUE =
+            FASTQ__create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+	}
+
+	FASTQ__init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
+	FASTQ__load_buffer_state(yyscanner );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ * @param yyscanner The scanner object.
+ */
+    void FASTQ__switch_to_buffer  (YY_BUFFER_STATE  new_buffer , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	/* TODO. We should be able to replace this entire function body
+	 * with
+	 *		FASTQ_pop_buffer_state();
+	 *		FASTQ_push_buffer_state(new_buffer);
+     */
+	FASTQ_ensure_buffer_stack (yyscanner);
+	if ( YY_CURRENT_BUFFER == new_buffer )
+		return;
+
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*yyg->yy_c_buf_p = yyg->yy_hold_char;
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+		}
+
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+	FASTQ__load_buffer_state(yyscanner );
+
+	/* We don't actually know whether we did this switch during
+	 * EOF (FASTQ_wrap()) processing, but the only time this flag
+	 * is looked at is after FASTQ_wrap() is called, so it's safe
+	 * to go ahead and always set it.
+	 */
+	yyg->yy_did_buffer_switch_on_eof = 1;
+}
+
+static void FASTQ__load_buffer_state  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+	yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+	yyg->yy_hold_char = *yyg->yy_c_buf_p;
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ * @param yyscanner The scanner object.
+ * @return the allocated buffer state.
+ */
+    YY_BUFFER_STATE FASTQ__create_buffer  (FILE * file, int  size , yyscan_t yyscanner)
+{
+	YY_BUFFER_STATE b;
+    
+	b = (YY_BUFFER_STATE) FASTQ_alloc(sizeof( struct yy_buffer_state ) ,yyscanner );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in FASTQ__create_buffer()" );
+
+	b->yy_buf_size = size;
+
+	/* yy_ch_buf has to be 2 characters longer than the size given because
+	 * we need to put in 2 end-of-buffer characters.
+	 */
+	b->yy_ch_buf = (char *) FASTQ_alloc(b->yy_buf_size + 2 ,yyscanner );
+	if ( ! b->yy_ch_buf )
+		YY_FATAL_ERROR( "out of dynamic memory in FASTQ__create_buffer()" );
+
+	b->yy_is_our_buffer = 1;
+
+	FASTQ__init_buffer(b,file ,yyscanner);
+
+	return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with FASTQ__create_buffer()
+ * @param yyscanner The scanner object.
+ */
+    void FASTQ__delete_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	if ( ! b )
+		return;
+
+	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+	if ( b->yy_is_our_buffer )
+		FASTQ_free((void *) b->yy_ch_buf ,yyscanner );
+
+	FASTQ_free((void *) b ,yyscanner );
+}
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a FASTQ_restart() or at EOF.
+ */
+    static void FASTQ__init_buffer  (YY_BUFFER_STATE  b, FILE * file , yyscan_t yyscanner)
+
+{
+	int oerrno = errno;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	FASTQ__flush_buffer(b ,yyscanner);
+
+	b->yy_input_file = file;
+	b->yy_fill_buffer = 1;
+
+    /* If b is the current buffer, then FASTQ__init_buffer was _probably_
+     * called from FASTQ_restart() or through yy_get_next_buffer.
+     * In that case, we don't want to reset the lineno or column.
+     */
+    if (b != YY_CURRENT_BUFFER){
+        b->yy_bs_lineno = 1;
+        b->yy_bs_column = 0;
+    }
+
+        b->yy_is_interactive = 0;
+    
+	errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ * @param yyscanner The scanner object.
+ */
+    void FASTQ__flush_buffer (YY_BUFFER_STATE  b , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	if ( ! b )
+		return;
+
+	b->yy_n_chars = 0;
+
+	/* We always need two end-of-buffer characters.  The first causes
+	 * a transition to the end-of-buffer state.  The second causes
+	 * a jam in that state.
+	 */
+	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+	b->yy_buf_pos = &b->yy_ch_buf[0];
+
+	b->yy_at_bol = 1;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	if ( b == YY_CURRENT_BUFFER )
+		FASTQ__load_buffer_state(yyscanner );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ *  the current state. This function will allocate the stack
+ *  if necessary.
+ *  @param new_buffer The new state.
+ *  @param yyscanner The scanner object.
+ */
+void FASTQ_push_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	if (new_buffer == NULL)
+		return;
+
+	FASTQ_ensure_buffer_stack(yyscanner);
+
+	/* This block is copied from FASTQ__switch_to_buffer. */
+	if ( YY_CURRENT_BUFFER )
+		{
+		/* Flush out information for old buffer. */
+		*yyg->yy_c_buf_p = yyg->yy_hold_char;
+		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p;
+		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
+		}
+
+	/* Only push if top exists. Otherwise, replace top. */
+	if (YY_CURRENT_BUFFER)
+		yyg->yy_buffer_stack_top++;
+	YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+	/* copied from FASTQ__switch_to_buffer. */
+	FASTQ__load_buffer_state(yyscanner );
+	yyg->yy_did_buffer_switch_on_eof = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ *  The next element becomes the new top.
+ *  @param yyscanner The scanner object.
+ */
+void FASTQ_pop_buffer_state (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	if (!YY_CURRENT_BUFFER)
+		return;
+
+	FASTQ__delete_buffer(YY_CURRENT_BUFFER ,yyscanner);
+	YY_CURRENT_BUFFER_LVALUE = NULL;
+	if (yyg->yy_buffer_stack_top > 0)
+		--yyg->yy_buffer_stack_top;
+
+	if (YY_CURRENT_BUFFER) {
+		FASTQ__load_buffer_state(yyscanner );
+		yyg->yy_did_buffer_switch_on_eof = 1;
+	}
+}
+
+/* Allocates the stack if it does not exist.
+ *  Guarantees space for at least one push.
+ */
+static void FASTQ_ensure_buffer_stack (yyscan_t yyscanner)
+{
+	int num_to_alloc;
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+	if (!yyg->yy_buffer_stack) {
+
+		/* First allocation is just for 2 elements, since we don't know if this
+		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
+		 * immediate realloc on the next call.
+         */
+		num_to_alloc = 1;
+		yyg->yy_buffer_stack = (struct yy_buffer_state**)FASTQ_alloc
+								(num_to_alloc * sizeof(struct yy_buffer_state*)
+								, yyscanner);
+		if ( ! yyg->yy_buffer_stack )
+			YY_FATAL_ERROR( "out of dynamic memory in FASTQ_ensure_buffer_stack()" );
+								  
+		memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+				
+		yyg->yy_buffer_stack_max = num_to_alloc;
+		yyg->yy_buffer_stack_top = 0;
+		return;
+	}
+
+	if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
+
+		/* Increase the buffer to prepare for a possible push. */
+		int grow_size = 8 /* arbitrary grow size */;
+
+		num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
+		yyg->yy_buffer_stack = (struct yy_buffer_state**)FASTQ_realloc
+								(yyg->yy_buffer_stack,
+								num_to_alloc * sizeof(struct yy_buffer_state*)
+								, yyscanner);
+		if ( ! yyg->yy_buffer_stack )
+			YY_FATAL_ERROR( "out of dynamic memory in FASTQ_ensure_buffer_stack()" );
+
+		/* zero only the new slots.*/
+		memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
+		yyg->yy_buffer_stack_max = num_to_alloc;
+	}
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object. 
+ */
+YY_BUFFER_STATE FASTQ__scan_buffer  (char * base, yy_size_t  size , yyscan_t yyscanner)
+{
+	YY_BUFFER_STATE b;
+    
+	if ( size < 2 ||
+	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+		/* They forgot to leave room for the EOB's. */
+		return 0;
+
+	b = (YY_BUFFER_STATE) FASTQ_alloc(sizeof( struct yy_buffer_state ) ,yyscanner );
+	if ( ! b )
+		YY_FATAL_ERROR( "out of dynamic memory in FASTQ__scan_buffer()" );
+
+	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+	b->yy_buf_pos = b->yy_ch_buf = base;
+	b->yy_is_our_buffer = 0;
+	b->yy_input_file = 0;
+	b->yy_n_chars = b->yy_buf_size;
+	b->yy_is_interactive = 0;
+	b->yy_at_bol = 1;
+	b->yy_fill_buffer = 0;
+	b->yy_buffer_status = YY_BUFFER_NEW;
+
+	FASTQ__switch_to_buffer(b ,yyscanner );
+
+	return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to FASTQ_lex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ *       FASTQ__scan_bytes() instead.
+ */
+YY_BUFFER_STATE FASTQ__scan_string (yyconst char * yystr , yyscan_t yyscanner)
+{
+    
+	return FASTQ__scan_bytes(yystr,strlen(yystr) ,yyscanner);
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to FASTQ_lex() will
+ * scan from a @e copy of @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * @param yyscanner The scanner object.
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE FASTQ__scan_bytes  (yyconst char * yybytes, int  _yybytes_len , yyscan_t yyscanner)
+{
+	YY_BUFFER_STATE b;
+	char *buf;
+	yy_size_t n;
+	int i;
+    
+	/* Get memory for full buffer, including space for trailing EOB's. */
+	n = _yybytes_len + 2;
+	buf = (char *) FASTQ_alloc(n ,yyscanner );
+	if ( ! buf )
+		YY_FATAL_ERROR( "out of dynamic memory in FASTQ__scan_bytes()" );
+
+	for ( i = 0; i < _yybytes_len; ++i )
+		buf[i] = yybytes[i];
+
+	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+	b = FASTQ__scan_buffer(buf,n ,yyscanner);
+	if ( ! b )
+		YY_FATAL_ERROR( "bad buffer in FASTQ__scan_bytes()" );
+
+	/* It's okay to grow etc. this buffer, and we should throw it
+	 * away when we're done.
+	 */
+	b->yy_is_our_buffer = 1;
+
+	return b;
+}
+
+    static void yy_push_state (int  new_state , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	if ( yyg->yy_start_stack_ptr >= yyg->yy_start_stack_depth )
+		{
+		yy_size_t new_size;
+
+		yyg->yy_start_stack_depth += YY_START_STACK_INCR;
+		new_size = yyg->yy_start_stack_depth * sizeof( int );
+
+		if ( ! yyg->yy_start_stack )
+			yyg->yy_start_stack = (int *) FASTQ_alloc(new_size ,yyscanner );
+
+		else
+			yyg->yy_start_stack = (int *) FASTQ_realloc((void *) yyg->yy_start_stack,new_size ,yyscanner );
+
+		if ( ! yyg->yy_start_stack )
+			YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
+		}
+
+	yyg->yy_start_stack[yyg->yy_start_stack_ptr++] = YY_START;
+
+	BEGIN(new_state);
+}
+
+    static void yy_pop_state  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	if ( --yyg->yy_start_stack_ptr < 0 )
+		YY_FATAL_ERROR( "start-condition stack underflow" );
+
+	BEGIN(yyg->yy_start_stack[yyg->yy_start_stack_ptr]);
+}
+
+    static int yy_top_state  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+	return yyg->yy_start_stack[yyg->yy_start_stack_ptr - 1];
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
+{
+    	(void) fprintf( stderr, "%s\n", msg );
+	exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+	do \
+		{ \
+		/* Undo effects of setting up yytext. */ \
+        int yyless_macro_arg = (n); \
+        YY_LESS_LINENO(yyless_macro_arg);\
+		yytext[yyleng] = yyg->yy_hold_char; \
+		yyg->yy_c_buf_p = yytext + yyless_macro_arg; \
+		yyg->yy_hold_char = *yyg->yy_c_buf_p; \
+		*yyg->yy_c_buf_p = '\0'; \
+		yyleng = yyless_macro_arg; \
+		} \
+	while ( 0 )
+
+/* Accessor  methods (get/set functions) to struct members. */
+
+/** Get the user-defined data for this scanner.
+ * @param yyscanner The scanner object.
+ */
+YY_EXTRA_TYPE FASTQ_get_extra  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yyextra;
+}
+
+/** Get the current line number.
+ * @param yyscanner The scanner object.
+ */
+int FASTQ_get_lineno  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    
+        if (! YY_CURRENT_BUFFER)
+            return 0;
+    
+    return yylineno;
+}
+
+/** Get the current column number.
+ * @param yyscanner The scanner object.
+ */
+int FASTQ_get_column  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    
+        if (! YY_CURRENT_BUFFER)
+            return 0;
+    
+    return yycolumn;
+}
+
+/** Get the input stream.
+ * @param yyscanner The scanner object.
+ */
+FILE *FASTQ_get_in  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yyin;
+}
+
+/** Get the output stream.
+ * @param yyscanner The scanner object.
+ */
+FILE *FASTQ_get_out  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yyout;
+}
+
+/** Get the length of the current token.
+ * @param yyscanner The scanner object.
+ */
+int FASTQ_get_leng  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yyleng;
+}
+
+/** Get the current token.
+ * @param yyscanner The scanner object.
+ */
+
+char *FASTQ_get_text  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yytext;
+}
+
+/** Set the user-defined data. This data is never touched by the scanner.
+ * @param user_defined The data to be associated with this scanner.
+ * @param yyscanner The scanner object.
+ */
+void FASTQ_set_extra (YY_EXTRA_TYPE  user_defined , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yyextra = user_defined ;
+}
+
+/** Set the current line number.
+ * @param line_number
+ * @param yyscanner The scanner object.
+ */
+void FASTQ_set_lineno (int  line_number , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+        /* lineno is only valid if an input buffer exists. */
+        if (! YY_CURRENT_BUFFER )
+           yy_fatal_error( "FASTQ_set_lineno called with no buffer" , yyscanner); 
+    
+    yylineno = line_number;
+}
+
+/** Set the current column.
+ * @param line_number
+ * @param yyscanner The scanner object.
+ */
+void FASTQ_set_column (int  column_no , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+        /* column is only valid if an input buffer exists. */
+        if (! YY_CURRENT_BUFFER )
+           yy_fatal_error( "FASTQ_set_column called with no buffer" , yyscanner); 
+    
+    yycolumn = column_no;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ * @param yyscanner The scanner object.
+ * @see FASTQ__switch_to_buffer
+ */
+void FASTQ_set_in (FILE *  in_str , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yyin = in_str ;
+}
+
+void FASTQ_set_out (FILE *  out_str , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yyout = out_str ;
+}
+
+int FASTQ_get_debug  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yy_flex_debug;
+}
+
+void FASTQ_set_debug (int  bdebug , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yy_flex_debug = bdebug ;
+}
+
+/* Accessor methods for yylval and yylloc */
+
+YYSTYPE * FASTQ_get_lval  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    return yylval;
+}
+
+void FASTQ_set_lval (YYSTYPE *  yylval_param , yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    yylval = yylval_param;
+}
+
+/* User-visible API */
+
+/* FASTQ_lex_init is special because it creates the scanner itself, so it is
+ * the ONLY reentrant function that doesn't take the scanner as the last argument.
+ * That's why we explicitly handle the declaration, instead of using our macros.
+ */
+
+int FASTQ_lex_init(yyscan_t* ptr_yy_globals)
+
+{
+    if (ptr_yy_globals == NULL){
+        errno = EINVAL;
+        return 1;
+    }
+
+    *ptr_yy_globals = (yyscan_t) FASTQ_alloc ( sizeof( struct yyguts_t ), NULL );
+
+    if (*ptr_yy_globals == NULL){
+        errno = ENOMEM;
+        return 1;
+    }
+
+    /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */
+    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
+
+    return yy_init_globals ( *ptr_yy_globals );
+}
+
+/* FASTQ_lex_init_extra has the same functionality as FASTQ_lex_init, but follows the
+ * convention of taking the scanner as the last argument. Note however, that
+ * this is a *pointer* to a scanner, as it will be allocated by this call (and
+ * is the reason, too, why this function also must handle its own declaration).
+ * The user defined value in the first argument will be available to FASTQ_alloc in
+ * the yyextra field.
+ */
+
+int FASTQ_lex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )
+
+{
+    struct yyguts_t dummy_yyguts;
+
+    FASTQ_set_extra (yy_user_defined, &dummy_yyguts);
+
+    if (ptr_yy_globals == NULL){
+        errno = EINVAL;
+        return 1;
+    }
+	
+    *ptr_yy_globals = (yyscan_t) FASTQ_alloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
+	
+    if (*ptr_yy_globals == NULL){
+        errno = ENOMEM;
+        return 1;
+    }
+    
+    /* By setting to 0xAA, we expose bugs in
+    yy_init_globals. Leave at 0x00 for releases. */
+    memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
+    
+    FASTQ_set_extra (yy_user_defined, *ptr_yy_globals);
+    
+    return yy_init_globals ( *ptr_yy_globals );
+}
+
+static int yy_init_globals (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+    /* Initialization is the same as for the non-reentrant scanner.
+     * This function is called from FASTQ_lex_destroy(), so don't allocate here.
+     */
+
+    yyg->yy_buffer_stack = 0;
+    yyg->yy_buffer_stack_top = 0;
+    yyg->yy_buffer_stack_max = 0;
+    yyg->yy_c_buf_p = (char *) 0;
+    yyg->yy_init = 0;
+    yyg->yy_start = 0;
+
+    yyg->yy_start_stack_ptr = 0;
+    yyg->yy_start_stack_depth = 0;
+    yyg->yy_start_stack =  NULL;
+
+    yyg->yy_state_buf = 0;
+    yyg->yy_state_ptr = 0;
+    yyg->yy_full_match = 0;
+    yyg->yy_lp = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+    yyin = stdin;
+    yyout = stdout;
+#else
+    yyin = (FILE *) 0;
+    yyout = (FILE *) 0;
+#endif
+
+    /* For future reference: Set errno on error, since we are called by
+     * FASTQ_lex_init()
+     */
+    return 0;
+}
+
+/* FASTQ_lex_destroy is for both reentrant and non-reentrant scanners. */
+int FASTQ_lex_destroy  (yyscan_t yyscanner)
+{
+    struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+
+    /* Pop the buffer stack, destroying each element. */
+	while(YY_CURRENT_BUFFER){
+		FASTQ__delete_buffer(YY_CURRENT_BUFFER ,yyscanner );
+		YY_CURRENT_BUFFER_LVALUE = NULL;
+		FASTQ_pop_buffer_state(yyscanner);
+	}
+
+	/* Destroy the stack itself. */
+	FASTQ_free(yyg->yy_buffer_stack ,yyscanner);
+	yyg->yy_buffer_stack = NULL;
+
+    /* Destroy the start condition stack. */
+        FASTQ_free(yyg->yy_start_stack ,yyscanner );
+        yyg->yy_start_stack = NULL;
+
+    FASTQ_free ( yyg->yy_state_buf , yyscanner);
+    yyg->yy_state_buf  = NULL;
+
+    /* Reset the globals. This is important in a non-reentrant scanner so the next time
+     * FASTQ_lex() is called, initialization will occur. */
+    yy_init_globals( yyscanner);
+
+    /* Destroy the main struct (reentrant only). */
+    FASTQ_free ( yyscanner , yyscanner );
+    yyscanner = NULL;
+    return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
+{
+	register int i;
+	for ( i = 0; i < n; ++i )
+		s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
+{
+	register int n;
+	for ( n = 0; s[n]; ++n )
+		;
+
+	return n;
+}
+#endif
+
+void *FASTQ_alloc (yy_size_t  size , yyscan_t yyscanner)
+{
+	return (void *) malloc( size );
+}
+
+void *FASTQ_realloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner)
+{
+	/* The cast to (char *) in the following accommodates both
+	 * implementations that use char* generic pointers, and those
+	 * that use void* generic pointers.  It works with the latter
+	 * because both ANSI C and C++ allow castless assignment from
+	 * any pointer type to void*, and deal with argument conversions
+	 * as though doing an assignment.
+	 */
+	return (void *) realloc( (char *) ptr, size );
+}
+
+void FASTQ_free (void * ptr , yyscan_t yyscanner)
+{
+	free( (char *) ptr );	/* see FASTQ_realloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+rc_t CC FASTQScan_yylex_init(FASTQParseBlock* sb, bool debug)
+{
+	if (FASTQ_lex_init_extra(sb,&sb->scanner) != 0)
+	{
+		return RC ( rcKFG, rcMgr, rcParsing, rcMemory, rcExhausted );
+	}		
+
+    sb->length = 0;
+    sb->lastToken = NULL;
+    sb->record = NULL;
+    sb->column = 1;
+    KDataBufferMakeBytes( &sb->tagLine, 1024);
+    
+    sb->spotNameLength = 0;
+    sb->spotNameDone = false;
+    sb->spotGroupOffset = 0;
+    sb->spotGroupLength = 0;
+
+    KDataBufferMakeBytes( &sb->quality, 1024);
+    sb->expectedQualityLines = 0;
+    
+	FASTQ_set_debug(debug ? 1 : 0,sb->scanner);
+
+    yy_push_state(INITIAL, sb->scanner);
+    
+	return 0;
+}
+
+void CC FASTQScan_yylex_destroy(FASTQParseBlock* sb)
+{
+    KDataBufferWhack( & sb->tagLine);
+    KDataBufferWhack( & sb->quality);
+	if (sb->scanner)
+	{
+		FASTQ_lex_destroy(sb->scanner);
+	}		
+	sb->scanner=0;
+}
+
+void CC FASTQScan_inline_sequence(FASTQParseBlock* pb)
+{
+    yy_pop_state(pb->scanner);
+    yy_push_state(INLINE_SEQUENCE, pb->scanner);
+}
+
+void CC FASTQScan_inline_quality(FASTQParseBlock* pb)
+{
+    yy_pop_state(pb->scanner);
+    yy_push_state(INLINE_QUALITY, pb->scanner);
+}
+
+void CC FASTQ_unlex(FASTQParseBlock* pb, FASTQToken* token)
+{
+    size_t i;
+    struct yyguts_t* yyg = (struct yyguts_t*)pb->scanner;
+    for (i = 0; i < token->tokenLength; ++i)
+    {
+        yyunput(token->tokenText[token->tokenLength-1-i], yyg->yytext_r, pb->scanner);
+    }
+    yyextra -> column -= token->tokenLength; 
+    yyextra -> length -= token->tokenLength; 
+}
+
diff --git a/tools/fastq-loader/fastq-lex.l b/tools/fastq-loader/fastq-lex.l
new file mode 100644
index 0000000..64481aa
--- /dev/null
+++ b/tools/fastq-loader/fastq-lex.l
@@ -0,0 +1,294 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+ 
+%{ 
+    #include <ctype.h>
+    
+    #include <klib/rc.h>
+
+	#include "fastq-parse.h"
+	#include "fastq-tokens.h"    
+	
+    #define YYSTYPE FASTQToken
+
+    /* code to populate token with internal values */
+    #define YY_USER_ACTION              \
+        yylval -> tokenText		= yytext;	\
+        yylval -> tokenLength	= yyleng;	\
+        yylval -> line_no		= yylineno;	\
+        yylval -> column_no		= yyextra -> column; \
+        yyextra -> column += yyleng; \
+        yyextra -> length += yyleng; \
+        yyextra -> lastToken = yylval; 
+
+    #define ENDLINE \
+        yyextra -> column=1;\
+        return fqENDLINE;
+
+    #define YY_INPUT(buf, result, max_size) \
+        result = yyextra->input(yyextra, buf, max_size)
+
+    #define ECHO
+
+    static bool IsDecList(const char*, size_t*, int*);
+
+    #define CHECK_FOR_DECLIST                               \
+        int token;                                          \
+        size_t firstNumLen = yylval -> tokenLength;         \
+        if (IsDecList(yytext, & firstNumLen, & token))      \
+        {                                                   \
+            yyextra -> column -= (yyleng - firstNumLen);    \
+            yyextra -> length -= (yyleng - firstNumLen);    \
+            yylval -> tokenLength   = firstNumLen;          \
+            BEGIN DECLIST;                                  \
+            yyless(firstNumLen);                            \
+            return token;                                   \
+        }
+%}
+
+%option never-interactive nounistd yylineno reentrant bison-bridge stack noyywrap
+
+%option prefix="FASTQ_"
+%option extra-type="FASTQParseBlock*"
+
+ /*%option debug*/
+
+%x TAG_LINE
+%x SEE_COORDS
+%x PAST_COORDS
+%x READ_NUMBER
+%x NAMEVALUE
+%x IN_SEQUENCE
+%x QTAG_LINE
+%x IN_QUALITY
+%x INLINE_SEQUENCE
+%x INLINE_QUALITY
+%x DECLIST
+
+ws          [ \t]+
+digits      [0-9]+
+alphanum    [A-Za-z0-9]+
+eol         (\r\n|\r|\n)
+
+/* there are more: =ACMGRSVTWYHKDBN. plus lowercase */
+base [ACGTacgtNn.]   
+cskey [ACGTacgt]
+color   [0-3.]
+
+asc33qual   [\x0E-\x1F \x21-\x7E]+
+asc64qual   [\x40-\x7E]+
+
+%%
+
+^@                              { BEGIN TAG_LINE; return yytext[0]; }
+^>                              { BEGIN TAG_LINE; return yytext[0]; }
+
+^\+                             { BEGIN QTAG_LINE; return yytext[0]; }
+
+<INITIAL,TAG_LINE>
+{
+    {digits}                    { return fqNUMBER; }
+    {alphanum}                  { return fqALPHANUM; }
+    {ws}                        { return fqWS; }
+    .                           { return yytext[0]; }
+}
+
+<TAG_LINE>[ \t]*{eol}           { BEGIN IN_SEQUENCE; ENDLINE; }
+
+<IN_SEQUENCE>
+{
+    ^{base}+/{eol}              { BEGIN 0; return fqBASESEQ; }
+    ^{cskey}{color}+/{eol}      { BEGIN 0; return fqCOLORSEQ; }
+    ^{asc64qual}/{eol}          { CHECK_FOR_DECLIST; BEGIN 0; return fqASC64QUAL; }
+    ^{asc33qual}/{eol}          { CHECK_FOR_DECLIST; BEGIN 0; return fqASC33QUAL; }
+    ^.*$                        { BEGIN 0; return fqUNRECOGNIZED; }
+}
+
+<INLINE_SEQUENCE>
+{
+    {base}+                     { BEGIN 0; return fqBASESEQ; }
+    {cskey}{color}+             { BEGIN 0; return fqCOLORSEQ; }
+}
+
+<QTAG_LINE>
+{
+    .+$                         { return fqTOKEN; /* do not bother to parse the inside of the line */ }
+    {eol}                       { BEGIN IN_QUALITY; ENDLINE }
+}
+
+<IN_QUALITY,INLINE_QUALITY,DECLIST>
+{
+    {ws}                        { } 
+    {digits}                    { BEGIN DECLIST; return fqNUMBER; }
+}
+
+<IN_QUALITY>
+{
+    ^{asc64qual}/{eol}          { CHECK_FOR_DECLIST; return fqASC64QUAL; }
+    ^{asc33qual}/{eol}          { CHECK_FOR_DECLIST; return fqASC33QUAL; }
+    {eol}                       { BEGIN 0; ENDLINE; }
+    .                           { return yytext[0]; }
+}
+
+<INLINE_QUALITY>
+{
+    {digits}/{eol}              { BEGIN DECLIST; return fqNUMBER; }
+    {asc64qual}/{eol}           { CHECK_FOR_DECLIST; return fqASC64QUAL; }
+    {asc33qual}/{eol}           { CHECK_FOR_DECLIST; return fqASC33QUAL; }
+    {eol}                       { BEGIN 0; ENDLINE; }
+    .                           { return yytext[0]; }
+}
+
+<DECLIST>
+{
+    {digits}/{eol}              { return fqNUMBER; }
+    {eol}                       { BEGIN 0; ENDLINE; }
+    .                           { return yytext[0]; }
+}
+
+{eol}                           { ENDLINE; }
+
+%%    
+
+rc_t CC FASTQScan_yylex_init(FASTQParseBlock* sb, bool debug)
+{
+	if (yylex_init_extra(sb, &sb->scanner) != 0)
+	{
+		return RC ( rcKFG, rcMgr, rcParsing, rcMemory, rcExhausted );
+	}		
+
+	yyset_debug(debug ? 1 : 0, sb->scanner);
+
+    yy_push_state(INITIAL, sb->scanner);
+
+    sb->column = 1;
+
+	return 0;
+}
+
+void CC FASTQScan_yylex_destroy(FASTQParseBlock* sb)
+{
+	if (sb->scanner)
+	{
+		yylex_destroy(sb->scanner);
+	}		
+	sb->scanner=0;
+}
+
+void CC FASTQScan_inline_sequence(FASTQParseBlock* pb)
+{
+    yy_pop_state(pb->scanner);
+    yy_push_state(INLINE_SEQUENCE, pb->scanner);
+}
+
+void CC FASTQScan_inline_quality(FASTQParseBlock* pb)
+{
+    yy_pop_state(pb->scanner);
+    yy_push_state(INLINE_QUALITY, pb->scanner);
+}
+
+/* 
+ * True if the token appears to be a comma/whitespace separated list of signed decimals, each no longer than 3 decimal positions.
+ */
+bool IsDecList(const char* token, size_t* size, int* p_newToken)
+{
+    size_t firstTokenSize = 0;
+    size_t curNumberSize = 0;
+    int newToken;
+    bool inFirstToken = true;
+    size_t i;
+    for (i=0; i < *size; ++i)
+    {
+        char ch=token[i];
+        if (strchr("0123456789, -+", ch) == NULL)
+        {
+            return false;
+        }
+        if (inFirstToken)
+        {
+            if (i == 0)
+            {   /* decide on the first character */ 
+                if (isdigit(ch))
+                {
+                    newToken = fqNUMBER;
+                    firstTokenSize = 1;
+                    curNumberSize = 1;
+                }
+                else if (ch == '-' || ch == '+')
+                {
+                    newToken = ch;
+                    firstTokenSize = 1;
+                    inFirstToken = false;
+                }
+                else
+                {
+                    return false;
+                }
+            }
+            else if (isdigit(ch))
+            {   /* keep on tracking the first token's size */
+                ++firstTokenSize;
+                ++curNumberSize;
+                if (curNumberSize > 3)
+                {
+                    return false;
+                }
+            }
+            else
+            {   /* end of the first token */ 
+                curNumberSize = 0;
+                inFirstToken = false;
+            }
+        }
+        else if (isdigit(ch))
+        {   /* keep on tracking the current number's size */
+            ++curNumberSize;
+            if (curNumberSize > 3)
+            {
+                return false;
+            }
+        }
+        else
+        {
+            curNumberSize = 0;
+        }
+    }
+    *size = firstTokenSize;
+    *p_newToken = newToken;
+    return true;
+}
+
+void CC FASTQ_unlex(FASTQParseBlock* pb, FASTQToken* token)
+{
+    size_t i;
+    struct yyguts_t* yyg = (struct yyguts_t*)pb->scanner;
+    for (i = 0; i < token->tokenLength; ++i)
+    {
+        yyunput(token->tokenText[token->tokenLength-1-i], yyg->yytext_r, pb->scanner);
+    }
+    yyextra -> column -= token->tokenLength; 
+    yyextra -> length -= token->tokenLength; 
+}
diff --git a/tools/fastq-loader/fastq-loader.c b/tools/fastq-loader/fastq-loader.c
new file mode 100644
index 0000000..9acc6e5
--- /dev/null
+++ b/tools/fastq-loader/fastq-loader.c
@@ -0,0 +1,541 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ * 
+ */
+
+#include "latf-load.vers.h"
+
+#include <string.h>
+#include <stdlib.h>
+#include <limits.h>
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <loader/common-writer.h>
+#include <klib/rc.h>
+#include <klib/out.h>
+#include <klib/log.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <kapp/log-xml.h>
+#include <align/writer-refseq.h>
+
+extern rc_t run(char const argv0[], 
+                struct CommonWriterSettings* G,
+                unsigned countReads, 
+                const char* reads[],
+                uint8_t qualityOffset,
+                const uint8_t defaultReadNumbers[]);
+
+/* MARK: Arguments and Usage */
+static char const option_input[] = "input";
+static char const option_output[] = "output";
+static char const option_tmpfs[] = "tmpfs";
+static char const option_qual_compress[] = "qual-quant";
+static char const option_cache_size[] = "cache-size";
+static char const option_max_err_count[] = "max-err-count";
+static char const option_max_rec_count[] = "max-rec-count";
+static char const option_platform[] = "platform";
+static char const option_quality[] = "quality";
+static char const option_read[] = "read";
+static char const option_max_err_pct[] = "max-err-pct";
+
+#define OPTION_INPUT option_input
+#define OPTION_OUTPUT option_output
+#define OPTION_TMPFS option_tmpfs
+#define OPTION_QCOMP option_qual_compress
+#define OPTION_CACHE_SIZE option_cache_size
+#define OPTION_MAX_ERR_COUNT option_max_err_count
+#define OPTION_MAX_REC_COUNT option_max_rec_count
+#define OPTION_PLATFORM option_platform
+#define OPTION_QUALITY option_quality
+#define OPTION_READ option_read
+#define OPTION_MAX_ERR_PCT option_max_err_pct
+
+#define ALIAS_INPUT  "i"
+#define ALIAS_OUTPUT "o"
+#define ALIAS_TMPFS "t"
+#define ALIAS_QCOMP "Q"
+#define ALIAS_MAX_ERR_COUNT "E"
+#define ALIAS_PLATFORM "p"
+#define ALIAS_READ "r"
+/* this alias is deprecated (conflicts with -q for --quiet): */
+#define ALIAS_QUALITY "q"
+
+static
+char const * output_usage[] = 
+{
+    "Path and Name of the output database.",
+    NULL
+};
+
+static
+char const * tmpfs_usage[] = 
+{
+    "Path to be used for scratch files.",
+    NULL
+};
+
+static
+char const * qcomp_usage[] = 
+{
+    "Quality scores quantization level, can be a number (0: none - default, 1: 2bit, 2: 1bit), or a string like '1:10,10:20,20:30,30:-' (which is equivalent to 1).",
+    NULL
+};
+
+static
+char const * cache_size_usage[] = 
+{
+    "Set the cache size in MB for the temporary indices",
+    NULL
+};
+
+static
+char const * mrc_usage[] = 
+{
+    "Set the maximum number of records to process from the FASTQ file",
+    NULL
+};
+
+static
+char const * mec_usage[] = 
+{
+    "Set the maximum number of errors to ignore from the FASTQ file",
+    NULL
+};
+
+static
+char const * use_platform[] = 
+{
+    "Platform (ILLUMINA, LS454, SOLID, COMPLETE_GENOMICS, HELICOS, PACBIO, IONTORRENT, CAPILLARY)",
+    NULL
+};
+
+static
+char const * use_quality[] = 
+{
+    "Quality encoding (PHRED_33, PHRED_64)",
+    NULL
+};
+
+/*static
+char const * use_read[] = 
+{
+    "Default read number (1 or 2)",
+    NULL
+};*/
+
+static
+char const * use_max_err_pct[] = 
+{
+    "acceptable percentage of spots creation errors, default is 5",
+    NULL
+};
+
+OptDef Options[] = 
+{
+    /* order here is same as in param array below!!! */               /* max#,  needs param, required */
+    { OPTION_OUTPUT,        ALIAS_OUTPUT,           NULL, output_usage,     1,  true,        true },
+    { OPTION_TMPFS,         ALIAS_TMPFS,            NULL, tmpfs_usage,      1,  true,        false },
+    { OPTION_QCOMP,         ALIAS_QCOMP,            NULL, qcomp_usage,      1,  true,        false },
+    { OPTION_CACHE_SIZE,    NULL,                   NULL, cache_size_usage, 1,  true,        false },
+    { OPTION_MAX_REC_COUNT, NULL,                   NULL, mrc_usage,        1,  true,        false },
+    { OPTION_MAX_ERR_COUNT, ALIAS_MAX_ERR_COUNT,    NULL, mec_usage,        1,  true,        false },
+    { OPTION_PLATFORM,      ALIAS_PLATFORM,         NULL, use_platform,     1,  true,        false },
+    { OPTION_QUALITY,       ALIAS_QUALITY,          NULL, use_quality,      1,  true,        true },
+    { OPTION_MAX_ERR_PCT,   NULL,                   NULL, use_max_err_pct,  1,  true,        false },
+/*    { OPTION_READ,          ALIAS_READ,             NULL, use_read,         0,  true,        false },*/
+};
+
+const char* OptHelpParam[] =
+{
+    /* order here is same as in OptDef array above!!! */
+    "path",
+    "path-to-file",
+    "phred-score",
+    "mbytes",
+    "count",
+    "count",
+    NULL,
+    NULL,
+    NULL,
+};
+
+rc_t UsageSummary (char const * progname)
+{
+    return KOutMsg (
+        "Usage:\n"
+        "\t%s [options] <fastq-file> ...\n"
+        "\n"
+        "Summary:\n"
+        "\tLoad FASTQ formatted data files\n"
+        "\n"
+        "Example:\n"
+        "\t%s -p 454 -o /tmp/SRZ123456 123456-1.fastq 123456-2.fastq\n"
+        "\n"
+        ,progname, progname);
+}
+
+char const UsageDefaultName[] = "fastq-load";
+
+rc_t CC Usage (const Args * args)
+{
+    rc_t rc;
+    int i;
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    const size_t argsQty = sizeof(Options) / sizeof(Options[0]);
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+    if (rc)
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary (progname);
+
+    for(i = 0; i < argsQty; i++ ) {
+        if( Options[i].required && Options[i].help[0] != NULL ) {
+            HelpOptionLine(Options[i].aliases, Options[i].name, OptHelpParam[i], Options[i].help);
+        }
+    }
+    OUTMSG(("\nOptions:\n"));
+    for(i = 0; i < argsQty; i++ ) {
+        if( !Options[i].required && Options[i].help[0] != NULL ) {
+            HelpOptionLine(Options[i].aliases, Options[i].name, OptHelpParam[i], Options[i].help);
+        }
+    }
+    XMLLogger_Usage();
+    OUTMSG(("\n"));
+    HelpOptionsStandard ();
+    HelpVersion (fullpath, KAppVersion());
+    return rc;
+}
+
+/* MARK: Definitions and Globals */
+
+#define SCHEMAFILE "align/align.vschema"
+
+CommonWriterSettings G;
+
+uint32_t CC KAppVersion (void)
+{
+    return LATF_LOAD_VERS;
+}
+
+#ifdef _WIN32
+#include <process.h>
+#else
+#include <unistd.h>
+#endif
+static void set_pid(void)
+{
+    G.pid = getpid();
+}
+
+static rc_t PathWithBasePath(char rslt[], size_t sz, char const path[], char const base[])
+{
+    size_t const plen = strlen(path);
+    bool const hasBase = base && base[0];
+    bool const isBareName = strchr(path, '/') == NULL;
+    
+    if (isBareName && hasBase) {
+        if (string_printf(rslt, sz, NULL, "%s/%s", base, path) == 0)
+            return 0;
+    }
+    else if (plen < sz) {
+        strcpy(rslt, path);
+        return 0;
+    }
+    {
+        rc_t const rc = RC(rcApp, rcArgv, rcAccessing, rcBuffer, rcInsufficient);
+        (void)LOGERR(klogErr, rc, "The path to the file is too long");
+        return rc;
+    }
+}
+
+rc_t CC KMain (int argc, char * argv[])
+{
+    Args * args;
+    rc_t rc;
+    char *files[256];
+    uint8_t defaultReadNumbers[256];
+    char *name_buffer = NULL;
+    unsigned next_name = 0;
+    unsigned nbsz = 0;
+    char const *value;
+    char *dummy;
+    const XMLLogger* xml_logger = NULL;
+    uint8_t qualityOffset;
+    
+    memset(&G, 0, sizeof(G));
+    
+    G.mode = mode_Archive;
+    G.maxSeqLen = TableWriterRefSeq_MAX_SEQ_LEN;
+    G.schemaPath = SCHEMAFILE;
+    G.omit_aligned_reads = true;
+    G.omit_reference_reads = true;
+    G.minMapQual = 0; /* accept all */
+    G.tmpfs = "/tmp";
+#if _ARCH_BITS == 32
+    G.cache_size = ( size_t ) 1 << 30;
+#else
+    G.cache_size = ( size_t ) 10 << 30;
+#endif
+    G.maxErrCount = 1000;
+    G.maxErrPct = 5;
+    G.acceptNoMatch = true; 
+    G.minMatchCount = 0; 
+    G.QualQuantizer="0";
+    
+    set_pid();
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 2, Options,
+                            sizeof Options / sizeof (OptDef), XMLLogger_Args, XMLLogger_ArgsQty);
+
+    while (rc == 0) {
+        uint32_t pcount;
+
+        if( (rc = XMLLogger_Make(&xml_logger, NULL, args)) != 0 ) {
+            break;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_TMPFS, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_TMPFS, 0, &G.tmpfs);
+            if (rc)
+                break;
+        }
+        else if (pcount > 1)
+        {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+            OUTMSG (("Single parameter required\n"));
+            MiniUsage (args);
+            break;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_OUTPUT, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_OUTPUT, 0, &G.outpath);
+            if (rc)
+                break;
+        }
+        else if (pcount > 1)
+        {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+            OUTMSG (("Single output parameter required\n"));
+            MiniUsage (args);
+            break;
+        }
+        else {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcInsufficient);
+            OUTMSG (("Output parameter required\n"));
+            MiniUsage (args);
+            break;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_QCOMP, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_QCOMP, 0, &G.QualQuantizer);
+            if (rc)
+                break;
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_CACHE_SIZE, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_CACHE_SIZE, 0, &value);
+            if (rc)
+                break;
+            G.cache_size = strtoul(value, &dummy, 0) * 1024UL * 1024UL;
+            if (G.cache_size == 0  || G.cache_size == ULONG_MAX) {
+                rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcIncorrect);
+                OUTMSG (("cache-size: bad value\n"));
+                MiniUsage (args);
+                break;
+            }
+        }
+        
+        G.expectUnsorted = true;
+        
+        rc = ArgsOptionCount (args, OPTION_MAX_REC_COUNT, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_MAX_REC_COUNT, 0, &value);
+            if (rc)
+                break;
+            G.maxAlignCount = strtoul(value, &dummy, 0);
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_MAX_ERR_COUNT, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_MAX_ERR_COUNT, 0, &value);
+            if (rc)
+                break;
+            G.maxErrCount = strtoul(value, &dummy, 0);
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_MAX_ERR_PCT, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_MAX_ERR_PCT, 0, &value);
+            if (rc)
+                break;
+            G.maxErrPct = strtoul(value, &dummy, 0);
+        }
+        
+        rc = ArgsOptionCount (args, OPTION_PLATFORM, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_PLATFORM, 0, &value);
+            if (rc)
+                break;
+            G.platform = PlatformToId(value);
+            if (G.platform == SRA_PLATFORM_UNDEFINED)
+            {
+                rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcIncorrect);
+                (void)PLOGERR(klogErr, (klogErr, rc, "Invalid platform $(v)",
+                            "v=%s", value));
+                break;
+            }
+        }
+        else
+            G.platform = SRA_PLATFORM_UNDEFINED;
+
+        rc = ArgsOptionCount (args, OPTION_QUALITY, &pcount);
+        if (rc)
+            break;
+        if (pcount == 1)
+        {
+            rc = ArgsOptionValue (args, OPTION_QUALITY, 0, &value);
+            if (rc)
+                break;
+            if (strcmp(value, "PHRED_33") == 0)
+                qualityOffset = 33;
+            else if (strcmp(value, "PHRED_64") == 0)
+                qualityOffset = 64;
+            else
+            {
+                rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcIncorrect);
+                (void)PLOGERR(klogErr, (klogErr, rc, "Invalid quality encoding $(v)",
+                            "v=%s", value));
+                break;
+            }
+        }
+        else
+            qualityOffset = 0;
+            
+        rc = ArgsParamCount (args, &pcount);
+        if (rc) break;
+        if (pcount == 0)
+        {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcInsufficient);
+            MiniUsage (args);
+            break;
+        }
+        else if (pcount > sizeof(files)/sizeof(files[0])) {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
+            (void)PLOGERR(klogErr, (klogErr, rc, "$(count) input files is too many, $(max) is the limit",
+                        "count=%u,max=%u", (unsigned)pcount, (unsigned)(sizeof(files)/sizeof(files[0]))));
+            break;
+        }
+        else {
+            unsigned need = G.inpath ? (strlen(G.inpath) + 1) * pcount : 0;
+            unsigned i;
+            
+            for (i = 0; i < pcount; ++i) {
+                rc = ArgsParamValue(args, i, &value);
+                if (rc) break;
+                need += strlen(value) + 1;
+            }
+            nbsz = need;
+        }
+        
+        name_buffer = malloc(nbsz);
+        if (name_buffer == NULL) {
+            rc = RC(rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted);
+            break;
+        }
+        
+        rc = ArgsParamCount (args, &pcount);
+        if (rc == 0) {
+            unsigned i;
+            
+            for (i = 0; i < pcount; ++i) {
+                rc = ArgsParamValue(args, i, &value);
+                if (rc) break;
+
+                defaultReadNumbers[i] = 0;
+                files[i] = name_buffer + next_name;
+                rc = PathWithBasePath(name_buffer + next_name, nbsz - next_name, value, G.inpath);
+                if (rc) break;
+                next_name += strlen(name_buffer + next_name) + 1;
+            }
+        }
+        else
+            break;
+        
+        rc = run(argv[0], &G, pcount, (char const **)files, qualityOffset, defaultReadNumbers);
+        break;
+    }
+    free(name_buffer);
+
+    value = G.outpath ? strrchr(G.outpath, '/') : "/???";
+    if( value == NULL ) {
+        value = G.outpath;
+    } else {
+        value++;
+    }
+    if (rc) {
+        (void)PLOGERR(klogErr, (klogErr, rc, "load failed",
+                "severity=total,status=failure,accession=%s,errors=%u", value, G.errCount));
+    } else {
+        (void)PLOGMSG(klogInfo, (klogInfo, "loaded",
+                "severity=total,status=success,accession=%s,errors=%u", value, G.errCount));
+    }
+    ArgsWhack(args);
+    XMLLogger_Release(xml_logger);
+    return rc;
+}
diff --git a/tools/fastq-loader/fastq-parse.h b/tools/fastq-loader/fastq-parse.h
new file mode 100644
index 0000000..fdd4d2d
--- /dev/null
+++ b/tools/fastq-loader/fastq-parse.h
@@ -0,0 +1,140 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_fastq_scan_
+#define _h_fasta_scan_
+
+#include <align/extern.h>
+#include <klib/text.h>
+
+#include <loader/common-reader-priv.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* values used in validating quality lines */
+#define MIN_PHRED_33 33
+#define MAX_PHRED_33 74
+#define MIN_PHRED_64 64
+#define MAX_PHRED_64 127
+
+struct FastqSequence
+{
+    Sequence_vt sequence_vt;
+    KRefcount   refcount;
+
+    /* tagline components: */
+    String spotname; /* tag line up to and including coordinates */
+    String spotgroup; /* token following '#' */
+    uint8_t readnumber; /* token following '/' 1 - IsFirst, 2 - IsSecond, 0 - dont know */
+
+    /* not populated at this time: */
+#if 0
+    String rungroup; 
+    String fmt_name; /* x and y replaced with $X and $Y */
+    uint8_t coord_num;
+    int32_t coords[16];
+#endif
+
+    char* read;
+    bool is_colorspace;
+    
+    String  quality;
+    uint8_t qualityOffset;
+    
+    bool lowQuality;
+};
+
+struct FastqRecord
+{
+    Record  dad;
+
+    KDataBuffer source;
+    struct FastqSequence    seq;
+    Rejected*               rej; 
+};
+
+typedef struct FASTQToken
+{ 
+    const char* tokenText;
+    size_t tokenLength;
+    size_t line_no;
+    size_t column_no;
+} FASTQToken;
+
+typedef struct FASTQParseBlock
+{
+    void* self;
+    size_t (CC *input)(struct FASTQParseBlock* sb, char* buf, size_t max_size);
+    uint8_t phredOffset;
+    
+    void* scanner;
+    size_t length; /* input characters consumed for the current record */
+    FASTQToken* lastToken;
+    struct FastqRecord* record;
+    size_t column;
+
+    /* temporaries for bison: */
+    KDataBuffer tagLine;
+
+    size_t spotNameLength;
+    bool spotNameDone;
+    size_t spotGroupOffset;
+    size_t spotGroupLength;
+
+    KDataBuffer quality;
+    size_t expectedQualityLines;
+    
+    uint8_t defaultReadNumber;
+    
+    bool fatalError;
+} FASTQParseBlock;
+
+extern rc_t CC FASTQScan_yylex_init(FASTQParseBlock* context, bool debug);
+extern void CC FASTQScan_yylex_destroy(FASTQParseBlock* context);
+
+/* explicit FLEX state control for bison*/
+extern void CC FASTQScan_inline_sequence(FASTQParseBlock* pb);
+extern void CC FASTQScan_inline_quality(FASTQParseBlock* pb);
+
+extern void CC FASTQ_set_lineno (int line_number, void* scanner);
+
+extern int CC FASTQ_lex(FASTQToken* pb, void * scanner);
+extern void CC FASTQ_unlex(FASTQParseBlock* pb, FASTQToken* token);
+extern void CC FASTQ_qualityContext(FASTQParseBlock* pb);
+
+extern int FASTQ_debug; /* set to 1 to print Bison trace */ 
+
+extern int CC FASTQ_parse(FASTQParseBlock* pb); /* 0 = end of input, 1 = success, a new record is in context->record, 2 - syntax error */
+
+extern void CC FASTQ_error(FASTQParseBlock* pb, const char* msg);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_fastq_scan_ */
diff --git a/tools/fastq-loader/fastq-reader.c b/tools/fastq-loader/fastq-reader.c
new file mode 100644
index 0000000..6129920
--- /dev/null
+++ b/tools/fastq-loader/fastq-reader.c
@@ -0,0 +1,701 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct FastqReaderFile  FastqReaderFile;
+typedef struct FastqRecord      FastqRecord;
+typedef struct FastqSequence    FastqSequence;
+
+#define READERFILE_IMPL FastqReaderFile
+#define RECORD_IMPL     FastqRecord
+#define SEQUENCE_IMPL   FastqSequence
+
+#include "fastq-reader.h"
+#include "fastq-parse.h"
+
+#include <stdlib.h>
+#include <sysalloc.h>
+#include <assert.h>
+#include <string.h>
+
+#include <kapp/loader-file.h>
+#include <kfs/directory.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+
+static rc_t FastqSequenceInit(FastqSequence* self);
+
+/*--------------------------------------------------------------------------
+ * FastqRecord
+ */
+static rc_t FastqRecordAddRef   ( const FastqRecord* self );
+static rc_t FastqRecordRelease  ( const FastqRecord* self );
+static rc_t FastqRecordGetSequence  ( const FastqRecord* self, const Sequence** result);
+static rc_t FastqRecordGetAlignment ( const FastqRecord* self, const Alignment** result);
+static rc_t FastqRecordGetRejected  ( const FastqRecord* self, const Rejected** result);
+
+static Record_vt_v1 FastqRecord_vt = 
+{
+    1, 0, 
+    /* start minor version == 0 */
+    FastqRecordAddRef,
+    FastqRecordRelease,
+    FastqRecordGetSequence,
+    FastqRecordGetAlignment,
+    FastqRecordGetRejected,
+    /* end minor version == 0 */
+};
+
+static rc_t CC FastqRecordInit ( FastqRecord* self )
+{
+    assert(self);
+    self->dad.vt.v1 = & FastqRecord_vt; 
+    KDataBufferMakeBytes ( & self->source, 0 );
+    self->rej = 0;
+    return FastqSequenceInit(& self->seq);
+}
+
+static rc_t FastqRecordWhack( const FastqRecord* cself )
+{
+    rc_t rc = 0;
+    FastqRecord* self = (FastqRecord*)cself;
+    assert(self);
+    
+    free((void*)self->seq.read);
+    
+    rc = KDataBufferWhack( & self->source );
+    
+    if (rc)
+        RejectedRelease(self->rej);
+    else
+        rc = RejectedRelease(self->rej);
+        
+    free(self);    
+      
+    return rc;
+}
+
+static rc_t FastqRecordAddRef( const FastqRecord* self )
+{
+    assert(self);
+    KRefcountAdd( & self->seq.refcount, "FastqRecord" );
+    /* TODO: handle rc from KRefcountAdd */
+    return 0;
+}
+
+static rc_t FastqRecordRelease( const FastqRecord* cself )
+{
+    if ( cself != NULL )
+    {
+        FastqRecord *self = ( FastqRecord* ) cself;
+        switch ( KRefcountDrop ( & self ->seq.refcount, "FastqRecord" ) )
+        {
+        case krefWhack:
+            FastqRecordWhack( self );
+            break;
+        default:
+            /* TODO: handle other values */
+            break;
+        }
+    }
+    return 0;
+}
+
+static rc_t FastqRecordGetSequence( const FastqRecord* self, const Sequence** result )
+{
+    rc_t rc = 0;
+    assert(result);
+    *result = 0;
+    if (self->rej == 0)
+    {
+        rc = FastqRecordAddRef(self);
+        if (rc == 0)
+            *result = (const Sequence*) & self->seq;
+    }
+    return rc;
+}
+
+static rc_t FastqRecordGetAlignment( const FastqRecord* self, const Alignment** result)
+{
+    *result = 0;
+    return 0;
+}
+
+static rc_t FastqRecordGetRejected( const FastqRecord* self, const Rejected** result)
+{
+    rc_t rc = 0;
+    assert(result);
+    *result = 0;
+    if (self->rej != 0)
+    {
+        rc = RejectedAddRef(self->rej);
+        if (rc == 0)
+            *result = self->rej;
+    }
+    return rc;
+}
+
+/*--------------------------------------------------------------------------
+ * FastqSequence
+ */
+
+static rc_t FastqSequenceAddRef              ( const SEQUENCE_IMPL* self );
+static rc_t FastqSequenceRelease             ( const SEQUENCE_IMPL* self );
+static rc_t FastqSequenceGetReadLength       ( const SEQUENCE_IMPL *self, uint32_t *length );
+static rc_t FastqSequenceGetRead             ( const SEQUENCE_IMPL *self, char *sequence );
+static rc_t FastqSequenceGetRead2            ( const SEQUENCE_IMPL *self, char *sequence, uint32_t start, uint32_t stop );
+static rc_t FastqSequenceGetQuality          ( const SEQUENCE_IMPL *self, const int8_t **quality, uint8_t *offset, int *qualType );
+static rc_t FastqSequenceGetSpotGroup        ( const SEQUENCE_IMPL *self, const char **name, size_t *length );
+static rc_t FastqSequenceGetSpotName         ( const SEQUENCE_IMPL *self, const char **name, size_t *length );
+static bool FastqSequenceIsColorSpace        ( const SEQUENCE_IMPL *self );
+static rc_t FastqSequenceGetCSKey            ( const SEQUENCE_IMPL *self, char cskey[1] );
+static rc_t FastqSequenceGetCSReadLength     ( const SEQUENCE_IMPL *self, uint32_t *length );
+static rc_t FastqSequenceGetCSRead           ( const SEQUENCE_IMPL *self, char *sequence );
+static rc_t FastqSequenceGetCSQuality        ( const SEQUENCE_IMPL *self, const int8_t **quality, uint8_t *offset, int *qualType );
+static bool FastqSequenceRecordWasPaired     ( const SEQUENCE_IMPL *self );
+static int  FastqSequenceGetOrientationSelf  ( const SEQUENCE_IMPL *self );
+static int  FastqSequenceGetOrientationMate  ( const SEQUENCE_IMPL *self );
+static bool FastqSequenceRecordIsFirst       ( const SEQUENCE_IMPL *self );
+static bool FastqSequenceRecordIsSecond      ( const SEQUENCE_IMPL *self );
+static bool FastqSequenceIsDuplicate         ( const SEQUENCE_IMPL *self ); 
+static bool FastqSequenceIsLowQuality        ( const SEQUENCE_IMPL *self ); 
+static rc_t FastqSequenceGetTI               ( const SEQUENCE_IMPL *self, uint64_t *ti );
+
+static Sequence_vt_v1 FastqSequence_vt = 
+{
+    1, 0, 
+    /* start minor version == 0 */
+    FastqSequenceAddRef,
+    FastqSequenceRelease,
+    FastqSequenceGetReadLength,
+    FastqSequenceGetRead,
+    FastqSequenceGetRead2,
+    FastqSequenceGetQuality,
+    FastqSequenceGetSpotGroup,
+    FastqSequenceGetSpotName,
+    FastqSequenceIsColorSpace,
+    FastqSequenceGetCSKey,
+    FastqSequenceGetCSReadLength,
+    FastqSequenceGetCSRead,
+    FastqSequenceGetCSQuality,
+    FastqSequenceRecordWasPaired,
+    FastqSequenceGetOrientationSelf,
+    FastqSequenceGetOrientationMate,
+    FastqSequenceRecordIsFirst,
+    FastqSequenceRecordIsSecond,
+    FastqSequenceIsDuplicate,  
+    FastqSequenceIsLowQuality, 
+    FastqSequenceGetTI,        
+    /* end minor version == 0 */
+};
+
+static
+rc_t
+FastqSequenceInit(FastqSequence* self)
+{
+    self->sequence_vt.v1 = & FastqSequence_vt;
+    KRefcountInit ( & self -> refcount, 1, "FastqSequence", "FastqSequenceInit", "");
+
+    StringInit(&self->spotname, 0, 0, 0);
+    StringInit(&self->spotgroup, 0, 0, 0);
+    self->readnumber = 0; 
+
+    self->read = 0;
+    self->is_colorspace = false;
+    StringInit(&self->quality, 0, 0, 0);
+    self->qualityOffset = 0;
+    self->lowQuality = false;
+
+    return 0;
+}
+
+static const FastqRecord*
+FastqSequenceToRecord(const FastqSequence* seq) 
+{
+    return ( const FastqRecord * ) ( (uint8_t*)seq - offsetof ( FastqRecord, seq ) );
+}
+
+static rc_t FastqSequenceAddRef( const FastqSequence* self )
+{
+    switch (KRefcountAdd( & self->refcount, "FastqSequence" ))
+    {
+    case krefLimit:
+        return RC ( RC_MODULE, rcData, rcAttaching, rcRange, rcExcessive );
+    case krefNegative:
+        return RC ( RC_MODULE, rcData, rcAttaching, rcRefcount, rcInvalid );
+    }
+    return 0;
+}
+
+static rc_t FastqSequenceRelease( const FastqSequence* self )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "FastqSequence" ) )
+        {
+        case krefWhack:
+            return FastqRecordWhack ( FastqSequenceToRecord(self) );
+
+        case krefNegative:
+            return RC ( RC_MODULE, rcData, rcDestroying, rcSelf, rcDestroyed );
+        }
+    }
+
+    return 0;
+
+}
+
+static rc_t FastqSequenceGetReadLength ( const FastqSequence *self, uint32_t *length )
+{
+    assert(self);
+    if ( self->read == NULL || self->is_colorspace )
+    {
+        *length = 0;
+    }
+    else
+    {
+        *length = string_measure(self->read, NULL);
+    }
+    return 0;
+}
+
+static rc_t FastqSequenceGetRead ( const FastqSequence *self, char *sequence )
+{
+    assert(self);
+    assert(sequence);
+    if ( self->read != NULL && !self->is_colorspace )
+    {
+        uint32_t length = string_measure(self->read, NULL);
+        string_copy(sequence, length, self->read, length);
+    }
+    return 0;
+}
+
+static rc_t FastqSequenceGetRead2 ( const FastqSequence *self, char *sequence, uint32_t start, uint32_t stop )
+{
+    assert(self);
+    assert(sequence);
+    if ( self->read == NULL || self->is_colorspace )
+    {
+        return RC( RC_MODULE, rcData, rcAccessing, rcItem, rcEmpty );
+    }
+    else
+    {
+        uint32_t length = string_measure(self->read, NULL);
+        if (start >= length || stop >= length || start >= stop)
+        {
+            return RC( RC_MODULE, rcData, rcAccessing, rcRange, rcInvalid);
+        }
+        string_copy(sequence, stop - start, self->read + start, stop - start);
+    }
+    return 0;
+}
+
+static rc_t FastqSequenceGetQuality ( const FastqSequence *self, const int8_t **quality, uint8_t *offset, int *qualType )
+{
+    assert(self);
+    assert(quality);
+    assert(offset);
+    assert(qualType);
+    *quality = NULL;
+    if ( self->quality.size != 0)
+    {
+        *quality = (const int8_t *)self->quality.addr;
+        *offset = self->qualityOffset;
+    }
+    else
+    {
+        *quality = NULL;
+        *offset = 0;
+    }
+    *qualType = QT_Phred;
+    return 0;
+}
+
+static rc_t FastqSequenceGetSpotGroup ( const FastqSequence *self, const char **name, size_t *length )
+{
+    assert(self);
+    assert(name);
+    *name = self->spotgroup.addr;
+    *length = self->spotgroup.len;
+    return 0;
+}
+
+static rc_t FastqSequenceGetSpotName ( const FastqSequence *self, const char **name, size_t *length )
+{
+    assert(self);
+    assert(name);
+    *name = self->spotname.addr;
+    *length = self->spotname.len;
+    return 0;
+}
+
+static bool FastqSequenceIsColorSpace ( const FastqSequence *self )
+{
+    assert(self);
+    return self->is_colorspace;
+}
+
+static rc_t FastqSequenceGetCSKey ( const FastqSequence *self, char cskey[1] )
+{
+    assert(self);
+    if (self->is_colorspace)
+        cskey[0] = self->read[0];
+    return 0;
+}
+
+static rc_t FastqSequenceGetCSReadLength ( const FastqSequence *self, uint32_t *length )
+{
+    assert(self);
+    if ( self->read == NULL )
+    {
+        *length = 0;
+    }
+    else if (self->is_colorspace)
+    {
+        *length = string_measure(self->read + 1, NULL);
+    }
+    return 0;
+}
+
+static rc_t FastqSequenceGetCSRead ( const FastqSequence *self, char *sequence )
+{
+    assert(self);
+    assert(sequence);
+    if ( self->read != NULL && self->is_colorspace )
+    {
+        uint32_t length = string_measure(self->read + 1, NULL);
+        string_copy(sequence, length, self->read + 1, length);
+    }
+    return 0;
+}
+
+static rc_t FastqSequenceGetCSQuality ( const FastqSequence *self, const int8_t **quality, uint8_t *offset, int *qualType )
+{
+    assert(self);
+    assert(quality);
+    assert(offset);
+    assert(qualType);
+    *quality = NULL;
+    if ( self->quality.size != 0 && self->is_colorspace )
+    {
+        *quality = (const int8_t *)self->quality.addr + 1;
+        *offset = self->qualityOffset;
+    }
+    else
+    {
+        *quality = NULL;
+        *offset = 0;
+    }
+    *qualType = QT_Phred;
+    return 0;
+}
+
+static bool FastqSequenceRecordWasPaired ( const FastqSequence *self )
+{
+    assert(self);
+    return self->readnumber != 0;
+}
+
+static int FastqSequenceGetOrientationSelf ( const FastqSequence *self )
+{
+    assert(self);
+    return ReadOrientationUnknown;
+}
+
+static int FastqSequenceGetOrientationMate ( const FastqSequence *self )
+{
+    assert(self);
+    return ReadOrientationUnknown;
+}
+
+static bool FastqSequenceRecordIsFirst ( const FastqSequence *self )
+{
+    assert(self);
+    return self->readnumber == 1;
+}
+
+static bool FastqSequenceRecordIsSecond ( const FastqSequence *self )
+{
+    assert(self);
+    return self->readnumber == 2;
+}
+
+static bool FastqSequenceIsDuplicate         ( const SEQUENCE_IMPL *self )
+{
+    assert(self);
+    return 0;
+}
+
+static bool FastqSequenceIsLowQuality        ( const SEQUENCE_IMPL *self )
+{
+    assert(self);
+    return self->lowQuality;
+}
+
+static rc_t FastqSequenceGetTI               ( const SEQUENCE_IMPL *self, uint64_t *ti )
+{
+    assert(self);
+    return false;
+}
+
+/*--------------------------------------------------------------------------
+ * FastqReaderFile
+ */
+
+static rc_t FastqReaderFileWhack( READERFILE_IMPL* self );
+static rc_t FastqReaderFileGetRecord ( const READERFILE_IMPL *self, const Record** result );
+static float FastqReaderFileGetProportionalPosition ( const READERFILE_IMPL *self );
+static rc_t FastqReaderFileGetReferenceInfo ( const READERFILE_IMPL *self, const ReferenceInfo** result );
+
+static ReaderFile_vt_v1 FastqReaderFile_vt = 
+{
+    1, 0, 
+    /* start minor version == 0 */
+    FastqReaderFileWhack,
+    FastqReaderFileGetRecord,
+    FastqReaderFileGetProportionalPosition,
+    FastqReaderFileGetReferenceInfo,
+    /* end minor version == 0 */
+};
+
+struct FastqReaderFile
+{
+    ReaderFile dad;
+
+    FASTQParseBlock pb; 
+    const KLoaderFile* reader;
+
+    const char* recordStart; /* raw source of the record being currently parsed */
+    size_t curPos;           /* current tokenization position relative to recordStart */
+    bool lastEol;
+    bool eolInserted;
+};
+
+rc_t FastqReaderFileWhack( FastqReaderFile* f )
+{
+    FastqReaderFile* self = (FastqReaderFile*) f;
+
+    FASTQScan_yylex_destroy(& self->pb);
+
+    if (self->reader)
+        KLoaderFile_Release ( self->reader, true );
+
+    ReaderFileWhack( &self->dad );
+
+    free ( self );
+    return 0;
+}
+
+rc_t FastqReaderFileGetRecord ( const FastqReaderFile *f, const Record** result )
+{
+    rc_t rc;
+    FastqReaderFile* self = (FastqReaderFile*) f;
+    
+    if (self->pb.fatalError)
+        return 0;
+
+    self->pb.record = (FastqRecord*)malloc(sizeof(FastqRecord));
+    if (self->pb.record == NULL)
+    {
+        rc = RC ( RC_MODULE, rcData, rcAllocating, rcMemory, rcExhausted );
+        return 0;
+    }
+    rc = FastqRecordInit(self->pb.record);
+    if (rc != 0)
+        return rc;
+
+    self->pb.length = 0;
+    KDataBufferResize( & self->pb.tagLine, 0 );
+    KDataBufferResize( & self->pb.quality, 0 );
+    self->pb.spotNameDone = false;
+
+    if ( FASTQ_parse( & self->pb ) == 0 && self->pb.record->rej == 0 )
+    {   /* normal end of input */
+        RecordRelease((const Record*)self->pb.record);
+        *result = 0;
+        return 0;
+    }
+
+    /*TODO: remove? compensate for an artificially inserted trailing \n */
+    if ( self->eolInserted )
+    {
+        -- self->pb.length;
+        self->eolInserted = false;
+    }
+
+    if (self->pb.record->rej != 0) /* had error(s) */
+    {   /* save the complete raw source in the Rejected object */
+        StringInit(& self->pb.record->rej->source, string_dup(self->recordStart, self->pb.length), self->pb.length, self->pb.length);
+        self->pb.record->rej->fatal = self->pb.fatalError;
+    }
+
+    if (rc == 0 && self->reader != 0)
+    {   
+        /* advance the record start pointer beyond the last token */ 
+        size_t length;
+        rc = KLoaderFile_Read( self->reader, self->pb.length, 0, (const void**)& self->recordStart, & length);
+        if (rc != 0)
+            LogErr(klogErr, rc, "FastqReaderFileGetRecord failed");
+
+        self->curPos -= self->pb.length;
+    }
+
+    StringInit( & self->pb.record->seq.spotname,    (const char*)self->pb.tagLine.base, self->pb.spotNameLength, self->pb.spotNameLength);
+    StringInit( & self->pb.record->seq.spotgroup,   (const char*)self->pb.tagLine.base + self->pb.spotGroupOffset, self->pb.spotGroupLength, self->pb.spotGroupLength);
+    StringInit( & self->pb.record->seq.quality,     (const char*)self->pb.quality.base, self->pb.quality.elem_count, self->pb.quality.elem_count); 
+    self->pb.record->seq.qualityOffset = self->pb.phredOffset;
+    
+    if (self->pb.record->seq.readnumber == 0)
+        self->pb.record->seq.readnumber = self->pb.defaultReadNumber;
+    
+    *result = (const Record*) self->pb.record;
+
+    return rc;
+}
+
+void CC FASTQ_error(struct FASTQParseBlock* sb, const char* msg)
+{
+    if (sb->record->rej == 0)
+    {   /* save the error information in the Rejected object */
+        sb->record->rej = (Rejected*)malloc(sizeof(Rejected));
+        RejectedInit(sb->record->rej);
+
+        sb->record->rej->message    = string_dup(msg, strlen(msg));
+        sb->record->rej->line       = sb->lastToken->line_no;
+        sb->record->rej->column     = sb->lastToken->column_no;
+    }
+    /* subsequent errors in this record will be ignored */
+}
+
+size_t CC FASTQ_input(FASTQParseBlock* pb, char* buf, size_t max_size)
+{
+    FastqReaderFile* self = (FastqReaderFile*)pb->self;
+    size_t length;
+
+    rc_t rc = KLoaderFile_Read( self->reader, 0, self->curPos + max_size, (const void**)& self->recordStart, & length);
+
+    if ( rc != 0 )
+    {
+        LogErr(klogErr, rc, "FASTQ_input failed");
+        return 0;
+    }
+    
+    length -= self->curPos;
+    if ( length == 0 ) /* nothing new read = end of file */
+    {   /* insert an additional \n before the end of file if missing */
+        if ( !self->lastEol )
+        {
+            buf[0] = '\n';
+            self->eolInserted = true;
+            self->lastEol = true;
+            return 1;
+        }
+        else
+        {   
+            return 0; /* signal EOF to flex */
+        }
+    }
+
+    memcpy(buf, self->recordStart + self->curPos, length);
+    self->lastEol = ( buf[length-1] == '\n' );
+    self->curPos += length;
+    return length;
+}
+
+rc_t CC FastqReaderFileMake( const ReaderFile **reader, const KDirectory* dir, const char* file, uint8_t phredOffset, uint8_t defaultReadNumber)
+{
+    rc_t rc;
+    FastqReaderFile* self = (FastqReaderFile*) malloc ( sizeof * self );
+    if ( self == NULL )
+    {
+         rc = RC ( RC_MODULE, rcFileFormat, rcAllocating, rcMemory, rcExhausted );
+    }
+    else
+    {
+        memset(self, 0, sizeof(*self));
+        rc = ReaderFileInit ( self );
+        self->dad.vt.v1 = & FastqReaderFile_vt;
+
+        self->dad.pathname = string_dup(file, strlen(file)+1);
+        if ( self->dad.pathname == NULL )
+        {
+            rc = RC ( RC_MODULE, rcFileFormat, rcAllocating, rcMemory, rcExhausted );
+        }
+        else
+        {
+            rc = KLoaderFile_Make( & self->reader, dir, file, 0, true );
+        }
+        if (rc == 0)
+        {
+            self->pb.self = self;
+            self->pb.input = FASTQ_input;    
+            self->pb.phredOffset = phredOffset;
+            /* TODO: 
+                if phredOffset is 0, 
+                    guess based on the raw values on the first quality line:
+                        if all values are above MAX_PHRED_33, phredOffset = 64
+                        if all values are in MIN_PHRED_33..MAX_PHRED_33, phredOffset = 33
+                        if any value is below MIN_PHRED_33, abort
+                    if the guess is 33 and proven wrong (a raw quality value >MAX_PHRED_33 is encountered and no values below MIN_PHRED_64 ever seen)
+                        reopen the file, 
+                        phredOffset = 64
+                        try to parse again
+                        if a value below MIN_PHRED_64 seen, abort 
+            */
+            self->pb.defaultReadNumber = defaultReadNumber;
+            
+            rc = FASTQScan_yylex_init(& self->pb, true); 
+            if (rc == 0)
+            {
+                *reader = (const ReaderFile *) self;
+            } 
+            else
+            {
+                KLoaderFile_Release( self->reader, true );
+                ReaderFileRelease( & self->dad );
+                *reader = 0;
+            }
+        }
+        else
+        {
+            ReaderFileRelease( & self->dad );
+            *reader = 0;
+        }
+    }
+ 
+    return rc;
+}
+
+float FastqReaderFileGetProportionalPosition ( const READERFILE_IMPL *self )
+{
+    return 0.0f;
+}
+
+rc_t FastqReaderFileGetReferenceInfo ( const READERFILE_IMPL *self, const ReferenceInfo** result )
+{
+    *result = NULL;
+    return 0;
+}
diff --git a/tools/fastq-loader/fastq-reader.h b/tools/fastq-loader/fastq-reader.h
new file mode 100644
index 0000000..bd92150
--- /dev/null
+++ b/tools/fastq-loader/fastq-reader.h
@@ -0,0 +1,50 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_fastq_reader_
+#define _h_fastq_reader_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KDirectory;
+struct ReaderFile;
+
+rc_t CC FastqReaderFileMake( const struct ReaderFile **self, const struct KDirectory* dir, const char* file, uint8_t phredOffset, uint8_t defaultReadNumber);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _h_fastq_reader_ */
diff --git a/tools/fastq-loader/fastq-tokens.h b/tools/fastq-loader/fastq-tokens.h
new file mode 100644
index 0000000..bcb059d
--- /dev/null
+++ b/tools/fastq-loader/fastq-tokens.h
@@ -0,0 +1,64 @@
+/* A Bison parser, made by GNU Bison 2.5.  */
+
+/* Bison interface for Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+   
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     fqENDOFTEXT = 0,
+     fqNUMBER = 258,
+     fqALPHANUM = 259,
+     fqWS = 260,
+     fqENDLINE = 261,
+     fqBASESEQ = 262,
+     fqCOLORSEQ = 263,
+     fqTOKEN = 264,
+     fqASCQUAL = 265,
+     fqUNRECOGNIZED = 266
+   };
+#endif
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef int YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+
+
diff --git a/tools/fastq-loader/latf-load.vers b/tools/fastq-loader/latf-load.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/fastq-loader/latf-load.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/fastq-loader/loader-imp.c b/tools/fastq-loader/loader-imp.c
new file mode 100644
index 0000000..e75f860
--- /dev/null
+++ b/tools/fastq-loader/loader-imp.c
@@ -0,0 +1,242 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <sysalloc.h>
+#include <stdlib.h>
+#include <string.h>
+ 
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <kdb/btree.h>
+#include <kdb/meta.h>
+#include <kdb/manager.h>
+#include <kdb/database.h>
+
+#include <kapp/loader-meta.h>
+#include <kapp/main.h>
+
+#include <kfs/directory.h>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/vdb-priv.h>
+
+#include <loader/common-reader.h>
+#include <loader/common-writer.h>
+#include <loader/sequence-writer.h>
+#include <loader/reference-writer.h>
+
+#include "fastq-reader.h"
+
+rc_t AcrhiveFASTQ(CommonWriterSettings* G, 
+                VDBManager *mgr, 
+                VDatabase *db,
+                unsigned seqFiles, 
+                char const *seqFile[], 
+                uint8_t qualityOffset, 
+                const uint8_t defaultReadNumbers[])
+{
+    rc_t rc = 0;
+    unsigned i;
+    CommonWriter cw;
+
+    KDirectory *dir;
+    rc = KDirectoryNativeDir(&dir);    
+    if (rc != 0)
+        return rc;
+
+    rc = CommonWriterInit( &cw, mgr, db, G);
+    if (rc != 0)
+    {
+        KDirectoryRelease(dir);
+        return rc;
+    }
+    
+    for (i = 0; i < seqFiles; ++i) {
+        const ReaderFile *reader;
+        rc = FastqReaderFileMake(&reader, dir, seqFile[i], qualityOffset, defaultReadNumbers[i]);
+        if (rc == 0) 
+        {
+            rc = CommonWriterArchive( &cw, reader );
+            if (rc != 0) 
+                ReaderFileRelease(reader);
+            else
+                rc = ReaderFileRelease(reader);
+        }
+        if (rc != 0)
+            break;
+    }
+    if (rc == 0)
+        rc = CommonWriterComplete( &cw, Quitting() != 0 );
+    else
+        CommonWriterComplete( &cw, true );
+        
+    G->errCount = cw.err_count;
+        
+    if (rc == 0)
+        rc = CommonWriterWhack( &cw );
+    else
+        CommonWriterWhack( &cw );
+    
+    if (rc == 0)
+        rc = KDirectoryRelease(dir);
+    else
+        KDirectoryRelease(dir);
+        
+    if (rc == 0) {
+        (void)LOGMSG(klogInfo, "Successfully loaded all files");
+    }
+    return rc;
+}
+ 
+rc_t WriteLoaderSignature(KMetadata *meta, char const progName[])
+{
+    KMDataNode *node;
+    rc_t rc = KMetadataOpenNodeUpdate(meta, &node, "/");
+    
+    if (rc == 0) {
+        rc = KLoaderMeta_Write(node, progName, __DATE__, "FASTQ", KAppVersion());
+        KMDataNodeRelease(node);
+    }
+    if (rc) {
+        (void)LOGERR(klogErr, rc, "Cannot update loader meta");
+    }
+    return rc;
+}
+
+rc_t OpenPath(char const path[], KDirectory **dir)
+{
+    KDirectory *p;
+    rc_t rc = KDirectoryNativeDir(&p);
+    
+    if (rc == 0) {
+        rc = KDirectoryOpenDirUpdate(p, dir, false, path);
+        KDirectoryRelease(p);
+    }
+    return rc;
+}
+
+rc_t ConvertDatabaseToUnmapped(VDatabase* db)
+{
+    VTable* tbl;
+    rc_t rc = VDatabaseOpenTableUpdate(db, &tbl, "SEQUENCE");
+    if (rc == 0) 
+    {
+        rc = VTableRenameColumn(tbl, false, "CMP_ALTREAD", "ALTREAD");
+        if (rc == 0 || GetRCState(rc) == rcNotFound)
+            rc = VTableRenameColumn(tbl, false, "CMP_READ", "READ");
+/*        if (rc == 0 || GetRCState(rc) == rcNotFound)
+            rc = VTableRenameColumn(tbl, false, "CMP_ALTCSREAD", "ALTCSREAD");
+        if (rc == 0 || GetRCState(rc) == rcNotFound)
+            rc = VTableRenameColumn(tbl, false, "CMP_CSREAD", "CSREAD");*/
+        if (GetRCState(rc) == rcNotFound)
+            rc = 0;
+        rc = VTableRelease(tbl);
+    }
+    return rc;
+}
+
+rc_t run(char const progName[], CommonWriterSettings* G, unsigned seqFiles, const char *seqFile[], uint8_t qualityOffset, const uint8_t defaultReadNumbers[])
+{
+    VDBManager *mgr;
+    rc_t rc;
+    rc_t rc2;
+    char const *db_type = "NCBI:align:db:alignment_sorted"; 
+    
+    rc = VDBManagerMakeUpdate(&mgr, NULL);
+    if (rc) {
+        (void)LOGERR (klogErr, rc, "failed to create VDB Manager!");
+    }
+    else {
+        VSchema *schema;
+
+        rc = VDBManagerMakeSchema(mgr, &schema);
+        if (rc) {
+            (void)LOGERR (klogErr, rc, "failed to create schema");
+        }
+        else {
+            (void)(rc = VSchemaAddIncludePath(schema, G->schemaIncludePath));
+            rc = VSchemaParseFile(schema, G->schemaPath);
+            if (rc) {
+                (void)PLOGERR(klogErr, (klogErr, rc, "failed to parse schema file $(file)", "file=%s", G->schemaPath));
+            }
+            else {
+                VDatabase *db;
+                
+                rc = VDBManagerCreateDB(mgr, &db, schema, db_type, kcmInit + kcmMD5, G->outpath);
+                rc2 = VSchemaRelease(schema);
+                if (rc2)
+                    (void)LOGERR(klogWarn, rc2, "Failed to release schema");
+                if (rc == 0)
+                    rc = rc2;
+                if (rc == 0) {
+                    rc = AcrhiveFASTQ(G, mgr, db, seqFiles, seqFile, qualityOffset, defaultReadNumbers);
+                }
+
+                if (rc == 0) {
+                    rc = ConvertDatabaseToUnmapped(db);
+                }
+
+                rc2 = VDatabaseRelease(db);
+                if (rc == 0)
+                {
+                    if (rc2)
+                        (void)LOGERR(klogWarn, rc2, "Failed to close database");
+                    rc = rc2;
+                }
+                
+                if (rc == 0) {
+                    KMetadata *meta;
+                    KDBManager *kmgr;
+                    
+                    rc = VDBManagerOpenKDBManagerUpdate(mgr, &kmgr);
+                    if (rc == 0) {
+                        KDatabase *kdb;
+                        
+                        rc = KDBManagerOpenDBUpdate(kmgr, &kdb, G->outpath);
+                        if (rc == 0) {
+                            rc = KDatabaseOpenMetadataUpdate(kdb, &meta);
+                            KDatabaseRelease(kdb);
+                        }
+                        KDBManagerRelease(kmgr);
+                    }
+                    if (rc == 0) {
+                        rc = WriteLoaderSignature(meta, progName);
+                        KMetadataRelease(meta);
+                    }
+                }
+            }
+            rc2 = VDBManagerRelease(mgr);
+            if (rc2)
+                (void)LOGERR(klogWarn, rc2, "Failed to release VDB Manager");
+            if (rc == 0)
+                rc = rc2;
+        }
+    }
+    return rc;
+}
diff --git a/tools/kar/Makefile b/tools/kar/Makefile
index 9b2ed86..99b0798 100644
--- a/tools/kar/Makefile
+++ b/tools/kar/Makefile
@@ -43,15 +43,13 @@ ALL_TOOLS = \
 #-------------------------------------------------------------------------------
 # outer targets
 #
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
-all std: makedirs vers-includes
+all std: vers-includes
 	@ $(MAKE_CMD) $(TARGDIR)/std
 
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
 	@ $(MAKE_CMD) $(BINDIR)/$@
 
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
 
 #-------------------------------------------------------------------------------
 # std
@@ -62,6 +60,13 @@ $(TARGDIR)/std: \
 .PHONY: $(TARGDIR)/std
 
 #-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
 # clean
 #
 clean: stdclean
@@ -89,11 +94,14 @@ KAR_OBJ = \
 
 KAR_LIB = \
 	-skapp \
+	-lvfs \
+	-lkurl \
+	-lkfg \
+	-lkrypto \
 	-lkfs \
+	-lkproc \
 	-lklib \
-	-ldl \
-	-lz \
-	-lbz2
+	-lm
 
 $(BINDIR)/kar: $(KAR_OBJ)
 	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(KAR_LIB)
@@ -113,17 +121,17 @@ SRA_KAR_OBJ = \
 
 SRA_KAR_LIB = \
 	-skapp \
-	-ssraschema \
-	-lsrapath \
 	-lsradb \
 	-lvdb \
 	-lkdb \
+	-lvfs \
+	-lkurl \
 	-lkfg \
+	-lkrypto \
 	-lkfs \
+	-lkproc \
 	-lklib \
-	-ldl \
-	-lz \
-	-lbz2
+	-lm
 
 $(BINDIR)/sra-kar: $(SRA_KAR_OBJ)
 	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(SRA_KAR_LIB)
diff --git a/tools/kar/kar.c b/tools/kar/kar.c
index 96a06d1..92c6f2d 100644
--- a/tools/kar/kar.c
+++ b/tools/kar/kar.c
@@ -46,7 +46,6 @@
 
 #include <kapp/main.h>
 #include <kapp/args.h>
-#include <fmtdef.h>
 
 
 #include <stdio.h>
@@ -93,7 +92,7 @@ static const char * directory_usage[] =
 static const char * force_usage[] =
 { "(no parameter) this will cause the extract or",
   "create to over-write existing files unless",
-  "they are write-protected.  without this",
+  "they are write-protected.  Without this",
   "option the program will fail if the archive",
   "already exists for a create or the target",
   "directory exists for an extract", NULL };
@@ -164,10 +163,12 @@ rc_t CC Usage (const Args * args)
     HelpOptionLine (ALIAS_TEST, OPTION_TEST, archive, test_usage);
     OUTMSG (("\n"
              "Archive:\n"
-             "  Path to a file that will/does hold the archive of other files\n"
+             "  Path to a file that will/does hold the archive of other files.\n"
+             "  This can be a full or relative path.\n"
              "\n"
              "Directory:\n"
-	     "    Required for create or extract command, ignored for test command\n"
+	     "  Required for create or extract command, ignored for test command.\n"
+             "  This can be a full or relative path.\n"
              "\n"
              "Filters:\n"
 	     "  When present these act as include filters.\n"
@@ -183,6 +184,37 @@ rc_t CC Usage (const Args * args)
 
     HelpOptionsStandard ();
 
+    OUTMSG (("\n"
+             "Use examples:"
+             "\n"
+             "  To create an archive named 'example.sra' that contains the same\n"
+             "  contents as a subdirectory 'example' of the current directory\n"
+             "\n"
+             "  $ %s --%s example.sra --%s example\n",
+             progname, OPTION_CREATE, OPTION_DIRECTORY));
+
+    OUTMSG (("\n"
+             "  To replace an existing archive named 'example.sra' with another that contains\n"
+             "  the same contents as a subdirectory 'example' of the current directory\n"
+             "\n"
+             "  $ %s -%s -%s example.sra -%s example\n",
+             progname, ALIAS_FORCE, ALIAS_CREATE, ALIAS_DIRECTORY));
+
+    OUTMSG (("\n"
+             "  To examine in detail the contents of an archive named 'example.sra'\n"
+             "\n"
+             "  $ %s --%s --%s example.sra\n",
+             progname, OPTION_LONGLIST, OPTION_TEST));
+
+    OUTMSG (("\n"
+             "  To extract the files from an archive named 'example.sra' into\n"
+             "  a subdirectory 'example' of the current directory.\n"
+             "  NOTE: all extracted files will be read only.\n"
+             "\n"
+             "  $ %s --%s example.sra --%s example\n",
+             progname, OPTION_EXTRACT, OPTION_DIRECTORY));
+
+
     HelpVersion (fullpath, KAppVersion());
 
     return rc;
@@ -327,6 +359,54 @@ static KSRAFileAlignment get_alignment (const char * str)
     }
     return sraAlignInvalid;
 }
+
+static
+int CC sort_cmp (const void ** l, const void ** r, void * data)
+{
+    KDirectory * d;
+    uint64_t lz, rz;
+    rc_t rc;
+
+    d = data;
+/*     lz = l; */
+/*     rz = r; */
+
+    rc = KDirectoryFileSize (data, &lz, *l);
+    if (rc == 0)
+    {
+        rc = KDirectoryFileSize (data, &rz, *r);
+        if (rc == 0)
+        {
+            int64_t zdiff;
+
+            zdiff = lz - rz;
+            if (zdiff != 0)
+                return (zdiff < 0) ? -1 : 1;
+            else
+            {
+                size_t lsz = string_size (*l);
+                size_t rsz = string_size (*r);
+
+                return string_cmp (*l, lsz, *r, rsz, lsz+1);
+            }
+        }
+    }
+    return 0; /* dunno just leave it... */
+}
+
+
+static
+rc_t CC sort_size_then_rel_path (const KDirectory * d, struct Vector * v)
+{
+    VectorReorder (v, sort_cmp, (void*)d);
+
+    return 0;
+}
+
+
+
+
+
 static
 rc_t open_dir_as_archive (const char * path, const KFile ** file)
 {
@@ -360,7 +440,7 @@ rc_t open_dir_as_archive (const char * path, const KFile ** file)
     }
     if (rc == 0)
     {
-        rc = KDirectoryOpenTocFileRead ( d, file, alignment, pnamesFilter, NULL, NULL );
+        rc = KDirectoryOpenTocFileRead (d, file, alignment, pnamesFilter, NULL, sort_size_then_rel_path );
         KDirectoryRelease (d);
     }
     return rc;
@@ -466,6 +546,14 @@ rc_t open_out_file (const char * path, KFile ** fout)
     }
     return rc;
 }
+
+
+static
+void remove_out_file (const char * path)
+{
+    KDirectoryRemove (kdir, true, path);
+}
+
 static
 rc_t copy_file (const KFile * fin, KFile *fout)
 {
@@ -761,6 +849,12 @@ rc_t	run_kar_create(const char * archive, const char * directory)
         }
         KFileRelease (fout);
         free (directorystr);
+
+        if (rc)
+        {
+            remove_out_file (archive);
+        }
+
     }
     return rc;
 }
diff --git a/tools/kar/kar.vers b/tools/kar/kar.vers
index 04b10b4..f90b1af 100644
--- a/tools/kar/kar.vers
+++ b/tools/kar/kar.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/kar/kar.vers.h b/tools/kar/kar.vers.h
deleted file mode 100644
index 4b110aa..0000000
--- a/tools/kar/kar.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define KAR_VERS 0x02010007
diff --git a/tools/kar/sra-kar.c b/tools/kar/sra-kar.c
index 2c771da..67d8745 100644
--- a/tools/kar/sra-kar.c
+++ b/tools/kar/sra-kar.c
@@ -119,6 +119,41 @@ rc_t run ( srakar_parms *pb )
     KFile * outfile;
     rc_t rc;
 
+    const SRAMgr *mgr;
+
+    rc = SRAMgrMakeRead ( & mgr );
+    if ( rc != 0 )
+        LOGERR ( klogInt, rc, "failed to open SRAMgr" );
+    else
+    {
+        const SRATable *tbl;
+        rc = SRAMgrOpenTableRead ( mgr, & tbl, pb -> src_path );
+        if ( rc != 0 )
+            PLOGERR ( klogInt, (klogInt, rc,
+                "failed to open SRATable '$(spec)'", "spec=%s",
+                pb -> src_path ));
+        else
+        {
+            rc = KDirectoryCreateFile (pb->dir, &outfile, false, 0446,
+                kcmParents | ( pb->force ? kcmInit : kcmCreate) , pb->dst_path);
+            if (rc == 0)
+            {
+                const KFile * archive;
+
+                rc = SRATableMakeSingleFileArchive (tbl, &archive, pb->lite,
+                    NULL);
+                if (rc == 0)
+                {
+                    rc = copy_file (archive, outfile);
+                    KFileRelease (archive);
+                }
+                KFileRelease (outfile);
+            }
+            SRATableRelease ( tbl );
+        }
+        SRAMgrRelease (mgr);
+    }
+/*
     rc = KDirectoryCreateFile (pb->dir, &outfile, false, 0446, kcmParents | ( pb->force ? kcmInit : kcmCreate) , pb->dst_path);
 
     if (rc == 0)
@@ -150,7 +185,7 @@ rc_t run ( srakar_parms *pb )
         }
         KFileRelease (outfile);
     }
-
+*/
     return rc;
 }
 
diff --git a/tools/kar/sra-kar.vers b/tools/kar/sra-kar.vers
index 04b10b4..f90b1af 100644
--- a/tools/kar/sra-kar.vers
+++ b/tools/kar/sra-kar.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/kar/sra-kar.vers.h b/tools/kar/sra-kar.vers.h
deleted file mode 100644
index 21cdd87..0000000
--- a/tools/kar/sra-kar.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define SRA_KAR_VERS 0x02010007
diff --git a/tools/nenctool/Makefile b/tools/nenctool/Makefile
new file mode 100644
index 0000000..f6a51c8
--- /dev/null
+++ b/tools/nenctool/Makefile
@@ -0,0 +1,123 @@
+# ==============================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+USE_GCC_IF_ICC = 1
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/nenctool
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+	nenctool
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+	@ $(MAKE_CMD) $(TARGDIR)/std
+
+$(ALL_TOOLS): vers-includes
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# nenctool
+#  Copy files from one directory to another while cataloging the contents.
+#  XML files can be redirected as well.
+#
+NENCTOOL_SRC = \
+	nenctool
+
+NENCTOOL_OBJ = \
+	$(addsuffix .$(OBJX),$(NENCTOOL_SRC))
+
+NENCTOOL_LIB = \
+	-lkapp \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
+	-lkfg \
+	-lkfs \
+	-lkproc \
+	-lklib
+
+$(BINDIR)/nenctool: $(NENCTOOL_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(NENCTOOL_LIB)
+
+#-------------------------------------------------------------------------------
+# nenctest
+#  Copy files from one directory to another while cataloging the contents.
+#  XML files can be redirected as well.
+#
+NENCTEST_SRC = \
+	nenctest
+
+NENCTEST_OBJ = \
+	$(addsuffix .$(OBJX),$(NENCTEST_SRC))
+
+NENCTEST_LIB = \
+	-lkapp \
+	-lvfs \
+	-lkurl \
+	-lkryptotest \
+	-lkfg \
+	-lkfs \
+	-lkproc \
+	-lklib
+
+$(BINDIR)/nenctest: $(NENCTEST_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(NENCTEST_LIB)
diff --git a/tools/nenctool/nenctest.c b/tools/nenctool/nenctest.c
new file mode 100644
index 0000000..fb9fe53
--- /dev/null
+++ b/tools/nenctool/nenctest.c
@@ -0,0 +1,502 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "nenctest.vers.h"
+
+#include <kapp/main.h>
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <krypto/testciphermgr.h>
+#include <krypto/encfile.h>
+#include <kfs/file.h>
+
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/debug.h> /* DBGMSG */
+#include <klib/rc.h>
+
+#include <assert.h>
+
+
+/* Version  EXTERN
+ *  return 4-part version code: 0xMMmmrrrr, where
+ *      MM = major release
+ *      mm = minor release
+ *    rrrr = bug-fix release
+ */
+ver_t CC KAppVersion ( void )
+{
+    return NENCTEST_VERS;
+}
+
+
+#define OPTION_FORCE   "force"
+#define ALIAS_FORCE   "f"
+static
+const char * force_usage[] = 
+{ "force overwrite of existing files", NULL };
+
+
+#define OPTION_CIPHER  "cipher"
+#define ALIAS_CIPHER   "c"
+static
+const char * cipher_usage[] = 
+{ "choose cipher version ",
+  "0-byte oritented vector", 
+  "1-vector",
+  "2-vector register",
+  "3-aes-ni",
+  "not all implementatons exist on all platforms",
+  NULL };
+static
+OptDef Options[] = 
+{
+    /* name            alias max times oparam required fmtfunc help text loc */
+    { OPTION_FORCE,  ALIAS_FORCE,  NULL, force_usage,  0, false, false },
+    { OPTION_CIPHER, ALIAS_CIPHER, NULL, cipher_usage, 1, true,  false }
+};
+
+
+
+/* Usage
+ */
+const char UsageDefaultName [] = "nencvalid";
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg (
+        "\n"
+        "Usage:\n"
+        "  %s [options] <source-file-path> <destination-file-path>\n"
+        "\n"
+        "Summary:\n"
+        "  Copy a file from the first parameter to the second parameter\n"
+        "  Encryption, decryption, or re-encryption are the expected purpose.\n"
+        "  This is a version of nenctool with some testing features added.\n"
+        "  The first added feature is some level of cipher implementation\n"
+        "  selection.\n"
+        "\n", progname);
+}
+
+static
+const char * first_usage[] = 
+{
+    "The path to a file either in native format",
+};
+
+static
+const char * second_usage[] = 
+{
+    "in 'file' URI scheme or in 'ncbi-file'",
+    "URI scheme.",
+    "\"ncbi-file\" scheme adds a query to the \"file\" scheme",
+    "where 'enc' or 'encrypt' means the file is encrypted",
+    "and 'pwfile=<path>' points to a file to get the password",
+    "or 'pwfd=<fd>' refers to a file descriptor from which to",
+    "read a password."
+};
+
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+
+    UsageSummary (progname);
+
+    KOutMsg ("Parameters:\n");
+
+    HelpParamLine ("source-file-path", first_usage);
+    HelpParamLine ("destination-file-path", second_usage);
+
+    KOutMsg ("\nOptions:\n");
+
+    HelpOptionLine (ALIAS_FORCE, OPTION_FORCE, NULL, force_usage);
+    HelpOptionLine (ALIAS_CIPHER, OPTION_CIPHER, "implementation", cipher_usage);
+
+    HelpOptionsStandard ();
+
+    OUTMSG (("\n"
+             "ncbi-file uri syntax:\n"
+             "  'ncbi-file' uris are based on a combination of the standard\n"
+             "  'file' and 'http' syntax familiar to browser users.\n"
+             "  Enclosing questions marks are probably necessary.\n"
+             "\n"
+             "  URI syntax is 'scheme:'hierarchical-part'?'query'#'fragment'\n"
+             "  scheme:\n"
+             "    ncbi-file\n"
+             "  hierarchical-part:\n"
+             "    this is the same as for scheme file and can be the native form or\n"));
+    OUTMSG (("    the ncbi 'posix' format that matches most flavors of Unix.\n"
+             "    Environment variables and short hands such as '~' are not interpreted.\n"
+             "  query:\n"
+             "    Zero or two symbols separated by the '&'.  The whole query can be omitted.\n"
+             "      enc or encrypt\n"
+             "      pwfile='path to a file containing a password'\n"
+             "      pwfd='file descriptor where the password can be read'\n"
+             "    If the encrypt is present exactly one of the other two must be present.\n"
+             "  fragment:\n"
+             "    No fragment is permitted.\n"));
+    OUTMSG (("\n"
+             "password contents:\n"
+             "  The file or file descriptor containing the password is read enough to satisfy\n"
+             "  the following restriction.  The password is terminated by the end of file,\n"
+             "  a carriage return or a line feed.  The length must be no more than 4096 bytes.\n"
+             "  The password file should have limited read access to protect it.\n"));
+
+
+    OUTMSG (("\n"
+             "Use examples:"
+             "\n"
+             "  To encrypt a create a file named 'example' with a password from a file\n"
+             "  named 'password-file' to a file named 'example.nenc' all in the current\n"
+             "  directory:\n"
+             "\n"
+             "  $ %s example \"ncbi-file:example.nenc?encrypt&pwfile=password-file\"\n",
+             progname));
+    OUTMSG (("\n"
+             "  To decrypt a file named 'example.nenc' with a password from a file\n"
+             "  named 'password-file' to a file named 'example' in directories implied\n"
+             "  in the command:\n"
+             "\n"
+             "  $ %s \"ncbi-file:/home/user/downloads/example.nenc?encrypt&pwfile=/home/user/password-file\" example\n",
+             progname));
+    OUTMSG (("\n"
+             "  To change the encryption of a file from one password to another:\n"
+             "\n"
+             "  $ %s \"ncbi-file:/home/user/downloads/example.nenc?encrypt&pwfile=old-password-file\" \\\n"
+             "         \"ncbi-file:example.nenc?encrypt&pwfile=/home/user/new-password-file\"\n",
+             progname));
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+
+static
+rc_t copy_file (const char * src, const char * dst, const KFile * fin, KFile *fout)
+{
+    rc_t rc;
+    uint8_t	buff	[64 * 1024];
+    size_t	num_read;
+    uint64_t	inpos;
+    uint64_t	outpos;
+
+    assert (src);
+    assert (dst);
+    assert (fin);
+    assert (fout);
+
+    inpos = 0;
+    outpos = 0;
+
+#if 1
+    for (inpos = 0; ; inpos += num_read)
+    {
+        rc = Quitting ();
+        if (rc)
+        {
+            LOGMSG (klogFatal, "Received quit");
+            break;
+        }
+        else
+        {
+            rc = KFileReadAll (fin, inpos, buff, sizeof (buff), &num_read);
+            if (rc)
+            {
+                PLOGERR (klogErr,
+                         (klogErr, rc,
+                          "Failed to read from file $(F) at $(P)",
+                          "F=%s,P=%lu", src, inpos));
+                break;
+            }
+            else if (num_read)
+            {
+                size_t num_writ;
+
+                rc = KFileWriteAll (fout, inpos, buff, num_read, &num_writ);
+                if (rc)
+                {
+                    PLOGERR (klogErr,
+                             (klogErr, rc,
+                              "Failed to write to file $(F) at $(P)",
+                              "F=%s,P=%lu", dst, outpos));
+                    break;
+                }
+                else if (num_writ != num_read)
+                {
+                    rc = RC (rcExe, rcFile, rcWriting, rcFile, rcInsufficient);
+                    PLOGERR (klogErr,
+                             (klogErr, rc,
+                              "Failed to write all to file $(F) at $(P)",
+                              "F=%s,P=%lu", dst, outpos));
+                    break;
+                }
+            }
+            else 
+                break;
+        }
+    }
+#else
+    do
+    {
+        rc = Quitting ();
+        if (rc)
+        {
+            LOGMSG (klogFatal, "Received quit");
+            break;
+        }
+        rc = KFileRead (fin, inpos, buff, sizeof (buff), &num_read);
+        if (rc)
+        {
+            PLOGERR (klogErr,
+                     (klogErr, rc,
+                      "Failed to read from file $(F) at $(P)",
+                      "F=%s,P=%lu", src, inpos));
+            break;
+        }
+        else if (num_read > 0)
+        {
+            size_t to_write;
+
+            inpos += (uint64_t)num_read;
+
+            STSMSG (2, ("Read %zu bytes to %lu", num_read, inpos));
+
+            to_write = num_read;
+            while (to_write > 0)
+            {
+                size_t num_writ;
+                rc = KFileWrite (fout, outpos, buff, num_read, &num_writ);
+                if (rc)
+                {
+                    PLOGERR (klogErr,
+                             (klogErr, rc,
+                              "Failed to write to file $(F) at $(P)",
+                              "F=%s,P=%lu", dst, outpos));
+                    break;
+                }
+                outpos += num_writ;
+                to_write -= num_writ;
+            }
+        }
+        if (rc)
+            break;
+    } while (num_read != 0);
+#endif
+    return rc;
+}
+
+
+static
+rc_t nenctest (const char * srcstr, const char * dststr, bool force)
+{
+    VFSManager * mgr;
+    rc_t rc;
+
+    rc = VFSManagerMake (&mgr);
+    if (rc)
+        LOGERR (klogInt, rc, "failed to create file system manager");
+    else
+    {
+        VPath * srcpath;
+
+        rc = VPathMake (&srcpath, srcstr);
+        if (rc)
+            PLOGERR (klogErr,
+                     (klogErr, rc, "Failed to parse source path '$(path)'",
+                      "path=%s", srcstr));
+        else
+        {
+            VPath * dstpath;
+
+            rc = VPathMake (&dstpath, dststr);
+            if (rc)
+                PLOGERR (klogErr,
+                         (klogErr, rc, "Failed to parse destination path '$(path)'",
+                          "path=%s", dststr));
+            else
+            {
+                const KFile * srcfile;
+
+                rc = VFSManagerOpenFileRead (mgr, &srcfile, srcpath);
+                if (rc)
+                    PLOGERR (klogErr,
+                             (klogErr, rc, "Failed to open source path '$(path)'",
+                              "path=%s", srcstr));
+                else
+                {
+                    KFile * dstfile;
+
+                    rc = VFSManagerCreateFile (mgr, &dstfile, false, 0666,
+                                               kcmParents | (force ? kcmInit : kcmCreate),
+                                               dstpath);
+                    if (rc)
+                        PLOGERR (klogErr,
+                                 (klogErr, rc, "failed to open destination path '$(path)'",
+                                  "path=%s", dststr));
+                    else
+                    {
+                        rc = copy_file (srcstr, dststr, srcfile, dstfile);
+                        if (rc)
+                        {
+                            PLOGERR (klogErr,
+                                     (klogErr, rc, "failed to copy '$(S)' to '$(D)'",
+                                      "S=%s,D=%s", srcstr, dststr));
+
+                            VFSManagerRemove (mgr, true, dstpath);
+                        }
+
+                        KFileRelease (dstfile);
+                    }
+                    KFileRelease (srcfile);
+                }
+                VPathRelease (dstpath);
+            }
+            VPathRelease (srcpath);
+        }
+        VFSManagerRelease (mgr);
+    }
+    return rc;
+}
+
+
+/* KMain - EXTERN
+ *  executable entrypoint "main" is implemented by
+ *  an OS-specific wrapper that takes care of establishing
+ *  signal handlers, logging, etc.
+ *
+ *  in turn, OS-specific "main" will invoke "KMain" as
+ *  platform independent main entrypoint.
+ *
+ *  "argc" [ IN ] - the number of textual parameters in "argv"
+ *  should never be < 0, but has been left as a signed int
+ *  for reasons of tradition.
+ *
+ *  "argv" [ IN ] - array of NUL terminated strings expected
+ *  to be in the shell-native character set: ASCII or UTF-8
+ *  element 0 is expected to be executable identity or path.
+ */
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args* args = NULL;
+    rc_t rc;
+
+    rc = ArgsMakeAndHandle(&args, argc, argv, 1, Options, sizeof Options / sizeof (OptDef));
+    if (rc)
+        LOGERR (klogInt, rc, "failed to parse command line parameters");
+    if (rc == 0)
+    {
+        uint32_t pcount;
+        bool force;
+
+        rc = ArgsOptionCount (args, OPTION_FORCE, &pcount);
+        if (rc)
+            LOGERR (klogInt, rc, "failed to examine force option");
+        else
+        {
+            force = (pcount > 0);
+ 
+            rc = ArgsOptionCount (args, OPTION_CIPHER, &pcount);
+            if (rc)
+                LOGERR (klogInt, rc, "failed to examine cipher option");
+            else
+            {
+                if (pcount)
+                {
+                    const char * value;
+
+                    rc = ArgsOptionValue (args, OPTION_CIPHER, 0, &value);
+                    if (rc)
+                        LOGERR (klogInt, rc, "failed to examine cipher value");
+                    else
+                    {
+                        if (value[1])
+                            rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+                        else
+                            switch (value[0])
+                            {
+                            case '0':
+                            case '1':
+                            case '2':
+                            case '3':
+                                KCipherSubType = value[0] - '0';
+                                break;
+                            default:
+                                rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+                                break;
+                            }
+                        if (rc)
+                            LOGERR (klogErr, rc, "bad value for cipher implmentation");
+                    }
+                }
+                if (rc == 0)
+                {
+                    rc = ArgsParamCount (args, &pcount);
+                    if (rc)
+                        LOGERR (klogInt, rc, "failed to count parameters");
+                    else
+                    {
+                        if (pcount != 2)
+                            MiniUsage (args);
+                        else
+                        {
+                            const char * src;
+
+                            rc = ArgsParamValue (args, 0, &src);
+                            if (rc)
+                                LOGERR (klogInt, rc, "failed to get source parameter");
+                            else
+                            {
+                                const char * dst;
+                                rc = ArgsParamValue (args, 1, &dst);
+                                if (rc)
+                                    LOGERR (klogInt, rc, "failed to get destination parameter");
+                                else
+                                {
+                                    rc = nenctest (src, dst, force);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        ArgsWhack (args);
+    }
+    STSMSG (1, ("exiting: %R (%u)", rc, rc));
+    return rc;
+}
+
+/* EOF */
diff --git a/tools/nenctool/nenctest.vers b/tools/nenctool/nenctest.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/nenctool/nenctest.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/nenctool/nenctool.c b/tools/nenctool/nenctool.c
new file mode 100644
index 0000000..3cf5f5f
--- /dev/null
+++ b/tools/nenctool/nenctool.c
@@ -0,0 +1,446 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "nenctool.vers.h"
+
+#include <kapp/main.h>
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <krypto/encfile.h>
+#include <kfs/file.h>
+
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/debug.h> /* DBGMSG */
+#include <klib/rc.h>
+
+#include <assert.h>
+
+
+/* Version  EXTERN
+ *  return 4-part version code: 0xMMmmrrrr, where
+ *      MM = major release
+ *      mm = minor release
+ *    rrrr = bug-fix release
+ */
+ver_t CC KAppVersion ( void )
+{
+    return NENCTOOL_VERS;
+}
+
+
+#define OPTION_FORCE   "force"
+#define ALIAS_FORCE   "f"
+static
+const char * force_usage[] = 
+{ "force overwrite of existing files", NULL };
+static
+OptDef Options[] = 
+{
+    /* name            alias max times oparam required fmtfunc help text loc */
+    { OPTION_FORCE,   ALIAS_FORCE,   NULL, force_usage,   0, false, false }
+};
+
+
+
+/* Usage
+ */
+const char UsageDefaultName [] = "nencvalid";
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg (
+        "\n"
+        "Usage:\n"
+        "  %s [options] <source-file-path> <destination-file-path>\n"
+        "\n"
+        "Summary:\n"
+        "  Copy a file from the first parameter to the second parameter\n"
+        "  Encryption, decryption, or re-encryption are the expected purpose.\n"
+        "\n", progname);
+}
+
+static
+const char * first_usage[] = 
+{
+    "The path to a file either in native format",
+};
+
+static
+const char * second_usage[] = 
+{
+    "in 'file' URI scheme or in 'ncbi-file'",
+    "URI scheme.",
+    "\"ncbi-file\" scheme adds a query to the \"file\" scheme",
+    "where 'enc' or 'encrypt' means the file is encrypted",
+    "and 'pwfile=<path>' points to a file to get the password",
+    "or 'pwfd=<fd>' refers to a file descriptor from which to",
+    "read a password."
+};
+
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+
+    UsageSummary (progname);
+
+    KOutMsg ("Parameters:\n");
+
+    HelpParamLine ("source-file-path", first_usage);
+    HelpParamLine ("destination-file-path", second_usage);
+
+    KOutMsg ("\nOptions:\n");
+
+    HelpOptionLine (ALIAS_FORCE, OPTION_FORCE, NULL, force_usage);
+
+    HelpOptionsStandard ();
+
+    OUTMSG (("\n"
+             "ncbi-file uri syntax:\n"
+             "  'ncbi-file' uris are based on a combination of the standard\n"
+             "  'file' and 'http' syntax familiar to browser users.\n"
+             "  Enclosing questions marks are probably necessary.\n"
+             "\n"
+             "  URI syntax is 'scheme:'hierarchical-part'?'query'#'fragment'\n"
+             "  scheme:\n"
+             "    ncbi-file\n"
+             "  hierarchical-part:\n"
+             "    this is the same as for scheme file and can be the native form or\n"));
+    OUTMSG (("    the ncbi 'posix' format that matches most flavors of Unix.\n"
+             "    Environment variables and short hands such as '~' are not interpreted.\n"
+             "  query:\n"
+             "    Zero or two symbols separated by the '&'.  The whole query can be omitted.\n"
+             "      enc or encrypt\n"
+             "      pwfile='path to a file containing a password'\n"
+             "      pwfd='file descriptor where the password can be read'\n"
+             "    If the encrypt is present exactly one of the other two must be present.\n"
+             "  fragment:\n"
+             "    No fragment is permitted.\n"));
+    OUTMSG (("\n"
+             "password contents:\n"
+             "  The file or file descriptor containing the password is read enough to satisfy\n"
+             "  the following restriction.  The password is terminated by the end of file,\n"
+             "  a carriage return or a line feed.  The length must be no more than 4096 bytes.\n"
+             "  The password file should have limited read access to protect it.\n"));
+
+
+    OUTMSG (("\n"
+             "Use examples:"
+             "\n"
+             "  To encrypt a create a file named 'example' with a password from a file\n"
+             "  named 'password-file' to a file named 'example.nenc' all in the current\n"
+             "  directory:\n"
+             "\n"
+             "  $ %s example \"ncbi-file:example.nenc?encrypt&pwfile=password-file\"\n",
+             progname));
+    OUTMSG (("\n"
+             "  To decrypt a file named 'example.nenc' with a password from a file\n"
+             "  named 'password-file' to a file named 'example' in directories implied\n"
+             "  in the command:\n"
+             "\n"
+             "  $ %s \"ncbi-file:/home/user/downloads/example.nenc?encrypt&pwfile=/home/user/password-file\" example\n",
+             progname));
+    OUTMSG (("\n"
+             "  To change the encryption of a file from one password to another:\n"
+             "\n"
+             "  $ %s \"ncbi-file:/home/user/downloads/example.nenc?encrypt&pwfile=old-password-file\" \\\n"
+             "         \"ncbi-file:example.nenc?encrypt&pwfile=/home/user/new-password-file\"\n",
+             progname));
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+
+static
+rc_t copy_file (const char * src, const char * dst, const KFile * fin, KFile *fout)
+{
+    rc_t rc;
+    uint8_t	buff	[64 * 1024];
+    size_t	num_read;
+    uint64_t	inpos;
+    uint64_t	outpos;
+
+    assert (src);
+    assert (dst);
+    assert (fin);
+    assert (fout);
+
+    inpos = 0;
+    outpos = 0;
+
+#if 1
+    for (inpos = 0; ; inpos += num_read)
+    {
+        rc = Quitting ();
+        if (rc)
+        {
+            LOGMSG (klogFatal, "Received quit");
+            break;
+        }
+        else
+        {
+            rc = KFileReadAll (fin, inpos, buff, sizeof (buff), &num_read);
+            if (rc)
+            {
+                PLOGERR (klogErr,
+                         (klogErr, rc,
+                          "Failed to read from file $(F) at $(P)",
+                          "F=%s,P=%lu", src, inpos));
+                break;
+            }
+            else if (num_read)
+            {
+                size_t num_writ;
+
+                rc = KFileWriteAll (fout, inpos, buff, num_read, &num_writ);
+                if (rc)
+                {
+                    PLOGERR (klogErr,
+                             (klogErr, rc,
+                              "Failed to write to file $(F) at $(P)",
+                              "F=%s,P=%lu", dst, outpos));
+                    break;
+                }
+                else if (num_writ != num_read)
+                {
+                    rc = RC (rcExe, rcFile, rcWriting, rcFile, rcInsufficient);
+                    PLOGERR (klogErr,
+                             (klogErr, rc,
+                              "Failed to write all to file $(F) at $(P)",
+                              "F=%s,P=%lu", dst, outpos));
+                    break;
+                }
+            }
+            else 
+                break;
+        }
+    }
+#else
+    do
+    {
+        rc = Quitting ();
+        if (rc)
+        {
+            LOGMSG (klogFatal, "Received quit");
+            break;
+        }
+        rc = KFileRead (fin, inpos, buff, sizeof (buff), &num_read);
+        if (rc)
+        {
+            PLOGERR (klogErr,
+                     (klogErr, rc,
+                      "Failed to read from file $(F) at $(P)",
+                      "F=%s,P=%lu", src, inpos));
+            break;
+        }
+        else if (num_read > 0)
+        {
+            size_t to_write;
+
+            inpos += (uint64_t)num_read;
+
+            STSMSG (2, ("Read %zu bytes to %lu", num_read, inpos));
+
+            to_write = num_read;
+            while (to_write > 0)
+            {
+                size_t num_writ;
+                rc = KFileWrite (fout, outpos, buff, num_read, &num_writ);
+                if (rc)
+                {
+                    PLOGERR (klogErr,
+                             (klogErr, rc,
+                              "Failed to write to file $(F) at $(P)",
+                              "F=%s,P=%lu", dst, outpos));
+                    break;
+                }
+                outpos += num_writ;
+                to_write -= num_writ;
+            }
+        }
+        if (rc)
+            break;
+    } while (num_read != 0);
+#endif
+    return rc;
+}
+
+
+static
+rc_t nenctool (const char * srcstr, const char * dststr, bool force)
+{
+    VFSManager * mgr;
+    rc_t rc;
+
+    rc = VFSManagerMake (&mgr);
+    if (rc)
+        LOGERR (klogInt, rc, "failed to create file system manager");
+    else
+    {
+        VPath * srcpath;
+
+        rc = VPathMake (&srcpath, srcstr);
+        if (rc)
+            PLOGERR (klogErr,
+                     (klogErr, rc, "Failed to parse source path '$(path)'",
+                      "path=%s", srcstr));
+        else
+        {
+            VPath * dstpath;
+
+            rc = VPathMake (&dstpath, dststr);
+            if (rc)
+                PLOGERR (klogErr,
+                         (klogErr, rc, "Failed to parse destination path '$(path)'",
+                          "path=%s", dststr));
+            else
+            {
+                const KFile * srcfile;
+
+                rc = VFSManagerOpenFileRead (mgr, &srcfile, srcpath);
+                if (rc)
+                    PLOGERR (klogErr,
+                             (klogErr, rc, "Failed to open source path '$(path)'",
+                              "path=%s", srcstr));
+                else
+                {
+                    KFile * dstfile;
+
+                    rc = VFSManagerCreateFile (mgr, &dstfile, false, 0666,
+                                               kcmParents | (force ? kcmInit : kcmCreate),
+                                               dstpath);
+                    if (rc)
+                        PLOGERR (klogErr,
+                                 (klogErr, rc, "failed to open destination path '$(path)'",
+                                  "path=%s", dststr));
+                    else
+                    {
+                        rc = copy_file (srcstr, dststr, srcfile, dstfile);
+                        if (rc)
+                        {
+                            PLOGERR (klogErr,
+                                     (klogErr, rc, "failed to copy '$(S)' to '$(D)'",
+                                      "S=%s,D=%s", srcstr, dststr));
+
+                            VFSManagerRemove (mgr, true, dstpath);
+                        }
+
+                        KFileRelease (dstfile);
+                    }
+                    KFileRelease (srcfile);
+                }
+                VPathRelease (dstpath);
+            }
+            VPathRelease (srcpath);
+        }
+        VFSManagerRelease (mgr);
+    }
+    return rc;
+}
+
+
+/* KMain - EXTERN
+ *  executable entrypoint "main" is implemented by
+ *  an OS-specific wrapper that takes care of establishing
+ *  signal handlers, logging, etc.
+ *
+ *  in turn, OS-specific "main" will invoke "KMain" as
+ *  platform independent main entrypoint.
+ *
+ *  "argc" [ IN ] - the number of textual parameters in "argv"
+ *  should never be < 0, but has been left as a signed int
+ *  for reasons of tradition.
+ *
+ *  "argv" [ IN ] - array of NUL terminated strings expected
+ *  to be in the shell-native character set: ASCII or UTF-8
+ *  element 0 is expected to be executable identity or path.
+ */
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args* args = NULL;
+    rc_t rc;
+
+    rc = ArgsMakeAndHandle(&args, argc, argv, 1, Options, sizeof Options / sizeof (OptDef));
+    if (rc)
+        LOGERR (klogInt, rc, "failed to parse command line parameters");
+    if (rc == 0)
+    {
+        uint32_t pcount;
+        bool force;
+
+        rc = ArgsOptionCount (args, OPTION_FORCE, &pcount);
+        if (rc)
+            LOGERR (klogInt, rc, "failed to examine force option");
+        else
+        {
+            force = (pcount > 0);
+
+            rc = ArgsParamCount (args, &pcount);
+            if (rc)
+                LOGERR (klogInt, rc, "failed to count parameters");
+            else
+            {
+                if (pcount != 2)
+                    MiniUsage (args);
+                else
+                {
+                    const char * src;
+
+                    rc = ArgsParamValue (args, 0, &src);
+                    if (rc)
+                        LOGERR (klogInt, rc, "failed to get source parameter");
+                    else
+                    {
+                        const char * dst;
+                        rc = ArgsParamValue (args, 1, &dst);
+                        if (rc)
+                            LOGERR (klogInt, rc, "failed to get destination parameter");
+                        else
+                        {
+                            rc = nenctool (src, dst, force);
+                        }
+                    }
+                }
+            }
+        }
+        ArgsWhack (args);
+    }
+    STSMSG (1, ("exiting: %R (%u)", rc, rc));
+    return rc;
+}
+
+/* EOF */
diff --git a/tools/nenctool/nenctool.vers b/tools/nenctool/nenctool.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/nenctool/nenctool.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/nencvalid/Makefile b/tools/nencvalid/Makefile
new file mode 100644
index 0000000..2628e5e
--- /dev/null
+++ b/tools/nencvalid/Makefile
@@ -0,0 +1,111 @@
+# ==============================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/nencvalid
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+	nencvalid
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+	@ $(MAKE_CMD) $(TARGDIR)/std
+
+$(ALL_TOOLS): vers-includes
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: \
+	$(addsuffix _tag,$(ALL_TOOLS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_LIBS)) $(addsuffix _tag,$(ALL_TOOLS))
+
+#-------------------------------------------------------------------------------
+# nencvalid
+#  Copy files from one directory to another while cataloging the contents.
+#  XML files can be redirected as well.
+#
+NENCVALID_SRC = \
+	nencvalid
+
+NENCVALID_OBJ = \
+	$(addsuffix .$(OBJX),$(NENCVALID_SRC))
+
+NENCVALID_LIB = \
+	-lkapp \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
+	-lkfg \
+	-lkfs \
+	-lkproc \
+	-lklib
+
+$(BINDIR)/nencvalid: $(NENCVALID_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(NENCVALID_LIB)
+
+nencvalid_tag:
+	@ $(TOP)/build/tag-module.sh $(MODULE) nencvalid $(NENCVALID_OBJ)
+
+
+
diff --git a/tools/nencvalid/nencvalid.c b/tools/nencvalid/nencvalid.c
new file mode 100644
index 0000000..f3833fc
--- /dev/null
+++ b/tools/nencvalid/nencvalid.c
@@ -0,0 +1,683 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "nencvalid.vers.h"
+
+#include <kapp/main.h>
+
+#include <vfs/manager.h>
+#include <vfs/path.h>
+
+#include <krypto/encfile.h>
+#include <krypto/wgaencrypt.h>
+
+#include <kfs/file.h>
+#include <kfs/buffile.h>
+
+#include <klib/log.h>
+#include <klib/status.h>
+#include <klib/out.h>
+#include <klib/debug.h> /* DBGMSG */
+#include <klib/rc.h>
+#include <klib/text.h>
+
+#include <assert.h>
+#include <stdlib.h>
+
+/* Version  EXTERN
+ *  return 4-part version code: 0xMMmmrrrr, where
+ *      MM = major release
+ *      mm = minor release
+ *    rrrr = bug-fix release
+ */
+ver_t CC KAppVersion ( void )
+{
+    return NENCVALID_VERS;
+}
+
+#define OPTION_DECRYPT_BIN_COMPATIBILITY "compatibility-mode"
+/* "decrypt.bin" */
+
+static
+OptDef Options[] = 
+{
+    /* private option for decrypt.bin script */
+    { OPTION_DECRYPT_BIN_COMPATIBILITY, NULL,        NULL, NULL,        0, false, false }
+};
+
+enum CompatibilityModeExitCode
+{
+    CMEC_NO_ERROR = 0,
+    CMEC_BAD_TYPE = 100,
+    CMEC_BAD_HEADER = 101,
+    CMEC_TRUNCATED = 102,
+    CMEC_EXCESS = 103,
+    CMEC_NO_CHECKSUM = 104,
+    CMEC_NO_PASSWORD = 105,
+    CMEC_BAD_CHECKSUM = 106
+};
+
+/* Usage
+ */
+const char UsageDefaultName [] = "nencvalid";
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return KOutMsg (
+        "\n"
+        "Usage:\n"
+        "  %s [options] <file-path> [ <file-path> ...]\n"
+        "\n"
+        "Summary:\n"
+        "  Validate the consistency of NCBI format encrypted files\n"
+        "\n", progname);
+}
+
+static
+const char * param_usage[] = 
+{
+    "A file in an NCBI encrypted file format.", 
+    "The first version encrypted file format",
+    "needs a password to validate the content",
+    "while the second version does not.  If the",
+    "ncbi-file uri format is used if you ask",
+    "file decryption (encrypt in the query)",
+    "the validation will be on the decrypted",
+    "file which might not be the intention.",
+    "The password if needed for validation will",
+    "have to be in the standard NCBI VDB",
+    "configuration as 'krypto/pwfile' or ",
+    "referenced by the environment variable",
+    "VDB_PWFILE or Config parameter", NULL
+};
+
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+
+    UsageSummary (progname);
+
+    KOutMsg ("Parameters:\n");
+
+    HelpParamLine ("file-path", param_usage);
+
+    KOutMsg ("\nOptions:\n");
+
+    HelpOptionsStandard ();
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+static rc_t wga_log_error (const char * path, rc_t rc, bool decrypt_bin_compatible)
+{
+    switch (GetRCObject(rc))
+    {
+    case rcSize:
+        switch (GetRCState(rc))
+        {
+        case rcExcessive:
+            if (decrypt_bin_compatible)
+                exit (CMEC_EXCESS);
+            PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                              "probably mis-concatenated file '$(P)'",
+                              "P=%s", path));
+            return rc;
+
+        case rcInsufficient:
+            if (decrypt_bin_compatible)
+                exit (CMEC_TRUNCATED);
+            PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                              "probably truncated file '$(P)'",
+                              "P=%s", path));
+            return rc;
+
+        default:
+            break;
+        }
+        break;
+
+    case rcChecksum:
+        switch (GetRCState(rc))
+        {
+        case rcInvalid:
+            if (decrypt_bin_compatible)
+                exit (CMEC_BAD_CHECKSUM);
+            PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                              "checksum of contents '$(P)'",
+                              "P=%s", path));
+            return rc;
+
+        case rcNull:
+            if (decrypt_bin_compatible)
+                exit (CMEC_NO_CHECKSUM);
+            PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                              "checksum of contents without password '$(P)'",
+                              "P=%s", path));
+            return 0;
+
+        default:
+            break;
+        }
+        break;
+
+    case rcConstraint:
+        switch (GetRCState(rc))
+        {
+        case rcCorrupt:
+            if (decrypt_bin_compatible)
+                exit (CMEC_BAD_CHECKSUM);
+            PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                              "checksum of contents '$(P)'",
+                              "P=%s", path));
+            return rc;
+
+        default:
+            break;
+        }
+        break;
+
+    case rcEncryption:
+        switch (GetRCState(rc))
+        {
+        case rcNull:
+            if (decrypt_bin_compatible)
+                exit (CMEC_NO_PASSWORD);
+            LOGERR (klogWarn, rc, "length validated but content not checked without a password");
+            return 0;
+
+        case rcNotFound:
+            if (decrypt_bin_compatible)
+                exit (CMEC_NO_CHECKSUM);
+            LOGERR (klogWarn, rc, "length validated but content not has no checksum");
+            return 0;
+
+        default:
+            break;
+        }
+        break;
+
+    default:
+        break;
+    }
+    PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                      "with non-specified error file "
+                      "'$(P)'", "P=%s", path));
+    return rc;
+}
+
+static rc_t nencvalidWGAEncValidate (const char * path, const KFile * file, VFSManager * mgr, bool decrypt_bin_compatible)
+{
+    rc_t rc;
+    size_t ppathz;
+    char ppath [4097];
+    size_t pwz;
+    char   pw [8192];
+    bool error_logged = false;
+
+    rc = VFSManagerGetConfigPWFile (mgr, ppath, sizeof (ppath) - 1, &ppathz);
+
+    /* failure to read configuration */
+    if (rc)
+    {
+        if (GetRCState(rc) != rcNotFound)
+        {
+            LOGERR (klogInt, rc, "unable to read configuration to get password file");
+            error_logged = true;
+        }
+        else
+        {
+            LOGERR (klogWarn, rc, "no password file configured file content will not be validated");
+
+            /* configuration did not contain a password file so set it to nul */
+            pw[0] = '\0';
+            pwz = 0;
+            rc = 0;
+        }
+    }
+    /* we got a password file from configuration */
+    else
+    {
+        VPath * vpath;
+
+        pwz = 0;
+
+        /* force to ASCIZ which is probably redundant */
+        ppath[ppathz] = '\0';
+
+        rc = VPathMake (&vpath, ppath);
+        if (rc)
+        {
+            PLOGERR (klogInt, (klogInt, rc, "unable to create vpath for "
+                               "password file '$(P)'", "P=%s", ppath));
+            error_logged = true;
+        }
+        else
+        {
+            const KFile * pwfile;
+
+            rc = VFSManagerOpenFileRead (mgr, &pwfile, vpath);
+            if (rc)
+            {
+                PLOGERR (klogInt, (klogInt, rc, "unable to open "
+                                   "password file '$(P)'", "P=%s", ppath));
+                error_logged = true;
+            }
+            else
+            {
+                rc = KFileReadAll (pwfile, 0, pw, sizeof pw - 1, &pwz);
+                if (rc)
+                {
+                    PLOGERR (klogInt, (klogInt, rc, "unable to read "
+                                       "password file '$(P)'", "P=%s", ppath));
+                    error_logged = true;
+                }
+
+                else
+                {
+                    char * pc;
+
+                    pc = string_chr (pw, pwz, '\n');
+                    if (pc)
+                    {
+                        *pc = '\0';
+                        pwz = pc - pw;
+                    }
+
+                    pc = string_chr (pw, pwz, '\r');
+                    if (pc)
+                    {
+                        *pc = '\0';
+                        pwz = pc - pw;
+                    }
+
+                    if (pwz == sizeof pw-1)
+                    {
+                        rc = RC (rcExe, rcFile, rcAccessing, rcBuffer, rcInsufficient);
+                        PLOGERR (klogInt, (klogInt, rc, "password too long in "
+                                           "password file '$(P)' ignoring", "P=%s", ppath));
+                        pwz = 0;
+                    }
+                }
+                KFileRelease (pwfile);
+            }
+            VPathRelease (vpath);
+        }
+    }
+
+    if (rc == 0)
+    {
+        rc = WGAEncValidate (file, pw, pwz);
+        if (rc)
+            rc =  wga_log_error (path, rc, decrypt_bin_compatible);
+    }
+    return rc;
+}
+
+
+/*
+ * do out thing on a single file name
+ */
+static
+rc_t HandleOneFile (VFSManager * mgr, const char * path, bool decrypt_bin_compatible)
+{
+    rc_t rc;
+    VPath * vpath;
+
+    rc = VPathMake (&vpath, path);
+    if (rc)
+        PLOGERR (klogErr,
+                 (klogErr, rc, "failed to parse path "
+                  "parameter '$(P)'", "P=%s", path));
+
+    else
+    {
+        const KFile * file;
+
+        rc = VFSManagerOpenFileRead (mgr, &file, vpath);
+        if (rc)
+            PLOGERR (klogErr,
+                     (klogErr, rc, "failed to parse path "
+                      "parameter '$(P)'", "P=%s", path));
+
+        else
+        {
+            size_t  buffread;
+            const KFile * buffile;
+
+            rc = KBufFileMakeRead (&buffile, file, 64*1024);
+            if (rc)
+                LOGERR (klogInt, rc, "unable to buffer file");
+            else
+            {
+                /* the two current encrypted file types have an 8 byte signature (magic(
+                 * at the beginning of the file.  If these 8 don't match we don't even call it
+                 * an encrypted file at all */
+                char buffer [8];
+
+                rc = KFileRead (buffile, 0, buffer, sizeof buffer, &buffread);
+                if (rc)
+                    LOGERR (klogInt, rc, "Unable to read file signature");
+                else
+                {
+                    if (buffread < sizeof buffer)
+                    {
+                        if (decrypt_bin_compatible)
+                            exit (CMEC_BAD_TYPE);
+                        else
+                        {
+                            rc = RC (rcExe, rcFile, rcValidating, rcHeader, rcWrongType);
+                            LOGERR (klogErr, rc, "File too short to be encrypted file");
+                        }
+                    }
+                    else
+                    {
+                        rc = KFileIsEnc (buffer, sizeof buffer);
+
+                        switch (GetRCState(rc))
+                        {
+                        case 0:
+                        case rcInsufficient:
+                            rc = KEncFileValidate (buffile);
+                            if (rc)
+                            {
+                                switch (GetRCObject(rc))
+                                {
+                                    /* unsuable header */
+                                case rcHeader:
+                                case rcByteOrder:
+                                    if (decrypt_bin_compatible)
+                                        exit (CMEC_BAD_HEADER);
+                                    PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                                                      "with a bad header file '$(P)'",
+                                                      "P=%s", path));
+                                    break;
+
+                                case rcFile:
+                                    switch (GetRCState(rc))
+                                    {
+                                        /* bad block count in the footer: guess it was a truncataiont
+                                         * an inconvienent point */
+                                    case rcCorrupt:
+                                        /* block read was neither a block nor a footer */
+                                    case rcInsufficient:
+                                        if (decrypt_bin_compatible)
+                                            exit (CMEC_TRUNCATED);
+                                        PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                                                          "probably truncated file '$(P)'",
+                                                          "P=%s", path));
+
+                                        break;
+                                    default:
+                                        PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                                                          "with non-specified error file "
+                                                          "'$(P)'", "P=%s", path));
+
+                                        break;
+                                    }
+                                    break;
+
+                                case rcCrc:
+                                    if (decrypt_bin_compatible)
+                                        exit (CMEC_BAD_CHECKSUM);
+                                    PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                                                      "with good length but bad checksum file "
+                                                      "'$(P)'", "P=%s", path));
+                                    break;
+
+                                default:
+                                    PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                                                      "with non-specified error file "
+                                                      "'$(P)'", "P=%s", path));
+                                    break;
+                                }
+                            }
+                            else
+                                STSMSG (1, ("validated file content and size for '%s'\n", path));
+                            break;
+
+                        case rcWrongType:
+                            rc = KFileIsWGAEnc (buffer, buffread);
+                            switch (GetRCState(rc))
+                            {
+                            case 0:
+                                rc = nencvalidWGAEncValidate (path, buffile, mgr, decrypt_bin_compatible);
+                                break;
+
+                            case rcWrongType:
+                                if (decrypt_bin_compatible)
+                                    exit (CMEC_BAD_TYPE);
+                                STSMSG (1, ("'%s' is not an encrypted file", path));
+                                break;
+
+                            default:
+                                break;
+                            }
+
+                        default:
+                            if (rc)
+                                PLOGERR (klogErr,(klogErr, rc, "failed to validate "
+                                                  "with non-specified error file "
+                                                  "'$(P)'", "P=%s", path));
+                            break;
+                        }
+                    }
+                }
+                KFileRelease (buffile);
+            }
+            KFileRelease (file);
+        }
+        VPathRelease (vpath);
+    }
+    if (rc)
+        STSMSG (1, ("failed validation '%s'", path));
+    else
+        STSMSG (1, ("passed validation '%s'", path));
+
+    return rc;
+}
+
+
+/*
+ * params are file names so retrienve them one by one and process them
+ */
+static __inline__
+rc_t HandleParams (VFSManager * mgr, Args * args, uint32_t pcount)
+{
+    rc_t rc;
+    rc_t orc;
+    uint32_t ix;
+
+    rc = orc = 0;
+    for (ix = 0; (ix < pcount); ++ix)
+    {
+        const char * pc;
+
+        rc = ArgsParamValue (args, ix, &pc);
+        if (rc)
+            PLOGERR (klogErr, 
+                     (klogErr, rc, "failed to retrieve "
+                      "parameter '$(P)'", "P=%u", ix));
+        else
+        {
+            /*
+             * we will return rc but use orc to handle
+             * the return error code form the first found error on a parameter
+             * though we will continue to process all file parameters
+             */
+            orc = HandleOneFile (mgr, pc, false);
+            if (rc == 0)
+                rc = orc;
+        }
+    }
+    return rc;
+}
+
+
+/*
+ * handle the command line options then handle the file name parameters
+ */
+static __inline__
+rc_t HandleOptions (Args * args)
+{
+    uint32_t pcount;
+    rc_t rc;
+
+    rc = ArgsParamCount (args, &pcount);
+    if (rc)
+        LOGERR (klogInt, rc, "failed to count parameters");
+
+    else
+    {
+        if (pcount == 0)
+            MiniUsage(args);
+
+        else
+        {
+            uint32_t ocount;
+
+            rc = ArgsOptionCount (args, OPTION_QUIET, &ocount);
+            if (rc)
+                LOGERR (klogInt, rc, "failed to retrieve quiet option");
+
+            else
+            {
+                bool quiet;
+
+                quiet = (ocount != 0);
+
+                rc = ArgsOptionCount (args, OPTION_DECRYPT_BIN_COMPATIBILITY, &ocount);
+                if (rc)
+                    LOGERR (klogInt, rc, "failed to retrieve compatibility option");
+
+                else
+                {
+                    VFSManager * mgr;
+
+                    rc = VFSManagerMake (&mgr);
+                    if (rc)
+                        LOGERR (klogErr, rc, "failed to open file system manager");
+
+                    else
+                    {
+                        bool decrypt_bin_compatible;
+
+                        if (ocount == 0)
+                            decrypt_bin_compatible = false;
+
+                        else
+                            decrypt_bin_compatible = true;
+
+
+                        if (quiet)
+                        {
+                            KStsLevelSet (0);
+                            KLogLevelSet (0);
+                        }
+                        else if (!decrypt_bin_compatible)
+                        {
+                            if (KStsLevelGet() == 0)
+                                KStsLevelSet(1);
+                        }
+
+
+                        if (decrypt_bin_compatible)
+                        {
+                            if (pcount > 1)
+                            {
+                                rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
+                                LOGERR (0, rc, "compatibility mode can only handle one file parameter");
+                            }
+                            else
+                            {
+                                const char * pc;
+
+                                rc = ArgsParamValue (args, 0, &pc);
+                                if (rc)
+                                    LOGERR (0, rc, "unable to retrieve file parameter");
+
+                                if (rc == 0)
+                                    rc = HandleOneFile (mgr, pc, true); 
+                            }
+                        }
+                        else
+                        {
+                            rc = HandleParams (mgr, args, pcount);
+                        }
+                    
+                        VFSManagerRelease (mgr);
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+ 
+
+/* KMain - EXTERN
+ *  executable entrypoint "main" is implemented by
+ *  an OS-specific wrapper that takes care of establishing
+ *  signal handlers, logging, etc.
+ *
+ *  in turn, OS-specific "main" will invoke "KMain" as
+ *  platform independent main entrypoint.
+ *
+ *  "argc" [ IN ] - the number of textual parameters in "argv"
+ *  should never be < 0, but has been left as a signed int
+ *  for reasons of tradition.
+ *
+ *  "argv" [ IN ] - array of NUL terminated strings expected
+ *  to be in the shell-native character set: ASCII or UTF-8
+ *  element 0 is expected to be executable identity or path.
+ */
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args* args = NULL;
+    rc_t rc;
+
+    rc = ArgsMakeAndHandle(&args, argc, argv, 1, Options, sizeof Options / sizeof (Options[0]) );
+    if (rc)
+        LOGERR (klogInt, rc, "failed to parse command line parameters");
+    if (rc == 0)
+    {
+        rc = HandleOptions (args);
+
+        ArgsWhack (args);
+    }
+    STSMSG (2,("exiting: %R (%u)", rc, rc));
+    return rc;
+}
+
+/* EOF */
diff --git a/tools/nencvalid/nencvalid.vers b/tools/nencvalid/nencvalid.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/nencvalid/nencvalid.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/prefetch/Makefile b/tools/prefetch/Makefile
new file mode 100644
index 0000000..9b03031
--- /dev/null
+++ b/tools/prefetch/Makefile
@@ -0,0 +1,111 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/prefetch
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	prefetch
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+	@ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(ALL_TOOLS): vers-includes
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# prefetch
+#
+PREFETCH_SRC = \
+	prefetch
+
+PREFETCH_OBJ = \
+	$(addsuffix .$(OBJX),$(PREFETCH_SRC))
+
+PREFETCH_LIB = \
+	-ssraschema \
+	-dsraxf \
+	-dvxf \
+	-lvdb \
+	-lkapp \
+	-lkdb \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
+	-lkfg \
+	-lkfs \
+	-lksrch \
+	-lklib \
+	-lkproc \
+	-lm
+
+
+$(BINDIR)/prefetch: $(PREFETCH_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(PREFETCH_LIB)
diff --git a/tools/prefetch/prefetch.c b/tools/prefetch/prefetch.c
new file mode 100644
index 0000000..771ef70
--- /dev/null
+++ b/tools/prefetch/prefetch.c
@@ -0,0 +1,1177 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "prefetch.vers.h"
+
+#include <kapp/main.h> /* KAppVersion */
+
+#include <vdb/manager.h> /* VDBManager */
+#include <vdb/database.h> /* VDatabase */
+#include <vdb/dependencies.h> /* VDBDependencies */
+
+#include <vfs/manager.h> /* VFSManager */
+#include <vfs/resolver.h> /* VResolver */
+#include <vfs/path.h> /* VPath */
+
+#include <kfg/config.h> /* KConfig */
+
+#include <kfs/file.h> /* KFile */
+
+#include <klib/printf.h> /* string_printf */
+#include <klib/container.h> /* BSTree */
+#include <klib/text.h> /* String */
+#include <klib/status.h> /* STSMSG */
+#include <klib/log.h> /* PLOGERR */
+#include <klib/out.h> /* KOutMsg */
+#include <klib/rc.h>
+
+#include <assert.h>
+#include <stdlib.h> /* free */
+#include <string.h> /* memset */
+#include <time.h> /* time */
+
+#include <stdio.h> /* printf */
+
+#define DISP_RC(rc, err) (void)((rc == 0) ? 0 : LOGERR(klogInt, rc, err))
+
+#define DISP_RC2(rc, name, msg) (void)((rc == 0) ? 0 : \
+    PLOGERR(klogInt, (klogInt,rc, "$(msg): $(name)","msg=%s,name=%s",msg,name)))
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 != 0 && rc == 0) { rc = rc2; } obj = NULL; } while (false)
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define STS_TOP 0
+#define STS_INFO 1
+#define STS_DBG 2
+#define STS_FIN 3
+
+#define rcResolver   rcTree
+static bool NotFoundByResolver(rc_t rc) {
+    if (GetRCModule(rc) == rcVFS) {
+        if (GetRCTarget(rc) == rcResolver) {
+            if (GetRCContext(rc) == rcResolving) {
+                if (GetRCState(rc) == rcNotFound) {
+                    return true;
+                }
+            }
+        }
+    }
+    return false;
+}
+
+typedef struct {
+    const VPath *path;
+    const String *str;
+} VPathStr;
+static rc_t VPathStrFini(VPathStr *self) {
+    rc_t rc = 0;
+    assert(self);
+    VPathRelease(self->path);
+    free((void*)self->str);
+    memset(self, 0, sizeof *self);
+    return rc;
+}
+static rc_t VResolverResolve(VResolver *self, const char *accession,
+    VPathStr *local, const String **remote, const String **cache,
+    const KFile **file)
+{
+    rc_t rc = 0;
+    VPath* vaccession = NULL;
+    const VPath* vremote = NULL;
+    if (self == NULL) {
+        return RC(rcVFS, rcResolver, rcResolving, rcSelf, rcNull);
+    }
+    if (accession == NULL) {
+        return RC(rcVFS, rcResolver, rcResolving, rcParam, rcNull);
+    }
+    if (rc == 0) {
+        rc = VPathMake(&vaccession, accession);
+        DISP_RC2(rc, "VPathMake", accession);
+    }
+    if (rc == 0 && local != NULL) {
+        memset(local, 0, sizeof *local);
+        rc = VResolverLocal(self, vaccession, &local->path);
+        if (rc == 0) {
+            rc = VPathMakeString(local->path, &local->str);
+            DISP_RC2(rc, "VPathMakeString(VResolverLocal)", accession);
+        }
+        else if (NotFoundByResolver(rc)) {
+            rc = 0;
+        }
+        else {
+            DISP_RC2(rc, "VResolverLocal", accession);
+        }
+    }
+    if (rc == 0 && remote != NULL) {
+        rc = VResolverRemote(self, vaccession, &vremote, file);
+        if (rc == 0) {
+            rc = VPathMakeString(vremote, remote);
+            DISP_RC2(rc, "VPathMakeString(VResolverRemote)", accession);
+        }
+        else if (NotFoundByResolver(rc)) {
+            PLOGERR(klogErr, (klogErr, rc, "$(acc) cannot be found.",
+                "acc=%s", accession));
+        }
+        else {
+            DISP_RC2(rc, "Cannot resolve remote", accession);
+        }
+    }
+    if (rc == 0 && cache != NULL) {
+        const VPath* vpath = NULL;
+        uint64_t file_size = 0;
+        rc = VResolverCache(self, vremote, &vpath, file_size);
+        if (rc == 0) {
+            rc = VPathMakeString(vpath, cache);
+            DISP_RC2(rc, "VPathMakeString(VResolverCache)", accession);
+        }
+        else {
+            DISP_RC2(rc, "Cannot resolve cache", accession);
+        }
+        RELEASE(VPath, vpath);
+    }
+    RELEASE(VPath, vremote);
+    RELEASE(VPath, vaccession);
+    return rc;
+}
+
+typedef enum {
+    eForceNo, /* do not download found and complete objects */
+    eForceYes,/* force download of found and complete objects */
+    eForceYES /* force download; ignore lockes */
+} Force;
+typedef struct {
+    BSTNode n;
+    char *path;
+} TreeNode;
+typedef struct {
+    Args *args;
+    bool check_all;
+    Force force;
+    const VDBManager *mgr;
+    KDirectory *dir;
+    VResolver *resolver;
+
+    void *buffer;
+    size_t bsize;
+
+    BSTree downloaded;
+} Main;
+static rc_t StringRelease(const String *self) {
+    free((String*)self);
+    return 0;
+}
+
+typedef struct {
+    VPathStr local;
+    const String *remote;
+    const String *cache;
+    const KFile *file;
+
+    bool existing;
+
+    /* path to the resolved object : either local or cache:
+    should not be released */
+    const char *path;
+
+    const char *acc; /* do not release */
+} Resolved;
+static rc_t ResolvedInit(Resolved *self,
+    const char *acc, VResolver *resolver, KDirectory *dir)
+{
+    rc_t rc = 0;
+    KPathType type = kptNotFound;
+
+    assert(self);
+
+    memset(self, 0, sizeof *self);
+
+    self->acc = acc;
+
+    type = KDirectoryPathType(dir, acc) & ~kptAlias;
+    if (type == kptFile || type == kptDir) {
+        self->path = acc;
+        self->existing = true;
+        return 0;
+    }
+
+    rc = VResolverResolve(resolver,
+        acc, &self->local, &self->remote, &self->cache, &self->file);
+
+    STSMSG(STS_DBG, ("Resolve(%s) = %R:", acc, rc));
+    STSMSG(STS_DBG, ("local(%s)",
+        self->local.str ? self->local.str->addr : "NULL"));
+    STSMSG(STS_DBG, ("remote(%s)", self->remote ? self->remote->addr : "NULL"));
+    STSMSG(STS_DBG, ("cache(%s)", self->cache ? self->cache->addr : "NULL"));
+
+    if (rc == 0) {
+        if (self->local.str == NULL
+            && (self->cache == NULL ||
+                self->remote == NULL || self->file == NULL))
+        {
+            rc = RC(rcExe, rcPath, rcValidating, rcParam, rcNull);
+            PLOGERR(klogInt, (klogInt, rc,
+                "bad VResolverResolve($(acc)) result", "acc=%s", acc));
+        }
+    }
+
+    return rc;
+}
+
+static rc_t ResolvedFini(Resolved *self) {
+    rc_t rc = 0;
+
+    assert(self);
+
+    rc = VPathStrFini(&self->local);
+
+    RELEASE(String, self->remote);
+    RELEASE(String, self->cache);
+
+    RELEASE(KFile, self->file);
+
+    memset(self, 0, sizeof *self);
+
+    return rc;
+}
+
+/** isLocal is set to true when the object is found locally.
+    i.e. does not need need not be [re]downloaded */
+static rc_t ResolvedLocal(const Resolved *self,
+    const KDirectory *dir, bool *isLocal, Force force)
+{
+    rc_t rc = 0;
+    uint64_t sRemote = 0;
+    uint64_t sLocal = 0;
+    const KFile *local = NULL;
+    char path[PATH_MAX] = "";
+
+    assert(isLocal && self);
+
+    *isLocal = false;
+
+    if (self->local.str == NULL) {
+        return 0;
+    }
+
+    rc = VPathReadPath(self->local.path, path, sizeof path, NULL);
+    DISP_RC(rc, "VPathReadPath");
+
+    if (rc == 0 && KDirectoryPathType(dir, path) != kptFile) {
+        if (force == eForceNo) {
+            STSMSG(STS_TOP,
+                ("%s (not a file) is found locally: consider it complete",
+                 path));
+            *isLocal = true;
+        }
+        else {
+            STSMSG(STS_TOP,
+                ("%s (not a file) is found locally and will be redownloaded",
+                 path));
+        }
+        return 0;
+    }
+
+    if (rc == 0) {
+        rc = KFileSize(self->file, &sRemote);
+        DISP_RC2(rc, "KFileSize(remote)", self->acc);
+    }
+
+    if (rc == 0) {
+        rc = KDirectoryOpenFileRead(dir, &local, path);
+        DISP_RC2(rc, "KDirectoryOpenFileRead", path);
+    }
+
+    if (rc == 0) {
+        rc = KFileSize(local, &sLocal);
+        DISP_RC2(rc, "KFileSize", path);
+    }
+
+    if (rc == 0) {
+        if (sRemote == sLocal) {
+            if (force == eForceNo) {
+                *isLocal = true;
+                STSMSG(STS_INFO, ("%s (%lu) is found and is complete",
+                    path, sLocal));
+            }
+            else {
+                STSMSG(STS_INFO, ("%s (%lu) is found and will be redownloaded",
+                    path, sLocal));
+            }
+        }
+        else {
+            STSMSG(STS_TOP, ("%s (%lu) is incomplete. Expected size is %lu. "
+                "It will be re-downloaded", path, sLocal, sRemote));
+        }
+    }
+
+    RELEASE(KFile, local);
+
+    return rc;
+}
+
+static rc_t _KDirectoryMkTmpPrefix(const KDirectory *self,
+    const String *prefix, char *out, size_t sz)
+{
+    size_t num_writ = 0;
+    rc_t rc = string_printf(out, sz, &num_writ,
+        "%.*s.tmp", prefix->size, prefix->addr);
+    if (rc != 0) {
+        DISP_RC2(rc, "string_printf(tmp)", prefix->addr);
+        return rc;
+    }
+
+    if (num_writ > sz) {
+        rc = RC(rcExe, rcFile, rcCopying, rcBuffer, rcInsufficient);
+        PLOGERR(klogInt, (klogInt, rc,
+            "bad string_printf($(s).tmp) result", "s=%s", prefix->addr));
+        return rc;
+    }
+
+    return rc;
+}
+
+static rc_t _KDirectoryMkTmpName(const KDirectory *self,
+    const String *prefix, char *out, size_t sz)
+{
+    rc_t rc = 0;
+    int i = 0;
+
+    assert(prefix);
+
+    while (rc == 0) {
+        size_t num_writ = 0;
+        rc = string_printf(out, sz, &num_writ,
+            "%.*s.tmp.%d.tmp", prefix->size, prefix->addr, rand() % 100000);
+        if (rc != 0) {
+            DISP_RC2(rc, "string_printf(tmp.rand)", prefix->addr);
+            break;
+        }
+
+        if (num_writ > sz) {
+            rc = RC(rcExe, rcFile, rcCopying, rcBuffer, rcInsufficient);
+            PLOGERR(klogInt, (klogInt, rc,
+                "bad string_printf($(s).tmp.rand) result",
+                "s=%s", prefix->addr));
+            return rc;
+        }
+        if (KDirectoryPathType(self, out) == kptNotFound) {
+            break;
+        }
+        if (++i > 999) {
+            rc = RC(rcExe, rcFile, rcCopying, rcName, rcUndefined);
+            PLOGERR(klogInt, (klogInt, rc,
+                "cannot generate unique tmp file name for $(name)", "name=%s",
+                prefix->addr));
+            return rc;
+        }
+    }
+
+    return rc;
+}
+
+static rc_t _KDirectoryMkLockName(const KDirectory *self,
+    const String *prefix, char *out, size_t sz)
+{
+    rc_t rc = 0;
+    size_t num_writ = 0;
+
+    assert(prefix);
+
+    rc = string_printf(out, sz, &num_writ,
+        "%.*s.lock", prefix->size, prefix->addr);
+    DISP_RC2(rc, "string_printf(lock)", prefix->addr);
+
+    if (rc == 0 && num_writ > sz) {
+        rc = RC(rcExe, rcFile, rcCopying, rcBuffer, rcInsufficient);
+        PLOGERR(klogInt, (klogInt, rc,
+            "bad string_printf($(s).lock) result", "s=%s", prefix->addr));
+        return rc;
+    }
+
+    return rc;
+}
+
+static rc_t _KDirectoryCleanCache(KDirectory *self, const String *local) {
+    rc_t rc = 0;
+
+    char cache[PATH_MAX] = "";
+    size_t num_writ = 0;
+
+    assert(self && local && local->addr);
+
+    if (rc == 0) {
+        rc = string_printf(cache, sizeof cache, &num_writ, "%s.cache",
+            local->addr);
+        DISP_RC2(rc, "string_printf(.cache)", local->addr);
+    }
+
+    if (rc == 0 && KDirectoryPathType(self, cache) != kptNotFound) {
+        STSMSG(STS_DBG, ("removing %s", cache));
+        rc = KDirectoryRemove(self, false, cache);
+    }
+
+    return rc;
+}
+
+static rc_t _KDirectoryClean(KDirectory *self, const String *cache,
+    const char *lock, const char *tmp, bool rmSelf)
+{
+    rc_t rc = 0;
+    rc_t rc2 = 0;
+
+    char tmpName[PATH_MAX] = "";
+    const char *dir = tmpName;
+    const char *tmpPfx = NULL;
+    size_t tmpPfxLen = 0;
+
+    assert(self && cache);
+
+    rc = _KDirectoryMkTmpPrefix(self, cache, tmpName, sizeof tmpName);
+    if (rc == 0) {
+        char *slash = strrchr(tmpName, '/');
+        if (slash != NULL) {
+            if (strlen(tmpName) == slash + 1 - tmpName) {
+                rc = RC(rcExe,
+                    rcDirectory, rcSearching, rcDirectory, rcIncorrect);
+                PLOGERR(klogInt, (klogInt, rc,
+                    "bad file name $(path)", "path=%s", tmpName));
+            }
+            else {
+                *slash = '\0';
+                tmpPfx = slash + 1;
+            }
+        }
+        else {
+            rc = RC(rcExe, rcDirectory, rcSearching, rcChar, rcNotFound);
+            PLOGERR(klogInt, (klogInt, rc,
+                    "cannot extract directory from $(path)", "path=%s", dir));
+        }
+        tmpPfxLen = strlen(tmpPfx);
+    }
+
+    if (tmp != NULL && KDirectoryPathType(self, tmp) != kptNotFound) {
+        rc_t rc3 = 0;
+        STSMSG(STS_DBG, ("removing %s", tmp));
+        rc3 = KDirectoryRemove(self, false, tmp);
+        if (rc2 == 0 && rc3 != 0) {
+            rc2 = rc3;
+        }
+    }
+
+    if (rmSelf && KDirectoryPathType(self, cache->addr) != kptNotFound) {
+        rc_t rc3 = 0;
+        STSMSG(STS_DBG, ("removing %s", cache->addr));
+        rc3 = KDirectoryRemove(self, false, cache->addr);
+        if (rc2 == 0 && rc3 != 0) {
+            rc2 = rc3;
+        }
+    }
+
+    if (rc == 0) {
+        uint32_t count = 0;
+        uint32_t i = 0;
+        KNamelist *list = NULL;
+        STSMSG(STS_DBG, ("listing %s for old temporary files", dir));
+        rc = KDirectoryList(self, &list, NULL, NULL, dir);
+        DISP_RC2(rc, "KDirectoryList", dir);
+
+        if (rc == 0) {
+            rc = KNamelistCount(list, &count);
+            DISP_RC2(rc, "KNamelistCount(KDirectoryList)", dir);
+        }
+
+        for (i = 0; i < count && rc == 0; ++i) {
+            const char *name = NULL;
+            rc = KNamelistGet(list, i, &name);
+            if (rc != 0) {
+                DISP_RC2(rc, "KNamelistGet(KDirectoryList)", dir);
+            }
+            else {
+                if (strncmp(name, tmpPfx, tmpPfxLen) == 0) {
+                    rc_t rc3 = 0;
+                    STSMSG(STS_DBG, ("removing %s", name));
+                    rc3 = KDirectoryRemove(self, false,
+                        "%s%c%s", dir, '/', name);
+                    if (rc2 == 0 && rc3 != 0) {
+                        rc2 = rc3;
+                    }
+                }
+            }
+        }
+
+        RELEASE(KNamelist, list);
+    }
+
+    if (lock != NULL && KDirectoryPathType(self, lock) != kptNotFound) {
+        rc_t rc3 = 0;
+        STSMSG(STS_DBG, ("removing %s", lock));
+        rc3 = KDirectoryRemove(self, false, lock);
+        if (rc2 == 0 && rc3 != 0) {
+            rc2 = rc3;
+        }
+    }
+
+    if (rc == 0 && rc2 != 0) {
+        rc = rc2;
+    }
+
+    return rc;
+}
+
+static int CC bstCmp(const void *item, const BSTNode *n) {
+    const char* path = item;
+    const TreeNode* sn = (const TreeNode*) n;
+
+    assert(path && sn && sn->path);
+
+    return strcmp(path, sn->path);
+}
+
+static int CC bstSort(const BSTNode* item, const BSTNode* n) {
+    const TreeNode* sn = (const TreeNode*) item;
+
+    return bstCmp(sn->path, n);
+}
+
+static void CC bstWhack(BSTNode* n, void* ignore) {
+    TreeNode* sn = (TreeNode*) n;
+
+    assert(sn);
+
+    free(sn->path);
+
+    memset(sn, 0, sizeof *sn);
+
+    free(sn);
+}
+
+static bool MainHasDownloaded(const Main *self, const char *local) {
+    TreeNode *sn = NULL;
+
+    assert(self);
+
+    sn = (TreeNode*) BSTreeFind(&self->downloaded, local, bstCmp);
+
+    return sn != NULL;
+}
+
+static rc_t MainDownloaded(Main *self, const char *path) {
+    TreeNode *sn = NULL;
+
+    assert(self);
+
+    if (MainHasDownloaded(self, path)) {
+        return 0;
+    }
+
+    sn = calloc(1, sizeof *sn);
+    if (sn == NULL) {
+        return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+    }
+
+    sn->path = string_dup_measure(path, NULL);
+    if (sn->path == NULL) {
+        bstWhack((BSTNode*) sn, NULL);
+        sn = NULL;
+        return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+    }
+
+    BSTreeInsert(&self->downloaded, (BSTNode*)sn, bstSort);
+
+    return 0;
+}
+
+static rc_t ResolvedDownload(const Resolved *self, Main *main) {
+    rc_t rc = 0;
+    KFile *out = NULL;
+    KFile *flock = NULL;
+    uint64_t pos = 0;
+    size_t num_read = 0;
+    uint64_t opos = 0;
+    size_t num_writ = 0;
+
+    char tmp[PATH_MAX] = "";
+    char lock[PATH_MAX] = "";
+
+    assert(self
+        && self->cache && self->cache->size && self->cache->addr && main);
+
+    if (main->force != eForceYES &&
+        MainHasDownloaded(main, self->cache->addr))
+    {
+        STSMSG(STS_INFO, ("%s has just been downloaded", self->cache->addr));
+        return 0;
+    }
+
+    if (rc == 0) {
+        rc = _KDirectoryMkLockName(main->dir, self->cache, lock, sizeof lock);
+    }
+
+    if (rc == 0) {
+        rc = _KDirectoryMkTmpName(main->dir, self->cache, tmp, sizeof tmp);
+    }
+
+    if (KDirectoryPathType(main->dir, lock) != kptNotFound) {
+        if (main->force != eForceYES) {
+            KTime_t date = 0;
+            rc = KDirectoryDate(main->dir, &date, lock);
+            if (rc == 0) {
+                time_t t = time(NULL) - date;
+                if (t < 60 * 60 * 24) { /* 24 hours */
+                    STSMSG(STS_DBG, ("%s found: canceling download", lock));
+                    rc = RC(rcExe, rcFile, rcCopying, rcLock, rcExists);
+                    PLOGERR(klogWarn, (klogWarn, rc,
+                        "Lock file $(file) exists: download canceled",
+                        "file=%s", lock));
+                    return rc;
+                }
+                else {
+                    STSMSG(STS_DBG, ("%s found and ignored as too old", lock));
+                    rc = _KDirectoryClean(main->dir,
+                        self->cache, NULL, NULL, true);
+                }
+            }
+            else {
+                STSMSG(STS_DBG, ("%s found", lock));
+                DISP_RC2(rc, "KDirectoryDate", lock);
+            }
+        }
+        else {
+            STSMSG(STS_DBG, ("%s found and forced to be ignored", lock));
+            rc = _KDirectoryClean(main->dir, self->cache, NULL, NULL, true);
+        }
+    }
+    else {
+        STSMSG(STS_DBG, ("%s not found", lock));
+    }
+
+    if (rc == 0) {
+        STSMSG(STS_DBG, ("creating %s", lock));
+        rc = KDirectoryCreateFile(main->dir, &flock,
+            false, 0664, kcmInit | kcmParents, lock);
+        DISP_RC2(rc, "Cannot OpenFileWrite", lock);
+    }
+
+    if (rc == 0) {
+        STSMSG(STS_DBG, ("creating %s", tmp));
+        rc = KDirectoryCreateFile(main->dir, &out,
+            false, 0664, kcmInit | kcmParents, tmp);
+        DISP_RC2(rc, "Cannot OpenFileWrite", tmp);
+    }
+
+    assert(self->remote);
+
+    STSMSG(STS_INFO, ("%s -> %s", self->remote->addr, tmp));
+    do {
+        rc = Quitting();
+
+        if (rc == 0) {
+            STSMSG(STS_FIN,
+                ("> Reading %lu bytes from pos. %lu", main->bsize, pos));
+            rc = KFileRead(self->file,
+                pos, main->buffer, main->bsize, &num_read);
+            if (rc != 0) {
+                DISP_RC2(rc, "Cannot KFileRead", self->remote->addr);
+            }
+            else {
+                STSMSG(STS_FIN,
+                    ("< Read %lu bytes from pos. %lu", num_read, pos));
+                pos += num_read;
+            }
+        }
+
+        if (rc == 0 && num_read > 0) {
+            rc = KFileWrite(out, opos, main->buffer, num_read, &num_writ);
+            DISP_RC2(rc, "Cannot KFileWrite", tmp);
+            opos += num_writ;
+        }
+    } while (rc == 0 && num_read > 0);
+
+    RELEASE(KFile, out);
+    RELEASE(KFile, flock);
+
+    if (rc == 0) {
+        STSMSG(STS_DBG, ("renaming %s -> %s", tmp, self->cache->addr));
+        rc = KDirectoryRename(main->dir, true, tmp, self->cache->addr);
+        if (rc != 0) {
+            PLOGERR(klogInt, (klogInt, rc, "cannot rename $(from) to $(to)",
+                "from=%s,to=%s", tmp, self->cache->addr));
+        }
+    }
+
+    if (rc == 0) {
+        rc = MainDownloaded(main, self->cache->addr);
+    }
+
+    if (rc == 0) {
+        rc_t rc2 = _KDirectoryCleanCache(main->dir, self->cache);
+        if (rc == 0 && rc2 != 0) {
+            rc = rc2;
+        }
+    }
+
+    {
+        rc_t rc2 = _KDirectoryClean(main->dir, self->cache, lock, tmp, rc != 0);
+        if (rc == 0 && rc2 != 0) {
+            rc = rc2;
+        }
+    }
+
+    return rc;
+}
+
+static
+rc_t ResolvedResolve(Resolved *self, Main *main, const char *acc)
+{
+    static int n = 0;
+    rc_t rc = 0;
+    bool isLocal = false;
+
+    assert(self && main);
+
+    ++n;
+
+    rc = ResolvedInit(self, acc, main->resolver, main->dir);
+
+    if (rc == 0) {
+        if (self->existing) {
+            self->path = acc;
+            return rc;
+        }
+
+        rc = ResolvedLocal(self, main->dir, &isLocal, main->force);
+    }
+
+    if (rc == 0) {
+        if (isLocal) {
+            STSMSG(STS_TOP, ("%d) %s is found locally", n, acc));
+            if (self->local.str != NULL) {
+                self->path = self->local.str->addr;
+            }
+        }
+        else {
+            STSMSG(STS_TOP, ("%d) Downloading %s...", n, acc));
+            rc = ResolvedDownload(self, main);
+            if (rc == 0) {
+                STSMSG(STS_TOP, ("%d) %s was downloaded successfully", n, acc));
+                if (self->cache != NULL) {
+                    self->path = self->cache->addr;
+                }
+            }
+            else {
+                STSMSG(STS_TOP, ("%d) failed to download %s", n, acc));
+            }
+        }
+    }
+
+    return rc;
+}
+
+static rc_t MainDependenciesList(const Main *self,
+    const char *path, const VDBDependencies **deps)
+{
+    rc_t rc = 0;
+    bool isDb = true;
+    const VDatabase *db = NULL;
+
+    assert(self && path && deps);
+
+    rc = VDBManagerOpenDBRead(self->mgr, &db, NULL, path);
+    if (rc != 0) {
+        if (rc == SILENT_RC(rcDB, rcMgr, rcOpening, rcDatabase, rcIncorrect)) {
+            isDb = false;
+            rc = 0;
+        }
+        DISP_RC2(rc, "Cannot open database", path);
+    }
+
+    if (rc == 0 && isDb) {
+        bool all = self->check_all || self->force != eForceNo;
+        rc = VDatabaseListDependencies(db, deps, !all);
+        DISP_RC2(rc, "VDatabaseListDependencies", path);
+    }
+
+    RELEASE(VDatabase, db);
+
+    return rc;
+}
+
+static rc_t MainExecute(Main *self, const char *acc) {
+    rc_t rc = 0;
+    rc_t rc2 = 0;
+    const VDBDependencies *deps = NULL;
+    uint32_t count = 0;
+    uint32_t i = 0;
+
+    Resolved resolved;
+
+    assert(self);
+
+    rc = ResolvedResolve(&resolved, self, acc);
+
+    if (rc == 0) {
+        rc = MainDependenciesList(self, resolved.path, &deps);
+    }
+
+    if (rc == 0 && deps != NULL) {
+        rc = VDBDependenciesCount(deps, &count);
+        if (rc == 0) {
+            STSMSG(STS_TOP, ("%s has %d%s dependenc%s",
+                acc, count, self->check_all ? "" : " unresolved",
+                count > 1 ? "ies" : "y"));
+        }
+        else {
+            DISP_RC2(rc, "Failed to check %s's dependencies", acc);
+        }
+    }
+
+    for (i = 0; i < count && rc == 0; ++i) {
+        bool local = true;
+        const char *seq_id = NULL;
+
+        if (rc == 0) {
+            rc = VDBDependenciesLocal(deps, &local, i);
+            DISP_RC2(rc, "VDBDependenciesLocal", acc);
+            if (local) {
+                continue;
+            }
+        }
+
+        if (rc == 0) {
+            rc = VDBDependenciesSeqId(deps, &seq_id, i);
+            DISP_RC2(rc, "VDBDependenciesSeqId", acc);
+        }
+
+        if (rc == 0) {
+            size_t num_writ = 0;
+            char ncbiAcc[512] = "";
+
+            assert(seq_id);
+
+            rc = string_printf(ncbiAcc, sizeof ncbiAcc, &num_writ,
+                "ncbi-acc:%s?vdb-ctx=refseq", seq_id);
+            DISP_RC2(rc, "string_printf(?vdb-ctx=refseq)", seq_id);
+            if (rc == 0 && num_writ > sizeof ncbiAcc) {
+                rc = RC(rcExe, rcFile, rcCopying, rcBuffer, rcInsufficient);
+                PLOGERR(klogInt, (klogInt, rc,
+                    "bad string_printf($(s)?vdb-ctx=refseq) result",
+                    "s=%s", seq_id));
+            }
+    
+            if (rc == 0) {
+                Resolved resolved;
+                rc = ResolvedResolve(&resolved, self, ncbiAcc);
+                rc2 = ResolvedFini(&resolved);
+            }
+        }
+    }
+
+    if (rc == 0 && rc2 != 0) {
+        rc = rc2;
+    }
+
+    RELEASE(VDBDependencies, deps);
+
+    {
+        rc_t rc2 = ResolvedFini(&resolved);
+        if (rc == 0 && rc2 != 0) {
+            rc = rc2;
+        }
+    }
+
+    return rc;
+}
+
+#define CHECK_ALL_ALIAS  "c"
+#define CHECK_ALL_OPTION "check-all"
+static const char* CHECK_ALL_USAGE[] = { "double-check all refseqs", NULL };
+
+#define FORCE_ALIAS  "f"
+#define FORCE_OPTION "force"
+static const char* FORCE_USAGE[] = { "force object download::",
+    "no [default]: skip download if the object if found and complete;",
+    "yes: download it even if it is found and is complete;", "all: ignore lock "
+    "files (stale locks or it is beeing downloaded by another process)", NULL };
+
+static OptDef Options[] = {
+    /*                                                    needs_value required*/
+    { CHECK_ALL_OPTION, CHECK_ALL_ALIAS, NULL, CHECK_ALL_USAGE, 1, false, false
+    },
+    { FORCE_OPTION    , FORCE_ALIAS    , NULL, FORCE_USAGE , 1, true, false }
+};
+
+static rc_t MainProcessArgs(Main *self, int argc, char *argv[]) {
+    rc_t rc = 0;
+
+    uint32_t pcount = 0;
+
+    assert(self);
+
+    rc = ArgsMakeAndHandle(&self->args, argc, argv, 1,
+        Options, sizeof Options / sizeof (OptDef));
+    if (rc != 0) {
+        DISP_RC(rc, "ArgsMakeAndHandle");
+        return rc;
+    }
+
+    do {
+        rc = ArgsOptionCount (self->args, FORCE_OPTION, &pcount);
+        if (rc != 0) {
+            LOGERR(klogErr, rc, "Failure to get '" FORCE_OPTION "' argument");
+            break;
+        }
+
+        if (pcount > 0) {
+            const char *val = NULL;
+            rc = ArgsOptionValue(self->args, FORCE_OPTION, 0, &val);
+            if (rc != 0) {
+                LOGERR(klogErr, rc,
+                    "Failure to get '" FORCE_OPTION "' argument value");
+                break;
+            }
+            if (val == NULL || val[0] == '\0') {
+                rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+                LOGERR(klogErr, rc,
+                    "Unrecognized '" FORCE_OPTION "' argument value");
+                break;
+            }
+            switch (val[0]) {
+                case 'n':
+                case 'N':
+                    self->force = eForceNo;
+                    break;
+                case 'y':
+                case 'Y':
+                    self->force = eForceYes;
+                    break;
+                case 'a':
+                case 'A':
+                    self->force = eForceYES;
+                    break;
+                default:
+                    rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+                    LOGERR(klogErr, rc,
+                        "Unrecognized '" FORCE_OPTION "' argument value");
+                    break;
+            }
+            if (rc != 0) {
+                break;
+            }
+        }
+
+        rc = ArgsOptionCount (self->args, CHECK_ALL_OPTION, &pcount);
+        if (rc != 0) {
+            LOGERR(klogErr,
+                rc, "Failure to get '" CHECK_ALL_OPTION "' argument");
+            break;
+        }
+        if (pcount > 0 || self->force != eForceNo) {
+            self->check_all = true;
+        }
+    } while (false);
+    return rc;
+}
+
+static rc_t MainInit(int argc, char *argv[], Main *self) {
+    rc_t rc = 0;
+    VFSManager *mgr = NULL;
+    KConfig *cfg = NULL;
+
+    assert(self);
+    memset(self, 0, sizeof *self);
+
+    BSTreeInit(&self->downloaded);
+
+    if (rc == 0) {
+        rc = MainProcessArgs(self, argc, argv);
+    }
+
+    if (rc == 0) {
+        self->bsize = 1024 * 1024;
+        self->buffer = malloc(self->bsize);
+        if (self->buffer == NULL) {
+            rc = RC(rcExe, rcData, rcAllocating, rcMemory, rcExhausted);
+        }
+    }
+
+    if (rc == 0) {
+        rc = VFSManagerMake(&mgr);
+        DISP_RC(rc, "VFSManagerMake");
+    }
+
+    if (rc == 0) {
+        VResolver *resolver = NULL;
+        rc = VFSManagerGetResolver(mgr, &resolver);
+        DISP_RC(rc, "VFSManagerGetResolver");
+        VResolverRemoteEnable(resolver, vrAlwaysEnable);
+        RELEASE(VResolver, resolver);
+    }
+
+    if (rc == 0) {
+        rc = KConfigMake(&cfg, NULL);
+        DISP_RC(rc, "KConfigMake");
+    }
+
+    if (rc == 0) {
+        rc = VFSManagerMakeResolver(mgr, &self->resolver, cfg);
+        DISP_RC(rc, "VFSManagerMakeResolver");
+    }
+
+    if (rc == 0) {
+        VResolverRemoteEnable ( self -> resolver, vrAlwaysEnable );
+        VResolverCacheEnable ( self -> resolver, vrAlwaysEnable );
+    }
+
+    if (rc == 0) {
+        rc = VDBManagerMakeRead(&self->mgr, NULL);
+        DISP_RC(rc, "VDBManagerMakeRead");
+    }
+
+    if (rc == 0) {
+        rc = KDirectoryNativeDir(&self->dir);
+        DISP_RC(rc, "KDirectoryNativeDir");
+    }
+
+    if (rc == 0) {
+        srand(time(NULL));
+    }
+
+    RELEASE(KConfig, cfg);
+    RELEASE(VFSManager, mgr);
+
+    return rc;
+}
+
+static rc_t MainFini(Main *self) {
+    rc_t rc = 0;
+
+    assert(self);
+
+    RELEASE(VResolver, self->resolver);
+    RELEASE(VDBManager, self->mgr);
+    RELEASE(KDirectory, self->dir);
+    RELEASE(Args, self->args);
+
+    free(self->buffer);
+
+    BSTreeWhack(&self->downloaded, bstWhack, NULL);
+
+    memset(self, 0, sizeof *self);
+
+    return rc;
+}
+
+const char UsageDefaultName[] = "prefetch";
+rc_t UsageSummary(const char *progname) {
+    return OUTMSG((
+        "Usage:\n"
+        "  %s [options] <SRA accession> [...]\n"
+        "  Download SRA file and its dependencies\n"
+        "\n"
+        "  %s [options] <SRA file> [...]\n"
+        "  Check SRA for missed dependencies and download them\n",
+        progname, progname));
+}
+
+rc_t CC Usage(const Args *args) {
+    rc_t rc = 0;
+    int i = 0;
+
+    const char *progname = UsageDefaultName;
+    const char *fullpath = UsageDefaultName;
+
+    if (args == NULL) {
+        rc = RC(rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    }
+    else {
+        rc = ArgsProgram(args, &fullpath, &progname);
+    }
+    if (rc != 0) {
+        progname = fullpath = UsageDefaultName;
+    }
+
+    UsageSummary(progname);
+    OUTMSG(("\n"));
+
+    OUTMSG(("Options:\n"));
+    for (i = 0; i < sizeof(Options) / sizeof(Options[0]); i++ ) {
+        const char *param = NULL;
+        if (strcmp(Options[i].aliases, FORCE_ALIAS) == 0) {
+            param = "value";
+        }
+        HelpOptionLine(Options[i].aliases, Options[i].name,
+            param, Options[i].help);
+    }
+
+    OUTMSG(("\n"));
+    HelpOptionsStandard();
+    HelpVersion(fullpath, KAppVersion());
+
+    return rc;
+}
+
+ver_t CC KAppVersion(void) { return PREFETCH_VERS; }
+
+/******************************************************************************/
+
+rc_t CC KMain(int argc, char *argv[]) {
+    rc_t rc = 0;
+    uint32_t pcount = 0;
+    uint32_t i = ~0;
+
+    Main pars;
+    rc = MainInit(argc, argv, &pars);
+
+    if (rc == 0) {
+        rc = ArgsParamCount(pars.args, &pcount);
+    }
+
+    if (rc == 0 && pcount == 0) {
+        rc = UsageSummary(UsageDefaultName);
+    }
+
+    for (i = 0; rc == 0 && i < pcount; ++i) {
+        const char *path = NULL;
+        rc = ArgsParamValue(pars.args, i, &path);
+        DISP_RC(rc, "ArgsParamValue");
+        if (rc == 0) {
+            rc = MainExecute(&pars, path);
+        }
+    }
+
+    {
+        rc_t rc2 = MainFini(&pars);
+        if (rc2 != 0 && rc == 0) {
+            rc = rc2;
+        }
+    }
+
+    return rc;
+}
diff --git a/tools/prefetch/prefetch.vers b/tools/prefetch/prefetch.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/prefetch/prefetch.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/refseq-load/Makefile b/tools/refseq-load/Makefile
old mode 100755
new mode 100644
index 8287971..8c7cf8c
--- a/tools/refseq-load/Makefile
+++ b/tools/refseq-load/Makefile
@@ -42,20 +42,18 @@ ALL_TOOLS = \
 #-------------------------------------------------------------------------------
 # outer targets
 #
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
 ifeq (win,$(OS))
 all std:
 	@ echo "not building refseq-load under Windows"
 else
-all std: makedirs vers-includes
+all std: vers-includes
 	@ $(MAKE_CMD) $(TARGDIR)/$@
 endif
 
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
 	@ $(MAKE_CMD) $(BINDIR)/$@
 
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
 
 #-------------------------------------------------------------------------------
 # all
@@ -74,6 +72,13 @@ $(TARGDIR)/std: \
 .PHONY: $(TARGDIR)/std
 
 #-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
 # clean
 #
 clean: stdclean
@@ -88,8 +93,7 @@ tag: $(addsuffix _tag,$(ALL_TOOLS))
 .PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
 
 #-------------------------------------------------------------------------------
-# vdb-copy
-#  vdb copy tool
+# refseq-load
 #
 REFSEQ_LOAD_SRC = \
 	context \
@@ -99,7 +103,6 @@ REFSEQ_LOAD_OBJ = \
 	$(addsuffix .$(OBJX),$(REFSEQ_LOAD_SRC))
 
 REFSEQ_LOAD_LIB = \
-	-ssrapath \
 	-ssraschema \
 	-dwsraxf \
 	-dwvxf \
@@ -109,15 +112,16 @@ REFSEQ_LOAD_LIB = \
 	-lwvdb \
 	-lwkdb \
 	-lkapp \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
 	-lkfg \
 	-lkfs \
 	-lksrch \
 	-lcurl \
 	-lklib \
+	-lkq \
 	-lkproc \
-	-ldl \
-	-lz \
-	-lbz2 \
 	-lm
 
 $(BINDIR)/refseq-load: $(REFSEQ_LOAD_OBJ)
diff --git a/tools/refseq-load/context.c b/tools/refseq-load/context.c
index 43d1d54..06f9312 100644
--- a/tools/refseq-load/context.c
+++ b/tools/refseq-load/context.c
@@ -160,24 +160,36 @@ static rc_t context_evaluate_arguments( const Args *my_args, p_context ctx )
     uint32_t count, idx;
     
     rc_t rc = ArgsParamCount( my_args, &count );
-    DISP_RC( rc, "ArgsParamCount() failed" );
+    if ( rc != 0 )
+    {
+        LOGERR( klogErr, rc, "ArgsParamCount() failed" );
+    }
     if ( rc != 0 ) return rc;
 
     for ( idx = 0; idx < count && rc == 0; ++idx )
     {
         const char *value = NULL;
         rc = ArgsParamValue( my_args, idx, &value );
-        DISP_RC( rc, "ArgsParamValue() failed" );
-        if ( rc == 0 )
+        if ( rc != 0 )
+        {
+            LOGERR( klogErr, rc, "ArgsParamValue() failed" );
+        }
+        else
         {
             switch( idx )
             {
             case 0 : rc = context_set_src( ctx, value );
-                     DISP_RC( rc, "context_set_src() failed" );
+                     if ( rc != 0 )
+                     {
+                        LOGERR( klogErr, rc, "context_set_src() failed" );
+                     }
                      break;
 
             case 1 : rc = context_set_dst_path( ctx, value );
-                     DISP_RC( rc, "context_set_dst_path() failed" );
+                     if ( rc != 0 )
+                     {
+                        LOGERR( klogErr, rc, "context_set_dst_path() failed" );
+                     }
                      break;
             }
         }
@@ -191,7 +203,10 @@ static bool context_get_bool_option( const Args *my_args,
 {
     uint32_t count;
     rc_t rc = ArgsOptionCount( my_args, name, &count );
-    DISP_RC( rc, "ArgsOptionCount() failed" );
+    if ( rc != 0 )
+    {
+        LOGERR( klogErr, rc, "ArgsOptionCount() failed" );
+    }
     return ( ( rc == 0 && count > 0 ) );
 }
 
@@ -202,11 +217,17 @@ static const char* context_get_str_option( const Args *my_args,
     const char* res = NULL;
     uint32_t count;
     rc_t rc = ArgsOptionCount( my_args, name, &count );
-    DISP_RC( rc, "ArgsOptionCount() failed" );
-    if ( ( rc == 0 )&&( count > 0 ) )
+    if ( rc != 0 )
+    {
+        LOGERR( klogErr, rc, "ArgsOptionCount() failed" );
+    }
+    else if ( count > 0 )
     {
         rc = ArgsOptionValue( my_args, name, 0, &res );
-        DISP_RC( rc, "ArgsOptionValue() failed" );
+        if ( rc != 0 )
+        {
+            LOGERR( klogErr, rc, "ArgsOptionValue() failed" );
+        }
     }
     return res;
 }
@@ -218,13 +239,22 @@ static uint32_t context_get_uint_32_option( const Args *my_args,
 {
     uint32_t count, res = def;
     rc_t rc = ArgsOptionCount( my_args, name, &count );
-    DISP_RC( rc, "ArgsOptionCount() failed" );
-    if ( ( rc == 0 )&&( count > 0 ) )
+    if ( rc != 0 )
+    {
+        LOGERR( klogErr, rc, "ArgsOptionCount() failed" );
+    }
+    else if ( count > 0 )
     {
         const char *s;
         rc = ArgsOptionValue( my_args, name, 0,  &s );
-        DISP_RC( rc, "ArgsOptionValue() failed" );
-        if ( rc == 0 ) res = atoi( s );
+        if ( rc != 0 )
+        {
+            LOGERR( klogErr, rc, "ArgsOptionValue() failed" );
+        }
+        else
+        {
+            res = atoi( s );
+        }
     }
     return res;
 }
@@ -241,16 +271,24 @@ static rc_t context_evaluate_options( const Args *my_args, p_context ctx )
     context_set_src( ctx, context_get_str_option( my_args, OPTION_SRC ) );
     context_set_dst_path( ctx, context_get_str_option( my_args, OPTION_DST_PATH ) );
     context_set_schema( ctx, context_get_str_option( my_args, OPTION_SCHEMA ) );
-    ctx->chunk_size = context_get_uint_32_option( my_args, OPTION_CHUNK_SIZE, 0 );
-    circular = context_get_str_option( my_args, OPTION_CIRCULAR );
-    ctx->quiet = context_get_bool_option( my_args, OPTION_QUIET );
-    if( circular != NULL ) {
-        if(strcasecmp(circular, "yes") == 0 ) {
+    ctx->chunk_size     = context_get_uint_32_option( my_args, OPTION_CHUNK_SIZE, 0 );
+    circular            = context_get_str_option( my_args, OPTION_CIRCULAR );
+    ctx->quiet          = context_get_bool_option( my_args, OPTION_QUIET );
+    ctx->force_target   = context_get_bool_option( my_args, OPTION_FORCE );
+    ctx->input_is_file  = context_get_bool_option( my_args, OPTION_IFILE );
+    if ( circular != NULL )
+    {
+        if ( strcasecmp( circular, "yes" ) == 0 )
+        {
             ctx->circular = true;
-        } else if(strcasecmp(circular, "no") == 0 ) {
+        }
+        else if ( strcasecmp( circular, "no" ) == 0 )
+        {
             ctx->circular = false;
-        } else {
-            rc = RC( rcExe, rcNoTarg, rcParsing, rcParam, rcUnrecognized);
+        }
+        else
+        {
+            rc = RC( rcExe, rcNoTarg, rcParsing, rcParam, rcUnrecognized );
         }
     }
     else
@@ -267,17 +305,34 @@ static rc_t context_evaluate_options( const Args *my_args, p_context ctx )
 */
 rc_t context_capture_arguments_and_options( const Args * args, p_context ctx )
 {
-    rc_t rc;
-
-    rc = context_evaluate_arguments( args, ctx );
-    DISP_RC( rc, "evaluate_arguments() failed" );
-    if ( rc == 0 )
+    rc_t rc = context_evaluate_arguments( args, ctx );
+    if ( rc != 0 )
+    {
+        LOGERR( klogErr, rc, "context_evaluate_arguments() failed" );
+    }
+    else
     {
-        if( (rc = context_evaluate_options( args, ctx )) == 0 ) {
+        rc = context_evaluate_options( args, ctx );
+        if ( rc != 0 )
+        {
+            LOGERR( klogErr, rc, "context_evaluate_options() failed" );
+        }
+        else
+        {
             context_check_if_usage_necessary( ctx );
-
-            rc = ArgsHandleLogLevel( args );
-            DISP_RC( rc, "ArgsHandleLogLevel() failed" );
+            rc = ArgsArgvValue( args, 0, &ctx->argv0 );
+            if ( rc != 0 )
+            {
+                LOGERR( klogErr, rc, "ArgsArgvValue() failed" );
+            }
+            else
+            {
+                rc = ArgsHandleLogLevel( args );
+                if ( rc != 0 )
+                {
+                    LOGERR( klogErr, rc, "ArgsHandleLogLevel() failed" );
+                }
+            }
         }
     }
     return rc;
diff --git a/tools/refseq-load/context.h b/tools/refseq-load/context.h
index 5f1c0b4..5eb5ccc 100644
--- a/tools/refseq-load/context.h
+++ b/tools/refseq-load/context.h
@@ -42,21 +42,25 @@ extern "C" {
 #include <kapp/args.h>
 
 #define OPTION_DST_PATH          "dst-path"
+#define OPTION_FORCE             "Force"
 #define OPTION_SRC               "src"
 #define OPTION_SCHEMA            "schema"
 #define OPTION_CHUNK_SIZE        "chunk-size"
 #define OPTION_CIRCULAR          "circular"
 #define OPTION_QUIET             "quiet"
+#define OPTION_IFILE             "input-is-file"
 
 #define ALIAS_DST_PATH          "d"
+#define ALIAS_FORCE             "F"
 #define ALIAS_SRC               "f"
 #define ALIAS_SCHEMA            "s"
 #define ALIAS_CHUNK_SIZE        "b"
 #define ALIAS_CIRCULAR          "c"
-#define ALIAS_QUIET             "q"
+#define ALIAS_IFILE             "i"
 
 typedef struct context
 {
+    const char* argv0;
     char *dst_path;
     char *src;
     char *schema;
@@ -64,6 +68,8 @@ typedef struct context
     bool usage_requested;
     bool circular;
     bool quiet;
+    bool force_target;
+    bool input_is_file;
 } context;
 typedef context* p_context;
 
diff --git a/tools/refseq-load/definitions.h b/tools/refseq-load/definitions.h
index faf5507..ee4b2bb 100644
--- a/tools/refseq-load/definitions.h
+++ b/tools/refseq-load/definitions.h
@@ -43,10 +43,6 @@ extern "C" {
 #include <klib/rc.h>
 #endif
 
-#define DISP_RC(rc,err) (void)((rc == 0) ? 0 : LOGERR( klogInt, rc, err ))
-
-#define DISP_RC2(rc,err,succ) \
-    (void)((rc != 0)? 0 : (succ) ? LOGMSG( klogInfo, succ ) : LOGERR( klogInt, rc, err ))
 
 #define DEFAULT_SCHEMA "align/refseq.vschema"
 #define ENTREZ_URL "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&rettype=fasta&id="
diff --git a/tools/refseq-load/refseq-load.c b/tools/refseq-load/refseq-load.c
index deeaec4..c0de17a 100644
--- a/tools/refseq-load/refseq-load.c
+++ b/tools/refseq-load/refseq-load.c
@@ -41,7 +41,6 @@
 #include <sysalloc.h>
 
 #include <curl/curl.h>
-#include <curl/types.h>
 #include <curl/easy.h>
 
 #include <stdlib.h>
@@ -49,19 +48,21 @@
 
 static const char * src_usage[] = { "full url or name of accession", NULL };
 static const char * dst_usage[] = { "name of the table to write", NULL };
+static const char * force_usage[] = { "force target overwrite ", NULL };
 static const char * schema_usage[] = { "name of the schema-file for dst-table", NULL };
 static const char * chunk_size_usage[] = { "size of the seq-chunk (default = 5k)", NULL };
 static const char * circular_usage[] = { "indicate if refseq is circular (ex: mitochondria)", NULL };
-static const char * quiet_usage[] = { "switch off all 'non-error' output", NULL };
+static const char * ifile_usage[] = { "treats input-obj as filename not url", NULL };
 
 OptDef MyOptions[] =
-{
-    { OPTION_SRC, ALIAS_SRC, NULL, src_usage, 1, true, false },
-    { OPTION_DST_PATH, ALIAS_DST_PATH, NULL, dst_usage, 1, true, false },
-    { OPTION_SCHEMA, ALIAS_SCHEMA, NULL, schema_usage, 1, true, false },
-    { OPTION_CHUNK_SIZE, ALIAS_CHUNK_SIZE, NULL, chunk_size_usage, 1, true, false },
-    { OPTION_CIRCULAR, ALIAS_CIRCULAR, NULL, circular_usage, 1, true, true },
-    { OPTION_QUIET, ALIAS_QUIET, NULL, quiet_usage, 1, false, false }
+{                                                                       /* needs_value, required */
+    { OPTION_SRC,           ALIAS_SRC,          NULL, src_usage,        1,  true,   false },
+    { OPTION_DST_PATH,      ALIAS_DST_PATH,     NULL, dst_usage,        1,  true,   false },
+    { OPTION_FORCE,         ALIAS_FORCE,        NULL, force_usage,      1,  false,  false },
+    { OPTION_SCHEMA,        ALIAS_SCHEMA,       NULL, schema_usage,     1,  true,   false },
+    { OPTION_CHUNK_SIZE,    ALIAS_CHUNK_SIZE,   NULL, chunk_size_usage, 1,  true,   false },
+    { OPTION_CIRCULAR,      ALIAS_CIRCULAR,     NULL, circular_usage,   1,  true,   true  },
+    { OPTION_IFILE,         ALIAS_IFILE,        NULL, ifile_usage,      1,  false,  false }
 };
 
 const char UsageDefaultName [] = "refseq-load";
@@ -83,7 +84,7 @@ rc_t CC Usage ( const Args * args )
     rc_t rc;
 
     if (args == NULL)
-        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+        rc = RC (rcExe, rcArgv, rcAccessing, rcSelf, rcNull);
     else
         rc = ArgsProgram (args, &fullpath, &progname);
     if (rc)
@@ -91,18 +92,18 @@ rc_t CC Usage ( const Args * args )
 
     UsageSummary (progname);
 
-    KOutMsg ("Options:\n");
+    KOutMsg ( "Options:\n" );
 
 
     HelpOptionLine ( ALIAS_SRC, OPTION_SRC, "src", src_usage );
     HelpOptionLine ( ALIAS_DST_PATH, OPTION_DST_PATH, "dst", dst_usage );
     HelpOptionLine ( ALIAS_CIRCULAR, OPTION_CIRCULAR, "yes|no", circular_usage);
 
-    OUTMSG (( "\nOptions:\n" ));
+    KOutMsg ( "\nOptions:\n" );
     HelpOptionLine ( ALIAS_SCHEMA, OPTION_SCHEMA, "schema", schema_usage );
     HelpOptionLine ( ALIAS_CHUNK_SIZE, OPTION_CHUNK_SIZE, "chunk-size", chunk_size_usage );
-    HelpOptionLine ( ALIAS_QUIET, OPTION_QUIET, "quiet", quiet_usage );
-    OUTMSG (( "\n" ));
+    HelpOptionLine ( ALIAS_IFILE, OPTION_IFILE, "fileinput", ifile_usage);
+    KOutMsg( "\n" );
 
     HelpOptionsStandard ();
 
@@ -129,6 +130,7 @@ static bool is_full_url( const char * s )
     return strchr(s, '/' ) != NULL;
 }
 
+
 static rc_t build_full_url( char ** s )
 {
     rc_t rc;
@@ -147,6 +149,7 @@ static rc_t build_full_url( char ** s )
     return rc;
 }
 
+
 typedef struct data_ctx
 {
     char *buffer;
@@ -160,6 +163,7 @@ typedef struct data_ctx
 } data_ctx;
 typedef data_ctx* p_data_ctx;
 
+
 static rc_t write_default_uint32( const uint32_t value,
                            enum ETableWriterRefSeq_ColNames which_col,
                            const TableWriterRefSeq* wr )
@@ -169,10 +173,14 @@ static rc_t write_default_uint32( const uint32_t value,
     data.buffer = &value;
     data.elements = 1;
     rc = TableWriterRefSeq_WriteDefault( wr, which_col, &data );
-    DISP_RC( rc, "write_default_uint32:TableWriterRefSeq_WriteDefault() failed" );
+    if ( rc != 0 )
+    {
+        LOGERR( klogErr, rc, "write_default_uint32:TableWriterRefSeq_WriteDefault() failed" );
+    }
     return rc;
 }
 
+
 static rc_t write_default_str( const char * value,
                            enum ETableWriterRefSeq_ColNames which_col,
                            const TableWriterRefSeq* wr )
@@ -182,10 +190,14 @@ static rc_t write_default_str( const char * value,
     data.buffer = (void*)value;
     data.elements = strlen( value );
     rc = TableWriterRefSeq_WriteDefault( wr, which_col, &data );
-    DISP_RC( rc, "write_default_str:TableWriterRefSeq_WriteDefault() failed" );
+    if ( rc != 0 )
+    {
+        LOGERR( klogErr, rc, "write_default_str:TableWriterRefSeq_WriteDefault() failed" );
+    }
     return rc;
 }
 
+
 static rc_t write_default_bool( const bool value,
                                 enum ETableWriterRefSeq_ColNames which_col,
                                 const TableWriterRefSeq* wr )
@@ -195,10 +207,14 @@ static rc_t write_default_bool( const bool value,
     data.buffer = &value;
     data.elements = 1;
     rc = TableWriterRefSeq_WriteDefault( wr, which_col, &data );
-    DISP_RC( rc, "write_default_bool:TableWriterRefSeq_WriteDefault() failed" );
+    if ( rc != 0 )
+    {
+        LOGERR( klogErr, rc, "write_default_bool:TableWriterRefSeq_WriteDefault() failed" );
+    }
     return rc;
 }
 
+
 static void write_curl_data( p_data_ctx dctx )
 {
     TableWriterRefSeqData data;
@@ -206,10 +222,16 @@ static void write_curl_data( p_data_ctx dctx )
     data.read.buffer = dctx->buffer;
     data.read.elements = dctx->data_count;
     dctx->rc = TableWriterRefSeq_Write( dctx->wr, &data, &dctx->rowid );
-    DISP_RC( dctx->rc, "handle_curl_byte:TableWriterRefSeq_Write() failed" );
-    if ( dctx->rowid % 100 == 0 )
-    if ( !dctx->quiet )
-        OUTMSG (( "row %ld\r", dctx->rowid ));
+    if ( dctx->rc != 0 )
+    {
+        LOGERR( klogErr, dctx->rc, "handle_curl_byte:TableWriterRefSeq_Write() failed" );
+    }
+
+    if ( ( !dctx->quiet ) && ( dctx->rowid % 100 == 0 ) )
+    {
+        KOutMsg( "row %ld\r", dctx->rowid );
+    }
+
     dctx->data_count = 0;
 }
 
@@ -248,15 +270,16 @@ static bool handle_first_line( p_data_ctx dctx )
         *space = 0;
     }
     if ( !dctx->quiet )
-        OUTMSG(( "SEQ_ID: %s\n", s ));
+        KOutMsg( "SEQ_ID: %s\n", s );
     write_default_str( s, ewrefseq_cn_SEQ_ID, dctx->wr );
     space++;
     if ( !dctx->quiet )
-        OUTMSG(( "DEF_LINE: %s\n", space ));
+        KOutMsg( "DEF_LINE: %s\n", space );
     write_default_str( space, ewrefseq_cn_DEF_LINE, dctx->wr );
     return true;
 }
 
+
 static void handle_curl_byte( const char c, p_data_ctx dctx )
 {
     if ( dctx->first_line )
@@ -266,8 +289,8 @@ static void handle_curl_byte( const char c, p_data_ctx dctx )
             dctx->buffer[ dctx->data_count++ ] = 0;
             if ( !handle_first_line( dctx ) )
             {
-                dctx->rc = RC ( rcApp, rcBuffer, rcAccessing, rcData, rcInvalid );
-                DISP_RC( dctx->rc, "server returned invalid data, possibly wrong accession/url" );
+                dctx->rc = RC(rcExe, rcBuffer, rcAccessing, rcData, rcInvalid );
+                LOGERR( klogErr, dctx->rc, "server returned invalid data, possibly wrong accession/url" );
             }
             dctx->data_count = 0;
             dctx->first_line = false;
@@ -302,7 +325,9 @@ static size_t CC on_curl_data( void *ptr, size_t size, size_t nmemb, void *data
         /* to be able to cancel the loop by signal */
         dctx->rc = Quitting();
         for ( idx = 0; idx < given_bytes && dctx->rc == 0; ++idx )
+        {
             handle_curl_byte( ((char *)ptr)[idx], dctx );
+        }
 
         /* tell curl via return value to stop downloading,
            if we encountered an error or quit */
@@ -313,6 +338,43 @@ static size_t CC on_curl_data( void *ptr, size_t size, size_t nmemb, void *data
 }
 
 
+static rc_t init_data_context( const p_context ctx, const TableWriterRefSeq* wr, data_ctx * dctx )
+{
+    rc_t rc = 0;
+    dctx->buff_size = ctx->chunk_size;
+    dctx->data_count = 0;
+    dctx->first_line = true;
+    dctx->quiet = ctx->quiet;
+    dctx->wr = wr;
+    dctx->rc = 0;
+    dctx->rowid = 0;
+    dctx->byte_count = 0;
+    dctx->buffer = malloc( dctx->buff_size );
+    if ( dctx->buffer == NULL )
+    {
+        rc = RC( rcExe, rcFile, rcConstructing, rcMemory, rcExhausted );
+        LOGERR( klogErr, rc, "creating receive-buffer failed" );
+    }
+    return rc;
+}
+
+
+static void finish_data_context( const p_context ctx, data_ctx * dctx )
+{
+    /* write the remainder of data that is eventually left 
+      in the buffer by the callback */
+    if ( dctx->data_count > 0 )
+    {
+        /* returns the rc-code in dctx.rc, this function will return this code at the end */
+        write_curl_data( dctx );
+    }
+
+    if ( !ctx->quiet )
+        KOutMsg( "%ld bases\n", dctx->byte_count );
+    free( dctx->buffer );
+}
+
+
 static rc_t perform_curl_load( const p_context ctx, const TableWriterRefSeq* wr )
 {
     CURL *curl_handle;
@@ -324,29 +386,20 @@ static rc_t perform_curl_load( const p_context ctx, const TableWriterRefSeq* wr
     if ( curl_handle == NULL )
     {
         rc = RC( rcExe, rcFile, rcConstructing, rcData, rcInvalid );
-        DISP_RC( rc, "cur_easy_init() failed" );
+        LOGERR( klogErr, rc, "cur_easy_init() failed" );
         return rc;
     }
 
 #ifdef _DEBUGGING
-    if( KDbgTestModConds(DBG_APP, DBG_FLAG_ANY) ) {
+    if( KDbgTestModConds( DBG_APP, DBG_FLAG_ANY ) )
+    {
         curl_easy_setopt( curl_handle, CURLOPT_VERBOSE , 1 );
     }
 #endif
 
-    dctx.buff_size = ctx->chunk_size;
-    dctx.data_count = 0;
-    dctx.first_line = true;
-    dctx.quiet = ctx->quiet;
-    dctx.wr = wr;
-    dctx.rc = 0;
-    dctx.rowid = 0;
-    dctx.byte_count = 0;
-    dctx.buffer = malloc( dctx.buff_size );
-    if ( dctx.buffer == NULL )
+    rc = init_data_context( ctx, wr, &dctx );
+    if ( rc != 0 )
     {
-        rc = RC( rcExe, rcFile, rcConstructing, rcMemory, rcExhausted );
-        DISP_RC( rc, "creating receive-buffer failed" );
         curl_easy_cleanup( curl_handle );
         return rc;
     }
@@ -355,7 +408,7 @@ static rc_t perform_curl_load( const p_context ctx, const TableWriterRefSeq* wr
     if ( rcc != CURLE_OK )
     {
         rc = RC( rcExe, rcFile, rcConstructing, rcParam, rcInvalid );
-        DISP_RC( rc, "curl_easy_setopt(callback) failed" );
+        LOGERR( klogErr, rc, "curl_easy_setopt(callback) failed" );
         free( dctx.buffer );
         curl_easy_cleanup( curl_handle );
         return rc;
@@ -365,7 +418,7 @@ static rc_t perform_curl_load( const p_context ctx, const TableWriterRefSeq* wr
     if ( rcc != CURLE_OK )
     {
         rc = RC( rcExe, rcFile, rcConstructing, rcParam, rcInvalid );
-        DISP_RC( rc, "curl_easy_setopt(context) failed" );
+        LOGERR( klogErr, rc, "curl_easy_setopt(context) failed" );
         free( dctx.buffer );
         curl_easy_cleanup( curl_handle );
         return rc;
@@ -375,7 +428,7 @@ static rc_t perform_curl_load( const p_context ctx, const TableWriterRefSeq* wr
     if ( rcc != CURLE_OK )
     {
         rc = RC( rcExe, rcFile, rcConstructing, rcParam, rcInvalid );
-        DISP_RC( rc, "curl_easy_setopt(uri) failed" );
+        LOGERR( klogErr, rc, "curl_easy_setopt(uri) failed" );
         free( dctx.buffer );
         curl_easy_cleanup( curl_handle );
         return rc;
@@ -385,7 +438,7 @@ static rc_t perform_curl_load( const p_context ctx, const TableWriterRefSeq* wr
     if ( rcc != CURLE_OK )
     {
         rc = RC( rcExe, rcFile, rcConstructing, rcParam, rcInvalid );
-        DISP_RC( rc, "curl_easy_setopt(CURLOPT_LOW_SPEED_LIMIT) to 1000 failed" );
+        LOGERR( klogErr, rc, "curl_easy_setopt(CURLOPT_LOW_SPEED_LIMIT) to 1000 failed" );
         free( dctx.buffer );
         curl_easy_cleanup( curl_handle );
         return rc;
@@ -395,7 +448,7 @@ static rc_t perform_curl_load( const p_context ctx, const TableWriterRefSeq* wr
     if ( rcc != CURLE_OK )
     {
         rc = RC( rcExe, rcFile, rcConstructing, rcParam, rcInvalid );
-        DISP_RC( rc, "curl_easy_setopt(CURLOPT_LOW_SPEED_TIME) to 5 failed" );
+        LOGERR( klogErr, rc, "curl_easy_setopt(CURLOPT_LOW_SPEED_TIME) to 5 failed" );
         free( dctx.buffer );
         curl_easy_cleanup( curl_handle );
         return rc;
@@ -405,20 +458,10 @@ static rc_t perform_curl_load( const p_context ctx, const TableWriterRefSeq* wr
     if ( rcc != CURLE_OK )
     {
         rc = RC( rcExe, rcFile, rcConstructing, rcParam, rcInvalid );
-        DISP_RC( rc, "curl_easy_perform() failed" );
-    }
-
-    /* write the remainder of data that is eventually left 
-      in the buffer by the callback */
-    if ( dctx.data_count > 0 )
-    {
-        /* returns the rc-code in dctx.rc, this function will return this code at the end */
-        write_curl_data( &dctx );
+        LOGERR( klogErr, rc, "curl_easy_perform() failed" );
     }
 
-    if ( !ctx->quiet )
-        OUTMSG (( "%ld bases\n", dctx.byte_count ));
-    free( dctx.buffer );
+    finish_data_context( ctx, &dctx );
     curl_easy_cleanup( curl_handle );
     if ( dctx.rc == 0 )
     {
@@ -428,38 +471,129 @@ static rc_t perform_curl_load( const p_context ctx, const TableWriterRefSeq* wr
 }
 
 
-static rc_t perform_load( const p_context ctx, VDBManager *mgr )
+static rc_t perform_file_load( const p_context ctx, KDirectory *dir, const TableWriterRefSeq* wr )
 {
-    const TableWriterRefSeq* wr;
+    rc_t rc = 0;
+    uint32_t pt = KDirectoryPathType ( dir, "%s", ctx->src );
+    if ( pt != kptFile )
+    {
+        rc = RC( rcExe, rcFile, rcConstructing, rcParam, rcInvalid );
+        LOGERR( klogErr, rc, "input-file not found" );
+    }
+    else
+    {
+        const KFile * f;
+        rc = KDirectoryOpenFileRead ( dir, &f, "%s", ctx->src );
+        if ( rc != 0 )
+        {
+            LOGERR( klogErr, rc, "cannot open input-file for read" );
+        }
+        else
+        {
+            data_ctx dctx;
+            rc = init_data_context( ctx, wr, &dctx );
+            if ( rc == 0 )
+            {
+                uint64_t pos = 0;
+                bool done = false;
+                while ( !done )
+                {
+                    size_t num_read;
+                    char buffer[ 8192 ];
+                    rc = KFileReadAll ( f, pos, buffer, sizeof buffer, &num_read );
+                    if ( rc != 0 )
+                    {
+                        PLOGERR( klogErr, ( klogErr, rc, "$(path) at $(pos)", "path=%s,pos=%lu", ctx->src, pos ) );
+                        done = true;
+                    }
+                    else
+                    {
+                        on_curl_data( buffer, 1, num_read, &dctx );
+
+                        if ( num_read < sizeof( buffer ) )
+                            done = true;
+                        else
+                            pos += num_read;
+                    }
+                }
+                finish_data_context( ctx, &dctx );
+                if ( dctx.rc == 0 )
+                {
+                    dctx.rc = rc;
+                }
+            }
+            KFileRelease( f );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t perform_load( const p_context ctx, KDirectory *dir, VDBManager *mgr )
+{
+    const TableWriterRefSeq * wr;
 
     rc_t rc = TableWriterRefSeq_Make( &wr, mgr, ctx->schema, ctx->dst_path, 0 );
-    DISP_RC( rc, "perform_load:TableWriterRefSeq_Make() failed" );
-    if ( rc == 0 )
+    if ( rc != 0 )
     {
+        LOGERR( klogErr, rc, "perform_load:TableWriterRefSeq_Make() failed" );
+    }
+    else
+    {
+        rc_t rc1;
         uint64_t rows;
 
         if ( ctx->chunk_size != TableWriterRefSeq_MAX_SEQ_LEN )
         {
             rc = write_default_uint32( ctx->chunk_size,
                                        ewrefseq_cn_MAX_SEQ_LEN, wr );
-            DISP_RC( rc, "perform_load:write_default_uint32() failed" );
+            if ( rc != 0 )
+            {
+                LOGERR( klogErr, rc, "perform_load:write_default_uint32() failed" );
+            }
         }
 
         if ( rc == 0 )
         {
             rc = write_default_bool( ctx->circular, ewrefseq_cn_CIRCULAR, wr );
-            DISP_RC( rc, "perform_load:write_default_bool() failed" );
+            if ( rc != 0 )
+            {
+                LOGERR( klogErr, rc, "perform_load:write_default_bool() failed" );
+            }
+        }
+
+        if ( rc == 0 )
+        {
+            if ( ctx->input_is_file )
+            {
+                rc = perform_file_load( ctx, dir, wr ); /* <====================== */
+                if ( rc != 0 )
+                {
+                    LOGERR( klogErr, rc, "perform_load:perform_file_load() failed" );
+                }
+            }
+            else
+            {
+                rc = perform_curl_load( ctx, wr ); /* <====================== */
+                if ( rc != 0 )
+                {
+                    LOGERR( klogErr, rc, "perform_load:perform_curl_load() failed" );
+                }
+            }
         }
 
+        rc1 = TableWriterRefSeq_Whack( wr, rc == 0, &rows, ctx->argv0, __DATE__, "RefSeq", REFSEQ_LOAD_VERS );
         if ( rc == 0 )
         {
-            rc = perform_curl_load( ctx, wr );
-            DISP_RC( rc, "perform_load:perform_curl_load() failed" );
+            if ( rc1 != 0 )
+            {
+                LOGERR( klogErr, rc1, "perform_load:TableWriterRefSeq_Whack() failed" );
+            }
+            rc = rc1;
         }
 
-        TableWriterRefSeq_Whack( wr, rc == 0, &rows );
         if ( !ctx->quiet )
-            OUTMSG (( "%lu rows were written\n", rows ));
+            KOutMsg( "%lu rows were written\n", rows );
     }
     return rc;
 }
@@ -469,23 +603,38 @@ static rc_t check_if_schema_exists( KDirectory * dir, const char * schema_name )
 {
     KConfig * cfg;
     rc_t rc = KConfigMake ( &cfg, NULL );
-    if ( rc == 0 )
+    if ( rc != 0 )
+    {
+        LOGERR( klogErr, rc, "check_if_schema_exists:KConfigMake() failed" );
+    }
+    else
     {
         const KConfigNode *node;
         rc = KConfigOpenNodeRead ( cfg, &node, "vdb/schema/paths" );
-        if ( rc ==  0 )
+        if ( rc !=  0 )
+        {
+            LOGERR( klogErr, rc, "check_if_schema_exists:KConfigOpenNodeRead( 'vdb/schema/paths' ) failed" );
+        }
+        else
         {
             char buffer[ 1024 ];
             size_t num_read;
             rc = KConfigNodeRead ( node, 0, buffer, sizeof buffer, &num_read, NULL );
-            if ( rc ==  0 )
+            if ( rc != 0 )
+            {
+                LOGERR( klogErr, rc, "check_if_schema_exists:KConfigNodeRead() failed" );
+            }
+            else
             {
                 uint32_t path_type;
                 buffer[ num_read ] = 0;
                 path_type = KDirectoryPathType ( dir, "%s/%s", buffer, schema_name );
                 if ( ( path_type & kptFile ) == 0 )
+                {
                     rc = RC( rcExe, rcFile, rcConstructing, rcParam, rcInvalid );
+                }
             }
+            KConfigNodeRelease ( node );
         }
         KConfigRelease ( cfg );
     }
@@ -496,42 +645,49 @@ static rc_t check_if_schema_exists( KDirectory * dir, const char * schema_name )
 static rc_t prepare_load( KDirectory * dir, const p_context ctx )
 {
     rc_t rc = 0;
-    if ( !is_full_url( ctx->src ) )
-    {
-        if ( !ctx->quiet )
-            OUTMSG (( "src is not a full url, assuming it is a accession\n" ));
-        rc = build_full_url( &ctx->src );
-        DISP_RC( rc, "ref_seq_load_main:build_full_url() failed" );
-    }
-    if ( rc != 0 )
-    {
-        return rc;
-    }
-    if ( ctx->schema == NULL )
-    {
-        ctx->schema = string_dup_measure ( DEFAULT_SCHEMA, NULL );
-    }
-    if ( ctx->chunk_size == 0 )
-    {
-        ctx->chunk_size = TableWriterRefSeq_MAX_SEQ_LEN;
-    }
 
-    rc = check_if_schema_exists( dir, ctx->schema );
-    DISP_RC( rc, "check_if_schema_exists() failed" );
-    if ( rc != 0 )
+    if ( !ctx->input_is_file )
     {
-        return rc;
+        /* if the input is not specified as a file, we check for url and correctness */
+        if ( !is_full_url( ctx->src ) )
+        {
+            if ( !ctx->quiet )
+                KOutMsg( "src is not a full url, assuming it is a accession\n" );
+            rc = build_full_url( &ctx->src );
+            if ( rc != 0 )
+            {
+                LOGERR( klogErr, rc, "prepare_load:build_full_url() failed" );
+            }
+        }
     }
 
-    if ( !ctx->quiet )
+    /* and then we look if the given schema does exist */
+    if ( rc == 0 )
     {
-        OUTMSG (( "src        = '%s'\n", ctx->src ));
-        OUTMSG (( "dst        = '%s'\n", ctx->dst_path ));
-        OUTMSG (( "schema     = '%s'\n", ctx->schema ));
-        OUTMSG (( "chunk-size = %u\n", ctx->chunk_size ));
-    }
+        if ( ctx->schema == NULL )
+        {
+            ctx->schema = string_dup_measure ( DEFAULT_SCHEMA, NULL );
+        }
+        if ( ctx->chunk_size == 0 )
+        {
+            ctx->chunk_size = TableWriterRefSeq_MAX_SEQ_LEN;
+        }
 
-    return 0;
+        rc = check_if_schema_exists( dir, ctx->schema );
+        if ( rc != 0 )
+        {
+            LOGERR( klogErr, rc, "check_if_schema_exists() failed" );
+        }
+        else if ( !ctx->quiet )
+        {
+            KOutMsg( "src        = '%s'\n", ctx->src );
+            KOutMsg( "dst        = '%s'\n", ctx->dst_path );
+            KOutMsg( "schema     = '%s'\n", ctx->schema );
+            KOutMsg( "chunk-size = %u\n",   ctx->chunk_size );
+            KOutMsg( "srs is file= %s\n",   ctx->input_is_file ? "yes" : "no" );
+        }
+    }
+    return rc;
 }
 
 
@@ -540,35 +696,71 @@ static rc_t remove_path( KDirectory * dir, const char * path, bool quiet )
     rc_t rc;
 
     if ( !quiet )
+    {
         PLOGMSG( klogInfo, ( klogInfo, "removing '$(path)'", "path=%s", path ));
+    }
     rc = KDirectoryRemove ( dir, true, path );
-    DISP_RC( rc, "remove_path:KDirectoryRemove() failed" );
+    if ( rc != 0 )
+    {
+        LOGERR( klogErr, rc, "remove_path:KDirectoryRemove() failed" );
+    }
     return rc;
 }
 
 
 static rc_t ref_seq_load_main( const p_context ctx )
 {
-    rc_t rc;
     KDirectory *dir;
-
-    rc = KDirectoryNativeDir( &dir );
-    DISP_RC( rc, "ref_seq_load_main:KDirectoryNativeDir() failed" );
-    if ( rc == 0 )
+    rc_t rc = KDirectoryNativeDir( &dir );
+    if ( rc != 0 )
+    {
+        LOGERR( klogErr, rc, "ref_seq_load_main:KDirectoryNativeDir() failed" );
+    }
+    else
     {
         VDBManager *mgr;
         rc = VDBManagerMakeUpdate ( &mgr, dir );
-        DISP_RC( rc, "ref_seq_load_main:VDBManagerMakeRead() failed" );
-        if ( rc == 0 )
+        if ( rc != 0 )
+        {
+            LOGERR( klogErr, rc, "ref_seq_load_main:VDBManagerMakeRead() failed" );
+        }
+        else
         {
             rc = prepare_load( dir, ctx );
-            DISP_RC( rc, "ref_seq_load_main:prepare_load() failed" );
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "ref_seq_load_main:prepare_load() failed" );
+            }
+            else
+            {
+                char tblpath[ 4096 ];
+                rc = KDirectoryResolvePath( dir, true, tblpath, sizeof tblpath, ctx->dst_path );
+                if ( rc != 0 )
+                {
+                    LOGERR( klogErr, rc, "ref_seq_load_main:KDirectoryResolvePath() failed" );
+                }
+                else
+                {
+                    KPathType type = VDBManagerPathType( mgr, tblpath );
+                    if ( type != kptNotFound )
+                    {
+                        rc = RC( rcExe, rcDatabase, rcCreating, rcFile, rcExists );
+                        PLOGERR( klogErr, ( klogErr, rc, "$(path)", "path=%s", tblpath ) );
+                    }
+                }
+            }
+
             if ( rc == 0 )
-                rc = perform_load( ctx, mgr );
+            {
+                rc = perform_load( ctx, dir, mgr ); /* <====================== */
+                if ( rc != 0 )
+                {
+                    remove_path( dir, ctx->dst_path, ctx->quiet );
+                }
+            }
+
             VDBManagerRelease( mgr );
         }
-        if ( rc != 0 )
-            remove_path( dir, ctx->dst_path, ctx->quiet );
         KDirectoryRelease( dir );
     }
     return rc;
@@ -587,37 +779,41 @@ static rc_t ref_seq_load_main( const p_context ctx )
 rc_t CC KMain ( int argc, char *argv [] )
 {
     Args * args;
-    context *ctx;
-
     rc_t rc = ArgsMakeAndHandle ( &args, argc, argv, 1,
-                             MyOptions, sizeof MyOptions / sizeof ( OptDef ) );
-    DISP_RC( rc, "KMain:ArgsMakeAndHandle() failed" );
-    if ( rc != 0 ) return rc;
-    
-    KLogHandlerSetStdErr();
-    rc = context_init( &ctx );
-    DISP_RC( rc, "KMain:copy_context_init() failed" );
+                                  MyOptions, sizeof MyOptions / sizeof ( OptDef ) );
     if ( rc != 0 )
     {
-        ArgsWhack ( args );
-        return rc;
+        LOGERR( klogErr, rc, "ArgsMakeAndHandle() failed" );
     }
-    
-    rc = context_capture_arguments_and_options( args, ctx );
-    if ( rc != 0 )
+    else
     {
-        MiniUsage( args );
-        context_destroy( ctx );
-        ArgsWhack ( args );
-        return rc;
-    }
+        context *ctx;
 
-    if ( ctx->usage_requested )
-        MiniUsage( args );
-    else
-        rc = ref_seq_load_main( ctx );
+        KLogHandlerSetStdErr();
+        rc = context_init( &ctx );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "KMain:context_init() failed" );
 
-    context_destroy( ctx );
-    ArgsWhack (args);
+        }
+        else
+        {
+            rc = context_capture_arguments_and_options( args, ctx );
+            if ( rc != 0 )
+            {
+                MiniUsage( args );
+                if ( argc < 2 ) rc = 0;
+            }
+            else
+            {
+                if ( ctx->usage_requested )
+                    MiniUsage( args );
+                else
+                    rc = ref_seq_load_main( ctx ); /* <====================== */
+            }
+            context_destroy( ctx );
+        }
+        ArgsWhack ( args );
+    }
     return rc;
 }
diff --git a/tools/refseq-load/refseq-load.vers b/tools/refseq-load/refseq-load.vers
index 63a1a1c..f90b1af 100644
--- a/tools/refseq-load/refseq-load.vers
+++ b/tools/refseq-load/refseq-load.vers
@@ -1 +1 @@
-2.1.9
+2.3.2
diff --git a/tools/refseq-load/refseq-load.vers.h b/tools/refseq-load/refseq-load.vers.h
deleted file mode 100644
index d3401fe..0000000
--- a/tools/refseq-load/refseq-load.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define REFSEQ_LOAD_VERS 0x02010005
diff --git a/tools/sam-dump/#Makefile# b/tools/sam-dump/#Makefile#
new file mode 100644
index 0000000..4c1363e
--- /dev/null
+++ b/tools/sam-dump/#Makefile#
@@ -0,0 +1,118 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/sam-dump
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+	sam-dump
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+	@ $(MAKE_CMD) $(TARGDIR)/std
+
+$(ALL_TOOLS): vers-includes
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: \
+	$(addsuffix _tag,$(ALL_TOOLS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+
+#-------------------------------------------------------------------------------
+# sam-dump
+#
+SAMDUMP_SRC = \
+	sam-dump
+
+SAMDUMP_OBJ = \
+	$(addsuffix .$(OBJX),$(SAMDUMP_SRC))
+
+SAMDUMP_LIB = \
+	-lkapp \
+	-ssrapath \
+	-lalign-reader \
+	-daxf \
+	-lsraschema \
+	-dsraxf \
+	-dvxf \
+	-lvdb \
+	-lkdb \
+	-lvfs \
+	-lkrypto \
+	-lkfg \
+	-lkfs \
+	-lksrch \
+	-lklib \
+	-lm
+
+ifdef NCBI
+CFLAGS += -DNCBI
+endif
+
+$(BINDIR)/sam-dump: $(SAMDUMP_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(SAMDUMP_LIB)
+
+samdump_tag:
+	@ $(TOP)/build/tag-module.sh $(MODULE) samdump $(SAMDUMP_OBJ)
diff --git a/tools/sam-dump/Makefile b/tools/sam-dump/Makefile
index 4fda8fe..8d1d212 100644
--- a/tools/sam-dump/Makefile
+++ b/tools/sam-dump/Makefile
@@ -25,7 +25,7 @@
 
 default: std
 
-TOP ?= $(abspath ../..)
+TOP ?= $(shell ../../build/abspath.sh ../..)
 MODULE = tools/sam-dump
 
 include $(TOP)/build/Makefile.env
@@ -42,15 +42,13 @@ ALL_TOOLS = \
 #-------------------------------------------------------------------------------
 # outer targets
 #
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
-all std: makedirs vers-includes
+all std: vers-includes
 	@ $(MAKE_CMD) $(TARGDIR)/std
 
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
 	@ $(MAKE_CMD) $(BINDIR)/$@
 
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
 
 #-------------------------------------------------------------------------------
 # std
@@ -61,19 +59,18 @@ $(TARGDIR)/std: \
 .PHONY: $(TARGDIR)/std
 
 #-------------------------------------------------------------------------------
-# clean
+# vers-includes
 #
-clean: stdclean
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
 
-.PHONY: clean
+.PHONY: $(TARGDIR)/vers-includes
 
 #-------------------------------------------------------------------------------
-# tag
+# clean
 #
-tag: \
-	$(addsuffix _tag,$(ALL_TOOLS))
+clean: stdclean
 
-.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+.PHONY: clean
 
 #-------------------------------------------------------------------------------
 # sam-dump
@@ -86,25 +83,20 @@ SAMDUMP_OBJ = \
 
 SAMDUMP_LIB = \
 	-lkapp \
-	-ssrapath \
 	-lalign-reader \
-	-daxf \
+	$(READONLY_SCHEMA_LIBS) \
 	-lsraschema \
-	-dsraxf \
-	-dvxf \
 	-lvdb \
 	-lkdb \
+	-lvfs \
+	-ssrapath \
+	-lkrypto \
 	-lkfg \
 	-lkfs \
 	-lksrch \
+	-lkproc \
 	-lklib \
-	-ldl \
-	-lz \
-	-lbz2 \
 	-lm
 
 $(BINDIR)/sam-dump: $(SAMDUMP_OBJ)
 	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(SAMDUMP_LIB)
-
-samdump_tag:
-	@ $(TOP)/build/tag-module.sh $(MODULE) samdump $(SAMDUMP_OBJ)
diff --git a/tools/sam-dump/sam-dump.c b/tools/sam-dump/sam-dump.c
index f359554..682f264 100644
--- a/tools/sam-dump/sam-dump.c
+++ b/tools/sam-dump/sam-dump.c
@@ -23,29 +23,41 @@
 * ===========================================================================
 *
 */
+#include <klib/report.h>
 #include <klib/container.h>
 #include <klib/log.h>
 #include <klib/out.h>
 #include <klib/status.h>
 #include <klib/rc.h>
+#include <klib/vector.h>
+#include <klib/printf.h>
+#include <klib/data-buffer.h>
+#include <vfs/path.h>
+#include <vfs/path-priv.h>
 #include <kfs/file.h>
 #include <kfs/buffile.h>
 #include <kfs/gzip.h>
 #include <kfs/bzip.h>
-#include <kdb/manager.h>
 #include <kdb/meta.h>
 #include <kdb/namelist.h>
 #include <kapp/main.h>
 #include <kapp/args.h>
 #include <insdc/insdc.h>
 #include <insdc/sra.h>
+#include <vdb/report.h>
 #include <vdb/manager.h>
 #include <vdb/database.h>
 #include <vdb/table.h>
 #include <vdb/cursor.h>
 #include <vdb/vdb-priv.h>
 #include <vdb/schema.h>
+#include <vdb/dependencies.h>
 #include <sra/sraschema.h>
+#include <sra/srapath.h>
+#include <align/dna-reverse-cmpl.h>
+#include <align/iterator.h>
+#include <align/reference.h>
+#include <align/quality-quantizer.h>
 
 #include <kfs/directory.h>
 #include <os-native.h>
@@ -53,14 +65,28 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <stdint.h>
+#include <limits.h>
 #include <string.h>
+#include <strtol.h>
 #include <ctype.h>
 #include <assert.h>
 
 #include "debug.h"
 #include "sam-dump.vers.h"
 
-typedef struct TAlignedRegion_struct {
+#if _ARCH_BITS == 64
+#define USE_MATE_CACHE 1
+#define CURSOR_CACHE (4 * 1024 * 1024 * 1024UL)
+#else
+#define USE_MATE_CACHE 0
+#define CURSOR_CACHE (256 * 1024 * 1024)
+#endif
+
+
+
+typedef struct TAlignedRegion_struct
+{
     char name[1024];
     struct {
         INSDC_coord_zero from;
@@ -68,18 +94,29 @@ typedef struct TAlignedRegion_struct {
     } r[10240];
     int rq;
     INSDC_coord_zero max_to;
+    INSDC_coord_zero min_from;
+    int printed;
 } TAlignedRegion;
 
-typedef struct TMatepairDistance_struct {
-    uint64_t from;
-    uint64_t to;
+
+typedef struct TMatepairDistance_struct
+{
+    uint32_t from;
+    uint32_t to;
 } TMatepairDistance;
 
-typedef struct SParam_struct {
-    const char* accession;
-    const char* path;
-    bool use_seqid;
+
+struct params_s
+{
+    /* which outputs are on */
+    bool primaries;
+    bool secondaries;
     bool unaligned;
+    bool cg_evidence;
+    bool cg_ev_dnb;
+    bool cg_sam;
+    
+    bool use_seqid;
     bool long_cigar;
     bool reheader;
     bool noheader;
@@ -87,7 +124,16 @@ typedef struct SParam_struct {
     bool fasta;
     bool fastq;
     bool spot_group_in_name;
-    const char* name_prefix;
+    bool cg_friendly_names;
+    bool reverse_unaligned;
+    bool unaligned_spots;
+    
+    bool output_gzip;
+    bool output_bz2;
+    
+    bool xi;
+    int cg_style; /* 0: raw; 1: with B's; 2: without B's, fixed up SEQ/QUAL; */
+    char const *name_prefix;
     /* region filter data */
     TAlignedRegion* region;
     uint32_t region_qty;
@@ -95,668 +141,1663 @@ typedef struct SParam_struct {
     bool mp_dist_unknown;
     TMatepairDistance* mp_dist;
     uint32_t mp_dist_qty;
-} SParam;
-
-typedef union UData_union {
-    const void* v;
-    const uint32_t* u32;
-    const int32_t* i32;
-    const int64_t* i64;
-    const uint8_t* u8;
-    const char* str;
+    uint32_t test_rows;
+
+    /* mate info cache */
+    int64_t mate_row_gap_cachable;
+    
+    char const **comments;
+    
+    bool quantizeQual;
+    uint8_t qualQuant[256];
+    uint8_t qualQuantSingle; /*** the quality is quantized - single value, no need to retrieve **/
+};
+
+
+struct params_s const *param;
+ReferenceList const *gRefList;
+
+
+typedef union UData_union
+{
+    void const *v;
+    uint32_t const *u32;
+    int32_t const *i32;
+    int64_t const *i64;
+    uint64_t const *u64;
+    uint8_t const *u8;
+    char const *str;
+    bool const *tf;
     INSDC_coord_one* coord1;
     INSDC_coord_zero* coord0;
     INSDC_coord_len* coord_len;
     INSDC_coord_val* coord_val;
     INSDC_SRA_xread_type* read_type;
+    INSDC_SRA_read_filter* read_filter;
 } UData;
 
-typedef struct SCol_struct {
-    const char* name;
+
+typedef struct SCol_struct
+{
+    char const *name;
     uint32_t idx;
     UData base;
     uint32_t len;
     bool optional;
 } SCol;
 
-static
-rc_t OpenVTable(const VDatabase* db, const VTable** tbl, const char *name, bool optional)
+
+typedef struct STable_struct
 {
-    rc_t rc = VDatabaseOpenTableRead(db, tbl, name);
-    if( GetRCState(rc) == rcNotFound && optional ) {
-        rc = 0;
-        *tbl = NULL;
+    char const *name;
+    VTable const *vtbl;
+} STable;
+
+
+typedef struct SCursCache_struct
+{
+    KVector* cache;
+    KVector* cache_unaligned_mate; /* keeps unaligned-mate for a half-aligned spots */
+    uint32_t sam_flags;
+    INSDC_coord_zero pnext;
+    int32_t tlen;
+    ReferenceObj const *ref;
+    /* cache stats */
+    uint64_t projected;
+    uint64_t added;
+    uint64_t hit;
+    uint64_t bad;
+} SCursCache;
+
+
+typedef struct SCurs_struct
+{
+    STable const *tbl;
+    VCursor const *vcurs;
+    SCursCache* cache;
+    SCursCache cache_local;
+    uint64_t col_reads_qty;
+} SCurs;
+
+enum eDSTableType
+{
+    edstt_NotSpecified,
+    edstt_Reference,
+    edstt_Sequence,
+    edstt_PrimaryAlignment,
+    edstt_SecondaryAlignment,
+    edstt_EvidenceAlignment,
+    edstt_EvidenceInterval
+};
+
+
+typedef struct DataSource_s {
+    STable tbl;
+    SCurs curs;
+    SCol *cols;
+    enum eDSTableType type;
+} DataSource;
+
+
+#define DATASOURCE_INIT(O, NAME) do { memset(&O, 0, sizeof(O)); O.tbl.name = NAME; O.curs.tbl = &O.tbl; } while(0)
+
+
+typedef struct SAM_dump_ctx_s
+{
+    VDatabase const *db;
+    char const *fullPath;
+    char const *accession;
+    char const *readGroup;
+    
+    DataSource ref;
+    DataSource pri;
+    DataSource sec;
+    DataSource evi;
+    DataSource eva;
+    DataSource seq;
+} SAM_dump_ctx_t;
+
+
+enum ealg_col
+{
+    alg_SEQ_SPOT_ID = 0,
+    alg_SEQ_NAME,
+    alg_MAPQ,
+    alg_CIGAR,
+    alg_READ,
+    alg_READ_START,
+    alg_READ_LEN,
+    alg_CIGAR_LEN,
+    alg_SAM_QUALITY,
+    alg_SPOT_GROUP,
+    alg_SEQ_SPOT_GROUP,
+    alg_SEQ_READ_ID,
+    alg_REVERSED,
+    alg_ALIGNMENT_COUNT,
+    alg_EDIT_DISTANCE,
+    alg_READ_FILTER,
+    alg_MATE_ALIGN_ID,
+    alg_MATE_REF_NAME,
+    alg_SAM_FLAGS,
+    alg_REF_START,
+    alg_MATE_REF_POS,
+    alg_ALIGN_GROUP,
+    alg_EVIDENCE_ALIGNMENT_IDS,
+    alg_REF_PLOIDY,
+    alg_REF_ID,
+    alg_MATE_REF_ID,
+    alg_HAS_MISMATCH,
+    alg_REGION_FILTER,
+    alg_REF_NAME = alg_REGION_FILTER,
+    alg_REF_SEQ_ID,
+    alg_REF_POS,
+    alg_REF_LEN,
+    alg_DISTANCE_FILTER,
+    alg_TEMPLATE_LEN = alg_DISTANCE_FILTER,
+    alg_CG_TAGS_STR
+};
+
+
+SCol const g_alg_col_tmpl[] =
+{
+    { "SEQ_SPOT_ID", 0, {NULL}, 0, true },
+    { "SEQ_NAME", 0, {NULL}, 0, false },
+    { "MAPQ", 0, {NULL}, 0, false },
+    { "?CIGAR column name?", 0, {NULL}, 0, false },
+    { "?READ column name?", 0, {NULL}, 0, false },
+    { "READ_START", 0, {NULL}, 0, false }, /* READ_START */
+    { "READ_LEN", 0, {NULL}, 0, false }, /* READ_LEN */
+    { "?CIGAR_LEN column name?", 0, {NULL}, 0, true }, /* CIGAR_LEN */
+    { "SAM_QUALITY", 0, {NULL}, 0, false },
+    { "SPOT_GROUP", 0, {NULL}, 0, true },
+    { "SEQ_SPOT_GROUP", 0, {NULL}, 0, true },
+    { "SEQ_READ_ID", 0, {NULL}, 0, true },
+    { "REF_ORIENTATION", 0, {NULL}, 0, true },
+    { "ALIGNMENT_COUNT", 0, {NULL}, 0, true },
+    { "EDIT_DISTANCE", 0, {NULL}, 0, false },
+    { "", 0, {NULL}, 0, false },
+    /* start cols used as standalone in DumpUnaligned */
+    /* MATE_ALIGN_ID col must preceeed
+       MATE_REF_NAME, MATE_REF_POS, SAM_FLAGS, TEMPLATE_LEN for cache to work */
+    { "MATE_ALIGN_ID", 0, {NULL}, 0, false },
+    { "?MATE_REF_NAME column name?", 0, {NULL}, 0, false },
+    { "SAM_FLAGS", 0, {NULL}, 0, false },
+    { "REF_START", 0, {NULL}, 0, false },  /* priming cursor cache */
+    { "MATE_REF_POS", 0, {NULL}, 0, false },
+    { "ALIGN_GROUP", 0, {NULL}, 0, true },
+    { "", 0, {NULL}, 0, true }, /* EVIDENCE_ALIGNMENT_IDS */
+    { "", 0, {NULL}, 0, true }, /* REF_PLOIDY */
+    { "REF_ID", 0, {NULL}, 0, true }, /* REF_ID */
+    { "MATE_REF_ID", 0, {NULL}, 0, true }, /* priming cursor cache */
+    { "(bool)HAS_MISMATCH", 0, {NULL}, 0, true },
+    /* these are read before any other for filtering so they must be last */
+    { "REF_NAME", 0, {NULL}, 0, false },
+    { "REF_SEQ_ID", 0, {NULL}, 0, false },
+    { "REF_POS", 0, {NULL}, 0, false },
+    /* end cols used as standalone in DumpUnaligned */
+    { "REF_LEN", 0, {NULL}, 0, false },
+    { "TEMPLATE_LEN", 0, {NULL}, 0, false },
+    { NULL, 0, {NULL}, 0, false }, /* alg_CG_TAGS_STR */
+    { NULL, 0, {NULL}, 0, false }
+};
+
+enum eseq_col
+{
+    seq_READ = 0,
+    seq_QUALITY,
+    seq_SPOT_GROUP,
+    seq_READ_START,
+    seq_READ_LEN,
+    seq_READ_TYPE,
+    seq_READ_FILTER,
+    seq_NAME,
+    seq_PRIMARY_ALIGNMENT_ID
+};
+
+static 
+SCol const gSeqCol[] =
+{
+    { "READ", 0, {NULL}, 0, false },
+/*    { "(INSDC:quality:text:phred_33)QUALITY", 0, {NULL}, 0, false }, */
+    { "(INSDC:quality:phred)QUALITY", 0, {NULL}, 0, false }, /* changed Jan 29 2013, because some runs don't have the phred_33-type in schema */
+    { "SPOT_GROUP", 0, {NULL}, 0, true },
+    { "READ_START", 0, {NULL}, 0, true },
+    { "READ_LEN", 0, {NULL}, 0, true },
+    { "READ_TYPE", 0, {NULL}, 0, true },
+    { "READ_FILTER", 0, {NULL}, 0, true },
+    { "NAME", 0, {NULL}, 0, true },
+    /* must be last in list to avoid reading all columns */
+    { "PRIMARY_ALIGNMENT_ID", 0, {NULL}, 0, true },
+    { NULL, 0, {NULL}, 0, false }
+};
+
+
+static rc_t RefSeqPrint( void )
+{
+    rc_t rc = 0;
+    uint32_t i, count = 0;
+    
+    rc = ReferenceList_Count( gRefList, &count );
+    for( i = 0; rc == 0 && i < count; i++ )
+    {
+        ReferenceObj const *obj;
+        rc = ReferenceList_Get( gRefList, &obj, i );
+        if ( rc == 0 )
+        {
+            char const *seqid = NULL;
+            rc = ReferenceObj_SeqId( obj, &seqid );
+            if ( rc == 0 )
+            {
+                char const *name = NULL;
+                rc = ReferenceObj_Name( obj, &name );
+                if ( rc == 0 )
+                {
+                    INSDC_coord_len len;
+                    rc = ReferenceObj_SeqLength( obj, &len );
+                    if ( rc == 0 )
+                    {
+                        char const *nm;
+                        if ( param->use_seqid && seqid != NULL && seqid[ 0 ] != '\0' )
+                        {
+                            nm = seqid;
+                        }
+                        else
+                        {
+                            nm = name;
+                        }
+                        KOutMsg( "@SQ\tSN:%s", nm );
+                        if ( nm != seqid && seqid != NULL && seqid[ 0 ] != '\0' && strcmp( nm, seqid ) != 0)
+                        {
+                            KOutMsg( "\tAS:%s", seqid );
+                        }
+                        KOutMsg( "\tLN:%u\n", len );
+                    }
+                }
+            }
+            ReferenceObj_Release( obj );
+        }
     }
     return rc;
 }
 
-static
-rc_t Cursor_Init(const VTable* tbl, const VCursor** curs, SCol* cols)
+
+#if USE_MATE_CACHE
+static rc_t Cache_Init( SCursCache* c )
+{
+    if ( c != NULL )
+    {
+	rc_t rc;
+        memset( c, 0, sizeof( *c ) );
+        rc=KVectorMake( &c->cache );
+	if(rc == 0){
+		rc=KVectorMake( &c->cache_unaligned_mate );
+	}
+    }
+    return 0;
+}
+
+
+static void Cache_Close( char const *name, SCursCache* c )
+{
+    if ( c != NULL )
+    {
+        KVectorRelease( c->cache );
+        KVectorRelease( c->cache_unaligned_mate );
+        if ( c->added > 0 )
+        {
+            SAM_DUMP_DBG( 2, ( "%s cache stats: projected %lu added of those %lu; "
+                               "hits %lu of those broken %lu;\n",
+                               name, c->projected, c->added, c->hit, c->bad ) );
+        }
+    }
+    memset( c, 0, sizeof( *c ) );
+}
+
+
+static rc_t Cache_Add( uint64_t key, SCurs const *curs, SCol const *cols )
 {
+    /* compact values for mate record to cache as:
+        pos_delta - 32bit, ref_proj - 11bit, flags - 11bit, rnext_idx - 10bit = 64bit
+    */
     rc_t rc = 0;
+    ReferenceObj const *r = NULL;
+    uint32_t rid = 0;
+    uint64_t val = 0;
+    int64_t mate_id = cols[ alg_MATE_ALIGN_ID ].len > 0 ? cols[ alg_MATE_ALIGN_ID ].base.i64[ 0 ] : 0;
 
-    *curs = NULL;
-    if (tbl == NULL)
-        return 0;
+    rc = ReferenceList_Find( gRefList, &r, cols[ alg_REF_NAME ].base.str, cols[ alg_REF_NAME ].len );
+    if ( rc == 0 )
+    {
+        rc = ReferenceObj_Idx( r, &rid );
+    }
+#if _DEBUGGING
+    {
+        char const *rname = NULL;
+        curs->cache->projected++;
+        ReferenceObj_Name( r, &rname );
+        SAM_DUMP_DBG( 10, ( "to cache row %li for mate %li: %u,%s[%hu],%u,%u,%i",
+            key, mate_id, cols[ alg_SAM_FLAGS ].base.u32[ 0 ], rname, rid,
+            cols[ alg_REF_POS ].len ? cols[ alg_REF_POS ].base.coord0[ 0 ] : 0,
+            cols[ alg_MATE_REF_POS ].len ? cols[ alg_MATE_REF_POS ].base.coord0[ 0 ] : 0,
+            cols[ alg_TEMPLATE_LEN ].len > 0 ? cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ] : 0));
+    }
+#endif
+    if ( rc == 0 && !( rid & 0xFC00 ) )
+    {
+        int64_t pos_delta64;
+        int32_t pos_delta32;
 
-    rc = VTableCreateCachedCursorRead(tbl, curs, 32 * 1024 * 1024);
-    while(rc == 0 && cols->name != NULL) {
-        if( (rc = VCursorAddColumn(*curs, &cols->idx, cols->name)) != 0 ) {
-            if( GetRCState(rc) == rcExists ||
-                (GetRCState(rc) == rcNotFound && cols->optional) ) {
-                rc = 0;
-            } else {
-                PLOGERR(klogErr, (klogErr, rc, "column $(c)", PLOG_S(c), cols->name));
+        if ( mate_id != 0 )
+        {
+            ReferenceObj const *rm = NULL;
+            uint32_t rm_id;
+
+            rc = ReferenceList_Find( gRefList, &rm, cols[ alg_MATE_REF_NAME ].base.str, cols[ alg_MATE_REF_NAME ].len );
+            if ( rc == 0 )
+            {
+                rc = ReferenceObj_Idx( rm, &rm_id );
+            }
+            assert( rm != NULL );
+            if ( rc == 0 && rid != rm_id )
+            {
+                char const *rm_name = NULL;
+                ReferenceObj_Name( rm, &rm_name );
+                mate_id = 0;
+                SAM_DUMP_DBG( 10, ( " mate ref differ: %s[%hu]!", rm_name, rm_id ) );
+            }
+            ReferenceObj_Release( rm );
+        }
+
+        if ( mate_id != 0 )
+        {
+            pos_delta64 = cols[ alg_MATE_REF_POS ].base.coord0[ 0 ] - cols[ alg_REF_POS ].base.coord0[ 0 ];
+        }
+        else
+        {
+            pos_delta64 = cols[ alg_REF_POS ].base.coord0[ 0 ];
+        }
+
+        pos_delta32 = pos_delta64;
+        if ( pos_delta64 == pos_delta32 )
+        {
+            int64_t ref_proj;
+            if ( mate_id == 0 )
+            {
+                ref_proj = 0; /* indicates full value in delta */
+            }
+            else if ( cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ] < 0 )
+            {
+                assert( pos_delta32 <= 0 );
+                ref_proj = pos_delta32 - cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ];
+            }
+            else
+            {
+                assert( pos_delta32 >= 0 );
+                ref_proj = cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ] - pos_delta32;
+            }
+
+            if ( !( ref_proj & 0xFFFFF800 ) )
+            {
+                val = ( pos_delta64 << 32 ) | ( ref_proj << 21 ) | ( cols[ alg_SAM_FLAGS ].base.u32[ 0 ] << 10 ) | rid;
+                rc = KVectorSetU64( curs->cache->cache, key, val );
             }
         }
-        cols++;
     }
-    if( rc == 0 ) {
-        rc = VCursorOpen(*curs);
+    ReferenceObj_Release( r );
+
+#if _DEBUGGING
+    if ( val == 0 )
+    {
+        SAM_DUMP_DBG( 10, ( " --> out of range\n" ) );
     }
-    if( rc != 0 ) {
-        VCursorRelease(*curs);
-        *curs = NULL;
+    else
+    {
+        SAM_DUMP_DBG( 10, ( " --> %016lX\n", val ) );
+        curs->cache->added++;
     }
+#endif
     return rc;
 }
 
-static
-rc_t Cursor_Read(const VCursor* curs, int64_t row_id, SCol* cols)
+
+static rc_t Cache_Get( SCurs const *curs, uint64_t key, uint64_t* val )
 {
-    rc_t rc = 0;
-    if( (rc = VCursorCloseRow(curs)) == 0 &&
-        (rc = VCursorSetRowId(curs, row_id)) == 0 &&
-        (rc = VCursorOpenRow(curs)) == 0 ) {
-        while( rc == 0 && cols->name != NULL ) {
-            if( cols->idx != 0 && (rc = VCursorCellData(curs, cols->idx, NULL, &cols->base.v, NULL, &cols->len)) != 0 ) {
-                SAM_DUMP_DBG(2, ("%s: read column %s spot %u %R\n", __func__, cols->name, row_id, rc));
-                break;
-            }
-            cols++;
+    rc_t rc = KVectorGetU64( curs->cache->cache, key, val );
+    if ( rc == 0 )
+    {
+        uint32_t id = ( *val & 0x3FF );
+#if _DEBUGGING
+        curs->cache->hit++;
+#endif
+        KVectorUnset( curs->cache->cache, key );
+        rc = ReferenceList_Get( gRefList, &curs->cache->ref, id );
+        if ( rc != 0 )
+        {
+            *val = 0;
+            curs->cache->ref = NULL;
+            rc = RC( rcExe, rcNoTarg, rcSearching, rcItem, rcNotFound );
+#if _DEBUGGING
+            curs->cache->bad++;
+#endif
+        }
+        else
+        {
+            SAM_DUMP_DBG( 10, ( "from cache row %li %016lX", key, *val ) );
         }
     }
     return rc;
 }
 
-struct {
-    KWrtWriter writer;
-    void* data;
-    KFile* kfile;
-    uint64_t pos;
-} g_out_writer = {NULL};
 
-static
-rc_t CC BufferedWriter(void* self, const char* buffer, size_t bufsize, size_t* num_writ)
+static void Cache_Unpack( uint64_t val, int64_t mate_id, SCurs const *curs, SCol* cols )
 {
-    rc_t rc = 0;
+    int32_t pos_delta = ( val & 0xFFFFFFFF00000000 ) >> 32;
+    uint32_t ref_proj = ( val & 0x00000000FFE00000 ) >> 21;
+    uint32_t flags = ( val & 0x00000000001FFC00 ) >> 10;
 
-    assert(buffer != NULL);
-    assert(num_writ != NULL);
+    if ( mate_id != 0 )
+    {
+        /* adjust flags for mate record */
+        curs->cache->sam_flags = ( flags & 0x1 ) |
+                                 ( flags & 0x2 ) |
+                                 ( ( flags & 0x8 ) >> 1 ) |
+                                 ( ( flags & 0x4 ) << 1 ) |
+                                 ( ( flags & 0x20 ) >> 1 ) |
+                                 ( ( flags & 0x10 ) << 1 ) |
+                                 ( ( flags & 0x40 ) ? 0x80 : 0x40 ) |
+                                 ( flags & 0x700 );
+    }
+    else
+    {
+        /* preserve flags as if original records is restored */
+        curs->cache->sam_flags = flags;
+    }
+    cols[ alg_SAM_FLAGS ].base.u32 = &curs->cache->sam_flags;
+    cols[ alg_SAM_FLAGS ].len = sizeof( curs->cache->sam_flags );
 
-    do {
-        if( (rc = KFileWrite(g_out_writer.kfile, g_out_writer.pos, buffer, bufsize, num_writ)) == 0 ) {
-            buffer += *num_writ;
-            bufsize -= *num_writ;
-            g_out_writer.pos += *num_writ;
-        }
-    } while(rc == 0 && bufsize > 0);
+    if ( param->use_seqid )
+    {
+        ReferenceObj_SeqId( curs->cache->ref, &cols[ alg_MATE_REF_NAME ].base.str );
+    }
+    else
+    {
+        ReferenceObj_Name( curs->cache->ref, &cols[ alg_MATE_REF_NAME ].base.str );
+    }
+
+    cols[ alg_MATE_REF_NAME ].len = strlen( cols[ alg_MATE_REF_NAME ].base.str );
+
+    if ( ref_proj == 0 )
+    {
+        curs->cache->pnext = pos_delta;
+        curs->cache->tlen = 0;
+    }
+    else if ( pos_delta > 0 )
+    {
+        curs->cache->pnext = ( cols[ alg_REF_POS ].len > 0 ? cols[ alg_REF_POS ].base.coord0[ 0 ] : 0 ) - pos_delta;
+        curs->cache->tlen = - ( ref_proj + pos_delta );
+    }
+    else
+    {
+        curs->cache->pnext = ( cols[ alg_REF_POS ].len > 0 ? cols[ alg_REF_POS ].base.coord0[ 0 ] : 0 ) - pos_delta;
+        curs->cache->tlen = ref_proj - pos_delta;
+    }
+
+    cols[ alg_MATE_REF_POS ].base.coord0 = &curs->cache->pnext;
+    cols[ alg_MATE_REF_POS ].len = sizeof( curs->cache->pnext );
+    cols[ alg_TEMPLATE_LEN ].base.i32 = &curs->cache->tlen;
+    cols[ alg_TEMPLATE_LEN ].len = sizeof( curs->cache->tlen );
+    {
+        uint32_t id;
+        ReferenceObj_Idx( curs->cache->ref, &id );
+        SAM_DUMP_DBG( 10, ( " --> mate %li: %u,%s[%hu],%u,%i\n",
+            mate_id, curs->cache->sam_flags, cols[ alg_MATE_REF_NAME ].base.str,
+            id, curs->cache->pnext, curs->cache->tlen ) );
+    }
+}
+#endif /* USE_MATE_CACHE */
+
+#if 0
+static rc_t OpenVTable( VDatabase const *db, STable* tbl, char const *name, bool optional )
+{
+    rc_t rc = VDatabaseOpenTableRead( db, &tbl->vtbl, name );
+    if ( GetRCState( rc ) == rcNotFound && optional )
+    {
+        rc = 0;
+        tbl->vtbl = NULL;
+    }
+    tbl->name = name;
     return rc;
 }
+#endif
 
-static
-rc_t BufferedWriterMake(bool gzip, bool bzip2)
+static rc_t Cursor_Open( STable const *const tbl, SCurs *const curs, SCol cols[], SCursCache* cache )
 {
     rc_t rc = 0;
+    unsigned i;
+
+    curs->vcurs = NULL;
+    if ( tbl == NULL || tbl->vtbl == NULL )
+        return 0;
+
+    rc = VTableCreateCachedCursorRead( tbl->vtbl, &curs->vcurs, CURSOR_CACHE );
+    if ( rc != 0 )
+        return rc;
+    
+    rc = VCursorPermitPostOpenAdd( curs->vcurs );
+    if ( rc != 0 )
+        return rc;
 
-    if( gzip && bzip2 ) {
-        rc = RC(rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous);
-    } else if( g_out_writer.writer != NULL ) {
-        rc = RC(rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous);
-    } else if( (rc = KFileMakeStdOut(&g_out_writer.kfile)) == 0 ) {
-        g_out_writer.pos = 0;
-        if( gzip ) {
-            KFile* gz;
-            if( (rc = KFileMakeGzipForWrite(&gz, g_out_writer.kfile)) == 0 ) {
-                KFileRelease(g_out_writer.kfile);
-                g_out_writer.kfile = gz;
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen( curs->vcurs );
+        if ( rc == 0 )
+        {
+#if USE_MATE_CACHE
+            if ( cache != NULL )
+            {
+                curs->cache = cache;
             }
-        } else if( bzip2 ) {
-            KFile* bz;
-            if( (rc = KFileMakeBzip2ForWrite(&bz, g_out_writer.kfile)) == 0 ) {
-                KFileRelease(g_out_writer.kfile);
-                g_out_writer.kfile = bz;
+            else
+            {
+                curs->cache = &curs->cache_local;
+                rc = Cache_Init( &curs->cache_local );
             }
+#endif /* USE_MATE_CACHE */
+            curs->tbl = tbl;
         }
-        if( rc == 0 ) {
-            KFile* buf;
-            if( (rc = KBufFileMakeWrite(&buf, g_out_writer.kfile, false, 128 * 1024)) == 0 ) {
-                KFileRelease(g_out_writer.kfile);
-                g_out_writer.kfile = buf;
-                g_out_writer.writer = KOutWriterGet();
-                g_out_writer.data = KOutDataGet();
-                rc = KOutHandlerSet(BufferedWriter, &g_out_writer);
+    }
+    
+    for ( i = 0; cols[ i ].name != NULL; ++i )
+    {
+        if ( cols[ i ].name[ 0 ] == 0 )
+            continue;
+        rc = VCursorAddColumn( curs->vcurs, &cols[ i ].idx, cols[ i ].name );
+        if ( GetRCObject( rc ) == rcColumn )
+        {
+            switch ( GetRCState( rc ) )
+            {
+            case rcNotFound:
+            case rcUndefined:
+                if ( !cols[ i ].optional )
+                    break;
+            case rcExists:
+                rc = 0;
+            default:
+                break;
             }
         }
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogErr, ( klogErr, rc, "table $(t) column $(c)", "t=%s,c=%s", tbl->name, cols[ i ].name ) );
+            break;
+        }
+    }
+    if ( rc != 0 )
+    {
+        VCursorRelease( curs->vcurs );
+        curs->vcurs = NULL;
+        if ( rc != KLogLastErrorCode() )
+        {
+            (void)PLOGERR( klogErr, ( klogErr, rc, "table $(t)", "t=%s", tbl->name ) );
+        }
+    }
+    else
+    {
+        SAM_DUMP_DBG( 2, ( "%s: table %s\n", __func__, curs->tbl->name ) );
     }
     return rc;
 }
 
-static
-void BufferedWriterRelease(void)
+
+static void Cursor_Close( SCurs* curs )
 {
-    KFileRelease(g_out_writer.kfile);
-    if( g_out_writer.writer != NULL ) {
-        KOutHandlerSet(g_out_writer.writer, g_out_writer.data);
+    if ( curs != NULL && curs->vcurs != NULL )
+    {
+        SAM_DUMP_DBG( 2, ( "%s: table %s, columns rows read %lu\n", __func__, curs->tbl->name, curs->col_reads_qty ) );
+        VCursorRelease( curs->vcurs );
+#if USE_MATE_CACHE
+        if ( curs->cache == &curs->cache_local )
+        {
+            Cache_Close( curs->tbl->name, curs->cache );
+        }
+#endif /* USE_MATE_CACHE */
+        memset( curs, 0, sizeof( *curs ) );
     }
-    g_out_writer.writer = NULL;
 }
 
-typedef struct RefSeq {
-    BSTNode node;
-    char name[1024];
-    char seqid[1024];
-    uint32_t len;
-} RefSeq;
 
-static
-int CC RefSeq_sort( const BSTNode* item, const BSTNode* node )
+static rc_t Cursor_Read( DataSource *ds, int64_t row_id, int firstCol, unsigned nCols )
 {
-    return strcmp(((const RefSeq*)item)->name, ((const RefSeq*)node)->name);
+    rc_t rc = 0;
+
+    if ( ds->curs.vcurs == NULL )
+    {
+        rc = Cursor_Open( &ds->tbl, &ds->curs, ds->cols, ds->curs.cache );
+        if ( rc != 0 )
+            return rc;
+    }
+    if (1)
+    {
+        SCol *const col = &ds->cols[ firstCol ];
+        unsigned i;
+        
+        for ( i = 0; i < nCols && col[ i ].name; ++i )
+        {
+            uint32_t const idx = col[ i ].idx;
+            
+            if ( idx != 0 )
+            {
+                uint32_t elem_bits;
+                uint32_t bit_offset;
+                uint32_t elem_count;
+                void const *base;
+                
+                rc = VCursorCellDataDirect( ds->curs.vcurs, row_id, idx, &elem_bits, &base, &bit_offset, &elem_count );
+                if ( rc != 0 )
+                {
+                    (void)PLOGERR( klogWarn, ( klogWarn, rc, "reading $(t) row $(r), column $(c)", "t=%s,r=%li,c=%s",
+                                               ds->tbl.name, row_id, col[ i ].name ) );
+                    return rc;
+                }
+                
+                assert( bit_offset == 0 );
+                assert( elem_bits % 8 == 0 );
+                
+                col[ i ].base.v = base;
+                col[ i ].len = elem_count;
+            }
+        }
+    }
+    return rc;
 }
 
-typedef struct RefSeq_rowrange_data_struct {
-    int64_t ref_id;
-    const RefSeq* node;
-} RefSeq_rowrange_data;
+struct
+{
+    KWrtWriter writer;
+    void* data;
+    KFile* kfile;
+    uint64_t pos;
+} g_out_writer = {NULL};
+
 
-static
-void CC RefSeq_dump( BSTNode *n, void *data )
+static rc_t CC BufferedWriter( void *const self, char const buffer[], size_t const bufsize, size_t *const pnum_writ )
 {
-    const RefSeq* r = (RefSeq*)n;
-    const SParam* p = (SParam*)data;
-    const char* nm;
+    rc_t rc = 0;
+    size_t written = 0;
 
-    if( p->use_seqid && r->seqid[0] != '\0' ) {
-        nm = r->seqid;
-    } else {
-        nm = r->name;
-    }
-    OUTMSG(("@SQ SN:%s", nm));
-    if( nm != r->seqid && r->seqid[0] != '\0' && strcmp(nm, r->seqid) != 0 ) {
-        OUTMSG((" AS:%s", r->seqid));
+    assert( buffer != NULL );
+
+    while ( written < bufsize )
+    {
+        size_t n;
+
+        rc = KFileWrite( g_out_writer.kfile, g_out_writer.pos + written, &buffer[ written ], bufsize - written, &n );
+        if ( rc != 0 )
+            break;
+        written += n;
     }
-    OUTMSG((" LN:%u\n", r->len));
+    g_out_writer.pos += written;
+    if ( pnum_writ != NULL )
+        *pnum_writ = written;
+    return rc;
 }
 
-static
-rc_t CC DumpRefSeqs(const VTable* tbl, const SParam* param)
+
+static rc_t BufferedWriterMake( bool gzip, bool bzip2 )
 {
     rc_t rc = 0;
-    const VCursor* curs;
-    BSTree tree;
-
-    SCol cols[] = {
-        {"NAME", 0, {NULL}, 0, false},
-        {"SEQ_ID", 0, {NULL}, 0, false},
-        {"SEQ_LEN", 0, {NULL}, 0, false},
-        {NULL, 0, {NULL}, 0, false}
-    };
-    BSTreeInit(&tree);
-    if( (rc = Cursor_Init(tbl, &curs, cols)) == 0 ) {
-        int64_t start;
-        uint64_t count;
-
-        if( (rc = VCursorIdRange(curs, 0, &start, &count)) == 0 ) {
-            RefSeq* node = NULL;
-            uint32_t last_len = 0;
 
-            while( count > 0 && rc == 0 ) {
-                if( (rc = Cursor_Read(curs, start, cols)) == 0 ) {
-                    if( node == NULL || last_len != cols[0].len || strncmp(cols[0].base.str, node->name, cols[0].len) != 0 ) {
-                        node = malloc(sizeof(*node));
-                        if( node == NULL ) {
-                            rc = RC(rcExe, rcNode, rcConstructing, rcMemory, rcExhausted);
-                        } else if( cols[0].len >= sizeof(node->name) ||
-                                   cols[1].len >= sizeof(node->seqid) ) {
-                            rc = RC(rcExe, rcString, rcCopying, rcBuffer, rcInsufficient);
-                        } else {
-                            last_len = cols[0].len;
-                            strncpy(node->name, cols[0].base.str, last_len);
-                            strncpy(node->seqid, cols[1].base.str, cols[1].len);
-                            node->name[last_len] = '\0';
-                            node->seqid[cols[1].len] = '\0';
-                            node->len = 0;
-                            rc = BSTreeInsertUnique(&tree, &node->node, NULL, RefSeq_sort);
-                        }
-                    }
-                    node->len += cols[2].base.coord_len[0];
-                } else if( GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcRow ) {
-                    /* a gap in ids? */
-                    rc = 0;
+    if ( gzip && bzip2 )
+    {
+        rc = RC( rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous );
+    }
+    else if ( g_out_writer.writer != NULL )
+    {
+        rc = RC( rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous );
+    }
+    else
+    {
+        rc = KFileMakeStdOut( &g_out_writer.kfile );
+        if ( rc == 0 )
+        {
+            g_out_writer.pos = 0;
+            if ( gzip )
+            {
+                KFile* gz;
+                rc = KFileMakeGzipForWrite( &gz, g_out_writer.kfile );
+                if ( rc == 0 )
+                {
+                    KFileRelease( g_out_writer.kfile );
+                    g_out_writer.kfile = gz;
+                }
+            }
+            else if ( bzip2 )
+            {
+                KFile* bz;
+                rc = KFileMakeBzip2ForWrite( &bz, g_out_writer.kfile );
+                if ( rc == 0 )
+                {
+                    KFileRelease( g_out_writer.kfile );
+                    g_out_writer.kfile = bz;
+                }
+            }
+            if ( rc == 0 )
+            {
+                KFile* buf;
+                rc = KBufFileMakeWrite( &buf, g_out_writer.kfile, false, 128 * 1024 );
+                if ( rc == 0 )
+                {
+                    KFileRelease( g_out_writer.kfile );
+                    g_out_writer.kfile = buf;
+                    g_out_writer.writer = KOutWriterGet();
+                    g_out_writer.data = KOutDataGet();
+                    rc = KOutHandlerSet( BufferedWriter, &g_out_writer );
                 }
-                start++;
-                count--;
             }
         }
-        VCursorRelease(curs);
-    }
-    if( rc == 0 ) {
-        BSTreeForEach(&tree, false, RefSeq_dump, (void*)param);
     }
-    BSTreeWhack(&tree, NULL, NULL);
     return rc;
 }
 
-typedef struct ReadGroup {
+
+static void BufferedWriterRelease( bool flush )
+{
+    if ( flush )
+    {
+        /* avoid flushing buffered data after failure */
+        KFileRelease( g_out_writer.kfile );
+    }
+    if ( g_out_writer.writer != NULL )
+    {
+        KOutHandlerSet( g_out_writer.writer, g_out_writer.data );
+    }
+    g_out_writer.writer = NULL;
+}
+
+
+typedef struct ReadGroup
+{
     BSTNode node;
-    char name[1024];
+    char name[ 1024 ];
 } ReadGroup;
 
-static
-int CC ReadGroup_sort( const BSTNode *item, const BSTNode *node )
+
+static int CC ReadGroup_sort( BSTNode const *item, BSTNode const *node )
 {
-    return strcmp(((const ReadGroup*)item)->name, ((const ReadGroup*)node)->name);
+    return strcmp( ( ( ReadGroup const * )item )->name, ( ( ReadGroup const * ) node )->name );
 }
 
-static
-void CC ReadGroup_dump( BSTNode *n, void *data )
+
+static void ReadGroup_print( char const *nm )
 {
-    const ReadGroup* g = (ReadGroup*)n;
-    OUTMSG(("@RG ID:%s\n", g->name));
+    if ( nm[ 0 ] != '\0' && strcasecmp( nm, "default" ) )
+    {
+        KOutMsg( "@RG\tID:%s\n", nm );
+    }
 }
 
 
-static
-rc_t CC DumpReadGroupsScan(const VTable* tbl)
+static void CC ReadGroup_dump( BSTNode *n, void *data )
+{
+    ReadGroup const *g = ( ReadGroup* )n;
+    ReadGroup_print( g->name );
+}
+
+
+static rc_t CC DumpReadGroupsScan( STable const *tbl )
 {
+    SCol cols[] =
+    {
+        { "SPOT_GROUP", 0, {NULL}, 0, false },
+        { NULL, 0, {NULL}, 0, false }
+    };
     rc_t rc = 0;
-    const VCursor* curs = NULL;
     BSTree tree;
+    DataSource ds;
 
-    SCol cols[] = {
-        {"SPOT_GROUP", 0, {NULL}, 0, false},
-        {NULL, 0, {NULL}, 0, false}
-    };
+    memset( &ds, 0, sizeof( ds ) );
+    ds.cols = cols;
 
-    BSTreeInit(&tree);
-    if( (rc = Cursor_Init(tbl, &curs, cols)) == 0 ) {
+    BSTreeInit( &tree );
+    rc = Cursor_Open( tbl, &ds.curs, ds.cols, NULL );
+    if ( rc == 0 )
+    {
         int64_t start;
         uint64_t count;
 
-        if( (rc = VCursorIdRange(curs, 0, &start, &count)) == 0 ) {
-            RefSeq* node = NULL;
+        rc = VCursorIdRange( ds.curs.vcurs, 0, &start, &count );
+        if ( rc == 0 )
+        {
+            ReadGroup* node = NULL;
             uint32_t last_len = 0;
 
-            while( count > 0 && rc == 0 ) {
-                if( (rc = Cursor_Read(curs, start, cols)) == 0 && cols[0].len != 0 ) {
-                    if( node == NULL || last_len != cols[0].len || strncmp(cols[0].base.str, node->name, cols[0].len) != 0 ) {
-                        node = malloc(sizeof(*node));
-                        if( node == NULL ) {
-                            rc = RC(rcExe, rcNode, rcConstructing, rcMemory, rcExhausted);
-                        } else if( cols[0].len > sizeof(node->name) ) {
-                            rc = RC(rcExe, rcString, rcCopying, rcBuffer, rcInsufficient);
-                        } else {
-                            last_len = cols[0].len;
-                            strncpy(node->name, cols[0].base.str, last_len);
-                            node->name[last_len] = '\0';
-                            rc = BSTreeInsertUnique(&tree, &node->node, NULL, ReadGroup_sort);
-                            if (GetRCState(rc) == rcExists) {
-                                free(node);
+            while ( count > 0 && rc == 0 )
+            {
+                rc = Cursor_Read( &ds, start, 0, ~(unsigned)0 );
+                if ( rc == 0 && cols[ 0 ].len != 0 )
+                {
+                    if ( node == NULL ||
+                         last_len != cols[ 0 ].len ||
+                         strncmp( cols[ 0 ].base.str, node->name, cols[ 0 ].len ) != 0 )
+                    {
+                        node = malloc( sizeof( *node ) );
+                        if ( node == NULL )
+                        {
+                            rc = RC( rcExe, rcNode, rcConstructing, rcMemory, rcExhausted );
+                        }
+                        else if ( cols[ 0 ].len > sizeof( node->name ) )
+                        {
+                            rc = RC( rcExe, rcString, rcCopying, rcBuffer, rcInsufficient ); 
+                        }
+                        else
+                        {
+                            last_len = cols[ 0 ].len;
+                            strncpy( node->name, cols[ 0 ].base.str, last_len );
+                            node->name[ last_len ] = '\0';
+                            rc = BSTreeInsertUnique( &tree, &node->node, NULL, ReadGroup_sort );
+                            if ( GetRCState( rc ) == rcExists )
+                            {
+                                free( node );
                                 rc = 0;
                             }
                         }
                     }
-                } else if( GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcRow ) {
-                    /* a gap in ids? */
+                }
+                else if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcRow )
+                {
                     rc = 0;
                 }
                 start++;
                 count--;
             }
         }
-        VCursorRelease(curs);
+        Cursor_Close( &ds.curs );
+    }
+
+    if ( rc == 0 )
+    {
+        BSTreeForEach( &tree, false, ReadGroup_dump, NULL );
     }
-    if( rc == 0 ) {
-        BSTreeForEach(&tree, false, ReadGroup_dump, NULL);
+    else if ( rc != KLogLastErrorCode() )
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "$(f)", "f=%s", __func__ ) );
     }
-    BSTreeWhack(&tree, NULL, NULL);
+    BSTreeWhack( &tree, NULL, NULL );
     return rc;
 }
 
-rc_t CC DumpReadGroups(const VTable* tbl)
+
+rc_t CC DumpReadGroups( STable const *tbl )
 {
     rc_t rc = 0;
-    const KMetadata* m;
+    KMetadata const *m;
 
     /* try getting list from stats meta */
-    if( (rc = VTableOpenMetadataRead(tbl, &m)) == 0 ) {
-        const KMDataNode* n;
-        if( (rc = KMetadataOpenNodeRead(m, &n, "/STATS/SPOT_GROUP")) == 0 ) {
+    rc = VTableOpenMetadataRead( tbl->vtbl, &m );
+    if ( rc == 0 )
+    {
+        KMDataNode const *n;
+        rc = KMetadataOpenNodeRead( m, &n, "/STATS/SPOT_GROUP" );
+        if ( rc == 0 )
+        {
             KNamelist* names;
-            if( (rc = KMDataNodeListChild(n, &names)) == 0 ) {
+            rc = KMDataNodeListChild( n, &names );
+            if ( rc == 0 )
+            {
                 uint32_t i, q;
-                if( (rc = KNamelistCount(names, &q)) == 0 ) {
-                    for(i = 0; rc == 0 && i < q; i++) {
-                        const char* nm;
-                        if( (rc = KNamelistGet(names, i, &nm)) == 0 && strcasecmp(nm, "default") ) {
-                            OUTMSG(("@RG ID:%s\n", nm));
+                rc = KNamelistCount( names, &q );
+                if ( rc == 0 )
+                {
+                    for ( i = 0; rc == 0 && i < q; i++ )
+                    {
+                        char const *nm;
+                        rc = KNamelistGet( names, i, &nm );
+                        if ( rc == 0 )
+                        {
+                            ReadGroup_print( nm );
                         }
                     }
                 }
-                KNamelistRelease(names);
+                KNamelistRelease( names );
             }
-            KMDataNodeRelease(n);
+            KMDataNodeRelease( n );
         }
-        KMetadataRelease(m);
+        KMetadataRelease( m );
     }
-    if( GetRCState(rc) == rcNotFound ) {
-        rc = DumpReadGroupsScan(tbl);
+
+    if ( GetRCState( rc ) == rcNotFound )
+    {
+        rc = DumpReadGroupsScan( tbl );
+    }
+    else if ( rc != 0 && rc != KLogLastErrorCode() )
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "$(f)", "f=%s", __func__ ) );
     }
     return rc;
 }
 
-enum ealg_col {
-    alg_SEQ_NAME = 0,
-    alg_SAM_FLAGS,
-    alg_MAPQ,
-    alg_CIGAR,
-    alg_MATE_REF_NAME,
-    alg_MATE_REF_POS,
-    alg_READ,
-    alg_SAM_QUALITY,
-    alg_SPOT_GROUP,
-    alg_SEQ_SPOT_GROUP,
-    alg_SEQ_SPOT_ID,
-    alg_SEQ_READ_ID,
-    alg_EDIT_DISTANCE,
-    alg_REGION_FILTER,
-    alg_REF_NAME = alg_REGION_FILTER,
-    alg_REF_SEQ_ID,
-    alg_REF_POS,
-    alg_REF_LEN,
-    alg_DISTANCE_FILTER,
-    alg_TEMPLATE_LEN = alg_DISTANCE_FILTER
-};
+static rc_t Cursor_ReadAlign( SCurs const *curs, int64_t row_id, SCol* cols, uint32_t idx )
+{
+    rc_t rc = 0;
+    SCol* c = NULL;
+    SCol* mate_id = NULL;
+#if USE_MATE_CACHE
+    uint64_t cache_val = 0;
+    bool cache_miss = false;
+#endif /* USE_MATE_CACHE */
 
-enum eseq_col {
-    seq_READ = 0,
-    seq_QUALITY,
-    seq_SPOT_GROUP,
-    seq_READ_START,
-    seq_READ_LEN,
-    seq_READ_TYPE,
-    seq_NAME
-};
+    
+    for( ; rc == 0 && cols[ idx ].name != NULL; idx++ )
+    {
+        c = &cols[ idx ];
+        if ( c->idx != 0 )
+        {
+#if USE_MATE_CACHE
+            if ( mate_id != NULL && curs->cache != NULL && !cache_miss &&
+                ( idx == alg_SAM_FLAGS || idx == alg_MATE_REF_NAME || idx == alg_MATE_REF_POS || idx == alg_TEMPLATE_LEN ) &&
+                mate_id->idx && mate_id->len > 0 && mate_id->base.i64[ 0 ] > 0 )
+            {
+                if ( cache_val != 0 )
+                {
+                    continue;
+                }
+                rc = Cache_Get( curs, mate_id->base.u64[ 0 ], &cache_val );
+                if ( rc == 0 )
+                {
+                    continue;
+                }
+                else if ( !( GetRCObject( rc ) == rcItem && GetRCState( rc ) == rcNotFound ) )
+                {
+                    break;
+                }
+                else
+                {
+                    /* avoid multiple lookups in cache */
+                    cache_miss = true;
+                }
+            }
+#endif /* USE_MATE_CACHE */
+            rc = VCursorCellDataDirect( curs->vcurs, row_id, c->idx, NULL, &c->base.v, NULL, &c->len );
+            if ( rc == 0 )
+            {
+                if ( idx == alg_SEQ_SPOT_ID && ( c->len  ==0 || c->base.i64[ 0 ] == 0 ) )
+                {
+                    return RC( rcExe, rcColumn, rcReading, rcRow, rcNotFound );
+                }
+                if ( idx == alg_MATE_ALIGN_ID )
+                {
+                    mate_id = &cols[ alg_MATE_ALIGN_ID ];
+                }
+#if _DEBUGGING
+                ( ( SCurs* )curs )->col_reads_qty++;
+#endif
+            }
+        }
+        else
+        {
+            static INSDC_coord_zero readStart;
+            static INSDC_coord_len  readLen;
+            static INSDC_coord_len  cigarLen;
+            
+            switch ( (int)idx )
+            {
+            case alg_READ_START:
+                readStart = 0;
+                c->base.coord0 = &readStart;
+                c->len = 1;
+                break;
+            case alg_READ_LEN:
+                readLen = cols[ alg_READ ].len;
+                c->base.coord_len = &readLen;
+                c->len = 1;
+                break;
+            case alg_CIGAR_LEN:
+                cigarLen = cols[ alg_CIGAR ].len;
+                c->base.coord_len = &cigarLen;
+                c->len = 1;
+                break;
+            }
+        }
+    }
 
-static
-void DumpName(const SParam* param, const char* name, size_t name_len,
-              const char spot_group_sep, const char* spot_group, size_t spot_group_len)
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogWarn, ( klogWarn, rc, "reading $(t) row $(r), column $(c)", "t=%s,r=%li,c=%s",
+            curs->tbl->name, row_id, c ? c->name : "<none>" ) );
+#if USE_MATE_CACHE
+    }
+    else if ( curs->cache == NULL )
+    {
+    }
+    else if ( cache_val == 0 )
+    {
+        /* this row is not from cache */
+        int64_t mate_align_id = ( mate_id != NULL && mate_id->len > 0 ) ? mate_id->base.i64[ 0 ] : 0;
+        if ( cols[ 0 ].idx != 0 && /* we have full cursor which means we are reading alignment table */
+            /* no mate -> unaligned (not secondary!) */
+            ( ( mate_align_id == 0 && param->unaligned && curs->cache != &curs->cache_local ) ||
+            /* 2nd mate with higher rowid and more than set gap rows away */
+              ( mate_align_id != 0 && mate_align_id > row_id && ( mate_align_id - row_id) > param->mate_row_gap_cachable ) ) )
+        {
+          rc = Cache_Add( row_id, curs, cols );
+        }
+	if(param->unaligned == true && mate_align_id == 0 ){
+	  rc = KVectorSetBool( curs->cache->cache_unaligned_mate, cols[alg_SEQ_SPOT_ID].base.i64[0], true );
+        }
+    }
+    else
+    {
+        Cache_Unpack( cache_val, row_id, curs, cols );
+#endif /* USE_MATE_CACHE */
+    }
+    return rc;
+}
+
+
+static void DumpName( char const *name, size_t name_len,
+                      const char spot_group_sep, char const *spot_group,
+                     size_t spot_group_len, int64_t spot_id )
 {
-    size_t nm;
-    if( param->name_prefix != NULL ) {
-        OUTMSG(("%s.", param->name_prefix));
+    if ( param->cg_friendly_names ) {
+        KOutMsg("%.*s-1:%lu", spot_group_len, spot_group, spot_id);
     }
-    BufferedWriter(NULL, name, name_len, &nm);
-    if( param->spot_group_in_name && spot_group_len > 0 ) {
-        BufferedWriter(NULL, &spot_group_sep, 1, &nm);
-        BufferedWriter(NULL, spot_group, spot_group_len, &nm);
+    else {
+        if ( param->name_prefix != NULL )
+        {
+            KOutMsg( "%s.", param->name_prefix );
+        }
+        BufferedWriter( NULL, name, name_len, NULL );
+        if ( param->spot_group_in_name && spot_group_len > 0 )
+        {
+            BufferedWriter( NULL, &spot_group_sep, 1, NULL );
+            BufferedWriter( NULL, spot_group, spot_group_len, NULL );
+        }
     }
 }
 
-static
-void DumpUnalignedFastX(const SCol cols[], const SParam* param, uint32_t read_id,
-                        INSDC_coord_zero readStart, INSDC_coord_len readLen)
+
+static void DumpQuality( char const quality[], unsigned const count, bool const reverse, bool const quantize )
+{
+    if ( quality == NULL )
+    {
+        unsigned i;
+
+        for ( i = 0; i < count; ++i )
+        {
+            char const newValue = ((param->qualQuant && param->qualQuantSingle)?param->qualQuantSingle:30) + 33;
+
+            BufferedWriter( NULL, &newValue, 1, NULL );
+        }
+    }
+    else if ( reverse || quantize )
+    {
+        unsigned i;
+
+        for ( i = 0; i < count; ++i )
+        {
+            char const qual = quality[ reverse ? ( count - i - 1 ) : i ];
+
+            /* changed Jan 29 2013, because some runs dont have the phred_33 - type */
+            /* char const newValue = quantize ? param->qualQuant[ qual - 33 ] + 33 : qual; */
+            char const newValue = ( quantize ? param->qualQuant[ (unsigned int)qual ] : qual ) + 33 ;
+            BufferedWriter( NULL, &newValue, 1, NULL );
+        }
+    }
+    else
+    {
+        /* changed Jan 29 2013, because some runs dont have the phred_33 - type */
+        /* BufferedWriter( NULL, quality, count, NULL ); */
+        unsigned i;
+        for ( i = 0; i < count; ++i )
+        {
+            char const qual = quality[ i ] + 33;
+            BufferedWriter( NULL, &qual, 1, NULL );
+        }
+    }
+}
+
+
+static void DumpQuality_33( char const quality[], unsigned const count, bool const reverse, bool const quantize )
+{
+    if ( quality == NULL )
+    {
+        unsigned i;
+
+        for ( i = 0; i < count; ++i )
+        {
+            char const newValue = ((param->qualQuant && param->qualQuantSingle)?param->qualQuantSingle:30) + 33;
+
+            BufferedWriter( NULL, &newValue, 1, NULL );
+        }
+    }
+    else if ( reverse || quantize )
+    {
+        unsigned i;
+
+        for ( i = 0; i < count; ++i )
+        {
+            char const qual = quality[ reverse ? ( count - i - 1 ) : i ];
+            char const newValue = quantize ? param->qualQuant[ qual - 33 ] + 33 : qual;
+            BufferedWriter( NULL, &newValue, 1, NULL );
+        }
+    }
+    else
+    {
+        BufferedWriter( NULL, quality, count, NULL );
+    }
+}
+
+
+static void DumpUnalignedFastX( const SCol cols[], uint32_t read_id, INSDC_coord_zero readStart, INSDC_coord_len readLen, int64_t row_id )
 {
-    size_t nm;
     /* fast[AQ] represnted in SAM fields:
        [@|>]QNAME unaligned
        SEQ
        +
        QUAL
     */
-    BufferedWriter(NULL, param->fastq ? "@" : ">", 1, &nm);
+    BufferedWriter( NULL, param->fastq ? "@" : ">", 1, NULL );
+
     /* QNAME: [PFX.]SEQUENCE:NAME[#SPOT_GROUP] */
-    DumpName(param, cols[seq_NAME].base.str, cols[seq_NAME].len, '#', cols[seq_SPOT_GROUP].base.str, cols[seq_SPOT_GROUP].len);
-    if( read_id > 0 ) {
-        OUTMSG(("/%u", read_id));
+    DumpName( cols[ seq_NAME ].base.str, cols[ seq_NAME ].len, '#',
+              cols[ seq_SPOT_GROUP ].base.str, cols[ seq_SPOT_GROUP ].len, row_id );
+    if ( read_id > 0 )
+    {
+        KOutMsg( "/%u", read_id );
     }
-    BufferedWriter(NULL, " unaligned\n", 11, &nm);
+    BufferedWriter( NULL, " unaligned\n", 11, NULL );
+
     /* SEQ: SEQUENCE.READ */
-    BufferedWriter(NULL, &cols[seq_READ].base.str[readStart], readLen, &nm);
-    if( param->fastq ) {
+    BufferedWriter( NULL, &cols[ seq_READ ].base.str[readStart], readLen, NULL );
+    if ( param->fastq )
+    {
         /* QUAL: SEQUENCE.QUALITY */
-        BufferedWriter(NULL, "\n+\n", 3, &nm);
-        BufferedWriter(NULL, &cols[seq_QUALITY].base.str[readStart], readLen, &nm);
+        BufferedWriter( NULL, "\n+\n", 3, NULL );
+        DumpQuality( &cols[ seq_QUALITY ].base.str[ readStart ], readLen, false, param->quantizeQual );
     }
-    BufferedWriter(NULL, "\n", 1, &nm);
+    BufferedWriter( NULL, "\n", 1, NULL );
 }
 
-static
-void DumpAlignedFastX(const SCol cols[], const SParam* param, uint32_t read_id, bool primary)
+
+static void DumpAlignedFastX( const SCol cols[], int64_t const alignId, uint32_t read_id, bool primary, bool secondary )
 {
     size_t nm;
+    unsigned readId;
+    unsigned const nreads = cols[ alg_READ_LEN ].len;
 
-    /* fast[AQ] represnted in SAM fields:
-       [@|>]QNAME primary|secondary ref=RNAME pos=POS mapq=MAPQ
-       SEQ
-       +
-       QUAL
-    */
-    BufferedWriter(NULL, param->fastq ? "@" : ">", 1, &nm);
-    /* QNAME: [PFX.]SEQ_NAME[#SPOT_GROUP] */
-    nm = cols[alg_SPOT_GROUP].len ? alg_SPOT_GROUP : alg_SEQ_SPOT_GROUP;
-    DumpName(param, cols[alg_SEQ_NAME].base.str, cols[alg_SEQ_NAME].len, '#', cols[nm].base.str, cols[nm].len);
-    if( read_id > 0 ) {
-        OUTMSG(("/%u", read_id));
-    }
-    if( primary ) {
-        BufferedWriter(NULL, " primary", 8, &nm);
-    } else {
-        BufferedWriter(NULL, " secondary", 10, &nm);
-    }
-    /* RNAME: REF_NAME or REF_SEQ_ID */
-    BufferedWriter(NULL, " ref=", 5, &nm);
-    if( param->use_seqid ) {
-        BufferedWriter(NULL, cols[alg_REF_SEQ_ID].base.str, cols[alg_REF_SEQ_ID].len, &nm);
-    } else {
-        BufferedWriter(NULL, cols[alg_REF_NAME].base.str, cols[alg_REF_NAME].len, &nm);
-    }
-    /* POS: REF_POS, MAPQ: MAPQ */
-    OUTMSG((" pos=%u mapq=%i\n", cols[alg_REF_POS].base.coord0[0] + 1, cols[alg_MAPQ].base.i32[0]));
-    
-    /* SEQ: READ */
-    BufferedWriter(NULL, cols[alg_READ].base.str, cols[alg_READ].len, &nm);
-    if( param->fastq ) {
-        /* QUAL: SAM_QUALITY */
-        BufferedWriter(NULL, "\n+\n", 3, &nm);
-        BufferedWriter(NULL, cols[alg_SAM_QUALITY].base.str, cols[alg_SAM_QUALITY].len, &nm);
+    for ( readId = 0; readId < nreads; ++readId )
+    {
+        char const *qname = cols[ alg_SEQ_NAME ].base.str;
+        size_t qname_len = cols[ alg_SEQ_NAME ].len;
+        char synth_qname[ 40 ];
+	int64_t const spot_id = cols[alg_SEQ_SPOT_ID].len > 0 ? cols[alg_SEQ_SPOT_ID].base.i64[0] : 0;
+        char const *const read = cols[ alg_READ ].base.str + cols[ alg_READ_START ].base.coord0[ readId ];
+        char const *const qual = cols[ alg_SAM_QUALITY ].base.v
+                               ? cols[ alg_SAM_QUALITY ].base.str + cols[ alg_READ_START ].base.coord0[ readId ]
+                               : NULL;
+        unsigned const readlen = cols[ alg_READ_LEN ].base.coord_len[ readId ];
+
+        /* fast[AQ] represnted in SAM fields:
+           [@|>]QNAME primary|secondary ref=RNAME pos=POS mapq=MAPQ
+           SEQ
+           +
+           QUAL
+        */
+        BufferedWriter( NULL, param->fastq ? "@" : ">", 1, NULL );
+        /* QNAME: [PFX.]SEQ_NAME[#SPOT_GROUP] */
+        if ( qname_len == 0 || qname == NULL )
+        {
+            string_printf( synth_qname, sizeof( synth_qname ), &qname_len, "%li.%u", alignId, readId + 1 );
+            qname = synth_qname;
+        }
+        nm = cols[ alg_SPOT_GROUP ].len ? alg_SPOT_GROUP : alg_SEQ_SPOT_GROUP;
+        DumpName( qname, qname_len, '.', cols[ nm ].base.str, cols[ nm ].len, spot_id);
+
+        if ( read_id > 0 )
+        {
+            KOutMsg( "/%u", read_id );
+        }
+
+        if ( primary )
+        {
+            BufferedWriter( NULL, " primary", 8, NULL );
+        }
+        else if ( secondary )
+        {
+            BufferedWriter( NULL, " secondary", 10, NULL );
+        }
+
+        /* RNAME: REF_NAME or REF_SEQ_ID */
+        BufferedWriter( NULL, " ref=", 5, NULL );
+        if ( param->use_seqid )
+        {
+            BufferedWriter( NULL, cols[ alg_REF_SEQ_ID ].base.str, cols[ alg_REF_SEQ_ID ].len, NULL );
+        }
+        else
+        {
+            BufferedWriter( NULL, cols[ alg_REF_NAME ].base.str, cols[ alg_REF_NAME ].len, NULL );
+        }
+
+        /* POS: REF_POS, MAPQ: MAPQ */
+        KOutMsg( " pos=%u mapq=%i\n", cols[ alg_REF_POS ].base.coord0[ 0 ] + 1, cols[ alg_MAPQ ].base.i32[ 0 ] );
+        
+        /* SEQ: READ */
+        BufferedWriter( NULL, read, readlen, NULL );
+        if ( param->fastq )
+        {
+            /* QUAL: SAM_QUALITY */
+            BufferedWriter( NULL, "\n+\n", 3, NULL );
+            DumpQuality_33( qual, readlen, false, param->quantizeQual );
+        }
+        BufferedWriter( NULL, "\n", 1, NULL );
     }
-    BufferedWriter(NULL, "\n", 1, &nm);
 }
 
+
 static
-void DumpUnalignedSAM(const SCol cols[], const SParam* param,
-                      uint16_t flags, INSDC_coord_zero readStart, INSDC_coord_len readLen,
-                      const char* rnext, uint32_t rnext_len, INSDC_coord_zero pnext)
+void DumpUnalignedSAM( const SCol cols[], uint32_t flags, INSDC_coord_zero readStart, INSDC_coord_len readLen,
+                      char const *rnext, uint32_t rnext_len, INSDC_coord_zero pnext, char const readGroup[], int64_t row_id )
 {
-    size_t nm;
+    unsigned i;
+
     /* QNAME: [PFX.]NAME[.SPOT_GROUP] */
-    DumpName(param, cols[seq_NAME].base.str, cols[seq_NAME].len, '.', cols[seq_SPOT_GROUP].base.str, cols[seq_SPOT_GROUP].len);
+    DumpName( cols[ seq_NAME ].base.str, cols[ seq_NAME ].len, '.',
+              cols[ seq_SPOT_GROUP ].base.str, cols[ seq_SPOT_GROUP ].len, row_id );
 
     /* all these fields are const text for now */
-    OUTMSG(("\t%u\t*\t0\t0\t*\t%.*s\t%u\t0\t", (unsigned)flags,
-            rnext_len ? rnext_len : 1, rnext_len ? rnext : "*", pnext ? pnext : pnext));
+    KOutMsg( "\t%u\t*\t0\t0\t*\t%.*s\t%u\t0\t",
+             flags, rnext_len ? rnext_len : 1, rnext_len ? rnext : "*", pnext );
     /* SEQ: SEQUENCE.READ */
-    BufferedWriter(NULL, &cols[seq_READ].base.str[readStart], readLen, &nm);
-    BufferedWriter(NULL, "\t", 1, &nm);
+    if ( flags & 0x10 )
+    {
+        for( i = 0; i < readLen; i++ )
+        {
+            char base;
+
+            DNAReverseCompliment( &cols[ seq_READ ].base.str[ readStart + readLen - 1 - i ], &base, 1 );
+            BufferedWriter( NULL, &base, 1, NULL );
+        }
+    }
+    else
+    {
+        BufferedWriter( NULL, &cols[ seq_READ ].base.str[ readStart ], readLen, NULL );
+    }
+
+    BufferedWriter( NULL, "\t", 1, NULL );
     /* QUAL: SEQUENCE.QUALITY */
-    BufferedWriter(NULL, &cols[seq_QUALITY].base.str[readStart], readLen, &nm);
+    DumpQuality( &cols[ seq_QUALITY ].base.str[ readStart ], readLen, flags & 0x10, param->quantizeQual );
+
     /* optional fields: */
-    if( cols[seq_SPOT_GROUP].len > 0 ) {
+    if ( readGroup )
+    {
+        BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+        BufferedWriter( NULL, readGroup, strlen( readGroup ), NULL );
+    }
+    else if ( cols[ seq_SPOT_GROUP ].len > 0 )
+    {
         /* read group */
-        BufferedWriter(NULL, "\tRG:Z:", 6, &nm);
-        BufferedWriter(NULL, cols[seq_SPOT_GROUP].base.str, cols[seq_SPOT_GROUP].len, &nm);
+        BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+        BufferedWriter( NULL, cols[ seq_SPOT_GROUP ].base.str, cols[ seq_SPOT_GROUP ].len, NULL );
     }
-    BufferedWriter(NULL, "\n", 1, &nm);
+    BufferedWriter( NULL, "\n", 1, NULL );
 }
 
+
 static
-void DumpAlignedSAM(const SCol cols[], const SParam* param)
+void DumpAlignedSAM(SAM_dump_ctx_t *const ctx,
+                    DataSource const *ds,
+                    int64_t alignId,
+                    char const readGroup[],
+                    int type)
 {
-    size_t nm;
-    uint32_t flags;
-
-    /* QNAME: [SPOT_GROUP.]SEQ_NAME */
-    nm = cols[alg_SPOT_GROUP].len ? alg_SPOT_GROUP : alg_SEQ_SPOT_GROUP;
-    DumpName(param, cols[alg_SEQ_NAME].base.str, cols[alg_SEQ_NAME].len, '.', cols[nm].base.str, cols[nm].len);
-    /* FLAG: SAM_FLAGS */
-    flags = cols[alg_SAM_FLAGS].base.u32[0];
-    if( !param->unaligned ) {
-        flags &= ~0xC9; /* turn off 0x001 0x008 0x040 0x080 */
-    }
-    OUTMSG(("\t%u\t", flags));
-    /* RNAME: REF_NAME or REF_SEQ_ID */
-    if( param->use_seqid ) {
-        BufferedWriter(NULL, cols[alg_REF_SEQ_ID].base.str, cols[alg_REF_SEQ_ID].len, &nm);
-        BufferedWriter(NULL, "\t", 1, &nm);
-    } else {
-        BufferedWriter(NULL, cols[alg_REF_NAME].base.str, cols[alg_REF_NAME].len, &nm);
-        BufferedWriter(NULL, "\t", 1, &nm);
-    }
-    /* POS: REF_POS */
-    OUTMSG(("%u\t", cols[alg_REF_POS].base.coord0[0] + 1));
-    /* MAPQ: MAPQ */
-    OUTMSG(("%i\t", cols[alg_MAPQ].base.i32[0]));
-    /* CIGAR: CIGAR_* */
-    BufferedWriter(NULL, cols[alg_CIGAR].base.str, cols[alg_CIGAR].len, &nm);
-    BufferedWriter(NULL, "\t", 1, &nm);
-    
-    /* RNEXT: MATE_REF_NAME or '*' */
-    if( cols[alg_MATE_REF_NAME].len ) {
-        if( cols[alg_MATE_REF_NAME].len == cols[alg_REF_NAME].len &&
-            memcmp(cols[alg_MATE_REF_NAME].base.str, cols[alg_REF_NAME].base.str, cols[alg_MATE_REF_NAME].len) == 0 ) {
-            BufferedWriter(NULL, "=\t", 2, &nm);
-        } else {
-            BufferedWriter(NULL, cols[alg_MATE_REF_NAME].base.str, cols[alg_MATE_REF_NAME].len, &nm);
-            BufferedWriter(NULL, "\t", 1, &nm);
-        }
-    } else {
-        BufferedWriter(NULL, "*\t", 2, &nm);
-    }
-    /* PNEXT: MATE_REF_POS or 0 */
-    if( cols[alg_MATE_REF_POS].len ) {
-        OUTMSG(("%u\t", cols[alg_MATE_REF_POS].base.coord0[0] + 1));
-    } else {
-        BufferedWriter(NULL, "0\t", 2, &nm);
-    }
-    /* TLEN: TEMPLATE_LEN */
-    OUTMSG(("%i\t", cols[alg_TEMPLATE_LEN].base.i32[0]));
-    /* SEQ: READ */
-    BufferedWriter(NULL, cols[alg_READ].base.str, cols[alg_READ].len, &nm);
-    BufferedWriter(NULL, "\t", 1, &nm);
-    /* QUAL: SAM_QUALITY */
-    BufferedWriter(NULL, cols[alg_SAM_QUALITY].base.str, cols[alg_SAM_QUALITY].len, &nm);
+    unsigned const nreads = ds->cols[ alg_READ_LEN ].len;
+    SCol const *const cols = ds->cols;
+    int64_t const spot_id = cols[alg_SEQ_SPOT_ID].len > 0 ? cols[alg_SEQ_SPOT_ID].base.i64[0] : 0;
+    INSDC_coord_one const read_id = cols[alg_SEQ_READ_ID].len > 0 ? cols[alg_SEQ_READ_ID].base.coord1[0] : 0;
+    INSDC_SRA_read_filter const *align_filter = cols[alg_READ_FILTER].len == nreads ? cols[alg_READ_FILTER].base.read_filter : NULL;
+    INSDC_SRA_read_filter seq_filter = 0;
+    unsigned readId;
+    unsigned cigOffset = 0;
+    
+    if (align_filter == NULL && spot_id && read_id && ctx->seq.cols) {
+        rc_t rc;
+        
+        rc = Cursor_Read(&ctx->seq, spot_id, seq_READ_FILTER, 1);
+        if (rc == 0 && ctx->seq.cols[seq_READ_FILTER].len >= read_id)
+            seq_filter = ctx->seq.cols[seq_READ_FILTER].base.read_filter[read_id - 1];
+    }
+    for ( readId = 0; readId < nreads; ++readId ) {
+        char const *qname = cols[ alg_SEQ_NAME ].base.str;
+        size_t qname_len = cols[ alg_SEQ_NAME ].len;
+        char const *const read = cols[ alg_READ ].base.str + cols[ alg_READ_START ].base.coord0[ readId ];
+        char const *const qual = cols[ alg_SAM_QUALITY ].base.v
+                               ? cols[ alg_SAM_QUALITY ].base.str + cols[ alg_READ_START ].base.coord0[ readId ]
+                               : NULL;
+        unsigned const readlen = nreads > 1 ? cols[ alg_READ_LEN ].base.coord_len[ readId ] : cols[ alg_READ ].len;
+        unsigned const sflags = cols[ alg_SAM_FLAGS ].base.v ? cols[ alg_SAM_FLAGS ].base.u32[ readId ] : 0;
+        INSDC_SRA_read_filter const filt = align_filter ? align_filter[readId] : seq_filter;
+        unsigned const flags = (sflags & ~((unsigned)0x200)) | ((filt == SRA_READ_FILTER_REJECT) ? 0x200 : 0);
+        char const *const cigar = cols[ alg_CIGAR ].base.str + cigOffset;
+        unsigned const cigLen = nreads > 1 ? cols[ alg_CIGAR_LEN ].base.coord_len[ readId ] : cols[ alg_CIGAR ].len;
+        size_t nm;
+        char synth_qname[1024];
+        
+        cigOffset += cigLen;
+        if ( qname_len == 0 || qname == NULL )
+        {
+            string_printf( synth_qname, sizeof( synth_qname ), &qname_len, "ALLELE_%li.%u", alignId, readId + 1 );
+            qname = synth_qname;
+        }
+        else if (ds->type == edstt_EvidenceAlignment) {
+            string_printf( synth_qname, sizeof( synth_qname ), &qname_len, "%u/ALLELE_%li.%u", spot_id, cols[ alg_REF_ID ].base.i64[ readId ], cols[ alg_REF_PLOIDY ].base.u32[ readId ] );
+            qname = synth_qname;
+        }
+        nm = cols[ alg_SPOT_GROUP ].len ? alg_SPOT_GROUP : alg_SEQ_SPOT_GROUP;
+        DumpName( qname, qname_len, '.', cols[ nm ].base.str, cols[ nm ].len, spot_id );
 
-    /* optional fields: */
-    if( cols[alg_SPOT_GROUP].len > 0 ) {
-        /* read group */
-        BufferedWriter(NULL, "\tRG:Z:", 6, &nm);
-        BufferedWriter(NULL, cols[alg_SPOT_GROUP].base.str, cols[alg_SPOT_GROUP].len, &nm);
-    } else if( cols[alg_SEQ_SPOT_GROUP].len > 0 ) {
-        /* backward compatibility */
-        BufferedWriter(NULL, "\tRG:Z:", 6, &nm);
-        BufferedWriter(NULL, cols[alg_SEQ_SPOT_GROUP].base.str, cols[alg_SEQ_SPOT_GROUP].len, &nm);
+        /* FLAG: SAM_FLAGS */
+        if (ds->type == edstt_EvidenceAlignment) {
+            bool const cmpl = cols[alg_REVERSED].base.v && readId < cols[alg_REVERSED].len ? cols[alg_REVERSED].base.tf[readId] : false;
+            
+            KOutMsg( "\t%u\t", 1 | (cmpl ? 0x10 : 0) | (read_id == 1 ? 0x40 : 0x80) );
+        }
+        else if ( !param->unaligned      /** not going to dump unaligned **/
+             && ( flags & 0x1 )     /** but we have sequenced multiple fragments **/
+             && ( flags & 0x8 ) )   /** and not all of them align **/
+        {
+            /*** remove flags talking about multiple reads **/
+            /* turn off 0x001 0x008 0x040 0x080 */
+            KOutMsg( "\t%u\t", flags & ~0xC9 );
+        }
+        else
+            KOutMsg( "\t%u\t", flags );
+        
+        if ( ds->type == edstt_EvidenceAlignment && type == 0 )
+            KOutMsg( "ALLELE_%li.%u", cols[ alg_REF_ID ].base.i64[ readId ], cols[ alg_REF_PLOIDY ].base.u32[ readId ] );
+        else
+        {
+            /* RNAME: REF_NAME or REF_SEQ_ID */
+            if ( param->use_seqid )
+                BufferedWriter( NULL, cols[ alg_REF_SEQ_ID ].base.str, cols[ alg_REF_SEQ_ID ].len, NULL );
+            else
+                BufferedWriter( NULL, cols[ alg_REF_NAME ].base.str, cols[ alg_REF_NAME ].len, NULL );
+        }
+        BufferedWriter( NULL, "\t", 1, NULL );
+        
+        /* POS: REF_POS */
+        KOutMsg( "%i\t", cols[ alg_REF_POS ].base.coord0[ 0 ] + 1 );
+        /* MAPQ: MAPQ */
+        KOutMsg( "%i\t", cols[ alg_MAPQ ].base.i32[ 0 ] );
+        /* CIGAR: CIGAR_* */
+        if (ds->type == edstt_EvidenceInterval) {
+            unsigned i;
+            
+            for (i = 0; i != cigLen; ++i) {
+                char ch = cigar[i];
+                
+                if (ch == 'S')
+                    ch = 'I';
+                BufferedWriter(NULL, &ch, 1, NULL);
+            }
+        }
+        else
+            BufferedWriter( NULL, cigar, cigLen, NULL );
+        BufferedWriter( NULL, "\t", 1, NULL );
+        
+        /* RNEXT: MATE_REF_NAME or '*' */
+        /* PNEXT: MATE_REF_POS or 0 */
+        if ( cols[ alg_MATE_REF_NAME ].len )
+        {
+            if ( cols[ alg_MATE_REF_NAME ].len == cols[ alg_REF_NAME ].len &&
+                memcmp( cols[ alg_MATE_REF_NAME ].base.str, cols[ alg_REF_NAME ].base.str, cols[ alg_MATE_REF_NAME ].len ) == 0 )
+            {
+                BufferedWriter( NULL, "=\t", 2, NULL );
+            }
+            else
+            {
+                BufferedWriter( NULL, cols[ alg_MATE_REF_NAME ].base.str, cols[ alg_MATE_REF_NAME ].len, NULL );
+                BufferedWriter( NULL, "\t", 1, NULL );
+            }
+            KOutMsg( "%u\t", cols[ alg_MATE_REF_POS ].base.coord0[ 0 ] + 1 );
+        }
+        else
+        {
+            BufferedWriter( NULL, "*\t0\t", 4, NULL );
+        }
+        /* TLEN: TEMPLATE_LEN */
+        KOutMsg( "%i\t", cols[ alg_TEMPLATE_LEN ].base.v ? cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ] : 0 );
+        /* SEQ: READ */
+        BufferedWriter( NULL, read, readlen, NULL );
+        BufferedWriter( NULL, "\t", 1, NULL );
+        /* QUAL: SAM_QUALITY */
+        DumpQuality_33( qual, readlen, false, param->quantizeQual );
+    
+        /* optional fields: */
+        if ( ds->type == edstt_EvidenceInterval )
+        {
+            KOutMsg( "\tRG:Z:ALLELE_%u", readId + 1 );
+        }
+        if ( readGroup )
+        {
+            BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+            BufferedWriter( NULL, readGroup, strlen( readGroup ), NULL );
+        }
+        else if ( cols[ alg_SPOT_GROUP ].len > 0 )
+        {
+            /* read group */
+            BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+            BufferedWriter( NULL, cols[ alg_SPOT_GROUP ].base.str, cols[ alg_SPOT_GROUP ].len, NULL );
+        }
+        else if ( cols[ alg_SEQ_SPOT_GROUP ].len > 0 )
+        {
+            /* backward compatibility */
+            BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+            BufferedWriter( NULL, cols[ alg_SEQ_SPOT_GROUP ].base.str, cols[ alg_SEQ_SPOT_GROUP ].len, NULL );
+        }
+        if ( param->cg_style > 0 && cols[ alg_CG_TAGS_STR ].len > 0 )
+        {
+            BufferedWriter( NULL, cols[ alg_CG_TAGS_STR ].base.str, cols[ alg_CG_TAGS_STR ].len, NULL );
+        }
+
+        if ( param->cg_style > 0 && cols[ alg_ALIGN_GROUP ].len > 0 )
+        {
+            char const *ZI = cols[ alg_ALIGN_GROUP ].base.str;
+            unsigned i;
+            
+            for ( i = 0; i < cols[ alg_ALIGN_GROUP ].len - 1; ++i )
+            {
+                if ( ZI[ i ] == '_' )
+                {
+                    KOutMsg( "\tZI:i:%.*s\tZA:i:%.1s", i, ZI, ZI + i + 1 );
+                    break;
+                }
+            }
+        }
+        else if ( ds->type == edstt_EvidenceAlignment && type == 1 )
+            KOutMsg( "\tZI:i:%li\tZA:i:%u", cols[ alg_REF_ID ].base.i64[ readId ], cols[ alg_REF_PLOIDY ].base.u32[ readId ] );
+
+        /* align id */
+        if ( param->xi )
+            KOutMsg( "\tXI:i:%li", alignId );
+
+        /* hit count */
+        if (cols[alg_ALIGNMENT_COUNT].len)
+            KOutMsg( "\tNH:i:%i", (int)cols[ alg_ALIGNMENT_COUNT ].base.u8[ readId ] );
+
+        /* edit distance */
+        if ( cols[ alg_EDIT_DISTANCE ].len )
+            KOutMsg( "\tNM:i:%i", cols[ alg_EDIT_DISTANCE ].base.i32[ readId ] );
+
+        KOutMsg( "\n" );
     }
-    /* edit distance */
-    OUTMSG(("\tNM:i:%i\n", cols[alg_EDIT_DISTANCE].len ? cols[alg_EDIT_DISTANCE].base.i32[0] : 0));
 }
 
-static
-rc_t DumpUnalignedSpot(const SParam* param, const SCol calg_col[], int64_t row_id,
-                       const VCursor* cseq, SCol cseq_col[], int col_id, uint64_t* rcount)
+
+static rc_t DumpUnalignedReads( SAM_dump_ctx_t *const ctx, SCol const calg_col[], int64_t row_id, uint64_t* rcount )
 {
     rc_t rc = 0;
     uint32_t i, nreads = 0;
 
-    if( calg_col != NULL ) {
+    if ( calg_col != NULL )
+    {
+        if ( calg_col[ alg_SAM_FLAGS ].base.u32[ 0 ] & 0x02 )
+        {
+            /* skip all aligned rows by flag */
+            return rc;
+        }
         /* get primary alignments only */
-        rc = Cursor_Read(cseq, calg_col[alg_SEQ_SPOT_ID].base.i64[0], &cseq_col[col_id]);
-
-        for(i = 0; i < cseq_col[col_id].len; i++) {
-            if( cseq_col[col_id].base.i64[i] != 0 ) {
-                if( cseq_col[col_id].base.i64[i] < row_id ) {
-                    /* unaligned were printed with 1st aligment */
-                    return rc;
+        rc = Cursor_Read( &ctx->seq, calg_col[ alg_SEQ_SPOT_ID ].base.i64[ 0 ], seq_PRIMARY_ALIGNMENT_ID, ~(unsigned)0 );
+        if ( rc == 0 )
+        {
+            for ( i = 0; i < ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].len; i++ )
+            {
+                if ( ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[ i ] != 0 )
+                {
+                    if ( ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[ i ] < row_id )
+                    {
+                        /* unaligned were printed with 1st aligment */
+                        return rc;
+                    }
+                }
+                else
+                {
+                    nreads++;
                 }
-            } else {
-                nreads++;
             }
+            if ( nreads == ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].len )
+            {
+                /* skip all aligned rows by actual data, if flag above is not set properly */
+                return rc;
+            }
+            row_id = calg_col[ alg_SEQ_SPOT_ID ].base.i64[ 0 ];
         }
-        if( nreads == cseq_col[col_id].len ) {
-            /* all aligned */
-            return rc;
-        }
-        row_id = calg_col[alg_SEQ_SPOT_ID].base.i64[0];
     }
-    if( (rc = Cursor_Read(cseq, row_id, cseq_col)) == 0 ) {
-        nreads = cseq_col[seq_READ_LEN].idx != 0 ? cseq_col[seq_READ_LEN].len : 1;
-
-        for(i = 0; i < nreads; i++) {
-            INSDC_coord_zero readStart;
-            INSDC_coord_len readLen;
+    if ( rc == 0 )
+    {
+        rc = Cursor_Read( &ctx->seq, row_id, 0, ~(unsigned)0 );
+        if ( rc == 0 )
+        {
+            unsigned non_empty_reads = 0;
+            
+            nreads = ctx->seq.cols[ seq_READ_LEN ].idx != 0 ? ctx->seq.cols[ seq_READ_LEN ].len : 1;
 
-            if( calg_col != NULL && cseq_col[col_id].base.i64[i] != 0 ) {
-                continue;
-            }
-            if( cseq_col[seq_READ_TYPE].idx != 0 && !(cseq_col[seq_READ_TYPE].base.read_type[i] & SRA_READ_TYPE_BIOLOGICAL) ) {
-                continue;
-            }
-            readLen = cseq_col[seq_READ_LEN].idx ? cseq_col[seq_READ_LEN].base.coord_len[i] : cseq_col[seq_READ].len;
-            if( readLen == 0 ) {
-                continue;
+            for( i = 0; i < nreads; i++ ) {
+                unsigned const readLen = ctx->seq.cols[ seq_READ_LEN ].idx
+                                       ? ctx->seq.cols[ seq_READ_LEN ].base.coord_len[ i ]
+                                       : 0;
+                
+                if (readLen)
+                    ++non_empty_reads;
             }
-            readStart = cseq_col[seq_READ_START].idx ? cseq_col[seq_READ_START].base.coord0[i] : 0;
-            if( param->fasta || param->fastq) {
-                DumpUnalignedFastX(cseq_col, param, nreads > 1 ? i + 1 : 0, readStart, readLen);
-            } else {
-                if( calg_col == NULL ) {
-                    DumpUnalignedSAM(cseq_col, param,
-                        4 | (nreads > 1 ? 1 : 0) | (i == 0 ? 0x40 : 0) | (i == nreads - 1 ? 0x80 : 0),
-                        readStart, readLen, NULL, 0, 0);
-                } else {
-                    int c = param->use_seqid ? alg_REF_SEQ_ID : alg_REF_NAME;
-                    uint16_t flags = 1 | 4 |
-                                     ((calg_col[alg_SAM_FLAGS].base.u32[0] & 0x10) << 1) |
-                                     ((calg_col[alg_SAM_FLAGS].base.u32[0] & 0x40) ? 0x80 : 0x40) |
-                                     (calg_col[alg_SAM_FLAGS].base.u32[0] & 0x400);
-                    DumpUnalignedSAM(cseq_col, param, flags, readStart, readLen,
-                        calg_col[c].base.str, calg_col[c].len, calg_col[alg_REF_POS].base.coord0[0] + 1);
+            for( i = 0; i < nreads; i++ )
+            {
+                INSDC_coord_zero readStart;
+                INSDC_coord_len readLen;
+
+                if ( ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].idx != 0 && 
+                     ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[ i ] != 0 )
+                {
+                    continue;
                 }
-            }
-            if( rcount != NULL ) {
-                *rcount += 1;
+
+                if ( ctx->seq.cols[ seq_READ_TYPE ].idx != 0 && 
+                     !( ctx->seq.cols[ seq_READ_TYPE ].base.read_type[ i ] & SRA_READ_TYPE_BIOLOGICAL ) )
+                {
+                    continue;
+                }
+
+                readLen = ctx->seq.cols[ seq_READ_LEN ].idx ? 
+                            ctx->seq.cols[ seq_READ_LEN ].base.coord_len[ i ] :
+                            ctx->seq.cols[ seq_READ ].len;
+                if ( readLen == 0 )
+                {
+                    continue;
+                }
+
+                readStart = ctx->seq.cols[ seq_READ_START ].idx ?
+                                ctx->seq.cols[ seq_READ_START ].base.coord0[ i ] :
+                                0;
+                if ( param->fasta || param->fastq )
+                {
+                    DumpUnalignedFastX( ctx->seq.cols, nreads > 1 ? i + 1 : 0, readStart, readLen, row_id );
+                }
+                else
+                {
+                    uint32_t cflags = 0x4;
+                    if ( param->reverse_unaligned )
+                    {
+                        if ( ctx->seq.cols[ seq_READ_TYPE ].base.read_type[ i ] & SRA_READ_TYPE_REVERSE )
+                        {
+                            cflags |= 0x10;
+                        }
+                        if ( ctx->seq.cols[ seq_READ_TYPE ].base.read_type[ i == nreads - 1 ? 0 : ( i + 1 ) ] & SRA_READ_TYPE_REVERSE )
+                        {
+                            cflags |= 0x20;
+                        }
+                    }
+                    if ( ctx->seq.cols[ seq_READ_FILTER ].idx != 0 )
+                    {
+                        if ( ctx->seq.cols[ seq_READ_FILTER ].base.read_filter[ i ] == SRA_READ_FILTER_REJECT )
+                        {
+                            cflags |= 0x200;
+                        }
+                        else if ( ctx->seq.cols[ seq_READ_FILTER ].base.read_filter[ i ] == SRA_READ_FILTER_CRITERIA )
+                        {
+                            cflags |= 0x400;
+                        }
+                    }
+                    if ( calg_col == NULL )
+                    {
+                        DumpUnalignedSAM( ctx->seq.cols, cflags |
+                                          ( non_empty_reads > 1 ? ( 0x1 | 0x8 | ( i == 0 ? 0x40 : 0x00 ) | ( i == nreads - 1 ? 0x80 : 0x00 ) ) : 0x00 ),
+                                          readStart, readLen, NULL, 0, 0, ctx->readGroup, row_id );
+                    }
+                    else
+                    {
+                        int c = param->use_seqid ? alg_REF_SEQ_ID : alg_REF_NAME;
+                        uint16_t flags = cflags | 0x1 |
+                                         ( ( calg_col[ alg_SAM_FLAGS ].base.u32[ 0 ] & 0x10 ) << 1 ) |
+                                         ( ( calg_col[ alg_SAM_FLAGS ].base.u32[ 0 ] & 0x40 ) ? 0x80 : 0x40 );
+                        DumpUnalignedSAM( ctx->seq.cols, flags, readStart, readLen,
+                                          calg_col[ c ].base.str, calg_col[ c ].len,
+                                          calg_col[ alg_REF_POS ].base.coord0[ 0 ] + 1, ctx->readGroup, row_id );
+                    }
+                }
+                *rcount = *rcount + 1;
             }
         }
     }
     return rc;
 }
 
-static
-bool AlignRegionFilter(const SParam* param, const SCol* cols)
+
+static bool AlignRegionFilter( SCol const *cols )
 {
-    if( cols[alg_REF_NAME].len != 0 || cols[alg_REF_SEQ_ID].len != 0 ) {
-        uint32_t i, j, k;
+    if ( param->region_qty == 0 )
+        return true;
+    if ( cols[ alg_REF_NAME ].len != 0 || cols[ alg_REF_SEQ_ID ].len != 0 )
+    {
+        unsigned i;
 
-        assert(cols[alg_REF_POS].len == cols[alg_REF_LEN].len);
+        assert( cols[ alg_REF_POS ].len == cols[ alg_REF_LEN ].len );
 
-        for(i = 0; i < param->region_qty; i++) {
-            for(j = 0; j < cols[alg_REF_POS].len; j++) {
-                for(k = 0; k < param->region[i].rq; k++) {
-                    if( !( cols[alg_REF_POS].base.coord0[j] + cols[alg_REF_LEN].base.coord_len[j] < param->region[i].r[k].from ||
-                           cols[alg_REF_POS].base.coord0[j] > param->region[i].r[k].to ) ) {
+        for ( i = 0; i < param->region_qty; i++ )
+        {
+            unsigned j;
+            
+            for ( j = 0; j < cols[ alg_REF_POS ].len; j++ )
+            {
+                unsigned const refStart_zero = cols[ alg_REF_POS ].base.coord0[ j ];
+                unsigned const refEnd_exclusive = refStart_zero + cols[ alg_REF_LEN ].base.coord_len[ j ];
+                unsigned k;
+                
+                for ( k = 0; k < param->region[ i ].rq; k++ )
+                {
+                    unsigned const from_zero = param->region[ i ].r[ k ].from;
+                    unsigned const to_inclusive = param->region[ i ].r[ k ].to;
+                    
+                    if ( from_zero < refEnd_exclusive && refStart_zero <= to_inclusive )
                         return true;
-                    }
                 }
             }
         }
@@ -764,19 +1805,26 @@ bool AlignRegionFilter(const SParam* param, const SCol* cols)
     return false;
 }
 
-static
-bool AlignDistanceFilter(const SParam* param, const SCol* cols)
+
+static bool AlignDistanceFilter( SCol const *cols )
 {
-    if( param->mp_dist_qty != 0 || param->mp_dist_unknown ) {
-        if( cols[alg_TEMPLATE_LEN].len == 0 && param->mp_dist_unknown ) {
+    if ( param->mp_dist_qty != 0 || param->mp_dist_unknown )
+    {
+        if ( cols[ alg_TEMPLATE_LEN ].len == 0 && param->mp_dist_unknown )
+        {
             return true;
-        } else {
+        }
+        else
+        {
             uint32_t i, j;
-            for(i = 0; i < param->mp_dist_qty; i++) {
-                for(j = 0; j < cols[alg_TEMPLATE_LEN].len; j++) {
-                    if( (cols[alg_TEMPLATE_LEN].base.i32[j] == 0 && param->mp_dist_unknown) ||
-                        (param->mp_dist[i].from <= cols[alg_TEMPLATE_LEN].base.i32[j] &&
-                         cols[alg_TEMPLATE_LEN].base.i32[j] <= param->mp_dist[i].to) ) {
+            for( i = 0; i < param->mp_dist_qty; i++ )
+            {
+                for( j = 0; j < cols[ alg_TEMPLATE_LEN ].len; j++ )
+                {
+                    if ( ( cols[ alg_TEMPLATE_LEN ].base.i32[ j ] == 0 && param->mp_dist_unknown ) ||
+                         ( param->mp_dist[ i ].from <= cols[ alg_TEMPLATE_LEN ].base.i32[ j ] &&
+                         cols[ alg_TEMPLATE_LEN ].base.i32[ j ] <= param->mp_dist[ i ].to ) )
+                    {
                         return true;
                     }
                 }
@@ -787,765 +1835,3036 @@ bool AlignDistanceFilter(const SParam* param, const SCol* cols)
     return true;
 }
 
-static
-rc_t DumpAlignmentList(const SParam* param, const VCursor* curs, SCol* cols, const SCol* ids,
-                       const VCursor* cseq, SCol cseq_col[], int col_id)
+
+typedef struct cgOp_s
 {
-    rc_t rc = 0;
-    uint32_t i;
-
-    for(i = 0; rc == 0 && i < ids->len; i++) {
-        if( (rc = Cursor_Read(curs, ids->base.i64[i], &cols[alg_REGION_FILTER])) == 0 ) {
-            if( AlignRegionFilter(param, cols) && AlignDistanceFilter(param, cols) ) {
-                if( (rc = Cursor_Read(curs, ids->base.i64[i], cols)) == 0 ) {
-                    if( param->fasta || param->fastq) {
-                        DumpAlignedFastX(cols, param, cols[alg_SEQ_READ_ID].base.coord1[0], cseq != NULL);
-                    } else {
-                        DumpAlignedSAM(cols, param);
-                    }
-                    if( cseq_col && param->unaligned ) {
-                        rc = DumpUnalignedSpot(param, cols, ids->base.i64[i], cseq, cseq_col, col_id, NULL);
-                    }
-                }
-            }
-        } else if( GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcRow ) {
-            /* a gap in ids? */
-            rc = 0;
+    uint16_t length;
+    uint8_t type; /* 0: match, 1: insert, 2: delete */
+    char code;
+} cgOp;
+
+
+static void print_CG_cigar( int line, cgOp const op[], unsigned const ops, unsigned const gap[ 3 ] )
+{
+#if _DEBUGGING
+    unsigned i;
+    
+    SAM_DUMP_DBG( 3, ( "%5i: ", line ) );
+    for ( i = 0; i < ops; ++i )
+    {
+        if ( gap && ( i == gap[ 0 ] || i == gap[ 1 ] || i == gap[ 2 ] ) )
+        {
+            SAM_DUMP_DBG( 3, ( "%u%c", op[ i ].length, tolower( op[ i ].code ) ) );
+        }
+        else
+        {
+            SAM_DUMP_DBG( 3, ( "%u%c", op[ i ].length, toupper( op[ i ].code ) ) );
         }
-        rc = rc ? rc : Quitting();
     }
-    return rc;
+    SAM_DUMP_DBG( 3, ( "\n" ) );
+#endif
 }
 
-static
-rc_t DumpAlignments(const SParam* param, const VTable* talgP, const VTable* talgS,
-                    const VTable* tref, const VTable* tseq)
+/* gap contains the indices of the wobbles in op
+ * gap[0] is between read 1 and 2; it is the 'B'
+ * gap[1] is between read 2 and 3; it is an 'N'
+ * gap[2] is between read 3 and 4; it is an 'N'
+ */
+
+static rc_t CIGAR_to_CG_Ops( cgOp op[], unsigned const maxOps,
+                             unsigned *const opCnt,
+                             unsigned gap[ 3 ],
+                             char const cigar[], unsigned const ciglen,
+                             unsigned *const S_adjust,
+                             unsigned *const CG_adjust,
+                             unsigned const read,
+                             bool const reversed )
 {
-    rc_t rc = 0;
-    const VCursor *calgP = NULL, *calgS = NULL, *cseq = NULL;
-
-    /* see enums above!!! */
-    SCol calg_col[] = {
-        {"SEQ_NAME", 0, {NULL}, 0, false},
-        {"SAM_FLAGS", 0, {NULL}, 0, false},
-        {"MAPQ", 0, {NULL}, 0, false},
-        {"?CIGAR field column name?", 0, {NULL}, 0, false},
-        {"MATE_REF_NAME", 0, {NULL}, 0, false},
-        {"MATE_REF_POS", 0, {NULL}, 0, false},
-        {"?READ filed column name?", 0, {NULL}, 0, false},
-        {"SAM_QUALITY", 0, {NULL}, 0, false},
-        {"SPOT_GROUP", 0, {NULL}, 0, true},
-        {"SEQ_SPOT_GROUP", 0, {NULL}, 0, true},
-        {"SEQ_SPOT_ID", 0, {NULL}, 0, true},
-        {"SEQ_READ_ID", 0, {NULL}, 0, true},
-        {"EDIT_DISTANCE", 0, {NULL}, 0, false},
-        /* this are read before any other for filtering so they must be last */
-        {"REF_NAME", 0, {NULL}, 0, false},
-        {"REF_SEQ_ID", 0, {NULL}, 0, false},
-        {"REF_POS", 0, {NULL}, 0, false},
-        {"REF_LEN", 0, {NULL}, 0, false},
-        {"TEMPLATE_LEN", 0, {NULL}, 0, false},
-        {NULL, 0, {NULL}, 0, false}
-    },
-    cseq_col[] = {
-        /* APPEND ONLY TO THIS LIST OF COLUMNS!!!
-           unless you change enum above and SCol in DumpUnaligned below in sync!! */
-        {"READ", 0, {NULL}, 0, false},
-        {"(INSDC:quality:text:phred_33)QUALITY", 0, {NULL}, 0, false},
-        {"SPOT_GROUP", 0, {NULL}, 0, true},
-        {"READ_START", 0, {NULL}, 0, true},
-        {"READ_LEN", 0, {NULL}, 0, true},
-        {"READ_TYPE", 0, {NULL}, 0, true},
-        {"NAME", 0, {NULL}, 0, true},
-        {"PRIMARY_ALIGNMENT_ID", 0, {NULL}, 0, true},
-        {NULL, 0, {NULL}, 0, false}
-    };
-    if( param->fasta || param->fastq ) {
-        calg_col[alg_READ].name = "RAW_READ";
-    } else {
-        calg_col[alg_READ].name = param->hide_identical? "MISMATCH_READ" : "READ";
-    }
-    calg_col[alg_CIGAR].name = param->long_cigar ? "CIGAR_LONG" : "CIGAR_SHORT";
-
-    if( (rc = Cursor_Init(talgP, &calgP, calg_col)) == 0 &&
-        (rc = Cursor_Init(talgS, &calgS, calg_col)) == 0 &&
-        ((param->unaligned && (rc = Cursor_Init(tseq,  &cseq, cseq_col)) == 0) || !param->unaligned) ) {
-
-        int64_t start = 0;
-        uint64_t count = 0;
-
-        if( param->region_qty == 0 ) {
-            SAM_DUMP_DBG(2, ("%s PRIMARY_ALIGNMENTs\n", param->accession));
-            if( rc == 0 && (rc = VCursorIdRange(calgP, 0, &start, &count)) == 0 ) {
-                uint64_t rcount = 0;
-
-                SAM_DUMP_DBG(2, ("range from %ld qty %lu\n", start, count));
-                while( count > 0 && rc == 0 ) {
-                    if( (rc = Cursor_Read(calgP, start, &calg_col[alg_DISTANCE_FILTER])) == 0 ) {
-                        if( AlignDistanceFilter(param, calg_col) ) {
-                            if( (rc = Cursor_Read(calgP, start, calg_col)) == 0 ) {
-                                if( param->fasta || param->fastq ) {
-                                    DumpAlignedFastX(calg_col, param, calg_col[alg_SEQ_READ_ID].base.coord1[0], true);
-                                } else {
-                                    DumpAlignedSAM(calg_col, param);
-                                }
-                                if( param->unaligned ) {
-                                    rc = DumpUnalignedSpot(param, calg_col, start, cseq, cseq_col, seq_NAME + 1, &rcount);
-                                }
-                            }
-                        }
-                    } else if( GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcRow ) {
-                        /* a gap in ids? */
-                        rc = 0;
+    unsigned i;
+    unsigned ops = 0;
+    unsigned gapno;
+
+    *opCnt = 0;
+    *S_adjust = 0;
+    for ( i = 0; i < ciglen; ++ops )
+    {
+        char opChar=0;
+        int opLen=0;
+        int n;
+
+	for(n=0;n+i<ciglen && isdigit(cigar[n+i]);n++){
+		opLen = opLen * 10 + cigar[n+i] - '0';
+	}
+	if(n+i<ciglen){
+		opChar = cigar[n+i];
+		n++;
+	}
+        if ( ops + 1 >= maxOps )
+            return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+
+        i += n;
+        
+        op[ ops ].length = opLen;
+        op[ ops ].code = opChar;
+        switch ( opChar )
+        {
+        case 'M':
+        case '=':
+        case 'X':
+            op[ ops ].type = 0;
+            break;
+        case 'S':
+            *S_adjust += opLen;
+        case 'I':
+            op[ ops ].type = 1;
+            op[ ops ].code = 'I';
+            break;
+        case 'D':
+            op[ ops ].type = 2;
+            break;
+        default:
+            return RC( rcExe, rcData, rcReading, rcConstraint, rcViolated );
+        }
+    }
+    *opCnt = ops;
+    gap[ 0 ] = gap[ 1 ] = gap[ 2 ] = ops;
+    print_CG_cigar( __LINE__, op, ops, NULL );
+    if ( ops < 3 )
+        return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+
+    {
+        unsigned fwd = 0; /* 5 10 10 10 */
+        unsigned rev = 0; /* 10 10 10 5 */
+        unsigned acc; /* accumulated length */
+        
+        if ( ( read == 1 && !reversed ) || ( read == 2 && reversed ) )
+        {
+            for ( i = 0, acc = 0; i < ops  && acc <=5; ++i )
+            {
+                if ( op[ i ].type != 2 )
+                {
+                    acc += op[ i ].length;
+                    if ( acc == 5 && op[ i + 1 ].type == 1 )
+                    {
+                        fwd = i + 1;
+                        break;
+                    }
+                    else if ( acc > 5 )
+                    {
+                        unsigned const right = acc - 5;
+                        unsigned const left = op[ i ].length - right;
+                        
+                        memmove( &op[ i + 2 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+                        ops += 2;
+                        op[ i ].length = left;
+                        op[ i + 2 ].length = right;
+                        
+                        op[ i + 1 ].type = 1;
+                        op[ i + 1 ].code = 'B';
+                        op[ i + 1 ].length = 0;
+                        
+                        fwd = i + 1;
+                        break;
                     }
-                    start++;
-                    count--;
-                    ++rcount;
-                    rc = rc ? rc : Quitting();
                 }
-                SAM_DUMP_DBG(2, ("%s: dumped %lu PRIMARY_ALIGNMENTs\n", param->accession, rcount));
-            }
-            SAM_DUMP_DBG(2, ("%s SECONDARY_ALIGNMENTs\n", param->accession));
-            if( calgS != NULL && rc == 0 && (rc = VCursorIdRange(calgS, 0, &start, &count)) == 0 ) {
-                uint64_t rcount = 0;
-
-                SAM_DUMP_DBG(2, ("range from %ld qty %lu\n", start, count));
-                while( count > 0 && rc == 0 ) {
-                    if( (rc = Cursor_Read(calgS, start, &calg_col[alg_DISTANCE_FILTER])) == 0 ) {
-                        if( AlignDistanceFilter(param, calg_col) ) {
-                            if( (rc = Cursor_Read(calgS, start, calg_col)) == 0 ) {
-                                if( param->fasta || param->fastq ) {
-                                    DumpAlignedFastX(calg_col, param, calg_col[alg_SEQ_READ_ID].base.coord1[0], false);
-                                } else {
-                                    DumpAlignedSAM(calg_col, param);
-                                }
-                            }
-                        }
-                    } else if( GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcRow ) {
-                        /* a gap in ids? */
-                        rc = 0;
+            }
+        }
+        else if ( ( read == 2 && !reversed ) || ( read == 1 && reversed ) )
+        {
+            for ( i = ops, acc = 0; i > 0 && acc <= 5; )
+            {
+                --i;
+                if ( op[ i ].type != 2 )
+                {
+                    acc += op[ i ].length;
+                    if ( acc == 5 && op[ i ].type == 1 )
+                    {
+                        rev = i;
+                        break;
+                    }
+                    else if ( acc > 5 )
+                    {
+                        unsigned const left = acc - 5;
+                        unsigned const right = op[ i ].length - left;
+                        
+                        memmove( &op[ i + 2 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+                        ops += 2;
+                        op[ i ].length = left;
+                        op[ i + 2 ].length = right;
+                        
+                        op[ i + 1 ].type = 1;
+                        op[ i + 1 ].code = 'B';
+                        op[ i + 1 ].length = 0;
+                         
+                        rev = i + 1;
+                        break;
                     }
-                    start++;
-                    count--;
-                    ++rcount;
-                    rc = rc ? rc : Quitting();
                 }
-                SAM_DUMP_DBG(2, ("%s: dumped %lu SECONDARY_ALIGNMENTs\n", param->accession, rcount));
-            }
-        } else {
-            /* use index to set REF_NAME ranges */
-            uint32_t r;
-            const KIndex* iname = NULL;
-            const VCursor *cref = NULL;
-
-            SCol cref_col[] = {
-                {"MAX_SEQ_LEN", 0, {NULL}, 0, false},
-                {"PRIMARY_ALIGNMENT_IDS", 0, {NULL}, 0, false},
-                {"SECONDARY_ALIGNMENT_IDS", 0, {NULL}, 0, false},
-                {NULL, 0, {NULL}, 0, false}
-            };
-            enum eref_col {
-                ref_MAX_SEQ_LEN = 0,
-                ref_PRIMARY_ALIGNMENT_IDS,
-                ref_SECONDARY_ALIGNMENT_IDS
-            };
-
-            if( (rc = VTableOpenIndexRead(tref, &iname, "i_name")) == 0 &&
-                (rc = Cursor_Init(tref, &cref, cref_col)) == 0 ) {
-                for(r = 0; rc == 0 && r < param->region_qty; r++ ) {
-                    if( (rc = KIndexFindText(iname, param->region[r].name, &start, &count, NULL, NULL)) == 0 ) {
-                        bool skip_initial = true;
-                        uint64_t cur_pos = 0;
-                        uint32_t max_seq_len = 0;
-
-                        SAM_DUMP_DBG(2, ("REFERENCE %s index range is [%lu:%lu]\n", param->region[r].name, start, start + count - 1));
-                        while( count > 0 && rc == 0 ) {
-                            if( (rc = Cursor_Read(cref, start, cref_col)) == 0 ) {
-                                if( skip_initial ) {
-                                    /* scroll to row with 1st region offset - 1 so algnmts tails in the range are not lost */
-                                    uint64_t inc = param->region[r].r[0].from / cref_col[ref_MAX_SEQ_LEN].base.u32[0];
-                                    max_seq_len = cref_col[ref_MAX_SEQ_LEN].base.u32[0];
-                                    skip_initial = false;
-                                    inc = inc ? inc - 1 : 0;
-                                    if( start + inc != start ) {
-                                        start += inc;
-                                        count -= inc;
-                                        cur_pos = max_seq_len * inc;
-                                        continue;
-                                    }
-                                } else if( cur_pos > param->region[r].max_to ) {
-                                    break;
-                                }
-                                SAM_DUMP_DBG(2, ("row %s index range is [%lu:%lu] pos %lu\n",
-                                    param->region[r].name, start, start + count - 1, cur_pos));
-                                if( (rc = DumpAlignmentList(param, calgP, calg_col, &cref_col[ref_PRIMARY_ALIGNMENT_IDS],
-                                                            cseq, cseq_col, seq_NAME + 1)) == 0 ) {
-                                    if( calgS != NULL ) {
-                                        rc = DumpAlignmentList(param, calgS, calg_col,
-                                                               &cref_col[ref_SECONDARY_ALIGNMENT_IDS], NULL, NULL, 0);
-                                    }
-                                }
-                            } else if( GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcRow ) {
-                                /* a gap in ids? */
-                                rc = 0;
+            }
+        }
+        else
+        {
+            /* fprintf(stderr, "guessing layout\n"); */
+            for ( i = 0, acc = 0; i < ops  && acc <= 5; ++i )
+            {
+                if ( op[ i ].type != 2 )
+                {
+                    acc += op[ i ].length;
+                    if ( acc == 5 && op[ i + 1 ].type == 1 )
+                    {
+                        fwd = i + 1;
+                    }
+                }
+            }
+            for ( i = ops, acc = 0; i > 0 && acc <= 5; )
+            {
+                --i;
+                if ( op[ i ].type != 2 )
+                {
+                    acc += op[ i ].length;
+                    if ( acc == 5 && op[i].type == 1 )
+                    {
+                        rev = i;
+                    }
+                }
+            }
+            if ( ( fwd == 0 && rev == 0 ) || ( fwd != 0 && rev != 0 ) )
+            {
+                for ( i = 0; i < ops; ++i )
+                {
+                    if ( op[ i ].type == 2 )
+                    {
+                        op[ i ].code = 'N';
+                        *CG_adjust += op[ i ].length;
+                    }
+                }
+                return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+            }
+        }
+        if ( fwd && op[ fwd ].type == 1 )
+        {
+            for ( i = ops, acc = 0; i > fwd + 1; )
+            {
+                --i;
+                if ( op[ i ].type != 2 )
+                {
+                    acc += op[ i ].length;
+                    if ( acc >= 10 )
+                    {
+                        if ( acc > 10 )
+                        {
+                            unsigned const r = 10 + op[ i ].length - acc;
+                            unsigned const l = op[ i ].length - r;
+                            
+                            if ( ops + 2 >= maxOps )
+                                return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+                            memmove( &op[ i + 2 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+                            ops += 2;
+                            op[ i + 2 ].length = r;
+                            op[ i ].length = l;
+                            
+                            op[ i + 1 ].length = 0;
+                            op[ i + 1 ].type = 2;
+                            op[ i + 1 ].code = 'N';
+                            i += 2;
+                        }
+                        else if ( i - 1 > fwd )
+                        {
+                            if ( op[ i - 1 ].type == 2 )
+                                 op[ i - 1 ].code = 'N';
+                            else
+                            {
+                                if ( ops + 1 >= maxOps )
+                                    return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+                                memmove( &op[ i + 1 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+                                ops += 1;
+                                op[ i ].length = 0;
+                                op[ i ].type = 2;
+                                op[ i ].code = 'N';
+                                i += 1;
                             }
-                            start++;
-                            count--;
-                            cur_pos += max_seq_len;
-                            rc = rc ? rc : Quitting();
                         }
-                    } else if( GetRCState(rc) == rcNotFound ) {
-                        PLOGMSG(klogWarn, (klogWarn, "REFERENCE $(r) not present in data", "r=%s", param->region[r].name));
-                        rc = 0;
+                        acc = 0;
                     }
                 }
             }
-            VCursorRelease(cref);
-            KIndexRelease(iname);
+            /** change I to B+M **/
+            op[ fwd ].code = 'B';
+            memmove( &op[ fwd + 1 ], &op[ fwd ], ( ops - fwd ) * sizeof( op[ 0 ] ) );
+            ops += 1;
+            op[ fwd + 1 ].code = 'M';
+            *opCnt = ops;
+            /** set the gaps now **/
+            for ( gapno = 3, i = ops; gapno > 1 && i > 0; )
+            {
+                --i;
+                if ( op[ i ].code == 'N' )
+                    gap[ --gapno ] = i;
+            }
+            gap[ 0 ] = fwd;
+            print_CG_cigar( __LINE__, op, ops, gap );
+            return 0;
         }
-    }
-    VCursorRelease(calgP);
-    VCursorRelease(calgS);
-    VCursorRelease(cseq);
-    return rc;
-}
-
-static
-rc_t DumpUnaligned(const SParam* param, const VTable* tseq)
-{
-    rc_t rc = 0;
-    const VCursor* cflt = NULL, *cseq = NULL;
-
-    SCol cseq_flt[] = {
-        {"PRIMARY_ALIGNMENT_ID", 0, {NULL}, 0, true},
-        {NULL, 0, {NULL}, 0, false}
-    },
-    cseq_col[] = {
-        /* APPEND ONLY TO THIS LIST OF COLUMNS!!!
-           unless you change enum above and SCol in DumpAlignments above in sync!! */
-        {"READ", 0, {NULL}, 0, false},
-        {"(INSDC:quality:text:phred_33)QUALITY", 0, {NULL}, 0, false},
-        {"SPOT_GROUP", 0, {NULL}, 0, true},
-        {"READ_START", 0, {NULL}, 0, true},
-        {"READ_LEN", 0, {NULL}, 0, true},
-        {"READ_TYPE", 0, {NULL}, 0, true},
-        {"NAME", 0, {NULL}, 0, true},
-        {NULL, 0, {NULL}, 0, false}
-    };
-    enum eseq_flt {
-        seq_PRIMARY_ALIGNMENT_ID = 0
-    };
-
-    if( (rc = Cursor_Init(tseq, &cflt, cseq_flt)) == 0 &&
-        (rc = Cursor_Init(tseq, &cseq, cseq_col)) == 0 ) {
-        int64_t start = 0;
-        uint64_t count = 0;
-        if( (rc = VCursorIdRange(cseq, 0, &start, &count)) == 0 ) {
-            uint64_t rcount = 0;
-
-            SAM_DUMP_DBG(2, ("%s SEQUENCEs without PRIMARY_ALIGNMENT_ID or equal 0\n", param->accession));
-            SAM_DUMP_DBG(2, ("range from %ld qty %lu\n", start, count));
-            while( count > 0 && rc == 0 ) {
-                uint32_t i, nreads = 1;
-
-                /* to avoid reading whole sequence cursor data unnecessarily
-                   nreads is used as flag based on PRIMARY_ALIGNMENT_ID column presence and values */
-                if( cseq_flt[seq_PRIMARY_ALIGNMENT_ID].idx != 0 ) {
-                    if( (rc = Cursor_Read(cflt, start, cseq_flt)) == 0 ) {
-                        nreads = 1;
-                        /* count unaligned reads on spot */
-                        for(i = 0; i < cseq_flt[seq_PRIMARY_ALIGNMENT_ID].len; i++) {
-                            if( cseq_flt[seq_PRIMARY_ALIGNMENT_ID].base.i64[i] != 0 ) {
-                                /* skip partially unaligned spots, they are printed 
-                                   together with aligned read (with lowest alignment id)
-                                   in PRIMARY_ALIGNMENT loop */
-                                nreads = 0;
-                                break;
+        if ( rev && op[ rev ].type == 1 )
+        {
+            for ( acc = i = 0; i < rev; ++i )
+            {
+                if ( op[ i ].type != 2 )
+                {
+                    acc += op[ i ].length;
+                    if ( acc >= 10 )
+                    {
+                        if ( acc > 10 )
+                        {
+                            unsigned const l = 10 + op[ i ].length - acc;
+                            unsigned const r = op[ i ].length - l;
+                            
+                            if ( ops + 2 >= maxOps )
+                                return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+                            memmove( &op[ i + 2 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+                            ops += 2;
+                            op[ i + 2 ].length = r;
+                            op[ i ].length = l;
+                            
+                            op[ i + 1 ].length = 0;
+                            op[ i + 1 ].type = 2;
+                            op[ i + 1 ].code = 'N';
+                            rev += 2;
+                            i += 2;
+                        }
+                        else if ( i + 1 < rev )
+                        {
+                            if ( op[ i + 1 ].type == 2)
+                                 op[ i + 1 ].code = 'N';
+                            else
+                            {
+                                if ( ops + 1 >= maxOps )
+                                    return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+                                memmove( &op[ i + 1 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+                                ops += 1;
+                                op[ i + 1 ].length = 0;
+                                op[ i + 1 ].type = 2;
+                                op[ i + 1 ].code = 'N';
+                                rev += 1;
+                                i += 1;
                             }
                         }
+                        acc = 0;
                     }
                 }
-                if( rc == 0 && nreads != 0 ) {
-                    DumpUnalignedSpot(param, NULL, start, cseq, cseq_col, 0, &rcount);
-                } else if( GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcRow ) {
-                    /* a gap in ids? */
-                    rc = 0;
-                }
-                start++;
-                count--;
-                rc = rc ? rc : Quitting();
             }
-            SAM_DUMP_DBG(2, ("%s: dumped %lu unaligned reads\n", param->accession, rcount));
+            for ( gapno = 3, i = 0; gapno > 1 && i < ops; ++i )
+            {
+                if ( op[ i ].code == 'N' )
+                    gap[ --gapno ] = i;
+            }
+            gap[ 0 ] = rev;
+            op[ rev ].code = 'B';
+            memmove( &op[ rev + 1 ], &op[ rev ], ( ops - rev ) * sizeof( op[ 0 ] ) );
+            ops += 1;
+            op[ rev + 1 ].code = 'M';
+            *opCnt = ops;
+            print_CG_cigar( __LINE__, op, ops, gap );
+            return 0;
         }
     }
-    VCursorRelease(cseq);
-    return rc;
+    return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
 }
 
-static
-rc_t Dump(uint32_t idx, bool multi_run, SParam* param)
+
+static rc_t GenerateCGData( SCol cols[], unsigned style )
 {
     rc_t rc = 0;
-    const VDBManager* mgr = NULL;
-    const KDBManager* kmgr = NULL;
-
-    if( (rc = VDBManagerMakeRead(&mgr, NULL)) == 0 &&
-        (rc = VDBManagerOpenKDBManagerRead(mgr, &kmgr)) == 0 ) {
-
-        int pathType = KDBManagerPathType(kmgr, param->path) & ~kptAlias;
-        if( pathType == kptDatabase ) {
-            const VDatabase* db;
-            if( (rc = VDBManagerOpenDBRead(mgr, &db, NULL, param->path)) == 0 ) {
-                const VTable* seq = NULL, *algP = NULL, *algS = NULL, *ref = NULL;
-                if( (rc = OpenVTable(db, &ref, "REFERENCE", false)) == 0 &&
-                    (rc = OpenVTable(db, &seq, "SEQUENCE", false)) == 0 &&
-                    (rc = OpenVTable(db, &algP, "PRIMARY_ALIGNMENT", false)) == 0 &&
-                    (rc = OpenVTable(db, &algS, "SECONDARY_ALIGNMENT", true)) == 0 ) {
-
-                    if( !param->noheader && !param->reheader && !multi_run ) {
-                        /* grab header from db meta node */
-                        const KMetadata* m;
-                        if( (rc = VDatabaseOpenMetadataRead(db, &m)) == 0 ) {
-                            const KMDataNode* n;
-                            if( (rc = KMetadataOpenNodeRead(m, &n, "BAM_HEADER")) == 0 ) {
-                                size_t offset = 0, num_read, remaining = ~0;
-                                char buffer[40960];
-                                while(rc == 0 && remaining > 0 ) {
-                                    if( (rc = KMDataNodeRead(n, offset, buffer, sizeof(buffer),
-                                                             &num_read, &remaining)) == 0 ) {
-                                        OUTMSG(("%.*s", ( uint32_t ) num_read, buffer));
-                                        offset += num_read;
-                                    }
-                                }
-                                if( rc == 0 && buffer[num_read - 1] != '\n' ) {
-                                    OUTMSG(("\n"));
-                                }
-                                KMDataNodeRelease(n);
-                            } else if( GetRCState(rc) == rcNotFound ) {
-                                param->reheader = true;
-                                rc = 0;
-                            }
-                            KMetadataRelease(m);
-                        }
+    
+    memset( &cols[ alg_CG_TAGS_STR], 0, sizeof( cols[ alg_CG_TAGS_STR ] ) );
+    
+    if ( cols[ alg_READ ].len == 35 && cols[ alg_SAM_QUALITY ].len == 35 )
+    {
+        static char newCIGAR[ 35 * 11 ];
+        static int32_t newEditDistance;
+        unsigned gap[ 3 ] = { 0, 0, 0 };
+        cgOp cigOp[ 35 ];
+        unsigned opCnt;
+        unsigned i;
+        unsigned j;
+        size_t sz;
+        unsigned S_adjust = 0;
+        unsigned CG_adjust = 0;
+        unsigned const read = cols[ alg_SEQ_READ_ID ].len && cols[ alg_REVERSED ].len ? cols[ alg_SEQ_READ_ID ].base.coord1[ 0 ] : 0;
+        bool const reversed = cols[ alg_REVERSED ].len ? cols[ alg_REVERSED ].base.u8[ 0 ] : false;
+        
+        rc = CIGAR_to_CG_Ops( cigOp, sizeof( cigOp ) / sizeof( cigOp[ 0 ] ), &opCnt, gap,
+                              cols[ alg_CIGAR ].base.str, cols[ alg_CIGAR ].len,
+                              &S_adjust, &CG_adjust, read, reversed );
+        if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcFormat )
+        {
+            rc = 0;
+            if ( style == 1 )
+                goto CLEAN_CIGAR;
+            else
+                goto PRINT_CIGAR;
+        }
+        if ( rc != 0 )
+            return 0;
+
+        if ( CG_adjust == 0 )
+            CG_adjust = ( gap[ 0 ] < opCnt ? cigOp[ gap[ 0 ] ].length : 0 )
+                      + ( gap[ 1 ] < opCnt ? cigOp[ gap[ 1 ] ].length : 0 )
+                      + ( gap[ 2 ] < opCnt ? cigOp[ gap[ 2 ] ].length : 0 );
+
+        print_CG_cigar( __LINE__, cigOp, opCnt, NULL );
+        if ( style == 1 )
+        {
+            static char newSeq[ 35 ];
+            static char newQual[ 35 ];
+            static char tags[ 35*22 + 1 ];
+            unsigned const B_len = cigOp[ gap[ 0 ] ].length;
+            unsigned const B_at = gap[ 0 ] < gap[ 2 ] ? 5 : 30;
+            
+            if ( 0 < B_len && B_len < 5 )
+            {
+                memcpy( newSeq, cols[ alg_READ ].base.v, 35 );
+                memcpy( newQual, cols[ alg_SAM_QUALITY ].base.v, 35 );
+                
+                cols[ alg_CG_TAGS_STR ].base.v = tags;
+                
+                cols[ alg_READ ].base.v = newSeq;
+                cols[ alg_READ ].len = 35 - B_len;
+                
+                cols[ alg_SAM_QUALITY ].base.v = newQual;
+                cols[ alg_SAM_QUALITY ].len = 35 - B_len;
+                
+                /* nBnM -> nB0M */
+                cigOp[ gap[ 0 ] + 1 ].length -= B_len;
+                if ( gap[ 0 ] < gap[ 2 ] )
+                {
+                    rc = string_printf( tags, sizeof( tags ), &sz, "\tGC:Z:%uS%uG%uS\tGS:Z:%.*s\tGQ:Z:%.*s",
+                        5 - B_len, B_len, 30 - B_len, 2 * B_len, &newSeq[ 5 - B_len ], 2 * B_len, &newQual[ 5 - B_len ] );
+                    if ( rc == 0 )
+                    {
+                        cols[ alg_CG_TAGS_STR ].len = sz;
                     }
-                    if( rc == 0 && !param->noheader && (param->reheader || multi_run) ) {
-                        if( !multi_run || idx == 0 ) {
-                            OUTMSG(("@HD VN:1.3\n"));
+                    memmove( &cigOp[ gap[ 0 ] ],
+                             &cigOp[ gap[ 0 ] + 1 ],
+                             ( opCnt - ( gap[ 0 ] + 1 ) ) * sizeof( cigOp[ 0 ] ) );
+                    --opCnt;
+                }
+                else
+                {
+                    rc = string_printf( tags, sizeof( tags ), &sz, "\tGC:Z:%uS%uG%uS\tGS:Z:%.*s\tGQ:Z:%.*s",
+                        30 - B_len, B_len, 5 - B_len, 2 * B_len, &newSeq[ 30 - B_len ], 2 * B_len, &newQual[ 30 - B_len ] );
+                    if ( rc == 0 )
+                    {
+                        cols[ alg_CG_TAGS_STR ].len = sz;
+                    }
+                    memmove( &cigOp[ gap[ 0 ] ],
+                             &cigOp[ gap[ 0 ] + 1 ],
+                             ( opCnt - ( gap[ 0 ] + 1 ) ) * sizeof( cigOp[ 0 ] ) );
+                    --opCnt;
+                }
+                if ( rc == 0 )
+                {
+                    for ( i = B_at; i < B_at + B_len; ++i )
+                    {
+                        int const Lq = newQual[ i - B_len ];
+                        int const Rq = newQual[ i ];
+
+                        if ( Lq <= Rq )
+                        {
+                            newSeq[ i - B_len ] = newSeq[ i ];
+                            newQual[ i - B_len ] = Rq;
                         }
-                        if( !multi_run && (rc = DumpRefSeqs(ref, param)) == 0 ) {
-                            rc = DumpReadGroups(seq);
+                        else
+                        {
+                            newSeq[ i ] = newSeq[ i - B_len ];
+                            newQual[ i ] = Lq;
                         }
                     }
-                    if( rc == 0 ) {
-                        rc = DumpAlignments(param, algP, algS, ref, seq);
-                        if( rc == 0 && param->unaligned ) {
-                            rc = DumpUnaligned(param, seq);
-                        }
+                    memmove( &newSeq [ B_at ], &newSeq [ B_at + B_len ], 35 - B_at - B_len );
+                    memmove( &newQual[ B_at ], &newQual[ B_at + B_len ], 35 - B_at - B_len );
+                }
+            }
+            else
+            {
+                int len = cigOp[ gap[ 0 ] ].length;
+                
+                cigOp[ gap[ 0 ] ].code = 'I';
+                for (i = gap[0] + 1; i < opCnt && len > 0; ++i) {
+                    if (cigOp[i].length <= len){
+                        len -= cigOp[i].length;
+                        cigOp[i].length = 0;
+                    }
+                    else {
+                        cigOp[i].length -= len;
+                        len = 0;
                     }
                 }
-                VTableRelease(ref);
-                VTableRelease(seq);
-                VTableRelease(algP);
-                VTableRelease(algS);
-                VDatabaseRelease(db);
-            }
-        } else {
-            const VTable* seq = NULL;
-            VSchema* schema = NULL;
-
-UseLegacy:
-            if( (rc = VDBManagerOpenTableRead(mgr, &seq, schema, param->path)) == 0 ) {
-                OUTMSG(("@HD VN:1.3\n"));
-                if( (rc = DumpReadGroups(seq)) == 0 ) {
-                    rc = DumpUnaligned(param, seq);
+                CG_adjust -= cigOp[ gap[ 0 ] ].length;
+            }
+        }
+        if ( rc == 0 )
+        {
+        PRINT_CIGAR:
+        CLEAN_CIGAR:
+            print_CG_cigar( __LINE__, cigOp, opCnt, NULL );
+            /* remove zero length ops */
+            for ( j = i = 0; i < opCnt; )
+            {
+                if ( cigOp[ j ].length == 0)
+                {
+                    ++j;
+                    --opCnt;
+                    continue;
                 }
-                VTableRelease(seq);
+                cigOp[ i++ ] = cigOp[ j++ ];
+            }
+            print_CG_cigar( __LINE__, cigOp, opCnt, NULL );
+            if ( cols[ alg_EDIT_DISTANCE ].len )
+            {
+                int const edit_distance = cols[ alg_EDIT_DISTANCE ].base.i32[ 0 ];
+                int const adjusted = edit_distance + S_adjust - CG_adjust;
+            
+                newEditDistance = adjusted > 0 ? adjusted : 0;
+                SAM_DUMP_DBG( 4, ( "NM: before: %u, after: %u(+%u-%u)\n", edit_distance, newEditDistance, S_adjust, CG_adjust ) );
+                cols[ alg_EDIT_DISTANCE ].base.v = &newEditDistance;
+                cols[ alg_EDIT_DISTANCE ].len = 1;
             }
-            if( rc != 0 && schema == NULL ) {
-                if( (rc = VDBManagerMakeSRASchema(mgr, &schema)) == 0 ) {
-                    goto UseLegacy;
+            /* merge adjacent ops */
+            for ( i = opCnt; i > 1; )
+            {
+                --i;
+                if ( cigOp[ i - 1 ].code == cigOp[ i ].code )
+                {
+                    cigOp[ i - 1 ].length += cigOp[ i ].length;
+                    memmove( &cigOp[ i ], &cigOp[ i + 1 ], ( opCnt - 1 - i ) * sizeof( cigOp[ 0 ] ) );
+                    --opCnt;
                 }
             }
-            VSchemaRelease(schema);
+            print_CG_cigar( __LINE__, cigOp, opCnt, NULL );
+            for ( i = j = 0; i < opCnt && rc == 0; ++i )
+            {
+                rc = string_printf( &newCIGAR[ j ], sizeof( newCIGAR ) - j, &sz, "%u%c", cigOp[ i ].length, cigOp[ i ].code);
+                j += sz;
+            }
+            cols[ alg_CIGAR ].base.v = newCIGAR;
+            cols[ alg_CIGAR ].len = j;
         }
     }
-    VDBManagerRelease(mgr);
-    KDBManagerRelease(kmgr);
     return rc;
 }
 
-ver_t CC KAppVersion( void )
+
+static bool DumpAlignedRow( SAM_dump_ctx_t *const ctx, DataSource *const ds,
+                    int64_t row,
+                    bool const primary,
+                    int const cg_style,
+                    rc_t *prc )
 {
-    return SAM_DUMP_VERS;
+    rc_t rc;
+    
+    /* if SEQ_SPOT_ID is open then skip rows with no SEQ_SPOT_ID */
+    if ( ds->cols[ alg_SEQ_SPOT_ID ].idx )
+    {
+        rc = Cursor_Read( ds, row, alg_SEQ_SPOT_ID, 1 );
+        if ( rc != 0 )
+        {
+            if ( !( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound ) )
+                *prc = rc;
+            return false;
+        }
+        if ( ds->cols[ alg_SEQ_SPOT_ID ].len == 0 ||
+             ds->cols[ alg_SEQ_SPOT_ID ].base.i64[ 0 ] == 0 )
+            return false;
+    }
+
+    /* skip rows that fail mate distance filter */
+    if ( param->mp_dist_qty != 0 || param->mp_dist_unknown )
+    {
+        rc = Cursor_Read( ds, row, alg_TEMPLATE_LEN, 1 );
+        if ( rc != 0 )
+        {
+            if ( !( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound ) )
+                *prc = rc;
+            return false;
+        }
+        if ( !AlignDistanceFilter( ds->cols ) )
+            return false;
+    }
+
+    rc = Cursor_ReadAlign( &ds->curs, row, ds->cols, 0 );
+    if ( rc != 0 )
+    {
+        if ( !( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound ) )
+            *prc = rc;
+        return false;
+    }
+
+    if ( param->fasta || param->fastq )
+    {
+        unsigned const read_id = ds->cols[ alg_SEQ_READ_ID ].base.v ? ds->cols[ alg_SEQ_READ_ID ].base.coord1[ 0 ] : 0;
+        
+        DumpAlignedFastX( ctx->pri.cols, row, read_id, primary, false );
+    }
+    else
+    {
+        if ( cg_style != 0 )
+        {
+            rc = GenerateCGData( ds->cols, cg_style );
+            if ( rc != 0 )
+            {
+                *prc = rc;
+                return false;
+            }
+        }
+        DumpAlignedSAM(ctx, ds, row, ctx->readGroup, 0 );
+    }
+    *prc = 0;
+    return true;
 }
 
-const char* seq_id_usage[] = {"Print reference SEQ_ID in RNAME instead of NAME", NULL};
-const char* unaligned_usage[] = {"Output unaligned reads", NULL};
-const char* cigartype_usage[] = {"Output long version of CIGAR", NULL};
-const char* header_usage[] = {"Always reconstruct header", NULL};
-const char* noheader_usage[] = {"Do not output headers", NULL};
-const char* region_usage[] = {"Filter by position on genome.",
-                              "Name can either be file specific name (ex: \"chr1\" or \"1\").",
-                              "\"from\" and \"to\" are 1-based coordinates", NULL};
-const char* distance_usage[] = {"Filter by distance between matepairs.",
-                                "Use \"unknown\" to find matepairs split between the references.",
-                                "Use from-to to limit matepair distance on the same reference", NULL};
-const char* identicalbases_usage[] = {"Output '=' if base is identical to reference", NULL};
-const char* gzip_usage[] = {"Compress output using gzip", NULL};
-const char* bzip2_usage[] = {"Compress output using bzip2", NULL};
-const char* qname_usage[] = {"Add .SPOT_GROUP to QNAME", NULL};
-const char* fasta_usage[] = {"Produce Fasta formatted ouput", NULL};
-const char* fastq_usage[] = {"Produce FastQ formatted ouput", NULL};
-const char* prefix_usage[] = {"Prefix QNAME: prefix.QNAME", NULL};
-
-const char* usage_params[] =
-{
-    NULL,
-    NULL,
-    NULL,
-    NULL,
-    "name[:from-to]",
-    "from-to|unknown",
-    NULL,
-    NULL,
-    NULL,
-    NULL,
-    NULL,
-    NULL,
-    NULL,
-    "<prefix>"
-};
 
-enum eArgs {
-    earg_seq_id = 0,
-    earg_unaligned,
-    earg_cigartype,
-    earg_header,
-    earg_region,
-    earg_distance,
-    earg_identicalbases,
-    earg_gzip,
-    earg_bzip2,
-    earg_qname,
-    earg_noheader,
-    earg_fastq,
-    earg_fasta,
-    earg_prefix
+static rc_t DumpAlignedRowList( SAM_dump_ctx_t *const ctx, DataSource *const ds, SCol const *const ids,
+                        int64_t *rcount,
+                        bool const primary,
+                        int const cg_style,
+                        bool const noFilter )
+{
+    rc_t rc;
+    unsigned i;
+    unsigned const n = ids->len;
+
+    for ( i = 0; ( rc = Quitting() ) == 0 && i < n; ++i )
+    {
+        int64_t const row = ids->base.i64[ i ];
+
+        if ( ! noFilter )
+            rc = Cursor_Read( ds, row, alg_REGION_FILTER, ~(unsigned)0 );
+
+        if ( rc == 0 )
+        {
+            if ( noFilter || AlignRegionFilter(ds->cols) )
+            {
+                if ( DumpAlignedRow( ctx, ds, row, primary, cg_style, &rc ) )
+                    ++*rcount;
+                if ( rc != 0 )
+                    break;
+            }
+        }
+    }
+    return rc;
+}
+
+static rc_t DumpAlignedRowListIndirect( SAM_dump_ctx_t *const ctx,
+                                DataSource *const indirectSource,
+                                DataSource *const directSource,
+                                SCol const *const directIDs,
+                                int64_t *rcount,
+                                bool const primary,
+                                int const cg_style )
+{
+    unsigned i;
+
+    for ( i = 0; i < directIDs->len; ++i )
+    {
+        int64_t const row = directIDs->base.i64[ i ];
+        rc_t rc = Cursor_Read( directSource, row, alg_REGION_FILTER, ~(unsigned)0 );
+        
+        if ( rc != 0 )
+            return rc;
+        
+        if ( !AlignRegionFilter( directSource->cols ) )
+            continue;
+            
+        rc = Cursor_Read( directSource, row, alg_EVIDENCE_ALIGNMENT_IDS, 1 );
+        if ( rc != 0 )
+            return rc;
+        
+        rc = DumpAlignedRowList( ctx, indirectSource, &directSource->cols[ alg_EVIDENCE_ALIGNMENT_IDS ],
+                                 rcount, primary, cg_style, true );
+        if ( rc != 0 )
+            return rc;
+    }
+    return 0;
+}
+
+
+enum e_tables
+{
+    primary_alignment,
+    secondary_alignment,
+    evidence_interval,
+    evidence_alignment
 };
 
-OptDef DumpArgs[] =
+enum e_IDS_opts
 {
-    {"seqid", "s", NULL, seq_id_usage, 0, false, false},
-    {"unaligned", "u", NULL, unaligned_usage, 0, false, false},
-    {"cigar-long", "c", NULL, cigartype_usage, 0, false, false},
-    {"header", "r", NULL, header_usage, 0, false, false},
-    {"aligned-region", NULL, NULL, region_usage, 0, true, false},
-    {"matepair-distance", NULL, NULL, distance_usage, 0, true, false},
-    {"hide-identical", "=", NULL, identicalbases_usage, 0, false, false},
-    {"gzip", NULL, NULL, gzip_usage, 0, false, false},
-    {"bzip2", NULL, NULL, bzip2_usage, 0, false, false},
-    {"spot-group", "g", NULL, qname_usage, 0, false, false},
-    {"no-header", "n", NULL, noheader_usage, 0, false, false},
-#ifdef NCBI
-    {"fastq", NULL, NULL, fasta_usage, 0, false, false},
-    {"fasta", NULL, NULL, fastq_usage, 0, false, false},
-#else
-    {"fastq", NULL, NULL, NULL, 0, false, false},
-    {"fasta", NULL, NULL, NULL, 0, false, false},
-#endif
-    {"prefix", "p", NULL, prefix_usage, 0, true, false},
+    primary_IDS             = ( 1 << primary_alignment ),
+    secondary_IDS           = ( 1 << secondary_alignment ),
+    evidence_interval_IDS   = ( 1 << evidence_interval ),
+    evidence_alignment_IDS  = ( 1 << evidence_alignment )
 };
 
-const char UsageDefaultName[] = "sam-dump";
 
-rc_t CC UsageSummary (const char * progname)
+static rc_t DumpAlignedRowList_cb( SAM_dump_ctx_t *const ctx, TAlignedRegion const *const rgn,
+                                   int options, int which, int64_t *rcount, SCol const *const IDS )
 {
-    return KOutMsg ( "Usage:\n"
-        "\t%s [options] path[ path ...]\n\n", progname );
-    return 0;
+    /*SAM_DUMP_DBG(2, ("row %s index range is [%lu:%lu] pos %lu\n",
+        param->region[r].name, start, start + count - 1, cur_pos));*/
+    switch ( which )
+    {
+    case primary_IDS:
+        return DumpAlignedRowList( ctx, &ctx->pri, IDS, rcount, true, param->cg_style, false );
+
+    case secondary_IDS:
+        return DumpAlignedRowList( ctx, &ctx->sec, IDS, rcount, false, param->cg_style, false );
+
+    case evidence_interval_IDS:
+        {
+            rc_t rc = 0;
+
+            if ( ( options & evidence_interval_IDS ) != 0 )
+                rc = DumpAlignedRowList( ctx, &ctx->evi, IDS, rcount, true, 0, false );
+
+            if ( rc == 0 && ( options & evidence_alignment_IDS ) != 0 )
+                rc = DumpAlignedRowListIndirect( ctx, &ctx->eva, &ctx->evi, IDS, rcount, true, param->cg_style );
+
+            return rc;
+        }
+    }
+    return RC( rcExe, rcTable, rcReading, rcParam, rcUnexpected );
 }
 
 
-rc_t CC Usage( const Args* args )
+typedef struct CigOps{
+	char op;
+	int8_t	 ref_sign; /*** 0;+1;-1; ref_offset = ref_sign * offset ***/
+	int8_t	 seq_sign; /*** 0;+1;-1; seq_offset = seq_sign * offset ***/
+	uint32_t oplen;
+} CigOps;
+
+static void SetCigOp(CigOps *dst,char op,uint32_t oplen)
 {
-    const char * progname = UsageDefaultName;
-    const char * fullpath = UsageDefaultName;
-    rc_t rc;
-    int i;
+	dst->op    = op;
+	dst->oplen = oplen;
+	switch(op) { /*MX= DN B IS PH*/
+	 case 'M': case 'X': case '=':
+		dst->ref_sign=+1;
+		dst->seq_sign=+1;
+		break;
+	 case 'D': case 'N':
+		dst->ref_sign=+1;
+                dst->seq_sign= 0;
+                break;
+	 case 'B': 
+		dst->ref_sign=-1;
+                dst->seq_sign= 0;
+                break;
+	 case 'S': case 'I':
+		dst->ref_sign= 0;
+                dst->seq_sign=+1;
+                break;
+	 case 'P': case 'H':
+	  case 0: /** terminating op **/
+		dst->ref_sign= 0;
+                dst->seq_sign= 0;
+                break;
+	  default:
+		assert(0);
+                break;
+	}
+}
+
+static unsigned ExplodeCIGAR( CigOps dst[], unsigned len, char const cigar[], unsigned ciglen )
+{
+    unsigned i;
+    unsigned j;
+    int opLen;
+    
+    for ( i = j = opLen=0; i < ciglen; i++) {
+	if(isdigit(cigar[i])){
+		opLen = opLen * 10 + cigar[i] - '0';
+	} else {
+		assert(isalpha(cigar[i]));
+		SetCigOp(dst+j,cigar[i],opLen);
+		opLen=0;
+		j++;
+	}
+    }
+    SetCigOp(dst+j,0,0);
+    j++;
+    return j;
+}
+
 
-    rc = ArgsProgram(args, &fullpath, &progname);
+#define CG_CIGAR_STRING_MAX (35 * 11 + 1)
 
-    OUTMSG (( "\nUsage:\n"
-        "\t%s [options] path[ path ...]\n\n", progname));
 
-    OUTMSG (("Options:\n"));
-    for(i = 0; i < sizeof(DumpArgs)/sizeof(DumpArgs[0]); i++ ) {
-        if( DumpArgs[i].help != NULL ) {
-            HelpOptionLine(DumpArgs[i].aliases, DumpArgs[i].name, usage_params[i], DumpArgs[i].help);
+#if 0
+static unsigned FormatCIGAR( char dst[], unsigned cp, unsigned oplen, int opcode )
+{
+    size_t sz;
+    string_printf( dst + cp, CG_CIGAR_STRING_MAX - cp, &sz, "%u%c", oplen, opcode );
+    return sz;
+}
+
+
+static unsigned DeletedCIGAR( char dst[], unsigned const cp, int opcode, unsigned D,
+                              uint32_t const Op[], int ri, unsigned len )
+{
+    unsigned i;
+    unsigned curPos = 0;
+    int curOp = opcode;
+    unsigned oplen = 0;
+    
+    for ( i = 0; i < D && ri < len; ++i, ++ri )
+    {
+        uint32_t const op = Op[ ri ];
+        int const d = op >> 2;
+        int const m = op & 1;
+        int const nxtOp = m ? opcode : 'P';
+        
+        if ( d != 0 )
+        {
+            if ( oplen != 0 )
+                curPos += FormatCIGAR( dst, curPos + cp, oplen, curOp );
+            curPos += FormatCIGAR( dst, cp, d, 'D' );
+            oplen = 0;
+        }
+        if ( oplen == 0 || nxtOp == curOp )
+        {
+            ++oplen;
+        }
+        else
+        {
+            curPos += FormatCIGAR( dst, curPos + cp, oplen, curOp );
+            oplen = 1;
         }
+        curOp = nxtOp;
     }
-    OUTMSG (("\n"));
-    HelpOptionsStandard();
 
-    HelpVersion(fullpath, KAppVersion());
+    if ( oplen != 0 && curOp != opcode)
+    {
+        curPos += FormatCIGAR( dst, curPos + cp, oplen, curOp );
+        oplen = 0;
+    }
+    if ( i < D )
+        oplen += D - i;
+    if ( oplen )
+        curPos += FormatCIGAR( dst, curPos + cp, oplen, opcode );
+    return curPos;
+}
+#endif
 
-    return rc;
+static char merge_M_type_ops(char a,char b)
+{ /*MX=*/
+	char c=0;
+	switch(b){
+	 case 'X':
+		switch(a){
+		 case '=': c='X'; break;
+		 case 'X': c='M'; break; /**we don't know - 2X may create '=' **/
+		 case 'M': c='M'; break;
+		}
+		break;
+	 case 'M':
+		c='M';
+		break;
+	 case '=':
+		c=a;
+		break;
+	}
+	assert(c!=0);
+	return c;
 }
 
-rc_t CC KMain( int argc, char* argv[] )
+
+static unsigned CombineCIGAR( char dst[], CigOps const seqOp[], unsigned seq_len,
+                              int refPos, CigOps const refOp[], unsigned ref_len )
 {
-    rc_t rc = 0;
-    Args* args;
-    const char* errmsg = "stop";
+    bool     done=false;
+    unsigned ciglen=0,last_ciglen=0;
+    char     last_cig_op;
+    uint32_t last_cig_oplen=0;
+    int	     si=0,ri=0;
+    CigOps   seq_cop={0,0,0,0},ref_cop={0,0,0,0};
+    int	     seq_pos=0; /** seq_pos is tracked roughly - with every extraction from seqOp **/
+    int      ref_pos=0; /** ref_pos is tracked precisely - with every delta and consumption in cigar **/
+    int	     delta=refPos; /*** delta in relative positions of seq and ref **/
+			   /*** when delta < 0 - rewind or extend the reference ***/
+			   /*** wher delta > 0 - skip reference  ***/
+#define MACRO_BUILD_CIGAR(OP,OPLEN) \
+	if( last_cig_oplen > 0 && last_cig_op == OP){							\
+                last_cig_oplen += OPLEN;								\
+                ciglen = last_ciglen + sprintf(dst+last_ciglen,"%d%c",last_cig_oplen,last_cig_op);	\
+        } else {											\
+                last_ciglen = ciglen;									\
+                last_cig_oplen = OPLEN;									\
+                last_cig_op    = OP;									\
+                ciglen = ciglen      + sprintf(dst+last_ciglen,"%d%c",last_cig_oplen,last_cig_op);	\
+        }
+    while(!done){
+	while(delta < 0){ 
+		ref_pos += delta; /** we will make it to back up this way **/
+		if(ri > 0){ /** backing up on ref if possible ***/
+			int avail_oplen = refOp[ri-1].oplen - ref_cop.oplen;
+			if(avail_oplen > 0 ){
+				if((-delta) <= avail_oplen * ref_cop.ref_sign){ /*** rewind within last operation **/
+					ref_cop.oplen -= delta;
+					delta -= delta * ref_cop.ref_sign;
+				} else { /*** rewind the whole ***/
+					ref_cop.oplen += avail_oplen;
+					delta += avail_oplen * ref_cop.ref_sign;
+				}
+			} else {
+				ri--;
+				/** pick the previous as used up **/
+				ref_cop = refOp[ri-1];
+				ref_cop.oplen =0; 
+			}
+		} else { /** extending the reference **/
+			SetCigOp(&ref_cop,'=',ref_cop.oplen - delta);
+			delta = 0;
+		}
+		ref_pos -= delta; 
+	}
+	if(ref_cop.oplen == 0){ /*** advance the reference ***/
+		ref_cop = refOp[ri++];
+		if(ref_cop.oplen == 0) { /** extending beyond the reference **/
+			SetCigOp(&ref_cop,'=',1000);
+		}
+		assert(ref_cop.oplen > 0 );
+	}
+	if(delta > 0){ /***  skip refOps ***/
+		ref_pos += delta; /** may need to back up **/
+		if(delta >=  ref_cop.oplen){ /** full **/
+			delta -= ref_cop.oplen * ref_cop.ref_sign;
+			ref_cop.oplen = 0;
+		} else { /** partial **/
+			ref_cop.oplen -= delta;
+			delta -= delta * ref_cop.ref_sign;
+		}
+		ref_pos -= delta; /** if something left - restore ***/
+		continue;
+	}
+	/*** seq and ref should be synchronized here **/
+	assert(delta == 0);
+	if(seq_cop.oplen == 0){ /*** advance sequence ***/
+		if(seq_pos < seq_len){
+			seq_cop = seqOp[si++];
+			assert(seq_cop.oplen > 0 );
+			seq_pos += seq_cop.oplen * seq_cop.seq_sign;
+		} else {
+			done=true;
+		}
+	}
+        if(!done){
+		int seq_seq_step = seq_cop.oplen * seq_cop.seq_sign; /** sequence movement**/
+		int seq_ref_step = seq_cop.oplen * seq_cop.ref_sign; /** influence of sequence movement on intermediate reference **/
+		int ref_seq_step = ref_cop.oplen * ref_cop.seq_sign; /** movement of the intermediate reference ***/
+		int ref_ref_step = ref_cop.oplen * ref_cop.ref_sign; /** influence of the intermediate reference movement on final reference ***/
+		assert( ref_ref_step >= 0); /** no B in the reference **/
+		if( seq_ref_step <= 0){ /** BSIPH in the sequence against anything ***/
+			MACRO_BUILD_CIGAR( seq_cop.op, seq_cop.oplen );
+			seq_cop.oplen = 0;
+			delta = seq_ref_step; /** if negative - will force rewind next cycle **/
+		} else if(ref_ref_step <= 0){ /** MX=DN against SIPH in the reference***/
+			if(ref_seq_step == 0){ /** MX=DN against PH **/
+				MACRO_BUILD_CIGAR( ref_cop.op,ref_cop.oplen);
+				ref_cop.oplen = 0;
+			} else {
+				int min_len = (seq_cop.oplen<ref_cop.oplen)?seq_cop.oplen:ref_cop.oplen;
+				if(seq_seq_step == 0){ /** DN agains SI **/
+					MACRO_BUILD_CIGAR('P',min_len);
+				} else { /** MX= agains SI ***/
+					MACRO_BUILD_CIGAR( ref_cop.op,min_len);
+				}
+				seq_cop.oplen -= min_len;
+				ref_cop.oplen -= min_len;
+			}
+		} else { /*MX=DN  against MX=DN*/
+			int min_len = (seq_cop.oplen<ref_cop.oplen)?seq_cop.oplen:ref_cop.oplen;
+			if(seq_seq_step == 0){ /* DN against MX=DN */
+				if(ref_seq_step == 0){ /** padding DN against DN **/
+					MACRO_BUILD_CIGAR('P',min_len);
+					ref_cop.oplen -= min_len;
+					seq_cop.oplen -= min_len;
+				} else { /* DN against MX= **/
+					MACRO_BUILD_CIGAR(seq_cop.op,min_len);
+					seq_cop.oplen -= min_len;
+				}
+			} else if (ref_cop.seq_sign == 0){ /* MX= against DN - always wins */
+				MACRO_BUILD_CIGAR(ref_cop.op,min_len);
+				ref_cop.oplen -= min_len;
+			} else { /** MX= against MX= ***/
+				MACRO_BUILD_CIGAR(merge_M_type_ops(seq_cop.op,ref_cop.op),min_len);
+				ref_cop.oplen -= min_len;
+				seq_cop.oplen -= min_len;
+			}
+			ref_pos += min_len;
+		}
+        }
+    }
+    return ciglen;
+}
 
-    memset(&g_out_writer, 0, sizeof(g_out_writer));
-    KOutHandlerSetStdOut();
-    KStsHandlerSetStdErr();
-    KLogHandlerSetStdErr();
-    ( void ) KDbgHandlerSetStdErr();
 
-    if( (rc = ArgsMakeAndHandle(&args, argc, argv, 1, DumpArgs, sizeof(DumpArgs)/sizeof(DumpArgs[0]))) == 0 ) {
-        SParam params;
-        uint32_t pcount, count[sizeof(DumpArgs)/sizeof(DumpArgs[0])];
+static rc_t DumpCGSAM( SAM_dump_ctx_t *const ctx, TAlignedRegion const *const rgn, int options,
+                       int which, int64_t *rows, SCol const *const ids )
+{
+    if ( which == evidence_interval_IDS )
+    {
+        rc_t rc = 0;
+        unsigned i;
+        
+        for ( i = 0; i < ids->len; ++i )
+        {
+            int64_t const rowInterval = ids->base.i64[ i ];
 
-        memset(&params, 0, sizeof(params));
-        if( (rc = ArgsParamCount(args, &pcount)) != 0 || pcount < 1 ) {
-            errmsg = "";
-            rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInsufficient);
-            MiniUsage(args);
-        } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_seq_id].name, &count[earg_seq_id])) != 0 ) {
-            errmsg = DumpArgs[earg_seq_id].name;
-        } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_unaligned].name, &count[earg_unaligned])) != 0 ) {
-            errmsg = DumpArgs[earg_unaligned].name;
-        } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_cigartype].name, &count[earg_cigartype])) != 0 ) {
-            errmsg = DumpArgs[earg_cigartype].name;
-        } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_header].name, &count[earg_header])) != 0 ) {
-            errmsg = DumpArgs[earg_header].name;
-        } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_region].name, &count[earg_region])) != 0 ) {
-            errmsg = DumpArgs[earg_region].name;
-        } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_distance].name, &count[earg_distance])) != 0 ) {
-            errmsg = DumpArgs[earg_distance].name;
-        } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_identicalbases].name, &count[earg_identicalbases])) != 0 ) {
-            errmsg = DumpArgs[earg_identicalbases].name;
-        } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_gzip].name, &count[earg_gzip])) != 0 ) {
-            errmsg = DumpArgs[earg_gzip].name;
-        } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_bzip2].name, &count[earg_bzip2])) != 0 ) {
-            errmsg = DumpArgs[earg_bzip2].name;
-        } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_qname].name, &count[earg_qname])) != 0 ) {
-            errmsg = DumpArgs[earg_qname].name;
-        } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_noheader].name, &count[earg_noheader])) != 0 ) {
-            errmsg = DumpArgs[earg_noheader].name;
-        } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_fastq].name, &count[earg_fastq])) != 0 ) {
-            errmsg = DumpArgs[earg_fastq].name;
-        } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_fasta].name, &count[earg_fasta])) != 0 ) {
-            errmsg = DumpArgs[earg_fasta].name;
-        } else if( (rc = ArgsOptionCount(args, DumpArgs[earg_prefix].name, &count[earg_prefix])) != 0 || count[earg_prefix] > 1) {
-            rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive);
-            errmsg = DumpArgs[earg_prefix].name;
-        } else if( count[earg_prefix] > 0 && (rc = ArgsOptionValue(args, DumpArgs[earg_prefix].name, 0, &params.name_prefix)) != 0 ) {
-            errmsg = DumpArgs[earg_prefix].name;
-        } else {
-            uint32_t p, i;
-            const char* arg;
-
-            for(p = 0; rc == 0 && p < count[earg_region]; p++) {
-                /* name[:[from][-[to]]] 1-based!!! */
-                TAlignedRegion r;
-
-                errmsg = DumpArgs[earg_region].name;
-                if( (rc = ArgsOptionValue(args, DumpArgs[earg_region].name, p, &arg)) == 0 ) {
-                    const char* c = strchr(arg, ':');
-                    if( c == NULL ) {
-                        strncpy(r.name, arg, sizeof(r.name));
-                        r.rq = 0;
-                    } else {
-                        INSDC_coord_zero* v;
-
-                        r.r[0].from = (c - arg) > sizeof(r.name) ? sizeof(r.name) : c - arg;
-                        strncpy(r.name, arg, r.r[0].from);
-                        r.name[r.r[0].from] = '\0';
-                        r.rq = 1;
-                        r.r[0].from = -1;
-                        r.r[0].to = -1;
-                        r.max_to = 0;
-                        v = &r.r[0].from;
-                        while(rc == 0 && *++c != '\0') {
-                            if( *c == '-' ) {
-                                v = &r.r[0].to;
-                            } else if( *c == '+' ) {
-                                if( *v != 0 ) {
-                                    rc = RC(rcExe, rcArgv, rcProcessing, rcParam, rcOutofrange);
+            rc = Cursor_Read( &ctx->evi, rowInterval, alg_REGION_FILTER, ~(0u) );
+            if ( rc == 0 )
+            {
+                if ( AlignRegionFilter( ctx->evi.cols ) )
+                {
+                    rc = Cursor_ReadAlign( &ctx->evi.curs, rowInterval, ctx->evi.cols, 0 );
+                    if ( rc == 0 )
+                    {
+                        unsigned const evidence = ctx->evi.cols[ alg_EVIDENCE_ALIGNMENT_IDS ].len;
+                        if ( evidence != 0 )
+                        {
+                            INSDC_coord_len const *const refLen = ctx->evi.cols[ alg_READ_LEN ].base.coord_len;
+                            INSDC_coord_len const *const cigLen = ctx->evi.cols[ alg_CIGAR_LEN ].base.coord_len;
+                            unsigned const ploids = ctx->evi.cols[ alg_CIGAR_LEN ].len;
+                            unsigned const totalIntervalReadLen = ctx->evi.cols[ alg_READ ].len;
+			    CigOps  refCigOps_stack[1024];
+			    CigOps *refCigOps_heap=NULL;
+                            CigOps *refCigOps;
+
+			    if( totalIntervalReadLen > 1000){
+				refCigOps=refCigOps_heap = malloc( sizeof( refCigOps[ 0 ] ) * (totalIntervalReadLen+ploids) );
+			    } else {
+				refCigOps=refCigOps_stack;
+			    }
+                            
+                            if ( refCigOps != NULL )
+                            {
+                                unsigned j;
+                                unsigned start;
+                                unsigned cigop_starts[256];
+                                
+                                assert(ploids < 256);
+                                
+                                for ( start = j = 0, cigop_starts[0]=0; j < ploids; ++j )
+                                {
+                                    unsigned len = cigLen[ j ];
+                                    cigop_starts[j+1] = cigop_starts[j] + ExplodeCIGAR( refCigOps + cigop_starts[j], refLen[ j ], 
+                                                                                       ctx->evi.cols[ alg_CIGAR ].base.str + start, len );
+                                    start += len;
                                 }
-                            } else if( !isdigit(*c) ) {
-                                rc = RC(rcExe, rcArgv, rcProcessing, rcParam, rcOutofrange);
-                            } else {
-                                if( *v == -1 ) {
-                                    *v = 0;
+                                
+                                for ( j = 0; j < evidence; ++j )
+                                {
+                                    int64_t const rowAlign = ctx->evi.cols[ alg_EVIDENCE_ALIGNMENT_IDS ].base.i64[ j ];
+                                    
+                                    rc = Cursor_ReadAlign( &ctx->eva.curs, rowAlign, ctx->eva.cols, 0 );
+                                    if ( rc == 0 )
+                                    {
+                                        if(param->cg_style != 0)
+                                            rc = GenerateCGData( ctx->eva.cols, param->cg_style );
+                                        if ( rc == 0 )
+                                        {
+                                            int const ploidy = ctx->eva.cols[ alg_REF_PLOIDY ].base.u32[ 0 ];
+                                            int const readLen = ctx->eva.cols[ alg_READ ].len;
+                                            INSDC_coord_zero refPos = ctx->eva.cols[ alg_REF_POS ].base.coord0[ 0 ];
+                                            CigOps op[ 36 ];
+                                            char cigbuf[ CG_CIGAR_STRING_MAX ];
+                                            
+                                            memset( cigbuf, 0, CG_CIGAR_STRING_MAX );
+                                            ExplodeCIGAR( op, readLen, ctx->eva.cols[ alg_CIGAR ].base.str,
+                                                         ctx->eva.cols[ alg_CIGAR ].len );
+                                            ctx->eva.cols[ alg_CIGAR ].len = CombineCIGAR( cigbuf, op, readLen, refPos, 
+                                                                                          refCigOps + cigop_starts[ ploidy - 1 ], refLen[ ploidy - 1 ] );
+                                            ctx->eva.cols[ alg_CIGAR ].base.str = cigbuf;
+                                            ctx->eva.cols[ alg_REF_POS ].base.v = &refPos;
+                                            refPos += ctx->evi.cols[ alg_REF_POS ].base.coord0[ 0 ] ;
+			  		    if(refPos < 0){
+						ReferenceObj const *r = NULL;
+    						rc = ReferenceList_Find( gRefList, &r,
+									ctx->evi.cols[ alg_REF_NAME ].base.str,
+									ctx->evi.cols[ alg_REF_NAME ].len );
+						if(rc == 0){
+							bool circular=false;
+							rc=ReferenceObj_Circular(r, &circular);
+							if(rc == 0 && circular){
+								INSDC_coord_len len;
+								rc=ReferenceObj_SeqLength(r,&len);
+								if(rc == 0)
+									refPos += len;
+							}
+							ReferenceObj_Release(r);
+						}
+					    }
+                                            DumpAlignedSAM(ctx, &ctx->eva, rowAlign, ctx->readGroup, 1);
+                                            ++*rows;
+                                        }
+                                        else
+                                            break;
+                                    }
+                                    else
+                                        break;
                                 }
-                                *v = *v * 10 + (*c - '0');
+				if(refCigOps_heap) free( refCigOps_heap );
                             }
-                        }
-                        /* convert to 0-based offset */
-                        if( r.r[0].from > 0 ) {
-                            r.r[0].from--;
-                        } else if( r.r[0].to > 0 ) {
-                            r.r[0].from = 0;
-                        }
-                        if(r.r[0].to > 0 ) {
-                            r.r[0].to--;
-                        } else if( r.r[0].from >= 0 && r.r[0].to < 0 ) {
-                            r.r[0].to = r.r[0].from;
-                        }
-                        if( r.r[0].from < 0 && r.r[0].to < 0 ) {
-                            r.rq = 0;
-                        } else if( r.r[0].from > r.r[0].to ) {
-                            uint64_t x = r.r[0].from;
-                            r.r[0].from = r.r[0].to;
-                            r.r[0].to = x;
+                            else
+                                rc = RC( rcExe, rcTable, rcReading, rcMemory, rcExhausted );
                         }
                     }
-                    if( rc == 0 ) {
-                        TAlignedRegion* x = NULL;
-                        for(i = 0; i < params.region_qty; i++) {
-                            if( strcmp(params.region[i].name, r.name) == 0 ) {
-                                x = &params.region[i];
-                                break;
-                            }
-                        }
-                        if( x == NULL ) {
-                            if( (x = realloc(params.region, sizeof(*params.region) * ++params.region_qty)) == NULL ) {
-                                rc = RC(rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted);
-                            } else {
-                                params.region = x;
-                                memcpy(&params.region[params.region_qty - 1], &r, sizeof(r));
-                            }
-                        } else {
-                            int32_t k = x->rq;
-                            for(i = 0; i < x->rq; i++) {
-                                /* sort by from asc */
-                                if( r.r[0].from <= x->r[i].from ) {
-                                    k = i;
-                                    break;
+                }
+            }
+            else
+                break;
+            rc = rc ? rc : Quitting();
+            if ( rc != 0 )
+                break;
+        }
+        return rc;
+    }
+    return RC( rcExe, rcTable, rcReading, rcParam, rcUnexpected );
+}
+
+
+static rc_t ForEachAlignedRegion( SAM_dump_ctx_t *const ctx, enum e_IDS_opts const Options,
+    rc_t ( *user_func )( SAM_dump_ctx_t *ctx, TAlignedRegion const *rgn, int options, int which, int64_t *rows, SCol const *IDS ) )
+{
+    SCol cols[] =
+    {
+        { "MAX_SEQ_LEN", 0, { NULL }, 0, false },
+        { "OVERLAP_REF_POS", 0, { NULL }, 0, true },
+        { "PRIMARY_ALIGNMENT_IDS", 0, { NULL }, 0, false },
+        { "SECONDARY_ALIGNMENT_IDS", 0, { NULL }, 0, true },
+        { "EVIDENCE_INTERVAL_IDS", 0, { NULL }, 0, true }, 
+        { NULL, 0, { NULL }, 0, false }
+    };
+    enum eref_col
+    {
+        ref_MAX_SEQ_LEN = 0,
+        ref_OVERLAP_REF_LEN,
+        ref_PRIMARY_ALIGNMENT_IDS,
+        ref_SECONDARY_ALIGNMENT_IDS,
+        ref_EVIDENCE_INTERVAL_IDS
+    };
+
+    KIndex const *iname = NULL;
+    int64_t rows = 0;
+    rc_t rc = 0;
+    int options = Options & 7;
+
+    if ( Options & evidence_alignment_IDS )
+        options |= evidence_interval_IDS;
+
+    if ( ( options & primary_IDS ) == 0 )
+        cols[ ref_PRIMARY_ALIGNMENT_IDS ].name = "";
+    if ( ( options & secondary_IDS ) == 0 )
+        cols[ ref_SECONDARY_ALIGNMENT_IDS ].name = "";
+    if ( ( options & evidence_interval_IDS ) == 0 )
+        cols[ ref_EVIDENCE_INTERVAL_IDS ].name = "";
+    
+    ctx->ref.cols = cols;
+    
+    rc = VTableOpenIndexRead( ctx->ref.tbl.vtbl, &iname, "i_name" );
+    if ( rc == 0 )
+    {
+        rc = Cursor_Open( &ctx->ref.tbl, &ctx->ref.curs, ctx->ref.cols, NULL );
+        if ( rc == 0 )
+        {
+            int64_t rowid = 1;
+            uint64_t count = 0;
+            char refname[ 1024 ];
+            size_t sz;
+            
+            if ( ctx->ref.cols[ ref_PRIMARY_ALIGNMENT_IDS ].idx == 0 )
+                options &= ~primary_IDS;
+            if ( ctx->ref.cols[ ref_SECONDARY_ALIGNMENT_IDS ].idx == 0 )
+                options &= ~secondary_IDS;
+            if ( ctx->ref.cols[ ref_EVIDENCE_INTERVAL_IDS ].idx == 0 )
+                options &= ~evidence_interval_IDS;
+
+            /* new: if we have a list of regions, reset the their print-flag */
+            if ( param->region_qty > 0 )
+            {
+                unsigned r;
+                for ( r = 0; r < param->region_qty; ++r )
+                {
+                    param->region[ r ].printed = 0;
+                }
+            }
+
+            while ( ( rc = KIndexProjectText(iname, rowid + count, &rowid, &count, refname, sizeof( refname ), &sz ) ) == 0 )
+            {
+                bool include;
+                unsigned r;
+                unsigned max_to = UINT_MAX;
+                unsigned min_from = 0;
+                
+                for ( include = false, r = 0; r < param->region_qty; ++r )
+                {
+                    if ( sz == strlen( param->region[ r ].name ) &&
+                         memcmp( param->region[ r ].name, refname, sz ) == 0 )
+                    {
+                        include = true;
+                        max_to = param->region[ r ].max_to;
+                        min_from = param->region[ r ].min_from;
+                        param->region[ r ].printed++; /* new: mark a region as printed */
+                        break;
+                    }
+                }
+
+                if ( param->region_qty == 0 || include )
+                {
+                    int64_t const endrow_exclusive = rowid + count;
+                    unsigned m;
+                    unsigned k;
+                    
+                    for ( k = 0, m = 1; rc == 0 && k < 3; ++k, m <<= 1 )
+                    {
+                        if ( m & options )
+                        {
+                            unsigned lookback = 0;
+                            int64_t row;
+                            int32_t row_start_offset;
+                            unsigned pos;
+			    unsigned const maxseqlen = 5000; /***** TODO: this code is to be rewritten anyway ****/
+                            
+                            if ( param->region_qty )
+                            {
+                                if ( ctx->ref.cols[ ref_OVERLAP_REF_LEN ].idx )
+                                {
+                                    rc = Cursor_Read( &ctx->ref, rowid, 0, ~(0u) );
+                                    if ( rc != 0 )
+                                        break;
+                                    if ( ctx->ref.cols[ ref_OVERLAP_REF_LEN ].len > k )
+                                    {
+                                        unsigned const overlap = ctx->ref.cols[ ref_OVERLAP_REF_LEN ].base.coord0[ k ];
+                                        
+                                        if ( overlap != 0 )
+                                        {
+                                            
+                                            assert( overlap < rowid * maxseqlen );
+                                            lookback = ( rowid - ( overlap / maxseqlen ) );
+                                        }
+                                    }
                                 }
+                                else
+                                    lookback = 1;
                             }
-                            if( k >= 0 ) {
-                                /* insert at k position */
-                                if( x->rq >= sizeof(x->r) / sizeof(x->r[0]) ) {
-                                    rc = RC(rcExe, rcArgv, rcProcessing, rcBuffer, rcInsufficient);
-                                } else {
-                                    memmove(&x->r[k + 1], &x->r[k], sizeof(x->r[0]) * (x->rq - k));
-                                    x->r[k].from = r.r[0].from;
-                                    x->r[k].to = r.r[0].to;
-                                    x->rq++;
+			    row_start_offset = min_from/maxseqlen - lookback;
+			   if(row_start_offset < 0) row_start_offset=0;
+			    
+
+                            for ( pos = row_start_offset*maxseqlen, row = rowid + row_start_offset; rc == 0 && row < endrow_exclusive; ++row )
+                            {
+                                if ( row < 1 )
+                                {
+                                    row = 0;
+                                    continue;
                                 }
+                                rc = Cursor_Read( &ctx->ref, row, 0, ~(0u) );
+                                if ( rc != 0 )
+                                    break;
+                                if ( ctx->ref.cols[ ref_PRIMARY_ALIGNMENT_IDS + k ].len > 0 )
+                                    rc = user_func( ctx, &param->region[r], Options, m, &rows,
+                                                    &ctx->ref.cols[ ref_PRIMARY_ALIGNMENT_IDS + k ] );
+                                pos += ctx->ref.cols[ ref_MAX_SEQ_LEN ].base.u32[ 0 ];
+                                if ( pos >= max_to )
+                                    break;
+                                if ( param->test_rows != 0 && rows > param->test_rows )
+                                    break;
                             }
                         }
                     }
                 }
-            }
-            for(p = 0; p < params.region_qty; p++) {
-                SAM_DUMP_DBG(2, ("filter by %s\n", params.region[p].name));
-                if( params.region[p].rq == 0 ) {
-                    params.region[p].rq = 1;
-                    params.region[p].r[0].from = 0;
-                    params.region[p].r[0].to = 0x7FFFFFFF;
-                }
-                for(i = 0; i < params.region[p].rq; i++) {
-                    SAM_DUMP_DBG(2, ("   range: [%u:%u]\n", params.region[p].r[i].from, params.region[p].r[i].to));
-                    if( params.region[p].max_to < params.region[p].r[i].to ) {
-                        params.region[p].max_to = params.region[p].r[i].to;
+                if ( param->test_rows != 0 && rows > param->test_rows )
+                    break;
+                if ( rc != 0 )
+                    break;
+            } /* while */
+
+            /* new: walk the list of regions and report what was NOT printed ( found ) ... */
+            if ( param->region_qty > 0 && GetRCState( rc ) != rcCanceled )
+            {
+                unsigned r;
+                for ( r = 0; r < param->region_qty; ++r )
+                {
+                    if ( param->region[ r ].printed == 0 )
+                    {
+                        (void)PLOGMSG( klogWarn, ( klogWarn, "reference >$(a)< not found", "a=%s", param->region[ r ].name ) );
                     }
                 }
             }
-            for(p = 0; rc == 0 && p < count[earg_distance]; p++) {
-                /* from[-to] | [from]-to | unknown */
-                errmsg = DumpArgs[earg_distance].name;
-                if( (rc = ArgsOptionValue(args, DumpArgs[earg_distance].name, p, &arg)) != 0 ) {
-                } else if( strcasecmp(arg, "unknown") == 0 ) {
-                    params.mp_dist_unknown = true;
-                } else {
-                    TMatepairDistance* p;
-                    if( (p = realloc(params.mp_dist, sizeof(*params.mp_dist) * ++params.mp_dist_qty)) == NULL ) {
-                        rc = RC(rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted);
-                    } else {
-                        uint64_t* v;
-                        params.mp_dist = p;
-                        p = &params.mp_dist[params.mp_dist_qty - 1];
-                        p->from = 0;
-                        p->to = 0;
-                        v = &p->from;
-                        while(rc == 0 && *arg != '\0') {
-                            if( *arg == '-' ) {
-                                v = &p->to;
-                            } else if( *arg == '+' ) {
-                                if( *v != 0 ) {
-                                    rc = RC(rcExe, rcArgv, rcProcessing, rcParam, rcOutofrange);
-                                }
-                            } else if( !isdigit(*arg) ) {
-                                rc = RC(rcExe, rcArgv, rcProcessing, rcParam, rcOutofrange);
-                            } else {
-                                *v = *v * 10 + (*arg - '0');
-                            }
-                            arg++;
-                        }
-                        if( p->from > p->to && p->to != 0 ) {
-                            uint64_t x = p->from;
-                            p->from = p->to;
-                            p->to = x;
+
+            if ( GetRCObject( rc ) == rcId && GetRCState( rc ) == rcNotFound )
+            {
+                rc = 0;
+            }
+
+        }
+    }
+    Cursor_Close( &ctx->ref.curs );
+    KIndexRelease( iname );
+    
+    return rc;
+}
+
+
+static rc_t DumpAlignedTable( SAM_dump_ctx_t *const ctx, DataSource *const ds,
+                              bool const primary, int const cg_style, unsigned *const rcount )
+{
+    unsigned i;
+    int64_t start;
+    uint64_t count;
+    rc_t rc = VCursorIdRange( ds->curs.vcurs, 0, &start, &count );
+    
+    if ( rc != 0 )
+        return rc;
+    for ( i = 0; i != (unsigned)count; ++i )
+    {
+        if ( DumpAlignedRow(ctx, ds, start + i, primary, cg_style, &rc ) )
+            ++*rcount;
+        if ( rc != 0 || ( rc = Quitting() ) != 0 )
+            return rc;
+        if ( param->test_rows && *rcount > param->test_rows )
+            break;
+    }
+    return 0;
+}
+
+
+static rc_t DumpUnsorted( SAM_dump_ctx_t *const ctx )
+{
+    rc_t rc = 0;
+    unsigned rcount;
+    
+    if ( rc == 0 && param->cg_evidence )
+    {
+        SAM_DUMP_DBG( 2, ( "%s EVIDENCE_INTERVAL\n", ctx->accession ) );
+        rcount = 0;
+        rc = DumpAlignedTable( ctx, &ctx->evi, false, 0, &rcount );
+        (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) allele sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+    }
+    if ( rc == 0 && param->cg_ev_dnb )
+    {
+        SAM_DUMP_DBG( 2, ( "%s EVIDENCE_ALIGNMENT\n", ctx->accession ) );
+        rcount = 0;
+        rc = DumpAlignedTable( ctx, &ctx->eva, false, param->cg_style, &rcount );
+        (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) support sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+    }
+    if ( rc == 0 && ctx->pri.curs.vcurs )
+    {
+        SAM_DUMP_DBG( 2, ( "%s PRIMARY_ALIGNMENT\n", ctx->accession ) );
+        rcount = 0;
+        rc = DumpAlignedTable( ctx, &ctx->pri, true, param->cg_style, &rcount );
+        (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) primary sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+    }
+    if ( rc == 0 && ctx->sec.curs.vcurs )
+    {
+        SAM_DUMP_DBG( 2, ( "%s SECONDARY_ALIGNMENT\n", ctx->accession ) );
+        rcount = 0;
+        rc = DumpAlignedTable( ctx, &ctx->sec, false, param->cg_style, &rcount );
+        (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) secondary sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+    }
+    return rc;
+}
+
+
+static rc_t DumpUnaligned( SAM_dump_ctx_t *const ctx, bool const aligned )
+{
+    rc_t rc = 0;
+    int64_t start = 0;
+    uint64_t count = 0;
+
+    rc = VCursorIdRange( ctx->seq.curs.vcurs, 0, &start, &count );
+    if ( rc == 0 )
+    {
+        uint64_t rcount = 0;
+        if ( param->test_rows != 0 && count > param->test_rows )
+        {
+            count = param->test_rows;
+        }
+        SAM_DUMP_DBG( 2, ( "%s SEQUENCE table range from %ld qty %lu\n", ctx->accession, start, count ) );
+        while ( count > 0 && rc == 0 )
+        {
+            uint32_t i;
+
+            if ( ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].idx == 0)
+            {
+                rc = DumpUnalignedReads( ctx, NULL, start, &rcount );
+            }
+            else
+            {
+                /* avoid reading whole sequence cursor data unnecessarily */
+                rc = Cursor_Read( &ctx->seq, start, seq_PRIMARY_ALIGNMENT_ID, ~(unsigned)0 );
+                if ( rc == 0 )
+                {
+                    /* find if its completely unaligned */
+                    int64_t min_prim_id = 0;
+                    bool has_unaligned = false;
+                    for ( i = 0; rc == 0 && i < ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].len; i++ )
+                    {
+                        int64_t x = ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[ i ];
+                        has_unaligned |= x == 0;
+                        if ( ( min_prim_id == 0 && x != 0 ) || min_prim_id < x )
+                        {
+                            min_prim_id = x;
                         }
-                        if( p->from == 0 && p->to == 0 ) {
-                            params.mp_dist_qty--;
+                    }
+                    if ( min_prim_id == 0 )
+                    {
+                        /* fully unaligned spot */
+                        rc = DumpUnalignedReads( ctx, NULL, start, &rcount );
+                    }
+                    else if ( has_unaligned && !param->unaligned_spots )
+                    {
+                        if ( rc == 0 )
+                        {
+#if USE_MATE_CACHE
+                            uint64_t val;
+                            rc = Cache_Get( &ctx->pri.curs, min_prim_id, &val );
+                            if ( rc == 0 )
+                            {
+                                ctx->pri.cols[ alg_REF_POS ].len = 0;
+                                Cache_Unpack( val, 0, &ctx->pri.curs, ctx->pri.cols );
+                                ctx->pri.cols[ alg_SEQ_SPOT_ID ].base.i64 = &start;
+                                ctx->pri.cols[ alg_SEQ_SPOT_ID ].len = 1;
+                                memcpy( &ctx->pri.cols[ alg_REF_NAME ], &ctx->pri.cols[ alg_MATE_REF_NAME ], sizeof( SCol ) );
+                                memcpy( &ctx->pri.cols[ alg_REF_SEQ_ID ], &ctx->pri.cols[ alg_MATE_REF_NAME ], sizeof( SCol ) );
+                                memcpy( &ctx->pri.cols[ alg_REF_POS ], &ctx->pri.cols[ alg_MATE_REF_POS ], sizeof( SCol ) );
+                            }
+                            else if ( !( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcItem ) )
+                            {
+                                break;
+                            }
+                            else
+                            {
+#endif /* USE_MATE_CACHE */
+                                rc = Cursor_ReadAlign( &ctx->pri.curs, min_prim_id, ctx->pri.cols, alg_MATE_ALIGN_ID );
+#if USE_MATE_CACHE
+                            }
+#endif /* USE_MATE_CACHE */
+                            rc = rc ? rc : DumpUnalignedReads( ctx, ctx->pri.cols, min_prim_id, &rcount );
                         }
                     }
+                } else if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcRow )
+                {
+                    rc = 0;
                 }
             }
-            for(p = 0; p < params.mp_dist_qty; p++) {
-                if( params.mp_dist_unknown ) {
-                    SAM_DUMP_DBG(2, ("distance 'unknown'\n"));
-                }
-                SAM_DUMP_DBG(2, ("distance [%lu-%lu]\n", params.mp_dist[p].from, params.mp_dist[p].to));
-            }
-            params.use_seqid = (count[earg_seq_id] > 0) || (pcount > 1);
-            params.unaligned = count[earg_unaligned] > 0;
-            params.long_cigar = count[earg_cigartype] > 0;
-            params.reheader = count[earg_header] > 0;
-            params.hide_identical = count[earg_identicalbases] > 0;
-            params.fasta = count[earg_fasta] > 0;
-            params.fastq = count[earg_fastq] > 0;
-            params.spot_group_in_name = (count[earg_qname] > 0) || (pcount > 1);
-            params.noheader = (count[earg_noheader] > 0) || params.fasta || params.fastq;
+            start++;
+            count--;
+            rc = rc ? rc : Quitting();
+        }
+        (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) unaligned sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+    }
+    return rc;
+}
+
+#if USE_MATE_CACHE
+static rc_t FlushUnalignedRead_cb (uint64_t key, bool value,void *user_data)
+{
+	rc_t rc;
+	int64_t spot_id = (int64_t) key;
+	int64_t aligned_mate_id = (int64_t) value;
+	SAM_dump_ctx_t *const ctx = user_data;
+	rc = Cursor_Read( &ctx->seq, spot_id, seq_PRIMARY_ALIGNMENT_ID, ~(unsigned)0 );
+	if ( rc == 0 ) {
+		uint64_t rcount;
+		uint64_t val;
+		assert(ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].len == 2);
+		if(ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[0]==0){
+			aligned_mate_id = ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[1];
+			assert(aligned_mate_id != 0);
+		} else if(ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[1] == 0){
+			aligned_mate_id = ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[0];
+			assert(aligned_mate_id != 0);
+		} else {
+			assert(0);
+		}
+                rc = Cache_Get( &ctx->pri.curs, aligned_mate_id, &val );
+                if ( rc == 0 ) {
+			ctx->pri.cols[ alg_REF_POS ].len = 0;
+			Cache_Unpack( val, 0, &ctx->pri.curs, ctx->pri.cols );
+			ctx->pri.cols[ alg_SEQ_SPOT_ID ].base.i64 = &spot_id;
+			ctx->pri.cols[ alg_SEQ_SPOT_ID ].len = 1;
+			memcpy( &ctx->pri.cols[ alg_REF_NAME ], &ctx->pri.cols[ alg_MATE_REF_NAME ], sizeof( SCol ) );
+			memcpy( &ctx->pri.cols[ alg_REF_SEQ_ID ], &ctx->pri.cols[ alg_MATE_REF_NAME ], sizeof( SCol ) );
+			memcpy( &ctx->pri.cols[ alg_REF_POS ], &ctx->pri.cols[ alg_MATE_REF_POS ], sizeof( SCol ) );
+			rc =DumpUnalignedReads( ctx, ctx->pri.cols, aligned_mate_id, &rcount );
+		}
+	}
+        return rc;
+}
+static rc_t FlushUnaligned( SAM_dump_ctx_t *const ctx, const SCursCache * cache )
+{
+    return KVectorVisitBool (cache->cache_unaligned_mate, false, FlushUnalignedRead_cb, ctx );
+}
+#endif
+
+static rc_t DumpHeader( SAM_dump_ctx_t const *ctx )
+{
+    bool reheader = param->reheader;
+    rc_t rc = 0;
+    
+    if ( !reheader )
+    {
+        if ( ctx->db )
+        {
+            /* grab header from db meta node */
+            KMetadata const *meta;
             
-            if( rc == 0 ) {
-                rc = BufferedWriterMake(count[earg_gzip] > 0, count[earg_bzip2] > 0);
-            }
-            for(p = 0; rc == 0 && p < pcount; p++) {
-                if( (rc = ArgsParamValue(args, p, &params.path)) == 0 ) {
-                    int i;
-                    params.accession = params.path;
-                    /* remove trailing /\ */
-                    for(i = strlen(params.path) - 1; i >= 0; i--) {
-                        if( params.path[i] != '/' && params.path[i] != '\\' ) {
+            rc = VDatabaseOpenMetadataRead( ctx->db, &meta );
+            if ( rc == 0 )
+            {
+                KMDataNode const *node;
+                
+                rc = KMetadataOpenNodeRead( meta, &node, "BAM_HEADER" );
+                KMetadataRelease( meta );
+                
+                if ( rc == 0 )
+                {
+                    size_t offset = 0;
+                    
+                    for ( offset = 0; ; )
+                    {
+                        size_t remain;
+                        size_t nread;
+                        char buffer[ 4096 ];
+                        
+                        rc = KMDataNodeRead( node, offset, buffer, sizeof(buffer), &nread, &remain );
+                        if ( rc != 0 )
                             break;
-                        }
-                        ((char*)params.path)[i] = '\0';
-                    }
-                    /* use last path element as accession */
-                    for(i = strlen(params.path) - 1; i >= 0; i--) {
-                        if( params.path[i] == '/' || params.path[i] == '\\' ) {
-                            params.accession = &params.path[i + 1];
+                        BufferedWriter( NULL, buffer, nread, NULL );
+                        if ( remain == 0 )
+                        {
+                            if ( buffer[nread - 1] != '\n' )
+                            {
+                                 buffer[ 0 ] = '\n';
+                                 BufferedWriter( NULL, buffer, 1, NULL );
+                            }
                             break;
                         }
+                        offset += nread;
                     }
-                    rc = Dump(p, pcount > 1, &params);
+                    KMDataNodeRelease(node);
+                }
+                else if ( GetRCState( rc ) == rcNotFound )
+                {
+                    reheader = true;
+                    rc = 0;
                 }
             }
-            BufferedWriterRelease();
+        }
+        else
+        {
+            reheader = true;
+            rc = 0;
+        }
+    }
+
+    if ( rc == 0 && reheader )
+    {
+        KOutMsg( "@HD\tVN:1.3\n" );
+        if ( gRefList )
+            rc = RefSeqPrint();
+        if ( ctx->readGroup )
+            ReadGroup_print( ctx->readGroup );
+        if ( ctx->seq.tbl.vtbl )
+            rc = DumpReadGroups( &ctx->seq.tbl );
+    }
+    if ( rc == 0 && param->comments )
+    {
+        unsigned i;
+        
+        for( i = 0; param->comments[ i ]; ++i )
+            KOutMsg( "@CO\t%s\n", param->comments[ i ] );
+    }
+    return rc;
+}
+
+
+static rc_t DumpDB( SAM_dump_ctx_t *const ctx )
+{
+    rc_t rc = 0;
+
+    if ( ctx->ref.tbl.vtbl != NULL )
+        rc = ReferenceList_MakeTable( &gRefList, ctx->ref.tbl.vtbl, 0, CURSOR_CACHE, NULL, 0 );
+    if ( !param->noheader )
+        rc = DumpHeader( ctx );
+    if ( rc == 0 )
+    {
+        if ( param->region_qty ){
+            rc = ForEachAlignedRegion(  ctx
+                                      ,   ( param->primaries   ? primary_IDS : 0 )
+                                        | ( param->secondaries ? secondary_IDS : 0 )
+                                        | ( param->cg_evidence ? evidence_interval_IDS : 0 )
+                                        | ( param->cg_ev_dnb   ? evidence_alignment_IDS : 0 )
+                                      , DumpAlignedRowList_cb );
+#if USE_MATE_CACHE
+	    if ( rc == 0 && param->unaligned ){
+                rc = FlushUnaligned( ctx,ctx->pri.curs.cache);
+	    }
+#endif
+	}
+        if ( param->cg_sam )
+            rc = ForEachAlignedRegion( ctx, evidence_interval_IDS, DumpCGSAM );
+
+        if ( param->region_qty == 0 )
+        {
+            rc = DumpUnsorted( ctx );
+            if ( rc == 0 && param->unaligned )
+                rc = DumpUnaligned( ctx, ctx->pri.tbl.vtbl != NULL );
+        }
+    }
+    ReferenceList_Release( gRefList );
+    return rc;
+}
+
+
+static rc_t DumpTable( SAM_dump_ctx_t *ctx )
+{
+    rc_t rc = 0;
+
+    if ( !param->noheader )
+        rc = DumpHeader( ctx );
+    if ( rc == 0 )
+        rc = DumpUnaligned( ctx, false );
+    return rc;
+}
+
+
+static rc_t ProcessTable( VDBManager const *mgr, char const fullPath[],
+                          char const accession[], char const readGroup[] )
+{
+    VTable const *tbl;
+    rc_t rc = VDBManagerOpenTableRead( mgr, &tbl, 0, fullPath );
+    
+    if ( rc != 0 )
+    {
+        VSchema *schema;
+        
+        rc = VDBManagerMakeSRASchema( mgr, &schema );
+        if ( rc == 0 )
+        {
+            rc = VDBManagerOpenTableRead( mgr, &tbl, schema, fullPath );
+            VSchemaRelease( schema );
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        SAM_dump_ctx_t ctx;
+        SCol seq_cols[ sizeof( gSeqCol ) / sizeof( gSeqCol[ 0 ] ) ];
+        
+        memset( &ctx, 0, sizeof( ctx ) );
+        
+        ctx.fullPath = fullPath;
+        ctx.accession = accession;
+        ctx.readGroup = readGroup;
+        
+        DATASOURCE_INIT( ctx.seq, accession );
+        ctx.seq.tbl.vtbl = tbl;
+        ctx.seq.type = edstt_Sequence;
+        
+        ReportResetTable( fullPath, tbl );
+
+        ctx.seq.cols = seq_cols;
+        memcpy( ctx.seq.cols, gSeqCol, sizeof( gSeqCol ) );
+        rc = Cursor_Open( &ctx.seq.tbl, &ctx.seq.curs, ctx.seq.cols, NULL );
+        if ( rc == 0 ) {
+            rc = DumpTable( &ctx );
+            Cursor_Close(&ctx.seq.curs);
+        }
+        VTableRelease( tbl );
+    }
+    return rc;
+}
+
+
+static void SetupColumns( DataSource *ds, enum eDSTableType type )
+{
+    memcpy( ds->cols, g_alg_col_tmpl, sizeof( g_alg_col_tmpl ) );
+    
+    ds->type = type;
+    if ( param->use_seqid )
+        ds->cols[ alg_MATE_REF_NAME ].name = "MATE_REF_SEQ_ID";
+    else
+        ds->cols[ alg_MATE_REF_NAME ].name = "MATE_REF_NAME";
+    
+    if ( param->fasta || param->fastq )
+        ds->cols[ alg_READ ].name = "RAW_READ";
+    else if ( param->hide_identical )
+        ds->cols[ alg_READ ].name = "MISMATCH_READ";
+    else
+        ds->cols[ alg_READ ].name = "READ";
+    
+    if ( param->long_cigar )
+    {
+        ds->cols[ alg_CIGAR ].name = "CIGAR_LONG";
+        ds->cols[ alg_CIGAR_LEN ].name = "CIGAR_LONG_LEN";
+    }
+    else
+    {
+        ds->cols[ alg_CIGAR ].name = "CIGAR_SHORT";
+        ds->cols[ alg_CIGAR_LEN ].name = "CIGAR_SHORT_LEN";
+    }
+
+    if(param->qualQuant && param->qualQuantSingle){ /** we don't really need quality ***/
+	ds->cols[ alg_SAM_QUALITY   ].name = "";
+    }
+    
+    switch ( type )
+    {
+    case edstt_EvidenceInterval:
+	
+        ds->cols[ alg_SEQ_SPOT_ID   ].name = "";
+        ds->cols[ alg_SEQ_NAME      ].name = "";
+        ds->cols[ alg_SAM_QUALITY   ].name = "";
+        ds->cols[ alg_SPOT_GROUP    ].name = "";
+        ds->cols[ alg_SEQ_SPOT_GROUP].name = "";
+        ds->cols[ alg_SEQ_READ_ID   ].name = "";
+        ds->cols[ alg_MATE_ALIGN_ID ].name = "";
+        ds->cols[ alg_MATE_REF_ID   ].name = "";
+        ds->cols[ alg_MATE_REF_NAME ].name = "";
+        ds->cols[ alg_SAM_FLAGS     ].name = "";
+        ds->cols[ alg_MATE_REF_POS  ].name = "";
+        ds->cols[ alg_ALIGN_GROUP   ].name = "";
+        ds->cols[ alg_TEMPLATE_LEN  ].name = "";
+        if ( param->cg_sam || param->cg_ev_dnb )
+            ds->cols[ alg_EVIDENCE_ALIGNMENT_IDS ].name = "EVIDENCE_ALIGNMENT_IDS";
+        break;
+
+    case edstt_EvidenceAlignment:
+        ds->cols[ alg_REF_PLOIDY    ].name = "REF_PLOIDY";
+        ds->cols[ alg_REF_ID        ].name = "REF_ID";
+        ds->cols[ alg_MATE_ALIGN_ID ].name = "";
+        ds->cols[ alg_MATE_REF_ID   ].name = "";
+        ds->cols[ alg_MATE_REF_NAME ].name = "";
+        ds->cols[ alg_SAM_FLAGS     ].name = "";
+        ds->cols[ alg_MATE_REF_POS  ].name = "";
+        ds->cols[ alg_ALIGN_GROUP   ].name = "";
+        ds->cols[ alg_TEMPLATE_LEN  ].name = "";
+        break;
+    default:
+        break;
+    }
+}
+
+
+static rc_t ProcessDB( VDatabase const *db, char const fullPath[],
+                       char const accession[], char const readGroup[] )
+{
+    char const *const refTableName = (   param->region_qty > 0
+                                      || param->cg_evidence
+                                      || param->cg_ev_dnb
+                                      || param->cg_sam
+                                      || param->reheader
+                                      || param->primaries
+                                      || param->secondaries
+                                     )
+                                   ? "REFERENCE"
+                                   : 0;
+    char const *const priTableName = param->primaries   ? "PRIMARY_ALIGNMENT" : 0;
+    char const *const secTableName = param->secondaries ? "SECONDARY_ALIGNMENT" : 0;
+    char const *const seqTableName = ( param->unaligned || param->reheader ) ? "SEQUENCE" : 0;
+    char const *const eviTableName = ( param->cg_evidence || ( param->cg_ev_dnb & ( param->region_qty > 0 ) ) || param->cg_sam ) ? "EVIDENCE_INTERVAL" : 0;
+    char const *const evaTableName = ( param->cg_ev_dnb   || param->cg_sam ) ? "EVIDENCE_ALIGNMENT" : 0;
+    
+    SAM_dump_ctx_t ctx;
+    SCol align_cols[ ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) * 4 ];
+    SCol seq_cols[ sizeof( gSeqCol ) / sizeof( gSeqCol[ 0 ] ) ];
+    rc_t rc = 0;
+    
+    memset( &ctx, 0, sizeof( ctx ) );
+    memset( align_cols, 0, sizeof( align_cols ) );
+    memset( seq_cols, 0, sizeof( seq_cols ) );
+    
+    ctx.db = db;
+    ctx.fullPath = fullPath;
+    ctx.accession = accession;
+    ctx.readGroup = readGroup;
+    
+    DATASOURCE_INIT( ctx.seq, seqTableName );
+    DATASOURCE_INIT( ctx.ref, refTableName );
+    DATASOURCE_INIT( ctx.pri, priTableName );
+    DATASOURCE_INIT( ctx.sec, secTableName );
+    DATASOURCE_INIT( ctx.evi, eviTableName );
+    DATASOURCE_INIT( ctx.eva, evaTableName );
+    
+    if ( ctx.seq.tbl.name )
+    {
+        rc = VDatabaseOpenTableRead( db, &ctx.seq.tbl.vtbl, ctx.seq.tbl.name );
+        if ( rc == 0 )
+        {
+            ctx.seq.cols = seq_cols;
+            memcpy(seq_cols, gSeqCol, sizeof(gSeqCol));
+            rc = Cursor_Open( &ctx.seq.tbl, &ctx.seq.curs, ctx.seq.cols, NULL );
+        }
+    }
+    ctx.pri.cols = &align_cols[ 0 * ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) ];
+    ctx.sec.cols = &align_cols[ 1 * ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) ];
+    ctx.evi.cols = &align_cols[ 2 * ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) ];
+    ctx.eva.cols = &align_cols[ 3 * ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) ];
+    
+    SetupColumns( &ctx.pri, edstt_PrimaryAlignment );
+    SetupColumns( &ctx.sec, edstt_SecondaryAlignment );
+    SetupColumns( &ctx.evi, edstt_EvidenceInterval );
+    SetupColumns( &ctx.eva, edstt_EvidenceAlignment );
+    
+    if ( ctx.pri.tbl.name )
+        VDatabaseOpenTableRead( db, &ctx.pri.tbl.vtbl, ctx.pri.tbl.name );
+    if ( ctx.sec.tbl.name )
+        VDatabaseOpenTableRead( db, &ctx.sec.tbl.vtbl, ctx.sec.tbl.name );
+    if ( ctx.evi.tbl.name )
+        VDatabaseOpenTableRead( db, &ctx.evi.tbl.vtbl, ctx.evi.tbl.name );
+    if ( ctx.eva.tbl.name )
+        VDatabaseOpenTableRead( db, &ctx.eva.tbl.vtbl, ctx.eva.tbl.name );
+    
+    if (   ctx.pri.tbl.vtbl == NULL
+        && ctx.sec.tbl.vtbl == NULL
+        && ctx.evi.tbl.vtbl == NULL
+        && ctx.eva.tbl.vtbl == NULL )
+    {
+        memset (&ctx.pri, 0, sizeof( ctx.pri ) * 4 );
+        if ( ctx.seq.tbl.name == NULL )
+        {
+            ctx.seq.tbl.name = "SEQUENCE";
+            rc = VDatabaseOpenTableRead( db, &ctx.seq.tbl.vtbl, ctx.seq.tbl.name );
+        }
+        if ( rc == 0 )
+        {
+            ctx.seq.cols = seq_cols;
+            memcpy(seq_cols, gSeqCol, sizeof(gSeqCol));
+            rc = Cursor_Open(&ctx.seq.tbl, &ctx.seq.curs, ctx.seq.cols, NULL);
+            if ( rc == 0 )
+            {
+                rc = DumpTable( &ctx );
+                Cursor_Close(&ctx.seq.curs);
+            }
+            VTableRelease(ctx.seq.tbl.vtbl);
+        }
+        VDatabaseRelease( db );
+        return rc;
+    }
+    ReportResetDatabase( fullPath, db );
+    
+    if ( ctx.ref.tbl.name )
+    {
+        rc = VDatabaseOpenTableRead( db, &ctx.ref.tbl.vtbl, ctx.ref.tbl.name );
+        ctx.ref.type = edstt_Reference;
+    }
+    if ( rc == 0 )
+        rc = Cursor_Open( &ctx.pri.tbl, &ctx.pri.curs, ctx.pri.cols, ctx.seq.curs.cache );
+    if ( rc == 0 )
+        rc = Cursor_Open( &ctx.sec.tbl, &ctx.sec.curs, ctx.sec.cols, NULL );
+    if ( rc == 0 )
+        rc = Cursor_Open( &ctx.evi.tbl, &ctx.evi.curs, ctx.evi.cols, NULL );
+    if ( rc == 0 )
+        rc = Cursor_Open( &ctx.eva.tbl, &ctx.eva.curs, ctx.eva.cols, NULL );
+    if ( rc == 0 )
+        rc = DumpDB( &ctx );
+    
+    Cursor_Close(&ctx.ref.curs);
+    Cursor_Close(&ctx.pri.curs);
+    Cursor_Close(&ctx.sec.curs);
+    Cursor_Close(&ctx.evi.curs);
+    Cursor_Close(&ctx.eva.curs);
+    Cursor_Close(&ctx.seq.curs);
+    
+    VTableRelease( ctx.ref.tbl.vtbl );
+    VTableRelease( ctx.pri.tbl.vtbl );
+    VTableRelease( ctx.sec.tbl.vtbl );
+    VTableRelease( ctx.evi.tbl.vtbl );
+    VTableRelease( ctx.eva.tbl.vtbl );
+    VTableRelease( ctx.seq.tbl.vtbl );
+    
+    return rc;
+}
+
+#if 0
+rc_t ResolvePath( char const *accession, char const ** path )
+{
+    rc_t rc = 0;
+    static char tblpath[ 4096 ];
+#if TOOLS_USE_SRAPATH != 0
+    static SRAPath* pmgr = NULL;
+    
+    if ( accession == NULL && path == NULL )
+    {
+        SRAPathRelease( pmgr );
+        return 0;
+    }
+    if (   pmgr != NULL
+        || ( rc = SRAPathMake( &pmgr, NULL ) ) == 0
+        || ( GetRCState( rc ) == rcNotFound && GetRCTarget( rc ) == rcDylib ) )
+    {
+        *path = tblpath;
+        tblpath[ 0 ] = '\0';
+        rc = 0;
+        do {
+            if ( pmgr != NULL && !SRAPathTest( pmgr, accession ) )
+            {
+                /* try to resolve the path using mgr */
+                rc = SRAPathFind( pmgr, accession, tblpath, sizeof( tblpath ) );
+                if ( rc == 0 )
+                    break;
+            }
+            if ( strlen( accession ) >= sizeof( tblpath ) )
+            {
+                rc = RC( rcExe, rcPath, rcResolving, rcBuffer, rcInsufficient );
+            }
+            else
+            {
+                strcpy( tblpath, accession );
+                rc = 0;
+            }
+        } while( false );
+    }
+#else
+    if ( accession != NULL && path != NULL )
+    {
+        *path = tblpath;
+        strcpy( tblpath, accession );
+    }
+#endif
+
+    return rc;
+}
+#endif
+
+
+static rc_t ProcessPath( VDBManager const *mgr, char const Path[] )
+{
+#if 0
+    unsigned pathlen = strlen( Path );
+    char *readGroup = NULL;
+    char *path = NULL;
+    unsigned i;
+    rc_t rc;
+    
+    /* strip trailing path seperators */
+    for ( i = pathlen; i > 0; )
+    {
+        int const ch = Path[ --i ];
+        
+        if ( ch == '/' || ch == '\\' )
+            --pathlen;
+        else
+            break;
+    }
+
+    /* find read group alias */
+    for ( i = pathlen; i > 0; )
+    {
+        int const ch = Path[ --i ];
+        
+        if ( ch == '=' )
+        {
+            unsigned const pos = i + 1;
+            unsigned const len = pathlen - pos;
+            
+            pathlen = i;
+            
+            readGroup = malloc( len + 1 );
+            if ( readGroup == NULL )
+                return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+            memcpy( readGroup, &Path[ pos ], len );
+            readGroup[ len ] = '\0';
+            break;
+        }
+    }
+
+    path = malloc( pathlen + 1 );
+    if ( path == NULL )
+        return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+    memcpy( path, Path, pathlen );
+    path[ pathlen ] = '\0';
+    
+    rc = ReportResetObject( path );
+    if ( rc == 0 )
+    {
+        char const *fullPath;
+
+        rc = ResolvePath( path, &fullPath );
+        if ( rc == 0 )
+        {
+            char const *accession = fullPath;
+            VDatabase const *db;
+            
+            /* use last path element as accession */
+            for ( i = pathlen; i > 0; )
+            {
+                int const ch = path[ --i ];
+                
+                if ( ch == '/' || ch == '\\' )
+                {
+                    accession = &fullPath[ i + i ];
+                    break;
+                }
+            }
+            rc = VDBManagerOpenDBRead( mgr, &db, NULL, fullPath );
+            if ( rc == 0 )
+            {
+                rc = ProcessDB( db, fullPath, accession, readGroup );
+                VDatabaseRelease( db );
+            }
+            else
+                rc = ProcessTable( mgr, fullPath, accession, readGroup );
+        }
+    }
+    free( path );
+    free( readGroup );
+    return rc;
+
+#else
+
+    char * pc;
+    rc_t rc = 0;
+
+    pc = strchr (Path, ':');
+    if (pc == NULL)
+    {
+        unsigned pathlen;
+        char *readGroup;
+        char *path;
+        unsigned i;
+
+    old:
+        pathlen = strlen( Path );
+        readGroup = NULL;
+        path = NULL;
+    
+        /* strip trailing path seperators */
+        for ( i = pathlen; i > 0; )
+        {
+            int const ch = Path[ --i ];
+        
+            if ( ch == '/' || ch == '\\' )
+                --pathlen;
+            else
+                break;
+        }
+
+        /* find read group alias */
+        for ( i = pathlen; i > 0; )
+        {
+            int const ch = Path[ --i ];
+        
+            if ( ch == '=' )
+            {
+                unsigned const pos = i + 1;
+                unsigned const len = pathlen - pos;
+            
+                pathlen = i;
+            
+                readGroup = malloc( len + 1 );
+                if ( readGroup == NULL )
+                    return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+                memcpy( readGroup, &Path[ pos ], len );
+                readGroup[ len ] = '\0';
+                break;
+            }
+        }
+
+        path = malloc( pathlen + 1 );
+        if ( path == NULL )
+            return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+        memcpy( path, Path, pathlen );
+        path[ pathlen ] = '\0';
+    
+        rc = ReportResetObject( path );
+        if ( rc == 0 )
+        {
+            char const *accession = path;
+            VDatabase const *db;
+            
+            /* use last path element as accession */
+            for ( i = pathlen; i > 0; )
+            {
+                int const ch = path[ --i ];
+                
+                if ( ch == '/' || ch == '\\' )
+                {
+                    accession = &path[ i + 1 ];
+                    break;
+                }
+            }
+            rc = VDBManagerOpenDBRead( mgr, &db, NULL, path );
+            if ( rc == 0 )
+            {
+                rc = ProcessDB( db, path, accession, readGroup );
+                if (UIError(rc, db, NULL)) {
+                    UIDatabaseLOGError(rc, db, true);
+/*                  *error_reported = true; */
+                }
+                VDatabaseRelease( db );
+            }
+            else {
+                rc = ProcessTable( mgr, path, accession, readGroup );
+                if (UIError(rc, NULL, NULL)) {
+                    UITableLOGError(rc, NULL, true);
+/*                  *error_reported = true; */
+                }
+            }
+        }
+        free( path );
+        free( readGroup );
+        return rc;
+    }
+    else
+    {
+        VPath * vpath;
+        char * basename;
+        size_t zz;
+        char buffer [8193];
+        char readgroup_ [257];
+        char * readgroup;
+
+        rc = VPathMake (&vpath, Path);
+        if (rc)
+            ; /* LOGERR */
+        else
+        {
+            VPUri_t uri_t;
+            switch (uri_t = VPathGetUri_t (vpath))
+            {
+            default:
+            case vpuri_invalid:
+                rc = RC (rcExe, rcParam, rcAccessing, rcPath, rcInvalid);
+                break;
+            case vpuri_not_supported:
+                rc = RC (rcExe, rcParam, rcAccessing, rcPath, rcUnsupported);
+                break;
+            case vpuri_none:
+                goto old;
+
+            case vpuri_ncbi_vfs:
+            case vpuri_file:
+            case vpuri_ncbi_acc:
+            case vpuri_http:
+                rc = VPathReadPath (vpath, buffer, sizeof buffer - 1, &zz);
+                if (rc)
+                    ;
+                else
+                {
+                loop:
+                    basename = strrchr (buffer, '/');
+                    if (basename)
+                    {
+                        if (basename[1] == '\0')
+                        {
+                            basename[0] = '\0';
+                            goto loop;
+                        }
+                        else
+                            ++basename;
+                    }
+                    else
+                        basename = buffer;
+
+                    {
+                        char * ext;
+
+                        /* cut off [.lite].[c]sra[.nenc||.ncbi_enc] if any */
+                        ext = strrchr( basename, '.' );
+                        if ( ext != NULL )
+                        {
+                            if ( strcasecmp( ext, ".nenc" ) == 0 || strcasecmp( ext, ",ncbi_enc" ) == 0 )
+                            {
+                                *ext = '\0';
+                                ext = strrchr( basename, '.' );
+                            }
+                            if ( ext != NULL )
+                            {
+                                if ( strcasecmp( ext, ".sra" ) == 0 || strcasecmp( ext, ".csra" ) == 0 )
+                                {
+                                    *ext = '\0';
+                                    ext = strrchr( basename, '.' );
+                                    if ( ext != NULL && strcasecmp( ext, ".lite" ) == 0 )
+                                        *ext = '\0';
+                                }
+                            }
+                        }
+                    }
+
+                    rc = VPathOption (vpath, vpopt_readgroup, readgroup_, 
+                                      sizeof readgroup_ - 1, &zz);
+                    if (rc)
+                    {
+                        if (GetRCState (rc) == rcNotFound)
+                        {
+                            rc = 0;
+                            readgroup = NULL;
+                        }
+                    }
+                    else
+                        readgroup = readgroup_;
+
+
+                    if (rc)
+                        ;
+                    else
+                    {
+                        VDatabase const *db;
+
+                        rc = VDBManagerOpenDBRead( mgr, &db, NULL, Path );
+                        if ( rc == 0 )
+                        {
+                            rc = ProcessDB( db, Path, basename, readgroup );
+                            VDatabaseRelease( db );
+                        }
+                        else
+                            rc = ProcessTable( mgr, Path, basename, readgroup );
+                    }
+                }
+                break;
+            }
+            VPathRelease (vpath);
+        }
+    }
+    return rc;
+#endif
+}
+
+
+ver_t CC KAppVersion( void )
+{
+    return SAM_DUMP_VERS;
+}
+
+char const *unaligned_usage[] = {"Output unaligned reads", NULL};
+char const *unaligned_only_usage[] = {"Only output unaligned spots", NULL};
+char const *primaryonly_usage[] = {"Output only primary alignments", NULL};
+char const *cigartype_usage[] = {"Output long version of CIGAR", NULL};
+char const *cigarCG_usage[] = {"Output CG version of CIGAR", NULL};
+char const *cigarCGMerge_usage[] = {"Apply CG fixups to CIGAR/SEQ/QUAL and outputs CG-specific columns", NULL};
+char const *CG_evidence[] = {"Output CG evidence aligned to reference", NULL};
+char const *CG_ev_dnb[] = {"Output CG evidence DNB's aligned to evidence", NULL};
+char const *CG_SAM[] = {"Output CG evidence DNB's aligned to reference ", NULL};
+char const *CG_mappings[] = {"Output CG sequences aligned to reference ", NULL};
+char const *header_usage[] = {"Replace original BAM header with a reconstructed one", NULL};
+char const *noheader_usage[] = {"Do not output headers", NULL};
+char const *region_usage[] = {"Filter by position on genome.",
+                              "Name can either be file specific name (ex: \"chr1\" or \"1\").",
+                              "\"from\" and \"to\" are 1-based coordinates", NULL};
+char const *distance_usage[] = {"Filter by distance between matepairs.",
+                                "Use \"unknown\" to find matepairs split between the references.",
+                                "Use from-to to limit matepair distance on the same reference", NULL};
+char const *seq_id_usage[] = {"Print reference SEQ_ID in RNAME instead of NAME", NULL};
+char const *identicalbases_usage[] = {"Output '=' if base is identical to reference", NULL};
+char const *gzip_usage[] = {"Compress output using gzip", NULL};
+char const *bzip2_usage[] = {"Compress output using bzip2", NULL};
+char const *qname_usage[] = {"Add .SPOT_GROUP to QNAME", NULL};
+char const *fasta_usage[] = {"Produce Fasta formatted output", NULL};
+char const *fastq_usage[] = {"Produce FastQ formatted output", NULL};
+char const *prefix_usage[] = {"Prefix QNAME: prefix.QNAME", NULL};
+char const *reverse_usage[] = {"Reverse unaligned reads according to read type", NULL};
+char const *comment_usage[] = {"Add comment to header. Use multiple times for several lines. Use quotes", NULL};
+char const *XI_usage[] = {"Output cSRA alignment id in XI column", NULL};
+char const *qual_quant_usage[] = {"Quality scores quantization level",
+                                  "a string like '1:10,10:20,20:30,30:-'", NULL};
+char const *CG_names[] = { "Generate CG friendly read names", NULL};
+
+char const *usage_params[] =
+{
+    NULL,                       /* unaligned */
+    NULL,                       /* unaligned-only */
+    NULL,                       /* primaryonly */
+    NULL,                       /* cigartype */
+    NULL,                       /* cigarCG */
+    NULL,                       /* header */
+    NULL,                       /* no-header */
+    "'text'",                   /* comment */
+    "name[:from-to]",           /* region */
+    "from-to|unknown",          /* distance */
+    NULL,                       /* seq-id */
+    NULL,                       /* identical-bases */
+    NULL,                       /* gzip */
+    NULL,                       /* bzip2 */
+    NULL,                       /* qname */
+    NULL,                       /* fasta */
+    NULL,                       /* fastq */
+    "prefix",                   /* prefix */
+    NULL,                       /* reverse */
+    NULL,                       /* test-rows */
+    NULL,                       /* mate-row-gap-cacheable */
+    NULL,                       /* cigarCGMerge */
+    NULL,                       /* XI */
+    "quantization string",      /* qual-quant */
+    NULL,                       /* cigarCGMerge */
+    NULL,                       /* CG-evidence */
+    NULL,                       /* CG-ev-dnb */
+    NULL,                       /* CG-mappings */
+    NULL,                       /* CG-SAM */
+    NULL                        /* CG-names */
+};
+
+enum eArgs
+{
+    earg_unaligned = 0,         /* unaligned */
+    earg_unaligned_only,        /* unaligned */
+    earg_prim_only,             /* primaryonly */
+    earg_cigartype,             /* cigartype */
+    earg_cigarCG,               /* cigarCG */
+    earg_header,                /* header */
+    earg_noheader,              /* no-header */
+    earg_comment,               /* comment */
+    earg_region,                /* region */
+    earg_distance,              /* distance */
+    earg_seq_id,                /* seq-id */
+    earg_identicalbases,        /* identical-bases */
+    earg_gzip,                  /* gzip */
+    earg_bzip2,                 /* bzip2 */
+    earg_qname,                 /* qname */
+    earg_fastq,                 /* fasta */
+    earg_fasta,                 /* fastq */
+    earg_prefix,                /* prefix */
+    earg_reverse,               /* reverse */
+    earg_test_rows,             /* test-rows */
+    earg_mate_row_gap_cachable, /* mate-row-gap-cacheable */
+    earg_cigarCG_merge,         /* cigarCGMerge */
+    earg_XI,                    /* XI */
+    earg_QualQuant,             /* qual-quant */
+    earg_CG_evidence,           /* CG-evidence */
+    earg_CG_ev_dnb,             /* CG-ev-dnb */
+    earg_CG_mappings,           /* CG-mappings */
+    earg_CG_SAM,                /* CG-SAM */
+    earg_CG_names               /* CG-names */
+};
+
+OptDef DumpArgs[] =
+{
+    { "unaligned", "u", NULL, unaligned_usage, 0, false, false },           /* unaligned */
+    { "unaligned-only", "U", NULL, unaligned_only_usage, 0, false, false }, /* unaligned-only */
+    { "primary", "1", NULL, primaryonly_usage, 0, false, false },           /* primaryonly */
+    { "cigar-long", "c", NULL, cigartype_usage, 0, false, false },          /* cigartype */
+    { "cigar-CG", NULL, NULL, cigarCG_usage, 0, false, false },             /* cigarCG */
+    { "header", "r", NULL, header_usage, 0, false, false },                 /* header */
+    { "no-header", "n", NULL, noheader_usage, 0, false, false },            /* no-header */
+    { "header-comment", NULL, NULL, comment_usage, 0, true, false },        /* comment */
+    { "aligned-region", NULL, NULL, region_usage, 0, true, false },         /* region */
+    { "matepair-distance", NULL, NULL, distance_usage, 0, true, false },    /* distance */
+    { "seqid", "s", NULL, seq_id_usage, 0, false, false },                  /* seq-id */
+    { "hide-identical", "=", NULL, identicalbases_usage, 0, false, false }, /* identical-bases */
+    { "gzip", NULL, NULL, gzip_usage, 0, false, false },                    /* gzip */
+    { "bzip2", NULL, NULL, bzip2_usage, 0, false, false },                  /* bzip2 */
+    { "spot-group", "g", NULL, qname_usage, 0, false, false },              /* qname */
+    { "fastq", NULL, NULL, fastq_usage, 0, false, false },                  /* fasta */
+    { "fasta", NULL, NULL, fasta_usage, 0, false, false },                  /* fastq */
+    { "prefix", "p", NULL, prefix_usage, 0, true, false },                  /* prefix */
+    { "reverse", NULL, NULL, reverse_usage, 0, false, false },              /* reverse */
+    { "test-rows", NULL, NULL, NULL, 0, true, false },                      /* test-rows */
+    { "mate-cache-row-gap", NULL, NULL, NULL, 0, true, false },             /* mate-row-gap-cacheable */
+    { "cigar-CG-merge", NULL, NULL, cigarCGMerge_usage, 0, false, false },  /* cigarCGMerge */
+    { "XI", NULL, NULL, XI_usage, 0, false, false },                        /* XI */
+    { "qual-quant", "Q", NULL, qual_quant_usage, 0, true, false },          /* qual-quant */
+    { "CG-evidence", NULL, NULL, CG_evidence, 0, false, false },            /* CG-evidence */
+    { "CG-ev-dnb"  , NULL, NULL, CG_ev_dnb  , 0, false, false },            /* CG-ev-dnb */
+    { "CG-mappings", NULL, NULL, CG_mappings, 0, false, false },            /* CG-mappings */
+    { "CG-SAM", NULL, NULL, CG_SAM, 0, false, false },                      /* CG-SAM */
+    { "CG-names", NULL, NULL, CG_names, 0, false, false }                   /* CG-names */
+};
+
+
+const char UsageDefaultName[] = "sam-dump";
+
+
+rc_t CC UsageSummary( char const *progname )
+{
+    return KOutMsg( "Usage:\n"
+        "\t%s [options] path-to-run[ path-to-run ...] > output.sam\n\n", progname );
+}
+
+
+rc_t CC Usage( Args const *args)
+{
+    char const *progname = UsageDefaultName;
+    char const *fullpath = UsageDefaultName;
+    rc_t rc;
+    unsigned i;
+
+    rc = ArgsProgram( args, &fullpath, &progname );
+
+    UsageSummary( progname );
+
+    KOutMsg( "Options:\n" );
+    for( i = 0; i < sizeof( DumpArgs ) / sizeof( DumpArgs[ 0 ] ); i++ )
+    {
+        if ( DumpArgs[ i ].help != NULL )
+        {
+            HelpOptionLine( DumpArgs[ i ].aliases, DumpArgs[ i ].name,
+                            usage_params[ i ], DumpArgs[ i ].help);
+        }
+    }
+    KOutMsg( "\n" );
+    HelpOptionsStandard();
+
+    HelpVersion( fullpath, KAppVersion() );
+
+    return rc;
+}
+
+
+#define ARGS_COUNT (sizeof(DumpArgs)/sizeof(DumpArgs[0]))
+
+
+static unsigned ParamCount( Args const *const args, rc_t *const prc )
+{
+    uint32_t y = 0;
+    rc_t rc = ArgsParamCount( args, &y );
+    
+    if ( prc != NULL )
+        *prc = rc;
+    return y;
+}
+
+
+static unsigned ArgCount( Args const *const args, rc_t *const prc )
+{
+    uint32_t y = 0;
+    rc_t rc = ArgsArgvCount( args, &y );
+    
+    if ( prc != NULL )
+        *prc = rc;
+    return y;
+}
+
+
+static rc_t CountArgs( Args const *const args, unsigned count[],
+                       char const **const errmsg )
+{
+    rc_t rc;
+    unsigned const pcount = ParamCount( args, &rc );
+    
+    memset( count, 0, ARGS_COUNT );
+    if ( rc != 0 || pcount == 0 )
+    {
+        *errmsg = "";
+        MiniUsage( args );
+        return ( ArgCount( args, NULL ) < 2 )
+             ? 0
+             : RC( rcExe, rcArgv, rcParsing, rcParam, rcInsufficient );
+    }
+#define COUNT_ARG(E) do {\
+    char const *const optname = DumpArgs[ (E) ].name; \
+    if ( ( rc = ArgsOptionCount( args, optname, &count[ (E) ] ) ) != 0 ) { \
+        *errmsg = optname; \
+        return rc; \
+    } } while( 0 )
+    
+    
+    /* record source options */
+    COUNT_ARG( earg_unaligned );
+    COUNT_ARG( earg_unaligned_only );
+    COUNT_ARG( earg_prim_only );
+    COUNT_ARG( earg_CG_evidence );
+    COUNT_ARG( earg_CG_ev_dnb );
+    COUNT_ARG( earg_CG_mappings );
+    COUNT_ARG( earg_CG_SAM );
+    
+    /* record filter options */
+    COUNT_ARG( earg_region );
+    COUNT_ARG( earg_distance );
+    
+    /* output format options */
+    COUNT_ARG( earg_fastq );
+    COUNT_ARG( earg_fasta );
+    
+    /* SAM header options */
+    COUNT_ARG( earg_header );
+    COUNT_ARG( earg_noheader );
+    COUNT_ARG( earg_comment );
+    
+    /* SAM field options */
+    COUNT_ARG( earg_prefix );
+    COUNT_ARG( earg_qname );
+    COUNT_ARG( earg_seq_id );
+    COUNT_ARG( earg_CG_names );
+    
+    COUNT_ARG( earg_cigartype );
+    COUNT_ARG( earg_cigarCG );
+    COUNT_ARG( earg_cigarCG_merge );
+    
+    COUNT_ARG( earg_identicalbases );
+    COUNT_ARG( earg_reverse );
+    COUNT_ARG( earg_QualQuant );
+    
+    /* output encoding options */
+    COUNT_ARG( earg_gzip );
+    COUNT_ARG( earg_bzip2 );
+    
+    COUNT_ARG( earg_mate_row_gap_cachable );
+    
+    /* debug options */
+    COUNT_ARG( earg_XI );
+    COUNT_ARG( earg_test_rows );
+#undef COUNT_ARG
+    return 0;
+}
+
+
+static unsigned GetOptValU( Args const *const args, char const *const argname,
+                            unsigned const defval, rc_t *const prc )
+{
+    unsigned y = defval;
+    char const *valstr;
+    rc_t rc = ArgsOptionValue( args, argname, 0, &valstr );
+    
+    if ( rc == 0 )
+    {
+        char *endp;
+        
+        y = strtou32( valstr, &endp, 0 );
+        if ( *endp != '\0' )
+        {
+            rc = RC( rcExe, rcArgv, rcProcessing, rcParam, rcInvalid );
+            y = 0;
+        }
+        if ( y == 0 )
+            y = defval;
+    }
+    if ( prc )
+        *prc = rc;
+    return y;
+}
+
+
+static rc_t GetComments( Args const *const args, struct params_s *const parms, unsigned const n )
+{
+    parms->comments = calloc( n + 1, sizeof( parms->comments[ 0 ] ) );
+    if ( parms->comments != NULL )
+    {
+        unsigned i;
+        
+        for ( i = 0; i < n; ++i )
+        {
+            rc_t const rc = ArgsOptionValue( args, DumpArgs[ earg_comment ].name, i, &parms->comments[ i ] );
+            if ( rc != 0 )
+            {
+                free( parms->comments );
+                parms->comments = NULL;
+                return rc;
+            }
+        }
+        return 0;
+    }
+    else
+        return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+}
+
+
+static rc_t ParseFromTo( int *const pFrom, int *const pTo, char const str[] )
+{
+    /* $str =~ /((\d+)-(\d+))|(-(\d+))|(\d+)/ */
+    int n;
+    char fr_str[ 16 ];
+    char to_str[ 16 ];
+    uint32_t fr = 0;
+    uint32_t to = 0;
+    int i = sscanf( str, "%15[0-9]-%15[0-9]%n", fr_str, to_str, &n );
+    
+    if ( i != 2 )
+    {
+        unsigned const offset = ( str[ 0 ] == '-' ) ? 1 : 0;
+        
+        fr = 0;
+        i = sscanf( str + offset, "%15[0-9]%n", to_str, &n );
+        if ( i != 1 )
+            return RC( rcExe, rcArgv, rcProcessing, rcParam, rcOutofrange );
+        to = strtou32( to_str, 0, 0 );
+    }
+    else
+    {
+        fr = strtou32( fr_str, 0, 0 );
+        to = strtou32( to_str, 0, 0 );
+        
+        if ( to < fr )
+        {
+            uint32_t const tmp = to;
+            to = fr;
+            fr = tmp;
+        }
+    }
+    /* was the entire string consumed */
+    if ( str[ n ] != 0 )
+        return RC( rcExe, rcArgv, rcProcessing, rcParam, rcInvalid );
+    *pFrom = ( int )fr;
+    *pTo = ( int )to;
+    return 0;
+}
+
+
+static rc_t GetDistance( Args const *const args, struct params_s *const parms, unsigned const n )
+{
+    rc_t rc;
+    TMatepairDistance *const mpd = calloc( n, sizeof( mpd[ 0 ] ) );
+    
+    if ( mpd == NULL )
+        rc = RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+    else
+    {
+        unsigned i;
+        unsigned j;
+        
+        for ( j = i = 0; i < n; ++i )
+        {
+            char const *valstr;
+            int from = 0;
+            int to = 0;
+
+            rc = ArgsOptionValue( args, DumpArgs[earg_distance].name, i, &valstr );
+            if ( rc != 0 )
+                break;
+            if ( strcasecmp( valstr, "unknown" ) == 0 )
+            {
+                parms->mp_dist_unknown = true;
+                continue;
+            }
+            rc = ParseFromTo( &from, &to, valstr );
+            if ( rc != 0 )
+                break;
+            if ( ( from != 0 ) || ( to != 0 ) )
+            {
+                mpd[ j ].from = from;
+                mpd[ j ].to = to;
+                ++j;
+            }
+        }
+        if ( rc == 0 )
+        {
+            parms->mp_dist = mpd;
+            parms->mp_dist_qty = j;
+            
+            SAM_DUMP_DBG( 2, ( "filter by mate pair distance\n" ) );
+            if ( parms->mp_dist_unknown )
+                SAM_DUMP_DBG( 2, ( "    distance: unknown\n" ) );
+            for ( i = 0; i < j; ++i )
+            {
+                SAM_DUMP_DBG( 2, ( "    distance [%lu-%lu]\n",
+                              parms->mp_dist[ i ].from, parms->mp_dist[ i ].to ) );
+            }
+        }
+        else
+            free( mpd );
+    }
+    return rc;
+}
+
+
+static rc_t GetRegion( Args const *const args, struct params_s *const parms, unsigned const n )
+{
+    rc_t rc;
+    TAlignedRegion *const reg = calloc( n, sizeof( reg[ 0 ] ) );
+    
+    if ( reg == NULL )
+        rc = RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+    else
+    {
+        unsigned i;
+        unsigned j;
+        
+        for ( rc = 0, j = i = 0; i < n; ++i )
+        {
+            char const *valstr;
+            char const *sep;
+            unsigned namelen;
+            unsigned f;
+            unsigned e;
+            TAlignedRegion r;
+
+	    memset(&r,0,sizeof(r));
+            
+            rc = ArgsOptionValue( args, DumpArgs[ earg_region ].name, i, &valstr );
+            if ( rc != 0 ) break;
+            
+            sep = strchr( valstr, ':' );
+            if ( sep != NULL )
+                namelen = sep - valstr;
+            else
+                namelen = strlen( valstr );
+            
+            if ( namelen >= sizeof( r.name ) )
+                return RC( rcExe, rcArgv, rcProcessing, rcParam, rcTooLong );
+            
+            memcpy( r.name, valstr, namelen );
+            r.name[ namelen ] = '\0';
+            
+            r.rq = UINT_MAX;
+            if ( sep != NULL )
+            {
+                int from = -1;
+                int to = -1;
+                
+                rc = ParseFromTo( &from, &to, sep + 1 );
+                if ( rc != 0 )
+                    break;
+                if ( from > 0 ) /* convert to 0-based */
+                    --from;
+                else if ( to > 0 )
+                    from = 0;
+                if ( to > 0 )
+                    --to;
+                else if ( from >= 0 && to < 0 )
+                    to = from;
+                if ( from >= 0 || to >= 0 )
+                {
+                    if ( from > to )
+                    {
+                        int tmp = to;
+                        to = from;
+                        from = tmp;
+                    }
+                    r.r[ 0 ].from = from;
+                    r.r[ 0 ].to = to;
+                    r.rq = 1;
+                }
+            }
+            
+            for ( f = 0, e = j; f < e; )
+            {
+                unsigned const m = ( ( f + e ) / 2 );
+                int const diff = strcmp( r.name, reg[ m ].name );
+                
+                if ( diff < 0 )
+                    e = m;
+                else
+                    f = m + 1;
+            }
+            if ( 0 < e && e < j && strcmp( r.name, reg[ e-1 ].name ) == 0 )
+            {
+                TAlignedRegion *const fnd = &reg[ e - 1 ];
+                
+                if ( fnd->rq != UINT_MAX )
+                {
+                    for ( f = 0, e = fnd->rq; f < e; )
+                    {
+                        unsigned const m = ( ( f + e ) / 2 );
+                        
+                        if ( r.r[ 0 ].from < fnd->r[ m ].from )
+                            e = m;
+                        else
+                            f = m + 1;
+                    }
+                    if ( fnd->rq >= ( sizeof( r.r ) / sizeof( r.r[0] ) ) )
+                    {
+                        rc = RC( rcExe, rcArgv, rcProcessing, rcBuffer, rcInsufficient );
+                        break;
+                    }
+                    memmove( &fnd->r[ e +1 ], &fnd->r[ e ], ( fnd->rq - e ) * sizeof( fnd->r[ 0 ] ) );
+                    fnd->r[ e ] = r.r[ 0 ];
+                    ++fnd->rq;
+                }
+            }
+            else
+            {
+                memmove( &reg[ e + 1 ], &reg[ e ], ( j - e ) * sizeof( reg[ 0 ] ) );
+                reg[ e ] = r;
+                ++j;
+            }
+        }
+        if ( rc == 0 )
+        {
+            parms->region = reg;
+            parms->region_qty = j;
+            
+            for ( i = 0; i < parms->region_qty; ++i )
+            {
+                TAlignedRegion *const r = &parms->region[ i ];
+                
+                SAM_DUMP_DBG( 2, ( "filter by %s\n", r->name ) );
+                if ( r->rq == UINT_MAX )
+                {
+                    r->rq = 1;
+                    r->r[ 0 ].from = 0;
+                    r->r[ 0 ].to = UINT_MAX;
+                }
+                for ( j = 0; j < r->rq; ++j )
+                {
+                    unsigned const to = r->r[ j ].to;
+                    unsigned const from = r->r[ j ].from;
+                    
+                    SAM_DUMP_DBG( 2, ( "   range: [%u:%u]\n", r->r[ j ].from, to ) );
+                    if ( r->max_to < to ) r->max_to = to;
+                    if ( r->min_from < from ) r->min_from = from;
+                }
+            }
+        }
+        else
+            free( reg );
+    }
+    return rc;
+}
+
+
+static rc_t GetQualQuant( Args const *const args, struct params_s *const parms )
+{
+    char const *valstr;
+    int i;
+    rc_t rc = ArgsOptionValue( args, DumpArgs[ earg_QualQuant ].name, 0, &valstr );
+    
+    if ( rc == 0 && strcmp( valstr, "0" ) != 0 )
+        parms->quantizeQual = QualityQuantizerInitMatrix( parms->qualQuant, valstr );
+    for(i=1; parms->qualQuant[i]==parms->qualQuant[0] && i<256;i++){}
+    if(i<256) parms->qualQuantSingle=0;
+    else      parms->qualQuantSingle = parms->qualQuant[0];
+    return rc;
+}
+
+
+static rc_t GetArgs( Args const *const args, unsigned const count[],
+                     char const **const errmsg )
+{
+    static struct params_s parms;
+    bool const multipass = ParamCount( args, 0 ) > 1;
+    rc_t rc;
+    
+    memset( &parms, 0, sizeof( parms ) );
+    
+    if ( count[ earg_comment ] )
+    {
+        rc = GetComments( args, &parms, count[ earg_comment ] );
+        if ( rc != 0 )
+        {
+            *errmsg = DumpArgs[ earg_comment ].name;
+            return rc;
+        }
+    }
+    
+    if ( count[ earg_region ] && count[ earg_unaligned_only ] == 0 )
+    {
+        rc = GetRegion( args, &parms, count[ earg_region ] );
+        if ( rc != 0 )
+        {
+            *errmsg = DumpArgs[ earg_region ].name;
+            return rc;
+        }
+    }
+
+    if ( count[ earg_distance ] && count[ earg_unaligned_only ] == 0 )
+    {
+        rc = GetDistance( args, &parms, count[ earg_distance ] );
+        if ( rc != 0 )
+        {
+            *errmsg = DumpArgs[ earg_distance ].name;
+            return rc;
+        }
+    }
+
+    if ( count[ earg_QualQuant ] )
+    {
+        rc = GetQualQuant( args, &parms );
+        if ( rc != 0 )
+        {
+            *errmsg = DumpArgs[ earg_QualQuant ].name;
+            return rc;
+        }
+    }
+    
+    parms.cg_sam = ( count[ earg_CG_SAM ] != 0 );
+    parms.cg_evidence = ( count[ earg_CG_evidence ] != 0 );
+    parms.cg_ev_dnb = ( count[ earg_CG_ev_dnb ] != 0 );
+    
+    if ( count[ earg_CG_mappings ] == 0 &&
+         ( parms.cg_sam || parms.cg_evidence || parms.cg_ev_dnb ) )
+    {
+        parms.primaries = false;
+        parms.secondaries = false;
+        parms.unaligned = false;
+    }
+    else
+    {
+        parms.primaries = true;
+        parms.secondaries = ( count[ earg_prim_only ] == 0 );
+        parms.unaligned = ( ( count[ earg_unaligned ] != 0 ) /*&& ( parms.region_qty == 0 )*/ );
+    }
+    
+    parms.long_cigar = ( count[ earg_cigartype ] != 0 );
+    parms.use_seqid = ( ( count[ earg_seq_id ] != 0 ) || multipass );
+    parms.hide_identical = ( count[ earg_identicalbases ] != 0 );
+    parms.fasta = ( count[ earg_fasta ] != 0 );
+    parms.fastq = ( count[ earg_fastq ] != 0 );
+    parms.reverse_unaligned = ( count[ earg_reverse ] != 0 );
+    parms.cg_friendly_names = count[ earg_CG_names ] != 0;
+    parms.spot_group_in_name = ( count[ earg_qname ] != 0 || multipass );
+    parms.noheader = ( ( count[ earg_noheader ] != 0 ) || parms.fasta || parms.fastq || multipass );
+    parms.reheader = ( ( count[ earg_header ] != 0 ) && !parms.noheader );
+    parms.xi = ( count[ earg_XI ] != 0 );
+    if ( ( count[ earg_cigarCG ] == 0 ) && ( count[ earg_cigarCG_merge ] == 0 ) )
+    {
+        parms.cg_style = 0;
+    }
+    else if ( count[ earg_cigarCG ] == 0 )
+    {
+        parms.cg_style = 1;
+        parms.long_cigar = false;
+    }
+    else if ( count[ earg_cigarCG_merge ] == 0 )
+    {
+        parms.cg_style = 2;
+    }
+    else
+    {
+        rc = RC( rcExe, rcArgv, rcProcessing, rcParam, rcInconsistent );
+        *errmsg = "cigar-CG and CG are mutually exclusive";
+        parms.cg_style = 0;
+    }
+
+    if (count[ earg_unaligned_only ] > 0) {
+        parms.unaligned_spots = true;
+        
+        parms.primaries = false;
+        parms.secondaries = false;
+        parms.unaligned = true;
+        parms.cg_ev_dnb = false;
+        parms.cg_evidence = false;
+        parms.cg_sam = false;
+        parms.cg_style = 0;
+    }
+    
+    parms.test_rows = GetOptValU( args, DumpArgs[ earg_test_rows ].name, 0, NULL );
+    parms.mate_row_gap_cachable = GetOptValU( args, DumpArgs[ earg_mate_row_gap_cachable ].name, 1000000, NULL );
+    
+    param = &parms;
+    return 0;
+}
+
+
+static rc_t GetParams( Args const *const args, char const **const errmsg )
+{
+    unsigned count[ ARGS_COUNT ];
+    rc_t rc = CountArgs( args, count, errmsg );
+    
+    if ( rc == 0 )
+        rc = GetArgs( args, count, errmsg );
+    return rc;
+}
+
+
+rc_t CC SAM_Dump_Main( int argc, char* argv[] )
+{
+    rc_t rc = 0;
+    Args* args;
+    char const *errmsg = "stop";
+    bool error_reported = false;
+
+    memset( &g_out_writer, 0, sizeof( g_out_writer ) );
+    KOutHandlerSetStdOut();
+    KStsHandlerSetStdErr();
+    KLogHandlerSetStdErr();
+    (void)KDbgHandlerSetStdErr();
+
+    ReportBuildDate( __DATE__ );
+
+    rc = ArgsMakeAndHandle( &args, argc, argv, 1, DumpArgs, ARGS_COUNT );
+    if ( rc == 0 )
+    {
+        uint32_t pcount;
+
+        rc = ArgsParamCount( args, &pcount );
+        if ( rc != 0 || pcount < 1 )
+        {
+            errmsg = "";
+            rc = argc < 2 ? 0 : RC( rcExe, rcArgv, rcParsing, rcParam, rcInsufficient );
+            MiniUsage( args );
+        }
+        else if ( ( rc = GetParams( args, &errmsg ) ) != 0 )
+        {
+        }
+        else
+        {
+            VDBManager const *mgr;
+            
+            rc = VDBManagerMakeRead( &mgr, NULL );
+            if ( rc == 0 )
+            {
+                rc = BufferedWriterMake( param->output_gzip, param->output_bz2 );
+                if ( rc == 0 )
+                {
+                    unsigned i;
+                    
+                    for ( i = 0; i < pcount; ++i )
+                    {
+                        char const *arg;
+                        
+                        rc = ArgsParamValue( args, i, &arg );
+                        if ( rc != 0 ) break;
+                        rc = ProcessPath( mgr, arg );
+#if _ARCH_BITS < 64
+                        /* look for "param excessive while writing vector within container module" */
+                        if (GetRCState(rc) == rcExcessive &&
+                            GetRCObject(rc) == rcParam &&
+                            GetRCContext(rc) == rcWriting &&
+                            GetRCTarget(rc) == rcVector &&
+                            GetRCModule(rc) == rcCont)
+                        {
+                            ( void )PLOGMSG( klogErr, (klogErr, "This run '$(run)' contains too many reads to be processed with a $(bits)-bit executable; please try again with a 64-bit executable.", "run=%s,bits=%u", arg, _ARCH_BITS));
+                        }
+#endif
+                        if ( rc != 0 ) break;
+                    }
+                    BufferedWriterRelease( rc == 0 );
+                }
+                VDBManagerRelease( mgr );
+            }
+        }
+        ArgsWhack( args );
+    }
+
+    if ( rc != 0 && !error_reported )
+    {
+        if ( errmsg[ 0 ] )
+        {
+            ( void )LOGERR( klogErr, rc, errmsg );
+        } else if ( KLogLastErrorCode() != rc )
+        {
+            ( void )LOGERR( klogErr, rc, "stop" );
+        }
+    }
+
+    {
+        /* Report execution environment if necessary */
+        rc_t rc2 = ReportFinalize( rc );
+        if ( rc == 0 )
+            rc = rc2;
+    }
+    return rc;
+}
+
+
+rc_t CC KMain( int argc, char* argv[] )
+{
+    char filename[ 4096 ];
+    /*
+       Try to find a option-file - parameter in the original parameters 
+       This is a hack to teach sam-dump to read it's parameters from a file/pipe instead
+       of the commandline
+       It is neccessary because the code above does not use libkapp to parse parameters!
+    */
+    rc_t rc = Args_find_option_in_argv( argc, argv, "--option-file", filename, sizeof filename );
+    if ( rc == 0 )
+    {
+        int new_argc;
+        char ** new_argv;
+        /* we found it! Now comes the special treatment: we fake a new argc/argv-pair! */
+        rc = Args_tokenize_file_and_progname_into_argv( filename, "sam-dump", &new_argc, &new_argv );
+        if ( rc == 0 )
+        {
+            /* pass the faked input-parameters from */
+            rc = SAM_Dump_Main( new_argc, new_argv );
 
+            Args_free_token_argv( new_argc, new_argv );
         }
-        ArgsWhack(args);
     }
-    if( rc != 0 && errmsg[0] ) {
-        LOGERR(klogErr, rc, errmsg);
+    else
+    {
+        /* we did not found the special option, just use the commandline-parameters unchanged */
+        rc = SAM_Dump_Main( argc, argv );
     }
     return rc;
 }
diff --git a/tools/sam-dump/sam-dump.vers b/tools/sam-dump/sam-dump.vers
index 04b10b4..5859406 100644
--- a/tools/sam-dump/sam-dump.vers
+++ b/tools/sam-dump/sam-dump.vers
@@ -1 +1 @@
-2.1.7
+2.2.3
diff --git a/tools/sam-dump/sam-dump.vers.h b/tools/sam-dump/sam-dump.vers.h
deleted file mode 100644
index e4ee002..0000000
--- a/tools/sam-dump/sam-dump.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define SAM_DUMP_VERS 0x02010007
diff --git a/tools/sra-dbcc/#Makefile# b/tools/sra-dbcc/#Makefile#
new file mode 100644
index 0000000..d642b90
--- /dev/null
+++ b/tools/sra-dbcc/#Makefile#
@@ -0,0 +1,126 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/sra-dbcc
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS = \
+
+
+EXT_TOOLS = \
+	sra-dbcc
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+#------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+	@ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(ALL_TOOLS): vers-includes
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: $(addsuffix _tag,$(ALL_TOOLS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+
+#-------------------------------------------------------------------------------
+# sra-dbcc
+#
+SRA_DBCC_SRC = \
+	sra-dbcc
+
+SRA_DBCC_OBJ = \
+	$(addsuffix .$(OBJX),$(SRA_DBCC_SRC))
+
+SRA_DBCC_LIB = \
+	-dalign-reader \
+	-daxf \
+	-dsraxf \
+	-dvxf \
+	-dksrch \
+	-lsradb \
+	-lvdb \
+	-lkdb \
+	-lkapp \
+	-lvfs \
+	-lkrypto \
+	-lkfg \
+	-lkfs \
+	-lklib \
+	-lm \
+	-lkproc
+
+sra-dbcc.vers.h: sra-dbcc.vers
+	$(TOP)/build/make-vers-inc.sh SRA_DBCC_VERS $^ > $@
+
+$(BINDIR)/sra-dbcc: $(SRA_DBCC_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(SRA_DBCC_LIB)
+
+sra-dbcc_tag:
+	@ $(TOP)/build/tag-module.sh \
+		$(MODULE) table-vers $(SRA_DBCC_OBJ)
diff --git a/tools/sra-dbcc/Makefile b/tools/sra-dbcc/Makefile
index 3befa25..beeda09 100644
--- a/tools/sra-dbcc/Makefile
+++ b/tools/sra-dbcc/Makefile
@@ -25,14 +25,13 @@
 
 default: std
 
-TOP ?= $(abspath ../..)
+TOP ?= $(shell ../../build/abspath.sh ../..)
 MODULE = tools/sra-dbcc
 
 include $(TOP)/build/Makefile.env
 
 INT_TOOLS = \
 
-
 EXT_TOOLS = \
 	sra-dbcc
 
@@ -43,15 +42,13 @@ ALL_TOOLS = \
 #------------------------------------------------------------------------------
 # outer targets
 #
-vers-includes: $(addsuffix .vers.h,$(ALL_TOOLS))
-
-all std: makedirs vers-includes
+all std: vers-includes
 	@ $(MAKE_CMD) $(TARGDIR)/$@
 
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
 	@ $(MAKE_CMD) $(BINDIR)/$@
 
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
 
 #-------------------------------------------------------------------------------
 # all
@@ -70,18 +67,18 @@ $(TARGDIR)/std: \
 .PHONY: $(TARGDIR)/std
 
 #-------------------------------------------------------------------------------
-# clean
+# vers-includes
 #
-clean: stdclean
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
 
-.PHONY: clean
+.PHONY: $(TARGDIR)/vers-includes
 
 #-------------------------------------------------------------------------------
-# tag
+# clean
 #
-tag: $(addsuffix _tag,$(ALL_TOOLS))
+clean: stdclean
 
-.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+.PHONY: clean
 
 #-------------------------------------------------------------------------------
 # sra-dbcc
@@ -93,15 +90,20 @@ SRA_DBCC_OBJ = \
 	$(addsuffix .$(OBJX),$(SRA_DBCC_SRC))
 
 SRA_DBCC_LIB = \
-	-lsrapath \
+	-dalign-reader \
+	$(READONLY_SCHEMA_LIBS) \
+	-dksrch \
+	-lsradb \
+	-lvdb \
 	-lkdb \
 	-lkapp \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
 	-lkfg \
 	-lkfs \
+	-lkproc \
 	-lklib \
-	-ldl \
-	-lz \
-	-lbz2 \
 	-lm
 
 sra-dbcc.vers.h: sra-dbcc.vers
@@ -109,7 +111,3 @@ sra-dbcc.vers.h: sra-dbcc.vers
 
 $(BINDIR)/sra-dbcc: $(SRA_DBCC_OBJ)
 	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(SRA_DBCC_LIB)
-
-sra-dbcc_tag:
-	@ $(TOP)/build/tag-module.sh \
-		$(MODULE) table-vers $(SRA_DBCC_OBJ)
diff --git a/tools/sra-dbcc/sra-dbcc.c b/tools/sra-dbcc/sra-dbcc.c
index 8ce032a..869a787 100644
--- a/tools/sra-dbcc/sra-dbcc.c
+++ b/tools/sra-dbcc/sra-dbcc.c
@@ -24,30 +24,88 @@
  *
  */
 
+#include "sra-dbcc.vers.h"
+
 #include <kapp/main.h>
-#include <klib/log.h>
-#include <klib/rc.h>
-#include <klib/namelist.h>
-#include <klib/container.h>
-#include <klib/debug.h>
+#include <kapp/args.h>
+
+#include <insdc/insdc.h>
+#include <insdc/sra.h>
+
+#include <sra/sradb.h>
+#include <sra/sraschema.h>
+#include <sra/srapath.h>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+
 #include <kdb/manager.h>
 #include <kdb/database.h>
 #include <kdb/table.h>
-#include <kdb/namelist.h>
+#include <kdb/meta.h>
 #include <kdb/consistency-check.h>
-#include <vdb/manager.h>
-#include <vdb/table.h>
+#include <kdb/namelist.h>
+
+#include <vfs/manager.h> /* VFSManager */
+#include <vfs/resolver.h> /* VResolver */
+#include <vfs/path.h> /* VPath */
+
+#include <kfs/sra.h>
+#include <kfs/tar.h>
 #include <kfs/kfs-priv.h>
-#include <sra/srapath.h>
+
+#include <klib/container.h>
+#include <klib/sort.h>
+#include <klib/namelist.h>
+#include <klib/data-buffer.h>
+#include <klib/text.h> /* String */
+#include <klib/out.h>
+#include <klib/log.h>
+#include <klib/debug.h>
+#include <klib/rc.h>
+
 #include <sysalloc.h>
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <ctype.h>
+#include <assert.h>
 
-#include "sra-dbcc.vers.h"
+#ifndef PATH_MAX
+    #define PATH_MAX 4096
+#endif
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 != 0 && rc == 0) { rc = rc2; } obj = NULL; } while (false)
 
 static bool exhaustive;
+static bool md5_required;
+static bool ref_int_check;
+static bool s_IndexOnly = false;
+
+struct node_s {
+    int parent;
+    int prvSibl;
+    int nxtSibl;
+    int firstChild;
+    unsigned depth;
+    unsigned name;
+    uint32_t objType;
+};
+typedef struct node_s node_t;
+
+typedef struct cc_context_s {
+    node_t *nodes;
+    char *names;
+    rc_t rc;
+    unsigned num_columns;
+    unsigned nextNode;
+    unsigned nextName;
+} cc_context_t;
 
 static
 rc_t report_rtn ( rc_t rc )
@@ -55,27 +113,25 @@ rc_t report_rtn ( rc_t rc )
     return exhaustive ? 0 : rc;
 }
 
-rc_t CC Usage ( struct Args const * args ) { return 0; }
-
-static rc_t report_index(const CCReportInfoBlock *what, void *ctx)
+static rc_t report_index(CCReportInfoBlock const *what, cc_context_t *ctx)
 {
-    rc_t *rc2 = ctx;
-    
     switch (what->type) {
     case ccrpt_Done:
         if (what->info.done.rc) {
-            (void)PLOGERR(klogErr, (klogErr, what->info.done.rc, "Index '$(index)': $(mesg)", "index=%s,mesg=%s", what->objName, what->info.done.mesg));
-            if (*rc2 == 0)
-                *rc2 = what->info.done.rc;
+            (void)PLOGERR(klogErr, (klogErr, what->info.done.rc, "Index '$(index)': $(mesg)",
+                                    "index=%s,mesg=%s", what->objName, what->info.done.mesg));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.done.rc;
         }
         return report_rtn (what->info.done.rc);
     case ccrpt_Index:
         return 0; /* continue with check */
     case ccrpt_MD5:
         if (what->info.MD5.rc) {
-            (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc, "File '$(file)' of index '$(index)' failed MD5 check", "file=%s,index=%s", what->info.MD5.file, what->objName));
-            if (*rc2 == 0)
-                *rc2 = what->info.MD5.rc;
+            (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc, "File '$(file)' of index '$(index)' failed MD5 check",
+                                    "file=%s,index=%s", what->info.MD5.file, what->objName));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.MD5.rc;
         }
         return report_rtn (what->info.MD5.rc);
     default:
@@ -83,25 +139,30 @@ static rc_t report_index(const CCReportInfoBlock *what, void *ctx)
     }
 }
 
-static rc_t report_column(const CCReportInfoBlock *what, void *ctx)
+static rc_t report_column(CCReportInfoBlock const *what, cc_context_t *ctx)
 {
-    rc_t *rc2 = ctx;
-    
     switch (what->type) {
     case ccrpt_Done:
         if (what->info.done.rc) {
-            (void)PLOGERR(klogErr, (klogErr, what->info.done.rc, "Column '$(column)': $(mesg)", "column=%s,mesg=%s", what->objName, what->info.done.mesg));
-            if (*rc2 == 0)
-                *rc2 = what->info.done.rc;
+            (void)PLOGERR(klogErr, (klogErr, what->info.done.rc, "Column '$(column)': $(mesg)",
+                                    "column=%s,mesg=%s", what->objName, what->info.done.mesg));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.done.rc;
+        }
+        else {
+            (void)PLOGMSG(klogInfo, (klogInfo, "Column '$(column)': $(mesg)", "column=%s,mesg=%s",
+                                     what->objName, what->info.done.mesg ? what->info.done.mesg : "checked"));
+            ++ctx->num_columns;
         }
         return report_rtn (what->info.done.rc);
     case ccrpt_Blob:
         return 0; /* continue with check */
     case ccrpt_MD5:
         if (what->info.MD5.rc) {
-            (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc, "File '$(file)' of column '$(column)' failed MD5 check", "file=%s,column=%s", what->info.MD5.file, what->objName));
-            if (*rc2 == 0)
-                *rc2 = what->info.MD5.rc;
+            (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc, "File '$(file)' of column '$(column)' failed MD5 check",
+                                    "file=%s,column=%s", what->info.MD5.file, what->objName));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.MD5.rc;
         }
         return report_rtn (what->info.MD5.rc);
     default:
@@ -109,23 +170,39 @@ static rc_t report_column(const CCReportInfoBlock *what, void *ctx)
     }
 }
 
-static rc_t report_table(const CCReportInfoBlock *what, void *ctx)
+static rc_t report_table(CCReportInfoBlock const *what, cc_context_t *ctx)
 {
-    rc_t *rc2 = ctx;
-    
     switch (what->type) {
     case ccrpt_Done:
         if (what->info.done.rc) {
-            (void)PLOGERR(klogErr, (klogErr, what->info.done.rc, "Table '$(table)': $(mesg)", "table=%s,mesg=%s", what->objName, what->info.done.mesg));
-            if (*rc2 == 0)
-                *rc2 = what->info.done.rc;
+            (void)PLOGERR(klogErr, (klogErr, what->info.done.rc, "Table '$(table)': $(mesg)",
+                                    "table=%s,mesg=%s", what->objName, what->info.done.mesg));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.done.rc;
+        }
+        else if (what->info.done.mesg) {
+            if (strcmp(what->info.done.mesg, "missing md5 file") == 0 && md5_required) {
+                rc_t rc = RC(0, rcTable, rcValidating, rcChecksum, rcNotFound);
+                (void)PLOGERR(klogErr, (klogErr, rc, "Table '$(table)': is missing required md5 files",
+                                        "table=%s", what->objName));
+                return rc;
+            }
+            else if (strncmp("unexpected object ", what->info.done.mesg, 18) == 0) {
+                (void)PLOGMSG(klogWarn, (klogWarn, "Table '$(tbl)': $(mesg)", "tbl=%s,mesg=%s",
+                                         what->objName, what->info.done.mesg));
+            }
+            else {
+                (void)PLOGMSG(klogInfo, (klogInfo, "Table '$(tbl)' metadata: $(mesg)",
+                                         "tbl=%s,mesg=%s", what->objName, what->info.done.mesg));
+            }
         }
         return report_rtn (what->info.done.rc);
     case ccrpt_MD5:
         if (what->info.MD5.rc) {
-            (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc, "File '$(file)' of table '$(table)' failed MD5 check", "file=%s,table=%s", what->info.MD5.file, what->objName));
-            if (*rc2 == 0)
-                *rc2 = what->info.MD5.rc;
+            (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc, "File '$(file)' of table '$(table)' failed MD5 check",
+                                    "file=%s,table=%s", what->info.MD5.file, what->objName));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.MD5.rc;
         }
         return report_rtn (what->info.MD5.rc);
     default:
@@ -133,23 +210,35 @@ static rc_t report_table(const CCReportInfoBlock *what, void *ctx)
     }
 }
 
-static rc_t report_database(const CCReportInfoBlock *what, void *ctx)
+static rc_t report_database(CCReportInfoBlock const *what, cc_context_t *ctx)
 {
-    rc_t *rc2 = ctx;
-    
     switch (what->type) {
     case ccrpt_Done:
         if (what->info.done.rc) {
-            (void)PLOGERR(klogErr, (klogErr, what->info.done.rc, "Database '$(db)': $(mesg)", "db=%s,mesg=%s", what->objName, what->info.done.mesg));
-            if (*rc2 == 0)
-                *rc2 = what->info.done.rc;
+            (void)PLOGERR(klogErr, (klogErr, what->info.done.rc, "Database '$(db)': $(mesg)",
+                                    "db=%s,mesg=%s", what->objName, what->info.done.mesg));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.done.rc;
+        }
+        else if (what->info.done.mesg) {
+            if (strcmp(what->info.done.mesg, "missing md5 file") == 0 && md5_required) {
+                rc_t rc = RC(0, rcTable, rcValidating, rcChecksum, rcNotFound);
+                (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(table)': is missing required md5 files",
+                                        "table=%s", what->objName));
+                return rc;
+            }
+            else {
+                (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(db)' metadata: $(mesg)",
+                                         "db=%s,mesg=%s", what->objName, what->info.done.mesg));
+            }
         }
         return report_rtn (what->info.done.rc);
     case ccrpt_MD5:
         if (what->info.MD5.rc) {
-            (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc, "File '$(file)' of database '$(db)' failed MD5 check", "file=%s,db=%s", what->info.MD5.file, what->objName));
-            if (*rc2 == 0)
-                *rc2 = what->info.MD5.rc;
+            (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc, "File '$(file)' of database '$(db)' failed MD5 check",
+                                    "file=%s,db=%s", what->info.MD5.file, what->objName));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.MD5.rc;
         }
         return report_rtn (what->info.MD5.rc);
     default:
@@ -157,12 +246,53 @@ static rc_t report_database(const CCReportInfoBlock *what, void *ctx)
     }
 }
 
-static rc_t CC report(const CCReportInfoBlock *what, void *ctx)
+static rc_t visiting(CCReportInfoBlock const *what, cc_context_t *ctx)
+{
+    unsigned const nn = ctx->nextNode++;
+    node_t *const nxt = &ctx->nodes[nn];
+    node_t *const cur = nxt - 1;
+    
+    nxt->parent = nxt->prvSibl = nxt->nxtSibl = nxt->firstChild = -1;
+    nxt->depth = what->info.visit.depth;
+    nxt->objType = what->objType;
+    nxt->name = ctx->nextName;
+    ctx->nextName += strlen(what->objName) + 1;
+    strcpy(&ctx->names[nxt->name], what->objName);
+    
+    if (nn) {
+        if (cur->depth == nxt->depth) {
+            nxt->parent = cur->parent;
+            nxt->prvSibl = nn - 1;
+            cur->nxtSibl = nn;
+        }
+        else if (cur->depth < nxt->depth) {
+            nxt->parent = nn - 1;
+            cur->firstChild = nn;
+        }
+        else {
+            unsigned sibling = cur->parent;
+            
+            while (ctx->nodes[sibling].depth > nxt->depth)
+                sibling = ctx->nodes[sibling].parent;
+            nxt->parent = ctx->nodes[sibling].parent;
+            nxt->prvSibl = sibling;
+            ctx->nodes[sibling].nxtSibl = nn;
+        }
+    }
+    return 0;
+}
+
+static rc_t CC report(CCReportInfoBlock const *what, void *Ctx)
 {
+    cc_context_t *ctx = Ctx;
     rc_t rc = Quitting();
     
     if (rc)
         return rc;
+    
+    if (what->type == ccrpt_Visit)
+        return visiting(what, ctx);
+
     switch (what->objType) {
     case kptDatabase:
         return report_database(what, ctx);
@@ -178,50 +308,79 @@ static rc_t CC report(const CCReportInfoBlock *what, void *ctx)
 }
 
 static
-rc_t kdbcc(const KDirectory *dir, const char name[], int mode, bool *is_db)
+rc_t kdbcc(const KDirectory *dir, char const name[], uint32_t mode, bool *is_db,
+    bool is_file, node_t nodes[], char names[], INSDC_SRA_platform_id platform)
 {
     const KDBManager *mgr;
-    rc_t rc = KDBManagerMakeRead ( & mgr, dir );
+    rc_t rc = KDBManagerMakeRead ( & mgr, NULL );
+
     if ( rc == 0 )
     {
-        rc_t rc2 = 0;
+        cc_context_t ctx;
+        char const *objtype;
+
         uint32_t level = ( mode & 4 ) ? 3 : ( mode & 2 ) ? 1 : 0;
+        if (s_IndexOnly) {
+            level |= CC_INDEX_ONLY;
+        }
+
+        memset(&ctx, 0, sizeof(ctx));
+        ctx.nodes = &nodes[0];
+        ctx.names = &names[0];
 
         * is_db = KDBManagerExists ( mgr, kptDatabase, name );
         if ( * is_db )
         {
             const KDatabase *db;
+            
+            objtype = "database";
             rc = KDBManagerOpenDBRead ( mgr, & db, name );
             if ( rc == 0 )
             {
-                rc = KDatabaseConsistencyCheck ( db, level, report, & rc2 );
-                if ( rc == 0 )
-                    rc = rc2;
-
+                rc = KDatabaseConsistencyCheck ( db, 0, level, report, & ctx );
+                if ( rc == 0 ) {
+                    rc = ctx.rc;
+                    if (s_IndexOnly)
+                    {   (void)LOGMSG(klogInfo, "Indices: checked"); }
+                }
                 KDatabaseRelease ( db );
             }
         }
-        else 
+        else
         {
             const KTable *tbl;
+
+            objtype = "table";
             rc = KDBManagerOpenTableRead ( mgr, & tbl, name );
             if ( rc == 0 )
             {
-                rc = KTableConsistencyCheck ( tbl, level, report, & rc2 );
-                if ( rc == 0 )
-                    rc = rc2;
-
+                rc = KTableConsistencyCheck ( tbl, 0, level, report, & ctx,
+                    platform );
+                if ( rc == 0 ) {
+                    rc = ctx.rc;
+                }
+                if ( rc == 0 && s_IndexOnly ) {
+                    (void)LOGMSG(klogInfo, "Index: checked");
+                }
                 KTableRelease ( tbl );
             }
         }
-
+        if (rc == 0 && ctx.num_columns == 0 && !s_IndexOnly) {
+            if (is_file) {
+                (void)PLOGMSG(klogWarn, (klogWarn, "Nothing to validate; the file '$(file)' has no checksums or is truncated.", "file=%s", name));
+            }
+            else {
+                (void)PLOGMSG(klogWarn, (klogWarn, "Nothing to validate; the $(type) '$(file)' has no checksums or is empty.", "type=%s,file=%s", objtype, name));
+            }
+        }
+        
         KDBManagerRelease ( mgr );
     }
     return rc;
 }
 
 static
-rc_t vdbcc(const KDirectory *dir, const char name[], int mode, bool is_db)
+rc_t vdbcc(const KDirectory *dir, char const name[], uint32_t mode, bool is_db, bool is_file)
 {
 #if 0
     if (mode & 8) {
@@ -241,13 +400,826 @@ rc_t vdbcc(const KDirectory *dir, const char name[], int mode, bool is_db)
     return 0;
 }
 
+typedef struct ColumnInfo_s {
+    char const *name;
+    union {
+        void     const *vp;
+        char     const *string;
+        bool     const *tf;
+        int8_t   const *i8;
+        uint8_t  const *u8;
+        int16_t  const *i16;
+        uint16_t const *u16;
+        int32_t  const *i32;
+        uint32_t const *u32;
+        int64_t  const *i64;
+        uint64_t const *u64;
+        float    const *f32;
+        double   const *f64;
+    } value;
+    uint32_t idx;
+    uint32_t elem_bits;
+    uint32_t elem_count;
+} ColumnInfo;
+
+static rc_t CC get_sizes_cb(const KDirectory *dir, uint32_t type, const char *name, void *data)
+{
+    struct {
+        unsigned count;
+        size_t size;
+    } *pb = data;
+
+    ++pb->count;    
+    pb->size += strlen(name) + 1;
+    
+    return 0;
+}
+
+static rc_t get_sizes(KDirectory const *dir, unsigned *nobj, size_t *namesz)
+{
+    rc_t rc;
+    struct {
+        unsigned count;
+        size_t size;
+    } pb;
+    
+    memset(&pb, 0, sizeof(pb));
+    rc = KDirectoryVVisit(dir, true, get_sizes_cb, &pb, NULL, NULL);
+    if (rc)
+        memset(&pb, 0, sizeof(pb));
+    *nobj = pb.count;
+    *namesz = pb.size;
+    return rc;
+}
+
+static rc_t init_dbcc(KDirectory const *dir, char const name[], bool is_file, node_t **nodes, char **names)
+{
+    KDirectory const *obj;
+    unsigned nobj;
+    size_t namesz;
+    rc_t rc;
+    
+    if (is_file) {
+        rc = KDirectoryOpenSraArchiveRead_silent(dir, &obj, false, name);
+        if (rc)
+            rc = KDirectoryOpenTarArchiveRead_silent(dir, &obj, false, name);
+    }
+    else {
+        rc = KDirectoryOpenDirRead(dir, &obj, false, name);
+    }
+    if (rc)
+        return rc;
+    rc = get_sizes(obj, &nobj, &namesz);
+    KDirectoryRelease(obj);
+    if (rc) {
+        *nodes = NULL;
+        *names = NULL;
+    }
+    else {
+        *nodes = malloc(nobj * sizeof(**nodes) + namesz);
+        if (nodes)
+            *names = (char *)&(*nodes)[nobj];
+        else
+            rc = RC(rcExe, rcSelf, rcConstructing, rcMemory, rcExhausted);
+    }
+    return rc;
+}
+
+static rc_t get_schema_info(KMetadata const *meta, char buffer[], size_t bsz, char **vers)
+{
+    KMDataNode const *node;
+    rc_t rc = KMetadataOpenNodeRead(meta, &node, "schema");
+    
+    if (rc == 0) {
+        size_t sz;
+        
+        rc = KMDataNodeReadAttr(node, "name", buffer, bsz, &sz);
+        if (rc == 0) {
+            buffer[sz] = '\0';
+            *vers = &buffer[sz];
+            while (sz) {
+                --sz;
+                if (buffer[sz] == '#') {
+                    buffer[sz] = '\0';
+                    *vers = &buffer[sz + 1];
+                    break;
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+static rc_t get_tbl_schema_info(VTable const *tbl, char buffer[], size_t bsz, char **vers)
+{
+    KMetadata const *meta;
+    rc_t rc = VTableOpenMetadataRead(tbl, &meta);
+    
+    *(*vers = &buffer[0]) = '\0';
+    if (rc == 0) rc = get_schema_info(meta, buffer, bsz, vers);
+    return 0;
+}
+
+static rc_t get_db_schema_info(VDatabase const *db, char buffer[], size_t bsz, char **vers)
+{
+    KMetadata const *meta;
+    rc_t rc = VDatabaseOpenMetadataRead(db, &meta);
+    
+    *(*vers = &buffer[0]) = '\0';
+    if (rc == 0) rc = get_schema_info(meta, buffer, bsz, vers);
+    return rc;
+}
+
+static rc_t sra_dbcc_454(VTable const *tbl, char const name[])
+{
+    /* TODO: complete this */
+    return 0;
+}
+
+static rc_t sra_dbcc_fastq(VTable const *tbl, char const name[])
+{
+    static char const *const cn_FastQ[] = {
+        "READ", "QUALITY", "SPOT_LEN", "READ_START", "READ_LEN", "READ_TYPE"
+    };
+    
+    VCursor const *curs;
+    rc_t rc = VTableCreateCursorRead(tbl, &curs);
+    
+    if (rc == 0) {
+        unsigned const n = sizeof(cn_FastQ)/sizeof(cn_FastQ[0]);
+        ColumnInfo cols[sizeof(cn_FastQ)/sizeof(cn_FastQ[0])];
+        unsigned i;
+
+        memset(cols, 0, sizeof(cols));
+        for (i = 0; i < n; ++i) {
+            cols[i].name = cn_FastQ[i];
+            VCursorAddColumn(curs, &cols[i].idx, cols[i].name);
+        }
+        rc = VCursorOpen(curs);
+        if (rc == 0) {
+            rc = VCursorOpenRow(curs);
+            for (i = 0; i < n && rc == 0; ++i) {
+                VCursorCellData(curs, cols[i].idx, &cols[i].elem_bits, &cols[i].value.vp, NULL, &cols[i].elem_count);
+            }
+            if (   cols[0].idx == 0 || cols[0].elem_bits == 0 || cols[0].value.vp == NULL
+                || cols[1].idx == 0 || cols[1].elem_bits == 0 || cols[1].value.vp == NULL)
+            {
+                rc = RC(rcExe, rcTable, rcValidating, rcColumn, rcNotFound);
+            }
+            else if (cols[2].idx == 0 || cols[2].elem_bits == 0 || cols[2].value.vp == NULL) {
+                (void)PLOGERR(klogWarn, (klogWarn, RC(rcExe, rcTable, rcValidating, rcColumn, rcNotFound),
+                                         "Table '$(name)' is usable for fasta only; no quality data", "name=%s", name));
+            }
+        }
+        VCursorRelease(curs);
+    }
+    if (rc) {
+        (void)PLOGERR(klogErr, (klogErr, rc, "Table '$(name)' is damaged beyond any use", "name=%s", name));
+    }
+    return rc;
+}
+
+static rc_t VTable_get_platform(VTable const *tbl, INSDC_SRA_platform_id *rslt)
+{
+    rc_t rc;
+    VCursor const *curs;
+    INSDC_SRA_platform_id platform = -1;
+    
+    rc = VTableCreateCursorRead(tbl, &curs);
+    if (rc == 0) {
+        uint32_t cid;
+        
+        rc = VCursorAddColumn(curs, &cid, "("sra_platform_id_t")PLATFORM");
+        if (rc == 0) {
+            rc = VCursorOpen(curs);
+            if (rc == 0) {
+                uint32_t ebits;
+                void const *data;
+                uint32_t boff;
+                uint32_t ecnt;
+                
+                rc = VCursorCellDataDirect(curs, 1, cid, &ebits, &data, &boff, &ecnt);
+                if (rc == 0) {
+                    if (ebits == sizeof(platform) * 8 && boff == 0 && ecnt == 1)
+                        platform = ((INSDC_SRA_platform_id *)data)[0];
+                    else
+                        rc = RC(rcExe, rcTable, rcReading, rcType, rcUnexpected);
+                }
+            }
+        }
+        else
+            rc = 0;
+        VCursorRelease(curs);
+    }
+    rslt[0] = platform;
+    return rc;
+}
+
+static rc_t verify_table(VTable const *tbl, char const name[])
+{
+    char schemaName[1024];
+    char *schemaVers = NULL;
+    rc_t rc = 0;
+    
+    get_tbl_schema_info(tbl, schemaName, sizeof(schemaName), &schemaVers);
+    
+    if (schemaName[0] == '\0' || strncmp(schemaName, "NCBI:SRA:", 9) == 0) {
+        /* SRA or legacy SRA */
+        INSDC_SRA_platform_id platform;
+        
+        rc = VTable_get_platform(tbl, &platform);
+        if (rc == 0) {
+            if (platform == (INSDC_SRA_platform_id)-1) {
+                (void)PLOGMSG(klogWarn, (klogWarn, "Couldn't determine SRA Platform; type of table '$(name)' is indeterminate.", "name=%s", name));
+            }
+            rc = sra_dbcc_fastq(tbl, name);
+            if (rc == 0 && platform == SRA_PLATFORM_454) {
+                rc = sra_dbcc_454(tbl, name);
+            }
+        }
+        else {
+            (void)PLOGERR(klogErr, (klogErr, rc, "Failed to read table '$(name)'", "name=%s", name));
+        }
+    }
+    return rc;
+}
+
+static rc_t verify_mgr_table(VDBManager const *mgr, char const name[])
+{
+    VTable const *tbl;
+    VSchema *sra_schema = NULL;
+    
+    for ( ; ; ) {
+        rc_t rc = VDBManagerOpenTableRead(mgr, &tbl, sra_schema, name);
+        VSchemaRelease(sra_schema);
+        if (rc == 0) {
+            rc = verify_table(tbl, name);
+            VTableRelease(tbl);
+            return rc;
+        }
+        else if (GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcSchema && sra_schema == NULL) {
+            rc = VDBManagerMakeSRASchema(mgr, &sra_schema);
+            if (rc) {
+                (void)PLOGERR(klogErr, (klogErr, rc, "Failed to open table '$(name)'", "name=%s", name));
+                return rc;
+            }
+        }
+        else {
+            (void)PLOGERR(klogErr, (klogErr, rc, "Failed to open table '$(name)'", "name=%s", name));
+            return rc;
+        }
+    }
+}
+
+#if 0
+static rc_t verify_db_table(VDatabase const *db, char const name[])
+{
+    VTable const *tbl;
+    rc_t rc = VDatabaseOpenTableRead(db, &tbl, name);
+    
+    if (rc == 0) {
+        rc = verify_table(tbl, name);
+        VTableRelease(tbl);
+    }
+    else {
+        (void)PLOGERR(klogErr, (klogErr, rc, "Failed to open table '$(name)'", "name=%s", name));
+    }
+    return rc;
+}
+
+static rc_t align_dbcc_primary_alignment(VTable const *tbl, char const name[])
+{
+    VCursor const *curs;
+    rc_t rc = VTableCreateCursorRead(tbl, &curs);
+    
+    if (rc == 0) {
+        static char const *const cn_SAM[] = {
+            "SEQ_NAME",
+            "SAM_FLAGS",
+            "REF_NAME",
+            "REF_POS",
+            "MAPQ",
+            "HAS_MISMATCH",
+            "HAS_REF_OFFSET",
+            "REF_OFFSET",
+            "MATE_REF_NAME",
+            "MATE_REF_POS",
+            "TEMPLATE_LEN",
+            "READ",
+            "QUALITY"
+        };
+        unsigned const n = sizeof(cn_SAM)/sizeof(cn_SAM[0]);
+        ColumnInfo cols[sizeof(cn_SAM)/sizeof(cn_SAM[0])];
+        unsigned i;
+        
+        memset(cols, 0, sizeof(cols));
+        for (i = 0; i < n; ++i) {
+            cols[i].name = cn_SAM[i];
+            VCursorAddColumn(curs, &cols[i].idx, cols[i].name);
+        }
+        rc = VCursorOpen(curs);
+        if (rc == 0) {
+            rc = VCursorOpenRow(curs);
+            for (i = 0; i < n && rc == 0; ++i) {
+                VCursorCellData(curs, cols[i].idx, &cols[i].elem_bits, &cols[i].value.vp, NULL, &cols[i].elem_count);
+            }
+            for (i = 0; i < n && rc == 0; ++i) {
+                if (cols[i].idx == 0 || cols[i].elem_bits == 0) {
+                    (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(name)' could not be used to generate SAM", "name=%s", name));
+                    break;
+                }
+            }
+        }
+        VCursorRelease(curs);
+    }
+    if (rc) {
+        (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)' is damaged beyond any use", "name=%s", name));
+    }
+    return rc;
+}
+#endif
+
+typedef struct id_pair_s {
+    int64_t first;
+    int64_t second;
+} id_pair_t;
+
+static int CC id_pair_cmp(void const *A, void const *B, void *ignored)
+{
+    id_pair_t const *a = A;
+    id_pair_t const *b = B;
+    
+    return a->first < b->first ? -1 : a->first == b->first ? a->second < b->second ? -1 : a->second == b->second ? 0 : 1 : 1;
+}
+
+static rc_t ric_align_ref_and_align(char const dbname[],
+                                    VTable const *ref,
+                                    VTable const *align,
+                                    int which)
+{
+    char const *const id_col_name = which == 0 ? "PRIMARY_ALIGNMENT_IDS"
+                                  : which == 1 ? "SECONDARY_ALIGNMENT_IDS"
+                                  : which == 2 ? "EVIDENCE_ALIGNMENT_IDS"
+                                  : NULL;
+    rc_t rc;
+    VCursor const *curs = NULL;
+    ColumnInfo ci;
+    int64_t startId;
+    uint64_t count;
+    
+    rc = VTableCreateCursorRead(align, &curs);
+    if (rc == 0) {
+        rc = VCursorAddColumn(curs, &ci.idx, "REF_ID");
+        if (rc == 0)
+            rc = VCursorOpen(curs);
+        if (rc == 0)
+            rc = VCursorIdRange(curs, ci.idx, &startId, &count);
+    }
+    if (rc) {
+        (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': alignment table can not be read", "name=%s", dbname));
+    }
+    else {
+        id_pair_t *const id_pair = malloc(sizeof(id_pair_t) * count);
+        
+        if (id_pair) {
+            uint64_t i;
+            uint64_t j;
+            
+            for (j = i = 0; i < count && rc == 0; ++i) {
+                int64_t const row = startId + i;
+                
+                rc = VCursorCellDataDirect(curs, row, ci.idx, &ci.elem_bits, &ci.value.vp, NULL, &ci.elem_count);
+                if (rc == 0) {
+                    if (ci.elem_count != 1) {
+                        rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcUnexpected);
+                        (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': failed referential integrity check", "name=%s", dbname));
+                        break;
+                    }
+                    else {
+                        id_pair[j].second = row;
+                        id_pair[j].first = ci.value.i64[0];
+                        ++j;
+                    }
+                }
+                else if (GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound)
+                    rc = 0;
+            }
+            VCursorRelease(curs); curs = NULL;
+            if (rc == 0) {
+                bool ooo_warned = false;
+                bool failed = false;
+                
+                ksort(id_pair, count, sizeof(id_pair_t), id_pair_cmp, NULL);
+                
+                rc = VTableCreateCursorRead(ref, &curs);
+                if (rc == 0)
+                    rc = VCursorAddColumn(curs, &ci.idx, id_col_name);
+                if (rc == 0)
+                    rc = VCursorOpen(curs);
+                if (rc == 0)
+                    rc = VCursorIdRange(curs, ci.idx, &startId, &count);
+                if (rc == 0) {
+                    for (i = j = 0; rc == 0 && i < count; ++i) {
+                        int64_t const row = startId + i;
+                        
+                        rc = VCursorCellDataDirect(curs, row, ci.idx, &ci.elem_bits, &ci.value.vp, NULL, &ci.elem_count);
+                        if (rc == 0) {
+                            unsigned k;
+                            int64_t prvId = ci.value.i64[0];
+                            
+                            for (k = 0; rc == 0 && k < ci.elem_count; ++k, ++j) {
+                                int64_t const alignId = ci.value.i64[k];
+                                
+                                if (!ooo_warned && prvId > alignId) {
+                                    (void)PLOGMSG(klogWarn, (klogWarn, "Database '$(name)': column '$(idcol)' is not ordered", "name=%s,idcol=%s", dbname, id_col_name));
+                                    ooo_warned = true;
+                                }
+                                if (id_pair[j].first != row) {
+                                    if (!failed) {
+                                        rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                                        (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': column '$(idcol)' failed referential integrity check", "name=%s,idcol=%s", dbname, id_col_name));
+                                    }
+                                    failed = true;
+                                }
+                                else if (id_pair[j].second != alignId) {
+                                    if (!ooo_warned) {
+                                        (void)PLOGMSG(klogWarn, (klogWarn, "Database '$(name)': column '$(idcol)' might fail referential integrity check", "name=%s,idcol=%s", dbname, id_col_name));
+                                    }
+                                }
+                                prvId = alignId;
+                            }
+                        }
+                        else if (GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound)
+                            rc = 0;
+                    }
+                    if (!failed && i < count) {
+                        rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                        (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': column '$(idcol)' failed referential integrity check", "name=%s,idcol=%s", dbname, id_col_name));
+                    }
+                }
+                else
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': reference table can not be read", "name=%s", dbname));
+            }
+            free(id_pair);
+            VCursorRelease(curs);
+        }
+        else {
+            rc = RC(rcExe, rcDatabase, rcValidating, rcMemory, rcExhausted);
+            (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': referential integrity could not be checked", "name=%s", dbname));
+        }
+    }
+    return rc;
+}
+
+static rc_t ric_align_seq_and_pri(char const dbname[],
+                                  VTable const *seq,
+                                  VTable const *pri)
+{
+    rc_t rc;
+    VCursor const *curs = NULL;
+    ColumnInfo ci;
+    int64_t startId;
+    uint64_t count;
+    
+    rc = VTableCreateCursorRead(pri, &curs);
+    if (rc == 0) {
+        rc = VCursorAddColumn(curs, &ci.idx, "SEQ_SPOT_ID");
+        if (rc == 0)
+            rc = VCursorOpen(curs);
+        if (rc == 0)
+            rc = VCursorIdRange(curs, ci.idx, &startId, &count);
+    }
+    if (rc) {
+        (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': alignment table can not be read", "name=%s", dbname));
+    }
+    else {
+        id_pair_t *const id_pair = malloc(sizeof(id_pair_t) * count);
+
+        if (id_pair) {
+            uint64_t i;
+            uint64_t j;
+            
+            for (j = i = 0; i < count && rc == 0; ++i) {
+                int64_t const row = startId + i;
+                
+                rc = VCursorCellDataDirect(curs, row, ci.idx, &ci.elem_bits, &ci.value.vp, NULL, &ci.elem_count);
+                if (rc == 0) {
+                    if (ci.elem_count != 1) {
+                        rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcUnexpected);
+                        (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': failed referential integrity check", "name=%s", dbname));
+                        break;
+                    }
+                    else {
+                        id_pair[j].second = row;
+                        id_pair[j].first = ci.value.i64[0];
+                        ++j;
+                    }
+                }
+                else if (GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound)
+                    rc = 0;
+            }
+            VCursorRelease(curs); curs = NULL;
+            if (rc == 0) {
+                ksort(id_pair, count, sizeof(id_pair_t), id_pair_cmp, NULL);
+                
+                rc = VTableCreateCursorRead(seq, &curs);
+                if (rc == 0)
+                    rc = VCursorAddColumn(curs, &ci.idx, "PRIMARY_ALIGNMENT_ID");
+                if (rc == 0)
+                    rc = VCursorOpen(curs);
+                if (rc == 0) {
+                    for (i = 0; rc == 0 && i < count; ++i) {
+                        int64_t const row = id_pair[i].first;
+                        int64_t const alignId = id_pair[i].second;
+                        
+                        rc = VCursorCellDataDirect(curs, row, ci.idx, &ci.elem_bits, &ci.value.vp, NULL, &ci.elem_count);
+                        if (rc == 0) {
+                            bool found = false;
+                            
+                            for (j = 0; j < ci.elem_count; ++j)
+                                found |= (alignId == ci.value.i64[j]);
+                            
+                            if (!found) {
+                                rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                                (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': column 'SEQ_SPOT_ID' failed referential integrity check", "name=%s", dbname));
+                            }
+                        }
+                        else if (GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound) {
+                            rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcInconsistent);
+                            (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': column 'SEQ_SPOT_ID' failed referential integrity check", "name=%s", dbname));
+                        }
+                        else
+                            (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': sequence table can not be read", "name=%s", dbname));
+                    }
+                }
+                else
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': sequence table can not be read", "name=%s", dbname));
+            }
+            free(id_pair);
+        }
+        else {
+            rc = RC(rcExe, rcDatabase, rcValidating, rcMemory, rcExhausted);
+            (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': referential integrity could not be checked", "name=%s", dbname));
+        }
+        VCursorRelease(curs);
+    }
+    return rc;
+}
+
+/* database referential integrity check for alignment database */
+static rc_t dbric_align(char const dbname[],
+                        VTable const *pri,
+                        VTable const *seq,
+                        VTable const *ref)
+{
+    rc_t rc = 0;
+    
+    if ((rc == 0 || exhaustive) && (pri != NULL && seq != NULL)) {
+        rc_t rc2 = ric_align_seq_and_pri(dbname, seq, pri);
+        
+        if (rc2 == 0) {
+            (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(dbname)': SEQUENCE.PRIMARY_ALIGNMENT_ID <-> PRIMARY_ALIGNMENT.SEQ_SPOT_ID referential integrity ok", "dbname=%s", dbname));
+        }
+        if (rc == 0) {
+            rc = rc2;
+        }
+    }
+    if ((rc == 0 || exhaustive) && (pri != NULL && ref != NULL)) {
+        rc_t rc2 = ric_align_ref_and_align(dbname, ref, pri, 0);
+        
+        if (rc2 == 0) {
+            (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(dbname)': REFERENCE.PRIMARY_ALIGNMENT_IDS <-> PRIMARY_ALIGNMENT.REF_ID referential integrity ok", "dbname=%s", dbname));
+        }
+        if (rc == 0) {
+            rc = rc2;
+        }
+    }
+    return rc;
+}
+                        
+
+static rc_t verify_database_align(VDatabase const *db, char const name[], node_t const nodes[], char const names[])
+{
+    rc_t rc = 0;
+    unsigned tables = 0;
+    node_t const *tbl = &nodes[nodes[0].firstChild];
+    enum table_bits {
+        tbEvidenceInterval   = ( 1u << 0 ),
+        tbEvidenceAlignment  = ( 1u << 1 ),
+        tbPrimaryAlignment   = ( 1u << 2 ),
+        tbReference          = ( 1u << 3 ),
+        tbSequence           = ( 1u << 4 ),
+        tbSecondaryAlignment = ( 1u << 5 )
+    };
+    
+    if (nodes[0].firstChild) {
+        for ( ; ; ) {
+            char const *tname = &names[tbl->name];
+            unsigned this_table = 0;
+            
+            if (tbl->objType == kptTable) {
+                switch (tname[0]) {
+                case 'E':
+                    if (strcmp(tname, "EVIDENCE_INTERVAL") == 0)
+                        this_table |= tbEvidenceInterval;
+                    else if (strcmp(tname, "EVIDENCE_ALIGNMENT") == 0)
+                        this_table |= tbEvidenceAlignment;
+                    break;
+                case 'P':
+                    if (strcmp(tname, "PRIMARY_ALIGNMENT") == 0)
+                        this_table |= tbPrimaryAlignment;
+                    break;
+                case 'R':
+                    if (strcmp(tname, "REFERENCE") == 0)
+                        this_table |= tbReference;
+                    break;
+                case 'S':
+                    if (strcmp(tname, "SEQUENCE") == 0)
+                        this_table |= tbSequence;
+                    else if (strcmp(tname, "SECONDARY_ALIGNMENT") == 0)
+                        this_table |= tbSecondaryAlignment;
+                    break;
+                }
+                if (this_table == 0) {
+                    (void)PLOGERR(klogWarn, (klogWarn, RC(rcExe, rcDatabase, rcValidating, rcTable, rcUnexpected),
+                                             "Database '$(name)' contains unexpected table '$(table)'",
+                                             "name=%s,table=%s", name, tname));
+                }
+                tables |= this_table;
+            }
+            else {
+                (void)PLOGERR(klogWarn, (klogWarn, RC(rcExe, rcDatabase, rcValidating, rcType, rcUnexpected),
+                                         "Database '$(name)' contains unexpected object '$(obj)'",
+                                         "name=%s,obj=%s", name, tname));
+            }
+            if (tbl->nxtSibl > 0)
+                tbl = &nodes[tbl->nxtSibl];
+            else
+                break;
+        }
+    }
+    if (tables == tbSequence) {
+        /* sequence data only */
+        (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(name)' contains only unaligned reads", "name=%s", name));
+    }
+    else if (   (tables & tbReference) == 0
+             || (tables & tbPrimaryAlignment) == 0)
+    {
+        /* missing reference or primary alignment */
+        (void)PLOGERR(klogWarn, (klogWarn, rc = RC(rcExe, rcDatabase, rcValidating, rcDatabase, rcIncomplete),
+                                 "Database '$(name)' does not contain all required tables",
+                                 "name=%s", name));
+    }
+    else if (   ((tables & tbEvidenceAlignment) != 0)
+             != ((tables & tbEvidenceInterval ) != 0))
+    {
+        /* both must be present or both must be absent */
+        (void)PLOGERR(klogWarn, (klogWarn, rc = RC(rcExe, rcDatabase, rcValidating, rcDatabase, rcIncomplete),
+                                 "Database '$(name)' does not contain all required tables",
+                                 "name=%s", name));
+    }
+    while (ref_int_check) {
+        VTable const *pri = NULL;
+        VTable const *seq = NULL;
+        VTable const *ref = NULL;
+        
+        if ((tables & tbPrimaryAlignment) != 0) {
+            rc = VDatabaseOpenTableRead(db, &pri, "PRIMARY_ALIGNMENT");
+            if (rc) break;
+        }
+        if ((tables & tbSequence) != 0) {
+            rc = VDatabaseOpenTableRead(db, &seq, "SEQUENCE");
+            if (rc) break;
+        }
+        if ((tables & tbReference) != 0) {
+            rc = VDatabaseOpenTableRead(db, &ref, "REFERENCE");
+            if (rc) break;
+        }
+        rc = dbric_align(name, pri, seq, ref);
+        break;
+    }
+    return rc;    
+}
+
+static rc_t verify_database(VDatabase const *db, char const name[], node_t const nodes[], char const names[])
+{
+    char schemaName[1024];
+    char *schemaVers = NULL;
+    rc_t rc;
+    
+    rc = get_db_schema_info(db, schemaName, sizeof(schemaName), &schemaVers);
+    if (rc) {
+        (void)PLOGERR(klogErr, (klogErr, rc, "Failed to find database schema for '$(name)'", "name=%s", name));
+    }
+    else if (strncmp(schemaName, "NCBI:var:db:", 12) == 0) {
+        /* TODO: verify NCBI:var:db:* */
+    }
+    else if (strncmp(schemaName, "NCBI:WGS:db:", 12) == 0) {
+        /* TODO: verify NCBI:WGS:db:* */
+    }
+    else if (strncmp(schemaName, "NCBI:align:db:", 14) == 0) {
+        rc = verify_database_align(db, name, nodes, names);
+    }
+    else if (strcmp(schemaName, "NCBI:SRA:PacBio:smrt:db") == 0) {
+        /* TODO: verify NCBI:SRA:PacBio:smrt:db */
+    }
+    else {
+        (void)PLOGERR(klogWarn, (klogWarn, RC(rcExe, rcDatabase, rcValidating, rcType, rcUnrecognized),
+                                 "Database '$(name)' has unrecognized type '$(type)'",
+                                 "name=%s,type=%s", name, schemaName));
+    }
+    return rc;
+}
+
+static rc_t verify_mgr_database(VDBManager const *mgr, char const name[], node_t const nodes[], char const names[])
+{
+    VDatabase const *child;
+    rc_t rc = VDBManagerOpenDBRead(mgr, &child, NULL, name);
+    
+    if (rc == 0) {
+        rc = verify_database(child, name, nodes, names);
+        VDatabaseRelease(child);
+    }
+    return rc;
+}
+
+static rc_t sra_dbcc(KDirectory const *dir, char const name[], node_t const nodes[], char const names[])
+{
+    const VDBManager *mgr;
+    rc_t rc = VDBManagerMakeRead(&mgr, NULL);
+    
+    if (rc) return rc;
+    
+    if (nodes[0].objType == kptDatabase)
+        rc = verify_mgr_database(mgr, name, nodes, names);
+    else
+        rc = verify_mgr_table(mgr, name);
+    VDBManagerRelease(mgr);
+    
+    return rc;
+}
+
 static
-rc_t dbcc(const KDirectory *dir, const char name[], int mode, bool *is_db)
+rc_t get_platform(const KDirectory *dir, const VDBManager *aMgr,
+    const VTable *aTbl, char const name[], INSDC_SRA_platform_id *platform)
 {
-    rc_t rc = kdbcc(dir, name, mode, is_db);
+    rc_t rc = 0;
+    const VDBManager *mgr = aMgr;
+    const VTable *tbl = aTbl;
+    assert(name && platform);
+    if (mgr == NULL) {
+        rc = VDBManagerMakeRead(&mgr, NULL);
+        if (rc != 0) {
+            return rc;
+        }
+    }
+    if (tbl == NULL) {
+        VSchema *sra_schema = NULL;
+        for ( ; rc == 0; ) {
+            rc = VDBManagerOpenTableRead(mgr, &tbl, sra_schema, name);
+            VSchemaRelease(sra_schema);
+            if (rc == 0) {
+                rc = VTable_get_platform(tbl, platform);
+                break;
+            }
+            else if (GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcSchema
+                && sra_schema == NULL)
+            {
+                rc = VDBManagerMakeSRASchema(mgr, &sra_schema);
+            }
+        }
+    }
+    if (aTbl == NULL) {
+        VTableRelease(tbl);
+    }
+    if (aMgr == NULL) {
+        VDBManagerRelease(mgr);
+    }
+    return rc;
+}
 
-    if ( rc == 0 )
-        rc = vdbcc(dir, name, mode, * is_db);
+static
+rc_t dbcc(const char *src_path, const KDirectory *dir,
+    char const name[], uint32_t mode, bool *is_db, bool is_file)
+{
+    rc_t rc;
+    node_t *nodes = NULL;
+    char *names;
+
+    assert(src_path);
+
+    rc = init_dbcc(dir, name, is_file, &nodes, &names);
+    if (rc == 0) {
+        INSDC_SRA_platform_id platform = SRA_PLATFORM_UNDEFINED;
+        get_platform(dir, NULL, NULL, src_path, &platform);
+        rc = kdbcc(dir, src_path, mode, is_db, is_file, nodes, names, platform);
+        if ( rc == 0 )
+            rc = vdbcc(dir, src_path, mode, * is_db, is_file);
+    }
+    if (rc == 0)
+        rc = sra_dbcc(dir, src_path, nodes, names);
+
+    free(nodes);
 
     return rc;
 }
@@ -259,30 +1231,68 @@ static char const* const defaultLogLevel =
 "info";
 #endif
 
-/*******************************************************************************
+/******************************************************************************
  * Usage
- *******************************************************************************/
+ ******************************************************************************/
 const char UsageDefaultName[] = "sra-dbcc";
-rc_t CC UsageSummary(const char * name) {return 0;}
 
-static void usage(const char *progName)
+rc_t CC UsageSummary(const char *prog_name)
 {
-    const char* p = strrchr(progName, '/');
-    p = p ? p + 1 : progName;
-    printf("\nUsage: %s [options] table\n\n", p);
-    printf(
-           "    -5|--md5        Check components md5s if present, fail otherwise,\n"
-           "                    unless other checks are requested (default: yes)\n"
-           "    -b|--blob-crc   Check blobs CRC32 (default: no)\n"
-#if 0
-           "    -i|--index      Check 'skey' index (default: no)\n"
+    return KOutMsg("Usage: %s [options] table\n\n", prog_name);
+}
+
+char const *help_text[] = 
+{
+    "Check components md5s if present, fail unless other checks are requested (default: yes)", NULL,
+    "Check blobs CRC32 (default: no)", NULL,
+    "Check 'skey' index (default: no)", NULL,
+    "Continue checking table for all possible errors (default: no)", NULL,
+    "Check data referential integrity for databases (default: no)", NULL,
+    "Check index-only with blobs CRC32 (default: no)", NULL
+};
+
+OptDef Options[] = 
+{
+    { "md5"       , "5", NULL, &help_text[0], 1, false, false },
+    { "blob-crc"  , "b", NULL, &help_text[2], 1, false, false },
+#if CHECK_INDEX
+    { "index"     , "i", NULL, &help_text[4], 1, false, false },
 #endif
-           "    -x|--exhaustive Continue checking table for all possible errors\n"
-           "                    ( default is to exit after first error )\n"
-           "\n"
-           "    -h|--help       This help\n"
-           "    -V|--version    Program version\n"
-           "\n");
+    { "exhaustive", "x", NULL, &help_text[6], 1, false, false },
+    { "dri"       , "d", NULL, &help_text[8], 1, false, false },
+
+    /* should be the last one here: it is not printed by --help */
+    { "index-only",NULL, NULL, &help_text[10], 1, false, false }
+};
+#define NOPTS ( sizeof(Options)/sizeof(Options[0]))
+
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+    unsigned i;
+    
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+    if (rc)
+        progname = fullpath = UsageDefaultName;
+    
+    UsageSummary (progname);
+    
+    KOutMsg ("Options:\n");
+    
+    for (i = 0; i != NOPTS - 1; ++i) {
+        HelpOptionLine(Options[i].aliases, Options[i].name, NULL, Options[i].help);
+    }
+    
+    HelpOptionsStandard ();
+    
+    HelpVersion (fullpath, KAppVersion());
+    
+    return 0;
 }
 
 uint32_t CC KAppVersion(void)
@@ -290,144 +1300,278 @@ uint32_t CC KAppVersion(void)
     return SRA_DBCC_VERS;
 }
 
+#ifdef MAC
+#define SRAPathMake(...) (RC(rcRuntime, rcDylib, rcSearching, rcFunction, rcUnsupported))
+#define SRAPathFind(...) (RC(rcRuntime, rcDylib, rcSearching, rcFunction, rcUnsupported))
+#define SRAPathRelease(...) ((rc_t)(0))
+#endif
+
 rc_t CC KMain ( int argc, char *argv [] )
 {
-    rc_t rc = 0;
-    int i;
+    Args * args;
+    char *src_dir_path = NULL;
     char *src_path = NULL;
-    char *tbl_name = NULL;
+    char *obj_name = NULL;
     bool md5_chk = true, md5_chk_explicit = false;
     bool blob_crc = false;
     bool index_chk = false;
+    bool is_file = false;
     const KDirectory *src_dir = NULL;
+/*  char path_buffer [ 4096 ]; */
+    VFSManager *mgr = NULL;
+    VResolver *resolver = NULL;
 
-    char path_buffer [ 4096 ];
+    rc_t rc = KLogLevelSet ( klogInfo );
 
-    KLogLevelSet(klogInfo);
+    if ( rc == 0 )
+        rc = ArgsMakeAndHandle(&args, argc, argv, 1, Options, NOPTS);
     
-    if (argc < 2)
-    {
-        usage(argv[0]);
-        return RC(rcExe, rcArgv, rcReading, rcParam, rcUnknown);
+    if (rc == 0) {
+        rc = VFSManagerMake(&mgr);
+        if (rc != 0) {
+            LOGERR(klogErr, rc, "Failed to VFSManagerMake()");
+        }
     }
 
-    for (i = 1; rc == 0 && i < argc; i++)
-    {
-        char *arg = argv[i];
-        if (arg[0] != '-' && src_path == NULL)
-        {
+    if (rc == 0) {
+        rc = VFSManagerGetResolver(mgr, &resolver);
+        if (rc != 0) {
+            LOGERR(klogInt, rc, "Cannot VFSManagerGetResolver");
+        }
+        else {
+            VResolverRemoteEnable(resolver, vrAlwaysDisable);
+        }
+    }
+
+    RELEASE(VFSManager, mgr);
+
+    while (rc == 0) {
+        uint32_t pcount;
+        
+        rc = ArgsParamCount(args, &pcount); if (rc) break;
+        if (pcount == 1) {
             KDirectory *dir;
             rc = KDirectoryNativeDir(&dir);
             if (rc == 0)
             {
-                src_path = arg;
-                tbl_name = strrchr(src_path, '/');
-                if (tbl_name != NULL)
+                char const *value;
+                
+                rc = ArgsParamValue (args, 0, &value); if (rc) break;
+                src_dir_path = strdup(value);
+                src_path = strdup(value);
+                obj_name = strrchr(src_dir_path, '/');
+                if ( obj_name != NULL && obj_name [ 1 ] == 0 )
+                {
+                    * obj_name = 0;
+                    obj_name = strrchr(src_dir_path, '/');
+                }
+                if (obj_name != NULL)
                 {
-                    if (tbl_name == src_path)
-                        src_path = "/";
-                    *tbl_name++ = '\0';
+                    if (obj_name == src_dir_path) {
+                        src_dir_path[0] = '/';
+                        src_dir_path[1] = '\0';
+                    }
+                    *obj_name++ = '\0';
                 }
                 else
                 {
-                    SRAPath *pmgr;
-                    
-                    /* check for accession */
-                    rc = SRAPathMake ( & pmgr, dir );
-                    if ( rc == 0 )
-                    {
-                        rc = SRAPathFind ( pmgr, src_path, path_buffer, sizeof path_buffer );
+                    uint32_t type
+                        = KDirectoryPathType(dir, src_path) & ~kptAlias;
+                    if (type != kptFile && type != kptDir) {
+                        /* check for accession */
+                        VPath *acc = NULL;
+                        const VPath *pLocal = NULL;
+                        const String *local = NULL;
+
+                        if (rc == 0) {
+                            rc = VPathMake(&acc, src_path);
+                            if (rc != 0) {
+                                PLOGERR(klogErr, (klogErr, rc,
+                                    "VPathMake($(path)) failed",
+                                    PLOG_S(path), src_path));
+                            }
+                            else {
+                               rc = VResolverLocal(resolver, acc, &pLocal);
+                            }
+                        }
+                        if (rc == 0) {
+                            rc = VPathMakeString(pLocal, &local);
+                            if (rc != 0) {
+                                PLOGERR(klogErr, (klogErr, rc,
+                                    "VPathMake(local $(path)) failed",
+                                    PLOG_S(path), src_path));
+                            }
+                        }
                         if ( rc == 0 )
                         {
+                            PLOGMSG(klogInfo, (klogInfo,
+                                "Validating '$(path)'...", PLOG_S(path),
+                                local->addr));
                             /* use mapped path */
-                            src_path = path_buffer;
-                            tbl_name = strrchr(src_path, '/');
-                            if ( tbl_name == NULL )
-                                tbl_name = src_path;
+                            free(src_path);
+                            src_path = string_dup(local->addr, local->size);
+                            free(src_dir_path);
+                            src_dir_path = string_dup(local->addr, local->size);
+                            obj_name = strrchr(src_dir_path, '/');
+                            if ( obj_name == NULL )
+                                obj_name = src_dir_path;
                             else
                             {
-                                if ( tbl_name == src_path )
-                                    src_path = "/";
-                                * tbl_name ++ = '\0';
+                                if ( obj_name == src_dir_path ) {
+                                    src_dir_path[0] = '/';
+                                    src_dir_path[1] = '\0';
+                                }
+                                * obj_name ++ = '\0';
                             }
                         }
-                        
-                        (void)SRAPathRelease ( pmgr );
+
+                        RELEASE(VPath, pLocal);
+                        RELEASE(VPath, acc);
+                        free((void*)local);
                     }
-                    
+                    else {
+                        char full[PATH_MAX];
+                        rc = KDirectoryResolvePath(dir, true,
+                            full, sizeof full, src_path);
+                        if (rc == 0) {
+                            PLOGMSG(klogInfo, (klogInfo,
+                                "Validating '$(path)'...", PLOG_S(path),
+                                full));
+                            /* use mapped path */
+                            free(src_path);
+                            src_path = string_dup(full, strlen(full));
+                            free(src_dir_path);
+                            src_dir_path = string_dup(full, strlen(full));
+                            obj_name = strrchr(src_dir_path, '/');
+                            if ( obj_name == NULL )
+                                obj_name = src_dir_path;
+                            else
+                            {
+                                if ( obj_name == src_dir_path ) {
+                                    src_dir_path[0] = '/';
+                                    src_dir_path[1] = '\0';
+                                }
+                                * obj_name ++ = '\0';
+                            }
+                        }
+                    }
+
                     if ( rc != 0 )
                     {
                         /* appears to be a simple name */
-                        tbl_name = src_path;
-                        src_path = ".";
+                        obj_name = strdup(src_dir_path);
+                        src_dir_path[0] = '.';
+                        src_dir_path[1] = '\0';
                     }
                 }
                 
-                rc = KDirectoryOpenDirRead(dir, &src_dir, false, src_path);
+                rc = KDirectoryOpenDirRead(dir, &src_dir, false, src_dir_path);
                 KDirectoryRelease(dir);
+                if (rc) {
+                    (void)PLOGERR(klogErr, (klogErr, rc,
+                        "Failed to open '$(dir)'", "dir=%s", src_dir_path));
+                    break;
+                }
+                else {
+                    uint32_t const obj_type = KDirectoryPathType(src_dir, obj_name) & (~((uint32_t)kptAlias));
+                    
+                    switch (obj_type) {
+                    case kptFile:
+                        is_file = true;
+                        break;
+                    default:
+                        break;
+                    }
+                }
             }
         }
-        else if (strcmp(arg, "-5") == 0 || strcmp(arg, "--md5") == 0 ) {
-            md5_chk_explicit = true;
+        else {
+            MiniUsage(args);
+            ArgsWhack(args);
+            exit(EXIT_FAILURE);
         }
-        else if (strcmp(arg, "-b") == 0 || strcmp(arg, "--blob-crc") == 0 ) {
-            blob_crc = true;
+
+        rc = ArgsOptionCount(args, "md5", &pcount); if (rc) break;
+        md5_chk_explicit = md5_required = (pcount == 1);
+        if (pcount > 1) {
+            KOutMsg("argument given too many times\n");
+            MiniUsage(args);
+            break;
+        }
+        
+        rc = ArgsOptionCount(args, "blob-crc", &pcount); if (rc) break;
+        blob_crc = (pcount == 1);
+        if (pcount > 1) {
+            KOutMsg("argument given too many times\n");
+            MiniUsage(args);
+            break;
         }
-        else if (strcmp(arg, "-x") == 0 || strcmp(arg, "--exhaustive") == 0 ) {
-            exhaustive = true;
+        
+        rc = ArgsOptionCount(args, "exhaustive", &pcount); if (rc) break;
+        exhaustive = (pcount == 1);
+        if (pcount > 1) {
+            KOutMsg("argument given too many times\n");
+            MiniUsage(args);
+            break;
         }
-#if 1
-        else if (strcmp(arg, "-i") == 0 || strcmp(arg, "--index") == 0 ) {
-            index_chk = true;
+        
+        rc = ArgsOptionCount(args, "dri", &pcount); if (rc) break;
+        ref_int_check = (pcount == 1);
+        if (pcount > 1) {
+            KOutMsg("argument given too many times\n");
+            MiniUsage(args);
+            break;
         }
-#endif
-        else if (strcmp(arg, "-h") == 0 || strcmp(arg, "--help") == 0 ) {
-            usage(argv[0]);
-            return 0;
+        
+#if CHECK_INDEX
+        rc = ArgsOptionCount(args, "index", &pcount); if (rc) break;
+        index_chk = (pcount == 1);
+        if (pcount > 1) {
+            KOutMsg("argument given too many times\n");
+            MiniUsage(args);
+            break;
         }
-        else if (strcmp(arg, "-V") == 0 || strcmp(arg, "--version") == 0 ) {
-            printf("Version: %u.%u.%u\n", KAppVersion() >> 24, (KAppVersion() >> 16) & 0xFF, KAppVersion() & 0xFFFF);
-            return 0;
+#endif
+
+        rc = ArgsOptionCount(args, "index-only", &pcount);
+        if (rc) {
+            break;
         }
-        else {
-            usage(argv[0]);
-            rc = RC(rcExe, rcArgv, rcReading, rcParam, rcUnknown);
+        if (pcount > 0) {
+            s_IndexOnly = blob_crc = true;
         }
-    }
+            
 
-    if (rc == 0)
-    {
         if (blob_crc || index_chk)
         {
             /* if blob or index is requested, md5 is off unless explicitly requested */
             md5_chk = md5_chk_explicit;
         }
-
-        if (src_path == NULL)
-            rc = RC(rcExe, rcArgv, rcReading, rcParam, rcNotFound);
-        else
+        
         {
             bool is_db = false;
-            rc = dbcc(src_dir, tbl_name, (md5_chk ? 1 : 0)|(blob_crc ? 2 : 0)|(index_chk ? 4 : 0), & is_db);
+            rc = dbcc(src_path, src_dir, obj_name, (md5_chk ? 1 : 0)|(blob_crc ? 2 : 0)|(index_chk ? 4 : 0), & is_db, is_file);
             if ( is_db )
             {
                 if ( rc != 0 )
-                    (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(db)' check failed", PLOG_S(db), tbl_name));
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(db)' check failed", PLOG_S(db), obj_name));
                 else
-                    (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(db)' ok", PLOG_S(db), tbl_name));
+                    (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(db)' is consistent", PLOG_S(db), obj_name));
             }
             else
             {
                 if ( rc != 0 )
-                    (void)PLOGERR(klogErr, (klogErr, rc, "Table '$(table)' check failed", PLOG_S(table), tbl_name));
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Table '$(table)' check failed", PLOG_S(table), obj_name));
                 else
-                    (void)PLOGMSG(klogInfo, (klogInfo, "Table '$(table)' ok", PLOG_S(table), tbl_name));
+                    (void)PLOGMSG(klogInfo, (klogInfo, "Table '$(table)' is consistent", PLOG_S(table), obj_name));
             }
         }
+        break;
     }
 
-    KDirectoryRelease(src_dir);
-
-    
+    RELEASE(VResolver, resolver);
+    RELEASE(KDirectory, src_dir);
+    free(src_path);
+   
     return rc;
 }
diff --git a/tools/sra-dbcc/sra-dbcc.vers b/tools/sra-dbcc/sra-dbcc.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-dbcc/sra-dbcc.vers
+++ b/tools/sra-dbcc/sra-dbcc.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-dbcc/sra-dbcc.vers.h b/tools/sra-dbcc/sra-dbcc.vers.h
deleted file mode 100644
index 26b549c..0000000
--- a/tools/sra-dbcc/sra-dbcc.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define SRA_DBCC_VERS 0x02010007
diff --git a/tools/sra-dump/Makefile b/tools/sra-dump/Makefile
index 88c228b..7e2d4cc 100644
--- a/tools/sra-dump/Makefile
+++ b/tools/sra-dump/Makefile
@@ -46,15 +46,13 @@ ALL_TOOLS = \
 #-------------------------------------------------------------------------------
 # outer targets
 #
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
-all std: makedirs vers-includes
+all std: vers-includes
 	@ $(MAKE_CMD) $(TARGDIR)/std
 
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
 	@ $(MAKE_CMD) $(BINDIR)/$@
 
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
 
 #-------------------------------------------------------------------------------
 # std
@@ -65,6 +63,13 @@ $(TARGDIR)/std: \
 .PHONY: $(TARGDIR)/std
 
 #-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
 # clean
 #
 clean: stdclean
@@ -92,21 +97,18 @@ SRADUMP_OBJ = \
 SRADUMP_LIB = \
 	-lkapp \
 	-lsradb \
-	-ssrapath \
-	-ssraschema \
 	-lalign-reader \
-	-daxf \
-	-dsraxf \
-	-dvxf \
+	$(READONLY_SCHEMA_LIBS) \
 	-lvdb \
 	-lkdb \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
 	-lkfg \
 	-lkfs \
 	-dksrch \
+	-lkproc \
 	-lklib \
-	-ldl \
-	-lz \
-	-lbz2 \
 	-lm
 
 $(BINDIR)/sra-dump: $(SRADUMP_OBJ)
@@ -120,27 +122,27 @@ sradump_tag:
 #
 DUMP_COMMON_SRC = \
 	factory \
+	fasta_dump \
 	core
 
 DUMP_COMMON_LIB = \
-	-lsradb \
-	-lsrareader \
-	-ssrapath \
-	-ssraschema \
+	-lkapp \
 	-dsraxf \
-	-dalign-reader \
 	-daxf \
-	-lkapp \
 	-dvxf \
+	-lsradb \
+	-lsrareader \
+	-lalign-reader \
 	-lvdb \
 	-lkdb \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
 	-lkfg \
 	-lkfs \
 	-dksrch \
+	-lkproc \
 	-lklib \
-	-ldl \
-	-lz \
-	-lbz2 \
 	-lm
 
 #-------------------------------------------------------------------------------
diff --git a/tools/sra-dump/abi-dump.vers b/tools/sra-dump/abi-dump.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-dump/abi-dump.vers
+++ b/tools/sra-dump/abi-dump.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-dump/abi-dump.vers.h b/tools/sra-dump/abi-dump.vers.h
deleted file mode 100644
index fc0e775..0000000
--- a/tools/sra-dump/abi-dump.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define ABI_DUMP_VERS 0x02010007
diff --git a/tools/sra-dump/abi.c b/tools/sra-dump/abi.c
index 60ebd9c..3cdfdcc 100644
--- a/tools/sra-dump/abi.c
+++ b/tools/sra-dump/abi.c
@@ -25,6 +25,7 @@
 */
 #include <klib/log.h>
 #include <klib/container.h>
+#include <klib/printf.h>
 #include <kapp/main.h>
 
 #include <sra/sradb.h>
@@ -41,6 +42,8 @@
 #include "abi-dump.vers.h"
 #include "debug.h"
 
+#define DATABUFFERINITSIZE 10240
+
 /* ============== Absolid read type (bio/tech) filter ============================ */
 
 typedef struct Absolid2BioFilter_struct {
@@ -76,7 +79,7 @@ rc_t Absolid2BioFilter_GetKey(const SRASplitter* cself, const char** key, spotid
                 *key = "";
                 copy_readmask(new_mask, readmask);
             }
-        } else if( GetRCState(rc) == rcNotFound ) {
+        } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
             SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
             *key = NULL;
             rc = 0;
@@ -155,8 +158,8 @@ rc_t Absolid2BioFilterFactory_Make(const SRASplitterFactory** cself, const char*
 typedef struct AbsolidLabelerFilter_struct {
     const AbsolidReader* reader;
     bool is_platform_cs_native;
-    SRASplitter_Keys keys[4];
-    size_t key_sz[4];
+    SRASplitter_Keys keys[7];
+    size_t key_sz[7];
 } AbsolidLabelerFilter;
 
 static
@@ -208,7 +211,7 @@ rc_t AbsolidLabelerFilter_GetKeySet(const SRASplitter* cself, const SRASplitter_
                     q++;
                 }
             }
-        } else if( GetRCState(rc) == rcNotFound ) {
+        } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
             SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
             rc = 0;
         }
@@ -254,10 +257,16 @@ rc_t AbsolidLabelerFilterFactory_NewObj(const SRASplitterFactory* cself, const S
             ((AbsolidLabelerFilter*)(*splitter))->keys[1].key = "R3";
             ((AbsolidLabelerFilter*)(*splitter))->keys[2].key = "F5-P2";
             ((AbsolidLabelerFilter*)(*splitter))->keys[3].key = "F5-BC";
+            ((AbsolidLabelerFilter*)(*splitter))->keys[4].key = "F5-RNA";
+            ((AbsolidLabelerFilter*)(*splitter))->keys[5].key = "F5-DNA";
+            ((AbsolidLabelerFilter*)(*splitter))->keys[6].key = "F3-DNA";
             ((AbsolidLabelerFilter*)(*splitter))->key_sz[0] = 2;
             ((AbsolidLabelerFilter*)(*splitter))->key_sz[1] = 2;
             ((AbsolidLabelerFilter*)(*splitter))->key_sz[2] = 5;
             ((AbsolidLabelerFilter*)(*splitter))->key_sz[3] = 5;
+            ((AbsolidLabelerFilter*)(*splitter))->key_sz[4] = 6;
+            ((AbsolidLabelerFilter*)(*splitter))->key_sz[5] = 6;
+            ((AbsolidLabelerFilter*)(*splitter))->key_sz[6] = 6;
         }
     }
     return rc;
@@ -333,7 +342,7 @@ rc_t AbsolidReadLenFilter_GetKey(const SRASplitter* cself, const char** key, spo
                 }
                 copy_readmask(new_mask, readmask);
             }
-        } else if( GetRCState(rc) == rcNotFound ) {
+        } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
             SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
             *key = NULL;
             rc = 0;
@@ -417,7 +426,7 @@ rc_t AbsolidReadLenFilterFactory_Make(const SRASplitterFactory** cself, const ch
 
 typedef struct AbsolidQFilter_struct {
     const AbsolidReader* reader;
-    char buf[512 * 1024];
+    KDataBuffer* b;
 } AbsolidQFilter;
 
 
@@ -444,8 +453,9 @@ rc_t AbsolidQFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t
                 clear_readmask(new_mask);
                 for(readId = 0; rc == 0 && readId < num_reads; readId++) {
                     if( (rc = AbsolidReader_SpotReadInfo(self->reader, readId + 1, NULL, NULL, NULL, NULL, &read_len)) == 0 ) {
-                        if( (rc = AbsolidReaderBase(self->reader, readId + 1, self->buf, sizeof(self->buf), NULL)) == 0 ) {
-                            if( strncmp(&self->buf[1], colorStr, xLen) == 0 && strcmp(&self->buf[read_len - xLen + 1], colorStr) == 0 )  {
+                        IF_BUF((AbsolidReaderBase(self->reader, readId + 1, self->b->base, KDataBufferBytes(self->b), NULL)), self->b, read_len) {
+                            const char* b = self->b->base;
+                            if( strncmp(&b[1], colorStr, xLen) == 0 && strcmp(&b[read_len - xLen + 1], colorStr) == 0 )  {
                                 continue;
                             }
                         }
@@ -455,7 +465,7 @@ rc_t AbsolidQFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t
                 *key = "";
                 copy_readmask(new_mask, readmask);
             }
-        } else if( GetRCState(rc) == rcNotFound ) {
+        } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
             SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
             *key = NULL;
             rc = 0;
@@ -469,6 +479,7 @@ typedef struct AbsolidQFilterFactory_struct {
     const SRATable* table;
     bool clip;
     const AbsolidReader* reader;
+    KDataBuffer buf;
 } AbsolidQFilterFactory;
 
 static
@@ -479,7 +490,7 @@ rc_t AbsolidQFilterFactory_Init(const SRASplitterFactory* cself)
 
     if( self == NULL ) {
         rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
-    } else {
+    } else if( (rc = KDataBufferMakeBytes(&self->buf, DATABUFFERINITSIZE)) == 0 ) {
         rc = AbsolidReaderMake(&self->reader, self->table, self->accession,
                                false, self->clip, 0, 0, 0, false);
     }
@@ -497,6 +508,7 @@ rc_t AbsolidQFilterFactory_NewObj(const SRASplitterFactory* cself, const SRASpli
     } else {
         if( (rc = SRASplitter_Make(splitter, sizeof(AbsolidQFilter), AbsolidQFilter_GetKey, NULL, NULL, NULL)) == 0 ) {
             ((AbsolidQFilter*)(*splitter))->reader = self->reader;
+            ((AbsolidQFilter*)(*splitter))->b = &self->buf;
         }
     }
     return rc;
@@ -507,6 +519,7 @@ void AbsolidQFilterFactory_Release(const SRASplitterFactory* cself)
 {
     if( cself != NULL ) {
         AbsolidQFilterFactory* self = (AbsolidQFilterFactory*)cself;
+        KDataBufferWhack(&self->buf);
         AbsolidReaderWhack(self->reader);
     }
 }
@@ -535,10 +548,10 @@ rc_t AbsolidQFilterFactory_Make(const SRASplitterFactory** cself, const char* ac
 
 typedef struct AbsolidFormatterSplitter_struct {
     const AbsolidReader* reader;
-    char pfx[1024];
+    char pfx[10 * 1024];
     int pfx_sz;
-    char head[10 * 1024];
-    char buf[1024 * 1024];
+    KDataBuffer* hb;
+    KDataBuffer* b;
 } AbsolidFormatterSplitter;
 
 static
@@ -566,74 +579,73 @@ rc_t AbsolidFormatterSplitter_Dump(const SRASplitter* cself, spotid_t spot, cons
                         if( head_sz >= sizeof(self->pfx) ) {
                             rc = RC(rcSRA, rcString, rcCopying, rcBuffer, rcInsufficient);
                         } else {
-                            int x;
                             self->pfx_sz = head_sz;
                             memcpy(self->pfx, prefix, head_sz);
-                            x = snprintf(self->head, sizeof(self->head) - 1, "#\n# Title: %.*s\n#\n", self->pfx_sz, self->pfx);
-                            if( x < 0 || x == sizeof(self->head) - 1 ) {
-                                rc = RC(rcSRA, rcType, rcExecuting, rcBuffer, rcInsufficient);
-                            }
-                            head_sz = x;
+                            IF_BUF((string_printf(self->hb->base, KDataBufferBytes(self->hb), &head_sz,
+                                   "#\n# Title: %.*s\n#\n", self->pfx_sz, self->pfx)), self->hb, head_sz);
                         }
                     } else {
                         head_sz = 0;
                     }
                 }
-                if( rc == 0 && (rc = AbsolidReaderHeader(self->reader, readId,
-                                                         &self->head[head_sz], sizeof(self->head) - head_sz - 1, &writ)) == 0 ) {
-                    head_sz += writ;
-                    self->head[head_sz++] = '\n';
+                if( rc == 0 ) {
+                    char* h = self->hb->base;
+                    IF_BUF((AbsolidReaderHeader(self->reader, readId, &h[head_sz],
+                            KDataBufferBytes(self->hb) - head_sz - 1, &writ)), self->hb, writ + head_sz + 1) {
+                        head_sz += writ;
+                        h[head_sz++] = '\n';
+                    }
                 }
                 if( rc == 0 && (rc = SRASplitter_FileActivate(cself, ".csfasta")) == 0 ) {
-                    if( (rc = AbsolidReaderBase(self->reader, readId, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0) {
-                        if( (rc = SRASplitter_FileWrite(cself, 0, self->head, head_sz)) == 0 ) {
-                            self->buf[writ] = '\n';
-                            rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+                    IF_BUF((AbsolidReaderBase(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                        if( writ > 0 && (rc = SRASplitter_FileWrite(cself, 0, self->hb->base, head_sz)) == 0 ) {
+                            ((char*)(self->b->base))[writ] = '\n';
+                            rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
                         }
                     }
                 }
                 if( rc == 0 && (rc = SRASplitter_FileActivate(cself, "_QV.qual")) == 0 ) {
-                    if( (rc = AbsolidReaderQuality(self->reader, readId, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
-                        if( (rc = SRASplitter_FileWrite(cself, 0, self->head, head_sz)) == 0 ) {
-                            self->buf[writ] = '\n';
-                            rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+                    IF_BUF((AbsolidReaderQuality(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                        if( writ > 0 && (rc = SRASplitter_FileWrite(cself, 0, self->hb->base, head_sz)) == 0 ) {
+                            ((char*)(self->b->base))[writ] = '\n';
+                            rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
                         }
                     }
                 }
                 if( rc == 0 && (rc = SRASplitter_FileActivate(cself, "_intensity.ScaledFTC.fasta")) == 0 ) {
-                    if( (rc = AbsolidReaderSignalFTC(self->reader, readId, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
-                        if( (rc = SRASplitter_FileWrite(cself, 0, self->head, head_sz)) == 0 ) {
-                            self->buf[writ] = '\n';
-                            rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+                    IF_BUF((AbsolidReaderSignalFTC(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                        if( writ > 0 && (rc = SRASplitter_FileWrite(cself, 0, self->hb->base, head_sz)) == 0 ) {
+                            ((char*)(self->b->base))[writ] = '\n';
+                            rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
                         }
                     }
                 }
                 if( rc == 0 && (rc = SRASplitter_FileActivate(cself, "_intensity.ScaledCY3.fasta")) == 0 ) {
-                    if( (rc = AbsolidReaderSignalCY3(self->reader, readId, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
-                        if( (rc = SRASplitter_FileWrite(cself, 0, self->head, head_sz)) == 0 ) {
-                            self->buf[writ] = '\n';
-                            rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+                    IF_BUF((AbsolidReaderSignalCY3(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                        if( writ > 0 && (rc = SRASplitter_FileWrite(cself, 0, self->hb->base, head_sz)) == 0 ) {
+                            ((char*)(self->b->base))[writ] = '\n';
+                            rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
                         }
                     }
                 }
                 if( rc == 0 && (rc = SRASplitter_FileActivate(cself, "_intensity.ScaledTXR.fasta")) == 0 ) {
-                    if( (rc = AbsolidReaderSignalTXR(self->reader, readId, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
-                        if( (rc = SRASplitter_FileWrite(cself, 0, self->head, head_sz)) == 0 ) {
-                            self->buf[writ] = '\n';
-                            rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+                    IF_BUF((AbsolidReaderSignalTXR(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                        if( writ > 0 && (rc = SRASplitter_FileWrite(cself, 0, self->hb->base, head_sz)) == 0 ) {
+                            ((char*)(self->b->base))[writ] = '\n';
+                            rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
                         }
                     }
                 }
                 if( rc == 0 && (rc = SRASplitter_FileActivate(cself, "_intensity.ScaledCY5.fasta")) == 0 ) {
-                    if( (rc = AbsolidReaderSignalCY5(self->reader, readId, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
-                        if( (rc = SRASplitter_FileWrite(cself, 0, self->head, head_sz)) == 0 ) {
-                            self->buf[writ] = '\n';
-                            rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+                    IF_BUF((AbsolidReaderSignalCY5(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                        if( writ > 0 && (rc = SRASplitter_FileWrite(cself, 0, self->hb->base, head_sz)) == 0 ) {
+                            ((char*)(self->b->base))[writ] = '\n';
+                            rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
                         }
                     }
                 }
             }
-        } else if( GetRCState(rc) == rcNotFound ) {
+        } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
             SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
             rc = 0;
         }
@@ -647,6 +659,8 @@ typedef struct AbsolidFormatterFactory_struct {
     bool orig;
     bool clip;
     const AbsolidReader* reader;
+    KDataBuffer hbuf;
+    KDataBuffer buf;
 } AbsolidFormatterFactory;
 
 static
@@ -657,7 +671,8 @@ rc_t AbsolidFormatterFactory_Init(const SRASplitterFactory* cself)
 
     if( self == NULL ) {
         rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
-    } else {
+    } else if( (rc = KDataBufferMakeBytes(&self->hbuf, DATABUFFERINITSIZE)) == 0 &&
+               (rc = KDataBufferMakeBytes(&self->buf, DATABUFFERINITSIZE)) == 0 ) {
         rc = AbsolidReaderMake(&self->reader, self->table, self->accession,
                                self->orig, !self->clip, 0, 0, 0, true);
     }
@@ -677,6 +692,9 @@ rc_t AbsolidFormatterFactory_NewObj(const SRASplitterFactory* cself, const SRASp
             ((AbsolidFormatterSplitter*)(*splitter))->reader = self->reader;
             ((AbsolidFormatterSplitter*)(*splitter))->pfx[0] = '\0';
             ((AbsolidFormatterSplitter*)(*splitter))->pfx_sz = 0;
+            ((AbsolidFormatterSplitter*)(*splitter))->hb = &self->hbuf;
+            ((AbsolidFormatterSplitter*)(*splitter))->b = &self->buf;
+
         }
     }
     return rc;
@@ -687,6 +705,8 @@ void AbsolidFormatterFactory_Release(const SRASplitterFactory* cself)
 {
     if( cself != NULL ) {
         AbsolidFormatterFactory* self = (AbsolidFormatterFactory*)cself;
+        KDataBufferWhack(&self->hbuf);
+        KDataBufferWhack(&self->buf);
         AbsolidReaderWhack(self->reader);
     }
 }
diff --git a/tools/sra-dump/core.c b/tools/sra-dump/core.c
index 3c59be2..5388297 100644
--- a/tools/sra-dump/core.c
+++ b/tools/sra-dump/core.c
@@ -23,10 +23,19 @@
 * ===========================================================================
 *
 */
+
+#include <vdb/table.h> /* VTableRelease */
+#include <kfg/config.h> /* KConfigDisableUserSettings */
+
+#include <vdb/manager.h> /* VDBManagerRelease */
+#include <vdb/dependencies.h> /* UIError */
+#include <klib/report.h> /* ReportInit */
+#include <vdb/report.h>
 #include <klib/container.h>
 #include <klib/log.h>
 #include <klib/out.h>
 #include <klib/status.h>
+#include <klib/text.h>
 #include <kapp/main.h>
 #include <kfs/directory.h>
 #include <sra/sradb-priv.h>
@@ -36,34 +45,45 @@
 
 #include "debug.h"
 #include "core.h"
+#include "fasta_dump.h"
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <assert.h>
 
 /* ### checks to see if NREADS <= nreads_max defined in factory.h ##################################################### */
 
-typedef struct MaxNReadsValidator_struct {
+typedef struct MaxNReadsValidator_struct
+{
     const SRAColumn* col;
 } MaxNReadsValidator;
 
-static
-rc_t MaxNReadsValidator_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+
+static rc_t MaxNReadsValidator_GetKey( const SRASplitter* cself, 
+    const char** key, spotid_t spot, readmask_t* readmask )
 {
     rc_t rc = 0;
-    MaxNReadsValidator* self = (MaxNReadsValidator*)cself;
+    MaxNReadsValidator* self = ( MaxNReadsValidator* )cself;
 
-    if( self == NULL || key == NULL ) {
-        rc = RC(rcSRA, rcNode, rcExecuting, rcParam, rcNull);
-    } else {
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
         const void* nreads = NULL;
         bitsz_t o = 0, sz = 0;
         uint64_t nn = 0;
 
         *key = "";
-        if( self->col != NULL ) {
-            if( (rc = SRAColumnRead(self->col, spot, &nreads, &o, &sz)) == 0 ) {
-                switch(sz) {
+        if ( self->col != NULL )
+        {
+            rc = SRAColumnRead( self->col, spot, &nreads, &o, &sz );
+            if ( rc == 0 )
+            {
+                switch( sz )
+                {
                     case 8:
                         nn = *((const uint8_t*)nreads);
                         break;
@@ -77,40 +97,49 @@ rc_t MaxNReadsValidator_GetKey(const SRASplitter* cself, const char** key, spoti
                         nn = *((const uint64_t*)nreads);
                         break;
                     default:
-                        rc = RC(rcSRA, rcNode, rcExecuting, rcData, rcUnexpected);
+                        rc = RC( rcSRA, rcNode, rcExecuting, rcData, rcUnexpected );
                         break;
                 }
-                if( nn > nreads_max ) {
-                    clear_readmask(readmask);
+                if ( nn > nreads_max )
+                {
+                    clear_readmask( readmask );
                     PLOGMSG(klogWarn, (klogWarn, "too many reads $(nreads) at spot id $(row), maximum $(max) supported, skipped",
                                        PLOG_3(PLOG_U64(nreads),PLOG_I64(row),PLOG_U32(max)), nn, spot, nreads_max));
-                } else if( nn == nreads_max - 1 ) {
+                }
+                else if ( nn == nreads_max - 1 )
+                {
                     PLOGMSG(klogWarn, (klogWarn, "too many reads $(nreads) at spot id $(row), truncated to $(max)",
                                        PLOG_3(PLOG_U64(nreads),PLOG_I64(row),PLOG_U32(max)), nn + 1, spot, nreads_max));
                 }
-
             }
         }
     }
     return rc;
 }
 
-typedef struct MaxNReadsValidatorFactory_struct {
+typedef struct MaxNReadsValidatorFactory_struct
+{
     const SRATable* table;
     const SRAColumn* col;
 } MaxNReadsValidatorFactory;
 
-static
-rc_t MaxNReadsValidatorFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t MaxNReadsValidatorFactory_Init( const SRASplitterFactory* cself )
 {
     rc_t rc = 0;
-    MaxNReadsValidatorFactory* self = (MaxNReadsValidatorFactory*)cself;
+    MaxNReadsValidatorFactory* self = ( MaxNReadsValidatorFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
-    } else {
-        if( (rc = SRATableOpenColumnRead(self->table, &self->col, "NREADS", NULL)) != 0 ) {
-            if( GetRCState(rc) == rcNotFound || GetRCState(rc) == rcExists ) {
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRATableOpenColumnRead( self->table, &self->col, "NREADS", NULL );
+        if ( rc != 0 )
+        {
+            if ( GetRCState( rc ) == rcNotFound || GetRCState( rc ) == rcExists )
+            {
                 rc = 0;
             }
         }
@@ -118,52 +147,67 @@ rc_t MaxNReadsValidatorFactory_Init(const SRASplitterFactory* cself)
     return rc;
 }
 
-static
-rc_t MaxNReadsValidatorFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t MaxNReadsValidatorFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
 {
     rc_t rc = 0;
-    MaxNReadsValidatorFactory* self = (MaxNReadsValidatorFactory*)cself;
+    MaxNReadsValidatorFactory* self = ( MaxNReadsValidatorFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcSRA, rcType, rcExecuting, rcParam, rcNull);
-    } else {
-        if( (rc = SRASplitter_Make(splitter, sizeof(MaxNReadsValidator), MaxNReadsValidator_GetKey, NULL, NULL, NULL)) == 0 ) {
-            ((MaxNReadsValidator*)(*splitter))->col = self->col;
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof(MaxNReadsValidator),
+                               MaxNReadsValidator_GetKey, NULL, NULL, NULL );
+        if ( rc == 0 )
+        {
+            ( (MaxNReadsValidator*)(*splitter) )->col = self->col;
         }
     }
     return rc;
 }
 
-static
-void MaxNReadsValidatorFactory_Release(const SRASplitterFactory* cself)
+
+static void MaxNReadsValidatorFactory_Release( const SRASplitterFactory* cself )
 {
-    if( cself != NULL ) {
-        MaxNReadsValidatorFactory* self = (MaxNReadsValidatorFactory*)cself;
-        SRAColumnRelease(self->col);
+    if ( cself != NULL )
+    {
+        MaxNReadsValidatorFactory* self = ( MaxNReadsValidatorFactory* )cself;
+        SRAColumnRelease( self->col );
     }
 }
 
-static
-rc_t MaxNReadsValidatorFactory_Make(const SRASplitterFactory** cself, const SRATable* table)
+
+static rc_t MaxNReadsValidatorFactory_Make( const SRASplitterFactory** cself, const SRATable* table )
 {
     rc_t rc = 0;
     MaxNReadsValidatorFactory* obj = NULL;
 
-    if( cself == NULL || table == NULL ) {
-        rc = RC(rcSRA, rcType, rcAllocating, rcParam, rcNull);
-    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
-                                             MaxNReadsValidatorFactory_Init,
-                                             MaxNReadsValidatorFactory_NewObj,
-                                             MaxNReadsValidatorFactory_Release)) == 0 ) {
-        obj = (MaxNReadsValidatorFactory*)*cself;
-        obj->table = table;
+    if( cself == NULL || table == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcAllocating, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+                                     MaxNReadsValidatorFactory_Init,
+                                     MaxNReadsValidatorFactory_NewObj,
+                                     MaxNReadsValidatorFactory_Release);
+        if ( rc == 0 )
+        {
+            obj = ( MaxNReadsValidatorFactory* )*cself;
+            obj->table = table;
+        }
     }
     return rc;
 }
 
 /* ### READ_FILTER splitter/filter ##################################################### */
 
-enum EReadFilterSplitter_names {
+enum EReadFilterSplitter_names
+{
     EReadFilterSplitter_pass = 0,
     EReadFilterSplitter_reject,
     EReadFilterSplitter_criteria,
@@ -172,49 +216,72 @@ enum EReadFilterSplitter_names {
     EReadFilterSplitter_max
 };
 
-typedef struct ReadFilterSplitter_struct {
+
+typedef struct ReadFilterSplitter_struct
+{
     const SRAColumn* col_rdf;
     SRAReadFilter read_filter;
     SRASplitter_Keys keys[5];
 } ReadFilterSplitter;
 
-static
-rc_t ReadFilterSplitter_GetKeySet(const SRASplitter* cself, const SRASplitter_Keys** key, uint32_t* keys, spotid_t spot, const readmask_t* readmask)
+
+static rc_t ReadFilterSplitter_GetKeySet( const SRASplitter* cself,
+        const SRASplitter_Keys** key, uint32_t* keys, spotid_t spot, const readmask_t* readmask )
 {
     rc_t rc = 0;
-    ReadFilterSplitter* self = (ReadFilterSplitter*)cself;
+    ReadFilterSplitter* self = ( ReadFilterSplitter* )cself;
 
-    if( self == NULL || key == NULL ) {
-        rc = RC(rcSRA, rcNode, rcExecuting, rcParam, rcNull);
-    } else {
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
         const INSDC_SRA_read_filter* rdf;
         bitsz_t o = 0, sz = 0;
 
         *keys = 0;
-        if( self->col_rdf != NULL ) {
-            if( (rc = SRAColumnRead(self->col_rdf, spot, (const void **)&rdf, &o, &sz)) == 0 ) {
-                int32_t j, i = sz / sizeof(INSDC_SRA_read_filter) / 8;
+        if ( self->col_rdf != NULL )
+        {
+            rc = SRAColumnRead( self->col_rdf, spot, (const void **)&rdf, &o, &sz );
+            if ( rc == 0 )
+            {
+                int32_t j, i = sz / sizeof( INSDC_SRA_read_filter ) / 8;
                 *key = self->keys;
-                *keys = sizeof(self->keys) / sizeof(self->keys[0]);
-                for(j = 0; j < *keys; j++) {
-                    clear_readmask(self->keys[j].readmask);
+                *keys = sizeof( self->keys ) / sizeof( self->keys[ 0 ] );
+                for ( j = 0; j < *keys; j++ )
+                {
+                    clear_readmask( self->keys[ j ].readmask );
                 }
-                while( i > 0 ) {
+                while ( i > 0 )
+                {
                     i--;
-                    if( self->read_filter != 0xFF && self->read_filter != rdf[i] ) {
+                    if ( self->read_filter != 0xFF && self->read_filter != rdf[i] )
+                    {
                         /* skip by filter value != to command line */
-                    } else if( rdf[i] == SRA_READ_FILTER_PASS ) {
-                        set_readmask(self->keys[EReadFilterSplitter_pass].readmask, i);
-                    } else if( rdf[i] == SRA_READ_FILTER_REJECT ) {
-                        set_readmask(self->keys[EReadFilterSplitter_reject].readmask, i);
-                    } else if( rdf[i] == SRA_READ_FILTER_CRITERIA ) {
-                        set_readmask(self->keys[EReadFilterSplitter_criteria].readmask, i);
-                    } else if( rdf[i] == SRA_READ_FILTER_REDACTED ) {
-                        set_readmask(self->keys[EReadFilterSplitter_redacted].readmask, i);
-                    } else {
-                        set_readmask(self->keys[EReadFilterSplitter_unknown].readmask, i);
-                        PLOGMSG(klogWarn, (klogWarn, "unknown READ_FILTER value $(value) at spot id $(row)",
-                                       PLOG_2(PLOG_U8(value),PLOG_I64(row)), rdf[i], spot));
+                    }
+                    else if ( rdf[ i ] == SRA_READ_FILTER_PASS )
+                    {
+                        set_readmask( self->keys[ EReadFilterSplitter_pass ].readmask, i );
+                    }
+                    else if ( rdf[ i ] == SRA_READ_FILTER_REJECT )
+                    {
+                        set_readmask( self->keys[ EReadFilterSplitter_reject ].readmask, i );
+                    }
+                    else if( rdf[ i ] == SRA_READ_FILTER_CRITERIA )
+                    {
+                        set_readmask( self->keys[ EReadFilterSplitter_criteria ].readmask, i );
+                    }
+                    else if( rdf[ i ] == SRA_READ_FILTER_REDACTED )
+                    {
+                        set_readmask( self->keys[ EReadFilterSplitter_redacted ].readmask, i );
+                    }
+                    else
+                    {
+                        set_readmask( self->keys[ EReadFilterSplitter_unknown ].readmask, i );
+                        PLOGMSG( klogWarn, ( klogWarn,
+                                 "unknown READ_FILTER value $(value) at spot id $(row)",
+                                 PLOG_2( PLOG_U8( value ), PLOG_I64( row ) ), rdf[ i ], spot ) );
                     }
                 }
             }
@@ -223,26 +290,36 @@ rc_t ReadFilterSplitter_GetKeySet(const SRASplitter* cself, const SRASplitter_Ke
     return rc;
 }
 
-typedef struct ReadFilterSplitterFactory_struct {
+
+typedef struct ReadFilterSplitterFactory_struct
+{
     const SRATable* table;
     const SRAColumn* col_rdf;
     SRAReadFilter read_filter;
 } ReadFilterSplitterFactory;
 
-static
-rc_t ReadFilterSplitterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t ReadFilterSplitterFactory_Init( const SRASplitterFactory* cself )
 {
     rc_t rc = 0;
-    ReadFilterSplitterFactory* self = (ReadFilterSplitterFactory*)cself;
-
-    if( self == NULL ) {
-        rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
-    } else {
-        if( (rc = SRATableOpenColumnRead(self->table, &self->col_rdf, "READ_FILTER", sra_read_filter_t)) != 0 ) {
-            if( GetRCState(rc) == rcNotFound ) {
-                LOGMSG(klogWarn, "Column READ_FILTER was not found, param ignored");
+    ReadFilterSplitterFactory* self = ( ReadFilterSplitterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRATableOpenColumnRead( self->table, &self->col_rdf, "READ_FILTER", sra_read_filter_t );
+        if ( rc != 0 )
+        {
+            if ( GetRCState( rc ) == rcNotFound )
+            {
+                LOGMSG( klogWarn, "Column READ_FILTER was not found, param ignored" );
                 rc = 0;
-            } else if( GetRCState(rc) == rcExists ) {
+            }
+            else if ( GetRCState( rc ) == rcExists )
+            {
                 rc = 0;
             }
         }
@@ -250,101 +327,134 @@ rc_t ReadFilterSplitterFactory_Init(const SRASplitterFactory* cself)
     return rc;
 }
 
-static
-rc_t ReadFilterSplitterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t ReadFilterSplitterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
 {
     rc_t rc = 0;
-    ReadFilterSplitterFactory* self = (ReadFilterSplitterFactory*)cself;
+    ReadFilterSplitterFactory* self = ( ReadFilterSplitterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcSRA, rcType, rcExecuting, rcParam, rcNull);
-    } else {
-        if( (rc = SRASplitter_Make(splitter, sizeof(ReadFilterSplitter), NULL, ReadFilterSplitter_GetKeySet, NULL, NULL)) == 0 ) {
-            ((ReadFilterSplitter*)(*splitter))->col_rdf = self->col_rdf;
-            ((ReadFilterSplitter*)(*splitter))->read_filter = self->read_filter;
-            ((ReadFilterSplitter*)(*splitter))->keys[EReadFilterSplitter_pass].key = "pass";
-            ((ReadFilterSplitter*)(*splitter))->keys[EReadFilterSplitter_reject].key = "reject";
-            ((ReadFilterSplitter*)(*splitter))->keys[EReadFilterSplitter_criteria].key = "criteria";
-            ((ReadFilterSplitter*)(*splitter))->keys[EReadFilterSplitter_redacted].key = "redacted";
-            ((ReadFilterSplitter*)(*splitter))->keys[EReadFilterSplitter_unknown].key = "unknown";
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof(ReadFilterSplitter), NULL,
+                               ReadFilterSplitter_GetKeySet, NULL, NULL );
+        if ( rc == 0 )
+        {
+            ( (ReadFilterSplitter*)(*splitter) )->col_rdf = self->col_rdf;
+            ( (ReadFilterSplitter*)(*splitter) )->read_filter = self->read_filter;
+            ( (ReadFilterSplitter*)(*splitter) )->keys[ EReadFilterSplitter_pass ].key = "pass";
+            ( (ReadFilterSplitter*)(*splitter) )->keys[ EReadFilterSplitter_reject ].key = "reject";
+            ( (ReadFilterSplitter*)(*splitter) )->keys[ EReadFilterSplitter_criteria ].key = "criteria";
+            ( (ReadFilterSplitter*)(*splitter) )->keys[ EReadFilterSplitter_redacted ].key = "redacted";
+            ( (ReadFilterSplitter*)(*splitter) )->keys[ EReadFilterSplitter_unknown ].key = "unknown";
         }
     }
     return rc;
 }
 
-static
-void ReadFilterSplitterFactory_Release(const SRASplitterFactory* cself)
+
+static void ReadFilterSplitterFactory_Release( const SRASplitterFactory* cself )
 {
-    if( cself != NULL ) {
-        ReadFilterSplitterFactory* self = (ReadFilterSplitterFactory*)cself;
-        SRAColumnRelease(self->col_rdf);
+    if ( cself != NULL )
+    {
+        ReadFilterSplitterFactory* self = ( ReadFilterSplitterFactory* )cself;
+        SRAColumnRelease( self->col_rdf );
     }
 }
 
-static
-rc_t ReadFilterSplitterFactory_Make(const SRASplitterFactory** cself, const SRATable* table, SRAReadFilter read_filter)
+
+static rc_t ReadFilterSplitterFactory_Make( const SRASplitterFactory** cself,
+            const SRATable* table, SRAReadFilter read_filter )
 {
     rc_t rc = 0;
     ReadFilterSplitterFactory* obj = NULL;
 
-    if( cself == NULL || table == NULL ) {
-        rc = RC(rcSRA, rcType, rcAllocating, rcParam, rcNull);
-    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterRead, sizeof(*obj),
-                                             ReadFilterSplitterFactory_Init,
-                                             ReadFilterSplitterFactory_NewObj,
-                                             ReadFilterSplitterFactory_Release)) == 0 ) {
-        obj = (ReadFilterSplitterFactory*)*cself;
-        obj->table = table;
-        obj->read_filter = read_filter;
+    if ( cself == NULL || table == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcAllocating, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterRead, sizeof( *obj ),
+                                        ReadFilterSplitterFactory_Init,
+                                        ReadFilterSplitterFactory_NewObj,
+                                        ReadFilterSplitterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = ( ReadFilterSplitterFactory* ) *cself;
+            obj->table = table;
+            obj->read_filter = read_filter;
+        }
     }
     return rc;
 }
 
+
 /* ### SPOT_GROUP splitter/filter ##################################################### */
 
-typedef struct SpotGroupSplitter_struct {
-    char cur_key[256];
+typedef struct SpotGroupSplitter_struct
+{
+    char cur_key[ 256 ];
     const SRAColumn* col;
     bool split;
     char* const* spot_group;
 } SpotGroupSplitter;
 
-static
-rc_t SpotGroupSplitter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+
+static rc_t SpotGroupSplitter_GetKey( const SRASplitter* cself,
+            const char** key, spotid_t spot, readmask_t* readmask )
 {
     rc_t rc = 0;
-    SpotGroupSplitter* self = (SpotGroupSplitter*)cself;
+    SpotGroupSplitter* self = ( SpotGroupSplitter* )cself;
 
-    if( self == NULL || key == NULL ) {
-        rc = RC(rcSRA, rcNode, rcExecuting, rcParam, rcNull);
-    } else {
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
         *key = self->cur_key;
-        if( self->col != NULL ) {
+        if ( self->col != NULL )
+        {
             const char* g = NULL;
             bitsz_t o = 0, sz = 0;
-            if( (rc = SRAColumnRead(self->col, spot, (const void **)&g, &o, &sz)) == 0 ) {
+            rc = SRAColumnRead( self->col, spot, (const void **)&g, &o, &sz );
+            if ( rc == 0 )
+            {
                 sz /= 8;
                 /* truncate trailing \0 */
-                while( sz > 0 && g[sz - 1] == '\0' ) {
+                while ( sz > 0 && g[ sz - 1 ] == '\0' )
+                {
                     sz--;
                 }
-                if( sz > sizeof(self->cur_key) - 1 ) {
-                    rc = RC(rcSRA, rcNode, rcExecuting, rcBuffer, rcInsufficient);
-                } else {
+                if ( sz > sizeof( self->cur_key ) - 1 )
+                {
+                    rc = RC( rcSRA, rcNode, rcExecuting, rcBuffer, rcInsufficient );
+                }
+                else
+                {
                     int i;
                     bool found = false;
-                    memcpy(self->cur_key, g, sz);
-                    self->cur_key[sz] = '\0';
-                    for(i = 0; self->spot_group[i] != NULL; i++) {
-                        if( strcmp(self->cur_key, self->spot_group[i]) == 0 ) {
+                    memcpy( self->cur_key, g, sz );
+                    self->cur_key[ sz ] = '\0';
+                    for ( i = 0; self->spot_group[ i ] != NULL; i++ )
+                    {
+                        if ( strcmp( self->cur_key, self->spot_group[ i ] ) == 0 )
+                        {
                             found = true;
                             break;
                         }
                     }
-                    if( self->spot_group[0] != NULL && !found ) {
+                    if ( self->spot_group[ 0 ] != NULL && !found )
+                    {
                         /* list not empty and not in list -> skip */
                         *key = NULL;
-                    } else if( !self->split ) {
+                    }
+                    else if ( !self->split )
+                    {
                         *key = "";
                     }
                 }
@@ -354,27 +464,37 @@ rc_t SpotGroupSplitter_GetKey(const SRASplitter* cself, const char** key, spotid
     return rc;
 }
 
-typedef struct SpotGroupSplitterFactory_struct {
+
+typedef struct SpotGroupSplitterFactory_struct
+{
     const SRATable* table;
     const SRAColumn* col;
     bool split;
     char* const* spot_group;
 } SpotGroupSplitterFactory;
 
-static
-rc_t SpotGroupSplitterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t SpotGroupSplitterFactory_Init( const SRASplitterFactory* cself )
 {
     rc_t rc = 0;
-    SpotGroupSplitterFactory* self = (SpotGroupSplitterFactory*)cself;
+    SpotGroupSplitterFactory* self = ( SpotGroupSplitterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
-    } else {
-        if( (rc = SRATableOpenColumnRead(self->table, &self->col, "SPOT_GROUP", vdb_ascii_t)) != 0 ) {
-            if( GetRCState(rc) == rcNotFound ) {
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRATableOpenColumnRead( self->table, &self->col, "SPOT_GROUP", vdb_ascii_t );
+        if ( rc != 0 )
+        {
+            if ( GetRCState( rc ) == rcNotFound )
+            {
                 LOGMSG(klogWarn, "Column SPOT_GROUP was not found, param ignored");
                 rc = 0;
-            } else if( GetRCState(rc) == rcExists ) {
+            }
+            else if ( GetRCState( rc ) == rcExists )
+            {
                 rc = 0;
             }
         }
@@ -382,187 +502,223 @@ rc_t SpotGroupSplitterFactory_Init(const SRASplitterFactory* cself)
     return rc;
 }
 
-static
-rc_t SpotGroupSplitterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t SpotGroupSplitterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
 {
     rc_t rc = 0;
-    SpotGroupSplitterFactory* self = (SpotGroupSplitterFactory*)cself;
+    SpotGroupSplitterFactory* self = ( SpotGroupSplitterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcSRA, rcType, rcExecuting, rcParam, rcNull);
-    } else {
-        if( (rc = SRASplitter_Make(splitter, sizeof(SpotGroupSplitter), SpotGroupSplitter_GetKey, NULL, NULL, NULL)) == 0 ) {
-            ((SpotGroupSplitter*)(*splitter))->col = self->col;
-            ((SpotGroupSplitter*)(*splitter))->split = self->split;
-            ((SpotGroupSplitter*)(*splitter))->spot_group = self->spot_group;
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof( SpotGroupSplitter ),
+                               SpotGroupSplitter_GetKey, NULL, NULL, NULL );
+        if ( rc == 0 )
+        {
+            ( (SpotGroupSplitter*)(*splitter) )->col = self->col;
+            ( (SpotGroupSplitter*)(*splitter) )->split = self->split;
+            ( (SpotGroupSplitter*)(*splitter) )->spot_group = self->spot_group;
         }
     }
     return rc;
 }
 
-static
-void SpotGroupSplitterFactory_Release(const SRASplitterFactory* cself)
+
+static void SpotGroupSplitterFactory_Release( const SRASplitterFactory* cself )
 {
-    if( cself != NULL ) {
-        SpotGroupSplitterFactory* self = (SpotGroupSplitterFactory*)cself;
-        SRAColumnRelease(self->col);
+    if ( cself != NULL )
+    {
+        SpotGroupSplitterFactory* self = ( SpotGroupSplitterFactory* )cself;
+        SRAColumnRelease( self->col );
     }
 }
 
-static
-rc_t SpotGroupSplitterFactory_Make(const SRASplitterFactory** cself, const SRATable* table, bool split, char* const spot_group[])
+
+static rc_t SpotGroupSplitterFactory_Make( const SRASplitterFactory** cself,
+            const SRATable* table, bool split, char* const spot_group[] )
 {
     rc_t rc = 0;
     SpotGroupSplitterFactory* obj = NULL;
 
-    if( cself == NULL || table == NULL ) {
-        rc = RC(rcSRA, rcType, rcAllocating, rcParam, rcNull);
-    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
+    if ( cself == NULL || table == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcAllocating, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
                                              SpotGroupSplitterFactory_Init,
                                              SpotGroupSplitterFactory_NewObj,
-                                             SpotGroupSplitterFactory_Release)) == 0 ) {
-        obj = (SpotGroupSplitterFactory*)*cself;
-        obj->table = table;
-        obj->split = split;
-        obj->spot_group = spot_group;
+                                             SpotGroupSplitterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = ( SpotGroupSplitterFactory* ) *cself;
+            obj->table = table;
+            obj->split = split;
+            obj->spot_group = spot_group;
+        }
     }
     return rc;
 }
 
 /* ### Common dumper code ##################################################### */
 
-static
-rc_t SRADumper_DumpRun(const SRATable* table, spotid_t minSpotId, spotid_t maxSpotId, const SRASplitterFactory* factories)
+
+static rc_t SRADumper_DumpRun( const SRATable* table,
+        spotid_t minSpotId, spotid_t maxSpotId, const SRASplitterFactory* factories )
 {
     rc_t rc = 0, rcr = 0;
     spotid_t spot = 0;
-    make_readmask(readmask);
+    make_readmask( readmask );
     const SRASplitter* root_splitter = NULL;
 
-    rc = SRASplitterFactory_NewObj(factories, &root_splitter);
+    rc = SRASplitterFactory_NewObj( factories, &root_splitter );
 
-    for(spot = minSpotId; rc == 0 && spot <= maxSpotId; spot++ ) {
-        reset_readmask(readmask);
-        rc = SRASplitter_AddSpot(root_splitter, spot, readmask);
+    for( spot = minSpotId; rc == 0 && spot <= maxSpotId; spot++ )
+    {
+        reset_readmask( readmask );
+        rc = SRASplitter_AddSpot( root_splitter, spot, readmask );
         rc = rc ? rc : Quitting();
     }
-    rcr = SRASplitter_Release(root_splitter);
+    rcr = SRASplitter_Release( root_splitter );
 
     return rc ? rc : rcr;
 }
 
+
 static const SRADumperFmt_Arg KMainArgs[] =
-    {
-        {"A", "accession", "accession", {"Replaces accession derived from <path> in filename(s) and deflines (only for single table dump)", NULL}},
-        {"O", "outdir", "path", {"Output directory, default is working directory ( '.' )", NULL}},
-        {"Z", "stdout", NULL, {"Output to stdout, all split data become joined into single stream", NULL}},
-        {NULL, "gzip", NULL, {"Compress output using gzip", NULL}},
-        {NULL, "bzip2", NULL, {"Compress output using bzip2", NULL}},
-        {"N", "minSpotId", "rowid", {"Minimum spot id", NULL}},
-        {"X", "maxSpotId", "rowid", {"Maximum spot id", NULL}},
-        {"G", "spot-group", NULL, {"Split into files by SPOT_GROUP (member name)", NULL}},
-        {NULL, "spot-groups", "[list]", {"Filter by SPOT_GROUP (member): name[,...]", NULL}},
-        {"R", "read-filter", "[filter]", {"Split into files by READ_FILTER value",
-                                          "optionally filter by a value: pass|reject|criteria|redacted", NULL}},
-        {"T", "group-in-dirs", NULL, {"Split into subdirectories instead of files", NULL}},
-        {"K", "keep-empty-files", NULL, {"Do not delete empty files", NULL}},
-        {NULL, "table", "table-name", {"[NEW] Table name within cSRA object, default is \"SEQUENCE\"", NULL}},
-
-        {"h", "help", NULL, {"Output a brief explanation of program usage", NULL}},
-        {"V", "version", NULL, {"Display the version of the program", NULL}},
-
-        {"L", "log-level", "level", {"Logging level as number or enum string",
-                                     "One of (fatal|sys|int|err|warn|info) or (0-5)",
-                                     "Current/default is warn", NULL}},
-        {"v", "verbose", NULL, {"Increase the verbosity level of the program",
-                                "Use multiple times for more verbosity", NULL}},
+{
+    { NULL, "no-user-settings", NULL, {"Internal Only", NULL}},
+    { "A", "accession", "accession", {"Replaces accession derived from <path> in filename(s) and deflines (only for single table dump)", NULL}},
+    { "O", "outdir", "path", {"Output directory, default is working directory ( '.' )", NULL}},
+    { "Z", "stdout", NULL, {"Output to stdout, all split data become joined into single stream", NULL}},
+    { NULL, "gzip", NULL, {"Compress output using gzip", NULL}},
+    { NULL, "bzip2", NULL, {"Compress output using bzip2", NULL}},
+    { "N", "minSpotId", "rowid", {"Minimum spot id", NULL}},
+    { "X", "maxSpotId", "rowid", {"Maximum spot id", NULL}},
+    { "G", "spot-group", NULL, {"Split into files by SPOT_GROUP (member name)", NULL}},
+    { NULL, "spot-groups", "[list]", {"Filter by SPOT_GROUP (member): name[,...]", NULL}},
+    { "R", "read-filter", "[filter]", {"Split into files by READ_FILTER value",
+                                      "optionally filter by a value: pass|reject|criteria|redacted", NULL}},
+    { "T", "group-in-dirs", NULL, {"Split into subdirectories instead of files", NULL}},
+    { "K", "keep-empty-files", NULL, {"Do not delete empty files", NULL}},
+    { NULL, "table", "table-name", {"Table name within cSRA object, default is \"SEQUENCE\"", NULL}},
+
+    { "h", "help", NULL, {"Output a brief explanation of program usage", NULL}},
+    { "V", "version", NULL, {"Display the version of the program", NULL}},
+
+    { "L", "log-level", "level", {"Logging level as number or enum string",
+                                 "One of (fatal|sys|int|err|warn|info) or (0-5)",
+                                 "Current/default is warn", NULL}},
+    { "v", "verbose", NULL, {"Increase the verbosity level of the program",
+                            "Use multiple times for more verbosity", NULL}},
+    { NULL, OPTION_REPORT, NULL, {
+"Control program execution environment report generation (if implemented).",
+"One of (never|error|always). Default is error",
+                      NULL}},
 #if _DEBUGGING
         {"+", "debug", "Module[-Flag]", {"Turn on debug output for module",
                                          "All flags if not specified", NULL}},
 #endif
 
-        {NULL, NULL, NULL, {NULL}} /* terminator */
-    };
+    { NULL, NULL, NULL, {NULL}} /* terminator */
+};
+
 
 rc_t CC Usage ( const Args * args )
 {
-    const char * progname;
-    const char * fullname;
-    rc_t rc;
-    ver_t version;
-
-    fullname = "core-dumper";
-    progname = fullname;
-    version = KAppVersion();
-    rc = ArgsProgram (args, &fullname, &progname);
-
-    OUTMSG (( "\nUsage:\n" ));
-    return 0;
+    return fasta_dump_usage ( args );
 }
 
-void CC SRADumper_PrintArg(const SRADumperFmt_Arg* arg)
+
+void CC SRADumper_PrintArg( const SRADumperFmt_Arg* arg )
 {
-    
+    /* ??? */
 }
 
-static
-void CoreUsage(const char* prog, const SRADumperFmt* fmt, bool brief)
+
+static void CoreUsage( const char* prog, const SRADumperFmt* fmt, bool brief, int exit_status )
 {
-    OUTMSG(("\n"
-            "Usage:\n"
-            "  %s [options] [ -A ] <accession>\n"
-            "  %s [options] <path [path...]>\n"
-            "\n", prog, prog));
-
-    if( !brief ) {
-        if( fmt->usage ) {
-            rc_t rc = fmt->usage(fmt, KMainArgs);
-            if( rc != 0 ) {
+    OUTMSG(( "\n"
+             "Usage:\n"
+             "  %s [options] <path [path...]>\n"
+             "  %s [options] [ -A ] <accession>\n"
+             "\n", prog, prog));
+
+    if ( !brief )
+    {
+        if ( fmt->usage )
+        {
+            rc_t rc = fmt->usage( fmt, KMainArgs, 1 );
+            if ( rc != 0 )
+            {
                 LOGERR(klogErr, rc, "Usage print failed");
             }
-        } else {
+        }
+        else
+        {
             int k, i;
-            const SRADumperFmt_Arg* d[2] = { KMainArgs, NULL };
-            d[1] = fmt->arg_desc;
-            for( k = 0; k < sizeof(d) / sizeof(d[0]); k++) {
-                for( i = 0; d[k] != NULL && (d[k][i].abbr != NULL || d[k][i].full != NULL); i++) {
-                    if( (!fmt->gzip && strcmp(d[k][i].full, "gzip") == 0) ||
-                        (!fmt->bzip2 && strcmp(d[k][i].full, "bzip2") == 0) ) {
+            const SRADumperFmt_Arg* d[ 2 ] = { KMainArgs, NULL };
+
+            d[ 1 ] = fmt->arg_desc;
+            for ( k = 0; k < ( sizeof( d ) / sizeof( d[0] ) ); k++ )
+            {
+                for ( i = 1;
+                      d[k] != NULL && ( d[ k ][ i ].abbr != NULL || d[ k ][ i ].full != NULL );
+                      ++ i )
+                {
+                    if ( ( !fmt->gzip && strcmp( d[ k ][ i ].full, "gzip" ) == 0 ) ||
+                         ( !fmt->bzip2 && strcmp (d[ k ][ i ].full, "bzip2" ) == 0 ) )
+                    {
                         continue;
                     }
-                    if( k > 0 && i == 0 ) {
+                    if ( k > 0 && i == 0 )
+                    {
                         OUTMSG(("\nFormat options:\n\n"));
                     }
-                    HelpOptionLine(d[k][i].abbr, d[k][i].full, d[k][i].param, (const char**)(d[k][i].descr));
-                    if( k == 0 && i == 0 ) {
-                        OUTMSG(("\nOptions:\n\n"));
+                    HelpOptionLine( d[ k ][ i ].abbr, d[ k ][ i ].full,
+                                    d[ k ][ i ].param, (const char**)( d[ k ][ i ].descr ) );
+                    if ( k == 0 && i == 0 )
+                    {
+                        OUTMSG(( "\nOptions:\n\n" ));
                     }
                 }
             }
         }
-    } else {
-        OUTMSG(("Use option --help for more information\n"));
     }
-    HelpVersion(prog, KAppVersion());
-    exit(rcArgv);
+    else
+    {
+        OUTMSG(( "Use option --help for more information\n" ));
+    }
+    HelpVersion( prog, KAppVersion() );
+    exit( exit_status );
 }
 
-static
-rc_t SRADumper_ArgsValidate(const char* prog, const SRADumperFmt* fmt)
+
+static rc_t SRADumper_ArgsValidate( const char* prog, const SRADumperFmt* fmt )
 {
     rc_t rc = 0;
     int k, i;
 
     /* set default log level */
     const char* default_log_level = "warn";
-    if( (rc = LogLevelSet(default_log_level)) != 0 ) {
-        PLOGERR(klogErr, (klogErr, rc, "default log level to '$(lvl)'", PLOG_S(lvl), default_log_level));
-        CoreUsage(prog, fmt, true);
-    }
-    for( i = 0; KMainArgs[i].abbr != NULL; i++) {
-        for( k = 0; fmt->arg_desc != NULL && fmt->arg_desc[k].abbr != NULL; k++) {
-            if( strcmp(fmt->arg_desc[k].abbr, KMainArgs[i].abbr) == 0 ||
-                (fmt->arg_desc[k].full != NULL && strcmp(fmt->arg_desc[k].full, KMainArgs[i].full) == 0) ) {
+    rc = LogLevelSet( default_log_level );
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc, "default log level to '$(lvl)'",
+                            PLOG_S( lvl ), default_log_level ) );
+        CoreUsage( prog, fmt, true, EXIT_FAILURE );
+    }
+    for ( i = 0; KMainArgs[ i ].abbr != NULL; i++ )
+    {
+        for ( k = 0; fmt->arg_desc != NULL && fmt->arg_desc[ k ].abbr != NULL; k++ )
+        {
+            if ( strcmp( fmt->arg_desc[ k ].abbr, KMainArgs[ i ].abbr ) == 0 ||
+                 ( fmt->arg_desc[ k ].full != NULL && strcmp( fmt->arg_desc[ k ].full, KMainArgs[ i ].full ) == 0 ) )
+            {
                 rc = RC(rcExe, rcArgv, rcValidating, rcParam, rcDuplicate);
             }
         }
@@ -570,60 +726,122 @@ rc_t SRADumper_ArgsValidate(const char* prog, const SRADumperFmt* fmt)
     return rc;
 }
 
-bool CC SRADumper_GetArg(const SRADumperFmt* fmt, char const* const abbr, char const* const full,
-                         int* i, int argc, char *argv[], const char** value)
+
+bool CC SRADumper_GetArg( const SRADumperFmt* fmt, char const* const abbr, char const* const full,
+                          int* i, int argc, char *argv[], const char** value )
 {
     rc_t rc = 0;
     const char* arg = argv[*i];
-    while(*arg == '-' && *arg != '\0') {
+    while ( *arg == '-' && *arg != '\0')
+    {
         arg++;
     }
-    if( abbr != NULL && strcmp(arg, abbr) == 0 ) {
-        SRA_DUMP_DBG(9, ("GetArg key: '%s'\n", arg));
-        arg = arg + strlen(abbr);
-        if( value != NULL && arg[0] == '\0' && (*i + 1) < argc ) {
+    if ( abbr != NULL && strcmp(arg, abbr) == 0 )
+    {
+        SRA_DUMP_DBG( 9, ( "GetArg key: '%s'\n", arg ) );
+        arg = arg + strlen( abbr );
+        if ( value != NULL && arg[0] == '\0' && (*i + 1) < argc )
+        {
             arg = NULL;
-            if( argv[*i + 1][0] != '-' ) {
+            if ( argv[ *i + 1 ][ 0 ] != '-' )
+            {
                 /* advance only if next is not an option with '-' */
                 *i = *i + 1;
-                arg = argv[*i];
+                arg = argv[ *i ];
             }
-        } else {
+        }
+        else
+        {
             arg = NULL;
         }
-    } else if( full != NULL && strcmp(arg, full) == 0 ) {
-        SRA_DUMP_DBG(9, ("GetArg key: '%s'\n", arg));
+    }
+    else if ( full != NULL && strcmp( arg, full ) == 0 )
+    {
+        SRA_DUMP_DBG( 9, ( "GetArg key: '%s'\n", arg ) );
         arg = NULL;
-        if( value != NULL && (*i + 1) < argc ) {
-            if( argv[*i + 1][0] != '-' ) {
+        if ( value != NULL && ( *i + 1 ) < argc )
+        {
+            if ( argv[ *i + 1 ][ 0 ] != '-' )
+            {
                 /* advance only if next is not an option with '-' */
                 *i = *i + 1;
-                arg = argv[*i];
+                arg = argv[ *i ];
             }
         }
-    } else {
+    }
+    else
+    {
         return false;
     }
 
-    SRA_DUMP_DBG(9, ("GetArg val: '%s'\n", arg));
-    if( value == NULL && arg != NULL ) {
-        rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcUnexpected);
-    } else if( value != NULL ) {
-        if( arg == NULL && *value == '\0' ) {
-            rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcNotFound);
-        } else if( arg != NULL && arg[0] != '\0' ) {
+    SRA_DUMP_DBG( 9, ( "GetArg val: '%s'\n", arg ) );
+    if ( value == NULL && arg != NULL )
+    {
+        rc = RC( rcApp, rcArgv, rcAccessing, rcParam, rcUnexpected );
+    }
+    else if ( value != NULL )
+    {
+        if ( arg == NULL && *value == '\0' )
+        {
+            rc = RC( rcApp, rcArgv, rcAccessing, rcParam, rcNotFound );
+        }
+        else if ( arg != NULL && arg[0] != '\0' )
+        {
             *value = arg;
         }
     }
-    if( rc != 0 ) {
-        PLOGERR(klogErr, (klogErr, rc, "$(a0)$(a1)$(a2)$(f0)$(f1): $(v)",
+    if ( rc != 0 )
+    {
+        PLOGERR( klogErr, ( klogErr, rc, "$(a0)$(a1)$(a2)$(f0)$(f1): $(v)",
             PLOG_3(PLOG_S(a0),PLOG_S(a1),PLOG_S(a2))","PLOG_3(PLOG_S(f0),PLOG_S(f1),PLOG_S(v)),
             abbr ? "-": "", abbr ? abbr : "", abbr ? ", " : "", full ? "--" : "", full ? full : "", arg));
-        CoreUsage(argv[0], fmt, true);
+        CoreUsage( argv[ 0 ], fmt, true, EXIT_FAILURE );
     }
     return rc == 0 ? true : false;
 }
 
+
+static bool reportToUserSffFromNot454Run(rc_t rc, char* argv0, bool silent) {
+    assert( argv0 );
+    if ( rc == SILENT_RC( rcSRA, rcFormatter, rcConstructing,
+        rcData, rcUnsupported ) )
+    {
+        const char* name = strpbrk( argv0, "/\\" );
+        const char* last_name = name;
+        if ( last_name )
+        {
+        ++last_name;
+        }
+        while ( name )
+        {
+            name = strpbrk( last_name, "/\\" );
+            if ( name )
+            {
+                last_name = name;
+                if ( last_name )
+                {
+                    ++last_name;
+                }
+            }
+        }
+        name = last_name ? last_name : argv0;
+        if ( strcmp( "sff-dump", name ) == 0 )
+        {
+            if (!silent) {
+              OUTMSG((
+               "This run cannot be transformed into SFF format.\n"
+               "Conversion cannot be completed because the source lacks\n"
+               "one or more of the data series required by the SFF format.\n"
+               "You should be able to dump it as FASTQ by running fastq-dump.\n"
+               "\n"));
+            }
+            return true;
+        }
+    }
+    return false;
+}
+
+
 /*******************************************************************************
  * KMain - defined for use with kapp library
  *******************************************************************************/
@@ -658,146 +876,249 @@ rc_t CC KMain ( int argc, char* argv[] )
     bool read_filter_on = false;
     SRAReadFilter read_filter = 0xFF;
 
-    memset(&fmt, 0, sizeof(fmt));
-    if( (rc = SRADumper_Init(&fmt)) != 0 ) {
+    /* for the fasta-ouput of fastq-dump: branch out completely of 'common' code */
+    if ( fasta_dump_requested( argc, argv ) )
+    {
+        return fasta_dump( argc, argv );
+    }
+
+    /* Prepare for the worst: report this information after disaster */
+    ReportBuildDate ( __DATE__ );
+
+    memset( &fmt, 0, sizeof( fmt ) );
+    rc = SRADumper_Init( &fmt );
+    if ( rc != 0 )
+    {
         LOGERR(klogErr, rc, "formatter initialization");
         return 100;
-    } else if( fmt.get_factory == NULL ) {
-        rc = RC(rcExe, rcFormatter, rcValidating, rcInterface, rcNull);
-        LOGERR(klogErr, rc, "formatter factory");
+    }
+    else if ( fmt.get_factory == NULL )
+    {
+        rc = RC( rcExe, rcFormatter, rcValidating, rcInterface, rcNull );
+        LOGERR( klogErr, rc, "formatter factory" );
         return 101;
-    } else if( (rc = SRADumper_ArgsValidate(argv[0], &fmt)) != 0 ) {
-        LOGERR(klogErr, rc, "formatter args list");
-        return 102;
     }
-    if ( argc < 2 ) {
-        CoreUsage(argv[0], &fmt, true);
+    else
+    {
+        rc = SRADumper_ArgsValidate( argv[0], &fmt );
+        if ( rc != 0 )
+        {
+            LOGERR( klogErr, rc, "formatter args list" );
+            return 102;
+        }
+    }
+
+    if ( argc < 2 )
+    {
+        CoreUsage( argv[0], &fmt, true, EXIT_FAILURE );
         return 0;
     }
-    for(i = 1; i < argc; i++)
+
+    for ( i = 1; i < argc; i++ )
     {
-        arg = argv[i];
-        if( arg[0] != '-' ) {
+        arg = argv[ i ];
+        if ( arg[ 0 ] != '-' )
+        {
             uint32_t k;
-            for(k = 0; k < table_path_qty; k++) {
-                if( strcmp(arg, table_path[k]) == 0 ) {
+            for ( k = 0; k < table_path_qty; k++ )
+            {
+                if ( strcmp( arg, table_path[ k ] ) == 0 )
+                {
                     break;
                 }
             }
-            if( k >= table_path_qty ) {
-                if( (table_path_qty + 1) >= (sizeof(table_path) / sizeof(table_path[0])) ) {
-                    rc = RC(rcExe, rcArgv, rcReading, rcBuffer, rcInsufficient);
+            if ( k >= table_path_qty )
+            {
+                if ( ( table_path_qty + 1 ) >= ( sizeof( table_path ) / sizeof( table_path[ 0 ] ) ) )
+                {
+                    rc = RC( rcExe, rcArgv, rcReading, rcBuffer, rcInsufficient );
                     goto Catch;
                 }
-                table_path[table_path_qty++] = arg;
+                table_path[ table_path_qty++ ] = arg;
             }
             continue;
         }
         arg = NULL;
-        if( SRADumper_GetArg(&fmt, "L", "log-level", &i, argc, argv, &arg) ) {
-            if( (rc = LogLevelSet(arg)) != 0 ) {
-                PLOGERR(klogErr, (klogErr, rc, "log level $(lvl)", PLOG_S(lvl), arg));
+        if ( SRADumper_GetArg( &fmt, "L", "log-level", &i, argc, argv, &arg ) )
+        {
+            rc = LogLevelSet( arg );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogErr, ( klogErr, rc, "log level $(lvl)", PLOG_S( lvl ), arg ) );
                 goto Catch;
             }
-        } else if( SRADumper_GetArg(&fmt, "+", "debug", &i, argc, argv, &arg) ) {
+        }
+        else if ( SRADumper_GetArg( &fmt, NULL, OPTION_REPORT, &i, argc, argv, &arg ) )
+        {
+        }
+        else if ( SRADumper_GetArg( &fmt, "+", "debug", &i, argc, argv, &arg ) )
+        {
 #if _DEBUGGING
-            if( (rc = KDbgSetString(arg)) != 0 ) {
-                PLOGERR(klogErr, (klogErr, rc, "debug level $(lvl)", PLOG_S(lvl), arg));
+            rc = KDbgSetString( arg );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogErr, ( klogErr, rc, "debug level $(lvl)", PLOG_S( lvl ), arg ) );
                 goto Catch;
             }
 #endif
-        } else if(SRADumper_GetArg(&fmt, "H", "help", &i, argc, argv, NULL) ||
-                  SRADumper_GetArg(&fmt, "?", "h", &i, argc, argv, NULL) ) {
-            CoreUsage(argv[0], &fmt, false);
+        }
+        else if ( SRADumper_GetArg( &fmt, "H", "help", &i, argc, argv, NULL ) ||
+                  SRADumper_GetArg( &fmt, "?", "h", &i, argc, argv, NULL ) )
+        {
+            CoreUsage( argv[ 0 ], &fmt, false, EXIT_SUCCESS );
 
-        } else if(SRADumper_GetArg(&fmt, "V", "version", &i, argc, argv, NULL) ) {
-            HelpVersion (argv[0], KAppVersion());
+        }
+        else if ( SRADumper_GetArg( &fmt, "V", "version", &i, argc, argv, NULL ) )
+        {
+            HelpVersion ( argv[ 0 ], KAppVersion() );
             return 0;
-        } else if(SRADumper_GetArg(&fmt, "v", NULL, &i, argc, argv, NULL) ) {
-            KStsLevelAdjust(1);
+        }
+        else if ( SRADumper_GetArg( &fmt, "v", NULL, &i, argc, argv, NULL ) )
+        {
+            KStsLevelAdjust( 1 );
 
-        } else if( SRADumper_GetArg(&fmt, "D", "table-path", &i, argc, argv, &D_option) ) {
-            LOGMSG(klogErr, "option -D is deprecated, see --help");
-        } else if( SRADumper_GetArg(&fmt, "P", "path", &i, argc, argv, &P_option) ) {
-            LOGMSG(klogErr, "option -P is deprecated, see --help");
+        }
+        else if ( SRADumper_GetArg( &fmt, "D", "table-path", &i, argc, argv, &D_option ) )
+        {
+            LOGMSG( klogErr, "option -D is deprecated, see --help" );
+        }
+        else if ( SRADumper_GetArg( &fmt, "P", "path", &i, argc, argv, &P_option ) )
+        {
+            LOGMSG( klogErr, "option -P is deprecated, see --help" );
 
-        } else if( SRADumper_GetArg(&fmt, "A", "accession", &i, argc, argv, &accession) ) {
-        } else if( SRADumper_GetArg(&fmt, "O", "outdir", &i, argc, argv, &outdir) ) {
-        } else if( SRADumper_GetArg(&fmt, "Z", "stdout", &i, argc, argv, NULL) ) {
+        }
+        else if ( SRADumper_GetArg( &fmt, "A", "accession", &i, argc, argv, &accession ) )
+        {
+        }
+        else if ( SRADumper_GetArg( &fmt, "O", "outdir", &i, argc, argv, &outdir ) )
+        {
+        }
+        else if ( SRADumper_GetArg( &fmt, "Z", "stdout", &i, argc, argv, NULL ) )
+        {
             to_stdout = true;
-        } else if( fmt.gzip && SRADumper_GetArg(&fmt, NULL, "gzip", &i, argc, argv, NULL) ) {
+        }
+        else if ( fmt.gzip && SRADumper_GetArg( &fmt, NULL, "gzip", &i, argc, argv, NULL ) )
+        {
             do_gzip = true;
-        } else if( fmt.bzip2 && SRADumper_GetArg(&fmt, NULL, "bzip2", &i, argc, argv, NULL) ) {
+        }
+        else if ( fmt.bzip2 && SRADumper_GetArg( &fmt, NULL, "bzip2", &i, argc, argv, NULL ) )
+        {
             do_bzip2 = true;
-        } else if( SRADumper_GetArg(&fmt, NULL, "table", &i, argc, argv, &table_name) ) {
-        } else if( SRADumper_GetArg(&fmt, "N", "minSpotId", &i, argc, argv, &arg) ) {
-            minSpotId = AsciiToU32(arg, NULL, NULL);
-        } else if( SRADumper_GetArg(&fmt, "X", "maxSpotId", &i, argc, argv, &arg) ) {
-            maxSpotId = AsciiToU32(arg, NULL, NULL);
-        } else if( SRADumper_GetArg(&fmt, "G", "spot-group", &i, argc, argv, NULL) ) {
+        }
+        else if ( SRADumper_GetArg( &fmt, NULL, "table", &i, argc, argv, &table_name ) )
+        {
+        }
+        else if ( SRADumper_GetArg( &fmt, "N", "minSpotId", &i, argc, argv, &arg ) )
+        {
+            minSpotId = AsciiToU32( arg, NULL, NULL );
+        }
+        else if ( SRADumper_GetArg( &fmt, "X", "maxSpotId", &i, argc, argv, &arg ) )
+        {
+            maxSpotId = AsciiToU32( arg, NULL, NULL );
+        }
+        else if ( SRADumper_GetArg( &fmt, "G", "spot-group", &i, argc, argv, NULL ) )
+        {
             spot_group_on = true;
-        } else if( SRADumper_GetArg(&fmt, NULL, "spot-groups", &i, argc, argv, NULL) ) {
-            if( i + 1 < argc && argv[i + 1][0] != '-' ) {
+        }
+        else if ( SRADumper_GetArg( &fmt, NULL, "spot-groups", &i, argc, argv, NULL ) )
+        {
+            if ( i + 1 < argc && argv[ i + 1 ][ 0 ] != '-' )
+            {
                 int f = 0, t = 0;
                 i++;
-                while( argv[i][t] != '\0' ) {
-                    if( argv[i][t] == ',' ) {
-                        if( t - f > 0 ) {
-                            spot_group[spot_groups++] = strndup(&argv[i][f], t - f);
+                while ( argv[ i ][ t ] != '\0' )
+                {
+                    if ( argv[ i ][ t ] == ',' )
+                    {
+                        if ( t - f > 0 )
+                        {
+                            spot_group[ spot_groups++ ] = string_dup( &argv[ i ][ f ], t - f );
                         }
                         f = t + 1;
                     }
                     t++;
                 }
-                if( t - f > 0 ) {
-                    spot_group[spot_groups++] = strndup(&argv[i][f], t - f);
+                if ( t - f > 0 )
+                {
+                    spot_group[ spot_groups++ ] = string_dup( &argv[ i ][ f ], t - f );
                 }
-                if( spot_groups < 1 ) {
-                    rc = RC(rcApp, rcArgv, rcReading, rcParam, rcEmpty);
-                    PLOGERR(klogErr, (klogErr, rc, "$(p)", PLOG_S(p), argv[i - 1]));
-                    CoreUsage(argv[0], &fmt, false);
+                if ( spot_groups < 1 )
+                {
+                    rc = RC( rcApp, rcArgv, rcReading, rcParam, rcEmpty );
+                    PLOGERR( klogErr, ( klogErr, rc, "$(p)", PLOG_S( p ), argv[ i - 1 ] ) );
+                    CoreUsage( argv[ 0 ], &fmt, false, EXIT_FAILURE );
                 }
-                spot_group[spot_groups] = NULL;
+                spot_group[ spot_groups ] = NULL;
             }
-        } else if( SRADumper_GetArg(&fmt, "R", "read-filter", &i, argc, argv, NULL) ) {
+        }
+        else if ( SRADumper_GetArg( &fmt, "R", "read-filter", &i, argc, argv, NULL ) )
+        {
             read_filter_on = true;
-            if( i + 1 < argc && argv[i + 1][0] != '-' ) {
+            if ( i + 1 < argc && argv[ i + 1 ][ 0 ] != '-' )
+            {
                 i++;
-                if( read_filter != 0xFF ) {
-                    rc = RC(rcApp, rcArgv, rcReading, rcParam, rcDuplicate);
-                    PLOGERR(klogErr, (klogErr, rc, "$(p): $(o)", PLOG_2(PLOG_S(p),PLOG_S(o)), argv[i - 1], argv[i]));
-                    CoreUsage(argv[0], &fmt, false);
+                if ( read_filter != 0xFF )
+                {
+                    rc = RC( rcApp, rcArgv, rcReading, rcParam, rcDuplicate );
+                    PLOGERR( klogErr, ( klogErr, rc, "$(p): $(o)",
+                             PLOG_2( PLOG_S( p ),PLOG_S( o ) ), argv[ i - 1 ], argv[ i ] ) );
+                    CoreUsage( argv[ 0 ], &fmt, false, EXIT_FAILURE );
                 }
-                if( strcasecmp(argv[i], "pass") == 0 ) {
+                if ( strcasecmp( argv[ i ], "pass" ) == 0 )
+                {
                     read_filter = SRA_READ_FILTER_PASS;
-                } else if( strcasecmp(argv[i], "reject") == 0 ) {
+                }
+                else if ( strcasecmp( argv[ i ], "reject" ) == 0 )
+                {
                     read_filter = SRA_READ_FILTER_REJECT;
-                } else if( strcasecmp(argv[i], "criteria") == 0 ) {
+                }
+                else if ( strcasecmp( argv[ i ], "criteria" ) == 0 )
+                {
                     read_filter = SRA_READ_FILTER_CRITERIA;
-                } else if( strcasecmp(argv[i], "redacted") == 0 ) {
+                }
+                else if ( strcasecmp( argv[ i ], "redacted" ) == 0 )
+                {
                     read_filter = SRA_READ_FILTER_REDACTED;
-                } else {
+                }
+                else
+                {
                     /* must be accession */
                     i--;
                 }
             }
-        } else if( SRADumper_GetArg(&fmt, "T", "group-in-dirs", &i, argc, argv, NULL) ) {
+        }
+        else if ( SRADumper_GetArg( &fmt, "T", "group-in-dirs", &i, argc, argv, NULL ) )
+        {
             sub_dir = true;
-        } else if( SRADumper_GetArg(&fmt, "K", "keep-empty-files", &i, argc, argv, NULL) ) {
+        }
+        else if ( SRADumper_GetArg( &fmt, "K", "keep-empty-files", &i, argc, argv, NULL ) )
+        {
             keep_empty = true;
-        } else if( fmt.add_arg && fmt.add_arg(&fmt, SRADumper_GetArg, &i, argc, argv) ) {
-        } else {
-            rc = RC(rcApp, rcArgv, rcReading, rcParam, rcIncorrect);
-            PLOGERR(klogErr, (klogErr, rc, "$(p)", PLOG_S(p), argv[i]));
-            CoreUsage(argv[0], &fmt, false);
+        }
+        else if ( SRADumper_GetArg( &fmt, NULL, "no-user-settings", &i, argc, argv, NULL ) )
+        {
+             KConfigDisableUserSettings ();
+        }
+        else if ( fmt.add_arg && fmt.add_arg( &fmt, SRADumper_GetArg, &i, argc, argv ) )
+        {
+        }
+        else
+        {
+            rc = RC( rcApp, rcArgv, rcReading, rcParam, rcIncorrect );
+            PLOGERR( klogErr, ( klogErr, rc, "$(p)", PLOG_S( p ), argv[ i ] ) );
+            CoreUsage( argv[ 0 ], &fmt, false, EXIT_FAILURE );
         }
     }
-    if( to_stdout ) {
-        if( outdir != NULL || sub_dir || keep_empty ||
-            spot_group_on || (read_filter_on && read_filter == 0xFF) ) {
-            LOGMSG(klogWarn, "stdout mode is set, some options are ignored");
+
+    if ( to_stdout )
+    {
+        if ( outdir != NULL || sub_dir || keep_empty ||
+            spot_group_on || ( read_filter_on && read_filter == 0xFF ) )
+        {
+            LOGMSG( klogWarn, "stdout mode is set, some options are ignored" );
             spot_group_on = false;
-            if( read_filter == 0xFF ) {
+            if ( read_filter == 0xFF )
+            {
                 read_filter_on = false;
             }
         }
@@ -806,197 +1127,386 @@ rc_t CC KMain ( int argc, char* argv[] )
         KLogHandlerSetStdErr();
         ( void ) KDbgHandlerSetStdErr();
     }
-    if( do_gzip && do_bzip2 ) {
-        rc = RC(rcApp, rcArgv, rcReading, rcParam, rcAmbiguous);
-        LOGERR(klogErr, rc, "output compression method");
-        CoreUsage(argv[0], &fmt, false);
+
+    if ( do_gzip && do_bzip2 )
+    {
+        rc = RC( rcApp, rcArgv, rcReading, rcParam, rcAmbiguous );
+        LOGERR( klogErr, rc, "output compression method" );
+        CoreUsage( argv[ 0 ], &fmt, false, EXIT_FAILURE );
     }
-    if( minSpotId > maxSpotId ) {
+
+    if ( minSpotId > maxSpotId )
+    {
         spotid_t temp = maxSpotId;
         maxSpotId = minSpotId;
         minSpotId = temp;
     }
-    if( table_path_qty == 0 ) {
-        if( D_option != NULL && D_option[0] != '\0' ) {
+
+    if ( table_path_qty == 0 )
+    {
+        if ( D_option != NULL && D_option[ 0 ] != '\0' )
+        {
             /* support deprecated '-D' option */
-            table_path[table_path_qty++] = D_option;
-        } else if( accession == NULL || accession[0] == '\0' ) {
+            table_path[ table_path_qty++ ] = D_option;
+        }
+        else if ( accession == NULL || accession[ 0 ] == '\0' )
+        {
             /* must have accession to proceed */
-            rc = RC(rcExe, rcArgv, rcValidating, rcParam, rcEmpty);
-            LOGERR(klogErr, rc, "expected accession");
+            rc = RC( rcExe, rcArgv, rcValidating, rcParam, rcEmpty );
+            LOGERR( klogErr, rc, "expected accession" );
             goto Catch;
-        } else if( P_option != NULL && P_option[0] != '\0' ) {
+        }
+        else if ( P_option != NULL && P_option[ 0 ] != '\0' )
+        {
             /* support deprecated '-P' option */
-            i = snprintf(P_option_buffer, sizeof(P_option_buffer), "%s/%s", P_option, accession);
-            if( i < 0 || i >= sizeof(P_option_buffer) ) {
-                rc = RC(rcExe, rcArgv, rcValidating, rcParam, rcExcessive);
-                LOGERR(klogErr, rc, "path too long");
+            i = snprintf( P_option_buffer, sizeof( P_option_buffer ), "%s/%s", P_option, accession );
+            if ( i < 0 || i >= sizeof( P_option_buffer ) )
+            {
+                rc = RC( rcExe, rcArgv, rcValidating, rcParam, rcExcessive );
+                LOGERR( klogErr, rc, "path too long" );
                 goto Catch;
             }
-            table_path[table_path_qty++] = P_option_buffer;
-        } else {
-            table_path[table_path_qty++] = accession;
+            table_path[ table_path_qty++ ] = P_option_buffer;
+        }
+        else
+        {
+            table_path[ table_path_qty++ ] = accession;
         }
     }
-    if( (rc = SRAMgrMakeRead(&sraMGR)) != 0 ) {
-        LOGERR(klogErr, rc, "failed to open SRA manager");
-        goto Catch;
-    } else if( (rc = SRASplitterFactory_FilerInit(to_stdout, do_gzip, do_bzip2, sub_dir, keep_empty, outdir)) != 0 ) {
-        LOGERR(klogErr, rc, "failed to initialize files");
+
+    rc = SRAMgrMakeRead( &sraMGR );
+    if ( rc != 0 )
+    {
+        LOGERR( klogErr, rc, "failed to open SRA manager" );
         goto Catch;
     }
+    else
+    {
+        rc = SRASplitterFactory_FilerInit( to_stdout, do_gzip, do_bzip2, sub_dir, keep_empty, outdir );
+        if ( rc != 0 )
+        {
+            LOGERR( klogErr, rc, "failed to initialize files" );
+            goto Catch;
+        }
+    }
+
+    {
+        const VDBManager* vmgr = NULL;
+        rc_t rc2 = SRAMgrGetVDBManagerRead( sraMGR, &vmgr );
+        if ( rc2 != 0 )
+        {
+            LOGERR( klogErr, rc2, "while calling SRAMgrGetVDBManagerRead" );
+        }
+        rc2 = ReportSetVDBManager( vmgr );
+        VDBManagerRelease( vmgr );
+    }
+
+
     /* loop tables */
-    for(i = 0; i < table_path_qty; i++) {
+    for ( i = 0; i < table_path_qty; i++ )
+    {
         const SRASplitterFactory* fact_head = NULL;
         spotid_t smax, smin;
 
-        SRA_DUMP_DBG(5, ("table path '%s', name '%s'\n", table_path[i], table_name));
-        if( table_name != NULL && (rc = SRAMgrOpenAltTableRead(sraMGR, &fmt.table, table_name, table_path[i])) != 0 ) {
-            PLOGERR(klogErr, (klogErr, rc, "failed to open '$(path):$(table)'", "path=%s,table=%s", table_path[i], table_name));
-            continue;
+        SRA_DUMP_DBG( 5, ( "table path '%s', name '%s'\n", table_path[ i ], table_name ) );
+        if ( table_name != NULL )
+        {
+            rc = SRAMgrOpenAltTableRead( sraMGR, &fmt.table, table_name, table_path[ i ] );
+            if ( rc != 0 )
+            {
+                PLOGERR( klogErr, ( klogErr, rc, 
+                    "failed to open '$(path):$(table)'", "path=%s,table=%s",
+                    table_path[ i ], table_name ) );
+                continue;
+            }
         }
-        if( fmt.table == NULL && (rc = SRAMgrOpenTableRead(sraMGR, &fmt.table, table_path[i])) != 0 ) {
-            PLOGERR(klogErr, (klogErr, rc, "failed to open '$(path)'", "path=%s", table_path[i]));
-            continue;
+
+        ReportResetObject( table_path[ i ] );
+        if ( fmt.table == NULL )
+        {
+            rc = SRAMgrOpenTableRead( sraMGR, &fmt.table, table_path[ i ] );
+            if ( rc != 0 )
+            {
+                if ( UIError( rc, NULL, NULL ) )
+                {
+                    UITableLOGError( rc, NULL, true );
+                }
+                else
+                {
+                    PLOGERR( klogErr, ( klogErr, rc,
+                            "failed to open '$(path)'", "path=%s", table_path[ i ] ) );
+                }
+                continue;
+            }
         }
+
         /* infer accession from table_path if missing or more than one table */
         fmt.accession = table_path_qty > 1 ? NULL : accession;
-        if( fmt.accession == NULL || fmt.accession[0] == 0 ) {
+        if ( fmt.accession == NULL || fmt.accession[ 0 ] == 0 )
+        {
+            char * basename;
             char *ext;
             size_t l;
+            bool is_url = false;
+
+            strcpy( P_option_buffer, table_path[ i ] );
+
+            basename = strchr ( P_option_buffer, ':' );
+            if ( basename )
+            {
+                ++basename;
+                if ( basename [0] == '\0' )
+                    basename = P_option_buffer;
+                else
+                    is_url = true;
+            }
+            else
+                basename = P_option_buffer;
+
+            if ( is_url )
+            {
+                ext = strchr ( basename, '#' );
+                if ( ext )
+                    ext[ 0 ] = '\0';
+                ext = strchr ( basename, '?' );
+                if ( ext )
+                    ext[ 0 ] = '\0';
+            }
 
-            strcpy(P_option_buffer, table_path[i]);
-            l = strlen(P_option_buffer);
-            while( strchr("\\/", P_option_buffer[l - 1]) != NULL ) {
-                P_option_buffer[--l] = '\0';
-            }
-            fmt.accession = strrchr(P_option_buffer, '/');
-            if( fmt.accession++ == NULL ) {
-                fmt.accession = P_option_buffer;
-            }
-            /* cut of [.lite].[c]sra if any */
-            ext = strrchr(fmt.accession, '.');
-            if( ext != NULL && (strcasecmp(ext, ".sra") == 0 || strcasecmp(ext, ".csra") == 0) ) {
-                *ext = '\0';
-                ext = strrchr(fmt.accession, '.');
-                if( ext != NULL && strcasecmp(ext, ".lite") == 0 ) {
+
+            l = strlen( basename  );
+            while ( strchr( "\\/", basename[ l - 1 ] ) != NULL )
+            {
+                basename[ --l ] = '\0';
+            }
+            fmt.accession = strrchr( basename, '/' );
+            if ( fmt.accession++ == NULL )
+            {
+                fmt.accession = basename;
+            }
+
+            /* cut off [.lite].[c]sra[.nenc||.ncbi_enc] if any */
+            ext = strrchr( fmt.accession, '.' );
+            if ( ext != NULL )
+            {
+                if ( strcasecmp( ext, ".nenc" ) == 0 || strcasecmp( ext, ",ncbi_enc" ) == 0 )
+                {
                     *ext = '\0';
+                    ext = strrchr( fmt.accession, '.' );
+                }
+                if ( ext != NULL && ( strcasecmp( ext, ".sra" ) == 0 || strcasecmp( ext, ".csra" ) == 0 ) )
+                {
+                    *ext = '\0';
+                    ext = strrchr( fmt.accession, '.' );
+                    if ( ext != NULL && strcasecmp( ext, ".lite" ) == 0 )
+                    {
+                        *ext = '\0';
+                    }
                 }
             }
         }
-        SRA_DUMP_DBG(5, ("accession: '%s'\n", fmt.accession));
-        rc = SRASplitterFactory_FilerPrefix(accession ? accession : fmt.accession);
 
-        while( rc == 0 ) {
+        SRA_DUMP_DBG( 5, ( "accession: '%s'\n", fmt.accession ) );
+        rc = SRASplitterFactory_FilerPrefix( accession ? accession : fmt.accession );
+
+        while ( rc == 0 )
+        {
             /* sort out the spot id range */
-            if( (rc = SRATableMaxSpotId(fmt.table, &smax)) != 0 ||
-                (rc = SRATableMinSpotId(fmt.table, &smin)) != 0 ) {
+            if ( ( rc = SRATableMaxSpotId( fmt.table, &smax ) ) != 0 ||
+                 ( rc = SRATableMinSpotId( fmt.table, &smin ) ) != 0 )
+            {
                 break;
             }
+
+            {
+                const struct VTable* tbl = NULL;
+                rc_t rc2 = SRATableGetVTableRead( fmt.table, &tbl );
+                if ( rc == 0 )
+                {
+                    rc = rc2;
+                }
+                rc2 = ReportResetTable( table_path[i], tbl );
+                if ( rc == 0 )
+                {
+                    rc = rc2;
+                }
+                VTableRelease( tbl );   /* SRATableGetVTableRead adds Reference to tbl! */
+            }
+
             /* test if we have to dump anything... */
-            if( smax < minSpotId || smin > maxSpotId ) {
+            if ( smax < minSpotId || smin > maxSpotId )
+            {
                 break;
             }
-            if( smax > maxSpotId ) {
+            if ( smax > maxSpotId )
+            {
                 smax = maxSpotId;
             }
-            if( smin < minSpotId) {
+            if ( smin < minSpotId )
+            {
                 smin = minSpotId;
             }
+
             /* hack to reduce looping in AddSpot: needs redesign to pass nreads along through tree */
-            if( true ) {
+            if ( true ) /* ??? */
+            {
                 const SRAColumn* c = NULL;
                 nreads_max = NREADS_MAX;
-                if( (rc = SRATableOpenColumnRead(fmt.table, &c, "PLATFORM", sra_platform_id_t)) == 0 ) {
-                    const INSDC_SRA_platform_id* platform;
+                rc = SRATableOpenColumnRead( fmt.table, &c, "PLATFORM", sra_platform_id_t );
+                if ( rc == 0 )
+                {
+                    const INSDC_SRA_platform_id *platform;
                     bitsz_t o, z;
-                    if( (rc = SRAColumnRead(c, 1, (const void **)&platform, &o, &z)) == 0 ) {
-                        if( *platform != SRA_PLATFORM_PACBIO_SMRT ) {
+                    rc = SRAColumnRead( c, 1, (const void **)&platform, &o, &z );
+                    if ( rc == 0 && platform != NULL )
+                    {
+                        if ( *platform != SRA_PLATFORM_PACBIO_SMRT )
+                        {
                             nreads_max = 32;
                         }
                     }
-                    SRAColumnRelease(c);
-                } else if( GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcColumn ) {
+                    SRAColumnRelease( c );
+                }
+                else if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcColumn )
+                {
                     rc = 0;
                 }
             }
+
             /* table dependent */
-            if( (rc = fmt.get_factory(&fmt, &fact_head)) != 0 ) {
+            rc = fmt.get_factory( &fmt, &fact_head );
+            if ( rc != 0 )
+            {
                 break;
             }
-            if( fact_head == NULL ) {
-                rc = RC(rcExe, rcFormatter, rcResolving, rcInterface, rcNull);
+            if ( fact_head == NULL )
+            {
+                rc = RC( rcExe, rcFormatter, rcResolving, rcInterface, rcNull );
                 break;
             }
-            if( rc == 0 && (spot_group_on || spot_groups > 0) ) {
+
+            if ( rc == 0 && ( spot_group_on || spot_groups > 0 ) )
+            {
                 const SRASplitterFactory* f = NULL;
-                if( (rc = SpotGroupSplitterFactory_Make(&f, fmt.table, spot_group_on, spot_group)) == 0 ) {
-                    if( (rc = SRASplitterFactory_AddNext(f, fact_head)) == 0 ) {
+                rc = SpotGroupSplitterFactory_Make( &f, fmt.table, spot_group_on, spot_group );
+                if ( rc == 0 )
+                {
+                    rc = SRASplitterFactory_AddNext( f, fact_head );
+                    if ( rc == 0 )
+                    {
                         fact_head = f;
-                    } else {
-                        SRASplitterFactory_Release(f);
+                    }
+                    else
+                    {
+                        SRASplitterFactory_Release( f );
                     }
                 }
             }
-            if( rc == 0 && read_filter_on ) {
+
+            if ( rc == 0 && read_filter_on )
+            {
                 const SRASplitterFactory* f = NULL;
-                if( (rc = ReadFilterSplitterFactory_Make(&f, fmt.table, read_filter)) == 0 ) {
-                    if( (rc = SRASplitterFactory_AddNext(f, fact_head)) == 0 ) {
+                rc = ReadFilterSplitterFactory_Make( &f, fmt.table, read_filter );
+                if ( rc == 0 )
+                {
+                    rc = SRASplitterFactory_AddNext( f, fact_head );
+                    if ( rc == 0 )
+                    {
                         fact_head = f;
-                    } else {
-                        SRASplitterFactory_Release(f);
+                    }
+                    else
+                    {
+                        SRASplitterFactory_Release( f );
                     }
                 }
             }
-            if( rc == 0 ) {
+
+            if ( rc == 0 )
+            {
                 /* this filter takes over head of chain to be first and kill off bad NREADS */
                 const SRASplitterFactory* f = NULL;
-                if( (rc = MaxNReadsValidatorFactory_Make(&f, fmt.table)) == 0 ) {
-                    if( (rc = SRASplitterFactory_AddNext(f, fact_head)) == 0 ) {
+                rc = MaxNReadsValidatorFactory_Make( &f, fmt.table );
+                if ( rc == 0 )
+                {
+                    rc = SRASplitterFactory_AddNext( f, fact_head );
+                    if ( rc == 0 )
+                    {
                         fact_head = f;
-                    } else {
-                        SRASplitterFactory_Release(f);
+                    }
+                    else
+                    {
+                        SRASplitterFactory_Release( f );
                     }
                 }
             }
-            if( (rc = SRASplitterFactory_Init(fact_head)) == 0 &&
-                (rc = SRADumper_DumpRun(fmt.table, smin, smax, fact_head)) == 0 ) { 
-                uint64_t total = 0, file = 0;
-                SRASplitterFactory_FilerReport(&total, &file);
-                OUTMSG(("Written %lu spots for %s\n", total - total_spots, table_path[i]));
-                if( to_stdout && total > 0 ) {
-                    PLOGMSG(klogInfo, (klogInfo, "$(t) biggest file has $(n) spots",
-                        PLOG_2(PLOG_S(t),PLOG_U64(n)), table_path[i], file));
+
+            rc = SRASplitterFactory_Init( fact_head );
+            if ( rc == 0 )
+            {
+                /* ********************************************************** */
+                rc = SRADumper_DumpRun( fmt.table, smin, smax, fact_head );
+                /* ********************************************************** */
+                if ( rc == 0 )
+                { 
+                    uint64_t total = 0, file = 0;
+                    SRASplitterFactory_FilerReport( &total, &file );
+                    OUTMSG(( "Written %lu spots for %s\n", total - total_spots, table_path[ i ] ));
+                    if ( to_stdout && total > 0 )
+                    {
+                        PLOGMSG( klogInfo, ( klogInfo, "$(t) biggest file has $(n) spots",
+                            PLOG_2( PLOG_S( t ), PLOG_U64( n ) ), table_path[ i ], file ));
+                    }
+                    total_spots = total;
                 }
-                total_spots = total;
             }
             break;
         }
-        SRASplitterFactory_Release(fact_head);
-        SRATableRelease(fmt.table);
+
+        SRASplitterFactory_Release( fact_head );
+        SRATableRelease( fmt.table );
         fmt.table = NULL;
-        if( rc == 0 ) {
-            PLOGMSG(klogInfo, (klogInfo, "$(path)$(dot)$(table) $(spots) spots",
+        if ( rc == 0 )
+        {
+            PLOGMSG( klogInfo, ( klogInfo, "$(path)$(dot)$(table) $(spots) spots",
                     PLOG_4(PLOG_S(path),PLOG_S(dot),PLOG_S(table),PLOG_U32(spots)),
-                    table_path[i], table_name ? ":" : "", table_name ? table_name : "", smax - smin + 1));
-        } else {
-            PLOGERR(klogErr, (klogErr, rc, "failed $(path)$(dot)$(table)",
+                    table_path[ i ], table_name ? ":" : "", table_name ? table_name : "", smax - smin + 1 ) );
+        }
+        else if (!reportToUserSffFromNot454Run(rc, argv [0], false)) {
+            PLOGERR( klogErr, ( klogErr, rc, "failed $(path)$(dot)$(table)",
                     PLOG_3(PLOG_S(path),PLOG_S(dot),PLOG_S(table)),
-                    table_path[i], table_name ? ":" : "", table_name ? table_name : ""));
+                    table_path[ i ], table_name ? ":" : "", table_name ? table_name : "" ) );
         }
     }
+
 Catch:
-    if( fmt.release ) {
-        rc_t rr = fmt.release(&fmt);
-        if( rr != 0 ) {
-            SRA_DUMP_DBG(1, ("formatter release error %R\n", rr));
+    if ( fmt.release )
+    {
+        rc_t rr = fmt.release( &fmt );
+        if ( rr != 0 )
+        {
+            SRA_DUMP_DBG( 1, ( "formatter release error %R\n", rr ) );
         }
     }
-    for(i = 0; i < spot_groups; i++) {
-        free(spot_group[i]);
+
+    for ( i = 0; i < spot_groups; i++ )
+    {
+        free( spot_group[ i ] );
     }
     SRASplitterFiler_Release();
-    SRAMgrRelease(sraMGR);
-    OUTMSG(("Written %lu spots total\n", total_spots));
+    SRAMgrRelease( sraMGR );
+    OUTMSG(( "Written %lu spots total\n", total_spots ));
+
+
+    /* Report execution environment if necessary */
+    if (rc != 0 && reportToUserSffFromNot454Run(rc, argv [0], true)) {
+        ReportSilence();
+    }
+    {
+        rc_t rc2 = ReportFinalize( rc );
+        if ( rc == 0 )
+        {
+            rc = rc2;
+        }
+    }
     return rc;
 }
diff --git a/tools/sra-dump/core.h b/tools/sra-dump/core.h
index 5861475..493b1ab 100644
--- a/tools/sra-dump/core.h
+++ b/tools/sra-dump/core.h
@@ -54,7 +54,7 @@ struct SRADumperFmt
     const SRADumperFmt_Arg* arg_desc;
 
     /* optional - prints custom help page */
-    rc_t (*usage)(const SRADumperFmt* fmt, const SRADumperFmt_Arg* core_args);
+    rc_t (*usage)(const SRADumperFmt* fmt, const SRADumperFmt_Arg* core_args, int first );
     /* optional */
     rc_t (*release)(const SRADumperFmt* fmt);
     /* optional process current arg and advance i by number of processed args */
diff --git a/tools/sra-dump/factory.c b/tools/sra-dump/factory.c
index e0f5741..d4b9d29 100644
--- a/tools/sra-dump/factory.c
+++ b/tools/sra-dump/factory.c
@@ -181,8 +181,7 @@ rc_t SRASplitterFiler_PopKey(void)
     if( g_filer->path_tail == 0 ) {
         return RC(rcExe, rcFile, rcDetaching, rcDirEntry, rcTooShort);
     }
-    g_filer->path_tail--;
-    g_filer->path_len -= strlen(g_filer->path[g_filer->path_tail]) + 1;
+    g_filer->path_len -= strlen(g_filer->path[--g_filer->path_tail]) + 1;
     return 0;
 }
 
@@ -412,12 +411,14 @@ rc_t SRASplitterFactory_FilerPrefix(const char* prefix)
     if( g_filer == NULL ) {
         rc = RC(rcExe, rcFile, rcUpdating, rcSelf, rcNotOpen);
     } else if( prefix == NULL || strcmp(prefix, g_filer->prefix) != 0 ) {
-        free(g_filer->prefix);
-        g_filer->prefix = strdup(prefix ? prefix : "");
-        if( g_filer->prefix == NULL ) {
-            rc = RC(rcExe, rcFile, rcConstructing, rcMemory, rcExhausted);
-        } else if( (rc = SRASplitterFiler_PopKey()) == 0 ) {
-            rc = SRASplitterFiler_PushKey(g_filer->prefix);
+        if( (rc = SRASplitterFiler_PopKey()) == 0 ) {
+            free(g_filer->prefix);
+            g_filer->prefix = strdup(prefix ? prefix : "");
+            if( g_filer->prefix == NULL ) {
+                rc = RC(rcExe, rcFile, rcConstructing, rcMemory, rcExhausted);
+            } else {
+                rc = SRASplitterFiler_PushKey(g_filer->prefix);
+            }
         }
     }
     return rc;
@@ -823,24 +824,32 @@ rc_t SRASplitter_FileActivate(const SRASplitter* cself, const char* key)
     return rc;
 }
 
-rc_t SRASplitter_FileWrite(const SRASplitter* cself, spotid_t spot, const void* buf, size_t size)
+rc_t SRASplitter_FileWrite( const SRASplitter* cself, spotid_t spot, const void* buf, size_t size )
 {
-    rc_t rc = 0;
     SRASplitter* self = NULL;
-
-    if( (rc = SRASplitter_ResolveSelf(cself, rcWriting, &self)) == 0 ) {
-        if( self->last_found == NULL ) {
-            rc = RC(rcExe, rcFile, rcWriting, rcDirEntry, rcUnknown);
-        } else if( buf != NULL && size > 0 ) {
+    
+    rc_t rc = SRASplitter_ResolveSelf( cself, rcWriting, &self );
+    if ( rc == 0 )
+    {
+        if ( self->last_found == NULL )
+        {
+            rc = RC( rcExe, rcFile, rcWriting, rcDirEntry, rcUnknown );
+        }
+        else if ( buf != NULL && size > 0 )
+        {
             size_t writ = 0;
-            SRASplitterFile* f = (SRASplitterFile*)(self->last_found->child.file);
-            if( (rc = KFileWrite(f->file, f->pos, buf, size, &writ)) == 0 ) {
+            SRASplitterFile* f = ( SRASplitterFile* )( self->last_found->child.file );
+            rc = KFileWrite( f->file, f->pos, buf, size, &writ );
+            if ( rc == 0 )
+            {
                 f->pos += writ;
-                if( f->curr_spot != spot && spot != 0 ) {
-                    f->curr_spot = spot;
-                    f->spot_qty = f->spot_qty + 1;
+                if ( f->curr_spot != spot && spot != 0 )
+                {
+                     f->curr_spot = spot;
+                     f->spot_qty = f->spot_qty + 1;
                 }
-                if( g_filer->curr_spot != spot && spot != 0 ) {
+                if ( g_filer->curr_spot != spot && spot != 0 )
+                {
                     g_filer->curr_spot = spot;
                     g_filer->spot_qty = g_filer->spot_qty + 1;
                 }
@@ -850,24 +859,30 @@ rc_t SRASplitter_FileWrite(const SRASplitter* cself, spotid_t spot, const void*
     return rc;
 }
 
-rc_t SRASplitter_FileWritePos(const SRASplitter* cself, spotid_t spot, uint64_t pos, const void* buf, size_t size)
+rc_t SRASplitter_FileWritePos( const SRASplitter* cself, spotid_t spot, 
+                               uint64_t pos, const void* buf, size_t size )
 {
-    rc_t rc = 0;
     SRASplitter* self = NULL;
 
-    if( (rc = SRASplitter_ResolveSelf(cself, rcWriting, &self)) == 0 ) {
-        if( self->last_found == NULL ) {
-            rc = RC(rcExe, rcFile, rcWriting, rcDirEntry, rcUnknown);
-        } else if( buf != NULL && size > 0 ) {
+    rc_t rc = SRASplitter_ResolveSelf( cself, rcWriting, &self );
+    if ( rc == 0 )
+    {
+        if ( self->last_found == NULL )
+        {
+            rc = RC( rcExe, rcFile, rcWriting, rcDirEntry, rcUnknown );
+        }
+        else if ( buf != NULL && size > 0 )
+        {
             const SRASplitterFile* f = self->last_found->child.file;
             /* remember last position */
             uint64_t old_pos = f->pos;
-            ((SRASplitterFile*)f)->pos = pos;
+            ( ( SRASplitterFile* ) f )->pos = pos;
             /* write to requested position */
-            rc = SRASplitter_FileWrite(cself, spot, buf, size);
-            if( f->pos < old_pos ) {
+            rc = SRASplitter_FileWrite( cself, spot, buf, size );
+            if ( f->pos < old_pos )
+            {
                 /* revert to last position if wrote less than it was */
-                ((SRASplitterFile*)f)->pos = old_pos;
+                ( ( SRASplitterFile* ) f )->pos = old_pos;
             }
         }
     }
diff --git a/tools/sra-dump/factory.h b/tools/sra-dump/factory.h
index d92d5b3..fcf91ff 100644
--- a/tools/sra-dump/factory.h
+++ b/tools/sra-dump/factory.h
@@ -28,8 +28,23 @@
 
 #include <klib/rc.h>
 #include <kfs/file.h>
+#include <klib/data-buffer.h>
 #include <sra/sradb.h>
 
+#define DATABUFFER_INC_SZ 4096
+
+/* KDataBuffer is used as byte buffer-only here! */
+#define IF_BUF(expr, buf, writ) \
+    while( (rc = (expr)) != 0 && \
+           (GetRCObject(rc) == rcMemory || GetRCObject(rc) == rcBuffer) && \
+           (GetRCState(rc) == rcInsufficient || GetRCState(rc) == rcExhausted) ) { \
+        SRA_DUMP_DBG(10, ("\n%s grow buffer from %u to %u\n", __func__, buf->elem_count, writ + DATABUFFER_INC_SZ)); \
+        if( (rc = KDataBufferResize(buf, writ + DATABUFFER_INC_SZ)) != 0 ) { \
+            break; \
+        } \
+    } \
+    if( rc == 0 )
+
 typedef enum {
     eSplitterSpot = 1,
     eSplitterRead,
@@ -39,8 +54,8 @@ typedef enum {
 typedef struct SRASplitter SRASplitter;
 
 #define NREADS_MAX (8*1024)
-typedef uint8_t readmask_t;
-uint32_t nreads_max;
+typedef uint8_t readmask_t; 
+extern uint32_t nreads_max;
 
 #define make_readmask(m) readmask_t m[NREADS_MAX]
 #define copy_readmask(src,dst) (memcpy(dst, src, sizeof(readmask_t) * nreads_max))
@@ -108,8 +123,8 @@ rc_t SRASplitter_FileActivate(const SRASplitter* self, const char* key);
    spot can be zero to indicate file header/footer
    which no considered as actual data and file treated as empty if no actual spots is written
  */
-rc_t SRASplitter_FileWrite(const SRASplitter* self, spotid_t spot, const void* buf, size_t size);
-rc_t SRASplitter_FileWritePos(const SRASplitter* self, spotid_t spot, uint64_t pos, const void* buf, size_t size);
+rc_t SRASplitter_FileWrite( const SRASplitter* cself, spotid_t spot, const void* buf, size_t size );
+rc_t SRASplitter_FileWritePos( const SRASplitter* cself, spotid_t spot, uint64_t pos, const void* buf, size_t size );
 
 typedef struct SRASplitterFactory SRASplitterFactory;
 
diff --git a/tools/sra-dump/fasta_dump.c b/tools/sra-dump/fasta_dump.c
new file mode 100644
index 0000000..41e7b58
--- /dev/null
+++ b/tools/sra-dump/fasta_dump.c
@@ -0,0 +1,752 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/rc.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/printf.h>
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <kfs/buffile.h>
+#include <kfs/bzip.h>
+#include <kfs/gzip.h>
+
+#include <vdb/manager.h>
+
+#include <align/manager.h>
+#include <align/reference.h>
+
+#include <sra/srapath.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+static bool string_ends_with( const char * s, const char * pattern )
+{
+    const char * found = strstr ( s, pattern );
+    if ( found == NULL )
+        return false;
+    else
+    {
+        size_t len_string = string_size ( s );
+        size_t len_pattern = string_size ( pattern );
+        size_t found_at = ( found - s );
+        return ( found_at == ( len_string - len_pattern ) );
+    }
+}
+
+
+static char * fasta_ref = "--fastaref";
+
+/* we have to test if argv[0] ends in 'fastq-dump' or 'fastq-dump.exe',
+   and we have an argument called '--fasta' */
+bool fasta_dump_requested( int argc, char* argv[] )
+{
+    if ( string_ends_with( argv[ 0 ], "fastq-dump" ) ||
+         string_ends_with( argv[ 0 ], "fastq-dump.exe" ) )
+    {
+        int i;
+        for ( i = 1; i < argc; ++i )
+        {
+            if ( strcmp( argv[ i ], fasta_ref ) == 0 )
+                return true;
+        }
+    }
+
+    return false;
+}
+
+#define OPTION_OUTF    "outfile"
+#define ALIAS_OUTF     "o"
+
+#define OPTION_WIDTH   "width"
+#define ALIAS_WIDTH    "w"
+
+#define OPTION_GZIP    "gzip"
+#define ALIAS_GZIP     NULL
+
+#define OPTION_BZIP    "bzip2"
+#define ALIAS_BZIP     NULL
+
+#define OPTION_REFNAME "refname"
+#define ALIAS_REFNAME  "r"
+
+#define OPTION_FROM    "from"
+#define ALIAS_FROM     "N"
+
+#define OPTION_LENGTH   "length"
+#define ALIAS_LENGTH    "X"
+
+#define OPTION_FAREF    "fastaref"
+#define ALIAS_FAREF     NULL
+
+
+OptDef MyOptions[] =
+{
+    /*name,           alias,         hfkt, usage-help,    maxcount, needs value, required */
+    { OPTION_OUTF,    ALIAS_OUTF,    NULL, NULL,          1,        true,        false },
+    { OPTION_WIDTH,   ALIAS_WIDTH,   NULL, NULL,          1,        true,        false },
+    { OPTION_GZIP,    ALIAS_GZIP,    NULL, NULL,          1,        false,       false },
+    { OPTION_BZIP,    ALIAS_BZIP,    NULL, NULL,          1,        false,       false },
+    { OPTION_REFNAME, ALIAS_REFNAME, NULL, NULL,          0,        true,        false },
+    { OPTION_FROM,    ALIAS_FROM,    NULL, NULL,          1,        true,        false },
+    { OPTION_LENGTH,  ALIAS_LENGTH,  NULL, NULL,          1,        true,        false },
+    { OPTION_FAREF,   ALIAS_FAREF,   NULL, NULL,          1,        false,       false }
+};
+
+
+/* =========================================================================================== */
+
+
+/* GLOBAL VARIABLES */
+struct {
+    KWrtWriter org_writer;
+    void* org_data;
+    KFile* kfile;
+    uint64_t pos;
+} g_out_writer = { NULL };
+
+
+/* =========================================================================================== */
+
+static rc_t get_str_option( const Args *args, const char *name, const char ** res )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    *res = NULL;
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "ArgsOptionCount() failed" );
+    }
+    else
+    {
+        if ( count > 0 )
+        {
+            rc = ArgsOptionValue( args, name, 0, res );
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "ArgsOptionValue() failed" );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t get_bool_option( const Args *args, const char *name, bool *res, const bool def )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    if ( rc == 0 && count > 0 )
+    {
+        *res = true;
+    }
+    else
+    {
+        *res = def;
+    }
+    return rc;
+}
+
+
+static rc_t get_int_option( const Args *args, const char *name, uint32_t *res, const uint32_t def )
+{
+    const char * s;
+    rc_t rc = get_str_option( args, name, &s );
+    *res = def;
+    if ( rc == 0 && s != NULL )
+    {
+        *res = atoi( s );
+    }
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+static rc_t CC BufferedWriter ( void* self, const char* buffer, size_t bufsize, size_t* num_writ )
+{
+    rc_t rc = 0;
+
+    assert( buffer != NULL );
+    assert( num_writ != NULL );
+
+    do {
+        rc = KFileWrite( g_out_writer.kfile, g_out_writer.pos, buffer, bufsize, num_writ );
+        if ( rc == 0 )
+        {
+            buffer += *num_writ;
+            bufsize -= *num_writ;
+            g_out_writer.pos += *num_writ;
+        }
+    } while ( rc == 0 && bufsize > 0 );
+    return rc;
+}
+
+
+static rc_t set_stdout_to( bool gzip, bool bzip2, const char * filename, size_t bufsize )
+{
+    rc_t rc = 0;
+    if ( gzip && bzip2 )
+    {
+        rc = RC( rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous );
+    }
+    else
+    {
+        KDirectory *dir;
+        rc = KDirectoryNativeDir( &dir );
+        if ( rc != 0 )
+            LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+        else
+        {
+            KFile *of;
+            rc = KDirectoryCreateFile ( dir, &of, false, 0664, kcmInit, "%s", filename );
+            if ( rc == 0 )
+            {
+                KFile *buf;
+                if ( gzip )
+                {
+                    KFile *gz;
+                    rc = KFileMakeGzipForWrite( &gz, of );
+                    if ( rc == 0 )
+                    {
+                        KFileRelease( of );
+                        of = gz;
+                    }
+                }
+                if ( bzip2 )
+                {
+                    KFile *bz;
+                    rc = KFileMakeBzip2ForWrite( &bz, of );
+                    if ( rc == 0 )
+                    {
+                        KFileRelease( of );
+                        of = bz;
+                    }
+                }
+
+                rc = KBufFileMakeWrite( &buf, of, false, bufsize );
+                if ( rc == 0 )
+                {
+                    g_out_writer.kfile = buf;
+                    g_out_writer.org_writer = KOutWriterGet();
+                    g_out_writer.org_data = KOutDataGet();
+                    rc = KOutHandlerSet( BufferedWriter, &g_out_writer );
+                    if ( rc != 0 )
+                        LOGERR( klogInt, rc, "KOutHandlerSet() failed" );
+                }
+                KFileRelease( of );
+            }
+            KDirectoryRelease( dir );
+        }
+    }
+    return rc;
+}
+
+
+static void release_stdout_redirection( void )
+{
+    KFileRelease( g_out_writer.kfile );
+    if( g_out_writer.org_writer != NULL )
+    {
+        KOutHandlerSet( g_out_writer.org_writer, g_out_writer.org_data );
+    }
+    g_out_writer.org_writer = NULL;
+}
+
+
+static rc_t CC write_to_FILE( void *f, const char *buffer, size_t bytes, size_t *num_writ )
+{
+    * num_writ = fwrite ( buffer, 1, bytes, f );
+    if ( * num_writ != bytes )
+        return RC( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+    return 0;
+}
+
+
+/* =========================================================================================== */
+
+typedef struct fasta_options
+{
+    uint32_t width;
+    bool gzip;
+    bool bzip;
+    const char * outfile;
+    INSDC_coord_zero from;
+    INSDC_coord_len length;
+} fasta_options;
+
+
+static rc_t get_fasta_options( Args * args, fasta_options *opts )
+{
+    rc_t rc = get_int_option( args, OPTION_WIDTH, &opts->width, 80 );
+
+    if ( rc == 0 )
+        rc = get_str_option( args, OPTION_OUTF, &opts->outfile );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_GZIP, &opts->gzip, false );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_BZIP, &opts->bzip, false );
+
+    if ( rc == 0 )
+    {
+        uint32_t x;
+        rc = get_int_option( args, OPTION_FROM, &x, 0 );
+        if ( rc == 0 )
+            opts->from = x;
+    }
+
+    if ( rc == 0 )
+    {
+        uint32_t x;
+        rc = get_int_option( args, OPTION_LENGTH, &x, 0 );
+        if ( rc == 0 )
+            opts->length = x;
+    }
+
+    return rc;
+}
+
+/* =========================================================================================== */
+
+#if TOOLS_USE_SRAPATH != 0
+static bool is_this_a_filesystem_path( const char * path )
+{
+    bool res = false;
+    size_t i, n = string_size ( path );
+    for ( i = 0; i < n && !res; ++i )
+    {
+        char c = path[ i ];
+        res = ( c == '.' || c == '/' || c == '\\' );
+    }
+    return res;
+}
+#endif
+
+#if TOOLS_USE_SRAPATH != 0
+static char *translate_accession( SRAPath *my_sra_path,
+                           const char *accession,
+                           const size_t bufsize )
+{
+    rc_t rc;
+    char * res = calloc( 1, bufsize );
+    if ( res == NULL ) return NULL;
+
+    rc = SRAPathFind( my_sra_path, accession, res, bufsize );
+    if ( GetRCState( rc ) == rcNotFound )
+    {
+        free( res );
+        return NULL;
+    }
+    else if ( GetRCState( rc ) == rcInsufficient )
+    {
+        free( res );
+        return translate_accession( my_sra_path, accession, bufsize * 2 );
+    }
+    else if ( rc != 0 )
+    {
+        free( res );
+        return NULL;
+    }
+    return res;
+}
+#endif
+
+#if TOOLS_USE_SRAPATH != 0
+static rc_t resolve_accession( const KDirectory *my_dir, char ** path )
+{
+    SRAPath *my_sra_path;
+    rc_t rc = 0;
+
+    if ( strchr ( *path, '/' ) != NULL )
+        return 0;
+
+    rc = SRAPathMake( &my_sra_path, my_dir );
+    if ( rc != 0 )
+    {
+        if ( GetRCState ( rc ) != rcNotFound || GetRCTarget ( rc ) != rcDylib )
+        {
+            if ( rc != 0 )
+                LOGERR( klogInt, rc, "SRAPathMake() failed" );
+        }
+        else
+            rc = 0;
+    }
+    else
+    {
+        if ( !SRAPathTest( my_sra_path, *path ) )
+        {
+            char *buf = translate_accession( my_sra_path, *path, 64 );
+            if ( buf != NULL )
+            {
+                free( (char*)(*path) );
+                *path = buf;
+            }
+        }
+        SRAPathRelease( my_sra_path );
+    }
+    return rc;
+}
+#endif
+
+/* =========================================================================================== */
+
+
+typedef struct fasta_ctx
+{
+    KDirectory *dir;
+    const VDBManager *vdb_mgr;
+    const AlignMgr *almgr;
+} fasta_ctx;
+
+
+static rc_t dump_reference_loop( fasta_options *opts, const ReferenceObj* refobj )
+{
+    rc_t rc = 0;
+    uint8_t * buffer = malloc( opts->width + 2 );
+    if ( buffer == NULL )
+    {
+        rc = RC( rcExe, rcNoTarg, rcListing, rcMemory, rcExhausted );
+        LOGERR( klogInt, rc, "allocating reference-buffer failed!" );
+    }
+    else
+    {
+        INSDC_coord_zero pos = opts->from;
+        INSDC_coord_len w = opts->length;
+
+        while ( w > 0 && rc == 0 )
+        {
+            INSDC_coord_len written;
+            INSDC_coord_len to_read = ( w > opts->width ? opts->width : w );
+            rc = ReferenceObj_Read( refobj, pos, to_read, buffer, &written );
+            if ( rc != 0 )
+                LOGERR( klogInt, rc, "ReferenceObj_Read() failed" );
+            else
+            {
+                OUTMSG(( "%.*s\n", written, buffer ));
+                w -= written;
+                pos += written;
+            }
+        }
+        free( buffer );
+    }
+    return rc;
+}
+
+
+static rc_t dump_reference( fasta_options *opts, const ReferenceObj* refobj )
+{
+    const char * name;
+    rc_t rc = ReferenceObj_Name( refobj, &name );
+    if ( rc != 0 )
+        LOGERR( klogInt, rc, "ReferenceObj_Name() failed!" );
+    else
+    {
+        INSDC_coord_len seq_len;
+        rc = ReferenceObj_SeqLength( refobj, &seq_len );
+        if ( rc != 0 )
+            LOGERR( klogInt, rc, "ReferenceObj_SeqLength() failed!" );
+        else
+        {
+            if ( opts->from == 0 )
+            {
+                if ( opts->length == 0 )
+                    opts->length = seq_len;
+            }
+            else
+            {
+                if ( opts->length == 0 )
+                    opts->length = ( seq_len - opts->from );
+            }
+            if ( opts->from >= seq_len )
+            {
+                rc = RC( rcExe, rcNoTarg, rcListing, rcParam, rcInvalid );
+                LOGERR( klogInt, rc, "reference-start-point beyond reference-end!" );
+            }
+            else
+            {
+                if ( opts->from + opts->length > seq_len )
+                    opts->length = ( seq_len - opts->from );
+                OUTMSG(( ">%s|from %u|%u bases\n", name, opts->from, opts->from + opts->length -1 ));
+                rc = dump_reference_loop( opts, refobj );
+            }
+        }
+    }
+    return 0;
+}
+
+
+static rc_t dump_all_reference( fasta_options *opts, const ReferenceList* reflist )
+{
+    uint32_t count;
+    rc_t rc = ReferenceList_Count( reflist, &count );
+    if ( rc != 0 )
+        LOGERR( klogInt, rc, "ReferenceList_Count() failed!" );
+    else
+    {
+        uint32_t i;
+        for ( i = 0; i < count && rc == 0; ++i )
+        {
+            const ReferenceObj* refobj;
+            rc = ReferenceList_Get( reflist, &refobj, i );
+            if ( rc != 0 )
+                LOGERR( klogInt, rc, "ReferenceList_Get() failed!" );
+            else
+                rc = dump_reference( opts, refobj );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t foreach_refname( Args * args, fasta_options *opts, fasta_ctx *ctx, const char * path )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, OPTION_REFNAME, &count );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "ArgsOptionCount( REFNAME ) failed" );
+    }
+    else
+    {
+        const ReferenceList* reflist;
+
+        rc = ReferenceList_MakePath( &reflist, ctx->vdb_mgr, path,
+                        ereferencelist_usePrimaryIds, 0, NULL, 0 );
+        if ( rc != 0 )
+            LOGERR( klogInt, rc, "ReferenceList_MakePath() failed!" );
+        else
+        {
+            if ( count == 0 )
+            {
+                /* dump all references... */
+                rc = dump_all_reference( opts, reflist );
+            }
+            else
+            {
+                uint32_t i;
+                for ( i = 0; i < count && rc == 0; ++i )
+                {
+                    const char * refname;
+                    rc = ArgsOptionValue( args, OPTION_REFNAME, 0, &refname );
+                    if ( rc != 0 )
+                    {
+                        LOGERR( klogInt, rc, "ArgsOptionValue( REFNAME ) failed" );
+                    }
+                    else
+                    {
+                        const ReferenceObj* refobj;
+                        rc = ReferenceList_Find( reflist, &refobj, refname, string_size( refname ) );
+                        if ( rc != 0 )
+                            LOGERR( klogInt, rc, "ReferenceList_Find() failed" );
+                        else
+                            rc = dump_reference( opts, refobj );
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t foreach_argument( Args * args, fasta_options *opts, fasta_ctx *ctx )
+{
+    uint32_t count;
+    rc_t rc = ArgsParamCount( args, &count );
+    if ( rc != 0 )
+        LOGERR( klogInt, rc, "ArgsParamCount() failed" );
+    else
+    {
+        uint32_t idx;
+        if ( count < 1 )
+        {
+            rc = RC( rcExe, rcNoTarg, rcListing, rcParam, rcEmpty );
+            LOGERR( klogInt, rc, "no source-files given!" );
+        }
+        else
+        {
+            for ( idx = 0; idx < count && rc == 0; ++idx )
+            {
+                const char *param = NULL;
+                rc = ArgsParamValue( args, idx, &param );
+                if ( rc != 0 )
+                    LOGERR( klogInt, rc, "ArgsParamvalue() failed" );
+                else
+                {
+                    char *path = string_dup_measure ( param, NULL );
+                    if ( path == NULL )
+                    {
+                        rc = RC( rcExe, rcNoTarg, rcListing, rcMemory, rcExhausted );
+                        LOGERR( klogInt, rc, "allocating path to source-file failed!" );
+                    }
+                    else
+                    {
+
+#if TOOLS_USE_SRAPATH != 0
+                        if ( !is_this_a_filesystem_path( path ) )
+                        {
+                            rc = resolve_accession( ctx->dir, &path );
+                        }
+#endif
+
+                        if ( rc == 0 )
+                        {
+                            rc = foreach_refname( args, opts, ctx, path );
+                        }
+                        free( path );
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t fasta_main( Args * args, fasta_options *opts )
+{
+    rc_t rc;
+    fasta_ctx ctx;
+
+    memset( &ctx, 0, sizeof ctx );
+    rc = KDirectoryNativeDir( &ctx.dir );
+    if ( rc != 0 )
+        LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+    else
+    {
+        rc = VDBManagerMakeRead ( &ctx.vdb_mgr, ctx.dir );
+        if ( rc != 0 )
+            LOGERR( klogInt, rc, "VDBManagerMakeRead() failed" );
+        else
+        {
+            rc = AlignMgrMakeRead ( &ctx.almgr );
+            if ( rc != 0 )
+                LOGERR( klogInt, rc, "AlignMgrMake() failed" );
+            else
+            {
+                rc = foreach_argument( args, opts, &ctx );
+                AlignMgrRelease ( ctx.almgr );
+            }
+            VDBManagerRelease( ctx.vdb_mgr );
+        }
+        KDirectoryRelease( ctx.dir );
+    }
+    return rc;
+}
+
+/* =========================================================================================== */
+
+
+rc_t fasta_dump( int argc, char* argv[] )
+{
+    rc_t rc = KOutHandlerSet( write_to_FILE, stdout );
+    if ( rc != 0 )
+        LOGERR( klogInt, rc, "KOutHandlerSet() failed" );
+    else
+    {
+        Args * args;
+
+        KLogHandlerSetStdErr();
+        rc = ArgsMakeAndHandle( &args, argc, argv, 1,
+            MyOptions, sizeof MyOptions / sizeof MyOptions [ 0 ] );
+        if ( rc == 0 )
+        {
+            fasta_options opts;
+            rc = get_fasta_options( args, &opts );
+            if ( rc == 0 )
+            {
+                if ( opts.outfile != NULL )
+                {
+                    rc = set_stdout_to( opts.gzip,
+                                        opts.bzip,
+                                        opts.outfile,
+                                        32 * 1024 );
+                }
+
+                if ( rc == 0 )
+                {
+                    /* ============================== */
+                    rc = fasta_main( args, &opts );
+                    /* ============================== */
+                }
+
+                if ( opts.outfile != NULL )
+                    release_stdout_redirection();
+            }
+            ArgsWhack( args );
+        }
+    }
+    return rc;
+}
+
+
+static const char * outf_usage[]     = { "output to stdout if omitted", NULL };
+static const char * width_usage[]    = { "default = 80 bases", NULL };
+static const char * gzip_usage[]     = { "for file and stdout", NULL };
+static const char * bzip_usage[]     = { "for file and stdout", NULL };
+static const char * refname_usage[]  = { "multiple ref's permitted", NULL };
+static const char * from_usage[]     = { "zero-based", NULL };
+static const char * length_usage[]   = { NULL };
+
+rc_t CC fasta_dump_usage ( const Args * args )
+{
+    rc_t rc;
+    const char * fullname = "fastq-dump";
+    const char * progname = fullname;
+
+    if ( args == NULL )
+        rc = RC( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
+    else
+        rc = ArgsProgram( args, &fullname, &progname );
+
+    KOutMsg( "\nUsage:\n"
+              "  %s <path> [options]\n"
+              "\n", progname );
+
+    KOutMsg( "Options:\n" );
+
+    HelpOptionLine( ALIAS_OUTF,    OPTION_OUTF,    "output-file", outf_usage );
+    HelpOptionLine( ALIAS_WIDTH,   OPTION_WIDTH,   "bases per line", width_usage );
+    HelpOptionLine( ALIAS_GZIP,    OPTION_GZIP,    "output gzipped", gzip_usage );
+    HelpOptionLine( ALIAS_BZIP,    OPTION_BZIP,    "output bzipped", bzip_usage );
+    HelpOptionLine( ALIAS_REFNAME, OPTION_REFNAME, "reference to dump", refname_usage );
+    HelpOptionLine( ALIAS_FROM,    OPTION_FROM,    "start-offset", from_usage );
+    HelpOptionLine( ALIAS_LENGTH,  OPTION_LENGTH,  "length of sequence", length_usage );
+
+    HelpOptionsStandard ();
+    HelpVersion ( fullname, KAppVersion() );
+    return rc;
+}
diff --git a/tools/sra-dump/fasta_dump.h b/tools/sra-dump/fasta_dump.h
new file mode 100644
index 0000000..9d3fe8a
--- /dev/null
+++ b/tools/sra-dump/fasta_dump.h
@@ -0,0 +1,36 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_fasta_dump_hdr_
+#define _h_fasta_dump_hdr_
+
+
+bool fasta_dump_requested( int argc, char* argv[] );
+
+rc_t fasta_dump( int argc, char* argv[] );
+
+rc_t CC fasta_dump_usage ( const Args * args );
+
+#endif
diff --git a/tools/sra-dump/fastq-dump.vers b/tools/sra-dump/fastq-dump.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-dump/fastq-dump.vers
+++ b/tools/sra-dump/fastq-dump.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-dump/fastq-dump.vers.h b/tools/sra-dump/fastq-dump.vers.h
deleted file mode 100644
index 56c1ee4..0000000
--- a/tools/sra-dump/fastq-dump.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define FASTQ_DUMP_VERS 0x02010007
diff --git a/tools/sra-dump/fastq.c b/tools/sra-dump/fastq.c
index 29bb12b..f5a1f74 100644
--- a/tools/sra-dump/fastq.c
+++ b/tools/sra-dump/fastq.c
@@ -26,6 +26,7 @@
 #include <klib/log.h>
 #include <klib/out.h>
 #include <klib/container.h>
+#include <klib/text.h>
 #include <kapp/main.h>
 
 #include <sra/sradb.h>
@@ -39,12 +40,17 @@
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
+#include <errno.h>
+#include <strtol.h>
 
 #include "core.h"
 #include "fastq-dump.vers.h"
 #include "debug.h"
 
-typedef struct TAlignedRegion_struct {
+#define DATABUFFERINITSIZE 10240
+
+typedef struct TAlignedRegion_struct
+{
     const char* name;
     uint32_t name_len;
     /* 1-based, 0 - means not set */
@@ -52,12 +58,16 @@ typedef struct TAlignedRegion_struct {
     uint64_t to;
 } TAlignedRegion;
 
-typedef struct TMatepairDistance_struct {
+
+typedef struct TMatepairDistance_struct
+{
     uint64_t from;
     uint64_t to;
 } TMatepairDistance;
 
-struct FastqArgs_struct {
+
+struct FastqArgs_struct
+{
     bool is_platform_cs_native;
 
     int maxReads;
@@ -79,7 +89,7 @@ struct FastqArgs_struct {
     bool split_files;
     bool split_3;
     bool split_spot;
-    bool fasta;
+    uint64_t fasta;
     const char* file_extension;
     bool aligned;
     bool unaligned;
@@ -90,7 +100,9 @@ struct FastqArgs_struct {
     uint32_t mp_dist_qty;
 } FastqArgs;
 
-typedef enum DefNodeType_enum {
+
+typedef enum DefNodeType_enum
+{
     DefNode_Unknown = 0,
     DefNode_Text = 1,
     DefNode_Optional,
@@ -105,146 +117,180 @@ typedef enum DefNodeType_enum {
     DefNode_Last
 } DefNodeType;
 
-typedef struct DefNode_struct {
+
+typedef struct DefNode_struct
+{
     SLNode node;
     DefNodeType type;
-    union {
+    union
+    {
         SLList* optional;
         char* text;
     } data;
 } DefNode;
 
-typedef struct DeflineData_struct {
+
+typedef struct DeflineData_struct
+{
     rc_t rc;
     bool optional;
-    union {
+    union
+    {
         spotid_t* id;
-        struct {
+        struct
+        {
             const char* s;
             size_t sz;
         } str;
         uint32_t* u32;
-    } values[DefNode_Last];
+    } values[ DefNode_Last ];
     char* buf;
     size_t buf_sz;
     size_t* writ;
 } DeflineData;
 
-static
-bool CC Defline_Builder( SLNode *node, void *data )
+
+static bool CC Defline_Builder( SLNode *node, void *data )
 {
-    DefNode* n = (DefNode*)node;
-    DeflineData* d = (DeflineData*)data;
-    char s[256];
+    DefNode* n = ( DefNode* )node;
+    DeflineData* d = ( DeflineData* )data;
+    char s[ 256 ];
     size_t w;
     int x = 0;
 
-    s[0] = '\0';
-    switch(n->type) {
-        case DefNode_Optional:
+    s[ 0 ] = '\0';
+    switch ( n->type )
+    {
+        case DefNode_Optional :
             d->optional = true;
             w = *d->writ;
             *d->writ = 0;
             SLListDoUntil( n->data.optional, Defline_Builder, data );
-            x = (*d->writ == 0) ? 0 : 1;
+            x = ( *d->writ == 0 ) ? 0 : 1;
             d->optional = false;
             *d->writ = w;
-            if( x > 0 ) {
+            if ( x > 0 )
+            {
                 SLListDoUntil( n->data.optional, Defline_Builder, data );
             }
             break;
 
-        case DefNode_Text:
-            if( d->optional ) {
+        case DefNode_Text :
+            if ( d->optional )
+            {
                 break;
             }
             d->values[n->type].str.s = n->data.text;
-            d->values[n->type].str.sz = strlen(n->data.text);
-        case DefNode_Accession:
-        case DefNode_SpotName:
-        case DefNode_SpotGroup:
-        case DefNode_ReadName:
-            if( d->values[n->type].str.s != NULL ) {
-                x = d->values[n->type].str.sz;
-                if( x < sizeof(s) ) {
-                    strncpy(s, d->values[n->type].str.s, x);
-                    s[x] = '\0';
+            d->values[n->type].str.sz = strlen( n->data.text );
+
+        case DefNode_Accession :
+        case DefNode_SpotName :
+        case DefNode_SpotGroup :
+        case DefNode_ReadName :
+            if ( d->values[n->type].str.s != NULL )
+            {
+                x = d->values[ n->type ].str.sz;
+                if ( x < sizeof( s ) )
+                {
+                    strncpy( s, d->values[ n->type ].str.s, x );
+                    s[ x ] = '\0';
                     *d->writ = *d->writ + x;
-                } else {
-                    d->rc = RC(rcExe, rcNamelist, rcExecuting, rcBuffer, rcInsufficient);
+                }
+                else
+                {
+                    d->rc = RC( rcExe, rcNamelist, rcExecuting, rcBuffer, rcInsufficient );
                 }
             }
             break;
 
-        case DefNode_SpotId:
-            if( d->values[n->type].id != NULL && (!d->optional || *d->values[n->type].id > 0) ) {
-                x = snprintf(s, sizeof(s), "%u", *d->values[n->type].id);
-                if( x < 0 || x >= sizeof(s) ) {
-                    d->rc = RC(rcExe, rcNamelist, rcExecuting, rcBuffer, rcInsufficient);
-                } else {
+        case DefNode_SpotId :
+            if ( d->values[ n->type ].id != NULL &&
+                ( !d->optional || *d->values[ n->type ].id > 0 ) )
+            {
+                x = snprintf( s, sizeof( s ), "%u", *d->values[ n->type ].id );
+                if ( x < 0 || x >= sizeof( s ) )
+                {
+                    d->rc = RC( rcExe, rcNamelist, rcExecuting, rcBuffer, rcInsufficient );
+                }
+                else
+                {
                     *d->writ = *d->writ + x;
                 }
             }
             break;
 
-        case DefNode_ReadId:
-        case DefNode_SpotLen:
-        case DefNode_ReadLen:
-            if( d->values[n->type].u32 != NULL && (!d->optional || *d->values[n->type].u32 > 0) ) {
-                x = snprintf(s, sizeof(s), "%u", *d->values[n->type].u32);
-                if( x < 0 || x >= sizeof(s) ) {
-                    d->rc = RC(rcExe, rcNamelist, rcExecuting, rcBuffer, rcInsufficient);
-                } else {
+        case DefNode_ReadId :
+        case DefNode_SpotLen :
+        case DefNode_ReadLen :
+            if ( d->values[ n->type] .u32 != NULL &&
+                 ( !d->optional || *d->values[ n->type ].u32 > 0 ) )
+            {
+                x = snprintf( s, sizeof( s ), "%u", *d->values[ n->type ].u32 );
+                if ( x < 0 || x >= sizeof( s ) )
+                {
+                    d->rc = RC( rcExe, rcNamelist, rcExecuting, rcBuffer, rcInsufficient );
+                }
+                else
+                {
                     *d->writ = *d->writ + x;
                 }
             }
             break;
 
         default:
-            d->rc = RC(rcExe, rcNamelist, rcExecuting, rcId, rcInvalid);
-    }
-    if( d->rc == 0 && !d->optional && n->type != DefNode_Optional ) {
-        if( *d->writ < d->buf_sz ) {
-            strcat(d->buf, s);
-        } else {
-            d->rc = RC(rcExe, rcNamelist, rcExecuting, rcBuffer, rcInsufficient);
+            d->rc = RC( rcExe, rcNamelist, rcExecuting, rcId, rcInvalid );
+    } /* switch */
+
+    if ( d->rc == 0 && !d->optional && n->type != DefNode_Optional )
+    {
+        if ( *d->writ < d->buf_sz )
+        {
+            strcat( d->buf, s );
+        }
+        else
+        {
+            d->rc = RC( rcExe, rcNamelist, rcExecuting, rcBuffer, rcInsufficient );
         }
     }
     return d->rc != 0;
 }
 
-static
-rc_t Defline_Bind(DeflineData* data, const char* accession,
-                  spotid_t* spotId, const char* spot_name, size_t spotname_sz,
-                  const char* spot_group, size_t sgrp_sz, uint32_t* spot_len,
-                  uint32_t* readId, const char* read_name, INSDC_coord_len rlabel_sz, INSDC_coord_len* read_len)
-{
-    if( data == NULL ) {
-        return RC(rcExe, rcNamelist, rcExecuting, rcMemory, rcInsufficient);
-    }
-    data->values[DefNode_Unknown].str.s = NULL;
-    data->values[DefNode_Text].str.s = NULL;
-    data->values[DefNode_Optional].str.s = NULL;
-    data->values[DefNode_Accession].str.s = accession;
-    data->values[DefNode_Accession].str.sz = strlen(accession);
-    data->values[DefNode_SpotId].id = spotId;
-    data->values[DefNode_SpotName].str.s = spot_name;
-    data->values[DefNode_SpotName].str.sz = spotname_sz;
-    data->values[DefNode_SpotGroup].str.s = spot_group;
-    data->values[DefNode_SpotGroup].str.sz = sgrp_sz;
-    data->values[DefNode_SpotLen].u32 = spot_len;
-    data->values[DefNode_ReadId].u32 = readId;
-    data->values[DefNode_ReadName].str.s = read_name;
-    data->values[DefNode_ReadName].str.sz = rlabel_sz;
-    data->values[DefNode_ReadLen].u32 = read_len;
+
+static rc_t Defline_Bind( DeflineData* data, const char* accession,
+            spotid_t* spotId, const char* spot_name, size_t spotname_sz,
+            const char* spot_group, size_t sgrp_sz, uint32_t* spot_len,
+            uint32_t* readId, const char* read_name, INSDC_coord_len rlabel_sz,
+            INSDC_coord_len* read_len )
+{
+    if ( data == NULL )
+    {
+        return RC( rcExe, rcNamelist, rcExecuting, rcMemory, rcInsufficient );
+    }
+    data->values[ DefNode_Unknown ].str.s = NULL;
+    data->values[ DefNode_Text ].str.s = NULL;
+    data->values[ DefNode_Optional ].str.s = NULL;
+    data->values[ DefNode_Accession ].str.s = accession;
+    data->values[ DefNode_Accession ].str.sz = strlen( accession );
+    data->values[ DefNode_SpotId ].id = spotId;
+    data->values[ DefNode_SpotName ].str.s = spot_name;
+    data->values[ DefNode_SpotName ].str.sz = spotname_sz;
+    data->values[ DefNode_SpotGroup ].str.s = spot_group;
+    data->values[ DefNode_SpotGroup ].str.sz = sgrp_sz;
+    data->values[ DefNode_SpotLen ].u32 = spot_len;
+    data->values[ DefNode_ReadId ].u32 = readId;
+    data->values[ DefNode_ReadName ].str.s = read_name;
+    data->values[ DefNode_ReadName ].str.sz = rlabel_sz;
+    data->values[ DefNode_ReadLen ].u32 = read_len;
     return 0;
 }
 
-static
-rc_t Defline_Build(const SLList* def, DeflineData* data, char* buf, size_t buf_sz, size_t* writ)
+
+static rc_t Defline_Build( const SLList* def, DeflineData* data, char* buf,
+                           size_t buf_sz, size_t* writ )
 {
-    if( data == NULL ) {
-        return RC(rcExe, rcNamelist, rcExecuting, rcMemory, rcInsufficient);
+    if ( data == NULL )
+    {
+        return RC( rcExe, rcNamelist, rcExecuting, rcMemory, rcInsufficient );
     }
 
     data->rc = 0;
@@ -253,253 +299,287 @@ rc_t Defline_Build(const SLList* def, DeflineData* data, char* buf, size_t buf_s
     data->buf_sz = buf_sz;
     data->writ = writ;
 
-    data->buf[0] = '\0';
+    data->buf[ 0 ] = '\0';
     *data->writ = 0;
 
     SLListDoUntil( def, Defline_Builder, data );
     return data->rc;
 }
 
-static
-rc_t DeflineNode_Add(SLList* list, DefNode** node, DefNodeType type, const char* text, size_t text_sz)
+
+static rc_t DeflineNode_Add( SLList* list, DefNode** node,
+                            DefNodeType type, const char* text, size_t text_sz )
 {
     rc_t rc = 0;
 
-    *node = calloc(1, sizeof(**node));
-    if( *node == NULL ) {
-        rc = RC(rcExe, rcNamelist, rcConstructing, rcMemory, rcExhausted);
-    } else if(type == DefNode_Text && (text == NULL || text_sz == 0) ) {
-        rc = RC(rcExe, rcNamelist, rcConstructing, rcParam, rcInvalid);
-    } else {
-        (*node)->type = type;
-        if( type == DefNode_Text ) {
-            (*node)->data.text = strndup(text, text_sz);
-            if( (*node)->data.text == NULL ) {
-                rc = RC(rcExe, rcNamelist, rcConstructing, rcMemory, rcExhausted);
-                free(*node);
+    *node = calloc( 1, sizeof( **node ) );
+    if ( *node == NULL )
+    {
+        rc = RC( rcExe, rcNamelist, rcConstructing, rcMemory, rcExhausted );
+    }
+    else if ( type == DefNode_Text && ( text == NULL || text_sz == 0 ) )
+    {
+        rc = RC( rcExe, rcNamelist, rcConstructing, rcParam, rcInvalid );
+    }
+    else
+    {
+        ( *node )->type = type;
+        if ( type == DefNode_Text )
+        {
+            ( *node )->data.text = string_dup( text, text_sz );
+            if ( ( *node )->data.text == NULL )
+            {
+                rc = RC( rcExe, rcNamelist, rcConstructing, rcMemory, rcExhausted );
+                free( *node );
+            }
+        }
+        else if ( type == DefNode_Optional )
+        {
+            ( *node )->data.optional = malloc( sizeof( SLList ) );
+            if ( ( *node )->data.optional == NULL )
+            {
+                rc = RC( rcExe, rcNamelist, rcConstructing, rcMemory, rcExhausted );
+                free( *node );
             }
-        } else if( type == DefNode_Optional ) {
-            (*node)->data.optional = malloc(sizeof(SLList));
-            if( (*node)->data.optional == NULL ) {
-                rc = RC(rcExe, rcNamelist, rcConstructing, rcMemory, rcExhausted);
-                free(*node);
-            } else {
-                SLListInit((*node)->data.optional);
+            else
+            {
+                SLListInit( ( *node )->data.optional );
             }
         }
-        if( rc == 0 ) {
-            SLListPushTail(list, &(*node)->node);
+        if ( rc == 0 )
+        {
+            SLListPushTail( list, &( *node )->node );
         }
     }
     return rc;
 }
 
-static
-void Defline_Release(SLList* list);
 
-static
-void CC DeflineNode_Whack( SLNode* node, void* data )
+static void Defline_Release( SLList* list );
+
+
+static void CC DeflineNode_Whack( SLNode* node, void* data )
 {
-    if( node != NULL ) {
+    if ( node != NULL )
+    {
         DefNode* n = (DefNode*)node;
-        if( n->type == DefNode_Text ) {
-            free(n->data.text);
-        } else if( n->type == DefNode_Optional ) {
-            Defline_Release(n->data.optional);
+        if ( n->type == DefNode_Text )
+        {
+            free( n->data.text );
+        }
+        else if ( n->type == DefNode_Optional )
+        {
+            Defline_Release( n->data.optional );
         }
-        free(node);
+        free( node );
     }
 }
 
-static
-void Defline_Release( SLList* list )
+
+static void Defline_Release( SLList* list )
 {
-    if( list != NULL ) {
+    if ( list != NULL )
+    {
         SLListForEach( list, DeflineNode_Whack, NULL );
-        free(list);
+        free( list );
     }
 }
 
+
 #if _DEBUGGING
-static
-void CC Defline_Dump( SLNode* node, void* data )
+static void CC Defline_Dump( SLNode* node, void* data )
 {
-    DefNode* n = (DefNode*)node;
+    DefNode* n = ( DefNode* )node;
     const char* s = NULL, *t;
-    if( n->type == DefNode_Text ) {
+    if ( n->type == DefNode_Text )
+    {
         s = n->data.text;
     }
-    switch(n->type) {
-        case DefNode_Unknown:
-            t = "Unknown";
-            break;
-        case DefNode_Text:
-            t = "Text";
-            break;
-        case DefNode_Optional:
-            t = "Optional";
-            break;
-        case DefNode_Accession:
-            t = "Accession";
-            break;
-        case DefNode_SpotId:
-            t = "SpotId";
-            break;
-        case DefNode_SpotName:
-            t = "SpotName";
-            break;
-        case DefNode_SpotGroup:
-            t = "SpotGroup";
-            break;
-        case DefNode_SpotLen:
-            t = "SpotLen";
-            break;
-        case DefNode_ReadId:
-            t = "ReadId";
-            break;
-        case DefNode_ReadName:
-            t = "ReadName";
-            break;
-        case DefNode_ReadLen:
-            t = "ReadLen";
-            break;
-        default:
-            t = "ERROR";
-    }
-
-    SRA_DUMP_DBG(3, ("%s type %s", data, t));
-    if( s ) {
-        SRA_DUMP_DBG(3, (": '%s'", s));
+    switch ( n->type )
+    {
+        case DefNode_Unknown :      t = "Unknown";   break;
+        case DefNode_Text :         t = "Text";      break;
+        case DefNode_Optional :     t = "Optional";  break;
+        case DefNode_Accession :    t = "Accession"; break;
+        case DefNode_SpotId :       t = "SpotId";    break;
+        case DefNode_SpotName :     t = "SpotName";  break;
+        case DefNode_SpotGroup :    t = "SpotGroup"; break;
+        case DefNode_SpotLen :      t = "SpotLen";   break;
+        case DefNode_ReadId :       t = "ReadId";    break;
+        case DefNode_ReadName :     t = "ReadName";  break;
+        case DefNode_ReadLen :      t = "ReadLen";   break;
+        default :  t = "ERROR";
+    }
+
+    SRA_DUMP_DBG( 3, ( "%s type %s", data, t ) );
+    if ( s )
+    {
+        SRA_DUMP_DBG( 3, ( ": '%s'", s ) );
     }
-    SRA_DUMP_DBG(3, ("\n"));
-    if( n->type == DefNode_Optional ) {
+    SRA_DUMP_DBG( 3, ( "\n" ) );
+    if ( n->type == DefNode_Optional )
+    {
         SLListForEach( n->data.optional, Defline_Dump, "+-->" );
     }
 }
 #endif
 
-static
-rc_t Defline_Parse(SLList** def, const char* line)
+
+static rc_t Defline_Parse( SLList** def, const char* line )
 {
     rc_t rc = 0;
     size_t i, sz, text = 0, opt_vars = 0;
     DefNode* node;
     SLList* list = NULL;
 
-    if( def == NULL || line == NULL ) {
-        return RC(rcExe, rcNamelist, rcConstructing, rcParam, rcInvalid);
+    if ( def == NULL || line == NULL )
+    {
+        return RC( rcExe, rcNamelist, rcConstructing, rcParam, rcInvalid );
     }
-    *def = malloc(sizeof(SLList));
-    if( *def  == NULL ) {
-        return RC(rcExe, rcNamelist, rcConstructing, rcMemory, rcExhausted);
+    *def = malloc( sizeof( SLList ) );
+    if ( *def  == NULL )
+    {
+        return RC( rcExe, rcNamelist, rcConstructing, rcMemory, rcExhausted );
     }
-    sz = strlen(line);
+    sz = strlen( line );
     list = *def;
-    SLListInit(list);
+    SLListInit( list );
 
-    for(i = 0; rc == 0 && i < sz; i++ ) {
-        if( line[i] == '[' ) {
-            if( (i + 1) < sz && line[i + 1] == '[' ) {
+    for ( i = 0; rc == 0 && i < sz; i++ )
+    {
+        if ( line[ i ] == '[' )
+        {
+            if ( ( i + 1 ) < sz && line[ i + 1 ] == '[' )
+            {
                 i++;
-            } else {
-                if( list != *def ) {
-                    rc = RC(rcExe, rcNamelist, rcConstructing, rcFormat, rcIncorrect);
-                } else if( i > text ) {
-                    rc = DeflineNode_Add(list, &node, DefNode_Text, &line[text], i - text);
-                }
-                if( rc == 0 && (rc = DeflineNode_Add(list, &node, DefNode_Optional, NULL, 0)) == 0 ) {
-                    opt_vars = 0;
-                    list = node->data.optional;
-                    text = i + 1;
+            }
+            else
+            {
+                if ( list != *def )
+                {
+                    rc = RC( rcExe, rcNamelist, rcConstructing, rcFormat, rcIncorrect );
+                }
+                else if ( i > text )
+                {
+                    rc = DeflineNode_Add( list, &node, DefNode_Text, &line[text], i - text );
+                }
+                if ( rc == 0 )
+                {
+                    rc = DeflineNode_Add( list, &node, DefNode_Optional, NULL, 0 );
+                    if ( rc == 0 )
+                    {
+                        opt_vars = 0;
+                        list = node->data.optional;
+                        text = i + 1;
+                    }
                 }
             }
-        } else if( line[i] == ']' ) {
-            if( (i + 1) < sz && line[i + 1] == ']' ) {
+        }
+        else if ( line[ i ] == ']' )
+        {
+            if ( ( i + 1 ) < sz && line[ i + 1 ] == ']' )
+            {
                 i++;
-            } else {
-                if( list == *def ) {
-                    rc = RC(rcExe, rcNamelist, rcConstructing, rcFormat, rcIncorrect);
-                } else {
-                    if( opt_vars < 1 ) {
-                        rc = RC(rcExe, rcNamelist, rcConstructing, rcConstraint, rcEmpty);
-                    } else if( i > text ) {
-                        rc = DeflineNode_Add(list, &node, DefNode_Text, &line[text], i - text);
+            }
+            else
+            {
+                if ( list == *def )
+                {
+                    rc = RC( rcExe, rcNamelist, rcConstructing, rcFormat, rcIncorrect );
+                }
+                else
+                {
+                    if ( opt_vars < 1 )
+                    {
+                        rc = RC( rcExe, rcNamelist, rcConstructing, rcConstraint, rcEmpty );
+                    }
+                    else if ( i > text )
+                    {
+                        rc = DeflineNode_Add( list, &node, DefNode_Text, &line[text], i - text );
                     }
                     list = *def;
                     text = i + 1;
                 }
             }
-        } else if( line[i] == '$' ) {
-            if( (i + 1) < sz && line[i + 1] == '$' ) {
+        }
+        else if ( line[ i ] == '$' )
+        {
+            if ( ( i + 1 ) < sz && line[ i + 1 ] == '$' )
+            {
                 i++;
-            } else {
+            }
+            else
+            {
                 DefNodeType type = DefNode_Unknown;
-                switch(line[++i]) {
-                    case 'a':
-                        switch(line[++i]) {
-                            case 'c':
-                                type = DefNode_Accession;
-                                break;
+                switch ( line[ ++i] )
+                {
+                    case 'a' :
+                        switch( line[ ++i ] )
+                        {
+                            case 'c': type = DefNode_Accession; break;
                         }
                         break;
-                    case 's':
-                        switch(line[++i]) {
-                            case 'i':
-                                type = DefNode_SpotId;
-                                break;
-                            case 'n':
-                                type = DefNode_SpotName;
-                                break;
-                            case 'g':
-                                type = DefNode_SpotGroup;
-                                break;
-                            case 'l':
-                                type = DefNode_SpotLen;
-                                break;
+
+                    case 's' :
+                        switch ( line[ ++i ] )
+                        {
+                            case 'i': type = DefNode_SpotId; break;
+                            case 'n': type = DefNode_SpotName; break;
+                            case 'g': type = DefNode_SpotGroup; break;
+                            case 'l': type = DefNode_SpotLen; break;
                         }
                         break;
-                    case 'r':
-                        switch(line[++i]) {
-                            case 'i':
-                                type = DefNode_ReadId;
-                                break;
-                            case 'n':
-                                type = DefNode_ReadName;
-                                break;
-                            case 'l':
-                                type = DefNode_ReadLen;
-                                break;
+                    case 'r' :
+                        switch( line[ ++i ] )
+                        {
+                            case 'i': type = DefNode_ReadId; break;
+                            case 'n': type = DefNode_ReadName; break;
+                            case 'l': type = DefNode_ReadLen; break;
                         }
                         break;
                 }
-                if( type == DefNode_Unknown ) {
-                    rc = RC(rcExe, rcNamelist, rcConstructing, rcName, rcUnrecognized);
-                } else {
-                    if( (i - 2) > text ) {
-                        rc = DeflineNode_Add(list, &node, DefNode_Text, &line[text], i - text - 2);
+                if ( type == DefNode_Unknown )
+                {
+                    rc = RC( rcExe, rcNamelist, rcConstructing, rcName, rcUnrecognized );
+                }
+                else
+                {
+                    if ( ( i - 2 ) > text )
+                    {
+                        rc = DeflineNode_Add( list, &node, DefNode_Text, &line[ text ], i - text - 2 );
                     }
-                    if( rc == 0 && (rc = DeflineNode_Add(list, &node, type, NULL, 0)) == 0 ) {
-                        opt_vars++;
-                        text = i + 1;
+                    if ( rc == 0 )
+                    {
+                        rc = DeflineNode_Add( list, &node, type, NULL, 0 );
+                        if ( rc == 0 )
+                        {
+                            opt_vars++;
+                            text = i + 1;
+                        }
                     }
                 }
             }
         }
     }
-    if( rc == 0 ) {
-        if( list != *def ) {
-            rc = RC(rcExe, rcNamelist, rcConstructing, rcFormat, rcInvalid);
-        } else if( i > text ) {
-            rc = DeflineNode_Add(list, &node, DefNode_Text, &line[text], i - text);
+    if ( rc == 0 )
+    {
+        if ( list != *def )
+        {
+            rc = RC( rcExe, rcNamelist, rcConstructing, rcFormat, rcInvalid );
+        }
+        else if ( i > text )
+        {
+            rc = DeflineNode_Add( list, &node, DefNode_Text, &line[ text ], i - text );
         }
     }
-    if( rc != 0 ) {
+    if ( rc != 0 )
+    {
         i = i < sz ? i : sz;
-        PLOGERR(klogErr,(klogErr, rc, "$(l1) -->$(c)<-- $(l2)",
-                            "l1=%.*s,c=%c,l2=%.*s", i - 1, line, line[i - 1], sz - i, &line[i]));
+        PLOGERR( klogErr, ( klogErr, rc, "$(l1) -->$(c)<-- $(l2)",
+                 "l1=%.*s,c=%c,l2=%.*s", i - 1, line, line[ i - 1 ], sz - i, &line[ i ] ) );
     }
 #if _DEBUGGING
-    SRA_DUMP_DBG(3, ("| defline\n"));
+    SRA_DUMP_DBG( 3, ( "| defline\n" ) );
     SLListForEach( *def, Defline_Dump, "+->" );
 #endif
     return rc;
@@ -507,31 +587,41 @@ rc_t Defline_Parse(SLList** def, const char* line)
 
 /* ### ALIGNMENT_COUNT based filtering ##################################################### */
 
-typedef struct AlignedFilter_struct {
+typedef struct AlignedFilter_struct
+{
     const SRAColumn* col;
     bool aligned;
     bool unaligned;
 } AlignedFilter;
 
-static
-rc_t AlignedFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+
+static rc_t AlignedFilter_GetKey( const SRASplitter* cself, const char** key,
+                                  spotid_t spot, readmask_t* readmask )
 {
     rc_t rc = 0;
-    AlignedFilter* self = (AlignedFilter*)cself;
+    AlignedFilter* self = ( AlignedFilter* )cself;
 
-    if( self == NULL || key == NULL ) {
-        rc = RC(rcSRA, rcNode, rcExecuting, rcParam, rcNull);
-    } else {
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
         *key = "";
-        if( self->col != NULL ) {
+        if ( self->col != NULL )
+        {
             const uint8_t* ac = NULL;
             bitsz_t o = 0, sz = 0;
-            if( (rc = SRAColumnRead(self->col, spot, (const void **)&ac, &o, &sz)) == 0 ) {
-                sz = sz / 8 / sizeof(*ac);
-                for(o = 0; o < sz; o++) {
-                    if( (self->aligned   && !self->unaligned && ac[o] == 0) ||
-                        (self->unaligned && !self->aligned   && ac[o] != 0) ) {
-                        unset_readmask(readmask, o);
+            rc = SRAColumnRead( self->col, spot, (const void **)&ac, &o, &sz );
+            if ( rc == 0 )
+            {
+                sz = sz / 8 / sizeof( *ac );
+                for( o = 0; o < sz; o++ )
+                {
+                    if ( ( self->aligned   && !self->unaligned && ac[ o ] == 0 ) ||
+                         ( self->unaligned && !self->aligned   && ac[ o ] != 0 ) )
+                    {
+                        unset_readmask( readmask, o );
                     }
                 }
             }
@@ -540,27 +630,37 @@ rc_t AlignedFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t s
     return rc;
 }
 
-typedef struct AlignedFilterFactory_struct {
+
+typedef struct AlignedFilterFactory_struct
+{
     const SRATable* table;
     const SRAColumn* col;
     bool aligned;
     bool unaligned;
 } AlignedFilterFactory;
 
-static
-rc_t AlignedFilterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t AlignedFilterFactory_Init( const SRASplitterFactory* cself )
 {
     rc_t rc = 0;
-    AlignedFilterFactory* self = (AlignedFilterFactory*)cself;
-
-    if( self == NULL ) {
-        rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
-    } else {
-        if( (rc = SRATableOpenColumnRead(self->table, &self->col, "ALIGNMENT_COUNT", vdb_uint8_t)) != 0 ) {
-            if( GetRCState(rc) == rcNotFound ) {
-                LOGMSG(klogWarn, "Column ALIGNMENT_COUNT was not found, param ignored");
+    AlignedFilterFactory* self = ( AlignedFilterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRATableOpenColumnRead( self->table, &self->col, "ALIGNMENT_COUNT", vdb_uint8_t );
+        if ( rc != 0 )
+        {
+            if ( GetRCState( rc ) == rcNotFound )
+            {
+                LOGMSG( klogWarn, "Column ALIGNMENT_COUNT was not found, param ignored" );
                 rc = 0;
-            } else if( GetRCState(rc) == rcExists ) {
+            }
+            else if ( GetRCState( rc ) == rcExists )
+            {
                 rc = 0;
             }
         }
@@ -568,56 +668,73 @@ rc_t AlignedFilterFactory_Init(const SRASplitterFactory* cself)
     return rc;
 }
 
-static
-rc_t AlignedFilterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t AlignedFilterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
 {
     rc_t rc = 0;
-    AlignedFilterFactory* self = (AlignedFilterFactory*)cself;
+    AlignedFilterFactory* self = ( AlignedFilterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcSRA, rcType, rcExecuting, rcParam, rcNull);
-    } else {
-        if( (rc = SRASplitter_Make(splitter, sizeof(AlignedFilter), AlignedFilter_GetKey, NULL, NULL, NULL)) == 0 ) {
-            ((AlignedFilter*)(*splitter))->col = self->col;
-            ((AlignedFilter*)(*splitter))->aligned = self->aligned;
-            ((AlignedFilter*)(*splitter))->unaligned = self->unaligned;
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof( AlignedFilter ),
+                               AlignedFilter_GetKey, NULL, NULL, NULL );
+        if ( rc == 0 )
+        {
+            ( (AlignedFilter*)(*splitter) )->col = self->col;
+            ( (AlignedFilter*)(*splitter) )->aligned = self->aligned;
+            ( (AlignedFilter*)(*splitter) )->unaligned = self->unaligned;
         }
     }
     return rc;
 }
 
-static
-void AlignedFilterFactory_Release(const SRASplitterFactory* cself)
+
+static void AlignedFilterFactory_Release( const SRASplitterFactory* cself )
 {
-    if( cself != NULL ) {
-        AlignedFilterFactory* self = (AlignedFilterFactory*)cself;
-        SRAColumnRelease(self->col);
+    if ( cself != NULL )
+    {
+        AlignedFilterFactory* self = ( AlignedFilterFactory* )cself;
+        SRAColumnRelease( self->col );
     }
 }
 
-static
-rc_t AlignedFilterFactory_Make(const SRASplitterFactory** cself, const SRATable* table, bool aligned, bool unaligned)
+
+static rc_t AlignedFilterFactory_Make( const SRASplitterFactory** cself,
+                    const SRATable* table, bool aligned, bool unaligned )
 {
     rc_t rc = 0;
     AlignedFilterFactory* obj = NULL;
 
-    if( cself == NULL || table == NULL ) {
-        rc = RC(rcSRA, rcType, rcAllocating, rcParam, rcNull);
-    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
-                                             AlignedFilterFactory_Init,
-                                             AlignedFilterFactory_NewObj,
-                                             AlignedFilterFactory_Release)) == 0 ) {
-        obj = (AlignedFilterFactory*)*cself;
-        obj->table = table;
-        obj->aligned = aligned;
-        obj->unaligned = unaligned;
+    if ( cself == NULL || table == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcAllocating, rcParam, rcNull );
+    }
+    else
+    {
+        SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+                                 AlignedFilterFactory_Init,
+                                 AlignedFilterFactory_NewObj,
+                                 AlignedFilterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = ( AlignedFilterFactory* )*cself;
+            obj->table = table;
+            obj->aligned = aligned;
+            obj->unaligned = unaligned;
+        }
     }
     return rc;
 }
 
+
 /* ### alignment region filtering ##################################################### */
 
-typedef struct AlignRegionFilter_struct {
+typedef struct AlignRegionFilter_struct
+{
     const SRAColumn* col_pos;
     const SRAColumn* col_name;
     const SRAColumn* col_seqid;
@@ -625,65 +742,86 @@ typedef struct AlignRegionFilter_struct {
     uint32_t alregion_qty;
 } AlignRegionFilter;
 
-static
-rc_t AlignRegionFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+
+static rc_t AlignRegionFilter_GetKey( const SRASplitter* cself, const char** key,
+                                      spotid_t spot, readmask_t* readmask )
 {
     rc_t rc = 0;
-    AlignRegionFilter* self = (AlignRegionFilter*)cself;
+    AlignRegionFilter* self = ( AlignRegionFilter* )cself;
 
-    if( self == NULL || key == NULL ) {
-        rc = RC(rcSRA, rcNode, rcExecuting, rcParam, rcNull);
-    } else {
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
         *key = "";
-        reset_readmask(readmask);
-        if( self->col_name || self->col_seqid ) {
+        reset_readmask( readmask );
+        if ( self->col_name || self->col_seqid )
+        {
             bool match = false;
             uint32_t i;
             const char* nm, *si;
             bitsz_t o, nm_len = 0, si_len = 0;
 
-            if( self->col_name ) {
-                rc = SRAColumnRead(self->col_name, spot, (const void **)&nm, &o, &nm_len);
+            if ( self->col_name )
+            {
+                rc = SRAColumnRead( self->col_name, spot, (const void **)&nm, &o, &nm_len );
                 nm_len /= 8;
             }
-            if( rc == 0 && self->col_seqid ) {
-                rc = SRAColumnRead(self->col_seqid, spot, (const void **)&si, &o, &si_len);
+            if ( rc == 0 && self->col_seqid )
+            {
+                rc = SRAColumnRead( self->col_seqid, spot, (const void **)&si, &o, &si_len );
                 si_len /= 8;
             }
-            for(i = 0; rc == 0 && i < self->alregion_qty; i++) {
-                if( (self->alregion[i].name_len == nm_len && 
-                     strncasecmp(self->alregion[i].name, nm, nm_len) == 0) ||
-                     (self->alregion[i].name_len == si_len && 
-                     strncasecmp(self->alregion[i].name, si, si_len) == 0)) {
-                    if( self->col_pos ) {
+            for ( i = 0; rc == 0 && i < self->alregion_qty; i++ )
+            {
+                if ( ( self->alregion[i].name_len == nm_len && 
+                       strncasecmp( self->alregion[ i ].name, nm, nm_len ) == 0 ) ||
+                     ( self->alregion[i].name_len == si_len && 
+                       strncasecmp(self->alregion[i].name, si, si_len) == 0 ) )
+                {
+                    if ( self->col_pos )
+                    {
                         INSDC_coord_zero* pos;
                         bitsz_t nreads, j;
-                        if( (rc = SRAColumnRead(self->col_pos, spot, (const void **)&pos, &o, &nreads)) == 0 ) {
+                        rc = SRAColumnRead( self->col_pos, spot, ( const void ** )&pos, &o, &nreads );
+                        if ( rc == 0 )
+                        {
                             nreads = nreads / sizeof(*pos) / 8;
-                            for(i = 0; !match && i < self->alregion_qty; i++) {
-                                for(j = 0; j < nreads; j++) {
-                                    if( self->alregion[i].from <= pos[j] && pos[j] <= self->alregion[i].to ) {
+                            for ( i = 0; !match && i < self->alregion_qty; i++ )
+                            {
+                                for ( j = 0; j < nreads; j++ )
+                                {
+                                    if ( self->alregion[i].from <= pos[j] &&
+                                         pos[j] <= self->alregion[i].to )
+                                    {
                                         match = true;
                                         break;
                                     }
                                 }
                             }
                         }
-                    } else {
+                    }
+                    else
+                    {
                         match = true;
                     }
                     break;
                 }
             }
-            if( !match ) {
-                clear_readmask(readmask);
+            if ( !match )
+            {
+                clear_readmask( readmask );
             }
         }
     }
     return rc;
 }
 
-typedef struct AlignRegionFilterFactory_struct {
+
+typedef struct AlignRegionFilterFactory_struct
+{
     const SRATable* table;
     const SRAColumn* col_pos;
     const SRAColumn* col_name;
@@ -692,54 +830,75 @@ typedef struct AlignRegionFilterFactory_struct {
     uint32_t alregion_qty;
 } AlignRegionFilterFactory;
 
-static
-rc_t AlignRegionFilterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t AlignRegionFilterFactory_Init( const SRASplitterFactory* cself )
 {
     rc_t rc = 0;
-    AlignRegionFilterFactory* self = (AlignRegionFilterFactory*)cself;
+    AlignRegionFilterFactory* self = ( AlignRegionFilterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
-    } else {
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
 
 #define COLNF(v,n,t) (!(rc == 0 && ((rc = SRATableOpenColumnRead(self->table, &v, n, t)) == 0 || \
                        GetRCState(rc) == rcExists)) && GetRCState(rc) == rcNotFound)
 
-        if( COLNF(self->col_name, "REF_NAME", vdb_ascii_t) ) {
-            SRAColumnRelease(self->col_name);
+        if ( COLNF( self->col_name, "REF_NAME", vdb_ascii_t ) )
+        {
+            SRAColumnRelease( self->col_name );
             self->col_name = NULL;
             rc = 0;
         }
-        if( COLNF(self->col_seqid, "REF_SEQ_ID", vdb_ascii_t) ) {
-            SRAColumnRelease(self->col_seqid);
+
+        if ( COLNF( self->col_seqid, "REF_SEQ_ID", vdb_ascii_t ) )
+        {
+            SRAColumnRelease( self->col_seqid );
             self->col_seqid = NULL;
             rc = 0;
         }
-        if( self->col_name == NULL && self->col_seqid == NULL ) {
-            LOGMSG(klogWarn, "None of columns REF_NAME or REF_SEQ_ID was found, no region filtering");
-        } else {
+
+        if ( self->col_name == NULL && self->col_seqid == NULL )
+        {
+            LOGMSG( klogWarn, "None of columns REF_NAME or REF_SEQ_ID was found, no region filtering" );
+        }
+        else
+        {
             bool range_used = false;
             uint32_t i;
             /* see if there are any actual ranges set and open col only if yes */
-            for(i = 0; i < self->alregion_qty; i++) {
-                if( self->alregion[i].from != 0 || self->alregion[i].to != 0 ) {
+            for ( i = 0; i < self->alregion_qty; i++ )
+            {
+                if ( self->alregion[ i ].from != 0 || self->alregion[ i ].to != 0 )
+                {
                     range_used = true;
                     break;
                 }
             }
-            if( range_used ) {
-                if( COLNF(self->col_pos, "REF_POS", "INSDC:coord:zero") ) {
-                    LOGMSG(klogWarn, "Column REF_POS is not found, no region position filtering");
+            if ( range_used )
+            {
+                if ( COLNF( self->col_pos, "REF_POS", "INSDC:coord:zero" ) )
+                {
+                    LOGMSG( klogWarn, "Column REF_POS is not found, no region position filtering" );
                     rc = 0;
-                } else {
-                    for(i = 0; i < self->alregion_qty; i++) {
-                        if( self->alregion[i].from > 0 ) {
-                            self->alregion[i].from--;
+                }
+                else
+                {
+                    for ( i = 0; i < self->alregion_qty; i++ )
+                    {
+                        if ( self->alregion[ i ].from > 0 )
+                        {
+                            self->alregion[ i ].from--;
+                        }
+                        if ( self->alregion[ i ].to > 0 )
+                        {
+                            self->alregion[ i ].to--;
                         }
-                        if( self->alregion[i].to > 0 ) {
-                            self->alregion[i].to--;
-                        } else if( self->alregion[i].to == 0 ) {
-                            self->alregion[i].to = ~0;
+                        else if ( self->alregion[ i ].to == 0 )
+                        {
+                            self->alregion[ i ].to = ~0;
                         }
                     }
                 }
@@ -750,89 +909,115 @@ rc_t AlignRegionFilterFactory_Init(const SRASplitterFactory* cself)
     return rc;
 }
 
-static
-rc_t AlignRegionFilterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t AlignRegionFilterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
 {
     rc_t rc = 0;
-    AlignRegionFilterFactory* self = (AlignRegionFilterFactory*)cself;
+    AlignRegionFilterFactory* self = ( AlignRegionFilterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcSRA, rcType, rcExecuting, rcParam, rcNull);
-    } else {
-        if( (rc = SRASplitter_Make(splitter, sizeof(AlignRegionFilter), AlignRegionFilter_GetKey, NULL, NULL, NULL)) == 0 ) {
-            ((AlignRegionFilter*)(*splitter))->col_pos = self->col_pos;
-            ((AlignRegionFilter*)(*splitter))->col_name = self->col_name;
-            ((AlignRegionFilter*)(*splitter))->col_seqid = self->col_seqid;
-            ((AlignRegionFilter*)(*splitter))->alregion = self->alregion;
-            ((AlignRegionFilter*)(*splitter))->alregion_qty = self->alregion_qty;
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof( AlignRegionFilter ),
+                               AlignRegionFilter_GetKey, NULL, NULL, NULL );
+        if ( rc == 0 )
+        {
+            ( (AlignRegionFilter*)(*splitter) )->col_pos = self->col_pos;
+            ( (AlignRegionFilter*)(*splitter) )->col_name = self->col_name;
+            ( (AlignRegionFilter*)(*splitter) )->col_seqid = self->col_seqid;
+            ( (AlignRegionFilter*)(*splitter) )->alregion = self->alregion;
+            ( (AlignRegionFilter*)(*splitter) )->alregion_qty = self->alregion_qty;
         }
     }
     return rc;
 }
 
-static
-void AlignRegionFilterFactory_Release(const SRASplitterFactory* cself)
+
+static void AlignRegionFilterFactory_Release( const SRASplitterFactory* cself )
 {
-    if( cself != NULL ) {
-        AlignRegionFilterFactory* self = (AlignRegionFilterFactory*)cself;
-        SRAColumnRelease(self->col_pos);
-        SRAColumnRelease(self->col_name);
-        SRAColumnRelease(self->col_seqid);
+    if ( cself != NULL )
+    {
+        AlignRegionFilterFactory* self = ( AlignRegionFilterFactory* )cself;
+        SRAColumnRelease( self->col_pos );
+        SRAColumnRelease( self->col_name );
+        SRAColumnRelease( self->col_seqid );
     }
 }
 
-static
-rc_t AlignRegionFilterFactory_Make(const SRASplitterFactory** cself, const SRATable* table,
-                                   TAlignedRegion* alregion, uint32_t alregion_qty)
+
+static rc_t AlignRegionFilterFactory_Make( const SRASplitterFactory** cself,
+            const SRATable* table, TAlignedRegion* alregion, uint32_t alregion_qty )
 {
     rc_t rc = 0;
     AlignRegionFilterFactory* obj = NULL;
 
-    if( cself == NULL || table == NULL ) {
-        rc = RC(rcSRA, rcType, rcAllocating, rcParam, rcNull);
-    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
-                                             AlignRegionFilterFactory_Init,
-                                             AlignRegionFilterFactory_NewObj,
-                                             AlignRegionFilterFactory_Release)) == 0 ) {
-        obj = (AlignRegionFilterFactory*)*cself;
-        obj->table = table;
-        obj->alregion = alregion;
-        obj->alregion_qty = alregion_qty;
+    if ( cself == NULL || table == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcAllocating, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+                                      AlignRegionFilterFactory_Init,
+                                      AlignRegionFilterFactory_NewObj,
+                                      AlignRegionFilterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = ( AlignRegionFilterFactory* )*cself;
+            obj->table = table;
+            obj->alregion = alregion;
+            obj->alregion_qty = alregion_qty;
+        }
     }
     return rc;
 }
 
 /* ### alignment meta-pair distance filtering ##################################################### */
 
-typedef struct AlignPairDistanceFilter_struct {
+typedef struct AlignPairDistanceFilter_struct
+{
     const SRAColumn* col_tlen;
     bool mp_dist_unknown;
     const TMatepairDistance* mp_dist;
     uint32_t mp_dist_qty;
 } AlignPairDistanceFilter;
 
-static
-rc_t AlignPairDistanceFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+
+static rc_t AlignPairDistanceFilter_GetKey( const SRASplitter* cself,
+                const char** key, spotid_t spot, readmask_t* readmask )
 {
     rc_t rc = 0;
-    AlignPairDistanceFilter* self = (AlignPairDistanceFilter*)cself;
+    AlignPairDistanceFilter* self = ( AlignPairDistanceFilter* )cself;
 
-    if( self == NULL || key == NULL ) {
-        rc = RC(rcSRA, rcNode, rcExecuting, rcParam, rcNull);
-    } else {
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcSRA, rcNode, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
         *key = "";
-        reset_readmask(readmask);
-        if( self->col_tlen ) {
+        reset_readmask( readmask );
+        if ( self->col_tlen )
+        {
             uint32_t i, j;
             bitsz_t o, nreads;
             int32_t* tlen;
-            if( (rc = SRAColumnRead(self->col_tlen, spot, (const void **)&tlen, &o, &nreads)) == 0 ) {
+            rc = SRAColumnRead( self->col_tlen, spot, (const void **)&tlen, &o, &nreads );
+            if ( rc == 0 )
+            {
                 nreads = nreads / sizeof(*tlen) / 8;
-                for(i = 0; i < self->mp_dist_qty; i++) {
-                    for(j = 0; j < nreads; j++) {
-                        if( (tlen[j] == 0 && !self->mp_dist_unknown) ||
-                            (tlen[j] != 0 && (tlen[j] < self->mp_dist[i].from || self->mp_dist[i].to < tlen[j])) ) {
-                            unset_readmask(readmask, j);
+                for ( i = 0; i < self->mp_dist_qty; i++ )
+                {
+                    for ( j = 0; j < nreads; j++ )
+                    {
+                        if ( ( tlen[ j ] == 0 && !self->mp_dist_unknown) ||
+                             ( tlen[ j ] != 0 && 
+                               ( tlen[ j ] < self->mp_dist[ i ].from || self->mp_dist[ i ].to < tlen[ j ] ) ) )
+                        {
+                            unset_readmask( readmask, j );
                         }
                     }
                 }
@@ -842,7 +1027,9 @@ rc_t AlignPairDistanceFilter_GetKey(const SRASplitter* cself, const char** key,
     return rc;
 }
 
-typedef struct AlignPairDistanceFilterFactory_struct {
+
+typedef struct AlignPairDistanceFilterFactory_struct
+{
     const SRATable* table;
     const SRAColumn* col_tlen;
     bool mp_dist_unknown;
@@ -850,26 +1037,33 @@ typedef struct AlignPairDistanceFilterFactory_struct {
     uint32_t mp_dist_qty;
 } AlignPairDistanceFilterFactory;
 
-static
-rc_t AlignPairDistanceFilterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t AlignPairDistanceFilterFactory_Init( const SRASplitterFactory* cself )
 {
     rc_t rc = 0;
-    AlignPairDistanceFilterFactory* self = (AlignPairDistanceFilterFactory*)cself;
-
-    if( self == NULL ) {
-        rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
-    } else {
-        if( !((rc = SRATableOpenColumnRead(self->table, &self->col_tlen, "TEMPLATE_LEN", "I32")) == 0 ||
-             GetRCState(rc) == rcExists) && GetRCState(rc) == rcNotFound ) {
-            LOGMSG(klogWarn, "Column TLEN was not found, no distance filtering");
+    AlignPairDistanceFilterFactory* self = ( AlignPairDistanceFilterFactory* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRATableOpenColumnRead( self->table, &self->col_tlen, "TEMPLATE_LEN", "I32" );
+        if( !( rc == 0 || GetRCState( rc ) == rcExists ) && GetRCState( rc ) == rcNotFound )
+        {
+            LOGMSG( klogWarn, "Column TLEN was not found, no distance filtering" );
             self->col_tlen = NULL;
             rc = 0;
         }
-        if( rc == 0 ) {
+        if ( rc == 0 )
+        {
             uint32_t i;
-            for(i = 0; i < self->mp_dist_qty; i++ ) {
-                if( self->mp_dist[i].to == 0 ) {
-                    self->mp_dist[i].to = ~0;
+            for ( i = 0; i < self->mp_dist_qty; i++ )
+            {
+                if ( self->mp_dist[ i ].to == 0 )
+                {
+                    self->mp_dist[ i ].to = ~0;
                 }
             }
         }
@@ -877,1093 +1071,1599 @@ rc_t AlignPairDistanceFilterFactory_Init(const SRASplitterFactory* cself)
     return rc;
 }
 
-static
-rc_t AlignPairDistanceFilterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t AlignPairDistanceFilterFactory_NewObj( const SRASplitterFactory* cself,
+                                                   const SRASplitter** splitter )
 {
     rc_t rc = 0;
-    AlignPairDistanceFilterFactory* self = (AlignPairDistanceFilterFactory*)cself;
+    AlignPairDistanceFilterFactory* self = ( AlignPairDistanceFilterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcSRA, rcType, rcExecuting, rcParam, rcNull);
-    } else {
-        if( (rc = SRASplitter_Make(splitter, sizeof(AlignPairDistanceFilter), AlignPairDistanceFilter_GetKey, NULL, NULL, NULL)) == 0 ) {
-            ((AlignPairDistanceFilter*)(*splitter))->col_tlen = self->col_tlen;
-            ((AlignPairDistanceFilter*)(*splitter))->mp_dist_unknown = self->mp_dist_unknown;
-            ((AlignPairDistanceFilter*)(*splitter))->mp_dist = self->mp_dist;
-            ((AlignPairDistanceFilter*)(*splitter))->mp_dist_qty = self->mp_dist_qty;
+    if ( self == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof( AlignPairDistanceFilter ),
+                               AlignPairDistanceFilter_GetKey, NULL, NULL, NULL );
+        if ( rc == 0 )
+        {
+            ( (AlignPairDistanceFilter*)(*splitter) )->col_tlen = self->col_tlen;
+            ( (AlignPairDistanceFilter*)(*splitter) )->mp_dist_unknown = self->mp_dist_unknown;
+            ( (AlignPairDistanceFilter*)(*splitter) )->mp_dist = self->mp_dist;
+            ( (AlignPairDistanceFilter*)(*splitter) )->mp_dist_qty = self->mp_dist_qty;
         }
     }
     return rc;
 }
 
-static
-void AlignPairDistanceFilterFactory_Release(const SRASplitterFactory* cself)
+
+static void AlignPairDistanceFilterFactory_Release( const SRASplitterFactory* cself )
 {
-    if( cself != NULL ) {
-        AlignPairDistanceFilterFactory* self = (AlignPairDistanceFilterFactory*)cself;
-        SRAColumnRelease(self->col_tlen);
+    if ( cself != NULL )
+    {
+        AlignPairDistanceFilterFactory* self = ( AlignPairDistanceFilterFactory* )cself;
+        SRAColumnRelease( self->col_tlen );
     }
 }
 
-static
-rc_t AlignPairDistanceFilterFactory_Make(const SRASplitterFactory** cself, const SRATable* table,
-                                   bool mp_dist_unknown, TMatepairDistance* mp_dist, uint32_t mp_dist_qty)
+
+static rc_t AlignPairDistanceFilterFactory_Make( const SRASplitterFactory** cself,
+        const SRATable* table, bool mp_dist_unknown, TMatepairDistance* mp_dist, uint32_t mp_dist_qty )
 {
     rc_t rc = 0;
     AlignPairDistanceFilterFactory* obj = NULL;
 
-    if( cself == NULL || table == NULL ) {
-        rc = RC(rcSRA, rcType, rcAllocating, rcParam, rcNull);
-    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
-                                             AlignPairDistanceFilterFactory_Init,
-                                             AlignPairDistanceFilterFactory_NewObj,
-                                             AlignPairDistanceFilterFactory_Release)) == 0 ) {
-        obj = (AlignPairDistanceFilterFactory*)*cself;
-        obj->table = table;
-        obj->mp_dist_unknown = mp_dist_unknown;
-        obj->mp_dist = mp_dist;
-        obj->mp_dist_qty = mp_dist_qty;
+    if ( cself == NULL || table == NULL )
+    {
+        rc = RC( rcSRA, rcType, rcAllocating, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+                                      AlignPairDistanceFilterFactory_Init,
+                                      AlignPairDistanceFilterFactory_NewObj,
+                                      AlignPairDistanceFilterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = ( AlignPairDistanceFilterFactory* ) *cself;
+            obj->table = table;
+            obj->mp_dist_unknown = mp_dist_unknown;
+            obj->mp_dist = mp_dist;
+            obj->mp_dist_qty = mp_dist_qty;
+        }
     }
     return rc;
 }
 
+
 /* ============== FASTQ read type (bio/tech) filter ============================ */
 
-typedef struct FastqBioFilter_struct {
+typedef struct FastqBioFilter_struct
+{
     const FastqReader* reader;
 } FastqBioFilter;
 
 
 /* filter out non-bio reads */
-static
-rc_t FastqBioFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+static rc_t FastqBioFilter_GetKey( const SRASplitter* cself, const char** key,
+                                   spotid_t spot, readmask_t* readmask )
 {
     rc_t rc = 0;
-    FastqBioFilter* self = (FastqBioFilter*)cself;
+    FastqBioFilter* self = ( FastqBioFilter* )cself;
 
-    if( self == NULL || key == NULL ) {
-        rc = RC(rcExe, rcNode, rcExecuting, rcParam, rcInvalid);
-    } else {
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+    }
+    else
+    {
         uint32_t num_reads = 0;
 
         *key = NULL;
-        if( (rc = FastqReaderSeekSpot(self->reader, spot)) == 0 ) {
-            if( (rc = FastqReader_SpotInfo(self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads)) == 0 ) {
+        rc = FastqReaderSeekSpot( self->reader, spot );
+        if ( rc == 0 )
+        {
+            rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads );
+            if ( rc == 0 )
+            {
                 uint32_t readId;
-                SRA_DUMP_DBG(3, ("%s %u row reads: ", __func__, spot));
-                for(readId = 0; rc == 0 && readId < num_reads; readId++) {
-                    if( isset_readmask(readmask, readId) ) {
+                SRA_DUMP_DBG( 3, ( "%s %u row reads: ", __func__, spot ) );
+                for (readId = 0; rc == 0 && readId < num_reads; readId++ )
+                {
+                    if ( isset_readmask( readmask, readId ) )
+                    {
                         SRAReadTypes read_type;
-                        if( (rc = FastqReader_SpotReadInfo(self->reader, readId + 1, &read_type,
-                                                           NULL, NULL, NULL, NULL)) == 0 ) {
-                            if( !(read_type & SRA_READ_TYPE_BIOLOGICAL) ) {
-                                unset_readmask(readmask, readId);
-                            } else {
-                                SRA_DUMP_DBG(3, (" %u", readId));
+                        rc = FastqReader_SpotReadInfo( self->reader, readId + 1, &read_type,
+                                                       NULL, NULL, NULL, NULL);
+                        if ( rc == 0 )
+                        {
+                            if ( !( read_type & SRA_READ_TYPE_BIOLOGICAL ) )
+                            {
+                                unset_readmask( readmask, readId );
+                            }
+                            else
+                            {
+                                SRA_DUMP_DBG( 3, ( " %u", readId ) );
                             }
                         }
                     }
                 }
                 *key = "";
-                SRA_DUMP_DBG(3, (" key '%s'\n", *key));
+                SRA_DUMP_DBG( 3, ( " key '%s'\n", *key ) );
             }
-        } else if( GetRCState(rc) == rcNotFound ) {
-            SRA_DUMP_DBG(3, ("%s skipped %u row\n", __func__, spot));
+        }
+        else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+        {
+            SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
             rc = 0;
         }
     }
     return rc;
 }
 
-typedef struct FastqBioFilterFactory_struct {
+
+typedef struct FastqBioFilterFactory_struct
+{
     const char* accession;
     const SRATable* table;
     const FastqReader* reader;
 } FastqBioFilterFactory;
 
-static
-rc_t FastqBioFilterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t FastqBioFilterFactory_Init( const SRASplitterFactory* cself )
 {
     rc_t rc = 0;
-    FastqBioFilterFactory* self = (FastqBioFilterFactory*)cself;
+    FastqBioFilterFactory* self = ( FastqBioFilterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
-    } else {
-        rc = FastqReaderMake(&self->reader, self->table, self->accession,
-                             /* preserve orig spot format to save on conversions */
-                             FastqArgs.is_platform_cs_native, false, FastqArgs.fasta, false, 
-                             false, !FastqArgs.applyClip, 0,
-                             FastqArgs.offset, '\0', 0, 0);
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = FastqReaderMake( &self->reader, self->table, self->accession,
+                              /* preserve orig spot format to save on conversions */
+                              FastqArgs.is_platform_cs_native, false, FastqArgs.fasta > 0, false, 
+                              false, !FastqArgs.applyClip, 0,
+                              FastqArgs.offset, '\0', 0, 0) ;
     }
     return rc;
 }
 
-static
-rc_t FastqBioFilterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t FastqBioFilterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
 {
     rc_t rc = 0;
-    FastqBioFilterFactory* self = (FastqBioFilterFactory*)cself;
+    FastqBioFilterFactory* self = ( FastqBioFilterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
-    } else {
-        if( (rc = SRASplitter_Make(splitter, sizeof(FastqBioFilter), FastqBioFilter_GetKey, NULL, NULL, NULL)) == 0 ) {
-            ((FastqBioFilter*)(*splitter))->reader = self->reader;
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof( FastqBioFilter ),
+                               FastqBioFilter_GetKey, NULL, NULL, NULL );
+        if ( rc == 0 )
+        {
+            ( (FastqBioFilter*)(*splitter) )->reader = self->reader;
         }
     }
     return rc;
 }
 
-static
-void FastqBioFilterFactory_Release(const SRASplitterFactory* cself)
+
+static void FastqBioFilterFactory_Release( const SRASplitterFactory* cself )
 {
-    if( cself != NULL ) {
-        FastqBioFilterFactory* self = (FastqBioFilterFactory*)cself;
-        FastqReaderWhack(self->reader);
+    if ( cself != NULL )
+    {
+        FastqBioFilterFactory* self = ( FastqBioFilterFactory* )cself;
+        FastqReaderWhack( self->reader );
     }
 }
 
-static
-rc_t FastqBioFilterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table)
+
+static rc_t FastqBioFilterFactory_Make( const SRASplitterFactory** cself,
+                        const char* accession, const SRATable* table )
 {
     rc_t rc = 0;
     FastqBioFilterFactory* obj = NULL;
 
-    if( cself == NULL || accession == NULL || table == NULL ) {
-        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
-    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
-                                             FastqBioFilterFactory_Init,
-                                             FastqBioFilterFactory_NewObj,
-                                             FastqBioFilterFactory_Release)) == 0 ) {
-        obj = (FastqBioFilterFactory*)*cself;
-        obj->accession = accession;
-        obj->table = table;
+    if ( cself == NULL || accession == NULL || table == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+                                      FastqBioFilterFactory_Init,
+                                      FastqBioFilterFactory_NewObj,
+                                      FastqBioFilterFactory_Release );
+
+        if ( rc == 0 )
+        {
+            obj = ( FastqBioFilterFactory* )*cself;
+            obj->accession = accession;
+            obj->table = table;
+        }
     }
     return rc;
 }
 
+
 /* ============== FASTQ number of reads filter ============================ */
 
-typedef struct FastqRNumberFilter_struct {
+typedef struct FastqRNumberFilter_struct
+{
     const FastqReader* reader;
 } FastqRNumberFilter;
 
 
-static
-rc_t FastqRNumberFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+static rc_t FastqRNumberFilter_GetKey( const SRASplitter* cself, const char** key,
+                                       spotid_t spot, readmask_t* readmask )
 {
     rc_t rc = 0;
-    FastqRNumberFilter* self = (FastqRNumberFilter*)cself;
+    FastqRNumberFilter* self = ( FastqRNumberFilter* )cself;
 
-    if( self == NULL || key == NULL ) {
-        rc = RC(rcExe, rcNode, rcExecuting, rcParam, rcInvalid);
-    } else {
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+    }
+    else
+    {
         uint32_t num_reads = 0;
 
         *key = NULL;
-        if( (rc = FastqReaderSeekSpot(self->reader, spot)) == 0 ) {
-            if( (rc = FastqReader_SpotInfo(self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads)) == 0 ) {
+        rc = FastqReaderSeekSpot( self->reader, spot );
+        if ( rc == 0 )
+        {
+            rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads );
+            if ( rc == 0 )
+            {
                 int readId, q;
 
-                SRA_DUMP_DBG(3, ("%s %u row reads: ", __func__, spot));
-                for(readId = 0, q = 0; readId < num_reads; readId++) {
-                    if( isset_readmask(readmask, readId) ) {
-                        if( ++q > FastqArgs.maxReads ) {
-                            unset_readmask(readmask, 1 << readId);
-                        } else {
-                            SRA_DUMP_DBG(3, (" %u", readId));
+                SRA_DUMP_DBG( 3, ( "%s %u row reads: ", __func__, spot ) );
+                for ( readId = 0, q = 0; readId < num_reads; readId++ )
+                {
+                    if ( isset_readmask( readmask, readId ) )
+                    {
+                        if ( ++q > FastqArgs.maxReads )
+                        {
+                            unset_readmask( readmask, 1 << readId );
+                        }
+                        else
+                        {
+                            SRA_DUMP_DBG( 3, ( " %u", readId ) );
                         }
                     }
                 }
                 *key = "";
-                SRA_DUMP_DBG(3, (" key '%s'\n", *key));
+                SRA_DUMP_DBG( 3, ( " key '%s'\n", *key ) );
             }
-        } else if( GetRCState(rc) == rcNotFound ) {
-            SRA_DUMP_DBG(3, ("%s skipped %u row\n", __func__, spot));
+        }
+        else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+        {
+            SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
             rc = 0;
         }
     }
     return rc;
 }
 
-typedef struct FastqRNumberFilterFactory_struct {
+
+typedef struct FastqRNumberFilterFactory_struct
+{
     const char* accession;
     const SRATable* table;
     const FastqReader* reader;
 } FastqRNumberFilterFactory;
 
-static
-rc_t FastqRNumberFilterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t FastqRNumberFilterFactory_Init( const SRASplitterFactory* cself )
 {
     rc_t rc = 0;
-    FastqRNumberFilterFactory* self = (FastqRNumberFilterFactory*)cself;
+    FastqRNumberFilterFactory* self = ( FastqRNumberFilterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
-    } else {
-        rc = FastqReaderMake(&self->reader, self->table, self->accession,
-                             /* preserve orig spot format to save on conversions */
-                             FastqArgs.is_platform_cs_native, false, FastqArgs.fasta, false, 
-                             false, !FastqArgs.applyClip, 0,
-                             FastqArgs.offset, '\0', 0, 0);
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = FastqReaderMake( &self->reader, self->table, self->accession,
+                              /* preserve orig spot format to save on conversions */
+                              FastqArgs.is_platform_cs_native, false, FastqArgs.fasta > 0, false, 
+                              false, !FastqArgs.applyClip, 0,
+                              FastqArgs.offset, '\0', 0, 0 );
     }
     return rc;
 }
 
-static
-rc_t FastqRNumberFilterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t FastqRNumberFilterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
 {
     rc_t rc = 0;
-    FastqRNumberFilterFactory* self = (FastqRNumberFilterFactory*)cself;
+    FastqRNumberFilterFactory* self = ( FastqRNumberFilterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
-    } else {
-        if( (rc = SRASplitter_Make(splitter, sizeof(FastqRNumberFilter), FastqRNumberFilter_GetKey, NULL, NULL, NULL)) == 0 ) {
-            ((FastqRNumberFilter*)(*splitter))->reader = self->reader;
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof( FastqRNumberFilter ),
+                               FastqRNumberFilter_GetKey, NULL, NULL, NULL );
+        if ( rc == 0 )
+        {
+            ( (FastqRNumberFilter*)(*splitter) )->reader = self->reader;
         }
     }
     return rc;
 }
 
-static
-void FastqRNumberFilterFactory_Release(const SRASplitterFactory* cself)
+
+static void FastqRNumberFilterFactory_Release( const SRASplitterFactory* cself )
 {
-    if( cself != NULL ) {
-        FastqRNumberFilterFactory* self = (FastqRNumberFilterFactory*)cself;
-        FastqReaderWhack(self->reader);
+    if ( cself != NULL )
+    {
+        FastqRNumberFilterFactory* self = ( FastqRNumberFilterFactory* )cself;
+        FastqReaderWhack( self->reader );
     }
 }
 
-static
-rc_t FastqRNumberFilterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table)
+
+static rc_t FastqRNumberFilterFactory_Make( const SRASplitterFactory** cself,
+                                const char* accession, const SRATable* table )
 {
     rc_t rc = 0;
     FastqRNumberFilterFactory* obj = NULL;
 
-    if( cself == NULL || accession == NULL || table == NULL ) {
-        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
-    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
-                                             FastqRNumberFilterFactory_Init,
-                                             FastqRNumberFilterFactory_NewObj,
-                                             FastqRNumberFilterFactory_Release)) == 0 ) {
-        obj = (FastqRNumberFilterFactory*)*cself;
-        obj->accession = accession;
-        obj->table = table;
+    if ( cself == NULL || accession == NULL || table == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
     }
-    return rc;
-}
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+                                      FastqRNumberFilterFactory_Init,
+                                      FastqRNumberFilterFactory_NewObj,
+                                      FastqRNumberFilterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = ( FastqRNumberFilterFactory* )*cself;
+            obj->accession = accession;
+            obj->table = table;
+        }
+    }
+    return rc;
+}
 
 /* ============== FASTQ quality filter ============================ */
 
-typedef struct FastqQFilter_struct {
+typedef struct FastqQFilter_struct
+{
     const FastqReader* reader;
-    char buf[512 * 1024];
+    KDataBuffer* kdbuf;
 } FastqQFilter;
 
 
 /* filter out reads by leading/trialing quality */
-static
-rc_t FastqQFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+static rc_t FastqQFilter_GetKey( const SRASplitter* cself, const char** key,
+                                 spotid_t spot, readmask_t* readmask )
 {
     rc_t rc = 0;
-    FastqQFilter* self = (FastqQFilter*)cself;
+    FastqQFilter* self = ( FastqQFilter* )cself;
 
-    if( self == NULL || key == NULL ) {
-        rc = RC(rcExe, rcNode, rcExecuting, rcParam, rcInvalid);
-    } else {
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+    }
+    else
+    {
         uint32_t num_reads = 0, spot_len;
 
         *key = NULL;
-        if( (rc = FastqReaderSeekSpot(self->reader, spot)) == 0 ) {
-            if( (rc = FastqReader_SpotInfo(self->reader, NULL, NULL, NULL, NULL, &spot_len, &num_reads)) == 0 ) {
+        rc = FastqReaderSeekSpot( self->reader, spot );
+        if ( rc == 0 )
+        {
+            rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, &spot_len, &num_reads );
+            if ( rc == 0 )
+            {
                 static char const* const baseStr = "NNNNNNNNNN";
                 static char const* const colorStr = "..........";
-                uint32_t readId, xLen = 10;
+                static const uint32_t strLen = 10;
 
-                SRA_DUMP_DBG(3, ("%s %u row reads: ", __func__, spot));
-                if( FastqArgs.split_spot ) {
-                    INSDC_coord_len read_len = 0;
-                    for(readId = 0; rc == 0 && readId < num_reads; readId++) {
-                        if( isset_readmask(readmask, readId) ) {
-                            if( (rc = FastqReader_SpotReadInfo(self->reader, readId + 1, NULL, NULL, NULL, NULL, &read_len)) == 0 ) {
-                                if( read_len < xLen ) {
-                                    xLen = read_len;
-                                }
-                                if( (rc = FastqReaderBase(self->reader, readId + 1, self->buf, sizeof(self->buf), NULL)) == 0 ) {
-                                    if( (FastqArgs.is_platform_cs_native &&
-                                         (strncmp(&self->buf[1], colorStr, xLen) == 0 ||
-                                          strcmp(&self->buf[read_len - xLen + 1], colorStr) == 0)) ||
-                                        (strncmp(self->buf, baseStr, xLen) == 0 ||
-                                         strcmp(&self->buf[read_len - xLen], baseStr) == 0) )  {
-                                        unset_readmask(readmask, readId);
-                                    } else {
-                                        SRA_DUMP_DBG(3, (" %u", readId));
+                SRA_DUMP_DBG( 3, ( "%s %u row reads: ", __func__, spot ) );
+                if ( FastqArgs.split_spot )
+                {
+                    uint32_t readId;
+                    INSDC_coord_len read_len;
+                    for ( readId = 0; rc == 0 && readId < num_reads; readId++ )
+                    {
+                        if ( isset_readmask( readmask, readId ) )
+                        {
+                            rc = FastqReader_SpotReadInfo( self->reader, readId + 1, NULL, NULL, NULL, NULL, &read_len );
+                            if ( rc == 0 )
+                            {
+                                uint32_t xLen = read_len < strLen ? read_len : strLen;
+                                IF_BUF( ( FastqReaderBase(self->reader, readId + 1,
+                                          self->kdbuf->base, KDataBufferBytes( self->kdbuf ), NULL) ), self->kdbuf, read_len )
+                                {
+                                    const char* b = self->kdbuf->base;
+                                    if ( ( FastqArgs.is_platform_cs_native &&
+                                           ( strncmp( &b[ 1 ], colorStr, xLen) == 0 || strcmp( &b[ read_len - xLen + 1 ], colorStr ) == 0 ) ) ||
+                                           ( strncmp( b, baseStr, xLen ) == 0 || strcmp( &b[ read_len - xLen ], baseStr ) == 0 ) )
+                                    {
+                                        unset_readmask( readmask, readId );
+                                    }
+                                    else
+                                    {
+                                        SRA_DUMP_DBG( 3, ( " %u", readId ) );
                                     }
                                 }
                             }
                         }
                     }
                     *key = "";
-                } else {
-                    if( spot_len < xLen ) {
-                        xLen = spot_len;
-                    }
-                    if( (rc = FastqReaderBase(self->reader, 0, self->buf, sizeof(self->buf), NULL)) == 0 ) {
-                        if( (FastqArgs.is_platform_cs_native &&
-                             (strncmp(&self->buf[1], colorStr, xLen) == 0 ||
-                              strcmp(&self->buf[spot_len - xLen + 1], colorStr) == 0)) ||
-                            (strncmp(self->buf, baseStr, xLen) == 0 ||
-                            strcmp(&self->buf[spot_len - xLen], baseStr) == 0) ) {
-                        } else {
+                }
+                else
+                {
+                    uint32_t xLen = spot_len < strLen ? spot_len : strLen;
+                    IF_BUF( ( FastqReaderBase( self->reader, 0, self->kdbuf->base, KDataBufferBytes( self->kdbuf ), NULL ) ), self->kdbuf, spot_len )
+                    {
+                        const char* b = self->kdbuf->base;
+                        if ( ( FastqArgs.is_platform_cs_native &&
+                               ( strncmp( &b[ 1 ], colorStr, xLen ) == 0 || strcmp( &b[ spot_len - xLen + 1 ], colorStr ) == 0 ) ) ||
+                               ( strncmp( b, baseStr, xLen ) == 0 || strcmp( &b[ spot_len - xLen ], baseStr ) == 0 ) )
+                        {
+                        }
+                        else
+                        {
                             *key = "";
-                            SRA_DUMP_DBG(3, (" whole spot"));
+                            SRA_DUMP_DBG( 3, ( " whole spot" ) );
                         }
                     }
                 }
-                SRA_DUMP_DBG(3, (" key '%s'\n", *key));
+                SRA_DUMP_DBG( 3, ( " key '%s'\n", *key ) );
             }
-        } else if( GetRCState(rc) == rcNotFound ) {
-            SRA_DUMP_DBG(3, ("%s skipped %u row\n", __func__, spot));
+        }
+        else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+        {
+            SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
             rc = 0;
         }
     }
     return rc;
 }
 
-typedef struct FastqQFilterFactory_struct {
+
+typedef struct FastqQFilterFactory_struct
+{
     const char* accession;
     const SRATable* table;
     const FastqReader* reader;
+    KDataBuffer kdbuf;
 } FastqQFilterFactory;
 
-static
-rc_t FastqQFilterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t FastqQFilterFactory_Init( const SRASplitterFactory* cself )
 {
     rc_t rc = 0;
-    FastqQFilterFactory* self = (FastqQFilterFactory*)cself;
+    FastqQFilterFactory* self = ( FastqQFilterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
-    } else {
-        rc = FastqReaderMake(&self->reader, self->table, self->accession,
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = KDataBufferMakeBytes( &self->kdbuf, DATABUFFERINITSIZE );
+        if ( rc == 0 )
+        {
+            rc = FastqReaderMake( &self->reader, self->table, self->accession,
                              /* preserve orig spot format to save on conversions */
-                             FastqArgs.is_platform_cs_native, false, FastqArgs.fasta, false, 
+                             FastqArgs.is_platform_cs_native, false, FastqArgs.fasta > 0, false, 
                              false, !FastqArgs.applyClip, 0,
-                             FastqArgs.offset, '\0', 0, 0);
+                             FastqArgs.offset, '\0', 0, 0 );
+        }
     }
     return rc;
 }
 
-static
-rc_t FastqQFilterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t FastqQFilterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
 {
     rc_t rc = 0;
-    FastqQFilterFactory* self = (FastqQFilterFactory*)cself;
+    FastqQFilterFactory* self = ( FastqQFilterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
-    } else {
-        if( (rc = SRASplitter_Make(splitter, sizeof(FastqQFilter), FastqQFilter_GetKey, NULL, NULL, NULL)) == 0 ) {
-            ((FastqQFilter*)(*splitter))->reader = self->reader;
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof( FastqQFilter ), FastqQFilter_GetKey, NULL, NULL, NULL );
+        if ( rc == 0 )
+        {
+            ( (FastqQFilter*)(*splitter) )->reader = self->reader;
+            ( (FastqQFilter*)(*splitter) )->kdbuf = &self->kdbuf;
         }
     }
     return rc;
 }
 
-static
-void FastqQFilterFactory_Release(const SRASplitterFactory* cself)
+
+static void FastqQFilterFactory_Release( const SRASplitterFactory* cself )
 {
-    if( cself != NULL ) {
-        FastqQFilterFactory* self = (FastqQFilterFactory*)cself;
-        FastqReaderWhack(self->reader);
+    if ( cself != NULL )
+    {
+        FastqQFilterFactory* self = ( FastqQFilterFactory* )cself;
+        KDataBufferWhack( &self->kdbuf );
+        FastqReaderWhack( self->reader );
     }
 }
 
-static
-rc_t FastqQFilterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table)
+
+static rc_t FastqQFilterFactory_Make( const SRASplitterFactory** cself,
+                                      const char* accession, const SRATable* table )
 {
     rc_t rc = 0;
     FastqQFilterFactory* obj = NULL;
 
-    if( cself == NULL || accession == NULL || table == NULL ) {
-        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
-    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
-                                             FastqQFilterFactory_Init,
-                                             FastqQFilterFactory_NewObj,
-                                             FastqQFilterFactory_Release)) == 0 ) {
-        obj = (FastqQFilterFactory*)*cself;
-        obj->accession = accession;
-        obj->table = table;
+    if ( cself == NULL || accession == NULL || table == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+                                      FastqQFilterFactory_Init,
+                                      FastqQFilterFactory_NewObj,
+                                      FastqQFilterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = ( FastqQFilterFactory* )*cself;
+            obj->accession = accession;
+            obj->table = table;
+        }
     }
     return rc;
 }
 
+
 /* ============== FASTQ min read length filter ============================ */
 
-typedef struct FastqReadLenFilter_struct {
+
+typedef struct FastqReadLenFilter_struct
+{
     const FastqReader* reader;
 } FastqReadLenFilter;
 
-static
-rc_t FastqReadLenFilter_GetKey(const SRASplitter* cself, const char** key, spotid_t spot, readmask_t* readmask)
+
+static rc_t FastqReadLenFilter_GetKey( const SRASplitter* cself, const char** key,
+                                       spotid_t spot, readmask_t* readmask )
 {
     rc_t rc = 0;
-    FastqReadLenFilter* self = (FastqReadLenFilter*)cself;
+    FastqReadLenFilter* self = ( FastqReadLenFilter* )cself;
 
-    if( self == NULL || key == NULL ) {
-        rc = RC(rcExe, rcNode, rcExecuting, rcParam, rcInvalid);
-    } else {
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+    }
+    else
+    {
         uint32_t num_reads = 0, spot_len = 0;
 
         *key = NULL;
-        if( rc == 0 && (rc = FastqReaderSeekSpot(self->reader, spot)) == 0 ) {
-            if( (rc = FastqReader_SpotInfo(self->reader, NULL, NULL, NULL, NULL, &spot_len, &num_reads)) == 0 ) {
-                SRA_DUMP_DBG(3, ("%s %u row reads:", __func__, spot));
-                if( FastqArgs.split_spot ) {
+        rc = FastqReaderSeekSpot( self->reader, spot );
+        if ( rc == 0 )
+        {
+            rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, &spot_len, &num_reads );
+            if ( rc == 0 )
+            {
+                SRA_DUMP_DBG( 3, ( "%s %u row reads:", __func__, spot ) );
+                if ( FastqArgs.split_spot )
+                {
                     uint32_t readId;
                     INSDC_coord_len read_len = 0;
-                    for(readId = 0; rc == 0 && readId < num_reads; readId++) {
-                        if( isset_readmask(readmask, readId) ) {
-                            if( (rc = FastqReader_SpotReadInfo(self->reader, readId + 1, NULL, NULL, NULL, NULL, &read_len)) == 0 ) {
-                                if( read_len < FastqArgs.minReadLen ) {
-                                    unset_readmask(readmask, readId);
-                                } else {
-                                    SRA_DUMP_DBG(3, (" %u", readId));
+                    for ( readId = 0; rc == 0 && readId < num_reads; readId++ )
+                    {
+                        if ( isset_readmask( readmask, readId ) )
+                        {
+                            rc = FastqReader_SpotReadInfo( self->reader, readId + 1, NULL, NULL, NULL, NULL, &read_len );
+                            if ( rc == 0 )
+                            {
+                                if ( read_len < FastqArgs.minReadLen )
+                                {
+                                    unset_readmask( readmask, readId );
+                                }
+                                else
+                                {
+                                    SRA_DUMP_DBG( 3, ( " %u", readId ) );
                                 }
                             }
                         }
                     }
                     *key = "";
-                } else {
-                    if( spot_len >= FastqArgs.minReadLen ) {
+                }
+                else
+                {
+                    if ( spot_len >= FastqArgs.minReadLen )
+                    {
                         *key = "";
-                        SRA_DUMP_DBG(3, (" whole spot"));
+                        SRA_DUMP_DBG( 3, ( " whole spot" ) );
                     }
                 }
-                SRA_DUMP_DBG(3, ("\n"));
+                SRA_DUMP_DBG( 3, ( "\n" ) );
             }
-        } else if( GetRCState(rc) == rcNotFound ) {
-            SRA_DUMP_DBG(3, ("%s skipped %u row\n", __func__, spot));
+        }
+        else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+        {
+            SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
             rc = 0;
         }
     }
     return rc;
 }
 
-typedef struct FastqReadLenFilterFactory_struct {
+
+typedef struct FastqReadLenFilterFactory_struct
+{
     const char* accession;
     const SRATable* table;
     const FastqReader* reader;
 } FastqReadLenFilterFactory;
 
-static
-rc_t FastqReadLenFilterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t FastqReadLenFilterFactory_Init( const SRASplitterFactory* cself )
 {
     rc_t rc = 0;
-    FastqReadLenFilterFactory* self = (FastqReadLenFilterFactory*)cself;
+    FastqReadLenFilterFactory* self = ( FastqReadLenFilterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
-    } else {
-        rc = FastqReaderMake(&self->reader, self->table, self->accession,
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = FastqReaderMake( &self->reader, self->table, self->accession,
                              /* preserve orig spot format to save on conversions */
-                             FastqArgs.is_platform_cs_native, false, FastqArgs.fasta, false, 
-                             false, !FastqArgs.applyClip, 0,
-                             FastqArgs.offset, '\0', 0, 0);
+                              FastqArgs.is_platform_cs_native, false, FastqArgs.fasta > 0, false, 
+                              false, !FastqArgs.applyClip, 0,
+                              FastqArgs.offset, '\0', 0, 0 );
     }
     return rc;
 }
 
-static
-rc_t FastqReadLenFilterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t FastqReadLenFilterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
 {
     rc_t rc = 0;
-    FastqReadLenFilterFactory* self = (FastqReadLenFilterFactory*)cself;
+    FastqReadLenFilterFactory* self = ( FastqReadLenFilterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
-    } else {
-        if( (rc = SRASplitter_Make(splitter, sizeof(FastqReadLenFilter), FastqReadLenFilter_GetKey, NULL, NULL, NULL)) == 0 ) {
-            ((FastqReadLenFilter*)(*splitter))->reader = self->reader;
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof( FastqReadLenFilter ),
+                               FastqReadLenFilter_GetKey, NULL, NULL, NULL );
+        if ( rc == 0 )
+        {
+            ( (FastqReadLenFilter*)(*splitter) )->reader = self->reader;
         }
     }
     return rc;
 }
 
-static
-void FastqReadLenFilterFactory_Release(const SRASplitterFactory* cself)
+
+static void FastqReadLenFilterFactory_Release( const SRASplitterFactory* cself )
 {
-    if( cself != NULL ) {
-        FastqReadLenFilterFactory* self = (FastqReadLenFilterFactory*)cself;
-        FastqReaderWhack(self->reader);
+    if ( cself != NULL )
+    {
+        FastqReadLenFilterFactory* self = ( FastqReadLenFilterFactory* )cself;
+        FastqReaderWhack( self->reader );
     }
 }
 
-static
-rc_t FastqReadLenFilterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table)
+
+static rc_t FastqReadLenFilterFactory_Make( const SRASplitterFactory** cself,
+                            const char* accession, const SRATable* table )
 {
     rc_t rc = 0;
     FastqReadLenFilterFactory* obj = NULL;
 
-    if( cself == NULL || accession == NULL || table == NULL ) {
-        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
-    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterSpot, sizeof(*obj),
-                                             FastqReadLenFilterFactory_Init,
-                                             FastqReadLenFilterFactory_NewObj,
-                                             FastqReadLenFilterFactory_Release)) == 0 ) {
-        obj = (FastqReadLenFilterFactory*)*cself;
-        obj->accession = accession;
-        obj->table = table;
+    if ( cself == NULL || accession == NULL || table == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterSpot, sizeof( *obj ),
+                                      FastqReadLenFilterFactory_Init,
+                                      FastqReadLenFilterFactory_NewObj,
+                                      FastqReadLenFilterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = ( FastqReadLenFilterFactory* )*cself;
+            obj->accession = accession;
+            obj->table = table;
+        }
     }
     return rc;
 }
 
+
 /* ============== FASTQ read splitter ============================ */
 
 char* FastqReadSplitter_key_buf = NULL;
 
-typedef struct FastqReadSplitter_struct {
+
+typedef struct FastqReadSplitter_struct
+{
     const FastqReader* reader;
     SRASplitter_Keys* keys;
     uint32_t keys_max;
 } FastqReadSplitter;
 
-static
-rc_t FastqReadSplitter_GetKeySet(const SRASplitter* cself, const SRASplitter_Keys** key, uint32_t* keys, spotid_t spot, const readmask_t* readmask)
+
+static rc_t FastqReadSplitter_GetKeySet( const SRASplitter* cself, const SRASplitter_Keys** key,
+                    uint32_t* keys, spotid_t spot, const readmask_t* readmask )
 {
     rc_t rc = 0;
-    FastqReadSplitter* self = (FastqReadSplitter*)cself;
+    FastqReadSplitter* self = ( FastqReadSplitter* )cself;
     const size_t key_offset = 5;
 
-    if( self == NULL || key == NULL ) {
-        rc = RC(rcExe, rcNode, rcExecuting, rcParam, rcInvalid);
-    } else {
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+    }
+    else
+    {
         uint32_t num_reads = 0;
 
         *keys = 0;
-        if( FastqReadSplitter_key_buf == NULL ) {
+        if ( FastqReadSplitter_key_buf == NULL )
+        {
             /* initial alloc key_buf: "  1\0  2\0...\0  9\0 10\0 11\0...\03220..\08192\0" */
-            if( nreads_max > 9999 ) {
+            if ( nreads_max > 9999 )
+            {
                 /* key_offset and sprintf format size are insufficient for keys longer than 4 digits */
-                rc = RC(rcExe, rcNode, rcExecuting, rcBuffer, rcInsufficient);
-            } else if( (FastqReadSplitter_key_buf = malloc(nreads_max * key_offset)) == NULL ) {
-                rc = RC(rcExe, rcNode, rcExecuting, rcMemory, rcExhausted);
-            } else {
-                /* fill buffer w/keys */
-                int i;
-                char* p = FastqReadSplitter_key_buf;
-                for(i = 1; rc == 0 && i <= nreads_max; i++) {
-                    if( sprintf(p, "%4u", i) <= 0 ) {
-                        rc = RC(rcExe, rcNode, rcExecuting, rcTransfer, rcIncomplete);
+                rc = RC( rcExe, rcNode, rcExecuting, rcBuffer, rcInsufficient );
+            }
+            else
+            {
+                FastqReadSplitter_key_buf = malloc( nreads_max * key_offset );
+                if ( FastqReadSplitter_key_buf == NULL )
+                {
+                    rc = RC( rcExe, rcNode, rcExecuting, rcMemory, rcExhausted );
+                }
+                else
+                {
+                    /* fill buffer w/keys */
+                    int i;
+                    char* p = FastqReadSplitter_key_buf;
+                    for ( i = 1; rc == 0 && i <= nreads_max; i++ )
+                    {
+                        if ( sprintf( p, "%4u", i ) <= 0 )
+                        {
+                            rc = RC( rcExe, rcNode, rcExecuting, rcTransfer, rcIncomplete );
+                        }
+                        p += key_offset;
                     }
-                    p += key_offset;
                 }
             }
         }
-        if( rc == 0 && (rc = FastqReaderSeekSpot(self->reader, spot)) == 0 ) {
-            if( (rc = FastqReader_SpotInfo(self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads)) == 0 ) {
-                uint32_t readId, good = 0;
 
-                SRA_DUMP_DBG(3, ("%s %u row reads:", __func__, spot));
-                for(readId = 0; rc == 0 && readId < num_reads; readId++) {
-                    rc = FastqReader_SpotReadInfo(self->reader, readId + 1, NULL, NULL, NULL, NULL, NULL);
-                    if( !isset_readmask(readmask, readId) ) {
-                        continue;
-                    }
-                    if( self->keys_max < (good + 1) ) {
-                        void* p = realloc(self->keys, sizeof(*self->keys) * (good + 1));
-                        if( p == NULL ) {
-                            rc = RC(rcExe, rcNode, rcExecuting, rcMemory, rcExhausted);
-                            break;
-                        } else {
-                            self->keys = p;
-                            self->keys_max = good + 1;
+        if ( rc == 0 )
+        {
+            rc = FastqReaderSeekSpot( self->reader, spot );
+            if ( rc == 0 )
+            {
+                rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads );
+                if ( rc == 0 )
+                {
+                    uint32_t readId, good = 0;
+
+                    SRA_DUMP_DBG( 3, ( "%s %u row reads:", __func__, spot ) );
+                    for ( readId = 0; rc == 0 && readId < num_reads; readId++ )
+                    {
+                        rc = FastqReader_SpotReadInfo( self->reader, readId + 1, NULL, NULL, NULL, NULL, NULL );
+                        if ( !isset_readmask( readmask, readId ) )
+                        {
+                            continue;
                         }
+                        if ( self->keys_max < ( good + 1 ) )
+                        {
+                            void* p = realloc( self->keys, sizeof( *self->keys ) * ( good + 1 ) );
+                            if ( p == NULL )
+                            {
+                                rc = RC( rcExe, rcNode, rcExecuting, rcMemory, rcExhausted );
+                                break;
+                            }
+                            else
+                            {
+                                self->keys = p;
+                                self->keys_max = good + 1;
+                            }
+                        }
+                        self->keys[ good ].key = &FastqReadSplitter_key_buf[ readId * key_offset ];
+                        while ( self->keys[ good ].key[ 0 ] == ' ' && self->keys[ good ].key[0] != '\0' )
+                        {
+                            self->keys[ good ].key++;
+                        }
+                        clear_readmask( self->keys[ good ].readmask );
+                        set_readmask( self->keys[good].readmask, readId );
+                        SRA_DUMP_DBG( 3, ( " key['%s']+=%u", self->keys[ good ].key, readId ) );
+                        good++;
                     }
-                    self->keys[good].key = &FastqReadSplitter_key_buf[readId * key_offset];
-                    while( self->keys[good].key[0] == ' ' && self->keys[good].key[0] != '\0' ) {
-                        self->keys[good].key++;
+                    if ( rc == 0 )
+                    {
+                        *key = self->keys;
+                        *keys = good;
                     }
-                    clear_readmask(self->keys[good].readmask);
-                    set_readmask(self->keys[good].readmask, readId);
-                    SRA_DUMP_DBG(3, (" key['%s']+=%u", self->keys[good].key, readId));
-                    good++;
-                }
-                if( rc == 0 ) {
-                    *key = self->keys;
-                    *keys = good;
+                    SRA_DUMP_DBG( 3, ( "\n" ) );
                 }
-                SRA_DUMP_DBG(3, ("\n"));
             }
-        } else if( GetRCState(rc) == rcNotFound ) {
-            SRA_DUMP_DBG(3, ("%s skipped %u row\n", __func__, spot));
-            rc = 0;
+            else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+            {
+                SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
+                rc = 0;
+            }
+        }
+        else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+        {
+                SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
+                rc = 0;
         }
     }
     return rc;
 }
 
-rc_t FastqReadSplitter_Release(const SRASplitter* cself)
+
+rc_t FastqReadSplitter_Release( const SRASplitter* cself )
 {
-    if( cself != NULL ) {
-        FastqReadSplitter* self = (FastqReadSplitter*)cself;
-        free(self->keys);
+    if ( cself != NULL )
+    {
+        FastqReadSplitter* self = ( FastqReadSplitter* )cself;
+        free( self->keys );
     }
     return 0;
 }
 
-typedef struct FastqReadSplitterFactory_struct {
+
+typedef struct FastqReadSplitterFactory_struct
+{
     const char* accession;
     const SRATable* table;
     const FastqReader* reader;
 } FastqReadSplitterFactory;
 
-static
-rc_t FastqReadSplitterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t FastqReadSplitterFactory_Init( const SRASplitterFactory* cself )
 {
     rc_t rc = 0;
-    FastqReadSplitterFactory* self = (FastqReadSplitterFactory*)cself;
+    FastqReadSplitterFactory* self = ( FastqReadSplitterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
-    } else {
-        rc = FastqReaderMake(&self->reader, self->table, self->accession,
-                             /* preserve orig spot format to save on conversions */
-                             FastqArgs.is_platform_cs_native, false, FastqArgs.fasta, false, 
-                             false, !FastqArgs.applyClip, 0,
-                             FastqArgs.offset, '\0', 0, 0);
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = FastqReaderMake( &self->reader, self->table, self->accession,
+                              /* preserve orig spot format to save on conversions */
+                              FastqArgs.is_platform_cs_native, false, FastqArgs.fasta > 0, false, 
+                              false, !FastqArgs.applyClip, 0,
+                              FastqArgs.offset, '\0', 0, 0 );
     }
     return rc;
 }
 
-static
-rc_t FastqReadSplitterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t FastqReadSplitterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
 {
     rc_t rc = 0;
-    FastqReadSplitterFactory* self = (FastqReadSplitterFactory*)cself;
+    FastqReadSplitterFactory* self = ( FastqReadSplitterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
-    } else {
-        if( (rc = SRASplitter_Make(splitter, sizeof(FastqReadSplitter), NULL, FastqReadSplitter_GetKeySet, NULL, FastqReadSplitter_Release)) == 0 ) {
-            ((FastqReadSplitter*)(*splitter))->reader = self->reader;
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof( FastqReadSplitter ), NULL,
+                               FastqReadSplitter_GetKeySet, NULL, FastqReadSplitter_Release );
+        if ( rc == 0 )
+        {
+            ( (FastqReadSplitter*)(*splitter) )->reader = self->reader;
         }
     }
     return rc;
 }
 
-static
-void FastqReadSplitterFactory_Release(const SRASplitterFactory* cself)
+
+static void FastqReadSplitterFactory_Release( const SRASplitterFactory* cself )
 {
-    if( cself != NULL ) {
-        FastqReadSplitterFactory* self = (FastqReadSplitterFactory*)cself;
-        FastqReaderWhack(self->reader);
-        free(FastqReadSplitter_key_buf);
+    if ( cself != NULL )
+    {
+        FastqReadSplitterFactory* self = ( FastqReadSplitterFactory* )cself;
+        FastqReaderWhack( self->reader );
+        free( FastqReadSplitter_key_buf );
+        FastqReadSplitter_key_buf = NULL;
     }
 }
 
-static
-rc_t FastqReadSplitterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table)
+
+static rc_t FastqReadSplitterFactory_Make( const SRASplitterFactory** cself,
+                const char* accession, const SRATable* table )
 {
     rc_t rc = 0;
     FastqReadSplitterFactory* obj = NULL;
 
-    if( cself == NULL || accession == NULL || table == NULL ) {
-        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
-    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterRead, sizeof(*obj),
-                                             FastqReadSplitterFactory_Init,
-                                             FastqReadSplitterFactory_NewObj,
-                                             FastqReadSplitterFactory_Release)) == 0 ) {
-        obj = (FastqReadSplitterFactory*)*cself;
-        obj->accession = accession;
-        obj->table = table;
+    if ( cself == NULL || accession == NULL || table == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterRead, sizeof( *obj ),
+                                      FastqReadSplitterFactory_Init,
+                                      FastqReadSplitterFactory_NewObj,
+                                      FastqReadSplitterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = ( FastqReadSplitterFactory* )*cself;
+            obj->accession = accession;
+            obj->table = table;
+        }
     }
     return rc;
 }
 
+
 /* ============== FASTQ 3 read splitter ============================ */
 
 char* Fastq3ReadSplitter_key_buf = NULL;
 
-typedef struct Fastq3ReadSplitter_struct {
+typedef struct Fastq3ReadSplitter_struct
+{
     const FastqReader* reader;
-    SRASplitter_Keys keys[2];
+    SRASplitter_Keys keys[ 2 ];
 } Fastq3ReadSplitter;
 
+
 /* if all active reads len >= minreadlen, reads are splitted into separate files, otherwise on single key "" is returnded for all reads */
-static
-rc_t Fastq3ReadSplitter_GetKeySet(const SRASplitter* cself, const SRASplitter_Keys** key, uint32_t* keys, spotid_t spot, const readmask_t* readmask)
+static rc_t Fastq3ReadSplitter_GetKeySet( const SRASplitter* cself, const SRASplitter_Keys** key,
+            uint32_t* keys, spotid_t spot, const readmask_t* readmask )
 {
     rc_t rc = 0;
-    Fastq3ReadSplitter* self = (Fastq3ReadSplitter*)cself;
+    Fastq3ReadSplitter* self = ( Fastq3ReadSplitter* )cself;
     const size_t key_offset = 5;
 
-    if( self == NULL || key == NULL ) {
-        rc = RC(rcExe, rcNode, rcExecuting, rcParam, rcInvalid);
-    } else {
+    if ( self == NULL || key == NULL )
+    {
+        rc = RC( rcExe, rcNode, rcExecuting, rcParam, rcInvalid );
+    }
+    else
+    {
         uint32_t num_reads = 0;
 
         *keys = 0;
-        if( Fastq3ReadSplitter_key_buf == NULL ) {
+        if ( Fastq3ReadSplitter_key_buf == NULL )
+        {
             /* initial alloc key_buf: "  1\0  2\0...\0  9\0 10\0 11\0...\03220..\08192\0" */
-            if( nreads_max > 9999 ) {
+            if ( nreads_max > 9999 )
+            {
                 /* key_offset and sprintf format size are insufficient for keys longer than 4 digits */
-                rc = RC(rcExe, rcNode, rcExecuting, rcBuffer, rcInsufficient);
-            } else if( (Fastq3ReadSplitter_key_buf = malloc(nreads_max * key_offset)) == NULL ) {
-                rc = RC(rcExe, rcNode, rcExecuting, rcMemory, rcExhausted);
-            } else {
-                /* fill buffer w/keys */
-                int i;
-                char* p = Fastq3ReadSplitter_key_buf;
-                for(i = 1; rc == 0 && i <= nreads_max; i++) {
-                    if( sprintf(p, "%4u", i) <= 0 ) {
-                        rc = RC(rcExe, rcNode, rcExecuting, rcTransfer, rcIncomplete);
+                rc = RC( rcExe, rcNode, rcExecuting, rcBuffer, rcInsufficient );
+            }
+            else
+            {
+                Fastq3ReadSplitter_key_buf = malloc( nreads_max * key_offset );
+                if ( Fastq3ReadSplitter_key_buf == NULL )
+                {
+                    rc = RC( rcExe, rcNode, rcExecuting, rcMemory, rcExhausted );
+                }
+                else
+                {
+                    /* fill buffer w/keys */
+                    int i;
+                    char* p = Fastq3ReadSplitter_key_buf;
+                    for ( i = 1; rc == 0 && i <= nreads_max; i++ )
+                    {
+                        if ( sprintf( p, "%4u", i ) <= 0 )
+                        {
+                            rc = RC( rcExe, rcNode, rcExecuting, rcTransfer, rcIncomplete );
+                        }
+                        p += key_offset;
                     }
-                    p += key_offset;
                 }
             }
         }
-        if( rc == 0 && (rc = FastqReaderSeekSpot(self->reader, spot)) == 0 ) {
-            if( (rc = FastqReader_SpotInfo(self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads)) == 0 ) {
-                uint32_t readId, good  = 0;
-                const uint32_t max_reads = sizeof(self->keys) /sizeof(self->keys[0]);
 
-                SRA_DUMP_DBG(3, ("%s %u row reads:", __func__, spot));
-                for(readId = 0; rc == 0 && readId < num_reads && good < max_reads; readId++) {
-                    rc = FastqReader_SpotReadInfo(self->reader, readId + 1, NULL, NULL, NULL, NULL, NULL);
-                    if( !isset_readmask(readmask, readId) ) {
-                        continue;
-                    }
-                    self->keys[good].key = &Fastq3ReadSplitter_key_buf[good * key_offset];
-                    while( self->keys[good].key[0] == ' ' && self->keys[good].key[0] != '\0' ) {
-                        self->keys[good].key++;
+        if ( rc == 0 )
+        {
+            rc = FastqReaderSeekSpot( self->reader, spot );
+            if ( rc == 0 )
+            {
+                rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads );
+                if ( rc == 0 )
+                {
+                    uint32_t readId, good  = 0;
+                    const uint32_t max_reads = sizeof( self->keys ) /sizeof( self->keys[ 0 ] );
+
+                    SRA_DUMP_DBG( 3, ( "%s %u row reads:", __func__, spot ) );
+                    for ( readId = 0; rc == 0 && readId < num_reads && good < max_reads; readId++ )
+                    {
+                        rc = FastqReader_SpotReadInfo( self->reader, readId + 1, NULL, NULL, NULL, NULL, NULL );
+                        if ( !isset_readmask( readmask, readId ) )
+                        {
+                            continue;
+                        }
+                        self->keys[ good ].key = &Fastq3ReadSplitter_key_buf[ good * key_offset ];
+                        while ( self->keys[ good ].key[ 0 ] == ' ' && self->keys[good].key[ 0 ] != '\0' )
+                        {
+                            self->keys[ good ].key++;
+                        }
+                        clear_readmask( self->keys[ good ].readmask );
+                        set_readmask( self->keys[ good ].readmask, readId );
+                        SRA_DUMP_DBG( 3, ( " key['%s']+=%u", self->keys[ good ].key, readId ) );
+                        good++;
                     }
-                    clear_readmask(self->keys[good].readmask);
-                    set_readmask(self->keys[good].readmask, readId);
-                    SRA_DUMP_DBG(3, (" key['%s']+=%u", self->keys[good].key, readId));
-                    good++;
-                }
-                if( rc == 0 ) {
-                    *key = self->keys;
-                    *keys = good;
-                    if( good != max_reads ) {
-                        /* some are short -> reset keys to same value for all valid reads */
-                        /* run has just one read -> no suffix */
-                        /* or single file was requested */
-                        for(readId = 0; readId < good; readId++) {
-                            self->keys[readId].key = "";
+                    if ( rc == 0 )
+                    {
+                        *key = self->keys;
+                        *keys = good;
+                        if ( good != max_reads )
+                        {
+                            /* some are short -> reset keys to same value for all valid reads */
+                            /* run has just one read -> no suffix */
+                            /* or single file was requested */
+                            for ( readId = 0; readId < good; readId++ )
+                            {
+                                self->keys[ readId ].key = "";
+                            }
+                            SRA_DUMP_DBG( 3, ( " all keys joined to ''" ) );
                         }
-                        SRA_DUMP_DBG(3, (" all keys joined to ''"));
                     }
+                    SRA_DUMP_DBG( 3, ( "\n" ) );
                 }
-                SRA_DUMP_DBG(3, ("\n"));
             }
-        } else if( GetRCState(rc) == rcNotFound ) {
-            SRA_DUMP_DBG(3, ("%s skipped %u row\n", __func__, spot));
+            else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+            {
+                SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
+                rc = 0;
+            }
+        }
+        else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+        {
+            SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
             rc = 0;
         }
     }
     return rc;
 }
 
-typedef struct Fastq3ReadSplitterFactory_struct {
+typedef struct Fastq3ReadSplitterFactory_struct
+{
     const char* accession;
     const SRATable* table;
     const FastqReader* reader;
 } Fastq3ReadSplitterFactory;
 
-static
-rc_t Fastq3ReadSplitterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t Fastq3ReadSplitterFactory_Init( const SRASplitterFactory* cself )
 {
     rc_t rc = 0;
-    Fastq3ReadSplitterFactory* self = (Fastq3ReadSplitterFactory*)cself;
+    Fastq3ReadSplitterFactory* self = ( Fastq3ReadSplitterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
-    } else {
-        rc = FastqReaderMake(&self->reader, self->table, self->accession,
-                             /* preserve orig spot format to save on conversions */
-                             FastqArgs.is_platform_cs_native, false, FastqArgs.fasta, false, 
-                             false, !FastqArgs.applyClip, 0,
-                             FastqArgs.offset, '\0', 0, 0);
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = FastqReaderMake( &self->reader, self->table, self->accession,
+                              /* preserve orig spot format to save on conversions */
+                              FastqArgs.is_platform_cs_native, false, FastqArgs.fasta > 0, false, 
+                              false, !FastqArgs.applyClip, 0,
+                              FastqArgs.offset, '\0', 0, 0 );
     }
     return rc;
 }
 
-static
-rc_t Fastq3ReadSplitterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t Fastq3ReadSplitterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
 {
     rc_t rc = 0;
-    Fastq3ReadSplitterFactory* self = (Fastq3ReadSplitterFactory*)cself;
+    Fastq3ReadSplitterFactory* self = ( Fastq3ReadSplitterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
-    } else {
-        if( (rc = SRASplitter_Make(splitter, sizeof(Fastq3ReadSplitter), NULL, Fastq3ReadSplitter_GetKeySet, NULL, NULL)) == 0 ) {
-            ((Fastq3ReadSplitter*)(*splitter))->reader = self->reader;
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make( splitter, sizeof( Fastq3ReadSplitter ),
+                               NULL, Fastq3ReadSplitter_GetKeySet, NULL, NULL );
+        if ( rc == 0 )
+        {
+            ( (Fastq3ReadSplitter*)(*splitter) )->reader = self->reader;
         }
     }
     return rc;
 }
 
-static
-void Fastq3ReadSplitterFactory_Release(const SRASplitterFactory* cself)
+
+static void Fastq3ReadSplitterFactory_Release( const SRASplitterFactory* cself )
 {
-    if( cself != NULL ) {
-        Fastq3ReadSplitterFactory* self = (Fastq3ReadSplitterFactory*)cself;
-        FastqReaderWhack(self->reader);
-        free(Fastq3ReadSplitter_key_buf);
+    if ( cself != NULL )
+    {
+        Fastq3ReadSplitterFactory* self = ( Fastq3ReadSplitterFactory* )cself;
+        FastqReaderWhack( self->reader );
+        free( Fastq3ReadSplitter_key_buf );
     }
 }
 
-static
-rc_t Fastq3ReadSplitterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table)
+
+static rc_t Fastq3ReadSplitterFactory_Make( const SRASplitterFactory** cself,
+                    const char* accession, const SRATable* table )
 {
     rc_t rc = 0;
     Fastq3ReadSplitterFactory* obj = NULL;
 
-    if( cself == NULL || accession == NULL || table == NULL ) {
-        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
-    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterRead, sizeof(*obj),
-                                             Fastq3ReadSplitterFactory_Init,
-                                             Fastq3ReadSplitterFactory_NewObj,
-                                             Fastq3ReadSplitterFactory_Release)) == 0 ) {
-        obj = (Fastq3ReadSplitterFactory*)*cself;
-        obj->accession = accession;
-        obj->table = table;
+    if ( cself == NULL || accession == NULL || table == NULL ) 
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterRead, sizeof( *obj ),
+                                      Fastq3ReadSplitterFactory_Init,
+                                      Fastq3ReadSplitterFactory_NewObj,
+                                      Fastq3ReadSplitterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = ( Fastq3ReadSplitterFactory* )*cself;
+            obj->accession = accession;
+            obj->table = table;
+        }
     }
     return rc;
 }
 
+
 /* ============== FASTQ formatter object  ============================ */
 
-typedef struct FastqFormatterSplitter_struct {
+
+typedef struct FastqFormatterSplitter_struct
+{
     const char* accession;
     const FastqReader* reader;
-    char l[4][1024 * 1024];
+    KDataBuffer* b[ 5 ];
+    size_t bsz[ 5 ]; /* fifth is for fasta line wrap */
 } FastqFormatterSplitter;
 
-static
-rc_t FastqFormatterSplitter_DumpByRead(const SRASplitter* cself, spotid_t spot, const readmask_t* readmask)
+
+static rc_t FastqFormatterSplitter_WrapLine( const KDataBuffer* src, size_t src_sz,
+                                             KDataBuffer* dst, size_t* dst_sz, const uint64_t width )
 {
     rc_t rc = 0;
-    FastqFormatterSplitter* self = (FastqFormatterSplitter*)cself;
+    size_t sz = src_sz + ( src_sz - 1 ) / width;
 
-    if( self == NULL ) {
-        rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
-    } else {
-        if( (rc = FastqReaderSeekSpot(self->reader, spot)) == 0 ) {
-            if( (rc = SRASplitter_FileActivate(cself, FastqArgs.file_extension)) == 0 ) {
+    if ( KDataBufferBytes( dst ) < sz )
+    {
+        SRA_DUMP_DBG( 10, ( "%s grow buffer from %u to %u\n", __func__, KDataBufferBytes( dst ), sz + 10 ) );
+        rc = KDataBufferResize( dst, sz + 10 );
+    }
+    if ( rc == 0 )
+    {
+        const char* s = src->base;
+        char* d = dst->base;
+        *dst_sz = sz = src_sz;
+        while ( sz > 0 )
+        {
+            memcpy( d, s, sz > width ? width : sz );
+            if ( sz <= width )
+            {
+                break;
+            }
+            d += width;
+            *d++ = '\n';
+            *dst_sz = *dst_sz + 1;
+            s += width;
+            sz -= width;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t FastqFormatterSplitter_DumpByRead( const SRASplitter* cself, spotid_t spot, const readmask_t* readmask )
+{
+    rc_t rc = 0;
+    FastqFormatterSplitter* self = ( FastqFormatterSplitter* )cself;
+
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else 
+    {
+        rc = FastqReaderSeekSpot( self->reader, spot );
+        if ( rc == 0 )
+        {
+            rc = SRASplitter_FileActivate( cself, FastqArgs.file_extension );
+            if ( rc == 0 )
+            {
                 DeflineData def_data;
                 const char* spot_name = NULL, *spot_group = NULL, *read_name = NULL;
                 uint32_t readIdx, spot_len = 0;
                 uint32_t num_reads, readId, k;
-                size_t lsz[4], sname_sz, sgrp_sz;
+                size_t sname_sz, sgrp_sz;
                 INSDC_coord_len rlabel_sz = 0, read_len = 0;
 
-                if( FastqArgs.b_defline || FastqArgs.q_defline ) {
-                    rc = FastqReader_SpotInfo(self->reader, &spot_name, &sname_sz, &spot_group, &sgrp_sz, &spot_len, &num_reads);
-                } else {
-                    rc = FastqReader_SpotInfo(self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads);
+                if ( FastqArgs.b_defline || FastqArgs.q_defline )
+                {
+                    rc = FastqReader_SpotInfo( self->reader, &spot_name, &sname_sz, &spot_group, &sgrp_sz, &spot_len, &num_reads );
+                }
+                else
+                {
+                    rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads );
                 }
 
-                for(readId = 1, readIdx = 1; rc == 0 && readId <= num_reads; readId++, readIdx++) {
-                    if( !isset_readmask(readmask, readId - 1) ) {
+                for ( readId = 1, readIdx = 1; rc == 0 && readId <= num_reads; readId++, readIdx++ )
+                {
+                    if ( !isset_readmask( readmask, readId - 1 ) )
+                    {
                         continue;
                     }
-                    if( FastqArgs.b_defline || FastqArgs.q_defline ) {
-                        if( (rc = FastqReader_SpotReadInfo(self->reader, readId, NULL, &read_name, &rlabel_sz, NULL, &read_len)) == 0 ) {
-                            rc = Defline_Bind(&def_data, self->accession, &spot, spot_name, sname_sz, spot_group, sgrp_sz,
-                                              &spot_len, &readIdx, read_name, rlabel_sz, &read_len);
+                    if ( FastqArgs.b_defline || FastqArgs.q_defline )
+                    {
+                        rc = FastqReader_SpotReadInfo( self->reader, readId, NULL, &read_name, &rlabel_sz, NULL, &read_len );
+                        if ( rc == 0 )
+                        {
+                            rc = Defline_Bind( &def_data, self->accession, &spot, spot_name, sname_sz, spot_group, sgrp_sz,
+                                               &spot_len, &readIdx, read_name, rlabel_sz, &read_len );
                         }
                     }
-                    if( rc == 0 ) {
-                        if( FastqArgs.b_defline ) {
-                            rc = Defline_Build(FastqArgs.b_defline, &def_data, self->l[0], sizeof(self->l[0]), &lsz[0]);
-                        } else {
-                            rc = FastqReaderBaseName(self->reader, readId, &FastqArgs.dumpCs, self->l[0], sizeof(self->l[0]), &lsz[0]);
+                    if ( rc == 0 )
+                    {
+                        if ( FastqArgs.b_defline )
+                        {
+                            IF_BUF( ( Defline_Build( FastqArgs.b_defline, &def_data, self->b[0]->base,
+                                      KDataBufferBytes( self->b[0] ), &self->bsz[0] ) ), self->b[0], self->bsz[0] );
+                        }
+                        else
+                        {
+                            IF_BUF( ( FastqReaderBaseName( self->reader, readId, &FastqArgs.dumpCs, self->b[0]->base,
+                                      KDataBufferBytes( self->b[0] ), &self->bsz[0] ) ), self->b[0], self->bsz[0] );
                         }
                     }
-                    if( rc == 0 ) {
-                        rc = FastqReaderBase(self->reader, readId, self->l[1], sizeof(self->l[1]), &lsz[1]);
+                    if ( rc == 0 )
+                    {
+                        if ( FastqArgs.fasta > 0 )
+                        {
+                            IF_BUF( ( FastqReaderBase( self->reader, readId, self->b[4]->base, KDataBufferBytes( self->b[4] ),
+                                      &self->bsz[4] ) ), self->b[4], self->bsz[4] )
+                            {
+                                rc = FastqFormatterSplitter_WrapLine( self->b[4], self->bsz[4], self->b[1], &self->bsz[1], FastqArgs.fasta );
+                            }
+                        }
+                        else
+                        {
+                            IF_BUF( ( FastqReaderBase( self->reader, readId, self->b[1]->base,
+                                      KDataBufferBytes( self->b[1] ), &self->bsz[1] ) ), self->b[1], self->bsz[1] );
+                        }
                     }
-                    if( !FastqArgs.fasta && rc == 0 ) {
-                        if( FastqArgs.q_defline ) {
-                            rc = Defline_Build(FastqArgs.q_defline, &def_data, self->l[2], sizeof(self->l[2]), &lsz[2]);
-                        } else {
-                            rc = FastqReaderQualityName(self->reader, readId, &FastqArgs.dumpCs, self->l[2], sizeof(self->l[2]), &lsz[2]);
+                    if ( !FastqArgs.fasta && rc == 0 )
+                    {
+                        if ( FastqArgs.q_defline )
+                        {
+                            IF_BUF( ( Defline_Build( FastqArgs.q_defline, &def_data, self->b[2]->base,
+                                      KDataBufferBytes( self->b[2] ), &self->bsz[2] ) ), self->b[2], self->bsz[2] );
+                        }
+                        else
+                        {
+                            IF_BUF( ( FastqReaderQualityName( self->reader, readId, &FastqArgs.dumpCs, self->b[2]->base,
+                                      KDataBufferBytes( self->b[2] ), &self->bsz[2] ) ), self->b[2], self->bsz[2] );
                         }
-                        if( rc == 0 ) {
-                            rc = FastqReaderQuality(self->reader, readId, self->l[3], sizeof(self->l[3]), &lsz[3]);
+                        if ( rc == 0 )
+                        {
+                            IF_BUF( ( FastqReaderQuality( self->reader, readId, self->b[3]->base,
+                                      KDataBufferBytes( self->b[3] ), &self->bsz[3] ) ), self->b[3], self->bsz[3] );
                         }
-                    } else if( self->l[0][0] == '@' ) {
-                        self->l[0][0] = '>';
                     }
-                    for(k = 0; rc == 0 && k < (FastqArgs.fasta ? 2 : 4); k++) {
-                        if( (rc = SRASplitter_FileWrite(cself, spot, self->l[k], lsz[k])) == 0 ) {
-                            rc = SRASplitter_FileWrite(cself, spot, "\n", 1);
+                    else if ( ( (char*)(self->b[0]->base))[0] == '@' )
+                    {
+                        ( (char*)(self->b[0]->base) )[0] = '>';
+                    }
+                    for ( k = 0; rc == 0 && k < ( FastqArgs.fasta ? 2 : 4); k++ )
+                    {
+                        rc = SRASplitter_FileWrite( cself, spot, self->b[ k ]->base, self->bsz[ k ] );
+                        if ( rc == 0 )
+                        {
+                            rc = SRASplitter_FileWrite( cself, spot, "\n", 1 );
                         }
                     }
                 }
             }
-        } else if( GetRCState(rc) == rcNotFound ) {
-            SRA_DUMP_DBG(3, ("%s skipped %u row\n", __func__, spot));
+        }
+        else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+        {
+            SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
             rc = 0;
         }
     }
     return rc;
 }
 
-static
-rc_t FastqFormatterSplitter_DumpBySpot(const SRASplitter* cself, spotid_t spot, const readmask_t* readmask)
+
+static rc_t Fasta_dump( const SRASplitter* cself, FastqFormatterSplitter* self, spotid_t spot, uint32_t columns )
+{
+    uint32_t readId;
+    rc_t rc = FastqFormatterSplitter_WrapLine( self->b[4], self->bsz[4], self->b[1], &self->bsz[1], columns );
+    for ( readId = 0; rc == 0 && readId < 2; readId++ )
+    {
+        rc = SRASplitter_FileWrite( cself, spot, self->b[readId]->base, self->bsz[ readId ] );
+        if ( rc == 0 )
+        {
+            rc = SRASplitter_FileWrite( cself, spot, "\n", 1 );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t FastqFormatterSplitter_DumpBySpot( const SRASplitter* cself, spotid_t spot, const readmask_t* readmask )
 {
     rc_t rc = 0;
-    FastqFormatterSplitter* self = (FastqFormatterSplitter*)cself;
+    FastqFormatterSplitter* self = ( FastqFormatterSplitter* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
-    } else {
-        if( (rc = FastqReaderSeekSpot(self->reader, spot)) == 0 ) {
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = FastqReaderSeekSpot( self->reader, spot );
+        if ( rc == 0 )
+        {
             uint32_t num_reads, readId;
 
-            rc = FastqReader_SpotInfo(self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads);
-            for(readId = 0; rc == 0 && readId < num_reads; readId++) {
+            rc = FastqReader_SpotInfo( self->reader, NULL, NULL, NULL, NULL, NULL, &num_reads );
+            for ( readId = 0; rc == 0 && readId < num_reads; readId++ )
+            {
                 /* if any read in readmask is not set - skip whole spot */
-                if( !isset_readmask(readmask, readId) ) {
+                if ( !isset_readmask( readmask, readId ) )
+                {
                     return 0;
                 }
             }
-            if( rc == 0 && (rc = SRASplitter_FileActivate(cself, FastqArgs.file_extension)) == 0 ) {
-                DeflineData def_data;
-                const char* spot_name = NULL, *spot_group = NULL;
-                uint32_t spot_len = 0;
-                size_t lsz[4], writ, sname_sz, sgrp_sz;
-                const size_t lmax = sizeof(self->l[0]);
-
-                if( FastqArgs.b_defline || FastqArgs.q_defline ) {
-                    if( (rc = FastqReader_SpotInfo(self->reader, &spot_name, &sname_sz, &spot_group, &sgrp_sz, &spot_len, NULL)) == 0 ) {
-                        rc = Defline_Bind(&def_data, self->accession, &spot, spot_name, sname_sz, spot_group, sgrp_sz, 
-                                          &spot_len, &readId, NULL, 0, &spot_len);
-                    }
-                }
-                if( rc == 0 ) {
-                    if( FastqArgs.b_defline ) {
-                        rc = Defline_Build(FastqArgs.b_defline, &def_data, self->l[0], sizeof(self->l[0]), &lsz[0]);
-                    } else {
-                        rc = FastqReaderBaseName(self->reader, 0, &FastqArgs.dumpCs, self->l[0], sizeof(self->l[0]), &lsz[0]);
+            if ( rc == 0 )
+            {
+                rc = SRASplitter_FileActivate( cself, FastqArgs.file_extension );
+                if ( rc == 0 )
+                {
+                    DeflineData def_data;
+                    const char* spot_name = NULL, *spot_group = NULL;
+                    uint32_t spot_len = 0;
+                    size_t writ, sname_sz, sgrp_sz;
+                    const int base_i = FastqArgs.fasta ? 4 : 1;
+
+                    if ( FastqArgs.b_defline || FastqArgs.q_defline )
+                    {
+                        rc = FastqReader_SpotInfo( self->reader, &spot_name, &sname_sz,
+                                                   &spot_group, &sgrp_sz, &spot_len, NULL );
+                        if ( rc == 0 )
+                        {
+                            rc = Defline_Bind( &def_data, self->accession, &spot, spot_name,
+                                               sname_sz, spot_group, sgrp_sz, 
+                                               &spot_len, &readId, NULL, 0, &spot_len );
+                        }
                     }
-                    lsz[1] = 0;
-                    if( !FastqArgs.fasta && rc == 0 ) {
-                        if( FastqArgs.q_defline ) {
-                            rc = Defline_Build(FastqArgs.q_defline, &def_data, self->l[2], sizeof(self->l[2]), &lsz[2]);
-                        } else {
-                            rc = FastqReaderQualityName(self->reader, 0, &FastqArgs.dumpCs, self->l[2], sizeof(self->l[2]), &lsz[2]);
+
+                    if ( rc == 0 )
+                    {
+                        if ( FastqArgs.b_defline )
+                        {
+                            IF_BUF( ( Defline_Build( FastqArgs.b_defline, &def_data, self->b[0]->base,
+                                      KDataBufferBytes( self->b[0] ), &self->bsz[0] ) ), self->b[0], self->bsz[0] );
+                        }
+                        else
+                        {
+                            IF_BUF( ( FastqReaderBaseName( self->reader, 0, &FastqArgs.dumpCs, self->b[0]->base,
+                                      KDataBufferBytes( self->b[0] ), &self->bsz[0] ) ), self->b[0], self->bsz[0] );
+                        }
+                        self->bsz[ base_i ] = 0;
+                        if ( !FastqArgs.fasta && rc == 0 )
+                        {
+                            if ( FastqArgs.q_defline )
+                            {
+                                IF_BUF( ( Defline_Build( FastqArgs.q_defline, &def_data, self->b[2]->base,
+                                          KDataBufferBytes( self->b[2] ), &self->bsz[2] ) ), self->b[2], self->bsz[2] );
+                            }
+                            else
+                            {
+                                IF_BUF( ( FastqReaderQualityName( self->reader, 0, &FastqArgs.dumpCs, self->b[2]->base,
+                                          KDataBufferBytes( self->b[2] ), &self->bsz[2] ) ), self->b[2], self->bsz[2] );
+                            }
+                            self->bsz[3] = 0;
+                        }
+                        else if ( ( (char*)(self->b[0]->base) )[0] == '@' )
+                        {
+                            ( (char*)(self->b[0]->base) )[0] = '>';
                         }
-                        lsz[3] = 0;
-                    } else if( self->l[0][0] == '@' ) {
-                        self->l[0][0] = '>';
                     }
-                }
-                for(readId = 1; rc == 0 && readId <= num_reads; readId++) {
-                    rc = FastqReaderBase(self->reader, readId, &self->l[1][lsz[1]], lmax - lsz[1], &writ);
-                    lsz[1] += writ;
-                    if( !FastqArgs.fasta && rc == 0 ) {
-                        rc = FastqReaderQuality(self->reader, readId, &self->l[3][lsz[3]], lmax - lsz[3], &writ);
-                        lsz[3] += writ;
+
+                    for ( readId = 1; rc == 0 && readId <= num_reads; readId++ )
+                    {
+                        IF_BUF( ( FastqReaderBase( self->reader, readId, &( (char*)(self->b[base_i]->base) )[ self->bsz[ base_i ] ],
+                                  KDataBufferBytes( self->b[ base_i ] ) - self->bsz[ base_i ], &writ) ), self->b[ base_i ], self->bsz[ base_i ] + writ )
+                        {
+                            self->bsz[base_i] += writ;
+                            if ( !FastqArgs.fasta )
+                            {
+                                IF_BUF( ( FastqReaderQuality( self->reader, readId, &( (char*)(self->b[3]->base) )[ self->bsz[3] ],
+                                        KDataBufferBytes( self->b[3] ) - self->bsz[3], &writ ) ), self->b[3], self->bsz[3] + writ )
+                                {
+                                    self->bsz[ 3 ] += writ;
+                                }
+                            }
+                        }
                     }
-                }
-                for(readId = 0; rc == 0 && readId < (FastqArgs.fasta ? 2 : 4); readId++) {
-                    if( (rc = SRASplitter_FileWrite(cself, spot, self->l[readId], lsz[readId])) == 0 ) {
-                        rc = SRASplitter_FileWrite(cself, spot, "\n", 1);
+
+                    if ( rc == 0 )
+                    {
+                        if ( FastqArgs.fasta > 0 )
+                        {
+                            /* special printint of fasta-output ( line-wrap... ) */
+                            rc = Fasta_dump( cself, self, spot, FastqArgs.fasta );
+                        }
+                        else
+                        {
+                            for ( readId = 0; rc == 0 && readId < 4; readId++ )
+                            {
+                                rc = SRASplitter_FileWrite( cself, spot, self->b[readId]->base, self->bsz[ readId ] );
+                                if ( rc == 0 )
+                                {
+                                    rc = SRASplitter_FileWrite( cself, spot, "\n", 1 );
+                                }
+                            }
+                        }
                     }
                 }
             }
-        } else if( GetRCState(rc) == rcNotFound ) {
-            SRA_DUMP_DBG(3, ("%s skipped %u row\n", __func__, spot));
+        }
+        else if ( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound )
+        {
+            SRA_DUMP_DBG( 3, ( "%s skipped %u row\n", __func__, spot ) );
             rc = 0;
         }
     }
     return rc;
 }
 
-typedef struct FastqFormatterFactory_struct {
+
+typedef struct FastqFormatterFactory_struct
+{
     const char* accession;
     const SRATable* table;
     const FastqReader* reader;
+    KDataBuffer buf[ 5 ]; /* fifth is for fasta line wrap */
 } FastqFormatterFactory;
 
-static
-rc_t FastqFormatterFactory_Init(const SRASplitterFactory* cself)
+
+static rc_t FastqFormatterFactory_Init( const SRASplitterFactory* cself )
 {
     rc_t rc = 0;
-    FastqFormatterFactory* self = (FastqFormatterFactory*)cself;
+    FastqFormatterFactory* self = ( FastqFormatterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
-    } else {
-        rc = FastqReaderMake(&self->reader, self->table, self->accession,
-                             FastqArgs.dumpCs, FastqArgs.dumpOrigFmt, FastqArgs.fasta, FastqArgs.dumpCs,
-                             FastqArgs.readIds, !FastqArgs.applyClip, 0,
-                             FastqArgs.offset, FastqArgs.desiredCsKey[0], 0, 0);
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = FastqReaderMake( &self->reader, self->table, self->accession,
+                     FastqArgs.dumpCs, FastqArgs.dumpOrigFmt, FastqArgs.fasta > 0, FastqArgs.dumpCs,
+                     FastqArgs.readIds, !FastqArgs.applyClip, 0,
+                     FastqArgs.offset, FastqArgs.desiredCsKey[ 0 ], 0, 0 );
+        if ( rc == 0 )
+        {
+            int i;
+            for( i = 0; rc == 0 && i < sizeof( self->buf ) / sizeof( self->buf[ 0 ] ); i++ )
+            {
+                rc = KDataBufferMakeBytes( &self->buf[ i ], DATABUFFERINITSIZE );
+            }
+        }
     }
     return rc;
 }
 
-static
-rc_t FastqFormatterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitter** splitter)
+
+static rc_t FastqFormatterFactory_NewObj( const SRASplitterFactory* cself, const SRASplitter** splitter )
 {
     rc_t rc = 0;
-    FastqFormatterFactory* self = (FastqFormatterFactory*)cself;
+    FastqFormatterFactory* self = ( FastqFormatterFactory* )cself;
 
-    if( self == NULL ) {
-        rc = RC(rcExe, rcType, rcExecuting, rcParam, rcNull);
-    } else {
-        if( (rc = SRASplitter_Make(splitter, sizeof(FastqFormatterSplitter), NULL, NULL,
-                                   FastqArgs.split_spot ?
-                                            FastqFormatterSplitter_DumpByRead :
-                                            FastqFormatterSplitter_DumpBySpot, NULL)) == 0 ) {
-            ((FastqFormatterSplitter*)(*splitter))->accession = self->accession;
-            ((FastqFormatterSplitter*)(*splitter))->reader = self->reader;
+    if ( self == NULL )
+    {
+        rc = RC( rcExe, rcType, rcExecuting, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitter_Make ( splitter, sizeof( FastqFormatterSplitter ), NULL, NULL,
+                                FastqArgs.split_spot ?
+                                    FastqFormatterSplitter_DumpByRead :
+                                    FastqFormatterSplitter_DumpBySpot, NULL );
+        if ( rc == 0 )
+        {
+            int i;
+            ( (FastqFormatterSplitter*)(*splitter) )->accession = self->accession;
+            ( (FastqFormatterSplitter*)(*splitter) )->reader = self->reader;
+            for ( i = 0; i < sizeof( self->buf ) / sizeof( self->buf[ 0 ] ); i++ )
+            {
+                ( (FastqFormatterSplitter*)(*splitter) )->b[ i ] = &self->buf[ i ];
+            }
         }
     }
     return rc;
 }
 
-static
-void FastqFormatterFactory_Release(const SRASplitterFactory* cself)
+
+static void FastqFormatterFactory_Release( const SRASplitterFactory* cself )
 {
-    if( cself != NULL ) {
-        FastqFormatterFactory* self = (FastqFormatterFactory*)cself;
-        FastqReaderWhack(self->reader);
+    if ( cself != NULL )
+    {
+        int i;
+        FastqFormatterFactory* self = ( FastqFormatterFactory* )cself;
+        FastqReaderWhack( self->reader );
+        for ( i = 0; i < sizeof( self->buf ) / sizeof( self->buf[ 0 ] ); i++ )
+        {
+            KDataBufferWhack( &self->buf[ i ] );
+        }
     }
 }
 
-static
-rc_t FastqFormatterFactory_Make(const SRASplitterFactory** cself, const char* accession, const SRATable* table)
+
+static rc_t FastqFormatterFactory_Make( const SRASplitterFactory** cself,
+                const char* accession, const SRATable* table )
 {
     rc_t rc = 0;
     FastqFormatterFactory* obj = NULL;
 
-    if( cself == NULL || accession == NULL || table == NULL ) {
-        rc = RC(rcExe, rcType, rcConstructing, rcParam, rcNull);
-    } else if( (rc = SRASplitterFactory_Make(cself, eSplitterFormat, sizeof(*obj),
-                                             FastqFormatterFactory_Init,
-                                             FastqFormatterFactory_NewObj,
-                                             FastqFormatterFactory_Release)) == 0 ) {
-        obj = (FastqFormatterFactory*)*cself;
-        obj->accession = accession;
-        obj->table = table;
+    if ( cself == NULL || accession == NULL || table == NULL )
+    {
+        rc = RC( rcExe, rcType, rcConstructing, rcParam, rcNull );
+    }
+    else
+    {
+        rc = SRASplitterFactory_Make( cself, eSplitterFormat, sizeof( *obj ),
+                                      FastqFormatterFactory_Init,
+                                      FastqFormatterFactory_NewObj,
+                                      FastqFormatterFactory_Release );
+        if ( rc == 0 )
+        {
+            obj = (FastqFormatterFactory*)*cself;
+            obj->accession = accession;
+            obj->table = table;
+        }
     }
     return rc;
 }
 
+
 /* ### External entry points ##################################################### */
 
+
 const char UsageDefaultName[] = "fastq-dump";
 
-rc_t CC UsageSummary (const char * progname)
+
+rc_t CC UsageSummary ( const char * progname )
 {
     return 0;
 }
@@ -1974,211 +2674,306 @@ ver_t CC KAppVersion( void )
 }
 
 
-rc_t FastqDumper_Usage(const SRADumperFmt* fmt, const SRADumperFmt_Arg* core_args)
+rc_t FastqDumper_Usage( const SRADumperFmt* fmt, const SRADumperFmt_Arg* core_args, int first )
 {
     int i, j;
     /* known core options */
-    const SRADumperFmt_Arg* core[13];
-
-    memset(core, 0, sizeof(core));
-    for(i = 0; core_args[i].abbr != NULL || core_args[i].full != NULL; i++) {
-        const char* nm = core_args[i].abbr;
-        nm = nm ? nm : core_args[i].full;
-        if( strcmp(nm, "A") == 0 ) {
-            core[0] = &core_args[i];
-        } else if( strcmp(nm, "O") == 0 ) {
-            core[1] = &core_args[i];
-        } else if( strcmp(nm, "N") == 0 ) {
-            core[2] = &core_args[i];
-        } else if( strcmp(nm, "X") == 0 ) {
-            core[3] = &core_args[i];
-        } else if( strcmp(nm, "G") == 0 ) {
-            core[4] = &core_args[i];
-        } else if( strcmp(nm, "spot-groups") == 0 ) {
-            core[5] = &core_args[i];
-        } else if( strcmp(nm, "R") == 0 ) {
-            core[6] = &core_args[i];
-        } else if( strcmp(nm, "T") == 0 ) {
-            core[7] = &core_args[i];
-        } else if( strcmp(nm, "K") == 0 ) {
-            core[8] = &core_args[i];
-        } else if( strcmp(nm, "table") == 0 ) {
-            core[9] = &core_args[i];
-        } else if( strcmp(nm, "Z") == 0 ) {
-            core[10] = &core_args[i];
-        } else if( strcmp(nm, "gzip") == 0 ) {
-            core[11] = &core_args[i];
-        } else if( strcmp(nm, "bzip2") == 0 ) {
-            core[12] = &core_args[i];
+    const SRADumperFmt_Arg* core[ 13 ];
+
+    memset( (void*)core, 0, sizeof( core ) );
+    for ( i = first; core_args[i].abbr != NULL || core_args[ i ].full != NULL; i++ )
+    {
+        const char* nm = core_args[ i ].abbr;
+        nm = nm ? nm : core_args[ i ].full;
+        if ( strcmp( nm, "A" ) == 0 )
+        {
+            core[ 0 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "O" ) == 0 )
+        {
+            core[ 1 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "N" ) == 0 )
+        {
+            core[ 2 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "X" ) == 0 )
+        {
+            core[ 3 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "G" ) == 0 )
+        {
+            core[ 4 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "spot-groups" ) == 0 )
+        {
+            core[ 5 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "R" ) == 0 )
+        {
+            core[ 6 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "T" ) == 0 )
+        {
+            core[ 7 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "K" ) == 0 )
+        {
+            core[ 8 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "table" ) == 0 )
+        {
+            core[ 9 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "Z" ) == 0 )
+        {
+            core[ 10 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "gzip" ) == 0 )
+        {
+            core[ 11 ] = &core_args[ i ];
+        }
+        else if ( strcmp( nm, "bzip2" ) == 0 )
+        {
+            core[ 12 ] = &core_args[ i ];
         }
     }
 
 #define OARG(arg,msg) (arg ? HelpOptionLine((arg)->abbr, (arg)->full, (arg)->param, \
                        msg ? msg : (const char**)((arg)->descr)) : ((void)(0)))
 
-    OUTMSG(("INPUT\n"));
-    OARG(core[0], NULL);
-    OARG(core[9], NULL);
-
-    OUTMSG(("\nPROCESSING\n"));
-    OUTMSG(("\nRead Splitting                     Sequence data may be used in raw form or\n"));
-    OUTMSG(("                                     split into individual reads\n"));
-    OARG(&fmt->arg_desc[0], NULL);
-
-    OUTMSG(("\nFull Spot Filters                  Applied to the full spot independently\n"));
-    OUTMSG(("                                     of --%s\n", fmt->arg_desc[0].full));
-    OARG(core[2], NULL);
-    OARG(core[3], NULL);
-    OARG(core[5], NULL);
-    OARG(&fmt->arg_desc[1], NULL);
-
-    OUTMSG(("\nCommon Filters                     Applied to spots when --%s is not\n",
-                                                  fmt->arg_desc[0].full));
-    OUTMSG(("                                     set, otherwise - to individual reads\n"));
-    OARG(&fmt->arg_desc[2], NULL);
-    OARG(core[6], NULL);
-    OARG(&fmt->arg_desc[3], NULL);
-
-    OUTMSG(("\nFilters based on alignments        Filters are active when alignment\n"));
-    OUTMSG(("                                     data are present\n"));
-    OARG(&fmt->arg_desc[16], NULL);
-    OARG(&fmt->arg_desc[17], NULL);
-    OARG(&fmt->arg_desc[18], NULL);
-    OARG(&fmt->arg_desc[19], NULL);
-
-    OUTMSG(("\nFilters for individual reads       Applied only with --%s set\n",
-                                                  fmt->arg_desc[0].full));
-    OARG(&fmt->arg_desc[4], NULL);
-
-    OUTMSG(("\nOUTPUT\n"));
-    OARG(core[1], NULL);
-    OARG(core[10], NULL);
-    OARG(core[11], NULL);
-    OARG(core[12], NULL);
-
-    OUTMSG(("\nMultiple File Options              Setting these options will produce more\n"));
-    OUTMSG(("                                     than 1 file, each of which will be suffixed\n"));
-    OUTMSG(("                                     according to splitting criteria.\n"));
-    OARG(&fmt->arg_desc[5], NULL);
-    OARG(&fmt->arg_desc[6], NULL);
-    OARG(core[4], NULL);
-    OARG(core[6], NULL);
-    OARG(core[7], NULL);
-    OARG(core[8], NULL);
-
-    OUTMSG(("\nFORMATTING\n"));
-    OUTMSG(("\nSequence\n"));
-    OARG(&fmt->arg_desc[7], NULL);
-    OARG(&fmt->arg_desc[8], NULL);
-
-    OUTMSG(("\nQuality\n"));
-    OARG(&fmt->arg_desc[9], NULL);
-    OARG(&fmt->arg_desc[10], NULL);
-
-    OUTMSG(("\nDefline\n"));
-    OARG(&fmt->arg_desc[11], NULL);
-    OARG(&fmt->arg_desc[12], NULL);
-    OARG(&fmt->arg_desc[13], NULL);
-    OARG(&fmt->arg_desc[14], NULL);
-    OARG(&fmt->arg_desc[15], NULL);
-
-    OUTMSG(("OTHER:\n"));
-    for(i = 0; core_args[i].abbr != NULL || core_args[i].full != NULL; i++) {
+    OUTMSG(( "INPUT\n" ));
+    OARG( core[ 0 ], NULL );
+    OARG( core[ 9 ], NULL );
+
+    OUTMSG(( "\nPROCESSING\n" ));
+    OUTMSG(( "\nRead Splitting                     Sequence data may be used in raw form or\n"));
+    OUTMSG(( "                                     split into individual reads\n" ));
+    OARG( &fmt->arg_desc[ 0 ], NULL);
+
+    OUTMSG(( "\nFull Spot Filters                  Applied to the full spot independently\n" ));
+    OUTMSG(( "                                     of --%s\n", fmt->arg_desc[0].full ));
+    OARG( core[ 2 ], NULL );
+    OARG( core[ 3 ], NULL );
+    OARG( core[ 5 ], NULL );
+    OARG( &fmt->arg_desc[ 1 ], NULL );
+
+    OUTMSG(( "\nCommon Filters                     Applied to spots when --%s is not\n",
+                                                  fmt->arg_desc[0].full ));
+    OUTMSG(( "                                     set, otherwise - to individual reads\n" ));
+    OARG( &fmt->arg_desc[ 2 ], NULL );
+    OARG( core[ 6 ], NULL );
+    OARG( &fmt->arg_desc[ 3 ], NULL );
+
+    OUTMSG(( "\nFilters based on alignments        Filters are active when alignment\n" ));
+    OUTMSG(( "                                     data are present\n" ));
+    OARG( &fmt->arg_desc[ 16 ], NULL );
+    OARG( &fmt->arg_desc[ 17 ], NULL );
+    OARG( &fmt->arg_desc[ 18 ], NULL );
+    OARG( &fmt->arg_desc[ 19 ], NULL );
+
+    OUTMSG(( "\nFilters for individual reads       Applied only with --%s set\n",
+                                                  fmt->arg_desc[0].full ));
+    OARG( &fmt->arg_desc[ 4 ], NULL );
+
+    OUTMSG(( "\nOUTPUT\n" ));
+    OARG( core[ 1 ], NULL );
+    OARG( core[ 10 ], NULL );
+    OARG( core[ 11 ], NULL  );
+    OARG( core[ 12 ], NULL);
+
+    OUTMSG(( "\nMultiple File Options              Setting these options will produce more\n" ));
+    OUTMSG(( "                                     than 1 file, each of which will be suffixed\n" ));
+    OUTMSG(( "                                     according to splitting criteria.\n" ));
+    OARG( &fmt->arg_desc[ 5 ], NULL );
+    OARG( &fmt->arg_desc[ 6 ], NULL );
+    OARG( core[ 4 ], NULL );
+    OARG( core[ 6 ], NULL );
+    OARG( core[ 7 ], NULL );
+    OARG( core[ 8 ], NULL );
+
+    OUTMSG(( "\nFORMATTING\n" ));
+    OUTMSG(( "\nSequence\n" ));
+    OARG( &fmt->arg_desc[ 7 ], NULL );
+    OARG( &fmt->arg_desc[ 8 ], NULL );
+
+    OUTMSG(( "\nQuality\n" ));
+    OARG( &fmt->arg_desc[ 9 ], NULL );
+    OARG( &fmt->arg_desc[ 10 ], NULL );
+
+    OUTMSG(( "\nDefline\n" ));
+    OARG( &fmt->arg_desc[ 11 ], NULL );
+    OARG( &fmt->arg_desc[ 12 ], NULL );
+    OARG( &fmt->arg_desc[ 13 ], NULL );
+    OARG( &fmt->arg_desc[ 14 ], NULL );
+    OARG( &fmt->arg_desc[ 15 ], NULL );
+
+    OUTMSG(( "OTHER:\n" ));
+    for ( i = first; core_args[ i ].abbr != NULL || core_args[ i ].full != NULL; i++ )
+    {
         bool print = true;
-        for(j = 0; j < sizeof(core) / sizeof(core[0]); j++) {
-            if( core[j] == &core_args[i] ) {
+        for ( j = 0; j < sizeof( core ) / sizeof( core[ 0 ] ); j++ )
+        {
+            if ( core[ j ] == &core_args[ i ] )
+            {
                 print = false;
                 break;
             }
         }
-        if( print ) {
-            OARG(&core_args[i], NULL);
+        if ( print )
+        {
+            OARG( &core_args[ i ], NULL );
         }
     }
     return 0;
 }
 
-rc_t FastqDumper_Release(const SRADumperFmt* fmt)
+
+rc_t FastqDumper_Release( const SRADumperFmt* fmt )
 {
-    if( fmt == NULL ) {
-        return RC(rcExe, rcFormatter, rcDestroying, rcParam, rcInvalid);
-    } else {
-        Defline_Release(FastqArgs.b_defline);
-        Defline_Release(FastqArgs.q_defline);
-        free(FastqArgs.alregion);
+    if ( fmt == NULL )
+    {
+        return RC( rcExe, rcFormatter, rcDestroying, rcParam, rcInvalid );
+    }
+    else
+    {
+        Defline_Release( FastqArgs.b_defline );
+        Defline_Release( FastqArgs.q_defline );
+        free( FastqArgs.alregion );
     }
     return 0;
 }
 
-bool FastqDumper_AddArg(const SRADumperFmt* fmt, GetArg* f, int* i, int argc, char *argv[])
+
+bool FastqDumper_AddArg( const SRADumperFmt* fmt, GetArg* f, int* i, int argc, char *argv[] )
 {
     const char* arg = NULL;
 
-    if( fmt == NULL || f == NULL || i == NULL || argv == NULL ) {
-        LOGERR(klogErr, RC(rcExe, rcArgv, rcReading, rcParam, rcInvalid), "null param");
+    if ( fmt == NULL || f == NULL || i == NULL || argv == NULL )
+    {
+        LOGERR( klogErr, RC( rcExe, rcArgv, rcReading, rcParam, rcInvalid ), "null param" );
         return false;
-    } else if( f(fmt, "M", "minReadLen", i, argc, argv, &arg) ) {
-        FastqArgs.minReadLen = AsciiToU32(arg, NULL, NULL);
-    } else if( f(fmt, "W", "clip", i, argc, argv, NULL) ) {
+    }
+    else if ( f( fmt, "M", "minReadLen", i, argc, argv, &arg ) )
+    {
+        FastqArgs.minReadLen = AsciiToU32( arg, NULL, NULL );
+    }
+    else if ( f( fmt, "W", "clip", i, argc, argv, NULL ) )
+    {
         FastqArgs.applyClip = true;
-    } else if( f(fmt, "F", "origfmt", i, argc, argv, NULL) ) {
+    }
+    else if ( f( fmt, "F", "origfmt", i, argc, argv, NULL ) )
+    {
         FastqArgs.dumpOrigFmt = true;
-    } else if( f(fmt, "C", "dumpcs", i, argc, argv, NULL) ) {
-        int k = (*i) + 1;
+    }
+    else if ( f( fmt, "C", "dumpcs", i, argc, argv, NULL ) )
+    {
+        int k = ( *i ) + 1;
         FastqArgs.dumpCs = true;
-        if( k < argc && strlen(argv[k]) == 1 && strchr("acgtACGT", argv[k][0]) != NULL ) {
-            FastqArgs.desiredCsKey = argv[k];
+        if ( k < argc && strlen( argv[ k ] ) == 1 && strchr( "acgtACGT", argv[ k ][ 0 ] ) != NULL )
+        {
+            FastqArgs.desiredCsKey = argv[ k ];
             *i = k;
         }
-    } else if( f(fmt, "B", "dumpbase", i, argc, argv, NULL) ) {
+    }
+    else if ( f( fmt, "B", "dumpbase", i, argc, argv, NULL ) )
+    {
         FastqArgs.dumpBase = true;
-    } else if( f(fmt, "Q", "offset", i, argc, argv, &arg) ) {
-        FastqArgs.offset = AsciiToU32(arg, NULL, NULL);
-    } else if( f(fmt, "I", "readids", i, argc, argv, NULL) ) {
+    }
+    else if ( f( fmt, "Q", "offset", i, argc, argv, &arg ) )
+    {
+        FastqArgs.offset = AsciiToU32( arg, NULL, NULL );
+    }
+    else if ( f( fmt, "I", "readids", i, argc, argv, NULL ) )
+    {
         FastqArgs.readIds = true;
-    } else if( f(fmt, "E", "qual-filter", i, argc, argv, NULL) ) {
+    }
+    else if ( f( fmt, "E", "qual-filter", i, argc, argv, NULL ) )
+    {
         FastqArgs.qual_filter = true;
-    } else if( f(fmt, "DB", "defline-seq", i, argc, argv, &arg) ) {
+    }
+    else if ( f( fmt, "DB", "defline-seq", i, argc, argv, &arg ) )
+    {
         FastqArgs.b_deffmt = arg;
-    } else if( f(fmt, "DQ", "defline-qual", i, argc, argv, &arg) ) {
+    }
+    else if ( f( fmt, "DQ", "defline-qual", i, argc, argv, &arg ) )
+    {
         FastqArgs.q_deffmt = arg;
-    } else if( f(fmt, "TR", "skip-technical", i, argc, argv, NULL) ) {
+    }
+    else if ( f( fmt, "TR", "skip-technical", i, argc, argv, NULL ) )
+    {
         FastqArgs.skipTechnical = true;
-    } else if( f(fmt, "SF", "split-files", i, argc, argv, NULL) ) {
+    }
+    else if ( f( fmt, "SF", "split-files", i, argc, argv, NULL ) )
+    {
         FastqArgs.split_spot = true;
         FastqArgs.split_files = true;
-    } else if( f(fmt, NULL, "split-3", i, argc, argv, NULL) ) {
+    }
+    else if ( f( fmt, NULL, "split-3", i, argc, argv, NULL ) )
+    {
         FastqArgs.split_3 = true;
         FastqArgs.split_spot = true;
         FastqArgs.maxReads = 2;
         FastqArgs.skipTechnical = true;
-    } else if( f(fmt, "SL", "split-spot", i, argc, argv, NULL) ) {
+    }
+    else if ( f( fmt, "SL", "split-spot", i, argc, argv, NULL ) )
+    {
         FastqArgs.split_spot = true;
-    } else if( f(fmt, "HS", "helicos", i, argc, argv, NULL) ) {
+    }
+    else if ( f( fmt, "HS", "helicos", i, argc, argv, NULL ) )
+    {
         FastqArgs.b_deffmt = "@$sn";
         FastqArgs.q_deffmt =  "+";
-    } else if( f(fmt, "FA", "fasta", i, argc, argv, NULL) ) {
-        FastqArgs.fasta = true;
+    }
+    else if ( f( fmt, "FA", "fasta", i, argc, argv, NULL ) )
+    {
+        int k = (*i) + 1;
+        FastqArgs.fasta = 70;
+        if ( k < argc && isdigit( argv[ k ][ 0 ] ) )
+        {
+            char* endp = NULL;
+            errno = 0;
+            FastqArgs.fasta = strtou64( argv[ k ], &endp, 10 );
+            if ( errno != 0 || endp == NULL || *endp != '\0' )
+            {
+                return false;
+            }
+            *i = k;
+            if ( FastqArgs.fasta == 0 )
+            {
+                FastqArgs.fasta = ~0;
+            }
+        }
         FastqArgs.file_extension = ".fasta";
-    } else if( f(fmt, NULL, "aligned", i, argc, argv, NULL) ) {
+    }
+    else if ( f( fmt, NULL, "aligned", i, argc, argv, NULL ) )
+    {
         FastqArgs.aligned = true;
-    } else if( f(fmt, NULL, "unaligned", i, argc, argv, NULL) ) {
+    }
+    else if ( f( fmt, NULL, "unaligned", i, argc, argv, NULL ) )
+    {
         FastqArgs.unaligned = true;
-    } else if( f(fmt, NULL, "aligned-region", i, argc, argv, &arg) ) {
+    }
+    else if ( f( fmt, NULL, "aligned-region", i, argc, argv, &arg ) )
+    {
         /* name[:[from][-[to]]] */
-        TAlignedRegion* r = realloc(FastqArgs.alregion, sizeof(*FastqArgs.alregion) * ++FastqArgs.alregion_qty);
-        if( r == NULL ) {
+        TAlignedRegion* r = realloc( FastqArgs.alregion, sizeof( *FastqArgs.alregion ) * ++FastqArgs.alregion_qty );
+        if ( r == NULL )
+        {
             return false;
         }
         FastqArgs.alregion = r;
-        r = &FastqArgs.alregion[FastqArgs.alregion_qty - 1];
-        r->name = strchr(arg, ':');
+        r = &FastqArgs.alregion[ FastqArgs.alregion_qty - 1 ];
+        r->name = strchr( arg, ':' );
         r->from = 0;
         r->to = 0;
-        if( r->name == NULL ) {
+        if ( r->name == NULL )
+        {
             r->name = arg;
-            r->name_len = strlen(arg);
-        } else {
+            r->name_len = strlen( arg );
+        }
+        else
+        {
             const char* c;
             uint64_t* v;
 
@@ -2187,250 +2982,407 @@ bool FastqDumper_AddArg(const SRADumperFmt* fmt, GetArg* f, int* i, int argc, ch
             r->name = arg;
 
             v = &r->from;
-            while(*++c != '\0') {
-                if( *c == '-' ) {
+            while ( *++c != '\0')
+            {
+                if ( *c == '-' )
+                {
                     v = &r->to;
-                } else if( *c == '+' ) {
-                    if( *v != 0 ) {
+                }
+                else if ( *c == '+' )
+                {
+                    if ( *v != 0 )
+                    {
                         return false;
                     }
-                } else if( !isdigit(*c) ) {
+                }
+                else if ( !isdigit( *c ) )
+                {
                     return false;
-                } else {
-                    *v = *v * 10 + (*c - '0');
+                }
+                else
+                {
+                    *v = *v * 10 + ( *c - '0' );
                 }
             }
-            if( r->from > r->to && r->to != 0 ) {
+            if ( r->from > r->to && r->to != 0 )
+            {
                 uint64_t x = r->from;
                 r->from = r->to;
                 r->to = x;
             }
         }
-    } else if( f(fmt, NULL, "matepair-distance", i, argc, argv, &arg) ) {
+    }
+    else if ( f( fmt, NULL, "matepair-distance", i, argc, argv, &arg ) )
+    {
         /* from[-to] | [from]-to | unknown */
-        if( strcmp(arg, "unknown") == 0 ) {
+        if ( strcmp( arg, "unknown" ) == 0 )
+        {
             FastqArgs.mp_dist_unknown = true;
-        } else {
+        }
+        else
+        {
             uint64_t* v;
-            TMatepairDistance* p = realloc(FastqArgs.mp_dist, sizeof(*FastqArgs.mp_dist) * ++FastqArgs.mp_dist_qty);
-            if( p == NULL ) {
+            TMatepairDistance* p = realloc( FastqArgs.mp_dist, sizeof( *FastqArgs.mp_dist ) * ++FastqArgs.mp_dist_qty );
+            if ( p == NULL )
+            {
                 return false;
             }
             FastqArgs.mp_dist = p;
-            p = &FastqArgs.mp_dist[FastqArgs.mp_dist_qty - 1];
+            p = &FastqArgs.mp_dist[ FastqArgs.mp_dist_qty - 1 ];
             p->from = 0;
             p->to = 0;
 
             v = &p->from;
-            while(*++arg != '\0') {
-                if( *arg == '-' ) {
+            while ( *++arg != '\0' )
+            {
+                if ( *arg == '-' )
+                {
                     v = &p->to;
-                } else if( *arg == '+' ) {
-                    if( *v != 0 ) {
+                }
+                else if ( *arg == '+' )
+                {
+                    if ( *v != 0 )
+                    {
                         return false;
                     }
-                } else if( !isdigit(*arg) ) {
+                }
+                else if ( !isdigit( *arg ) )
+                {
                     return false;
-                } else {
-                    *v = *v * 10 + (*arg - '0');
+                }
+                else
+                {
+                    *v = *v * 10 + ( *arg - '0' );
                 }
             }
-            if( p->from > p->to && p->to != 0 ) {
+            if ( p->from > p->to && p->to != 0 )
+            {
                 uint64_t x = p->from;
                 p->from = p->to;
                 p->to = x;
             }
-            if( p->from == 0 && p->to == 0 ) {
+            if ( p->from == 0 && p->to == 0 )
+            {
                 FastqArgs.mp_dist_qty--;
             }
         }
-    } else {
+    }
+    else
+    {
         return false;
     }
     return true;
 }
 
-rc_t FastqDumper_Factories(const SRADumperFmt* fmt, const SRASplitterFactory** factory)
+
+rc_t FastqDumper_Factories( const SRADumperFmt* fmt, const SRASplitterFactory** factory )
 {
     rc_t rc = 0;
     const SRASplitterFactory* parent = NULL, *child = NULL;
 
-    if( fmt == NULL || factory == NULL ) {
-        return RC(rcExe, rcFormatter, rcReading, rcParam, rcInvalid);
+    if ( fmt == NULL || factory == NULL )
+    {
+        return RC( rcExe, rcFormatter, rcReading, rcParam, rcInvalid );
     }
     *factory = NULL;
     {
         const SRAColumn* c = NULL;
-        if( (rc = SRATableOpenColumnRead(fmt->table, &c, "PLATFORM", sra_platform_id_t)) == 0 ) {
-            const INSDC_SRA_platform_id* platform;
+        rc = SRATableOpenColumnRead( fmt->table, &c, "PLATFORM", sra_platform_id_t );
+        if ( rc == 0 )
+        {
+            const INSDC_SRA_platform_id * platform;
             bitsz_t o, z;
-            if( (rc = SRAColumnRead(c, 1, (const void **)&platform, &o, &z)) == 0 ) {
-                if( !FastqArgs.dumpCs && !FastqArgs.dumpBase ) {
-                    if( *platform == SRA_PLATFORM_ABSOLID ) {
+            rc = SRAColumnRead( c, 1, ( const void ** )&platform, &o, &z );
+            if ( rc == 0 )
+            {
+                if ( !FastqArgs.dumpCs && !FastqArgs.dumpBase )
+                {
+                    if ( platform != NULL && *platform == SRA_PLATFORM_ABSOLID )
+                    {
                         FastqArgs.dumpCs = true;
-                    } else {
+                    }
+                    else
+                    {
                         FastqArgs.dumpBase = true;
                     }
                 }
-                if( *platform == SRA_PLATFORM_ABSOLID ) {
+                if ( platform != NULL && *platform == SRA_PLATFORM_ABSOLID )
+                {
                     FastqArgs.is_platform_cs_native = true;
                 }
             }
-            SRAColumnRelease(c);
-        } else if( GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcColumn ) {
+            SRAColumnRelease( c );
+        }
+        else if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcColumn )
+        {
             rc = 0;
         }
     }
-    if( (FastqArgs.aligned || FastqArgs.unaligned) && !(FastqArgs.aligned && FastqArgs.unaligned) ) {
-        if( (rc = AlignedFilterFactory_Make(&child, fmt->table, FastqArgs.aligned, FastqArgs.unaligned)) == 0 ) {
-            if( parent != NULL ) {
-                if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
+
+    if ( ( FastqArgs.aligned || FastqArgs.unaligned ) && !( FastqArgs.aligned && FastqArgs.unaligned ) )
+    {
+        rc = AlignedFilterFactory_Make( &child, fmt->table, FastqArgs.aligned, FastqArgs.unaligned );
+        if ( rc == 0 )
+        {
+            if ( parent != NULL )
+            {
+                rc = SRASplitterFactory_AddNext( parent, child );
+                if ( rc != 0 )
+                {
                     SRASplitterFactory_Release(child);
-                } else {
+                }
+                else
+                {
                     parent = child;
                 }
-            } else {
+            }
+            else
+            {
                 parent = child;
                 *factory = parent;
             }
         }
     }
-    if( FastqArgs.alregion_qty > 0 ) {
-        if( (rc = AlignRegionFilterFactory_Make(&child, fmt->table, FastqArgs.alregion, FastqArgs.alregion_qty)) == 0 ) {
-            if( parent != NULL ) {
-                if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
-                    SRASplitterFactory_Release(child);
-                } else {
+
+    if ( FastqArgs.alregion_qty > 0 )
+    {
+        rc = AlignRegionFilterFactory_Make( &child, fmt->table, FastqArgs.alregion, FastqArgs.alregion_qty );
+        if ( rc == 0 )
+        {
+            if ( parent != NULL )
+            {
+                rc = SRASplitterFactory_AddNext( parent, child );
+                if ( rc != 0 )
+                {
+                    SRASplitterFactory_Release( child );
+                }
+                else
+                {
                     parent = child;
                 }
-            } else {
+            }
+            else
+            {
                 parent = child;
                 *factory = parent;
             }
         }
     }
-    if( FastqArgs.mp_dist_unknown || FastqArgs.mp_dist_qty > 0 ) {
-        if( (rc = AlignPairDistanceFilterFactory_Make(&child, fmt->table,
-                                        FastqArgs.mp_dist_unknown, FastqArgs.mp_dist, FastqArgs.mp_dist_qty)) == 0 ) {
-            if( parent != NULL ) {
-                if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
+
+    if ( FastqArgs.mp_dist_unknown || FastqArgs.mp_dist_qty > 0 )
+    {
+        rc = AlignPairDistanceFilterFactory_Make( &child, fmt->table,
+                FastqArgs.mp_dist_unknown, FastqArgs.mp_dist, FastqArgs.mp_dist_qty);
+        if ( rc == 0 )
+        {
+            if ( parent != NULL )
+            {
+                rc = SRASplitterFactory_AddNext( parent, child );
+                if ( rc != 0 )
+                {
                     SRASplitterFactory_Release(child);
-                } else {
+                }
+                else
+                {
                     parent = child;
                 }
-            } else {
+            }
+            else
+            {
                 parent = child;
                 *factory = parent;
             }
         }
     }
-    if( rc == 0 && FastqArgs.skipTechnical && FastqArgs.split_spot ) {
-        if( (rc = FastqBioFilterFactory_Make(&child, fmt->accession, fmt->table)) == 0 ) {
-            if( parent != NULL ) {
-                if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
-                    SRASplitterFactory_Release(child);
-                } else {
+
+    if ( rc == 0 && FastqArgs.skipTechnical && FastqArgs.split_spot )
+    {
+        rc = FastqBioFilterFactory_Make( &child, fmt->accession, fmt->table );
+        if ( rc == 0 )
+        {
+            if ( parent != NULL )
+            {
+                rc = SRASplitterFactory_AddNext( parent, child );
+                if ( rc != 0 )
+                {
+                    SRASplitterFactory_Release( child );
+                }
+                else
+                {
                     parent = child;
                 }
-            } else {
+            }
+            else
+            {
                 parent = child;
                 *factory = parent;
             }
         }
     }
-    if( rc == 0 && FastqArgs.maxReads > 0 ) {
-        if( (rc = FastqRNumberFilterFactory_Make(&child, fmt->accession, fmt->table)) == 0 ) {
-            if( parent != NULL ) {
-                if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
-                    SRASplitterFactory_Release(child);
-                } else {
+
+    if ( rc == 0 && FastqArgs.maxReads > 0 )
+    {
+        rc = FastqRNumberFilterFactory_Make( &child, fmt->accession, fmt->table );
+        if ( rc == 0 )
+        {
+            if ( parent != NULL )
+            {
+                rc = SRASplitterFactory_AddNext( parent, child );
+                if ( rc != 0 )
+                {
+                    SRASplitterFactory_Release( child );
+                }
+                else
+                {
                     parent = child;
                 }
-            } else {
+            }
+            else
+            {
                 parent = child;
                 *factory = parent;
             }
         }
     }
-    if( rc == 0 && FastqArgs.qual_filter ) {
-        if( (rc = FastqQFilterFactory_Make(&child, fmt->accession, fmt->table)) == 0 ) {
-            if( parent != NULL ) {
-                if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
-                    SRASplitterFactory_Release(child);
-                } else {
+
+    if ( rc == 0 && FastqArgs.qual_filter )
+    {
+        rc = FastqQFilterFactory_Make( &child, fmt->accession, fmt->table );
+        if ( rc == 0 )
+        {
+            if ( parent != NULL )
+            {
+                rc = SRASplitterFactory_AddNext( parent, child );
+                if ( rc != 0 )
+                {
+                    SRASplitterFactory_Release( child );
+                }
+                else
+                {
                     parent = child;
                 }
-            } else {
+            }
+            else
+            {
                 parent = child;
                 *factory = parent;
             }
         }
     }
-    if( rc == 0 ) {
-        if( (rc = FastqReadLenFilterFactory_Make(&child, fmt->accession, fmt->table)) == 0 ) {
-            if( parent != NULL ) {
-                if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
-                    SRASplitterFactory_Release(child);
-                } else {
+
+    if ( rc == 0 )
+    {
+        rc = FastqReadLenFilterFactory_Make( &child, fmt->accession, fmt->table );
+        if ( rc == 0 )
+        {
+            if ( parent != NULL )
+            {
+                rc = SRASplitterFactory_AddNext( parent, child );
+                if ( rc != 0 )
+                {
+                    SRASplitterFactory_Release( child );
+                }
+                else
+                {
                     parent = child;
                 }
-            } else {
+            }
+            else
+            {
                 parent = child;
                 *factory = parent;
             }
         }
     }
-    if( rc == 0 ) {
-        if( FastqArgs.split_3 ) {
-            if( (rc = Fastq3ReadSplitterFactory_Make(&child, fmt->accession, fmt->table)) == 0 ) {
-                if( parent != NULL ) {
-                    if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
-                        SRASplitterFactory_Release(child);
-                    } else {
+
+    if ( rc == 0 )
+    {
+        if ( FastqArgs.split_3 )
+        {
+            rc = Fastq3ReadSplitterFactory_Make( &child, fmt->accession, fmt->table );
+            if ( rc == 0 )
+            {
+                if ( parent != NULL )
+                {
+                    rc = SRASplitterFactory_AddNext( parent, child );
+                    if ( rc != 0 )
+                    {
+                        SRASplitterFactory_Release( child );
+                    }
+                    else
+                    {
                         parent = child;
                     }
-                } else {
+                }
+                else
+                {
                     parent = child;
                     *factory = parent;
                 }
             }
-        } else if( FastqArgs.split_files ) {
-            if( (rc = FastqReadSplitterFactory_Make(&child, fmt->accession, fmt->table)) == 0 ) {
-                if( parent != NULL ) {
-                    if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
+        }
+        else if ( FastqArgs.split_files )
+        {
+            rc = FastqReadSplitterFactory_Make( &child, fmt->accession, fmt->table );
+            if ( rc == 0 )
+            {
+                if ( parent != NULL )
+                {
+                    rc = SRASplitterFactory_AddNext( parent, child );
+                    if ( rc != 0 )
+                    {
                         SRASplitterFactory_Release(child);
-                    } else {
+                    }
+                    else
+                    {
                         parent = child;
                     }
-                } else {
+                }
+                else
+                {
                     parent = child;
                     *factory = parent;
                 }
             }
         }
     }
-    if( rc == 0 ) {
-        if( FastqArgs.b_deffmt != NULL ) {
-            rc = Defline_Parse(&FastqArgs.b_defline, FastqArgs.b_deffmt);
+
+    if ( rc == 0 )
+    {
+        if ( FastqArgs.b_deffmt != NULL )
+        {
+            rc = Defline_Parse( &FastqArgs.b_defline, FastqArgs.b_deffmt );
         }
-        if( FastqArgs.q_deffmt != NULL ) {
-            rc = Defline_Parse(&FastqArgs.q_defline, FastqArgs.q_deffmt);
+        if ( FastqArgs.q_deffmt != NULL )
+        {
+            rc = Defline_Parse( &FastqArgs.q_defline, FastqArgs.q_deffmt );
         }
-        if( rc == 0 && (rc = FastqFormatterFactory_Make(&child, fmt->accession, fmt->table)) == 0 ) {
-            if( parent != NULL ) {
-                if( (rc = SRASplitterFactory_AddNext(parent, child)) != 0 ) {
-                    SRASplitterFactory_Release(child);
+        if ( rc == 0 )
+        {
+            rc = FastqFormatterFactory_Make( &child, fmt->accession, fmt->table );
+            if ( rc == 0 )
+            {
+                if ( parent != NULL )
+                {
+                    rc = SRASplitterFactory_AddNext( parent, child );
+                    if ( rc != 0 ) 
+                    {
+                        SRASplitterFactory_Release( child );
+                    }
+                }
+                else
+                {
+                    *factory = child;
                 }
-            } else {
-                *factory = child;
             }
         }
     }
     return rc;
 }
 
+
 /* main entry point of the file */
-rc_t SRADumper_Init(SRADumperFmt* fmt)
+rc_t SRADumper_Init( SRADumperFmt* fmt )
 {
     static const SRADumperFmt_Arg arg[] =
         {
@@ -2461,7 +3413,7 @@ rc_t SRADumper_Init(SRADumperFmt* fmt)
 
             /* DO NOT ADD IN THE MIDDLE ORDER IS IMPORTANT IN USAGE FUNCTION ABOVE!!! */
             {"Q", "offset", "integer", {"Offset to use for quality conversion, default is 33", NULL}},
-            {NULL, "fasta", NULL, {"FASTA only, no qualities", NULL}},
+            {NULL, "fasta", "[line width]", {"FASTA only, no qualities, optional line wrap width (set to zero for no wrapping)", NULL}},
 
             {"F", "origfmt", NULL, {"Defline contains only original sequence name", NULL}},
             {"I", "readids", NULL, {"Append read id after spot id as 'accession.spot.readid' on defline", NULL}},
@@ -2490,11 +3442,12 @@ rc_t SRADumper_Init(SRADumperFmt* fmt)
             {NULL, NULL, NULL, {NULL}}
         };
 
-    if( fmt == NULL ) {
-        return RC(rcExe, rcFileFormat, rcConstructing, rcParam, rcNull);
+    if ( fmt == NULL )
+    {
+        return RC( rcExe, rcFileFormat, rcConstructing, rcParam, rcNull );
     }
 
-    memset(&FastqArgs, 0, sizeof(FastqArgs));
+    memset( &FastqArgs, 0, sizeof( FastqArgs ) );
     FastqArgs.is_platform_cs_native = false;
     FastqArgs.maxReads = 0;
     FastqArgs.skipTechnical = false;
@@ -2514,7 +3467,7 @@ rc_t SRADumper_Init(SRADumperFmt* fmt)
     FastqArgs.split_files = false;
     FastqArgs.split_3 = false;
     FastqArgs.split_spot = false;
-    FastqArgs.fasta = false;
+    FastqArgs.fasta = 0;
     FastqArgs.file_extension = ".fastq";
     FastqArgs.aligned = false;
     FastqArgs.unaligned = false;
diff --git a/tools/sra-dump/illumina-dump.vers b/tools/sra-dump/illumina-dump.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-dump/illumina-dump.vers
+++ b/tools/sra-dump/illumina-dump.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-dump/illumina-dump.vers.h b/tools/sra-dump/illumina-dump.vers.h
deleted file mode 100644
index e610c68..0000000
--- a/tools/sra-dump/illumina-dump.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define ILLUMINA_DUMP_VERS 0x02010007
diff --git a/tools/sra-dump/illumina.c b/tools/sra-dump/illumina.c
index a4d28af..17e8d23 100644
--- a/tools/sra-dump/illumina.c
+++ b/tools/sra-dump/illumina.c
@@ -38,6 +38,8 @@
 #include "core.h"
 #include "illumina-dump.vers.h"
 
+#define DATABUFFERINITSIZE 10240
+
 typedef enum {
     eRead = 0x01,
     eQual1_S = 0x02,
@@ -96,7 +98,7 @@ rc_t IlluminaU32Splitter_GetKey(const SRASplitter* cself, const char** key, spot
             if( rc == 0 ) {
                 sprintf(self->key, "%0*d", w, val);
             }
-        } else if( GetRCState(rc) == rcNotFound ) {
+        } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
             SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
             *key = NULL;
             rc = 0;
@@ -183,7 +185,7 @@ rc_t IlluminaU32SplitterFactory_Make(const SRASplitterFactory** cself, const cha
 
 typedef struct IlluminaFormatterSplitter_struct {
     const IlluminaReader* reader;
-    char buf[512 * 1024];
+    KDataBuffer* b;
 } IlluminaFormatterSplitter;
 
 static
@@ -200,16 +202,20 @@ rc_t IlluminaFormatterSplitter_Dump(const SRASplitter* cself, spotid_t spot, con
 
             if( rc == 0 && (IlluminaArgs.opt & eRead) &&
                 (rc = SRASplitter_FileActivate(cself, "seq.txt")) == 0 ) {
-                if( (rc = IlluminaReaderBase(self->reader, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0) {
-                    self->buf[writ] = '\n';
-                    rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+                    IF_BUF((IlluminaReaderBase(self->reader, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                    if( writ > 0 ) {
+                        ((char*)(self->b->base))[writ] = '\n';
+                        rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                    }
                 }
             }
             if( rc == 0 && (IlluminaArgs.opt & eQual1_S) &&
                 (rc = SRASplitter_FileActivate(cself, "qcal.txt")) == 0 ) {
-                if( (rc = IlluminaReaderQuality1(self->reader, 0, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
-                    self->buf[writ] = '\n';
-                    rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+                IF_BUF((IlluminaReaderQuality1(self->reader, 0, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                    if( writ > 0 ) {
+                        ((char*)(self->b->base))[writ] = '\n';
+                        rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                    }
                 }
             }
             if( rc == 0 && (IlluminaArgs.opt & eQual1_M) ) {
@@ -219,47 +225,55 @@ rc_t IlluminaFormatterSplitter_Dump(const SRASplitter* cself, spotid_t spot, con
                     char key[128];
                     for(readId = 1; rc == 0 && readId <= num_reads; readId++) {
                         sprintf(key, "%u_qcal.txt", readId);
-                        if( (rc = SRASplitter_FileActivate(cself, key)) == 0 &&
-                            (rc = IlluminaReaderQuality1(self->reader, readId, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
-                            self->buf[writ] = '\n';
-                            rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+                        if( (rc = SRASplitter_FileActivate(cself, key)) == 0 ) {
+                            IF_BUF((IlluminaReaderQuality1(self->reader, readId, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                                if( writ > 0 ) {
+                                    ((char*)(self->b->base))[writ] = '\n';
+                                    rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                                }
+                            }
                         }
                     }
                 }
             }
-            if( rc == 0 && (IlluminaArgs.opt & eQual4) &&
-                (rc = SRASplitter_FileActivate(cself, "prb.txt")) == 0 ) {
-                if( (rc = IlluminaReaderQuality4(self->reader, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
-                    self->buf[writ] = '\n';
-                    rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+            if( rc == 0 && (IlluminaArgs.opt & eQual4) && (rc = SRASplitter_FileActivate(cself, "prb.txt")) == 0 ) {
+                IF_BUF((IlluminaReaderQuality4(self->reader, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                    if( writ > 0 ) {
+                        ((char*)(self->b->base))[writ] = '\n';
+                        rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                    }
                 }
             }
-            if( rc == 0 && (IlluminaArgs.opt & eIntensity) &&
-                (rc = SRASplitter_FileActivate(cself, "int.txt")) == 0 ) {
-                if( (rc = IlluminaReaderIntensity(self->reader, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
-                    self->buf[writ] = '\n';
-                    rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+            if( rc == 0 && (IlluminaArgs.opt & eIntensity) && (rc = SRASplitter_FileActivate(cself, "int.txt")) == 0 ) {
+                IF_BUF((IlluminaReaderIntensity(self->reader, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                    if( writ > 0 ) {
+                        ((char*)(self->b->base))[writ] = '\n';
+                        rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                    }
                 }
             }
-            if( rc == 0 && (IlluminaArgs.opt & eNoise) &&
-                (rc = SRASplitter_FileActivate(cself, "nse.txt")) == 0 ) {
-                if( (rc = IlluminaReaderNoise(self->reader, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
-                    self->buf[writ] = '\n';
-                    rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+            if( rc == 0 && (IlluminaArgs.opt & eNoise) && (rc = SRASplitter_FileActivate(cself, "nse.txt")) == 0 ) {
+                IF_BUF((IlluminaReaderNoise(self->reader, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                    if( writ > 0 ) {
+                        ((char*)(self->b->base))[writ] = '\n';
+                        rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                    }
                 }
             }
-            if( rc == 0 && (IlluminaArgs.opt & eSignal) &&
-                (rc = SRASplitter_FileActivate(cself, "sig2.txt")) == 0 ) {
-                if( (rc = IlluminaReaderSignal(self->reader, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
-                    self->buf[writ] = '\n';
-                    rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+            if( rc == 0 && (IlluminaArgs.opt & eSignal) && (rc = SRASplitter_FileActivate(cself, "sig2.txt")) == 0 ) {
+                IF_BUF((IlluminaReaderSignal(self->reader, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                    if( writ > 0 ) {
+                        ((char*)(self->b->base))[writ] = '\n';
+                        rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                    }
                 }
             }
-            if( rc == 0 && (IlluminaArgs.opt & eQSeq_S) &&
-                (rc = SRASplitter_FileActivate(cself, "qseq.txt")) == 0 ) {
-                if( (rc = IlluminaReaderQSeq(self->reader, 0, true, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
-                    self->buf[writ] = '\n';
-                    rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+            if( rc == 0 && (IlluminaArgs.opt & eQSeq_S) && (rc = SRASplitter_FileActivate(cself, "qseq.txt")) == 0 ) {
+                IF_BUF((IlluminaReaderQSeq(self->reader, 0, true, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                    if( writ > 0 ) {
+                        ((char*)(self->b->base))[writ] = '\n';
+                        rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                    }
                 }
             }
             if( rc == 0 && (IlluminaArgs.opt & eQSeq_M) ) {
@@ -269,15 +283,18 @@ rc_t IlluminaFormatterSplitter_Dump(const SRASplitter* cself, spotid_t spot, con
                     char key[128];
                     for(readId = 1; rc == 0 && readId <= num_reads; readId++) {
                         sprintf(key, "%u_qseq.txt", readId);
-                        if( (rc = SRASplitter_FileActivate(cself, key)) == 0 &&
-                            (rc = IlluminaReaderQSeq(self->reader, readId, true, self->buf, sizeof(self->buf) - 1, &writ)) == 0 && writ > 0 ) {
-                            self->buf[writ] = '\n';
-                            rc = SRASplitter_FileWrite(cself, spot, self->buf, writ + 1);
+                        if( (rc = SRASplitter_FileActivate(cself, key)) == 0 ) {
+                            IF_BUF((IlluminaReaderQSeq(self->reader, readId, true, self->b->base, KDataBufferBytes(self->b) - 1, &writ)), self->b, writ) {
+                                if( writ > 0 ) {
+                                    ((char*)(self->b->base))[writ] = '\n';
+                                    rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ + 1);
+                                }
+                            }
                         }
                     }
                 }
             }
-        } else if( GetRCState(rc) == rcNotFound ) {
+        } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
             SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
             rc = 0;
         }
@@ -289,6 +306,7 @@ typedef struct IlluminaFormatterFactory_struct {
     const char* accession;
     const SRATable* table;
     const IlluminaReader* reader;
+    KDataBuffer buf;
 } IlluminaFormatterFactory;
 
 static
@@ -299,11 +317,11 @@ rc_t IlluminaFormatterFactory_Init(const SRASplitterFactory* cself)
 
     if( self == NULL ) {
         rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
-    } else {
-        rc = IlluminaReaderMake(&self->reader, self->table, self->accession,
+    } else if( (rc = IlluminaReaderMake(&self->reader, self->table, self->accession,
                                 IlluminaArgs.opt & eRead, IlluminaArgs.opt & (eQual1_S | eQual1_M), IlluminaArgs.opt & eQual4, 
                                 IlluminaArgs.opt & eIntensity, IlluminaArgs.opt & eNoise, IlluminaArgs.opt & eSignal,
-                                IlluminaArgs.opt & (eQSeq_S | eQSeq_M), 0, 0);
+                                IlluminaArgs.opt & (eQSeq_S | eQSeq_M), 0, 0)) == 0 ) {
+        rc = KDataBufferMakeBytes(&self->buf, DATABUFFERINITSIZE);
     }
     return rc;
 }
@@ -319,6 +337,7 @@ rc_t IlluminaFormatterFactory_NewObj(const SRASplitterFactory* cself, const SRAS
     } else {
         if( (rc = SRASplitter_Make(splitter, sizeof(IlluminaFormatterSplitter), NULL, NULL, IlluminaFormatterSplitter_Dump, NULL)) == 0 ) {
             ((IlluminaFormatterSplitter*)(*splitter))->reader = self->reader;
+            ((IlluminaFormatterSplitter*)(*splitter))->b = &self->buf;
         }
     }
     return rc;
@@ -330,6 +349,7 @@ void IlluminaFormatterFactory_Release(const SRASplitterFactory* cself)
     if( cself != NULL ) {
         IlluminaFormatterFactory* self = (IlluminaFormatterFactory*)cself;
         IlluminaReaderWhack(self->reader);
+        KDataBufferWhack(&self->buf);
     }
 }
 
diff --git a/tools/sra-dump/sff-dump.vers b/tools/sra-dump/sff-dump.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-dump/sff-dump.vers
+++ b/tools/sra-dump/sff-dump.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-dump/sff-dump.vers.h b/tools/sra-dump/sff-dump.vers.h
deleted file mode 100644
index f5e4559..0000000
--- a/tools/sra-dump/sff-dump.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define SFF_DUMP_VERS 0x02010007
diff --git a/tools/sra-dump/sff.c b/tools/sra-dump/sff.c
index f635d13..cf39716 100644
--- a/tools/sra-dump/sff.c
+++ b/tools/sra-dump/sff.c
@@ -37,10 +37,12 @@
 #include "core.h"
 #include "sff-dump.vers.h"
 
+#define DATABUFFERINITSIZE 10240
+
 typedef struct SFFFormatterSplitter_struct {
     const SFFReader* reader;
     spotid_t spots;
-    char buf[1 * 1024 * 1024];
+    KDataBuffer* b;
 } SFFFormatterSplitter;
 
 static const char* SFFFormatterSplitter_Dump_Ext = ".sff";
@@ -58,17 +60,17 @@ rc_t SFFFormatterSplitter_Dump(const SRASplitter* cself, spotid_t spot, const re
 
         if( (rc = SRASplitter_FileActivate(cself, SFFFormatterSplitter_Dump_Ext)) == 0 ) {
             if( self->spots == 0 ) {
-                if( (rc = SFFReaderHeader(self->reader, 0, self->buf, sizeof(self->buf), &writ)) == 0 ) {
-                    rc = SRASplitter_FileWrite(cself, 0, self->buf, writ);
+                IF_BUF((SFFReaderHeader(self->reader, 0, self->b->base, KDataBufferBytes(self->b), &writ)), self->b, writ) {
+                    rc = SRASplitter_FileWrite(cself, 0, self->b->base, writ);
                 }
             }
             if( rc == 0 ) {
                 if( (rc = SFFReaderSeekSpot(self->reader, spot)) == 0 ) {
-                    if( (rc = SFFReader_GetCurrentSpotData(self->reader, self->buf, sizeof(self->buf), &writ)) == 0 ) {
-                        rc = SRASplitter_FileWrite(cself, spot, self->buf, writ);
+                    IF_BUF((SFFReader_GetCurrentSpotData(self->reader, self->b->base, KDataBufferBytes(self->b), &writ)), self->b, writ) {
+                        rc = SRASplitter_FileWrite(cself, spot, self->b->base, writ);
                         self->spots++;
                     }
-                } else if( GetRCState(rc) == rcNotFound ) {
+                } else if( GetRCObject(rc) == rcRow && GetRCState(rc) == rcNotFound ) {
                     SRA_DUMP_DBG (3, ("%s skipped %u row\n", __func__, spot));
                     self->spots++;
                     rc = 0;
@@ -91,8 +93,8 @@ rc_t SFFFormatterSplitter_Release(const SRASplitter* cself)
         if( self->spots > 0 ) {
             size_t writ = 0;
             /* tweak SFF file header with real number of reads per file */
-            if( (rc = SFFReaderHeader(self->reader, self->spots, self->buf, sizeof(self->buf), &writ)) == 0 ) {
-                rc = SRASplitter_FileWritePos(cself, 0, 0, self->buf, writ);
+            IF_BUF((SFFReaderHeader(self->reader, self->spots, self->b->base, KDataBufferBytes(self->b), &writ)), self->b, writ) {
+                rc = SRASplitter_FileWritePos(cself, 0, 0, self->b->base, writ);
             }
         }
     }
@@ -103,6 +105,7 @@ typedef struct SFFFormatterFactory_struct {
     const char* accession;
     const SRATable* table;
     const SFFReader* reader;
+    KDataBuffer kdbuf;
 } SFFFormatterFactory;
 
 static
@@ -113,7 +116,7 @@ rc_t SFFFormatterFactory_Init(const SRASplitterFactory* cself)
 
     if( self == NULL ) {
         rc = RC(rcSRA, rcType, rcConstructing, rcParam, rcNull);
-    } else {
+    } else if( (rc = KDataBufferMakeBytes(&self->kdbuf, DATABUFFERINITSIZE)) == 0 ) {
         rc = SFFReaderMake(&self->reader, self->table, self->accession, 0, 0);
     }
     return rc;
@@ -130,6 +133,7 @@ rc_t SFFFormatterFactory_NewObj(const SRASplitterFactory* cself, const SRASplitt
     } else {
         if( (rc = SRASplitter_Make(splitter, sizeof(SFFFormatterSplitter), NULL, NULL, SFFFormatterSplitter_Dump, SFFFormatterSplitter_Release)) == 0 ) {
             ((SFFFormatterSplitter*)(*splitter))->reader = self->reader;
+            ((SFFFormatterSplitter*)(*splitter))->b = &self->kdbuf;
         }
     }
     return rc;
@@ -140,6 +144,7 @@ void SFFFormatterFactory_Release(const SRASplitterFactory* cself)
 {
     if( cself != NULL ) {
         SFFFormatterFactory* self = (SFFFormatterFactory*)cself;
+        KDataBufferWhack(&self->kdbuf);
         SFFReaderWhack(self->reader);
     }
 }
diff --git a/tools/sra-dump/sra-dump.c b/tools/sra-dump/sra-dump.c
index ab83c81..8355511 100644
--- a/tools/sra-dump/sra-dump.c
+++ b/tools/sra-dump/sra-dump.c
@@ -39,7 +39,6 @@
 #include <klib/status.h>
 #include <klib/container.h>
 #include <klib/rc.h>
-#include <fmtdef.h>
 #include <os-native.h>
 #include <sysalloc.h>
 
@@ -81,9 +80,9 @@ void dump_text ( const void *base, bitsz_t row_bits )
     for ( i = 0; i < count; ++ i )
   {
         if ( isprint ( data [ i ] ) )
-            putchar ( data [ i ] );
+            OUTMSG(( "%c", data [ i ] ));
         else
-            printf ( "\\x%2x", data [ i ] );
+            OUTMSG(( "\\x%2x", data [ i ] ));
     }
 }
 
@@ -95,7 +94,7 @@ void dump_I8 ( const void *base, bitsz_t row_bits )
     uint32_t i, count = row_bits >> 3;
 
     for ( i = 0; i < count; sep = ",", ++ i )
-        printf ( "%s%d", sep, data [ i ] );
+        OUTMSG(( "%s%d", sep, data [ i ] ));
 }
 
 static
@@ -106,7 +105,7 @@ void dump_U8 ( const void *base, bitsz_t row_bits )
     uint32_t i, count = row_bits >> 3;
 
     for ( i = 0; i < count; sep = ",", ++ i )
-        printf ( "%s%u", sep, data [ i ] );
+        OUTMSG(( "%s%u", sep, data [ i ] ));
 }
 
 static
@@ -117,7 +116,7 @@ void dump_I16 ( const void *base, bitsz_t row_bits )
     uint32_t i, count = row_bits >> 4;
 
     for ( i = 0; i < count; sep = ",", ++ i )
-        printf ( "%s%d", sep, data [ i ] );
+        OUTMSG(( "%s%d", sep, data [ i ] ));
 }
 
 static
@@ -128,7 +127,7 @@ void dump_U16 ( const void *base, bitsz_t row_bits )
     uint32_t i, count = row_bits >> 4;
 
     for ( i = 0; i < count; sep = ",", ++ i )
-        printf ( "%s%u", sep, data [ i ] );
+        OUTMSG(( "%s%u", sep, data [ i ] ));
 }
 
 static
@@ -139,7 +138,7 @@ void dump_I32 ( const void *base, bitsz_t row_bits )
     uint32_t i, count = row_bits >> 5;
 
     for ( i = 0; i < count; sep = ",", ++ i )
-        printf ( "%s%d", sep, data [ i ] );
+        OUTMSG(( "%s%d", sep, data [ i ] ));
 }
 
 static
@@ -150,7 +149,7 @@ void dump_U32 ( const void *base, bitsz_t row_bits )
     uint32_t i, count = row_bits >> 5;
 
     for ( i = 0; i < count; sep = ",", ++ i )
-        printf ( "%s%u", sep, data [ i ] );
+        OUTMSG(( "%s%u", sep, data [ i ] ));
 }
 
 static
@@ -161,7 +160,7 @@ void dump_I64 ( const void *base, bitsz_t row_bits )
     uint32_t i, count = row_bits >> 6;
 
     for ( i = 0; i < count; sep = ",", ++ i )
-        printf ( "%s%" LD64, sep, data [ i ] );
+        OUTMSG(( "%s%ld", sep, data [ i ] ));
 }
 
 static
@@ -172,7 +171,7 @@ void dump_U64 ( const void *base, bitsz_t row_bits )
     uint32_t i, count = row_bits >> 6;
 
     for ( i = 0; i < count; sep = ",", ++ i )
-        printf ( "%s%" LU64, sep, data [ i ] );
+        OUTMSG(( "%s%lu", sep, data [ i ] ));
 }
 
 static
@@ -183,7 +182,7 @@ void dump_F32 ( const void *base, bitsz_t row_bits )
     uint32_t i, count = row_bits >> 5;
 
     for ( i = 0; i < count; sep = ",", ++ i )
-        printf ( "%s%f", sep, data [ i ] );
+        OUTMSG(( "%s%f", sep, data [ i ] ));
 }
 
 static
@@ -194,7 +193,7 @@ void dump_F64 ( const void *base, bitsz_t row_bits )
     uint32_t i, count = row_bits >> 6;
 
     for ( i = 0; i < count; sep = ",", ++ i )
-        printf ( "%s%f", sep, data [ i ] );
+        OUTMSG(( "%s%f", sep, data [ i ] ));
 }
 
 
@@ -215,10 +214,10 @@ void dump_platform ( const void *base, bitsz_t row_bits )
     CASE ( SRA_PLATFORM_COMPLETE_GENOMICS );
     CASE ( SRA_PLATFORM_HELICOS );
     default:
-        printf ( "%u", data [ 0 ] );
+        OUTMSG(( "%u", data [ 0 ] ));
         return;
     }
-    printf ( "%s", p );
+    OUTMSG(( "%s", p ));
 }
 
 static
@@ -239,10 +238,10 @@ void dump_readtype ( const void *base, bitsz_t row_bits )
         CASE ( SRA_READ_TYPE_TECHNICAL|SRA_READ_TYPE_REVERSE );
         CASE ( SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_REVERSE );
         default:
-            printf ( "%s%u", sep, data [ 0 ] );
+            OUTMSG(( "%s%u", sep, data [ 0 ] ));
             continue;
         }
-        printf ( "%s%s", sep, p );
+        OUTMSG(( "%s%s", sep, p ));
     }
 }
 
@@ -262,10 +261,10 @@ void dump_readfilt ( const void *base, bitsz_t row_bits )
         CASE ( SRA_READ_FILTER_CRITERIA );
         CASE ( SRA_READ_FILTER_REDACTED );
         default:
-            printf ( "%s%u", sep, data [ 0 ] );
+            OUTMSG(( "%s%u", sep, data [ 0 ] ));
             continue;
         }
-        printf ( "%s%s", sep, p );
+        OUTMSG(( "%s%s", sep, p ));
     }
 }
 
@@ -302,7 +301,7 @@ rc_t dump_row ( const sradump_parms *pb, const column_map *cm, uint32_t count, s
         }
 
         /* write cell header - TBD - improve column alignment for readability */
-        printf ( "%u. %s: ", row, cm [ i ] . name );
+        OUTMSG(( "%u. %s: ", row, cm [ i ] . name ));
 
         /* write cell data */
         if ( cm [ i ] . td . dim == 1 )
@@ -316,14 +315,14 @@ rc_t dump_row ( const sradump_parms *pb, const column_map *cm, uint32_t count, s
 
             for ( sep = "{", j = 0; j < row_len; sep = "},{", ++ j )
             {
-                printf ( "%s", sep );
+                OUTMSG(( "%s", sep ));
                 ( cm [ i ] . dump ) ( & data [ j * elem_bits >> 3 ], elem_bits );
             }
 
-            putchar ( '}' );
+            OUTMSG(( "}" ));
         }
 
-        putchar ( '\n' );
+        OUTMSG(( "\n" ));
     }
 
     return rc;
@@ -881,7 +880,7 @@ rc_t CC Usage (const Args * args)
 
     UsageSummary (progname);
 
-    KOutMsg ("Options:\n");
+    OUTMSG (( "Options:\n" ));
 
     OUTMSG (("table:\n"
 	     "  path to table or accession id within NCBI\n"
@@ -891,7 +890,7 @@ rc_t CC Usage (const Args * args)
     HelpParamLine (name_param[0], name_param+1);
     HelpParamLine (typedecl_param[0], typedecl_param+1);
 
-    KOutMsg ("\nOptions:\n");
+    OUTMSG (( "\nOptions:\n" ));
 
     HelpOptionLine (ALIAS_START, OPTION_START, "ID", start_usage);
 
@@ -977,11 +976,11 @@ rc_t CC KMain ( int argc, char *argv [] )
             if (rc)
                 break;
 
-            if (pcount == 0)
-	    {
-		OUTMSG (("missing source table\n"));
+            if (pcount == 0) {
+                OUTMSG (("missing source table\n"));
                 rc = MiniUsage (args);
-                break;
+                ArgsWhack(args);
+                exit(EXIT_FAILURE);
             }
 
             rc = ArgsParamValue (args, 0, &pb.src_path);
@@ -1017,7 +1016,8 @@ rc_t CC KMain ( int argc, char *argv [] )
                 }
 
                 if ( pcount != 1 )
-                    free ( pb.columns );
+                    /* brain damaged windows compiler warned about next line */
+                    free ( (void*)pb.columns );
             }
         } while (0);
  
diff --git a/tools/sra-dump/sra-dump.vers b/tools/sra-dump/sra-dump.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-dump/sra-dump.vers
+++ b/tools/sra-dump/sra-dump.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-dump/sra-dump.vers.h b/tools/sra-dump/sra-dump.vers.h
deleted file mode 100644
index 9b50d59..0000000
--- a/tools/sra-dump/sra-dump.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define SRA_DUMP_VERS 0x02010007
diff --git a/tools/sra-load/Makefile b/tools/sra-load/Makefile
index c2fa13f..1198ac2 100644
--- a/tools/sra-load/Makefile
+++ b/tools/sra-load/Makefile
@@ -46,20 +46,18 @@ ALL_TOOLS = \
 #-------------------------------------------------------------------------------
 # outer targets
 #
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
 ifeq (win,$(OS))
 all std:
 	@ echo "not building loaders under Windows"
 else
-all std: makedirs vers-includes
+all std: vers-includes
 	@ $(MAKE_CMD) $(TARGDIR)/std
 endif
 
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
 	@ $(MAKE_CMD) $(BINDIR)/$@
 
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
 
 #-------------------------------------------------------------------------------
 # std
@@ -70,6 +68,13 @@ $(TARGDIR)/std: \
 .PHONY: $(TARGDIR)/std
 
 #-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
 # clean
 #
 clean: stdclean
@@ -102,25 +107,24 @@ LOADER_OBJ = \
 	$(addsuffix .$(OBJX),$(LOADER_SRC))
 
 LOADER_LIB = \
-	-lwsradb \
-	-ssrapath \
-	-ssraschema \
-	-dwsraxf \
 	-lkapp \
+	-lload \
+	-dwsraxf \
 	-dwvxf \
+	-lwsradb \
 	-lwvdb \
 	-lwkdb \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
+	-lkxml \
+	-lkxfs \
 	-lkfg \
-	-lload \
 	-lkfs \
 	-lksrch \
-	-lkxml \
-	-lkxfs \
-	-lklib \
+	-lkq \
 	-lkproc \
-	-ldl \
-	-lz \
-	-lbz2 \
+	-lklib \
 	-lm
 
 ifneq (win,$(OS))
diff --git a/tools/sra-load/abi-load.vers b/tools/sra-load/abi-load.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-load/abi-load.vers
+++ b/tools/sra-load/abi-load.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-load/abi-load.vers.h b/tools/sra-load/abi-load.vers.h
deleted file mode 100644
index 911efb9..0000000
--- a/tools/sra-load/abi-load.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define ABI_LOAD_VERS 0x02010007
diff --git a/tools/sra-load/absolid-fmt.c b/tools/sra-load/absolid-fmt.c
index ead3f3c..f8b5186 100644
--- a/tools/sra-load/absolid-fmt.c
+++ b/tools/sra-load/absolid-fmt.c
@@ -526,12 +526,6 @@ rc_t AbiLoaderFmt_Whack(AbiLoaderFmt *self, SRATable** table)
 
 const char UsageDefaultName[] = "abi-load";
 
-rc_t CC UsageSummary (const char * progname)
-{
-    return 0;
-}
-
-
 uint32_t KAppVersion(void)
 {
     return ABI_LOAD_VERS;
diff --git a/tools/sra-load/common-xml.c b/tools/sra-load/common-xml.c
index 314b246..9b1b389 100644
--- a/tools/sra-load/common-xml.c
+++ b/tools/sra-load/common-xml.c
@@ -557,23 +557,6 @@ rc_t XMLNode_get_u32node(const KXMLNode* node, const char* child, bool optional,
     return rc;
 }
 
-static
-rc_t PlatformXML_verify_instrument_model(const char** models, const char* instrument_model)
-{
-    rc_t rc = RC(rcExe, rcFormatter, rcConstructing, rcId, rcOutofrange);
-    int i = 0;
-    while( models[i] != NULL ) {
-        if( strcmp(instrument_model, models[i++]) == 0 ) {
-            rc = 0;
-            break;
-        }
-    }
-    if( rc != 0 ) {
-        PLOGERR(klogErr, (klogErr, rc, "INSTRUMENT_MODEL $(model)", PLOG_S(model), instrument_model));
-    }
-    return rc;
-}
-
 rc_t PlatformXML_Make(const PlatformXML** cself, const KXMLNode* node, uint32_t* spot_length)
 {
     rc_t rc = 0;
@@ -594,10 +577,7 @@ rc_t PlatformXML_Make(const PlatformXML** cself, const KXMLNode* node, uint32_t*
                     if( (rc = KXMLNodeElementName(n, &name)) == 0 ) {
                         DEBUG_MSG (4, ("PLATFORM: %s\n", name));
                         if( strcmp(name, "LS454") == 0 ) {
-                            const char* models[] = {"454 GS", "454 GS 20", "454 GS FLX", "454 GS FLX Titanium", "454 Titanium", "454 GS Junior", NULL};
-                            if( (rc = XMLNode_get_strnode(n, "INSTRUMENT_MODEL", false, &platform->param.ls454.instrument_model)) == 0 &&
-                                (rc = PlatformXML_verify_instrument_model(models, platform->param.ls454.instrument_model)) == 0 &&
-                                (rc = XMLNode_get_strnode(n, "KEY_SEQUENCE", true, &platform->param.ls454.key_sequence)) == 0 &&
+                            if( (rc = XMLNode_get_strnode(n, "KEY_SEQUENCE", true, &platform->param.ls454.key_sequence)) == 0 &&
                                 (rc = XMLNode_get_strnode(n, "FLOW_SEQUENCE", true, &platform->param.ls454.flow_sequence)) == 0 &&
                                 (rc = XMLNode_get_u32node(n, "FLOW_COUNT", true, &platform->param.ls454.flow_count)) == 0 ) {
                                 platform->id = SRA_PLATFORM_454;
@@ -629,10 +609,7 @@ rc_t PlatformXML_Make(const PlatformXML** cself, const KXMLNode* node, uint32_t*
                                 }
                             }
                         } else if( strcmp(name, "ION_TORRENT") == 0 ) {
-                            const char* models[] = {"Ion Torrent PGM", NULL};
-                            if( (rc = XMLNode_get_strnode(n, "INSTRUMENT_MODEL", false, &platform->param.ion_torrent.instrument_model)) == 0 &&
-                                (rc = PlatformXML_verify_instrument_model(models, platform->param.ion_torrent.instrument_model)) == 0 &&
-                                (rc = XMLNode_get_strnode(n, "KEY_SEQUENCE", true, &platform->param.ion_torrent.key_sequence)) == 0 &&
+                            if( (rc = XMLNode_get_strnode(n, "KEY_SEQUENCE", true, &platform->param.ion_torrent.key_sequence)) == 0 &&
                                 (rc = XMLNode_get_strnode(n, "FLOW_SEQUENCE", true, &platform->param.ion_torrent.flow_sequence)) == 0 &&
                                 (rc = XMLNode_get_u32node(n, "FLOW_COUNT", true, &platform->param.ion_torrent.flow_count)) == 0 ) {
                                 platform->id = SRA_PLATFORM_ION_TORRENT;
@@ -664,51 +641,30 @@ rc_t PlatformXML_Make(const PlatformXML** cself, const KXMLNode* node, uint32_t*
                                 }
                             }
                         } else if( strcmp(name, "ILLUMINA") == 0 ) {
-                            const char* models[] = {"Illumina Genome Analyzer", "Illumina Genome Analyzer II",
-                                                    "Illumina Genome Analyzer IIx", "Illumina HiSeq 2000", NULL};
-                            if( (rc = XMLNode_get_strnode(n, "INSTRUMENT_MODEL", false, &platform->param.illumina.instrument_model)) == 0 &&
-                                (rc = PlatformXML_verify_instrument_model(models, platform->param.illumina.instrument_model)) == 0 ) {
-                                if( (rc = XMLNode_get_u32node(n, "SEQUENCE_LENGTH", false, spot_length)) != 0 &&
-                                    GetRCState(rc) == rcNotFound ) {
-                                    rc = XMLNode_get_u32node(n, "CYCLE_COUNT", true, spot_length);
-                                }
-                                if( rc == 0 ) {
-                                    platform->id = SRA_PLATFORM_ILLUMINA;
-                                }
+                            if( (rc = XMLNode_get_u32node(n, "SEQUENCE_LENGTH", false, spot_length)) != 0 &&
+                                GetRCState(rc) == rcNotFound ) {
+                                rc = XMLNode_get_u32node(n, "CYCLE_COUNT", true, spot_length);
+                            }
+                            if( rc == 0 ) {
+                                platform->id = SRA_PLATFORM_ILLUMINA;
                             }
                         } else if( strcmp(name, "HELICOS") == 0 ) {
-                            const char* models[] = {"Helicos HeliScope", NULL};
-                            if( (rc = XMLNode_get_strnode(n, "INSTRUMENT_MODEL", false, &platform->param.helicos.instrument_model)) == 0 &&
-                                (rc = PlatformXML_verify_instrument_model(models, platform->param.helicos.instrument_model)) == 0 &&
-                                (rc = XMLNode_get_strnode(n, "FLOW_SEQUENCE", true, &platform->param.helicos.flow_sequence)) == 0 &&
+                            if( (rc = XMLNode_get_strnode(n, "FLOW_SEQUENCE", true, &platform->param.helicos.flow_sequence)) == 0 &&
                                 (rc = XMLNode_get_u32node(n, "FLOW_COUNT", true, &platform->param.helicos.flow_count)) == 0 ) {
                                 platform->id = SRA_PLATFORM_HELICOS;
                             }
                         } else if( strcmp(name, "ABI_SOLID") == 0 ) {
-                            const char* models[] = {"AB SOLiD System", "AB SOLiD System 2.0", "AB SOLiD System 3.0",
-                                                    "AB SOLiD 4 System", "AB SOLiD 4hq System", "AB SOLiD PI System", NULL};
-                            if( (rc = XMLNode_get_strnode(n, "INSTRUMENT_MODEL", false, &platform->param.absolid.instrument_model)) == 0 &&
-                                (rc = PlatformXML_verify_instrument_model(models, platform->param.absolid.instrument_model)) == 0 ) {
-                                if( (rc = XMLNode_get_u32node(n, "SEQUENCE_LENGTH", false, spot_length)) != 0 &&
-                                    GetRCState(rc) == rcNotFound ) {
-                                    rc = XMLNode_get_u32node(n, "CYCLE_COUNT", true, spot_length);
-                                }
+                            if( (rc = XMLNode_get_u32node(n, "SEQUENCE_LENGTH", false, spot_length)) != 0 &&
+                                GetRCState(rc) == rcNotFound ) {
+                                rc = XMLNode_get_u32node(n, "CYCLE_COUNT", true, spot_length);
                             }
                             if( rc == 0 ) {
                                 platform->id = SRA_PLATFORM_ABSOLID;
                             }
                         } else if( strcmp(name, "PACBIO_SMRT") == 0 ) {
-                            const char* models[] = {"PacBio RS", NULL};
-                            if( (rc = XMLNode_get_strnode(n, "INSTRUMENT_MODEL", false, &platform->param.pacbio_smrt.instrument_model)) == 0 &&
-                                (rc = PlatformXML_verify_instrument_model(models, platform->param.pacbio_smrt.instrument_model)) == 0 ) {
-                                platform->id = SRA_PLATFORM_PACBIO_SMRT;
-                            }
+                            platform->id = SRA_PLATFORM_PACBIO_SMRT;
                         } else if( strcmp(name, "COMPLETE_GENOMICS") == 0 ) {
-                            const char* models[] = {"Complete Genomics", NULL};
-                            if( (rc = XMLNode_get_strnode(n, "INSTRUMENT_MODEL", false, &platform->param.complete_genomics.instrument_model)) == 0 &&
-                                (rc = PlatformXML_verify_instrument_model(models, platform->param.complete_genomics.instrument_model)) == 0 ) {
-                                platform->id = SRA_PLATFORM_COMPLETE_GENOMICS;
-                            }
+                            platform->id = SRA_PLATFORM_COMPLETE_GENOMICS;
                         }
                         if( rc != 0 || platform->id == SRA_PLATFORM_UNDEFINED ) {
                             rc = rc ? rc : RC(rcExe, rcFormatter, rcConstructing, rcId, rcUnrecognized);
@@ -737,30 +693,23 @@ void PlatformXML_Whack(const PlatformXML* cself)
         PlatformXML* self = (PlatformXML*)cself;
         switch(self->id) {
             case SRA_PLATFORM_454:
-                free(self->param.ls454.instrument_model);
                 free(self->param.ls454.key_sequence);
                 free(self->param.ls454.flow_sequence);
                 break;
             case SRA_PLATFORM_ION_TORRENT:
-                free(self->param.ion_torrent.instrument_model);
                 free(self->param.ion_torrent.key_sequence);
                 free(self->param.ion_torrent.flow_sequence);
                 break;
             case SRA_PLATFORM_ILLUMINA:
-                free(self->param.illumina.instrument_model);
                 break;
             case SRA_PLATFORM_HELICOS:
-                free(self->param.helicos.instrument_model);
                 free(self->param.helicos.flow_sequence);
                 break;
             case SRA_PLATFORM_ABSOLID:
-                free(self->param.absolid.instrument_model);
                 break;
             case SRA_PLATFORM_PACBIO_SMRT:
-                free(self->param.pacbio_smrt.instrument_model);
                 break;
             case SRA_PLATFORM_COMPLETE_GENOMICS:
-                free(self->param.complete_genomics.instrument_model);
                 break;
             case SRA_PLATFORM_UNDEFINED:
                 break;
diff --git a/tools/sra-load/common-xml.h b/tools/sra-load/common-xml.h
index a39a3f1..918a142 100644
--- a/tools/sra-load/common-xml.h
+++ b/tools/sra-load/common-xml.h
@@ -26,7 +26,7 @@
 #ifndef _sra_load_common_xml_
 #define _sra_load_common_xml_
 
-#include <klib/xml.h>
+#include <kxml/xml.h>
 #include <search/grep.h>
 #include <sra/sradb.h>
 
@@ -38,49 +38,21 @@ typedef struct PlatformXML_struct {
     SRAPlatforms id;
     union {
         struct {
-            char* instrument_model;
             char* key_sequence; /* optional */
             char* flow_sequence; /* optional */
             uint32_t flow_count; /* optional */
         } ls454;
 
         struct {
-            char* instrument_model;
             char* key_sequence; /* optional */
             char* flow_sequence; /* optional */
             uint32_t flow_count; /* optional */
         } ion_torrent;
 
         struct {
-            char* instrument_model;
-            /* CYCLE_COUNT not optional, but deprecated so this is filled instead */
-            /* SEQUENCE_LENGTH is not yet deprecated but we use SPOT_LENGTH from SPOT_DECODE_SPEC as primary source */
-        } illumina;
-
-        struct {
-            char* instrument_model;
             char* flow_sequence; /* optional */
             uint32_t flow_count; /* optional */
         } helicos;
-
-        struct {
-            char* instrument_model;
-            /* not used now
-            ????? color_matrix;
-            char* color_matrix_code;
-            */
-            /* CYCLE_COUNT not optional, but deprecated so this is filled instead */
-            /* SEQUENCE_LENGTH is not yet deprecated but we use SPOT_LENGTH from SPOT_DECODE_SPEC as primary source */
-        } absolid;
-
-        struct {
-            char* instrument_model;
-        } pacbio_smrt;
-
-        struct {
-            char* instrument_model;
-        } complete_genomics;
-
     } param;
 } PlatformXML;
 
diff --git a/tools/sra-load/experiment-xml.c b/tools/sra-load/experiment-xml.c
index 9cfc664..3995c90 100644
--- a/tools/sra-load/experiment-xml.c
+++ b/tools/sra-load/experiment-xml.c
@@ -55,8 +55,6 @@ typedef struct PoolMember_struct {
     BSTNode node;
     const char *name;
     PoolReadSpec spec[MAX_SPOT_DESCRIPTOR_READS];
-    uint32_t added;
-    uint32_t removed;
 } PoolMember;
 
 struct ExperimentXML {
@@ -135,107 +133,6 @@ void CC PoolMember_Dump( BSTNode *node, void *data )
 }
 #endif
 
-typedef struct PoolMember_Stat_struct {
-    SLNode node;
-    const char *member;
-    uint32_t added;
-    uint32_t deleted;
-} PoolMember_Stat;
-
-typedef struct PoolMember_StatFindData_struct {
-    const char* search;
-    PoolMember_Stat* node;
-} PoolMember_StatFindData;
-
-static
-bool CC PoolMemberStats_Find(SLNode *n, void *d)
-{
-    PoolMember_Stat* node = (PoolMember_Stat*)n;
-    PoolMember_StatFindData* data = (PoolMember_StatFindData*)d;
-
-    if( ((node->member == NULL || node->member[0] == '\0') && (data->search == NULL || data->search[0] == '\0')) ||
-        (node->member != NULL && data->search != NULL && strcmp(node->member, data->search) == 0) ) {
-        data->node = node;
-        return true;
-    }
-    return false;
-}
-
-static
-void CC PoolMemberStats_Log( SLNode *n, void *data )
-{
-    PoolMember_Stat* node = (PoolMember_Stat*)n;
-
-    const char* mm = node->member ? node->member : "default";
-    PLOGMSG(klogInfo, (klogInfo, "Member stat $(name): +$(added), -$(removed)",
-             "severity=member,name=%s,added=%u,removed=%u", mm, node->added, node->deleted));
-}
-
-static
-void CC PoolMemberStats_Whack( SLNode *n, void *data )
-{
-    PoolMember_Stat* node = (PoolMember_Stat*)n;
-    free((void*)node->member);
-    free(node);
-}
-
-static
-rc_t PoolMemberStats(const ExperimentXML* self, const char* member_name, PoolMember_Stat** node)
-{
-    rc_t rc = 0;
-    PoolMember_StatFindData data;
-
-    data.node = NULL;
-    data.search = member_name;
-
-    if( !SLListDoUntil(&self->member_stats, PoolMemberStats_Find, &data) ) {
-        char* nm = (member_name && member_name[0] != '\0') ? strdup(member_name) : NULL;
-        data.node = calloc(1, sizeof(*data.node));
-        if( data.node == NULL || (nm == NULL && member_name && member_name[0] != '\0') ) {
-            free(data.node);
-            free(nm);
-            rc = RC(rcSRA, rcFormatter, rcResolving, rcMemory, rcExhausted);
-        } else {
-            data.node->member = nm;
-            SLListPushTail((SLList*)&self->member_stats, &data.node->node);
-        }
-    }
-    *node = data.node;
-    return rc;
-}
-
-static
-rc_t PoolMemberStats_Set(const ExperimentXML* self, const char* member_name)
-{
-    PoolMember_Stat* node = NULL;
-
-    return PoolMemberStats(self, member_name, &node);
-}
-
-static
-rc_t PoolMemberStats_Add(const ExperimentXML* self, const char* member_name)
-{
-    rc_t rc = 0;
-    PoolMember_Stat* node = NULL;
-
-    if( (rc = PoolMemberStats(self, member_name, &node)) == 0 ) {
-        node->added++;
-    }
-    return rc;
-}
-
-static
-rc_t PoolMemberStats_Delete(const ExperimentXML* self, const char* member_name)
-{
-    rc_t rc = 0;
-    PoolMember_Stat* node = NULL;
-
-    if( (rc = PoolMemberStats(self, member_name, &node)) == 0 ) {
-        node->deleted++;
-    }
-    return rc;
-}
-
 static
 rc_t PoolMember_Add(ExperimentXML* self, const char* name)
 {
@@ -320,7 +217,6 @@ rc_t PoolMember_Add(ExperimentXML* self, const char* name)
                     break;
             }
         }
-        rc = PoolMemberStats_Set(self, member->name);
     } else {
         PoolMember_Whack(&member->node, NULL);
     }
@@ -536,20 +432,32 @@ bool Experiment_ExpectedTableMatch(const ReadSpecXML_read_BASECALL_TABLE* table,
         match.score = -1;
         if( data->left_adjusted ) {
             if( AgrepFindFirst(bc->agrep, bc->max_mismatch, data->seq, data->len, &match) ) {
-                if( match.position > bc->max_mismatch - match.score ) {
-                    match.score = -1;
-                } else if( match.position > 0 ) {
-                    match.score += match.position;
-                    match.length += match.position;
-                    match.position = 0;
+                if( data->direction == etm_Reverse ) {
+                    int32_t right_tail = data->len - match.position - strlen(bc->basecall);
+                    if( right_tail > bc->max_mismatch - match.score ) {
+                        match.score = -1;
+                    } else if( match.position > 0 ) {
+                        match.score += right_tail;
+                        match.length += right_tail;
+                        match.position = 0;
+                    }
+                } else {
+                    if( match.position > bc->max_mismatch - match.score ) {
+                        match.score = -1;
+                    } else if( match.position > 0 ) {
+                        match.score += match.position;
+                        match.length += match.position;
+                        match.position = 0;
+                    }
                 }
             }
         } else {
             AgrepFindBest(bc->agrep, bc->max_mismatch, data->seq, data->len, &match);
         }
         if( !(match.score < 0) ) {
-            DEBUG_MSG(3, ("agrep match bc %s, min: %u, max: %u, edge: %s, [%d:%d] score %d\n", bc->basecall, bc->min_match, bc->max_mismatch,
+            DEBUG_MSG(3, ("agrep match bc %s, min: %u, max: %u, edge: %s%s, [%d:%d] score %d\n", bc->basecall, bc->min_match, bc->max_mismatch,
                        bc->match_edge == match_edge_Full ? "Full" : (bc->match_edge == match_edge_Start ? "Start" : "End"),
+                       data->left_adjusted ? " left adjusted" : "",
                        match.position, match.length, match.score));
             if( (data->match.score < 0 || data->match.score > match.score) ) {
                 memcpy(&data->match, &match, sizeof(data->match));
@@ -669,20 +577,20 @@ rc_t Experiment_FillRead(const ReadSpecXML_read* spec, PoolReadSpec* pool,
                     break;
                 }
                 for(i = 0; i < data.len; i++) {
-                    /* reverse part of seq */
+                    /* reverse a portion of seq */
                     r[i] = bases[pool[1].start - i - 1];
                 }
                 data.seq = r;
                 data.tag = *tag;
                 data.direction = etm_Reverse;
-                data.left_adjusted = true;
+                data.left_adjusted = spec[1].coord_type != rdsp_RelativeOrder_ct && pool[1].start > 0;
                 DEBUG_MSG(3, ("agrep find read %u rev in: '%.*s' = %u\n", nreads, data.len, data.seq, data.len));
                 if( Experiment_ExpectedTableMatch(&spec->coord.expected_basecalls, &data) ) {
                     DEBUG_MSG(3, ("agrep found rev from %hd match %d:%d - %d '%s' in '%.*s' \n",
                                     start, data.match.position, data.match.length, data.match.score,
                                     data.bc->basecall, data.len, &bases[pool[1].start - data.len]));
                     if( pool->length < 0 || data.match.score < pool->score ) {
-                        pool->start = pool[1].start - data.match.length;
+                        pool->start = pool[1].start - data.match.position - data.match.length;
                         pool->length = data.match.length;
                         pool->item[0] = data.bc;
                         pool->score = data.match.score;
@@ -700,7 +608,12 @@ rc_t Experiment_FillRead(const ReadSpecXML_read* spec, PoolReadSpec* pool,
             gap = pool[1].start - (pool->start + pool->length);
             if( gap > 0 ) {
                 /* right gap */
-                if( spec[1].coord_type >= rdsp_ExpectedBaseCall_ct &&
+                if( spec[1].coord_type == rdsp_RelativeOrder_ct ) {
+                    /* adjust right read's start to the tail of current read */
+                    pool[1].start -= gap;
+                    pool[1].length += gap;
+                    gap = 0;
+                } else if( spec[1].coord_type >= rdsp_ExpectedBaseCall_ct &&
                     spec[1].coord.expected_basecalls.base_coord <= 0 && pool[1].item[0] != NULL ) {
                     /* move left read's start to left as much as possible */
                     int32_t left = pool[1].item[0]->max_mismatch - pool[1].score;
@@ -881,17 +794,10 @@ rc_t Experiment_MemberSeg(const ExperimentXML* self,
         if( self->member_pool == NULL || self->processing.barcode_rule == eBarcodeRule_ignore_barcode ) {
             if( (rc = Experiment_FillSegAgrep(self, pool, self->member_null, nbases, bases, NULL)) == 0 ) {
                 *new_member_name = mm;
-                rc = PoolMemberStats_Add(self, *new_member_name);
             }
         } else if( mm == NULL ) {
             *new_member_name = NULL;
-            if( (rc = Experiment_FillSegAgrep(self, pool, self->member_null, nbases, bases, new_member_name)) == 0 ) {
-                if( (rc = PoolMemberStats_Add(self, *new_member_name)) == 0 ) {
-                    if( *new_member_name != NULL && **new_member_name != '\0' ) {
-                        rc = PoolMemberStats_Delete(self, NULL);
-                    }
-                }
-            }
+	    rc = Experiment_FillSegAgrep(self, pool, self->member_null, nbases, bases, new_member_name);
         } else {
             PoolMember* pm = (PoolMember*)BSTreeFind(self->member_pool, mm, PoolMember_FindByName);
             if( pm == NULL ) {
@@ -900,7 +806,6 @@ rc_t Experiment_MemberSeg(const ExperimentXML* self,
             } else {
                 if( (rc = Experiment_FillSegAgrep(self, pool, pm, nbases, bases, NULL)) == 0 ) {
                     *new_member_name = mm;
-                    rc = PoolMemberStats_Add(self, *new_member_name);
                 }
             }
         }
@@ -962,7 +867,7 @@ rc_t Experiment_MemberSeg(const ExperimentXML* self,
             size_t max = sizeof(err_buf);
 
             for(i = 1; i <= self->reads->nreads; i++) {
-                int x = snprintf(p, max, "[%hd:%hd, len = %hd", pool[i].start, pool[i].start + pool[i].length, pool[i].length);
+                int x = snprintf(p, max, "[%hd:%d, len = %hd", pool[i].start, pool[i].start + pool[i].length, pool[i].length);
                 if( x > 0 && x < max ) {
                     max -= x;
                     p += x;
@@ -1018,9 +923,6 @@ rc_t Experiment_MemberSegSimple(const ExperimentXML* self,
                 *new_member_name = NULL;
                 break;
         }
-        if( rc == 0 ) {
-            rc = PoolMemberStats_Add(self, *new_member_name);
-        }
     }
     return rc;
 }
@@ -1337,17 +1239,6 @@ rc_t Experiment_ReadSegDefault(const ExperimentXML* self, SRASegment* seg)
     return rc;
 }
 
-rc_t Experiment_LogStats(const ExperimentXML* cself)
-{
-    rc_t rc = 0;
-    if( cself == NULL ) {
-        rc = RC(rcSRA, rcFormatter, rcAccessing, rcParam, rcNull);
-    } else {
-        SLListForEach(&cself->member_stats, PoolMemberStats_Log, NULL);
-    }
-    return rc;
-}
-
 void Experiment_Whack(const ExperimentXML* cself)
 {
     if( cself != NULL ) {
@@ -1358,7 +1249,6 @@ void Experiment_Whack(const ExperimentXML* cself)
         BSTreeWhack(self->member_pool, PoolMember_Whack, NULL);
         free(self->member_pool);
         PoolMember_Whack(&self->member_null->node, NULL);
-        SLListWhack(&self->member_stats, PoolMemberStats_Whack, NULL);
         PlatformXML_Whack(self->platform);
         free(self);
     }
diff --git a/tools/sra-load/experiment-xml.h b/tools/sra-load/experiment-xml.h
index ff81c05..8ab869d 100644
--- a/tools/sra-load/experiment-xml.h
+++ b/tools/sra-load/experiment-xml.h
@@ -71,7 +71,6 @@ rc_t Experiment_MemberSegSimple(const ExperimentXML* self,
                                 const char* const file_member_name, const char* const data_block_member_name,
                                 const char** const new_member_name);
 
-rc_t Experiment_LogStats(const ExperimentXML* cself);
 
 void Experiment_Whack(const ExperimentXML* cself);
 
diff --git a/tools/sra-load/fastq-fmt.c b/tools/sra-load/fastq-fmt.c
index efcc7f9..35c3090 100644
--- a/tools/sra-load/fastq-fmt.c
+++ b/tools/sra-load/fastq-fmt.c
@@ -98,6 +98,7 @@ static
 rc_t file_read_line(FastqFileInfo* file, bool optional)
 {
     rc_t rc = 0;
+static unsigned long lineNo=0;
 
     if( file->line == NULL ) {
         if( (rc = SRALoaderFileReadline(file->file, (const void**)&file->line, &file->line_len)) == 0 ) {
@@ -119,6 +120,7 @@ rc_t file_read_line(FastqFileInfo* file, bool optional)
                 }
             }
         }
+        ++lineNo;
     }
     return rc;
 }
@@ -248,8 +250,8 @@ uint8_t parse_spot_name(const SRALoaderFile* file, FileReadData* spot, const cha
             x++;
         }
         /* find last '=' and use only whatever is to the left of it */
-        if( (x = memrchr(spot->name.data, '=', spot->name.len)) == NULL ) {
-            rc = pstring_assign(&spot->name, x + 1, spot->name.len - (x - spot->name.data));
+        if( (x = memrchr(spot->name.data, '=', spot->name.len)) != NULL ) {
+            rc = pstring_assign(&spot->name, spot->name.data, (x - spot->name.data) );
         }
     }
     return score;
@@ -476,13 +478,16 @@ rc_t read_next_spot(FastqLoaderFmt* self, FastqFileInfo* file)
             if( rd->ready && rd->read.qual_type != ILLUMINAWRITER_COLMASK_NOTSET ) {
                 if( file->qualOffset == 0 ) {
                     /* detect and remember */
-                    file->qualOffset = 64;
+                    file->qualOffset = 33;
+		    file->qualMax = 94;
                     rc = pstring_quality_convert(&rd->read.qual, file->qualEnc, file->qualOffset, file->qualMin, file->qualMax);
                     if( GetRCState(rc) == rcOutofrange ) {
-                        file->qualOffset = 33;
+                        file->qualOffset = 64;
+			file->qualMax = 61;
                         rc = pstring_quality_convert(&rd->read.qual, file->qualEnc, file->qualOffset, file->qualMin, file->qualMax);
                     }
                 } else {
+		    if(file->qualOffset == 33) file->qualMax = 94;
                     rc = pstring_quality_convert(&rd->read.qual, file->qualEnc, file->qualOffset, file->qualMin, file->qualMax);
                 }
                 if( rc != 0 ) {
@@ -541,7 +546,7 @@ rc_t FastqLoaderFmt_WriteData(FastqLoaderFmt* self, uint32_t argc, const SRALoad
                 case eExperimentQualityType_Phred:
                     file->qualType = ILLUMINAWRITER_COLMASK_QUALITY_PHRED;
                     file->qualMin = 0;
-                    file->qualMax = (self->wIllumina) ? 41: 127;
+                    file->qualMax = (self->wIllumina) ? 61: 127;
                     break;
             }
         }
@@ -631,12 +636,6 @@ rc_t FastqLoaderFmt_Whack(FastqLoaderFmt *self, SRATable** table)
 
 const char UsageDefaultName[] = "fastq-load";
 
-rc_t CC UsageSummary (const char * progname)
-{
-    return 0;
-}
-
-
 uint32_t KAppVersion(void)
 {
     return FASTQ_LOAD_VERS;
@@ -682,22 +681,10 @@ rc_t SRALoaderFmtMake(SRALoaderFmt **self, const SRALoaderConfig *config)
         return rc;
     }
     if( platform->id == SRA_PLATFORM_454 ) {
-        if( platform->param.ls454.flow_sequence == NULL ) {
-            LOGMSG(klogWarn, "missing FLOW_SEQUENCE in PLATFORM");
-        }
-        if( platform->param.ls454.key_sequence == NULL ) {
-            LOGMSG(klogWarn, "missing KEY_SEQUENCE in PLATFORM");
-        }
         if( rc == 0 && (rc = SRAWriter454_Make(&fmt->w454, config)) != 0 ) {
             LOGERR(klogInt, rc, "failed to initialize 454 writer");
         }
     } else if( platform->id == SRA_PLATFORM_ION_TORRENT ) {
-        if( platform->param.ion_torrent.flow_sequence == NULL ) {
-            LOGMSG(klogWarn, "missing FLOW_SEQUENCE in PLATFORM");
-        }
-        if( platform->param.ion_torrent.key_sequence == NULL ) {
-            LOGMSG(klogWarn, "missing KEY_SEQUENCE in PLATFORM");
-        }
         if( rc == 0 && (rc = SRAWriterIonTorrent_Make(&fmt->wIonTorrent, config)) != 0 ) {
             LOGERR(klogInt, rc, "failed to initialize Ion Torrent writer");
         }
diff --git a/tools/sra-load/fastq-load.vers b/tools/sra-load/fastq-load.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-load/fastq-load.vers
+++ b/tools/sra-load/fastq-load.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-load/fastq-load.vers.h b/tools/sra-load/fastq-load.vers.h
deleted file mode 100644
index 517027e..0000000
--- a/tools/sra-load/fastq-load.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define FASTQ_LOAD_VERS 0x02010007
diff --git a/tools/sra-load/helicos-fmt.c b/tools/sra-load/helicos-fmt.c
index 810f427..d2f254b 100644
--- a/tools/sra-load/helicos-fmt.c
+++ b/tools/sra-load/helicos-fmt.c
@@ -227,11 +227,6 @@ rc_t HelicosLoaderFmt_Whack(HelicosLoaderFmt *self, SRATable** table)
 
 const char UsageDefaultName[] = "helicos-load";
 
-rc_t CC UsageSummary (const char * progname)
-{
-    return 0;
-}
-
 uint32_t KAppVersion(void)
 {
     return HELICOS_LOAD_VERS;
diff --git a/tools/sra-load/helicos-load.vers b/tools/sra-load/helicos-load.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-load/helicos-load.vers
+++ b/tools/sra-load/helicos-load.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-load/helicos-load.vers.h b/tools/sra-load/helicos-load.vers.h
deleted file mode 100644
index d25307a..0000000
--- a/tools/sra-load/helicos-load.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define HELICOS_LOAD_VERS 0x02010007
diff --git a/tools/sra-load/illumina-fmt.c b/tools/sra-load/illumina-fmt.c
index 9bafe77..ad0caa6 100644
--- a/tools/sra-load/illumina-fmt.c
+++ b/tools/sra-load/illumina-fmt.c
@@ -797,11 +797,6 @@ rc_t IlluminaLoaderFmt_Whack(IlluminaLoaderFmt *self, SRATable** table)
 
 const char UsageDefaultName[] = "illumina-load";
 
-rc_t CC UsageSummary (const char * progname)
-{
-    return 0;
-}
-
 uint32_t KAppVersion(void)
 {
     return ILLUMINA_LOAD_VERS;
diff --git a/tools/sra-load/illumina-load.vers b/tools/sra-load/illumina-load.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-load/illumina-load.vers
+++ b/tools/sra-load/illumina-load.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-load/illumina-load.vers.h b/tools/sra-load/illumina-load.vers.h
deleted file mode 100644
index 77ce9c4..0000000
--- a/tools/sra-load/illumina-load.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define ILLUMINA_LOAD_VERS 0x02010007
diff --git a/tools/sra-load/loader-file.c b/tools/sra-load/loader-file.c
index 879ecdf..feeff1a 100644
--- a/tools/sra-load/loader-file.c
+++ b/tools/sra-load/loader-file.c
@@ -76,6 +76,11 @@ rc_t SRALoaderFileFullName(const SRALoaderFile *cself, const char **name)
     return KLoaderFile_FullName(cself ? cself->lfile : NULL, name);
 }
 
+rc_t SRALoaderFileResolveName(const SRALoaderFile *self, char *resolved, size_t rsize)
+{
+    return KLoaderFile_ResolveName(self ? self->lfile : NULL, resolved, rsize);
+}
+
 rc_t SRALoaderFileBlockName ( const SRALoaderFile *cself, const char **block_name )
 {
     if( cself == NULL || block_name == NULL ) {
@@ -162,7 +167,7 @@ rc_t SRALoaderFile_Release(const SRALoaderFile* cself)
 }
 
 rc_t SRALoaderFile_Make(const SRALoaderFile **cself, const KDirectory* dir, const char* filename,
-                        const DataBlock* block, const DataBlockFileAttr* fileattr, const uint8_t* md5_digest)
+                        const DataBlock* block, const DataBlockFileAttr* fileattr, const uint8_t* md5_digest, bool read_ahead)
 {
     rc_t rc = 0;
     SRALoaderFile* obj;
@@ -172,7 +177,7 @@ rc_t SRALoaderFile_Make(const SRALoaderFile **cself, const KDirectory* dir, cons
     } else {
         if( (obj = calloc(1, sizeof(*obj))) == NULL ) {
             rc = RC(rcSRA, rcFile, rcConstructing, rcMemory, rcExhausted);
-        } else if( (rc = KLoaderFile_Make(&obj->lfile, dir, filename, md5_digest)) == 0 ) {
+        } else if( (rc = KLoaderFile_Make(&obj->lfile, dir, filename, md5_digest, read_ahead)) == 0 ) {
             obj->data_block = block;
             obj->file_attr = fileattr;
             *cself = obj;
diff --git a/tools/sra-load/loader-file.h b/tools/sra-load/loader-file.h
index 73cbffc..261eb32 100644
--- a/tools/sra-load/loader-file.h
+++ b/tools/sra-load/loader-file.h
@@ -40,7 +40,7 @@
 typedef struct SRALoaderFile SRALoaderFile;
 
 rc_t SRALoaderFile_Make(const SRALoaderFile **cself, const KDirectory* dir, const char* filename,
-                        const DataBlock* block, const DataBlockFileAttr* fileattr, const uint8_t* md5_digest);
+                        const DataBlock* block, const DataBlockFileAttr* fileattr, const uint8_t* md5_digest, bool read_ahead);
 
 rc_t SRALoaderFile_Release(const SRALoaderFile* cself);
 
@@ -59,6 +59,8 @@ rc_t SRALoaderFileName ( const SRALoaderFile *cself, const char **name );
 
 rc_t SRALoaderFileFullName(const SRALoaderFile *cself, const char **name);
 
+rc_t SRALoaderFileResolveName(const SRALoaderFile  *self, char *resolved, size_t rsize);
+
 /* DATA_BLOCK name attribute */
 rc_t SRALoaderFileBlockName ( const SRALoaderFile *cself, const char **block_name );
 
diff --git a/tools/sra-load/loader-fmt.h b/tools/sra-load/loader-fmt.h
index 3a25fd5..9ef888c 100644
--- a/tools/sra-load/loader-fmt.h
+++ b/tools/sra-load/loader-fmt.h
@@ -50,6 +50,7 @@ typedef struct TArgs_struct {
     const char *_runXmlPath;
     const char* _input_path;
     uint32_t _input_unpacked; /* as bool */
+    uint32_t _no_read_ahead; /* as bool */
 
     const char *_experimentXmlPath;
     const char *_target;
diff --git a/tools/sra-load/loader.c b/tools/sra-load/loader.c
index f2c09f8..9c9c888 100644
--- a/tools/sra-load/loader.c
+++ b/tools/sra-load/loader.c
@@ -28,7 +28,7 @@
 #include <klib/log.h>
 #include <klib/out.h>
 #include <klib/status.h>
-#include <klib/xml.h>
+#include <kxml/xml.h>
 #include <kfs/md5.h>
 #include <kfs/arc.h>
 #include <kfs/tar.h>
@@ -64,6 +64,7 @@ enum TArgsIndex {
     targs_RunXML = 0,
     targs_InputPath,
     targs_InputUnpacked,
+    targs_InputNoCache,
     targs_ExperimentXML,
     targs_Target,
     targs_ForceTarget,
@@ -79,6 +80,7 @@ const char* usage_text[targs_ArgsQty][5] = {
 	{ "path to run.xml describing input files", NULL },
 	{ "input files location, default '.'", NULL },
 	{ "input files are unpacked", NULL },
+    { "disable input files threaded caching", NULL },
 	{ "path to experiment.xml", NULL },
     { "target location", NULL },
 	{ "force target overwrite", NULL },
@@ -86,10 +88,10 @@ const char* usage_text[targs_ArgsQty][5] = {
 	{ "acceptable number of spot creation errors, default is 50", NULL },
 	{ "acceptable percentage of spots creation errors, default is 5", NULL },
 	{ "path to expected.xml", NULL },
-	{ "[on | off] load intensity data, default is off:",
+	{ "[on | off] load intensity data, default is off. For ",
       "  Illumina: signal, intensity, noise;",
       "  AB SOLiD: signal(s);",
-      "  LS454: signal, position (for SFF files ON by default).", NULL }
+      "  LS454: signal, position (for SFF files this option is ON by default).", NULL },
 };
 
 OptDef TArgsDef[] =
@@ -98,16 +100,23 @@ OptDef TArgsDef[] =
     {"run-xml", "r", NULL, usage_text[targs_RunXML], 1, true, true},
     {"input-path", "i", NULL, usage_text[targs_InputPath], 1, true, false},
     {"input-unpacked", "u", NULL, usage_text[targs_InputUnpacked], 1, false, false},
+    {"input-no-threads", "t", NULL, usage_text[targs_InputNoCache], 1, false, false},
     {"experiment", "e", NULL, usage_text[targs_ExperimentXML], 1, true, true},
     {"output-path", "o", NULL, usage_text[targs_Target], 1, true, true},
     {"force", "f", NULL, usage_text[targs_ForceTarget], 1, false, false},
     {"spots-number", "n", NULL, usage_text[targs_SpotsNumber], 1, true, false},
-    {"bad-spot-number", "b", NULL, usage_text[targs_BadSpotsNumber], 1, true, false},
+    {"bad-spot-number", "bE", NULL, usage_text[targs_BadSpotsNumber], 1, true, false},
     {"bad-spot-percentage", "p", NULL, usage_text[targs_BadSpotPercentage], 1, true, false},
     {"expected", "x", NULL, usage_text[targs_ExpectedXML], 1, true, false},
     {"intensities", "s", NULL, usage_text[targs_Intensities], 1, true, false}
 };
 
+rc_t CC UsageSummary (const char * progname)
+{
+    OUTMSG(( "\nUsage:\n\t%s [options] -r run.xml -e experiment.xml -o output-path\n\n", progname));
+    return 0;
+}
+
 rc_t Usage( const Args * args )
 {
     const char * progname = UsageDefaultName;
@@ -115,19 +124,15 @@ rc_t Usage( const Args * args )
     rc_t rc;
     int i;
 
-    if (args == NULL)
+    if(args == NULL) {
         rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
-    else
+    } else {
         rc = ArgsProgram (args, &fullpath, &progname);
-    if (rc)
+    }
+    if(rc != 0 ) {
         progname = fullpath = UsageDefaultName;
-
-/*     UsageSummary (progname); */
-
-/*     KOutMsg ("Options:\n"); */
-
-
-    OUTMSG(( "\nUsage:\n\t%s [options] -r run.xml -e experiment.xml -o output-path\n\n", progname));
+    }
+    UsageSummary(progname);
 
     for(i = 0; i < targs_ArgsQty; i++ ) {
         if( TArgsDef[i].required && TArgsDef[i].help[0] != NULL ) {
@@ -192,6 +197,9 @@ rc_t TArgsParse(TArgs *args, int argc, char *argv[])
     } else if( (rc = ArgsOptionCount(args->args, TArgsDef[targs_InputUnpacked].name, &args->_input_unpacked)) != 0 ) {
         errmsg = TArgsDef[targs_InputUnpacked].name;
 
+    } else if( (rc = ArgsOptionCount(args->args, TArgsDef[targs_InputNoCache].name, &args->_no_read_ahead)) != 0 ) {
+        errmsg = TArgsDef[targs_InputNoCache].name;
+
     } else if( (rc = ArgsOptionCount(args->args, TArgsDef[targs_ForceTarget].name, &args->_force_target)) != 0 ) {
         errmsg = TArgsDef[targs_ForceTarget].name;
 
@@ -322,7 +330,12 @@ rc_t TArgsMake(TArgs **args, int argc, char *argv[])
         r->_spots_bad_allowed = 50;
         r->_spots_bad_allowed_percentage = 5;
         r->_input_unpacked = false;
-        rc = TArgsParse(r, argc, argv);
+        if( argc > 1 ) {
+            rc = TArgsParse(r, argc, argv);
+        } else {
+            MiniUsage(r->args);
+            exit(0);
+        }
     }
     if( rc == 0 ) {
         *args = r;
@@ -631,9 +644,6 @@ static rc_t TArgsLogResultTotal(const TArgs *self, rc_t status, uint64_t spotCou
     /* raise log level in order to print stats */
     tmp_lvl = KLogLevelGet();
     KLogLevelSet(klogInfo);
-    if(status == 0) {
-        Experiment_LogStats(self->_experiment);
-    }
     for(i = 0; self->_expected != NULL && i < self->_expected->number_of_results && rc == 0; i++) {
         ResultXML *f = self->_expected->result[i];
         PLOGMSG(klogInfo, (klogInfo, "loaded",
@@ -755,15 +765,12 @@ rc_t SInputOpen(const SInput **cself, TArgs *args)
                                 const KFile* kf = NULL;
                                 if( ccdirs_qty + 1 > sizeof(ccdirs) / sizeof(ccdirs[0]) ) {
                                     rc = RC(rcExe, rcStorage, rcAllocating, rcNamelist, rcTooLong);
-                                } else if( (rc = KDirectoryOpenFileRead(args->_input_dir, &kf, "%s.xml", b->files[j].cc_xml)) == 0)
-                                {
+                                } else if( (rc = KDirectoryOpenFileRead(args->_input_dir, &kf, "%s.xml", b->files[j].cc_xml)) == 0) {
                                     char base_path[4096];
                                     int r = snprintf(base_path, sizeof base_path, "%s/", b->files[j].cc_xml);
                                     if (r >= sizeof base_path) {
                                         rc = RC(rcExe, rcStorage, rcAllocating, rcFile, rcTooLong);
-                                    }
-                                    else if ((rc = KDirectoryOpenXTocDirRead(args->_input_dir, &ccdirs[ccdirs_qty].xdir,
-                                                                    base_path, kf)) == 0 ) {
+                                    } else if ((rc = KDirectoryOpenXTocDirRead(args->_input_dir, &ccdirs[ccdirs_qty].xdir, false, kf, base_path)) == 0 ) {
                                         cd = ccdirs_qty++;
                                         ccdirs[cd].uid = b->files[j].cc_xml;
                                         KFileRelease(kf);
@@ -777,7 +784,8 @@ rc_t SInputOpen(const SInput **cself, TArgs *args)
                             if( fn == NULL ) {
                                 rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
                             } else {
-                                rc = SRALoaderFile_Make(&self->blocks[i].files[f++], fdir, fn, b, &b->files[j].attr, NULL);
+                                rc = SRALoaderFile_Make(&self->blocks[i].files[f++], fdir, fn, b, &b->files[j].attr,
+                                                        NULL, !args->_no_read_ahead);
                                 file_qty++;
                                 free(fn);
                             }
@@ -825,7 +833,8 @@ rc_t SInputOpen(const SInput **cself, TArgs *args)
                             }
                             self->blocks[i].files = p;
                             for(k = 0; k < data.count; k++) {
-                                rc = SRALoaderFile_Make(&self->blocks[i].files[f++], tar, data.files[k], b, &b->files[j].attr, NULL);
+                                rc = SRALoaderFile_Make(&self->blocks[i].files[f++], tar, data.files[k], b, &b->files[j].attr,
+                                                        NULL, !args->_no_read_ahead);
                                 file_qty++;
                             }
                             free(data.files);
@@ -836,7 +845,8 @@ rc_t SInputOpen(const SInput **cself, TArgs *args)
                         if( fn == NULL ) {
                             rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
                         } else {
-                            rc = SRALoaderFile_Make(&self->blocks[i].files[f++], args->_input_dir, fn, b, &b->files[j].attr, b->files[j].md5_digest);
+                            rc = SRALoaderFile_Make(&self->blocks[i].files[f++], args->_input_dir, fn, b, &b->files[j].attr,
+                                                    b->files[j].md5_digest, !args->_no_read_ahead);
                             file_qty++;
                             free(fn);
                         }
@@ -1106,8 +1116,8 @@ rc_t KMain(int argc, char *argv[])
 
     /* make sure the error was reported */
     if( rc != 0 &&
-        rc != RC(rcExe, rcProcess, rcExecuting, rcProcess, rcCanceled) &&
-        rc != RC(rcExe, rcProcess, rcExecuting, rcTransfer, rcDone)) {
+        rc != SILENT_RC(rcExe, rcProcess, rcExecuting, rcProcess, rcCanceled) &&
+        rc != SILENT_RC(rcExe, rcProcess, rcExecuting, rcTransfer, rcDone)) {
         if (lastRc == 0) {
             lastRc = KLogLastErrorCode();
         }
diff --git a/tools/sra-load/run-xml.c b/tools/sra-load/run-xml.c
index a569ea7..12399eb 100644
--- a/tools/sra-load/run-xml.c
+++ b/tools/sra-load/run-xml.c
@@ -101,7 +101,8 @@ const struct {
     { "Illumina_native_int", rft_IlluminaNativeInt },
     { "Illumina_native_qseq", rft_IlluminaNativeQseq },
     { "SOLiD_native_csfasta", rft_ABINativeCSFasta },
-    { "SOLiD_native_qual", rft_ABINativeQuality }
+    { "SOLiD_native_qual", rft_ABINativeQuality },
+    { "PacBio_HDF5", rft_PacBio_HDF5 }
 };
 
 static
@@ -248,7 +249,7 @@ rc_t parse_FILE(const KXMLNode* FILE, DataBlockFile* file)
             if( file->attr.filetype == 0 ) {
                 rc4 = RC(rcExe, rcStorage, rcConstructing, rcAttr, rcOutofrange);
                 PLOGERR(klogErr, (klogErr, rc4, "FILE $(file) @filetype '$(type)'",
-                         PLOG_2(PLOG_S(file),PLOG_S(digits)), file->filename, filetype));
+                         PLOG_2(PLOG_S(file),PLOG_S(type)), file->filename, filetype));
             }
         }
         rc = rc1 ? rc1 : (rc2 ? rc2 : (rc3 ? rc3 : rc4));
diff --git a/tools/sra-load/run-xml.h b/tools/sra-load/run-xml.h
index f1119dd..b46172b 100644
--- a/tools/sra-load/run-xml.h
+++ b/tools/sra-load/run-xml.h
@@ -43,7 +43,8 @@ typedef enum ERunFileType_enum {
     rft_IlluminaNativeInt,
     rft_IlluminaNativeQseq,
     rft_ABINativeCSFasta,
-    rft_ABINativeQuality
+    rft_ABINativeQuality,
+    rft_PacBio_HDF5
 } ERunFileType;
 
 typedef struct DataBlockFileAttr_struct {
diff --git a/tools/sra-load/sff-fmt.c b/tools/sra-load/sff-fmt.c
index 66a7ca4..49ce718 100644
--- a/tools/sra-load/sff-fmt.c
+++ b/tools/sra-load/sff-fmt.c
@@ -404,11 +404,6 @@ rc_t SFFLoaderFmtWriteDataFile(SFFLoaderFmt* self, const SRALoaderFile* file)
 
 const char UsageDefaultName[] = "sff-load";
 
-rc_t CC UsageSummary (const char * progname)
-{
-    return 0;
-}
-
 uint32_t KAppVersion(void)
 {
     return SFF_LOAD_VERS;
diff --git a/tools/sra-load/sff-load.vers b/tools/sra-load/sff-load.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-load/sff-load.vers
+++ b/tools/sra-load/sff-load.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-load/sff-load.vers.h b/tools/sra-load/sff-load.vers.h
deleted file mode 100644
index e2c52f4..0000000
--- a/tools/sra-load/sff-load.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define SFF_LOAD_VERS 0x02010000
diff --git a/tools/sra-load/srf-fmt.c b/tools/sra-load/srf-fmt.c
index c0f8749..19252f3 100644
--- a/tools/sra-load/srf-fmt.c
+++ b/tools/sra-load/srf-fmt.c
@@ -40,11 +40,6 @@
 
 const char UsageDefaultName[] = "srf-load";
 
-rc_t CC UsageSummary (const char * progname)
-{
-    return 0;
-}
-
 uint32_t KAppVersion(void)
 {
     return SRF_LOAD_VERS;
diff --git a/tools/sra-load/srf-load.vers b/tools/sra-load/srf-load.vers
index 04b10b4..f90b1af 100644
--- a/tools/sra-load/srf-load.vers
+++ b/tools/sra-load/srf-load.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/sra-load/srf-load.vers.h b/tools/sra-load/srf-load.vers.h
deleted file mode 100644
index c1e1293..0000000
--- a/tools/sra-load/srf-load.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define SRF_LOAD_VERS 0x02010007
diff --git a/tools/sra-load/writer-absolid.c b/tools/sra-load/writer-absolid.c
index 922360c..faaaec4 100644
--- a/tools/sra-load/writer-absolid.c
+++ b/tools/sra-load/writer-absolid.c
@@ -38,8 +38,8 @@
 #include <ctype.h>
 #include <assert.h>
 
-const int AbisolidReadType2ReadNumber [] = {0, 0, 0, 1, 1, 1};
-const char *AbisolidReadType2ReadLabel [] = {"", "", "F3", "R3", "F5-P2", "F5-BC"};
+const int AbisolidReadType2ReadNumber [] = {0, 0, 0, 1, 1, 1, 1, 1, 1};
+const char *AbisolidReadType2ReadLabel [] = {"", "", "F3", "R3", "F5-P2", "F5-BC", "F5-RNA", "F5-DNA", "F3-DNA"};
 
 void AbsolidRead_Init(AbsolidRead* read)
 {
@@ -75,6 +75,12 @@ EAbisolidReadType AbsolidRead_Suffix2ReadType(const char* s)
         type = eAbisolidReadType_F5_P2;
     } else if( len > 4 && strcmp(&s[len - 5], "F5-BC") == 0 ) {
         type = eAbisolidReadType_F5_BC;
+    } else if( len > 5 && strcmp(&s[len - 6], "F5-RNA") == 0 ) {
+        type = eAbisolidReadType_F5_RNA;
+    } else if( len > 5 && strcmp(&s[len - 6], "F5-DNA") == 0 ) {
+        type = eAbisolidReadType_F5_DNA;
+    } else if( len > 5 && strcmp(&s[len - 6], "F3-DNA") == 0 ) {
+        type = eAbisolidReadType_F3_DNA;
     } else {
         int i;
         for(i = 0; i < len; i++) {
diff --git a/tools/sra-load/writer-absolid.h b/tools/sra-load/writer-absolid.h
index 74bdcf7..220a990 100644
--- a/tools/sra-load/writer-absolid.h
+++ b/tools/sra-load/writer-absolid.h
@@ -46,7 +46,10 @@ typedef enum EAbisolidReadType_enum {
     eAbisolidReadType_F3 = 2,
     eAbisolidReadType_R3 = 3,
     eAbisolidReadType_F5_P2 = 4,
-    eAbisolidReadType_F5_BC = 5
+    eAbisolidReadType_F5_BC = 5,
+    eAbisolidReadType_F5_RNA = 6,
+    eAbisolidReadType_F5_DNA = 7,
+    eAbisolidReadType_F3_DNA = 8
 } EAbisolidReadType;
 
 extern const int AbisolidReadType2ReadNumber [];
diff --git a/tools/sra-pileup/Makefile b/tools/sra-pileup/Makefile
new file mode 100644
index 0000000..2eb89fa
--- /dev/null
+++ b/tools/sra-pileup/Makefile
@@ -0,0 +1,152 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/sra-pileup
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	sra-pileup \
+	sam-dump
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+	@ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(ALL_TOOLS): vers-includes
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# sra-pileup
+#
+TOOL_SRC = \
+	cmdline_cmn \
+	reref \
+	sra-pileup
+
+TOOL_OBJ = \
+	$(addsuffix .$(OBJX),$(TOOL_SRC))
+
+TOOL_LIB = \
+	-lkapp \
+	-lalign-reader \
+	$(READONLY_SCHEMA_LIBS) \
+	-lsraschema \
+	-lvdb \
+	-lkdb \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
+	-lkfg \
+	-lkfs \
+	-lksrch \
+	-lkproc \
+	-lklib \
+	-lm
+
+$(BINDIR)/sra-pileup: $(TOOL_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(TOOL_LIB)
+
+#-------------------------------------------------------------------------------
+# sam-dump
+#
+SAMDUMP3_SRC = \
+	inputfiles \
+	sam-dump-opts \
+	out_redir \
+	sam-hdr \
+	matecache \
+	read_fkt \
+	sam-aligned \
+	sam-unaligned \
+	cg_tools \
+	sam-dump \
+	sam-dump3
+
+SAMDUMP3_OBJ = \
+	$(addsuffix .$(OBJX),$(SAMDUMP3_SRC))
+
+SAMDUMP3_LIB = \
+	-lkapp \
+	-lalign-reader \
+	$(READONLY_SCHEMA_LIBS) \
+	-lsraschema \
+	-lvdb \
+	-lkdb \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
+	-lkfg \
+	-lkfs \
+	-lksrch \
+	-lkproc \
+	-lklib \
+	-lm
+
+$(BINDIR)/sam-dump: $(SAMDUMP3_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(SAMDUMP3_LIB)
diff --git a/tools/sra-pileup/cg_tools.c b/tools/sra-pileup/cg_tools.c
new file mode 100644
index 0000000..77b8f78
--- /dev/null
+++ b/tools/sra-pileup/cg_tools.c
@@ -0,0 +1,532 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "cg_tools.h"
+#include "debug.h"
+
+#include <klib/printf.h>
+#include <sysalloc.h>
+#include <ctype.h>
+#include <string.h>
+#include <assert.h>
+
+typedef struct CigOps
+{
+    char op;
+    int8_t   ref_sign; /* 0;+1;-1; ref_offset = ref_sign * offset */
+    int8_t   seq_sign; /* 0;+1;-1; seq_offset = seq_sign * offset */
+    uint32_t oplen;
+} CigOps;
+
+
+static void SetCigOp( CigOps * dst, char op, uint32_t oplen )
+{
+    dst->op    = op;
+    dst->oplen = oplen;
+    switch( op ) 
+    { /*MX= DN B IS PH*/
+
+    case 'M' :
+    case 'X' :
+    case '=' :  dst->ref_sign = +1;
+                dst->seq_sign = +1;
+                break;
+
+    case 'D' :
+    case 'N' :  dst->ref_sign = +1;
+                dst->seq_sign = 0;
+                break;
+
+    case 'B' :  dst->ref_sign = -1;
+                dst->seq_sign = 0;
+                break;
+
+    case 'S' :
+    case 'I' :  dst->ref_sign = 0;
+                dst->seq_sign = +1;
+                break;
+
+    case 'P' :
+    case 'H' :
+    case 0   :  dst->ref_sign= 0;   /* terminating op */
+                dst->seq_sign= 0;
+                break;
+
+    default :   assert( 0 );
+                break;
+    }
+}
+
+
+static int32_t ExplodeCIGAR( CigOps dst[], uint32_t len, char const cigar[], uint32_t ciglen )
+{
+    uint32_t i;
+    uint32_t j;
+    int32_t opLen;
+    
+    for ( i = j = opLen = 0; i < ciglen; ++i )
+    {
+        if ( isdigit( cigar[ i ] ) )
+        {
+            opLen = opLen * 10 + cigar[ i ] - '0';
+        }
+        else
+        {
+            assert( isalpha( cigar[ i ] ) );
+            SetCigOp( dst + j, cigar[ i ], opLen );
+            opLen = 0;
+            j++;
+        }
+    }
+    SetCigOp( dst + j, 0, 0 );
+    j++;
+    return j;
+}
+
+
+typedef struct cgOp_s
+{
+    uint16_t length;
+    uint8_t type; /* 0: match, 1: insert, 2: delete */
+    char code;
+} cgOp;
+
+
+static void print_CG_cigar( int line, cgOp const op[], unsigned const ops, unsigned const gap[ 3 ] )
+{
+#if _DEBUGGING
+    unsigned i;
+    
+    SAM_DUMP_DBG( 3, ( "%5i: ", line ) );
+    for ( i = 0; i < ops; ++i )
+    {
+        if ( gap && ( i == gap[ 0 ] || i == gap[ 1 ] || i == gap[ 2 ] ) )
+        {
+            SAM_DUMP_DBG( 3, ( "%u%c", op[ i ].length, tolower( op[ i ].code ) ) );
+        }
+        else
+        {
+            SAM_DUMP_DBG( 3, ( "%u%c", op[ i ].length, toupper( op[ i ].code ) ) );
+        }
+    }
+    SAM_DUMP_DBG( 3, ( "\n" ) );
+#endif
+}
+
+
+/* gap contains the indices of the wobbles in op
+ * gap[0] is between read 1 and 2; it is the 'B'
+ * gap[1] is between read 2 and 3; it is an 'N'
+ * gap[2] is between read 3 and 4; it is an 'N'
+ */
+
+typedef struct cg_cigar_temp
+{
+    unsigned gap[ 3 ];
+    cgOp cigOp[ MAX_READ_LEN ];
+    unsigned opCnt;
+    unsigned S_adjust;
+    unsigned CG_adjust;
+} cg_cigar_temp;
+
+
+static rc_t CIGAR_to_CG_Ops( const cg_cigar_input * input,
+                             cg_cigar_temp * tmp )
+{
+    unsigned i;
+    unsigned ops = 0;
+    unsigned gapno;
+
+    tmp->opCnt = 0;
+    tmp->S_adjust = 0;
+    for ( i = 0; i < input->cigar_len; ++ops )
+    {
+        char opChar = 0;
+        int opLen = 0;
+        int n;
+
+        for ( n = 0; ( ( n + i ) < input->cigar_len ) && ( isdigit( input->cigar[ n + i ] ) ); n++ )
+        {
+            opLen = opLen * 10 + input->cigar[ n + i ] - '0';
+        }
+
+        if ( ( n + i ) < input->cigar_len )
+        {
+            opChar = input->cigar[ n + i ];
+            n++;
+        }
+
+        if ( ( ops + 1 ) >= MAX_READ_LEN )
+            return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+
+        i += n;
+        
+        tmp->cigOp[ ops ].length = opLen;
+        tmp->cigOp[ ops ].code = opChar;
+        switch ( opChar )
+        {
+            case 'M' :
+            case '=' :
+            case 'X' :  tmp->cigOp[ ops ].type = 0;
+                        break;
+
+            case 'S' :  tmp->S_adjust += opLen;
+            case 'I' :  tmp->cigOp[ ops ].type = 1;
+                        tmp->cigOp[ ops ].code = 'I';
+                        break;
+
+            case 'D':   tmp->cigOp[ ops ].type = 2;
+                        break;
+
+            default :   return RC( rcExe, rcData, rcReading, rcConstraint, rcViolated );
+        }
+    }
+
+    tmp->opCnt = ops;
+    tmp->gap[ 0 ] = tmp->gap[ 1 ] = tmp->gap[ 2 ] = ops;
+    print_CG_cigar( __LINE__, tmp->cigOp, ops, NULL );
+
+    if ( ops < 3 )
+        return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+
+    {
+        unsigned fwd = 0; /* 5 10 10 10 */
+        unsigned rev = 0; /* 10 10 10 5 */
+        unsigned acc; /* accumulated length */
+        
+        if ( ( input->seq_req_id == 1 && !input->orientation ) ||
+             ( input->seq_req_id == 2 && input->orientation ) )
+        {
+            for ( i = 0, acc = 0; i < ops  && acc <= 5; ++i )
+            {
+                if ( tmp->cigOp[ i ].type != 2 )
+                {
+                    acc += tmp->cigOp[ i ].length;
+                    if ( acc == 5 && tmp->cigOp[ i + 1 ].type == 1 )
+                    {
+                        fwd = i + 1;
+                        break;
+                    }
+                    else if ( acc > 5 )
+                    {
+                        unsigned const right = acc - 5;
+                        unsigned const left = tmp->cigOp[ i ].length - right;
+                        
+                        memmove( &tmp->cigOp[ i + 2 ], &tmp->cigOp[ i ], ( ops - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+                        ops += 2;
+                        tmp->cigOp[ i ].length = left;
+                        tmp->cigOp[ i + 2 ].length = right;
+                        
+                        tmp->cigOp[ i + 1 ].type = 1;
+                        tmp->cigOp[ i + 1 ].code = 'B';
+                        tmp->cigOp[ i + 1 ].length = 0;
+                        
+                        fwd = i + 1;
+                        break;
+                    }
+                }
+            }
+        }
+        else if ( ( input->seq_req_id == 2 && !input->orientation ) ||
+                  ( input->seq_req_id == 1 && input->orientation ) )
+        {
+            for ( i = ops, acc = 0; i > 0 && acc <= 5; )
+            {
+                --i;
+                if ( tmp->cigOp[ i ].type != 2 )
+                {
+                    acc += tmp->cigOp[ i ].length;
+                    if ( acc == 5 && tmp->cigOp[ i ].type == 1 )
+                    {
+                        rev = i;
+                        break;
+                    }
+                    else if ( acc > 5 )
+                    {
+                        unsigned const left = acc - 5;
+                        unsigned const right = tmp->cigOp[ i ].length - left;
+                        
+                        memmove( &tmp->cigOp[ i + 2 ], &tmp->cigOp[ i ], ( ops - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+                        ops += 2;
+                        tmp->cigOp[ i ].length = left;
+                        tmp->cigOp[ i + 2 ].length = right;
+                        
+                        tmp->cigOp[ i + 1 ].type = 1;
+                        tmp->cigOp[ i + 1 ].code = 'B';
+                        tmp->cigOp[ i + 1 ].length = 0;
+                         
+                        rev = i + 1;
+                        break;
+                    }
+                }
+            }
+        }
+        else
+        {
+            /* fprintf(stderr, "guessing layout\n"); */
+            for ( i = 0, acc = 0; i < ops  && acc <= 5; ++i )
+            {
+                if ( tmp->cigOp[ i ].type != 2 )
+                {
+                    acc += tmp->cigOp[ i ].length;
+                    if ( acc == 5 && tmp->cigOp[ i + 1 ].type == 1 )
+                    {
+                        fwd = i + 1;
+                    }
+                }
+            }
+            for ( i = ops, acc = 0; i > 0 && acc <= 5; )
+            {
+                --i;
+                if ( tmp->cigOp[ i ].type != 2 )
+                {
+                    acc += tmp->cigOp[ i ].length;
+                    if ( acc == 5 && tmp->cigOp[i].type == 1 )
+                    {
+                        rev = i;
+                    }
+                }
+            }
+            if ( ( fwd == 0 && rev == 0 ) || ( fwd != 0 && rev != 0 ) )
+            {
+                for ( i = 0; i < ops; ++i )
+                {
+                    if ( tmp->cigOp[ i ].type == 2 )
+                    {
+                        tmp->cigOp[ i ].code = 'N';
+                        tmp->CG_adjust += tmp->cigOp[ i ].length;
+                    }
+                }
+                return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+            }
+        }
+        if ( fwd && tmp->cigOp[ fwd ].type == 1 )
+        {
+            for ( i = ops, acc = 0; i > fwd + 1; )
+            {
+                --i;
+                if ( tmp->cigOp[ i ].type != 2 )
+                {
+                    acc += tmp->cigOp[ i ].length;
+                    if ( acc >= 10 )
+                    {
+                        if ( acc > 10 )
+                        {
+                            unsigned const r = 10 + tmp->cigOp[ i ].length - acc;
+                            unsigned const l = tmp->cigOp[ i ].length - r;
+                            
+                            if ( ops + 2 >= MAX_READ_LEN )
+                                return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+                            memmove( &tmp->cigOp[ i + 2 ], &tmp->cigOp[ i ], ( ops - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+                            ops += 2;
+                            tmp->cigOp[ i + 2 ].length = r;
+                            tmp->cigOp[ i ].length = l;
+                            
+                            tmp->cigOp[ i + 1 ].length = 0;
+                            tmp->cigOp[ i + 1 ].type = 2;
+                            tmp->cigOp[ i + 1 ].code = 'N';
+                            i += 2;
+                        }
+                        else if ( i - 1 > fwd )
+                        {
+                            if ( tmp->cigOp[ i - 1 ].type == 2 )
+                                 tmp->cigOp[ i - 1 ].code = 'N';
+                            else
+                            {
+                                if ( ops + 1 >= MAX_READ_LEN )
+                                    return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+                                memmove( &tmp->cigOp[ i + 1 ], &tmp->cigOp[ i ], ( ops - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+                                ops += 1;
+                                tmp->cigOp[ i ].length = 0;
+                                tmp->cigOp[ i ].type = 2;
+                                tmp->cigOp[ i ].code = 'N';
+                                i += 1;
+                            }
+                        }
+                        acc = 0;
+                    }
+                }
+            }
+            /** change I to B+M **/
+            tmp->cigOp[ fwd ].code = 'B';
+            memmove( &tmp->cigOp[ fwd + 1 ], &tmp->cigOp[ fwd ], ( ops - fwd ) * sizeof( tmp->cigOp[ 0 ] ) );
+            ops += 1;
+            tmp->cigOp[ fwd + 1 ].code = 'M';
+            tmp->opCnt = ops;
+            /** set the gaps now **/
+            for ( gapno = 3, i = ops; gapno > 1 && i > 0; )
+            {
+                --i;
+                if ( tmp->cigOp[ i ].code == 'N' )
+                    tmp->gap[ --gapno ] = i;
+            }
+            tmp->gap[ 0 ] = fwd;
+            print_CG_cigar( __LINE__, tmp->cigOp, ops, tmp->gap );
+            return 0;
+        }
+        if ( rev && tmp->cigOp[ rev ].type == 1 )
+        {
+            for ( acc = i = 0; i < rev; ++i )
+            {
+                if ( tmp->cigOp[ i ].type != 2 )
+                {
+                    acc += tmp->cigOp[ i ].length;
+                    if ( acc >= 10 )
+                    {
+                        if ( acc > 10 )
+                        {
+                            unsigned const l = 10 + tmp->cigOp[ i ].length - acc;
+                            unsigned const r = tmp->cigOp[ i ].length - l;
+                            
+                            if ( ops + 2 >= MAX_READ_LEN )
+                                return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+                            memmove( &tmp->cigOp[ i + 2 ], &tmp->cigOp[ i ], ( ops - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+                            ops += 2;
+                            tmp->cigOp[ i + 2 ].length = r;
+                            tmp->cigOp[ i ].length = l;
+                            
+                            tmp->cigOp[ i + 1 ].length = 0;
+                            tmp->cigOp[ i + 1 ].type = 2;
+                            tmp->cigOp[ i + 1 ].code = 'N';
+                            rev += 2;
+                            i += 2;
+                        }
+                        else if ( i + 1 < rev )
+                        {
+                            if ( tmp->cigOp[ i + 1 ].type == 2 )
+                                 tmp->cigOp[ i + 1 ].code = 'N';
+                            else
+                            {
+                                if ( ops + 1 >= MAX_READ_LEN )
+                                    return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+                                memmove( &tmp->cigOp[ i + 1 ], &tmp->cigOp[ i ], ( ops - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+                                ops += 1;
+                                tmp->cigOp[ i + 1 ].length = 0;
+                                tmp->cigOp[ i + 1 ].type = 2;
+                                tmp->cigOp[ i + 1 ].code = 'N';
+                                rev += 1;
+                                i += 1;
+                            }
+                        }
+                        acc = 0;
+                    }
+                }
+            }
+            for ( gapno = 3, i = 0; gapno > 1 && i < ops; ++i )
+            {
+                if ( tmp->cigOp[ i ].code == 'N' )
+                    tmp->gap[ --gapno ] = i;
+            }
+            tmp->gap[ 0 ] = rev;
+            tmp->cigOp[ rev ].code = 'B';
+            memmove( &tmp->cigOp[ rev + 1 ], &tmp->cigOp[ rev ], ( ops - rev ) * sizeof( tmp->cigOp[ 0 ] ) );
+            ops += 1;
+            tmp->cigOp[ rev + 1 ].code = 'M';
+            tmp->opCnt = ops;
+            print_CG_cigar( __LINE__, tmp->cigOp, ops, tmp->gap );
+            return 0;
+        }
+    }
+    return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+}
+
+
+static rc_t adjust_cigar( const cg_cigar_input * input, cg_cigar_temp * tmp, cg_cigar_output * output )
+{
+    rc_t rc = 0;
+    unsigned i, j;
+    size_t sz;
+
+    print_CG_cigar( __LINE__, tmp->cigOp, tmp->opCnt, NULL );
+
+    /* remove zero length ops */
+    for ( j = i = 0; i < tmp->opCnt; )
+    {
+        if ( tmp->cigOp[ j ].length == 0 )
+        {
+            ++j;
+            --(tmp->opCnt);
+            continue;
+        }
+        tmp->cigOp[ i++ ] = tmp->cigOp[ j++ ];
+    }
+
+    print_CG_cigar( __LINE__, tmp->cigOp, tmp->opCnt, NULL );
+
+    if ( input->edit_dist_available )
+    {
+        int const adjusted = input->edit_dist + tmp->S_adjust - tmp->CG_adjust;
+        output->edit_dist = adjusted > 0 ? adjusted : 0;
+        SAM_DUMP_DBG( 4, ( "NM: before: %u, after: %u(+%u-%u)\n", input->edit_dist, output->edit_dist, tmp->S_adjust, tmp->CG_adjust ) );
+    }
+    else
+    {
+        output->edit_dist = input->edit_dist;
+    }
+
+    /* merge adjacent ops */
+    for ( i = tmp->opCnt; i > 1; )
+    {
+        --i;
+        if ( tmp->cigOp[ i - 1 ].code == tmp->cigOp[ i ].code )
+        {
+            tmp->cigOp[ i - 1 ].length += tmp->cigOp[ i ].length;
+            memmove( &tmp->cigOp[ i ], &tmp->cigOp[ i + 1 ], ( tmp->opCnt - 1 - i ) * sizeof( tmp->cigOp[ 0 ] ) );
+            --(tmp->opCnt);
+        }
+    }
+    print_CG_cigar( __LINE__, tmp->cigOp, tmp->opCnt, NULL );
+    for ( i = j = 0; i < tmp->opCnt && rc == 0; ++i )
+    {
+        rc = string_printf( &output->cigar[ j ], sizeof( output->cigar ) - j, &sz, "%u%c", tmp->cigOp[ i ].length, tmp->cigOp[ i ].code );
+        j += sz;
+    }
+    output->cigar_len = j;
+    return rc;
+}
+
+
+rc_t make_cg_cigar( const cg_cigar_input * input, cg_cigar_output * output )
+{
+    rc_t rc;
+    cg_cigar_temp tmp;
+    memset( &tmp, 0, sizeof tmp );
+
+    rc = CIGAR_to_CG_Ops( input, &tmp );
+    if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcFormat )
+    {
+        memmove( &output->cigar[ 0 ], &input->cigar[ 0 ], input->cigar_len );
+        output->cigar_len = input->cigar_len;
+        output->cigar[ output->cigar_len ] = 0;
+        output->edit_dist = input->edit_dist;
+        rc = 0;
+    }
+    else if ( rc == 0 )
+    {
+        rc = adjust_cigar( input, &tmp, output );
+    }
+    return rc;
+}
diff --git a/tools/sra-pileup/cg_tools.h b/tools/sra-pileup/cg_tools.h
new file mode 100644
index 0000000..bf40134
--- /dev/null
+++ b/tools/sra-pileup/cg_tools.h
@@ -0,0 +1,64 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_cgtools_
+#define _h_cgtools_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/rc.h>
+
+#define MAX_CG_CIGAR_LEN ( ( 11 * 35 ) + 1 )
+#define MAX_GC_LEN ( ( 11 * 3 ) + 1 )
+#define MAX_READ_LEN ( 35 )
+
+typedef struct cg_cigar_input
+{
+    const char *cigar;
+    size_t cigar_len;
+    bool orientation;
+    uint32_t seq_req_id;
+    bool edit_dist_available;
+    int32_t edit_dist;
+} cg_cigar_input;
+
+
+typedef struct cg_cigar_output
+{
+    char cigar[ MAX_CG_CIGAR_LEN ];
+    size_t cigar_len;
+    int32_t edit_dist;
+} cg_cigar_output;
+
+
+rc_t make_cg_cigar( const cg_cigar_input * input, cg_cigar_output * output );
+
+#endif
\ No newline at end of file
diff --git a/tools/sra-pileup/cmdline_cmn.c b/tools/sra-pileup/cmdline_cmn.c
new file mode 100644
index 0000000..6ee4088
--- /dev/null
+++ b/tools/sra-pileup/cmdline_cmn.c
@@ -0,0 +1,1042 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "cmdline_cmn.h"
+
+#include <kapp/args.h>
+
+#include <vdb/report.h> /* ReportResetTable */
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/out.h>
+
+#include <sra/srapath.h>
+
+#include <vfs/path.h>
+#include <vfs/path-priv.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+const char * ref_usage[] = { "Filter by position on genome.",
+                             "Name can either be file specific name",
+                             "(ex: \"chr1\" or \"1\").",
+                             "\"from\" and \"to\" are 1-based coordinates",
+                             NULL };
+
+const char * outf_usage[] = { "Output will be written to this file",
+                              "instead of std-out", NULL };
+
+const char * table_usage[] = { "Which alignment table(s) to use (p|s|e):", 
+                               "p - primary, s - secondary, e - evidence-interval", 
+                               "(default = p)", NULL };
+
+const char * gzip_usage[] = { "Compress output using gzip", NULL };
+
+const char * bzip_usage[] = { "Compress output using bzip2", NULL };
+
+const char * inf_usage[] = { "File with all input-parameters / options", NULL };
+
+const char * schema_usage[] = { "optional schema-file to be used", NULL };
+
+#define OPTION_REF     "aligned-region"
+#define ALIAS_REF      "r"
+
+#define OPTION_OUTF    "outfile"
+#define ALIAS_OUTF     "o"
+
+#define OPTION_TABLE   "table"
+#define ALIAS_TABLE    "t"
+
+#define OPTION_GZIP    "gzip"
+#define ALIAS_GZIP     NULL
+
+#define OPTION_BZIP    "bzip2"
+#define ALIAS_BZIP     NULL
+
+#define OPTION_INF    "infile"
+#define ALIAS_INF     "f"
+
+#define OPTION_SCHEMA "schema"
+#define ALIAS_SCHEMA  "S"
+
+OptDef CommonOptions[] =
+{
+    /*name,           alias,         hfkt, usage-help,    maxcount, needs value, required */
+    { OPTION_REF,     ALIAS_REF,     NULL, ref_usage,     0,        true,        false },
+    { OPTION_OUTF,    ALIAS_OUTF,    NULL, outf_usage,    1,        true,        false },
+    { OPTION_TABLE,   ALIAS_TABLE,   NULL, table_usage,   1,        true,        false },
+    { OPTION_GZIP,    ALIAS_GZIP,    NULL, gzip_usage,    1,        false,       false },
+    { OPTION_BZIP,    ALIAS_BZIP,    NULL, bzip_usage,    1,        false,       false },
+    { OPTION_INF,     ALIAS_INF,     NULL, inf_usage,     0,        true,        false },
+    { OPTION_SCHEMA,  ALIAS_SCHEMA,  NULL, schema_usage,  1,        true,        false }
+};
+
+
+/* =========================================================================================== */
+
+static rc_t get_str_option( const Args *args, const char *name, const char ** res )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    *res = NULL;
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "ArgsOptionCount() failed" );
+    }
+    else
+    {
+        if ( count > 0 )
+        {
+            rc = ArgsOptionValue( args, name, 0, res );
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "ArgsOptionValue() failed" );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t get_bool_option( const Args *args, const char *name, bool *res, const bool def )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    if ( rc == 0 && count > 0 )
+    {
+        *res = true;
+    }
+    else
+    {
+        *res = def;
+    }
+    return rc;
+}
+
+/* =========================================================================================== */
+
+rc_t get_common_options( Args * args, common_options *opts )
+{
+    rc_t rc = get_str_option( args, OPTION_OUTF, &opts->output_file );
+
+    if ( rc == 0 )
+        rc = get_str_option( args, OPTION_INF, &opts->input_file );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_GZIP, &opts->gzip_output, false );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_BZIP, &opts->bzip_output, false );
+
+    if ( rc == 0 )
+        rc = get_str_option( args, OPTION_SCHEMA, &opts->schema_file );
+
+    if ( rc == 0 )
+    {
+        const char * table2use = NULL;
+        rc = get_str_option( args, OPTION_TABLE, &table2use );
+        opts->tab_select = primary_ats;
+        if ( rc == 0 && table2use != NULL )
+        {
+            size_t l = string_size ( table2use );
+            opts->tab_select = 0;
+            if ( ( string_chr ( table2use, l, 'p' ) != NULL )||
+                 ( string_chr ( table2use, l, 'P' ) != NULL ) )
+            { opts->tab_select |= primary_ats; };
+
+            if ( ( string_chr ( table2use, l, 's' ) != NULL )||
+                 ( string_chr ( table2use, l, 'S' ) != NULL ) )
+            { opts->tab_select |= secondary_ats; };
+
+            if ( ( string_chr ( table2use, l, 'e' ) != NULL )||
+                 ( string_chr ( table2use, l, 'E' ) != NULL ) )
+            { opts->tab_select |= evidence_ats; };
+        }
+    }
+
+    return rc;
+}
+
+void print_common_helplines( void )
+{
+    HelpOptionLine ( ALIAS_REF, OPTION_REF, "name[:from-to]", ref_usage );
+    HelpOptionLine ( ALIAS_OUTF, OPTION_OUTF, "output-file", outf_usage );
+    HelpOptionLine ( ALIAS_TABLE, OPTION_TABLE, "table", table_usage );
+    HelpOptionLine ( ALIAS_BZIP, OPTION_BZIP, "bzip", bzip_usage );
+    HelpOptionLine ( ALIAS_GZIP, OPTION_GZIP, "gzip", gzip_usage );
+}
+
+
+OptDef * CommonOptions_ptr( void )
+{
+    return &CommonOptions[ 0 ];
+}
+
+size_t CommonOptions_count( void )
+{
+    return ( sizeof CommonOptions / sizeof CommonOptions [ 0 ] );
+}
+
+
+/* =========================================================================================== */
+
+
+static int cmp_pchar( const char * a, const char * b )
+{
+    int res = 0;
+    if ( ( a != NULL )&&( b != NULL ) )
+    {
+        size_t len_a = string_size( a );
+        size_t len_b = string_size( b );
+        res = string_cmp ( a, len_a, b, len_b, ( len_a < len_b ) ? len_b : len_a );
+    }
+    return res;
+}
+
+
+/* =========================================================================================== */
+
+
+typedef struct range
+{
+    uint32_t start;
+    uint32_t end;
+} range;
+
+
+static range * make_range( const uint64_t start, const uint64_t end )
+{
+    range *res = calloc( sizeof *res, 1 );
+    if ( res != NULL )
+    {
+        res->start = start;
+        res->end = end;
+    }
+    return res;
+}
+
+
+static int cmp_range( const range * a, const range * b )
+{
+
+    int res = ( a->start - b->start );
+    if ( res == 0 )
+        res = ( a->end - b->end );
+    return res;
+}
+
+
+static bool range_overlapp( const range * a, const range * b )
+{
+    return ( !( ( b->end < a->start ) || ( b->start > a->end ) ) );
+}
+
+
+/* =========================================================================================== */
+
+typedef struct reference_region
+{
+    BSTNode node;
+    const char * name;
+    Vector ranges;
+} reference_region;
+
+
+static reference_region * make_reference_region( const char *name )
+{
+    reference_region *res = calloc( sizeof *res, 1 );
+    if ( res != NULL )
+    {
+        res->name = string_dup_measure ( name, NULL );
+        VectorInit ( &res->ranges, 0, 5 );
+    }
+    return res;
+}
+
+
+static int CC cmp_range_wrapper( const void *item, const void *n )
+{   return cmp_range( item, n ); }
+
+
+static rc_t add_ref_region_range( reference_region * self, const uint64_t start, const uint64_t end )
+{
+    rc_t rc = 0;
+    range *r = make_range( start, end );
+    if ( r == NULL )
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        rc = VectorInsert ( &self->ranges, r, NULL, cmp_range_wrapper );
+        if ( rc != 0 )
+            free( r );
+    }
+    return rc;
+}
+
+
+#define RR_NAME  1
+#define RR_START 2
+#define RR_END   3
+
+
+static void put_c( char *s, size_t size, size_t *dst, char c )
+{
+    if ( *dst < ( size - 1 ) )
+        s[ *dst ] = c;
+    (*dst)++;
+}
+
+static void finish_txt( char *s, size_t size, size_t *dst )
+{
+    if ( *dst > size )
+        s[ size - 1 ] = 0;
+    else
+        s[ *dst ] = 0;
+    *dst = 0;
+}
+
+static uint64_t finish_num( char *s, size_t size, size_t *dst )
+{
+    uint64_t res = 0;
+    char *endp;
+    finish_txt( s, size, dst );
+    res = strtou64( s, &endp, 10 );
+    return res;
+}
+
+
+/* s = refname:1000-2000 */
+static void parse_definition( const char *s, char * name, size_t len,
+                              uint64_t *start, uint64_t *end )
+{
+    size_t n = string_size( s );
+
+    *start = 0;
+    *end   = 0;
+    name[ 0 ] = 0;
+    if ( n > 0 )
+    {
+        size_t i, st, dst = 0;
+        char tmp[ 32 ];
+        st = RR_NAME;
+        for ( i = 0; i < n; ++i )
+        {
+            char c = s[ i ];
+            switch( st )
+            {
+                case RR_NAME  : if ( c == ':' )
+                                {
+                                    finish_txt( name, len, &dst );
+                                    st = RR_START;
+                                }
+                                else
+                                {
+                                    put_c( name, len, &dst, c );
+                                }
+                                break;
+
+                case RR_START : if ( c == '-' )
+                                {
+                                    *start = finish_num( tmp, sizeof tmp, &dst );
+                                    st = RR_END;
+                                }
+                                else if ( ( c >= '0' )&&( c <= '9' ) )
+                                {
+                                    put_c( tmp, sizeof tmp, &dst, c );
+                                }
+                                break;
+
+                case RR_END   : if ( ( c >= '0' )&&( c <= '9' ) )
+                                {
+                                    put_c( tmp, sizeof tmp, &dst, c );
+                                }
+                                break;
+            }
+        }
+        switch( st )
+        {
+            case RR_NAME  : finish_txt( name, len, &dst );
+                            break;
+
+            case RR_START : *start = finish_num( tmp, sizeof tmp, &dst );
+                            break;
+
+            case RR_END   : *end = finish_num( tmp, sizeof tmp, &dst );
+                            break;
+        }
+    }
+}
+
+
+static void CC release_range_wrapper( void * item, void * data )
+{
+    free( item );
+}
+
+
+static void free_reference_region( reference_region * self )
+{
+    free( (void*)self->name );
+    VectorWhack ( &self->ranges, release_range_wrapper, NULL );
+    free( self );
+}
+
+
+static void check_ref_region_ranges( reference_region * self )
+{
+    uint32_t n = VectorLength( &self->ranges );
+    uint32_t i = 0;
+    range *a = NULL;
+    while ( i < n )
+    {
+        range *b = VectorGet ( &self->ranges, i );
+        bool remove = false;
+        if ( a != NULL )
+        {
+            remove = range_overlapp( a, b );
+            if ( remove )
+            {
+                range *r;
+                a->end = b->end;
+                VectorRemove ( &self->ranges, i, (void**)&r );
+                free( r );
+                n--;
+            }
+        }
+        if ( !remove )
+        {
+            a = b;
+            ++i;
+        }
+    }
+}
+
+
+/* =========================================================================================== */
+
+
+static int CC reference_vs_pchar_wrapper( const void *item, const BSTNode *n )
+{
+    const reference_region * r = ( const reference_region * )n;
+    return cmp_pchar( (const char *)item, r->name );
+}
+
+static reference_region * find_reference_region( BSTree * regions, const char * name )
+{
+    return ( reference_region * ) BSTreeFind ( regions, name, reference_vs_pchar_wrapper );
+}
+
+static int CC ref_vs_ref_wrapper( const BSTNode *item, const BSTNode *n )
+{
+   const reference_region * a = ( const reference_region * )item;
+   const reference_region * b = ( const reference_region * )n;
+   return cmp_pchar( a->name, b->name );
+}
+
+static rc_t add_refrange( BSTree * regions, const char * name, const uint64_t start, const uint64_t end )
+{
+    rc_t rc;
+
+    reference_region * r = find_reference_region( regions, name );
+    if ( r == NULL )
+    {
+        r = make_reference_region( name );
+        if ( r == NULL )
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        else
+            rc = add_ref_region_range( r, start, end );
+        if ( rc == 0 )
+            rc = BSTreeInsert ( regions, (BSTNode *)r, ref_vs_ref_wrapper );
+        if ( rc != 0 )
+            free_reference_region( r );
+    }
+    else
+    {
+        rc = add_ref_region_range( r, start, end );
+    }
+    return rc;
+}
+
+
+rc_t parse_and_add_region( BSTree * regions, const char * s )
+{
+    uint64_t start, end;
+    char name[ 64 ];
+    parse_definition( s, name, sizeof name, &start, &end );
+    if ( name[ 0 ] == 0 )
+        return RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    else
+        return add_refrange( regions, name, start, end );
+}
+
+
+static void CC check_refrange_wrapper( BSTNode *n, void *data )
+{
+    check_ref_region_ranges( ( reference_region * ) n );
+}
+
+
+void check_ref_regions( BSTree * regions )
+{
+    BSTreeForEach ( regions, false, check_refrange_wrapper, NULL );
+}
+
+
+static void CC release_ref_region_wrapper( BSTNode *n, void * data )
+{
+    free_reference_region( ( reference_region * ) n );
+}
+
+
+void free_ref_regions( BSTree * regions )
+{    
+    BSTreeWhack ( regions, release_ref_region_wrapper, NULL );
+}
+
+
+rc_t init_ref_regions( BSTree * tree, Args * args )
+{
+    uint32_t count;
+    rc_t rc;
+
+    BSTreeInit( tree );
+    rc = ArgsOptionCount( args, OPTION_REF, &count );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "ArgsOptionCount() failed" );
+    }
+    else
+    {
+        uint32_t i;
+        for ( i = 0; i < count && rc == 0; ++i )
+        {
+            const char * s;
+            rc = ArgsOptionValue( args, OPTION_REF, i, &s );
+            if ( rc != 0 )
+                LOGERR( klogInt, rc, "ArgsOptionValue() failed" );
+            else
+                rc = parse_and_add_region( tree, s );
+        }
+    }
+    return rc;
+}
+
+
+static void CC count_ref_region_wrapper( BSTNode *n, void *data )
+{   
+    reference_region * r = ( reference_region * ) n;
+    uint32_t * count = ( uint32_t * ) data;
+    *count += VectorLength( &(r->ranges) );
+}
+
+
+uint32_t count_ref_regions( BSTree * regions )
+{
+    uint32_t res = 0;
+    BSTreeForEach ( regions, false, count_ref_region_wrapper, &res );
+    return res;
+}
+
+
+typedef struct foreach_ref_region_func
+{
+    rc_t ( CC * on_region ) ( const char * name, uint32_t start, uint32_t end, void *data );
+    const char * name;
+    void * data;
+    rc_t rc;
+} foreach_ref_region_func;
+
+
+static void CC foreach_range_vector_wrapper( void *item, void *data )
+{
+    range * r = ( range * ) item;
+    foreach_ref_region_func * func = ( foreach_ref_region_func * )data;
+
+    if ( func->rc == 0 )
+    {
+        func->rc = func->on_region( func->name, r->start, r->end, func->data );
+    }
+}
+
+
+static void CC foreach_ref_region_wrapper( BSTNode *n, void *data )
+{   
+    reference_region * r = ( reference_region * ) n;
+    foreach_ref_region_func * func = ( foreach_ref_region_func * )data;
+
+    if ( func->rc == 0 )
+    {
+        func->name = r->name;
+        VectorForEach ( &(r->ranges), false, foreach_range_vector_wrapper, data );
+    }
+}
+
+
+rc_t foreach_ref_region( BSTree * regions,
+    rc_t ( CC * on_region ) ( const char * name, uint32_t start, uint32_t end, void *data ), 
+    void *data )
+{
+    foreach_ref_region_func func;
+
+    func.on_region = on_region;
+    func.data = data;
+    func.rc = 0;
+    BSTreeForEach ( regions, false, foreach_ref_region_wrapper, &func );
+    return func.rc;
+}
+
+
+/* =========================================================================================== */
+
+#if TOOLS_USE_SRAPATH != 0
+static bool is_this_a_filesystem_path( const char * path )
+{
+    bool res = false;
+    size_t i, n = string_size ( path );
+    for ( i = 0; i < n && !res; ++i )
+    {
+        char c = path[ i ];
+        res = ( c == '.' || c == '/' || c == '\\' );
+    }
+    return res;
+}
+#endif
+
+#if TOOLS_USE_SRAPATH != 0
+static char *translate_accession( SRAPath *my_sra_path,
+                           const char *accession,
+                           const size_t bufsize )
+{
+    rc_t rc;
+    char * res = calloc( 1, bufsize );
+    if ( res == NULL ) return NULL;
+
+    rc = SRAPathFind( my_sra_path, accession, res, bufsize );
+    if ( GetRCState( rc ) == rcNotFound )
+    {
+        free( res );
+        return NULL;
+    }
+    else if ( GetRCState( rc ) == rcInsufficient )
+    {
+        free( res );
+        return translate_accession( my_sra_path, accession, bufsize * 2 );
+    }
+    else if ( rc != 0 )
+    {
+        free( res );
+        return NULL;
+    }
+    return res;
+}
+#endif
+
+#if TOOLS_USE_SRAPATH != 0
+static rc_t resolve_accession( const KDirectory *my_dir, char ** path )
+{
+    SRAPath *my_sra_path;
+    rc_t rc = 0;
+
+    if ( strchr ( *path, '/' ) != NULL )
+        return 0;
+
+    rc = SRAPathMake( &my_sra_path, my_dir );
+    if ( rc != 0 )
+    {
+        if ( GetRCState ( rc ) != rcNotFound || GetRCTarget ( rc ) != rcDylib )
+        {
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "SRAPathMake() failed" );
+            }
+        }
+        else
+            rc = 0;
+    }
+    else
+    {
+        if ( !SRAPathTest( my_sra_path, *path ) )
+        {
+            char *buf = translate_accession( my_sra_path, *path, 64 );
+            if ( buf != NULL )
+            {
+                free( (char*)(*path) );
+                *path = buf;
+            }
+        }
+        SRAPathRelease( my_sra_path );
+    }
+    return rc;
+}
+#endif
+
+
+/* =========================================================================================== */
+
+
+/****************************************************************************************
+    splits an argument
+
+    example: "/path/file=grp1" into path = "/path/file" and attribute = "grp1"
+    or
+    example: "/path/file" into path = "/path/file" and attribute = NULL
+
+****************************************************************************************/
+static rc_t split_argument( const char *argument, char ** path, char ** attribute, char delim )
+{
+    if ( argument == NULL || path == NULL || attribute == NULL )
+        return RC( rcApp, rcNoTarg, rcConstructing, rcParam, rcNull );
+    else
+    {
+        char * delim_ptr = string_chr ( argument, string_size ( argument ), delim );
+        if ( delim_ptr == NULL )
+        {
+            *path = string_dup_measure( argument, NULL );
+            *attribute = NULL;
+        }
+        else
+        {
+            size_t len = string_size( argument );
+            size_t len1 = ( delim_ptr - argument );
+            *path = string_dup ( argument, len1 );
+            if ( delim_ptr < argument + len - 1 )
+                *attribute = string_dup ( delim_ptr + 1, len - ( len1 + 1 ) );
+            else
+                *attribute = NULL;
+        }
+    }
+    return 0;
+}
+
+
+static rc_t split_vpath_into_path_and_readgroup( VPath *vpath, const char *argument, char ** path, char ** attribute )
+{
+    size_t zz;
+    char readgroup_buffer[ 256 ];
+    rc_t rc1 = VPathOption( vpath, vpopt_readgroup, readgroup_buffer, sizeof readgroup_buffer - 1, &zz );
+    if ( rc1 == 0 )
+        *attribute = string_dup( readgroup_buffer, zz );
+    *path = string_dup( argument, string_size( argument ) );
+    return 0;
+}
+
+
+static rc_t test_split_vpath_into_path_and_readgroup( VPath *vpath, const char *argument, char ** path, char ** attribute )
+{
+    rc_t rc = 0;
+    VPUri_t uri_type = VPathGetUri_t( vpath );
+    switch ( uri_type )
+    {
+        default:
+        case vpuri_invalid:
+            rc = RC( rcExe, rcParam, rcAccessing, rcPath, rcInvalid );
+            break;
+
+        case vpuri_not_supported:
+            rc = RC( rcExe, rcParam, rcAccessing, rcPath, rcUnsupported );
+            break;
+
+        case vpuri_none:
+            rc = split_argument( argument, path, attribute, '=' );
+            break;
+
+        case vpuri_ncbi_vfs:
+        case vpuri_file:
+        case vpuri_ncbi_acc:
+        case vpuri_http:
+            rc = split_vpath_into_path_and_readgroup( vpath, argument, path, attribute );
+            break;
+    }
+    return rc;
+}
+
+
+static rc_t split_argument_into_path_and_readgroup( const char *argument, char ** path, char ** attribute )
+{
+    rc_t rc;
+    char * colon_ptr = string_chr ( argument, string_size ( argument ), ':' );
+    if ( colon_ptr == NULL )
+    {
+        /* we do not have a colon in the argument, that means: there is no uri-syntax involved
+           ---> we can split the "old fashioned way" at the equal-sign */
+        rc = split_argument( argument, path, attribute, '=' );
+    }
+    else
+    {
+        VPath * vpath;
+        rc_t rc = VPathMake( &vpath, argument );
+        *path = NULL;
+        *attribute = NULL;
+
+        if ( rc == 0 )
+        {
+            rc = test_split_vpath_into_path_and_readgroup( vpath, argument, path, attribute );
+            VPathRelease( vpath );
+        }
+    }
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+rc_t foreach_argument( Args * args, KDirectory *dir, bool div_by_spotgrp, bool * empty,
+    rc_t ( CC * on_argument ) ( const char * path, const char * spot_group, void * data ), void * data )
+{
+    uint32_t count;
+    rc_t rc = ArgsParamCount( args, &count );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "ArgsParamCount() failed" );
+    }
+    else
+    {
+        uint32_t idx;
+        if ( empty != NULL )
+        {
+            *empty = ( count == 0 );
+        }
+        for ( idx = 0; idx < count && rc == 0; ++idx )
+        {
+            const char *param = NULL;
+            rc = ArgsParamValue( args, idx, &param );
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "ArgsParamvalue() failed" );
+            }
+            else
+            {
+                
+                char * path = NULL;
+                char * spot_group = NULL;
+
+                rc = split_argument_into_path_and_readgroup( param, &path, &spot_group );
+                if ( rc == 0 && path != NULL )
+                {
+                    /* in case there is no spotgroup-override from the commandline AND
+                       the option to divide by spot-group is set, let spot_group point
+                       to an empty string ---> divide by original spot-group! */
+                    if ( spot_group == NULL && div_by_spotgrp )
+                    {
+                        spot_group = calloc( 1, 1 );
+                    }
+
+#if TOOLS_USE_SRAPATH != 0
+                    if ( !is_this_a_filesystem_path( path ) )
+                    {
+                        rc = resolve_accession( dir, &path );
+                    }
+#endif
+
+                    if ( rc == 0 )
+                    {
+                        rc = on_argument( path, spot_group, data );
+                    }
+
+                    free( path );
+                    if ( spot_group != NULL )
+                        free( spot_group );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+static rc_t prepare_whole_file( prepare_ctx * ctx )
+{
+    rc_t rc = 0;
+    if ( ctx->reflist != NULL )
+    {
+        uint32_t count;
+        rc = ReferenceList_Count( ctx->reflist, &count );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "ReferenceList_Count() failed" );
+        }
+        else
+        {
+            uint32_t idx;
+            for ( idx = 0; idx < count && rc == 0; ++idx )
+            {
+                rc = ReferenceList_Get( ctx->reflist, &ctx->refobj, idx );
+                if ( rc != 0 )
+                {
+                    LOGERR( klogInt, rc, "ReferenceList_Get() failed" );
+                }
+                else
+                {
+                    rc = ctx->on_section( ctx, 0, 0 );
+                    if ( rc == 0 )
+                        ReferenceObj_Release( ctx->refobj );
+                }
+            }
+        }
+    }
+    else
+    {
+        ctx->refobj = NULL;
+        rc = ctx->on_section( ctx, 0, 0 );
+    }
+    return rc;
+}
+
+
+static rc_t CC prepare_region_cb( const char * name, uint32_t start, uint32_t end, void * data )
+{
+    prepare_ctx * ctx = ( prepare_ctx * )data;
+    rc_t rc = ReferenceList_Find( ctx->reflist, &ctx->refobj, name, string_size( name ) );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "ReferenceList_Find() failed" );
+    }
+    else
+    {
+        rc = ctx->on_section( ctx, start, end );
+        if ( rc == 0 )
+            ReferenceObj_Release( ctx->refobj );
+    }
+    return rc;
+}
+
+
+static rc_t prepare_db_table( prepare_ctx *ctx,
+                              const VDBManager *vdb_mgr,
+                              VSchema *vdb_schema,
+                              const char * path )
+{
+    rc_t rc;
+    ctx->db = NULL;
+    ctx->seq_tab = NULL;
+
+    rc = VDBManagerOpenDBRead ( vdb_mgr, &ctx->db, vdb_schema, "%s", path );
+    if ( rc != 0 )
+    {
+        rc = VDBManagerOpenTableRead ( vdb_mgr, &ctx->seq_tab, NULL, "%s", path );
+        if ( rc != 0 )
+        {
+            PLOGERR(klogInt, (klogInt, rc, "failed to open '$(path)'",
+                "path=%s", path));
+        }
+        else {
+            ReportResetTable(path, ctx->seq_tab);
+        }
+    }
+    else
+    {
+        rc = VDatabaseOpenTableRead( ctx->db, &ctx->seq_tab, "SEQUENCE" );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VDatabaseOpenTableRead( SEQUENCE ) failed" );
+        }
+        else {
+            ReportResetDatabase(path, ctx->db);
+        }
+    }
+    return rc;
+}
+
+
+static rc_t prepare_reflist( prepare_ctx *ctx )
+{
+    rc_t rc = 0;
+    ctx->reflist = NULL;
+    if ( ctx->db != NULL )
+    {
+        uint32_t reflist_options = ereferencelist_4na;
+
+        if ( ctx->use_primary_alignments )
+            reflist_options |= ereferencelist_usePrimaryIds;
+
+        if ( ctx->use_secondary_alignments )
+            reflist_options |= ereferencelist_useSecondaryIds;
+
+        if ( ctx->use_evidence_alignments )
+            reflist_options |= ereferencelist_useEvidenceIds;
+
+        rc = ReferenceList_MakeDatabase( &ctx->reflist, ctx->db, reflist_options, 0, NULL, 0 );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "ReferenceList_MakeDatabase() failed" );
+        }
+    }
+    return rc;
+}
+
+
+rc_t prepare_ref_iter( prepare_ctx *ctx,
+                       const VDBManager *vdb_mgr,
+                       VSchema *vdb_schema,
+                       const char * path,
+                       BSTree * regions )
+{
+    rc_t rc = prepare_db_table( ctx, vdb_mgr, vdb_schema, path );
+    if ( rc == 0 )
+    {
+        rc = prepare_reflist( ctx );
+        if( rc == 0 )
+        {
+            if ( ctx->reflist == NULL || count_ref_regions( regions ) == 0 )
+            {
+                /* the user has not specified a reference-range : use the whole file... */
+                rc = prepare_whole_file( ctx );
+            }
+            else
+            {
+                /* pick only the requested ranges... */
+                rc = foreach_ref_region( regions, prepare_region_cb, ctx );
+            }
+        }
+        if ( ctx->reflist != NULL )
+        {
+            ReferenceList_Release( ctx->reflist );
+        }
+    }
+    VTableRelease ( ctx->seq_tab );
+    VDatabaseRelease ( ctx->db );
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+rc_t parse_inf_file( Args * args )
+{
+    return Args_parse_inf_file( args, OPTION_INF );
+}
diff --git a/tools/sra-pileup/cmdline_cmn.h b/tools/sra-pileup/cmdline_cmn.h
new file mode 100644
index 0000000..bb46575
--- /dev/null
+++ b/tools/sra-pileup/cmdline_cmn.h
@@ -0,0 +1,133 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_cmdline_cmn_
+#define _h_cmdline_cmn_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <kapp/args.h>
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/text.h>
+#include <klib/vector.h>
+#include <klib/container.h>
+
+#include <kfs/directory.h>
+/* #include <sra/srapath.h> */
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+
+#include <align/iterator.h>
+#include <align/reference.h>
+
+#include <strtol.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+typedef uint8_t align_tab_select;
+enum { primary_ats = 1, secondary_ats = 2, evidence_ats = 4 };
+
+typedef struct common_options
+{
+    bool gzip_output;
+    bool bzip_output;
+    align_tab_select tab_select;
+    const char * output_file;
+    const char * input_file;
+    const char * schema_file;
+} common_options;
+
+
+void print_common_helplines( void );
+
+rc_t get_common_options( Args * args, common_options *opts );
+OptDef * CommonOptions_ptr( void );
+size_t CommonOptions_count( void );
+
+/* get ref-ranges from the command-line and iterate them... */
+rc_t init_ref_regions( BSTree * regions, Args * args );
+uint32_t count_ref_regions( BSTree * regions );
+
+rc_t parse_and_add_region( BSTree * regions, const char * s );
+
+rc_t foreach_ref_region( BSTree * regions,
+    rc_t ( CC * on_range ) ( const char * name, uint32_t start, uint32_t end, void *data ), 
+    void *data );
+
+void check_ref_regions( BSTree * regions );
+void free_ref_regions( BSTree * regions );
+
+rc_t foreach_argument( Args * args, KDirectory *dir, bool div_by_spotgrp, bool * empty,
+    rc_t ( CC * on_argument ) ( const char * path, const char * spot_group, void * data ), void * data );
+
+
+typedef struct prepare_ctx
+{
+    ReferenceIterator *ref_iter;
+    PlacementSetIterator *plset_iter;
+    const VDatabase *db;
+    const VTable *seq_tab;
+    const ReferenceList *reflist;
+    const ReferenceObj *refobj;
+    const char * spot_group;
+    bool omit_qualities;
+    bool use_primary_alignments;
+    bool use_secondary_alignments;
+    bool use_evidence_alignments;
+    void * data;
+    rc_t ( CC * on_section ) ( struct prepare_ctx * ctx, uint32_t start, uint32_t end );
+    const char *path;
+} prepare_ctx;
+
+
+
+rc_t prepare_ref_iter( prepare_ctx *ctx,
+                       const VDBManager *vdb_mgr,
+                       VSchema *vdb_schema,
+                       const char * path,
+                       BSTree * regions );
+
+rc_t prepare_plset_iter( prepare_ctx *ctx,
+                         const VDBManager *vdb_mgr,
+                         VSchema *vdb_schema,
+                         const char * path,
+                         BSTree * ranges );
+
+
+rc_t parse_inf_file( Args * args );
+
+#endif
diff --git a/tools/sra-pileup/debug.h b/tools/sra-pileup/debug.h
new file mode 100644
index 0000000..d1a321b
--- /dev/null
+++ b/tools/sra-pileup/debug.h
@@ -0,0 +1,34 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _tools_sam_dump_debug_h_
+#define _tools_sam_dump_debug_h_
+
+#include <klib/debug.h>
+
+#define SAM_DUMP_DBG_PASTE(a,b) a##b
+#define SAM_DUMP_DBG(flag,msg) DBGMSG(DBG_APP,DBG_FLAG(SAM_DUMP_DBG_PASTE(DBG_APP_,flag)), msg)
+
+#endif /* _tools_sam_dump_debug_h_ */
diff --git a/tools/sra-pileup/inputfiles.c b/tools/sra-pileup/inputfiles.c
new file mode 100644
index 0000000..0c8ba0d
--- /dev/null
+++ b/tools/sra-pileup/inputfiles.c
@@ -0,0 +1,376 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include "inputfiles.h"
+
+#include <sra/sraschema.h> /* VDBManagerMakeSRASchema */
+#include <vdb/schema.h> /* VSchemaRelease */
+
+#include <kdb/manager.h>
+#include <kfs/file.h>
+#include <vfs/manager.h>
+#include <vfs/path.h>
+
+#include <sysalloc.h>
+#include <stdlib.h>
+
+
+static void free_input_database( input_database * id )
+{
+    if ( id->path != NULL ) free( id->path );
+    if ( id->db != NULL ) VDatabaseRelease( id->db );
+    if ( id->reflist != NULL ) ReferenceList_Release( id->reflist );
+    if ( id->prim_ctx != NULL ) free( id->prim_ctx );
+    if ( id->sec_ctx != NULL ) free( id->sec_ctx );
+    if ( id->ev_ctx != NULL ) free( id->ev_ctx );
+    free( id );
+}
+
+
+static void free_input_table( input_table * it )
+{
+    if ( it->path != NULL ) free( it->path );
+    if ( it->tab != NULL ) VTableRelease( it->tab );
+    free( it );
+}
+
+
+static rc_t append_database( input_files *self, const VDatabase * db,
+                             const char * path, uint32_t reflist_options, bool show_err )
+{
+    const ReferenceList *reflist;
+    rc_t rc = ReferenceList_MakeDatabase( &reflist, db, reflist_options, 0, NULL, 0 );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "cannot create reflist for '$(t)'", "t=%s", path ) );
+    }
+    else
+    {
+        input_database * id = calloc( sizeof * id, 1 );
+        if ( id == NULL )
+        {
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+            (void)LOGERR( klogErr, rc, "cannot create input-database structure" );
+        }
+        else
+        {
+            uint32_t idx;
+
+            id->db = db;
+            id->reflist = reflist;
+            id->path = string_dup( path, string_size( path ) );
+
+            rc = VectorAppend( &self->dbs, &idx, id );
+            if ( rc != 0 )
+            {
+                (void)PLOGERR( klogErr, ( klogErr, rc, "cannot append db '$(t)' to inputfiles", "t=%s", path ) );
+                free_input_database( id );
+            }
+            else
+            {
+                ++(self->database_count);
+                id->db_idx = idx;
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t append_table( input_files *self, const VTable *tab, const char * path )
+{
+    rc_t rc = 0;
+    input_table * it = calloc( sizeof * it, 1 );
+    if ( it == NULL )
+    {
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        (void)LOGERR( klogErr, rc, "cannot create input-table structure" );
+    }
+    else
+    {
+        it->path = string_dup( path, string_size( path ) );
+        it->tab = tab;
+
+        rc = VectorAppend( &self->tabs, NULL, it );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogErr, ( klogErr, rc, "cannot append tab '$(t)' to inputfiles", "t=%s", path ) );
+            free_input_table( it );
+        }
+        else
+        {
+            ++(self->table_count);
+        }
+    }
+    return rc;
+}
+
+
+static int cmp_pchar( const char * a, const char * b )
+{
+    int res = 0;
+    if ( ( a != NULL )&&( b != NULL ) )
+    {
+        size_t len_a = string_size( a );
+        size_t len_b = string_size( b );
+        res = string_cmp ( a, len_a, b, len_b, ( len_a < len_b ) ? len_b : len_a );
+    }
+    return res;
+}
+
+
+static rc_t contains_ref_and_alignments( const VDatabase * db, const char * path, bool * res, bool show_err )
+{
+    KNamelist *tables;
+    rc_t rc = VDatabaseListTbl ( db, &tables );
+    if ( rc != 0 )
+    {
+        if ( show_err )
+        {
+            (void)PLOGERR( klogErr, ( klogErr, rc, "VDatabaseListTbl() failed on '$(t)'", "t=%s", path ) );
+        }
+    }
+    else
+    {
+        uint32_t count;
+        rc = KNamelistCount ( tables, &count );
+        if ( rc != 0 )
+        {
+            if ( show_err )
+            {
+                (void)PLOGERR( klogErr, ( klogErr, rc, "KNamelistCount on Table-Names-List failed on '$(t)'", "t=%s", path ) );
+            }
+        }
+        else
+        {
+            uint32_t idx;
+            bool has_ref = false;
+            bool has_alignment = false;
+            for ( idx = 0; rc == 0 && idx < count; ++idx )
+            {
+                const char * tabname;
+                rc = KNamelistGet ( tables, idx, &tabname );
+                if ( rc != 0 )
+                {
+                    if ( show_err )
+                    {
+                        (void)PLOGERR( klogErr, ( klogErr, rc, "KNamelistGet on Table-Names-List failed on '$(t)'", "t=%s", path ) );
+                    }
+                }
+                else
+                {
+                    if ( cmp_pchar( tabname, "REFERENCE" ) == 0 )
+                        has_ref = true;
+                    if ( cmp_pchar( tabname, "PRIMARY_ALIGNMENT" ) == 0 )
+                        has_alignment = true;
+                }
+            }
+            *res = ( has_ref && has_alignment );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t open_database( input_files *self, const VDBManager *mgr,
+                           const char * path, uint32_t reflist_options, bool show_err )
+{
+    const VDatabase * db;
+    rc_t rc = VDBManagerOpenDBRead( mgr, &db, NULL, "%s", path );
+    if ( rc != 0 )
+    {
+        if ( show_err )
+        {
+            (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open db '$(t)'", "t=%s", path ) );
+        }
+    }
+    else
+    {
+        bool has_alignments = false;
+        rc = contains_ref_and_alignments( db, path, &has_alignments, show_err );
+        if ( rc == 0 )
+        {
+            if ( has_alignments )
+            {
+                rc = append_database( self, db, path, reflist_options, show_err );
+            }
+            else
+            {
+                const VTable *tab;
+                rc = VDatabaseOpenTableRead ( db, &tab, "SEQUENCE" );
+                if ( rc != 0 )
+                {
+                    if ( show_err )
+                    {
+                        (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open table SEQUENCE for '$(t)'", "t=%s", path ) );
+                    }
+                }
+                else
+                {
+                    rc = append_table( self, tab, path );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t open_table( input_files *self, const VDBManager *mgr, const char * path, bool show_error )
+{
+    const VTable * tab;    
+
+    rc_t rc = VDBManagerOpenTableRead( mgr, &tab, NULL, "%s", path );
+    if ( rc != 0 )
+    {
+        struct VSchema* schema = NULL;
+        rc = VDBManagerMakeSRASchema( mgr, &schema );
+        if ( rc != 0 )
+        {
+            (void)LOGERR( klogErr, rc, "cannot MakeSRASchema" );
+        }
+        else
+        {
+            rc = VDBManagerOpenTableRead( mgr, &tab, schema, "%s", path );
+            if ( rc != 0 )
+            {
+                if ( show_error )
+                {
+                    (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open tab '$(t)'", "t=%s", path ) );
+                }
+            }
+            VSchemaRelease( schema );
+        }
+    }
+
+    if ( rc == 0 )
+        rc = append_table( self, tab, path );
+
+    return rc;
+}
+
+
+static rc_t is_unknown( input_files *self, const char * path )
+{
+    rc_t rc = VNamelistAppend( self->not_found, path );
+    if ( rc == 0 )
+        ++( self->not_found_count );
+    return rc;
+}
+
+
+static rc_t split_input_files( input_files *self, const VDBManager *mgr,
+                               const VNamelist * src, uint32_t reflist_options )
+{
+    uint32_t src_count;
+    rc_t rc = VNameListCount( src, &src_count );
+    if ( rc != 0 )
+    {
+        (void)LOGERR( klogErr, rc, "VNameListCount failed" );
+    }
+    else
+    {
+        uint32_t src_idx;
+        for ( src_idx = 0; src_idx < src_count && rc == 0 ; ++src_idx )
+        {
+            const char * path;
+            rc = VNameListGet( src, src_idx, &path );
+            if ( rc == 0 && path != NULL )
+            {
+                int path_type = VDBManagerPathType ( mgr, path );
+                if ( rc == 0 )
+                {
+                    switch( path_type )
+                    {
+                        case kptDatabase : rc = open_database( self, mgr, path, reflist_options, true ); break;
+
+                        case kptPrereleaseTbl :
+                        case kptTable    : rc = open_table( self, mgr, path, true ); break;
+
+                        default          : rc = is_unknown( self, path ); break;
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+rc_t discover_input_files( input_files **self, const VDBManager *mgr,
+                           const VNamelist * src, uint32_t reflist_options )
+{
+    rc_t rc = 0;
+
+    input_files * ipf = calloc( sizeof * ipf, 1 );
+    *self = NULL;
+    if ( ipf == NULL )
+    {
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        (void)LOGERR( klogErr, rc, "cannot create inputfiles structure" );
+    }
+    else
+    {
+        rc = VNamelistMake( &( ipf->not_found ), 5 );
+        if ( rc != 0 )
+            (void)LOGERR( klogErr, rc, "cannot create inputfiles.not_found structure" );
+        else
+        {
+            VectorInit( &( ipf->dbs ), 0, 5 );
+            VectorInit( &( ipf->tabs ), 0, 5 );
+            rc = split_input_files( ipf, mgr, src, reflist_options );
+        }
+        if ( rc != 0 )
+            release_input_files( ipf );
+        else
+            *self = ipf;
+    }
+    return rc;
+}
+
+
+static void CC db_whack( void * item, void * data )
+{
+    input_database * id = ( input_database * )item;
+    free_input_database( id );
+}
+
+
+static void CC tab_whack( void * item, void * data )
+{
+    input_table * it = ( input_table * )item;
+    free( it->path );
+    VTableRelease( it->tab );
+    free( it );
+}
+
+
+void release_input_files( input_files *self )
+{
+    VectorWhack( &self->dbs, db_whack, NULL );
+    VectorWhack( &self->tabs, tab_whack, NULL );
+    VNamelistRelease( self->not_found );
+    free( self );
+}
diff --git a/tools/sra-pileup/inputfiles.h b/tools/sra-pileup/inputfiles.h
new file mode 100644
index 0000000..4698785
--- /dev/null
+++ b/tools/sra-pileup/inputfiles.h
@@ -0,0 +1,99 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_inputfiles_
+#define _h_inputfiles_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/vector.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/namelist.h>
+
+#include <vdb/manager.h>
+#include <vdb/vdb-priv.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+
+#include <align/reference.h>
+#include <align/manager.h>
+
+/*
+    the VNamelist of input-files/accessions/uri's is tested one at a time
+    if it is: a database, a table or cannot be found
+    in case of a database : a vdb-db-handle is opened
+    in case of a table    : a vdb-tab-handle is opened
+    in case of not found  : name is put into the not-found list
+*/
+
+
+typedef struct input_database
+{
+    uint32_t db_idx;
+    char * path;
+    const VDatabase * db;
+    const ReferenceList *reflist;
+    void * prim_ctx;
+    void * sec_ctx;
+    void * ev_ctx;
+} input_database;
+
+
+typedef struct input_table
+{
+    char * path;
+    const VTable * tab;
+} input_table;
+
+
+
+typedef struct input_files
+{
+    uint32_t database_count;
+    uint32_t table_count;
+    uint32_t not_found_count;
+
+    Vector dbs;
+    Vector tabs;
+    VNamelist * not_found;
+} input_files;
+
+
+
+rc_t discover_input_files( input_files **self, const VDBManager *mgr,
+                           const VNamelist * src, uint32_t reflist_options );
+
+void release_input_files( input_files *self );
+
+#endif
diff --git a/tools/sra-pileup/matecache.c b/tools/sra-pileup/matecache.c
new file mode 100644
index 0000000..646eeb6
--- /dev/null
+++ b/tools/sra-pileup/matecache.c
@@ -0,0 +1,439 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "matecache.h"
+#include <sysalloc.h>
+#include <stdlib.h>
+
+void release_matecache( matecache * const self )
+{
+    if ( self != NULL )
+    {
+        if ( self->per_file != NULL )
+        {
+            uint32_t idx;
+            for ( idx = 0; idx < self->count; ++idx )
+            {
+                if ( self->per_file[ idx ].same_ref_64 != NULL )
+                    KVectorRelease( self->per_file[ idx ].same_ref_64 );
+                if ( self->per_file[ idx ].same_ref_16 != NULL )
+                    KVectorRelease( self->per_file[ idx ].same_ref_16 );
+
+                if ( self->per_file[ idx ].unaligned_64_a != NULL )
+                    KVectorRelease( self->per_file[ idx ].unaligned_64_a );
+                if ( self->per_file[ idx ].unaligned_64_b != NULL )
+                    KVectorRelease( self->per_file[ idx ].unaligned_64_b );
+            }
+            free( self->per_file );
+        }
+        free( self );
+    }
+}
+
+
+rc_t make_matecache( matecache **self, uint32_t count )
+{
+    rc_t rc = 0;
+
+    matecache * mc = calloc( sizeof * mc, 1 );
+    *self = NULL;
+    if ( mc == NULL )
+    {
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        (void)LOGERR( klogErr, rc, "cannot create matecache structure" );
+    }
+    else
+    {
+        mc->count = count;
+        mc->per_file = calloc( sizeof *(mc->per_file), count );
+        if ( mc->per_file == NULL )
+        {
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+            (void)LOGERR( klogErr, rc, "cannot create matecache internal structure" );
+        }
+        else
+        {
+            uint32_t idx;
+            for ( idx = 0; idx < count && rc == 0; ++idx )
+            {
+                rc = KVectorMake( &( mc->per_file[ idx ].same_ref_64 ) );
+                if ( rc != 0 )
+                    (void)LOGERR( klogErr, rc, "cannot create KVector (same-ref) U64" );
+                else
+                {
+                    rc = KVectorMake( &( mc->per_file[ idx ].same_ref_16 ) );
+                    if ( rc != 0 )
+                        (void)LOGERR( klogErr, rc, "cannot create KVector (same-ref) U16" );
+                    else
+                    {
+                        rc = KVectorMake( &( mc->per_file[ idx ].unaligned_64_a ) );
+                        if ( rc != 0 )
+                            (void)LOGERR( klogErr, rc, "cannot create KVector (unaligned a) U64" );
+                        else
+                        {
+                            rc = KVectorMake( &( mc->per_file[ idx ].unaligned_64_b ) );
+                            if ( rc != 0 )
+                                (void)LOGERR( klogErr, rc, "cannot create KVector (unaligned b) U64" );
+                        }
+                    }
+                }
+            }
+            if ( rc == 0 )
+                *self = mc;
+        }
+        if ( rc != 0 )
+            release_matecache( mc );
+    }
+    return rc;
+}
+
+#if 0
+static int32_t calc_tlen( uint32_t self_pos, uint32_t mate_pos,
+                   uint32_t self_len, uint32_t mate_len, uint32_t read_num )
+{
+    int32_t res = 0;
+    unsigned const self_left  = self_pos;
+    unsigned const mate_left  = mate_pos;
+    unsigned const self_right = self_left + self_len;
+    unsigned const mate_right = mate_left + mate_len;
+    unsigned const  leftmost  = (self_left  < mate_left ) ? self_left  : mate_left;
+    unsigned const rightmost  = (self_right > mate_right) ? self_right : mate_right;
+    unsigned const tlen = rightmost - leftmost;
+            
+    /* The standard says, "The leftmost segment has a plus sign and the rightmost has a minus sign." */
+    if (   ( self_left <= mate_left && self_right >= mate_right )      /* mate fully contained within self or */
+        || ( mate_left <= self_left && mate_right >= self_right ) )    /* self fully contained within mate; */
+    {
+        if ( self_left < mate_left || ( read_num == 1 && self_left == mate_left ) )
+            res = tlen;
+        else
+            res = -tlen;
+    }
+    else if ( ( self_right == mate_right && mate_left == leftmost ) /* both are rightmost, but mate is leftmost */
+             ||  self_right == rightmost )
+    {
+        res = -tlen;
+    }
+    else
+        res = tlen;
+
+    return res;
+}
+#endif
+
+static rc_t matecache_check( const matecache * const self, uint32_t db_idx, matecache_per_file ** mcpf )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+    {
+        rc = RC( rcApp, rcNoTarg, rcAccessing, rcSelf, rcNull );
+        (void)LOGERR( klogErr, rc, "cannot insert into same-ref-cache" );
+    }
+    else if ( db_idx < self->count )
+    {
+        *mcpf = &self->per_file[ db_idx ];
+        if ( mcpf == NULL )
+        {
+            rc = RC( rcApp, rcNoTarg, rcAccessing, rcParam, rcInvalid );
+            (void)LOGERR( klogErr, rc, "cannot insert into same-ref-cache" );
+        }
+    }
+    return rc;
+}
+
+
+rc_t matecache_insert_same_ref( matecache * const self,
+        uint32_t db_idx, int64_t key, INSDC_coord_zero ref_pos, uint32_t flags, INSDC_coord_len tlen )
+{
+    matecache_per_file * mcpf = NULL;
+    rc_t rc = matecache_check( self, db_idx, &mcpf );
+    if ( rc == 0 )
+    {
+        uint64_t ref_pos_and_tlen = ref_pos;
+        ref_pos_and_tlen <<= 32;
+        ref_pos_and_tlen |= tlen;
+        rc = KVectorSetU64( mcpf->same_ref_64, key, ref_pos_and_tlen );
+        if ( rc != 0 )
+            (void)LOGERR( klogErr, rc, "cannot insert into KVector (same-ref) U64" );
+        else
+        {
+            rc = KVectorSetU16( mcpf->same_ref_16, key, flags );
+            if ( rc != 0 )
+                (void)LOGERR( klogErr, rc, "cannot insert into KVector (same-ref) U16" );
+        }
+        if ( rc == 0 )
+        {
+            mcpf->stat_same_ref.count++;
+            if ( mcpf->stat_same_ref.count > mcpf->maxcount_same_ref )
+                mcpf->maxcount_same_ref = mcpf->stat_same_ref.count;
+            mcpf->stat_same_ref.inserts++;
+        }
+    }
+    return rc;
+}
+
+
+rc_t matecache_lookup_same_ref( const matecache * const self, uint32_t db_idx, int64_t key,
+                       INSDC_coord_zero *ref_pos, uint32_t *flags, INSDC_coord_len *tlen )
+{
+    matecache_per_file * mcpf = NULL;
+    rc_t rc = matecache_check( self, db_idx, &mcpf );
+    if ( rc == 0 )
+    {
+        uint64_t value64;
+        mcpf->stat_same_ref.lookups++;
+        rc = KVectorGetU64( mcpf->same_ref_64, key, &value64 );
+        if ( rc != 0 )
+        {
+            if ( GetRCState( rc ) != rcNotFound )
+                (void)LOGERR( klogErr, rc, "cannot retrieve value (same-ref) U64" );
+        }
+        else
+        {
+            uint16_t value16;
+            rc = KVectorGetU16( mcpf->same_ref_16, key, &value16 );
+            if ( rc != 0 )
+            {
+                if ( GetRCState( rc ) != rcNotFound )
+                    (void)LOGERR( klogErr, rc, "cannot retrieve value (same-ref) U16" );
+            }
+            else
+            {
+                *ref_pos = ( value64 >> 32 );
+                *tlen = ( value64 & 0xFFFFFFFF );
+                *flags = value16;
+                mcpf->stat_same_ref.finds++;
+            }
+        }
+    }
+    return rc;
+}
+
+
+rc_t matecache_remove_same_ref( matecache * const self, uint32_t db_idx, int64_t key )
+{
+    matecache_per_file * mcpf = NULL;
+    rc_t rc = matecache_check( self, db_idx, &mcpf );
+    if ( rc == 0 )
+    {
+        rc = KVectorUnset( mcpf->same_ref_64, key );
+        if ( rc != 0 )
+            (void)LOGERR( klogErr, rc, "cannot remove from same-ref-cache (64bit)" );
+        else
+        {
+            rc = KVectorUnset( mcpf->same_ref_16, key );
+            if ( rc != 0 )
+                (void)LOGERR( klogErr, rc, "cannot remove from same-ref-cache (16bit)" );
+        }
+        if ( rc == 0 && mcpf->stat_same_ref.count > 0 )
+            mcpf->stat_same_ref.count--;
+    }
+    return rc;
+}
+
+
+static rc_t matecache_clear_same_ref_per_file( matecache_per_file * const mcpf )
+{
+    rc_t rc = KVectorRelease( mcpf->same_ref_64 );
+    if ( rc != 0 )
+        (void)LOGERR( klogErr, rc, "cannot release same-ref-cache (64bit)" );
+    else
+    {
+        rc = KVectorRelease( mcpf->same_ref_16 );
+        if ( rc != 0 )
+            (void)LOGERR( klogErr, rc, "cannot release same-ref-cache (16bit)" );
+        else
+        {
+            rc = KVectorMake( &mcpf->same_ref_64 );
+            if ( rc != 0 )
+                (void)LOGERR( klogErr, rc, "cannot make same-ref-cache (64bit)" );
+            else
+            {
+                rc = KVectorMake( &mcpf->same_ref_16 );
+                if ( rc != 0 )
+                    (void)LOGERR( klogErr, rc, "cannot make same-ref-cache (16bit)" );
+            }
+        }
+    }
+    return rc;
+}
+
+
+rc_t matecache_clear_same_ref( matecache * const self )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+    {
+        rc = RC( rcApp, rcNoTarg, rcAccessing, rcSelf, rcNull );
+        (void)LOGERR( klogErr, rc, "cannot clear same-ref-cache" );
+    }
+    else
+    {
+        uint32_t idx;
+        for ( idx = 0; idx < self->count && rc == 0; ++idx )
+        {
+            rc = matecache_clear_same_ref_per_file( &self->per_file[ idx ] );
+        }
+        self->flashes++;
+   }
+    return rc;
+}
+
+
+rc_t matecache_report( const matecache * const self )
+{
+    rc_t rc = 0;
+    if ( self == NULL )
+    {
+        rc = RC( rcApp, rcNoTarg, rcAccessing, rcSelf, rcNull );
+        (void)LOGERR( klogErr, rc, "cannot report same-ref-cache" );
+    }
+    else
+    {
+        uint32_t idx;
+        for ( idx = 0; idx < self->count && rc == 0; ++idx )
+        {
+            rc = KOutMsg( "on same reference:\n" );
+            if ( rc == 0 )
+                rc = KOutMsg( "matecache[ %u ].maxcount = %,lu\n", idx, self->per_file[ idx ].maxcount_same_ref );
+            if ( rc == 0 )
+                rc = KOutMsg( "matecache[ %u ].inserts = %,lu\n", idx, self->per_file[ idx ].stat_same_ref.inserts );
+            if ( rc == 0 )
+                rc = KOutMsg( "matecache[ %u ].lookups = %,lu\n", idx, self->per_file[ idx ].stat_same_ref.lookups );
+            if ( rc == 0 )
+                rc = KOutMsg( "matecache[ %u ].finds = %,lu\n", idx, self->per_file[ idx ].stat_same_ref.finds );
+            if ( rc == 0 )
+                rc = KOutMsg( "unaligned:\n" );
+            if ( rc == 0 )
+                rc = KOutMsg( "matecache[ %u ].count = %,lu\n", idx, self->per_file[ idx ].stat_unaligned.count );
+            if ( rc == 0 )
+                rc = KOutMsg( "matecache[ %u ].lookups = %,lu\n", idx, self->per_file[ idx ].stat_unaligned.lookups );
+            if ( rc == 0 )
+                rc = KOutMsg( "matecache[ %u ].finds = %,lu\n", idx, self->per_file[ idx ].stat_unaligned.finds );
+        }
+        if ( rc == 0 )
+            rc = KOutMsg( "matecache.flashes = %,lu\n", idx, self->flashes );
+    }
+    return rc;
+}
+
+
+rc_t matecache_insert_unaligned( matecache * const self,
+        uint32_t db_idx, int64_t key, INSDC_coord_zero ref_pos, uint32_t ref_idx, int64_t seq_id )
+{
+    matecache_per_file * mcpf = NULL;
+    rc_t rc = matecache_check( self, db_idx, &mcpf );
+    if ( rc == 0 )
+    {
+        uint64_t ref_pos_and_ref_idx = ref_pos;
+        ref_pos_and_ref_idx <<= 32;
+        ref_pos_and_ref_idx |= ref_idx;
+        rc = KVectorSetU64( mcpf->unaligned_64_a, key, ref_pos_and_ref_idx );
+        if ( rc != 0 )
+            (void)LOGERR( klogErr, rc, "cannot insert into KVector (unaligned a) U64" );
+        else
+        {
+            rc = KVectorSetU64( mcpf->unaligned_64_b, key, seq_id );
+            if ( rc != 0 )
+                (void)LOGERR( klogErr, rc, "cannot insert into KVector (unaligned b) U64" );
+        }
+        if ( rc == 0 )
+        {
+            mcpf->stat_unaligned.count++;
+            mcpf->stat_unaligned.inserts++;
+        }
+    }
+    return rc;
+}
+
+
+rc_t matecache_lookup_unaligned( const matecache * const self, uint32_t db_idx, int64_t key,
+                                 INSDC_coord_zero * const ref_pos, uint32_t * const ref_idx, int64_t * const seq_id )
+{
+    matecache_per_file * mcpf = NULL;
+    rc_t rc = matecache_check( self, db_idx, &mcpf );
+    if ( rc == 0 )
+    {
+        uint64_t value64_a;
+        mcpf->stat_unaligned.lookups++;
+        rc = KVectorGetU64( mcpf->unaligned_64_a, key, &value64_a );
+        if ( rc != 0 )
+        {
+            if ( GetRCState( rc ) != rcNotFound )
+                (void)LOGERR( klogErr, rc, "cannot retrieve value (unaligned a) U64" );
+        }
+        else
+        {
+            uint64_t value64_b;
+            rc = KVectorGetU64( mcpf->unaligned_64_b, key, &value64_b );
+            if ( rc != 0 )
+            {
+                if ( GetRCState( rc ) != rcNotFound )
+                    (void)LOGERR( klogErr, rc, "cannot retrieve value (unaligned b) U64" );
+            }
+            else
+            {
+                *seq_id = ( int64_t )value64_b;
+                *ref_pos = ( value64_a >> 32 );
+                *ref_idx = ( value64_a & 0xFFFFFFFF );
+                mcpf->stat_unaligned.finds++;
+            }
+        }
+    }
+    return rc;
+}
+
+
+typedef struct visit_ctx
+{
+    rc_t ( CC * f ) ( int64_t seq_id, int64_t al_id, void * user_data );
+    void * user_data;
+} visit_ctx;
+
+
+static rc_t CC on_seq_id( uint64_t key, int64_t value, void *user_data )
+{
+    visit_ctx * vctx = user_data;
+    return vctx->f( ( int64_t )key, value, vctx->user_data );
+}
+
+
+rc_t foreach_unaligned_entry( const matecache * const self,
+                              uint32_t db_idx,
+                              rc_t ( CC * f ) ( int64_t seq_id, int64_t al_id, void * user_data ),
+                              void * user_data )
+{
+    matecache_per_file * mcpf = NULL;
+    rc_t rc = matecache_check( self, db_idx, &mcpf );
+    if ( rc == 0 )
+    {
+        visit_ctx vctx;
+        vctx.f = f;
+        vctx.user_data = user_data;
+        rc = KVectorVisitI64 ( mcpf->unaligned_64_b, false, on_seq_id, &vctx );
+    }
+    return rc;
+}
diff --git a/tools/sra-pileup/matecache.h b/tools/sra-pileup/matecache.h
new file mode 100644
index 0000000..0b8d9df
--- /dev/null
+++ b/tools/sra-pileup/matecache.h
@@ -0,0 +1,119 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_matecache_
+#define _h_matecache_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/vector.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <insdc/sra.h>
+
+typedef struct matecache_stat
+{
+    uint64_t count;
+    uint64_t lookups;
+    uint64_t finds;
+    uint64_t inserts;
+} matecache_stat;
+
+
+typedef struct matecache_per_file
+{
+    KVector *same_ref_64;   /* ref-pos and ref-idx */
+    KVector *same_ref_16;   /* flags */
+
+    KVector *unaligned_64_a;  /* ref-pos and ref-idx */
+    KVector *unaligned_64_b;  /* seq_spot_id */
+
+    matecache_stat stat_same_ref;
+    matecache_stat stat_unaligned;
+    uint64_t maxcount_same_ref;
+} matecache_per_file;
+
+
+typedef struct matecache
+{
+    matecache_per_file *per_file;
+    uint32_t count;
+    uint32_t flashes;
+} matecache;
+
+
+/* general cache functions */
+
+rc_t make_matecache( matecache **self, uint32_t count );
+
+void release_matecache( matecache * const self );
+
+rc_t matecache_clear_same_ref( matecache * const self );
+
+rc_t matecache_report( const matecache * const self );
+
+
+/* cache functions for aligned mates on the same reference */
+
+rc_t matecache_insert_same_ref( matecache * const self,
+        uint32_t db_idx, int64_t key, INSDC_coord_zero ref_pos, uint32_t flags, INSDC_coord_len tlen );
+
+rc_t matecache_lookup_same_ref( const matecache * const self, uint32_t db_idx, int64_t key,
+                       INSDC_coord_zero *ref_pos, uint32_t *flags, INSDC_coord_len *tlen );
+
+rc_t matecache_remove_same_ref( matecache * const self, uint32_t db_idx, int64_t key );
+
+
+/* cache functions for half aligned mates */
+
+/*
+    db_idx  ... index, what input-file did the alignment come from
+    key     ... row-id of aligned half
+    pos     ... position of the aligned half
+    flags   ... sam-flags of the aligned half
+    ref_idx ... idx of reference the aligned half aligns to
+*/
+
+rc_t matecache_insert_unaligned( matecache * const self,
+        uint32_t db_idx, int64_t key, INSDC_coord_zero ref_pos, uint32_t ref_idx, int64_t seq_id );
+
+rc_t matecache_lookup_unaligned( const matecache * const self, uint32_t db_idx, int64_t key,
+                                 INSDC_coord_zero * const ref_pos, uint32_t * const ref_idx, int64_t * const seq_id );
+
+rc_t foreach_unaligned_entry( const matecache * const self,
+                              uint32_t db_idx,
+                              rc_t ( CC * f ) ( int64_t seq_id, int64_t al_id, void * user_data ),
+                              void * user_data );
+
+
+#endif
diff --git a/tools/sra-pileup/out_redir.c b/tools/sra-pileup/out_redir.c
new file mode 100644
index 0000000..c089d78
--- /dev/null
+++ b/tools/sra-pileup/out_redir.c
@@ -0,0 +1,120 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "out_redir.h"
+
+#include <kfs/directory.h>
+#include <kfs/buffile.h>
+#include <kfs/bzip.h>
+#include <kfs/gzip.h>
+#include <sysalloc.h>
+
+static rc_t CC out_redir_callback( void * self, const char * buffer, size_t bufsize, size_t * num_writ )
+{
+    out_redir * redir = ( out_redir * )self;
+    rc_t rc = KFileWriteAll( redir->kfile, redir->pos, buffer, bufsize, num_writ );
+    if ( rc == 0 )
+        redir->pos += *num_writ;
+    return rc;
+}
+
+
+rc_t init_out_redir( out_redir * self, enum out_redir_mode mode, const char * filename, size_t bufsize )
+{
+    rc_t rc;
+    KFile *output_file;
+
+    if ( filename != NULL )
+    {
+        KDirectory *dir;
+        rc = KDirectoryNativeDir( &dir );
+        if ( rc != 0 )
+            LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+        else
+        {
+            rc = KDirectoryCreateFile ( dir, &output_file, false, 0664, kcmInit, "%s", filename );
+            KDirectoryRelease( dir );
+        }
+    }
+    else
+        rc = KFileMakeStdOut ( &output_file );
+
+    if ( rc == 0 )
+    {
+        KFile *temp_file;
+
+        /* wrap the output-file in compression, if requested */
+        switch ( mode )
+        {
+            case orm_gzip  : rc = KFileMakeGzipForWrite( &temp_file, output_file ); break;
+            case orm_bzip2 : rc = KFileMakeBzip2ForWrite( &temp_file, output_file ); break;
+            case orm_uncompressed : break;
+        }
+        if ( rc == 0 )
+        {
+            if ( mode != orm_uncompressed )
+            {
+                KFileRelease( output_file );
+                output_file = temp_file;
+            }
+
+            /* wrap the output/compressed-file in buffering, if requested */
+            if ( bufsize != 0 )
+            {
+                rc = KBufFileMakeWrite( &temp_file, output_file, false, bufsize );
+                if ( rc == 0 )
+                {
+                    KFileRelease( output_file );
+                    output_file = temp_file;
+                }
+            }
+
+            if ( rc == 0 )
+            {
+                self->kfile = output_file;
+                self->org_writer = KOutWriterGet();
+                self->org_data = KOutDataGet();
+                self->pos = 0;
+                rc = KOutHandlerSet( out_redir_callback, self );
+                if ( rc != 0 )
+                    LOGERR( klogInt, rc, "KOutHandlerSet() failed" );
+            }
+        }
+    }
+    return rc;
+}
+
+
+void release_out_redir( out_redir * self )
+{
+    KFileRelease( self->kfile );
+    if( self->org_writer != NULL )
+    {
+        KOutHandlerSet( self->org_writer, self->org_data );
+    }
+    self->org_writer = NULL;
+}
+
diff --git a/tools/sra-pileup/out_redir.h b/tools/sra-pileup/out_redir.h
new file mode 100644
index 0000000..6eacab5
--- /dev/null
+++ b/tools/sra-pileup/out_redir.h
@@ -0,0 +1,64 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_out_redir_
+#define _h_out_redir_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/out.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <kfs/file.h>
+
+enum out_redir_mode
+{
+    orm_uncompressed = 0,
+    orm_gzip,
+    orm_bzip2
+};
+
+
+/* GLOBAL VARIABLES */
+typedef struct out_redir
+{
+    KWrtWriter org_writer;
+    void* org_data;
+    KFile* kfile;
+    uint64_t pos;
+} out_redir;
+
+
+rc_t init_out_redir( out_redir * self, enum out_redir_mode mode, const char * filename, size_t bufsize );
+
+void release_out_redir( out_redir * self );
+
+#endif
diff --git a/tools/sra-pileup/read_fkt.c b/tools/sra-pileup/read_fkt.c
new file mode 100644
index 0000000..5a7fa68
--- /dev/null
+++ b/tools/sra-pileup/read_fkt.c
@@ -0,0 +1,338 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "read_fkt.h"
+#include <sysalloc.h>
+
+rc_t read_bool( int64_t row_id, const VCursor * cursor, uint32_t idx, bool *res, bool dflt )
+{
+    const bool * value;
+    uint32_t elem_bits, boff, row_len;
+    rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) bool failed", 
+            "tr=%li,ti=%u", row_id, idx ) );
+    }
+    else
+    {
+        *res = row_len > 0 ? *value : dflt;
+    }
+    return rc;
+}
+
+
+rc_t read_int64( int64_t row_id, const VCursor * cursor, uint32_t idx, int64_t *res, int64_t dflt )
+{
+    const int64_t *value;
+    uint32_t elem_bits, boff, row_len;
+    rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) int64 failed", 
+            "tr=%li,ti=%u", row_id, idx ) );
+    }
+    else
+    {
+        *res = row_len > 0 ? *value : dflt;
+    }
+    return rc;
+}
+
+
+rc_t read_char_ptr_and_size( int64_t row_id, const VCursor * cursor, uint32_t idx, const char **res, size_t *res_len )
+{
+    const char * value;
+    uint32_t elem_bits, boff, row_len;
+    rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) char_ptr failed", 
+            "tr=%li,ti=%u", row_id, idx ) );
+    }
+    else
+    {
+        if ( row_len > 0 )
+            *res = value;
+        if ( res_len != NULL )
+            *res_len = ( size_t )row_len;
+    }
+    return rc;
+}
+
+
+rc_t read_u8_ptr_and_size( int64_t row_id, const VCursor * cursor, uint32_t idx, const uint8_t **res, size_t *res_len )
+{
+    const uint8_t * value;
+    uint32_t elem_bits, boff, row_len;
+    rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) char_ptr failed", 
+            "tr=%li,ti=%u", row_id, idx ) );
+    }
+    else
+    {
+        if ( row_len > 0 )
+            *res = value;
+        if ( res_len != NULL )
+            *res_len = ( size_t )row_len;
+    }
+    return rc;
+}
+
+
+rc_t read_INSDC_coord_zero( int64_t row_id, const VCursor * cursor, uint32_t idx, INSDC_coord_zero *res, size_t *res_len )
+{
+    INSDC_coord_zero * value;
+    uint32_t elem_bits, boff, row_len;
+    rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) INSDC_coord_zero failed", 
+            "tr=%li,ti=%u", row_id, idx ) );
+    }
+    else
+    {
+        if ( row_len > 0 )
+            *res = *value;
+        if ( res_len != NULL )
+            *res_len = ( size_t )row_len;
+    }
+    return rc;
+}
+
+
+rc_t read_INSDC_coord_len( int64_t row_id, const VCursor * cursor, uint32_t idx, INSDC_coord_len *res )
+{
+    INSDC_coord_len * value;
+    uint32_t elem_bits, boff, row_len;
+    rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) INSDC_coord_len failed", 
+            "tr=%li,ti=%u", row_id, idx ) );
+    }
+    else if ( row_len > 0 )
+        *res = *value;
+    return rc;
+}
+
+
+rc_t read_uint32_t( int64_t row_id, const VCursor * cursor, uint32_t idx, uint32_t *res, uint32_t dflt )
+{
+    uint32_t * value;
+    uint32_t elem_bits, boff, row_len;
+    rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) uint32_t failed", 
+            "tr=%li,ti=%u", row_id, idx ) );
+    }
+    else
+    {
+        *res = ( row_len > 0 ) ? *value : dflt;
+    }
+    return rc;
+}
+
+
+rc_t read_uint32_t_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, uint32_t **res, uint32_t *len )
+{
+    uint32_t * value;
+    uint32_t elem_bits, boff, row_len;
+    rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) uint32_t (ptr) failed", 
+            "tr=%li,ti=%u", row_id, idx ) );
+    }
+    else
+    {
+        if ( row_len > 0 )
+            *res = value;
+        *len = row_len;
+    }
+    return rc;
+}
+
+
+rc_t read_int64_t_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, int64_t **res, uint32_t *len )
+{
+    int64_t * value;
+    uint32_t elem_bits, boff, row_len;
+    rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) uint64_t (ptr) failed", 
+            "tr=%li,ti=%u", row_id, idx ) );
+    }
+    else
+    {
+        if ( row_len > 0 )
+            *res = value;
+        *len = row_len;
+    }
+    return rc;
+}
+
+
+rc_t read_INSDC_read_type_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_read_type **res, uint32_t *len )
+{
+    const INSDC_read_type * value;
+    uint32_t elem_bits, boff, row_len;
+    rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) INSDC_read_type (ptr) failed", 
+            "tr=%li,ti=%u", row_id, idx ) );
+    }
+    else
+    {
+        if ( row_len > 0 )
+            *res = value;
+        *len = row_len;
+    }
+    return rc;
+}
+
+
+rc_t read_INSDC_read_filter_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_read_filter **res, uint32_t *len )
+{
+    const INSDC_read_filter * value;
+    uint32_t elem_bits, boff, row_len;
+    rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) INSDC_read_filter (ptr) failed", 
+            "tr=%li,ti=%u", row_id, idx ) );
+    }
+    else
+    {
+        if ( row_len > 0 )
+            *res = value;
+        *len = row_len;
+    }
+    return rc;
+}
+
+
+rc_t read_INSDC_coord_len_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_coord_len **res, uint32_t *len )
+{
+    const INSDC_coord_len * value;
+    uint32_t elem_bits, boff, row_len;
+    rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) INSDC_coord_len (ptr) failed", 
+            "tr=%li,ti=%u", row_id, idx ) );
+    }
+    else
+    {
+        if ( row_len > 0 )
+            *res = value;
+        *len = row_len;
+    }
+    return rc;
+}
+
+
+rc_t read_INSDC_coord_zero_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_coord_zero **res, uint32_t *len )
+{
+    const INSDC_coord_zero * value;
+    uint32_t elem_bits, boff, row_len;
+    rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) INSDC_coord_zero (ptr) failed", 
+            "tr=%li,ti=%u", row_id, idx ) );
+    }
+    else
+    {
+        if ( row_len > 0 )
+            *res = value;
+        *len = row_len;
+    }
+    return rc;
+}
+
+
+rc_t read_INSDC_dna_text_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_dna_text **res, uint32_t *len )
+{
+    const INSDC_dna_text * value;
+    uint32_t elem_bits, boff, row_len;
+    rc_t rc = VCursorCellDataDirect( cursor, row_id, idx, &elem_bits, (const void**)&value, &boff, &row_len );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorCellDataDirect( $(tr).$(ti) ) INSDC_dna_text (ptr) failed", 
+            "tr=%li,ti=%u", row_id, idx ) );
+    }
+    else
+    {
+        if ( row_len > 0 )
+            *res = value;
+        *len = row_len;
+    }
+    return rc;
+}
+
+
+rc_t add_column( const VCursor * cursor, const char *colname, uint32_t * idx )
+{
+    rc_t rc = VCursorAddColumn( cursor, idx, colname );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorAddColumn( $(cn) ) failed", "cn=%s", colname ) );
+    }
+    return rc;
+}
+
+
+bool namelist_contains( const KNamelist *tables, const char * table_name )
+{
+    bool res = false;
+    uint32_t count;
+    rc_t rc = KNamelistCount( tables, &count );
+    if ( rc == 0 && count > 0 )
+    {
+        uint32_t idx;
+        size_t table_name_len = string_size( table_name );
+        for ( idx = 0; idx < count && rc == 0 && !res; ++idx )
+        {
+            const char * name;
+            rc = KNamelistGet( tables, idx, &name );
+            if ( rc == 0 && name != NULL )
+            {
+                size_t name_len = string_size( name );
+                size_t max_len = table_name_len > name_len ? table_name_len : name_len;
+                int cmp = string_cmp( table_name, table_name_len, name, name_len, max_len );
+                if ( cmp == 0 )
+                    res = true;
+            }
+        }
+    }
+    return res;
+}
diff --git a/tools/sra-pileup/read_fkt.h b/tools/sra-pileup/read_fkt.h
new file mode 100644
index 0000000..0290864
--- /dev/null
+++ b/tools/sra-pileup/read_fkt.h
@@ -0,0 +1,63 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_read_fkt_
+#define _h_read_fkt_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/vector.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <vdb/cursor.h>
+#include <insdc/sra.h>
+
+rc_t read_bool( int64_t row_id, const VCursor * cursor, uint32_t idx, bool *res, bool dflt );
+rc_t read_int64( int64_t row_id, const VCursor * cursor, uint32_t idx, int64_t *res, int64_t dflt );
+rc_t read_char_ptr_and_size( int64_t row_id, const VCursor * cursor, uint32_t idx, const char **res, size_t *res_len );
+rc_t read_u8_ptr_and_size( int64_t row_id, const VCursor * cursor, uint32_t idx, const uint8_t **res, size_t *res_len );
+rc_t read_INSDC_coord_zero( int64_t row_id, const VCursor * cursor, uint32_t idx, INSDC_coord_zero *res, size_t *res_len );
+rc_t read_INSDC_coord_len( int64_t row_id, const VCursor * cursor, uint32_t idx, INSDC_coord_len *res );
+rc_t read_uint32_t( int64_t row_id, const VCursor * cursor, uint32_t idx, uint32_t *res, uint32_t dflt );
+rc_t read_uint32_t_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, uint32_t **res, uint32_t *len );
+rc_t read_int64_t_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, int64_t **res, uint32_t *len );
+rc_t read_INSDC_read_type_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_read_type **res, uint32_t *len );
+rc_t read_INSDC_read_filter_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_read_filter **res, uint32_t *len );
+rc_t read_INSDC_coord_len_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_coord_len **res, uint32_t *len );
+rc_t read_INSDC_coord_zero_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_coord_zero **res, uint32_t *len );
+rc_t read_INSDC_dna_text_ptr( int64_t row_id, const VCursor * cursor, uint32_t idx, const INSDC_dna_text **res, uint32_t *len );
+
+rc_t add_column( const VCursor * cursor, const char *colname, uint32_t * idx );
+bool namelist_contains( const KNamelist *tables, const char * table_name );
+
+#endif
\ No newline at end of file
diff --git a/tools/sra-pileup/reref.c b/tools/sra-pileup/reref.c
new file mode 100644
index 0000000..201d995
--- /dev/null
+++ b/tools/sra-pileup/reref.c
@@ -0,0 +1,498 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "reref.h"
+
+#include <klib/text.h>
+#include <kfs/file.h>
+#include <vfs/manager.h>
+#include <vfs/path.h>
+#include <vfs/resolver.h>
+#include <align/reference.h>
+
+#include <sysalloc.h>
+#include <stdlib.h>
+
+typedef struct report_row_ctx
+{
+    uint32_t prim_idx;
+    uint32_t sec_idx;
+    int64_t row_id;
+} report_row_ctx;
+
+
+static rc_t report_ref_row( const VCursor *cur, report_row_ctx * row_ctx )
+{
+    rc_t rc = 0;
+    uint32_t elem_bits, boff, prim_count, sec_count;
+    const void *base;
+    rc = VCursorCellDataDirect ( cur, row_ctx->row_id, row_ctx->prim_idx, &elem_bits, &base, &boff, &prim_count );
+    if ( rc != 0 )
+    {
+        (void)LOGERR( klogErr, rc, "cannot read colum >PRIMARY_ALIGNMENT_IDS<" );
+    }
+    else
+    {
+        rc = VCursorCellDataDirect ( cur, row_ctx->row_id, row_ctx->sec_idx, &elem_bits, &base, &boff, &sec_count );
+        if ( rc != 0 )
+        {
+            (void)LOGERR( klogErr, rc, "cannot read colum >SECONDARY_ALIGNMENT_IDS<" );
+        }
+        else if ( prim_count > 0 || sec_count > 0 )
+        {
+            rc = KOutMsg( "ROW[ %,lu ]: PRIM:%,u SEC:%,u\n", row_ctx->row_id, prim_count, sec_count );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t report_ref_cursor( const VCursor *cur, int64_t start, int64_t stop )
+{
+    report_row_ctx row_ctx;
+    rc_t rc = VCursorAddColumn ( cur, &row_ctx.prim_idx, "PRIMARY_ALIGNMENT_IDS" );
+    if ( rc != 0 )
+    {
+        (void)LOGERR( klogErr, rc, "cannot add column >PRIMARY_ALIGNMENT_IDS<" );
+    }
+    else
+    {
+        rc = VCursorAddColumn ( cur, &row_ctx.sec_idx, "SECONDARY_ALIGNMENT_IDS" );
+        if ( rc != 0 )
+        {
+            (void)LOGERR( klogErr, rc, "cannot add column >SECONDARY_ALIGNMENT_IDS<" );
+        }
+        else
+        {
+            rc = VCursorOpen ( cur );
+            if ( rc != 0 )
+            {
+                (void)LOGERR( klogErr, rc, "cannot open REFERENCE-CURSOR" );
+            }
+            else
+            {
+                for ( row_ctx.row_id = start; rc == 0 && row_ctx.row_id <= stop; ++row_ctx.row_id )
+                {
+                    rc = report_ref_row( cur, &row_ctx );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t report_ref_table( const VDBManager *vdb_mgr, const char * path, int64_t start, int64_t stop )
+{
+    const VDatabase* db;
+    rc_t rc = VDBManagerOpenDBRead ( vdb_mgr, &db, NULL, "%s", path );
+    if ( rc != 0 )
+    {
+        (void)LOGERR( klogErr, rc, "cannot open vdb-database" );
+    }
+    else
+    {
+        const VTable* tb;
+        rc = VDatabaseOpenTableRead ( db, &tb, "REFERENCE" );
+        if ( rc != 0 )
+        {
+            (void)LOGERR( klogErr, rc, "cannot open REFERENCE-table" );
+        }
+        else
+        {
+            const VCursor *cur;
+            rc = VTableCreateCursorRead ( tb, &cur );
+            if ( rc != 0 )
+            {
+                (void)LOGERR( klogErr, rc, "cannot open REFERENCE-cursor" );
+            }
+            else
+            {
+                rc = report_ref_cursor( cur, start, stop );
+                VCursorRelease( cur );
+            }
+            VTableRelease ( tb );
+        }
+        VDatabaseRelease ( db );
+    }
+    return rc;
+}
+
+
+static rc_t report_ref_table2( const ReferenceObj* ref_obj, int64_t start, int64_t stop )
+{
+    rc_t rc = 0;
+    int64_t row_id, max_prim_at, max_sec_at, max_ev_at;
+    uint64_t sum_prim, sum_sec, sum_ev, max_prim, max_sec, max_ev;
+    sum_prim = sum_sec = sum_ev = max_prim = max_sec = max_ev = 0;
+
+    for ( row_id = start; rc == 0 && row_id <= stop; ++row_id )
+    {
+        uint32_t count[ 3 ];
+        rc = ReferenceObj_GetIdCount( ref_obj, row_id, count );
+        if ( rc == 0 )
+        {
+            sum_prim += count[ 0 ];
+            sum_sec  += count[ 1 ];
+            sum_ev   += count[ 2 ];
+
+            if ( count[ 0 ] > max_prim )
+            {
+                max_prim = count[ 0 ];
+                max_prim_at = row_id;
+            }
+            if ( count[ 1 ] > max_sec )
+            {
+                max_sec = count[ 1 ];
+                max_sec_at = row_id;
+            }
+            if ( count[ 2 ] > max_ev )
+            {
+                max_ev = count[ 2 ];
+                max_ev_at = row_id;
+            }
+        }
+    }
+
+    rc = KOutMsg( "alignments:\t%,u PRI\t%,u SEC\t%,u EV\n", sum_prim, sum_sec, sum_ev );
+    if ( rc == 0 && max_prim > 0 )
+    {
+        uint64_t from = ( ( max_prim_at - start ) * 5000 ) + 1;
+        rc = KOutMsg( "max. PRI:\t%,u\tat row #%,i ( from pos: %,u ... %,u )\n", max_prim, max_prim_at, from, from + 4999 );
+    }
+    if ( rc == 0 && max_sec > 0 )
+    {
+        uint64_t from = ( ( max_sec_at - start ) * 5000 ) + 1;
+        rc = KOutMsg( "max. SEC:\t%,u\tat row #%,i ( from pos: %,u ... %,u )\n", max_sec, max_sec_at, from, from + 4999 );
+    }
+    if ( rc == 0 && max_ev > 0 )
+    {
+        uint64_t from = ( ( max_ev_at - start ) * 5000 ) + 1;
+        rc = KOutMsg( "max. EV:\t%,u\tat row #%,i ( from pos: %,u ... %,u )\n", max_ev, max_ev_at, from, from + 4999 );
+    }
+    return rc;
+}
+
+
+const char * ss_Database        = "Database";
+const char * ss_Table           = "Table";
+const char * ss_PrereleaseTbl   = "Prerelease Table";
+const char * ss_Column          = "Column";
+const char * ss_Index           = "Index";
+const char * ss_NotFound        = "not found";
+const char * ss_BadPath         = "bad path";
+const char * ss_File            = "File";
+const char * ss_Dir             = "Dir";
+const char * ss_CharDev         = "CharDev";
+const char * ss_BlockDev        = "BlockDev";
+const char * ss_FIFO            = "FIFO";
+const char * ss_ZombieFile      = "ZombieFile";
+const char * ss_Dataset         = "Dataset";
+const char * ss_Datatype        = "Datatype";
+const char * ss_unknown         = "unknown pathtype";
+
+
+static const char * path_type_2_str( const uint32_t pt )
+{
+    const char * res = ss_unknown;
+    switch ( pt )
+    {
+    case kptDatabase      :   res = ss_Database; break;
+    case kptTable         :   res = ss_Table; break;
+    case kptPrereleaseTbl :   res = ss_PrereleaseTbl; break;
+    case kptColumn        :   res = ss_Column; break;
+    case kptIndex         :   res = ss_Index; break;
+    case kptNotFound      :   res = ss_NotFound; break;
+    case kptBadPath       :   res = ss_BadPath; break;
+    case kptFile          :   res = ss_File; break;
+    case kptDir           :   res = ss_Dir; break;
+    case kptCharDev       :   res = ss_CharDev; break;
+    case kptBlockDev      :   res = ss_BlockDev; break;
+    case kptFIFO          :   res = ss_FIFO; break;
+    case kptZombieFile    :   res = ss_ZombieFile; break;
+    case kptDataset       :   res = ss_Dataset; break;
+    case kptDatatype      :   res = ss_Datatype; break;
+    default               :   res = ss_unknown; break;
+    }
+    return res;
+}
+
+
+static rc_t resolve_accession( VFSManager * vfs_mgr, const char * accession, const String ** path )
+{
+    VResolver * resolver;
+    rc_t rc = VFSManagerGetResolver( vfs_mgr, &resolver );
+    if ( rc == 0 )
+    {
+        const VPath * vpath;
+        rc = VPathMakeSysPath( ( VPath** )&vpath, accession );
+        if ( rc == 0 )
+        {
+            const VPath * rpath;
+            rc = VResolverLocal( resolver, vpath, &rpath );
+            if ( GetRCState( rc ) == rcNotFound )
+                rc = VResolverRemote( resolver, vpath, &rpath, NULL );
+            if ( rc == 0 )
+            {
+                const String * s;
+                rc = VPathMakeString( rpath, &s );
+                if ( rc == 0 )
+                {
+                    rc = StringCopy ( path, s );
+                    free ((void*)s);
+                }
+                VPathRelease ( rpath );
+            }
+            VPathRelease ( vpath );
+        }
+        VResolverRelease( resolver );
+    }
+    return rc;
+}
+
+
+static rc_t report_ref_loc( const VDBManager *vdb_mgr, VFSManager * vfs_mgr, const char * seq_id )
+{
+    const String * path;
+    rc_t rc = resolve_accession( vfs_mgr, seq_id, &path );
+    if ( rc == 0 )
+    {
+        rc = KOutMsg( "location:\t%S\n", path );
+        if ( rc == 0 )
+        {
+            uint32_t pt = VDBManagerPathType ( vdb_mgr, "%S", path );
+            const char * spt = path_type_2_str( pt );
+            rc = KOutMsg( "pathtype:\t%s\n", spt );
+        }
+        free ( (void*) path );
+    }
+    return rc;
+}
+
+
+static rc_t report_ref_obj( const VDBManager *vdb_mgr, VFSManager * vfs_mgr, const char * path, uint32_t idx,
+                            const ReferenceObj* ref_obj, bool extended )
+{
+    const char * s;
+    const char * seq_id;
+    INSDC_coord_len len;
+    bool circular, external;
+    int64_t start, stop;
+
+    rc_t rc = ReferenceObj_Name( ref_obj, &s );
+    if ( rc == 0 )
+        rc = KOutMsg( "\nREF[%u].Name     = '%s'\n", idx, s );
+
+    if ( rc == 0 )
+        rc = ReferenceObj_SeqId( ref_obj, &seq_id );
+    if ( rc == 0 )
+        rc = KOutMsg( "REF[%u].SeqId    = '%s'\n", idx, seq_id );
+
+    if ( rc == 0 )
+        rc = ReferenceObj_SeqLength( ref_obj, &len );
+    if ( rc == 0 )
+        rc = KOutMsg( "REF[%u].Length   = %,u\n", idx, len );
+
+    if ( rc == 0 )
+        rc = ReferenceObj_Circular( ref_obj, &circular );
+    if ( rc == 0 )
+        rc = KOutMsg( "REF[%u].Circular = %s\n", idx, circular ? "yes" : "no" );
+
+    if ( rc == 0 )
+        rc = ReferenceObj_IdRange( ref_obj, &start, &stop );
+    if ( rc == 0 )
+        rc = KOutMsg( "REF[%u].IdRange  = [%,lu]...[%,lu]\n", idx, start, stop );
+
+    if ( rc == 0 )
+        rc = ReferenceObj_External( ref_obj, &external, NULL );
+    if ( rc == 0 )
+        rc = KOutMsg( "REF[%u].Extern   = %s\n", idx, external ? "yes" : "no" );
+    if ( rc == 0 && external )
+    {
+        rc = report_ref_loc( vdb_mgr, vfs_mgr, seq_id );
+    }
+
+    if ( rc == 0 && extended )
+        rc = report_ref_table2( ref_obj, start, stop );
+
+    return rc;
+}
+
+
+static rc_t report_ref_database( const VDBManager *vdb_mgr, VFSManager * vfs_mgr, const char * path, bool extended )
+{
+    const ReferenceList* reflist;
+    uint32_t options = ( ereferencelist_usePrimaryIds | ereferencelist_useSecondaryIds | ereferencelist_useEvidenceIds );
+    rc_t rc = ReferenceList_MakePath( &reflist, vdb_mgr, path, options, 0, NULL, 0 );
+    if ( rc != 0 )
+    {
+        (void)LOGERR( klogErr, rc, "cannot create ReferenceList" );
+    }
+    else
+    {
+        uint32_t count;
+        rc = ReferenceList_Count( reflist, &count );
+        if ( rc != 0 )
+        {
+            (void)LOGERR( klogErr, rc, "ReferenceList_Count() failed" );
+        }
+        else
+        {
+            rc = KOutMsg( "this object uses %u references\n", count );
+            if ( rc == 0 )
+            {
+                uint32_t idx;
+                for ( idx = 0; idx < count && rc == 0; ++idx )
+                {
+                    const ReferenceObj* ref_obj;
+                    rc = ReferenceList_Get( reflist, &ref_obj, idx );
+                    if ( rc != 0 )
+                    {
+                        (void)LOGERR( klogErr, rc, "ReferenceList_Get() failed" );
+                    }
+                    else
+                    {
+                        rc = report_ref_obj( vdb_mgr, vfs_mgr, path, idx, ref_obj, extended );
+                        ReferenceObj_Release( ref_obj );
+                    }
+                }
+            }
+        }
+        ReferenceList_Release( reflist );
+    }
+    return rc;
+}
+
+
+static rc_t report_references( const VDBManager *vdb_mgr, VFSManager * vfs_mgr, const char * spec,
+                               bool extended )
+{
+    rc_t rc = KOutMsg( "\nreporting references of '%s'\n", spec );
+    if ( rc == 0 )
+    {
+        VPath * path = NULL;
+        const VPath * local_cache = NULL;
+        const KFile * remote_file = NULL;
+        rc = VFSManagerResolveSpec ( vfs_mgr, spec, &path, &remote_file, &local_cache, true );
+        if ( rc != 0 )
+        {
+            (void)LOGERR( klogErr, rc, "cannot resolve spec via VFSManager" );
+        }
+        else
+        {
+            char buffer[ 4096 ];
+            size_t num_read;
+            rc = VPathReadPath ( path, buffer, sizeof buffer, &num_read );
+            if ( rc != 0 )
+            {
+                (void)LOGERR( klogErr, rc, "cannot read path from vpath" );
+            }
+            else
+            {
+                rc = KOutMsg( "resolved into '%s'\n", buffer );
+                if ( rc == 0 )
+                {
+                    int path_type = ( VDBManagerPathType ( vdb_mgr, "%s", buffer ) & ~ kptAlias );
+                    switch( path_type )
+                    {
+                        case kptDatabase : rc = report_ref_database( vdb_mgr, vfs_mgr, buffer, extended );
+                                           break;
+
+                        case kptTable    : rc = KOutMsg( "cannot report references on a table-object\n" );
+                                           break;
+
+                        default          : rc = KOutMsg( "the given object is not a vdb-database\n" );
+                                           break;
+                    }
+                }
+            }
+            KFileRelease( remote_file );
+            VPathRelease ( local_cache );
+            VPathRelease ( path );
+        }
+    }
+    return rc;
+}
+
+
+rc_t report_on_reference( Args * args, bool extended )
+{
+    uint32_t count;
+    rc_t rc = ArgsParamCount( args, &count );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "ArgsParamCount() failed" );
+    }
+    else
+    {
+        KDirectory *dir; 
+        rc = KDirectoryNativeDir( &dir );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+        }
+        else
+        {
+            const VDBManager *vdb_mgr;
+            rc = VDBManagerMakeRead ( &vdb_mgr, dir );
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "VDBManagerMakeRead() failed" );
+            }
+            else
+            {
+                VFSManager * vfs_mgr;
+                rc =  VFSManagerMake ( &vfs_mgr );
+                if ( rc != 0 )
+                {
+                    (void)LOGERR( klogErr, rc, "cannot make vfs-manager" );
+                }
+                else
+                {
+                    uint32_t idx;
+                    for ( idx = 0; idx < count && rc == 0; ++idx )
+                    {
+                        const char *param = NULL;
+                        rc = ArgsParamValue( args, idx, &param );
+                        if ( rc != 0 )
+                        {
+                            LOGERR( klogInt, rc, "ArgsParamvalue() failed" );
+                        }
+                        else
+                        {
+                            /* rc value not used, because it can be something that has no references */
+                            report_references( vdb_mgr, vfs_mgr, param, extended );
+                        }
+                    }
+                    VFSManagerRelease ( vfs_mgr );
+                }
+                VDBManagerRelease( vdb_mgr );
+            }
+            KDirectoryRelease( dir );
+        }
+    }
+    return rc;
+}
\ No newline at end of file
diff --git a/tools/sra-pileup/reref.h b/tools/sra-pileup/reref.h
new file mode 100644
index 0000000..13e3136
--- /dev/null
+++ b/tools/sra-pileup/reref.h
@@ -0,0 +1,48 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_reref_
+#define _h_reref_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <kapp/args.h>
+
+#include <klib/out.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+
+#include <vdb/manager.h>
+#include <vdb/vdb-priv.h>
+#include <kdb/manager.h>
+
+rc_t report_on_reference( Args * args, bool extended );
+
+#endif
diff --git a/tools/sra-pileup/sam-aligned.c b/tools/sra-pileup/sam-aligned.c
new file mode 100644
index 0000000..fbcdea7
--- /dev/null
+++ b/tools/sra-pileup/sam-aligned.c
@@ -0,0 +1,1604 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <align/manager.h>
+#include <align/iterator.h>
+#include <kapp/main.h>
+#include <sysalloc.h>
+
+#include "read_fkt.h"
+#include "cg_tools.h"
+#include "sam-aligned.h"
+
+/* -------------------------------------------------------------------------------------------
+    column                      PRIM    SEC     EV_INT      EV_ALIGN ( outside of iterator )
+
+    SEQ_SPOT_ID                 X       X       -           X
+    SAM_FLAGS                   X       X       -           -
+    CIGAR_LONG                  X       X       X           X 
+    CIGAR_SHORT                 X       X       X           X
+    CIGAR_LONG_LEN              X       X       X           X 
+    CIGAR_SHORT_LEN             X       X       X           X
+    MATE_ALIGN_ID               X       X       -           -
+    MATE_REF_NAME               X       X       -           -
+    MATE_REF_POS                X       X       -           -
+    TEMPLATE_LEN                X       X       -           -
+    READ                        X       X       X           X
+    READ_LEN                    X       X       X           X
+    MISMATCH_READ               X       X       X           X
+    SAM_QUALITY                 X       X       X           X
+    REF_ORIENTATION             X       X       X           X
+    EDIT_DISTANCE               X       X       X           X
+    SEQ_SPOT_GROUP              X       X       -           X
+    SEQ_READ_ID                 X       X       -           X
+    RAW_READ                    X       X       X           X
+    READ_FILTER                 X       X       X           X
+    EVIDENCE_ALIGNMENT_IDS      -       -       X           -
+    REF_POS                                                 o
+    REF_PLOIDY                                              o
+   -------------------------------------------------------------------------------------------*/
+
+
+#define COL_NOT_AVAILABLE 0xFFFFFFFF
+
+#define COL_SEQ_SPOT_ID "(I64)SEQ_SPOT_ID"
+#define COL_SAM_FLAGS "(U32)SAM_FLAGS"
+#define COL_LONG_CIGAR "(ascii)CIGAR_LONG"
+#define COL_SHORT_CIGAR "(ascii)CIGAR_SHORT"
+#define COL_MATE_ALIGN_ID "(I64)MATE_ALIGN_ID"
+#define COL_MATE_REF_NAME "(ascii)MATE_REF_NAME"
+#define COL_MATE_REF_POS "(INSDC:coord:zero)MATE_REF_POS"
+#define COL_TEMPLATE_LEN "(I32)TEMPLATE_LEN"
+#define COL_MISMATCH_READ "(ascii)MISMATCH_READ"
+#define COL_SAM_QUALITY "(INSDC:quality:text:phred_33)SAM_QUALITY"
+#define COL_REF_ORIENTATION "(bool)REF_ORIENTATION"
+#define COL_EDIT_DIST "(U32)EDIT_DISTANCE"
+#define COL_SEQ_SPOT_GROUP "(ascii)SEQ_SPOT_GROUP"
+#define COL_SEQ_READ_ID "(INSDC:coord:one)SEQ_READ_ID"
+#define COL_RAW_READ "(INSDC:dna:text)RAW_READ"
+#define COL_PLOIDY "(NCBI:align:ploidy)PLOIDY"
+#define COL_CIGAR_LONG_LEN "(INSDC:coord:len)CIGAR_LONG_LEN"
+#define COL_CIGAR_SHORT_LEN "(INSDC:coord:len)CIGAR_SHORT_LEN"
+#define COL_READ_LEN "(INSDC:coord:len)READ_LEN"
+#define COL_EV_ALIGNMENTS "(I64)EVIDENCE_ALIGNMENT_IDS"
+#define COL_REF_POS "(INSDC:coord:zero)REF_POS"
+#define COL_REF_PLOIDY "(U32)REF_PLOIDY"
+#define COL_READ_FILTER "(INSDC:SRA:read_filter)READ_FILTER"
+
+
+enum align_table_type
+{
+    att_primary = 0,
+    att_secondary,
+    att_evidence
+};
+
+
+/* the part common to prim/sec/ev-alignment */
+typedef struct align_cmn_context
+{
+    const VCursor * cursor;
+
+    uint32_t seq_spot_id_idx;
+    uint32_t cigar_idx;
+    uint32_t cigar_len_idx;
+    uint32_t read_idx;
+    uint32_t read_len_idx;
+    uint32_t edit_dist_idx;
+    uint32_t seq_spot_group_idx;
+    uint32_t seq_read_id_idx;
+    uint32_t raw_read_idx;
+    uint32_t sam_quality_idx;
+    uint32_t ref_orientation_idx;
+    uint32_t read_filter_idx;
+} align_cmn_context;
+
+
+typedef struct align_table_context
+{
+    /* which Reference-Obj in the ReferenceList we are aligning against... */
+    const ReferenceObj* ref_obj;
+    uint32_t ref_idx;
+
+    /* which index into the input-files object / needed to distinguish cache entries with the same number
+       but comming from different input-files */
+    uint32_t db_idx;
+
+    /* objects of which table are we aligning PRIM/SEC/EV ? */
+    enum align_table_type align_table_type;
+
+    /* the part common to prim/sec/ev-alignment */
+    align_cmn_context cmn;
+
+    /* this is specific to pim/sec */
+    uint32_t sam_flags_idx;
+    uint32_t mate_align_id_idx;
+    uint32_t mate_ref_name_idx;
+    uint32_t mate_ref_pos_idx;
+    uint32_t tlen_idx;
+
+    /* this is specific to ev-interval/ev-alignmnet */
+    uint32_t ploidy_idx;
+    uint32_t ev_alignments_idx;
+    uint32_t ref_pos_idx;
+    uint32_t ref_ploidy_idx;
+
+    /* the common part repeats for evidence-alignment */
+    align_cmn_context eval;
+} align_table_context;
+
+
+static void invalidate_all_cmn_column_idx( align_cmn_context * const actx )
+{
+    actx->seq_spot_id_idx       = COL_NOT_AVAILABLE;
+    actx->cigar_idx             = COL_NOT_AVAILABLE;    
+    actx->cigar_len_idx         = COL_NOT_AVAILABLE;
+    actx->read_idx              = COL_NOT_AVAILABLE;
+    actx->read_len_idx          = COL_NOT_AVAILABLE;    
+    actx->edit_dist_idx         = COL_NOT_AVAILABLE;
+    actx->seq_spot_group_idx    = COL_NOT_AVAILABLE;
+    actx->seq_read_id_idx       = COL_NOT_AVAILABLE;
+    actx->raw_read_idx          = COL_NOT_AVAILABLE;
+    actx->sam_quality_idx       = COL_NOT_AVAILABLE;
+    actx->ref_orientation_idx   = COL_NOT_AVAILABLE;
+    actx->read_filter_idx       = COL_NOT_AVAILABLE;
+}
+
+static void invalidate_all_column_idx( align_table_context * const atx )
+{
+    atx->sam_flags_idx      = COL_NOT_AVAILABLE;
+    atx->mate_align_id_idx  = COL_NOT_AVAILABLE;
+    atx->mate_ref_name_idx  = COL_NOT_AVAILABLE;
+    atx->mate_ref_pos_idx   = COL_NOT_AVAILABLE;
+    atx->tlen_idx           = COL_NOT_AVAILABLE;
+    atx->ploidy_idx         = COL_NOT_AVAILABLE;
+    atx->ev_alignments_idx  = COL_NOT_AVAILABLE;
+    atx->ref_pos_idx        = COL_NOT_AVAILABLE;
+    atx->ref_ploidy_idx     = COL_NOT_AVAILABLE;
+    invalidate_all_cmn_column_idx( &atx->cmn );
+    invalidate_all_cmn_column_idx( &atx->eval );
+}
+
+
+static rc_t prepare_cmn_table_rows( const samdump_opts * const opts, align_cmn_context * const cmn, bool prim_sec )
+{
+    const VCursor * cursor = cmn->cursor;
+    rc_t rc = 0;
+
+    if ( prim_sec )
+        rc = add_column( cursor, COL_SEQ_SPOT_ID, &cmn->seq_spot_id_idx );
+
+    if ( rc == 0 )
+    {
+        if ( opts->use_long_cigar )
+        {
+            rc = add_column( cursor, COL_LONG_CIGAR, &cmn->cigar_idx );
+            if ( rc == 0 && !prim_sec )
+                rc = add_column( cursor, COL_CIGAR_LONG_LEN, &cmn->cigar_len_idx );
+        }
+        else
+        {
+            rc = add_column( cursor, COL_SHORT_CIGAR, &cmn->cigar_idx );
+            if ( rc == 0 && !prim_sec )
+                rc = add_column( cursor, COL_CIGAR_SHORT_LEN, &cmn->cigar_len_idx );
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        if ( opts->print_matches_as_equal_sign )
+            rc = add_column( cursor, COL_MISMATCH_READ, &cmn->read_idx );
+        else
+            rc = add_column( cursor, COL_READ, &cmn->read_idx );
+    }
+
+    if ( rc == 0 )
+        rc = add_column( cursor, COL_READ_LEN, &cmn->read_len_idx );
+
+    if ( rc == 0 )
+        rc = add_column( cursor, COL_SAM_QUALITY, &cmn->sam_quality_idx );
+
+    if ( rc == 0 )
+        rc = add_column( cursor, COL_REF_ORIENTATION, &cmn->ref_orientation_idx );
+
+    if ( rc == 0 )
+        rc = add_column( cursor, COL_EDIT_DIST, &cmn->edit_dist_idx );
+
+    if ( prim_sec && rc == 0 )
+        rc = add_column( cursor, COL_SEQ_SPOT_GROUP, &cmn->seq_spot_group_idx );
+
+    if ( prim_sec && rc == 0 )
+        rc = add_column( cursor, COL_SEQ_READ_ID, &cmn->seq_read_id_idx );
+
+    if ( rc == 0 )
+        rc = add_column( cursor, COL_RAW_READ, &cmn->raw_read_idx );
+
+    if ( rc == 0 )
+        rc = add_column( cursor, COL_READ_FILTER, &cmn->read_filter_idx );
+
+    return rc;
+}
+
+
+static rc_t prepare_prim_sec_table_cursor( const samdump_opts * const opts, const VDatabase * db,
+                                           const char * table_name, align_table_context * const atx )
+{
+    const VTable *tbl;
+    rc_t rc = VDatabaseOpenTableRead( db, &tbl, table_name );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VDatabaseOpenTableRead( $(tn) ) failed", "tn=%s", table_name ) );
+    }
+    else
+    {
+        if ( opts->cursor_cache_size == 0 )
+            rc = VTableCreateCursorRead( tbl, &atx->cmn.cursor );
+        else
+            rc = VTableCreateCachedCursorRead( tbl, &atx->cmn.cursor, opts->cursor_cache_size );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VTableCreateCursorRead( $(tn) ) failed", "tn=%s", table_name ) );
+        }
+        else
+        {
+            const VCursor * cursor = atx->cmn.cursor;
+            
+            rc = prepare_cmn_table_rows( opts, &atx->cmn, true );
+
+            if ( rc == 0 )
+                rc = add_column( cursor, COL_SAM_FLAGS, &atx->sam_flags_idx );
+
+            /*  i don't have to add REF_NAME or REF_SEQ_ID, because i have it from the ref_obj later
+                i don't have to add REF_POS, because i have it from the iterator later
+                i don't have to add MAPQ, it is in the PlacementRecord later
+                    ... when walking the iterator ...
+            */
+            if ( rc == 0 )
+                rc = add_column( cursor, COL_MATE_ALIGN_ID, &atx->mate_align_id_idx );
+            if ( rc == 0 )
+                rc = add_column( cursor, COL_MATE_REF_NAME, &atx->mate_ref_name_idx );
+            if ( rc == 0 )
+                rc = add_column( cursor, COL_MATE_REF_POS, &atx->mate_ref_pos_idx );
+            if ( rc == 0 )
+                rc = add_column( cursor, COL_TEMPLATE_LEN, &atx->tlen_idx );
+
+            if ( rc != 0 )
+                VCursorRelease( cursor );
+        }
+        VTableRelease ( tbl ); /* the cursor keeps the table alive */
+    }
+    return rc;
+}
+
+
+static rc_t prepare_evidence_table_cursor( const samdump_opts * const opts, const VDatabase * db,
+                                           const char * table_name, align_table_context * const atx )
+{
+    const VTable *evidence_interval_tbl;
+    rc_t rc = VDatabaseOpenTableRead( db, &evidence_interval_tbl, table_name );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VDatabaseOpenTableRead( $(tn) ) failed", "tn=%s", table_name ) );
+    }
+    else
+    {
+        if ( opts->cursor_cache_size == 0 )
+            rc = VTableCreateCursorRead( evidence_interval_tbl, &atx->cmn.cursor );
+        else
+            rc = VTableCreateCachedCursorRead( evidence_interval_tbl, &atx->cmn.cursor, opts->cursor_cache_size );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VTableCreateCursorRead( $(tn) ) failed", "tn=%s", table_name ) );
+        }
+        else
+        {
+            rc = prepare_cmn_table_rows( opts, &atx->cmn, false );
+            if ( rc == 0 )
+                rc = add_column( atx->cmn.cursor, COL_PLOIDY, &atx->ploidy_idx );            
+
+            if ( rc == 0 && opts->dump_cg_sam )
+                rc = add_column( atx->cmn.cursor, COL_EV_ALIGNMENTS, &atx->ev_alignments_idx );
+
+            if ( rc == 0 && opts->dump_cg_sam )
+            {
+                const VTable *evidence_alignment_tbl;
+                rc = VDatabaseOpenTableRead( db, &evidence_alignment_tbl, "EVIDENCE_ALIGNMENT" );
+                if ( rc != 0 )
+                {
+                    (void)PLOGERR( klogInt, ( klogInt, rc, "VDatabaseOpenTableRead( $(tn) ) failed", "tn=%s", "EVIDENCE_ALIGNMENT" ) );
+                }
+                else
+                {
+                    if ( opts->cursor_cache_size == 0 )
+                        rc = VTableCreateCursorRead( evidence_alignment_tbl, &atx->eval.cursor );
+                    else
+                        rc = VTableCreateCachedCursorRead( evidence_alignment_tbl, &atx->eval.cursor, opts->cursor_cache_size );
+                    if ( rc != 0 )
+                    {
+                        (void)PLOGERR( klogInt, ( klogInt, rc, "VTableCreateCursorRead( $(tn) ) failed", "tn=%s", "EVIDENCE_ALIGNMENT" ) );
+                    }
+                    else
+                    {
+                        rc = prepare_cmn_table_rows( opts, &atx->eval, false ); /* common to prim/sec/ev-align */
+                        if ( rc == 0 )
+                        {
+                            /* special to ev-align */
+                            rc = add_column( atx->eval.cursor, COL_REF_POS, &atx->ref_pos_idx );
+                            if ( rc == 0 )
+                                rc = add_column( atx->eval.cursor, COL_REF_PLOIDY, &atx->ref_ploidy_idx );
+                        }
+                        rc = VCursorOpen( atx->eval.cursor );
+                        if ( rc != 0 )
+                        {
+                            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorOpen( $(tn) ) failed", "tn=%s", "EVIDENCE_ALIGNMENT" ) );
+                        }
+                    }
+                }
+                VTableRelease ( evidence_alignment_tbl ); /* the cursor keeps the table alive */
+            }
+            if ( rc != 0 )
+                VCursorRelease( atx->cmn.cursor );
+        }
+        VTableRelease ( evidence_interval_tbl ); /* the cursor keeps the table alive */
+    }
+    return rc;
+}
+
+
+static rc_t add_table_pl_iter( const samdump_opts * const opts, PlacementSetIterator * const set_iter,
+                               const ReferenceObj * const ref_obj, const input_database * const ids,
+                               INSDC_coord_zero ref_pos, INSDC_coord_len ref_len, const char * spot_group,
+                               const char * table_name, align_id_src id_src_selector, Vector * const context_list )
+{
+    rc_t rc = 0;
+    align_table_context * atx;
+    PlacementRecordExtendFuncs ext_0; /* ReferenceObj_MakePlacementIterator makes copies of the elements */
+
+    memset( &ext_0, 0, sizeof ext_0 );
+    atx = calloc( sizeof *atx, 1 );
+    if ( atx == NULL )
+    {
+        rc = RC( rcExe, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        (void)PLOGERR( klogInt, ( klogInt, rc, "align-context-allocation for $(tn) failed", "tn=%s", table_name ) );
+    }
+    else
+    {
+        atx->db_idx = ids->db_idx;
+        atx->ref_obj = ref_obj;
+        invalidate_all_column_idx( atx );
+        rc = ReferenceObj_Idx( ref_obj, &atx->ref_idx );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "failed to detect ref-idx for $(tn) failed", "tn=%s", table_name ) );
+        }
+        else
+        {
+            switch( id_src_selector )
+            {
+                case primary_align_ids   :  atx->align_table_type = att_primary;
+                                            rc = prepare_prim_sec_table_cursor( opts, ids->db, table_name, atx );
+                                            break;
+
+                case secondary_align_ids :  atx->align_table_type = att_secondary;
+                                            rc = prepare_prim_sec_table_cursor( opts, ids->db, table_name, atx );
+                                            break;
+
+                case evidence_align_ids  :  atx->align_table_type = att_evidence;
+                                            rc = prepare_evidence_table_cursor( opts, ids->db, table_name, atx );
+                                            break;
+            }
+        }
+        if ( rc == 0 )
+        {
+            ext_0.data = atx;
+            /* we must put the atx-ptr into a global list, in order to close everything later at the end... */
+        }
+        else
+            free( atx );
+    }
+
+    if ( rc == 0 )
+    {
+        int32_t min_mapq = 0;
+        PlacementIterator *pl_iter;
+
+        if ( opts->use_min_mapq )
+            min_mapq = opts->min_mapq;
+
+        rc = ReferenceObj_MakePlacementIterator( ref_obj, /* the reference-obj it is made from */
+            &pl_iter,           /* the placement-iterator we want to make */
+            ref_pos,            /* where it starts on the reference */
+            ref_len,            /* the whole length of this reference/chromosome */
+            min_mapq,           /* no minimal mapping-quality to filter out */
+            NULL,               /* no special reference-cursor */
+            atx->cmn.cursor,    /* a cursor into the PRIMARY/SECONDARY/EVIDENCE-table */
+            id_src_selector,    /* what ID-source to select from REFERENCE-table (ref_obj) */
+            &ext_0,             /* placement-record extensions #0 with data-ptr pointing to cursor/index-struct */
+            NULL,               /* no placement-record extensions #1 */
+            spot_group );       /* no spotgroup re-grouping (yet) */
+        if ( rc == 0 )
+        {
+            rc = PlacementSetIteratorAddPlacementIterator ( set_iter, pl_iter );
+            if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+        }
+    }
+
+    if ( rc == 0 )
+        rc = VectorAppend ( context_list, NULL, atx );
+    return rc;
+}
+
+
+static rc_t add_pl_iter( const samdump_opts * const opts, PlacementSetIterator * const set_iter,
+                         const ReferenceObj * const ref_obj, const input_database * const ids,
+                         INSDC_coord_zero ref_pos, INSDC_coord_len ref_len,
+                         const char * spot_group, Vector * const context_list )
+{
+    KNamelist *tables;
+    rc_t rc = VDatabaseListTbl( ids->db, &tables );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VDatabaseListTbl( $(tn) ) failed", "tn=%s", ids->path ) );
+    }
+    else
+    {
+        if ( opts->dump_primary_alignments && namelist_contains( tables, "PRIMARY_ALIGNMENT" ) )
+        {
+            rc = add_table_pl_iter( opts, set_iter, ref_obj, ids, ref_pos, ref_len, spot_group, 
+                                    "PRIMARY_ALIGNMENT", primary_align_ids, context_list );
+        }
+
+        if ( rc == 0 && opts->dump_secondary_alignments && namelist_contains( tables, "SECONDARY_ALIGNMENT" ) )
+        {
+            rc = add_table_pl_iter( opts, set_iter, ref_obj, ids, ref_pos, ref_len, spot_group, 
+                                    "SECONDARY_ALIGNMENT", secondary_align_ids, context_list );
+        }
+
+        if ( rc == 0 && ( opts->dump_cg_evidence ) && namelist_contains( tables, "EVIDENCE_INTERVAL" ) )
+        {
+            rc = add_table_pl_iter( opts, set_iter, ref_obj, ids, ref_pos, ref_len, spot_group, 
+                                    "EVIDENCE_INTERVAL", evidence_align_ids, context_list );
+        }
+        KNamelistRelease( tables );
+    }
+    return rc;
+}
+
+
+/* the user did not specify ranges on the reference, that means the whole file has to be dumped...
+   the reflist is iterated over all ref-objects it contains ... */
+static rc_t prepare_whole_files( const samdump_opts * const opts, const input_files * const ifs,
+                                 PlacementSetIterator * const set_iter, Vector * const context_list )
+{
+    rc_t rc = 0;
+    uint32_t db_idx;
+    /* we now loop through all input-databases... */
+    for ( db_idx = 0; db_idx < ifs->database_count && rc == 0; ++db_idx )
+    {
+        const input_database * ids = VectorGet( &ifs->dbs, db_idx );
+        if ( ids != NULL )
+        {
+            uint32_t refobj_count;
+            rc = ReferenceList_Count( ids->reflist, &refobj_count );
+            if ( rc == 0 && refobj_count > 0 )
+            {
+                uint32_t ref_idx;
+                for ( ref_idx = 0; ref_idx < refobj_count && rc == 0; ++ref_idx )
+                {
+                    const ReferenceObj* ref_obj;
+                    rc = ReferenceList_Get( ids->reflist, &ref_obj, ref_idx );
+                    if ( rc == 0 && ref_obj != NULL )
+                    {
+                        INSDC_coord_len ref_len;
+                        rc = ReferenceObj_SeqLength( ref_obj, &ref_len );
+                        if ( rc == 0 )
+                            rc = add_pl_iter( opts,
+                                set_iter,
+                                ref_obj,
+                                ids,
+                                0,                  /* where it starts on the reference */
+                                ref_len,            /* the whole length of this reference/chromosome */
+                                NULL,               /* no spotgroup re-grouping (yet) */
+                                context_list
+                                );
+                        ReferenceObj_Release( ref_obj );
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+typedef struct on_region_ctx
+{
+    rc_t rc;
+    const samdump_opts * opts;
+    input_database * ids;
+    PlacementSetIterator * set_iter;
+    Vector *context_list;
+} on_region_ctx;
+
+
+static void CC on_region( BSTNode *n, void *data )
+{
+    on_region_ctx * rctx = data;
+    if ( rctx->rc == 0 )
+    {
+        reference_region * ref_rgn = ( reference_region * )n;
+        const ReferenceObj * ref_obj;
+        rctx->rc = ReferenceList_Find( rctx->ids->reflist, &ref_obj, ref_rgn->name, string_size( ref_rgn->name ) );
+        if ( rctx->rc == 0 )
+        {
+            uint32_t range_idx, range_count = VectorLength( &ref_rgn->ranges );
+            for ( range_idx = 0; range_idx < range_count && rctx->rc == 0; ++range_idx )
+            {
+                range * r = VectorGet( &ref_rgn->ranges, range_idx );
+                if ( r != NULL )
+                {
+                    INSDC_coord_len len;
+                    if ( r->start == 0 && r->end == 0 )
+                    {
+                        r->start = 1;
+                        rctx->rc = ReferenceObj_SeqLength( ref_obj, &len );
+                        if ( rctx->rc == 0 )
+                            r->end = ( r->start + len );
+                    }
+                    else
+                    {
+                        len = ( r->end - r->start + 1 );
+                    }
+                    if ( rctx->rc == 0 )
+                    {
+                        rctx->rc = add_pl_iter( rctx->opts, rctx->set_iter, ref_obj, rctx->ids,
+                            r->start,           /* where the range starts on the reference */
+                            len,                /* the length of this range */
+                            NULL,               /* no spotgroup re-grouping (yet) */
+                            rctx->context_list
+                            );
+                    }
+                }
+            }
+            ReferenceObj_Release( ref_obj );
+        }
+        else
+        {
+            if ( GetRCState( rctx->rc ) == rcNotFound ) rctx->rc = 0;
+        }
+    }
+}
+
+
+static rc_t prepare_regions( const samdump_opts * const opts, const input_files * const ifs,
+                             PlacementSetIterator * const set_iter, Vector * const context_list )
+{
+    uint32_t db_idx;
+    on_region_ctx rctx;
+
+    rctx.rc = 0;
+    rctx.opts = opts;
+    rctx.set_iter = set_iter;
+    rctx.context_list = context_list;
+    /* we now loop through all input-databases... */
+    for ( db_idx = 0; db_idx < ifs->database_count && rctx.rc == 0; ++db_idx )
+    {
+        rctx.ids = VectorGet( &ifs->dbs, db_idx );
+        if ( rctx.ids != NULL )
+            BSTreeForEach( ( BSTree * ) &opts->regions, false, on_region, &rctx );
+    }
+    return rctx.rc;
+}
+
+
+static uint32_t calc_mate_flags( uint32_t flags )
+{
+    uint32_t res = ( flags & 0x1 ) |
+                   ( flags & 0x2 ) |
+                   ( ( flags & 0x8 ) >> 1 ) |
+                   ( ( flags & 0x4 ) << 1 ) |
+                   ( ( flags & 0x20 ) >> 1 ) |
+                   ( ( flags & 0x10 ) << 1 ) |
+                   ( ( flags & 0x40 ) ? 0x80 : 0x40 ) |
+                   ( flags & 0x700 );
+    return res;
+}
+
+
+static const char *equal_sign = "=";
+
+
+static rc_t print_slice( const char * source, uint32_t source_str_len, uint32_t *source_offset, 
+                         uint32_t *source_len_vector, uint32_t source_len_vector_len,
+                         uint32_t slice_nr )
+{
+    rc_t rc = 0;
+    if ( *source_offset > source_str_len || slice_nr >= source_len_vector_len )
+        rc = RC( rcExe, rcNoTarg, rcReading, rcParam, rcInvalid );
+    else
+    {
+        uint32_t len = source_len_vector[ slice_nr ];
+        if ( len > 0 )
+        {
+            const char * ptr = &source[ *source_offset ];
+            rc = KOutMsg( "%.*s\t", len, ptr );
+            *source_offset += len;
+        }
+        else
+            rc = KOutMsg( "*\t" );
+    }
+    return rc;
+}
+
+
+static rc_t print_qslice( const samdump_opts * const opts, bool reverse, const char * source, uint32_t source_str_len,
+                          uint32_t *source_offset, uint32_t *source_len_vector,
+                          uint32_t source_len_vector_len, uint32_t slice_nr )
+{
+    rc_t rc = 0;
+    if ( *source_offset > source_str_len || slice_nr >= source_len_vector_len )
+        rc = RC( rcExe, rcNoTarg, rcReading, rcParam, rcInvalid );
+    else
+    {
+        uint32_t len = source_len_vector[ slice_nr ];
+        if ( len > 0 )
+        {
+            const char * ptr = &source[ *source_offset ];
+            rc = dump_quality_33( opts, ptr, len, reverse ); /* sam-dump-opts.c */
+            if ( rc == 0 )
+            {
+                rc = KOutMsg( "\t" );
+                if ( rc == 0 )
+                    *source_offset += len;
+            }
+        }
+        else
+            rc = KOutMsg( "*\t" );
+    }
+    return rc;
+}
+
+
+static rc_t print_allel_name( const PlacementRecord * const rec, uint32_t ploidy_idx )
+{
+    rc_t rc = KOutMsg( "ALLELE_%li.%u\t", rec->id, ploidy_idx + 1 );
+    return rc;
+}
+
+static rc_t print_char_ptr( int64_t row_id, const VCursor * cursor, uint32_t col_idx )
+{
+    const char *ptr;
+    size_t len;
+    rc_t rc = read_char_ptr_and_size( row_id, cursor, col_idx, &ptr, &len );
+    if ( rc == 0 )
+    {
+        if ( len > 0 )
+            rc = KOutMsg( "%.*s\t", len, ptr );
+        else
+            rc = KOutMsg( "*\t" );
+    }
+    return rc;
+}
+
+
+static rc_t modify_and_print_cigar( int64_t row_id, const VCursor * cursor, uint32_t col_idx )
+{
+    cg_cigar_input input;
+    rc_t rc = read_char_ptr_and_size( row_id, cursor, col_idx, &input.cigar, &input.cigar_len );
+    if ( rc == 0 )
+    {
+        if ( input.cigar_len > 0 )
+        {
+            cg_cigar_output output;
+
+            input.orientation = false;
+            input.seq_req_id = 0;
+            input.edit_dist_available = false;
+            input.edit_dist = 0;
+            rc = make_cg_cigar( &input, &output ); /* cg_tools.c */
+            if ( rc == 0 )
+                rc = KOutMsg( "%.*s\t", output.cigar_len, output.cigar );
+        }
+        else
+            rc = KOutMsg( "*\t" );
+    }
+    return rc;
+}
+
+
+static rc_t print_evidence_alignment( const samdump_opts * const opts, const PlacementRecord * const rec,
+                                      const align_table_context * const atx, int64_t align_id, uint32_t ploidy_idx )
+{
+    uint32_t ref_ploidy;
+    const VCursor * cursor = atx->eval.cursor;
+    rc_t rc = read_uint32_t( align_id, cursor, atx->ref_ploidy_idx, &ref_ploidy, 0 );
+    if ( rc == 0 && ( ref_ploidy == ploidy_idx ) )
+    {
+        uint32_t sam_flags = 0x40;
+        INSDC_coord_zero ref_pos;
+        size_t ref_pos_len;
+
+        /* SAM-FIELD: QNAME     constructed from allel-id/sub-id */
+        rc = KOutMsg( "%li\t", align_id );
+
+        if ( rc == 0 )
+            rc = read_INSDC_coord_zero( align_id, cursor, atx->ref_pos_idx, &ref_pos, &ref_pos_len );
+
+        /* SAM-FIELD: FLAG      SRA-column: SAM_FLAGS ( uint32 ) */
+        /* SAM-FIELD: RNAME     SRA-column: ALLEL-NAME.ploidy_idx */
+        /* SAM-FIELD: POS       SRA-column: REF_POS + 1 */
+        /* SAM-FIELD: MAPQ      SRA-column: MAPQ */
+        if ( rc == 0 )
+            rc = KOutMsg( "%u\tALLELE_%li.%u\t%i\t%d\t", sam_flags, rec->id, ploidy_idx, ref_pos + 1, rec->mapq );
+
+        /* SAM-FIELD: CIGAR     SRA-column: CIGAR_SHORT / with special treatment */
+        if ( rc == 0 )
+            rc = modify_and_print_cigar( align_id, cursor, atx->eval.cigar_idx );
+
+
+        /* SAM-FIELD: RNEXT     SRA-column: MATE_REF_NAME '*' no mates! */
+        /* SAM-FIELD: PNEXT     SRA-column: MATE_REF_POS + 1 '0' no mates */
+        /* SAM-FIELD: TLEN      SRA-column: TEMPLATE_LEN '0' not in table */
+        if ( rc == 0 )
+            rc = KOutMsg( "*\t0\t0\t" );
+
+        /* SAM-FIELD: SEQ       SRA-column: READ  */
+        if ( rc == 0 )
+            rc = print_char_ptr( align_id, cursor, atx->eval.read_idx );
+
+        /* SAM-FIELD: QUAL      SRA-column: SAM_QUALITY */
+        if ( rc == 0 )
+        {
+            const char * quality;
+            size_t quality_str_len;
+
+            rc = read_char_ptr_and_size( rec->id, cursor, atx->eval.sam_quality_idx, &quality, &quality_str_len );
+            if ( rc == 0 )
+                rc = dump_quality_33( opts, quality, quality_str_len, false );
+        }
+
+        /* OPT SAM-FIELD: XI     SRA-column: ALIGN_ID */
+        if ( rc == 0 && opts->print_alignment_id_in_column_xi )
+            rc = KOutMsg( "\tXI:i:%u", align_id );
+
+        if ( rc == 0 )
+            rc = KOutMsg( "\n" );
+
+    }
+    return rc;
+}
+
+
+static rc_t print_evidence_alignments( const samdump_opts * const opts, const PlacementRecord * const rec,
+                                       const align_table_context * const atx, uint32_t ploidy_idx )
+{
+    int64_t *ev_al_ids;
+    uint32_t ev_al_ids_count;
+    rc_t rc = read_int64_t_ptr( rec->id, atx->cmn.cursor, atx->ev_alignments_idx, &ev_al_ids, &ev_al_ids_count );
+    if ( rc == 0 && ev_al_ids_count > 0 )
+    {
+        uint32_t idx;
+        for ( idx = 0; idx < ev_al_ids_count && rc == 0; ++idx )
+        {
+            rc = print_evidence_alignment( opts, rec, atx, ev_al_ids[ idx ], ploidy_idx );
+        }
+    }
+    return rc;
+}
+
+
+/* print minimal one alignment from the EVIDENCE-INTERVAL / EVIDENCE-ALIGNMENT - table(s) */
+static rc_t print_alignment_sam_ev( const samdump_opts * const opts, const char * ref_name,
+                                    INSDC_coord_zero pos,
+                                    const PlacementRecord * const rec, const align_table_context * const atx,
+                                    uint64_t * const rows_so_far )
+{
+    uint32_t ploidy;
+    const VCursor * cursor = atx->cmn.cursor;
+    rc_t rc = read_uint32_t( rec->id, cursor, atx->ploidy_idx, &ploidy, 0 );
+    if ( rc == 0 && ploidy > 0 )
+    {
+        uint32_t ploidy_idx, cigar_len_vector_len, read_len_vector_len, edit_dist_vector_len;
+        size_t cigar_str_len=0, read_str_len, quality_str_len;
+        uint32_t *cigar_len_vector;
+        uint32_t *read_len_vector;
+        uint32_t *edit_dist_vector;
+        uint32_t cigar_offset = 0;
+        uint32_t read_offset = 0;
+        uint32_t quality_offset = 0;
+        uint32_t sam_flags = 0x40;
+        const char * cigar = NULL;
+        const char * read;
+        const char * quality;
+
+        rc = read_char_ptr_and_size( rec->id, cursor, atx->cmn.cigar_idx, &cigar, &cigar_str_len );
+        if ( rc == 0 )
+            rc = read_uint32_t_ptr( rec->id, cursor, atx->cmn.cigar_len_idx, &cigar_len_vector, &cigar_len_vector_len );
+        if ( rc == 0 )
+            rc = read_char_ptr_and_size( rec->id, cursor, atx->cmn.read_idx, &read, &read_str_len );
+        if ( rc == 0 )
+            rc = read_uint32_t_ptr( rec->id, cursor, atx->cmn.read_len_idx, &read_len_vector, &read_len_vector_len );
+        if ( rc == 0 )
+            rc = read_char_ptr_and_size( rec->id, cursor, atx->cmn.sam_quality_idx, &quality, &quality_str_len );
+        if ( rc == 0 )
+            rc = read_uint32_t_ptr( rec->id, cursor, atx->cmn.edit_dist_idx, &edit_dist_vector, &edit_dist_vector_len );
+
+        for ( ploidy_idx = 0; ploidy_idx < ploidy && rc == 0; ++ploidy_idx )
+        {
+            /* SAM-FIELD: QNAME     SRA-column: eventually prefixed row-id into EVIDENCE_INTERVAL - table */
+            rc = print_allel_name( rec, ploidy_idx );
+
+            /* SAM-FIELD: FLAG      SRA-column: SAM_FLAGS ( uint32 ) */
+            /* SAM-FIELD: RNAME     SRA-column: REF_NAME / REF_SEQ_ID ( char * ) */
+            /* SAM-FIELD: POS       SRA-column: REF_POS + 1 */
+            /* SAM-FIELD: MAPQ      SRA-column: MAPQ */
+            if ( rc == 0 )
+                rc = KOutMsg( "%u\t%s\t%u\t%d\t", sam_flags, ref_name, pos + 1, rec->mapq );
+
+            /* SAM-FIELD: CIGAR     SRA-column: CIGAR_SHORT / CIGAR_LONG sliced!!! */
+            if ( rc == 0 )
+                rc = print_slice( cigar, cigar_str_len, &cigar_offset, cigar_len_vector, cigar_len_vector_len, ploidy_idx );
+
+            /* SAM-FIELD: RNEXT     SRA-column: MATE_REF_NAME ( !!! row_len can be zero !!! ) */
+            /* SAM-FIELD: PNEXT     SRA-column: MATE_REF_POS + 1 ( !!! row_len can be zero !!! ) */
+            /* SAM-FIELD: TLEN      SRA-column: TEMPLATE_LEN ( !!! row_len can be zero !!! ) */
+            if ( rc == 0 )
+                rc = KOutMsg( "*\t%u\t%d\t", 0, 0 );
+
+            /* SAM-FIELD: SEQ       SRA-column: READ sliced!!! */
+            if ( rc == 0 )
+                rc = print_slice( read, read_str_len, &read_offset, read_len_vector, read_len_vector_len, ploidy_idx );
+
+            /* SAM-FIELD: QUAL      SRA-column: SAM_QUALITY sliced!!! */
+            if ( rc == 0 )
+                rc = print_qslice( opts, false, quality, quality_str_len, &quality_offset, read_len_vector, read_len_vector_len, ploidy_idx );
+
+            /* OPT SAM-FIELD: XI     SRA-column: ALIGN_ID */
+            if ( rc == 0 && opts->print_alignment_id_in_column_xi )
+                rc = KOutMsg( "\tXI:i:%u", rec->id );
+
+            /* OPT SAM-FIELD: NM     SRA-column: EDIT_DISTANCE sliced!!! */
+            if ( rc == 0 )
+            {
+                if ( ploidy_idx < edit_dist_vector_len )
+                    rc = KOutMsg( "\tNM:i:%u", edit_dist_vector[ ploidy_idx ] );
+            }
+
+            if ( rc == 0 )
+                rc = KOutMsg( "\n" );
+
+            (*rows_so_far)++;
+
+            /* we do that here per ALLEL-READ, not at the end per ALLEL, because we have to test which alignments
+               fit the ploidy_idx */
+            if ( rc == 0 && opts->dump_cg_sam )
+                rc = print_evidence_alignments( opts, rec, atx, ploidy_idx + 1 );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t print_alignment_sam_ps( const samdump_opts * const opts, const char * ref_name,
+                                    INSDC_coord_zero pos, matecache * const mc,
+                                    const PlacementRecord * const rec, const align_table_context * const atx,
+                                    uint64_t * const rows_so_far )
+{
+    uint32_t sam_flags = 0;
+    INSDC_coord_zero mate_ref_pos = 0;
+    INSDC_coord_len tlen = 0;
+    int64_t mate_align_id = 0;
+    const char * mate_ref_name = ref_name;
+    size_t mate_ref_name_len = string_size( ref_name );
+    size_t mate_ref_pos_len = 0;
+    const VCursor * cursor = atx->cmn.cursor;
+    int64_t *seq_spot_id;
+    uint32_t seq_spot_id_len;
+
+    /* SAM-FIELD: NONE      SRA-column: MATE_ALIGN_ID ( int64 ) ... for cache lookup's */
+    rc_t rc = read_int64( rec->id, cursor, atx->mate_align_id_idx, &mate_align_id, 0 );
+
+    /* pre-read seq-spot-id, needed for unaligned cache and SAM-field QNAME */
+    if ( rc == 0 )
+        rc = read_int64_t_ptr( rec->id, cursor, atx->cmn.seq_spot_id_idx, &seq_spot_id, &seq_spot_id_len );
+
+    /* try to find the info about the mate in the CACHE... */
+    if ( rc == 0 )
+    {
+        if ( mate_align_id != 0 )
+        {
+            if ( opts->use_mate_cache && mc != NULL )
+            {
+                rc = matecache_lookup_same_ref( mc, atx->db_idx, mate_align_id, &mate_ref_pos, &sam_flags, &tlen );
+                if ( rc == 0 )
+                {
+                    const INSDC_read_filter * read_filter;
+                    uint32_t read_filter_len;
+
+                    /* cache entry-found! (on the same reference) -> that means we have now mate_ref_pos, flags and tlen */
+                    rc = matecache_remove_same_ref( mc, atx->db_idx, mate_align_id );
+                    mate_ref_name = equal_sign;
+                    mate_ref_name_len = 1;
+                    mate_ref_pos_len = 1;
+
+                    /* read the read-filter column and adjust the sam-flags value to reflect the presense
+                       of the flag SRA_READ_FILTER_REJECT, if it is there switch 0x200 on, of not switch 0x200 off */
+                    rc = read_INSDC_read_filter_ptr( rec->id, cursor, atx->cmn.read_filter_idx, &read_filter, &read_filter_len );
+                    if ( rc == 0 && read_filter_len > 0 )
+                    {
+                        if ( ( read_filter[ 0 ] & READ_FILTER_REJECT ) == READ_FILTER_REJECT )
+                            sam_flags |= 0x200;
+                        else
+                            sam_flags &= ~0x200;
+
+                        if ( ( read_filter[ 0 ] & READ_FILTER_CRITERIA ) == READ_FILTER_CRITERIA )
+                            sam_flags |= 0x400;
+                        else
+                            sam_flags &= ~0x400;
+                    }
+                }
+            }
+            else
+            {
+                rc = RC( rcApp, rcNoTarg, rcAccessing, rcItem, rcNotFound );
+            }
+        }
+
+        if ( ( mate_align_id != 0 && GetRCState( rc ) == rcNotFound )||( mate_align_id == 0 ) )
+        {
+            /* no cache entry-found OR do not use mate-cache
+               ---> that means we have to read it from the table... */
+
+            rc = read_char_ptr_and_size( rec->id, cursor, atx->mate_ref_name_idx, &mate_ref_name, &mate_ref_name_len );
+            if ( rc == 0 )
+                rc = read_INSDC_coord_zero( rec->id, cursor, atx->mate_ref_pos_idx, &mate_ref_pos, &mate_ref_pos_len );
+            if ( rc == 0 )
+                rc = read_INSDC_coord_len( rec->id, cursor, atx->tlen_idx, &tlen );
+            if ( rc == 0 )
+                rc = read_uint32_t( rec->id, cursor, atx->sam_flags_idx, &sam_flags, 0 );
+
+            if ( rc == 0 )
+            {
+                if ( mate_align_id != 0 )
+                {
+                    /* now that we have the data, store it in sam-ref-cache it the mate is on the same ref. */
+                    if ( mate_ref_name_len > 0 )
+                    {
+                        int cmp = string_cmp( mate_ref_name, mate_ref_name_len, ref_name, string_size( ref_name ), mate_ref_name_len );
+                        if ( cmp == 0 )
+                        {
+                            if ( opts->use_mate_cache )
+                            {
+                                uint32_t mate_flags = calc_mate_flags( sam_flags );
+                                rc = matecache_insert_same_ref( mc, atx->db_idx, rec->id, pos, mate_flags, -tlen );
+                            }
+                            mate_ref_name = equal_sign;
+                            mate_ref_name_len = 1;
+                        }
+                    }
+                }
+                else if ( opts->print_half_unaligned_reads )
+                {
+                    if ( opts->use_mate_cache )
+                    {
+                        rc = matecache_insert_unaligned( mc, atx->db_idx, rec->id, pos, atx->ref_idx, *seq_spot_id );
+                    }
+                }
+            }
+        }
+    }
+
+    if ( rc == 0 && opts->use_matepair_filter )
+    {
+        if ( !filter_by_matepair_dist( opts, tlen ) )
+            return 0;
+    }
+
+    (*rows_so_far)++;
+
+    /* SAM-FIELD: QNAME     SRA-column: SEQ_SPOT_ID ( int64 ) */
+    if ( rc == 0 )
+    {
+        if ( seq_spot_id_len > 0 )
+        {
+            if ( opts->print_spot_group_in_name | opts->print_cg_names )
+            {
+                const char * spot_group;
+                size_t spot_group_len;
+                rc = read_char_ptr_and_size( rec->id, cursor, atx->cmn.seq_spot_group_idx, &spot_group, &spot_group_len );
+                if ( rc == 0 )
+                    rc = dump_name( opts, *seq_spot_id, spot_group, spot_group_len );
+            }
+            else
+                rc = dump_name( opts, *seq_spot_id, NULL, 0 );
+        }
+        else
+            rc = KOutMsg( "*" );
+    }
+
+    if ( rc == 0 )
+        rc = KOutMsg( "\t" );
+
+
+    /* massage the sam-flag if we are not dumping unaligned reads... */
+    if ( !opts->dump_unaligned_reads    /** not going to dump unaligned **/
+         && ( sam_flags & 0x1 )         /** but we have sequenced multiple fragments **/
+         && ( sam_flags & 0x8 ) )       /** and not all of them align **/
+    {
+        /*** remove flags talking about multiple reads **/
+        /* turn off 0x001 0x008 0x040 0x080 */
+        sam_flags &= ~0xC9;
+    }
+
+    /* SAM-FIELD: FLAG      SRA-column: SAM_FLAGS ( uint32 ) */
+    /* SAM-FIELD: RNAME     SRA-column: REF_NAME / REF_SEQ_ID ( char * ) */
+    /* SAM-FIELD: POS       SRA-column: REF_POS + 1 */
+    /* SAM-FIELD: MAPQ      SRA-column: MAPQ */
+    if ( rc == 0 )
+        rc = KOutMsg( "%u\t%s\t%u\t%d\t", sam_flags, ref_name, pos + 1, rec->mapq );
+
+    /* SAM-FIELD: CIGAR     SRA-column: CIGAR_SHORT / CIGAR_LONG */
+    if ( rc == 0 )
+        rc = print_char_ptr( rec->id, cursor, atx->cmn.cigar_idx );
+
+    /* SAM-FIELD: RNEXT     SRA-column: MATE_REF_NAME ( !!! row_len can be zero !!! ) */
+    /* SAM-FIELD: PNEXT     SRA-column: MATE_REF_POS + 1 ( !!! row_len can be zero !!! ) */
+    /* SAM-FIELD: TLEN      SRA-column: TEMPLATE_LEN ( !!! row_len can be zero !!! ) */
+    if ( rc == 0 )
+    {
+        if ( mate_ref_name_len > 0 )
+        {
+            rc = KOutMsg( "%.*s\t%u\t%d\t", mate_ref_name_len, mate_ref_name, mate_ref_pos + 1, tlen );
+        }
+        else
+        {
+            if ( mate_ref_pos_len == 0 )
+                rc = KOutMsg( "*\t0\t%d\t", tlen );
+            else
+                rc = KOutMsg( "*\t%u\t%d\t", mate_ref_pos + 1, tlen );
+        }
+    }
+
+    /* SAM-FIELD: SEQ       SRA-column: READ */
+    if ( rc == 0 )
+        rc = print_char_ptr( rec->id, cursor, atx->cmn.read_idx );
+
+    /* SAM-FIELD: QUAL      SRA-column: SAM_QUALITY */
+    if ( rc == 0 )
+    {
+        const char * quality;
+        size_t quality_len;
+        rc = read_char_ptr_and_size( rec->id, cursor, atx->cmn.sam_quality_idx, &quality, &quality_len );
+        if ( rc == 0 )
+        {
+            if ( quality_len > 0 )
+                rc = dump_quality_33( opts, quality, quality_len, false );
+            else
+                rc = KOutMsg( "*" );
+        }
+    }
+
+    /* OPT SAM-FIELD: RG     SRA-column: SPOT_GROUP */
+    if ( rc == 0 )
+    {
+        if ( atx->cmn.seq_spot_group_idx != COL_NOT_AVAILABLE )
+        {
+            const char * spot_grp;
+            size_t spot_grp_len;
+            rc = read_char_ptr_and_size( rec->id, cursor, atx->cmn.seq_spot_group_idx, &spot_grp, &spot_grp_len );
+            if ( rc == 0 && spot_grp_len > 0 )
+                rc = KOutMsg( "\tRG:Z:%.*s", spot_grp_len, spot_grp );
+        }
+    }
+
+    /* OPT SAM-FIELD: XI     SRA-column: ALIGN_ID */
+    if ( rc == 0 && opts->print_alignment_id_in_column_xi )
+        rc = KOutMsg( "\tXI:i:%u", rec->id );
+
+    /* OPT SAM-FIELD: NM     SRA-column: EDIT_DISTANCE */
+    if ( rc == 0 )
+    {
+        uint32_t *edit_dist;
+        uint32_t edit_dist_len;
+        rc = read_uint32_t_ptr( rec->id, cursor, atx->cmn.edit_dist_idx, &edit_dist, &edit_dist_len );
+        if ( rc == 0 && edit_dist_len > 0 )
+            rc = KOutMsg( "\tNM:i:%u", *edit_dist );
+    }
+
+    if ( rc == 0 )
+        rc = KOutMsg( "\n" );
+    return rc;
+}
+
+
+static rc_t print_alignment_fastx( const samdump_opts * const opts, const char * ref_name,
+                                   INSDC_coord_zero pos, matecache * const mc,
+                                   const PlacementRecord * const rec, const align_table_context * const atx,
+                                   uint64_t * const rows_so_far )
+{
+    bool orientation;
+    const VCursor *cursor = atx->cmn.cursor;
+    int64_t mate_align_id;
+    int64_t * seq_spot_id;
+    uint32_t seq_spot_id_len;
+
+    rc_t rc = read_int64_t_ptr( rec->id, cursor, atx->cmn.seq_spot_id_idx, &seq_spot_id, &seq_spot_id_len );
+
+    /* this is here to detect if the mate is aligned, if NOT, we want to put it into the unaligned-cache! */
+    if ( rc == 0 && opts->print_half_unaligned_reads )
+    {
+        rc = read_int64( rec->id, cursor, atx->mate_align_id_idx, &mate_align_id, 0 );
+        if ( rc == 0 && mate_align_id == 0 && mc != NULL && opts->use_mate_cache )
+        {
+            rc = matecache_insert_unaligned( mc, atx->db_idx, rec->id, pos, atx->ref_idx, *seq_spot_id );
+        }
+    }
+
+    ( *rows_so_far )++;
+
+    if ( opts->output_format == of_fastq )
+        rc = KOutMsg( "@" );
+    else
+        rc = KOutMsg( ">" );
+
+    /* SAM-FIELD: QNAME     1.row: name */
+    if ( rc == 0 )
+    {
+        if ( seq_spot_id_len > 0 )
+        {
+            if ( opts->print_spot_group_in_name )
+            {
+                const char * spot_grp;
+                size_t spot_grp_len;
+                rc = read_char_ptr_and_size( rec->id, cursor, atx->cmn.seq_spot_group_idx, &spot_grp, &spot_grp_len );
+                if ( rc == 0 )
+                    rc = dump_name( opts, *seq_spot_id, spot_grp, spot_grp_len );
+            }
+            else
+                rc = dump_name( opts, *seq_spot_id, NULL, 0 );
+        }
+        else
+            rc = KOutMsg( "*" );
+
+        if ( rc == 0 )
+        {
+            uint32_t * seq_read_id;
+            uint32_t seq_read_id_len;
+            rc = read_uint32_t_ptr( rec->id, cursor, atx->cmn.seq_read_id_idx, &seq_read_id, &seq_read_id_len );
+            if ( rc == 0 && seq_read_id_len > 0 )
+                rc = KOutMsg( "/%u", *seq_read_id );
+        }
+    }
+
+    /* SRA-column: REF_ORIENTATION ( bool ) ... needed for quality */
+    if ( rc == 0 )
+        rc = read_bool( rec->id, cursor, atx->cmn.ref_orientation_idx, &orientation, false );
+
+    /* source of the alignment: primary/secondary/evidence */
+    if ( rc == 0 )
+    {
+        switch( atx->align_table_type )
+        {
+        case att_primary    :   rc = KOutMsg( " primary" ); break;
+        case att_secondary  :   rc = KOutMsg( " secondary" ); break;
+        case att_evidence   :   rc = KOutMsg( " evidence" ); break;
+        }
+    }
+
+    /* against what reference aligned, at what position, with what mapping-quality */
+    if ( rc == 0 )
+        rc = KOutMsg( " ref=%s pos=%u mapq=%i\n", ref_name, pos + 1, rec->mapq );
+
+    /* READ at a new line */
+    if ( rc == 0 )
+    {
+        const char * read;
+        size_t read_size;
+        rc = read_char_ptr_and_size( rec->id, cursor, atx->cmn.raw_read_idx, &read, &read_size );
+        if ( rc == 0 )
+        {
+            if ( read_size > 0 )
+                rc = KOutMsg( "%.*s\n", read_size, read );
+            else
+                rc = KOutMsg( "*\n" );
+        }
+    }
+
+    /* QUALITY on a new line if in fastq-mode */
+    if ( rc == 0 && opts->output_format == of_fastq )
+    {
+        rc = KOutMsg( "+\n" );
+        if ( rc == 0 )
+        {
+            const char * quality;
+            size_t quality_size;
+            rc = read_char_ptr_and_size( rec->id, cursor, atx->cmn.sam_quality_idx, &quality, &quality_size );
+            if ( rc == 0 )
+            {
+                if ( quality_size > 0 )
+                    rc = dump_quality_33( opts, quality, quality_size, false );
+                else
+                    rc = KOutMsg( "*" );
+            }
+            if ( rc == 0 )
+                rc = KOutMsg( "\n" );
+        }
+    }
+
+    return rc;
+}
+
+
+/* print one record of alignment-information in SAM-format */
+static rc_t walk_position( const samdump_opts * const opts, PlacementSetIterator * const set_iter,
+                           const char * ref_name, INSDC_coord_zero pos,
+                           matecache * const mc, uint64_t * const rows_so_far )
+{
+    rc_t rc = 0;
+    while ( rc == 0 && !test_limit_reached( opts, *rows_so_far ) )
+    {
+        rc = Quitting ();
+        if ( rc == 0 )
+        {
+            const PlacementRecord *rec;
+            rc = PlacementSetIteratorNextRecordAt( set_iter, pos, &rec );
+            if ( rc != 0 )
+            {
+                if ( GetRCState( rc ) != rcDone )
+                {
+                    LOGERR( klogInt, rc, "PlacementSetIteratorNextRecordAt() failed" );
+                }
+            }
+            else
+            {
+                align_table_context * atx = PlacementRecord_get_ext_data_ptr( rec, placementRecordExtension0 );
+                if ( atx == NULL )
+                {
+                    rc = RC( rcExe, rcNoTarg, rcReading, rcParam, rcNull );
+                    LOGERR( klogInt, rc, "no placement-record-context available" );
+                }
+                else
+                {
+                    if ( opts->output_format == of_sam )
+                    {
+                        if ( atx->align_table_type == att_evidence )
+                            rc = print_alignment_sam_ev( opts, ref_name, pos, rec, atx, rows_so_far );
+                        else
+                            rc = print_alignment_sam_ps( opts, ref_name, pos, mc, rec, atx, rows_so_far );
+                    }
+                    else
+                        rc = print_alignment_fastx( opts, ref_name, pos, mc, rec, atx, rows_so_far );
+                }
+            }
+        }
+    }
+    if ( GetRCState( rc ) == rcDone ) rc = 0;
+    return rc;
+}
+
+
+static rc_t walk_window( const samdump_opts * const opts, PlacementSetIterator * const set_iter,
+                         const char * ref_name, matecache * const mc, uint64_t * const rows_so_far )
+{
+    rc_t rc = 0;
+    while ( rc == 0 && !test_limit_reached( opts, *rows_so_far ) )
+    {
+        rc = Quitting ();
+        if ( rc == 0 )
+        {
+            INSDC_coord_zero pos;
+            rc = PlacementSetIteratorNextAvailPos( set_iter, &pos, NULL );
+            if ( rc != 0 )
+            {
+                if ( GetRCState( rc ) != rcDone )
+                {
+                    LOGERR( klogInt, rc, "PlacementSetIteratorNextAvailPos() failed" );
+                }
+            }
+            else
+            {
+                rc = walk_position( opts, set_iter, ref_name, pos, mc, rows_so_far );
+            }
+        }
+    }
+    if ( GetRCState( rc ) == rcDone ) rc = 0;
+    return rc;
+}
+
+
+static rc_t walk_reference( const samdump_opts * const opts, PlacementSetIterator * const set_iter,
+                            struct ReferenceObj const * ref_obj, const char * ref_name,
+                            matecache * const mc, uint64_t * const rows_so_far )
+{
+    rc_t rc = 0;
+    while ( rc == 0 && !test_limit_reached( opts, *rows_so_far ) )
+    {
+        rc = Quitting ();
+        if ( rc == 0 )
+        {
+            INSDC_coord_zero first_pos;
+            INSDC_coord_len len;
+            rc = PlacementSetIteratorNextWindow( set_iter, &first_pos, &len );
+            if ( rc != 0 )
+            {
+                if ( GetRCState( rc ) != rcDone )
+                {
+                    LOGERR( klogInt, rc, "PlacementSetIteratorNextWindow() failed" );
+                }
+            }
+            else
+                rc = walk_window( opts, set_iter, ref_name, mc, rows_so_far );
+        }
+    }
+    if ( GetRCState( rc ) == rcDone ) rc = 0;
+
+    if ( rc == 0 && mc != NULL && opts->use_mate_cache )
+        rc = matecache_clear_same_ref( mc );
+
+    return rc;
+}
+
+
+static rc_t walk_placements( const samdump_opts * const opts, PlacementSetIterator * const set_iter,
+                             matecache * const mc, uint64_t * const rows_so_far )
+{
+    rc_t rc = 0;
+    while ( rc == 0 && !test_limit_reached( opts, *rows_so_far ) )
+    {
+        struct ReferenceObj const * ref_obj;
+
+        rc = PlacementSetIteratorNextReference( set_iter, NULL, NULL, &ref_obj );
+        if ( rc == 0 )
+        {
+            if ( ref_obj != NULL )
+            {
+                const char * ref_name = NULL;
+                if ( opts->use_seqid_as_refname )
+                    rc = ReferenceObj_SeqId( ref_obj, &ref_name );
+                else
+                    rc = ReferenceObj_Name( ref_obj, &ref_name );
+
+                if ( rc == 0 )
+                    rc = walk_reference( opts, set_iter, ref_obj, ref_name, mc, rows_so_far );
+                else
+                {
+                    if ( opts->use_seqid_as_refname )
+                    {
+                        (void)LOGERR( klogInt, rc, "ReferenceObj_SeqId() failed" );
+                    }
+                    else
+                    {
+                        (void)LOGERR( klogInt, rc, "ReferenceObj_Name() failed" );
+                    }
+                }
+            }
+        }
+        else if ( GetRCState( rc ) != rcDone )
+        {
+            (void)LOGERR( klogInt, rc, "ReferenceIteratorNextReference() failed" );
+        }
+    }
+
+    if ( GetRCState( rc ) == rcDone )
+        rc = 0;
+    return rc;
+}
+
+
+static void CC destroy_align_table_context( void *item, void *data )
+{
+    align_table_context * atx = item;
+    VCursorRelease( atx->cmn.cursor );
+    VCursorRelease( atx->eval.cursor );
+    free( atx );
+}
+
+
+static rc_t print_all_aligned_spots_of_this_reference( const samdump_opts * const opts, const input_database * const ids,
+                                                       matecache * const mc, const AlignMgr * const a_mgr,
+                                                       const ReferenceObj * const ref_obj, uint64_t * const rows_so_far )
+{
+    PlacementSetIterator * set_iter;
+    /* the we ask the alignment-manager to produce a placement-set-iterator... */
+    rc_t rc = AlignMgrMakePlacementSetIterator( a_mgr, &set_iter );
+    if ( rc != 0 )
+    {
+        (void)LOGERR( klogErr, rc, "cannot create PlacementSetIterator" );
+    }
+    else
+    {
+        /* here we need a vector to passed along into the creation of the iterators */
+        Vector context_list;
+        INSDC_coord_len ref_len;
+
+        VectorInit ( &context_list, 0, 5 );
+
+        rc = ReferenceObj_SeqLength( ref_obj, &ref_len );
+        if ( rc == 0 )
+        {
+            rc = add_pl_iter( opts, set_iter, ref_obj, ids,
+                0,                  /* where it starts on the reference */
+                ref_len,            /* the whole length of this reference/chromosome */
+                NULL,               /* no spotgroup re-grouping (yet) */
+                &context_list
+                );
+            if ( rc == 0 )
+                rc = walk_placements( opts, set_iter, mc, rows_so_far );
+        }
+
+        /* walk the context_list to free the align_table_context records, close/free the cursors... */
+        VectorWhack ( &context_list, destroy_align_table_context, NULL );
+        PlacementSetIteratorRelease( set_iter );
+    }
+    return rc;
+}
+
+
+/*
+   the user did not specify regions, print all alignments from all input-files
+   this is strategy #1 to do this, create a ref_iter for every reference each
+    + ... less cursors will be open at the same time, more resource efficient
+    - ... if more than one input-file, the output will be sorted only within each reference
+*/
+static rc_t print_all_aligned_spots_0( const samdump_opts * const opts, const input_files * const ifs,
+                                       matecache * const mc, const AlignMgr * const a_mgr, uint64_t * const rows_so_far )
+{
+    rc_t rc = 0;
+    uint32_t db_idx;
+    /* we now loop through all input-databases... */
+    for ( db_idx = 0; db_idx < ifs->database_count && rc == 0; ++db_idx )
+    {
+        const input_database * ids = VectorGet( &ifs->dbs, db_idx );
+        if ( ids != NULL )
+        {
+            uint32_t refobj_count;
+            rc = ReferenceList_Count( ids->reflist, &refobj_count );
+            if ( rc == 0 && refobj_count > 0 )
+            {
+                uint32_t ref_idx;
+                for ( ref_idx = 0; ref_idx < refobj_count && rc == 0; ++ref_idx )
+                {
+                    const ReferenceObj * ref_obj;
+                    rc = ReferenceList_Get( ids->reflist, &ref_obj, ref_idx );
+                    if ( rc == 0 && ref_obj != NULL )
+                    {
+                        rc = print_all_aligned_spots_of_this_reference( opts, ids, mc, a_mgr, ref_obj, rows_so_far );
+                        ReferenceObj_Release( ref_obj );
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+/*
+   the user did not specify regions, print all alignments from all input-files
+   this is strategy #2 to do this, throw all iterators for all input-files and all there references
+   into one set_iter.
+    + ... if more than one input-file, everything will be sorted
+    - ... creates a large number of open cursors ( because of sub-cursors due to schema-functions )
+          this can result in not beeing able to perform the functions at all because of running out of resources
+    - ... a long delay at start up, before the 1st alignment is printed ( all the cursors have to be opened )
+*/
+static rc_t print_all_aligned_spots_1( const samdump_opts * const opts, const input_files * const ifs,
+                                       matecache * const mc, const AlignMgr * const a_mgr, uint64_t * const rows_so_far )
+{
+    PlacementSetIterator * set_iter;
+    /* the we ask the alignment-manager to produce a placement-set-iterator... */
+    rc_t rc = AlignMgrMakePlacementSetIterator( a_mgr, &set_iter );
+    if ( rc != 0 )
+    {
+        (void)LOGERR( klogErr, rc, "cannot create PlacementSetIterator" );
+    }
+    else
+    {
+        /* here we need a vector to passed along into the creation of the iterators */
+        Vector context_list;
+        VectorInit ( &context_list, 0, 5 );
+
+        rc = prepare_whole_files( opts, ifs, set_iter, &context_list );
+
+        if ( rc == 0 )
+            rc = walk_placements( opts, set_iter, mc, rows_so_far );
+
+        /* walk the context_list to free the align_table_context records, close/free the cursors... */
+        VectorWhack ( &context_list, destroy_align_table_context, NULL );
+        PlacementSetIteratorRelease( set_iter );
+    }
+    return rc;
+}
+
+
+/*
+   the user has specified certain regions on the references,
+   print only alignments, that start in these regions
+*/
+static rc_t print_selected_aligned_spots( const samdump_opts * const opts, const input_files * const ifs,
+                                          matecache * const mc, const AlignMgr * const a_mgr, uint64_t * const rows_so_far )
+{
+    PlacementSetIterator * set_iter;
+    /* the we ask the alignment-manager to produce a placement-set-iterator... */
+    rc_t rc = AlignMgrMakePlacementSetIterator( a_mgr, &set_iter );
+    if ( rc != 0 )
+    {
+        (void)LOGERR( klogErr, rc, "cannot create PlacementSetIterator" );
+    }
+    else
+    {
+        /* here we need a vector to passed along into the creation of the iterators */
+        Vector context_list;
+        VectorInit ( &context_list, 0, 5 );
+
+        rc = prepare_regions( opts, ifs, set_iter, &context_list );
+
+        if ( rc == 0 )
+            rc = walk_placements( opts, set_iter, mc, rows_so_far );
+
+        /* walk the context_list to free the align_table_context records, close/free the cursors... */
+        VectorWhack ( &context_list, destroy_align_table_context, NULL );
+
+        PlacementSetIteratorRelease( set_iter );
+    }
+    return rc;
+}
+
+
+/*
+   this is called from sam-dump3.c, it prepares the iterators and then walks them
+   ---> only entry into this module <--- 
+*/
+rc_t print_aligned_spots( const samdump_opts * const opts, const input_files * const ifs,
+                          matecache * const mc, uint64_t * const rows_so_far )
+{
+    const AlignMgr * a_mgr;
+    /* first we make an alignment-manager */
+    rc_t rc = AlignMgrMakeRead( &a_mgr );
+    if ( rc != 0 )
+    {
+        (void)LOGERR( klogErr, rc, "cannot create alignment-manager" );
+    }
+    else
+    {
+        if ( opts->region_count == 0 )
+        {
+            /* the user did not specify regions to be printed ==> print all alignments */
+            switch( opts->dump_mode )
+            {
+                case dm_one_ref_at_a_time : rc = print_all_aligned_spots_0( opts, ifs, mc, a_mgr, rows_so_far ); break;
+                case dm_prepare_all_refs  : rc = print_all_aligned_spots_1( opts, ifs, mc, a_mgr, rows_so_far ); break;
+            }
+        }
+        else
+        {
+            /* the user did specify regions to be printed ==> print only the alignments in these regions */
+            rc = print_selected_aligned_spots( opts, ifs, mc, a_mgr, rows_so_far );
+        }
+        AlignMgrRelease( a_mgr );
+    }
+    return rc;
+}
diff --git a/tools/sra-pileup/sam-aligned.h b/tools/sra-pileup/sam-aligned.h
new file mode 100644
index 0000000..b8a4260
--- /dev/null
+++ b/tools/sra-pileup/sam-aligned.h
@@ -0,0 +1,45 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_sam_aligned_
+#define _h_sam_aligned_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include "sam-dump-opts.h"
+#include "inputfiles.h"
+#include "matecache.h"
+
+#define COL_READ "(INSDC:dna:text)READ"
+
+rc_t print_aligned_spots( const samdump_opts * const opts, const input_files * const ifs,
+                          matecache * const mc, uint64_t * const rows_so_far );
+
+#endif
\ No newline at end of file
diff --git a/tools/sra-pileup/sam-dump-opts.c b/tools/sra-pileup/sam-dump-opts.c
new file mode 100644
index 0000000..6a069c1
--- /dev/null
+++ b/tools/sra-pileup/sam-dump-opts.c
@@ -0,0 +1,1493 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+
+#include "sam-dump-opts.h"
+#include <align/quality-quantizer.h>
+#include <sysalloc.h>
+
+#define CURSOR_CACHE_SIZE 256*1024*1024
+
+/* =========================================================================================== */
+
+
+static int cmp_pchar( const char * a, const char * b )
+{
+    int res = 0;
+    if ( ( a != NULL )&&( b != NULL ) )
+    {
+        size_t len_a = string_size( a );
+        size_t len_b = string_size( b );
+        res = string_cmp ( a, len_a, b, len_b, ( len_a < len_b ) ? len_b : len_a );
+    }
+    return res;
+}
+
+
+/* =========================================================================================== */
+
+
+static range * make_range( const uint64_t start, const uint64_t end )
+{
+    range *res = calloc( sizeof *res, 1 );
+    if ( res != NULL )
+    {
+        res->start = start;
+        res->end = end;
+    }
+    return res;
+}
+
+
+static int cmp_range( const range * a, const range * b )
+{
+
+    int res = ( a->start - b->start );
+    if ( res == 0 )
+        res = ( a->end - b->end );
+    return res;
+}
+
+
+static bool range_overlapp( const range * a, const range * b )
+{
+    return ( !( ( b->end < a->start ) || ( b->start > a->end ) ) );
+}
+
+
+/* =========================================================================================== */
+
+
+static reference_region * make_reference_region( const char *name )
+{
+    reference_region *res = calloc( sizeof *res, 1 );
+    if ( res != NULL )
+    {
+        res->name = string_dup_measure ( name, NULL );
+        if ( res->name == NULL )
+        {
+            free( res );
+            res = NULL;
+        }
+        else
+            VectorInit ( &res->ranges, 0, 5 );
+    }
+    return res;
+}
+
+
+static int CC cmp_range_wrapper( const void *item, const void *n )
+{   return cmp_range( item, n ); }
+
+
+static rc_t add_ref_region_range( reference_region * self, const uint64_t start, const uint64_t end )
+{
+    rc_t rc = 0;
+    range *r = make_range( start, end );
+    if ( r == NULL )
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        rc = VectorInsert ( &self->ranges, r, NULL, cmp_range_wrapper );
+        if ( rc != 0 )
+            free( r );
+    }
+    return rc;
+}
+
+
+#define RR_NAME  1
+#define RR_START 2
+#define RR_END   3
+
+
+static void put_c( char *s, size_t size, size_t *dst, char c )
+{
+    if ( *dst < ( size - 1 ) )
+        s[ *dst ] = c;
+    (*dst)++;
+}
+
+static void finish_txt( char *s, size_t size, size_t *dst )
+{
+    if ( *dst > size )
+        s[ size - 1 ] = 0;
+    else
+        s[ *dst ] = 0;
+    *dst = 0;
+}
+
+static uint64_t finish_num( char *s, size_t size, size_t *dst )
+{
+    uint64_t res = 0;
+    char *endp;
+    finish_txt( s, size, dst );
+    res = strtou64( s, &endp, 10 );
+    return res;
+}
+
+
+/* s = refname:1000-2000 */
+static void parse_definition( const char *s, char * name, size_t len,
+                              uint64_t *start, uint64_t *end )
+{
+    size_t n = string_size( s );
+
+    *start = 0;
+    *end   = 0;
+    name[ 0 ] = 0;
+    if ( n > 0 )
+    {
+        size_t i, st, dst = 0;
+        char tmp[ 32 ];
+        st = RR_NAME;
+        for ( i = 0; i < n; ++i )
+        {
+            char c = s[ i ];
+            switch( st )
+            {
+                case RR_NAME  : if ( c == ':' )
+                                {
+                                    finish_txt( name, len, &dst );
+                                    st = RR_START;
+                                }
+                                else
+                                {
+                                    put_c( name, len, &dst, c );
+                                }
+                                break;
+
+                case RR_START : if ( c == '-' )
+                                {
+                                    *start = finish_num( tmp, sizeof tmp, &dst );
+                                    st = RR_END;
+                                }
+                                else if ( ( c >= '0' )&&( c <= '9' ) )
+                                {
+                                    put_c( tmp, sizeof tmp, &dst, c );
+                                }
+                                break;
+
+                case RR_END   : if ( ( c >= '0' )&&( c <= '9' ) )
+                                {
+                                    put_c( tmp, sizeof tmp, &dst, c );
+                                }
+                                break;
+            }
+        }
+        switch( st )
+        {
+            case RR_NAME  : finish_txt( name, len, &dst );
+                            break;
+
+            case RR_START : *start = finish_num( tmp, sizeof tmp, &dst );
+                            break;
+
+            case RR_END   : *end = finish_num( tmp, sizeof tmp, &dst );
+                            break;
+        }
+    }
+}
+
+
+static void CC release_range_wrapper( void * item, void * data )
+{
+    free( item );
+}
+
+
+static void free_reference_region( reference_region * self )
+{
+    free( (void*)self->name );
+    VectorWhack ( &self->ranges, release_range_wrapper, NULL );
+    free( self );
+}
+
+
+static void check_ref_region_ranges( reference_region * self )
+{
+    uint32_t n = VectorLength( &self->ranges );
+    uint32_t i = 0;
+    range *a = NULL;
+    while ( i < n )
+    {
+        range *b = VectorGet ( &self->ranges, i );
+        bool remove = false;
+        if ( a != NULL )
+        {
+            remove = range_overlapp( a, b );
+            if ( remove )
+            {
+                range *r;
+                a->end = b->end;
+                VectorRemove ( &self->ranges, i, (void**)&r );
+                free( r );
+                n--;
+            }
+        }
+        if ( !remove )
+        {
+            a = b;
+            ++i;
+        }
+    }
+}
+
+
+/* =========================================================================================== */
+
+
+static int CC reference_vs_pchar_wrapper( const void *item, const BSTNode *n )
+{
+    const reference_region * r = ( const reference_region * )n;
+    return cmp_pchar( (const char *)item, r->name );
+}
+
+static reference_region * find_reference_region( BSTree * regions, const char * name )
+{
+    return ( reference_region * ) BSTreeFind ( regions, name, reference_vs_pchar_wrapper );
+}
+
+
+typedef struct frrl
+{
+    const char * name;
+    size_t len;
+} frrl;
+
+
+static int cmp_pchar_vs_len( const char * a, const char * b, size_t len_b )
+{
+    int res = 0;
+    if ( ( a != NULL )&&( b != NULL ) )
+    {
+        size_t len_a = string_size( a );
+        res = string_cmp ( a, len_a, b, len_b, ( len_a < len_b ) ? len_b : len_a );
+    }
+    return res;
+}
+
+static int CC reference_vs_frr_wrapper( const void *item, const BSTNode *n )
+{
+    const reference_region * r = ( const reference_region * )n;
+    const frrl * ctx = item;
+    return cmp_pchar_vs_len( r->name, ctx->name, ctx->len );
+}
+
+static reference_region * find_reference_region_len( BSTree * regions, const char * name, size_t len )
+{
+    frrl ctx;
+    ctx.name = name;
+    ctx.len  = len;
+    return ( reference_region * ) BSTreeFind ( regions, &ctx, reference_vs_frr_wrapper );
+}
+
+
+static int CC ref_vs_ref_wrapper( const BSTNode *item, const BSTNode *n )
+{
+   const reference_region * a = ( const reference_region * )item;
+   const reference_region * b = ( const reference_region * )n;
+   return cmp_pchar( a->name, b->name );
+}
+
+static rc_t add_refrange( BSTree * regions, const char * name, const uint64_t start, const uint64_t end )
+{
+    rc_t rc;
+
+    reference_region * r = find_reference_region( regions, name );
+    if ( r == NULL )
+    {
+        r = make_reference_region( name );
+        if ( r == NULL )
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        else
+            rc = add_ref_region_range( r, start, end );
+        if ( rc == 0 )
+            rc = BSTreeInsert ( regions, (BSTNode *)r, ref_vs_ref_wrapper );
+        if ( rc != 0 )
+            free_reference_region( r );
+    }
+    else
+    {
+        rc = add_ref_region_range( r, start, end );
+    }
+    return rc;
+}
+
+
+static rc_t parse_and_add_region( BSTree * regions, const char * s )
+{
+    rc_t rc = 0;
+    uint64_t start, end;
+    char name[ 64 ];
+    parse_definition( s, name, sizeof name, &start, &end );
+    if ( name[ 0 ] == 0 )
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    else
+    {
+        uint64_t start_0based = ( start > 0 ) ? start - 1 : 0;
+        uint64_t end_0based = ( end > 0 ) ? end - 1 : 0;
+        if ( end_0based != 0 && end_0based < start_0based )
+        {
+            uint64_t temp = end_0based;
+            end_0based = start_0based;
+            start_0based = temp;
+        }
+        rc = add_refrange( regions, name, start_0based, end_0based );
+    }
+    return rc;
+}
+
+
+static void CC check_refrange_wrapper( BSTNode *n, void *data )
+{
+    check_ref_region_ranges( ( reference_region * ) n );
+}
+
+
+static void check_ref_regions( BSTree * regions )
+{
+    BSTreeForEach ( regions, false, check_refrange_wrapper, NULL );
+}
+
+
+static void CC release_ref_region_wrapper( BSTNode *n, void * data )
+{
+    free_reference_region( ( reference_region * ) n );
+}
+
+
+static void free_ref_regions( BSTree * regions )
+{    
+    BSTreeWhack ( regions, release_ref_region_wrapper, NULL );
+}
+
+
+static void CC count_ref_region_wrapper( BSTNode *n, void *data )
+{   
+    reference_region * r = ( reference_region * ) n;
+    uint32_t * count = ( uint32_t * ) data;
+    *count += VectorLength( &(r->ranges) );
+}
+
+
+static uint32_t count_ref_regions( BSTree * regions )
+{
+    uint32_t res = 0;
+    BSTreeForEach ( regions, false, count_ref_region_wrapper, &res );
+    return res;
+}
+
+
+/* =========================================================================================== */
+
+
+static void CC foreach_reference_wrapper( BSTNode *n, void *data )
+{   
+    reference_region * r = ( reference_region * ) n;
+    foreach_reference_func * func = ( foreach_reference_func * )data;
+
+    if ( func->rc == 0 )
+        func->rc = func->on_reference( r->name, &(r->ranges), func->data );
+}
+
+
+rc_t foreach_reference( BSTree * regions,
+    rc_t ( CC * on_reference ) ( const char * name, Vector *ranges, void *data ), 
+    void *data )
+{
+    foreach_reference_func func;
+
+    func.on_reference = on_reference;
+    func.data = data;
+    func.rc = 0;
+    BSTreeForEach ( regions, false, foreach_reference_wrapper, &func );
+    return func.rc;
+}
+
+
+/* =========================================================================================== */
+
+/* s = 1000-2000 */
+static void parse_matepair_definition( const char *s, uint64_t *start, uint64_t *end )
+{
+    size_t n = string_size( s );
+    if ( n > 0 )
+    {
+        size_t i, st, dst = 0;
+        char tmp[ 32 ];
+        st = RR_START;
+        for ( i = 0; i < n; ++i )
+        {
+            char c = s[ i ];
+            switch( st )
+            {
+                case RR_START : if ( c == '-' )
+                                {
+                                    *start = finish_num( tmp, sizeof tmp, &dst );
+                                    st = RR_END;
+                                }
+                                else if ( ( c >= '0' )&&( c <= '9' ) )
+                                {
+                                    put_c( tmp, sizeof tmp, &dst, c );
+                                }
+                                break;
+
+                case RR_END   : if ( ( c >= '0' )&&( c <= '9' ) )
+                                {
+                                    put_c( tmp, sizeof tmp, &dst, c );
+                                }
+                                break;
+            }
+        }
+        switch( st )
+        {
+            case RR_START : *start = finish_num( tmp, sizeof tmp, &dst );
+                            break;
+
+            case RR_END   : *end = finish_num( tmp, sizeof tmp, &dst );
+                            break;
+        }
+    }
+}
+
+
+static rc_t parse_and_add_matepair_dist( Vector * dist_vector, const char * s )
+{
+    rc_t rc = 0;
+    uint64_t start = 0, end = 0;
+    range *r;
+
+    if ( cmp_pchar( s, "unknown" ) != 0 )
+        parse_matepair_definition( s, &start, &end );
+
+    r = make_range( start, end );
+    if ( r == NULL )
+    {
+        rc = RC( rcExe, rcNoTarg, rcValidating, rcMemory, rcExhausted );
+        (void)LOGERR( klogErr, rc, "error storing matepair-distance" );
+    }
+    else
+    {
+        rc = VectorInsert ( dist_vector, r, NULL, cmp_range_wrapper );
+        if ( rc != 0 )
+            free( r );
+    }
+    return rc;
+}
+
+
+bool filter_by_matepair_dist( const samdump_opts * opts, int32_t tlen )
+{
+    bool res = false;
+
+    uint32_t count = VectorLength( &opts->mp_dist );
+    if ( count > 0 )
+    {
+        uint32_t idx, tlen_v;
+
+        res = false;
+        if ( tlen < 0 )
+            tlen_v = -(tlen);
+        else
+            tlen_v = tlen;
+
+        for ( idx = 0; idx < count && !res; ++idx )
+        {
+            range * r = VectorGet( &opts->mp_dist, idx );
+            if ( r != NULL )
+                res = ( ( tlen_v >= r->start )&&( tlen_v <= r->end ) );
+        }
+    }
+    return res;
+}
+
+/* =========================================================================================== */
+
+
+static rc_t get_bool_option( Args * args, const char * name, bool *value )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "error reading comandline option '$(t)'", "t=%s", name ) );
+    }
+    else
+    {
+        *value = ( count > 0 );
+    }
+    return rc;
+}
+
+
+static rc_t gather_region_options( Args * args, samdump_opts * opts )
+{
+    uint32_t count;
+
+    rc_t rc = ArgsOptionCount( args, OPT_REGION, &count );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "error counting comandline option '$(t)'", "t=%s", OPT_REGION ) );
+    }
+    else if ( count > 0 )
+    {
+        uint32_t i;
+
+        BSTreeInit( &opts->regions );
+        for ( i = 0; i < count && rc == 0; ++i )
+        {
+            const char * s;
+            rc = ArgsOptionValue( args, OPT_REGION, i, &s );
+            if ( rc != 0 )
+            {
+                (void)PLOGERR( klogErr, ( klogErr, rc, "error retrieving comandline option '$(t)'", "t=%s", OPT_REGION ) );
+            }
+            else
+                rc = parse_and_add_region( &opts->regions, s );
+        }
+        if ( rc == 0 )
+        {
+            check_ref_regions( &opts->regions );
+            opts->region_count = count_ref_regions( &opts->regions );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t gather_matepair_distances( Args * args, samdump_opts * opts )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, OPT_MATE_DIST, &count );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "error counting comandline option '$(t)'", "t=%s", OPT_REGION ) );
+    }
+    else if ( count > 0 )
+    {
+        uint32_t i;
+
+        VectorInit( &opts->mp_dist, 0, 10 );
+        for ( i = 0; i < count && rc == 0; ++i )
+        {
+            const char * s;
+            rc = ArgsOptionValue( args, OPT_MATE_DIST, i, &s );
+            if ( rc != 0 )
+            {
+                (void)PLOGERR( klogErr, ( klogErr, rc, "error retrieving comandline option '$(t)'", "t=%s", OPT_MATE_DIST ) );
+            }
+            else
+                rc = parse_and_add_matepair_dist( &opts->mp_dist, s );
+        }
+        opts->use_matepair_filter = ( VectorLength( &opts->mp_dist ) > 0 );
+    }
+    return rc;
+}
+
+
+static rc_t gather_2_bool( Args * args, const char *name1, const char *name2, bool *b1, bool *b2 )
+{
+    rc_t rc = get_bool_option( args, name1, b1 );
+    if ( rc != 0 ) return rc;
+
+    rc = get_bool_option( args, name2, b2 );
+    if ( rc != 0 ) return rc;
+
+    if ( *b1 && *b2 )
+    {
+        rc = RC( rcExe, rcNoTarg, rcValidating, rcParam, rcInvalid );
+        (void)PLOGERR( klogErr, ( klogErr, rc, "the parameters '--$(p1)' and '--$(p2)' are mutually exclusive", 
+                      "p1=%s,p2=%s", name1, name2 ) );
+    }
+    return rc;
+}
+
+
+static rc_t gather_flag_options( Args * args, samdump_opts * opts )
+{
+    bool dump_prim_only;
+
+    /* do we have to dump unaligned reads too? */
+    rc_t rc = get_bool_option( args, OPT_UNALIGNED, &opts->dump_unaligned_reads );
+    if ( rc != 0 ) return rc;
+
+    /* assume we have to dump primary alignments, maybe switched off later by other option */
+    opts->dump_primary_alignments = true;
+
+    /* we are dumping secondary alignments only if the user does
+       not explicitly ask for "primary only" */
+    rc = get_bool_option( args, OPT_PRIM_ONLY, &dump_prim_only );
+    if ( rc != 0 ) return rc;
+    opts->dump_secondary_alignments = !dump_prim_only;
+
+    /* check if we are asked to be in cga-tool compatible mode */
+    rc = get_bool_option( args, OPT_CG_SAM, &opts->dump_cg_sam );
+    if ( rc != 0 ) return rc;
+
+    /* check if we have to dump "EVIDENCE_INTERVAL" against the reference */
+    rc = get_bool_option( args, OPT_CG_EVIDENCE, &opts->dump_cg_evidence );
+    if ( rc != 0 ) return rc;
+
+    /* check if we have to dump "EVIDENCE_ALIGNMENT" against "EVIDENCE_INTERVAL" */
+    rc = get_bool_option( args, OPT_CG_EV_DNB, &opts->dump_cg_ev_dnb );
+    if ( rc != 0 ) return rc;
+
+    {
+        bool dump_cg_mappings;
+
+        /* look if cg-mappings is requested */
+        rc = get_bool_option( args, OPT_CG_MAPP, &dump_cg_mappings );
+        if ( rc != 0 ) return rc;
+
+        /* do some mode logic ... */
+        if ( !dump_cg_mappings &&
+             ( opts->dump_cga_tools_mode || opts->dump_cg_evidence || opts->dump_cg_ev_dnb ) )
+        {
+            opts->dump_primary_alignments = false;
+            opts->dump_secondary_alignments = false;
+            opts->dump_unaligned_reads = false;
+        }
+        else
+        {
+            opts->dump_primary_alignments = true;
+            opts->dump_secondary_alignments = !dump_prim_only;
+            /* opts->dump_unaligned_reads = ( opts->dump_unaligned_reads && opts->region_count == 0 ); */
+        }
+    }
+
+    /* do we have to print the long-version of the cigar-string? */
+    rc = get_bool_option( args, OPT_CIGAR_LONG, &opts->use_long_cigar );
+    if ( rc != 0 ) return rc;
+
+    /* print the sequence-id instead of the sequence-name */
+    rc = get_bool_option( args, OPT_USE_SEQID, &opts->use_seqid_as_refname );
+    if ( rc != 0 ) return rc;
+
+    /* print the READ where matched bases are replaced with '=' */
+    rc = get_bool_option( args, OPT_HIDE_IDENT, &opts->print_matches_as_equal_sign );
+    if ( rc != 0 ) return rc;
+
+    {
+        bool recalc_header, dont_print_header;
+
+        /* do we have to recalculate the header instead of printing the meta-data */
+        rc = get_bool_option( args, OPT_RECAL_HDR, &recalc_header );
+        if ( rc != 0 ) return rc;
+        /* should we suppress the header completely */
+        rc = get_bool_option( args, OPT_NO_HDR, &dont_print_header );
+        if ( rc != 0 ) return rc;
+        if ( dont_print_header )
+            opts->header_mode = hm_none;
+        else if ( recalc_header )
+            opts->header_mode = hm_recalc;
+        else
+            opts->header_mode = hm_dump;
+    }
+
+    {
+        bool cigar_cg, cigar_cg_merge;
+
+        /* do we have to transform cigar into cg-style ( has B/N ) */
+        /* do we have to transform cg-data(length of read/patterns in cigar) into valid SAM (cigar/READ/QUALITY) */
+        rc = gather_2_bool( args, OPT_CIGAR_CG, OPT_CIGAR_CG, &cigar_cg, &cigar_cg_merge );
+        if ( rc != 0 ) return rc;
+        if ( cigar_cg )
+            opts->cigar_treatment = ct_cg_style;
+        if ( cigar_cg_merge )
+            opts->cigar_treatment = ct_cg_merge;
+    }
+
+    {
+        bool gzip, bzip2;
+
+        /* do we have to compress the output with gzip ? */
+        /* do we have to compress the output with bzip2 ? */
+        rc = gather_2_bool( args, OPT_GZIP, OPT_BZIP2, &gzip, &bzip2 );
+        if ( rc != 0 ) return rc;
+        if ( gzip )
+            opts->output_compression = oc_gzip;
+        if ( bzip2 )
+            opts->output_compression = oc_bzip2;
+    }
+
+
+    {
+        bool fasta, fastq;
+
+        /* output in FASTA - mode  ? */
+        /* output in FASTQ - mode  ? */
+        rc = gather_2_bool( args, OPT_FASTA, OPT_FASTQ, &fasta, &fastq );
+        if ( rc != 0 ) return rc;
+        if ( fasta )
+            opts->output_format = of_fasta;
+        if ( fastq )
+            opts->output_format = of_fastq;
+    }
+
+
+    /* do we have to reverse unaligned reads if the flag in the row says so */
+    rc = get_bool_option( args, OPT_REVERSE, &opts->reverse_unaligned_reads );
+    if ( rc != 0 ) return rc;
+
+    /* do we have to add the spotgroup to the qname-column */
+    rc = get_bool_option( args, OPT_SPOTGRP, &opts->print_spot_group_in_name );
+    if ( rc != 0 ) return rc;
+
+    /* do we have to report options instead of executing */
+    rc = get_bool_option( args, OPT_REPORT, &opts->report_options );
+    if ( rc != 0 ) return rc;
+
+    /* do we have to print the alignment id in column XI */
+    rc = get_bool_option( args, OPT_XI_DEBUG, &opts->print_alignment_id_in_column_xi );
+    if ( rc != 0 ) return rc;
+
+    /* do we have to print the alignment id in column XI */
+    rc = get_bool_option( args, OPT_CACHEREPORT, &opts->report_cache );
+    if ( rc != 0 ) return rc;
+
+    /* do we have to dump unaligned reads only */
+    rc = get_bool_option( args, OPT_UNALIGNED_ONLY, &opts->dump_unaligned_only );
+    if ( rc != 0 ) return rc;
+
+    /* do we have to print the spot-group in a special way */
+    rc = get_bool_option( args, OPT_CG_NAMES, &opts->print_cg_names );
+    if ( rc != 0 ) return rc;
+
+    /* do we use a mate-cache */
+    rc = get_bool_option( args, OPT_NO_MATE_CACHE, &opts->use_mate_cache );
+    if ( rc != 0 ) return rc;
+    opts->use_mate_cache = !opts->use_mate_cache;
+
+    /* do we use a mate-cache */
+    rc = get_bool_option( args, OPT_LEGACY, &opts->force_legacy );
+    if ( rc != 0 ) return rc;
+
+    /* do we have to merge cigar ( and read/qual ) for cg-operations in cigar */
+    rc = get_bool_option( args, OPT_CIGAR_CG_M, &opts->merge_cg_cigar );
+
+    return rc;
+}
+
+
+static rc_t get_str_option( Args * args, const char * name, const char ** s )
+{
+    uint32_t count;
+
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    *s = NULL;
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "error counting comandline option '$(t)'", "t=%s", name ) );
+    }
+    else if ( count > 0 )
+    {
+        rc = ArgsOptionValue( args, name, 0, s );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogErr, ( klogErr, rc, "error retrieving comandline option '$(t)'", "t=%s", name ) );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t get_int_option( Args * args, const char * name, uint32_t def, uint32_t * value, bool dflt_if_zero )
+{
+    const char * s;
+    rc_t rc = get_str_option( args, name, &s );
+    *value = def;
+    if ( rc == 0 && s != NULL )
+    {
+        char *endp;
+        *value = strtou32( s, &endp, 0 );
+        if ( *endp != '\0' )
+        {
+            rc = RC( rcExe, rcArgv, rcProcessing, rcParam, rcInvalid );
+            (void)PLOGERR( klogErr, ( klogErr, rc, "error converting string to integer option '$(t)'", "t=%s", name ) );
+        }
+        else if ( dflt_if_zero && *value == 0 )
+            *value = def;
+    }
+    return rc;
+}
+
+
+static rc_t get_int32_options( Args * args, const char * name, int32_t * value, bool * used )
+{
+    const char * s;
+    rc_t rc = get_str_option( args, name, &s );
+    if ( rc == 0 && s != NULL )
+    {
+        char *endp;
+        *value = strtoi32( s, &endp, 0 );
+        if ( *endp != '\0' )
+        {
+            rc = RC( rcExe, rcArgv, rcProcessing, rcParam, rcInvalid );
+            (void)PLOGERR( klogErr, ( klogErr, rc, "error converting string to integer option '$(t)'", "t=%s", name ) );
+        }
+        else
+        {
+            *used = true;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t get_int64_option( Args * args, const char * name, uint64_t def, uint64_t * value )
+{
+    const char * s;
+    rc_t rc = get_str_option( args, name, &s );
+    *value = def;
+    if ( rc == 0 && s != NULL )
+    {
+        char *endp;
+        *value = strtou32( s, &endp, 0 );
+        if ( *endp != '\0' )
+        {
+            rc = RC( rcExe, rcArgv, rcProcessing, rcParam, rcInvalid );
+            (void)PLOGERR( klogErr, ( klogErr, rc, "error converting string to integer option '$(t)'", "t=%s", name ) );
+        }
+        else if ( *value == 0 )
+            *value = def;
+    }
+    return rc;
+}
+
+
+static rc_t gather_int_options( Args * args, samdump_opts * opts )
+{
+    rc_t rc = get_int_option( args, OPT_MATE_GAP, 10000, &opts->mape_gap_cache_limit, true );
+    if ( rc == 0 )
+        rc = get_int64_option( args, OPT_TEST_ROWS, 0, &opts->test_rows );
+    if ( rc == 0 )
+        rc = get_int_option( args, OPT_OUTBUFSIZE, 1024 * 32, &opts->output_buffer_size, false );
+    if ( rc == 0 )
+    {
+        uint32_t cs;
+        rc = get_int_option( args, OPT_CURSOR_CACHE, CURSOR_CACHE_SIZE, &cs, false );
+        if ( rc == 0 )
+            opts->cursor_cache_size = ( size_t )cs;
+    }
+    if ( rc == 0 )
+    {
+        uint32_t mode;
+        rc = get_int_option( args, OPT_DUMP_MODE, 0, &mode, true );
+        if ( rc == 0 )
+        {
+            switch( mode )
+            {
+                case 0  : opts->dump_mode = dm_one_ref_at_a_time; break;
+                case 1  : opts->dump_mode = dm_prepare_all_refs; break;
+                default : opts->dump_mode = dm_one_ref_at_a_time; break;
+            }
+        }
+    }
+    if ( rc == 0 )
+    {
+        rc = get_int32_options( args, OPT_MIN_MAPQ, &opts->min_mapq, &opts->use_min_mapq );
+    }
+    return rc;
+}
+
+
+static rc_t gather_string_options( Args * args, samdump_opts * opts )
+{
+    const char * s;
+    uint32_t count;
+
+    rc_t rc = get_str_option( args, OPT_PREFIX, &s );
+    if ( rc == 0 && s != NULL )
+    {
+        opts->qname_prefix = string_dup_measure( s, NULL );
+        if ( opts->qname_prefix == NULL )
+        {
+            rc = RC( rcExe, rcNoTarg, rcValidating, rcMemory, rcExhausted );
+            (void)LOGERR( klogErr, rc, "error storing QNAME-PREFIX" );
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        rc = get_str_option( args, OPT_Q_QUANT, &s );
+        if ( rc == 0 && s != NULL )
+        {
+            opts->qual_quant = string_dup_measure( s, NULL );
+            if ( opts->qual_quant == NULL )
+            {
+                rc = RC( rcExe, rcNoTarg, rcValidating, rcMemory, rcExhausted );
+                (void)LOGERR( klogErr, rc, "error storing QUAL-QUANT" );
+            }
+            else
+            {
+                bool bres = QualityQuantizerInitMatrix( opts->qual_quant_matrix, opts->qual_quant );
+                if ( !bres )
+                {
+                    rc = RC( rcExe, rcNoTarg, rcValidating, rcParam, rcInvalid );
+                    (void)LOGERR( klogErr, rc, "error initializing quality-quantizer-matrix" );
+                }
+            }
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        rc = get_str_option( args, OPT_OUTPUTFILE, &s );
+        if ( rc == 0 && s != NULL )
+        {
+            opts->outputfile = string_dup_measure( s, NULL );
+            if ( opts->outputfile == NULL )
+            {
+                rc = RC( rcExe, rcNoTarg, rcValidating, rcMemory, rcExhausted );
+                (void)LOGERR( klogErr, rc, "error storing OUTPUTFILE" );
+            }
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        rc = ArgsOptionCount( args, OPT_HDR_COMMENT, &count );
+        if ( rc == 0 && count > 0 )
+        {
+            uint32_t i;
+            rc = VNamelistMake( &opts->hdr_comments, 10 );
+            for ( i = 0; i < count && rc == 0; ++i )
+            {
+                const char * src;
+                rc = ArgsOptionValue( args, OPT_HDR_COMMENT, i, &src );
+                if ( rc != 0 )
+                {
+                    (void)PLOGERR( klogErr, ( klogErr, rc, "error retrieving comandline option '$(t)' #$(n)", 
+                                              "t=%s,n=%u", OPT_HDR_COMMENT, i ) );
+                }
+                else
+                {
+                    rc = VNamelistAppend( opts->hdr_comments, src );
+                    if ( rc != 0 )
+                    {
+                        (void)PLOGERR( klogErr, ( klogErr, rc, "error appending hdr-comment '$(t)'", 
+                                                  "t=%s", src ) );
+                    }
+                }
+            }
+            if ( rc != 0 )
+            {
+                VNamelistRelease( opts->hdr_comments );
+                opts->hdr_comments = NULL;
+            }
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        rc = ArgsParamCount( args, &count );
+        if ( rc == 0 && count > 0 )
+        {
+            uint32_t i;
+            rc = VNamelistMake( &opts->input_files, 10 );
+            for ( i = 0; i < count && rc == 0; ++i )
+            {
+                const char * src;
+                rc = ArgsParamValue( args, i, &src );
+                if ( rc != 0 )
+                {
+                    (void)PLOGERR( klogErr, ( klogErr, rc, "error retrieving comandline param #$(n)", 
+                                              "n=%u", i ) );
+                }
+                else
+                {
+                    rc = VNamelistAppend( opts->input_files, src );
+                    if ( rc != 0 )
+                    {
+                        (void)PLOGERR( klogErr, ( klogErr, rc, "error appending input_file '$(t)'", 
+                                                  "t=%s", src ) );
+                    }
+                }
+            }
+            if ( rc != 0 )
+            {
+                VNamelistRelease( opts->input_files );
+                opts->input_files = NULL;
+            }
+        }
+        opts->input_file_count = count;
+    }
+
+    rc = get_str_option( args, OPT_CIGAR_TEST, &s );
+    if ( rc == 0 && s != NULL )
+    {
+        opts->cigar_test = string_dup_measure( s, NULL );
+        if ( opts->cigar_test == NULL )
+        {
+            rc = RC( rcExe, rcNoTarg, rcValidating, rcMemory, rcExhausted );
+            (void)LOGERR( klogErr, rc, "error storing CIGAR-TEST" );
+        }
+    }
+
+    return rc;
+}
+
+
+/*********************************************************************************************
+
+                                            fa ... fully aligned reads
+                                            ha ... half aligned reads
+                                            hu ... half unaligned reads
+                                            fu ... fully unaligned reads
+
+    regions > 0     |   dump-unaligned  |
+    ----------------------------------------------------------------------
+        no          |       no          |   fa  ha  hu
+        no          |       yes         |   fa  ha  hu  fu
+        yes         |       no          |   fa  ha
+        yes         |       yes         |   fa  ha  hu
+
+*********************************************************************************************/
+static void gather_unaligned_options( samdump_opts * opts )
+{
+    if ( opts->region_count == 0 )
+    {
+        if ( opts->dump_unaligned_only )
+        {
+            opts->print_half_unaligned_reads  = false;
+            opts->print_fully_unaligned_reads = true;
+        }
+        else
+        {
+            opts->print_half_unaligned_reads  = true;
+            opts->print_fully_unaligned_reads = opts->dump_unaligned_reads;
+        }
+    }
+    else
+    {
+        opts->print_fully_unaligned_reads = false;
+        opts->print_half_unaligned_reads  = opts->dump_unaligned_reads;
+    }
+}
+
+/* =========================================================================================== */
+
+
+static rc_t CC report_reference_cb( const char * name, Vector * ranges, void *data )
+{
+    rc_t rc = KOutMsg( "region: <%s>\n",  name );
+    if ( rc == 0 )
+    {
+        uint32_t count = VectorLength( ranges );
+        if ( count > 0 )
+        {
+            uint32_t i;
+            for ( i = VectorStart( ranges ); i < count && rc == 0; ++i )
+            {
+                range *r = VectorGet( ranges, i );
+                if ( r->end == 0 )
+                {
+                    if ( r->start == 0 )
+                        rc = KOutMsg( "\t[ start ... end ]\n" );
+                    else
+                        rc = KOutMsg( "\t[ %u ... ]\n", r->start );
+                }
+                else
+                    rc = KOutMsg( "\t[ %u ... %u ]\n", r->start, r->end );
+            }
+        }
+    }
+    return rc;
+}
+
+
+void report_options( const samdump_opts * opts )
+{
+    rc_t rc;
+    uint32_t len;
+
+    KOutMsg( "dump unaligned reads  : %s\n",  opts->dump_unaligned_reads ? "YES" : "NO" );
+    KOutMsg( "dump unaligned only   : %s\n",  opts->dump_unaligned_only ? "YES" : "NO" );
+    KOutMsg( "dump prim. alignments : %s\n",  opts->dump_primary_alignments ? "YES" : "NO" );
+    KOutMsg( "dump sec. alignments  : %s\n",  opts->dump_secondary_alignments ? "YES" : "NO" );
+    KOutMsg( "dump cga-tools-mode   : %s\n",  opts->dump_cga_tools_mode ? "YES" : "NO" );
+    KOutMsg( "dump cg-evidence      : %s\n",  opts->dump_cg_evidence ? "YES" : "NO" );
+    KOutMsg( "dump cg-ev-dnb        : %s\n",  opts->dump_cg_ev_dnb ? "YES" : "NO" );
+    KOutMsg( "dump cg-sam           : %s\n",  opts->dump_cg_sam ? "YES" : "NO" );
+    KOutMsg( "merge cg-cigar        : %s\n",  opts->merge_cg_cigar ? "YES" : "NO" );
+
+    KOutMsg( "use long cigar        : %s\n",  opts->use_long_cigar ? "YES" : "NO" );
+    KOutMsg( "print seqid           : %s\n",  opts->use_seqid_as_refname ? "YES" : "NO" );
+    KOutMsg( "print READ with '='   : %s\n",  opts->print_matches_as_equal_sign ? "YES" : "NO" );
+    KOutMsg( "reverse unaligned rd  : %s\n",  opts->reverse_unaligned_reads ? "YES" : "NO" );
+    KOutMsg( "add spotgrp to qname  : %s\n",  opts->print_spot_group_in_name ? "YES" : "NO" );
+    KOutMsg( "print id in col. XI   : %s\n",  opts->print_alignment_id_in_column_xi ? "YES" : "NO" );
+    KOutMsg( "report matecache      : %s\n",  opts->report_cache ? "YES" : "NO" );
+    KOutMsg( "print cg-names        : %s\n",  opts->print_cg_names ? "YES" : "NO" );
+
+    switch( opts->header_mode )
+    {
+        case hm_none   : KOutMsg( "header-mode           : dont print\n" ); break;
+        case hm_recalc : KOutMsg( "header-mode           : recalculate\n" ); break;
+        case hm_dump   : KOutMsg( "header-mode           : print meta-data\n" ); break;
+        default        : KOutMsg( "header-mode           : unknown\n" ); break;
+    }
+
+    switch( opts->cigar_treatment )
+    {
+        case ct_unchanged : KOutMsg( "cigar-treatment       : unchanged\n" ); break;
+        case ct_cg_style  : KOutMsg( "cigar-treatment       : transform cg to 'cg-style\n" ); break;
+        case ct_cg_merge  : KOutMsg( "cigar-treatment       : transform cg to valid SAM\n" ); break;
+        default           : KOutMsg( "cigar-treatment       : unknow'\n" ); break;
+    }
+
+    switch( opts->output_compression )
+    {
+        case oc_none  : KOutMsg( "output-compression    : none\n" ); break;
+        case oc_gzip  : KOutMsg( "output-compression    : gzip\n" ); break;
+        case oc_bzip2 : KOutMsg( "output-compression    : bzip2\n" ); break;
+        default       : KOutMsg( "output-compression    : unknown\n" ); break;
+    }
+
+    switch( opts->output_format )
+    {
+        case of_sam   : KOutMsg( "output-format         : SAM\n" ); break;
+        case of_fasta : KOutMsg( "output-format         : FASTA\n" ); break;
+        case of_fastq : KOutMsg( "output-format         : FASTQ\n" ); break;
+        default       : KOutMsg( "output-format         : unknown\n" ); break;
+    }
+
+    switch( opts->dump_mode )
+    {
+        case dm_one_ref_at_a_time : KOutMsg( "dump-mode             : one ref at a time\n" ); break;
+        case dm_prepare_all_refs  : KOutMsg( "dump-mode             : prepare all refs\n" ); break;
+        default                   : KOutMsg( "dump-mode             : unknown\n" ); break;
+    }
+
+    KOutMsg( "number of regions     : %u\n",  opts->region_count );
+    if ( opts->region_count > 0 )
+        foreach_reference( (BSTree *)&opts->regions, report_reference_cb, NULL );
+
+    if ( opts->qname_prefix == NULL )
+        KOutMsg( "qname-prefix          : NONE\n" );
+    else
+        KOutMsg( "qname-prefix          : '%s'\n",  opts->qname_prefix );
+
+    if ( opts->qual_quant == NULL )
+        KOutMsg( "quality-quantization  : NONE\n" );
+    else
+        KOutMsg( "quality-quantization  : '%s'\n",  opts->qual_quant );
+
+    if ( opts->hdr_comments != NULL )
+    {
+        rc = VNameListCount( opts->hdr_comments, &len );
+        if ( rc == 0 && len > 0 )
+        {
+            uint32_t i;
+
+            KOutMsg( "header-comments-count : %u\n",  len );
+            for ( i = 0; i < len; ++i )
+            {
+                const char * s;
+                rc = VNameListGet( opts->hdr_comments, i, &s );
+                if ( rc == 0 && s != NULL )
+                    KOutMsg( "header-comment[ %u ]  : '%s'\n",  i, s );
+            }
+        }
+    }
+
+    if ( opts->input_files != NULL )
+    {
+        rc = VNameListCount( opts->input_files, &len );
+        if ( rc == 0 && len > 0 )
+        {
+            uint32_t i;
+
+            KOutMsg( "input-file-count      : %u\n",  len );
+            for ( i = 0; i < len; ++i )
+            {
+                const char * s;
+                rc = VNameListGet( opts->input_files, i, &s );
+                if ( rc == 0 && s != NULL )
+                    KOutMsg( "input-file[ %u ]      : '%s'\n",  i, s );
+            }
+        }
+    }
+
+    len = VectorLength( &opts->mp_dist );
+    if ( len > 0 )
+    {
+        uint32_t i;
+
+        KOutMsg( "matepair-dist-filters : %u\n",  len );
+        for ( i = 0; i < len; ++i )
+        {
+            range *r = VectorGet( &opts->mp_dist, i );
+            if ( r != NULL )
+                KOutMsg( "matepair-dist[ %u ]   : '%u ... %u'\n",  i, r->start, r->end );
+        }
+    }
+
+    KOutMsg( "mate-gap-cache-limit  : %u\n",  opts->mape_gap_cache_limit );
+    KOutMsg( "test-row limit        : %u\n",  opts->test_rows );
+    KOutMsg( "outputfile            : %s\n",  opts->outputfile );
+    KOutMsg( "outputbuffer-size     : %u\n",  opts->output_buffer_size );
+    KOutMsg( "cursor-cache-size     : %u\n",  opts->cursor_cache_size );
+
+    KOutMsg( "use mate-cache        : %s\n",  opts->use_mate_cache ? "YES" : "NO" );
+    KOutMsg( "force legacy code     : %s\n",  opts->force_legacy ? "YES" : "NO" );
+    KOutMsg( "use min-mapq          : %s\n",  opts->use_min_mapq ? "YES" : "NO" );
+    KOutMsg( "min-mapq              : %i\n",  opts->min_mapq );
+}
+
+
+/* =========================================================================================== */
+
+
+void release_options( samdump_opts * opts )
+{
+    free_ref_regions( &opts->regions );
+    if ( opts->qname_prefix != NULL )
+        free( (void*)opts->qname_prefix );
+    if ( opts->qual_quant != NULL )
+        free( (void*)opts->qual_quant );
+    if( opts->outputfile != NULL )
+        free( (void*)opts->outputfile );
+    VNamelistRelease( opts->hdr_comments );
+    VNamelistRelease( opts->input_files );
+    VectorWhack ( &opts->mp_dist, release_range_wrapper, NULL );
+}
+
+/* =========================================================================================== */
+
+
+rc_t gather_options( Args * args, samdump_opts * opts )
+{
+    rc_t rc = gather_region_options( args, opts );
+    if ( rc == 0 )
+        rc = gather_flag_options( args, opts );
+    if ( rc == 0 )
+        rc = gather_string_options( args, opts );
+    if ( rc == 0 )
+        rc = gather_int_options( args, opts );
+    if ( rc == 0 )
+        rc = gather_matepair_distances( args, opts );
+    if ( rc == 0 )
+        gather_unaligned_options( opts );
+    return rc;
+}
+
+
+bool is_this_alignment_requested( const samdump_opts * opts, const char *refname, uint32_t refname_len,
+                                  uint64_t start, uint64_t end )
+{
+    bool res = false;
+    if ( opts != NULL )
+    {
+        reference_region *rr = find_reference_region_len( ( BSTree * )&opts->regions, refname, refname_len );
+        if ( rr != NULL )
+        {
+            Vector *v = &(rr->ranges);
+            uint32_t i, count = VectorLength( v );
+            for ( i = 0; i < count && !res; ++i )
+            {
+                range * r = VectorGet ( v, i );
+                if ( r != NULL )
+                {
+                    res = ( ( end >= r->start )&&( start <= r->end ) );
+                }
+            }
+        }
+    }
+    return res;
+}
+
+
+bool test_limit_reached( const samdump_opts * opts, uint64_t rows_so_far )
+{
+    bool res = false;
+    if ( opts->test_rows > 0 )
+        res = ( rows_so_far >= opts->test_rows );
+    return res;
+}
+
+
+rc_t dump_name( const samdump_opts * opts, int64_t seq_spot_id,
+                const char * spot_group, uint32_t spot_group_len )
+{
+    rc_t rc;
+
+    if ( opts->print_cg_names )
+    {
+        if ( spot_group != NULL && spot_group_len != 0 )
+            rc = KOutMsg( "%.*s_1:%d", spot_group_len, spot_group, seq_spot_id );
+        else
+            rc = KOutMsg( "%d", seq_spot_id );
+    }
+    else
+    {
+        if ( opts->qname_prefix != NULL )
+        {
+            /* we do have to print a prefix */
+            if ( opts->print_spot_group_in_name && spot_group != NULL && spot_group_len > 0 )
+                rc = KOutMsg( "%s.%d.%.*s", opts->qname_prefix, seq_spot_id, spot_group_len, spot_group );
+            else
+            /* we do NOT have to append the spot-group */
+                rc = KOutMsg( "%s.%d", opts->qname_prefix, seq_spot_id );
+        }
+        else
+        {
+            /* we do NOT have to print a prefix */
+            if ( opts->print_spot_group_in_name && spot_group != NULL && spot_group_len > 0 )
+                rc = KOutMsg( "%d.%.*s", seq_spot_id, spot_group_len, spot_group );
+            else
+            /* we do NOT have to append the spot-group */
+                rc = KOutMsg( "%d", seq_spot_id );
+        }
+    }
+    return rc;
+}
+
+
+rc_t dump_name_legacy( const samdump_opts * opts, const char * name, size_t name_len,
+                       const char * spot_group, uint32_t spot_group_len )
+{
+    rc_t rc;
+
+    if ( opts->qname_prefix != NULL )
+    {
+        /* we do have to print a prefix */
+        if ( opts->print_spot_group_in_name && spot_group != NULL && spot_group_len > 0 )
+            rc = KOutMsg( "%s.%.*s%.*s", opts->qname_prefix, name_len, name, spot_group_len, spot_group );
+        else
+        /* we do NOT have to append the spot-group */
+            rc = KOutMsg( "%s.%.*s", opts->qname_prefix, name_len, name );
+    }
+    else
+    {
+        /* we do NOT have to print a prefix */
+        if ( opts->print_spot_group_in_name && spot_group != NULL && spot_group_len > 0 )
+            rc = KOutMsg( "%.*s.%.*s", name_len, name, spot_group_len, spot_group );
+        else
+        /* we do NOT have to append the spot-group */
+            rc = KOutMsg( "%.*s", name_len, name );
+    }
+    return rc;
+}
+
+
+rc_t dump_quality( const samdump_opts * opts, char const *quality, uint32_t qual_len, bool reverse )
+{
+    rc_t rc = 0;
+    bool quantize = ( opts->qual_quant != NULL );
+    uint32_t i;
+    if ( reverse )
+    {
+        if ( quantize )
+        {
+            for ( i = 0; i < qual_len && rc == 0; ++i )
+            {
+                uint32_t qual = quality[ qual_len - i - 1 ];
+                char newValue = ( opts->qual_quant_matrix[ qual ] + 33 );
+                rc = KOutMsg( "%c", newValue );
+            }
+        }
+        else
+        {
+            for ( i = 0; i < qual_len && rc == 0; ++i )
+            {
+                char qual = quality[ qual_len - i - 1 ] + 33;
+                rc = KOutMsg( "%c", qual );
+            }
+        }
+    }
+    else
+    {
+        if ( quantize )
+        {
+            for ( i = 0; i < qual_len && rc == 0; ++i )
+            {
+                uint32_t qual = quality[ i ];
+                char newValue = opts->qual_quant_matrix[ qual ] + 33;
+                rc = KOutMsg( "%c", newValue );
+            }
+
+        }
+        else
+        {
+            for ( i = 0; i < qual_len && rc == 0; ++i )
+            {
+                char qual = quality[ i ] + 33;
+                rc = KOutMsg( "%c", qual );
+            }
+        }
+    }
+    return rc;
+}
+
+
+rc_t dump_quality_33( const samdump_opts * opts, char const *quality, uint32_t qual_len, bool reverse )
+{
+    rc_t rc = 0;
+    bool quantize = ( opts->qual_quant != NULL );
+    uint32_t i;
+    if ( reverse )
+    {
+        if ( quantize )
+        {
+            for ( i = 0; i < qual_len && rc == 0; ++i )
+            {
+                uint32_t qual = quality[ qual_len - i - 1 ] - 33;
+                char newValue = ( opts->qual_quant_matrix[ qual ] + 33 );
+                rc = KOutMsg( "%c", newValue );
+            }
+        }
+        else
+        {
+            for ( i = 0; i < qual_len && rc == 0; ++i )
+            {
+                char qual = quality[ qual_len - i - 1 ];
+                rc = KOutMsg( "%c", qual );
+            }
+        }
+    }
+    else
+    {
+        if ( quantize )
+        {
+            for ( i = 0; i < qual_len && rc == 0; ++i )
+            {
+                uint32_t qual = quality[ i ] - 33;
+                char newValue = opts->qual_quant_matrix[ qual ] + 33;
+                rc = KOutMsg( "%c", newValue );
+            }
+
+        }
+        else
+        {
+            rc = KOutMsg( "%.*s", qual_len, quality );
+        }
+    }
+    return rc;
+}
+
+
diff --git a/tools/sra-pileup/sam-dump-opts.h b/tools/sra-pileup/sam-dump-opts.h
new file mode 100644
index 0000000..acd933c
--- /dev/null
+++ b/tools/sra-pileup/sam-dump-opts.h
@@ -0,0 +1,277 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_sam_dump_opts_
+#define _h_sam_dump_opts_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include <klib/container.h>
+#include <klib/vector.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/namelist.h>
+
+#include <kapp/args.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <strtol.h>
+
+
+#define OPT_UNALIGNED   "unaligned"
+#define OPT_PRIM_ONLY   "primary"
+#define OPT_CIGAR_LONG  "cigar-long"
+#define OPT_CG_SAM      "CG-SAM"
+#define OPT_CG_EVIDENCE "CG-evidence"
+#define OPT_CG_EV_DNB   "CG-ev-dnb"
+#define OPT_CG_MAPP     "CG-mappings"
+#define OPT_REGION      "aligned-region"
+#define OPT_RECAL_HDR   "header"
+#define OPT_NO_HDR      "no-header"
+#define OPT_USE_SEQID   "seqid"
+#define OPT_HIDE_IDENT  "hide-identical"
+#define OPT_CIGAR_CG    "cigar-CG"
+#define OPT_CIGAR_CG_M  "cigar-CG-merge"
+#define OPT_PREFIX      "prefix"
+#define OPT_REVERSE     "reverse"
+#define OPT_SPOTGRP     "spot-group"
+#define OPT_MATE_GAP    "mate-cache-row-gap"
+#define OPT_TEST_ROWS   "test-rows"
+#define OPT_XI_DEBUG    "XI"
+#define OPT_Q_QUANT     "qual-quant"
+#define OPT_GZIP        "gzip"
+#define OPT_BZIP2       "bzip2"
+#define OPT_FASTQ       "fastq"
+#define OPT_FASTA       "fasta"
+#define OPT_HDR_COMMENT "header-comment"
+#define OPT_MATE_DIST   "matepair-distance"
+#define OPT_OUTPUTFILE  "output-file"
+#define OPT_OUTBUFSIZE  "output-buffer-size"
+#define OPT_REPORT      "report"
+#define OPT_CACHEREPORT "cachereport"
+#define OPT_UNALIGNED_ONLY "unaligned-spots-only"
+#define OPT_CG_NAMES    "CG-names"
+#define OPT_CIGAR_TEST  "cigar-test"
+#define OPT_CURSOR_CACHE "cursor-cache"
+#define OPT_DUMP_MODE   "dump-mode"
+#define OPT_MIN_MAPQ    "min-mapq"
+#define OPT_NO_MATE_CACHE "no-mate-cache"
+#define OPT_LEGACY      "legacy"
+
+typedef struct range
+{
+    uint64_t start;
+    uint64_t end;
+} range;
+
+
+typedef struct reference_region
+{
+    BSTNode node;
+    const char * name;      /* the name of the reference */
+    Vector ranges;          /* what regions on this reference */
+} reference_region;
+
+
+enum header_mode
+{
+    hm_none = 0,    /* do not dump the headers at all */
+    hm_recalc,      /* recalculate the headers */
+    hm_dump         /* dump the header found in metadata */
+};
+
+enum output_format
+{
+    of_sam = 0,     /* use sam-tools format */
+    of_fasta,       /* use fasta-format */
+    of_fastq        /* use fastq-format */
+};
+
+enum output_compression
+{
+    oc_none = 0,    /* do not compress output */
+    oc_gzip,        /* compress output with gzip */
+    oc_bzip2        /* compress output with bzip2 */
+};
+
+enum cigar_treatment
+{
+    ct_unchanged = 0,   /* use the cigar-string as it is stored */
+    ct_cg_style,        /* transform cigar into cg-style ( has B/N ) */
+    ct_cg_merge         /* transform cg-data(length of read/patterns in cigar) into valid SAM (cigar/READ/QUALITY) */
+};
+
+
+enum dump_mode
+{
+    /* in case of: aligned reads requested + no regions given */
+    dm_one_ref_at_a_time = 0,   /* create a set-iter each for every reference sequentially, put only one reference into it */
+    dm_prepare_all_refs         /* create only ONE set-iter, put ALL references into it */
+};
+
+
+typedef struct samdump_opts
+{
+    /* tree with regions, each node has a sorted vector of ranges, can be empty ... */
+    BSTree regions;     /* contains reference_region structs */
+
+    /* vector with header-comments, can be empty... */
+    VNamelist * hdr_comments;
+
+    /* vector input files/accessions/url's */
+    VNamelist * input_files;
+
+    /* vector with metapair-distances... */
+    Vector mp_dist;
+
+    /* prepend qname with this prefix */
+    const char * qname_prefix;
+
+    /* the quality quantization string */
+    const char * qual_quant;
+
+    /* optional outputfile */
+    const char * outputfile;
+
+    /* cigar-test >>> not advertized! */
+    const char * cigar_test;
+
+    uint32_t region_count;
+    uint32_t input_file_count;
+
+    int32_t min_mapq;
+
+    /* how much buffering on the output-buffer, of OFF if zero */
+    uint32_t output_buffer_size;
+
+    /* mate's farther apart than this are not cached */
+    uint32_t mape_gap_cache_limit;
+
+    /* limit the output of each table to max. this number of rows, if set to a vaue greater than zero */
+    uint64_t test_rows;
+    uint64_t rows_so_far;
+
+    size_t cursor_cache_size;
+
+    /* how the sam-headers are treated */
+    enum header_mode header_mode;
+
+    /* how the cigar-string is treated */
+    enum cigar_treatment cigar_treatment;
+
+    /* in which format should the output be created */
+    enum output_format output_format;
+
+    /* should the output be compressed / in which format */
+    enum output_compression output_compression;
+
+    /* how to process in case of: aligned reads requested + no regions given */
+    enum dump_mode dump_mode;
+
+    /* use a mate-cache to dump aligned and half-aligned reads */
+    bool use_mate_cache;
+    bool force_legacy;
+
+    /* which tables have to be processed/dumped */
+    bool dump_primary_alignments;
+    bool dump_secondary_alignments;
+    bool dump_cg_evidence;
+    bool dump_cg_sam;
+    bool dump_cg_ev_dnb;
+    bool merge_cg_cigar;
+
+    bool dump_unaligned_reads;
+    bool dump_unaligned_only;
+    bool dump_cga_tools_mode;
+
+    /* what alignment/unaligned reads should be dumped */
+    bool print_half_unaligned_reads;
+    bool print_fully_unaligned_reads;
+
+    /* flag that shows if we need to filter by matepair-distance */
+    bool use_matepair_filter;
+    bool use_min_mapq;
+
+    /* options changing the output-format */
+    bool use_seqid_as_refname;
+    bool use_long_cigar;
+    bool print_matches_as_equal_sign;
+    bool print_spot_group_in_name;
+    bool reverse_unaligned_reads;
+    bool print_alignment_id_in_column_xi;
+    bool report_options;
+    bool report_cache;
+    bool print_cg_names;
+
+    uint8_t qual_quant_matrix[ 256 ];
+} samdump_opts;
+
+
+typedef struct foreach_reference_func
+{
+    rc_t ( CC * on_reference ) ( const char * name, Vector *ranges, void *data );
+    const char * name;
+    void * data;
+    rc_t rc;
+} foreach_reference_func;
+
+
+rc_t foreach_reference( BSTree * regions,
+    rc_t ( CC * on_reference ) ( const char * name, Vector *ranges, void *data ), 
+    void *data );
+
+
+rc_t gather_options( Args * args, samdump_opts * opts );
+void report_options( const samdump_opts * opts );
+void release_options( samdump_opts * opts );
+
+bool filter_by_matepair_dist( const samdump_opts * opts, int32_t tlen );
+
+bool is_this_alignment_requested( const samdump_opts * opts, const char *refname, uint32_t refname_len,
+                                  uint64_t start, uint64_t len );
+
+bool test_limit_reached( const samdump_opts * opts, uint64_t rows_so_far );
+
+rc_t dump_name( const samdump_opts * opts, int64_t seq_spot_id,
+                const char * spot_group, uint32_t spot_group_len );
+rc_t dump_name_legacy( const samdump_opts * opts, const char * name, size_t name_len,
+                       const char * spot_group, uint32_t spot_group_len );
+
+rc_t dump_quality( const samdump_opts * opts, char const *quality, uint32_t qual_len, bool reverse );
+
+rc_t dump_quality_33( const samdump_opts * opts, char const *quality, uint32_t qual_len, bool reverse );
+
+#endif
diff --git a/tools/sra-pileup/sam-dump.c b/tools/sra-pileup/sam-dump.c
new file mode 100644
index 0000000..4532c97
--- /dev/null
+++ b/tools/sra-pileup/sam-dump.c
@@ -0,0 +1,4917 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include <klib/report.h>
+#include <klib/container.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/text.h>
+#include <klib/status.h>
+#include <klib/rc.h>
+#include <klib/vector.h>
+#include <klib/printf.h>
+#include <klib/data-buffer.h>
+#include <vfs/path.h>
+#include <vfs/path-priv.h>
+#include <kfs/file.h>
+#include <kfs/buffile.h>
+#include <kfs/gzip.h>
+#include <kfs/bzip.h>
+#include <kdb/meta.h>
+#include <kdb/namelist.h>
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <insdc/insdc.h>
+#include <insdc/sra.h>
+#include <vdb/report.h>
+#include <vdb/manager.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+#include <vdb/schema.h>
+#include <vdb/dependencies.h>
+#include <sra/sraschema.h>
+#include <sra/srapath.h>
+#include <align/dna-reverse-cmpl.h>
+#include <align/iterator.h>
+#include <align/reference.h>
+#include <align/quality-quantizer.h>
+
+#include <kfs/directory.h>
+#include <os-native.h>
+#include <sysalloc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <limits.h>
+#include <string.h>
+#include <strtol.h>
+#include <ctype.h>
+#include <assert.h>
+
+#include "debug.h"
+/* #include "sam-dump.vers.h" */
+
+#if _ARCH_BITS == 64
+#define USE_MATE_CACHE 1
+#define CURSOR_CACHE (4 * 1024 * 1024 * 1024UL)
+#else
+#define USE_MATE_CACHE 0
+#define CURSOR_CACHE (256 * 1024 * 1024)
+#endif
+
+
+
+typedef struct TAlignedRegion_struct
+{
+    char name[1024];
+    struct {
+        INSDC_coord_zero from;
+        INSDC_coord_zero to;
+    } r[10240];
+    int rq;
+    INSDC_coord_zero max_to;
+    INSDC_coord_zero min_from;
+    int printed;
+} TAlignedRegion;
+
+
+typedef struct TMatepairDistance_struct
+{
+    uint32_t from;
+    uint32_t to;
+} TMatepairDistance;
+
+
+struct params_s
+{
+    /* which outputs are on */
+    bool primaries;
+    bool secondaries;
+    bool unaligned;
+    bool cg_evidence;
+    bool cg_ev_dnb;
+    bool cg_sam;
+    
+    bool use_seqid;
+    bool long_cigar;
+    bool reheader;
+    bool noheader;
+    bool hide_identical;
+    bool fasta;
+    bool fastq;
+    bool spot_group_in_name;
+    bool cg_friendly_names;
+    bool reverse_unaligned;
+    bool unaligned_spots;
+    
+    bool output_gzip;
+    bool output_bz2;
+    
+    bool xi;
+    int cg_style; /* 0: raw; 1: with B's; 2: without B's, fixed up SEQ/QUAL; */
+    char const *name_prefix;
+    /* region filter data */
+    TAlignedRegion* region;
+    uint32_t region_qty;
+    /* distance filter data */
+    bool mp_dist_unknown;
+    TMatepairDistance* mp_dist;
+    uint32_t mp_dist_qty;
+    uint32_t test_rows;
+
+    /* mate info cache */
+    int64_t mate_row_gap_cachable;
+    
+    char const **comments;
+    
+    bool quantizeQual;
+    uint8_t qualQuant[256];
+    uint8_t qualQuantSingle; /*** the quality is quantized - single value, no need to retrieve **/
+};
+
+
+struct params_s const *param;
+ReferenceList const *gRefList;
+
+
+typedef union UData_union
+{
+    void const *v;
+    uint32_t const *u32;
+    int32_t const *i32;
+    int64_t const *i64;
+    uint64_t const *u64;
+    uint8_t const *u8;
+    char const *str;
+    bool const *tf;
+    INSDC_coord_one* coord1;
+    INSDC_coord_zero* coord0;
+    INSDC_coord_len* coord_len;
+    INSDC_coord_val* coord_val;
+    INSDC_SRA_xread_type* read_type;
+    INSDC_SRA_read_filter* read_filter;
+} UData;
+
+
+typedef struct SCol_struct
+{
+    char const *name;
+    uint32_t idx;
+    UData base;
+    uint32_t len;
+    bool optional;
+} SCol;
+
+
+typedef struct STable_struct
+{
+    char const *name;
+    VTable const *vtbl;
+} STable;
+
+
+typedef struct SCursCache_struct
+{
+    KVector* cache;
+    KVector* cache_unaligned_mate; /* keeps unaligned-mate for a half-aligned spots */
+    uint32_t sam_flags;
+    INSDC_coord_zero pnext;
+    int32_t tlen;
+    ReferenceObj const *ref;
+    /* cache stats */
+    uint64_t projected;
+    uint64_t added;
+    uint64_t hit;
+    uint64_t bad;
+} SCursCache;
+
+
+typedef struct SCurs_struct
+{
+    STable const *tbl;
+    VCursor const *vcurs;
+    SCursCache* cache;
+    SCursCache cache_local;
+    uint64_t col_reads_qty;
+} SCurs;
+
+enum eDSTableType
+{
+    edstt_NotSpecified,
+    edstt_Reference,
+    edstt_Sequence,
+    edstt_PrimaryAlignment,
+    edstt_SecondaryAlignment,
+    edstt_EvidenceAlignment,
+    edstt_EvidenceInterval
+};
+
+
+typedef struct DataSource_s {
+    STable tbl;
+    SCurs curs;
+    SCol *cols;
+    enum eDSTableType type;
+} DataSource;
+
+
+#define DATASOURCE_INIT(O, NAME) do { memset(&O, 0, sizeof(O)); O.tbl.name = NAME; O.curs.tbl = &O.tbl; } while(0)
+
+
+typedef struct SAM_dump_ctx_s
+{
+    VDatabase const *db;
+    char const *fullPath;
+    char const *accession;
+    char const *readGroup;
+    
+    DataSource ref;
+    DataSource pri;
+    DataSource sec;
+    DataSource evi;
+    DataSource eva;
+    DataSource seq;
+} SAM_dump_ctx_t;
+
+
+enum ealg_col
+{
+    alg_SEQ_SPOT_ID = 0,
+    alg_SEQ_NAME,
+    alg_MAPQ,
+    alg_CIGAR,
+    alg_READ,
+    alg_READ_START,
+    alg_READ_LEN,
+    alg_CIGAR_LEN,
+    alg_SAM_QUALITY,
+    alg_SPOT_GROUP,
+    alg_SEQ_SPOT_GROUP,
+    alg_SEQ_READ_ID,
+    alg_REVERSED,
+    alg_ALIGNMENT_COUNT,
+    alg_EDIT_DISTANCE,
+    alg_READ_FILTER,
+    alg_MATE_ALIGN_ID,
+    alg_MATE_REF_NAME,
+    alg_SAM_FLAGS,
+    alg_REF_START,
+    alg_MATE_REF_POS,
+    alg_ALIGN_GROUP,
+    alg_EVIDENCE_ALIGNMENT_IDS,
+    alg_REF_PLOIDY,
+    alg_REF_ID,
+    alg_MATE_REF_ID,
+    alg_HAS_MISMATCH,
+    alg_REGION_FILTER,
+    alg_REF_NAME = alg_REGION_FILTER,
+    alg_REF_SEQ_ID,
+    alg_REF_POS,
+    alg_REF_LEN,
+    alg_DISTANCE_FILTER,
+    alg_TEMPLATE_LEN = alg_DISTANCE_FILTER,
+    alg_CG_TAGS_STR
+};
+
+
+SCol const g_alg_col_tmpl[] =
+{
+    { "SEQ_SPOT_ID", 0, {NULL}, 0, true },
+    { "SEQ_NAME", 0, {NULL}, 0, false },
+    { "MAPQ", 0, {NULL}, 0, false },
+    { "?CIGAR column name?", 0, {NULL}, 0, false },
+    { "?READ column name?", 0, {NULL}, 0, false },
+    { "READ_START", 0, {NULL}, 0, false }, /* READ_START */
+    { "READ_LEN", 0, {NULL}, 0, false }, /* READ_LEN */
+    { "?CIGAR_LEN column name?", 0, {NULL}, 0, true }, /* CIGAR_LEN */
+    { "SAM_QUALITY", 0, {NULL}, 0, false },
+    { "SPOT_GROUP", 0, {NULL}, 0, true },
+    { "SEQ_SPOT_GROUP", 0, {NULL}, 0, true },
+    { "SEQ_READ_ID", 0, {NULL}, 0, true },
+    { "REF_ORIENTATION", 0, {NULL}, 0, true },
+    { "ALIGNMENT_COUNT", 0, {NULL}, 0, true },
+    { "EDIT_DISTANCE", 0, {NULL}, 0, false },
+    { "", 0, {NULL}, 0, false },
+    /* start cols used as standalone in DumpUnaligned */
+    /* MATE_ALIGN_ID col must preceeed
+       MATE_REF_NAME, MATE_REF_POS, SAM_FLAGS, TEMPLATE_LEN for cache to work */
+    { "MATE_ALIGN_ID", 0, {NULL}, 0, false },
+    { "?MATE_REF_NAME column name?", 0, {NULL}, 0, false },
+    { "SAM_FLAGS", 0, {NULL}, 0, false },
+    { "REF_START", 0, {NULL}, 0, false },  /* priming cursor cache */
+    { "MATE_REF_POS", 0, {NULL}, 0, false },
+    { "ALIGN_GROUP", 0, {NULL}, 0, true },
+    { "", 0, {NULL}, 0, true }, /* EVIDENCE_ALIGNMENT_IDS */
+    { "", 0, {NULL}, 0, true }, /* REF_PLOIDY */
+    { "REF_ID", 0, {NULL}, 0, true }, /* REF_ID */
+    { "MATE_REF_ID", 0, {NULL}, 0, true }, /* priming cursor cache */
+    { "(bool)HAS_MISMATCH", 0, {NULL}, 0, true },
+    /* these are read before any other for filtering so they must be last */
+    { "REF_NAME", 0, {NULL}, 0, false },
+    { "REF_SEQ_ID", 0, {NULL}, 0, false },
+    { "REF_POS", 0, {NULL}, 0, false },
+    /* end cols used as standalone in DumpUnaligned */
+    { "REF_LEN", 0, {NULL}, 0, false },
+    { "TEMPLATE_LEN", 0, {NULL}, 0, false },
+    { NULL, 0, {NULL}, 0, false }, /* alg_CG_TAGS_STR */
+    { NULL, 0, {NULL}, 0, false }
+};
+
+enum eseq_col
+{
+    seq_READ = 0,
+    seq_QUALITY,
+    seq_SPOT_GROUP,
+    seq_READ_START,
+    seq_READ_LEN,
+    seq_READ_TYPE,
+    seq_READ_FILTER,
+    seq_NAME,
+    seq_PRIMARY_ALIGNMENT_ID
+};
+
+static 
+SCol const gSeqCol[] =
+{
+    { "READ", 0, {NULL}, 0, false },
+    { "(INSDC:quality:text:phred_33)QUALITY", 0, {NULL}, 0, false },
+    { "SPOT_GROUP", 0, {NULL}, 0, true },
+    { "READ_START", 0, {NULL}, 0, true },
+    { "READ_LEN", 0, {NULL}, 0, true },
+    { "READ_TYPE", 0, {NULL}, 0, true },
+    { "READ_FILTER", 0, {NULL}, 0, true },
+    { "NAME", 0, {NULL}, 0, true },
+    /* must be last in list to avoid reading all columns */
+    { "PRIMARY_ALIGNMENT_ID", 0, {NULL}, 0, true },
+    { NULL, 0, {NULL}, 0, false }
+};
+
+
+static rc_t RefSeqPrint( void )
+{
+    rc_t rc = 0;
+    uint32_t i, count = 0;
+    
+    rc = ReferenceList_Count( gRefList, &count );
+    for( i = 0; rc == 0 && i < count; i++ )
+    {
+        ReferenceObj const *obj;
+        rc = ReferenceList_Get( gRefList, &obj, i );
+        if ( rc == 0 )
+        {
+            char const *seqid = NULL;
+            rc = ReferenceObj_SeqId( obj, &seqid );
+            if ( rc == 0 )
+            {
+                char const *name = NULL;
+                rc = ReferenceObj_Name( obj, &name );
+                if ( rc == 0 )
+                {
+                    INSDC_coord_len len;
+                    rc = ReferenceObj_SeqLength( obj, &len );
+                    if ( rc == 0 )
+                    {
+                        char const *nm;
+                        if ( param->use_seqid && seqid != NULL && seqid[ 0 ] != '\0' )
+                        {
+                            nm = seqid;
+                        }
+                        else
+                        {
+                            nm = name;
+                        }
+                        KOutMsg( "@SQ\tSN:%s", nm );
+                        if ( nm != seqid && seqid != NULL && seqid[ 0 ] != '\0' && strcmp( nm, seqid ) != 0)
+                        {
+                            KOutMsg( "\tAS:%s", seqid );
+                        }
+                        KOutMsg( "\tLN:%u\n", len );
+                    }
+                }
+            }
+            ReferenceObj_Release( obj );
+        }
+    }
+    return rc;
+}
+
+
+#if USE_MATE_CACHE
+static rc_t Cache_Init( SCursCache* c )
+{
+    if ( c != NULL )
+    {
+	rc_t rc;
+        memset( c, 0, sizeof( *c ) );
+        rc=KVectorMake( &c->cache );
+	if(rc == 0){
+		rc=KVectorMake( &c->cache_unaligned_mate );
+	}
+    }
+    return 0;
+}
+
+
+static void Cache_Close( char const *name, SCursCache* c )
+{
+    if ( c != NULL )
+    {
+        KVectorRelease( c->cache );
+        KVectorRelease( c->cache_unaligned_mate );
+        if ( c->added > 0 )
+        {
+            SAM_DUMP_DBG( 2, ( "%s cache stats: projected %lu added of those %lu; "
+                               "hits %lu of those broken %lu;\n",
+                               name, c->projected, c->added, c->hit, c->bad ) );
+        }
+    }
+    memset( c, 0, sizeof( *c ) );
+}
+
+
+static rc_t Cache_Add( uint64_t key, SCurs const *curs, SCol const *cols )
+{
+    /* compact values for mate record to cache as:
+        pos_delta - 32bit, ref_proj - 11bit, flags - 11bit, rnext_idx - 10bit = 64bit
+    */
+    rc_t rc = 0;
+    ReferenceObj const *r = NULL;
+    uint32_t rid = 0;
+    uint64_t val = 0;
+    int64_t mate_id = cols[ alg_MATE_ALIGN_ID ].len > 0 ? cols[ alg_MATE_ALIGN_ID ].base.i64[ 0 ] : 0;
+
+    rc = ReferenceList_Find( gRefList, &r, cols[ alg_REF_NAME ].base.str, cols[ alg_REF_NAME ].len );
+    if ( rc == 0 )
+    {
+        rc = ReferenceObj_Idx( r, &rid );
+    }
+#if _DEBUGGING
+    {
+        char const *rname = NULL;
+        curs->cache->projected++;
+        ReferenceObj_Name( r, &rname );
+        SAM_DUMP_DBG( 10, ( "to cache row %li for mate %li: %u,%s[%hu],%u,%u,%i",
+            key, mate_id, cols[ alg_SAM_FLAGS ].base.u32[ 0 ], rname, rid,
+            cols[ alg_REF_POS ].len ? cols[ alg_REF_POS ].base.coord0[ 0 ] : 0,
+            cols[ alg_MATE_REF_POS ].len ? cols[ alg_MATE_REF_POS ].base.coord0[ 0 ] : 0,
+            cols[ alg_TEMPLATE_LEN ].len > 0 ? cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ] : 0));
+    }
+#endif
+    if ( rc == 0 && !( rid & 0xFC00 ) )
+    {
+        int64_t pos_delta64;
+        int32_t pos_delta32;
+
+        if ( mate_id != 0 )
+        {
+            ReferenceObj const *rm = NULL;
+            uint32_t rm_id;
+
+            rc = ReferenceList_Find( gRefList, &rm, cols[ alg_MATE_REF_NAME ].base.str, cols[ alg_MATE_REF_NAME ].len );
+            if ( rc == 0 )
+            {
+                rc = ReferenceObj_Idx( rm, &rm_id );
+            }
+            assert( rm != NULL );
+            if ( rc == 0 && rid != rm_id )
+            {
+                char const *rm_name = NULL;
+                ReferenceObj_Name( rm, &rm_name );
+                mate_id = 0;
+                SAM_DUMP_DBG( 10, ( " mate ref differ: %s[%hu]!", rm_name, rm_id ) );
+            }
+            ReferenceObj_Release( rm );
+        }
+
+        if ( mate_id != 0 )
+        {
+            pos_delta64 = cols[ alg_MATE_REF_POS ].base.coord0[ 0 ] - cols[ alg_REF_POS ].base.coord0[ 0 ];
+        }
+        else
+        {
+            pos_delta64 = cols[ alg_REF_POS ].base.coord0[ 0 ];
+        }
+
+        pos_delta32 = pos_delta64;
+        if ( pos_delta64 == pos_delta32 )
+        {
+            int64_t ref_proj;
+            if ( mate_id == 0 )
+            {
+                ref_proj = 0; /* indicates full value in delta */
+            }
+            else if ( cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ] < 0 )
+            {
+                assert( pos_delta32 <= 0 );
+                ref_proj = pos_delta32 - cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ];
+            }
+            else
+            {
+                assert( pos_delta32 >= 0 );
+                ref_proj = cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ] - pos_delta32;
+            }
+
+            if ( !( ref_proj & 0xFFFFF800 ) )
+            {
+                val = ( pos_delta64 << 32 ) | ( ref_proj << 21 ) | ( cols[ alg_SAM_FLAGS ].base.u32[ 0 ] << 10 ) | rid;
+                rc = KVectorSetU64( curs->cache->cache, key, val );
+            }
+        }
+    }
+    ReferenceObj_Release( r );
+
+#if _DEBUGGING
+    if ( val == 0 )
+    {
+        SAM_DUMP_DBG( 10, ( " --> out of range\n" ) );
+    }
+    else
+    {
+        SAM_DUMP_DBG( 10, ( " --> %016lX\n", val ) );
+        curs->cache->added++;
+    }
+#endif
+    return rc;
+}
+
+
+static rc_t Cache_Get( SCurs const *curs, uint64_t key, uint64_t* val )
+{
+    rc_t rc = KVectorGetU64( curs->cache->cache, key, val );
+    if ( rc == 0 )
+    {
+        uint32_t id = ( *val & 0x3FF );
+#if _DEBUGGING
+        curs->cache->hit++;
+#endif
+        KVectorUnset( curs->cache->cache, key );
+        rc = ReferenceList_Get( gRefList, &curs->cache->ref, id );
+        if ( rc != 0 )
+        {
+            *val = 0;
+            curs->cache->ref = NULL;
+            rc = RC( rcExe, rcNoTarg, rcSearching, rcItem, rcNotFound );
+#if _DEBUGGING
+            curs->cache->bad++;
+#endif
+        }
+        else
+        {
+            SAM_DUMP_DBG( 10, ( "from cache row %li %016lX", key, *val ) );
+        }
+    }
+    return rc;
+}
+
+
+static void Cache_Unpack( uint64_t val, int64_t mate_id, SCurs const *curs, SCol* cols )
+{
+    int32_t pos_delta = ( val & 0xFFFFFFFF00000000 ) >> 32;
+    uint32_t ref_proj = ( val & 0x00000000FFE00000 ) >> 21;
+    uint32_t flags = ( val & 0x00000000001FFC00 ) >> 10;
+
+    if ( mate_id != 0 )
+    {
+        /* adjust flags for mate record */
+        curs->cache->sam_flags = ( flags & 0x1 ) |
+                                 ( flags & 0x2 ) |
+                                 ( ( flags & 0x8 ) >> 1 ) |
+                                 ( ( flags & 0x4 ) << 1 ) |
+                                 ( ( flags & 0x20 ) >> 1 ) |
+                                 ( ( flags & 0x10 ) << 1 ) |
+                                 ( ( flags & 0x40 ) ? 0x80 : 0x40 ) |
+                                 ( flags & 0x700 );
+    }
+    else
+    {
+        /* preserve flags as if original records is restored */
+        curs->cache->sam_flags = flags;
+    }
+    cols[ alg_SAM_FLAGS ].base.u32 = &curs->cache->sam_flags;
+    cols[ alg_SAM_FLAGS ].len = sizeof( curs->cache->sam_flags );
+
+    if ( param->use_seqid )
+    {
+        ReferenceObj_SeqId( curs->cache->ref, &cols[ alg_MATE_REF_NAME ].base.str );
+    }
+    else
+    {
+        ReferenceObj_Name( curs->cache->ref, &cols[ alg_MATE_REF_NAME ].base.str );
+    }
+
+    cols[ alg_MATE_REF_NAME ].len = string_size( cols[ alg_MATE_REF_NAME ].base.str );
+
+    if ( ref_proj == 0 )
+    {
+        curs->cache->pnext = pos_delta;
+        curs->cache->tlen = 0;
+    }
+    else if ( pos_delta > 0 )
+    {
+        curs->cache->pnext = ( cols[ alg_REF_POS ].len > 0 ? cols[ alg_REF_POS ].base.coord0[ 0 ] : 0 ) - pos_delta;
+        curs->cache->tlen = - ( ref_proj + pos_delta );
+    }
+    else
+    {
+        curs->cache->pnext = ( cols[ alg_REF_POS ].len > 0 ? cols[ alg_REF_POS ].base.coord0[ 0 ] : 0 ) - pos_delta;
+        curs->cache->tlen = ref_proj - pos_delta;
+    }
+
+    cols[ alg_MATE_REF_POS ].base.coord0 = &curs->cache->pnext;
+    cols[ alg_MATE_REF_POS ].len = sizeof( curs->cache->pnext );
+    cols[ alg_TEMPLATE_LEN ].base.i32 = &curs->cache->tlen;
+    cols[ alg_TEMPLATE_LEN ].len = sizeof( curs->cache->tlen );
+    {
+        uint32_t id;
+        ReferenceObj_Idx( curs->cache->ref, &id );
+        SAM_DUMP_DBG( 10, ( " --> mate %li: %u,%s[%hu],%u,%i\n",
+            mate_id, curs->cache->sam_flags, cols[ alg_MATE_REF_NAME ].base.str,
+            id, curs->cache->pnext, curs->cache->tlen ) );
+    }
+}
+#endif /* USE_MATE_CACHE */
+
+#if 0
+static rc_t OpenVTable( VDatabase const *db, STable* tbl, char const *name, bool optional )
+{
+    rc_t rc = VDatabaseOpenTableRead( db, &tbl->vtbl, name );
+    if ( GetRCState( rc ) == rcNotFound && optional )
+    {
+        rc = 0;
+        tbl->vtbl = NULL;
+    }
+    tbl->name = name;
+    return rc;
+}
+#endif
+
+static rc_t Cursor_Open( STable const *const tbl, SCurs *const curs, SCol cols[], SCursCache* cache )
+{
+    rc_t rc = 0;
+    unsigned i;
+
+    curs->vcurs = NULL;
+    if ( tbl == NULL || tbl->vtbl == NULL )
+        return 0;
+
+    rc = VTableCreateCachedCursorRead( tbl->vtbl, &curs->vcurs, CURSOR_CACHE );
+    if ( rc != 0 )
+        return rc;
+    
+    rc = VCursorPermitPostOpenAdd( curs->vcurs );
+    if ( rc != 0 )
+        return rc;
+
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen( curs->vcurs );
+        if ( rc == 0 )
+        {
+#if USE_MATE_CACHE
+            if ( cache != NULL )
+            {
+                curs->cache = cache;
+            }
+            else
+            {
+                curs->cache = &curs->cache_local;
+                rc = Cache_Init( &curs->cache_local );
+            }
+#endif /* USE_MATE_CACHE */
+            curs->tbl = tbl;
+        }
+    }
+    
+    for ( i = 0; cols[ i ].name != NULL; ++i )
+    {
+        if ( cols[ i ].name[ 0 ] == 0 )
+            continue;
+        rc = VCursorAddColumn( curs->vcurs, &cols[ i ].idx, cols[ i ].name );
+        if ( GetRCObject( rc ) == rcColumn )
+        {
+            switch ( GetRCState( rc ) )
+            {
+            case rcNotFound:
+            case rcUndefined:
+                if ( !cols[ i ].optional )
+                    break;
+            case rcExists:
+                rc = 0;
+            default:
+                break;
+            }
+        }
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogErr, ( klogErr, rc, "table $(t) column $(c)", "t=%s,c=%s", tbl->name, cols[ i ].name ) );
+            break;
+        }
+    }
+    if ( rc != 0 )
+    {
+        VCursorRelease( curs->vcurs );
+        curs->vcurs = NULL;
+        if ( rc != KLogLastErrorCode() )
+        {
+            (void)PLOGERR( klogErr, ( klogErr, rc, "table $(t)", "t=%s", tbl->name ) );
+        }
+    }
+    else
+    {
+        SAM_DUMP_DBG( 2, ( "%s: table %s\n", __func__, curs->tbl->name ) );
+    }
+    return rc;
+}
+
+
+static void Cursor_Close( SCurs* curs )
+{
+    if ( curs != NULL && curs->vcurs != NULL )
+    {
+        SAM_DUMP_DBG( 2, ( "%s: table %s, columns rows read %lu\n", __func__, curs->tbl->name, curs->col_reads_qty ) );
+        VCursorRelease( curs->vcurs );
+#if USE_MATE_CACHE
+        if ( curs->cache == &curs->cache_local )
+        {
+            Cache_Close( curs->tbl->name, curs->cache );
+        }
+#endif /* USE_MATE_CACHE */
+        memset( curs, 0, sizeof( *curs ) );
+    }
+}
+
+
+static rc_t Cursor_Read( DataSource *ds, int64_t row_id, int firstCol, unsigned nCols )
+{
+    rc_t rc = 0;
+
+    if ( ds->curs.vcurs == NULL )
+    {
+        rc = Cursor_Open( &ds->tbl, &ds->curs, ds->cols, ds->curs.cache );
+        if ( rc != 0 )
+            return rc;
+    }
+    if (1)
+    {
+        SCol *const col = &ds->cols[ firstCol ];
+        unsigned i;
+        
+        for ( i = 0; i < nCols && col[ i ].name; ++i )
+        {
+            uint32_t const idx = col[ i ].idx;
+            
+            if ( idx != 0 )
+            {
+                uint32_t elem_bits;
+                uint32_t bit_offset;
+                uint32_t elem_count;
+                void const *base;
+                
+                rc = VCursorCellDataDirect( ds->curs.vcurs, row_id, idx, &elem_bits, &base, &bit_offset, &elem_count );
+                if ( rc != 0 )
+                {
+                    (void)PLOGERR( klogWarn, ( klogWarn, rc, "reading $(t) row $(r), column $(c)", "t=%s,r=%li,c=%s",
+                                               ds->tbl.name, row_id, col[ i ].name ) );
+                    return rc;
+                }
+                
+                assert( bit_offset == 0 );
+                assert( elem_bits % 8 == 0 );
+                
+                col[ i ].base.v = base;
+                col[ i ].len = elem_count;
+            }
+        }
+    }
+    return rc;
+}
+
+struct
+{
+    KWrtWriter writer;
+    void* data;
+    KFile* kfile;
+    uint64_t pos;
+} g_out_writer = {NULL};
+
+
+static rc_t CC BufferedWriter( void *const self, char const buffer[], size_t const bufsize, size_t *const pnum_writ )
+{
+    rc_t rc = 0;
+    size_t written = 0;
+
+    assert( buffer != NULL );
+
+    while ( written < bufsize )
+    {
+        size_t n;
+
+        rc = KFileWrite( g_out_writer.kfile, g_out_writer.pos + written, &buffer[ written ], bufsize - written, &n );
+        if ( rc != 0 )
+            break;
+        written += n;
+    }
+    g_out_writer.pos += written;
+    if ( pnum_writ != NULL )
+        *pnum_writ = written;
+    return rc;
+}
+
+
+static rc_t BufferedWriterMake( bool gzip, bool bzip2 )
+{
+    rc_t rc = 0;
+
+    if ( gzip && bzip2 )
+    {
+        rc = RC( rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous );
+    }
+    else if ( g_out_writer.writer != NULL )
+    {
+        rc = RC( rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous );
+    }
+    else
+    {
+        rc = KFileMakeStdOut( &g_out_writer.kfile );
+        if ( rc == 0 )
+        {
+            g_out_writer.pos = 0;
+            if ( gzip )
+            {
+                KFile* gz;
+                rc = KFileMakeGzipForWrite( &gz, g_out_writer.kfile );
+                if ( rc == 0 )
+                {
+                    KFileRelease( g_out_writer.kfile );
+                    g_out_writer.kfile = gz;
+                }
+            }
+            else if ( bzip2 )
+            {
+                KFile* bz;
+                rc = KFileMakeBzip2ForWrite( &bz, g_out_writer.kfile );
+                if ( rc == 0 )
+                {
+                    KFileRelease( g_out_writer.kfile );
+                    g_out_writer.kfile = bz;
+                }
+            }
+            if ( rc == 0 )
+            {
+                KFile* buf;
+                rc = KBufFileMakeWrite( &buf, g_out_writer.kfile, false, 128 * 1024 );
+                if ( rc == 0 )
+                {
+                    KFileRelease( g_out_writer.kfile );
+                    g_out_writer.kfile = buf;
+                    g_out_writer.writer = KOutWriterGet();
+                    g_out_writer.data = KOutDataGet();
+                    rc = KOutHandlerSet( BufferedWriter, &g_out_writer );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static void BufferedWriterRelease( bool flush )
+{
+    if ( flush )
+    {
+        /* avoid flushing buffered data after failure */
+        KFileRelease( g_out_writer.kfile );
+    }
+    if ( g_out_writer.writer != NULL )
+    {
+        KOutHandlerSet( g_out_writer.writer, g_out_writer.data );
+    }
+    g_out_writer.writer = NULL;
+}
+
+
+typedef struct ReadGroup
+{
+    BSTNode node;
+    char name[ 1024 ];
+} ReadGroup;
+
+
+static int CC ReadGroup_sort( BSTNode const *item, BSTNode const *node )
+{
+    return strcmp( ( ( ReadGroup const * )item )->name, ( ( ReadGroup const * ) node )->name );
+}
+
+
+static rc_t ReadGroup_print( char const *nm )
+{
+    rc_t rc = 0;
+    if ( nm[ 0 ] != '\0' && strcasecmp( nm, "default" ) )
+    {
+        rc = KOutMsg( "@RG\tID:%s\n", nm );
+    }
+    return rc;
+}
+
+
+static void CC ReadGroup_dump( BSTNode *n, void *data )
+{
+    ReadGroup const *g = ( ReadGroup* )n;
+    ReadGroup_print( g->name );
+}
+
+
+static rc_t CC DumpReadGroupsScan( STable const *tbl )
+{
+    SCol cols[] =
+    {
+        { "SPOT_GROUP", 0, {NULL}, 0, false },
+        { NULL, 0, {NULL}, 0, false }
+    };
+    rc_t rc = 0;
+    BSTree tree;
+    DataSource ds;
+
+    memset( &ds, 0, sizeof( ds ) );
+    ds.cols = cols;
+
+    BSTreeInit( &tree );
+    rc = Cursor_Open( tbl, &ds.curs, ds.cols, NULL );
+    if ( rc == 0 )
+    {
+        int64_t start;
+        uint64_t count;
+
+        rc = VCursorIdRange( ds.curs.vcurs, 0, &start, &count );
+        if ( rc == 0 )
+        {
+            ReadGroup* node = NULL;
+            uint32_t last_len = 0;
+
+            while ( count > 0 && rc == 0 )
+            {
+                rc = Cursor_Read( &ds, start, 0, ~(unsigned)0 );
+                if ( rc == 0 && cols[ 0 ].len != 0 )
+                {
+                    if ( node == NULL ||
+                         last_len != cols[ 0 ].len ||
+                         strncmp( cols[ 0 ].base.str, node->name, cols[ 0 ].len ) != 0 )
+                    {
+                        node = malloc( sizeof( *node ) );
+                        if ( node == NULL )
+                        {
+                            rc = RC( rcExe, rcNode, rcConstructing, rcMemory, rcExhausted );
+                        }
+                        else if ( cols[ 0 ].len > sizeof( node->name ) )
+                        {
+                            rc = RC( rcExe, rcString, rcCopying, rcBuffer, rcInsufficient ); 
+                        }
+                        else
+                        {
+                            last_len = cols[ 0 ].len;
+                            string_copy( node->name, ( sizeof node->name ) - 1, cols[ 0 ].base.str, last_len );
+                            node->name[ last_len ] = '\0';
+                            rc = BSTreeInsertUnique( &tree, &node->node, NULL, ReadGroup_sort );
+                            if ( GetRCState( rc ) == rcExists )
+                            {
+                                free( node );
+                                rc = 0;
+                            }
+                        }
+                    }
+                }
+                else if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcRow )
+                {
+                    rc = 0;
+                }
+                start++;
+                count--;
+            }
+        }
+        Cursor_Close( &ds.curs );
+    }
+
+    if ( rc == 0 )
+    {
+        BSTreeForEach( &tree, false, ReadGroup_dump, NULL );
+    }
+    else if ( rc != KLogLastErrorCode() )
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "$(f)", "f=%s", __func__ ) );
+    }
+    BSTreeWhack( &tree, NULL, NULL );
+    return rc;
+}
+
+
+rc_t CC DumpReadGroups( STable const *tbl )
+{
+    rc_t rc = 0;
+    KMetadata const *m;
+
+    /* try getting list from stats meta */
+    rc = VTableOpenMetadataRead( tbl->vtbl, &m );
+    if ( rc == 0 )
+    {
+        KMDataNode const *n;
+        rc = KMetadataOpenNodeRead( m, &n, "/STATS/SPOT_GROUP" );
+        if ( rc == 0 )
+        {
+            KNamelist* names;
+            rc = KMDataNodeListChild( n, &names );
+            if ( rc == 0 )
+            {
+                uint32_t i, q;
+                rc = KNamelistCount( names, &q );
+                if ( rc == 0 )
+                {
+                    for ( i = 0; rc == 0 && i < q; i++ )
+                    {
+                        char const *nm;
+                        rc = KNamelistGet( names, i, &nm );
+                        if ( rc == 0 )
+                        {
+                            rc = ReadGroup_print( nm );
+                        }
+                    }
+                }
+                KNamelistRelease( names );
+            }
+            KMDataNodeRelease( n );
+        }
+        KMetadataRelease( m );
+    }
+
+    if ( GetRCState( rc ) == rcNotFound )
+    {
+        rc = DumpReadGroupsScan( tbl );
+    }
+    else if ( rc != 0 && rc != KLogLastErrorCode() )
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "$(f)", "f=%s", __func__ ) );
+    }
+    return rc;
+}
+
+static rc_t Cursor_ReadAlign( SCurs const *curs, int64_t row_id, SCol* cols, uint32_t idx )
+{
+    rc_t rc = 0;
+    SCol* c = NULL;
+    SCol* mate_id = NULL;
+#if USE_MATE_CACHE
+    uint64_t cache_val = 0;
+    bool cache_miss = false;
+#endif /* USE_MATE_CACHE */
+
+    
+    for( ; rc == 0 && cols[ idx ].name != NULL; idx++ )
+    {
+        c = &cols[ idx ];
+        if ( c->idx != 0 )
+        {
+#if USE_MATE_CACHE
+            if ( mate_id != NULL && curs->cache != NULL && !cache_miss &&
+                ( idx == alg_SAM_FLAGS || idx == alg_MATE_REF_NAME || idx == alg_MATE_REF_POS || idx == alg_TEMPLATE_LEN ) &&
+                mate_id->idx && mate_id->len > 0 && mate_id->base.i64[ 0 ] > 0 )
+            {
+                if ( cache_val != 0 )
+                {
+                    continue;
+                }
+                rc = Cache_Get( curs, mate_id->base.u64[ 0 ], &cache_val );
+                if ( rc == 0 )
+                {
+                    continue;
+                }
+                else if ( !( GetRCObject( rc ) == rcItem && GetRCState( rc ) == rcNotFound ) )
+                {
+                    break;
+                }
+                else
+                {
+                    /* avoid multiple lookups in cache */
+                    cache_miss = true;
+                }
+            }
+#endif /* USE_MATE_CACHE */
+            rc = VCursorCellDataDirect( curs->vcurs, row_id, c->idx, NULL, &c->base.v, NULL, &c->len );
+            if ( rc == 0 )
+            {
+                if ( idx == alg_SEQ_SPOT_ID && ( c->len  ==0 || c->base.i64[ 0 ] == 0 ) )
+                {
+                    return RC( rcExe, rcColumn, rcReading, rcRow, rcNotFound );
+                }
+                if ( idx == alg_MATE_ALIGN_ID )
+                {
+                    mate_id = &cols[ alg_MATE_ALIGN_ID ];
+                }
+#if _DEBUGGING
+                ( ( SCurs* )curs )->col_reads_qty++;
+#endif
+            }
+        }
+        else
+        {
+            static INSDC_coord_zero readStart;
+            static INSDC_coord_len  readLen;
+            static INSDC_coord_len  cigarLen;
+            
+            switch ( (int)idx )
+            {
+            case alg_READ_START:
+                readStart = 0;
+                c->base.coord0 = &readStart;
+                c->len = 1;
+                break;
+            case alg_READ_LEN:
+                readLen = cols[ alg_READ ].len;
+                c->base.coord_len = &readLen;
+                c->len = 1;
+                break;
+            case alg_CIGAR_LEN:
+                cigarLen = cols[ alg_CIGAR ].len;
+                c->base.coord_len = &cigarLen;
+                c->len = 1;
+                break;
+            }
+        }
+    }
+
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogWarn, ( klogWarn, rc, "reading $(t) row $(r), column $(c)", "t=%s,r=%li,c=%s",
+            curs->tbl->name, row_id, c ? c->name : "<none>" ) );
+#if USE_MATE_CACHE
+    }
+    else if ( curs->cache == NULL )
+    {
+    }
+    else if ( cache_val == 0 )
+    {
+        /* this row is not from cache */
+        int64_t mate_align_id = ( mate_id != NULL && mate_id->len > 0 ) ? mate_id->base.i64[ 0 ] : 0;
+        if ( cols[ 0 ].idx != 0 && /* we have full cursor which means we are reading alignment table */
+            /* no mate -> unaligned (not secondary!) */
+            ( ( mate_align_id == 0 && param->unaligned && curs->cache != &curs->cache_local ) ||
+            /* 2nd mate with higher rowid and more than set gap rows away */
+              ( mate_align_id != 0 && mate_align_id > row_id && ( mate_align_id - row_id) > param->mate_row_gap_cachable ) ) )
+        {
+          rc = Cache_Add( row_id, curs, cols );
+        }
+	if(param->unaligned == true && mate_align_id == 0 ){
+	  rc = KVectorSetBool( curs->cache->cache_unaligned_mate, cols[alg_SEQ_SPOT_ID].base.i64[0], true );
+        }
+    }
+    else
+    {
+        Cache_Unpack( cache_val, row_id, curs, cols );
+#endif /* USE_MATE_CACHE */
+    }
+    return rc;
+}
+
+
+static rc_t DumpName( char const *name, size_t name_len,
+                      const char spot_group_sep, char const *spot_group,
+                      size_t spot_group_len, int64_t spot_id )
+{
+    rc_t rc = 0;
+    if ( param->cg_friendly_names )
+    {
+        rc = KOutMsg( "%.*s-1:%lu", spot_group_len, spot_group, spot_id );
+    }
+    else
+    {
+        if ( param->name_prefix != NULL )
+        {
+            rc = KOutMsg( "%s.", param->name_prefix );
+        }
+        rc = BufferedWriter( NULL, name, name_len, NULL );
+        if ( rc == 0 && param->spot_group_in_name && spot_group_len > 0 )
+        {
+            rc = BufferedWriter( NULL, &spot_group_sep, 1, NULL );
+            if ( rc == 0 )
+                rc = BufferedWriter( NULL, spot_group, spot_group_len, NULL );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t DumpQuality( char const quality[], unsigned const count, bool const reverse, bool const quantize )
+{
+    rc_t rc = 0;
+    if ( quality == NULL )
+    {
+        unsigned i;
+
+        for ( i = 0; rc == 0 && i < count; ++i )
+        {
+            char const newValue = ((param->qualQuant && param->qualQuantSingle)?param->qualQuantSingle:30) + 33;
+            rc = BufferedWriter( NULL, &newValue, 1, NULL );
+        }
+    }
+    else if ( reverse || quantize )
+    {
+        unsigned i;
+
+        for ( i = 0; rc == 0 && i < count; ++i )
+        {
+            char const qual = quality[ reverse ? ( count - i - 1 ) : i ];
+            char const newValue = quantize ? param->qualQuant[ qual - 33 ] + 33 : qual;
+
+            rc = BufferedWriter( NULL, &newValue, 1, NULL );
+        }
+    }
+    else
+    {
+        rc = BufferedWriter( NULL, quality, count, NULL );
+    }
+    return rc;
+}
+
+
+static rc_t DumpUnalignedFastX( const SCol cols[], uint32_t read_id, INSDC_coord_zero readStart, INSDC_coord_len readLen, int64_t row_id )
+{
+    /* fast[AQ] represnted in SAM fields:
+       [@|>]QNAME unaligned
+       SEQ
+       +
+       QUAL
+    */
+    rc_t rc = BufferedWriter( NULL, param->fastq ? "@" : ">", 1, NULL );
+
+    /* QNAME: [PFX.]SEQUENCE:NAME[#SPOT_GROUP] */
+    if ( rc == 0 )
+        rc = DumpName( cols[ seq_NAME ].base.str, cols[ seq_NAME ].len, '#',
+                       cols[ seq_SPOT_GROUP ].base.str, cols[ seq_SPOT_GROUP ].len, row_id );
+    if ( rc == 0 && read_id > 0 )
+    {
+        rc = KOutMsg( "/%u", read_id );
+    }
+    if ( rc == 0 )
+        rc = BufferedWriter( NULL, " unaligned\n", 11, NULL );
+
+    /* SEQ: SEQUENCE.READ */
+    if ( rc == 0 )
+        rc = BufferedWriter( NULL, &cols[ seq_READ ].base.str[readStart], readLen, NULL );
+    if ( rc == 0 && param->fastq )
+    {
+        /* QUAL: SEQUENCE.QUALITY */
+        rc = BufferedWriter( NULL, "\n+\n", 3, NULL );
+        if ( rc == 0 )
+            rc = DumpQuality( &cols[ seq_QUALITY ].base.str[ readStart ], readLen, false, param->quantizeQual );
+    }
+    if ( rc == 0 )
+        rc = BufferedWriter( NULL, "\n", 1, NULL );
+    return rc;
+}
+
+
+static rc_t DumpAlignedFastX( const SCol cols[], int64_t const alignId, uint32_t read_id, bool primary, bool secondary )
+{
+    rc_t rc = 0;
+    size_t nm;
+    unsigned readId;
+    unsigned const nreads = cols[ alg_READ_LEN ].len;
+
+    for ( readId = 0; readId < nreads && rc == 0 ; ++readId )
+    {
+        char const *qname = cols[ alg_SEQ_NAME ].base.str;
+        size_t qname_len = cols[ alg_SEQ_NAME ].len;
+        char synth_qname[ 40 ];
+        int64_t const spot_id = cols[alg_SEQ_SPOT_ID].len > 0 ? cols[alg_SEQ_SPOT_ID].base.i64[0] : 0;
+        char const *const read = cols[ alg_READ ].base.str + cols[ alg_READ_START ].base.coord0[ readId ];
+        char const *const qual = cols[ alg_SAM_QUALITY ].base.v
+                               ? cols[ alg_SAM_QUALITY ].base.str + cols[ alg_READ_START ].base.coord0[ readId ]
+                               : NULL;
+        unsigned const readlen = cols[ alg_READ_LEN ].base.coord_len[ readId ];
+
+        /* fast[AQ] represnted in SAM fields:
+           [@|>]QNAME primary|secondary ref=RNAME pos=POS mapq=MAPQ
+           SEQ
+           +
+           QUAL
+        */
+        rc = BufferedWriter( NULL, param->fastq ? "@" : ">", 1, NULL );
+        /* QNAME: [PFX.]SEQ_NAME[#SPOT_GROUP] */
+        if ( qname_len == 0 || qname == NULL )
+        {
+            string_printf( synth_qname, sizeof( synth_qname ), &qname_len, "%li.%u", alignId, readId + 1 );
+            qname = synth_qname;
+        }
+        nm = cols[ alg_SPOT_GROUP ].len ? alg_SPOT_GROUP : alg_SEQ_SPOT_GROUP;
+        if ( rc == 0 )
+            rc = DumpName( qname, qname_len, '.', cols[ nm ].base.str, cols[ nm ].len, spot_id);
+
+        if ( rc == 0 && read_id > 0 )
+            rc = KOutMsg( "/%u", read_id );
+
+        if ( rc == 0 )
+        {
+            if ( primary )
+            {
+                rc = BufferedWriter( NULL, " primary", 8, NULL );
+            }
+            else if ( secondary )
+            {
+                rc = BufferedWriter( NULL, " secondary", 10, NULL );
+            }
+        }
+
+        /* RNAME: REF_NAME or REF_SEQ_ID */
+        if ( rc == 0 )
+            rc = BufferedWriter( NULL, " ref=", 5, NULL );
+        if ( rc == 0 )
+        {
+            if ( param->use_seqid )
+            {
+                rc = BufferedWriter( NULL, cols[ alg_REF_SEQ_ID ].base.str, cols[ alg_REF_SEQ_ID ].len, NULL );
+            }
+            else
+            {
+                rc = BufferedWriter( NULL, cols[ alg_REF_NAME ].base.str, cols[ alg_REF_NAME ].len, NULL );
+            }
+        }
+
+        /* POS: REF_POS, MAPQ: MAPQ */
+        if ( rc == 0 )
+            rc = KOutMsg( " pos=%u mapq=%i\n", cols[ alg_REF_POS ].base.coord0[ 0 ] + 1, cols[ alg_MAPQ ].base.i32[ 0 ] );
+        
+        /* SEQ: READ */
+        if ( rc == 0 )
+            rc = BufferedWriter( NULL, read, readlen, NULL );
+        if ( rc == 0 && param->fastq )
+        {
+            /* QUAL: SAM_QUALITY */
+            rc = BufferedWriter( NULL, "\n+\n", 3, NULL );
+            if ( rc == 0 )
+                rc = DumpQuality( qual, readlen, false, param->quantizeQual );
+        }
+        if ( rc == 0 )
+            rc = BufferedWriter( NULL, "\n", 1, NULL );
+    }
+    return rc;
+}
+
+
+static
+rc_t DumpUnalignedSAM( const SCol cols[], uint32_t flags, INSDC_coord_zero readStart, INSDC_coord_len readLen,
+                       char const *rnext, uint32_t rnext_len, INSDC_coord_zero pnext, char const readGroup[], int64_t row_id )
+{
+    unsigned i;
+
+    /* QNAME: [PFX.]NAME[.SPOT_GROUP] */
+    rc_t rc = DumpName( cols[ seq_NAME ].base.str, cols[ seq_NAME ].len, '.',
+              cols[ seq_SPOT_GROUP ].base.str, cols[ seq_SPOT_GROUP ].len, row_id );
+
+    /* all these fields are const text for now */
+    if ( rc == 0 )
+        rc = KOutMsg( "\t%u\t*\t0\t0\t*\t%.*s\t%u\t0\t",
+             flags, rnext_len ? rnext_len : 1, rnext_len ? rnext : "*", pnext );
+    /* SEQ: SEQUENCE.READ */
+    if ( flags & 0x10 )
+    {
+        for( i = 0; i < readLen && rc == 0; i++ )
+        {
+            char base;
+
+            DNAReverseCompliment( &cols[ seq_READ ].base.str[ readStart + readLen - 1 - i ], &base, 1 );
+            rc = BufferedWriter( NULL, &base, 1, NULL );
+        }
+    }
+    else
+    {
+        rc = BufferedWriter( NULL, &cols[ seq_READ ].base.str[ readStart ], readLen, NULL );
+    }
+
+    if ( rc == 0 )
+        rc = BufferedWriter( NULL, "\t", 1, NULL );
+    /* QUAL: SEQUENCE.QUALITY */
+    if ( rc == 0 )
+        rc = DumpQuality( &cols[ seq_QUALITY ].base.str[ readStart ], readLen, flags & 0x10, param->quantizeQual );
+
+    /* optional fields: */
+    if ( rc == 0 )
+    {
+        if ( readGroup )
+        {
+            rc = BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+            if ( rc == 0 )
+                rc = BufferedWriter( NULL, readGroup, string_size( readGroup ), NULL );
+        }
+        else if ( cols[ seq_SPOT_GROUP ].len > 0 )
+        {
+            /* read group */
+            rc = BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+            if ( rc == 0 )
+                rc = BufferedWriter( NULL, cols[ seq_SPOT_GROUP ].base.str, cols[ seq_SPOT_GROUP ].len, NULL );
+        }
+    }
+    if ( rc == 0 )
+        rc = BufferedWriter( NULL, "\n", 1, NULL );
+    return rc;
+}
+
+
+static
+rc_t DumpAlignedSAM( SAM_dump_ctx_t *const ctx,
+                     DataSource const *ds,
+                     int64_t alignId,
+                     char const readGroup[],
+                     int type)
+{
+    rc_t rc = 0;
+    unsigned const nreads = ds->cols[ alg_READ_LEN ].len;
+    SCol const *const cols = ds->cols;
+    int64_t const spot_id = cols[alg_SEQ_SPOT_ID].len > 0 ? cols[alg_SEQ_SPOT_ID].base.i64[0] : 0;
+    INSDC_coord_one const read_id = cols[alg_SEQ_READ_ID].len > 0 ? cols[alg_SEQ_READ_ID].base.coord1[0] : 0;
+    INSDC_SRA_read_filter const *align_filter = cols[alg_READ_FILTER].len == nreads ? cols[alg_READ_FILTER].base.read_filter : NULL;
+    INSDC_SRA_read_filter seq_filter = 0;
+    unsigned readId;
+    unsigned cigOffset = 0;
+    
+    if ( align_filter == NULL && spot_id && read_id && ctx->seq.cols )
+    {
+        rc_t rc;
+        
+        rc = Cursor_Read(&ctx->seq, spot_id, seq_READ_FILTER, 1);
+        if (rc == 0 && ctx->seq.cols[seq_READ_FILTER].len >= read_id)
+            seq_filter = ctx->seq.cols[seq_READ_FILTER].base.read_filter[read_id - 1];
+    }
+
+    for ( readId = 0; readId < nreads && rc == 0 ; ++readId )
+    {
+        char const *qname = cols[ alg_SEQ_NAME ].base.str;
+        size_t qname_len = cols[ alg_SEQ_NAME ].len;
+        char const *const read = cols[ alg_READ ].base.str + cols[ alg_READ_START ].base.coord0[ readId ];
+        char const *const qual = cols[ alg_SAM_QUALITY ].base.v
+                               ? cols[ alg_SAM_QUALITY ].base.str + cols[ alg_READ_START ].base.coord0[ readId ]
+                               : NULL;
+        unsigned const readlen = nreads > 1 ? cols[ alg_READ_LEN ].base.coord_len[ readId ] : cols[ alg_READ ].len;
+        unsigned const sflags = cols[ alg_SAM_FLAGS ].base.v ? cols[ alg_SAM_FLAGS ].base.u32[ readId ] : 0;
+        INSDC_SRA_read_filter const filt = align_filter ? align_filter[readId] : seq_filter;
+        unsigned const flags = (sflags & ~((unsigned)0x200)) | ((filt == SRA_READ_FILTER_REJECT) ? 0x200 : 0);
+        char const *const cigar = cols[ alg_CIGAR ].base.str + cigOffset;
+        unsigned const cigLen = nreads > 1 ? cols[ alg_CIGAR_LEN ].base.coord_len[ readId ] : cols[ alg_CIGAR ].len;
+        size_t nm;
+        char synth_qname[1024];
+        
+        cigOffset += cigLen;
+        if ( qname_len == 0 || qname == NULL )
+        {
+            string_printf( synth_qname, sizeof( synth_qname ), &qname_len, "ALLELE_%li.%u", alignId, readId + 1 );
+            qname = synth_qname;
+        }
+        else if (ds->type == edstt_EvidenceAlignment) {
+            string_printf( synth_qname, sizeof( synth_qname ), &qname_len, "%u/ALLELE_%li.%u", spot_id, cols[ alg_REF_ID ].base.i64[ readId ], cols[ alg_REF_PLOIDY ].base.u32[ readId ] );
+            qname = synth_qname;
+        }
+        nm = cols[ alg_SPOT_GROUP ].len ? alg_SPOT_GROUP : alg_SEQ_SPOT_GROUP;
+        rc = DumpName( qname, qname_len, '.', cols[ nm ].base.str, cols[ nm ].len, spot_id );
+
+        /* FLAG: SAM_FLAGS */
+        if ( rc == 0 )
+        {
+            if ( ds->type == edstt_EvidenceAlignment )
+            {
+                bool const cmpl = cols[alg_REVERSED].base.v && readId < cols[alg_REVERSED].len ? cols[alg_REVERSED].base.tf[readId] : false;
+                rc = KOutMsg( "\t%u\t", 1 | (cmpl ? 0x10 : 0) | (read_id == 1 ? 0x40 : 0x80) );
+            }
+            else if ( !param->unaligned      /** not going to dump unaligned **/
+                 && ( flags & 0x1 )     /** but we have sequenced multiple fragments **/
+                 && ( flags & 0x8 ) )   /** and not all of them align **/
+            {
+                /*** remove flags talking about multiple reads **/
+                /* turn off 0x001 0x008 0x040 0x080 */
+                rc = KOutMsg( "\t%u\t", flags & ~0xC9 );
+            }
+            else
+            {
+                rc = KOutMsg( "\t%u\t", flags );
+            }
+        }
+
+        if ( rc == 0 )
+        {
+            if ( ds->type == edstt_EvidenceAlignment && type == 0 )
+            {
+                rc = KOutMsg( "ALLELE_%li.%u", cols[ alg_REF_ID ].base.i64[ readId ], cols[ alg_REF_PLOIDY ].base.u32[ readId ] );
+            }
+            else
+            {
+                /* RNAME: REF_NAME or REF_SEQ_ID */
+                if ( param->use_seqid )
+                    rc = BufferedWriter( NULL, cols[ alg_REF_SEQ_ID ].base.str, cols[ alg_REF_SEQ_ID ].len, NULL );
+                else
+                    rc = BufferedWriter( NULL, cols[ alg_REF_NAME ].base.str, cols[ alg_REF_NAME ].len, NULL );
+            }
+        }
+
+        if ( rc == 0 )
+            rc = BufferedWriter( NULL, "\t", 1, NULL );
+        
+        /* POS: REF_POS */
+        if ( rc == 0 )
+            rc = KOutMsg( "%i\t", cols[ alg_REF_POS ].base.coord0[ 0 ] + 1 );
+
+        /* MAPQ: MAPQ */
+        if ( rc == 0 )
+            rc = KOutMsg( "%i\t", cols[ alg_MAPQ ].base.i32[ 0 ] );
+
+        /* CIGAR: CIGAR_* */
+        if ( ds->type == edstt_EvidenceInterval )
+        {
+            unsigned i;
+            
+            for ( i = 0; i != cigLen && rc == 0; ++i )
+            {
+                char ch = cigar[i];
+                if ( ch == 'S' ) ch = 'I';
+                rc = BufferedWriter(NULL, &ch, 1, NULL);
+            }
+        }
+        else
+        {
+            if ( rc == 0 )
+                rc = BufferedWriter( NULL, cigar, cigLen, NULL );
+        }
+
+        if ( rc == 0 )
+            rc = BufferedWriter( NULL, "\t", 1, NULL );
+        
+        /* RNEXT: MATE_REF_NAME or '*' */
+        /* PNEXT: MATE_REF_POS or 0 */
+        if ( rc == 0 )
+        {
+            if ( cols[ alg_MATE_REF_NAME ].len )
+            {
+                if ( cols[ alg_MATE_REF_NAME ].len == cols[ alg_REF_NAME ].len &&
+                    memcmp( cols[ alg_MATE_REF_NAME ].base.str, cols[ alg_REF_NAME ].base.str, cols[ alg_MATE_REF_NAME ].len ) == 0 )
+                {
+                    rc = BufferedWriter( NULL, "=\t", 2, NULL );
+                }
+                else
+                {
+                    rc = BufferedWriter( NULL, cols[ alg_MATE_REF_NAME ].base.str, cols[ alg_MATE_REF_NAME ].len, NULL );
+                    if ( rc == 0 )
+                        rc = BufferedWriter( NULL, "\t", 1, NULL );
+                }
+                if ( rc == 0 )
+                    rc = KOutMsg( "%u\t", cols[ alg_MATE_REF_POS ].base.coord0[ 0 ] + 1 );
+            }
+            else
+            {
+                rc = BufferedWriter( NULL, "*\t0\t", 4, NULL );
+            }
+        }
+
+        /* TLEN: TEMPLATE_LEN */
+        if ( rc == 0 )
+            rc = KOutMsg( "%i\t", cols[ alg_TEMPLATE_LEN ].base.v ? cols[ alg_TEMPLATE_LEN ].base.i32[ 0 ] : 0 );
+
+        /* SEQ: READ */
+        if ( rc == 0 )
+            rc = BufferedWriter( NULL, read, readlen, NULL );
+        if ( rc == 0 )
+            rc = BufferedWriter( NULL, "\t", 1, NULL );
+
+        /* QUAL: SAM_QUALITY */
+        if ( rc == 0 )
+            rc = DumpQuality( qual, readlen, false, param->quantizeQual );
+    
+        /* optional fields: */
+        if ( rc == 0 && ds->type == edstt_EvidenceInterval )
+            rc = KOutMsg( "\tRG:Z:ALLELE_%u", readId + 1 );
+
+        if ( rc == 0 )
+        {
+            if ( readGroup )
+            {
+                rc = BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+                if ( rc == 0 )
+                    rc = BufferedWriter( NULL, readGroup, string_size( readGroup ), NULL );
+            }
+            else if ( cols[ alg_SPOT_GROUP ].len > 0 )
+            {
+                /* read group */
+                rc = BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+                if ( rc == 0 )
+                    rc = BufferedWriter( NULL, cols[ alg_SPOT_GROUP ].base.str, cols[ alg_SPOT_GROUP ].len, NULL );
+            }
+            else if ( cols[ alg_SEQ_SPOT_GROUP ].len > 0 )
+            {
+                /* backward compatibility */
+                rc = BufferedWriter( NULL, "\tRG:Z:", 6, NULL );
+                if ( rc == 0 )
+                    rc = BufferedWriter( NULL, cols[ alg_SEQ_SPOT_GROUP ].base.str, cols[ alg_SEQ_SPOT_GROUP ].len, NULL );
+            }
+        }
+
+        if ( rc == 0 && param->cg_style > 0 && cols[ alg_CG_TAGS_STR ].len > 0 )
+            rc = BufferedWriter( NULL, cols[ alg_CG_TAGS_STR ].base.str, cols[ alg_CG_TAGS_STR ].len, NULL );
+
+        if ( rc == 0 )
+        {
+            if ( param->cg_style > 0 && cols[ alg_ALIGN_GROUP ].len > 0 )
+            {
+                char const *ZI = cols[ alg_ALIGN_GROUP ].base.str;
+                unsigned i;
+                
+                for ( i = 0; rc == 0 && i < cols[ alg_ALIGN_GROUP ].len - 1; ++i )
+                {
+                    if ( ZI[ i ] == '_' )
+                    {
+                        rc = KOutMsg( "\tZI:i:%.*s\tZA:i:%.1s", i, ZI, ZI + i + 1 );
+                        break;
+                    }
+                }
+            }
+            else if ( ds->type == edstt_EvidenceAlignment && type == 1 )
+            {
+                rc = KOutMsg( "\tZI:i:%li\tZA:i:%u", cols[ alg_REF_ID ].base.i64[ readId ], cols[ alg_REF_PLOIDY ].base.u32[ readId ] );
+            }
+        }
+
+        /* align id */
+        if ( rc == 0 && param->xi )
+            rc = KOutMsg( "\tXI:i:%li", alignId );
+
+        /* hit count */
+        if ( rc == 0 && cols[alg_ALIGNMENT_COUNT].len )
+            rc = KOutMsg( "\tNH:i:%i", (int)cols[ alg_ALIGNMENT_COUNT ].base.u8[ readId ] );
+
+        /* edit distance */
+        if ( rc == 0 && cols[ alg_EDIT_DISTANCE ].len )
+            rc = KOutMsg( "\tNM:i:%i", cols[ alg_EDIT_DISTANCE ].base.i32[ readId ] );
+
+        if ( rc == 0 )
+            rc = KOutMsg( "\n" );
+    }
+    return rc;
+}
+
+
+static rc_t DumpUnalignedReads( SAM_dump_ctx_t *const ctx, SCol const calg_col[], int64_t row_id, uint64_t* rcount )
+{
+    rc_t rc = 0;
+    uint32_t i, nreads = 0;
+
+    if ( calg_col != NULL )
+    {
+        if ( calg_col[ alg_SAM_FLAGS ].base.u32[ 0 ] & 0x02 )
+        {
+            /* skip all aligned rows by flag */
+            return rc;
+        }
+        /* get primary alignments only */
+        rc = Cursor_Read( &ctx->seq, calg_col[ alg_SEQ_SPOT_ID ].base.i64[ 0 ], seq_PRIMARY_ALIGNMENT_ID, ~(unsigned)0 );
+        if ( rc == 0 )
+        {
+            for ( i = 0; i < ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].len; i++ )
+            {
+                if ( ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[ i ] != 0 )
+                {
+                    if ( ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[ i ] < row_id )
+                    {
+                        /* unaligned were printed with 1st aligment */
+                        return rc;
+                    }
+                }
+                else
+                {
+                    nreads++;
+                }
+            }
+            if ( nreads == ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].len )
+            {
+                /* skip all aligned rows by actual data, if flag above is not set properly */
+                return rc;
+            }
+            row_id = calg_col[ alg_SEQ_SPOT_ID ].base.i64[ 0 ];
+        }
+    }
+    if ( rc == 0 )
+    {
+        rc = Cursor_Read( &ctx->seq, row_id, 0, ~(unsigned)0 );
+        if ( rc == 0 )
+        {
+            unsigned non_empty_reads = 0;
+            
+            nreads = ctx->seq.cols[ seq_READ_LEN ].idx != 0 ? ctx->seq.cols[ seq_READ_LEN ].len : 1;
+
+            for( i = 0; i < nreads; i++ ) {
+                unsigned const readLen = ctx->seq.cols[ seq_READ_LEN ].idx
+                                       ? ctx->seq.cols[ seq_READ_LEN ].base.coord_len[ i ]
+                                       : 0;
+                
+                if (readLen)
+                    ++non_empty_reads;
+            }
+            for( i = 0; i < nreads; i++ )
+            {
+                INSDC_coord_zero readStart;
+                INSDC_coord_len readLen;
+
+                if ( ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].idx != 0 && 
+                     ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[ i ] != 0 )
+                {
+                    continue;
+                }
+
+                if ( ctx->seq.cols[ seq_READ_TYPE ].idx != 0 && 
+                     !( ctx->seq.cols[ seq_READ_TYPE ].base.read_type[ i ] & SRA_READ_TYPE_BIOLOGICAL ) )
+                {
+                    continue;
+                }
+
+                readLen = ctx->seq.cols[ seq_READ_LEN ].idx ? 
+                            ctx->seq.cols[ seq_READ_LEN ].base.coord_len[ i ] :
+                            ctx->seq.cols[ seq_READ ].len;
+                if ( readLen == 0 )
+                {
+                    continue;
+                }
+
+                readStart = ctx->seq.cols[ seq_READ_START ].idx ?
+                                ctx->seq.cols[ seq_READ_START ].base.coord0[ i ] :
+                                0;
+                if ( param->fasta || param->fastq )
+                {
+                    rc = DumpUnalignedFastX( ctx->seq.cols, nreads > 1 ? i + 1 : 0, readStart, readLen, row_id );
+                }
+                else
+                {
+                    uint32_t cflags = 0x4;
+                    if ( param->reverse_unaligned )
+                    {
+                        if ( ctx->seq.cols[ seq_READ_TYPE ].base.read_type[ i ] & SRA_READ_TYPE_REVERSE )
+                        {
+                            cflags |= 0x10;
+                        }
+                        if ( ctx->seq.cols[ seq_READ_TYPE ].base.read_type[ i == nreads - 1 ? 0 : ( i + 1 ) ] & SRA_READ_TYPE_REVERSE )
+                        {
+                            cflags |= 0x20;
+                        }
+                    }
+                    if ( ctx->seq.cols[ seq_READ_FILTER ].idx != 0 )
+                    {
+                        if ( ctx->seq.cols[ seq_READ_FILTER ].base.read_filter[ i ] == SRA_READ_FILTER_REJECT )
+                        {
+                            cflags |= 0x200;
+                        }
+                        else if ( ctx->seq.cols[ seq_READ_FILTER ].base.read_filter[ i ] == SRA_READ_FILTER_CRITERIA )
+                        {
+                            cflags |= 0x400;
+                        }
+                    }
+                    if ( calg_col == NULL )
+                    {
+                        rc = DumpUnalignedSAM( ctx->seq.cols, cflags |
+                                          ( non_empty_reads > 1 ? ( 0x1 | 0x8 | ( i == 0 ? 0x40 : 0x00 ) | ( i == nreads - 1 ? 0x80 : 0x00 ) ) : 0x00 ),
+                                          readStart, readLen, NULL, 0, 0, ctx->readGroup, row_id );
+                    }
+                    else
+                    {
+                        int c = param->use_seqid ? alg_REF_SEQ_ID : alg_REF_NAME;
+                        uint16_t flags = cflags | 0x1 |
+                                         ( ( calg_col[ alg_SAM_FLAGS ].base.u32[ 0 ] & 0x10 ) << 1 ) |
+                                         ( ( calg_col[ alg_SAM_FLAGS ].base.u32[ 0 ] & 0x40 ) ? 0x80 : 0x40 );
+                        rc = DumpUnalignedSAM( ctx->seq.cols, flags, readStart, readLen,
+                                          calg_col[ c ].base.str, calg_col[ c ].len,
+                                          calg_col[ alg_REF_POS ].base.coord0[ 0 ] + 1, ctx->readGroup, row_id );
+                    }
+                }
+                *rcount = *rcount + 1;
+            }
+        }
+    }
+    return rc;
+}
+
+
+static bool AlignRegionFilter( SCol const *cols )
+{
+    if ( param->region_qty == 0 )
+        return true;
+    if ( cols[ alg_REF_NAME ].len != 0 || cols[ alg_REF_SEQ_ID ].len != 0 )
+    {
+        unsigned i;
+
+        assert( cols[ alg_REF_POS ].len == cols[ alg_REF_LEN ].len );
+
+        for ( i = 0; i < param->region_qty; i++ )
+        {
+            unsigned j;
+            
+            for ( j = 0; j < cols[ alg_REF_POS ].len; j++ )
+            {
+                unsigned const refStart_zero = cols[ alg_REF_POS ].base.coord0[ j ];
+                unsigned const refEnd_exclusive = refStart_zero + cols[ alg_REF_LEN ].base.coord_len[ j ];
+                unsigned k;
+                
+                for ( k = 0; k < param->region[ i ].rq; k++ )
+                {
+                    unsigned const from_zero = param->region[ i ].r[ k ].from;
+                    unsigned const to_inclusive = param->region[ i ].r[ k ].to;
+                    
+                    if ( from_zero < refEnd_exclusive && refStart_zero <= to_inclusive )
+                        return true;
+                }
+            }
+        }
+    }
+    return false;
+}
+
+
+static bool AlignDistanceFilter( SCol const *cols )
+{
+    if ( param->mp_dist_qty != 0 || param->mp_dist_unknown )
+    {
+        if ( cols[ alg_TEMPLATE_LEN ].len == 0 && param->mp_dist_unknown )
+        {
+            return true;
+        }
+        else
+        {
+            uint32_t i, j;
+            for( i = 0; i < param->mp_dist_qty; i++ )
+            {
+                for( j = 0; j < cols[ alg_TEMPLATE_LEN ].len; j++ )
+                {
+                    if ( ( cols[ alg_TEMPLATE_LEN ].base.i32[ j ] == 0 && param->mp_dist_unknown ) ||
+                         ( param->mp_dist[ i ].from <= cols[ alg_TEMPLATE_LEN ].base.i32[ j ] &&
+                         cols[ alg_TEMPLATE_LEN ].base.i32[ j ] <= param->mp_dist[ i ].to ) )
+                    {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+    return true;
+}
+
+
+typedef struct cgOp_s
+{
+    uint16_t length;
+    uint8_t type; /* 0: match, 1: insert, 2: delete */
+    char code;
+} cgOp;
+
+
+static void print_CG_cigar( int line, cgOp const op[], unsigned const ops, unsigned const gap[ 3 ] )
+{
+#if _DEBUGGING
+    unsigned i;
+    
+    SAM_DUMP_DBG( 3, ( "%5i: ", line ) );
+    for ( i = 0; i < ops; ++i )
+    {
+        if ( gap && ( i == gap[ 0 ] || i == gap[ 1 ] || i == gap[ 2 ] ) )
+        {
+            SAM_DUMP_DBG( 3, ( "%u%c", op[ i ].length, tolower( op[ i ].code ) ) );
+        }
+        else
+        {
+            SAM_DUMP_DBG( 3, ( "%u%c", op[ i ].length, toupper( op[ i ].code ) ) );
+        }
+    }
+    SAM_DUMP_DBG( 3, ( "\n" ) );
+#endif
+}
+
+/* gap contains the indices of the wobbles in op
+ * gap[0] is between read 1 and 2; it is the 'B'
+ * gap[1] is between read 2 and 3; it is an 'N'
+ * gap[2] is between read 3 and 4; it is an 'N'
+ */
+
+static rc_t CIGAR_to_CG_Ops( cgOp op[], unsigned const maxOps,
+                             unsigned *const opCnt,
+                             unsigned gap[ 3 ],
+                             char const cigar[], unsigned const ciglen,
+                             unsigned *const S_adjust,
+                             unsigned *const CG_adjust,
+                             unsigned const read,
+                             bool const reversed )
+{
+    unsigned i;
+    unsigned ops = 0;
+    unsigned gapno;
+
+    *opCnt = 0;
+    *S_adjust = 0;
+    for ( i = 0; i < ciglen; ++ops )
+    {
+        char opChar=0;
+        int opLen=0;
+        int n;
+
+	for(n=0;n+i<ciglen && isdigit(cigar[n+i]);n++){
+		opLen = opLen * 10 + cigar[n+i] - '0';
+	}
+	if(n+i<ciglen){
+		opChar = cigar[n+i];
+		n++;
+	}
+        if ( ops + 1 >= maxOps )
+            return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+
+        i += n;
+        
+        op[ ops ].length = opLen;
+        op[ ops ].code = opChar;
+        switch ( opChar )
+        {
+        case 'M':
+        case '=':
+        case 'X':
+            op[ ops ].type = 0;
+            break;
+        case 'S':
+            *S_adjust += opLen;
+        case 'I':
+            op[ ops ].type = 1;
+            op[ ops ].code = 'I';
+            break;
+        case 'D':
+            op[ ops ].type = 2;
+            break;
+        default:
+            return RC( rcExe, rcData, rcReading, rcConstraint, rcViolated );
+        }
+    }
+    *opCnt = ops;
+    gap[ 0 ] = gap[ 1 ] = gap[ 2 ] = ops;
+    print_CG_cigar( __LINE__, op, ops, NULL );
+    if ( ops < 3 )
+        return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+
+    {
+        unsigned fwd = 0; /* 5 10 10 10 */
+        unsigned rev = 0; /* 10 10 10 5 */
+        unsigned acc; /* accumulated length */
+        
+        if ( ( read == 1 && !reversed ) || ( read == 2 && reversed ) )
+        {
+            for ( i = 0, acc = 0; i < ops  && acc <=5; ++i )
+            {
+                if ( op[ i ].type != 2 )
+                {
+                    acc += op[ i ].length;
+                    if ( acc == 5 && op[ i + 1 ].type == 1 )
+                    {
+                        fwd = i + 1;
+                        break;
+                    }
+                    else if ( acc > 5 )
+                    {
+                        unsigned const right = acc - 5;
+                        unsigned const left = op[ i ].length - right;
+                        
+                        memmove( &op[ i + 2 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+                        ops += 2;
+                        op[ i ].length = left;
+                        op[ i + 2 ].length = right;
+                        
+                        op[ i + 1 ].type = 1;
+                        op[ i + 1 ].code = 'B';
+                        op[ i + 1 ].length = 0;
+                        
+                        fwd = i + 1;
+                        break;
+                    }
+                }
+            }
+        }
+        else if ( ( read == 2 && !reversed ) || ( read == 1 && reversed ) )
+        {
+            for ( i = ops, acc = 0; i > 0 && acc <= 5; )
+            {
+                --i;
+                if ( op[ i ].type != 2 )
+                {
+                    acc += op[ i ].length;
+                    if ( acc == 5 && op[ i ].type == 1 )
+                    {
+                        rev = i;
+                        break;
+                    }
+                    else if ( acc > 5 )
+                    {
+                        unsigned const left = acc - 5;
+                        unsigned const right = op[ i ].length - left;
+                        
+                        memmove( &op[ i + 2 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+                        ops += 2;
+                        op[ i ].length = left;
+                        op[ i + 2 ].length = right;
+                        
+                        op[ i + 1 ].type = 1;
+                        op[ i + 1 ].code = 'B';
+                        op[ i + 1 ].length = 0;
+                         
+                        rev = i + 1;
+                        break;
+                    }
+                }
+            }
+        }
+        else
+        {
+            /* fprintf(stderr, "guessing layout\n"); */
+            for ( i = 0, acc = 0; i < ops  && acc <= 5; ++i )
+            {
+                if ( op[ i ].type != 2 )
+                {
+                    acc += op[ i ].length;
+                    if ( acc == 5 && op[ i + 1 ].type == 1 )
+                    {
+                        fwd = i + 1;
+                    }
+                }
+            }
+            for ( i = ops, acc = 0; i > 0 && acc <= 5; )
+            {
+                --i;
+                if ( op[ i ].type != 2 )
+                {
+                    acc += op[ i ].length;
+                    if ( acc == 5 && op[i].type == 1 )
+                    {
+                        rev = i;
+                    }
+                }
+            }
+            if ( ( fwd == 0 && rev == 0 ) || ( fwd != 0 && rev != 0 ) )
+            {
+                for ( i = 0; i < ops; ++i )
+                {
+                    if ( op[ i ].type == 2 )
+                    {
+                        op[ i ].code = 'N';
+                        *CG_adjust += op[ i ].length;
+                    }
+                }
+                return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+            }
+        }
+        if ( fwd && op[ fwd ].type == 1 )
+        {
+            for ( i = ops, acc = 0; i > fwd + 1; )
+            {
+                --i;
+                if ( op[ i ].type != 2 )
+                {
+                    acc += op[ i ].length;
+                    if ( acc >= 10 )
+                    {
+                        if ( acc > 10 )
+                        {
+                            unsigned const r = 10 + op[ i ].length - acc;
+                            unsigned const l = op[ i ].length - r;
+                            
+                            if ( ops + 2 >= maxOps )
+                                return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+                            memmove( &op[ i + 2 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+                            ops += 2;
+                            op[ i + 2 ].length = r;
+                            op[ i ].length = l;
+                            
+                            op[ i + 1 ].length = 0;
+                            op[ i + 1 ].type = 2;
+                            op[ i + 1 ].code = 'N';
+                            i += 2;
+                        }
+                        else if ( i - 1 > fwd )
+                        {
+                            if ( op[ i - 1 ].type == 2 )
+                                 op[ i - 1 ].code = 'N';
+                            else
+                            {
+                                if ( ops + 1 >= maxOps )
+                                    return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+                                memmove( &op[ i + 1 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+                                ops += 1;
+                                op[ i ].length = 0;
+                                op[ i ].type = 2;
+                                op[ i ].code = 'N';
+                                i += 1;
+                            }
+                        }
+                        acc = 0;
+                    }
+                }
+            }
+            /** change I to B+M **/
+            op[ fwd ].code = 'B';
+            memmove( &op[ fwd + 1 ], &op[ fwd ], ( ops - fwd ) * sizeof( op[ 0 ] ) );
+            ops += 1;
+            op[ fwd + 1 ].code = 'M';
+            *opCnt = ops;
+            /** set the gaps now **/
+            for ( gapno = 3, i = ops; gapno > 1 && i > 0; )
+            {
+                --i;
+                if ( op[ i ].code == 'N' )
+                    gap[ --gapno ] = i;
+            }
+            gap[ 0 ] = fwd;
+            print_CG_cigar( __LINE__, op, ops, gap );
+            return 0;
+        }
+        if ( rev && op[ rev ].type == 1 )
+        {
+            for ( acc = i = 0; i < rev; ++i )
+            {
+                if ( op[ i ].type != 2 )
+                {
+                    acc += op[ i ].length;
+                    if ( acc >= 10 )
+                    {
+                        if ( acc > 10 )
+                        {
+                            unsigned const l = 10 + op[ i ].length - acc;
+                            unsigned const r = op[ i ].length - l;
+                            
+                            if ( ops + 2 >= maxOps )
+                                return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+                            memmove( &op[ i + 2 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+                            ops += 2;
+                            op[ i + 2 ].length = r;
+                            op[ i ].length = l;
+                            
+                            op[ i + 1 ].length = 0;
+                            op[ i + 1 ].type = 2;
+                            op[ i + 1 ].code = 'N';
+                            rev += 2;
+                            i += 2;
+                        }
+                        else if ( i + 1 < rev )
+                        {
+                            if ( op[ i + 1 ].type == 2)
+                                 op[ i + 1 ].code = 'N';
+                            else
+                            {
+                                if ( ops + 1 >= maxOps )
+                                    return RC( rcExe, rcData, rcReading, rcBuffer, rcInsufficient );
+                                memmove( &op[ i + 1 ], &op[ i ], ( ops - i ) * sizeof( op[ 0 ] ) );
+                                ops += 1;
+                                op[ i + 1 ].length = 0;
+                                op[ i + 1 ].type = 2;
+                                op[ i + 1 ].code = 'N';
+                                rev += 1;
+                                i += 1;
+                            }
+                        }
+                        acc = 0;
+                    }
+                }
+            }
+            for ( gapno = 3, i = 0; gapno > 1 && i < ops; ++i )
+            {
+                if ( op[ i ].code == 'N' )
+                    gap[ --gapno ] = i;
+            }
+            gap[ 0 ] = rev;
+            op[ rev ].code = 'B';
+            memmove( &op[ rev + 1 ], &op[ rev ], ( ops - rev ) * sizeof( op[ 0 ] ) );
+            ops += 1;
+            op[ rev + 1 ].code = 'M';
+            *opCnt = ops;
+            print_CG_cigar( __LINE__, op, ops, gap );
+            return 0;
+        }
+    }
+    return RC( rcExe, rcData, rcReading, rcFormat, rcNotFound ); /* CG pattern not found */
+}
+
+
+static rc_t GenerateCGData( SCol cols[], unsigned style )
+{
+    rc_t rc = 0;
+    
+    memset( &cols[ alg_CG_TAGS_STR], 0, sizeof( cols[ alg_CG_TAGS_STR ] ) );
+    
+    if ( cols[ alg_READ ].len == 35 && cols[ alg_SAM_QUALITY ].len == 35 )
+    {
+        static char newCIGAR[ 35 * 11 ];
+        static int32_t newEditDistance;
+        unsigned gap[ 3 ] = { 0, 0, 0 };
+        cgOp cigOp[ 35 ];
+        unsigned opCnt;
+        unsigned i;
+        unsigned j;
+        size_t sz;
+        unsigned S_adjust = 0;
+        unsigned CG_adjust = 0;
+        unsigned const read = cols[ alg_SEQ_READ_ID ].len && cols[ alg_REVERSED ].len ? cols[ alg_SEQ_READ_ID ].base.coord1[ 0 ] : 0;
+        bool const reversed = cols[ alg_REVERSED ].len ? cols[ alg_REVERSED ].base.u8[ 0 ] : false;
+        
+        rc = CIGAR_to_CG_Ops( cigOp, sizeof( cigOp ) / sizeof( cigOp[ 0 ] ), &opCnt, gap,
+                              cols[ alg_CIGAR ].base.str, cols[ alg_CIGAR ].len,
+                              &S_adjust, &CG_adjust, read, reversed );
+        if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcFormat )
+        {
+            rc = 0;
+            if ( style == 1 )
+                goto CLEAN_CIGAR;
+            else
+                goto PRINT_CIGAR;
+        }
+        if ( rc != 0 )
+            return 0;
+
+        if ( CG_adjust == 0 )
+            CG_adjust = ( gap[ 0 ] < opCnt ? cigOp[ gap[ 0 ] ].length : 0 )
+                      + ( gap[ 1 ] < opCnt ? cigOp[ gap[ 1 ] ].length : 0 )
+                      + ( gap[ 2 ] < opCnt ? cigOp[ gap[ 2 ] ].length : 0 );
+
+        print_CG_cigar( __LINE__, cigOp, opCnt, NULL );
+        if ( style == 1 )
+        {
+            static char newSeq[ 35 ];
+            static char newQual[ 35 ];
+            static char tags[ 35*22 + 1 ];
+            unsigned const B_len = cigOp[ gap[ 0 ] ].length;
+            unsigned const B_at = gap[ 0 ] < gap[ 2 ] ? 5 : 30;
+            
+            if ( 0 < B_len && B_len < 5 )
+            {
+                memcpy( newSeq, cols[ alg_READ ].base.v, 35 );
+                memcpy( newQual, cols[ alg_SAM_QUALITY ].base.v, 35 );
+                
+                cols[ alg_CG_TAGS_STR ].base.v = tags;
+                
+                cols[ alg_READ ].base.v = newSeq;
+                cols[ alg_READ ].len = 35 - B_len;
+                
+                cols[ alg_SAM_QUALITY ].base.v = newQual;
+                cols[ alg_SAM_QUALITY ].len = 35 - B_len;
+                
+                /* nBnM -> nB0M */
+                cigOp[ gap[ 0 ] + 1 ].length -= B_len;
+                if ( gap[ 0 ] < gap[ 2 ] )
+                {
+                    rc = string_printf( tags, sizeof( tags ), &sz, "\tGC:Z:%uS%uG%uS\tGS:Z:%.*s\tGQ:Z:%.*s",
+                        5 - B_len, B_len, 30 - B_len, 2 * B_len, &newSeq[ 5 - B_len ], 2 * B_len, &newQual[ 5 - B_len ] );
+                    if ( rc == 0 )
+                    {
+                        cols[ alg_CG_TAGS_STR ].len = sz;
+                    }
+                    memmove( &cigOp[ gap[ 0 ] ],
+                             &cigOp[ gap[ 0 ] + 1 ],
+                             ( opCnt - ( gap[ 0 ] + 1 ) ) * sizeof( cigOp[ 0 ] ) );
+                    --opCnt;
+                }
+                else
+                {
+                    rc = string_printf( tags, sizeof( tags ), &sz, "\tGC:Z:%uS%uG%uS\tGS:Z:%.*s\tGQ:Z:%.*s",
+                        30 - B_len, B_len, 5 - B_len, 2 * B_len, &newSeq[ 30 - B_len ], 2 * B_len, &newQual[ 30 - B_len ] );
+                    if ( rc == 0 )
+                    {
+                        cols[ alg_CG_TAGS_STR ].len = sz;
+                    }
+                    memmove( &cigOp[ gap[ 0 ] ],
+                             &cigOp[ gap[ 0 ] + 1 ],
+                             ( opCnt - ( gap[ 0 ] + 1 ) ) * sizeof( cigOp[ 0 ] ) );
+                    --opCnt;
+                }
+                if ( rc == 0 )
+                {
+                    for ( i = B_at; i < B_at + B_len; ++i )
+                    {
+                        int const Lq = newQual[ i - B_len ];
+                        int const Rq = newQual[ i ];
+
+                        if ( Lq <= Rq )
+                        {
+                            newSeq[ i - B_len ] = newSeq[ i ];
+                            newQual[ i - B_len ] = Rq;
+                        }
+                        else
+                        {
+                            newSeq[ i ] = newSeq[ i - B_len ];
+                            newQual[ i ] = Lq;
+                        }
+                    }
+                    memmove( &newSeq [ B_at ], &newSeq [ B_at + B_len ], 35 - B_at - B_len );
+                    memmove( &newQual[ B_at ], &newQual[ B_at + B_len ], 35 - B_at - B_len );
+                }
+            }
+            else
+            {
+                int len = cigOp[ gap[ 0 ] ].length;
+                
+                cigOp[ gap[ 0 ] ].code = 'I';
+                for (i = gap[0] + 1; i < opCnt && len > 0; ++i) {
+                    if (cigOp[i].length <= len){
+                        len -= cigOp[i].length;
+                        cigOp[i].length = 0;
+                    }
+                    else {
+                        cigOp[i].length -= len;
+                        len = 0;
+                    }
+                }
+                CG_adjust -= cigOp[ gap[ 0 ] ].length;
+            }
+        }
+        if ( rc == 0 )
+        {
+        PRINT_CIGAR:
+        CLEAN_CIGAR:
+            print_CG_cigar( __LINE__, cigOp, opCnt, NULL );
+            /* remove zero length ops */
+            for ( j = i = 0; i < opCnt; )
+            {
+                if ( cigOp[ j ].length == 0)
+                {
+                    ++j;
+                    --opCnt;
+                    continue;
+                }
+                cigOp[ i++ ] = cigOp[ j++ ];
+            }
+            print_CG_cigar( __LINE__, cigOp, opCnt, NULL );
+            if ( cols[ alg_EDIT_DISTANCE ].len )
+            {
+                int const edit_distance = cols[ alg_EDIT_DISTANCE ].base.i32[ 0 ];
+                int const adjusted = edit_distance + S_adjust - CG_adjust;
+            
+                newEditDistance = adjusted > 0 ? adjusted : 0;
+                SAM_DUMP_DBG( 4, ( "NM: before: %u, after: %u(+%u-%u)\n", edit_distance, newEditDistance, S_adjust, CG_adjust ) );
+                cols[ alg_EDIT_DISTANCE ].base.v = &newEditDistance;
+                cols[ alg_EDIT_DISTANCE ].len = 1;
+            }
+            /* merge adjacent ops */
+            for ( i = opCnt; i > 1; )
+            {
+                --i;
+                if ( cigOp[ i - 1 ].code == cigOp[ i ].code )
+                {
+                    cigOp[ i - 1 ].length += cigOp[ i ].length;
+                    memmove( &cigOp[ i ], &cigOp[ i + 1 ], ( opCnt - 1 - i ) * sizeof( cigOp[ 0 ] ) );
+                    --opCnt;
+                }
+            }
+            print_CG_cigar( __LINE__, cigOp, opCnt, NULL );
+            for ( i = j = 0; i < opCnt && rc == 0; ++i )
+            {
+                rc = string_printf( &newCIGAR[ j ], sizeof( newCIGAR ) - j, &sz, "%u%c", cigOp[ i ].length, cigOp[ i ].code);
+                j += sz;
+            }
+            cols[ alg_CIGAR ].base.v = newCIGAR;
+            cols[ alg_CIGAR ].len = j;
+        }
+    }
+    return rc;
+}
+
+
+static bool DumpAlignedRow( SAM_dump_ctx_t *const ctx, DataSource *const ds,
+                    int64_t row,
+                    bool const primary,
+                    int const cg_style,
+                    rc_t *prc )
+{
+    rc_t rc = 0;
+    
+    /* if SEQ_SPOT_ID is open then skip rows with no SEQ_SPOT_ID */
+    if ( ds->cols[ alg_SEQ_SPOT_ID ].idx )
+    {
+        rc = Cursor_Read( ds, row, alg_SEQ_SPOT_ID, 1 );
+        if ( rc != 0 )
+        {
+            if ( !( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound ) )
+                *prc = rc;
+            return false;
+        }
+        if ( ds->cols[ alg_SEQ_SPOT_ID ].len == 0 ||
+             ds->cols[ alg_SEQ_SPOT_ID ].base.i64[ 0 ] == 0 )
+            return false;
+    }
+
+    /* skip rows that fail mate distance filter */
+    if ( param->mp_dist_qty != 0 || param->mp_dist_unknown )
+    {
+        rc = Cursor_Read( ds, row, alg_TEMPLATE_LEN, 1 );
+        if ( rc != 0 )
+        {
+            if ( !( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound ) )
+                *prc = rc;
+            return false;
+        }
+        if ( !AlignDistanceFilter( ds->cols ) )
+            return false;
+    }
+
+    rc = Cursor_ReadAlign( &ds->curs, row, ds->cols, 0 );
+    if ( rc != 0 )
+    {
+        if ( !( GetRCObject( rc ) == rcRow && GetRCState( rc ) == rcNotFound ) )
+            *prc = rc;
+        return false;
+    }
+
+    if ( param->fasta || param->fastq )
+    {
+        unsigned const read_id = ds->cols[ alg_SEQ_READ_ID ].base.v ? ds->cols[ alg_SEQ_READ_ID ].base.coord1[ 0 ] : 0;
+        
+        rc = DumpAlignedFastX( ctx->pri.cols, row, read_id, primary, false );
+    }
+    else
+    {
+        if ( cg_style != 0 )
+        {
+            rc = GenerateCGData( ds->cols, cg_style );
+            if ( rc != 0 )
+            {
+                *prc = rc;
+                return false;
+            }
+        }
+        rc = DumpAlignedSAM(ctx, ds, row, ctx->readGroup, 0 );
+    }
+    *prc = rc;
+    return true;
+}
+
+
+static rc_t DumpAlignedRowList( SAM_dump_ctx_t *const ctx, DataSource *const ds, SCol const *const ids,
+                        int64_t *rcount,
+                        bool const primary,
+                        int const cg_style,
+                        bool const noFilter )
+{
+    rc_t rc;
+    unsigned i;
+    unsigned const n = ids->len;
+
+    for ( i = 0; ( rc = Quitting() ) == 0 && i < n; ++i )
+    {
+        int64_t const row = ids->base.i64[ i ];
+
+        if ( ! noFilter )
+            rc = Cursor_Read( ds, row, alg_REGION_FILTER, ~(unsigned)0 );
+
+        if ( rc == 0 )
+        {
+            if ( noFilter || AlignRegionFilter(ds->cols) )
+            {
+                if ( DumpAlignedRow( ctx, ds, row, primary, cg_style, &rc ) )
+                    ++*rcount;
+                if ( rc != 0 )
+                    break;
+            }
+        }
+    }
+    return rc;
+}
+
+static rc_t DumpAlignedRowListIndirect( SAM_dump_ctx_t *const ctx,
+                                DataSource *const indirectSource,
+                                DataSource *const directSource,
+                                SCol const *const directIDs,
+                                int64_t *rcount,
+                                bool const primary,
+                                int const cg_style )
+{
+    unsigned i;
+
+    for ( i = 0; i < directIDs->len; ++i )
+    {
+        int64_t const row = directIDs->base.i64[ i ];
+        rc_t rc = Cursor_Read( directSource, row, alg_REGION_FILTER, ~(unsigned)0 );
+        
+        if ( rc != 0 )
+            return rc;
+        
+        if ( !AlignRegionFilter( directSource->cols ) )
+            continue;
+            
+        rc = Cursor_Read( directSource, row, alg_EVIDENCE_ALIGNMENT_IDS, 1 );
+        if ( rc != 0 )
+            return rc;
+        
+        rc = DumpAlignedRowList( ctx, indirectSource, &directSource->cols[ alg_EVIDENCE_ALIGNMENT_IDS ],
+                                 rcount, primary, cg_style, true );
+        if ( rc != 0 )
+            return rc;
+    }
+    return 0;
+}
+
+
+enum e_tables
+{
+    primary_alignment,
+    secondary_alignment,
+    evidence_interval,
+    evidence_alignment
+};
+
+enum e_IDS_opts
+{
+    primary_IDS             = ( 1 << primary_alignment ),
+    secondary_IDS           = ( 1 << secondary_alignment ),
+    evidence_interval_IDS   = ( 1 << evidence_interval ),
+    evidence_alignment_IDS  = ( 1 << evidence_alignment )
+};
+
+
+static rc_t DumpAlignedRowList_cb( SAM_dump_ctx_t *const ctx, TAlignedRegion const *const rgn,
+                                   int options, int which, int64_t *rcount, SCol const *const IDS )
+{
+    /*SAM_DUMP_DBG(2, ("row %s index range is [%lu:%lu] pos %lu\n",
+        param->region[r].name, start, start + count - 1, cur_pos));*/
+    switch ( which )
+    {
+    case primary_IDS:
+        return DumpAlignedRowList( ctx, &ctx->pri, IDS, rcount, true, param->cg_style, false );
+
+    case secondary_IDS:
+        return DumpAlignedRowList( ctx, &ctx->sec, IDS, rcount, false, param->cg_style, false );
+
+    case evidence_interval_IDS:
+        {
+            rc_t rc = 0;
+
+            if ( ( options & evidence_interval_IDS ) != 0 )
+                rc = DumpAlignedRowList( ctx, &ctx->evi, IDS, rcount, true, 0, false );
+
+            if ( rc == 0 && ( options & evidence_alignment_IDS ) != 0 )
+                rc = DumpAlignedRowListIndirect( ctx, &ctx->eva, &ctx->evi, IDS, rcount, true, param->cg_style );
+
+            return rc;
+        }
+    }
+    return RC( rcExe, rcTable, rcReading, rcParam, rcUnexpected );
+}
+
+
+typedef struct CigOps{
+	char op;
+	int8_t	 ref_sign; /*** 0;+1;-1; ref_offset = ref_sign * offset ***/
+	int8_t	 seq_sign; /*** 0;+1;-1; seq_offset = seq_sign * offset ***/
+	uint32_t oplen;
+} CigOps;
+
+static void SetCigOp(CigOps *dst,char op,uint32_t oplen)
+{
+	dst->op    = op;
+	dst->oplen = oplen;
+	switch(op) { /*MX= DN B IS PH*/
+	 case 'M': case 'X': case '=':
+		dst->ref_sign=+1;
+		dst->seq_sign=+1;
+		break;
+	 case 'D': case 'N':
+		dst->ref_sign=+1;
+                dst->seq_sign= 0;
+                break;
+	 case 'B': 
+		dst->ref_sign=-1;
+                dst->seq_sign= 0;
+                break;
+	 case 'S': case 'I':
+		dst->ref_sign= 0;
+                dst->seq_sign=+1;
+                break;
+	 case 'P': case 'H':
+	  case 0: /** terminating op **/
+		dst->ref_sign= 0;
+                dst->seq_sign= 0;
+                break;
+	  default:
+		assert(0);
+                break;
+	}
+}
+
+static unsigned ExplodeCIGAR( CigOps dst[], unsigned len, char const cigar[], unsigned ciglen )
+{
+    unsigned i;
+    unsigned j;
+    int opLen;
+    
+    for ( i = j = opLen=0; i < ciglen; i++) {
+	if(isdigit(cigar[i])){
+		opLen = opLen * 10 + cigar[i] - '0';
+	} else {
+		assert(isalpha(cigar[i]));
+		SetCigOp(dst+j,cigar[i],opLen);
+		opLen=0;
+		j++;
+	}
+    }
+    SetCigOp(dst+j,0,0);
+    j++;
+    return j;
+}
+
+
+#define CG_CIGAR_STRING_MAX (35 * 11 + 1)
+
+
+#if 0
+static unsigned FormatCIGAR( char dst[], unsigned cp, unsigned oplen, int opcode )
+{
+    size_t sz;
+    string_printf( dst + cp, CG_CIGAR_STRING_MAX - cp, &sz, "%u%c", oplen, opcode );
+    return sz;
+}
+
+
+static unsigned DeletedCIGAR( char dst[], unsigned const cp, int opcode, unsigned D,
+                              uint32_t const Op[], int ri, unsigned len )
+{
+    unsigned i;
+    unsigned curPos = 0;
+    int curOp = opcode;
+    unsigned oplen = 0;
+    
+    for ( i = 0; i < D && ri < len; ++i, ++ri )
+    {
+        uint32_t const op = Op[ ri ];
+        int const d = op >> 2;
+        int const m = op & 1;
+        int const nxtOp = m ? opcode : 'P';
+        
+        if ( d != 0 )
+        {
+            if ( oplen != 0 )
+                curPos += FormatCIGAR( dst, curPos + cp, oplen, curOp );
+            curPos += FormatCIGAR( dst, cp, d, 'D' );
+            oplen = 0;
+        }
+        if ( oplen == 0 || nxtOp == curOp )
+        {
+            ++oplen;
+        }
+        else
+        {
+            curPos += FormatCIGAR( dst, curPos + cp, oplen, curOp );
+            oplen = 1;
+        }
+        curOp = nxtOp;
+    }
+
+    if ( oplen != 0 && curOp != opcode)
+    {
+        curPos += FormatCIGAR( dst, curPos + cp, oplen, curOp );
+        oplen = 0;
+    }
+    if ( i < D )
+        oplen += D - i;
+    if ( oplen )
+        curPos += FormatCIGAR( dst, curPos + cp, oplen, opcode );
+    return curPos;
+}
+#endif
+
+static char merge_M_type_ops(char a,char b)
+{ /*MX=*/
+	char c=0;
+	switch(b){
+	 case 'X':
+		switch(a){
+		 case '=': c='X'; break;
+		 case 'X': c='M'; break; /**we don't know - 2X may create '=' **/
+		 case 'M': c='M'; break;
+		}
+		break;
+	 case 'M':
+		c='M';
+		break;
+	 case '=':
+		c=a;
+		break;
+	}
+	assert(c!=0);
+	return c;
+}
+
+
+static unsigned CombineCIGAR( char dst[], CigOps const seqOp[], unsigned seq_len,
+                              int refPos, CigOps const refOp[], unsigned ref_len )
+{
+    bool     done=false;
+    unsigned ciglen=0,last_ciglen=0;
+    char     last_cig_op;
+    uint32_t last_cig_oplen=0;
+    int	     si=0,ri=0;
+    CigOps   seq_cop={0,0,0,0},ref_cop={0,0,0,0};
+    int	     seq_pos=0; /** seq_pos is tracked roughly - with every extraction from seqOp **/
+    int      ref_pos=0; /** ref_pos is tracked precisely - with every delta and consumption in cigar **/
+    int	     delta=refPos; /*** delta in relative positions of seq and ref **/
+			   /*** when delta < 0 - rewind or extend the reference ***/
+			   /*** wher delta > 0 - skip reference  ***/
+#define MACRO_BUILD_CIGAR(OP,OPLEN) \
+	if( last_cig_oplen > 0 && last_cig_op == OP){							\
+                last_cig_oplen += OPLEN;								\
+                ciglen = last_ciglen + sprintf(dst+last_ciglen,"%d%c",last_cig_oplen,last_cig_op);	\
+        } else {											\
+                last_ciglen = ciglen;									\
+                last_cig_oplen = OPLEN;									\
+                last_cig_op    = OP;									\
+                ciglen = ciglen      + sprintf(dst+last_ciglen,"%d%c",last_cig_oplen,last_cig_op);	\
+        }
+    while(!done){
+	while(delta < 0){ 
+		ref_pos += delta; /** we will make it to back up this way **/
+		if(ri > 0){ /** backing up on ref if possible ***/
+			int avail_oplen = refOp[ri-1].oplen - ref_cop.oplen;
+			if(avail_oplen > 0 ){
+				if((-delta) <= avail_oplen * ref_cop.ref_sign){ /*** rewind within last operation **/
+					ref_cop.oplen -= delta;
+					delta -= delta * ref_cop.ref_sign;
+				} else { /*** rewind the whole ***/
+					ref_cop.oplen += avail_oplen;
+					delta += avail_oplen * ref_cop.ref_sign;
+				}
+			} else {
+				ri--;
+				/** pick the previous as used up **/
+				ref_cop = refOp[ri-1];
+				ref_cop.oplen =0; 
+			}
+		} else { /** extending the reference **/
+			SetCigOp(&ref_cop,'=',ref_cop.oplen - delta);
+			delta = 0;
+		}
+		ref_pos -= delta; 
+	}
+	if(ref_cop.oplen == 0){ /*** advance the reference ***/
+		ref_cop = refOp[ri++];
+		if(ref_cop.oplen == 0) { /** extending beyond the reference **/
+			SetCigOp(&ref_cop,'=',1000);
+		}
+		assert(ref_cop.oplen > 0 );
+	}
+	if(delta > 0){ /***  skip refOps ***/
+		ref_pos += delta; /** may need to back up **/
+		if(delta >=  ref_cop.oplen){ /** full **/
+			delta -= ref_cop.oplen * ref_cop.ref_sign;
+			ref_cop.oplen = 0;
+		} else { /** partial **/
+			ref_cop.oplen -= delta;
+			delta -= delta * ref_cop.ref_sign;
+		}
+		ref_pos -= delta; /** if something left - restore ***/
+		continue;
+	}
+	/*** seq and ref should be synchronized here **/
+	assert(delta == 0);
+	if(seq_cop.oplen == 0){ /*** advance sequence ***/
+		if(seq_pos < seq_len){
+			seq_cop = seqOp[si++];
+			assert(seq_cop.oplen > 0 );
+			seq_pos += seq_cop.oplen * seq_cop.seq_sign;
+		} else {
+			done=true;
+		}
+	}
+        if(!done){
+		int seq_seq_step = seq_cop.oplen * seq_cop.seq_sign; /** sequence movement**/
+		int seq_ref_step = seq_cop.oplen * seq_cop.ref_sign; /** influence of sequence movement on intermediate reference **/
+		int ref_seq_step = ref_cop.oplen * ref_cop.seq_sign; /** movement of the intermediate reference ***/
+		int ref_ref_step = ref_cop.oplen * ref_cop.ref_sign; /** influence of the intermediate reference movement on final reference ***/
+		assert( ref_ref_step >= 0); /** no B in the reference **/
+		if( seq_ref_step <= 0){ /** BSIPH in the sequence against anything ***/
+			MACRO_BUILD_CIGAR( seq_cop.op, seq_cop.oplen );
+			seq_cop.oplen = 0;
+			delta = seq_ref_step; /** if negative - will force rewind next cycle **/
+		} else if(ref_ref_step <= 0){ /** MX=DN against SIPH in the reference***/
+			if(ref_seq_step == 0){ /** MX=DN against PH **/
+				MACRO_BUILD_CIGAR( ref_cop.op,ref_cop.oplen);
+				ref_cop.oplen = 0;
+			} else {
+				int min_len = (seq_cop.oplen<ref_cop.oplen)?seq_cop.oplen:ref_cop.oplen;
+				if(seq_seq_step == 0){ /** DN agains SI **/
+					MACRO_BUILD_CIGAR('P',min_len);
+				} else { /** MX= agains SI ***/
+					MACRO_BUILD_CIGAR( ref_cop.op,min_len);
+				}
+				seq_cop.oplen -= min_len;
+				ref_cop.oplen -= min_len;
+			}
+		} else { /*MX=DN  against MX=DN*/
+			int min_len = (seq_cop.oplen<ref_cop.oplen)?seq_cop.oplen:ref_cop.oplen;
+			if(seq_seq_step == 0){ /* DN against MX=DN */
+				if(ref_seq_step == 0){ /** padding DN against DN **/
+					MACRO_BUILD_CIGAR('P',min_len);
+					ref_cop.oplen -= min_len;
+					seq_cop.oplen -= min_len;
+				} else { /* DN against MX= **/
+					MACRO_BUILD_CIGAR(seq_cop.op,min_len);
+					seq_cop.oplen -= min_len;
+				}
+			} else if (ref_cop.seq_sign == 0){ /* MX= against DN - always wins */
+				MACRO_BUILD_CIGAR(ref_cop.op,min_len);
+				ref_cop.oplen -= min_len;
+			} else { /** MX= against MX= ***/
+				MACRO_BUILD_CIGAR(merge_M_type_ops(seq_cop.op,ref_cop.op),min_len);
+				ref_cop.oplen -= min_len;
+				seq_cop.oplen -= min_len;
+			}
+			ref_pos += min_len;
+		}
+        }
+    }
+    return ciglen;
+}
+
+
+static rc_t DumpCGSAM( SAM_dump_ctx_t *const ctx, TAlignedRegion const *const rgn, int options,
+                       int which, int64_t *rows, SCol const *const ids )
+{
+    if ( which == evidence_interval_IDS )
+    {
+        rc_t rc = 0;
+        unsigned i;
+        
+        for ( i = 0; i < ids->len; ++i )
+        {
+            int64_t const rowInterval = ids->base.i64[ i ];
+
+            rc = Cursor_Read( &ctx->evi, rowInterval, alg_REGION_FILTER, ~(0u) );
+            if ( rc == 0 )
+            {
+                if ( AlignRegionFilter( ctx->evi.cols ) )
+                {
+                    rc = Cursor_ReadAlign( &ctx->evi.curs, rowInterval, ctx->evi.cols, 0 );
+                    if ( rc == 0 )
+                    {
+                        unsigned const evidence = ctx->evi.cols[ alg_EVIDENCE_ALIGNMENT_IDS ].len;
+                        if ( evidence != 0 )
+                        {
+                            INSDC_coord_len const *const refLen = ctx->evi.cols[ alg_READ_LEN ].base.coord_len;
+                            INSDC_coord_len const *const cigLen = ctx->evi.cols[ alg_CIGAR_LEN ].base.coord_len;
+                            unsigned const ploids = ctx->evi.cols[ alg_CIGAR_LEN ].len;
+                            unsigned const totalIntervalReadLen = ctx->evi.cols[ alg_READ ].len;
+			    CigOps  refCigOps_stack[1024];
+			    CigOps *refCigOps_heap=NULL;
+                            CigOps *refCigOps;
+
+			    if( totalIntervalReadLen > 1000){
+				refCigOps=refCigOps_heap = malloc( sizeof( refCigOps[ 0 ] ) * (totalIntervalReadLen+ploids) );
+			    } else {
+				refCigOps=refCigOps_stack;
+			    }
+                            
+                            if ( refCigOps != NULL )
+                            {
+                                unsigned j;
+                                unsigned start;
+                                unsigned cigop_starts[256];
+                                
+                                assert(ploids < 256);
+                                
+                                for ( start = j = 0, cigop_starts[0]=0; j < ploids; ++j )
+                                {
+                                    unsigned len = cigLen[ j ];
+                                    cigop_starts[j+1] = cigop_starts[j] + ExplodeCIGAR( refCigOps + cigop_starts[j], refLen[ j ], 
+                                                                                       ctx->evi.cols[ alg_CIGAR ].base.str + start, len );
+                                    start += len;
+                                }
+                                
+                                for ( j = 0; j < evidence; ++j )
+                                {
+                                    int64_t const rowAlign = ctx->evi.cols[ alg_EVIDENCE_ALIGNMENT_IDS ].base.i64[ j ];
+                                    
+                                    rc = Cursor_ReadAlign( &ctx->eva.curs, rowAlign, ctx->eva.cols, 0 );
+                                    if ( rc == 0 )
+                                    {
+                                        if(param->cg_style != 0)
+                                            rc = GenerateCGData( ctx->eva.cols, param->cg_style );
+                                        if ( rc == 0 )
+                                        {
+                                            int const ploidy = ctx->eva.cols[ alg_REF_PLOIDY ].base.u32[ 0 ];
+                                            int const readLen = ctx->eva.cols[ alg_READ ].len;
+                                            INSDC_coord_zero refPos = ctx->eva.cols[ alg_REF_POS ].base.coord0[ 0 ];
+                                            CigOps op[ 36 ];
+                                            char cigbuf[ CG_CIGAR_STRING_MAX ];
+                                            
+                                            memset( cigbuf, 0, CG_CIGAR_STRING_MAX );
+                                            ExplodeCIGAR( op, readLen, ctx->eva.cols[ alg_CIGAR ].base.str,
+                                                         ctx->eva.cols[ alg_CIGAR ].len );
+                                            ctx->eva.cols[ alg_CIGAR ].len = CombineCIGAR( cigbuf, op, readLen, refPos, 
+                                                                                          refCigOps + cigop_starts[ ploidy - 1 ], refLen[ ploidy - 1 ] );
+                                            ctx->eva.cols[ alg_CIGAR ].base.str = cigbuf;
+                                            ctx->eva.cols[ alg_REF_POS ].base.v = &refPos;
+                                            refPos += ctx->evi.cols[ alg_REF_POS ].base.coord0[ 0 ] ;
+			  		    if(refPos < 0){
+						ReferenceObj const *r = NULL;
+    						rc = ReferenceList_Find( gRefList, &r,
+									ctx->evi.cols[ alg_REF_NAME ].base.str,
+									ctx->evi.cols[ alg_REF_NAME ].len );
+						if(rc == 0){
+							bool circular=false;
+							rc=ReferenceObj_Circular(r, &circular);
+							if(rc == 0 && circular){
+								INSDC_coord_len len;
+								rc=ReferenceObj_SeqLength(r,&len);
+								if(rc == 0)
+									refPos += len;
+							}
+							ReferenceObj_Release(r);
+						}
+					    }
+                                            rc = DumpAlignedSAM( ctx, &ctx->eva, rowAlign, ctx->readGroup, 1 );
+                                            ++*rows;
+                                        }
+                                        else
+                                            break;
+                                    }
+                                    else
+                                        break;
+                                }
+				if(refCigOps_heap) free( refCigOps_heap );
+                            }
+                            else
+                                rc = RC( rcExe, rcTable, rcReading, rcMemory, rcExhausted );
+                        }
+                    }
+                }
+            }
+            else
+                break;
+            rc = rc ? rc : Quitting();
+            if ( rc != 0 )
+                break;
+        }
+        return rc;
+    }
+    return RC( rcExe, rcTable, rcReading, rcParam, rcUnexpected );
+}
+
+
+static rc_t ForEachAlignedRegion( SAM_dump_ctx_t *const ctx, enum e_IDS_opts const Options,
+    rc_t ( *user_func )( SAM_dump_ctx_t *ctx, TAlignedRegion const *rgn, int options, int which, int64_t *rows, SCol const *IDS ) )
+{
+    SCol cols[] =
+    {
+        { "MAX_SEQ_LEN", 0, { NULL }, 0, false },
+        { "OVERLAP_REF_POS", 0, { NULL }, 0, true },
+        { "PRIMARY_ALIGNMENT_IDS", 0, { NULL }, 0, false },
+        { "SECONDARY_ALIGNMENT_IDS", 0, { NULL }, 0, true },
+        { "EVIDENCE_INTERVAL_IDS", 0, { NULL }, 0, true }, 
+        { NULL, 0, { NULL }, 0, false }
+    };
+    enum eref_col
+    {
+        ref_MAX_SEQ_LEN = 0,
+        ref_OVERLAP_REF_LEN,
+        ref_PRIMARY_ALIGNMENT_IDS,
+        ref_SECONDARY_ALIGNMENT_IDS,
+        ref_EVIDENCE_INTERVAL_IDS
+    };
+
+    KIndex const *iname = NULL;
+    int64_t rows = 0;
+    rc_t rc = 0;
+    int options = Options & 7;
+
+    if ( Options & evidence_alignment_IDS )
+        options |= evidence_interval_IDS;
+
+    if ( ( options & primary_IDS ) == 0 )
+        cols[ ref_PRIMARY_ALIGNMENT_IDS ].name = "";
+    if ( ( options & secondary_IDS ) == 0 )
+        cols[ ref_SECONDARY_ALIGNMENT_IDS ].name = "";
+    if ( ( options & evidence_interval_IDS ) == 0 )
+        cols[ ref_EVIDENCE_INTERVAL_IDS ].name = "";
+    
+    ctx->ref.cols = cols;
+    
+    rc = VTableOpenIndexRead( ctx->ref.tbl.vtbl, &iname, "i_name" );
+    if ( rc == 0 )
+    {
+        rc = Cursor_Open( &ctx->ref.tbl, &ctx->ref.curs, ctx->ref.cols, NULL );
+        if ( rc == 0 )
+        {
+            int64_t rowid = 1;
+            uint64_t count = 0;
+            char refname[ 1024 ];
+            size_t sz;
+            
+            if ( ctx->ref.cols[ ref_PRIMARY_ALIGNMENT_IDS ].idx == 0 )
+                options &= ~primary_IDS;
+            if ( ctx->ref.cols[ ref_SECONDARY_ALIGNMENT_IDS ].idx == 0 )
+                options &= ~secondary_IDS;
+            if ( ctx->ref.cols[ ref_EVIDENCE_INTERVAL_IDS ].idx == 0 )
+                options &= ~evidence_interval_IDS;
+
+            /* new: if we have a list of regions, reset the their print-flag */
+            if ( param->region_qty > 0 )
+            {
+                unsigned r;
+                for ( r = 0; r < param->region_qty; ++r )
+                {
+                    param->region[ r ].printed = 0;
+                }
+            }
+
+            while ( ( rc = KIndexProjectText(iname, rowid + count, &rowid, &count, refname, sizeof( refname ), &sz ) ) == 0 )
+            {
+                bool include;
+                unsigned r;
+                unsigned max_to = UINT_MAX;
+                unsigned min_from = 0;
+                
+                for ( include = false, r = 0; r < param->region_qty; ++r )
+                {
+                    if ( sz == string_size( param->region[ r ].name ) &&
+                         memcmp( param->region[ r ].name, refname, sz ) == 0 )
+                    {
+                        include = true;
+                        max_to = param->region[ r ].max_to;
+                        min_from = param->region[ r ].min_from;
+                        param->region[ r ].printed++; /* new: mark a region as printed */
+                        break;
+                    }
+                }
+
+                if ( param->region_qty == 0 || include )
+                {
+                    int64_t const endrow_exclusive = rowid + count;
+                    unsigned m;
+                    unsigned k;
+                    
+                    for ( k = 0, m = 1; rc == 0 && k < 3; ++k, m <<= 1 )
+                    {
+                        if ( m & options )
+                        {
+                            unsigned lookback = 0;
+                            int64_t row;
+                            int32_t row_start_offset;
+                            unsigned pos;
+			    unsigned const maxseqlen = 5000; /***** TODO: this code is to be rewritten anyway ****/
+                            
+                            if ( param->region_qty )
+                            {
+                                if ( ctx->ref.cols[ ref_OVERLAP_REF_LEN ].idx )
+                                {
+                                    rc = Cursor_Read( &ctx->ref, rowid, 0, ~(0u) );
+                                    if ( rc != 0 )
+                                        break;
+                                    if ( ctx->ref.cols[ ref_OVERLAP_REF_LEN ].len > k )
+                                    {
+                                        unsigned const overlap = ctx->ref.cols[ ref_OVERLAP_REF_LEN ].base.coord0[ k ];
+                                        
+                                        if ( overlap != 0 )
+                                        {
+                                            
+                                            assert( overlap < rowid * maxseqlen );
+                                            lookback = ( rowid - ( overlap / maxseqlen ) );
+                                        }
+                                    }
+                                }
+                                else
+                                    lookback = 1;
+                            }
+			    row_start_offset = min_from/maxseqlen - lookback;
+			   if(row_start_offset < 0) row_start_offset=0;
+			    
+
+                            for ( pos = row_start_offset*maxseqlen, row = rowid + row_start_offset; rc == 0 && row < endrow_exclusive; ++row )
+                            {
+                                if ( row < 1 )
+                                {
+                                    row = 0;
+                                    continue;
+                                }
+                                rc = Cursor_Read( &ctx->ref, row, 0, ~(0u) );
+                                if ( rc != 0 )
+                                    break;
+                                if ( ctx->ref.cols[ ref_PRIMARY_ALIGNMENT_IDS + k ].len > 0 )
+                                    rc = user_func( ctx, &param->region[r], Options, m, &rows,
+                                                    &ctx->ref.cols[ ref_PRIMARY_ALIGNMENT_IDS + k ] );
+                                pos += ctx->ref.cols[ ref_MAX_SEQ_LEN ].base.u32[ 0 ];
+                                if ( pos >= max_to )
+                                    break;
+                                if ( param->test_rows != 0 && rows > param->test_rows )
+                                    break;
+                            }
+                        }
+                    }
+                }
+                if ( param->test_rows != 0 && rows > param->test_rows )
+                    break;
+                if ( rc != 0 )
+                    break;
+            } /* while */
+
+            /* new: walk the list of regions and report what was NOT printed ( found ) ... */
+            if ( param->region_qty > 0 && GetRCState( rc ) != rcCanceled )
+            {
+                unsigned r;
+                for ( r = 0; r < param->region_qty; ++r )
+                {
+                    if ( param->region[ r ].printed == 0 )
+                    {
+                        (void)PLOGMSG( klogWarn, ( klogWarn, "reference >$(a)< not found", "a=%s", param->region[ r ].name ) );
+                    }
+                }
+            }
+
+            if ( GetRCObject( rc ) == rcId && GetRCState( rc ) == rcNotFound )
+            {
+                rc = 0;
+            }
+
+        }
+    }
+    Cursor_Close( &ctx->ref.curs );
+    KIndexRelease( iname );
+    
+    return rc;
+}
+
+
+static rc_t DumpAlignedTable( SAM_dump_ctx_t *const ctx, DataSource *const ds,
+                              bool const primary, int const cg_style, unsigned *const rcount )
+{
+    unsigned i;
+    int64_t start;
+    uint64_t count;
+    rc_t rc = VCursorIdRange( ds->curs.vcurs, 0, &start, &count );
+    
+    if ( rc != 0 )
+        return rc;
+    for ( i = 0; i != (unsigned)count; ++i )
+    {
+        if ( DumpAlignedRow(ctx, ds, start + i, primary, cg_style, &rc ) )
+            ++*rcount;
+        if ( rc != 0 || ( rc = Quitting() ) != 0 )
+            return rc;
+        if ( param->test_rows && *rcount > param->test_rows )
+            break;
+    }
+    return 0;
+}
+
+
+static rc_t DumpUnsorted( SAM_dump_ctx_t *const ctx )
+{
+    rc_t rc = 0;
+    unsigned rcount;
+    
+    if ( rc == 0 && param->cg_evidence )
+    {
+        SAM_DUMP_DBG( 2, ( "%s EVIDENCE_INTERVAL\n", ctx->accession ) );
+        rcount = 0;
+        rc = DumpAlignedTable( ctx, &ctx->evi, false, 0, &rcount );
+        (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) allele sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+    }
+    if ( rc == 0 && param->cg_ev_dnb )
+    {
+        SAM_DUMP_DBG( 2, ( "%s EVIDENCE_ALIGNMENT\n", ctx->accession ) );
+        rcount = 0;
+        rc = DumpAlignedTable( ctx, &ctx->eva, false, param->cg_style, &rcount );
+        (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) support sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+    }
+    if ( rc == 0 && ctx->pri.curs.vcurs )
+    {
+        SAM_DUMP_DBG( 2, ( "%s PRIMARY_ALIGNMENT\n", ctx->accession ) );
+        rcount = 0;
+        rc = DumpAlignedTable( ctx, &ctx->pri, true, param->cg_style, &rcount );
+        (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) primary sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+    }
+    if ( rc == 0 && ctx->sec.curs.vcurs )
+    {
+        SAM_DUMP_DBG( 2, ( "%s SECONDARY_ALIGNMENT\n", ctx->accession ) );
+        rcount = 0;
+        rc = DumpAlignedTable( ctx, &ctx->sec, false, param->cg_style, &rcount );
+        (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) secondary sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+    }
+    return rc;
+}
+
+
+static rc_t DumpUnaligned( SAM_dump_ctx_t *const ctx, bool const aligned )
+{
+    rc_t rc = 0;
+    int64_t start = 0;
+    uint64_t count = 0;
+
+    rc = VCursorIdRange( ctx->seq.curs.vcurs, 0, &start, &count );
+    if ( rc == 0 )
+    {
+        uint64_t rcount = 0;
+        if ( param->test_rows != 0 && count > param->test_rows )
+        {
+            count = param->test_rows;
+        }
+        SAM_DUMP_DBG( 2, ( "%s SEQUENCE table range from %ld qty %lu\n", ctx->accession, start, count ) );
+        while ( count > 0 && rc == 0 )
+        {
+            uint32_t i;
+
+            if ( ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].idx == 0)
+            {
+                rc = DumpUnalignedReads( ctx, NULL, start, &rcount );
+            }
+            else
+            {
+                /* avoid reading whole sequence cursor data unnecessarily */
+                rc = Cursor_Read( &ctx->seq, start, seq_PRIMARY_ALIGNMENT_ID, ~(unsigned)0 );
+                if ( rc == 0 )
+                {
+                    /* find if its completely unaligned */
+                    int64_t min_prim_id = 0;
+                    bool has_unaligned = false;
+                    for ( i = 0; rc == 0 && i < ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].len; i++ )
+                    {
+                        int64_t x = ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[ i ];
+                        has_unaligned |= x == 0;
+                        if ( ( min_prim_id == 0 && x != 0 ) || min_prim_id < x )
+                        {
+                            min_prim_id = x;
+                        }
+                    }
+                    if ( min_prim_id == 0 )
+                    {
+                        rc = DumpUnalignedReads( ctx, NULL, start, &rcount );
+                    }
+                    else if ( has_unaligned && !param->unaligned_spots )
+                    {
+                        if ( rc == 0 )
+                        {
+#if USE_MATE_CACHE
+                            uint64_t val;
+                            rc = Cache_Get( &ctx->pri.curs, min_prim_id, &val );
+                            if ( rc == 0 )
+                            {
+                                ctx->pri.cols[ alg_REF_POS ].len = 0;
+                                Cache_Unpack( val, 0, &ctx->pri.curs, ctx->pri.cols );
+                                ctx->pri.cols[ alg_SEQ_SPOT_ID ].base.i64 = &start;
+                                ctx->pri.cols[ alg_SEQ_SPOT_ID ].len = 1;
+                                memcpy( &ctx->pri.cols[ alg_REF_NAME ], &ctx->pri.cols[ alg_MATE_REF_NAME ], sizeof( SCol ) );
+                                memcpy( &ctx->pri.cols[ alg_REF_SEQ_ID ], &ctx->pri.cols[ alg_MATE_REF_NAME ], sizeof( SCol ) );
+                                memcpy( &ctx->pri.cols[ alg_REF_POS ], &ctx->pri.cols[ alg_MATE_REF_POS ], sizeof( SCol ) );
+                            }
+                            else if ( !( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcItem ) )
+                            {
+                                break;
+                            }
+                            else
+                            {
+#endif /* USE_MATE_CACHE */
+                                rc = Cursor_ReadAlign( &ctx->pri.curs, min_prim_id, ctx->pri.cols, alg_MATE_ALIGN_ID );
+#if USE_MATE_CACHE
+                            }
+#endif /* USE_MATE_CACHE */
+                            rc = rc ? rc : DumpUnalignedReads( ctx, ctx->pri.cols, min_prim_id, &rcount );
+                        }
+                    }
+                } else if ( GetRCState( rc ) == rcNotFound && GetRCObject( rc ) == rcRow )
+                {
+                    rc = 0;
+                }
+            }
+            start++;
+            count--;
+            rc = rc ? rc : Quitting();
+        }
+        (void)PLOGMSG( klogInfo, ( klogInfo, "$(a): $(c) unaligned sequences", "a=%s,c=%lu", ctx->accession, rcount ) );
+    }
+    return rc;
+}
+
+#if USE_MATE_CACHE
+static rc_t FlushUnalignedRead_cb (uint64_t key, bool value,void *user_data)
+{
+	rc_t rc;
+	int64_t spot_id = (int64_t) key;
+	int64_t aligned_mate_id = (int64_t) value;
+	SAM_dump_ctx_t *const ctx = user_data;
+	rc = Cursor_Read( &ctx->seq, spot_id, seq_PRIMARY_ALIGNMENT_ID, ~(unsigned)0 );
+	if ( rc == 0 ) {
+		uint64_t rcount;
+		uint64_t val;
+		assert(ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].len == 2);
+		if(ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[0]==0){
+			aligned_mate_id = ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[1];
+			assert(aligned_mate_id != 0);
+		} else if(ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[1] == 0){
+			aligned_mate_id = ctx->seq.cols[ seq_PRIMARY_ALIGNMENT_ID ].base.i64[0];
+			assert(aligned_mate_id != 0);
+		} else {
+			assert(0);
+		}
+                rc = Cache_Get( &ctx->pri.curs, aligned_mate_id, &val );
+                if ( rc == 0 ) {
+			ctx->pri.cols[ alg_REF_POS ].len = 0;
+			Cache_Unpack( val, 0, &ctx->pri.curs, ctx->pri.cols );
+			ctx->pri.cols[ alg_SEQ_SPOT_ID ].base.i64 = &spot_id;
+			ctx->pri.cols[ alg_SEQ_SPOT_ID ].len = 1;
+			memcpy( &ctx->pri.cols[ alg_REF_NAME ], &ctx->pri.cols[ alg_MATE_REF_NAME ], sizeof( SCol ) );
+			memcpy( &ctx->pri.cols[ alg_REF_SEQ_ID ], &ctx->pri.cols[ alg_MATE_REF_NAME ], sizeof( SCol ) );
+			memcpy( &ctx->pri.cols[ alg_REF_POS ], &ctx->pri.cols[ alg_MATE_REF_POS ], sizeof( SCol ) );
+			rc =DumpUnalignedReads( ctx, ctx->pri.cols, aligned_mate_id, &rcount );
+		}
+	}
+        return rc;
+}
+static rc_t FlushUnaligned( SAM_dump_ctx_t *const ctx, const SCursCache * cache )
+{
+    return KVectorVisitBool (cache->cache_unaligned_mate, false, FlushUnalignedRead_cb, ctx );
+}
+#endif
+
+static rc_t DumpHeader( SAM_dump_ctx_t const *ctx )
+{
+    bool reheader = param->reheader;
+    rc_t rc = 0;
+    
+    if ( !reheader )
+    {
+        if ( ctx->db )
+        {
+            /* grab header from db meta node */
+            KMetadata const *meta;
+            
+            rc = VDatabaseOpenMetadataRead( ctx->db, &meta );
+            if ( rc == 0 )
+            {
+                KMDataNode const *node;
+                
+                rc = KMetadataOpenNodeRead( meta, &node, "BAM_HEADER" );
+                KMetadataRelease( meta );
+                
+                if ( rc == 0 )
+                {
+                    size_t offset = 0;
+                    
+                    for ( offset = 0; ; )
+                    {
+                        size_t remain;
+                        size_t nread;
+                        char buffer[ 4096 ];
+                        
+                        rc = KMDataNodeRead( node, offset, buffer, sizeof(buffer), &nread, &remain );
+                        if ( rc != 0 )
+                            break;
+                        BufferedWriter( NULL, buffer, nread, NULL );
+                        if ( remain == 0 )
+                        {
+                            if ( buffer[nread - 1] != '\n' )
+                            {
+                                 buffer[ 0 ] = '\n';
+                                 rc = BufferedWriter( NULL, buffer, 1, NULL );
+                            }
+                            break;
+                        }
+                        offset += nread;
+                    }
+                    KMDataNodeRelease(node);
+                }
+                else if ( GetRCState( rc ) == rcNotFound )
+                {
+                    reheader = true;
+                    rc = 0;
+                }
+            }
+        }
+        else
+        {
+            reheader = true;
+            rc = 0;
+        }
+    }
+
+    if ( rc == 0 && reheader )
+    {
+        rc = KOutMsg( "@HD\tVN:1.3\n" );
+        if ( rc == 0 && gRefList )
+            rc = RefSeqPrint();
+        if ( rc == 0 && ctx->readGroup )
+            rc = ReadGroup_print( ctx->readGroup );
+        if ( rc == 0 && ctx->seq.tbl.vtbl )
+            rc = DumpReadGroups( &ctx->seq.tbl );
+    }
+
+    if ( rc == 0 && param->comments )
+    {
+        unsigned i;
+        
+        for( i = 0; rc == 0 && param->comments[ i ]; ++i )
+            rc = KOutMsg( "@CO\t%s\n", param->comments[ i ] );
+    }
+    return rc;
+}
+
+
+static rc_t DumpDB( SAM_dump_ctx_t *const ctx )
+{
+    rc_t rc = 0;
+
+    if ( ctx->ref.tbl.vtbl != NULL )
+        rc = ReferenceList_MakeTable( &gRefList, ctx->ref.tbl.vtbl, 0, CURSOR_CACHE, NULL, 0 );
+    if ( !param->noheader )
+        rc = DumpHeader( ctx );
+    if ( rc == 0 )
+    {
+        if ( param->region_qty ){
+            rc = ForEachAlignedRegion(  ctx
+                                      ,   ( param->primaries   ? primary_IDS : 0 )
+                                        | ( param->secondaries ? secondary_IDS : 0 )
+                                        | ( param->cg_evidence ? evidence_interval_IDS : 0 )
+                                        | ( param->cg_ev_dnb   ? evidence_alignment_IDS : 0 )
+                                      , DumpAlignedRowList_cb );
+#if USE_MATE_CACHE
+	    if ( rc == 0 && param->unaligned ){
+                rc = FlushUnaligned( ctx,ctx->pri.curs.cache);
+	    }
+#endif
+	}
+        if ( param->cg_sam )
+            rc = ForEachAlignedRegion( ctx, evidence_interval_IDS, DumpCGSAM );
+
+        if ( param->region_qty == 0 )
+        {
+            rc = DumpUnsorted( ctx );
+            if ( rc == 0 && param->unaligned )
+                rc = DumpUnaligned( ctx, ctx->pri.tbl.vtbl != NULL );
+        }
+    }
+    ReferenceList_Release( gRefList );
+    return rc;
+}
+
+
+static rc_t DumpTable( SAM_dump_ctx_t *ctx )
+{
+    rc_t rc = 0;
+
+    if ( !param->noheader )
+        rc = DumpHeader( ctx );
+    if ( rc == 0 )
+        rc = DumpUnaligned( ctx, false );
+    return rc;
+}
+
+
+static rc_t ProcessTable( VDBManager const *mgr, char const fullPath[],
+                          char const accession[], char const readGroup[] )
+{
+    VTable const *tbl;
+    rc_t rc = VDBManagerOpenTableRead( mgr, &tbl, 0, fullPath );
+    
+    if ( rc != 0 )
+    {
+        VSchema *schema;
+        
+        rc = VDBManagerMakeSRASchema( mgr, &schema );
+        if ( rc == 0 )
+        {
+            rc = VDBManagerOpenTableRead( mgr, &tbl, schema, fullPath );
+            VSchemaRelease( schema );
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        SAM_dump_ctx_t ctx;
+        SCol seq_cols[ sizeof( gSeqCol ) / sizeof( gSeqCol[ 0 ] ) ];
+        
+        memset( &ctx, 0, sizeof( ctx ) );
+        
+        ctx.fullPath = fullPath;
+        ctx.accession = accession;
+        ctx.readGroup = readGroup;
+        
+        DATASOURCE_INIT( ctx.seq, accession );
+        ctx.seq.tbl.vtbl = tbl;
+        ctx.seq.type = edstt_Sequence;
+        
+        ReportResetTable( fullPath, tbl );
+
+        ctx.seq.cols = seq_cols;
+        memcpy( ctx.seq.cols, gSeqCol, sizeof( gSeqCol ) );
+        rc = Cursor_Open( &ctx.seq.tbl, &ctx.seq.curs, ctx.seq.cols, NULL );
+        if ( rc == 0 ) {
+            rc = DumpTable( &ctx );
+            Cursor_Close(&ctx.seq.curs);
+        }
+        VTableRelease( tbl );
+    }
+    return rc;
+}
+
+
+static void SetupColumns( DataSource *ds, enum eDSTableType type )
+{
+    memcpy( ds->cols, g_alg_col_tmpl, sizeof( g_alg_col_tmpl ) );
+    
+    ds->type = type;
+    if ( param->use_seqid )
+        ds->cols[ alg_MATE_REF_NAME ].name = "MATE_REF_SEQ_ID";
+    else
+        ds->cols[ alg_MATE_REF_NAME ].name = "MATE_REF_NAME";
+    
+    if ( param->fasta || param->fastq )
+        ds->cols[ alg_READ ].name = "RAW_READ";
+    else if ( param->hide_identical )
+        ds->cols[ alg_READ ].name = "MISMATCH_READ";
+    else
+        ds->cols[ alg_READ ].name = "READ";
+    
+    if ( param->long_cigar )
+    {
+        ds->cols[ alg_CIGAR ].name = "CIGAR_LONG";
+        ds->cols[ alg_CIGAR_LEN ].name = "CIGAR_LONG_LEN";
+    }
+    else
+    {
+        ds->cols[ alg_CIGAR ].name = "CIGAR_SHORT";
+        ds->cols[ alg_CIGAR_LEN ].name = "CIGAR_SHORT_LEN";
+    }
+
+    if(param->qualQuant && param->qualQuantSingle){ /** we don't really need quality ***/
+	ds->cols[ alg_SAM_QUALITY   ].name = "";
+    }
+    
+    switch ( type )
+    {
+    case edstt_EvidenceInterval:
+	
+        ds->cols[ alg_SEQ_SPOT_ID   ].name = "";
+        ds->cols[ alg_SEQ_NAME      ].name = "";
+        ds->cols[ alg_SAM_QUALITY   ].name = "";
+        ds->cols[ alg_SPOT_GROUP    ].name = "";
+        ds->cols[ alg_SEQ_SPOT_GROUP].name = "";
+        ds->cols[ alg_SEQ_READ_ID   ].name = "";
+        ds->cols[ alg_MATE_ALIGN_ID ].name = "";
+        ds->cols[ alg_MATE_REF_ID   ].name = "";
+        ds->cols[ alg_MATE_REF_NAME ].name = "";
+        ds->cols[ alg_SAM_FLAGS     ].name = "";
+        ds->cols[ alg_MATE_REF_POS  ].name = "";
+        ds->cols[ alg_ALIGN_GROUP   ].name = "";
+        ds->cols[ alg_TEMPLATE_LEN  ].name = "";
+        if ( param->cg_sam || param->cg_ev_dnb )
+            ds->cols[ alg_EVIDENCE_ALIGNMENT_IDS ].name = "EVIDENCE_ALIGNMENT_IDS";
+        break;
+
+    case edstt_EvidenceAlignment:
+        ds->cols[ alg_REF_PLOIDY    ].name = "REF_PLOIDY";
+        ds->cols[ alg_REF_ID        ].name = "REF_ID";
+        ds->cols[ alg_MATE_ALIGN_ID ].name = "";
+        ds->cols[ alg_MATE_REF_ID   ].name = "";
+        ds->cols[ alg_MATE_REF_NAME ].name = "";
+        ds->cols[ alg_SAM_FLAGS     ].name = "";
+        ds->cols[ alg_MATE_REF_POS  ].name = "";
+        ds->cols[ alg_ALIGN_GROUP   ].name = "";
+        ds->cols[ alg_TEMPLATE_LEN  ].name = "";
+        break;
+    default:
+        break;
+    }
+}
+
+
+static rc_t ProcessDB( VDatabase const *db, char const fullPath[],
+                       char const accession[], char const readGroup[] )
+{
+    char const *const refTableName = (   param->region_qty > 0
+                                      || param->cg_evidence
+                                      || param->cg_ev_dnb
+                                      || param->cg_sam
+                                      || param->reheader
+                                      || param->primaries
+                                      || param->secondaries
+                                     )
+                                   ? "REFERENCE"
+                                   : 0;
+    char const *const priTableName = param->primaries   ? "PRIMARY_ALIGNMENT" : 0;
+    char const *const secTableName = param->secondaries ? "SECONDARY_ALIGNMENT" : 0;
+    char const *const seqTableName = ( param->unaligned || param->reheader ) ? "SEQUENCE" : 0;
+    char const *const eviTableName = ( param->cg_evidence || ( param->cg_ev_dnb & ( param->region_qty > 0 ) ) || param->cg_sam ) ? "EVIDENCE_INTERVAL" : 0;
+    char const *const evaTableName = ( param->cg_ev_dnb   || param->cg_sam ) ? "EVIDENCE_ALIGNMENT" : 0;
+    
+    SAM_dump_ctx_t ctx;
+    SCol align_cols[ ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) * 4 ];
+    SCol seq_cols[ sizeof( gSeqCol ) / sizeof( gSeqCol[ 0 ] ) ];
+    rc_t rc = 0;
+    
+    memset( &ctx, 0, sizeof( ctx ) );
+    memset( align_cols, 0, sizeof( align_cols ) );
+    memset( seq_cols, 0, sizeof( seq_cols ) );
+    
+    ctx.db = db;
+    ctx.fullPath = fullPath;
+    ctx.accession = accession;
+    ctx.readGroup = readGroup;
+    
+    DATASOURCE_INIT( ctx.seq, seqTableName );
+    DATASOURCE_INIT( ctx.ref, refTableName );
+    DATASOURCE_INIT( ctx.pri, priTableName );
+    DATASOURCE_INIT( ctx.sec, secTableName );
+    DATASOURCE_INIT( ctx.evi, eviTableName );
+    DATASOURCE_INIT( ctx.eva, evaTableName );
+    
+    if ( ctx.seq.tbl.name )
+    {
+        rc = VDatabaseOpenTableRead( db, &ctx.seq.tbl.vtbl, ctx.seq.tbl.name );
+        if ( rc == 0 )
+        {
+            ctx.seq.cols = seq_cols;
+            memcpy(seq_cols, gSeqCol, sizeof(gSeqCol));
+            rc = Cursor_Open( &ctx.seq.tbl, &ctx.seq.curs, ctx.seq.cols, NULL );
+        }
+    }
+    ctx.pri.cols = &align_cols[ 0 * ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) ];
+    ctx.sec.cols = &align_cols[ 1 * ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) ];
+    ctx.evi.cols = &align_cols[ 2 * ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) ];
+    ctx.eva.cols = &align_cols[ 3 * ( sizeof( g_alg_col_tmpl ) / sizeof( g_alg_col_tmpl[ 0 ] ) ) ];
+    
+    SetupColumns( &ctx.pri, edstt_PrimaryAlignment );
+    SetupColumns( &ctx.sec, edstt_SecondaryAlignment );
+    SetupColumns( &ctx.evi, edstt_EvidenceInterval );
+    SetupColumns( &ctx.eva, edstt_EvidenceAlignment );
+    
+    if ( ctx.pri.tbl.name )
+        VDatabaseOpenTableRead( db, &ctx.pri.tbl.vtbl, ctx.pri.tbl.name );
+    if ( ctx.sec.tbl.name )
+        VDatabaseOpenTableRead( db, &ctx.sec.tbl.vtbl, ctx.sec.tbl.name );
+    if ( ctx.evi.tbl.name )
+        VDatabaseOpenTableRead( db, &ctx.evi.tbl.vtbl, ctx.evi.tbl.name );
+    if ( ctx.eva.tbl.name )
+        VDatabaseOpenTableRead( db, &ctx.eva.tbl.vtbl, ctx.eva.tbl.name );
+    
+    if (   ctx.pri.tbl.vtbl == NULL
+        && ctx.sec.tbl.vtbl == NULL
+        && ctx.evi.tbl.vtbl == NULL
+        && ctx.eva.tbl.vtbl == NULL )
+    {
+        memset (&ctx.pri, 0, sizeof( ctx.pri ) * 4 );
+        if ( ctx.seq.tbl.name == NULL )
+        {
+            ctx.seq.tbl.name = "SEQUENCE";
+            rc = VDatabaseOpenTableRead( db, &ctx.seq.tbl.vtbl, ctx.seq.tbl.name );
+        }
+        if ( rc == 0 )
+        {
+            ctx.seq.cols = seq_cols;
+            memcpy(seq_cols, gSeqCol, sizeof(gSeqCol));
+            rc = Cursor_Open(&ctx.seq.tbl, &ctx.seq.curs, ctx.seq.cols, NULL);
+            if ( rc == 0 )
+            {
+                rc = DumpTable( &ctx );
+                Cursor_Close(&ctx.seq.curs);
+            }
+            VTableRelease(ctx.seq.tbl.vtbl);
+        }
+        VDatabaseRelease( db );
+        return rc;
+    }
+    ReportResetDatabase( fullPath, db );
+    
+    if ( ctx.ref.tbl.name )
+    {
+        rc = VDatabaseOpenTableRead( db, &ctx.ref.tbl.vtbl, ctx.ref.tbl.name );
+        ctx.ref.type = edstt_Reference;
+    }
+    if ( rc == 0 )
+        rc = Cursor_Open( &ctx.pri.tbl, &ctx.pri.curs, ctx.pri.cols, ctx.seq.curs.cache );
+    if ( rc == 0 )
+        rc = Cursor_Open( &ctx.sec.tbl, &ctx.sec.curs, ctx.sec.cols, NULL );
+    if ( rc == 0 )
+        rc = Cursor_Open( &ctx.evi.tbl, &ctx.evi.curs, ctx.evi.cols, NULL );
+    if ( rc == 0 )
+        rc = Cursor_Open( &ctx.eva.tbl, &ctx.eva.curs, ctx.eva.cols, NULL );
+    if ( rc == 0 )
+        rc = DumpDB( &ctx );
+    
+    Cursor_Close(&ctx.ref.curs);
+    Cursor_Close(&ctx.pri.curs);
+    Cursor_Close(&ctx.sec.curs);
+    Cursor_Close(&ctx.evi.curs);
+    Cursor_Close(&ctx.eva.curs);
+    Cursor_Close(&ctx.seq.curs);
+    
+    VTableRelease( ctx.ref.tbl.vtbl );
+    VTableRelease( ctx.pri.tbl.vtbl );
+    VTableRelease( ctx.sec.tbl.vtbl );
+    VTableRelease( ctx.evi.tbl.vtbl );
+    VTableRelease( ctx.eva.tbl.vtbl );
+    VTableRelease( ctx.seq.tbl.vtbl );
+    
+    return rc;
+}
+
+#if 0
+rc_t ResolvePath( char const *accession, char const ** path )
+{
+    rc_t rc = 0;
+    static char tblpath[ 4096 ];
+#if TOOLS_USE_SRAPATH != 0
+    static SRAPath* pmgr = NULL;
+    
+    if ( accession == NULL && path == NULL )
+    {
+        SRAPathRelease( pmgr );
+        return 0;
+    }
+    if (   pmgr != NULL
+        || ( rc = SRAPathMake( &pmgr, NULL ) ) == 0
+        || ( GetRCState( rc ) == rcNotFound && GetRCTarget( rc ) == rcDylib ) )
+    {
+        *path = tblpath;
+        tblpath[ 0 ] = '\0';
+        rc = 0;
+        do {
+            if ( pmgr != NULL && !SRAPathTest( pmgr, accession ) )
+            {
+                /* try to resolve the path using mgr */
+                rc = SRAPathFind( pmgr, accession, tblpath, sizeof( tblpath ) );
+                if ( rc == 0 )
+                    break;
+            }
+            if ( string_size( accession ) >= sizeof( tblpath ) )
+            {
+                rc = RC( rcExe, rcPath, rcResolving, rcBuffer, rcInsufficient );
+            }
+            else
+            {
+                string_copy( tblpath, ( sizeof tblpath ) - 1, accession, string_size( accession ) );
+                rc = 0;
+            }
+        } while( false );
+    }
+#else
+    if ( accession != NULL && path != NULL )
+    {
+        *path = tblpath;
+        string_copy( tblpath, ( sizeof tblpath ) - 1, accession, string_size( accession ) );
+    }
+#endif
+
+    return rc;
+}
+#endif
+
+
+static rc_t ProcessPath( VDBManager const *mgr, char const Path[] )
+{
+#if 0
+    unsigned pathlen = string_size( Path );
+    char *readGroup = NULL;
+    char *path = NULL;
+    unsigned i;
+    rc_t rc;
+    
+    /* strip trailing path seperators */
+    for ( i = pathlen; i > 0; )
+    {
+        int const ch = Path[ --i ];
+        
+        if ( ch == '/' || ch == '\\' )
+            --pathlen;
+        else
+            break;
+    }
+
+    /* find read group alias */
+    for ( i = pathlen; i > 0; )
+    {
+        int const ch = Path[ --i ];
+        
+        if ( ch == '=' )
+        {
+            unsigned const pos = i + 1;
+            unsigned const len = pathlen - pos;
+            
+            pathlen = i;
+            
+            readGroup = malloc( len + 1 );
+            if ( readGroup == NULL )
+                return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+            memcpy( readGroup, &Path[ pos ], len );
+            readGroup[ len ] = '\0';
+            break;
+        }
+    }
+
+    path = malloc( pathlen + 1 );
+    if ( path == NULL )
+        return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+    memcpy( path, Path, pathlen );
+    path[ pathlen ] = '\0';
+    
+    rc = ReportResetObject( path );
+    if ( rc == 0 )
+    {
+        char const *fullPath;
+
+        rc = ResolvePath( path, &fullPath );
+        if ( rc == 0 )
+        {
+            char const *accession = fullPath;
+            VDatabase const *db;
+            
+            /* use last path element as accession */
+            for ( i = pathlen; i > 0; )
+            {
+                int const ch = path[ --i ];
+                
+                if ( ch == '/' || ch == '\\' )
+                {
+                    accession = &fullPath[ i + 1 ];
+                    break;
+                }
+            }
+            rc = VDBManagerOpenDBRead( mgr, &db, NULL, fullPath );
+            if ( rc == 0 )
+            {
+                rc = ProcessDB( db, fullPath, accession, readGroup );
+                VDatabaseRelease( db );
+            }
+            else
+                rc = ProcessTable( mgr, fullPath, accession, readGroup );
+        }
+    }
+    free( path );
+    free( readGroup );
+    return rc;
+
+#else
+
+    char * pc;
+    rc_t rc = 0;
+
+    pc = strchr (Path, ':');
+    if (pc == NULL)
+    {
+        unsigned pathlen;
+        char *readGroup;
+        char *path;
+        unsigned i;
+
+    old:
+        pathlen = string_size( Path );
+        readGroup = NULL;
+        path = NULL;
+    
+        /* strip trailing path seperators */
+        for ( i = pathlen; i > 0; )
+        {
+            int const ch = Path[ --i ];
+        
+            if ( ch == '/' || ch == '\\' )
+                --pathlen;
+            else
+                break;
+        }
+
+        /* find read group alias */
+        for ( i = pathlen; i > 0; )
+        {
+            int const ch = Path[ --i ];
+        
+            if ( ch == '=' )
+            {
+                unsigned const pos = i + 1;
+                unsigned const len = pathlen - pos;
+            
+                pathlen = i;
+            
+                readGroup = malloc( len + 1 );
+                if ( readGroup == NULL )
+                    return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+                memcpy( readGroup, &Path[ pos ], len );
+                readGroup[ len ] = '\0';
+                break;
+            }
+        }
+
+        path = malloc( pathlen + 1 );
+        if ( path == NULL )
+            return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+        memcpy( path, Path, pathlen );
+        path[ pathlen ] = '\0';
+    
+        rc = ReportResetObject( path );
+        if ( rc == 0 )
+        {
+            char const *accession = path;
+            VDatabase const *db;
+            
+            /* use last path element as accession */
+            for ( i = pathlen; i > 0; )
+            {
+                int const ch = path[ --i ];
+                
+                if ( ch == '/' || ch == '\\' )
+                {
+                    accession = &path[ i + 1 ];
+                    break;
+                }
+            }
+            rc = VDBManagerOpenDBRead( mgr, &db, NULL, path );
+            if ( rc == 0 )
+            {
+                rc = ProcessDB( db, path, accession, readGroup );
+                if (UIError(rc, db, NULL)) {
+                    UIDatabaseLOGError(rc, db, true);
+/*                  *error_reported = true; */
+                }
+                VDatabaseRelease( db );
+            }
+            else {
+                rc = ProcessTable( mgr, path, accession, readGroup );
+                if (UIError(rc, NULL, NULL)) {
+                    UITableLOGError(rc, NULL, true);
+/*                  *error_reported = true; */
+                }
+            }
+        }
+        free( path );
+        free( readGroup );
+        return rc;
+    }
+    else
+    {
+        VPath * vpath;
+        char * basename;
+        size_t zz;
+        char buffer [8193];
+        char readgroup_ [257];
+        char * readgroup;
+
+        rc = VPathMake (&vpath, Path);
+        if (rc)
+            ; /* LOGERR */
+        else
+        {
+            VPUri_t uri_t;
+            switch (uri_t = VPathGetUri_t (vpath))
+            {
+            default:
+            case vpuri_invalid:
+                rc = RC (rcExe, rcParam, rcAccessing, rcPath, rcInvalid);
+                break;
+            case vpuri_not_supported:
+                rc = RC (rcExe, rcParam, rcAccessing, rcPath, rcUnsupported);
+                break;
+            case vpuri_none:
+                goto old;
+
+            case vpuri_ncbi_vfs:
+            case vpuri_file:
+            case vpuri_ncbi_acc:
+            case vpuri_http:
+                rc = VPathReadPath (vpath, buffer, sizeof buffer - 1, &zz);
+                if (rc)
+                    ;
+                else
+                {
+                loop:
+                    basename = strrchr (buffer, '/');
+                    if (basename)
+                    {
+                        if (basename[1] == '\0')
+                        {
+                            basename[0] = '\0';
+                            goto loop;
+                        }
+                        else
+                            ++basename;
+                    }
+                    else
+                        basename = buffer;
+
+                    {
+                        char * ext;
+
+                        /* cut off [.lite].[c]sra[.nenc||.ncbi_enc] if any */
+                        ext = strrchr( basename, '.' );
+                        if ( ext != NULL )
+                        {
+                            if ( strcasecmp( ext, ".nenc" ) == 0 || strcasecmp( ext, ",ncbi_enc" ) == 0 )
+                            {
+                                *ext = '\0';
+                                ext = strrchr( basename, '.' );
+                            }
+                            if ( ext != NULL )
+                            {
+                                if ( strcasecmp( ext, ".sra" ) == 0 || strcasecmp( ext, ".csra" ) == 0 )
+                                {
+                                    *ext = '\0';
+                                    ext = strrchr( basename, '.' );
+                                    if ( ext != NULL && strcasecmp( ext, ".lite" ) == 0 )
+                                        *ext = '\0';
+                                }
+                            }
+                        }
+                    }
+
+                    rc = VPathOption (vpath, vpopt_readgroup, readgroup_, 
+                                      sizeof readgroup_ - 1, &zz);
+                    if (rc)
+                    {
+                        if (GetRCState (rc) == rcNotFound)
+                        {
+                            rc = 0;
+                            readgroup = NULL;
+                        }
+                    }
+                    else
+                        readgroup = readgroup_;
+
+
+                    if (rc)
+                        ;
+                    else
+                    {
+                        VDatabase const *db;
+
+                        rc = VDBManagerOpenDBRead( mgr, &db, NULL, Path );
+                        if ( rc == 0 )
+                        {
+                            rc = ProcessDB( db, Path, basename, readgroup );
+                            VDatabaseRelease( db );
+                        }
+                        else
+                            rc = ProcessTable( mgr, Path, basename, readgroup );
+                    }
+                }
+                break;
+            }
+            VPathRelease (vpath);
+        }
+    }
+    return rc;
+#endif
+}
+
+/*
+ver_t CC KAppVersion( void )
+{
+    return SAM_DUMP_VERS;
+}
+*/
+
+char const *unaligned_usage[] = {"Output unaligned reads", NULL};
+char const *unaligned_only_usage[] = {"Only output unaligned spots", NULL};
+char const *primaryonly_usage[] = {"Output only primary alignments", NULL};
+char const *cigartype_usage[] = {"Output long version of CIGAR", NULL};
+char const *cigarCG_usage[] = {"Output CG version of CIGAR", NULL};
+char const *cigarCGMerge_usage[] = {"Apply CG fixups to CIGAR/SEQ/QUAL and outputs CG-specific columns", NULL};
+char const *CG_evidence[] = {"Output CG evidence aligned to reference", NULL};
+char const *CG_ev_dnb[] = {"Output CG evidence DNB's aligned to evidence", NULL};
+char const *CG_SAM[] = {"Output CG evidence DNB's aligned to reference ", NULL};
+char const *CG_mappings[] = {"Output CG sequences aligned to reference ", NULL};
+char const *header_usage[] = {"Replace original BAM header with a reconstructed one", NULL};
+char const *noheader_usage[] = {"Do not output headers", NULL};
+char const *region_usage[] = {"Filter by position on genome.",
+                              "Name can either be file specific name (ex: \"chr1\" or \"1\").",
+                              "\"from\" and \"to\" are 1-based coordinates", NULL};
+char const *distance_usage[] = {"Filter by distance between matepairs.",
+                                "Use \"unknown\" to find matepairs split between the references.",
+                                "Use from-to to limit matepair distance on the same reference", NULL};
+char const *seq_id_usage[] = {"Print reference SEQ_ID in RNAME instead of NAME", NULL};
+char const *identicalbases_usage[] = {"Output '=' if base is identical to reference", NULL};
+char const *gzip_usage[] = {"Compress output using gzip", NULL};
+char const *bzip2_usage[] = {"Compress output using bzip2", NULL};
+char const *qname_usage[] = {"Add .SPOT_GROUP to QNAME", NULL};
+char const *fasta_usage[] = {"Produce Fasta formatted output", NULL};
+char const *fastq_usage[] = {"Produce FastQ formatted output", NULL};
+char const *prefix_usage[] = {"Prefix QNAME: prefix.QNAME", NULL};
+char const *reverse_usage[] = {"Reverse unaligned reads according to read type", NULL};
+char const *comment_usage[] = {"Add comment to header. Use multiple times for several lines. Use quotes", NULL};
+char const *XI_usage[] = {"Output cSRA alignment id in XI column", NULL};
+char const *qual_quant_usage[] = {"Quality scores quantization level",
+                                  "a string like '1:10,10:20,20:30,30:-'", NULL};
+char const *CG_names[] = { "Generate CG friendly read names", NULL};
+
+char const *usage_params[] =
+{
+    NULL,                       /* unaligned */
+    NULL,                       /* unaligned-only */
+    NULL,                       /* primaryonly */
+    NULL,                       /* cigartype */
+    NULL,                       /* cigarCG */
+    NULL,                       /* header */
+    NULL,                       /* no-header */
+    "text",                     /* comment */
+    "name[:from-to]",           /* region */
+    "from-to|'unknown'",        /* distance */
+    NULL,                       /* seq-id */
+    NULL,                       /* identical-bases */
+    NULL,                       /* gzip */
+    NULL,                       /* bzip2 */
+    NULL,                       /* qname */
+    NULL,                       /* fasta */
+    NULL,                       /* fastq */
+    "prefix",                   /* prefix */
+    NULL,                       /* reverse */
+    NULL,                       /* test-rows */
+    NULL,                       /* mate-row-gap-cacheable */
+    NULL,                       /* cigarCGMerge */
+    NULL,                       /* XI */
+    "quantization string",      /* qual-quant */
+    NULL,                       /* cigarCGMerge */
+    NULL,                       /* CG-evidence */
+    NULL,                       /* CG-ev-dnb */
+    NULL,                       /* CG-mappings */
+    NULL,                       /* CG-SAM */
+    NULL                        /* CG-names */
+};
+
+enum eArgs
+{
+    earg_unaligned = 0,         /* unaligned */
+    earg_unaligned_only,        /* unaligned */
+    earg_prim_only,             /* primaryonly */
+    earg_cigartype,             /* cigartype */
+    earg_cigarCG,               /* cigarCG */
+    earg_header,                /* header */
+    earg_noheader,              /* no-header */
+    earg_comment,               /* comment */
+    earg_region,                /* region */
+    earg_distance,              /* distance */
+    earg_seq_id,                /* seq-id */
+    earg_identicalbases,        /* identical-bases */
+    earg_gzip,                  /* gzip */
+    earg_bzip2,                 /* bzip2 */
+    earg_qname,                 /* qname */
+    earg_fastq,                 /* fasta */
+    earg_fasta,                 /* fastq */
+    earg_prefix,                /* prefix */
+    earg_reverse,               /* reverse */
+    earg_test_rows,             /* test-rows */
+    earg_mate_row_gap_cachable, /* mate-row-gap-cacheable */
+    earg_cigarCG_merge,         /* cigarCGMerge */
+    earg_XI,                    /* XI */
+    earg_QualQuant,             /* qual-quant */
+    earg_CG_evidence,           /* CG-evidence */
+    earg_CG_ev_dnb,             /* CG-ev-dnb */
+    earg_CG_mappings,           /* CG-mappings */
+    earg_CG_SAM,                /* CG-SAM */
+    earg_CG_names               /* CG-names */
+};
+
+OptDef DumpArgs[] =
+{
+    { "unaligned", "u", NULL, unaligned_usage, 0, false, false },           /* unaligned */
+    { "unaligned-only", "U", NULL, unaligned_usage, 0, false, false },      /* unaligned-only */
+    { "primary", "1", NULL, primaryonly_usage, 0, false, false },           /* primaryonly */
+    { "cigar-long", "c", NULL, cigartype_usage, 0, false, false },          /* cigartype */
+    { "cigar-CG", NULL, NULL, cigarCG_usage, 0, false, false },             /* cigarCG */
+    { "header", "r", NULL, header_usage, 0, false, false },                 /* header */
+    { "no-header", "n", NULL, noheader_usage, 0, false, false },            /* no-header */
+    { "header-comment", NULL, NULL, comment_usage, 0, true, false },        /* comment */
+    { "aligned-region", NULL, NULL, region_usage, 0, true, false },         /* region */
+    { "matepair-distance", NULL, NULL, distance_usage, 0, true, false },    /* distance */
+    { "seqid", "s", NULL, seq_id_usage, 0, false, false },                  /* seq-id */
+    { "hide-identical", "=", NULL, identicalbases_usage, 0, false, false }, /* identical-bases */
+    { "gzip", NULL, NULL, gzip_usage, 0, false, false },                    /* gzip */
+    { "bzip2", NULL, NULL, bzip2_usage, 0, false, false },                  /* bzip2 */
+    { "spot-group", "g", NULL, qname_usage, 0, false, false },              /* qname */
+    { "fastq", NULL, NULL, fastq_usage, 0, false, false },                  /* fasta */
+    { "fasta", NULL, NULL, fasta_usage, 0, false, false },                  /* fastq */
+    { "prefix", "p", NULL, prefix_usage, 0, true, false },                  /* prefix */
+    { "reverse", NULL, NULL, reverse_usage, 0, false, false },              /* reverse */
+    { "test-rows", NULL, NULL, NULL, 0, true, false },                      /* test-rows */
+    { "mate-cache-row-gap", NULL, NULL, NULL, 0, true, false },             /* mate-row-gap-cacheable */
+    { "cigar-CG-merge", NULL, NULL, cigarCGMerge_usage, 0, false, false },  /* cigarCGMerge */
+    { "XI", NULL, NULL, XI_usage, 0, false, false },                        /* XI */
+    { "qual-quant", "Q", NULL, qual_quant_usage, 0, true, false },          /* qual-quant */
+    { "CG-evidence", NULL, NULL, CG_evidence, 0, false, false },            /* CG-evidence */
+    { "CG-ev-dnb"  , NULL, NULL, CG_ev_dnb  , 0, false, false },            /* CG-ev-dnb */
+    { "CG-mappings", NULL, NULL, CG_mappings, 0, false, false },            /* CG-mappings */
+    { "CG-SAM", NULL, NULL, CG_SAM, 0, false, false },                      /* CG-SAM */
+    { "CG-names", NULL, NULL, CG_names, 0, false, false },                  /* CG-names */
+    { "legacy", NULL, NULL, NULL, 0, false, false }
+};
+
+
+/*
+const char UsageDefaultName[] = "sam-dump";
+
+
+rc_t CC UsageSummary( char const *progname )
+{
+    return KOutMsg( "Usage:\n"
+        "\t%s [options] path-to-run[ path-to-run ...] > output.sam\n\n", progname );
+}
+
+
+rc_t CC Usage( Args const *args)
+{
+    char const *progname = UsageDefaultName;
+    char const *fullpath = UsageDefaultName;
+    rc_t rc;
+    unsigned i;
+
+    rc = ArgsProgram( args, &fullpath, &progname );
+
+    UsageSummary( progname );
+
+    KOutMsg( "Options:\n" );
+    for( i = 0; i < sizeof( DumpArgs ) / sizeof( DumpArgs[ 0 ] ); i++ )
+    {
+        if ( DumpArgs[ i ].help != NULL )
+        {
+            HelpOptionLine( DumpArgs[ i ].aliases, DumpArgs[ i ].name,
+                            usage_params[ i ], DumpArgs[ i ].help);
+        }
+    }
+    KOutMsg( "\n" );
+    HelpOptionsStandard();
+
+    HelpVersion( fullpath, KAppVersion() );
+
+    return rc;
+}
+*/
+
+#define ARGS_COUNT (sizeof(DumpArgs)/sizeof(DumpArgs[0]))
+
+
+static unsigned ParamCount( Args const *const args, rc_t *const prc )
+{
+    uint32_t y = 0;
+    rc_t rc = ArgsParamCount( args, &y );
+    
+    if ( prc != NULL )
+        *prc = rc;
+    return y;
+}
+
+
+static unsigned ArgCount( Args const *const args, rc_t *const prc )
+{
+    uint32_t y = 0;
+    rc_t rc = ArgsArgvCount( args, &y );
+    
+    if ( prc != NULL )
+        *prc = rc;
+    return y;
+}
+
+
+static rc_t CountArgs( Args const *const args, unsigned count[],
+                       char const **const errmsg )
+{
+    rc_t rc;
+    unsigned const pcount = ParamCount( args, &rc );
+    
+    memset( count, 0, ARGS_COUNT );
+    if ( rc != 0 || pcount == 0 )
+    {
+        *errmsg = "";
+        MiniUsage( args );
+        return ( ArgCount( args, NULL ) < 2 )
+             ? 0
+             : RC( rcExe, rcArgv, rcParsing, rcParam, rcInsufficient );
+    }
+#define COUNT_ARG(E) do {\
+    char const *const optname = DumpArgs[ (E) ].name; \
+    if ( ( rc = ArgsOptionCount( args, optname, &count[ (E) ] ) ) != 0 ) { \
+        *errmsg = optname; \
+        return rc; \
+    } } while( 0 )
+    
+    
+    /* record source options */
+    COUNT_ARG( earg_unaligned );
+    COUNT_ARG( earg_unaligned_only );
+    COUNT_ARG( earg_prim_only );
+    COUNT_ARG( earg_CG_evidence );
+    COUNT_ARG( earg_CG_ev_dnb );
+    COUNT_ARG( earg_CG_mappings );
+    COUNT_ARG( earg_CG_SAM );
+    
+    /* record filter options */
+    COUNT_ARG( earg_region );
+    COUNT_ARG( earg_distance );
+    
+    /* output format options */
+    COUNT_ARG( earg_fastq );
+    COUNT_ARG( earg_fasta );
+    
+    /* SAM header options */
+    COUNT_ARG( earg_header );
+    COUNT_ARG( earg_noheader );
+    COUNT_ARG( earg_comment );
+    
+    /* SAM field options */
+    COUNT_ARG( earg_prefix );
+    COUNT_ARG( earg_qname );
+    COUNT_ARG( earg_seq_id );
+    COUNT_ARG( earg_CG_names );
+    
+    COUNT_ARG( earg_cigartype );
+    COUNT_ARG( earg_cigarCG );
+    COUNT_ARG( earg_cigarCG_merge );
+    
+    COUNT_ARG( earg_identicalbases );
+    COUNT_ARG( earg_reverse );
+    COUNT_ARG( earg_QualQuant );
+    
+    /* output encoding options */
+    COUNT_ARG( earg_gzip );
+    COUNT_ARG( earg_bzip2 );
+    
+    COUNT_ARG( earg_mate_row_gap_cachable );
+    
+    /* debug options */
+    COUNT_ARG( earg_XI );
+    COUNT_ARG( earg_test_rows );
+#undef COUNT_ARG
+    return 0;
+}
+
+
+static unsigned GetOptValU( Args const *const args, char const *const argname,
+                            unsigned const defval, rc_t *const prc )
+{
+    unsigned y = defval;
+    char const *valstr;
+    rc_t rc = ArgsOptionValue( args, argname, 0, &valstr );
+    
+    if ( rc == 0 )
+    {
+        char *endp;
+        
+        y = strtou32( valstr, &endp, 0 );
+        if ( *endp != '\0' )
+        {
+            rc = RC( rcExe, rcArgv, rcProcessing, rcParam, rcInvalid );
+            y = 0;
+        }
+        if ( y == 0 )
+            y = defval;
+    }
+    if ( prc )
+        *prc = rc;
+    return y;
+}
+
+
+static rc_t GetComments( Args const *const args, struct params_s *const parms, unsigned const n )
+{
+    parms->comments = calloc( n + 1, sizeof( parms->comments[ 0 ] ) );
+    if ( parms->comments != NULL )
+    {
+        unsigned i;
+        
+        for ( i = 0; i < n; ++i )
+        {
+            rc_t const rc = ArgsOptionValue( args, DumpArgs[ earg_comment ].name, i, &parms->comments[ i ] );
+            if ( rc != 0 )
+            {
+                free( ( void * )parms->comments );
+                parms->comments = NULL;
+                return rc;
+            }
+        }
+        return 0;
+    }
+    else
+        return RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+}
+
+
+static rc_t ParseFromTo( int *const pFrom, int *const pTo, char const str[] )
+{
+    /* $str =~ /((\d+)-(\d+))|(-(\d+))|(\d+)/ */
+    int n;
+    char fr_str[ 16 ];
+    char to_str[ 16 ];
+    uint32_t fr = 0;
+    uint32_t to = 0;
+    int i = sscanf( str, "%15[0-9]-%15[0-9]%n", fr_str, to_str, &n );
+    
+    if ( i != 2 )
+    {
+        unsigned const offset = ( str[ 0 ] == '-' ) ? 1 : 0;
+        
+        fr = 0;
+        i = sscanf( str + offset, "%15[0-9]%n", to_str, &n );
+        if ( i != 1 )
+            return RC( rcExe, rcArgv, rcProcessing, rcParam, rcOutofrange );
+        to = strtou32( to_str, 0, 0 );
+    }
+    else
+    {
+        fr = strtou32( fr_str, 0, 0 );
+        to = strtou32( to_str, 0, 0 );
+        
+        if ( to < fr )
+        {
+            uint32_t const tmp = to;
+            to = fr;
+            fr = tmp;
+        }
+    }
+    /* was the entire string consumed */
+    if ( str[ n ] != 0 )
+        return RC( rcExe, rcArgv, rcProcessing, rcParam, rcInvalid );
+    *pFrom = ( int )fr;
+    *pTo = ( int )to;
+    return 0;
+}
+
+
+static rc_t GetDistance( Args const *const args, struct params_s *const parms, unsigned const n )
+{
+    rc_t rc;
+    TMatepairDistance *const mpd = calloc( n, sizeof( mpd[ 0 ] ) );
+    
+    if ( mpd == NULL )
+        rc = RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+    else
+    {
+        unsigned i;
+        unsigned j;
+        
+        for ( j = i = 0; i < n; ++i )
+        {
+            char const *valstr;
+            int from = 0;
+            int to = 0;
+
+            rc = ArgsOptionValue( args, DumpArgs[earg_distance].name, i, &valstr );
+            if ( rc != 0 )
+                break;
+            if ( strcasecmp( valstr, "unknown" ) == 0 )
+            {
+                parms->mp_dist_unknown = true;
+                continue;
+            }
+            rc = ParseFromTo( &from, &to, valstr );
+            if ( rc != 0 )
+                break;
+            if ( ( from != 0 ) || ( to != 0 ) )
+            {
+                mpd[ j ].from = from;
+                mpd[ j ].to = to;
+                ++j;
+            }
+        }
+        if ( rc == 0 )
+        {
+            parms->mp_dist = mpd;
+            parms->mp_dist_qty = j;
+            
+            SAM_DUMP_DBG( 2, ( "filter by mate pair distance\n" ) );
+            if ( parms->mp_dist_unknown )
+                SAM_DUMP_DBG( 2, ( "    distance: unknown\n" ) );
+            for ( i = 0; i < j; ++i )
+            {
+                SAM_DUMP_DBG( 2, ( "    distance [%lu-%lu]\n",
+                              parms->mp_dist[ i ].from, parms->mp_dist[ i ].to ) );
+            }
+        }
+        else
+            free( mpd );
+    }
+    return rc;
+}
+
+
+static rc_t GetRegion( Args const *const args, struct params_s *const parms, unsigned const n )
+{
+    rc_t rc;
+    TAlignedRegion *const reg = calloc( n, sizeof( reg[ 0 ] ) );
+    
+    if ( reg == NULL )
+        rc = RC( rcExe, rcArgv, rcProcessing, rcMemory, rcExhausted );
+    else
+    {
+        unsigned i;
+        unsigned j;
+        
+        for ( rc = 0, j = i = 0; i < n; ++i )
+        {
+            char const *valstr;
+            char const *sep;
+            unsigned namelen;
+            unsigned f;
+            unsigned e;
+            TAlignedRegion r;
+
+	    memset(&r,0,sizeof(r));
+            
+            rc = ArgsOptionValue( args, DumpArgs[ earg_region ].name, i, &valstr );
+            if ( rc != 0 ) break;
+            
+            sep = strchr( valstr, ':' );
+            if ( sep != NULL )
+                namelen = sep - valstr;
+            else
+                namelen = string_size( valstr );
+            
+            if ( namelen >= sizeof( r.name ) )
+                return RC( rcExe, rcArgv, rcProcessing, rcParam, rcTooLong );
+            
+            memcpy( r.name, valstr, namelen );
+            r.name[ namelen ] = '\0';
+            
+            r.rq = UINT_MAX;
+            if ( sep != NULL )
+            {
+                int from = -1;
+                int to = -1;
+                
+                rc = ParseFromTo( &from, &to, sep + 1 );
+                if ( rc != 0 )
+                    break;
+                if ( from > 0 ) /* convert to 0-based */
+                    --from;
+                else if ( to > 0 )
+                    from = 0;
+                if ( to > 0 )
+                    --to;
+                else if ( from >= 0 && to < 0 )
+                    to = from;
+                if ( from >= 0 || to >= 0 )
+                {
+                    if ( from > to )
+                    {
+                        int tmp = to;
+                        to = from;
+                        from = tmp;
+                    }
+                    r.r[ 0 ].from = from;
+                    r.r[ 0 ].to = to;
+                    r.rq = 1;
+                }
+            }
+            
+            for ( f = 0, e = j; f < e; )
+            {
+                unsigned const m = ( ( f + e ) / 2 );
+                int const diff = strcmp( r.name, reg[ m ].name );
+                
+                if ( diff < 0 )
+                    e = m;
+                else
+                    f = m + 1;
+            }
+            if ( 0 < e && e < j && strcmp( r.name, reg[ e-1 ].name ) == 0 )
+            {
+                TAlignedRegion *const fnd = &reg[ e - 1 ];
+                
+                if ( fnd->rq != UINT_MAX )
+                {
+                    for ( f = 0, e = fnd->rq; f < e; )
+                    {
+                        unsigned const m = ( ( f + e ) / 2 );
+                        
+                        if ( r.r[ 0 ].from < fnd->r[ m ].from )
+                            e = m;
+                        else
+                            f = m + 1;
+                    }
+                    if ( fnd->rq >= ( sizeof( r.r ) / sizeof( r.r[0] ) ) )
+                    {
+                        rc = RC( rcExe, rcArgv, rcProcessing, rcBuffer, rcInsufficient );
+                        break;
+                    }
+                    memmove( &fnd->r[ e +1 ], &fnd->r[ e ], ( fnd->rq - e ) * sizeof( fnd->r[ 0 ] ) );
+                    fnd->r[ e ] = r.r[ 0 ];
+                    ++fnd->rq;
+                }
+            }
+            else
+            {
+                memmove( &reg[ e + 1 ], &reg[ e ], ( j - e ) * sizeof( reg[ 0 ] ) );
+                reg[ e ] = r;
+                ++j;
+            }
+        }
+        if ( rc == 0 )
+        {
+            parms->region = reg;
+            parms->region_qty = j;
+            
+            for ( i = 0; i < parms->region_qty; ++i )
+            {
+                TAlignedRegion *const r = &parms->region[ i ];
+                
+                SAM_DUMP_DBG( 2, ( "filter by %s\n", r->name ) );
+                if ( r->rq == UINT_MAX )
+                {
+                    r->rq = 1;
+                    r->r[ 0 ].from = 0;
+                    r->r[ 0 ].to = UINT_MAX;
+                }
+                for ( j = 0; j < r->rq; ++j )
+                {
+                    unsigned const to = r->r[ j ].to;
+                    unsigned const from = r->r[ j ].from;
+                    
+                    SAM_DUMP_DBG( 2, ( "   range: [%u:%u]\n", r->r[ j ].from, to ) );
+                    if ( r->max_to < to ) r->max_to = to;
+                    if ( r->min_from < from ) r->min_from = from;
+                }
+            }
+        }
+        else
+            free( reg );
+    }
+    return rc;
+}
+
+
+static rc_t GetQualQuant( Args const *const args, struct params_s *const parms )
+{
+    char const *valstr;
+    int i;
+    rc_t rc = ArgsOptionValue( args, DumpArgs[ earg_QualQuant ].name, 0, &valstr );
+    
+    if ( rc == 0 && strcmp( valstr, "0" ) != 0 )
+        parms->quantizeQual = QualityQuantizerInitMatrix( parms->qualQuant, valstr );
+    for(i=1; parms->qualQuant[i]==parms->qualQuant[0] && i<256;i++){}
+    if(i<256) parms->qualQuantSingle=0;
+    else      parms->qualQuantSingle = parms->qualQuant[0];
+    return rc;
+}
+
+
+static rc_t GetArgs( Args const *const args, unsigned const count[],
+                     char const **const errmsg )
+{
+    static struct params_s parms;
+    bool const multipass = ParamCount( args, 0 ) > 1;
+    rc_t rc;
+    
+    memset( &parms, 0, sizeof( parms ) );
+    
+    if ( count[ earg_comment ] )
+    {
+        rc = GetComments( args, &parms, count[ earg_comment ] );
+        if ( rc != 0 )
+        {
+            *errmsg = DumpArgs[ earg_comment ].name;
+            return rc;
+        }
+    }
+    
+    if ( count[ earg_region ] && count[ earg_unaligned_only ] == 0 )
+    {
+        rc = GetRegion( args, &parms, count[ earg_region ] );
+        if ( rc != 0 )
+        {
+            *errmsg = DumpArgs[ earg_region ].name;
+            return rc;
+        }
+    }
+
+    if ( count[ earg_distance ] && count[ earg_unaligned_only ] == 0 )
+    {
+        rc = GetDistance( args, &parms, count[ earg_distance ] );
+        if ( rc != 0 )
+        {
+            *errmsg = DumpArgs[ earg_distance ].name;
+            return rc;
+        }
+    }
+
+    if ( count[ earg_QualQuant ] )
+    {
+        rc = GetQualQuant( args, &parms );
+        if ( rc != 0 )
+        {
+            *errmsg = DumpArgs[ earg_QualQuant ].name;
+            return rc;
+        }
+    }
+    
+    parms.cg_sam = ( count[ earg_CG_SAM ] != 0 );
+    parms.cg_evidence = ( count[ earg_CG_evidence ] != 0 );
+    parms.cg_ev_dnb = ( count[ earg_CG_ev_dnb ] != 0 );
+    
+    if ( count[ earg_CG_mappings ] == 0 &&
+         ( parms.cg_sam || parms.cg_evidence || parms.cg_ev_dnb ) )
+    {
+        parms.primaries = false;
+        parms.secondaries = false;
+        parms.unaligned = false;
+    }
+    else
+    {
+        parms.primaries = true;
+        parms.secondaries = ( count[ earg_prim_only ] == 0 );
+        parms.unaligned = ( ( count[ earg_unaligned ] != 0 ) /*&& ( parms.region_qty == 0 )*/ );
+    }
+    
+    parms.long_cigar = ( count[ earg_cigartype ] != 0 );
+    parms.use_seqid = ( ( count[ earg_seq_id ] != 0 ) || multipass );
+    parms.hide_identical = ( count[ earg_identicalbases ] != 0 );
+    parms.fasta = ( count[ earg_fasta ] != 0 );
+    parms.fastq = ( count[ earg_fastq ] != 0 );
+    parms.reverse_unaligned = ( count[ earg_reverse ] != 0 );
+    parms.cg_friendly_names = count[ earg_CG_names ] != 0;
+    parms.spot_group_in_name = ( count[ earg_qname ] != 0 || multipass );
+    parms.noheader = ( ( count[ earg_noheader ] != 0 ) || parms.fasta || parms.fastq || multipass );
+    parms.reheader = ( ( count[ earg_header ] != 0 ) && !parms.noheader );
+    parms.xi = ( count[ earg_XI ] != 0 );
+    if ( ( count[ earg_cigarCG ] == 0 ) && ( count[ earg_cigarCG_merge ] == 0 ) )
+    {
+        parms.cg_style = 0;
+    }
+    else if ( count[ earg_cigarCG ] == 0 )
+    {
+        parms.cg_style = 1;
+        parms.long_cigar = false;
+    }
+    else if ( count[ earg_cigarCG_merge ] == 0 )
+    {
+        parms.cg_style = 2;
+    }
+    else
+    {
+        rc = RC( rcExe, rcArgv, rcProcessing, rcParam, rcInconsistent );
+        *errmsg = "cigar-CG and CG are mutually exclusive";
+        parms.cg_style = 0;
+    }
+
+    if (count[ earg_unaligned_only ] > 0) {
+        parms.unaligned_spots = true;
+        
+        parms.primaries = false;
+        parms.secondaries = false;
+        parms.unaligned = true;
+        parms.cg_ev_dnb = false;
+        parms.cg_evidence = false;
+        parms.cg_sam = false;
+        parms.cg_style = 0;
+    }
+    
+    parms.test_rows = GetOptValU( args, DumpArgs[ earg_test_rows ].name, 0, NULL );
+    parms.mate_row_gap_cachable = GetOptValU( args, DumpArgs[ earg_mate_row_gap_cachable ].name, 1000000, NULL );
+    
+    param = &parms;
+    return 0;
+}
+
+
+static rc_t GetParams( Args const *const args, char const **const errmsg )
+{
+    unsigned count[ ARGS_COUNT ];
+    rc_t rc = CountArgs( args, count, errmsg );
+    
+    if ( rc == 0 )
+        rc = GetArgs( args, count, errmsg );
+    return rc;
+}
+
+
+rc_t CC SAM_Dump_Main( int argc, char* argv[] )
+{
+    rc_t rc = 0;
+    Args* args;
+    char const *errmsg = "stop";
+    bool error_reported = false;
+
+    memset( &g_out_writer, 0, sizeof( g_out_writer ) );
+    KOutHandlerSetStdOut();
+    KStsHandlerSetStdErr();
+    KLogHandlerSetStdErr();
+    (void)KDbgHandlerSetStdErr();
+
+    ReportBuildDate( __DATE__ );
+
+    rc = ArgsMakeAndHandle( &args, argc, argv, 1, DumpArgs, ARGS_COUNT );
+    if ( rc == 0 )
+    {
+        uint32_t pcount;
+
+        rc = ArgsParamCount( args, &pcount );
+        if ( rc != 0 || pcount < 1 )
+        {
+            errmsg = "";
+            rc = argc < 2 ? 0 : RC( rcExe, rcArgv, rcParsing, rcParam, rcInsufficient );
+            MiniUsage( args );
+        }
+        else if ( ( rc = GetParams( args, &errmsg ) ) != 0 )
+        {
+        }
+        else
+        {
+            VDBManager const *mgr;
+            
+            rc = VDBManagerMakeRead( &mgr, NULL );
+            if ( rc == 0 )
+            {
+                rc = BufferedWriterMake( param->output_gzip, param->output_bz2 );
+                if ( rc == 0 )
+                {
+                    unsigned i;
+                    
+                    for ( i = 0; i < pcount; ++i )
+                    {
+                        char const *arg;
+                        
+                        rc = ArgsParamValue( args, i, &arg );
+                        if ( rc != 0 ) break;
+                        rc = ProcessPath( mgr, arg );
+#if _ARCH_BITS < 64
+                        /* look for "param excessive while writing vector within container module" */
+                        if (GetRCState(rc) == rcExcessive &&
+                            GetRCObject(rc) == rcParam &&
+                            GetRCContext(rc) == rcWriting &&
+                            GetRCTarget(rc) == rcVector &&
+                            GetRCModule(rc) == rcCont)
+                        {
+                            ( void )PLOGMSG( klogErr, (klogErr, "This run '$(run)' contains too many reads to be processed with a $(bits)-bit executable; please try again with a 64-bit executable.", "run=%s,bits=%u", arg, _ARCH_BITS));
+                        }
+#endif
+                        if ( rc != 0 ) break;
+                    }
+                    BufferedWriterRelease( rc == 0 );
+                }
+                VDBManagerRelease( mgr );
+            }
+        }
+        ArgsWhack( args );
+    }
+
+    if ( rc != 0 && !error_reported )
+    {
+        if ( errmsg[ 0 ] )
+        {
+            ( void )LOGERR( klogErr, rc, errmsg );
+        } else if ( KLogLastErrorCode() != rc )
+        {
+            ( void )LOGERR( klogErr, rc, "stop" );
+        }
+    }
+
+    {
+        /* Report execution environment if necessary */
+        rc_t rc2 = ReportFinalize( rc );
+        if ( rc == 0 )
+            rc = rc2;
+    }
+    return rc;
+}
+
+
+rc_t CC Legacy_KMain( int argc, char* argv[] )
+{
+    char filename[ 4096 ];
+    /*
+       Try to find a option-file - parameter in the original parameters 
+       This is a hack to teach sam-dump to read it's parameters from a file/pipe instead
+       of the commandline
+       It is neccessary because the code above does not use libkapp to parse parameters!
+    */
+    rc_t rc = Args_find_option_in_argv( argc, argv, "--option-file", filename, sizeof filename );
+    if ( rc == 0 )
+    {
+        int new_argc;
+        char ** new_argv;
+        /* we found it! Now comes the special treatment: we fake a new argc/argv-pair! */
+        rc = Args_tokenize_file_and_progname_into_argv( filename, "sam-dump", &new_argc, &new_argv );
+        if ( rc == 0 )
+        {
+            /* pass the faked input-parameters from */
+            rc = SAM_Dump_Main( new_argc, new_argv );
+
+            Args_free_token_argv( new_argc, new_argv );
+        }
+    }
+    else
+    {
+        /* we did not found the special option, just use the commandline-parameters unchanged */
+        rc = SAM_Dump_Main( argc, argv );
+    }
+    return rc;
+}
diff --git a/tools/sra-pileup/sam-dump.vers b/tools/sra-pileup/sam-dump.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/sra-pileup/sam-dump.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/sra-pileup/sam-dump3.c b/tools/sra-pileup/sam-dump3.c
new file mode 100644
index 0000000..01f217a
--- /dev/null
+++ b/tools/sra-pileup/sam-dump3.c
@@ -0,0 +1,532 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#include "sam-dump.vers.h"
+
+#include <kapp/main.h>
+#include <vdb/report.h> /* ReportSetVDBManager */
+#include <klib/report.h>
+#include <sysalloc.h>
+
+#include "sam-dump-opts.h"
+#include "inputfiles.h"
+#include "sam-hdr.h"
+#include "matecache.h"
+#include "cg_tools.h"
+#include "out_redir.h"
+#include "sam-aligned.h"
+#include "sam-unaligned.h"
+
+
+char const *sd_unaligned_usage[]      = { "Output unaligned reads along with aligned reads",
+                                       NULL };
+
+char const *sd_primaryonly_usage[]    = { "Output only primary alignments",
+                                       NULL };
+
+char const *sd_cigartype_usage[]      = { "Output long version of CIGAR",
+                                       NULL };
+
+char const *sd_cigarCG_usage[]        = { "Output CG version of CIGAR",
+                                       NULL };
+
+char const *sd_cigarCGMerge_usage[]   = { "Apply CG fixups to CIGAR/SEQ/QUAL and outputs CG-specific columns",
+                                       NULL };
+
+char const *sd_CG_evidence[]          = { "Output CG evidence aligned to reference", 
+                                       NULL };
+
+char const *sd_CG_ev_dnb[]            = { "Output CG evidence DNB's aligned to evidence",
+                                       NULL };
+
+char const *sd_CG_SAM[]               = { "Output CG evidence DNB's aligned to reference ", 
+                                       NULL };
+
+char const *sd_CG_mappings[]          = { "Output CG sequences aligned to reference ",
+                                       NULL };
+
+char const *sd_header_usage[]         = { "Always reconstruct header",
+                                       NULL };
+
+char const *sd_noheader_usage[]       = { "Do not output headers",
+                                       NULL };
+
+char const *sd_region_usage[]         = { "Filter by position on genome.",
+                                       "Name can either be file specific name (ex: \"chr1\" or \"1\").",
+                                       "\"from\" and \"to\" (inclusive) are 1-based coordinates",
+                                       NULL };
+
+char const *sd_distance_usage[]       = { "Filter by distance between matepairs.",
+                                       "Use \"unknown\" to find matepairs split between the references.",
+                                       "Use from-to (inclusive) to limit matepair distance on the same reference",
+                                       NULL };
+
+char const *sd_seq_id_usage[]         = { "Print reference SEQ_ID in RNAME instead of NAME",
+                                       NULL };
+
+char const *sd_identicalbases_usage[] = { "Output '=' if base is identical to reference",
+                                       NULL };
+
+char const *sd_gzip_usage[]           = { "Compress output using gzip",
+                                       NULL };
+
+char const *sd_bzip2_usage[]          = { "Compress output using bzip2",
+                                       NULL };
+
+char const *sd_qname_usage[]          = { "Add .SPOT_GROUP to QNAME",
+                                       NULL };
+
+char const *sd_fasta_usage[]          = { "Produce Fasta formatted output",
+                                       NULL };
+
+char const *sd_fastq_usage[]          = { "Produce FastQ formatted output",
+                                       NULL };
+
+char const *sd_prefix_usage[]         = { "Prefix QNAME: prefix.QNAME",
+                                       NULL };
+
+char const *sd_reverse_usage[]        = { "Reverse unaligned reads according to read type",
+                                       NULL };
+
+char const *sd_comment_usage[]        = { "Add comment to header. Use multiple times for several lines. Use quotes",
+                                       NULL };
+
+char const *sd_XI_usage[]             = { "Output cSRA alignment id in XI column",
+                                       NULL };
+
+char const *sd_qual_quant_usage[]     = { "Quality scores quantization level",
+                                       "a string like '1:10,10:20,20:30,30:-'",
+                                       NULL };
+
+char const *sd_report_usage[]         = { "report options instead of executing",
+                                       NULL };
+
+char const *sd_outputfile_usage[]     = { "print output into this file (instead of STDOUT)",
+                                       NULL };
+
+char const *sd_outbufsize_usage[]     = { "size of output-buffer(dflt:32k, 0...off)",
+                                       NULL };
+
+char const *sd_cachereport_usage[]    = { "print report about mate-pair-cache",
+                                       NULL };
+
+char const *sd_unaligned_only_usage[] = { "output reads for spots with no aligned reads",
+                                       NULL };
+
+char const *sd_cg_names_usage[]       = { "prints cg-style spotgroup.spotid fromed names",
+                                       NULL };
+
+char const *sd_cur_cache_usage[]      = { "open cached cursor with this size",
+                                       NULL };
+
+char const *sd_min_mapq_usage[]       = { "min. mapq an alignment has to have, to be printed",
+                                       NULL };
+
+char const *sd_no_mate_cache_usage[]  = { "do not use a mate-cache, slower but less memory usage",
+                                       NULL };
+
+OptDef SamDumpArgs[] =
+{
+    { OPT_UNALIGNED,     "u", NULL, sd_unaligned_usage,      0, false, false },  /* print unaligned reads */
+    { OPT_PRIM_ONLY,     "1", NULL, sd_primaryonly_usage,    0, false, false },  /* print only primary alignments */
+    { OPT_CIGAR_LONG,    "c", NULL, sd_cigartype_usage,      0, false, false },  /* use long cigar-string instead of short */
+    { OPT_CIGAR_CG,     NULL, NULL, sd_cigarCG_usage,        0, false, false },  /* transform cigar into cg-style ( has B/N ) */
+    { OPT_RECAL_HDR,     "r", NULL, sd_header_usage,         0, false, false },  /* recalculate header */
+    { OPT_NO_HDR,        "n", NULL, sd_noheader_usage,       0, false, false },  /* do not print header */
+    { OPT_HDR_COMMENT,  NULL, NULL, sd_comment_usage,        0, true,  false },  /* insert this comment into header */
+    { OPT_REGION,       NULL, NULL, sd_region_usage,         0, true,  false },  /* filter by region */
+    { OPT_MATE_DIST,    NULL, NULL, sd_distance_usage,       0, true,  false },  /* filter by a list of mate-pair-distances */
+    { OPT_USE_SEQID,     "s", NULL, sd_seq_id_usage,         0, false, false },  /* print seq-id instead of seq-name*/
+    { OPT_HIDE_IDENT,    "=", NULL, sd_identicalbases_usage, 0, false, false },  /* replace bases that match the reference with '=' */
+    { OPT_GZIP,         NULL, NULL, sd_gzip_usage,           0, false, false },  /* compress the output with gzip */
+    { OPT_BZIP2,        NULL, NULL, sd_bzip2_usage,          0, false, false },  /* compress the output with bzip2 */
+    { OPT_SPOTGRP,       "g", NULL, sd_qname_usage,          0, false, false },  /* add spotgroup to qname */
+    { OPT_FASTQ,        NULL, NULL, sd_fastq_usage,          0, false, false },  /* output-format = fastq ( instead of SAM ) */
+    { OPT_FASTA,        NULL, NULL, sd_fasta_usage,          0, false, false },  /* output-format = fasta ( instead of SAM ) */
+    { OPT_PREFIX,        "p", NULL, sd_prefix_usage,         0, true,  false },  /* prefix QNAME with this string */
+    { OPT_REVERSE,      NULL, NULL, sd_reverse_usage,        0, false, false },  /* reverse unaligned reads if reverse-flag set*/
+    { OPT_TEST_ROWS,    NULL, NULL, NULL,                    0, true,  false },  /* test-rows, if >0 limit output to this amount of rows */
+    { OPT_MATE_GAP,     NULL, NULL, NULL,                    0, true,  false },  /* int value, mate's farther apart than this are not cached */
+    { OPT_CIGAR_CG_M,   NULL, NULL, sd_cigarCGMerge_usage,   0, false, false },  /* transform cg-data(length of read/patterns in cigar) into valid SAM (cigar/READ/QUALITY)*/
+    { OPT_XI_DEBUG,     NULL, NULL, sd_XI_usage,             0, false, false },  /* output alignment id for debugging... XI:I:NNNNNNN */
+    { OPT_Q_QUANT,       "Q", NULL, sd_qual_quant_usage,     0, true,  false },  /* quality-quantization string */
+    { OPT_CG_EVIDENCE,  NULL, NULL, sd_CG_evidence,          0, false, false },  /* CG-evidence */
+    { OPT_CG_EV_DNB,    NULL, NULL, sd_CG_ev_dnb,            0, false, false },  /* CG-ev-dnb */
+    { OPT_CG_MAPP,      NULL, NULL, sd_CG_mappings,          0, false, false },  /* CG-mappings */
+    { OPT_CG_SAM,       NULL, NULL, sd_CG_SAM,               0, false, false },  /* cga-tools emulation mode */
+    { OPT_REPORT,       NULL, NULL, sd_report_usage,         0, false, false },  /* report options instead of executing */
+    { OPT_OUTPUTFILE,   NULL, NULL, sd_outputfile_usage,     0, true,  false },  /* write into output-file */
+    { OPT_OUTBUFSIZE,   NULL, NULL, sd_outbufsize_usage,     0, true,  false },  /* size of output-buffer */
+    { OPT_CACHEREPORT,  NULL, NULL, sd_cachereport_usage,    0, false, false },  /* report usage of mate-pair-cache */
+    { OPT_UNALIGNED_ONLY,NULL, NULL, sd_unaligned_only_usage, 0, false, false }, /* print only unaligned spots */
+    { OPT_CG_NAMES,     NULL, NULL, sd_cg_names_usage,       0, false, false },  /* print cg-style spotnames */
+    { OPT_CURSOR_CACHE, NULL, NULL, sd_cur_cache_usage,      0, true,  false },  /* size of cursor cache */
+    { OPT_MIN_MAPQ,     NULL, NULL, sd_min_mapq_usage,       0, true,  false },  /* minimal mapping quality */
+    { OPT_NO_MATE_CACHE,NULL, NULL, sd_no_mate_cache_usage,  0, false, false },  /* do not use mate-cache */
+    { OPT_DUMP_MODE,    NULL, NULL, NULL,                    0, true,  false },  /* how to produce aligned reads if no regions given */
+    { OPT_CIGAR_TEST,   NULL, NULL, NULL,                    0, true,  false },  /* test cg-treatment of cigar string */
+    { OPT_LEGACY,       NULL, NULL, NULL,                    0, false, false }   /* force legacy code-path */
+};
+
+char const *sd_usage_params[] =
+{
+    NULL,                       /* unaligned */
+    NULL,                       /* primaryonly */
+    NULL,                       /* cigartype */
+    NULL,                       /* cigarCG */
+    NULL,                       /* recalc header */
+    NULL,                       /* no-header */
+    "text",                     /* hdr-comment */
+    "name[:from-to]",           /* region */
+    "from-to|'unknown'",        /* mate distance filter*/
+    NULL,                       /* seq-id */
+    NULL,                       /* identical-bases */
+    NULL,                       /* gzip */
+    NULL,                       /* bzip2 */
+    NULL,                       /* qname */
+    NULL,                       /* fasta */
+    NULL,                       /* fastq */
+    "prefix",                   /* prefix */
+    NULL,                       /* reverse */
+    NULL,                       /* test-rows */
+    NULL,                       /* mate-row-gap-cacheable */
+    NULL,                       /* cigarCGMerge */
+    NULL,                       /* XI */
+    "quantization string",      /* qual-quant */
+    NULL,                       /* CG-evidence */
+    NULL,                       /* CG-ev-dnb */
+    NULL,                       /* CG-mappings */
+    NULL,                       /* CG-SAM */
+    NULL,                       /* report */
+    NULL,                       /* outputfile */
+    NULL,                       /* outputfile buffsize */
+    NULL,                       /* cachereport */
+    NULL,                       /* unaligned-only */
+    NULL,                       /* CG-names */
+    NULL,                       /* cursor cache */
+    NULL,                       /* min_mapq */
+    NULL,                       /* no mate-cache */
+    NULL,                       /* dump_mode */
+    NULL,                       /* cigar test */
+    NULL                        /* force legacy code path */
+};
+
+ver_t CC KAppVersion( void )
+{
+    return SAM_DUMP_VERS;
+}
+
+const char UsageDefaultName[] = "sam-dump";
+
+
+rc_t CC UsageSummary( char const *progname )
+{
+    return KOutMsg( "Usage:\n"
+        "\t%s [options] path-to-run[ path-to-run ...]\n\n", progname );
+}
+
+
+rc_t CC Usage( Args const *args )
+{
+    char const *progname = UsageDefaultName;
+    char const *fullpath = UsageDefaultName;
+    rc_t rc;
+    unsigned i, n;
+
+    rc = ArgsProgram( args, &fullpath, &progname );
+
+    UsageSummary( progname );
+
+    KOutMsg( "Options:\n" );
+
+    n = sizeof( SamDumpArgs ) / sizeof( SamDumpArgs[ 0 ] );
+    n--; /* do not print the last option in the SamDumpArgs as help */
+    for( i = 0; i < n; i++ )
+    {
+        if ( SamDumpArgs[ i ].help != NULL )
+        {
+            HelpOptionLine( SamDumpArgs[ i ].aliases, SamDumpArgs[ i ].name,
+                            sd_usage_params[ i ], SamDumpArgs[ i ].help );
+        }
+    }
+    KOutMsg( "\n" );
+    HelpOptionsStandard();
+
+    HelpVersion( fullpath, KAppVersion() );
+
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+static rc_t CC write_to_FILE( void *f, const char *buffer, size_t bytes, size_t *num_writ )
+{
+    * num_writ = fwrite ( buffer, 1, bytes, f );
+    if ( * num_writ != bytes )
+        return RC( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+    return 0;
+}
+
+
+/* =========================================================================================== */
+
+
+static uint32_t tabsel_2_ReferenceList_Options( const samdump_opts * opts )
+{
+    uint32_t res = 0;
+    if ( opts->dump_primary_alignments )
+        res |= ereferencelist_usePrimaryIds;
+    if ( opts->dump_secondary_alignments )
+        res |= ereferencelist_useSecondaryIds;
+    if ( opts->dump_cg_evidence | opts->dump_cg_ev_dnb )
+        res |= ereferencelist_useEvidenceIds;
+    return res;
+}
+
+
+static rc_t print_samdump( const samdump_opts * const opts )
+{
+    KDirectory *dir;
+
+    rc_t rc = KDirectoryNativeDir( &dir );
+    if ( rc != 0 )
+    {
+        (void)LOGERR( klogErr, rc, "cannot create native directory" );
+    }
+    else
+    {
+        const VDBManager *mgr;
+        rc = VDBManagerMakeRead( &mgr, dir );
+        if ( rc != 0 )
+        {
+            (void)LOGERR( klogErr, rc, "cannot create vdb-manager" );
+        }
+        else
+        {
+            input_files * ifs; /* input_files.h */
+            uint32_t reflist_opt = tabsel_2_ReferenceList_Options( opts );
+            ReportSetVDBManager(mgr);
+            rc = discover_input_files( &ifs, mgr, opts->input_files, reflist_opt ); /* inputfiles.c */
+            if ( rc == 0 )
+            {
+                if ( ifs->database_count == 0 && ifs->table_count == 0 )
+                {
+                    rc = RC( rcExe, rcFile, rcReading, rcItem, rcNotFound );
+                    (void)LOGERR( klogErr, rc, "input object(s) not found" );
+                }
+                else
+                {
+                    matecache * mc = NULL;
+
+                    if ( opts->use_mate_cache )
+                        rc = make_matecache( &mc, ifs->database_count );
+
+                    if ( rc == 0 )
+                    {
+                        uint64_t rows_so_far = 0;
+
+                        /* print output of header */
+                        if ( ( opts->output_format == of_sam )  &&
+                             ( ifs->database_count > 0 )        &&
+                             ( opts->header_mode != hm_none )   &&
+                             !opts->dump_unaligned_only ) 
+                        /* ------------------------------------------------------ */
+                            rc = print_headers( opts, ifs ); /* sam-hdr.c */
+                        /* ------------------------------------------------------ */
+
+
+                        /* print output of aligned reads */
+                        if ( rc == 0 && 
+                             ifs->database_count > 0 && 
+                             !opts->dump_unaligned_only )
+                        /* ------------------------------------------------------ */
+                            rc = print_aligned_spots( opts, ifs, mc, &rows_so_far ); /* sam-aligned.c */
+                        /* ------------------------------------------------------ */
+
+
+                        /* print output of unaligned reads */
+                        if ( rc == 0 )
+                        {
+                            /* ------------------------------------------------------ */
+                            rc = print_unaligned_spots( opts, ifs, mc, &rows_so_far ); /* sam-unaligned.c */
+                            /* ------------------------------------------------------ */
+                        }
+
+                        if ( opts->use_mate_cache )
+                        {
+                            if ( opts->report_cache )
+                                rc = matecache_report( mc ); /* matecache.c */
+                            release_matecache( mc ); /* matecache.c */
+                        }
+                    }
+                }
+                release_input_files( ifs ); /* inputfiles.c */
+            }
+            VDBManagerRelease( mgr );
+        }
+        KDirectoryRelease( dir );
+    }
+    return rc;
+}
+
+
+static rc_t perform_cigar_test( const samdump_opts * const opts )
+{
+    rc_t rc;
+    cg_cigar_input input;
+    cg_cigar_output output;
+
+    memset( &input, 0, sizeof input );
+    memset( &output, 0, sizeof output );
+
+    input.cigar_len = string_size( opts->cigar_test );
+    input.cigar = opts->cigar_test;
+
+    rc = make_cg_cigar( &input, &output );
+    if ( rc == 0 )
+    {
+        KOutMsg( "%s\n", output.cigar );
+    }
+    else
+    {
+        (void)PLOGERR( klogErr, ( klogErr, rc, "error testing cg-cigar treatment '$(t)'", 
+                                  "t=%s", opts->cigar_test ) );
+    }
+    return rc;
+}
+
+/* =========================================================================================== */
+
+static rc_t samdump_main( Args * args, const samdump_opts * const opts )
+{
+    rc_t rc = 0;
+    out_redir redir; /* from out_redir.h */
+    enum out_redir_mode mode;
+
+    switch( opts->output_compression )
+    {
+        case oc_none  : mode = orm_uncompressed; break;
+        case oc_gzip  : mode = orm_gzip; break;
+        case oc_bzip2 : mode = orm_bzip2; break;
+    }
+
+    rc = init_out_redir( &redir, mode, opts->outputfile, opts->output_buffer_size ); /* from out_redir.c */
+    if ( rc == 0 )
+    {
+        if ( opts->report_options )
+        {
+            report_options( opts ); /* from sam-dump-opts.c */
+        }
+        else if ( opts->cigar_test != NULL )
+        {
+            rc = perform_cigar_test( opts );
+        }
+        else
+        {
+            if ( opts->input_file_count < 1 )
+            {
+                rc = RC( rcExe, rcNoTarg, rcConstructing, rcParam, rcInvalid );
+                (void)LOGERR( klogErr, rc, "no inputfiles given at commandline" );
+                Usage( args );
+            }
+            else
+            {
+            /* ------------------------------------------------------ */
+                rc = print_samdump( opts );
+            /* ------------------------------------------------------ */
+            }
+        }
+        release_out_redir( &redir ); /* from out_redir.c */
+    }
+    return rc;
+}
+
+
+/* forward declaration, code is in sam-dump.c */
+rc_t CC Legacy_KMain( int argc, char* argv[] );
+
+
+#define LEGACY_FOR_CGI 1
+
+rc_t CC KMain( int argc, char *argv [] )
+{
+    bool call_legacy_dumper = false;
+
+    rc_t rc = KOutHandlerSet( write_to_FILE, stdout );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "KOutHandlerSet() failed" );
+    }
+    else
+    {
+        Args * args;
+
+        KLogHandlerSetStdErr();
+        rc = ArgsMakeAndHandle( &args, argc, argv, 1, 
+                                SamDumpArgs, sizeof SamDumpArgs / sizeof SamDumpArgs [ 0 ] );
+        if ( rc == 0 )
+        {
+            samdump_opts opts; /* from sam-dump-opts.h */
+
+            memset( &opts, 0, sizeof opts );
+            rc = gather_options( args, &opts ); /* from sam-dump-opts.c */
+            if ( rc == 0 )
+            {
+                if ( LEGACY_FOR_CGI > 0 )
+                {
+                    call_legacy_dumper = (  opts.dump_cg_evidence ||
+                                            opts.dump_cg_sam ||
+                                            opts.dump_cg_ev_dnb ||
+                                            opts.force_legacy ||
+                                            opts.merge_cg_cigar );
+                }
+                if ( !call_legacy_dumper )
+                {
+                    ReportBuildDate( __DATE__ );
+                    rc = samdump_main( args, &opts );
+                }
+                /* because the options have sub-structures, like tree/vector's */
+                release_options( &opts ); /* from sam-dump-opts.c */
+            }
+            ArgsWhack( args );
+        }
+    }
+
+    /* trick to call the legacy sam-dump code if cg-functionality is requested */
+    if ( call_legacy_dumper )
+    {
+        rc = Legacy_KMain( argc, argv );
+    }
+    else
+    {
+        /* Report execution environment if necessary */
+        rc_t rc2 = ReportFinalize( rc );
+        if ( rc == 0 )
+            rc = rc2;
+    }
+    return rc;
+}
diff --git a/tools/sra-pileup/sam-hdr.c b/tools/sra-pileup/sam-hdr.c
new file mode 100644
index 0000000..0adc2fa
--- /dev/null
+++ b/tools/sra-pileup/sam-hdr.c
@@ -0,0 +1,425 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include <kdb/meta.h>
+#include <kdb/namelist.h>
+#include <align/reference.h>
+#include <sysalloc.h>
+
+#include "sam-dump-opts.h"
+#include "inputfiles.h"
+
+
+static rc_t print_headers_from_metadata( const VDatabase * db, bool * recalc, const char * path )
+{
+    const KMetadata * meta;
+    rc_t rc = VDatabaseOpenMetadataRead( db, &meta );
+    if ( rc != 0 )
+        (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open metadata from '$(t)'", "t=%s", path ) );
+    else
+    {
+        const KMDataNode * node;
+        rc = KMetadataOpenNodeRead( meta, &node, "BAM_HEADER" );
+        if ( rc != 0 )
+        {
+            if ( GetRCState( rc ) == rcNotFound )
+            {
+                *recalc = true;
+                rc = 0;
+            }
+            else
+                (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open meta-node 'BAM_HEADER' from '$(t)'", "t=%s", path ) );
+        }
+        else
+        {
+            size_t offset = 0, num_read, remaining = ~0;
+            char buffer[ 40960 ];
+            while ( rc == 0 && remaining > 0 )
+            {
+                rc = KMDataNodeRead( node, offset, buffer, sizeof( buffer ),
+                                     &num_read, &remaining );
+                if ( rc == 0 )
+                {
+                    rc = KOutMsg( "%.*s", ( uint32_t )num_read, buffer );
+                    offset += num_read;
+                }
+            }
+            if ( rc == 0 && buffer[ num_read - 1 ] != '\n' )
+            {
+                rc = KOutMsg( "\n" );
+            }
+            KMDataNodeRelease( node );
+        }
+        KMetadataRelease( meta );
+    }
+    return rc;
+}
+
+
+typedef struct seq_id_node
+{
+    BSTNode node;
+    char * seq_id;
+    char * name;
+    INSDC_coord_len seq_len;
+} seq_id_node;
+
+
+static int cmp_pchar( const char * a, const char * b )
+{
+    int res = 0;
+    if ( ( a != NULL )&&( b != NULL ) )
+    {
+        size_t len_a = string_size( a );
+        size_t len_b = string_size( b );
+        res = string_cmp ( a, len_a, b, len_b, ( len_a < len_b ) ? len_b : len_a );
+    }
+    return res;
+}
+
+
+static seq_id_node * make_seq_id_node( const char * seq_id, const char * name, INSDC_coord_len seq_len )
+{
+    seq_id_node *res = calloc( sizeof *res, 1 );
+    if ( res != NULL )
+    {
+        res->name = string_dup( name, string_size( name ) );
+        res->seq_id = string_dup( seq_id, string_size( seq_id ) );
+        res->seq_len = seq_len;
+    }
+    return res;
+}
+
+
+static void free_seq_id_node( seq_id_node * node )
+{
+    if ( node != NULL )
+    {
+        if ( node->seq_id != NULL )
+            free( node->seq_id );
+        if ( node->name != NULL )
+            free( node->name );
+        free( node );
+    }
+}
+
+
+static void CC free_seq_id_tree_callback( BSTNode *n, void * data )
+{
+    free_seq_id_node( ( seq_id_node * )n );
+}
+
+
+static void free_seq_id_tree( BSTree * tree )
+{
+    BSTreeWhack( tree, free_seq_id_tree_callback, NULL );
+}
+
+
+static int CC seq_id_node_vs_pchar_wrapper( const void *item, const BSTNode *n )
+{
+    const seq_id_node * node = ( const seq_id_node * )n;
+    return cmp_pchar( (const char *)item, node->seq_id );
+}
+
+
+static seq_id_node * find_seq_id_node( BSTree * tree, const char * key )
+{
+    return ( seq_id_node * ) BSTreeFind( tree, key, seq_id_node_vs_pchar_wrapper );
+}
+
+
+static int CC node_vs_node_wrapper( const BSTNode *item, const BSTNode *n )
+{
+   const seq_id_node * a = ( const seq_id_node * )item;
+   const seq_id_node * b = ( const seq_id_node * )n;
+   return cmp_pchar( a->seq_id, b->seq_id );
+}
+
+
+static rc_t add_seq_id_node( BSTree * tree, const char * seq_id, const char * name, INSDC_coord_len len )
+{
+    rc_t rc = 0;
+    seq_id_node * node = make_seq_id_node( seq_id, name, len );
+    if ( node != NULL )
+    {
+        rc = BSTreeInsert( tree, (BSTNode *)node, node_vs_node_wrapper );
+        if ( rc != 0 )
+            free_seq_id_node( node );
+    }
+    else
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    return rc;
+}
+
+
+static rc_t print_seq_id_tree( BSTree * tree, input_files * ifs )
+{
+    rc_t rc = 0;
+    uint32_t i;
+    for ( i = 0; i < ifs->database_count && rc == 0; ++i )
+    {
+        input_database * id = VectorGet( &ifs->dbs, i );
+        if ( id != NULL )
+        {
+            uint32_t rcount;
+            rc = ReferenceList_Count( id->reflist, &rcount );
+            if ( rc == 0 && rcount > 0 )
+            {
+                uint32_t r_idx;
+                for ( r_idx = 0; r_idx < rcount && rc == 0; ++r_idx )
+                {
+                    const ReferenceObj * ref_obj;
+                    rc = ReferenceList_Get( id->reflist, &ref_obj, r_idx );
+                    if ( rc == 0 && ref_obj != NULL )
+                    {
+                        const char * seqid;
+                        rc = ReferenceObj_SeqId( ref_obj, &seqid );
+                        if ( rc == 0 )
+                        {
+                            const char * name;
+                            rc = ReferenceObj_Name( ref_obj, &name );
+                            if ( rc == 0 )
+                            {
+                                INSDC_coord_len seq_len;
+                                rc = ReferenceObj_SeqLength( ref_obj, &seq_len );
+                                if ( rc == 0 )
+                                {
+                                    seq_id_node * node = find_seq_id_node( tree, seqid );
+                                    if ( node != NULL )
+                                    {
+                                        if ( node->seq_len != seq_len )
+                                            rc = RC( rcApp, rcNoTarg, rcConstructing, rcData, rcInvalid );
+                                    }
+                                    else
+                                        rc = add_seq_id_node( tree, seqid, name, seq_len );
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+typedef struct hdr_print_ctx
+{
+    rc_t rc;
+    bool use_seq_id;
+} hdr_print_ctx;
+
+
+static void CC print_header_callback( BSTNode *n, void *data )
+{
+    seq_id_node * node = ( seq_id_node * )n;
+    hdr_print_ctx * hctx = ( hdr_print_ctx * )data;
+    if ( hctx->rc == 0 )
+    {
+        if ( hctx->use_seq_id )
+            hctx->rc = KOutMsg( "@SQ\tSN:%s\tLN:%u\n", node->seq_id, node->seq_len );
+        else
+        {
+            if ( cmp_pchar( node->seq_id, node->name ) == 0 )
+                hctx->rc = KOutMsg( "@SQ\tSN:%s\tLN:%u\n", node->name, node->seq_len );
+            else
+                hctx->rc = KOutMsg( "@SQ\tSN:%s\tAS:%s\tLN:%u\n", node->name, node->seq_id, node->seq_len );
+        }
+    }
+}
+
+
+static rc_t extract_spotgroups( VNamelist * spotgroups, input_files * ifs )
+{
+    rc_t rc = 0;
+    uint32_t i;
+    for ( i = 0; i < ifs->database_count && rc == 0; ++i )
+    {
+        input_database * id = VectorGet( &ifs->dbs, i );
+        if ( id != NULL )
+        {
+            const VTable * tab;
+            rc = VDatabaseOpenTableRead( id->db, &tab, "SEQUENCE" );
+            if ( rc != 0 )
+                (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open table SEQUENCE in '$(t)'", "t=%s", id->path ) );
+            else
+            {
+                const KMetadata * meta;
+                rc = VTableOpenMetadataRead( tab, &meta );
+                if ( rc != 0 )
+                    (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open metadata from '$(t)'", "t=%s", id->path ) );
+                else
+                {
+                    const KMDataNode * node;
+                    rc = KMetadataOpenNodeRead( meta, &node, "STATS/SPOT_GROUP" );
+                    if ( rc != 0 )
+                       (void)PLOGERR( klogErr, ( klogErr, rc, "cannot open meta-node 'STATS/SPOT_GROUP' from '$(t)'", "t=%s", id->path ) );
+                    else
+                    {
+                        KNamelist * node_childs;
+                        rc = KMDataNodeListChildren( node, &node_childs );
+                        if ( rc != 0 )
+                            (void)PLOGERR( klogErr, ( klogErr, rc, "cannot list children of SPOT_GROUP-node in '$(t)'", "t=%s", id->path ) );
+                        else
+                        {
+                            uint32_t n_count;
+                            rc = KNamelistCount( node_childs, &n_count );
+                            if ( rc == 0 && n_count > 0 )
+                            {
+                                uint32_t n_idx;
+                                for ( n_idx = 0; n_idx < n_count && rc == 0; ++n_idx )
+                                {
+                                    const char * spotgroup;
+                                    rc = KNamelistGet( node_childs, n_idx, &spotgroup );
+                                    if ( rc == 0 && spotgroup != NULL )
+                                    {
+                                        uint32_t found;
+                                        rc_t rc1 = VNamelistIndexOf( spotgroups, spotgroup, &found );
+                                        if ( GetRCState( rc1 ) == rcNotFound )
+                                            rc = VNamelistAppend( spotgroups, spotgroup );
+                                    }
+                                }
+                            }
+                            KNamelistRelease( node_childs );
+                        }
+                        KMDataNodeRelease( node );
+                    }
+                    KMetadataRelease( meta );
+                }
+                VTableRelease( tab );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t print_spotgroups( VNamelist * spotgroups )
+{
+    uint32_t count;
+    rc_t rc = VNameListCount( spotgroups, &count );
+    if ( rc == 0 && count > 0 )
+    {
+        uint32_t i;
+        for ( i = 0; i < count && rc == 0; ++i )
+        {
+            const char * s;
+            rc = VNameListGet( spotgroups, i, &s );
+            if ( rc == 0 && s != NULL )
+            {
+                if ( cmp_pchar( s, "default" ) != 0 )
+                    rc = KOutMsg( "@RG\tID:%s\n", s );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t print_headers_by_recalculating( const samdump_opts * opts, input_files * ifs )
+{
+    BSTree tree;
+    rc_t rc = KOutMsg( "@HD\tVN:1.3\n" );
+    if ( rc == 0 )
+    {
+        /* collect sequenc-id's and names and their lengths, unique by sequence-id */
+        BSTreeInit( &tree );
+        rc = print_seq_id_tree( &tree, ifs );
+        if ( rc == 0 )
+        {
+            hdr_print_ctx hctx;
+            hctx.rc = 0;
+            hctx.use_seq_id = opts->use_seqid_as_refname;
+            /* ptrint it */
+            BSTreeForEach( &tree, false, print_header_callback, &hctx );
+            rc = hctx.rc;
+        }
+        free_seq_id_tree( &tree );
+
+        /* collect spot-groups ( unique ) */
+        if ( rc == 0 )
+        {
+            VNamelist * spotgroups;
+            rc = VNamelistMake( &spotgroups, 10 );
+            if ( rc == 0 )
+            {
+                rc = extract_spotgroups( spotgroups, ifs );
+                if ( rc == 0 )
+                    rc = print_spotgroups( spotgroups );
+                VNamelistRelease( spotgroups );
+            }
+        }
+    }
+    return rc;
+}
+
+
+rc_t print_headers( const samdump_opts * opts, input_files * ifs )
+{
+    rc_t rc = 0;
+    if ( ifs->database_count > 1 )
+        rc = print_headers_by_recalculating( opts, ifs );
+    else
+    {
+        bool recalc = false;
+        switch( opts->header_mode )
+        {
+        case hm_dump    :   {
+                                input_database * id = VectorGet( &ifs->dbs, 0 );
+                                rc = print_headers_from_metadata( id->db, &recalc, id->path );
+                                if ( rc == 0 && recalc )
+                                    rc = print_headers_by_recalculating( opts, ifs );
+                            }
+                            break;
+
+        case hm_recalc  :   rc = print_headers_by_recalculating( opts, ifs );
+                            break;
+
+        case hm_none    :   break; /* to not let the compiler complain about not handled enum */
+        }
+    }
+
+    /* attach header comments from the commandline */
+    if ( rc == 0 && opts->hdr_comments != NULL )
+    {
+        uint32_t count;
+        rc = VNameListCount( opts->hdr_comments, &count );
+        if ( rc == 0 && count > 0 )
+        {
+            uint32_t i;
+            for ( i = 0; i < count && rc == 0; ++i )
+            {
+                const char * s;
+                rc = VNameListGet( opts->hdr_comments, i, &s );
+                if ( rc == 0 && s != NULL )
+                    rc = KOutMsg( "@CO\t%s\n", s );
+            }
+        }
+    }
+    return rc;
+}
diff --git a/tools/sra-pileup/sam-hdr.h b/tools/sra-pileup/sam-hdr.h
new file mode 100644
index 0000000..7b373c4
--- /dev/null
+++ b/tools/sra-pileup/sam-hdr.h
@@ -0,0 +1,41 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_sam_headers_
+#define _h_sam_headers_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include "sam-dump-opts.h"
+#include "inputfiles.h"
+
+rc_t print_headers( const samdump_opts * opts, input_files * ifs );
+
+#endif
diff --git a/tools/sra-pileup/sam-unaligned.c b/tools/sra-pileup/sam-unaligned.c
new file mode 100644
index 0000000..ea966b6
--- /dev/null
+++ b/tools/sra-pileup/sam-unaligned.c
@@ -0,0 +1,1411 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "read_fkt.h"
+#include "sam-unaligned.h"
+#include <kapp/main.h>
+#include <sysalloc.h>
+#include <ctype.h>
+
+#define COL_READ "(INSDC:dna:text)READ"
+#define COL_REF_NAME "(ascii)REF_NAME"
+#define COL_REF_SEQ_ID "(ascii)REF_SEQ_ID"
+#define COL_REF_POS "(INSDC:coord:zero)REF_POS"
+
+typedef struct prim_table_ctx
+{
+    const VCursor * cursor;
+
+    uint32_t ref_name_idx;
+    uint32_t ref_seq_id_idx;
+    uint32_t ref_pos_idx;
+} prim_table_ctx;
+
+
+static rc_t prepare_prim_table_ctx( const samdump_opts * const opts, const input_table * const itab, prim_table_ctx * const ptx )
+{
+    rc_t rc;
+
+    if ( opts->cursor_cache_size == 0 )
+        rc = VTableCreateCursorRead( itab->tab, &ptx->cursor );
+    else
+        rc = VTableCreateCachedCursorRead( itab->tab, &ptx->cursor, opts->cursor_cache_size );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VTableCreateCursorRead( PRIMARY_ALIGNMENT ) for $(tn) failed", "tn=%s", itab->path ) );
+    }
+    else
+    {
+        rc = add_column( ptx->cursor, COL_REF_NAME, &ptx->ref_name_idx );
+        if ( rc == 0 )
+            rc = add_column( ptx->cursor, COL_REF_SEQ_ID, &ptx->ref_seq_id_idx );
+        if ( rc == 0 )
+            rc = add_column( ptx->cursor, COL_REF_POS, &ptx->ref_pos_idx );
+        if ( rc == 0 )
+        {
+            rc = VCursorOpen( ptx->cursor );
+            if ( rc != 0 )
+            {
+                (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorOpen( PRIMARY_ALIGNMENT ) for $(tn) failed", "tn=%s", itab->path ) );
+            }
+        }
+    }
+    return rc;
+}
+
+
+#define COL_ALIGN_COUNT "(U8)ALIGNMENT_COUNT"
+#define COL_SPOT_ID "(INSDC:SRA:spotid_t)SPOT_ID"
+#define COL_PRIM_AL_ID "(I64)PRIMARY_ALIGNMENT_ID"
+#define COL_READ_TYPE "(INSDC:SRA:xread_type)READ_TYPE"
+#define COL_READ_FILTER "(INSDC:SRA:read_filter)READ_FILTER"
+#define COL_READ_LEN "(INSDC:coord:len)READ_LEN"
+#define COL_READ_START "(INSDC:coord:zero)READ_START"
+/* #define COL_QUALITY "(INSDC:quality:text:phred_33)QUALITY" */
+#define COL_QUALITY "(INSDC:quality:phred)QUALITY"
+#define COL_SPOT_GROUP "(ascii)SPOT_GROUP"
+#define COL_NAME "(ascii)NAME"
+
+#define INVALID_COLUMN 0xFFFFFFFF
+
+typedef struct seq_table_ctx
+{
+    const VCursor * cursor;
+
+    uint32_t align_count_idx;
+    uint32_t prim_al_id_idx;
+    uint32_t read_type_idx;
+    uint32_t read_filter_idx;
+    uint32_t read_len_idx;
+    uint32_t read_start_idx;
+    uint32_t read_idx;
+    uint32_t quality_idx;
+    uint32_t spot_group_idx;
+    uint32_t name_idx;
+} seq_table_ctx;
+
+
+static rc_t prepare_seq_table_ctx( const samdump_opts * const opts, const input_table * const itab, seq_table_ctx * const stx, bool legacy )
+{
+    rc_t rc;
+
+    if ( opts->cursor_cache_size == 0 )
+        rc = VTableCreateCursorRead( itab->tab, &stx->cursor );
+    else
+        rc = VTableCreateCachedCursorRead( itab->tab, &stx->cursor, opts->cursor_cache_size );
+    if ( rc != 0 )
+    {
+        (void)PLOGERR( klogInt, ( klogInt, rc, "VTableCreateCursorRead( SEQUENCE ) for $(tn) failed", "tn=%s", itab->path ) );
+    }
+    else
+    {
+        if ( legacy )
+            stx->align_count_idx = INVALID_COLUMN;
+        else
+            rc = add_column( stx->cursor, COL_ALIGN_COUNT, &stx->align_count_idx );
+
+        if ( rc == 0 )
+        {
+            if ( legacy )
+                stx->prim_al_id_idx = INVALID_COLUMN;
+            else
+                rc = add_column( stx->cursor, COL_PRIM_AL_ID, &stx->prim_al_id_idx );
+        }
+
+        if ( rc == 0 )
+        {
+            if ( legacy )
+                rc = add_column( stx->cursor, COL_NAME, &stx->name_idx );
+            else
+                stx->name_idx = INVALID_COLUMN;
+        }
+
+        if ( rc == 0 )
+            rc = add_column( stx->cursor, COL_READ_TYPE, &stx->read_type_idx );
+        if ( rc == 0 )
+            rc = add_column( stx->cursor, COL_READ_FILTER, &stx->read_filter_idx );
+        if ( rc == 0 )
+            rc = add_column( stx->cursor, COL_READ_LEN, &stx->read_len_idx );
+        if ( rc == 0 )
+            rc = add_column( stx->cursor, COL_READ_START, &stx->read_start_idx );
+        if ( rc == 0 )
+            rc = add_column( stx->cursor, COL_READ, &stx->read_idx );
+        if ( rc == 0 )
+            rc = add_column( stx->cursor, COL_QUALITY, &stx->quality_idx );
+        if ( rc == 0 )
+            rc = add_column( stx->cursor, COL_SPOT_GROUP, &stx->spot_group_idx );
+    }
+    return rc;
+}
+
+
+typedef struct seq_row
+{
+    uint32_t nreads;
+
+    bool fully_unaligned;
+    bool partly_unaligned;
+    bool filtered_out;
+} seq_row;
+
+
+static rc_t complain_size_diff( int64_t row_id, const char * txt )
+{
+    rc_t rc = RC( rcExe, rcNoTarg, rcConstructing, rcSize, rcInvalid );
+    (void)PLOGERR( klogInt, ( klogInt, rc, "in row $(rn) of SEQUENCE.$(tx)", "rn=%ld,tx=%s", row_id, txt ) );
+    return rc;
+}
+
+
+static rc_t read_seq_row( const samdump_opts * const opts, const seq_table_ctx * const stx, const int64_t row_id, seq_row * const row )
+{
+    rc_t rc = 0;
+
+    if ( stx->align_count_idx == INVALID_COLUMN )
+    {
+        const INSDC_read_type *ptr;
+
+        row->fully_unaligned = true;
+        row->partly_unaligned = false;
+        row->filtered_out = false;
+        rc = read_INSDC_read_type_ptr( row_id, stx->cursor, stx->read_type_idx, &ptr, &row->nreads );
+    }
+    else
+    {
+        const uint8_t * u8ptr;
+        size_t u8ptr_len;
+
+        /* ALIGNMENT_COUNT ... only to detect if reads are unaligned, could be done with PRIMARY_ALINGMENT too,
+           but this one is only 8 bit instead of 64 bit, that means faster */
+        rc = read_u8_ptr_and_size( row_id, stx->cursor, stx->align_count_idx, &u8ptr, &u8ptr_len );
+        if ( rc == 0 )
+        {
+            uint32_t i, n;
+
+            row->nreads = u8ptr_len;
+            for ( i = 0, n = 0; i < u8ptr_len; ++i )
+                if ( u8ptr[ i ] != 0 )
+                    n++;
+            row->fully_unaligned = ( n == 0 );
+            row->partly_unaligned = ( n < u8ptr_len && n > 0 );
+
+            if ( row->partly_unaligned )
+                row->filtered_out = !opts->print_half_unaligned_reads;
+            else if ( row->fully_unaligned )
+                row->filtered_out = !opts->print_fully_unaligned_reads;
+            else
+                row->filtered_out = true;
+        }
+    }
+    return rc;
+}
+
+
+/**********************************************************************************
+
+    0x001   template having multiple fragments in sequencing
+            (row->nreads > 1 )
+
+    0x002   each fragment properly aligned according to the aligner
+            ( never the case in an unaligned read )
+
+    0x004   fragment unmapped
+            ( always true in an unaligned read )
+
+    0x008   next fragment in the template unmapped
+            ( is the mate aligned? next: read_idx+1, if read_idx==row->nreads-1 then read_idx-1 )
+
+    0x010   SEQ being reverse complemented
+            ( column 'READ_TYPE' has bit READ_TYPE_REVERSE set )
+
+    0x020   SEQ of the next fragment in the template being reversed
+            ( is the mate reversed? )
+
+    0x040   the first fragment in the template
+            ( read_idx == 0 )
+
+    0x080   the last fragment in the template
+            ( read_idx == ( row->nreads - 1 ) )
+
+    0x100   secondary alignment
+            ( never the case in an unaligned read )
+
+    0x200   not passing quality controls
+            ( column 'READ_FILTER' has bit READ_FILTER_REJECT set )
+
+    0x400   PCR or optical duplicate
+            ( column 'READ_FILTER' has bit READ_FILTER_CRITERIA set )
+
+**********************************************************************************/
+static uint32_t calculate_unaligned_sam_flags_db( uint32_t nreads, uint32_t read_idx,
+                                                  uint32_t mate_idx, int64_t mate_id,
+                                                  const INSDC_read_type * read_type,
+                                                  bool reverse_flag,
+                                                  const INSDC_read_filter * read_filter )
+{
+    uint32_t res = 0x04;
+
+    if ( nreads > 1 )
+    {
+        res |= 0x01;
+        /* the following test only make sense if there is a mate */
+
+        if ( mate_id == 0 )
+            res |= 0x08;
+        if ( ( read_type[ mate_idx ] & READ_TYPE_REVERSE ) == READ_TYPE_REVERSE )
+            res |= 0x020;
+        if ( read_idx == 0 )
+            res |= 0x040;
+        if ( read_idx == ( nreads - 1 ) )
+            res |= 0x080;
+    }
+
+    if ( reverse_flag )
+        res |= 0x010;
+    if ( ( read_filter[ read_idx ] & READ_FILTER_REJECT ) == READ_FILTER_REJECT )
+        res |= 0x200;
+    if ( ( read_filter[ read_idx ] & READ_FILTER_CRITERIA ) == READ_FILTER_CRITERIA )
+        res |= 0x400;
+    return res;
+}
+
+
+const char * ref_name_star = "*";
+
+static rc_t get_mate_info( const prim_table_ctx * const ptx, const matecache * const mc,
+                           const input_database * const ids, const int64_t row_id, const int64_t mate_id, const uint32_t nreads,
+                           const char ** mate_ref_name, uint32_t * const mate_ref_name_len, INSDC_coord_zero * const mate_ref_pos )
+{
+    rc_t rc = 0;
+
+    *mate_ref_name = ref_name_star;
+    *mate_ref_name_len = 1;
+    *mate_ref_pos = 0;
+    if ( nreads < 2 )
+        return rc;
+
+    if ( mate_id != 0 )
+    {
+        uint32_t ref_idx;
+        int64_t seq_spot_id;
+        rc = matecache_lookup_unaligned( mc, ids->db_idx, mate_id, mate_ref_pos, &ref_idx, &seq_spot_id );
+        if ( rc == 0 )
+        {
+            const ReferenceObj* refobj;
+            *mate_ref_pos += 1;
+            /* now we have to lookup the reference-name based on it's index into the ids->reflist */
+            rc = ReferenceList_Get( ids->reflist, &refobj, ref_idx );
+            if ( rc != 0 )
+            {
+                (void)PLOGERR( klogInt, ( klogInt, rc, "in row $(rn) of SEQUENCE.$(rx)", "rn=%ld,rx=%ld", mate_id, row_id ) );
+            }
+            else
+            {
+                rc = ReferenceObj_Name( refobj, mate_ref_name );
+                if ( rc != 0 )
+                {
+                    (void)PLOGERR( klogInt, ( klogInt, rc, "in row $(rn) of SEQUENCE.$(rx)", "rn=%ld,rx=%ld", mate_id, row_id ) );
+                }
+                else
+                {
+                    *mate_ref_name_len = string_size( *mate_ref_name );
+                }
+            }
+        }
+        else if ( GetRCState( rc ) == rcNotFound )
+        {
+            /* we have a mate and it is aligned! ---> look it up in the PRIMARY_ALIGNMENT - table*/
+            const char * ptr;
+            size_t len;
+
+            rc = read_char_ptr_and_size( mate_id, ptx->cursor, ptx->ref_name_idx, &ptr, &len );
+            if ( rc == 0 && len > 0 )
+            {
+                *mate_ref_name = ptr;
+                *mate_ref_name_len = len;
+            }
+
+            if ( rc == 0 )
+            {
+                INSDC_coord_zero pos;
+                rc = read_INSDC_coord_zero( mate_id, ptx->cursor, ptx->ref_pos_idx, &pos, &len );
+                if ( rc == 0 && len > 0 )
+                {
+                    *mate_ref_pos = ( pos + 1 );
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t print_sliced_read( const INSDC_dna_text * read, uint32_t read_idx,
+                               bool reverse, const INSDC_coord_zero * read_start, const INSDC_coord_len * read_len )
+{
+    rc_t rc = 0;
+    const INSDC_dna_text * ptr = read + read_start[ read_idx ];
+    if ( !reverse )
+    {
+        rc = KOutMsg( "%.*s", read_len[ read_idx ], ptr );
+    }
+    else
+    {
+        const char cmp_tbl [] =
+        {
+            'T', 'V', 'G', 'H', 'E', 'F', 'C', 'D',
+            'I', 'J', 'M', 'L', 'K', 'N', 'O', 'P',
+            'Q', 'Y', 'S', 'A', 'U', 'B', 'W', 'X',
+            'R', 'Z'
+        };
+
+        int32_t i = ( read_len[ read_idx ] - 1 );
+        while( i >= 0 && rc == 0 )
+        {
+            int c = ptr [ i ];
+            if ( isalpha ( c ) )
+            {
+                if ( islower ( c )  )
+                     c = tolower ( cmp_tbl [ toupper ( c ) - 'A' ] );
+                else
+                     c = cmp_tbl [ c - 'A' ];
+            }
+
+            rc = KOutMsg( "%c", ( char ) c );
+            i--;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t print_sliced_quality( const samdump_opts * const opts, const char * quality, uint32_t read_idx,
+                                  bool reverse, const INSDC_coord_zero * read_start, const INSDC_coord_len * read_len )
+{
+    const char * ptr = quality + read_start[ read_idx ];
+    return dump_quality( opts, ptr, read_len[ read_idx ], reverse ); /* sam-dump-opts.c */
+}
+
+
+static rc_t dump_the_other_read( const seq_table_ctx * const stx, const prim_table_ctx * const ptx,
+                                 const int64_t row_id, const uint32_t mate_idx )
+{
+    uint32_t row_len;
+    int64_t *prim_al_id_ptr;
+
+    /* read from the SEQUENCE-table the value of the colum "PRIMARY_ALIGNMENT_ID"[ mate_idx ] */
+    rc_t rc = read_int64_t_ptr( row_id, stx->cursor, stx->prim_al_id_idx, &prim_al_id_ptr, &row_len );
+    if ( rc == 0 )
+    {
+        if ( row_len == 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "rowlen zero in row $(rn) of SEQUENCE.PRIMARY_ALIGNMENT_ID", "rn=%ld", row_id ) );
+        }
+        else if ( mate_idx >= row_len )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "mate_idx invalid in row $(rn) of SEQUENCE.PRIMARY_ALIGNMENT_ID", "rn=%ld", row_id ) );
+        }
+        else
+        {
+            /* read from the PRIMARY_ALIGNMENT_TABLE the value of the columns "REF_NAME" and "REF_POS" */
+            int64_t a_row_id = prim_al_id_ptr[ mate_idx ];
+            if ( a_row_id == 0 )
+            {
+                rc = KOutMsg( "*\t0\t" );
+            }
+            else
+            {
+                const char * ref_name;
+                size_t ref_name_len;
+                rc = read_char_ptr_and_size( a_row_id, ptx->cursor, ptx->ref_name_idx, &ref_name, &ref_name_len );
+                if ( rc == 0 )
+                {
+                    if ( ref_name_len == 0 )
+                    {
+                        (void)PLOGERR( klogInt, ( klogInt, rc, "rowlen zero in row $(rn) of PRIM.REF_NAME", "rn=%ld", a_row_id ) );
+                    }
+                    else
+                    {
+                        const INSDC_coord_zero *ref_pos;
+                        rc = read_INSDC_coord_zero_ptr( a_row_id, ptx->cursor, ptx->ref_pos_idx, &ref_pos, &row_len );
+                        if ( rc == 0 )
+                        {
+                            rc = KOutMsg( "%.*s\t%i\t", ref_name_len, ref_name, ref_pos[ 0 ] + 1 );
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static uint32_t calc_mate_idx( const uint32_t n_reads, const uint32_t read_idx )
+{
+    if ( read_idx == ( n_reads - 1 ) )
+        return ( read_idx - 1 );
+    else
+        return ( read_idx + 1 );
+}
+
+
+static rc_t read_quality( const seq_table_ctx * const stx,
+                          const int64_t row_id, const char **quality, const uint32_t read_len )
+{
+    size_t quality_len;
+    rc_t rc = read_char_ptr_and_size( row_id, stx->cursor, stx->quality_idx, quality, &quality_len );
+    if ( rc == 0 && read_len != quality_len )
+        rc = complain_size_diff( row_id, "QUALITY" );
+    return rc;
+}
+
+
+static rc_t read_read_type( const seq_table_ctx * const stx,
+                            const int64_t row_id, const INSDC_read_type **read_type, const uint32_t read_len )
+{
+    uint32_t read_type_len;
+    rc_t rc = read_INSDC_read_type_ptr( row_id, stx->cursor, stx->read_type_idx, read_type, &read_type_len );
+    if ( rc == 0 && read_type_len != read_len )
+        rc = complain_size_diff( row_id, "READ_TYPE" );
+    return rc;
+}
+
+
+static rc_t read_read_filter( const seq_table_ctx * const stx,
+                              const int64_t row_id, const INSDC_read_filter **read_filter, const uint32_t read_len )
+{
+    uint32_t read_filter_len;
+    rc_t rc = read_INSDC_read_filter_ptr( row_id, stx->cursor, stx->read_filter_idx, read_filter, &read_filter_len );
+    if ( rc == 0 && read_filter_len != read_len )
+        rc = complain_size_diff( row_id, "READ_FILTER" );
+    return rc;
+}
+
+
+static rc_t read_read_start( const seq_table_ctx * const stx,
+                             const int64_t row_id, const INSDC_coord_zero **read_start, const uint32_t nreads )
+{
+    uint32_t read_start_len;
+    rc_t rc = read_INSDC_coord_zero_ptr( row_id, stx->cursor, stx->read_start_idx, read_start, &read_start_len );
+    if ( rc == 0 && nreads != read_start_len )
+        rc = complain_size_diff( row_id, "READ_START" );
+    return rc;
+}
+
+
+static rc_t read_read_len( const seq_table_ctx * const stx,
+                           const int64_t row_id, const INSDC_coord_len **read_len, const uint32_t nreads )
+{
+    uint32_t read_len_len;
+    rc_t rc = read_INSDC_coord_len_ptr( row_id, stx->cursor, stx->read_len_idx, read_len, &read_len_len );
+    if ( rc == 0 && nreads != read_len_len )
+        rc = complain_size_diff( row_id, "READ_LEN" );
+    return rc;
+}
+
+
+static bool calc_reverse_flag( const samdump_opts * const opts, const uint32_t read_idx, const INSDC_read_type * read_type )
+{
+    bool res = ( ( read_type[ read_idx ] & READ_TYPE_REVERSE ) == READ_TYPE_REVERSE );
+    if ( res )
+        res = opts -> reverse_unaligned_reads;
+    return res;
+}
+
+
+static rc_t dump_seq_row_sam_filtered( const samdump_opts * const opts, const seq_table_ctx * const stx,
+                                       const prim_table_ctx * const ptx, const matecache * const mc,
+                                       const input_database * const ids, const int64_t row_id, const uint32_t nreads,
+                                       uint64_t * const printed )
+{
+    uint32_t read_idx, rd_len, prim_align_ids_len;
+    int64_t * prim_align_ids = NULL;
+    const char * spot_group = NULL;
+    const char * quality = NULL;
+    const INSDC_dna_text * read = NULL;
+    const INSDC_read_type * read_type = NULL;
+    const INSDC_read_filter * read_filter = NULL;
+    const INSDC_coord_zero * read_start = NULL;
+    const INSDC_coord_len * read_len;
+    size_t spot_group_len;
+
+    rc_t rc = read_int64_t_ptr( row_id, stx->cursor, stx->prim_al_id_idx, &prim_align_ids, &prim_align_ids_len );
+    if ( rc == 0 && nreads != prim_align_ids_len )
+        rc = complain_size_diff( row_id, "PRIMARY_ALIGNMENT_ID" );
+    if ( rc == 0 )
+        rc = read_read_len( stx, row_id, &read_len, nreads );
+
+    for ( read_idx = 0; ( read_idx < nreads ) && ( rc == 0 ); ++read_idx )
+    {
+        int64_t align_id = prim_align_ids[ read_idx ];
+        if ( align_id == 0 &&              /* read is NOT aligned! */
+             read_len[ read_idx ] > 0 )    /* and has a length! */
+        {
+            uint32_t mate_idx = calc_mate_idx( nreads, read_idx );
+
+            /*  here we have to find out if the read is actually requested: 
+                -----------------------------------------------------------
+                read from the SEQ-table the ID of the mate in PRIM-table
+                look if we have the requested ID in the mate-cache, if not here it ends...
+            */
+            align_id = prim_align_ids[ mate_idx ];
+            if ( align_id != 0 )
+            {
+                uint32_t ref_idx;
+                INSDC_coord_zero mate_ref_pos;
+                int64_t seq_spot_id;
+                /* this is the filter: we look up in the mate-cache! */
+                rc = matecache_lookup_unaligned( mc, ids->db_idx, align_id, &mate_ref_pos, &ref_idx, &seq_spot_id );
+                if ( rc == 0 )
+                {
+                    const ReferenceObj* refobj;
+                    /* now we have to lookup the reference-name based on it's index into the ids->reflist */
+                    rc = ReferenceList_Get( ids->reflist, &refobj, ref_idx );
+                    if ( rc != 0 )
+                    {
+                        (void)PLOGERR( klogInt, ( klogInt, rc, "in row $(rn) of SEQUENCE.$(rx)", "rn=%ld,rx=%ld", mate_idx, row_id ) );
+                    }
+                    else
+                    {
+                        const char * mate_ref_name;
+                        rc = ReferenceObj_Name( refobj, &mate_ref_name );
+                        if ( rc != 0 )
+                        {
+                            (void)PLOGERR( klogInt, ( klogInt, rc, "in row $(rn) of SEQUENCE.$(rx)", "rn=%ld,rx=%ld", mate_idx, row_id ) );
+                        }
+                        else
+                        {
+                            bool reverse = false;
+
+                            /* SAM-FIELD: QNAME     SRA-column: SPOT_ID ( int64 ) */
+                            if ( rc == 0 )
+                                rc = KOutMsg( "%ld\t", seq_spot_id );
+
+                            if ( rc == 0 && read_type == NULL )
+                                rc = read_read_type( stx, row_id, &read_type, nreads );
+
+                            if ( rc == 0 )
+                                reverse = calc_reverse_flag( opts, read_idx, read_type );
+
+                            if ( rc == 0 && read_filter == NULL )
+                                rc = read_read_filter( stx, row_id, &read_filter, nreads );
+
+                            /* SAM-FIELD: FLAG      SRA-column: calculated from READ_TYPE, READ_FILTER etc. */
+                            if ( rc == 0 )
+                            {
+                                uint32_t sam_flags = calculate_unaligned_sam_flags_db( nreads, read_idx, mate_idx, 
+                                                                                    align_id, read_type, reverse, read_filter );
+                                rc = KOutMsg( "%u\t", sam_flags );
+                            }
+
+                            /* SAM-FIELD: RNAME     SRA-column: none, fix '*' */
+                            /* SAM-FIELD: POS       SRA-column: none, fix '0' */
+                            /* SAM-FIELD: MAPQ      SRA-column: none, fix '0' */
+                            /* SAM-FIELD: CIGAR     SRA-column: none, fix '*' */
+                            if ( rc == 0 )
+                                rc = KOutMsg( "*\t0\t0\t*\t" );
+
+                            /* SAM-FIELD: RNEXT     SRA-column: found in cache */
+                            /* SAM-FIELD: POS       SRA-column: found in cache */
+                            if ( rc == 0 )
+                                rc = KOutMsg( "%s\t%li\t", mate_ref_name, mate_ref_pos + 1 );
+
+                            /* SAM-FIELD: TLEN      SRA-column: none, fix '0' */
+                            if ( rc == 0 )
+                                rc = KOutMsg( "0\t" );
+
+                            if ( rc == 0 && read == NULL )
+                                rc = read_INSDC_dna_text_ptr( row_id, stx->cursor, stx->read_idx, &read, &rd_len );
+                            if ( rc == 0 && quality == NULL )
+                                rc = read_quality( stx, row_id, &quality, rd_len );
+                            if ( rc == 0 && read_start == NULL )
+                                rc = read_read_start( stx, row_id, &read_start, nreads );
+
+                            /* SAM-FIELD: SEQ       SRA-column: READ, sliced by READ_START/READ_LEN */
+                            if ( rc == 0 )
+                                rc = print_sliced_read( read, read_idx, reverse, read_start, read_len );
+                            if ( rc == 0 )
+                                rc = KOutMsg( "\t" );
+
+                            /* SAM-FIELD: QUAL      SRA-column: QUALITY, sliced by READ_START/READ_LEN */
+                            if ( rc == 0 )
+                                rc = print_sliced_quality( opts, quality, read_idx, reverse, read_start, read_len );
+
+                            /* OPT SAM-FIIELD:      SRA-column: ALIGN_ID */
+                            if ( rc == 0 && opts->print_alignment_id_in_column_xi )
+                                rc = KOutMsg( "\tXI:i:%u", row_id );
+
+                            /* OPT SAM-FIIELD:      SRA-column: SPOT_GROUP */
+                            if ( rc == 0 && spot_group == NULL )
+                                rc = read_char_ptr_and_size( row_id, stx->cursor, stx->spot_group_idx, &spot_group, &spot_group_len );
+                            if ( rc == 0 )
+                                rc = KOutMsg( "\tRG:Z:%.*s", spot_group_len, spot_group );
+
+                            if ( rc == 0 )
+                                rc = KOutMsg( "\n" );
+
+                            if ( rc == 0 )
+                                (*printed)++;
+
+                        }
+                    }
+                }
+                else
+                {
+                    rc = 0;     /* it is OK if an alignment is not found in the cache, do not terminate! */
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t dump_seq_prim_row_sam( const samdump_opts * const opts, const seq_table_ctx * const stx,
+                                   const prim_table_ctx * const ptx, const matecache * const mc,
+                                   const input_database * const ids, const int64_t row_id, const uint32_t nreads,
+                                   uint64_t * const printed )
+{
+    uint32_t read_idx, rd_len, prim_align_ids_len;
+    int64_t * prim_align_ids = NULL;
+    const char * spot_group = NULL;
+    const char * quality = NULL;
+    const INSDC_dna_text * read = NULL;
+    const INSDC_read_type * read_type = NULL;
+    const INSDC_read_filter * read_filter = NULL;
+    const INSDC_coord_zero * read_start = NULL;
+    const INSDC_coord_len * read_len;
+    size_t spot_group_len;
+
+    rc_t rc = read_int64_t_ptr( row_id, stx->cursor, stx->prim_al_id_idx, &prim_align_ids, &prim_align_ids_len );
+    if ( rc == 0 && nreads != prim_align_ids_len )
+        rc = complain_size_diff( row_id, "PRIMARY_ALIGNMENT_ID" );
+    if ( rc == 0 )
+        rc = read_read_len( stx, row_id, &read_len, nreads );
+
+    for ( read_idx = 0; ( read_idx < nreads ) && ( rc == 0 ); ++read_idx )
+    {
+        if ( prim_align_ids[ read_idx ] == 0 &&     /* read is NOT aligned! */
+             read_len[ read_idx ] > 0 )             /* and has a length! */
+        {
+            bool reverse = false;
+            uint32_t mate_idx;
+            int64_t mate_id = 0;
+
+            if ( read_idx == ( nreads - 1 ) )
+                mate_idx = read_idx - 1;
+            else
+                mate_idx = read_idx + 1;
+
+            if ( mate_idx < prim_align_ids_len ) 
+                mate_id = prim_align_ids[ mate_idx ];
+
+            if ( rc == 0 && read_type == NULL )
+                rc = read_read_type( stx, row_id, &read_type, nreads );
+            if ( rc == 0 )
+                reverse = calc_reverse_flag( opts, read_idx, read_type );
+
+            if ( rc == 0 && read_filter == NULL )
+                rc = read_read_filter( stx, row_id, &read_filter, nreads );
+
+            /* SAM-FIELD: QNAME     SRA-column: SPOT_ID ( int64 ) */
+            if ( rc == 0 )
+                rc = KOutMsg( "%ld\t", row_id );
+
+            /* SAM-FIELD: FLAG      SRA-column: calculated from READ_TYPE, READ_FILTER etc. */
+            if ( rc == 0 )
+            {
+                uint32_t sam_flags;
+                if ( stx->prim_al_id_idx != INVALID_COLUMN )
+                {
+                    uint32_t temp_nreads = nreads;
+                    if ( mate_id == 0 && read_len[ mate_idx ] == 0 ) temp_nreads--;
+                    sam_flags = calculate_unaligned_sam_flags_db( temp_nreads, read_idx, mate_idx, 
+                                            mate_id, read_type, reverse, read_filter );
+                }
+                else
+                {
+                    if ( reverse )
+                        sam_flags = ( 0x04 | 0x10 );
+                    else
+                        sam_flags = 0x04;
+                }
+                rc = KOutMsg( "%u\t", sam_flags );
+            }
+
+            /* SAM-FIELD: RNAME     SRA-column: none, fix '*' */
+            /* SAM-FIELD: POS       SRA-column: none, fix '0' */
+            /* SAM-FIELD: MAPQ      SRA-column: none, fix '0' */
+            /* SAM-FIELD: CIGAR     SRA-column: none, fix '*' */
+            if ( rc == 0 )
+                rc = KOutMsg( "*\t0\t0\t*\t" );
+
+            /* SAM-FIELD: RNEXT     SRA-column: look up in cache, or none */
+            /* SAM-FIELD: POS       SRA-column: look up in cache, or none */
+            if ( rc == 0 )
+            {
+                if ( ptx == NULL )
+                {
+                    rc = KOutMsg( "0\t0\t" );   /* no way to get that without PRIM_ALIGN-table */
+                }
+                else
+                {
+                    if ( opts->use_mate_cache && mc != NULL && ids != NULL )
+                    {
+                        const char * mate_ref_name;
+                        uint32_t mate_ref_name_len;
+                        INSDC_coord_zero mate_ref_pos;
+
+                        rc = get_mate_info( ptx, mc, ids, row_id, mate_id, nreads, &mate_ref_name, &mate_ref_name_len, &mate_ref_pos );
+                        if ( rc == 0 )
+                            rc = KOutMsg( "%.*s\t%li\t", mate_ref_name_len, mate_ref_name, mate_ref_pos );
+                    }
+                    else
+                    {
+                        /* print the mate info */
+                        rc = dump_the_other_read( stx, ptx, row_id, mate_idx );
+                    }
+                }
+            }
+
+
+            /* SAM-FIELD: TLEN      SRA-column: none, fix '0' */
+            if ( rc == 0 )
+                rc = KOutMsg( "0\t" );
+
+            if ( rc == 0 && read == NULL )
+                rc = read_INSDC_dna_text_ptr( row_id, stx->cursor, stx->read_idx, &read, &rd_len );
+            if ( rc == 0 && read_start == NULL )
+                rc = read_read_start( stx, row_id, &read_start, nreads );
+
+            /* SAM-FIELD: SEQ       SRA-column: READ, sliced by READ_START/READ_LEN */
+            if ( rc == 0 )
+                rc = print_sliced_read( read, read_idx, reverse, read_start, read_len );
+            if ( rc == 0 )
+                rc = KOutMsg( "\t" );
+
+            if ( rc == 0 && quality == NULL )
+                rc = read_quality( stx, row_id, &quality, rd_len );
+
+            /* SAM-FIELD: QUAL      SRA-column: QUALITY, sliced by READ_START/READ_LEN */
+            if ( rc == 0 )
+                rc = print_sliced_quality( opts, quality, read_idx, reverse, read_start, read_len );
+
+            /* OPT SAM-FIIELD:      SRA-column: ALIGN_ID */
+            if ( rc == 0 && opts->print_alignment_id_in_column_xi )
+                rc = KOutMsg( "\tXI:i:%u", row_id );
+
+            /* OPT SAM-FIIELD:      SRA-column: SPOT_GROUP */
+            if ( rc == 0 && spot_group == NULL )
+                rc = read_char_ptr_and_size( row_id, stx->cursor, stx->spot_group_idx, &spot_group, &spot_group_len );
+            if ( rc == 0 )
+                rc = KOutMsg( "\tRG:Z:%.*s", spot_group_len, spot_group );
+
+            if ( rc == 0 )
+                rc = KOutMsg( "\n" );
+
+            if ( rc == 0 )
+                (*printed)++;
+        }
+    }
+    return rc;
+}
+
+
+/* called if we are dumping from a legacy table instead from a database */
+static rc_t dump_seq_row_sam( const samdump_opts * const opts, const seq_table_ctx * const stx,
+                              const int64_t row_id, const uint32_t nreads, uint64_t * const printed )
+{
+    uint32_t read_idx, rd_len;
+    const char * spot_group = NULL;
+    const char * quality = NULL;
+    const char * name;
+    const INSDC_dna_text * read = NULL;
+    const INSDC_read_type * read_type;
+    const INSDC_read_filter * read_filter = NULL;
+    const INSDC_coord_zero * read_start = NULL;
+    const INSDC_coord_len * read_len;
+    size_t spot_group_len, name_len;
+
+    rc_t rc = read_read_len( stx, row_id, &read_len, nreads );
+    if ( rc == 0 )
+        rc = read_char_ptr_and_size( row_id, stx->cursor, stx->name_idx, &name, &name_len );
+    if ( rc == 0 )
+        rc = read_read_type( stx, row_id, &read_type, nreads );
+
+    for ( read_idx = 0; ( read_idx < nreads ) && ( rc == 0 ); ++read_idx )
+    {
+        if ( ( read_len[ read_idx ] > 0 ) &&             /* has a length! */
+             ( ( read_type[ read_idx ] & READ_TYPE_BIOLOGICAL ) == READ_TYPE_BIOLOGICAL ) )
+        {
+            bool reverse = false;
+            uint32_t mate_idx;
+
+            if ( read_idx == ( nreads - 1 ) )
+                mate_idx = read_idx - 1;
+            else
+                mate_idx = read_idx + 1;
+
+            if ( rc == 0 ) /* types in interfaces/insdc/insdc.h */
+                reverse = calc_reverse_flag( opts, read_idx, read_type );
+
+            if ( rc == 0 && read_filter == NULL )
+                rc = read_read_filter( stx, row_id, &read_filter, nreads );
+
+            /* SAM-FIELD: QNAME     SRA-column: SPOT_ID ( int64 ) */
+            if ( rc == 0 )
+                rc = KOutMsg( "%.*s\t", name_len, name );
+
+            /* SAM-FIELD: FLAG      SRA-column: calculated from READ_TYPE, READ_FILTER etc. */
+            if ( rc == 0 )
+            {
+                uint32_t sam_flags = calculate_unaligned_sam_flags_db( nreads, read_idx, mate_idx, 
+                                            0, read_type, reverse, read_filter );
+                rc = KOutMsg( "%u\t", sam_flags );
+            }
+
+            /* SAM-FIELD: RNAME     SRA-column: none, fix '*' */
+            /* SAM-FIELD: POS       SRA-column: none, fix '0' */
+            /* SAM-FIELD: MAPQ      SRA-column: none, fix '0' */
+            /* SAM-FIELD: CIGAR     SRA-column: none, fix '*' */
+            /* SAM-FIELD: RNEXT     SRA-column: none, fix '*' */
+            /* SAM-FIELD: POS       SRA-column: none, fix '0' */
+            /* SAM-FIELD: TLEN      SRA-column: none, fix '0' */
+
+            if ( rc == 0 )
+                rc = KOutMsg( "*\t0\t0\t*\t*\t0\t0\t" );
+
+            if ( rc == 0 && read == NULL )
+                rc = read_INSDC_dna_text_ptr( row_id, stx->cursor, stx->read_idx, &read, &rd_len );
+            if ( rc == 0 && read_start == NULL )
+                rc = read_read_start( stx, row_id, &read_start, nreads );
+
+            /* SAM-FIELD: SEQ       SRA-column: READ, sliced by READ_START/READ_LEN */
+            if ( rc == 0 )
+                rc = print_sliced_read( read, read_idx, reverse, read_start, read_len );
+            if ( rc == 0 )
+                rc = KOutMsg( "\t" );
+
+            if ( rc == 0 && quality == NULL )
+                rc = read_quality( stx, row_id, &quality, rd_len );
+
+            /* SAM-FIELD: QUAL      SRA-column: QUALITY, sliced by READ_START/READ_LEN */
+            if ( rc == 0 )
+                rc = print_sliced_quality( opts, quality, read_idx, reverse, read_start, read_len );
+
+            /* OPT SAM-FIIELD:      SRA-column: ALIGN_ID */
+            if ( rc == 0 && opts->print_alignment_id_in_column_xi )
+                rc = KOutMsg( "\tXI:i:%u", row_id );
+
+            /* OPT SAM-FIIELD:      SRA-column: SPOT_GROUP */
+            if ( rc == 0 && spot_group == NULL )
+                rc = read_char_ptr_and_size( row_id, stx->cursor, stx->spot_group_idx, &spot_group, &spot_group_len );
+            if ( rc == 0 && ( spot_group != NULL ) && ( spot_group_len > 0 ) )
+                rc = KOutMsg( "\tRG:Z:%.*s", spot_group_len, spot_group );
+
+            if ( rc == 0 )
+                rc = KOutMsg( "\n" );
+
+            if ( rc == 0 )
+                (*printed)++;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t dump_seq_row_fastx_filtered( const samdump_opts * const opts, const seq_table_ctx * const stx,
+                                         const prim_table_ctx * const ptx, const matecache * const mc,
+                                         const input_database * const ids,
+                                         const int64_t row_id, const uint32_t nreads, uint64_t * const printed )
+{
+    uint32_t read_idx, rd_len, prim_align_ids_len;
+    int64_t * prim_align_ids = NULL;
+    const char * quality = NULL;
+    const INSDC_dna_text * read = NULL;
+    const char * spot_group = NULL;
+    const INSDC_read_type * read_type = NULL;
+    const INSDC_coord_zero * read_start = NULL;
+    const INSDC_coord_len * read_len;
+    size_t spot_group_len = 0;
+
+    rc_t rc = read_int64_t_ptr( row_id, stx->cursor, stx->prim_al_id_idx, &prim_align_ids, &prim_align_ids_len );
+    if ( rc == 0 && nreads != prim_align_ids_len )
+        rc = complain_size_diff( row_id, "PRIMARY_ALIGNMENT_ID" );
+    if ( rc == 0 )
+        rc = read_read_len( stx, row_id, &read_len, nreads );
+
+    for ( read_idx = 0; ( read_idx < nreads ) && ( rc == 0 ); ++read_idx )
+    {
+        if ( prim_align_ids[ read_idx ] == 0 &&    /* read is NOT aligned! */
+             read_len[ read_idx ] > 0 )            /* and has a length! */
+        {
+            uint32_t mate_idx = calc_mate_idx( nreads, read_idx );
+            int64_t align_id = prim_align_ids[ mate_idx ];
+            if ( align_id != 0 )
+            {
+                uint32_t ref_idx;
+                INSDC_coord_zero mate_ref_pos;
+                int64_t seq_spot_id;
+                rc = matecache_lookup_unaligned( mc, ids->db_idx, align_id, &mate_ref_pos, &ref_idx, &seq_spot_id );
+                if ( rc == 0 )
+                {
+                    bool reverse;
+
+                    /* the NAME */
+                    if ( opts->output_format == of_fastq )
+                        rc = KOutMsg( "@" );
+                    else
+                        rc = KOutMsg( ">" );
+
+                    if ( rc == 0 )
+                    {
+                        if ( opts->print_spot_group_in_name && spot_group == NULL )
+                            rc = read_char_ptr_and_size( row_id, stx->cursor, stx->spot_group_idx, &spot_group, &spot_group_len );
+                        if ( rc == 0 )
+                            rc = dump_name( opts, seq_spot_id, spot_group, spot_group_len ); /* sam-dump-opts.c */
+                        if ( rc == 0 )
+                            rc = KOutMsg( "/%u unaligned\n", read_idx + 1 );
+                    }
+
+                    if ( rc == 0 && read == NULL )
+                        rc = read_INSDC_dna_text_ptr( row_id, stx->cursor, stx->read_idx, &read, &rd_len );
+                    if ( rc == 0 && quality == NULL )
+                        rc = read_quality( stx, row_id, &quality, rd_len );
+                    if ( rc == 0 && read_type == NULL )
+                        rc = read_read_type( stx, row_id, &read_type, nreads );
+                    if ( rc == 0 )
+                        reverse = ( ( read_type[ read_idx ] & READ_TYPE_REVERSE ) == READ_TYPE_REVERSE );
+                    if ( rc == 0 && read_start == NULL )
+                        rc = read_read_start( stx, row_id, &read_start, nreads );
+
+                    /* the READ */
+                    if ( rc == 0 )
+                        rc = print_sliced_read( read, read_idx, reverse, read_start, read_len );
+                    if ( rc == 0 )
+                        rc = KOutMsg( "\n" );
+
+                    /* in case of fastq : the QUALITY-line */
+                    if ( rc == 0 && opts->output_format == of_fastq )
+                    {
+                        rc = KOutMsg( "+\n" );
+                        if ( rc == 0 )
+                            rc = print_sliced_quality( opts, quality, read_idx, reverse, read_start, read_len );
+                        if ( rc == 0 )
+                            rc = KOutMsg( "\n" );
+                    }
+                    (*printed)++;
+                }
+                else
+                {
+                    rc = 0;
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t dump_seq_row_fastx( const samdump_opts * const opts, const seq_table_ctx * const stx,
+                                const int64_t row_id, const uint32_t nreads, uint64_t * const printed )
+{
+    uint32_t read_idx, rd_len, prim_align_ids_len;
+    int64_t * prim_align_ids = NULL;
+    const char * quality = NULL;
+    const INSDC_dna_text * read = NULL ;
+    const char * spot_group = NULL;
+    const INSDC_read_type * read_type = NULL;
+    const INSDC_coord_zero * read_start = NULL;
+    const INSDC_coord_len * read_len;
+    size_t spot_group_len = 0;
+
+    rc_t rc = read_int64_t_ptr( row_id, stx->cursor, stx->prim_al_id_idx, &prim_align_ids, &prim_align_ids_len );
+    if ( rc == 0 && nreads != prim_align_ids_len )
+        rc = complain_size_diff( row_id, "PRIMARY_ALIGNMENT_ID" );
+    if ( rc == 0 )
+        rc = read_read_len( stx, row_id, &read_len, nreads );
+
+    for ( read_idx = 0; ( read_idx < nreads ) && ( rc == 0 ); ++read_idx )
+    {
+        if ( prim_align_ids[ read_idx ] == 0 &&    /* read is NOT aligned! */
+             read_len[ read_idx ] > 0 )            /* and has a length! */
+        {
+            bool reverse;
+
+            /* the NAME */
+            if ( opts->output_format == of_fastq )
+                rc = KOutMsg( "@" );
+            else
+                rc = KOutMsg( ">" );
+            if ( rc == 0 )
+            {
+                if ( opts->print_spot_group_in_name && spot_group == NULL )
+                    rc = read_char_ptr_and_size( row_id, stx->cursor, stx->spot_group_idx, &spot_group, &spot_group_len );
+                if ( rc == 0 )
+                    rc = dump_name( opts, row_id, spot_group, spot_group_len ); /* sam-dump-opts.c */
+                if ( rc == 0 )
+                    rc = KOutMsg( "/%u unaligned\n", read_idx + 1 );
+            }
+
+            if ( rc == 0 && read == NULL )
+                rc = read_INSDC_dna_text_ptr( row_id, stx->cursor, stx->read_idx, &read, &rd_len );
+            if ( rc == 0 && quality == NULL )
+                rc = read_quality( stx, row_id, &quality, rd_len );
+            if ( rc == 0 && read_type == NULL )
+                rc = read_read_type( stx, row_id, &read_type, nreads );
+            if ( rc == 0 )
+                reverse = ( ( read_type[ read_idx ] & READ_TYPE_REVERSE ) == READ_TYPE_REVERSE );
+            if ( rc == 0 && read_start == NULL )
+                rc = read_read_start( stx, row_id, &read_start, nreads );
+
+            /* the READ */
+            if ( rc == 0 )
+                rc = print_sliced_read( read, read_idx, reverse, read_start, read_len );
+            if ( rc == 0 )
+                rc = KOutMsg( "\n" );
+
+            /* in case of fastq : the QUALITY-line */
+            if ( rc == 0 && opts->output_format == of_fastq )
+            {
+                rc = KOutMsg( "+\n" );
+                if ( rc == 0 )
+                    rc = print_sliced_quality( opts, quality, read_idx, reverse, read_start, read_len );
+                if ( rc == 0 )
+                    rc = KOutMsg( "\n" );
+            }
+            (*printed)++;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t dump_seq_tab_row_fastx( const samdump_opts * const opts, const seq_table_ctx * const stx,
+                                    const int64_t row_id, const uint32_t nreads, uint64_t * const printed )
+{
+    uint32_t read_idx, rd_len;
+    const char * quality = NULL;
+    const char * name;
+    const INSDC_dna_text * read = NULL ;
+    const char * spot_group = NULL;
+    const INSDC_read_type * read_type;
+    const INSDC_coord_zero * read_start = NULL;
+    const INSDC_coord_len * read_len;
+    size_t name_len, spot_group_len = 0;
+
+    rc_t rc = read_read_len( stx, row_id, &read_len, nreads );
+    if ( rc == 0 )
+        rc = read_char_ptr_and_size( row_id, stx->cursor, stx->name_idx, &name, &name_len );
+    if ( rc == 0 )
+        rc = read_read_type( stx, row_id, &read_type, nreads );
+
+    for ( read_idx = 0; ( read_idx < nreads ) && ( rc == 0 ); ++read_idx )
+    {
+        if ( ( read_len[ read_idx ] > 0 ) &&            /* has a length! */
+             ( ( read_type[ read_idx ] & READ_TYPE_BIOLOGICAL ) == READ_TYPE_BIOLOGICAL ) )
+        {
+            bool reverse;
+
+            /* the NAME */
+            if ( opts->output_format == of_fastq )
+                rc = KOutMsg( "@" );
+            else
+                rc = KOutMsg( ">" );
+            if ( rc == 0 )
+            {
+                if ( opts->print_spot_group_in_name && spot_group == NULL )
+                    rc = read_char_ptr_and_size( row_id, stx->cursor, stx->spot_group_idx, &spot_group, &spot_group_len );
+
+                if ( rc == 0 )
+                    rc = dump_name_legacy( opts, name, name_len, spot_group, spot_group_len ); /* sam-dump-opts.c */
+
+                if ( rc == 0 )
+                    rc = KOutMsg( "/%u unaligned\n", read_idx + 1 );
+            }
+
+            if ( rc == 0 && read == NULL )
+                rc = read_INSDC_dna_text_ptr( row_id, stx->cursor, stx->read_idx, &read, &rd_len );
+            if ( rc == 0 && quality == NULL )
+                rc = read_quality( stx, row_id, &quality, rd_len );
+            if ( rc == 0 )
+                reverse = ( ( read_type[ read_idx ] & READ_TYPE_REVERSE ) == READ_TYPE_REVERSE );
+            if ( rc == 0 && read_start == NULL )
+                rc = read_read_start( stx, row_id, &read_start, nreads );
+
+            /* the READ */
+            if ( rc == 0 )
+                rc = print_sliced_read( read, read_idx, reverse, read_start, read_len );
+            if ( rc == 0 )
+                rc = KOutMsg( "\n" );
+
+            /* in case of fastq : the QUALITY-line */
+            if ( rc == 0 && opts->output_format == of_fastq )
+            {
+                if ( quality == NULL )
+                    rc = read_quality( stx, row_id, &quality, rd_len );
+                if ( rc == 0 )
+                    rc = KOutMsg( "+\n" );
+                if ( rc == 0 )
+                    rc = print_sliced_quality( opts, quality, read_idx, reverse, read_start, read_len );
+                if ( rc == 0 )
+                    rc = KOutMsg( "\n" );
+            }
+            (*printed)++;
+        }
+    }
+    return rc;
+}
+
+
+/* we are printing from a sra-database, we print half aligned reads only if we find them in the mate-cache */
+static rc_t print_unaligned_database_filtered( const samdump_opts * const opts, const input_table * const seq,
+                                               const input_table * const prim, const matecache * const mc,
+                                               const input_database * const ids, uint64_t * const rows_so_far )
+{
+    seq_table_ctx stx;
+    rc_t rc = prepare_seq_table_ctx( opts, seq, &stx, ( prim == NULL ) );
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen( stx.cursor );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorOpen( SEQUENCE ) for $(tn) failed", "tn=%s", seq->path ) );
+        }
+        else
+        {
+            int64_t first_row;
+            uint64_t row_count;
+            rc = VCursorIdRange( stx.cursor, stx.prim_al_id_idx, &first_row, &row_count );
+            if ( rc != 0 )
+            {
+                (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorIdRange( SEQUENCE ) for $(tn) failed", "tn=%s", seq->path ) );
+            }
+            else
+            {
+                prim_table_ctx ptx;
+                rc = prepare_prim_table_ctx( opts, prim, &ptx );
+                if ( rc == 0 )
+                {
+                    int64_t row_id;
+                    seq_row row;
+
+                    for ( row_id = first_row; ( ( row_id - first_row ) < row_count ) && rc == 0 && !test_limit_reached( opts, *rows_so_far ); ++row_id )
+                    {
+                        rc = Quitting();
+                        if ( rc == 0 )
+                        {
+                            rc = read_seq_row( opts, &stx, row_id, &row );
+                            if ( rc == 0 && !row.filtered_out )
+                            {
+                                switch( opts->output_format )
+                                {
+                                    case of_sam   : rc = dump_seq_row_sam_filtered( opts, &stx, &ptx, mc, ids, row_id, row.nreads, rows_so_far ); break;
+                                    case of_fasta : /* fall through intended ! */
+                                    case of_fastq : rc = dump_seq_row_fastx_filtered( opts, &stx, &ptx, mc, ids, row_id, row.nreads, rows_so_far ); break;
+                                }
+                            }
+                        }
+                    }
+                    VCursorRelease( ptx.cursor );
+                }
+            }
+        }
+        VCursorRelease( stx.cursor );
+    }
+    return rc;
+}
+
+
+/* we are printing from a sra-database, we print all unaligned read we can find */
+static rc_t print_unaligned_database_full( const samdump_opts * const opts, const input_table * const seq,
+                                           const input_table * const prim, const matecache * const mc,
+                                           const input_database * const ids, uint64_t * const rows_so_far )
+{
+    seq_table_ctx stx;
+    rc_t rc = prepare_seq_table_ctx( opts, seq, &stx, ( prim == NULL ) );
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen( stx.cursor );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorOpen( SEQUENCE ) for $(tn) failed", "tn=%s", seq->path ) );
+        }
+        else
+        {
+            prim_table_ctx ptx;
+            if ( opts->output_format == of_sam )
+                rc = prepare_prim_table_ctx( opts, prim, &ptx );
+            if ( rc == 0 )
+            {
+                int64_t first_row, row_id;
+                uint64_t row_count;
+                rc = VCursorIdRange( stx.cursor, stx.read_type_idx, &first_row, &row_count );
+                if ( rc != 0 )
+                {
+                    (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorIdRange( SEQUENCE ) for $(tn) failed", "tn=%s", seq->path ) );
+                }
+                else
+                {
+                    seq_row row;
+                    for ( row_id = first_row; ( ( row_id - first_row ) < row_count ) && rc == 0 && !test_limit_reached( opts, *rows_so_far ); ++row_id )
+                    {
+                        rc = Quitting();
+                        if ( rc == 0 )
+                        {
+                            rc = read_seq_row( opts, &stx, row_id, &row );
+                            if ( rc == 0 && !row.filtered_out )
+                            {
+                                switch( opts->output_format )
+                                {
+                                    case of_sam   : rc = dump_seq_prim_row_sam( opts, &stx, &ptx, mc, ids, row_id, row.nreads, rows_so_far ); break;
+                                    case of_fasta : /* fall through intended ! */
+                                    case of_fastq : rc = dump_seq_row_fastx( opts, &stx, row_id, row.nreads, rows_so_far ); break;
+                                }
+                            }
+                        }
+                    }
+                }
+                if ( opts->output_format == of_sam )
+                    VCursorRelease( ptx.cursor );
+            }
+        }
+        VCursorRelease( stx.cursor );
+    }
+    return rc;
+}
+
+
+/* we are printing from a (legacy) table not from a database! */
+static rc_t print_unaligned_table( const samdump_opts * const opts, const input_table * const seq, uint64_t * const rows_so_far )
+{
+    seq_table_ctx stx;
+    rc_t rc = prepare_seq_table_ctx( opts, seq, &stx, true ); /* true ... this is a legacy table, not a database */
+    if ( rc == 0 )
+    {
+        rc = VCursorOpen( stx.cursor );
+        if ( rc != 0 )
+        {
+            (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorOpen( SEQUENCE ) for $(tn) failed", "tn=%s", seq->path ) );
+        }
+        else
+        {
+            int64_t first_row, row_id;
+            uint64_t row_count;
+            rc = VCursorIdRange( stx.cursor, stx.read_type_idx, &first_row, &row_count );
+            if ( rc != 0 )
+            {
+                (void)PLOGERR( klogInt, ( klogInt, rc, "VCursorIdRange( SEQUENCE ) for $(tn) failed", "tn=%s", seq->path ) );
+            }
+            else
+            {
+                seq_row row;
+                for ( row_id = first_row; ( ( row_id - first_row ) < row_count ) && rc == 0 && !test_limit_reached( opts, *rows_so_far ); ++row_id )
+                {
+                    rc = Quitting();
+                    if ( rc == 0 )
+                    {
+                        rc = read_seq_row( opts, &stx, row_id, &row );
+                        if ( rc == 0 && !row.filtered_out )
+                        {
+                            switch( opts->output_format )
+                            {
+                                case of_sam   : rc = dump_seq_row_sam( opts, &stx, row_id, row.nreads, rows_so_far ); break;
+                                case of_fasta : /* fall through intended ! */
+                                case of_fastq : rc = dump_seq_tab_row_fastx( opts, &stx, row_id, row.nreads, rows_so_far ); break;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        VCursorRelease( stx.cursor );
+    }
+    return rc;
+}
+
+
+/* entry point from sam-dump3.c */
+rc_t print_unaligned_spots( const samdump_opts * const opts, const input_files * const ifs,
+                            const matecache * const mc, uint64_t * const rows_so_far )
+{
+    rc_t rc = 0;
+    if ( ( ifs->database_count > 0 ) && ( opts->dump_unaligned_reads || opts->dump_unaligned_only ) )
+    {
+        uint32_t db_idx;
+        for ( db_idx = 0; db_idx < ifs->database_count && rc == 0; ++db_idx )
+        {
+            const input_database * ids = VectorGet( &ifs->dbs, db_idx );
+            if ( ids != NULL )
+            {
+                input_table seq;
+
+                seq.path = ids->path;
+                rc = VDatabaseOpenTableRead( ids->db, &seq.tab, "SEQUENCE" );
+                if ( rc != 0 )
+                {
+                    (void)PLOGERR( klogInt, ( klogInt, rc, "cannot open table SEQUENCE for $(tn)", "tn=%s", ids->path ) );
+                }
+                else
+                {
+                    input_table prim;
+                    prim.path = ids->path;
+                    rc = VDatabaseOpenTableRead( ids->db, &prim.tab, "PRIMARY_ALIGNMENT" );
+                    if ( rc != 0 )
+                    {
+                        (void)PLOGERR( klogInt, ( klogInt, rc, "cannot open table PRIMARY_ALIGNMENT $(tn)", "tn=%s", ids->path ) );
+                    }
+                    else
+                    {
+                        if ( opts->region_count > 0 )
+                        {
+                            rc = print_unaligned_database_filtered( opts, &seq, &prim, mc, ids, rows_so_far );
+                        }
+                        else
+                        {
+                            rc = print_unaligned_database_full( opts, &seq, &prim, mc, ids, rows_so_far );
+                        }
+                        VTableRelease( prim.tab );
+                    }
+                    VTableRelease( seq.tab );
+                }
+            }
+        }
+    }
+
+    if ( rc == 0 && ifs->table_count > 0 )
+    {
+        uint32_t tab_idx;
+        for ( tab_idx = 0; tab_idx < ifs->table_count && rc == 0; ++tab_idx )
+        {
+            input_table * itab = VectorGet( &ifs->tabs, tab_idx );
+            if ( itab != NULL )
+                rc = print_unaligned_table( opts, itab, rows_so_far );
+        }
+    }
+    return rc;
+}
diff --git a/tools/sra-pileup/sam-unaligned.h b/tools/sra-pileup/sam-unaligned.h
new file mode 100644
index 0000000..fe66f0d
--- /dev/null
+++ b/tools/sra-pileup/sam-unaligned.h
@@ -0,0 +1,43 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+#ifndef _h_sam_unaligned_
+#define _h_sam_unaligned_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+}
+#endif
+
+#include "sam-dump-opts.h"
+#include "inputfiles.h"
+#include "matecache.h"
+
+rc_t print_unaligned_spots( const samdump_opts * const opts, const input_files * const ifs,
+                            const matecache * const mc, uint64_t * const rows_so_far );
+
+#endif
\ No newline at end of file
diff --git a/tools/sra-pileup/sra-pileup.c b/tools/sra-pileup/sra-pileup.c
new file mode 100644
index 0000000..437d885
--- /dev/null
+++ b/tools/sra-pileup/sra-pileup.c
@@ -0,0 +1,1834 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "sra-pileup.vers.h"
+
+#include "cmdline_cmn.h"
+#include "reref.h"
+
+#include <kapp/main.h>
+
+#include <klib/out.h>
+#include <klib/printf.h>
+#include <klib/report.h>
+
+#include <kfs/file.h>
+#include <kfs/buffile.h>
+#include <kfs/bzip.h>
+#include <kfs/gzip.h>
+
+#include <insdc/sra.h>
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/report.h> /* ReportSetVDBManager */
+
+#include <sra/sraschema.h>
+#include <align/manager.h>
+
+#include <os-native.h>
+#include <sysalloc.h>
+
+#define COL_QUALITY "QUALITY"
+#define COL_REF_ORIENTATION "REF_ORIENTATION"
+#define COL_READ_FILTER "READ_FILTER"
+
+#define OPTION_MINMAPQ "minmapq"
+#define ALIAS_MINMAPQ  "q"
+
+#define OPTION_DUPS    "duplicates"
+#define ALIAS_DUPS     "d"
+
+#define OPTION_MODE    "mode"
+#define ALIAS_MODE     "m"
+
+#define OPTION_NOQUAL  "noqual"
+#define ALIAS_NOQUAL   "n"
+
+#define OPTION_NOSKIP  "noskip"
+#define ALIAS_NOSKIP   "s"
+
+#define OPTION_SHOWID  "showid"
+#define ALIAS_SHOWID   "i"
+
+#define OPTION_SPOTGRP "spotgroups"
+#define ALIAS_SPOTGRP  "p"
+
+#define OPTION_SEQNAME "seqname"
+#define ALIAS_SEQNAME  "e"
+
+#define OPTION_REREF   "report-ref"
+#define ALIAS_REREF    NULL
+
+#define OPTION_REREFEX "report-ref-ext"
+#define ALIAS_REREFEX  NULL
+
+enum
+{
+    sra_pileup_samtools = 0,
+    sra_pileup_counters = 1,
+    sra_pileup_detect = 2
+};
+
+static const char * minmapq_usage[] = { "Minimum mapq-value, ", 
+                                        "alignments with lower mapq",
+                                        "will be ignored (default=0)", NULL };
+
+static const char * dups_usage[] = { "process duplicates ( 0...off/1..on )", NULL };
+
+static const char * mode_usage[] = { "Output-format: 0...samtools, 1...just counters",
+                                     "(default=0)", NULL };
+
+static const char * noqual_usage[] = { "Omit qualities in output", NULL };
+
+static const char * noskip_usage[] = { "Does not skip reference-regions without alignments", NULL };
+
+static const char * showid_usage[] = { "Shows alignment-id for every base", NULL };
+
+static const char * spotgrp_usage[] = { "divide by spotgroups", NULL };
+
+static const char * seqname_usage[] = { "use original seq-name", NULL };
+
+static const char * reref_usage[] = { "report used references", NULL };
+
+static const char * rerefex_usage[] = { "report used references and coverage", NULL };
+
+
+OptDef MyOptions[] =
+{
+    /*name,           alias,         hfkt, usage-help,    maxcount, needs value, required */
+    { OPTION_MINMAPQ, ALIAS_MINMAPQ, NULL, minmapq_usage, 1,        true,        false },
+    { OPTION_DUPS,    ALIAS_DUPS,    NULL, dups_usage,    1,        true,        false },
+    { OPTION_MODE,    ALIAS_MODE,    NULL, mode_usage,    1,        true,        false },
+    { OPTION_NOQUAL,  ALIAS_NOQUAL,  NULL, noqual_usage,  1,        false,       false },
+    { OPTION_NOSKIP,  ALIAS_NOSKIP,  NULL, noskip_usage,  1,        false,       false },
+    { OPTION_SHOWID,  ALIAS_SHOWID,  NULL, showid_usage,  1,        false,       false },
+    { OPTION_SPOTGRP, ALIAS_SPOTGRP, NULL, spotgrp_usage, 1,        false,       false },
+    { OPTION_SEQNAME, ALIAS_SEQNAME, NULL, seqname_usage, 1,        false,       false },
+    { OPTION_REREF,   ALIAS_REREF,   NULL, reref_usage,   1,        false,       false },
+    { OPTION_REREFEX, ALIAS_REREFEX, NULL, rerefex_usage, 1,        false,       false }
+};
+
+/* =========================================================================================== */
+
+typedef struct pileup_options
+{
+    common_options cmn;
+    bool process_dups;
+    bool omit_qualities;
+    bool no_skip;
+    bool show_id;
+    bool div_by_spotgrp;
+    bool use_seq_name;
+    bool reref;
+    bool rerefex;
+    uint32_t minmapq;
+    uint32_t output_mode;
+    uint32_t source_table;
+} pileup_options;
+
+
+typedef struct pileup_callback_data
+{
+    const AlignMgr *almgr;
+    pileup_options *options;
+} pileup_callback_data;
+
+
+/* =========================================================================================== */
+
+static rc_t get_str_option( const Args *args, const char *name, const char ** res )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    *res = NULL;
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "ArgsOptionCount() failed" );
+    }
+    else
+    {
+        if ( count > 0 )
+        {
+            rc = ArgsOptionValue( args, name, 0, res );
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "ArgsOptionValue() failed" );
+            }
+        }
+    }
+    return rc;
+}
+
+
+static rc_t get_uint32_option( const Args *args, const char *name,
+                        uint32_t *res, const uint32_t def )
+{
+    const char * s;
+    rc_t rc = get_str_option( args, name, &s );
+    if ( rc == 0 && s != NULL )
+        *res = atoi( s );
+    else
+        *res = def;
+    return rc;
+}
+
+
+static rc_t get_bool_option( const Args *args, const char *name, bool *res, const bool def )
+{
+    uint32_t count;
+    rc_t rc = ArgsOptionCount( args, name, &count );
+    if ( rc == 0 && count > 0 )
+    {
+        *res = true;
+    }
+    else
+    {
+        *res = def;
+    }
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+static rc_t get_pileup_options( Args * args, pileup_options *opts )
+{
+    rc_t rc = get_common_options( args, &opts->cmn );
+
+    if ( rc == 0 )
+        rc = get_uint32_option( args, OPTION_MINMAPQ, &opts->minmapq, 0 );
+
+    if ( rc == 0 )
+         rc = get_uint32_option( args, OPTION_MODE, &opts->output_mode, sra_pileup_samtools );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_DUPS, &opts->process_dups, false );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_NOQUAL, &opts->omit_qualities, false );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_NOSKIP, &opts->no_skip, false );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_SHOWID, &opts->show_id, false );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_SPOTGRP, &opts->div_by_spotgrp, false );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_SEQNAME, &opts->use_seq_name, false );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_REREF, &opts->reref, false );
+
+    if ( rc == 0 )
+        rc = get_bool_option( args, OPTION_REREFEX, &opts->rerefex, false );
+
+    return rc;
+}
+
+/* GLOBAL VARIABLES */
+struct {
+    KWrtWriter org_writer;
+    void* org_data;
+    KFile* kfile;
+    uint64_t pos;
+} g_out_writer = { NULL };
+
+const char UsageDefaultName[] = "sra-pileup";
+
+rc_t CC UsageSummary ( const char * progname )
+{
+    return KOutMsg ("\n"
+                    "Usage:\n"
+                    "  %s <path> [options]\n"
+                    "\n", progname);
+}
+
+
+rc_t CC Usage ( const Args * args )
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if ( args == NULL )
+        rc = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
+    else
+        rc = ArgsProgram ( args, &fullpath, &progname );
+
+    if ( rc )
+        progname = fullpath = UsageDefaultName;
+
+    UsageSummary ( progname );
+    KOutMsg ( "Options:\n" );
+    print_common_helplines();
+    HelpOptionLine ( ALIAS_MINMAPQ, OPTION_MINMAPQ, "min. mapq", minmapq_usage );
+    HelpOptionLine ( ALIAS_DUPS, OPTION_DUPS, "duplicates", dups_usage );
+    HelpOptionLine ( ALIAS_MODE, OPTION_MODE, "output-modes", mode_usage );
+    HelpOptionLine ( ALIAS_SPOTGRP, OPTION_SPOTGRP, "spotgroups-modes", spotgrp_usage );
+    HelpOptionLine ( ALIAS_SEQNAME, OPTION_SEQNAME, "org. seq-name", seqname_usage );
+    HelpOptionLine ( ALIAS_REREF, OPTION_REREF, "report reference", reref_usage );
+    HelpOptionLine ( ALIAS_REREFEX, OPTION_REREFEX, "report reference", rerefex_usage );
+    HelpOptionsStandard ();
+    HelpVersion ( fullpath, KAppVersion() );
+    return rc;
+}
+
+
+/* Version  EXTERN
+ *  return 4-part version code: 0xMMmmrrrr, where
+ *      MM = major release
+ *      mm = minor release
+ *    rrrr = bug-fix release
+ */
+ver_t CC KAppVersion ( void )
+{
+    return SRA_PILEUP_VERS;
+}
+
+/***************************************
+    N (0x4E)  n (0x6E)  <--> 0x0
+    A (0x41)  a (0x61)  <--> 0x1
+    C (0x43)  c (0x63)  <--> 0x2
+    M (0x4D)  m (0x6D)  <--> 0x3
+    G (0x47)  g (0x67)  <--> 0x4
+    R (0x52)  r (0x72)  <--> 0x5
+    S (0x53)  s (0x73)  <--> 0x6
+    V (0x56)  v (0x76)  <--> 0x7
+    T (0x54)  t (0x74)  <--> 0x8
+    W (0x57)  w (0x77)  <--> 0x9
+    Y (0x59)  y (0x79)  <--> 0xA
+    H (0x48)  h (0x68)  <--> 0xB
+    K (0x4B)  k (0x6B)  <--> 0xC
+    D (0x44)  d (0x64)  <--> 0xD
+    B (0x42)  b (0x62)  <--> 0xE
+    N (0x4E)  n (0x6E)  <--> 0xF
+***************************************/
+
+
+char _4na_2_ascii_tab[] =
+{
+/*  0x0  0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F */
+    'N', 'A', 'C', 'M', 'G', 'R', 'S', 'V', 'T', 'W', 'Y', 'H', 'K', 'D', 'B', 'N',
+    'n', 'a', 'c', 'm', 'g', 'r', 's', 'v', 't', 'w', 'y', 'h', 'k', 'd', 'b', 'n'
+};
+
+
+static char _4na_to_ascii( INSDC_4na_bin c, bool reverse )
+{
+    return _4na_2_ascii_tab[ ( c & 0x0F ) | ( reverse ? 0x10 : 0 ) ];
+}
+
+
+/* =========================================================================================== */
+
+
+typedef struct dyn_string
+{
+    char * data;
+    size_t allocated;
+    size_t data_len;
+} dyn_string;
+
+
+static rc_t allocated_dyn_string ( dyn_string *self, size_t size )
+{
+    rc_t rc = 0;
+    self->data_len = 0;
+    self->data = malloc( size );
+    if ( self->data != NULL )
+    {
+        self->allocated = size;
+    }
+    else
+    {
+        self->allocated = 0;
+        rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+    }
+    return rc;
+}
+
+static void free_dyn_string ( dyn_string *self )
+{
+    free( self->data );
+    self->data = NULL;
+    self->allocated = 0;
+    self->data_len = 0;
+}
+
+static void reset_dyn_string( dyn_string *self )
+{
+    self->data_len = 0;
+}
+
+static rc_t expand_dyn_string( dyn_string *self, size_t new_size )
+{
+    rc_t rc = 0;
+    if ( new_size > self->allocated )
+    {
+        self->data = realloc ( self->data, new_size );
+        if ( self->data != NULL )
+        {
+            self->allocated = new_size;
+        }
+        else
+        {
+            self->allocated = 0;
+            self->data_len = 0;
+            rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t add_char_2_dyn_string( dyn_string *self, const char c )
+{
+    /* does nothing if self->data_len + 2 < self->allocated */
+    rc_t rc = expand_dyn_string( self, self->data_len + 2 );
+    if ( rc == 0 )
+    {
+        self->data[ self->data_len++ ] = c;
+        self->data[ self->data_len ] = 0;
+    }
+    return rc;
+}
+
+
+static rc_t add_string_2_dyn_string( dyn_string *self, const char * s )
+{
+    rc_t rc;
+    size_t size = string_size ( s );
+    /* does nothing if self->data_len + size + 1 < self->allocated */
+    rc = expand_dyn_string( self, self->data_len + size + 1 );
+    if ( rc == 0 )
+    {
+        string_copy ( &(self->data[ self->data_len ]), self->allocated, s, size );
+        self->data_len += size;
+        self->data[ self->data_len ] = 0;
+    }
+    return rc;
+}
+
+
+static rc_t print_2_dyn_string( dyn_string * self, const char *fmt, ... )
+{
+    rc_t rc = 0;
+    bool not_enough;
+
+    do
+    {
+        size_t num_writ;
+        va_list args;
+        va_start ( args, fmt );
+        rc = string_vprintf ( &(self->data[ self->data_len ]), 
+                              self->allocated - ( self->data_len + 1 ),
+                              &num_writ,
+                              fmt,
+                              args );
+        va_end ( args );
+
+        if ( rc == 0 )
+        {
+            self->data_len += num_writ;
+            self->data[ self->data_len ] = 0;
+        }
+        not_enough = ( GetRCState( rc ) == rcInsufficient );
+        if ( not_enough )
+        {
+            rc = expand_dyn_string( self, self->allocated + ( num_writ * 2 ) );
+        }
+    } while ( not_enough && rc == 0 );
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+static rc_t CC BufferedWriter ( void* self, const char* buffer, size_t bufsize, size_t* num_writ )
+{
+    rc_t rc = 0;
+
+    assert( buffer != NULL );
+    assert( num_writ != NULL );
+
+    do {
+        rc = KFileWrite( g_out_writer.kfile, g_out_writer.pos, buffer, bufsize, num_writ );
+        if ( rc == 0 )
+        {
+            buffer += *num_writ;
+            bufsize -= *num_writ;
+            g_out_writer.pos += *num_writ;
+        }
+    } while ( rc == 0 && bufsize > 0 );
+    return rc;
+}
+
+
+static rc_t set_stdout_to( bool gzip, bool bzip2, const char * filename, size_t bufsize )
+{
+    rc_t rc = 0;
+    if ( gzip && bzip2 )
+    {
+        rc = RC( rcApp, rcFile, rcConstructing, rcParam, rcAmbiguous );
+    }
+    else
+    {
+        KDirectory *dir;
+        rc = KDirectoryNativeDir( &dir );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+        }
+        else
+        {
+            KFile *of;
+            rc = KDirectoryCreateFile ( dir, &of, false, 0664, kcmInit, "%s", filename );
+            if ( rc == 0 )
+            {
+                KFile *buf;
+                if ( gzip )
+                {
+                    KFile *gz;
+                    rc = KFileMakeGzipForWrite( &gz, of );
+                    if ( rc == 0 )
+                    {
+                        KFileRelease( of );
+                        of = gz;
+                    }
+                }
+                if ( bzip2 )
+                {
+                    KFile *bz;
+                    rc = KFileMakeBzip2ForWrite( &bz, of );
+                    if ( rc == 0 )
+                    {
+                        KFileRelease( of );
+                        of = bz;
+                    }
+                }
+
+                rc = KBufFileMakeWrite( &buf, of, false, bufsize );
+                if ( rc == 0 )
+                {
+                    g_out_writer.kfile = buf;
+                    g_out_writer.org_writer = KOutWriterGet();
+                    g_out_writer.org_data = KOutDataGet();
+                    rc = KOutHandlerSet( BufferedWriter, &g_out_writer );
+                    if ( rc != 0 )
+                    {
+                        LOGERR( klogInt, rc, "KOutHandlerSet() failed" );
+                    }
+                }
+                KFileRelease( of );
+            }
+            KDirectoryRelease( dir );
+        }
+    }
+    return rc;
+}
+
+
+static void release_stdout_redirection( void )
+{
+    KFileRelease( g_out_writer.kfile );
+    if( g_out_writer.org_writer != NULL )
+    {
+        KOutHandlerSet( g_out_writer.org_writer, g_out_writer.org_data );
+    }
+    g_out_writer.org_writer = NULL;
+}
+
+
+static rc_t CC write_to_FILE( void *f, const char *buffer, size_t bytes, size_t *num_writ )
+{
+    * num_writ = fwrite ( buffer, 1, bytes, f );
+    if ( * num_writ != bytes )
+        return RC( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+    return 0;
+}
+
+
+/* =========================================================================================== */
+
+
+typedef struct tool_rec tool_rec;
+struct tool_rec
+{
+    /* orientation towards reference ( false...in ref-orientation / true...reverse) */
+    bool reverse;
+    /* ptr to quality... */
+    uint8_t * quality;
+};
+
+
+static rc_t read_base_and_len( struct VCursor const *curs,
+                               const char * name,
+                               int64_t row_id,
+                               const void ** base,
+                               uint32_t * len )
+{
+    uint32_t column_idx;
+    rc_t rc = VCursorGetColumnIdx ( curs, &column_idx, name );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "VCursorGetColumnIdx() failed" );
+    }
+    else
+    {
+        uint32_t elem_bits, boff, len_intern;
+        const void * ptr;
+        rc = VCursorCellDataDirect ( curs, row_id, column_idx, 
+                                     &elem_bits, &ptr, &boff, &len_intern );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VCursorCellDataDirect() failed" );
+        }
+        else
+        {
+            if ( len != NULL ) *len = len_intern;
+            if ( base != NULL ) *base = ptr;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t CC populate_tooldata( void *obj, const PlacementRecord *placement,
+        struct VCursor const *curs,
+        INSDC_coord_zero ref_window_start, INSDC_coord_len ref_window_len,
+        void *data )
+{
+    tool_rec * rec = ( tool_rec * ) obj;
+    pileup_callback_data *cb_data = ( pileup_callback_data * )data;
+    rc_t rc = 0;
+
+    rec->quality = NULL;
+    if ( !cb_data->options->process_dups )
+    {
+        const uint8_t * read_filter;
+        uint32_t read_filter_len;
+        rc = read_base_and_len( curs, COL_READ_FILTER, placement->id,
+                                (const void **)&read_filter, &read_filter_len );
+        if ( rc == 0 )
+        {
+            if ( ( *read_filter == SRA_READ_FILTER_REJECT )||
+                 ( *read_filter == SRA_READ_FILTER_CRITERIA ) )
+            {
+                rc = RC( rcAlign, rcType, rcAccessing, rcId, rcIgnored );
+            }
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        const bool * orientation;
+        rc = read_base_and_len( curs, COL_REF_ORIENTATION, placement->id,
+                                (const void **)&orientation, NULL );
+        if ( rc == 0 )
+        {
+            rec->reverse = *orientation;
+        }
+    }
+
+    if ( rc == 0 && !cb_data->options->omit_qualities )
+    {
+        const uint8_t * quality;
+        uint32_t quality_len;
+
+        rc = read_base_and_len( curs, COL_QUALITY, placement->id,
+                                (const void **)&quality, &quality_len );
+        if ( rc == 0 )
+        {
+            rec->quality = ( uint8_t * )rec;
+            rec->quality += sizeof ( * rec );
+            memcpy( rec->quality, quality, quality_len );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t CC alloc_size( struct VCursor const *curs, int64_t row_id, size_t * size, void *data )
+{
+    rc_t rc = 0;
+    tool_rec * rec;
+    pileup_callback_data *cb_data = ( pileup_callback_data * )data;
+    *size = ( sizeof *rec );
+
+    if ( !cb_data->options->omit_qualities )
+    {
+        uint32_t q_len;
+        rc = read_base_and_len( curs, COL_QUALITY, row_id, NULL, &q_len );
+        if ( rc == 0 )
+        {
+            *size += q_len;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t walk_ref_position( ReferenceIterator *ref_iter,
+                               const PlacementRecord *rec,
+                               dyn_string *line,
+                               char * qual,
+                               pileup_options *options )
+{
+    rc_t rc = 0;
+    INSDC_coord_zero seq_pos;
+    int32_t state = ReferenceIteratorState ( ref_iter, &seq_pos );
+    tool_rec *xrec = ( tool_rec * ) PlacementRecordCast ( rec, placementRecordExtension1 );
+    bool reverse = xrec->reverse;
+
+    if ( !options->omit_qualities )
+    {
+        *qual = xrec->quality[ seq_pos ];
+    }
+
+    if ( ( state & align_iter_invalid ) == align_iter_invalid )
+    {
+        return add_char_2_dyn_string( line, '?' );
+    }
+
+    if ( ( state & align_iter_first ) == align_iter_first )
+    {
+        char s[ 3 ];
+        int32_t c = rec->mapq + 33;
+        if ( c > '~' ) { c = '~'; }
+        if ( c < 33 ) { c = 33; }
+        s[ 0 ] = '^';
+        s[ 1 ] = c;
+        s[ 2 ] = 0;
+        rc = add_string_2_dyn_string( line, s );
+    }
+
+    if ( rc == 0 )
+    {
+        if ( ( state & align_iter_skip ) == align_iter_skip )
+        {
+            rc = add_char_2_dyn_string( line, '*' );
+            if ( !options->omit_qualities )
+                *qual = xrec->quality[ seq_pos + 1 ];
+        }
+        else
+        {
+            if ( ( state & align_iter_match ) == align_iter_match )
+                rc = add_char_2_dyn_string( line, ( reverse ? ',' : '.' ) );
+            else
+                rc = add_char_2_dyn_string( line, _4na_to_ascii( state, reverse ) );
+        }
+    }
+
+    if ( ( state & align_iter_insert ) == align_iter_insert )
+    {
+        const INSDC_4na_bin *bases;
+        uint32_t i;
+        uint32_t n = ReferenceIteratorBasesInserted ( ref_iter, &bases );
+        
+        rc = print_2_dyn_string( line, "+%u", n );
+        for ( i = 0; i < n && rc == 0; ++i )
+        {
+            rc = add_char_2_dyn_string( line, _4na_to_ascii( bases[ i ], reverse ) );
+        }
+    }
+
+    if ( ( state & align_iter_delete ) == align_iter_delete )
+    {
+        const INSDC_4na_bin *bases;
+        INSDC_coord_zero ref_pos;
+        uint32_t n = ReferenceIteratorBasesDeleted ( ref_iter, &ref_pos, &bases );
+        if ( bases != NULL )
+        {
+            uint32_t i;
+            rc = print_2_dyn_string( line, "-%u", n );
+            for ( i = 0; i < n && rc == 0; ++i )
+            {
+                rc = add_char_2_dyn_string( line, _4na_to_ascii( bases[ i ], reverse ) );
+            }
+            free( (void *) bases );
+        }
+    }
+
+    if ( ( ( state & align_iter_last ) == align_iter_last )&& ( rc == 0 ) )
+        rc = add_char_2_dyn_string( line, '$' );
+
+    if ( options->show_id )
+        rc = print_2_dyn_string( line, "(%lu:%u-%u/%u)",
+                                 rec->id, rec->pos + 1, rec->pos + rec->len, seq_pos );
+
+    return rc;
+}
+
+
+static rc_t walk_alignments( ReferenceIterator *ref_iter,
+                             dyn_string *line,
+                             dyn_string *qualities,
+                             pileup_options *options )
+{
+    uint32_t depth = 0;
+    rc_t rc;
+    do
+    {
+        const PlacementRecord *rec;
+        rc = ReferenceIteratorNextPlacement ( ref_iter, &rec );
+        if ( rc == 0 )
+            rc = walk_ref_position( ref_iter, rec, line, &( qualities->data[ depth++ ] ), options );
+        if ( rc == 0 )
+            rc = Quitting();
+    } while ( rc == 0 );
+
+    if ( !options->omit_qualities )
+    {
+        uint32_t i;
+        add_char_2_dyn_string( line, '\t' );
+        for ( i = 0; i < depth; ++i )
+        {
+            add_char_2_dyn_string( line, qualities->data[ i ] + 33 );
+        }
+    }
+
+    if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+    return rc;
+}
+
+
+static rc_t walk_spot_groups( ReferenceIterator *ref_iter,
+                             dyn_string *line,
+                             dyn_string *qualities,
+                             pileup_options *options )
+{
+    rc_t rc;
+    do
+    {
+        rc = ReferenceIteratorNextSpotGroup ( ref_iter, NULL, NULL );
+        if ( rc == 0 )
+            add_char_2_dyn_string( line, '\t' );
+        if ( rc == 0 )
+            rc = walk_alignments( ref_iter, line, qualities, options );
+    } while ( rc == 0 );
+
+    if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+    return rc;
+}
+
+
+static rc_t walk_position( ReferenceIterator *ref_iter,
+                           const char * refname,
+                           dyn_string *line,
+                           dyn_string *qualities,
+                           pileup_options *options )
+{
+    INSDC_coord_zero pos;
+    uint32_t depth;
+    INSDC_4na_bin base;
+
+    rc_t rc = ReferenceIteratorPosition ( ref_iter, &pos, &depth, &base );
+    if ( rc != 0 )
+    {
+        if ( GetRCState( rc ) != rcDone )
+        {
+            LOGERR( klogInt, rc, "ReferenceIteratorNextPos() failed" );
+        }
+    }
+    else if ( ( depth > 0 )||( options->no_skip ) )
+    {
+        rc = expand_dyn_string( line, ( 5 * depth ) + 100 );
+        if ( rc == 0 )
+        {
+            rc = expand_dyn_string( qualities, depth + 100 );
+            if ( rc == 0 )
+            {
+                char c = _4na_to_ascii( base, false );
+
+                reset_dyn_string( line );
+                rc = print_2_dyn_string( line, "%s\t%u\t%c\t%u", refname, pos + 1, c, depth );
+                if ( rc == 0 )
+                {
+                    if ( depth > 0 )
+                    {
+                        rc = walk_spot_groups( ref_iter, line, qualities, options );
+                    }
+
+                    if ( rc == 0 )
+                    {
+                        /* only one KOutMsg() per line... */
+                        KOutMsg( "%s\n", line->data );
+                    }
+
+                    if ( GetRCState( rc ) == rcDone )
+                    {
+                        rc = 0;
+                    }
+                }
+            }
+        }
+    } 
+    return rc;
+}
+
+
+static rc_t walk_reference_window( ReferenceIterator *ref_iter,
+                                   const char * refname,
+                                   dyn_string *line,
+                                   dyn_string *qualities,
+                                   pileup_options *options )
+{
+    rc_t rc = 0;
+    while ( rc == 0 )
+    {
+        rc = ReferenceIteratorNextPos ( ref_iter, !options->no_skip );
+        if ( rc != 0 )
+        {
+            if ( GetRCState( rc ) != rcDone )
+            {
+                LOGERR( klogInt, rc, "ReferenceIteratorNextPos() failed" );
+            }
+        }
+        else
+        {
+            rc = walk_position( ref_iter, refname, line, qualities, options );
+        }
+        if ( rc == 0 )
+        {
+            rc = Quitting();
+        }
+    }
+    if ( GetRCState( rc ) == rcDone ) rc = 0;
+    return rc;
+}
+
+
+static rc_t walk_reference( ReferenceIterator *ref_iter,
+                            const char * refname,
+                            pileup_options *options )
+{
+    dyn_string line;
+    rc_t rc = allocated_dyn_string ( &line, 4096 );
+    if ( rc == 0 )
+    {
+        dyn_string qualities;
+        rc = allocated_dyn_string ( &qualities, 4096 );
+        if ( rc == 0 )
+        {
+            while ( rc == 0 )
+            {
+                rc = Quitting ();
+                if ( rc == 0 )
+                {
+                    INSDC_coord_zero first_pos;
+                    INSDC_coord_len len;
+                    rc = ReferenceIteratorNextWindow ( ref_iter, &first_pos, &len );
+                    if ( rc != 0 )
+                    {
+                        if ( GetRCState( rc ) != rcDone )
+                        {
+                            LOGERR( klogInt, rc, "ReferenceIteratorNextWindow() failed" );
+                        }
+                    }
+                    else
+                    {
+                        rc = walk_reference_window( ref_iter, refname, &line, &qualities, options );
+                    }
+                }
+            }
+            free_dyn_string ( &qualities );
+        }
+        free_dyn_string ( &line );
+    }
+    if ( GetRCState( rc ) == rcDone ) rc = 0;
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+typedef struct pileup_counters
+{
+    uint32_t matches;
+    uint32_t mismatches[ 4 ];
+    uint32_t inserts;
+    uint32_t deletes;
+    dyn_string ins;
+    dyn_string del;
+} pileup_counters;
+
+
+static void clear_counters( pileup_counters * counters )
+{
+    uint32_t i;
+
+    counters->matches = 0;
+    for ( i = 0; i < 4; ++i )
+        counters->mismatches[ i ] = 0;
+    counters->inserts = 0;
+    counters->deletes = 0;
+    reset_dyn_string( &(counters->ins) );
+    reset_dyn_string( &(counters->del) );
+}
+
+static rc_t prepare_counters( pileup_counters * counters )
+{
+    rc_t rc = allocated_dyn_string ( &(counters->ins), 1024 );
+    if ( rc == 0 )
+    {
+        rc = allocated_dyn_string ( &(counters->del), 1024 );
+    }
+    return rc;
+}
+
+
+static void finish_counters( pileup_counters * counters )
+{
+    free_dyn_string ( &(counters->ins) );
+    free_dyn_string ( &(counters->del) );
+}
+
+
+static void walk_counter_state( ReferenceIterator *ref_iter,
+                                pileup_counters * counters )
+{
+    INSDC_coord_zero seq_pos;
+    int32_t state = ReferenceIteratorState ( ref_iter, &seq_pos );
+
+    if ( ( state & align_iter_invalid ) == align_iter_invalid )
+    {
+        return;
+    }
+
+    if ( ( state & align_iter_skip ) != align_iter_skip )
+    {
+        if ( ( state & align_iter_match ) == align_iter_match )
+        {
+            (counters->matches)++;
+        }
+        else
+        {
+            char c = _4na_to_ascii( state, false );
+            switch( c )
+            {
+                case 'A' : ( counters->mismatches[ 0 ] )++; break;
+                case 'C' : ( counters->mismatches[ 1 ] )++; break;
+                case 'G' : ( counters->mismatches[ 2 ] )++; break;
+                case 'T' : ( counters->mismatches[ 3 ] )++; break;
+            }
+        }
+    }
+
+    if ( ( state & align_iter_insert ) == align_iter_insert )
+    {
+        const INSDC_4na_bin *bases;
+        uint32_t i, n = ReferenceIteratorBasesInserted ( ref_iter, &bases );
+        (counters->inserts) += n;
+        for ( i = 0; i < n; ++i )
+        {
+            add_char_2_dyn_string( &(counters->ins), _4na_to_ascii( bases[ i ], false ) );
+        }
+    }
+
+    if ( ( state & align_iter_delete ) == align_iter_delete )
+    {
+        const INSDC_4na_bin *bases;
+        INSDC_coord_zero ref_pos;
+        uint32_t n = ReferenceIteratorBasesDeleted ( ref_iter, &ref_pos, &bases );
+        if ( bases != NULL )
+        {
+            uint32_t i;
+            (counters->deletes) += n;
+            for ( i = 0; i < n; ++i )
+            {
+                add_char_2_dyn_string( &(counters->del), _4na_to_ascii( bases[ i ], false ) );
+            }
+            free( (void *) bases );
+        }
+    }
+}
+
+
+static void print_counter_line( const char * refname,
+                                INSDC_coord_zero pos,
+                                INSDC_4na_bin base,
+                                uint32_t depth,
+                                pileup_counters * counters )
+{
+    char c = _4na_to_ascii( base, false );
+    KOutMsg( "%s\t%u\t%c\t%u\t", refname, pos + 1, c, depth );
+    if ( counters->matches > 0 )
+        KOutMsg( "%u=", counters->matches );
+    if ( counters->mismatches[ 0 ] > 0 )
+        KOutMsg( "%uA", counters->mismatches[ 0 ] );
+    if ( counters->mismatches[ 1 ] > 0 )
+        KOutMsg( "%uC", counters->mismatches[ 1 ] );
+    if ( counters->mismatches[ 2 ] > 0 )
+        KOutMsg( "%uG", counters->mismatches[ 2 ] );
+    if ( counters->mismatches[ 3 ] > 0 )
+        KOutMsg( "%uT", counters->mismatches[ 3 ] );
+    if ( counters->inserts > 0 )
+    {
+        KOutMsg( "%uI%s", counters->inserts, counters->ins.data );
+    }
+    if ( counters->deletes > 0 )
+    {
+        KOutMsg( "%uD%s", counters->deletes, counters->del.data );
+    }
+    KOutMsg( "\n" );
+}
+
+static rc_t walk_counter_position( ReferenceIterator *ref_iter,
+                                   const char * refname,
+                                   pileup_counters * counters )
+{
+    INSDC_coord_zero pos;
+    uint32_t depth;
+    INSDC_4na_bin base;
+
+    rc_t rc = ReferenceIteratorPosition ( ref_iter, &pos, &depth, &base );
+    if ( rc != 0 )
+    {
+        if ( GetRCState( rc ) != rcDone )
+        {
+            LOGERR( klogInt, rc, "ReferenceIteratorNextPos() failed" );
+        }
+    }
+    else if ( depth > 0 )
+    {
+        const PlacementRecord *rec;
+        rc_t rc1 = ReferenceIteratorNextPlacement ( ref_iter, &rec );
+        clear_counters( counters );
+        while ( rc1 == 0 )
+        {
+            walk_counter_state( ref_iter, counters );
+            rc1 = ReferenceIteratorNextPlacement ( ref_iter, &rec );
+        }
+
+        if ( GetRCState( rc1 ) == rcDone ) { rc = 0; } else { rc = rc1; }
+        if ( rc == 0 )
+        {
+            print_counter_line( refname, pos, base, depth, counters );
+        }
+    } 
+    return rc;
+}
+
+
+static rc_t walk_just_counters( ReferenceIterator *ref_iter,
+                                const char * refname,
+                                bool skip_empty )
+{
+    pileup_counters counters;
+    rc_t rc = prepare_counters( &counters );
+    if ( rc == 0 )
+    {
+        while ( rc == 0 )
+        {
+            rc = Quitting ();
+            if ( rc == 0 )
+            {
+                /* this is the 2nd level of walking the reference-iterator: 
+                   visiting each position (that has alignments) on this reference */
+                rc = ReferenceIteratorNextPos ( ref_iter, skip_empty );
+                if ( rc != 0 )
+                {
+                    if ( GetRCState( rc ) != rcDone )
+                    {
+                        LOGERR( klogInt, rc, "ReferenceIteratorNextPos() failed" );
+                    }
+                }
+                else
+                {
+                    rc = walk_counter_position( ref_iter, refname, &counters );
+                    if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+                }
+            }
+        }
+        finish_counters( &counters );
+    }
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+enum { fsm_INIT = 0, fsm_DATA, fsm_GAP1, fsm_GAP2 };
+
+typedef struct fsm_context fsm_context;
+struct fsm_context
+{
+    uint32_t state;
+    const char * refname;
+    INSDC_coord_zero start;
+    INSDC_coord_zero end;
+};
+
+
+static void fsm_initialize( fsm_context * ctx, const char * refname )
+{
+    ctx->state = fsm_INIT;
+    ctx->refname = refname;
+    ctx->start = 0;
+    ctx->end = 0;
+}
+
+static void fsm_finalize( fsm_context * ctx, INSDC_coord_zero pos )
+{
+    switch( ctx->state )
+    {
+        case fsm_DATA : ;
+        case fsm_GAP1 : KOutMsg( "%s:%u-%u\n", ctx->refname, ctx->start, pos ); break;
+    }
+}
+
+/* transition into state 'fsm_DATA' */
+static void fsm_data( fsm_context * ctx, INSDC_coord_zero pos )
+{
+    switch( ctx->state )
+    {
+        case fsm_INIT : ;
+        case fsm_GAP2 : ctx->start = pos; break;
+    }
+    ctx->state = fsm_DATA;
+}
+
+/* transition into state 'fsm_GAP1' */
+static void fsm_gap1( fsm_context * ctx, INSDC_coord_zero pos )
+{
+    if ( ctx->state == fsm_DATA )
+    {
+        ctx->end = pos;
+    }
+    ctx->state = fsm_GAP1;
+}
+
+/* transition into state 'fsm_GAP2' */
+static void fsm_gap2( fsm_context * ctx )
+{
+    if ( ctx->state == fsm_GAP1 )
+    {
+        KOutMsg( "%s:%u-%u\n", ctx->refname, ctx->start, ctx->end );
+    }
+    ctx->state = fsm_GAP2;
+}
+
+
+static void fsm_run( fsm_context * ctx, uint32_t depth, INSDC_coord_zero pos, uint32_t maxgap )
+{
+    switch( ctx->state )
+    {
+        case fsm_INIT : if ( depth > 0 )
+                            fsm_data( ctx, pos );
+                        else
+                            fsm_gap2( ctx );
+                        break;
+
+        case fsm_DATA : if ( depth == 0 )
+                            fsm_gap1( ctx, pos );
+                        break;
+
+        case fsm_GAP1 : if ( ( pos - ctx->end ) > maxgap )
+                            fsm_gap2( ctx );
+                        if ( depth > 0 )
+                            fsm_data( ctx, pos );
+                        break;
+
+        case fsm_GAP2 : if ( depth > 0 )
+                            fsm_data( ctx, pos );
+                        break;
+    }
+
+}
+
+#if 0
+static void fsm_show( fsm_context * ctx, INSDC_coord_zero pos )
+{
+    switch( ctx->state )
+    {
+        case fsm_INIT : KOutMsg( "[%u].INIT\n", pos ); break;
+        case fsm_DATA : KOutMsg( "[%u].DATA\n", pos ); break;
+        case fsm_GAP1 : KOutMsg( "[%u].GAP1\n", pos ); break;
+        case fsm_GAP2 : KOutMsg( "[%u].GAP2\n", pos ); break;
+    }
+}
+#endif
+
+static rc_t walk_and_detect( ReferenceIterator *ref_iter,
+                             const char * refname, uint32_t maxgap )
+{
+    rc_t rc = 0;
+    INSDC_coord_zero pos;
+
+    /* here we have a little FSM with these states: INIT, DATA, GAP1, GAP2 */
+    fsm_context ctx;
+    fsm_initialize( &ctx, refname );
+    while ( rc == 0 )
+    {
+        rc = Quitting ();
+        if ( rc == 0 )
+        {
+            /* this is the 2nd level of walking the reference-iterator: 
+               visiting each position (that has alignments) on this reference */
+            rc = ReferenceIteratorNextPos ( ref_iter, true );
+            if ( rc != 0 )
+            {
+                if ( GetRCState( rc ) != rcDone )
+                {
+                    LOGERR( klogInt, rc, "ReferenceIteratorNextPos() failed" );
+                }
+            }
+            else
+            {
+                uint32_t depth;
+                rc = ReferenceIteratorPosition ( ref_iter, &pos, &depth, NULL );
+                if ( rc == 0 )
+                {
+                    fsm_run( &ctx, depth, pos, maxgap );
+                    /* fsm_show( &ctx, pos ); */
+                }
+                if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+            }
+        }
+    }
+    fsm_finalize( &ctx, pos );
+    return 0;
+}
+
+
+/* =========================================================================================== */
+
+
+static rc_t walk_ref_iter( ReferenceIterator *ref_iter, pileup_options *options )
+{
+    rc_t rc = 0;
+    while( rc == 0 )
+    {
+        /* this is the 1st level of walking the reference-iterator: 
+           visiting each (requested) reference */
+        struct ReferenceObj const * refobj;
+
+        rc = ReferenceIteratorNextReference( ref_iter, NULL, NULL, &refobj );
+        if ( rc == 0 )
+        {
+            if ( refobj != NULL )
+            {
+                const char * refname = NULL;
+                if ( options->use_seq_name )
+                    rc = ReferenceObj_Name( refobj, &refname );
+                else
+                    rc = ReferenceObj_SeqId( refobj, &refname );
+                if ( rc == 0 )
+                {
+                    switch( options->output_mode )
+                    {
+                        case sra_pileup_samtools : rc = walk_reference( ref_iter, refname, options );
+                                                   break;
+
+                        case sra_pileup_counters : rc = walk_just_counters( ref_iter, refname, true );
+                                                   break;
+
+                        case sra_pileup_detect : rc = walk_and_detect( ref_iter, refname, 200 );
+                                                 break;
+
+                        default : KOutMsg( "unknown output-mode '%u'\n", options->output_mode );
+                                  break;
+
+                    }
+                    if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+                }
+                else
+                {
+                    if ( options->use_seq_name )
+                    {
+                        LOGERR( klogInt, rc, "ReferenceObj_Name() failed" );
+                    }
+                    else
+                    {
+                        LOGERR( klogInt, rc, "ReferenceObj_SeqId() failed" );
+                    }
+                }
+            }
+        }
+        else
+        {
+            if ( GetRCState( rc ) != rcDone )
+            {
+                LOGERR( klogInt, rc, "ReferenceIteratorNextReference() failed" );
+            }
+        }
+    }
+    if ( GetRCState( rc ) == rcDone ) { rc = 0; }
+    if ( GetRCState( rc ) == rcCanceled ) { rc = 0; }
+    /* RC ( rcExe, rcProcess, rcExecuting, rcProcess, rcCanceled ); */
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+
+static rc_t add_quality_and_orientation( const VTable *tbl, const VCursor ** cursor, bool omit_qualities )
+{
+    rc_t rc = VTableCreateCursorRead ( tbl, cursor );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "VTableCreateCursorRead() failed" );
+    }
+
+    if ( rc == 0 && !omit_qualities )
+    {
+        uint32_t quality_idx;
+        rc = VCursorAddColumn ( *cursor, &quality_idx, COL_QUALITY );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VCursorAddColumn(QUALITY) failed" );
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        uint32_t ref_orientation_idx;
+        rc = VCursorAddColumn ( *cursor, &ref_orientation_idx, COL_REF_ORIENTATION );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VCursorAddColumn(REF_ORIENTATION) failed" );
+        }
+    }
+
+    if ( rc == 0 )
+    {
+        uint32_t read_filter_idx;
+        rc = VCursorAddColumn ( *cursor, &read_filter_idx, COL_READ_FILTER );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VCursorAddColumn(READ_FILTER) failed" );
+        }
+    }
+    return rc;
+}
+
+
+static rc_t prepare_prim_cursor( const VDatabase *db, const VCursor ** cursor, bool omit_qualities )
+{
+    const VTable *tbl;
+    rc_t rc = VDatabaseOpenTableRead ( db, &tbl, "PRIMARY_ALIGNMENT" );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "VDatabaseOpenTableRead(PRIMARY_ALIGNMENT) failed" );
+    }
+    else
+    {
+        rc = add_quality_and_orientation( tbl, cursor, omit_qualities );
+        VTableRelease ( tbl );
+    }
+    return rc;
+}
+
+
+static rc_t prepare_sec_cursor( const VDatabase *db, const VCursor ** cursor, bool omit_qualities )
+{
+    const VTable *tbl;
+    rc_t rc = VDatabaseOpenTableRead ( db, &tbl, "SECONDARY_ALIGNMENT" );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "VDatabaseOpenTableRead(SECONDARY_ALIGNMENT) failed" );
+    }
+    else
+    {
+        rc = add_quality_and_orientation( tbl, cursor, omit_qualities );
+        VTableRelease ( tbl );
+    }
+    return rc;
+}
+
+
+static rc_t prepare_evidence_cursor( const VDatabase *db, const VCursor ** cursor, bool omit_qualities )
+{
+    const VTable *tbl;
+    rc_t rc = VDatabaseOpenTableRead ( db, &tbl, "EVIDENCE_ALIGNMENT" );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "VDatabaseOpenTableRead(EVIDENCE) failed" );
+    }
+    else
+    {
+        rc = add_quality_and_orientation( tbl, cursor, omit_qualities );
+        VTableRelease ( tbl );
+    }
+    return rc;
+}
+
+#if 0
+static void show_placement_params( const char * prefix, const ReferenceObj *refobj,
+                                   uint32_t start, uint32_t end )
+{
+    const char * name;
+    rc_t rc = ReferenceObj_SeqId( refobj, &name );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "ReferenceObj_SeqId() failed" );
+    }
+    else
+    {
+        KOutMsg( "prepare %s: <%s> %u..%u\n", prefix, name, start, end ) ;
+    }
+}
+#endif
+
+static rc_t CC prepare_section_cb( prepare_ctx * ctx, uint32_t start, uint32_t end )
+{
+    rc_t rc = 0;
+    INSDC_coord_len len;
+    if ( ctx->db == NULL || ctx->refobj == NULL )
+    {
+        rc = SILENT_RC ( rcApp, rcNoTarg, rcOpening, rcSelf, rcInvalid );
+        /* it is opened in prepare_db_table even if ctx->db == NULL */
+        PLOGERR(klogInt, (klogInt, rc, "failed to process $(path)",
+            "path=%s", ctx->path == NULL ? "input argument" : ctx->path));
+        ReportSilence();
+    }
+    else
+    {
+        rc = ReferenceObj_SeqLength( ctx->refobj, &len );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "ReferenceObj_SeqLength() failed" );
+        }
+        else
+        {
+            rc_t rc1 = 0, rc2 = 0, rc3 = 0;
+
+            if ( start == 0 ) start = 1;
+            if ( ( end == 0 )||( end > len + 1 ) )
+            {
+                end = ( len - start ) + 1;
+            }
+            /* depending on ctx->select prepare primary, secondary or both... */
+            if ( ctx->use_primary_alignments )
+            {
+                const VCursor * prim_align_cursor = NULL;
+                rc1 = prepare_prim_cursor( ctx->db, &prim_align_cursor, ctx->omit_qualities );
+                if ( rc1 == 0 )
+                {
+    /*                show_placement_params( "primary", ctx->refobj, start, end ); */
+                    rc1 = ReferenceIteratorAddPlacements ( ctx->ref_iter,       /* the outer ref-iter */
+                                                          ctx->refobj,          /* the ref-obj for this chromosome */
+                                                          start - 1,            /* start ( zero-based ) */
+                                                          end - start + 1,      /* length */
+                                                          NULL,                 /* ref-cursor */
+                                                          prim_align_cursor,    /* align-cursor */
+                                                          primary_align_ids,    /* which id's */
+                                                          ctx->spot_group );    /* what read-group */
+                    if ( rc1 != 0 )
+                    {
+                        LOGERR( klogInt, rc1, "ReferenceIteratorAddPlacements(prim) failed" );
+                    }
+                    VCursorRelease( prim_align_cursor );
+                }
+            }
+            if ( ctx->use_secondary_alignments )
+            {
+                const VCursor * sec_align_cursor = NULL;
+                rc2 = prepare_sec_cursor( ctx->db, &sec_align_cursor, ctx->omit_qualities );
+                if ( rc2 == 0 )
+                {
+    /*                show_placement_params( "secondary", ctx->refobj, start, end ); */
+                    rc2 = ReferenceIteratorAddPlacements ( ctx->ref_iter,       /* the outer ref-iter */
+                                                          ctx->refobj,          /* the ref-obj for this chromosome */
+                                                          start - 1,            /* start ( zero-based ) */
+                                                          end - start + 1,      /* length */
+                                                          NULL,                 /* ref-cursor */
+                                                          sec_align_cursor,     /* align-cursor */
+                                                          secondary_align_ids,  /* which id's */
+                                                          ctx->spot_group );    /* what read-group */
+                    if ( rc2 != 0 )
+                    {
+                        LOGERR( klogInt, rc2, "ReferenceIteratorAddPlacements(sec) failed" );
+                    }
+                    VCursorRelease( sec_align_cursor );
+                }
+            }
+
+            if ( ctx->use_evidence_alignments )
+            {
+                const VCursor * ev_align_cursor = NULL;
+                rc3 = prepare_evidence_cursor( ctx->db, &ev_align_cursor, ctx->omit_qualities );
+                if ( rc3 == 0 )
+                {
+    /*                show_placement_params( "evidende", ctx->refobj, start, end ); */
+                    rc3 = ReferenceIteratorAddPlacements ( ctx->ref_iter,       /* the outer ref-iter */
+                                                          ctx->refobj,          /* the ref-obj for this chromosome */
+                                                          start - 1,            /* start ( zero-based ) */
+                                                          end - start + 1,      /* length */
+                                                          NULL,                 /* ref-cursor */
+                                                          ev_align_cursor,      /* align-cursor */
+                                                          evidence_align_ids,   /* which id's */
+                                                          ctx->spot_group );    /* what read-group */
+                    if ( rc3 != 0 )
+                    {
+                        LOGERR( klogInt, rc3, "ReferenceIteratorAddPlacements(evidence) failed" );
+                    }
+                    VCursorRelease( ev_align_cursor );
+                }
+            }
+
+            if ( rc1 == SILENT_RC( rcAlign, rcType, rcAccessing, rcRow, rcNotFound ) )
+            { /* from allocate_populate_rec */
+                rc = rc1;
+            }
+            else if ( rc1 == 0 )
+                rc = 0;
+            else if ( rc2 == 0 )
+                rc = 0;
+            else if ( rc3 == 0 )
+                rc = 0;
+            else
+                rc = rc1;
+        }
+    }
+    return rc;
+}
+
+
+typedef struct foreach_arg_ctx
+{
+    pileup_options *options;
+    const VDBManager *vdb_mgr;
+    VSchema *vdb_schema;
+    ReferenceIterator *ref_iter;
+    BSTree *ranges;
+} foreach_arg_ctx;
+
+
+/* called for each source-file/accession */
+static rc_t CC on_argument( const char * path, const char * spot_group, void * data )
+{
+    rc_t rc = 0;
+    foreach_arg_ctx * ctx = ( foreach_arg_ctx * )data;
+    prepare_ctx prep;
+
+    prep.omit_qualities = ctx->options->omit_qualities;
+    prep.use_primary_alignments = ( ( ctx->options->cmn.tab_select & primary_ats ) == primary_ats );
+    prep.use_secondary_alignments = ( ( ctx->options->cmn.tab_select & secondary_ats ) == secondary_ats );
+    prep.use_evidence_alignments = ( ( ctx->options->cmn.tab_select & evidence_ats ) == evidence_ats );
+    prep.ref_iter = ctx->ref_iter;
+    prep.spot_group = spot_group;
+    prep.on_section = prepare_section_cb;
+    prep.data = NULL;
+    prep.path = path;
+
+    rc = prepare_ref_iter( &prep, ctx->vdb_mgr, ctx->vdb_schema, path, ctx->ranges );
+    if ( rc == 0 && prep.db == NULL )
+    {
+        rc = RC ( rcApp, rcNoTarg, rcOpening, rcSelf, rcInvalid );
+        LOGERR( klogInt, rc, "unsupported source" );
+    }
+    return rc;
+}
+
+
+static rc_t pileup_main( Args * args, pileup_options *options )
+{
+    foreach_arg_ctx arg_ctx;
+    pileup_callback_data cb_data;
+    KDirectory *dir;
+
+    /* (1) make the align-manager ( necessary to make a ReferenceIterator... ) */
+    rc_t rc = AlignMgrMakeRead ( &cb_data.almgr );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "AlignMgrMake() failed" );
+    }
+
+    cb_data.options = options;
+    arg_ctx.options = options;
+    arg_ctx.vdb_schema = NULL;
+
+    /* (2) make the reference-iterator */
+    if ( rc == 0 )
+    {
+        PlacementRecordExtendFuncs cb_block;
+
+        cb_block.data = &cb_data;
+        cb_block.destroy = NULL;
+        cb_block.populate = populate_tooldata;
+        cb_block.alloc_size = alloc_size;
+        cb_block.fixed_size = 0;
+
+        rc = AlignMgrMakeReferenceIterator ( cb_data.almgr, &arg_ctx.ref_iter, &cb_block, options->minmapq );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "AlignMgrMakeReferenceIterator() failed" );
+        }
+    }
+
+    /* (3) make a KDirectory ( necessary to make a vdb-manager ) */
+    if ( rc == 0 )
+    {
+        rc = KDirectoryNativeDir( &dir );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "KDirectoryNativeDir() failed" );
+        }
+    }
+
+    /* (4) make a vdb-manager */
+    if ( rc == 0 )
+    {
+        rc = VDBManagerMakeRead ( &arg_ctx.vdb_mgr, dir );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VDBManagerMakeRead() failed" );
+        }
+        else {
+            ReportSetVDBManager(arg_ctx.vdb_mgr);
+        }
+    }
+
+
+    /* (5) make a vdb-schema */
+    if ( rc == 0 )
+    {
+        rc = VDBManagerMakeSRASchema( arg_ctx.vdb_mgr, &arg_ctx.vdb_schema );
+        if ( rc != 0 )
+        {
+            LOGERR( klogInt, rc, "VDBManagerMakeSRASchema() failed" );
+        }
+        else if ( options->cmn.schema_file != NULL )
+        {
+            rc = VSchemaParseFile( arg_ctx.vdb_schema, options->cmn.schema_file );
+            if ( rc != 0 )
+            {
+                LOGERR( klogInt, rc, "VSchemaParseFile() failed" );
+            }
+        }
+    }
+
+    /* (5) loop through the given input-filenames and load the ref-iter with it's input */
+    if ( rc == 0 )
+    {
+        BSTree regions;
+        rc = init_ref_regions( &regions, args ); /* cmdline_cmn.c */
+        if ( rc == 0 )
+        {
+            bool empty = false;
+            check_ref_regions( &regions ); /* sanitize input... */
+            arg_ctx.ranges = ®ions;
+            rc = foreach_argument( args, dir, options->div_by_spotgrp, &empty, on_argument, &arg_ctx ); /* cmdline_cmn.c */
+            if ( empty )
+            {
+                Usage ( args );
+            }
+            free_ref_regions( &regions );
+        }
+    }
+
+    /* (6) walk the "loaded" ref-iterator ===> perform the pileup */
+    if ( rc == 0 )
+    {
+        /* ============================================== */
+        rc = walk_ref_iter( arg_ctx.ref_iter, options );
+        /* ============================================== */
+    }
+
+    if ( arg_ctx.vdb_mgr != NULL ) VDBManagerRelease( arg_ctx.vdb_mgr );
+    if ( arg_ctx.vdb_schema != NULL ) VSchemaRelease( arg_ctx.vdb_schema );
+    if ( dir != NULL ) KDirectoryRelease( dir );
+    if ( arg_ctx.ref_iter != NULL ) ReferenceIteratorRelease( arg_ctx.ref_iter );
+    if ( cb_data.almgr != NULL ) AlignMgrRelease ( cb_data.almgr );
+    return rc;
+}
+
+
+/* =========================================================================================== */
+
+rc_t CC KMain( int argc, char *argv [] )
+{
+    rc_t rc = KOutHandlerSet( write_to_FILE, stdout );
+    ReportBuildDate( __DATE__ );
+    if ( rc != 0 )
+    {
+        LOGERR( klogInt, rc, "KOutHandlerSet() failed" );
+    }
+    else
+    {
+        Args * args;
+
+        KLogHandlerSetStdErr();
+        rc = ArgsMakeAndHandle( &args, argc, argv, 2,
+            MyOptions, sizeof MyOptions / sizeof MyOptions [ 0 ],
+            CommonOptions_ptr(), CommonOptions_count() );
+        if ( rc == 0 )
+        {
+            rc = parse_inf_file( args ); /* cmdline_cmn.h */
+            if ( rc == 0 )
+            {
+                pileup_options options;
+                rc = get_pileup_options( args, &options );
+                if ( rc == 0 )
+                {
+                    if ( options.cmn.output_file != NULL )
+                    {
+                        rc = set_stdout_to( options.cmn.gzip_output,
+                                            options.cmn.bzip_output,
+                                            options.cmn.output_file,
+                                            32 * 1024 );
+                    }
+
+                    if ( rc == 0 )
+                    {
+                        if ( options.reref || options.rerefex )
+                        {
+                            rc = report_on_reference( args, options.rerefex ); /* reref.c */
+                        }
+                        else
+                        {
+                            /* ============================== */
+                            rc = pileup_main( args, &options );
+                            /* ============================== */
+                        }
+                    }
+
+                    if ( options.cmn.output_file != NULL )
+                        release_stdout_redirection();
+                }
+            }
+            ArgsWhack( args );
+        }
+    }
+
+    {
+        /* Report execution environment if necessary */
+        rc_t rc2 = ReportFinalize( rc );
+        if ( rc == 0 )
+            rc = rc2;
+    }
+    return rc;
+}
diff --git a/tools/sra-pileup/sra-pileup.vers b/tools/sra-pileup/sra-pileup.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/sra-pileup/sra-pileup.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/sra-sort/Makefile b/tools/sra-sort/Makefile
new file mode 100644
index 0000000..8125979
--- /dev/null
+++ b/tools/sra-sort/Makefile
@@ -0,0 +1,141 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/sra-sort
+
+include $(TOP)/build/Makefile.env
+include $(SRCDIR)/Makefile.$(COMP)
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+
+ifneq (win,$(OS))
+EXT_TOOLS += sra-sort
+endif	
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+#------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+	@ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(ALL_TOOLS): vers-includes
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# sra-sort
+#
+SRA_SORT_SRC = \
+	caps \
+	mem \
+	membank \
+	paged-membank \
+	paged-mmapbank \
+	except \
+	idx-mapping \
+	map-file \
+	col-pair \
+	row-set \
+	simple-row-set \
+	mapping-row-set \
+	sorting-row-set \
+	meta-pair \
+	dir-pair \
+	tbl-pair \
+	db-pair \
+	glob-poslen \
+	poslen-col-pair \
+	ref-alignid-col \
+	buff-writer \
+	id-mapper-col \
+	capture-first-half-aligned \
+	csra-tbl \
+	csra-pair \
+	run \
+	sra-sort \
+	xcheck-ref-align
+
+SRA_SORT_OBJ = \
+	$(addsuffix .$(OBJX),$(SRA_SORT_SRC))
+
+SRA_SORT_LIB = \
+	-lkapp \
+	$(UPDATE_SCHEMA_LIBS) \
+	-dalign-reader \
+	-dksrch \
+	-ssraschema \
+	-lwvdb \
+	-lwkdb \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
+	-lkfg \
+	-lkfs \
+	-lkproc \
+	-lklib \
+	-lm
+
+$(BINDIR)/sra-sort: $(SRA_SORT_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(SRA_SORT_LIB)
diff --git a/tools/sra-sort/Makefile.cc b/tools/sra-sort/Makefile.cc
new file mode 100644
index 0000000..ca33e13
--- /dev/null
+++ b/tools/sra-sort/Makefile.cc
@@ -0,0 +1,24 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
diff --git a/tools/sra-sort/Makefile.clang b/tools/sra-sort/Makefile.clang
new file mode 100644
index 0000000..bad5e3a
--- /dev/null
+++ b/tools/sra-sort/Makefile.clang
@@ -0,0 +1,27 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+PED = -std=gnu99 -fgnu89-inline
+
diff --git a/tools/sra-sort/Makefile.gcc b/tools/sra-sort/Makefile.gcc
new file mode 100644
index 0000000..02182c4
--- /dev/null
+++ b/tools/sra-sort/Makefile.gcc
@@ -0,0 +1,27 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+PED = $(shell $(SRCDIR)/gcc-ped.sh -std=gnu99 -fgnu89-inline)
+
diff --git a/tools/sra-sort/Makefile.vc++ b/tools/sra-sort/Makefile.vc++
new file mode 100644
index 0000000..ca33e13
--- /dev/null
+++ b/tools/sra-sort/Makefile.vc++
@@ -0,0 +1,24 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
diff --git a/tools/sra-sort/buff-writer.c b/tools/sra-sort/buff-writer.c
new file mode 100644
index 0000000..22af68a
--- /dev/null
+++ b/tools/sra-sort/buff-writer.c
@@ -0,0 +1,785 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct BufferedPairColWriter BufferedPairColWriter;
+#define COLWRITER_IMPL BufferedPairColWriter
+
+#include "buff-writer.h"
+#include "row-set.h"
+#include "idx-mapping.h"
+#include "map-file.h"
+#include "csra-tbl.h"
+#include "col-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <klib/sort.h>
+#include <klib/rc.h>
+#include <kdb/btree.h>
+
+#include <string.h>
+#include <bitstr.h>
+
+FILE_ENTRY ( buff-writer );
+
+
+/*--------------------------------------------------------------------------
+ * BufferedPairColWriter
+ */
+struct BufferedPairColWriter
+{
+    ColumnWriter dad;
+
+    cSRATblPair *tbl;   /* borrowed reference to table        */
+
+    ColumnWriter *cw;   /* where to write data                */
+
+    MemBank *mbank;     /* paged memory bank                  */
+#define MAX_VOCAB_SIZE 32*1024
+    /*** introducing VOCABULARY value->id->vocab_value ***/
+    KBTree	*vocab_key2id;
+    const void	*vocab_id2val[MAX_VOCAB_SIZE];
+    uint32_t	vocab_cnt;
+    /******************************************************/
+    MapFile *idx;       /* optional row-id mapping index      */
+
+    union
+    {
+        /* for mapping writers */
+        struct
+        {
+            union
+            {
+                /* "immediate" data - size <= 64 bits and row_len == 1 */
+                uint64_t imm;
+
+                /* "indirect" data - stored in "mbank" */
+                void *ptr;
+
+            } val;
+            int64_t new_id;
+        } *data;
+
+        /* standard ( old_id, new_id ) mapping pair */
+        IdxMapping *map;
+
+        /* for non-mapping writers */
+        int64_t *ids;
+
+    } u;
+
+    /* for non-mapping writers - new=>old ord */
+    uint32_t *ord;
+
+    size_t num_items;   /* total number of items              */
+    size_t cur_item;    /* index of currently available item  */
+    size_t num_immed;   /* number of immediate items written  */
+
+    uint32_t elem_bits; /* number of bits of each element     */
+    uint32_t min_row_len;
+    uint32_t max_row_len;
+};
+
+static
+void BufferedPairColWriterWhack ( BufferedPairColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    MapFileRelease ( self -> idx, ctx );
+    MemBankRelease ( self -> mbank, ctx );
+    if(self -> vocab_key2id) KBTreeRelease  ( self -> vocab_key2id );
+    ColumnWriterRelease ( self -> cw, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+const char *BufferedPairColWriterFullSpec ( const BufferedPairColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    return ColumnWriterFullSpec ( self -> cw, ctx );
+}
+
+static
+void BufferedPairColWriterPreCopy ( BufferedPairColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    ColumnWriterPreCopy ( self -> cw, ctx );
+}
+
+static
+void BufferedPairColWriterPostCopy ( BufferedPairColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( self -> mbank != NULL )
+    {
+        MemBankRelease ( self -> mbank, ctx );
+        self -> mbank = NULL;
+    }
+    if ( self -> vocab_key2id != NULL )
+    {
+	KBTreeRelease  ( self -> vocab_key2id );
+	self -> vocab_key2id = 0;
+	self -> vocab_cnt = 0;
+    }
+
+    ColumnWriterPostCopy ( self -> cw, ctx );
+}
+
+static
+void BufferedPairColWriterMapValues ( BufferedPairColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    size_t i;
+    int64_t id;
+    bool assign_ids = ( bool ) self -> dad . align [ 0 ];
+
+    if ( self -> elem_bits != 64 )
+    {
+        rc = RC ( rcExe, rcColumn, rcWriting, rcType, rcIncorrect );
+        INTERNAL_ERROR ( rc, "column '%s' does not have 64-bit elements and cannot be mapped",
+            ColumnWriterFullSpec ( self -> cw, ctx ) );
+        return;
+    }
+
+    if ( self -> num_immed != self -> num_items )
+    {
+#if DISALLOW_VARIABLE_ROW_LENGTH_MAPPING
+        rc = RC ( rcExe, rcColumn, rcWriting, rcType, rcIncorrect );
+        INTERNAL_ERROR ( rc, "column '%s' does not have fixed row-length of 1 and cannot be mapped",
+            ColumnWriterFullSpec ( self -> cw, ctx ) );
+#else
+        const uint32_t *base;
+        /* detect case when we have ids that were written
+           sparsely ( as NULLs ) rather than densely ( zeros for NULL ). */
+        if ( self -> min_row_len == 0 && self -> max_row_len == 1 )
+        {
+            for ( i = 0; i < self -> num_items; ++ i )
+            {
+                base = self -> u . data [ i ] . val . ptr;
+                if ( base != NULL )
+                    memcpy ( & self -> u . data [ i ] . val . imm, & base [ 1 ], 8 );
+            }
+
+            MemBankRelease ( self -> mbank, ctx );
+            self -> mbank = NULL;
+            self -> num_immed = self -> num_items;
+            self -> min_row_len = 1;
+	    
+        }
+        else
+        {
+            STATUS ( 3, "randomly mapping old=>new values" );
+            for ( i = 0; i < self -> num_immed; ++ i )
+            {
+                id = self -> u . data [ i ] . val . imm;
+                if ( id != 0 )
+                {
+                    uint32_t *base;
+                    ON_FAIL ( base = MemBankAlloc ( self -> mbank, ctx, sizeof id + sizeof * base, false ) )
+                        return;
+                    ON_FAIL ( id = MapFileMapSingleOldToNew ( self -> idx, ctx, id, assign_ids ) )
+                        return;
+                    memcpy ( & base [ 1 ], & id, sizeof id );
+                    base [ 0 ] = 1;
+                    self -> u . data [ i ] . val . ptr = base;
+                }
+            }
+            for ( self -> num_immed = 0; i < self -> num_items; ++ i )
+            {
+                base = self -> u . data [ i ] . val . ptr;
+                if ( base != NULL )
+                {
+                    uint32_t j, row_len = base [ 0 ];
+                    int64_t *ids = ( int64_t* ) & base [ 1 ];
+                    for ( j = 0; j < row_len; ++ j )
+                    {
+                        id = ids [ j ];
+                        if ( id != 0 )
+                        {
+                            ON_FAIL ( ids [ j ] = MapFileMapSingleOldToNew ( self -> idx, ctx, id, assign_ids ) )
+                                return;
+                        }
+                    }
+                }
+            }
+            return;
+        }
+#endif
+    }
+
+    STATUS ( 3, "sorting %,u ( data, new_id ) map entries on immediate value", self -> num_items );
+#if USE_OLD_KSORT
+    ksort ( self -> u . map, self -> num_items, sizeof self -> u . map [ 0 ], IdxMappingCmpOld, ( void* ) ctx );
+#else
+    IdxMappingSortOld ( self -> u . map, ctx, self -> num_items );
+#endif
+
+    STATUS ( 3, "mapping old=>new values" );
+    for ( i = 0; i < self -> num_items; ++ i )
+    {
+        id = self -> u . map [ i ] . old_id;
+        if ( id != 0 )
+        {
+            ON_FAIL ( self -> u . map [ i ] . old_id = MapFileMapSingleOldToNew ( self -> idx, ctx, id, assign_ids ) )
+                break;
+        }
+    }
+}
+
+static
+void BufferedPairColWriterWriteMapped ( BufferedPairColWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    uint32_t *base;
+    size_t i, row_bytes;
+    const size_t pg_size = 256 * 1024;
+
+    /* detect first write */
+    if ( self -> u . data == NULL )
+    {
+        /* get map and content length from table */
+        assert ( self -> idx != NULL );
+        ON_FAIL ( self -> u . map = RowSetIteratorGetIdxMapping ( self -> tbl -> rsi, ctx, & self -> num_items ) )
+        {
+            ANNOTATE ( "failed to get ( old_id, new_id ) map for column '%s'", ColumnWriterFullSpec ( self -> cw, ctx ) );
+            return;
+        }
+
+        /* require elem_bits to be constant for column */
+        self -> elem_bits = elem_bits;
+
+        /* OPTIMIZATION:
+           IFF elem_bits <= 64 and row_len == 1, store in union
+           otherwise, use membank. This requires that if row_len
+           ever changes, we have to recover. */
+        if ( elem_bits > 64 || row_len != 1 )
+        {
+            /* create a memory bank */
+            /* TBD - used configured page size rather than 256K */
+            ON_FAIL ( self -> mbank = MemBankMakePaged ( ctx, -1L, pg_size ) )
+                return;
+        }
+
+        /* initialize min/max */
+        self -> min_row_len = self -> max_row_len = row_len;
+    }
+
+    /* elem_bits should be constant */
+    assert ( self -> elem_bits == elem_bits );
+
+    /* handle optimized case */
+    if ( self -> mbank == NULL )
+    {
+        /* first, detect a change */
+        if ( row_len == 1 )
+        {
+            /* continue on optimized case */
+            row_bytes = ( ( size_t ) elem_bits + 7 ) >> 3;
+            if ( boff != 0 )
+            {
+                bitcpy ( & self -> u . data [ self -> cur_item ] . val . imm,
+                    0, data, boff, ( bitsz_t ) elem_bits * row_len );
+            }
+            else
+            {
+                memcpy ( & self -> u . data [ self -> cur_item ] . val . imm, data, row_bytes );
+            }
+
+            /* record another immediate row */
+            ++ self -> num_immed;
+
+            /* detect last row */
+            if ( ++ self -> cur_item < self -> num_items )
+                return;
+
+            /* map values */
+            TRY ( BufferedPairColWriterMapValues ( self, ctx ) )
+            {
+                /* need to resort map on new_id */
+                STATUS ( 3, "sorting %,u ( data, new_id ) map entries on new_id", self -> num_items );
+#if USE_OLD_KSORT
+                ksort ( self -> u . map, self -> num_items, sizeof self -> u . map [ 0 ], IdxMappingCmpNew, ( void* ) ctx );
+#else
+                IdxMappingSortNew ( self -> u . map, ctx, self -> num_items );
+#endif
+
+                /* write all rows to column writer */
+                STATUS ( 3, "writing cell data to '%s'", ColumnWriterFullSpec ( self -> cw, ctx ) );
+                for ( i = 0; i < self -> num_items; ++ i )
+                {
+                    /* write out row */
+                    ON_FAIL ( ColumnWriterWrite ( self -> cw, ctx, self -> elem_bits, & self -> u . data [ i ] . val . imm, 0, 1 ) )
+                        break;
+                }
+            }
+
+            /* forget about map */
+            self -> u . map = NULL;
+            self -> cur_item = self -> num_items = self -> num_immed = 0;
+            self -> elem_bits = 0;
+
+            return;
+        }
+
+        /* need to recover */
+        ON_FAIL ( self -> mbank = MemBankMakePaged ( ctx, -1L, pg_size ) )
+            return;
+    }
+
+    /* update min/max row-len */
+    if ( row_len < self -> min_row_len )
+        self -> min_row_len = row_len;
+    else if ( row_len > self -> max_row_len )
+        self -> max_row_len = row_len;
+
+    /* handle zero-length rows specially */
+    if ( row_len == 0 )
+        self -> u . data [ self -> cur_item ] . val . ptr = NULL;
+    else
+    {
+        /* allocate space for the row */
+        row_bytes = ( ( size_t ) elem_bits * row_len + 7 ) >> 3;
+        TRY ( base = MemBankAlloc ( self -> mbank, ctx, row_bytes + sizeof row_len, false ) )
+        {
+            /* copy it in */
+            memcpy ( base, & row_len, sizeof row_len );
+            if ( boff != 0 )
+                bitcpy ( & base [ 1 ], 0, data, boff, ( bitsz_t ) elem_bits * row_len );
+            else
+                memcpy ( & base [ 1 ], data, row_bytes );
+
+            /* remember its location in the map */
+            self -> u . data [ self -> cur_item ] . val . ptr = base;
+
+            /* remember the last input pointer */
+        }
+    }
+
+    if ( ! FAILED () )
+    {
+        /* detect last row */
+        if ( ++ self -> cur_item == self -> num_items )
+        {
+            /* map values */
+            TRY ( BufferedPairColWriterMapValues ( self, ctx ) )
+            {
+                /* need to resort map on new_id */
+                STATUS ( 3, "sorting %,u ( data, new_id ) map entries on new_id", self -> num_items );
+#if USE_OLD_KSORT
+                ksort ( self -> u . map, self -> num_items, sizeof self -> u . map [ 0 ], IdxMappingCmpNew, ( void* ) ctx );
+#else
+                IdxMappingSortNew ( self -> u . map, ctx, self -> num_items );
+#endif
+
+                /* write all rows to column writer */
+                STATUS ( 3, "writing cell data to '%s'", ColumnWriterFullSpec ( self -> cw, ctx ) );
+                for ( i = 0; i < self -> num_immed; ++ i )
+                {
+                    /* write out row */
+                    ON_FAIL ( ColumnWriterWrite ( self -> cw, ctx, self -> elem_bits, & self -> u . data [ i ] . val . imm, 0, 1 ) )
+                        break;
+                }
+                for ( ; ! FAILED () && i < self -> num_items; ++ i )
+                {
+                    /* write out row */
+                    base = self -> u . data [ i ] . val . ptr;
+                    if ( base == NULL )
+                        ColumnWriterWrite ( self -> cw, ctx, self -> elem_bits, "", 0, 0 );
+                    else
+                        ColumnWriterWrite ( self -> cw, ctx, self -> elem_bits, & base [ 1 ], 0, base [ 0 ] );
+                }
+            }
+
+            /* drop the mem-bank */
+            MemBankRelease ( self -> mbank, ctx );
+            self -> mbank = NULL;
+
+            /* forget about map */
+            self -> u . data = NULL;
+            self -> cur_item = self -> num_items = self -> num_immed = 0;
+            self -> elem_bits = 0;
+        }
+    }
+}
+
+static
+void BufferedPairColWriterWriteUnmapped ( BufferedPairColWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    size_t i, j, row_bytes;
+    const size_t pg_size = 256 * 1024;
+
+    /* detect first write */
+    if ( self -> u . data == NULL )
+    {
+        /* get ids, ord and content length from table */
+        assert ( self -> idx == NULL );
+        ON_FAIL ( self -> u . ids = RowSetIteratorGetSourceIds ( self -> tbl -> rsi, ctx, & self -> ord, & self -> num_items ) )
+        {
+            ANNOTATE ( "failed to get old_id, ord maps for column '%s'", ColumnWriterFullSpec ( self -> cw, ctx ) );
+            return;
+        }
+
+        /* require elem_bits to be constant for column */
+        self -> elem_bits = elem_bits;
+
+        /* OPTIMIZATION:
+           IFF elem_bits <= 64 and row_len == 1, store in union
+           otherwise, use membank. This requires that if row_len
+           ever changes, we have to recover. */
+        if ( elem_bits > 64 || row_len != 1 )
+        {
+	    rc_t rc=KBTreeMakeUpdate(&self->vocab_key2id, NULL, 100*1024*1024,
+                              false, kbtOpaqueKey,
+                              1, 1024, sizeof ( uint32_t ),
+                              NULL
+                              );
+	    if(rc != 0) self->vocab_key2id = NULL;
+	    self->vocab_cnt=0;
+            /* create a memory bank */
+            /* TBD - used configured page size rather than 256K */
+            ON_FAIL ( self -> mbank = MemBankMakePaged ( ctx, -1L, pg_size ) )
+               return;
+        }
+        /* initialize min/max */
+        self -> min_row_len = self -> max_row_len = row_len;
+    }
+
+    /* elem_bits should be constant */
+    assert ( self -> elem_bits == elem_bits );
+
+    /* handle optimized case */
+    if ( self -> mbank == NULL )
+    {
+        /* first, detect a change */
+        if ( row_len == 1 )
+        {
+            /* continue on optimized case */
+            row_bytes = ( ( size_t ) elem_bits + 7 ) >> 3;
+            if ( boff != 0 )
+            {
+                bitcpy ( & self -> u . ids [ self -> cur_item ],
+                    0, data, boff, ( bitsz_t ) elem_bits * row_len );
+            }
+            else
+            {
+                memcpy ( & self -> u . ids [ self -> cur_item ], data, row_bytes );
+            }
+
+            /* record another immediate row */
+            ++ self -> num_immed;
+
+            /* detect last row */
+            if ( ++ self -> cur_item < self -> num_items )
+                return;
+
+            /* write all rows to column writer */
+            STATUS ( 3, "writing cell data to '%s'", ColumnWriterFullSpec ( self -> cw, ctx ) );
+            for ( i = 0; i < self -> num_items; ++ i )
+            {
+                /* map to new order */
+                j = self -> ord [ i ];
+
+                /* write out row */
+                ON_FAIL ( ColumnWriterWrite ( self -> cw, ctx, self -> elem_bits, & self -> u . ids [ j ], 0, 1 ) )
+                    break;
+            }
+
+            /* forget about map */
+            self -> u . ids = NULL;
+            self -> ord = NULL;
+            self -> cur_item = self -> num_items = self -> num_immed = 0;
+            self -> elem_bits = 0;
+
+            return;
+        }
+
+        /* need to recover */
+	{
+	    rc_t rc=KBTreeMakeUpdate(&self->vocab_key2id, NULL, 100*1024*1024,
+                              false, kbtOpaqueKey,
+                              1, 1024, sizeof ( uint32_t ),
+                              NULL
+                              );
+	    if(rc != 0) self->vocab_key2id = NULL;
+	    self->vocab_cnt=0;
+            /* create a memory bank */
+            /* create a memory bank */
+            /* TBD - used configured page size rather than 256K */
+            ON_FAIL ( self -> mbank = MemBankMakePaged ( ctx, -1L, pg_size ) )
+               return;
+	}
+    }
+
+    /* update min/max row-len */
+    if ( row_len < self -> min_row_len )
+        self -> min_row_len = row_len;
+    else if ( row_len > self -> max_row_len )
+        self -> max_row_len = row_len;
+
+    /* handle zero-length rows specially */
+    if ( row_len == 0 ){
+        self -> u . ids [ self -> cur_item ] = 0;
+    } else {
+    	uint32_t *base = NULL; 
+        row_bytes = ( ( size_t ) elem_bits * row_len + 7 ) >> 3;
+	if(self -> vocab_key2id){
+		rc_t rc;
+		bool wasInserted;
+		uint64_t tmp_id=self -> vocab_cnt;
+		if( self -> vocab_cnt < sizeof(self -> vocab_id2val)/sizeof(self -> vocab_id2val[0])){
+			rc = KBTreeEntry(self -> vocab_key2id, &tmp_id, &wasInserted, data, row_bytes);
+		} else {
+			rc = KBTreeFind (self -> vocab_key2id, &tmp_id, data, row_bytes);
+			if(rc == 0) wasInserted=false;
+		}
+		if(rc == 0){ /*** either entered or found **/
+			if(wasInserted){/** allocate and remember in vocabulary ***/
+				/* allocate space for the row */
+				TRY ( base = MemBankAlloc ( self -> mbank, ctx, row_bytes + sizeof row_len, false ) )
+				{
+				    /* copy it in */
+				    base[0] = row_len;
+				    if ( boff != 0 ) bitcpy ( & base [ 1 ], 0, data, boff, ( bitsz_t ) elem_bits * row_len );
+				    else memcpy ( & base [ 1 ], data, row_bytes );
+				    self -> vocab_id2val[self -> vocab_cnt++] = base; 
+				}
+			} else { /** get from vocabulary **/
+				assert(tmp_id < self -> vocab_cnt);
+				base = (uint32_t*)self -> vocab_id2val[tmp_id];
+			}
+		}
+		rc = 0;
+	}
+	if(base == NULL){
+		TRY ( base = MemBankAlloc ( self -> mbank, ctx, row_bytes + sizeof row_len, false ) )
+		{
+		    /* copy it in */
+		    base[0] = row_len;
+		    if ( boff != 0 )
+			bitcpy ( & base [ 1 ], 0, data, boff, ( bitsz_t ) elem_bits * row_len );
+		    else
+			memcpy ( & base [ 1 ], data, row_bytes );
+		}
+
+	}
+	/* remember base location in the map */
+	self -> u . ids [ self -> cur_item ] = ( int64_t ) ( size_t ) base;
+	/* remember the last input pointer */
+    }
+
+    if ( ! FAILED () )
+    {
+        /* detect last row */
+        if ( ++ self -> cur_item == self -> num_items )
+        {
+            /* write all rows to column writer */
+	    uint32_t *last_base=NULL;
+	    uint32_t   cnt=0;
+            STATUS ( 3, "writing cell data to '%s' num_items=%ld vocab_size=%d num_immed=%d", ColumnWriterFullSpec ( self -> cw, ctx ), self -> num_items, self ->vocab_cnt, self -> num_immed );
+            for ( i = 0; ! FAILED () && i < self -> num_items; ++ i )
+            {
+                /* map to new order */
+                j = self -> ord [ i ];
+                if ( j < self -> num_immed ){
+		    if(cnt > 0){ /*** flush accumulated count ***/
+			if(last_base==NULL) ColumnWriterWriteStatic(self->cw,ctx,self->elem_bits,           "",0,           0,cnt);
+			else		    ColumnWriterWriteStatic(self->cw,ctx,self->elem_bits,&last_base[1],0,last_base[0],cnt);
+			last_base=NULL;
+			cnt=0;
+		    }
+                    ColumnWriterWrite ( self -> cw, ctx, self -> elem_bits, & self -> u . ids [ j ], 0, 1 );
+                } else {
+                    /* accumulate repeated rows */
+                    void* ptr = (void*)(size_t)self->u.ids [ j ];
+		    if (cnt == 0){
+			cnt=1;
+			last_base = ptr;
+		    } else if (ptr == last_base){
+			cnt++;
+		    } else {
+			if(last_base==NULL) ColumnWriterWriteStatic(self->cw,ctx,self->elem_bits,           "",0,           0,cnt);
+			else		    ColumnWriterWriteStatic(self->cw,ctx,self->elem_bits,&last_base[1],0,last_base[0],cnt);
+			last_base = ptr;
+			cnt=1;
+		    }
+                }
+	   }
+	   if(cnt > 0){ /*** flush accumulated count ***/
+		if(last_base==NULL) ColumnWriterWriteStatic(self->cw,ctx,self->elem_bits,           "",0,           0,cnt);
+		else		    ColumnWriterWriteStatic(self->cw,ctx,self->elem_bits,&last_base[1],0,last_base[0],cnt);
+            }
+            /* drop the mem-bank */
+            MemBankRelease ( self -> mbank, ctx );
+            self -> mbank = NULL;
+
+            /* forget about map */
+            self -> u . ids = NULL;
+            self -> ord = NULL;
+            self -> cur_item = self -> num_items = self -> num_immed = 0;
+            self -> elem_bits = 0;
+
+            /* cleanup vocabulary */
+            if(self -> vocab_key2id ) {
+                KBTreeRelease  ( self -> vocab_key2id );
+                self -> vocab_key2id = 0;
+            }
+            self -> vocab_cnt = 0;
+
+        }
+    }
+}
+
+static
+void BufferedPairColWriterWriteStatic ( BufferedPairColWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len, uint64_t count )
+{
+    FUNC_ENTRY ( ctx );
+    rc_t rc = RC ( rcExe, rcColumn, rcWriting, rcType, rcIncorrect );
+    INTERNAL_ERROR ( rc, "writing to a non-static column" );
+}
+
+
+static
+void BufferedPairColWriterCommit ( BufferedPairColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    ColumnWriterCommit ( self -> cw, ctx );
+}
+
+
+struct ColumnWriter_vt UnmappedBufferedPairColWriter_vt =
+{
+    BufferedPairColWriterWhack,
+    BufferedPairColWriterFullSpec,
+    BufferedPairColWriterPreCopy,
+    BufferedPairColWriterPostCopy,
+    BufferedPairColWriterWriteUnmapped,
+    BufferedPairColWriterWriteStatic,
+    BufferedPairColWriterCommit
+};
+
+
+struct ColumnWriter_vt MappedBufferedPairColWriter_vt =
+{
+    BufferedPairColWriterWhack,
+    BufferedPairColWriterFullSpec,
+    BufferedPairColWriterPreCopy,
+    BufferedPairColWriterPostCopy,
+    BufferedPairColWriterWriteMapped,
+    BufferedPairColWriterWriteStatic,
+    BufferedPairColWriterCommit
+};
+
+
+/*--------------------------------------------------------------------------
+ * cSRATblPair
+ *  interface to pairing of source and destination tables
+ */
+
+/* MakeBufferedColumnWriter
+ *  make a wrapper that buffers all rows written
+ *  then sorts on flush
+ */
+ColumnWriter *cSRATblPairMakeBufferedColumnWriter ( cSRATblPair *self,
+    const ctx_t *ctx, ColumnWriter *writer )
+{
+    FUNC_ENTRY ( ctx );
+
+    BufferedPairColWriter *buff;
+
+    TRY ( buff = MemAlloc ( ctx, sizeof * buff, true ) )
+    {
+        TRY ( ColumnWriterInit ( & buff -> dad, ctx, & UnmappedBufferedPairColWriter_vt, false ) )
+        {
+            /* duplicate our friend */
+            TRY ( buff -> cw = ColumnWriterDuplicate ( writer, ctx ) )
+            {
+                /* borrowed ( weak ) reference
+                   cannot duplicate without creating cycle */
+                buff -> tbl = self;
+
+                return & buff -> dad;
+            }
+        }
+
+        MemFree ( ctx, buff, sizeof * buff );
+    }
+
+    return NULL;
+}
+
+/* MakeBufferedIdRemapColumnWriter
+ *  make a wrapper that buffers all rows written
+ *  maps all ids through index MapFile
+ *  then sorts on flush
+ */
+ColumnWriter *cSRATblPairMakeBufferedIdRemapColumnWriter ( cSRATblPair *self,
+    const ctx_t *ctx, ColumnWriter *writer, MapFile *idx, bool assign_ids )
+{
+    FUNC_ENTRY ( ctx );
+
+    BufferedPairColWriter *buff;
+
+    TRY ( buff = MemAlloc ( ctx, sizeof * buff, true ) )
+    {
+        TRY ( ColumnWriterInit ( & buff -> dad, ctx, & MappedBufferedPairColWriter_vt, idx != NULL ) )
+        {
+            /* duplicate our friend */
+            TRY ( buff -> cw = ColumnWriterDuplicate ( writer, ctx ) )
+            {
+                TRY ( buff -> idx = MapFileDuplicate ( idx, ctx ) )
+                {
+                    /* borrowed ( weak ) reference
+                       cannot duplicate without creating cycle */
+                    buff -> tbl = self;
+
+                    /* preserve boolean in one of Dad's align bytes */
+                    buff -> dad . align [ 0 ] = assign_ids;
+
+                    return & buff -> dad;
+                }
+
+                ColumnWriterRelease ( writer, ctx );
+            }
+        }
+
+        MemFree ( ctx, buff, sizeof * buff );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/buff-writer.h b/tools/sra-sort/buff-writer.h
new file mode 100644
index 0000000..261788a
--- /dev/null
+++ b/tools/sra-sort/buff-writer.h
@@ -0,0 +1,64 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_buff_writer_
+#define _h_sra_sort_buff_writer_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct MapFile;
+struct cSRATblPair;
+struct ColumnWriter;
+
+
+/*--------------------------------------------------------------------------
+ * cSRATblPair
+ *  interface to pairing of source and destination tables
+ */
+
+/* MakeBufferedColumnWriter
+ *  make a wrapper that buffers all rows written
+ *  then sorts on flush
+ */
+struct ColumnWriter *cSRATblPairMakeBufferedColumnWriter ( struct cSRATblPair *self,
+    const ctx_t *ctx, struct ColumnWriter *writer );
+
+/* MakeBufferedIdRemapColumnWriter
+ *  make a wrapper that buffers all rows written
+ *  maps all ids through index MapFile
+ *  then sorts on flush
+ */
+struct ColumnWriter *cSRATblPairMakeBufferedIdRemapColumnWriter ( struct cSRATblPair *self,
+    const ctx_t *ctx, struct ColumnWriter *writer, struct MapFile *idx, bool assign_ids );
+
+
+#endif /* _h_sra_sort_buff_writer_ */
diff --git a/tools/sra-sort/caps.c b/tools/sra-sort/caps.c
new file mode 100644
index 0000000..9becbb1
--- /dev/null
+++ b/tools/sra-sort/caps.c
@@ -0,0 +1,125 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "caps.h"
+#include "ctx.h"
+#include "mem.h"
+#include "except.h"
+
+#include <vdb/manager.h>
+#include <kdb/manager.h>
+#include <kfg/config.h>
+
+#include <string.h>
+
+FILE_ENTRY ( caps );
+
+/*--------------------------------------------------------------------------
+ * Caps
+ *  a very watered down version of vdb-3 capabilities
+ */
+
+
+/* Init
+ *  initialize a local block from another
+ */
+void CapsInit ( Caps *caps, const ctx_t *ctx )
+{
+    if ( caps != NULL )
+    {
+        memset ( caps, 0, sizeof * caps );
+        if ( ctx != NULL && ctx -> caps != NULL )
+        {
+            const Caps *orig = ctx -> caps;
+            FUNC_ENTRY ( ctx );
+            TRY ( caps -> mem = MemBankDuplicate ( orig -> mem, ctx ) )
+            {
+                rc_t rc = KConfigAddRef ( caps -> cfg = orig -> cfg );
+                if ( rc != 0 )
+                {
+                    caps -> cfg = NULL;
+                    ERROR ( rc, "failed to duplicate reference to KConfig" );
+                }
+                else
+                {
+                    rc = KDBManagerAddRef ( caps -> kdb = orig -> kdb );
+                    if ( rc != 0 )
+                    {
+                        caps -> kdb = NULL;
+                        ERROR ( rc, "failed to duplicate reference to KDBManager" );
+                    }
+                    else
+                    {
+                        rc = VDBManagerAddRef ( caps -> vdb = orig -> vdb );
+                        if ( rc != 0 )
+                        {
+                            caps -> vdb = NULL;
+                            ERROR ( rc, "failed to duplicate reference to VDBManager" );
+                        }
+                        else
+                        {
+                            caps -> tool = orig -> tool;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+
+/* Whack
+ *  release references
+ */
+void CapsWhack ( Caps *self, const ctx_t *ctx )
+{
+    if ( self != NULL )
+    {
+        rc_t rc;
+        MemBank *mem;
+
+        self -> tool = NULL;
+
+        rc = VDBManagerRelease ( self -> vdb );
+        if ( rc != 0 )
+            ABORT ( rc, "failed to release reference to VDBManager" );
+        self -> vdb = NULL;
+
+        rc = KDBManagerRelease ( self -> kdb );
+        if ( rc != 0 )
+            ABORT ( rc, "failed to release reference to KDBManager" );
+        self -> kdb = NULL;
+
+        rc = KConfigRelease ( self -> cfg );
+        if ( rc != 0 )
+            ABORT ( rc, "failed to release reference to KConfig" );
+        self -> cfg = NULL;
+
+        mem = self -> mem;
+        MemBankRelease ( mem, ctx );
+        self -> mem = NULL;
+    }
+}
diff --git a/tools/sra-sort/caps.h b/tools/sra-sort/caps.h
new file mode 100644
index 0000000..7368556
--- /dev/null
+++ b/tools/sra-sort/caps.h
@@ -0,0 +1,70 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_caps_
+#define _h_sra_sort_caps_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct MemBank;
+struct KConfig;
+struct KDBManager;
+struct VDBManager;
+struct Tool;
+
+
+/*--------------------------------------------------------------------------
+ * Caps
+ *  a very watered-down version of vdb-3 capabilities
+ */
+typedef struct Caps Caps;
+struct Caps
+{
+    struct MemBank *mem;
+    struct KConfig const *cfg;
+    struct KDBManager *kdb;
+    struct VDBManager *vdb;
+    struct Tool const *tool;
+};
+
+
+/* Init
+ *  initialize a local block from another
+ */
+void CapsInit ( Caps *caps, const ctx_t *ctx );
+
+
+/* Whack
+ *  release references
+ */
+void CapsWhack ( Caps *self, const ctx_t *ctx );
+
+#endif
diff --git a/tools/sra-sort/capture-first-half-aligned.c b/tools/sra-sort/capture-first-half-aligned.c
new file mode 100644
index 0000000..73cd829
--- /dev/null
+++ b/tools/sra-sort/capture-first-half-aligned.c
@@ -0,0 +1,192 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct CaptureFirstHalfAlignedColWriter CaptureFirstHalfAlignedColWriter;
+#define COLWRITER_IMPL CaptureFirstHalfAlignedColWriter
+
+#include "csra-pair.h"
+#include "col-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <klib/rc.h>
+
+FILE_ENTRY ( capture-first-half-aligned );
+
+
+/*--------------------------------------------------------------------------
+ * CaptureFirstHalfAlignedColWriter
+ */
+struct CaptureFirstHalfAlignedColWriter
+{
+    ColumnWriter dad;
+
+    int64_t row_id;
+    cSRAPair *csra;
+    ColumnWriter *writer;
+};
+
+static
+void CaptureFirstHalfAlignedColWriterWhack ( CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    ColumnWriterRelease ( self -> writer, ctx );
+    self -> csra = NULL;
+    self -> writer = NULL;
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+const char *CaptureFirstHalfAlignedColWriterFullSpec ( const CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    return ColumnWriterFullSpec ( self -> writer, ctx );
+}
+
+static
+void CaptureFirstHalfAlignedColWriterPreCopy ( CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    ColumnWriterPreCopy ( self -> writer, ctx );
+}
+
+static
+void CaptureFirstHalfAlignedColWriterPostCopy ( CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    ColumnWriterPostCopy ( self -> writer, ctx );
+}
+
+static
+void CaptureFirstHalfAlignedColWriterWrite ( CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    cSRAPair *csra = self -> csra;
+    if ( csra -> first_half_aligned_spot == 0 )
+    {
+        uint32_t i;
+        const int64_t *row = data;
+
+        for ( i = 0; i < row_len; ++ i )
+        {
+            if ( row [ i ] == 0 )
+            {
+                csra -> first_half_aligned_spot = self -> row_id;
+                break;
+            }
+        }
+    }
+
+    TRY ( ColumnWriterWrite ( self -> writer, ctx, elem_bits, data, boff, row_len ) )
+    {
+        ++ self -> row_id;
+    }
+}
+
+static
+void CaptureFirstHalfAlignedColWriterWriteStatic ( CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len, uint64_t count )
+{
+    FUNC_ENTRY ( ctx );
+
+    cSRAPair *csra = self -> csra;
+    if ( csra -> first_half_aligned_spot == 0 )
+    {
+        uint32_t i;
+        const int64_t *row = data;
+
+        for ( i = 0; i < row_len; ++ i )
+        {
+            if ( row [ i ] == 0 )
+            {
+                csra -> first_half_aligned_spot = self -> row_id;
+                break;
+            }
+        }
+    }
+
+    TRY ( ColumnWriterWriteStatic ( self -> writer, ctx, elem_bits, data, boff, row_len, count ) )
+    {
+        self -> row_id += count;
+    }
+}
+
+static
+void CaptureFirstHalfAlignedColWriterCommit ( CaptureFirstHalfAlignedColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    ColumnWriterCommit ( self -> writer, ctx );
+}
+
+static ColumnWriter_vt CaptureFirstHalfAlignedColWriter_vt =
+{
+    CaptureFirstHalfAlignedColWriterWhack,
+    CaptureFirstHalfAlignedColWriterFullSpec,
+    CaptureFirstHalfAlignedColWriterPreCopy,
+    CaptureFirstHalfAlignedColWriterPostCopy,
+    CaptureFirstHalfAlignedColWriterWrite,
+    CaptureFirstHalfAlignedColWriterWriteStatic,
+    CaptureFirstHalfAlignedColWriterCommit
+};
+
+/*--------------------------------------------------------------------------
+ * cSRAPair
+ */
+
+/* MakeFirstHalfAlignedRowIdCaptureWriter
+ *  a simple monitor on SEQUENCE.PRIMARY_ALIGNMENT_ID looking for
+ *  half-aligned spots and capturing the first occurrence.
+ */
+ColumnWriter *cSRAPairMakeFirstHalfAlignedRowIdCaptureWriter ( cSRAPair *self,
+    const ctx_t *ctx, ColumnWriter *writer )
+{
+    FUNC_ENTRY ( ctx );
+
+    CaptureFirstHalfAlignedColWriter *mon;
+
+    TRY ( mon = MemAlloc ( ctx, sizeof * mon, false ) )
+    {
+        TRY ( ColumnWriterInit ( & mon -> dad, ctx, & CaptureFirstHalfAlignedColWriter_vt, false ) )
+        {
+            mon -> row_id = 1;
+            mon -> csra = self;
+            TRY ( mon -> writer = ColumnWriterDuplicate ( writer, ctx ) )
+            {
+                return & mon -> dad;
+            }
+        }
+
+        MemFree ( ctx, mon, sizeof * mon );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/col-pair.c b/tools/sra-sort/col-pair.c
new file mode 100644
index 0000000..11e7779
--- /dev/null
+++ b/tools/sra-sort/col-pair.c
@@ -0,0 +1,816 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct SimpleColumnReader SimpleColumnReader;
+#define COLREADER_IMPL SimpleColumnReader
+
+typedef struct SimpleColumnWriter SimpleColumnWriter;
+#define COLWRITER_IMPL SimpleColumnWriter
+
+#include "col-pair.h"
+#include "tbl-pair.h"
+#include "row-set.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+#include <kapp/main.h>
+#include <kfs/defs.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+FILE_ENTRY ( col-pair );
+
+
+/*--------------------------------------------------------------------------
+ * SimpleColumnReader
+ *  implementation of ColumnReader based upon VCursor direct read
+ */
+struct SimpleColumnReader
+{
+    ColumnReader dad;
+
+    const VCursor *curs;
+    uint32_t idx;
+
+    uint32_t full_spec_size;
+    char full_spec [ 1 ];
+};
+
+
+/* Whack
+ */
+static
+void SimpleColumnReaderWhack ( SimpleColumnReader *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    size_t bytes = sizeof * self + self -> full_spec_size;
+
+    rc = VCursorRelease ( self -> curs );
+    if ( rc != 0 )
+        WARN ( "VCursorRelease failed on '%s'", self -> full_spec );
+
+    self -> curs = NULL;
+    MemFree ( ctx, self, bytes );
+}
+
+/* FullSpec
+ */
+static
+const char *SimpleColumnReaderFullSpec ( const SimpleColumnReader *self, const ctx_t *ctx )
+{
+    return self -> full_spec;
+}
+
+
+/* IdRange
+ *  returns the number of ids available
+ *  and optionally the first id
+ */
+static
+uint64_t SimpleColumnReaderIdRange ( const SimpleColumnReader *self,
+    const ctx_t *ctx, int64_t *opt_first )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    uint64_t count;
+
+    rc = VCursorIdRange ( self -> curs, self -> idx, opt_first, & count );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "VCursorIdRange failed for column '%s'", self -> full_spec );
+
+    return count;
+}
+
+
+/* DummyStub
+ *  useful for pre/post-copy
+ */
+static
+void SimpleColumnReaderDummyStub ( SimpleColumnReader *self, const ctx_t *ctx )
+{
+}
+
+
+/* Read
+ *  read next row of data
+ *  returns NULL if no rows are available
+ */
+static
+const void *SimpleColumnReaderRead ( SimpleColumnReader *self, const ctx_t *ctx,
+    int64_t row_id, uint32_t *elem_bits, uint32_t *boff, uint32_t *row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    const void *base;
+
+    rc = VCursorCellDataDirect ( self -> curs, row_id, self -> idx, elem_bits, & base, boff, row_len );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "VCursorCellDataDirect ( %ld ) failed for column '%s'", row_id, self -> full_spec );
+
+    return base;
+}
+
+static ColumnReader_vt SimpleColumnReader_vt =
+{
+    SimpleColumnReaderWhack,
+    SimpleColumnReaderFullSpec,
+    SimpleColumnReaderIdRange,
+    SimpleColumnReaderDummyStub,
+    SimpleColumnReaderDummyStub,
+    SimpleColumnReaderRead
+};
+
+
+/*--------------------------------------------------------------------------
+ * ColumnReader
+ *  interface to read column in serial order
+ */
+
+
+/* MakeColumnReader
+ *  make simple column reader
+ */
+ColumnReader *TablePairMakeColumnReader ( TablePair *self, const ctx_t *ctx,
+    const VCursor *opt_curs, const char *colspec, bool required )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    const VCursor *curs;
+
+    if ( opt_curs != NULL )
+        rc = VCursorAddRef ( curs = opt_curs );
+    else
+        rc = VTableCreateCursorRead ( self -> stbl, & curs );
+    if ( rc != 0 )
+        ERROR ( rc, "failed to create cursor on column 'src.%s.%s'", self -> full_spec, colspec );
+    else
+    {
+        uint32_t idx;
+        rc = VCursorAddColumn ( curs, & idx, colspec );
+        if ( rc != 0 && GetRCState ( rc ) != rcExists )
+        {
+            if ( required )
+                ERROR ( rc, "failed to add column 'src.%s.%s' to cursor", self -> full_spec, colspec );
+        }
+        else
+        {
+            rc = VCursorOpen ( curs );
+            if ( rc != 0 )
+            {
+                if ( required )
+                    ERROR ( rc, "failed to open cursor on column 'src.%s.%s'", self -> full_spec, colspec );
+            }
+            else
+            {
+                SimpleColumnReader *col;
+                size_t full_spec_size = self -> full_spec_size + string_size ( colspec ) + sizeof "src.." - 1;
+
+                TRY ( col = MemAlloc ( ctx, sizeof * col + full_spec_size, false ) )
+                {
+                    ColumnReaderInit ( & col -> dad, ctx, & SimpleColumnReader_vt );
+                    col -> curs = curs;
+                    col -> idx = idx;
+                    col -> full_spec_size = ( uint32_t ) full_spec_size;
+
+                    rc = string_printf ( col -> full_spec, full_spec_size + 1, NULL,
+                        "src.%s.%s", self -> full_spec, colspec );
+                    if ( rc == 0 )
+                        return & col -> dad;
+
+                    ABORT ( rc, "miscalculated string size" );
+                }
+                CATCH_ALL ()
+                {
+                    ANNOTATE ( "failed to allocate %zu bytes for SimpleColumnReader", sizeof * col + full_spec_size );
+                }
+            }
+        }
+
+        VCursorRelease ( curs );
+    }
+
+    return NULL;
+}
+
+
+/* Release
+ *  releases reference
+ */
+void ColumnReaderRelease ( const ColumnReader *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "ColumnReader" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+            break;
+        case krefZero:
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcCursor, rcDestroying, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to release ColumnReader" );
+        }
+    }
+}
+
+/* Duplicate
+ */
+ColumnReader *ColumnReaderDuplicate ( const ColumnReader *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "ColumnReader" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcCursor, rcAttaching, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to duplicate ColumnReader" );
+            return NULL;
+        }
+    }
+
+    return ( ColumnReader* ) self;
+}
+
+
+/* Init
+ */
+void ColumnReaderInit ( ColumnReader *self, const ctx_t *ctx, const ColumnReader_vt *vt )
+{
+    if ( self == NULL )
+    {
+        rc_t rc = RC ( rcExe, rcCursor, rcConstructing, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad ColumnReader" );
+    }
+    else
+    {
+        self -> vt = vt;
+        KRefcountInit ( & self -> refcount, 1, "ColumnReader", "init", "" );
+        self -> presorted = false;
+        memset ( self -> align, 0, sizeof self -> align );
+    }
+}
+
+
+/*--------------------------------------------------------------------------
+ * SimpleColumnWriter
+ *  implementation of ColumnWriter based upon VCursor
+ */
+struct SimpleColumnWriter
+{
+    ColumnWriter dad;
+
+    VCursor *curs;
+    uint32_t idx;
+
+    uint32_t full_spec_size;
+    char full_spec [ 1 ];
+};
+
+static
+void SimpleColumnWriterWhack ( SimpleColumnWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    rc = VCursorRelease ( self -> curs );
+    if ( rc != 0 )
+        ERROR ( rc, "VCursorRelease failed on column '%s'", self -> full_spec );
+
+    MemFree ( ctx, self, sizeof * self + self -> full_spec_size );
+}
+
+
+static
+const char *SimpleColumnWriterFullSpec ( const SimpleColumnWriter *self, const ctx_t *ctx )
+{
+    return self -> full_spec;
+}
+
+static
+void SimpleColumnWriterDummyStub ( SimpleColumnWriter *self, const ctx_t *ctx )
+{
+}
+
+static
+void SimpleColumnWriterWrite ( SimpleColumnWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    rc = VCursorOpenRow ( self -> curs );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "VCursorOpenRow failed on column '%s'", self -> full_spec );
+    else
+    {
+        rc = VCursorWrite ( self -> curs, self -> idx, elem_bits, data, boff, row_len );
+        if ( rc != 0 )
+            SYSTEM_ERROR ( rc, "VCursorWrite failed for column '%s'", self -> full_spec );
+        else
+        {
+            rc = VCursorCommitRow ( self -> curs );
+            if ( rc != 0 )
+                SYSTEM_ERROR ( rc, "VCursorCommit failed for column '%s'", self -> full_spec );
+        }
+
+        rc = VCursorCloseRow ( self -> curs );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "VCursorCloseRow failed on column '%s'", self -> full_spec );
+    }
+}
+
+static
+void SimpleColumnWriterWriteStatic ( SimpleColumnWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len, uint64_t count )
+{
+    FUNC_ENTRY ( ctx );
+
+    for ( ; ! FAILED () && count > 0; -- count )
+    {
+        rc_t rc = VCursorOpenRow ( self -> curs );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "VCursorOpenRow failed on column '%s'", self -> full_spec );
+        else
+        {
+            rc = VCursorWrite ( self -> curs, self -> idx, elem_bits, data, boff, row_len );
+            if ( rc != 0 )
+                SYSTEM_ERROR ( rc, "VCursorWrite failed for column '%s'", self -> full_spec );
+            else
+            {
+                rc = VCursorCommitRow ( self -> curs );
+                if ( rc != 0 )
+                    SYSTEM_ERROR ( rc, "VCursorCommitRow failed for column '%s'", self -> full_spec );
+                else if ( count > 1 )
+                {
+                    /* setting it small since threshold is detected in CommitRow, but execused on CloseRow */
+                    uint64_t cnt = ( count < 0x20000000U ) ? count : 0x20000000U; 
+                    rc = VCursorRepeatRow ( self -> curs, cnt - 1 );
+                    if ( rc != 0 )
+                        SYSTEM_ERROR ( rc, "VCursorRepeatRow failed for column '%s'", self -> full_spec );
+                    else
+                        count -= cnt - 1;
+                }
+            }
+
+            rc = VCursorCloseRow ( self -> curs );
+            if ( rc != 0 )
+                INTERNAL_ERROR ( rc, "VCursorCloseRow failed on column '%s'", self -> full_spec );
+        }
+    }
+}
+
+static
+void SimpleColumnWriterCommit ( SimpleColumnWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    rc = VCursorCommit ( self -> curs );
+    if ( rc != 0 )
+        ERROR ( rc, "VCursorCommit failed on column '%s'", self -> full_spec );
+    else
+    {
+        rc = VCursorRelease ( self -> curs );
+        if ( rc != 0 )
+            ERROR ( rc, "VCursorRelease failed on column '%s'", self -> full_spec );
+        else
+        {
+            self -> curs = NULL;
+        }
+    }
+}
+
+
+static ColumnWriter_vt SimpleColumnWriter_vt =
+{
+    SimpleColumnWriterWhack,
+    SimpleColumnWriterFullSpec,
+    SimpleColumnWriterDummyStub,
+    SimpleColumnWriterDummyStub,
+    SimpleColumnWriterWrite,
+    SimpleColumnWriterWriteStatic,
+    SimpleColumnWriterCommit
+};
+
+
+
+/*--------------------------------------------------------------------------
+ * ColumnWriter
+ *  interface to write column in serial order
+ */
+
+
+/* MakeColumnWriter
+ *  make simple column writer
+ */
+ColumnWriter *TablePairMakeColumnWriter ( TablePair *self, const ctx_t *ctx,
+   VCursor *opt_curs, const char *colspec )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    VCursor *curs;
+
+    if ( opt_curs != NULL )
+        rc = VCursorAddRef ( curs = opt_curs );
+    else
+        rc = VTableCreateCursorWrite ( self -> dtbl, & curs, kcmInsert );
+    if ( rc != 0 )
+        ERROR ( rc, "failed to create cursor on column 'dst.%s.%s'", self -> full_spec, colspec );
+    else
+    {
+        uint32_t idx;
+        rc = VCursorAddColumn ( curs, & idx, colspec );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to add column 'dst.%s.%s' to cursor", self -> full_spec, colspec );
+        else
+        {
+	    VCursorSuspendTriggers ( curs );
+            rc = VCursorOpen ( curs );
+            if ( rc != 0 )
+                ERROR ( rc, "failed to open cursor on column 'dst.%s.%s'", self -> full_spec, colspec );
+            {
+                SimpleColumnWriter *col;
+                size_t full_spec_size = self -> full_spec_size + string_size ( colspec ) + sizeof "dst.." - 1;
+
+                TRY ( col = MemAlloc ( ctx, sizeof * col + full_spec_size, false ) )
+                {
+                    ColumnWriterInit ( & col -> dad, ctx, & SimpleColumnWriter_vt, false );
+                    col -> curs = curs;
+                    col -> idx = idx;
+
+                    col -> full_spec_size = ( uint32_t ) full_spec_size;
+                    rc = string_printf ( col -> full_spec, full_spec_size + 1, NULL,
+                        "dst.%s.%s", self -> full_spec, colspec );
+                    if ( rc == 0 )
+                        return & col -> dad;
+
+                    ABORT ( rc, "miscalculated string size" );
+                }
+                CATCH_ALL ()
+                {
+                    ANNOTATE ( "failed to allocate %zu bytes for SimpleColumnWriter", sizeof * col + full_spec_size );
+                }
+            }
+        }
+
+        VCursorRelease ( curs );
+    }
+
+    return NULL;
+}
+
+
+/* Release
+ *  releases reference
+ */
+void ColumnWriterRelease ( ColumnWriter *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "ColumnWriter" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+            break;
+        case krefZero:
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcCursor, rcDestroying, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to release ColumnWriter" );
+        }
+    }
+}
+
+/* Duplicate
+ */
+ColumnWriter *ColumnWriterDuplicate ( const ColumnWriter *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "ColumnWriter" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcCursor, rcAttaching, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to duplicate ColumnWriter" );
+            return NULL;
+        }
+    }
+
+    return ( ColumnWriter* ) self;
+}
+
+
+/* Init
+ */
+void ColumnWriterInit ( ColumnWriter *self, const ctx_t *ctx, const ColumnWriter_vt *vt, bool mapped )
+{
+    if ( self == NULL )
+    {
+        rc_t rc = RC ( rcExe, rcCursor, rcConstructing, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad ColumnWriter" );
+    }
+    else
+    {
+        self -> vt = vt;
+        KRefcountInit ( & self -> refcount, 1, "ColumnWriter", "init", "" );
+        self -> mapped = mapped;
+        memset ( self -> align, 0, sizeof self -> align );
+    }
+}
+
+
+
+/*--------------------------------------------------------------------------
+ * ColumnPair
+ *  interface to pairing of source and destination columns
+ */
+
+/* Whack
+ */
+static
+void ColumnPairWhack ( ColumnPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnReaderRelease ( self -> reader, ctx );
+    ColumnWriterRelease ( self -> writer, ctx );
+    MemFree ( ctx, self, sizeof * self + self -> full_spec_size );
+}
+
+/* MakeColumnPair
+ *  make a simple ColumnPair
+ *  takes an optional source VCursor
+ *  and a colspec
+ */
+ColumnPair *TablePairMakeColumnPair ( TablePair *self, const ctx_t *ctx,
+    ColumnReader *reader, ColumnWriter *writer, const char *colspec, bool large )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col;
+    size_t full_spec_size = self -> full_spec_size + string_size ( colspec ) + 1;
+
+    TRY ( col = MemAlloc ( ctx, sizeof * col + full_spec_size, false ) )
+    {
+        TRY ( col -> reader = ColumnReaderDuplicate ( reader, ctx ) )
+        {
+            TRY ( col -> writer = ColumnWriterDuplicate ( writer, ctx ) )
+            {
+                rc_t rc;
+
+                col -> full_spec_size = full_spec_size;
+                KRefcountInit ( & col -> refcount, 1, "ColumnPair", "make", colspec );
+                col -> is_static = false;
+                col -> is_mapped = writer -> mapped;
+                col -> presorted = reader -> presorted;
+                col -> large = large;
+
+                rc = string_printf ( col -> full_spec, full_spec_size + 1, NULL,
+                    "%s.%s", self -> full_spec, colspec );
+                if ( rc == 0 )
+                {
+                    col -> colspec = & col -> full_spec [ self -> full_spec_size + 1 ];
+                    return col;
+                }
+
+                ABORT ( rc, "miscalculated string size" );
+            }
+
+            ColumnReaderRelease ( col -> reader, ctx );
+        }
+
+        MemFree ( ctx, col, sizeof * col + full_spec_size );
+    }
+
+    return NULL;
+}
+
+ColumnPair *TablePairMakeStaticColumnPair ( TablePair *self, const ctx_t *ctx,
+    ColumnReader *reader, ColumnWriter *writer, const char *colspec )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col;
+
+    TRY ( col = TablePairMakeColumnPair ( self, ctx, reader, writer, colspec, false ) )
+    {
+        if ( col != NULL )
+            col -> is_static = true;
+    }
+
+    return col;
+}
+
+
+/* Release
+ *  called by table at end of copy
+ */
+void ColumnPairRelease ( ColumnPair *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "ColumnPair" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            ColumnPairWhack ( self, ctx );
+            break;
+        case krefZero:
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcColumn, rcDestroying, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to release ColumnPair" );
+        }
+    }
+}
+
+/* Duplicate
+ */
+ColumnPair *ColumnPairDuplicate ( const ColumnPair *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "ColumnPair" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcColumn, rcAttaching, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to duplicate ColumnPair" );
+            return NULL;
+        }
+    }
+
+    return ( ColumnPair* ) self;
+}
+
+
+/* PreCopy
+ * PostCopy
+ */
+void ColumnPairPreCopy ( const ColumnPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    ColumnReaderPreCopy ( self -> reader, ctx );
+    ColumnWriterPreCopy ( self -> writer, ctx );
+}
+
+void ColumnPairPostCopy ( const ColumnPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    ColumnReaderPostCopy ( self -> reader, ctx );
+    ColumnWriterPostCopy ( self -> writer, ctx );
+}
+
+
+/* Copy
+ *  copy from source to destination column
+ */
+void ColumnPairCopy ( ColumnPair *self, const ctx_t *ctx, RowSet *rs )
+{
+    FUNC_ENTRY ( ctx );
+
+    STATUS ( 3, "copying column '%s'", self -> full_spec );
+
+    TRY ( RowSetReset ( rs, ctx, self -> is_static ) )
+    {
+        TRY ( ColumnPairPreCopy ( self, ctx ) )
+        {
+            while ( ! FAILED () )
+            {
+                rc_t rc;
+                size_t i, count;
+                int64_t row_ids [ 8 * 1024 ];
+
+                ON_FAIL ( count = RowSetNext ( rs, ctx, row_ids, sizeof row_ids / sizeof row_ids [ 0 ] ) )
+                    break;
+                if ( count == 0 )
+                    break;
+
+                rc = Quitting ();
+                if ( rc != 0 )
+                {
+                    INFO_ERROR ( rc, "quitting" );
+                    break;
+                }
+
+                for ( i = 0; ! FAILED () && i < count; ++ i )
+                {
+                    const void *base;
+                    uint32_t elem_bits, boff, row_len;
+                    
+                    TRY ( base = ColumnReaderRead ( self -> reader, ctx, row_ids [ i ], & elem_bits, & boff, & row_len ) )
+                    {
+                        ColumnWriterWrite ( self -> writer, ctx, elem_bits, base, boff, row_len );
+                    }
+                }
+            }
+
+            ColumnPairPostCopy ( self, ctx );
+        }
+    }
+}
+
+
+/* CopyStatic
+ *  copy static column from source to destination
+ */
+void ColumnPairCopyStatic ( ColumnPair *self, const ctx_t *ctx, int64_t first_id, uint64_t count )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    const void *base;
+    uint32_t elem_bits, boff, row_len;
+
+    if ( ! self -> is_static )
+    {
+        rc = RC ( rcExe, rcColumn, rcCopying, rcType, rcIncorrect );
+        INTERNAL_ERROR ( rc, "'%s' IS NOT A STATIC COLUMN", self -> full_spec );
+        return;
+    }
+
+    STATUS ( 3, "copying static column '%s'", self -> full_spec );
+                    
+    TRY ( base = ColumnReaderRead ( self -> reader, ctx, first_id, & elem_bits, & boff, & row_len ) )
+    {
+        ColumnWriterWriteStatic ( self -> writer, ctx, elem_bits, base, boff, row_len, count );
+    }
+}
diff --git a/tools/sra-sort/col-pair.h b/tools/sra-sort/col-pair.h
new file mode 100644
index 0000000..b14df08
--- /dev/null
+++ b/tools/sra-sort/col-pair.h
@@ -0,0 +1,323 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_col_pair_
+#define _h_sra_sort_col_pair_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct VCursor;
+struct TablePair;
+struct RowSet;
+
+
+/*--------------------------------------------------------------------------
+ * ColumnReader
+ *  interface to read column in random order
+ */
+typedef struct ColumnReader_vt ColumnReader_vt;
+
+typedef struct ColumnReader ColumnReader;
+struct ColumnReader
+{
+    const ColumnReader_vt *vt;
+    KRefcount refcount;
+    bool presorted;
+    uint8_t align [ 3 ];
+};
+
+#ifndef COLREADER_IMPL
+#define COLREADER_IMPL ColumnReader
+#endif
+
+struct ColumnReader_vt
+{
+    /* called by Release */
+    void ( * whack ) ( COLREADER_IMPL *self, const ctx_t *ctx );
+
+    /* full spec */
+    const char* ( * full_spec ) ( const COLREADER_IMPL *self, const ctx_t *ctx );
+
+    /* id-range */
+    uint64_t ( * id_range ) ( const COLREADER_IMPL *self, const ctx_t *ctx, int64_t *opt_first );
+
+    /* pre-post copy handlers */
+    void ( * pre_copy ) ( COLREADER_IMPL *self, const ctx_t *ctx );
+    void ( * post_copy ) ( COLREADER_IMPL *self, const ctx_t *ctx );
+
+    /* retrieve next source row */
+    const void* ( * read ) ( COLREADER_IMPL *self, const ctx_t *ctx,
+        int64_t row_id, uint32_t *elem_bits, uint32_t *boff, uint32_t *row_len );
+};
+
+
+/* MakeColumnReader
+ *  make simple column reader
+ */
+ColumnReader *TablePairMakeColumnReader ( struct TablePair *self, const ctx_t *ctx,
+    struct VCursor const *opt_curs, const char *colspec, bool required );
+
+
+/* Release
+ *  releases reference
+ */
+void ColumnReaderRelease ( const ColumnReader *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+ColumnReader *ColumnReaderDuplicate ( const ColumnReader *self, const ctx_t *ctx );
+
+
+/* FullSpec
+ *  returns 'src.<tbl>.<colspec>'
+ */
+#define ColumnReaderFullSpec( self, ctx ) \
+    POLY_DISPATCH_PTR ( full_spec, self, const COLREADER_IMPL, ctx )
+
+
+/* IdRange
+ *  returns the number of ids available
+ *  and optionally the first id
+ */
+#define ColumnReaderIdRange( self, ctx, opt_first ) \
+    POLY_DISPATCH_INT ( id_range, self, const COLREADER_IMPL, ctx, opt_first )
+
+
+/* PreCopy
+ * PostCopy
+ *  handlers for any operations
+ */
+#define ColumnReaderPreCopy( self, ctx ) \
+    POLY_DISPATCH_VOID ( pre_copy, self, COLREADER_IMPL, ctx )
+#define ColumnReaderPostCopy( self, ctx ) \
+    POLY_DISPATCH_VOID ( post_copy, self, COLREADER_IMPL, ctx )
+
+
+/* Read
+ *  read next row of data
+ *  returns NULL if no rows are available
+ */
+#define ColumnReaderRead( self, ctx, row_id, elem_bits, boff, row_len )  \
+    POLY_DISPATCH_PTR ( read, self, COLREADER_IMPL, ctx, row_id, elem_bits, boff, row_len )
+
+
+/* Init
+ */
+void ColumnReaderInit ( ColumnReader *self, const ctx_t *ctx, const ColumnReader_vt *vt );
+
+/* Destroy
+ */
+#define ColumnReaderDestroy( self, ctx ) \
+    ( ( void ) 0 )
+
+
+/*--------------------------------------------------------------------------
+ * ColumnWriter
+ *  interface to write column in serial order
+ */
+typedef struct ColumnWriter_vt ColumnWriter_vt;
+
+typedef struct ColumnWriter ColumnWriter;
+struct ColumnWriter
+{
+    const ColumnWriter_vt *vt;
+    KRefcount refcount;
+    bool mapped;
+    uint8_t align [ 3 ];
+};
+
+#ifndef COLWRITER_IMPL
+#define COLWRITER_IMPL ColumnWriter
+#endif
+
+struct ColumnWriter_vt
+{
+    /* called by Release */
+    void ( * whack ) ( COLWRITER_IMPL *self, const ctx_t *ctx );
+
+    /* full spec */
+    const char* ( * full_spec ) ( const COLWRITER_IMPL *self, const ctx_t *ctx );
+
+    /* pre-post copy handlers */
+    void ( * pre_copy ) ( COLWRITER_IMPL *self, const ctx_t *ctx );
+    void ( * post_copy ) ( COLWRITER_IMPL *self, const ctx_t *ctx );
+
+    /* write row to destination */
+    void ( * write ) ( COLWRITER_IMPL *self, const ctx_t *ctx,
+        uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len );
+    void ( * write_static ) ( COLWRITER_IMPL *self, const ctx_t *ctx,
+        uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len, uint64_t count );
+
+    /* commit all writes */
+    void ( * commit ) ( COLWRITER_IMPL *self, const ctx_t *ctx );
+};
+
+
+/* MakeColumnWriter
+ *  make simple column writer
+ */
+ColumnWriter *TablePairMakeColumnWriter ( struct TablePair *self, const ctx_t *ctx,
+    struct VCursor *opt_curs, const char *colspec );
+
+
+/* Release
+ *  releases reference
+ */
+void ColumnWriterRelease ( ColumnWriter *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+ColumnWriter *ColumnWriterDuplicate ( const ColumnWriter *self, const ctx_t *ctx );
+
+
+/* FullSpec
+ *  returns 'dst.<tbl>.<colspec>'
+ */
+#define ColumnWriterFullSpec( self, ctx ) \
+    POLY_DISPATCH_PTR ( full_spec, self, const COLWRITER_IMPL, ctx )
+
+
+/* PreCopy
+ * PostCopy
+ *  handlers for any operations
+ */
+#define ColumnWriterPreCopy( self, ctx ) \
+    POLY_DISPATCH_VOID ( pre_copy, self, COLWRITER_IMPL, ctx )
+#define ColumnWriterPostCopy( self, ctx ) \
+    POLY_DISPATCH_VOID ( post_copy, self, COLWRITER_IMPL, ctx )
+
+
+/* Write
+ *  write a row of data
+ */
+#define ColumnWriterWrite( self, ctx, elem_bits, data, boff, row_len ) \
+    POLY_DISPATCH_VOID ( write, self, COLWRITER_IMPL, ctx, elem_bits, data, boff, row_len )
+
+/* WriteStatic
+ *  writes a repeated row
+ */
+#define ColumnWriterWriteStatic( self, ctx, elem_bits, data, boff, row_len, count ) \
+    POLY_DISPATCH_VOID ( write_static, self, COLWRITER_IMPL, ctx, elem_bits, data, boff, row_len, count )
+
+
+/* Commit
+ *  commits all writes
+ */
+#define ColumnWriterCommit( self, ctx ) \
+    POLY_DISPATCH_VOID ( commit, self, COLWRITER_IMPL, ctx )
+
+
+/* Init
+ */
+void ColumnWriterInit ( ColumnWriter *self, const ctx_t *ctx,
+    const ColumnWriter_vt *vt, bool mapped );
+
+/* Destroy
+ */
+#define ColumnWriterDestroy( self, ctx ) \
+    ( ( void ) 0 )
+
+
+/*--------------------------------------------------------------------------
+ * ColumnPair
+ *  interface to pairing of source and destination columns
+ */
+typedef struct ColumnPair ColumnPair;
+struct ColumnPair
+{
+    ColumnReader *reader;
+    ColumnWriter *writer;
+
+    const char *colspec;
+
+    size_t full_spec_size;
+
+    KRefcount refcount;
+
+    bool is_static;
+
+    bool is_mapped;
+
+    bool presorted;
+
+    bool large;
+
+    char full_spec [ 1 ];
+};
+
+
+/* MakeColumnPair
+ *  make a simple ColumnPair
+ *  takes an optional source VCursor
+ *  and a colspec
+ */
+ColumnPair *TablePairMakeColumnPair ( struct TablePair *self, const ctx_t *ctx,
+    ColumnReader *reader, ColumnWriter *writer, const char *colspec, bool large );
+
+ColumnPair *TablePairMakeStaticColumnPair ( struct TablePair *self, const ctx_t *ctx,
+    ColumnReader *reader, ColumnWriter *writer, const char *colspec );
+
+
+/* Release
+ *  called by table at end of copy
+ */
+void ColumnPairRelease ( ColumnPair *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+ColumnPair *ColumnPairDuplicate ( const ColumnPair *self, const ctx_t *ctx );
+
+
+/* PreCopy
+ * PostCopy
+ */
+void ColumnPairPreCopy ( const ColumnPair *self, const ctx_t *ctx );
+void ColumnPairPostCopy ( const ColumnPair *self, const ctx_t *ctx );
+
+
+/* Copy
+ *  copy from source to destination column
+ */
+void ColumnPairCopy ( ColumnPair *self, const ctx_t *ctx, struct RowSet *rs );
+
+
+/* CopyStatic
+ *  copy static column from source to destination
+ */
+void ColumnPairCopyStatic ( ColumnPair *self, const ctx_t *ctx, int64_t first_id, uint64_t count );
+
+
+#endif /* _h_sra_sort_col_pair_ */
diff --git a/tools/sra-sort/csra-pair.c b/tools/sra-sort/csra-pair.c
new file mode 100644
index 0000000..579863c
--- /dev/null
+++ b/tools/sra-sort/csra-pair.c
@@ -0,0 +1,216 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+struct cSRAPair;
+#define DBPAIR_IMPL struct cSRAPair
+
+#include "csra-pair.h"
+#include "csra-tbl.h"
+#include "meta-pair.h"
+#include "dir-pair.h"
+#include "sra-sort.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "map-file.h"
+
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( csra-pair );
+
+
+/*--------------------------------------------------------------------------
+ * cSRAPair
+ */
+
+static
+void cSRAPairWhack ( cSRAPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* destroy me */
+    MapFileRelease ( self -> seq_idx, ctx );
+    MapFileRelease ( self -> sa_idx, ctx );
+    MapFileRelease ( self -> pa_idx, ctx );
+
+    DbPairDestroy ( & self -> dad, ctx );
+
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+TablePair *cSRAPairMakeTablePair ( cSRAPair *self, const ctx_t *ctx,
+     const char *member, const char *name, uint32_t align_idx, bool required, bool reorder,
+     TablePair* ( * make ) ( DbPair *self, const ctx_t *ctx, const VTable *src, VTable *dst, const char *name, bool reorder ) )
+{
+    FUNC_ENTRY ( ctx );
+
+    TablePair *tbl;
+
+    if ( name == NULL )
+        name = member;
+
+    TRY ( tbl = DbPairMakeTablePair ( & self -> dad, ctx, member, name, required, reorder, make ) )
+    {
+        if ( tbl != NULL )
+        {
+            TRY ( DbPairAddTablePair ( & self -> dad, ctx, tbl ) )
+            {
+                ( ( cSRATblPair* ) tbl ) -> align_idx = align_idx;
+                return tbl;
+            }
+
+            TablePairRelease ( tbl, ctx );
+        }
+    }
+
+    return NULL;
+}
+
+static
+void cSRAPairExplode ( cSRAPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    TablePair *tbl;
+
+    TRY ( tbl = cSRAPairMakeTablePair ( self, ctx, "REFERENCE", NULL, 0, true, false, cSRATblPairMakeRef ) )
+    {
+        self -> reference = tbl;
+
+        TRY ( tbl = cSRAPairMakeTablePair ( self, ctx, "PRIMARY_ALIGNMENT", NULL, 1, true, true, cSRATblPairMakeAlign ) )
+        {
+            self -> prim_align = tbl;
+
+            TRY ( tbl = cSRAPairMakeTablePair ( self, ctx, "SECONDARY_ALIGNMENT", NULL, 2, false, true, cSRATblPairMakeAlign ) )
+            {
+                self -> sec_align = tbl;
+
+                TRY ( tbl = cSRAPairMakeTablePair ( self, ctx, NULL, "EVIDENCE_ALIGNMENT", 3, false, false, cSRATblPairMakeAlign ) )
+                {
+                    self -> evidence_align = tbl;
+
+                    TRY ( tbl = cSRAPairMakeTablePair ( self, ctx, NULL, "SEQUENCE", 0, false, true, cSRATblPairMakeSeq ) )
+                    {
+                        DirPair *dir;
+
+                        self -> sequence = tbl;
+
+                        TRY ( dir = DbPairMakeDirPair ( & self -> dad, ctx, "extra", false, DbPairMakeStdDirPair ) )
+                        {
+                            ON_FAIL ( DbPairAddDirPair ( & self -> dad, ctx, dir ) )
+                                DirPairRelease ( dir, ctx );
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+static
+const char *cSRAPairGetTblMember ( const cSRAPair *self, const ctx_t *ctx, const VTable *src, const char *name )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* special kludge for "SEQUENCE" table */
+    if ( strcmp ( name, "SEQUENCE" ) == 0 )
+    {
+        /* determine whether table has CMP_CSREAD */
+        rc_t rc;
+        const VCursor *curs;
+
+        STATUS ( 4, "determining member name of SEQUENCE table" );
+
+        rc = VTableCreateCursorRead ( src, & curs );
+        if ( rc != 0 )
+            ERROR ( rc, "VTableOpenCursorRead failed on '%s.%s'", self -> dad . full_spec, name );
+        else
+        {
+            uint32_t idx;
+            rc = VCursorAddColumn ( curs, & idx, "CMP_CSREAD" );
+            if ( rc == 0 )
+            {
+                rc = VCursorOpen ( curs );
+                if ( rc == 0 )
+                    name = "CS_SEQUENCE";
+            }
+
+            VCursorRelease ( curs );
+        }
+
+        STATUS ( 4, "SEQUENCE table member name determined to be '%s'", name );
+    }
+
+    return name;
+}
+
+static DbPair_vt cSRAPair_vt =
+{
+    cSRAPairWhack,
+    cSRAPairExplode,
+    cSRAPairGetTblMember
+};
+
+DbPair *cSRAPairMake ( const ctx_t *ctx,
+    const VDatabase *src, VDatabase *dst, const char *name )
+{
+    FUNC_ENTRY ( ctx );
+
+    cSRAPair *db;
+
+    TRY ( db = MemAlloc ( ctx, sizeof * db, true ) )
+    {
+        TRY ( DbPairInit ( & db -> dad, ctx, & cSRAPair_vt, src, dst, name, NULL ) )
+        {
+            static const char *exclude_tbls [] =
+            {
+                "EVIDENCE_ALIGNMENT",
+                "PRIMARY_ALIGNMENT",
+                "REFERENCE",
+                "SECONDARY_ALIGNMENT",
+                "SEQUENCE"
+            };
+            db -> dad . exclude_tbls = exclude_tbls;
+
+            return & db -> dad;
+        }
+
+        MemFree ( ctx, db, sizeof * db );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/csra-pair.h b/tools/sra-sort/csra-pair.h
new file mode 100644
index 0000000..a9de62e
--- /dev/null
+++ b/tools/sra-sort/csra-pair.h
@@ -0,0 +1,84 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_csra_pair_
+#define _h_sra_sort_csra_pair_
+
+#ifndef _h_sra_sort_db_pair_
+#include "db-pair.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct TablePair;
+struct ColumnWriter;
+
+
+/*--------------------------------------------------------------------------
+ * cSRAPair
+ *  interface to pairing of source and destination tables
+ */
+typedef struct cSRAPair cSRAPair;
+struct cSRAPair
+{
+    DbPair dad;
+
+    /* for ultimate metadata */
+    int64_t first_half_aligned_spot;
+    int64_t first_unaligned_spot;
+
+    /* the reference table */
+    struct TablePair *reference;
+
+    /* the alignment tables */
+    struct TablePair *prim_align, *sec_align, *evidence_align;
+
+    /* the sequence table */
+    struct TablePair *sequence;
+
+    /* mapping indices */
+    struct MapFile *pa_idx, *sa_idx, *seq_idx;
+};
+
+
+/* Make
+ *  makes an object based upon open source and destination VDatabase objects
+ */
+DbPair *cSRAPairMake ( const ctx_t *ctx,
+    struct VDatabase const *src, struct VDatabase *dst, const char *name );
+
+
+/* MakeFirstHalfAlignedRowIdCaptureWriter
+ *  a simple monitor on SEQUENCE.PRIMARY_ALIGNMENT_ID looking for
+ *  half-aligned spots and capturing the first occurrence.
+ */
+struct ColumnWriter *cSRAPairMakeFirstHalfAlignedRowIdCaptureWriter ( cSRAPair *self,
+    const ctx_t *ctx, struct ColumnWriter *writer );
+
+
+#endif /* _h_sra_sort_csra_pair_ */
diff --git a/tools/sra-sort/csra-tbl.c b/tools/sra-sort/csra-tbl.c
new file mode 100644
index 0000000..3365163
--- /dev/null
+++ b/tools/sra-sort/csra-tbl.c
@@ -0,0 +1,783 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+struct cSRATblPair;
+#define TBLPAIR_IMPL struct cSRATblPair
+
+#include "csra-tbl.h"
+#include "csra-pair.h"
+#include "ref-alignid-col.h"
+#include "row-set.h"
+#include "id-mapper-col.h"
+#include "buff-writer.h"
+#include "poslen-col-pair.h"
+#include "meta-pair.h"
+#include "map-file.h"
+#include "xcheck.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <vdb/table.h>
+#include <kdb/meta.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( csra-tbl );
+
+
+/*--------------------------------------------------------------------------
+ * RefTblPair
+ *  generic database object pair
+ */
+
+static
+void cSRATblPairWhack ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    RowSetIteratorRelease ( self -> rsi, ctx );
+    TablePairDestroy ( & self -> dad, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+void cSRATblPairDummyStub ( cSRATblPair *self, const ctx_t *ctx )
+{
+}
+
+
+/* REFERENCE table
+ */
+static
+ColumnPair *cSRATblPairMakePrimAlignIdColPair ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col = NULL;
+    cSRAPair *csra = self -> csra;
+
+    ColumnReader *reader;
+    const char *colspec = "(I64)PRIMARY_ALIGNMENT_IDS";
+
+    TRY ( reader = TablePairMakeAlignIdReader ( & self -> dad, ctx,
+              csra -> prim_align, csra -> pa_idx, colspec ) )
+    {
+        ColumnWriter *writer;
+        TRY ( writer = TablePairMakeColumnWriter ( & self -> dad, ctx, NULL, colspec ) )
+        {
+            col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, writer, colspec, false );
+                
+            ColumnWriterRelease ( writer, ctx );
+        }
+
+        ColumnReaderRelease ( reader, ctx );
+    }
+
+    return col;
+}
+
+static
+ColumnPair *cSRATblPairMakeSecAlignIdColPair ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col = NULL;
+    cSRAPair *csra = self -> csra;
+
+    if ( csra -> sec_align != NULL )
+    {
+        ColumnReader *reader;
+        const char *colspec = "(I64)SECONDARY_ALIGNMENT_IDS";
+
+        TRY ( reader = TablePairMakeAlignIdReader ( & self -> dad, ctx,
+                  csra -> sec_align, csra -> sa_idx, colspec ) )
+        {
+            ColumnWriter *writer;
+            TRY ( writer = TablePairMakeColumnWriter ( & self -> dad, ctx, NULL, colspec ) )
+            {
+                col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, writer, colspec, false );
+                
+                ColumnWriterRelease ( writer, ctx );
+            }
+            
+            ColumnReaderRelease ( reader, ctx );
+        }
+    }
+
+    return col;
+}
+
+static
+void cSRATblPairExplodeRef ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col;
+
+    TRY ( col = cSRATblPairMakePrimAlignIdColPair ( self, ctx ) )
+    {
+        TRY ( TablePairAddColumnPair ( & self -> dad, ctx, col ) )
+        {
+            TRY ( col = cSRATblPairMakeSecAlignIdColPair ( self, ctx ) )
+            {
+                TRY ( TablePairAddColumnPair ( & self -> dad, ctx, col ) )
+                {
+                }
+                CATCH_ALL ()
+                {
+                    ColumnPairRelease ( col, ctx );
+                }
+            }
+        }
+        CATCH_ALL ()
+        {
+            ColumnPairRelease ( col, ctx );
+        }
+    }
+}
+
+static
+ColumnPair *cSRATblPairMakeColumnPairRef ( cSRATblPair *self, const ctx_t *ctx,
+    struct ColumnReader *reader, struct ColumnWriter *writer, const char *colspec, bool large )
+{
+    FUNC_ENTRY ( ctx );
+    return TablePairMakeColumnPair ( & self -> dad, ctx, reader, writer, colspec, large );
+}
+
+static
+RowSetIterator *cSRATblPairGetRowSetIteratorRef ( cSRATblPair *self, const ctx_t *ctx, bool mapping, bool large )
+{
+    FUNC_ENTRY ( ctx );
+    const bool is_paired = false;
+    assert ( mapping == false );
+    return TablePairMakeRowSetIterator ( & self -> dad, ctx, NULL, is_paired, large );
+}
+
+static TablePair_vt cSRATblPair_Ref_vt =
+{
+    cSRATblPairWhack,
+    cSRATblPairDummyStub,
+    cSRATblPairExplodeRef,
+    cSRATblPairMakeColumnPairRef,
+    cSRATblPairDummyStub,
+    cSRATblPairDummyStub,
+    cSRATblPairGetRowSetIteratorRef
+};
+
+
+
+/* *_ALIGNMENT tables
+ */
+
+static
+ColumnPair *cSRATblPairMakeSeqSpotIdColPairPrim ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col = NULL;
+    cSRAPair *csra = self -> csra;
+
+    ColumnReader *reader;
+    const char *colspec = "(I64)SEQ_SPOT_ID";
+
+    /* we expect this column to be present */
+    TRY ( reader = TablePairMakeColumnReader ( & self -> dad, ctx, NULL, colspec, true ) )
+    {
+        ColumnWriter *writer;
+        TRY ( writer = TablePairMakeColumnWriter ( & self -> dad, ctx, NULL, colspec ) )
+        {
+            ColumnWriter *mapped;
+            const bool can_assign_ids = true;
+            TRY ( mapped = TablePairMakeMapRowIdWriter ( & self -> dad, ctx, writer, csra -> seq_idx, can_assign_ids ) )
+            {
+                ColumnWriter *buffered;
+                TRY ( buffered = cSRATblPairMakeBufferedColumnWriter ( self, ctx, mapped ) )
+                {
+                    col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, buffered, colspec, false );
+
+                    ColumnWriterRelease ( buffered, ctx );
+                }
+
+                ColumnWriterRelease ( mapped, ctx );
+            }
+                
+            ColumnWriterRelease ( writer, ctx );
+        }
+
+        ColumnReaderRelease ( reader, ctx );
+    }
+
+    return col;
+}
+
+static
+ColumnPair *cSRATblPairMakeSeqSpotIdColPair ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col = NULL;
+    cSRAPair *csra = self -> csra;
+
+    ColumnReader *reader;
+    const char *colspec = "(I64)SEQ_SPOT_ID";
+
+    /* we expect this column to be present */
+    TRY ( reader = TablePairMakeColumnReader ( & self -> dad, ctx, NULL, colspec, true ) )
+    {
+        ColumnWriter *writer;
+        TRY ( writer = TablePairMakeColumnWriter ( & self -> dad, ctx, NULL, colspec ) )
+        {
+            ColumnWriter *buffered;
+            /* create a buffered writer with NO id-assignment capabilities. */
+            TRY ( buffered = cSRATblPairMakeBufferedIdRemapColumnWriter ( self, ctx,
+                      writer, csra -> seq_idx, false ) )
+            {
+                col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, buffered, colspec, false );
+
+                ColumnWriterRelease ( buffered, ctx );
+            }
+                
+            ColumnWriterRelease ( writer, ctx );
+        }
+
+        ColumnReaderRelease ( reader, ctx );
+    }
+
+    return col;
+}
+
+static
+ColumnPair *cSRATblPairMakePoslenColPair ( cSRATblPair *self, const ctx_t *ctx, const MapFile *idx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col = NULL;
+
+    ColumnReader *reader;
+    const char *colspec = "(U64)GLOBAL_POSLEN";
+
+    /* we expect this column to be present */
+    TRY ( reader = TablePairMakePoslenColReader ( & self -> dad, ctx, idx, colspec ) )
+    {
+        ColumnWriter *writer;
+        TRY ( writer = TablePairMakePoslenColWriter ( & self -> dad, ctx, NULL, colspec ) )
+        {
+            col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, writer, colspec, false );
+                
+            ColumnWriterRelease ( writer, ctx );
+        }
+
+        ColumnReaderRelease ( reader, ctx );
+    }
+
+    return col;
+}
+
+static
+void cSRATblPairPreExplodeAlign ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    cSRAPair *csra = self -> csra;
+
+    switch ( self -> align_idx )
+    {
+    case 1:
+        csra -> pa_idx = MapFileMakeForPoslen ( ctx, csra -> prim_align -> name );
+        break;
+    case 2:
+        csra -> sa_idx = MapFileMakeForPoslen ( ctx, csra -> sec_align -> name );
+        break;
+    }
+}
+
+static
+void cSRATblPairExplodeAlign ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col;
+
+    /* create special case for SEQ_SPOT_ID */
+    switch ( self -> align_idx )
+    {
+    case 1:
+        col = cSRATblPairMakeSeqSpotIdColPairPrim ( self, ctx );
+        break;
+    case 0:
+    case 2:
+    case 3:
+        col = cSRATblPairMakeSeqSpotIdColPair ( self, ctx );
+        break;
+    default:
+        ANNOTATE ( "not going to dignify with an rc - bad align_idx" );
+        return;
+    }
+
+    if ( ! FAILED () )
+    {
+        TRY ( TablePairAddColumnPair ( & self -> dad, ctx, col ) )
+        {
+            cSRAPair *csra = self -> csra;
+
+            switch ( self -> align_idx )
+            {
+            case 1:
+                col = cSRATblPairMakePoslenColPair ( self, ctx, csra -> pa_idx );
+                break;
+            case 2:
+                col = cSRATblPairMakePoslenColPair ( self, ctx, csra -> sa_idx );
+                break;
+            default:
+                return;
+            }
+
+            if ( ! FAILED () )
+            {
+                TRY ( TablePairAddColumnPair ( & self -> dad, ctx, col ) )
+                {
+                    return;
+                }
+            }
+        }
+
+        ColumnPairRelease ( col, ctx );
+    }
+}
+
+static
+ColumnPair *cSRATblPairMakeColumnPairAlign ( cSRATblPair *self, const ctx_t *ctx,
+    struct ColumnReader *reader, struct ColumnWriter *writer, const char *colspec, bool large )
+{
+    FUNC_ENTRY ( ctx );
+
+    MapFile *idx = NULL;
+    ColumnPair *col = NULL;
+    ColumnWriter *buffered;
+
+    switch ( self -> align_idx )
+    {
+    case 0:
+    case 3:
+        return TablePairMakeColumnPair ( & self -> dad, ctx, reader, writer, colspec, large );
+    case 1:
+    case 2:
+    {
+        /* look for special MATE_ALIGN_ID column */
+        const char *colname = strrchr ( colspec, ')' );
+        if ( colname ++ == NULL )
+            colname = colspec;
+        if ( strcmp ( colname, "MATE_ALIGN_ID" ) == 0 )
+        {
+            cSRAPair *csra = self -> csra;
+            idx = self -> align_idx == 1 ? csra -> pa_idx : csra -> sa_idx;
+        }
+        break;
+    }
+
+    default:
+        ANNOTATE ( "not going to dignify with an rc - bad align_idx" );
+        return NULL;
+    }
+
+    /* create a buffer on writer, possibly with mapping */
+    buffered = ( idx != NULL ) ?
+        /* create a buffered mapping writer but WITHOUT id assignment capabilities */
+        cSRATblPairMakeBufferedIdRemapColumnWriter ( self, ctx, writer, idx, false ):
+        /* create a normal buffered writer */
+        cSRATblPairMakeBufferedColumnWriter ( self, ctx, writer );
+
+    if ( ! FAILED () )
+    {
+        col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, buffered, colspec, large );
+        ColumnWriterRelease ( buffered, ctx );
+    }
+
+    return col;
+}
+
+static
+void cSRATblPairPostCopyAlign ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    cSRAPair *csra = self -> csra;
+
+    RowSetIteratorRelease ( self -> rsi, ctx );
+    self -> rsi = NULL;
+
+    if ( self -> align_idx == 2 )
+    {
+        MapFileRelease ( self -> csra -> sa_idx, ctx );
+        self -> csra -> sa_idx = NULL;
+    }
+
+    switch ( self -> align_idx )
+    {
+    case 1:
+        CrossCheckRefAlignTbl ( ctx, csra -> reference -> dtbl, csra -> prim_align -> dtbl, "PRIMARY_ALIGNMENT" );
+        break;
+    case 2:
+        CrossCheckRefAlignTbl ( ctx, csra -> reference -> dtbl, csra -> sec_align -> dtbl, "SECONDARY_ALIGNMENT" );
+        break;
+    }
+}
+
+static
+RowSetIterator *cSRATblPairGetRowSetIteratorAlign ( cSRATblPair *self, const ctx_t *ctx, bool mapping, bool large )
+{
+    FUNC_ENTRY ( ctx );
+
+    TRY ( RowSetIteratorRelease ( self -> rsi, ctx ) )
+    {
+        cSRAPair *csra = self -> csra;
+        MapFile *idx = self -> align_idx == 1 ? csra -> pa_idx : csra -> sa_idx;
+        TRY ( self -> rsi = TablePairMakeRowSetIterator ( & self -> dad, ctx, idx, mapping, large ) )
+        {
+            return RowSetIteratorDuplicate ( self -> rsi, ctx );
+        }
+    }
+
+    return NULL;
+}
+
+
+static TablePair_vt cSRATblPair_Align_vt =
+{
+    cSRATblPairWhack,
+    cSRATblPairPreExplodeAlign,
+    cSRATblPairExplodeAlign,
+    cSRATblPairMakeColumnPairAlign,
+    cSRATblPairDummyStub,
+    cSRATblPairPostCopyAlign,
+    cSRATblPairGetRowSetIteratorAlign
+};
+
+
+
+/* SEQUENCE table
+ */
+
+static
+ColumnPair *cSRATblPairMakeSeqPrimAlignIdColPair ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col = NULL;
+    cSRAPair *csra = self -> csra;
+
+
+    ColumnReader *reader;
+    const char *colspec = "(I64)PRIMARY_ALIGNMENT_ID";
+
+    /* this column may not be present if there are no alignments */
+    TRY ( reader = TablePairMakeColumnReader ( & self -> dad, ctx, NULL, colspec, false ) )
+    {
+        if ( reader != NULL )
+        {
+            ColumnWriter *writer;
+            TRY ( writer = TablePairMakeColumnWriter ( & self -> dad, ctx, NULL, colspec ) )
+            {
+                ColumnWriter *capture;
+                TRY ( capture = cSRAPairMakeFirstHalfAlignedRowIdCaptureWriter ( csra, ctx, writer ) )
+                {
+                    ColumnWriter *buffered;
+
+                    /* create a buffered writer WITHOUT id-assignment capabilities. */
+                    TRY ( buffered = cSRATblPairMakeBufferedIdRemapColumnWriter ( self, ctx,
+                              capture, csra -> pa_idx, false ) )
+                    {
+                        col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, buffered, colspec, true );
+
+                        ColumnWriterRelease ( buffered, ctx );
+                    }
+
+                    ColumnWriterRelease ( capture, ctx );
+                }
+                
+                ColumnWriterRelease ( writer, ctx );
+            }
+            
+            ColumnReaderRelease ( reader, ctx );
+        }
+    }
+
+    return col;
+}
+
+static
+void cSRATblPairPreExplodeSeq ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    TRY ( TablePairExplode ( & self -> dad, ctx ) )
+    {
+        cSRAPair *csra = self -> csra;
+        TRY ( csra -> seq_idx = MapFileMake ( ctx, self -> dad . name, true ) )
+        {
+            TRY ( MapFileSetIdRange ( csra -> seq_idx, ctx, self -> dad . first_id,
+                      self -> dad . last_excl - self -> dad . first_id ) )
+            {
+                ColumnPair *col;
+
+                /* create special case for PRIMARY_ALIGNMENT_ID */
+                TRY ( col = cSRATblPairMakeSeqPrimAlignIdColPair ( self, ctx ) )
+                {
+                    TablePairAddColumnPair ( & self -> dad, ctx, col );
+                }
+            }
+        }
+    }
+}
+
+static
+ColumnPair *cSRATblPairMakeColumnPairSeq ( cSRATblPair *self, const ctx_t *ctx,
+    struct ColumnReader *reader, struct ColumnWriter *writer, const char *colspec, bool large )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnPair *col = NULL;
+    ColumnWriter *buffered;
+
+    TRY ( buffered = cSRATblPairMakeBufferedColumnWriter ( self, ctx, writer ) )
+    {
+        col = TablePairMakeColumnPair ( & self -> dad, ctx, reader, buffered, colspec, large );
+        ColumnWriterRelease ( buffered, ctx );
+    }
+
+    return col;
+}
+
+static
+void cSRATblPairPreCopySeq ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    cSRAPair *csra = self -> csra;
+
+    STATUS ( 3, "assigning new row-ids to unaligned sequences" );
+    csra -> first_unaligned_spot = MapFileAllocMissingNewIds ( self -> csra -> seq_idx, ctx );
+}
+
+static
+void cSRATblPairPostCopySeq ( cSRATblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    cSRAPair *csra = self -> csra;
+
+    RowSetIteratorRelease ( self -> rsi, ctx );
+    self -> rsi = NULL;
+
+    MapFileRelease ( csra -> pa_idx, ctx );
+    csra -> pa_idx = NULL;
+
+    MapFileRelease ( csra -> seq_idx, ctx );
+    csra -> seq_idx = NULL;
+
+    /* record markers in metadata */
+    if ( ! FAILED () && ( csra -> first_half_aligned_spot != 0 || csra -> first_unaligned_spot != 0 ) )
+    {
+        MetaPair *meta = self -> dad . meta;
+        KMDataNode *unaligned_node;
+        const char *node_path = "unaligned";
+        rc_t rc = KMetadataOpenNodeUpdate ( meta -> dmeta, & unaligned_node, node_path );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "KMetadataOpenNodeUpdate failed to open '%s'", node_path );
+        else
+        {
+            KMDataNode *node;
+            if ( csra -> first_half_aligned_spot != 0 )
+            {
+                node_path = "first-half-aligned";
+                rc = KMDataNodeOpenNodeUpdate ( unaligned_node, & node, node_path );
+                if ( rc != 0 )
+                    INTERNAL_ERROR ( rc, "KMDataNodeOpenNodeUpdate failed to open 'unaligned/%s'", node_path );
+                else
+                {
+                    rc = KMDataNodeWriteB64 ( node, & csra -> first_half_aligned_spot );
+                    if ( rc != 0 )
+                        INTERNAL_ERROR ( rc, "KMDataNodeWriteB64 failed to write 'unaligned/%s'", node_path );
+
+                    KMDataNodeRelease ( node );
+                }
+            }
+
+            if ( ! FAILED () && csra -> first_unaligned_spot != 0 )
+            {
+                node_path = "first-unaligned";
+                rc = KMDataNodeOpenNodeUpdate ( unaligned_node, & node, node_path );
+                if ( rc != 0 )
+                    INTERNAL_ERROR ( rc, "KMDataNodeOpenNodeUpdate failed to open 'unaligned/%s'", node_path );
+                else
+                {
+                    rc = KMDataNodeWriteB64 ( node, & csra -> first_unaligned_spot );
+                    if ( rc != 0 )
+                        INTERNAL_ERROR ( rc, "KMDataNodeWriteB64 failed to write 'unaligned/%s'", node_path );
+
+                    KMDataNodeRelease ( node );
+                }
+            }
+
+            KMDataNodeRelease ( unaligned_node );
+        }
+    }
+}
+
+static
+RowSetIterator *cSRATblPairGetRowSetIteratorSeq ( cSRATblPair *self, const ctx_t *ctx, bool mapping, bool large )
+{
+    FUNC_ENTRY ( ctx );
+
+    TRY ( RowSetIteratorRelease ( self -> rsi, ctx ) )
+    {
+        cSRAPair *csra = self -> csra;
+        TRY ( self -> rsi = TablePairMakeRowSetIterator ( & self -> dad, ctx, csra -> seq_idx, mapping, large ) )
+        {
+            return RowSetIteratorDuplicate ( self -> rsi, ctx );
+        }
+    }
+
+    return NULL;
+}
+
+static TablePair_vt cSRATblPair_Seq_vt =
+{
+    cSRATblPairWhack,
+    cSRATblPairPreExplodeSeq,
+    cSRATblPairDummyStub,
+    cSRATblPairMakeColumnPairSeq,
+    cSRATblPairPreCopySeq,
+    cSRATblPairPostCopySeq,
+    cSRATblPairGetRowSetIteratorSeq
+};
+
+
+
+/* Init
+ *  common initialization code
+ */
+static
+void cSRATblPairInit ( void *self, cSRATblPair *tbl )
+{
+    tbl -> csra = self;
+    tbl -> rsi = NULL;
+    tbl -> align_idx = 0;
+}
+
+
+/* MakeRef
+ *  special cased for REFERENCE table
+ */
+TablePair *cSRATblPairMakeRef ( DbPair *self, const ctx_t *ctx,
+    const VTable *src, VTable *dst, const char *name, bool reorder )
+{
+    FUNC_ENTRY ( ctx );
+
+    cSRATblPair *tbl;
+
+    TRY ( tbl = MemAlloc ( ctx, sizeof * tbl, false ) )
+    {
+        TRY ( TablePairInit ( & tbl -> dad, ctx, & cSRATblPair_Ref_vt, src, dst, name, self -> full_spec, reorder ) )
+        {
+            static const char *exclude_cols [] = { "PRIMARY_ALIGNMENT_IDS", "SECONDARY_ALIGNMENT_IDS", "READ", "SPOT_GROUP", NULL };
+            static const char *nonstatic_cols [] = { "NAME", NULL };
+            tbl -> dad . exclude_col_names = exclude_cols;
+            tbl -> dad . nonstatic_col_names = nonstatic_cols;
+            cSRATblPairInit ( self, tbl );
+            return & tbl -> dad;
+        }
+
+        MemFree ( ctx, tbl, sizeof * tbl );
+    }
+
+    return NULL;
+}
+
+
+/* MakeAlign
+ *  special cased for *_ALIGNMENT tables
+ */
+TablePair *cSRATblPairMakeAlign ( DbPair *self, const ctx_t *ctx,
+    const VTable *src, VTable *dst, const char *name, bool reorder )
+{
+    FUNC_ENTRY ( ctx );
+
+    cSRATblPair *tbl;
+
+    TRY ( tbl = MemAlloc ( ctx, sizeof * tbl, false ) )
+    {
+        TRY ( TablePairInit ( & tbl -> dad, ctx, & cSRATblPair_Align_vt, src, dst, name, self -> full_spec, reorder ) )
+        {
+            static const char *exclude_cols [] = { "GLOBAL_REF_START", "READ_LEN", "REF_ID", "REF_START", "REF_LEN", "SEQ_SPOT_ID", NULL };
+            static const char *unsorted_exclude_cols [] = { "READ_LEN", "SEQ_SPOT_ID", NULL };
+            tbl -> dad . exclude_col_names = reorder ? exclude_cols : unsorted_exclude_cols;
+            cSRATblPairInit ( self, tbl );
+            return & tbl -> dad;
+        }
+
+        MemFree ( ctx, tbl, sizeof * tbl );
+    }
+
+    return NULL;
+}
+
+
+/* MakeSeq
+ *  special cased for SEQUENCE table
+ */
+TablePair *cSRATblPairMakeSeq ( DbPair *self, const ctx_t *ctx,
+    const VTable *src, VTable *dst, const char *name, bool reorder )
+{
+    FUNC_ENTRY ( ctx );
+
+    cSRATblPair *tbl;
+
+    TRY ( tbl = MemAlloc ( ctx, sizeof * tbl, false ) )
+    {
+        TRY ( TablePairInit ( & tbl -> dad, ctx, & cSRATblPair_Seq_vt, src, dst, name, self -> full_spec, reorder ) )
+        {
+            static const char *exclude_cols [] = { "PRIMARY_ALIGNMENT_ID", NULL };
+            static const char *nonstatic_cols [] = { "NAME_FMT", NULL };
+            static const char *large_cols [] = { "CMP_READ", "QUALITY", NULL };
+            static const char *exclude_meta [] = { "unaligned", NULL };
+            tbl -> dad . exclude_col_names = exclude_cols;
+            tbl -> dad . nonstatic_col_names = nonstatic_cols;
+            tbl -> dad . large_col_names = large_cols;
+            tbl -> dad . exclude_meta = exclude_meta;
+            cSRATblPairInit ( self, tbl );
+            return & tbl -> dad;
+        }
+
+        MemFree ( ctx, tbl, sizeof * tbl );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/csra-tbl.h b/tools/sra-sort/csra-tbl.h
new file mode 100644
index 0000000..7eae0b2
--- /dev/null
+++ b/tools/sra-sort/csra-tbl.h
@@ -0,0 +1,83 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_csra_tbl_
+#define _h_sra_sort_csra_tbl_
+
+#ifndef _h_sra_sort_tbl_pair_
+#include "tbl-pair.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct cSRAPair;
+struct RowSetIterator;
+
+
+/*--------------------------------------------------------------------------
+ * cSRATblPair
+ *  interface to pairing of source and destination tables
+ */
+typedef struct cSRATblPair cSRATblPair;
+struct cSRATblPair
+{
+    TablePair dad;
+
+    /* database */
+    struct cSRAPair *csra;
+
+    /* special rowset iterator */
+    struct RowSetIterator *rsi;
+
+    /* if an alignment table, which one? */
+    uint32_t align_idx;
+};
+
+
+/* MakeRef
+ *  special cased for REFERENCE table
+ */
+TablePair *cSRATblPairMakeRef ( struct DbPair *self, const ctx_t *ctx,
+    struct VTable const *src, struct VTable *dst, const char *name, bool reorder );
+
+
+/* MakeAlign
+ *  special cased for *_ALIGNMENT tables
+ */
+TablePair *cSRATblPairMakeAlign ( struct DbPair *self, const ctx_t *ctx,
+    struct VTable const *src, struct VTable *dst, const char *name, bool reorder );
+
+
+/* MakeSeq
+ *  special cased for SEQUENCE table
+ */
+TablePair *cSRATblPairMakeSeq ( struct DbPair *self, const ctx_t *ctx,
+    struct VTable const *src, struct VTable *dst, const char *name, bool reorder );
+
+
+#endif /* _h_sra_sort_csra_tbl_ */
diff --git a/tools/sra-sort/ctx.h b/tools/sra-sort/ctx.h
new file mode 100644
index 0000000..30366db
--- /dev/null
+++ b/tools/sra-sort/ctx.h
@@ -0,0 +1,105 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_ctx_
+#define _h_sra_sort_ctx_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct Caps;
+
+
+/*--------------------------------------------------------------------------
+ * file entry
+ *  modified from vdb-3 to not place requirements on Makefile
+ */
+#define FILE_ENTRY( __file_name__ )                                     \
+    static const char __mod__ [] = "tools/sra-sort";                    \
+    static const char __file__ [] = STRINGIZE_DEFINE ( __file_name__ )
+
+
+/*--------------------------------------------------------------------------
+ * ctx_info_t
+ */
+typedef struct ctx_info_t ctx_info_t;
+struct ctx_info_t
+{
+    const char *mod;
+    const char *file;
+    const char *func;
+};
+
+#define DECLARE_CTX_INFO() \
+    static ctx_info_t ctx_info = { __mod__, __file__, __func__ }
+
+
+/*--------------------------------------------------------------------------
+ * ctx_t
+ *  modified from vdb-3
+ */
+struct ctx_t
+{
+    struct Caps const *caps;
+    const ctx_t *caller;
+    const ctx_info_t *info;
+    volatile rc_t rc;
+};
+
+
+/* INIT
+ *  initialize local context block
+ */
+static __inline__
+const ctx_t ctx_init ( ctx_t *new_ctx, const ctx_t **ctxp, const ctx_info_t *info )
+{
+    const ctx_t *ctx = * ctxp;
+    ctx_t local_ctx = { ctx -> caps, ctx, info };
+    * ctxp = new_ctx;
+    return local_ctx;
+}
+
+
+/* FUNC_ENTRY
+ */
+#define FUNC_ENTRY( ctx )                                               \
+    DECLARE_CTX_INFO ();                                                \
+    ctx_t local_ctx = ctx_init ( & local_ctx, & ( ctx ), & ctx_info )
+
+
+/* POP_CTX
+ *  intended to have VERY specific usage
+ */
+#define POP_CTX( ctx ) \
+    ctx = ctx -> caller
+
+
+#endif
diff --git a/tools/sra-sort/db-pair.c b/tools/sra-sort/db-pair.c
new file mode 100644
index 0000000..b350da1
--- /dev/null
+++ b/tools/sra-sort/db-pair.c
@@ -0,0 +1,883 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct DbPair StdDbPair;
+#define DBPAIR_IMPL StdDbPair
+
+#include "db-pair.h"
+#include "csra-pair.h"
+#include "tbl-pair.h"
+#include "dir-pair.h"
+#include "meta-pair.h"
+#include "sra-sort.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/vdb-priv.h>
+#include <kdb/database.h>
+#include <kdb/meta.h>
+#include <kdb/kdb-priv.h>
+#include <kfs/directory.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( db-pair );
+
+
+/*--------------------------------------------------------------------------
+ * StdDbPair
+ *  generic database object pair
+ */
+
+static
+void StdDbPairWhack ( StdDbPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    DbPairDestroy ( self, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+void StdDbPairExplode ( StdDbPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+}
+
+static
+const char *StdDbPairGetTblMember ( const StdDbPair *self, const ctx_t *ctx, const VTable *src, const char *name )
+{
+    return name;
+}
+
+static DbPair_vt StdDbPair_vt =
+{
+    StdDbPairWhack,
+    StdDbPairExplode,
+    StdDbPairGetTblMember
+};
+
+static
+DbPair *StdDbPairMake ( const ctx_t *ctx,
+    const VDatabase *src, VDatabase *dst, const char *name, const char *opt_full_spec )
+{
+    FUNC_ENTRY ( ctx );
+
+    StdDbPair *db;
+
+    TRY ( db = MemAlloc ( ctx, sizeof * db, false ) )
+    {
+        TRY ( DbPairInit ( db, ctx, & StdDbPair_vt, src, dst, name, opt_full_spec ) )
+        {
+            return db;
+        }
+
+        MemFree ( ctx, db, sizeof * db );
+    }
+
+    return NULL;
+}
+
+/*--------------------------------------------------------------------------
+ * DbPair
+ *  interface code
+ */
+
+
+/* Make
+ *  makes an object based upon open source and destination VDatabase objects
+ */
+static
+bool is_csra_db ( const VDatabase *src, const ctx_t *ctx )
+{
+    /* TBD - hack'o-matic */
+    return true;
+}
+
+DbPair *DbPairMake ( const ctx_t *ctx,
+    const VDatabase *src, VDatabase *dst, const char *name )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* intercept certain types of databases - right now cSRA */
+    if ( is_csra_db ( src, ctx ) )
+        return cSRAPairMake ( ctx, src, dst, name );
+
+    return StdDbPairMake ( ctx, src, dst, name, NULL );
+}
+
+DbPair *DbPairMakeStdDbPair ( DbPair *self, const ctx_t *ctx,
+    const VDatabase *src, VDatabase *dst, const char *name )
+{
+    FUNC_ENTRY ( ctx );
+    return StdDbPairMake ( ctx, src, dst, name, self -> full_spec );
+}
+
+
+/* Release
+ */
+void DbPairRelease ( DbPair *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "DbPair" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+            break;
+        case krefZero:
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcDatabase, rcDestroying, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to release DbPair" );
+        }
+    }
+}
+
+/* Duplicate
+ */
+DbPair *DbPairDuplicate ( DbPair *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "DbPair" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcDatabase, rcAttaching, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to duplicate DbPair" );
+            return NULL;
+        }
+    }
+
+    return ( DbPair* ) self;
+}
+
+
+/* Copy
+ */
+static
+bool CC DbPairCopyDbPair ( void *item, void *data )
+{
+    const ctx_t *ctx = ( const void* ) data;
+    FUNC_ENTRY ( ctx );
+    TRY ( DbPairCopy ( item, ctx ) )
+    {
+        return false;
+    }
+    return true;
+}
+
+static
+bool CC DbPairCopyTablePair ( void *item, void *data )
+{
+    const ctx_t *ctx = ( const void* ) data;
+    FUNC_ENTRY ( ctx );
+    TRY ( TablePairCopy ( item, ctx ) )
+    {
+        return false;
+    }
+    return true;
+}
+
+static
+bool CC DbPairCopyDirPair ( void *item, void *data )
+{
+    const ctx_t *ctx = ( const void* ) data;
+    FUNC_ENTRY ( ctx );
+    TRY ( DirPairCopy ( item, ctx ) )
+    {
+        return false;
+    }
+    return true;
+}
+
+void DbPairCopy ( DbPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    STATUS ( 2, "copying database '%s'", self -> full_spec );
+
+    /* copy metadata */
+    MetaPairCopy ( self -> meta, ctx, self -> full_spec, self -> exclude_meta );
+
+    /* copy all child databases */
+    if ( ! FAILED () && VectorLength ( & self -> dbs ) != 0 )
+    {
+        STATUS ( 2, "copying '%s' sub-databases", self -> full_spec );
+        VectorDoUntil ( & self -> dbs, false, DbPairCopyDbPair, ( void* ) ctx );
+    }
+
+    /* now we should be able to copy each table */
+    if ( ! FAILED () && VectorLength ( & self -> tbls ) != 0 )
+    {
+        STATUS ( 2, "copying '%s' tables", self -> full_spec );
+        VectorDoUntil ( & self -> tbls, false, DbPairCopyTablePair, ( void* ) ctx );
+    }
+
+    /* copy any directories - extra */
+    if ( ! FAILED () && VectorLength ( & self -> dirs ) != 0 )
+    {
+        STATUS ( 2, "copying '%s' directories", self -> full_spec );
+        VectorDoUntil ( & self -> dirs, false, DbPairCopyDirPair, ( void* ) ctx );
+    }
+}
+
+
+/* Explode
+ *  probably a bad name, but it is intended to mean
+ *  register all enclosed tables and databases
+ *  and create a proper pair of KMetadata
+ */
+static
+MetaPair *DbPairExplodeMetaPair ( DbPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    MetaPair *meta = NULL;
+    const KMetadata *smeta;
+
+    rc = VDatabaseOpenMetadataRead ( self -> sdb, & smeta );
+    if ( rc != 0 )
+        ERROR ( rc, "VDatabaseOpenMetadataRead failed on 'src.%s'", self -> full_spec );
+    else
+    {
+        KMetadata *dmeta;
+        rc = VDatabaseOpenMetadataUpdate ( self -> ddb, & dmeta );
+        if ( rc != 0 )
+            ERROR ( rc, "VDatabaseOpenMetadataUpdate failed on 'dst.%s'", self -> full_spec );
+        else
+        {
+            meta = MetaPairMake ( ctx, smeta, dmeta, self -> full_spec );
+
+            KMetadataRelease ( dmeta );
+        }
+        
+        KMetadataRelease ( smeta );
+    }
+
+    return meta;
+}
+
+static
+void DbPairExplode ( DbPair *self, const ctx_t *ctx );
+
+static
+bool CC DbPairExplodeDbPair ( void *item, void *data )
+{
+    const ctx_t *ctx = ( const void* ) data;
+    FUNC_ENTRY ( ctx );
+    TRY ( DbPairExplode ( item, ctx ) )
+    {
+        return false;
+    }
+    return true;
+}
+
+static
+bool CC DbPairPreExplodeTablePair ( void *item, void *data )
+{
+    const ctx_t *ctx = ( const void* ) data;
+    FUNC_ENTRY ( ctx );
+    TRY ( TablePairPreExplode ( ( ( TablePair* ) item ), ctx ) )
+    {
+        return false;
+    }
+    return true;
+}
+
+static
+void DbPairDefaultExplodeDB ( DbPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    KNamelist *names;
+
+    rc = VDatabaseListDB ( self -> sdb, & names );
+    if ( rc != 0 )
+        ERROR ( rc, "VDatabaseListDB failed listing '%s' databases", self -> full_spec );
+    else
+    {
+        uint32_t count;
+        rc = KNamelistCount ( names, & count );
+        if ( rc != 0 )
+            ERROR ( rc, "KNamelistCount failed listing '%s' databases", self -> full_spec );
+        else if ( count > 0 )
+        {
+            uint32_t i;
+            for ( i = 0; ! FAILED () && i < count; ++ i )
+            {
+                DbPair *db;
+
+                const char *name;
+                rc = KNamelistGet ( names, i, & name );
+                if ( rc != 0 )
+                {
+                    ERROR ( rc, "KNamelistGet ( %u ) failed listing '%s' databases", i, self -> full_spec );
+                    break;
+                }
+
+                if ( self -> exclude_dbs != NULL )
+                {
+                    uint32_t j;
+                    for ( j = 0; self -> exclude_dbs [ j ] != NULL; ++ j )
+                    {
+                        if ( strcmp ( name, self -> exclude_dbs [ j ] ) == 0 )
+                        {
+                            name = NULL;
+                            break;
+                        }
+                    }
+                    if ( name == NULL )
+                        continue;
+                }
+
+                TRY ( db = DbPairMakeDbPair ( self, ctx, name, name, true, DbPairMakeStdDbPair ) )
+                {
+                    ON_FAIL ( DbPairAddDbPair ( self, ctx, db ) )
+                    {
+                        DbPairRelease ( db, ctx );
+                    }
+                }
+            }
+        }
+
+        KNamelistRelease ( names );
+    }
+}
+
+static
+void DbPairDefaultExplodeTbl ( DbPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    KNamelist *names;
+
+    rc = VDatabaseListTbl ( self -> sdb, & names );
+    if ( rc != 0 )
+        ERROR ( rc, "VDatabaseListTbl failed listing '%s' tables", self -> full_spec );
+    else
+    {
+        uint32_t count;
+        rc = KNamelistCount ( names, & count );
+        if ( rc != 0 )
+            ERROR ( rc, "KNamelistCount failed listing '%s' tables", self -> full_spec );
+        else if ( count > 0 )
+        {
+            uint32_t i;
+            for ( i = 0; ! FAILED () && i < count; ++ i )
+            {
+                TablePair *tbl;
+
+                const char *name;
+                rc = KNamelistGet ( names, i, & name );
+                if ( rc != 0 )
+                {
+                    ERROR ( rc, "KNamelistGet ( %u ) failed listing '%s' tables", i, self -> full_spec );
+                    break;
+                }
+
+                if ( self -> exclude_tbls != NULL )
+                {
+                    uint32_t j;
+                    for ( j = 0; self -> exclude_tbls [ j ] != NULL; ++ j )
+                    {
+                        if ( strcmp ( name, self -> exclude_tbls [ j ] ) == 0 )
+                        {
+                            name = NULL;
+                            break;
+                        }
+                    }
+                    if ( name == NULL )
+                        continue;
+                }
+
+                TRY ( tbl = DbPairMakeTablePair ( self, ctx, name, name, true, false, DbPairMakeStdTblPair ) )
+                {
+                    ON_FAIL ( DbPairAddTablePair ( self, ctx, tbl ) )
+                    {
+                        TablePairRelease ( tbl, ctx );
+                    }
+                }
+            }
+        }
+
+        KNamelistRelease ( names );
+    }
+}
+
+static
+void DbPairDefaultExplode ( DbPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+#if 0
+    TRY ( DbPairDefaultExplodeDB ( self, ctx ) )
+#endif
+    {
+        DbPairDefaultExplodeTbl ( self, ctx );
+    }
+}
+
+static
+void DbPairExplode ( DbPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    STATUS ( 2, "exploding database '%s'", self -> full_spec );
+
+    /* first, ask subclass to perform explicit explode */
+    if ( self == NULL )
+    {
+        rc_t rc = RC ( rcExe, rcDatabase, rcAccessing, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad DbPair" );
+    }
+    else
+    {
+        TRY ( ( * self -> vt -> explode ) ( self, ctx ) )
+        {
+            /* next, perform default self-explode for all dbs, tbls not excluded */
+            TRY ( DbPairDefaultExplode ( self, ctx ) )
+            {
+                /* now create metadata pair */
+                if ( self -> meta == NULL )
+                    self -> meta = DbPairExplodeMetaPair ( self, ctx );
+                if ( ! FAILED () )
+                {
+                    /* now explode all child dbs, tbls */
+                    TRY ( VectorDoUntil ( & self -> dbs, false, DbPairExplodeDbPair, ( void* ) ctx ) )
+                    {
+                        VectorDoUntil ( & self -> tbls, false, DbPairPreExplodeTablePair, ( void* ) ctx );
+                    }
+                }
+            }
+        }
+    }
+}
+
+
+/* Run
+ */
+void DbPairRun ( DbPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    const Tool *tp = ctx -> caps -> tool;
+
+    STATUS ( 1, "input database is '%s'", tp -> src_path );
+    STATUS ( 1, "output database is '%s'", tp -> dst_path );
+
+    /* the first thing to do is to explode the database
+       to create sub-dbs, sub-tables, and metadata */
+    TRY ( DbPairExplode ( self, ctx ) )
+    {
+        /* now copy */
+        DbPairCopy ( self, ctx );
+    }
+
+    if ( FAILED () )
+        STATUS ( 1, "failed processing database '%s'", self -> full_spec );
+    else
+        STATUS ( 1, "finished processing database '%s'", self -> full_spec );
+}
+
+
+/* MakeDbPair
+ */
+DbPair *DbPairMakeDbPair ( DbPair *self, const ctx_t *ctx, const char *member, const char *name, bool required,
+    DbPair* ( * make ) ( DbPair *self, const ctx_t *ctx, const VDatabase *src, VDatabase *dst, const char *name ) )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    const VDatabase *src;
+    DbPair *db = NULL;
+                
+    STATUS ( 4, "creating db pair '%s.%s'", self -> full_spec, name );
+    rc = VDatabaseOpenDBRead ( self -> sdb, & src, name );
+    if ( rc != 0 )
+    {
+        if ( required )
+            ERROR ( rc, "VDatabaseOpenDBRead: failed to open db '%s.%s'", self -> full_spec, name );
+        else
+            STATUS ( 4, "optional db '%s.%s' was not opened", self -> full_spec, name );
+    }
+    else
+    {
+#if 0
+        if ( member == NULL )
+            member = DbPairGetTblMember ( self, ctx, src, name );
+#endif
+
+        if ( ! FAILED () )
+        {
+            VDatabase *dst;
+            const Tool *tp = ctx -> caps -> tool;
+            rc = VDatabaseCreateDB ( self -> ddb, & dst, member, kcmOpen | ( tp -> db . cmode & kcmMD5 ), name );
+            if ( rc != 0 )
+                ERROR ( rc, "VDatabaseCreateDB: failed to create %s db '%s.%s'", member, self -> full_spec, name );
+            else
+            {
+                db = ( * make ) ( self, ctx, src, dst, name );
+
+                VDatabaseRelease ( dst );
+            }
+        }
+
+        VDatabaseRelease ( src );
+    }
+
+    return db;
+}
+
+
+/* MakeTablePair
+ */
+TablePair *DbPairMakeTablePair ( DbPair *self, const ctx_t *ctx, const char *member, const char *name, bool required, bool reorder,
+    TablePair* ( * make ) ( DbPair *self, const ctx_t *ctx, const VTable *src, VTable *dst, const char *name, bool reorder ) )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    const VTable *src;
+    TablePair *tbl = NULL;
+                
+    STATUS ( 4, "creating table pair '%s.%s'", self -> full_spec, name );
+    rc = VDatabaseOpenTableRead ( self -> sdb, & src, name );
+    if ( rc != 0 )
+    {
+        if ( required )
+            ERROR ( rc, "VDatabaseOpenTableRead: failed to open table '%s.%s'", self -> full_spec, name );
+        else
+            STATUS ( 4, "optional table '%s.%s' was not opened", self -> full_spec, name );
+    }
+    else
+    {
+        if ( member == NULL )
+            member = DbPairGetTblMember ( self, ctx, src, name );
+
+        if ( ! FAILED () )
+        {
+            VTable *dst;
+            const Tool *tp = ctx -> caps -> tool;
+            rc = VDatabaseCreateTable ( self -> ddb, & dst, member, kcmOpen | ( tp -> db . cmode & kcmMD5 ), name );
+            if ( rc != 0 )
+                ERROR ( rc, "VDatabaseCreateTable: failed to create %s table '%s.%s'", member, self -> full_spec, name );
+            else
+            {
+                tbl = ( * make ) ( self, ctx, src, dst, name, reorder );
+
+                VTableRelease ( dst );
+            }
+        }
+
+        VTableRelease ( src );
+    }
+
+    return tbl;
+}
+
+
+/* AddDbPair
+ *  called from implementations
+ */
+void DbPairAddDbPair ( DbPair *self, const ctx_t *ctx, DbPair *db )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    STATUS ( 4, "adding db pair '%s'", db -> full_spec );
+    rc = VectorAppend ( & self -> dbs, NULL, ( const void* ) db );
+    if ( rc != 0 )
+        SYSTEM_ERROR ( rc, "failed to add db pair '%s'", db -> full_spec );
+}
+
+
+/* AddTablePair
+ *  called from implementations
+ */
+void DbPairAddTablePair ( DbPair *self, const ctx_t *ctx, TablePair *tbl )
+{
+    if ( tbl != NULL )
+    {
+        FUNC_ENTRY ( ctx );
+
+        rc_t rc;
+
+        STATUS ( 4, "adding table pair '%s'", tbl -> full_spec );
+        rc = VectorAppend ( & self -> tbls, NULL, ( const void* ) tbl );
+        if ( rc != 0 )
+            SYSTEM_ERROR ( rc, "failed to add table pair '%s'", tbl -> full_spec );
+    }
+}
+
+
+/* MakeDirPair
+ */
+DirPair *DbPairMakeDirPair ( DbPair *self, const ctx_t *ctx, const char *name, bool required,
+    DirPair* ( * make ) ( DbPair *self, const ctx_t *ctx, const KDirectory *src, KDirectory *dst, const char *name ) )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    DirPair *dir = NULL;
+    const KDatabase *sdb;
+                
+    STATUS ( 4, "creating directory pair '%s./%s'", self -> full_spec, name );
+
+    rc = VDatabaseOpenKDatabaseRead ( self -> sdb, & sdb );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "VDatabaseOpenKDatabaseRead: failed to access KDatabase 'src.%s'", self -> full_spec );
+    else
+    {
+        KDatabase *ddb;
+        rc = VDatabaseOpenKDatabaseUpdate ( self -> ddb, & ddb );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "VDatabaseOpenKDatabaseUpdate: failed to access KDatabase 'dst.%s'", self -> full_spec );
+        else
+        {
+            const KDirectory *sdir;
+            rc = KDatabaseOpenDirectoryRead ( sdb, & sdir );
+            if ( rc != 0 )
+                INTERNAL_ERROR ( rc, "KDatabaseOpenDirectoryRead: failed to access KDirectory 'src.%s'", self -> full_spec );
+            else
+            {
+                KDirectory *ddir;
+                rc = KDatabaseOpenDirectoryUpdate ( ddb, & ddir );
+                if ( rc != 0 )
+                    INTERNAL_ERROR ( rc, "KDatabaseOpenDirectoryUpdate: failed to access KDirectory 'dst.%s'", self -> full_spec );
+                else
+                {
+                    switch ( KDirectoryPathType ( sdir, name ) )
+                    {
+                    case kptNotFound:
+                        if ( required )
+                        {
+                            rc = RC ( rcExe, rcDirectory, rcOpening, rcPath, rcNotFound );
+                            ERROR ( rc, "required directory 'src.%s./%s' does not exist", self -> full_spec, name );
+                        }
+                        break;
+
+                    case kptBadPath:
+                        rc = RC ( rcExe, rcDirectory, rcOpening, rcPath, rcInvalid );
+                        INTERNAL_ERROR ( rc, "directory path 'src.%s./%s' is invalid", self -> full_spec, name );
+                        break;
+
+                    case kptDir:
+                    case kptDir | kptAlias:
+                    {
+                        dir = ( * make ) ( self, ctx, sdir, ddir, name );
+                        break;
+                    }
+
+                    default:
+                        rc = RC ( rcExe, rcDirectory, rcOpening, rcPath, rcIncorrect );
+                        INTERNAL_ERROR ( rc, "directory path 'src.%s./%s' is not a directory", self -> full_spec, name );
+                    }
+
+                    KDirectoryRelease ( ddir );
+                }
+
+                KDirectoryRelease ( sdir );
+            }
+
+            KDatabaseRelease ( ddb );
+        }
+
+        KDatabaseRelease ( sdb );
+    }
+
+    return dir;
+}
+
+
+/* AddDirPair
+ *  called from implementations
+ */
+void DbPairAddDirPair ( DbPair *self, const ctx_t *ctx, struct DirPair *dir )
+{
+    if ( dir != NULL )
+    {
+        FUNC_ENTRY ( ctx );
+
+        rc_t rc;
+
+        STATUS ( 4, "adding directory pair '%s'", dir -> full_spec );
+        rc = VectorAppend ( & self -> dirs, NULL, ( const void* ) dir );
+        if ( rc != 0 )
+            SYSTEM_ERROR ( rc, "failed to add directory pair '%s'", dir -> full_spec );
+    }
+}
+
+
+/* Init
+ */
+void DbPairInit ( DbPair *self, const ctx_t *ctx, const DbPair_vt *vt,
+    const VDatabase *src, VDatabase *dst, const char *name, const char *opt_full_spec )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcDatabase, rcConstructing, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad DbPair" );
+        return;
+    }
+
+    memset ( self, 0, sizeof * self );
+    self -> vt = vt;
+    VectorInit ( & self -> dbs, 0, 4 );
+    VectorInit ( & self -> tbls, 0, 8 );
+    VectorInit ( & self -> dirs, 0, 8 );
+
+    if ( opt_full_spec == NULL )
+        opt_full_spec = "";
+
+    rc = VDatabaseAddRef ( self -> sdb = src );
+    if ( rc != 0 )
+        ERROR ( rc, "failed to duplicate db 'src.%s%s%s'", opt_full_spec, opt_full_spec [ 0 ] ? "." : "", name );
+    else
+    {
+        rc = VDatabaseAddRef ( self -> ddb = dst );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to duplicate db 'dst.%s%s%s'", opt_full_spec, opt_full_spec [ 0 ] ? "." : "", name );
+        else
+        {
+            char *full_spec;
+
+            self -> full_spec_size = string_size ( opt_full_spec ) + string_size ( name );
+            if ( opt_full_spec [ 0 ] != 0  )
+                ++ self -> full_spec_size;
+
+            TRY ( full_spec = MemAlloc ( ctx, self -> full_spec_size + 1, false ) )
+            {
+                if ( opt_full_spec [ 0 ] != 0 )
+                    rc = string_printf ( full_spec, self -> full_spec_size + 1, NULL, "%s.%s", opt_full_spec, name );
+                else
+                    strcpy ( full_spec, name );
+                if ( rc != 0 )
+                    ABORT ( rc, "miscalculated string size" );
+                else
+                {
+                    static const char *no_exclude [] = { NULL };
+
+                    self -> full_spec = full_spec;
+                    self -> name = full_spec;
+                    if ( opt_full_spec [ 0 ] != 0 )
+                        self -> name += string_size ( opt_full_spec ) + 1;
+
+                    self -> exclude_dbs = no_exclude;
+                    self -> exclude_tbls = no_exclude;
+                    self -> exclude_meta = no_exclude;
+
+                    KRefcountInit ( & self -> refcount, 1, "DbPair", "init", name );
+                    return;
+                }
+            }
+
+            VDatabaseRelease ( self -> ddb );
+            self -> ddb = NULL;
+        }
+
+        VDatabaseRelease ( self -> sdb );
+        self -> sdb = NULL;
+    }
+}
+
+/* Destroy
+ *  destroys superclass items
+ */
+static
+void CC DbPairReleaseDbPair ( void *item, void *data )
+{
+    const ctx_t *ctx = ( const void* ) data;
+    FUNC_ENTRY ( ctx );
+    DbPairRelease ( item, ctx );
+}
+
+static
+void CC DbPairReleaseTablePair ( void *item, void *data )
+{
+    const ctx_t *ctx = ( const void* ) data;
+    FUNC_ENTRY ( ctx );
+    TablePairRelease ( item, ctx );
+}
+
+static
+void CC DbPairReleaseDirPair ( void *item, void *data )
+{
+    const ctx_t *ctx = ( const void* ) data;
+    FUNC_ENTRY ( ctx );
+    DirPairRelease ( item, ctx );
+}
+
+void DbPairDestroy ( DbPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    VectorWhack ( & self -> dbs, DbPairReleaseDbPair, ( void* ) ctx );
+    VectorWhack ( & self -> tbls, DbPairReleaseTablePair, ( void* ) ctx );
+    VectorWhack ( & self -> dirs, DbPairReleaseDirPair, ( void* ) ctx );
+
+    MetaPairRelease ( self -> meta, ctx );
+
+    rc = VDatabaseRelease ( self -> ddb );
+    if ( rc != 0 )
+        WARN ( "VDatabaseRelease failed on 'dst.%s'", self -> full_spec );
+    VDatabaseRelease ( self -> sdb );
+
+    MemFree ( ctx, ( void* ) self -> full_spec, self -> full_spec_size + 1 );
+
+    memset ( self, 0, sizeof * self );
+}
diff --git a/tools/sra-sort/db-pair.h b/tools/sra-sort/db-pair.h
new file mode 100644
index 0000000..94bf817
--- /dev/null
+++ b/tools/sra-sort/db-pair.h
@@ -0,0 +1,208 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_db_pair_
+#define _h_sra_sort_db_pair_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_vector_
+#include <klib/vector.h>
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KDirectory;
+struct VTable;
+struct VDatabase;
+struct TablePair;
+struct MetaPair;
+struct DirPair;
+
+
+/*--------------------------------------------------------------------------
+ * DbPair
+ *  interface to pairing of source and destination tables
+ */
+typedef struct DbPair_vt DbPair_vt;
+
+typedef struct DbPair DbPair;
+struct DbPair
+{
+    /* polymorphic */
+    const DbPair_vt *vt;
+
+    /* the pair of VDatabases */
+    struct VDatabase const *sdb;
+    struct VDatabase *ddb;
+
+    /* the set of enclosed DbPairs */
+    Vector dbs;
+
+    /* the set of TablePairs */
+    Vector tbls;
+
+    /* the set of DirPairs */
+    Vector dirs;
+
+    /* the pair of KMetadata */
+    struct MetaPair *meta;
+
+    /* exclusions */
+    const char **exclude_dbs;
+    const char **exclude_tbls;
+    const char **exclude_meta;
+
+    /* simple db name */
+    const char *name;
+
+    /* full db spec */
+    size_t full_spec_size;
+    const char *full_spec;
+
+    /* reference counting */
+    KRefcount refcount;
+    uint32_t align;
+};
+
+#ifndef DBPAIR_IMPL
+#define DBPAIR_IMPL DbPair
+#endif
+
+struct DbPair_vt
+{
+    void ( * whack ) ( DBPAIR_IMPL *self, const ctx_t *ctx );
+    void ( * explode ) ( DBPAIR_IMPL *self, const ctx_t *ctx );
+    const char* ( * get_tbl_mbr ) ( const DBPAIR_IMPL *self, const ctx_t *ctx,
+        struct VTable const *src, const char *name );
+};
+
+
+/* Make
+ *  makes an object based upon open source and destination VDatabase objects
+ */
+DbPair *DbPairMake ( const ctx_t *ctx,
+    struct VDatabase const *src, struct VDatabase *dst, const char *name );
+
+
+/* Release
+ */
+void DbPairRelease ( DbPair *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+DbPair *DbPairDuplicate ( DbPair *self, const ctx_t *ctx );
+
+
+/* Copy
+ *  copy from source to destination
+ */
+void DbPairCopy ( DbPair *self, const ctx_t *ctx );
+
+
+/* Run
+ */
+void DbPairRun ( DbPair *self, const ctx_t *ctx );
+
+
+/* MakeDbPair
+ */
+DbPair *DbPairMakeDbPair ( DbPair *self, const ctx_t *ctx, const char *member, const char *name, bool required,
+    DbPair* ( * make ) ( DbPair *self, const ctx_t *ctx,
+        struct VDatabase const *src, struct VDatabase *dst, const char *name )
+     );
+
+DbPair *DbPairMakeStdDbPair ( struct DbPair *self, const ctx_t *ctx,
+    struct VDatabase const *src, struct VDatabase *dst, const char *name );
+
+
+/* MakeTablePair
+ */
+struct TablePair *DbPairMakeTablePair ( DbPair *self, const ctx_t *ctx,
+    const char *member, const char *name, bool required, bool reorder,
+    struct TablePair* ( * make ) ( DbPair *self, const ctx_t *ctx,
+        struct VTable const *src, struct VTable *dst, const char *name, bool reorder )
+     );
+
+
+/* GetTblMember
+ *  v1 schema does not preserve member name with an object
+ *  some schemas confuse types with the same name
+ */
+#define DbPairGetTblMember( self, ctx, src, name ) \
+    POLY_DISPATCH_PTR ( get_tbl_mbr, self, const DBPAIR_IMPL, ctx, src, name )
+
+
+/* AddDbPair
+ *  called from implementations
+ */
+void DbPairAddDbPair ( DbPair *self, const ctx_t *ctx, DbPair *db );
+
+
+/* AddTablePair
+ *  called from implementations
+ */
+void DbPairAddTablePair ( DbPair *self, const ctx_t *ctx, struct TablePair *tbl );
+
+
+/* MakeDirPair
+ */
+struct DirPair *DbPairMakeDirPair ( DbPair *self, const ctx_t *ctx, const char *name, bool required,
+    struct DirPair* ( * make ) ( DbPair *self, const ctx_t *ctx,
+        struct KDirectory const *src, struct KDirectory *dst, const char *name )
+     );
+
+
+/* AddDirPair
+ *  called from implementations
+ */
+void DbPairAddDirPair ( DbPair *self, const ctx_t *ctx, struct DirPair *dir );
+
+
+/* Init
+ *  initialize superclass with vt
+ *  also db pair and name
+ *  plus optional full-spec
+ */
+void DbPairInit ( DbPair *self, const ctx_t *ctx, const DbPair_vt *vt,
+    struct VDatabase const *src, struct VDatabase *dst,
+    const char *name, const char *opt_full_spec );
+
+/* Destroy
+ *  destroys superclass items
+ */
+void DbPairDestroy ( DbPair *self, const ctx_t *ctx );
+
+
+#endif /* _h_sra_sort_db_pair_ */
diff --git a/tools/sra-sort/dir-pair.c b/tools/sra-sort/dir-pair.c
new file mode 100644
index 0000000..5f7f63a
--- /dev/null
+++ b/tools/sra-sort/dir-pair.c
@@ -0,0 +1,504 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct DirPair StdDirPair;
+#define DIRPAIR_IMPL StdDirPair
+
+#include "dir-pair.h"
+#include "db-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/mmap.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( dir-pair );
+
+
+static
+void StdDirPairWhack ( StdDirPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    DirPairDestroy ( self, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static DirPair_vt StdDirPair_vt =
+{
+    StdDirPairWhack
+};
+
+
+/* Make
+ *  make a standard directory pair from existing KDirectory objects
+ */
+DirPair *DirPairMake ( const ctx_t *ctx,
+    const KDirectory *src, KDirectory *dst,
+    const char *name, const char *opt_full_spec )
+{
+    FUNC_ENTRY ( ctx );
+
+    StdDirPair *dir;
+
+    TRY ( dir = MemAlloc ( ctx, sizeof * dir, false ) )
+    {
+        TRY ( DirPairInit ( dir, ctx, & StdDirPair_vt, src, dst, name, opt_full_spec ) )
+        {
+            return dir;
+        }
+
+        MemFree ( ctx, dir, sizeof * dir );
+    }
+
+    return NULL;
+}
+
+
+DirPair *DbPairMakeStdDirPair ( DbPair *self, const ctx_t *ctx,
+    const KDirectory *src, KDirectory *dst, const char *name )
+{
+    FUNC_ENTRY ( ctx );
+    return DirPairMake ( ctx, src, dst, name, self -> full_spec );
+}
+
+
+/* Release
+ *  called by db at end of copy
+ */
+void DirPairRelease ( DirPair *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "DirPair" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+            break;
+        case krefZero:
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcDirectory, rcDestroying, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to release DirPair" );
+        }
+    }
+}
+
+/* Duplicate
+ */
+DirPair *DirPairDuplicate ( DirPair *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "DirPair" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcDirectory, rcAttaching, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to duplicate DirPair" );
+            return NULL;
+        }
+    }
+
+    return ( DirPair* ) self;
+}
+
+
+/* Copy
+ *  copy from source to destination directory
+ */
+typedef struct DirPairCopyParams DirPairCopyParams;
+struct DirPairCopyParams
+{
+    const DirPair *self;
+    const ctx_t *ctx;
+    char *relpath;
+    size_t psize;
+    const KDirectory *src;
+    KDirectory *dst;
+};
+
+static
+rc_t DirPairCopyDir ( const DirPair *self, const ctx_t *ctx,
+    const KDirectory *src, KDirectory *dst, char *relpath, size_t psize );
+
+static
+rc_t DirPairCopyFile ( const DirPair *self, const ctx_t *ctx,
+    const KDirectory *src, KDirectory *dst, char *relpath )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* get source access mode */
+    uint32_t access;
+    rc_t rc = KDirectoryAccess ( src, & access, relpath );
+    if ( rc != 0 )
+    {
+        ERROR ( rc, "failed to determine access mode of file 'dst.%.*s%s'",
+                self -> owner_spec_size, self -> full_spec, relpath );
+    }
+    else
+    {
+        KFile *d;
+        rc = KDirectoryCreateFile ( dst, & d, false, access, kcmInit | kcmParents, relpath );
+        if ( rc != 0 )
+        {
+            ERROR ( rc, "failed to create file 'dst.%.*s%s'",
+                    self -> owner_spec_size, self -> full_spec, relpath );
+        }
+        else
+        {
+            const KFile *s;
+            /* open source */
+            rc = KDirectoryOpenFileRead ( src, & s, relpath );
+            if ( rc != 0 )
+            {
+                ERROR ( rc, "failed to open file 'src.%.*s%s'",
+                        self -> owner_spec_size, self -> full_spec, relpath );
+            }
+            else
+            {
+                const KMMap *mm;
+                rc = KMMapMakeMaxRead ( & mm, s );
+                if ( rc != 0 )
+                {
+                    ERROR ( rc, "failed to map file 'src.%.*s%s'",
+                            self -> owner_spec_size, self -> full_spec, relpath );
+                }
+                else
+                {
+                    uint64_t mm_pos;
+
+                    /* get initial position and size */
+                    rc = KMMapPosition ( mm, & mm_pos );
+                    if ( rc != 0 )
+                    {
+                        ERROR ( rc, "failed to determine position of map file 'src.%.*s%s'",
+                                self -> owner_spec_size, self -> full_spec, relpath );
+                    }
+                    else
+                    {
+                        size_t mm_size;
+                        rc = KMMapSize ( mm, & mm_size );
+                        if ( rc != 0 )
+                        {
+                            ERROR ( rc, "failed to determine size of map file 'src.%.*s%s'",
+                                    self -> owner_spec_size, self -> full_spec, relpath );
+                        }
+                        else while ( mm_size != 0 )
+                        {
+                            size_t num_writ;
+                            const void *mm_addr;
+
+                            /* access address */
+                            rc = KMMapAddrRead ( mm, & mm_addr );
+                            if ( rc != 0 )
+                            {
+                                ERROR ( rc, "failed to access address of map file 'src.%.*s%s'",
+                                        self -> owner_spec_size, self -> full_spec, relpath );
+                                break;
+                            }
+
+                            /* write region to output */
+                            rc = KFileWriteAll ( d, mm_pos, mm_addr, mm_size, & num_writ );
+                            if ( rc != 0 )
+                            {
+                                ERROR ( rc, "failed to write to file 'dst.%.*s%s'",
+                                        self -> owner_spec_size, self -> full_spec, relpath );
+                                break;
+                            }
+                            if ( num_writ != mm_size )
+                            {
+                                rc = RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+                                ERROR ( rc, "failed to write to file 'dst.%.*s%s'",
+                                        self -> owner_spec_size, self -> full_spec, relpath );
+                                break;
+                            }
+
+                            /* now try to shift region */
+                            mm_pos += mm_size;
+                            rc = KMMapReposition ( mm, mm_pos, & mm_size );
+                            if ( rc != 0 )
+                            {
+                                if ( GetRCState ( rc ) == rcInvalid )
+                                    rc = 0;
+                                else
+                                {
+                                    ERROR ( rc, "failed to remap file 'src.%.*s%s'",
+                                            self -> owner_spec_size, self -> full_spec, relpath );
+                                }
+                                break;
+                            }
+                        }
+                    }
+
+                    KMMapRelease ( mm );
+                }
+
+                KFileRelease ( s );
+            }
+
+            KFileRelease ( d );
+        }
+    }
+
+    return rc;
+}
+
+static
+rc_t DirPairCopyAlias ( const DirPair *self, const ctx_t *ctx,
+    const KDirectory *src, KDirectory *dst, char *relpath )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+#if WINDOWS
+    rc = RC ( rcExe, rcAlias, rcCopying, rcFunction, rcUnsupported );
+    ERROR ( rc, "Windows... failed to create alias 'dst.%.*s%s'",
+            self -> owner_spec_size, self -> full_spec, relpath );
+#else
+    char apath [ 4096 ];
+
+    /* resolve the alias */
+    rc = KDirectoryResolveAlias ( src, false, apath, sizeof apath, relpath );    
+    if ( rc != 0 )
+    {
+        ERROR ( rc, "failed to resolve alias 'src.%.*s%s'",
+                self -> owner_spec_size, self -> full_spec, relpath );
+    }
+    else
+    {
+        rc = KDirectoryCreateAlias ( dst, 0777, kcmInit, apath, relpath );
+        if ( rc != 0 )
+        {
+            ERROR ( rc, "failed to create alias 'dst.%.*s%s'",
+                    self -> owner_spec_size, self -> full_spec, relpath );
+        }
+    }
+#endif
+
+    return rc;
+}
+
+static
+rc_t CC DirPairCopyEntry ( const KDirectory *local, uint32_t type, const char *name, void *data )
+{
+    DirPairCopyParams *pb = data;
+    const ctx_t *ctx = pb -> ctx;
+
+    FUNC_ENTRY ( ctx );
+
+    const DirPair *self = pb -> self;
+    char *relpath = pb -> relpath;
+    size_t num_writ, psize = pb -> psize;
+
+    /* since we are walking two directories in parallel,
+       build a path relative to each base directory and go */
+    rc_t rc = string_printf ( & relpath [ psize ], 4096 - psize, & num_writ, "/%s", name );
+    if ( rc != 0 )
+    {
+        ERROR ( rc, "failed to build path for entry '%.*s%.*s/%s'",
+                self -> owner_spec_size, self -> full_spec,
+                ( uint32_t ) psize, relpath, name );
+        return rc;
+    }
+
+    /* see what type of entry we have */
+    switch ( type )
+    {
+    case kptFile:
+        return DirPairCopyFile ( pb -> self, ctx, pb -> src, pb -> dst, relpath );
+    case kptDir:
+        return DirPairCopyDir ( pb -> self, ctx, pb -> src, pb -> dst, relpath, psize + num_writ );
+    case kptFile | kptAlias:
+    case kptDir | kptAlias:
+        return DirPairCopyAlias ( pb -> self, ctx, pb -> src, pb -> dst, relpath );
+    }
+
+    rc = RC ( rcExe, rcDirectory, rcVisiting, rcType, rcUnsupported );
+    ERROR ( rc, "cannot copy entry '%.*s%s' - not a supported file system type",
+            self -> owner_spec_size, self -> full_spec, relpath );
+    return rc;
+}
+
+static
+rc_t DirPairCopyDir ( const DirPair *self, const ctx_t *ctx,
+    const KDirectory *src, KDirectory *dst, char *relpath, size_t psize )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* get source access mode */
+    uint32_t access;
+    rc_t rc = KDirectoryAccess ( src, & access, relpath );
+    if ( rc != 0 )
+    {
+        ERROR ( rc, "failed to determine access mode of directory 'src.%.*s%s'",
+                self -> owner_spec_size, self -> full_spec, relpath );
+    }
+    else
+    {
+        /* create the destination directory */
+        rc = KDirectoryCreateDir ( dst, access, kcmOpen | kcmParents, relpath );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to create directory 'dst.%.*s%s'",
+                    self -> owner_spec_size, self -> full_spec, relpath );
+        else
+        {
+            DirPairCopyParams pb;
+
+            pb . self = self;
+            pb . ctx = ctx;
+            pb . relpath = relpath;
+            pb . psize = psize;
+            pb . src = src;
+            pb . dst = dst;
+
+            /* going to perform shallow copy */
+            rc = KDirectoryVisit ( src, false, DirPairCopyEntry, & pb, relpath );
+        }
+    }
+
+    return rc;
+}
+
+
+void DirPairCopy ( DirPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    size_t psize;
+    char relpath [ 4096 ];
+
+    STATUS ( 2, "copying directory '%s'", self -> full_spec );
+
+    rc = string_printf ( relpath, sizeof relpath, & psize, "./%s", self -> name );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "failed to build initial path string for '%s'", self -> full_spec );
+    else
+    {
+        DirPairCopyDir ( self, ctx, self -> sdir, self -> ddir, relpath, psize );
+    }
+}
+
+
+/* Init
+ */
+void DirPairInit ( DirPair *self, const ctx_t *ctx, const DirPair_vt *vt,
+    const KDirectory *src, KDirectory *dst,
+    const char *name, const char *full_spec )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcDirectory, rcConstructing, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad DirPair" );
+        return;
+    }
+
+    memset ( self, 0, sizeof * self );
+    self -> vt = vt;
+
+    rc = KDirectoryAddRef ( self -> sdir = src );
+    if ( rc != 0 )
+        ERROR ( rc, "failed to duplicate dir 'src.%s./%s'", full_spec, name );
+    else
+    {
+        rc = KDirectoryAddRef ( self -> ddir = dst );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to duplicate dir 'dst.%s./%s'", full_spec, name );
+        else
+        {
+            char *new_full_spec;
+
+            self -> owner_spec_size = ( uint32_t ) string_size ( full_spec );
+            self -> full_spec_size = self -> owner_spec_size + string_size ( name ) + 2;
+
+            TRY ( new_full_spec = MemAlloc ( ctx, self -> full_spec_size + 1, false ) )
+            {
+                rc = string_printf ( new_full_spec, self -> full_spec_size + 1, NULL, "%s./%s", full_spec, name );
+                if ( rc != 0 )
+                    ABORT ( rc, "miscalculated string size" );
+                else
+                {
+                    self -> full_spec = new_full_spec;
+                    self -> name = new_full_spec + self -> owner_spec_size + 2;
+
+                    KRefcountInit ( & self -> refcount, 1, "DirPair", "init", name );
+                    return;
+                }
+            }
+
+            KDirectoryRelease ( self -> ddir );
+            self -> ddir = NULL;
+        }
+
+        KDirectoryRelease ( self -> sdir );
+        self -> sdir = NULL;
+    }
+}
+
+/* Destroy
+ */
+void DirPairDestroy ( DirPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    rc = KDirectoryRelease ( self -> ddir );
+    if ( rc != 0 )
+        WARN ( "KDirectoryRelease failed on 'dst.%s'", self -> full_spec );
+    KDirectoryRelease ( self -> sdir );
+
+    MemFree ( ctx, ( void* ) self -> full_spec, self -> full_spec_size + 1 );
+
+    memset ( self, 0, sizeof * self );
+}
diff --git a/tools/sra-sort/dir-pair.h b/tools/sra-sort/dir-pair.h
new file mode 100644
index 0000000..7bccb93
--- /dev/null
+++ b/tools/sra-sort/dir-pair.h
@@ -0,0 +1,124 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_dir_pair_
+#define _h_sra_sort_dir_pair_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct DbPair;
+struct KDirectory;
+
+
+/*--------------------------------------------------------------------------
+ * DirPair
+ *  interface to pairing of source and destination directories
+ */
+typedef struct DirPair_vt DirPair_vt;
+
+typedef struct DirPair DirPair;
+struct DirPair
+{
+    /* polymorphic */
+    const DirPair_vt *vt;
+
+    /* the pair of KDirectories */
+    struct KDirectory const *sdir;
+    struct KDirectory *ddir;
+
+    /* simple directory name */
+    const char *name;
+
+    /* full directory spec */
+    size_t full_spec_size;
+    const char *full_spec;
+
+    /* reference counting */
+    KRefcount refcount;
+
+    /* owner spec size */
+    uint32_t owner_spec_size;
+};
+
+#ifndef DIRPAIR_IMPL
+#define DIRPAIR_IMPL DirPair
+#endif
+
+struct DirPair_vt
+{
+    void ( * whack ) ( DIRPAIR_IMPL *self, const ctx_t *ctx );
+};
+
+
+/* Make
+ *  make a standard directory pair from existing KDirectory objects
+ */
+DirPair *DirPairMake ( const ctx_t *ctx,
+    struct KDirectory const *src, struct KDirectory *dst,
+    const char *name, const char *full_spec );
+
+DirPair *DbPairMakeStdDirPair ( struct DbPair *self, const ctx_t *ctx,
+    struct KDirectory const *src, struct KDirectory *dst, const char *name );
+
+
+/* Release
+ *  called by db at end of copy
+ */
+void DirPairRelease ( DirPair *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+DirPair *DirPairDuplicate ( DirPair *self, const ctx_t *ctx );
+
+
+/* Copy
+ *  copy from source to destination directory
+ */
+void DirPairCopy ( DirPair *self, const ctx_t *ctx );
+
+
+/* Init
+ */
+void DirPairInit ( DirPair *self, const ctx_t *ctx, const DirPair_vt *vt,
+    struct KDirectory const *src, struct KDirectory *dst,
+    const char *name, const char *opt_full_spec );
+
+/* Destroy
+ */
+void DirPairDestroy ( DirPair *self, const ctx_t *ctx );
+
+
+#endif /* _h_sra_sort_dir_pair_ */
diff --git a/tools/sra-sort/dump-blob-boundaries.c b/tools/sra-sort/dump-blob-boundaries.c
new file mode 100644
index 0000000..6639d8a
--- /dev/null
+++ b/tools/sra-sort/dump-blob-boundaries.c
@@ -0,0 +1,203 @@
+#include <kdb/manager.h>
+#include <kdb/database.h>
+#include <kdb/table.h>
+#include <kdb/column.h>
+#include <kdb/namelist.h>
+#include <klib/namelist.h>
+#include <klib/rc.h>
+
+#include <stdio.h>
+
+static int64_t blob_limit = 10;
+
+static
+uint32_t dump_col ( const KColumn *col, const char *dbname, const char *tblname, const char *colname )
+{
+    rc_t rc = 0;
+    int64_t row, first;
+    const KColumnBlob *blob;
+    uint32_t count, num_blobs;
+
+    for ( num_blobs = 0, row = 1; rc == 0 && num_blobs < blob_limit; ++ num_blobs, row = first + count )
+    {
+        rc = KColumnOpenBlobRead ( col, & blob, row );
+        if ( rc == 0 )
+        {
+            rc = KColumnBlobIdRange ( blob, & first, & count );
+            if ( rc != 0 )
+                fprintf ( stderr, "failed to get row-range for blob containing row '%s.%s.%s.%ld'\n", dbname, tblname, colname, row );
+            else
+            {
+                size_t num_read, remaining;
+                rc = KColumnBlobRead ( blob, 0, & first, 0, & num_read, & remaining );
+                if ( rc != 0 )
+                    fprintf ( stderr, "failed to get size of blob containing row '%s.%s.%s.%ld'\n", dbname, tblname, colname, row );
+                else
+                {
+                    printf ( "  %ld .. %ld ( %u rows ), %zu bytes\n", first, first + count - 1, count, remaining );
+                }
+            }
+
+            KColumnBlobRelease ( blob );
+        }
+        else if ( GetRCState ( rc ) == rcNotFound )
+            return num_blobs;
+        else
+        {
+            fprintf ( stderr, "failed to open blob for row '%s.%s.%s.%ld'\n", dbname, tblname, colname, row );
+        }
+    }
+
+    for ( ; rc == 0; ++ num_blobs, row = first + count )
+    {
+        rc = KColumnOpenBlobRead ( col, & blob, row );
+        if ( rc == 0 )
+        {
+            rc = KColumnBlobIdRange ( blob, & first, & count );
+            KColumnBlobRelease ( blob );
+        }
+    }
+
+    return num_blobs;
+}
+
+static
+void dump_col_name ( const KTable *tbl, const char *dbname, const char *tblname, const char *colname )
+{
+    const KColumn *col;
+    rc_t rc = KTableOpenColumnRead ( tbl, & col, colname );
+    if ( rc != 0 )
+        fprintf ( stderr, "failed to open column '%s.%s.%s'\n", dbname, tblname, colname );
+    else
+    {
+        uint32_t num_blobs;
+        printf ( "COLUMN '%s.%s.%s'\n", dbname, tblname, colname );
+        num_blobs = dump_col ( col, dbname, tblname, colname );
+        KColumnRelease ( col );
+        if ( num_blobs > blob_limit )
+            printf ( "  %u blobs in column\n", num_blobs );
+    }
+}
+
+static
+void dump_tbl ( const KTable *tbl, const char *tblname, int argc, char *argv [] )
+{
+    if ( argc >= 4 )
+    {
+        int i;
+        for ( i = 3; i < argc; ++ i )
+        {
+            dump_col_name ( tbl, argv [ 1 ], tblname, argv [ i ] );
+        }
+    }
+    else
+    {
+        KNamelist *names;
+        rc_t rc = KTableListCol ( tbl, & names );
+        if ( rc != 0 )
+            fprintf ( stderr, "failed to list columns for tbl '%s.%s'\n", argv [ 1 ], tblname );
+        else
+        {
+            uint32_t count;
+            rc = KNamelistCount ( names, & count );
+            if ( rc != 0 )
+                fprintf ( stderr, "failed to count columns for tbl '%s.%s'\n", argv [ 1 ], tblname );
+            else
+            {
+                uint32_t i;
+                for ( i = 0; i < count; ++ i )
+                {
+                    const char *name;
+                    rc = KNamelistGet ( names, i, & name );
+                    if ( rc != 0 )
+                        fprintf ( stderr, "failed to access column name [ %u ] for tbl '%s.%s'\n", i, argv [ 1 ], tblname );
+                    else
+                    {
+                        dump_col_name ( tbl, argv [ 1 ], tblname, name );
+                    }
+                }
+            }
+
+            KNamelistRelease ( names );
+        }
+    }
+}
+
+static
+void dump_tbl_name ( const KDatabase *db, const char *tblname, int argc, char *argv [] )
+{
+    const KTable *tbl;
+    rc_t rc = KDatabaseOpenTableRead ( db, & tbl, tblname );
+    if ( rc != 0 )
+        fprintf ( stderr, "failed to open table '%s.%s'\n", argv [ 1 ], tblname );
+    else
+    {
+        dump_tbl ( tbl, tblname, argc, argv );
+        KTableRelease ( tbl );
+    }
+}
+
+static
+void dump_db ( const KDatabase *db, int argc, char *argv [] )
+{
+    if ( argc >= 3 )
+        dump_tbl_name ( db, argv [ 2 ], argc, argv );
+    else
+    {
+        KNamelist *names;
+        rc_t rc = KDatabaseListTbl ( db, & names );
+        if ( rc != 0 )
+            fprintf ( stderr, "failed to list tables for db '%s'\n", argv [ 1 ] );
+        else
+        {
+            uint32_t count;
+            rc = KNamelistCount ( names, & count );
+            if ( rc != 0 )
+                fprintf ( stderr, "failed to count tables for db '%s'\n", argv [ 1 ] );
+            else
+            {
+                uint32_t i;
+                for ( i = 0; i < count; ++ i )
+                {
+                    const char *name;
+                    rc = KNamelistGet ( names, i, & name );
+                    if ( rc != 0 )
+                        fprintf ( stderr, "failed to access table name [ %u ] for db '%s'\n", i, argv [ 1 ] );
+                    else
+                    {
+                        dump_tbl_name ( db, name, argc, argv );
+                    }
+                }
+            }
+
+            KNamelistRelease ( names );
+        }
+    }
+}
+
+int main ( int argc, char *argv [] )
+{
+    if ( argc < 2 )
+        printf ( "Usage: %s database [ table [ col ... ] ]\n", argv [ 0 ] );
+    else
+    {
+        const KDBManager *mgr;
+        rc_t rc = KDBManagerMakeRead ( & mgr, NULL );
+        if ( rc == 0 )
+        {
+            const KDatabase *db;
+            rc = KDBManagerOpenDBRead ( mgr, & db, argv [ 1 ] );
+            if ( rc != 0 )
+                fprintf ( stderr, "failed to open database '%s'\n", argv [ 1 ] );
+            else
+            {
+                dump_db ( db, argc, argv );
+                KDatabaseRelease ( db );
+            }
+
+            KDBManagerRelease ( mgr );
+        }
+    }
+
+    return 0;
+}
diff --git a/tools/sra-sort/except.c b/tools/sra-sort/except.c
new file mode 100644
index 0000000..c95d7e0
--- /dev/null
+++ b/tools/sra-sort/except.c
@@ -0,0 +1,231 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "caps.h"
+#include "ctx.h"
+#include "except.h"
+#include "status.h"
+
+#include <klib/rc.h>
+#include <klib/log.h>
+#include <klib/status.h>
+#include <klib/printf.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+
+FILE_ENTRY ( except );
+
+
+/*--------------------------------------------------------------------------
+ * exception-related activities
+ */
+
+static
+rc_t log_msg ( const ctx_t *ctx, uint32_t lineno, KLogLevel lvl, const char *msg )
+{
+#if _DEBUGGING
+    const ctx_info_t *ctx_info = ctx -> info;
+    return pLogMsg ( lvl, "$(mod)/$(file).c:$(line): $(func): $(msg)",
+                     "mod=%s,file=%s,line=%u,func=%s,msg=%s",
+                     ctx_info -> mod,
+                     ctx_info -> file,
+                     lineno,
+                     ctx_info -> func,
+                     msg );
+#else
+    return LogMsg ( lvl, msg );
+#endif
+}
+
+static
+rc_t log_err ( const ctx_t *ctx, uint32_t lineno, KLogLevel lvl, rc_t rc, const char *msg )
+{
+#if _DEBUGGING
+    const ctx_info_t *ctx_info = ctx -> info;
+    return pLogErr ( lvl, rc, "$(mod)/$(file).c:$(line): $(func): $(msg)",
+                     "mod=%s,file=%s,line=%u,func=%s,msg=%s",
+                     ctx_info -> mod,
+                     ctx_info -> file,
+                     lineno,
+                     ctx_info -> func,
+                     msg );
+#else
+    return LogErr ( lvl, rc, msg );
+#endif
+}
+
+static
+rc_t status_msg ( const ctx_t *ctx, uint32_t lineno, uint32_t level, const char *msg )
+{
+#if _DEBUGGING
+    const ctx_info_t *ctx_info = ctx -> info;
+    return KStsMsg ( "%s/%s.c:%u: %s: [ %u ] %s",
+                     ctx_info -> mod,
+                     ctx_info -> file,
+                     lineno,
+                     ctx_info -> func,
+                     level,
+                     msg );
+#else
+    return KStsMsg ( "%s", msg );
+#endif
+}
+
+
+/* Annotate
+ *  make some annotation
+ *  but not an error
+ */
+void Annotate ( const ctx_t *ctx, uint32_t lineno, KLogLevel level, const char *msg, ... )
+{
+    rc_t rc2;
+    size_t num_writ;
+    char buff [ 8 * 1024 ];
+
+    va_list args;
+    va_start ( args, msg );
+
+    rc2 = string_vprintf ( buff, sizeof buff, & num_writ, msg, args );
+    if ( rc2 != 0 )
+        log_err ( ctx, lineno, klogInt, rc2, "Annotate failure" );
+    else
+        log_msg ( ctx, lineno, level, buff );
+
+    va_end ( args );
+}
+
+
+/* Error
+ *  make an annotation
+ *  record an error as an rc_t
+ */
+void Error ( const ctx_t *ctx, uint32_t lineno, KLogLevel level, rc_t rc, const char *msg, ... )
+{
+    rc_t rc2;
+    ctx_t *mctx;
+    size_t num_writ;
+    char buff [ 8 * 1024 ];
+
+    va_list args;
+    va_start ( args, msg );
+
+    rc2 = string_vprintf ( buff, sizeof buff, & num_writ, msg, args );
+    if ( rc2 != 0 )
+        log_err ( ctx, lineno, klogInt, rc2, "Error annotation failure" );
+    else
+        log_err ( ctx, lineno, level, rc, buff );
+
+    va_end ( args );
+
+    for ( mctx = ( ctx_t* ) ctx; mctx != NULL && mctx -> rc == 0; mctx = ( ctx_t* ) mctx -> caller )
+        mctx -> rc = rc;
+}
+
+
+/* Abort
+ *  make an annotation
+ *  record an error as an rc_t
+ *  exit process
+ */
+void Abort ( const ctx_t *ctx, uint32_t lineno, rc_t rc, const char *msg, ... )
+{
+    rc_t rc2;
+    ctx_t *mctx;
+    size_t num_writ;
+    char buff [ 8 * 1024 ];
+
+    va_list args;
+    va_start ( args, msg );
+
+    rc2 = string_vprintf ( buff, sizeof buff, & num_writ, msg, args );
+    if ( rc2 != 0 )
+        log_err ( ctx, lineno, klogFatal, rc2, "Abort annotation failure" );
+    else
+        log_err ( ctx, lineno, klogFatal, rc, buff );
+
+    va_end ( args );
+
+    for ( mctx = ( ctx_t* ) ctx; mctx != NULL && mctx -> rc == 0; mctx = ( ctx_t* ) mctx -> caller )
+        mctx -> rc = rc;
+
+    exit ( -1 );
+}
+
+
+/* Clear
+ *  clears annotation and error
+ */
+void ClearAnnotation ( const ctx_t *ctx )
+{
+    ClearError ( ctx );
+}
+
+
+/* ClearError
+ *  clears error, leaving any annotation
+ */
+void ClearError ( const ctx_t *ctx )
+{
+    ctx_t *mctx;
+    for ( mctx = ( ctx_t* ) ctx; mctx != NULL && mctx -> rc != 0; mctx = ( ctx_t* ) mctx -> caller )
+        mctx -> rc = 0;
+}
+
+
+/* Status
+ *  report status
+ */
+void Status ( const ctx_t *ctx, uint32_t lineno, uint32_t level, const char *msg, ... )
+{
+    if ( KStsLevelGet () >= level )
+    {
+        rc_t rc2;
+        size_t num_writ;
+        char buff [ 8 * 1024 ];
+
+        va_list args;
+        va_start ( args, msg );
+
+        rc2 = string_vprintf ( buff, sizeof buff, & num_writ, msg, args );
+        if ( rc2 != 0 )
+            log_err ( ctx, lineno, klogInt, rc2, "Status failure" );
+        else
+            status_msg ( ctx, lineno, level, buff );
+
+        va_end ( args );
+    }
+}
+
+/* POLY_DISPATCH
+ *  dispatch a polymorphic message
+ */
+void null_self_error ( const ctx_t *ctx, uint32_t lineno, const char *msg )
+{
+    rc_t rc = RC ( rcExe, rcFunction, rcResolving, rcSelf, rcNull );
+    Error ( ctx, lineno, klogInt, rc, "cannot dispatch message '%s'", msg );
+}
diff --git a/tools/sra-sort/except.h b/tools/sra-sort/except.h
new file mode 100644
index 0000000..911149b
--- /dev/null
+++ b/tools/sra-sort/except.h
@@ -0,0 +1,160 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_except_
+#define _h_sra_sort_except_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_log_
+#include <klib/log.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * exception-related macros
+ */
+
+
+/* ANNOTATE
+ *  make some annotation
+ *  but not an error
+ */
+void Annotate ( const ctx_t *ctx, uint32_t lineno, KLogLevel level, const char *msg, ... );
+#define ANNOTATE( msg, ... ) \
+    Annotate ( ctx, __LINE__, klogInfo, msg, ## __VA_ARGS__ )
+
+
+/* WARN
+ *  make some annotation
+ *  but not an error
+ */
+#define WARN( msg, ... ) \
+    Annotate ( ctx, __LINE__, klogWarn, msg, ## __VA_ARGS__ )
+
+
+/* INFO_ERROR
+ *  make an annotation
+ *  record an informational error as an rc_t
+ */
+void Error ( const ctx_t *ctx, uint32_t lineno, KLogLevel level, rc_t rc, const char *msg, ... );
+#define INFO_ERROR( rc, msg, ... ) \
+    Error ( ctx, __LINE__, klogInfo, rc, msg, ## __VA_ARGS__ )
+
+
+/* ERROR
+ *  make an annotation
+ *  record an error as an rc_t
+ */
+#ifdef ERROR
+#undef ERROR
+#endif
+#define ERROR( rc, msg, ... ) \
+    Error ( ctx, __LINE__, klogErr, rc, msg, ## __VA_ARGS__ )
+
+
+/* INTERNAL_ERROR
+ *  make an annotation
+ *  record an internal error as an rc_t
+ */
+#define INTERNAL_ERROR( rc, msg, ... ) \
+    Error ( ctx, __LINE__, klogInt, rc, msg, ## __VA_ARGS__ )
+
+
+/* SYSTEM_ERROR
+ *  make an annotation
+ *  record a system error as an rc_t
+ */
+#define SYSTEM_ERROR( rc, msg, ... ) \
+    Error ( ctx, __LINE__, klogSys, rc, msg, ## __VA_ARGS__ )
+
+
+/* ABORT
+ *  make an annotation
+ *  record an error as an rc_t
+ *  exit process
+ */
+void Abort ( const ctx_t *ctx, uint32_t lineno, rc_t rc, const char *msg, ... );
+#define ABORT( rc, msg, ... )                        \
+    Abort ( ctx, __LINE__, rc, msg, ## __VA_ARGS__ )
+
+
+/* FAILED
+ *  a test of rc within ctx_t
+ */
+#ifdef FAILED
+#undef FAILED
+#endif
+#define FAILED() \
+    ( ctx -> rc != 0 )
+
+
+/* TRY
+ *  another C language "try" macro
+ */
+#define TRY( expr ) \
+    expr; \
+    if ( ! FAILED () )
+
+
+/* CATCH
+ *  attempts to catch rc on certain types
+ */
+#define CATCH( obj_code, state_code ) \
+    else if ( GetRCObject ( ctx -> rc ) == obj_code && GetRCState ( ctx -> rc ) == state_code )
+#define CATCH_STATE( state_code ) \
+    else if ( GetRCState ( ctx -> rc ) == state_code )
+#define CATCH_OBJ( obj_code ) \
+    else if ( GetRCObject ( ctx -> rc ) == obj_code )
+#define CATCH_ALL() \
+    else
+
+/* ON_FAIL
+ */
+#define ON_FAIL( expr ) \
+    expr; \
+    if ( FAILED () )
+
+
+/* CLEAR
+ *  clears annotation and error
+ */
+void ClearAnnotation ( const ctx_t *ctx );
+#define CLEAR() \
+    ClearAnnotation ( ctx )
+
+
+/* CLEAR_ERR
+ *  clears error, leaving any annotation
+ */
+void ClearError ( const ctx_t *ctx );
+#define CLEAR_ERR() \
+    ClearError ( ctx )
+
+
+#endif
diff --git a/tools/sra-sort/gcc-ped.sh b/tools/sra-sort/gcc-ped.sh
new file mode 100755
index 0000000..7db5891
--- /dev/null
+++ b/tools/sra-sort/gcc-ped.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+# test gcc for support of supplied parameters
+
+if test $# -ge 4
+then
+    if ( echo "typedef int x;" | gcc -c -xc - -o /dev/null $1 $2 $3 $4 > /dev/null 2>&1 )
+    then
+	echo $1 $2 $3 $4
+	exit 0
+    fi
+fi
+
+if test $# -ge 3
+then
+    if ( echo "typedef int x;" | gcc -c -xc - -o /dev/null $1 $2 $3 > /dev/null 2>&1 )
+    then
+	echo $1 $2 $3
+	exit 0
+    fi
+fi
+
+if test $# -ge 2
+then
+    if ( echo "typedef int x;" | gcc -c -xc - -o /dev/null $1 $2 > /dev/null 2>&1 )
+    then
+	echo $1 $2
+	exit 0
+    fi
+fi
+
+if test $# -ge 1
+then
+    if ( echo "typedef int x;" | gcc -c -xc - -o /dev/null $1 > /dev/null 2>&1 )
+    then
+	echo $1
+	exit 0
+    fi
+fi
diff --git a/tools/sra-sort/glob-poslen.c b/tools/sra-sort/glob-poslen.c
new file mode 100644
index 0000000..4f028a4
--- /dev/null
+++ b/tools/sra-sort/glob-poslen.c
@@ -0,0 +1,349 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+struct GlobalPosLenReader;
+#define COLREADER_IMPL struct GlobalPosLenReader
+
+#include "glob-poslen.h"
+#include "tbl-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "map-file.h"
+#include "sra-sort.h"
+
+#include <insdc/insdc.h>
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+#include <klib/printf.h>
+#include <klib/sort.h>
+#include <klib/rc.h>
+
+#include <string.h>
+#include <assert.h>
+
+FILE_ENTRY ( glob-poslen );
+
+
+/*--------------------------------------------------------------------------
+ * GlobalPosLenReader
+ */
+struct GlobalPosLenReader
+{
+    ColumnReader dad;
+
+    uint64_t poslen;
+
+    const VCursor *curs;
+    uint32_t idx [ 3 ];
+
+    uint32_t chunk_size;
+
+    size_t full_spec_size;
+    char full_spec [ 1 ];
+};
+
+static
+void GlobalPosLenReaderWhack ( GlobalPosLenReader *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    VCursorRelease ( self -> curs );
+    MemFree ( ctx, self, sizeof * self + self -> full_spec_size );
+}
+
+static
+const char *GlobalPosLenReaderFullSpec ( const GlobalPosLenReader *self, const ctx_t *ctx )
+{
+    return self -> full_spec;
+}
+
+static
+uint64_t GlobalPosLenReaderIdRange ( const GlobalPosLenReader *self, const ctx_t *ctx, int64_t *opt_first )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    uint64_t count;
+
+    rc = VCursorIdRange ( self -> curs, 0, opt_first, & count );
+    if ( rc != 0 )
+        ERROR ( rc, "VCursorIdRange failed on '%s'", self -> full_spec );
+
+    return count;
+}
+
+static
+void GlobalPosLenReaderPreCopy ( GlobalPosLenReader *self, const ctx_t *ctx )
+{
+}
+
+static
+void GlobalPosLenReaderPostCopy ( GlobalPosLenReader *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    /* called after a single copy
+       assumes that entire row-range of table has been copied */
+
+    rc = VCursorRelease ( self -> curs );
+    if ( rc != 0 )
+        ERROR ( rc, "VCursorRelease failed on '%s'", self -> full_spec );
+    else
+        self -> curs = NULL;
+}
+
+static
+const void *GlobalPosLenReaderReadGlobal ( GlobalPosLenReader *self, const ctx_t *ctx,
+    int64_t row_id, uint32_t *elem_bits, uint32_t *boff, uint32_t *row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    const void *base;
+
+    assert ( elem_bits != NULL );
+    assert ( boff != NULL );
+    assert ( row_len != NULL );
+
+    rc = VCursorCellDataDirect ( self -> curs, row_id, self -> idx [ 0 ],
+        elem_bits, & base, boff, row_len );
+    if ( rc != 0 )
+        ERROR ( rc, "failed to read REF_LEN for row %ld", row_id );
+    else
+    {
+        INSDC_coord_len ref_len;
+        assert ( * boff == 0 );
+        assert ( * row_len == 1 );
+        assert ( * elem_bits == sizeof ref_len * 8 );
+        ref_len = ( ( const INSDC_coord_len* ) base ) [ 0 ];
+
+        rc = VCursorCellDataDirect ( self -> curs, row_id, self -> idx [ 1 ],
+            elem_bits, & base, boff, row_len );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to read GLOBAL_REF_START for row %ld", row_id );
+        else
+        {
+            uint64_t pos;
+            assert ( * boff == 0 );
+            assert ( * row_len == 1 );
+            assert ( * elem_bits == sizeof ( uint64_t ) * 8 );
+            pos = ( ( const uint64_t* ) base ) [ 0 ];
+
+            self -> poslen = encode_pos_len ( pos, ref_len );
+#if 1
+            assert ( decode_pos_len ( self -> poslen ) == pos );
+            assert ( poslen_to_len ( self -> poslen ) == ref_len );
+#endif
+            return & self -> poslen;
+        }
+    }
+
+    return NULL;
+
+}
+
+static
+const void *GlobalPosLenReaderReadLocal ( GlobalPosLenReader *self, const ctx_t *ctx,
+    int64_t row_id, uint32_t *elem_bits, uint32_t *boff, uint32_t *row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    const void *base;
+
+    assert ( elem_bits != NULL );
+    assert ( boff != NULL );
+    assert ( row_len != NULL );
+
+    rc = VCursorCellDataDirect ( self -> curs, row_id, self -> idx [ 0 ],
+        elem_bits, & base, boff, row_len );
+    if ( rc != 0 )
+        ERROR ( rc, "failed to read REF_LEN for row %ld", row_id );
+    else
+    {
+        INSDC_coord_len ref_len;
+        assert ( * boff == 0 );
+        assert ( * row_len == 1 );
+        assert ( * elem_bits == sizeof ref_len * 8 );
+        ref_len = ( ( const INSDC_coord_len* ) base ) [ 0 ];
+
+        rc = VCursorCellDataDirect ( self -> curs, row_id, self -> idx [ 1 ],
+            elem_bits, & base, boff, row_len );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to read REF_START for row %ld", row_id );
+        else
+        {
+            INSDC_coord_zero ref_start;
+            assert ( * boff == 0 );
+            assert ( * row_len == 1 );
+            assert ( * elem_bits == sizeof ref_start * 8 );
+            ref_start = ( ( const INSDC_coord_zero* ) base ) [ 0 ];
+
+            rc = VCursorCellDataDirect ( self -> curs, row_id, self -> idx [ 2 ],
+                elem_bits, & base, boff, row_len );
+            if ( rc != 0 )
+                ERROR ( rc, "failed to read REF_ID for row %ld", row_id );
+            else
+            {
+                int64_t ref_id;
+                assert ( * boff == 0 );
+                assert ( * row_len == 1 );
+                assert ( * elem_bits == sizeof ref_id * 8 );
+                ref_id = ( ( const int64_t* ) base ) [ 0 ];
+
+                if ( ref_id <= 0 )
+                    self -> poslen = 0;
+                else
+                {
+                    uint64_t pos = local_to_global ( ref_id, self -> chunk_size, ref_start );
+                    self -> poslen = encode_pos_len ( pos, ref_len );
+#if 1
+                    assert ( global_to_row_id ( pos, self -> chunk_size ) == ref_id );
+                    assert ( decode_pos_len ( self -> poslen ) == pos );
+                    assert ( poslen_to_len ( self -> poslen ) == ref_len );
+#endif
+                }
+
+                return & self -> poslen;
+            }
+        }
+    }
+
+    return NULL;
+}
+
+static  ColumnReader_vt GlobalPosLenReader_vt =
+{
+    GlobalPosLenReaderWhack,
+    GlobalPosLenReaderFullSpec,
+    GlobalPosLenReaderIdRange,
+    GlobalPosLenReaderPreCopy,
+    GlobalPosLenReaderPostCopy,
+    GlobalPosLenReaderReadGlobal
+};
+
+static  ColumnReader_vt LocalPosLenReader_vt =
+{
+    GlobalPosLenReaderWhack,
+    GlobalPosLenReaderFullSpec,
+    GlobalPosLenReaderIdRange,
+    GlobalPosLenReaderPreCopy,
+    GlobalPosLenReaderPostCopy,
+    GlobalPosLenReaderReadLocal
+};
+
+
+
+/* MakeGlobalPosLenReader
+ */
+ColumnReader *TablePairMakeGlobalPosLenReader ( TablePair *self, const ctx_t *ctx, uint32_t chunk_size )
+{
+    FUNC_ENTRY ( ctx );
+
+    GlobalPosLenReader *reader;
+    size_t full_spec_size = self -> full_spec_size + sizeof "src..GLOBAL_POSLEN" - 1;
+
+    TRY ( reader = MemAlloc ( ctx, sizeof * reader + full_spec_size, false ) )
+    {
+        /* we don't yet know whether the reader will have GLOBAL_REF_START */
+        TRY ( ColumnReaderInit ( & reader -> dad, ctx, & GlobalPosLenReader_vt ) )
+        {
+            rc_t rc = string_printf ( reader -> full_spec, full_spec_size + 1, NULL, "src.%s.GLOBAL_POSLEN", self -> full_spec );
+            if ( rc != 0 )
+                ABORT ( rc, "cannot seem to calculate string sizes" );
+            else
+            {
+                rc = VTableCreateCursorRead ( self -> stbl, & reader -> curs );
+                if ( rc != 0 )
+                    ERROR ( rc, "failed to create cursor on 'src.%s'", self -> full_spec );
+                else
+                {
+                    /* we need length as a 2nd sorting key */
+                    rc = VCursorAddColumn ( reader -> curs, & reader -> idx [ 0 ], "REF_LEN" );
+                    if ( rc != 0 )
+                        ERROR ( rc, "VCursorAddColumn failed on '%s' cursor", self -> full_spec );
+                    else
+                    {
+                        /* add columns AFTER open */
+                        rc = VCursorPermitPostOpenAdd ( reader -> curs );
+                        if ( rc != 0 )
+                            ERROR ( rc, "VCursorPermitPostOpenAdd failed on '%s' cursor", self -> full_spec );
+                        else
+                        {
+                            /* open single-column cursor - errors adding further columns
+                               help determine what type of positioning we have */
+                            rc = VCursorOpen ( reader -> curs );
+                            if ( rc != 0 )
+                                ERROR ( rc, "VCursorOpen failed on '%s' cursor", self -> full_spec );
+                            else
+                            {
+                                /* finish initialization */
+                                reader -> chunk_size = chunk_size;
+                                reader -> full_spec_size = ( uint32_t ) full_spec_size;
+
+                                /* now try to get GLOBAL_REF_START */
+                                rc = VCursorAddColumn ( reader -> curs, & reader -> idx [ 1 ], "GLOBAL_REF_START" );
+                                if ( rc == 0 )
+                                {
+                                    STATUS ( 3, "'%s' table has GLOBAL_REF_START", self -> full_spec );
+                                    
+                                    /* retrieval function returns this position directly */
+                                    return & reader -> dad;
+                                }
+
+                                /* try for local refpos */
+                                rc = VCursorAddColumn ( reader -> curs, & reader -> idx [ 1 ], "REF_START" );
+                                if ( rc == 0 )
+                                    rc = VCursorAddColumn ( reader -> curs, & reader -> idx [ 2 ], "REF_ID" );
+                                if ( rc == 0 )
+                                {
+                                    STATUS ( 3, "'%s' table has local REF_START", self -> full_spec );
+
+                                    /* retrieval function synthesizes local to global */
+                                    reader -> dad . vt = & LocalPosLenReader_vt;
+                                    return & reader -> dad;
+                                }
+
+                                ERROR ( rc, "failed to populate '%s' cursor", reader -> full_spec );
+                            }
+                        }
+                    }
+
+                    VCursorRelease ( reader -> curs );
+                }
+            }
+        }
+
+        MemFree ( ctx, reader, sizeof * reader + full_spec_size );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/glob-poslen.h b/tools/sra-sort/glob-poslen.h
new file mode 100644
index 0000000..0a39102
--- /dev/null
+++ b/tools/sra-sort/glob-poslen.h
@@ -0,0 +1,95 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_glob_poslen_
+#define _h_sra_sort_glob_poslen_
+
+#ifndef _h_sra_sort_col_pair_
+#include "col-pair.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct TablePair;
+
+
+/*--------------------------------------------------------------------------
+ * inline functions
+ */
+#define MAX_POS_BITS 34
+#define MAX_LEN_BITS ( 64 - MAX_POS_BITS )
+
+
+static __inline__
+uint64_t encode_pos_len ( uint64_t pos, uint32_t len )
+{
+    assert ( pos < ( ( ~ ( uint64_t ) 0 ) >> MAX_LEN_BITS ) );
+    assert ( 0 < len && len <= ( ( ~ ( uint32_t ) 0 ) >> ( 32 - MAX_LEN_BITS ) ) );
+
+    /* position ascending, length descending */
+    return ( ( pos + 1 ) << MAX_LEN_BITS ) - len;
+}
+
+static __inline__
+uint64_t decode_pos_len ( uint64_t pos_len )
+{
+    return pos_len >> MAX_LEN_BITS;
+}
+
+static __inline__
+uint32_t poslen_to_len ( uint64_t pos_len )
+{
+    return ( 1U << MAX_LEN_BITS ) - ( ( uint32_t ) pos_len & ( ( ~ ( uint32_t ) 0 ) >> ( 32 - MAX_LEN_BITS ) ) );
+}
+
+static __inline__
+uint64_t local_to_global ( int64_t row_id, uint32_t chunk_size, uint32_t offset )
+{
+    assert ( row_id > 0 );
+    return ( row_id - 1 ) * chunk_size + offset;
+}
+
+static __inline__
+int64_t global_to_row_id ( uint64_t pos, uint32_t chunk_size )
+{
+    return ( pos / chunk_size ) + 1;
+}
+
+
+/*--------------------------------------------------------------------------
+ * GlobalPosLenReader
+ */
+typedef struct GlobalPosLenReader GlobalPosLenReader;
+
+
+/* MakeGlobalPosLenReader
+ */
+ColumnReader *TablePairMakeGlobalPosLenReader ( struct TablePair *self, const ctx_t *ctx, uint32_t chunk_size );
+
+
+#endif /* _h_sra_sort_glob_poslen_ */
diff --git a/tools/sra-sort/id-mapper-col.c b/tools/sra-sort/id-mapper-col.c
new file mode 100644
index 0000000..0bfea9b
--- /dev/null
+++ b/tools/sra-sort/id-mapper-col.c
@@ -0,0 +1,260 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct MapRowIdColWriter MapRowIdColWriter;
+#define COLWRITER_IMPL MapRowIdColWriter
+
+#include "id-mapper-col.h"
+#include "map-file.h"
+#include "csra-tbl.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <klib/rc.h>
+
+#include <string.h>
+
+FILE_ENTRY ( id-mapper-col );
+
+
+/*--------------------------------------------------------------------------
+ * MapRowIdColWriter
+ */
+
+struct MapRowIdColWriter
+{
+    ColumnWriter dad;
+
+    ColumnWriter *cw;
+
+    MapFile *idx;
+
+    int64_t *row;
+    uint32_t max_row_len;
+
+    bool assign_ids;
+};
+
+/* called by Release */
+static
+void MapRowIdColWriterDestroy ( MapRowIdColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnWriterRelease ( self -> cw, ctx );
+    self -> cw = NULL;
+
+    MapFileRelease ( self -> idx, ctx );
+    self -> idx = NULL;
+
+    if ( self -> row != NULL )
+    {
+        MemFree ( ctx, self -> row, sizeof * self -> row * self -> max_row_len );
+        self -> row = NULL;
+        self -> max_row_len = 0;
+    }
+}
+
+static
+void MapRowIdColWriterWhack ( MapRowIdColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    MapRowIdColWriterDestroy ( self, ctx );
+    ColumnWriterDestroy ( & self -> dad, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+/* full spec */
+static
+const char* MapRowIdColWriterFullSpec ( const MapRowIdColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    return ColumnWriterFullSpec ( self -> cw, ctx );
+}
+
+static
+void MapRowIdColWriterPreCopy ( MapRowIdColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    ColumnWriterPreCopy ( self -> cw, ctx );
+}
+
+static
+void MapRowIdColWriterPostCopy ( MapRowIdColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( self -> max_row_len > 16 )
+    {
+        void *row;
+        TRY ( row = MemAlloc ( ctx, sizeof * self -> row * 16, false ) )
+        {
+            MemFree ( ctx, self -> row, sizeof * self -> row * self -> max_row_len );
+            self -> row = row;
+            self -> max_row_len = 16;
+        }
+        CATCH_ALL ()
+        {
+            CLEAR ();
+        }
+    }
+
+    ColumnWriterPostCopy ( self -> cw, ctx );
+}
+
+/* write row to destination */
+static
+void MapRowIdColWriterWrite ( MapRowIdColWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    uint32_t i;
+
+    /* here is where the VALUE coming in, which is a row-id,
+       gets mapped to its new value before being written out */
+    assert ( elem_bits == sizeof * self -> row * 8 );
+    assert ( boff == 0 );
+
+    /* resize row if needed */
+    if ( self -> max_row_len < row_len )
+    {
+        MemFree ( ctx, self -> row, sizeof * self -> row * self -> max_row_len );
+
+        self -> max_row_len = ( row_len + 15 ) & ~ 15U;
+        ON_FAIL ( self -> row = MemAlloc ( ctx, sizeof * self -> row * self -> max_row_len, false ) )
+        {
+            ANNOTATE ( "failed to allocate memory for %u row-ids", self -> max_row_len );
+            return;
+        }
+    }
+
+    /* copy row */
+    memcpy ( self -> row, data, row_len * sizeof * self -> row );
+
+    /* map ids */
+    for ( i = 0; i < row_len; ++ i )
+    {
+        if ( self -> row [ i ] != 0 )
+        {
+            int64_t new_id;
+
+            /* map old row-id to new row-id */
+            ON_FAIL ( new_id = MapFileMapSingleOldToNew ( self -> idx, ctx, self -> row [ i ], self -> assign_ids ) )
+            {
+                ANNOTATE ( "failed to map source row-id %ld", self -> row [ i ] );
+                return;
+            }
+            if ( new_id == 0 )
+            {
+                rc_t rc = RC ( rcExe, rcColumn, rcWriting, rcId, rcNotFound );
+                ERROR ( rc, "failed to map source row-id %ld", self -> row [ i ] );
+                return;
+            }
+
+            self -> row [ i ] = new_id;
+        }
+    }
+
+    /* now write the translated ids */
+    ColumnWriterWrite ( self -> cw, ctx, sizeof * self -> row * 8, self -> row, 0, row_len );
+}
+
+static
+void MapRowIdColWriterWriteStatic ( MapRowIdColWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len, uint64_t count )
+{
+    FUNC_ENTRY ( ctx );
+    rc_t rc = RC ( rcExe, rcColumn, rcWriting, rcType, rcIncorrect );
+    INTERNAL_ERROR ( rc, "writing to a non-static column" );
+}
+
+/* commit all writes */
+static
+void MapRowIdColWriterCommit ( MapRowIdColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    ColumnWriterCommit ( self -> cw, ctx );
+    MapRowIdColWriterDestroy ( self, ctx );
+}
+
+static ColumnWriter_vt MapRowIdColWriter_vt =
+{
+    MapRowIdColWriterWhack,
+    MapRowIdColWriterFullSpec,
+    MapRowIdColWriterPreCopy,
+    MapRowIdColWriterPostCopy,
+    MapRowIdColWriterWrite,
+    MapRowIdColWriterWriteStatic,
+    MapRowIdColWriterCommit
+};
+
+
+/* MakeMapRowIdWriter
+ *  if "assign_ids" is true, the MapFile will be asked to
+ *  map an old=>new id or assign (and record) a new id.
+ */
+ColumnWriter *TablePairMakeMapRowIdWriter ( TablePair *self,
+    const ctx_t *ctx, ColumnWriter *cw, MapFile *idx, bool assign_ids )
+{
+    FUNC_ENTRY ( ctx );
+
+    MapRowIdColWriter *writer;
+
+    TRY ( writer = MemAlloc ( ctx, sizeof * writer, false ) )
+    {
+        TRY ( ColumnWriterInit ( & writer -> dad, ctx, & MapRowIdColWriter_vt, true ) )
+        {
+            writer -> max_row_len = 16;
+            TRY ( writer -> row = MemAlloc ( ctx, sizeof * writer -> row * writer -> max_row_len, false ) )
+            {
+                TRY ( writer -> idx = MapFileDuplicate ( idx, ctx ) )
+                {
+                    TRY ( writer -> cw = ColumnWriterDuplicate ( cw, ctx ) )
+                    {
+                        writer -> assign_ids = assign_ids;
+                        return & writer -> dad;
+                    }
+
+                    MapFileRelease ( writer -> idx, ctx );
+                }
+
+                ColumnWriterDestroy ( & writer -> dad, ctx );
+            }
+
+            MemFree ( ctx, writer -> row, sizeof * writer -> row * writer -> max_row_len );
+        }
+
+        MemFree ( ctx, writer, sizeof * writer );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/id-mapper-col.h b/tools/sra-sort/id-mapper-col.h
new file mode 100644
index 0000000..ae5770f
--- /dev/null
+++ b/tools/sra-sort/id-mapper-col.h
@@ -0,0 +1,55 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_id_mapper_col_
+#define _h_sra_sort_id_mapper_col_
+
+#ifndef _h_sra_sort_col_pair_
+#include "col-pair.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct MapFile;
+struct TablePair;
+
+
+/*--------------------------------------------------------------------------
+ * MapRowIdColWriter
+ */
+
+
+/* MakeMapRowIdWriter
+ *  if "assign_ids" is true, the MapFile will be asked to
+ *  map an old=>new id or assign (and record) a new id.
+ */
+ColumnWriter *TablePairMakeMapRowIdWriter ( struct TablePair *self,
+    const ctx_t *ctx, ColumnWriter *cw, struct MapFile *idx, bool assign_ids );
+
+
+#endif /* _h_sra_sort_id_mapper_col_ */
diff --git a/tools/sra-sort/idx-mapping.c b/tools/sra-sort/idx-mapping.c
new file mode 100644
index 0000000..d1434aa
--- /dev/null
+++ b/tools/sra-sort/idx-mapping.c
@@ -0,0 +1,92 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "idx-mapping.h"
+#include "ctx.h"
+
+#include <klib/sort.h>
+
+FILE_ENTRY ( idx-mapping );
+
+
+/*--------------------------------------------------------------------------
+ * IdxMapping
+ *  
+ */
+
+#if USE_OLD_KSORT
+
+int CC IdxMappingCmpOld ( const void *a, const void *b, void *data )
+{
+    const IdxMapping *ap = a;
+    const IdxMapping *bp = b;
+
+    if ( ap -> old_id < bp -> old_id )
+        return -1;
+    return ap -> old_id > bp -> old_id;
+}
+
+int CC IdxMappingCmpNew ( const void *a, const void *b, void *data )
+{
+    const IdxMapping *ap = a;
+    const IdxMapping *bp = b;
+
+    if ( ap -> new_id < bp -> new_id )
+        return -1;
+    return ap -> new_id > bp -> new_id;
+}
+
+#else /* USE_OLD_KSORT */
+
+#define T( x ) ( ( const IdxMapping* ) ( x ) )
+
+#define SWAP( a, b, off, size ) KSORT_TSWAP ( IdxMapping, a, b )
+
+
+void IdxMappingSortOld ( IdxMapping *self, const ctx_t *ctx, size_t count )
+{
+#define CMP( a, b ) \
+    ( ( T ( a ) -> old_id < T ( b ) -> old_id ) ? -1 : ( T ( a ) -> old_id > T ( b ) -> old_id ) )
+
+    KSORT ( self, count, sizeof * self, 0, sizeof * self );
+
+#undef CMP
+}
+
+void IdxMappingSortNew ( IdxMapping *self, const ctx_t *ctx, size_t count )
+{
+#define CMP( a, b ) \
+    ( ( T ( a ) -> new_id < T ( b ) -> new_id ) ? -1 : ( T ( a ) -> new_id > T ( b ) -> new_id ) )
+
+    KSORT ( self, count, sizeof * self, 0, sizeof * self );
+
+#undef CMP
+}
+
+#undef T
+#undef SWAP
+
+#endif /* USE_OLD_KSORT */
diff --git a/tools/sra-sort/idx-mapping.h b/tools/sra-sort/idx-mapping.h
new file mode 100644
index 0000000..7691526
--- /dev/null
+++ b/tools/sra-sort/idx-mapping.h
@@ -0,0 +1,59 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_idx_mapping_
+#define _h_sra_sort_idx_mapping_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * IdxMapping
+ *  
+ */
+typedef struct IdxMapping IdxMapping;
+struct IdxMapping
+{
+    int64_t old_id, new_id;
+};
+
+#if USE_OLD_KSORT
+
+/* ksort callbacks */
+int CC IdxMappingCmpOld ( const void *a, const void *b, void *data );
+int CC IdxMappingCmpNew ( const void *a, const void *b, void *data );
+
+#else
+
+/* ksort_inlines */
+void IdxMappingSortOld ( IdxMapping *self, const ctx_t *ctx, size_t count );
+void IdxMappingSortNew ( IdxMapping *self, const ctx_t *ctx, size_t count );
+
+#endif
+
+#endif /* _h_sra_sort_idx_mapping_ */
diff --git a/tools/sra-sort/map-file.c b/tools/sra-sort/map-file.c
new file mode 100644
index 0000000..209876f
--- /dev/null
+++ b/tools/sra-sort/map-file.c
@@ -0,0 +1,1192 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "map-file.h"
+#include "idx-mapping.h"
+#include "ctx.h"
+#include "caps.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/buffile.h>
+#include <klib/refcount.h>
+#include <klib/sort.h>
+#include <klib/rc.h>
+
+#include <string.h>
+#include <endian.h>
+#include <byteswap.h>
+
+#include "except.h"
+
+FILE_ENTRY ( map-file );
+
+
+/*--------------------------------------------------------------------------
+ * MapFile
+ *  a file for storing id mappings
+ */
+struct MapFile
+{
+    int64_t first_id;
+    uint64_t num_ids;
+    uint64_t num_mapped_ids;
+    int64_t max_new_id;
+    KFile *f_old, *f_new, *f_pos;
+    size_t id_size;
+    KRefcount refcount;
+};
+
+
+/* Whack
+ */
+static
+void MapFileWhack ( MapFile *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    rc_t rc = KFileRelease ( self -> f_old );
+    if ( rc != 0 )
+        SYSTEM_ERROR ( rc, "KFileRelease failed on old=>new" );
+    else
+    {
+        rc = KFileRelease ( self -> f_new );
+        if ( rc != 0 )
+            ABORT ( rc, "KFileRelease failed on new=>old" );
+        else if ( self -> f_pos != NULL )
+        {
+            rc = KFileRelease ( self -> f_pos );
+            if ( rc != 0 )
+                ABORT ( rc, "KFileRelease failed on global poslen temp column" );
+        }
+        
+        MemFree ( ctx, self, sizeof * self );
+    }
+}
+
+
+/* Make
+ *  creates an id map
+ */
+static
+void MapFileMakeFork ( KFile **fp, const ctx_t *ctx, const char *name,
+    KDirectory *wd, const char *tmpdir, int pid, size_t bsize, const char *fork )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* create temporary KFile */
+    rc_t rc;
+    KFile *backing;
+
+    rc = KDirectoryCreateFile ( wd, & backing, true,
+        0600, kcmInit | kcmParents, "%s/sra-sort-%s.%s.%d", tmpdir, name, fork, pid );
+    if ( rc != 0 )
+        SYSTEM_ERROR ( rc, "failed to create %s id map file '%s'", fork, name );
+    else
+    {
+#if ! WINDOWS
+        /* never try to remove files on Windows */
+        if ( ctx -> caps -> tool -> unlink_idx_files )
+        {
+            /* unlink KFile */
+            rc = KDirectoryRemove ( wd, false, "%s/sra-sort-%s.%s.%d", tmpdir, name, fork, pid );
+            if ( rc != 0 )
+                WARN ( "failed to unlink %s id map file '%s'", fork, name );
+        }
+#endif
+
+        /* create a read/write buffer file */
+        rc = KBufFileMakeWrite ( fp, backing, true, bsize );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "failed to create buffer for %s id map file '%s'", fork, name );
+
+        KFileRelease ( backing );
+    }
+}
+
+static
+MapFile *MapFileMakeInt ( const ctx_t *ctx, const char *name, bool random, bool for_poslen )
+{
+    MapFile *mf;
+    TRY ( mf = MemAlloc ( ctx, sizeof * mf, true ) )
+    {
+        /* create KDirectory */
+        KDirectory *wd;
+        rc_t rc = KDirectoryNativeDir ( & wd );
+        if ( rc != 0 )
+            SYSTEM_ERROR ( rc, "failed to create native directory" );
+        else
+        {
+            const Tool *tp = ctx -> caps -> tool;
+            size_t bsize = random ? tp -> map_file_random_bsize : tp -> map_file_bsize;
+
+            /* create old=>new id file */
+            TRY ( MapFileMakeFork ( & mf -> f_old, ctx, name, wd, tp -> tmpdir, tp -> pid, bsize, "old" ) )
+            {
+                TRY ( MapFileMakeFork ( & mf -> f_new, ctx, name, wd, tp -> tmpdir, tp -> pid, 32 * 1024, "new" ) )
+                {
+                    if ( for_poslen )
+                        MapFileMakeFork ( & mf -> f_pos, ctx, name, wd, tp -> tmpdir, tp -> pid, 32 * 1024, "pos" );
+
+                    KDirectoryRelease ( wd );
+
+                    if ( ! FAILED () )
+                    {
+                        /* this is our guy */
+                        KRefcountInit ( & mf -> refcount, 1, "MapFile", "make", name );
+                        
+                        return mf;
+                    }
+
+                    KFileRelease ( mf -> f_new );
+                }
+
+                KFileRelease ( mf -> f_old );
+            }
+
+            KDirectoryRelease ( wd );
+        }
+
+        MemFree ( ctx, mf, sizeof * mf );
+    }
+
+    return NULL;
+}
+
+MapFile *MapFileMake ( const ctx_t *ctx, const char *name, bool random )
+{
+    FUNC_ENTRY ( ctx );
+    return MapFileMakeInt ( ctx, name, random, false );
+}
+
+/* MakeForPoslen
+ *  creates an id map with an additional poslen file
+ *  this is specially for PRIMARY_ALIGNMENT_IDS and SECONDARY_ALIGNMENT_IDS
+ *  that use *_ALIGNMENT global position and length as a sorting key
+ *  we drop it to a file after its generation so that it can be
+ *  picked up later when copying the corresponding alignment table.
+ */
+MapFile *MapFileMakeForPoslen ( const ctx_t *ctx, const char *name )
+{
+    FUNC_ENTRY ( ctx );
+    return MapFileMakeInt ( ctx, name, false, true );
+}
+
+
+/* Release
+ */
+void MapFileRelease ( const MapFile *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "MapFile" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            MapFileWhack ( ( MapFile* ) self, ctx );
+            break;
+        case krefZero:
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcFile, rcDestroying, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to release MapFile" );
+        }
+    }
+}
+
+/* Duplicate
+ */
+MapFile *MapFileDuplicate ( const MapFile *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "MapFile" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcFile, rcAttaching, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to duplicate MapFile" );
+            return NULL;
+        }
+    }
+
+    return ( MapFile* ) self;
+}
+
+
+/* SsetIdRange
+ *  required second-stage initialization
+ *  must be called before any writes occur
+ */
+void MapFileSetIdRange ( MapFile *self, const ctx_t *ctx,
+    int64_t first_id, uint64_t num_ids )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcUpdating, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad self" );
+    }
+    else if ( self -> max_new_id != 0 )
+    {
+        rc = RC ( rcExe, rcFile, rcUpdating, rcConstraint, rcViolated );
+        INTERNAL_ERROR ( rc, "cannot change id range after writing has begun" );
+    }
+    else
+    {
+        /* record new first id and count */
+        self -> first_id = first_id;
+        self -> num_ids = num_ids;
+
+        /* determine id size for all ids PLUS 0 for NULL */
+        for ( ++ num_ids, self -> id_size = 1; self -> id_size < 8; ++ self -> id_size )
+        {
+            if ( num_ids <= ( ( uint64_t ) 1 ) << ( self -> id_size * 8 ) )
+                break;
+        }
+    }
+}
+
+
+/* First
+ *  return first mapped id
+ */
+int64_t MapFileFirst ( const MapFile *self, const ctx_t *ctx )
+{
+    return self -> first_id;
+}
+
+
+/* Count
+ *  return num_ids
+ */
+uint64_t MapFileCount ( const MapFile *self, const ctx_t *ctx )
+{
+    return self -> num_ids;
+}
+
+
+/* SetOldToNew
+ *  write old=>new id mappings
+ */
+void MapFileSetOldToNew ( MapFile *self, const ctx_t *ctx, const IdxMapping *ids, size_t count )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcWriting, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad self reference" );
+    }
+    else if ( self -> num_ids == 0 )
+    {
+        rc = RC ( rcExe, rcFile, rcWriting, rcRange, rcUndefined );
+        INTERNAL_ERROR ( rc, "SetIdRange must be called with a non-empty range" );
+    }
+    else
+    {
+        size_t i;
+        for ( i = 0; i < count; ++ i )
+        {
+            size_t num_writ;
+            /* zero-based index */
+            int64_t old_id = ids [ i ] . old_id - self -> first_id;
+            /* position in bytes */
+            uint64_t pos = old_id * self -> id_size;
+            /* 1-based translated new-id */
+            int64_t new_id = ids [ i ] . new_id - self -> first_id + 1;
+            assert ( old_id >= 0 );
+            assert ( new_id >= 0 );
+#if __BYTE_ORDER == __BIG_ENDIAN
+            new_id = bswap_64 ( new_id );
+#endif
+            rc = KFileWriteAll ( self -> f_old, pos, & new_id, self -> id_size, & num_writ );
+            if ( rc != 0 )
+            {
+                SYSTEM_ERROR ( rc, "failed to write old=>new id mapping" );
+                break;
+            }
+
+            if ( num_writ != self -> id_size )
+            {
+                rc = RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+                SYSTEM_ERROR ( rc, "failed to write old=>new id mapping" );
+                break;
+            }
+        }
+    }
+}
+
+
+/* SetNewToOld
+ *  write new=>old id mappings
+ */
+void MapFileSetNewToOld ( MapFile *self, const ctx_t *ctx, const IdxMapping *ids, size_t count )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcWriting, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad self reference" );
+    }
+    else if ( self -> num_ids == 0 )
+    {
+        rc = RC ( rcExe, rcFile, rcWriting, rcRange, rcUndefined );
+        INTERNAL_ERROR ( rc, "SetIdRange must be called with a non-empty range" );
+    }
+    else
+    {
+        if ( ! ctx -> caps -> tool -> write_new_to_old )
+            self -> max_new_id = self -> first_id + count - 1;
+        else
+        {
+            size_t i;
+            for ( i = 0; i < count; ++ i )
+            {
+                size_t num_writ;
+                /* zero based index */
+                int64_t new_id = ids [ i ] . new_id - self -> first_id;
+                /* zero based byte offset */
+                uint64_t pos = new_id * self -> id_size;
+                /* 1-based translated old-id */
+                int64_t old_id = ids [ i ] . old_id - self -> first_id + 1;
+                assert ( new_id >= 0 );
+                assert ( old_id >= 0 );
+#if __BYTE_ORDER == __BIG_ENDIAN
+                old_id = bswap_64 ( old_id );
+#endif
+                rc = KFileWriteAll ( self -> f_new, pos, & old_id, self -> id_size, & num_writ );
+                if ( rc != 0 )
+                {
+                    SYSTEM_ERROR ( rc, "failed to write new=>old id mapping" );
+                    break;
+                }
+                
+                if ( num_writ != self -> id_size )
+                {
+                    rc = RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+                    SYSTEM_ERROR ( rc, "failed to write new=>old id mapping" );
+                    break;
+                }
+                
+                self -> max_new_id = new_id + self -> first_id;
+            }
+        }
+    }
+}
+
+
+/* SetPoslen
+ *  write global position/length in new-id order
+ */
+void MapFileSetPoslen ( MapFile *self, const ctx_t *ctx, const IdxMapping *ids, size_t count )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcWriting, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad self reference" );
+    }
+    else if ( self -> f_pos == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcWriting, rcFile, rcIncorrect );
+        INTERNAL_ERROR ( rc, "MapFile must be created with MapFileMakeForPoslen" );
+    }
+    else if ( self -> num_ids == 0 )
+    {
+        rc = RC ( rcExe, rcFile, rcWriting, rcRange, rcUndefined );
+        INTERNAL_ERROR ( rc, "SetIdRange must be called with a non-empty range" );
+    }
+    else
+    {
+        /* start writing after the last new id recorded */
+        uint64_t pos = ( self -> max_new_id - self -> first_id + 1 ) * sizeof ids -> new_id;
+
+        size_t i;
+        for ( i = 0; i < count; pos += sizeof ids -> new_id, ++ i )
+        {
+            size_t num_writ;
+            int64_t poslen = ids [ i ] . new_id;
+#if __BYTE_ORDER == __BIG_ENDIAN
+            poslen = bswap_64 ( poslen );
+#endif
+            rc = KFileWriteAll ( self -> f_pos, pos, & poslen, sizeof ids -> new_id, & num_writ );
+            if ( rc != 0 )
+            {
+                SYSTEM_ERROR ( rc, "failed to write poslen temporary column" );
+                break;
+            }
+
+            if ( num_writ != sizeof ids -> new_id )
+            {
+                rc = RC ( rcExe, rcFile, rcWriting, rcTransfer, rcIncomplete );
+                SYSTEM_ERROR ( rc, "failed to write poslen temporary column" );
+                break;
+            }
+        }
+    }
+}
+
+
+/* ReadPoslen
+ *  read global position/length in new-id order
+ *  starts reading at the indicated row
+ *  returns the number read
+ */
+size_t MapFileReadPoslen ( const MapFile *self, const ctx_t *ctx,
+    int64_t start_id, uint64_t *poslen, size_t max_count )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    size_t total = 0;
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad self reference" );
+    }
+    else if ( self -> f_pos == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcFile, rcIncorrect );
+        INTERNAL_ERROR ( rc, "MapFile must be created with MapFileMakeForPoslen" );
+    }
+    /* the column is read until end, but
+       this is not an error. just return no-more-data */
+    else if ( start_id == self -> first_id + self -> num_ids )
+        return 0;
+    else if ( start_id < self -> first_id || start_id > self -> first_id + self -> num_ids )
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcParam, rcInvalid );
+        INTERNAL_ERROR ( rc, "start_id ( %ld ) is not within column range ( %ld .. %ld )",
+            start_id, self -> first_id, self -> first_id + self -> num_ids - 1 );
+    }
+    else if ( max_count != 0 )
+    {
+        /* limit read to number of ids in index */
+        if ( start_id + max_count > self -> first_id + self -> num_ids )
+            max_count = ( size_t ) ( self -> first_id + self -> num_ids - start_id );
+
+        if ( poslen == NULL )
+        {
+            rc = RC ( rcExe, rcFile, rcReading, rcBuffer, rcNull );
+            INTERNAL_ERROR ( rc, "bad buffer parameter" );
+        }
+        else
+        {
+            /* read as many bytes of id as possible */
+            size_t num_read, to_read = max_count * sizeof * poslen;
+            uint64_t pos = ( start_id - self -> first_id ) * sizeof * poslen;
+            rc = KFileReadAll ( self -> f_pos, pos, poslen, to_read, & num_read );
+            if ( rc != 0 )
+                SYSTEM_ERROR ( rc, "failed to read new=>old map" );
+            else
+            {
+                total = ( size_t ) ( num_read / sizeof * poslen );
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+                {
+                    /* revert byte-order */
+                    size_t i;
+                    for ( i = 0; i < total; ++ i )
+                        poslen [ i ] = bswap_64 ( poslen [ i ] );
+                }
+#endif
+            }
+        }
+    }
+
+    return total;
+}
+
+
+/* AllocMissingNewIds
+ *  it is possible to have written fewer new=>old mappings
+ *  than are supposed to be there, e.g. SEQUENCE that gets
+ *  initially written by align tables. unaligned sequences
+ *  need to fill in the remainder.
+ */
+static
+size_t make_missing_entry ( MapFile *self, const ctx_t *ctx,
+    IdxMapping *missing, size_t i, size_t max_missing_ids,
+    int64_t old_id, int64_t new_id )
+{
+    if ( i == max_missing_ids )
+    {
+        ON_FAIL ( MapFileSetNewToOld ( self, ctx, missing, i ) )
+            return i;
+
+        i = 0;
+    }
+
+    /* insert into missing id map */
+    missing [ i ] . old_id = old_id;
+    missing [ i ] . new_id = new_id;
+
+    /* update old=>new mapping */
+    MapFileSetOldToNew ( self, ctx, & missing [ i ], 1 );
+
+    return i + 1;
+}
+
+int64_t MapFileAllocMissingNewIds ( MapFile *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    int64_t first_allocated = 0;
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcUpdating, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad self reference" );
+    }
+    else if ( self -> num_ids == 0 )
+    {
+        rc = RC ( rcExe, rcFile, rcWriting, rcRange, rcUndefined );
+        INTERNAL_ERROR ( rc, "SetIdRange must be called with a non-empty range" );
+    }
+    else
+    {
+        uint64_t num_missing_ids = self -> num_ids - ( self -> max_new_id - self -> first_id + 1 );
+        if ( num_missing_ids != 0 )
+        {
+            IdxMapping *missing;
+
+            /* determine maximum missing id mappings */
+            size_t max_missing_ids = ctx -> caps -> tool -> max_missing_ids;
+            if ( ( uint64_t ) max_missing_ids > num_missing_ids )
+                max_missing_ids = ( size_t ) num_missing_ids;
+
+            /* allocate a buffer of IdxMapping */
+            TRY ( missing = MemAlloc ( ctx, sizeof * missing * max_missing_ids, false ) )
+            {
+                /* use a scan buffer somewhere around 32K,
+                   to keep page-file cache focused on a few pages */
+                void *scan_buffer;
+                const size_t scan_buffer_size = 32 * 1024;
+                TRY ( scan_buffer = MemAlloc ( ctx, scan_buffer_size, false ) )
+                {
+                    size_t i, num_read;
+                    int64_t new_id, old_id = self -> first_id;
+                    uint64_t eof = self -> num_ids * self -> id_size;
+
+                    /* this guy will be used to assign new ids */
+                    int64_t max_new_id = self -> max_new_id;
+                    int64_t entry_max_new_id = self -> max_new_id;
+
+
+                    /* in a loop, read as many ids as possible into scan buffer
+                       the number is dependent upon self->id_size */
+                    for ( i = 0; ; old_id += num_read )
+                    {
+                        size_t j, to_read;
+
+                        /* determine position from old_id */
+                        uint64_t pos = ( old_id - self -> first_id ) * self -> id_size;
+                        if ( pos == eof )
+                            break;
+
+                        /* determine bytes to read - this must be limited
+                           or we risk tricking page-buffer into resizing */
+                        to_read = scan_buffer_size;
+                        if ( pos + to_read > eof )
+                            to_read = ( size_t ) ( eof - pos );
+
+                        /* read as many bytes as we can */
+                        rc = KFileReadAll ( self -> f_old, pos, scan_buffer, to_read, & num_read );
+                        if ( rc != 0 )
+                        {
+                            SYSTEM_ERROR ( rc, "failed to read old=>new map" );
+                            break;
+                        }
+
+                        /* convert to count */                        
+                        num_read /= self -> id_size;
+                        if ( num_read == 0 )
+                        {
+                            rc = RC ( rcExe, rcFile, rcReading, rcTransfer, rcIncomplete );
+                            SYSTEM_ERROR ( rc, "failed to read old=>new map" );
+                            break;
+                        }
+
+                        /* scan for zeros, and for every zero found,
+                           make entry into IdxMapping table, writing
+                           new-id back to old=>new map */
+                        switch ( self -> id_size )
+                        {
+                        case 1:
+                            for ( j = 0; j < num_read; ++ j )
+                            {
+                                if ( ( ( const uint8_t* ) scan_buffer ) [ j ] == 0 )
+                                {
+                                    ON_FAIL ( i = make_missing_entry ( self, ctx, missing,
+                                              i, max_missing_ids, old_id + j, ++ max_new_id ) )
+                                        break;
+                                }
+                            }
+                            break;
+                        case 2:
+                            for ( j = 0; j < num_read; ++ j )
+                            {
+                                if ( ( ( const uint16_t* ) scan_buffer ) [ j ] == 0 )
+                                {
+                                    ON_FAIL ( i = make_missing_entry ( self, ctx, missing,
+                                              i, max_missing_ids, old_id + j, ++ max_new_id ) )
+                                        break;
+                                }
+                            }
+                            break;
+                        case 3:
+                            for ( num_read *= 3, j = 0; j < num_read; j += 3 )
+                            {
+                                if ( ( ( const uint8_t* ) scan_buffer ) [ j + 0 ] == 0 &&
+                                     ( ( const uint8_t* ) scan_buffer ) [ j + 1 ] == 0 &&
+                                     ( ( const uint8_t* ) scan_buffer ) [ j + 2 ] == 0 )
+                                {
+                                    ON_FAIL ( i = make_missing_entry ( self, ctx, missing,
+                                              i, max_missing_ids, old_id + j / 3, ++ max_new_id ) )
+                                        break;
+                                }
+                            }
+                            num_read /= 3;
+                            break;
+                        case 4:
+                            for ( j = 0; j < num_read; ++ j )
+                            {
+                                if ( ( ( const uint32_t* ) scan_buffer ) [ j ] == 0 )
+                                {
+                                    ON_FAIL ( i = make_missing_entry ( self, ctx, missing,
+                                              i, max_missing_ids, old_id + j, ++ max_new_id ) )
+                                        break;
+                                }
+                            }
+                            break;
+                        case 8:
+                            for ( j = 0; j < num_read; ++ j )
+                            {
+                                if ( ( ( const uint64_t* ) scan_buffer ) [ j ] == 0 )
+                                {
+                                    ON_FAIL ( i = make_missing_entry ( self, ctx, missing,
+                                              i, max_missing_ids, old_id + j, ++ max_new_id ) )
+                                        break;
+                                }
+                            }
+                            break;
+                        default:
+                            for ( num_read *= self -> id_size, j = 0; j < num_read; j += self -> id_size )
+                            {
+                                new_id = 0;
+                                memcpy ( & new_id, & ( ( const uint8_t* ) scan_buffer ) [ j ], self -> id_size );
+                                if ( new_id == 0 )
+                                {
+                                    ON_FAIL ( i = make_missing_entry ( self, ctx, missing,
+                                              i, max_missing_ids, old_id + j / self -> id_size, ++ max_new_id ) )
+                                        break;
+                                }
+                            }
+                            num_read /= self -> id_size;
+                        }
+                    }
+
+                    if ( ! FAILED () && i != 0 )
+                        MapFileSetNewToOld ( self, ctx, missing, i );
+
+                    assert ( FAILED () || self -> max_new_id == max_new_id );
+
+                    if ( max_new_id != entry_max_new_id )
+                        first_allocated = entry_max_new_id + 1;
+
+                    MemFree ( ctx, scan_buffer, scan_buffer_size );
+                }
+
+                MemFree ( ctx, missing, sizeof * missing * max_missing_ids );
+            }
+        }
+    }
+
+    return first_allocated;
+}
+
+
+/* ReadNewToOld
+ *  reads a bunch of new=>old mappings
+ */
+static
+size_t MapFileReadNewToOld ( const MapFile *self, const ctx_t *ctx,
+    int64_t start_id, IdxMapping *ids, size_t max_count )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    size_t total = 0;
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad self reference" );
+    }
+    /* the new=>old mapping is read until end, but
+       this is not an error. just return no-more-data */
+    else if ( start_id == self -> first_id + self -> num_ids )
+        return 0;
+    else if ( start_id < self -> first_id || start_id > self -> first_id + self -> num_ids )
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcParam, rcInvalid );
+        INTERNAL_ERROR ( rc, "start_id ( %ld ) is not within map range ( %ld .. %ld )",
+            start_id, self -> first_id, self -> first_id + self -> num_ids - 1 );
+    }
+    else if ( max_count != 0 )
+    {
+        /* limit read to number of ids in index */
+        if ( start_id + max_count > self -> first_id + self -> num_ids )
+            max_count = ( size_t ) ( self -> first_id + self -> num_ids - start_id );
+
+        if ( ids == NULL )
+        {
+            rc = RC ( rcExe, rcFile, rcReading, rcBuffer, rcNull );
+            INTERNAL_ERROR ( rc, "bad buffer parameter" );
+        }
+        else
+        {
+            /* read as many bytes of id as possible */
+            size_t num_read, to_read = max_count * self -> id_size;
+            uint64_t pos = ( start_id - self -> first_id ) * self -> id_size;
+            rc = KFileReadAll ( self -> f_new, pos, ids, to_read, & num_read );
+            if ( rc != 0 )
+                SYSTEM_ERROR ( rc, "failed to read new=>old map" );
+            else
+            {
+                size_t i;
+                const char *packed = ( const char* ) ids;
+                total = ( size_t ) ( num_read /self -> id_size );
+
+                /* read each packed id as little-endian integer onto
+                   pre-zeroed 64-bit integer, swap if needed */
+                for ( num_read = total * self -> id_size, i = total; i > 0; )
+                {
+                    int64_t unpacked = 0;
+
+                    num_read -= self -> id_size;
+                    -- i;
+
+                    memcpy ( & unpacked, & packed [ num_read ], self -> id_size );
+#if __BYTE_ORDER == __BIG_ENDIAN
+                    unpacked = bswap_64 ( unpacked );
+#endif
+                    if ( unpacked != 0 )
+                        unpacked += self -> first_id - 1;
+
+                    ids [ i ] . old_id = unpacked;
+                    ids [ i ] . new_id = start_id + i;
+                }
+            }
+        }
+    }
+
+    return total;
+}
+
+
+/* SelectOldToNewPairs
+ *  specify the range of new ids to select from
+ *  read them in old=>new order
+ */
+size_t MapFileSelectOldToNewPairs ( const MapFile *self, const ctx_t *ctx,
+    int64_t start_id, IdxMapping *ids, size_t max_count )
+{
+    FUNC_ENTRY ( ctx );
+
+    uint64_t eof;
+    int64_t end_excl;
+    size_t i, j, total;
+
+    /* limit read to number of ids in index */
+    if ( start_id + max_count > self -> first_id + self -> num_ids )
+        max_count = ( size_t ) ( self -> first_id + self -> num_ids - start_id );
+
+    /* range is start_id to end_excl */
+    end_excl = start_id + max_count;
+
+    /* eof for f_old */
+    eof = self -> num_ids * self -> id_size;
+
+    for ( total = i = 0; i < max_count; total += j )
+    {
+        rc_t rc;
+        size_t off, num_read;
+        char buff [ 32 * 1024 ];
+
+        /* read some data from file */
+        uint64_t pos = total * self -> id_size;
+        size_t to_read = sizeof buff;
+	if ( pos == eof )
+	    break;
+        if ( pos + to_read > eof )
+            to_read = ( size_t ) ( eof - pos );
+        rc = KFileReadAll ( self -> f_old, pos, buff, to_read, & num_read );
+        if ( rc != 0 )
+        {
+            SYSTEM_ERROR ( rc, "failed to read old=>new map" );
+            break;
+        }
+
+        /* reached end - requested more ids than we have */
+        if ( num_read == 0 )
+            break;
+
+        /* the number of whole ids actually read */
+        if ( ( num_read /= self -> id_size ) == 0 )
+        {
+            rc = RC ( rcExe, rcFile, rcReading, rcTransfer, rcIncomplete );
+            SYSTEM_ERROR ( rc, "failed to read old=>new map - file incomplete" );
+            break;
+        }
+
+        /* select new-ids from ids read */
+        for ( off = j = 0; j < num_read; off += self -> id_size, ++ j )
+        {
+            int64_t unpacked = 0;
+            memcpy ( & unpacked, & buff [ off ], self -> id_size );
+#if __BYTE_ORDER == __BIG_ENDIAN
+            unpacked = bswap_64 ( unpacked );
+#endif
+            /* only offset non-zero (NULL) ids */
+            if ( unpacked != 0 )
+                unpacked += self -> first_id - 1;
+
+            /* if id meets criteria */
+            if ( unpacked >= start_id && unpacked < end_excl )
+            {
+                ids [ i ] . old_id = self -> first_id + total + j;
+                ids [ i ] . new_id = unpacked;
+                if ( ++ i == max_count )
+                    break;
+            }
+        }
+    }
+
+    return i;
+}
+
+
+/* SelectOldToNewSingle
+ *  specify the range of new ids to select from
+ *  read them in old=>new order
+ */
+size_t MapFileSelectOldToNewSingle ( const MapFile *self, const ctx_t *ctx,
+    int64_t start_id, int64_t *ids, uint32_t *opt_ord, size_t max_count )
+{
+    FUNC_ENTRY ( ctx );
+
+    uint64_t eof;
+    int64_t end_excl;
+    size_t i, j, total;
+
+    /* limit read to number of ids in index */
+    if ( start_id + max_count > self -> first_id + self -> num_ids )
+        max_count = ( size_t ) ( self -> first_id + self -> num_ids - start_id );
+
+    /* range is start_id to end_excl */
+    end_excl = start_id + max_count;
+
+    /* eof for f_old */
+    eof = self -> num_ids * self -> id_size;
+
+    for ( total = i = 0; i < max_count; total += j )
+    {
+        rc_t rc;
+        size_t off, num_read;
+        char buff [ 32 * 1024 ];
+
+        /* read some data from file */
+        uint64_t pos = total * self -> id_size;
+        size_t to_read = sizeof buff;
+	if ( pos == eof )
+            break;
+        if ( pos + to_read > eof )
+            to_read = ( size_t ) ( eof - pos );
+        rc = KFileReadAll ( self -> f_old, pos, buff, to_read, & num_read );
+        if ( rc != 0 )
+        {
+            SYSTEM_ERROR ( rc, "failed to read old=>new map" );
+            break;
+        }
+
+        /* reached end - requested more ids than we have */
+        if ( num_read == 0 )
+            break;
+
+        /* the number of whole ids actually read */
+        if ( ( num_read /= self -> id_size ) == 0 )
+        {
+            rc = RC ( rcExe, rcFile, rcReading, rcTransfer, rcIncomplete );
+            SYSTEM_ERROR ( rc, "failed to read old=>new map - file incomplete" );
+            break;
+        }
+
+        /* select new-ids from ids read */
+        for ( off = j = 0; j < num_read; off += self -> id_size, ++ j )
+        {
+            int64_t unpacked = 0;
+            memcpy ( & unpacked, & buff [ off ], self -> id_size );
+#if __BYTE_ORDER == __BIG_ENDIAN
+            unpacked = bswap_64 ( unpacked );
+#endif
+            /* only offset non-zero (NULL) ids */
+            if ( unpacked != 0 )
+                unpacked += self -> first_id - 1;
+
+            /* if id meets criteria */
+            if ( unpacked >= start_id && unpacked < end_excl )
+            {
+                ids [ i ] = self -> first_id + total + j;
+                assert ( i <= 0xFFFFFFFF );
+                if ( opt_ord != NULL )
+                    opt_ord [ unpacked - start_id ] = ( uint32_t ) i;
+                if ( ++ i == max_count )
+                    break;
+            }
+        }
+    }
+
+    return i;
+}
+
+
+/* MapSingleOldToNew
+ *  reads a single old=>new mapping
+ *  returns new id or 0 if not found
+ *  optionally allocates a new id if "insert" is true
+ */
+int64_t MapFileMapSingleOldToNew ( MapFile *self, const ctx_t *ctx,
+    int64_t old_id, bool insert )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    int64_t new_id = 0;
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad self reference" );
+    }
+    else if ( old_id < self -> first_id || old_id >= self -> first_id + self -> num_ids )
+    {
+        rc = RC ( rcExe, rcFile, rcReading, rcParam, rcInvalid );
+        INTERNAL_ERROR ( rc, "old_id ( %ld ) is not within map range ( %ld .. %ld )",
+            old_id, self -> first_id, self -> first_id + self -> num_ids - 1 );
+    }
+    else
+    {
+        size_t num_read, to_read = self -> id_size;
+        uint64_t pos = ( old_id - self -> first_id ) * self -> id_size;
+        rc = KFileReadAll ( self -> f_old, pos, & new_id, to_read, & num_read );
+        if ( rc != 0 )
+            SYSTEM_ERROR ( rc, "failed to read old=>new map" );
+        else
+        {
+#if __BYTE_ORDER == __BIG_ENDIAN
+            new_id = bswap_64 ( new_id );
+#endif
+            if ( new_id != 0 )
+                new_id += self -> first_id - 1;
+            else if ( insert )
+            {
+                /* create a mapping using the last known
+                   new id plus one as the id to assign on insert */
+                IdxMapping mapping;
+                mapping . old_id = old_id;
+                mapping . new_id = self -> max_new_id + 1;
+
+                TRY ( MapFileSetOldToNew ( self, ctx, & mapping, 1 ) )
+                {
+                    TRY ( MapFileSetNewToOld ( self, ctx, & mapping, 1 ) )
+                    {
+                        new_id = mapping . new_id;
+
+                        if ( self -> num_ids >= 100000 )
+                        {
+                            uint64_t scaled = ++ self -> num_mapped_ids * 100;
+                            uint64_t prior = scaled - 100;
+                            if ( ( prior / self -> num_ids ) != ( scaled /= self -> num_ids ) )
+                                STATUS ( 2, "have mapped %lu%% ids", scaled );
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    return new_id;
+}
+
+
+/* ConsistencyCheck
+ */
+static
+void MapFileCrossCheck ( const MapFile *self, const ctx_t *ctx, IdxMapping *ids, size_t max_ids )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    uint64_t total;
+    size_t num_read;
+    int64_t last_old, last_new;
+
+    for ( last_old = last_new = -1, total = 0; total < self -> num_ids; total += num_read )
+    {
+        int64_t id;
+        size_t i;
+
+        STATUS ( 2, "reading new=>old ids" );
+
+        ON_FAIL ( num_read = MapFileReadNewToOld ( self, ctx, self -> first_id + total, ids, max_ids ) )
+        {
+            ANNOTATE ( "failed to read new=>old ids" );
+            return;
+        }
+
+        STATUS ( 2, "read %,u pairs", num_read );
+
+        STATUS ( 2, "checking for repeats in new-id space" );
+        for ( i = 0; i < num_read; last_new = id, ++ i )
+        {
+            id = ids [ i ] . new_id;
+            if ( id == last_new )
+            {
+                rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcDuplicate );
+                ERROR ( rc, "new id %,ld repeats", id );
+                return;
+            }
+        }
+
+        STATUS ( 2, "sorting on old id" );
+
+#if USE_OLD_KSORT
+        ksort ( ids, num_read, sizeof ids [ 0 ], IdxMappingCmpOld, ( void* ) ctx );
+#else
+        IdxMappingSortOld ( ids, ctx, num_read );
+#endif
+
+        STATUS ( 2, "checking for repeats in old-id space" );
+        for ( i = 0; i < num_read; last_old = id, ++ i )
+        {
+            id = ids [ i ] . old_id;
+            if ( id == last_old )
+            {
+                rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcDuplicate );
+                ERROR ( rc, "old id %,ld repeats", id );
+                return;
+            }
+        }
+
+        STATUS ( 2, "cross-checking against old=>new index" );
+
+        for ( i = 0; i < num_read; ++ i )
+        {
+            int64_t new_id;
+
+            /* cast away const on "self" for prototype,
+               but function is only non-const if "insert"
+               were true - we use "false" */
+            ON_FAIL ( new_id = MapFileMapSingleOldToNew ( ( MapFile* ) self, ctx, ids [ i ] . old_id, false ) )
+                return;
+
+            if ( new_id != ids [ i ] . new_id )
+            {
+                rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcUnequal );
+                ERROR ( rc, "mismatch of new ids %,ld != %,ld", new_id, ids [ i ] . new_id );
+                return;
+            }
+        }
+    }
+}
+
+void MapFileConsistencyCheck ( const MapFile *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    IdxMapping *ids;
+    const size_t max_ids = 1024 * 1024;
+
+    STATUS ( 2, "running consistency check on index files" );
+
+    /* "self" is valid */
+    if ( self == NULL )
+    {
+        ANNOTATE ( "checking the validity of a NULL MapFile" );
+        return;
+    }
+
+    STATUS ( 2, "checking id_size" );
+
+    /* number of ids requires some number of bits */
+    if ( ( ( uint64_t ) 1 << ( self -> id_size * 8 ) ) < self -> num_ids )
+    {
+        rc = RC ( rcExe, rcIndex, rcValidating, rcSize, rcIncorrect );
+        ERROR ( rc, "calculated id size ( %zu bytes ) is insufficient to represent count of %,lu ids",
+                self -> id_size, self -> num_ids );
+        return;
+    }
+
+    STATUS ( 2, "allocating id buffer" );
+
+    TRY ( ids = MemAlloc ( ctx, sizeof * ids * max_ids, false ) )
+    {
+        MapFileCrossCheck ( self, ctx, ids, max_ids );
+        MemFree ( ctx, ids, sizeof * ids * max_ids );
+    }
+    CATCH_ALL ()
+    {
+        ANNOTATE ( "failed to allocate memory ( %zu pairs ) for consistency check", max_ids );
+        return;
+    }
+
+    STATUS ( 2, "finished idx consistency check" );
+}
diff --git a/tools/sra-sort/map-file.h b/tools/sra-sort/map-file.h
new file mode 100644
index 0000000..992d765
--- /dev/null
+++ b/tools/sra-sort/map-file.h
@@ -0,0 +1,172 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_map_file_
+#define _h_sra_sort_map_file_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct IdxMapping;
+
+
+/*--------------------------------------------------------------------------
+ * MapFile
+ *  a file for storing id mappings
+ */
+typedef struct MapFile MapFile;
+
+
+/* Make
+ *  creates an id map
+ */
+MapFile *MapFileMake ( const ctx_t *ctx, const char *name, bool random_access );
+
+
+/* MakeForPoslen
+ *  creates an id map with an additional poslen file
+ *  this is specially for PRIMARY_ALIGNMENT_IDS and SECONDARY_ALIGNMENT_IDS
+ *  that use *_ALIGNMENT global position and length as a sorting key
+ *  we drop it to a file after its generation so that it can be
+ *  picked up later when copying the corresponding alignment table.
+ */
+MapFile *MapFileMakeForPoslen ( const ctx_t *ctx, const char *name );
+
+
+/* Release
+ */
+void MapFileRelease ( const MapFile *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+MapFile *MapFileDuplicate ( const MapFile *self, const ctx_t *ctx );
+
+
+/* SetIdRange
+ *  required second-stage initialization
+ *  must be called before any writes occur
+ */
+void MapFileSetIdRange ( MapFile *self, const ctx_t *ctx,
+    int64_t first_id, uint64_t num_ids );
+
+
+/* First
+ *  return first mapped id
+ * Count
+ *  return number of ids
+ */
+int64_t MapFileFirst ( const MapFile *self, const ctx_t *ctx );
+uint64_t MapFileCount ( const MapFile *self, const ctx_t *ctx );
+
+
+/* SetOldToNew
+ *  write new=>old id mappings
+ */
+void MapFileSetOldToNew ( MapFile *self, const ctx_t *ctx,
+    struct IdxMapping const *ids, size_t count );
+
+
+/* SetNewToOld
+ *  write new=>old id mappings
+ */
+void MapFileSetNewToOld ( MapFile *self, const ctx_t *ctx,
+    struct IdxMapping const *ids, size_t count );
+
+
+/* SetPoslen
+ *  write global position/length in new-id order
+ */
+void MapFileSetPoslen ( MapFile *self, const ctx_t *ctx,
+    struct IdxMapping const *ids, size_t count );
+
+
+/* ReadPoslen
+ *  read global position/length in new-id order
+ *  starts reading at the indicated row
+ *  returns the number read
+ */
+size_t MapFileReadPoslen ( const MapFile *self, const ctx_t *ctx,
+    int64_t start_id, uint64_t *poslen, size_t max_count );
+
+
+/* AllocMissingNewIds
+ *  it is possible to have written fewer new=>old mappings
+ *  than are supposed to be there, e.g. SEQUENCE that gets
+ *  initially written by align tables. unaligned sequences
+ *  need to fill in the remainder.
+ *
+ *  returns the first newly allocated id
+ */
+int64_t MapFileAllocMissingNewIds ( MapFile *self, const ctx_t *ctx );
+
+
+/* SelectOldToNewPairs
+ *  specify the range of new ids to select from
+ *  read them in old=>new order
+ */
+size_t MapFileSelectOldToNewPairs ( const MapFile *self, const ctx_t *ctx,
+    int64_t start_id, struct IdxMapping *ids, size_t max_count );
+
+
+/* SelectOldToNewSingle
+ *  specify the range of new ids to select from
+ *  read them in old=>new order
+ */
+size_t MapFileSelectOldToNewSingle ( const MapFile *self, const ctx_t *ctx,
+    int64_t start_id, int64_t *ids, uint32_t *opt_ord, size_t max_count );
+
+
+/* MapSingleOldToNew
+ *  reads a single old=>new mapping
+ *  returns new id or 0 if not found
+ *  optionally allocates a new id if "insert" is true
+ */
+int64_t MapFileMapSingleOldToNew ( MapFile *self, const ctx_t *ctx,
+    int64_t old_id, bool insert );
+
+
+/* MapMultipleOldToNew
+ *  reads a single old=>new mapping
+ *  returns new id or 0 if not found
+ *  optionally allocates a new id if "insert" is true
+ */
+void MapFileMapMultipleOldToNew ( MapFile *self, const ctx_t *ctx,
+    int64_t *ids, size_t count, bool insert );
+
+
+/* ConsistencyCheck
+ *  should be const, but MapFileOldToNew claims to be non-const
+ *  and is used within. only non-const if "insert" is true.
+ */
+void MapFileConsistencyCheck ( const MapFile *self, const ctx_t *ctx );
+
+
+#endif
diff --git a/tools/sra-sort/mapping-row-set.c b/tools/sra-sort/mapping-row-set.c
new file mode 100644
index 0000000..6e69549
--- /dev/null
+++ b/tools/sra-sort/mapping-row-set.c
@@ -0,0 +1,496 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct MappingRowSet MappingRowSet;
+#define ROWSET_IMPL MappingRowSet
+
+typedef struct MappingRowSetIterator MappingRowSetIterator;
+#define ROWSET_ITER_IMPL MappingRowSetIterator
+
+#include "row-set-priv.h"
+#include "tbl-pair.h"
+#include "idx-mapping.h"
+#include "map-file.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <klib/rc.h>
+
+FILE_ENTRY ( mapping-row-set );
+
+
+/*--------------------------------------------------------------------------
+ * MappingRowSetIterator
+ *  interface to iterate RowSets
+ */
+struct MappingRowSetIterator
+{
+    RowSetIterator dad;
+
+    /* base row-id */
+    int64_t row_id;
+
+    /* last row-id + 1 */
+    int64_t last_excl;
+
+    /* takes its input from new=>old index */
+    const MapFile *idx;
+
+    /* working data within map */
+    IdxMapping *map;
+    size_t max_elems;
+    size_t num_elems;
+
+    bool large;
+};
+
+/*--------------------------------------------------------------------------
+ * MappingRowSet
+ *  implementation of RowSet based upon auto-generated id pairs
+ */
+struct MappingRowSet
+{
+    RowSet dad;
+
+    /* keep-alive reference */
+    MappingRowSetIterator *iter;
+
+    /* working data within map */
+    IdxMapping *map;
+    size_t num_elems;
+    size_t cur_elem;
+};
+
+static
+void MappingRowSetWhack ( MappingRowSet *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    RowSetIteratorRelease ( & self -> iter -> dad, ctx );
+    MemFree ( ctx, self, sizeof *self );
+}
+
+static
+size_t MappingRowSetNextStat ( MappingRowSet *self, const ctx_t *ctx,
+    int64_t *ids, size_t max_ids )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* the starting row-id is taken from row-set-iterator
+       and offset by our current element counter */
+    int64_t row_id = self -> iter -> row_id + self -> cur_elem;
+
+    /* limit id generation to request */
+    size_t i, to_set = self -> num_elems - self -> cur_elem;
+    if ( to_set > max_ids )
+        to_set = max_ids;
+
+    /* fill request with serial numbers
+       could just as easily be the same number
+       the important thing is to limit the count
+       and produce the correct range */
+    for ( i = 0; i < to_set; ++ i )
+        ids [ i ] = row_id + i;
+
+    /* advance counter */
+    self -> cur_elem += to_set;
+    return to_set;
+}
+
+static
+size_t MappingRowSetNextPhys ( MappingRowSet *self, const ctx_t *ctx,
+    int64_t *ids, size_t max_ids )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* limit copy to request */
+    size_t i, to_copy = self -> num_elems - self -> cur_elem;
+    if ( to_copy > max_ids )
+        to_copy = max_ids;
+
+    /* copy out old-ids */
+    for ( i = 0; i < to_copy; ++ i )
+        ids [ i ] = self -> map [ self -> cur_elem + i ] . old_id;
+
+    /* advance counter */
+    self -> cur_elem += to_copy;
+    return to_copy;
+}
+
+static
+void MappingRowSetReset ( MappingRowSet *self, const ctx_t *ctx, bool for_static );
+
+static RowSet_vt MappingRowSetPhys_vt =
+{
+    MappingRowSetWhack,
+    MappingRowSetNextPhys,
+    MappingRowSetReset
+};
+
+static RowSet_vt MappingRowSetStat_vt =
+{
+    MappingRowSetWhack,
+    MappingRowSetNextStat,
+    MappingRowSetReset
+};
+
+static
+void MappingRowSetReset ( MappingRowSet *self, const ctx_t *ctx, bool for_static )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( for_static )
+    {
+        /* go static */
+        self -> dad . vt = & MappingRowSetStat_vt;
+    }
+    else
+    {
+        size_t i, max_elems;
+        MappingRowSetIterator *iter = self -> iter;
+
+        /* go physical */
+        self -> dad . vt = & MappingRowSetPhys_vt;
+
+        /* limit id generation */
+        max_elems = iter -> max_elems;
+        if ( iter -> row_id + max_elems >= iter -> last_excl )
+            max_elems = ( size_t ) ( iter -> last_excl - iter -> row_id );
+
+        STATUS ( 4, "auto-generating %,zu ( old_id, new_id ) pairs where new_id >= %ld",
+                 max_elems, iter -> row_id );
+        for ( i = 0; i < max_elems; ++ i )
+            iter -> map [ i ] . old_id = iter -> map [ i ] . new_id = iter -> row_id + i;
+
+        self -> num_elems = iter -> num_elems = max_elems;
+    }
+
+    /* ready */
+    self -> cur_elem = 0;
+}
+
+static
+void MapFileMappingRowSetReset ( MappingRowSet *self, const ctx_t *ctx, bool for_static );
+
+static RowSet_vt MapFileMappingRowSetPhys_vt =
+{
+    MappingRowSetWhack,
+    MappingRowSetNextPhys,
+    MapFileMappingRowSetReset
+};
+
+static RowSet_vt MapFileMappingRowSetStat_vt =
+{
+    MappingRowSetWhack,
+    MappingRowSetNextStat,
+    MapFileMappingRowSetReset
+};
+
+static
+void MapFileMappingRowSetReset ( MappingRowSet *self, const ctx_t *ctx, bool for_static )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( for_static )
+    {
+        /* go static */
+        self -> dad . vt = & MapFileMappingRowSetStat_vt;
+    }
+    else
+    {
+        MappingRowSetIterator *iter = self -> iter;
+
+        /* go physical */
+        self -> dad . vt = & MapFileMappingRowSetPhys_vt;
+
+        /* read new-ids from file, selecting only those within range */
+        STATUS ( 3, "selecting first %,zu ( old_id, new_id ) pairs from old=>new where new_id >= %,ld",
+                 iter -> max_elems, iter -> row_id );
+        ON_FAIL ( iter -> num_elems = MapFileSelectOldToNewPairs ( iter -> idx, ctx,
+                      iter -> row_id, iter -> map, iter -> max_elems ) )
+            return;
+
+        self -> num_elems = iter -> num_elems;
+        STATUS ( 3, "selected %,zu ( old_id, new_id ) pairs", self -> num_elems );
+    }
+
+    /* ready */
+    self -> cur_elem = 0;
+}
+
+
+/*--------------------------------------------------------------------------
+ * MappingRowSetIterator
+ *  interface to iterate RowSets
+ */
+
+static
+void MappingRowSetIteratorWhack ( MappingRowSetIterator *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( self -> map != NULL )
+        MemFree ( ctx, self -> map, sizeof self -> map [ 0 ] * self -> max_elems );
+
+    RowSetIteratorDestroy ( & self -> dad, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+void MapFileMappingRowSetIteratorWhack ( MappingRowSetIterator *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( self -> map != NULL )
+        MemFree ( ctx, self -> map, sizeof self -> map [ 0 ] * self -> max_elems );
+
+    MapFileRelease ( self -> idx, ctx );
+
+    RowSetIteratorDestroy ( & self -> dad, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+RowSet *MappingRowSetIteratorMakeTheRowSet ( MappingRowSetIterator *self, const ctx_t *ctx, const RowSet_vt *vt )
+{
+    FUNC_ENTRY ( ctx );
+
+    MappingRowSet *rs;
+    TRY ( rs = MemAlloc ( ctx, sizeof * rs, false ) )
+    {
+        TRY ( RowSetInit ( & rs -> dad, ctx, vt ) )
+        {
+            /* initialize the row-set with map and self reference */
+            rs -> map = self -> map;
+            rs -> iter = ( MappingRowSetIterator* ) RowSetIteratorDuplicate ( & self -> dad, ctx );
+            rs -> num_elems = self -> num_elems;
+            rs -> cur_elem = 0;
+            return & rs -> dad;
+        }
+
+        MemFree ( ctx, rs, sizeof * rs );
+    }
+
+    return NULL;
+ }
+
+static
+struct IdxMapping *MappingRowSetIteratorGetIdxMapping ( MappingRowSetIterator *self, const ctx_t *ctx, size_t *num_items )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( self -> map == NULL )
+    {
+        rc_t rc = RC ( rcExe, rcCursor, rcAccessing, rcSelf, rcInconsistent );
+        ERROR ( rc, "IdxMapping array is NULL" );
+        if ( num_items != NULL )
+            * num_items = 0;
+        return NULL;
+    }
+
+    if ( num_items != NULL )
+        * num_items = self -> num_elems;
+    return self -> map;
+}
+
+static
+int64_t *MappingRowSetIteratorGetSourceIds ( MappingRowSetIterator *self, const ctx_t *ctx, uint32_t **opt_ord, size_t *num_items )
+{
+    FUNC_ENTRY ( ctx );
+
+    ANNOTATE ( "CALLING GetSourceIds ON MAPPING ROWSET ITERATOR" );
+
+    if ( opt_ord != NULL )
+        * opt_ord = NULL;
+
+    if ( num_items != NULL )
+        * num_items = 0;
+
+    return NULL;
+}
+
+static
+void MappingRowSetIteratorAllocMap ( MappingRowSetIterator *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* determine the maximum number of elements */
+    const Tool *tp = ctx -> caps -> tool;
+    uint64_t count = self -> last_excl - self -> row_id;
+    self -> max_elems = self -> large ? tp -> max_large_idx_ids : tp -> max_idx_ids;
+    if ( ( uint64_t ) self -> max_elems > count )
+        self -> max_elems = ( size_t ) count;
+
+    /* try to allocate the memory
+       this may be limited by the MemBank */
+    do
+    {
+        CLEAR ();
+
+        TRY ( self -> map = MemAlloc ( ctx, sizeof self -> map [ 0 ] * self -> max_elems, false ) )
+        {
+            STATUS ( 4, "allocated mapping array of %,u elements", self -> max_elems );
+            return;
+        }
+
+        self -> max_elems >>= 1;
+    }
+    while ( self -> max_elems >= ctx -> caps -> tool -> min_idx_ids );
+
+    ANNOTATE ( "failed to allocate map for row-set" );
+}
+
+static
+RowSet *MappingRowSetIteratorNextInt ( MappingRowSetIterator *self, const ctx_t *ctx, const RowSet_vt *vt )
+{
+    /* no FUNC_ENTRY */
+
+    RowSet *rs = NULL;
+
+    /* on first invocation, allocate the map */
+    if ( self -> map == NULL )
+    {
+        ON_FAIL ( MappingRowSetIteratorAllocMap ( self, ctx ) )
+            return NULL;
+    }
+
+    /* advance row_id */
+    self -> row_id += self -> num_elems;
+    self -> num_elems = 0;
+
+    /* create the empty row-set */
+    if ( self -> row_id < self -> last_excl )
+        rs = MappingRowSetIteratorMakeTheRowSet ( self, ctx, vt );
+
+    return rs;
+}
+
+static
+RowSet *MappingRowSetIteratorNext ( MappingRowSetIterator *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    return MappingRowSetIteratorNextInt ( self, ctx, & MappingRowSetPhys_vt );
+}
+
+static
+RowSet *MapFileMappingRowSetIteratorNext ( MappingRowSetIterator *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    return MappingRowSetIteratorNextInt ( self, ctx, & MapFileMappingRowSetPhys_vt );
+}
+
+
+/*--------------------------------------------------------------------------
+ * TablePair
+ */
+
+static RowSetIterator_vt MappingRowSetIterator_vt =
+{
+    MappingRowSetIteratorWhack,
+    MappingRowSetIteratorGetIdxMapping,
+    MappingRowSetIteratorGetSourceIds,
+    MappingRowSetIteratorNext
+};
+
+/* MakeMappingRowSetIterator
+ *  runs from first to last id in cursor
+ */
+RowSetIterator *TablePairMakeMappingRowSetIterator ( TablePair *self, const ctx_t *ctx, bool large )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( self -> first_id > self -> last_excl )
+    {
+        rc_t rc = RC ( rcExe, rcCursor, rcConstructing, rcRange, rcInvalid );
+        INTERNAL_ERROR ( rc, "union of all column ranges improperly set" );
+    }
+    else
+    {
+        MappingRowSetIterator *rsi;
+
+        TRY ( rsi = MemAlloc ( ctx, sizeof * rsi, true ) )
+        {
+            TRY ( RowSetIteratorInit ( & rsi -> dad, ctx, & MappingRowSetIterator_vt ) )
+            {
+                rsi -> row_id = self -> first_id;
+                rsi -> last_excl = self -> last_excl;
+                rsi -> large = large;
+                return & rsi -> dad;
+            }
+
+            MemFree ( ctx, rsi, sizeof * rsi );
+        }
+    }
+
+    return NULL;
+}
+
+
+/*--------------------------------------------------------------------------
+ * MapFile
+ */
+
+static RowSetIterator_vt MapFileMappingRowSetIterator_vt =
+{
+    MapFileMappingRowSetIteratorWhack,
+    MappingRowSetIteratorGetIdxMapping,
+    MappingRowSetIteratorGetSourceIds,
+    MapFileMappingRowSetIteratorNext
+};
+
+RowSetIterator * MapFileMakeMappingRowSetIterator ( const MapFile *self, const ctx_t *ctx, bool large )
+{
+    FUNC_ENTRY ( ctx );
+
+    MappingRowSetIterator *rsi;
+
+    /* create the iterator */
+    TRY ( rsi = MemAlloc ( ctx, sizeof * rsi, true ) )
+    {
+        TRY ( RowSetIteratorInit ( & rsi -> dad, ctx, & MapFileMappingRowSetIterator_vt ) )
+        {
+            /* initialize the row-set with map and self reference */
+            TRY ( rsi -> row_id = MapFileFirst ( self, ctx ) )
+            {
+                TRY ( rsi -> last_excl = rsi -> row_id + MapFileCount ( self, ctx ) )
+                {
+                    TRY ( rsi -> idx = MapFileDuplicate ( self, ctx ) )
+                    {
+                        rsi -> large = large;
+                        return & rsi -> dad;
+                    }
+                }
+            }
+        }
+
+        MemFree ( ctx, rsi, sizeof * rsi );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/mem.c b/tools/sra-sort/mem.c
new file mode 100644
index 0000000..313a90f
--- /dev/null
+++ b/tools/sra-sort/mem.c
@@ -0,0 +1,68 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "caps.h"
+#include "ctx.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+
+FILE_ENTRY ( mem );
+
+
+/*--------------------------------------------------------------------------
+ * Mem
+ *  memory allocation via MemBank in Caps
+ */
+void *MemAlloc ( const ctx_t *ctx, size_t bytes, bool clear )
+{
+    assert ( ctx != NULL );
+    assert ( ctx -> caps != NULL );
+    assert ( ctx -> caps -> mem != NULL );
+
+    return MemBankAlloc ( ctx -> caps -> mem, ctx, bytes, clear );
+}
+
+void MemFree ( const ctx_t *ctx, void *mem, size_t bytes )
+{
+    if ( mem != NULL )
+    {
+        assert ( ctx != NULL );
+        assert ( ctx -> caps != NULL );
+        assert ( ctx -> caps -> mem != NULL );
+
+        MemBankFree ( ctx -> caps -> mem, ctx, mem, bytes );
+    }
+}
+
+size_t MemInUse ( const ctx_t *ctx, size_t *opt_quota )
+{
+    assert ( ctx != NULL );
+    assert ( ctx -> caps != NULL );
+    assert ( ctx -> caps -> mem != NULL );
+
+    return MemBankInUse ( ctx -> caps -> mem, ctx, opt_quota );
+}
diff --git a/tools/sra-sort/mem.h b/tools/sra-sort/mem.h
new file mode 100644
index 0000000..fc3db7e
--- /dev/null
+++ b/tools/sra-sort/mem.h
@@ -0,0 +1,128 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_mem_
+#define _h_sra_sort_mem_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * Mem
+ *  memory allocation via MemBank in Caps
+ */
+void *MemAlloc ( const ctx_t *ctx, size_t bytes, bool clear );
+void MemFree ( const ctx_t *ctx, void *mem, size_t bytes );
+size_t MemInUse ( const ctx_t *ctx, size_t *opt_quota );
+
+
+
+/*--------------------------------------------------------------------------
+ * MemBank
+ *  very, very, very watered down memory bank
+ */
+typedef struct MemBank_vt MemBank_vt;
+
+typedef struct MemBank MemBank;
+struct MemBank
+{
+    const MemBank_vt *vt;
+    KRefcount refcount;
+    uint32_t align;
+};
+
+#ifndef MEMBANK_IMPL
+#define MEMBANK_IMPL MemBank
+#endif
+
+struct MemBank_vt
+{
+    void ( * whack ) ( MEMBANK_IMPL *self, const ctx_t *ctx );
+    size_t ( * in_use ) ( const MEMBANK_IMPL *self, const ctx_t *ctx, size_t *opt_quota );
+    void* ( * alloc ) ( MEMBANK_IMPL *self, const ctx_t *ctx, size_t bytes, bool clear );
+    void ( * free ) ( MEMBANK_IMPL *self, const ctx_t *ctx, void *mem, size_t bytes );
+};
+
+
+/* Make
+ *  make a new memory bank
+ */
+MemBank *MemBankMake ( const ctx_t *ctx, size_t quota );
+
+
+/* MakePaged
+ *  make a new paged memory bank
+ */
+MemBank *MemBankMakePaged ( const ctx_t *ctx, size_t quota, size_t pgsize );
+
+
+/* Duplicate
+ * Release
+ */
+MemBank *MemBankDuplicate ( const MemBank *self, const ctx_t *ctx );
+void MemBankRelease ( const MemBank *self, const ctx_t *ctx );
+
+
+/* InUse
+ *  report the number of bytes in use
+ *  optionally returns quota
+ */
+#define MemBankInUse( self, ctx, opt_quota ) \
+    POLY_DISPATCH_INT ( in_use, self, const MEMBANK_IMPL, ctx, opt_quota )
+
+
+/* Alloc
+ *  allocates some memory from bank
+ */
+#define MemBankAlloc( self, ctx, bytes, clear ) \
+    POLY_DISPATCH_PTR ( alloc, self, MEMBANK_IMPL, ctx, bytes, clear )
+
+
+/* Free
+ *  returns memory to bank
+ *  ignored by paged bank
+ *  burden on caller to remember allocation size
+ */
+#define MemBankFree( self, ctx, mem, bytes ) \
+    POLY_DISPATCH_VOID ( free, self, MEMBANK_IMPL, ctx, mem, bytes )
+
+
+/* Init
+ */
+void MemBankInit ( MemBank *self, const ctx_t *ctx, const MemBank_vt *vt, const char *name );
+
+/* Destroy
+ */
+#define MemBankDestroy( self, ctx ) \
+    ( ( void ) 0 )
+
+#endif
diff --git a/tools/sra-sort/membank-priv.h b/tools/sra-sort/membank-priv.h
new file mode 100644
index 0000000..69301d4
--- /dev/null
+++ b/tools/sra-sort/membank-priv.h
@@ -0,0 +1,44 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_membank_priv_
+#define _h_sra_sort_membank_priv_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * MemBank
+ */
+
+/* MakePagedMMap
+ *  make a new paged memory bank backed by memory map
+ */
+MemBank *MemBankMakePagedMMap ( const ctx_t *ctx, size_t quota, size_t pgsize );
+
+#endif
diff --git a/tools/sra-sort/membank.c b/tools/sra-sort/membank.c
new file mode 100644
index 0000000..6f29b75
--- /dev/null
+++ b/tools/sra-sort/membank.c
@@ -0,0 +1,296 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct MemBankImpl MemBankImpl;
+#define MEMBANK_IMPL MemBankImpl
+
+#include <sysalloc.h>
+
+#include "caps.h"
+#include "ctx.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+
+#include <kfs/directory.h>
+#include <kfs/file.h>
+#include <kfs/mmap.h>
+#include <klib/refcount.h>
+#include <klib/container.h>
+#include <klib/rc.h>
+#include <atomic.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+FILE_ENTRY ( membank );
+
+
+/*--------------------------------------------------------------------------
+ * MemBankImpl
+ *  maintains a quota
+ */
+struct MemBankImpl
+{
+    MemBank dad;
+    size_t quota;
+    atomic_t avail;
+};
+
+static
+void MemBankImplWhack ( MemBankImpl *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    Caps *caps;
+
+    MemBankDestroy ( & self -> dad, ctx );
+
+    caps = ( Caps* ) ctx -> caps;
+    if ( & self -> dad != caps -> mem )
+        MemBankFree ( caps -> mem, ctx, self, sizeof * self );
+    else
+    {
+        free ( self );
+        caps -> mem = NULL;
+    }
+}
+
+
+/* InUse
+ *  report the number of bytes in use
+ *  optionally returns quota
+ */
+static
+size_t MemBankImplInUse ( const MemBankImpl *self, const ctx_t *ctx, size_t *quota )
+{
+    size_t dummy;
+
+    if ( quota == NULL )
+        quota = & dummy;
+
+    if ( self != NULL )
+    {
+        * quota = self -> quota;
+        return self -> quota - atomic_read ( & self -> avail );
+    }
+
+    * quota = 0;
+    return 0;
+}
+
+
+/* Alloc
+ *  allocates some memory from bank
+ */
+static
+void *MemBankImplAlloc ( MemBankImpl *self, const ctx_t *ctx, size_t bytes, bool clear )
+{
+    if ( self != NULL )
+    {
+        /* allocation from the raw bank */
+        rc_t rc;
+        FUNC_ENTRY ( ctx );
+
+        /* update "avail" atomicially */
+        size_t remaining, avail;
+        for ( avail = atomic_read ( & self -> avail ); avail >= bytes; avail = remaining )
+        {
+            /* subtract the bytes */
+            remaining = atomic_test_and_set ( & self -> avail,
+                ( atomic_int ) ( avail - bytes ), ( atomic_int ) avail );
+            if ( remaining == avail )
+            {
+                /* try to allocate the memory directly */
+                void *mem = clear ? calloc ( 1, bytes ) : malloc ( bytes );
+                if ( mem == NULL )
+                {
+                    /* failed to get memory */
+                    atomic_add ( & self -> avail, ( atomic_int ) bytes );
+                    rc = RC ( rcExe, rcMemory, rcAllocating, rcMemory, rcExhausted );
+                    ERROR ( rc, "failed to allocate %zu bytes of memory", bytes );
+                }
+                else if ( bytes > 256 * 1024 )
+                {
+                    if ( bytes > 1024 * 1024 )
+                        STATUS ( 3, "allocated %,zu bytes of memory", bytes );
+                    else
+                        STATUS ( 4, "allocated %,zu bytes of memory", bytes );
+                }
+
+                return mem;
+            }
+        }
+
+        /* at this point we could be using a timeout */
+        rc = RC ( rcExe, rcMemory, rcAllocating, rcRange, rcExcessive );
+        ERROR ( rc, "quota exceeded allocating %zu bytes of memory", bytes );
+    }
+
+    return NULL;
+}
+
+
+/* Free
+ *  returns memory to bank
+ *  ignored by paged bank
+ *  burden on caller to remember allocation size
+ */
+static
+void MemBankImplFree ( MemBankImpl *self, const ctx_t *ctx, void *mem, size_t bytes )
+{
+    if ( mem != NULL )
+    {
+        FUNC_ENTRY ( ctx );
+
+        if ( self == NULL )
+        {
+            rc_t rc = RC ( rcExe, rcMemory, rcReleasing, rcSelf, rcNull );
+            ERROR ( rc, "attempt to return memory to NULL MemBank" );
+        }
+        else
+        {
+            /* release the memory */
+            free ( mem );
+
+            /* update the counters */
+            if ( bytes == 0 )
+                ANNOTATE ( "freed memory with size of 0 bytes" );
+            else
+            {
+                atomic_add ( & self -> avail, ( atomic_int ) bytes );
+
+                if ( bytes > 256 * 1024 )
+                {
+                    if ( bytes > 1024 * 1024 )
+                        STATUS ( 3, "freed %,zu bytes of memory", bytes );
+                    else
+                        STATUS ( 4, "freed %,zu bytes of memory", bytes );
+                }
+            }
+        }
+    }
+}
+
+static MemBank_vt MemBankImpl_vt =
+{
+    MemBankImplWhack,
+    MemBankImplInUse,
+    MemBankImplAlloc,
+    MemBankImplFree
+};
+
+
+/*--------------------------------------------------------------------------
+ * MemBank
+ *  very, very, very watered down memory bank
+ */
+
+
+/* Make
+ *  make a new memory bank
+ *  in a real system, this could make a bank linked to
+ *  the primordial one. in this system, there is only
+ *  a single bank, so this function is overloaded to
+ *  create both the primordial and to reset quota on it.
+ */
+MemBank *MemBankMake ( const ctx_t *ctx, size_t quota )
+{
+    FUNC_ENTRY ( ctx );
+
+    MemBankImpl *mem = malloc ( sizeof * mem );
+    if ( mem == NULL )
+        exit ( -1 );
+
+    MemBankInit ( & mem -> dad, ctx, & MemBankImpl_vt, "Process MemBank" );
+
+    if ( quota < 4096 )
+        quota = 4096;
+
+    mem -> quota = quota;
+    atomic_set ( & mem -> avail, ( atomic_int ) ( quota - sizeof * mem ) );
+
+    return & mem -> dad;
+}
+
+
+/* Init
+ */
+void MemBankInit ( MemBank *self, const ctx_t *ctx, const MemBank_vt *vt, const char *name )
+{
+    FUNC_ENTRY ( ctx );
+
+    self -> vt = vt;
+    KRefcountInit ( & self -> refcount, 1, "MemBank", "Make", name );
+    self -> align = 0;
+}
+
+
+/* Duplicate
+ * Release
+ */
+MemBank *MemBankDuplicate ( const MemBank *self, const ctx_t *ctx )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "MemBank" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative: {
+            FUNC_ENTRY ( ctx );
+            rc_t rc = RC ( rcExe, rcMemory, rcAttaching, rcRange, rcExcessive );
+            ERROR ( rc, "excessive references on MemBank" );
+            return NULL;
+        }}
+    }
+    return ( MemBank* ) self;
+}
+
+void MemBankRelease ( const MemBank *self, const ctx_t *ctx )
+{
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "MemBank" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            ( * self -> vt -> whack ) ( ( MEMBANK_IMPL* ) self, ctx );
+            break;
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative: {
+            FUNC_ENTRY ( ctx );
+            rc_t rc = RC ( rcExe, rcMemory, rcReleasing, rcRange, rcExcessive );
+            ERROR ( rc, "excessive releases on MemBank" );
+        }}
+    }
+}
diff --git a/tools/sra-sort/meta-pair.c b/tools/sra-sort/meta-pair.c
new file mode 100644
index 0000000..b4ca027
--- /dev/null
+++ b/tools/sra-sort/meta-pair.c
@@ -0,0 +1,458 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct MetaPair StdMetaPair;
+#define METAPAIR_IMPL StdMetaPair
+
+#include "meta-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <kdb/meta.h>
+#include <kdb/namelist.h>
+#include <klib/namelist.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( meta-pair );
+
+
+/*--------------------------------------------------------------------------
+ * StdMetaPair
+ */
+
+static
+void StdMetaPairWhack ( StdMetaPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    MetaPairDestroy ( self, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static MetaPair_vt StdMetaPair_vt =
+{
+    StdMetaPairWhack
+};
+
+
+/*--------------------------------------------------------------------------
+ * MetaPair
+ *  interface to pairing of source and destination tables
+ */
+
+
+/* Make
+ *  make a standard metadata pair from existing KMetadata objects
+ */
+MetaPair *MetaPairMake ( const ctx_t *ctx,
+    const KMetadata *src, KMetadata *dst, const char *full_path )
+{
+    FUNC_ENTRY ( ctx );
+
+    StdMetaPair *meta;
+
+    TRY ( meta = MemAlloc ( ctx, sizeof * meta, false ) )
+    {
+        TRY ( MetaPairInit ( meta, ctx, & StdMetaPair_vt, src, dst, full_path ) )
+        {
+            return meta;
+        }
+
+        MemFree ( ctx, meta, sizeof * meta );
+    }
+
+    return NULL;
+}
+
+
+/* Release
+ *  called by table at end of copy
+ */
+void MetaPairRelease ( MetaPair *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "MetaPair" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+            break;
+        case krefZero:
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcMetadata, rcDestroying, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to release MetaPair" );
+        }
+    }
+}
+
+/* Duplicate
+ */
+MetaPair *MetaPairDuplicate ( MetaPair *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "MetaPair" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcMetadata, rcAttaching, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to duplicate MetaPair" );
+            return NULL;
+        }
+    }
+
+    return ( MetaPair* ) self;
+}
+
+
+/* Init
+ */
+void MetaPairInit ( MetaPair *self, const ctx_t *ctx, const MetaPair_vt *vt,
+    const KMetadata *src, KMetadata *dst, const char *full_spec )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    if ( self == NULL )
+    {
+        rc = RC ( rcExe, rcMetadata, rcConstructing, rcSelf, rcNull );
+        INTERNAL_ERROR ( rc, "bad MetaPair" );
+        return;
+    }
+
+    memset ( self, 0, sizeof * self );
+    self -> vt = vt;
+
+    rc = KMetadataAddRef ( self -> smeta = src );
+    if ( rc != 0 )
+        ERROR ( rc, "failed to duplicate metadata 'src.%s'", full_spec );
+    else
+    {
+        rc = KMetadataAddRef ( self -> dmeta = dst );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to duplicate metadata 'dst.%s'", full_spec );
+        else
+        {
+            KRefcountInit ( & self -> refcount, 1, "MetaPair", "init", full_spec );
+            return;
+        }
+
+        KMetadataRelease ( self -> smeta );
+        self -> smeta = NULL;
+    }
+}
+
+/* Destroy
+ */
+void MetaPairDestroy ( MetaPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    rc = KMetadataRelease ( self -> dmeta );
+    if ( rc != 0 )
+        WARN ( "KMetadataRelease failed" );
+    KMetadataRelease ( self -> smeta );
+
+    memset ( self, 0, sizeof * self );
+}
+
+
+static
+void copy_meta_node_value ( const KMDataNode *src, const ctx_t *ctx, KMDataNode *dst )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    char buff [ 4096 ];
+    size_t num_read, remaining;
+
+    rc = KMDataNodeRead ( src, 0, buff, sizeof buff, & num_read, & remaining );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "KMDataNodeRead failed" );
+    else if ( num_read != 0 )
+    {
+        rc = KMDataNodeWrite ( dst, buff, num_read );
+        if ( rc != 0 )
+            SYSTEM_ERROR ( rc, "KMDataNodeWrite failed" );
+        else
+        {
+            size_t offset;
+            for ( offset = num_read; remaining != 0; offset += num_read )
+            {
+                rc = KMDataNodeRead ( src, offset, buff, sizeof buff, & num_read, & remaining );
+                if ( rc != 0 )
+                {
+                    INTERNAL_ERROR ( rc, "KMDataNodeRead failed" );
+                    break;
+                }
+                rc = KMDataNodeAppend ( dst, buff, num_read );
+                if ( rc != 0 )
+                {
+                    SYSTEM_ERROR ( rc, "KMDataNodeAppend failed" );
+                    break;
+                }
+            }
+        }
+    }
+}
+
+static
+void copy_meta_node_attr ( const KMDataNode *src, const ctx_t *ctx, KMDataNode *dst, const char *name )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    size_t num_read;
+    char buff [ 4096 ];
+
+    rc = KMDataNodeReadAttr ( src, name, buff, sizeof buff, & num_read );
+    if ( rc != 0 )
+        ERROR ( rc, "KMDataNodeReadAttr '%s' failed", name );
+    else
+    {
+        rc = KMDataNodeWriteAttr ( dst, name, buff );
+        if ( rc != 0 )
+            ERROR ( rc, "KMDataNodeWriteAttr '%s' failed", name );
+    }
+}
+
+
+static
+const char *filter_node_name ( const char *name, size_t nsize, const char **exclude )
+{
+    uint32_t i;
+    for ( i = 0; exclude [ i ] != NULL; ++ i )
+    {
+        const char *x = exclude [ i ];
+        size_t xsize = strlen ( x );
+
+        /* allow exclude to be a prefix */
+        if ( xsize > 0 && x [ xsize - 1 ] == '*' )
+        {
+            if ( nsize < -- xsize )
+                continue;
+        }
+        else if ( nsize != xsize )
+        {
+            continue;
+        }
+
+        if ( memcmp ( name, x, xsize ) == 0 )
+            return NULL;
+    }
+
+    return name;
+ }
+
+
+static
+void copy_meta_node ( const KMDataNode *src, const ctx_t *ctx, KMDataNode *dst,
+    char path [ 4096 ], size_t psize, const char *owner_spec, const char **exclude )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* first, copy value */
+    TRY ( copy_meta_node_value ( src, ctx, dst ) )
+    {
+        /* next, copy attributes */
+        KNamelist *names;
+        rc_t rc = KMDataNodeListAttr ( src, & names );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "KMDataNodeListAttr failed" );
+        else
+        {
+            uint32_t count;
+            rc = KNamelistCount ( names, & count );
+            if ( rc != 0 )
+                INTERNAL_ERROR ( rc, "KNamelistCount failed" );
+            else
+            {
+                uint32_t i;
+                const char *name;
+                for ( i = 0; i < count; ++ i )
+                {
+                    rc = KNamelistGet ( names, i, & name );
+                    if ( rc != 0 )
+                    {
+                        INTERNAL_ERROR ( rc, "KNamelistGet [ %u ] failed", i );
+                        break;
+                    }
+
+                    ON_FAIL ( copy_meta_node_attr ( src, ctx, dst, name ) )
+                        break;
+                }
+
+                if ( ! FAILED () )
+                {
+                    KNamelistRelease ( names );
+
+                    /* last, copy children */
+                    rc = KMDataNodeListChildren ( src, & names );
+                    if ( rc != 0 )
+                        INTERNAL_ERROR ( rc, "KMDataNodeListChildren failed" );
+                    else
+                    {
+                        rc = KNamelistCount ( names, & count );
+                        if ( rc != 0 )
+                            INTERNAL_ERROR ( rc, "KNamelistCount failed" );
+                        else if ( psize + 1 == 4096 )
+                        {
+                            rc = RC ( rcExe, rcNode, rcCopying, rcBuffer, rcInsufficient );
+                            ERROR ( rc, "metadata path too long" );
+                        }
+                        else
+                        {
+                            for ( i = 0; i < count; ++ i )
+                            {
+                                KMDataNode *dchild;
+                                const KMDataNode *schild;
+
+                                size_t nsize;
+                                static const char *always_exclude [] =
+                                {
+                                    ".seq", "col", "schema", 
+                                    "HUFFMAN*", "MSC454*", "NREADS", "NUMBER_P*", "NUMBER_S*",
+                                    NULL
+                                };
+
+                                rc = KNamelistGet ( names, i, & name );
+                                if ( rc != 0 )
+                                {
+                                    INTERNAL_ERROR ( rc, "KNamelistGet [ %u ] failed", i );
+                                    break;
+                                }
+
+                                nsize = string_size ( name );
+                                if ( psize + nsize + 1 >= 4096 )
+                                {
+                                    WARN ( "skipping node '%.*s/%s' - path too long", ( uint32_t ) psize, path, name );
+                                    continue;
+                                }
+
+                                if ( psize != 0 )
+                                    path [ psize ++ ] = '/';
+                                strcpy ( & path [ psize ], name );
+
+                                if ( exclude != NULL )
+                                {
+                                    name = filter_node_name ( name, nsize, exclude );
+                                    if ( name == NULL )
+                                        continue;
+                                }
+
+                                name = filter_node_name ( name, nsize, always_exclude );
+                                if ( name == NULL )
+                                    continue;
+
+                                rc = KMDataNodeOpenNodeRead ( src, & schild, name );
+                                if ( rc != 0 )
+                                    ERROR ( rc, "failed to open source metadata node '%s'", name );
+                                else
+                                {
+                                    rc = KMDataNodeOpenNodeUpdate ( dst, & dchild, name );
+                                    if ( rc != 0 )
+                                        ERROR ( rc, "failed to open destination metadata node '%s'", name );
+                                    else
+                                    {
+                                        copy_meta_node ( schild, ctx, dchild, path, psize + nsize, owner_spec, exclude );
+                                        KMDataNodeRelease ( dchild );
+                                    }
+
+                                    KMDataNodeRelease ( schild );
+                                }
+
+                                if ( FAILED () )
+                                    break;
+                            }
+                        }
+                    }
+                }
+            }
+
+            KNamelistRelease ( names );
+        }
+    }
+}
+
+
+/* Copy
+ *  copy from source to destination
+ */
+void MetaPairCopy ( MetaPair *self, const ctx_t *ctx, const char *owner_spec, const char **exclude )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    char path [ 4096 ];
+    const KMDataNode *src;
+
+    STATUS ( 3, "copying '%s' metadata", owner_spec );
+
+    rc = KMetadataOpenNodeRead ( self -> smeta, & src, "/" );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "KMetadataOpenNodeRead failed to obtain '%s' root node", owner_spec );
+    else
+    {
+        KMDataNode *dst;
+        rc = KMetadataOpenNodeUpdate ( self -> dmeta, & dst, "/" );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "KMetadataOpenNodeUpdate failed to obtain '%s' root node", owner_spec );
+        else
+        {
+            path [ 0 ] = 0;
+            copy_meta_node ( src, ctx, dst, path, 0, owner_spec, exclude );
+
+            KMDataNodeRelease ( dst );
+        }
+
+        KMDataNodeRelease ( src );
+    }
+
+    STATUS ( 3, "finished copying metadata" );
+}
diff --git a/tools/sra-sort/meta-pair.h b/tools/sra-sort/meta-pair.h
new file mode 100644
index 0000000..1aa65e5
--- /dev/null
+++ b/tools/sra-sort/meta-pair.h
@@ -0,0 +1,109 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_meta_pair_
+#define _h_sra_sort_meta_pair_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct KMetadata;
+
+
+/*--------------------------------------------------------------------------
+ * MetaPair
+ *  interface to pairing of source and destination tables
+ */
+typedef struct MetaPair_vt MetaPair_vt;
+
+typedef struct MetaPair MetaPair;
+struct MetaPair
+{
+    /* polymorphic */
+    const MetaPair_vt *vt;
+
+    /* the pair of KMetadata */
+    struct KMetadata const *smeta;
+    struct KMetadata *dmeta;
+
+    KRefcount refcount;
+};
+
+#ifndef METAPAIR_IMPL
+#define METAPAIR_IMPL MetaPair
+#endif
+
+struct MetaPair_vt
+{
+    void ( * whack ) ( METAPAIR_IMPL *self, const ctx_t *ctx );
+};
+
+
+/* Make
+ *  make a standard metadata pair from existing KMetadata objects
+ */
+MetaPair *MetaPairMake ( const ctx_t *ctx,
+    struct KMetadata const *src, struct KMetadata *dst,
+    const char *full_path );
+
+
+/* Release
+ *  called by table at end of copy
+ */
+void MetaPairRelease ( MetaPair *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+MetaPair *MetaPairDuplicate ( MetaPair *self, const ctx_t *ctx );
+
+
+/* Init
+ */
+void MetaPairInit ( MetaPair *self, const ctx_t *ctx, const MetaPair_vt *vt,
+    struct KMetadata const *src, struct KMetadata *dst, const char *full_spec );
+
+/* Destroy
+ */
+void MetaPairDestroy ( MetaPair *self, const ctx_t *ctx );
+
+
+/* Copy
+ *  copy from source to destination
+ */
+void MetaPairCopy ( MetaPair *self, const ctx_t *ctx,
+    const char *owner_spec, const char **exclude );
+
+
+#endif /* _h_sra_sort_meta_pair_ */
diff --git a/tools/sra-sort/paged-membank.c b/tools/sra-sort/paged-membank.c
new file mode 100644
index 0000000..a91c4d4
--- /dev/null
+++ b/tools/sra-sort/paged-membank.c
@@ -0,0 +1,244 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct PagedMemBank PagedMemBank;
+#define MEMBANK_IMPL PagedMemBank
+
+#include "caps.h"
+#include "ctx.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+#include "sra-sort.h"
+
+#include "membank-priv.h"
+
+#include <klib/container.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+FILE_ENTRY ( paged-membank );
+
+
+/*--------------------------------------------------------------------------
+ * MemPage
+ */
+typedef struct MemPage MemPage;
+struct MemPage
+{
+    SLNode n;
+    size_t used;
+};
+
+/*--------------------------------------------------------------------------
+ * PagedMemBank
+ *  designed to allocate a lot of little bits of memory
+ *  and then free them all at once
+ */
+struct PagedMemBank
+{
+    MemBank dad;
+    size_t quota;
+    size_t avail;
+    size_t pgsize;
+    SLList pages;
+};
+
+
+/* Whack
+ */
+static
+void PagedMemBankWhack ( PagedMemBank *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    MemPage *pg = ( MemPage* ) SLListPopHead ( & self -> pages );
+    while ( pg != NULL )
+    {
+        MemFree ( ctx, pg, self -> pgsize );
+        pg = ( MemPage* ) SLListPopHead ( & self -> pages );
+    }
+
+    MemBankDestroy ( & self -> dad, ctx );
+
+    MemFree ( ctx, self, sizeof * self );
+}
+
+
+/* InUse
+ *  report the number of bytes in use
+ *  optionally returns quota
+ */
+static
+size_t PagedMemBankInUse ( const PagedMemBank *self, const ctx_t *ctx, size_t *quota )
+{
+    size_t dummy;
+
+    if ( quota == NULL )
+        quota = & dummy;
+
+    if ( self != NULL )
+    {
+        * quota = self -> quota;
+        return self -> quota - self -> avail;
+    }
+
+    * quota = 0;
+    return 0;
+}
+
+
+/* Alloc
+ *  allocates some memory from bank
+ */
+static
+void *PagedMemBankAlloc ( PagedMemBank *self, const ctx_t *ctx, size_t bytes, bool clear )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    void *mem;
+    size_t avail;
+
+    /* check current alloc page */
+    MemPage *pg = ( MemPage* ) SLListHead ( & self -> pages );
+    if ( pg != NULL )
+    {
+        /* calculate bytes available */
+        avail = self -> pgsize - pg -> used;
+        if ( avail >= bytes )
+        {
+            /* got the memory */
+            mem = & ( ( uint8_t* ) pg ) [ pg -> used ];
+            pg -> used += bytes;
+
+            /* zero it out if so requested */
+            if ( clear )
+                memset ( mem, 0, bytes );
+
+            return mem;
+        }
+    }
+
+    /* either didn't have a page or didn't have enough memory
+       test for being able to fit in ANY page */
+    if ( bytes > self -> pgsize - sizeof * pg )
+    {
+        rc = RC ( rcExe, rcMemory, rcAllocating, rcData, rcExcessive );
+        ERROR ( rc, "requested memory allocation of %zu bytes is too large to fit into a page", bytes );
+        return NULL;
+    }
+
+    /* allocate the bytes */
+    if ( self -> avail >= self -> pgsize )
+    {
+        /* going to allocate a full page */
+        self -> avail -= self -> pgsize;
+
+        /* ask process for memory block */
+        TRY ( pg = MemAlloc ( ctx, self -> pgsize, false ) )
+        {
+            /* got it - push it onto stack */
+            pg -> used = sizeof * pg + bytes;
+            SLListPushHead ( & self -> pages, & pg -> n );
+
+            /* clear memory of asked */
+            mem = pg + 1;
+            if ( clear )
+                memset ( mem, 0, bytes );
+
+            return mem;
+        }
+
+        /* return with error from main MemBank */
+        return NULL;
+    }
+
+    /* at this point we could be using a timeout */
+    rc = RC ( rcExe, rcMemory, rcAllocating, rcRange, rcExcessive );
+    ERROR ( rc, "quota exceeded allocating %zu bytes of page memory for a %zu byte block", self -> pgsize, bytes );
+
+    return NULL;
+}
+
+
+/* Free
+ *  ignored by paged bank
+ */
+static
+void PagedMemBankFree ( PagedMemBank *self, const ctx_t *ctx, void *mem, size_t bytes )
+{
+}
+
+
+static MemBank_vt PagedMemBank_vt =
+{
+    PagedMemBankWhack,
+    PagedMemBankInUse,
+    PagedMemBankAlloc,
+    PagedMemBankFree
+};
+
+
+/*--------------------------------------------------------------------------
+ * MemBank
+ *  very, very, very watered down memory bank
+ */
+
+/* MakePaged
+ *  make a new paged memory bank
+ */
+MemBank *MemBankMakePaged ( const ctx_t *ctx, size_t quota, size_t pgsize )
+{
+    FUNC_ENTRY ( ctx );
+    PagedMemBank *mem;
+
+    /* special case for using memory mapped banks */
+    if ( ctx -> caps -> tool -> mmapdir != NULL )
+        return MemBankMakePagedMMap ( ctx, quota, pgsize );
+
+    if ( pgsize < 4096 )
+        pgsize = 4096;
+
+    if ( quota < pgsize )
+        quota = pgsize;
+
+    TRY ( mem = MemAlloc ( ctx, sizeof * mem, true ) )
+    {
+        TRY ( MemBankInit ( & mem -> dad, ctx, & PagedMemBank_vt, "Task MemBank" ) )
+        {
+            mem -> quota = mem -> avail = quota;
+            mem -> pgsize = pgsize;
+            return & mem -> dad;
+        }
+
+        MemFree ( ctx, mem, sizeof * mem );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/paged-mmapbank.c b/tools/sra-sort/paged-mmapbank.c
new file mode 100644
index 0000000..aa6d6e5
--- /dev/null
+++ b/tools/sra-sort/paged-mmapbank.c
@@ -0,0 +1,399 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct PagedMMapBank PagedMMapBank;
+#define MEMBANK_IMPL PagedMMapBank
+
+#include "caps.h"
+#include "ctx.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+#include "sra-sort.h"
+
+#include "membank-priv.h"
+
+#include <kfs/mmap.h>
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <klib/container.h>
+#include <klib/rc.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+FILE_ENTRY ( paged-mmapbank );
+
+
+/*--------------------------------------------------------------------------
+ * MMapPage
+ *  a "page" which is really an entire mmap
+ */
+typedef struct MMapPage MMapPage;
+struct MMapPage
+{
+    SLNode n;
+    KMMap *mmap;
+    uint8_t *addr;
+    size_t size;
+    size_t used;
+};
+
+static
+void CC MMapPageWhack ( SLNode *n, void *data )
+{
+    MMapPage *self = ( MMapPage* ) n;
+    const ctx_t *ctx = ( const void* ) data;
+
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc = KMMapRelease ( self -> mmap );
+    if ( rc != 0 )
+        SYSTEM_ERROR ( rc, "KMMapRelease failed" );
+
+    MemFree ( ctx, self, sizeof * self );
+}
+
+
+/*--------------------------------------------------------------------------
+ * PagedMMapBank
+ *  a memory bank based upon system mmap
+ */
+struct PagedMMapBank
+{
+    MemBank dad;
+    size_t quota;
+    size_t used;
+    size_t pgsize;
+    KFile *backing;
+    SLList pages;
+};
+
+
+/* Whack
+ */
+static
+void PagedMMapBankWhack ( PagedMMapBank *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    SLListWhack ( & self -> pages, MMapPageWhack, ( void* ) ctx );
+
+    rc = KFileRelease ( self -> backing );
+    if ( rc != 0 )
+        SYSTEM_ERROR ( rc, "KFileRelease failed on backing file" );
+    self -> backing = NULL;
+
+    MemBankDestroy ( & self -> dad, ctx );
+
+    MemFree ( ctx, self, sizeof * self );
+}
+
+
+/* InUse
+ *  report the number of bytes in use
+ *  optionally returns quota
+ */
+static
+size_t PagedMMapBankInUse ( const PagedMMapBank *self, const ctx_t *ctx, size_t *quota )
+{
+    size_t dummy;
+
+    if ( quota == NULL )
+        quota = & dummy;
+
+    if ( self != NULL )
+    {
+        * quota = self -> quota;
+        return self -> used;
+    }
+
+    * quota = 0;
+    return 0;
+}
+
+
+/* CreateBacking
+ */
+static
+void PagedMMapBankCreateBacking ( PagedMMapBank *self, const ctx_t *ctx, KFile **backing )
+{
+    FUNC_ENTRY ( ctx );
+
+    KDirectory *wd;
+    rc_t rc = KDirectoryNativeDir ( & wd );
+    if ( rc != 0 )
+        ABORT ( rc, "KDirectoryNativeDir failed" );
+    else
+    {
+        static uint32_t file_no;
+        const Tool *tp = ctx -> caps -> tool;
+
+        ++ file_no;
+        STATUS ( 5, "creating backing file '%s/sra-sort-buffer.%d.%u'", tp -> mmapdir, tp -> pid, file_no );
+
+        rc = KDirectoryCreateFile ( wd, backing, true,
+            0600, kcmInit | kcmParents, "%s/sra-sort-buffer.%d.%u",
+            tp -> mmapdir, tp -> pid, file_no );
+        if ( rc != 0 )
+            ABORT ( rc, "KDirectoryCreateFile failed when creating mem-mapped buffer" );
+        else
+        {
+#if ! WINDOWS
+            /* unlinking file is a wonderful thing */
+            if ( tp -> unlink_idx_files )
+            {
+                /* unlink KFile */
+                STATUS ( 5, "unlinking backing file '%s/sra-sort-buffer.%d.%u'", tp -> mmapdir, tp -> pid, file_no );
+                rc = KDirectoryRemove ( wd, false, "%s/sra-sort-buffer.%d.%u",
+                    tp -> mmapdir, tp -> pid, file_no );
+                if ( rc != 0 )
+                    WARN ( "failed to unlink mem-mapped buffer file #%u", file_no );
+            }
+#endif
+            /* set initial size to a page */
+            rc = KFileSetSize ( * backing, self -> pgsize );
+            if ( rc != 0 )
+                SYSTEM_ERROR ( rc, "KFileSetSize failed to set file to %zu bytes", self -> pgsize );
+        }
+
+        KDirectoryRelease ( wd );
+    }
+}
+
+
+/* ExtendBacking
+ *  creates a backing file if not there
+ *  extends it otherwise
+ */
+static
+void PagedMMapBankExtendBacking ( PagedMMapBank *self, const ctx_t *ctx )
+{
+#if USE_SINGLE_BACKING_FILE
+
+    /* this code is only useful if using a single file for all maps */
+    FUNC_ENTRY ( ctx );
+
+    /* create the file on first attempt */
+    if ( self -> backing == NULL )
+    {
+        assert ( self -> used == 0 );
+        PagedMMapBankCreateBacking ( self, ctx, & self -> backing )l
+    }
+    else
+    {
+        /* extend the file */
+        rc_t rc;
+        STATUS ( 4, "extending common buffer file to %,zu bytes", self -> used + self -> pgsize );
+        rc = KFileSetSize ( self -> backing, self -> used + self -> pgsize );
+        if ( rc != 0 )
+            SYSTEM_ERROR ( rc, "KFileSetSize failed to extend file size to %zu bytes", self -> used + self -> pgsize );
+    }
+#endif
+}
+
+
+/* MapPage
+ */
+static
+void PagedMMapBankMapPage ( PagedMMapBank *self, const ctx_t *ctx, MMapPage *pg )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+#if USE_SINGLE_BACKING_FILE
+    STATUS ( 4, "allocating new mmap of %,zu bytes onto common file at offset %,zu", self -> pgsize, self -> used );
+    rc = KMMapMakeRgnUpdate ( & pg -> mmap, self -> backing, self -> used, self -> pgsize );
+#else
+    KFile *backing;
+    ON_FAIL ( PagedMMapBankCreateBacking ( self, ctx, & backing ) )
+        return;
+
+    STATUS ( 4, "allocating new mmap of %,zu bytes onto its own file", self -> pgsize );
+    rc = KMMapMakeRgnUpdate ( & pg -> mmap, backing, 0, self -> pgsize );
+    KFileRelease ( backing );
+#endif
+
+    if ( rc != 0 )
+        SYSTEM_ERROR ( rc, "KMMapMakeRgnUpdate failed creating %zu byte region", self -> pgsize );
+    else
+    {
+        rc = KMMapAddrUpdate ( pg -> mmap, ( void** ) & pg -> addr );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "KMMapAddrUpdate failed" );
+        else
+        {
+            rc = KMMapSize ( pg -> mmap, & pg -> size );
+            if ( rc != 0 )
+                INTERNAL_ERROR ( rc, "KMMapSize failed" );
+            else
+            {
+                pg -> used = 0;
+                self -> used += self -> pgsize;
+                STATUS ( 4, "total mem-mapped buffer space: %,zu bytes", self -> used );
+                return;
+            }
+        }
+
+        KMMapRelease ( pg -> mmap );
+        pg -> mmap = NULL;
+    }
+}
+
+
+/* Alloc
+ *  allocates some memory from bank
+ */
+static
+void *PagedMMapBankAlloc ( PagedMMapBank *self, const ctx_t *ctx, size_t bytes, bool clear )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    void *mem;
+    size_t avail;
+
+    /* check current alloc page */
+    MMapPage *pg = ( MMapPage* ) SLListHead ( & self -> pages );
+    if ( pg != NULL )
+    {
+        /* calculate bytes available */
+        avail = pg -> size - pg -> used;
+        if ( avail >= bytes )
+        {
+            /* got the memory */
+            mem = & pg -> addr [ pg -> used ];
+            pg -> used += bytes;
+
+            /* zero it out if so requested */
+            if ( clear )
+                memset ( mem, 0, bytes );
+
+            return mem;
+        }
+    }
+
+    /* either didn't have a page or didn't have enough memory
+       test for being able to fit in ANY page */
+    if ( bytes > self -> pgsize )
+    {
+        rc = RC ( rcExe, rcMemory, rcAllocating, rcData, rcExcessive );
+        ERROR ( rc, "requested memory allocation of %zu bytes is too large to fit into a page", bytes );
+        return NULL;
+    }
+
+    /* allocate the bytes */
+    if ( self -> used + self -> pgsize <= self -> quota )
+    {
+        /* ask process for memory block */
+        TRY ( pg = MemAlloc ( ctx, sizeof * pg, false ) )
+        {
+            /* increase size of underlying file */
+            TRY ( PagedMMapBankExtendBacking ( self, ctx ) )
+            {
+                TRY ( PagedMMapBankMapPage ( self, ctx, pg ) )
+                {
+                    /* got it - push it onto stack */
+                    SLListPushHead ( & self -> pages, & pg -> n );
+
+                    /* clear memory of asked */
+                    mem = pg  -> addr;
+                    pg -> used = bytes;
+                    if ( clear )
+                        memset ( mem, 0, bytes );
+
+                    return mem;
+                }
+            }
+
+            MemFree ( ctx, pg, sizeof * pg );
+        }
+
+        return NULL;
+    }
+
+    /* at this point we could be using a timeout */
+    rc = RC ( rcExe, rcMemory, rcAllocating, rcRange, rcExcessive );
+    ERROR ( rc, "quota exceeded allocating %zu bytes of page memory for a %zu byte block", self -> pgsize, bytes );
+
+    return NULL;
+}
+
+
+/* Free
+ *  ignored by paged bank
+ */
+static
+void PagedMMapBankFree ( PagedMMapBank *self, const ctx_t *ctx, void *mem, size_t bytes )
+{
+}
+
+
+static MemBank_vt PagedMMapBank_vt =
+{
+    PagedMMapBankWhack,
+    PagedMMapBankInUse,
+    PagedMMapBankAlloc,
+    PagedMMapBankFree
+};
+
+
+/*--------------------------------------------------------------------------
+ * MemBank
+ *  very, very, very watered down memory bank
+ */
+
+/* MakePagedMMap
+ *  make a new paged memory bank backed by memory map
+ */
+MemBank *MemBankMakePagedMMap ( const ctx_t *ctx, size_t quota, size_t pgsize )
+{
+    FUNC_ENTRY ( ctx );
+    PagedMMapBank *mem;
+
+    if ( pgsize < 256 * 1024 * 1024 )
+        pgsize = 256 * 1024 * 1024;
+
+    if ( quota < pgsize )
+        quota = pgsize;
+
+    TRY ( mem = MemAlloc ( ctx, sizeof * mem, true ) )
+    {
+        TRY ( MemBankInit ( & mem -> dad, ctx, & PagedMMapBank_vt, "Memory Mapped Task MemBank" ) )
+        {
+            mem -> quota = quota;
+            mem -> pgsize = pgsize;
+            return & mem -> dad;
+        }
+
+        MemFree ( ctx, mem, sizeof * mem );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/poslen-col-pair.c b/tools/sra-sort/poslen-col-pair.c
new file mode 100644
index 0000000..452b134
--- /dev/null
+++ b/tools/sra-sort/poslen-col-pair.c
@@ -0,0 +1,559 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct PoslenColReader PoslenColReader;
+#define COLREADER_IMPL PoslenColReader
+
+typedef struct PoslenColWriter PoslenColWriter;
+#define COLWRITER_IMPL PoslenColWriter
+
+#include "col-pair.h"
+#include "tbl-pair.h"
+#include "map-file.h"
+#include "glob-poslen.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+#include <kapp/main.h>
+#include <kfs/defs.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+FILE_ENTRY ( poslen-col-pair );
+
+
+/*--------------------------------------------------------------------------
+ * PoslenColReader
+ *  implementation of ColumnReader based upon MapFile temp column read
+ */
+struct PoslenColReader
+{
+    ColumnReader dad;
+
+    /* cached first id in column */
+    int64_t first_id;
+
+    /* buffer for reading poslen */
+    int64_t start_id, excl_stop_id;
+    uint64_t *buff;
+    size_t max_ids;
+
+    /* source of poslen */
+    const MapFile *tmp_col;
+
+    size_t full_spec_size;
+    char full_spec [ 1 ];
+};
+
+
+/* Whack
+ */
+static
+void PoslenColReaderWhack ( PoslenColReader *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* self-bytes */
+    size_t bytes = sizeof * self + self -> full_spec_size;
+
+    /* free buffer */
+    if ( self -> buff != NULL )
+    {
+        ON_FAIL ( MemFree ( ctx, self -> buff, self -> max_ids * sizeof * self -> buff ) )
+        {
+            CLEAR ();
+        }
+        self -> buff = NULL;
+    }
+
+    /* release MapFile */
+    ON_FAIL ( MapFileRelease ( self -> tmp_col, ctx ) )
+    {
+        WARN ( "MapFileRelease failed on '%s'", self -> full_spec );
+        CLEAR ();
+    }
+    self -> tmp_col = NULL;
+
+    /* free self */
+    MemFree ( ctx, self, bytes );
+}
+
+/* FullSpec
+ */
+static
+const char *PoslenColReaderFullSpec ( const PoslenColReader *self, const ctx_t *ctx )
+{
+    return self -> full_spec;
+}
+
+
+/* IdRange
+ *  returns the number of ids available
+ *  and optionally the first id
+ */
+static
+uint64_t PoslenColReaderIdRange ( const PoslenColReader *self,
+    const ctx_t *ctx, int64_t *opt_first )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( opt_first != NULL )
+    {
+        ON_FAIL ( * opt_first = self -> first_id )
+            return 0;
+    }
+
+    return MapFileCount ( self -> tmp_col, ctx );
+}
+
+
+/* PreCopy
+ *  create buffer
+ */
+static
+void PoslenColReaderPreCopy ( PoslenColReader *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    const Tool *tp = ctx -> caps -> tool;
+
+    self -> max_ids = tp -> max_poslen_ids;
+    if ( tp -> max_poslen_ids < 4096 )
+        self -> max_ids = 4096;
+
+    TRY ( self -> buff = MemAlloc ( ctx, self -> max_ids * sizeof * self -> buff, false ) )
+    {
+        self -> start_id = self -> excl_stop_id = self -> first_id;
+    }
+    CATCH_ALL ()
+    {
+        ANNOTATE ( "failed to allocate buffer for PoslenColReader" );
+    }
+}
+
+
+/* PostCopy
+ *  douse buffer
+ */
+static
+void PoslenColReaderPostCopy ( PoslenColReader *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( self -> buff != NULL )
+    {
+        TRY ( MemFree ( ctx, self -> buff, self -> max_ids * sizeof * self -> buff ) )
+        {
+            self -> buff = NULL;
+        }
+    }
+}
+
+
+/* Read
+ *  read next row of data
+ *  returns NULL if no rows are available
+ */
+static
+const void *PoslenColReaderRead ( PoslenColReader *self, const ctx_t *ctx,
+    int64_t row_id, uint32_t *elem_bits, uint32_t *boff, uint32_t *row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    uint32_t dummy;
+
+    if ( elem_bits == NULL )
+        elem_bits = & dummy;
+    if ( boff == NULL )
+        boff = & dummy;
+    if ( row_len == NULL )
+        row_len = & dummy;
+
+    * elem_bits = 64;
+    * boff = 0;
+    * row_len = 0;
+
+    assert ( self -> buff != NULL );
+
+    if ( row_id < self -> start_id || row_id >= self -> excl_stop_id )
+    {
+        size_t num_read;
+
+        if ( row_id < self -> first_id )
+            return NULL;
+
+        /* generate page-aligned starting id */
+        self -> start_id = ( row_id - self -> first_id );
+        self -> start_id -= self -> start_id % self -> max_ids;
+        self -> start_id += self -> first_id;
+        assert ( self -> start_id + self -> max_ids > row_id );
+
+        /* read into buffer */
+        ON_FAIL ( num_read = MapFileReadPoslen ( self -> tmp_col, ctx, self -> start_id, self -> buff, self -> max_ids ) )
+        {
+            self -> start_id = self -> excl_stop_id = self -> first_id;
+            return NULL;
+        }
+        self -> excl_stop_id = self -> start_id + num_read;
+
+        if ( row_id >= self -> excl_stop_id )
+            return NULL;
+    }
+
+    * row_len = 1;
+    return & self -> buff [ row_id - self -> start_id ];
+}
+
+static ColumnReader_vt PoslenColReader_vt =
+{
+    PoslenColReaderWhack,
+    PoslenColReaderFullSpec,
+    PoslenColReaderIdRange,
+    PoslenColReaderPreCopy,
+    PoslenColReaderPostCopy,
+    PoslenColReaderRead
+};
+
+
+/*--------------------------------------------------------------------------
+ * TablePair
+ */
+
+
+/* MakePoslenColReader
+ *  make temporary column reader
+ */
+ColumnReader *TablePairMakePoslenColReader ( TablePair *self, const ctx_t *ctx,
+    const MapFile *tmp_col, const char *colspec )
+{
+    FUNC_ENTRY ( ctx );
+
+    PoslenColReader *col;
+    size_t full_spec_size = self -> full_spec_size + string_size ( colspec ) + sizeof "src.." - 1;
+
+    TRY ( col = MemAlloc ( ctx, sizeof * col + full_spec_size, false ) )
+    {
+        TRY ( ColumnReaderInit ( & col -> dad, ctx, & PoslenColReader_vt ) )
+        {
+            TRY ( col -> first_id = MapFileFirst ( tmp_col, ctx ) )
+            {
+                TRY ( col -> tmp_col = MapFileDuplicate ( tmp_col, ctx ) )
+                {
+                    rc_t rc;
+
+                    col -> dad . presorted = true;
+                    col -> start_id = col -> excl_stop_id = col -> first_id;
+                    col -> buff = NULL;
+                    col -> max_ids = ctx -> caps -> tool -> max_poslen_ids;
+                    col -> full_spec_size = ( uint32_t ) full_spec_size;
+
+                    rc = string_printf ( col -> full_spec, full_spec_size + 1, NULL,
+                        "src.%s.%s", self -> full_spec, colspec );
+                    if ( rc == 0 )
+                        return & col -> dad;
+
+                    ABORT ( rc, "miscalculated string size" );
+                }
+            }
+        }
+
+        MemFree ( ctx, col, sizeof * col + full_spec_size );
+    }
+    CATCH_ALL ()
+    {
+        ANNOTATE ( "failed to allocate %zu bytes for PoslenColReader", sizeof * col + full_spec_size );
+    }
+
+    return NULL;
+
+}
+
+
+/*--------------------------------------------------------------------------
+ * PoslenColWriter
+ *  implementation of ColumnWriter based upon VCursor
+ */
+struct PoslenColWriter
+{
+    ColumnWriter dad;
+
+    VCursor *curs;
+    uint32_t global_ref_start;
+    uint32_t ref_len;
+
+    uint32_t full_spec_size;
+    char full_spec [ 1 ];
+};
+
+static
+void PoslenColWriterWhack ( PoslenColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    rc = VCursorRelease ( self -> curs );
+    if ( rc != 0 )
+        ERROR ( rc, "VCursorRelease failed on column '%s'", self -> full_spec );
+
+    MemFree ( ctx, self, sizeof * self + self -> full_spec_size );
+}
+
+
+static
+const char *PoslenColWriterFullSpec ( const PoslenColWriter *self, const ctx_t *ctx )
+{
+    return self -> full_spec;
+}
+
+static
+void PoslenColWriterDummyStub ( PoslenColWriter *self, const ctx_t *ctx )
+{
+}
+
+static
+void PoslenColWriterWrite ( PoslenColWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    uint64_t poslen;
+
+    uint32_t ref_len;
+    uint64_t global_ref_start;
+
+    assert ( elem_bits == 64 );
+    assert ( boff == 0 );
+    assert ( row_len == 1 );
+
+    memcpy ( & poslen, data, sizeof poslen );
+    global_ref_start = decode_pos_len ( poslen );
+    ref_len = poslen_to_len ( poslen );
+
+    rc = VCursorOpenRow ( self -> curs );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "VCursorOpenRow failed on column '%s'", self -> full_spec );
+    else
+    {
+        rc = VCursorWrite ( self -> curs, self -> global_ref_start, sizeof global_ref_start * 8, & global_ref_start, 0, 1 );
+        if ( rc != 0 )
+            SYSTEM_ERROR ( rc, "VCursorWrite failed for GLOBAL_REF_START of column '%s'", self -> full_spec );
+        else
+        {
+            rc = VCursorWrite ( self -> curs, self -> ref_len, sizeof ref_len * 8, & ref_len, 0, 1 );
+            if ( rc != 0 )
+                SYSTEM_ERROR ( rc, "VCursorWrite failed for REF_LEN of column '%s'", self -> full_spec );
+            else
+            {
+                rc = VCursorCommitRow ( self -> curs );
+                if ( rc != 0 )
+                    SYSTEM_ERROR ( rc, "VCursorCommit failed for column '%s'", self -> full_spec );
+            }
+        }
+
+        rc = VCursorCloseRow ( self -> curs );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "VCursorCloseRow failed on column '%s'", self -> full_spec );
+    }
+}
+
+static
+void PoslenColWriterWriteStatic ( PoslenColWriter *self, const ctx_t *ctx,
+    uint32_t elem_bits, const void *data, uint32_t boff, uint32_t row_len, uint64_t count )
+{
+    FUNC_ENTRY ( ctx );
+
+    uint64_t poslen;
+
+    uint32_t ref_len;
+    uint64_t global_ref_start;
+
+    assert ( elem_bits == 64 );
+    assert ( boff == 0 );
+    assert ( row_len == 1 );
+
+    memcpy ( & poslen, data, sizeof poslen );
+    global_ref_start = decode_pos_len ( poslen );
+    ref_len = poslen_to_len ( poslen );
+
+    for ( ; ! FAILED () && count > 0; -- count )
+    {
+        rc_t rc = VCursorOpenRow ( self -> curs );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "VCursorOpenRow failed on column '%s'", self -> full_spec );
+        else
+        {
+            rc = VCursorWrite ( self -> curs, self -> global_ref_start, sizeof global_ref_start * 8, & global_ref_start, 0, 1 );
+            if ( rc != 0 )
+                SYSTEM_ERROR ( rc, "VCursorWrite failed for GLOBAL_REF_START of column '%s'", self -> full_spec );
+            else
+            {
+                rc = VCursorWrite ( self -> curs, self -> ref_len, sizeof ref_len * 8, & ref_len, 0, 1 );
+                if ( rc != 0 )
+                    SYSTEM_ERROR ( rc, "VCursorWrite failed for REF_LEN of column '%s'", self -> full_spec );
+                else
+                {
+                    rc = VCursorCommitRow ( self -> curs );
+                    if ( rc != 0 )
+                        SYSTEM_ERROR ( rc, "VCursorCommit failed for column '%s'", self -> full_spec );
+                    else if ( count > 1 )
+                    {
+                        uint64_t cnt = (count < 0x20000000U ) ? count : 0x20000000U;
+                        rc = VCursorRepeatRow ( self -> curs, cnt - 1 );
+                        if ( rc != 0 )
+                            SYSTEM_ERROR ( rc, "VCursorRepeatRow failed for column '%s'", self -> full_spec );
+                        count -= cnt - 1;
+                    }
+                }
+            }
+
+            rc = VCursorCloseRow ( self -> curs );
+            if ( rc != 0 )
+                INTERNAL_ERROR ( rc, "VCursorCloseRow failed on column '%s'", self -> full_spec );
+        }
+    }
+}
+
+static
+void PoslenColWriterCommit ( PoslenColWriter *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    rc = VCursorCommit ( self -> curs );
+    if ( rc != 0 )
+        ERROR ( rc, "VCursorCommit failed on column '%s'", self -> full_spec );
+    else
+    {
+        rc = VCursorRelease ( self -> curs );
+        if ( rc != 0 )
+            ERROR ( rc, "VCursorRelease failed on column '%s'", self -> full_spec );
+        else
+        {
+            self -> curs = NULL;
+        }
+    }
+}
+
+
+static ColumnWriter_vt PoslenColWriter_vt =
+{
+    PoslenColWriterWhack,
+    PoslenColWriterFullSpec,
+    PoslenColWriterDummyStub,
+    PoslenColWriterDummyStub,
+    PoslenColWriterWrite,
+    PoslenColWriterWriteStatic,
+    PoslenColWriterCommit
+};
+
+
+
+/*--------------------------------------------------------------------------
+ * TablePair
+ */
+
+
+/* MakePoslenColWriter
+ */
+ColumnWriter *TablePairMakePoslenColWriter ( TablePair *self, const ctx_t *ctx,
+   VCursor *opt_curs, const char *colspec )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    VCursor *curs;
+
+    if ( opt_curs != NULL )
+        rc = VCursorAddRef ( curs = opt_curs );
+    else
+        rc = VTableCreateCursorWrite ( self -> dtbl, & curs, kcmInsert );
+    if ( rc != 0 )
+        ERROR ( rc, "failed to create cursor on column 'dst.%s.%s'", self -> full_spec, colspec );
+    else
+    {
+        uint32_t global_ref_start;
+        const char *subcolspec = "(U64)GLOBAL_REF_START";
+        rc = VCursorAddColumn ( curs, & global_ref_start, subcolspec );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to add column 'dst.%s.%s' to cursor", self -> full_spec, subcolspec );
+        else
+        {
+            uint32_t ref_len;
+            subcolspec = "(INSDC:coord:len)REF_LEN";
+            rc = VCursorAddColumn ( curs, & ref_len, subcolspec );
+            if ( rc != 0 )
+                ERROR ( rc, "failed to add column 'dst.%s.%s' to cursor", self -> full_spec, subcolspec );
+            else
+            {
+                VCursorSuspendTriggers ( curs );
+                rc = VCursorOpen ( curs );
+                if ( rc != 0 )
+                    ERROR ( rc, "failed to open cursor on columns for 'dst.%s.%s'", self -> full_spec, colspec );
+                else
+                {
+                    PoslenColWriter *col;
+                    size_t full_spec_size = self -> full_spec_size + string_size ( colspec ) + sizeof "dst.." - 1;
+
+                    TRY ( col = MemAlloc ( ctx, sizeof * col + full_spec_size, false ) )
+                    {
+                        ColumnWriterInit ( & col -> dad, ctx, & PoslenColWriter_vt, false );
+                        col -> curs = curs;
+                        col -> global_ref_start = global_ref_start;
+                        col -> ref_len = ref_len;
+
+                        col -> full_spec_size = ( uint32_t ) full_spec_size;
+                        rc = string_printf ( col -> full_spec, full_spec_size + 1, NULL,
+                            "dst.%s.%s", self -> full_spec, colspec );
+                        if ( rc == 0 )
+                            return & col -> dad;
+
+                        ABORT ( rc, "miscalculated string size" );
+                    }
+                    CATCH_ALL ()
+                    {
+                        ANNOTATE ( "failed to allocate %zu bytes for PoslenColWriter", sizeof * col + full_spec_size );
+                    }
+                }
+            }
+        }
+
+        VCursorRelease ( curs );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/poslen-col-pair.h b/tools/sra-sort/poslen-col-pair.h
new file mode 100644
index 0000000..e4f4087
--- /dev/null
+++ b/tools/sra-sort/poslen-col-pair.h
@@ -0,0 +1,63 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_poslen_col_pair_
+#define _h_sra_sort_poslen_col_pair_
+
+#ifndef _h_sra_sort_defs_
+#include "defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct VCursor;
+struct TablePair;
+struct ColumnReader;
+struct ColumnWriter;
+
+
+/*--------------------------------------------------------------------------
+ * TablePair
+ */
+
+
+/* MakePoslenColReader
+ *  make temporary column reader
+ */
+struct ColumnReader *TablePairMakePoslenColReader ( struct TablePair *self, const ctx_t *ctx,
+    struct MapFile const *tmp_col, const char *colspec );
+
+
+/* MakePoslenColWriter
+ */
+struct ColumnWriter *TablePairMakePoslenColWriter ( struct TablePair *self,
+    const ctx_t *ctx, struct VCursor *opt_curs, const char *colspec );
+
+
+
+#endif /* _h_sra_sort_poslen_col_pair_ */
diff --git a/tools/sra-sort/ref-alignid-col.c b/tools/sra-sort/ref-alignid-col.c
new file mode 100644
index 0000000..59570df
--- /dev/null
+++ b/tools/sra-sort/ref-alignid-col.c
@@ -0,0 +1,705 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+struct AlignIdColReader;
+#define COLREADER_IMPL struct AlignIdColReader
+
+#include "ref-alignid-col.h"
+#include "glob-poslen.h"
+#include "csra-tbl.h"
+#include "csra-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "idx-mapping.h"
+#include "map-file.h"
+#include "sra-sort.h"
+
+#include <vdb/cursor.h>
+#include <kapp/main.h>
+#include <klib/sort.h>
+#include <klib/rc.h>
+
+#include <string.h>
+#include <assert.h>
+
+FILE_ENTRY ( ref-alignid-col );
+
+
+/*--------------------------------------------------------------------------
+ * IdPosLen
+ */
+typedef struct IdPosLen IdPosLen;
+struct IdPosLen
+{
+    int64_t id;
+    uint64_t poslen;
+};
+
+#if USE_OLD_KSORT
+static
+int CC IdPosLenCmpPos ( const void *a, const void *b, void *data )
+{
+    const IdPosLen *ap = a;
+    const IdPosLen *bp = b;
+
+    if ( ap -> poslen < bp -> poslen )
+        return -1;
+    if ( ap -> poslen > bp -> poslen )
+        return 1;
+    if ( ap -> id < bp -> id )
+        return -1;
+    return ap -> id > bp -> id;
+}
+
+static
+int CC cmp_int64_t ( const void *a, const void *b, void *data )
+{
+    const int64_t *ap = a;
+    const int64_t *bp = b;
+
+    if ( * ap < * bp )
+        return -1;
+    return * ap > * bp;
+}
+#else
+
+static
+void ksort_IdPosLen_pos ( IdPosLen *pbase, size_t total_elems )
+{
+#define SWAP( a, b, off, size )                               \
+    do                                                        \
+    {                                                         \
+        IdPosLen tmp = * ( const IdPosLen* ) ( a );           \
+        * ( IdPosLen* ) ( a ) = * ( const IdPosLen* ) ( b );  \
+        * ( IdPosLen* ) ( b ) = tmp;                          \
+    } while ( 0 )
+
+
+#define CMP( a, b )                                                                                   \
+     ( ( ( ( const IdPosLen* ) ( a ) ) -> poslen == ( ( const IdPosLen* ) ( b ) ) -> poslen ) ?       \
+       ( ( ( const IdPosLen* ) ( a ) ) -> id < ( ( const IdPosLen* ) ( b ) ) -> id ) ? -1 :           \
+       ( ( ( const IdPosLen* ) ( a ) ) -> id > ( ( const IdPosLen* ) ( b ) ) -> id )                  \
+       : ( ( ( const IdPosLen* ) ( a ) ) -> poslen < ( ( const IdPosLen* ) ( b ) ) -> poslen ) ? -1 : \
+       ( ( ( const IdPosLen* ) ( a ) ) -> poslen > ( ( const IdPosLen* ) ( b ) ) -> poslen ) )
+
+    KSORT ( pbase, total_elems, sizeof * pbase, 0, sizeof * pbase );
+
+#undef SWAP
+#undef CMP
+
+}
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * AlignIdColReader
+ */
+typedef struct AlignIdColReader AlignIdColReader;
+struct AlignIdColReader
+{
+    ColumnReader dad;
+
+    /* state for id range:
+       first = slot [ 0 ] of map
+       row_id = needs to match request - we only accept serial scans
+       next_id = next id to fetch from "ids"
+       last_excl = end of "ids" */
+    int64_t first, row_id, next_id, last_excl;
+
+    /* sequence for handing out new ids */
+    int64_t new_id;
+
+    /* reader onto our join index column */
+    ColumnReader *ids;
+
+    /* reader onto alignment table
+       to retrieve GLOBAL_REF_START + REF_LEN */
+    ColumnReader *poslen;
+
+    /* bi-directional index for writing
+       new=>old and old=>new mappings */
+    MapFile *idx;
+
+    /* buffer for sorted data */
+    union
+    {
+        int64_t *ids;
+        IdPosLen *id_poslen;
+        IdxMapping *id_map;
+    } u;
+    size_t max_elems;
+    size_t num_elems;
+    size_t cur_elem;
+
+    /* buffer for id row */
+    int64_t *row;
+    size_t max_row_len;
+
+    /* chunk-size */
+    size_t chunk_size;
+
+    /* whether we have all ids or not */
+    bool entire_table;
+};
+
+static
+void AlignIdColReaderDestroy ( AlignIdColReader *self, const ctx_t *ctx )
+{
+    if ( self -> ids != NULL )
+    {
+        FUNC_ENTRY ( ctx );
+
+        STATUS ( 4, "destroying align-column reader '%s'", ColumnReaderFullSpec ( self -> ids, ctx ) );
+
+        /* tear everything down */
+        MapFileRelease ( self -> idx, ctx );
+        self -> idx = NULL;
+
+        ColumnReaderRelease ( self -> poslen, ctx );
+        self -> poslen = NULL;
+
+        ColumnReaderRelease ( self -> ids, ctx );
+        self -> ids = NULL;
+
+        if ( self -> u . id_poslen != NULL )
+        {
+            MemFree ( ctx, self -> u . id_poslen, sizeof * self -> u . id_poslen * self -> max_elems );
+            self -> u . id_poslen = NULL;
+        }
+        if ( self -> row != NULL )
+        {
+            MemFree ( ctx, self -> row, sizeof self -> row [ 0 ] * self -> max_row_len );
+            self -> row = NULL;
+        }
+    }
+}
+
+static
+void AlignIdColReaderWhack ( AlignIdColReader *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* tear down self */
+    AlignIdColReaderDestroy ( self, ctx );
+
+    /* tear down super-class */
+    ColumnReaderDestroy ( & self -> dad, ctx );
+
+    /* gone */
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+const char *AlignIdColReaderFullSpec ( const AlignIdColReader *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    return ColumnReaderFullSpec ( self -> ids, ctx );
+}
+
+static
+uint64_t AlignIdColReaderIdRange ( const AlignIdColReader *self, const ctx_t *ctx, int64_t *opt_first )
+{
+    FUNC_ENTRY ( ctx );
+    return ColumnReaderIdRange ( self -> ids, ctx, opt_first );
+}
+
+static
+void AlignIdColReaderFlushToIdx ( AlignIdColReader *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( self -> idx != NULL )
+    {
+        const Tool *tp = ctx -> caps -> tool;
+
+        /* write new=>old ids  */
+        STATUS ( 3, "%s new=>old id map", tp -> write_new_to_old ? "writing" : "setting" );
+        ON_FAIL ( MapFileSetNewToOld ( self -> idx, ctx, self -> u . id_map, self -> num_elems ) )
+        {
+            ANNOTATE ( "failed to record new to old id mappings for '%s'", ColumnReaderFullSpec ( self -> ids, ctx ) );
+            return;
+        }
+        if ( tp -> sort_before_old2new )
+        {
+            /* sort by old ids */
+            STATUS ( 3, "sorting id-map by old-id" );
+#if USE_OLD_KSORT
+            ksort ( self -> u . id_map, self -> num_elems, sizeof self -> u . id_map [ 0 ], IdxMappingCmpOld, ( void* ) ctx );
+#else
+            IdxMappingSortOld ( self -> u . id_map, ctx, self -> num_elems );
+#endif
+        }
+
+        /* write old=>new ids  */
+        STATUS ( 3, "writing old=>new id map" );
+        ON_FAIL ( MapFileSetOldToNew ( self -> idx, ctx, self -> u . id_map, self -> num_elems ) )
+        {
+            ANNOTATE ( "failed to record old to new id mappings for '%s'", ColumnReaderFullSpec ( self -> ids, ctx ) );
+            return;
+        }
+
+        STATUS ( 3, "done writing id maps" );
+    }
+
+    /* empty buffer */
+    self -> first = self -> next_id;
+}
+
+static
+void AlignIdColReaderPreCopy ( AlignIdColReader *self, const ctx_t *ctx )
+{
+    /* TBD - a good place to allocate memory */
+}
+
+static
+void AlignIdColReaderPostCopy ( AlignIdColReader *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* called after a single copy
+       assumes that entire row-range of table has been copied */
+
+    /* tear down self */
+    AlignIdColReaderDestroy ( self, ctx );
+}
+
+static
+const void *AlignIdColReaderRead ( AlignIdColReader *self, const ctx_t *ctx,
+    int64_t row_id, uint32_t *elem_bits, uint32_t *boff, uint32_t *row_len )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    const void *base;
+    uint32_t num_read32;
+    size_t i, num_read;
+
+    /* handle bad parameters */
+    uint32_t dummy [ 3 ];
+    if ( elem_bits == NULL )
+        elem_bits = & dummy [ 0 ];
+    if ( boff == NULL )
+        boff = & dummy [ 1 ];
+    if ( row_len == NULL )
+        row_len = & dummy [ 2 ];
+
+    /* THERE ARE three stages to this method:
+       1a. detect need to allocate id map
+       1b. detect need to flush to index
+       2.  detect need to refresh id map
+       3.  respond to read request
+     */
+
+    if ( row_id != self -> row_id )
+    {
+        /* error condition */
+        rc = RC ( rcExe, rcCursor, rcReading, rcParam, rcIncorrect );
+        INTERNAL_ERROR ( rc, "AlignIdColReader only supports serial access" );
+        return NULL;
+    }
+
+    /* stage 1 - allocate or flush */
+    if ( self -> u . ids == NULL && ! self -> entire_table )
+    {
+        /* limit ids to actual count */
+        uint64_t num_ids = MapFileCount ( self -> idx, ctx );
+        self -> max_elems = ctx -> caps -> tool -> max_ref_idx_ids;
+        if ( ( uint64_t ) self -> max_elems > num_ids )
+            self -> max_elems = ( size_t ) num_ids;
+
+        /* allocate the buffer */
+        do
+        {
+            CLEAR ();
+
+            TRY ( self -> u . id_poslen = MemAlloc ( ctx, sizeof self -> u . id_poslen [ 0 ] * self -> max_elems, false ) )
+            {
+                STATUS ( 4, "allocated map buffer with %,zu elements", self -> max_elems );
+                break;
+            }
+
+            self -> max_elems >>= 1;
+        }
+        while ( self -> max_elems >= 1024 * 1024 );
+
+        if ( FAILED () )
+        {
+            ANNOTATE ( "failed to allocate id buffer" );
+            return NULL;
+        }
+
+        /* notice if we have the entire table */
+        if ( ( uint64_t ) self -> max_elems == num_ids )
+            self -> entire_table = true;
+
+        /* allocate a row buffer */
+        self -> max_row_len = 8 * 1024;
+        ON_FAIL ( self -> row = MemAlloc ( ctx, sizeof self -> row [ 8 ] * self -> max_row_len, false ) )
+        {
+            ANNOTATE ( "failed to allocate row buffer" );
+            return NULL;
+        }
+
+        assert ( self -> first == self -> next_id );
+        assert ( self -> first == row_id );
+    }
+    else if ( row_id == self -> next_id && self -> first < row_id )
+    {
+        ON_FAIL ( AlignIdColReaderFlushToIdx ( self, ctx ) )
+            return NULL;
+    }
+
+    /* stage 2 - refresh */
+    if ( self -> first == self -> next_id )
+    {
+        /* if there are no more rows, return NULL  */
+        if ( self -> next_id == self -> last_excl )
+        {
+            STATUS ( 3, "done reading '%s'", ColumnReaderFullSpec ( self -> ids, ctx ) );
+            return NULL;
+        }
+
+        self -> cur_elem = 0;
+
+        /* if the entire table will be read into memory,
+           there is no point in reading/sorting the ids */
+        if ( self -> entire_table )
+        {
+            STATUS ( 3, "auto-generating %,zu ids for '%s'", self -> max_elems, ColumnReaderFullSpec ( self -> ids, ctx ) );
+            for ( i = 0; i < self -> max_elems; ++ i )
+            {
+                self -> u . id_poslen [ i ] . id = self -> first + i;
+#if _DEBUGGING
+                self -> u . id_poslen [ i ] . poslen = 0;
+#endif
+            }
+
+            self -> num_elems = self -> max_elems;
+            self -> next_id = self -> last_excl;
+        }
+        else
+        {
+            /* read up to max_elems into id array */
+            STATUS ( 3, "reading ids from '%s'", ColumnReaderFullSpec ( self -> ids, ctx ) );
+            for ( self -> num_elems = 0; self -> next_id < self -> last_excl; self -> num_elems += num_read, ++ self -> next_id )
+            {
+                /* read a row of ids */
+                ON_FAIL ( base = ColumnReaderRead ( self -> ids, ctx, self -> next_id, elem_bits, boff, & num_read32 ) )
+                {
+                    ANNOTATE ( "failed to read id column" );
+                    return NULL;
+                }
+
+                /* we expect empty rows */
+                num_read = num_read32;
+                if ( num_read == 0 )
+                    continue;
+
+                assert ( * elem_bits == sizeof self -> u . ids [ 0 ] * 8 );
+                assert ( * boff == 0 );
+
+                /* detect when buffer is full */
+                if ( self -> num_elems + num_read > self -> max_elems )
+                {
+                    /* if we've read at least one row, then we're okay */
+                    if ( self -> first < self -> next_id )
+                        break;
+
+                    /* error condition - buffer was too small to read a single row */
+                    rc = RC ( rcExe, rcCursor, rcReading, rcBuffer, rcInsufficient );
+                    ERROR ( rc, "allocated buffer was too small ( %zu elems ) to read a single row ( id %ld, row-len %zu )",
+                            self -> max_elems, self -> next_id, num_read );
+                    return NULL;
+                }
+
+                /* bring them in */
+                memcpy ( & self -> u . ids [ self -> num_elems ], base, num_read * sizeof self -> u . ids [ 0 ] );
+            }
+
+            /* sort to produce sparse but ordered list */
+            STATUS ( 3, "sorting %,zu 64-bit ids", self -> num_elems );
+#if USE_OLD_KSORT
+            ksort ( self -> u . ids, self -> num_elems, sizeof self -> u . ids [ 0 ], cmp_int64_t, ( void* ) ctx );
+#else
+            ksort_int64_t ( self -> u . ids, self -> num_elems );
+#endif
+
+            /* transform from ids to id_poslen */
+            STATUS ( 3, "expanding ids to ( id, position, len ) tuples" );
+            for ( i = self -> num_elems; i > 1 ; )
+            {
+                -- i;
+                self -> u . id_poslen [ i ] . id = self -> u . ids [ i ];
+            }
+        }
+
+        /* read num_elems from poslen */
+        STATUS ( 3, "reading ( position, len ) pairs from '%s'", ColumnReaderFullSpec ( self -> poslen, ctx ) );
+        for ( i = 0; i < self -> num_elems; ++ i )
+        {
+            ON_FAIL ( base = ColumnReaderRead ( self -> poslen, ctx, self -> u . id_poslen [ i ] . id, elem_bits, boff, & num_read32 ) )
+            {
+                ANNOTATE ( "failed to read global ref-start from alignment table" );
+                return NULL;
+            }
+
+            num_read = num_read32;
+            assert ( * elem_bits == sizeof self -> u . id_poslen [ 0 ] . poslen * 8 );
+            assert ( * boff == 0 );
+            assert ( num_read == 1 );
+
+            self -> u . id_poslen [ i ] . poslen = * ( uint64_t* ) base;
+        }
+
+        /* sort by poslen */
+        STATUS ( 3, "sorting ( id, position, len ) tuples on position, len DESC" );
+#if USE_OLD_KSORT
+        ksort ( self -> u . id_poslen, self -> num_elems, sizeof self -> u . id_poslen [ 0 ], IdPosLenCmpPos, ( void* ) ctx );
+#else
+        ksort_IdPosLen_pos ( self -> u . id_poslen, self -> num_elems );
+#endif
+
+        /* write poslen to temp column */
+        STATUS ( 3, "writing ( position, len ) to temp column" );
+        ON_FAIL ( MapFileSetPoslen ( self -> idx, ctx, self -> u . id_map, self -> num_elems ) )
+        {
+            ANNOTATE ( "failed to write temporary poslen column for '%s'", ColumnReaderFullSpec ( self -> ids, ctx ) );
+            return NULL;
+        }
+
+        STATUS ( 3, "done writing ( position, len )" );
+    }
+
+    /* stage 3 - build a row */
+    for ( num_read = ( size_t ) ( self -> num_elems - self -> cur_elem ), i = 0; i < num_read; ++ i )
+    {
+        /* whatever the current element is, it must belong to this row */
+        uint64_t pos = decode_pos_len ( self -> u . id_poslen [ self -> cur_elem + i ] . poslen );
+        int64_t cur_row_id = global_to_row_id ( pos, self -> chunk_size );
+        if ( cur_row_id != row_id )
+        {
+            num_read = i;
+            break;
+        }
+    }
+
+    /* "num_read" now has the number of elements in this row */
+    if ( num_read > self -> max_row_len )
+    {
+        STATUS ( 4, "reallocating row buffer for row-length %,zu", num_read );
+
+        /* realloc the row buffer */
+        MemFree ( ctx, self -> row, self -> max_row_len * sizeof self -> row [ 0 ] );
+
+        self -> max_row_len = ( num_read + 4095 ) & ~ ( size_t ) 4095;
+        ON_FAIL ( self -> row = MemAlloc ( ctx, sizeof self -> row [ 0 ] * self -> max_row_len, false ) )
+        {
+            ANNOTATE ( "failed to reallocate row buffer" );
+            return NULL;
+        }
+    }
+
+    /* build the row, assigning new ids */
+    for ( i = 0; i < num_read; ++ i )
+    {
+        self -> row [ i ] = ++ self -> new_id;
+        self -> u . id_map [ self -> cur_elem + i ] . new_id = self -> new_id;
+    }
+
+    /* advance row_id */
+    self -> cur_elem += num_read;
+    if ( ++ self -> row_id == self -> last_excl )
+    {
+        /* if this was the last row, flush index  */
+        ON_FAIL ( AlignIdColReaderFlushToIdx ( self, ctx ) )
+            return NULL;
+
+        if ( ctx -> caps -> tool -> idx_consistency_check && self -> idx != NULL )
+        {
+            ON_FAIL ( MapFileConsistencyCheck ( self -> idx, ctx ) )
+                return NULL;
+        }
+    }
+
+    /* return row */
+    * elem_bits = sizeof self -> row [ 0 ] * 8;
+    * boff = 0;
+    * row_len = num_read;
+    return self -> row;
+}
+
+static ColumnReader_vt AlignIdColReader_vt =
+{
+    AlignIdColReaderWhack,
+    AlignIdColReaderFullSpec,
+    AlignIdColReaderIdRange,
+    AlignIdColReaderPreCopy,
+    AlignIdColReaderPostCopy,
+    AlignIdColReaderRead
+};
+
+
+/*--------------------------------------------------------------------------
+ * RefTblPair
+ */
+static
+size_t RefTblPairGetChunkSize ( TablePair *self, const ctx_t *ctx, const VCursor **cursp )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    rc = VTableCreateCursorRead ( self -> stbl, cursp );
+    if ( rc != 0 )
+        ERROR ( rc, "failed to create cursor on '%s'", self -> full_spec );
+    else
+    {
+        uint32_t idx;
+        const VCursor *curs = * cursp;
+        rc = VCursorAddColumn ( curs, & idx, "MAX_SEQ_LEN" );
+        if ( rc != 0 )
+            rc = VCursorAddColumn ( curs, & idx, "CHUNK_SIZE" );
+        if ( rc != 0 )
+            ERROR ( rc, "VCursorAddColumn - failed to determine chunk size of '%s'", self -> full_spec );
+        else
+        {
+            rc = VCursorOpen ( curs );
+            if ( rc != 0 )
+                ERROR ( rc, "VCursorOpen - failed to determine chunk size of '%s'", self -> full_spec );
+            else
+            {
+                uint32_t row_len, chunk_size;
+                rc = VCursorReadDirect ( curs, 1, idx,
+                    sizeof chunk_size * 8, & chunk_size, 1, & row_len );
+                if ( rc != 0 )
+                    ERROR ( rc, "VCursorReadDirect - failed to determine chunk size of '%s'", self -> full_spec );
+                else if ( row_len != 1 )
+                {
+                    rc = RC ( rcExe, rcCursor, rcReading, rcData, rcInsufficient );
+                    ERROR ( rc, "VCursorReadDirect - failed to determine chunk size of '%s'", self -> full_spec );
+                }
+                else
+                {
+                    STATUS ( 3, "'%s' chunk size determined to be %u", self -> full_spec, chunk_size );
+                    return chunk_size;
+                }
+            }
+        }
+
+        VCursorRelease ( curs );
+        * cursp = NULL;
+    }
+
+    return 0;
+}
+
+
+/*--------------------------------------------------------------------------
+ * ColumnReader
+ *  interface to read column in random order
+ */
+
+
+/* MakeAlignIdReader
+ */
+ColumnReader *TablePairMakeAlignIdReader ( TablePair *self,
+    const ctx_t *ctx, TablePair *align_tbl, MapFile *idx, const char *colspec )
+{
+    FUNC_ENTRY ( ctx );
+
+    size_t chunk_size;
+    const VCursor *curs;
+
+    /* determine chunk size and keep cursor for id reader */
+    TRY ( chunk_size = RefTblPairGetChunkSize ( self, ctx, & curs ) )
+    {
+        ColumnReader *ids;
+
+        /* need to create a traditional reader on self */
+        TRY ( ids = TablePairMakeColumnReader ( self, ctx, curs, colspec, true ) )
+        {
+            ColumnReader *poslen;
+
+            /* need to create a poslen reader on align_tbl */
+            TRY ( poslen = TablePairMakeGlobalPosLenReader ( align_tbl, ctx, ( uint32_t ) chunk_size ) )
+            {
+                int64_t first;
+                uint64_t count;
+
+                /* need to create a mapfile based on range of poslen */
+                TRY ( count = ColumnReaderIdRange ( poslen, ctx, & first ) )
+                {
+                    TRY ( MapFileSetIdRange ( idx, ctx, first, count ) )
+                    {
+                        AlignIdColReader *col;
+                        TRY ( col = MemAlloc ( ctx, sizeof * col, true ) )
+                        {
+                            TRY ( ColumnReaderInit ( & col -> dad, ctx, & AlignIdColReader_vt ) )
+                            {
+                                /* one more point of failure when obtaining the id range */
+                                TRY ( count = ColumnReaderIdRange ( ids, ctx, & first ) )
+                                {
+                                    TRY ( col -> idx = MapFileDuplicate ( idx, ctx ) )
+                                    {
+                                        col -> first = col -> row_id = col -> next_id = first;
+                                        col -> last_excl = first + count;
+                                        col -> ids = ids;
+                                        col -> poslen = poslen;
+                                        col -> chunk_size = chunk_size;
+                                        col -> entire_table = false;
+                                    
+                                        /* the actual working buffer is allocated upon demand
+                                           to avoid occupying space while waiting to execute */
+
+                                        /* douse the cursor here */
+                                        VCursorRelease ( curs );
+
+                                        return & col -> dad;
+                                    }
+                                }
+                            }
+                            
+                            MemFree ( ctx, col, sizeof * col );
+                        }
+                        
+                        MapFileRelease ( idx, ctx );
+                    }
+                }
+                
+                ColumnReaderRelease ( poslen, ctx );
+            }
+            
+            ColumnReaderRelease ( ids, ctx );
+        }
+
+        VCursorRelease ( curs );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/ref-alignid-col.h b/tools/sra-sort/ref-alignid-col.h
new file mode 100644
index 0000000..9b5ee84
--- /dev/null
+++ b/tools/sra-sort/ref-alignid-col.h
@@ -0,0 +1,53 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_ref_alignid_col_
+#define _h_sra_sort_ref_alignid_col_
+
+#ifndef _h_sra_sort_col_pair_
+#include "col-pair.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct MapFile;
+struct TablePair;
+
+
+/*--------------------------------------------------------------------------
+ * AlignIdColReader
+ */
+
+
+/* MakeAlignIdReader
+ */
+ColumnReader *TablePairMakeAlignIdReader ( struct TablePair *self,
+    const ctx_t *ctx, struct TablePair *align_tbl, struct MapFile *idx, const char *colspec );
+
+
+#endif /* _h_sra_sort_ref_alignid_col_ */
diff --git a/tools/sra-sort/row-set-priv.h b/tools/sra-sort/row-set-priv.h
new file mode 100644
index 0000000..62c50d6
--- /dev/null
+++ b/tools/sra-sort/row-set-priv.h
@@ -0,0 +1,44 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_row_set_priv_
+#define _h_sra_sort_row_set_priv_
+
+#ifndef _h_sra_sort_row_set_
+#include "row-set.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * RowSetIterator
+ *  the basic 4 types
+ */
+RowSetIterator * MapFileMakeMappingRowSetIterator ( struct MapFile const *self, const ctx_t *ctx, bool large );
+RowSetIterator * MapFileMakeSortingRowSetIterator ( struct MapFile const *self, const ctx_t *ctx, bool large );
+RowSetIterator * TablePairMakeMappingRowSetIterator ( struct TablePair *self, const ctx_t *ctx, bool large );
+RowSetIterator * TablePairMakeSimpleRowSetIterator ( struct TablePair *self, const ctx_t *ctx );
+
+#endif /* _h_sra_sort_row_set_priv_ */
diff --git a/tools/sra-sort/row-set.c b/tools/sra-sort/row-set.c
new file mode 100644
index 0000000..59f1851
--- /dev/null
+++ b/tools/sra-sort/row-set.c
@@ -0,0 +1,208 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "row-set-priv.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <vdb/cursor.h>
+#include <klib/rc.h>
+
+FILE_ENTRY ( row-set );
+
+
+/*--------------------------------------------------------------------------
+ * RowSet
+ *  interface to iterate row-ids
+ */
+
+
+/* Release
+ *  releases reference
+ */
+void RowSetRelease ( const RowSet *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "RowSet" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+            break;
+        case krefZero:
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcCursor, rcDestroying, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to release RowSet" );
+        }
+    }
+}
+
+/* Duplicate
+ */
+RowSet *RowSetDuplicate ( const RowSet *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "RowSet" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcCursor, rcAttaching, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to duplicate RowSet" );
+            return NULL;
+        }
+    }
+
+    return ( RowSet* ) self;
+}
+
+
+/* Init
+ */
+void RowSetInit ( RowSet *self, const ctx_t *ctx, const RowSet_vt *vt )
+{
+    self -> vt = vt;
+    KRefcountInit ( & self -> refcount, 1, "RowSet", "init", "" );
+    self -> align = 0;
+}
+
+
+/*--------------------------------------------------------------------------
+ * RowSetIterator
+ *  interface to iterate RowSets
+ */
+
+/* MakeRowSetIterator
+ *  make RowSet iterator based upon parameters
+ *  each RowSet will generate row-ids in src order
+ *
+ *  "sort_idx" [ IN ]
+ *    if NULL, the RowSet objects will auto-generate row-ids
+ *    otherwise, src row-ids will be selected from MapFile
+ *
+ *  "pairs" [ IN ]
+ *    if true, the row-ids will be generated into an IdxMapping pair
+ *    if false but "idx" is not NULL, the src row-ids will be generated
+ *      into a single-id map, and new ordering preserved in parallel
+ *    if false and "idx" is NULL, no additional structure will be generated
+ */
+RowSetIterator *TablePairMakeRowSetIterator ( struct TablePair *self, const ctx_t *ctx,
+    struct MapFile const *sort_idx, bool pairs, bool large )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( sort_idx != NULL )
+    {
+        if ( pairs )
+            return MapFileMakeMappingRowSetIterator ( sort_idx, ctx, large );
+
+        return MapFileMakeSortingRowSetIterator ( sort_idx, ctx, large );
+    }
+
+    if ( pairs )
+        return TablePairMakeMappingRowSetIterator ( self, ctx, large );
+
+    return TablePairMakeSimpleRowSetIterator ( self, ctx );
+}
+
+
+/* Release
+ *  releases reference
+ */
+void RowSetIteratorRelease ( const RowSetIterator *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "RowSetIterator" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+            break;
+        case krefZero:
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcCursor, rcDestroying, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to release RowSetIterator" );
+        }
+    }
+}
+
+/* Duplicate
+ */
+RowSetIterator *RowSetIteratorDuplicate ( const RowSetIterator *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "RowSetIterator" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcCursor, rcAttaching, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to duplicate RowSetIterator" );
+            return NULL;
+        }
+    }
+
+    return ( RowSetIterator* ) self;
+}
+
+
+/* Init
+ */
+void RowSetIteratorInit ( RowSetIterator *self, const ctx_t *ctx, const RowSetIterator_vt *vt )
+{
+    self -> vt = vt;
+    KRefcountInit ( & self -> refcount, 1, "RowSetIterator", "init", "" );
+    self -> align = 0;
+}
diff --git a/tools/sra-sort/row-set.h b/tools/sra-sort/row-set.h
new file mode 100644
index 0000000..8ffa38a
--- /dev/null
+++ b/tools/sra-sort/row-set.h
@@ -0,0 +1,215 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_row_set_
+#define _h_sra_sort_row_set_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct MapFile;
+struct TablePair;
+struct IdxMapping;
+
+
+/*--------------------------------------------------------------------------
+ * RowSet
+ *  interface to iterate row-ids
+ */
+typedef struct RowSet_vt RowSet_vt;
+
+typedef struct RowSet RowSet;
+struct RowSet
+{
+    const RowSet_vt *vt;
+    KRefcount refcount;
+    uint32_t align;
+};
+
+#ifndef ROWSET_IMPL
+#define ROWSET_IMPL RowSet
+#endif
+
+struct RowSet_vt
+{
+    /* called by Release */
+    void ( * whack ) ( ROWSET_IMPL *self, const ctx_t *ctx );
+
+    /* retrieve next set of row-ids */
+    size_t ( * next ) ( ROWSET_IMPL *self, const ctx_t *ctx,
+        int64_t *ids, size_t max_ids );
+
+    /* reset iterator to initial state */
+    void ( * reset ) ( ROWSET_IMPL *self, const ctx_t *ctx,
+        bool for_static );
+};
+
+
+/* Release
+ *  releases reference
+ */
+void RowSetRelease ( const RowSet *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+RowSet *RowSetDuplicate ( const RowSet *self, const ctx_t *ctx );
+
+
+/* Next
+ *  return next set of row-ids
+ *  returns 0 if no rows are available
+ */
+#define RowSetNext( self, ctx, ids, max_ids ) \
+    POLY_DISPATCH_INT ( next, self, ROWSET_IMPL, ctx, ids, max_ids )
+
+
+/* Reset
+ *  reset iterator to beginning
+ */
+#define RowSetReset( self, ctx, for_static ) \
+    POLY_DISPATCH_VOID ( reset, self, ROWSET_IMPL, ctx, for_static )
+
+
+/* Init
+ */
+void RowSetInit ( RowSet *self, const ctx_t *ctx, const RowSet_vt *vt );
+
+/* Destroy
+ */
+#define RowSetDestroy( self, ctx ) \
+    ( ( void ) 0 )
+
+
+/*--------------------------------------------------------------------------
+ * RowSetIterator
+ *  interface to iterate RowSets
+ */
+typedef struct RowSetIterator_vt RowSetIterator_vt;
+
+typedef struct RowSetIterator RowSetIterator;
+struct RowSetIterator
+{
+    const RowSetIterator_vt *vt;
+    KRefcount refcount;
+    uint32_t align;
+};
+
+#ifndef ROWSET_ITER_IMPL
+#define ROWSET_ITER_IMPL RowSetIterator
+#endif
+
+struct RowSetIterator_vt
+{
+    /* called by Release */
+    void ( * whack ) ( ROWSET_ITER_IMPL *self, const ctx_t *ctx );
+
+    /* retrieve row-id mapping pair */
+    struct IdxMapping* ( * get_idx_mapping ) ( ROWSET_ITER_IMPL *self, const ctx_t *ctx,
+        size_t *num_items );
+
+    /* retrieve src row-id array */
+    int64_t* ( * get_src_ids ) ( ROWSET_ITER_IMPL *self, const ctx_t *ctx,
+        uint32_t **opt_ord, size_t *num_items );
+
+    /* retrieve next row-set */
+    RowSet* ( * next ) ( ROWSET_ITER_IMPL *self, const ctx_t *ctx );
+};
+
+
+/* MakeRowSetIterator
+ *  make RowSet iterator based upon parameters
+ *  each RowSet will generate row-ids in src order
+ *
+ *  "sort_idx" [ IN ]
+ *    if NULL, the RowSet objects will auto-generate row-ids
+ *    otherwise, src row-ids will be selected from MapFile
+ *
+ *  "pairs" [ IN ]
+ *    if true, the row-ids will be generated into an IdxMapping pair
+ *    if false but "idx" is not NULL, the src row-ids will be generated
+ *      into a single-id map, and new ordering preserved in parallel
+ *    if false and "idx" is NULL, no additional structure will be generated
+ *
+ *  "large" [ IN ]
+ *    if true, use a reduced id-range for the row-set
+ */
+RowSetIterator *TablePairMakeRowSetIterator ( struct TablePair *self, const ctx_t *ctx,
+    struct MapFile const *sort_idx, bool pairs, bool large );
+
+
+/* Release
+ *  releases reference
+ */
+void RowSetIteratorRelease ( const RowSetIterator *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+RowSetIterator *RowSetIteratorDuplicate ( const RowSetIterator *self, const ctx_t *ctx );
+
+
+/* GetIdxMapping
+ *  a little bit of plumbing to get the IdxMapping map
+ */
+#define RowSetIteratorGetIdxMapping( self, ctx, num_items ) \
+    POLY_DISPATCH_PTR ( get_idx_mapping, self, ROWSET_ITER_IMPL, ctx, num_items )
+
+
+/* GetSourceIds
+ *  a little bit of plumbing to get the individual source ids
+ *  and optional new id ordering
+ */
+#define RowSetIteratorGetSourceIds( self, ctx, opt_ord, num_items ) \
+    POLY_DISPATCH_PTR ( get_src_ids, self, ROWSET_ITER_IMPL, ctx, opt_ord, num_items )
+
+
+/* Next
+ *  return next RowSet
+ *  returns NULL if no rows are available
+ */
+#define RowSetIteratorNext( self, ctx ) \
+    POLY_DISPATCH_PTR ( next, self, ROWSET_ITER_IMPL, ctx )
+
+
+/* Init
+ */
+void RowSetIteratorInit ( RowSetIterator *self, const ctx_t *ctx, const RowSetIterator_vt *vt );
+
+/* Destroy
+ */
+#define RowSetIteratorDestroy( self, ctx ) \
+    ( ( void ) 0 )
+
+
+#endif /* _h_sra_sort_row_set_ */
diff --git a/tools/sra-sort/run.c b/tools/sra-sort/run.c
new file mode 100644
index 0000000..8b55da7
--- /dev/null
+++ b/tools/sra-sort/run.c
@@ -0,0 +1,388 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "sra-sort.h"
+#include "db-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+
+#include <sra/sraschema.h>
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <kfg/config.h>
+#include <klib/text.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( run );
+
+static
+void typename_to_config_path ( const char *in, char *out )
+{
+    bool end;
+    uint32_t i;
+
+    for ( end = false, i = 0; ! end; ++ i )
+    {
+        switch ( out [ i ] = in [ i ] )
+        {
+        case ':':
+            out [ i ] = '/';
+            break;
+        case ' ':
+        case '#':
+            out [ i ] = 0;
+        case 0:
+            end = true;
+            return;
+        }
+    }
+}
+
+static
+bool map_typename_builtin ( const ctx_t *ctx, const char *sub_node, const char *in, char *out, char *schema_src, size_t size )
+{
+    FUNC_ENTRY ( ctx );
+
+    size_t copied;
+
+#define ALIGN_EVIDENCE_MAP "NCBI:align:db:alignment_evidence_sorted"
+#define ALIGN_UNSORTED_MAP "NCBI:align:db:alignment_sorted"
+#define ALIGN_SRC          "align/align.vschema"
+
+    if ( strcmp ( out, "NCBI/align/db/alignment_evidence" ) == 0 )
+        copied = string_copy ( out, size, ALIGN_EVIDENCE_MAP, sizeof ALIGN_EVIDENCE_MAP - 1 );
+    else if ( strcmp ( out, "NCBI/align/db/alignment_unsorted" ) == 0 )
+        copied = string_copy ( out, size, ALIGN_UNSORTED_MAP, sizeof ALIGN_UNSORTED_MAP - 1 );
+    else
+    {
+        strcpy ( out, in );
+        schema_src [ 0 ] = 0;
+        return false;
+    }
+
+    if ( copied != size )
+    {
+        out [ copied ] = 0;
+        copied = string_copy ( schema_src, size, ALIGN_SRC, sizeof ALIGN_SRC - 1 );
+    }
+
+    if ( copied == size )
+    {
+        rc_t rc = RC ( rcExe, rcType, rcCopying, rcBuffer, rcInsufficient );
+        INTERNAL_ERROR ( rc, "failed to copy a built-in constant" );
+        strcpy ( out, in );
+        schema_src [ 0 ] = 0;
+        return false;
+    }
+
+#undef ALIGN_EVIDENCE_MAP
+#undef ALIGN_UNSORTED_MAP
+#undef ALIGN_SRC
+
+    schema_src [ copied ] = 0;
+    return true;
+}
+
+static
+bool map_typename ( const ctx_t *ctx, const char *sub_node, const char *in, char *out, char *schema_src, size_t size )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    const KConfigNode *n;
+    size_t num_read, remaining;
+
+    typename_to_config_path ( in, out );
+
+    rc = KConfigOpenNodeRead ( ctx -> caps -> cfg, & n, "sra-sort/%s/%s", sub_node, out );
+    if ( rc != 0 )
+        return map_typename_builtin ( ctx, sub_node, in, out, schema_src, size );
+
+    rc = KConfigNodeRead ( n, 0, out, size - 1, & num_read, & remaining );
+    if ( rc != 0 )
+        ERROR ( rc, "KConfigNodeRead failed" );
+    else if ( remaining != 0 )
+    {
+        rc = RC ( rcExe, rcNode, rcReading, rcBuffer, rcInsufficient );
+        ERROR ( rc, "type map of '%s' is too long", in );
+    }
+    else
+    {
+        out [ num_read ] = 0;
+        typename_to_config_path ( out, schema_src );
+
+        KConfigNodeRelease ( n );
+        rc = KConfigOpenNodeRead ( ctx -> caps -> cfg, & n, "sra-sort/schema-src/%s", schema_src );
+        if ( rc != 0 )
+            ERROR ( rc, "KConfigOpenNodeRead - failed to find entry 'sra-sort/schema-src/%s'", schema_src );
+        else
+        {
+            rc = KConfigNodeRead ( n, 0, schema_src, size - 1, & num_read, & remaining );
+            if ( rc != 0 )
+                ERROR ( rc, "KConfigNodeRead failed" );
+            else if ( remaining != 0 )
+            {
+                rc = RC ( rcExe, rcNode, rcReading, rcBuffer, rcInsufficient );
+                ERROR ( rc, "type map of '%s' is too long", in );
+            }
+            else
+            {
+                schema_src [ num_read ] = 0;
+            }
+        }
+    }
+
+    KConfigNodeRelease ( n );
+    return true;
+}
+
+static
+VSchema *map_schema_types ( TypeParams *type, const ctx_t *ctx, const VSchema *src_schema )
+{
+    FUNC_ENTRY ( ctx );
+
+    bool mapped;
+    char schema_src [ 256 ];
+    assert ( sizeof schema_src == sizeof type -> dst_type );
+
+    TRY ( mapped = map_typename ( ctx, "out-map", type -> src_type, type -> dst_type, schema_src, sizeof schema_src ) )
+    {
+        rc_t rc;
+        VSchema *dst_schema;
+
+        if ( ! mapped )
+        {
+            type -> view_type [ 0 ] = 0;
+            rc = VSchemaAddRef ( src_schema );
+            if ( rc != 0 )
+                ERROR ( rc, "VSchemaAddRef failed" );
+            return ( VSchema* ) src_schema;
+        }
+
+        rc = VDBManagerMakeSchema ( ctx -> caps -> vdb, & dst_schema );
+        if ( rc != 0 )
+            ERROR ( rc, "VDBManagerMakeSchema failed" );
+        else
+        {
+            rc = VSchemaParseFile ( dst_schema, schema_src );
+            if ( rc != 0 )
+                ERROR ( rc, "VSchemaParseFile failed adding file '%s' for destination", src_schema );
+            else
+            {
+                TRY ( mapped = map_typename ( ctx, "view-map", type -> src_type, type -> view_type, schema_src, sizeof schema_src ) )
+                {
+                    if ( ! mapped )
+                    {
+                        type -> view_type [ 0 ] = 0;
+                        return dst_schema;
+                    }
+
+                    rc = VSchemaParseFile ( dst_schema, schema_src );
+                    if ( rc == 0 )
+                        return dst_schema;
+
+                    ERROR ( rc, "VSchemaParseFile failed adding file '%s' for view", src_schema );
+                }
+            }
+
+            VSchemaRelease ( dst_schema );
+        }
+    }
+
+    return NULL;
+}
+
+/* open_db
+ *  called from run
+ *  determines the type of schema
+ *  opens output object
+ *  dispatches to the appropriate handler
+ */
+static
+void open_db ( const ctx_t *ctx, const VDatabase **srcp )
+{
+    FUNC_ENTRY ( ctx );
+
+    const VDatabase *src = *srcp;
+
+    const VSchema *src_schema;
+    rc_t rc = VDatabaseOpenSchema ( src, & src_schema );
+    if ( rc != 0 )
+        ERROR ( rc, "VDatabaseOpenSchema failed" );
+    else
+    {
+        TypeParams type;
+        rc = VDatabaseTypespec ( src, type . src_type, sizeof type . src_type );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to obtain database typespec" );
+        else
+        {
+            VSchema *dst_schema;
+
+            /* map input type to output type */
+            TRY ( dst_schema = map_schema_types ( & type, ctx, src_schema ) )
+            {
+                const Tool *tp = ctx -> caps -> tool;
+
+                /* if view was remapped, reopen the database */
+                if ( type . view_type [ 0 ] != 0 )
+                {
+                    VSchemaRelease ( src_schema );
+                    rc = VSchemaAddRef ( dst_schema );
+                    if ( rc != 0 )
+                    {
+                        ERROR ( rc, "VSchemaAddRef failed" );
+                        src_schema = NULL;
+                    }
+                    else
+                    {
+                        src_schema = dst_schema;
+                        VDatabaseRelease ( src );
+                        rc = VDBManagerOpenDBRead ( ctx -> caps -> vdb, srcp, src_schema, tp -> src_path );
+                        if ( rc != 0 )
+                            ERROR ( rc, "VDBManagerOpenDBRead failed reopening db '%s'", tp -> src_path );
+                        src = *srcp;
+                    }
+                }
+
+                if ( ! FAILED () )
+                {
+                    VDatabase *dst;
+                    rc = VDBManagerCreateDB ( ctx -> caps -> vdb, & dst, dst_schema,
+                        type . dst_type, tp -> db . cmode, tp -> dst_path );
+                    if ( rc != 0 )
+                        ERROR ( rc, "VDBManagerCreateDB failed to create '%s' with type '%s'", tp -> dst_path, type . dst_type );
+                    else
+                    {
+                        rc = VDatabaseColumnCreateParams ( dst, tp -> col . cmode, tp -> col . checksum, tp -> col . pgsize );
+                        if ( rc != 0 )
+                            ERROR ( rc, "VDatabaseColumnCreateParams: failed to set column create params on db '%s'", tp -> dst_path );
+                        else
+                        {
+                            DbPair *pb;
+
+                            /* TBD - this has to be fixed to use proper stuff */
+                            const char *name = strrchr ( tp -> src_path, '/' );
+                            if ( name ++ == NULL )
+                                name = tp -> src_path;
+
+                            TRY ( pb = DbPairMake ( ctx, src, dst, name ) )
+                            {
+                                DbPairRun ( pb, ctx );
+                                DbPairRelease ( pb, ctx );
+                            }
+                        }
+
+                        rc = VDatabaseRelease ( dst );
+                        if ( rc != 0 )
+                            ERROR ( rc, "VDatabaseRelease failed on '%s'", tp -> dst_path );
+                    }
+                }
+
+                VSchemaRelease ( dst_schema );
+            }
+        }
+
+        VSchemaRelease ( src_schema );
+    }
+}
+
+
+/* open_tbl
+ *  called from run
+ *  determines the type of schema
+ *  opens output object
+ *  dispatches to the appropriate handler
+ */
+static
+void open_tbl ( const ctx_t *ctx, const VTable **tblp )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc = RC ( rcExe, rcFunction, rcExecuting, rcFunction, rcUnsupported );
+    ERROR ( rc, "unimplemented function" );
+}
+
+/* run
+ *  called from KMain
+ *  determines the type of object being copied/sorted
+ *  opens input object
+ *  dispatches to the appropriate handler
+ */
+void run ( const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    VDBManager *mgr = ctx -> caps -> vdb;
+    const Tool *tp = ctx -> caps -> tool;
+
+    const VDatabase *db;
+    rc_t rc = VDBManagerOpenDBRead ( mgr, & db, NULL, tp -> src_path );
+    if ( rc == 0 )
+    {
+        open_db ( ctx, & db );
+        VDatabaseRelease ( db );
+    }
+    else
+    {
+        const VTable *tbl;
+        rc_t rc2 = VDBManagerOpenTableRead ( mgr, & tbl, NULL, tp -> src_path );
+        if ( rc2 == 0 )
+        {
+            rc = 0;
+            open_tbl ( ctx, & tbl );
+            VTableRelease ( tbl );
+        }
+        else
+        {
+            VSchema *sra_dflt;
+            rc2 = VDBManagerMakeSRASchema ( mgr, & sra_dflt );
+            if ( rc2 == 0 )
+            {
+                rc2 = VDBManagerOpenTableRead ( mgr, & tbl, sra_dflt, tp -> src_path );
+                if ( rc2 == 0 )
+                {
+                    rc = 0;
+                    open_tbl ( ctx, & tbl );
+                    VTableRelease ( tbl );
+                }
+                
+                VSchemaRelease ( sra_dflt );
+            }
+        }
+    }
+
+    if ( rc != 0 )
+        ERROR ( rc, "failed to open object '%s'", tp -> src_path );
+}
diff --git a/tools/sra-sort/simple-row-set.c b/tools/sra-sort/simple-row-set.c
new file mode 100644
index 0000000..e4e5833
--- /dev/null
+++ b/tools/sra-sort/simple-row-set.c
@@ -0,0 +1,212 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct SimpleRowSet SimpleRowSet;
+#define ROWSET_IMPL SimpleRowSet
+
+typedef struct SimpleRowSetIterator SimpleRowSetIterator;
+#define ROWSET_ITER_IMPL SimpleRowSetIterator
+
+#include "row-set-priv.h"
+#include "tbl-pair.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+
+#include <klib/rc.h>
+
+FILE_ENTRY ( simple-row-set );
+
+
+/*--------------------------------------------------------------------------
+ * SimpleRowSet
+ *  implementation of RowSet based upon auto-generated serial ids
+ */
+struct SimpleRowSet
+{
+    RowSet dad;
+    int64_t first, row_id, last_excl;
+};
+
+static
+void SimpleRowSetWhack ( SimpleRowSet *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    MemFree ( ctx, self, sizeof *self );
+}
+
+static
+size_t SimpleRowSetNext ( SimpleRowSet *self, const ctx_t *ctx,
+    int64_t *row_ids, size_t max_ids )
+{
+    if ( row_ids != NULL )
+    {
+        size_t i;
+
+        uint64_t max_avail = self -> last_excl - self -> row_id;
+        if ( max_avail < ( uint64_t ) max_ids )
+            max_ids = ( size_t ) max_avail;
+
+        for ( i = 0; i < max_ids; ++ i )
+            row_ids [ i ] = self -> row_id + i;
+
+        self -> row_id += max_ids;
+        return max_ids;
+    }
+    return 0;
+}
+
+static
+void SimpleRowSetReset ( SimpleRowSet *self, const ctx_t *ctx, bool for_static )
+{
+    self -> row_id = self -> first;
+}
+
+static RowSet_vt SimpleRowSet_vt =
+{
+    SimpleRowSetWhack,
+    SimpleRowSetNext,
+    SimpleRowSetReset
+};
+
+
+/* Make
+ */
+static
+RowSet *SimpleRowSetMake ( const ctx_t *ctx, int64_t first, int64_t last_excl )
+{
+    FUNC_ENTRY ( ctx );
+
+    SimpleRowSet *rs;
+    TRY ( rs = MemAlloc ( ctx, sizeof * rs, false ) )
+    {
+        RowSetInit ( & rs -> dad, ctx, & SimpleRowSet_vt );
+        rs -> first = rs -> row_id = first;
+        rs -> last_excl = last_excl;
+        return & rs -> dad;
+    }
+
+    return NULL;
+}
+
+
+/*--------------------------------------------------------------------------
+ * SimpleRowSetIterator
+ *  interface to iterate RowSets
+ */
+struct SimpleRowSetIterator
+{
+    RowSetIterator dad;
+    RowSet *rs;
+};
+
+static
+void SimpleRowSetIteratorWhack ( SimpleRowSetIterator *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    RowSetRelease ( self -> rs, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+struct IdxMapping *SimpleRowSetIteratorGetIdxMapping ( SimpleRowSetIterator *self, const ctx_t *ctx, size_t *num_items )
+{
+    FUNC_ENTRY ( ctx );
+
+    ANNOTATE ( "CALLING GetIdxMapping ON SIMPLE ROWSET ITERATOR" );
+
+    if ( num_items != NULL )
+        * num_items = 0;
+
+    return NULL;
+}
+
+static
+int64_t *SimpleRowSetIteratorGetSourceIds ( SimpleRowSetIterator *self, const ctx_t *ctx, uint32_t **opt_ord, size_t *num_items )
+{
+    FUNC_ENTRY ( ctx );
+
+    ANNOTATE ( "CALLING GetSourceIds ON SIMPLE ROWSET ITERATOR" );
+
+    if ( opt_ord != NULL )
+        * opt_ord = NULL;
+
+    if ( num_items != NULL )
+        * num_items = 0;
+
+    return NULL;
+}
+
+static
+RowSet *SimpleRowSetIteratorNext ( SimpleRowSetIterator *self, const ctx_t *ctx )
+{
+    RowSet *rs = self -> rs;
+    self -> rs = NULL;
+    return rs;    
+}
+
+static RowSetIterator_vt SimpleRowSetIterator_vt =
+{
+    SimpleRowSetIteratorWhack,
+    SimpleRowSetIteratorGetIdxMapping,
+    SimpleRowSetIteratorGetSourceIds,
+    SimpleRowSetIteratorNext
+};
+
+
+/* MakeSimpleRowSetIterator
+ *  make simple row-id iterator
+ *  runs from first to last id in cursor
+ */
+RowSetIterator *TablePairMakeSimpleRowSetIterator ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( self -> first_id > self -> last_excl )
+    {
+        rc_t rc = RC ( rcExe, rcCursor, rcConstructing, rcRange, rcInvalid );
+        INTERNAL_ERROR ( rc, "union of all column ranges improperly set" );
+    }
+    else
+    {
+        SimpleRowSetIterator *it;
+
+        TRY ( it = MemAlloc ( ctx, sizeof * it, false ) )
+        {
+            RowSetIteratorInit ( & it -> dad, ctx, & SimpleRowSetIterator_vt );
+            TRY ( it -> rs = SimpleRowSetMake ( ctx, self -> first_id, self -> last_excl ) )
+            {
+                return & it -> dad;
+            }
+
+            MemFree ( ctx, it, sizeof * it );
+        }
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/sort-defs.h b/tools/sra-sort/sort-defs.h
new file mode 100644
index 0000000..f4aff84
--- /dev/null
+++ b/tools/sra-sort/sort-defs.h
@@ -0,0 +1,82 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_defs_
+#define _h_sra_sort_defs_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#include <assert.h>
+
+#if _DEBUGGING &&! defined SRA_SORT_CHECK_NULL_SELF
+#define SRA_SORT_CHECK_NULL_SELF 1
+#endif
+
+#define USE_OLD_KSORT 0
+
+
+/*--------------------------------------------------------------------------
+ * vdb-3 items missing from klib/defs.h
+ */
+typedef uint32_t caps_t;
+typedef struct ctx_t ctx_t;
+#define STRINGIZE( str ) # str
+#define STRINGIZE_DEFINE( def ) STRINGIZE ( def )
+
+
+/* POLY_DISPATCH
+ *  dispatch a polymorphic message
+ */
+#if  SRA_SORT_CHECK_NULL_SELF
+
+void null_self_error ( const ctx_t *ctx, uint32_t lineno, const char *msg );
+
+#define POLY_DISPATCH_VOID( msg, self, cast_expr, ctx, ... ) \
+    ( ( ( self ) == NULL ) ? null_self_error ( ctx, __LINE__, # msg ) : \
+      ( * ( self ) -> vt -> msg ) ( ( cast_expr* ) ( self ), ctx, ## __VA_ARGS__ ) )
+
+#define POLY_DISPATCH_INT( msg, self, cast_expr, ctx, ... ) \
+    ( ( ( self ) == NULL ) ? ( null_self_error ( ctx, __LINE__, # msg ), 0 ) : \
+      ( * ( self ) -> vt -> msg ) ( ( cast_expr* ) ( self ), ctx, ## __VA_ARGS__ ) )
+
+#define POLY_DISPATCH_PTR( msg, self, cast_expr, ctx, ... ) \
+    ( ( ( self ) == NULL ) ? ( null_self_error ( ctx, __LINE__, # msg ), NULL ) : \
+      ( * ( self ) -> vt -> msg ) ( ( cast_expr* ) ( self ), ctx, ## __VA_ARGS__ ) )
+
+#else
+
+#define POLY_DISPATCH_VOID( msg, self, cast_expr, ctx, ... ) \
+    ( * ( self ) -> vt -> msg ) ( ( cast_expr* ) ( self ), ctx, ## __VA_ARGS__ )
+#define POLY_DISPATCH_INT( msg, self, cast_expr, ctx, ... ) \
+    ( * ( self ) -> vt -> msg ) ( ( cast_expr* ) ( self ), ctx, ## __VA_ARGS__ )
+#define POLY_DISPATCH_PTR( msg, self, cast_expr, ctx, ... ) \
+    ( * ( self ) -> vt -> msg ) ( ( cast_expr* ) ( self ), ctx, ## __VA_ARGS__ )
+
+#endif
+
+#endif /* _h_sra_sort_defs_ */
diff --git a/tools/sra-sort/sorting-row-set.c b/tools/sra-sort/sorting-row-set.c
new file mode 100644
index 0000000..e94336c
--- /dev/null
+++ b/tools/sra-sort/sorting-row-set.c
@@ -0,0 +1,405 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct SortingRowSet SortingRowSet;
+#define ROWSET_IMPL SortingRowSet
+
+typedef struct SortingRowSetIterator SortingRowSetIterator;
+#define ROWSET_ITER_IMPL SortingRowSetIterator
+
+#include "row-set-priv.h"
+#include "tbl-pair.h"
+#include "map-file.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <klib/rc.h>
+
+#include <string.h>
+
+FILE_ENTRY ( sorting-row-set );
+
+
+/*--------------------------------------------------------------------------
+ * SortingRowSetIterator
+ *  interface to iterate RowSets
+ */
+struct SortingRowSetIterator
+{
+    RowSetIterator dad;
+
+    /* base row-id */
+    int64_t row_id;
+
+    /* last row-id + 1 */
+    int64_t last_excl;
+
+    /* takes its input from new=>old index */
+    const MapFile *idx;
+
+    /* working data within map */
+    int64_t *src_ids;
+    uint32_t *new_ord;
+    size_t max_elems;
+    size_t num_elems;
+
+    /* if true, use setting for large-columns */
+    bool large;
+
+    /* if true, no need to regenerate new_ord */
+    bool new_ord_valid;
+};
+
+/*--------------------------------------------------------------------------
+ * SortingRowSet
+ *  implementation of RowSet based upon auto-generated id pairs
+ */
+struct SortingRowSet
+{
+    RowSet dad;
+
+    /* keep-alive reference */
+    SortingRowSetIterator *iter;
+
+    /* working data within map */
+    int64_t *src_ids;
+    size_t num_elems;
+    size_t cur_elem;
+};
+
+static
+void SortingRowSetWhack ( SortingRowSet *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    RowSetIteratorRelease ( & self -> iter -> dad, ctx );
+    MemFree ( ctx, self, sizeof *self );
+}
+
+static
+size_t SortingRowSetNextStat ( SortingRowSet *self, const ctx_t *ctx,
+    int64_t *ids, size_t max_ids )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* the starting row-id is taken from row-set-iterator
+       and offset by our current element counter */
+    int64_t row_id = self -> iter -> row_id + self -> cur_elem;
+
+    /* limit id generation to request */
+    size_t i, to_set = self -> num_elems - self -> cur_elem;
+    if ( to_set > max_ids )
+        to_set = max_ids;
+
+    /* fill request with serial numbers
+       could just as easily be the same number
+       the important thing is to limit the count
+       and produce the correct range */
+    for ( i = 0; i < to_set; ++ i )
+        ids [ i ] = row_id + i;
+
+    /* advance counter */
+    self -> cur_elem += to_set;
+    return to_set;
+}
+
+static
+size_t SortingRowSetNextPhys ( SortingRowSet *self, const ctx_t *ctx,
+    int64_t *ids, size_t max_ids )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* limit copy to request */
+    size_t to_copy = self -> num_elems - self -> cur_elem;
+    if ( to_copy > max_ids )
+        to_copy = max_ids;
+
+    /* copy out old-ids */
+    memcpy ( ids, & self -> src_ids [ self -> cur_elem ], to_copy * sizeof ids [ 0 ] );
+
+    /* advance counter */
+    self -> cur_elem += to_copy;
+    return to_copy;
+}
+
+static
+void SortingRowSetReset ( SortingRowSet *self, const ctx_t *ctx, bool for_static );
+
+static RowSet_vt SortingRowSetPhys_vt =
+{
+    SortingRowSetWhack,
+    SortingRowSetNextPhys,
+    SortingRowSetReset
+};
+
+static RowSet_vt SortingRowSetStat_vt =
+{
+    SortingRowSetWhack,
+    SortingRowSetNextStat,
+    SortingRowSetReset
+};
+
+static
+void SortingRowSetReset ( SortingRowSet *self, const ctx_t *ctx, bool for_static )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( for_static )
+    {
+        /* go static */
+        self -> dad . vt = & SortingRowSetStat_vt;
+    }
+    else
+    {
+        SortingRowSetIterator *iter = self -> iter;
+
+        /* go physical */
+        self -> dad . vt = & SortingRowSetPhys_vt;
+
+        if ( iter -> new_ord_valid )
+        {
+            /* read new-ids from file, selecting old-ids within range */
+            STATUS ( 3, "selecting first %,zu ids from old=>new where new_id >= %,ld",
+                     iter -> max_elems, iter -> row_id );
+            iter -> num_elems = MapFileSelectOldToNewSingle ( iter -> idx, ctx,
+                iter -> row_id, iter -> src_ids, NULL, iter -> max_elems );
+        }
+        else
+        {
+            /* read new-ids from file, init new-ord, selecting old-ids within range */
+            STATUS ( 3, "selecting first %,zu ids, new_ord from old=>new where new_id >= %,ld",
+                     iter -> max_elems, iter -> row_id );
+            TRY ( iter -> num_elems = MapFileSelectOldToNewSingle ( iter -> idx, ctx,
+                      iter -> row_id, iter -> src_ids, iter -> new_ord, iter -> max_elems ) )
+            {
+                iter -> new_ord_valid = true;
+            }
+        }
+
+        if ( FAILED () )
+            return;
+
+        self -> num_elems = iter -> num_elems;
+        STATUS ( 3, "selected %,zu ids", self -> num_elems );
+    }
+
+    /* ready */
+    self -> cur_elem = 0;
+}
+
+
+/*--------------------------------------------------------------------------
+ * SortingRowSetIterator
+ *  interface to iterate RowSets
+ */
+
+static
+void SortingRowSetIteratorWhack ( SortingRowSetIterator *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( self -> src_ids != NULL )
+        MemFree ( ctx, self -> src_ids, sizeof self -> src_ids [ 0 ] * self -> max_elems );
+    if ( self -> new_ord != NULL )
+        MemFree ( ctx, self -> new_ord, sizeof self -> new_ord [ 0 ] * self -> max_elems );
+
+    MapFileRelease ( self -> idx, ctx );
+
+    RowSetIteratorDestroy ( & self -> dad, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+RowSet *SortingRowSetIteratorMakeTheRowSet ( SortingRowSetIterator *self, const ctx_t *ctx, const RowSet_vt *vt )
+{
+    FUNC_ENTRY ( ctx );
+
+    SortingRowSet *rs;
+    TRY ( rs = MemAlloc ( ctx, sizeof * rs, false ) )
+    {
+        TRY ( RowSetInit ( & rs -> dad, ctx, vt ) )
+        {
+            /* initialize the row-set with map and self reference */
+            rs -> src_ids = self -> src_ids;
+            rs -> iter = ( SortingRowSetIterator* ) RowSetIteratorDuplicate ( & self -> dad, ctx );
+            rs -> num_elems = self -> num_elems;
+            rs -> cur_elem = 0;
+            return & rs -> dad;
+        }
+
+        MemFree ( ctx, rs, sizeof * rs );
+    }
+
+    return NULL;
+ }
+
+static
+struct IdxMapping *SortingRowSetIteratorGetIdxMapping ( SortingRowSetIterator *self, const ctx_t *ctx, size_t *num_items )
+{
+    FUNC_ENTRY ( ctx );
+
+    ANNOTATE ( "CALLING GetIdxMapping ON SORTING ROWSET ITERATOR" );
+
+    if ( num_items != NULL )
+        * num_items = 0;
+
+    return NULL;
+}
+
+static
+int64_t *SortingRowSetIteratorGetSourceIds ( SortingRowSetIterator *self, const ctx_t *ctx, uint32_t **opt_ord, size_t *num_items )
+{
+    FUNC_ENTRY ( ctx );
+
+    if ( opt_ord != NULL )
+        * opt_ord = self -> new_ord;
+
+    if ( self -> src_ids == NULL )
+    {
+        rc_t rc = RC ( rcExe, rcCursor, rcAccessing, rcSelf, rcInconsistent );
+        ERROR ( rc, "source id array is NULL" );
+        if ( num_items != NULL )
+            * num_items = 0;
+        return NULL;
+    }
+
+    if ( num_items != NULL )
+        * num_items = self -> num_elems;
+    return self -> src_ids;
+}
+
+static
+void SortingRowSetIteratorAllocMap ( SortingRowSetIterator *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* determine the maximum number of elements */
+    const Tool *tp = ctx -> caps -> tool;
+    uint64_t count = self -> last_excl - self -> row_id;
+    self -> max_elems = self -> large ? tp -> max_large_idx_ids : tp -> max_idx_ids;
+    if ( ( uint64_t ) self -> max_elems > count )
+        self -> max_elems = ( size_t ) count;
+
+    /* try to allocate the memory
+       this may be limited by the MemBank */
+    do
+    {
+        CLEAR ();
+
+        TRY ( self -> src_ids = MemAlloc ( ctx, sizeof self -> src_ids [ 0 ] * self -> max_elems, false ) )
+        {
+            TRY ( self -> new_ord = MemAlloc ( ctx, sizeof self -> new_ord [ 0 ] * self -> max_elems, false ) )
+            {
+                STATUS ( 4, "allocated mapping array of %,u elements", self -> max_elems );
+                return;
+            }
+
+            MemFree ( ctx, self -> src_ids, sizeof self -> src_ids [ 0 ] * self -> max_elems );
+            self -> src_ids = NULL;
+        }
+
+        self -> max_elems >>= 1;
+    }
+    while ( self -> max_elems >= ctx -> caps -> tool -> min_idx_ids );
+
+    ANNOTATE ( "failed to allocate map for row-set" );
+}
+
+static
+RowSet *SortingRowSetIteratorNext ( SortingRowSetIterator *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    RowSet *rs = NULL;
+
+    /* on first invocation, allocate the map */
+    if ( self -> src_ids == NULL )
+    {
+        ON_FAIL ( SortingRowSetIteratorAllocMap ( self, ctx ) )
+            return NULL;
+
+        assert ( self -> src_ids != NULL );
+        assert ( self -> new_ord != NULL );
+    }
+
+    /* advance row_id */
+    self -> row_id += self -> num_elems;
+    self -> num_elems = 0;
+    self -> new_ord_valid = false;
+
+    /* create the empty row-set */
+    if ( self -> row_id < self -> last_excl )
+        rs = SortingRowSetIteratorMakeTheRowSet ( self, ctx, & SortingRowSetPhys_vt );
+
+    return rs;
+}
+
+
+/*--------------------------------------------------------------------------
+ * MapFile
+ */
+
+static RowSetIterator_vt SortingRowSetIterator_vt =
+{
+    SortingRowSetIteratorWhack,
+    SortingRowSetIteratorGetIdxMapping,
+    SortingRowSetIteratorGetSourceIds,
+    SortingRowSetIteratorNext
+};
+
+RowSetIterator * MapFileMakeSortingRowSetIterator ( const MapFile *self, const ctx_t *ctx, bool large )
+{
+    FUNC_ENTRY ( ctx );
+
+    SortingRowSetIterator *rsi;
+
+    /* create the iterator */
+    TRY ( rsi = MemAlloc ( ctx, sizeof * rsi, true ) )
+    {
+        TRY ( RowSetIteratorInit ( & rsi -> dad, ctx, & SortingRowSetIterator_vt ) )
+        {
+            /* initialize the row-set with map and self reference */
+            TRY ( rsi -> row_id = MapFileFirst ( self, ctx ) )
+            {
+                TRY ( rsi -> last_excl = rsi -> row_id + MapFileCount ( self, ctx ) )
+                {
+                    TRY ( rsi -> idx = MapFileDuplicate ( self, ctx ) )
+                    {
+                        rsi -> large = large;
+                        return & rsi -> dad;
+                    }
+                }
+            }
+        }
+
+        MemFree ( ctx, rsi, sizeof * rsi );
+    }
+
+    return NULL;
+}
diff --git a/tools/sra-sort/sra-sort.c b/tools/sra-sort/sra-sort.c
new file mode 100644
index 0000000..0c7eb92
--- /dev/null
+++ b/tools/sra-sort/sra-sort.c
@@ -0,0 +1,754 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "ctx.h"
+#include "caps.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+#include "sra-sort.h"
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <vdb/manager.h>
+#include <vdb/vdb-priv.h>
+#include <kdb/manager.h>
+#include <kfg/config.h>
+#include <kfs/directory.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/out.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <strtol.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef _WIN32
+#include <process.h>
+#else
+#include <unistd.h>
+#endif
+
+#include "sra-sort.vers.h"
+
+
+FILE_ENTRY ( sra-sort );
+
+
+/* this goes away in vdb-3 */
+const char UsageDefaultName [] = "sra-sort";
+
+rc_t CC UsageSummary ( const char *prog_name )
+{
+    return KOutMsg ( "Usage: %s [options] src-object dst-object\n"
+                     "       %s [options] src-object [src-object...] dst-dir\n"
+                     "\n"
+                     , prog_name
+                     , prog_name
+        );
+}
+
+#define OPT_IGNORE_FAILURE "ignore-failure"
+#define OPT_FORCE "force"
+#define OPT_MEM_LIMIT "mem-limit"
+#define OPT_MAP_FILE_BSIZE "map-file-bsize"
+#define OPT_MAX_IDX_IDS "max-idx-ids"
+#define OPT_MAX_REF_IDX_IDS "max-ref-idx-ids"
+#define OPT_MAX_LARGE_IDX_IDS "max-large-idx-ids"
+#define OPT_TEMP_DIR "tempdir"
+#define OPT_MMAP_DIR "mmapdir"
+#define OPT_UNSORTED_OLD_NEW "unsorted-old-new"
+
+#define OPT_COLUMN_MD5 "column-md5"
+#define OPT_NO_COLUMN_CHECKSUM "no-column-checksum"
+
+#define OPT_BLOB_CRC32 "blob-crc32"
+#define OPT_BLOB_MD5 "blob-md5"
+#define OPT_NO_BLOB_CHECKSUM "no-blob-checksum"
+
+#define OPT_KEEP_IDX_FILES "keep-idx-files"
+#define OPT_IDX_CONSISTENCY_CHECK "idx-cc"
+
+static const char *hlp_ignore_failure [] = { "ignore failure when sorting multiple objects",
+                                             "i.e. continue in spite of previous errors", NULL };
+static const char *hlp_force [] = { "force overwrite of existing destination", NULL };
+static const char *hlp_mem_limit [] = { "sets limit on dynamic memory usage", NULL };
+static const char *hlp_map_file_bsize [] = { "sets id map-file cache size", NULL };
+static const char *hlp_max_idx_ids [] = { "sets number of join-index ids to process at a time", NULL };
+static const char *hlp_max_ref_idx_ids [] = { "sets number of join-index ids to process within REFERENCE table", NULL };
+static const char *hlp_max_large_idx_ids [] = { "sets number of rows to process with large columns", NULL };
+static const char *hlp_temp_dir [] = { "sets a specific directory to use for temporary files", NULL };
+static const char *hlp_mmap_dir [] = { "sets a specific directory to use for memory-mapped buffers", NULL };
+static const char *hlp_unsorted_old_new [] = { "write old=>new index in unsorted order", NULL };
+
+static const char *hlp_column_md5 [] = { "generate md5sum compatible checksum files for each column [default]", NULL };
+static const char *hlp_no_column_checksum [] = { "disable generation of column checksums", NULL };
+
+static const char *hlp_blob_crc32 [] = { "generate CRC32 checksums for each blob [default]", NULL };
+static const char *hlp_blob_md5 [] = { "generate MD5 checksums for each blob", NULL };
+static const char *hlp_no_blob_checksum [] = { "disable generation of blob checksums", NULL };
+
+#if _DEBUGGING
+static const char *hlp_keep_idx_files [] = { "keep temporary index files for debugging", NULL };
+static const char *hlp_idx_consistency_check [] = { "run consistency check on index files", NULL };
+#endif
+
+static OptDef options [] =
+{
+    /* 1. long-name
+       2. list of single character short names
+       3. help-gen function
+       4. list of help strings, NULL terminated
+       5. max count
+       6. option requires value
+       7. option is required
+    */
+    { OPT_IGNORE_FAILURE, "i", NULL, hlp_ignore_failure, 1, false, false }
+  , { OPT_FORCE, "f", NULL, hlp_force, 1, false, false }
+  , { OPT_MEM_LIMIT, NULL, NULL, hlp_mem_limit, 1, true, false }
+  , { OPT_MAP_FILE_BSIZE, NULL, NULL, hlp_map_file_bsize, 1, true, false }
+  , { OPT_MAX_IDX_IDS, NULL, NULL, hlp_max_idx_ids, 1, true, false }
+  , { OPT_MAX_REF_IDX_IDS, NULL, NULL, hlp_max_ref_idx_ids, 1, true, false }
+  , { OPT_MAX_LARGE_IDX_IDS, NULL, NULL, hlp_max_large_idx_ids, 1, true, false }
+  , { OPT_TEMP_DIR, NULL, NULL, hlp_temp_dir, 1, true, false }
+  , { OPT_MMAP_DIR, NULL, NULL, hlp_mmap_dir, 1, true, false }
+  , { OPT_UNSORTED_OLD_NEW, NULL, NULL, hlp_unsorted_old_new, 1, false, false }
+
+  , { OPT_COLUMN_MD5, NULL, NULL, hlp_column_md5, 1, false, false }
+  , { OPT_NO_COLUMN_CHECKSUM, NULL, NULL, hlp_no_column_checksum, 1, false, false }
+  , { OPT_BLOB_CRC32, NULL, NULL, hlp_blob_crc32, 1, false, false }
+  , { OPT_BLOB_MD5, NULL, NULL, hlp_blob_md5, 1, false, false }
+  , { OPT_NO_BLOB_CHECKSUM, NULL, NULL, hlp_no_blob_checksum, 1, false, false }
+#if _DEBUGGING
+  , { OPT_KEEP_IDX_FILES, NULL, NULL, hlp_keep_idx_files, 1, false, false }
+  , { OPT_IDX_CONSISTENCY_CHECK, NULL, NULL, hlp_idx_consistency_check, 1, false, false }
+#endif
+};
+
+static const char *option_params [] =
+{
+    NULL
+  , NULL
+  , "bytes"
+  , "cache-size"
+  , "num-ids"
+  , "num-ids"
+  , "num-ids"
+  , "path-to-tmp"
+  , "path-to-mmaps"
+  , NULL
+  , NULL
+  , NULL
+  , NULL
+  , NULL
+  , NULL
+#if _DEBUGGING
+  , NULL
+  , NULL
+#endif
+};
+
+rc_t CC Usage ( const Args *args )
+{
+    uint32_t i;
+    const char *progname, *fullpath;
+    rc_t rc = ArgsProgram ( args, & fullpath, & progname );
+    if ( rc != 0 )
+        progname = fullpath = UsageDefaultName;
+    
+    UsageSummary ( progname );
+    
+    KOutMsg ( "Options:\n" );
+    
+    for ( i = 0; i < sizeof options / sizeof options [ 0 ]; ++ i )
+    {
+        HelpOptionLine ( options [ i ] . aliases, options [ i ] . name,
+            option_params [ i ], options [ i ] . help );
+    }
+
+    HelpOptionsStandard ();
+    
+    HelpVersion ( fullpath, KAppVersion () );
+
+    return 0;
+}
+
+uint32_t CC KAppVersion ( void )
+{
+    return SRA_SORT_VERS;
+}
+
+static
+const char *ArgsGetOptStr ( Args *self, const ctx_t *ctx, const char *optname, uint32_t *count )
+{
+    rc_t rc;
+    const char *val = NULL;
+
+    uint32_t dummy;
+    if ( count == NULL )
+        count = & dummy;
+
+    rc = ArgsOptionCount ( self, optname, count );
+    if ( rc == 0 && * count != 0 )
+    {
+        rc = ArgsOptionValue ( self, optname, 0, & val );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "failed to retrieve '%s' parameter", optname );
+    }
+
+    return val;
+}
+
+static
+uint64_t ArgsGetOptU64 ( Args *self, const ctx_t *ctx, const char *optname, uint32_t *count )
+{
+    rc_t rc;
+    uint64_t val = 0;
+
+    uint32_t dummy;
+    if ( count == NULL )
+        count = & dummy;
+
+    rc = ArgsOptionCount ( self, optname, count );
+    if ( rc == 0 && * count != 0 )
+    {
+        const char *str;
+        rc = ArgsOptionValue ( self, optname, 0, & str );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "failed to retrieve '%s' parameter", optname );
+        else
+        {
+            char *end;
+            val = strtou64 ( str, & end, 0 );
+            if ( end [ 0 ] != 0 )
+            {
+                rc = RC ( rcExe, rcArgv, rcParsing, rcParam, rcIncorrect );
+                ERROR ( rc, "bad '%s' parameter: '%s'", optname, str );
+            }
+        }
+    }
+
+    return val;
+}
+
+static
+bool ArgsGetOptBool ( Args *self, const ctx_t *ctx, const char *optname, uint32_t *count )
+{
+    rc_t rc;
+    bool val = false;
+
+    uint32_t dummy;
+    if ( count == NULL )
+        count = & dummy;
+
+    rc = ArgsOptionCount ( self, optname, count );
+    if ( rc == 0 && * count != 0 )
+        val = true;
+
+    return val;
+}
+
+static
+uint64_t KConfigGetNodeU64 ( const ctx_t *ctx, const char *path, bool *found )
+{
+    rc_t rc;
+    uint64_t val = 0;
+    const KConfigNode *n;
+
+    bool dummy;
+    if ( found == NULL )
+        found = & dummy;
+
+    rc = KConfigOpenNodeRead ( ctx -> caps -> cfg, & n, "sra-sort/map_file_bsize" );
+    if ( rc == 0 )
+    {
+        char buff [ 256 ];
+        size_t num_read, remaining;
+
+        rc = KConfigNodeRead ( n, 0, buff, sizeof buff - 1, & num_read, & remaining );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to read KConfig node '%s'", path );
+        else if ( remaining != 0 )
+        {
+            rc = RC ( rcExe, rcNode, rcReading, rcBuffer, rcInsufficient );
+            ERROR ( rc, "failed to read KConfig node '%s'", path );
+        }
+        else
+        {
+            char *end;
+            buff [ num_read ] = 0;
+            val = strtou64 ( buff, & end, 0 );
+            if ( end [ 0 ] != 0 )
+            {
+                rc = RC ( rcExe, rcNode, rcReading, rcNumeral, rcIncorrect );
+                ERROR ( rc, "bad '%s' config value: '%s'", path, buff );
+            }
+        }
+
+        KConfigNodeRelease ( n );
+    }
+
+    return val;
+}
+
+static
+void initialize_params ( const ctx_t *ctx, Caps *caps, Tool *tp, Selection *sel, Args *args )
+{
+    bool found=false;
+    uint64_t val;
+    uint32_t count;
+    const char *str;
+
+    int col_md5 = kcmMD5;
+
+    memset ( sel, 0, sizeof * sel );
+    memset ( tp, 0, sizeof * tp );
+    tp -> sel = sel;
+
+    /* default to host tmp */
+    tp -> tmpdir = "/tmp";
+
+    /* default to mmap dir */
+    tp -> mmapdir = NULL;
+
+    /* default buffer size for map cache */
+    tp -> map_file_bsize = 64 * 1024 * 1024;
+    tp -> map_file_random_bsize = tp -> map_file_bsize;
+
+    /* default max index ids to gather at a time */
+    tp -> max_ref_idx_ids = tp -> max_large_idx_ids = tp -> max_idx_ids = 256 * 1024 * 1024;
+    tp -> max_poslen_ids = 64 * 1024 * 1024;
+    tp -> min_idx_ids =  64 * 1024 * 1024;
+    tp -> max_missing_ids = tp -> max_idx_ids;
+
+#if 0
+    /* refpos cache size */
+    tp -> refpos_cache_capacity = 100 * 1024 * 1024;
+#endif
+
+    /* for creating mapping files */
+    tp -> pid = getpid ();
+
+    /* db create defaults */
+    tp -> db . cmode = kcmCreate;
+
+    /* tbl create defaults */
+    tp -> tbl . cmode = kcmCreate;
+
+    /* column create mode defaults */
+    tp -> col . pgsize = 1;
+    tp -> col . cmode = kcmInit;
+    tp -> col . checksum = kcsCRC32;
+
+    /* normally do not ignore failures */
+    tp -> ignore = false;
+
+    /* normally do not force overwrite */
+    tp -> force = false;
+
+    /* not needed under normal circumstances */
+    tp -> write_new_to_old = false;
+tp->write_new_to_old=true;
+
+    /* default is to sort on old */
+    tp -> sort_before_old2new = true;
+
+    /* when debugging, this can be turned off */
+    tp -> unlink_idx_files = true;
+    tp -> idx_consistency_check = false;
+
+
+    /* record them as caps */
+    caps -> tool = tp;
+
+    /* look in config */
+    /* TBD - COMPLETE THIS */
+    ON_FAIL ( val = KConfigGetNodeU64 ( ctx, "sra-sort/map_file_bsize", & found ) )
+        return;
+    if ( found )
+        tp -> map_file_bsize = tp -> map_file_random_bsize = ( size_t ) val;
+
+    ON_FAIL ( val = KConfigGetNodeU64 ( ctx, "sra-sort/map_file_random_bsize", & found ) )
+        return;
+    if ( found )
+        tp -> map_file_random_bsize = ( size_t ) val;
+
+    ON_FAIL ( val = KConfigGetNodeU64 ( ctx, "sra-sort/max_idx_ids", & found ) )
+        return;
+    if ( found )
+        tp -> max_idx_ids = ( size_t ) val;
+
+    ON_FAIL ( val = KConfigGetNodeU64 ( ctx, "sra-sort/max_ref_idx_ids", & found ) )
+        return;
+    if ( found )
+        tp -> max_ref_idx_ids = ( size_t ) val;
+
+    /* finally look in args */
+    ON_FAIL ( str = ArgsGetOptStr ( args, ctx, OPT_TEMP_DIR, & count ) )
+        return;
+    if ( count != 0 && str [ 0 ] != 0 )
+        tp -> tmpdir = str;
+
+    ON_FAIL ( str = ArgsGetOptStr ( args, ctx, OPT_MMAP_DIR, & count ) )
+        return;
+    if ( count != 0 && str [ 0 ] != 0 )
+        tp -> mmapdir = str;
+
+    ON_FAIL ( val = ArgsGetOptU64 ( args, ctx, OPT_MAP_FILE_BSIZE, & count ) )
+        return;
+    if ( count != 0 )
+        tp -> map_file_random_bsize = ( size_t ) val;
+   
+    ON_FAIL ( val = ArgsGetOptU64 ( args, ctx, OPT_MAX_IDX_IDS, & count ) )
+        return;
+    if ( count != 0 )
+        tp -> max_idx_ids = tp -> max_ref_idx_ids = ( size_t ) val;
+   
+    ON_FAIL ( val = ArgsGetOptU64 ( args, ctx, OPT_MAX_REF_IDX_IDS, & count ) )
+        return;
+    if ( count != 0 )
+        tp -> max_ref_idx_ids = ( size_t ) val;
+   
+    ON_FAIL ( val = ArgsGetOptU64 ( args, ctx, OPT_MAX_LARGE_IDX_IDS, & count ) )
+        return;
+    if ( count != 0 )
+        tp -> max_large_idx_ids = ( size_t ) val;
+
+    ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_IGNORE_FAILURE, & count ) )
+        return;
+    if ( count != 0 )
+        tp -> ignore = true;
+
+    ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_FORCE, & count ) )
+        return;
+    if ( count != 0 )
+        tp -> force = true;
+   
+    ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_UNSORTED_OLD_NEW, & count ) )
+        return;
+    if ( count != 0 )
+        tp -> sort_before_old2new = false;
+
+    ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_COLUMN_MD5, & count ) )
+        return;
+    if ( count != 0 )
+        col_md5 = kcmMD5;
+    else
+    {
+        ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_NO_COLUMN_CHECKSUM, & count ) )
+            return;
+        if ( count != 0 )
+            col_md5 = 0;
+    }
+
+    tp -> db . cmode |= col_md5;
+    tp -> tbl . cmode |= col_md5;
+    tp -> col . cmode |= col_md5;
+
+    ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_BLOB_CRC32, & count ) )
+        return;
+    if ( count != 0 )
+        tp -> col . checksum = kcsCRC32;
+    else
+    {
+        ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_BLOB_MD5, & count ) )
+            return;
+        if ( count != 0 )
+            tp -> col . checksum = kcsMD5;
+        else
+        {
+            ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_NO_BLOB_CHECKSUM, & count ) )
+                return;
+            if ( count != 0 )
+                tp -> col . checksum = kcsNone;
+        }
+    }
+
+#if _DEBUGGING
+    ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_KEEP_IDX_FILES, & count ) )
+        return;
+    if ( count != 0 )
+        tp -> unlink_idx_files = false;
+
+    ON_FAIL ( found = ArgsGetOptBool ( args, ctx, OPT_IDX_CONSISTENCY_CHECK, & count ) )
+        return;
+    if ( count != 0 )
+        tp -> idx_consistency_check = tp -> write_new_to_old = true;
+#endif
+}
+
+static
+void initialize_caps ( const ctx_t *ctx, Caps *caps, Args *args )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* get specified limit */
+    uint32_t count;
+    size_t mem_limit = ( size_t ) ArgsGetOptU64 ( args, ctx, OPT_MEM_LIMIT, & count );
+    if ( ! FAILED () && count != 0 )
+    {
+        MemBank *mem;
+        TRY ( mem = MemBankMake ( ctx, mem_limit ) )
+        {
+            MemBankRelease ( caps -> mem, ctx );
+            caps -> mem = mem;
+        }
+    }
+
+    if ( ! FAILED () )
+    {
+        /* here's a chance to pick up special config */
+        /* TBD */
+
+        /* open up KConfig */
+        rc_t rc = KConfigMake ( ( KConfig** ) & caps -> cfg, NULL );
+        if ( rc != 0 )
+            ERROR ( rc, "KConfigMake failed" );
+    }
+}
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    DECLARE_CTX_INFO ();
+
+    /* initialize context */
+    Caps caps;
+    ctx_t main_ctx = { & caps, NULL, & ctx_info };
+    const ctx_t *ctx = & main_ctx;
+    CapsInit ( & caps, NULL );
+
+    if ( argc <= 1 )
+        main_ctx . rc = UsageSummary ( "sra-sort" );
+    else
+    {
+        /* create MemBank with unlimited quota */
+        TRY ( caps . mem = MemBankMake (  ctx, -1 ) )
+        {
+            rc_t rc = VDBManagerMakeUpdate ( & caps . vdb, NULL );
+            if ( rc != 0 )
+                ERROR ( rc, "failed to create VDBManager" );
+            else
+            {
+                rc = VDBManagerOpenKDBManagerUpdate ( caps . vdb, & caps . kdb );
+                if ( rc != 0 )
+                    ERROR ( rc, "failed to create KDBManager" );
+                else
+                {
+                    Args * args;
+                    rc = ArgsMakeAndHandle ( & args, argc, argv, 1,
+                        options, sizeof options / sizeof options [ 0 ] );
+                    if ( rc != 0 )
+                        ERROR ( rc, "failed to parse command line" );
+                    else
+                    {
+                        TRY ( initialize_caps ( ctx, & caps, args ) )
+                        {
+                            Tool tp;
+                            Selection sel;
+                            TRY ( initialize_params ( ctx, & caps, & tp, & sel, args ) )
+                            {
+                                uint32_t count;
+                                rc = ArgsParamCount ( args, & count );
+                                if ( rc != 0 )
+                                    ERROR ( rc, "ArgsParamCount failed" );
+                                else if ( count < 2 )
+                                {
+                                    rc = RC ( rcExe, rcArgv, rcParsing, rcParam, rcInsufficient );
+                                    ERROR ( rc, "expected source and destination parameters" );
+                                }
+                                else
+                                {
+                                    /* check type of last parameter */
+                                    const char *dst;
+                                    rc = ArgsParamValue ( args, count - 1, & dst );
+                                    if ( rc != 0 )
+                                        ERROR ( rc, "ArgsParamValue [ %u ] failed", count - 1 );
+                                    else
+                                    {
+                                        enum RCTarget targ = rcNoTarg;
+
+                                        bool dst_is_dir = false;
+                                        int dst_type = KDBManagerPathType ( caps . kdb, dst ) & ~ kptAlias;
+                                        if ( dst_type == kptDir )
+                                            dst_is_dir = true;
+                                        else if ( count != 2 )
+                                        {
+                                            rc = RC ( rcExe, rcArgv, rcParsing, rcArgv, rcIncorrect );
+                                            ERROR ( rc, "multiple source objects require last parameter to be a directory" );
+                                        }
+                                        else switch ( dst_type )
+                                        {
+                                        case kptNotFound:
+                                            tp . db . cmode |= kcmParents;
+                                            tp . tbl . cmode |= kcmParents;
+                                            break;
+                                        case kptFile:
+                                        case kptFile | kptAlias:
+                                            rc = RC ( rcExe, rcArgv, rcParsing, rcArgv, rcIncorrect );
+                                            ERROR ( rc, "destination object is a file - remove first or rename before trying again" );
+                                            break;
+                                        case kptDatabase:
+                                            targ = rcDatabase;
+                                            break;
+                                        case kptTable:
+                                            targ = rcTable;
+                                            break;
+                                        case kptPrereleaseTbl:
+                                            dst_type = kptTable;
+                                            break;
+                                        default:
+                                            rc = RC ( rcExe, rcArgv, rcParsing, rcArgv, rcIncorrect );
+                                            ERROR ( rc, "destination object type cannot be overwritten" );
+                                            break;
+                                        }
+
+                                        if ( ! FAILED () )
+                                        {
+                                            if ( dst_is_dir )
+                                            {
+                                                uint32_t i;
+                                                rc_t first_rc = 0;
+                                                bool issue_divider_line;
+
+                                                if ( tp . force )
+                                                {
+                                                    tp . db . cmode = kcmInit | ( tp . db . cmode & ~ kcmValueMask );
+                                                    tp . tbl . cmode = kcmInit | ( tp . tbl . cmode & ~ kcmValueMask );
+                                                }
+                                                
+                                                for ( issue_divider_line = false, i = 0; i < count - 1; issue_divider_line = true, ++ i )
+                                                {
+                                                    rc = ArgsParamValue ( args, i, & tp . src_path );
+                                                    if ( rc != 0 )
+                                                        ERROR ( rc, "ArgParamValue [ %u ] failed", i );
+                                                    else
+                                                    {
+                                                        char dst_path [ 4096 ];
+                                                        const char *leaf = strrchr ( tp . src_path, '/' );
+                                                        if ( leaf ++ == NULL )
+                                                            leaf = tp . src_path;
+                                                        rc = string_printf ( dst_path, sizeof dst_path, NULL, "%s/%s", dst, leaf );
+                                                        if ( rc != 0 )
+                                                            ERROR ( rc, "string_printf on param [ %u ] failed", i );
+                                                        else
+                                                        {
+                                                            size_t size = string_size ( dst_path );
+                                                            char *ext = string_rchr ( dst_path, size, '.' );
+                                                            if ( ext != NULL )
+                                                            {
+                                                                size -= ext - dst_path;
+                                                                switch ( size )
+                                                                {
+                                                                case 4:
+                                                                    if ( strcase_cmp ( ext, 4, ".sra", 4, 4 ) == 0 )
+                                                                        * ext = 0;
+                                                                    break;
+                                                                case 5:
+                                                                    if ( strcase_cmp ( ext, 5, ".csra", 5, 5 ) == 0 )
+                                                                        * ext = 0;
+                                                                    break;
+                                                                }
+                                                            }
+
+                                                            if ( issue_divider_line )
+                                                                STATUS ( 1, "################################################################" );
+
+                                                            tp . dst_path = dst_path;
+                                                            ON_FAIL ( run ( ctx ) )
+                                                            {
+                                                                if ( ! tp . ignore )
+                                                                    break;
+
+                                                                if ( first_rc == 0 )
+                                                                    first_rc = ctx -> rc;
+
+                                                                CLEAR ();
+                                                            }
+                                                        }
+                                                    }
+                                                }
+
+                                                if ( first_rc != 0 )
+                                                    main_ctx . rc = first_rc;
+                                            }
+                                            else
+                                            {
+                                                tp . dst_path = dst;
+                                                rc = ArgsParamValue ( args, 0, & tp . src_path );
+                                                if ( rc != 0 )
+                                                    ERROR ( rc, "ArgParamValue [ 0 ] failed" );
+                                                else
+                                                {
+                                                    int src_type;
+
+                                                    switch ( dst_type )
+                                                    {
+                                                    case kptDatabase:
+                                                    case kptTable:
+                                                        src_type = KDBManagerPathType ( caps . kdb, tp . src_path ) & ~ kptAlias;
+                                                        if ( src_type == kptPrereleaseTbl )
+                                                            src_type = kptTable;
+                                                        if ( src_type != dst_type )
+                                                        {
+                                                            rc = RC ( rcExe, rcArgv, rcParsing, rcArgv, rcIncorrect );
+                                                            ERROR ( rc, "source and destination object types are not compatible" );
+                                                        }
+                                                        else if ( ! tp . force )
+                                                        {
+                                                            rc = RC ( rcExe, targ, rcCopying, targ, rcExists );
+                                                            ERROR ( rc, "destination object cannot be overwritten - try again with '-f'" );
+                                                        }
+                                                        else
+                                                        {
+                                                            tp . db . cmode = kcmInit | ( tp . db . cmode & ~ kcmValueMask );
+                                                            tp . tbl . cmode = kcmInit | ( tp . tbl . cmode & ~ kcmValueMask );
+                                                        }
+                                                    }
+
+                                                    if ( ! FAILED () )
+                                                        run ( ctx );
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+
+                        ArgsWhack ( args );
+                    }
+                }
+            }
+
+            CapsWhack ( & caps, ctx );
+        }
+    }
+
+    return main_ctx . rc;
+}
diff --git a/tools/sra-sort/sra-sort.h b/tools/sra-sort/sra-sort.h
new file mode 100644
index 0000000..027d591
--- /dev/null
+++ b/tools/sra-sort/sra-sort.h
@@ -0,0 +1,171 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_
+#define _h_sra_sort_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_kfs_defs_
+#include <kfs/defs.h>
+#endif
+
+#ifndef _h_kdb_column_
+#include <kdb/column.h>
+#endif
+
+
+#define NEW_TYPES 1
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct DbPair;
+struct TablePair;
+
+
+/*--------------------------------------------------------------------------
+ * Selection
+ *  input selection criteria
+ */
+typedef struct Selection Selection;
+struct Selection
+{
+    int dummy;
+};
+
+/*--------------------------------------------------------------------------
+ * Tool
+ *  parameter block generated by KMain
+ */
+typedef struct Tool Tool;
+struct Tool
+{
+    /* input selection */
+    const Selection *sel;
+
+    /* directory for temporary files */
+    const char *tmpdir;
+
+    /* directory for mmap page files */
+    const char *mmapdir;
+
+    /* source object path */
+    const char *src_path;
+
+    /* destination object path */
+    const char *dst_path;
+
+    /* buffer size for id map files */
+    size_t map_file_bsize;
+    size_t map_file_random_bsize;
+
+    /* the number of ids to gather at a time */
+    size_t max_ref_idx_ids;
+    size_t max_large_idx_ids;
+    size_t max_poslen_ids;
+    size_t max_idx_ids;
+    size_t min_idx_ids;
+
+    /* the number of missing SEQUENCE ids to gather at a time */
+    size_t max_missing_ids;
+
+    /* pid of tool */
+    int pid;
+
+    /* db create mode */
+    struct
+    {
+        KCreateMode cmode;
+    } db;
+
+    /* tbl create mode */
+    struct
+    {
+        KCreateMode cmode;
+    } tbl;
+
+    /* column blob checksum mode */
+    struct
+    {
+        size_t pgsize;
+        KCreateMode cmode;
+        KChecksum checksum;
+    } col;
+
+    /* ignore failure on multiple sorts */
+    bool ignore;
+
+    /* force overwrite */
+    bool force;
+
+    /* write new=>old mappings
+       not normally needed */
+    bool write_new_to_old;
+
+    /* whether to apply a sort on old-id
+       before writing old=>new mapping or
+       to let pagefile handle it */
+    bool sort_before_old2new;
+
+    /* normally remove idx files right away
+       but if they are being debugged... */
+    bool unlink_idx_files;
+
+    /* perform consistency check on index */
+    bool idx_consistency_check;
+};
+
+
+/*--------------------------------------------------------------------------
+ * TypeParams
+ *  object type params
+ */
+typedef struct TypeParams TypeParams;
+struct TypeParams
+{
+    char src_type [ 256 ];
+    char dst_type [ 256 ];
+    char view_type [ 256 ];
+};
+
+
+/*--------------------------------------------------------------------------
+ * sra-sort functions
+ */
+
+/* run
+ *  called from KMain
+ *  determines the type of object being copied/sorted
+ *  opens input object
+ *  dispatches to the appropriate handler
+ */
+void run ( const ctx_t *ctx );
+
+
+#endif
diff --git a/tools/sra-sort/sra-sort.vers b/tools/sra-sort/sra-sort.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/sra-sort/sra-sort.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/sra-sort/status.h b/tools/sra-sort/status.h
new file mode 100644
index 0000000..bbf15ab
--- /dev/null
+++ b/tools/sra-sort/status.h
@@ -0,0 +1,48 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_status_
+#define _h_sra_sort_status_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * status generation
+ */
+
+
+/* STATUS
+ *  give feedback
+ */
+void Status ( const ctx_t *ctx, uint32_t lineno, uint32_t level, const char *msg, ... );
+#define STATUS( lvl, msg, ... ) \
+    Status ( ctx, __LINE__, lvl, msg, ## __VA_ARGS__ )
+
+
+#endif
diff --git a/tools/sra-sort/tbl-pair.c b/tools/sra-sort/tbl-pair.c
new file mode 100644
index 0000000..f0c6597
--- /dev/null
+++ b/tools/sra-sort/tbl-pair.c
@@ -0,0 +1,1055 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+typedef struct TablePair StdTblPair;
+#define TBLPAIR_IMPL StdTblPair
+
+#include "tbl-pair.h"
+#include "col-pair.h"
+#include "db-pair.h"
+#include "meta-pair.h"
+#include "row-set-priv.h"
+#include "ctx.h"
+#include "caps.h"
+#include "except.h"
+#include "status.h"
+#include "mem.h"
+#include "sra-sort.h"
+
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/vdb-priv.h>
+#include <kdb/meta.h>
+#include <klib/printf.h>
+#include <klib/text.h>
+#include <klib/namelist.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+
+FILE_ENTRY ( tbl-pair );
+
+
+/*--------------------------------------------------------------------------
+ * StdTblPair
+ *  generic database object pair
+ */
+
+static
+void StdTblPairWhack ( StdTblPair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+    TablePairDestroy ( self, ctx );
+    MemFree ( ctx, self, sizeof * self );
+}
+
+static
+void StdTblPairDummyStub ( StdTblPair *self, const ctx_t *ctx )
+{
+}
+
+static
+ColumnPair *StdTblPairMakeColumnPair ( StdTblPair *self, const ctx_t *ctx,
+    struct ColumnReader *reader, struct ColumnWriter *writer, const char *colspec, bool large )
+{
+    FUNC_ENTRY ( ctx );
+    return TablePairMakeColumnPair ( self, ctx, reader, writer, colspec, large );
+}
+
+static
+RowSetIterator *StdTblPairGetRowSetIterator ( StdTblPair *self, const ctx_t *ctx, bool mapped, bool large )
+{
+    FUNC_ENTRY ( ctx );
+    return TablePairMakeRowSetIterator ( self, ctx, NULL, mapped, large );
+}
+
+static TablePair_vt StdTblPair_vt =
+{
+    StdTblPairWhack,
+    StdTblPairDummyStub,
+    StdTblPairDummyStub,
+    StdTblPairMakeColumnPair,
+    StdTblPairDummyStub,
+    StdTblPairDummyStub,
+    StdTblPairGetRowSetIterator
+};
+
+
+/*--------------------------------------------------------------------------
+ * TablePair
+ *  interface code
+ */
+
+
+/* Make
+ *  makes an object based upon open source and destination VDatabase objects
+ */
+TablePair *TablePairMake ( const ctx_t *ctx,
+    const VTable *src, VTable *dst, const char *name, const char *opt_full_spec, bool reorder )
+{
+    FUNC_ENTRY ( ctx );
+
+    StdTblPair *tbl;
+
+    TRY ( tbl = MemAlloc ( ctx, sizeof * tbl, false ) )
+    {
+        TRY ( TablePairInit ( tbl, ctx, & StdTblPair_vt, src, dst, name, opt_full_spec, reorder ) )
+        {
+            return tbl;
+        }
+
+        MemFree ( ctx, tbl, sizeof * tbl );
+    }
+
+    return NULL;
+}
+
+TablePair *DbPairMakeStdTblPair ( DbPair *self, const ctx_t *ctx,
+    const VTable *src, VTable *dst, const char *name, bool reorder )
+{
+    FUNC_ENTRY ( ctx );
+    return TablePairMake ( ctx, src, dst, name, self -> full_spec, reorder );
+}
+
+
+/* Release
+ */
+void TablePairRelease ( TablePair *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountDrop ( & self -> refcount, "TablePair" ) )
+        {
+        case krefOkay:
+            break;
+        case krefWhack:
+            ( * self -> vt -> whack ) ( ( void* ) self, ctx );
+            break;
+        case krefZero:
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcTable, rcDestroying, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to release TablePair" );
+        }
+    }
+}
+
+/* Duplicate
+ */
+TablePair *TablePairDuplicate ( TablePair *self, const ctx_t *ctx )
+{
+    rc_t rc;
+    FUNC_ENTRY ( ctx );
+
+    if ( self != NULL )
+    {
+        switch ( KRefcountAdd ( & self -> refcount, "TablePair" ) )
+        {
+        case krefOkay:
+        case krefWhack:
+        case krefZero:
+            break;
+        case krefLimit:
+        case krefNegative:
+            rc = RC ( rcExe, rcTable, rcAttaching, rcRefcount, rcInvalid );
+            INTERNAL_ERROR ( rc, "failed to duplicate TablePair" );
+            return NULL;
+        }
+    }
+
+    return ( TablePair* ) self;
+}
+
+
+/* CommitColumnPair
+ */
+static
+bool CC TablePairCommitColumnPair ( void *item, void *data )
+{
+    const ctx_t *ctx = ( const void* ) data;
+    FUNC_ENTRY ( ctx );
+    ColumnPair *col = item;
+    TRY ( ColumnWriterCommit ( col -> writer, ctx ) )
+    {
+        return false;
+    }
+    return true;
+}
+
+
+/* ReleaseColumnPair
+ */
+static
+void CC TablePairReleaseColumnPair ( void *item, void *data )
+{
+    const ctx_t *ctx = ( const void* ) data;
+    FUNC_ENTRY ( ctx );
+    ColumnPairRelease ( item, ctx );
+}
+
+
+/* Copy
+ *  the table has to obtain a RowSetIterator
+ *  which it walks vertically
+ *
+ *  for each RowSet, it walks its columns horizontally,
+ *  resetting it between columns
+ */
+static
+void TablePairCopyStaticColumns ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* copy static columns */
+    uint32_t count = VectorLength ( & self -> static_cols );
+    if ( count != 0 )
+    {
+#if OLD_STATIC_WRITE
+        RowSetIterator *rsi;
+        TRY ( rsi = TablePairMakeRowSetIterator ( self, ctx, NULL, false ) )
+        {
+#endif
+            STATUS ( 2, "copying '%s' static columns", self -> full_spec );
+
+            while ( ! FAILED () )
+            {
+                uint32_t i;
+
+#if OLD_STATIC_WRITE
+                RowSet *rs;
+                ON_FAIL ( rs = RowSetIteratorNext ( rsi, ctx ) )
+                    break;
+                if ( rs == NULL )
+                    break;
+#endif
+                for ( i = 0; i < count; ++ i )
+                {
+                    ColumnPair *col = VectorGet ( & self -> static_cols, i );
+                    assert ( col != NULL );
+#if OLD_STATIC_WRITE
+                    ON_FAIL ( ColumnPairCopy ( col, ctx, rs ) )
+                        break;
+#else
+                    ON_FAIL ( ColumnPairCopyStatic ( col, ctx, self -> first_id, self -> last_excl - self -> first_id ) )
+                        break;
+#endif
+                }
+
+#if OLD_STATIC_WRITE
+                RowSetRelease ( rs, ctx );
+#else
+                break;
+#endif
+            }
+
+#if OLD_STATIC_WRITE
+            RowSetIteratorRelease ( rsi, ctx );
+        }
+#endif
+
+        /* commit columns */
+        if ( ! FAILED () )
+        {
+            STATUS ( 3, "committing static columns" );
+            VectorDoUntil ( & self -> static_cols, false, TablePairCommitColumnPair, ( void* ) ctx );
+        }
+
+        /* douse columns */
+        STATUS ( 3, "releasing static columns" );
+        VectorWhack ( & self -> static_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    }
+}
+
+static
+void TablePairCopyPresortColumns ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* copy remaining columns */
+    uint32_t count = VectorLength ( & self -> presort_cols );
+    if ( count != 0 )
+    {
+        RowSetIterator *rsi;
+        TRY ( rsi = TablePairMakeSimpleRowSetIterator ( self, ctx ) )
+        {
+            STATUS ( 2, "copying '%s' presorted columns", self -> full_spec );
+
+            while ( ! FAILED () )
+            {
+                uint32_t i;
+
+                RowSet *rs;
+                ON_FAIL ( rs = RowSetIteratorNext ( rsi, ctx ) )
+                    break;
+                if ( rs == NULL )
+                    break;
+
+                for ( i = 0; i < count; ++ i )
+                {
+                    ColumnPair *col = VectorGet ( & self -> presort_cols, i );
+                    assert ( col != NULL );
+                    ON_FAIL ( ColumnPairCopy ( col, ctx, rs ) )
+                        break;
+                }
+
+                RowSetRelease ( rs, ctx );
+            }
+
+            RowSetIteratorRelease ( rsi, ctx );
+        }
+
+        /* commit columns */
+        if ( ! FAILED () )
+        {
+            STATUS ( 3, "committing presorted columns" );
+            VectorDoUntil ( & self -> presort_cols, false, TablePairCommitColumnPair, ( void* ) ctx );
+        }
+
+        /* douse columns */
+        STATUS ( 3, "releasing presorted columns" );
+        VectorWhack ( & self -> presort_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    }
+}
+
+static
+void TablePairCopyMappedColumns ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* copy mapped columns */
+    uint32_t count = VectorLength ( & self -> mapped_cols );
+    if ( count != 0 )
+    {
+        RowSetIterator *rsi;
+        const bool is_mapped = true;
+        const bool is_large = false;
+        TRY ( rsi = TablePairGetRowSetIterator ( self, ctx, is_mapped, is_large ) )
+        {
+            STATUS ( 2, "copying '%s' mapped columns", self -> full_spec );
+
+            while ( ! FAILED () )
+            {
+                uint32_t i;
+
+                RowSet *rs;
+                ON_FAIL ( rs = RowSetIteratorNext ( rsi, ctx ) )
+                    break;
+                if ( rs == NULL )
+                    break;
+
+                for ( i = 0; i < count; ++ i )
+                {
+                    ColumnPair *col = VectorGet ( & self -> mapped_cols, i );
+                    assert ( col != NULL );
+                    ON_FAIL ( ColumnPairCopy ( col, ctx, rs ) )
+                        break;
+                }
+
+                RowSetRelease ( rs, ctx );
+            }
+
+            RowSetIteratorRelease ( rsi, ctx );
+        }
+
+        /* commit columns */
+        if ( ! FAILED () )
+        {
+            STATUS ( 3, "committing mapped columns" );
+            VectorDoUntil ( & self -> mapped_cols, false, TablePairCommitColumnPair, ( void* ) ctx );
+        }
+
+        /* douse columns */
+        STATUS ( 3, "releasing mapped columns" );
+        VectorWhack ( & self -> mapped_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    }
+}
+
+static
+void TablePairCopyLargeColumns ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* copy large columns */
+    uint32_t count = VectorLength ( & self -> large_cols );
+    if ( count != 0 )
+    {
+        RowSetIterator *rsi;
+        const bool is_mapped = false;
+        const bool is_large = true;
+        TRY ( rsi = TablePairGetRowSetIterator ( self, ctx, is_mapped, is_large ) )
+        {
+            STATUS ( 2, "copying '%s' large columns", self -> full_spec );
+
+            while ( ! FAILED () )
+            {
+                uint32_t i;
+
+                RowSet *rs;
+                ON_FAIL ( rs = RowSetIteratorNext ( rsi, ctx ) )
+                    break;
+                if ( rs == NULL )
+                    break;
+
+                for ( i = 0; i < count; ++ i )
+                {
+                    ColumnPair *col = VectorGet ( & self -> large_cols, i );
+                    assert ( col != NULL );
+                    ON_FAIL ( ColumnPairCopy ( col, ctx, rs ) )
+                        break;
+                }
+
+                RowSetRelease ( rs, ctx );
+            }
+
+            RowSetIteratorRelease ( rsi, ctx );
+        }
+
+        /* commit columns */
+        if ( ! FAILED () )
+        {
+            STATUS ( 3, "committing large columns" );
+            VectorDoUntil ( & self -> large_cols, false, TablePairCommitColumnPair, ( void* ) ctx );
+        }
+
+        /* douse columns */
+        STATUS ( 3, "releasing large columns" );
+        VectorWhack ( & self -> large_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    }
+}
+
+static
+void TablePairCopyLargeMappedColumns ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* copy large mapped columns */
+    uint32_t count = VectorLength ( & self -> large_mapped_cols );
+    if ( count != 0 )
+    {
+        RowSetIterator *rsi;
+        const bool is_mapped = true;
+        const bool is_large = true;
+        TRY ( rsi = TablePairGetRowSetIterator ( self, ctx, is_mapped, is_large ) )
+        {
+            STATUS ( 2, "copying '%s' large mapped columns", self -> full_spec );
+
+            while ( ! FAILED () )
+            {
+                uint32_t i;
+
+                RowSet *rs;
+                ON_FAIL ( rs = RowSetIteratorNext ( rsi, ctx ) )
+                    break;
+                if ( rs == NULL )
+                    break;
+
+                for ( i = 0; i < count; ++ i )
+                {
+                    ColumnPair *col = VectorGet ( & self -> large_mapped_cols, i );
+                    assert ( col != NULL );
+                    ON_FAIL ( ColumnPairCopy ( col, ctx, rs ) )
+                        break;
+                }
+
+                RowSetRelease ( rs, ctx );
+            }
+
+            RowSetIteratorRelease ( rsi, ctx );
+        }
+
+        /* commit columns */
+        if ( ! FAILED () )
+        {
+            STATUS ( 3, "committing large mapped columns" );
+            VectorDoUntil ( & self -> large_mapped_cols, false, TablePairCommitColumnPair, ( void* ) ctx );
+        }
+
+        /* douse columns */
+        STATUS ( 3, "releasing large mapped columns" );
+        VectorWhack ( & self -> large_mapped_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    }
+}
+
+static
+void TablePairCopyNormalColumns ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    /* copy remaining columns */
+    uint32_t count = VectorLength ( & self -> normal_cols );
+    if ( count != 0 )
+    {
+        RowSetIterator *rsi;
+        const bool is_mapped = false;
+        const bool is_large = false;
+        TRY ( rsi = TablePairGetRowSetIterator ( self, ctx, is_mapped, is_large ) )
+        {
+            STATUS ( 2, "copying '%s' columns", self -> full_spec );
+
+            while ( ! FAILED () )
+            {
+                uint32_t i;
+
+                RowSet *rs;
+                ON_FAIL ( rs = RowSetIteratorNext ( rsi, ctx ) )
+                    break;
+                if ( rs == NULL )
+                    break;
+
+                for ( i = 0; i < count; ++ i )
+                {
+                    ColumnPair *col = VectorGet ( & self -> normal_cols, i );
+                    assert ( col != NULL );
+                    ON_FAIL ( ColumnPairCopy ( col, ctx, rs ) )
+                        break;
+                }
+
+                RowSetRelease ( rs, ctx );
+            }
+
+            RowSetIteratorRelease ( rsi, ctx );
+        }
+
+        /* commit columns */
+        if ( ! FAILED () )
+        {
+            STATUS ( 3, "committing columns" );
+            VectorDoUntil ( & self -> normal_cols, false, TablePairCommitColumnPair, ( void* ) ctx );
+        }
+
+        /* douse columns */
+        STATUS ( 3, "releasing columns" );
+        VectorWhack ( & self -> normal_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    }
+}
+
+void TablePairCopy ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    size_t in_use, quota;
+
+    /* copy columns */
+    
+
+    ON_FAIL ( TablePairExplode ( self, ctx ) )
+        return;
+
+    STATUS ( 2, "copying table '%s'", self -> full_spec );
+
+    in_use = MemInUse ( ctx, & quota );
+    if ( ( quota + 1 ) != 0 )
+        STATUS ( 4, "MEMORY: %,zu bytes used out of %,zu total ( %u%% )", in_use, quota, ( uint32_t ) ( in_use * 100 ) / quota );
+    else
+        STATUS ( 4, "MEMORY: %,zu bytes used", in_use );
+
+    TRY ( TablePairPreCopy ( self, ctx ) )
+    {
+        TRY ( TablePairCopyStaticColumns ( self, ctx ) )
+        {
+            TRY ( TablePairCopyPresortColumns ( self, ctx ) )
+            {
+                TRY ( TablePairCopyMappedColumns ( self, ctx ) )
+                {
+                    TRY ( TablePairCopyLargeColumns ( self, ctx ) )
+                    {
+                        TRY ( TablePairCopyLargeMappedColumns ( self, ctx ) )
+                        {
+                            TablePairCopyNormalColumns ( self, ctx );
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /* cleanup */
+    if ( ! FAILED () )
+        TablePairPostCopy ( self, ctx );
+
+    in_use = MemInUse ( ctx, & quota );
+    if ( ( quota + 1 ) != 0 )
+        STATUS ( 4, "MEMORY: %,zu bytes used out of %,zu total ( %u%% )", in_use, quota, ( uint32_t ) ( in_use * 100 ) / quota );
+    else
+        STATUS ( 4, "MEMORY: %,zu bytes used", in_use );
+
+    STATUS ( 2, "finished with table '%s'", self -> full_spec );
+}
+
+
+/* Explode
+ *  probably a bad name, but it is intended to mean
+ *  register all enclosed columns
+ *  and create a proper pair of KMetadata
+ */
+static
+MetaPair *TablePairExplodeMetaPair ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    MetaPair *meta = NULL;
+    const KMetadata *smeta;
+
+    rc = VTableOpenMetadataRead ( self -> stbl, & smeta );
+    if ( rc != 0 )
+        ERROR ( rc, "VTableOpenMetadataRead failed on 'src.%s'", self -> full_spec );
+    else
+    {
+        KMetadata *dmeta;
+        rc = VTableOpenMetadataUpdate ( self -> dtbl, & dmeta );
+        if ( rc != 0 )
+            ERROR ( rc, "VTableOpenMetadataUpdate failed on 'dst.%s'", self -> full_spec );
+        else
+        {
+            meta = MetaPairMake ( ctx, smeta, dmeta, self -> full_spec );
+
+            KMetadataRelease ( dmeta );
+        }
+        
+        KMetadataRelease ( smeta );
+    }
+
+    return meta;
+}
+
+static
+ColumnPair *TablePairMatchColumnPair ( TablePair *self, const ctx_t *ctx, const char *name, bool required )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    KNamelist *types;
+    ColumnPair *col = NULL;
+
+    rc = VTableListWritableDatatypes ( self -> dtbl, name, & types );
+    if ( rc != 0 )
+        ERROR ( rc, "VTableListWritableDatatypes failed listing 'dst.%s.%s' datatypes", self -> full_spec, name );
+    else
+    {
+        uint32_t count;
+        rc = KNamelistCount ( types, & count );
+        if ( rc != 0 )
+            ERROR ( rc, "KNamelistCount failed listing 'dst.%s.%s' datatypes", self -> full_spec, name );
+        else
+        {
+            const VCursor *scurs;
+            rc = VTableCreateCursorRead ( self -> stbl, & scurs );
+            if ( rc != 0 )
+                ERROR ( rc, "VTableCreateCursorRead failed on 'src.%s'", self -> full_spec, name );
+            else
+            {
+                rc = VCursorPermitPostOpenAdd ( scurs );
+                if ( rc != 0 )
+                    ERROR ( rc, "VCursorPermitPostOpenAdd failed on 'src.%s'", self -> full_spec, name );
+                else
+                {
+                    rc = VCursorOpen ( scurs );
+                    if ( rc != 0 )
+                        ERROR ( rc, "VCursorOpen failed with no contents on 'src.%s'", self -> full_spec, name );
+                    else
+                    {
+                        uint32_t i;
+                        for ( i = 0; i < count; ++ i )
+                        {
+                            uint32_t idx;
+                            char colspec [ 256 ];
+
+                            const char *td;
+                            rc = KNamelistGet ( types, i, & td );
+                            if ( rc != 0 )
+                            {
+                                ERROR ( rc, "KNamelistGet ( %u ) failed listing 'dst.%s.%s' datatypes", i, self -> full_spec, name );
+                                break;
+                            }
+
+                            rc = string_printf ( colspec, sizeof colspec, NULL, "(%s)%s", td, name );
+                            if ( rc != 0 )
+                            {
+                                ABORT ( rc, "failed creating colspec for 'dst.%s.%s'", self -> full_spec, name );
+                                break;
+                            }
+
+                            rc = VCursorAddColumn ( scurs, & idx, colspec );
+                            if ( rc == 0 )
+                            {
+                                ColumnReader *reader;
+                                TRY ( reader = TablePairMakeColumnReader ( self, ctx, scurs, colspec, true ) )
+                                {
+                                    ColumnWriter *writer;
+                                    TRY ( writer = TablePairMakeColumnWriter ( self, ctx, NULL, colspec ) )
+                                    {
+                                        uint32_t j;
+                                        bool large = false;
+                                        bool is_static = VTableHasStaticColumn ( self -> stbl, name );
+                                        if ( is_static )
+                                        {
+                                            if ( self -> nonstatic_col_names != NULL )
+                                            {
+                                                for ( j = 0; self -> nonstatic_col_names [ j ] != NULL; ++ j )
+                                                {
+                                                    if ( strcmp ( name, self -> nonstatic_col_names [ j ] ) == 0 )
+                                                    {
+                                                        is_static = false;
+                                                        break;
+                                                    }
+                                                }
+                                            }
+                                        }
+                                        else if ( self -> large_col_names != NULL )
+                                        {
+                                            for ( j = 0; self -> large_col_names [ j ] != NULL; ++ j )
+                                            {
+                                                if ( strcmp ( name, self -> large_col_names [ j ] ) == 0 )
+                                                {
+                                                    large = true;
+                                                    break;
+                                                }
+                                            }
+                                        }
+
+                                        /* at this point, if the column is static, then avoid
+                                           any rigorous treatment and create an otherwise normal
+                                           column pair. may want to special case it for reporting */
+                                        col = is_static
+                                            ? TablePairMakeStaticColumnPair ( self, ctx, reader, writer, colspec )
+                                            : ( * self -> vt -> make_column_pair ) ( ( TBLPAIR_IMPL* ) self, ctx, reader, writer, colspec, large );
+
+                                        ColumnWriterRelease ( writer, ctx );
+                                    }
+
+                                    ColumnReaderRelease ( reader, ctx );
+                                }
+                                break;
+                            }
+                        }
+
+                        if ( col == NULL && ! FAILED () )
+                            ANNOTATE ( "column '%s' cannot be written", name );
+                    }
+                }
+
+
+                VCursorRelease ( scurs );
+            }
+        }
+
+        KNamelistRelease ( types );
+    }
+
+    return col;
+}
+
+static
+void TablePairDefaultExplode ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    KNamelist *pnames;
+
+    /* look at the physical columns in source */
+    rc = VTableListPhysColumns ( self -> stbl, & pnames );
+    if ( rc != 0 )
+        ERROR ( rc, "VTableListWritableColumns failed listing 'src.%s' physical columns", self -> full_spec );
+    else
+    {
+        KNamelist *dnames;
+
+        /* this gives us the columns that could potentially take input */
+        rc = VTableListSeededWritableColumns ( self -> dtbl, & dnames, pnames );
+        if ( rc != 0 )
+            ERROR ( rc, "VTableListWritableColumns failed listing 'dst.%s' columns", self -> full_spec );
+        else
+        {
+            uint32_t count;
+            rc = KNamelistCount ( dnames, & count );
+            if ( rc != 0 )
+                ERROR ( rc, "KNamelistCount failed listing 'dst.%s' columns", self -> full_spec );
+            else if ( count > 0 )
+            {
+                uint32_t i;
+                for ( i = 0; ! FAILED () && i < count; ++ i )
+                {
+                    ColumnPair *col;
+
+                    const char *name;
+                    rc = KNamelistGet ( dnames, i, & name );
+                    if ( rc != 0 )
+                    {
+                        ERROR ( rc, "KNamelistGet ( %u ) failed listing 'dst.%s' columns", i, self -> full_spec );
+                        break;
+                    }
+
+                    /* filter out the column names that are specifically excluded */
+                    if ( self -> exclude_col_names != NULL )
+                    {
+                        uint32_t j;
+                        for ( j = 0; self -> exclude_col_names [ j ] != NULL; ++ j )
+                        {
+                            if ( strcmp ( name, self -> exclude_col_names [ j ] ) == 0 )
+                            {
+                                name = NULL;
+                                break;
+                            }
+                        }
+                        if ( name == NULL )
+                            continue;
+                    }
+
+                    TRY ( col = TablePairMatchColumnPair ( self, ctx, name, true ) )
+                    {
+                        if ( col != NULL )
+                        {
+                            ON_FAIL ( TablePairAddColumnPair ( self, ctx, col ) )
+                            {
+                                ColumnPairRelease ( col, ctx );
+                            }
+                        }
+                    }
+                }
+            }
+            
+            KNamelistRelease ( dnames );
+        }
+
+        KNamelistRelease ( pnames );
+    }
+}
+
+void TablePairExplode ( TablePair *self, const ctx_t *ctx )
+{
+    if ( ! self -> exploded )
+    {
+        FUNC_ENTRY ( ctx );
+
+        STATUS ( 2, "exploding table '%s'", self -> full_spec );
+
+        /* first, ask subclass to perform explicit explode */
+        TRY ( ( * self -> vt -> explode ) ( self, ctx ) )
+        {
+            if ( self -> meta == NULL )
+            {
+                TRY ( self -> meta = TablePairExplodeMetaPair ( self, ctx ) )
+                {
+                    MetaPairCopy ( self -> meta, ctx, self -> full_spec, self -> exclude_meta );
+                    STATUS ( 3, "releasing metadata" );
+                    MetaPairRelease ( self -> meta, ctx );
+                    self -> meta = NULL;
+                }
+            }
+
+            if ( ! FAILED () )
+            {
+                /* next, perform default self-explode for all columns not excluded */
+                TRY ( TablePairDefaultExplode ( self, ctx ) )
+                {
+                    /* now create metadata pair */
+                    if ( self -> meta == NULL )
+                        self -> meta = TablePairExplodeMetaPair ( self, ctx );
+                    if ( ! FAILED () )
+                        self -> exploded = true;
+                }
+            }
+        }
+    }
+}
+
+
+/* AddColumnPair
+ *  called from implementations
+ */
+void TablePairAddColumnPair ( TablePair *self, const ctx_t *ctx, ColumnPair *col )
+{
+    if ( col != NULL )
+    {
+        FUNC_ENTRY ( ctx );
+
+        rc_t rc;
+        Vector *v = & self -> normal_cols;
+
+        const char *col_type = "";
+        const char *col_size = "";
+
+        if ( col -> large )
+        {
+            col_size = "large ";
+            v = & self -> large_cols;
+        }
+
+        if ( col -> is_static )
+        {
+            col_type = "static ";
+            v = & self -> static_cols;
+        }
+        else if ( col -> presorted )
+        {
+            col_type = "presorted ";
+            v = & self -> presort_cols;
+        }
+        else if ( col -> is_mapped )
+        {
+            col_type = "mapped ";
+            v = col -> large ? & self -> large_mapped_cols : & self -> mapped_cols;
+        }
+
+        STATUS ( 4, "adding %s%scolumn pair '%s'", col_size, col_type, col -> full_spec );
+        rc = VectorAppend ( v, NULL, ( const void* ) col );
+        if ( rc != 0 )
+            SYSTEM_ERROR ( rc, "failed to add column pair '%s'", col -> full_spec );
+        else
+        {
+            int64_t first;
+            uint64_t count;
+
+            TRY ( count = ColumnReaderIdRange ( col -> reader, ctx, & first ) )
+            {
+                int64_t last_excl = first + count;
+                if ( first < self -> first_id )
+                    self -> first_id = first;
+                /* Static columns may have incorrect range in legacy data */
+                if ( last_excl > self -> last_excl && !col->is_static)
+                    self -> last_excl = last_excl;
+            }
+        }
+    }
+}
+
+
+/* Init
+ */
+void TablePairInit ( TablePair *self, const ctx_t *ctx, const TablePair_vt *vt,
+    const VTable *src, VTable *dst, const char *name, const char *opt_full_spec, bool reorder )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    memset ( self, 0, sizeof * self );
+    self -> vt = vt;
+
+    VectorInit ( & self -> static_cols, 0, 32 );
+    VectorInit ( & self -> presort_cols, 0, 4 );
+    VectorInit ( & self -> large_cols, 0, 32 );
+    VectorInit ( & self -> mapped_cols, 0, 32 );
+    VectorInit ( & self -> large_mapped_cols, 0, 32 );
+    VectorInit ( & self -> normal_cols, 0, 32 );
+
+    if ( opt_full_spec == NULL )
+        opt_full_spec = "";
+
+    rc = VTableAddRef ( self -> stbl = src );
+    if ( rc != 0 )
+        ERROR ( rc, "failed to duplicate tbl 'src.%s%s%s'", opt_full_spec, opt_full_spec [ 0 ] ? "." : "", name );
+    else
+    {
+        rc = VTableAddRef ( self -> dtbl = dst );
+        if ( rc != 0 )
+            ERROR ( rc, "failed to duplicate tbl 'dst.%s%s%s'", opt_full_spec, opt_full_spec [ 0 ] ? "." : "", name );
+        else
+        {
+            char *full_spec;
+
+            self -> full_spec_size = string_size ( opt_full_spec ) + string_size ( name );
+            if ( opt_full_spec [ 0 ] != 0  )
+                ++ self -> full_spec_size;
+
+            TRY ( full_spec = MemAlloc ( ctx, self -> full_spec_size + 1, false ) )
+            {
+                if ( opt_full_spec [ 0 ] != 0 )
+                    rc = string_printf ( full_spec, self -> full_spec_size + 1, NULL, "%s.%s", opt_full_spec, name );
+                else
+                    strcpy ( full_spec, name );
+                if ( rc != 0 )
+                    ABORT ( rc, "miscalculated string size" );
+                else
+                {
+                    const Tool *tp = ctx -> caps -> tool;
+
+                    self -> full_spec = full_spec;
+                    self -> name = full_spec;
+                    if ( opt_full_spec [ 0 ] != 0 )
+                        self -> name += string_size ( opt_full_spec ) + 1;
+
+                    /* start with an invalid range */
+                    self -> first_id = ( int64_t ) ( ~ ( uint64_t ) 0 >> 1 );
+                    self -> last_excl = - self -> first_id;
+
+                    /* row-set id ranges */
+                    self -> max_idx_ids = tp -> max_idx_ids;
+                    self -> min_idx_ids = tp -> min_idx_ids;
+
+                    /* record reordering */
+                    self -> reorder = reorder;
+
+                    KRefcountInit ( & self -> refcount, 1, "TablePair", "init", name );
+                    return;
+                }
+            }
+
+            VTableRelease ( self -> dtbl );
+            self -> dtbl = NULL;
+        }
+
+        VTableRelease ( self -> stbl );
+        self -> stbl = NULL;
+    }
+}
+
+/* Destroy
+ *  destroys superclass items
+ */
+void TablePairDestroy ( TablePair *self, const ctx_t *ctx )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+
+    VectorWhack ( & self -> static_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    VectorWhack ( & self -> presort_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    VectorWhack ( & self -> large_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    VectorWhack ( & self -> mapped_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    VectorWhack ( & self -> large_mapped_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+    VectorWhack ( & self -> normal_cols, TablePairReleaseColumnPair, ( void* ) ctx );
+
+    MetaPairRelease ( self -> meta, ctx );
+
+    rc = VTableReindex ( self -> dtbl );
+    if ( rc != 0 )
+        WARN ( "VTableReindex failed on 'dst.%s'", self -> full_spec );
+    rc = VTableRelease ( self -> dtbl );
+    if ( rc != 0 )
+        WARN ( "VTableRelease failed on 'dst.%s'", self -> full_spec );
+    VTableRelease ( self -> stbl );
+
+    MemFree ( ctx, ( void* ) self -> full_spec, self -> full_spec_size + 1 );
+
+    memset ( self, 0, sizeof * self );
+}
diff --git a/tools/sra-sort/tbl-pair.h b/tools/sra-sort/tbl-pair.h
new file mode 100644
index 0000000..4ee383e
--- /dev/null
+++ b/tools/sra-sort/tbl-pair.h
@@ -0,0 +1,209 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_tbl_pair_
+#define _h_sra_sort_tbl_pair_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+#ifndef _h_klib_vector_
+#include <klib/vector.h>
+#endif
+
+#ifndef _h_klib_refcount_
+#include <klib/refcount.h>
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct VTable;
+struct DbPair;
+struct ColumnReader;
+struct ColumnWriter;
+struct ColumnPair;
+struct MetaPair;
+struct RowSetIterator;
+
+
+/*--------------------------------------------------------------------------
+ * TablePair
+ *  interface to pairing of source and destination tables
+ */
+typedef struct TablePair_vt TablePair_vt;
+
+typedef struct TablePair TablePair;
+struct TablePair
+{
+    /* table id range */
+    int64_t first_id, last_excl;
+
+    /* polymorphic */
+    const TablePair_vt *vt;
+
+    /* the pair of VTables */
+    struct VTable const *stbl;
+    struct VTable *dtbl;
+
+    /* the pair of KMetadata */
+    struct MetaPair *meta;
+
+    /* the ColumnPairs */
+    Vector static_cols;
+    Vector presort_cols;
+    Vector large_cols;
+    Vector mapped_cols;
+    Vector large_mapped_cols;
+    Vector normal_cols;
+
+    /* filters */
+    const char **exclude_meta;
+    const char **exclude_col_names;
+    const char **mapped_col_names;
+    const char **nonstatic_col_names;
+    const char **large_col_names;
+
+    /* row-set id ranges */
+    size_t max_idx_ids;
+    size_t min_idx_ids;
+
+    /* simple table name */
+    const char *name;
+
+    /* full table spec */
+    size_t full_spec_size;
+    const char *full_spec;
+
+    /* reference counting */
+    KRefcount refcount;
+
+    /* true if table will be reordered */
+    bool reorder;
+
+    /* true if already exploded */
+    bool exploded;
+
+    uint8_t align [ 2 ];
+};
+
+#ifndef TBLPAIR_IMPL
+#define TBLPAIR_IMPL TablePair
+#endif
+
+struct TablePair_vt
+{
+    void ( * whack ) ( TBLPAIR_IMPL *self, const ctx_t *ctx );
+    void ( * pre_explode ) ( TBLPAIR_IMPL *self, const ctx_t *ctx );
+    void ( * explode ) ( TBLPAIR_IMPL *self, const ctx_t *ctx );
+    struct ColumnPair* ( *make_column_pair ) ( TBLPAIR_IMPL *self, const ctx_t *ctx,
+        struct ColumnReader *reader, struct ColumnWriter *writer, const char *colspec, bool large );
+    void ( * pre_copy ) ( TBLPAIR_IMPL *self, const ctx_t *ctx );
+    void ( * post_copy ) ( TBLPAIR_IMPL *self, const ctx_t *ctx );
+    struct RowSetIterator* ( *get_rowset_iter ) ( TBLPAIR_IMPL *self,
+        const ctx_t *ctx, bool mapped, bool large );
+};
+
+
+/* Make
+ *  make a standard table pair from existing VTable objects
+ */
+TablePair *TablePairMake ( const ctx_t *ctx,
+    struct VTable const *src, struct VTable *dst,
+    const char *name, const char *opt_full_spec, bool reorder );
+
+TablePair *DbPairMakeStdTblPair ( struct DbPair *self, const ctx_t *ctx,
+    struct VTable const *src, struct VTable *dst, const char *name, bool reorder );
+
+
+/* Release
+ *  called by table at end of copy
+ */
+void TablePairRelease ( TablePair *self, const ctx_t *ctx );
+
+/* Duplicate
+ */
+TablePair *TablePairDuplicate ( TablePair *self, const ctx_t *ctx );
+
+
+/* Copy
+ *  copy from source to destination table
+ */
+void TablePairCopy ( TablePair *self, const ctx_t *ctx );
+
+
+/* PreExplode
+ *  perform explosion before overall coopy
+ */
+#define TablePairPreExplode( self, ctx ) \
+    POLY_DISPATCH_VOID ( pre_explode, self, TBLPAIR_IMPL, ctx )
+
+
+/* Explode
+ *  probably a bad name, but it is intended to mean
+ *  register all enclosed columns
+ *  and create a proper pair of KMetadata
+ */
+void TablePairExplode ( TablePair *self, const ctx_t *ctx );
+
+
+/* AddColumnPair
+ *  called from implementations
+ */
+void TablePairAddColumnPair ( TablePair *self, const ctx_t *ctx, struct ColumnPair *col );
+
+
+/* PreCopy
+ * PostCopy
+ *  give table a chance to prepare and cleanup
+ */
+#define TablePairPreCopy( self, ctx ) \
+    POLY_DISPATCH_VOID ( pre_copy, self, TBLPAIR_IMPL, ctx )
+#define TablePairPostCopy( self, ctx ) \
+    POLY_DISPATCH_VOID ( post_copy, self, TBLPAIR_IMPL, ctx )
+
+
+/* GetRowSetIterator
+ *  returns an iterator for copying
+ */
+#define TablePairGetRowSetIterator( self, ctx, mapped, large ) \
+    POLY_DISPATCH_PTR ( get_rowset_iter, self, TBLPAIR_IMPL, ctx, mapped, large )
+
+
+/* Init
+ */
+void TablePairInit ( TablePair *self, const ctx_t *ctx, const TablePair_vt *vt,
+    struct VTable const *src, struct VTable *dst,
+    const char *name, const char *opt_full_spec, bool reorder );
+
+/* Destroy
+ */
+void TablePairDestroy ( TablePair *self, const ctx_t *ctx );
+
+
+#endif /* _h_sra_sort_tbl_pair_ */
diff --git a/tools/sra-sort/xcheck-ref-align.c b/tools/sra-sort/xcheck-ref-align.c
new file mode 100644
index 0000000..2c7a1cf
--- /dev/null
+++ b/tools/sra-sort/xcheck-ref-align.c
@@ -0,0 +1,404 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "caps.h"
+#include "ctx.h"
+#include "mem.h"
+#include "except.h"
+#include "status.h"
+
+#include <kapp/main.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <kproc/thread.h>
+#include <klib/rc.h>
+
+#include <string.h>
+
+#if ! _DEBUGGING
+#define USE_BGTHREAD 1
+#endif
+
+FILE_ENTRY ( xcheck-ref-align );
+
+
+/*--------------------------------------------------------------------------
+ * TestReferenceCell
+ *  properly sorted tables will allow both columns to be walked.
+ *  each row of the REFERENCE table column MUST contain zero or more
+ *  sequential integers, and the first integer MUST continue the sequence
+ *  established by previous rows. therefore, the row will be fully specified
+ *  by a start and stop id pair.
+ */
+static
+int64_t TestReferenceCell ( const ctx_t *ctx,
+    const VCursor *ref_curs, uint32_t align_ids_idx,
+    const char *align_name, int64_t ref_row_id, int64_t excl_ref_last_idx )
+{
+    FUNC_ENTRY ( ctx );
+
+    const int64_t *cell;
+    uint32_t elem_bits, boff, row_len;
+
+    rc_t rc = VCursorCellDataDirect ( ref_curs, ref_row_id, align_ids_idx,
+        & elem_bits, ( const void** ) & cell, & boff, & row_len );
+    if ( rc != 0 )
+        ERROR ( rc, "VCursorCellDataDirect - failed to read row %ld from REFERENCE cursor", ref_row_id );
+    else if ( elem_bits != sizeof * cell * 8 )
+    {
+        rc = RC ( rcExe, rcIndex, rcValidating, rcSize, rcIncorrect );
+        ERROR ( rc, "VCursorCellDataDirect - elem_bits of %u reading row %ld from REFERENCE cursor", elem_bits, ref_row_id );
+    }
+    else if ( boff != 0 )
+    {
+        rc = RC ( rcExe, rcIndex, rcValidating, rcOffset, rcIncorrect );
+        ERROR ( rc, "VCursorCellDataDirect - bit offset of %u reading row %ld from REFERENCE cursor", boff, ref_row_id );
+    }
+    else
+    {
+        uint32_t i;
+        for ( i = 0; i < row_len; ++ i )
+        {
+            if ( cell [ i ] != excl_ref_last_idx + i )
+            {
+                rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcIncorrect );
+                ERROR ( rc, "REFERENCE.%s_IDS.%ld: expected id %ld but found %ld",
+                        align_name, ref_row_id, excl_ref_last_idx + i, cell [ i ] );
+                break;
+            }
+        }
+
+        excl_ref_last_idx += row_len;
+    }
+
+    return excl_ref_last_idx;
+}
+
+static
+void TestAlignCell ( const ctx_t *ctx,
+    const VCursor *align_curs, uint32_t ref_id_idx,
+    const char *align_name, int64_t align_row_id, int64_t ref_row_id )
+{
+    FUNC_ENTRY ( ctx );
+
+    const int64_t *cell;
+    uint32_t elem_bits, boff, row_len;
+
+
+    rc_t rc = VCursorCellDataDirect ( align_curs, align_row_id, ref_id_idx,
+        & elem_bits, ( const void** ) & cell, & boff, & row_len );
+    if ( rc != 0 )
+        ERROR ( rc, "VCursorCellDataDirect - failed to read row %ld from %s cursor", align_row_id, align_name );
+    else if ( elem_bits != sizeof * cell * 8 )
+    {
+        rc = RC ( rcExe, rcIndex, rcValidating, rcSize, rcIncorrect );
+        ERROR ( rc, "VCursorCellDataDirect - elem_bits of %u reading row %ld from %s cursor", elem_bits, align_row_id, align_name );
+    }
+    else if ( boff != 0 )
+    {
+        rc = RC ( rcExe, rcIndex, rcValidating, rcOffset, rcIncorrect );
+        ERROR ( rc, "VCursorCellDataDirect - bit offset of %u reading row %ld from %s cursor", boff, align_row_id, align_name );
+    }
+    else if ( row_len != 1 )
+    {
+        rc = RC ( rcExe, rcIndex, rcValidating, rcRange, rcIncorrect );
+        ERROR ( rc, "VCursorCellDataDirect - row_len of %u reading row %ld from %s cursor", row_len, align_row_id, align_name );
+    }
+    else if ( * cell != ref_row_id )
+    {
+        rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcIncorrect );
+        ERROR ( rc, "%s.REF_ID.%ld: expected id %ld but found %ld",
+                align_name, align_row_id, ref_row_id, cell [ 0 ] );
+    }
+}
+
+/*--------------------------------------------------------------------------
+ * CrossCheckRefAlignCols
+ *  performs the cross-check
+ */
+static
+void CrossCheckRefAlignCols ( const ctx_t *ctx,
+    const VCursor *ref_curs, uint32_t align_ids_idx,
+    const VCursor *align_curs, uint32_t ref_id_idx, const char *align_name )
+{
+    FUNC_ENTRY ( ctx );
+
+    int64_t ref_row_id, excl_ref_last_id;
+    rc_t rc = VCursorIdRange ( ref_curs, 0, & ref_row_id, ( uint64_t* ) & excl_ref_last_id );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "VCursorIdRange - failed to establish row range on REFERENCE cursor" );
+    else
+    {
+        int64_t align_row_id, excl_align_last_id;
+
+        excl_ref_last_id += ref_row_id;
+
+        rc = VCursorIdRange ( align_curs, 0, & align_row_id, ( uint64_t* ) & excl_align_last_id );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "VCursorIdRange - failed to establish row range on %s cursor", align_name );
+        else
+        {
+            int64_t excl_last_align_idx;
+
+            excl_align_last_id += align_row_id;
+
+            for ( excl_last_align_idx = 1; ref_row_id < excl_ref_last_id; ++ ref_row_id )
+            {
+                int64_t first_align_idx = excl_last_align_idx;
+
+                /* rule for bailing out */
+                rc = Quitting ();
+                if ( rc != 0 || FAILED () )
+                    break;
+
+                /* the REFERENCE id cell should be filled purely with sequential ids */
+                TRY ( excl_last_align_idx = TestReferenceCell ( ctx, ref_curs, align_ids_idx,
+                          align_name, ref_row_id, excl_last_align_idx ) )
+                {
+                    /* the ids must be within the range of the alignment table */
+                    if ( excl_last_align_idx > excl_align_last_id )
+                    {
+                        rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcExcessive );
+                        ERROR ( rc, "REFERENCE.%s_IDS.%ld: references non-existant rows ( %ld .. %ld : max %ld )",
+                                align_name, ref_row_id, first_align_idx, excl_last_align_idx, excl_align_last_id );
+                        break;
+                    }
+
+                    /* this is more of a permanent assert */
+                    if ( first_align_idx != align_row_id )
+                    {
+                        rc = RC ( rcExe, rcIndex, rcValidating, rcId, rcIncorrect );
+                        ERROR ( rc, "REFERENCE.%s_IDS.%ld: expected id %ld but found %ld",
+                                align_name, ref_row_id, first_align_idx, align_row_id );
+                        break;
+                    }
+
+                    /* each of the rows in alignment table must point back
+                       to the same row in the REFERENCE table */
+                    for ( ; align_row_id < excl_last_align_idx; ++ align_row_id )
+                    {
+                        ON_FAIL ( TestAlignCell ( ctx, align_curs, ref_id_idx,
+                                      align_name, align_row_id, ref_row_id ) )
+                            break;
+                    }
+                }
+            }
+
+            /* at this point, we must have seen every record */
+            if ( ! FAILED () )
+            {
+                if ( ref_row_id != excl_ref_last_id )
+                {
+                    rc = RC ( rcExe, rcIndex, rcValidating, rcRange, rcIncomplete );
+                    ERROR ( rc, "REFERENCE.%s_IDS: scan stopped on row %ld of %ld",
+                            align_name, ref_row_id, excl_ref_last_id );
+                }
+                if ( align_row_id != excl_align_last_id )
+                {
+                    rc = RC ( rcExe, rcIndex, rcValidating, rcRange, rcIncomplete );
+                    ERROR ( rc, "%s.REF_ID: scan stopped on row %ld of %ld",
+                            align_name, align_row_id, excl_align_last_id );
+                }
+            }
+        }
+    }
+}
+
+
+
+/*--------------------------------------------------------------------------
+ * CrossCheckRefAlignCurs
+ *  adds columns and opens cursors
+ */
+static
+void CrossCheckRefAlignCurs ( const ctx_t *ctx,
+    const VCursor *ref_curs, const VCursor *align_curs, const char *align_name )
+{
+    FUNC_ENTRY ( ctx );
+
+    uint32_t align_ids_idx;
+    rc_t rc = VCursorAddColumn ( ref_curs, & align_ids_idx, "%s_IDS", align_name );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "VCursorAddColumn - failed to add column '%s_IDS' to REFERENCE cursor", align_name );
+    else
+    {
+        uint32_t ref_id_idx;
+        rc = VCursorAddColumn ( align_curs, & ref_id_idx, "REF_ID" );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "VCursorAddColumn - failed to add column 'REF_ID' to %s cursor", align_name );
+        else
+        {
+            rc = VCursorOpen ( ref_curs );
+            if ( rc != 0 )
+                INTERNAL_ERROR ( rc, "VCursorOpen - failed to open cursor on REFERENCE table" );
+            else
+            {
+                rc = VCursorOpen ( align_curs );
+                if ( rc != 0 )
+                    INTERNAL_ERROR ( rc, "VCursorOpen - failed to open cursor on %s table", align_name );
+                else
+                {
+                    rc = VCursorSetRowId ( ref_curs, 1 );
+                    if ( rc != 0 )
+                        INTERNAL_ERROR ( rc, "VCursorSetRowId - failed to set row-id on REFERENCE cursor" );
+                    else
+                    {
+                        rc = VCursorSetRowId ( align_curs, 1 );
+                        if ( rc != 0 )
+                            INTERNAL_ERROR ( rc, "VCursorSetRowId - failed to set row-id on %s cursor", align_name );
+                        else
+                        {
+                            CrossCheckRefAlignCols ( ctx, ref_curs, align_ids_idx, align_curs, ref_id_idx, align_name );
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+
+/*--------------------------------------------------------------------------
+ * CrossCheckRefAlignTbl
+ *  checks REFERENCE.<name>_IDS for properly sorted form
+ *  runs a cross-check of REFERENCE.<name>_IDS against <name>.REF_ID
+ */
+static
+void CrossCheckRefAlignTblInt ( const ctx_t *ctx,
+    const VTable *ref_tbl, const VTable *align_tbl, const char *align_name )
+{
+    FUNC_ENTRY ( ctx );
+
+    rc_t rc;
+    const VCursor *ref_curs;
+
+    rc = VTableCreateCursorRead ( ref_tbl, & ref_curs );
+    if ( rc != 0 )
+        INTERNAL_ERROR ( rc, "VTableCreateCursorRead - failed to open cursor on REFERENCE table" );
+    else
+    {
+        const VCursor *align_curs;
+        rc = VTableCreateCursorRead ( align_tbl, & align_curs );
+        if ( rc != 0 )
+            INTERNAL_ERROR ( rc, "VTableCreateCursorRead - failed to open cursor on %s table", align_name );
+        else
+        {
+            CrossCheckRefAlignCurs ( ctx, ref_curs, align_curs, align_name );
+
+            VCursorRelease ( align_curs );
+        }
+
+        VCursorRelease ( ref_curs );
+    }
+}
+
+#if USE_BGTHREAD
+
+typedef struct CrossCheckRefAlignTblData CrossCheckRefAlignTblData;
+struct CrossCheckRefAlignTblData
+{
+    Caps caps;
+    const VTable *ref_tbl, *align_tbl;
+    char align_name [ 1 ];
+};
+
+static
+rc_t CC CrossCheckRefAlignTblRun ( const KThread *self, void *data )
+{
+    CrossCheckRefAlignTblData *pb = data;
+
+    DECLARE_CTX_INFO ();
+    ctx_t thread_ctx = { & pb -> caps, NULL, & ctx_info };
+    const ctx_t *ctx = & thread_ctx;
+
+    STATUS ( 2, "running consistency-check on background thread" );
+
+    CrossCheckRefAlignTblInt ( ctx, pb -> ref_tbl, pb -> align_tbl, pb -> align_name );
+
+    STATUS ( 2, "finished consistency-check on background thread" );
+
+    VTableRelease ( pb -> align_tbl );
+    VTableRelease ( pb -> ref_tbl );
+    CapsWhack ( & pb -> caps, ctx );
+
+    return ctx -> rc;
+}
+
+#endif
+
+void CrossCheckRefAlignTbl ( const ctx_t *ctx,
+    const VTable *ref_tbl, const VTable *align_tbl, const char *align_name )
+{
+    FUNC_ENTRY ( ctx );
+
+#if USE_BGTHREAD
+    size_t name_len;
+    CrossCheckRefAlignTblData *pb;
+#endif
+
+    STATUS ( 2, "consistency-check on join indices between REFERENCE and %s tables", align_name );
+
+#if USE_BGTHREAD
+    name_len = strlen ( align_name );
+    TRY ( pb = MemAlloc ( ctx, sizeof * pb + name_len, false ) )
+    {
+        TRY ( CapsInit ( & pb -> caps, ctx ) )
+        {
+            rc_t rc = VTableAddRef ( pb -> ref_tbl = ref_tbl );
+            if ( rc != 0 )
+                ERROR ( rc, "VTableAddRef failed on REFERENCE table" );
+            else
+            {
+                rc = VTableAddRef ( pb -> align_tbl = align_tbl );
+                if ( rc != 0 )
+                    ERROR ( rc, "VTableAddRef failed on %s table", align_name );
+                else
+                {
+                    KThread *t;
+
+                    strcpy ( pb -> align_name, align_name );
+
+                    rc = KThreadMake ( & t, CrossCheckRefAlignTblRun, pb );
+                    if ( rc == 0 )
+                    {
+                        return;
+                    }
+
+                    VTableRelease ( pb -> align_tbl );
+                }
+
+                VTableRelease ( pb -> ref_tbl );
+            }
+
+            CapsWhack ( & pb -> caps, ctx );
+        }
+
+        MemFree ( ctx, pb, sizeof * pb + name_len );
+    }
+#else
+    CrossCheckRefAlignTblInt ( ctx, ref_tbl, align_tbl, align_name );
+#endif
+}
diff --git a/tools/sra-sort/xcheck.h b/tools/sra-sort/xcheck.h
new file mode 100644
index 0000000..adf44c5
--- /dev/null
+++ b/tools/sra-sort/xcheck.h
@@ -0,0 +1,49 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _h_sra_sort_xcheck_
+#define _h_sra_sort_xcheck_
+
+#ifndef _h_sra_sort_defs_
+#include "sort-defs.h"
+#endif
+
+
+/*--------------------------------------------------------------------------
+ * forwards
+ */
+struct VTable;
+
+
+/*--------------------------------------------------------------------------
+ * CrossCheckRefAlignTbl
+ *  checks REFERENCE.<name>_IDS for properly sorted form
+ *  runs a cross-check of REFERENCE.<name>_IDS against <name>.REF_ID
+ */
+void CrossCheckRefAlignTbl ( const ctx_t *ctx,
+    struct VTable const *ref_tbl, struct VTable const *align_tbl, const char *align_name );
+
+#endif
diff --git a/tools/sra-stat/Makefile b/tools/sra-stat/Makefile
index 68e40c5..db91c9c 100644
--- a/tools/sra-stat/Makefile
+++ b/tools/sra-stat/Makefile
@@ -42,15 +42,13 @@ ALL_TOOLS = \
 #-------------------------------------------------------------------------------
 # outer targets
 #
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
-all std: makedirs vers-includes
+all std: vers-includes
 	@ $(MAKE_CMD) $(TARGDIR)/std
 
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
 	@ $(MAKE_CMD) $(BINDIR)/$@
 
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
 
 #-------------------------------------------------------------------------------
 # std
@@ -61,23 +59,22 @@ $(TARGDIR)/std: \
 .PHONY: $(TARGDIR)/std
 
 #-------------------------------------------------------------------------------
-# clean
+# vers-includes
 #
-clean: stdclean
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
 
-.PHONY: clean
+.PHONY: $(TARGDIR)/vers-includes
 
 #-------------------------------------------------------------------------------
-# tag
+# clean
 #
-tag: \
-	$(addsuffix _tag,$(ALL_TOOLS))
+clean: stdclean
 
-.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+.PHONY: clean
 
 #-------------------------------------------------------------------------------
-# sra-dump
-#  vdb table copy tool
+# sra-stat
+#  sra statistics
 #
 SRASTAT_SRC = \
 	sra-stat
@@ -89,25 +86,18 @@ SRASTAT_LIB = \
 	-lkapp \
 	-dalign-reader \
 	-lsradb \
-	-ssrapath \
-	-ssraschema \
-	-daxf \
-	-dsraxf \
-	-dvxf \
+	$(READONLY_SCHEMA_LIBS) \
 	-lvdb \
 	-lkdb \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
 	-lkfg \
 	-lkfs \
 	-dksrch \
+	-lkproc \
 	-lklib \
-	-ldl \
-	-lz \
-	-lbz2 \
 	-lm
 
 $(BINDIR)/sra-stat: $(SRASTAT_OBJ)
 	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(SRASTAT_LIB)
-
-sradump_tag:
-	@ $(TOP)/build/tag-module.sh $(MODULE) sradump $(SRASTAT_OBJ)
-
diff --git a/tools/sra-stat/sra-stat.c b/tools/sra-stat/sra-stat.c
index 026fb1b..14322ce 100644
--- a/tools/sra-stat/sra-stat.c
+++ b/tools/sra-stat/sra-stat.c
@@ -28,10 +28,15 @@
 
 #include <kapp/main.h>
 
-#include <sra/sradb.h>
+#include <sra/wsradb.h>
 #include <sra/sradb-priv.h>
 #include <sra/types.h>
 
+#include <vdb/dependencies.h> /* VDBDependencies */
+#include <vdb/database.h> /* VDatabaseRelease */
+#include <vdb/table.h> /* VTableRelease */
+#include <vdb/cursor.h> /* VCursor */
+
 #include <kdb/database.h> /* KDatabase */
 #include <kdb/table.h>
 #include <kdb/meta.h> /* KMetadata */
@@ -39,19 +44,28 @@
 #include <kdb/kdb-priv.h>
 
 #include <kfs/directory.h>
+#include <kfs/file.h>
 
+#include <klib/sort.h> /* ksort */
+#include <klib/checksum.h>
 #include <klib/container.h>
 #include <klib/namelist.h>
+#include <klib/printf.h>
 #include <klib/log.h>
 #include <klib/out.h>
 #include <klib/debug.h> /* DBGMSG */
 #include <klib/rc.h>
 
+#include <os-native.h> /* strtok_r on Windows */
+
 #include <assert.h>
+#include <math.h> /* sqrt */
 #include <stdlib.h>
 #include <string.h>
 #include <time.h>
 
+#include <stdio.h> /* stderr */
+
 #define DISP_RC(rc, msg) (void)((rc == 0) ? 0 : LOGERR(klogInt, rc, msg))
 
 #define DISP_RC2(rc, name, msg) (void)((rc == 0) ? 0 : \
@@ -60,23 +74,677 @@
 
 #define DISP_RC_Read(rc, name, spot, msg) (void)((rc == 0) ? 0 : \
     PLOGERR(klogInt, (klogInt, rc, "column $(name), spot $(spot): $(msg)", \
-        "name=%s,spot=%lu,msg=%s", name, msg)))
+        "name=%s,spot=%lu,msg=%s", name, spot, msg)))
 
-#define DESTRUCT(type, obj) do { rc_t rc2 = type##Release(obj); \
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
     if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
 
 #define MAX_NREADS 2*1024
+
+/*********** XMLLogger_Encode : copied from kapp/log-xml.c (-lload) ***********/
+
+static
+rc_t CC XMLLogger_Encode(const char* src,
+    char* aDst, size_t dst_sz, size_t *num_writ)
+{
+    rc_t rc = 0;
+    size_t bytes;
+    const char* p;
+    char* dst = aDst;
+
+    assert(src != NULL && num_writ != NULL);
+
+    *num_writ = 0;
+    if( *src == '\0' ) {
+        *dst = *src;
+    } else {
+        do {
+            switch(*src) {
+                case '\'':
+                    bytes = 6;
+                    p = "'";
+                    break;
+                case '"':
+                    bytes = 6;
+                    p = """;
+                    break;
+                case '&':
+                    bytes = 5;
+                    p = "&";
+                    break;
+                case '<':
+                    bytes = 4;
+                    p = "<";
+                    break;
+                case '>':
+                    bytes = 4;
+                    p = ">";
+                    break;
+                default:
+                    bytes = 1;
+                    p = src;
+                    break;
+            }
+            if( (*num_writ + bytes) > dst_sz ) {
+                rc = RC(rcExe, rcLog, rcEncoding, rcBuffer, rcInsufficient);
+            } else {
+                memcpy(dst, p, bytes);
+                *num_writ = *num_writ + bytes;
+                dst += bytes;
+            }
+        } while(rc == 0 && *++src != '\0');
+        if (rc == 0 && *src == '\0' && ((*num_writ + bytes) <= dst_sz)) {
+            *dst = *src;
+        }
+    }
+    return rc;
+}
+
+/*********** XMLLogger_Encode : copied from kapp/log-xml.c (-lload) ***********/
+
+typedef struct BAM_HEADER_RG { /* @RG: Read group. */
+    char* ID; /* Read group identifier. */
+    char* LB; /* Library. */
+    char* SM; /* Sample. */
+} BAM_HEADER_RG;
+static
+rc_t BAM_HEADER_RG_copy(BAM_HEADER_RG* dest, const BAM_HEADER_RG* src)
+{
+    assert(dest && !dest->ID && !dest->LB && !dest->SM
+        && src  &&  src ->ID &&  src ->LB &&  src ->SM);
+    dest->ID = strdup(src->ID);
+    dest->LB = strdup(src->LB);
+    dest->SM = strdup(src->SM);
+    if (!dest->ID || !dest->LB || !dest->SM) {
+        return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+    }
+    return 0;
+}
+static void BAM_HEADER_RG_free(BAM_HEADER_RG* rg) {
+    assert(rg);
+    free(rg->ID);
+    free(rg->LB);
+    free(rg->SM);
+    rg->ID = rg->LB = rg->SM = NULL;
+}
+static void BAM_HEADER_RG_print_xml(const BAM_HEADER_RG* rg) {
+    rc_t rc = 0;
+    char library[1024] = "";
+    char sample[1024] = "";
+    char* l = library;
+    char* s = sample;
+    size_t num_writ = 0;
+    assert(rg);
+    if (rg->LB) {
+        rc = XMLLogger_Encode(rg->LB, library, sizeof library, &num_writ);
+        if (rc) {
+            l = rg->LB;
+            PLOGMSG(klogWarn, (klogWarn, "Library value is too long: "
+                "XML-safe conversion was disabled for @RG\tID:$(ID)\tLB:$(LB)"
+                "ID=%s,LB=%s", rg->ID, rg->LB));
+        }
+        OUTMSG((" library=\"%s\"", l ? l : ""));
+    }
+    if (rg->SM) {
+        rc = XMLLogger_Encode(rg->SM, sample, sizeof sample, &num_writ);
+        if (rc) {
+            s = rg->SM;
+            PLOGMSG(klogWarn, (klogWarn, "Sample value is too long: "
+                "XML-safe conversion was disabled for @RG\tID:$(ID)\tSM:$(SM)"
+                "ID=%s,SM=%s", rg->ID, rg->SM));
+        }
+        OUTMSG((" sample=\"%s\"" , s ? s : ""));
+    }
+}
+typedef struct SraStats {
+    BSTNode n;
+    char     spot_group[1024]; /* SPOT_GROUP Column */
+    uint64_t spot_count; /*** spot count ***/
+    uint64_t spot_count_mates; /*** spots with mates ***/
+    uint64_t bio_len; /** biological len (BIO_BASE_COUNT) **/
+    uint64_t bio_len_mates; /** biological len when mates are present**/
+    uint64_t total_len; /** total len (BASE_COUNT) **/
+    uint64_t bad_spot_count; /** number of spots flagged with rd_filter=2 **/
+    uint64_t bad_bio_len;        /** biological length of bad spots ***/
+    uint64_t filtered_spot_count; /* number of spots flagged with rd_filter=2 */
+    uint64_t filtered_bio_len;   /** biological length of filtered spots **/
+    uint64_t total_cmp_len; /* CMP_READ : compressed */
+    BAM_HEADER_RG BAM_HEADER;
+} SraStats;
+typedef struct Statistics {  /* READ_LEN columnn */
+    /* average READ_LEN value */
+    /* READ_LEN standard deviation. Is calculated just when requested. */
+    /* running (continuous) standard deviation */
+
+    int64_t n; /* number of values */
+    double a; /* the mean value */
+    double q; /* Qi = Q[i-1] + (Xi - A[i-1])(Xi - Ai) */
+
+    bool variable; /* variable or fixed value */
+    double prev_val;
+} Statistics;
+typedef struct Statistics2 {
+    int n;
+    double average;
+    double diff_sq_sum;
+} Statistics2;
+static
+void Statistics2Init(Statistics2* self, double sum, spotid_t count) {
+    assert(self);
+
+    if (count) {
+        self->average = sum / count;
+    }
+}
+
+static void Statistics2Add(Statistics2* self, double value) {
+    double diff = 0;
+
+    assert(self);
+
+    ++self->n;
+
+    diff = value - self->average;
+    self->diff_sq_sum += diff * diff;
+}
+
+static
+void Statistics2Print(const Statistics2* selfs,
+    uint32_t nreads, const char* indent,
+
+     /* the same as in <Statistics: just to make <Statistics> and <Statistics2>
+        look the same */
+    uint64_t spot_count)
+{
+    int i = 0;
+
+    if (nreads) {
+        assert(selfs && indent);
+    }
+
+    OUTMSG(("%s<Statistics2 nreads=\"%u\" nspots=\"%lu\">\n",
+        indent, nreads, spot_count));
+
+    for (i = 0; i < nreads; ++i) {
+        double dev = 0;
+        const Statistics2* stats = selfs + i;
+        double avr = stats->average;
+        if (stats->n > 0) {
+            dev = sqrt(stats->diff_sq_sum / stats->n);
+        }
+
+        OUTMSG(("%s  "
+            "<Read index=\"%d\" count=\"%ld\" average=\"%f\" stdev=\"%f\"/>\n",
+            indent, i, stats->n, avr, dev));
+    }
+
+    OUTMSG(("%s</Statistics2>\n", indent));
+}
+
+typedef struct {
+    uint64_t cnt[5];
+    bool CS_NATIVE;
+    const SRAColumn *col;
+    bool finalized;
+} Bases;
+static
+void BasesInit(Bases *self, const SRATable *tbl)
+{
+    rc_t rc = 0;
+    const char name[] = "CS_NATIVE";
+    const SRAColumn *col = NULL;
+    const void *base = NULL;
+    bitsz_t boff = ~0;
+    bitsz_t row_bits = ~0;
+
+    assert(self);
+    memset(self, 0, sizeof *self);
+    self->CS_NATIVE = true;
+
+    rc = SRATableOpenColumnRead(tbl, &col, name, NULL);
+    if (rc != 0) {
+        PLOGERR(klogInt, (klogErr, rc,
+            "while SRATableOpenColumnRead($(name))", "name=%s", name));
+    }
+
+    if (rc == 0) {
+        rc = SRAColumnRead(col, 1, &base, &boff, &row_bits);
+        if (rc != 0) {
+            PLOGERR(klogInt, (klogErr, rc,
+                "while SRAColumnRead($(name))", "name=%s", name));
+        }
+        if (boff != 0 || row_bits != 8) {
+            rc = RC(rcExe, rcColumn, rcReading, rcData, rcInvalid);
+            PLOGERR(klogInt, (klogErr, rc,
+                "invalid boff or row_bits while SRAColumnRead($(name))",
+                "name=%s", name));
+        }
+    }
+
+    if (rc == 0) {
+        self->CS_NATIVE = *((bool*)base);
+    }
+
+    RELEASE(SRAColumn, col);
+
+    {
+        const char *name = self->CS_NATIVE ? "CSREAD" : "READ";
+        const char *datatype
+            = self->CS_NATIVE ? "INSDC:x2cs:bin" : "INSDC:x2na:bin";
+        rc = SRATableOpenColumnRead(tbl, &self->col, name, datatype);
+        if (rc != 0) {
+            PLOGERR(klogInt, (klogErr, rc,
+                "while SRATableOpenColumnRead($(name), $(type))",
+                "name=%s,type=%s", name, datatype));
+        }
+    }
+}
+
+static
+void BasesFinalize(Bases *self)
+{
+    assert(self);
+
+    if (self->col == NULL) {
+        LOGMSG(klogInfo, "Bases statistics will not be printed : "
+            "READ column was not opened during BasesFinalize()");
+        return;
+    }
+
+    self->finalized = true;
+}
+
+static
+rc_t BasesRelease(Bases *self)
+{
+    rc_t rc = 0;
+
+    assert(self);
+
+    RELEASE(SRAColumn, self->col);
+
+    return rc;
+}
+
+static
+void BasesAdd(Bases *self, spotid_t spotid)
+{
+    rc_t rc = 0;
+    const void *base = NULL;
+    bitsz_t boff = ~0;
+    bitsz_t row_bits = ~0;
+    bitsz_t i = ~0;
+    const unsigned char *bases = NULL;
+
+    assert(self);
+
+    if (self->col == NULL) {
+        return;
+    }
+
+    rc = SRAColumnRead(self->col, spotid, &base, &boff, &row_bits);
+    if (rc != 0) {
+        PLOGERR(klogInt, (klogErr, rc,
+            "while SRAColumnRead(READ, $(type))",
+            "type=%s", self->CS_NATIVE ? "CS_NATIVE" : "not CS_NATIVE"));
+        BasesRelease(self);
+        return;
+    }
+
+    if ((row_bits % 8) != 0) {
+        rc = RC(rcExe, rcColumn, rcReading, rcData, rcInvalid);
+        PLOGERR(klogInt, (klogErr, rc, "Invalid row_bits '$(row_bits) "
+            "while SRAColumnRead(READ, $(type), spotid=$(spotid))",
+            "row_bits=%lu,type=%s,spotid=%lu",
+            row_bits, self->CS_NATIVE ? "CS_NATIVE" : "not CS_NATIVE", spotid));
+        BasesRelease(self);
+        return;
+    }
+
+    row_bits /= 8;
+    bases = base;
+    for (i = 0; i < row_bits; ++i) {
+        unsigned char base = bases[i];
+        if (base > 4) {
+            rc = RC(rcExe, rcColumn, rcReading, rcData, rcInvalid);
+            PLOGERR(klogInt, (klogErr, rc,
+                "Invalid READ column value '$(base) "
+                "while SRAColumnRead($(type), spotid=$(spotid), index=$(i))",
+                "base=%d,type=%s,spotid=%lu,index=%lu",
+                base, self->CS_NATIVE ? "CS_NATIVE" : "not CS_NATIVE",
+                spotid, i));
+            BasesRelease(self);
+            return;
+        }
+        ++self->cnt[base];
+    }
+}
+
+static
+void BasesPrint(const Bases *self,
+    uint64_t base_count, const char* indent)
+{
+    const char tag[] = "Bases";
+    const char *name = NULL;
+    int i = ~0;
+
+    assert(self);
+
+    if (!self->finalized) {
+        LOGMSG(klogInfo, "Bases statistics will not be printed : "
+            "Bases object was not finalized during BasesPrint()");
+        return;
+    }
+
+    if (self->cnt[0] + self->cnt[1] + self->cnt[2] +
+        self->cnt[3] + self->cnt[4] != base_count)
+    {
+        rc_t rc = RC(rcExe, rcNumeral, rcComparing, rcData, rcInvalid);
+        LOGERR(klogErr, rc,
+            "BASE_COUNT MISMATCH DURING BASES COUNT CALCULATION");
+        return;
+    }
+
+    name = self->CS_NATIVE ? "0123." : "ACGTN";
+
+    OUTMSG(("%s<%s cs_native=\"%s\" count=\"%lu\">\n",
+        indent, tag, self->CS_NATIVE ? "true" : "false", base_count));
+    for (i = 0; i < 5; ++i) {
+        OUTMSG(("%s  <Base value=\"%c\" count=\"%lu\"/>\n",
+            indent, name[i], self->cnt[i]));
+    }
+    OUTMSG(("%s</%s>\n", indent, tag));
+}
+
+typedef struct {
+    uint64_t spot_count;
+    uint64_t spot_count_mates;
+    uint64_t BIO_BASE_COUNT; /* bio_len */
+    uint64_t bio_len_mates;
+    uint64_t BASE_COUNT; /* total_len */
+    uint64_t bad_spot_count;
+    uint64_t bad_bio_len;
+    uint64_t filtered_spot_count;
+    uint64_t filtered_bio_len;
+    uint64_t total_cmp_len; /* CMP_READ : compressed */
+
+    bool variable_nreads;
+    uint32_t nreads; /* if (nreads == 0) then (nreads is variable) */
+    Statistics * stats ; /* nreads elements */
+    Statistics2* stats2; /* nreads elements */
+
+    Bases bases_count;
+} SraStatsTotal;
+static
+rc_t SraStatsTotalMakeStatistics(SraStatsTotal* self, uint32_t nreads)
+{
+    assert(self);
+
+    if (nreads == 0) {
+        return 0;
+    }
+
+    assert(self->stats == NULL);
+    self->stats = calloc(nreads, sizeof *self->stats);
+    if (self->stats == NULL) {
+        return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+    }
+
+    assert(self->stats2 == NULL);
+    self->stats2 = calloc(nreads, sizeof *self->stats2);
+    if (self->stats2 == NULL) {
+        free(self->stats);
+        self->stats = NULL;
+        return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+    }
+
+    self->nreads = nreads;
+
+    return 0;
+}
+
+static
+void SraStatsTotalStatistics2Init(SraStatsTotal* self,
+    int nreads, uint64_t* sums, uint64_t* count)
+{
+    int i = 0;
+    assert(self);
+    if (nreads) {
+        assert(sums);
+    }
+    for (i = 0; i < nreads; ++i) {
+        uint64_t sum = sums[i];
+        Statistics2* stats = self->stats2 + i;
+        assert(stats);
+        Statistics2Init(stats, sum, count[i]);
+    }
+}
+
+static rc_t SraStatsTotalFree(SraStatsTotal* self) {
+    assert(self);
+
+    free(self->stats);
+    self->stats = NULL;
+
+    free(self->stats2);
+    self->stats2 = NULL;
+
+    BasesRelease(&self->bases_count);
+
+    self->nreads = 0;
+
+    return 0;
+}
+
+static void StatisticsAdd(Statistics* self, double value) {
+    double a_1 = 0;
+
+    /* http://en.wikipedia.org/wiki/Stdev#Rapid_calculation_methods */
+
+    assert(self);
+
+    a_1 = self->a;
+
+    if (self->n++ == 0) {
+        self->prev_val = value;
+    }
+    else if (self->prev_val != value) {
+        self->variable = true;
+    }
+
+    self->a += (value - a_1) / self->n;
+    self->q += ((double)value - a_1) * ((double)value - self->a);
+}
+
+static double StatisticsAverage(const Statistics* self) {
+    assert(self);
+
+    return self->a;
+}
+
+static double StatisticsStdev(const Statistics* self) {
+    assert(self);
+
+    if (self->n == 0) {
+        return 0;
+    }
+
+    return sqrt(self->q / self->n);
+}
+
+static
+void SraStatsTotalAdd(SraStatsTotal* self,
+    uint32_t* values, uint32_t nreads)
+{
+    int i = ~0;
+
+    assert(self && values);
+
+    if (self->nreads != nreads) {
+        self->variable_nreads = true;
+    }
+
+    if (self->variable_nreads) {
+        return;
+    }
+
+    for (i = 0; i < nreads; ++i) {
+        uint32_t value = values[i];
+        if (value > 0) {
+            Statistics* stats = self->stats + i;
+            assert(stats);
+
+            StatisticsAdd(stats, value);
+        }
+    }
+}
+
+static
+void SraStatsTotalAdd2(SraStatsTotal* self, uint32_t* values) {
+    int i = 0;
+
+    assert(self && values);
+
+    for (i = 0; i < self->nreads; ++i) {
+        uint32_t value = values[i];
+        if (value > 0) {
+            Statistics2* stats = self->stats2 + i;
+            assert(stats);
+
+            Statistics2Add(stats, value);
+        }
+    }
+}
+
+static double s_Round(double X) { return floor(X + 0.5); }
+
+static
+void print_double_or_int(const char* name, double val, bool variable) {
+    double rnd = s_Round(val);
+    assert(name);
+    if (variable) {
+        OUTMSG((" %s=\"%.2f\"", name, val));
+    }
+    else {
+        OUTMSG((" %s=\"%d\"", name, (int)rnd));
+    }
+}
+
+static
+void StatisticsPrint(const Statistics* selfs,
+    uint32_t nreads, const char* indent)
+{
+    int i = ~0;
+
+    if (nreads) {
+        assert(selfs && indent);
+    }
+
+    for (i = 0; i < nreads; ++i) {
+        const Statistics* stats = selfs + i;
+        double avr = StatisticsAverage(stats);
+        double dev = StatisticsStdev(stats);
+
+        OUTMSG(("%s  <Read index=\"%d\"", indent, i));
+        OUTMSG((" count=\"%ld\"", stats->n, i));
+        print_double_or_int("average", avr, stats->variable);
+        print_double_or_int("stdev"  , dev, stats->variable);
+        OUTMSG(("/>\n"));
+    }
+}
+static rc_t StatisticsDiff(const Statistics* ss,
+    const Statistics2* ss2, uint32_t nreads)
+{
+    rc_t rc = 0;
+
+    int i = ~0;
+
+    assert(ss && ss2);
+
+    for (i = 0; i < nreads; ++i) {
+        const Statistics * s  = ss  + i;
+        const Statistics2* s2 = ss2 + i;
+
+        double d  = StatisticsStdev(s);
+        double d2 = sqrt(s2->diff_sq_sum / s2->n);
+
+        double diff = d - d2;
+        if (diff < 0) {
+            diff = -diff;
+        }
+
+        if (diff > 1e-6) {
+              /* RC(rcExe, rcTest, rcExecuting, rcTest, rcFailed); */
+            rc = RC(rcExe, rcNumeral, rcComparing, rcData, rcInvalid);
+            DISP_RC(rc, "While comparing calculated standard deviations");
+        }
+
+        if (s->n != s2->n) {
+            rc = RC(rcExe, rcNumeral, rcComparing, rcData, rcInvalid);
+            DISP_RC(rc, "While comparing read statistics counts");
+        }
+
+        diff = StatisticsAverage(s) - s2->average;
+        if (diff < 0) {
+            diff = -diff;
+        }
+        if (diff > 1e-10) {
+              /* RC(rcExe, rcTest, rcExecuting, rcTest, rcFailed); */
+            rc = RC(rcExe, rcNumeral, rcComparing, rcData, rcInvalid);
+            DISP_RC(rc, "While comparing calculated average");
+        }
+    }
+
+    return rc;
+}
+
+static
+rc_t SraStatsTotalPrintStatistics(const SraStatsTotal* self,
+    const char* indent, bool test)
+{
+    rc_t rc = 0;
+
+    assert(self && indent);
+
+    OUTMSG(("%s<Statistics nreads=\"", indent));
+
+    if (self->variable_nreads) {
+        OUTMSG(("variable\"/>\n"));
+    }
+    else {
+        OUTMSG(("%u\"", self->nreads));
+        OUTMSG((" nspots=\"%lu\">\n", self->spot_count));
+        StatisticsPrint(self->stats, self->nreads, indent);
+        OUTMSG(("%s</Statistics>\n", indent));
+
+        if (test) {
+            Statistics2Print(self->stats2, self->nreads, indent,
+                self->spot_count);
+            rc = StatisticsDiff(self->stats, self->stats2, self->nreads);
+        }
+    }
+
+    return rc;
+}
+
 typedef struct srastat_parms {
     const char* table_path;
 
     bool xml; /* output format (txt or xml) */
     bool printMeta;
     bool quick; /* quick mode: stats from meta */
+    bool skip_members; /* not to print spot_group statistics */
+    bool skip_alignment; /* not to print alignment info */
+    bool print_arcinfo;
+    bool statistics; /* calculate average and stdev */
+    bool test; /* test stdev */
 
     spotid_t start, stop;
 
     bool hasSPOT_GROUP;
     bool variableReadLength;
+
+    SraStatsTotal total; /* is used in srastat_print */
 } srastat_parms;
 typedef struct SraStatsMeta {
     bool found;
@@ -85,6 +753,7 @@ typedef struct SraStatsMeta {
     uint64_t CMP_BASE_COUNT; /* compressed base count when present */
     uint64_t spot_count;
     char* spot_group; /* optional */
+    BAM_HEADER_RG BAM_HEADER;
 } SraStatsMeta;
 typedef struct MetaDataStats {
     bool found;
@@ -92,26 +761,6 @@ typedef struct MetaDataStats {
     uint32_t spotGroupN;
     SraStatsMeta *spotGroup;
 } MetaDataStats;
-typedef struct SraStats {
-    BSTNode n;
-    char     spot_group[1024]; /* SPOT_GROUP Column */
-    uint64_t spot_count; /*** spot count ***/
-    uint64_t spot_count_mates; /*** spots with mates ***/
-    uint64_t bio_len; /** biological len **/
-    uint64_t bio_len_mates; /** biological len when mates are present**/
-    uint64_t total_len; /** total len **/
-    uint64_t bad_spot_count; /** number of spots flagged with rd_filter=2 **/
-    uint64_t bad_bio_len;        /** biological length of bad spots ***/
-    uint64_t filtered_spot_count; /* number of spots flagged with rd_filter=2 */
-    uint64_t filtered_bio_len;   /** biological length of filtered spots **/
-    uint64_t total_cmp_len; /* CMP_READ : compressed */
-} SraStats;
-typedef struct SraStatsTotal {
-    uint64_t BASE_COUNT;
-    uint64_t BIO_BASE_COUNT;
-    uint64_t spot_count;
-    uint64_t total_cmp_len; /* CMP_READ : compressed */
-} SraStatsTotal;
 typedef struct SraSizeStats { uint64_t size; } SraSizeStats;
 typedef struct Formatter {
     char name[256];
@@ -129,15 +778,674 @@ typedef struct SraMeta {
     Formatter formatter;
     Loader loader;
 } SraMeta;
+typedef struct ArcInfo_struct {
+    KTime_t timestamp;
+    struct {
+        const char* tag;
+        uint64_t size;
+        char md5[32 + 1];
+    } i[2];
+} ArcInfo;
+typedef struct Quality {
+    uint32_t value;
+    uint64_t count;
+} Quality;
+typedef struct QualityStats {
+    Quality* QUALITY;
+    size_t allocated;
+    size_t used;
+} QualityStats;
+typedef enum EMetaState {
+    eMSNotFound,
+    eMSFound
+} EMetaState;
+typedef struct Count {
+    EMetaState state;
+    uint64_t value;
+} Count;
+typedef struct Counts {
+    char* tableName;
+    EMetaState tableState;
+    EMetaState metaState;
+    Count BASE_COUNT;
+    Count SPOT_COUNT;
+} Counts;
+typedef struct TableCounts {
+    EMetaState state;
+    Counts* count;
+    size_t allocated;
+    size_t used;
+} TableCounts;
+typedef struct Ctx {
+    const BSTree* tr;
+    const MetaDataStats* meta;
+    const SraMeta* info;
+    const SraSizeStats* sizes;
+    const ArcInfo* arc_info;
+    srastat_parms* pb;
+    SraStatsTotal* total;
+    const VDatabase* db;
+    QualityStats quality;
+    TableCounts tables;
+} Ctx;
+
+typedef rc_t (CC * RG_callback)(const BAM_HEADER_RG* rg, const void* data);
+
+static
+rc_t CC meta_RG_callback(const BAM_HEADER_RG* rg, const void* data)
+{
+    rc_t rc = 0;
+
+    const MetaDataStats* meta = data;
+
+    int i = 0;
+    bool found = false;
+
+    assert(rg && meta && rg->ID);
+
+    for (i = 0; i < meta->spotGroupN && rc == 0; ++i) {
+        SraStatsMeta* ss = &meta->spotGroup[i];
+        const char* spot_group = ss->spot_group;
+
+        assert(spot_group);
+        if (strcmp(spot_group, rg->ID) == 0) {
+            rc = BAM_HEADER_RG_copy(&ss->BAM_HEADER, rg);
+            found = true;
+            break;
+        }
+    }
+
+    if (rc == 0 && !found) {
+        /* There could be Read groups that are present in the BAM_HEADER 
+        but missed in the csra. We was just ignore them. */
+    }
+
+    return rc;
+}
+
+static
+int CC srastats_cmp ( const void *item, const BSTNode *n )
+{
+    const char *sg = item;
+    const SraStats *ss = ( const SraStats* ) n;
+
+    return strcmp(sg,ss->spot_group);
+}
+
+static
+rc_t CC tree_RG_callback(const BAM_HEADER_RG* rg, const void* data)
+{
+    rc_t rc = 0;
+
+    const BSTree* tr = data;
+    SraStats* ss = NULL;
+
+    assert(rg && tr && rg->ID);
+
+    ss = (SraStats*) BSTreeFind(tr, rg->ID, srastats_cmp);
+    if (ss == NULL) {
+        /* There could be Read groups that are present in the BAM_HEADER 
+        but missed in the csra. We was just ignore them. */
+    }
+    else {
+        rc = BAM_HEADER_RG_copy(&ss->BAM_HEADER, rg);
+    }
+
+    return rc;
+}
+
+static
+int CC QualityCmp(const void* s1, const void* s2, void *data) {
+    const Quality* q1 = s1;
+    const Quality* q2 = s2;
+    assert(q1 && q2);
+    return q1->value < q2->value ? -1 : q1->value == q2->value ? 0 : 1;
+}
+
+static
+int CC CountsCmp(const void* v1, const void* v2, void *data) {
+    const Counts* e1 = v1;
+    const Counts* e2 = v2;
+    assert(e1 && e2 && e1->tableName && e2->tableName);
+    return strcmp(e1->tableName, e2->tableName);
+}
+
+static
+rc_t QualityParse(Quality* self, const KMDataNode* node, const char* name)
+{
+    rc_t rc = 0;
+    const char start[] = "PHRED_";
+    int i = strlen(start);
+
+    assert(self && name);
+
+    if (strlen(name) <= strlen(start)) {
+        rc = RC(rcExe, rcXmlDoc, rcParsing, rcName, rcInvalid);
+        PLOGERR(klogInt, (klogErr, rc,
+            "Bad node name: STATS/QUALITY/$(name)", "name=%s", name));
+        return rc;
+    }
+
+    self->value = 0;
+    for (; i < strlen(name); ++i) {
+        if (name[i] < '0' || name[i] > '9') {
+            rc_t rc = RC(rcExe, rcXmlDoc, rcParsing, rcName, rcInvalid);
+            PLOGERR(klogInt, (klogErr, rc,
+                "Bad node name: STATS/QUALITY/$(name)", "name=%s", name));
+            return rc;
+        }
+        self->value = self->value * 10 + name[i] - '0';
+    }
+
+    rc = KMDataNodeReadAsU64(node, &self->count);
+    if (rc != 0) {
+        PLOGERR(klogInt, (klogErr, rc,
+            "while reading the value of STATS/QUALITY/$(name)",
+            "name=%s", name));
+    }
+
+    return rc;
+}
+
+static
+rc_t QualityStatsRead1(QualityStats* self,
+    const KMDataNode* parent, const char* name)
+{
+    const KMDataNode* node = NULL;
+
+    rc_t rc = KMDataNodeOpenNodeRead(parent, &node, name);
+    DISP_RC2(rc, name, "while calling KMDataNodeOpenNodeRead");
+
+    if (rc == 0) {
+        size_t size = 64;
+        assert(self);
+        if (self->allocated == 0) {
+            assert(self->QUALITY == NULL && self->used == 0);
+            self->QUALITY = malloc(size * sizeof *self->QUALITY);
+            if (self->QUALITY == NULL) {
+                return
+                    RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+            }
+            self->allocated = size;
+        }
+        else if (self->used >= self->allocated) {
+            Quality* tmp = NULL;
+            size = self->allocated * 2;
+            tmp = realloc(self->QUALITY, size * sizeof *self->QUALITY);
+            if (tmp == NULL) {
+                return
+                    RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+            }
+            self->QUALITY = tmp;
+            self->allocated = size;
+        }
+    }
+
+    if (rc == 0) {
+        assert((self->used < self->allocated) && self->QUALITY);
+        rc = QualityParse(&self->QUALITY[self->used], node, name);
+        if (rc == 0)
+        {   ++self->used; }
+    }
+
+    RELEASE(KMDataNode, node);
+
+    return rc;
+}
+
+static
+rc_t QualityStatsRead(QualityStats* self, const KMetadata* meta)
+{
+    rc_t rc = 0;
+    const char name[] = "STATS/QUALITY";
+    const KMDataNode* node = NULL;
+
+    assert(self && meta);
+
+    memset(self, 0, sizeof *self);
+
+    rc = KMetadataOpenNodeRead(meta, &node, name);
+
+    if (rc != 0) {
+        if (GetRCState(rc) == rcNotFound) {
+            DBGMSG(DBG_APP,DBG_COND_1, ("%s: not found\n", name));
+            return 0;
+        }
+        DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
+    }
+
+    if (rc == 0 && node) {
+        KNamelist* names = NULL;
+        rc = KMDataNodeListChild(node, &names);
+        DISP_RC2(rc, name, "while calling KMDataNodeListChild");
+        if (rc == 0) {
+            uint32_t count = 0;
+            rc = KNamelistCount(names, &count);
+            DISP_RC2(rc, name, "while calling KNamelistCount");
+            if (rc == 0) {
+                uint32_t i = ~0;
+                for (i = 0; i < count && rc == 0; ++i) {
+                    const char* child = NULL;
+                    rc = KNamelistGet(names, i, &child);
+                    if (rc != 0) {
+                       PLOGERR(klogInt, (klogInt, rc,
+                            "while calling STATS/QUALITY::KNamelistGet($(idx))",
+                            "idx=%i", i));
+                    }
+                    else
+                    {   rc = QualityStatsRead1(self, node, child); }
+                }
+            }
+        }
+        RELEASE(KNamelist, names);
+    }
+    RELEASE(KMDataNode, node);
+    return 0;
+}
+
+static
+void QualityStatsSort(QualityStats* self)
+{
+    assert(self);
+    ksort(self->QUALITY, self->used, sizeof *self->QUALITY, QualityCmp, NULL);
+}
+
+static
+void TableCountsSort(TableCounts* self)
+{
+    assert(self);
+    ksort(self->count, self->used, sizeof *self->count, CountsCmp, NULL);
+}
+static
+rc_t QualityStatsPrint(const QualityStats* self, const char* indent)
+{
+    size_t i = ~0;
+    const char tag[] = "QualityCount";
+    assert(self && indent);
+
+    if (self->allocated == 0)
+    {   return 0; }
+
+    OUTMSG(("%s<%s>\n", indent, tag));
+    for (i = 0; i < self->used; ++i) {
+        Quality* q = &self->QUALITY[i];
+        OUTMSG(("  %s<Quality value=\"%lu\" count=\"%lu\"/>\n",
+            indent, q->value, q->count));
+    }
+    OUTMSG(("%s</%s>\n", indent, tag));
+
+    return 0;
+}
+
+static
+void QualityStatsRelease(QualityStats* self)
+{
+    assert(self);
+    free(self->QUALITY);
+    memset(self, 0, sizeof *self);
+}
+
+static
+rc_t CountRead(Count* self, const char* name, const KMDataNode* parent)
+{
+    rc_t rc = 0;
+
+    const KMDataNode* node = NULL;
+
+    assert(self && parent && name);
+
+    memset(self, 0, sizeof *self);
+
+    rc = KMDataNodeOpenNodeRead(parent, &node, name);
+    if (rc != 0) {
+        if (GetRCState(rc) == rcNotFound) {
+            DBGMSG(DBG_APP,DBG_COND_1, ("%s: not found\n", name));
+            rc = 0;
+        }
+        DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
+    }
+    else {
+        rc = KMDataNodeReadAsU64(node, &self->value);
+        DISP_RC2(rc, name, "while calling KMDataNodeReadAsU64");
+        if (rc == 0)
+        {   self->state = eMSFound; }
+    }
+
+    RELEASE(KMDataNode, node);
+
+    return rc;
+}
+
+static
+rc_t TableCountsRead1(TableCounts* self,
+    const VDatabase* db, const char* tableName)
+{
+    const VTable* tbl = NULL;
+    const KMetadata* meta = NULL;
+    const char name[] = "STATS/TABLE";
+    const KMDataNode* node = NULL;
+    rc_t rc = VDatabaseOpenTableRead(db, &tbl, tableName);
+    DISP_RC2(rc, tableName, "while calling VDatabaseOpenTableRead");
+
+    if (rc == 0) {
+        size_t size = 8;
+        assert(self);
+        if (self->allocated == 0) {
+            assert(self->count == NULL && self->used == 0);
+            self->count = malloc(size * sizeof *self->count);
+            if (self->count == NULL) {
+                return
+                    RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+            }
+            self->allocated = size;
+        }
+        else if (self->used >= self->allocated) {
+            Counts* tmp = NULL;
+            size = self->allocated * 2;
+            tmp = realloc(self->count, size * sizeof *self->count);
+            if (tmp == NULL) {
+                return
+                    RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+            }
+            self->count = tmp;
+            self->allocated = size;
+        }
+    }
+    if (rc == 0) {
+        assert(self->used < self->allocated && self->count);
+    }
+    if (rc == 0) {
+        rc = VTableOpenMetadataRead(tbl, &meta);
+        DISP_RC2(rc, name, "while calling VTableOpenMetadataRead");
+    }
+    if (rc == 0) {
+        rc = KMetadataOpenNodeRead(meta, &node, name);
+        if (rc != 0) {
+            if (GetRCState(rc) == rcNotFound) {
+                DBGMSG(DBG_APP,DBG_COND_1, ("%s: not found\n", name));
+                rc = 0;
+            }
+            DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
+        }
+        else
+        {   assert(node); }
+    }
+
+    if (rc == 0 && node != NULL) {
+        Counts* c = NULL;
+        assert((self->used < self->allocated) && (self->count != NULL));
+        c = &self->count[self->used];
+        memset(c, 0, sizeof *c);
+        c->tableName = strdup(tableName);
+        if (c->tableName == NULL)
+        {   return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted); }
+        c->tableState = eMSFound;
+        c->metaState = eMSFound;
+        rc = CountRead(&c->BASE_COUNT, "BASE_COUNT", node);
+
+        {
+            rc_t rc2 = CountRead(&c->SPOT_COUNT, "SPOT_COUNT", node);
+            if (rc2 != 0 && rc == 0)
+            {   rc = rc2; }
+        }
+
+        if (rc == 0)
+        {   ++self->used; }
+    }
+
+    RELEASE(KMDataNode, node);
+    RELEASE(KMetadata, meta);
+    RELEASE(VTable, tbl);
+
+    return rc;
+}
+
+static
+rc_t TableCountsRead(TableCounts* self, const VDatabase* db)
+{
+    rc_t rc = 0;
+    KNamelist* names = NULL;
+
+    assert(self);
+
+    memset(self, 0, sizeof *self);
+
+    if (db == NULL)
+    {   return 0; }
+
+    rc = VDatabaseListTbl(db, &names);
+    DISP_RC(rc, "while calling VDatabaseListTbl");
+    if (rc == 0) {
+        uint32_t count = 0;
+        rc = KNamelistCount(names, &count);
+        DISP_RC(rc, "while calling VDatabaseListTbl::KNamelistCount");
+        if (rc == 0) {
+            uint32_t i = ~0;
+            for (i = 0; i < count && rc == 0; ++i) {
+                const char* table = NULL;
+                rc = KNamelistGet(names, i, &table);
+                if (rc != 0) {
+                   PLOGERR(klogInt, (klogInt, rc,
+                        "while calling VDatabaseListTbl::KNamelistGet($(idx))",
+                        "idx=%i", i));
+                }
+                else
+                {   rc = TableCountsRead1(self, db, table); }
+            }
+        }
+    }
+
+    RELEASE(KNamelist, names);
+
+    return rc;
+}
+
+static
+rc_t CountPrint(const Count* self, const char* indent, const char* tag)
+{
+    assert(self && indent && tag);
+    switch (self->state) {
+        case eMSNotFound:
+            OUTMSG(("  %s<%s state=\"not found\"/>\n", indent, tag));
+            break;
+        case eMSFound:
+            OUTMSG(("  %s<%s count=\"%lu\"/>\n", indent, tag, self->value));
+            break;
+        default:
+            assert(0);
+            OUTMSG(("  %s<%s state=\"UNEXPECTED\"/>\n", indent, tag));
+            break;
+    }
+    return 0;
+}
+
+static
+rc_t TableCountsPrint(const TableCounts* self, const char* indent)
+{
+    rc_t rc = 0;
+    const char tag[] = "Databases";
+
+    assert(self && indent);
+
+    if (self->allocated == 0)
+    {   return 0; }
+
+    OUTMSG(("%s<%s>\n", indent, tag));
+    {
+        size_t i = ~0;
+        const char tag[] = "Database";
+        OUTMSG(("  %s<%s>\n", indent, tag));
+        for (i = 0; i < self->used; ++i) {
+            const char tag[] = "Statistics";
+            const Counts* p = &self->count[i];
+            OUTMSG(("    %s<Table name=\"%s\">\n", indent, p->tableName));
+            switch (p->metaState) {
+            case eMSNotFound:
+                OUTMSG(("      %s<%s source=\"meta\" state=\"not found\"/>\n",
+                    indent, tag));
+                break;
+            case eMSFound: {
+                char buf[512];
+                OUTMSG(("      %s<%s source=\"meta\">\n", indent, tag));
+                rc = string_printf(buf, sizeof buf, NULL, "      %s", indent);
+                if (rc == 0) {
+                    CountPrint(&p->SPOT_COUNT, buf, "Rows");
+                    CountPrint(&p->BASE_COUNT, buf, "Elements");
+                }
+                OUTMSG(("      %s</%s>\n", indent, tag));
+                break;
+              }
+            default:
+                assert(0);
+                OUTMSG(("      %s<%s source=\"meta\" state=\"UNEXPECTED\"/>\n",
+                    indent, tag));
+                break;
+            }
+            OUTMSG(("    %s</Table>\n", indent));
+        }
+        OUTMSG(("  %s</%s>\n", indent, tag));
+    }
+    OUTMSG(("%s</%s>\n", indent, tag));
+
+    return rc;
+}
+
+static
+void TableCountsRelease(TableCounts* self)
+{
+    size_t i = ~0;
+    assert(self);
+    for (i = 0; i < self->used; ++i) {
+        assert(self->count);
+        free(self->count[i].tableName);
+        self->count[i].tableName = NULL;
+    }
+    free(self->count);
+    memset(self, 0, sizeof *self);
+}
+
+static
+rc_t parse_bam_header(const VDatabase* db,
+    const RG_callback cb, const void* data)
+{
+    rc_t rc = 0;
+    const char name[] = "BAM_HEADER";
+    const KMetadata* meta = NULL;
+    const KMDataNode* node = NULL;
+    char* buffer = NULL;
+
+    if (db == NULL) {
+        return rc;
+    }
+    assert(cb);
+
+    if (rc == 0) {
+        rc = VDatabaseOpenMetadataRead(db, &meta);
+        DISP_RC(rc, "while calling VDatabaseOpenMetadataRead");
+    }
+
+    if (rc == 0) {
+        rc = KMetadataOpenNodeRead(meta, &node, name);
+        if (rc != 0) {
+            if (GetRCState(rc) == rcNotFound) {
+                return 0;
+            }
+            DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
+        }
+    }
+
+    if (rc == 0) {
+        size_t num_read = 0;
+        size_t remaining = 0;
+        rc = KMDataNodeRead(node, 0, NULL, 0, &num_read, &remaining);
+        DISP_RC2(rc, name, "while calling KMDataNodeRead");
+        assert(num_read == 0);
+        if (rc == 0 && remaining > 0) {
+            buffer = malloc(remaining + 1);
+            if (buffer == NULL) {
+                rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted);
+            }
+            else {
+                size_t size = 0;
+                rc = KMDataNodeReadCString(node, buffer, remaining + 1, &size);
+                DISP_RC2(rc, name, "while calling KMDataNodeReadCString");
+                assert(size == remaining);
+            }
+        }
+    }
+
+    if (rc == 0 && buffer) {
+        const char* token = strtok(buffer, "\n");
+        while (token) {
+            const char RG[] = "@RG\t";
+            if (strncmp(token, RG, sizeof RG - 1) == 0) {
+                const char ID[] = "\tID:";
+                const char LB[] = "\tLB:";
+                const char SM[] = "\tSM:";
+                char* id_end = NULL;
+                char* lb_end = NULL;
+                char* sm_end = NULL;
+                BAM_HEADER_RG rg;
+                memset(&rg, 0, sizeof rg);
+                rg.ID = strstr(token, ID);
+                rg.LB = strstr(token, LB);
+                rg.SM = strstr(token, "\tSM:");
+                if (rg.ID) {
+                    rg.ID += sizeof ID - 1;
+                }
+                if (rg.ID) {
+                    id_end = strchr(rg.ID, '\t');
+                }
+                if (rg.LB) {
+                    rg.LB += sizeof LB - 1;
+                }
+                if (rg.LB) {
+                    lb_end = strchr(rg.LB, '\t');
+                }
+                if (rg.SM) {
+                    rg.SM += sizeof SM - 1;
+                }
+                if (rg.SM) {
+                    sm_end = strchr(rg.SM, '\t');
+                }
+                if (id_end) {
+                    *id_end = '\0';
+                }
+                if (lb_end) {
+                    *lb_end = '\0';
+                }
+                if (sm_end) {
+                    *sm_end = '\0';
+                }
+                if (rg.ID && rg.LB && rg.SM) {
+                    rc = cb(&rg, data);
+                }
+                if (rc) {
+                    break;
+                }
+            }
+            token = strtok(NULL, "\n");
+        }
+    }
+    free(buffer);
+    buffer = NULL;
+    RELEASE(KMDataNode, node);
+    RELEASE(KMetadata, meta);
+    return rc;
+}
+
 static
 void SraStatsMetaDestroy(SraStatsMeta* self)
 {
     if (self == NULL)
     {   return; }
+    BAM_HEADER_RG_free(&self->BAM_HEADER);
     free(self->spot_group);
+    self->spot_group = NULL;
 }
+
 static
-rc_t CC visitor(const KDirectory* dir,
+rc_t CC fileSizeVisitor(const KDirectory* dir,
     uint32_t type, const char* name, void* data)
 {
     rc_t rc = 0;
@@ -163,7 +1471,7 @@ rc_t CC visitor(const KDirectory* dir,
         }
         case kptDir: 
             DBGMSG(DBG_APP, DBG_COND_1, ("Dir '%s'\n", name));
-            rc = KDirectoryVisit(dir, false, visitor, sizes, name);
+            rc = KDirectoryVisit(dir, false, fileSizeVisitor, sizes, name);
             DISP_RC2(rc, name, "while calling KDirectoryVisit");
             break;
         default:
@@ -176,6 +1484,46 @@ rc_t CC visitor(const KDirectory* dir,
 }
 
 static
+rc_t get_arc_info(const SRAMgr* mgr, const char* path,
+    const SRATable* tbl, ArcInfo* arc_info)
+{
+    rc_t rc = 0;
+    memset(arc_info, 0, sizeof(*arc_info));
+
+    if( (rc = SRAMgrGetTableModDate(mgr, &arc_info->timestamp, "%s", path)) == 0 ) {
+        uint32_t i;
+        for(i = 0; i < sizeof(arc_info->i) / sizeof(arc_info->i[0]); i++) {
+            const KFile* kfile;
+            arc_info->i[i].tag = i == 0 ? "sra" : "lite.sra";
+            if( (rc = SRATableMakeSingleFileArchive(tbl, &kfile, i == 1, NULL)) == 0 ) {
+                MD5State md5;
+                uint64_t pos = 0;
+                uint8_t buffer[256 * 1024];
+                size_t num_read = 0, x;
+
+                MD5StateInit(&md5);
+                do {
+                    if( (rc = KFileRead(kfile, pos, buffer, sizeof(buffer), &num_read)) == 0 ) {
+                        MD5StateAppend(&md5, buffer, num_read);
+                        pos += num_read;
+                    }
+                } while(rc == 0 && num_read != 0);
+                if( rc == 0 && (rc = KFileSize(kfile, &arc_info->i[i].size)) == 0 ) {
+                    uint8_t digest[16];
+                    MD5StateFinish(&md5, digest);
+                    for(pos = 0, x = 0; rc == 0 && pos < sizeof(digest); pos++) {
+                        rc = string_printf(&arc_info->i[i].md5[x], sizeof(arc_info->i[i].md5) - x, &num_read, "%02x", digest[pos]);
+                        x += num_read;
+                    }
+                }
+                KFileRelease(kfile);
+            }
+        }
+    }
+    return rc;
+}
+
+static
 rc_t get_size(const SRATable* tbl, SraSizeStats* sizes)
 {
     rc_t rc = 0;
@@ -202,7 +1550,7 @@ rc_t get_size(const SRATable* tbl, SraSizeStats* sizes)
             if (par == NULL)
             {   break; }
             else {
-                DESTRUCT(KDatabase, kDb);
+                RELEASE(KDatabase, kDb);
                 kDb = par;
             }
         }
@@ -220,13 +1568,13 @@ rc_t get_size(const SRATable* tbl, SraSizeStats* sizes)
     memset(sizes, 0, sizeof *sizes);
 
     if (rc == 0) {
-        rc = KDirectoryVisit(dir, false, visitor, sizes, NULL);
+        rc = KDirectoryVisit(dir, false, fileSizeVisitor, sizes, NULL);
         DISP_RC(rc, "while calling KDirectoryVisit");
     }
 
-    DESTRUCT(KDirectory, dir);
-    DESTRUCT(KTable, kTbl);
-    DESTRUCT(KDatabase, kDb);
+    RELEASE(KDirectory, dir);
+    RELEASE(KTable, kTbl);
+    RELEASE(KDatabase, kDb);
 
     return rc;
 }
@@ -237,19 +1585,24 @@ rc_t readTxtAttr(const KMDataNode* self, const char* name, const char* attrName,
 {
     rc_t rc = 0;
     size_t num_read = 0;
+
     if (self == NULL) {
         rc = RC(rcExe, rcMetadata, rcReading, rcSelf, rcNull);
         return rc;
     }
+
     assert(self && name && attrName && buf && buf_size);
+
     rc = KMDataNodeReadAttr(self, attrName, buf, buf_size, &num_read);
     if (rc != 0) {
         PLOGERR(klogErr, (klogErr, rc, "Cannot read '$(name)@$(attr)'",
             "name=%s,attr=%s", name, attrName));
     }
     else { DBGMSG(DBG_APP, DBG_COND_1, ("%s@%s = %s\n", name, attrName, buf)); }
+
     return rc;
 }
+
 static
 rc_t get_load_info(const KMetadata* meta, SraMeta* info)
 {
@@ -259,6 +1612,7 @@ rc_t get_load_info(const KMetadata* meta, SraMeta* info)
     memset(info, 0, sizeof *info);
     info->metaVersion = 99;
     info->tblVersion = -1;
+
     if (rc == 0) {
         rc = KMetadataVersion(meta, &info->metaVersion);
         DISP_RC(rc, "While calling KMetadataVersion");
@@ -323,9 +1677,10 @@ rc_t get_load_info(const KMetadata* meta, SraMeta* info)
             }
         }
     }
+
     if (rc == 0) {
         const char name[] = "SOFTWARE/formatter";
-        DESTRUCT(KMDataNode, node);
+        RELEASE(KMDataNode, node);
         rc = KMetadataOpenNodeRead(meta, &node, name);
         if (rc != 0) {
             if (GetRCState(rc) == rcNotFound ) {
@@ -355,9 +1710,10 @@ rc_t get_load_info(const KMetadata* meta, SraMeta* info)
             }
         }
     }
+
     if (rc == 0) {
         const char name[] = "LOAD/timestamp";
-        DESTRUCT(KMDataNode, node);
+        RELEASE(KMDataNode, node);
         rc = KMetadataOpenNodeRead(meta, &node, name);
         if (rc != 0) {
             if (GetRCState(rc) == rcNotFound ) {
@@ -386,7 +1742,9 @@ rc_t get_load_info(const KMetadata* meta, SraMeta* info)
             DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
         }
     }
-    DESTRUCT(KMDataNode, node);
+
+    RELEASE(KMDataNode, node);
+
     return rc;
 }
 
@@ -395,9 +1753,12 @@ rc_t readStatsMetaNode(const KMDataNode* parent, const char* parentName,
     const char* name, uint64_t* result, bool quick, bool optional)
 {
     rc_t rc = 0;
+
     const KMDataNode* node = NULL;
+
     assert(parent && parentName && name && result);
-    rc = KMDataNodeOpenNodeRead (parent, &node, name);
+
+    rc = KMDataNodeOpenNodeRead(parent, &node, name);
     if (rc != 0)
     {
         if (GetRCState(rc) == rcNotFound && optional)
@@ -411,58 +1772,74 @@ rc_t readStatsMetaNode(const KMDataNode* parent, const char* parentName,
                 "parent=%s,child=%s", parentName, name));
         }
     }
-    else
-    {
+    else {
         rc = KMDataNodeReadAsU64(node, result);
+        if (GetRCObject(rc) == rcTransfer && GetRCState(rc) == rcIncomplete) {
+            *result = 0;
+            rc = 0;
+        }
         if ( rc != 0 && quick )
         {
             PLOGERR(klogInt, (klogInt, rc, "while reading $(parent)/$(child)",
                 "parent=%s,child=%s", parentName, name));
         }
     }
+
+    RELEASE(KMDataNode, node);
+
     return rc;
 }
+
 static
 rc_t readStatsMetaNodes(const KMDataNode* parent, const char* name,
                         SraStatsMeta* stats, bool quick)
 {
     rc_t rc = 0;
     const char* parentName = name;
+
     assert(parent && stats);
+
     if (parentName == NULL)
     {   parentName = "STATS/TABLE"; }
+
     if (rc == 0 && name) {
         stats->spot_group = strdup(name);
         if (stats->spot_group == NULL)
         {   rc = RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted); }
     }
+
     if (rc == 0) {
-        rc = readStatsMetaNode
-            (parent, parentName, "BASE_COUNT", &stats->BASE_COUNT, quick, false);
+        rc = readStatsMetaNode(parent,
+            parentName, "BASE_COUNT", &stats->BASE_COUNT, quick, false);
     }
     if (rc == 0) {
-        rc = readStatsMetaNode
-            (parent, parentName, "BIO_BASE_COUNT", &stats->BIO_BASE_COUNT, quick, false);
+        rc = readStatsMetaNode(parent,
+            parentName, "BIO_BASE_COUNT", &stats->BIO_BASE_COUNT, quick, false);
     }
     if (rc == 0) {
-        rc = readStatsMetaNode
-            (parent, parentName, "SPOT_COUNT", &stats->spot_count, quick, false);
+        rc = readStatsMetaNode(parent,
+            parentName, "SPOT_COUNT", &stats->spot_count, quick, false);
     }
     if (rc == 0) {
-        rc = readStatsMetaNode
-            (parent, parentName, "CMP_BASE_COUNT", &stats->CMP_BASE_COUNT, quick, true);
+        rc = readStatsMetaNode(parent,
+            parentName, "CMP_BASE_COUNT", &stats->CMP_BASE_COUNT, quick, true);
     }
+
     if (rc == 0)
     {   stats->found = true; }
     else { SraStatsMetaDestroy(stats); }
+
     return rc;
 }
+
 static
-rc_t get_stats_meta(const KMetadata* meta, MetaDataStats* stats, bool quick)
+rc_t get_stats_meta(const KMetadata* meta,
+    MetaDataStats* stats, bool quick)
 {
     rc_t rc = 0;
     assert(meta && stats);
     memset(stats, 0, sizeof *stats);
+
     if (rc == 0) {
         const char name[] = "STATS/TABLE";
         const KMDataNode* node = NULL;
@@ -476,8 +1853,9 @@ rc_t get_stats_meta(const KMetadata* meta, MetaDataStats* stats, bool quick)
         }
         if (rc == 0 && node)
         {   rc = readStatsMetaNodes(node, NULL, &stats->table, quick); }
-        DESTRUCT(KMDataNode, node);
+        RELEASE(KMDataNode, node);
     }
+
     if (rc == 0) {
         const char name[] = "STATS/SPOT_GROUP";
         const KMDataNode* parent = NULL;
@@ -489,6 +1867,7 @@ rc_t get_stats_meta(const KMetadata* meta, MetaDataStats* stats, bool quick)
             }
             DISP_RC2(rc, name, "while calling KMetadataOpenNodeRead");
         }
+
         if (rc == 0 && parent) {
             uint32_t count = 0, i = 0;
             KNamelist* names = NULL;
@@ -506,6 +1885,7 @@ rc_t get_stats_meta(const KMetadata* meta, MetaDataStats* stats, bool quick)
                     }
                 }
             }
+
             for (i = 0; i < count && rc == 0; ++i) {
                 const KMDataNode* node = NULL;
                 const char* child = NULL;
@@ -520,14 +1900,16 @@ rc_t get_stats_meta(const KMetadata* meta, MetaDataStats* stats, bool quick)
                     DISP_RC2(rc, child, "while calling KMDataNodeOpenNodeRead");
                 }
                 if (rc == 0) {
-                    rc = readStatsMetaNodes(node, child, &stats->spotGroup[i], quick);
+                    rc = readStatsMetaNodes
+                        (node, child, &stats->spotGroup[i], quick);
                 }
-                DESTRUCT(KMDataNode, node);
+                RELEASE(KMDataNode, node);
             }
-            DESTRUCT(KNamelist, names);
+            RELEASE(KNamelist, names);
         }
-        DESTRUCT(KMDataNode, parent);
+        RELEASE(KMDataNode, parent);
     }
+
     if (rc == 0) {
         uint32_t i = 0;
         bool found = stats->table.found;
@@ -535,208 +1917,432 @@ rc_t get_stats_meta(const KMetadata* meta, MetaDataStats* stats, bool quick)
         {   found = stats->spotGroup[i].found; }
         stats->found = found;
     }
+
     return rc;
 }
+
 static
-void srastatmeta_print(const MetaDataStats* meta,
-    const srastat_parms *pb)
+void srastatmeta_print(const MetaDataStats* meta, srastat_parms *pb)
 {
     uint32_t i = 0;
     assert(pb && meta);
-    for (i = 0; i < meta->spotGroupN; ++i) {
-        const SraStatsMeta *ss = &meta->spotGroup[i];
-        if (pb->xml) {
-            if (pb->hasSPOT_GROUP) {
-                OUTMSG(("  <Member member_name=\"%s\"", ss->spot_group));
+
+    if (meta->spotGroupN) {
+        for (i = 0; i < meta->spotGroupN; ++i) {
+            const SraStatsMeta* ss = &meta->spotGroup[i];
+            if (!pb->skip_members) {
+                const char* spot_group = "";
+                if (strcmp("default", ss->spot_group) != 0)
+                {   spot_group = ss->spot_group; }
+                if ((spot_group == NULL || spot_group[0] == '\0')
+                    && meta->spotGroupN > 1)
+                {
+                    /* skip an empty "extra" 'default' spot_group */
+                    if (ss->BASE_COUNT == 0     && ss->BIO_BASE_COUNT == 0 &&
+                        ss->CMP_BASE_COUNT == 0 && ss->spot_count == 0)
+                    {   continue; }
+                }
+                if (pb->xml) {
+                    if (pb->hasSPOT_GROUP) {
+                       OUTMSG(("  <Member member_name=\"%s\"", ss->spot_group));
+                       OUTMSG((" spot_count=\"%ld\" base_count=\"%ld\"",
+                            ss->spot_count, ss->BASE_COUNT));
+                       OUTMSG((" base_count_bio=\"%ld\"", ss->BIO_BASE_COUNT));
+                       if (ss->CMP_BASE_COUNT > 0) {
+                           OUTMSG((" cmp_base_count=\"%ld\"",
+                               ss->CMP_BASE_COUNT));
+                       }
+                       BAM_HEADER_RG_print_xml(&ss->BAM_HEADER);
+                       OUTMSG(("/>\n"));
+                    }
+                }
+                else {
+                    OUTMSG(("%s|%s|%ld:%ld:%ld|:|:|:\n",
+                        pb->table_path, spot_group, ss->spot_count,
+                        ss->BASE_COUNT, ss->BIO_BASE_COUNT));
+                }
             }
-            OUTMSG((" spot_count=\"%ld\" base_count=\"%ld\"",
-                ss->spot_count, ss->BASE_COUNT));
-            OUTMSG((" base_count_bio=\"%ld\"", ss->BIO_BASE_COUNT));
-            if (ss->CMP_BASE_COUNT > 0)
-            {   OUTMSG((" cmp_base_count=\"%ld\"", ss->CMP_BASE_COUNT)); }
-            if (pb->hasSPOT_GROUP)
-            {   OUTMSG(("/>\n")); }
+            pb->total.spot_count += ss->spot_count;
+            pb->total.BASE_COUNT += ss->BASE_COUNT;
+            pb->total.BIO_BASE_COUNT += ss->BIO_BASE_COUNT;
+            pb->total.total_cmp_len += ss->CMP_BASE_COUNT;
         }
-        else {
-            const char* spot_group = "";
-            if (strcmp("default", ss->spot_group) != 0)
-            {   spot_group = ss->spot_group; }
-            OUTMSG(("%s|%s|%ld:%ld:%ld|:|:|:\n",
-                pb->table_path, spot_group, ss->spot_count, ss->BASE_COUNT,
-                ss->BIO_BASE_COUNT));
+    }
+    else {
+        if (!pb->xml && !(pb->quick && pb->skip_members)) {
+                const char* spot_group = "";
+                OUTMSG(("%s|%s|%ld:%ld:%ld|:|:|:\n",
+                        pb->table_path, spot_group, meta->table.spot_count,
+                        meta->table.BASE_COUNT, meta->table.BIO_BASE_COUNT));
         }
+        pb->total.spot_count = meta->table.spot_count;
+        pb->total.BASE_COUNT = meta->table.BASE_COUNT;
+        pb->total.BIO_BASE_COUNT = meta->table.BIO_BASE_COUNT;
+        pb->total.total_cmp_len = meta->table.CMP_BASE_COUNT;
     }
 }
+
 static
 void CC srastat_print( BSTNode* n, void* data )
 {
-   const srastat_parms *pb = (const srastat_parms*) data;
-   const SraStats *ss = ( const SraStats* ) n;
-   assert(pb && ss);
-   if (pb->xml) {
-        if (pb->hasSPOT_GROUP) {
-            OUTMSG(("  <Member member_name=\"%s\"", ss->spot_group));
-        }
-        OUTMSG((" spot_count=\"%ld\" base_count=\"%ld\"", ss->spot_count, ss->total_len));
-        OUTMSG((" base_count_bio=\"%ld\"", ss->bio_len));
-        OUTMSG((" spot_count_mates=\"%ld\" base_count_bio_mates=\"%ld\"", ss->spot_count_mates, ss->bio_len_mates));
-        OUTMSG((" spot_count_bad=\"%ld\" base_count_bio_bad=\"%ld\"", ss->bad_spot_count, ss->bad_bio_len));
-        OUTMSG((" spot_count_filtered=\"%ld\" base_count_bio_filtered=\"%ld\"", ss->filtered_spot_count, ss->filtered_bio_len));
-        if (ss->total_cmp_len > 0)
-        {   OUTMSG((" cmp_base_count=\"%ld\"", ss->total_cmp_len)); }
-        if (pb->hasSPOT_GROUP) {
-            OUTMSG(("/>\n"));
+    srastat_parms *pb = (srastat_parms*) data;
+    const SraStats *ss = (const SraStats*) n;
+    assert(pb && ss);
+    if (!pb->skip_members) {
+        if (pb->xml) {
+            if (pb->hasSPOT_GROUP) {
+                OUTMSG(("  <Member member_name=\"%s\"", ss->spot_group));
+                OUTMSG((" spot_count=\"%ld\" base_count=\"%ld\"", ss->spot_count, ss->total_len));
+                OUTMSG((" base_count_bio=\"%ld\"", ss->bio_len));
+                OUTMSG((" spot_count_mates=\"%ld\" base_count_bio_mates=\"%ld\"", ss->spot_count_mates, ss->bio_len_mates));
+                OUTMSG((" spot_count_bad=\"%ld\" base_count_bio_bad=\"%ld\"", ss->bad_spot_count, ss->bad_bio_len));
+                OUTMSG((" spot_count_filtered=\"%ld\" base_count_bio_filtered=\"%ld\"",
+                    ss->filtered_spot_count, ss->filtered_bio_len));
+                if (ss->total_cmp_len > 0)
+                {   OUTMSG((" cmp_base_count=\"%ld\"", ss->total_cmp_len)); }
+                BAM_HEADER_RG_print_xml(&ss->BAM_HEADER);
+                OUTMSG(("/>\n"));
+            }
+        }
+        else {
+            OUTMSG(("%s|%s|%ld:%ld:%ld|%ld:%ld|%ld:%ld|%ld:%ld\n",
+                pb->table_path,ss->spot_group,ss->spot_count,ss->total_len,ss->bio_len,ss->spot_count_mates,ss->bio_len_mates,
+                ss->bad_spot_count,ss->bad_bio_len,ss->filtered_spot_count,ss->filtered_bio_len));
         }
     }
-    else {
-        OUTMSG(("%s|%s|%ld:%ld:%ld|%ld:%ld|%ld:%ld|%ld:%ld\n",
-            pb->table_path,ss->spot_group,ss->spot_count,ss->total_len,ss->bio_len,ss->spot_count_mates,ss->bio_len_mates,
-            ss->bad_spot_count,ss->bad_bio_len,ss->filtered_spot_count,ss->filtered_bio_len));
-    }
+    pb->total.spot_count += ss->spot_count;
+    pb->total.spot_count_mates += ss->spot_count_mates;
+    pb->total.BIO_BASE_COUNT += ss->bio_len;
+    pb->total.bio_len_mates += ss->bio_len_mates;
+    pb->total.BASE_COUNT += ss->total_len;
+    pb->total.bad_spot_count += ss->bad_spot_count;
+    pb->total.bad_bio_len += ss->bad_bio_len;
+    pb->total.filtered_spot_count += ss->filtered_spot_count;
+    pb->total.filtered_bio_len += ss->filtered_bio_len;
+    pb->total.total_cmp_len += ss->total_cmp_len;
 }
 
 static
-int CC srastats_cmp ( const void *item, const BSTNode *n )
+rc_t process_align_info(const char* indent, const Ctx* ctx)
 {
-    const char *sg = item;
-    const SraStats *ss = ( const SraStats* ) n;
+    rc_t rc = 0;
+    uint32_t count = 0;
+    int i = 0;
+    const VDBDependencies* dep = NULL;
 
-    return strcmp(sg,ss->spot_group);
+    assert(indent && ctx);
+
+    if (ctx->db == NULL) {
+        return rc;
+    }
+
+    rc = VDatabaseListDependencies(ctx->db, &dep, false);
+    DISP_RC2(rc, ctx->pb->table_path,
+        "while calling VDatabaseListDependencies");
+
+    rc = VDBDependenciesCount(dep, &count);
+    if (rc) {
+        DISP_RC(rc, "while calling VDBDependenciesCount");
+        return rc;
+    }
+
+
+    OUTMSG(("%s<AlignInfo>\n", indent));
+
+    for (i = 0; i < count && rc == 0; ++i) {
+        bool circular = false;
+        const char* name = NULL;
+        const char* path = NULL;
+        bool local = false;
+        const char* seqId = NULL;
+
+        rc = VDBDependenciesCircular(dep, &circular, i);
+        if (rc != 0) {
+            DISP_RC(rc, "while calling VDBDependenciesCircular");
+            break;
+        }
+        rc = VDBDependenciesName(dep, &name, i);
+        if (rc != 0) {
+            DISP_RC(rc, "while calling VDBDependenciesName");
+            break;
+        }
+        rc = VDBDependenciesPath(dep, &path, i);
+        if (rc != 0) {
+            DISP_RC(rc, "while calling VDBDependenciesPath");
+            break;
+        }
+        rc = VDBDependenciesLocal(dep, &local, i);
+        if (rc != 0) {
+            DISP_RC(rc, "while calling VDBDependenciesLocal");
+            break;
+        }
+        rc = VDBDependenciesSeqId(dep, &seqId, i);
+        if (rc != 0) {
+            DISP_RC(rc, "while calling VDBDependenciesSeqId");
+            break;
+        }
+
+        OUTMSG((
+            "%s  <Ref seqId=\"%s\" name=\"%s\" circular=\"%s\" local=\"%s\"",
+            indent, seqId, name, (circular ? "true" : "false"),
+            (local ? "local" : "remote")));
+        if (path && path[0]) {
+            OUTMSG((" path=\"%s\"", path));
+        }
+        OUTMSG(("/>\n"));
+    }
+
+    OUTMSG(("%s</AlignInfo>\n", indent));
+
+    RELEASE(VDBDependencies, dep);
+
+    return rc;
 }
 
 static
-void print_results(srastat_parms* pb, const BSTree* tr,
-    const SraSizeStats* sizes, const SraMeta* info,
-    const MetaDataStats* meta, const SraStatsTotal* total)
+rc_t print_results(const Ctx* ctx)
 {
-    assert(pb && tr && sizes && info && meta && total);
+    rc_t rc = 0;
+    bool mismatch = false;
+
+    assert(ctx && ctx->pb
+        && ctx->tr && ctx->sizes && ctx->info && ctx->meta && ctx->total);
 
-    if (pb->quick) {
-        if ( ! meta -> found )
+    if (ctx->pb->quick) {
+        if ( ! ctx->meta -> found )
             LOGMSG(klogWarn, "Statistics metadata not found");
         else
         {
-            pb->hasSPOT_GROUP = meta->spotGroupN > 1 ||
-                (meta->spotGroupN == 1
-                 && strcmp("default", meta->spotGroup[0].spot_group) != 0);
+            ctx->pb->hasSPOT_GROUP = ctx->meta->spotGroupN > 1 ||
+                (ctx->meta->spotGroupN == 1
+                 && strcmp("default", ctx->meta->spotGroup[0].spot_group) != 0);
         }
     }
-    if (meta->found)
-    {
+
+    if (ctx->meta->found && ! ctx->pb->quick) {
         bool mismatch = false;
-        SraStats* ss = (SraStats*)BSTreeFind(tr, "", srastats_cmp);
-        const SraStatsMeta* m = &meta->table;
-        if (total->BASE_COUNT != m->BASE_COUNT
-            || total->BIO_BASE_COUNT != m->BIO_BASE_COUNT
-            || total->spot_count != m->spot_count
-            || total->total_cmp_len != m->CMP_BASE_COUNT)
+        SraStats* ss = (SraStats*)BSTreeFind(ctx->tr, "", srastats_cmp);
+        const SraStatsMeta* m = &ctx->meta->table;
+        if (ctx->total->BASE_COUNT != m->BASE_COUNT
+            || ctx->total->BIO_BASE_COUNT != m->BIO_BASE_COUNT
+            || ctx->total->spot_count != m->spot_count
+            || ctx->total->total_cmp_len != m->CMP_BASE_COUNT)
         { mismatch = true; }
         if (ss != NULL) {
-            const SraStatsMeta* m = &meta->table;
-            if (ss->total_len != m->BASE_COUNT
-                || ss->bio_len != m->BIO_BASE_COUNT
-                || ss->spot_count != m->spot_count
-                || ss->total_cmp_len != m->CMP_BASE_COUNT)
-            { mismatch = true; }
-            else {
-                uint32_t i = 0;
-                for (i = 0; i < meta->spotGroupN && !mismatch; ++i) {
-                    const char* spot_group = "";
-                    m = &meta->spotGroup[i];
-                    assert(m);
-                    if (strcmp("default", m->spot_group) != 0)
-                    {   spot_group = m->spot_group; }
-                    ss = (SraStats*)BSTreeFind(tr, spot_group, srastats_cmp);
-                    if (ss == NULL) {
-                        mismatch = true;
-                        break;
-                    }
-                    if (ss->total_len != m->BASE_COUNT
-                        || ss->bio_len != m->BIO_BASE_COUNT
-                        || ss->spot_count != m->spot_count
-                        || ss->total_cmp_len != m->CMP_BASE_COUNT)
-                    {
-                        mismatch = true;
-                        break;
-                    }
+            const SraStatsMeta* m = &ctx->meta->table;
+            uint32_t i = 0;
+            for (i = 0; i < ctx->meta->spotGroupN && !mismatch; ++i) {
+                const char* spot_group = "";
+                m = &ctx->meta->spotGroup[i];
+                assert(m);
+                if (strcmp("default", m->spot_group) != 0)
+                {   spot_group = m->spot_group; }
+                ss = (SraStats*)BSTreeFind(ctx->tr, spot_group, srastats_cmp);
+                if (ss == NULL) {
+                    mismatch = true;
+                    break;
+                }
+                if (ss->total_len != m->BASE_COUNT
+                    || ss->bio_len != m->BIO_BASE_COUNT
+                    || ss->spot_count != m->spot_count
+                    || ss->total_cmp_len != m->CMP_BASE_COUNT)
+                {
+                    mismatch = true;
+                    break;
                 }
             }
         }
-        if (mismatch) {
-            LOGMSG(klogWarn,
-                "Mismatch between calculated and recorded statistics");
-        }
     }
 
-    if (pb->xml) {
-        OUTMSG(("<Run accession=\"%s\"", pb->table_path));
-        if (!pb->quick || ! meta->found) {
+    if (ctx->pb->xml) {
+        OUTMSG(("<Run accession=\"%s\"", ctx->pb->table_path));
+        if (!ctx->pb->quick || ! ctx->meta->found) {
             OUTMSG((" read_length=\"%s\"",
-                pb->variableReadLength ? "variable" : "fixed"));
+                ctx->pb->variableReadLength ? "variable" : "fixed"));
+        }
+        if (ctx->pb->quick) {
+            OUTMSG((" spot_count=\"%ld\" base_count=\"%ld\"",
+                ctx->meta->table.spot_count, ctx->meta->table.BASE_COUNT));
+            OUTMSG((" base_count_bio=\"%ld\"",
+                ctx->meta->table.BIO_BASE_COUNT));
+            if (ctx->meta->table.CMP_BASE_COUNT > 0) {
+                OUTMSG((" cmp_base_count=\"%ld\"",
+                    ctx->meta->table.CMP_BASE_COUNT));
+            }
+        }
+        else {
+            OUTMSG((" spot_count=\"%ld\" base_count=\"%ld\"",
+                ctx->total->spot_count, ctx->total->BASE_COUNT));
+            OUTMSG((" base_count_bio=\"%ld\"", ctx->total->BIO_BASE_COUNT));
+            OUTMSG((" spot_count_mates=\"%ld\" base_count_bio_mates=\"%ld\"",
+                ctx->total->spot_count_mates, ctx->total->bio_len_mates));
+            OUTMSG((" spot_count_bad=\"%ld\" base_count_bio_bad=\"%ld\"",
+                ctx->total->bad_spot_count, ctx->total->bad_bio_len));
+            OUTMSG((
+                " spot_count_filtered=\"%ld\" base_count_bio_filtered=\"%ld\"",
+                ctx->total->filtered_spot_count, ctx->total->filtered_bio_len));
+            if (ctx->total->total_cmp_len > 0) {
+                OUTMSG((" cmp_base_count=\"%ld\"", ctx->total->total_cmp_len));
+            }
+        }
+        OUTMSG((">\n"));
+    }
+    else if (ctx->pb->skip_members) {
+        if (ctx->pb->quick) {
+            OUTMSG(("%s||%ld:%ld:%ld|:|:|:\n",
+                ctx->pb->table_path, ctx->meta->table.spot_count,
+                ctx->meta->table.BASE_COUNT, ctx->meta->table.BIO_BASE_COUNT));
+        }
+        else {
+            OUTMSG(("%s||%ld:%ld:%ld|%ld:%ld|%ld:%ld|%ld:%ld\n",
+                ctx->pb->table_path,
+                ctx->total->spot_count, ctx->total->BASE_COUNT,
+                ctx->total->BIO_BASE_COUNT,
+                ctx->total->spot_count_mates, ctx->total->bio_len_mates,
+                ctx->total->bad_spot_count, ctx->total->bad_bio_len,
+                ctx->total->filtered_spot_count, ctx->total->filtered_bio_len));
         }
-        if (pb->hasSPOT_GROUP)
-        {   OUTMSG((">\n")); }
     }
 
-    if (pb->quick && meta->found)
-    {   srastatmeta_print(meta, pb); }
-    else { BSTreeForEach(tr, false, srastat_print, pb); }
+    if (ctx->pb->quick && ctx->meta->found) {
+        memset(&ctx->pb->total, 0, sizeof ctx->pb->total);
+        rc = parse_bam_header(ctx->db, meta_RG_callback, ctx->meta);
+        srastatmeta_print(ctx->meta, ctx->pb);
+        if (ctx->pb->total.spot_count != ctx->meta->table.spot_count ||
+            ctx->pb->total.BIO_BASE_COUNT != ctx->meta->table.BIO_BASE_COUNT ||
+            ctx->pb->total.BASE_COUNT != ctx->meta->table.BASE_COUNT ||
+            ctx->pb->total.total_cmp_len != ctx->meta->table.CMP_BASE_COUNT)
+        {
+            rc = RC(rcExe, rcData, rcValidating, rcData, rcUnequal);
+        }
+        assert(rc == 0);
+    }
+    else {
+        memset(&ctx->pb->total, 0, sizeof ctx->pb->total);
+        rc = parse_bam_header(ctx->db, tree_RG_callback, ctx->tr);
+        BSTreeForEach(ctx->tr, false, srastat_print, ctx->pb);
+        if (ctx->meta->found) {
+            const SraStatsMeta* m = &ctx->meta->table;
+            if (ctx->pb->total.BASE_COUNT != m->BASE_COUNT
+                || ctx->pb->total.BIO_BASE_COUNT != m->BIO_BASE_COUNT
+                || ctx->pb->total.spot_count != m->spot_count
+                || ctx->pb->total.total_cmp_len != m->CMP_BASE_COUNT)
+            {
+                mismatch = true;
+            }
+        }
+        if (ctx->pb->total.spot_count != ctx->total->spot_count ||
+            ctx->pb->total.spot_count_mates != ctx->total->spot_count_mates ||
+            ctx->pb->total.BIO_BASE_COUNT != ctx->total->BIO_BASE_COUNT ||
+            ctx->pb->total.bio_len_mates != ctx->total->bio_len_mates ||
+            ctx->pb->total.BASE_COUNT != ctx->total->BASE_COUNT ||
+            ctx->pb->total.bad_spot_count != ctx->total->bad_spot_count ||
+            ctx->pb->total.bad_bio_len != ctx->total->bad_bio_len ||
+            ctx->pb->total.filtered_spot_count
+                != ctx->total->filtered_spot_count ||
+            ctx->pb->total.filtered_bio_len != ctx->total->filtered_bio_len ||
+            ctx->pb->total.total_cmp_len != ctx->total->total_cmp_len)
+        {
+            rc = RC(rcExe, rcData, rcValidating, rcData, rcUnequal);
+        }
+        assert(rc == 0);
+    }
 
-    if (pb->xml) {
-        if (!pb->hasSPOT_GROUP)
-        {   OUTMSG((">")); }
-        if (sizes) {
-            if (!pb->hasSPOT_GROUP)
-            {   OUTMSG(("\n")); }
-            OUTMSG(("  <Size value=\"%lu\" units=\"bytes\"/>\n", sizes->size));
+    if (ctx->pb->xml) {
+        if (ctx->sizes) {
+            OUTMSG(("  <Size value=\"%lu\" units=\"bytes\"/>\n",
+                ctx->sizes->size));
         }
-        if (pb->printMeta && info->tblVersion >= 0) {
+        if (ctx->pb->printMeta && ctx->info->tblVersion >= 0) {
             OUTMSG(("  <Table vers=\"%d\">\n    <Meta vers=\"%d\">\n",
-                info->tblVersion, info->metaVersion));
-            if (info->formatter.name[0] || info->formatter.vers[0] ||
-                info->loader.date[0] || info->loader.name[0] ||
-                info->loader.vers[0])
+                ctx->info->tblVersion, ctx->info->metaVersion));
+            if (ctx->info->formatter.name[0] || ctx->info->formatter.vers[0] ||
+                ctx->info->loader.date[0] || ctx->info->loader.name[0] ||
+                ctx->info->loader.vers[0])
             {
                 OUTMSG(("      <SOFTWARE>\n"));
-                if (info->formatter.name[0] || info->formatter.vers[0]) {
+                if (ctx->info->formatter.name[0] ||
+                    ctx->info->formatter.vers[0])
+                {
                     OUTMSG(("        <formatter"));
-                    if (info->formatter.name[0])
-                    {   OUTMSG((" name=\"%s\"", info->formatter.name)); }
-                    if (info->formatter.vers[0])
-                    {   OUTMSG((" vers=\"%s\"", info->formatter.vers)); }
+                    if (ctx->info->formatter.name[0])
+                    {   OUTMSG((" name=\"%s\"", ctx->info->formatter.name)); }
+                    if (ctx->info->formatter.vers[0])
+                    {   OUTMSG((" vers=\"%s\"", ctx->info->formatter.vers)); }
                     OUTMSG(("/>\n"));
                 }
-                if (info->loader.date[0] || info->loader.name[0] ||
-                    info->loader.vers[0])
+                if (ctx->info->loader.date[0] || ctx->info->loader.name[0] ||
+                    ctx->info->loader.vers[0])
                 {
                     OUTMSG(("        <loader"));
-                    if (info->loader.date[0])
-                    {   OUTMSG((" date=\"%s\"", info->loader.date)); }
-                    if (info->loader.name[0])
-                    {   OUTMSG((" name=\"%s\"", info->loader.name)); }
-                    if (info->loader.vers[0])
-                    {   OUTMSG((" vers=\"%s\"", info->loader.vers)); }
+                    if (ctx->info->loader.date[0])
+                    {   OUTMSG((" date=\"%s\"", ctx->info->loader.date)); }
+                    if (ctx->info->loader.name[0])
+                    {   OUTMSG((" name=\"%s\"", ctx->info->loader.name)); }
+                    if (ctx->info->loader.vers[0])
+                    {   OUTMSG((" vers=\"%s\"", ctx->info->loader.vers)); }
                     OUTMSG(("/>\n"));
                 }
                 OUTMSG(("      </SOFTWARE>\n"));
             }
-            if (info->loadTimestamp) {
+            if (ctx->info->loadTimestamp) {
                 char       buf[80];
-                struct tm* ts = localtime(&info->loadTimestamp);
+                struct tm* ts = localtime(&ctx->info->loadTimestamp);
                 strftime(buf, sizeof(buf), "%a %Y-%m-%d %H:%M:%S %Z", ts);
                 OUTMSG(("      <LOAD timestamp=\"%lX\">%s</LOAD>\n",
-                    info->loadTimestamp, buf));
+                    ctx->info->loadTimestamp, buf));
             }
             OUTMSG(("    </Meta>\n  </Table>\n"));
         }
+        if (rc == 0 && !ctx->pb->quick) {
+            BasesPrint(&ctx->total->bases_count, ctx->total->BASE_COUNT, "  ");
+        }
+        if (rc == 0 && !ctx->pb->skip_alignment) {
+            rc = process_align_info("  ", ctx);
+        }
+        if (rc == 0 && ctx->pb->statistics) {
+            rc = SraStatsTotalPrintStatistics(ctx->total, "  ", ctx->pb->test);
+        }
+        if (rc == 0 && ctx->pb->print_arcinfo) {
+            const ArcInfo* a = ctx->arc_info;
+            uint32_t i;
+            char b[1024];
+            time_t ts = a->timestamp;
+            struct tm* tm = localtime(&ts);
+
+            if( tm == NULL ) {
+                rc = RC(rcExe, rcData, rcReading, rcParam, rcInvalid);
+            }
+            else {
+                size_t k = strftime(b, sizeof(b), "%Y-%m-%dT%H:%M:%S", tm);
+                OUTMSG(("  <Archive timestamp=\"%.*s\"", k, b));
+                for(i = 0; i < sizeof(a->i) / sizeof(a->i[0]); i++) {
+                    OUTMSG((" size.%s=\"%lu\" md5.%s=\"%s\"",
+                        a->i[i].tag, a->i[i].size, a->i[i].tag, a->i[i].md5));
+                }
+                OUTMSG((" />\n"));
+            }
+        }
+        if (rc == 0)
+        {   rc = QualityStatsPrint(&ctx->quality, "  "); }
+        if (rc == 0)
+        {   rc = TableCountsPrint(&ctx->tables, "  "); }
         OUTMSG(("</Run>\n"));
     }
+    if (mismatch && ctx->pb->start == 0 && ctx->pb->stop == 0) {
+        /* check mismatch just when no --start, --stop specified */
+        LOGMSG(klogWarn,
+            "Mismatch between calculated and recorded statistics");
+    }
+    return rc;
 }
 
 static
 void CC bst_whack_free ( BSTNode *n, void *ignore )
 {
-    free ( n );
+    SraStats* ss = (SraStats*)n;
+    BAM_HEADER_RG_free(&ss->BAM_HEADER);
+    free(ss);
 }
 
 static 
@@ -766,6 +2372,17 @@ rc_t sra_stat(srastat_parms* pb, const SRATable* tbl,
     const SRAColumn* cREAD_TYPE = NULL;
     const SRAColumn* cSPOT_GROUP = NULL;
 
+    int g_nreads = 0;
+    spotid_t n_spots = 0;
+    spotid_t start = pb->start, stop = pb->stop;
+
+    /* filled with dREAD_LEN[i] for (spotid == start);
+       used to check fixedReadLength */
+    uint64_t g_totalREAD_LEN[MAX_NREADS];
+    uint64_t g_nonZeroLenReads[MAX_NREADS];
+    memset(g_totalREAD_LEN, 0, sizeof g_totalREAD_LEN);
+    memset(g_nonZeroLenReads, 0, sizeof g_nonZeroLenReads);
+
     assert(pb && tbl && tr && total);
 
     if (rc == 0) {
@@ -818,18 +2435,23 @@ rc_t sra_stat(srastat_parms* pb, const SRATable* tbl,
                 rc = SRATableMaxSpotId(tbl, &spotid);
                 DISP_RC(rc, "failed to read max spot id");
                 if (rc == 0) {
+                    BasesInit(&total->bases_count, tbl);
+                }
+                if (rc == 0) {
+                    bool bad_read_filter = false;
+                    bool fixedNReads = true;
                     bool fixedReadLength = true;
-                    int g_nreads = 0;
+
                     uint32_t g_dREAD_LEN[MAX_NREADS];
 
                     memset(g_dREAD_LEN, 0, sizeof g_dREAD_LEN);
 
-                    if (pb->start == 0)
-                    {   pb->start = 1; }
-                    if (pb->stop == 0 || pb -> stop > spotid)
-                    {   pb->stop = spotid; }
+                    if (start == 0)
+                    {   start = 1; }
+                    if (stop == 0 || pb -> stop > spotid)
+                    {   stop = spotid; }
 
-                    for (spotid = pb->start; spotid <= pb->stop && rc == 0;
+                    for (spotid = start; spotid <= stop && rc == 0;
                         ++spotid)
                     {
                         SraStats* ss;
@@ -863,16 +2485,16 @@ rc_t sra_stat(srastat_parms* pb, const SRATable* tbl,
                             int i, bio_len, bio_count, bad_cnt, filt_cnt;
                             memcpy(dREAD_LEN, ((const char*)base) + (boff>>3), row_bits>>3);
                             nreads = (row_bits >> 3) / sizeof(*dREAD_LEN);
-                            if (spotid == pb->start) {
+                            if (spotid == start) {
                                 g_nreads = nreads;
+                                if (pb->statistics) {
+                                    rc = SraStatsTotalMakeStatistics
+                                        (total, g_nreads);
+                                }
                             }
-#if 0
                             else if (g_nreads != nreads) {
-                                rc = RC(rcExe, rcTable, rcReading, rcData, rcInconsistent);
-                                PLOGERR(klogInt, (klogInt, rc,
-                                    "spot=$(spot), ReadNumber=$(n), previous=$(prev)", "spot=%lu,n=%d,prev=%d", spotid, nreads, g_nreads));
+                                fixedNReads = false;
                             }
-#endif
 
                             if (rc == 0) {
                                 rc = SRAColumnRead(cREAD_TYPE, spotid, &base, &boff, &row_bits);
@@ -896,7 +2518,6 @@ rc_t sra_stat(srastat_parms* pb, const SRATable* tbl,
                                     DISP_RC_Read(rc, SPOT_GROUP, spotid, "while calling SRAColumnRead");
                                     if (rc == 0) {
                                         if (row_bits > 0) {
-                                            pb -> hasSPOT_GROUP = 1;
                                             if (boff & 7)
                                             {   rc = RC(rcExe, rcColumn, rcReading, rcOffset, rcInvalid); }
                                             if (row_bits & 7)
@@ -905,8 +2526,12 @@ rc_t sra_stat(srastat_parms* pb, const SRATable* tbl,
                                             {   rc = RC(rcExe, rcColumn, rcReading, rcBuffer, rcInsufficient); }
                                             DISP_RC_Read(rc, SPOT_GROUP, spotid, "after calling SRAColumnRead");
                                             if (rc == 0) {
+                                                int n = row_bits >> 3;
                                                 memcpy(dSPOT_GROUP,((const char*)base) + (boff>>3),row_bits>>3);
-                                                dSPOT_GROUP[row_bits>>3]='\0';
+                                                dSPOT_GROUP[n]='\0';
+                                                if (n > 1 ||
+                                                    (n == 1 && dSPOT_GROUP[0]))
+                                                {   pb -> hasSPOT_GROUP = 1; }
                                             }
                                         }
                                         else {  dSPOT_GROUP[0]='\0'; }
@@ -919,15 +2544,42 @@ rc_t sra_stat(srastat_parms* pb, const SRATable* tbl,
                                     rc = SRAColumnRead(cRD_FILTER, spotid, &base, &boff, &row_bits);
                                     DISP_RC_Read(rc, RD_FILTER, spotid, "while calling SRAColumnRead");
                                     if (rc == 0) {
+                                        int size = row_bits >> 3;
                                         if (boff & 7)
                                         {   rc = RC(rcExe, rcColumn, rcReading, rcOffset, rcInvalid); }
                                         if (row_bits & 7)
                                         {   rc = RC(rcExe, rcColumn, rcReading, rcSize, rcInvalid); }
-                                        if ((row_bits >> 3) > sizeof(dRD_FILTER))
+                                        if (size > sizeof dRD_FILTER)
                                         {   rc = RC(rcExe, rcColumn, rcReading, rcBuffer, rcInsufficient); }
                                         DISP_RC_Read(rc, RD_FILTER, spotid, "after calling SRAColumnRead");
-                                        if (rc == 0)
-                                        {   memcpy(dRD_FILTER,((const char*)base) + (boff>>3),row_bits>>3); }
+                                        if (rc == 0) {
+                                            memcpy(dRD_FILTER,((const char*)base) + (boff>>3), size);
+                                            if (size < nreads) {
+                                                /* RD_FILTER is expected to have nreads elements */
+                                                if (size == 1) {
+                                                    /* fill all RD_FILTER elements with RD_FILTER[0] */
+                                                    int i = 0;
+                                                    for (i = 1; i < nreads; ++i) {
+                                                        memcpy(dRD_FILTER + i,
+                                                            ((const char*)base) + (boff>>3), 1);
+                                                    }
+                                                    if (!bad_read_filter) {
+                                                        bad_read_filter = true;
+                                                        PLOGMSG(klogWarn, (klogWarn, "RD_FILTER column"
+                                                            " size is 1 but it is expected to be $(n)",
+                                                            "n=%d", nreads));
+                                                    }
+                                                }
+                                                else { /* something really bad with RD_FILTER column:
+                                                          let's pretend it does not exist */
+                                                    cRD_FILTER = NULL;
+                                                    bad_read_filter = true;
+                                                    PLOGMSG(klogWarn, (klogWarn, "RD_FILTER column size"
+                                                        " is $(real) but it is expected to be $(exp)",
+                                                        "real=%d,exp=%d", size, nreads));
+                                                }
+                                            }
+                                        }
                                     } else { break; }
                                 }
 
@@ -980,11 +2632,21 @@ rc_t sra_stat(srastat_parms* pb, const SRATable* tbl,
                                 ss->total_cmp_len += cmp_len;
                                 total->total_cmp_len += cmp_len;
 
+                                BasesAdd(&total->bases_count, spotid);
+
+                                if (pb->statistics) {
+                                    SraStatsTotalAdd(total, dREAD_LEN, nreads);
+                                }
                                 for (bio_len = bio_count = i = bad_cnt = filt_cnt = 0; (i < nreads) && (rc == 0); i++) {
-                                    if (spotid == pb->start) {
+                                    if (dREAD_LEN[i] > 0) {
+                                        g_totalREAD_LEN[i] += dREAD_LEN[i];
+                                        ++g_nonZeroLenReads[i];
+                                    }
+                                    if (spotid == start) {
                                         g_dREAD_LEN[i] = dREAD_LEN[i];
                                     }
-                                    else if (g_dREAD_LEN[i] != dREAD_LEN[i]) { fixedReadLength = false; }
+                                    else if (g_dREAD_LEN[i] != dREAD_LEN[i])
+                                    {   fixedReadLength = false; }
 
                                     if (dREAD_LEN[i] > 0) {
                                         bool biological = false;
@@ -1001,13 +2663,17 @@ rc_t sra_stat(srastat_parms* pb, const SRATable* tbl,
                                                     break;
                                                 case SRA_READ_FILTER_REJECT:
                                                 case SRA_READ_FILTER_CRITERIA:
-                                                    if (biological)
-                                                    {   ss->bad_bio_len += dREAD_LEN[i]; }
+                                                    if (biological) {
+                                                        ss->bad_bio_len += dREAD_LEN[i];
+                                                        total->bad_bio_len += dREAD_LEN[i];
+                                                    }
                                                     bad_cnt++;
                                                     break;
                                                 case SRA_READ_FILTER_REDACTED:
-                                                    if (biological)
-                                                    {   ss->filtered_bio_len += dREAD_LEN[i]; }
+                                                    if (biological) {
+                                                        ss->filtered_bio_len += dREAD_LEN[i];
+                                                        total->filtered_bio_len += dREAD_LEN[i];
+                                                    }
                                                     filt_cnt++;
                                                     break;
                                                 default:
@@ -1023,36 +2689,105 @@ rc_t sra_stat(srastat_parms* pb, const SRATable* tbl,
                                 ss->bio_len += bio_len;
                                 total->BIO_BASE_COUNT += bio_len;
                                 if (bio_count > 1) {
-                                    ss->spot_count_mates++;
+                                    ++ss->spot_count_mates;
+                                    ++total->spot_count_mates;
                                     ss->bio_len_mates += bio_len;
+                                    total->bio_len_mates += bio_len;
+                                }
+                                if (bad_cnt) {
+                                    ss->bad_spot_count++;
+                                    total->bad_spot_count++;
+                                }
+                                if (filt_cnt) {
+                                    ss->filtered_spot_count++;
+                                    total->filtered_spot_count++;
                                 }
-                                if (bad_cnt)
-                                {   ss->bad_spot_count++; }
-                                if (filt_cnt)
-                                {   ss->filtered_spot_count++; }
                             }
                         }
-                    }
-    /******* Output Results here ************/
+                    } /* for (spotid = start; spotid <= stop && rc == 0; ++spotid) */
 
                     if (rc == 0) {
+                        BasesFinalize(&total->bases_count);
                         pb->variableReadLength = !fixedReadLength;
+
+                        /* --- g_totalREAD_LEN[i] is sum(READ_LEN[i]) for all spots --- */
+                        if (fixedNReads) {
+                            int i = 0;
+                            if (stop >= start) {
+                                n_spots = stop - start + 1;
+                            }
+                            if (n_spots > 0) {
+                                for (i = 0; i < g_nreads && rc == 0; ++i) {
+                                    if (fixedReadLength) {
+                                        assert(g_totalREAD_LEN[i] / n_spots
+                                            == g_dREAD_LEN[i]);
+                                    }
+                                }
+                            }
+                        }
                     }
                 }
-                SRAColumnRelease(cSPOT_GROUP);
+                RELEASE(SRAColumn, cSPOT_GROUP);
             }
         }
     }
 
-    DESTRUCT(SRAColumn, cPRIMARY_ALIGNMENT_ID);
-    DESTRUCT(SRAColumn, cRD_FILTER);
-    DESTRUCT(SRAColumn, cREAD_TYPE);
-    DESTRUCT(SRAColumn, cREAD_LEN);
+    RELEASE(SRAColumn, cPRIMARY_ALIGNMENT_ID);
+    RELEASE(SRAColumn, cRD_FILTER);
+    RELEASE(SRAColumn, cREAD_TYPE);
+    RELEASE(SRAColumn, cREAD_LEN);
+
+    if (pb->test) {
+        int i = 0;
+        spotid_t spotid = 0;
+        double average[MAX_NREADS];
+        double diff_sq[MAX_NREADS];
+        SraStatsTotalStatistics2Init(total,
+            g_nreads, g_totalREAD_LEN, g_nonZeroLenReads);
+        memset(diff_sq, 0, sizeof diff_sq);
+        for (i = 0; i < g_nreads; ++i) {
+            average[i] = (double)g_totalREAD_LEN[i] / n_spots;
+        }
+        if (rc == 0) {
+            const char* name = READ_LEN;
+            rc = SRATableOpenColumnRead(tbl, &cREAD_LEN, name, vdb_uint32_t);
+            DISP_RC2(rc, name, "while calling SRATableOpenColumnRead");
+        }
+        for (spotid = start; spotid <= stop && rc == 0; ++spotid) {
+            uint32_t dREAD_LEN[MAX_NREADS];
+            const void* base;
+            bitsz_t boff, row_bits;
+            if (rc == 0) {
+                rc = SRAColumnRead(cREAD_LEN, spotid, &base, &boff, &row_bits);
+                DISP_RC_Read(rc, READ_LEN, spotid,
+                    "while calling SRAColumnRead");
+            }
+            if (rc == 0) {
+                memcpy(dREAD_LEN, ((const char*)base) + (boff>>3), row_bits>>3);
+            }
+            for (i = 0; i < g_nreads; ++i) {
+                diff_sq[i] +=
+                    (dREAD_LEN[i] - average[i]) * (dREAD_LEN[i] - average[i]);
+            }
+            SraStatsTotalAdd2(total, dREAD_LEN);
+        }
+        RELEASE(SRAColumn, cREAD_LEN);
+    }
 
     return rc;
 }
 
 static
+void CtxRelease(Ctx* ctx)
+{
+    assert(ctx);
+
+    QualityStatsRelease(&ctx->quality);
+    TableCountsRelease(&ctx->tables);
+
+    memset(ctx, 0, sizeof *ctx);
+}
+static
 rc_t run(srastat_parms* pb)
 {
     rc_t rc = 0;
@@ -1067,6 +2802,7 @@ rc_t run(srastat_parms* pb)
     }
     else {
         SraSizeStats sizes;
+        ArcInfo arc_info;
         SraMeta info;
         const SRATable* tbl = NULL;
 
@@ -1080,11 +2816,14 @@ rc_t run(srastat_parms* pb)
             SraStatsTotal total;
             const KTable* ktbl = NULL;
             const KMetadata* meta = NULL;
-
-            bool quick = pb -> quick;
+            const VTable* vtbl = NULL;
+            const VDatabase* db = NULL;
 
             BSTree tr;
+            Ctx ctx;
+
             BSTreeInit(&tr);
+            memset(&ctx, 0, sizeof ctx);
 
             memset(&total, 0, sizeof total);
 
@@ -1095,12 +2834,22 @@ rc_t run(srastat_parms* pb)
                 DISP_RC(rc, "While calling KTableOpenMetadataRead");
             }
             if (rc == 0) {
-                rc = get_stats_meta(meta, &stats, quick);
+                rc = SRATableGetVTableRead(tbl, &vtbl);
+                DISP_RC2(rc, pb->table_path,
+                    "while calling SRATableGetVTableRead");
+            }
+            if (rc == 0) {
+                rc = VTableOpenParentRead(vtbl, &db);
+                DISP_RC2(rc, pb->table_path,
+                    "while calling VTableOpenParentRead");
+            }
+            if (rc == 0) {
+                rc = get_stats_meta(meta, &stats, pb->quick);
                 if (rc == 0) {
-                    if (quick && !stats.found) {
+                    if (pb->quick && !stats.found) {
                         LOGMSG(klogWarn, "Statistics metadata not found: "
                             "performing full table scan");
-                        quick = false;
+                        pb->quick = false;
                     }
                 }
                 rc = 0;
@@ -1109,26 +2858,55 @@ rc_t run(srastat_parms* pb)
             {   rc = get_size(tbl, &sizes); }
             if (rc == 0 && pb->printMeta)
             {   rc = get_load_info(meta, &info); }
-            if (rc == 0 && !quick)
+            if (rc == 0 && !pb->quick)
             {   rc = sra_stat(pb, tbl, &tr, &total); }
-            if (rc == 0)
-            {   print_results(pb, &tr, &sizes, &info, &stats, &total); }
+            if (rc == 0 && pb->print_arcinfo ) {
+                rc = get_arc_info(mgr, pb->table_path, tbl, &arc_info);
+            }
+            if (rc == 0) {
+                rc = QualityStatsRead(&ctx.quality, meta);
+                if (rc == 0)
+                {   QualityStatsSort(&ctx.quality); }
+            }
+            if (rc == 0) {
+                rc = TableCountsRead(&ctx.tables, db);
+                if (rc == 0)
+                {   TableCountsSort(&ctx.tables); }
+            }
+            if (rc == 0) {
+                ctx.db = db;
+                ctx.info = &info;
+                ctx.meta = &stats;
+                ctx.pb = pb;
+                ctx.sizes = &sizes;
+                ctx.total = &total;
+                ctx.arc_info = &arc_info;
+                ctx.tr = &tr;
+                rc = print_results(&ctx);
+            }
             BSTreeWhack(&tr, bst_whack_free, NULL);
-            DESTRUCT(KMetadata, meta);
-            DESTRUCT(KTable, ktbl);
-        }
-        {
-            rc_t rc2 = SRATableRelease(tbl);
-            if (rc == 0)
-            {   rc = rc2; }
+            SraStatsTotalFree(&total);
+            RELEASE(VDatabase, db);
+            RELEASE(VTable, vtbl);
+            RELEASE(KTable, ktbl);
+            {
+                int i; 
+                for (i = 0; i < stats.spotGroupN; ++i) {
+                    SraStatsMetaDestroy(&stats.spotGroup[i]);
+                }
+
+                SraStatsMetaDestroy(&stats.table);
+
+                free(stats.spotGroup);
+                stats.spotGroup = NULL;
+            }
+            CtxRelease(&ctx);
+            RELEASE(KMetadata, meta);
         }
+        RELEASE(SRATable, tbl);
     }
 
-    {
-        rc_t rc2 = SRAMgrRelease(mgr);
-        if (rc == 0)
-        {   rc = rc2; }
-    }
+    RELEASE(SRAMgr, mgr);
 
     return rc;
 }
@@ -1147,40 +2925,57 @@ ver_t CC KAppVersion ( void )
 
 /* Usage
  */
+#define OPTION_ALIGN "alignment"
 #define OPTION_SPT_D "spot-desc"
+#define OPTION_MEMBR "member-stats"
 #define OPTION_META  "meta"
 #define OPTION_QUICK "quick"
 #define OPTION_START "start"
+#define OPTION_STATS "statistics"
 #define OPTION_STOP  "stop"
+#define OPTION_TEST  "test"
 #define OPTION_XML   "xml"
+#define OPTION_ARCINFO "archive-info"
 
+#define ALIAS_ALIGN "a"
 #define ALIAS_SPT_D "d"
+#define ALIAS_MEMBR NULL
 #define ALIAS_META  "m"
 #define ALIAS_QUICK "q"
 #define ALIAS_START "b"
+#define ALIAS_STATS "s"
 #define ALIAS_STOP  "e"
+#define ALIAS_TEST  "t"
 #define ALIAS_XML   "x"
+#define ALIAS_ARCINFO NULL
 
-
+static const char * align_usage[] = { "print alignment info, default is on", NULL };
 static const char * spt_d_usage[] = { "print table spot descriptor", NULL };
+static const char * membr_usage[] = { "print member stats, default is on", NULL };
 static const char * meta_usage[] = { "print load metadata", NULL };
-static const char * start_usage[] = { "starting spot id ( default 1 )", NULL };
-static const char * stop_usage[] = { "ending spot id ( default max )", NULL };
-static const char * quick_usage[] ={ "quick mode: get statistics from metadata",
-                                        "not to scan the table", NULL };
-static const char * xml_usage[] = { "output as XML (default is text)", NULL };
+static const char * start_usage[] = { "starting spot id, default is 1", NULL };
+static const char * stop_usage[] = { "ending spot id, default is max", NULL };
+static const char * stats_usage[] = { "calculate READ_LEN average and standard deviation", NULL };
+static const char * quick_usage[] = { "quick mode: get statistics from metadata;", "do not scan the table", NULL };
+static const char * test_usage[] = { "test READ_LEN average and standard deviation calculation", NULL };
+static const char * xml_usage[] = { "output as XML, default is text", NULL };
+static const char * arcinfo_usage[] = { "output archive info, default is off", NULL };
 
 OptDef Options[] =
 {
-      { OPTION_SPT_D, ALIAS_SPT_D, NULL, spt_d_usage, 1, false, false }
+      { OPTION_ALIGN, ALIAS_ALIGN, NULL, align_usage, 1, true , false }
+    , { OPTION_SPT_D, ALIAS_SPT_D, NULL, spt_d_usage, 1, false, false }
+    , { OPTION_MEMBR, ALIAS_MEMBR, NULL, membr_usage, 1, true , false }
+    , { OPTION_ARCINFO, ALIAS_ARCINFO, NULL, arcinfo_usage, 0, false, false }
     , { OPTION_META,  ALIAS_META,  NULL, meta_usage,  1, false, false }
     , { OPTION_QUICK, ALIAS_QUICK, NULL, quick_usage, 1, false, false }
     , { OPTION_START, ALIAS_START, NULL, start_usage, 1, true,  false }
+    , { OPTION_STATS, ALIAS_STATS, NULL, stats_usage, 1, false, false }
     , { OPTION_STOP,  ALIAS_STOP,  NULL, stop_usage,  1, true,  false }
-    , { OPTION_XML,   ALIAS_XML,   NULL, xml_usage,   0, false, false }
+    , { OPTION_TEST , ALIAS_TEST , NULL, test_usage,  1, false, false }
+    , { OPTION_XML,   ALIAS_XML,   NULL, xml_usage,   1, false, false }
 };
 
-
 rc_t CC UsageSummary (const char * progname)
 {
     return KOutMsg (
@@ -1216,6 +3011,11 @@ rc_t CC Usage (const Args * args)
     HelpOptionLine (ALIAS_STOP, OPTION_STOP, "row-id", stop_usage);
     HelpOptionLine (ALIAS_META, OPTION_META, NULL, meta_usage);
     HelpOptionLine (ALIAS_QUICK, OPTION_QUICK, NULL, quick_usage);
+    HelpOptionLine (ALIAS_MEMBR, OPTION_MEMBR, "on | off", membr_usage);
+    HelpOptionLine (ALIAS_ARCINFO, OPTION_ARCINFO, NULL, arcinfo_usage);
+    HelpOptionLine (ALIAS_STATS, OPTION_STATS, NULL, stats_usage);
+    HelpOptionLine (ALIAS_ALIGN, OPTION_ALIGN, "on | off", align_usage);
+    KOutMsg ("\n");
     HelpOptionsStandard ();
     HelpVersion (fullpath, KAppVersion());
     return rc;
@@ -1302,16 +3102,73 @@ rc_t CC KMain ( int argc, char *argv [] )
             if (pcount)
                 pb.printMeta = true;
 
+            rc = ArgsOptionCount (args, OPTION_MEMBR, &pcount);
+            if (rc)
+                break;
+
+            if (pcount) {
+                const char* v = NULL;
+                rc = ArgsOptionValue (args, OPTION_MEMBR, 0, &v);
+                if (rc)
+                    break;
+                if (!strcmp(v, "off")) {
+                    pb.skip_members = true;
+                }
+            }
+
+            rc = ArgsOptionCount (args, OPTION_ARCINFO, &pcount);
+            if (rc)
+                break;
+
+            pb.print_arcinfo = pcount > 0;
+
+            rc = ArgsOptionCount (args, OPTION_ALIGN, &pcount);
+            if (rc)
+                break;
+
+            if (pcount) {
+                const char* v = NULL;
+                rc = ArgsOptionValue (args, OPTION_ALIGN, 0, &v);
+                if (rc)
+                    break;
+                if (!strcmp(v, "off")) {
+                    pb.skip_alignment = true;
+                }
+            }
+
+            rc = ArgsOptionCount (args, OPTION_STATS, &pcount);
+            if (rc)
+                break;
+
+            if (pcount)
+                pb.statistics = true;
+
+            rc = ArgsOptionCount (args, OPTION_TEST, &pcount);
+            if (rc)
+                break;
+
+            if (pcount)
+                pb.test = pb.statistics = true;
+
             rc = ArgsParamCount (args, &pcount);
             if (rc)
                 break;
 
-            if (pcount == 0)
-                return MiniUsage (args);
+            if (pcount == 0) {
+                MiniUsage (args);
+                exit(1);
+            }
 
             rc = ArgsParamValue (args, 0, &pb.table_path);
             if (rc)
                 break;
+
+            if (pb.statistics && (pb.quick || ! pb.xml)) {
+                KOutMsg("\n--" OPTION_STATS
+                    " option can be used just in XML NON-QUICK mode\n");
+                MiniUsage (args);
+                exit(1);
+            }
         } while (0);
     }
 
diff --git a/tools/sra-stat/sra-stat.vers b/tools/sra-stat/sra-stat.vers
index 8dbb0f2..f90b1af 100644
--- a/tools/sra-stat/sra-stat.vers
+++ b/tools/sra-stat/sra-stat.vers
@@ -1 +1 @@
-2.1.10
+2.3.2
diff --git a/tools/sra-stat/sra-stat.vers.h b/tools/sra-stat/sra-stat.vers.h
deleted file mode 100644
index 83e9dcd..0000000
--- a/tools/sra-stat/sra-stat.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define SRA_STAT_VERS 0x0201000A
diff --git a/tools/srapath/Makefile b/tools/srapath/Makefile
new file mode 100644
index 0000000..2e346aa
--- /dev/null
+++ b/tools/srapath/Makefile
@@ -0,0 +1,96 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/srapath
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+	srapath
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+	@ $(MAKE_CMD) $(TARGDIR)/std
+
+$(ALL_TOOLS): vers-includes
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# srapath
+#  vdb table copy tool
+#
+SRAPATH_SRC = \
+	srapath
+
+SRAPATH_OBJ = \
+	$(addsuffix .$(OBJX),$(SRAPATH_SRC))
+
+SRAPATH_LIB += \
+	-lkapp \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
+	-lkfg \
+	-lkfs \
+	-lkproc \
+	-lklib
+
+$(BINDIR)/srapath: $(SRAPATH_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(SRAPATH_LIB)
diff --git a/tools/srapath/srapath.c b/tools/srapath/srapath.c
new file mode 100644
index 0000000..0bc7b30
--- /dev/null
+++ b/tools/srapath/srapath.c
@@ -0,0 +1,283 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "srapath.vers.h"
+
+#include <vfs/resolver.h>
+#include <vfs/path.h>
+#include <vfs/manager.h>
+#include <kfs/directory.h>
+#include <kfs/defs.h>
+#include <kfg/config.h>
+#include <sra/impl.h>
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/text.h>
+#include <klib/log.h>
+#include <klib/out.h>
+#include <klib/status.h> /* STSMSG */
+#include <klib/rc.h>
+#include <sysalloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+#include <limits.h> /* PATH_MAX */
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+/* Version  EXTERN
+ *  return 4-part version code: 0xMMmmrrrr, where
+ *      MM = major release
+ *      mm = minor release
+ *    rrrr = bug-fix release
+ */
+ver_t CC KAppVersion ( void )
+{
+    return SRAPATH_VERS;
+}
+
+const char UsageDefaultName[] = "srapath";
+
+rc_t CC UsageSummary (const char * progname)
+{
+    return OUTMSG(("\n"
+        "Usage:\n"
+        "  %s [options] <accession> ...\n\n"
+        "Summary:\n"
+        "  Tool to produce a list of full paths to files\n"
+        "  (SRA and WGS runs, refseqs: reference sequences)\n"
+        "  from list of NCBI accessions.\n"
+        "\n", progname));
+}
+
+rc_t CC Usage(const Args *args) {
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    rc_t rc;
+
+    if (args == NULL) {
+        rc = RC (rcExe, rcArgv, rcAccessing, rcSelf, rcNull);
+    }
+    else {
+        rc = ArgsProgram(args, &fullpath, &progname);
+    }
+
+    if (rc != 0) {
+        progname = fullpath = UsageDefaultName;
+    }
+
+    UsageSummary(progname);
+
+    OUTMSG((
+        "  Output paths are ordered according to accession list.\n"
+        "\n"
+        "  The accession search path will be determined according to the\n"
+        "  configuration. It will attempt to find files in local and site\n"
+        "  repositories, and will also check remote repositories for run\n"
+        "  location.\n"));
+    OUTMSG((
+        "  This tool produces a path that is 'likely' to be a run, in that\n"
+        "  an entry exists in the file system at the location predicted.\n"
+        "  It is possible that this path will fail to produce success upon\n"
+        "  opening a run if the path does not point to a valid object.\n\n"));
+
+    OUTMSG(("Options:\n"));
+
+    HelpOptionsStandard();
+
+    HelpVersion(fullpath, KAppVersion());
+
+    return rc;
+}
+
+/* KMain
+ */
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args * args;
+    rc_t rc;
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 0);
+    if (rc)
+        LOGERR (klogInt, rc, "failed to parse arguments");
+    else do
+    {
+        uint32_t acount;
+        rc = ArgsParamCount (args, &acount);
+        if (rc)
+        {
+            LOGERR (klogInt, rc, "failed to count parameters");
+            break;
+        }
+
+        if (acount == 0)
+        {
+            rc = MiniUsage (args);
+            break;
+        }
+        else
+        {
+            VFSManager* mgr;
+            rc = VFSManagerMake(&mgr);
+            if (rc)
+                LOGERR ( klogErr, rc, "failed to create VFSManager object" );
+            else
+            {
+                VResolver * resolver;
+
+                rc = VFSManagerGetResolver (mgr, &resolver);
+                if (rc == 0)
+                {
+                    uint32_t ix;
+                    for ( ix = 0; ix < acount; ++ ix )
+                    {
+                        const char * pc;
+                        rc = ArgsParamValue (args, ix, &pc );
+                        if (rc)
+                            LOGERR (klogInt, rc,
+                                    "failed to retrieve parameter value");
+                        else
+                        {
+                            const VPath * upath;
+
+                            rc = VPathMakeSysPath ((VPath**)&upath, pc);
+                            if (rc == 0)
+                            {
+                                const VPath * rpath;
+
+                                rc = VResolverLocal (resolver, upath, &rpath);
+                                if (rc == 0) {
+                                    STSMSG(1, ("'%s': found locally", pc));
+                                }
+                                else if (GetRCState(rc) == rcNotFound) {
+                                    STSMSG(1, ("'%s': not found locally", pc));
+                                    rc = VResolverRemote(resolver,
+                                        upath, &rpath, NULL);
+                                    if (rc == 0) {
+                                        STSMSG(1, ("'%s': found remotely", pc));
+                                    }
+                                    else if (GetRCState(rc) == rcNotFound) {
+                                        STSMSG(1,
+                                            ("'%s': not found remotely", pc));
+                                    }
+                                    else {
+                                        STSMSG(1, ("'%s': "
+                                            "error resolving remotely: %R",
+                                            pc, rc));
+                                    }
+                                }
+                                else {
+                                    STSMSG(1, (
+                                        "'%s': error resolving locally: %R",
+                                        pc, rc));
+                                }
+
+                                if (rc == 0)
+                                {
+                                    const String * s;
+
+                                    rc = VPathMakeString (rpath, &s);
+                                    if (rc == 0)
+                                    {
+                                        OUTMSG (("%S\n", s));
+                                        free ((void*)s);
+                                    }
+                                }
+                                else
+                                {
+                                    KDirectory * cwd;
+                                    rc_t orc = VFSManagerGetCWD (mgr, &cwd);
+                                    if (orc == 0)
+                                    {
+                                        KPathType kpt
+                                            = KDirectoryPathType(cwd, "%s", pc);
+                                        switch (kpt &= ~kptAlias)
+                                        {
+                                        case kptNotFound:
+                                            STSMSG(1, ("'%s': not found while "
+                                                "searching the file system",
+                                                pc));
+                                            break;
+                                        case kptBadPath:
+                                            STSMSG(1, ("'%s': bad path while "
+                                                "searching the file system",
+                                                pc));
+                                            break;
+                                        default:
+                                            STSMSG(1, ("'%s': "
+                                                "found in the file system",
+                                                pc));
+                                            rc = 0;
+                                            break;
+                                        }
+                                    }
+                                    if (orc == 0 && rc == 0) {
+                                    if (rc != 0) {
+                                        PLOGMSG(klogErr, (klogErr,
+                                            "'$(name)': not found",
+                                            "name=%s", pc));
+                                    }
+                                    else {
+                                        char resolved[PATH_MAX] = "";
+                                        rc = KDirectoryResolvePath(cwd, true,
+                                            resolved, sizeof resolved, pc);
+                                        if (rc == 0) {
+                                            STSMSG(1, ("'%s': found in "
+                                                "the current directory at '%s'",
+                                                pc, resolved));
+                                            OUTMSG (("%s\n", resolved));
+                                        }
+                                        else {
+                                            STSMSG(1, ("'%s': cannot resolve "
+                                                "in the current directory",
+                                                pc));
+                                            OUTMSG (("./%s\n", pc));
+                                        }
+                                    }
+                                    }
+                                    KDirectoryRelease(cwd);
+                                }
+                                VPathRelease (rpath);
+                                VPathRelease (upath);
+                            }
+                        }
+                    }
+                    VResolverRelease (resolver);
+                }
+                VFSManagerRelease(mgr);
+            }
+        }
+        ArgsWhack (args);
+
+    } while (0);
+
+    return rc;
+}
diff --git a/tools/srapath/srapath.vers b/tools/srapath/srapath.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/srapath/srapath.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/util/Makefile b/tools/util/Makefile
index d285adc..c970fde 100644
--- a/tools/util/Makefile
+++ b/tools/util/Makefile
@@ -36,7 +36,9 @@ EXT_TOOLS = \
 	rcexplain \
 	kdbmeta \
 	vdb-lock \
-	vdb-unlock
+	vdb-unlock \
+	test-sra \
+	vdb-passwd
 
 ALL_TOOLS = \
 	$(INT_TOOLS) \
@@ -45,25 +47,38 @@ ALL_TOOLS = \
 #-------------------------------------------------------------------------------
 # outer targets
 #
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
-all std: makedirs vers-includes
-	@ $(MAKE_CMD) $(TARGDIR)/std
+all std: vers-includes
+	@ $(MAKE_CMD) $(TARGDIR)/$@
 
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
 	@ $(MAKE_CMD) $(BINDIR)/$@
 
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+        $(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
 
 #-------------------------------------------------------------------------------
 # std
 #
 $(TARGDIR)/std: \
-	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+	$(addprefix $(BINDIR)/,$(EXT_TOOLS))
 
 .PHONY: $(TARGDIR)/std
 
 #-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
 # clean
 #
 clean: stdclean
@@ -90,6 +105,12 @@ RCEXPLAIN_OBJ = \
 
 RCEXPLAIN_LIB = \
 	-skapp \
+	-svfs \
+	-skurl \
+	-skrypto \
+	-skfg \
+	-skfs \
+	-sksproc \
 	-sklib
 
 $(BINDIR)/rcexplain: $(RCEXPLAIN_OBJ)
@@ -106,15 +127,15 @@ KDBMETA_OBJ = \
 	$(addsuffix .$(OBJX),$(KDBMETA_SRC))
 
 KDBMETA_LIB = \
-	-ssrapath \
 	-skapp \
-	-skdb \
+	-lwkdb \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
 	-lkfg \
-	-skfs \
-	-sklib \
-	-ldl \
-	-lz \
-	-lbz2
+	-lkfs \
+	-lkproc \
+	-lklib
 
 $(BINDIR)/kdbmeta: $(KDBMETA_OBJ)
 	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(KDBMETA_LIB)
@@ -131,17 +152,17 @@ VDB_LOCK_OBJ = \
 	$(addsuffix .$(OBJX),$(VDB_LOCK_SRC))
 
 VDB_LOCK_LIB = \
-	-ssrapath \
 	-skapp \
 	-lwvdb \
 	-lwkdb \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
 	-lkfg \
 	-lkfs \
-	-lklib \
 	-lkproc \
-	-ldl \
-	-lz \
-	-lbz2
+	-lklib \
+	-lm
 
 $(BINDIR)/vdb-lock: $(VDB_LOCK_OBJ)
 	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_LOCK_LIB)
@@ -158,38 +179,70 @@ VDB_UNLOCK_OBJ = \
 	$(addsuffix .$(OBJX),$(VDB_UNLOCK_SRC))
 
 VDB_UNLOCK_LIB = \
-	-ssrapath \
 	-skapp \
 	-lwvdb \
 	-lwkdb \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
 	-lkfg \
 	-lkfs \
-	-lklib \
 	-lkproc \
-	-ldl \
-	-lz \
-	-lbz2
+	-lklib \
+	-lm
 
 $(BINDIR)/vdb-unlock: $(VDB_UNLOCK_OBJ)
 	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_UNLOCK_LIB)
 
-
 #-------------------------------------------------------------------------------
-# testld - test dynamic load of libraries
+# test-sra: print config, resolve sra, check dependencies
 #
-TESTLD_SRC = \
-	testld
 
-TESTLD_OBJ = \
-	$(addsuffix .$(OBJX),$(TESTLD_SRC))
+T_SRC = \
+	test-sra
+
+T_OBJ = \
+	$(addsuffix .$(OBJX),$(T_SRC))
+
+T_LIB = \
+	-lkapp \
+	-dalign-reader \
+	$(READONLY_SCHEMA_LIBS) \
+	-lsradb \
+	-lvdb \
+	-lkdb \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
+	-lkfg \
+	-lkfs \
+	-dksrch \
+	-lkproc \
+	-lklib \
+	-lm
 
-TESTLD_LIB = \
+$(BINDIR)/test-sra: $(T_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(T_LIB)
+
+#----------------------------------------------------------------
+# vdb-passwd
+#
+VDB_PASSWD_SRC = \
+	vdb-passwd \
+	syspass
+
+VDB_PASSWD_OBJ = \
+	$(addsuffix .$(OBJX),$(VDB_PASSWD_SRC))
+
+VDB_PASSWD_LIB = \
 	-skapp \
-	-skfs \
-	-sklib \
-	-ldl \
-	-lz \
-	-lbz2
+	-lvfs \
+	-lkurl \
+	-lkrypto \
+	-lkfg \
+	-lkfs \
+	-sksproc \
+	-lklib
 
-$(BINDIR)/testld: $(TESTLD_OBJ)
-	$(LD) --exe -o $@ $^ $(TESTLD_LIB)
+$(BINDIR)/vdb-passwd: $(VDB_PASSWD_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_PASSWD_LIB)
diff --git a/tools/util/kdbmeta.c b/tools/util/kdbmeta.c
index a1d4bf3..27fd8ca 100644
--- a/tools/util/kdbmeta.c
+++ b/tools/util/kdbmeta.c
@@ -32,6 +32,15 @@
  * for the "big loop"
  */
 
+
+/* The original intention of this tool was to support updating nodes.
+   This was later removed with the thought that this functionality would
+   be better implemented by another tool.
+
+   Going to temporarily add it in...
+*/
+#define ALLOW_UPDATE 1
+
 #include "kdbmeta.vers.h"
 
 #include <sra/srapath.h>
@@ -61,25 +70,24 @@
 #include <assert.h>
 #include <ctype.h>
 
+/* use cpp define CONST */
+#undef CONST
+#if ALLOW_UPDATE
+#define CONST
+#else
+#define CONST const
+#endif
 
-enum
-{
-    kptMetadata = kptColumn + 1,
-    kptPrereleaseTbl
-};
-
-
-typedef struct KDBMetaConst KDBMetaConst;
-struct KDBMetaConst
+typedef struct KDBMetaParms KDBMetaParms;
+struct KDBMetaParms
 {
-    const KDBManager *mgr;
-    const KMetadata *md;
+    CONST KDBManager *mgr;
+    CONST KMetadata *md;
     const char *targ;
     const Vector *q;
     rc_t rc;
 };
 
-
 /* select reporting
  */
 static bool xml_ish = true;
@@ -87,6 +95,8 @@ static int indent_lvl;
 static int tabsz = 2;
 static const char *spaces = "                                ";
 static bool as_unsigned = false;
+static const char *table_arg = NULL;
+static bool read_only_arg = true;
 
 static
 void indent ( void )
@@ -107,13 +117,25 @@ void indent ( void )
 static
 void node_open ( const char *path, size_t plen )
 {
+    if ( plen && path[plen - 1] == '/' ) {
+    /* do not use trailing slash */
+        --plen;
+    }
     if ( xml_ish )
     {
+        int size = plen;
         /* find leaf name of node */
         const char *slash = string_rchr ( path, plen, '/' );
+        if ( slash ) {
+            /* make sure not to print trailing slash */
+            size = plen - (slash - path) - 1;
+            if ( size < 0 ) {
+                size = 0;
+            }
+        }
 
         indent ();
-        OUTMSG (( "<%s", ( slash != NULL ) ? slash + 1 : path ));
+        OUTMSG (( "<%.*s", size, ( slash != NULL ) ? slash + 1 : path ));
     }
 }
 
@@ -121,16 +143,26 @@ static
 void node_close ( const char *path, size_t plen,
     size_t vsize, uint32_t num_children, bool close_indent )
 {
+    if ( plen && path[plen - 1] == '/' ) {
+        --plen;
+    }
     if ( xml_ish )
     {
         if ( vsize == 0 && num_children == 0 )
             OUTMSG (( "/>\n" ));
         else
         {
+            int size = plen;
             const char *slash = string_rchr ( path, plen, '/' );
+            if ( slash ) {
+                size = plen - (slash - path) - 1;
+                if ( size < 0 ) {
+                    size = 0;
+                }
+            }
             if ( close_indent )
                 indent ();
-            OUTMSG (( "</%s>\n", ( slash != NULL ) ? slash + 1 : path ));
+            OUTMSG (( "</%.*s>\n", size, ( slash != NULL ) ? slash + 1 : path ));
         }
     }
 }
@@ -328,6 +360,9 @@ rc_t md_select_expr ( const KMDataNode *node, char *path, size_t psize, int plen
 
             /* close it off */
             node_close ( path, plen, 0, 0, false );
+
+            /* Exit here if an attribute was requested in query */
+            return 0;
         }
         else
         {
@@ -476,69 +511,183 @@ rc_t md_select_expr ( const KMDataNode *node, char *path, size_t psize, int plen
     return 0;
 }
 
+#if ALLOW_UPDATE
+static
+rc_t md_update_expr ( KMDataNode *node, const char *path, const char *attr, const char *expr )
+{
+    rc_t rc;
+
+    /* according to documentation, "expr" is allowed to be text
+       or text with escaped hex sequences. examine for escaped hex */
+    size_t len = string_size ( expr );
+    char *buff = malloc ( len + 1 );
+    if ( buff == NULL )
+        rc = RC ( rcExe, rcMetadata, rcUpdating, rcMemory, rcExhausted );
+    else
+    {
+        size_t i, j;
+        for ( i = j = 0; i < len; ++ i, ++ j )
+        {
+            if ( ( buff [ j ] = expr [ i ] ) == '\\' )
+            {
+                /* we know "expr" is NUL-terminated, so this is safe */
+                if ( tolower ( expr [ i + 1 ] ) == 'x' &&
+                     isxdigit ( expr [ i + 2 ] ) &&
+                     isxdigit ( expr [ i + 3 ] ) )
+                {
+                    int msn = toupper ( expr [ i + 2 ] ) - '0';
+                    int lsn = toupper ( expr [ i + 3 ] ) - '0';
+                    if ( msn >= 10 )
+                        msn += '0' - 'A' + 10;
+                    if ( lsn >= 10 )
+                        lsn += '0' - 'A' + 10;
+                    buff [ j ] = ( char ) ( ( msn << 4 ) | lsn );
+                    i += 3;
+                }
+            }
+        }
+
+        if ( attr != NULL )
+        {
+            /* set attribute value */
+            buff [ j ] = 0;
+            rc = KMDataNodeWriteAttr ( node, attr, buff );
+        }
+        else
+        {
+            /* now set the value of the node */
+            rc = KMDataNodeWrite ( node, buff, j );
+        }
+        free ( buff );
+    }
+
+    return rc;
+}
+#endif
+
 static
 bool CC md_select ( void *item, void *data )
 {
     bool fail = true;
-    KDBMetaConst *pb = data;
-
-    const KMDataNode *node;
-    pb -> rc = KMetadataOpenNodeRead ( pb -> md, & node, NULL );
+    KDBMetaParms *pb = data;
+
+    CONST KMDataNode *node;
+#if ALLOW_UPDATE
+    bool read_only = true;
+    if ( ! read_only_arg ) {
+        pb -> rc = KMetadataOpenNodeUpdate ( pb -> md, & node, NULL );
+        if ( pb -> rc == 0 )
+            read_only = false;
+    }
+#endif
+    if ( read_only )
+        pb -> rc = KMetadataOpenNodeRead ( pb -> md, ( const KMDataNode** ) & node, NULL );
     if ( pb -> rc != 0 )
         PLOGERR ( klogErr,  (klogErr, pb -> rc, "failed to open root node for '$(path)'", "path=%s", pb -> targ ));
     else
     {
-        const char *expr = ( const void* ) item;
-        const char *attr = strchr ( expr, '@' );
+        bool wildcard;
+        char *expr, *attr, path [ 4096 ];
+        size_t len = string_copy_measure ( path, sizeof path, item );
 
-        size_t len;
-        char path [ 4096 ];
+        /* detect assignment */
+        expr = string_rchr ( path, len, '=' );
+        if ( expr != NULL )
+        {
+            len = expr - path;
+            * expr ++ = 0;
+        }
+        attr = string_rchr ( path, len, '@' );
+        if ( attr != NULL )
+        {
+            len = attr - path;
+            * attr ++ = 0;
+        }
 
-        pb -> rc = attr == NULL ?
-            string_printf ( path, sizeof path, & len, "%s", expr ):
-            string_printf ( path, sizeof path, & len, "%.*s", ( uint32_t ) ( attr ++ - expr ), expr );
-        if ( pb -> rc != 0 )
-            PLOGERR ( klogErr,  (klogErr, pb -> rc, "failed to evaluate query '$(expr)'", "expr=%s", expr ));
-        else
+        if ( expr != NULL )
         {
-            bool wildcard = false;
-            if ( len >= 1 && path [ len - 1 ] == '*' )
+#if ALLOW_UPDATE
+            if ( read_only )
             {
-                if ( len == 1 )
-                {
-                    path [ len = 0 ] = 0;
-                    wildcard = true;
-                }
-                else if ( len >= 2 && path [ len - 2 ] == '/' )
-                {
-                    path [ len -= 2 ] = 0;
-                    wildcard = true;
-                }
+                PLOGMSG ( klogWarn, ( klogWarn, "node update expressions are not supported - "
+                                      "'$(path)' is read-only - "
+                                      "'$(expr)' treated as select."
+                                      , "path=%s,expr=%s", pb -> targ, item ) );
+                expr = NULL;
             }
+#else
+            PLOGMSG ( klogWarn, ( klogWarn, "node update expressions are not supported - "
+                                  "'$(expr)' treated as select.", "expr=%s", item ) );
+            expr = NULL;
+#endif
+        }
 
-            if ( len == 0 )
-                pb -> rc = md_select_expr ( node, path, sizeof path, len, attr, wildcard );
-            else
+        wildcard = false;
+        if ( len >= 1 && path [ len - 1 ] == '*' )
+        {
+            if ( len == 1 )
             {
-                const KMDataNode *root = node;
-                pb -> rc = KMDataNodeOpenNodeRead ( root, & node, path );
-                KMDataNodeRelease ( root );
+                path [ len = 0 ] = 0;
+                wildcard = true;
+            }
+            else if ( len >= 2 && path [ len - 2 ] == '/' )
+            {
+                path [ len -= 2 ] = 0;
+                wildcard = true;
+            }
+        }
 
-                if ( pb -> rc != 0 )
-                {
-                    PLOGERR ( klogErr,  (klogErr, pb -> rc, "failed to open node '$(node) for '$(path)'",
-                                         "node=%s,path=%s", path, pb -> targ ));
-                }
-                else
-                {
-                    pb -> rc = md_select_expr ( node, path, sizeof path, len, attr, wildcard );
-                }
+#if ALLOW_UPDATE
+        if ( expr != NULL )
+        {
+            KMDataNode *root = node;
+
+            if ( wildcard || len == 0 )
+            {
+                pb -> rc = RC ( rcExe, rcMetadata, rcUpdating, rcExpression, rcIncorrect );
+                PLOGERR ( klogErr, ( klogErr, pb -> rc, "node updates require explicit paths - "
+                                     "'$(expr)' cannot be evaluated", "expr=%s", item ) );
+                return true;
+            }
+
+            pb -> rc = KMDataNodeOpenNodeUpdate ( root, & node, path );
+            KMDataNodeRelease ( root );
+
+            if ( pb -> rc != 0 )
+            {
+                PLOGERR ( klogErr,  (klogErr, pb -> rc, "failed to open node '$(node) for '$(path)'",
+                                     "node=%s,path=%s", path, pb -> targ ));
+            }
+            else
+            {
+                pb -> rc = md_update_expr ( node, path, attr, expr );
             }
+        }
+        else
+#endif
+
+        if ( len == 0 )
+            pb -> rc = md_select_expr ( node, path, sizeof path, len, attr, wildcard );
+        else
+        {
+            const KMDataNode *root = node;
+            pb -> rc = KMDataNodeOpenNodeRead ( root, ( const KMDataNode** ) & node, path );
+            KMDataNodeRelease ( root );
 
-            if ( pb -> rc == 0 )
-                fail = false;
+            if ( pb -> rc != 0 )
+            {
+                PLOGERR ( klogErr,  (klogErr, pb -> rc, "failed to open node '$(node) for '$(path)'",
+                                     "node=%s,path=%s", path, pb -> targ ));
+            }
+            else
+            {
+                pb -> rc = md_select_expr ( node, path, sizeof path, len, attr, wildcard );
+            }
         }
 
+        if ( pb -> rc == 0 )
+            fail = false;
+
         KMDataNodeRelease ( node );
     }
 
@@ -546,17 +695,38 @@ bool CC md_select ( void *item, void *data )
 }
 
 static
-rc_t col_select ( KDBMetaConst * pb)
+rc_t col_select ( KDBMetaParms * pb)
 {
-    const KColumn *col;
+    CONST KColumn *col;
     rc_t rc;
 
-    rc = KDBManagerOpenColumnRead ( pb -> mgr, & col, pb->targ );
+    bool read_only = true;
+
+#if ALLOW_UPDATE
+    if ( ! read_only_arg ) {
+        read_only = false;
+
+        rc = KDBManagerOpenColumnUpdate ( pb -> mgr, & col, pb->targ );
+        if ( rc != 0 )
+            read_only = true;
+    }
+#endif
+    if ( read_only )
+        rc = KDBManagerOpenColumnRead ( pb -> mgr, ( const KColumn** ) & col, pb->targ );
     if ( rc != 0 )
         PLOGERR ( klogErr,  (klogErr, rc, "failed to open column '$(col)'", "col=%s", pb->targ ));
     else
     {
-        rc = KColumnOpenMetadataRead ( col, & pb -> md );
+#if ALLOW_UPDATE
+        if ( ! read_only_arg ) {
+            read_only = false;
+            rc = KColumnOpenMetadataUpdate ( col, & pb -> md );
+            if ( rc != 0 )
+                read_only = true;
+        }
+#endif
+        if ( read_only )
+            rc = KColumnOpenMetadataRead ( col, ( const KMetadata** ) & pb -> md );
         if ( rc != 0 )
             PLOGERR ( klogErr,  (klogErr, rc, "failed to open metadata for column '$(col)'", "col=%s", pb->targ ));
         else
@@ -577,17 +747,39 @@ rc_t col_select ( KDBMetaConst * pb)
 }
 
 static
-rc_t tbl_select ( KDBMetaConst * pb)
+rc_t tbl_select ( KDBMetaParms * pb)
 {
-    const KTable *tbl;
+    CONST KTable *tbl;
     rc_t rc;
 
-    rc = KDBManagerOpenTableRead ( pb -> mgr, & tbl, pb->targ );
+    bool read_only = true;
+
+#if ALLOW_UPDATE
+    if ( ! read_only_arg ) {
+        read_only = false;
+
+        rc = KDBManagerOpenTableUpdate ( pb -> mgr, & tbl, pb->targ );
+        if ( rc != 0 )
+            read_only = true;
+    }
+#endif
+    if ( read_only )
+        rc = KDBManagerOpenTableRead ( pb -> mgr, ( const KTable** ) & tbl, pb->targ );
     if ( rc != 0 )
         PLOGERR ( klogErr,  (klogErr, rc, "failed to open table '$(tbl)'", "tbl=%s", pb->targ ));
     else
     {
-        rc = KTableOpenMetadataRead ( tbl, & pb -> md );
+        read_only = true;
+#if ALLOW_UPDATE
+        if ( ! read_only_arg ) {
+            read_only = false;
+            rc = KTableOpenMetadataUpdate ( tbl, & pb -> md );
+            if ( rc != 0 )
+                read_only = true;
+        }
+#endif
+        if ( read_only )
+            rc = KTableOpenMetadataRead ( tbl, ( const KMetadata** ) & pb -> md );
         if ( rc != 0 )
             PLOGERR ( klogErr,  (klogErr, rc, "failed to open metadata for table '$(tbl)'", "tbl=%s", pb->targ ));
         else
@@ -608,29 +800,94 @@ rc_t tbl_select ( KDBMetaConst * pb)
 }
 
 static
-rc_t db_select (KDBMetaConst * pb)
+rc_t db_select (KDBMetaParms * pb)
 {
-    const KDatabase *db;
+    CONST KDatabase *db;
     rc_t rc;
 
-    rc = KDBManagerOpenDBRead ( pb -> mgr, & db, pb->targ );
-    if ( pb -> rc != 0 )
-        PLOGERR ( klogErr,  (klogErr, rc, "failed to open db '$(db)'", "db=%s", pb->targ ));
-    else
-    {
-        rc = KDatabaseOpenMetadataRead ( db, & pb -> md );
-        if ( rc != 0 )
-            PLOGERR ( klogErr,  (klogErr, rc, "failed to open metadata for db '$(db)'", "db=%s", pb->targ ));
-        else
-        {
-            bool fail;
+    bool read_only = true;
 
-            fail = VectorDoUntil ( pb -> q, false, md_select, pb );
-            if(fail)
-                rc = pb->rc;
-            KMetadataRelease ( pb -> md ), pb -> md = NULL;
+#if ALLOW_UPDATE
+    if ( ! read_only_arg ) {
+        read_only = false;
+
+        rc = KDBManagerOpenDBUpdate ( pb -> mgr, & db, pb->targ );
+        if ( rc != 0 )
+            read_only = true;
+    }
+#endif
+    if ( read_only )
+        rc = KDBManagerOpenDBRead ( pb -> mgr, ( const KDatabase** ) & db, pb->targ );
+    if ( rc != 0 ) {
+        PLOGERR ( klogErr,  (klogErr, rc, "failed to open db '$(db)'",
+            "db=%s", pb->targ ));
+    }
+    else {
+        CONST KTable* tbl = NULL;
+        if (table_arg) {
+            read_only = true;
+#if ALLOW_UPDATE
+            if ( ! read_only_arg ) {
+                read_only = false;
+                rc = KDatabaseOpenTableUpdate ( db, &tbl, table_arg );
+                if ( rc != 0 )
+                    read_only = true;
+            }
+#endif
+            if ( read_only )
+                rc = KDatabaseOpenTableRead ( db, ( const KTable** ) &tbl, table_arg );
+            if ( rc != 0 ) {
+                PLOGERR ( klogErr,  (klogErr, rc,
+                    "failed to open table '$(table)'", "table=%s", table_arg ));
+            }
         }
+        if ( rc == 0) {
+            if (tbl) {
+                read_only = true;
+#if ALLOW_UPDATE
+                if ( ! read_only_arg ) {
+                    read_only = false;
+                    rc = KTableOpenMetadataUpdate ( tbl, & pb -> md );
+                    if ( rc != 0 )
+                        read_only = true;
+                }
+#endif
+                if ( read_only )
+                    rc = KTableOpenMetadataRead ( tbl, ( const KMetadata** ) & pb -> md );
+                if ( rc != 0 ) {
+                    PLOGERR ( klogErr,  (klogErr, rc,
+                        "failed to open metadata for table '$(table)'",
+                        "table=%s", table_arg ));
+                }
+            }
+            else {
+                read_only = true;
+#if ALLOW_UPDATE
+                if ( ! read_only_arg ) {
+                    read_only = false;
+                    rc = KDatabaseOpenMetadataUpdate ( db, & pb -> md );
+                    if ( rc != 0 )
+                        read_only = true;
+                }
+#endif
+                if ( read_only )
+                    rc = KDatabaseOpenMetadataRead ( db, ( const KMetadata** ) & pb -> md );
+                if ( rc != 0 ) {
+                    PLOGERR ( klogErr,  (klogErr, rc,
+                        "failed to open metadata for db '$(db)'",
+                        "db=%s", pb->targ ));
+                }
+            }
+            if ( rc == 0 ) {
+                bool fail;
 
+                fail = VectorDoUntil ( pb -> q, false, md_select, pb );
+                if(fail)
+                    rc = pb->rc;
+                KMetadataRelease ( pb -> md ), pb -> md = NULL;
+            }
+        }
+        KTableRelease ( tbl );
         KDatabaseRelease ( db );
     }
 
@@ -638,9 +895,9 @@ rc_t db_select (KDBMetaConst * pb)
 }
 
 static
-rc_t tool_select ( const KDBManager * mgr, uint32_t type, const char * targ, const Vector * q)
+rc_t tool_select ( CONST KDBManager * mgr, uint32_t type, const char * targ, const Vector * q)
 {
-    KDBMetaConst pb;
+    KDBMetaParms pb;
     rc_t rc;
 
     pb.mgr = mgr;
@@ -694,8 +951,11 @@ rc_t CC UsageSummary (const char * progname)
                     "  %s [Options] <target> [<query> ...]\n"
                     "\n"
                     "Summary:\n"
-                    "  Display the contents of one or more metadata stores.\n",
-                    progname);
+                    "  Display the contents of one or more metadata stores.\n"
+#if ALLOW_UPDATE
+                    "  Update metadata.\n"
+#endif
+                  , progname);
 }
 
 static const char *const t1 [] = { "path-to-database", "access database metadata", NULL };
@@ -707,19 +967,43 @@ static const char *const q1 [] = { "*","all nodes and attributes", NULL };
 static const char *const q2 [] = { "NAME","a named root node and children", NULL };
 static const char *const q3 [] = { "PATH/NAME","an internal node and children", NULL };
 static const char *const q4 [] = { "<node>@ATTR","a named attribute", NULL };
+#if ALLOW_UPDATE
 static const char *const q5 [] = { "<obj>=VALUE","a simple value assignment where",
                                    "value string is text, and binary",
                                    "values use hex escape codes", NULL };
+#endif
 
-static const char* o1[] = { "try to interpret binary values as unsigned ints", NULL };
+/* static const char* o1[] = { "try to interpret binary values as unsigned ints", NULL }; */
 
-const OptDef opt[] =
-{
-    {"unsigned", NULL, NULL, o1, 0, false, false}
+#define ALIAS_READ_ONLY             "r"
+#define OPTION_READ_ONLY            "read-only"
+static const char* USAGE_READ_ONLY[] = { "operate in read-only mode", NULL };
+
+#define ALIAS_TABLE             "T"
+#define OPTION_TABLE            "table"
+static const char* USAGE_TABLE[] = { "table-name", NULL };
+
+#define ALIAS_UNSIGNED             "u"
+#define OPTION_UNSIGNED            "unsigned"
+static const char* USAGE_UNSIGNED[]
+                                 = { "print numeric values as unsigned", NULL };
+
+const OptDef opt[] = {
+  { OPTION_TABLE    , ALIAS_TABLE    , NULL, USAGE_TABLE    , 1, true , false }
+ ,{ OPTION_UNSIGNED , ALIAS_UNSIGNED , NULL, USAGE_UNSIGNED , 1, false, false }
+#if ALLOW_UPDATE
+ ,{ OPTION_READ_ONLY, ALIAS_READ_ONLY, NULL, USAGE_READ_ONLY, 1, false, false }
+#endif
 };
 
 static const char * const * target_usage [] = { t1, t2, t3, t4 };
-static const char * const * query_usage []  = { q1, q2, q3, q4, q5 };
+static const char * const * query_usage []  =
+{
+    q1, q2, q3, q4
+#if ALLOW_UPDATE
+    , q5
+#endif
+};
 
 
 rc_t CC Usage (const Args * args)
@@ -789,7 +1073,7 @@ rc_t CC Usage (const Args * args)
  */
 rc_t CC KMain ( int argc, char *argv [] )
 {
-    Args * args;
+    Args * args = NULL;
     rc_t rc;
 
     rc = ArgsMakeAndHandle(&args, argc, argv, 1, opt, sizeof(opt) / sizeof(opt[0]));
@@ -802,21 +1086,50 @@ rc_t CC KMain ( int argc, char *argv [] )
             uint32_t pcount;
             int ix;
 
-            if( (rc = ArgsOptionCount(args, opt[0].name, &pcount)) != 0 ) {
+#if ALLOW_UPDATE
+            read_only_arg = false;
+            rc = ArgsOptionCount (args, OPTION_READ_ONLY, &pcount);
+            if (rc) {
+                LOGERR(klogErr, rc,
+                    "Failure to get '" OPTION_READ_ONLY "' argument");
+                break;
+            }
+            read_only_arg = pcount > 0;
+#endif
+
+            rc = ArgsOptionCount (args, OPTION_UNSIGNED, &pcount);
+            if (rc) {
+                LOGERR(klogErr, rc,
+                    "Failure to get '" OPTION_UNSIGNED "' argument");
                 break;
             }
             as_unsigned = pcount > 0;
 
+            rc = ArgsOptionCount (args, OPTION_TABLE, &pcount);
+            if (rc) {
+                LOGERR(klogErr, rc,
+                    "Failure to get '" OPTION_TABLE "' argument");
+                break;
+            }
+            if (pcount) {
+                rc = ArgsOptionValue (args, OPTION_TABLE, 0, &table_arg);
+                if (rc) {
+                    LOGERR(klogErr, rc,
+                        "Failure to get '" OPTION_TABLE "' argument");
+                    break;
+                }
+            }
+
             rc = ArgsParamCount (args, &pcount);
             if (rc)
                 break;
 
             if (pcount == 0)
             {
-                rc = RC (rcExe, rcArgv, rcReading, rcParam, rcInsufficient);
-                LOGERR (klogFatal, rc, "missing database target path and queries" );
+                OUTMSG (( "missing database target path and queries\n" ));
                 MiniUsage (args);
-                break;
+                ArgsWhack(args);
+                exit(EXIT_FAILURE);
             }
 
             rc = KDirectoryNativeDir (&curwd);
@@ -826,9 +1139,12 @@ rc_t CC KMain ( int argc, char *argv [] )
             }
             else
             {
-                const KDBManager * mgr;
-
+                CONST KDBManager * mgr;
+#if ALLOW_UPDATE
+                rc = KDBManagerMakeUpdate (&mgr, curwd);
+#else
                 rc = KDBManagerMakeRead (&mgr, curwd);
+#endif
                 if (rc)
                     LOGERR (klogInt, rc, "Unable to open the database system");
                 else
@@ -840,26 +1156,29 @@ rc_t CC KMain ( int argc, char *argv [] )
                     else
                     {
                         char objpath [ 4096 ];
-                        SRAPath * sra_path;
                         bool found;
                         uint32_t type;
 
                         found = false;
 
-                        rc = SRAPathMake (&sra_path, NULL);
-                        if ( rc == 0 )
+#if 1 /* TOOLS_USE_SRAPATH != 0 */
                         {
-                            if ( ! SRAPathTest (sra_path, pc))
+                            SRAPath * sra_path = NULL;
+                            rc = SRAPathMake (&sra_path, NULL);
+                            if ( rc == 0 )
                             {
-                                rc = SRAPathFind (sra_path, pc, objpath, sizeof (objpath));
-                                if (rc == 0)
-                                    found = true;
+                                if ( ! SRAPathTest (sra_path, pc))
+                                {
+                                    rc = SRAPathFind (sra_path, pc, objpath, sizeof (objpath));
+                                    if (rc == 0)
+                                        found = true;
+                                }
+                                SRAPathRelease (sra_path);
+                            }
+                            else if ( GetRCState ( rc ) == rcNotFound && GetRCTarget ( rc ) == rcDylib )
+                            {
+                                rc = 0;
                             }
-                            SRAPathRelease (sra_path);
-                        }
-                        else if ( GetRCState ( rc ) == rcNotFound && GetRCTarget ( rc ) == rcDylib )
-                        {
-                            rc = 0;
                         }
 
                         if ( ! found)
@@ -870,6 +1189,7 @@ rc_t CC KMain ( int argc, char *argv [] )
                             if (rc)
                                 LOGERR (klogFatal, rc, "Unable to resolved target path");
                         }
+#endif
 
 
                         type = KDBManagerVPathType (mgr, objpath, NULL);
@@ -938,6 +1258,9 @@ rc_t CC KMain ( int argc, char *argv [] )
             }
         } while (0);
     }
-    /* done */
+    
+    ArgsWhack(args);
+    args = NULL;
+
     return rc;
 }
diff --git a/tools/util/kdbmeta.vers b/tools/util/kdbmeta.vers
index 04b10b4..f90b1af 100644
--- a/tools/util/kdbmeta.vers
+++ b/tools/util/kdbmeta.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/util/kdbmeta.vers.h b/tools/util/kdbmeta.vers.h
deleted file mode 100644
index 5521f79..0000000
--- a/tools/util/kdbmeta.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define KDBMETA_VERS 0x02010007
diff --git a/tools/util/mac/syspass.c b/tools/util/mac/syspass.c
new file mode 100644
index 0000000..2a2d9f1
--- /dev/null
+++ b/tools/util/mac/syspass.c
@@ -0,0 +1,48 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "syspass-priv.h" /* get_pass */
+
+#include <klib/rc.h>
+
+#include <readpassphrase.h>
+
+rc_t get_pass(const char *prompt, char *buf, size_t bufsiz) {
+    if (prompt == NULL || buf == NULL) {
+        return RC(rcExe, rcFunction, rcEvaluating, rcParam, rcNull);
+    }
+
+    if (bufsiz == 0)
+    {   return 0; }
+
+    buf[0] = '\0';
+
+    if (readpassphrase(prompt, buf, bufsiz, 0) == NULL) {
+        return RC(rcExe, rcFunction, rcEvaluating, rcParam, rcNull);
+    }
+
+    return 0;
+}
\ No newline at end of file
diff --git a/tools/util/rcexplain.vers b/tools/util/rcexplain.vers
index 04b10b4..f90b1af 100644
--- a/tools/util/rcexplain.vers
+++ b/tools/util/rcexplain.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/util/rcexplain.vers.h b/tools/util/rcexplain.vers.h
deleted file mode 100644
index 64b667d..0000000
--- a/tools/util/rcexplain.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define RCEXPLAIN_VERS 0x02010007
diff --git a/tools/util/rowwritetest.c b/tools/util/rowwritetest.c
index 7d9d2a9..9d8a3e3 100644
--- a/tools/util/rowwritetest.c
+++ b/tools/util/rowwritetest.c
@@ -15,7 +15,6 @@
 #include <stdlib.h> /* malloc */
 #include <assert.h>
 #include <os-native.h>
-#include <fmtdef.h>
 
 #define OPTION_TABLE "table-path"
 #define OPTION_ROW   "row-count"
@@ -31,11 +30,6 @@ OptDef MyOptions[] =
     { OPTION_ROW,   ALIAS_ROW,   NULL, row_usage,   1, true, false }
 };
 
-static bool __BadLogLevel = false;
-static const char *__dummy4NextLogLevel(void *data) {
-    __BadLogLevel = true;
-    return "info";
-}
 #define COLUMNS 5
 #define ROWLEN 64
 #define ROWS 0x400000
@@ -318,18 +312,18 @@ rc_t run (const char * table_path, uint64_t N )
         KDirectoryRelease(dir);
         if (rc == 0) {
             puts("");
-            printf("%" LD64 " rows, %d bytes per row:\n", N, ROWLEN);
+            KOutMsg("%ld rows, %d bytes per row:\n", N, ROWLEN);
             for (i = 0; i < COLUMNS; ++i) {
                 puts(colInf[i]);
             }
             puts("");
             for (i = 0; i < COLUMNS; ++i) {
                 int64_t over = sizes[i] - total[i];
-                printf("C%d: %9" LD64 " bytes written; "
-                    "%9" LD64 " in 'data'", i + 1, total[i], sizes[i]);
+                KOutMsg("C%d: %9ld bytes written; "
+                    "%9ld in 'data'", i + 1, total[i], sizes[i]);
                 if (over > 0) {
                     double p = 100.0 * over / sizes[i];
-                    printf(": %7" LD64 " extra bytes (%.4f%%)\n", over, p);
+                    printf(": %7ld extra bytes (%.4f%%)\n", over, p);
                 }
                 else {
                     puts("");
diff --git a/tools/util/rowwritetest.vers b/tools/util/rowwritetest.vers
index 7dea76e..f90b1af 100644
--- a/tools/util/rowwritetest.vers
+++ b/tools/util/rowwritetest.vers
@@ -1 +1 @@
-1.0.1
+2.3.2
diff --git a/tools/util/syspass-priv.h b/tools/util/syspass-priv.h
new file mode 100644
index 0000000..6f8cb80
--- /dev/null
+++ b/tools/util/syspass-priv.h
@@ -0,0 +1,44 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#ifndef _h_util_syspass_priv_
+#define _h_util_syspass_priv_
+
+#ifndef _h_klib_defs_
+#include <klib/defs.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+rc_t get_pass(const char *prompt, char *buf, size_t bufsiz);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*  _h_util_syspass_priv_ */
diff --git a/tools/util/test-sra.c b/tools/util/test-sra.c
new file mode 100644
index 0000000..fab93ea
--- /dev/null
+++ b/tools/util/test-sra.c
@@ -0,0 +1,1165 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+/*
+SRR125365
+SRR292195
+SRR413283
+SRR600096
+SRR619505
+SRR953827
+/home/klymenka/ncbi/public/sra/SRR619505
+/home/klymenka/ncbi/public/sra/SRR619505.sra
+/netmnt/traces04/sra2/SRR/000122/SRR125365
+/netmnt/traces04/sra2/SRR/000586/SRR600096
+/netmnt/traces04/sra3/SRR/000403/SRR413283
+/netmnt/traces04/sra4/SRR/000345/SRR353827
+/netmnt/traces04/sra5/SRR/000604/SRR619505
+/netmnt/traces04/sra7/SRR/000285/SRR292195
+/netmnt/traces04/sra7/SRR/000285/SRR292195/col
+/netmnt/traces04/sra7/SRR/000285/SRR292195/col/
+/netmnt/traces04/sra7/SRR/000285/SRR292195/col/READ
+/netmnt/traces04/sra7/SRR/000285/SRR292195/col/READ/md
+/netmnt/traces04/sra7/SRR/000285/SRR292195/col/READ/md5
+/netmnt/traces04/sra7/SRR/000285/SRR292195/idx
+/netmnt/traces04/sra7/SRR/000285/SRR292195/idx/skey
+/panfs/traces01/sra_backup/SRA/sra_trash/duplicatedOn_sra-s/sra0/SRR005459
+http://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByRun/sra/SRR/SRR619/SRR619505/SRR619505.sra
+*/
+
+#include <kapp/main.h> /* KMain */
+#include <kdb/manager.h> /* kptDatabase */
+#include <vdb/manager.h> /* VDBManager */
+#include <vdb/database.h> /* VDatabase */
+#include <vdb/dependencies.h> /* VDBDependencies */
+#include <kdb/manager.h> /* kptDatabase */
+#include <vfs/manager.h> /* VFSManager */
+#include <vfs/resolver.h> /* VResolver */
+#include <vfs/path.h> /* VPath */
+#include <kns/manager.h> /* KNSManager */
+#include <kfg/config.h> /* KConfig */
+#include <kfs/directory.h> /* KDirectory */
+#include <kfs/file.h> /* KFile */
+#include <klib/printf.h> /* string_vprintf */
+#include <klib/log.h> /* KLogHandlerSet */
+#include <klib/out.h> /* KOutMsg */
+#include <klib/text.h> /* String */
+#include <klib/rc.h>
+#include <ctype.h> /* isprint */
+#include <stdlib.h> /* calloc */
+#include <string.h> /* memset */
+#include <assert.h>
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 != 0 && rc == 0) { rc = rc2; } obj = NULL; } while (false)
+
+typedef enum {
+    eCfg = 1,
+/*  eType = 2, */
+    eResolve = 2,
+    eDependMissing = 4,
+    eDependAll = 8,
+    eAll = 16
+} Type;
+typedef struct {
+    KConfig *cfg;
+    KDirectory *dir;
+    const VDBManager *mgr;
+    VResolver *resolver;
+    uint8_t tests;
+    bool recursive;
+    bool noVDBManagerPathType;
+} Main;
+
+uint32_t CC KAppVersion(void) { return 0; }
+
+const char UsageDefaultName[] = "test-sra";
+
+rc_t CC UsageSummary(const char *prog_name) {
+    return KOutMsg(
+        "Usage:\n"
+        "    %s [+crdDa] [-crdDa] [options] name [ name... ]\n"
+        "    %s -R [-N] name [ name... ]\n",
+        prog_name, prog_name);
+}
+
+rc_t CC Usage(const Args *args) {
+    rc_t rc2 = 0;
+
+    const char *progname, *fullpath;
+    rc_t rc = ArgsProgram(args, &fullpath, &progname);
+    if (rc != 0) {
+        progname = fullpath = UsageDefaultName;
+    }
+
+    rc2 = UsageSummary(progname);
+    if (rc == 0 && rc2 != 0) {
+        rc = rc2;
+    }
+
+/*      "  t - test object's VDB type\n" */
+    rc2 = KOutMsg("\n"
+        "Test [SRA] object, resolve it, print dependencies, configuration\n\n"
+        "[+tests] - add tests\n"
+        "[-tests] - remove tests\n\n"
+        "Tests:\n"
+        "  c - print configuration\n"
+        "  r - call VResolver\n"
+        "  d - call ListDependencies(missing)\n"
+        "  D - call ListDependencies(all)\n"
+        "  a - all tests\n\n"
+        "If no tests were specified then all tests will be run\n\n"
+        "-R - check object type recursively\n"
+        "-N - do not call VDBManagerPathType\n\n"
+        "More options:\n");
+    if (rc == 0 && rc2 != 0) {
+        rc = rc2;
+    }
+
+    HelpOptionsStandard();
+
+    return rc;
+}
+
+static bool testArg(const char *arg, uint8_t *testOn, uint8_t *testOff) {
+    int j = 1;
+    uint8_t *res = NULL;
+
+/*  const char tests[] = "ctrdDa"; */
+    const char tests[] = "crdDa";
+
+    assert(arg && testOn && testOff);
+    if (arg[0] != '+' && arg[0] != '-') {
+        return false;
+    }
+
+    if (arg[0] == '-' &&
+        arg[1] != '\0' && strchr(tests, arg[1]) == NULL)
+    {
+        return false;
+    }
+
+    res = arg[0] == '-' ? testOff : testOn;
+
+    for (j = 1; arg[j] != '\0'; ++j) {
+        char *c = strchr(tests, arg[j]);
+        if (c != NULL) {
+            int offset = c - tests;
+            *res |= 1 << offset;
+        }
+    }
+
+    return true;
+}
+
+static uint8_t Turn(uint8_t in, uint8_t tests, bool on) {
+    uint8_t c = 1;
+    for (c = 1; c < eAll; c <<= 1) {
+        if (tests & c) {
+            if (on) {
+                in |= c;
+            }
+            else {
+                in &= ~c;
+            }
+        }
+    }
+    return in;
+}
+
+static uint8_t processTests(uint8_t testsOn, uint8_t testsOff) {
+    uint8_t tests = 0;
+
+    bool allOn = false;
+    bool allOff = false;
+
+    if (testsOn & eAll && testsOff & eAll) {
+        testsOn &= ~eAll;
+        testsOff &= ~eAll;
+    }
+    else if (testsOn & eAll) {
+        allOn = true;
+    }
+    else if (testsOff & eAll) {
+        allOff = true;
+    }
+
+    if (allOn) {
+        tests = ~0;
+        tests = Turn(tests, testsOff, false);
+    }
+    else if (allOff) {
+        tests = Turn(tests, testsOn, true);
+    }
+    else if (testsOn != 0 || testsOff != 0) {
+        tests = Turn(tests, testsOff, false);
+        tests = Turn(tests, testsOn, true);
+    }
+    else {
+        tests = ~0;
+    }
+
+    return tests;
+} 
+
+static bool MainHasTest(const Main *self, Type type) {
+    assert(self);
+    return self->tests & type;
+}
+
+static void MainPrint(const Main *self) {
+    return;
+
+    assert(self);
+
+    if (MainHasTest(self, eCfg)) {
+        KOutMsg("eCfg\n");
+    }
+
+/*  if (MainHasTest(self, eType)) {
+        KOutMsg("eType\n");
+    }*/
+
+    if (MainHasTest(self, eResolve)) {
+        KOutMsg("eResolve\n");
+    }
+
+    if (MainHasTest(self, eDependMissing)) {
+        KOutMsg("eDependMissing\n");
+    }
+
+    if (MainHasTest(self, eDependAll)) {
+        KOutMsg("eDependAll\n");
+    }
+}
+
+static rc_t MainInitObjects(Main *self) {
+    rc_t rc = 0;
+
+    VFSManager* mgr = NULL;
+    VResolver *resolver = NULL;
+
+    if (rc == 0) {
+        rc = KDirectoryNativeDir(&self->dir);
+    }
+
+    if (rc == 0) {
+        rc = VDBManagerMakeRead(&self->mgr, NULL);
+    }
+
+    if (rc == 0) {
+        rc = KConfigMake(&self->cfg, NULL);
+    }
+
+    if (rc == 0) {
+        rc = VFSManagerMake(&mgr);
+    }
+
+    if (rc == 0) {
+        rc = VFSManagerGetResolver(mgr, &resolver);
+    }
+
+    if (rc == 0) {
+        VResolverCacheEnable(resolver, vrAlwaysDisable);
+    }
+
+    if (rc == 0) {
+        rc = VFSManagerMakeResolver(mgr, &self->resolver, self->cfg);
+    }
+
+
+    RELEASE(VResolver, resolver);
+    RELEASE(VFSManager, mgr);
+
+    return rc;
+}
+
+static
+rc_t _MainInit(Main *self, int argc, char *argv[], int *argi, char **argv2)
+{
+    rc_t rc = 0;
+    int i = 0;
+
+    uint8_t testsOn = 0;
+    uint8_t testsOff = 0;
+
+    assert(self && argv && argi && argv2);
+
+    *argi = 0;
+    argv2[(*argi)++] = argv[0];
+
+    for (i = 1; i < argc; ++i) {
+        if (!testArg(argv[i], &testsOn, &testsOff)) {
+            argv2[(*argi)++] = argv[i];
+        }
+    }
+
+    self->tests = processTests(testsOn, testsOff);
+
+    MainPrint(self);
+
+    rc = MainInitObjects(self);
+
+    return rc;
+}
+
+static char** MainInit(Main *self, rc_t *rc,
+    int argc, char *argv[], int *argi)
+{
+    char **argv2 = calloc(argc, sizeof *argv2);
+
+    assert(self && rc);
+
+    memset(self, 0, sizeof *self);
+
+    if (argv2 != NULL) {
+        *rc = _MainInit(self, argc, argv, argi, argv2);
+    }
+
+    return argv2;
+}
+
+static rc_t MainPrintConfig(const Main *self) {
+    rc_t rc = 0;
+
+    assert(self);
+
+    if (rc == 0) {
+        rc = KConfigPrint(self->cfg, 0);
+        if (rc != 0) {
+            OUTMSG(("KConfigPrint() = %R", rc));
+        }
+        OUTMSG(("\n"));
+    }
+
+    return rc;
+}
+
+static
+rc_t _KDBPathTypePrint(const char *head, KPathType type, const char *tail)
+{
+    rc_t rc = 0;
+    rc_t rc2 = 0;
+    assert(head && tail);
+    {
+        rc_t rc2 = OUTMSG(("%s", head));
+        if (rc == 0 && rc2 != 0) {
+            rc = rc2;
+        }
+    }
+    switch (type) {
+        case kptNotFound:
+            rc2 = OUTMSG(("NotFound"));
+            break;
+        case kptBadPath:
+            rc2 = OUTMSG(("BadPath"));
+            break;
+        case kptFile:
+            rc2 = OUTMSG(("File"));
+            break;
+        case kptDir:
+            rc2 = OUTMSG(("Dir"));
+            break;
+        case kptCharDev:
+            rc2 = OUTMSG(("CharDev"));
+            break;
+        case kptBlockDev:
+            rc2 = OUTMSG(("BlockDev"));
+            break;
+        case kptFIFO:
+            rc2 = OUTMSG(("FIFO"));
+            break;
+        case kptZombieFile:
+            rc2 = OUTMSG(("ZombieFile"));
+            break;
+        case kptDataset:
+            rc2 = OUTMSG(("Dataset"));
+            break;
+        case kptDatatype:
+            rc2 = OUTMSG(("Datatype"));
+            break;
+        case kptDatabase:
+            rc2 = OUTMSG(("Database"));
+            break;
+        case kptTable:
+            rc2 = OUTMSG(("Table"));
+            break;
+        case kptIndex:
+            rc2 = OUTMSG(("Index"));
+            break;
+        case kptColumn:
+            rc2 = OUTMSG(("Column"));
+            break;
+        case kptMetadata:
+            rc2 = OUTMSG(("Metadata"));
+            break;
+        case kptPrereleaseTbl:
+            rc2 = OUTMSG(("PrereleaseTbl"));
+            break;
+        default:
+            rc2 = OUTMSG(("unexpectedFileType(%d)", type));
+            assert(0);
+            break;
+    }
+    if (rc == 0 && rc2 != 0) {
+        rc = rc2;
+    }
+    {
+        rc_t rc2 = OUTMSG(("%s", tail));
+        if (rc == 0 && rc2 != 0) {
+            rc = rc2;
+        }
+    }
+    return rc;
+}
+
+static bool isprintString(const unsigned char *s) {
+    assert(s);
+
+    while (*s) {
+        int c = *(s++);
+        if (!isprint(c)) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
+static rc_t printString(const char *s) {
+    rc_t rc = 0;
+
+    const unsigned char *u = (unsigned char*)s;
+
+    assert(u);
+
+    if (isprintString(u)) {
+        return OUTMSG(("%s", u));
+    }
+
+    while (*u) {
+        rc_t rc2 = 0;
+        int c = *(u++);
+        if (isprint(c)) {
+            rc2 = OUTMSG(("%c", c));
+        }
+        else {
+            rc2 = OUTMSG(("\\%03o", c));
+        }
+        if (rc == 0 && rc2 != 0) {
+            rc = rc2;
+        }
+    }
+
+    return rc;
+}
+
+static rc_t _KDirectoryReport(const KDirectory *self,
+    const char *name, int64_t *size, KPathType *type, bool *alias)
+{
+    rc_t rc = 0;
+    const KFile *f = NULL;
+
+    bool dummyB = false;
+    int64_t dummy = 0;
+
+    KPathType dummyT = kptNotFound;;
+    if (type == NULL) {
+        type = &dummyT;
+    }
+
+    if (alias == NULL) {
+        alias = &dummyB;
+    }
+    if (size == NULL) {
+        size = &dummy;
+    }
+
+    *type = KDirectoryPathType(self, name);
+
+    if (*type & kptAlias) {
+        OUTMSG(("alias|"));
+        *type &= ~kptAlias;
+        *alias = true;
+    }
+
+    rc = _KDBPathTypePrint("", *type, " ");
+
+    if (*type == kptFile) {
+        rc = KDirectoryOpenFileRead(self, &f, name);
+        if (rc != 0) {
+            OUTMSG(("KDirectoryOpenFileRead("));
+            printString(name);
+            OUTMSG((")=%R ", rc));
+        }
+        else {
+            uint64_t sz = 0;
+            rc = KFileSize(f, &sz);
+            if (rc != 0) {
+                OUTMSG(("KFileSize(%s)=%R ", name, rc));
+            }
+            else {
+                OUTMSG(("%lu ", sz));
+                *size = sz;
+            }
+        }
+    }
+
+    RELEASE(KFile, f);
+
+    return rc;
+}
+
+static rc_t _VDBManagerReport(const VDBManager *self,
+    const char *name, KPathType *type)
+{
+    KPathType dummy = kptNotFound;;
+
+    if (type == NULL) {
+        type = &dummy;
+    }
+
+    *type = VDBManagerPathType(self, name);
+
+    *type &= ~kptAlias;
+
+    return _KDBPathTypePrint("", *type, " ");
+}
+
+static rc_t MainReport(const Main *self,
+    const char *name, int64_t *size, KPathType *type, bool *alias)
+{
+    rc_t rc = 0;
+
+    assert(self);
+
+    rc = _KDirectoryReport(self->dir, name, size, type, alias);
+
+    if (!self->noVDBManagerPathType) { /* && MainHasTest(self, eType)) { */
+        _VDBManagerReport(self->mgr, name, type);
+    }
+
+    return rc;
+}
+
+#define rcResolver   rcTree
+static bool NotFoundByResolver(rc_t rc) {
+    if (GetRCModule(rc) == rcVFS) {
+        if (GetRCTarget(rc) == rcResolver) {
+            if (GetRCContext(rc) == rcResolving) {
+                if (GetRCState(rc) == rcNotFound) {
+                    return true;
+                }
+            }
+        }
+    }
+    return false;
+}
+
+static rc_t MainResolveLocal(const Main *self,
+    const char *name, const VPath* acc, int64_t *size)
+{
+    rc_t rc = 0;
+
+    const VPath* local = NULL;
+
+    assert(self);
+
+    OUTMSG(("Local: "));
+
+    rc = VResolverLocal(self->resolver, acc, &local);
+    if (rc != 0) {
+        if (NotFoundByResolver(rc)) {
+            OUTMSG(("not found\n"));
+            rc = 0;
+        }
+        else {
+            OUTMSG(("VResolverLocal(%s) = %R\n", name, rc));
+        }
+    }
+    else {
+        const String *s = NULL;
+
+        rc_t rc = VPathMakeString(local, &s);
+        if (rc == 0) {
+            OUTMSG(("%.*s ", s->size, s->addr));
+            rc = MainReport(self, s->addr, size, NULL, NULL);
+            OUTMSG(("\n"));
+        } else {
+            OUTMSG(("VPathMakeString(VResolverLocal(%s)) = %R\n",
+                name, rc));
+        }
+
+        free((void*)s);
+    }
+
+    RELEASE(VPath, local);
+
+    return rc;
+}
+
+static rc_t MainResolveRemote(const Main *self, const char *name,
+    const VPath* acc, const VPath **remote, int64_t *size)
+{
+    rc_t rc = 0;
+
+    const KFile* f = NULL;
+
+    assert(self && size);
+
+    OUTMSG(("Remote: "));
+
+    rc = VResolverRemote(self->resolver, acc, remote, &f);
+    if (rc != 0) {
+        if (NotFoundByResolver(rc)) {
+            OUTMSG(("not found\n"));
+            rc = 0;
+        }
+        else {
+            OUTMSG(("VResolverRemote(%s) = %R\n", name, rc));
+        }
+    }
+    else {
+        const String *s = NULL;
+        rc_t rc = VPathMakeString(*remote, &s);
+        if (rc == 0) {
+            uint64_t sz = 0;
+            OUTMSG(("%.*s ", s->size, s->addr));
+            rc = KFileSize(f, &sz);
+            if (rc != 0) {
+                OUTMSG(("KFileSize(%s)=%R ", name, rc));
+            }
+            else {
+                OUTMSG(("%lu ", sz));
+                *size = sz;
+            }
+            OUTMSG(("\n"));
+        } else {
+            OUTMSG(("VPathMakeString(VResolverRemote(%s)) = %R\n",
+                name, rc));
+        }
+        free((void*)s);
+    }
+
+    RELEASE(KFile, f);
+
+    return rc;
+}
+
+static rc_t MainResolveCache(const Main *self,
+    const char *name, const VPath* remote)
+{
+    rc_t rc = 0;
+
+    assert(self);
+    
+    OUTMSG(("Cache: "));
+    
+    if (remote == NULL) {
+        OUTMSG(("skipped\n"));
+    }
+    else {
+        VResolverEnableState enabled = VResolverCacheEnable(self->resolver, vrAlwaysEnable);
+        const VPath* cache = NULL;
+        uint64_t file_size = 0;
+        rc = VResolverCache(self->resolver, remote, &cache, file_size);
+        VResolverCacheEnable(self->resolver, enabled);
+        if (rc != 0) {
+            if (NotFoundByResolver(rc)) {
+                OUTMSG(("not found\n"));
+                rc = 0;
+            }
+            else {
+                OUTMSG(("VResolverCache(%s) = %R\n", name, rc));
+            }
+        }
+        else {
+            const String *s = NULL;
+            rc_t rc = VPathMakeString(cache, &s);
+            if (rc == 0) {
+                OUTMSG(("%.*s ", s->size, s->addr));
+                rc = MainReport(self, s->addr, NULL, NULL, NULL);
+                OUTMSG(("\n"));
+            } else {
+                OUTMSG((
+                    "VPathMakeString(VResolverCache(%s, %d)) = %R\n",
+                    name, file_size, rc));
+            }
+            free((void*)s);
+        }
+
+        RELEASE(VPath, cache);
+    }
+
+    return rc;
+}
+
+static rc_t MainResolve(const Main *self,
+    const char *name, int64_t *localSz, int64_t *remoteSz)
+{
+    rc_t rc = 0;
+
+    VPath* acc = NULL;
+
+    assert(self);
+
+    if (rc == 0) {
+        rc = VPathMake(&acc, name);
+        if (rc != 0) {
+            OUTMSG(("VPathMake(%s) = %R\n", name, rc));
+        }
+    }
+
+    if (rc == 0) {
+        const VPath* remote = NULL;
+
+        rc_t rc2 = MainResolveLocal(self, name, acc, localSz);
+        if (rc2 != 0 && rc == 0) {
+            rc = rc2;
+        }
+
+        rc2 = MainResolveRemote(self, name, acc, &remote, remoteSz);
+        if (rc2 != 0 && rc == 0) {
+            rc = rc2;
+        }
+
+        rc2 = MainResolveCache(self, name, remote);
+        if (rc2 != 0 && rc == 0) {
+            rc = rc2;
+        }
+
+        RELEASE(VPath, remote);
+    }
+
+    RELEASE(VPath, acc);
+
+    return rc;
+}
+
+static
+rc_t MainDepend(const Main *self, const char *name, bool missing)
+{
+    rc_t rc = 0;
+
+    const VDatabase *db = NULL;
+    const VDBDependencies* dep = NULL;
+    uint32_t count = 0;
+
+    if (rc == 0) {
+        rc = VDBManagerOpenDBRead(self->mgr, &db, NULL, name);
+        if (rc != 0) {
+            if (rc == SILENT_RC(rcVFS,rcMgr,rcOpening,rcDirectory,rcNotFound)) {
+                return 0;
+            }
+            OUTMSG(("VDBManagerOpenDBRead(%s) = %R\n", name, rc));
+        }
+    }
+
+    if (rc == 0) {
+        rc = VDatabaseListDependencies(db, &dep, missing);
+        if (rc != 0) {
+            OUTMSG(("VDatabaseListDependencies(%s, %s) = %R\n",
+                name, missing ? "missing" : "all", rc));
+        }
+    }
+
+    if (rc == 0) {
+        rc = VDBDependenciesCount(dep, &count);
+        if (rc != 0) {
+            OUTMSG(("VDBDependenciesCount(%s, %s) = %R\n",
+                name, missing ? "missing" : "all", rc));
+        }
+        else {
+            OUTMSG(("VDBDependenciesCount(%s)=%d\n",
+                missing ? "missing" : "all", count));
+        }
+    }
+
+    if (rc == 0) {
+        uint32_t i = 0;
+        rc_t rc2 = 0;
+        for (i = 0; i < count; ++i) {
+            bool b = true;
+            const char *s = NULL;
+            KPathType type = kptNotFound;
+
+            OUTMSG((" %6d\t", i + 1));
+
+            rc2 = VDBDependenciesSeqId(dep, &s, i);
+            if (rc2 == 0) {
+                OUTMSG(("seqId=%s,", s));
+            }
+            else {
+                OUTMSG(("VDBDependenciesSeqId(%s, %s, %i)=%R ",
+                    name, missing ? "missing" : "all", i, rc));
+                if (rc == 0) {
+                    rc = rc2;
+                }
+            }
+
+            rc2 = VDBDependenciesName(dep, &s, i);
+            if (rc2 == 0) {
+                OUTMSG(("name=%s,", s));
+            }
+            else {
+                OUTMSG(("VDBDependenciesName(%s, %s, %i)=%R ",
+                    name, missing ? "missing" : "all", i, rc));
+                if (rc == 0) {
+                    rc = rc2;
+                }
+            }
+
+            rc2 = VDBDependenciesCircular(dep, &b, i);
+            if (rc2 == 0) {
+                OUTMSG(("circular=%s,", b ? "true" : "false"));
+            }
+            else {
+                OUTMSG(("VDBDependenciesCircular(%s, %s, %i)=%R ",
+                    name, missing ? "missing" : "all", i, rc));
+                if (rc == 0) {
+                    rc = rc2;
+                }
+            }
+
+            rc2 = VDBDependenciesType(dep, &type, i);
+            if (rc2 == 0) {
+                rc2 = _KDBPathTypePrint("type=", type, ",");
+                if (rc2 != 0 && rc == 0) {
+                    rc = rc2;
+                }
+            }
+            else {
+                OUTMSG(("VDBDependenciesType(%s, %s, %i)=%R ",
+                    name, missing ? "missing" : "all", i, rc));
+                if (rc == 0) {
+                    rc = rc2;
+                }
+            }
+
+            rc2 = VDBDependenciesLocal(dep, &b, i);
+            if (rc2 == 0) {
+                OUTMSG(("local=%s,", b ? "local" : "remote"));
+            }
+            else {
+                OUTMSG(("VDBDependenciesLocal(%s, %s, %i)=%R ",
+                    name, missing ? "missing" : "all", i, rc));
+                if (rc == 0) {
+                    rc = rc2;
+                }
+            }
+
+            rc2 = VDBDependenciesPath(dep, &s, i);
+            if (rc2 == 0) {
+                OUTMSG(("pathLocal=%s,", s == NULL ? "notFound" : s));
+            }
+            else {
+                OUTMSG(("VDBDependenciesPath(%s, %s, %i)=%R ",
+                    name, missing ? "missing" : "all", i, rc));
+                if (rc == 0) {
+                    rc = rc2;
+                }
+            }
+
+            rc2 = VDBDependenciesPathRemote(dep, &s, i);
+            if (rc2 == 0) {
+                OUTMSG(("pathRemote=%s,", s == NULL ? "notFound" : s));
+            }
+            else {
+                OUTMSG(("VDBDependenciesPathRemote(%s, %s, %i)=%R ",
+                    name, missing ? "missing" : "all", i, rc));
+                if (rc == 0) {
+                    rc = rc2;
+                }
+            }
+
+            rc2 = VDBDependenciesPathCache(dep, &s, i);
+            if (rc2 == 0) {
+                OUTMSG(("pathCache=%s", s == NULL ? "notFound" : s));
+            }
+            else {
+                OUTMSG(("VDBDependenciesPathCache(%s, %s, %i)=%R ",
+                    name, missing ? "missing" : "all", i, rc));
+                if (rc == 0) {
+                    rc = rc2;
+                }
+            }
+
+            OUTMSG(("\n"));
+        }
+    }
+
+    RELEASE(VDBDependencies, dep);
+    RELEASE(VDatabase, db);
+
+    return rc;
+}
+
+static rc_t PrintCurl() {
+    KNSManager *mgr = NULL;
+    rc_t rc = KNSManagerMake(&mgr);
+    if (rc != 0) {
+        OUTMSG(("KNSManagerMake = %R\n", rc));
+    }
+    if (rc == 0) {
+        rc_t rc = KNSManagerAvail(mgr);
+        OUTMSG(("KNSManagerAvail = %R", rc));
+        if (rc == 0) {
+            const char *version_string = NULL;
+            rc = KNSManagerCurlVersion(mgr, &version_string);
+            if (rc == 0) {
+                OUTMSG((". Curl Version = %s\n", version_string));
+            }
+            else {
+                OUTMSG((". KNSManagerCurlVersion = %R\n", rc));
+            }
+        }
+    }
+    RELEASE(KNSManager, mgr);
+    return rc;
+}
+
+static rc_t MainExec(const Main *self, const char *aArg, ...) {
+    rc_t rc = 0;
+    rc_t rce = 0;
+
+    KPathType type = kptNotFound;
+    bool alias = false;
+    int64_t directSz = -1;
+    int64_t localSz = -1;
+    int64_t remoteSz = -1;
+    size_t num_writ = 0;
+    char arg[PATH_MAX] = "";
+
+    va_list args;
+    va_start(args, aArg);
+
+    assert(self);
+
+    rc = string_vprintf(arg, sizeof arg, &num_writ, aArg, args);
+    if (rc != 0) {
+        OUTMSG(("string_vprintf(%s)=%R\n", aArg, rc));
+        return rc;
+    }
+    assert(num_writ < sizeof arg);
+
+    OUTMSG(("\n"));
+    rc = printString(arg);
+    if (rc != 0) {
+        OUTMSG(("printString=%R\n", rc));
+        return rc;
+    }
+    OUTMSG((" "));
+    rc = MainReport(self, arg, &directSz, &type, &alias);
+    OUTMSG(("\n"));
+
+    if (self->recursive && type == kptDir && !alias) {
+        uint32_t i = 0;
+        uint32_t count = 0;
+        KNamelist *list = NULL;
+        rc = KDirectoryList(self->dir, &list, NULL, NULL, arg);
+        if (rc != 0) {
+            OUTMSG(("KDirectoryList(%s)=%R ", arg, rc));
+        }
+        else {
+            rc = KNamelistCount(list, &count);
+            if (rc != 0) {
+                OUTMSG(("KNamelistCount(KDirectoryList(%s))=%R ", arg, rc));
+            }
+        }
+        for (i = 0; i < count && rc == 0; ++i) {
+            const char *name = NULL;
+            rc = KNamelistGet(list, i, &name);
+            if (rc != 0) {
+                OUTMSG(("KNamelistGet(KDirectoryList(%s), %d)=%R ",
+                    arg, i, rc));
+            }
+            else {
+                rc_t rc2 = MainExec(self, "%s/%s", arg, name);
+                if (rc2 != 0 && rce == 0) {
+                    rce = rc2;
+                }
+            }
+        }
+        RELEASE(KNamelist, list);
+    }
+    else {
+        if (MainHasTest(self, eResolve)) {
+            rc_t rc2 = MainResolve(self, arg, &localSz, &remoteSz);
+            if (rc == 0 && rc2 != 0) {
+                rc = rc2;
+            }
+        }
+
+        if (type == kptDatabase || type == kptNotFound) {
+            if (MainHasTest(self, eDependMissing)) {
+                rc_t rc2 = MainDepend(self, arg, true);
+                if (rc == 0 && rc2 != 0) {
+                    rc = rc2;
+                }
+            }
+
+            if (MainHasTest(self, eDependAll)) {
+                rc_t rc2 = MainDepend(self, arg, false);
+                if (rc == 0 && rc2 != 0) {
+                    rc = rc2;
+                }
+            }
+        }
+
+        if (MainHasTest(self, eResolve) && (
+            (directSz != -1 && localSz != -1 && directSz != localSz) ||
+            (remoteSz != -1 && localSz != -1 && localSz != remoteSz)))
+        {
+            OUTMSG(("FILE SIZES DO NOT MATCH: "));
+            if (directSz != -1 && localSz != -1 && directSz != remoteSz) {
+                OUTMSG(("direct=%ld != remote=%ld. ", directSz, remoteSz));
+            }
+            if (remoteSz != -1 && localSz != -1 && localSz != remoteSz) {
+                OUTMSG(("local=%ld != remote=%ld. ", localSz, remoteSz));
+            }
+            OUTMSG(("\n"));
+        }
+
+        OUTMSG(("\n"));
+    }
+
+    if (rce != 0 && rc == 0) {
+        rc = rce;
+    }
+    return rc;
+}
+
+static rc_t MainFini(Main *self) {
+    rc_t rc = 0;
+
+    assert(self);
+
+    RELEASE(VResolver, self->resolver);
+    RELEASE(KConfig, self->cfg);
+    RELEASE(VDBManager, self->mgr);
+    RELEASE(KDirectory, self->dir);
+
+    return rc;
+}
+
+#define ALIAS_NO_VDB  "N"
+#define OPTION_NO_VDB "no-vdb"
+static const char* USAGE_NO_VDB[] = { "do not call VDBManagerPathType", NULL };
+
+#define ALIAS_REC  "R"
+#define OPTION_REC "recursive"
+static const char* USAGE_REC[] = { "check object type recursively", NULL };
+
+OptDef Options[] = {                             /* needs_value, required */
+    { OPTION_NO_VDB, ALIAS_NO_VDB, NULL, USAGE_NO_VDB, 1, false, false },
+    { OPTION_REC   , ALIAS_REC   , NULL, USAGE_REC   , 1, false, false }
+};
+
+rc_t CC KMain(int argc, char *argv[]) {
+    rc_t rc = 0;
+    uint32_t pcount = 0;
+    uint32_t i = 0;
+    Args *args = NULL;
+    rc_t rc3 = 0;
+    int argi = 0;
+
+    Main prms;
+    char **argv2 = MainInit(&prms, &rc, argc, argv, &argi);
+
+    if (rc == 0) {
+        rc = ArgsMakeAndHandle(&args, argi, argv2, 1,
+            Options, sizeof Options / sizeof Options[0]);
+    }
+
+    if (MainHasTest(&prms, eCfg)) {
+        rc_t rc2 = MainPrintConfig(&prms);
+        if (rc == 0 && rc2 != 0) {
+            rc = rc2;
+        }
+    }
+
+    PrintCurl();
+
+    if (rc == 0) {
+        rc = ArgsOptionCount(args, OPTION_REC, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure to get '" OPTION_REC "' argument");
+        }
+        else {
+            if (pcount > 0) {
+                prms.recursive = true;
+            }
+        }
+    }
+
+    if (rc == 0) {
+        rc = ArgsOptionCount(args, OPTION_NO_VDB, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure to get '" OPTION_NO_VDB "' argument");
+        }
+        else {
+            if (pcount > 0) {
+                prms.noVDBManagerPathType = true;
+            }
+        }
+    }
+
+    if (rc == 0) {
+        rc = ArgsParamCount(args, &pcount);
+    }
+
+    for (i = 0; i < pcount; ++i) {
+        const char *name = NULL;
+        rc3 = ArgsParamValue(args, i, &name);
+        if (rc3 == 0) {
+            rc_t rc2 = MainExec(&prms, name);
+            if (rc == 0 && rc2 != 0) {
+                rc = rc2;
+            }
+        }
+    }
+    if (rc == 0 && rc3 != 0) {
+        rc = rc3;
+    }
+
+    RELEASE(Args, args);
+
+    {
+        rc_t rc2 = MainFini(&prms);
+        if (rc == 0 && rc2 != 0) {
+            rc = rc2;
+        }
+    }
+    free(argv2);
+
+    OUTMSG(("\n"));
+
+    return rc;
+}
diff --git a/tools/util/test-sra.vers b/tools/util/test-sra.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/util/test-sra.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/util/testld.vers b/tools/util/testld.vers
index 7dea76e..f90b1af 100644
--- a/tools/util/testld.vers
+++ b/tools/util/testld.vers
@@ -1 +1 @@
-1.0.1
+2.3.2
diff --git a/tools/util/txt2kdb.vers b/tools/util/txt2kdb.vers
index 7dea76e..f90b1af 100644
--- a/tools/util/txt2kdb.vers
+++ b/tools/util/txt2kdb.vers
@@ -1 +1 @@
-1.0.1
+2.3.2
diff --git a/tools/util/unix/syspass.c b/tools/util/unix/syspass.c
new file mode 100644
index 0000000..b464f39
--- /dev/null
+++ b/tools/util/unix/syspass.c
@@ -0,0 +1,62 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#define __EXTENSIONS__ 1
+
+#include "syspass-priv.h" /* get_pass */
+
+#include <klib/rc.h>
+
+#include <string.h> /* strdup */
+
+#include <stdlib.h>
+#include <unistd.h> /* getpass */
+
+rc_t get_pass(const char *prompt, char *buf, size_t bufsiz) {
+    if (prompt == NULL || buf == NULL) {
+        return RC(rcExe, rcFunction, rcEvaluating, rcParam, rcNull);
+    }
+
+    if (bufsiz == 0)
+    {   return 0; }
+
+    buf[0] = '\0';
+
+    {
+        const char *p = getpass(prompt);
+
+        if (p == NULL) {
+            return RC(rcExe, rcString, rcReading, rcFunction, rcFailed);
+        }
+        else if ((strlen(p) + 1) > bufsiz) {
+            return RC(rcExe, rcString, rcReading, rcBuffer, rcInsufficient);
+        }
+
+        strcpy(buf, p);
+
+        return 0;
+    }
+}
diff --git a/tools/util/vdb-lock.c b/tools/util/vdb-lock.c
index a62dd2b..2c82a18 100644
--- a/tools/util/vdb-lock.c
+++ b/tools/util/vdb-lock.c
@@ -115,8 +115,9 @@ rc_t CC KMain ( int argc, char *argv [] )
                 else
                 {
                     VDBManager *mgr;
-                    char full [ 4096 ];
 
+#if TOOLS_USE_SRAPATH != 0
+                    char full [ 4096 ];
                     SRAPath *sra_path;
                     rc = SRAPathMake ( & sra_path, NULL );
                     if ( rc == 0 )
@@ -129,6 +130,7 @@ rc_t CC KMain ( int argc, char *argv [] )
                         }
                         SRAPathRelease ( sra_path );
                     }
+#endif
 
                     rc = VDBManagerMakeUpdate ( & mgr, NULL );
                     if ( rc != 0 )
diff --git a/tools/util/vdb-lock.vers b/tools/util/vdb-lock.vers
index 04b10b4..f90b1af 100644
--- a/tools/util/vdb-lock.vers
+++ b/tools/util/vdb-lock.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/util/vdb-lock.vers.h b/tools/util/vdb-lock.vers.h
deleted file mode 100644
index 6eb4c4a..0000000
--- a/tools/util/vdb-lock.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define VDB_LOCK_VERS 0x02010007
diff --git a/tools/util/vdb-passwd.c b/tools/util/vdb-passwd.c
new file mode 100644
index 0000000..ee929f4
--- /dev/null
+++ b/tools/util/vdb-passwd.c
@@ -0,0 +1,276 @@
+/*==============================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "vdb-passwd.vers.h" /* VDB_PASSWD_VERS */
+
+#include "syspass-priv.h" /* get_pass */
+
+#include <kapp/main.h> /* KMain */
+
+#include <vfs/manager.h> /* VFSManager */
+#include <klib/log.h> /* LOGERR */
+#include <klib/out.h> /* OUTMSG */
+#include <klib/rc.h>
+
+#include <string.h> /* strcmp */
+#include <assert.h>
+#include <limits.h> /* PATH_MAX */
+
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+#define DISP_RC(rc, msg) (void)((rc == 0) ? 0 : LOGERR(klogInt, rc, msg))
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
+
+/******************************************************************************/
+static
+rc_t SetPwd(const char *password, bool no_prompt)
+{
+    rc_t rc = 0;
+
+    VFSManager *mgr = NULL;
+
+    assert(password);
+
+    if (rc == 0) {
+        rc = VFSManagerMake(&mgr);
+        DISP_RC(rc, "while calling VFSManagerMake");
+    }
+
+    if (rc == 0) {
+        char pwd_dir[PATH_MAX] = "";
+        rc = VFSManagerUpdateKryptoPassword
+            (mgr, password, strlen(password), pwd_dir, sizeof pwd_dir);
+        if (rc) {
+            if (no_prompt) {
+                LOGERR(klogInt, rc, "while updating the password");
+            }
+            else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcUpdating,
+                            rcDirectory, rcExcessive))
+            {
+                OUTMSG((
+                    "\nSecurity warning:\n"
+                    "Directory \"%s\" has excessive access permissions.\n"
+                    "Run \"chmod 700 %s\" to repair\n"
+                    "or ask your system administrator for assistance.\n",
+                    pwd_dir, pwd_dir));
+                rc = 0;
+            }
+            else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcUpdating,
+                rcSize, rcExcessive))
+            {
+                OUTMSG((
+                    "\nError:\n"
+                    "Password is too long.\n"
+                    "Maximum password size is %ld.\n",
+                    VFS_KRYPTO_PASSWORD_MAX_SIZE));
+            }
+            else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcUpdating,
+                rcEncryptionKey, rcInvalid))
+            {
+                OUTMSG((
+                    "\nError:\n"
+                    "Invalid character in password\n"
+                    "(CR/LF are not allowed)\n"));
+            }
+            else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcUpdating,
+                rcPath, rcExcessive))
+            {
+                OUTMSG((
+                    "\nError:\n"
+                    "Cannot set the password.\n"
+                    "Path to password file is too long.\n"
+                    "Your configuration should be updated.\n"));
+            }
+            else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcUpdating,
+                rcPath, rcIncorrect))
+            {
+                OUTMSG((
+                    "\nError:\n"
+                    "Cannot set the password.\n"
+                    "Existing path to password is not a file.\n"
+                    "Your configuration should be updated.\n"));
+            }
+            else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcUpdating,
+                rcPath, rcCorrupt))
+            {
+                OUTMSG((
+                    "\nError:\n"
+                    "Cannot set the password.\n"
+                    "Unknown file type for configured path/file name.\n"
+                    "Your configuration should be updated.\n"));
+            }
+            else if (rc == SILENT_RC(rcVFS, rcEncryptionKey, rcWriting,
+                rcFile, rcInsufficient))
+            {
+                OUTMSG((
+                    "\nError:\n"
+                    "Incomplete writes to temporary password file.\n"
+                    "Cannot set the password.\n"));
+            }
+            else {
+                OUTMSG(("\nCannot set the password. Please run "
+                 "\"perl configuration-assistant.perl\" and try again.\n"));
+            }
+        }
+    }
+
+    RELEASE(VFSManager, mgr);
+
+    return rc;
+}
+
+#define PWD_SZ 1024
+
+static
+rc_t run(bool quiet)
+{
+    rc_t rc = 0;
+
+    char password[PWD_SZ] = "";
+
+    bool empty = false;
+
+    KWrtHandler handler;
+    handler.writer = KOutWriterGet();
+    handler.data = KOutDataGet();
+
+    KOutHandlerSetStdErr();
+    KLogLibHandlerSet(NULL, NULL);
+
+    OUTMSG(("Changing password\n"));
+
+#if 1
+    if (rc == 0) {
+        int i = 0;
+        for (i = 0; i < 3 && rc == 0; ++i) {
+            rc = get_pass("New password:", password, sizeof password);
+            DISP_RC(rc, "cannot read the password");
+            if (rc != 0) {
+                break;
+            }
+            if (password[0] == '\0') {
+                OUTMSG(("BAD PASSWORD: too short\n"));
+            }
+            else {
+                break;
+            }
+        }
+        if (rc == 0 && password[0] == '\0') {
+            rc = RC(rcExe, rcString, rcReading, rcString, rcIncorrect);
+            empty = true;
+         /* LOGERR(klogErr, rc, "failed to set password"); */
+        }
+    }
+
+    if (rc == 0) {
+        char repassword[PWD_SZ] = "";
+        rc = get_pass("Retype new password:", repassword, sizeof repassword);
+        DISP_RC(rc, "cannot read the password");
+        if (rc == 0) {
+            if (strcmp(password, repassword)) {
+                OUTMSG(("Sorry, passwords do not match.\n"));
+                rc = RC(rcExe, rcString, rcReading, rcString, rcInconsistent);
+             /* LOGERR(klogErr, rc, "failed to set password"); */
+            }
+        }
+    }
+
+#else
+    strcpy(password, "1n2");
+#endif
+
+    if (rc == 0) {
+        rc = SetPwd(password, quiet);
+    }
+
+    KOutHandlerSet(handler.writer, handler.data);
+
+    if (empty)
+    {   rc = 0; }
+
+    return rc;
+}
+
+#define SL_OPTION "noprompt"
+#define SL_ALIAS "n"
+static const char *SL_USAGE[]
+    = { "Do not suggest running configuration-assistant", NULL };
+
+OptDef Options[] = { { SL_OPTION, SL_ALIAS, NULL, SL_USAGE, 1, false, false } };
+
+const char UsageDefaultName[] = "vdb-passwd";
+
+rc_t CC UsageSummary(const char *progname) {
+    KOutMsg("Update user's NCBI VDB crypto password\n"
+            "If not run with --quiet recommendations\n"
+            "are given if errors are detected.\n"
+            "\n");
+
+    return 0;
+}
+
+rc_t CC Usage(const Args *args) {
+    UsageSummary(UsageDefaultName);
+
+    KOutMsg("Options:\n");
+    HelpOptionsStandard ();
+
+    HelpVersion(UsageDefaultName, KAppVersion());
+
+    return 0;
+}
+
+ver_t CC KAppVersion(void) { return VDB_PASSWD_VERS; }
+
+rc_t CC KMain(int argc, char *argv[]) {
+    Args *args;
+    rc_t rc, orc;
+
+    rc = ArgsMakeAndHandle(&args, argc, argv, 0);
+    if (rc == 0)
+    {
+        uint32_t pcount;
+        rc_t orc;
+
+        /* non standard use of --quiet */
+        rc = ArgsOptionCount(args, OPTION_QUIET, &pcount);
+        if (rc)
+            LOGERR(klogErr, rc, "error check " OPTION_QUIET " option");
+
+        else
+            rc = run (pcount != 0);
+
+        orc = ArgsWhack(args);
+        if (rc == 0)
+            rc = orc;
+    }
+
+    return rc;
+}
diff --git a/tools/util/vdb-passwd.vers b/tools/util/vdb-passwd.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/util/vdb-passwd.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/util/vdb-unlock.c b/tools/util/vdb-unlock.c
index a0a97fe..cdcba36 100644
--- a/tools/util/vdb-unlock.c
+++ b/tools/util/vdb-unlock.c
@@ -117,8 +117,9 @@ rc_t CC KMain ( int argc, char *argv [] )
                 else
                 {
                     VDBManager *mgr;
-                    char full [ 4096 ];
 
+#if TOOLS_USE_SRAPATH != 0
+                    char full [ 4096 ];
                     SRAPath *sra_path;
                     rc = SRAPathMake ( & sra_path, NULL );
                     if ( rc == 0 )
@@ -131,6 +132,7 @@ rc_t CC KMain ( int argc, char *argv [] )
                         }
                         SRAPathRelease ( sra_path );
                     }
+#endif
 
                     rc = VDBManagerMakeUpdate ( & mgr, NULL );
                     if ( rc != 0 )
diff --git a/tools/util/vdb-unlock.vers b/tools/util/vdb-unlock.vers
index 04b10b4..f90b1af 100644
--- a/tools/util/vdb-unlock.vers
+++ b/tools/util/vdb-unlock.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/util/vdb-unlock.vers.h b/tools/util/vdb-unlock.vers.h
deleted file mode 100644
index f109f03..0000000
--- a/tools/util/vdb-unlock.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define VDB_UNLOCK_VERS 0x02010007
diff --git a/tools/util/win/syspass.c b/tools/util/win/syspass.c
new file mode 100644
index 0000000..745b0cc
--- /dev/null
+++ b/tools/util/win/syspass.c
@@ -0,0 +1,53 @@
+/*===========================================================================
+*
+*                            PUBLIC DOMAIN NOTICE
+*               National Center for Biotechnology Information
+*
+*  This software/database is a "United States Government Work" under the
+*  terms of the United States Copyright Act.  It was written as part of
+*  the author's official duties as a United States Government employee and
+*  thus cannot be copyrighted.  This software/database is freely available
+*  to the public for use. The National Library of Medicine and the U.S.
+*  Government have not placed any restriction on its use or reproduction.
+*
+*  Although all reasonable efforts have been taken to ensure the accuracy
+*  and reliability of the software and data, the NLM and the U.S.
+*  Government do not and cannot warrant the performance or results that
+*  may be obtained by using this software or data. The NLM and the U.S.
+*  Government disclaim all warranties, express or implied, including
+*  warranties of performance, merchantability or fitness for any particular
+*  purpose.
+*
+*  Please cite the author in any work or product based on this material.
+*
+* ===========================================================================
+*
+*/
+
+#include "syspass-priv.h" /* get_pass */
+
+#include <klib/rc.h>
+
+#include <conio.h> /* _getch */
+#include <stdio.h>
+
+rc_t get_pass(const char *prompt, char *buf, size_t bufsiz) {
+    if (prompt == NULL || buf == NULL) {
+        return RC(rcExe, rcFunction, rcEvaluating, rcParam, rcNull);
+    }
+
+    fprintf(stderr, "%s", prompt);
+
+    {
+        size_t i = 0;
+        for (i = 0; i < bufsiz; ++i) {
+            buf[i] = _getch();
+            if (buf[i] == '\r') {
+                fprintf(stderr, "\r\n");
+                buf[i] = '\0';
+                return 0;
+            }
+        }
+        return RC(rcExe, rcString, rcReading, rcBuffer, rcInsufficient);
+    }
+}
diff --git a/tools/vdb-config/Makefile b/tools/vdb-config/Makefile
index 1971ef6..9147b01 100644
--- a/tools/vdb-config/Makefile
+++ b/tools/vdb-config/Makefile
@@ -25,7 +25,7 @@
 
 default: std
 
-TOP ?= $(abspath ../..)
+TOP ?= $(shell ../../build/abspath.sh ../..)
 MODULE = tools/vdb-config
 
 include $(TOP)/build/Makefile.env
@@ -42,15 +42,13 @@ ALL_TOOLS = \
 #-------------------------------------------------------------------------------
 # outer targets
 #
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
-all std: makedirs vers-includes
+all std: vers-includes
 	@ $(MAKE_CMD) $(TARGDIR)/std
 
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
 	@ $(MAKE_CMD) $(BINDIR)/$@
 
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
 
 #-------------------------------------------------------------------------------
 # std
@@ -61,6 +59,13 @@ $(TARGDIR)/std: \
 .PHONY: $(TARGDIR)/std
 
 #-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
 # clean
 #
 clean: stdclean
@@ -89,12 +94,14 @@ VDB_CONFIG_LIB = \
 	-lsraschema \
 	-lvdb \
 	-lkdb \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
 	-lkfg \
 	-lkfs \
+	-lkproc \
 	-lklib \
-	-lbz2 \
-	-ldl \
-	-lz
+    -lm
 
 $(BINDIR)/vdb-config: $(VDB_CONFIG_OBJ)
 	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_CONFIG_LIB)
diff --git a/tools/vdb-config/vdb-config.c b/tools/vdb-config/vdb-config.c
index 5cd7a1b..75cf64a 100644
--- a/tools/vdb-config/vdb-config.c
+++ b/tools/vdb-config/vdb-config.c
@@ -23,13 +23,17 @@
 * ===========================================================================
 *
 */
+
 #include "vdb-config.vers.h"
 
 #include <kapp/main.h>
 
+#include <vdb/vdb-priv.h> /* VDBManagerListExternalSchemaModules */
+#include <vdb/manager.h> /* VDBManager */
+
 #include <kfg/kfg-priv.h> /* KConfig */
 
-#include <kfs/kfs-priv.h> /* KPathGetCWD */
+#include <vfs/path-priv.h> /* KPathGetCWD */
 #include <kfs/directory.h>
 #include <kfs/file.h>
 
@@ -39,16 +43,18 @@
 #include <klib/out.h> /* OUTMSG */
 #include <klib/rc.h> /* RC */
 
+#include <sysalloc.h> /* redefine malloc etc calls */
 #include <os-native.h> /* SHLX */
 
 #include <assert.h>
 #include <errno.h>
-#include <limits.h> /* PATH_MAX */
 #include <stdio.h> /* scanf */
 #include <stdlib.h> /* getenv */
 #include <string.h> /* memset */
 /* #include <unistd.h> access */
 
+#include <limits.h> /* PATH_MAX */
+
 #ifndef PATH_MAX
 #define PATH_MAX 4096
 #endif
@@ -57,7 +63,7 @@
 #define DISP_RC2(rc, name, msg) (void)((rc == 0) ? 0 : \
     PLOGERR(klogInt, (klogInt, rc, \
         "$(name): $(msg)", "name=%s,msg=%s", name, msg)))
-#define DESTRUCT(type, obj) do { rc_t rc2 = type##Release(obj); \
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
     if (rc2 && !rc) { rc = rc2; } obj = NULL; } while (false)
 
 #define ALIAS_ALL    "a"
@@ -80,23 +86,39 @@ static const char* USAGE_ENV[] = { "print shell variables", NULL };
 #define OPTION_FIL   "files"
 static const char* USAGE_FIL[] = { "print loaded files", NULL };
 
+#define ALIAS_IMP    NULL
+#define OPTION_IMP   "import"
+static const char* USAGE_IMP[] = { "import ngc file", NULL };
+
 #define ALIAS_MOD    "m"
 #define OPTION_MOD   "modules"
 static const char* USAGE_MOD[] = { "print external modules", NULL };
 
+#define ALIAS_OUT    "o"
+#define OPTION_OUT   "output"
+static const char* USAGE_OUT[] = { "output type: one of (x n), "
+    "where 'x' is xml (default), 'n' is native", NULL };
+
 #define ALIAS_CFG    "p"
 #define OPTION_CFG   "cfg"
 static const char* USAGE_CFG[] = { "print current configuration", NULL };
 
+#define ALIAS_SET    "s"
+#define OPTION_SET   "set"
+static const char* USAGE_SET[] = { "set configuration node value", NULL };
+
 OptDef Options[] =
-{
+{                                         /* needs_value, required */
       { OPTION_ALL, ALIAS_ALL, NULL, USAGE_ALL, 1, false, false }
     , { OPTION_CFG, ALIAS_CFG, NULL, USAGE_CFG, 1, false, false }
     , { OPTION_DIR, ALIAS_DIR, NULL, USAGE_DIR, 1, false, false }
     , { OPTION_ENV, ALIAS_ENV, NULL, USAGE_ENV, 1, false, false }
     , { OPTION_FIL, ALIAS_FIL, NULL, USAGE_FIL, 1, false, false }
+    , { OPTION_IMP, ALIAS_IMP, NULL, USAGE_IMP, 1, true , false }
     , { OPTION_MOD, ALIAS_MOD, NULL, USAGE_MOD, 1, false, false }
     , { OPTION_NEW, ALIAS_NEW, NULL, USAGE_NEW, 1, false, false }
+    , { OPTION_OUT, ALIAS_OUT, NULL, USAGE_OUT, 1, true , false }
+    , { OPTION_SET, ALIAS_SET, NULL, USAGE_SET, 1, true , false }
 };
 
 rc_t CC UsageSummary (const char * progname) {
@@ -129,6 +151,15 @@ rc_t CC Usage(const Args* args) {
 /*  HelpOptionLine (ALIAS_NEW, OPTION_MOD, NULL, USAGE_NEW); */
     HelpOptionLine (ALIAS_FIL, OPTION_FIL, NULL, USAGE_FIL);
     HelpOptionLine (ALIAS_ENV, OPTION_ENV, NULL, USAGE_ENV);
+    HelpOptionLine (ALIAS_MOD, OPTION_MOD, NULL, USAGE_MOD);
+    KOutMsg ("\n");
+    HelpOptionLine (ALIAS_SET, OPTION_SET, "name=value", USAGE_SET);
+    KOutMsg ("\n");
+    HelpOptionLine (ALIAS_IMP, OPTION_IMP, "ngc-file", USAGE_IMP);
+    KOutMsg ("\n");
+    HelpOptionLine (ALIAS_OUT, OPTION_OUT, "x | n", USAGE_OUT);
+
+    KOutMsg ("\n");
 
     HelpOptionsStandard ();
 
@@ -141,9 +172,9 @@ const char UsageDefaultName[] = "vdb-config";
 
 ver_t CC KAppVersion(void) { return VDB_CONFIG_VERS; }
 
-static rc_t ArgsRelease(Args* self) { return ArgsWhack(self); }
-
-static void Indent(int n) {
+static void Indent(bool xml, int n) {
+    if (!xml)
+    {   return; }
     while (n--)
     {   OUTMSG(("  ")); }
 }
@@ -159,7 +190,9 @@ static rc_t KConfigNodeReadData(const KConfigNode* self,
     assert(*num_read <= blen);
     return rc;
 }
-static rc_t KConfigNodePrintChildNames(const KConfigNode* self,
+
+#define VDB_CONGIG_OUTMSG(args) do { if (xml) { OUTMSG(args); } } while (false)
+static rc_t KConfigNodePrintChildNames(bool xml, const KConfigNode* self,
     const char* name, int indent, const char* aFullpath)
 {
     rc_t rc = 0;
@@ -178,8 +211,9 @@ static rc_t KConfigNodePrintChildNames(const KConfigNode* self,
     if (rc == 0) {
         rc = KConfigNodeReadData(node, buffer, sizeof buffer, &num_read);
         hasData = num_read;
-        if (hasData)
-        { /* OUTMSG(("\n%s = \"%.*s\"\n\n", aFullpath, num_read, buffer)); */ }
+        if (hasData) {
+ /* VDB_CONGIG_OUTMSG(("\n%s = \"%.*s\"\n\n", aFullpath, num_read, buffer)); */
+        }
     }
     if (rc == 0)
     {   rc = KConfigNodeListChild(node, &names); }
@@ -188,16 +222,21 @@ static rc_t KConfigNodePrintChildNames(const KConfigNode* self,
         hasChildren = count;
     }
 
-    Indent(indent);
-    OUTMSG(("<%s", name));
+    Indent(xml, indent);
+    VDB_CONGIG_OUTMSG(("<%s", name));
     if (!hasChildren && !hasData)
-    {   OUTMSG(("/>")); }
+    {   VDB_CONGIG_OUTMSG(("/>\n")); }
     else
-    {   OUTMSG((">")); }
-    if (hasData)
-    {   OUTMSG(("%.*s", (int)num_read, buffer)); }
+    {   VDB_CONGIG_OUTMSG((">")); }
+    if (hasData) {
+        if (xml) {
+            VDB_CONGIG_OUTMSG(("%.*s", (int)num_read, buffer));
+        }
+        else
+        {   OUTMSG(("%s = \"%.*s\"\n", aFullpath, (int)num_read, buffer)); }
+    }
     if (hasChildren)
-    {   OUTMSG(("\n"));}
+    {   VDB_CONGIG_OUTMSG(("\n"));}
 
     if (hasChildren) {
         for (i = 0; i < count && rc == 0; ++i) {
@@ -216,19 +255,19 @@ static rc_t KConfigNodePrintChildNames(const KConfigNode* self,
             }
             if (rc == 0) {
                 rc = KConfigNodePrintChildNames
-                    (node, name, indent + 1, fullpath);
+                    (xml, node, name, indent + 1, fullpath);
             }
             free(fullpath);
         }
     }
 
     if (hasChildren)
-    {   Indent(indent); }
+    {   Indent(xml, indent); }
     if (hasChildren || hasData)
-    {   OUTMSG(("</%s>\n",name)); }
+    {   VDB_CONGIG_OUTMSG(("</%s>\n",name)); }
 
-    DESTRUCT(KNamelist, names);
-    DESTRUCT(KConfigNode, node);
+    RELEASE(KNamelist, names);
+    RELEASE(KConfigNode, node);
     return rc;
 }
 
@@ -237,6 +276,13 @@ typedef struct Params {
     uint32_t argsParamIdx;
     uint32_t argsParamCnt;
 
+    bool xml;
+
+    const char* setValue;
+
+    const char* ngc;
+
+    bool modeSetNode;
     bool modeCreate;
     bool modeShowCfg;
     bool modeShowEnv;
@@ -272,7 +318,30 @@ static rc_t ParamsConstruct(int argc, char* argv[], Params* prm) {
             ++count;
         }
 
-        rc = ArgsOptionCount (args, OPTION_CFG, &pcount);
+        prm->xml = true;
+        rc = ArgsOptionCount(args, OPTION_OUT, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure to get '" OPTION_OUT "' argument");
+            break;
+        }
+        if (pcount) {
+            const char* dummy = NULL;
+            rc = ArgsOptionValue(args, OPTION_OUT, 0, &dummy);
+            if (rc) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_OUT "' argument");
+                break;
+            }
+            if (!strcmp(dummy, "n")) {
+                prm->xml = false;
+            }
+            else if (strcmp(dummy, "x")) {
+                rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+                LOGERR(klogErr, rc, "Bad " OPTION_OUT " value");
+                break;
+            }
+        }
+
+        rc = ArgsOptionCount(args, OPTION_CFG, &pcount);
         if (rc) {
             LOGERR(klogErr, rc, "Failure to get '" OPTION_CFG "' argument");
             break;
@@ -284,7 +353,7 @@ static rc_t ParamsConstruct(int argc, char* argv[], Params* prm) {
             }
         }
 
-        rc = ArgsOptionCount (args, OPTION_ENV, &pcount);
+        rc = ArgsOptionCount(args, OPTION_ENV, &pcount);
         if (rc) {
             LOGERR(klogErr, rc, "Failure to get '" OPTION_ENV "' argument");
             break;
@@ -294,7 +363,7 @@ static rc_t ParamsConstruct(int argc, char* argv[], Params* prm) {
             ++count;
         }
 
-        rc = ArgsOptionCount (args, OPTION_FIL, &pcount);
+        rc = ArgsOptionCount(args, OPTION_FIL, &pcount);
         if (rc) {
             LOGERR(klogErr, rc, "Failure to get '" OPTION_FIL "' argument");
             break;
@@ -304,7 +373,20 @@ static rc_t ParamsConstruct(int argc, char* argv[], Params* prm) {
             ++count;
         }
 
-        rc = ArgsOptionCount (args, OPTION_MOD, &pcount);
+        rc = ArgsOptionCount(args, OPTION_IMP, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure to get '" OPTION_IMP "' argument");
+            break;
+        }
+        if (pcount) {
+            rc = ArgsOptionValue(args, OPTION_IMP, 0, &prm->ngc);
+            if (rc) {
+                LOGERR(klogErr, rc, "Failure to get '" OPTION_IMP "' argument");
+                break;
+            }
+        }
+
+        rc = ArgsOptionCount(args, OPTION_MOD, &pcount);
         if (rc) {
             LOGERR(klogErr, rc, "Failure to get '" OPTION_MOD "' argument");
             break;
@@ -314,7 +396,8 @@ static rc_t ParamsConstruct(int argc, char* argv[], Params* prm) {
             ++count;
         }
 
-        rc = ArgsOptionCount (args, OPTION_NEW, &pcount);
+#if 0
+        rc = ArgsOptionCount(args, OPTION_NEW, &pcount);
         if (rc) {
             LOGERR(klogErr, rc, "Failure to get '" OPTION_NEW "' argument");
             break;
@@ -323,8 +406,9 @@ static rc_t ParamsConstruct(int argc, char* argv[], Params* prm) {
             prm->modeCreate = true;
             ++count;
         }
+#endif
 
-        rc = ArgsOptionCount (args, OPTION_DIR, &pcount);
+        rc = ArgsOptionCount(args, OPTION_DIR, &pcount);
         if (rc) {
             LOGERR(klogErr, rc, "Failure to get '" OPTION_DIR "' argument");
             break;
@@ -334,7 +418,29 @@ static rc_t ParamsConstruct(int argc, char* argv[], Params* prm) {
             ++count;
         }
 
-        rc = ArgsOptionCount (args, OPTION_ALL, &pcount);
+        rc = ArgsOptionCount(args, OPTION_SET, &pcount);
+        if (rc) {
+            LOGERR(klogErr, rc, "Failure to get '" OPTION_SET "' argument");
+            break;
+        }
+        if (pcount) {
+            rc = ArgsOptionValue(args, OPTION_SET, 0, &prm->setValue);
+            if (rc == 0) {
+                const char* p = strchr(prm->setValue, '=');
+                if (p == NULL || *(p + 1) == '\0') {
+                    rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+                    LOGERR(klogErr, rc, "Bad " OPTION_SET " value");
+                    break;
+                }
+                prm->modeSetNode = true;
+                prm->modeCreate = prm->modeShowCfg = prm->modeShowEnv
+                    = prm->modeShowFiles = prm->modeShowLoadPath
+                    = prm->modeShowModules = false;
+                count = 1;
+            }
+        }
+
+        rc = ArgsOptionCount(args, OPTION_ALL, &pcount);
         if (rc) {
             LOGERR(klogErr, rc, "Failure to get '" OPTION_ALL "' argument");
             break;
@@ -342,7 +448,8 @@ static rc_t ParamsConstruct(int argc, char* argv[], Params* prm) {
         if (pcount
             || ( !prm->modeShowCfg && ! prm->modeShowLoadPath
               && !prm->modeShowEnv && !prm->modeShowFiles
-              && !prm->modeShowModules && !prm->modeCreate ))
+              && !prm->modeShowModules && !prm->modeCreate
+              && !prm->modeSetNode && !prm->ngc))
             /* show all by default */
         {
             prm->modeShowCfg = prm->modeShowEnv = prm->modeShowFiles = true;
@@ -374,7 +481,7 @@ static rc_t ParamsGetNextParam(Params* prm, const char** param) {
 static rc_t ParamsDestruct(Params* prm) {
     rc_t rc = 0;
     assert(prm);
-    DESTRUCT(Args, prm->args);
+    RELEASE(Args, prm->args);
     return rc;
 }
 
@@ -386,7 +493,7 @@ rc_t privReadStdinLine(char* buf, size_t bsize, bool destroy)
     static uint64_t pos = 0;
     size_t num_read = 0;
     if (destroy) {
-        DESTRUCT(KFile, std_in);
+        RELEASE(KFile, std_in);
         pos = 0;
         return rc;
     }
@@ -496,7 +603,7 @@ static rc_t CreateConfig(char* argv0) {
         if (home)
         {   def = home; }
         else {
-            rc = KPathGetCWD(cwd, sizeof cwd);
+            rc = VPathGetCWD(cwd, sizeof cwd);
             if (rc == 0 && cwd[0])
             {   def = cwd; }
             else
@@ -547,7 +654,7 @@ static rc_t CreateConfig(char* argv0) {
         {   break; }
         rc = KDirectoryOpenDirRead(native, &dir, false, refseq);
         if (rc == 0) {
-            DESTRUCT(KDirectory, dir);
+            RELEASE(KDirectory, dir);
             break;
         }
         else if (GetRCObject(rc) == rcPath
@@ -608,21 +715,22 @@ static rc_t CreateConfig(char* argv0) {
                 pos += num_writ;
             }
         }
-        DESTRUCT(KFile, f);
+        RELEASE(KFile, f);
     }
     free(mod);
     free(wmod);
     free(refseq);
     free(location);
-    DESTRUCT(KDirectory, dir);
-    DESTRUCT(KDirectory, native);
-    DESTRUCT(KFile, std_in);
+    RELEASE(KDirectory, dir);
+    RELEASE(KDirectory, native);
+    RELEASE(KFile, std_in);
     DestroyStdin();
     return rc;
 }
 
 
 #ifndef _STATIC
+#if 0
 static rc_t CC scan_mod_dir(const KDirectory* dir,
     uint32_t type, const char* name, void* data)
 {
@@ -670,18 +778,50 @@ static rc_t ShowModDir(const KDirectory* native, char* path) {
     }
     return rc;
 }
-
 #endif
+#endif
+
 static rc_t ShowModules(const KConfig* cfg, const Params* prm) {
     rc_t rc = 0;
 #ifdef _STATIC
     OUTMSG(("<!-- Modules are not used in static build -->\n"));
 #else
+    const VDBManager* mgr = NULL;
+    KNamelist* list = NULL;
+    OUTMSG(("<!-- Modules -->\n"));
+    rc = VDBManagerMakeRead(&mgr, NULL);
+    DISP_RC(rc, "while calling VDBManagerMakeRead");
+    if (rc == 0) {
+        rc = VDBManagerListExternalSchemaModules(mgr, &list);
+        DISP_RC(rc, "while calling VDBManagerListExternalSchemaModules");
+    }
+    if (rc == 0) {
+        uint32_t count = 0;
+        rc = KNamelistCount(list, &count);
+        DISP_RC(rc, "while calling KNamelistCount "
+            "on VDBManagerListExternalSchemaModules result");
+        if (rc == 0) {
+            int64_t i = 0;
+            for (i = 0; i < count && rc == 0; ++i) {
+                const char* name = NULL;
+                rc = KNamelistGet(list, i, &name);
+                DISP_RC(rc, "while calling KNamelistGet "
+                    "on VDBManagerListExternalSchemaModules result");
+                if (rc == 0) {
+                    OUTMSG(("%s\n", name));
+                }
+            }
+        }
+    }
+    OUTMSG(("\n"));
+    RELEASE(KNamelist, list);
+    RELEASE(VDBManager, mgr);
+#endif
+#if 0
     KDirectory* dir = NULL;
     const char* paths[] = { "vdb/module/paths", "vdb/wmodule/paths" };
     int i = 0;
     assert(cfg);
-    OUTMSG(("<!-- Modules -->\n"));
     for (i = 0; i < sizeof paths / sizeof paths[0] && rc == 0; ++i) {
         const KConfigNode* node = NULL;
         if (rc == 0) {
@@ -717,19 +857,72 @@ static rc_t ShowModules(const KConfig* cfg, const Params* prm) {
                     }
                 }
             }
-            DESTRUCT(KConfigNode, node);
+            RELEASE(KConfigNode, node);
         }
     }
-    DESTRUCT(KDirectory, dir);
+    RELEASE(KDirectory, dir);
 #endif
     return rc;
 }
 
+static rc_t SetNode(KConfig* cfg, const Params* prm) {
+    rc_t rc = 0;
+
+    KConfigNode* node = NULL;
+    char* name = NULL;
+    char* val  = NULL;
+
+    assert(cfg && prm && prm->setValue);
+
+    name = strdup(prm->setValue);
+    if (name == NULL)
+    {   return RC(rcExe, rcStorage, rcAllocating, rcMemory, rcExhausted); }
+
+    val = strchr(name, '=');
+    if (val == NULL || *(val + 1) == '\0') {
+        rc_t rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid);
+        LOGERR(klogErr, rc, "Bad " OPTION_SET " value");
+    }
+
+    if (rc == 0) {
+        *(val++) = '\0';
+
+        rc = KConfigOpenNodeUpdate(cfg, &node, name);
+        if (rc != 0) {
+            PLOGERR(klogErr, (klogErr, rc,
+                "Cannot open node '$(name)' for update", "name=%s", name));
+        }
+    }
+
+    if (rc == 0) {
+        assert(val);
+        rc = KConfigNodeWrite(node, val, strlen(val));
+        if (rc != 0) {
+            PLOGERR(klogErr, (klogErr, rc,
+                "Cannot write value '$(val) to node '$(name)'",
+                "val=%s,name=%s", val, name));
+        }
+    }
+
+    if (rc == 0) {
+        rc = KConfigCommit(cfg);
+        DISP_RC(rc, "while calling KConfigCommit");
+    }
+
+    free(name);
+    name = NULL;
+
+    RELEASE(KConfigNode, node);
+    return rc;
+}
+
 static rc_t ShowConfig(const KConfig* cfg, Params* prm) {
     rc_t rc = 0;
     bool hasAny = false;
     bool hasQuery = false;
+    bool xml = true;
     assert(cfg && prm);
+    xml = prm->xml;
     while (rc == 0) {
         KNamelist* names = NULL;
         const KConfigNode* node = NULL;
@@ -765,9 +958,12 @@ static rc_t ShowConfig(const KConfig* cfg, Params* prm) {
             }
             else {
                 char *c = memrchr(root, '/', len);
-                if (c != NULL)
-                {   nodeName = c + 1; }
-                else { nodeName = root; }
+                if (c != NULL) {
+                    nodeName = c + 1;
+                }
+                else {
+                    nodeName = root;
+                }
             }
             assert(nodeName && nodeName[0]);
             nodeNameL = strlen(nodeName);
@@ -792,9 +988,15 @@ static rc_t ShowConfig(const KConfig* cfg, Params* prm) {
             if (rc == 0 && num_read > 0) {
                 if (prm->showMultiple)
                 {   OUTMSG(("<!-- Configuration node %s -->\n", root)); }
-                OUTMSG(("<%.*s>", nodeNameL, nodeName));
-                OUTMSG(("%.*s", (int)num_read, buf));
-                OUTMSG(("</%.*s>\n", nodeNameL, nodeName));
+                if (xml) {
+                    VDB_CONGIG_OUTMSG(("<%.*s>", nodeNameL, nodeName));
+                    VDB_CONGIG_OUTMSG(("%.*s", (int)num_read, buf));
+                    VDB_CONGIG_OUTMSG(("</%.*s>\n", nodeNameL, nodeName));
+                }
+                else {
+                    OUTMSG(("%.*s = \"%.*s\"\n",
+                        nodeNameL, nodeName, (int)num_read, buf));
+                }
                 hasAny = true;
             }
         }
@@ -803,11 +1005,11 @@ static rc_t ShowConfig(const KConfig* cfg, Params* prm) {
                 if (nodeName[0] != '/') {
                     if (prm->showMultiple)
                     {   OUTMSG(("<!-- Configuration node %s -->\n", root)); }
-                    OUTMSG(("<%.*s>\n", nodeNameL, nodeName));
+                    VDB_CONGIG_OUTMSG(("<%.*s>\n", nodeNameL, nodeName));
                 } else {
                     if (prm->showMultiple)
                     {   OUTMSG(("<!-- Current configuration -->\n")); }
-                    OUTMSG(("<Config>\n"));
+                    VDB_CONGIG_OUTMSG(("<Config>\n"));
                 }
                 hasAny = true;
                 ++indent;
@@ -819,11 +1021,12 @@ static rc_t ShowConfig(const KConfig* cfg, Params* prm) {
                 if (rc == 0) {
                     char* fullname = NULL;
                     if (strcmp(root, "/") == 0) {
-                        fullname = calloc(1, 1);
+                        fullname = malloc(strlen(name) + 2);
                         if (fullname == NULL) {
                             rc = RC(rcExe,
                                 rcStorage, rcAllocating, rcMemory, rcExhausted);
                         }
+                        sprintf(fullname, "/%s", name);
                     }
                     else {
                         fullname = strdup(root);
@@ -834,7 +1037,7 @@ static rc_t ShowConfig(const KConfig* cfg, Params* prm) {
                     }
                     if (rc == 0) {
                         rc = KConfigNodePrintChildNames
-                            (node, name, indent, fullname);
+                            (xml, node, name, indent, fullname);
                         hasAny = true;
                     }
                     free(fullname);
@@ -842,17 +1045,26 @@ static rc_t ShowConfig(const KConfig* cfg, Params* prm) {
                 }
             }
             if (rc == 0) {
-                if (nodeName[0] != '/')
-                {   OUTMSG(("</%.*s>\n", nodeNameL, nodeName)); }
-                else { OUTMSG(("</Config>\n")); }
+                if (nodeName[0] != '/') {
+                    VDB_CONGIG_OUTMSG(("</%.*s>\n", nodeNameL, nodeName));
+                }
+                else {
+                    VDB_CONGIG_OUTMSG(("</Config>\n"));
+                }
             }
         }
 
-        DESTRUCT(KConfigNode, node);
-        DESTRUCT(KNamelist, names);
+        RELEASE(KConfigNode, node);
+        RELEASE(KNamelist, names);
 
-        if (rc == 0 && hasAny)
-        {   OUTMSG(("\n")); }
+        if (rc == 0) {
+            if (hasAny) {
+                OUTMSG(("\n"));
+            }
+            else if (nodeNameL > 0 && nodeName != NULL) {
+                VDB_CONGIG_OUTMSG(("<%.*s/>\n", nodeNameL, nodeName));
+            }
+        }
 
         if (!hasQuery)
         {   break; }
@@ -889,6 +1101,9 @@ static rc_t ShowFiles(const KConfig* cfg, const Params* prm) {
     }
     if (rc == 0 && hasAny)
     {   OUTMSG(("\n")); }
+
+    RELEASE(KNamelist, names);
+
     return rc;
 }
 
@@ -897,7 +1112,8 @@ static void ShowEnv(const Params* prm) {
     const char * env_list [] = {
         "KLIB_CONFIG",
         "VDB_CONFIG",
-        "VDBCONFIG"
+        "VDBCONFIG",
+        "LD_LIBRARY_PATH"
     };
     int i = 0;
 
@@ -924,8 +1140,9 @@ rc_t CC KMain(int argc, char* argv[]) {
     Params prm;
     KConfig* cfg = NULL;
 
-    if (rc == 0)
-    {   rc = ParamsConstruct(argc, argv, &prm); }
+    if (rc == 0) {
+        rc = ParamsConstruct(argc, argv, &prm);
+    }
 
     if (rc == 0) {
         rc = KConfigMake(&cfg, NULL);
@@ -933,34 +1150,57 @@ rc_t CC KMain(int argc, char* argv[]) {
     }
 
     if (rc == 0) {
-        if (prm.modeShowCfg)
-        {   rc = ShowConfig(cfg, &prm); }
+        if (prm.ngc) {
+            rc = KConfigImportNgc(cfg, prm.ngc, NULL);
+            if (rc == 0) {
+                rc = KConfigCommit(cfg);
+            }
+            if (rc == 0) {
+                OUTMSG(("%s was imported\n", prm.ngc));
+            }
+        }
+        else if (prm.modeSetNode) {
+            rc_t rc3 = SetNode(cfg, &prm);
+            if (rc3 != 0 && rc == 0) {
+                rc = rc3;
+            }
+        }
+        if (prm.modeShowCfg) {
+            rc_t rc3 = ShowConfig(cfg, &prm);
+            if (rc3 != 0 && rc == 0) {
+                rc = rc3;
+            }
+        }
         if (prm.modeShowFiles) {
             rc_t rc3 = ShowFiles(cfg, &prm);
-            if (rc3 != 0 && rc == 0)
-            {   rc = rc3; }
+            if (rc3 != 0 && rc == 0) {
+                rc = rc3;
+            }
         }
         if (prm.modeShowModules) {
             rc_t rc3 = ShowModules(cfg, &prm);
-            if (rc3 != 0 && rc == 0)
-            {   rc = rc3; }
+            if (rc3 != 0 && rc == 0) {
+                rc = rc3;
+            }
         }
         if (prm.modeShowLoadPath) {
             const char* path = NULL;
             rc_t rc3 = KConfigGetLoadPath(cfg, &path);
             if (rc3 == 0) {
-                if (path != NULL && path[0])
-                {   OUTMSG(("%s\n", path)); }
+                if (path != NULL && path[0]) {
+                    OUTMSG(("%s\n", path));
+                }
+            }
+            else if (rc == 0) {
+                rc = rc3;
             }
-            else if (rc == 0)
-            {   rc = rc3; }
         }
     }
 
     if (prm.modeShowEnv)
     {   ShowEnv(&prm); }
 
-    DESTRUCT(KConfig, cfg);
+    RELEASE(KConfig, cfg);
 
     if (rc == 0 && prm.modeCreate)
     {   rc = CreateConfig(argv[0]); }
diff --git a/tools/vdb-config/vdb-config.vers b/tools/vdb-config/vdb-config.vers
index 04b10b4..f90b1af 100644
--- a/tools/vdb-config/vdb-config.vers
+++ b/tools/vdb-config/vdb-config.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/vdb-config/vdb-config.vers.h b/tools/vdb-config/vdb-config.vers.h
deleted file mode 100644
index 7be5280..0000000
--- a/tools/vdb-config/vdb-config.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define VDB_CONFIG_VERS 0x02010007
diff --git a/tools/vdb-copy/#Makefile# b/tools/vdb-copy/#Makefile#
new file mode 100644
index 0000000..e404a18
--- /dev/null
+++ b/tools/vdb-copy/#Makefile#
@@ -0,0 +1,137 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/vdb-copy
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	vdb-copy
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+	@ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(ALL_TOOLS): vers-includes
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: $(addsuffix _tag,$(ALL_TOOLS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+
+#-------------------------------------------------------------------------------
+# vdb-copy
+#  vdb copy tool
+#
+$(BINDIR)/vdb-copy: $(NCBIDIR)/vdb-copy.kfg 
+
+$(NCBIDIR)/vdb-copy.kfg: $(SRCDIR)/vdb-copy.kfg
+	cp $^ $@
+
+VDB_COPY_SRC = \
+	num-gen \
+	context \
+	helper \
+	coldefs \
+	get_platform \
+	namelist_tools \
+	progressbar \
+	copy_meta \
+	type_matcher \
+	redactval \
+	config_values \
+	vdb-copy
+
+VDB_COPY_OBJ = \
+	$(addsuffix .$(OBJX),$(VDB_COPY_SRC))
+
+VDB_COPY_LIB = \
+	-ssrapath \
+	-swsraschema \
+	-dwsraxf \
+	-dwvxf \
+	-lwvdb \
+	-lwkdb \
+	-lkapp \
+	-lvfs \
+	-lkrypto \
+	-lkfg \
+	-lkfs \
+	-lksrch \
+	-lklib \
+	-lkproc \
+	-lm
+
+$(BINDIR)/vdb-copy: $(VDB_COPY_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_COPY_LIB)
+
+vdb-copy_tag:
+	@ $(TOP)/build/tag-module.sh $(MODULE) vdb-copy $(VDB_COPY_OBJ)
diff --git a/tools/vdb-copy/Makefile b/tools/vdb-copy/Makefile
index 34d5ae5..eea6e0d 100644
--- a/tools/vdb-copy/Makefile
+++ b/tools/vdb-copy/Makefile
@@ -25,7 +25,7 @@
 
 default: std
 
-TOP ?= $(abspath ../..)
+TOP ?= $(shell ../../build/abspath.sh ../..)
 MODULE = tools/vdb-copy
 
 include $(TOP)/build/Makefile.env
@@ -42,15 +42,13 @@ ALL_TOOLS = \
 #-------------------------------------------------------------------------------
 # outer targets
 #
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
-all std: makedirs vers-includes
+all std: vers-includes
 	@ $(MAKE_CMD) $(TARGDIR)/$@
 
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
 	@ $(MAKE_CMD) $(BINDIR)/$@
 
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
 
 #-------------------------------------------------------------------------------
 # all
@@ -69,18 +67,18 @@ $(TARGDIR)/std: \
 .PHONY: $(TARGDIR)/std
 
 #-------------------------------------------------------------------------------
-# clean
+# vers-includes
 #
-clean: stdclean
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
 
-.PHONY: clean
+.PHONY: $(TARGDIR)/vers-includes
 
 #-------------------------------------------------------------------------------
-# tag
+# clean
 #
-tag: $(addsuffix _tag,$(ALL_TOOLS))
+clean: stdclean
 
-.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+.PHONY: clean
 
 #-------------------------------------------------------------------------------
 # vdb-copy
@@ -111,23 +109,20 @@ VDB_COPY_OBJ = \
 VDB_COPY_LIB = \
 	-ssrapath \
 	-swsraschema \
-	-dwsraxf \
-	-dwvxf \
+	$(UPDATE_SCHEMA_LIBS) \
+	-lalign-reader \
 	-lwvdb \
 	-lwkdb \
 	-lkapp \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
 	-lkfg \
 	-lkfs \
 	-lksrch \
-	-lklib \
 	-lkproc \
-	-ldl \
-	-lz \
-	-lbz2 \
+	-lklib \
 	-lm
 
 $(BINDIR)/vdb-copy: $(VDB_COPY_OBJ)
 	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_COPY_LIB)
-
-vdb-copy_tag:
-	@ $(TOP)/build/tag-module.sh $(MODULE) vdb-copy $(VDB_COPY_OBJ)
diff --git a/tools/vdb-copy/coldefs.c b/tools/vdb-copy/coldefs.c
index e4aca12..b89a2e8 100644
--- a/tools/vdb-copy/coldefs.c
+++ b/tools/vdb-copy/coldefs.c
@@ -28,9 +28,11 @@
 #include "helper.h"
 #include "definitions.h"
 
+#include <klib/text.h>
+#include <klib/printf.h>
+
 #include <sysalloc.h>
 
-#include <fmtdef.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
@@ -230,7 +232,7 @@ rc_t col_defs_add_to_rd_cursor( col_defs* defs, const VCursor *cursor, bool show
                     DISP_RC( rc, "col_defs_add_to_cursor:VCursorDatatype() failed" );
                     col->src_valid = ( rc == 0 );
                     if ( show && col->src_valid )
-                        OUTMSG(( "added to rd-cursor: >%s<\n", col->name ));
+                        KOutMsg( "added to rd-cursor: >%s<\n", col->name );
                 }
 
             }
@@ -322,9 +324,9 @@ rc_t col_defs_add_to_wr_cursor( col_defs* defs, const VCursor* cursor, bool show
                 if ( show )
                 {
                     if ( col->to_copy )
-                        OUTMSG(( "added to wr-cursor: >%s<\n", col->name ));
+                        KOutMsg( "added to wr-cursor: >%s<\n", col->name );
                     else
-                        OUTMSG(( "cannot add >%s<\n", col->name ));
+                        KOutMsg( "cannot add >%s<\n", col->name );
                 }
             }
     }
@@ -545,11 +547,10 @@ uint32_t col_defs_count_copy_cols( col_defs* defs )
  * given list of column-names the to copy-flag is cleared
  * does not require an open cursor.
 */
-rc_t col_defs_exclude_these_columns( col_defs* defs, const char * column_names )
+rc_t col_defs_exclude_these_columns( col_defs* defs, const char * prefix, const char * column_names )
 {
     rc_t rc = 0;
     const KNamelist *names;
-    uint32_t idx, len;
 
     if ( defs == NULL )
         return RC( rcExe, rcNoTarg, rcResolving, rcSelf, rcNull );
@@ -563,14 +564,40 @@ rc_t col_defs_exclude_these_columns( col_defs* defs, const char * column_names )
     DISP_RC( rc, "col_defs_parse_string:nlt_make_namelist_from_string() failed" );
     if ( rc == 0 )
     {
-        len = VectorLength( &(defs->cols) );
+        uint32_t idx, len = VectorLength( &(defs->cols) );
+        size_t prefix_len = 0;
+        if ( prefix != 0 )
+            prefix_len = string_size( prefix ) + 2;
         for ( idx = 0;  idx < len; ++idx )
         {
             p_col_def col = (p_col_def) VectorGet ( &(defs->cols), idx );
             if ( col != NULL )
+            {
                 if ( col->requested )
+                {
                     if ( nlt_is_name_in_namelist( names, col->name ) )
                         col->requested = false;
+                    else
+                    {
+                        if ( prefix != NULL )
+                        {
+                            size_t len1 = string_size ( col->name ) + prefix_len;
+                            char * s = malloc( len1 );
+                            if ( s != NULL )
+                            {
+                                size_t num_writ;
+                                rc_t rc1 = string_printf ( s, len1, &num_writ, "%s:%s", prefix, col->name );
+                                if ( rc1 == 0 )
+                                {
+                                    if ( nlt_is_name_in_namelist( names, s ) )
+                                        col->requested = false;
+                                }
+                                free( s );
+                            }
+                        }
+                    }
+                }
+            }
         }
         KNamelistRelease( names );
     }
@@ -696,7 +723,7 @@ rc_t col_defs_mark_writable_columns( col_defs* defs, VTable *tab, bool show )
                     if ( nlt_is_name_in_namelist( writables, col->name ) )
                     {
                         if ( show )
-                            OUTMSG(( "writable column: >%s<\n", col->name ));
+                            KOutMsg( "writable column: >%s<\n", col->name );
                         col->to_copy = true;
                     }
         }
diff --git a/tools/vdb-copy/coldefs.h b/tools/vdb-copy/coldefs.h
index 9cd92ae..5313f18 100644
--- a/tools/vdb-copy/coldefs.h
+++ b/tools/vdb-copy/coldefs.h
@@ -231,7 +231,7 @@ uint32_t col_defs_count_copy_cols( col_defs* defs );
  * does not require an open cursor.
 */
 rc_t col_defs_exclude_these_columns( col_defs* defs,
-                const char * column_names );
+                const char * prefix, const char * column_names );
 
 rc_t col_defs_as_string( col_defs* defs, char ** dst, bool only_requested );
 
diff --git a/tools/vdb-copy/context.c b/tools/vdb-copy/context.c
index b6c5d52..6dfe569 100644
--- a/tools/vdb-copy/context.c
+++ b/tools/vdb-copy/context.c
@@ -428,7 +428,11 @@ static void context_evaluate_options( const Args *my_args, p_context ctx )
 
     context_set_md5_mode( ctx, context_get_str_option( my_args, OPTION_MD5_MODE ) );
     context_set_blob_checksum( ctx, context_get_str_option( my_args, OPTION_BLOB_CHECKSUM ) );
+
+#if ALLOW_EXTERNAL_CONFIG
     context_set_kfg_path( ctx, context_get_str_option( my_args, OPTION_KFG_PATH ) );
+#endif
+
     context_set_table( ctx, context_get_str_option( my_args, OPTION_TABLE ) );
 #if ALLOW_COLUMN_SPEC
     context_set_columns( ctx, context_get_str_option( my_args, OPTION_COLUMNS ) );
diff --git a/tools/vdb-copy/context.h b/tools/vdb-copy/context.h
index 43d047a..dbeb202 100644
--- a/tools/vdb-copy/context.h
+++ b/tools/vdb-copy/context.h
@@ -54,7 +54,11 @@ extern "C" {
 #define OPTION_WITHOUT_ACCESSION "without_accession"
 #define OPTION_IGNORE_REJECT     "ignore_reject"
 #define OPTION_IGNORE_REDACT     "ignore_redact"
+
+#if ALLOW_EXTERNAL_CONFIG
 #define OPTION_KFG_PATH          "kfg_path"
+#endif
+
 #define OPTION_SHOW_MATCHING     "show_matching"
 #define OPTION_SHOW_PROGRESS     "show_progress"
 #define OPTION_IGNORE_INCOMP     "ignore_incompatible_columns"
@@ -75,7 +79,11 @@ extern "C" {
 #define ALIAS_WITHOUT_ACCESSION "a"
 #define ALIAS_IGNORE_REJECT     "r"
 #define ALIAS_IGNORE_REDACT     "e"
+
+#if ALLOW_EXTERNAL_CONFIG
 #define ALIAS_KFG_PATH          "k"
+#endif
+
 #define ALIAS_SHOW_MATCHING     "m"
 #define ALIAS_SHOW_PROGRESS     "p"
 #define ALIAS_IGNORE_INCOMP     "i"
diff --git a/tools/vdb-copy/copy_meta.c b/tools/vdb-copy/copy_meta.c
index 1786fb9..f80feed 100644
--- a/tools/vdb-copy/copy_meta.c
+++ b/tools/vdb-copy/copy_meta.c
@@ -29,6 +29,7 @@
 #include "definitions.h"
 #include <klib/text.h>
 #include <klib/printf.h>
+#include <klib/time.h>
 #include <kdb/meta.h>
 #include <kdb/namelist.h>
 #include <sysalloc.h>
@@ -86,7 +87,7 @@ static rc_t copy_metadata_attribs ( const KMDataNode *snode, KMDataNode *dnode,
                 if ( rc == 0 )
                 {
                     if ( show_meta )
-                        OUTMSG (( "copy atr %s : %s\n", node_path, attr ));
+                        KOutMsg( "copy atr %s : %s\n", node_path, attr );
                     rc = KMDataNodeWriteAttr ( dnode, attr, buffer );
                 }
             }
@@ -110,7 +111,7 @@ static rc_t copy_metadata_child ( const KMDataNode *src_root, KMDataNode *dst_ro
     if ( rc != 0 ) return rc;
 
     if ( show_meta )
-        OUTMSG (( "copy child-node: %s\n", node_path ));
+        KOutMsg( "copy child-node: %s\n", node_path );
 
     rc = KMDataNodeOpenNodeUpdate ( dst_root, & dnode, node_path );
     DISP_RC( rc, "copy_metadata_child:KMDataNodeOpenNodeUpdate(dst) failed" );
@@ -137,8 +138,8 @@ static rc_t copy_metadata_child ( const KMDataNode *src_root, KMDataNode *dst_ro
             char temp_path[ 1024 ];
             size_t temp_len;
 
-            strncpy( temp_path, node_path, sizeof(temp_path) - 1 );
-            temp_len = strlen( temp_path );
+            string_copy ( temp_path, ( sizeof temp_path ) - 1, node_path, string_size( node_path ) );
+            temp_len = string_size( temp_path );
             temp_path[ temp_len++ ] = '/';
             temp_path[ temp_len ] = 0;
             rc = KNamelistCount ( names, & count );
@@ -148,7 +149,7 @@ static rc_t copy_metadata_child ( const KMDataNode *src_root, KMDataNode *dst_ro
                 rc = KNamelistGet ( names, i, & child_name );
                 if ( rc == 0 )
                 {
-                    strncat( temp_path, child_name, sizeof( temp_path ) -1 );
+                    string_copy( temp_path + temp_len, ( sizeof temp_path ) - temp_len, child_name, string_size( child_name ) );
                     rc = copy_metadata_child ( src_root, dst_root, temp_path, show_meta );
                     temp_path[ temp_len ] = 0;
                 }
@@ -258,7 +259,7 @@ static rc_t copy_back_revisions ( const KMetadata *src_meta, VTable *dst_table,
         const KMetadata *src_rev_meta;
 
         if ( show_meta )
-            OUTMSG (( "+++copy metadata rev. #%u:\n", revision ));
+            KOutMsg( "+++copy metadata rev. #%u:\n", revision );
         rc = KMetadataOpenRevision ( src_meta, &src_rev_meta, revision );
         DISP_RC( rc, "copy_back_revisions:KMetadataOpenRevision() failed" );
         if ( rc == 0 )
@@ -288,38 +289,39 @@ static rc_t copy_back_revisions ( const KMetadata *src_meta, VTable *dst_table,
     return rc;
 }
 
-
-static 
-rc_t enter_time( KMDataNode *node, const char * key )
+static rc_t fill_timestring( char * s, size_t size )
 {
-    time_t rawtime;
-    struct tm * timeinfo;
-    size_t size;
-    char * s;
+    KTime tr;
     rc_t rc;
+    
+    KTimeLocal ( &tr, KTimeStamp() );
+/*
+    rc = string_printf ( s, size, NULL, 
+                         "%.04u-%.02u-%.02u %.02u:%.02u:%.02u",
+                         tr.year, tr.month + 1, tr.day, tr.hour, tr.minute, tr.second );
+*/
+    rc = string_printf ( s, size, NULL, "%lT", &tr );
 
-    time( &rawtime );
-    timeinfo = localtime( &rawtime );
-    s = string_dup_measure ( asctime( timeinfo ), &size );
-    if ( s == NULL )
-        return RC( rcExe, rcNoTarg, rcCopying, rcMemory, rcExhausted );
-    if ( size < 2 )
+    DISP_RC( rc, "fill_timestring:string_printf( date/time ) failed" );
+    return rc;
+}
+
+static rc_t enter_time( KMDataNode *node, const char * key )
+{
+    char timestring[ 160 ];
+    rc_t rc = fill_timestring( timestring, sizeof timestring );
+    if ( rc == 0 )
     {
-        free( s );
-        return RC( rcExe, rcNoTarg, rcCopying, rcBuffer, rcInvalid );
+        rc = KMDataNodeWriteAttr ( node, key, timestring );
+        DISP_RC( rc, "enter_time:KMDataNodeWriteAttr( timestring ) failed" );
     }
-    s[ size - 1 ] = 0; /* remove the newline */
-    rc = KMDataNodeWriteAttr ( node, key, s );
-    DISP_RC( rc, "enter_time:KMDataNodeWriteAttr() failed" );
-    free( s );
     return rc;
 }
 
 
-static 
-rc_t enter_version( KMDataNode *node, const char * key )
+static rc_t enter_version( KMDataNode *node, const char * key )
 {
-    char buff[32];
+    char buff[ 32 ];
     rc_t rc;
 
     rc = string_printf ( buff, sizeof( buff ), NULL, "%.3V", VDB_COPY_VERS );
@@ -329,35 +331,104 @@ rc_t enter_version( KMDataNode *node, const char * key )
     return rc;
 }
 
-static
-rc_t enter_schema_update( KMetadata *dst_meta, const bool show_meta )
+
+static rc_t enter_date_name_vers( KMDataNode *node )
+{
+    rc_t rc = enter_time( node, "run" );
+    DISP_RC( rc, "enter_date_name_vers:enter_time() failed" );
+    if ( rc == 0 )
+    {
+        rc = KMDataNodeWriteAttr ( node, "tool", "vdb-copy" );
+        DISP_RC( rc, "enter_date_name_vers:KMDataNodeWriteAttr(tool=vdb-copy) failed" );
+        if ( rc == 0 )
+        {
+            rc = enter_version ( node, "vers" );
+            DISP_RC( rc, "enter_date_name_vers:enter_version() failed" );
+            if ( rc == 0 )
+            {
+                rc = KMDataNodeWriteAttr ( node, "build", __DATE__ );
+                DISP_RC( rc, "enter_date_name_vers:KMDataNodeWriteAttr(build=_DATE_) failed" );
+            }
+        }
+    }
+    return rc;
+}
+
+static rc_t enter_schema_update( KMetadata *dst_meta, const bool show_meta )
 {
     rc_t rc;
     KMDataNode *sw_node;
 
     if ( show_meta )
-        OUTMSG(( "--- entering schema-update\n" ));
+        KOutMsg( "--- entering schema-update\n" );
 
     rc = KMetadataOpenNodeUpdate ( dst_meta, &sw_node, "SOFTWARE" );
-    DISP_RC( rc, "enter_schema_update:KMetadataOpenNodeUpdate() failed" );
+    DISP_RC( rc, "enter_schema_update:KMetadataOpenNodeUpdate('SOFTWARE') failed" );
     if ( rc == 0 )
     {
         KMDataNode *update_node;
         rc = KMDataNodeOpenNodeUpdate ( sw_node, &update_node, "update" );
-        DISP_RC( rc, "enter_schema_update:KMDataNodeOpenNodeUpdate() failed" );
+        DISP_RC( rc, "enter_schema_update:KMDataNodeOpenNodeUpdate('update') failed" );
         if ( rc == 0 )
         {
-            rc = enter_time( update_node, "date" );
-            rc = KMDataNodeWriteAttr ( update_node, "name", "vdb-copy" );
-            DISP_RC( rc, "enter_schema_update:KMDataNodeWriteAttr( name=vdb-copy) failed" );
-            rc = enter_version ( update_node, "vers" );
+            rc = enter_date_name_vers( update_node );
             KMDataNodeRelease ( update_node );
         }
+        KMDataNodeRelease ( sw_node );
     }
-    KMDataNodeRelease ( sw_node );
     return rc;
 }
 
+
+static uint32_t get_child_count( KMDataNode *node )
+{
+    uint32_t res = 0;
+    KNamelist *names;
+    rc_t rc = KMDataNodeListChild ( node, &names );
+    DISP_RC( rc, "get_child_count:KMDataNodeListChild() failed" );
+    if ( rc == 0 )
+    {
+        rc = KNamelistCount ( names, &res );
+        DISP_RC( rc, "get_child_count:KNamelistCount() failed" );
+        KNamelistRelease ( names );
+    }
+    return res;
+}
+
+
+static rc_t enter_vdbcopy_node( KMetadata *dst_meta, const bool show_meta )
+{
+    rc_t rc;
+    KMDataNode *hist_node;
+
+    if ( show_meta )
+        KOutMsg( "--- entering Copy entry...\n" );
+
+    rc = KMetadataOpenNodeUpdate ( dst_meta, &hist_node, "HISTORY" );
+    DISP_RC( rc, "enter_vdbcopy_node:KMetadataOpenNodeUpdate('HISTORY') failed" );
+    if ( rc == 0 )
+    {
+        char event_name[ 32 ];
+        uint32_t index = get_child_count( hist_node ) + 1;
+        rc = string_printf ( event_name, sizeof( event_name ), NULL, "EVENT_%u", index );
+        DISP_RC( rc, "enter_vdbcopy_node:string_printf(EVENT_NR) failed" );
+        if ( rc == 0 )
+        {
+            KMDataNode *event_node;
+            rc = KMDataNodeOpenNodeUpdate ( hist_node, &event_node, event_name );
+            DISP_RC( rc, "enter_vdbcopy_node:KMDataNodeOpenNodeUpdate('EVENT_NR') failed" );
+            if ( rc == 0 )
+            {
+                rc = enter_date_name_vers( event_node );
+                KMDataNodeRelease ( event_node );
+            }
+        }
+        KMDataNodeRelease ( hist_node );
+    }
+    return rc;
+}
+
+
 rc_t copy_table_meta ( const VTable *src_table, VTable *dst_table,
                        const char * excluded_nodes,
                        const bool show_meta, const bool schema_updated )
@@ -382,16 +453,26 @@ rc_t copy_table_meta ( const VTable *src_table, VTable *dst_table,
             if ( rc == 0 )
             {
                 if ( show_meta )
-                    OUTMSG (( "+++copy current metadata\n" ));
+                    KOutMsg( "+++copy current metadata\n" );
 
                 rc = copy_stray_metadata ( src_meta, dst_meta, excluded_nodes,
                                            show_meta );
                 if ( show_meta )
-                    OUTMSG (( "+++end of copy current metadata\n" ));
+                    KOutMsg( "+++end of copy current metadata\n" );
 
+                /* enter a attribute "vdb-copy" under '/SOFTWARE/update'
+                   *if the schema was updated ! */
                 if ( rc == 0 && schema_updated )
                     rc = enter_schema_update( dst_meta, show_meta );
 
+                /* enter a unconditional node under '/SOFTWARE/Copy'
+                    <%TIMESTAMP%>
+                        <Application date="%DATE%" name="vdb-copy" vers="%VERSION%"/>
+                    </%TIMESTAMP%>
+                */
+                if ( rc == 0 )
+                    rc = enter_vdbcopy_node( dst_meta, show_meta );
+
                 KMetadataRelease ( dst_meta );
             }
         }
@@ -422,12 +503,12 @@ rc_t copy_database_meta ( const VDatabase *src_db, VDatabase *dst_db,
         if ( rc == 0 )
         {
             if ( show_meta )
-                OUTMSG (( "+++copy current db-metadata\n" ));
+                KOutMsg( "+++copy current db-metadata\n" );
 
             rc = copy_stray_metadata ( src_meta, dst_meta, excluded_nodes,
                                        show_meta );
             if ( show_meta )
-                OUTMSG (( "+++end of copy db-current metadata\n" ));
+                KOutMsg( "+++end of copy db-current metadata\n" );
 
             KMetadataRelease ( dst_meta );
         }
diff --git a/tools/vdb-copy/definitions.h b/tools/vdb-copy/definitions.h
index f349c66..0628692 100644
--- a/tools/vdb-copy/definitions.h
+++ b/tools/vdb-copy/definitions.h
@@ -50,6 +50,8 @@ extern "C" {
 
 #define DB_COPY_ENABLED 1
 
+#define ALLOW_EXTERNAL_CONFIG 1
+
 #define SRA_PF_UNDEF 0
 #define SRA_PF_454 1
 #define SRA_PF_ILLUMINA 2
diff --git a/tools/vdb-copy/helper.c b/tools/vdb-copy/helper.c
index 49458aa..8e40b2e 100644
--- a/tools/vdb-copy/helper.c
+++ b/tools/vdb-copy/helper.c
@@ -166,6 +166,7 @@ rc_t helper_parse_schema( const VDBManager *my_manager,
 }
 
 
+#if TOOLS_USE_SRAPATH != 0
 static char *translate_accession( SRAPath *my_sra_path,
                            const char *accession,
                            const size_t bufsize )
@@ -182,7 +183,6 @@ static char *translate_accession( SRAPath *my_sra_path,
     }
     else if ( GetRCState( rc ) == rcInsufficient )
     {
-        /* bufsize was insufficient ---> repeat */
         free( res );
         return translate_accession( my_sra_path, accession, bufsize * 2 );
     }
@@ -193,15 +193,10 @@ static char *translate_accession( SRAPath *my_sra_path,
     }
     return res;
 }
+#endif
 
 
-/*
- * tries to interpret the given string in path as a accession
- * and returns the path of the found accession back in path
- * if it is possible, if not the original value of path remains unchanged
- * rc = 0 if the given path is a file-system-path or we are not
- * (weakly) linked against the sra-path-library
-*/
+#if TOOLS_USE_SRAPATH != 0
 rc_t helper_resolve_accession( const KDirectory *my_dir, char ** path )
 {
     SRAPath *my_sra_path;
@@ -233,6 +228,7 @@ rc_t helper_resolve_accession( const KDirectory *my_dir, char ** path )
     }
     return rc;
 }
+#endif
 
 
 /*
@@ -920,4 +916,4 @@ KChecksum helper_assemble_ChecksumMode( uint8_t ctx_blob_checksum )
         case BLOB_CHECKSUM_AUTO  : res = kcsCRC32; break;
     }
     return res;
-}
\ No newline at end of file
+}
diff --git a/tools/vdb-copy/helper.h b/tools/vdb-copy/helper.h
index 8253402..998961e 100644
--- a/tools/vdb-copy/helper.h
+++ b/tools/vdb-copy/helper.h
@@ -61,10 +61,9 @@ rc_t helper_parse_schema( const VDBManager *my_manager,
  * if it is possible, if not the original value of path remains unchanged
  * rc = 0 if the given path is a file-system-path or we are not
  * (weakly) linked against the sra-path-library
-*/
 rc_t helper_resolve_accession( const KDirectory *my_dir,
                                char ** path );
-
+*/
 
 /*
  * calls VTableTypespec to discover the table-name out of the schema
diff --git a/tools/vdb-copy/namelist_tools.c b/tools/vdb-copy/namelist_tools.c
index 1c7df2b..270449b 100644
--- a/tools/vdb-copy/namelist_tools.c
+++ b/tools/vdb-copy/namelist_tools.c
@@ -184,4 +184,4 @@ rc_t nlt_remove_strings_from_namelist( const KNamelist *source,
         KNamelistRelease( to_remove );
     }
     return rc;
-}
\ No newline at end of file
+}
diff --git a/tools/vdb-copy/num-gen.c b/tools/vdb-copy/num-gen.c
index d7922db..93125ac 100644
--- a/tools/vdb-copy/num-gen.c
+++ b/tools/vdb-copy/num-gen.c
@@ -25,6 +25,8 @@
 */
 
 #include "num-gen.h"
+#include <klib/printf.h>
+
 #include <sysalloc.h>
 #include <strtol.h>
 #include <stdlib.h>
@@ -617,11 +619,11 @@ static void CC num_gen_as_string_cb( void *item, void *data )
     long unsigned int end = ( start + node->count - 1 );
     switch( node->count )
     {
-    case 0 : temp[0]=0;
+    case 0 : temp[ 0 ] = 0;
              break;
-    case 1 : sprintf( temp, "%lu,", start );
+    case 1 : string_printf ( temp, sizeof temp, NULL, "%lu,", start );
              break;
-    default: sprintf( temp, "%lu-%lu,", start, end );
+    default: string_printf ( temp, sizeof temp, NULL, "%lu-%lu,", start, end );
              break;
     }
     string_ctx_add( ( p_string_ctx )data, temp );
@@ -657,7 +659,7 @@ static void CC num_gen_debug_cb( void *item, void *data )
     p_num_gen_node node = ( p_num_gen_node )item;
     long unsigned int start = node->start;
     long unsigned int count = node->count;
-    sprintf( temp, "[s:%lu c:%lu]", start, count );
+    string_printf ( temp, sizeof temp, NULL, "[s:%lu c:%lu]", start, count );
     string_ctx_add( ( p_string_ctx )data, temp );
 }
 
diff --git a/tools/vdb-copy/progressbar.c b/tools/vdb-copy/progressbar.c
index 043e9df..85a793a 100644
--- a/tools/vdb-copy/progressbar.c
+++ b/tools/vdb-copy/progressbar.c
@@ -56,22 +56,22 @@ rc_t destroy_progressbar( progressbar * pb )
 
 static void progess_0a( const uint16_t percent )
 {
-    OUTMSG (( "| %2u%%", percent ));
+    KOutMsg( "| %2u%%", percent );
 }
 
 static void progess_0( const uint16_t percent )
 {
     if ( percent & 1 )
-        OUTMSG (( "\b\b\b\b- %2u%%", percent ));
+        KOutMsg( "\b\b\b\b- %2u%%", percent );
     else
-        OUTMSG (( "\b\b\b%2u%%", percent ));
+        KOutMsg( "\b\b\b%2u%%", percent );
 }
 
 static void progess_1a( const uint16_t percent )
 {
     uint16_t p1 = percent / 10;
     uint16_t p0 = percent - ( p1 * 10 );
-    OUTMSG (( "| %2u.%01u%%", p1, p0 ));
+    KOutMsg( "| %2u.%01u%%", p1, p0 );
 }
 
 static void progess_1( const uint16_t percent )
@@ -79,16 +79,16 @@ static void progess_1( const uint16_t percent )
     uint16_t p1 = percent / 10;
     uint16_t p0 = percent - ( p1 * 10 );
     if ( ( p1 & 1 )&&( p0 == 0 ) )
-        OUTMSG (( "\b\b\b\b\b\b- %2u.%01u%%", p1, p0 ));
+        KOutMsg( "\b\b\b\b\b\b- %2u.%01u%%", p1, p0 );
     else
-        OUTMSG (( "\b\b\b\b\b%2u.%01u%%", p1, p0 ));
+        KOutMsg( "\b\b\b\b\b%2u.%01u%%", p1, p0 );
 }
 
 static void progess_2a( const uint16_t percent )
 {
     uint16_t p1 = percent / 100;
     uint16_t p0 = percent - ( p1 * 100 );
-    OUTMSG (( "| %2u.%02u%%", p1, p0 ));
+    KOutMsg( "| %2u.%02u%%", p1, p0 );
 }
 
 static void progess_2( const uint16_t percent )
@@ -96,9 +96,9 @@ static void progess_2( const uint16_t percent )
     uint16_t p1 = percent / 100;
     uint16_t p0 = percent - ( p1 * 100 );
     if ( ( p1 & 1 )&&( p0 == 0 ) )
-        OUTMSG (( "\b\b\b\b\b\b\b- %2u.%02u%%", p1, p0 ));
+        KOutMsg( "\b\b\b\b\b\b\b- %2u.%02u%%", p1, p0 );
     else
-        OUTMSG (( "\b\b\b\b\b\b%2u.%02u%%", p1, p0 ));
+        KOutMsg( "\b\b\b\b\b\b%2u.%02u%%", p1, p0 );
 }
 
 rc_t update_progressbar( progressbar * pb, const uint8_t fract_digits,
diff --git a/tools/vdb-copy/redactval.c b/tools/vdb-copy/redactval.c
index a33b7dc..a8c0538 100644
--- a/tools/vdb-copy/redactval.c
+++ b/tools/vdb-copy/redactval.c
@@ -29,7 +29,6 @@
 #include "helper.h"
 #include <sysalloc.h>
 
-#include <fmtdef.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
diff --git a/tools/vdb-copy/type_matcher.c b/tools/vdb-copy/type_matcher.c
index 2a0efc7..5b08bec 100644
--- a/tools/vdb-copy/type_matcher.c
+++ b/tools/vdb-copy/type_matcher.c
@@ -332,7 +332,7 @@ bool matcher_src_has_type( const matcher* self, const VSchema * s,
         res = match_type_with_id_vector( s, &td, id_vector );
 /*
     if ( res )
-        OUTMSG (( "redact-type found on (%s)%s\n", col->type_cast->dst->name, name ));
+        KOutMsg( "redact-type found on (%s)%s\n", col->type_cast->dst->name, name );
 */
     return res;
 }
@@ -343,14 +343,14 @@ static void matcher_report_types( const char * s, const Vector *v )
     len = VectorLength( v );
     if ( len > 0 )
     {
-        OUTMSG (( "%s: ", s ));
+        KOutMsg( "%s: ", s );
         for ( idx = 0;  idx < len; ++idx )
         {
             p_mtype item = (p_mtype) VectorGet ( v, idx );
             if ( item != NULL )
-                OUTMSG (( "[ %s ] ", item->name ));
+                KOutMsg( "[ %s ] ", item->name );
         }
-        OUTMSG (( "\n" ));
+        KOutMsg( "\n" );
     }
 }
 
@@ -360,15 +360,15 @@ static void matcher_report_pair( const p_mpair pair )
     if ( pair->src == NULL || pair->dst == NULL )
         return;
     if ( pair->compatible == 0 )
-        OUTMSG (( "[%s](l=%u/o=%u/d=%u) --> [%s] (c) dist=%u\n", 
+        KOutMsg( "[%s](l=%u/o=%u/d=%u) --> [%s] (c) dist=%u\n", 
                   pair->src->name, 
                   pair->src->lossy_score, pair->src->order, pair->src->dflt,
-                  pair->dst->name, pair->distance ));
+                  pair->dst->name, pair->distance );
     else
-        OUTMSG (( "[%s](l=%u/o=%u/d=%u) --> [%s] dist=%u\n",
+        KOutMsg( "[%s](l=%u/o=%u/d=%u) --> [%s] dist=%u\n",
                   pair->src->name,
                   pair->src->lossy_score, pair->src->order, pair->src->dflt,
-                  pair->dst->name, pair->distance ));
+                  pair->dst->name, pair->distance );
 }
 
 
@@ -383,15 +383,15 @@ static void matcher_report_pairs( const Vector *v )
 
 static void matcher_report_col( const p_mcol item )
 {
-    OUTMSG (( "----------------------------------\n" ));
+    KOutMsg( "----------------------------------\n" );
     if ( item->to_copy )
-        OUTMSG (( "col: %s (c)\n", item->name ));
+        KOutMsg( "col: %s (c)\n", item->name );
     else
-        OUTMSG (( "col: %s\n", item->name ));
+        KOutMsg( "col: %s\n", item->name );
     matcher_report_types( " src", &(item->src_types ) );
     matcher_report_types( " dst", &(item->dst_types ) );
     matcher_report_pairs( &(item->pairs ) );
-    OUTMSG (( "\n" ));
+    KOutMsg( "\n" );
 }
 
 
diff --git a/tools/vdb-copy/vdb-copy-includes.h b/tools/vdb-copy/vdb-copy-includes.h
index 0b998c9..f274df6 100644
--- a/tools/vdb-copy/vdb-copy-includes.h
+++ b/tools/vdb-copy/vdb-copy-includes.h
@@ -102,9 +102,11 @@ extern "C" {
 #include <sra/sraschema.h>
 #endif
 
+/*
 #ifndef _h_sra_srapath_
 #include <sra/srapath.h>
 #endif
+*/
 
 #ifndef _h_namelist_tools_
 #include "namelist_tools.h"
diff --git a/tools/vdb-copy/vdb-copy.c b/tools/vdb-copy/vdb-copy.c
index c71c2e3..aea9fb7 100644
--- a/tools/vdb-copy/vdb-copy.c
+++ b/tools/vdb-copy/vdb-copy.c
@@ -212,14 +212,14 @@ static rc_t vdb_copy_redact_cell( const VCursor * src_cursor, VCursor * dst_curs
                 if ( show_redact )
                 {
                     char * c = ( char * )col->r_val->value;
-                    OUTMSG (( "redacting #%lu %s -> 0x%.02x\n", row_id, col->dst_cast, *c ));
+                    KOutMsg( "redacting #%lu %s -> 0x%.02x\n", row_id, col->dst_cast, *c );
                 }
                 redact_val_fill_buffer( col->r_val, rbuf, new_size );
             }
             else
             {
                 if ( show_redact )
-                    OUTMSG (( "redacting #%lu %s -> 0\n", row_id, col->dst_cast ));
+                    KOutMsg( "redacting #%lu %s -> 0\n", row_id, col->dst_cast );
                 memset( rbuf->buffer, 0, new_size );
             }
 
@@ -252,8 +252,8 @@ static rc_t vdb_copy_cell( const VCursor * src_cursor, VCursor * dst_cursor,
     uint32_t elem_bits;
 
     /*
-    OUTMSG (( " - copy cell %s ( src_idx=%u / dst_idx=%u )\n", 
-              col->name, col->src_idx, col->dst_idx ));
+    KOutMsg( " - copy cell %s ( src_idx=%u / dst_idx=%u )\n", 
+              col->name, col->src_idx, col->dst_idx );
     */
     rc = VCursorCellData( src_cursor, col->src_idx, &elem_bits,
                           &buffer, &offset_in_bits, &number_of_elements );
@@ -269,8 +269,8 @@ static rc_t vdb_copy_cell( const VCursor * src_cursor, VCursor * dst_cursor,
     if ( rc != 0 ) return rc;
 
     /*
-    OUTMSG (( "bit-offset = %u / elements = %u / element-bits = %u\n", 
-       offset_in_bits, number_of_elements, elem_bits ));
+    KOutMsg( "bit-offset = %u / elements = %u / element-bits = %u\n", 
+       offset_in_bits, number_of_elements, elem_bits );
     */
     rc = VCursorWrite( dst_cursor, col->dst_idx, elem_bits,
                        buffer, offset_in_bits, number_of_elements );
@@ -427,61 +427,69 @@ static rc_t vdb_copy_row_loop( const p_context ctx,
 
     fract_digits = vdb_copy_calc_fract_digits( iter );
     count = 0;
-    while ( ( num_gen_iterator_next( iter, &row_id ) == 0 )&&
-            ( rc == 0 ) )
+    rc = num_gen_iterator_next( iter, &row_id );
+    while ( rc == 0 )
     {
         rc = Quitting();    /* to be able to cancel the loop by signal */
-        if ( rc != 0 ) break;
-
-        rc = VCursorSetRowId( src_cursor, row_id );
-        if ( rc != 0 )
-        {
-            PLOGERR( klogInt, (klogInt, rc,
-                     "VCursorSetRowId(src) row #$(row_nr) failed",
-                     "row_nr=%lu", row_id ));
-        }
         if ( rc == 0 )
         {
-            rc = VCursorOpenRow( src_cursor );
+            rc = VCursorSetRowId( src_cursor, row_id );
             if ( rc != 0 )
-            {
                 PLOGERR( klogInt, (klogInt, rc,
-                         "VCursorOpenRow(src) row #$(row_nr) failed",
+                         "VCursorSetRowId(src) row #$(row_nr) failed",
                          "row_nr=%lu", row_id ));
-            }
-            else
+
+            if ( rc == 0 )
             {
-                bool pass_flag = true;
-                bool redact_flag = false;
-                rc_t rc1;
-
-                if ( filter_col_def != NULL )
-                    vdb_copy_read_row_flags( ctx, src_cursor,
-                                filter_col_def->src_idx, &pass_flag, &redact_flag );
-                if ( pass_flag )
+                rc = VCursorOpenRow( src_cursor );
+                if ( rc != 0 )
+                    PLOGERR( klogInt, (klogInt, rc,
+                             "VCursorOpenRow(src) row #$(row_nr) failed",
+                             "row_nr=%lu", row_id ));
+                else
                 {
-                    rc = vdb_copy_row( src_cursor, dst_cursor,
-                                       columns, row_id,
-                                       &rbuf, redact_flag, ctx->show_redact );
-                    if ( rc == 0 ) count++;
-                }
+                    bool pass_flag = true;
+                    bool redact_flag = false;
 
-                rc1 = VCursorCloseRow( src_cursor );
-                if ( rc1 != 0 )
+                    if ( filter_col_def != NULL )
+                        vdb_copy_read_row_flags( ctx, src_cursor,
+                                    filter_col_def->src_idx, &pass_flag, &redact_flag );
+                    if ( pass_flag )
+                        rc = vdb_copy_row( src_cursor, dst_cursor,
+                                           columns, row_id,
+                                           &rbuf, redact_flag, ctx->show_redact );
+
+                    if ( rc == 0 )
+                    {
+                        count++;
+                        rc = VCursorCloseRow( src_cursor );
+                        if ( rc != 0 )
+                            PLOGERR( klogInt, ( klogInt, rc,
+                                     "VCursorCloseRow(src) row #$(row_nr) failed",
+                                     "row_nr=%lu", row_id ) );
+                    }
+                }
+                rc = num_gen_iterator_next( iter, &row_id );
+                if ( ctx->show_progress )
                 {
-                    PLOGERR( klogInt, ( klogInt, rc1,
-                             "VCursorCloseRow(src) row #$(row_nr) failed",
-                             "row_nr=%lu", row_id ) );
+                    if ( num_gen_iterator_percent( iter, fract_digits, &percent ) == 0 )
+                        update_progressbar( progress, fract_digits, percent );
                 }
+
             }
         }
-        if ( ctx->show_progress )
-            if ( num_gen_iterator_percent( iter, fract_digits, &percent ) == 0 )
-                update_progressbar( progress, fract_digits, percent );
-
     }
+
+    /* set rc to zero for num_gen_iterator_next() reached last id */
+    if ( GetRCModule( rc ) == rcVDB && 
+         GetRCTarget( rc ) == rcNoTarg && 
+         GetRCContext( rc ) == rcReading &&
+         GetRCObject( rc ) == rcId &&
+         GetRCState( rc ) == rcInvalid )
+        rc = 0;
+
     if ( ctx->show_progress )
-        OUTMSG(( "\n" ));
+        KOutMsg( "\n" );
     destroy_progressbar( progress );
 
     PLOGMSG( klogInfo, ( klogInfo, "\n $(row_cnt) rows copied", "row_cnt=%lu", count ));
@@ -516,7 +524,7 @@ static rc_t vdb_copy_make_dst_table( const p_context ctx,
     {
         /* load it from a file */
         /*
-        OUTMSG (( "we are using '%s'\n", cctx->legacy_schema_file ));
+        KOutMsg( "we are using '%s'\n", cctx->legacy_schema_file );
         */
         if ( *dst_schema == NULL )
         {
@@ -674,7 +682,8 @@ static rc_t vdb_copy_prepare_legacy_tab( const p_context ctx,
 }
 
 
-static rc_t vdb_copy_find_out_what_columns_to_use( const VTable * src_table, 
+static rc_t vdb_copy_find_out_what_columns_to_use( const VTable * src_table,
+                                                   const char * tablename,
                                                    col_defs * columns, 
                                                    const char * requested,
                                                    const char * excluded )
@@ -696,7 +705,7 @@ static rc_t vdb_copy_find_out_what_columns_to_use( const VTable * src_table,
         DISP_RC( rc, "vdb_copy_find_out_what_columns_to_use:col_defs_mark_requested_columns() failed" );
         if ( rc == 0 && excluded != NULL )
         {
-            rc = col_defs_exclude_these_columns( columns, excluded );
+            rc = col_defs_exclude_these_columns( columns, tablename, excluded );
             DISP_RC( rc, "vdb_copy_find_out_what_columns_to_use:col_defs_unmark_writable_columns() failed" );
         }
     }
@@ -915,7 +924,8 @@ static rc_t vdb_copy_table2( const p_context ctx,
 
 static rc_t vdb_copy_table( const p_context ctx,
                             VDBManager * vdb_mgr,
-                            const VTable * src_table )
+                            const VTable * src_table,
+                            const char * tablename )
 {
     const VSchema * src_schema;
     rc_t rc = VTableOpenSchema ( src_table, &src_schema );
@@ -927,7 +937,7 @@ static rc_t vdb_copy_table( const p_context ctx,
         DISP_RC( rc, "vdb_copy_table:col_defs_init() failed" );
         if ( rc == 0 )
         {
-            rc = vdb_copy_find_out_what_columns_to_use( src_table, columns,
+            rc = vdb_copy_find_out_what_columns_to_use( src_table, tablename, columns,
                                                         ctx->columns, ctx->excluded_columns );
             if ( rc == 0 )
             {
@@ -1001,7 +1011,8 @@ static rc_t vdb_copy_cur_2_cur( const p_context ctx,
                             col_defs_unmark_do_not_redact_columns( columns,
                                             ctx->config.do_not_redact_columns );
 
-                            OUTMSG(( "copy of >%s<\n", tab_name ));
+                            if ( ctx->show_progress )
+                                KOutMsg( "copy of >%s<\n", tab_name );
 
                             vdb_copy_find_filter_and_redact_columns( schema,
                                                    columns, &(ctx->config), type_matcher );
@@ -1034,7 +1045,7 @@ static rc_t vdb_copy_tab_2_tab( const p_context ctx,
         DISP_RC( rc, "vdb_copy_tab_2_tab:col_defs_init() failed" );
         if ( rc == 0 )
         {
-            rc = vdb_copy_find_out_what_columns_to_use( src_tab, columns, 
+            rc = vdb_copy_find_out_what_columns_to_use( src_tab, tab_name, columns, 
                                                         NULL, ctx->excluded_columns );
             if ( rc == 0 )
             {
@@ -1352,7 +1363,7 @@ static rc_t vdb_copy_perform( const p_context ctx,
             if ( rc == 0 )
             {
                 /*********************************************/
-                rc = vdb_copy_table( ctx, vdb_mgr, src_table );
+                rc = vdb_copy_table( ctx, vdb_mgr, src_table, NULL );
                 /*********************************************/
                 DISP_RC( rc, "vdb_copy_perform:vdb_copy_table() failed" );
                 VTableRelease( src_table );
@@ -1394,6 +1405,7 @@ static rc_t vdb_copy_main( const p_context ctx )
     {
         KConfig * config_mgr;
 
+#if TOOLS_USE_SRAPATH != 0
         if ( !ctx->dont_check_accession )
             ctx->dont_check_accession = helper_is_this_a_filesystem_path( ctx->src_path );
         if ( !ctx->dont_check_accession )
@@ -1401,6 +1413,7 @@ static rc_t vdb_copy_main( const p_context ctx )
             rc_t rc1 = helper_resolve_accession( directory, (char**)&( ctx->src_path ) );
             DISP_RC( rc1, "vdb_copy_main:helper_check_accession() failed" );
         }
+#endif
 
         rc = helper_make_config_mgr( &config_mgr, ctx->kfg_path );
         DISP_RC( rc, "vdb_copy_main:helper_make_config_mgr() failed" );
diff --git a/tools/vdb-copy/vdb-copy.vers b/tools/vdb-copy/vdb-copy.vers
index 04b10b4..f90b1af 100644
--- a/tools/vdb-copy/vdb-copy.vers
+++ b/tools/vdb-copy/vdb-copy.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/vdb-copy/vdb-copy.vers.h b/tools/vdb-copy/vdb-copy.vers.h
deleted file mode 100644
index bda5bf2..0000000
--- a/tools/vdb-copy/vdb-copy.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define VDB_COPY_VERS 0x02010007
diff --git a/tools/vdb-decrypt/Makefile b/tools/vdb-decrypt/Makefile
new file mode 100644
index 0000000..cd0e1da
--- /dev/null
+++ b/tools/vdb-decrypt/Makefile
@@ -0,0 +1,130 @@
+# ==============================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+USE_GCC_IF_ICC = 1
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/vdb-decrypt
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS =
+
+EXT_TOOLS = \
+	vdb-decrypt \
+	vdb-encrypt
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+
+
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+	@ $(MAKE_CMD) $(TARGDIR)/std
+
+$(ALL_TOOLS): vers-includes
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# vdb-decrypt
+#  Copy files from one directory to another while cataloging the contents.
+#  XML files can be redirected as well.
+#
+VDB_DECRYPT_SRC = \
+	vdb-decrypt \
+	shared
+
+VDB_DECRYPT_OBJ = \
+	$(addsuffix .$(OBJX),$(VDB_DECRYPT_SRC))
+
+VDB_DECRYPT_LIB = \
+	-lkapp \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
+	-lkfg \
+	-lkfs \
+	-lkproc \
+	-lklib
+
+$(BINDIR)/vdb-decrypt: $(VDB_DECRYPT_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_DECRYPT_LIB)
+
+#-------------------------------------------------------------------------------
+# vdb-encrypt
+#  Copy files from one directory to another while cataloging the contents.
+#  XML files can be redirected as well.
+#
+VDB_ENCRYPT_SRC = \
+	vdb-encrypt \
+	shared
+
+VDB_ENCRYPT_OBJ = \
+	$(addsuffix .$(OBJX),$(VDB_ENCRYPT_SRC))
+
+VDB_ENCRYPT_LIB = \
+	-lkapp \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
+	-lkfg \
+	-lkfs \
+	-lkproc \
+	-lklib
+
+$(BINDIR)/vdb-encrypt: $(VDB_ENCRYPT_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_ENCRYPT_LIB)
+
diff --git a/tools/vdb-decrypt/shared.c b/tools/vdb-decrypt/shared.c
new file mode 100644
index 0000000..de41eaf
--- /dev/null
+++ b/tools/vdb-decrypt/shared.c
@@ -0,0 +1,1270 @@
+/*==============================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include "shared.h"
+
+#include <klib/defs.h>
+#include <klib/callconv.h>
+
+#include <klib/rc.h>
+#include <klib/out.h>
+#include <klib/status.h>
+#include <klib/log.h>
+#include <klib/debug.h> /* DBGMSG */
+#include <klib/status.h>
+#include <klib/text.h>
+#include <klib/printf.h>
+#include <klib/namelist.h>
+
+#include <kfs/defs.h>
+#include <kfs/file.h>
+#include <kfs/directory.h>
+#include <kfs/sra.h>
+#include <kfs/lockfile.h>
+#include <kfs/cacheteefile.h>
+#include <kfs/buffile.h>
+#include <vfs/manager.h>
+
+#include <krypto/key.h>
+#include <krypto/encfile.h>
+#include <krypto/wgaencrypt.h>
+
+#include <kapp/args.h>
+#include <kapp/main.h>
+
+#include <assert.h>
+#include <string.h>
+#include <stdint.h>
+
+#ifndef RIGOROUS_SRA_CHECK
+#define RIGOROUS_SRA_CHECK 0
+#endif
+
+#define OPTION_FORCE   "force"
+#define OPTION_SRA     "decrypt-sra-files"
+#define ALIAS_FORCE    "f"
+#define ALIAS_SRA      NULL
+
+#define MY_MAX_PATH        4096
+
+
+bool ForceFlag = false;
+bool TmpFoundFlag = false;
+bool UseStdin = false;
+bool UseStdout = false;
+bool IsArchive = false;
+
+/* for wga decrypt */
+char Password [4096 + 2];
+size_t PasswordSize;
+
+/* for encfile encrypt/decrypt */
+KKey Key;
+
+const char * ForceUsage[] = 
+{ "Force overwrite of existing files", NULL };
+
+/*
+ * option  control flags
+ */
+
+const char EncExt[] = ".ncbi_enc";
+static const char TmpExt[] = ".vdb-decrypt-tmp";
+static const char TmpLockExt[] = ".vdb-decrypt-tmp.lock";
+static const char CacheExt[] = ".cache";
+static const char CacheLockExt[] = ".cache.lock";
+
+/* Usage
+ */
+rc_t CC UsageSummary (const char * progname)
+{
+    rc_t rc;
+    {
+        rc = KOutMsg (
+            /*345679012345678901234567890123456789012345678901234567890123456789012345678*/
+            "\n"
+            "Usage:\n"
+            "  %s [options] <source-file>\n"
+            "  %s [options] <source-file> <destination-file>\n"
+            "  %s [options] <source-file> <destination-directory>\n"
+            "  %s [options] <directory>\n",
+            progname, progname, progname, progname);
+    }
+#if DIRECTORY_TO_DIRECTORY_SUPPORTED
+    if (rc == 0)
+        rc = KOutMsg (
+            "  %s [options] <source-directory> <destination-directory>\n",
+            progname);
+#endif
+        if (rc == 0)
+    {
+        rc = KOutMsg (
+            "\n"
+            "Summary:\n"
+            "  %scrypt a file or all the files (recursively) in a directory\n\n",
+            De);
+    }
+    return rc;
+}
+
+rc_t CC Usage (const Args * args)
+{
+    const char * progname = UsageDefaultName;
+    const char * fullpath = UsageDefaultName;
+    const char * pline[] = {
+        "file to encrypt", NULL,
+        "name of resulting file", NULL,
+        "directory of resulting file", NULL,
+        "directory to encrypt", NULL
+    };
+
+    rc_t rc, orc;
+
+    /* super-fragilistic molti-hacki-docious
+       let's find a better way to reuse things. */
+    if ( de [ 0 ] == 'd' )
+    {
+        pline [ 0 ] = "file to decrypt";
+        pline [ 6 ] = "directory to decrypt";
+    }
+
+    if (args == NULL)
+        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    else
+        rc = ArgsProgram (args, &fullpath, &progname);
+
+    orc = UsageSummary (progname);
+    if (rc == 0)
+        rc = orc;
+
+    KOutMsg ("Parameters:\n");
+    HelpParamLine ("source-file"          , pline);
+    HelpParamLine ("destination-file"     , pline + 2);
+    HelpParamLine ("destination-directory", pline + 4);
+    HelpParamLine ("directory"            , pline + 6);
+    KOutMsg ("\nOptions:\n");
+    HelpOptionLine (ALIAS_FORCE, OPTION_FORCE, NULL, ForceUsage);
+    CryptOptionLines ();
+    HelpOptionsStandard ();
+
+    /* forcing editor alignment */
+    /*   12345678901234567890123456789012345678901234567890123456789012345678901234567890*/
+    KOutMsg (
+        "\n"
+        "Details:\n"
+        "  All %scryptions are non-destructive until successful. No files are deleted or\n"
+        "  replaced until the %scryptions are complete.\n"
+        "\n", de, de);
+
+    KOutMsg (
+        "  The extension '.ncbi_enc' will be %s when a file is %scrypted.\n"
+        "\n", Decrypting ? "removed" : "added", de);
+
+    if (Decrypting) KOutMsg (
+        "  NCBI Archive files that contain NCBI database objects will not be decrypted\n"
+        "  unless the %s option is used. As these objects can be used without\n"
+        "  decryption it is recommended they remain encrypted.\n"
+        "\n", OPTION_SRA);
+    else KOutMsg (
+        "  NCBI Archive files that contain NCBI database objects will not have the\n"
+        "  .ncbi_enc extension added.\n\n");
+
+
+    KOutMsg (
+        "  If the only parameter is a file name then it will be replaced by a file that\n"
+        "  is %scrypted with a possible changed extension.\n"
+        "  \n", de);
+
+    KOutMsg (
+        "  If the only parameter is a directory, all files in that directory including\n"
+        "  all files in subdirectories will be replaced with a possible change\n"
+        "  in the extension.\n"
+        "\n");
+
+    KOutMsg (
+        "  If there are two parameters  a copy is made but the copy will be %scrypted.\n"
+        "  If the second parameter is a directory the new file might have a different\n"
+        "  extension. If it is not a directory, the extension will be as given in the\n"
+        "  the parameter.\n"
+        "\n", de);
+
+    KOutMsg (
+        "  Missing directories in the destination path will be created.\n"
+        "\n");
+
+    KOutMsg (
+        "  Already existing destination files will cause the program to end with\n"
+        "  an error and will be left unchanged unless the --%s option is used to\n"
+        "  force the files to be overwritten.\n"
+        "\n", OPTION_FORCE);
+
+    KOutMsg (
+        "Encryption key (file password):\n"
+        "  The encryption key or file password is handled by configuration. If not yet\n"
+        "  set, this program will fail.\n\n"
+        "  You can set the encryption key by running:\n\n"
+        "    perl configuration-assistant.perl\n"
+        "\n");
+
+    HelpVersion (fullpath, KAppVersion());
+
+    return rc;
+}
+
+
+
+
+
+/*
+ * determine the archive type for KFile f with pathname name
+ *
+ * This could be extended to handle tar files with a larger head size and
+ * and some less simple checks for a tar header block at the start of
+ * the file.
+ */
+ArcScheme ArchiveTypeCheck (const KFile * f)
+{
+    size_t num_read;
+    rc_t rc;
+    char head [128];
+
+    IsArchive = false;
+    rc = KFileReadAll (f, 0, head, sizeof head, &num_read);
+    if (rc)
+    {
+        LOGERR (klogErr, rc, "Unable to read head of decrypted file");
+        return arcError;
+    }
+
+    rc = KFileIsSRA (head, num_read);
+    if (rc == 0)
+    {
+
+/*         OUTMSG (("+++++ ARCHIVE\n")); */
+
+
+        /* a hack... */
+
+        IsArchive = true;
+        return arcSRAFile;
+    }
+/*     OUTMSG (("----- not an archive\n")); */
+    return arcNone;
+}
+
+
+/*
+ * Copy a file from a const KFile * to a KFile * with the paths for the two
+ * for logging purposes
+ *
+ * return rc_t = 0 for success
+ * return rc_t != 0 for failure
+ */
+rc_t CopyFile (const KFile * src, KFile * dst, const char * source, const char * dest)
+{
+    rc_t rc;
+    uint8_t	buff	[256 * 1024];
+    size_t	num_read;
+    size_t      num_writ;
+    uint64_t	pos;
+
+    for (pos = 0; ; pos += num_read)
+    {
+        rc = Quitting ();
+        if (rc)
+        {
+            LOGMSG (klogFatal, "Received quit");
+            break;
+        }
+
+        rc = KFileReadAll (src, pos, buff, sizeof (buff), &num_read);
+        if (rc)
+        {
+            PLOGERR (klogErr,
+                     (klogErr, rc,
+                      "Failed to read from file $(F) at $(P)",
+                      "F=%s,P=%lu", source, pos));
+            break;
+        }
+        
+        if (num_read == 0)
+            break;
+
+        rc = KFileWriteAll (dst, pos, buff, num_read, &num_writ);
+        if (rc)
+        {
+            PLOGERR (klogErr,
+                     (klogErr, rc,
+                      "Failed to write to file $(F) at $(P)",
+                      "F=%s,P=%lu", dest, pos));
+            break;
+        }
+        
+        if (num_writ != num_read)
+        {
+            rc = RC (rcExe, rcFile, rcWriting, rcFile, rcInsufficient);
+            PLOGERR (klogErr,
+                     (klogErr, rc,
+                      "Failed to write all to file $(F) at $(P)",
+                      "F=%s,P=%lu", dest, pos));
+            break;
+        }
+    }
+    return rc;
+}
+
+
+/*
+ * determine the encryption type for KFile f with pathname name
+ */
+rc_t EncryptionTypeCheck (const KFile * f, const char * name, EncScheme * scheme)
+{
+    size_t num_read;
+    rc_t rc;
+    char head [128];
+
+    assert (f != NULL);
+    assert (name != NULL);
+
+    rc = KFileReadAll (f, 0, head, sizeof head, &num_read);
+    if (rc)
+    {
+        PLOGERR (klogErr, (klogErr, rc, "Unable to read head of "
+                           "'$(F)'", "F=%s", name));
+        *scheme = encError;
+        return rc;
+    }
+    
+    /* looks for files with NCBInenc or NCBIsenc signatures */
+    rc = KFileIsEnc (head, num_read);
+    if (rc == 0)
+    {
+            /* looks for files with just NCBIsenc signatures */
+        rc = KFileIsSraEnc (head, num_read);
+
+        *scheme = (rc == 0) ? encSraEncFile : encEncFile;
+    }
+    else
+    {
+        rc = KFileIsWGAEnc (head, num_read);
+        if (rc == 0)
+            *scheme = encWGAEncFile;
+        else
+            *scheme = encNone;
+    }
+    return 0;
+}
+
+
+/*
+ * Check a file path name for ending in the extension used by this program
+ *
+ * return true if it ends with the extension and false if it does not
+ */
+static
+bool IsTmpFile (const char * path)
+{
+    const char * pc;
+
+    pc = strrchr (path, '.');
+    if (pc == NULL)
+        return false;
+
+    if (strcmp (pc, TmpExt) == 0)
+        return true;
+
+    pc = string_chr (path, pc - path, '.');
+    if (pc == NULL)
+        return false;
+
+    return (strcmp (pc, TmpLockExt) == 0);
+}
+
+
+static
+bool IsCacheFile (const char * path)
+{
+    const char * pc;
+
+    pc = strrchr (path, '.');
+    if (pc == NULL)
+        return false;
+
+    if (strcmp (pc, CacheExt) == 0)
+        return true;
+
+    pc = string_chr (path, pc - path, '.');
+    if (pc == NULL)
+        return false;
+
+    return (strcmp (pc, CacheLockExt) == 0);
+}
+
+
+static
+rc_t FileInPlace (KDirectory * cwd, const char * leaf, bool try_rename)
+{
+    rc_t rc;
+    bool is_tmp;
+
+    STSMSG (1, ("%scrypting file in place %s",De,leaf));
+
+    rc = 0;
+    is_tmp = IsTmpFile (leaf);
+    if (is_tmp)
+    {
+        STSMSG (1, ("%s is a vdb-decrypt/vdb-encrypt temporary file and will "
+                    "be ignored", leaf));
+        TmpFoundFlag = true;
+        if (ForceFlag)
+            ; /* LOG OVERWRITE */
+        else
+            ; /* LOG TMP */
+    }
+    if (!is_tmp || ForceFlag)
+    {
+        char temp [MY_MAX_PATH];
+
+
+        rc = KDirectoryResolvePath (cwd, false, temp, sizeof temp, ".%s%s",
+                                    leaf, TmpExt);
+
+        if (rc)
+            PLOGERR (klogErr, (klogErr, rc, "unable to resolve '.$(S)$(E)'",
+                               "S=%s,E=%s",leaf,TmpExt));
+        else
+        {
+            KPathType kpt;
+            uint32_t kcm;
+
+            kcm = kcmCreate|kcmParents;
+            kpt = KDirectoryPathType (cwd, temp);
+            if (kpt != kptNotFound)
+            {
+                /* log busy */
+                if (ForceFlag)
+                {
+                    kcm = kcmInit|kcmParents;
+                    /* log force */
+                    kpt = kptNotFound;
+                }
+            }
+
+            if (kpt == kptNotFound)
+            {
+                const KFile * infile;
+
+                rc = KDirectoryOpenFileRead (cwd, &infile, "%s", leaf);
+                if (rc)
+                    PLOGERR (klogErr, (klogErr, rc, "Unable to resolve '$(F)'",
+                                       "F=%s",leaf));
+                else
+                {
+                    uint64_t fz;
+                    size_t z;
+                    rc_t irc;
+                    uint64_t ignored;
+
+                    rc = KFileSize (infile, &fz);
+                    /* ignore rc for now? yes hack */
+                    z = string_size (leaf);
+
+                    /* vdb-decrypt and vdb-encrypt both ignore repository cache files. */
+                    irc = GetCacheTruncatedSize (infile, &ignored, true);
+                    if (irc == 0)
+                        STSMSG (1, ("skipping cache download file %s", leaf));
+                    else if ((fz == 0) &&
+                             (string_cmp (leaf + (z - (sizeof (".lock")-1)), sizeof (".lock"),
+                                          ".lock", sizeof (".lock") , sizeof (".lock")) == 0))
+                        STSMSG (1, ("skipping cache lock download file %s", leaf));
+                    else
+                    {
+                        EncScheme scheme;
+
+                        rc = EncryptionTypeCheck (infile, leaf, &scheme);
+                        if (rc == 0)
+                        {
+                            ArcScheme ascheme;
+                            bool changed;
+                            bool do_this_file;
+                            char new_name [MY_MAX_PATH + sizeof EncExt];
+
+                            do_this_file = DoThisFile (infile, scheme, &ascheme);
+                            strcpy (new_name, leaf);
+                            if (try_rename && do_this_file)
+                                changed = NameFixUp (new_name);
+                            else
+                                changed = false;
+/*                         KOutMsg ("### %d \n", changed); */
+
+                            if (!do_this_file)
+                            {
+                                if (changed)
+                                {
+                                    STSMSG (1, ("renaming %s to %s", leaf, new_name));
+                                    rc = KDirectoryRename (cwd, false, leaf, new_name);
+                                }
+                                else
+                                    STSMSG (1, ("skipping %s",leaf));
+                            }
+                            else
+                            {
+                                KFile * outfile;
+
+                                rc = KDirectoryCreateExclusiveAccessFile (cwd, &outfile,
+                                                                          false, 0600, kcm,
+                                                                          temp);
+                                if (rc == 0)
+                                {
+                                    const KFile * Infile;
+                                    KFile * Outfile;
+
+                                    rc = CryptFile (infile, &Infile, outfile, &Outfile, scheme);
+
+                                    if (rc == 0)
+                                    {
+                                        STSMSG (1, ("copying %s to %s", leaf, temp));
+
+                                        rc = CopyFile (Infile, Outfile, leaf, temp);
+
+                                        if (rc == 0)
+                                        {
+                                            uint32_t access;
+                                            KTime_t date;
+
+                                            rc = KDirectoryAccess (cwd, &access, "%s", leaf);
+                                            if (rc == 0)
+                                                rc = KDirectoryDate (cwd, &date, "%s", leaf);
+
+                                            KFileRelease (infile);
+                                            KFileRelease (outfile);
+                                            KFileRelease (Infile);
+                                            KFileRelease (Outfile);
+
+                                            if (rc == 0)
+                                            {
+                                                STSMSG (1, ("renaming %s to %s", temp, new_name));
+
+                                                rc = KDirectoryRename (cwd, true, temp, new_name);
+                                                if (rc)
+                                                    LOGERR (klogErr, rc, "error renaming");
+                                                else
+                                                {
+                                                    if (changed)
+                                                        KDirectoryRemove (cwd, false, "%s", leaf);
+
+                                                    /*rc =*/
+                                                    KDirectorySetAccess (cwd, false, access,
+                                                                         0777, "%s", new_name);
+                                                    KDirectorySetDate (cwd, false, date, "%s", new_name);
+                                                    /* gonna ignore an error here I think */
+                                                    return rc;
+                                                }
+                                            }
+                                        }
+                                    }
+                                    KFileRelease (outfile);
+                                }
+                            }
+                        }
+                    }
+                    KFileRelease (infile);
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static
+rc_t FileToFile (const KDirectory * sd, const char * source, 
+                 KDirectory *dd, const char * dest_, bool try_rename,
+                 char * base)
+{
+    const KFile * infile;
+    rc_t rc;
+    uint32_t access;
+    KTime_t date;
+    bool is_tmp;
+    char dest [MY_MAX_PATH + sizeof EncExt];
+
+    strcpy (dest, dest_);
+    if (try_rename)
+        NameFixUp (dest);
+
+    if ((sd == dd) && (strcmp (source, dest) == 0))
+        return FileInPlace (dd, dest, try_rename);
+
+    if (base == NULL)
+        STSMSG (1, ("%scrypting file %s to %s", De, source, dest));
+    else
+        STSMSG (1, ("%scrypting file %s to %s/%s", De, source, base, dest));
+
+    /*
+     * A Hack to make stdin/stout work within KFS
+     */
+    if (UseStdin)
+    {
+        const KFile * iinfile;
+        rc = KFileMakeStdIn (&iinfile);
+        if (rc == 0)
+        {
+            rc = KBufReadFileMakeRead (&infile, iinfile, 64 * 1024);
+            KFileRelease (iinfile);
+            if (rc == 0)
+            {
+                access = 0640;
+                date = 0;
+                goto stdin_shortcut;
+            }
+            LOGERR (klogErr, rc, "error wrapping stdin");
+            return rc;
+        }
+    }
+    rc = 0;
+    is_tmp = IsTmpFile (source);
+
+    if (is_tmp)
+    {
+        TmpFoundFlag = true;
+        if (ForceFlag)
+            ; /* LOG OVERWRITE */
+        else
+                ; /* LOG TMP */
+    }
+    if (!is_tmp || ForceFlag)
+    {
+        rc = KDirectoryAccess (sd, &access, "%s", source);
+        if (rc)
+            LOGERR (klogErr, rc, "Error check permission of source");
+
+        else
+        {
+            rc = KDirectoryDate (sd, &date, "%s", source);
+            if (rc)
+                LOGERR (klogErr, rc, "Error check date of source");
+
+            else
+            {
+                rc = KDirectoryOpenFileRead (sd, &infile, "%s", source);
+                if (rc)
+                    PLOGERR (klogErr, (klogErr, rc,
+                                       "Error opening source file '$(S)'",
+                                       "S=%s", source));
+                else
+                {
+                    EncScheme scheme;
+
+                stdin_shortcut:
+                    rc = EncryptionTypeCheck (infile, source, &scheme);
+                    if (rc == 0)
+                    {
+                        KFile * outfile;
+                        uint32_t kcm;
+
+                        /*
+                         * Hack to support stdout before VFS is complete enough to use here
+                         */
+                        if (UseStdout)
+                        {
+                            rc = KFileMakeStdOut (&outfile);
+                            if (rc)
+                                LOGERR (klogErr, rc, "error wrapping stdout");
+                        }
+                        else
+                        {
+                            kcm = ForceFlag ? kcmInit|kcmParents : kcmCreate|kcmParents;
+
+                            rc = KDirectoryCreateFile (dd, &outfile, false, 0600, kcm, "%s", dest);
+                            if (rc)
+                                PLOGERR (klogErr,(klogErr, rc, "error opening output '$(O)'",
+                                                  "O=%s", dest));
+                        }
+                        if (rc == 0)
+                        {
+                            const KFile * Infile;
+                            KFile * Outfile;
+
+                            rc = CryptFile (infile, &Infile, outfile, &Outfile, scheme);
+                            if (rc == 0)
+                            {
+                                rc = CopyFile (Infile, Outfile, source, dest);
+                                if (rc == 0)
+                                {
+                                    if (UseStdin || UseStdout)
+                                        ;
+                                    else
+                                    {
+                                        rc = KDirectorySetAccess (dd, false, access, 0777,
+                                                                  "%s", dest);
+
+                                        if (rc == 0 && date != 0)
+                                            rc = KDirectorySetDate (dd, false, date, "%s", dest);
+                                    }
+                                }
+                                KFileRelease (Infile);
+                                KFileRelease (Outfile);
+                            }
+                            KFileRelease (outfile);
+                        }
+                    }
+                    KFileRelease (infile);
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+
+static
+rc_t DoDir (const KDirectory * sd, KDirectory * dd)
+{
+    KNamelist * names;
+    rc_t rc;
+
+    rc = KDirectoryList (sd, &names, NULL, NULL, ".");
+    if (rc)
+        ;
+    else
+    {
+        uint32_t count;
+
+        rc = KNamelistCount (names, &count);
+        if (rc)
+            ;
+        else
+        {
+            uint32_t idx;
+
+            for (idx = 0; idx < count; ++idx)
+            {
+                const char * name;
+
+                rc = KNamelistGet (names, idx, &name);
+                if (rc)
+                    ;
+                else
+                {
+                    const KDirectory * nsd;
+                    KDirectory * ndd;
+                    KPathType kpt;
+
+                    kpt = KDirectoryPathType (sd, name);
+
+                    switch (kpt)
+                    {
+                    default:
+                        break;
+
+                    case kptFile:
+                        if (sd == dd)
+                            rc = FileInPlace (dd, name, true);
+                        else
+                            rc = FileToFile (sd, name, dd, name, true, NULL);
+                        break;
+
+                    case kptDir:
+                        if (sd == dd)
+                        {
+                            rc = KDirectoryOpenDirUpdate (dd, &ndd, false, "%s", name);
+                            if (rc)
+                                ;
+                            else
+                            {
+                                /* RECURSION */
+                                STSMSG (1, ("%scrypting directory %s", De, name));
+                                rc = DoDir (ndd, ndd);
+                                STSMSG (1, ("done with directory %s", name));
+                                KDirectoryRelease (ndd);
+                            }
+                        }
+                        else
+                        {
+                            rc = KDirectoryOpenDirRead (sd, &nsd, false, name);
+                            if (rc)
+                                ;
+                            else
+                            {
+                                rc = KDirectoryCreateDir (dd, 0600, kcmOpen, "%s", name);
+                                if (rc)
+                                    ;
+                                else
+                                {                                    
+                                    rc = KDirectoryOpenDirUpdate (dd, &ndd, false, "%s", name);
+                                    if (rc)
+                                        ;
+                                    else
+                                    {
+                                        /* RECURSION */
+                                        STSMSG (1, ("%scrypting directory %s", De, name));
+                                        rc = DoDir (nsd, ndd);
+                                        STSMSG (1, ("done with directory %s", name));
+
+                                        KDirectoryRelease (ndd);
+                                    }
+                                }
+                                KDirectoryRelease (nsd);
+                            }
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+        KNamelistRelease (names);
+    }
+    return rc;
+}
+
+
+static
+rc_t Start (KDirectory * cwd, const char * src, const char * dst)
+{
+    KPathType dtype;
+    KPathType stype;
+    char dpath [MY_MAX_PATH];
+    char spath [MY_MAX_PATH];
+    rc_t rc;
+    bool using_stdin, using_stdout, try_rename;
+
+    /* limited anti oops checks */
+    try_rename = (dst == NULL);
+    if (!try_rename)
+    {
+        /* try to prevent file to file clash */
+        if (strcmp (src,dst) == 0)
+            dst = NULL;
+
+        /* try to prevent file to dir clash */
+        else
+        {
+            size_t s,d;
+
+            s = string_size (src);
+            d = string_size (dst);
+
+            if (s > d)
+            {
+                if (string_cmp (src, s, dst, d, d) == 0)
+                {
+                    if ((strchr (src+d+1, '/') == NULL) &&
+                        ((src[d] == '/') ||
+                         (src[d-1] == '/')))
+                    {
+                        try_rename = true;
+                        dst = NULL;
+                    }
+                }
+            }
+        }
+    }
+
+    /*
+     * This is a quick fix "hack"
+     * A fully built out VFS should replace the KFS in use and eliminate this
+     */
+    using_stdin = (strcmp (src, "/dev/stdin") == 0);
+
+    if (using_stdin)
+    {
+        if (dst == NULL)
+        {
+            rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcNull);
+            LOGERR (klogErr, rc, "Unable to handle stdin in place");
+            return rc;
+        }
+        stype = kptFile;
+        strcpy (spath, src);
+        UseStdin = true;
+        STSMSG (1, ("reading console / stdin as input"));
+        goto stdin_shortcut;
+    }
+
+    rc = KDirectoryResolvePath (cwd, false, spath, sizeof spath, "%s", src);
+    if (rc)
+    {
+        LOGERR (klogErr, rc, "can't resolve source");
+        return rc;
+    }
+
+    stype = KDirectoryPathType (cwd, spath);
+
+    switch (stype)
+    {
+    case kptNotFound:
+        rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcNotFound);
+        break;
+
+    default:
+    case kptBadPath:
+        rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcInvalid);
+        break;
+
+    case kptCharDev:
+    case kptBlockDev:
+    case kptFIFO:
+    case kptZombieFile:
+    case kptDataset:
+    case kptDatatype:
+        rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcIncorrect);
+        break;
+
+    case kptFile:
+    case kptDir:
+        break;
+    }
+    if (rc)
+    {
+        PLOGERR (klogErr, (klogErr, rc, "can not use source '$(S)'", "S=%s", src));
+        return rc;
+    }
+
+    /*
+     * In Place Operation
+     */
+    if (dst == NULL)
+    {
+
+        /*
+         * Input is a file
+         */
+        if (stype == kptFile)
+        {
+            KDirectory * ndir;
+            char * pc;
+
+            pc = strrchr (spath, '/');
+            if (pc == NULL)
+            {
+                pc = spath;
+                ndir = cwd;
+                rc = KDirectoryAddRef (cwd);
+            }
+            else if (pc == spath)
+            {
+                ++pc;
+                ndir = cwd;
+                rc = KDirectoryAddRef (cwd);
+            }
+            else
+            {
+                *pc++ = '\0';
+                rc = KDirectoryOpenDirUpdate (cwd, &ndir, false, spath);
+            }
+
+            if (rc == 0)
+            {
+                rc = FileInPlace (ndir, pc, try_rename);
+                KDirectoryRelease (ndir);
+            }
+        }
+        /*
+         * Input is a directory
+         */
+        else
+        {
+            KDirectory * ndir;
+
+            rc = KDirectoryOpenDirUpdate (cwd, &ndir, false, spath);
+            if (rc)
+                ;
+            else
+            {
+                STSMSG (1, ("%scrypting directory %s", De, spath));
+                rc = DoDir (ndir, ndir);
+                STSMSG (1, ("done with directory %s", spath));
+                KDirectoryRelease (ndir);
+            }
+        }
+    }
+
+    /*
+     * 'Copy' Operation
+     */
+    else
+    {
+    stdin_shortcut:
+        using_stdout = (strcmp (dst, "/dev/stdout") == 0);
+        if (using_stdout == true)
+        {
+            dtype = kptFile;
+            strcpy (dpath, dst);
+            UseStdout = true;
+            STSMSG (1, ("writing console / stdout as output"));
+            goto do_file;
+        }
+        rc = KDirectoryResolvePath (cwd, false, dpath, sizeof dpath, "%s", dst);
+        if (rc)
+        {
+            LOGERR (klogErr, rc, "can't resolve destination");
+            return rc;
+        }
+        dtype = KDirectoryPathType (cwd, dpath);
+        switch (dtype)
+        {
+        default:
+        case kptBadPath:
+            rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcInvalid);
+            PLOGERR (klogErr, (klogErr, rc, "can not use destination  '$(S)'", "S=%s", dst));
+            break;
+
+        case kptCharDev:
+        case kptBlockDev:
+        case kptFIFO:
+        case kptZombieFile:
+        case kptDataset:
+        case kptDatatype:
+            rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcIncorrect);
+            PLOGERR (klogErr, (klogErr, rc, "can not use destination parameter '$(S)'", "S=%s", dst));
+            break;
+
+        case kptNotFound:
+        {
+            size_t z;
+
+            z = strlen (dst) - 1;
+            if ((dst[z] == '/') || (stype == kptDir))
+                goto do_dir;
+            else
+                goto do_file;
+        }
+
+        case kptFile:
+            if (!ForceFlag)
+            {
+                rc = RC (rcExe, rcArgv, rcParsing, rcFile, rcExists);
+                PLOGERR (klogErr, (klogErr, rc, "can not over-write '$(F)' without --force",
+                                   "F=%s", dpath));
+                break;
+            }
+        do_file:
+            if (stype == kptFile)
+            {
+                rc = FileToFile (cwd, spath, cwd, dpath, try_rename, NULL);
+            }
+            else
+            {
+                rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcIncorrect);
+                LOGERR (klogErr, rc, "Can't do directory to file");
+            }
+            break;
+
+        do_dir:
+        case kptDir:
+            /*
+             * Input is a directory
+             */
+            if (stype == kptDir)
+            {
+#if DIRECTORY_TO_DIRECTORY_SUPPORTED
+                const KDirectory * sdir;
+                KDirectory * ddir;
+
+                rc = KDirectoryOpenDirRead (cwd, &sdir, false, spath);
+                if (rc)
+                    ;
+                else
+                {
+                    if (dtype == kptNotFound)
+                    {
+                        STSMSG (1, ("creating output directory %s", dpath));
+                        rc = KDirectoryCreateDir (cwd, 0775, kcmCreate|kcmParents,
+                                                  "%s", dpath);
+                    }
+                    if (rc == 0)
+                    {
+                        rc = KDirectoryOpenDirUpdate (cwd, &ddir, false, dpath);
+                        if (rc)
+                            ;
+                        else
+                        {
+                            STSMSG (1, ("%scrypting directory %s to %s", De, spath, dpath));
+                            rc = DoDir (sdir, ddir);
+                            STSMSG (1, ("done with directory %s to %s", spath, dpath));
+                            KDirectoryRelease (ddir);
+                        }
+                    }
+                    KDirectoryRelease (sdir);
+                }
+#else
+                rc = RC (rcExe, rcArgv, rcResolving, rcPath, rcIncorrect);
+                LOGERR (klogErr, rc, "Can't do directory to directory");
+#endif
+            }
+            /*
+             * Input is a file
+             */
+            else
+            {
+                KDirectory * ndir;
+                const char * pc;
+
+                if (dtype == kptNotFound)
+                {
+                    STSMSG (1, ("creating output directory %s", dpath));
+                    rc = KDirectoryCreateDir (cwd, 0775, kcmCreate|kcmParents,
+                                              "%s", dpath);
+                }
+                if (rc == 0)
+                {
+
+                    STSMSG (1, ("opening output directory %s", dpath));
+                    rc = KDirectoryOpenDirUpdate (cwd, &ndir, false, dpath);
+                    if (rc)
+                        ;
+                    else
+                    {
+                        pc = strrchr (spath, '/');
+                        if (pc == NULL)
+                            pc = spath;
+                        else
+                            ++pc;
+
+                        rc = FileToFile (cwd, spath, ndir, pc, true, dpath);
+
+                        KDirectoryRelease (ndir);
+                    }
+                }
+            }
+            break;
+        }
+    }
+    return rc;
+}
+
+
+static
+rc_t StartFileSystem (const char * src, const char * dst)
+{
+    VFSManager * vmanager;
+    rc_t rc;
+ 
+    rc = VFSManagerMake (&vmanager);
+    if (rc)
+        LOGERR (klogErr, rc, "Failed to open file system");
+
+    else
+    {
+        rc = VFSManagerGetKryptoPassword (vmanager, Password, sizeof Password,
+                                          &PasswordSize);
+        if (rc != 0)
+            LOGERR (klogErr, rc, "unable to obtain a password");
+
+        else
+        {
+            rc = KKeyInitRead (&Key, kkeyAES128, Password, PasswordSize);
+            if (rc)
+                LOGERR (klogErr, rc, "Unable to make encryption/decryption key");
+
+            else
+            {
+                KDirectory * cwd;
+
+                rc = VFSManagerGetCWD (vmanager, &cwd);
+                if (rc)
+                    LOGERR (klogInt, rc, "unable to access current directory");
+
+                else
+                {
+                    rc = Start (cwd, src, dst);
+
+                    KDirectoryRelease (cwd);
+                }
+            }
+        }
+        VFSManagerRelease (vmanager);
+    }
+    return rc;
+}
+
+
+rc_t CommonMain (Args * args)
+{
+    rc_t rc;
+    uint32_t ocount; /* we take the address of ocount but not pcount. */
+    uint32_t pcount; /* does that help the compiler optimize? */
+
+    rc = ArgsParamCount (args, &ocount);
+    if (rc)
+        LOGERR (klogInt, rc, "failed to count parameters");
+
+    else if ((pcount = ocount) == 0)
+        MiniUsage (args);
+
+    else if (pcount > 2)
+    {
+        LOGERR (klogErr, rc, "too many parameters");
+        MiniUsage(args);
+    }
+            
+    else
+    {
+        const char * dst; /* we only take the address of one of these */
+        const char * src;
+
+        rc = ArgsOptionCount (args, OPTION_FORCE, &ocount);
+        if (rc)
+            LOGERR (klogInt, rc, "failed to examine force option");
+
+        else
+        {
+            ForceFlag = (ocount > 0);
+
+            /* -----
+             * letting comp put src in register
+             * only if it wants
+             */
+            rc = ArgsParamValue (args, 0, &dst);
+            if (rc)
+                LOGERR (klogInt, rc, "Failure to fetch "
+                        "source parameter");
+
+            else
+            {
+                src = dst;
+
+                if (pcount == 1)
+                    dst = NULL;
+
+                else
+                {
+                    rc = ArgsParamValue (args, 1, &dst);
+                    if (rc)
+                        LOGERR (klogInt, rc, "Failure to fetch "
+                                "destination parameter");
+                }
+
+                if (rc == 0)
+                    rc = StartFileSystem (src, dst);
+            }
+        }
+    }
+    return rc;
+}
+
+/* EOF */
diff --git a/tools/vdb-decrypt/shared.h b/tools/vdb-decrypt/shared.h
new file mode 100644
index 0000000..37998bd
--- /dev/null
+++ b/tools/vdb-decrypt/shared.h
@@ -0,0 +1,93 @@
+/*==============================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#ifndef _tools_vdb_decrypt_shared_h_
+#define _tools_vdb_decrypt_shared_h_
+
+#define DIRECTORY_TO_DIRECTORY_SUPPORTED 0
+
+#include <klib/defs.h>
+#include <krypto/key.h>
+#include <kapp/args.h>
+
+#define OPTION_FORCE   "force"
+#define OPTION_DEC_SRA "decrypt-sra-files"
+#define ALIAS_FORCE    "f"
+#define ALIAS_DEC_SRA  NULL
+
+extern const bool Decrypting;
+
+extern char Password [];
+extern size_t PasswordSize;
+
+extern const char De [];
+extern const char de [];
+extern const char SraOption[];
+
+extern const char EncExt[];
+bool NameFixUp (char * name);
+extern const char * ForceUsage[];
+
+/* for encfile encrypt/decrypt */
+extern KKey Key;
+
+
+typedef enum ArcScheme
+{
+    arcError,
+    arcNone,
+    arcSRAFile
+} ArcScheme;
+
+extern bool IsArchive; /* this approach makes threading fail */
+
+struct KFile;
+
+ArcScheme ArchiveTypeCheck (const struct KFile * f);
+
+typedef enum EncScheme
+{
+    encError,
+    encNone,
+    encEncFile,
+    encSraEncFile,
+    encWGAEncFile
+} EncScheme;
+
+void CryptOptionLines ();
+
+bool DoThisFile (const struct KFile * infile, EncScheme enc, ArcScheme * arc);
+
+struct Args;
+rc_t CommonMain (struct Args * args);
+
+rc_t CryptFile (const struct KFile * in, const struct KFile ** new_in,
+                struct KFile * out, struct KFile ** new_out, EncScheme scheme);
+
+
+#endif
+
+/* EOF */
diff --git a/tools/vdb-decrypt/vdb-decrypt.c b/tools/vdb-decrypt/vdb-decrypt.c
new file mode 100644
index 0000000..6ff5d65
--- /dev/null
+++ b/tools/vdb-decrypt/vdb-decrypt.c
@@ -0,0 +1,280 @@
+/*==============================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+
+#include "vdb-decrypt.vers.h"
+
+#include "shared.h"
+
+#include <krypto/wgaencrypt.h>
+#include <krypto/encfile.h>
+#include <kfs/file.h>
+#include <kfs/cacheteefile.h>
+#include <klib/rc.h>
+#include <klib/defs.h>
+#include <klib/log.h>
+#include <klib/status.h>
+
+#include <string.h>
+#include <assert.h>
+
+/* Version  EXTERN
+ *  return 4-part version code: 0xMMmmrrrr, where
+ *      MM = major release
+ *      mm = minor release
+ *    rrrr = bug-fix release
+ */
+ver_t CC KAppVersion ( void )
+{
+    return VDB_DECRYPT_VERS;
+}
+
+
+/* Usage
+ */
+const char UsageDefaultName [] = "vdb-decrypt";
+const char * UsageSra []       = { "decrypt sra archives - [NOT RECOMMENDED]",
+                                   NULL };
+const char De[]             = "De";
+const char de[]             = "de";
+const char OptionSra[] = OPTION_DEC_SRA;
+
+
+static
+OptDef Options[] = 
+{
+    /* name            alias max times oparam required fmtfunc help text loc */
+    { OPTION_DEC_SRA, ALIAS_DEC_SRA, NULL, UsageSra,      0, false, false },
+    { OPTION_FORCE,   ALIAS_FORCE,   NULL, ForceUsage,   0, false, false }
+};
+
+
+static 
+bool DecryptSraFlag = false;
+
+
+const bool Decrypting = true;
+
+void CryptOptionLines ()
+{
+    HelpOptionLine (ALIAS_DEC_SRA, OPTION_DEC_SRA, NULL, UsageSra);
+}
+
+bool DoThisFile (const KFile * infile, EncScheme enc, ArcScheme * parc)
+{
+    const KFile * Infile;
+    ArcScheme arc;
+    rc_t rc;
+
+    *parc = arcNone;
+
+    switch (enc)
+    {
+    default:
+        STSMSG (1, ("not encrypted"));
+        return false;
+
+    case encEncFile:
+        /*
+         * this will apply to KEncFiles versions 1 and 2, maybe not 3
+         * but will hopefully become obsolete eventually.
+         */
+        rc = KEncFileMakeRead (&Infile, infile, &Key);
+        if (rc)
+            return false;
+        break;
+
+    case encSraEncFile:
+        /* these are NCBIsenc instead of NCBInenc */
+        goto sra_enc_file;
+
+    case encWGAEncFile:
+        rc = KFileMakeWGAEncRead (&Infile, infile, Password, PasswordSize);
+        if (rc)
+            return false;
+        break;
+    }
+    arc = ArchiveTypeCheck (Infile);
+    KFileRelease (Infile);
+    switch (arc)
+    {
+    default:
+        return false;
+    case arcNone:
+        return true;
+    case arcSRAFile:
+        break;
+    }
+sra_enc_file:
+    *parc = arcSRAFile;
+    STSMSG (1, ("encrypted sra archive\ndecryption%s requested",
+                DecryptSraFlag ? "" : " not"));
+    return DecryptSraFlag;
+}
+
+bool NameFixUp (char * name)
+{
+    char * pc = strrchr (name, '.');
+    if (pc != NULL)
+    {
+        if (strcmp (pc, EncExt) == 0)
+        {
+            pc[0] = '\0';
+            return true;
+        }
+    }
+    return false;
+}
+
+rc_t CryptFile (const KFile * in, const KFile ** new_in,
+                KFile * out, KFile ** new_out, EncScheme scheme)
+{
+    const KFile * dec;
+    rc_t rc;
+
+    assert (in);
+    assert (out);
+    assert (new_in);
+    assert (new_out);
+
+
+    rc = KFileAddRef (out);
+    if (rc)
+        return rc;
+
+    switch (scheme)
+    {
+    default:
+    case encError:
+        rc = RC (rcExe, rcFile, rcClassifying, rcFile, rcInvalid);
+        break;
+        
+    case encNone:
+    copy:
+        rc = KFileAddRef (in);
+        if (rc)
+            goto fail;
+        *new_in = in;
+        *new_out = out;
+        STSMSG (1, ("not encrypted just copying"));
+        return 0;
+
+    case encEncFile:
+        rc = KEncFileMakeRead (&dec, in, &Key);
+    made_enc:
+        if (rc)
+            goto fail;
+
+        switch (ArchiveTypeCheck (dec))
+        {
+        default:
+        case arcError:
+            rc = RC (rcExe, rcFile, rcClassifying, rcFile, rcInvalid);
+            break;
+
+        case arcSRAFile:
+            if (!DecryptSraFlag)
+            {
+                rc = KFileRelease (dec);
+                if (rc)
+                {
+                    KFileRelease (dec);
+                    KFileRelease (in);
+                    goto fail;
+                }
+                goto copy;
+            }
+            /* fall through */
+        case arcNone:
+            *new_out = out;
+            *new_in = dec;
+            return 0;
+        }
+        break;
+
+    case encWGAEncFile:
+        rc = KFileMakeWGAEncRead (&dec, in, Password, PasswordSize);
+        goto made_enc;
+        break;
+    }
+    fail:
+        KFileRelease (out);
+        *new_in = *new_out = NULL;
+        return rc;
+}
+
+
+/* KMain - EXTERN
+ *  executable entrypoint "main" is implemented by
+ *  an OS-specific wrapper that takes care of establishing
+ *  signal handlers, logging, etc.
+ *
+ *  in turn, OS-specific "main" will invoke "KMain" as
+ *  platform independent main entrypoint.
+ *
+ *  "argc" [ IN ] - the number of textual parameters in "argv"
+ *  should never be < 0, but has been left as a signed int
+ *  for reasons of tradition.
+ *
+ *  "argv" [ IN ] - array of NUL terminated strings expected
+ *  to be in the shell-native character set: ASCII or UTF-8
+ *  element 0 is expected to be executable identity or path.
+ */
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args * args;
+    rc_t rc;
+
+    KStsLevelSet (1);
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 1, Options,
+                            sizeof (Options) / sizeof (Options[0]));
+    if (rc)
+        LOGERR (klogInt, rc, "failed to parse command line parameters");
+
+    else
+    {
+        uint32_t ocount;
+
+        rc = ArgsOptionCount (args, OPTION_DEC_SRA, &ocount);
+        if (rc)
+            LOGERR (klogInt, rc, "failed to examine decrypt "
+                    "sra option");
+        else
+        {
+            DecryptSraFlag = (ocount > 0);
+
+            rc = CommonMain (args);
+        }
+        ArgsWhack (args);
+    }
+
+    STSMSG (1, ("exiting: %R (%u)", rc, rc));
+    return rc;
+}
+
+
+/* EOF */
diff --git a/tools/vdb-decrypt/vdb-decrypt.vers b/tools/vdb-decrypt/vdb-decrypt.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/vdb-decrypt/vdb-decrypt.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/vdb-decrypt/vdb-encrypt.c b/tools/vdb-decrypt/vdb-encrypt.c
new file mode 100644
index 0000000..c50de63
--- /dev/null
+++ b/tools/vdb-decrypt/vdb-encrypt.c
@@ -0,0 +1,227 @@
+/*==============================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+
+#include "vdb-encrypt.vers.h"
+
+#include "shared.h"
+
+#include <krypto/wgaencrypt.h>
+#include <krypto/encfile.h>
+#include <kfs/file.h>
+#include <klib/rc.h>
+#include <klib/defs.h>
+#include <klib/log.h>
+#include <klib/status.h>
+
+#include <assert.h>
+#include <string.h>
+
+/* Version  EXTERN
+ *  return 4-part version code: 0xMMmmrrrr, where
+ *      MM = major release
+ *      mm = minor release
+ *    rrrr = bug-fix release
+ */
+ver_t CC KAppVersion ( void )
+{
+    return VDB_ENCRYPT_VERS;
+}
+
+
+/* Usage
+ */
+const char UsageDefaultName [] = "vdb-encrypt";
+const char De[]             = "En";
+const char de[]             = "en";
+
+
+static
+OptDef Options[] = 
+{
+    /* name            alias max times oparam required fmtfunc help text loc */
+    { OPTION_FORCE,   ALIAS_FORCE,   NULL, ForceUsage,   0, false, false }
+};
+
+
+static 
+bool DecryptSraFlag = false;
+
+const bool Decrypting = false;
+
+void CryptOptionLines () {}
+
+bool DoThisFile (const KFile * infile, EncScheme enc, ArcScheme * parc)
+{
+    const KFile * Infile;
+    ArcScheme arc;
+    rc_t rc;
+    bool do_enc;
+
+    *parc = arcNone;
+
+    switch (enc)
+    {
+    default:
+        STSMSG (1, ("error checking encrypted"));
+        return false;
+
+    case encNone:
+        do_enc = true;
+        rc = KFileAddRef (infile);
+        if (rc)
+            return false;
+        Infile = infile;
+        break;
+
+    case encEncFile:
+        do_enc = false;
+        rc = KEncFileMakeRead (&Infile, infile, &Key);
+        if (rc)
+            return false;
+        break;
+
+    case encWGAEncFile:
+        do_enc = false;
+        rc = KFileMakeWGAEncRead (&Infile, infile, Password, PasswordSize);
+        if (rc)
+            return false;
+        break;
+    }
+    arc = ArchiveTypeCheck (Infile);
+    KFileRelease (Infile);
+    if (arc == arcSRAFile)
+    {
+        STSMSG (1, ("%sencrypted sra archive", do_enc ? "un" : ""));
+        *parc = arcSRAFile;
+    }
+    return do_enc;
+}
+
+bool NameFixUp (char * name)
+{
+    char * pc = strrchr (name, '.');
+
+    if (((pc != NULL) &&
+         (strcmp (pc, EncExt) == 0)) ||
+        IsArchive )
+        return false;
+
+    strcat (name, EncExt);
+
+    return true;
+}
+
+rc_t CryptFile (const KFile * in, const KFile ** new_in,
+                KFile * out, KFile ** new_out, EncScheme scheme)
+{
+    rc_t rc;
+
+    assert (in);
+    assert (out);
+    assert (new_in);
+    assert (new_out);
+
+    *new_in = *new_out = NULL;
+
+    rc = KFileAddRef (in);
+    if (rc)
+        return rc;
+
+    switch (scheme)
+    {
+    default:
+    case encError:
+        KFileRelease (in);
+        return RC (rcExe, rcEncryption, rcParsing, rcFile, rcInvalid);
+
+    case encNone:
+        rc = KEncFileMakeWrite (new_out, out, &Key);
+        if (rc)
+        {
+            KFileRelease (in);
+            return rc;
+        }
+        break;
+
+    case encEncFile:
+    case encWGAEncFile:
+        rc = KFileAddRef (out);
+        if (rc)
+        {
+            KFileRelease (in);
+            return rc;
+        }
+        *new_out = out;
+        STSMSG (1, ("already encrypted just copying"));
+        break;
+    }
+    *new_in = in;
+    return 0;
+}
+
+
+/* KMain - EXTERN
+ *  executable entrypoint "main" is implemented by
+ *  an OS-specific wrapper that takes care of establishing
+ *  signal handlers, logging, etc.
+ *
+ *  in turn, OS-specific "main" will invoke "KMain" as
+ *  platform independent main entrypoint.
+ *
+ *  "argc" [ IN ] - the number of textual parameters in "argv"
+ *  should never be < 0, but has been left as a signed int
+ *  for reasons of tradition.
+ *
+ *  "argv" [ IN ] - array of NUL terminated strings expected
+ *  to be in the shell-native character set: ASCII or UTF-8
+ *  element 0 is expected to be executable identity or path.
+ */
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args * args;
+    rc_t rc;
+
+    KStsLevelSet (1);
+
+    rc = ArgsMakeAndHandle (&args, argc, argv, 1, Options,
+                            sizeof (Options) / sizeof (Options[0]));
+    if (rc)
+        LOGERR (klogInt, rc, "failed to parse command line parameters");
+
+    else
+    {
+        rc = CommonMain (args);
+
+        ArgsWhack (args);
+    }
+
+    STSMSG (1, ("exiting: %R (%u)", rc, rc));
+    return rc;
+}
+
+
+/* EOF */
diff --git a/tools/vdb-decrypt/vdb-encrypt.vers b/tools/vdb-decrypt/vdb-encrypt.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/vdb-decrypt/vdb-encrypt.vers
@@ -0,0 +1 @@
+2.3.2
diff --git a/tools/vdb-dump/#Makefile# b/tools/vdb-dump/#Makefile#
new file mode 100644
index 0000000..35872c2
--- /dev/null
+++ b/tools/vdb-dump/#Makefile#
@@ -0,0 +1,130 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/vdb-dump
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS = \
+
+EXT_TOOLS = \
+	vdb-dump
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+#-------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+	@ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(ALL_TOOLS): vers-includes
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# tag
+#
+tag: $(addsuffix _tag,$(ALL_TOOLS))
+
+.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+
+#-------------------------------------------------------------------------------
+# vdb-dump
+#  vdb dump tool
+#
+VDB_DUMP_SRC = \
+	vdb-dump-num-gen \
+	vdb-dump-context \
+	vdb-dump-coldefs \
+	vdb-dump-tools \
+	vdb-dump-str \
+	vdb-dump-helper \
+	vdb-dump-filter \
+	vdb-dump-formats \
+	vdb-dump
+
+VDB_DUMP_OBJ = \
+	$(addsuffix .$(OBJX),$(VDB_DUMP_SRC))
+
+VDB_DUMP_LIB = \
+	-ssrapath \
+	-ssraschema \
+	-dalign-reader \
+	-daxf \
+	-dsraxf \
+	-dvxf \
+	-lksrch \
+	-lvdb \
+	-lkdb \
+	-lvfs \
+	-lkrypto \
+	-lkapp \
+	-lkfg \
+	-lkfs \
+	-lklib \
+	-lm
+
+$(BINDIR)/vdb-dump: $(VDB_DUMP_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_DUMP_LIB)
+
+vdb-dump_tag:
+	@ $(TOP)/build/tag-module.sh $(MODULE) vdb-dump $(VDB_DUMP_OBJ)
diff --git a/tools/vdb-dump/Makefile b/tools/vdb-dump/Makefile
index aa2fddd..6500242 100644
--- a/tools/vdb-dump/Makefile
+++ b/tools/vdb-dump/Makefile
@@ -42,15 +42,13 @@ ALL_TOOLS = \
 #-------------------------------------------------------------------------------
 # outer targets
 #
-vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
-
-all std: makedirs vers-includes
+all std: vers-includes
 	@ $(MAKE_CMD) $(TARGDIR)/$@
 
-$(ALL_TOOLS): makedirs vers-includes
+$(ALL_TOOLS): vers-includes
 	@ $(MAKE_CMD) $(BINDIR)/$@
 
-.PHONY: vers-includes all std $(ALL_TOOLS)
+.PHONY: all std $(ALL_TOOLS)
 
 #-------------------------------------------------------------------------------
 # all
@@ -69,18 +67,18 @@ $(TARGDIR)/std: \
 .PHONY: $(TARGDIR)/std
 
 #-------------------------------------------------------------------------------
-# clean
+# vers-includes
 #
-clean: stdclean
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
 
-.PHONY: clean
+.PHONY: $(TARGDIR)/vers-includes
 
 #-------------------------------------------------------------------------------
-# tag
+# clean
 #
-tag: $(addsuffix _tag,$(ALL_TOOLS))
+clean: stdclean
 
-.PHONY: tag $(addsuffix _tag,$(ALL_TOOLS))
+.PHONY: clean
 
 #-------------------------------------------------------------------------------
 # vdb-dump
@@ -101,26 +99,21 @@ VDB_DUMP_OBJ = \
 	$(addsuffix .$(OBJX),$(VDB_DUMP_SRC))
 
 VDB_DUMP_LIB = \
-	-ssrapath \
+	-lkapp \
 	-ssraschema \
 	-dalign-reader \
-	-daxf \
-	-dsraxf \
-	-dvxf \
-	-lksrch \
+	$(READONLY_SCHEMA_LIBS) \
 	-lvdb \
 	-lkdb \
-	-lkapp \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
 	-lkfg \
 	-lkfs \
+	-lksrch \
+	-lkproc \
 	-lklib \
-	-ldl \
-	-lz \
-	-lbz2 \
 	-lm
 
 $(BINDIR)/vdb-dump: $(VDB_DUMP_OBJ)
 	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_DUMP_LIB)
-
-vdb-dump_tag:
-	@ $(TOP)/build/tag-module.sh $(MODULE) vdb-dump $(VDB_DUMP_OBJ)
diff --git a/tools/vdb-dump/vdb-dump-coldefs.c b/tools/vdb-dump/vdb-dump-coldefs.c
index fcd9974..fac3f38 100644
--- a/tools/vdb-dump/vdb-dump-coldefs.c
+++ b/tools/vdb-dump/vdb-dump-coldefs.c
@@ -33,17 +33,36 @@
 #include <klib/printf.h>
 #include <klib/log.h>
 #include <klib/rc.h>
+#include <vdb/vdb-priv.h>
 #include <sra/sradb.h>
 #include <sra/pacbio.h>
-#include <fmtdef.h>
 #include <os-native.h>
 #include <sysalloc.h>
 
+/* for platforms */
+#include <insdc/sra.h>
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 #include <assert.h>
 
+/* once we get used to having moved the read descriptor
+   out of SRA, we should begin using those names.
+   if anyone has an investment in the old names, we may
+   want to provide a switch for using them... */
+#if USE_OLD_SRA_NAME || 1
+#define SRA_NAME( name ) \
+    "SRA_" #name
+#define SRA_NAMES( name1, name2 ) \
+    "SRA_" #name1 "|SRA_" #name2
+#else
+#define SRA_NAME( name ) \
+    # name
+#define SRA_NAMES( name1, name2 ) \
+    #name1 "|" #name2
+#endif
+
 /* implementation of the value-translation-functions */
 
 const char SRA_PB_HS_0[] = { "SRA_PACBIO_HOLE_SEQUENCING" };
@@ -74,38 +93,34 @@ const char *vdcd_get_hole_status_txt( const uint32_t id )
     return( SRA_PB_HS_9 );
 }
 
-const char SRA_PF_0[] = { "SRA_PLATFORM_UNDEFINED" };
-const char SRA_PF_1[] = { "SRA_PLATFORM_454" };
-const char SRA_PF_2[] = { "SRA_PLATFORM_ILLUMINA" };
-const char SRA_PF_3[] = { "SRA_PLATFORM_ABSOLID" };
-const char SRA_PF_4[] = { "SRA_PLATFORM_COMPLETE_GENOMICS" };
-const char SRA_PF_5[] = { "SRA_PLATFORM_HELICOS" };
-const char SRA_PF_6[] = { "SRA_PLATFORM_PACBIO_SMRT" };
-const char SRA_PF_7[] = { "SRA_PLATFORM_ION_TORRENT" };
-const char SRA_PF_8[] = { "unknown platform" };
-
 const char *vdcd_get_platform_txt( const uint32_t id )
 {
+#define CASE( id ) \
+    case id : return # id; break
+
     switch( id )
     {
-        case 0  : return( SRA_PF_0 ); break;
-        case 1  : return( SRA_PF_1 ); break;
-        case 2  : return( SRA_PF_2 ); break;
-        case 3  : return( SRA_PF_3 ); break;
-        case 4  : return( SRA_PF_4 ); break;
-        case 5  : return( SRA_PF_5 ); break;
-        case 6  : return( SRA_PF_6 ); break;
-        case 7  : return( SRA_PF_7 ); break;
+        CASE ( SRA_PLATFORM_UNDEFINED );
+        CASE ( SRA_PLATFORM_454 );
+        CASE ( SRA_PLATFORM_ILLUMINA );
+        CASE ( SRA_PLATFORM_ABSOLID );
+        CASE ( SRA_PLATFORM_COMPLETE_GENOMICS );
+        CASE ( SRA_PLATFORM_HELICOS );
+        CASE ( SRA_PLATFORM_PACBIO_SMRT );
+        CASE ( SRA_PLATFORM_ION_TORRENT );
+        CASE ( SRA_PLATFORM_SANGER );
     }
-    return( SRA_PF_8 );
+#undef CASE
+
+    return "unknown platform";
 }
 
-const char SRA_RT_0[] = { "SRA_READ_TYPE_TECHNICAL" };
-const char SRA_RT_1[] = { "SRA_READ_TYPE_BIOLOGICAL" };
-const char SRA_RT_2[] = { "SRA_READ_TYPE_TECHNICAL|SRA_READ_TYPE_FORWARD" };
-const char SRA_RT_3[] = { "SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_FORWARD" };
-const char SRA_RT_4[] = { "SRA_READ_TYPE_TECHNICAL|SRA_READ_TYPE_REVERSE" };
-const char SRA_RT_5[] = { "SRA_READ_TYPE_BIOLOGICAL|SRA_READ_TYPE_REVERSE" };
+const char SRA_RT_0[] = { SRA_NAME  ( READ_TYPE_TECHNICAL ) };
+const char SRA_RT_1[] = { SRA_NAME  ( READ_TYPE_BIOLOGICAL ) };
+const char SRA_RT_2[] = { SRA_NAMES ( READ_TYPE_TECHNICAL, READ_TYPE_FORWARD ) };
+const char SRA_RT_3[] = { SRA_NAMES ( READ_TYPE_BIOLOGICAL, READ_TYPE_FORWARD ) };
+const char SRA_RT_4[] = { SRA_NAMES ( READ_TYPE_TECHNICAL, READ_TYPE_REVERSE ) };
+const char SRA_RT_5[] = { SRA_NAMES ( READ_TYPE_BIOLOGICAL, READ_TYPE_REVERSE ) };
 const char SRA_RT_6[] = { "unknown read-type" };
 
 const char *vdcd_get_read_type_txt( const uint32_t id )
@@ -122,10 +137,10 @@ const char *vdcd_get_read_type_txt( const uint32_t id )
     return( SRA_RT_6 );
 }
 
-const char SRA_FT_0[] = { "SRA_READ_FILTER_PASS" };
-const char SRA_FT_1[] = { "SRA_READ_FILTER_REJECT" };
-const char SRA_FT_2[] = { "SRA_READ_FILTER_CRITERIA" };
-const char SRA_FT_3[] = { "SRA_READ_FILTER_REDACTED" };
+const char SRA_FT_0[] = { SRA_NAME ( READ_FILTER_PASS ) };
+const char SRA_FT_1[] = { SRA_NAME ( READ_FILTER_REJECT ) };
+const char SRA_FT_2[] = { SRA_NAME ( READ_FILTER_CRITERIA ) };
+const char SRA_FT_3[] = { SRA_NAME ( READ_FILTER_REDACTED ) };
 const char SRA_FT_4[] = { "unknown read-filter" };
 
 const char *vdcd_get_read_filter_txt( const uint32_t id )
@@ -147,28 +162,43 @@ const char *vdcd_get_read_filter_txt( const uint32_t id )
 #define SRA_KEY_READ_FILTER "INSDC:SRA:read_filter"
 #define SRA_PACBIO_HOLE_STATUS "PacBio:hole:status"
 
-value_trans_fct_t vdcd_get_value_trans_fct( const char* name )
+
+static bool vdcd_type_cmp( const VSchema *my_schema, VTypedecl * typedecl, const char * to_check )
+{
+    VTypedecl type_to_check;
+    rc_t rc = VSchemaResolveTypedecl ( my_schema, &type_to_check, to_check );
+    if ( rc == 0 )
+    {
+        return VTypedeclToTypedecl ( typedecl, my_schema, &type_to_check, NULL, NULL );
+    }
+    return false;
+}
+
+
+static value_trans_fct_t vdcd_get_value_trans_fct( const VSchema *my_schema, VTypedecl * typedecl )
 {
     value_trans_fct_t res = NULL;
 
-    if ( name == NULL ) return res;
-    if ( strcmp( name, SRA_KEY_PLATFORM_ID ) == 0 )
+    if ( my_schema == NULL ) return res;
+    if ( typedecl == NULL ) return res;
+
+    if ( vdcd_type_cmp( my_schema, typedecl, SRA_KEY_PLATFORM_ID ) )
     {
         res = vdcd_get_platform_txt;
     }
-    else if ( strcmp( name, SRA_KEY_XREAD_TYPE ) == 0 )
+    else if ( vdcd_type_cmp( my_schema, typedecl, SRA_KEY_XREAD_TYPE ) )
     {
         res = vdcd_get_read_type_txt;
     }
-    else if ( strcmp( name, SRA_KEY_READ_TYPE ) == 0 )
+    else if ( vdcd_type_cmp( my_schema, typedecl, SRA_KEY_READ_TYPE ) )
     {
         res = vdcd_get_read_type_txt;
     }
-    else if ( strcmp( name, SRA_KEY_READ_FILTER ) == 0 )
+    else if ( vdcd_type_cmp( my_schema, typedecl, SRA_KEY_READ_FILTER ) )
     {
         res = vdcd_get_read_filter_txt;
     }
-    else if ( strcmp( name, SRA_PACBIO_HOLE_STATUS ) == 0 )
+    else if ( vdcd_type_cmp( my_schema, typedecl, SRA_PACBIO_HOLE_STATUS ) )
     {
         res = vdcd_get_hole_status_txt;
     }
@@ -176,8 +206,9 @@ value_trans_fct_t vdcd_get_value_trans_fct( const char* name )
     return res;
 }
 
+
 /* implementation of the dimension-translation-functions */
-char *vdcd_get_read_desc_txt( const uint8_t * src )
+static char *vdcd_get_read_desc_txt( const uint8_t * src )
 {
     char *res = calloc( 1, 120 );
     SRAReadDesc desc;
@@ -189,7 +220,7 @@ char *vdcd_get_read_desc_txt( const uint8_t * src )
     return res;
 }
 
-char *vdcd_get_spot_desc_txt( const uint8_t *src )
+static char *vdcd_get_spot_desc_txt( const uint8_t *src )
 {
     char *res = calloc( 1, 120 );
     SRASpotDesc desc;
@@ -205,11 +236,22 @@ char *vdcd_get_spot_desc_txt( const uint8_t *src )
 #define SRA_KEY_READ_DESC "NCBI:SRA:ReadDesc"
 #define SRA_KEY_SPOT_DESC "NCBI:SRA:SpotDesc"
 
-dim_trans_fct_t vdcd_get_dim_trans_fct( const char* name )
+static dim_trans_fct_t vdcd_get_dim_trans_fct( const VSchema *my_schema, VTypedecl * typedecl )
 {
     dim_trans_fct_t res = NULL;
 
-    if ( name == NULL ) return res;
+    if ( my_schema == NULL ) return res;
+    if ( typedecl == NULL ) return res;
+
+    if ( vdcd_type_cmp( my_schema, typedecl, SRA_KEY_READ_DESC ) )
+    {
+        res = vdcd_get_read_desc_txt;
+    }
+    else if ( vdcd_type_cmp( my_schema, typedecl, SRA_KEY_SPOT_DESC ) )
+    {
+        res = vdcd_get_spot_desc_txt;
+    }
+/*
     if ( strcmp( name, SRA_KEY_READ_DESC ) == 0 )
     {
         res = vdcd_get_read_desc_txt;
@@ -218,22 +260,31 @@ dim_trans_fct_t vdcd_get_dim_trans_fct( const char* name )
     {
         res = vdcd_get_spot_desc_txt;
     }
+*/
     return res;
 }
 
 
+const char * const_s_Ascii = "Ascii";
+const char * const_s_Unicode = "Unicode";
+const char * const_s_Uint = "Uint";
+const char * const_s_Int = "Int";
+const char * const_s_Float = "Float";
+const char * const_s_Bool = "Bool";
+const char * const_s_Unknown = "unknown";
+
 char *vdcd_make_domain_txt( const uint32_t domain )
 {
     char* res= NULL;
     switch( domain )
     {
-        case vtdAscii   : res = strdup( "Ascii" ); break;
-        case vtdUnicode : res = strdup( "Unicode" ); break;
-        case vtdUint    : res = strdup( "Uint" ); break;
-        case vtdInt     : res = strdup( "Int" ); break;
-        case vtdFloat   : res = strdup( "Float" ); break;
-        case vtdBool    : res = strdup( "Bool" ); break;
-        default : res = strdup( "unknown" ); break;
+        case vtdAscii   : res = string_dup_measure( const_s_Ascii, NULL ); break;
+        case vtdUnicode : res = string_dup_measure( const_s_Unicode, NULL ); break;
+        case vtdUint    : res = string_dup_measure( const_s_Uint, NULL ); break;
+        case vtdInt     : res = string_dup_measure( const_s_Int, NULL ); break;
+        case vtdFloat   : res = string_dup_measure( const_s_Float, NULL ); break;
+        case vtdBool    : res = string_dup_measure( const_s_Bool, NULL ); break;
+        default : res = string_dup_measure( const_s_Unknown, NULL ); break;
     }
     return res;
 }
@@ -244,11 +295,11 @@ p_col_def vdcd_init_col( const char* name, const size_t str_limit )
     p_col_def res = NULL;
     if ( name == NULL ) return res;
     if ( name[0] == 0 ) return res;
-    res = (p_col_def)calloc( 1, sizeof( col_def ) );
+    res = ( p_col_def )calloc( 1, sizeof( col_def ) );
     if ( res != NULL )
     {
         res->name = string_dup_measure ( name, NULL );
-        vds_make( &(res->content), str_limit, DUMP_STR_INC );
+        vds_make( &( res->content ), str_limit, DUMP_STR_INC );
     }
     return res;
 }
@@ -257,7 +308,7 @@ void vdcd_destroy_col( p_col_def col_def )
 {
     if ( col_def == NULL ) return;
     if ( col_def->name ) free( col_def->name );
-    vds_free( &(col_def->content) );
+    vds_free( &( col_def->content ) );
     free( col_def );
 }
 
@@ -273,7 +324,7 @@ bool vdcd_init( col_defs** defs, const size_t str_limit )
         (*defs)->max_colname_chars = 0;
         res = true;
     }
-    (*defs)->str_limit = str_limit;
+    ( *defs )->str_limit = str_limit;
     return res;
 }
 
@@ -296,7 +347,7 @@ static p_col_def vdcd_append_col( col_defs* defs, const char* name )
     {
         if ( VectorAppend( &(defs->cols), NULL, new_col ) == 0 )
         {
-            int len = strlen( name );
+            int len = string_size( name );
             if ( len > defs->max_colname_chars )
                 defs->max_colname_chars = len;
         }
@@ -304,8 +355,10 @@ static p_col_def vdcd_append_col( col_defs* defs, const char* name )
     return new_col;
 }
 
-bool vdcd_parse_string( col_defs* defs, const char* src )
+
+bool vdcd_parse_string( col_defs* defs, const char* src, const VTable *my_table )
 {
+    uint32_t count = 0;
     char colname[MAX_COL_NAME_LEN+1];
     size_t i_dest = 0;
     if ( defs == NULL ) return false;
@@ -332,9 +385,42 @@ bool vdcd_parse_string( col_defs* defs, const char* src )
         colname[i_dest]=0;
         vdcd_append_col( defs, colname );
     }
-    return ( VectorLength( &(defs->cols) ) > 0 );
+    count = VectorLength( &(defs->cols) ) > 0;
+    if ( count > 0 && my_table != NULL )
+    {
+        const VCursor *my_cursor;
+        rc_t rc = VTableCreateCursorRead( my_table, &my_cursor );
+        DISP_RC( rc, "VTableCreateCursorRead() failed" );
+        if ( rc == 0 )
+        {
+            uint32_t found = 0;
+            uint32_t idx;
+            for ( idx = 0; idx < count && rc == 0; ++idx )
+            {
+                col_def *col = ( col_def * )VectorGet( &(defs->cols), idx );
+                if ( col != NULL )
+                {
+                    rc = VCursorAddColumn( my_cursor, &(col->idx), col->name );
+                    DISP_RC( rc, "VCursorAddColumn() failed" );
+                    if ( rc == 0 )
+                    {
+                        rc = VCursorDatatype( my_cursor, col->idx,
+                                  &(col->type_decl), &(col->type_desc) );
+                        DISP_RC( rc, "VCursorDatatype() failed" );
+                        if ( rc == 0 )
+                            found++;
+                    }
+                }
+            }
+            count = found;
+            rc = VCursorRelease( my_cursor );
+            DISP_RC( rc, "VCursorRelease() failed" );
+        }
+    }
+    return ( count > 0 );
 }
 
+
 bool vdcd_extract_from_table( col_defs* defs, const VTable *my_table )
 {
     bool col_defs_found = false;
@@ -355,7 +441,7 @@ bool vdcd_extract_from_table( col_defs* defs, const VTable *my_table )
             if ( rc == 0 )
             {
                 uint32_t i;
-                for ( i=0; i<n; ++i )
+                for ( i = 0; i < n && rc ==0; ++i )
                 {
                     const char *col_name;
                     rc = KNamelistGet( names, i, &col_name );
@@ -377,7 +463,7 @@ bool vdcd_extract_from_table( col_defs* defs, const VTable *my_table )
                         }
                     }
                 }
-            col_defs_found = ( found > 0 );
+                col_defs_found = ( found > 0 );
             }
             rc = VCursorRelease( my_cursor );
             DISP_RC( rc, "VCursorRelease() failed" );
@@ -388,6 +474,41 @@ bool vdcd_extract_from_table( col_defs* defs, const VTable *my_table )
     return col_defs_found;
 }
 
+
+bool vdcd_extract_from_phys_table( col_defs* defs, const VTable *my_table )
+{
+    bool col_defs_found = false;
+    KNamelist *names;
+    rc_t rc = VTableListPhysColumns( my_table, &names );
+    DISP_RC( rc, "VTableListPhysColumns() failed" );
+    if ( rc == 0 )
+    {
+        uint32_t n;
+        uint32_t found = 0;
+        rc = KNamelistCount( names, &n );
+        DISP_RC( rc, "KNamelistCount() failed" );
+        if ( rc == 0 )
+        {
+            uint32_t i;
+            for ( i = 0; i < n && rc == 0; ++i )
+            {
+                const char *col_name;
+                rc = KNamelistGet( names, i, &col_name );
+                DISP_RC( rc, "KNamelistGet() failed" );
+                if ( rc == 0 )
+                {
+                    vdcd_append_col( defs, col_name );
+                    found++;
+                }
+            }
+            col_defs_found = ( found > 0 );
+        }
+        rc = KNamelistRelease( names );
+        DISP_RC( rc, "KNamelistRelease() failed" );
+    }
+    return col_defs_found;
+}
+
 typedef struct add_2_cur_context
 {
     const VCursor *my_cursor;
@@ -449,24 +570,17 @@ void vdcd_reset_content( col_defs* defs )
 
 static void CC vdcd_ins_1_trans_fkt( void *item, void *data )
 {
-    rc_t rc;
-    char buf[64];
-    p_col_def my_col_def = (p_col_def)item;
-    const VSchema *my_schema = (const VSchema*)data;
+    p_col_def my_col_def = ( p_col_def )item;
+    const VSchema *my_schema = ( const VSchema * )data;
 
     if ( my_col_def == NULL ) return;
     if ( my_schema == NULL ) return;
-    rc = VTypedeclToText( &(my_col_def->type_decl), my_schema,
-                          buf, sizeof(buf) );
-    DISP_RC( rc, "VTypedeclToText() failed" );
-    if ( rc == 0 )
-    {
-        /* resolves special sra-types and retrieves the addr of
-           a function that later can translate the values into plain-text
-           --- is defined in this file! */
-        my_col_def->value_trans_fct = vdcd_get_value_trans_fct( buf );
-        my_col_def->dim_trans_fct = vdcd_get_dim_trans_fct( buf );
-    }
+
+    /* resolves special sra-types and retrieves the addr of
+       a function that later can translate the values into plain-text
+       --- is defined in this file! */
+    my_col_def->value_trans_fct = vdcd_get_value_trans_fct( my_schema, &(my_col_def->type_decl) );
+    my_col_def->dim_trans_fct = vdcd_get_dim_trans_fct( my_schema, &(my_col_def->type_decl) );
 }
 
 void vdcd_ins_trans_fkt( col_defs* defs, const VSchema *my_schema )
diff --git a/tools/vdb-dump/vdb-dump-coldefs.h b/tools/vdb-dump/vdb-dump-coldefs.h
index c26e667..83ee20a 100644
--- a/tools/vdb-dump/vdb-dump-coldefs.h
+++ b/tools/vdb-dump/vdb-dump-coldefs.h
@@ -58,6 +58,7 @@ typedef struct col_def
 {
     char *name;
     uint32_t idx;
+    uint64_t elementsum;
     bool valid;
     bool excluded;
     VTypedecl type_decl;
@@ -86,8 +87,9 @@ char *vdcd_make_domain_txt( const uint32_t domain );
 bool vdcd_init( col_defs** defs, const size_t str_limit );
 void vdcd_destroy( col_defs* defs );
 
-bool vdcd_parse_string( col_defs* defs, const char* src );
+bool vdcd_parse_string( col_defs* defs, const char* src, const VTable *my_table );
 bool vdcd_extract_from_table( col_defs* defs, const VTable *my_table );
+bool vdcd_extract_from_phys_table( col_defs* defs, const VTable *my_table );
 bool vdcd_add_to_cursor( col_defs* defs, const VCursor *my_cursor );
 void vdcd_reset_content( col_defs* defs );
 void vdcd_ins_trans_fkt( col_defs* defs, const VSchema *my_schema );
diff --git a/tools/vdb-dump/vdb-dump-context.c b/tools/vdb-dump/vdb-dump-context.c
index 37949f1..c24899c 100644
--- a/tools/vdb-dump/vdb-dump-context.c
+++ b/tools/vdb-dump/vdb-dump-context.c
@@ -35,7 +35,6 @@
 #include <os-native.h>
 #include <sysalloc.h>
 
-#include <fmtdef.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
@@ -61,7 +60,7 @@ static rc_t vdco_set_str( char **dst, const char *src )
     {
         return RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
     }
-    len = strlen( src );
+    len = string_size( src );
     if ( len == 0 )
     {
         return RC( rcVDB, rcNoTarg, rcWriting, rcItem, rcEmpty );
@@ -71,7 +70,7 @@ static rc_t vdco_set_str( char **dst, const char *src )
     {
         return RC( rcVDB, rcNoTarg, rcWriting, rcMemory, rcExhausted );
     }
-    strcpy( *dst, src );
+    string_copy( *dst, len+1, src, len );
     return 0;
 }
 
@@ -101,6 +100,9 @@ static void vdco_init_values( p_dump_context ctx )
     ctx->id_range_requested = false;
     ctx->without_sra_types = false;
     ctx->dont_check_accession = false;
+    ctx->print_num_elem = false;
+    ctx->objver_requested = false;
+    ctx->objtype_requested = false;
 }
 
 rc_t vdco_init( dump_context **ctx )
@@ -142,11 +144,6 @@ rc_t vdco_destroy( p_dump_context ctx )
     }
     if ( rc == 0 )
     {
-        if ( ctx->path != NULL )
-        {
-            free( (void*)ctx->path );
-            ctx->path = NULL;
-        }
         VectorWhack( &(ctx->schema_list),
                      vdco_schema_list_entry_whack, NULL );
         if ( ctx->table != NULL )
@@ -170,20 +167,6 @@ rc_t vdco_destroy( p_dump_context ctx )
     return rc;
 }
 
-static rc_t vdco_set_path( p_dump_context ctx, const char *src )
-{
-    rc_t rc = 0;
-    if ( ( ctx == NULL )||( src == NULL ) )
-    {
-        rc = RC( rcVDB, rcNoTarg, rcWriting, rcParam, rcNull );
-    }
-    if ( rc == 0 )
-    {
-        rc = vdco_set_str( (char**)&(ctx->path), src );
-        DISP_RC( rc, "dump_context_set_str() failed" );
-    }
-    return rc;
-}
 
 static rc_t vdco_add_schema( p_dump_context ctx, const char *src )
 {
@@ -285,12 +268,6 @@ static rc_t vdco_set_row_range( p_dump_context ctx, const char *src )
     return rc;
 }
 
-static bool vdco_check_if_usage_necessary( p_dump_context ctx )
-{
-    if ( ctx == NULL ) return false;
-    if ( ctx->path == NULL ) ctx->usage_requested = true;
-    return ctx->usage_requested;
-}
 
 static bool vdco_set_format( p_dump_context ctx, const char *src )
 {
@@ -323,34 +300,6 @@ static bool vdco_set_boolean_char( dump_context *ctx, const char * src )
     return true;
 }
 
-static rc_t vdco_evaluate_arguments( const Args *my_args,
-                                     dump_context *context )
-{
-    uint32_t count;
-    rc_t rc = ArgsParamCount( my_args, &count );
-    DISP_RC( rc, "ArgsParamCount() failed" );
-    if ( rc == 0 )
-    {
-        uint32_t idx;
-        for ( idx=0; idx<count; ++idx )
-        {
-            const char *value = NULL;
-            rc = ArgsParamValue( my_args, idx, &value );
-            DISP_RC( rc, "ArgsParamValue() failed" );
-            if ( rc == 0 )
-            {
-                switch( idx )
-                {
-                    case 0 : rc = vdco_set_path( context, value );
-                        DISP_RC( rc, "dump_context_set_path() failed" );
-                        break;
-                }
-            }
-        }
-    }
-    return rc;
-}
-
 
 static bool vdco_get_bool_option( const Args *my_args,
                                   const char *name,
@@ -457,12 +406,18 @@ static void vdco_evaluate_options( const Args *my_args,
     ctx->column_enum_requested = vdco_get_bool_option( my_args, OPTION_COLUMN_ENUM, false );
     ctx->column_enum_short = vdco_get_bool_option( my_args, OPTION_COLUMN_SHORT, false );
     ctx->print_dna_bases = vdco_get_bool_option( my_args, OPTION_DNA_BASES, false );
+    ctx->objver_requested = vdco_get_bool_option( my_args, OPTION_OBJVER, false );
+    ctx->objtype_requested = vdco_get_bool_option( my_args, OPTION_OBJTYPE, false );
     ctx->max_line_len = vdco_get_uint16_option( my_args, OPTION_MAX_LINE_LEN, 0 );
     ctx->indented_line_len = vdco_get_uint16_option( my_args, OPTION_LINE_INDENT, 0 );
     ctx->id_range_requested = vdco_get_bool_option( my_args, OPTION_ID_RANGE, false );
     vdco_set_format( ctx, vdco_get_str_option( my_args, OPTION_FORMAT ) );
     ctx->without_sra_types = vdco_get_bool_option( my_args, OPTION_WITHOUT_SRA, false );
     ctx->dont_check_accession = vdco_get_bool_option( my_args, OPTION_WITHOUT_ACCESSION, false );
+    ctx->print_num_elem = vdco_get_bool_option( my_args, OPTION_NUMELEM, false );
+    ctx->sum_num_elem = vdco_get_bool_option( my_args, OPTION_NUMELEMSUM, false );
+    ctx->show_blobbing = vdco_get_bool_option( my_args, OPTION_SHOW_BLOBBING, false );
+    ctx->enum_phys = vdco_get_bool_option( my_args, OPTION_ENUM_PHYS, false );
 
     vdco_set_table( ctx, vdco_get_str_option( my_args, OPTION_TABLE ) );
     vdco_set_columns( ctx, vdco_get_str_option( my_args, OPTION_COLUMNS ) );
@@ -477,15 +432,9 @@ rc_t vdco_capture_arguments_and_options( const Args * args, dump_context *ctx)
 {
     rc_t rc;
 
-    rc = vdco_evaluate_arguments( args, ctx );
-    DISP_RC( rc, "evaluate_arguments() failed" );
-    if ( rc == 0 )
-    {
-        vdco_evaluate_options( args, ctx );
-        vdco_check_if_usage_necessary( ctx );
+    vdco_evaluate_options( args, ctx );
 
-        rc = ArgsHandleLogLevel( args );
-        DISP_RC( rc, "ArgsHandleLogLevel() failed" );
-    }
+    rc = ArgsHandleLogLevel( args );
+    DISP_RC( rc, "ArgsHandleLogLevel() failed" );
     return rc;
 }
diff --git a/tools/vdb-dump/vdb-dump-context.h b/tools/vdb-dump/vdb-dump-context.h
index d71cdc8..185e9f1 100644
--- a/tools/vdb-dump/vdb-dump-context.h
+++ b/tools/vdb-dump/vdb-dump-context.h
@@ -60,6 +60,12 @@ extern "C" {
 #define OPTION_WITHOUT_ACCESSION "without_accession"
 #define OPTION_EXCLUDED_COLUMNS  "exclude"
 #define OPTION_BOOLEAN           "boolean"
+#define OPTION_OBJVER            "obj_version"
+#define OPTION_OBJTYPE           "obj_type"
+#define OPTION_NUMELEM           "numelem"
+#define OPTION_NUMELEMSUM        "numelemsum"
+#define OPTION_SHOW_BLOBBING     "blobbing"
+#define OPTION_ENUM_PHYS         "phys"
 
 #define ALIAS_ROW_ID_ON         "I"
 #define ALIAS_LINE_FEED         "l"
@@ -83,7 +89,10 @@ extern "C" {
 #define ALIAS_WITHOUT_ACCESSION "a"
 #define ALIAS_EXCLUDED_COLUMNS  "x"
 #define ALIAS_BOOLEAN           "b"
-
+#define ALIAS_OBJVER            "j"
+#define ALIAS_OBJTYPE           "y"
+#define ALIAS_NUMELEM           "u"
+#define ALIAS_NUMELEMSUM        "U"
 
 typedef enum dump_format_t
 {
@@ -128,6 +137,12 @@ typedef struct dump_context
     bool id_range_requested;
     bool without_sra_types;
     bool dont_check_accession;
+    bool objver_requested;
+    bool objtype_requested;
+    bool print_num_elem;
+    bool sum_num_elem;
+    bool show_blobbing;
+    bool enum_phys;
 } dump_context;
 typedef dump_context* p_dump_context;
 
diff --git a/tools/vdb-dump/vdb-dump-filter.c b/tools/vdb-dump/vdb-dump-filter.c
index 488e45f..962f0e7 100644
--- a/tools/vdb-dump/vdb-dump-filter.c
+++ b/tools/vdb-dump/vdb-dump-filter.c
@@ -25,8 +25,8 @@
 */
 
 #include "vdb-dump-filter.h"
+#include <klib/text.h>
 
-#include <fmtdef.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
@@ -41,7 +41,7 @@ bool vdfi_make_filter( filter **flt, const char *expression )
     (*flt) = malloc( sizeof( flt ) );
     if ( *flt )
     {
-        (*flt)->expression = strdup( expression );
+        (*flt)->expression = string_dup_measure( expression, NULL );
         (*flt)->filter_type = filter_unknown;
         res = true;
     }
diff --git a/tools/vdb-dump/vdb-dump-formats.c b/tools/vdb-dump/vdb-dump-formats.c
index ce9b691..4b66d7a 100644
--- a/tools/vdb-dump/vdb-dump-formats.c
+++ b/tools/vdb-dump/vdb-dump-formats.c
@@ -81,21 +81,23 @@ static void CC vdfo_print_col_default( void *item, void *data )
     }
 
     /* FINALLY we print the content of a column... */
-    OUTMSG ( ( "%s\n", r_ctx->s_col.buf ) );
+    KOutMsg( "%s\n", r_ctx->s_col.buf );
 }
 
 static rc_t vdfo_print_row_default( const p_row_context r_ctx )
 {
+    rc_t rc = 0;
     if ( r_ctx->ctx->print_row_id )
-        OUTMSG ( ( "ROW-ID = %u\n", r_ctx->row_id ) );
+        rc = KOutMsg( "ROW-ID = %u\n", r_ctx->row_id );
 
-    VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_default, r_ctx );
+    if ( rc == 0 )
+        VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_default, r_ctx );
 
-    if ( r_ctx->ctx->lf_after_row > 0 )
+    if ( rc == 0 && r_ctx->ctx->lf_after_row > 0 )
     {
         uint16_t i=0;
-        while ( i++ < r_ctx->ctx->lf_after_row )
-            OUTMSG ( ( "\n" ) );
+        while ( i++ < r_ctx->ctx->lf_after_row && rc == 0 )
+            rc = KOutMsg( "\n" );
     }
     return 0;
 }
@@ -138,7 +140,7 @@ static rc_t vdfo_print_row_csv( const p_row_context r_ctx )
     {
         r_ctx->col_nr = 0;
         VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_csv, r_ctx );
-        OUTMSG (( "%s\n", r_ctx->s_col.buf ));
+        rc = KOutMsg( "%s\n", r_ctx->s_col.buf );
     }
     return rc;
 }
@@ -152,9 +154,9 @@ static void CC vdfo_print_col_xml( void *item, void *data )
     if ( my_col_def->valid == false ) return;
     if ( my_col_def->excluded == true ) return;
 
-    OUTMSG (( " <%s>\n", my_col_def->name ));
-    OUTMSG (( "%s", my_col_def->content.buf ));
-    OUTMSG (( " </%s>\n", my_col_def->name ));
+    KOutMsg( " <%s>\n", my_col_def->name );
+    KOutMsg( "%s", my_col_def->content.buf );
+    KOutMsg( " </%s>\n", my_col_def->name );
 }
 
 static rc_t vdfo_print_row_xml( const p_row_context r_ctx )
@@ -163,9 +165,12 @@ static rc_t vdfo_print_row_xml( const p_row_context r_ctx )
     DISP_RC( rc, "dump_str_clear() failed" )
     if ( rc == 0 )
     {
-        OUTMSG ( ( "<row_%lu>\n", r_ctx->row_id ) );
-        VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_xml, r_ctx );
-        OUTMSG ( ( "</row_%lu>\n\n", r_ctx->row_id ) );
+        rc = KOutMsg( "<row>\n" );
+        if ( rc  == 0 )
+        {
+            VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_xml, r_ctx );
+            rc = KOutMsg( "</row>\n");
+        }
     }
     return rc;
 }
@@ -203,7 +208,7 @@ static void CC vdfo_print_col_json( void *item, void *data )
     }
 
     if ( rc == 0 )
-        OUTMSG ( ( ",\n\"%s\":%s", my_col_def->name, my_col_def->content.buf ) );
+        KOutMsg( ",\n\"%s\":%s", my_col_def->name, my_col_def->content.buf );
 }
 
 static rc_t vdfo_print_row_json( const p_row_context r_ctx )
@@ -212,10 +217,16 @@ static rc_t vdfo_print_row_json( const p_row_context r_ctx )
     DISP_RC( rc, "dump_str_clear() failed" )
     if ( rc == 0 )
     {
-        OUTMSG ( ( "{\n" ) );
-        OUTMSG ( ( "\"row_id\": %lu", r_ctx->row_id ) );
-        VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_json, r_ctx );
-        OUTMSG ( ( "\n},\n\n" ) );
+        rc = KOutMsg( "{\n" );
+        if ( rc == 0 )
+        {
+            rc = KOutMsg( "\"row_id\": %lu", r_ctx->row_id );
+            if ( rc == 0 )
+            {
+                VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_json, r_ctx );
+                rc = KOutMsg( "\n},\n\n" );
+            }
+        }
     }
     return rc;
 }
@@ -234,7 +245,7 @@ static void CC vdfo_print_col_piped( void *item, void *data )
     if ( my_col_def->excluded == true ) return;
 
     /* first we print the row_id and the column-name for every column! */
-    OUTMSG ( ( "%lu, %s: ", r_ctx->row_id, my_col_def->name ) );
+    KOutMsg( "%lu, %s: ", r_ctx->row_id, my_col_def->name );
 
     if ( ( my_col_def->type_desc.domain == vtdAscii )||
          ( my_col_def->type_desc.domain == vtdUnicode ) )
@@ -257,7 +268,7 @@ static void CC vdfo_print_col_piped( void *item, void *data )
     }
 
     if ( rc == 0 )
-        OUTMSG ( ( "%s\n", my_col_def->content.buf ) );
+        KOutMsg( "%s\n", my_col_def->content.buf );
 }
 
 
@@ -294,7 +305,7 @@ static rc_t vdfo_print_row_piped( const p_row_context r_ctx )
     if ( rc == 0 )
     {
         VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_piped, r_ctx );
-        OUTMSG ( ( "\n" ) );
+        rc = KOutMsg( "\n" );
     }
     return rc;
 }
@@ -307,7 +318,7 @@ static rc_t vdfo_print_row_tab( const p_row_context r_ctx )
     {
         r_ctx->col_nr = 0;
         VectorForEach( &(r_ctx->col_defs->cols), false, vdfo_print_col_tab, r_ctx );
-        OUTMSG (( "%s\n", r_ctx->s_col.buf ));
+        rc = KOutMsg( "%s\n", r_ctx->s_col.buf );
     }
     return rc;
 }
diff --git a/tools/vdb-dump/vdb-dump-helper.c b/tools/vdb-dump/vdb-dump-helper.c
index a90e47b..2ff775e 100644
--- a/tools/vdb-dump/vdb-dump-helper.c
+++ b/tools/vdb-dump/vdb-dump-helper.c
@@ -36,7 +36,6 @@
 #include <sysalloc.h>
 #include "vdb-dump-helper.h"
 
-#include <fmtdef.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
@@ -133,6 +132,9 @@ bool vdh_is_path_table( const VDBManager *my_manager, const char *path,
     return res;
 }
 
+
+const char * backback = "/../..";
+
 /********************************************************************
 helper function to test if a given path is a vdb-column
 by testing if the parent/parent dir is a vdb-table
@@ -141,7 +143,7 @@ bool vdh_is_path_column( const VDBManager *my_manager, const char *path,
                          Vector *schema_list )
 {
     bool res = false;
-    size_t path_len = strlen( path );
+    size_t path_len = string_size( path );
     char *pp_path = malloc( path_len + 20 );
     if ( pp_path )
     {
@@ -153,8 +155,8 @@ bool vdh_is_path_column( const VDBManager *my_manager, const char *path,
             DISP_RC( rc, "KDirectoryNativeDir() failed" );
             if ( rc == 0 )
             {
-                strcpy( pp_path, path );
-                strcat( pp_path, "/../.." );
+                string_copy( pp_path, path_len + 20, path, path_len );
+                string_copy( &pp_path[ path_len ], 20, backback, string_size( backback ) );
                 rc = KDirectoryResolvePath( my_directory, true, resolved, 1023, pp_path );
                 if ( rc == 0 )
                     res = vdh_is_path_table( my_manager, resolved, schema_list );
@@ -276,97 +278,99 @@ bool vdh_take_this_table_from_db( dump_context *ctx, const VDatabase *my_databas
 }
 
 
-static void vdh_print_full_col_info( dump_context *ctx,
+const char * s_unknown_tab = "unknown table";
+
+static rc_t vdh_print_full_col_info( dump_context *ctx,
                                      const p_col_def col_def,
                                      const VSchema *my_schema )
 {
-    char *s_domain;
-
-    s_domain = vdcd_make_domain_txt( col_def->type_desc.domain );
+    rc_t rc = 0;
+    char * s_domain = vdcd_make_domain_txt( col_def->type_desc.domain );
     if ( s_domain != NULL )
     {
         if ( ctx->table == NULL )
         {
-            ctx->table = strdup( "unknown table" ); /* will be free'd when ctx get free'd */
+            ctx->table = string_dup_measure( s_unknown_tab, NULL ); /* will be free'd when ctx get free'd */
         }
 
         if ( ( ctx->table != NULL )&&( col_def->name != NULL ) )
         {
-            OUTMSG ( ( "%s.%.02d : (%.3d bits [%.02d], %8s)  %s",
+            rc = KOutMsg( "%s.%.02d : (%.3d bits [%.02d], %8s)  %s",
                     ctx->table,
                     ctx->generic_idx++,
                     col_def->type_desc.intrinsic_bits,
                     col_def->type_desc.intrinsic_dim,
                     s_domain,
-                    col_def->name ) );
-            if ( my_schema )
+                    col_def->name );
+            if ( rc == 0 && my_schema )
             {
                 char buf[64];
-                rc_t rc = VTypedeclToText( &(col_def->type_decl), my_schema,
-                                           buf, sizeof(buf) );
+                rc = VTypedeclToText( &(col_def->type_decl), my_schema,
+                                      buf, sizeof(buf) );
                 DISP_RC( rc, "VTypedeclToText() failed" );
                 if ( rc == 0 )
-                {
-                    OUTMSG ( ( "\n      (%s)", buf ) );
-                }
+                    rc = KOutMsg( "\n      (%s)", buf );
             }
-            OUTMSG ( ( "\n" ) );
+            if ( rc == 0 )
+                rc = KOutMsg( "\n" );
         }
         else
         {
             if ( ctx->table == NULL )
             {
-                puts( "error: no table-name in print_column_info()" );
+                rc = KOutMsg( "error: no table-name in print_column_info()" );
             }
             if ( col_def->name == NULL )
             {
-                puts( "error: no column-name in print_column_info()" );
+                rc = KOutMsg( "error: no column-name in print_column_info()" );
             }
         }
         free( s_domain );
     }
     else
     {
-        puts( "error: making domain-text in print_column_info()" );
+        rc = KOutMsg( "error: making domain-text in print_column_info()" );
     }
+    return rc;
 }
 
 
-static void vdh_print_short_col_info( const p_col_def col_def,
+static rc_t vdh_print_short_col_info( const p_col_def col_def,
                                       const VSchema *my_schema )
 {
+    rc_t rc = 0;
     if ( col_def->name != NULL )
     {
-        OUTMSG ( ( "%s", col_def->name ) );
+        rc = KOutMsg( "%s", col_def->name );
         if ( my_schema )
         {
             char buf[64];
-            rc_t rc = VTypedeclToText( &(col_def->type_decl), my_schema,
-                                       buf, sizeof(buf) );
+            rc = VTypedeclToText( &(col_def->type_decl), my_schema,
+                                  buf, sizeof(buf) );
             DISP_RC( rc, "VTypedeclToText() failed" );
             if ( rc == 0 )
             {
-                OUTMSG ( ( " (%s)", buf ) );
+                rc = KOutMsg( " (%s)", buf );
             }
         }
-        OUTMSG ( ( "\n" ) );
+        if ( rc == 0 )
+            rc = KOutMsg( "\n" );
     }
+    return rc;
 }
 
 
-void vdh_print_col_info( dump_context *ctx,
+rc_t vdh_print_col_info( dump_context *ctx,
                          const p_col_def col_def,
                          const VSchema *my_schema )
 {
-    if ( ctx == NULL ) return;
-    if ( col_def == NULL ) return;
-
-    if ( ctx->column_enum_requested )
+    rc_t rc = 0;
+    if ( ctx != NULL && col_def != NULL )
     {
-        vdh_print_full_col_info( ctx, col_def, my_schema );
-    }
-    else
-    {
-        vdh_print_short_col_info( col_def, my_schema );
+        if ( ctx->column_enum_requested )
+            rc = vdh_print_full_col_info( ctx, col_def, my_schema );
+        else
+            rc = vdh_print_short_col_info( col_def, my_schema );
     }
+    return rc;
 }
diff --git a/tools/vdb-dump/vdb-dump-helper.h b/tools/vdb-dump/vdb-dump-helper.h
index 593d7bc..07be4d9 100644
--- a/tools/vdb-dump/vdb-dump-helper.h
+++ b/tools/vdb-dump/vdb-dump-helper.h
@@ -73,7 +73,7 @@ bool vdh_take_1st_table_from_db( dump_context *ctx,
 bool vdh_take_this_table_from_db( dump_context *ctx, const VDatabase *my_database,
                                   const char * table_to_find );
 
-void vdh_print_col_info( dump_context *ctx,
+rc_t vdh_print_col_info( dump_context *ctx,
                          const p_col_def col_def,
                          const VSchema *my_schema );
 
diff --git a/tools/vdb-dump/vdb-dump-num-gen.c b/tools/vdb-dump/vdb-dump-num-gen.c
index 9843bda..83fc592 100644
--- a/tools/vdb-dump/vdb-dump-num-gen.c
+++ b/tools/vdb-dump/vdb-dump-num-gen.c
@@ -30,7 +30,7 @@
 #include <klib/log.h>
 #include <klib/rc.h>
 #include <klib/out.h>
-#include <fmtdef.h>
+#include <klib/text.h>
 #include <strtol.h>
 #include <sysalloc.h>
 
@@ -144,7 +144,7 @@ uint32_t vdn_parse( num_gen* generator, const char* src )
     
     if ( generator == NULL ) return res;
     if ( src == NULL ) return res;
-    n = strlen( src );
+    n = string_size( src );
     generator->node_count = 0;
     generator->curr_node = 0;
     generator->curr_node_sub_pos = 0;
diff --git a/tools/vdb-dump/vdb-dump-num-gen.h b/tools/vdb-dump/vdb-dump-num-gen.h
index 0a76656..ac67a58 100644
--- a/tools/vdb-dump/vdb-dump-num-gen.h
+++ b/tools/vdb-dump/vdb-dump-num-gen.h
@@ -48,12 +48,13 @@ typedef struct num_gen_node
 } num_gen_node;
 typedef num_gen_node* p_num_gen_node;
 
+
 typedef struct num_gen
 {
     Vector nodes;
     uint32_t node_count;
     uint64_t curr_node;
-    uint32_t curr_node_sub_pos;
+    uint64_t curr_node_sub_pos;
 } num_gen;
 
 rc_t vdn_make( num_gen** generator );
diff --git a/tools/vdb-dump/vdb-dump-row-context.h b/tools/vdb-dump/vdb-dump-row-context.h
index 497ebd5..1c56e30 100644
--- a/tools/vdb-dump/vdb-dump-row-context.h
+++ b/tools/vdb-dump/vdb-dump-row-context.h
@@ -52,6 +52,7 @@ extern "C" {
 *************************************************************************************/
 typedef struct row_context
 {
+    const VTable* table;
     const VCursor* cursor;
     p_col_defs col_defs;
     p_dump_context ctx;
diff --git a/tools/vdb-dump/vdb-dump-str.c b/tools/vdb-dump/vdb-dump-str.c
index b109bc0..5031ebe 100644
--- a/tools/vdb-dump/vdb-dump-str.c
+++ b/tools/vdb-dump/vdb-dump-str.c
@@ -29,7 +29,6 @@
 #include <klib/printf.h>
 #include <sysalloc.h>
 
-#include <fmtdef.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
@@ -90,6 +89,7 @@ char *vds_ptr( p_dump_str s )
     return s->buf;
 }
 
+
 static rc_t vds_inc_buffer( p_dump_str s, const size_t by_len )
 {
     if ( s == NULL )
@@ -109,6 +109,7 @@ static rc_t vds_inc_buffer( p_dump_str s, const size_t by_len )
     return 0;
 }
 
+
 static rc_t vds_truncate( p_dump_str s )
 {
     if ( s == NULL )
@@ -119,7 +120,7 @@ static rc_t vds_truncate( p_dump_str s )
     {
         return RC( rcVDB, rcNoTarg, rcResizing, rcParam, rcNull );
     }
-    s->str_len = strlen( s->buf );
+    s->str_len = string_size( s->buf );
     if ( ( s->str_limit > 0 )&&( s->str_len > s->str_limit ) )
     {
         s->buf[ s->str_limit ] = 0;
@@ -129,6 +130,7 @@ static rc_t vds_truncate( p_dump_str s )
     return 0;
 }
 
+
 rc_t vds_append_fmt( p_dump_str s, const size_t aprox_len, const char *fmt, ... )
 {
     va_list argp;
@@ -161,6 +163,7 @@ rc_t vds_append_fmt( p_dump_str s, const size_t aprox_len, const char *fmt, ...
     return rc;
 }
 
+
 rc_t vds_append_str( p_dump_str s, const char *s1 )
 {
     rc_t rc = 0;
@@ -171,7 +174,7 @@ rc_t vds_append_str( p_dump_str s, const char *s1 )
     }
     else
     {
-        size_t append_len = strlen( s1 );
+        size_t append_len = string_size( s1 );
         if ( append_len > 0 )
         {
             if ( ( s->str_limit > 0 )&&( s->str_len >= s->str_limit ) )
@@ -183,7 +186,8 @@ rc_t vds_append_str( p_dump_str s, const char *s1 )
                 rc = vds_inc_buffer( s, append_len );
                 if ( rc == 0 )
                 {
-                    strcat( s->buf, s1 ); /* strncat would not do it... */
+                    size_t l = string_size( s->buf );
+                    string_copy( s->buf + l, s->buf_size - l, s1, append_len );
                     rc = vds_truncate( s ); /* adjusts str_len */
                 }
             }
@@ -192,6 +196,7 @@ rc_t vds_append_str( p_dump_str s, const char *s1 )
     return rc;
 }
 
+
 rc_t vds_append_str_no_limit_check( p_dump_str s, const char *s1 )
 {
     rc_t rc;
@@ -200,7 +205,7 @@ rc_t vds_append_str_no_limit_check( p_dump_str s, const char *s1 )
     {
         return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcNull );
     }
-    append_len = strlen( s1 );
+    append_len = string_size( s1 );
     if ( append_len == 0 )
     {
         return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcEmpty );
@@ -208,12 +213,14 @@ rc_t vds_append_str_no_limit_check( p_dump_str s, const char *s1 )
     rc = vds_inc_buffer( s, append_len );
     if ( rc == 0 )
     {
-        strcat( s->buf, s1 );
+        size_t l = string_size( s->buf );
+        string_copy( s->buf + l, s->buf_size - l, s1, append_len );
         s->str_len += append_len;
     }
     return rc;
 }
 
+
 rc_t vds_rinsert( p_dump_str s, const char *s1 )
 {
     size_t len;
@@ -221,18 +228,19 @@ rc_t vds_rinsert( p_dump_str s, const char *s1 )
     {
         return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcNull );
     }
-    len = strlen( s1 );
+    len = string_size( s1 );
     if ( len == 0 )
     {
         return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcEmpty );
     }
     if ( s->str_len <= len ) return 0;
     len = s->str_len - len;
-    strcpy( s->buf + len, s1 );
+    string_copy( s->buf + len, sizeof( s->buf ) - len, s1, string_size( s1 ) );
     /* s->str_len does not change */
     return 0;
 }
 
+
 rc_t vds_indent( p_dump_str s, const size_t limit, const size_t indent )
 {
     size_t remaining_chars, lines, indent_block, line_idx;
@@ -289,14 +297,14 @@ void vds_escape_quotes_loop( p_dump_str s, const char to_escape,
     {
         if ( *temp == to_escape )
         {
-        size_t to_move = strlen( temp ) + 1;
+        size_t to_move = string_size( temp ) + 1;
         memmove( temp+1, temp, to_move );
         (*temp) = escape_char;
         temp++;
         }
         temp++;
     }
-    s->str_len = strlen( s->buf );
+    s->str_len = string_size( s->buf );
 }
 
 rc_t vds_escape( p_dump_str s, const char to_escape, const char escape_char )
@@ -326,7 +334,7 @@ rc_t vds_enclose_string( p_dump_str s, const char c_left, const char c_right )
     {
         return RC( rcVDB, rcNoTarg, rcInserting, rcParam, rcNull );
     }
-    to_move = strlen( s->buf ) + 1;
+    to_move = string_size( s->buf ) + 1;
     rc = vds_inc_buffer( s, 2 );
     if ( rc == 0 )
     {
@@ -334,7 +342,7 @@ rc_t vds_enclose_string( p_dump_str s, const char c_left, const char c_right )
         s->buf[0]=c_left;
         s->buf[to_move]=c_right;
         s->buf[to_move+1]=0;
-        s->str_len = strlen( s->buf );
+        s->str_len = string_size( s->buf );
     }
     return rc;
 }
diff --git a/tools/vdb-dump/vdb-dump-tools.c b/tools/vdb-dump/vdb-dump-tools.c
index 0c5cf01..2a280b9 100644
--- a/tools/vdb-dump/vdb-dump-tools.c
+++ b/tools/vdb-dump/vdb-dump-tools.c
@@ -33,7 +33,6 @@
 #include <klib/pack.h>
 #include <sysalloc.h>
 
-#include <fmtdef.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
diff --git a/tools/vdb-dump/vdb-dump.c b/tools/vdb-dump/vdb-dump.c
index 61742ce..bb41d5e 100644
--- a/tools/vdb-dump/vdb-dump.c
+++ b/tools/vdb-dump/vdb-dump.c
@@ -31,9 +31,18 @@
 #include <vdb/table.h>
 #include <vdb/cursor.h>
 #include <vdb/database.h>
+#include <vdb/dependencies.h>
+#include <vdb/vdb-priv.h>
+
+#include <kdb/table.h>
+#include <kdb/column.h>
+#include <kdb/manager.h>
+
 #include <kfs/directory.h>
+
 #include <kapp/main.h>
 #include <kapp/args.h>
+
 #include <klib/container.h>
 #include <klib/vector.h>
 #include <klib/log.h>
@@ -41,18 +50,14 @@
 #include <klib/debug.h>
 #include <klib/status.h>
 #include <klib/text.h>
+#include <klib/printf.h>
 #include <klib/rc.h>
 #include <klib/namelist.h>
+
 #include <os-native.h>
 #include <sysalloc.h>
 
-#include <sra/srapath.h>
-
-#include <fmtdef.h>
 #include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
 #include <bitstr.h>
 
 #include "vdb-dump-num-gen.h"
@@ -63,6 +68,9 @@
 #include "vdb-dump-row-context.h"
 #include "vdb-dump-formats.h"
 
+
+#define CURSOR_CACHE_SIZE 256*1024*1024
+
 static const char * row_id_on_usage[] = { "print row id", NULL };
 static const char * line_feed_usage[] = { "line-feed's inbetween rows", NULL };
 static const char * colname_off_usage[] = { "do not print column-names", NULL };
@@ -85,6 +93,12 @@ static const char * without_sra_usage[] = { "without sra-type-translation", NULL
 static const char * without_accession_usage[] = { "without accession-test", NULL };
 static const char * excluded_columns_usage[] = { "exclude these columns", NULL };
 static const char * boolean_usage[] = { "defines how boolean's are printed (1,T)", NULL };
+static const char * objver_usage[] = { "request vdb-version", NULL };
+static const char * numelem_usage[] = { "print only element-count", NULL };
+static const char * numelemsum_usage[] = { "sum element-count", NULL };
+static const char * show_blobbing_usage[] = { "show blobbing", NULL };
+static const char * enum_phys_usage[] = { "enumerate physical columns", NULL };
+static const char * objtype_usage[] = { "report type of object", NULL };
 
 OptDef DumpOptions[] =
 {
@@ -110,7 +124,13 @@ OptDef DumpOptions[] =
     { OPTION_WITHOUT_SRA, ALIAS_WITHOUT_SRA, NULL, without_sra_usage, 1, false, false },
     { OPTION_WITHOUT_ACCESSION, ALIAS_WITHOUT_ACCESSION, NULL, without_accession_usage, 1, false, false },
     { OPTION_EXCLUDED_COLUMNS, ALIAS_EXCLUDED_COLUMNS, NULL, excluded_columns_usage, 1, true, false },
-    { OPTION_BOOLEAN, ALIAS_BOOLEAN, NULL, boolean_usage, 1, true, false }
+    { OPTION_BOOLEAN, ALIAS_BOOLEAN, NULL, boolean_usage, 1, true, false },
+    { OPTION_NUMELEM, ALIAS_NUMELEM, NULL, numelem_usage, 1, false, false },
+    { OPTION_NUMELEMSUM, ALIAS_NUMELEMSUM, NULL, numelemsum_usage, 1, false, false },
+    { OPTION_SHOW_BLOBBING, NULL, NULL, show_blobbing_usage, 1, false, false },
+    { OPTION_ENUM_PHYS, NULL, NULL, enum_phys_usage, 1, false, false },
+    { OPTION_OBJVER, ALIAS_OBJVER, NULL, objver_usage, 1, false, false },
+    { OPTION_OBJTYPE, ALIAS_OBJTYPE, NULL, objtype_usage, 1, false, false }
 };
 
 const char UsageDefaultName[] = "vdb-dump";
@@ -120,53 +140,60 @@ rc_t CC UsageSummary ( const char * progname )
 {
     return KOutMsg ("\n"
                     "Usage:\n"
-                    "  %s <path> [options]\n"
+                    "  %s <path> [<path> ...] [options]\n"
                     "\n", progname);
 }
 
 
-rc_t CC Usage (const Args * args)
+rc_t CC Usage ( const Args * args )
 {
     const char * progname = UsageDefaultName;
     const char * fullpath = UsageDefaultName;
     rc_t rc;
 
-    if (args == NULL)
-        rc = RC (rcApp, rcArgv, rcAccessing, rcSelf, rcNull);
+    if ( args == NULL )
+        rc = RC ( rcApp, rcArgv, rcAccessing, rcSelf, rcNull );
     else
-        rc = ArgsProgram (args, &fullpath, &progname);
-    if (rc)
+        rc = ArgsProgram ( args, &fullpath, &progname );
+
+    if ( rc )
         progname = fullpath = UsageDefaultName;
 
-    UsageSummary (progname);
-
-    KOutMsg ("Options:\n");
-
-    HelpOptionLine (ALIAS_ROW_ID_ON, OPTION_ROW_ID_ON, NULL, row_id_on_usage);
-    HelpOptionLine (ALIAS_LINE_FEED, OPTION_LINE_FEED, "line_feed", line_feed_usage);
-    HelpOptionLine (ALIAS_COLNAME_OFF, OPTION_COLNAME_OFF, NULL, colname_off_usage);
-    HelpOptionLine (ALIAS_IN_HEX, OPTION_IN_HEX, NULL, in_hex_usage);
-    HelpOptionLine (ALIAS_TABLE, OPTION_TABLE, "table", table_usage);
-    HelpOptionLine (ALIAS_ROWS, OPTION_ROWS, "rows", rows_usage);
-    HelpOptionLine (ALIAS_COLUMNS, OPTION_COLUMNS, "columns", columns_usage);
-    HelpOptionLine (ALIAS_SCHEMA, OPTION_SCHEMA, "schema", schema_usage);
-    HelpOptionLine (ALIAS_SCHEMA_DUMP, OPTION_SCHEMA_DUMP, NULL, schema_dump_usage);
-    HelpOptionLine (ALIAS_TABLE_ENUM, OPTION_TABLE_ENUM, NULL, table_enum_usage);
-    HelpOptionLine (ALIAS_COLUMN_ENUM, OPTION_COLUMN_ENUM, NULL, column_enum_usage);
-    HelpOptionLine (ALIAS_COLUMN_SHORT, OPTION_COLUMN_SHORT, NULL, column_short_usage);
-    HelpOptionLine (ALIAS_DNA_BASES, OPTION_DNA_BASES, "dna_bases", dna_bases_usage);
-    HelpOptionLine (ALIAS_MAX_LINE_LEN, OPTION_MAX_LINE_LEN, "max_length", max_line_len_usage);
-    HelpOptionLine (ALIAS_LINE_INDENT, OPTION_LINE_INDENT, "indent_width", line_indent_usage);
-    HelpOptionLine (ALIAS_FORMAT, OPTION_FORMAT, "format", format_usage);
-    HelpOptionLine (ALIAS_ID_RANGE, OPTION_ID_RANGE, NULL, id_range_usage);
-    HelpOptionLine (ALIAS_WITHOUT_SRA, OPTION_WITHOUT_SRA, NULL, without_sra_usage);
-    HelpOptionLine (ALIAS_WITHOUT_ACCESSION, OPTION_WITHOUT_ACCESSION, NULL, without_accession_usage);
-    HelpOptionLine (ALIAS_EXCLUDED_COLUMNS, OPTION_EXCLUDED_COLUMNS, NULL, excluded_columns_usage);
-    HelpOptionLine (ALIAS_BOOLEAN, OPTION_BOOLEAN, NULL, boolean_usage);
+    UsageSummary ( progname );
+
+    KOutMsg ( "Options:\n" );
+
+    HelpOptionLine ( ALIAS_ROW_ID_ON, OPTION_ROW_ID_ON, NULL, row_id_on_usage );
+    HelpOptionLine ( ALIAS_LINE_FEED, OPTION_LINE_FEED, "line_feed", line_feed_usage );
+    HelpOptionLine ( ALIAS_COLNAME_OFF, OPTION_COLNAME_OFF, NULL, colname_off_usage );
+    HelpOptionLine ( ALIAS_IN_HEX, OPTION_IN_HEX, NULL, in_hex_usage );
+    HelpOptionLine ( ALIAS_TABLE, OPTION_TABLE, "table", table_usage );
+    HelpOptionLine ( ALIAS_ROWS, OPTION_ROWS, "rows", rows_usage );
+    HelpOptionLine ( ALIAS_COLUMNS, OPTION_COLUMNS, "columns", columns_usage );
+    HelpOptionLine ( ALIAS_SCHEMA, OPTION_SCHEMA, "schema", schema_usage );
+    HelpOptionLine ( ALIAS_SCHEMA_DUMP, OPTION_SCHEMA_DUMP, NULL, schema_dump_usage );
+    HelpOptionLine ( ALIAS_TABLE_ENUM, OPTION_TABLE_ENUM, NULL, table_enum_usage );
+    HelpOptionLine ( ALIAS_COLUMN_ENUM, OPTION_COLUMN_ENUM, NULL, column_enum_usage );
+    HelpOptionLine ( ALIAS_COLUMN_SHORT, OPTION_COLUMN_SHORT, NULL, column_short_usage );
+    HelpOptionLine ( ALIAS_DNA_BASES, OPTION_DNA_BASES, "dna_bases", dna_bases_usage );
+    HelpOptionLine ( ALIAS_MAX_LINE_LEN, OPTION_MAX_LINE_LEN, "max_length", max_line_len_usage );
+    HelpOptionLine ( ALIAS_LINE_INDENT, OPTION_LINE_INDENT, "indent_width", line_indent_usage );
+    HelpOptionLine ( ALIAS_FORMAT, OPTION_FORMAT, "format", format_usage );
+    HelpOptionLine ( ALIAS_ID_RANGE, OPTION_ID_RANGE, NULL, id_range_usage );
+    HelpOptionLine ( ALIAS_WITHOUT_SRA, OPTION_WITHOUT_SRA, NULL, without_sra_usage );
+    HelpOptionLine ( ALIAS_WITHOUT_ACCESSION, OPTION_WITHOUT_ACCESSION, NULL, without_accession_usage );
+    HelpOptionLine ( ALIAS_EXCLUDED_COLUMNS, OPTION_EXCLUDED_COLUMNS, NULL, excluded_columns_usage );
+    HelpOptionLine ( ALIAS_BOOLEAN, OPTION_BOOLEAN, NULL, boolean_usage );
+    HelpOptionLine ( ALIAS_OBJVER, OPTION_OBJVER, NULL, objver_usage );
+    HelpOptionLine ( ALIAS_OBJTYPE, OPTION_OBJTYPE, NULL, objtype_usage );
+    HelpOptionLine ( ALIAS_NUMELEM, OPTION_NUMELEM, NULL, numelem_usage );
+    HelpOptionLine ( ALIAS_NUMELEMSUM, OPTION_NUMELEMSUM, NULL, numelemsum_usage );
+    HelpOptionLine ( NULL, OPTION_SHOW_BLOBBING, NULL, show_blobbing_usage );
+    HelpOptionLine ( NULL, OPTION_ENUM_PHYS, NULL, enum_phys_usage );
 
     HelpOptionsStandard ();
 
-    HelpVersion (fullpath, KAppVersion());
+    HelpVersion ( fullpath, KAppVersion() );
 
     return rc;
 }
@@ -214,13 +241,17 @@ static void CC vdm_read_cell_data( void *item, void *data )
                                  &src.offset_in_bits, &src.number_of_elements );
     if ( r_ctx->rc != 0 )
     {
-        PLOGERR( klogInt,
-                 (klogInt,
-                 r_ctx->rc,
-                 "VCursorCellData( col:$(col_name) at row #$(row_nr) ) failed",
-                 "col_name=%s,row_nr=%lu",
-                  my_col_def->name, r_ctx->row_id ));
-        /* be forgiving and continue if a cell cannot be read */
+        if( UIError(r_ctx->rc, NULL, r_ctx->table) ) {
+            UITableLOGError(r_ctx->rc, r_ctx->table, true);
+        } else {
+            PLOGERR( klogInt,
+                     (klogInt,
+                     r_ctx->rc,
+                     "VCursorCellData( col:$(col_name) at row #$(row_nr) ) failed",
+                     "col_name=%s,row_nr=%lu",
+                      my_col_def->name, r_ctx->row_id ));
+            /* be forgiving and continue if a cell cannot be read */
+        }
         r_ctx->rc = 0;
     }
 
@@ -254,34 +285,67 @@ static void CC vdm_read_cell_data( void *item, void *data )
             print_comma = false;
         }
 
-        /* loop through the elements(dimension's) of a cell */
-        while( ( src.element_idx < src.number_of_elements )&&( r_ctx->rc == 0 ) )
+        if ( r_ctx->ctx->print_num_elem )
         {
-            uint32_t eidx = src.element_idx;
-            if ( ( eidx > 0 )&& ( src.print_dna_bases == false ) && print_comma )
-            {
-                vds_append_str( &(my_col_def->content), ", " );
-            }
+            char temp[ 16 ];
+            size_t num_writ;
 
-            /* dumps the basic data-types, implementation in vdb-dump-tools.c
-               >>> that means it appends the element-string to
-                   my_col_def->content <<<
-               the formated output is only collected, to be printed later
-               dump_element is also responsible for incrementing
-               the src.element_idx by: 1...bool/int/uint/float
-                                       n...string/unicode-string */
-            r_ctx->rc = vdt_dump_element( &src, my_col_def );
-
-            /* insurance against endless loop */
-            if ( eidx == src.element_idx )
+            r_ctx->rc = string_printf ( temp, sizeof temp, &num_writ, "%u", src.number_of_elements ); 
+            if ( r_ctx->rc == 0 )
+                vds_append_str( &(my_col_def->content), temp );
+        }
+        else if ( r_ctx->ctx->sum_num_elem )
+        {
+            my_col_def->elementsum += src.number_of_elements;
+        }
+        else
+        {
+            /* loop through the elements(dimension's) of a cell */
+            while( ( src.element_idx < src.number_of_elements )&&( r_ctx->rc == 0 ) )
             {
-                src.element_idx++;
+                uint32_t eidx = src.element_idx;
+                if ( ( eidx > 0 )&& ( src.print_dna_bases == false ) && print_comma )
+                {
+                    vds_append_str( &(my_col_def->content), ", " );
+                }
+
+                /* dumps the basic data-types, implementation in vdb-dump-tools.c
+                   >>> that means it appends the element-string to
+                       my_col_def->content <<<
+                   the formated output is only collected, to be printed later
+                   dump_element is also responsible for incrementing
+                   the src.element_idx by: 1...bool/int/uint/float
+                                           n...string/unicode-string */
+                r_ctx->rc = vdt_dump_element( &src, my_col_def );
+
+                /* insurance against endless loop */
+                if ( eidx == src.element_idx )
+                {
+                    src.element_idx++;
+                }
             }
         }
     }
 }
 
 
+
+static void CC vdm_print_elem_sum( void *item, void *data )
+{
+    char temp[ 16 ];
+    size_t num_writ;
+    p_col_def my_col_def = (p_col_def)item;
+    p_row_context r_ctx = (p_row_context)data;
+
+    if ( r_ctx->rc != 0 ) return; /* important to stop if the last read was not successful */
+    vds_clear( &(my_col_def->content) ); /* clear the destination-dump-string */
+
+    r_ctx->rc = string_printf ( temp, sizeof temp, &num_writ, "%u", my_col_def->elementsum ); 
+    if ( r_ctx->rc == 0 )
+        vds_append_str( &(my_col_def->content), temp );
+}
+
+
 static void vdm_row_error( const char * fmt, rc_t rc, uint64_t row_id )
 {
     PLOGERR( klogInt, ( klogInt, rc, fmt, "row_nr=%lu", row_id ) );
@@ -342,11 +406,13 @@ static rc_t vdm_dump_rows( p_row_context r_ctx )
                     if ( r_ctx->rc == 0 )
                     {
                         /* prints the collected strings, in vdb-dump-formats.c */
-                        r_ctx->rc = vdfo_print_row( r_ctx );
-                        if ( r_ctx->rc != 0 )
-                            vdm_row_error( "vdfo_print_row( row#$(row_nr) ) failed", 
-                                   r_ctx->rc, r_ctx->row_id );
-
+                        if ( !r_ctx->ctx->sum_num_elem )
+                        {
+                            r_ctx->rc = vdfo_print_row( r_ctx );
+                            if ( r_ctx->rc != 0 )
+                                vdm_row_error( "vdfo_print_row( row#$(row_nr) ) failed", 
+                                       r_ctx->rc, r_ctx->row_id );
+                        }
                     }
                     r_ctx->rc = VCursorCloseRow( r_ctx->cursor );
                     if ( r_ctx->rc != 0 )
@@ -355,6 +421,16 @@ static rc_t vdm_dump_rows( p_row_context r_ctx )
                 }
             }
         }
+        if ( r_ctx->rc == 0 && r_ctx->ctx->sum_num_elem )
+        {
+            VectorForEach( &(r_ctx->col_defs->cols),
+                           false, vdm_print_elem_sum, r_ctx );
+            if ( r_ctx->rc == 0 )
+            {
+                r_ctx->rc = vdfo_print_row( r_ctx );
+                DISP_RC( r_ctx->rc, "VTableOpenSchema() failed" );
+            }
+        }
         vds_free( &(r_ctx->s_col) );
     }
     return r_ctx->rc;
@@ -366,20 +442,42 @@ static bool vdm_extract_or_parse_columns( const p_dump_context ctx,
                                           p_col_defs my_col_defs )
 {
     bool res = false;
-    bool cols_unknown;
-
-    if ( ctx == NULL ) return res;
-    if ( my_col_defs == NULL ) return res;
-    cols_unknown = ( (ctx->columns == NULL)||(strcmp(ctx->columns, "*")== 0) );
-    if ( cols_unknown )
-        /* the user does not know the column-names or wants all of them */
-        res = vdcd_extract_from_table( my_col_defs, my_table );
-    else
-        /* the user knows the names of the wanted columns... */
-        res = vdcd_parse_string( my_col_defs, ctx->columns );
+    if ( ctx != NULL && my_col_defs != NULL )
+    {
+        bool cols_unknown = ( ( ctx->columns == NULL ) || ( string_cmp( ctx->columns, 1, "*", 1, 1 ) == 0 ) );
+        if ( cols_unknown )
+            /* the user does not know the column-names or wants all of them */
+            res = vdcd_extract_from_table( my_col_defs, my_table );
+        else
+            /* the user knows the names of the wanted columns... */
+            res = vdcd_parse_string( my_col_defs, ctx->columns, my_table );
 
-    if ( ctx->excluded_columns != NULL )
-        vdcd_exclude_these_columns( my_col_defs, ctx->excluded_columns );
+        if ( ctx->excluded_columns != NULL )
+            vdcd_exclude_these_columns( my_col_defs, ctx->excluded_columns );
+    }
+
+    return res;
+}
+
+
+static bool vdm_extract_or_parse_phys_columns( const p_dump_context ctx,
+                                               const VTable *my_table,
+                                               p_col_defs my_col_defs )
+{
+    bool res = false;
+    if ( ctx != NULL && my_col_defs != NULL )
+    {
+        bool cols_unknown = ( ( ctx->columns == NULL ) || ( string_cmp( ctx->columns, 1, "*", 1, 1 ) == 0 ) );
+        if ( cols_unknown )
+            /* the user does not know the column-names or wants all of them */
+            res = vdcd_extract_from_phys_table( my_col_defs, my_table );
+        else
+            /* the user knows the names of the wanted columns... */
+            res = vdcd_parse_string( my_col_defs, ctx->columns, NULL );
+
+        if ( ctx->excluded_columns != NULL )
+            vdcd_exclude_these_columns( my_col_defs, ctx->excluded_columns );
+    }
 
     return res;
 }
@@ -404,10 +502,11 @@ my_table  [IN] ... open table needed for vdb-calls
 static rc_t vdm_dump_opened_table( const p_dump_context ctx, const VTable *my_table )
 {
     row_context r_ctx;
-    rc_t rc = VTableCreateCursorRead( my_table, &(r_ctx.cursor) );
+    rc_t rc = VTableCreateCachedCursorRead( my_table, &(r_ctx.cursor), CURSOR_CACHE_SIZE );
     DISP_RC( rc, "VTableCreateCursorRead() failed" );
     if ( rc == 0 )
     {
+        r_ctx.table = my_table;
         if ( !vdcd_init( &(r_ctx.col_defs), ctx->max_line_len ) )
         {
             rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
@@ -569,32 +668,31 @@ my_database [IN] ... open database needed for vdb-calls
 static rc_t vdm_enum_tables( const p_dump_context ctx,
                              const VDatabase *my_database )
 {
-    rc_t rc;
-    KNamelist *tbl_names;
-
-    OUTMSG ( ( ">>> enumerating the tables of database >%s<\n", ctx->path ) );
-    rc = VDatabaseListTbl( my_database, &tbl_names );
-    DISP_RC( rc, "VDatabaseListTbl() failed" );
+    rc_t rc = KOutMsg( "enumerating the tables of database '%s'\n", ctx->path );
     if ( rc == 0 )
     {
-        uint32_t n;
-        rc = KNamelistCount( tbl_names, &n );
-        DISP_RC( rc, "KNamelistCount() failed" );
+        KNamelist *tbl_names;
+        rc = VDatabaseListTbl( my_database, &tbl_names );
+        DISP_RC( rc, "VDatabaseListTbl() failed" );
         if ( rc == 0 )
         {
-            uint32_t i;
-            for ( i=0; i<n; ++i )
+            uint32_t n;
+            rc = KNamelistCount( tbl_names, &n );
+            DISP_RC( rc, "KNamelistCount() failed" );
+            if ( rc == 0 )
             {
-                const char *tbl_name;
-                rc = KNamelistGet( tbl_names, i, &tbl_name );
-                DISP_RC( rc, "KNamelistGet() failed" );
-                if ( rc == 0 )
+                uint32_t i;
+                for ( i = 0; i < n && rc == 0; ++i )
                 {
-                    OUTMSG( ( "tbl #%u: %s\n", i+1, tbl_name ) );
+                    const char *tbl_name;
+                    rc = KNamelistGet( tbl_names, i, &tbl_name );
+                    DISP_RC( rc, "KNamelistGet() failed" );
+                    if ( rc == 0 )
+                        rc = KOutMsg( "tbl #%u: %s\n", i+1, tbl_name );
                 }
             }
+            KNamelistRelease( tbl_names );
         }
-        KNamelistRelease( tbl_names );
     }
     return rc;
 }
@@ -604,10 +702,11 @@ typedef struct col_info_context
     p_dump_context ctx;
     const VSchema *my_schema;
     const VTable *my_table;
+    const KTable *my_ktable;
 } col_info_context;
 typedef struct col_info_context* p_col_info_context;
 
-static void vdm_print_column_datatypes( const p_col_def col_def,
+static rc_t vdm_print_column_datatypes( const p_col_def col_def,
                                         const p_col_info_context ci )
 {
     KNamelist *names;
@@ -623,7 +722,7 @@ static void vdm_print_column_datatypes( const p_col_def col_def,
         if ( rc == 0 )
         {
             uint32_t i;
-            for ( i=0; i<n; ++i )
+            for ( i = 0; i < n && rc == 0; ++i )
             {
                 const char *type_name;
                 rc = KNamelistGet( names, i, &type_name );
@@ -631,16 +730,76 @@ static void vdm_print_column_datatypes( const p_col_def col_def,
                 if ( rc == 0 )
                 {
                     if ( dflt_idx == i )
-                        OUTMSG ( ( "%20s.type[%d] = %s (dflt)\n", col_def->name, i, type_name ) );
+                        rc = KOutMsg( "%20s.type[%d] = %s (dflt)\n", col_def->name, i, type_name );
                     else
-                        OUTMSG ( ( "%20s.type[%d] = %s\n", col_def->name, i, type_name ) );
+                        rc = KOutMsg( "%20s.type[%d] = %s\n", col_def->name, i, type_name );
                 }
             }
         }
         rc = KNamelistRelease( names );
         DISP_RC( rc, "KNamelistRelease() failed" );
     }
-    OUTMSG ( ( "\n" ) );
+    if ( rc == 0 )
+        rc = KOutMsg( "\n" );
+    return rc;
+}
+
+
+static rc_t vdm_show_row_blobbing( const p_col_def col_def,
+                                   const p_col_info_context ci )
+{
+    const KColumn * kcol;
+    rc_t rc = KTableOpenColumnRead( ci->my_ktable, &kcol, "%s", col_def->name );
+    if ( rc != 0 )
+        return KOutMsg( "'%s' is not a physical column\n", col_def->name );
+    else
+        rc = KOutMsg( "\nCOLUMN '%s':\n", col_def->name );
+
+    if ( rc == 0 )
+    {
+        int64_t first;
+        uint64_t count;
+        rc = KColumnIdRange( kcol, &first, &count );
+        DISP_RC( rc, "KColumnIdRange() failed" );
+        if ( rc == 0 )
+        {
+            int64_t last = first + count;
+            rc = KOutMsg( "range: %,ld ... %,ld\n", first, last );
+            if ( rc == 0 )
+            {
+                int64_t id = first;
+                while ( id < last && rc == 0 )
+                {
+                    const KColumnBlob *blob;
+                    rc = KColumnOpenBlobRead( kcol, &blob, id );
+                    DISP_RC( rc, "KColumnOpenBlobRead() failed" );
+                    if ( rc == 0 )
+                    {
+                        int64_t first_id_in_blob;
+                        uint32_t ids_in_blob;
+                        rc = KColumnBlobIdRange( blob, &first_id_in_blob, &ids_in_blob );
+                        DISP_RC( rc, "KColumnBlobIdRange() failed" );
+                        if ( rc == 0 )
+                        {
+                            int64_t last_id_in_blob = first_id_in_blob + ids_in_blob - 1;
+                            char buffer[ 8 ];
+                            size_t num_read, remaining;
+                            rc = KColumnBlobRead ( blob, 0, &buffer, 0, &num_read, &remaining );
+                            DISP_RC( rc, "KColumnBlobRead() failed" );
+                            if ( rc == 0 )
+                            {
+                                rc = KOutMsg( "blob[ %,ld ... %,ld] size = %,zu\n", first_id_in_blob, last_id_in_blob, remaining );
+                            }
+                            id = last_id_in_blob + 1;
+                        }
+                        KColumnBlobRelease( blob );
+                    }
+                }
+            }
+        }
+        KColumnRelease( kcol );
+    }
+    return rc;
 }
 
 /*************************************************************************************
@@ -652,17 +811,61 @@ static void vdm_print_column_datatypes( const p_col_def col_def,
 item  [IN] ... pointer to a column-definition-struct ( from "vdb-dump-coldefs.h" )
 data  [IN] ... pointer to dump-context ( in this case to have a line-idx )
 *************************************************************************************/
-static void CC vdm_print_column_info( void *item, void *data )
+static rc_t vdm_print_column_info( const p_col_def col_def, p_col_info_context ci_ctx )
 {
-    p_col_info_context ci_ctx = (p_col_info_context)data;
-    const p_col_def col_def = (const p_col_def)item;
+    rc_t rc = 0;
+
+    if ( ci_ctx->ctx->show_blobbing )
+        rc = vdm_show_row_blobbing( col_def, ci_ctx );
+    else
+    {
+        /* print_col_info is in vdb-dump-helper.c */
+        rc = vdh_print_col_info( ci_ctx->ctx , col_def, ci_ctx->my_schema );
+
+        /* to test VTableColumnDatatypes() */
+        if ( rc == 0  && ci_ctx->ctx->column_enum_requested )
+            rc = vdm_print_column_datatypes( col_def, ci_ctx );
+    }
+    return rc;
+}
 
-    /* print_col_info is in vdb-dump-helper.c */
-    vdh_print_col_info( ci_ctx->ctx , col_def, ci_ctx->my_schema );
 
-    /* to test VTableColumnDatatypes() */
-    if ( ci_ctx->ctx->column_enum_requested )
-        vdm_print_column_datatypes( col_def, ci_ctx );
+static rc_t vdm_enum_phys_columns( const VTable *my_table )
+{
+    rc_t rc = KOutMsg( "physical columns:\n" );
+    if ( rc == 0 )
+    {
+        KNamelist *phys;
+        rc = VTableListPhysColumns( my_table, &phys );
+        DISP_RC( rc, "VTableListPhysColumns() failed" );
+        if ( rc == 0 )
+        {
+            uint32_t count;
+            rc = KNamelistCount( phys, &count );
+            DISP_RC( rc, "KNamelistCount( physical columns ) failed" );
+            if ( rc == 0 )
+            {
+                if ( count > 0 )
+                {
+                    uint32_t idx;
+                    for ( idx = 0; idx < count && rc == 0; ++idx )
+                    {
+                        const char * name;
+                        rc = KNamelistGet( phys, idx, &name );
+                        DISP_RC( rc, "KNamelistGet( physical columns ) failed" );
+                        if ( rc == 0 )
+                            rc = KOutMsg( "[%.02d] = %s\n", idx, name );
+                    }
+                }
+                else
+                {
+                    rc = KOutMsg( "... list is empty!\n" );
+                }
+            }
+            KNamelistRelease( phys );
+        }
+    }
+    return rc;
 }
 
 /*************************************************************************************
@@ -680,39 +883,68 @@ my_database [IN] ... open database needed for vdb-calls
 static rc_t vdm_enum_tab_columns( const p_dump_context ctx, const VTable *my_table )
 {
     rc_t rc = 0;
-    col_defs *my_col_defs;
-
-    if ( !vdcd_init( &my_col_defs, ctx->max_line_len ) )
+    if ( ctx->enum_phys )
     {
-        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
-        DISP_RC( rc, "col_defs_init() failed" );
+        rc = vdm_enum_phys_columns( my_table );
     }
-
-    if ( rc == 0 )
+    else
     {
-        if ( vdcd_extract_from_table( my_col_defs, my_table ) )
+        col_defs *my_col_defs;
+        if ( !vdcd_init( &my_col_defs, ctx->max_line_len ) )
+        {
+            rc = RC( rcVDB, rcNoTarg, rcConstructing, rcMemory, rcExhausted );
+            DISP_RC( rc, "col_defs_init() failed" );
+        }
+
+        if ( rc == 0 )
         {
             col_info_context ci_ctx;
+            bool extracted;
+
             ci_ctx.ctx = ctx;
             ci_ctx.my_table = my_table;
-            rc = VTableOpenSchema( my_table, &(ci_ctx.my_schema) );
-            DISP_RC( rc, "VTableOpenSchema() failed" );
-            if ( rc == 0 )
+            if ( ctx->show_blobbing )
             {
-                ctx->generic_idx = 1;
-                VectorForEach( &(my_col_defs->cols), false,
-                               vdm_print_column_info, &ci_ctx );
+                extracted = vdm_extract_or_parse_phys_columns( ctx, my_table, my_col_defs );
+                rc = VTableOpenKTableRead( my_table, &ci_ctx.my_ktable );
+                DISP_RC( rc, "VTableOpenKTableRead() failed" );
+            }
+            else
+            {
+                extracted = vdm_extract_or_parse_columns( ctx, my_table, my_col_defs );
+                ci_ctx.my_ktable = NULL;
+            }
+
+            if ( extracted && rc == 0 )
+            {
+                rc = VTableOpenSchema( my_table, &(ci_ctx.my_schema) );
+                DISP_RC( rc, "VTableOpenSchema() failed" );
+                if ( rc == 0 )
+                {
+                    uint32_t idx, count;
 
-                vdcd_destroy( my_col_defs );
-                VSchemaRelease( ci_ctx.my_schema );
+                    ctx->generic_idx = 1;
+                    count = VectorLength( &(my_col_defs->cols) );
+                    for ( idx = 0; idx < count && rc == 0; ++idx )
+                    {
+                        col_def *col = ( col_def * )VectorGet( &(my_col_defs->cols), idx );
+                        if ( col != 0 )
+                        {
+                            rc = vdm_print_column_info( col, &ci_ctx );
+                        }
+                    }
+                    VSchemaRelease( ci_ctx.my_schema );
+                }
+                if ( ci_ctx.my_ktable != NULL )
+                    KTableRelease( ci_ctx.my_ktable );
             }
-        }
-        else
-        {
-            OUTMSG ( ( "error in col_defs_extract_from_table\n" ) );
+            else
+            {
+                rc = KOutMsg( "error in col_defs_extract_from_table\n" );
+            }
+            vdcd_destroy( my_col_defs );
         }
     }
-
     return rc;
 }
 
@@ -741,6 +973,7 @@ static rc_t vdm_enum_db_columns( const p_dump_context ctx, const VDatabase *my_d
     return rc;
 }
 
+
 static rc_t vdm_print_tab_id_range( const p_dump_context ctx, const VTable *my_table )
 {
     const VCursor *my_cursor;
@@ -771,9 +1004,7 @@ static rc_t vdm_print_tab_id_range( const p_dump_context ctx, const VTable *my_t
                         rc = VCursorIdRange( my_cursor, 0, &first, &count );
                         DISP_RC( rc, "VCursorIdRange() failed" );
                         if ( rc == 0 )
-                        {
-                            OUTMSG ( ( "id-range: first-row = %ld, row-count = %ld\n", first, count ) );
-                        }
+                            rc = KOutMsg( "id-range: first-row = %,ld, row-count = %,ld\n", first, count );
                     }
                 }
             }
@@ -850,6 +1081,13 @@ static rc_t vdm_dump_tab_fkt( const p_dump_context ctx,
     return rc;
 }
 
+
+static bool enum_col_request( const p_dump_context ctx )
+{
+    return ( ctx->column_enum_requested || ctx->column_enum_short || 
+             ctx->show_blobbing || ctx->enum_phys );
+}
+
 /***************************************************************************
     dump_table:
     * called by "dump_main()" to handle a table
@@ -859,7 +1097,7 @@ static rc_t vdm_dump_tab_fkt( const p_dump_context ctx,
 ctx        [IN] ... contains path, tablename, columns, row-range etc.
 my_manager [IN] ... open manager needed for vdb-calls
 ***************************************************************************/
-rc_t vdm_dump_table( const p_dump_context ctx, const VDBManager *my_manager )
+static rc_t vdm_dump_table( const p_dump_context ctx, const VDBManager *my_manager )
 {
     rc_t rc;
 
@@ -874,10 +1112,10 @@ rc_t vdm_dump_table( const p_dump_context ctx, const VDBManager *my_manager )
     }
     else if ( ctx->table_enum_requested )
     {
-        OUTMSG(( "cannot enum tables of a table-object\n" ));
+        KOutMsg( "cannot enum tables of a table-object\n" );
         rc = RC ( rcApp, rcArgv, rcAccessing, rcParam, rcInvalid );
     }
-    else if ( ctx->column_enum_requested || ctx->column_enum_short )
+    else if ( enum_col_request( ctx ) )
     {
         rc = vdm_dump_tab_fkt( ctx, my_manager, vdm_enum_tab_columns );
     }
@@ -942,7 +1180,7 @@ static rc_t vdm_dump_db_fkt( const p_dump_context ctx,
         }
         else
         {
-            LOGMSG( klogInfo, "opened as vdb-dabase, but no table found" );
+            LOGMSG( klogInfo, "opened as vdb-database, but no table found" );
             ctx->usage_requested = true;
         }
         VDatabaseRelease( my_database );
@@ -956,6 +1194,7 @@ static rc_t vdm_dump_db_fkt( const p_dump_context ctx,
     return rc;
 }
 
+
 /***************************************************************************
     dump_database:
     * called by "dump_main()"
@@ -965,7 +1204,7 @@ static rc_t vdm_dump_db_fkt( const p_dump_context ctx,
 ctx        [IN] ... contains path, tablename, columns, row-range etc.
 my_manager [IN] ... open manager needed for vdb-calls
 ***************************************************************************/
-rc_t vdm_dump_database( const p_dump_context ctx, const VDBManager *my_manager )
+static rc_t vdm_dump_database( const p_dump_context ctx, const VDBManager *my_manager )
 {
     rc_t rc;
 
@@ -977,7 +1216,7 @@ rc_t vdm_dump_database( const p_dump_context ctx, const VDBManager *my_manager )
     {
         rc = vdm_dump_db_fkt( ctx, my_manager, vdm_enum_tables );
     }
-    else if ( ctx->column_enum_requested || ctx->column_enum_short )
+    else if ( enum_col_request( ctx ) )
     {
         rc = vdm_dump_db_fkt( ctx, my_manager, vdm_enum_db_columns );
     }
@@ -993,64 +1232,137 @@ rc_t vdm_dump_database( const p_dump_context ctx, const VDBManager *my_manager )
     return rc;
 }
 
-char *vdm_translate_accession( SRAPath *my_sra_path,
-                               const char *accession,
-                               const size_t bufsize )
+
+static rc_t vdm_print_objver( const p_dump_context ctx, const VDBManager *mgr )
 {
-    char *res = malloc( bufsize );
-    if ( res != NULL )
+    ver_t version;
+    rc_t rc = VDBManagerGetObjVersion ( mgr, &version, ctx->path );
+    DISP_RC( rc, "VDBManagerGetObjVersion() failed" );
+    if ( rc == 0 )
+        rc = KOutMsg( "%V\n", version );
+    return rc;
+}
+
+
+static void vdm_print_objtype( const VDBManager *mgr, const char * acc_or_path )
+{
+    int path_type = ( VDBManagerPathType ( mgr, acc_or_path ) & ~ kptAlias );
+    switch ( path_type )
     {
-        rc_t rc = SRAPathFind( my_sra_path, accession, res, bufsize );
-        if ( GetRCState( rc ) == rcNotFound )
-        {
-            free( res );
-            res = NULL;
-        }
-        else if ( GetRCState( rc ) == rcInsufficient )
-        {
-            DBGMSG ( DBG_APP, 0,  ( "bufsize %lu was insufficient\n", bufsize ) );
-            free( res );
-            res = vdm_translate_accession( my_sra_path, accession, bufsize * 2 );
-        }
-        else if ( rc != 0 )
+    case kptDatabase      :   KOutMsg( "Database\n" ); break;
+    case kptTable         :   KOutMsg( "Table\n" ); break;
+    case kptPrereleaseTbl :   KOutMsg( "Prerelease Table\n" ); break;
+    case kptColumn        :   KOutMsg( "Column\n" ); break;
+    case kptIndex         :   KOutMsg( "Index\n" ); break;
+    case kptNotFound      :   KOutMsg( "not found\n" ); break;
+    case kptBadPath       :   KOutMsg( "bad path\n" ); break;
+    case kptFile          :   KOutMsg( "File\n" ); break;
+    case kptDir           :   KOutMsg( "Dir\n" ); break;
+    case kptCharDev       :   KOutMsg( "CharDev\n" ); break;
+    case kptBlockDev      :   KOutMsg( "BlockDev\n" ); break;
+    case kptFIFO          :   KOutMsg( "FIFO\n" ); break;
+    case kptZombieFile    :   KOutMsg( "ZombieFile\n" ); break;
+    case kptDataset       :   KOutMsg( "Dataset\n" ); break;
+    case kptDatatype      :   KOutMsg( "Datatype\n" ); break;
+    default               :   KOutMsg( "value = '%i'\n", path_type ); break;
+    }
+}
+
+
+#define USE_PATHTYPE_TO_DETECT_DB_OR_TAB 1
+
+static rc_t vdb_main_one_obj_by_pathtype( const p_dump_context ctx,
+                                          const VDBManager *mgr,
+                                          const char * acc_or_path )
+{
+    rc_t rc;
+    int path_type = ( VDBManagerPathType ( mgr, acc_or_path ) & ~ kptAlias );
+    switch ( path_type )
+    {
+    case kptDatabase    :   rc = vdm_dump_database( ctx, mgr );
+                            DISP_RC( rc, "dump_database() failed" );
+                            break;
+
+    case kptPrereleaseTbl:
+    case kptTable       :   rc = vdm_dump_table( ctx, mgr );
+                            DISP_RC( rc, "dump_table() failed" );
+                            break;
+
+    default             :   rc = RC( rcVDB, rcNoTarg, rcConstructing, rcItem, rcNotFound );
+                            PLOGERR( klogInt, ( klogInt, rc,
+                                "the path '$(p)' cannot be opened as vdb-database or vdb-table",
+                                "p=%s", ctx->path ) );
+                            if ( vdco_schema_count( ctx ) == 0 )
+                            {
+                            LOGERR( klogInt, rc, "Maybe it is a legacy table. If so, specify a schema with the -S option" );
+                            }
+                            break;
+    }
+    return rc;
+}
+
+
+static rc_t vdb_main_one_obj_by_probing( const p_dump_context ctx,
+                                         const VDBManager *mgr,
+                                         const char * acc_or_path )
+{
+    rc_t rc;
+    if ( vdh_is_path_database( mgr, ctx->path, &(ctx->schema_list) ) )
+    {
+        rc = vdm_dump_database( ctx, mgr );
+        DISP_RC( rc, "dump_database() failed" );
+    }
+    else if ( vdh_is_path_table( mgr, ctx->path, &(ctx->schema_list) ) )
+    {
+        rc = vdm_dump_table( ctx, mgr );
+        DISP_RC( rc, "dump_table() failed" );
+    }
+    else
+    {
+        rc = RC( rcVDB, rcNoTarg, rcConstructing, rcItem, rcNotFound );
+        PLOGERR( klogInt, ( klogInt, rc,
+                 "the path '$(p)' cannot be opened as vdb-database or vdb-table",
+                 "p=%s", ctx->path ) );
+        if ( vdco_schema_count( ctx ) == 0 )
         {
-            free( res );
-            res = NULL;
+            LOGERR( klogInt, rc, "Maybe it is a legacy table. If so, specify a schema with the -S option" );
         }
     }
-    return res;
+    return rc;
 }
 
-rc_t vdm_check_accession( const p_dump_context ctx, const KDirectory *my_dir )
+
+static rc_t vdm_main_one_obj( const p_dump_context ctx,
+                        KDirectory *dir, const VDBManager *mgr,
+                        const char * acc_or_path )
 {
     rc_t rc = 0;
-    if ( strchr ( ctx->path, '/' ) == NULL )
+
+    ctx->path = string_dup_measure ( acc_or_path, NULL );
+
+    if ( ctx->objver_requested )
     {
-        SRAPath *my_sra_path;
-        rc = SRAPathMake( &my_sra_path, my_dir );
-        if ( rc != 0 )
+        rc = vdm_print_objver( ctx, mgr );
+    }
+    else if ( ctx->objtype_requested )
+    {
+        vdm_print_objtype( mgr, acc_or_path );
+    }
+    else
+    {
+        if ( USE_PATHTYPE_TO_DETECT_DB_OR_TAB )
         {
-            if ( GetRCState ( rc ) != rcNotFound || GetRCTarget ( rc ) != rcDylib )
-                LOGERR( klogInt, rc, "SRAPathMake() failed" );
-            else
-                rc = 0;
+            rc = vdb_main_one_obj_by_pathtype( ctx, mgr, acc_or_path );
         }
         else
         {
-            if ( !SRAPathTest( my_sra_path, ctx->path ) )
-            {
-                char *buf = vdm_translate_accession( my_sra_path, ctx->path, 64 );
-                if ( buf != NULL )
-                {
-                    DBGMSG ( DBG_APP, 0,  ( "sra-accession found! >%s<\n", buf ) );
-                    free( (char*)ctx->path );
-                    ctx->path = buf;
-                }
-            }
-            SRAPathRelease( my_sra_path );
+            rc = vdb_main_one_obj_by_probing( ctx, mgr, acc_or_path );
         }
     }
 
+    free( (char*)ctx->path );
+    ctx->path = NULL;
+
     return rc;
 }
 
@@ -1069,56 +1381,58 @@ rc_t vdm_check_accession( const p_dump_context ctx, const KDirectory *my_dir )
 
 ctx        [IN] ... contains path, tablename, columns, row-range etc.
 ***************************************************************************/
-rc_t vdm_main( const p_dump_context ctx )
+static rc_t vdm_main( const p_dump_context ctx, Args * args )
 {
-    rc_t rc;
-    KDirectory *my_directory;
-    rc = KDirectoryNativeDir( &my_directory );
+    rc_t rc, rc1;
+    KDirectory *dir;
+
+    rc = KDirectoryNativeDir( &dir );
     DISP_RC( rc, "KDirectoryNativeDir() failed" );
     if ( rc == 0 )
     {
-        rc_t rc1;
-        const VDBManager *my_manager;
-
-        if ( ctx->dont_check_accession == false )
-        {
-            rc1 = vdm_check_accession( ctx, my_directory );
-            DISP_RC( rc, "check_accession() failed" );
-        }
+        const VDBManager *mgr;
 
-        rc = VDBManagerMakeRead ( &my_manager, my_directory );
+        rc = VDBManagerMakeRead ( &mgr, dir );
         DISP_RC( rc, "VDBManagerMakeRead() failed" );
         if ( rc == 0 )
         {
             /* show manager is independend form db or tab */
             if ( ctx->version_requested )
             {
-                rc1 = vdh_show_manager_version( my_manager );
-                DISP_RC( rc1, "show_manager_version() failed" );
-            }
-
-            /* if the path is a database-path... (from vdb-dump-helper.c) */
-            if ( vdh_is_path_database( my_manager, ctx->path, &(ctx->schema_list) ) )
-            {
-                rc = vdm_dump_database( ctx, my_manager );
-                DISP_RC( rc, "dump_database() failed" );
-            }
-            /* if the path is a table-path... (from vdb-dump-helper.c) */
-            else if ( vdh_is_path_table( my_manager, ctx->path, &(ctx->schema_list) ) )
-            {
-                rc = vdm_dump_table( ctx, my_manager );
-                DISP_RC( rc, "dump_table() failed" );
+                rc = vdh_show_manager_version( mgr );
+                DISP_RC( rc, "show_manager_version() failed" );
             }
             else
             {
-                OUTMSG ( ( "\nthe path >%s< cannot be opened as vdb-database or vdb-table !!!\n", ctx->path ) );
-                if ( vdco_schema_count( ctx ) == 0 )
-                    OUTMSG ( ( "Maybe it is a legacy table. If so, specify a schema with the -S option\n" ) );
+                uint32_t count;
+                rc = ArgsParamCount( args, &count );
+                DISP_RC( rc, "ArgsParamCount() failed" );
+                if ( rc == 0 )
+                {
+                    if ( count > 0 )
+                    {
+                        uint32_t idx;
+                        for ( idx = 0; idx < count && rc == 0; ++idx )
+                        {
+                            const char *value = NULL;
+                            rc = ArgsParamValue( args, idx, &value );
+                            DISP_RC( rc, "ArgsParamValue() failed" );
+                            if ( rc == 0 )
+                            {
+                                rc = vdm_main_one_obj( ctx, dir, mgr, value );
+                            }
+                        }
+                    }
+                    else
+                    {
+                        rc = UsageSummary ( UsageDefaultName );
+                    }
+                }
             }
-            rc1 = VDBManagerRelease( my_manager );
+            rc1 = VDBManagerRelease( mgr );
             DISP_RC( rc1, "VDBManagerRelease() failed" );
         }
-        rc1 = KDirectoryRelease( my_directory );
+        rc1 = KDirectoryRelease( dir );
         DISP_RC( rc1, "KDirectoryRelease() failed" );
     }
     return rc;
@@ -1164,21 +1478,8 @@ rc_t CC KMain ( int argc, char *argv [] )
             rc = vdco_capture_arguments_and_options( args, ctx );
             if ( rc == 0 )
             {
-                if ( ctx->usage_requested )
-                {
-                    MiniUsage(args);
-                }
-                else
-                {
-                    KLogHandlerSetStdErr();
-                    rc = vdm_main( ctx );
-
-                    /* usage can be requested during dump_main */
-                    if ( ctx->usage_requested )
-                    {
-                        MiniUsage(args);
-                    }
-                }
+                KLogHandlerSetStdErr();
+                rc = vdm_main( ctx, args );
             }
             vdco_destroy( ctx );
         }
diff --git a/tools/vdb-dump/vdb-dump.vers b/tools/vdb-dump/vdb-dump.vers
index 04b10b4..f90b1af 100644
--- a/tools/vdb-dump/vdb-dump.vers
+++ b/tools/vdb-dump/vdb-dump.vers
@@ -1 +1 @@
-2.1.7
+2.3.2
diff --git a/tools/vdb-dump/vdb-dump.vers.h b/tools/vdb-dump/vdb-dump.vers.h
deleted file mode 100644
index d829bf0..0000000
--- a/tools/vdb-dump/vdb-dump.vers.h
+++ /dev/null
@@ -1 +0,0 @@
-#define VDB_DUMP_VERS 0x02010007
diff --git a/tools/vdb-validate/Makefile b/tools/vdb-validate/Makefile
new file mode 100644
index 0000000..dc1fb21
--- /dev/null
+++ b/tools/vdb-validate/Makefile
@@ -0,0 +1,114 @@
+# ===========================================================================
+#
+#                            PUBLIC DOMAIN NOTICE
+#               National Center for Biotechnology Information
+#
+#  This software/database is a "United States Government Work" under the
+#  terms of the United States Copyright Act.  It was written as part of
+#  the author's official duties as a United States Government employee and
+#  thus cannot be copyrighted.  This software/database is freely available
+#  to the public for use. The National Library of Medicine and the U.S.
+#  Government have not placed any restriction on its use or reproduction.
+#
+#  Although all reasonable efforts have been taken to ensure the accuracy
+#  and reliability of the software and data, the NLM and the U.S.
+#  Government do not and cannot warrant the performance or results that
+#  may be obtained by using this software or data. The NLM and the U.S.
+#  Government disclaim all warranties, express or implied, including
+#  warranties of performance, merchantability or fitness for any particular
+#  purpose.
+#
+#  Please cite the author in any work or product based on this material.
+#
+# ===========================================================================
+
+
+default: std
+
+TOP ?= $(shell ../../build/abspath.sh ../..)
+MODULE = tools/vdb-validate
+
+include $(TOP)/build/Makefile.env
+
+INT_TOOLS = \
+
+
+EXT_TOOLS = \
+	vdb-validate
+
+ALL_TOOLS = \
+	$(INT_TOOLS) \
+	$(EXT_TOOLS)
+
+#------------------------------------------------------------------------------
+# outer targets
+#
+all std: vers-includes
+	@ $(MAKE_CMD) $(TARGDIR)/$@
+
+$(ALL_TOOLS): vers-includes
+	@ $(MAKE_CMD) $(BINDIR)/$@
+
+.PHONY: all std $(ALL_TOOLS)
+
+#-------------------------------------------------------------------------------
+# all
+#
+$(TARGDIR)/all: \
+	$(addprefix $(BINDIR)/,$(ALL_TOOLS))
+
+.PHONY: $(TARGDIR)/all
+
+#-------------------------------------------------------------------------------
+# std
+#
+$(TARGDIR)/std: \
+	$(addprefix $(BINDIR)/,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/std
+
+#-------------------------------------------------------------------------------
+# vers-includes
+#
+$(TARGDIR)/vers-includes: $(addsuffix .vers.h,$(EXT_TOOLS))
+
+.PHONY: $(TARGDIR)/vers-includes
+
+#-------------------------------------------------------------------------------
+# clean
+#
+clean: stdclean
+
+.PHONY: clean
+
+#-------------------------------------------------------------------------------
+# vdb-validate
+#
+VDB_VALIDATE_SRC = \
+	vdb-validate
+
+VDB_VALIDATE_OBJ = \
+	$(addsuffix .$(OBJX),$(VDB_VALIDATE_SRC))
+
+VDB_VALIDATE_LIB = \
+	-dalign-reader \
+	$(READONLY_SCHEMA_LIBS) \
+	-dksrch \
+	-lsradb \
+	-lvdb \
+	-lkdb \
+	-lkapp \
+	-lvfs \
+	-lkurl \
+	-lkrypto \
+	-lkfg \
+	-lkfs \
+	-lkproc \
+	-lklib \
+	-lm
+
+vdb-validate.vers.h: vdb-validate.vers
+	$(TOP)/build/make-vers-inc.sh VDB_VALIDATE_VERS $^ > $@
+
+$(BINDIR)/vdb-validate: $(VDB_VALIDATE_OBJ)
+	$(LD) --exe --vers $(SRCDIR) -o $@ $^ $(VDB_VALIDATE_LIB)
diff --git a/tools/vdb-validate/vdb-validate.c b/tools/vdb-validate/vdb-validate.c
new file mode 100644
index 0000000..d166bed
--- /dev/null
+++ b/tools/vdb-validate/vdb-validate.c
@@ -0,0 +1,2325 @@
+/*===========================================================================
+ *
+ *                            PUBLIC DOMAIN NOTICE
+ *               National Center for Biotechnology Information
+ *
+ *  This software/database is a "United States Government Work" under the
+ *  terms of the United States Copyright Act.  It was written as part of
+ *  the author's official duties as a United States Government employee and
+ *  thus cannot be copyrighted.  This software/database is freely available
+ *  to the public for use. The National Library of Medicine and the U.S.
+ *  Government have not placed any restriction on its use or reproduction.
+ *
+ *  Although all reasonable efforts have been taken to ensure the accuracy
+ *  and reliability of the software and data, the NLM and the U.S.
+ *  Government do not and cannot warrant the performance or results that
+ *  may be obtained by using this software or data. The NLM and the U.S.
+ *  Government disclaim all warranties, express or implied, including
+ *  warranties of performance, merchantability or fitness for any particular
+ *  purpose.
+ *
+ *  Please cite the author in any work or product based on this material.
+ *
+ * ===========================================================================
+ *
+ */
+
+#include <vfs/manager-priv.h> /* VFSManagerOpenFileReadDecrypt */
+#include <vfs/manager.h> /* VFSManagerMake */
+#include <vfs/resolver.h> /* VResolver */
+#include <vfs/path.h> /* VPathMake */
+
+#include <kapp/main.h>
+#include <kapp/args.h>
+#include <klib/out.h>
+#include <klib/log.h>
+#include <klib/rc.h>
+#include <klib/namelist.h>
+#include <klib/container.h>
+#include <klib/text.h> /* String */
+#include <klib/debug.h>
+#include <klib/data-buffer.h>
+#include <klib/sort.h>
+
+#include <kdb/manager.h>
+#include <kdb/database.h>
+#include <kdb/table.h>
+#include <kdb/meta.h>
+#include <kdb/namelist.h>
+#include <kdb/consistency-check.h>
+#include <kdb/kdb-priv.h> /* KTableOpenDirectoryRead */
+
+#include <vdb/manager.h>
+#include <vdb/schema.h>
+#include <vdb/database.h>
+#include <vdb/table.h>
+#include <vdb/cursor.h>
+#include <vdb/dependencies.h> /* UIError */
+#include <vdb/vdb-priv.h> /* VTableOpenKTableRead */
+
+#include <krypto/encfile.h> /* KEncFileValidate */
+#include <krypto/wgaencrypt.h> /* KEncFileValidate */
+
+#include <kfs/kfs-priv.h>
+#include <kfs/sra.h>
+#include <kfs/tar.h>
+#include <kfs/file.h> /* KFileRelease */
+
+#include <insdc/insdc.h>
+#include <insdc/sra.h>
+#include <sra/srapath.h>
+#include <sra/sradb.h>
+#include <sra/sraschema.h>
+
+#include <sysalloc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <assert.h>
+
+#include "vdb-validate.vers.h"
+
+#define RELEASE(type, obj) do { rc_t rc2 = type##Release(obj); \
+    if (rc2 != 0 && rc == 0) { rc = rc2; } obj = NULL; } while (false)
+
+static bool exhaustive;
+static bool md5_required;
+static bool ref_int_check;
+static bool s_IndexOnly;
+
+typedef struct node_s {
+    int parent;
+    int prvSibl;
+    int nxtSibl;
+    int firstChild;
+    unsigned depth;
+    unsigned name;
+    uint32_t objType;
+} node_t;
+typedef struct cc_context_s {
+    node_t *nodes;
+    char *names;
+    rc_t rc;
+    unsigned num_columns;
+    unsigned nextNode;
+    unsigned nextName;
+} cc_context_t;
+static
+rc_t report_rtn ( rc_t rc )
+{
+    return exhaustive ? 0 : rc;
+}
+
+static rc_t report_index(CCReportInfoBlock const *what, cc_context_t *ctx)
+{
+    switch (what->type) {
+    case ccrpt_Done:
+        if (what->info.done.rc) {
+            (void)PLOGERR(klogErr, (klogErr, what->info.done.rc,
+                "Index '$(index)': $(mesg)",
+                "index=%s,mesg=%s", what->objName, what->info.done.mesg));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.done.rc;
+        }
+        return report_rtn (what->info.done.rc);
+    case ccrpt_Index:
+        return 0; /* continue with check */
+    case ccrpt_MD5:
+        if (what->info.MD5.rc) {
+            (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc,
+                "File '$(file)' of index '$(index)' failed MD5 check",
+                "file=%s,index=%s", what->info.MD5.file, what->objName));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.MD5.rc;
+        }
+        return report_rtn (what->info.MD5.rc);
+    default:
+        return RC(rcExe, rcTable, rcVisiting, rcParam, rcUnexpected);
+    }
+}
+
+static rc_t report_column(CCReportInfoBlock const *what, cc_context_t *ctx)
+{
+    switch (what->type) {
+    case ccrpt_Done:
+        if (what->info.done.rc) {
+            (void)PLOGERR(klogErr, (klogErr, what->info.done.rc,
+                "Column '$(column)': $(mesg)",
+                "column=%s,mesg=%s", what->objName, what->info.done.mesg));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.done.rc;
+        }
+        else {
+            (void)PLOGMSG(klogInfo, (klogInfo, "Column '$(column)': $(mesg)",
+                "column=%s,mesg=%s", what->objName,
+                what->info.done.mesg ? what->info.done.mesg : "checked"));
+            ++ctx->num_columns;
+        }
+        return report_rtn (what->info.done.rc);
+    case ccrpt_Blob:
+        return 0; /* continue with check */
+    case ccrpt_MD5:
+        if (what->info.MD5.rc) {
+            (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc,
+                "File '$(file)' of column '$(column)' failed MD5 check",
+                "file=%s,column=%s", what->info.MD5.file, what->objName));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.MD5.rc;
+        }
+        return report_rtn (what->info.MD5.rc);
+    default:
+        return RC(rcExe, rcTable, rcVisiting, rcParam, rcUnexpected);
+    }
+}
+
+static rc_t report_table(CCReportInfoBlock const *what, cc_context_t *ctx)
+{
+    switch (what->type) {
+    case ccrpt_Done:
+        if (what->info.done.rc) {
+            (void)PLOGERR(klogErr, (klogErr, what->info.done.rc,
+                "Table '$(table)': $(mesg)",
+                "table=%s,mesg=%s", what->objName, what->info.done.mesg));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.done.rc;
+        }
+        else if (what->info.done.mesg) {
+            if (strcmp(what->info.done.mesg, "missing md5 file") == 0
+                && md5_required)
+            {
+                rc_t rc = RC(0, rcTable, rcValidating, rcChecksum, rcNotFound);
+                (void)PLOGERR(klogErr, (klogErr, rc,
+                    "Table '$(table)': is missing required md5 files",
+                    "table=%s", what->objName));
+                return rc;
+            }
+            else if (strncmp("unexpected object ",
+                what->info.done.mesg, 18) == 0)
+            {
+                (void)PLOGMSG(klogWarn, (klogWarn,
+                    "Table '$(tbl)': $(mesg)", "tbl=%s,mesg=%s",
+                    what->objName, what->info.done.mesg));
+            }
+            else {
+                (void)PLOGMSG(klogInfo, (klogInfo,
+                    "Table '$(tbl)' metadata: $(mesg)",
+                    "tbl=%s,mesg=%s", what->objName, what->info.done.mesg));
+            }
+        }
+        return report_rtn (what->info.done.rc);
+    case ccrpt_MD5:
+        if (what->info.MD5.rc) {
+            (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc,
+                "File '$(file)' of table '$(table)' failed MD5 check",
+                "file=%s,table=%s", what->info.MD5.file, what->objName));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.MD5.rc;
+        }
+        return report_rtn (what->info.MD5.rc);
+    default:
+        return RC(rcExe, rcTable, rcVisiting, rcParam, rcUnexpected);
+    }
+}
+
+static rc_t report_database(CCReportInfoBlock const *what, cc_context_t *ctx)
+{
+    switch (what->type) {
+    case ccrpt_Done:
+        if (what->info.done.rc) {
+            (void)PLOGERR(klogErr, (klogErr, what->info.done.rc,
+                "Database '$(db)': $(mesg)",
+                "db=%s,mesg=%s", what->objName, what->info.done.mesg));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.done.rc;
+        }
+        else if (what->info.done.mesg) {
+            if (strcmp(what->info.done.mesg, "missing md5 file") == 0
+                && md5_required)
+            {
+                rc_t rc
+                    = RC(rcExe, rcTable, rcValidating, rcChecksum, rcNotFound);
+                (void)PLOGERR(klogErr, (klogErr, rc,
+                    "Database '$(table)': is missing required md5 files",
+                    "table=%s", what->objName));
+                return rc;
+            }
+            else {
+                (void)PLOGMSG(klogInfo, (klogInfo,
+                    "Database '$(db)' metadata: $(mesg)",
+                    "db=%s,mesg=%s", what->objName, what->info.done.mesg));
+            }
+        }
+        return report_rtn (what->info.done.rc);
+    case ccrpt_MD5:
+        if (what->info.MD5.rc) {
+            (void)PLOGERR(klogErr, (klogErr, what->info.MD5.rc,
+                "File '$(file)' of database '$(db)' failed MD5 check",
+                "file=%s,db=%s", what->info.MD5.file, what->objName));
+            if (ctx->rc == 0)
+                ctx->rc = what->info.MD5.rc;
+        }
+        return report_rtn (what->info.MD5.rc);
+    default:
+        return RC(rcExe, rcTable, rcVisiting, rcParam, rcUnexpected);
+    }
+}
+
+static rc_t visiting(CCReportInfoBlock const *what, cc_context_t *ctx)
+{
+    unsigned const nn = ctx->nextNode++;
+    node_t *const nxt = &ctx->nodes[nn];
+    node_t *const cur = nxt - 1;
+    
+    nxt->parent = nxt->prvSibl = nxt->nxtSibl = nxt->firstChild = -1;
+    nxt->depth = what->info.visit.depth;
+    nxt->objType = what->objType;
+    nxt->name = ctx->nextName;
+    ctx->nextName += strlen(what->objName) + 1;
+    strcpy(&ctx->names[nxt->name], what->objName);
+    
+    if (nn) {
+        if (cur->depth == nxt->depth) {
+            nxt->parent = cur->parent;
+            nxt->prvSibl = nn - 1;
+            cur->nxtSibl = nn;
+        }
+        else if (cur->depth < nxt->depth) {
+            nxt->parent = nn - 1;
+            cur->firstChild = nn;
+        }
+        else {
+            unsigned sibling = cur->parent;
+            
+            while (ctx->nodes[sibling].depth > nxt->depth)
+                sibling = ctx->nodes[sibling].parent;
+            nxt->parent = ctx->nodes[sibling].parent;
+            nxt->prvSibl = sibling;
+            ctx->nodes[sibling].nxtSibl = nn;
+        }
+    }
+    return 0;
+}
+
+static rc_t CC report(CCReportInfoBlock const *what, void *Ctx)
+{
+    cc_context_t *ctx = Ctx;
+    rc_t rc = Quitting();
+    
+    if (rc)
+        return rc;
+    
+    if (what->type == ccrpt_Visit)
+        return visiting(what, ctx);
+
+    switch (what->objType) {
+    case kptDatabase:
+        return report_database(what, ctx);
+    case kptTable:
+        return report_table(what, ctx);
+    case kptColumn:
+        return report_column(what, ctx);
+    case kptIndex:
+        return report_index(what, ctx);
+    default:
+        return RC(rcExe, rcTable, rcVisiting, rcParam, rcUnexpected);
+    }
+}
+
+static
+rc_t kdbcc ( const KDBManager *mgr, char const name[], uint32_t mode,
+    KPathType *pathType, bool is_file, node_t nodes[], char names[],
+    INSDC_SRA_platform_id platform )
+{
+    rc_t rc = 0;
+    cc_context_t ctx;
+    char const *objtype;
+
+    uint32_t level = ( mode & 4 ) ? 3 : ( mode & 2 ) ? 1 : 0;
+    if (s_IndexOnly)
+        level |= CC_INDEX_ONLY;
+
+
+    memset(&ctx, 0, sizeof(ctx));
+    ctx.nodes = &nodes[0];
+    ctx.names = &names[0];
+
+    if (KDBManagerExists(mgr, kptDatabase, name))
+        *pathType = kptDatabase;
+    else if (KDBManagerExists(mgr, kptTable, name))
+        *pathType = kptTable;
+    else if (*pathType == kptDatabase || *pathType == kptTable)
+        /* is known already: may be encrypted */ ( void) 0;
+    else
+    {
+        rc = RC(rcExe, rcPath, rcValidating, rcType, rcUnknown);
+        (void)PLOGERR(klogErr, (klogErr, rc, "Object '$(table)' "
+            "has unknown type", "table=%s", name));
+        return rc;
+    }
+
+    if (*pathType == kptDatabase)
+    {
+        const KDatabase *db;
+            
+        objtype = "database";
+        rc = KDBManagerOpenDBRead ( mgr, & db, name );
+        if ( rc == 0 )
+        {
+            rc = KDatabaseConsistencyCheck ( db, 0, level, report, & ctx );
+            if ( rc == 0 )
+            {
+                rc = ctx.rc;
+                if ( s_IndexOnly )
+                    (void)LOGMSG(klogInfo, "Indices: checked");
+            }
+
+            KDatabaseRelease ( db );
+        }
+    }
+    else
+    {
+        const KTable *tbl;
+
+        objtype = "table";
+        rc = KDBManagerOpenTableRead ( mgr, & tbl, name );
+        if ( rc == 0 )
+        {
+            rc = KTableConsistencyCheck ( tbl, 0, level, report, & ctx, platform );
+            if ( rc == 0 )
+                rc = ctx.rc;
+
+            if ( rc == 0 && s_IndexOnly )
+                (void)LOGMSG(klogInfo, "Index: checked");
+
+            KTableRelease ( tbl );
+        }
+    }
+
+    if (rc == 0 && ctx.num_columns == 0 && !s_IndexOnly)
+    {
+        if (is_file)
+        {
+            (void)PLOGMSG(klogWarn, (klogWarn, "Nothing to validate; "
+                                     "the file '$(file)' has no checksums or is truncated.",
+                                     "file=%s", name));
+        }
+        else
+        {
+            (void)PLOGMSG(klogWarn, (klogWarn, "Nothing to validate; "
+                                     "the $(type) '$(file)' has no checksums or is empty.",
+                                     "type=%s,file=%s", objtype, name));
+        }
+    }
+
+    return rc;
+}
+
+static
+rc_t vdbcc ( const VDBManager *mgr, char const name[], uint32_t mode,
+    KPathType *pathType, bool is_file)
+{
+#if 0
+    if ( ( mode & 8) != 0 )
+    {
+        const VTable *tbl;
+        rc_t rc = VDBManagerOpenTableRead(mgr, &tbl, NULL, name);
+        if (rc == 0)
+            rc = VTableConsistencyCheck(tbl, 2);
+        return rc;
+    }
+#endif
+    return 0;
+}
+
+typedef struct ColumnInfo_s {
+    char const *name;
+    union {
+        void     const *vp;
+        char     const *string;
+        bool     const *tf;
+        int8_t   const *i8;
+        uint8_t  const *u8;
+        int16_t  const *i16;
+        uint16_t const *u16;
+        int32_t  const *i32;
+        uint32_t const *u32;
+        int64_t  const *i64;
+        uint64_t const *u64;
+        float    const *f32;
+        double   const *f64;
+    } value;
+    uint32_t idx;
+    uint32_t elem_bits;
+    uint32_t elem_count;
+} ColumnInfo;
+
+static rc_t CC get_sizes_cb(const KDirectory *dir,
+    uint32_t type, const char *name, void *data)
+{
+    struct {
+        unsigned count;
+        size_t size;
+    } *pb = data;
+
+    ++pb->count;    
+    pb->size += strlen(name) + 1;
+    
+    return 0;
+}
+
+static rc_t get_sizes(KDirectory const *dir, unsigned *nobj, size_t *namesz)
+{
+    rc_t rc;
+    struct {
+        unsigned count;
+        size_t size;
+    } pb;
+    
+    memset(&pb, 0, sizeof(pb));
+    rc = KDirectoryVVisit(dir, true, get_sizes_cb, &pb, NULL, NULL);
+    if (rc)
+        memset(&pb, 0, sizeof(pb));
+    *nobj = pb.count;
+    *namesz = pb.size;
+    return rc;
+}
+
+static rc_t EncFileReadAll(const char *name,
+    char *buffer, size_t bsize, size_t *num_read)
+{
+    rc_t rc = 0;
+
+    VFSManager *mgr = NULL;
+    VPath *path = NULL;
+    const KFile *f = NULL;
+
+    rc = VFSManagerMake(&mgr);
+    if (rc != 0) {
+        LOGERR(klogErr, rc, "Failed to VFSManagerMake()");
+    }
+
+    if (rc == 0) {
+        rc = VPathMake(&path, name);
+        if (rc != 0) {
+            (void)PLOGERR(klogErr, (klogErr, rc,
+                "Failed to VPathMake($(name))", "name=%s", name));
+        }
+    }
+
+    if (rc == 0) {
+        rc = VFSManagerOpenFileReadDecrypt(mgr, &f, path);
+        if (rc != 0) {
+            (void)PLOGERR(klogErr, (klogErr, rc,
+                "Failed to VFSManagerOpenFileReadDecrypt($(name))",
+                "name=%s", name));
+        }
+    }
+
+    if (rc == 0) {
+        rc = KFileReadAll(f, 0, buffer, bsize, num_read);
+        if (rc != 0) {
+            (void)PLOGERR(klogErr, (klogErr, rc,
+                "Failed to KFileReadAll($(name))", "name=%s", name));
+        }
+    }
+
+    KFileRelease(f);
+    VPathRelease(path);
+    VFSManagerRelease(mgr);
+
+    return rc;
+}
+
+
+#if 0
+static rc_t verify_encryption(const KDirectory *dir, const char *name,
+    bool *enc, bool *sra)
+{
+    rc_t rc = 0;
+    const KFile *f = NULL;
+    char buffer[24];
+    size_t num_read = ~0;
+
+    assert(enc && sra);
+    *enc = false;
+    *sra = true;
+
+    rc = KDirectoryOpenFileRead(dir, &f, name);
+    if (rc == 0) {
+        rc = KFileReadAll(f, 0, &buffer, sizeof buffer, &num_read);
+    }
+
+    if (rc == 0) {
+        size_t sz = num_read < 8 ? num_read : 8;
+        assert(num_read <= sizeof buffer);
+        rc = KFileIsEnc(buffer, sz);
+        if (rc == 0)
+        {
+            (void)PLOGMSG(klogInfo, (klogInfo, "File '$(f)' is encrypted",
+                "f=%s", name));
+            *enc = true;
+            rc = KEncFileValidate(f);
+            if (rc != 0) {
+                (void)PLOGERR(klogErr, (klogErr, rc, "Failure of encryption "
+                    "validation of file '$(name)'", "name=%s", name));
+            }
+            else {
+                (void)PLOGMSG(klogInfo, (klogInfo, "File '$(f)': encryption OK",
+                    "f=%s", name));
+                rc = EncFileReadAll(name, buffer, sizeof buffer, &num_read);
+            }
+        }
+        else {
+            rc = 0;
+            (void)PLOGMSG(klogInfo, (klogInfo, "File '$(f)' is not encrypted",
+                "f=%s", name));
+        }
+    }
+
+    if (rc == 0) {
+        rc = KFileIsSRA(buffer, num_read);
+        if (rc == 0) {
+            *sra = true;
+        }
+        else if (rc
+            == SILENT_RC(rcFS, rcFile, rcIdentifying, rcBuffer, rcWrongType))
+        {
+            rc = 0;
+            *sra = false;
+        }
+        else {
+            (void)PLOGERR(klogErr, (klogErr, rc,
+                "Failed to KFileIsSRA($(name))", "name=%s", name));
+        }
+    }
+
+    KFileRelease(f);
+
+    return rc;
+}
+#endif
+
+static rc_t init_dbcc(KDirectory const *dir, char const name[], bool is_file,
+    node_t **nodes, char **names, KPathType *pathType)
+{
+    KDirectory const *obj;
+    unsigned nobj;
+    size_t namesz;
+    rc_t rc = 0;
+
+    assert(pathType);
+
+    if (is_file) {
+        rc = KDirectoryOpenSraArchiveRead_silent(dir, &obj, false, name);
+        if (rc != 0)
+        {   rc = KDirectoryOpenTarArchiveRead_silent(dir, &obj, false, name); }
+        if (rc != 0) {
+            const VDBManager *mgr = NULL;
+            const VTable *tbl = NULL;
+            VSchema *sra_schema = NULL;
+            rc = VDBManagerMakeRead(&mgr, dir);
+            if (rc != 0)
+            {   return rc; }
+            for ( ; rc == 0; ) {
+                rc = VDBManagerOpenTableRead(mgr, &tbl, sra_schema, name);
+                VSchemaRelease(sra_schema);
+                if (rc == 0) {
+                    const KTable *ktbl = NULL;
+                    rc = VTableOpenKTableRead(tbl, &ktbl);
+                    if (rc == 0)
+                    {   rc = KTableOpenDirectoryRead(ktbl, &obj); }
+                    KTableRelease(ktbl);
+                    *pathType = kptTable;
+                    break;
+                }
+                else if (GetRCState(rc) == rcNotFound
+                    && GetRCObject(rc) == rcSchema && sra_schema == NULL)
+                {
+                     rc = VDBManagerMakeSRASchema(mgr, &sra_schema);
+                }
+                else {
+                    const VDatabase *db = NULL;
+                    const KDatabase *kdb = NULL;
+                    rc = VDBManagerOpenDBRead(mgr, &db, NULL, name);
+                    if (rc == 0)
+                    {   rc = VDatabaseOpenKDatabaseRead(db, &kdb); }
+                    if (rc == 0)
+                    {   rc = KDatabaseOpenDirectoryRead(kdb, &obj); }
+                    if (rc == 0)
+                    {   *pathType = kptDatabase; }
+                    KDatabaseRelease(kdb);
+                    VDatabaseRelease(db);
+                    break;
+                }
+            }
+            VTableRelease(tbl);
+            VDBManagerRelease(mgr);
+        }
+    }
+    else {
+        rc = KDirectoryOpenDirRead(dir, &obj, false, name);
+    }
+    if (rc)
+        return rc;
+    rc = get_sizes(obj, &nobj, &namesz);
+    KDirectoryRelease(obj);
+    if (rc) {
+        *nodes = NULL;
+        *names = NULL;
+    }
+    else {
+        *nodes = malloc(nobj * sizeof(**nodes) + namesz);
+        if (nodes)
+            *names = (char *)&(*nodes)[nobj];
+        else
+            rc = RC(rcExe, rcSelf, rcConstructing, rcMemory, rcExhausted);
+    }
+    return rc;
+}
+
+static rc_t get_schema_info(KMetadata const *meta, char buffer[], size_t bsz,
+    char **vers)
+{
+    KMDataNode const *node;
+    rc_t rc = KMetadataOpenNodeRead(meta, &node, "schema");
+    
+    if (rc == 0) {
+        size_t sz;
+        
+        rc = KMDataNodeReadAttr(node, "name", buffer, bsz, &sz);
+        if (rc == 0) {
+            buffer[sz] = '\0';
+            *vers = &buffer[sz];
+            while (sz) {
+                --sz;
+                if (buffer[sz] == '#') {
+                    buffer[sz] = '\0';
+                    *vers = &buffer[sz + 1];
+                    break;
+                }
+            }
+        }
+    }
+    return rc;
+}
+
+static rc_t get_tbl_schema_info(VTable const *tbl, char buffer[], size_t bsz,
+    char **vers)
+{
+    KMetadata const *meta;
+    rc_t rc = VTableOpenMetadataRead(tbl, &meta);
+    
+    *(*vers = &buffer[0]) = '\0';
+    if (rc == 0) rc = get_schema_info(meta, buffer, bsz, vers);
+    return 0;
+}
+
+static rc_t get_db_schema_info(VDatabase const *db, char buffer[], size_t bsz,
+    char **vers)
+{
+    KMetadata const *meta;
+    rc_t rc = VDatabaseOpenMetadataRead(db, &meta);
+    
+    *(*vers = &buffer[0]) = '\0';
+    if (rc == 0) rc = get_schema_info(meta, buffer, bsz, vers);
+    return rc;
+}
+
+static rc_t sra_dbcc_454(VTable const *tbl, char const name[])
+{
+    /* TODO: complete this */
+    return 0;
+}
+
+static rc_t sra_dbcc_fastq(VTable const *tbl, char const name[])
+{
+    static char const *const cn_FastQ[] = {
+        "READ", "QUALITY", "SPOT_LEN", "READ_START", "READ_LEN", "READ_TYPE"
+    };
+    
+    VCursor const *curs;
+    rc_t rc = VTableCreateCursorRead(tbl, &curs);
+    
+    if (rc == 0) {
+        unsigned const n = sizeof(cn_FastQ)/sizeof(cn_FastQ[0]);
+        ColumnInfo cols[sizeof(cn_FastQ)/sizeof(cn_FastQ[0])];
+        unsigned i;
+
+        memset(cols, 0, sizeof(cols));
+        for (i = 0; i < n; ++i) {
+            cols[i].name = cn_FastQ[i];
+            VCursorAddColumn(curs, &cols[i].idx, cols[i].name);
+        }
+        rc = VCursorOpen(curs);
+        if (rc == 0) {
+            rc = VCursorOpenRow(curs);
+            for (i = 0; i < n && rc == 0; ++i) {
+                VCursorCellData(curs, cols[i].idx, &cols[i].elem_bits,
+                    &cols[i].value.vp, NULL, &cols[i].elem_count);
+            }
+            if (   cols[0].idx == 0 || cols[0].elem_bits == 0
+                                                    || cols[0].value.vp == NULL
+                || cols[1].idx == 0 || cols[1].elem_bits == 0
+                                                    || cols[1].value.vp == NULL)
+            {
+                rc = RC(rcExe, rcTable, rcValidating, rcColumn, rcNotFound);
+            }
+            else if (cols[2].idx == 0 || cols[2].elem_bits == 0
+                                                    || cols[2].value.vp == NULL)
+            {
+                (void)PLOGERR(klogWarn, (klogWarn,
+                    RC(rcExe, rcTable, rcValidating, rcColumn, rcNotFound),
+                    "Table '$(name)' is usable for fasta only; no quality data",
+                    "name=%s", name));
+            }
+        }
+        VCursorRelease(curs);
+    }
+    if (rc) {
+        (void)PLOGERR(klogErr, (klogErr, rc,
+            "Table '$(name)' is damaged beyond any use", "name=%s", name));
+    }
+    return rc;
+}
+
+static rc_t VTable_get_platform(VTable const *tbl,
+    INSDC_SRA_platform_id *rslt)
+{
+    rc_t rc;
+    VCursor const *curs;
+    INSDC_SRA_platform_id platform = -1;
+    
+    rc = VTableCreateCursorRead(tbl, &curs);
+    if (rc == 0) {
+        uint32_t cid;
+        
+        rc = VCursorAddColumn(curs, &cid, "("sra_platform_id_t")PLATFORM");
+        if (rc == 0) {
+            rc = VCursorOpen(curs);
+            if (rc == 0) {
+                uint32_t ebits;
+                void const *data;
+                uint32_t boff;
+                uint32_t ecnt;
+                
+                rc = VCursorCellDataDirect(curs, 1, cid,
+                    &ebits, &data, &boff, &ecnt);
+                if (rc == 0) {
+                    if (ebits == sizeof(platform) * 8 && boff == 0 && ecnt == 1)
+                        platform = ((INSDC_SRA_platform_id *)data)[0];
+                    else
+                        rc =
+                            RC(rcExe, rcTable, rcReading, rcType, rcUnexpected);
+                }
+            }
+        }
+        else
+            rc = 0;
+        VCursorRelease(curs);
+    }
+    rslt[0] = platform;
+    return rc;
+}
+
+static rc_t verify_table(VTable const *tbl, char const name[])
+{
+    char schemaName[1024];
+    char *schemaVers = NULL;
+    rc_t rc = 0;
+    
+    get_tbl_schema_info(tbl, schemaName, sizeof(schemaName), &schemaVers);
+    
+    if (schemaName[0] == '\0' || strncmp(schemaName, "NCBI:SRA:", 9) == 0) {
+        /* SRA or legacy SRA */
+        INSDC_SRA_platform_id platform;
+        
+        rc = VTable_get_platform(tbl, &platform);
+        if (rc == 0) {
+            if (platform == (INSDC_SRA_platform_id)-1) {
+                (void)PLOGMSG(klogWarn, (klogWarn, "Couldn't determine "
+                    "SRA Platform; type of table '$(name)' is indeterminate.",
+                    "name=%s", name));
+            }
+            rc = sra_dbcc_fastq(tbl, name);
+            if (rc == 0 && platform == SRA_PLATFORM_454) {
+                rc = sra_dbcc_454(tbl, name);
+            }
+        }
+        else {
+            (void)PLOGERR(klogErr, (klogErr, rc,
+                "Failed to read table '$(name)'", "name=%s", name));
+        }
+    }
+    return rc;
+}
+
+static rc_t verify_mgr_table(VDBManager const *mgr, char const name[])
+{
+    VTable const *tbl;
+    VSchema *sra_schema = NULL;
+    
+    for ( ; ; ) {
+        rc_t rc = VDBManagerOpenTableRead(mgr, &tbl, sra_schema, name);
+        VSchemaRelease(sra_schema);
+        if (rc == 0) {
+            rc = verify_table(tbl, name);
+            VTableRelease(tbl);
+            return rc;
+        }
+        else if (GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcSchema
+            && sra_schema == NULL)
+        {
+            rc = VDBManagerMakeSRASchema(mgr, &sra_schema);
+            if (rc) {
+                (void)PLOGERR(klogErr, (klogErr, rc,
+                    "Failed to open table '$(name)'", "name=%s", name));
+                return rc;
+            }
+        }
+        else {
+            (void)PLOGERR(klogErr, (klogErr, rc,
+                "Failed to open table '$(name)'", "name=%s", name));
+            return rc;
+        }
+    }
+}
+
+#if 0
+static rc_t verify_db_table(VDatabase const *db, char const name[])
+{
+    VTable const *tbl;
+    rc_t rc = VDatabaseOpenTableRead(db, &tbl, name);
+    
+    if (rc == 0) {
+        rc = verify_table(tbl, name);
+        VTableRelease(tbl);
+    }
+    else {
+        (void)PLOGERR(klogErr, (klogErr, rc,
+            "Failed to open table '$(name)'", "name=%s", name));
+    }
+    return rc;
+}
+
+static rc_t align_dbcc_primary_alignment(VTable const *tbl, char const name[])
+{
+    VCursor const *curs;
+    rc_t rc = VTableCreateCursorRead(tbl, &curs);
+    
+    if (rc == 0) {
+        static char const *const cn_SAM[] = {
+            "SEQ_NAME",
+            "SAM_FLAGS",
+            "REF_NAME",
+            "REF_POS",
+            "MAPQ",
+            "HAS_MISMATCH",
+            "HAS_REF_OFFSET",
+            "REF_OFFSET",
+            "MATE_REF_NAME",
+            "MATE_REF_POS",
+            "TEMPLATE_LEN",
+            "READ",
+            "QUALITY"
+        };
+        unsigned const n = sizeof(cn_SAM)/sizeof(cn_SAM[0]);
+        ColumnInfo cols[sizeof(cn_SAM)/sizeof(cn_SAM[0])];
+        unsigned i;
+        
+        memset(cols, 0, sizeof(cols));
+        for (i = 0; i < n; ++i) {
+            cols[i].name = cn_SAM[i];
+            VCursorAddColumn(curs, &cols[i].idx, cols[i].name);
+        }
+        rc = VCursorOpen(curs);
+        if (rc == 0) {
+            rc = VCursorOpenRow(curs);
+            for (i = 0; i < n && rc == 0; ++i) {
+                VCursorCellData(curs, cols[i].idx, &cols[i].elem_bits,
+                    &cols[i].value.vp, NULL, &cols[i].elem_count);
+            }
+            for (i = 0; i < n && rc == 0; ++i) {
+                if (cols[i].idx == 0 || cols[i].elem_bits == 0) {
+                    (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(name)' "
+                        "could not be used to generate SAM", "name=%s", name));
+                    break;
+                }
+            }
+        }
+        VCursorRelease(curs);
+    }
+    if (rc) {
+        (void)PLOGERR(klogErr, (klogErr, rc,
+            "Database '$(name)' is damaged beyond any use", "name=%s", name));
+    }
+    return rc;
+}
+#endif
+
+typedef struct id_pair_s {
+    int64_t first;
+    int64_t second;
+} id_pair_t;
+static int CC id_pair_cmp(void const *A, void const *B, void *ignored)
+{
+    id_pair_t const *a = A;
+    id_pair_t const *b = B;
+
+    return a->first < b->first
+        ? -1
+        : a->first == b->first
+            ? a->second < b->second
+                ? -1
+                : a->second == b->second ? 0 : 1
+            : 1;
+}
+
+static rc_t ric_align_ref_and_align(char const dbname[],
+                                    VTable const *ref,
+                                    VTable const *align,
+                                    int which)
+{
+    char const *const id_col_name = which == 0 ? "PRIMARY_ALIGNMENT_IDS"
+                                  : which == 1 ? "SECONDARY_ALIGNMENT_IDS"
+                                  : which == 2 ? "EVIDENCE_ALIGNMENT_IDS"
+                                  : NULL;
+    rc_t rc;
+    VCursor const *curs = NULL;
+    ColumnInfo ci;
+    int64_t startId;
+    uint64_t count;
+    
+    rc = VTableCreateCursorRead(align, &curs);
+    if (rc == 0) {
+        rc = VCursorAddColumn(curs, &ci.idx, "REF_ID");
+        if (rc == 0)
+            rc = VCursorOpen(curs);
+        if (rc == 0)
+            rc = VCursorIdRange(curs, ci.idx, &startId, &count);
+    }
+    if (rc) {
+        (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+            "alignment table can not be read", "name=%s", dbname));
+    }
+    else {
+        id_pair_t *const id_pair = malloc(sizeof(id_pair_t) * count);
+        
+        if (id_pair) {
+            uint64_t i;
+            uint64_t j;
+            
+            for (j = i = 0; i < count && rc == 0; ++i) {
+                int64_t const row = startId + i;
+                
+                rc = VCursorCellDataDirect(curs, row, ci.idx, &ci.elem_bits, &ci.value.vp, NULL, &ci.elem_count);
+                if (rc == 0) {
+                    if (ci.elem_count != 1) {
+                        rc = RC(rcExe, rcDatabase, rcValidating, rcData, rcUnexpected);
+                        (void)PLOGERR(klogErr, (klogErr, rc,
+                            "Database '$(name)': failed referential integrity "
+                            "check", "name=%s", dbname));
+                        break;
+                    }
+                    else {
+                        id_pair[j].second = row;
+                        id_pair[j].first = ci.value.i64[0];
+                        ++j;
+                    }
+                }
+                else if (GetRCObject(rc) == rcRow
+                    && GetRCState(rc) == rcNotFound)
+                {   rc = 0; }
+            }
+            VCursorRelease(curs); curs = NULL;
+            if (rc == 0) {
+                bool ooo_warned = false;
+                bool failed = false;
+                
+                ksort(id_pair, count, sizeof(id_pair_t), id_pair_cmp, NULL);
+                
+                rc = VTableCreateCursorRead(ref, &curs);
+                if (rc == 0)
+                    rc = VCursorAddColumn(curs, &ci.idx, id_col_name);
+                if (rc == 0)
+                    rc = VCursorOpen(curs);
+                if (rc == 0)
+                    rc = VCursorIdRange(curs, ci.idx, &startId, &count);
+                if (rc == 0) {
+                    for (i = j = 0; rc == 0 && i < count; ++i) {
+                        int64_t const row = startId + i;
+                        
+                        rc = VCursorCellDataDirect(curs, row, ci.idx,
+                            &ci.elem_bits, &ci.value.vp, NULL, &ci.elem_count);
+                        if (rc == 0) {
+                            unsigned k;
+                            int64_t prvId = ci.value.i64[0];
+                            
+                            for (k = 0; rc == 0 && k < ci.elem_count;
+                                ++k, ++j)
+                            {
+                                int64_t const alignId = ci.value.i64[k];
+                                
+                                if (!ooo_warned && prvId > alignId) {
+                                    (void)PLOGMSG(klogWarn, (klogWarn,
+                                        "Database '$(name)': "
+                                        "column '$(idcol)' is not ordered",
+                                        "name=%s,idcol=%s",
+                                        dbname, id_col_name));
+                                    ooo_warned = true;
+                                }
+                                if (id_pair[j].first != row) {
+                                    if (!failed) {
+                                        rc = RC(rcExe, rcDatabase, rcValidating,
+                                            rcData, rcInconsistent);
+                                        (void)PLOGERR(klogErr, (klogErr, rc,
+ "Database '$(name)': column '$(idcol)' failed referential integrity check",
+ "name=%s,idcol=%s", dbname, id_col_name));
+                                    }
+                                    failed = true;
+                                }
+                                else if (id_pair[j].second != alignId) {
+                                    if (!ooo_warned) {
+                                        (void)PLOGMSG(klogWarn, (klogWarn,
+ "Database '$(name)': column '$(idcol)' might fail referential integrity check",
+ "name=%s,idcol=%s", dbname, id_col_name));
+                                    }
+                                }
+                                prvId = alignId;
+                            }
+                        }
+                        else if (GetRCObject(rc) == rcRow
+                            && GetRCState(rc) == rcNotFound)
+                        {   rc = 0; }
+                    }
+                    if (!failed && i < count) {
+                        rc = RC(rcExe, rcDatabase, rcValidating,
+                            rcData, rcInconsistent);
+                        (void)PLOGERR(klogErr, (klogErr, rc,
+                            "Database '$(name)': column '$(idcol)' failed "
+                            "referential integrity check",
+                            "name=%s,idcol=%s", dbname, id_col_name));
+                    }
+                }
+                else
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                        "reference table can not be read", "name=%s", dbname));
+            }
+            free(id_pair);
+            VCursorRelease(curs);
+        }
+        else {
+            rc = RC(rcExe, rcDatabase, rcValidating, rcMemory, rcExhausted);
+            (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                "referential integrity could not be checked",
+                "name=%s", dbname));
+        }
+    }
+    return rc;
+}
+
+static rc_t ric_align_seq_and_pri(char const dbname[],
+                                  VTable const *seq,
+                                  VTable const *pri)
+{
+    rc_t rc;
+    VCursor const *curs = NULL;
+    ColumnInfo ci;
+    int64_t startId;
+    uint64_t count;
+    
+    rc = VTableCreateCursorRead(pri, &curs);
+    if (rc == 0) {
+        rc = VCursorAddColumn(curs, &ci.idx, "SEQ_SPOT_ID");
+        if (rc == 0)
+            rc = VCursorOpen(curs);
+        if (rc == 0)
+            rc = VCursorIdRange(curs, ci.idx, &startId, &count);
+    }
+    if (rc) {
+        (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+            "alignment table can not be read", "name=%s", dbname));
+    }
+    else {
+        id_pair_t *const id_pair = malloc(sizeof(id_pair_t) * count);
+
+        if (id_pair) {
+            uint64_t i;
+            uint64_t j;
+            
+            for (j = i = 0; i < count && rc == 0; ++i) {
+                int64_t const row = startId + i;
+                
+                rc = VCursorCellDataDirect(curs, row, ci.idx,
+                    &ci.elem_bits, &ci.value.vp, NULL, &ci.elem_count);
+                if (rc == 0) {
+                    if (ci.elem_count != 1) {
+                        rc = RC(rcExe, rcDatabase, rcValidating,
+                            rcData, rcUnexpected);
+                        (void)PLOGERR(klogErr, (klogErr, rc,
+                            "Database '$(name)': failed "
+                            "referential integrity check", "name=%s", dbname));
+                        break;
+                    }
+                    else {
+                        id_pair[j].second = row;
+                        id_pair[j].first = ci.value.i64[0];
+                        ++j;
+                    }
+                }
+                else if (GetRCObject(rc) == rcRow
+                    && GetRCState(rc) == rcNotFound)
+                {   rc = 0; }
+            }
+            VCursorRelease(curs); curs = NULL;
+            if (rc == 0) {
+                ksort(id_pair, count, sizeof(id_pair_t), id_pair_cmp, NULL);
+                
+                rc = VTableCreateCursorRead(seq, &curs);
+                if (rc == 0)
+                    rc = VCursorAddColumn(curs, &ci.idx,
+                        "PRIMARY_ALIGNMENT_ID");
+                if (rc == 0)
+                    rc = VCursorOpen(curs);
+                if (rc == 0) {
+                    for (i = 0; rc == 0 && i < count; ++i) {
+                        int64_t const row = id_pair[i].first;
+                        int64_t const alignId = id_pair[i].second;
+                        
+                        rc = VCursorCellDataDirect(curs, row, ci.idx,
+                            &ci.elem_bits, &ci.value.vp, NULL, &ci.elem_count);
+                        if (rc == 0) {
+                            bool found = false;
+                            
+                            for (j = 0; j < ci.elem_count; ++j)
+                                found |= (alignId == ci.value.i64[j]);
+                            
+                            if (!found) {
+                                rc = RC(rcExe, rcDatabase, rcValidating,
+                                    rcData, rcInconsistent);
+                                (void)PLOGERR(klogErr, (klogErr, rc,
+  "Database '$(name)': column 'SEQ_SPOT_ID' failed referential integrity check",
+  "name=%s", dbname));
+                            }
+                        }
+                        else if (GetRCObject(rc) == rcRow
+                            && GetRCState(rc) == rcNotFound)
+                        {
+                            rc = RC(rcExe, rcDatabase, rcValidating,
+                                rcData, rcInconsistent);
+                            (void)PLOGERR(klogErr, (klogErr, rc,
+  "Database '$(name)': column 'SEQ_SPOT_ID' failed referential integrity check",
+  "name=%s", dbname));
+                        }
+                        else {
+                            (void)PLOGERR(klogErr, (klogErr, rc,
+  "Database '$(name)': sequence table can not be read", "name=%s", dbname));
+                        }
+                    }
+                }
+                else
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                        "sequence table can not be read", "name=%s", dbname));
+            }
+            free(id_pair);
+        }
+        else {
+            rc = RC(rcExe, rcDatabase, rcValidating, rcMemory, rcExhausted);
+            (void)PLOGERR(klogErr, (klogErr, rc, "Database '$(name)': "
+                "referential integrity could not be checked",
+                "name=%s", dbname));
+        }
+        VCursorRelease(curs);
+    }
+    return rc;
+}
+
+/* database referential integrity check for alignment database */
+static rc_t dbric_align(char const dbname[],
+                        VTable const *pri,
+                        VTable const *seq,
+                        VTable const *ref)
+{
+    rc_t rc = 0;
+    
+    if ((rc == 0 || exhaustive) && (pri != NULL && seq != NULL)) {
+        rc_t rc2 = ric_align_seq_and_pri(dbname, seq, pri);
+        
+        if (rc2 == 0) {
+            (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(dbname)': "
+               "SEQUENCE.PRIMARY_ALIGNMENT_ID <-> PRIMARY_ALIGNMENT.SEQ_SPOT_ID"
+               " referential integrity ok", "dbname=%s", dbname));
+        }
+        if (rc == 0) {
+            rc = rc2;
+        }
+    }
+    if ((rc == 0 || exhaustive) && (pri != NULL && ref != NULL)) {
+        rc_t rc2 = ric_align_ref_and_align(dbname, ref, pri, 0);
+        
+        if (rc2 == 0) {
+            (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(dbname)': "
+                "REFERENCE.PRIMARY_ALIGNMENT_IDS <-> PRIMARY_ALIGNMENT.REF_ID "
+                "referential integrity ok", "dbname=%s", dbname));
+        }
+        if (rc == 0) {
+            rc = rc2;
+        }
+    }
+    return rc;
+}
+
+
+static rc_t verify_database_align(VDatabase const *db,
+    char const name[], node_t const nodes[], char const names[])
+{
+    rc_t rc = 0;
+    unsigned tables = 0;
+    node_t const *tbl = &nodes[nodes[0].firstChild];
+    enum table_bits {
+        tbEvidenceInterval   = ( 1u << 0 ),
+        tbEvidenceAlignment  = ( 1u << 1 ),
+        tbPrimaryAlignment   = ( 1u << 2 ),
+        tbReference          = ( 1u << 3 ),
+        tbSequence           = ( 1u << 4 ),
+        tbSecondaryAlignment = ( 1u << 5 )
+    };
+    
+    if (nodes[0].firstChild) {
+        for ( ; ; ) {
+            char const *tname = &names[tbl->name];
+            unsigned this_table = 0;
+            
+            if (tbl->objType == kptTable) {
+                switch (tname[0]) {
+                case 'E':
+                    if (strcmp(tname, "EVIDENCE_INTERVAL") == 0)
+                        this_table |= tbEvidenceInterval;
+                    else if (strcmp(tname, "EVIDENCE_ALIGNMENT") == 0)
+                        this_table |= tbEvidenceAlignment;
+                    break;
+                case 'P':
+                    if (strcmp(tname, "PRIMARY_ALIGNMENT") == 0)
+                        this_table |= tbPrimaryAlignment;
+                    break;
+                case 'R':
+                    if (strcmp(tname, "REFERENCE") == 0)
+                        this_table |= tbReference;
+                    break;
+                case 'S':
+                    if (strcmp(tname, "SEQUENCE") == 0)
+                        this_table |= tbSequence;
+                    else if (strcmp(tname, "SECONDARY_ALIGNMENT") == 0)
+                        this_table |= tbSecondaryAlignment;
+                    break;
+                }
+                if (this_table == 0) {
+                    (void)PLOGERR(klogWarn, (klogWarn, RC(
+                        rcExe, rcDatabase, rcValidating, rcTable, rcUnexpected),
+                      "Database '$(name)' contains unexpected table '$(table)'",
+                      "name=%s,table=%s", name, tname));
+                }
+                tables |= this_table;
+            }
+            else {
+                (void)PLOGERR(klogWarn, (klogWarn, RC(
+                    rcExe, rcDatabase, rcValidating, rcType, rcUnexpected),
+                    "Database '$(name)' contains unexpected object '$(obj)'",
+                    "name=%s,obj=%s", name, tname));
+            }
+            if (tbl->nxtSibl > 0)
+                tbl = &nodes[tbl->nxtSibl];
+            else
+                break;
+        }
+    }
+    if (tables == tbSequence) {
+        /* sequence data only */
+        (void)PLOGMSG(klogInfo, (klogInfo, "Database '$(name)' "
+            "contains only unaligned reads", "name=%s", name));
+    }
+    else if (   (tables & tbReference) == 0
+             || (tables & tbPrimaryAlignment) == 0)
+    {
+        /* missing reference or primary alignment */
+        rc = RC(rcExe, rcDatabase, rcValidating, rcDatabase, rcIncomplete);
+        (void)PLOGERR(klogWarn, (klogWarn, rc,
+            "Database '$(name)' does not contain all required tables",
+            "name=%s", name));
+    }
+    else if (   ((tables & tbEvidenceAlignment) != 0)
+             != ((tables & tbEvidenceInterval ) != 0))
+    {
+        /* both must be present or both must be absent */
+        rc = RC(rcExe, rcDatabase, rcValidating, rcDatabase, rcIncomplete);
+        (void)PLOGERR(klogWarn, (klogWarn, rc,
+            "Database '$(name)' does not contain all required tables",
+            "name=%s", name));
+    }
+    while (ref_int_check) {
+        VTable const *pri = NULL;
+        VTable const *seq = NULL;
+        VTable const *ref = NULL;
+        
+        if ((tables & tbPrimaryAlignment) != 0) {
+            rc = VDatabaseOpenTableRead(db, &pri, "PRIMARY_ALIGNMENT");
+            if (rc) break;
+        }
+        if ((tables & tbSequence) != 0) {
+            rc = VDatabaseOpenTableRead(db, &seq, "SEQUENCE");
+            if (rc) break;
+        }
+        if ((tables & tbReference) != 0) {
+            rc = VDatabaseOpenTableRead(db, &ref, "REFERENCE");
+            if (rc) break;
+        }
+        rc = dbric_align(name, pri, seq, ref);
+        break;
+    }
+    return rc;    
+}
+
+static rc_t verify_database(VDatabase const *db,
+    char const name[], node_t const nodes[], char const names[])
+{
+    char schemaName[1024];
+    char *schemaVers = NULL;
+    rc_t rc;
+    
+    rc = get_db_schema_info(db, schemaName, sizeof(schemaName), &schemaVers);
+    if (rc) {
+        (void)PLOGERR(klogErr, (klogErr, rc,
+            "Failed to find database schema for '$(name)'", "name=%s", name));
+    }
+    else if (strncmp(schemaName, "NCBI:var:db:", 12) == 0) {
+        /* TODO: verify NCBI:var:db:* */
+    }
+    else if (strncmp(schemaName, "NCBI:WGS:db:", 12) == 0) {
+        /* TODO: verify NCBI:WGS:db:* */
+    }
+    else if (strncmp(schemaName, "NCBI:align:db:", 14) == 0) {
+        rc = verify_database_align(db, name, nodes, names);
+    }
+    else if (strcmp(schemaName, "NCBI:SRA:PacBio:smrt:db") == 0) {
+        /* TODO: verify NCBI:SRA:PacBio:smrt:db */
+    }
+    else {
+        (void)PLOGERR(klogWarn, (klogWarn,
+            RC(rcExe, rcDatabase, rcValidating, rcType, rcUnrecognized),
+            "Database '$(name)' has unrecognized type '$(type)'",
+            "name=%s,type=%s", name, schemaName));
+    }
+    return rc;
+}
+
+static rc_t verify_mgr_database(VDBManager const *mgr,
+    char const name[], node_t const nodes[], char const names[])
+{
+    VDatabase const *child;
+    rc_t rc = VDBManagerOpenDBRead(mgr, &child, NULL, name);
+    
+    if (rc == 0) {
+        rc = verify_database(child, name, nodes, names);
+        VDatabaseRelease(child);
+    }
+
+    return rc;
+}
+
+static rc_t sra_dbcc(const VDBManager *mgr,
+    char const name[], node_t const nodes[], char const names[])
+{
+    rc_t rc;
+
+    if (nodes[0].objType == kptDatabase)
+        rc = verify_mgr_database(mgr, name, nodes, names);
+    else
+        rc = verify_mgr_table(mgr, name);
+    
+    return rc;
+}
+
+static
+rc_t get_platform(const VDBManager *mgr,
+    const VTable *aTbl, char const name[],
+    INSDC_SRA_platform_id *platform)
+{
+    rc_t rc = 0;
+    const VTable *tbl = aTbl;
+    assert(name && platform);
+    if (tbl == NULL) {
+        VSchema *sra_schema = NULL;
+        for ( ; rc == 0; ) {
+            rc = VDBManagerOpenTableRead(mgr, &tbl, sra_schema, name);
+            VSchemaRelease(sra_schema);
+            if (rc == 0) {
+                rc = VTable_get_platform(tbl, platform);
+                break;
+            }
+            else if (GetRCState(rc) == rcNotFound && GetRCObject(rc) == rcSchema
+                && sra_schema == NULL)
+            {
+                rc = VDBManagerMakeSRASchema(mgr, &sra_schema);
+            }
+        }
+    }
+
+    if (aTbl == NULL)
+        VTableRelease(tbl);
+
+    return rc;
+}
+
+typedef struct vdb_validate_params vdb_validate_params;
+struct vdb_validate_params
+{
+    const KDirectory *wd;
+    const KDBManager *kmgr;
+    const VDBManager *vmgr;
+
+    bool md5_chk;
+    bool md5_chk_explicit;
+    bool blob_crc;
+    bool index_chk;
+};
+
+static
+rc_t dbcc ( const vdb_validate_params *pb, const char *path, bool is_file )
+{
+    char *names;
+    KPathType pathType;
+    node_t *nodes = NULL;
+    const char *obj_type, *obj_name;
+
+    rc_t rc = init_dbcc ( pb -> wd, path, is_file, & nodes, & names, & pathType );
+    if ( rc == 0 )
+    {
+        /* construct mode */
+        uint32_t mode = ( pb -> md5_chk ? 1 : 0 )
+                      | ( pb -> blob_crc ? 2 : 0 )
+                      | ( pb -> index_chk ? 4 : 0 )
+                      ;
+
+        INSDC_SRA_platform_id platform = SRA_PLATFORM_UNDEFINED;
+        get_platform ( pb -> vmgr, NULL, path, & platform );
+
+        /* check as kdb object */
+        rc = kdbcc ( pb -> kmgr, path, mode, & pathType, is_file, nodes, names, platform );
+        if ( rc == 0 )
+            rc = vdbcc ( pb -> vmgr, path, mode, & pathType, is_file );
+        if ( rc == 0 )
+            rc = sra_dbcc ( pb -> vmgr, path, nodes, names );
+    }
+
+    obj_type = ( pathType == kptDatabase ) ? "Database" : "Table";
+    obj_name = strrchr ( path, '/' );
+    if ( obj_name ++ == NULL )
+        obj_name = path;
+
+    if ( rc != 0 )
+    {
+        PLOGERR ( klogErr, ( klogErr, rc,
+                             "$(objType) '$(objName)' check failed"
+                             , "objType=%s,objName=%s"
+                             , obj_type, obj_name ) );
+    }
+    else
+    {
+        PLOGMSG ( klogInfo, ( klogInfo,
+                              "$(objType) '$(objName)' is consistent"
+                             , "objType=%s,objName=%s"
+                             , obj_type, obj_name ) );
+    }
+
+    free ( nodes );
+    return rc;
+}
+
+static
+const char *generate_relpath ( const vdb_validate_params *pb, const KDirectory *dir,
+    char *buffer, size_t bsize, const char *path )
+{
+    if ( dir != pb -> wd )
+    {
+        char full [ 4096 ];
+        rc_t rc = KDirectoryResolvePath ( dir, true, full, sizeof full, path );
+        if ( rc == 0 )
+        {
+            rc = KDirectoryResolvePath ( pb -> wd, false, buffer, bsize, full );
+            if ( rc == 0 )
+                path = buffer;
+        }
+    }
+
+    return path;
+}
+
+static
+rc_t vdb_validate_file ( const vdb_validate_params *pb, const KDirectory *dir, const char *path )
+{
+    char buffer [ 4096 ];
+    const char *relpath = generate_relpath ( pb, dir, buffer, sizeof buffer, path );
+
+    const KFile *f;
+    rc_t rc = KDirectoryOpenFileRead ( dir, & f, path );
+    if ( rc != 0 )
+        PLOGERR ( klogErr, ( klogErr, rc, "File '$(fname)' could not be opened", "fname=%s", relpath ) );
+    else
+    {
+        bool is_sra = false;
+        enum EEncrypted {
+            eNo,
+            eEncrypted,
+            eWGA
+        } encrypted = eNo;
+
+        size_t num_read;
+        char buffer [ 4096 ];
+        rc = KFileReadAll ( f, 0, buffer, sizeof buffer, & num_read );
+        if ( rc != 0 )
+            PLOGERR ( klogErr, ( klogErr, rc, "File '$(fname)' could not be read", "fname=%s", relpath ) );
+        else {
+            /* special kludge to prevent code from looking too far at header */
+            size_t hdr_bytes = num_read;
+            if ( num_read > 8 )
+                hdr_bytes = 8;
+
+            /* check for encrypted file */
+            if ( KFileIsEnc ( buffer, hdr_bytes ) == 0 ) {
+                encrypted = eEncrypted;
+            }
+            else if ( KFileIsWGAEnc ( buffer, hdr_bytes ) == 0 ) {
+                encrypted = eWGA;
+            }
+
+            if (encrypted != eNo) {
+                PLOGMSG ( klogInfo, ( klogInfo,
+                    "Validating $(type)encrypted file '$(fname)'...",
+                    "type=%s,fname=%s",
+                    encrypted == eWGA ? "WGA " : " ", relpath ) );
+                switch (encrypted) {
+                    case eEncrypted:
+                        rc = KEncFileValidate(f);
+                        break;
+                    case eWGA: {
+                        VFSManager *mgr = NULL;
+                        rc = VFSManagerMake(&mgr);
+                        if (rc != 0) {
+                            LOGERR(klogInt, rc, "Cannot VFSManagerMake");
+                        }
+                        else {
+                            rc = VFSManagerWGAValidateHack(mgr, f, relpath);
+                        }
+                        VFSManagerRelease(mgr);
+                        break;
+                    }
+                    default:
+                        assert(0);
+                }
+                if ( rc != 0 ) {
+                    PLOGERR ( klogErr, ( klogErr, rc,
+                        "Encrypted file '$(fname)' could not be validated",
+                        "fname=%s", relpath ) );
+                }
+                else {
+                    PLOGMSG ( klogInfo, ( klogInfo,
+                        "Encrypted file '$(fname)' appears valid",
+                        "fname=%s", relpath ) );
+
+                    rc = EncFileReadAll ( relpath, buffer, sizeof buffer,
+                        & num_read );
+                    if ( rc == 0 && KFileIsSRA ( buffer, num_read ) == 0 )
+                        is_sra = true;
+                }
+            }
+            else if ( KFileIsSRA ( buffer, num_read ) == 0 ) {
+                is_sra = true;
+            }
+        }
+
+        KFileRelease ( f );
+
+        if ( rc == 0 && is_sra )
+            rc = dbcc ( pb, relpath, true );
+    }
+
+    return rc;
+}
+
+static
+rc_t vdb_validate_database ( const vdb_validate_params *pb, const KDirectory *dir, const char *path )
+{
+    char buffer [ 4096 ];
+    const char *relpath = generate_relpath ( pb, dir, buffer, sizeof buffer, path );
+    return dbcc ( pb, relpath, false );
+}
+
+static
+rc_t vdb_validate_table ( const vdb_validate_params *pb, const KDirectory *dir, const char *path )
+{
+    char buffer [ 4096 ];
+    const char *relpath = generate_relpath ( pb, dir, buffer, sizeof buffer, path );
+    return dbcc ( pb, relpath, false );
+}
+
+static
+KPathType vdb_subdir_type ( const vdb_validate_params *pb, const KDirectory *dir, const char *name )
+{
+    char full [ 4096 ];
+    rc_t rc = KDirectoryResolvePath ( dir, true, full, sizeof full, name );
+    if ( rc == 0 )
+    {
+        switch ( KDBManagerPathType ( pb -> kmgr, full ) )
+        {
+        case kptDatabase:
+            return kptDatabase;
+        case kptTable:
+            return kptTable;
+        }
+    }
+    return kptDir;
+}
+
+static
+rc_t CC vdb_validate_dir ( const KDirectory *dir, uint32_t type, const char *name, void *data )
+{
+    switch ( type & ~ kptAlias )
+    {
+    case kptFile:
+        return vdb_validate_file ( data, dir, name );
+    case kptDir:
+        switch ( vdb_subdir_type ( data, dir, name ) )
+        {
+        case kptDatabase:
+            return vdb_validate_database ( data, dir, name );
+        case kptTable:
+            return vdb_validate_table ( data, dir, name );
+        default:
+            return KDirectoryVisit ( dir, false, vdb_validate_dir, data, name );
+        }
+    }
+
+    return 0;
+}
+
+static rc_t vdb_validate(const vdb_validate_params *pb, const char *aPath) {
+    bool bad = false;
+    const String *local = NULL;
+    VFSManager *mgr = NULL;
+    VResolver *resolver = NULL;
+    const char *path = aPath;
+    KPathType pt = kptNotFound;
+
+    rc_t rc = VFSManagerMake(&mgr);
+    if (rc != 0) {
+        LOGERR(klogInt, rc, "Cannot VFSManagerMake");
+        return rc;
+    }
+
+    rc = VFSManagerGetResolver(mgr, &resolver);
+    if (rc != 0) {
+        LOGERR(klogInt, rc, "Cannot VFSManagerGetResolver");
+    }
+    else {
+        VResolverRemoteEnable(resolver, vrAlwaysDisable);
+    }
+
+    RELEASE(VFSManager, mgr);
+
+    /* what type of thing is this path? */
+    pt = KDirectoryPathType(pb->wd, path);
+
+    if ((pt & ~kptAlias) == kptNotFound) {
+        const VPath *pLocal = NULL;
+        VPath *acc = NULL;
+        bad = true;
+        rc = VPathMake(&acc, path);
+        if (rc != 0) {
+            PLOGERR(klogErr, (klogErr, rc,
+                "VPathMake($(path)) failed", PLOG_S(path), path));
+        }
+        else {
+            rc = VResolverLocal(resolver, acc, &pLocal);
+        }
+
+        if (rc == 0) {
+            rc = VPathMakeString(pLocal, &local);
+            if (rc != 0) {
+                PLOGERR(klogErr, (klogErr, rc,
+                    "VPathMake(local $(path)) failed", PLOG_S(path), path));
+            }
+        }
+
+        if (rc == 0) {
+            path = local->addr;
+            PLOGMSG(klogInfo, (klogInfo,
+                "Validating '$(path)'...", PLOG_S(path), path));
+            pt = KDirectoryPathType(pb -> wd, path);
+            bad = false;
+        }
+
+        RELEASE(VPath, acc);
+        RELEASE(VPath, pLocal);
+    }
+    RELEASE(VResolver, resolver);
+
+    if (rc == 0) {
+        switch (pt & ~kptAlias) {
+            case kptNotFound:
+                rc = RC(rcExe, rcPath, rcValidating, rcPath, rcNotFound);
+                bad = true;
+                break;
+            case kptBadPath:
+                rc = RC(rcExe, rcPath, rcValidating, rcPath, rcInvalid);
+                bad = true;
+                break;
+            case kptFile:
+                rc = vdb_validate_file(pb, pb->wd, path);
+                break;
+            case kptDir:
+                switch(KDBManagerPathType (pb->kmgr, path)) {
+                    case kptDatabase:
+                        rc = vdb_validate_database(pb, pb->wd, path);
+                        break;
+                    case kptTable:
+                    case kptPrereleaseTbl:
+                        rc = vdb_validate_table(pb, pb->wd, path);
+                        break;
+                    case kptIndex:
+                    case kptColumn:
+                        rc = RC(rcExe, rcPath, rcValidating,
+                            rcType, rcUnsupported);
+                        bad = true;
+                        break;
+                    default:
+                        rc = KDirectoryVisit(pb -> wd, false,
+                            vdb_validate_dir, (void*)pb, path);
+                        break;
+                }
+                break;
+            default:
+                break;
+        }
+    }
+
+    free((void*)local);
+
+    if (bad) {
+        PLOGMSG ( klogWarn, ( klogWarn,
+            "Path '$(fname)' could not be validated", "fname=%s", path ) );
+    }
+
+    return rc;
+}
+
+static char const* const defaultLogLevel = 
+#if _DEBUGGING
+"debug5";
+#else
+"info";
+#endif
+
+/******************************************************************************
+ * Usage
+ ******************************************************************************/
+const char UsageDefaultName[] = "vdb-validate";
+
+rc_t CC UsageSummary(const char *prog_name)
+{
+    return KOutMsg ( "Usage: %s [options] path [ path... ]\n"
+                     "\n"
+                     , prog_name );
+}
+
+static char const *help_text[] = 
+{
+    "Check components md5s if present, "
+            "fail unless other checks are requested (default: yes)", NULL,
+    "Check blobs CRC32 (default: no)", NULL,
+    "Check 'skey' index (default: no)", NULL,
+    "Continue checking object for all possible errors (default: no)", NULL,
+    "Check data referential integrity for databases (default: no)", NULL,
+    "Check index-only with blobs CRC32 (default: no)", NULL
+};
+
+static OptDef options [] = 
+{
+    { "md5"       , "5", NULL, &help_text[0], 1, false, false }
+  , { "blob-crc"  , "b", NULL, &help_text[2], 1, false, false }
+#if CHECK_INDEX
+  , { "index"     , "i", NULL, &help_text[4], 1, false, false }
+#endif
+  , { "exhaustive", "x", NULL, &help_text[6], 1, false, false }
+  , { "referential-integrity", "d", NULL, &help_text[8], 1, false, false }
+
+    /* should be the last ones here: not printed by --help */
+  , { "dri"       , NULL, NULL, &help_text[8], 1, false, false }
+  , { "index-only",NULL, NULL, &help_text[10], 1, false, false }
+};
+
+#define NUM_SILENT_TRAILING_OPTIONS 2
+
+static const char *option_params [] =
+{
+    NULL
+  , NULL
+#if CHECK_INDEX
+  , NULL
+#endif
+  , NULL
+  , NULL
+  , NULL
+  , NULL
+};
+
+rc_t CC Usage ( const Args * args )
+{
+    uint32_t i;
+    const char *progname, *fullpath;
+    rc_t rc = ArgsProgram ( args, & fullpath, & progname );
+    if ( rc != 0 )
+        progname = fullpath = UsageDefaultName;
+    
+    UsageSummary ( progname );
+    
+    KOutMsg ( "  Examine directories, files and VDB objects,\n"
+              "  reporting any problems that can be detected.\n"
+              "\n"
+              "Options:\n"
+        );
+
+#define NUM_LISTABLE_OPTIONS \
+    ( sizeof options / sizeof options [ 0 ] - NUM_SILENT_TRAILING_OPTIONS )
+
+    for ( i = 0; i < NUM_LISTABLE_OPTIONS; ++i )
+    {
+        HelpOptionLine ( options [ i ] . aliases, options [ i ] . name,
+            option_params [ i ], options [ i ] . help );
+    }
+    
+    HelpOptionsStandard ();
+    
+    HelpVersion ( fullpath, KAppVersion () );
+    
+    return 0;
+}
+
+uint32_t CC KAppVersion ( void )
+{
+    return VDB_VALIDATE_VERS;
+}
+
+static
+rc_t parse_args ( vdb_validate_params *pb, Args *args )
+{
+    rc_t rc;
+    uint32_t cnt;
+
+    pb -> md5_chk = true;
+
+    rc = ArgsOptionCount ( args, "md5", & cnt );
+    if ( rc != 0 )
+        return rc;
+    pb -> md5_chk_explicit = md5_required = cnt != 0;
+
+    rc = ArgsOptionCount ( args, "blob-crc", & cnt );
+    if ( rc != 0 )
+        return rc;
+    pb -> blob_crc = cnt != 0;
+
+    rc = ArgsOptionCount ( args, "exhaustive", & cnt );
+    if ( rc != 0 )
+        return rc;
+    exhaustive = cnt != 0;
+
+    rc = ArgsOptionCount ( args, "referential-integrity", & cnt );
+    if ( rc != 0 )
+        return rc;
+    ref_int_check = cnt != 0;
+
+    rc = ArgsOptionCount ( args, "dri", & cnt );
+    if ( rc != 0 )
+        return rc;
+    ref_int_check = cnt != 0;
+
+#if CHECK_INDEX
+    rc = ArgsOptionCount ( args, "index", & cnt );
+    if ( rc != 0 )
+        return rc;
+    pb -> index_chk = cnt != 0;
+#endif
+
+    rc = ArgsOptionCount ( args, "index-only", & cnt );
+    if ( rc != 0 )
+        return rc;
+    if ( cnt != 0 )
+        s_IndexOnly = pb -> blob_crc = true;
+
+    if ( pb -> blob_crc || pb -> index_chk )
+        pb -> md5_chk = pb -> md5_chk_explicit;
+
+    return 0;
+}
+
+static
+void vdb_validate_params_whack ( vdb_validate_params *pb )
+{
+    VDBManagerRelease ( pb -> vmgr );
+    KDBManagerRelease ( pb -> kmgr );
+    KDirectoryRelease ( pb -> wd );
+    memset ( pb, 0, sizeof * pb );
+}
+
+static
+rc_t vdb_validate_params_init ( vdb_validate_params *pb )
+{
+    rc_t rc;
+    KDirectory *wd;
+
+    memset ( pb, 0, sizeof * pb );
+
+    rc = KDirectoryNativeDir ( & wd );
+    if ( rc == 0 )
+    {
+        pb -> wd = wd;
+        rc = VDBManagerMakeRead ( & pb -> vmgr, wd );
+        if ( rc == 0 )
+        {
+            rc = VDBManagerOpenKDBManagerRead ( pb -> vmgr, & pb -> kmgr );
+            if ( rc == 0 )
+                return 0;
+        }
+    }
+
+    vdb_validate_params_whack ( pb );
+    return rc;
+}
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args * args;
+    rc_t rc = ArgsMakeAndHandle ( & args, argc, argv, 1,
+        options, sizeof options / sizeof options [ 0 ] );
+    if ( rc != 0 )
+        LOGERR ( klogErr, rc, "Failed to parse command line" );
+    else
+    {
+        uint32_t pcount;
+        rc = ArgsParamCount ( args, & pcount );
+        if ( rc != 0 )
+            LOGERR ( klogErr, rc, "Failed to count command line parameters" );
+        else if ( argc <= 1 )
+        {
+            rc = RC ( rcExe, rcPath, rcValidating, rcParam, rcInsufficient );
+            MiniUsage ( args );
+        }
+        else if ( pcount == 0 )
+        {
+            rc = RC ( rcExe, rcPath, rcValidating, rcParam, rcInsufficient );
+            LOGERR ( klogErr, rc, "No paths to validate" );
+            MiniUsage ( args );
+        }
+        else
+        {
+            vdb_validate_params pb;
+            rc = vdb_validate_params_init ( & pb );
+            if ( rc != 0 )
+                LOGERR ( klogErr, rc, "Failed to initialize internal managers" );
+            else
+            {
+                rc = parse_args ( & pb, args );
+                if ( rc != 0 )
+                    LOGERR ( klogErr, rc, "Failed to extract command line options" );
+                else
+                {
+                    rc = KLogLevelSet ( klogInfo );
+                    if ( rc != 0 )
+                        LOGERR ( klogErr, rc, "Failed to set log level" );
+                    else
+                    {
+                        uint32_t i;
+                        for ( i = 0; i < pcount; ++ i )
+                        {
+                            rc_t rc2;
+                            const char *path;
+                            rc = ArgsParamValue ( args, i, & path );
+                            if ( rc != 0 )
+                            {
+                                LOGERR ( klogErr, rc, "Failed to extract command line options" );
+                                break;
+                            }
+
+                            rc2 = vdb_validate ( & pb, path );
+                            if ( rc == 0 )
+                                rc = rc2;
+                        }
+                    }
+                }
+
+                vdb_validate_params_whack ( & pb );
+            }
+        }
+
+        ArgsWhack ( args );
+    }
+
+    return rc;
+}
+
+
+
+
+
+#if 0
+
+
+rc_t CC KMain ( int argc, char *argv [] )
+{
+    Args * args;
+    char *src_dir_path = NULL;
+    char *src_path = NULL;
+    char *obj_name = NULL;
+    bool md5_chk = true, md5_chk_explicit = false;
+    bool blob_crc = false;
+    bool index_chk = false;
+    bool is_file = false;
+    const KDirectory *src_dir = NULL;
+    char path_buffer [ 4096 ];
+
+    rc_t rc = KLogLevelSet ( klogInfo );
+
+    if ( rc == 0 )
+    {
+        rc = ArgsMakeAndHandle ( & args, argc, argv, 1,
+            options, sizeof options / sizeof options [ 0 ] );
+    }
+    
+    while (rc == 0)
+    {
+        uint32_t pcount;
+        rc = ArgsParamCount(args, &pcount);
+        if ( rc != 0 )
+            break;
+
+        if (pcount == 1)
+        {
+            KDirectory *dir;
+            rc = KDirectoryNativeDir(&dir);
+            if (rc == 0)
+            {
+                char const *value;
+                
+                rc = ArgsParamValue (args, 0, &value); if (rc) break;
+                src_dir_path = string_dup_measure(value, NULL);
+                src_path = string_dup_measure(value, NULL);
+                obj_name = strrchr(src_dir_path, '/');
+                if ( obj_name != NULL && obj_name [ 1 ] == 0 )
+                {
+                    * obj_name = 0;
+                    obj_name = strrchr(src_dir_path, '/');
+                }
+                if (obj_name != NULL)
+                {
+                    if (obj_name == src_dir_path) {
+                        src_dir_path[0] = '/';
+                        src_dir_path[1] = '\0';
+                    }
+                    *obj_name++ = '\0';
+                }
+                else
+                {
+                    SRAPath *pmgr = NULL;
+
+                    /* check for accession */
+                    rc = SRAPathMake ( & pmgr, dir );
+                    if ( rc == 0 )
+                    {
+                        rc = SRAPathFind(pmgr,
+                            src_path, path_buffer, sizeof path_buffer);
+                        if ( rc == 0 )
+                        {
+                            /* use mapped path */
+                            free(src_path);
+                            src_path = string_dup_measure(path_buffer, NULL);
+                            free(src_dir_path);
+                            src_dir_path
+                                = string_dup_measure(path_buffer, NULL);
+                            obj_name = strrchr(src_dir_path, '/');
+                            if ( obj_name == NULL )
+                                obj_name = src_dir_path;
+                            else
+                            {
+                                if ( obj_name == src_dir_path ) {
+                                    src_dir_path[0] = '/';
+                                    src_dir_path[1] = '\0';
+                                }
+                                * obj_name ++ = '\0';
+                            }
+                        }
+                        
+                        (void)SRAPathRelease ( pmgr );
+                    }
+                    
+                    if ( rc != 0 )
+                    {
+                        /* appears to be a simple name */
+                        obj_name = string_dup_measure(src_dir_path, NULL);
+                        src_dir_path[0] = '.';
+                        src_dir_path[1] = '\0';
+                    }
+                }
+                
+                rc = KDirectoryOpenDirRead(dir, &src_dir, false, src_dir_path);
+                KDirectoryRelease(dir);
+                if (rc) {
+                    (void)PLOGERR(klogErr, (klogErr, rc,
+                        "Failed to open '$(dir)'", "dir=%s", src_dir_path));
+                    break;
+                }
+                else {
+                    uint32_t const obj_type = KDirectoryPathType(src_dir,
+                        obj_name) & (~((uint32_t)kptAlias));
+                    
+                    switch (obj_type) {
+                    case kptFile:
+                        is_file = true;
+                        break;
+                    default:
+                        break;
+                    }
+                }
+            }
+        }
+        else {
+            MiniUsage(args);
+            ArgsWhack(args);
+            exit(EXIT_FAILURE);
+        }
+        
+        rc = ArgsOptionCount(args, "md5", &pcount); if (rc) break;
+        md5_chk_explicit = md5_required = (pcount == 1);
+        if (pcount > 1) {
+            KOutMsg("argument given too many times\n");
+            MiniUsage(args);
+            break;
+        }
+        
+        rc = ArgsOptionCount(args, "blob-crc", &pcount); if (rc) break;
+        blob_crc = (pcount == 1);
+        if (pcount > 1) {
+            KOutMsg("argument given too many times\n");
+            MiniUsage(args);
+            break;
+        }
+        
+        rc = ArgsOptionCount(args, "exhaustive", &pcount); if (rc) break;
+        exhaustive = (pcount == 1);
+        if (pcount > 1) {
+            KOutMsg("argument given too many times\n");
+            MiniUsage(args);
+            break;
+        }
+        
+        rc = ArgsOptionCount(args, "dri", &pcount); if (rc) break;
+        ref_int_check = (pcount == 1);
+        if (pcount > 1) {
+            KOutMsg("argument given too many times\n");
+            MiniUsage(args);
+            break;
+        }
+        
+#if CHECK_INDEX
+        rc = ArgsOptionCount(args, "index", &pcount); if (rc) break;
+        index_chk = (pcount == 1);
+        if (pcount > 1) {
+            KOutMsg("argument given too many times\n");
+            MiniUsage(args);
+            break;
+        }
+#endif
+
+        rc = ArgsOptionCount(args, "index-only", &pcount);
+        if (rc) {
+            break;
+        }
+        if (pcount > 0) {
+            s_IndexOnly = blob_crc = true;
+        }
+            
+
+        if (blob_crc || index_chk)
+        {
+            /* if blob or index is requested,
+               md5 is off unless explicitly requested */
+            md5_chk = md5_chk_explicit;
+        }
+        
+        {
+            KPathType pathType = kptBadPath;
+            Bool enc = false;
+            rc = dbcc(src_path, src_dir, obj_name,
+                      (md5_chk ? 1 : 0)|(blob_crc ? 2 : 0)|(index_chk ? 4 : 0),
+                      & pathType, is_file, &enc);
+            if ( pathType == kptDatabase )
+            {
+                if (rc != 0) {
+                    (void)PLOGERR(klogErr, (klogErr, rc,
+                                            "Database '$(db)' check failed", PLOG_S(db), obj_name));
+                }
+                else {
+                    (void)PLOGMSG(klogInfo, (klogInfo,
+                                             "Database '$(db)' is consistent", PLOG_S(db), obj_name));
+                }
+            }
+            else if ( pathType == kptTable )
+            {
+                if (rc != 0) {
+                    (void)PLOGERR(klogErr, (klogErr, rc, "Table '$(table)' "
+                                            "check failed", PLOG_S(table), obj_name));
+                }
+                else {
+                    (void)PLOGMSG(klogInfo, (klogInfo, "Table '$(table)' "
+                                             "is consistent", PLOG_S(table), obj_name));
+                }
+            }
+            else if (pathType != kptFile)
+            {
+                if (rc != 0) {
+                    if (UIError(rc, NULL, NULL)) {
+                        const char *c = UIDatabaseGetErrorString(rc);
+                        if (c != NULL)
+                        {   (void)LOGMSG(klogInfo, c); }
+                        else {
+                            (void)PLOGERR(klogErr, (klogErr, rc, "'$(table)' "
+                                                    "check failed", PLOG_S(table), obj_name));
+                        }
+                        if (enc) {
+                            rc = 0;
+                            (void)PLOGMSG(klogInfo, (klogInfo, "File '$(f)' "
+                                                     "is consistent", PLOG_S(f), obj_name));
+                        }
+                        else {
+                            (void)PLOGERR(klogErr, (klogErr, rc, "File '$(f)'"
+                                                    " check failed", PLOG_S(f), obj_name));
+                        }
+                    }
+                }
+                else {
+                    rc = RC(rcExe, rcPath, rcValidating, rcType, rcUnknown);
+                    (void)PLOGERR(klogErr, (klogErr, rc,
+                                            "Object $(table)' check failed: it has un unknown type",
+                                            PLOG_S(table), obj_name));
+                }
+            }
+        }
+        break;
+    }
+    
+    free(src_path);
+    KDirectoryRelease(src_dir);
+    
+    return rc;
+}
+
+#endif
diff --git a/tools/vdb-validate/vdb-validate.vers b/tools/vdb-validate/vdb-validate.vers
new file mode 100644
index 0000000..f90b1af
--- /dev/null
+++ b/tools/vdb-validate/vdb-validate.vers
@@ -0,0 +1 @@
+2.3.2

-- 
Alioth's /git/debian-med/git-commit-notice on /srv/git.debian.org/git/debian-med/sra-sdk.git



More information about the debian-med-commit mailing list